ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGM1ZjgxOWIuLjI3M2Q3MmIgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMzgwLDcgKzM4MCw3IEBACiBTOiBCcnVuc3dpY2sgSG91c2UsIDYxLTY5IE5ld21hcmtldCBSZCwgQ2FtYnJpZGdlIENCNSA4RUcKIFM6IFVuaXRlZCBLaW5nZG9tCiAKLU46IFRob21hcyBCb2dlbmT2cmZlcgorTjogVGhvbWFzIEJvZ2VuZMO2cmZlcgogRTogdHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZQogRDogUENuZXQzMiBkcml2ZXIsIFNPTklDIGRyaXZlciwgSkFaWl9FU1AgZHJpdmVyCiBEOiBuZXdwb3J0IGFic2NvbiBkcml2ZXIsIGczNjQgZnJhbWVidWZmZXIgZHJpdmVyCkBAIC00MDAsNyArNDAwLDcgQEAKIEQ6IENvbmZpZ3VyYXRpb24gaGVscCB0ZXh0IHN1cHBvcnQKIEQ6IExpbnV4IENEIGFuZCBTdXBwb3J0IEdpdmVhd2F5IExpc3QKIAotTjogRXJpayBJbmdlIEJvbHP4CitOOiBFcmlrIEluZ2UgQm9sc8O4CiBFOiBrbmFuQG1vLmhpbW9sZGUubm8KIEQ6IE1pc2Mga2VybmVsIGhhY2tzCiAKQEAgLTQyOCw3ICs0MjgsNyBAQAogUzogTW9udHJlYWwsIFF1ZWJlYwogUzogQ2FuYWRhCiAKLU46IFpvbHThbiBC9nN69nJt6W55aQorTjogWm9sdMOhbiBCw7ZzesO2cm3DqW55aQogRTogemJvc3pvckBtYWlsLmV4dGVybmV0Lmh1CiBEOiBNVFJSIGVtdWxhdGlvbiB3aXRoIEN5cml4IHN0eWxlIEFSUiByZWdpc3RlcnMsIEF0aGxvbiBNVFJSIHN1cHBvcnQKIApAQCAtNjYxLDcgKzY2MSw3IEBACiBFOiBrZWVzQG91dGZsdXgubmV0CiBXOiBodHRwOi8vb3V0Zmx1eC5uZXQvCiBQOiAxMDI0RC8xNzA2M0U2RCA5RkEzIEM0OUMgMjNDOSBEMUJDIDJFMzAgIDE5NzUgMUZGRiA0QkE5IDE3MDYgM0U2RAotRDogTWlub3IgdXBkYXRlcyB0byBTQ1NJIGNvZGUgZm9yIHRoZSBDb21tdW5pY2F0aW9ucyB0eXBlCitEOiBNaW5vciB1cGRhdGVzIHRvIFNDU0kgdHlwZXMsIGFkZGVkIC9wcm9jL3BpZC9tYXBzIHByb3RlY3Rpb24KIFM6IChhc2sgZm9yIGN1cnJlbnQgYWRkcmVzcykKIFM6IFVTQQogCkBAIC0xMDI5LDExICsxMDI5LDExIEBACiBEOiBBUE0gZHJpdmVyIChlYXJseSBwb3J0KQogRDogRFJNIGRyaXZlcnMgKGF1dGhvciBvZiBzZXZlcmFsKQogCi1OOiBK4W5vcyBGYXJrYXMKK046IErDoW5vcyBGYXJrYXMKIEU6IGNoZXh1bUBzaGFkb3cuYmFua2kuaHUKIEQ6IHJvbWZzLCB2YXJpb3VzIChtb3N0bHkgbmV0d29ya2luZykgZml4ZXMKIFA6IDEwMjQvRjgxRkIyRTEgNDEgQjcgRTQgRTYgM0UgRDQgQTYgNzEgIDZEIDlDIEYzIDlGIEYyIEJGIERGIDZFCi1TOiBNYWRhcuFzeiBWaWt0b3IgdXRjYSAyNQorUzogTWFkYXLDoXN6IFZpa3RvciB1dGNhIDI1CiBTOiAxMTMxIEJ1ZGFwZXN0CiBTOiBIdW5nYXJ5CiAKQEAgLTEwNDQsMTAgKzEwNDQsMTAgQEAKIFM6IChhc2sgZm9yIGN1cnJlbnQgYWRkcmVzcykKIFM6IFVTQQogCi1OOiBK/HJnZW4gRmlzY2hlcgotRTogZmlzY2hlckBub3JiaXQuZGUgKD0/aXNvLTg4NTktMT9xP0o9RkNyZ2VuPz0gRmlzY2hlcikKK046IErDvHJnZW4gRmlzY2hlcgorRTogZmlzY2hlckBub3JiaXQuZGUKIEQ6IEF1dGhvciBvZiBBZGFwdGVjIEFIQS0xNTJ4IFNDU0kgZHJpdmVyCi1TOiBTY2h1bHN0cmHfZSAxOAorUzogU2NodWxzdHJhw59lIDE4CiBTOiAyNjUwNiBOb3JkZW4KIFM6IEdlcm1hbnkKIApAQCAtMTExMyw3ICsxMTEzLDcgQEAKIEQ6IHJhbmRvbSBrZXJuZWwgaGFja2VyLCBaRiBNYWNoWiBXYXRjaGRvZyBkcml2ZXIKIFM6IENvbmVjdGl2YSBTLkEuCiBTOiBSLiBUb2NhbnRpbnMsIDg5IC0gQ3Jpc3RvIFJlaQotUzogODAwNTAtNDMwIC0gQ3VyaXRpYmEgLSBQYXJhbuEKK1M6IDgwMDUwLTQzMCAtIEN1cml0aWJhIC0gUGFyYW7DoQogUzogQnJhemlsCiAKIE46IEt1bWFyIEdhbGEKQEAgLTEyNTgsMTIgKzEyNTgsMTIgQEAKIFM6IFRvcm9udG8sIE9udGFyaW8sIE00WSAyVzQKIFM6IENhbmFkYQogCi1OOiBSaWNoYXJkIEf8bnRoZXIKK046IFJpY2hhcmQgR8O8bnRoZXIKIEU6IHJndWVudGhAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlCiBXOiBodHRwOi8vd3d3LnRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZS9+cmd1ZW50aAogUDogMjA0OC8yRTgyOTMxOSAyRiA4MyBGQyA5MyBFOSBFNCAxOSBFMiAgOTMgN0EgMzIgNDIgNDUgMzcgMjMgNTcKIEQ6IGJpbmZtdF9taXNjCi1TOiA3MjA3NCBU/GJpbmdlbgorUzogNzIwNzQgVMO8YmluZ2VuCiBTOiBHZXJtYW55CiAKIE46IEp1c3RpbiBHdXlldHQKQEAgLTEyODcsNyArMTI4Nyw3IEBACiBFOiBoYWlibGVAbWEyczIubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlCiBEOiBTeXNWIEZTLCBzaG0gc3dhcHBpbmcsIG1lbW9yeSBtYW5hZ2VtZW50IGZpeGVzCiBTOiAxNyBydWUgRGFudG9uCi1TOiBGIC0gOTQyNzAgTGUgS3JlbWxpbi1CaWPqdHJlCitTOiBGIC0gOTQyNzAgTGUgS3JlbWxpbi1CaWPDqnRyZQogUzogRnJhbmNlCiAKIE46IEdyZWcgSGFua2lucwpAQCAtMTcwMSw3ICsxNzAxLDcgQEAKIE46IEpha29iIEtlbWkKIEU6IGpha29iLmtlbWlAdGVsaWEuY29tCiBEOiBWNEwgVzk5NjYgV2ViY2FtIGRyaXZlcgotUzogRm9yc2J5duRnZW4gMzMKK1M6IEZvcnNieXbDpGdlbiAzMwogUzogNzQxNDMgS25pdnN0YQogUzogU3dlZGVuCiAKQEAgLTIwNjUsNyArMjA2NSw3IEBACiBTOiBDYW1icmlkZ2UsIE1BIDAyMTM5CiBTOiBVU0EKIAotTjogTWFydGluIHZvbiBM9ndpcworTjogTWFydGluIHZvbiBMw7Z3aXMKIEU6IGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZQogRDogc2NyaXB0IGJpbmFyeSBmb3JtYXQKIEQ6IE5URlMgZHJpdmVyCkBAIC0yMTQyLDcgKzIxNDIsNyBAQAogUzogSGFsaWZheCwgTm92YSBTY290aWEKIFM6IENhbmFkYSBCM0ogM0M4CiAKLU46IEthaSBN5Gtpc2FyYQorTjogS2FpIE3DpGtpc2FyYQogRTogS2FpLk1ha2lzYXJhQGtvbHVtYnVzLmZpCiBEOiBTQ1NJIFRhcGUgRHJpdmVyCiAKQEAgLTIyOTksOCArMjI5OSw4IEBACiBXOiBodHRwOi8vb29wcy5naG9zdHByb3RvY29scy5uZXQ6ODEvYmxvZy8KIFA6IDEwMjRELzkyMjRERjAxIEQ1REYgRTNCQiBFM0M4IEJDQkIgRjhBRCAgODQxQSBCNkFCIDQ2ODEgOTIyNCBERjAxCiBEOiBJUFgsIExMQywgRENDUCwgY3ljMngsIHdsMzUwMV9jcywgbmV0LyBoYWNrcwotUzogUi4gQnJhc+1saW8gSXRpYmVy6iwgNDI3MC8xMDEwIC0gwWd1YSBWZXJkZQotUzogODAyNDAtMDYwIC0gQ3VyaXRpYmEgLSBQYXJhbuEKK1M6IFIuIEJyYXPDrWxpbyBJdGliZXLDqiwgNDI3MC8xMDEwIC0gw4FndWEgVmVyZGUKK1M6IDgwMjQwLTA2MCAtIEN1cml0aWJhIC0gUGFyYW7DoQogUzogQnJhemlsCiAKIE46IEthcnN0ZW4gTWVya2VyCkBAIC0yNTgwLDEwICsyNTgwLDkgQEAKIAogTjogTWlndWVsIE9qZWRhIFNhbmRvbmlzCiBFOiBtYXhleHRyZW1lQGdtYWlsLmNvbQotRDogQXV0aG9yOiBBdXhpbGlhcnkgTENEIENvbnRyb2xsZXIgZHJpdmVyIChrczAxMDgpCi1EOiBBdXRob3I6IEF1eGlsaWFyeSBMQ0QgZHJpdmVyIChjZmFnMTI4NjRiKQotRDogQXV0aG9yOiBBdXhpbGlhcnkgTENEIGZyYW1lYnVmZmVyIGRyaXZlciAoY2ZhZzEyODY0YmZiKQotRDogTWFpbnRhaW5lcjogQXV4aWxpYXJ5IGRpc3BsYXkgZHJpdmVycyB0cmVlIChkcml2ZXJzL2F1eGRpc3BsYXkvKikKK1c6IGh0dHA6Ly9tYXhleHRyZW1lLmdvb2dsZXBhZ2VzLmNvbS8KK0Q6IEF1dGhvciBvZiB0aGUga3MwMTA4LCBjZmFnMTI4NjRiIGFuZCBjZmFnMTI4NjRiZmIgYXV4aWxpYXJ5IGRpc3BsYXkgZHJpdmVycy4KK0Q6IE1haW50YWluZXIgb2YgdGhlIGF1eGlsaWFyeSBkaXNwbGF5IGRyaXZlcnMgdHJlZSAoZHJpdmVycy9hdXhkaXNwbGF5LyopCiBTOiBDLyBNaWVzZXMgMjAsIDktQgogUzogVmFsbGFkb2xpZCA0NzAwOQogUzogU3BhaW4KQEAgLTI3ODYsMTAgKzI3ODUsMTAgQEAKIEU6IHF1aW50ZWxhQGZpLnVkYy5lcwogRDogTWVtb3J5IE1hbmFnZW1lbnQgaGFja2luZwogUzogTEZDSUEKLVM6IERlcGFydGFtZW50byBkZSBDb21wdXRhY2nzbgotUzogVW5pdmVyc2lkYWRlIGRhIENvcnXxYQorUzogRGVwYXJ0YW1lbnRvIGRlIENvbXB1dGFjacOzbgorUzogVW5pdmVyc2lkYWRlIGRhIENvcnXDsWEKIFM6IEUtMTUwNzEKLVM6IEEgQ29ydfFhCitTOiBBIENvcnXDsWEKIFM6IFNwYWluCiAKIE46IEF1Z3VzdG8gQ2VzYXIgUmFkdGtlCkBAIC0yOTQwLDcgKzI5MzksNyBAQAogRDogU3VwcG9ydCBmb3IgRXRoZXJFeHByZXNzIDEwIElTQSAoaTgyNTk1KSBpbiBlZXBybyBkcml2ZXIKIEQ6IFVzZXIgbGV2ZWwgZHJpdmVyIHN1cHBvcnQgZm9yIGlucHV0CiBTOiBSLiBKb3NlIFNlcnJhdG8sIDEzMCAtIFNhbnRhIENhbmRpZGEKLVM6IDgyNjQwLTMyMCAtIEN1cml0aWJhIC0gUGFyYW7hCitTOiA4MjY0MC0zMjAgLSBDdXJpdGliYSAtIFBhcmFuw6EKIFM6IEJyYXppbAogCiBOOiBBbGVzc2FuZHJvIFJ1YmluaQpAQCAtMzM0NiwxNSArMzM0NSwxNSBAQAogRDogcmN1dG9ydHVyZSBtYWludGFpbmVyCiBEOiBsb2NrIGFubm90YXRpb25zLCBmaW5kaW5nIGFuZCBmaXhpbmcgbG9jayBidWdzCiAKLU46IFdpbmZyaWVkIFRy/G1wZXIKK046IFdpbmZyaWVkIFRyw7xtcGVyCiBFOiB3aW5uaUB4cGlsb3Qub3JnCiBXOiBodHRwOi8vd3d3LnNob3AuZGUvfndpbm5pLwogRDogR2VybWFuIEhPV1RPLCBDcmFzaC1LdXJzIExpbnV4IChHZXJtYW4sIDEwMCBjb21wcmVoZW5zaXZlIHBhZ2VzKQogRDogQ0QtV3JpdGluZyBIT1dUTywgdmFyaW91cyBtaW5pLUhPV1RPcwogRDogT25lLXdlZWsgdHV0b3JpYWxzIG9uIExpbnV4IHR3aWNlIGEgeWVhciAoZnJlZSBvZiBjaGFyZ2UpCi1EOiBMaW51eC1Xb3Jrc2hvcCBL9mxuIChha2EgTFVHIENvbG9nbmUsIEdlcm1hbnkpLCBJbnN0YWxsZmVzdHMKK0Q6IExpbnV4LVdvcmtzaG9wIEvDtmxuIChha2EgTFVHIENvbG9nbmUsIEdlcm1hbnkpLCBJbnN0YWxsZmVzdHMKIFM6IFRhY2l0dXNzdHIuIDYKLVM6IEQtNTA5NjggS/ZsbgorUzogRC01MDk2OCBLw7ZsbgogCiBOOiBUc3UtU2hlbmcgVHNhbwogRTogdHN1c2hlbmdAc2NmLnVzYy5lZHUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3JlbW92ZWQvZGV2ZnMgYi9Eb2N1bWVudGF0aW9uL0FCSS9yZW1vdmVkL2RldmZzCmluZGV4IDgxOTVjNGUuLjhmZmQyOGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3JlbW92ZWQvZGV2ZnMKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvcmVtb3ZlZC9kZXZmcwpAQCAtNiw3ICs2LDcgQEAKIAlyYWNlcywgY29udGFpbnMgYSBuYW1pbmcgcG9saWN5IHdpdGhpbiB0aGUga2VybmVsIHRoYXQgaXMKIAlhZ2FpbnN0IHRoZSBMU0IsIGFuZCBjYW4gYmUgcmVwbGFjZWQgYnkgdXNpbmcgdWRldi4KIAlUaGUgZmlsZXMgZnMvZGV2ZnMvKiwgaW5jbHVkZS9saW51eC9kZXZmc19mcyouaCB3ZXJlIHJlbW92ZWQsCi0JYWxvbmcgd2l0aCB0aGUgdGhlIGFzc29ydGVkIGRldmZzIGZ1bmN0aW9uIGNhbGxzIHRocm91Z2hvdXQgdGhlCisJYWxvbmcgd2l0aCB0aGUgYXNzb3J0ZWQgZGV2ZnMgZnVuY3Rpb24gY2FsbHMgdGhyb3VnaG91dCB0aGUKIAlrZXJuZWwgdHJlZS4KIAogVXNlcnM6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0JVRy1IVU5USU5HIGIvRG9jdW1lbnRhdGlvbi9CVUctSFVOVElORwppbmRleCA2NWI5N2UxLi4zNWY1YmQyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0JVRy1IVU5USU5HCisrKyBiL0RvY3VtZW50YXRpb24vQlVHLUhVTlRJTkcKQEAgLTE5MSw2ICsxOTEsMzAgQEAKID4gICAgICAgIG1vdiAgICAgICAgMHg4KCVlYnApLCAlZWJ4ICAgICAgICAgISAlZWJ4ID0gc2tiLT5zawogPiAgICAgICAgbW92ICAgICAgICAweDEzYyglZWJ4KSwgJWVheCAgICAgICAhICVlYXggPSBpbmV0X3NrKHNrKS0+b3B0CiAKK0luIGFkZGl0aW9uLCB5b3UgY2FuIHVzZSBHREIgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgZmlsZSBhbmQgbGluZQorbnVtYmVyIG9mIHRoZSBPT1BTIGZyb20gdGhlIHZtbGludXggZmlsZS4gSWYgeW91IGhhdmUKK0NPTkZJR19ERUJVR19JTkZPIGVuYWJsZWQsIHlvdSBjYW4gc2ltcGx5IGNvcHkgdGhlIEVJUCB2YWx1ZSBmcm9tIHRoZQorT09QUzoKKworIEVJUDogICAgMDA2MDpbPGMwMjFlNTBlPl0gICAgTm90IHRhaW50ZWQgVkxJCisKK0FuZCB1c2UgR0RCIHRvIHRyYW5zbGF0ZSB0aGF0IHRvIGh1bWFuLXJlYWRhYmxlIGZvcm06CisKKyAgZ2RiIHZtbGludXgKKyAgKGdkYikgbCAqMHhjMDIxZTUwZQorCitJZiB5b3UgZG9uJ3QgaGF2ZSBDT05GSUdfREVCVUdfSU5GTyBlbmFibGVkLCB5b3UgdXNlIHRoZSBmdW5jdGlvbgorb2Zmc2V0IGZyb20gdGhlIE9PUFM6CisKKyBFSVAgaXMgYXQgdnRfaW9jdGwrMHhkYTgvMHgxNDgyCisKK0FuZCByZWNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIENPTkZJR19ERUJVR19JTkZPIGVuYWJsZWQ6CisKKyAgbWFrZSB2bWxpbnV4CisgIGdkYiB2bWxpbnV4CisgIChnZGIpIHAgdnRfaW9jdGwKKyAgKGdkYikgbCAqKDB4PGFkZHJlc3Mgb2YgdnRfaW9jdGw+ICsgMHhkYTgpCisKIEFub3RoZXIgdmVyeSB1c2VmdWwgb3B0aW9uIG9mIHRoZSBLZXJuZWwgSGFja2luZyBzZWN0aW9uIGluIG1lbnVjb25maWcgaXMKIERlYnVnIG1lbW9yeSBhbGxvY2F0aW9ucy4gVGhpcyB3aWxsIGhlbHAgeW91IHNlZSB3aGV0aGVyIGRhdGEgaGFzIGJlZW4KIGluaXRpYWxpc2VkIGFuZCBub3Qgc2V0IGJlZm9yZSB1c2UgZXRjLiBUbyBzZWUgdGhlIHZhbHVlcyB0aGF0IGdldCBhc3NpZ25lZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZSBiL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKaW5kZXggOTA2OTE4OS4uYjQ5YjkyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCkBAIC0xNjAsNiArMTYwLDIxIEBACiAyNS1saW5lIHRlcm1pbmFsIHNjcmVlbnMgaGVyZSksIHlvdSBoYXZlIG1vcmUgZW1wdHkgbGluZXMgdG8gcHV0CiBjb21tZW50cyBvbi4KIAorRG8gbm90IHVubmVjZXNzYXJpbHkgdXNlIGJyYWNlcyB3aGVyZSBhIHNpbmdsZSBzdGF0ZW1lbnQgd2lsbCBkby4KKworaWYgKGNvbmRpdGlvbikKKwlhY3Rpb24oKTsKKworVGhpcyBkb2VzIG5vdCBhcHBseSBpZiBvbmUgYnJhbmNoIG9mIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IGlzIGEgc2luZ2xlCitzdGF0ZW1lbnQuIFVzZSBicmFjZXMgaW4gYm90aCBicmFuY2hlcy4KKworaWYgKGNvbmRpdGlvbikgeworCWRvX3RoaXMoKTsKKwlkb190aGF0KCk7Cit9IGVsc2UgeworCW90aGVyd2lzZSgpOworfQorCiAJCTMuMTogIFNwYWNlcwogCiBMaW51eCBrZXJuZWwgc3R5bGUgZm9yIHVzZSBvZiBzcGFjZXMgZGVwZW5kcyAobW9zdGx5KSBvbgpAQCAtNDgwLDI5ICs0OTUsNDAgQEAKIHJlbWVtYmVyOiAiaW5kZW50IiBpcyBub3QgYSBmaXggZm9yIGJhZCBwcm9ncmFtbWluZy4KIAogCi0JCUNoYXB0ZXIgMTA6IENvbmZpZ3VyYXRpb24tZmlsZXMKKwkJQ2hhcHRlciAxMDogS2NvbmZpZyBjb25maWd1cmF0aW9uIGZpbGVzCiAKLUZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGFyY2gveHh4L0tjb25maWcsIGFuZCBhbGwgdGhlIEtjb25maWcgZmlsZXMpLAotc29tZXdoYXQgZGlmZmVyZW50IGluZGVudGF0aW9uIGlzIHVzZWQuCitGb3IgYWxsIG9mIHRoZSBLY29uZmlnKiBjb25maWd1cmF0aW9uIGZpbGVzIHRocm91Z2hvdXQgdGhlIHNvdXJjZSB0cmVlLAordGhlIGluZGVudGF0aW9uIGlzIHNvbWV3aGF0IGRpZmZlcmVudC4gIExpbmVzIHVuZGVyIGEgImNvbmZpZyIgZGVmaW5pdGlvbgorYXJlIGluZGVudGVkIHdpdGggb25lIHRhYiwgd2hpbGUgaGVscCB0ZXh0IGlzIGluZGVudGVkIGFuIGFkZGl0aW9uYWwgdHdvCitzcGFjZXMuICBFeGFtcGxlOgogCi1IZWxwIHRleHQgaXMgaW5kZW50ZWQgd2l0aCAyIHNwYWNlcy4KLQotaWYgQ09ORklHX0VYUEVSSU1FTlRBTAotCXRyaXN0YXRlIENPTkZJR19CT09NCi0JZGVmYXVsdCBuCitjb25maWcgQVVESVQKKwlib29sICJBdWRpdGluZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gTkVUCiAJaGVscAotCSAgQXBwbHkgbml0cm9nbHljZXJpbmUgaW5zaWRlIHRoZSBrZXlib2FyZCAoREFOR0VST1VTKQotCWJvb2wgQ09ORklHX0NIRUVSCi0JZGVwZW5kcyBvbiBDT05GSUdfQk9PTQotCWRlZmF1bHQgeQotCWhlbHAKLQkgIE91dHB1dCBuaWNlIG1lc3NhZ2VzIHdoZW4geW91IGV4cGxvZGUKLWVuZGlmCisJICBFbmFibGUgYXVkaXRpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGFub3RoZXIKKwkgIGtlcm5lbCBzdWJzeXN0ZW0sIHN1Y2ggYXMgU0VMaW51eCAod2hpY2ggcmVxdWlyZXMgdGhpcyBmb3IKKwkgIGxvZ2dpbmcgb2YgYXZjIG1lc3NhZ2VzIG91dHB1dCkuICBEb2VzIG5vdCBkbyBzeXN0ZW0tY2FsbAorCSAgYXVkaXRpbmcgd2l0aG91dCBDT05GSUdfQVVESVRTWVNDQUxMLgogCi1HZW5lcmFsbHksIENPTkZJR19FWFBFUklNRU5UQUwgc2hvdWxkIHN1cnJvdW5kIGFsbCBvcHRpb25zIG5vdCBjb25zaWRlcmVkCi1zdGFibGUuIEFsbCBvcHRpb25zIHRoYXQgYXJlIGtub3duIHRvIHRyYXNoIGRhdGEgKGV4cGVyaW1lbnRhbCB3cml0ZS0KLXN1cHBvcnQgZm9yIGZpbGUtc3lzdGVtcywgZm9yIGluc3RhbmNlKSBzaG91bGQgYmUgZGVub3RlZCAoREFOR0VST1VTKSwgb3RoZXIKLWV4cGVyaW1lbnRhbCBvcHRpb25zIHNob3VsZCBiZSBkZW5vdGVkIChFWFBFUklNRU5UQUwpLgorRmVhdHVyZXMgdGhhdCBtaWdodCBzdGlsbCBiZSBjb25zaWRlcmVkIHVuc3RhYmxlIHNob3VsZCBiZSBkZWZpbmVkIGFzCitkZXBlbmRlbnQgb24gIkVYUEVSSU1FTlRBTCI6CisKK2NvbmZpZyBTTFVCCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgIUFSQ0hfVVNFU19TTEFCX1BBR0VfU1RSVUNUCisJYm9vbCAiU0xVQiAoVW5xdWV1ZWQgQWxsb2NhdG9yKSIKKwkuLi4KKword2hpbGUgc2VyaW91c2x5IGRhbmdlcm91cyBmZWF0dXJlcyAoc3VjaCBhcyB3cml0ZSBzdXBwb3J0IGZvciBjZXJ0YWluCitmaWxlc3lzdGVtcykgc2hvdWxkIGFkdmVydGlzZSB0aGlzIHByb21pbmVudGx5IGluIHRoZWlyIHByb21wdCBzdHJpbmc6CisKK2NvbmZpZyBBREZTX0ZTX1JXCisJYm9vbCAiQURGUyB3cml0ZSBzdXBwb3J0IChEQU5HRVJPVVMpIgorCWRlcGVuZHMgb24gQURGU19GUworCS4uLgorCitGb3IgZnVsbCBkb2N1bWVudGF0aW9uIG9uIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCBzZWUgdGhlIGZpbGUKK0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0LgogCiAKIAkJQ2hhcHRlciAxMTogRGF0YSBzdHJ1Y3R1cmVzCkBAIC02MjUsNyArNjUxLDcgQEAKIAogVGhlcmUgYXBwZWFycyB0byBiZSBhIGNvbW1vbiBtaXNwZXJjZXB0aW9uIHRoYXQgZ2NjIGhhcyBhIG1hZ2ljICJtYWtlIG1lCiBmYXN0ZXIiIHNwZWVkdXAgb3B0aW9uIGNhbGxlZCAiaW5saW5lIi4gV2hpbGUgdGhlIHVzZSBvZiBpbmxpbmVzIGNhbiBiZQotYXBwcm9wcmlhdGUgKGZvciBleGFtcGxlIGFzIGEgbWVhbnMgb2YgcmVwbGFjaW5nIG1hY3Jvcywgc2VlIENoYXB0ZXIgMTEpLCBpdAorYXBwcm9wcmlhdGUgKGZvciBleGFtcGxlIGFzIGEgbWVhbnMgb2YgcmVwbGFjaW5nIG1hY3Jvcywgc2VlIENoYXB0ZXIgMTIpLCBpdAogdmVyeSBvZnRlbiBpcyBub3QuIEFidW5kYW50IHVzZSBvZiB0aGUgaW5saW5lIGtleXdvcmQgbGVhZHMgdG8gYSBtdWNoIGJpZ2dlcgoga2VybmVsLCB3aGljaCBpbiB0dXJuIHNsb3dzIHRoZSBzeXN0ZW0gYXMgYSB3aG9sZSBkb3duLCBkdWUgdG8gYSBiaWdnZXIKIGljYWNoZSBmb290cHJpbnQgZm9yIHRoZSBDUFUgYW5kIHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIGxlc3MgbWVtb3J5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKaW5kZXggMTBiNWNkNi4uNmZkMTY0NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQpAQCAtNDMsNiArNDMsNyBAQAogCiBIVE1MIDo9ICQoc29ydCAkKHBhdHN1YnN0ICUueG1sLCAlLmh0bWwsICQoQk9PS1MpKSkKIGh0bWxkb2NzOiAkKEhUTUwpCisJJChjYWxsIGJ1aWxkX21haW5faW5kZXgpCiAKIE1BTiA6PSAkKHBhdHN1YnN0ICUueG1sLCAlLjksICQoQk9PS1MpKQogbWFuZG9jczogJChNQU4pCkBAIC0xMzIsMTAgKzEzMywxNyBAQAogJS5wZGYgOiAlLnhtbAogCSQoY2FsbCBjbWQsZGIycGRmKQogCisKK21haW5faWR4ID0gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2luZGV4Lmh0bWwKK2J1aWxkX21haW5faW5kZXggPSBybSAtcmYgJChtYWluX2lkeCkgJiYgXAorCQkgICBlY2hvICc8aDE+TGludXggS2VybmVsIEhUTUwgRG9jdW1lbnRhdGlvbjwvaDE+JyA+PiAkKG1haW5faWR4KSAmJiBcCisJCSAgIGVjaG8gJzxoMj5LZXJuZWwgVmVyc2lvbjogJChLRVJORUxWRVJTSU9OKTwvaDI+JyA+PiAkKG1haW5faWR4KSAmJiBcCisJCSAgIGNhdCAkKEhUTUwpID4+ICQobWFpbl9pZHgpCisKIHF1aWV0X2NtZF9kYjJodG1sID0gSFRNTCAgICRACiAgICAgICBjbWRfZGIyaHRtbCA9IHhtbHRvIHhodG1sICQoWE1MVE9GTEFHUykgLW8gJChwYXRzdWJzdCAlLmh0bWwsJSwkQCkgJDwgJiYgXAogCQllY2hvICc8YSBIUkVGPSIkKHBhdHN1YnN0ICUuaHRtbCwlLCQobm90ZGlyICRAKSkvaW5kZXguaHRtbCI+IFwKLSAgICAgICAgIEdvdG8gJChwYXRzdWJzdCAlLmh0bWwsJSwkKG5vdGRpciAkQCkpPC9hPjxwPicgPiAkQAorICAgICAgICAkKHBhdHN1YnN0ICUuaHRtbCwlLCQobm90ZGlyICRAKSk8L2E+PHA+JyA+ICRACiAKICUuaHRtbDoJJS54bWwKIAlAKHdoaWNoIHhtbHRvID4gL2Rldi9udWxsIDI+JjEpIHx8IFwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbAppbmRleCBlN2ZjOTY0Li42OTk2ZDk3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2FkZ2V0LnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsCkBAIC01Miw3ICs1Miw3IEBACiAKIDx0b2M+PC90b2M+CiAKLTxjaGFwdGVyPjx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorPGNoYXB0ZXIgaWQ9ImludHJvIj48dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KIAogPHBhcmE+VGhpcyBkb2N1bWVudCBwcmVzZW50cyBhIExpbnV4LVVTQiAiR2FkZ2V0Igoga2VybmVsIG1vZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCmluZGV4IGI2MWRmYzcuLjM4Zjg4YjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbApAQCAtODQsNiArODQsMTAgQEAKICFFa2VybmVsL3JjdXBkYXRlLmMKICAgICAgPC9zZWN0MT4KIAorICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBSZXNvdXJjZSBNYW5hZ2VtZW50PC90aXRsZT4KKyFFZHJpdmVycy9iYXNlL2RldnJlcy5jCisgICAgIDwvc2VjdDE+CisKICAgPC9jaGFwdGVyPgogCiAgIDxjaGFwdGVyIGlkPSJhZHQiPgpAQCAtNTc2LDQgKzU4MCw2NyBAQAogIUVkcml2ZXJzL2lucHV0L2ZmLWNvcmUuYwogIUVkcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYwogICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InNwaSI+CisgICAgICA8dGl0bGU+U2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIChTUEkpPC90aXRsZT4KKyAgPHBhcmE+CisJU1BJIGlzIHRoZSAiU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIiwgd2lkZWx5IHVzZWQgd2l0aAorCWVtYmVkZGVkIHN5c3RlbXMgYmVjYXVzZSBpdCBpcyBhIHNpbXBsZSBhbmQgZWZmaWNpZW50CisJaW50ZXJmYWNlOiAgYmFzaWNhbGx5IGEgbXVsdGlwbGV4ZWQgc2hpZnQgcmVnaXN0ZXIuCisJSXRzIHRocmVlIHNpZ25hbCB3aXJlcyBob2xkIGEgY2xvY2sgKFNDSywgb2Z0ZW4gaW4gdGhlIHJhbmdlCisJb2YgMS0yMCBNSHopLCBhICJNYXN0ZXIgT3V0LCBTbGF2ZSBJbiIgKE1PU0kpIGRhdGEgbGluZSwgYW5kCisJYSAiTWFzdGVyIEluLCBTbGF2ZSBPdXQiIChNSVNPKSBkYXRhIGxpbmUuCisJU1BJIGlzIGEgZnVsbCBkdXBsZXggcHJvdG9jb2w7IGZvciBlYWNoIGJpdCBzaGlmdGVkIG91dCB0aGUKKwlNT1NJIGxpbmUgKG9uZSBwZXIgY2xvY2spIGFub3RoZXIgaXMgc2hpZnRlZCBpbiBvbiB0aGUgTUlTTyBsaW5lLgorCVRob3NlIGJpdHMgYXJlIGFzc2VtYmxlZCBpbnRvIHdvcmRzIG9mIHZhcmlvdXMgc2l6ZXMgb24gdGhlCisJd2F5IHRvIGFuZCBmcm9tIHN5c3RlbSBtZW1vcnkuCisJQW4gYWRkaXRpb25hbCBjaGlwc2VsZWN0IGxpbmUgaXMgdXN1YWxseSBhY3RpdmUtbG93IChuQ1MpOworCWZvdXIgc2lnbmFscyBhcmUgbm9ybWFsbHkgdXNlZCBmb3IgZWFjaCBwZXJpcGhlcmFsLCBwbHVzCisJc29tZXRpbWVzIGFuIGludGVycnVwdC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgU1BJIGJ1cyBmYWNpbGl0aWVzIGxpc3RlZCBoZXJlIHByb3ZpZGUgYSBnZW5lcmFsaXplZAorCWludGVyZmFjZSB0byBkZWNsYXJlIFNQSSBidXNzZXMgYW5kIGRldmljZXMsIG1hbmFnZSB0aGVtCisJYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZCBMaW51eCBkcml2ZXIgbW9kZWwsIGFuZCBwZXJmb3JtCisJaW5wdXQvb3V0cHV0IG9wZXJhdGlvbnMuCisJQXQgdGhpcyB0aW1lLCBvbmx5ICJtYXN0ZXIiIHNpZGUgaW50ZXJmYWNlcyBhcmUgc3VwcG9ydGVkLAorCXdoZXJlIExpbnV4IHRhbGtzIHRvIFNQSSBwZXJpcGhlcmFscyBhbmQgZG9lcyBub3QgaW1wbGVtZW50CisJc3VjaCBhIHBlcmlwaGVyYWwgaXRzZWxmLgorCShJbnRlcmZhY2VzIHRvIHN1cHBvcnQgaW1wbGVtZW50aW5nIFNQSSBzbGF2ZXMgd291bGQKKwluZWNlc3NhcmlseSBsb29rIGRpZmZlcmVudC4pCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIHByb2dyYW1taW5nIGludGVyZmFjZSBpcyBzdHJ1Y3R1cmVkIGFyb3VuZCB0d28ga2luZHMgb2YgZHJpdmVyLAorCWFuZCB0d28ga2luZHMgb2YgZGV2aWNlLgorCUEgIkNvbnRyb2xsZXIgRHJpdmVyIiBhYnN0cmFjdHMgdGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUsIHdoaWNoIG1heQorCWJlIGFzIHNpbXBsZSBhcyBhIHNldCBvZiBHUElPIHBpbnMgb3IgYXMgY29tcGxleCBhcyBhIHBhaXIgb2YgRklGT3MKKwljb25uZWN0ZWQgdG8gZHVhbCBETUEgZW5naW5lcyBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgU1BJIHNoaWZ0CisJcmVnaXN0ZXIgKG1heGltaXppbmcgdGhyb3VnaHB1dCkuICBTdWNoIGRyaXZlcnMgYnJpZGdlIGJldHdlZW4KKwl3aGF0ZXZlciBidXMgdGhleSBzaXQgb24gKG9mdGVuIHRoZSBwbGF0Zm9ybSBidXMpIGFuZCBTUEksIGFuZAorCWV4cG9zZSB0aGUgU1BJIHNpZGUgb2YgdGhlaXIgZGV2aWNlIGFzIGEKKwk8c3RydWN0bmFtZT5zdHJ1Y3Qgc3BpX21hc3Rlcjwvc3RydWN0bmFtZT4uCisJU1BJIGRldmljZXMgYXJlIGNoaWxkcmVuIG9mIHRoYXQgbWFzdGVyLCByZXByZXNlbnRlZCBhcyBhCisJPHN0cnVjdG5hbWU+c3RydWN0IHNwaV9kZXZpY2U8L3N0cnVjdG5hbWU+IGFuZCBtYW51ZmFjdHVyZWQgZnJvbQorCTxzdHJ1Y3RuYW1lPnN0cnVjdCBzcGlfYm9hcmRfaW5mbzwvc3RydWN0bmFtZT4gZGVzY3JpcHRvcnMgd2hpY2gKKwlhcmUgdXN1YWxseSBwcm92aWRlZCBieSBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBjb2RlLgorCUEgPHN0cnVjdG5hbWU+c3RydWN0IHNwaV9kcml2ZXI8L3N0cnVjdG5hbWU+IGlzIGNhbGxlZCBhCisJIlByb3RvY29sIERyaXZlciIsIGFuZCBpcyBib3VuZCB0byBhIHNwaV9kZXZpY2UgdXNpbmcgbm9ybWFsCisJZHJpdmVyIG1vZGVsIGNhbGxzLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVRoZSBJL08gbW9kZWwgaXMgYSBzZXQgb2YgcXVldWVkIG1lc3NhZ2VzLiAgUHJvdG9jb2wgZHJpdmVycworCXN1Ym1pdCBvbmUgb3IgbW9yZSA8c3RydWN0bmFtZT5zdHJ1Y3Qgc3BpX21lc3NhZ2U8L3N0cnVjdG5hbWU+CisJb2JqZWN0cywgd2hpY2ggYXJlIHByb2Nlc3NlZCBhbmQgY29tcGxldGVkIGFzeW5jaHJvbm91c2x5LgorCShUaGVyZSBhcmUgc3luY2hyb25vdXMgd3JhcHBlcnMsIGhvd2V2ZXIuKSAgTWVzc2FnZXMgYXJlCisJYnVpbHQgZnJvbSBvbmUgb3IgbW9yZSA8c3RydWN0bmFtZT5zdHJ1Y3Qgc3BpX3RyYW5zZmVyPC9zdHJ1Y3RuYW1lPgorCW9iamVjdHMsIGVhY2ggb2Ygd2hpY2ggd3JhcHMgYSBmdWxsIGR1cGxleCBTUEkgdHJhbnNmZXIuCisJQSB2YXJpZXR5IG9mIHByb3RvY29sIHR3ZWFraW5nIG9wdGlvbnMgYXJlIG5lZWRlZCwgYmVjYXVzZQorCWRpZmZlcmVudCBjaGlwcyBhZG9wdCB2ZXJ5IGRpZmZlcmVudCBwb2xpY2llcyBmb3IgaG93IHRoZXkKKwl1c2UgdGhlIGJpdHMgdHJhbnNmZXJyZWQgd2l0aCBTUEkuCisgIDwvcGFyYT4KKyFJaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKKyFGZHJpdmVycy9zcGkvc3BpLmMgc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8KKyFFZHJpdmVycy9zcGkvc3BpLmMKKyAgPC9jaGFwdGVyPgorCiA8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWxvY2tpbmcudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtbG9ja2luZy50bXBsCmluZGV4IDY0NGMzODguLjBhNDQxZjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtbG9ja2luZy50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtbG9ja2luZy50bXBsCkBAIC01NTEsMTAgKzU1MSwxMiBAQAogCTxmdW5jdGlvbj5zcGluX2xvY2tfaXJxc2F2ZSgpPC9mdW5jdGlvbj4sIHdoaWNoIGlzIGEgc3VwZXJzZXQKIAlvZiBhbGwgb3RoZXIgc3BpbmxvY2sgcHJpbWl0aXZlcy4KICAgIDwvcGFyYT4KKwogICAgPHRhYmxlPgogPHRpdGxlPlRhYmxlIG9mIExvY2tpbmcgUmVxdWlyZW1lbnRzPC90aXRsZT4KIDx0Z3JvdXAgY29scz0iMTEiPgogPHRib2R5PgorCiA8cm93PgogPGVudHJ5PjwvZW50cnk+CiA8ZW50cnk+SVJRIEhhbmRsZXIgQTwvZW50cnk+CkBAIC01NzYsOTcgKzU3OCwxMjggQEAKIAogPHJvdz4KIDxlbnRyeT5JUlEgSGFuZGxlciBCPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2tfaXJxc2F2ZTwvZW50cnk+Cis8ZW50cnk+U0xJUzwvZW50cnk+CiA8ZW50cnk+Tm9uZTwvZW50cnk+CiA8L3Jvdz4KIAogPHJvdz4KIDxlbnRyeT5Tb2Z0aXJxIEE8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+U0xJPC9lbnRyeT4KKzxlbnRyeT5TTEk8L2VudHJ5PgorPGVudHJ5PlNMPC9lbnRyeT4KIDwvcm93PgogCiA8cm93PgogPGVudHJ5PlNvZnRpcnEgQjwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5PlNMSTwvZW50cnk+Cis8ZW50cnk+U0xJPC9lbnRyeT4KKzxlbnRyeT5TTDwvZW50cnk+Cis8ZW50cnk+U0w8L2VudHJ5PgogPC9yb3c+CiAKIDxyb3c+CiA8ZW50cnk+VGFza2xldCBBPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+U0xJPC9lbnRyeT4KKzxlbnRyeT5TTEk8L2VudHJ5PgorPGVudHJ5PlNMPC9lbnRyeT4KKzxlbnRyeT5TTDwvZW50cnk+CiA8ZW50cnk+Tm9uZTwvZW50cnk+CiA8L3Jvdz4KIAogPHJvdz4KIDxlbnRyeT5UYXNrbGV0IEI8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5PlNMSTwvZW50cnk+Cis8ZW50cnk+U0xJPC9lbnRyeT4KKzxlbnRyeT5TTDwvZW50cnk+Cis8ZW50cnk+U0w8L2VudHJ5PgorPGVudHJ5PlNMPC9lbnRyeT4KIDxlbnRyeT5Ob25lPC9lbnRyeT4KIDwvcm93PgogCiA8cm93PgogPGVudHJ5PlRpbWVyIEE8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+U0xJPC9lbnRyeT4KKzxlbnRyeT5TTEk8L2VudHJ5PgorPGVudHJ5PlNMPC9lbnRyeT4KKzxlbnRyeT5TTDwvZW50cnk+Cis8ZW50cnk+U0w8L2VudHJ5PgorPGVudHJ5PlNMPC9lbnRyeT4KIDxlbnRyeT5Ob25lPC9lbnRyeT4KIDwvcm93PgogCiA8cm93PgogPGVudHJ5PlRpbWVyIEI8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KKzxlbnRyeT5TTEk8L2VudHJ5PgorPGVudHJ5PlNMSTwvZW50cnk+Cis8ZW50cnk+U0w8L2VudHJ5PgorPGVudHJ5PlNMPC9lbnRyeT4KKzxlbnRyeT5TTDwvZW50cnk+Cis8ZW50cnk+U0w8L2VudHJ5PgorPGVudHJ5PlNMPC9lbnRyeT4KIDxlbnRyeT5Ob25lPC9lbnRyeT4KIDwvcm93PgogCiA8cm93PgogPGVudHJ5PlVzZXIgQ29udGV4dCBBPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KKzxlbnRyeT5TTEk8L2VudHJ5PgorPGVudHJ5PlNMSTwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+CiA8ZW50cnk+Tm9uZTwvZW50cnk+CiA8L3Jvdz4KIAogPHJvdz4KIDxlbnRyeT5Vc2VyIENvbnRleHQgQjwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Ci08ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KLTxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgotPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Ci08ZW50cnk+ZG93bl9pbnRlcnJ1cHRpYmxlPC9lbnRyeT4KKzxlbnRyeT5TTEk8L2VudHJ5PgorPGVudHJ5PlNMSTwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+REk8L2VudHJ5PgogPGVudHJ5Pk5vbmU8L2VudHJ5PgogPC9yb3c+CiAKIDwvdGJvZHk+CiA8L3Rncm91cD4KIDwvdGFibGU+CisKKyAgIDx0YWJsZT4KKzx0aXRsZT5MZWdlbmQgZm9yIExvY2tpbmcgUmVxdWlyZW1lbnRzIFRhYmxlPC90aXRsZT4KKzx0Z3JvdXAgY29scz0iMiI+Cis8dGJvZHk+CisKKzxyb3c+Cis8ZW50cnk+U0xJUzwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycXNhdmU8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PlNMSTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+U0w8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+U0xCSDwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT5ESTwvZW50cnk+Cis8ZW50cnk+ZG93bl9pbnRlcnJ1cHRpYmxlPC9lbnRyeT4KKzwvcm93PgorCis8L3Rib2R5PgorPC90Z3JvdXA+Cis8L3RhYmxlPgorCiA8L3NlY3QxPgogPC9jaGFwdGVyPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGlicnMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJycy50bXBsCmluZGV4IDNmZjM5YmEuLjk0ZjIxMzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJycy50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJycy50bXBsCkBAIC03OSwxMiArNzksMTIgQEAKICAgPGNoYXB0ZXIgaWQ9InVzYWdlIj4KICAgICAgCTx0aXRsZT5Vc2FnZTwvdGl0bGU+CiAJPHBhcmE+Ci0JCVRoaXMgY2hhcHRlciBwcm92aWRlcyBleGFtcGxlcyBob3cgdG8gdXNlIHRoZSBsaWJyYXJ5LgorCQlUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSB0aGUgbGlicmFyeS4KIAk8L3BhcmE+CiAJPHNlY3QxPgogCQk8dGl0bGU+SW5pdGlhbGl6aW5nPC90aXRsZT4KIAkJPHBhcmE+Ci0JCQlUaGUgaW5pdCBmdW5jdGlvbiBpbml0X3JzIHJldHVybnMgYSBwb2ludGVyIHRvIGEKKwkJCVRoZSBpbml0IGZ1bmN0aW9uIGluaXRfcnMgcmV0dXJucyBhIHBvaW50ZXIgdG8gYW4KIAkJCXJzIGRlY29kZXIgc3RydWN0dXJlLCB3aGljaCBob2xkcyB0aGUgbmVjZXNzYXJ5CiAJCQlpbmZvcm1hdGlvbiBmb3IgZW5jb2RpbmcsIGRlY29kaW5nIGFuZCBlcnJvciBjb3JyZWN0aW9uCiAJCQl3aXRoIHRoZSBnaXZlbiBwb2x5bm9taWFsLiBJdCBlaXRoZXIgdXNlcyBhbiBleGlzdGluZwpAQCAtOTgsMTAgKzk4LDEwIEBACiBzdGF0aWMgc3RydWN0IHJzX2NvbnRyb2wgKnJzX2RlY29kZXI7CiAKIC8qIFN5bWJvbHNpemUgaXMgMTAgKGJpdHMpCi0gKiBQcmltaXR2ZSBwb2x5bm9taWFsIGlzIHheMTAreF4zKzEKKyAqIFByaW1pdGl2ZSBwb2x5bm9taWFsIGlzIHheMTAreF4zKzEKICAqIGZpcnN0IGNvbnNlY3V0aXZlIHJvb3QgaXMgMAotICogcHJpbWl0dmUgZWxlbWVudCB0byBnZW5lcmF0ZSByb290cyA9IDEKLSAqIGdlbmVyYXRvciBwb2xpbm9taWFsIGRlZ3JlZSAobnVtYmVyIG9mIHJvb3RzKSA9IDYKKyAqIHByaW1pdGl2ZSBlbGVtZW50IHRvIGdlbmVyYXRlIHJvb3RzID0gMQorICogZ2VuZXJhdG9yIHBvbHlub21pYWwgZGVncmVlIChudW1iZXIgb2Ygcm9vdHMpID0gNgogICovCiByc19kZWNvZGVyID0gaW5pdF9ycyAoMTAsIDB4NDA5LCAwLCAxLCA2KTsKIAkJPC9wcm9ncmFtbGlzdGluZz4KQEAgLTExNiwxMiArMTE2LDEyIEBACiAJCTwvcGFyYT4KIAkJPHBhcmE+CiAJCQlUaGUgZXhwYW5kZWQgZGF0YSBjYW4gYmUgaW52ZXJ0ZWQgb24gdGhlIGZseSBieQotCQkJcHJvdmlkaW5nIGEgbm9uIHplcm8gaW52ZXJzaW9uIG1hc2suIFRoZSBleHBhbmRlZCBkYXRhIGlzCisJCQlwcm92aWRpbmcgYSBub24temVybyBpbnZlcnNpb24gbWFzay4gVGhlIGV4cGFuZGVkIGRhdGEgaXMKIAkJCVhPUidlZCB3aXRoIHRoZSBtYXNrLiBUaGlzIGlzIHVzZWQgZS5nLiBmb3IgRkxBU0gKIAkJCUVDQywgd2hlcmUgdGhlIGFsbCAweEZGIGlzIGludmVydGVkIHRvIGFuIGFsbCAweDAwLgogCQkJVGhlIFJlZWQtU29sb21vbiBjb2RlIGZvciBhbGwgMHgwMCBpcyBhbGwgMHgwMC4gVGhlCiAJCQljb2RlIGlzIGludmVydGVkIGJlZm9yZSBzdG9yaW5nIHRvIEZMQVNIIHNvIGl0IGlzIDB4RkYKLQkJCXRvby4gVGhpcyBwcmV2ZW50J3MgdGhhdCByZWFkaW5nIGZyb20gYW4gZXJhc2VkIEZMQVNICisJCQl0b28uIFRoaXMgcHJldmVudHMgdGhhdCByZWFkaW5nIGZyb20gYW4gZXJhc2VkIEZMQVNICiAJCQlyZXN1bHRzIGluIEVDQyBlcnJvcnMuCiAJCTwvcGFyYT4KIAkJPHBhcmE+CkBAIC0yNzMsNyArMjczLDcgQEAKICAJCU1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkKIAk8L3Byb2dyYW1saXN0aW5nPgogCTxwYXJhPgotCQlUaGUgd3JhcHBlciBmdW5jdGlvbnMgYW5kIGludGVyZmFjZXMgYXJlIHdyaXR0ZW4gYnkgVGhvbWFzIEdsZWl4bmVyCisJCVRoZSB3cmFwcGVyIGZ1bmN0aW9ucyBhbmQgaW50ZXJmYWNlcyBhcmUgd3JpdHRlbiBieSBUaG9tYXMgR2xlaXhuZXIuCiAJPC9wYXJhPgogCTxwYXJhPgogCQlNYW55IHVzZXJzIGhhdmUgcHJvdmlkZWQgYnVnZml4ZXMsIGltcHJvdmVtZW50cyBhbmQgaGVscGluZyBoYW5kcyBmb3IgdGVzdGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbAppbmRleCBhMmViZDY1Li5hZjI5MzYwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdXNiLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3VzYi50bXBsCkBAIC0xODUsNyArMTg1LDcgQEAKIAogICAgIDwvY2hhcHRlcj4KIAotPGNoYXB0ZXI+PHRpdGxlPlVTQi1TdGFuZGFyZCBUeXBlczwvdGl0bGU+Cis8Y2hhcHRlciBpZD0idHlwZXMiPjx0aXRsZT5VU0ItU3RhbmRhcmQgVHlwZXM8L3RpdGxlPgogCiAgICAgPHBhcmE+SW4gPGZpbGVuYW1lPiZsdDtsaW51eC91c2IvY2g5LmgmZ3Q7PC9maWxlbmFtZT4geW91IHdpbGwgZmluZAogICAgIHRoZSBVU0IgZGF0YSB0eXBlcyBkZWZpbmVkIGluIGNoYXB0ZXIgOSBvZiB0aGUgVVNCIHNwZWNpZmljYXRpb24uCkBAIC0xOTcsNyArMTk3LDcgQEAKIAogICAgIDwvY2hhcHRlcj4KIAotPGNoYXB0ZXI+PHRpdGxlPkhvc3QtU2lkZSBEYXRhIFR5cGVzIGFuZCBNYWNyb3M8L3RpdGxlPgorPGNoYXB0ZXIgaWQ9Imhvc3RzaWRlIj48dGl0bGU+SG9zdC1TaWRlIERhdGEgVHlwZXMgYW5kIE1hY3JvczwvdGl0bGU+CiAKICAgICA8cGFyYT5UaGUgaG9zdCBzaWRlIEFQSSBleHBvc2VzIHNldmVyYWwgbGF5ZXJzIHRvIGRyaXZlcnMsIHNvbWUgb2YKICAgICB3aGljaCBhcmUgbW9yZSBuZWNlc3NhcnkgdGhhbiBvdGhlcnMuCkBAIC0yMTEsNyArMjExLDcgQEAKIAogICAgIDwvY2hhcHRlcj4KIAotICAgIDxjaGFwdGVyPjx0aXRsZT5VU0IgQ29yZSBBUElzPC90aXRsZT4KKyAgICA8Y2hhcHRlciBpZD0idXNiY29yZSI+PHRpdGxlPlVTQiBDb3JlIEFQSXM8L3RpdGxlPgogCiAgICAgPHBhcmE+VGhlcmUgYXJlIHR3byBiYXNpYyBJL08gbW9kZWxzIGluIHRoZSBVU0IgQVBJLgogICAgIFRoZSBtb3N0IGVsZW1lbnRhbCBvbmUgaXMgYXN5bmNocm9ub3VzOiAgZHJpdmVycyBzdWJtaXQgcmVxdWVzdHMKQEAgLTI0OCw3ICsyNDgsNyBAQAogIUVkcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCiAgICAgPC9jaGFwdGVyPgogCi0gICAgPGNoYXB0ZXI+PHRpdGxlPkhvc3QgQ29udHJvbGxlciBBUElzPC90aXRsZT4KKyAgICA8Y2hhcHRlciBpZD0iaGNkIj48dGl0bGU+SG9zdCBDb250cm9sbGVyIEFQSXM8L3RpdGxlPgogCiAgICAgPHBhcmE+VGhlc2UgQVBJcyBhcmUgb25seSBmb3IgdXNlIGJ5IGhvc3QgY29udHJvbGxlciBkcml2ZXJzLAogICAgIG1vc3Qgb2Ygd2hpY2ggaW1wbGVtZW50IHN0YW5kYXJkIHJlZ2lzdGVyIGludGVyZmFjZXMgc3VjaCBhcwpAQCAtMjg1LDcgKzI4NSw3IEBACiAhSWRyaXZlcnMvdXNiL2NvcmUvYnVmZmVyLmMKICAgICA8L2NoYXB0ZXI+CiAKLSAgICA8Y2hhcHRlcj4KKyAgICA8Y2hhcHRlciBpZD0idXNiZnMiPgogCTx0aXRsZT5UaGUgVVNCIEZpbGVzeXN0ZW0gKHVzYmZzKTwvdGl0bGU+CiAKIAk8cGFyYT5UaGlzIGNoYXB0ZXIgcHJlc2VudHMgdGhlIExpbnV4IDxlbXBoYXNpcz51c2JmczwvZW1waGFzaXM+LgpAQCAtMzE3LDcgKzMxNyw3IEBACiAJbm90IGl0IGhhcyBhIGtlcm5lbCBkcml2ZXIuCiAJPC9wYXJhPgogCi0JPHNlY3QxPgorCTxzZWN0MSBpZD0idXNiZnMtZmlsZXMiPgogCSAgICA8dGl0bGU+V2hhdCBmaWxlcyBhcmUgaW4gInVzYmZzIj88L3RpdGxlPgogCiAJICAgIDxwYXJhPkNvbnZlbnRpb25hbGx5IG1vdW50ZWQgYXQKQEAgLTM1Niw3ICszNTYsNyBAQAogCiAJPC9zZWN0MT4KIAotCTxzZWN0MT4KKwk8c2VjdDEgaWQ9InVzYmZzLWZzdGFiIj4KIAkgICAgPHRpdGxlPk1vdW50aW5nIGFuZCBBY2Nlc3MgQ29udHJvbDwvdGl0bGU+CiAKIAkgICAgPHBhcmE+VGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vdW50IG9wdGlvbnMgZm9yIHVzYmZzLCB3aGljaCB3aWxsCkBAIC00MzksNyArNDM5LDcgQEAKIAogCTwvc2VjdDE+CiAKLQk8c2VjdDE+CisJPHNlY3QxIGlkPSJ1c2Jmcy1kZXZpY2VzIj4KIAkgICAgPHRpdGxlPi9wcm9jL2J1cy91c2IvZGV2aWNlczwvdGl0bGU+CiAKIAkgICAgPHBhcmE+VGhpcyBmaWxlIGlzIGhhbmR5IGZvciBzdGF0dXMgdmlld2luZyB0b29scyBpbiB1c2VyCkBAIC00NzMsNyArNDczLDcgQEAKIAkgICAgPC9wYXJhPgogCTwvc2VjdDE+CiAKLQk8c2VjdDE+CisJPHNlY3QxIGlkPSJ1c2Jmcy1iYmJkZGQiPgogCSAgICA8dGl0bGU+L3Byb2MvYnVzL3VzYi9CQkIvREREPC90aXRsZT4KIAogCSAgICA8cGFyYT5Vc2UgdGhlc2UgZmlsZXMgaW4gb25lIG9mIHRoZXNlIGJhc2ljIHdheXM6CkBAIC01MTAsNyArNTEwLDcgQEAKIAkgICAgPC9zZWN0MT4KIAogCi0JPHNlY3QxPgorCTxzZWN0MSBpZD0idXNiZnMtbGlmZWN5Y2xlIj4KIAkgICAgPHRpdGxlPkxpZmUgQ3ljbGUgb2YgVXNlciBNb2RlIERyaXZlcnM8L3RpdGxlPgogCiAJICAgIDxwYXJhPlN1Y2ggYSBkcml2ZXIgZmlyc3QgbmVlZHMgdG8gZmluZCBhIGRldmljZSBmaWxlCkBAIC01NjUsNyArNTY1LDcgQEAKIAogCSAgICA8L3NlY3QxPgogCi0JPHNlY3QxPjx0aXRsZT5UaGUgaW9jdGwoKSBSZXF1ZXN0czwvdGl0bGU+CisJPHNlY3QxIGlkPSJ1c2Jmcy1pb2N0bCI+PHRpdGxlPlRoZSBpb2N0bCgpIFJlcXVlc3RzPC90aXRsZT4KIAogCSAgICA8cGFyYT5UbyB1c2UgdGhlc2UgaW9jdGxzLCB5b3UgbmVlZCB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmcKIAkgICAgaGVhZGVycyBpbiB5b3VyIHVzZXJzcGFjZSBwcm9ncmFtOgpAQCAtNjA0LDcgKzYwNCw3IEBACiAJICAgIDwvcGFyYT4KIAogCi0JICAgIDxzZWN0Mj4KKwkgICAgPHNlY3QyIGlkPSJ1c2Jmcy1tZ210Ij4KIAkJPHRpdGxlPk1hbmFnZW1lbnQvU3RhdHVzIFJlcXVlc3RzPC90aXRsZT4KIAogCQk8cGFyYT5BIG51bWJlciBvZiB1c2JmcyByZXF1ZXN0cyBkb24ndCBkZWFsIHZlcnkgZGlyZWN0bHkKQEAgLTczNiw3ICs3MzYsNyBAQAogCiAJCTwvc2VjdDI+CiAKLQkgICAgPHNlY3QyPgorCSAgICA8c2VjdDIgaWQ9InVzYmZzLXN5bmMiPgogCQk8dGl0bGU+U3luY2hyb25vdXMgSS9PIFN1cHBvcnQ8L3RpdGxlPgogCiAJCTxwYXJhPlN5bmNocm9ub3VzIHJlcXVlc3RzIGludm9sdmUgdGhlIGtlcm5lbCBibG9ja2luZwpAQCAtODY1LDcgKzg2NSw3IEBACiAJCTwvdmFyaWFibGVsaXN0PgogCSAgICA8L3NlY3QyPgogCi0JICAgIDxzZWN0Mj4KKwkgICAgPHNlY3QyIGlkPSJ1c2Jmcy1hc3luYyI+CiAJCTx0aXRsZT5Bc3luY2hyb25vdXMgSS9PIFN1cHBvcnQ8L3RpdGxlPgogCiAJCTxwYXJhPkFzIG1lbnRpb25lZCBhYm92ZSwgdGhlcmUgYXJlIHNpdHVhdGlvbnMgd2hlcmUgaXQgbWF5IGJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0hPV1RPIGIvRG9jdW1lbnRhdGlvbi9IT1dUTwppbmRleCA0ODEyM2RiLi5jZWQ5MjA3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0hPV1RPCisrKyBiL0RvY3VtZW50YXRpb24vSE9XVE8KQEAgLTM5NiwyNiArMzk2LDYgQEAKIAogCiAKLU1hbmFnaW5nIGJ1ZyByZXBvcnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1PbmUgb2YgdGhlIGJlc3Qgd2F5cyB0byBwdXQgaW50byBwcmFjdGljZSB5b3VyIGhhY2tpbmcgc2tpbGxzIGlzIGJ5IGZpeGluZwotYnVncyByZXBvcnRlZCBieSBvdGhlciBwZW9wbGUuIE5vdCBvbmx5IHlvdSB3aWxsIGhlbHAgdG8gbWFrZSB0aGUga2VybmVsCi1tb3JlIHN0YWJsZSwgeW91J2xsIGxlYXJuIHRvIGZpeCByZWFsIHdvcmxkIHByb2JsZW1zIGFuZCB5b3Ugd2lsbCBpbXByb3ZlCi15b3VyIHNraWxscywgYW5kIG90aGVyIGRldmVsb3BlcnMgd2lsbCBiZSBhd2FyZSBvZiB5b3VyIHByZXNlbmNlLiBGaXhpbmcKLWJ1Z3MgaXMgb25lIG9mIHRoZSBiZXN0IHdheXMgdG8gZ2V0IG1lcml0cyBhbW9uZyBvdGhlciBkZXZlbG9wZXJzLCBiZWNhdXNlCi1ub3QgbWFueSBwZW9wbGUgbGlrZSB3YXN0aW5nIHRpbWUgZml4aW5nIG90aGVyIHBlb3BsZSdzIGJ1Z3MuCi0KLVRvIHdvcmsgaW4gdGhlIGFscmVhZHkgcmVwb3J0ZWQgYnVnIHJlcG9ydHMsIGdvIHRvIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnLgotSWYgeW91IHdhbnQgdG8gYmUgYWR2aXNlZCBvZiB0aGUgZnV0dXJlIGJ1ZyByZXBvcnRzLCB5b3UgY2FuIHN1YnNjcmliZSB0byB0aGUKLWJ1Z21lLW5ldyBtYWlsaW5nIGxpc3QgKG9ubHkgbmV3IGJ1ZyByZXBvcnRzIGFyZSBtYWlsZWQgaGVyZSkgb3IgdG8gdGhlCi1idWdtZS1qYW5pdG9yIG1haWxpbmcgbGlzdCAoZXZlcnkgY2hhbmdlIGluIHRoZSBidWd6aWxsYSBpcyBtYWlsZWQgaGVyZSkKLQotCWh0dHA6Ly9saXN0cy5vc2RsLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2J1Z21lLW5ldwotCWh0dHA6Ly9saXN0cy5vc2RsLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2J1Z21lLWphbml0b3JzCi0KLQotCiBNYWlsaW5nIGxpc3RzCiAtLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTVNJLUhPV1RPLnR4dCBiL0RvY3VtZW50YXRpb24vTVNJLUhPV1RPLnR4dAppbmRleCBkMzg5Mzg4Li4wZDgyNDA3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL01TSS1IT1dUTy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9NU0ktSE9XVE8udHh0CkBAIC00ODAsOCArNDgwLDggQEAKIAogNi4xLiBEaXNhYmxpbmcgTVNJIG9uIGEgc2luZ2xlIGRldmljZQogCi1VbmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGl0IG1pZ2h0IGJlIHJlcXVpcmVkIHRvIGRpc2FibGUgTVNJIG9uIGEKLXNpbmdsZSBkZXZpY2UsIEl0IG1heSBiZSBhY2hpdmVkIGJ5IGVpdGhlciBub3QgY2FsbGluZyBwY2lfZW5hYmxlX21zaSgpCitVbmRlciBzb21lIGNpcmN1bXN0YW5jZXMgaXQgbWlnaHQgYmUgcmVxdWlyZWQgdG8gZGlzYWJsZSBNU0kgb24gYQorc2luZ2xlIGRldmljZS4gIFRoaXMgbWF5IGJlIGFjaGlldmVkIGJ5IGVpdGhlciBub3QgY2FsbGluZyBwY2lfZW5hYmxlX21zaSgpCiBvciBhbGwsIG9yIHNldHRpbmcgdGhlIHBjaV9kZXYtPm5vX21zaSBmbGFnIGJlZm9yZSAobW9zdCBvZiB0aGUgdGltZQogaW4gYSBxdWlyaykuCiAKQEAgLTQ5Miw3ICs0OTIsNyBAQAogZGlzYWJsZWQgb24gYWxsIGRldmljZXMgYmVoaW5kIHRoaXMgYnJpZGdlLiBJdCBpcyBhY2hpZXZlcyBieSBzZXR0aW5nCiB0aGUgUENJX0JVU19GTEFHU19OT19NU0kgZmxhZyBpbiB0aGUgcGNpX2J1cy0+YnVzX2ZsYWdzIG9mIHRoZSBicmlkZ2UKIHN1Ym9yZGluYXRlIGJ1cy4gVGhlcmUgaXMgbm8gbmVlZCB0byBzZXQgdGhlIHNhbWUgZmxhZyBvbiBicmlkZ2VzIHRoYXQKLWFyZSBiZWxvdyB0aGUgYnJva2VuIGJyaWdkZS4gV2hlbiBwY2lfZW5hYmxlX21zaSgpIGlzIGNhbGxlZCB0byBlbmFibGUKK2FyZSBiZWxvdyB0aGUgYnJva2VuIGJyaWRnZS4gV2hlbiBwY2lfZW5hYmxlX21zaSgpIGlzIGNhbGxlZCB0byBlbmFibGUKIE1TSSBvbiBhIGRldmljZSwgcGNpX21zaV9zdXBwb3J0ZWQoKSB0YWtlcyBjYXJlIG9mIGNoZWNraW5nIHRoZSBOT19NU0kKIGZsYWcgaW4gYWxsIHBhcmVudCBidXNzZXMgb2YgdGhlIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdAppbmRleCBiZDIzZGMwLi42ZWJmZmI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdAorKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdApAQCAtNzMsMTAgKzczLDIwIEBACiAgICAgSWYgdGhlIG5ldyBjb2RlIGlzIHN1YnN0YW50aWFsLCBhZGRpdGlvbiBvZiBzdWJzeXN0ZW0tc3BlY2lmaWMgZmF1bHQKICAgICBpbmplY3Rpb24gbWlnaHQgYmUgYXBwcm9wcmlhdGUuCiAKLTIyOiBOZXdseS1hZGRlZCBjb2RlIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYGdjYyAtVycuICBUaGlzIHdpbGwgZ2VuZXJhdGUKLSAgICBsb3RzIG9mIG5vaXNlLCBidXQgaXMgZ29vZCBmb3IgZmluZGluZyBidWdzIGxpa2UgIndhcm5pbmc6IGNvbXBhcmlzb24KLSAgICBiZXR3ZWVuIHNpZ25lZCBhbmQgdW5zaWduZWQiLgorMjI6IE5ld2x5LWFkZGVkIGNvZGUgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBgZ2NjIC1XJyAodXNlICJtYWtlCisgICAgRVhUUkFfQ0ZMQUdTPS1XIikuICBUaGlzIHdpbGwgZ2VuZXJhdGUgbG90cyBvZiBub2lzZSwgYnV0IGlzIGdvb2QgZm9yCisgICAgZmluZGluZyBidWdzIGxpa2UgIndhcm5pbmc6IGNvbXBhcmlzb24gYmV0d2VlbiBzaWduZWQgYW5kIHVuc2lnbmVkIi4KIAogMjM6IFRlc3RlZCBhZnRlciBpdCBoYXMgYmVlbiBtZXJnZWQgaW50byB0aGUgLW1tIHBhdGNoc2V0IHRvIG1ha2Ugc3VyZQogICAgIHRoYXQgaXQgc3RpbGwgd29ya3Mgd2l0aCBhbGwgb2YgdGhlIG90aGVyIHF1ZXVlZCBwYXRjaGVzIGFuZCB2YXJpb3VzCiAgICAgY2hhbmdlcyBpbiB0aGUgVk0sIFZGUywgYW5kIG90aGVyIHN1YnN5c3RlbXMuCisKKzI0OiBBdm9pZCB3aGl0ZXNwYWNlIGRhbWFnZSBzdWNoIGFzIGluZGVudGluZyB3aXRoIHNwYWNlcyBvciB3aGl0ZXNwYWNlCisgICAgYXQgdGhlIGVuZCBvZiBsaW5lcy4gIFlvdSBjYW4gdGVzdCB0aGlzIGJ5IGZlZWRpbmcgdGhlIHBhdGNoIHRvCisgICAgImdpdCBhcHBseSAtLWNoZWNrIC0td2hpdGVzcGFjZT1lcnJvci1hbGwiCisKKzI1OiBDaGVjayB5b3VyIHBhdGNoIGZvciBnZW5lcmFsIHN0eWxlIGFzIGRldGFpbGVkIGluCisgICAgRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZS4gIENoZWNrIGZvciB0cml2aWFsIHZpb2xhdGlvbnMgd2l0aCB0aGUKKyAgICBwYXRjaCBzdHlsZSBjaGVja2VyIHByaW9yIHRvIHN1Ym1pc3Npb24gKHNjcmlwdHMvY2hlY2twYXRjaC5wbCkuCisgICAgWW91IHNob3VsZCBiZSBhYmxlIHRvIGp1c3RpZnkgYWxsIHZpb2xhdGlvbnMgdGhhdCByZW1haW4gaW4KKyAgICB5b3VyIHBhdGNoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKaW5kZXggNThiZWFkMC4uZDdlMjY0MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCkBAIC04Nyw2ICs4NywyMSBAQAogCQlkcml2ZXIgdGhhdCBpbnRlbnRpb25hbGx5IG9iZnVzY2F0ZXMgaG93IHRoZSBoYXJkd2FyZSB3b3JrcwogCQlpdCB3aWxsIGdvIGluIHRoZSBiaXRidWNrZXQuCiAKK1BNIHN1cHBvcnQ6CVNpbmNlIExpbnV4IGlzIHVzZWQgb24gbWFueSBwb3J0YWJsZSBhbmQgZGVza3RvcCBzeXN0ZW1zLCB5b3VyCisJCWRyaXZlciBpcyBsaWtlbHkgdG8gYmUgdXNlZCBvbiBzdWNoIGEgc3lzdGVtIGFuZCB0aGVyZWZvcmUgaXQKKwkJc2hvdWxkIHN1cHBvcnQgYmFzaWMgcG93ZXIgbWFuYWdlbWVudCBieSBpbXBsZW1lbnRpbmcsIGlmCisJCW5lY2Vzc2FyeSwgdGhlIC5zdXNwZW5kIGFuZCAucmVzdW1lIG1ldGhvZHMgdXNlZCBkdXJpbmcgdGhlCisJCXN5c3RlbS13aWRlIHN1c3BlbmQgYW5kIHJlc3VtZSB0cmFuc2l0aW9ucy4gIFlvdSBzaG91bGQgdmVyaWZ5CisJCXRoYXQgeW91ciBkcml2ZXIgY29ycmVjdGx5IGhhbmRsZXMgdGhlIHN1c3BlbmQgYW5kIHJlc3VtZSwgYnV0CisJCWlmIHlvdSBhcmUgdW5hYmxlIHRvIGVuc3VyZSB0aGF0LCBwbGVhc2UgYXQgbGVhc3QgZGVmaW5lIHRoZQorCQkuc3VzcGVuZCBtZXRob2QgcmV0dXJuaW5nIHRoZSAtRU5PU1lTICgiRnVuY3Rpb24gbm90CisJCWltcGxlbWVudGVkIikgZXJyb3IuICBZb3Ugc2hvdWxkIGFsc28gdHJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdXIKKwkJZHJpdmVyIHVzZXMgYXMgbGl0dGxlIHBvd2VyIGFzIHBvc3NpYmxlIHdoZW4gaXQncyBub3QgZG9pbmcKKwkJYW55dGhpbmcuICBGb3IgdGhlIGRyaXZlciB0ZXN0aW5nIGluc3RydWN0aW9ucyBzZWUKKwkJRG9jdW1lbnRhdGlvbi9wb3dlci9kcml2ZXJzLXRlc3RpbmcudHh0IGFuZCBmb3IgYSByZWxhdGl2ZWx5CisJCWNvbXBsZXRlIG92ZXJ2aWV3IG9mIHRoZSBwb3dlciBtYW5hZ2VtZW50IGlzc3VlcyByZWxhdGVkIHRvCisJCWRyaXZlcnMgc2VlIERvY3VtZW50YXRpb24vcG93ZXIvZGV2aWNlcy50eHQgLgorCiBDb250cm9sOglJbiBnZW5lcmFsIGlmIHRoZXJlIGlzIGFjdGl2ZSBtYWludGFpbmFuY2Ugb2YgYSBkcml2ZXIgYnkKIAkJdGhlIGF1dGhvciB0aGVuIHBhdGNoZXMgd2lsbCBiZSByZWRpcmVjdGVkIHRvIHRoZW0gdW5sZXNzCiAJCXRoZXkgYXJlIHRvdGFsbHkgb2J2aW91cyBhbmQgd2l0aG91dCBuZWVkIG9mIGNoZWNraW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggYjBkMDA0My4uZDkxMTI1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0xMTgsNyArMTE4LDIwIEBACiAKIAogCi00KSBTZWxlY3QgZS1tYWlsIGRlc3RpbmF0aW9uLgorNCkgU3R5bGUgY2hlY2sgeW91ciBjaGFuZ2VzLgorCitDaGVjayB5b3VyIHBhdGNoIGZvciBiYXNpYyBzdHlsZSB2aW9sYXRpb25zLCBkZXRhaWxzIG9mIHdoaWNoIGNhbiBiZQorZm91bmQgaW4gRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZS4gIEZhaWx1cmUgdG8gZG8gc28gc2ltcGx5IHdhc3RlcwordGhlIHJldmlld2VycyB0aW1lIGFuZCB3aWxsIGdldCB5b3VyIHBhdGNoIHJlamVjdGVkLCBwcm9iYWJhbGx5Cit3aXRob3V0IGV2ZW4gYmVpbmcgcmVhZC4KKworQXQgYSBtaW5pbXVtIHlvdSBzaG91bGQgY2hlY2sgeW91ciBwYXRjaGVzIHdpdGggdGhlIHBhdGNoIHN0eWxlCitjaGVja2VyIHByaW9yIHRvIHN1Ym1pc3Npb24gKHNjcmlwdHMvcGF0Y2hjaGVjay5wbCkuICBZb3Ugc2hvdWxkCitiZSBhYmxlIHRvIGp1c3RpZnkgYWxsIHZpb2xhdGlvbnMgdGhhdCByZW1haW4gaW4geW91ciBwYXRjaC4KKworCisKKzUpIFNlbGVjdCBlLW1haWwgZGVzdGluYXRpb24uCiAKIExvb2sgdGhyb3VnaCB0aGUgTUFJTlRBSU5FUlMgZmlsZSBhbmQgdGhlIHNvdXJjZSBjb2RlLCBhbmQgZGV0ZXJtaW5lCiBpZiB5b3VyIGNoYW5nZSBhcHBsaWVzIHRvIGEgc3BlY2lmaWMgc3Vic3lzdGVtIG9mIHRoZSBrZXJuZWwsIHdpdGgKQEAgLTE0Niw3ICsxNTksNyBAQAogCiAKIAotNSkgU2VsZWN0IHlvdXIgQ0MgKGUtbWFpbCBjYXJib24gY29weSkgbGlzdC4KKzYpIFNlbGVjdCB5b3VyIENDIChlLW1haWwgY2FyYm9uIGNvcHkpIGxpc3QuCiAKIFVubGVzcyB5b3UgaGF2ZSBhIHJlYXNvbiBOT1QgdG8gZG8gc28sIENDIGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcuCiAKQEAgLTE4Nyw4ICsyMDAsNyBAQAogCiAKIAotCi02KSBObyBNSU1FLCBubyBsaW5rcywgbm8gY29tcHJlc3Npb24sIG5vIGF0dGFjaG1lbnRzLiAgSnVzdCBwbGFpbiB0ZXh0LgorNykgTm8gTUlNRSwgbm8gbGlua3MsIG5vIGNvbXByZXNzaW9uLCBubyBhdHRhY2htZW50cy4gIEp1c3QgcGxhaW4gdGV4dC4KIAogTGludXMgYW5kIG90aGVyIGtlcm5lbCBkZXZlbG9wZXJzIG5lZWQgdG8gYmUgYWJsZSB0byByZWFkIGFuZCBjb21tZW50CiBvbiB0aGUgY2hhbmdlcyB5b3UgYXJlIHN1Ym1pdHRpbmcuICBJdCBpcyBpbXBvcnRhbnQgZm9yIGEga2VybmVsCkBAIC0yMjMsOSArMjM1LDkgQEAKIAogCiAKLTcpIEUtbWFpbCBzaXplLgorOCkgRS1tYWlsIHNpemUuCiAKLVdoZW4gc2VuZGluZyBwYXRjaGVzIHRvIExpbnVzLCBhbHdheXMgZm9sbG93IHN0ZXAgIzYuCitXaGVuIHNlbmRpbmcgcGF0Y2hlcyB0byBMaW51cywgYWx3YXlzIGZvbGxvdyBzdGVwICM3LgogCiBMYXJnZSBjaGFuZ2VzIGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIG1haWxpbmcgbGlzdHMsIGFuZCBzb21lCiBtYWludGFpbmVycy4gIElmIHlvdXIgcGF0Y2gsIHVuY29tcHJlc3NlZCwgZXhjZWVkcyA0MCBrQiBpbiBzaXplLApAQCAtMjM0LDcgKzI0Niw3IEBACiAKIAogCi04KSBOYW1lIHlvdXIga2VybmVsIHZlcnNpb24uCis5KSBOYW1lIHlvdXIga2VybmVsIHZlcnNpb24uCiAKIEl0IGlzIGltcG9ydGFudCB0byBub3RlLCBlaXRoZXIgaW4gdGhlIHN1YmplY3QgbGluZSBvciBpbiB0aGUgcGF0Y2gKIGRlc2NyaXB0aW9uLCB0aGUga2VybmVsIHZlcnNpb24gdG8gd2hpY2ggdGhpcyBwYXRjaCBhcHBsaWVzLgpAQCAtMjQ0LDcgKzI1Niw3IEBACiAKIAogCi05KSBEb24ndCBnZXQgZGlzY291cmFnZWQuICBSZS1zdWJtaXQuCisxMCkgRG9uJ3QgZ2V0IGRpc2NvdXJhZ2VkLiAgUmUtc3VibWl0LgogCiBBZnRlciB5b3UgaGF2ZSBzdWJtaXR0ZWQgeW91ciBjaGFuZ2UsIGJlIHBhdGllbnQgYW5kIHdhaXQuICBJZiBMaW51cwogbGlrZXMgeW91ciBjaGFuZ2UgYW5kIGFwcGxpZXMgaXQsIGl0IHdpbGwgYXBwZWFyIGluIHRoZSBuZXh0IHZlcnNpb24KQEAgLTI3MCw3ICsyODIsNyBAQAogCiAKIAotMTApIEluY2x1ZGUgUEFUQ0ggaW4gdGhlIHN1YmplY3QKKzExKSBJbmNsdWRlIFBBVENIIGluIHRoZSBzdWJqZWN0CiAKIER1ZSB0byBoaWdoIGUtbWFpbCB0cmFmZmljIHRvIExpbnVzLCBhbmQgdG8gbGludXgta2VybmVsLCBpdCBpcyBjb21tb24KIGNvbnZlbnRpb24gdG8gcHJlZml4IHlvdXIgc3ViamVjdCBsaW5lIHdpdGggW1BBVENIXS4gIFRoaXMgbGV0cyBMaW51cwpAQCAtMjc5LDcgKzI5MSw3IEBACiAKIAogCi0xMSkgU2lnbiB5b3VyIHdvcmsKKzEyKSBTaWduIHlvdXIgd29yawogCiBUbyBpbXByb3ZlIHRyYWNraW5nIG9mIHdobyBkaWQgd2hhdCwgZXNwZWNpYWxseSB3aXRoIHBhdGNoZXMgdGhhdCBjYW4KIHBlcmNvbGF0ZSB0byB0aGVpciBmaW5hbCByZXN0aW5nIHBsYWNlIGluIHRoZSBrZXJuZWwgdGhyb3VnaCBzZXZlcmFsCkBAIC0zMjgsNyArMzQwLDggQEAKIHBvaW50IG91dCBzb21lIHNwZWNpYWwgZGV0YWlsIGFib3V0IHRoZSBzaWduLW9mZi4gCiAKIAotMTIpIFRoZSBjYW5vbmljYWwgcGF0Y2ggZm9ybWF0CisKKzEzKSBUaGUgY2Fub25pY2FsIHBhdGNoIGZvcm1hdAogCiBUaGUgY2Fub25pY2FsIHBhdGNoIHN1YmplY3QgbGluZSBpczoKIApAQCAtMzYzLDcgKzM3Niw4IEBACiBUaGUgInN1bW1hcnkgcGhyYXNlIiBpbiB0aGUgZW1haWwncyBTdWJqZWN0IHNob3VsZCBjb25jaXNlbHkKIGRlc2NyaWJlIHRoZSBwYXRjaCB3aGljaCB0aGF0IGVtYWlsIGNvbnRhaW5zLiAgVGhlICJzdW1tYXJ5CiBwaHJhc2UiIHNob3VsZCBub3QgYmUgYSBmaWxlbmFtZS4gIERvIG5vdCB1c2UgdGhlIHNhbWUgInN1bW1hcnkKLXBocmFzZSIgZm9yIGV2ZXJ5IHBhdGNoIGluIGEgd2hvbGUgcGF0Y2ggc2VyaWVzLgorcGhyYXNlIiBmb3IgZXZlcnkgcGF0Y2ggaW4gYSB3aG9sZSBwYXRjaCBzZXJpZXMgKHdoZXJlIGEgInBhdGNoCitzZXJpZXMiIGlzIGFuIG9yZGVyZWQgc2VxdWVuY2Ugb2YgbXVsdGlwbGUsIHJlbGF0ZWQgcGF0Y2hlcykuCiAKIEJlYXIgaW4gbWluZCB0aGF0IHRoZSAic3VtbWFyeSBwaHJhc2UiIG9mIHlvdXIgZW1haWwgYmVjb21lcwogYSBnbG9iYWxseS11bmlxdWUgaWRlbnRpZmllciBmb3IgdGhhdCBwYXRjaC4gIEl0IHByb3BhZ2F0ZXMKQEAgLTQyNiw2ICs0NDAsMTAgQEAKIE51ZmYgc2FpZC4gIElmIHlvdXIgY29kZSBkZXZpYXRlcyB0b28gbXVjaCBmcm9tIHRoaXMsIGl0IGlzIGxpa2VseQogdG8gYmUgcmVqZWN0ZWQgd2l0aG91dCBmdXJ0aGVyIHJldmlldywgYW5kIHdpdGhvdXQgY29tbWVudC4KIAorQ2hlY2sgeW91ciBwYXRjaGVzIHdpdGggdGhlIHBhdGNoIHN0eWxlIGNoZWNrZXIgcHJpb3IgdG8gc3VibWlzc2lvbgorKHNjcmlwdHMvY2hlY2twYXRjaC5wbCkuICBZb3Ugc2hvdWxkIGJlIGFibGUgdG8ganVzdGlmeSBhbGwKK3Zpb2xhdGlvbnMgdGhhdCByZW1haW4gaW4geW91ciBwYXRjaC4KKwogCiAKIDIpICNpZmRlZnMgYXJlIHVnbHkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9nZXRkZWxheXMuYyBiL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9nZXRkZWxheXMuYwppbmRleCBlOTEyNmU3Li43MWFjYzI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvZ2V0ZGVsYXlzLmMKKysrIGIvRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL2dldGRlbGF5cy5jCkBAIC02MSw4ICs2MSw2IEBACiAjZGVmaW5lIE1BWF9NU0dfU0laRQkxMDI0CiAvKiBNYXhpbXVtIG51bWJlciBvZiBjcHVzIGV4cGVjdGVkIHRvIGJlIHNwZWNpZmllZCBpbiBhIGNwdW1hc2sgKi8KICNkZWZpbmUgTUFYX0NQVVMJMzIKLS8qIE1heGltdW0gbGVuZ3RoIG9mIHBhdGhuYW1lIHRvIGxvZyBmaWxlICovCi0jZGVmaW5lIE1BWF9GSUxFTkFNRQkyNTYKIAogc3RydWN0IG1zZ3RlbXBsYXRlIHsKIAlzdHJ1Y3Qgbmxtc2doZHIgbjsKQEAgLTcyLDYgKzcwLDE2IEBACiAKIGNoYXIgY3B1bWFza1sxMDArNipNQVhfQ1BVU107CiAKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJnZXRkZWxheXMgWy1kaWx2XSBbLXcgbG9nZmlsZV0gWy1yIGJ1ZnNpemVdICIKKwkJCSJbLW0gY3B1bWFza10gWy10IHRnaWRdIFstcCBwaWRdXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgLWQ6IHByaW50IGRlbGF5YWNjdCBzdGF0c1xuIik7CisJZnByaW50ZihzdGRlcnIsICIgIC1pOiBwcmludCBJTyBhY2NvdW50aW5nICh3b3JrcyBvbmx5IHdpdGggLXApXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgLWw6IGxpc3RlbiBmb3JldmVyXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgLXY6IGRlYnVnIG9uXG4iKTsKK30KKwogLyoKICAqIENyZWF0ZSBhIHJhdyBuZXRsaW5rIHNvY2tldCBhbmQgYmluZAogICovCkBAIC0yMjEsMTMgKzIyOSwxMyBAQAogCWludCBjb3VudCA9IDA7CiAJaW50IHdyaXRlX2ZpbGUgPSAwOwogCWludCBtYXNrc2V0ID0gMDsKLQljaGFyIGxvZ2ZpbGVbMTI4XTsKKwljaGFyICpsb2dmaWxlID0gTlVMTDsKIAlpbnQgbG9vcCA9IDA7CiAKIAlzdHJ1Y3QgbXNndGVtcGxhdGUgbXNnOwogCiAJd2hpbGUgKDEpIHsKLQkJYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiZGl3OnI6bTp0OnA6djpsIik7CisJCWMgPSBnZXRvcHQoYXJnYywgYXJndiwgImRpdzpyOm06dDpwOnZsIik7CiAJCWlmIChjIDwgMCkKIAkJCWJyZWFrOwogCkBAIC0yNDEsNyArMjQ5LDcgQEAKIAkJCXByaW50X2lvX2FjY291bnRpbmcgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgJ3cnOgotCQkJc3RybmNweShsb2dmaWxlLCBvcHRhcmcsIE1BWF9GSUxFTkFNRSk7CisJCQlsb2dmaWxlID0gc3RyZHVwKG9wdGFyZyk7CiAJCQlwcmludGYoIndyaXRlIHRvIGZpbGUgJXNcbiIsIGxvZ2ZpbGUpOwogCQkJd3JpdGVfZmlsZSA9IDE7CiAJCQlicmVhazsKQEAgLTI3Nyw3ICsyODUsNyBAQAogCQkJbG9vcCA9IDE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ZigiVW5rbm93biBvcHRpb24gJWRcbiIsIGMpOworCQkJdXNhZ2UoKTsKIAkJCWV4aXQoLTEpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vSW50ZXJydXB0cyBiL0RvY3VtZW50YXRpb24vYXJtL0ludGVycnVwdHMKaW5kZXggNzJjOTNkZS4uMGQzZGJmMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vSW50ZXJydXB0cworKysgYi9Eb2N1bWVudGF0aW9uL2FybS9JbnRlcnJ1cHRzCkBAIC0xNDksNyArMTQ5LDcgQEAKIAogMy4gc2V0X0dQSU9fSVJRX2VkZ2UoKSBpcyBvYnNvbGV0ZSwgYW5kIHNob3VsZCBiZSByZXBsYWNlZCBieSBzZXRfaXJxX3R5cGUuCiAKLTQuIERpcmVjdCBhY2Nlc3MgdG8gU0ExMTExIElOVFBPTCBpcyBkZXByZWNpYXRlZC4gIFVzZSBzZXRfaXJxX3R5cGUgaW5zdGVhZC4KKzQuIERpcmVjdCBhY2Nlc3MgdG8gU0ExMTExIElOVFBPTCBpcyBkZXByZWNhdGVkLiAgVXNlIHNldF9pcnFfdHlwZSBpbnN0ZWFkLgogCiA1LiBBIGhhbmRsZXIgaXMgZXhwZWN0ZWQgdG8gcGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGFja25vd2xlZGdlbWVudCBvZiB0aGUKICAgIHBhcmVudCBJUlEgdmlhIHRoZSBjb3JyZWN0IGNoaXAgc3BlY2lmaWMgZnVuY3Rpb24uICBGb3IgaW5zdGFuY2UsIGlmCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvSDE5NDAudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0gxOTQwLnR4dAppbmRleCBkNmIxZGU5Li5mNGE3YjIyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvSDE5NDAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9IMTk0MC50eHQKQEAgLTIzLDcgKzIzLDcgQEAKIAogICAgIGh0dHA6Ly9oYW5kaGVsZHMub3JnL21vaW4vbW9pbi5jZ2kvSHBJcGFxSDE5NDAKIAotICBIZXJiZXJ0IFD2dHpsIHBhZ2VzOgorICBIZXJiZXJ0IFDDtnR6bCBwYWdlczoKIAogICAgIGh0dHA6Ly92c2VydmVyLjEzdGhmbG9vci5hdC9IMTk0MC8KIApAQCAtMzIsNyArMzIsNyBAQAogLS0tLS0tLS0tLS0KIAogICBUaGlzIHByb2plY3QgaXMgYmVpbmcgbWFpbnRhaW5lZCBhbmQgZGV2ZWxvcGVkIGJ5IGEgdmFyaWV0eQotICBvZiBwZW9wbGUsIGluY2x1ZGluZyBCZW4gRG9va3MsIEFybmF1ZCBQYXRhcmQsIGFuZCBIZXJiZXJ0IFD2dHpsLgorICBvZiBwZW9wbGUsIGluY2x1ZGluZyBCZW4gRG9va3MsIEFybmF1ZCBQYXRhcmQsIGFuZCBIZXJiZXJ0IFDDtnR6bC4KIAogICBUaGFua3MgdG8gdGhlIG1hbnkgb3RoZXJzIHdobyBoYXZlIGFsc28gcHJvdmlkZWQgc3VwcG9ydC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hdXhkaXNwbGF5L2NmYWcxMjg2NGIgYi9Eb2N1bWVudGF0aW9uL2F1eGRpc3BsYXkvY2ZhZzEyODY0YgppbmRleCAzNTcyYjk4Li5iNzE0MTgzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2F1eGRpc3BsYXkvY2ZhZzEyODY0YgorKysgYi9Eb2N1bWVudGF0aW9uL2F1eGRpc3BsYXkvY2ZhZzEyODY0YgpAQCAtNzgsOSArNzgsOSBAQAogR3JvdW5kICgxOCktLS1bR05EXSAgICAgICAgICAgICAgWys1dl0tLS0oMTkpIExFRCArCiBHcm91bmQgKDE5KS0tLVtHTkRdCiBHcm91bmQgKDIwKS0tLVtHTkRdICAgICAgICAgICAgICBFICAgIEEgICAgICAgICAgICAgVmFsdWVzOgotR3JvdW5kICgyMSktLS1bR05EXSAgICAgICBbR05EXS0tLVtQMV0tLS0oMTgpIFZlZSAgICC3IFIgPSBSZXNpc3RvciA9IDIyIG9obQotR3JvdW5kICgyMiktLS1bR05EXSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICC3IFAxID0gUHJlc2V0ID0gMTAgS29obQotR3JvdW5kICgyMyktLS1bR05EXSAgICAgICAtLS0tICAgUyAtLS0tLS0oIDMpIFYwICAgICC3IFAyID0gUHJlc2V0ID0gMSBLb2htCitHcm91bmQgKDIxKS0tLVtHTkRdICAgICAgIFtHTkRdLS0tW1AxXS0tLSgxOCkgVmVlICAgIC0gUiA9IFJlc2lzdG9yID0gMjIgb2htCitHcm91bmQgKDIyKS0tLVtHTkRdICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIC0gUDEgPSBQcmVzZXQgPSAxMCBLb2htCitHcm91bmQgKDIzKS0tLVtHTkRdICAgICAgIC0tLS0gICBTIC0tLS0tLSggMykgVjAgICAgIC0gUDIgPSBQcmVzZXQgPSAxIEtvaG0KIEdyb3VuZCAoMjQpLS0tW0dORF0gICAgICAgfCAgfAogR3JvdW5kICgyNSktLS1bR05EXSBbR05EXS0tLVtQMl0tLS1bUl0tLS0oMjApIExFRCAtCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmluZm10X21pc2MudHh0IGIvRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQKaW5kZXggZDA5N2YwOS4uZjYwOWViZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQKQEAgLTExMyw0ICsxMTMsNCBAQAogVGhlcmUgaXMgYSB3ZWIgcGFnZSBhYm91dCBiaW5mbXRfbWlzYyBhdAogaHR0cDovL3d3dy50YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGUvfnJndWVudGgvbGludXgvYmluZm10X21pc2MuaHRtbAogCi1SaWNoYXJkIEf8bnRoZXIgPHJndWVudGhAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlPgorUmljaGFyZCBHw7xudGhlciA8cmd1ZW50aEB0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2NhcGFiaWxpdHkudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9jYXBhYmlsaXR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjE3Mjk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ibG9jay9jYXBhYmlsaXR5LnR4dApAQCAtMCwwICsxLDE1IEBACitHZW5lcmljIEJsb2NrIERldmljZSBDYXBhYmlsaXR5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBzeXNmcyBmaWxlIGJsb2NrLzxkaXNrPi9jYXBhYmlsaXR5CisKK2NhcGFiaWxpdHkgaXMgYSBoZXggd29yZCBpbmRpY2F0aW5nIHdoaWNoIGNhcGFiaWxpdGllcyBhIHNwZWNpZmljIGRpc2sKK3N1cHBvcnRzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYml0cyBub3QgbGlzdGVkIGhlcmUsIHNlZQoraW5jbHVkZS9saW51eC9nZW5oZC5oCisKK0NhcGFiaWxpdHkJCQkJVmFsdWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkhEX0ZMX01FRElBX0NIQU5HRV9OT1RJRlkJCTQKKwlXaGVuIHRoaXMgYml0IGlzIHNldCwgdGhlIGRpc2sgc3VwcG9ydHMgQXN5bmNocm9ub3VzIE5vdGlmaWNhdGlvbgorCW9mIG1lZGlhIGNoYW5nZSBldmVudHMuICBUaGVzZSBldmVudHMgd2lsbCBiZSBicm9hZGNhc3QgdG8gdXNlcgorCXNwYWNlIHZpYSBrZXJuZWwgdWV2ZW50LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2lvcHJpby50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2lvcHJpby50eHQKaW5kZXggOTZjY2Y2OC4uMWI5MzBlZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9pb3ByaW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svaW9wcmlvLnR4dApAQCAtNiwxMCArNiwxMCBAQAogLS0tLS0KIAogV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGNmcSB2MyAoYWthIGNmcS10cyBvciB0aW1lIHNsaWNlZCBjZnEpLCBiYXNpYyBpbwotcHJpb3JpdGllcyBpcyBzdXBwb3J0ZWQgZm9yIHJlYWRzIG9uIGZpbGVzLiBUaGlzIGVuYWJsZXMgdXNlcnMgdG8gaW8gbmljZQotcHJvY2Vzc2VzIG9yIHByb2Nlc3MgZ3JvdXBzLCBzaW1pbGFyIHRvIHdoYXQgaGFzIGJlZW4gcG9zc2libGUgdG8gY3B1Ci1zY2hlZHVsaW5nIGZvciBhZ2VzLiBUaGlzIGRvY3VtZW50IG1haW5seSBkZXRhaWxzIHRoZSBjdXJyZW50IHBvc3NpYmlsaXRlcwotd2l0aCBjZnEsIG90aGVyIGlvIHNjaGVkdWxlcnMgZG8gbm90IHN1cHBvcnQgaW8gcHJpb3JpdGllcyBzbyBmYXIuCitwcmlvcml0aWVzIGFyZSBzdXBwb3J0ZWQgZm9yIHJlYWRzIG9uIGZpbGVzLiAgVGhpcyBlbmFibGVzIHVzZXJzIHRvIGlvIG5pY2UKK3Byb2Nlc3NlcyBvciBwcm9jZXNzIGdyb3Vwcywgc2ltaWxhciB0byB3aGF0IGhhcyBiZWVuIHBvc3NpYmxlIHdpdGggY3B1CitzY2hlZHVsaW5nIGZvciBhZ2VzLiAgVGhpcyBkb2N1bWVudCBtYWlubHkgZGV0YWlscyB0aGUgY3VycmVudCBwb3NzaWJpbGl0aWVzCit3aXRoIGNmcTsgb3RoZXIgaW8gc2NoZWR1bGVycyBkbyBub3Qgc3VwcG9ydCBpbyBwcmlvcml0aWVzIHRodXMgZmFyLgogCiBTY2hlZHVsaW5nIGNsYXNzZXMKIC0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQgYi9Eb2N1bWVudGF0aW9uL2NjaXNzLnR4dAppbmRleCBmNzRhZmZlLi5lNjU3MzZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NjaXNzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NjaXNzLnR4dApAQCAtMjIsMTQgKzIyLDIxIEBACiAJKiBTQSBFMjAwaQogCSogU0EgRTUwMAogCitEZXRlY3RpbmcgZHJpdmUgZmFpbHVyZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGdldCB0aGUgc3RhdHVzIG9mIGxvZ2ljYWwgdm9sdW1lcyBhbmQgdG8gZGV0ZWN0IHBoeXNpY2FsIGRyaXZlCitmYWlsdXJlcywgeW91IGNhbiB1c2UgdGhlIGNjaXNzX3ZvbF9zdGF0dXMgcHJvZ3JhbSBmb3VuZCBoZXJlOgoraHR0cDovL2NjaXNzLnNvdXJjZWZvcmdlLm5ldC8jY2Npc3NfdXRpbHMKKworRGV2aWNlIE5hbWluZzoKKy0tLS0tLS0tLS0tLS0tCisKIElmIG5vZGVzIGFyZSBub3QgYWxyZWFkeSBjcmVhdGVkIGluIHRoZSAvZGV2L2NjaXNzIGRpcmVjdG9yeSwgcnVuIGFzIHJvb3Q6CiAKICMgY2QgL2RldgogIyAuL01BS0VERVYgY2Npc3MKIAotRGV2aWNlIE5hbWluZzoKLS0tLS0tLS0tLS0tLS0tCi0KIFlvdSBuZWVkIHNvbWUgZW50cmllcyBpbiAvZGV2IGZvciB0aGUgY2Npc3MgZGV2aWNlLiAgVGhlIE1BS0VERVYgc2NyaXB0CiBjYW4gbWFrZSBkZXZpY2Ugbm9kZXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5LiAgQ3VycmVudGx5IHRoZSBkZXZpY2Ugc2V0dXAKIGlzIGFzIGZvbGxvd3M6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2NwdWZyZXEtc3RhdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9jcHVmcmVxLXN0YXRzLnR4dAppbmRleCA1M2Q2MmMxLi5mYzY0NzQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2NwdWZyZXEtc3RhdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvY3B1ZnJlcS1zdGF0cy50eHQKQEAgLTE3LDcgKzE3LDcgQEAKIAogMS4gSW50cm9kdWN0aW9uCiAKLWNwdWZyZXEtc3RhdHMgaXMgYSBkcml2ZXIgdGhhdCBwcm92aWNlcyBDUFUgZnJlcXVlbmN5IHN0YXRpc3RpY3MgZm9yIGVhY2ggQ1BVLgorY3B1ZnJlcS1zdGF0cyBpcyBhIGRyaXZlciB0aGF0IHByb3ZpZGVzIENQVSBmcmVxdWVuY3kgc3RhdGlzdGljcyBmb3IgZWFjaCBDUFUuCiBUaGVzZSBzdGF0aXN0aWNzIGFyZSBwcm92aWRlZCBpbiAvc3lzZnMgYXMgYSBidW5jaCBvZiByZWFkX29ubHkgaW50ZXJmYWNlcy4gVGhpcwogaW50ZXJmYWNlICh3aGVuIGNvbmZpZ3VyZWQpIHdpbGwgYXBwZWFyIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5IHVuZGVyIGNwdWZyZXEKIGluIC9zeXNmcyAoPHN5c2ZzIHJvb3Q+L2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL2NwdWZyZXEvc3RhdHMvKSBmb3IgZWFjaCBDUFUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1ob3RwbHVnLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CmluZGV4IGNjNjBkMjkuLmI2ZDI0YzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CkBAIC0yMTcsMTQgKzIxNywxNyBAQAogQTogVGhlIGZvbGxvd2luZyBoYXBwZW4sIGxpc3RlZCBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyIDotKQogCiAtIEEgbm90aWZpY2F0aW9uIGlzIHNlbnQgdG8gaW4ta2VybmVsIHJlZ2lzdGVyZWQgbW9kdWxlcyBieSBzZW5kaW5nIGFuIGV2ZW50Ci0gIENQVV9ET1dOX1BSRVBBUkUKKyAgQ1BVX0RPV05fUFJFUEFSRSBvciBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICBDUFUgaXMgYmVpbmcgb2ZmbGluZWQgd2hpbGUgdGFza3MgYXJlIGZyb3plbiBkdWUgdG8gYSBzdXNwZW5kIG9wZXJhdGlvbiBpbgorICBwcm9ncmVzcwogLSBBbGwgcHJvY2VzcyBpcyBtaWdyYXRlZCBhd2F5IGZyb20gdGhpcyBvdXRnb2luZyBDUFUgdG8gYSBuZXcgQ1BVCiAtIEFsbCBpbnRlcnJ1cHRzIHRhcmdldGVkIHRvIHRoaXMgQ1BVIGlzIG1pZ3JhdGVkIHRvIGEgbmV3IENQVQogLSB0aW1lcnMvYm90dG9tIGhhbGYvdGFzayBsZXRzIGFyZSBhbHNvIG1pZ3JhdGVkIHRvIGEgbmV3IENQVQogLSBPbmNlIGFsbCBzZXJ2aWNlcyBhcmUgbWlncmF0ZWQsIGtlcm5lbCBjYWxscyBhbiBhcmNoIHNwZWNpZmljIHJvdXRpbmUKICAgX19jcHVfZGlzYWJsZSgpIHRvIHBlcmZvcm0gYXJjaCBzcGVjaWZpYyBjbGVhbnVwLgogLSBPbmNlIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgYW4gZXZlbnQgZm9yIHN1Y2Nlc3NmdWwgY2xlYW51cCBpcyBzZW50IGJ5IGFuIGV2ZW50Ci0gIENQVV9ERUFELgorICBDUFVfREVBRCAob3IgQ1BVX0RFQURfRlJPWkVOIGlmIHRhc2tzIGFyZSBmcm96ZW4gZHVlIHRvIGEgc3VzcGVuZCB3aGlsZSB0aGUKKyAgQ1BVIGlzIGJlaW5nIG9mZmxpbmVkKS4KIAogICAiSXQgaXMgZXhwZWN0ZWQgdGhhdCBlYWNoIHNlcnZpY2UgY2xlYW5zIHVwIHdoZW4gdGhlIENQVV9ET1dOX1BSRVBBUkUKICAgbm90aWZpZXIgaXMgY2FsbGVkLCB3aGVuIENQVV9ERUFEIGlzIGNhbGxlZCBpdHMgZXhwZWN0ZWQgdGhlcmUgaXMgbm90aGluZwpAQCAtMjQyLDkgKzI0NSwxMSBAQAogCiAJCXN3aXRjaCAoYWN0aW9uKSB7CiAJCWNhc2UgQ1BVX09OTElORToKKwkJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKIAkJCWZvb2Jhcl9vbmxpbmVfYWN0aW9uKGNwdSk7CiAJCQlicmVhazsKIAkJY2FzZSBDUFVfREVBRDoKKwkJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCQlmb29iYXJfZGVhZF9hY3Rpb24oY3B1KTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NyeXB0by9hcGktaW50cm8udHh0IGIvRG9jdW1lbnRhdGlvbi9jcnlwdG8vYXBpLWludHJvLnR4dAppbmRleCA5Yjg0YjgwNS4uYTJhYzZkMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jcnlwdG8vYXBpLWludHJvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NyeXB0by9hcGktaW50cm8udHh0CkBAIC0xNzcsNyArMTc3LDcgQEAKIGFuZDsKICAgCiAgIE5ldHRsZSAoaHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9+bmlzc2UvbmV0dGxlLykKLSAgICBOaWVscyBN9mxsZXIKKyAgICBOaWVscyBNw7ZsbGVyCiAKIE9yaWdpbmFsIGRldmVsb3BlcnMgb2YgdGhlIGNyeXB0byBhbGdvcml0aG1zOgogCkBAIC0yMDAsOCArMjAwLDggQEAKICAgCiBERVMgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKICAgUmFpbWFyIEZhbGtlCi0gIEdpc2xlIFPmbGVuc21pbmRlCi0gIE5pZWxzIE32bGxlcgorICBHaXNsZSBTw6ZsZW5zbWluZGUKKyAgTmllbHMgTcO2bGxlcgogCiBCbG93ZmlzaCBhbGdvcml0aG0gY29udHJpYnV0b3JzOgogICBIZXJiZXJ0IFZhbGVyaW8gUmllZGVsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZGVsYXkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RlbGF5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWFkYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RlbGF5LnR4dApAQCAtMCwwICsxLDI2IEBACitkbS1kZWxheQorPT09PT09PT0KKworRGV2aWNlLU1hcHBlcidzICJkZWxheSIgdGFyZ2V0IGRlbGF5cyByZWFkcyBhbmQvb3Igd3JpdGVzCithbmQgbWFwcyB0aGVtIHRvIGRpZmZlcmVudCBkZXZpY2VzLgorCitQYXJhbWV0ZXJzOgorICAgIDxkZXZpY2U+IDxvZmZzZXQ+IDxkZWxheT4gWzx3cml0ZV9kZXZpY2U+IDx3cml0ZV9vZmZzZXQ+IDx3cml0ZV9kZWxheT5dCisKK1dpdGggc2VwYXJhdGUgd3JpdGUgcGFyYW1ldGVycywgdGhlIGZpcnN0IHNldCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzLgorRGVsYXlzIGFyZSBzcGVjaWZpZWQgaW4gbWlsbGlzZWNvbmRzLgorCitFeGFtcGxlIHNjcmlwdHMKKz09PT09PT09PT09PT09PQorW1sKKyMhL2Jpbi9zaAorIyBDcmVhdGUgZGV2aWNlIGRlbGF5aW5nIHJ3IG9wZXJhdGlvbiBmb3IgNTAwbXMKK2VjaG8gIjAgYGJsb2NrZGV2IC0tZ2V0c2l6ZSAkMWAgZGVsYXkgJDEgMCA1MDAiIHwgZG1zZXR1cCBjcmVhdGUgZGVsYXllZAorXV0KKworW1sKKyMhL2Jpbi9zaAorIyBDcmVhdGUgZGV2aWNlIGRlbGF5aW5nIG9ubHkgd3JpdGUgb3BlcmF0aW9uIGZvciA1MDBtcyBhbmQKKyMgc3BsaXR0aW5nIHJlYWRzIGFuZCB3cml0ZXMgdG8gZGlmZmVyZW50IGRldmljZXMgJDEgJDIKK2VjaG8gIjAgYGJsb2NrZGV2IC0tZ2V0c2l6ZSAkMWAgZGVsYXkgJDEgMCAwICQyIDAgNTAwIiB8IGRtc2V0dXAgY3JlYXRlIGRlbGF5ZWQKK11dCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgppbmRleCA2NGU5ZjZjLi41OTVhNWVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCisrKyBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKQEAgLTEwLDEwICsxMCwxMiBAQAogKi5ncnAKICouZ3oKICouaHRtbAorKi5pCiAqLmpwZWcKICoua28KICoubG9nCiAqLmxzdAorKi5tb2MKICoubW9kLmMKICoubwogKi5vcmlnCkBAIC0yNSw2ICsyNyw5IEBACiAqLnMKICouc2dtbAogKi5zbworKi5zeW10eXBlcworKi50YWIuYworKi50YWIuaAogKi50ZXgKICoudmVyCiAqLnhtbApAQCAtMzIsOSArMzcsMTMgQEAKICpfdmdhMTYuYwogKmNzY29wZSoKICp+CisqLjkKKyouOS5negogLioKIC5jc2NvcGUKIDUzYzcwMF9kLmgKKzUzYzd4eF9kLmgKKzUzYzd4eF91LmgKIDUzYzh4eF9kLmgqCiBCaXRLZWVwZXIKIENPUFlJTkcKQEAgLTcwLDkgKzc5LDExIEBACiBjbGFzc2xpc3QuaCoKIGNvbXAqLmxvZwogY29tcGlsZS5oKgorY29uZgogY29uZmlnCiBjb25maWctKgogY29uZmlnX2RhdGEuaCoKK2NvbmZpZ19kYXRhLmd6KgogY29ubWFrZWhhc2gKIGNvbnNvbGVtYXBfZGVmdGJsLmMqCiBjcmMzMnRhYmxlLmgqCkBAIC04MSwxOCArOTIsMjMgQEAKIGRldmxpc3QuaCoKIGRvY3Byb2MKIGR1bW15X3N5bS5jKgorZWxmMmVjb2ZmCiBlbGZjb25maWcuaCoKIGZpbGVsaXN0CiBmaXhkZXAKIGZvcmUyMDBlX21rZmlybQogZm9yZTIwMGVfcGNhX2Z3LmMqCitnY29uZgogZ2VuLWRldmxpc3QKIGdlbi1rZGJfY21kcy5jKgogZ2VuX2NyYzMydGFibGUKIGdlbl9pbml0X2NwaW8KIGdlbmtzeW1zCiBnZW50YmwKKypfZ3JheTI1Ni5jCiBpa2NvbmZpZy5oKgoraW5pdHJhbWZzX2RhdGEuY3BpbworaW5pdHJhbWZzX2RhdGEuY3Bpby5negogaW5pdHJhbWZzX2xpc3QKIGthbGxzeW1zCiBrY29uZmlnCkBAIC0xMDAsMTkgKzExNiwzMCBAQAoga2V5d29yZHMuYyoKIGtzeW0uYyoKIGtzeW0uaCoKK2t4Z2V0dGV4dAorbGtjX2RlZnMuaAogbGV4LmMqCitsZXguKi5jCitsazIwMS1tYXAuYwogbG9nb18qLmMKIGxvZ29fKl9jbHV0MjI0LmMKIGxvZ29fKl9tb25vLmMKIGx4ZGlhbG9nCiBtYWNoLXR5cGVzCiBtYWNoLXR5cGVzLmgKK21hY2h0eXBlcy5oCiBtYWtlX3RpbWVzX2gKIG1hcAogbWF1aV9ib290LmgKK21jb25mCittaWJvb3QqCiBta19lbGZjb25maWcKK21rYm9vdAorbWtidWdib290CiBta2RlcAorbWtwcmVwCiBta3RhYmxlcworbWt0cmVlCiBtb2Rwb3N0CiBtb2R2ZXJzaW9ucy5oKgogb2Zmc2V0LmgKQEAgLTEyMCwxOCArMTQ3LDI4IEBACiBvdWkuYyoKIHBhcnNlLmMqCiBwYXJzZS5oKgorcGF0Y2hlcyoKK3BjYTIwMGUuYmluCitwY2EyMDBlX2VjZC5iaW4yCitwaWdneS5negorcGlnZ3liYWNrCiBwbm10b2xvZ28KIHBwY19kZWZzLmgqCiBwcm9tY29uX3RibC5jKgogcHNzX2Jvb3QuaAorcWNvbmYKIHJhaWQ2YWx0aXZlYyouYwogcmFpZDZpbnQqLmMKIHJhaWQ2dGFibGVzLmMKK3JlbG9jcworc2VyaWVzCiBzZXR1cAogc2ltNzEwX2QuaCoKK3NJbWFnZQogc21fdGJsKgogc3BsaXQtaW5jbHVkZQogdGFncwordGZ0cGJvb3QuaW1nCiB0aW1lcy5oKgogdGtwYXJzZQogdHJpeF9ib290LmgKQEAgLTEzOSw4ICsxNzYsMTEgQEAKIHZlcnNpb24uaCoKIHZtbGludXgKIHZtbGludXgtKgordm1saW51eC5hb3V0CiB2bWxpbnV4LmxkcwogdnN5c2NhbGwubGRzCiB3YW54bGZ3LmluYwogdUltYWdlCi16SW1hZ2UKK3VuaWZkZWYKK3pJbWFnZSoKK3pjb25mLmhhc2guYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvcGxhdGZvcm0udHh0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvcGxhdGZvcm0udHh0CmluZGV4IGY3YzkyNjIuLjE5YzRhNmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL3BsYXRmb3JtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9wbGF0Zm9ybS50eHQKQEAgLTE2LDcgKzE2LDcgQEAKIGludG8gc3lzdGVtLW9uLWNoaXAgcGxhdGZvcm1zLiAgV2hhdCB0aGV5IHVzdWFsbHkgaGF2ZSBpbiBjb21tb24KIGlzIGRpcmVjdCBhZGRyZXNzaW5nIGZyb20gYSBDUFUgYnVzLiAgUmFyZWx5LCBhIHBsYXRmb3JtX2RldmljZSB3aWxsCiBiZSBjb25uZWN0ZWQgdGhyb3VnaCBhIHNlZ21lbnQgb2Ygc29tZSBvdGhlciBraW5kIG9mIGJ1czsgYnV0IGl0cwotcmVnaXN0ZXJzIHdpbGwgc3RpbGwgYmUgZGlyZWN0bHkgYWRkcmVzc2libGUuCityZWdpc3RlcnMgd2lsbCBzdGlsbCBiZSBkaXJlY3RseSBhZGRyZXNzYWJsZS4KIAogUGxhdGZvcm0gZGV2aWNlcyBhcmUgZ2l2ZW4gYSBuYW1lLCB1c2VkIGluIGRyaXZlciBiaW5kaW5nLCBhbmQgYQogbGlzdCBvZiByZXNvdXJjZXMgc3VjaCBhcyBhZGRyZXNzZXMgYW5kIElSUXMuCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgIHVzdWFsbHkgcmVnaXN0ZXIgbGF0ZXIgZHVyaW5nIGJvb3RpbmcsIG9yIGJ5IG1vZHVsZSBsb2FkaW5nLgogCiAgICAgLSBSZWdpc3RlcmluZyBhIGRyaXZlciB1c2luZyBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoKSB3b3JrcyBqdXN0IGxpa2UKLSAgICAgIHVzaW5nIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigpLCBleGNlcHQgdGhhdCB0aGUgdGhlIGRyaXZlciB3b24ndAorICAgICAgdXNpbmcgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCksIGV4Y2VwdCB0aGF0IHRoZSBkcml2ZXIgd29uJ3QKICAgICAgIGJlIHByb2JlZCBsYXRlciBpZiBhbm90aGVyIGRldmljZSByZWdpc3RlcnMuICAoV2hpY2ggaXMgT0ssIHNpbmNlCiAgICAgICB0aGlzIGludGVyZmFjZSBpcyBvbmx5IGZvciB1c2Ugd2l0aCBub24taG90cGx1Z2dhYmxlIGRldmljZXMuKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZHZiLXVzYiBiL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiCmluZGV4IDQ2Yjc4YjcuLmJmMmE5Y2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiCkBAIC0yMjgsNSArMjI4LDUgQEAKIAogICAgVWxmIEhlcm1lbmF1IGZvciBoZWxwaW5nIG1lIG91dCB3aXRoIHRyYWRpdGlvbmFsIGNoaW5lc2UuCiAKLSAgIEFuZHLpIFNtb2t0dW4gYW5kIENocmlzdGlhbiBGcvZtbWVsIGZvciBzdXBwb3J0aW5nIG1lIHdpdGgKKyAgIEFuZHLDqSBTbW9rdHVuIGFuZCBDaHJpc3RpYW4gRnLDtm1tZWwgZm9yIHN1cHBvcnRpbmcgbWUgd2l0aAogICAgIGhhcmR3YXJlIGFuZCBsaXN0ZW5pbmcgdG8gbXkgcHJvYmxlbXMgdmVyeSBwYXRpZW50bHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9jb250cmlidXRvcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvY29udHJpYnV0b3JzLnR4dAppbmRleCA0YzMzY2NlLi40ODY1YWRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi9jb250cmlidXRvcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2NvbnRyaWJ1dG9ycy50eHQKQEAgLTY2LDcgKzY2LDcgQEAKIEFuZHJlYXMgJ3JhbmR5JyBXZWluYmVyZ2VyCiAgIGZvciB0aGUgc3VwcG9ydCBvZiB0aGUgRnVqaXRzdS1TaWVtZW5zIEFjdGl2eSBidWRnZXQgRFZCLVMKIAotS2VubmV0aCBBYWZs+HkgPGtlLWFhQGZyaXN1cmYubm8+CitLZW5uZXRoIEFhZmzDuHkgPGtlLWFhQGZyaXN1cmYubm8+CiAgIGZvciBhZGRpbmcgc3VwcG9ydCBmb3IgVHlwaG9vbiBEVkItUyBidWRnZXQgY2FyZAogCiBFcm5zdCBQZWlubGljaCA8ZS5wZWlubGljaEBpbm9kZS5hdD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvYXJrZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9hcmtmYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg0ODdhOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvYXJrZmIudHh0CkBAIC0wLDAgKzEsNjggQEAKKworCWFya2ZiIC0gZmJkZXYgZHJpdmVyIGZvciBBUksgTG9naWMgY2hpcHMKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworU3VwcG9ydGVkIEhhcmR3YXJlCis9PT09PT09PT09PT09PT09PT0KKworCUFSSyAyMDAwUFYgY2hpcAorCUlDUyA1MzQyIHJhbWRhYworCisJLSBvbmx5IEJJT1MgaW5pdGlhbGl6ZWQgVkdBIGRldmljZXMgc3VwcG9ydGVkCisJLSBwcm9iYWJseSBub3Qgd29ya2luZyBvbiBiaWcgZW5kaWFuCisKKworU3VwcG9ydGVkIEZlYXR1cmVzCis9PT09PT09PT09PT09PT09PT0KKworCSogIDQgYnBwIHBzZXVkb2NvbG9yIG1vZGVzICh3aXRoIDE4Yml0IHBhbGV0dGUsIHR3byB2YXJpYW50cykKKwkqICA4IGJwcCBwc2V1ZG9jb2xvciBtb2RlICh3aXRoIDE4Yml0IHBhbGV0dGUpCisJKiAxNiBicHAgdHJ1ZWNvbG9yIG1vZGVzIChSR0IgNTU1IGFuZCBSR0IgNTY1KQorCSogMjQgYnBwIHRydWVjb2xvciBtb2RlIChSR0IgODg4KQorCSogMzIgYnBwIHRydWVjb2xvciBtb2RlIChSR0IgODg4KQorCSogdGV4dCBtb2RlIChhY3RpdmF0ZWQgYnkgYnBwID0gMCkKKwkqIGRvdWJsZXNjYW4gbW9kZSB2YXJpYW50IChub3QgYXZhaWxhYmxlIGluIHRleHQgbW9kZSkKKwkqIHBhbm5pbmcgaW4gYm90aCBkaXJlY3Rpb25zCisJKiBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0CisKK1RleHQgbW9kZSBpcyBzdXBwb3J0ZWQgZXZlbiBpbiBoaWdoZXIgcmVzb2x1dGlvbnMsIGJ1dCB0aGVyZSBpcyBsaW1pdGF0aW9uIHRvCitsb3dlciBwaXhjbG9ja3MgKGkgZ290IG1heGltdW0gYWJvdXQgNzAgTUh6LCBpdCBpcyBkZXBlbmRlbnQgb24gc3BlY2lmaWMKK2hhcmR3YXJlKS4gVGhpcyBsaW1pdGF0aW9uIGlzIG5vdCBlbmZvcmNlZCBieSBkcml2ZXIuIFRleHQgbW9kZSBzdXBwb3J0cyA4Yml0Cit3aWRlIGZvbnRzIG9ubHkgKGhhcmR3YXJlIGxpbWl0YXRpb24pIGFuZCAxNmJpdCB0YWxsIGZvbnRzIChkcml2ZXIKK2xpbWl0YXRpb24pLiBVbmZvcnR1bmF0ZWx5IGNoYXJhY3RlciBhdHRyaWJ1dGVzIChsaWtlIGNvbG9yKSBpbiB0ZXh0IG1vZGUgYXJlCiticm9rZW4gZm9yIHVua25vd24gcmVhc29uLCBzbyBpdHMgdXNlZnVsbmVzcyBpcyBsaW1pdGVkLgorCitUaGVyZSBhcmUgdHdvIDQgYnBwIG1vZGVzLiBGaXJzdCBtb2RlIChzZWxlY3RlZCBpZiBub25zdGQgPT0gMCkgaXMgbW9kZSB3aXRoCitwYWNrZWQgcGl4ZWxzLCBoaWdoIG5pYmJsZSBmaXJzdC4gU2Vjb25kIG1vZGUgKHNlbGVjdGVkIGlmIG5vbnN0ZCA9PSAxKSBpcyBtb2RlCit3aXRoIGludGVybGVhdmVkIHBsYW5lcyAoMSBieXRlIGludGVybGVhdmUpLCBNU0IgZmlyc3QuIEJvdGggbW9kZXMgc3VwcG9ydAorOGJpdCB3aWRlIGZvbnRzIG9ubHkgKGRyaXZlciBsaW1pdGF0aW9uKS4KKworU3VzcGVuZC9yZXN1bWUgd29ya3Mgb24gc3lzdGVtcyB0aGF0IGluaXRpYWxpemUgdmlkZW8gY2FyZCBkdXJpbmcgcmVzdW1lIGFuZAoraWYgZGV2aWNlIGlzIGFjdGl2ZSAoZm9yIGV4YW1wbGUgdXNlZCBieSBmYmNvbikuCisKKworTWlzc2luZyBGZWF0dXJlcworPT09PT09PT09PT09PT09PQorKGFsaWFzIFRPRE8gbGlzdCkKKworCSogc2Vjb25kYXJ5IChub3QgaW5pdGlhbGl6ZWQgYnkgQklPUykgZGV2aWNlIHN1cHBvcnQKKyAgIAkqIGJpZyBlbmRpYW4gc3VwcG9ydAorCSogRFBNUyBzdXBwb3J0CisJKiBNTUlPIHN1cHBvcnQKKwkqIGludGVybGFjZWQgbW9kZSB2YXJpYW50CisJKiBzdXBwb3J0IGZvciBmb250d2lkdGhzICE9IDggaW4gNCBicHAgbW9kZXMKKwkqIHN1cHBvcnQgZm9yIGZvbnRoZWlnaHQgIT0gMTYgaW4gdGV4dCBtb2RlCisJKiBoYXJkd2FyZSBjdXJzb3IKKwkqIHZzeW5jIHN5bmNocm9uaXphdGlvbgorCSogZmVhdHVyZSBjb25uZWN0b3Igc3VwcG9ydAorCSogYWNjZWxlcmF0aW9uIHN1cHBvcnQgKDg1MTQtbGlrZSAyRCkKKworCitLbm93biBidWdzCis9PT09PT09PT09CisKKwkqIGNoYXJhY3RlciBhdHRyaWJ1dGVzIChhbmQgY3Vyc29yKSBpbiB0ZXh0IG1vZGUgYXJlIGJyb2tlbgorCistLQorT25kcmVqIFphamljZWsgPHNhbnRpYWdvQGNyZnJlZW5ldC5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2F0eTEyOGZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvYXR5MTI4ZmIudHh0CmluZGV4IDA2OTI2MmYuLmI2MDUyMDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmIvYXR5MTI4ZmIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmIvYXR5MTI4ZmIudHh0CkBAIC01NCw4ICs1NCw4IEBACiAKIG5vYWNjZWwgIC0gZG8gbm90IHVzZSBhY2NlbGVyYXRpb24gZW5naW5lLiBJdCBpcyBkZWZhdWx0LgogYWNjZWwgICAgLSB1c2UgYWNjZWxlcmF0aW9uIGVuZ2luZS4gTm90IGZpbmlzaGVkLgotdm1vZGU6eCAgLSBjaG9vc2VzIFBvd2VyTWFjaW50b3NoIHZpZGVvIG1vZGUgPHg+LiBEZXByZWNpYXRlZC4KLWNtb2RlOnggIC0gY2hvb3NlcyBQb3dlck1hY2ludG9zaCBjb2xvdXIgbW9kZSA8eD4uIERlcHJlY2lhdGVkLgordm1vZGU6eCAgLSBjaG9vc2VzIFBvd2VyTWFjaW50b3NoIHZpZGVvIG1vZGUgPHg+LiBEZXByZWNhdGVkLgorY21vZGU6eCAgLSBjaG9vc2VzIFBvd2VyTWFjaW50b3NoIGNvbG91ciBtb2RlIDx4Pi4gRGVwcmVjYXRlZC4KIDxYeFhAWD4gIC0gc2VsZWN0cyBzdGFydHVwIHZpZGVvbW9kZS4gU2VlIG1vZGVkYi50eHQgZm9yIGRldGFpbGVkCiAJICAgZXhwbGFuYXRpb24uIERlZmF1bHQgaXMgNjQweDQ4MHg4YnBwLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2RlZmVycmVkX2lvLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvZGVmZXJyZWRfaW8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczY2Y5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL2RlZmVycmVkX2lvLnR4dApAQCAtMCwwICsxLDc1IEBACitEZWZlcnJlZCBJTworLS0tLS0tLS0tLS0KKworRGVmZXJyZWQgSU8gaXMgYSB3YXkgdG8gZGVsYXkgYW5kIHJlcHVycG9zZSBJTy4gSXQgdXNlcyBob3N0IG1lbW9yeSBhcyBhCitidWZmZXIgYW5kIHRoZSBNTVUgcGFnZWZhdWx0IGFzIGEgcHJldHJpZ2dlciBmb3Igd2hlbiB0byBwZXJmb3JtIHRoZSBkZXZpY2UKK0lPLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgbWF5IGJlIGEgdXNlZnVsIGV4cGxhaW5hdGlvbiBvZiBob3cgb25lIHN1Y2ggc2V0dXAKK3dvcmtzOgorCistIHVzZXJzcGFjZSBhcHAgbGlrZSBYZmJkZXYgbW1hcHMgZnJhbWVidWZmZXIKKy0gZGVmZXJyZWQgSU8gYW5kIGRyaXZlciBzZXRzIHVwIG5vcGFnZSBhbmQgcGFnZV9ta3dyaXRlIGhhbmRsZXJzCistIHVzZXJzcGFjZSBhcHAgdHJpZXMgdG8gd3JpdGUgdG8gbW1hcGVkIHZhZGRyZXNzCistIHdlIGdldCBwYWdlZmF1bHQgYW5kIHJlYWNoIG5vcGFnZSBoYW5kbGVyCistIG5vcGFnZSBoYW5kbGVyIGZpbmRzIGFuZCByZXR1cm5zIHBoeXNpY2FsIHBhZ2UKKy0gd2UgZ2V0IHBhZ2VfbWt3cml0ZSB3aGVyZSB3ZSBhZGQgdGhpcyBwYWdlIHRvIGEgbGlzdAorLSBzY2hlZHVsZSBhIHdvcmtxdWV1ZSB0YXNrIHRvIGJlIHJ1biBhZnRlciBhIGRlbGF5CistIGFwcCBjb250aW51ZXMgd3JpdGluZyB0byB0aGF0IHBhZ2Ugd2l0aCBubyBhZGRpdGlvbmFsIGNvc3QuIHRoaXMgaXMKKyAgdGhlIGtleSBiZW5lZml0LgorLSB0aGUgd29ya3F1ZXVlIHRhc2sgY29tZXMgaW4gYW5kIG1rY2xlYW5zIHRoZSBwYWdlcyBvbiB0aGUgbGlzdCwgdGhlbgorIGNvbXBsZXRlcyB0aGUgd29yayBhc3NvY2lhdGVkIHdpdGggdXBkYXRpbmcgdGhlIGZyYW1lYnVmZmVyLiB0aGlzIGlzCisgIHRoZSByZWFsIHdvcmsgdGFsa2luZyB0byB0aGUgZGV2aWNlLgorLSBhcHAgdHJpZXMgdG8gd3JpdGUgdG8gdGhlIGFkZHJlc3MgKHRoYXQgaGFzIG5vdyBiZWVuIG1rY2xlYW5lZCkKKy0gZ2V0IHBhZ2VmYXVsdCBhbmQgdGhlIGFib3ZlIHNlcXVlbmNlIG9jY3VycyBhZ2FpbgorCitBcyBjYW4gYmUgc2VlbiBmcm9tIGFib3ZlLCBvbmUgYmVuZWZpdCBpcyByb3VnaGx5IHRvIGFsbG93IGJ1cnN0eSBmcmFtZWJ1ZmZlcgord3JpdGVzIHRvIG9jY3VyIGF0IG1pbmltdW0gY29zdC4gVGhlbiBhZnRlciBzb21lIHRpbWUgd2hlbiBob3BlZnVsbHkgdGhpbmdzCitoYXZlIGdvbmUgcXVpZXQsIHdlIGdvIGFuZCByZWFsbHkgdXBkYXRlIHRoZSBmcmFtZWJ1ZmZlciB3aGljaCB3b3VsZCBiZQorYSByZWxhdGl2ZWx5IG1vcmUgZXhwZW5zaXZlIG9wZXJhdGlvbi4KKworRm9yIHNvbWUgdHlwZXMgb2Ygbm9udm9sYXRpbGUgaGlnaCBsYXRlbmN5IGRpc3BsYXlzLCB0aGUgZGVzaXJlZCBpbWFnZSBpcwordGhlIGZpbmFsIGltYWdlIHJhdGhlciB0aGFuIHRoZSBpbnRlcm1lZGlhdGUgc3RhZ2VzIHdoaWNoIGlzIHdoeSBpdCdzIG9rYXkKK3RvIG5vdCB1cGRhdGUgZm9yIGVhY2ggd3JpdGUgdGhhdCBpcyBvY2N1cmluZy4KKworSXQgbWF5IGJlIHRoZSBjYXNlIHRoYXQgdGhpcyBpcyB1c2VmdWwgaW4gb3RoZXIgc2NlbmFyaW9zIGFzIHdlbGwuIFBhdWwgTXVuZHQKK2hhcyBtZW50aW9uZWQgYSBjYXNlIHdoZXJlIGl0IGlzIGJlbmVmaWNpYWwgdG8gdXNlIHRoZSBwYWdlIGNvdW50IHRvIGRlY2lkZQord2hldGhlciB0byBjb2FsZXNjZSBhbmQgaXNzdWUgU0cgRE1BIG9yIHRvIGRvIG1lbW9yeSBidXJzdHMuCisKK0Fub3RoZXIgb25lIG1heSBiZSBpZiBvbmUgaGFzIGEgZGV2aWNlIGZyYW1lYnVmZmVyIHRoYXQgaXMgaW4gYW4gdXN1YWwgZm9ybWF0LAorc2F5IGRpYWdvbmFsbHkgc2hpZnRpbmcgUkdCLCB0aGlzIG1heSB0aGVuIGJlIGEgbWVjaGFuaXNtIGZvciB5b3UgdG8gYWxsb3cKK2FwcHMgdG8gcHJldGVuZCB0byBoYXZlIGEgbm9ybWFsIGZyYW1lYnVmZmVyIGJ1dCByZXN3aXp6bGUgZm9yIHRoZSBkZXZpY2UKK2ZyYW1lYnVmZmVyIGF0IHZzeW5jIHRpbWUgYmFzZWQgb24gdGhlIHRvdWNoZWQgcGFnZWxpc3QuCisKK0hvdyB0byB1c2UgaXQ6IChmb3IgYXBwbGljYXRpb25zKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitObyBjaGFuZ2VzIG5lZWRlZC4gbW1hcCB0aGUgZnJhbWVidWZmZXIgbGlrZSBub3JtYWwgYW5kIGp1c3QgdXNlIGl0LgorCitIb3cgdG8gdXNlIGl0OiAoZm9yIGZiZGV2IGRyaXZlcnMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgbWF5IGJlIGhlbHBmdWwuCisKKzEuIFNldHVwIHlvdXIgc3RydWN0dXJlLiBFZzoKKworc3RhdGljIHN0cnVjdCBmYl9kZWZlcnJlZF9pbyBoZWN1YmFmYl9kZWZpbyA9IHsKKwkuZGVsYXkJCT0gSFosCisJLmRlZmVycmVkX2lvCT0gaGVjdWJhZmJfZHB5X2RlZmVycmVkX2lvLAorfTsKKworVGhlIGRlbGF5IGlzIHRoZSBtaW5pbXVtIGRlbGF5IGJldHdlZW4gd2hlbiB0aGUgcGFnZV9ta3dyaXRlIHRyaWdnZXIgb2NjdXJzCithbmQgd2hlbiB0aGUgZGVmZXJyZWRfaW8gY2FsbGJhY2sgaXMgY2FsbGVkLiBUaGUgZGVmZXJyZWRfaW8gY2FsbGJhY2sgaXMKK2V4cGxhaW5lZCBiZWxvdy4KKworMi4gU2V0dXAgeW91ciBkZWZlcnJlZCBJTyBjYWxsYmFjay4gRWc6CitzdGF0aWMgdm9pZCBoZWN1YmFmYl9kcHlfZGVmZXJyZWRfaW8oc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpCisKK1RoZSBkZWZlcnJlZF9pbyBjYWxsYmFjayBpcyB3aGVyZSB5b3Ugd291bGQgcGVyZm9ybSBhbGwgeW91ciBJTyB0byB0aGUgZGlzcGxheQorZGV2aWNlLiBZb3UgcmVjZWl2ZSB0aGUgcGFnZWxpc3Qgd2hpY2ggaXMgdGhlIGxpc3Qgb2YgcGFnZXMgdGhhdCB3ZXJlIHdyaXR0ZW4KK3RvIGR1cmluZyB0aGUgZGVsYXkuIFlvdSBtdXN0IG5vdCBtb2RpZnkgdGhpcyBsaXN0LiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZAorZnJvbSBhIHdvcmtxdWV1ZS4KKworMy4gQ2FsbCBpbml0CisJaW5mby0+ZmJkZWZpbyA9ICZoZWN1YmFmYl9kZWZpbzsKKwlmYl9kZWZlcnJlZF9pb19pbml0KGluZm8pOworCis0LiBDYWxsIGNsZWFudXAKKwlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKGluZm8pOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9mcmFtZWJ1ZmZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2ZyYW1lYnVmZmVyLnR4dAppbmRleCA2MTBlNzgwLi5iM2UzYTAzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL2ZyYW1lYnVmZmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL2ZyYW1lYnVmZmVyLnR4dApAQCAtMjE1LDExICsyMTUsMTEgQEAKIHZzeW5jIGxlbmd0aC4KIAogICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tKwotICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAg4oaRICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CiAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICB8dXBwZXJfbWFyZ2luICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8Ci0gIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICClICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICDihpMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgIHwKICAgKy0tLS0tLS0tLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tLS0tLS0tLS0rLS0tLS0tLSsKLSAgfCAgICAgICAgICAjICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICB8ICAgICAgIHwKKyAgfCAgICAgICAgICAjICAgICAgICAgICAgICAgIOKGkSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAogICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAogICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAogICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfApAQCAtMjM4LDE1ICsyMzgsMTUgQEAKICAgfCAgICAgICAgICAjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICB8ICAgICAgIHwKICAgfCAgICAgICAgICAjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICB8ICAgICAgIHwKICAgfCAgICAgICAgICAjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICB8ICAgICAgIHwKLSAgfCAgICAgICAgICAjICAgICAgICAgICAgICAgIKUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICB8ICAgICAgIHwKKyAgfCAgICAgICAgICAjICAgICAgICAgICAgICAgIOKGkyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAogICArLS0tLS0tLS0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0tLS0tLS0tLSstLS0tLS0tKwotICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAg4oaRICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CiAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICB8bG93ZXJfbWFyZ2luICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8Ci0gIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICClICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICDihpMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgIHwKICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLSsKLSAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgIOKGkSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAogICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgfHZzeW5jX2xlbiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAotICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgpSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAg4oaTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CiAgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0rCiAKIFRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGV4cGVjdHMgYWxsIGhvcml6b250YWwgdGltaW5ncyBpbiBudW1iZXIgb2YgZG90Y2xvY2tzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2ltYWNmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2ltYWNmYi50eHQKaW5kZXggNzU5MDI4NS4uMzE2ZWM5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi9pbWFjZmIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmIvaW1hY2ZiLnR4dApAQCAtMTcsNyArMTcsNyBAQAogPT09PT09PT09PT09PT0KIAogSW1hY2ZiIGRvZXMgbm90IGhhdmUgYW55IGtpbmQgb2YgYXV0b2RldGVjdGlvbiBvZiB5b3VyIG1hY2hpbmUuCi1Zb3UgaGF2ZSB0byBhZGQgdGhlIGZpbGxvd2luZyBrZXJuZWwgcGFyYW1ldGVycyBpbiB5b3VyIGVsaWxvLmNvbmY6CitZb3UgaGF2ZSB0byBhZGQgdGhlIGZvbGxvd2luZyBrZXJuZWwgcGFyYW1ldGVycyBpbiB5b3VyIGVsaWxvLmNvbmY6CiAJTWFjYm9vayA6CiAJCXZpZGVvPWltYWNmYjptYWNib29rCiAJTWFjTWluaSA6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3MzZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9zM2ZiLnR4dAppbmRleCA4YTA0YzBkLi4yYzk3NzcwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL3MzZmIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmIvczNmYi50eHQKQEAgLTM1LDEwICszNSwxMiBAQAogCSogc3VzcGVuZC9yZXN1bWUgc3VwcG9ydAogCSogRFBNUyBzdXBwb3J0CiAKLVRleHQgbW9kZSBpcyBzdXBwb3J0ZWQgZXZlbiBpbiBoaWdoZXIgcmVzb2x1dGlvbnMsIGJ1dCB0aGVyZSBpcyBsaW1pdGF0aW9uCi10byBsb3dlciBwaXhjbG9ja3MgKG1heGltdW0gYmV0d2VlbiA1MC02MCBNSHosIGRlcGVuZGluZyBvbiBzcGVjaWZpYyBoYXJkd2FyZSkuCi1UaGlzIGxpbWl0YXRpb24gaXMgbm90IGVuZm9yY2VkIGJ5IGRyaXZlci4gVGV4dCBtb2RlIHN1cHBvcnRzIDhiaXQgd2lkZSBmb250cwotb25seSAoaGFyZHdhcmUgbGltaXRhdGlvbikgYW5kIDE2Yml0IHRhbGwgZm9udHMgKGRyaXZlciBsaW1pdGF0aW9uKS4KK1RleHQgbW9kZSBpcyBzdXBwb3J0ZWQgZXZlbiBpbiBoaWdoZXIgcmVzb2x1dGlvbnMsIGJ1dCB0aGVyZSBpcyBsaW1pdGF0aW9uIHRvCitsb3dlciBwaXhjbG9ja3MgKG1heGltdW0gdXN1YWxseSBiZXR3ZWVuIDUwLTYwIE1IeiwgZGVwZW5kaW5nIG9uIHNwZWNpZmljCitoYXJkd2FyZSwgaSBnZXQgYmVzdCByZXN1bHRzIGZyb20gcGxhaW4gUzMgVHJpbzMyIGNhcmQgLSBhYm91dCA3NSBNSHopLiBUaGlzCitsaW1pdGF0aW9uIGlzIG5vdCBlbmZvcmNlZCBieSBkcml2ZXIuIFRleHQgbW9kZSBzdXBwb3J0cyA4Yml0IHdpZGUgZm9udHMgb25seQorKGhhcmR3YXJlIGxpbWl0YXRpb24pIGFuZCAxNmJpdCB0YWxsIGZvbnRzIChkcml2ZXIgbGltaXRhdGlvbikuIFRleHQgbW9kZQorc3VwcG9ydCBpcyBicm9rZW4gb24gUzMgVHJpbzY0IFYyL0RYLgogCiBUaGVyZSBhcmUgdHdvIDQgYnBwIG1vZGVzLiBGaXJzdCBtb2RlIChzZWxlY3RlZCBpZiBub25zdGQgPT0gMCkgaXMgbW9kZSB3aXRoCiBwYWNrZWQgcGl4ZWxzLCBoaWdoIG5pYmJsZSBmaXJzdC4gU2Vjb25kIG1vZGUgKHNlbGVjdGVkIGlmIG5vbnN0ZCA9PSAxKSBpcyBtb2RlCkBAIC03Myw2ICs3NSw4IEBACiA9PT09PT09PT09CiAKIAkqIGN1cnNvciBkaXNhYmxlIGluIHRleHQgbW9kZSBkb2Vzbid0IHdvcmsKKwkqIHRleHQgbW9kZSBicm9rZW4gb24gUzMgVHJpbzY0IFYyL0RYCisKIAogLS0KIE9uZHJlaiBaYWppY2VrIDxzYW50aWFnb0BjcmZyZWVuZXQub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9zc3RmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3NzdGZiLnR4dAppbmRleCBkZjI3ZjViLi41NTBjYTc3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL3NzdGZiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3NzdGZiLnR4dApAQCAtMiw5ICsyLDkgQEAKIEludHJvZHVjdGlvbgogCiAJICBUaGlzIGlzIGEgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIDNkZngnIFZvb2RvbyBHcmFwaGljcyAKLQkoYWthIHZvb2RvbyAxLCBha2Egc3N0MSkgYW5kIFZvb2Rvb7IgKGFrYSBWb29kb28gMiwgYWthIENWRykgYmFzZWQgCisJKGFrYSB2b29kb28gMSwgYWthIHNzdDEpIGFuZCBWb29kb2/CsiAoYWthIFZvb2RvbyAyLCBha2EgQ1ZHKSBiYXNlZCAKIAl2aWRlbyBib2FyZHMuIEl0J3MgaGlnaGx5IGV4cGVyaW1lbnRhbCBjb2RlLCBidXQgaXMgZ3VhcmFudGVlZCB0byB3b3JrCi0Jb24gbXkgY29tcHV0ZXIsIHdpdGggbXkgIk1heGkgR2FtZXIgM0QiIGFuZCAiTWF4aSBHYW1lciAzZLIiIGJvYXJkcywKKwlvbiBteSBjb21wdXRlciwgd2l0aCBteSAiTWF4aSBHYW1lciAzRCIgYW5kICJNYXhpIEdhbWVyIDNkwrIiIGJvYXJkcywKIAlhbmQgd2l0aCBtZSAiYmV0d2VlbiBjaGFpciBhbmQga2V5Ym9hcmQiLiBTb21lIHBlb3BsZSB0ZXN0ZWQgb3RoZXIKIAljb21iaW5hdGlvbnMgYW5kIGl0IHNlZW1zIHRoYXQgaXQgd29ya3MuCiAJICBUaGUgbWFpbiBwYWdlIGlzIGxvY2F0ZWQgYXQgPGh0dHA6Ly9zc3RmYi5zb3VyY2Vmb3JnZS5uZXQ+LCBhbmQgaWYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvdnQ4NjIzZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi92dDg2MjNmYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1NDU3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvdnQ4NjIzZmIudHh0CkBAIC0wLDAgKzEsNjQgQEAKKworCXZ0ODYyM2ZiIC0gZmJkZXYgZHJpdmVyIGZvciBncmFwaGljcyBjb3JlIGluIFZJQSBWVDg2MjMgY2hpcHNldAorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK1N1cHBvcnRlZCBIYXJkd2FyZQorPT09PT09PT09PT09PT09PT09CisKKwlWSUEgVlQ4NjIzIFtDTEUyNjZdIGNoaXBzZXQgYW5kCWl0cyBncmFwaGljcyBjb3JlCisJCShrbm93biBhcyBDYXN0bGVSb2NrIG9yIFVuaWNocm9tZSkKKworSSB0ZXN0ZWQgdnQ4NjIzZmIgb24gVklBIEVQSUEgTUwtNjAwMAorCisKK1N1cHBvcnRlZCBGZWF0dXJlcworPT09PT09PT09PT09PT09PT09CisKKwkqICA0IGJwcCBwc2V1ZG9jb2xvciBtb2RlcyAod2l0aCAxOGJpdCBwYWxldHRlLCB0d28gdmFyaWFudHMpCisJKiAgOCBicHAgcHNldWRvY29sb3IgbW9kZSAod2l0aCAxOGJpdCBwYWxldHRlKQorCSogMTYgYnBwIHRydWVjb2xvciBtb2RlIChSR0IgNTY1KQorCSogMzIgYnBwIHRydWVjb2xvciBtb2RlIChSR0IgODg4KQorCSogdGV4dCBtb2RlIChhY3RpdmF0ZWQgYnkgYnBwID0gMCkKKwkqIGRvdWJsZXNjYW4gbW9kZSB2YXJpYW50IChub3QgYXZhaWxhYmxlIGluIHRleHQgbW9kZSkKKwkqIHBhbm5pbmcgaW4gYm90aCBkaXJlY3Rpb25zCisJKiBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0CisJKiBEUE1TIHN1cHBvcnQKKworVGV4dCBtb2RlIGlzIHN1cHBvcnRlZCBldmVuIGluIGhpZ2hlciByZXNvbHV0aW9ucywgYnV0IHRoZXJlIGlzIGxpbWl0YXRpb24gdG8KK2xvd2VyIHBpeGNsb2NrcyAobWF4aW11bSBhYm91dCAxMDAgTUh6KS4gVGhpcyBsaW1pdGF0aW9uIGlzIG5vdCBlbmZvcmNlZCBieQorZHJpdmVyLiBUZXh0IG1vZGUgc3VwcG9ydHMgOGJpdCB3aWRlIGZvbnRzIG9ubHkgKGhhcmR3YXJlIGxpbWl0YXRpb24pIGFuZAorMTZiaXQgdGFsbCBmb250cyAoZHJpdmVyIGxpbWl0YXRpb24pLgorCitUaGVyZSBhcmUgdHdvIDQgYnBwIG1vZGVzLiBGaXJzdCBtb2RlIChzZWxlY3RlZCBpZiBub25zdGQgPT0gMCkgaXMgbW9kZSB3aXRoCitwYWNrZWQgcGl4ZWxzLCBoaWdoIG5pYmJsZSBmaXJzdC4gU2Vjb25kIG1vZGUgKHNlbGVjdGVkIGlmIG5vbnN0ZCA9PSAxKSBpcyBtb2RlCit3aXRoIGludGVybGVhdmVkIHBsYW5lcyAoMSBieXRlIGludGVybGVhdmUpLCBNU0IgZmlyc3QuIEJvdGggbW9kZXMgc3VwcG9ydAorOGJpdCB3aWRlIGZvbnRzIG9ubHkgKGRyaXZlciBsaW1pdGF0aW9uKS4KKworU3VzcGVuZC9yZXN1bWUgd29ya3Mgb24gc3lzdGVtcyB0aGF0IGluaXRpYWxpemUgdmlkZW8gY2FyZCBkdXJpbmcgcmVzdW1lIGFuZAoraWYgZGV2aWNlIGlzIGFjdGl2ZSAoZm9yIGV4YW1wbGUgdXNlZCBieSBmYmNvbikuCisKKworTWlzc2luZyBGZWF0dXJlcworPT09PT09PT09PT09PT09PQorKGFsaWFzIFRPRE8gbGlzdCkKKworCSogc2Vjb25kYXJ5IChub3QgaW5pdGlhbGl6ZWQgYnkgQklPUykgZGV2aWNlIHN1cHBvcnQKKwkqIE1NSU8gc3VwcG9ydAorCSogaW50ZXJsYWNlZCBtb2RlIHZhcmlhbnQKKwkqIHN1cHBvcnQgZm9yIGZvbnR3aWR0aHMgIT0gOCBpbiA0IGJwcCBtb2RlcworCSogc3VwcG9ydCBmb3IgZm9udGhlaWdodCAhPSAxNiBpbiB0ZXh0IG1vZGUKKwkqIGhhcmR3YXJlIGN1cnNvcgorCSogdmlkZW8gb3ZlcmxheSBzdXBwb3J0CisJKiB2c3luYyBzeW5jaHJvbml6YXRpb24KKwkqIGFjY2VsZXJhdGlvbiBzdXBwb3J0ICg4NTE0LWxpa2UgMkQsIGJ1c21hc3RlciB0cmFuc2ZlcnMpCisKKworS25vd24gYnVncworPT09PT09PT09PQorCisJKiBjdXJzb3IgZGlzYWJsZSBpbiB0ZXh0IG1vZGUgZG9lc24ndCB3b3JrCisKKworLS0KK09uZHJlaiBaYWppY2VrIDxzYW50aWFnb0BjcmZyZWVuZXQub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDVmOTZjYjMuLjQ5YWUxZWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTYsNiArNiwxNCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hhdDoJTVhTRVIKK1doZW46CURlY2VtYmVyIDIwMDcKK1doeToJT2xkIG14c2VyIGRyaXZlciBpcyBvYnNvbGV0ZWQgYnkgdGhlIG14c2VyX25ldy4gR2l2ZSBpdCBzb21lIHRpbWUgeWV0CisJYW5kIHJlbW92ZSBpdC4KK1dobzoJSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFdoYXQ6CVY0TDIgVklESU9DX0dfTVBFR0NPTVAgYW5kIFZJRElPQ19TX01QRUdDT01QCiBXaGVuOglPY3RvYmVyIDIwMDcKIFdoeToJQnJva2VuIGF0dGVtcHQgdG8gc2V0IE1QRUcgY29tcHJlc3Npb24gcGFyYW1ldGVycy4gVGhlc2UgaW9jdGxzIGFyZQpAQCAtNTEsOCArNTksMTggQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1doYXQ6CW9sZCBOQ1I1M0M5eCBkcml2ZXIKK1doZW46CU9jdG9iZXIgMjAwNworV2h5OglSZXBsYWNlZCBieSB0aGUgbXVjaCBiZXR0ZXIgZXNwX3Njc2kgZHJpdmVyLiAgQWN0dWFsIGxvdy1sZXZlbAorCWRyaXZlciBjYW4gYmUgcG9ydGVkIG92ZXIgYWxtb3N0IHRyaXZpYWxseS4KK1dobzoJRGF2aWQgTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorCUNocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJVmlkZW80TGludXggQVBJIDEgaW9jdGxzIGFuZCB2aWRlb19kZWNvZGVyLmggZnJvbSBWaWRlbyBkZXZpY2VzLgogV2hlbjoJRGVjZW1iZXIgMjAwNgorRmlsZXM6CWluY2x1ZGUvbGludXgvdmlkZW9fZGVjb2Rlci5oCiBXaHk6CVY0TDEgQVAxIHdhcyByZXBsYWNlZCBieSBWNEwyIEFQSS4gZHVyaW5nIG1pZ3JhdGlvbiBmcm9tIDIuNCB0byAyLjYKIAlzZXJpZXMuIFRoZSBvbGQgQVBJIGhhdmUgbG90cyBvZiBkcmF3YmFja3MgYW5kIGRvbid0IHByb3ZpZGUgZW5vdWdoCiAJbWVhbnMgdG8gd29yayB3aXRoIGFsbCB2aWRlbyBhbmQgYXVkaW8gc3RhbmRhcmRzLiBUaGUgbmV3ZXIgQVBJIGlzCkBAIC0xMTcsMTggKzEzNSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglVc2FnZSBvZiBpbnZhbGlkIHRpbWV2YWxzIGluIHNldGl0aW1lcgotV2hlbjoJTWFyY2ggMjAwNwotV2h5OglQT1NJWCByZXF1aXJlcyB0byB2YWxpZGF0ZSB0aW1ldmFscyBpbiB0aGUgc2V0aXRpbWVyIGNhbGwuIFRoaXMKLQl3YXMgbmV2ZXIgZG9uZSBieSBMaW51eC4gVGhlIGludmFsaWQgKGUuZy4gbmVnYXRpdmUgdGltZXZhbHMpIHdlcmUKLQlzaWxlbnRseSBjb252ZXJ0ZWQgdG8gbW9yZSBvciBsZXNzIHJhbmRvbSB0aW1lb3V0cyBhbmQgaW50ZXJ2YWxzLgotCVVudGlsIHRoZSByZW1vdmFsIGEgcGVyIGJvb3QgbGltaXRlZCBudW1iZXIgb2Ygd2FybmluZ3MgaXMgcHJpbnRlZAotCWFuZCB0aGUgdGltZXZhbHMgYXJlIHNhbml0aXplZC4KLQotV2hvOglUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CVVudXNlZCBFWFBPUlRfU1lNQk9ML0VYUE9SVF9TWU1CT0xfR1BMIGV4cG9ydHMKIAkodGVtcG9yYXJ5IHRyYW5zaXRpb24gY29uZmlnIG9wdGlvbiBwcm92aWRlZCB1bnRpbCB0aGVuKQogCVRoZSB0cmFuc2l0aW9uIGNvbmZpZyBvcHRpb24gd2lsbCBhbHNvIGJlIHJlbW92ZWQgYXQgdGhlIHNhbWUgdGltZS4KQEAgLTE1Niw3ICsxNjIsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQ6CUludGVycnVwdCBvbmx5IFNBXyogZmxhZ3MKLVdoZW46CUphbnVhciAyMDA3CitXaGVuOglTZXB0ZW1iZXIgMjAwNwogV2h5OglUaGUgaW50ZXJydXB0IHJlbGF0ZWQgU0FfKiBmbGFncyBhcmUgcmVwbGFjZWQgYnkgSVJRRl8qIHRvIG1vdmUgdGhlbQogCW91dCBvZiB0aGUgc2lnbmFsIG5hbWVzcGFjZS4KIApAQCAtMjczLDE0ICsyNzksNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJaTh4eF90Y28gd2F0Y2hkb2cgZHJpdmVyCi1XaGVuOglpbiAyLjYuMjIKLVdoeToJdGhlIGk4eHhfdGNvIHdhdGNoZG9nIGRyaXZlciBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgaVRDT193ZHQKLQl3YXRjaGRvZyBkcml2ZXIuCi1XaG86CVdpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglNdWx0aXBhdGggY2FjaGVkIHJvdXRpbmcgc3VwcG9ydCBpbiBpcHY0CiBXaGVuOglpbiAyLjYuMjMKIFdoeToJQ29kZSB3YXMgbWVyZ2VkLCB0aGVuIHN1Ym1pdHRlciBpbW1lZGlhdGVseSBkaXNhcHBlYXJlZCBsZWF2aW5nCkBAIC0zMjMsMyArMzIxLDI5IEBACiBXaG86CUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDogIGRyaXZlcnMgZGVwZW5kaW5nIG9uIE9TU19PQlNPTEVURQorV2hlbjogIG9wdGlvbnMgaW4gMi42LjIzLCBjb2RlIGluIDIuNi4yNQorV2h5OiAgIG9ic29sZXRlIE9TUyBkcml2ZXJzCitXaG86ICAgQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDogbGliYXRhIHNwaW5kb3duIHNraXBwaW5nIGFuZCB3YXJuaW5nCitXaGVuOiBEZWMgMjAwOAorV2h5OiAgU29tZSBoYWx0KDgpIGltcGxlbWVudGF0aW9ucyBzeW5jaHJvbml6ZSBjYWNoZXMgZm9yIGFuZCBzcGluCisgICAgICBkb3duIGxpYmF0YSBkaXNrcyBiZWNhdXNlIGxpYmF0YSBkaWRuJ3QgdXNlIHRvIHNwaW4gZG93biBkaXNrIG9uCisgICAgICBzeXN0ZW0gaGFsdCAob25seSBzeW5jaHJvbml6ZWQgY2FjaGVzKS4KKyAgICAgIFNwaW4gZG93biBvbiBzeXN0ZW0gaGFsdCBpcyBub3cgaW1wbGVtZW50ZWQuICBzeXNmcyBub2RlCisgICAgICAvc3lzL2NsYXNzL3Njc2lfZGlzay9oOmM6aTpsL21hbmFnZV9zdGFydF9zdG9wIGlzIHByZXNlbnQgaWYKKyAgICAgIHNwaW4gZG93biBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KKyAgICAgIEJlY2F1c2UgaXNzdWluZyBzcGluIGRvd24gY29tbWFuZCB0byBhbiBhbHJlYWR5IHNwdW4gZG93biBkaXNrCisgICAgICBtYWtlcyBzb21lIGRpc2tzIHNwaW4gdXAganVzdCB0byBzcGluIGRvd24gYWdhaW4sIGxpYmF0YSB0cmFja3MKKyAgICAgIGRldmljZSBzcGluZG93biBzdGF0dXMgdG8gc2tpcCB0aGUgZXh0cmEgc3BpbmRvd24gY29tbWFuZCBhbmQKKyAgICAgIHdhcm4gYWJvdXQgaXQuCisgICAgICBUaGlzIGlzIHRvIGdpdmUgdXNlcnNwYWNlIHRvb2xzIHRoZSB0aW1lIHRvIGdldCB1cGRhdGVkIGFuZCB3aWxsCisgICAgICBiZSByZW1vdmVkIGFmdGVyIHVzZXJzcGFjZSBpcyByZWFzb25hYmx5IHVwZGF0ZWQuCitXaG86ICBUZWp1biBIZW8gPGh0ZWp1bkBnbWFpbC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKaW5kZXggMjhiZmVhNy4uZDg2NjU1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwpAQCAtMTUsNiArMTUsNyBAQAogCWludCAoKmRfZGVsZXRlKShzdHJ1Y3QgZGVudHJ5ICopOwogCXZvaWQgKCpkX3JlbGVhc2UpKHN0cnVjdCBkZW50cnkgKik7CiAJdm9pZCAoKmRfaXB1dCkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CisJY2hhciAqKCpkX2RuYW1lKSgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pOwogCiBsb2NraW5nIHJ1bGVzOgogCW5vbmUgaGF2ZSBCS0wKQEAgLTI1LDYgKzI2LDcgQEAKIGRfZGVsZXRlOgl5ZXMJCW5vCQl5ZXMJCW5vCiBkX3JlbGVhc2U6CW5vCQlubwkJbm8JCXllcwogZF9pcHV0OgkJbm8JCW5vCQlubwkJeWVzCitkX2RuYW1lOglubwkJbm8JCW5vCQlubwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW5vZGVfb3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiBwcm90b3R5cGVzOgpAQCAtNTIsNyArNTQsNyBAQAogCiBsb2NraW5nIHJ1bGVzOgogCWFsbCBtYXkgYmxvY2ssIG5vbmUgaGF2ZSBCS0wKLQkJaV9zZW0oaW5vZGUpCisJCWlfbXV0ZXgoaW5vZGUpCiBsb29rdXA6CQl5ZXMKIGNyZWF0ZToJCXllcwogbGluazoJCXllcyAoYm90aCkKQEAgLTcyLDcgKzc0LDcgQEAKIGdldHhhdHRyOglubwogbGlzdHhhdHRyOglubwogcmVtb3ZleGF0dHI6CXllcwotCUFkZGl0aW9uYWxseSwgLT5ybWRpcigpLCAtPnVubGluaygpIGFuZCAtPnJlbmFtZSgpIGhhdmUgLT5pX3NlbSBvbgorCUFkZGl0aW9uYWxseSwgLT5ybWRpcigpLCAtPnVubGluaygpIGFuZCAtPnJlbmFtZSgpIGhhdmUgLT5pX211dGV4IG9uCiB2aWN0aW0uCiAJY3Jvc3MtZGlyZWN0b3J5IC0+cmVuYW1lKCkgaGFzIChwZXItc3VwZXJibG9jaykgLT5zX3Zmc19yZW5hbWVfc2VtLgogCS0+dHJ1bmNhdGUoKSBpcyBuZXZlciBjYWxsZWQgZGlyZWN0bHkgLSBpdCdzIGEgY2FsbGJhY2ssIG5vdCBhCkBAIC00NTksNyArNDYxLDcgQEAKIC0+cmVhZCBvbiBkaXJlY3RvcmllcyBwcm9iYWJseSBtdXN0IGdvIGF3YXkgLSB3ZSBzaG91bGQganVzdCBlbmZvcmNlIC1FSVNESVIKIGluIHN5c19yZWFkKCkgYW5kIGZyaWVuZHMuCiAKLS0+ZnN5bmMoKSBoYXMgaV9zZW0gb24gaW5vZGUuCistPmZzeW5jKCkgaGFzIGlfbXV0ZXggb24gaW5vZGUuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkcXVvdF9vcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHByb3RvdHlwZXM6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RpcmVjdG9yeS1sb2NraW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kaXJlY3RvcnktbG9ja2luZwppbmRleCBkNzA5OWE5Li5mZjdiNjExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RpcmVjdG9yeS1sb2NraW5nCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGlyZWN0b3J5LWxvY2tpbmcKQEAgLTEsNSArMSw2IEBACiAJTG9ja2luZyBzY2hlbWUgdXNlZCBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMgaXMgYmFzZWQgb24gdHdvCi1raW5kcyBvZiBsb2NrcyAtIHBlci1pbm9kZSAoLT5pX3NlbSkgYW5kIHBlci1maWxlc3lzdGVtICgtPnNfdmZzX3JlbmFtZV9zZW0pLgora2luZHMgb2YgbG9ja3MgLSBwZXItaW5vZGUgKC0+aV9tdXRleCkgYW5kIHBlci1maWxlc3lzdGVtCisoLT5zX3Zmc19yZW5hbWVfbXV0ZXgpLgogCiAJRm9yIG91ciBwdXJwb3NlcyBhbGwgb3BlcmF0aW9ucyBmYWxsIGluIDUgY2xhc3NlczoKIApAQCAtNjMsNyArNjQsNyBAQAogYXR0ZW1wdCB0byBhY3F1aXJlIHNvbWUgbG9jayBhbmQgYWxyZWFkeSBob2xkcyBhdCBsZWFzdCBvbmUgbG9jay4gIExldCdzCiBjb25zaWRlciB0aGUgc2V0IG9mIGNvbnRlbmRlZCBsb2Nrcy4gIEZpcnN0IG9mIGFsbCwgZmlsZXN5c3RlbSBsb2NrIGlzCiBub3QgY29udGVuZGVkLCBzaW5jZSBhbnkgcHJvY2VzcyBibG9ja2VkIG9uIGl0IGlzIG5vdCBob2xkaW5nIGFueSBsb2Nrcy4KLVRodXMgYWxsIHByb2Nlc3NlcyBhcmUgYmxvY2tlZCBvbiAtPmlfc2VtLgorVGh1cyBhbGwgcHJvY2Vzc2VzIGFyZSBibG9ja2VkIG9uIC0+aV9tdXRleC4KIAogCU5vbi1kaXJlY3Rvcnkgb2JqZWN0cyBhcmUgbm90IGNvbnRlbmRlZCBkdWUgdG8gKDMpLiAgVGh1cyBsaW5rCiBjcmVhdGlvbiBjYW4ndCBiZSBhIHBhcnQgb2YgZGVhZGxvY2sgLSBpdCBjYW4ndCBiZSBibG9ja2VkIG9uIHNvdXJjZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9ocGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaHBmcy50eHQKaW5kZXggMzhhYmEwMy4uZmE0NWMzYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9ocGZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2hwZnMudHh0CkBAIC0yOTAsNyArMjkwLDcgQEAKIDIuMDcgTW9yZSBmaXhlcyBmb3IgV2FycCBTZXJ2ZXIuIE5vdyBpdCByZWFsbHkgd29ya3MKIDIuMDggQ3JlYXRpbmcgbmV3IGZpbGVzIGlzIG5vdCBzbyBzbG93IG9uIGxhcmdlIGRpc2tzCiAgICAgIEFuIGF0dGVtcHQgdG8gc3luYyBkZWxldGVkIGZpbGUgZG9lcyBub3QgZ2VuZXJhdGUgZmlsZXN5c3RlbSBlcnJvcgotMi4wOSBGaXhlZCBlcnJvciBvbiBleHRyZW1seSBmcmFnbWVudGVkIGZpbGVzCisyLjA5IEZpeGVkIGVycm9yIG9uIGV4dHJlbWVseSBmcmFnbWVudGVkIGZpbGVzCiAKIAogIHZpbTogc2V0IHRleHR3aWR0aD04MDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvamZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvamZzLnR4dAppbmRleCBiYWUxMjg2Li4yNmViZGU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2pmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9qZnMudHh0CkBAIC0yOSw3ICsyOSwxMyBAQAogZXJyb3JzPXJlbW91bnQtcm8JRGVmYXVsdC4gUmVtb3VudCB0aGUgZmlsZXN5c3RlbSByZWFkLW9ubHkgb24gYW4gZXJyb3IuCiBlcnJvcnM9cGFuaWMJCVBhbmljIGFuZCBoYWx0IHRoZSBtYWNoaW5lIGlmIGFuIGVycm9yIG9jY3Vycy4KIAotUGxlYXNlIHNlbmQgYnVncywgY29tbWVudHMsIGNhcmRzIGFuZCBsZXR0ZXJzIHRvIHNoYWdneUBhdXN0aW4uaWJtLmNvbS4KK3VpZD12YWx1ZQlPdmVycmlkZSBvbi1kaXNrIHVpZCB3aXRoIHNwZWNpZmllZCB2YWx1ZQorZ2lkPXZhbHVlCU92ZXJyaWRlIG9uLWRpc2sgZ2lkIHdpdGggc3BlY2lmaWVkIHZhbHVlCit1bWFzaz12YWx1ZQlPdmVycmlkZSBvbi1kaXNrIHVtYXNrIHdpdGggc3BlY2lmaWVkIG9jdGFsIHZhbHVlLiAgRm9yCisJCWRpcmVjdG9yaWVzLCB0aGUgZXhlY3V0ZSBiaXQgd2lsbCBiZSBzZXQgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKwkJcmVhZCBiaXQgaXMgc2V0LgorCitQbGVhc2Ugc2VuZCBidWdzLCBjb21tZW50cywgY2FyZHMgYW5kIGxldHRlcnMgdG8gc2hhZ2d5QGxpbnV4LnZuZXQuaWJtLmNvbS4KIAogVGhlIEpGUyBtYWlsaW5nIGxpc3QgY2FuIGJlIHN1YnNjcmliZWQgdG8gYnkgdXNpbmcgdGhlIGxpbmsgbGFiZWxlZAogIk1haWwgbGlzdCBTdWJzY3JpYmUiIGF0IG91ciB3ZWIgcGFnZSBodHRwOi8vamZzLnNvdXJjZWZvcmdlLm5ldC8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CmluZGV4IDgxNzc5MDYuLjhlZTEwZWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dApAQCAtMzQ5LDcgKzM0OSw3IEBACiBOb3RlIHRoZSAiU2hvdWxkIHN5bmM/IiBwYXJhbWV0ZXIgIm5vc3luYyIgbWVhbnMgdGhhdCB0aGUgdHdvIG1pcnJvcnMgYXJlCiBhbHJlYWR5IGluIHN5bmMgd2hpY2ggd2lsbCBiZSB0aGUgY2FzZSBvbiBhIGNsZWFuIHNodXRkb3duIG9mIFdpbmRvd3MuICBJZiB0aGUKIG1pcnJvcnMgYXJlIG5vdCBjbGVhbiwgeW91IGNhbiBzcGVjaWZ5IHRoZSAic3luYyIgb3B0aW9uIGluc3RlYWQgb2YgIm5vc3luYyIKLWFuZCB0aGUgRGV2aWNlLU1hcHBlciBkcml2ZXIgd2lsbCB0aGVuIGNvcHkgdGhlIGVudGlyZXkgb2YgdGhlICJTb3VyY2UgRGV2aWNlIgorYW5kIHRoZSBEZXZpY2UtTWFwcGVyIGRyaXZlciB3aWxsIHRoZW4gY29weSB0aGUgZW50aXJldHkgb2YgdGhlICJTb3VyY2UgRGV2aWNlIgogdG8gdGhlICJUYXJnZXQgRGV2aWNlIiBvciBpZiB5b3Ugc3BlY2lmaWVkIG11bHRpcGxlZCB0YXJnZXQgZGV2aWNlcyB0byBhbGwgb2YKIHRoZW0uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZwppbmRleCA1NTMxNjk0Li5kYWM0NWM5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nCkBAIC0xMDcsNyArMTA3LDcgQEAKIC0tLQogW2luZm9ybWF0aW9uYWxdCiAKLS0+bGluaygpIGNhbGxlcnMgaG9sZCAtPmlfc2VtIG9uIHRoZSBvYmplY3Qgd2UgYXJlIGxpbmtpbmcgdG8uICBTb21lIG9mIHlvdXIKKy0+bGluaygpIGNhbGxlcnMgaG9sZCAtPmlfbXV0ZXggb24gdGhlIG9iamVjdCB3ZSBhcmUgbGlua2luZyB0by4gIFNvbWUgb2YgeW91cgogcHJvYmxlbXMgbWlnaHQgYmUgb3Zlci4uLgogCiAtLS0KQEAgLTEzMCw5ICsxMzAsOSBAQAogLS0tCiBbbWFuZGF0b3J5XQogCi0tPnNldGF0dHIoKSBpcyBjYWxsZWQgd2l0aG91dCBCS0wgbm93LiAgQ2FsbGVyIF9hbHdheXNfIGhvbGRzIC0+aV9zZW0sIHNvCi13YXRjaCBmb3IgLT5pX3NlbS1ncmFiYmluZyBjb2RlIHRoYXQgbWlnaHQgYmUgdXNlZCBieSB5b3VyIC0+c2V0YXR0cigpLgotQ2FsbGVycyBvZiBub3RpZnlfY2hhbmdlKCkgbmVlZCAtPmlfc2VtIG5vdy4KKy0+c2V0YXR0cigpIGlzIGNhbGxlZCB3aXRob3V0IEJLTCBub3cuICBDYWxsZXIgX2Fsd2F5c18gaG9sZHMgLT5pX211dGV4LCBzbword2F0Y2ggZm9yIC0+aV9tdXRleC1ncmFiYmluZyBjb2RlIHRoYXQgbWlnaHQgYmUgdXNlZCBieSB5b3VyIC0+c2V0YXR0cigpLgorQ2FsbGVycyBvZiBub3RpZnlfY2hhbmdlKCkgbmVlZCAtPmlfbXV0ZXggbm93LgogCiAtLS0KIFtyZWNvbW1lbmRlZF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IDNmNGIyMjYuLjg3NTZhMDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMjI5LDcgKzIyOSw3IEBACiAgbW91bnRzICAgICAgTW91bnRlZCBmaWxlc3lzdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBuZXQgICAgICAgICBOZXR3b3JraW5nIGluZm8gKHNlZSB0ZXh0KSAgICAgICAgICAgICAgICAgICAgICAgIAogIHBhcnRpdGlvbnMgIFRhYmxlIG9mIHBhcnRpdGlvbnMga25vd24gdG8gdGhlIHN5c3RlbSAgICAgICAgICAgCi0gcGNpCSAgICAgRGVwcmVjaWF0ZWQgaW5mbyBvZiBQQ0kgYnVzIChuZXcgd2F5IC0+IC9wcm9jL2J1cy9wY2kvLCAKKyBwY2kJICAgICBEZXByZWNhdGVkIGluZm8gb2YgUENJIGJ1cyAobmV3IHdheSAtPiAvcHJvYy9idXMvcGNpLywKICAgICAgICAgICAgICBkZWNvdXBsZWQgYnkgbHNwY2kJCQkJCSgyLjQpCiAgcnRjICAgICAgICAgUmVhbCB0aW1lIGNsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBzY3NpICAgICAgICBTQ1NJIGluZm8gKHNlZSB0ZXh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMTEzOCw2ICsxMTM4LDEzIEBACiBCZWNhdXNlIHRoZSBOTUkgd2F0Y2hkb2cgc2hhcmVzIHJlZ2lzdGVycyB3aXRoIG9wcm9maWxlLCBieSBkaXNhYmxpbmcgdGhlIE5NSQogd2F0Y2hkb2csIG9wcm9maWxlIG1heSBoYXZlIG1vcmUgcmVnaXN0ZXJzIHRvIHV0aWxpemUuCiAKK21hcHNfcHJvdGVjdAorLS0tLS0tLS0tLS0tCisKK0VuYWJsZXMvRGlzYWJsZXMgdGhlIHByb3RlY3Rpb24gb2YgdGhlIHBlci1wcm9jZXNzIHByb2MgZW50cmllcyAibWFwcyIgYW5kCisic21hcHMiLiAgV2hlbiBlbmFibGVkLCB0aGUgY29udGVudHMgb2YgdGhlc2UgZmlsZXMgYXJlIHZpc2libGUgb25seSB0bworcmVhZGVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIHB0cmFjZSgpIHRoZSBnaXZlbiBwcm9jZXNzLgorCiAKIDIuNCAvcHJvYy9zeXMvdm0gLSBUaGUgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yZWxheS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JlbGF5LnR4dAppbmRleCA3ZmJiNmZmLi4xOGQyM2Y5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JlbGF5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JlbGF5LnR4dApAQCAtMzUxLDcgKzM1MSw3IEBACiB0aGUgY2FsbGJhY2sgcmV0dXJucyAwIHRvIGluZGljYXRlIHRoYXQgdGhlIGJ1ZmZlciBzd2l0Y2ggc2hvdWxkIG5vdAogb2NjdXIgeWV0LCBpLmUuIHVudGlsIHRoZSBjb25zdW1lciBoYXMgaGFkIGEgY2hhbmNlIHRvIHJlYWQgdGhlCiBjdXJyZW50IHNldCBvZiByZWFkeSBzdWItYnVmZmVycy4gIEZvciB0aGUgcmVsYXlfYnVmX2Z1bGwoKSBmdW5jdGlvbgotdG8gbWFrZSBzZW5zZSwgdGhlIGNvbnN1bWVyIGlzIHJlcG9uc2libGUgZm9yIG5vdGlmeWluZyB0aGUgcmVsYXkKK3RvIG1ha2Ugc2Vuc2UsIHRoZSBjb25zdW1lciBpcyByZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIHRoZSByZWxheQogaW50ZXJmYWNlIHdoZW4gc3ViLWJ1ZmZlcnMgaGF2ZSBiZWVuIGNvbnN1bWVkIHZpYQogcmVsYXlfc3ViYnVmc19jb25zdW1lZCgpLiAgQW55IHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8gd3JpdGUgaW50byB0aGUKIGJ1ZmZlciB3aWxsIGFnYWluIGludm9rZSB0aGUgc3ViYnVmX3N0YXJ0KCkgY2FsbGJhY2sgd2l0aCB0aGUgc2FtZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKaW5kZXggMDY5Y2IxMC4uZmNjMTIzZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQudHh0CkBAIC01Nyw2ICs1NywxMyBAQAogICAgICAgICAgICAgICAgICBjdXJyZW50bHkgZXhpc3QgaW4gdGhlIGRpcmVjdG9yeSwgJ2xvbmdmaWxlLnR4dCcgd2lsbAogICAgICAgICAgICAgICAgICBiZSB0aGUgc2hvcnQgYWxpYXMgaW5zdGVhZCBvZiAnbG9uZ2ZpfjEudHh0Jy4gCiAgICAgICAgICAgICAgICAgICAKK3VzZWZyZWUgICAgICAgLS0gVXNlIHRoZSAiZnJlZSBjbHVzdGVycyIgdmFsdWUgc3RvcmVkIG9uIEZTSU5GTy4gSXQnbGwKKyAgICAgICAgICAgICAgICAgYmUgdXNlZCB0byBkZXRlcm1pbmUgbnVtYmVyIG9mIGZyZWUgY2x1c3RlcnMgd2l0aG91dAorICAgICAgICAgICAgICAgICBzY2FubmluZyBkaXNrLiBCdXQgaXQncyBub3QgdXNlZCBieSBkZWZhdWx0LCBiZWNhdXNlCisgICAgICAgICAgICAgICAgIHJlY2VudCBXaW5kb3dzIGRvbid0IHVwZGF0ZSBpdCBjb3JyZWN0bHkgaW4gc29tZQorICAgICAgICAgICAgICAgICBjYXNlLiBJZiB5b3UgYXJlIHN1cmUgdGhlICJmcmVlIGNsdXN0ZXJzIiBvbiBGU0lORk8gaXMKKyAgICAgICAgICAgICAgICAgY29ycmVjdCwgYnkgdGhpcyBvcHRpb24geW91IGNhbiBhdm9pZCBzY2FubmluZyBkaXNrLgorCiBxdWlldCAgICAgICAgIC0tIFN0b3BzIHByaW50aW5nIGNlcnRhaW4gd2FybmluZyBtZXNzYWdlcy4KIAogY2hlY2s9c3xyfG4gICAtLSBDYXNlIHNlbnNpdGl2aXR5IGNoZWNraW5nIHNldHRpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKaW5kZXggZWEyNzFmMi4uYTQ3Y2M4MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dApAQCAtODI3LDcgKzgyNyw3IEBACiBvcGVyYXRpb25zLiBEZW50cmllcyBhbmQgdGhlIGRjYWNoZSBhcmUgdGhlIGRvbWFpbiBvZiB0aGUgVkZTIGFuZCB0aGUKIGluZGl2aWR1YWwgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuIERldmljZSBkcml2ZXJzIGhhdmUgbm8gYnVzaW5lc3MKIGhlcmUuIFRoZXNlIG1ldGhvZHMgbWF5IGJlIHNldCB0byBOVUxMLCBhcyB0aGV5IGFyZSBlaXRoZXIgb3B0aW9uYWwgb3IKLXRoZSBWRlMgdXNlcyBhIGRlZmF1bHQuIEFzIG9mIGtlcm5lbCAyLjYuMTMsIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUKK3RoZSBWRlMgdXNlcyBhIGRlZmF1bHQuIEFzIG9mIGtlcm5lbCAyLjYuMjIsIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUKIGRlZmluZWQ6CiAKIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB7CkBAIC04MzcsNiArODM3LDcgQEAKIAlpbnQgKCpkX2RlbGV0ZSkoc3RydWN0IGRlbnRyeSAqKTsKIAl2b2lkICgqZF9yZWxlYXNlKShzdHJ1Y3QgZGVudHJ5ICopOwogCXZvaWQgKCpkX2lwdXQpKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOworCWNoYXIgKigqZF9kbmFtZSkoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIGludCk7CiB9OwogCiAgIGRfcmV2YWxpZGF0ZTogY2FsbGVkIHdoZW4gdGhlIFZGUyBuZWVkcyB0byByZXZhbGlkYXRlIGEgZGVudHJ5LiBUaGlzCkBAIC04NTksNiArODYwLDI2IEBACiAJVkZTIGNhbGxzIGlwdXQoKS4gSWYgeW91IGRlZmluZSB0aGlzIG1ldGhvZCwgeW91IG11c3QgY2FsbAogCWlwdXQoKSB5b3Vyc2VsZgogCisgIGRfZG5hbWU6IGNhbGxlZCB3aGVuIHRoZSBwYXRobmFtZSBvZiBhIGRlbnRyeSBzaG91bGQgYmUgZ2VuZXJhdGVkLgorCVVzZWZ1bGwgZm9yIHNvbWUgcHNldWRvIGZpbGVzeXN0ZW1zIChzb2NrZnMsIHBpcGVmcywgLi4uKSB0byBkZWxheQorCXBhdGhuYW1lIGdlbmVyYXRpb24uIChJbnN0ZWFkIG9mIGRvaW5nIGl0IHdoZW4gZGVudHJ5IGlzIGNyZWF0ZWQsCisJaXRzIGRvbmUgb25seSB3aGVuIHRoZSBwYXRoIGlzIG5lZWRlZC4pLiBSZWFsIGZpbGVzeXN0ZW1zIHByb2JhYmx5CisJZG9udCB3YW50IHRvIHVzZSBpdCwgYmVjYXVzZSB0aGVpciBkZW50cmllcyBhcmUgcHJlc2VudCBpbiBnbG9iYWwKKwlkY2FjaGUgaGFzaCwgc28gdGhlaXIgaGFzaCBzaG91bGQgYmUgYW4gaW52YXJpYW50LiBBcyBubyBsb2NrIGlzCisJaGVsZCwgZF9kbmFtZSgpIHNob3VsZCBub3QgdHJ5IHRvIG1vZGlmeSB0aGUgZGVudHJ5IGl0c2VsZiwgdW5sZXNzCisJYXBwcm9wcmlhdGUgU01QIHNhZmV0eSBpcyB1c2VkLiBDQVVUSU9OIDogZF9wYXRoKCkgbG9naWMgaXMgcXVpdGUKKwl0cmlja3kuIFRoZSBjb3JyZWN0IHdheSB0byByZXR1cm4gZm9yIGV4YW1wbGUgIkhlbGxvIiBpcyB0byBwdXQgaXQKKwlhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhci4KKwlkeW5hbWljX2RuYW1lKCkgaGVscGVyIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHRha2UgY2FyZSBvZiB0aGlzLgorCitFeGFtcGxlIDoKKworc3RhdGljIGNoYXIgKnBpcGVmc19kbmFtZShzdHJ1Y3QgZGVudHJ5ICpkZW50LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pCit7CisJcmV0dXJuIGR5bmFtaWNfZG5hbWUoZGVudHJ5LCBidWZmZXIsIGJ1ZmxlbiwgInBpcGU6WyVsdV0iLAorCQkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8pOworfQorCiBFYWNoIGRlbnRyeSBoYXMgYSBwb2ludGVyIHRvIGl0cyBwYXJlbnQgZGVudHJ5LCBhcyB3ZWxsIGFzIGEgaGFzaCBsaXN0CiBvZiBjaGlsZCBkZW50cmllcy4gQ2hpbGQgZGVudHJpZXMgYXJlIGJhc2ljYWxseSBsaWtlIGZpbGVzIGluIGEKIGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGlwLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGlwLnR4dAppbmRleCA2YzBjZWYxLi4zY2M0MDEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hpcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94aXAudHh0CkBAIC0xOSw3ICsxOSw3IEBACiBkaXJlY3RseSBmcm9tL3RvIHRoZSBtZW1vcnkgYmFja2VkIHN0b3JhZ2UgZGV2aWNlLiBGb3IgZmlsZSBtYXBwaW5ncywgdGhlCiBzdG9yYWdlIGRldmljZSBpdHNlbGYgaXMgbWFwcGVkIGRpcmVjdGx5IGludG8gdXNlcnNwYWNlLgogCi1UaGlzIGltcGxlbWVudGF0aW9uIHdhcyBpbml0aWFseSB3cml0dGVuIGZvciBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGJldHdlZW4KK1RoaXMgaW1wbGVtZW50YXRpb24gd2FzIGluaXRpYWxseSB3cml0dGVuIGZvciBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGJldHdlZW4KIGRpZmZlcmVudCB2aXJ0dWFsIG1hY2hpbmVzIG9uIHMzOTAgaGFyZHdhcmUgdG8gYWxsb3cgbXVsdGlwbGUgbWFjaGluZXMgdG8KIHNoYXJlIHRoZSBzYW1lIGJpbmFyaWVzIGFuZCBsaWJyYXJpZXMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvZ2Ric3R1Yi50eHQgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2dkYnN0dWIudHh0CmluZGV4IDkzMDRmYjMuLmI5MmJmZDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvZ2Ric3R1Yi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9nZGJzdHViLnR4dApAQCAtMTI2LDUgKzEyNiw1IEBACiAKIEZ1cnRoZXJtb3JlLCB0aGUgR0RCIHN0dWIgd2lsbCBpbnRlcmNlcHQgYSBudW1iZXIgb2YgZXhjZXB0aW9ucyBhdXRvbWF0aWNhbGx5CiBpZiB0aGV5IGFyZSBjYXVzZWQgYnkga2VybmVsIGV4ZWN1dGlvbi4gSXQgd2lsbCBhbHNvIGludGVyY2VwdCBCVUcoKSBtYWNybwotaW52b2thdGlvbi4KK2ludm9jYXRpb24uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CmluZGV4IGY4NTI4ZGIuLjM2YWY1OGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dApAQCAtNjYsNyArNjYsOSBAQAogdXNlZCBmb3Igc2V2ZXJhbCB2ZXJ5IGRpZmZlcmVudCBraW5kcyBvZiBHUElPIGNvbnRyb2xsZXIuCiAKIFRoYXQgc2FpZCwgaWYgdGhlIGNvbnZlbnRpb24gaXMgc3VwcG9ydGVkIG9uIHRoZWlyIHBsYXRmb3JtLCBkcml2ZXJzIHNob3VsZAotdXNlIGl0IHdoZW4gcG9zc2libGU6Cit1c2UgaXQgd2hlbiBwb3NzaWJsZS4gIFBsYXRmb3JtcyBzaG91bGQgZGVjbGFyZSBHRU5FUklDX0dQSU8gc3VwcG9ydCBpbgorS2NvbmZpZyAoYm9vbGVhbiB0cnVlKSwgd2hpY2ggbXVsdGktcGxhdGZvcm0gZHJpdmVycyBjYW4gZGVwZW5kIG9uIHdoZW4KK3VzaW5nIHRoZSBpbmNsdWRlIGZpbGU6CiAKIAkjaW5jbHVkZSA8YXNtL2dwaW8uaD4KIApAQCAtMTA5LDcgKzExMSw5IEBACiAKIFRoZSByZXR1cm4gdmFsdWUgaXMgemVybyBmb3Igc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIGVycm5vLiAgSXQgc2hvdWxkCiBiZSBjaGVja2VkLCBzaW5jZSB0aGUgZ2V0L3NldCBjYWxscyBkb24ndCBoYXZlIGVycm9yIHJldHVybnMgYW5kIHNpbmNlCi1taXNjb25maWd1cmF0aW9uIGlzIHBvc3NpYmxlLiAgKFRoZXNlIGNhbGxzIGNvdWxkIHNsZWVwLikKK21pc2NvbmZpZ3VyYXRpb24gaXMgcG9zc2libGUuICBZb3Ugc2hvdWxkIG5vcm1hbGx5IGlzc3VlIHRoZXNlIGNhbGxzIGZyb20KK2EgdGFzayBjb250ZXh0LiAgSG93ZXZlciwgZm9yIHNwaW5sb2NrLXNhZmUgR1BJT3MgaXQncyBPSyB0byB1c2UgdGhlbQorYmVmb3JlIHRhc2tpbmcgaXMgZW5hYmxlZCwgYXMgcGFydCBvZiBlYXJseSBib2FyZCBzZXR1cC4KIAogRm9yIG91dHB1dCBHUElPcywgdGhlIHZhbHVlIHByb3ZpZGVkIGJlY29tZXMgdGhlIGluaXRpYWwgb3V0cHV0IHZhbHVlLgogVGhpcyBoZWxwcyBhdm9pZCBzaWduYWwgZ2xpdGNoaW5nIGR1cmluZyBzeXN0ZW0gc3RhcnR1cC4KQEAgLTE5NSw3ICsxOTksOSBAQAogCiBQYXNzaW5nIGludmFsaWQgR1BJTyBudW1iZXJzIHRvIGdwaW9fcmVxdWVzdCgpIHdpbGwgZmFpbCwgYXMgd2lsbCByZXF1ZXN0aW5nCiBHUElPcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGNsYWltZWQgd2l0aCB0aGF0IGNhbGwuICBUaGUgcmV0dXJuIHZhbHVlIG9mCi1ncGlvX3JlcXVlc3QoKSBtdXN0IGJlIGNoZWNrZWQuICAoVGhlc2UgY2FsbHMgY291bGQgc2xlZXAuKQorZ3Bpb19yZXF1ZXN0KCkgbXVzdCBiZSBjaGVja2VkLiAgWW91IHNob3VsZCBub3JtYWxseSBpc3N1ZSB0aGVzZSBjYWxscyBmcm9tCithIHRhc2sgY29udGV4dC4gIEhvd2V2ZXIsIGZvciBzcGlubG9jay1zYWZlIEdQSU9zIGl0J3MgT0sgdG8gcmVxdWVzdCBHUElPcworYmVmb3JlIHRhc2tpbmcgaXMgZW5hYmxlZCwgYXMgcGFydCBvZiBlYXJseSBib2FyZCBzZXR1cC4KIAogVGhlc2UgY2FsbHMgc2VydmUgdHdvIGJhc2ljIHB1cnBvc2VzLiAgT25lIGlzIG1hcmtpbmcgdGhlIHNpZ25hbHMgd2hpY2gKIGFyZSBhY3R1YWxseSBpbiB1c2UgYXMgR1BJT3MsIGZvciBiZXR0ZXIgZGlhZ25vc3RpY3M7IHN5c3RlbXMgbWF5IGhhdmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHJ0aW1lci90aW1lcl9zdGF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2hydGltZXIvdGltZXJfc3RhdHMudHh0CmluZGV4IDI3Zjc4MmUuLjIyYjA4MTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHJ0aW1lci90aW1lcl9zdGF0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ocnRpbWVyL3RpbWVyX3N0YXRzLnR4dApAQCAtMiw5ICsyLDEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdGltZXJfc3RhdHMgaXMgYSBkZWJ1Z2dpbmcgZmFjaWxpdHkgdG8gbWFrZSB0aGUgdGltZXIgKGFiKXVzYWdlIGluIGEgTGludXgKLXN5c3RlbSB2aXNpYmxlIHRvIGtlcm5lbCBhbmQgdXNlcnNwYWNlIGRldmVsb3BlcnMuIEl0IGlzIG5vdCBpbnRlbmRlZCBmb3IKLXByb2R1Y3Rpb24gdXNhZ2UgYXMgaXQgYWRkcyBzaWduaWZpY2FudCBvdmVyaGVhZCB0byB0aGUgKGhyKXRpbWVyIGNvZGUgYW5kIHRoZQotKGhyKXRpbWVyIGRhdGEgc3RydWN0dXJlcy4KK3N5c3RlbSB2aXNpYmxlIHRvIGtlcm5lbCBhbmQgdXNlcnNwYWNlIGRldmVsb3BlcnMuIElmIGVuYWJsZWQgaW4gdGhlIGNvbmZpZworYnV0IG5vdCB1c2VkIGl0IGhhcyBhbG1vc3QgemVybyBydW50aW1lIG92ZXJoZWFkLCBhbmQgYSByZWxhdGl2ZWx5IHNtYWxsCitkYXRhIHN0cnVjdHVyZSBvdmVyaGVhZC4gRXZlbiBpZiBjb2xsZWN0aW9uIGlzIGVuYWJsZWQgcnVudGltZSBhbGwgdGhlCitsb2NraW5nIGlzIHBlci1DUFUgYW5kIGxvb2t1cCBpcyBoYXNoZWQuCiAKIHRpbWVyX3N0YXRzIHNob3VsZCBiZSB1c2VkIGJ5IGtlcm5lbCBhbmQgdXNlcnNwYWNlIGRldmVsb3BlcnMgdG8gdmVyaWZ5IHRoYXQKIHRoZWlyIGNvZGUgZG9lcyBub3QgbWFrZSB1bmR1bHkgdXNlIG9mIHRpbWVycy4gVGhpcyBoZWxwcyB0byBhdm9pZCB1bm5lY2Vzc2FyeQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9hZG0xMDI2IGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZG0xMDI2CmluZGV4IDQ3M2M2ODkuLmY0MzI3ZGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vYWRtMTAyNgorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTEwMjYKQEAgLTgwLDcgKzgwLDcgQEAKIHVzZWQgdG8gY29udHJvbCBmYW4gc3BlZWQuIFVzdWFsbHkgb25seSBvbmUgb2YgdGhlc2UgdHdvIG91dHB1dHMgd2lsbCBiZQogdXNlZC4gV3JpdGUgdGhlIG1pbmltdW0gUFdNIG9yIERBQyB2YWx1ZSB0byB0aGUgYXBwcm9wcmlhdGUgY29udHJvbAogcmVnaXN0ZXIuIFRoZW4gc2V0IHRoZSBsb3cgdGVtcGVyYXR1cmUgbGltaXQgaW4gdGhlIHRtaW4gdmFsdWVzIGZvciBlYWNoCi10ZW1wZXJhdHVyZSBzZW5zb3IuIFRoZSByYW5nZSBvZiBjb250cm9sIGlzIGZpeGVkIGF0IDIwILBDLCBhbmQgdGhlCit0ZW1wZXJhdHVyZSBzZW5zb3IuIFRoZSByYW5nZSBvZiBjb250cm9sIGlzIGZpeGVkIGF0IDIwIMKwQywgYW5kIHRoZQogbGFyZ2VzdCBkaWZmZXJlbmNlIGJldHdlZW4gY3VycmVudCBhbmQgdG1pbiBvZiB0aGUgdGVtcGVyYXR1cmUgc2Vuc29ycyBzZXRzCiB0aGUgY29udHJvbCBvdXRwdXQuIFNlZSB0aGUgZGF0YXNoZWV0IGZvciBzZXZlcmFsIGV4YW1wbGUgY2lyY3VpdHMgZm9yCiBjb250cm9sbGluZyBmYW4gc3BlZWQgd2l0aCB0aGUgUFdNIGFuZCBEQUMgb3V0cHV0cy4gVGhlIGZhbiBzcGVlZCBzZW5zb3JzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2NvcmV0ZW1wIGIvRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzBjZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcApAQCAtMCwwICsxLDM2IEBACitLZXJuZWwgZHJpdmVyIGNvcmV0ZW1wCis9PT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBBbGwgSW50ZWwgQ29yZSBmYW1pbHkKKyAgICBQcmVmaXg6ICdjb3JldGVtcCcKKyAgICBDUFVJRDogZmFtaWx5IDB4NiwgbW9kZWxzIDB4ZSwgMHhmCisgICAgRGF0YXNoZWV0OiBJbnRlbCA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwKKyAgICAgICAgICAgICAgIFZvbHVtZSAzQTogU3lzdGVtIFByb2dyYW1taW5nIEd1aWRlCisKK0F1dGhvcjogUnVkb2xmIE1hcmVrCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBwZXJtaXRzIHJlYWRpbmcgdGVtcGVyYXR1cmUgc2Vuc29yIGVtYmVkZGVkIGluc2lkZSBJbnRlbCBDb3JlIENQVS4KK1RlbXBlcmF0dXJlIGlzIG1lYXN1cmVkIGluIGRlZ3JlZXMgQ2Vsc2l1cyBhbmQgbWVhc3VyZW1lbnQgcmVzb2x1dGlvbiBpcworMSBkZWdyZWUgQy4gVmFsaWQgdGVtcGVyYXR1cmVzIGFyZSBmcm9tIDAgdG8gVGpNYXggZGVncmVlcyBDLCBiZWNhdXNlCit0aGUgYWN0dWFsIHZhbHVlIG9mIHRlbXBlcmF0dXJlIHJlZ2lzdGVyIGlzIGluIGZhY3QgYSBkZWx0YSBmcm9tIFRqTWF4LgorCitUZW1wZXJhdHVyZSBrbm93biBhcyBUak1heCBpcyB0aGUgbWF4aW11bSBqdW5jdGlvbiB0ZW1wZXJhdHVyZSBvZiBwcm9jZXNzb3IuCitJbnRlbCBkZWZpbmVzIHRoaXMgdGVtcGVyYXR1cmUgYXMgODVDIG9yIDEwMEMuIEF0IHRoaXMgdGVtcGVyYXR1cmUsIHByb3RlY3Rpb24KK21lY2hhbmlzbSB3aWxsIHBlcmZvcm0gYWN0aW9ucyB0byBmb3JjaWJseSBjb29sIGRvd24gdGhlIHByb2Nlc3Nvci4gQWxhcm0KK21heSBiZSByYWlzZWQsIGlmIHRoZSB0ZW1wZXJhdHVyZSBncm93cyBlbm91Z2ggKG1vcmUgdGhhbiBUak1heCkgdG8gdHJpZ2dlcgordGhlIE91dC1PZi1TcGVjIGJpdC4gRm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIGV4cG9ydGVkIHN5c2ZzIGZpbGVzOgorCit0ZW1wMV9pbnB1dAkgLSBDb3JlIHRlbXBlcmF0dXJlIChpbiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cykuCit0ZW1wMV9jcml0CSAtIE1heGltdW0ganVuY3Rpb24gdGVtcGVyYXR1cmUgIChpbiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cykuCit0ZW1wMV9jcml0X2FsYXJtIC0gU2V0IHdoZW4gT3V0LW9mLXNwZWMgYml0IGlzIHNldCwgbmV2ZXIgY2xlYXJzLgorCQkgICBDb3JyZWN0IENQVSBvcGVyYXRpb24gaXMgbm8gbG9uZ2VyIGd1YXJhbnRlZWQuCit0ZW1wMV9sYWJlbAkgLSBDb250YWlucyBzdHJpbmcgIkNvcmUgWCIsIHdoZXJlIFggaXMgcHJvY2Vzc29yCisJCSAgIG51bWJlci4KKworVGhlIFRqTWF4IHRlbXBlcmF0dXJlIGlzIHNldCB0byA4NSBkZWdyZWVzIEMgaWYgdW5kb2N1bWVudGVkIG1vZGVsIHNwZWNpZmljCityZWdpc3RlciAoVU1TUikgMHhlZSBoYXMgYml0IDMwIHNldC4gSWYgbm90IHRoZSBUak1heCBpcyAxMDAgZGVncmVlcyBDIGFzCisoc29tZXRpbWVzKSBkb2N1bWVudGVkIGluIHByb2Nlc3NvciBkYXRhc2hlZXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2dsNTE4c20gYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2dsNTE4c20KaW5kZXggY2UwODgxOC4uMjI5ZjhiNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9nbDUxOHNtCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vZ2w1MThzbQpAQCAtMTMsNyArMTMsNyBAQAogCiBBdXRob3JzOgogICAgICAgICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LAotICAgICAgICBLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4KKyAgICAgICAgS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4KICAgICAgICAgSG9uZy1HdW5uIENoZXcgPGhnbGludXhAZ3VubmV0Lm9yZz4KICAgICAgICAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG04MyBiL0RvY3VtZW50YXRpb24vaHdtb24vbG04MwppbmRleCBmN2FhZDE0Li5hMDRkMWZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODMKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTgzCkBAIC00NSw3ICs0NSw3IEBACiBUaGUgTE04MiBpcyBjb25maXJtZWQgdG8gaGF2ZSBiZWVuIGZvdW5kIG9uIG1vc3QgQU1EIEdlb2RlIHJlZmVyZW5jZQogZGVzaWducyBhbmQgdGVzdCBwbGF0Zm9ybXMuCiAKLVRoZSBkcml2ZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlc3RlZCBieSBNYWdudXMgRm9yc3N0cvZtLCB3aG8gSSdkCitUaGUgZHJpdmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0ZXN0ZWQgYnkgTWFnbnVzIEZvcnNzdHLDtm0sIHdobyBJJ2QKIGxpa2UgdG8gdGhhbmsgaGVyZS4gTW9yZSB0ZXN0ZXJzIHdpbGwgYmUgb2YgY291cnNlIHdlbGNvbWUuCiAKIFRoZSBmYWN0IHRoYXQgdGhlIExNODMgaXMgb25seSBzY2FyY2VseSB1c2VkIGNhbiBiZSBlYXNpbHkgZXhwbGFpbmVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9tYXg2NjUwIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXg2NjUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTdiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDY2NTAKQEAgLTAsMCArMSw1MyBAQAorS2VybmVsIGRyaXZlciBtYXg2NjUwCis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIE1heGltIDY2NTAgLyA2NjUxCisgICAgUHJlZml4OiAnbWF4NjY1MCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MWIsIDB4MWYsIDB4NDgsIDB4NGIKKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9wZGZzZXJ2Lm1heGltLWljLmNvbS9lbi9kcy9NQVg2NjUwLU1BWDY2NTEucGRmCisKK0F1dGhvcnM6CisgICAgSGFucyBKLiBLb2NoIDxoamtAbGludXRyb25peC5kZT4KKyAgICBKb2huIE1vcnJpcyA8am9obi5tb3JyaXNAc3BpcmVudGNvbS5jb20+CisgICAgQ2xhdXMgR2luZGhhcnQgPGNsYXVzLmdpbmRoYXJ0QGtvbnRyb24uY29tPgorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciB0aGUgTWF4aW0gNjY1MC82NjUxCisKK1RoZSAyIGRldmljZXMgYXJlIHZlcnkgc2ltaWxhciwgYnV0IHRoZSBNYXhpbSA2NTUwIGhhcyBhIHJlZHVjZWQgZmVhdHVyZQorc2V0LCBlLmcuIG9ubHkgb25lIGZhbi1pbnB1dCwgaW5zdGVhZCBvZiA0IGZvciB0aGUgNjY1MS4KKworVGhlIGRyaXZlciBpcyBub3QgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSAyIGRldmljZXMuCisKK1RoZSBkcml2ZXIgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBzZW5zb3IgYWNjZXNzZXMgaW4gc3lzZnM6CisKK2ZhbjFfaW5wdXQJcm8JZmFuIHRhY2hvbWV0ZXIgc3BlZWQgaW4gUlBNCitmYW4yX2lucHV0CXJvCSIKK2ZhbjNfaW5wdXQJcm8JIgorZmFuNF9pbnB1dAlybwkiCitmYW4xX3RhcmdldAlydwlkZXNpcmVkIGZhbiBzcGVlZCBpbiBSUE0gKGNsb3NlZCBsb29wIG1vZGUgb25seSkKK3B3bTFfZW5hYmxlCXJ3CXJlZ3VsYXRvciBtb2RlLCAwPWZ1bGwgb24sIDE9b3BlbiBsb29wLCAyPWNsb3NlZCBsb29wCitwd20xCQlydwlyZWxhdGl2ZSBzcGVlZCAoMC0yNTUpLCAyNTU9bWF4LiBzcGVlZC4KKwkJCVVzZWQgaW4gb3BlbiBsb29wIG1vZGUgb25seS4KK2ZhbjFfZGl2CXJ3CXNldHMgdGhlIHNwZWVkIHJhbmdlIHRoZSBpbnB1dHMgY2FuIGhhbmRsZS4gTGVnYWwKKwkJCXZhbHVlcyBhcmUgMSwgMiwgNCwgYW5kIDguIFVzZSBsb3dlciB2YWx1ZXMgZm9yCisJCQlmYXN0ZXIgZmFucy4KKworTW9kdWxlIHBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdXIgYm9hcmQgaGFzIGEgQklPUyB0aGF0IGluaXRpYWxpemVzIHRoZSBNQVg2NjUwLzY2NTEgY29ycmVjdGx5LCB5b3UgY2FuCitzaW1wbHkgbG9hZCB5b3VyIG1vZHVsZSB3aXRob3V0IHBhcmFtZXRlcnMuIEl0IHdvbid0IHRvdWNoIHRoZSBjb25maWd1cmF0aW9uCityZWdpc3RlcnMgdGhlbi4gSWYgeW91ciBib2FyZCBCSU9TIGRvZXNuJ3QgaW5pdGlhbGl6ZSB0aGUgY2hpcCwgb3IgeW91IHdhbnQKK2RpZmZlcmVudCBzZXR0aW5ncywgeW91IGNhbiBzZXQgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCit2b2x0YWdlXzEyVjogNT01ViBmYW4sIDEyPTEyViBmYW4sIDA9ZG9uJ3QgY2hhbmdlCitwcmVzY2FsZXI6IFBvc3NpYmxlIHZhbHVlcyBhcmUgMSwyLDQsOCwxNiwgb3IgMCBmb3IgZG9uJ3QgY2hhbmdlCitjbG9jazogVGhlIGNsb2NrIGZyZXF1ZW5jeSBpbiBIeiBvZiB0aGUgY2hpcCB0aGUgZHJpdmVyIHNob3VsZCBhc3N1bWUgWzI1NDAwMF0KKworUGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSBNQVg2NjUwLzY2NTEgZGF0YSBzaGVldCBhbmQgbWFrZSBzdXJlIHRoYXQgeW91IGZ1bGx5Cit1bmRlcnN0YW5kIHRoZSBtZWFuaW5nIG9mIHRoZXNlIHBhcmFtZXRlcnMgYmVmb3JlIHlvdSBhdHRlbXB0IHRvIGNoYW5nZSB0aGVtLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3NpczU1OTUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3NpczU1OTUKaW5kZXggYjdhZTM2Yi4uNGY4ODc3YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9zaXM1NTk1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vc2lzNTU5NQpAQCAtOCw3ICs4LDcgQEAKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgQ29ycC4gc2l0ZS4KIAogQXV0aG9yczoKLSAgICAgICAgS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+LAorICAgICAgICBLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPiwKICAgICAgICAgTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPiwKICAgICAgICAgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PiAyLjYgcG9ydAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3Ntc2M0N20xIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zbXNjNDdtMQppbmRleCAwNGExMTEyLi40MmM4NDMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3Ntc2M0N20xCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vc21zYzQ3bTEKQEAgLTE0LDYgKzE0LDEwIEBACiAgICAgICAgIGh0dHA6Ly93d3cuc21zYy5jb20vbWFpbi9kYXRhc2hlZXRzLzQ3bTE0eC5wZGYKICAgICAgICAgaHR0cDovL3d3dy5zbXNjLmNvbS9tYWluL3Rvb2xzL2Rpc2NvbnRpbnVlZC80N20xNXgucGRmCiAgICAgICAgIGh0dHA6Ly93d3cuc21zYy5jb20vbWFpbi9kYXRhc2hlZXRzLzQ3bTE5Mi5wZGYKKyAgKiBTTVNDIExQQzQ3TTI5MgorICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlCisgICAgUHJlZml4OiAnc21zYzQ3bTInCisgICAgRGF0YXNoZWV0OiBOb3QgcHVibGljCiAgICogU01TQyBMUEM0N005OTcKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZSwgYWRkcmVzcyByZWFkIGZyb20gU3VwZXIgSS9PIGNvbmZpZyBzcGFjZQogICAgIFByZWZpeDogJ3Ntc2M0N20xJwpAQCAtMzIsOSArMzYsMTAgQEAKIFRoZSBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgQ29ycG9yYXRpb24gKFNNU0MpIDQ3TTF4eCBTdXBlciBJL08gY2hpcHMKIGNvbnRhaW4gbW9uaXRvcmluZyBhbmQgUFdNIGNvbnRyb2wgY2lyY3VpdHJ5IGZvciB0d28gZmFucy4KIAotVGhlIDQ3TTE1eCBhbmQgNDdNMTkyIGNoaXBzIGNvbnRhaW4gYSBmdWxsICdoYXJkd2FyZSBtb25pdG9yaW5nIGJsb2NrJwotaW4gYWRkaXRpb24gdG8gdGhlIGZhbiBtb25pdG9yaW5nIGFuZCBjb250cm9sLiBUaGUgaGFyZHdhcmUgbW9uaXRvcmluZwotYmxvY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLgorVGhlIExQQzQ3TTE1eCwgTFBDNDdNMTkyIGFuZCBMUEM0N00yOTIgY2hpcHMgY29udGFpbiBhIGZ1bGwgJ2hhcmR3YXJlCittb25pdG9yaW5nIGJsb2NrJyBpbiBhZGRpdGlvbiB0byB0aGUgZmFuIG1vbml0b3JpbmcgYW5kIGNvbnRyb2wuIFRoZQoraGFyZHdhcmUgbW9uaXRvcmluZyBibG9jayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCB1c2UgdGhlCitzbXNjNDdtMTkyIGRyaXZlciBmb3IgdGhhdC4KIAogTm8gZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSA0N005OTcsIGJ1dCBpdCBoYXMgdGhlIHNhbWUgZGV2aWNlCiBJRCBhcyB0aGUgNDdNMTV4IGFuZCA0N00xOTIgY2hpcHMgYW5kIHNlZW1zIHRvIGJlIGNvbXBhdGlibGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3Ntc2M0N20xOTIgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3Ntc2M0N20xOTIKaW5kZXggNDVkNjQ1My4uNmQ1NGVjYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9zbXNjNDdtMTkyCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vc21zYzQ3bTE5MgpAQCAtMiwxMiArMiwxMyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09CiAKIFN1cHBvcnRlZCBjaGlwczoKLSAgKiBTTVNDIExQQzQ3TTE5MiBhbmQgTFBDNDdNOTk3CisgICogU01TQyBMUEM0N00xOTIsIExQQzQ3TTE1eCwgTFBDNDdNMjkyIGFuZCBMUEM0N005OTcKICAgICBQcmVmaXg6ICdzbXNjNDdtMTkyJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyYyAtIDB4MmQKICAgICBEYXRhc2hlZXQ6IFRoZSBkYXRhc2hlZXQgZm9yIExQQzQ3TTE5MiBpcyBwdWJsaWNseSBhdmFpbGFibGUgZnJvbQogICAgICAgICAgICAgICAgaHR0cDovL3d3dy5zbXNjLmNvbS8KLSAgICAgICAgICAgICAgIFRoZSBMUEM0N005OTcgaXMgY29tcGF0aWJsZSBmb3IgaGFyZHdhcmUgbW9uaXRvcmluZy4KKyAgICAgICAgICAgICAgIFRoZSBMUEM0N00xNXgsIExQQzQ3TTI5MiBhbmQgTFBDNDdNOTk3IGFyZSBjb21wYXRpYmxlIGZvcgorICAgICAgICAgICAgICAgaGFyZHdhcmUgbW9uaXRvcmluZy4KIAogQXV0aG9yOiBIYXJ0bXV0IFJpY2sgPGxpbnV4QHJpY2suY2xhcmFuZXQuZGU+CiAgICAgICAgIFNwZWNpYWwgdGhhbmtzIHRvIEplYW4gRGVsdmFyZSBmb3IgY2FyZWZ1bCBjaGVja2luZwpAQCAtMTgsNyArMTksNyBAQAogLS0tLS0tLS0tLS0KIAogVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUgc2Vuc29yIGNhcGFiaWxpdGllcwotb2YgdGhlIFNNU0MgTFBDNDdNMTkyIGFuZCBMUEM0N005OTcgU3VwZXItSS9PIGNoaXBzLgorb2YgdGhlIFNNU0MgTFBDNDdNMTkyIGFuZCBjb21wYXRpYmxlIFN1cGVyLUkvTyBjaGlwcy4KIAogVGhlc2UgY2hpcHMgc3VwcG9ydCAzIHRlbXBlcmF0dXJlIGNoYW5uZWxzIGFuZCA4IHZvbHRhZ2UgaW5wdXRzCiBhcyB3ZWxsIGFzIENQVSB2b2x0YWdlIFZJRCBpbnB1dC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKaW5kZXggZDczZDJlOC4uYTlhMThhZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKQEAgLTE1Miw2ICsxNTIsMTMgQEAKIAkJTm90ZSB0aGF0IHRoaXMgaXMgYWN0dWFsbHkgYW4gaW50ZXJuYWwgY2xvY2sgZGl2aXNvciwgd2hpY2gKIAkJYWZmZWN0cyB0aGUgbWVhc3VyYWJsZSBzcGVlZCByYW5nZSwgbm90IHRoZSByZWFkIHZhbHVlLgogCitmYW5bMS0qXV90YXJnZXQKKwkJRGVzaXJlZCBmYW4gc3BlZWQKKwkJVW5pdDogcmV2b2x1dGlvbi9taW4gKFJQTSkKKwkJUlcKKwkJT25seSBtYWtlcyBzZW5zZSBpZiB0aGUgY2hpcCBzdXBwb3J0cyBjbG9zZWQtbG9vcCBmYW4gc3BlZWQKKwkJY29udHJvbCBiYXNlZCBvbiB0aGUgbWVhc3VyZWQgZmFuIHNwZWVkLgorCiBBbHNvIHNlZSB0aGUgQWxhcm1zIHNlY3Rpb24gZm9yIHN0YXR1cyBmbGFncyBhc3NvY2lhdGVkIHdpdGggZmFucy4KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3ZpYTY4NmEgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3ZpYTY4NmEKaW5kZXggYTkzNmZiMy4uZDY1MWIyNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi92aWE2ODZhCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdmlhNjg2YQpAQCAtOCw3ICs4LDcgQEAKICAgICBEYXRhc2hlZXQ6IE9uIHJlcXVlc3QgdGhyb3VnaCB3ZWIgZm9ybSAoaHR0cDovL3d3dy52aWEuY29tLnR3L2VuL3N1cHBvcnQvZGF0YXNoZWV0cy8pCiAKIEF1dGhvcnM6Ci0gICAgICAgIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiwKKyAgICAgICAgS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4sCiAgICAgICAgIE1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KICAgICAgICAgQm9iIERvdWdoZXJ0eSA8Ym9iZEBzdGFuZm9yZC5lZHU+CiAgICAgICAgIChTb21lIGNvbnZlcnNpb24tZmFjdG9yIGRhdGEgd2VyZSBjb250cmlidXRlZCBieQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTJkIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTJkCmluZGV4IDgxNzFjMjguLjE0YTY2OGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkyZAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MmQKQEAgLTEwNyw3ICsxMDcsNyBAQAogCSAgYnkgQ1JbMHg0OWhdLgogCS0gVGhlIGZ1bmN0aW9uIG9mIHZpZCBhbmQgdnJtIGhhcyBub3QgYmVlbiBmaW5pc2hlZCwgYmVjYXVzZSBJJ20gTk9UCiAJICB2ZXJ5IGZhbWlsaWFyIHdpdGggdGhlbS4gQWRkaW5nIHN1cHBvcnQgaXMgd2VsY29tZS4KLaAJLSBUaGUgZnVuY3Rpb24gb2YgY2hhc3NpcyBvcGVuIGRldGVjdGlvbiBuZWVkcyBtb3JlIHRlc3RzLgorwqAJLSBUaGUgZnVuY3Rpb24gb2YgY2hhc3NpcyBvcGVuIGRldGVjdGlvbiBuZWVkcyBtb3JlIHRlc3RzLgogCS0gSWYgeW91IGhhdmUgQVNVUyBzZXJ2ZXIgYm9hcmQgYW5kIGNoaXAgd2FzIG5vdCBmb3VuZDogVGhlbiB5b3Ugd2lsbAogCSAgbmVlZCB0byB1cGdyYWRlIHRvIGxhdGVzdCAob3IgYmV0YSkgQklPUy4gSWYgaXQgZG9lcyBub3QgaGVscCBwbGVhc2UKIAkgIGNvbnRhY3QgdXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MTAgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MTAKaW5kZXggODNjM2I5Ny4uNzc4MjEwZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODEwCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgxMApAQCAtNyw3ICs3LDcgQEAKIEF1dGhvcnM6IAogCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sIAogCVBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sCi0gICAgICAgIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiwKKyAgICAgICAgS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4sCiAJUmFscGggTWV0emxlciA8cmprbUB0aHAudW5pLWtvZWxuLmRlPiwKIAlNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM5NngKaW5kZXggMDhkN2IyZC4uMjY2NDgxZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM5NngKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM5NngKQEAgLTYwLDcgKzYwLDcgQEAKICAtIGRlc2lnbiBoaW50cyBhbmQgYnVnIGZpeGVzCiBBbGV4YW5kZXIgTWF5bHNoIDxhbWFseXNoQHdlYi5kZT4KICAtIGRpdHRvLCBwbHVzIGFuIGltcG9ydGFudCBkYXRhc2hlZXQuLi4gYWxtb3N0IHRoZSBvbmUgSSByZWFsbHkgd2FudGVkCi1IYW5zLUf8bnRlciBM/HRrZSBVcGh1ZXMgPGhnX2x1QHQtb25saW5lLmRlPgorSGFucy1Hw7xudGVyIEzDvHRrZSBVcGh1ZXMgPGhnX2x1QHQtb25saW5lLmRlPgogIC0gcGF0Y2ggZm9yIFNpUzczNQogUm9iZXJ0IFp3ZXJ1cyA8YXJ6aWVAZGRzLm5sPgogIC0gdGVzdGluZyBmb3IgU2lTNjQ1RFgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWEKaW5kZXggNTVlZGZlMS4uMzQzODcwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWEKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWEKQEAgLTQsNyArNCw3IEBACiAgICogVklBIFRlY2hub2xvZ2llcywgSW5DLiBWVDgyQzU4NkIKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVklBIHdlYnNpdGUKIAotQXV0aG9yOiBLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4KK0F1dGhvcjogS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4KIAogRGVzY3JpcHRpb24KIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXZpYXBybyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvCmluZGV4IDc3NWY0ODkuLjA2YjRiZTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvCkBAIC0xNyw3ICsxNyw3IEBACiAgICAgRGF0YXNoZWV0OiBhdmFpbGFibGUgb24gcmVxdWVzdCBhbmQgdW5kZXIgTkRBIGZyb20gVklBCiAKIEF1dGhvcnM6Ci0JS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+LAorCUt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+LAogCU1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4sCiAJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2kyYy1wcm90b2NvbCBiL0RvY3VtZW50YXRpb24vaTJjL2kyYy1wcm90b2NvbAppbmRleCBiNDAyMmM5Li41NzliOTJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9pMmMtcHJvdG9jb2wKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvaTJjLXByb3RvY29sCkBAIC02OCw3ICs2OCw3IEBACiAKICAgRmxhZ3MgSTJDX01fSUdOT1JFX05BSwogICAgIE5vcm1hbGx5IG1lc3NhZ2UgaXMgaW50ZXJydXB0ZWQgaW1tZWRpYXRlbHkgaWYgdGhlcmUgaXMgW05BXSBmcm9tIHRoZQotICAgIGNsaWVudC4gU2V0dGluZyB0aGlzIGZsYWcgdHJlYXRzIGFueSBbTkFdIGFzoFtBXSwgYW5kIGFsbCBvZgorICAgIGNsaWVudC4gU2V0dGluZyB0aGlzIGZsYWcgdHJlYXRzIGFueSBbTkFdIGFzwqBbQV0sIGFuZCBhbGwgb2YKICAgICBtZXNzYWdlIGlzIHNlbnQuCiAgICAgVGhlc2UgbWVzc2FnZXMgbWF5IHN0aWxsIGZhaWwgdG8gU0NMIGxvLT5oaSB0aW1lb3V0LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyby9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL2kyby9SRUFETUUKaW5kZXggOWFhNmRkYi4uMGViZjU4YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMm8vUkVBRE1FCisrKyBiL0RvY3VtZW50YXRpb24vaTJvL1JFQURNRQpAQCAtMzAsMTMgKzMwLDEzIEBACiAJQnVnIGZpeGVzCiAJQ29yZSBjb2RlIGV4dGVuc2lvbnMKIAotQXV2byBI5GtraW5lbiwgVW5pdmVyc2l0eSBvZiBIZWxzaW5raSBGaW5sYW5kCitBdXZvIEjDpGtraW5lbiwgVW5pdmVyc2l0eSBvZiBIZWxzaW5raSBGaW5sYW5kCiAJTEFOIE9TTSBjb2RlCiAJL1Byb2MgaW50ZXJmYWNlIHRvIExBTiBjbGFzcwogCUJ1ZyBmaXhlcwogCUNvcmUgY29kZSBleHRlbnNpb25zCiAKLVRhbmVsaSBW5Gjka2FuZ2FzLCBVbml2ZXJzaXR5IG9mIEhlbHNpbmtpIEZpbmxhbmQKK1RhbmVsaSBWw6Row6RrYW5nYXMsIFVuaXZlcnNpdHkgb2YgSGVsc2lua2kgRmlubGFuZAogCUZpeGVzIHRvIGkyb19jb25maWcKIAogQ1JFRElUUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMzg2L2Jvb3QudHh0IGIvRG9jdW1lbnRhdGlvbi9pMzg2L2Jvb3QudHh0CmluZGV4IDY0OTg2NjYuLjM1OTg1YjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2kzODYvYm9vdC50eHQKQEAgLTIsNyArMiw3IEBACiAJCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJCSAgICBILiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4KLQkJCUxhc3QgdXBkYXRlIDIwMDctMDMtMDYKKwkJCUxhc3QgdXBkYXRlIDIwMDctMDUtMjMKIAogT24gdGhlIGkzODYgcGxhdGZvcm0sIHRoZSBMaW51eCBrZXJuZWwgdXNlcyBhIHJhdGhlciBjb21wbGljYXRlZCBib290CiBjb252ZW50aW9uLiAgVGhpcyBoYXMgZXZvbHZlZCBwYXJ0aWFsbHkgZHVlIHRvIGhpc3RvcmljYWwgYXNwZWN0cywgYXMKQEAgLTExLDcgKzExLDcgQEAKIGV4cGVjdGF0aW9ucyBpbiB0aGUgUEMgaW5kdXN0cnkgY2F1c2VkIGJ5IHRoZSBlZmZlY3RpdmUgZGVtaXNlIG9mCiByZWFsLW1vZGUgRE9TIGFzIGEgbWFpbnN0cmVhbSBvcGVyYXRpbmcgc3lzdGVtLgogCi1DdXJyZW50bHksIGZvdXIgdmVyc2lvbnMgb2YgdGhlIExpbnV4L2kzODYgYm9vdCBwcm90b2NvbCBleGlzdC4KK0N1cnJlbnRseSwgdGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBvZiB0aGUgTGludXgvaTM4NiBib290IHByb3RvY29sIGV4aXN0LgogCiBPbGQga2VybmVsczoJekltYWdlL0ltYWdlIHN1cHBvcnQgb25seS4gIFNvbWUgdmVyeSBlYXJseSBrZXJuZWxzCiAJCW1heSBub3QgZXZlbiBzdXBwb3J0IGEgY29tbWFuZCBsaW5lLgpAQCAtNTIsNyArNTIsOCBAQAogMEEwMDAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAJfCAgUmVzZXJ2ZWQgZm9yIEJJT1MJIHwJRG8gbm90IHVzZS4gIFJlc2VydmVkIGZvciBCSU9TIEVCREEuCiAwOUEwMDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQl8ICBTdGFjay9oZWFwL2NtZGxpbmUJIHwJRm9yIHVzZSBieSB0aGUga2VybmVsIHJlYWwtbW9kZSBjb2RlLgorCXwgIENvbW1hbmQgbGluZQkJIHwKKwl8ICBTdGFjay9oZWFwCQkgfAlGb3IgdXNlIGJ5IHRoZSBrZXJuZWwgcmVhbC1tb2RlIGNvZGUuCiAwOTgwMDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsJCiAJfCAgS2VybmVsIHNldHVwCQkgfAlUaGUga2VybmVsIHJlYWwtbW9kZSBjb2RlLgogMDkwMjAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC03MywxMCArNzQsOSBAQAogV2hlbiB1c2luZyBiekltYWdlLCB0aGUgcHJvdGVjdGVkLW1vZGUga2VybmVsIHdhcyByZWxvY2F0ZWQgdG8KIDB4MTAwMDAwICgiaGlnaCBtZW1vcnkiKSwgYW5kIHRoZSBrZXJuZWwgcmVhbC1tb2RlIGJsb2NrIChib290IHNlY3RvciwKIHNldHVwLCBhbmQgc3RhY2svaGVhcCkgd2FzIG1hZGUgcmVsb2NhdGFibGUgdG8gYW55IGFkZHJlc3MgYmV0d2VlbgotMHgxMDAwMCBhbmQgZW5kIG9mIGxvdyBtZW1vcnkuCVVuZm9ydHVuYXRlbHksIGluIHByb3RvY29scyAyLjAwIGFuZAotMi4wMSB0aGUgY29tbWFuZCBsaW5lIGlzIHN0aWxsIHJlcXVpcmVkIHRvIGxpdmUgaW4gdGhlIDB4OVhYWFggbWVtb3J5Ci1yYW5nZSwgYW5kIHRoYXQgbWVtb3J5IHJhbmdlIGlzIHN0aWxsIG92ZXJ3cml0dGVuIGJ5IHRoZSBlYXJseSBrZXJuZWwuCi1UaGUgMi4wMiBwcm90b2NvbCByZXNvbHZlcyB0aGF0IHByb2JsZW0uCisweDEwMDAwIGFuZCBlbmQgb2YgbG93IG1lbW9yeS4gVW5mb3J0dW5hdGVseSwgaW4gcHJvdG9jb2xzIDIuMDAgYW5kCisyLjAxIHRoZSAweDkwMDAwKyBtZW1vcnkgcmFuZ2UgaXMgc3RpbGwgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWw7Cit0aGUgMi4wMiBwcm90b2NvbCByZXNvbHZlcyB0aGF0IHByb2JsZW0uCiAKIEl0IGlzIGRlc2lyYWJsZSB0byBrZWVwIHRoZSAibWVtb3J5IGNlaWxpbmciIC0tIHRoZSBoaWdoZXN0IHBvaW50IGluCiBsb3cgbWVtb3J5IHRvdWNoZWQgYnkgdGhlIGJvb3QgbG9hZGVyIC0tIGFzIGxvdyBhcyBwb3NzaWJsZSwgc2luY2UKQEAgLTkzLDYgKzkzLDM1IEBACiAweDkwMDAwIHNlZ21lbnQsIHRoZSBib290IGxvYWRlciBzaG91bGQgbWFrZSBzdXJlIG5vdCB0byB1c2UgbWVtb3J5CiBhYm92ZSB0aGUgMHg5QTAwMCBwb2ludDsgdG9vIG1hbnkgQklPU2VzIHdpbGwgYnJlYWsgYWJvdmUgdGhhdCBwb2ludC4KIAorRm9yIGEgbW9kZXJuIGJ6SW1hZ2Uga2VybmVsIHdpdGggYm9vdCBwcm90b2NvbCB2ZXJzaW9uID49IDIuMDIsIGEKK21lbW9yeSBsYXlvdXQgbGlrZSB0aGUgZm9sbG93aW5nIGlzIHN1Z2dlc3RlZDoKKworCX4gICAgICAgICAgICAgICAgICAgICAgICB+CisgICAgICAgIHwgIFByb3RlY3RlZC1tb2RlIGtlcm5lbCB8CisxMDAwMDAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCAgSS9PIG1lbW9yeSBob2xlCSB8CiswQTAwMDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8ICBSZXNlcnZlZCBmb3IgQklPUwkgfAlMZWF2ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIHVudXNlZAorCX4gICAgICAgICAgICAgICAgICAgICAgICB+CisJfCAgQ29tbWFuZCBsaW5lCQkgfAkoQ2FuIGFsc28gYmUgYmVsb3cgdGhlIFgrMTAwMDAgbWFyaykKK1grMTAwMDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8ICBTdGFjay9oZWFwCQkgfAlGb3IgdXNlIGJ5IHRoZSBrZXJuZWwgcmVhbC1tb2RlIGNvZGUuCitYKzA4MDAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCQorCXwgIEtlcm5lbCBzZXR1cAkJIHwJVGhlIGtlcm5lbCByZWFsLW1vZGUgY29kZS4KKwl8ICBLZXJuZWwgYm9vdCBzZWN0b3IJIHwJVGhlIGtlcm5lbCBsZWdhY3kgYm9vdCBzZWN0b3IuCitYICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCAgQm9vdCBsb2FkZXIJCSB8CTwtIEJvb3Qgc2VjdG9yIGVudHJ5IHBvaW50IDAwMDA6N0MwMAorMDAxMDAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCAgUmVzZXJ2ZWQgZm9yIE1CUi9CSU9TIHwKKzAwMDgwMAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgIFR5cGljYWxseSB1c2VkIGJ5IE1CUiB8CiswMDA2MDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgCisJfCAgQklPUyB1c2Ugb25seQkgfAorMDAwMDAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKy4uLiB3aGVyZSB0aGUgYWRkcmVzcyBYIGlzIGFzIGxvdyBhcyB0aGUgZGVzaWduIG9mIHRoZSBib290IGxvYWRlcgorcGVybWl0cy4KKwogCiAqKioqIFRIRSBSRUFMLU1PREUgS0VSTkVMIEhFQURFUgogCkBAIC0xNjAsMzIgKzE4OSwxNTAgQEAKIHNldHRpbmcgZmllbGRzIGluIHRoZSBoZWFkZXIsIHlvdSBtdXN0IG1ha2Ugc3VyZSBvbmx5IHRvIHNldCBmaWVsZHMKIHN1cHBvcnRlZCBieSB0aGUgcHJvdG9jb2wgdmVyc2lvbiBpbiB1c2UuCiAKLVRoZSAia2VybmVsX3ZlcnNpb24iIGZpZWxkLCBpZiBzZXQgdG8gYSBub256ZXJvIHZhbHVlLCBjb250YWlucyBhCi1wb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkIGh1bWFuLXJlYWRhYmxlIGtlcm5lbCB2ZXJzaW9uIG51bWJlcgotc3RyaW5nLCBsZXNzIDB4MjAwLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBrZXJuZWwgdmVyc2lvbiB0bwotdGhlIHVzZXIuICBUaGlzIHZhbHVlIHNob3VsZCBiZSBsZXNzIHRoYW4gKDB4MjAwKnNldHVwX3NlY3RzKS4gIEZvcgotZXhhbXBsZSwgaWYgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gMHgxYzAwLCB0aGUga2VybmVsIHZlcnNpb24gbnVtYmVyCi1zdHJpbmcgY2FuIGJlIGZvdW5kIGF0IG9mZnNldCAweDFlMDAgaW4gdGhlIGtlcm5lbCBmaWxlLiAgVGhpcyBpcyBhCi12YWxpZCB2YWx1ZSBpZiBhbmQgb25seSBpZiB0aGUgInNldHVwX3NlY3RzIiBmaWVsZCBjb250YWlucyB0aGUgdmFsdWUKLTE0IG9yIGhpZ2hlci4KIAotTW9zdCBib290IGxvYWRlcnMgd2lsbCBzaW1wbHkgbG9hZCB0aGUga2VybmVsIGF0IGl0cyB0YXJnZXQgYWRkcmVzcwotZGlyZWN0bHkuICBTdWNoIGJvb3QgbG9hZGVycyBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBmaWxsaW5nIGluCi1tb3N0IG9mIHRoZSBmaWVsZHMgaW4gdGhlIGhlYWRlci4gIFRoZSBmb2xsb3dpbmcgZmllbGRzIHNob3VsZCBiZQotZmlsbGVkIG91dCwgaG93ZXZlcjoKKyoqKiogREVUQUlMUyBPRiBIRUFERVIgRklFTERTCiAKLSAgdmlkX21vZGU6Ci0JUGxlYXNlIHNlZSB0aGUgc2VjdGlvbiBvbiBTUEVDSUFMIENPTU1BTkQgTElORSBPUFRJT05TLgorRm9yIGVhY2ggZmllbGQsIHNvbWUgYXJlIGluZm9ybWF0aW9uIGZyb20gdGhlIGtlcm5lbCB0byB0aGUgYm9vdGxvYWRlcgorKCJyZWFkIiksIHNvbWUgYXJlIGV4cGVjdGVkIHRvIGJlIGZpbGxlZCBvdXQgYnkgdGhlIGJvb3Rsb2FkZXIKKygid3JpdGUiKSwgYW5kIHNvbWUgYXJlIGV4cGVjdGVkIHRvIGJlIHJlYWQgYW5kIG1vZGlmaWVkIGJ5IHRoZQorYm9vdGxvYWRlciAoIm1vZGlmeSIpLgogCi0gIHR5cGVfb2ZfbG9hZGVyOgotCUlmIHlvdXIgYm9vdCBsb2FkZXIgaGFzIGFuIGFzc2lnbmVkIGlkIChzZWUgdGFibGUgYmVsb3cpLCBlbnRlcgotCTB4VFYgaGVyZSwgd2hlcmUgVCBpcyBhbiBpZGVudGlmaWVyIGZvciB0aGUgYm9vdCBsb2FkZXIgYW5kIFYgaXMKLQlhIHZlcnNpb24gbnVtYmVyLiAgT3RoZXJ3aXNlLCBlbnRlciAweEZGIGhlcmUuCitBbGwgZ2VuZXJhbCBwdXJwb3NlIGJvb3QgbG9hZGVycyBzaG91bGQgd3JpdGUgdGhlIGZpZWxkcyBtYXJrZWQKKyhvYmxpZ2F0b3J5KS4gIEJvb3QgbG9hZGVycyB3aG8gd2FudCB0byBsb2FkIHRoZSBrZXJuZWwgYXQgYQorbm9uc3RhbmRhcmQgYWRkcmVzcyBzaG91bGQgZmlsbCBpbiB0aGUgZmllbGRzIG1hcmtlZCAocmVsb2MpOyBvdGhlcgorYm9vdCBsb2FkZXJzIGNhbiBpZ25vcmUgdGhvc2UgZmllbGRzLgogCi0JQXNzaWduZWQgYm9vdCBsb2FkZXIgaWRzOgotCTAgIExJTE8KK1RoZSBieXRlIG9yZGVyIG9mIGFsbCBmaWVsZHMgaXMgbGl0dGxlZW5kaWFuICh0aGlzIGlzIHg4NiwgYWZ0ZXIgYWxsLikKKworRmllbGQgbmFtZToJc2V0dXBfc2VjcworVHlwZToJCXJlYWQKK09mZnNldC9zaXplOgkweDFmMS8xCitQcm90b2NvbDoJQUxMCisKKyAgVGhlIHNpemUgb2YgdGhlIHNldHVwIGNvZGUgaW4gNTEyLWJ5dGUgc2VjdG9ycy4gIElmIHRoaXMgZmllbGQgaXMKKyAgMCwgdGhlIHJlYWwgdmFsdWUgaXMgNC4gIFRoZSByZWFsLW1vZGUgY29kZSBjb25zaXN0cyBvZiB0aGUgYm9vdAorICBzZWN0b3IgKGFsd2F5cyBvbmUgNTEyLWJ5dGUgc2VjdG9yKSBwbHVzIHRoZSBzZXR1cCBjb2RlLgorCitGaWVsZCBuYW1lOgkgcm9vdF9mbGFncworVHlwZToJCSBtb2RpZnkgKG9wdGlvbmFsKQorT2Zmc2V0L3NpemU6CSAweDFmMi8yCitQcm90b2NvbDoJIEFMTAorCisgIElmIHRoaXMgZmllbGQgaXMgbm9uemVybywgdGhlIHJvb3QgZGVmYXVsdHMgdG8gcmVhZG9ubHkuICBUaGUgdXNlIG9mCisgIHRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZDsgdXNlIHRoZSAicm8iIG9yICJydyIgb3B0aW9ucyBvbiB0aGUKKyAgY29tbWFuZCBsaW5lIGluc3RlYWQuCisKK0ZpZWxkIG5hbWU6CXN5c3NpemUKK1R5cGU6CQlyZWFkCitPZmZzZXQvc2l6ZToJMHgxZjQvNCAocHJvdG9jb2wgMi4wNCspIDB4MWY0LzIgKHByb3RvY29sIEFMTCkKK1Byb3RvY29sOgkyLjA0KworCisgIFRoZSBzaXplIG9mIHRoZSBwcm90ZWN0ZWQtbW9kZSBjb2RlIGluIHVuaXRzIG9mIDE2LWJ5dGUgcGFyYWdyYXBocy4KKyAgRm9yIHByb3RvY29sIHZlcnNpb25zIG9sZGVyIHRoYW4gMi4wNCB0aGlzIGZpZWxkIGlzIG9ubHkgdHdvIGJ5dGVzCisgIHdpZGUsIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIHRydXN0ZWQgZm9yIHRoZSBzaXplIG9mIGEga2VybmVsIGlmCisgIHRoZSBMT0FEX0hJR0ggZmxhZyBpcyBzZXQuCisKK0ZpZWxkIG5hbWU6CXJhbV9zaXplCitUeXBlOgkJa2VybmVsIGludGVybmFsCitPZmZzZXQvc2l6ZToJMHgxZjgvMgorUHJvdG9jb2w6CUFMTAorCisgIFRoaXMgZmllbGQgaXMgb2Jzb2xldGUuCisKK0ZpZWxkIG5hbWU6CXZpZF9tb2RlCitUeXBlOgkJbW9kaWZ5IChvYmxpZ2F0b3J5KQorT2Zmc2V0L3NpemU6CTB4MWZhLzIKKworICBQbGVhc2Ugc2VlIHRoZSBzZWN0aW9uIG9uIFNQRUNJQUwgQ09NTUFORCBMSU5FIE9QVElPTlMuCisKK0ZpZWxkIG5hbWU6CXJvb3RfZGV2CitUeXBlOgkJbW9kaWZ5IChvcHRpb25hbCkKK09mZnNldC9zaXplOgkweDFmYy8yCitQcm90b2NvbDoJQUxMCisKKyAgVGhlIGRlZmF1bHQgcm9vdCBkZXZpY2UgZGV2aWNlIG51bWJlci4gIFRoZSB1c2Ugb2YgdGhpcyBmaWVsZCBpcworICBkZXByZWNhdGVkLCB1c2UgdGhlICJyb290PSIgb3B0aW9uIG9uIHRoZSBjb21tYW5kIGxpbmUgaW5zdGVhZC4KKworRmllbGQgbmFtZToJYm9vdF9mbGFnCitUeXBlOgkJcmVhZAorT2Zmc2V0L3NpemU6CTB4MWZlLzIKK1Byb3RvY29sOglBTEwKKworICBDb250YWlucyAweEFBNTUuICBUaGlzIGlzIHRoZSBjbG9zZXN0IHRoaW5nIG9sZCBMaW51eCBrZXJuZWxzIGhhdmUKKyAgdG8gYSBtYWdpYyBudW1iZXIuCisKK0ZpZWxkIG5hbWU6CWp1bXAKK1R5cGU6CQlyZWFkCitPZmZzZXQvc2l6ZToJMHgyMDAvMgorUHJvdG9jb2w6CTIuMDArCisKKyAgQ29udGFpbnMgYW4geDg2IGp1bXAgaW5zdHJ1Y3Rpb24sIDB4RUIgZm9sbG93ZWQgYnkgYSBzaWduZWQgb2Zmc2V0CisgIHJlbGF0aXZlIHRvIGJ5dGUgMHgyMDIuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZgorICB0aGUgaGVhZGVyLgorCitGaWVsZCBuYW1lOgloZWFkZXIKK1R5cGU6CQlyZWFkCitPZmZzZXQvc2l6ZToJMHgyMDIvNAorUHJvdG9jb2w6CTIuMDArCisKKyAgQ29udGFpbnMgdGhlIG1hZ2ljIG51bWJlciAiSGRyUyIgKDB4NTM3MjY0NDgpLgorCitGaWVsZCBuYW1lOgl2ZXJzaW9uCitUeXBlOgkJcmVhZAorT2Zmc2V0L3NpemU6CTB4MjA2LzIKK1Byb3RvY29sOgkyLjAwKworCisgIENvbnRhaW5zIHRoZSBib290IHByb3RvY29sIHZlcnNpb24sIGluIChtYWpvciA8PCA4KSttaW5vciBmb3JtYXQsCisgIGUuZy4gMHgwMjA0IGZvciB2ZXJzaW9uIDIuMDQsIGFuZCAweDBhMTEgZm9yIGEgaHlwb3RoZXRpY2FsIHZlcnNpb24KKyAgMTAuMTcuCisKK0ZpZWxkIG5hbWU6CXJlYWRtb2RlX3N3dGNoCitUeXBlOgkJbW9kaWZ5IChvcHRpb25hbCkKK09mZnNldC9zaXplOgkweDIwOC80CitQcm90b2NvbDoJMi4wMCsKKworICBCb290IGxvYWRlciBob29rIChzZWUgQURWQU5DRUQgQk9PVCBMT0FERVIgSE9PS1MgYmVsb3cuKQorCitGaWVsZCBuYW1lOglzdGFydF9zeXMKK1R5cGU6CQlyZWFkCitPZmZzZXQvc2l6ZToJMHgyMGMvNAorUHJvdG9jb2w6CTIuMDArCisKKyAgVGhlIGxvYWQgbG93IHNlZ21lbnQgKDB4MTAwMCkuICBPYnNvbGV0ZS4KKworRmllbGQgbmFtZToJa2VybmVsX3ZlcnNpb24KK1R5cGU6CQlyZWFkCitPZmZzZXQvc2l6ZToJMHgyMGUvMgorUHJvdG9jb2w6CTIuMDArCisKKyAgSWYgc2V0IHRvIGEgbm9uemVybyB2YWx1ZSwgY29udGFpbnMgYSBwb2ludGVyIHRvIGEgTlVMLXRlcm1pbmF0ZWQKKyAgaHVtYW4tcmVhZGFibGUga2VybmVsIHZlcnNpb24gbnVtYmVyIHN0cmluZywgbGVzcyAweDIwMC4gIFRoaXMgY2FuCisgIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUga2VybmVsIHZlcnNpb24gdG8gdGhlIHVzZXIuICBUaGlzIHZhbHVlCisgIHNob3VsZCBiZSBsZXNzIHRoYW4gKDB4MjAwKnNldHVwX3NlY3RzKS4KKworICBGb3IgZXhhbXBsZSwgaWYgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gMHgxYzAwLCB0aGUga2VybmVsIHZlcnNpb24KKyAgbnVtYmVyIHN0cmluZyBjYW4gYmUgZm91bmQgYXQgb2Zmc2V0IDB4MWUwMCBpbiB0aGUga2VybmVsIGZpbGUuCisgIFRoaXMgaXMgYSB2YWxpZCB2YWx1ZSBpZiBhbmQgb25seSBpZiB0aGUgInNldHVwX3NlY3RzIiBmaWVsZAorICBjb250YWlucyB0aGUgdmFsdWUgMTUgb3IgaGlnaGVyLCBhczoKKworCTB4MWMwMCAgPCAxNSoweDIwMCAoPSAweDFlMDApIGJ1dAorCTB4MWMwMCA+PSAxNCoweDIwMCAoPSAweDFjMDApCisKKwkweDFjMDAgPj4gOSA9IDE0LCBzbyB0aGUgbWluaW11bSB2YWx1ZSBmb3Igc2V0dXBfc2VjcyBpcyAxNS4KKworRmllbGQgbmFtZToJdHlwZV9vZl9sb2FkZXIKK1R5cGU6CQl3cml0ZSAob2JsaWdhdG9yeSkKK09mZnNldC9zaXplOgkweDIxMC8xCitQcm90b2NvbDoJMi4wMCsKKworICBJZiB5b3VyIGJvb3QgbG9hZGVyIGhhcyBhbiBhc3NpZ25lZCBpZCAoc2VlIHRhYmxlIGJlbG93KSwgZW50ZXIKKyAgMHhUViBoZXJlLCB3aGVyZSBUIGlzIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBib290IGxvYWRlciBhbmQgViBpcworICBhIHZlcnNpb24gbnVtYmVyLiAgT3RoZXJ3aXNlLCBlbnRlciAweEZGIGhlcmUuCisKKyAgQXNzaWduZWQgYm9vdCBsb2FkZXIgaWRzOgorCTAgIExJTE8JCQkoMHgwMCByZXNlcnZlZCBmb3IgcHJlLTIuMDAgYm9vdGxvYWRlcikKIAkxICBMb2FkbGluCi0JMiAgYm9vdHNlY3QtbG9hZGVyCisJMiAgYm9vdHNlY3QtbG9hZGVyCSgweDIwLCBhbGwgb3RoZXIgdmFsdWVzIHJlc2VydmVkKQogCTMgIFNZU0xJTlVYCiAJNCAgRXRoZXJCb290CiAJNSAgRUxJTE8KQEAgLTE5Myw1NyArMzQwLDE0NSBAQAogCTggIFUtQk9PVAogCTkgIFhlbgogCUEgIEd1amluCisJQiAgUWVtdQogCi0JUGxlYXNlIGNvbnRhY3QgPGhwYUB6eXRvci5jb20+IGlmIHlvdSBuZWVkIGEgYm9vdGxvYWRlciBJRAotCXZhbHVlIGFzc2lnbmVkLgorICBQbGVhc2UgY29udGFjdCA8aHBhQHp5dG9yLmNvbT4gaWYgeW91IG5lZWQgYSBib290bG9hZGVyIElECisgIHZhbHVlIGFzc2lnbmVkLgogCi0gIGxvYWRmbGFncywgaGVhcF9lbmRfcHRyOgotCUlmIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGlzIDIuMDEgb3IgaGlnaGVyLCBlbnRlciB0aGUKLQlvZmZzZXQgbGltaXQgb2YgdGhlIHNldHVwIGhlYXAgaW50byBoZWFwX2VuZF9wdHIgYW5kIHNldCB0aGUKLQkweDgwIGJpdCAoQ0FOX1VTRV9IRUFQKSBvZiBsb2FkZmxhZ3MuICBoZWFwX2VuZF9wdHIgYXBwZWFycyB0bwotCWJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiBzZXR1cCAob2Zmc2V0IDB4MDIwMCkuCitGaWVsZCBuYW1lOglsb2FkZmxhZ3MKK1R5cGU6CQltb2RpZnkgKG9ibGlnYXRvcnkpCitPZmZzZXQvc2l6ZToJMHgyMTEvMQorUHJvdG9jb2w6CTIuMDArCiAKLSAgc2V0dXBfbW92ZV9zaXplOiAKLQlXaGVuIHVzaW5nIHByb3RvY29sIDIuMDAgb3IgMi4wMSwgaWYgdGhlIHJlYWwgbW9kZQotCWtlcm5lbCBpcyBub3QgbG9hZGVkIGF0IDB4OTAwMDAsIGl0IGdldHMgbW92ZWQgdGhlcmUgbGF0ZXIgaW4KLQl0aGUgbG9hZGluZyBzZXF1ZW5jZS4gIEZpbGwgaW4gdGhpcyBmaWVsZCBpZiB5b3Ugd2FudAotCWFkZGl0aW9uYWwgZGF0YSAoc3VjaCBhcyB0aGUga2VybmVsIGNvbW1hbmQgbGluZSkgbW92ZWQgaW4KLQlhZGRpdGlvbiB0byB0aGUgcmVhbC1tb2RlIGtlcm5lbCBpdHNlbGYuCisgIFRoaXMgZmllbGQgaXMgYSBiaXRtYXNrLgogCi0gIHJhbWRpc2tfaW1hZ2UsIHJhbWRpc2tfc2l6ZToKLQlJZiB5b3VyIGJvb3QgbG9hZGVyIGhhcyBsb2FkZWQgYW4gaW5pdGlhbCByYW1kaXNrIChpbml0cmQpLAotCXNldCByYW1kaXNrX2ltYWdlIHRvIHRoZSAzMi1iaXQgcG9pbnRlciB0byB0aGUgcmFtZGlzayBkYXRhCi0JYW5kIHRoZSByYW1kaXNrX3NpemUgdG8gdGhlIHNpemUgb2YgdGhlIHJhbWRpc2sgZGF0YS4KKyAgQml0IDAgKHJlYWQpOglMT0FERURfSElHSAorCS0gSWYgMCwgdGhlIHByb3RlY3RlZC1tb2RlIGNvZGUgaXMgbG9hZGVkIGF0IDB4MTAwMDAuCisJLSBJZiAxLCB0aGUgcHJvdGVjdGVkLW1vZGUgY29kZSBpcyBsb2FkZWQgYXQgMHgxMDAwMDAuCiAKLQlUaGUgaW5pdHJkIHNob3VsZCB0eXBpY2FsbHkgYmUgbG9jYXRlZCBhcyBoaWdoIGluIG1lbW9yeSBhcwotCXBvc3NpYmxlLCBhcyBpdCBtYXkgb3RoZXJ3aXNlIGdldCBvdmVyd3JpdHRlbiBieSB0aGUgZWFybHkKLQlrZXJuZWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuCSBIb3dldmVyLCBpdCBtdXN0IG5ldmVyIGJlCi0JbG9jYXRlZCBhYm92ZSB0aGUgYWRkcmVzcyBzcGVjaWZpZWQgaW4gdGhlIGluaXRyZF9hZGRyX21heAotCWZpZWxkLglUaGUgaW5pdHJkIHNob3VsZCBiZSBhdCBsZWFzdCA0SyBwYWdlIGFsaWduZWQuCisgIEJpdCA3ICh3cml0ZSk6IENBTl9VU0VfSEVBUAorCVNldCB0aGlzIGJpdCB0byAxIHRvIGluZGljYXRlIHRoYXQgdGhlIHZhbHVlIGVudGVyZWQgaW4gdGhlCisJaGVhcF9lbmRfcHRyIGlzIHZhbGlkLiAgSWYgdGhpcyBmaWVsZCBpcyBjbGVhciwgc29tZSBzZXR1cCBjb2RlCisJZnVuY3Rpb25hbGl0eSB3aWxsIGJlIGRpc2FibGVkLgogCi0gIGNtZF9saW5lX3B0cjoKLQlJZiB0aGUgcHJvdG9jb2wgdmVyc2lvbiBpcyAyLjAyIG9yIGhpZ2hlciwgdGhpcyBpcyBhIDMyLWJpdAotCXBvaW50ZXIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuICBUaGUga2VybmVsIGNvbW1hbmQgbGluZQotCWNhbiBiZSBsb2NhdGVkIGFueXdoZXJlIGJldHdlZW4gdGhlIGVuZCBvZiBzZXR1cCBhbmQgMHhBMDAwMC4KLQlGaWxsIGluIHRoaXMgZmllbGQgZXZlbiBpZiB5b3VyIGJvb3QgbG9hZGVyIGRvZXMgbm90IHN1cHBvcnQgYQotCWNvbW1hbmQgbGluZSwgaW4gd2hpY2ggY2FzZSB5b3UgY2FuIHBvaW50IHRoaXMgdG8gYW4gZW1wdHkKLQlzdHJpbmcgKG9yIGJldHRlciB5ZXQsIHRvIHRoZSBzdHJpbmcgImF1dG8iLikgIElmIHRoaXMgZmllbGQKLQlpcyBsZWZ0IGF0IHplcm8sIHRoZSBrZXJuZWwgd2lsbCBhc3N1bWUgdGhhdCB5b3VyIGJvb3QgbG9hZGVyCi0JZG9lcyBub3Qgc3VwcG9ydCB0aGUgMi4wMisgcHJvdG9jb2wuCitGaWVsZCBuYW1lOglzZXR1cF9tb3ZlX3NpemUKK1R5cGU6CQltb2RpZnkgKG9ibGlnYXRvcnkpCitPZmZzZXQvc2l6ZToJMHgyMTIvMgorUHJvdG9jb2w6CTIuMDAtMi4wMQogCi0gIHJhbWRpc2tfbWF4OgotCVRoZSBtYXhpbXVtIGFkZHJlc3MgdGhhdCBtYXkgYmUgb2NjdXBpZWQgYnkgdGhlIGluaXRyZAotCWNvbnRlbnRzLiAgRm9yIGJvb3QgcHJvdG9jb2xzIDIuMDIgb3IgZWFybGllciwgdGhpcyBmaWVsZCBpcwotCW5vdCBwcmVzZW50LCBhbmQgdGhlIG1heGltdW0gYWRkcmVzcyBpcyAweDM3RkZGRkZGLiAgKFRoaXMKLQlhZGRyZXNzIGlzIGRlZmluZWQgYXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGhpZ2hlc3Qgc2FmZSBieXRlLCBzbwotCWlmIHlvdXIgcmFtZGlzayBpcyBleGFjdGx5IDEzMTA3MiBieXRlcyBsb25nIGFuZCB0aGlzIGZpZWxkIGlzCi0JMHgzN0ZGRkZGRiwgeW91IGNhbiBzdGFydCB5b3VyIHJhbWRpc2sgYXQgMHgzN0ZFMDAwMC4pCisgIFdoZW4gdXNpbmcgcHJvdG9jb2wgMi4wMCBvciAyLjAxLCBpZiB0aGUgcmVhbCBtb2RlIGtlcm5lbCBpcyBub3QKKyAgbG9hZGVkIGF0IDB4OTAwMDAsIGl0IGdldHMgbW92ZWQgdGhlcmUgbGF0ZXIgaW4gdGhlIGxvYWRpbmcKKyAgc2VxdWVuY2UuICBGaWxsIGluIHRoaXMgZmllbGQgaWYgeW91IHdhbnQgYWRkaXRpb25hbCBkYXRhIChzdWNoIGFzCisgIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lKSBtb3ZlZCBpbiBhZGRpdGlvbiB0byB0aGUgcmVhbC1tb2RlIGtlcm5lbAorICBpdHNlbGYuCiAKLSAgY21kbGluZV9zaXplOgotCVRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGNvbW1hbmQgbGluZSB3aXRob3V0IHRoZSB0ZXJtaW5hdGluZwotCXplcm8uIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29tbWFuZCBsaW5lIGNhbiBjb250YWluIGF0IG1vc3QKLQljbWRsaW5lX3NpemUgY2hhcmFjdGVycy4gV2l0aCBwcm90b2NvbCB2ZXJzaW9uIDIuMDUgYW5kCi0JZWFybGllciwgdGhlIG1heGltdW0gc2l6ZSB3YXMgMjU1LgorICBUaGUgdW5pdCBpcyBieXRlcyBzdGFydGluZyB3aXRoIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvb3Qgc2VjdG9yLgorICAKKyAgVGhpcyBmaWVsZCBpcyBjYW4gYmUgaWdub3JlZCB3aGVuIHRoZSBwcm90b2NvbCBpcyAyLjAyIG9yIGhpZ2hlciwgb3IKKyAgaWYgdGhlIHJlYWwtbW9kZSBjb2RlIGlzIGxvYWRlZCBhdCAweDkwMDAwLgorCitGaWVsZCBuYW1lOgljb2RlMzJfc3RhcnQKK1R5cGU6CQltb2RpZnkgKG9wdGlvbmFsLCByZWxvYykKK09mZnNldC9zaXplOgkweDIxNC80CitQcm90b2NvbDoJMi4wMCsKKworICBUaGUgYWRkcmVzcyB0byBqdW1wIHRvIGluIHByb3RlY3RlZCBtb2RlLiAgVGhpcyBkZWZhdWx0cyB0byB0aGUgbG9hZAorICBhZGRyZXNzIG9mIHRoZSBrZXJuZWwsIGFuZCBjYW4gYmUgdXNlZCBieSB0aGUgYm9vdCBsb2FkZXIgdG8KKyAgZGV0ZXJtaW5lIHRoZSBwcm9wZXIgbG9hZCBhZGRyZXNzLgorCisgIFRoaXMgZmllbGQgY2FuIGJlIG1vZGlmaWVkIGZvciB0d28gcHVycG9zZXM6CisKKyAgMS4gYXMgYSBib290IGxvYWRlciBob29rIChzZWUgQURWQU5DRUQgQk9PVCBMT0FERVIgSE9PS1MgYmVsb3cuKQorCisgIDIuIGlmIGEgYm9vdGxvYWRlciB3aGljaCBkb2VzIG5vdCBpbnN0YWxsIGEgaG9vayBsb2FkcyBhCisgICAgIHJlbG9jYXRhYmxlIGtlcm5lbCBhdCBhIG5vbnN0YW5kYXJkIGFkZHJlc3MgaXQgd2lsbCBoYXZlIHRvIG1vZGlmeQorICAgICB0aGlzIGZpZWxkIHRvIHBvaW50IHRvIHRoZSBsb2FkIGFkZHJlc3MuCisKK0ZpZWxkIG5hbWU6CXJhbWRpc2tfaW1hZ2UKK1R5cGU6CQl3cml0ZSAob2JsaWdhdG9yeSkKK09mZnNldC9zaXplOgkweDIxOC80CitQcm90b2NvbDoJMi4wMCsKKworICBUaGUgMzItYml0IGxpbmVhciBhZGRyZXNzIG9mIHRoZSBpbml0aWFsIHJhbWRpc2sgb3IgcmFtZnMuICBMZWF2ZSBhdAorICB6ZXJvIGlmIHRoZXJlIGlzIG5vIGluaXRpYWwgcmFtZGlzay9yYW1mcy4KKworRmllbGQgbmFtZToJcmFtZGlza19zaXplCitUeXBlOgkJd3JpdGUgKG9ibGlnYXRvcnkpCitPZmZzZXQvc2l6ZToJMHgyMWMvNAorUHJvdG9jb2w6CTIuMDArCisKKyAgU2l6ZSBvZiB0aGUgaW5pdGlhbCByYW1kaXNrIG9yIHJhbWZzLiAgTGVhdmUgYXQgemVybyBpZiB0aGVyZSBpcyBubworICBpbml0aWFsIHJhbWRpc2svcmFtZnMuCisKK0ZpZWxkIG5hbWU6CWJvb3RzZWN0X2tsdWRnZQorVHlwZToJCWtlcm5lbCBpbnRlcm5hbAorT2Zmc2V0L3NpemU6CTB4MjIwLzQKK1Byb3RvY29sOgkyLjAwKworCisgIFRoaXMgZmllbGQgaXMgb2Jzb2xldGUuCisKK0ZpZWxkIG5hbWU6CWhlYXBfZW5kX3B0cgorVHlwZToJCXdyaXRlIChvYmxpZ2F0b3J5KQorT2Zmc2V0L3NpemU6CTB4MjI0LzIKK1Byb3RvY29sOgkyLjAxKworCisgIFNldCB0aGlzIGZpZWxkIHRvIHRoZSBvZmZzZXQgKGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVhbC1tb2RlCisgIGNvZGUpIG9mIHRoZSBlbmQgb2YgdGhlIHNldHVwIHN0YWNrL2hlYXAsIG1pbnVzIDB4MDIwMC4KKworRmllbGQgbmFtZToJY21kX2xpbmVfcHRyCitUeXBlOgkJd3JpdGUgKG9ibGlnYXRvcnkpCitPZmZzZXQvc2l6ZToJMHgyMjgvNAorUHJvdG9jb2w6CTIuMDIrCisKKyAgU2V0IHRoaXMgZmllbGQgdG8gdGhlIGxpbmVhciBhZGRyZXNzIG9mIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorICBUaGUga2VybmVsIGNvbW1hbmQgbGluZSBjYW4gYmUgbG9jYXRlZCBhbnl3aGVyZSBiZXR3ZWVuIHRoZSBlbmQgb2YKKyAgdGhlIHNldHVwIGhlYXAgYW5kIDB4QTAwMDA7IGl0IGRvZXMgbm90IGhhdmUgdG8gYmUgbG9jYXRlZCBpbiB0aGUKKyAgc2FtZSA2NEsgc2VnbWVudCBhcyB0aGUgcmVhbC1tb2RlIGNvZGUgaXRzZWxmLgorCisgIEZpbGwgaW4gdGhpcyBmaWVsZCBldmVuIGlmIHlvdXIgYm9vdCBsb2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBhCisgIGNvbW1hbmQgbGluZSwgaW4gd2hpY2ggY2FzZSB5b3UgY2FuIHBvaW50IHRoaXMgdG8gYW4gZW1wdHkgc3RyaW5nCisgIChvciBiZXR0ZXIgeWV0LCB0byB0aGUgc3RyaW5nICJhdXRvIi4pICBJZiB0aGlzIGZpZWxkIGlzIGxlZnQgYXQKKyAgemVybywgdGhlIGtlcm5lbCB3aWxsIGFzc3VtZSB0aGF0IHlvdXIgYm9vdCBsb2FkZXIgZG9lcyBub3Qgc3VwcG9ydAorICB0aGUgMi4wMisgcHJvdG9jb2wuCisKK0ZpZWxkIG5hbWU6CWluaXRyZF9hZGRyX21heAorVHlwZToJCXJlYWQKK09mZnNldC9zaXplOgkweDIyYy80CitQcm90b2NvbDoJMi4wMysKKworICBUaGUgbWF4aW11bSBhZGRyZXNzIHRoYXQgbWF5IGJlIG9jY3VwaWVkIGJ5IHRoZSBpbml0aWFsCisgIHJhbWRpc2svcmFtZnMgY29udGVudHMuICBGb3IgYm9vdCBwcm90b2NvbHMgMi4wMiBvciBlYXJsaWVyLCB0aGlzCisgIGZpZWxkIGlzIG5vdCBwcmVzZW50LCBhbmQgdGhlIG1heGltdW0gYWRkcmVzcyBpcyAweDM3RkZGRkZGLiAgKFRoaXMKKyAgYWRkcmVzcyBpcyBkZWZpbmVkIGFzIHRoZSBhZGRyZXNzIG9mIHRoZSBoaWdoZXN0IHNhZmUgYnl0ZSwgc28gaWYKKyAgeW91ciByYW1kaXNrIGlzIGV4YWN0bHkgMTMxMDcyIGJ5dGVzIGxvbmcgYW5kIHRoaXMgZmllbGQgaXMKKyAgMHgzN0ZGRkZGRiwgeW91IGNhbiBzdGFydCB5b3VyIHJhbWRpc2sgYXQgMHgzN0ZFMDAwMC4pCisKK0ZpZWxkIG5hbWU6CWtlcm5lbF9hbGlnbm1lbnQKK1R5cGU6CQlyZWFkIChyZWxvYykKK09mZnNldC9zaXplOgkweDIzMC80CitQcm90b2NvbDoJMi4wNSsKKworICBBbGlnbm1lbnQgdW5pdCByZXF1aXJlZCBieSB0aGUga2VybmVsIChpZiByZWxvY2F0YWJsZV9rZXJuZWwgaXMgdHJ1ZS4pCisKK0ZpZWxkIG5hbWU6CXJlbG9jYXRhYmxlX2tlcm5lbAorVHlwZToJCXJlYWQgKHJlbG9jKQorT2Zmc2V0L3NpemU6CTB4MjM0LzEKK1Byb3RvY29sOgkyLjA1KworCisgIElmIHRoaXMgZmllbGQgaXMgbm9uemVybywgdGhlIHByb3RlY3RlZC1tb2RlIHBhcnQgb2YgdGhlIGtlcm5lbCBjYW4KKyAgYmUgbG9hZGVkIGF0IGFueSBhZGRyZXNzIHRoYXQgc2F0aXNmaWVzIHRoZSBrZXJuZWxfYWxpZ25tZW50IGZpZWxkLgorICBBZnRlciBsb2FkaW5nLCB0aGUgYm9vdCBsb2FkZXIgbXVzdCBzZXQgdGhlIGNvZGUzMl9zdGFydCBmaWVsZCB0bworICBwb2ludCB0byB0aGUgbG9hZGVkIGNvZGUsIG9yIHRvIGEgYm9vdCBsb2FkZXIgaG9vay4KKworRmllbGQgbmFtZToJY21kbGluZV9zaXplCitUeXBlOgkJcmVhZAorT2Zmc2V0L3NpemU6CTB4MjM4LzQKK1Byb3RvY29sOgkyLjA2KworCisgIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGNvbW1hbmQgbGluZSB3aXRob3V0IHRoZSB0ZXJtaW5hdGluZworICB6ZXJvLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbW1hbmQgbGluZSBjYW4gY29udGFpbiBhdCBtb3N0CisgIGNtZGxpbmVfc2l6ZSBjaGFyYWN0ZXJzLiBXaXRoIHByb3RvY29sIHZlcnNpb24gMi4wNSBhbmQgZWFybGllciwgdGhlCisgIG1heGltdW0gc2l6ZSB3YXMgMjU1LgogCiAKICoqKiogVEhFIEtFUk5FTCBDT01NQU5EIExJTkUKQEAgLTI3OCwxNCArNTEzLDU0IEBACiAJZmllbGQuCiAKIAorKioqKiBNRU1PUlkgTEFZT1VUIE9GIFRIRSBSRUFMLU1PREUgQ09ERQorCitUaGUgcmVhbC1tb2RlIGNvZGUgcmVxdWlyZXMgYSBzdGFjay9oZWFwIHRvIGJlIHNldCB1cCwgYXMgd2VsbCBhcworbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuICBUaGlzIG5lZWRzIHRvIGJlIGRvbmUKK2luIHRoZSByZWFsLW1vZGUgYWNjZXNzaWJsZSBtZW1vcnkgaW4gYm90dG9tIG1lZ2FieXRlLgorCitJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBtb2Rlcm4gbWFjaGluZXMgb2Z0ZW4gaGF2ZSBhIHNpemFibGUgRXh0ZW5kZWQKK0JJT1MgRGF0YSBBcmVhIChFQkRBKS4gIEFzIGEgcmVzdWx0LCBpdCBpcyBhZHZpc2FibGUgdG8gdXNlIGFzIGxpdHRsZQorb2YgdGhlIGxvdyBtZWdhYnl0ZSBhcyBwb3NzaWJsZS4KKworVW5mb3J0dW5hdGVseSwgdW5kZXIgdGhlIGZvbGxvd2luZyBjaXJjdW1zdGFuY2VzIHRoZSAweDkwMDAwIG1lbW9yeQorc2VnbWVudCBoYXMgdG8gYmUgdXNlZDoKKworCS0gV2hlbiBsb2FkaW5nIGEgekltYWdlIGtlcm5lbCAoKGxvYWRmbGFncyAmIDB4MDEpID09IDApLgorCS0gV2hlbiBsb2FkaW5nIGEgMi4wMSBvciBlYXJsaWVyIGJvb3QgcHJvdG9jb2wga2VybmVsLgorCisJICAtPiBGb3IgdGhlIDIuMDAgYW5kIDIuMDEgYm9vdCBwcm90b2NvbHMsIHRoZSByZWFsLW1vZGUgY29kZQorCSAgICAgY2FuIGJlIGxvYWRlZCBhdCBhbm90aGVyIGFkZHJlc3MsIGJ1dCBpdCBpcyBpbnRlcm5hbGx5CisJICAgICByZWxvY2F0ZWQgdG8gMHg5MDAwMC4gIEZvciB0aGUgIm9sZCIgcHJvdG9jb2wsIHRoZQorCSAgICAgcmVhbC1tb2RlIGNvZGUgbXVzdCBiZSBsb2FkZWQgYXQgMHg5MDAwMC4KKworV2hlbiBsb2FkaW5nIGF0IDB4OTAwMDAsIGF2b2lkIHVzaW5nIG1lbW9yeSBhYm92ZSAweDlhMDAwLgorCitGb3IgYm9vdCBwcm90b2NvbCAyLjAyIG9yIGhpZ2hlciwgdGhlIGNvbW1hbmQgbGluZSBkb2VzIG5vdCBoYXZlIHRvIGJlCitsb2NhdGVkIGluIHRoZSBzYW1lIDY0SyBzZWdtZW50IGFzIHRoZSByZWFsLW1vZGUgc2V0dXAgY29kZTsgaXQgaXMKK3RodXMgcGVybWl0dGVkIHRvIGdpdmUgdGhlIHN0YWNrL2hlYXAgdGhlIGZ1bGwgNjRLIHNlZ21lbnQgYW5kIGxvY2F0ZQordGhlIGNvbW1hbmQgbGluZSBhYm92ZSBpdC4KKworVGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgc2hvdWxkIG5vdCBiZSBsb2NhdGVkIGJlbG93IHRoZSByZWFsLW1vZGUKK2NvZGUsIG5vciBzaG91bGQgaXQgYmUgbG9jYXRlZCBpbiBoaWdoIG1lbW9yeS4KKworCiAqKioqIFNBTVBMRSBCT09UIENPTkZJR1VSQVRJT04KIAogQXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbiwgYXNzdW1lIHRoZSBmb2xsb3dpbmcgbGF5b3V0IG9mIHRoZSByZWFsCi1tb2RlIHNlZ21lbnQgKHRoaXMgaXMgYSB0eXBpY2FsLCBhbmQgcmVjb21tZW5kZWQgbGF5b3V0KToKK21vZGUgc2VnbWVudDoKIAotCTB4MDAwMC0weDdGRkYJUmVhbCBtb2RlIGtlcm5lbAotCTB4ODAwMC0weDhGRkYJU3RhY2sgYW5kIGhlYXAKLQkweDkwMDAtMHg5MEZGCUtlcm5lbCBjb21tYW5kIGxpbmUKKyAgICBXaGVuIGxvYWRpbmcgYmVsb3cgMHg5MDAwMCwgdXNlIHRoZSBlbnRpcmUgc2VnbWVudDoKKworCTB4MDAwMC0weDdmZmYJUmVhbCBtb2RlIGtlcm5lbAorCTB4ODAwMC0weGRmZmYJU3RhY2sgYW5kIGhlYXAKKwkweGUwMDAtMHhmZmZmCUtlcm5lbCBjb21tYW5kIGxpbmUKKworICAgIFdoZW4gbG9hZGluZyBhdCAweDkwMDAwIE9SIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGlzIDIuMDEgb3IgZWFybGllcjoKKworCTB4MDAwMC0weDdmZmYJUmVhbCBtb2RlIGtlcm5lbAorCTB4ODAwMC0weDk3ZmYJU3RhY2sgYW5kIGhlYXAKKwkweDk4MDAtMHg5ZmZmCUtlcm5lbCBjb21tYW5kIGxpbmUKIAogU3VjaCBhIGJvb3QgbG9hZGVyIHNob3VsZCBlbnRlciB0aGUgZm9sbG93aW5nIGZpZWxkcyBpbiB0aGUgaGVhZGVyOgogCkBAIC0zMDEsMjIgKzU3NiwzMyBAQAogCQkJcmFtZGlza19pbWFnZSA9IDxpbml0cmRfYWRkcmVzcz47CiAJCQlyYW1kaXNrX3NpemUgPSA8aW5pdHJkX3NpemU+OwogCQl9CisKKwkJaWYgKCBwcm90b2NvbCA+PSAweDAyMDIgJiYgbG9hZGZsYWdzICYgMHgwMSApCisJCQloZWFwX2VuZCA9IDB4ZTAwMDsKKwkJZWxzZQorCQkJaGVhcF9lbmQgPSAweDk4MDA7CisKIAkJaWYgKCBwcm90b2NvbCA+PSAweDAyMDEgKSB7Ci0JCQloZWFwX2VuZF9wdHIgPSAweDkwMDAgLSAweDIwMDsKKwkJCWhlYXBfZW5kX3B0ciA9IGhlYXBfZW5kIC0gMHgyMDA7CiAJCQlsb2FkZmxhZ3MgfD0gMHg4MDsgLyogQ0FOX1VTRV9IRUFQICovCiAJCX0KKwogCQlpZiAoIHByb3RvY29sID49IDB4MDIwMiApIHsKLQkJCWNtZF9saW5lX3B0ciA9IGJhc2VfcHRyICsgMHg5MDAwOworCQkJY21kX2xpbmVfcHRyID0gYmFzZV9wdHIgKyBoZWFwX2VuZDsKKwkJCXN0cmNweShjbWRfbGluZV9wdHIsIGNtZGxpbmUpOwogCQl9IGVsc2UgewogCQkJY21kX2xpbmVfbWFnaWMJPSAweEEzM0Y7Ci0JCQljbWRfbGluZV9vZmZzZXQgPSAweDkwMDA7Ci0JCQlzZXR1cF9tb3ZlX3NpemUgPSAweDkxMDA7CisJCQljbWRfbGluZV9vZmZzZXQgPSBoZWFwX2VuZDsKKwkJCXNldHVwX21vdmVfc2l6ZSA9IGhlYXBfZW5kICsgc3RybGVuKGNtZGxpbmUpKzE7CisJCQlzdHJjcHkoYmFzZV9wdHIrY21kX2xpbmVfb2Zmc2V0LCBjbWRsaW5lKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIFZlcnkgb2xkIGtlcm5lbCAqLwogCisJCWhlYXBfZW5kID0gMHg5ODAwOworCiAJCWNtZF9saW5lX21hZ2ljCT0gMHhBMzNGOwotCQljbWRfbGluZV9vZmZzZXQgPSAweDkwMDA7CisJCWNtZF9saW5lX29mZnNldCA9IGhlYXBfZW5kOwogCiAJCS8qIEEgdmVyeSBvbGQga2VybmVsIE1VU1QgaGF2ZSBpdHMgcmVhbC1tb2RlIGNvZGUKIAkJICAgbG9hZGVkIGF0IDB4OTAwMDAgKi8KQEAgLTMyNCwxMiArNjEwLDExIEBACiAJCWlmICggYmFzZV9wdHIgIT0gMHg5MDAwMCApIHsKIAkJCS8qIENvcHkgdGhlIHJlYWwtbW9kZSBrZXJuZWwgKi8KIAkJCW1lbWNweSgweDkwMDAwLCBiYXNlX3B0ciwgKHNldHVwX3NlY3RzKzEpKjUxMik7Ci0JCQkvKiBDb3B5IHRoZSBjb21tYW5kIGxpbmUgKi8KLQkJCW1lbWNweSgweDk5MDAwLCBiYXNlX3B0cisweDkwMDAsIDI1Nik7Ci0KIAkJCWJhc2VfcHRyID0gMHg5MDAwMDsJCSAvKiBSZWxvY2F0ZWQgKi8KIAkJfQogCisJCXN0cmNweSgweDkwMDAwK2NtZF9saW5lX29mZnNldCwgY21kbGluZSk7CisKIAkJLyogSXQgaXMgcmVjb21tZW5kZWQgdG8gY2xlYXIgbWVtb3J5IHVwIHRvIHRoZSAzMksgbWFyayAqLwogCQltZW1zZXQoMHg5MDAwMCArIChzZXR1cF9zZWN0cysxKSo1MTIsIDAsCiAJCSAgICAgICAoNjQtKHNldHVwX3NlY3RzKzEpKSo1MTIpOwpAQCAtMzc1LDEwICs2NjAsMTEgQEAKIAlsaW5lIGlzIHBhcnNlZC4KIAogICBtZW09PHNpemU+Ci0JPHNpemU+IGlzIGFuIGludGVnZXIgaW4gQyBub3RhdGlvbiBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IEssIE0KLQlvciBHIChtZWFuaW5nIDw8IDEwLCA8PCAyMCBvciA8PCAzMCkuICBUaGlzIHNwZWNpZmllcyB0aGUgZW5kCi0Jb2YgbWVtb3J5IHRvIHRoZSBrZXJuZWwuIFRoaXMgYWZmZWN0cyB0aGUgcG9zc2libGUgcGxhY2VtZW50Ci0Jb2YgYW4gaW5pdHJkLCBzaW5jZSBhbiBpbml0cmQgc2hvdWxkIGJlIHBsYWNlZCBuZWFyIGVuZCBvZgorCTxzaXplPiBpcyBhbiBpbnRlZ2VyIGluIEMgbm90YXRpb24gb3B0aW9uYWxseSBmb2xsb3dlZCBieQorCShjYXNlIGluc2Vuc2l0aXZlKSBLLCBNLCBHLCBULCBQIG9yIEUgKG1lYW5pbmcgPDwgMTAsIDw8IDIwLAorCTw8IDMwLCA8PCA0MCwgPDwgNTAgb3IgPDwgNjApLiAgVGhpcyBzcGVjaWZpZXMgdGhlIGVuZCBvZgorCW1lbW9yeSB0byB0aGUga2VybmVsLiBUaGlzIGFmZmVjdHMgdGhlIHBvc3NpYmxlIHBsYWNlbWVudCBvZgorCWFuIGluaXRyZCwgc2luY2UgYW4gaW5pdHJkIHNob3VsZCBiZSBwbGFjZWQgbmVhciBlbmQgb2YKIAltZW1vcnkuICBOb3RlIHRoYXQgdGhpcyBpcyBhbiBvcHRpb24gdG8gKmJvdGgqIHRoZSBrZXJuZWwgYW5kCiAJdGhlIGJvb3Rsb2FkZXIhCiAKQEAgLTQyOCw3ICs3MTQsNyBAQAogCiAJLyogU2V0IHVwIHRoZSByZWFsLW1vZGUga2VybmVsIHN0YWNrICovCiAJX1NTID0gc2VnOwotCV9TUCA9IDB4OTAwMDsJLyogTG9hZCBTUCBpbW1lZGlhdGVseSBhZnRlciBsb2FkaW5nIFNTISAqLworCV9TUCA9IGhlYXBfZW5kOwogCiAJX0RTID0gX0VTID0gX0ZTID0gX0dTID0gc2VnOwogCWptcF9mYXIoc2VnKzB4MjAsIDApOwkvKiBSdW4gdGhlIGtlcm5lbCAqLwpAQCAtNDQwLDcgKzcyNiw3IEBACiBhIGRlbWFuZC1sb2FkZWQgbW9kdWxlIQogCiAKLSoqKiogQURWQU5DRUQgQk9PVCBUSU1FIEhPT0tTCisqKioqIEFEVkFOQ0VEIEJPT1QgTE9BREVSIEhPT0tTCiAKIElmIHRoZSBib290IGxvYWRlciBydW5zIGluIGEgcGFydGljdWxhcmx5IGhvc3RpbGUgZW52aXJvbm1lbnQgKHN1Y2ggYXMKIExPQURMSU4sIHdoaWNoIHJ1bnMgdW5kZXIgRE9TKSBpdCBtYXkgYmUgaW1wb3NzaWJsZSB0byBmb2xsb3cgdGhlCkBAIC00NjAsOCArNzQ2LDEwIEBACiAgIGNvZGUzMl9zdGFydDoKIAlBIDMyLWJpdCBmbGF0LW1vZGUgcm91dGluZSAqanVtcGVkKiB0byBpbW1lZGlhdGVseSBhZnRlciB0aGUKIAl0cmFuc2l0aW9uIHRvIHByb3RlY3RlZCBtb2RlLCBidXQgYmVmb3JlIHRoZSBrZXJuZWwgaXMKLQl1bmNvbXByZXNzZWQuICBObyBzZWdtZW50cywgZXhjZXB0IENTLCBhcmUgc2V0IHVwOyB5b3Ugc2hvdWxkCi0Jc2V0IHRoZW0gdXAgdG8gS0VSTkVMX0RTICgweDE4KSB5b3Vyc2VsZi4KKwl1bmNvbXByZXNzZWQuICBObyBzZWdtZW50cywgZXhjZXB0IENTLCBhcmUgZ3VhcmFudGVlZCB0byBiZQorCXNldCB1cCAoY3VycmVudCBrZXJuZWxzIGRvLCBidXQgb2xkZXIgb25lcyBkbyBub3QpOyB5b3Ugc2hvdWxkCisJc2V0IHRoZW0gdXAgdG8gQk9PVF9EUyAoMHgxOCkgeW91cnNlbGYuCiAKIAlBZnRlciBjb21wbGV0aW5nIHlvdXIgaG9vaywgeW91IHNob3VsZCBqdW1wIHRvIHRoZSBhZGRyZXNzCi0JdGhhdCB3YXMgaW4gdGhpcyBmaWVsZCBiZWZvcmUgeW91ciBib290IGxvYWRlciBvdmVyd3JvdGUgaXQuCisJdGhhdCB3YXMgaW4gdGhpcyBmaWVsZCBiZWZvcmUgeW91ciBib290IGxvYWRlciBvdmVyd3JvdGUgaXQKKwkocmVsb2NhdGVkLCBpZiBhcHByb3ByaWF0ZS4pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmctdGVzdC5jIGIvRG9jdW1lbnRhdGlvbi9pYTY0L2FsaWFzaW5nLXRlc3QuYwppbmRleCAzMTUzMTY3Li5kNDg1MjU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmctdGVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9hbGlhc2luZy10ZXN0LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXJldHVybiByYzsKIH0KIAotbWFpbigpCitpbnQgbWFpbigpCiB7CiAJaW50IHJjOwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luaXRyZC50eHQgYi9Eb2N1bWVudGF0aW9uL2luaXRyZC50eHQKaW5kZXggMTVmMWIzNS4uZDNkYzUwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbml0cmQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5pdHJkLnR4dApAQCAtMjcsMTYgKzI3LDIwIEBACiAgIDEpIHRoZSBib290IGxvYWRlciBsb2FkcyB0aGUga2VybmVsIGFuZCB0aGUgaW5pdGlhbCBSQU0gZGlzawogICAyKSB0aGUga2VybmVsIGNvbnZlcnRzIGluaXRyZCBpbnRvIGEgIm5vcm1hbCIgUkFNIGRpc2sgYW5kCiAgICAgIGZyZWVzIHRoZSBtZW1vcnkgdXNlZCBieSBpbml0cmQKLSAgMykgaW5pdHJkIGlzIG1vdW50ZWQgcmVhZC13cml0ZSBhcyByb290Ci0gIDQpIC9saW51eHJjIGlzIGV4ZWN1dGVkICh0aGlzIGNhbiBiZSBhbnkgdmFsaWQgZXhlY3V0YWJsZSwgaW5jbHVkaW5nCisgIDMpIGlmIHRoZSByb290IGRldmljZSBpcyBub3QgL2Rldi9yYW0wLCB0aGUgb2xkIChkZXByZWNhdGVkKQorICAgICBjaGFuZ2Vfcm9vdCBwcm9jZWR1cmUgaXMgZm9sbG93ZWQuIHNlZSB0aGUgIk9ic29sZXRlIHJvb3QgY2hhbmdlCisgICAgIG1lY2hhbmlzbSIgc2VjdGlvbiBiZWxvdy4KKyAgNCkgcm9vdCBkZXZpY2UgaXMgbW91bnRlZC4gaWYgaXQgaXMgL2Rldi9yYW0wLCB0aGUgaW5pdHJkIGltYWdlIGlzCisgICAgIHRoZW4gbW91bnRlZCBhcyByb290CisgIDUpIC9zYmluL2luaXQgaXMgZXhlY3V0ZWQgKHRoaXMgY2FuIGJlIGFueSB2YWxpZCBleGVjdXRhYmxlLCBpbmNsdWRpbmcKICAgICAgc2hlbGwgc2NyaXB0czsgaXQgaXMgcnVuIHdpdGggdWlkIDAgYW5kIGNhbiBkbyBiYXNpY2FsbHkgZXZlcnl0aGluZwotICAgICBpbml0IGNhbiBkbykKLSAgNSkgbGludXhyYyBtb3VudHMgdGhlICJyZWFsIiByb290IGZpbGUgc3lzdGVtCi0gIDYpIGxpbnV4cmMgcGxhY2VzIHRoZSByb290IGZpbGUgc3lzdGVtIGF0IHRoZSByb290IGRpcmVjdG9yeSB1c2luZyB0aGUKKyAgICAgaW5pdCBjYW4gZG8pLgorICA2KSBpbml0IG1vdW50cyB0aGUgInJlYWwiIHJvb3QgZmlsZSBzeXN0ZW0KKyAgNykgaW5pdCBwbGFjZXMgdGhlIHJvb3QgZmlsZSBzeXN0ZW0gYXQgdGhlIHJvb3QgZGlyZWN0b3J5IHVzaW5nIHRoZQogICAgICBwaXZvdF9yb290IHN5c3RlbSBjYWxsCi0gIDcpIHRoZSB1c3VhbCBib290IHNlcXVlbmNlIChlLmcuIGludm9jYXRpb24gb2YgL3NiaW4vaW5pdCkgaXMgcGVyZm9ybWVkCi0gICAgIG9uIHRoZSByb290IGZpbGUgc3lzdGVtCi0gIDgpIHRoZSBpbml0cmQgZmlsZSBzeXN0ZW0gaXMgcmVtb3ZlZAorICA4KSBpbml0IGV4ZWNzIHRoZSAvc2Jpbi9pbml0IG9uIHRoZSBuZXcgcm9vdCBmaWxlc3lzdGVtLCBwZXJmb3JtaW5nCisgICAgIHRoZSB1c3VhbCBib290IHNlcXVlbmNlCisgIDkpIHRoZSBpbml0cmQgZmlsZSBzeXN0ZW0gaXMgcmVtb3ZlZAogCiBOb3RlIHRoYXQgY2hhbmdpbmcgdGhlIHJvb3QgZGlyZWN0b3J5IGRvZXMgbm90IGludm9sdmUgdW5tb3VudGluZyBpdC4KIEl0IGlzIHRoZXJlZm9yZSBwb3NzaWJsZSB0byBsZWF2ZSBwcm9jZXNzZXMgcnVubmluZyBvbiBpbml0cmQgZHVyaW5nIHRoYXQKQEAgLTcwLDcgKzc0LDcgQEAKICAgcm9vdD0vZGV2L3JhbTAKIAogICAgIGluaXRyZCBpcyBtb3VudGVkIGFzIHJvb3QsIGFuZCB0aGUgbm9ybWFsIGJvb3QgcHJvY2VkdXJlIGlzIGZvbGxvd2VkLAotICAgIHdpdGggdGhlIFJBTSBkaXNrIHN0aWxsIG1vdW50ZWQgYXMgcm9vdC4KKyAgICB3aXRoIHRoZSBSQU0gZGlzayBtb3VudGVkIGFzIHJvb3QuCiAKIENvbXByZXNzZWQgY3BpbyBpbWFnZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzNywxMSArMTQxLDExIEBACiAgICAgIyBta2RpciAvbW50L2RldgogICAgICMgbWtub2QgL21udC9kZXYvY29uc29sZSBjIDUgMQogIDUpIGNvcHkgYWxsIHRoZSBmaWxlcyB0aGF0IGFyZSBuZWVkZWQgdG8gcHJvcGVybHkgdXNlIHRoZSBpbml0cmQKLSAgICBlbnZpcm9ubWVudC4gRG9uJ3QgZm9yZ2V0IHRoZSBtb3N0IGltcG9ydGFudCBmaWxlLCAvbGludXhyYwotICAgIE5vdGUgdGhhdCAvbGludXhyYydzIHBlcm1pc3Npb25zIG11c3QgaW5jbHVkZSAieCIgKGV4ZWN1dGUpLgorICAgIGVudmlyb25tZW50LiBEb24ndCBmb3JnZXQgdGhlIG1vc3QgaW1wb3J0YW50IGZpbGUsIC9zYmluL2luaXQKKyAgICBOb3RlIHRoYXQgL3NiaW4vaW5pdCdzIHBlcm1pc3Npb25zIG11c3QgaW5jbHVkZSAieCIgKGV4ZWN1dGUpLgogIDYpIGNvcnJlY3Qgb3BlcmF0aW9uIHRoZSBpbml0cmQgZW52aXJvbm1lbnQgY2FuIGZyZXF1ZW50bHkgYmUgdGVzdGVkCiAgICAgZXZlbiB3aXRob3V0IHJlYm9vdGluZyB3aXRoIHRoZSBjb21tYW5kCi0gICAgIyBjaHJvb3QgL21udCAvbGludXhyYworICAgICMgY2hyb290IC9tbnQgL3NiaW4vaW5pdAogICAgIFRoaXMgaXMgb2YgY291cnNlIGxpbWl0ZWQgdG8gaW5pdHJkcyB0aGF0IGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUKICAgICBnZW5lcmFsIHN5c3RlbSBzdGF0ZSAoZS5nLiBieSByZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlcywKICAgICBvdmVyd3JpdGluZyBtb3VudGVkIGRldmljZXMsIHRyeWluZyB0byBzdGFydCBhbHJlYWR5IHJ1bm5pbmcgZGVtb25zLApAQCAtMTU0LDcgKzE1OCw3IEBACiAgICAgIyBnemlwIC05IGluaXRyZAogCiBGb3IgZXhwZXJpbWVudGluZyB3aXRoIGluaXRyZCwgeW91IG1heSB3YW50IHRvIHRha2UgYSByZXNjdWUgZmxvcHB5IGFuZAotb25seSBhZGQgYSBzeW1ib2xpYyBsaW5rIGZyb20gL2xpbnV4cmMgdG8gL2Jpbi9zaC4gQWx0ZXJuYXRpdmVseSwgeW91Citvbmx5IGFkZCBhIHN5bWJvbGljIGxpbmsgZnJvbSAvc2Jpbi9pbml0IHRvIC9iaW4vc2guIEFsdGVybmF0aXZlbHksIHlvdQogY2FuIHRyeSB0aGUgZXhwZXJpbWVudGFsIG5ld2xpYiBlbnZpcm9ubWVudCBbMl0gdG8gY3JlYXRlIGEgc21hbGwKIGluaXRyZC4KIApAQCAtMTYzLDE1ICsxNjcsMTQgQEAKIHdpdGggYW4gb2xkZXIgbWVjaGFuaXNtLCB0aGUgZm9sbG93aW5nIGJvb3QgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKIGhhdmUgdG8gYmUgZ2l2ZW46CiAKLSAgcm9vdD0vZGV2L3JhbTAgaW5pdD0vbGludXhyYyBydworICByb290PS9kZXYvcmFtMCBydwogCiAocncgaXMgb25seSBuZWNlc3NhcnkgaWYgd3JpdGluZyB0byB0aGUgaW5pdHJkIGZpbGUgc3lzdGVtLikKIAogV2l0aCBMT0FETElOLCB5b3Ugc2ltcGx5IGV4ZWN1dGUKIAogICAgICBMT0FETElOIDxrZXJuZWw+IGluaXRyZD08ZGlza19pbWFnZT4KLWUuZy4gTE9BRExJTiBDOlxMSU5VWFxCWklNQUdFIGluaXRyZD1DOlxMSU5VWFxJTklUUkQuR1ogcm9vdD0vZGV2L3JhbTAKLSAgICAgICBpbml0PS9saW51eHJjIHJ3CitlLmcuIExPQURMSU4gQzpcTElOVVhcQlpJTUFHRSBpbml0cmQ9QzpcTElOVVhcSU5JVFJELkdaIHJvb3Q9L2Rldi9yYW0wIHJ3CiAKIFdpdGggTElMTywgeW91IGFkZCB0aGUgb3B0aW9uIElOSVRSRD08cGF0aD4gdG8gZWl0aGVyIHRoZSBnbG9iYWwgc2VjdGlvbgogb3IgdG8gdGhlIHNlY3Rpb24gb2YgdGhlIHJlc3BlY3RpdmUga2VybmVsIGluIC9ldGMvbGlsby5jb25mLCBhbmQgcGFzcwpAQCAtMTc5LDcgKzE4Miw3IEBACiAKICAgaW1hZ2UgPSAvYnpJbWFnZQogICAgIGluaXRyZCA9IC9ib290L2luaXRyZC5negotICAgIGFwcGVuZCA9ICJyb290PS9kZXYvcmFtMCBpbml0PS9saW51eHJjIHJ3IgorICAgIGFwcGVuZCA9ICJyb290PS9kZXYvcmFtMCBydyIKIAogYW5kIHJ1biAvc2Jpbi9saWxvCiAKQEAgLTE5MSw3ICsxOTQsNyBAQAogQ2hhbmdpbmcgdGhlIHJvb3QgZGV2aWNlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hlbiBmaW5pc2hlZCB3aXRoIGl0cyBkdXRpZXMsIGxpbnV4cmMgdHlwaWNhbGx5IGNoYW5nZXMgdGhlIHJvb3QgZGV2aWNlCitXaGVuIGZpbmlzaGVkIHdpdGggaXRzIGR1dGllcywgaW5pdCB0eXBpY2FsbHkgY2hhbmdlcyB0aGUgcm9vdCBkZXZpY2UKIGFuZCBwcm9jZWVkcyB3aXRoIHN0YXJ0aW5nIHRoZSBMaW51eCBzeXN0ZW0gb24gdGhlICJyZWFsIiByb290IGRldmljZS4KIAogVGhlIHByb2NlZHVyZSBpbnZvbHZlcyB0aGUgZm9sbG93aW5nIHN0ZXBzOgpAQCAtMjE3LDcgKzIyMCw3IEBACiAjIG1rZGlyIGluaXRyZAogIyBwaXZvdF9yb290IC4gaW5pdHJkCiAKLU5vdywgdGhlIGxpbnV4cmMgcHJvY2VzcyBtYXkgc3RpbGwgYWNjZXNzIHRoZSBvbGQgcm9vdCB2aWEgaXRzCitOb3csIHRoZSBpbml0IHByb2Nlc3MgbWF5IHN0aWxsIGFjY2VzcyB0aGUgb2xkIHJvb3QgdmlhIGl0cwogZXhlY3V0YWJsZSwgc2hhcmVkIGxpYnJhcmllcywgc3RhbmRhcmQgaW5wdXQvb3V0cHV0L2Vycm9yLCBhbmQgaXRzCiBjdXJyZW50IHJvb3QgZGlyZWN0b3J5LiBBbGwgdGhlc2UgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZCBieSB0aGUKIGZvbGxvd2luZyBjb21tYW5kOgpAQCAtMjQ5LDEwICsyNTIsNiBAQAogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgaW5pdHJkIHdpdGggYW4gTkZTLW1vdW50ZWQgcm9vdCwgc2VlIHRoZQogcGl2b3Rfcm9vdCg4KSBtYW4gcGFnZSBmb3IgZGV0YWlscy4KIAotTm90ZTogaWYgbGludXhyYyBvciBhbnkgcHJvZ3JhbSBleGVjJ2VkIGZyb20gaXQgdGVybWluYXRlcyBmb3Igc29tZQotcmVhc29uLCB0aGUgb2xkIGNoYW5nZV9yb290IG1lY2hhbmlzbSBpcyBpbnZva2VkIChzZWUgc2VjdGlvbiAiT2Jzb2xldGUKLXJvb3QgY2hhbmdlIG1lY2hhbmlzbSIpLgotCiAKIFVzYWdlIHNjZW5hcmlvcwogLS0tLS0tLS0tLS0tLS0tCkBAIC0yNjQsMTUgKzI2MywxNSBAQAogICAxKSBzeXN0ZW0gYm9vdHMgZnJvbSBmbG9wcHkgb3Igb3RoZXIgbWVkaWEgd2l0aCBhIG1pbmltYWwga2VybmVsCiAgICAgIChlLmcuIHN1cHBvcnQgZm9yIFJBTSBkaXNrcywgaW5pdHJkLCBhLm91dCwgYW5kIHRoZSBFeHQyIEZTKSBhbmQKICAgICAgbG9hZHMgaW5pdHJkCi0gIDIpIC9saW51eHJjIGRldGVybWluZXMgd2hhdCBpcyBuZWVkZWQgdG8gKDEpIG1vdW50IHRoZSAicmVhbCIgcm9vdCBGUworICAyKSAvc2Jpbi9pbml0IGRldGVybWluZXMgd2hhdCBpcyBuZWVkZWQgdG8gKDEpIG1vdW50IHRoZSAicmVhbCIgcm9vdCBGUwogICAgICAoaS5lLiBkZXZpY2UgdHlwZSwgZGV2aWNlIGRyaXZlcnMsIGZpbGUgc3lzdGVtKSBhbmQgKDIpIHRoZQogICAgICBkaXN0cmlidXRpb24gbWVkaWEgKGUuZy4gQ0QtUk9NLCBuZXR3b3JrLCB0YXBlLCAuLi4pLiBUaGlzIGNhbiBiZQogICAgICBkb25lIGJ5IGFza2luZyB0aGUgdXNlciwgYnkgYXV0by1wcm9iaW5nLCBvciBieSB1c2luZyBhIGh5YnJpZAogICAgICBhcHByb2FjaC4KLSAgMykgL2xpbnV4cmMgbG9hZHMgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgbW9kdWxlcwotICA0KSAvbGludXhyYyBjcmVhdGVzIGFuZCBwb3B1bGF0ZXMgdGhlIHJvb3QgZmlsZSBzeXN0ZW0gKHRoaXMgZG9lc24ndAorICAzKSAvc2Jpbi9pbml0IGxvYWRzIHRoZSBuZWNlc3Nhcnkga2VybmVsIG1vZHVsZXMKKyAgNCkgL3NiaW4vaW5pdCBjcmVhdGVzIGFuZCBwb3B1bGF0ZXMgdGhlIHJvb3QgZmlsZSBzeXN0ZW0gKHRoaXMgZG9lc24ndAogICAgICBoYXZlIHRvIGJlIGEgdmVyeSB1c2FibGUgc3lzdGVtIHlldCkKLSAgNSkgL2xpbnV4cmMgaW52b2tlcyBwaXZvdF9yb290IHRvIGNoYW5nZSB0aGUgcm9vdCBmaWxlIHN5c3RlbSBhbmQKKyAgNSkgL3NiaW4vaW5pdCBpbnZva2VzIHBpdm90X3Jvb3QgdG8gY2hhbmdlIHRoZSByb290IGZpbGUgc3lzdGVtIGFuZAogICAgICBleGVjcyAtIHZpYSBjaHJvb3QgLSBhIHByb2dyYW0gdGhhdCBjb250aW51ZXMgdGhlIGluc3RhbGxhdGlvbgogICA2KSB0aGUgYm9vdCBsb2FkZXIgaXMgaW5zdGFsbGVkCiAgIDcpIHRoZSBib290IGxvYWRlciBpcyBjb25maWd1cmVkIHRvIGxvYWQgYW4gaW5pdHJkIHdpdGggdGhlIHNldCBvZgpAQCAtMjkxLDcgKzI5MCw3IEBACiBzdWNoIGNhc2VzLCBpdCBpcyBkZXNpcmFibGUgdG8gZ2VuZXJhdGUgb25seSBhIHNtYWxsIHNldCBvZiBrZXJuZWxzCiAoaWRlYWxseSBvbmx5IG9uZSkgYW5kIHRvIGtlZXAgdGhlIHN5c3RlbS1zcGVjaWZpYyBwYXJ0IG9mIGNvbmZpZ3VyYXRpb24KIGluZm9ybWF0aW9uIGFzIHNtYWxsIGFzIHBvc3NpYmxlLiBJbiB0aGlzIGNhc2UsIGEgY29tbW9uIGluaXRyZCBjb3VsZCBiZQotZ2VuZXJhdGVkIHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgbW9kdWxlcy4gVGhlbiwgb25seSAvbGludXhyYyBvciBhIGZpbGUKK2dlbmVyYXRlZCB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IG1vZHVsZXMuIFRoZW4sIG9ubHkgL3NiaW4vaW5pdCBvciBhIGZpbGUKIHJlYWQgYnkgaXQgd291bGQgaGF2ZSB0byBiZSBkaWZmZXJlbnQuCiAKIEEgdGhpcmQgc2NlbmFyaW8gYXJlIG1vcmUgY29udmVuaWVudCByZWNvdmVyeSBkaXNrcywgYmVjYXVzZSBpbmZvcm1hdGlvbgpAQCAtMzM3LDYgKzMzNiwyNSBAQAogdGhlIG5ldywgc3VwcG9ydGVkIG1lY2hhbmlzbSBpcyBjYWxsZWQgInBpdm90X3Jvb3QiLgogCiAKK01peGVkIGNoYW5nZV9yb290IGFuZCBwaXZvdF9yb290IG1lY2hhbmlzbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIGNhc2UgeW91IGRpZCBub3Qgd2FudCB0byB1c2Ugcm9vdD0vZGV2L3JhbTAgdG8gdHJpZyB0aGUgcGl2b3Rfcm9vdCBtZWNoYW5pc20sCit5b3UgbWF5IGNyZWF0ZSBib3RoIC9saW51eHJjIGFuZCAvc2Jpbi9pbml0IGluIHlvdXIgaW5pdHJkIGltYWdlLgorCisvbGludXhyYyB3b3VsZCBjb250YWluIG9ubHkgdGhlIGZvbGxvd2luZzoKKworIyEgL2Jpbi9zaAorbW91bnQgLW4gLXQgcHJvYyBwcm9jIC9wcm9jCitlY2hvIDB4MDEwMCA+L3Byb2Mvc3lzL2tlcm5lbC9yZWFsLXJvb3QtZGV2Cit1bW91bnQgLW4gL3Byb2MKKworT25jZSBsaW51eHJjIGV4aXRlZCwgdGhlIGtlcm5lbCB3b3VsZCBtb3VudCBhZ2FpbiB5b3VyIGluaXRyZCBhcyByb290LAordGhpcyB0aW1lIGV4ZWN1dGluZyAvc2Jpbi9pbml0LiBBZ2FpbiwgaXQgd291bGQgYmUgZHV0eSBvZiB0aGlzIGluaXQKK3RvIGJ1aWxkIHRoZSByaWdodCBlbnZpcm9ubWVudCAobWF5YmUgdXNpbmcgdGhlIHJvb3Q9IGRldmljZSBwYXNzZWQgb24KK3RoZSBjbWRsaW5lKSBiZWZvcmUgdGhlIGZpbmFsIGV4ZWN1dGlvbiBvZiB0aGUgcmVhbCAvc2Jpbi9pbml0LgorCisKIFJlc291cmNlcwogLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvYXRhcmlrYmQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9hdGFyaWtiZC50eHQKaW5kZXggNjY4ZjRkMC4uYWIwNTA2MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9hdGFyaWtiZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9hdGFyaWtiZC50eHQKQEAgLTE3OSw5ICsxNzksOSBAQAogdGhlIG1vdXNlLiBBZnRlciBhbnkgam95c3RpY2sgY29tbWFuZCwgdGhlIGlrYmQgYXNzdW1lcyB0aGF0IGpveXN0aWNrcyBhcmUKIGNvbm5lY3RlZCB0byBib3RoIEpveXN0aWNrMCBhbmQgSm95c3RpY2sxLiBBbnkgbW91c2UgY29tbWFuZCAoZXhjZXB0IE1PVVNFCiBESVNBQkxFKSB0aGVuIGNhdXNlcyBwb3J0IDAgdG8gYWdhaW4gYmUgc2Nhbm5lZCBhcyBpZiBpdCB3ZXJlIGEgbW91c2UsIGFuZAotYm90aCBidXR0b25zIGFyZSBsb2dpY2FsbHkgY29ubmVjdGVkIHRvIGl0LiBJZiBhIG1vdXNlIGRpYWJsZSBjb21tYW5kIGlzCitib3RoIGJ1dHRvbnMgYXJlIGxvZ2ljYWxseSBjb25uZWN0ZWQgdG8gaXQuIElmIGEgbW91c2UgZGlzYWJsZSBjb21tYW5kIGlzCiByZWNlaXZlZCB3aGlsZSBwb3J0IDAgaXMgcHJlc3VtZWQgdG8gYmUgYSBtb3VzZSwgdGhlIGJ1dHRvbiBpcyBsb2dpY2FsbHkKLWFzc2lnbmVkIHRvIEpveXN0aWNrMSAoIHVudGlsIHRoZSBtb3VzZSBpcyByZWVuYWJsZWQgYnkgYW5vdGhlciBtb3VzZSBjb21tYW5kKS4KK2Fzc2lnbmVkIHRvIEpveXN0aWNrMSAodW50aWwgdGhlIG1vdXNlIGlzIHJlZW5hYmxlZCBieSBhbm90aGVyIG1vdXNlIGNvbW1hbmQpLgogCiA5LiBpa2JkIENvbW1hbmQgU2V0CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQveHBhZC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3hwYWQudHh0CmluZGV4IDU0MjdiZGYuLmFhZTBkNDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5wdXQveHBhZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC94cGFkLnR4dApAQCAtNjUsMTUgKzY1LDE1IEBACiBJJ3ZlIHRlc3RlZCB0aGlzIHdpdGggU3RlcG1hbmlhLCBhbmQgaXQgd29ya3MgcXVpdGUgd2VsbC4KIAogCi0wLjMgVW5rb3duIENvbnRyb2xsZXJzCiswLjMgVW5rbm93biBDb250cm9sbGVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSWYgeW91IGhhdmUgYW4gdW5rb3duIHhib3ggY29udHJvbGxlciwgaXQgc2hvdWxkIHdvcmsganVzdCBmaW5lIHdpdGgKK0lmIHlvdSBoYXZlIGFuIHVua25vd24geGJveCBjb250cm9sbGVyLCBpdCBzaG91bGQgd29yayBqdXN0IGZpbmUgd2l0aAogdGhlIGRlZmF1bHQgc2V0dGluZ3MuCiAKIEhPV0VWRVIgaWYgeW91IGhhdmUgYW4gdW5rbm93biBkYW5jZSBwYWQgbm90IGxpc3RlZCBiZWxvdywgaXQgd2lsbCBub3QKIHdvcmsgVU5MRVNTIHlvdSBzZXQgImRwYWRfdG9fYnV0dG9ucyIgdG8gMSBpbiB0aGUgbW9kdWxlIGNvbmZpZ3VyYXRpb24uCiAKLVBMRUFTRSBpZiB5b3UgaGF2ZSBhbiB1bmtvd24gY29udHJvbGxlciwgZW1haWwgRG9tIDxiaW5hcnkxMjMwQHlhaG9vLmNvbT4gd2l0aAorUExFQVNFLCBpZiB5b3UgaGF2ZSBhbiB1bmtub3duIGNvbnRyb2xsZXIsIGVtYWlsIERvbSA8YmluYXJ5MTIzMEB5YWhvby5jb20+IHdpdGgKIGEgZHVtcCBmcm9tIC9wcm9jL2J1cy91c2IgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBhZCAobWFudWZhY3R1cmVyLCBjb3VudHJ5LAogd2hldGhlciBpdCBpcyBhIGRhbmNlIHBhZCBvciBub3JtYWwgY29udHJvbGxlcikgc28gdGhhdCB3ZSBjYW4gYWRkIHlvdXIgcGFkCiB0byB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZGV2aWNlcywgZW5zdXJpbmcgdGhhdCBpdCB3aWxsIHdvcmsgb3V0IG9mIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0CmluZGV4IDhmNzUwYzAuLjNkZTdkMzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsLW51bWJlci50eHQKQEAgLTEzOCw3ICsxMzgsOCBAQAogJ20nCTAwLTFGCW5ldC9pcmRhL2lybW9kLmgJY29uZmxpY3QhCiAnbicJMDAtN0YJbGludXgvbmNwX2ZzLmgKICduJwlFMC1GRgl2aWRlby9tYXRyb3guaCAgICAgICAgICBtYXRyb3hmYgotJ3AnCTAwLTNGCWxpbnV4L21jMTQ2ODE4cnRjLmgKKydwJwkwMC0wRglsaW51eC9waGFudG9tLmgJCWNvbmZsaWN0ISAoT3BlbkhhcHRpY3MgbmVlZHMgdGhpcykKKydwJwkwMC0zRglsaW51eC9tYzE0NjgxOHJ0Yy5oCWNvbmZsaWN0IQogJ3AnCTQwLTdGCWxpbnV4L252cmFtLmgKICdwJwk4MC05RgkJCQl1c2VyLXNwYWNlIHBhcnBvcnQKIAkJCQkJPG1haWx0bzp0aW1AY3liZXJlbGsubmV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL0NSRURJVFMgYi9Eb2N1bWVudGF0aW9uL2lzZG4vQ1JFRElUUwppbmRleCBlMWIzMDIzLi43YzE3YzgzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lzZG4vQ1JFRElUUworKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vQ1JFRElUUwpAQCAtMiw3ICsyLDcgQEAKIEkgd2FudCB0byB0aGFuayBhbGwgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMgcHJvamVjdCBhbmQgZXNwZWNpYWxseSB0bzoKIChpbiBhbHBoYWJldGljYWwgb3JkZXIpCiAKLVRob21hcyBCb2dlbmT2cmZlciAodHNib2dlbmRAYmlnYnVnLmZyYW5rZW4uZGUpCitUaG9tYXMgQm9nZW5kw7ZyZmVyICh0c2JvZ2VuZEBiaWdidWcuZnJhbmtlbi5kZSkKICAgVGVzdGVyLCBsb3RzIG9mIGJ1Z2ZpeGVzIGFuZCBoaW50cy4KIAogQWxhbiBDb3ggKGFsYW5AcmVkaGF0LmNvbSkKQEAgLTExLDcgKzExLDcgQEAKIEhlbm5lciBFaXNlbiAoZWlzQGJhdHkuaGFuc2UuZGUpCiAgIEZvciBYLjI1IGltcGxlbWVudGF0aW9uLgogCi1Wb2xrZXIgR/Z0eiAodm9sa2VyQG9vcHMuZnJhbmtlbi5kZSkKK1ZvbGtlciBHw7Z0eiAodm9sa2VyQG9vcHMuZnJhbmtlbi5kZSkKICAgRm9yIGNvbnRyaWJ1dGlvbiBvZiBtYW4tcGFnZXMsIHRoZSBpbW9udHR5LXRvb2wgYW5kIGEgcGVyZmVjdAogICBtYWludGFpbmluZyBvZiB0aGUgbWFpbGluZy1saXN0IGF0IGh1Yi13dWUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FCmluZGV4IDc2MTU5NTIuLjY3ODM0MzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRQpAQCAtNDAyLDcgKzQwMiw3IEBACiAgICAgIHRoZSBzY3JpcHQgdG9vbHMvdGNsdGsvaXNkbm1vbi4gWW91IGNhbiBhZGQgYWN0aW9ucyBmb3IgbGluZS1zdGF0dXMKICAgICAgY2hhbmdlcy4gU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzY3JpcHQgZm9yIGhvdyB0bwogICAgICBkbyB0aGF0LiBUaGVyZSBhcmUgb3RoZXIgdHR5LWJhc2VkIHRvb2xzIGluIHRoZSB0b29scy1zdWJkaXJlY3RvcnkKLSAgICAgY29udHJpYnV0ZWQgYnkgTWljaGFlbCBLbmlnZ2UgKGltb24pLCBWb2xrZXIgR/Z0eiAoaW1vbnR0eSkgYW5kCisgICAgIGNvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgS25pZ2dlIChpbW9uKSwgVm9sa2VyIEfDtnR6IChpbW9udHR5KSBhbmQKICAgICAgQW5kcmVhcyBLb29sIChpc2RubW9uKS4KIAogICAgbCkgRm9yIGluaXRpYWwgdGVzdGluZywgeW91IGNhbiBzZXQgdGhlIHZlcmJvc2UtbGV2ZWwgdG8gMiAoZGVmYXVsdDogMCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmljbiBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuaWNuCmluZGV4IGE1ZjU1ZWEuLjEzZjgzM2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuaWNuCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuaWNuCkBAIC0zLDggKzMsOCBAQAogWW91IGNhbiBnZXQgdGhlIElDTi1JU0ROLWNhcmQgZnJvbToKIAogVGhpbmtpbmcgT2JqZWN0cyBTb2Z0d2FyZSBHbWJICi1WZXJzYmFjaGVyIFL2dGhlIDE1OQotOTcwNzggV/xyemJ1cmcKK1ZlcnNiYWNoZXIgUsO2dGhlIDE1OQorOTcwNzggV8O8cnpidXJnCiBUZWw6ICs0OSA5MzEgMjg3Nzk1MAogRmF4OiArNDkgOTMxIDI4Nzc5NTEKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9qYXZhLnR4dCBiL0RvY3VtZW50YXRpb24vamF2YS50eHQKaW5kZXggYzc2OGRjNi4uM2NjZTNmYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9qYXZhLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2phdmEudHh0CkBAIC0zOTAsNyArMzkwLDcgQEAKIAogCiBvcmlnaW5hbGx5IGJ5IEJyaWFuIEEuIExhbnR6LCBicmlhbkBsYW50ei5jb20KLWhlYXZpbHkgZWRpdGVkIGZvciBiaW5mbXRfbWlzYyBieSBSaWNoYXJkIEf8bnRoZXIKK2hlYXZpbHkgZWRpdGVkIGZvciBiaW5mbXRfbWlzYyBieSBSaWNoYXJkIEfDvG50aGVyCiBuZXcgc2NyaXB0cyBieSBDb2xpbiBKLiBXYXRzb24gPGNqdzQ0QGNhbS5hYy51az4KIGFkZGVkIGV4ZWN1dGFibGUgSmFyIGZpbGUgc3VwcG9ydCBieSBLdXJ0IEh1d2lnIDxrdXJ0QGlrdS1uZXR6LmRlPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2NzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0CmluZGV4IGM2OGRhZmUuLmQ5ZTNiMTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0CkBAIC0yMzYsNyArMjM2LDcgQEAKIAogICAgICAqIFRpdGxlOiAiRGVzaWduIGFuZCBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2Vjb25kIEV4dGVuZGVkCiAgICAgICAgRmlsZXN5c3RlbSIKLSAgICAgICBBdXRob3I6IFLpbXkgQ2FyZCwgVGhlb2RvcmUgVHMnbywgU3RlcGhlbiBUd2VlZGllLgorICAgICAgIEF1dGhvcjogUsOpbXkgQ2FyZCwgVGhlb2RvcmUgVHMnbywgU3RlcGhlbiBUd2VlZGllLgogICAgICAgIFVSTDogaHR0cDovL3dlYi5taXQuZWR1L3R5dHNvL3d3dy9saW51eC9leHQyaW50cm8uaHRtbAogICAgICAgIEtleXdvcmRzOiBleHQyLCBsaW51eCBmcyBoaXN0b3J5LCBpbm9kZSwgZGlyZWN0b3J5LCBsaW5rLCBkZXZpY2VzLAogICAgICAgIFZGUywgcGh5c2ljYWwgc3RydWN0dXJlLCBwZXJmb3JtYW5jZSwgYmVuY2htYXJrcywgZXh0MmZzIGxpYnJhcnksCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDM4ZDdkYjMuLjVkMDI4M2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0xNzAsNyArMTcwLDEwIEBACiAJYWNwaV9vc19uYW1lPQlbSFcsQUNQSV0gVGVsbCBBQ1BJIEJJT1MgdGhlIG5hbWUgb2YgdGhlIE9TCiAJCQlGb3JtYXQ6IFRvIHNwb29mIGFzIFdpbmRvd3MgOTg6ID0iTWljcm9zb2Z0IFdpbmRvd3MiCiAKLQlhY3BpX29zaT0JW0hXLEFDUEldIGVtcHR5IHBhcmFtIGRpc2FibGVzIF9PU0kKKwlhY3BpX29zaT0JW0hXLEFDUEldIE1vZGlmeSBsaXN0IG9mIHN1cHBvcnRlZCBPUyBpbnRlcmZhY2Ugc3RyaW5ncworCQkJYWNwaV9vc2k9InN0cmluZzEiCSMgYWRkIHN0cmluZzEgLS0gb25seSBvbmUgc3RyaW5nCisJCQlhY3BpX29zaT0iIXN0cmluZzIiCSMgcmVtb3ZlIGJ1aWx0LWluIHN0cmluZzIKKwkJCWFjcGlfb3NpPQkJIyBkaXNhYmxlIGFsbCBzdHJpbmdzCiAKIAlhY3BpX3NlcmlhbGl6ZQlbSFcsQUNQSV0gZm9yY2Ugc2VyaWFsaXphdGlvbiBvZiBBTUwgbWV0aG9kcwogCkBAIC0zOTYsNiArMzk5LDI2IEBACiAJCQljbG9ja3NvdXJjZSBpcyBub3QgYXZhaWxhYmxlLCBpdCBkZWZhdWx0cyB0byBQSVQuCiAJCQlGb3JtYXQ6IHsgcGl0IHwgdHNjIHwgY3ljbG9uZSB8IHBtdG1yIH0KIAorCWNsb2Nrc291cmNlPQlbR0VORVJJQ19USU1FXSBPdmVycmlkZSB0aGUgZGVmYXVsdCBjbG9ja3NvdXJjZQorCQkJRm9ybWF0OiA8c3RyaW5nPgorCQkJT3ZlcnJpZGUgdGhlIGRlZmF1bHQgY2xvY2tzb3VyY2UgYW5kIHVzZSB0aGUgY2xvY2tzb3VyY2UKKwkJCXdpdGggdGhlIG5hbWUgc3BlY2lmaWVkLgorCQkJU29tZSBjbG9ja3NvdXJjZSBuYW1lcyB0byBjaG9vc2UgZnJvbSwgZGVwZW5kaW5nIG9uCisJCQl0aGUgcGxhdGZvcm06CisJCQlbYWxsXSBqaWZmaWVzICh0aGlzIGlzIHRoZSBiYXNlLCBmYWxsYmFjayBjbG9ja3NvdXJjZSkKKwkJCVtBQ1BJXSBhY3BpX3BtCisJCQlbQVJNXSBpbXhfdGltZXIxLE9TVFMsbmV0eF90aW1lcixtcHVfdGltZXIyLAorCQkJCXB4YV90aW1lcix0aW1lcjMsMzJrX2NvdW50ZXIsdGltZXIwXzEKKwkJCVtBVlIzMl0gYXZyMzIKKwkJCVtJQS0zMl0gcGl0LGhwZXQsdHNjLHZtaS10aW1lcjsKKwkJCQlzY3gyMDBfaHJ0IG9uIEdlb2RlOyBjeWNsb25lIG9uIElCTSB4NDQwCisJCQlbTUlQU10gTUlQUworCQkJW1BBUklTQ10gY3IxNgorCQkJW1MzOTBdIHRvZAorCQkJW1NIXSBTdXBlckgKKwkJCVtTUEFSQzY0XSB0aWNrCisJCQlbWDg2LTY0XSBocGV0LHRzYworCiAJY29kZV9ieXRlcwlbSUEzMl0gSG93IG1hbnkgYnl0ZXMgb2Ygb2JqZWN0IGNvZGUgdG8gcHJpbnQgaW4gYW4KIAkJCW9vcHMgcmVwb3J0LgogCQkJUmFuZ2U6IDAgLSA4MTkyCkBAIC00OTYsNiArNTE5LDMwIEBACiAJCQlGb3JtYXQ6IDxhcmVhPlssPG5vZGU+XQogCQkJU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RlY25ldC50eHQuCiAKKwlkZWZhdWx0X2JsdT0JW1ZUXQorCQkJRm9ybWF0OiA8Ymx1ZTA+LDxibHVlMT4sPGJsdWUyPiwuLi4sPGJsdWUxNT4KKwkJCUNoYW5nZSB0aGUgZGVmYXVsdCBibHVlIHBhbGV0dGUgb2YgdGhlIGNvbnNvbGUuCisJCQlUaGlzIGlzIGEgMTYtbWVtYmVyIGFycmF5IGNvbXBvc2VkIG9mIHZhbHVlcworCQkJcmFuZ2luZyBmcm9tIDAtMjU1LgorCisJZGVmYXVsdF9ncm49CVtWVF0KKwkJCUZvcm1hdDogPGdyZWVuMD4sPGdyZWVuMT4sPGdyZWVuMj4sLi4uLDxncmVlbjE1PgorCQkJQ2hhbmdlIHRoZSBkZWZhdWx0IGdyZWVuIHBhbGV0dGUgb2YgdGhlIGNvbnNvbGUuCisJCQlUaGlzIGlzIGEgMTYtbWVtYmVyIGFycmF5IGNvbXBvc2VkIG9mIHZhbHVlcworCQkJcmFuZ2luZyBmcm9tIDAtMjU1LgorCisJZGVmYXVsdF9yZWQ9CVtWVF0KKwkJCUZvcm1hdDogPHJlZDA+LDxyZWQxPiw8cmVkMj4sLi4uLDxyZWQxNT4KKwkJCUNoYW5nZSB0aGUgZGVmYXVsdCByZWQgcGFsZXR0ZSBvZiB0aGUgY29uc29sZS4KKwkJCVRoaXMgaXMgYSAxNi1tZW1iZXIgYXJyYXkgY29tcG9zZWQgb2YgdmFsdWVzCisJCQlyYW5naW5nIGZyb20gMC0yNTUuCisKKwlkZWZhdWx0X3V0Zjg9ICAgW1ZUXQorCQkJRm9ybWF0PTwwfDE+CisJCQlTZXQgc3lzdGVtLXdpZGUgZGVmYXVsdCBVVEYtOCBtb2RlIGZvciBhbGwgdHR5J3MuCisJCQlEZWZhdWx0IGlzIDAgYW5kIGJ5IHNldHRpbmcgdG8gMSwgaXQgZW5hYmxlcyBVVEYtOAorCQkJbW9kZSBmb3IgYWxsIG5ld2x5IG9wZW5lZCBvciBhbGxvY2F0ZWQgdGVybWluYWxzLgorCiAJZGhhc2hfZW50cmllcz0JW0tOTF0KIAkJCVNldCBudW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciBkZW50cnkgY2FjaGUuCiAKQEAgLTczMCwxNCArNzc3LDYgQEAKIAlpbnBvcnQuaXJxPQlbSFddIElucG9ydCAoQVRJIFhMIGFuZCBNaWNyb3NvZnQpIGJ1c21vdXNlIGRyaXZlcgogCQkJRm9ybWF0OiA8aXJxPgogCi0JY29tYmluZWRfbW9kZT0JW0hXXSBjb250cm9sIHdoaWNoIGRyaXZlciB1c2VzIElERSBwb3J0cyBpbiBjb21iaW5lZAotCQkJbW9kZTogbGVnYWN5IElERSBkcml2ZXIsIGxpYmF0YSwgb3IgYm90aAotCQkJKGluIHRoZSBsaWJhdGEgY2FzZSwgbGliYXRhLmF0YXBpX2VuYWJsZWQ9MSBtYXkgYmUKLQkJCXVzZWZ1bCBhcyB3ZWxsKS4gIE5vdGUgdGhhdCB1c2luZyB0aGUgaWRlIG9yIGxpYmF0YQotCQkJb3B0aW9ucyBtYXkgYWZmZWN0IHlvdXIgZGV2aWNlIG5hbWluZyAoZS5nLiBieQotCQkJY2hhbmdpbmcgaGRjIHRvIHNkYikuCi0JCQlGb3JtYXQ6IGNvbWJpbmVkIChkZWZhdWx0KSwgaWRlLCBvciBsaWJhdGEKLQogCWludHRlc3Q9CVtJQTY0XQogCiAJaW83PQkJW0hXXSBJTzcgZm9yIE1hcnZlbCBiYXNlZCBhbHBoYSBzeXN0ZW1zCkBAIC04MTYsNiArODU1LDExIEBACiAJbGFzaT0JCVtIVyxTQ1NJXSBQQVJJU0MgTEFTSSBkcml2ZXIgZm9yIHRoZSA1M2M3MDAgY2hpcAogCQkJRm9ybWF0OiBhZGRyOjxpbz4saXJxOjxpcnE+CiAKKwlsZWdhY3lfc2VyaWFsLmZvcmNlIFtIVyxJQS0zMixYODYtNjRdCisJCQlQcm9iZSBmb3IgQ09NIHBvcnRzIGF0IGxlZ2FjeSBhZGRyZXNzZXMgZXZlbgorCQkJaWYgUE5QQklPUyBvciBBQ1BJIHNob3VsZCBkZXNjcmliZSB0aGVtLiAgVGhpcworCQkJaXMgZm9yIHdvcmtpbmcgYXJvdW5kIGZpcm13YXJlIGRlZmVjdHMuCisKIAlsbHNjKj0JCVtJQTY0XSBTZWUgZnVuY3Rpb24gcHJpbnRfcGFyYW1zKCkgaW4KIAkJCWFyY2gvaWE2NC9zbi9rZXJuZWwvbGxzYzQuYy4KIApAQCAtMTA5MSw5ICsxMTM1LDkgQEAKIAkJCXdoZW4gc2V0LgogCQkJRm9ybWF0OiA8aW50PgogCi0Jbm9hbGllbmNhY2hlCVtNTSwgTlVNQV0gRGlzYWJsZXMgdGhlIGFsbGNvYXRpb24gb2YgYWxpZW4gY2FjaGVzIGluCi0JCQl0aGUgc2xhYiBhbGxvY2F0b3IuICBTYXZlcyBwZXItbm9kZSBtZW1vcnksIGJ1dCB3aWxsCi0JCQlpbXBhY3QgcGVyZm9ybWFuY2Ugb24gcmVhbCBOVU1BIGhhcmR3YXJlLgorCW5vYWxpZW5jYWNoZQlbTU0sIE5VTUEsIFNMQUJdIERpc2FibGVzIHRoZSBhbGxvY2F0aW9uIG9mIGFsaWVuCisJCQljYWNoZXMgaW4gdGhlIHNsYWIgYWxsb2NhdG9yLiAgU2F2ZXMgcGVyLW5vZGUgbWVtb3J5LAorCQkJYnV0IHdpbGwgaW1wYWN0IHBlcmZvcm1hbmNlLgogCiAJbm9hbGlnbgkJW0tOTCxBUk1dCiAKQEAgLTE1NzIsMTIgKzE2MTYsNTQgQEAKIAogCXNscmFtPQkJW0hXLE1URF0KIAorCXNsdWJfZGVidWcJW01NLCBTTFVCXQorCQkJRW5hYmxpbmcgc2x1Yl9kZWJ1ZyBhbGxvd3Mgb25lIHRvIGRldGVybWluZSB0aGUgY3VscHJpdAorCQkJaWYgc2xhYiBvYmplY3RzIGJlY29tZSBjb3JydXB0ZWQuIEVuYWJsaW5nIHNsdWJfZGVidWcKKwkJCWNyZWF0ZXMgZ3VhcmQgem9uZXMgYXJvdW5kIG9iamVjdHMgYW5kIHBvaXNvbnMgb2JqZWN0cworCQkJd2hlbiBub3QgaW4gdXNlLiBBbHNvIHRyYWNrcyB0aGUgbGFzdCBhbGxvYyAvIGZyZWUuCisJCQlGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgRG9jdW1lbnRhdGlvbi92bS9zbHViLnR4dC4KKworCXNsdWJfbWF4X29yZGVyPSBbTU0sIFNMVUJdCisJCQlEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGFsbG93ZWQgb3JkZXIgZm9yIHNsYWJzLiBTZXR0aW5nCisJCQl0aGlzIHRvbyBoaWdoIG1heSBjYXVzZSBmcmFnbWVudGF0aW9uLgorCQkJRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIERvY3VtZW50YXRpb24vdm0vc2x1Yi50eHQuCisKKwlzbHViX21pbl9vYmplY3RzPQlbTU0sIFNMVUJdCisJCQlUaGUgbWluaW11bSBvYmplY3RzIHBlciBzbGFiLiBTTFVCIHdpbGwgaW5jcmVhc2UgdGhlCisJCQlzbGFiIG9yZGVyIHVwIHRvIHNsdWJfbWF4X29yZGVyIHRvIGdlbmVyYXRlIGEKKwkJCXN1ZmZpY2llbnRseSBiaWcgc2xhYiB0byBzYXRpc2Z5IHRoZSBudW1iZXIgb2Ygb2JqZWN0cy4KKwkJCVRoZSBoaWdoZXIgdGhlIG51bWJlciBvZiBvYmplY3RzIHRoZSBzbWFsbGVyIHRoZSBvdmVyaGVhZAorCQkJb2YgdHJhY2tpbmcgc2xhYnMuCisJCQlGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgRG9jdW1lbnRhdGlvbi92bS9zbHViLnR4dC4KKworCXNsdWJfbWluX29yZGVyPQlbTU0sIFNMVUJdCisJCQlEZXRlcm1pbmVzIHRoZSBtaW5pbnVtIHBhZ2Ugb3JkZXIgZm9yIHNsYWJzLiBNdXN0IGJlCisJCQlsb3dlciB0aGFuIHNsdWJfbWF4X29yZGVyCisJCQlGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgRG9jdW1lbnRhdGlvbi92bS9zbHViLnR4dC4KKworCXNsdWJfbm9tZXJnZQlbTU0sIFNMVUJdCisJCQlEaXNhYmxlIG1lcmdpbmcgb2Ygc2xhYnMgb2Ygc2ltaWxhciBzaXplLiBNYXkgYmUKKwkJCW5lY2Vzc2FyeSBpZiB0aGVyZSBpcyBzb21lIHJlYXNvbiB0byBkaXN0aW5ndWlzaAorCQkJYWxsb2NzIHRvIGRpZmZlcmVudCBzbGFicy4KKwkJCUZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBEb2N1bWVudGF0aW9uL3ZtL3NsdWIudHh0LgorCiAJc21hcnQyPQkJW0hXXQogCQkJRm9ybWF0OiA8aW8xPlssPGlvMj5bLC4uLiw8aW84Pl1dCiAKIAlzbXAtYWx0LW9uY2UJW0lBLTMyLFNNUF0gT24gYSBob3RwbHVnIENQVSBzeXN0ZW0sIG9ubHkKIAkJCWF0dGVtcHQgdG8gc3Vic3RpdHV0ZSBTTVAgYWx0ZXJuYXRpdmVzIG9uY2UgYXQgYm9vdC4KIAorCXNtc2MtaXJjYzIubm9wbnAJW0hXXSBEb24ndCB1c2UgUE5QIHRvIGRpc2NvdmVyIFNNQyBkZXZpY2VzCisJc21zYy1pcmNjMi5pcmNjX2NmZz0JW0hXXSBEZXZpY2UgY29uZmlndXJhdGlvbiBJL08gcG9ydAorCXNtc2MtaXJjYzIuaXJjY19zaXI9CVtIV10gU0lSIGJhc2UgSS9PIHBvcnQKKwlzbXNjLWlyY2MyLmlyY2NfZmlyPQlbSFddIEZJUiBiYXNlIEkvTyBwb3J0CisJc21zYy1pcmNjMi5pcmNjX2lycT0JW0hXXSBJUlEgbGluZQorCXNtc2MtaXJjYzIuaXJjY19kbWE9CVtIV10gRE1BIGNoYW5uZWwKKwlzbXNjLWlyY2MyLmlyY2NfdHJhbnNjZWl2ZXI9IFtIV10gVHJhbnNjZWl2ZXIgdHlwZToKKwkJCQkwOiBUb3NoaWJhIFNhdGVsbGl0ZSAxODAwIChHUCBkYXRhIHBpbiBzZWxlY3QpCisJCQkJMTogRmFzdCBwaW4gc2VsZWN0IChkZWZhdWx0KQorCQkJCTI6IEFUQyBJUk1vZGUKKwogCXNuZC1hZDE4MTZhPQlbSFcsQUxTQV0KIAogCXNuZC1hZDE4NDg9CVtIVyxBTFNBXQpAQCAtMTc3NSwxMCArMTg2MSw2IEBACiAKIAl0aW1lCQlTaG93IHRpbWluZyBkYXRhIHByZWZpeGVkIHRvIGVhY2ggcHJpbnRrIG1lc3NhZ2UgbGluZQogCi0JY2xvY2tzb3VyY2U9CVtHRU5FUklDX1RJTUVdIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGNsb2Nrc291cmNlCi0JCQlPdmVycmlkZSB0aGUgZGVmYXVsdCBjbG9ja3NvdXJjZSBhbmQgdXNlIHRoZSBjbG9ja3NvdXJjZQotCQkJd2l0aCB0aGUgbmFtZSBzcGVjaWZpZWQuCi0KIAl0aXBhci50aW1lb3V0PQlbSFcsUFBUXQogCQkJU2V0IGNvbW11bmljYXRpb25zIHRpbWVvdXQgaW4gdGVudGhzIG9mIGEgc2Vjb25kCiAJCQkoZGVmYXVsdCAxNSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2twcm9iZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dAppbmRleCBkNzFmYWZmLi5kYTU0MDRhYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2twcm9iZXMudHh0CkBAIC0xNCw2ICsxNCw3IEBACiA4LiBLcHJvYmVzIEV4YW1wbGUKIDkuIEpwcm9iZXMgRXhhbXBsZQogMTAuIEtyZXRwcm9iZXMgRXhhbXBsZQorQXBwZW5kaXggQTogVGhlIGtwcm9iZXMgZGVidWdmcyBpbnRlcmZhY2UKIAogMS4gQ29uY2VwdHM6IEtwcm9iZXMsIEpwcm9iZXMsIFJldHVybiBQcm9iZXMKIApAQCAtMzQ5LDkgKzM1MCwxMiBAQAogCiBJZiB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgZnVuY3Rpb24gaXMgY2FsbGVkIGRvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIKIG9mIHRpbWVzIGl0IHJldHVybnMsIHJlZ2lzdGVyaW5nIGEgcmV0dXJuIHByb2JlIG9uIHRoYXQgZnVuY3Rpb24gbWF5Ci1wcm9kdWNlIHVuZGVzaXJhYmxlIHJlc3VsdHMuICBXZSBoYXZlIHRoZSBkb19leGl0KCkgY2FzZSBjb3ZlcmVkLgotZG9fZXhlY3ZlKCkgYW5kIGRvX2ZvcmsoKSBhcmUgbm90IGFuIGlzc3VlLiAgV2UncmUgdW5hd2FyZSBvZiBvdGhlcgotc3BlY2lmaWMgY2FzZXMgd2hlcmUgdGhpcyBjb3VsZCBiZSBhIHByb2JsZW0uCitwcm9kdWNlIHVuZGVzaXJhYmxlIHJlc3VsdHMuIEluIHN1Y2ggYSBjYXNlLCBhIGxpbmU6CitrcmV0cHJvYmUgQlVHITogUHJvY2Vzc2luZyBrcmV0cHJvYmUgZDAwMDAwMDAwMDA0MWFhOCBAIGMwMDAwMDAwMDAwNGY0OGMKK2dldHMgcHJpbnRlZC4gV2l0aCB0aGlzIGluZm9ybWF0aW9uLCBvbmUgd2lsbCBiZSBhYmxlIHRvIGNvcnJlbGF0ZSB0aGUKK2V4YWN0IGluc3RhbmNlIG9mIHRoZSBrcmV0cHJvYmUgdGhhdCBjYXVzZWQgdGhlIHByb2JsZW0uIFdlIGhhdmUgdGhlCitkb19leGl0KCkgY2FzZSBjb3ZlcmVkLiBkb19leGVjdmUoKSBhbmQgZG9fZm9yaygpIGFyZSBub3QgYW4gaXNzdWUuCitXZSdyZSB1bmF3YXJlIG9mIG90aGVyIHNwZWNpZmljIGNhc2VzIHdoZXJlIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLgogCiBJZiwgdXBvbiBlbnRyeSB0byBvciBleGl0IGZyb20gYSBmdW5jdGlvbiwgdGhlIENQVSBpcyBydW5uaW5nIG9uCiBhIHN0YWNrIG90aGVyIHRoYW4gdGhhdCBvZiB0aGUgY3VycmVudCB0YXNrLCByZWdpc3RlcmluZyBhIHJldHVybgpAQCAtNjE0LDMgKzYxOCwyNyBAQAogaHR0cDovL3d3dy5yZWRoYXQuY29tL21hZ2F6aW5lLzAwNW1hcjA1L2ZlYXR1cmVzL2twcm9iZXMvCiBodHRwOi8vd3d3LXVzZXJzLmNzLnVtbi5lZHUvfmJvdXRjaGVyL2twcm9iZXMvCiBodHRwOi8vd3d3LmxpbnV4c3ltcG9zaXVtLm9yZy8yMDA2L2xpbnV4c3ltcG9zaXVtX3Byb2N2Mi5wZGYgKHBhZ2VzIDEwMS0xMTUpCisKKworQXBwZW5kaXggQTogVGhlIGtwcm9iZXMgZGVidWdmcyBpbnRlcmZhY2UKKworV2l0aCByZWNlbnQga2VybmVscyAoPiAyLjYuMjApIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQga3Byb2JlcyBpcyB2aXNpYmxlCit1bmRlciB0aGUgL2RlYnVnL2twcm9iZXMvIGRpcmVjdG9yeSAoYXNzdW1pbmcgZGVidWdmcyBpcyBtb3VudGVkIGF0IC9kZWJ1ZykuCisKKy9kZWJ1Zy9rcHJvYmVzL2xpc3Q6IExpc3RzIGFsbCByZWdpc3RlcmVkIHByb2JlcyBvbiB0aGUgc3lzdGVtCisKK2MwMTVkNzFhICBrICB2ZnNfcmVhZCsweDAKK2MwMTFhMzE2ICBqICBkb19mb3JrKzB4MAorYzAzZGVkYzUgIHIgIHRjcF92NF9yY3YrMHgwCisKK1RoZSBmaXJzdCBjb2x1bW4gcHJvdmlkZXMgdGhlIGtlcm5lbCBhZGRyZXNzIHdoZXJlIHRoZSBwcm9iZSBpcyBpbnNlcnRlZC4KK1RoZSBzZWNvbmQgY29sdW1uIGlkZW50aWZpZXMgdGhlIHR5cGUgb2YgcHJvYmUgKGsgLSBrcHJvYmUsIHIgLSBrcmV0cHJvYmUKK2FuZCBqIC0ganByb2JlKSwgd2hpbGUgdGhlIHRoaXJkIGNvbHVtbiBzcGVjaWZpZXMgdGhlIHN5bWJvbCtvZmZzZXQgb2YKK3RoZSBwcm9iZS4gSWYgdGhlIHByb2JlZCBmdW5jdGlvbiBiZWxvbmdzIHRvIGEgbW9kdWxlLCB0aGUgbW9kdWxlIG5hbWUKK2lzIGFsc28gc3BlY2lmaWVkLgorCisvZGVidWcva3Byb2Jlcy9lbmFibGVkOiBUdXJuIGtwcm9iZXMgT04vT0ZGCisKK1Byb3ZpZGVzIGEga25vYiB0byBnbG9iYWxseSB0dXJuIHJlZ2lzdGVyZWQga3Byb2JlcyBPTiBvciBPRkYuIEJ5IGRlZmF1bHQsCithbGwga3Byb2JlcyBhcmUgZW5hYmxlZC4gQnkgZWNob2luZyAiMCIgdG8gdGhpcyBmaWxlLCBhbGwgcmVnaXN0ZXJlZCBwcm9iZXMKK3dpbGwgYmUgZGlzYXJtZWQsIHRpbGwgc3VjaCB0aW1lIGEgIjEiIGlzIGVjaG9lZCB0byB0aGlzIGZpbGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tyZWYudHh0IGIvRG9jdW1lbnRhdGlvbi9rcmVmLnR4dAppbmRleCA0MmZlMjg0Li5mMzhiNTlkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tyZWYudHh0CisrKyBiL0RvY3VtZW50YXRpb24va3JlZi50eHQKQEAgLTY3LDcgKzY3LDcgQEAKIAkuCiAJLiBkbyBzdHVmZiB3aXRoIGRhdGEgaGVyZQogCS4KLQlrcmVmX3B1dChkYXRhLCBkYXRhX3JlbGVhc2UpOworCWtyZWZfcHV0KCZkYXRhLT5yZWZjb3VudCwgZGF0YV9yZWxlYXNlKTsKIH0KIAogaW50IG15X2RhdGFfaGFuZGxlcih2b2lkKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3AtbW9kZS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dAppbmRleCA2ZjYzOWUzLi5lZWVkZWUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dApAQCAtMzMsNyArMzMsNyBAQAogbGFwdG9wIG1vZGUgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHN0YXJ0ZWQgd2hlbiB5b3UncmUgb24gYmF0dGVyeS4gRm9yCiB5b3VyIGNvbnZlbmllbmNlLCBhIHRhcmJhbGwgY29udGFpbmluZyBhbiBpbnN0YWxsZXIgY2FuIGJlIGRvd25sb2FkZWQgYXQ6CiAKLWh0dHA6Ly93d3cueHM0YWxsLm5sL35ic2Ftd2VsL2xhcHRvcF9tb2RlL3Rvb2xzLworaHR0cDovL3d3dy5zYW13ZWwudGsvbGFwdG9wX21vZGUvbGFwdG9wX21vZGUvCiAKIFRvIGNvbmZpZ3VyZSBsYXB0b3AgbW9kZSwgeW91IG5lZWQgdG8gZWRpdCB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCB3aGljaCBpcwogbG9jYXRlZCBpbiAvZXRjL2RlZmF1bHQvbGFwdG9wLW1vZGUgb24gRGViaWFuLWJhc2VkIHN5c3RlbXMsIG9yIGluCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xkbS50eHQgYi9Eb2N1bWVudGF0aW9uL2xkbS50eHQKaW5kZXggZTI2NmUxMS4uNzE4MDg1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sZG0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGRtLnR4dApAQCAtMiwxMCArMiwxMyBAQAogICAgICAgICAgICAgTERNIC0gTG9naWNhbCBEaXNrIE1hbmFnZXIgKER5bmFtaWMgRGlza3MpCiAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorT3JpZ2luYWxseSBXcml0dGVuIGJ5IEZsYXRDYXAgLSBSaWNoYXJkIFJ1c3NvbiA8bGRtQGZsYXRjYXAub3JnPi4KK0xhc3QgVXBkYXRlZCBieSBBbnRvbiBBbHRhcGFybWFrb3Ygb24gMzAgTWFyY2ggMjAwNyBmb3IgV2luZG93cyBWaXN0YS4KKwogT3ZlcnZpZXcKIC0tLS0tLS0tCiAKLVdpbmRvd3MgMjAwMCBhbmQgWFAgdXNlIGEgbmV3IHBhcnRpdGlvbmluZyBzY2hlbWUuICBJdCBpcyBhIGNvbXBsZXRlCitXaW5kb3dzIDIwMDAsIFhQLCBhbmQgVmlzdGEgdXNlIGEgbmV3IHBhcnRpdGlvbmluZyBzY2hlbWUuICBJdCBpcyBhIGNvbXBsZXRlCiByZXBsYWNlbWVudCBmb3IgdGhlIE1TRE9TIHN0eWxlIHBhcnRpdGlvbnMuICBJdCBzdG9yZXMgaXRzIGluZm9ybWF0aW9uIGluIGEKIDFNaUIgam91cm5hbGxlZCBkYXRhYmFzZSBhdCB0aGUgZW5kIG9mIHRoZSBwaHlzaWNhbCBkaXNrLiAgVGhlIHNpemUgb2YKIHBhcnRpdGlvbnMgaXMgbGltaXRlZCBvbmx5IGJ5IGRpc2sgc3BhY2UuICBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGl0aW9ucyBpcwpAQCAtMjMsNyArMjYsMTEgQEAKIGFzc2VtYmxlIGFueSBtdWx0aS1wYXJ0aXRpb24gdm9sdW1lcywgZS5nLiAgU3RyaXBlcywgUkFJRDUuCiAKIFRvIHByZXZlbnQgbGVnYWN5IGFwcGxpY2F0aW9ucyBmcm9tIHJlcGFydGl0aW9uaW5nIHRoZSBkaXNrLCB0aGUgTERNIGNyZWF0ZXMgYQotZHVtbXkgTVNET1MgcGFydGl0aW9uIGNvbnRhaW5pbmcgb25lIGRpc2stc2l6ZWQgcGFydGl0aW9uLgorZHVtbXkgTVNET1MgcGFydGl0aW9uIGNvbnRhaW5pbmcgb25lIGRpc2stc2l6ZWQgcGFydGl0aW9uLiAgVGhpcyBpcyB3aGF0IGlzCitzdXBwb3J0ZWQgd2l0aCB0aGUgTGludXggTERNIGRyaXZlci4KKworQSBuZXdlciBhcHByb2FjaCB0aGF0IGhhcyBiZWVuIGltcGxlbWVudGVkIHdpdGggVmlzdGEgaXMgdG8gcHV0IExETSBvbiB0b3Agb2YgYQorR1BUIGxhYmVsIGRpc2suICBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIExpbnV4IExETSBkcml2ZXIgeWV0LgogCiAKIEV4YW1wbGUKQEAgLTg4LDEzICs5NSwxMyBAQAogTW9yZSBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlcmUgaXMgYW4gT3ZlcnZpZXcgb2YgdGhlIExETSBvbmxpbmUgdG9nZXRoZXIgd2l0aCBjb21wbGV0ZSBUZWNobmljYWwKLURvY3VtZW50YXRpb24uICBJdCBjYW4gYWxzbyBiZSBkb3dubG9hZGVkIGluIGh0bWwuCitUaGVyZSBpcyBhbiBPdmVydmlldyBvZiB0aGUgTERNIHRvZ2V0aGVyIHdpdGggY29tcGxldGUgVGVjaG5pY2FsIERvY3VtZW50YXRpb24uCitJdCBpcyBhdmFpbGFibGUgZm9yIGRvd25sb2FkLgogCi0gIGh0dHA6Ly9saW51eC1udGZzLnNvdXJjZWZvcmdlLm5ldC9sZG0vaW5kZXguaHRtbAotICBodHRwOi8vbGludXgtbnRmcy5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWRzLmh0bWwKKyAgaHR0cDovL3d3dy5saW51eC1udGZzLm9yZy9jb250ZW50L3ZpZXcvMTkvMzcvCiAKLUlmIHlvdSBoYXZlIGFueSBMRE0gcXVlc3Rpb25zIHRoYXQgYXJlbid0IGFuc3dlcmVkIG9uIHRoZSB3ZWJzaXRlLCBlbWFpbCBtZS4KK0lmIHlvdSBoYXZlIGFueSBMRE0gcXVlc3Rpb25zIHRoYXQgYXJlbid0IGFuc3dlcmVkIGluIHRoZSBkb2N1bWVudGF0aW9uLCBlbWFpbAorbWUuCiAKIENoZWVycywKICAgICBGbGF0Q2FwIC0gUmljaGFyZCBSdXNzb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbTY4ay9SRUFETUUuYnVkZGhhIGIvRG9jdW1lbnRhdGlvbi9tNjhrL1JFQURNRS5idWRkaGEKaW5kZXggZWY0ODRhNy4uM2VhOTgyNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tNjhrL1JFQURNRS5idWRkaGEKKysrIGIvRG9jdW1lbnRhdGlvbi9tNjhrL1JFQURNRS5idWRkaGEKQEAgLTIwNCw3ICsyMDQsNyBAQAogdGhlICB0aGlyZCAgSURFICBwb3J0ICBhcmUgIGdvaW5nIGludG8gZGF0YSdzIE5pcndhbmEgb24gdGhlCiBCdWRkaGEuCiAKLQkJCSAgICBKZW5zIFNjaPZuZmVsZCBmZWJydWFyeSAxOXRoLCAxOTk3CisJCQkgICAgSmVucyBTY2jDtm5mZWxkIGZlYnJ1YXJ5IDE5dGgsIDE5OTcKIAkJCQkJdXBkYXRlZCBtYXkgMjd0aCwgMTk5NwogCQkJICAgICBlTWFpbDogc3lzb3BAbm9zdGxnaWMudG5nLm9jaGUuZGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYWdpYy1udW1iZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9tYWdpYy1udW1iZXIudHh0CmluZGV4IDBlNzQwYzguLmJkNDUwZTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWFnaWMtbnVtYmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21hZ2ljLW51bWJlci50eHQKQEAgLTEyOSw3ICsxMjksNyBAQAogR0RBX01BR0lDICAgICAgICAgICAgIDB4NTg0NjQ1NTIgIGdkYSAgICAgICAgICAgICAgIGluY2x1ZGUvYXNtLW1pcHM2NC9zbi9nZGEuaAogUkVEX01BR0lDMSAgICAgICAgICAgIDB4NWEyY2YwNzEgIChhbnkpICAgICAgICAgICAgIG1tL3NsYWIuYwogU1RMX1BPUlRNQUdJQyAgICAgICAgIDB4NWE3MTgyYzkgIHN0bHBvcnQgICAgICAgICAgIGluY2x1ZGUvbGludXgvc3RhbGxpb24uaAotRUVQUk9NX01BR0lDX1ZBTFVFICAgIDBYNWFiNDc4ZDIgIGxhbmFpX2RldiAgICAgICAgIGRyaXZlcnMvYXRtL2xhbmFpLmMKK0VFUFJPTV9NQUdJQ19WQUxVRSAgICAweDVhYjQ3OGQyICBsYW5haV9kZXYgICAgICAgICBkcml2ZXJzL2F0bS9sYW5haS5jCiBIRExDRFJWX01BR0lDICAgICAgICAgMHg1YWM2ZTc3OCAgaGRsY2Rydl9zdGF0ZSAgICAgaW5jbHVkZS9saW51eC9oZGxjZHJ2LmgKIEVQQ0FfTUFHSUMgICAgICAgICAgICAweDVjNmRmMTA0ICBjaGFubmVsICAgICAgICAgICBpbmNsdWRlL2xpbnV4L2VwY2EuaAogUENYWF9NQUdJQyAgICAgICAgICAgIDB4NWM2ZGYxMDQgIGNoYW5uZWwgICAgICAgICAgIGRyaXZlcnMvY2hhci9wY3h4LmgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWQudHh0IGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKaW5kZXggMjIwMmY1ZC4uNTgxODYyOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKQEAgLTE3OCw2ICsxNzgsMjEgQEAKICAgICAgVGhlIHNpemUgc2hvdWxkIGJlIGF0IGxlYXN0IFBBR0VfU0laRSAoNGspIGFuZCBzaG91bGQgYmUgYSBwb3dlcgogICAgICBvZiAyLiAgVGhpcyBjYW4gb25seSBiZSBzZXQgd2hpbGUgYXNzZW1ibGluZyBhbiBhcnJheQogCisgIGxheW91dAorICAgICBUaGUgImxheW91dCIgZm9yIHRoZSBhcnJheSBmb3IgdGhlIHBhcnRpY3VsYXIgbGV2ZWwuICBUaGlzIGlzCisgICAgIHNpbXBseSBhIG51bWJlciB0aGF0IGlzIGludGVycHJldHRlZCBkaWZmZXJlbnRseSBieSBkaWZmZXJlbnQKKyAgICAgbGV2ZWxzLiAgSXQgY2FuIGJlIHdyaXR0ZW4gd2hpbGUgYXNzZW1ibGluZyBhbiBhcnJheS4KKworICByZXNoYXBlX3Bvc2l0aW9uCisgICAgIFRoaXMgaXMgZWl0aGVyICJub25lIiBvciBhIHNlY3RvciBudW1iZXIgd2l0aGluIHRoZSBkZXZpY2VzIG9mCisgICAgIHRoZSBhcnJheSB3aGVyZSAicmVzaGFwZSIgaXMgdXAgdG8uICBJZiB0aGlzIGlzIHNldCwgdGhlIHRocmVlCisgICAgIGF0dHJpYnV0ZXMgbWVudGlvbmVkIGFib3ZlIChyYWlkX2Rpc2tzLCBjaHVua19zaXplLCBsYXlvdXQpIGNhbgorICAgICBwb3RlbnRpYWxseSBoYXZlIDIgdmFsdWVzLCBhbiBvbGQgYW5kIGEgbmV3IHZhbHVlLiAgSWYgdGhlc2UKKyAgICAgdmFsdWVzIGRpZmZlciwgcmVhZGluZyB0aGUgYXR0cmlidXRlIHJldHVybnMKKyAgICAgICAgbmV3IChvbGQpCisgICAgIGFuZCB3cml0aW5nIHdpbGwgZWZmZWN0IHRoZSAnbmV3JyB2YWx1ZSwgbGVhdmluZyB0aGUgJ29sZCcKKyAgICAgdW5jaGFuZ2VkLgorCiAgIGNvbXBvbmVudF9zaXplCiAgICAgIEZvciBhcnJheXMgd2l0aCBkYXRhIHJlZHVuZGFuY3kgKGkuZS4gbm90IHJhaWQwLCBsaW5lYXIsIGZhdWx0eSwKICAgICAgbXVsdGlwYXRoKSwgYWxsIGNvbXBvbmVudHMgbXVzdCBiZSB0aGUgc2FtZSBzaXplIC0gb3IgYXQgbGVhc3QKQEAgLTE5MywxMSArMjA4LDYgQEAKICAgICAgMS4yIChuZXdlciBmb3JtYXQgaW4gdmFyeWluZyBsb2NhdGlvbnMpIG9yICJub25lIiBpbmRpY2F0aW5nIHRoYXQKICAgICAgdGhlIGtlcm5lbCBpc24ndCBtYW5hZ2luZyBtZXRhZGF0YSBhdCBhbGwuCiAKLSAgbGF5b3V0Ci0gICAgIFRoZSAibGF5b3V0IiBmb3IgdGhlIGFycmF5IGZvciB0aGUgcGFydGljdWxhciBsZXZlbC4gIFRoaXMgaXMKLSAgICAgc2ltcGx5IGEgbnVtYmVyIHRoYXQgaXMgaW50ZXJwcmV0dGVkIGRpZmZlcmVudGx5IGJ5IGRpZmZlcmVudAotICAgICBsZXZlbHMuICBJdCBjYW4gYmUgd3JpdHRlbiB3aGlsZSBhc3NlbWJsaW5nIGFuIGFycmF5LgotCiAgIHJlc3luY19zdGFydAogICAgICBUaGUgcG9pbnQgYXQgd2hpY2ggcmVzeW5jIHNob3VsZCBzdGFydC4gIElmIG5vIHJlc3luYyBpcyBuZWVkZWQsCiAgICAgIHRoaXMgd2lsbCBiZSBhIHZlcnkgbGFyZ2UgbnVtYmVyLiAgQXQgYXJyYXkgY3JlYXRpb24gaXQgd2lsbApAQCAtMjU5LDI5ICsyNjksNiBAQAogICAgICAgICAgbGlrZSBhY3RpdmUsIGJ1dCBubyB3cml0ZXMgaGF2ZSBiZWVuIHNlZW4gZm9yIGEgd2hpbGUgKHNhZmVfbW9kZV9kZWxheSkuCiAKIAotICAgc3luY19zcGVlZF9taW4KLSAgIHN5bmNfc3BlZWRfbWF4Ci0gICAgIFRoaXMgYXJlIHNpbWlsYXIgdG8gL3Byb2Mvc3lzL2Rldi9yYWlkL3NwZWVkX2xpbWl0X3ttaW4sbWF4fQotICAgICBob3dldmVyIHRoZXkgb25seSBhcHBseSB0byB0aGUgcGFydGljdWxhciBhcnJheS4KLSAgICAgSWYgbm8gdmFsdWUgaGFzIGJlZW4gd3JpdHRlbiB0byB0aGVzZSwgb2YgaWYgdGhlIHdvcmQgJ3N5c3RlbScKLSAgICAgaXMgd3JpdHRlbiwgdGhlbiB0aGUgc3lzdGVtLXdpZGUgdmFsdWUgaXMgdXNlZC4gIElmIGEgdmFsdWUsCi0gICAgIGluIGtpYmlieXRlcy1wZXItc2Vjb25kIGlzIHdyaXR0ZW4sIHRoZW4gaXQgaXMgdXNlZC4KLSAgICAgV2hlbiB0aGUgZmlsZXMgYXJlIHJlYWQsIHRoZXkgc2hvdyB0aGUgY3VycmVudGx5IGFjdGl2ZSB2YWx1ZQotICAgICBmb2xsb3dlZCBieSAiKGxvY2FsKSIgb3IgIihzeXN0ZW0pIiBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBpcwotICAgICBhIGxvY2FsbHkgc2V0IG9yIHN5c3RlbS13aWRlIHZhbHVlLgotCi0gICBzeW5jX2NvbXBsZXRlZAotICAgICBUaGlzIHNob3dzIHRoZSBudW1iZXIgb2Ygc2VjdG9ycyB0aGF0IGhhdmUgYmVlbiBjb21wbGV0ZWQgb2YKLSAgICAgd2hhdGV2ZXIgdGhlIGN1cnJlbnQgc3luY19hY3Rpb24gaXMsIGZvbGxvd2VkIGJ5IHRoZSBudW1iZXIgb2YKLSAgICAgc2VjdG9ycyBpbiB0b3RhbCB0aGF0IGNvdWxkIG5lZWQgdG8gYmUgcHJvY2Vzc2VkLiAgVGhlIHR3bwotICAgICBudW1iZXJzIGFyZSBzZXBhcmF0ZWQgYnkgYSAnLycgIHRodXMgZWZmZWN0aXZlbHkgc2hvd2luZyBvbmUKLSAgICAgdmFsdWUsIGEgZnJhY3Rpb24gb2YgdGhlIHByb2Nlc3MgdGhhdCBpcyBjb21wbGV0ZS4KLQotICAgc3luY19zcGVlZAotICAgICBUaGlzIHNob3dzIHRoZSBjdXJyZW50IGFjdHVhbCBzcGVlZCwgaW4gSy9zZWMsIG9mIHRoZSBjdXJyZW50Ci0gICAgIHN5bmNfYWN0aW9uLiAgSXQgaXMgYXZlcmFnZWQgb3ZlciB0aGUgbGFzdCAzMCBzZWNvbmRzLgotCi0KIEFzIGNvbXBvbmVudCBkZXZpY2VzIGFyZSBhZGRlZCB0byBhbiBtZCBhcnJheSwgdGhleSBhcHBlYXIgaW4gdGhlICdtZCcKIGRpcmVjdG9yeSBhcyBuZXcgZGlyZWN0b3JpZXMgbmFtZWQKICAgICAgIGRldi1YWFgKQEAgLTQxMiw2ICszOTksMzUgQEAKICAgICAgIE5vdGUgdGhhdCB0aGUgbnVtYmVycyBhcmUgJ2JpdCcgbnVtYmVycywgbm90ICdibG9jaycgbnVtYmVycy4KICAgICAgIFRoZXkgc2hvdWxkIGJlIHNjYWxlZCBieSB0aGUgYml0bWFwX2NodW5rc2l6ZS4KIAorICAgc3luY19zcGVlZF9taW4KKyAgIHN5bmNfc3BlZWRfbWF4CisgICAgIFRoaXMgYXJlIHNpbWlsYXIgdG8gL3Byb2Mvc3lzL2Rldi9yYWlkL3NwZWVkX2xpbWl0X3ttaW4sbWF4fQorICAgICBob3dldmVyIHRoZXkgb25seSBhcHBseSB0byB0aGUgcGFydGljdWxhciBhcnJheS4KKyAgICAgSWYgbm8gdmFsdWUgaGFzIGJlZW4gd3JpdHRlbiB0byB0aGVzZSwgb2YgaWYgdGhlIHdvcmQgJ3N5c3RlbScKKyAgICAgaXMgd3JpdHRlbiwgdGhlbiB0aGUgc3lzdGVtLXdpZGUgdmFsdWUgaXMgdXNlZC4gIElmIGEgdmFsdWUsCisgICAgIGluIGtpYmlieXRlcy1wZXItc2Vjb25kIGlzIHdyaXR0ZW4sIHRoZW4gaXQgaXMgdXNlZC4KKyAgICAgV2hlbiB0aGUgZmlsZXMgYXJlIHJlYWQsIHRoZXkgc2hvdyB0aGUgY3VycmVudGx5IGFjdGl2ZSB2YWx1ZQorICAgICBmb2xsb3dlZCBieSAiKGxvY2FsKSIgb3IgIihzeXN0ZW0pIiBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBpcworICAgICBhIGxvY2FsbHkgc2V0IG9yIHN5c3RlbS13aWRlIHZhbHVlLgorCisgICBzeW5jX2NvbXBsZXRlZAorICAgICBUaGlzIHNob3dzIHRoZSBudW1iZXIgb2Ygc2VjdG9ycyB0aGF0IGhhdmUgYmVlbiBjb21wbGV0ZWQgb2YKKyAgICAgd2hhdGV2ZXIgdGhlIGN1cnJlbnQgc3luY19hY3Rpb24gaXMsIGZvbGxvd2VkIGJ5IHRoZSBudW1iZXIgb2YKKyAgICAgc2VjdG9ycyBpbiB0b3RhbCB0aGF0IGNvdWxkIG5lZWQgdG8gYmUgcHJvY2Vzc2VkLiAgVGhlIHR3bworICAgICBudW1iZXJzIGFyZSBzZXBhcmF0ZWQgYnkgYSAnLycgIHRodXMgZWZmZWN0aXZlbHkgc2hvd2luZyBvbmUKKyAgICAgdmFsdWUsIGEgZnJhY3Rpb24gb2YgdGhlIHByb2Nlc3MgdGhhdCBpcyBjb21wbGV0ZS4KKworICAgc3luY19zcGVlZAorICAgICBUaGlzIHNob3dzIHRoZSBjdXJyZW50IGFjdHVhbCBzcGVlZCwgaW4gSy9zZWMsIG9mIHRoZSBjdXJyZW50CisgICAgIHN5bmNfYWN0aW9uLiAgSXQgaXMgYXZlcmFnZWQgb3ZlciB0aGUgbGFzdCAzMCBzZWNvbmRzLgorCisgICBzdXNwZW5kX2xvCisgICBzdXNwZW5kX2hpCisgICAgIFRoZSB0d28gdmFsdWVzLCBnaXZlbiBhcyBudW1iZXJzIG9mIHNlY3RvcnMsIGluZGljYXRlIGEgcmFuZ2UKKyAgICAgd2l0aGluIHRoZSBhcnJheSB3aGVyZSBJTyB3aWxsIGJlIGJsb2NrZWQuICBUaGlzIGlzIGN1cnJlbnRseQorICAgICBvbmx5IHN1cHBvcnRlZCBmb3IgcmFpZDQvNS82LgorCisKIEVhY2ggYWN0aXZlIG1kIGRldmljZSBtYXkgYWxzbyBoYXZlIGF0dHJpYnV0ZXMgc3BlY2lmaWMgdG8gdGhlCiBwZXJzb25hbGl0eSBtb2R1bGUgdGhhdCBtYW5hZ2VzIGl0LgogVGhlc2UgYXJlIHNwZWNpZmljIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kdWxlIGFuZCBjb3VsZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CmluZGV4IDU4NDA4ZGQuLjY1MDY1N2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKQEAgLTI0LDcgKzI0LDcgQEAKICAoKikgRXhwbGljaXQga2VybmVsIGJhcnJpZXJzLgogCiAgICAgIC0gQ29tcGlsZXIgYmFycmllci4KLSAgICAgLSBUaGUgQ1BVIG1lbW9yeSBiYXJyaWVycy4KKyAgICAgLSBDUFUgbWVtb3J5IGJhcnJpZXJzLgogICAgICAtIE1NSU8gd3JpdGUgYmFycmllci4KIAogICgqKSBJbXBsaWNpdCBrZXJuZWwgbWVtb3J5IGJhcnJpZXJzLgpAQCAtMjY1LDcgKzI2NSw3IEBACiBvcmRlcmluZyBvdmVyIHRoZSBtZW1vcnkgb3BlcmF0aW9ucyBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgYmFycmllci4KIAogU3VjaCBlbmZvcmNlbWVudCBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgQ1BVcyBhbmQgb3RoZXIgZGV2aWNlcyBpbiBhIHN5c3RlbQotY2FuIHVzZSBhIHZhcmlldHkgb2YgdHJpY2tzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgLSBpbmNsdWRpbmcgcmVvcmRlcmluZywKK2NhbiB1c2UgYSB2YXJpZXR5IG9mIHRyaWNrcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLCBpbmNsdWRpbmcgcmVvcmRlcmluZywKIGRlZmVycmFsIGFuZCBjb21iaW5hdGlvbiBvZiBtZW1vcnkgb3BlcmF0aW9uczsgc3BlY3VsYXRpdmUgbG9hZHM7IHNwZWN1bGF0aXZlCiBicmFuY2ggcHJlZGljdGlvbiBhbmQgdmFyaW91cyB0eXBlcyBvZiBjYWNoaW5nLiAgTWVtb3J5IGJhcnJpZXJzIGFyZSB1c2VkIHRvCiBvdmVycmlkZSBvciBzdXBwcmVzcyB0aGVzZSB0cmlja3MsIGFsbG93aW5nIHRoZSBjb2RlIHRvIHNhbmVseSBjb250cm9sIHRoZQpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJKFEgPT0gJkEpIGltcGxpZXMgKEQgPT0gMSkKIAkoUSA9PSAmQikgaW1wbGllcyAoRCA9PSA0KQogCi1CdXQhIENQVSAyJ3MgcGVyY2VwdGlvbiBvZiBQIG1heSBiZSB1cGRhdGVkIF9iZWZvcmVfIGl0cyBwZXJjZXB0aW9uIG9mIEIsIHRodXMKK0J1dCEgIENQVSAyJ3MgcGVyY2VwdGlvbiBvZiBQIG1heSBiZSB1cGRhdGVkIF9iZWZvcmVfIGl0cyBwZXJjZXB0aW9uIG9mIEIsIHRodXMKIGxlYWRpbmcgdG8gdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CiAKIAkoUSA9PSAmQikgYW5kIChEID09IDIpID8/Pz8KQEAgLTU3Myw3ICs1NzMsNyBAQAogdGhlICJ3ZWFrZXIiIHR5cGUuCiAKIFshXSBOb3RlIHRoYXQgdGhlIHN0b3JlcyBiZWZvcmUgdGhlIHdyaXRlIGJhcnJpZXIgd291bGQgbm9ybWFsbHkgYmUgZXhwZWN0ZWQgdG8KLW1hdGNoIHRoZSBsb2FkcyBhZnRlciB0aGUgcmVhZCBiYXJyaWVyIG9yIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyLCBhbmQgdmljZQorbWF0Y2ggdGhlIGxvYWRzIGFmdGVyIHRoZSByZWFkIGJhcnJpZXIgb3IgdGhlIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyLCBhbmQgdmljZQogdmVyc2E6CiAKIAlDUFUgMSAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVSAyCkBAIC01ODgsNyArNTg4LDcgQEAKIEVYQU1QTEVTIE9GIE1FTU9SWSBCQVJSSUVSIFNFUVVFTkNFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUZpcnN0bHksIHdyaXRlIGJhcnJpZXJzIGFjdCBhcyBhIHBhcnRpYWwgb3JkZXJpbmdzIG9uIHN0b3JlIG9wZXJhdGlvbnMuCitGaXJzdGx5LCB3cml0ZSBiYXJyaWVycyBhY3QgYXMgcGFydGlhbCBvcmRlcmluZ3Mgb24gc3RvcmUgb3BlcmF0aW9ucy4KIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgZXZlbnRzOgogCiAJQ1BVIDEKQEAgLTYwOCwxNSArNjA4LDE1IEBACiAJKy0tLS0tLS0rICAgICAgIDogICAgICA6CiAJfCAgICAgICB8ICAgICAgICstLS0tLS0rCiAJfCAgICAgICB8LS0tLS0tPnwgQz0zICB8ICAgICB9ICAgICAvXAotCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyAgICAgfS0tLS0tICBcICAtLS0tLT4gRXZlbnRzIHBlcmNlcHRpYmxlCi0JfCAgICAgICB8ICA6ICAgIHwgQT0xICB8ICAgICB9ICAgICAgICBcLyAgICAgICB0byByZXN0IG9mIHN5c3RlbQorCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyAgICAgfS0tLS0tICBcICAtLS0tLT4gRXZlbnRzIHBlcmNlcHRpYmxlIHRvCisJfCAgICAgICB8ICA6ICAgIHwgQT0xICB8ICAgICB9ICAgICAgICBcLyAgICAgICB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtCiAJfCAgICAgICB8ICA6ICAgICstLS0tLS0rICAgICB9CiAJfCBDUFUgMSB8ICA6ICAgIHwgQj0yICB8ICAgICB9CiAJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICB9CiAJfCAgICAgICB8ICAgd3d3d3d3d3d3d3d3d3d3dyB9ICAgPC0tLSBBdCB0aGlzIHBvaW50IHRoZSB3cml0ZSBiYXJyaWVyCiAJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICB9ICAgICAgICByZXF1aXJlcyBhbGwgc3RvcmVzIHByaW9yIHRvIHRoZQogCXwgICAgICAgfCAgOiAgICB8IEU9NSAgfCAgICAgfSAgICAgICAgYmFycmllciB0byBiZSBjb21taXR0ZWQgYmVmb3JlCi0JfCAgICAgICB8ICA6ICAgICstLS0tLS0rICAgICB9ICAgICAgICBmdXJ0aGVyIHN0b3JlcyBtYXkgYmUgdGFrZSBwbGFjZS4KKwl8ICAgICAgIHwgIDogICAgKy0tLS0tLSsgICAgIH0gICAgICAgIGZ1cnRoZXIgc3RvcmVzIG1heSB0YWtlIHBsYWNlCiAJfCAgICAgICB8LS0tLS0tPnwgRD00ICB8ICAgICB9CiAJfCAgICAgICB8ICAgICAgICstLS0tLS0rCiAJKy0tLS0tLS0rICAgICAgIDogICAgICA6CkBAIC02MjYsNyArNjI2LDcgQEAKIAkgICAgICAgICAgICAgICAgICAgVgogCiAKLVNlY29uZGx5LCBkYXRhIGRlcGVuZGVuY3kgYmFycmllcnMgYWN0IGFzIGEgcGFydGlhbCBvcmRlcmluZ3Mgb24gZGF0YS1kZXBlbmRlbnQKK1NlY29uZGx5LCBkYXRhIGRlcGVuZGVuY3kgYmFycmllcnMgYWN0IGFzIHBhcnRpYWwgb3JkZXJpbmdzIG9uIGRhdGEtZGVwZW5kZW50CiBsb2Fkcy4gIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgZXZlbnRzOgogCiAJQ1BVIDEJCQlDUFUgMgpAQCAtOTc1LDcgKzk3NSw3IEBACiAKIAliYXJyaWVyKCk7CiAKLVRoaXMgYSBnZW5lcmFsIGJhcnJpZXIgLSBsZXNzZXIgdmFyaWV0aWVzIG9mIGNvbXBpbGVyIGJhcnJpZXIgZG8gbm90IGV4aXN0LgorVGhpcyBpcyBhIGdlbmVyYWwgYmFycmllciAtIGxlc3NlciB2YXJpZXRpZXMgb2YgY29tcGlsZXIgYmFycmllciBkbyBub3QgZXhpc3QuCiAKIFRoZSBjb21waWxlciBiYXJyaWVyIGhhcyBubyBkaXJlY3QgZWZmZWN0IG9uIHRoZSBDUFUsIHdoaWNoIG1heSB0aGVuIHJlb3JkZXIKIHRoaW5ncyBob3dldmVyIGl0IHdpc2hlcy4KQEAgLTk5Nyw3ICs5OTcsNyBAQAogQWxsIENQVSBtZW1vcnkgYmFycmllcnMgdW5jb25kaXRpb25hbGx5IGltcGx5IGNvbXBpbGVyIGJhcnJpZXJzLgogCiBTTVAgbWVtb3J5IGJhcnJpZXJzIGFyZSByZWR1Y2VkIHRvIGNvbXBpbGVyIGJhcnJpZXJzIG9uIHVuaXByb2Nlc3NvciBjb21waWxlZAotc3lzdGVtcyBiZWNhdXNlIGl0IGlzIGFzc3VtZWQgdGhhdCBhIENQVSB3aWxsIGJlIGFwcGVhciB0byBiZSBzZWxmLWNvbnNpc3RlbnQsCitzeXN0ZW1zIGJlY2F1c2UgaXQgaXMgYXNzdW1lZCB0aGF0IGEgQ1BVIHdpbGwgYXBwZWFyIHRvIGJlIHNlbGYtY29uc2lzdGVudCwKIGFuZCB3aWxsIG9yZGVyIG92ZXJsYXBwaW5nIGFjY2Vzc2VzIGNvcnJlY3RseSB3aXRoIHJlc3BlY3QgdG8gaXRzZWxmLgogCiBbIV0gTm90ZSB0aGF0IFNNUCBtZW1vcnkgYmFycmllcnMgX211c3RfIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3JkZXJpbmcgb2YKQEAgLTExNDYsOSArMTE0Niw5IEBACiBUaGVyZWZvcmUsIGZyb20gKDEpLCAoMikgYW5kICg0KSBhbiBVTkxPQ0sgZm9sbG93ZWQgYnkgYW4gdW5jb25kaXRpb25hbCBMT0NLIGlzCiBlcXVpdmFsZW50IHRvIGEgZnVsbCBiYXJyaWVyLCBidXQgYSBMT0NLIGZvbGxvd2VkIGJ5IGFuIFVOTE9DSyBpcyBub3QuCiAKLVshXSBOb3RlOiBvbmUgb2YgdGhlIGNvbnNlcXVlbmNlIG9mIExPQ0tzIGFuZCBVTkxPQ0tzIGJlaW5nIG9ubHkgb25lLXdheQotICAgIGJhcnJpZXJzIGlzIHRoYXQgdGhlIGVmZmVjdHMgaW5zdHJ1Y3Rpb25zIG91dHNpZGUgb2YgYSBjcml0aWNhbCBzZWN0aW9uIG1heQotICAgIHNlZXAgaW50byB0aGUgaW5zaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLgorWyFdIE5vdGU6IG9uZSBvZiB0aGUgY29uc2VxdWVuY2VzIG9mIExPQ0tzIGFuZCBVTkxPQ0tzIGJlaW5nIG9ubHkgb25lLXdheQorICAgIGJhcnJpZXJzIGlzIHRoYXQgdGhlIGVmZmVjdHMgb2YgaW5zdHJ1Y3Rpb25zIG91dHNpZGUgb2YgYSBjcml0aWNhbCBzZWN0aW9uCisgICAgbWF5IHNlZXAgaW50byB0aGUgaW5zaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLgogCiBBIExPQ0sgZm9sbG93ZWQgYnkgYW4gVU5MT0NLIG1heSBub3QgYmUgYXNzdW1lZCB0byBiZSBmdWxsIG1lbW9yeSBiYXJyaWVyCiBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIGZvciBhbiBhY2Nlc3MgcHJlY2VkaW5nIHRoZSBMT0NLIHRvIGhhcHBlbiBhZnRlciB0aGUKQEAgLTEyMzksNyArMTIzOSw3IEBACiAJVU5MT0NLIE0JCQlVTkxPQ0sgUQogCSpEID0gZDsJCQkJKkggPSBoOwogCi1UaGVuIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSBhcyB0byB3aGF0IG9yZGVyIENQVSAjMyB3aWxsIHNlZSB0aGUgYWNjZXNzZXMgdG8gKkEKK1RoZW4gdGhlcmUgaXMgbm8gZ3VhcmFudGVlIGFzIHRvIHdoYXQgb3JkZXIgQ1BVIDMgd2lsbCBzZWUgdGhlIGFjY2Vzc2VzIHRvICpBCiB0aHJvdWdoICpIIG9jY3VyIGluLCBvdGhlciB0aGFuIHRoZSBjb25zdHJhaW50cyBpbXBvc2VkIGJ5IHRoZSBzZXBhcmF0ZSBsb2Nrcwogb24gdGhlIHNlcGFyYXRlIENQVXMuIEl0IG1pZ2h0LCBmb3IgZXhhbXBsZSwgc2VlOgogCkBAIC0xMjY5LDEyICsxMjY5LDEyIEBACiAJCQkJCVVOTE9DSyBNCVsyXQogCQkJCQkqSCA9IGg7CiAKLUNQVSAjMyBtaWdodCBzZWU6CitDUFUgMyBtaWdodCBzZWU6CiAKIAkqRSwgTE9DSyBNIFsxXSwgKkMsICpCLCAqQSwgVU5MT0NLIE0gWzFdLAogCQlMT0NLIE0gWzJdLCAqSCwgKkYsICpHLCBVTkxPQ0sgTSBbMl0sICpECiAKLUJ1dCBhc3N1bWluZyBDUFUgIzEgZ2V0cyB0aGUgbG9jayBmaXJzdCwgaXQgd29uJ3Qgc2VlIGFueSBvZjoKK0J1dCBhc3N1bWluZyBDUFUgMSBnZXRzIHRoZSBsb2NrIGZpcnN0LCBDUFUgMyB3b24ndCBzZWUgYW55IG9mOgogCiAJKkIsICpDLCAqRCwgKkYsICpHIG9yICpIIHByZWNlZGluZyBMT0NLIE0gWzFdCiAJKkEsICpCIG9yICpDIGZvbGxvd2luZyBVTkxPQ0sgTSBbMV0KQEAgLTEzMjcsMTIgKzEzMjcsMTIgQEAKIAkJCQkJbW1pb3diKCk7CiAJCQkJCXNwaW5fdW5sb2NrKFEpOwogCi10aGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHR3byBzdG9yZXMgaXNzdWVkIG9uIENQVSAjMSBhcHBlYXIgYXQgdGhlIFBDSSBicmlkZ2UKLWJlZm9yZSBlaXRoZXIgb2YgdGhlIHN0b3JlcyBpc3N1ZWQgb24gQ1BVICMyLgordGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSB0d28gc3RvcmVzIGlzc3VlZCBvbiBDUFUgMSBhcHBlYXIgYXQgdGhlIFBDSSBicmlkZ2UKK2JlZm9yZSBlaXRoZXIgb2YgdGhlIHN0b3JlcyBpc3N1ZWQgb24gQ1BVIDIuCiAKIAotRnVydGhlcm1vcmUsIGZvbGxvd2luZyBhIHN0b3JlIGJ5IGEgbG9hZCB0byB0aGUgc2FtZSBkZXZpY2Ugb2J2aWF0ZXMgdGhlIG5lZWQKLWZvciBhbiBtbWlvd2IoKSwgYmVjYXVzZSB0aGUgbG9hZCBmb3JjZXMgdGhlIHN0b3JlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aGUgbG9hZAorRnVydGhlcm1vcmUsIGZvbGxvd2luZyBhIHN0b3JlIGJ5IGEgbG9hZCBmcm9tIHRoZSBzYW1lIGRldmljZSBvYnZpYXRlcyB0aGUgbmVlZAorZm9yIHRoZSBtbWlvd2IoKSwgYmVjYXVzZSB0aGUgbG9hZCBmb3JjZXMgdGhlIHN0b3JlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aGUgbG9hZAogaXMgcGVyZm9ybWVkOgogCiAJQ1BVIDEJCQkJQ1BVIDIKQEAgLTEzNjMsNyArMTM2Myw3IEBACiAKICAoKikgQXRvbWljIG9wZXJhdGlvbnMuCiAKLSAoKikgQWNjZXNzaW5nIGRldmljZXMgKEkvTykuCisgKCopIEFjY2Vzc2luZyBkZXZpY2VzLgogCiAgKCopIEludGVycnVwdHMuCiAKQEAgLTEzOTksNyArMTM5OSw3IEBACiAgKDEpIHJlYWQgdGhlIG5leHQgcG9pbnRlciBmcm9tIHRoaXMgd2FpdGVyJ3MgcmVjb3JkIHRvIGtub3cgYXMgdG8gd2hlcmUgdGhlCiAgICAgIG5leHQgd2FpdGVyIHJlY29yZCBpczsKIAotICg0KSByZWFkIHRoZSBwb2ludGVyIHRvIHRoZSB3YWl0ZXIncyB0YXNrIHN0cnVjdHVyZTsKKyAoMikgcmVhZCB0aGUgcG9pbnRlciB0byB0aGUgd2FpdGVyJ3MgdGFzayBzdHJ1Y3R1cmU7CiAKICAoMykgY2xlYXIgdGhlIHRhc2sgcG9pbnRlciB0byB0ZWxsIHRoZSB3YWl0ZXIgaXQgaGFzIGJlZW4gZ2l2ZW4gdGhlIHNlbWFwaG9yZTsKIApAQCAtMTQwNyw3ICsxNDA3LDcgQEAKIAogICg1KSByZWxlYXNlIHRoZSByZWZlcmVuY2UgaGVsZCBvbiB0aGUgd2FpdGVyJ3MgdGFzayBzdHJ1Y3QuCiAKLUluIG90aGVyd29yZHMsIGl0IGhhcyB0byBwZXJmb3JtIHRoaXMgc2VxdWVuY2Ugb2YgZXZlbnRzOgorSW4gb3RoZXIgd29yZHMsIGl0IGhhcyB0byBwZXJmb3JtIHRoaXMgc2VxdWVuY2Ugb2YgZXZlbnRzOgogCiAJTE9BRCB3YWl0ZXItPmxpc3QubmV4dDsKIAlMT0FEIHdhaXRlci0+dGFzazsKQEAgLTE1MDIsNyArMTUwMiw3IEBACiBzdWNoIHRoZSBpbXBsaWNpdCBtZW1vcnkgYmFycmllciBlZmZlY3RzIGFyZSBuZWNlc3NhcnkuCiAKIAotVGhlIGZvbGxvd2luZyBvcGVyYXRpb24gYXJlIHBvdGVudGlhbCBwcm9ibGVtcyBhcyB0aGV5IGRvIF9ub3RfIGltcGx5IG1lbW9yeQorVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSBwb3RlbnRpYWwgcHJvYmxlbXMgYXMgdGhleSBkbyBfbm90XyBpbXBseSBtZW1vcnkKIGJhcnJpZXJzLCBidXQgbWlnaHQgYmUgdXNlZCBmb3IgaW1wbGVtZW50aW5nIHN1Y2ggdGhpbmdzIGFzIFVOTE9DSy1jbGFzcwogb3BlcmF0aW9uczoKIApAQCAtMTUxNyw3ICsxNTE3LDcgQEAKIAogVGhlIGZvbGxvd2luZyBhbHNvIGRvIF9ub3RfIGltcGx5IG1lbW9yeSBiYXJyaWVycywgYW5kIHNvIG1heSByZXF1aXJlIGV4cGxpY2l0CiBtZW1vcnkgYmFycmllcnMgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzIChzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkgZm9yCi1pbnN0YW5jZSkpOgoraW5zdGFuY2UpOgogCiAJYXRvbWljX2FkZCgpOwogCWF0b21pY19zdWIoKTsKQEAgLTE2NDEsOCArMTY0MSw4IEBACiAgICAgIGluZGVlZCBoYXZlIHNwZWNpYWwgSS9PIHNwYWNlIGFjY2VzcyBjeWNsZXMgYW5kIGluc3RydWN0aW9ucywgYnV0IG1hbnkKICAgICAgQ1BVcyBkb24ndCBoYXZlIHN1Y2ggYSBjb25jZXB0LgogCi0gICAgIFRoZSBQQ0kgYnVzLCBhbW9uZ3N0IG90aGVycywgZGVmaW5lcyBhbiBJL08gc3BhY2UgY29uY2VwdCAtIHdoaWNoIG9uIHN1Y2gKLSAgICAgQ1BVcyBhcyBpMzg2IGFuZCB4ODZfNjQgY3B1cyByZWFkaWx5IG1hcHMgdG8gdGhlIENQVSdzIGNvbmNlcHQgb2YgSS9PCisgICAgIFRoZSBQQ0kgYnVzLCBhbW9uZ3N0IG90aGVycywgZGVmaW5lcyBhbiBJL08gc3BhY2UgY29uY2VwdCB3aGljaCAtIG9uIHN1Y2gKKyAgICAgQ1BVcyBhcyBpMzg2IGFuZCB4ODZfNjQgLSByZWFkaWx5IG1hcHMgdG8gdGhlIENQVSdzIGNvbmNlcHQgb2YgSS9PCiAgICAgIHNwYWNlLiAgSG93ZXZlciwgaXQgbWF5IGFsc28gYmUgbWFwcGVkIGFzIGEgdmlydHVhbCBJL08gc3BhY2UgaW4gdGhlIENQVSdzCiAgICAgIG1lbW9yeSBtYXAsIHBhcnRpY3VsYXJseSBvbiB0aG9zZSBDUFVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBhbHRlcm5hdGUgSS9PCiAgICAgIHNwYWNlcy4KQEAgLTE2NjQsNyArMTY2NCw3IEBACiAgICAgIGkzODYgYXJjaGl0ZWN0dXJlIG1hY2hpbmVzLCBmb3IgZXhhbXBsZSwgdGhpcyBpcyBjb250cm9sbGVkIGJ5IHdheSBvZiB0aGUKICAgICAgTVRSUiByZWdpc3RlcnMuCiAKLSAgICAgT3JkaW5hcmlseSwgdGhlc2Ugd2lsbCBiZSBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IG9yZGVyZWQgYW5kIHVuY29tYmluZWQsLAorICAgICBPcmRpbmFyaWx5LCB0aGVzZSB3aWxsIGJlIGd1YXJhbnRlZWQgdG8gYmUgZnVsbHkgb3JkZXJlZCBhbmQgdW5jb21iaW5lZCwKICAgICAgcHJvdmlkZWQgdGhleSdyZSBub3QgYWNjZXNzaW5nIGEgcHJlZmV0Y2hhYmxlIGRldmljZS4KIAogICAgICBIb3dldmVyLCBpbnRlcm1lZGlhcnkgaGFyZHdhcmUgKHN1Y2ggYXMgYSBQQ0kgYnJpZGdlKSBtYXkgaW5kdWxnZSBpbgpAQCAtMTY4OSw3ICsxNjg5LDcgQEAKIAogICgqKSBpb3JlYWRYKCksIGlvd3JpdGVYKCkKIAotICAgICBUaGVzZSB3aWxsIHBlcmZvcm0gYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSB0eXBlIG9mIGFjY2VzcyB0aGV5J3JlIGFjdHVhbGx5CisgICAgIFRoZXNlIHdpbGwgcGVyZm9ybSBhcHByb3ByaWF0ZWx5IGZvciB0aGUgdHlwZSBvZiBhY2Nlc3MgdGhleSdyZSBhY3R1YWxseQogICAgICBkb2luZywgYmUgaXQgaW5YKCkvb3V0WCgpIG9yIHJlYWRYKCkvd3JpdGVYKCkuCiAKIApAQCAtMTcwNSw3ICsxNzA1LDcgQEAKIAogVGhpcyBtZWFucyB0aGF0IGl0IG11c3QgYmUgY29uc2lkZXJlZCB0aGF0IHRoZSBDUFUgd2lsbCBleGVjdXRlIGl0cyBpbnN0cnVjdGlvbgogc3RyZWFtIGluIGFueSBvcmRlciBpdCBmZWVscyBsaWtlIC0gb3IgZXZlbiBpbiBwYXJhbGxlbCAtIHByb3ZpZGVkIHRoYXQgaWYgYW4KLWluc3RydWN0aW9uIGluIHRoZSBzdHJlYW0gZGVwZW5kcyBvbiB0aGUgYW4gZWFybGllciBpbnN0cnVjdGlvbiwgdGhlbiB0aGF0CitpbnN0cnVjdGlvbiBpbiB0aGUgc3RyZWFtIGRlcGVuZHMgb24gYW4gZWFybGllciBpbnN0cnVjdGlvbiwgdGhlbiB0aGF0CiBlYXJsaWVyIGluc3RydWN0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGNvbXBsZXRlWypdIGJlZm9yZSB0aGUgbGF0ZXIKIGluc3RydWN0aW9uIG1heSBwcm9jZWVkOyBpbiBvdGhlciB3b3JkczogcHJvdmlkZWQgdGhhdCB0aGUgYXBwZWFyYW5jZSBvZgogY2F1c2FsaXR5IGlzIG1haW50YWluZWQuCkBAIC0xNzk1LDggKzE3OTUsOCBAQAogYmVjb21lIGFwcGFyZW50IGluIHRoZSBzYW1lIG9yZGVyIG9uIHRob3NlIG90aGVyIENQVXMuCiAKIAotQ29uc2lkZXIgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHRoYXQgaGFzIHBhaXIgb2YgQ1BVcyAoMSAmIDIpLCBlYWNoIG9mIHdoaWNoIGhhcwotYSBwYWlyIG9mIHBhcmFsbGVsIGRhdGEgY2FjaGVzIChDUFUgMSBoYXMgQS9CLCBhbmQgQ1BVIDIgaGFzIEMvRCk6CitDb25zaWRlciBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gdGhhdCBoYXMgYSBwYWlyIG9mIENQVXMgKDEgJiAyKSwgZWFjaCBvZiB3aGljaAoraGFzIGEgcGFpciBvZiBwYXJhbGxlbCBkYXRhIGNhY2hlcyAoQ1BVIDEgaGFzIEEvQiwgYW5kIENQVSAyIGhhcyBDL0QpOgogCiAJICAgICAgICAgICAgOgogCSAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLSsKQEAgLTE4MzUsNyArMTgzNSw3IEBACiAKICAoKikgdGhlIGNvaGVyZW5jeSBxdWV1ZSBpcyBub3QgZmx1c2hlZCBieSBub3JtYWwgbG9hZHMgdG8gbGluZXMgYWxyZWFkeQogICAgICBwcmVzZW50IGluIHRoZSBjYWNoZSwgZXZlbiB0aG91Z2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBxdWV1ZSBtYXkKLSAgICAgcG90ZW50aWFsbHkgZWZmZWN0IHRob3NlIGxvYWRzLgorICAgICBwb3RlbnRpYWxseSBhZmZlY3QgdGhvc2UgbG9hZHMuCiAKIEltYWdpbmUsIHRoZW4sIHRoYXQgdHdvIHdyaXRlcyBhcmUgbWFkZSBvbiB0aGUgZmlyc3QgQ1BVLCB3aXRoIGEgd3JpdGUgYmFycmllcgogYmV0d2VlbiB0aGVtIHRvIGd1YXJhbnRlZSB0aGF0IHRoZXkgd2lsbCBhcHBlYXIgdG8gcmVhY2ggdGhhdCBDUFUncyBjYWNoZXMgaW4KQEAgLTE4NDUsNyArMTg0NSw3IEBACiAJPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkJCQkJdSA9PSAwLCB2ID09IDEgYW5kIHAgPT0gJnUsIHEgPT0gJnUKIAl2ID0gMjsKLQlzbXBfd21iKCk7CQkJTWFrZSBzdXJlIGNoYW5nZSB0byB2IHZpc2libGUgYmVmb3JlCisJc21wX3dtYigpOwkJCU1ha2Ugc3VyZSBjaGFuZ2UgdG8gdiBpcyB2aXNpYmxlIGJlZm9yZQogCQkJCQkgY2hhbmdlIHRvIHAKIAk8QTptb2RpZnkgdj0yPgkJCXYgaXMgbm93IGluIGNhY2hlIEEgZXhjbHVzaXZlbHkKIAlwID0gJnY7CkBAIC0xODUzLDcgKzE4NTMsNyBAQAogCiBUaGUgd3JpdGUgbWVtb3J5IGJhcnJpZXIgZm9yY2VzIHRoZSBvdGhlciBDUFVzIGluIHRoZSBzeXN0ZW0gdG8gcGVyY2VpdmUgdGhhdAogdGhlIGxvY2FsIENQVSdzIGNhY2hlcyBoYXZlIGFwcGFyZW50bHkgYmVlbiB1cGRhdGVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiAgQnV0Ci1ub3cgaW1hZ2luZSB0aGF0IHRoZSBzZWNvbmQgQ1BVIHRoYXQgd2FudHMgdG8gcmVhZCB0aG9zZSB2YWx1ZXM6Citub3cgaW1hZ2luZSB0aGF0IHRoZSBzZWNvbmQgQ1BVIHdhbnRzIHRvIHJlYWQgdGhvc2UgdmFsdWVzOgogCiAJQ1BVIDEJCUNQVSAyCQlDT01NRU5UCiAJPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE4NjEsNyArMTg2MSw3IEBACiAJCQlxID0gcDsKIAkJCXggPSAqcTsKIAotVGhlIGFib3ZlIHBhaXIgb2YgcmVhZHMgbWF5IHRoZW4gZmFpbCB0byBoYXBwZW4gaW4gZXhwZWN0ZWQgb3JkZXIsIGFzIHRoZQorVGhlIGFib3ZlIHBhaXIgb2YgcmVhZHMgbWF5IHRoZW4gZmFpbCB0byBoYXBwZW4gaW4gdGhlIGV4cGVjdGVkIG9yZGVyLCBhcyB0aGUKIGNhY2hlbGluZSBob2xkaW5nIHAgbWF5IGdldCB1cGRhdGVkIGluIG9uZSBvZiB0aGUgc2Vjb25kIENQVSdzIGNhY2hlcyB3aGlsc3QKIHRoZSB1cGRhdGUgdG8gdGhlIGNhY2hlbGluZSBob2xkaW5nIHYgaXMgZGVsYXllZCBpbiB0aGUgb3RoZXIgb2YgdGhlIHNlY29uZAogQ1BVJ3MgY2FjaGVzIGJ5IHNvbWUgb3RoZXIgY2FjaGUgZXZlbnQ6CkBAIC0xOTE2LDcgKzE5MTYsNyBAQAogCiBPdGhlciBDUFVzIG1heSBhbHNvIGhhdmUgc3BsaXQgY2FjaGVzLCBidXQgbXVzdCBjb29yZGluYXRlIGJldHdlZW4gdGhlIHZhcmlvdXMKIGNhY2hlbGV0cyBmb3Igbm9ybWFsIG1lbW9yeSBhY2Nlc3Nlcy4gIFRoZSBzZW1hbnRpY3Mgb2YgdGhlIEFscGhhIHJlbW92ZXMgdGhlCi1uZWVkIGZvciBjb29yZGluYXRpb24gaW4gYWJzZW5jZSBvZiBtZW1vcnkgYmFycmllcnMuCituZWVkIGZvciBjb29yZGluYXRpb24gaW4gdGhlIGFic2VuY2Ugb2YgbWVtb3J5IGJhcnJpZXJzLgogCiAKIENBQ0hFIENPSEVSRU5DWSBWUyBETUEKQEAgLTE5MzEsMTAgKzE5MzEsMTAgQEAKIAogSW4gYWRkaXRpb24sIHRoZSBkYXRhIERNQSdkIHRvIFJBTSBieSBhIGRldmljZSBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgZGlydHkKIGNhY2hlIGxpbmVzIGJlaW5nIHdyaXR0ZW4gYmFjayB0byBSQU0gZnJvbSBhIENQVSdzIGNhY2hlIGFmdGVyIHRoZSBkZXZpY2UgaGFzCi1pbnN0YWxsZWQgaXRzIG93biBkYXRhLCBvciBjYWNoZSBsaW5lcyBzaW1wbHkgcHJlc2VudCBpbiBhIENQVXMgY2FjaGUgbWF5Ci1zaW1wbHkgb2JzY3VyZSB0aGUgZmFjdCB0aGF0IFJBTSBoYXMgYmVlbiB1cGRhdGVkLCB1bnRpbCBhdCBzdWNoIHRpbWUgYXMgdGhlCi1jYWNoZWxpbmUgaXMgZGlzY2FyZGVkIGZyb20gdGhlIENQVSdzIGNhY2hlIGFuZCByZWxvYWRlZC4gIFRvIGRlYWwgd2l0aCB0aGlzLAotdGhlIGFwcHJvcHJpYXRlIHBhcnQgb2YgdGhlIGtlcm5lbCBtdXN0IGludmFsaWRhdGUgdGhlIG92ZXJsYXBwaW5nIGJpdHMgb2YgdGhlCitpbnN0YWxsZWQgaXRzIG93biBkYXRhLCBvciBjYWNoZSBsaW5lcyBwcmVzZW50IGluIHRoZSBDUFUncyBjYWNoZSBtYXkgc2ltcGx5CitvYnNjdXJlIHRoZSBmYWN0IHRoYXQgUkFNIGhhcyBiZWVuIHVwZGF0ZWQsIHVudGlsIGF0IHN1Y2ggdGltZSBhcyB0aGUgY2FjaGVsaW5lCitpcyBkaXNjYXJkZWQgZnJvbSB0aGUgQ1BVJ3MgY2FjaGUgYW5kIHJlbG9hZGVkLiAgVG8gZGVhbCB3aXRoIHRoaXMsIHRoZQorYXBwcm9wcmlhdGUgcGFydCBvZiB0aGUga2VybmVsIG11c3QgaW52YWxpZGF0ZSB0aGUgb3ZlcmxhcHBpbmcgYml0cyBvZiB0aGUKIGNhY2hlIG9uIGVhY2ggQ1BVLgogCiBTZWUgRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY2FjaGUgbWFuYWdlbWVudC4KQEAgLTE5NDQsNyArMTk0NCw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBNZW1vcnkgbWFwcGVkIEkvTyB1c3VhbGx5IHRha2VzIHBsYWNlIHRocm91Z2ggbWVtb3J5IGxvY2F0aW9ucyB0aGF0IGFyZSBwYXJ0IG9mCi1hIHdpbmRvdyBpbiB0aGUgQ1BVJ3MgbWVtb3J5IHNwYWNlIHRoYXQgaGF2ZSBkaWZmZXJlbnQgcHJvcGVydGllcyBhc3NpZ25lZCB0aGFuCithIHdpbmRvdyBpbiB0aGUgQ1BVJ3MgbWVtb3J5IHNwYWNlIHRoYXQgaGFzIGRpZmZlcmVudCBwcm9wZXJ0aWVzIGFzc2lnbmVkIHRoYW4KIHRoZSB1c3VhbCBSQU0gZGlyZWN0ZWQgd2luZG93LgogCiBBbW9uZ3N0IHRoZXNlIHByb3BlcnRpZXMgaXMgdXN1YWxseSB0aGUgZmFjdCB0aGF0IHN1Y2ggYWNjZXNzZXMgYnlwYXNzIHRoZQpAQCAtMTk2MCw3ICsxOTYwLDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQSBwcm9ncmFtbWVyIG1pZ2h0IHRha2UgaXQgZm9yIGdyYW50ZWQgdGhhdCB0aGUgQ1BVIHdpbGwgcGVyZm9ybSBtZW1vcnkKLW9wZXJhdGlvbnMgaW4gZXhhY3RseSB0aGUgb3JkZXIgc3BlY2lmaWVkLCBzbyB0aGF0IGlmIGEgQ1BVIGlzLCBmb3IgZXhhbXBsZSwKK29wZXJhdGlvbnMgaW4gZXhhY3RseSB0aGUgb3JkZXIgc3BlY2lmaWVkLCBzbyB0aGF0IGlmIHRoZSBDUFUgaXMsIGZvciBleGFtcGxlLAogZ2l2ZW4gdGhlIGZvbGxvd2luZyBwaWVjZSBvZiBjb2RlIHRvIGV4ZWN1dGU6CiAKIAlhID0gKkE7CkBAIC0xOTY5LDcgKzE5NjksNyBAQAogCWQgPSAqRDsKIAkqRSA9IGU7CiAKLVRoZXkgd291bGQgdGhlbiBleHBlY3QgdGhhdCB0aGUgQ1BVIHdpbGwgY29tcGxldGUgdGhlIG1lbW9yeSBvcGVyYXRpb24gZm9yIGVhY2gKK3RoZXkgd291bGQgdGhlbiBleHBlY3QgdGhhdCB0aGUgQ1BVIHdpbGwgY29tcGxldGUgdGhlIG1lbW9yeSBvcGVyYXRpb24gZm9yIGVhY2gKIGluc3RydWN0aW9uIGJlZm9yZSBtb3Zpbmcgb24gdG8gdGhlIG5leHQgb25lLCBsZWFkaW5nIHRvIGEgZGVmaW5pdGUgc2VxdWVuY2Ugb2YKIG9wZXJhdGlvbnMgYXMgc2VlbiBieSBleHRlcm5hbCBvYnNlcnZlcnMgaW4gdGhlIHN5c3RlbToKIApAQCAtMTk4Niw4ICsxOTg2LDggQEAKICAoKikgbG9hZHMgbWF5IGJlIGRvbmUgc3BlY3VsYXRpdmVseSwgYW5kIHRoZSByZXN1bHQgZGlzY2FyZGVkIHNob3VsZCBpdCBwcm92ZQogICAgICB0byBoYXZlIGJlZW4gdW5uZWNlc3Nhcnk7CiAKLSAoKikgbG9hZHMgbWF5IGJlIGRvbmUgc3BlY3VsYXRpdmVseSwgbGVhZGluZyB0byB0aGUgcmVzdWx0IGhhdmluZyBiZWluZwotICAgICBmZXRjaGVkIGF0IHRoZSB3cm9uZyB0aW1lIGluIHRoZSBleHBlY3RlZCBzZXF1ZW5jZSBvZiBldmVudHM7CisgKCopIGxvYWRzIG1heSBiZSBkb25lIHNwZWN1bGF0aXZlbHksIGxlYWRpbmcgdG8gdGhlIHJlc3VsdCBoYXZpbmcgYmVlbiBmZXRjaGVkCisgICAgIGF0IHRoZSB3cm9uZyB0aW1lIGluIHRoZSBleHBlY3RlZCBzZXF1ZW5jZSBvZiBldmVudHM7CiAKICAoKikgdGhlIG9yZGVyIG9mIHRoZSBtZW1vcnkgYWNjZXNzZXMgbWF5IGJlIHJlYXJyYW5nZWQgdG8gcHJvbW90ZSBiZXR0ZXIgdXNlCiAgICAgIG9mIHRoZSBDUFUgYnVzZXMgYW5kIGNhY2hlczsKQEAgLTIwNjksMTIgKzIwNjksMTIgQEAKIAogVGhlIERFQyBBbHBoYSBDUFUgaXMgb25lIG9mIHRoZSBtb3N0IHJlbGF4ZWQgQ1BVcyB0aGVyZSBpcy4gIE5vdCBvbmx5IHRoYXQsCiBzb21lIHZlcnNpb25zIG9mIHRoZSBBbHBoYSBDUFUgaGF2ZSBhIHNwbGl0IGRhdGEgY2FjaGUsIHBlcm1pdHRpbmcgdGhlbSB0byBoYXZlCi10d28gc2VtYW50aWNhbGx5IHJlbGF0ZWQgY2FjaGUgbGluZXMgdXBkYXRpbmcgYXQgc2VwYXJhdGUgdGltZXMuICBUaGlzIGlzIHdoZXJlCit0d28gc2VtYW50aWNhbGx5LXJlbGF0ZWQgY2FjaGUgbGluZXMgdXBkYXRlZCBhdCBzZXBhcmF0ZSB0aW1lcy4gIFRoaXMgaXMgd2hlcmUKIHRoZSBkYXRhIGRlcGVuZGVuY3kgYmFycmllciByZWFsbHkgYmVjb21lcyBuZWNlc3NhcnkgYXMgdGhpcyBzeW5jaHJvbmlzZXMgYm90aAogY2FjaGVzIHdpdGggdGhlIG1lbW9yeSBjb2hlcmVuY2Ugc3lzdGVtLCB0aHVzIG1ha2luZyBpdCBzZWVtIGxpa2UgcG9pbnRlcgogY2hhbmdlcyB2cyBuZXcgZGF0YSBvY2N1ciBpbiB0aGUgcmlnaHQgb3JkZXIuCiAKLVRoZSBBbHBoYSBkZWZpbmVzIHRoZSBMaW51eCdzIGtlcm5lbCdzIG1lbW9yeSBiYXJyaWVyIG1vZGVsLgorVGhlIEFscGhhIGRlZmluZXMgdGhlIExpbnV4IGtlcm5lbCdzIG1lbW9yeSBiYXJyaWVyIG1vZGVsLgogCiBTZWUgdGhlIHN1YnNlY3Rpb24gb24gIkNhY2hlIENvaGVyZW5jeSIgYWJvdmUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWlwcy9wY2kvcGNpLlJFQURNRSBiL0RvY3VtZW50YXRpb24vbWlwcy9wY2kvcGNpLlJFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY5N2VlNC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL21pcHMvcGNpL3BjaS5SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0KLVBldGUgUG9wb3YsIHBwb3BvdkBwYWNiZWxsLm5ldAotMDcvMTEvMjAwMQotCi1UaGlzIFJFQURNRSBicmllZmx5IGV4cGxhaW5zIGhvdyB0byB1c2UgdGhlIHBjaSBhbmQgcGNpX2F1dG8KLWNvZGUgaW4gYXJjaC9taXBzL2tlcm5lbC4gIFRoZSBjb2RlIHdhcyBwb3J0ZWQgZnJvbSBQb3dlclBDIGFuZAotbW9kaWZpZWQgc2xpZ2h0bHkuIEl0IGhhcyBiZWVuIHRlc3RlZCBwcmV0dHkgd2VsbCBvbiBQUEMgb24gc29tZQotcmF0aGVyIGNvbXBsZXggc3lzdGVtcyB3aXRoIG11bHRpcGxlIGJyaWRnZXMgYW5kIGRldmljZXMgYmVoaW5kCi1lYWNoIGJyaWRnZS4gSG93ZXZlciwgYXQgdGhlIHRpbWUgdGhpcyBSRUFETUUgd2FzIHdyaXR0ZW4sIHRoZQotbWlwcyBwb3J0IHdhcyB0ZXN0ZWQgb25seSBvbiBib2FyZHMgd2l0aCBhIHNpbmdsZSBwY2kgYnVzIGFuZAotbm8gUDJQIGJyaWRnZXMuICBJdCdzIHZlcnkgcG9zc2libGUgdGhhdCBvbiBib2FyZHMgd2l0aCBQMlAKLWJyaWRnZXMgc29tZSBtb2RpZmljYXRpb25zIGhhdmUgdG8gYmUgbWFkZS4gVGhlIGNvZGUgd2lsbCAKLWV2b2x2ZSwgbm8gZG91YnQsIGJ1dCBjdXJyZW50bHkgZXZlcnkgc2luZ2xlIG1pcHMgYm9hcmQKLWlzIGRvaW5nIGl0cyBvd24gcGNpYmlvcyB0aGluZyBhbmQgaXQgaGFzIGJlY29tZSBhIGJpZwotbWVzcy4gIFRoaXMgZ2VuZXJpYyBwY2kgY29kZSBpcyBtZWFudCB0byBjbGVhbiB1cCB0aGUgbWlwcwotcGNpIG1lc3MgYW5kIG1ha2UgaXQgZWFzaWVyIHRvIGFkZCBwY2kgc3VwcG9ydCB0byBuZXcgYm9hcmRzLgotCi1pbnNpZGUgdGhlIGRlZmluZSBmb3IgeW91ciBib2FyZCBpbiBhcmNoL21pcHMvY29uZmlnLmluLiAKLUZvciBleGFtcGxlLCB0aGUgR2FsaWxlbyBFVjk2MTAwIGJvYXJkICBsb29rcyBsaWtlIHRoaXM6Ci0KLWlmIFsgIiRDT05GSUdfTUlQU19FVjk2MTAwIiA9ICJ5IiBdOyB0aGVuCi0JZGVmaW5lX2Jvb2wgQ09ORklHX1BDSSB5Ci0JZGVmaW5lX2Jvb2wgQ09ORklHX01JUFNfR1Q5NjEwMCB5Ci0JZGVmaW5lX2Jvb2wgQ09ORklHX05FV19QQ0kgeQotCWRlZmluZV9ib29sIENPTkZJR19TV0FQX0lPX1NQQUNFIHkKLWZpIAotCi0KLU5leHQsIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgYXJjaC9taXBzL2tlcm5lbC9wY2kgY29kZSwgd2hpY2ggaGFzIHRoZQotcGNpYmlvc19pbml0KCkgZnVuY3Rpb24sIGFkZAotCi1kZWZpbmVfYm9vbCBDT05GSUdfTkVXX1BDSSB5Ci0gCi1pbnNpZGUgdGhlIGRlZmluZSBmb3IgeW91ciBib2FyZC4gQWdhaW4sIHRoZSBFVjk2MTAwIGV4YW1wbGUgYWJvdmUKLXNob3cgTkVXX1BDSSB0dXJuZWQgb24uCi0KLQotTm93IHlvdSBuZWVkIHRvIGFkZCB5b3VyIGZpbGVzIHRvIGhvb2sgaW4geW91ciBwY2kgY29uZmlndXJhdGlvbgotY3ljbGVzLiAgVXN1YWxseSB5b3UnbGwgbmVlZCBvbmx5IGEgY291cGxlIG9mIGZpbGVzIG5hbWVkIHNvbWV0aGluZwotbGlrZSBwY2lfZml4dXBzLmMgYW5kIHBjaV9vcHMuYy4gIFlvdSBjYW4gY29weSB0aGUgdGVtcGxhdGVzCi1wcm92aWRlZCBhbmQgZmlsbCBpbiB0aGUgY29kZS4KLQotVGhlIGZpbGUgcGNpX29wcy5jIHNob3VsZCBjb250YWluIHRoZSBwY2kgY29uZmlndXJhdGlvbiBjeWNsZXMgcm91dGluZXMuCi1JdCBhbHNvIGhhcyB0aGUgbWlwc19wY2lfY2hhbm5lbHNbXSBhcnJheSB3aGljaCBjb250YWlucyB0aGUgZGVzY3JpcHRvcnMKLW9mIGVhY2ggcGNpIGNvbnRyb2xsZXIuCi0KLVRoZSBmaWxlIHBjaV9maXh1cHMuYyBjb250YWlucyBhIGZldyByb3V0aW5lcyB0byBkbyBpbnRlcnJ1cHQgZml4dXBzLAotcmVzb3VyY2VzIGZpeHVwcywgYW5kLCBpZiBuZWVkZWQsIHBjaSBiaW9zIGZpeHVwcy4KLQotVXN1YWxseSB5b3UnbGwgcHV0IHlvdXIgcGNpX2ZpeHVwcy5jIGZpbGUgaW4geW91ciBib2FyZCBzcGVjaWZpYyBkaXJlY3RvcnksIAotc2luY2UgdGhlIGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUgYXJlIGJvYXJkIHNwZWNpZmljLiAgVGhlIGZ1bmN0aW9ucyBpbgotcGNpX29wcy5jLCBvbiB0aGUgb3RoZXIgaGFuZCwgYXJlIHVzdWFsbHkgcGNpIGNvbnRyb2xsZXIgc3BlY2lmaWMgc28gdGhhdAotZmlsZSBjb3VsZCBiZSBzaGFyZWQgYW1vbmcgYSBmZXcgZGlmZmVyZW50IGJvYXJkcyB1c2luZyB0aGUgc2FtZQotcGNpIGNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxhYmVsL2ludHJvZHVjdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldGxhYmVsL2ludHJvZHVjdGlvbi50eHQKaW5kZXggYTRmZmJhMS4uNWVjZDhkMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsYWJlbC9pbnRyb2R1Y3Rpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGFiZWwvaW50cm9kdWN0aW9uLnR4dApAQCAtMzAsNyArMzAsNyBAQAogZnJvbSB1c2VyIHNwYWNlLiAgVGhlIE5ldExhYmVsIGNvbW11bmljYXRpb24gbGF5ZXIgdXNlcyBhIG1lc3NhZ2UgYmFzZWQKIHByb3RvY29sIGJ1aWx0IG9uIHRvcCBvZiB0aGUgR2VuZXJpYyBORVRMSU5LIHRyYW5zcG9ydCBtZWNoYW5pc20uICBUaGUgZXhhY3QKIGZvcm1hdHRpbmcgb2YgdGhlc2UgTmV0TGFiZWwgbWVzc2FnZXMgYXMgd2VsbCBhcyB0aGUgR2VuZXJpYyBORVRMSU5LIGZhbWlseQotbmFtZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0aGUgJ25ldC9uZXRsYWJlbC8nIGRpcmVjdG9yeSBhcyBjb21tZW50cyBpbiB0aGUKK25hbWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgJ25ldC9uZXRsYWJlbC8nIGRpcmVjdG9yeSBhcyBjb21tZW50cyBpbiB0aGUKIGhlYWRlciBmaWxlcyBhcyB3ZWxsIGFzIGluICdpbmNsdWRlL25ldC9uZXRsYWJlbC5oJy4KIAogICogU2VjdXJpdHkgTW9kdWxlIEFQSQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzZwYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy82cGFjay50eHQKaW5kZXggNDhlZDJiNy4uZDA3NzdhMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzZwYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvNnBhY2sudHh0CkBAIC0xLDYgKzEsNiBAQAogVGhpcyBpcyB0aGUgNnBhY2stbWluaS1IT1dUTywgd3JpdHRlbiBieQogCi1BbmRyZWFzIEv2bnNnZW4gREczS1EKK0FuZHJlYXMgS8O2bnNnZW4gREczS1EKIEludGVybmV0OiBhamtAaWVoay5yd3RoLWFhY2hlbi5kZQogQU1QUi1uZXQ6IGRnM2txQGRiMHByYS5hbXByLm9yZwogQVguMjU6ICAgIGRnM2txQGRiMGFjaC4jbnJ3LmRldS5ldQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL05BUElfSE9XVE8udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL05BUElfSE9XVE8udHh0CmluZGV4IGZiOGRjNjQuLjc5MDc0MzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9OQVBJX0hPV1RPLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTkFQSV9IT1dUTy50eHQKQEAgLTE2MCw3ICsxNjAsNyBAQAogaXQgY29tcGxldGVzIGl0cyB3b3JrLiBUaGUgZGV2aWNlIGNhbm5vdCBiZSBvdXQgb2YgcG9sbCBsaXN0IGF0IHRoaXMKIGNhbGwsIGlmIGl0IGlzIHRoZW4gY2xlYXJseSBpdCBpcyBhIEJVRygpLiBZb3UnbGwga25vdyA7LT4KIAotQWxsIHRoZXNlIGFib3ZlIG5ldGhvZHMgYXJlIHVzZWQgYmVsb3cuIFNvIGtlZXAgcmVhZGluZyBmb3IgY2xhcml0eS4KK0FsbCBvZiB0aGUgYWJvdmUgbWV0aG9kcyBhcmUgdXNlZCBiZWxvdywgc28ga2VlcCByZWFkaW5nIGZvciBjbGFyaXR5LgogCiBEZXZpY2UgZHJpdmVyIGNoYW5nZXMgdG8gYmUgbWFkZSB3aGVuIHBvcnRpbmcgTkFQSQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnR4dAppbmRleCA4NDdjZWRiLi5jZTEzNjFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMudHh0CkBAIC00OSw3ICs0OSw3IEBACiAJZm9yIHRoaXMgYW5kIHJldHVybiAtMSB3aGVuIHRoZSBzcGluIGxvY2sgZmFpbHMuIAogCVRoZSBsb2NraW5nIHRoZXJlIHNob3VsZCBhbHNvIHByb3Blcmx5IHByb3RlY3QgYWdhaW5zdCAKIAlzZXRfbXVsdGljYXN0X2xpc3QKLQlDb250ZXh0OiBCSHMgZGlzYWJsZWQKKwlDb250ZXh0OiBQcm9jZXNzIHdpdGggQkhzIGRpc2FibGVkIG9yIEJIICh0aW1lcikuCiAJTm90ZXM6IG5ldGlmX3F1ZXVlX3N0b3BwZWQoKSBpcyBndWFyYW50ZWVkIGZhbHNlCiAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCB3aGVuIGNhbGxpbmcgaGFyZF9zdGFydF94bWl0LgogICAgICAgICAgICAgICAgIChJbnRlcnJ1cHRzIG11c3QgYWxzbyBiZSBlbmFibGVkIHdoZW4gZW5hYmxpbmcgdGhlIEJIIGhhbmRsZXIuKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKaW5kZXggNWEyMzJkOS4uZGIwY2Q1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0CkBAIC0xMyw3ICsxMyw3IEBACiAKIFBsZWFzZSBzZW5kIG1lIHlvdXIgY29tbWVudHMgdG8KIAotICAgIFVsaXNzZXMgQWxvbnNvIENhbWFy8yA8dWFjYUBpLmhhdGUuc3BhbS5hbHVtbmkudXYuZXM+CisgICAgVWxpc3NlcyBBbG9uc28gQ2FtYXLDsyA8dWFjYUBpLmhhdGUuc3BhbS5hbHVtbmkudXYuZXM+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICsgV2h5IHVzZSBQQUNLRVRfTU1BUApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLmh1biBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS5odW4KaW5kZXggNWFjZjE5MS4uYmVkMmYwNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLmh1bgorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2xpY2Vjb20uaHVuCkBAIC0xLDcgKzEsNyBAQAogCiBTbGljZUNPTSBhZGFwdGVyIGZlbGhhc3puYWxvaSBkb2t1bWVudGFjaW9qYSAtIDAuNTEgdmVyemlvaG96CiAKLUJhcnTzayBJc3R24W4gPGJhcnRva2lAaXRjLmh1PgorQmFydMOzayBJc3R2w6FuIDxiYXJ0b2tpQGl0Yy5odT4KIFV0b2xzbyBtb2Rvc2l0YXM6IFdlZCBBdWcgMjkgMTc6MjY6NTggQ0VTVCAyMDAxCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2xpY2Vjb20udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLnR4dAppbmRleCAzMmQzYjkxLi5jODJjMGNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2xpY2Vjb20udHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS50eHQKQEAgLTEsOSArMSw5IEBACiAKIFNsaWNlQ09NIGFkYXB0ZXIgdXNlcidzIGRvY3VtZW50YXRpb24gLSBmb3IgdGhlIDAuNTEgZHJpdmVyIHZlcnNpb24KIAotV3JpdHRlbiBieSBCYXJ082sgSXN0duFuIDxiYXJ0b2tpQGl0Yy5odT4KK1dyaXR0ZW4gYnkgQmFydMOzayBJc3R2w6FuIDxiYXJ0b2tpQGl0Yy5odT4KIAotRW5nbGlzaCB0cmFuc2xhdGlvbjogTGFrYXRvcyBHefZyZ3kgPGd5dXJpQGl0Yy5odT4KK0VuZ2xpc2ggdHJhbnNsYXRpb246IExha2F0b3MgR3nDtnJneSA8Z3l1cmlAaXRjLmh1PgogTW9uIERlYyAxMSAxNToyODo0MiBDRVQgMjAwMAogCiBMYXN0IG1vZGlmaWVkOiBXZWQgQXVnIDI5IDE3OjI1OjM3IENFU1QgMjAwMQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RtczM4MHRyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90bXMzODB0ci50eHQKaW5kZXggYzE2OWE1Ny4uMWY3M2UxMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RtczM4MHRyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdG1zMzgwdHIudHh0CkBAIC03MSwyNCArNzEsMjQgQEAKICAgQ0hBUFRFUiAxICAgICBMT0NBVElPTiBPRiBESVAtU1dJVENICiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVXExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMS/Ci3+VcTExMTExL8gICAgICAgICAgICAgICAgICAgICAgICAgVcTExMTEvyAgICAgICAgICAgIFXExMS/ICAgICAgICAg/got/kHExMTExMRVICAgICAgICAgICAgICAgICAgICAgIFcxIEHExMTExFUgICAgIFXExMTEvyD+ICAg/iAgICAgICAgIP4KLf5VxMTExMTEvyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+ICAgIP4g/iAgIP4gICAgICBVxMTFvwot/kHExMTExMRVICAgICAgICAgICAgICBVxMTExMTExMTExMS/ICAgICAgICAgIEHExMTEVSD+ICAg/iAgICAgIP4gIP7+Ci3+VcTExMTExL8gICAgICAgICAgICAgIP4gICAgICAgICAgIP4gICAgICAgICAgVcTExL8gIEHExMRVICAgICAgQcTExVUKLf5BxMTExMTEVSAgICAgICAgICAgICAg/iBUTVMzODBDMjYg/iAgICAgICAgICD+ICAg/iAgICAgICAgICAgICAgICD+Ci3+VcTExMTExL8gICAgICAgICAgICAgIP4gICAgICAgICAgIP4gICAgICAgICAgQcTExFUgICAgICAgICAgICAgICAgQcS/Ci3+QcTExMTExFUgICAgICAgICAgICAgIP4gICAgICAgICAgIP4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/iD+Ci3+ICAgICAgICAgICAgICAgICAgICAgIEHExMTExMTExMTExFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/iD+Ci3+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/iD+Ci3+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQcRVCi3+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/got/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4KLf4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+Ci3+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/gotQcTExMTExMTExMTExEHExMTExMTExMTExMTExMTEQcTEQcTExMTExMTExMTExMTExMTExMTExMTEQcTExMTExMTExFUKLSAgICAgICAgICAgICBBxMTExMTExMTExMTExMTExFUgIEHExMTExMTExMTExMTExMTExMTExMTExFUKK1XDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TCvworw75Vw4TDhMOEw4TDhMOEwr8gICAgICAgICAgICAgICAgICAgICAgICAgVcOEw4TDhMOEw4TCvyAgICAgICAgICAgIFXDhMOEw4TCvyAgICAgICAgIMO+CivDvkHDhMOEw4TDhMOEw4RVICAgICAgICAgICAgICAgICAgICAgIFcxIEHDhMOEw4TDhMOEVSAgICAgVcOEw4TDhMOEwr8gw74gICDDviAgICAgICAgIMO+CivDvlXDhMOEw4TDhMOEw4TCvyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDDviAgICDDviDDviAgIMO+ICAgICAgVcOEw4TDhcK/CivDvkHDhMOEw4TDhMOEw4RVICAgICAgICAgICAgICBVw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMK/ICAgICAgICAgIEHDhMOEw4TDhFUgw74gICDDviAgICAgIMO+ICDDvsO+CivDvlXDhMOEw4TDhMOEw4TCvyAgICAgICAgICAgICAgw74gICAgICAgICAgIMO+ICAgICAgICAgIFXDhMOEw4TCvyAgQcOEw4TDhFUgICAgICBBw4TDhMOFVQorw75Bw4TDhMOEw4TDhMOEVSAgICAgICAgICAgICAgw74gVE1TMzgwQzI2IMO+ICAgICAgICAgIMO+ICAgw74gICAgICAgICAgICAgICAgw74KK8O+VcOEw4TDhMOEw4TDhMK/ICAgICAgICAgICAgICDDviAgICAgICAgICAgw74gICAgICAgICAgQcOEw4TDhFUgICAgICAgICAgICAgICAgQcOEwr8KK8O+QcOEw4TDhMOEw4TDhFUgICAgICAgICAgICAgIMO+ICAgICAgICAgICDDviAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDDviDDvgorw74gICAgICAgICAgICAgICAgICAgICAgQcOEw4TDhMOEw4TDhMOEw4TDhMOEw4RVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMO+IMO+CivDviAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMO+IMO+CivDviAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEHDhFUKK8O+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgw74KK8O+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgw74KK8O+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgw74KK8O+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgw74KK0HDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4RBw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4RBw4TDhEHDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEQcOEw4TDhMOEw4TDhMOEw4TDhFUKKyAgICAgICAgICAgICBBw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4RVICBBw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhMOEw4TDhFUKIAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDSEFQVEVSIDIgICAgIERFRkFVTFQgU0VUVElOR1MKQEAgLTEwOCw5ICsxMDgsOSBAQAogICBDSEFQVEVSIDMgICAgIERJUCBTV0lUQ0ggVzEgREVTQ1JJUFRJT04KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgICAgVcTExEHExMRBxMTEQcTExEHExMRBxMTEQcTExEHExMS/ICBPTgotICAgICAg/iAxIP4gMiD+IDMg/iA0IP4gNSD+IDYg/iA3IP4gOCD+Ci0gICAgICBBxMTEQcTExEHExMRBxMTEQcTExEHExMRBxMTEQcTExFUgIE9GRgorICAgICAgVcOEw4TDhEHDhMOEw4RBw4TDhMOEQcOEw4TDhEHDhMOEw4RBw4TDhMOEQcOEw4TDhEHDhMOEw4TCvyAgT04KKyAgICAgIMO+IDEgw74gMiDDviAzIMO+IDQgw74gNSDDviA2IMO+IDcgw74gOCDDvgorICAgICAgQcOEw4TDhEHDhMOEw4RBw4TDhMOEQcOEw4TDhEHDhMOEw4RBw4TDhMOEQcOEw4TDhEHDhMOEw4RVICBPRkYKICAgICAgIHxBRCB8IEJvb3RST00gQWRkci4gfCAgSS9PICAgICAgfAogICAgICAgKy0rLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0rLS0tLS0rCiAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgIHwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy91ZHBsaXRlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy91ZHBsaXRlLnR4dAppbmRleCBkZDZmNDZiLi42YmUwOWJhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdWRwbGl0ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3VkcGxpdGUudHh0CkBAIC0xMzksNyArMTM5LDcgQEAKICAgMykgRGlzYWJsaW5nIHRoZSBDaGVja3N1bSBDb21wdXRhdGlvbgogCiAgIE9uIGJvdGggc2VuZGVyIGFuZCByZWNlaXZlciwgY2hlY2tzdW1taW5nIHdpbGwgYWx3YXlzIGJlIHBlcmZvcm1lZAotICBhbmQgY2FuIG5vdCBiZSBkaXNhYmxlZCB1c2luZyBTT19OT19DSEVDSy4gVGh1cworICBhbmQgY2Fubm90IGJlIGRpc2FibGVkIHVzaW5nIFNPX05PX0NIRUNLLiBUaHVzCiAKICAgICAgICAgc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX05PX0NIRUNLLCAgLi4uICk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy93YW4tcm91dGVyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy93YW4tcm91dGVyLnR4dAppbmRleCAwN2RkNmQ5Li5iYzJhYjQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FuLXJvdXRlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhbi1yb3V0ZXIudHh0CkBAIC0zMzUsNyArMzM1LDcgQEAKIAkJCQljcmVhdGluZyBhcHBsaWNhdGlvbnMgdXNpbmcgQmlTeW5jCiAgICAJCQkJc3RyZWFtaW5nLiAgICAgICAgCiAKLTIuMC41ICAgQXVnIDA0LCAxOTk5IAkJQ0hETEMgaW5pdGlhbGl6YXRpbiBidWcgZml4LgorMi4wLjUgICBBdWcgMDQsIDE5OTkgCQlDSERMQyBpbml0aWFsaXphdGlvbiBidWcgZml4LgogCQkJCVBQUCBpbnRlcnJ1cHQgZHJpdmVuIGRyaXZlcjogCiAgIAkJCQlGaXggdG8gdGhlIFBQUCBsaW5lIGhhbmd1cCBwcm9ibGVtLgogCQkJCU5ldyBQUFAgZmlybXdhcmUKQEAgLTM3Miw3ICszNzIsNyBAQAogCQkJCW8gY2ZnZnQxIEdVSSBjc3UvZHN1IGNvbmZpZ3VyYXRvcgogCQkJCW8gd2FuY2ZnIEdVSSBjb25maWd1cmF0aW9uIGZpbGUgCiAJCQkJICBjb25maWd1cmF0b3IuCi0JCQkJbyBBcmNoaXRlY3R1YWwgZGlyZWN0b3J5IGNoYW5nZXMuCisJCQkJbyBBcmNoaXRlY3R1cmFsIGRpcmVjdG9yeSBjaGFuZ2VzLgogCiBiZXRhLTIuMS40IEp1bCAyMDAwCQlvIER5bmFtaWMgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb246CiAJCQkJCU5ldHdvcmsgaW50ZXJmYWNlcyByZWZsZWN0IHRoZSBzdGF0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hmcm1fc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtX3N5c2N0bC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiZDE2NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtX3N5c2N0bC50eHQKQEAgLTAsMCArMSw0IEBACisvcHJvYy9zeXMvbmV0L2NvcmUveGZybV8qIFZhcmlhYmxlczoKKworeGZybV9hY3FfZXhwaXJlcyAtIElOVEVHRVIKKwlkZWZhdWx0IDMwIC0gaGFyZCB0aW1lb3V0IGluIHNlY29uZHMgZm9yIGFjcXVpcmUgcmVxdWVzdHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vb29wcy10cmFjaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vb29wcy10cmFjaW5nLnR4dAppbmRleCBlYTU1ZWE4Li43ZDViNjBkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL29vcHMtdHJhY2luZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9vb3BzLXRyYWNpbmcudHh0CkBAIC0yMzQsOSArMjM0LDYgQEAKICAgNjogJ0InIGlmIGEgcGFnZS1yZWxlYXNlIGZ1bmN0aW9uIGhhcyBmb3VuZCBhIGJhZCBwYWdlIHJlZmVyZW5jZSBvcgogICAgICBzb21lIHVuZXhwZWN0ZWQgcGFnZSBmbGFncy4KIAotICA3OiAnVScgaWYgYSB1c2VyIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQgdGhhdCB0aGUgVGFpbnRlZCBmbGFnIGJlIHNldCwKLSAgICAgJyAnIG90aGVyd2lzZS4KLQogICA3OiAnVScgaWYgYSB1c2VyIG9yIHVzZXIgYXBwbGljYXRpb24gc3BlY2lmaWNhbGx5IHJlcXVlc3RlZCB0aGF0IHRoZQogICAgICBUYWludGVkIGZsYWcgYmUgc2V0LCAnICcgb3RoZXJ3aXNlLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BjaS50eHQgYi9Eb2N1bWVudGF0aW9uL3BjaS50eHQKaW5kZXggZTJjOWQwYS4uZDM4MjYxYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wY2kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcGNpLnR4dApAQCAtMzczLDcgKzM3Myw3IEBACiAKIDMuNiBSZWdpc3RlciBJUlEgaGFuZGxlcgogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1XaGlsZSBjYWxsaW5nIHJlcXVlc3RfaXJxKCkgaXMgdGhlIHRoZSBsYXN0IHN0ZXAgZGVzY3JpYmVkIGhlcmUsCitXaGlsZSBjYWxsaW5nIHJlcXVlc3RfaXJxKCkgaXMgdGhlIGxhc3Qgc3RlcCBkZXNjcmliZWQgaGVyZSwKIHRoaXMgaXMgb2Z0ZW4ganVzdCBhbm90aGVyIGludGVybWVkaWF0ZSBzdGVwIHRvIGluaXRpYWxpemUgYSBkZXZpY2UuCiBUaGlzIHN0ZXAgY2FuIG9mdGVuIGJlIGRlZmVycmVkIHVudGlsIHRoZSBkZXZpY2UgaXMgb3BlbmVkIGZvciB1c2UuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGNpZWFlci1ob3d0by50eHQgYi9Eb2N1bWVudGF0aW9uL3BjaWVhZXItaG93dG8udHh0CmluZGV4IDE2YzI1MTIuLmQ1ZGE4NjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcGNpZWFlci1ob3d0by50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wY2llYWVyLWhvd3RvLnR4dApAQCAtMTMsNyArMTMsNyBAQAogd2VsbCBhcyBob3cgdG8gZW5hYmxlIHRoZSBkcml2ZXJzIG9mIGVuZHBvaW50IGRldmljZXMgdG8gY29uZm9ybSB3aXRoCiBQQ0kgRXhwcmVzcyBBRVIgZHJpdmVyLgogCi0xLjIgQ29weXJpZ2h0IKkgSW50ZWwgQ29ycG9yYXRpb24gMjAwNi4KKzEuMiBDb3B5cmlnaHQgwqkgSW50ZWwgQ29ycG9yYXRpb24gMjAwNi4KIAogMS4zIFdoYXQgaXMgdGhlIFBDSSBFeHByZXNzIEFFUiBEcml2ZXI/CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG5wLnR4dCBiL0RvY3VtZW50YXRpb24vcG5wLnR4dAppbmRleCAyODAzN2FhLi40ODFmYWY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3BucC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wbnAudHh0CkBAIC0xNDAsNyArMTQwLDcgQEAKIFJlcXVpcmVtZW50cyBmb3IgYSBMaW51eCBQblAgcHJvdG9jb2w6CiAxLikgdGhlIHByb3RvY29sIG11c3QgdXNlIEVJU0EgSURzCiAyLikgdGhlIHByb3RvY29sIG11c3QgaW5mb3JtIHRoZSBQblAgTGF5ZXIgb2YgYSBkZXZpY2VzIGN1cnJlbnQgY29uZmlndXJhdGlvbgotLSB0aGUgYWJpbGl0eSB0byBzZXQgcmVzb3VyY2VzIGlzIG9wdGlvbmFsIGJ1dCBwcmVmZXJlZC4KKy0gdGhlIGFiaWxpdHkgdG8gc2V0IHJlc291cmNlcyBpcyBvcHRpb25hbCBidXQgcHJlZmVycmVkLgogCiBUaGUgZm9sbG93aW5nIGFyZSBQblAgcHJvdG9jb2wgcmVsYXRlZCBmdW5jdGlvbnM6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvYmFzaWMtcG0tZGVidWdnaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvYmFzaWMtcG0tZGVidWdnaW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTg1ZTJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9iYXNpYy1wbS1kZWJ1Z2dpbmcudHh0CkBAIC0wLDAgKzEsMTA2IEBACitEZWJ1Z2dpbmcgc3VzcGVuZCBhbmQgcmVzdW1lCisJKEMpIDIwMDcgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgR1BMCisKKzEuIFRlc3Rpbmcgc3VzcGVuZCB0byBkaXNrIChTVEQpCisKK1RvIHZlcmlmeSB0aGF0IHRoZSBTVEQgd29ya3MsIHlvdSBjYW4gdHJ5IHRvIHN1c3BlbmQgaW4gdGhlICJyZWJvb3QiIG1vZGU6CisKKyMgZWNobyByZWJvb3QgPiAvc3lzL3Bvd2VyL2Rpc2sKKyMgZWNobyBkaXNrID4gL3N5cy9wb3dlci9zdGF0ZQorCithbmQgdGhlIHN5c3RlbSBzaG91bGQgc3VzcGVuZCwgcmVib290LCByZXN1bWUgYW5kIGdldCBiYWNrIHRvIHRoZSBjb21tYW5kIHByb21wdAord2hlcmUgeW91IGhhdmUgc3RhcnRlZCB0aGUgdHJhbnNpdGlvbi4gIElmIHRoYXQgaGFwcGVucywgdGhlIFNURCBpcyBtb3N0IGxpa2VseQordG8gd29yayBjb3JyZWN0bHksIGJ1dCB5b3UgbmVlZCB0byByZXBlYXQgdGhlIHRlc3QgYXQgbGVhc3QgYSBjb3VwbGUgb2YgdGltZXMgaW4KK2Egcm93IGZvciBjb25maWRlbmNlLiAgVGhpcyBpcyBuZWNlc3NhcnksIGJlY2F1c2Ugc29tZSBwcm9ibGVtcyBvbmx5IHNob3cgdXAgb24KK2Egc2Vjb25kIGF0dGVtcHQgYXQgc3VzcGVuZGluZyBhbmQgcmVzdW1pbmcgdGhlIHN5c3RlbS4gIFlvdSBzaG91bGQgYWxzbyB0ZXN0Cit0aGUgInBsYXRmb3JtIiBhbmQgInNodXRkb3duIiBtb2RlcyBvZiBzdXNwZW5kOgorCisjIGVjaG8gcGxhdGZvcm0gPiAvc3lzL3Bvd2VyL2Rpc2sKKyMgZWNobyBkaXNrID4gL3N5cy9wb3dlci9zdGF0ZQorCitvcgorCisjIGVjaG8gc2h1dGRvd24gPiAvc3lzL3Bvd2VyL2Rpc2sKKyMgZWNobyBkaXNrID4gL3N5cy9wb3dlci9zdGF0ZQorCitpbiB3aGljaCBjYXNlcyB5b3Ugd2lsbCBoYXZlIHRvIHByZXNzIHRoZSBwb3dlciBidXR0b24gdG8gbWFrZSB0aGUgc3lzdGVtCityZXN1bWUuICBJZiB0aGF0IGRvZXMgbm90IHdvcmssIHlvdSB3aWxsIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBnb2VzIHdyb25nLgorCithKSBUZXN0IG1vZGUgb2YgU1RECisKK1RvIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IGRyaXZlcnMgdGhhdCBjYXVzZSBwcm9ibGVtcyB5b3UgY2FuIHJ1biB0aGUgU1RECitpbiB0aGUgdGVzdCBtb2RlOgorCisjIGVjaG8gdGVzdCA+IC9zeXMvcG93ZXIvZGlzaworIyBlY2hvIGRpc2sgPiAvc3lzL3Bvd2VyL3N0YXRlCisKK2luIHdoaWNoIGNhc2UgdGhlIHN5c3RlbSBzaG91bGQgZnJlZXplIHRhc2tzLCBzdXNwZW5kIGRldmljZXMsIGRpc2FibGUgbm9uYm9vdAorQ1BVcyAoaWYgYW55KSwgd2FpdCBmb3IgNSBzZWNvbmRzLCBlbmFibGUgbm9uYm9vdCBDUFVzLCByZXN1bWUgZGV2aWNlcywgdGhhdwordGFza3MgYW5kIHJldHVybiB0byB5b3VyIGNvbW1hbmQgcHJvbXB0LiAgSWYgdGhhdCBmYWlscywgbW9zdCBsaWtlbHkgdGhlcmUgaXMKK2EgZHJpdmVyIHRoYXQgZmFpbHMgdG8gZWl0aGVyIHN1c3BlbmQgb3IgcmVzdW1lIChpbiB0aGUgbGF0dGVyIGNhc2UgdGhlIHN5c3RlbQorbWF5IGhhbmcgb3IgYmUgdW5zdGFibGUgYWZ0ZXIgdGhlIHRlc3QsIHNvIHBsZWFzZSB0YWtlIHRoYXQgaW50byBjb25zaWRlcmF0aW9uKS4KK1RvIGZpbmQgdGhpcyBkcml2ZXIsIHlvdSBjYW4gY2Fycnkgb3V0IGEgYmluYXJ5IHNlYXJjaCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzOgorLSBpZiB0aGUgdGVzdCBmYWlscywgdW5sb2FkIGEgaGFsZiBvZiB0aGUgZHJpdmVycyBjdXJyZW50bHkgbG9hZGVkIGFuZCByZXBlYXQKKyh0aGF0IHdvdWxkIHByb2JhYmx5IGludm9sdmUgcmVib290aW5nIHRoZSBzeXN0ZW0sIHNvIGFsd2F5cyBub3RlIHdoYXQgZHJpdmVycworaGF2ZSBiZWVuIGxvYWRlZCBiZWZvcmUgdGhlIHRlc3QpLAorLSBpZiB0aGUgdGVzdCBzdWNjZWVkcywgbG9hZCBhIGhhbGYgb2YgdGhlIGRyaXZlcnMgeW91IGhhdmUgdW5sb2FkZWQgbW9zdAorcmVjZW50bHkgYW5kIHJlcGVhdC4KKworT25jZSB5b3UgaGF2ZSBmb3VuZCB0aGUgZmFpbGluZyBkcml2ZXIgKHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4ganVzdCBvbmUgb2YKK3RoZW0pLCB5b3UgaGF2ZSB0byB1bmxvYWQgaXQgZXZlcnkgdGltZSBiZWZvcmUgdGhlIFNURCB0cmFuc2l0aW9uLiAgSW4gdGhhdCBjYXNlCitwbGVhc2UgbWFrZSBzdXJlIHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB3aXRoIHRoZSBkcml2ZXIuCisKK0l0IGlzIGFsc28gcG9zc2libGUgdGhhdCBhIGN5Y2xlIGNhbiBzdGlsbCBmYWlsIGFmdGVyIHlvdSBoYXZlIHVubG9hZGVkCithbGwgbW9kdWxlcy4gSW4gdGhhdCBjYXNlLCB5b3Ugd291bGQgd2FudCB0byBsb29rIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24KK2ZvciB0aGUgZHJpdmVycyB0aGF0IGNhbiBiZSBjb21waWxlZCBhcyBtb2R1bGVzICh0ZXN0aW5nIGFnYWluIHdpdGggdGhlbSBhcworbW9kdWxlcyksIGFuZCBwb3NzaWJseSBhbHNvIHRyeSBib290IHRpbWUgb3B0aW9ucyBzdWNoIGFzICJub2FwaWMiIG9yICJub2FjcGkiLgorCitiKSBUZXN0aW5nIG1pbmltYWwgY29uZmlndXJhdGlvbgorCitJZiB0aGUgdGVzdCBtb2RlIG9mIFNURCB3b3JrcywgeW91IGNhbiBib290IHRoZSBzeXN0ZW0gd2l0aCAiaW5pdD0vYmluL2Jhc2giCithbmQgYXR0ZW1wdCB0byBzdXNwZW5kIGluIHRoZSAicmVib290IiwgInNodXRkb3duIiBhbmQgInBsYXRmb3JtIiBtb2Rlcy4gIElmCit0aGF0IGRvZXMgbm90IHdvcmssIHRoZXJlIHByb2JhYmx5IGlzIGEgcHJvYmxlbSB3aXRoIGEgZHJpdmVyIHN0YXRpY2FsbHkKK2NvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBhbmQgeW91IGNhbiB0cnkgdG8gY29tcGlsZSBtb3JlIGRyaXZlcnMgYXMgbW9kdWxlcywKK3NvIHRoYXQgdGhleSBjYW4gYmUgdGVzdGVkIGluZGl2aWR1YWxseS4gIE90aGVyd2lzZSwgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggYQorbW9kdWxhciBkcml2ZXIgYW5kIHlvdSBjYW4gZmluZCBpdCBieSBsb2FkaW5nIGEgaGFsZiBvZiB0aGUgbW9kdWxlcyB5b3Ugbm9ybWFsbHkKK3VzZSBhbmQgYmluYXJ5IHNlYXJjaGluZyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGFsZ29yaXRobToKKy0gaWYgdGhlcmUgYXJlIG4gbW9kdWxlcyBsb2FkZWQgYW5kIHRoZSBhdHRlbXB0IHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBmYWlscywKK3VubG9hZCBuLzIgb2YgdGhlIG1vZHVsZXMgYW5kIHRyeSBhZ2FpbiAodGhhdCB3b3VsZCBwcm9iYWJseSBpbnZvbHZlIHJlYm9vdGluZwordGhlIHN5c3RlbSksCistIGlmIHRoZXJlIGFyZSBuIG1vZHVsZXMgbG9hZGVkIGFuZCB0aGUgYXR0ZW1wdCB0byBzdXNwZW5kIGFuZCByZXN1bWUgc3VjY2VlZHMsCitsb2FkIG4vMiBtb2R1bGVzIG1vcmUgYW5kIHRyeSBhZ2Fpbi4KKworQWdhaW4sIGlmIHlvdSBmaW5kIHRoZSBvZmZlbmRpbmcgbW9kdWxlKHMpLCBpdCh0aGV5KSBtdXN0IGJlIHVubG9hZGVkIGV2ZXJ5IHRpbWUKK2JlZm9yZSB0aGUgU1REIHRyYW5zaXRpb24sIGFuZCBwbGVhc2UgcmVwb3J0IHRoZSBwcm9ibGVtIHdpdGggaXQodGhlbSkuCisKK2MpIEFkdmFuY2VkIGRlYnVnZ2luZworCitJbiBjYXNlIHRoZSBTVEQgZG9lcyBub3Qgd29yayBvbiB5b3VyIHN5c3RlbSBldmVuIGluIHRoZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24KK2FuZCBjb21waWxpbmcgbW9yZSBkcml2ZXJzIGFzIG1vZHVsZXMgaXMgbm90IHByYWN0aWNhbCBvciBzb21lIG1vZHVsZXMgY2Fubm90CitiZSB1bmxvYWRlZCwgeW91IGNhbiB1c2Ugb25lIG9mIHRoZSBtb3JlIGFkdmFuY2VkIGRlYnVnZ2luZyB0ZWNobmlxdWVzIHRvIGZpbmQKK3RoZSBwcm9ibGVtLiAgRmlyc3QsIGlmIHRoZXJlIGlzIGEgc2VyaWFsIHBvcnQgaW4geW91ciBib3gsIHlvdSBjYW4gc2V0IHRoZQorQ09ORklHX0RJU0FCTEVfQ09OU09MRV9TVVNQRU5EIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdHJ5IHRvIGxvZyBrZXJuZWwKK21lc3NhZ2VzIHVzaW5nIHRoZSBzZXJpYWwgY29uc29sZS4gIFRoaXMgbWF5IHByb3ZpZGUgeW91IHdpdGggc29tZSBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIHJlYXNvbnMgb2YgdGhlIHN1c3BlbmQgKHJlc3VtZSkgZmFpbHVyZS4gIEFsdGVybmF0aXZlbHksIGl0IG1heSBiZQorcG9zc2libGUgdG8gdXNlIGEgRmlyZVdpcmUgcG9ydCBmb3IgZGVidWdnaW5nIHdpdGggZmlyZXNjb3BlCisoZnRwOi8vZnRwLmZpcnN0Zmxvb3Iub3JnL3B1Yi9hay9maXJlc2NvcGUvKS4gIE9uIGkzODYgaXQgaXMgYWxzbyBwb3NzaWJsZSB0bwordXNlIHRoZSBQTV9UUkFDRSBtZWNoYW5pc20gZG9jdW1lbnRlZCBpbiBEb2N1bWVudGF0aW9uL3MycmFtLnR4dCAuCisKKzIuIFRlc3Rpbmcgc3VzcGVuZCB0byBSQU0gKFNUUikKKworVG8gdmVyaWZ5IHRoYXQgdGhlIFNUUiB3b3JrcywgaXQgaXMgZ2VuZXJhbGx5IG1vcmUgY29udmVuaWVudCB0byB1c2UgdGhlIHMycmFtCit0b29sIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9zdXNwZW5kLnNmLm5ldCBhbmQgZG9jdW1lbnRlZCBhdAoraHR0cDovL2VuLm9wZW5zdXNlLm9yZy9zMnJhbSAuICBIb3dldmVyLCBiZWZvcmUgZG9pbmcgdGhhdCBpdCBpcyByZWNvbW1lbmRlZCB0bworY2Fycnkgb3V0IHRoZSBwcm9jZWR1cmUgZGVzY3JpYmVkIGluIHNlY3Rpb24gMS4KKworQXNzdW1lIHlvdSBoYXZlIHJlc29sdmVkIHRoZSBwcm9ibGVtcyB3aXRoIHRoZSBTVEQgYW5kIHlvdSBoYXZlIGZvdW5kIHNvbWUKK2ZhaWxpbmcgZHJpdmVycy4gIFRoZXNlIGRyaXZlcnMgYXJlIGFsc28gbGlrZWx5IHRvIGZhaWwgZHVyaW5nIHRoZSBTVFIgb3IKK2R1cmluZyB0aGUgcmVzdW1lLCBzbyBpdCBpcyBiZXR0ZXIgdG8gdW5sb2FkIHRoZW0gZXZlcnkgdGltZSBiZWZvcmUgdGhlIFNUUgordHJhbnNpdGlvbi4gIE5vdywgeW91IGNhbiBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBhdAoraHR0cDovL2VuLm9wZW5zdXNlLm9yZy9zMnJhbSB0byB0ZXN0IHRoZSBzeXN0ZW0sIGJ1dCBpZiBpdCBkb2VzIG5vdCB3b3JrCisib3V0IG9mIHRoZSBib3giLCB5b3UgbWF5IG5lZWQgdG8gYm9vdCBpdCB3aXRoICJpbml0PS9iaW4vYmFzaCIgYW5kIHRlc3QKK3MycmFtIGluIHRoZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24uICBJbiB0aGF0IGNhc2UsIHlvdSBtYXkgYmUgYWJsZSB0byBzZWFyY2gKK2ZvciBmYWlsaW5nIGRyaXZlcnMgYnkgZm9sbG93aW5nIHRoZSBwcm9jZWR1cmUgYW5hbG9nb3VzIHRvIHRoZSBvbmUgZGVzY3JpYmVkIGluCisxYikuICBJZiB5b3UgZmluZCBzb21lIGZhaWxpbmcgZHJpdmVycywgeW91IHdpbGwgaGF2ZSB0byB1bmxvYWQgdGhlbSBldmVyeSB0aW1lCitiZWZvcmUgdGhlIFNUUiB0cmFuc2l0aW9uIChpZS4gYmVmb3JlIHlvdSBydW4gczJyYW0pLCBhbmQgcGxlYXNlIHJlcG9ydCB0aGUKK3Byb2JsZW1zIHdpdGggdGhlbS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvZHJpdmVycy10ZXN0aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvZHJpdmVycy10ZXN0aW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzAxNmMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9kcml2ZXJzLXRlc3RpbmcudHh0CkBAIC0wLDAgKzEsNDIgQEAKK1Rlc3Rpbmcgc3VzcGVuZCBhbmQgcmVzdW1lIHN1cHBvcnQgaW4gZGV2aWNlIGRyaXZlcnMKKwkoQykgMjAwNyBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBHUEwKKworMS4gUHJlcGFyaW5nIHRoZSB0ZXN0IHN5c3RlbQorCitVbmZvcnR1bmF0ZWx5LCB0byBlZmZlY3RpdmVseSB0ZXN0IHRoZSBzdXBwb3J0IGZvciB0aGUgc3lzdGVtLXdpZGUgc3VzcGVuZCBhbmQKK3Jlc3VtZSB0cmFuc2l0aW9ucyBpbiBhIGRyaXZlciwgaXQgaXMgbmVjZXNzYXJ5IHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBhIGZ1bGx5CitmdW5jdGlvbmFsIHN5c3RlbSB3aXRoIHRoaXMgZHJpdmVyIGxvYWRlZC4gIE1vcmVvdmVyLCB0aGF0IHNob3VsZCBiZSBkb25lCitzZXZlcmFsIHRpbWVzLCBwcmVmZXJhYmx5IHNldmVyYWwgdGltZXMgaW4gYSByb3csIGFuZCBzZXBhcmF0ZWx5IGZvciB0aGUgc3VzcGVuZAordG8gZGlzayAoU1REKSBhbmQgdGhlIHN1c3BlbmQgdG8gUkFNIChTVFIpIHRyYW5zaXRpb25zLCBiZWNhdXNlIGVhY2ggb2YgdGhlc2UKK2Nhc2VzIGludm9sdmVzIGRpZmZlcmVudCBvcmRlcmluZyBvZiBvcGVyYXRpb25zIGFuZCBkaWZmZXJlbnQgaW50ZXJhY3Rpb25zIHdpdGgKK3RoZSBtYWNoaW5lJ3MgQklPUy4KKworT2YgY291cnNlLCBmb3IgdGhpcyBwdXJwb3NlIHRoZSB0ZXN0IHN5c3RlbSBoYXMgdG8gYmUga25vd24gdG8gc3VzcGVuZCBhbmQKK3Jlc3VtZSB3aXRob3V0IHRoZSBkcml2ZXIgYmVpbmcgdGVzdGVkLiAgVGh1cywgaWYgcG9zc2libGUsIHlvdSBzaG91bGQgZmlyc3QKK3Jlc29sdmUgYWxsIHN1c3BlbmQvcmVzdW1lLXJlbGF0ZWQgcHJvYmxlbXMgaW4gdGhlIHRlc3Qgc3lzdGVtIGJlZm9yZSB5b3Ugc3RhcnQKK3Rlc3RpbmcgdGhlIG5ldyBkcml2ZXIuICBQbGVhc2Ugc2VlIERvY3VtZW50cy9wb3dlci9iYXNpYy1wbS1kZWJ1Z2dpbmcudHh0IGZvcgorbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGVidWdnaW5nIG9mIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9uYWxpdHkuCisKKzIuIFRlc3RpbmcgdGhlIGRyaXZlcgorCitPbmNlIHlvdSBoYXZlIHJlc29sdmVkIHRoZSBzdXNwZW5kL3Jlc3VtZS1yZWxhdGVkIHByb2JsZW1zIHdpdGggeW91ciB0ZXN0IHN5c3RlbQord2l0aG91dCB0aGUgbmV3IGRyaXZlciwgeW91IGFyZSByZWFkeSB0byB0ZXN0IGl0OgorCithKSBCdWlsZCB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCBsb2FkIGl0IGFuZCB0cnkgdGhlIFNURCBpbiB0aGUgdGVzdCBtb2RlIChzZWU6CitEb2N1bWVudHMvcG93ZXIvYmFzaWMtcG0tZGVidWdnaW5nLnR4dCwgMWEpKS4KKworYikgTG9hZCB0aGUgZHJpdmVyIGFuZCBhdHRlbXB0IHRvIHN1c3BlbmQgdG8gZGlzayBpbiB0aGUgInJlYm9vdCIsICJzaHV0ZG93biIKK2FuZCAicGxhdGZvcm0iIG1vZGVzIChzZWU6IERvY3VtZW50cy9wb3dlci9iYXNpYy1wbS1kZWJ1Z2dpbmcudHh0LCAxKS4KKworYykgQ29tcGlsZSB0aGUgZHJpdmVyIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBhbmQgdHJ5IHRoZSBTVEQgaW4gdGhlIHRlc3QgbW9kZS4KKworZCkgQXR0ZW1wdCB0byBzdXNwZW5kIHRvIGRpc2sgd2l0aCB0aGUgZHJpdmVyIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbAoraW4gdGhlICJyZWJvb3QiLCAic2h1dGRvd24iIGFuZCAicGxhdGZvcm0iIG1vZGVzLgorCitlKSBBdHRlbXB0IHRvIHN1c3BlbmQgdG8gUkFNIHVzaW5nIHRoZSBzMnJhbSB0b29sIHdpdGggdGhlIGRyaXZlciBsb2FkZWQgKHNlZToKK0RvY3VtZW50cy9wb3dlci9iYXNpYy1wbS1kZWJ1Z2dpbmcudHh0LCAyKS4gIEFzIGZhciBhcyB0aGUgU1RSIHRlc3RzIGFyZQorY29uY2VybmVkLCBpdCBzaG91bGQgbm90IG1hdHRlciB3aGV0aGVyIG9yIG5vdCB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbW9kdWxlLgorCitFYWNoIG9mIHRoZSBhYm92ZSB0ZXN0cyBzaG91bGQgYmUgcmVwZWF0ZWQgc2V2ZXJhbCB0aW1lcyBhbmQgdGhlIFNURCB0ZXN0cworc2hvdWxkIGJlIG1peGVkIHdpdGggdGhlIFNUUiB0ZXN0cy4gIElmIGFueSBvZiB0aGVtIGZhaWxzLCB0aGUgZHJpdmVyIGNhbm5vdCBiZQorcmVnYXJkZWQgYXMgc3VzcGVuZC9yZXN1bWUtc2FmZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLnR4dAppbmRleCBjNTViZDUwLi41YjhkNjk1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N3c3VzcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0CkBAIC00OCw3ICs0OCw3IEBACiAKIEFydGljbGUgYWJvdXQgZ29hbHMgYW5kIGltcGxlbWVudGF0aW9uIG9mIFNvZnR3YXJlIFN1c3BlbmQgZm9yIExpbnV4CiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotQXV0aG9yOiBHguFib3IgS3V0aQorQXV0aG9yOiBHwoLDoWJvciBLdXRpCiBMYXN0IHJldmlzZWQ6IDIwMDMtMTAtMjAgYnkgUGF2ZWwgTWFjaGVrCiAKIElkZWEgYW5kIGdvYWxzIHRvIGFjaGlldmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvdXNlcmxhbmQtc3dzdXNwLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvdXNlcmxhbmQtc3dzdXNwLnR4dAppbmRleCAwMDA1NTZjLi5lMDBjNmNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3VzZXJsYW5kLXN3c3VzcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci91c2VybGFuZC1zd3N1c3AudHh0CkBAIC05MywyMSArOTMsMjMgQEAKIAl0byByZXN1bWUgdGhlIHN5c3RlbSBmcm9tIFJBTSBpZiB0aGVyZSdzIGVub3VnaCBiYXR0ZXJ5IHBvd2VyIG9yIHJlc3RvcmUKIAlpdHMgc3RhdGUgb24gdGhlIGJhc2lzIG9mIHRoZSBzYXZlZCBzdXNwZW5kIGltYWdlIG90aGVyd2lzZSkKIAotU05BUFNIT1RfUE1PUFMgLSBlbmFibGUgdGhlIHVzYWdlIG9mIHRoZSBwbW9wcy0+cHJlcGFyZSwgcG1vcHMtPmVudGVyIGFuZAotCXBtb3BzLT5maW5pc2ggbWV0aG9kcyAodGhlIGluLWtlcm5lbCBzd3N1c3Aga25vd3MgdGhlc2UgYXMgdGhlICJwbGF0Zm9ybQotCW1ldGhvZCIpIHdoaWNoIGFyZSBuZWVkZWQgb24gbWFueSBtYWNoaW5lcyB0byAoYW1vbmcgb3RoZXJzKSBzcGVlZCB1cAotCXRoZSByZXN1bWUgYnkgbGV0dGluZyB0aGUgQklPUyBza2lwIHNvbWUgc3RlcHMgb3IgdG8gbGV0IHRoZSBzeXN0ZW0KLQlyZWNvZ25pc2UgdGhlIGNvcnJlY3Qgc3RhdGUgb2YgdGhlIGhhcmR3YXJlIGFmdGVyIHRoZSByZXN1bWUgKGluCi0JcGFydGljdWxhciBvbiBtYW55IG1hY2hpbmVzIHRoaXMgZW5zdXJlcyB0aGF0IHVucGx1Z2dlZCBBQwotCWFkYXB0ZXJzIGdldCBjb3JyZWN0bHkgZGV0ZWN0ZWQgYW5kIHRoYXQga2FjcGlkIGRvZXMgbm90IHJ1biB3aWxkIGFmdGVyCi0JdGhlIHJlc3VtZSkuICBUaGUgbGFzdCBpb2N0bCgpIGFyZ3VtZW50IGNhbiB0YWtlIG9uZSBvZiB0aGUgdGhyZWUKLQl2YWx1ZXMsIGRlZmluZWQgaW4ga2VybmVsL3Bvd2VyL3Bvd2VyLmg6CitTTkFQU0hPVF9QTU9QUyAtIGVuYWJsZSB0aGUgdXNhZ2Ugb2YgdGhlIGhpYmVybmF0aW9uX29wcy0+cHJlcGFyZSwKKwloaWJlcm5hdGVfb3BzLT5lbnRlciBhbmQgaGliZXJuYXRpb25fb3BzLT5maW5pc2ggbWV0aG9kcyAodGhlIGluLWtlcm5lbAorCXN3c3VzcCBrbm93cyB0aGVzZSBhcyB0aGUgInBsYXRmb3JtIG1ldGhvZCIpIHdoaWNoIGFyZSBuZWVkZWQgb24gbWFueQorCW1hY2hpbmVzIHRvIChhbW9uZyBvdGhlcnMpIHNwZWVkIHVwIHRoZSByZXN1bWUgYnkgbGV0dGluZyB0aGUgQklPUyBza2lwCisJc29tZSBzdGVwcyBvciB0byBsZXQgdGhlIHN5c3RlbSByZWNvZ25pc2UgdGhlIGNvcnJlY3Qgc3RhdGUgb2YgdGhlCisJaGFyZHdhcmUgYWZ0ZXIgdGhlIHJlc3VtZSAoaW4gcGFydGljdWxhciBvbiBtYW55IG1hY2hpbmVzIHRoaXMgZW5zdXJlcworCXRoYXQgdW5wbHVnZ2VkIEFDIGFkYXB0ZXJzIGdldCBjb3JyZWN0bHkgZGV0ZWN0ZWQgYW5kIHRoYXQga2FjcGlkIGRvZXMKKwlub3QgcnVuIHdpbGQgYWZ0ZXIgdGhlIHJlc3VtZSkuICBUaGUgbGFzdCBpb2N0bCgpIGFyZ3VtZW50IGNhbiB0YWtlIG9uZQorCW9mIHRoZSB0aHJlZSB2YWx1ZXMsIGRlZmluZWQgaW4ga2VybmVsL3Bvd2VyL3Bvd2VyLmg6CiAJUE1PUFNfUFJFUEFSRSAtIG1ha2UgdGhlIGtlcm5lbCBjYXJyeSBvdXQgdGhlCi0JCXBtX29wcy0+cHJlcGFyZShQTV9TVVNQRU5EX0RJU0spIG9wZXJhdGlvbgorCQloaWJlcm5hdGlvbl9vcHMtPnByZXBhcmUoKSBvcGVyYXRpb24KIAlQTU9QU19FTlRFUiAtIG1ha2UgdGhlIGtlcm5lbCBwb3dlciBvZmYgdGhlIHN5c3RlbSBieSBjYWxsaW5nCi0JCXBtX29wcy0+ZW50ZXIoUE1fU1VTUEVORF9ESVNLKQorCQloaWJlcm5hdGlvbl9vcHMtPmVudGVyKCkKIAlQTU9QU19GSU5JU0ggLSBtYWtlIHRoZSBrZXJuZWwgY2Fycnkgb3V0IHRoZQotCQlwbV9vcHMtPmZpbmlzaChQTV9TVVNQRU5EX0RJU0spIG9wZXJhdGlvbgorCQloaWJlcm5hdGlvbl9vcHMtPmZpbmlzaCgpIG9wZXJhdGlvbgorCU5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvbnN0YW50cyBhcmUgbWlzbmFtZWQgYmVjYXVzZSB0aGV5IHN1cmZhY2UKKwlpbnRlcm5hbCBrZXJuZWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IGhhdmUgY2hhbmdlZC4KIAogVGhlIGRldmljZSdzIHJlYWQoKSBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gdHJhbnNmZXIgdGhlIHNuYXBzaG90IGltYWdlIGZyb20KIHRoZSBrZXJuZWwuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBsaW1pdGF0aW9uczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKaW5kZXggMDMzYTNmMy4uYjQ5Y2UxNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKQEAgLTE0NDQsNyArMTQ0NCw3IEBACiAgICBCYXNpY2FsbHksIGl0IGlzIGEgYnVzIG9mIGRldmljZXMsIHRoYXQgY291bGQgYWN0IG1vcmUgb3IgbGVzcwogICAgYXMgYSBjb21wbGV0ZSBlbnRpdHkgKFVDQywgVVNCIGV0YyApLiBBbGwgb2YgdGhlbSBzaG91bGQgYmUgc2libGluZ3Mgb24KICAgIHRoZSAicm9vdCIgcWUgbm9kZSwgdXNpbmcgdGhlIGNvbW1vbiBwcm9wZXJ0aWVzIGZyb20gdGhlcmUuCi0gICBUaGUgZGVzY3JpcHRpb24gYmVsb3cgYXBwbGllcyB0byB0aGUgdGhlIHFlIG9mIE1QQzgzNjAgYW5kCisgICBUaGUgZGVzY3JpcHRpb24gYmVsb3cgYXBwbGllcyB0byB0aGUgcWUgb2YgTVBDODM2MCBhbmQKICAgIG1vcmUgbm9kZXMgYW5kIHByb3BlcnRpZXMgd291bGQgYmUgZXh0ZW5kZWQgaW4gdGhlIGZ1dHVyZS4KIAogICAgaSkgUm9vdCBRRSBkZXZpY2UKQEAgLTE1NjAsNiArMTU2MCw5IEBACiAgICAgIG5ldHdvcmsgZGV2aWNlLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZSBib290d3JhcHBlciB0byBpbnRlcnByZXQKICAgICAgTUFDIGFkZHJlc3NlcyBwYXNzZWQgYnkgdGhlIGZpcm13YXJlIHdoZW4gbm8gaW5mb3JtYXRpb24gb3RoZXIKICAgICAgdGhhbiBpbmRpY2VzIGlzIGF2YWlsYWJsZSB0byBhc3NvY2lhdGUgYW4gYWRkcmVzcyB3aXRoIGEgZGV2aWNlLgorICAgLSBwaHktY29ubmVjdGlvbi10eXBlIDogYSBzdHJpbmcgbmFtaW5nIHRoZSBjb250cm9sbGVyL1BIWSBpbnRlcmZhY2UgdHlwZSwKKyAgICAgaS5lLiwgIm1paSIgKGRlZmF1bHQpLCAicm1paSIsICJnbWlpIiwgInJnbWlpIiwgInJnbWlpLWlkIiwgInRiaSIsCisgICAgIG9yICJydGJpIi4KIAogICAgRXhhbXBsZToKIAl1Y2NAMjAwMCB7CkBAIC0xNTc0LDYgKzE1NzcsNyBAQAogCQlyeC1jbG9jayA9ICJub25lIjsKIAkJdHgtY2xvY2sgPSAiY2xrOSI7CiAJCXBoeS1oYW5kbGUgPSA8MjEyMDAwPjsKKwkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKIAkJcGlvLWhhbmRsZSA9IDwxNDAwMDE+OwogCX07CiAKQEAgLTE2MjksNyArMTYzMyw3IEBACiAgICAgIC0gYXNzaWdubWVudCA6IGZ1bmN0aW9uIG51bWJlciBvZiB0aGUgcGluIGFjY29yZGluZyB0byB0aGUgUGluIEFzc2lnbm1lbnQKICAgICAgICB0YWJsZXMgaW4gVXNlciBNYW51YWwuICBFYWNoIHBpbiBjYW4gaGF2ZSB1cCB0byA0IHBvc3NpYmxlIGZ1bmN0aW9ucyBpbgogICAgICAgIFFFIGFuZCB0d28gb3B0aW9ucyBmb3IgQ1BNLgotICAgICAtIGhhc19pcnEgOiBpbmRpY2F0ZXMgaWYgdGhlIHBpbiBpcyB1c2VkIGFzIHNvdXJjZSBvZiBleHRlcmFsCisgICAgIC0gaGFzX2lycSA6IGluZGljYXRlcyBpZiB0aGUgcGluIGlzIHVzZWQgYXMgc291cmNlIG9mIGV4dGVybmFsCiAgICAgICAgaW50ZXJydXB0cy4KIAogICAgRXhhbXBsZToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcnRjLnR4dCBiL0RvY3VtZW50YXRpb24vcnRjLnR4dAppbmRleCAxZWY2YmI4Li43YzcwMWI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3J0Yy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ydGMudHh0CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogICAgICoJUlRDX0FJRV9PTiwgUlRDX0FJRV9PRkYsIFJUQ19BTE1fU0VULCBSVENfQUxNX1JFQUQgLi4uIHdoZW4gdGhlIFJUQwogCWlzIGNvbm5lY3RlZCB0byBhbiBJUlEgbGluZSwgaXQgY2FuIG9mdGVuIGlzc3VlIGFuIGFsYXJtIElSUSB1cCB0bwotCTI0IGhvdXJzIGluIHRoZSBmdXR1cmUuCisJMjQgaG91cnMgaW4gdGhlIGZ1dHVyZS4gIChVc2UgUlRDX1dLQUxNXyogYnkgcHJlZmVyZW5jZS4pCiAKICAgICAqCVJUQ19XS0FMTV9TRVQsIFJUQ19XS0FMTV9SRCAuLi4gUlRDcyB0aGF0IGNhbiBpc3N1ZSBhbGFybXMgYmV5b25kCiAJdGhlIG5leHQgMjQgaG91cnMgdXNlIGEgc2xpZ2h0bHkgbW9yZSBwb3dlcmZ1bCBBUEksIHdoaWNoIHN1cHBvcnRzCkBAIC0xNzUsMTAgKzE3NSw3IEBACiAJY2FsbGVkIHdpdGggYXBwcm9wcmlhdGUgdmFsdWVzLgogCiAgICAgKglSVENfQUxNX1NFVCwgUlRDX0FMTV9SRUFELCBSVENfV0tBTE1fU0VULCBSVENfV0tBTE1fUkQ6IHRoZQotCXNldF9hbGFybS9yZWFkX2FsYXJtIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZC4gIFRvIGRpZmZlcmVudGlhdGUKLQliZXR3ZWVuIHRoZSBBTE0gYW5kIFdLQUxNLCBjaGVjayB0aGUgbGFyZ2VyIGZpZWxkcyBvZiB0aGUgcnRjX3drYWxybQotCXN0cnVjdCAobGlrZSB0bV95ZWFyKS4gIFRoZXNlIHdpbGwgYmUgc2V0IHRvIC0xIHdoZW4gdXNpbmcgQUxNIGFuZAotCXdpbGwgYmUgc2V0IHRvIHByb3BlciB2YWx1ZXMgd2hlbiB1c2luZyBXS0FMTS4KKwlzZXRfYWxhcm0vcmVhZF9hbGFybSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQuCiAKICAgICAqCVJUQ19JUlFQX1NFVCwgUlRDX0lSUVBfUkVBRDogdGhlIGlycV9zZXRfZnJlcSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZAogCXRvIHNldCB0aGUgZnJlcXVlbmN5IHdoaWxlIHRoZSBmcmFtZXdvcmsgd2lsbCBoYW5kbGUgdGhlIHJlYWQgZm9yIHlvdQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL0RlYnVnZ2luZzM5MC50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dAppbmRleCAwOTkzOTY5Ni4uZDMwYTI4MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zMzkwL0RlYnVnZ2luZzM5MC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL0RlYnVnZ2luZzM5MC50eHQKQEAgLTIyMDksNyArMjIwOSw3IEBACiAjMyAgMHg1MTY3ZTYgaW4gcmVhZGxpbmVfaW50ZXJuYWxfY2hhciAoKSBhdCByZWFkbGluZS5jOjQ1NAogIzQgIDB4NTE2OGVlIGluIHJlYWRsaW5lX2ludGVybmFsX2NoYXJsb29wICgpIGF0IHJlYWRsaW5lLmM6NTA3CiAjNSAgMHg1MTY5MmMgaW4gcmVhZGxpbmVfaW50ZXJuYWwgKCkgYXQgcmVhZGxpbmUuYzo1MjEKLSM2ICAweDUxNjRmZSBpbiByZWFkbGluZSAocHJvbXB0PTB4N2ZmZmY4MTAgIlwxNzeB/4H4eFwxNzeB/4H3gdhcMTc3gf+B+HiBwCIpCisjNiAgMHg1MTY0ZmUgaW4gcmVhZGxpbmUgKHByb21wdD0weDdmZmZmODEwICJcMTc3woHDv8KBw7h4XDE3N8KBw7/CgcO3woHDmFwxNzfCgcO/woHDuHjCgcOAIikKICAgICBhdCByZWFkbGluZS5jOjM0OQogIzcgIDB4NGQ3YThhIGluIGNvbW1hbmRfbGluZV9pbnB1dCAocHJyb21wdD0weDU2NDQyMCAiKGdkYikgIiwgcmVwZWF0PTEsCiAgICAgYW5ub3RhdGlvbl9zdWZmaXg9MHg0ZDZiNDQgInByb21wdCIpIGF0IHRvcC5jOjIwOTEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9jZHMudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL2Nkcy50eHQKaW5kZXggMDVhMmI0Zi4uNTg5MTlkNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zMzkwL2Nkcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL2Nkcy50eHQKQEAgLTUxLDEzICs1MSw4IEBACiAqIFRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgbXVzdCBiZSBhZGFwdGVkIHRvIHVzZSBhIGNjd19kZXZpY2UgYXMgYXJndW1lbnQuCiAgIE1vcmVvdmVyLCB0aGV5IGRvbid0IHJldHVybiBhIGRldnN0YXQsIGJ1dCBhbiBpcmIuCiAqIEJlZm9yZSBpbml0aWF0aW5nIGFuIGlvLCB0aGUgb3B0aW9ucyBtdXN0IGJlIHNldCB2aWEgY2N3X2RldmljZV9zZXRfb3B0aW9ucygpLgotCi1yZWFkX2Rldl9jaGFycygpCQotICAgcmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzCi0gICAKLXJlYWRfY29uZl9kYXRhKCkKLXJlYWRfY29uZl9kYXRhX2xwbSgpCi0gICByZWFkIGNvbmZpZ3VyYXRpb24gZGF0YS4KKyogSW5zdGVhZCBvZiBjYWxsaW5nIHJlYWRfZGV2X2NoYXJzKCkvcmVhZF9jb25mX2RhdGEoKSwgdGhlIGRyaXZlciBpc3N1ZXMKKyAgdGhlIGNoYW5uZWwgcHJvZ3JhbSBhbmQgaGFuZGxlcyB0aGUgaW50ZXJydXB0IGl0c2VsZi4KIAogY2N3X2RldmljZV9nZXRfY2l3KCkKICAgIGdldCBjb21tYW5kcyBmcm9tIGV4dGVuZGVkIHNlbnNlIGRhdGEuCkBAIC0xMzAsMTEgKzEyNSw2IEBACiBoYXMgdG8gY2FsbCBldmVyeSBzaW5nbGUgZGV2aWNlIGRyaXZlciByZWdpc3RlcmVkIG9uIHRoaXMgSVJRIGluIG9yZGVyIHRvCiBkZXRlcm1pbmUgdGhlIGRldmljZSBkcml2ZXIgb3duaW5nIHRoZSBkZXZpY2UgdGhhdCByYWlzZWQgdGhlIGludGVycnVwdC4KIAotSW4gb3JkZXIgbm90IHRvIGludHJvZHVjZSBhIG5ldyBJL08gY29uY2VwdCB0byB0aGUgY29tbW9uIExpbnV4IGNvZGUsCi1MaW51eC8zOTAgcHJlc2VydmVzIHRoZSBJUlEgY29uY2VwdCBhbmQgc2VtYW50aWNhbGx5IG1hcHMgdGhlIEVTQS8zOTAKLXN1YmNoYW5uZWxzIHRvIExpbnV4IGFzIElSUXMuIFRoaXMgYWxsb3dzIExpbnV4LzM5MCB0byBzdXBwb3J0IHVwIHRvIDY0awotZGlmZmVyZW50IElSUXMsIHVuaXF1ZWx5IHJlcHJlc2VudGluZyBhIHNpbmdsZSBkZXZpY2UgZWFjaC4KLQogVXAgdG8ga2VybmVsIDIuNCwgTGludXgvMzkwIHVzZWQgdG8gcHJvdmlkZSBpbnRlcmZhY2VzIHZpYSB0aGUgSVJRIChzdWJjaGFubmVsKS4KIEZvciBpbnRlcm5hbCB1c2Ugb2YgdGhlIGNvbW1vbiBJL08gbGF5ZXIsIHRoZXNlIGFyZSBzdGlsbCB0aGVyZS4gSG93ZXZlciwgCiBkZXZpY2UgZHJpdmVycyBzaG91bGQgdXNlIHRoZSBuZXcgY2FsbGluZyBpbnRlcmZhY2UgdmlhIHRoZSBjY3dfZGV2aWNlIG9ubHkuCkBAIC0xNTEsOSArMTQxLDggQEAKIHN1cHBvcnQgdXNpbmcgdGhlIGluZm9ybWF0aW9uIHNhdmVkIGluIHRoZSBzdHJ1Y3QgY2N3X2RldmljZSBnaXZlbiB0byB0aGVtLgogVGhpcyBtZXRob2RzIGltcGxpZXMgdGhhdCBMaW51eC8zOTAgZG9lc24ndCByZXF1aXJlIHRvIHByb2JlIGZvciBmcmVlIChub3QKIGFybWVkKSBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcyAoSVJRcykgdG8gZHJpdmUgaXRzIGRldmljZXMgd2l0aC4gV2hlcmUKLWFwcGxpY2FibGUsIHRoZSBkZXZpY2UgZHJpdmVycyBjYW4gdXNlIHRoZSByZWFkX2Rldl9jaGFycygpIHRvIHJldHJpZXZlIGRldmljZQotY2hhcmFjdGVyaXN0aWNzLiBUaGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgaGF2aW5nIHRvIHJlcXVlc3QgZGV2aWNlIG93bmVyc2hpcAotcHJldmlvdXNseS4KK2FwcGxpY2FibGUsIHRoZSBkZXZpY2UgZHJpdmVycyBjYW4gdXNlIGlzc3VlIHRoZSBSRUFEIERFVklDRSBDSEFSQUNURVJJU1RJQ1MKK2NjdyB0byByZXRyaWV2ZSBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIGluIGl0cyBvbmxpbmUgcm91dGluZS4KIAogSW4gb3JkZXIgdG8gYWxsb3cgZm9yIGVhc3kgSS9PIGluaXRpYXRpb24gdGhlIENEUyBsYXllciBwcm92aWRlcyBhCiBjY3dfZGV2aWNlX3N0YXJ0KCkgaW50ZXJmYWNlIHRoYXQgdGFrZXMgYSBkZXZpY2Ugc3BlY2lmaWMgY2hhbm5lbCBwcm9ncmFtIChvbmUKQEAgLTE3MCw2OSArMTU5LDYgQEAKIGFsc28gY292ZXJlZCBieSBjY3dfZGV2aWNlX2hhbHQoKS4KIAogCi1yZWFkX2Rldl9jaGFycygpIC0gUmVhZCBEZXZpY2UgQ2hhcmFjdGVyaXN0aWNzCi0KLVRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBjaGFyYWN0ZXJpc3RpY3MgZm9yIHRoZSBkZXZpY2Ugc3BlY2lmaWVkLgotCi1UaGUgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgY2FsbGVkIHdpdGggdGhlIGRldmljZSBhbHJlYWR5IGVuYWJsZWQ7IHRoYXQgaXMsCi1hdCBlYXJsaWVzdCBkdXJpbmcgc2V0X29ubGluZSgpIHByb2Nlc3NpbmcuCi0KLVRoZSBjY3dfZGV2aWNlIG11c3Qgbm90IGJlIGxvY2tlZCBwcmlvciB0byBjYWxsaW5nIHJlYWRfZGV2X2NoYXJzKCkuCi0KLVRoZSBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGVuYWJsZWQgb3IgZGlzYWJsZWQuCi0KLWludCByZWFkX2Rldl9jaGFycyhzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgdm9pZCAqKmJ1ZmZlciwgaW50IGxlbmd0aCApOwotCi1jZGV2ICAgLSB0aGUgY2N3X2RldmljZSB0aGUgaW5mb3JtYXRpb24gaXMgcmVxdWVzdGVkIGZvci4KLWJ1ZmZlciAtIHBvaW50ZXIgdG8gYSBidWZmZXIgcG9pbnRlci4gVGhlIGJ1ZmZlciBwb2ludGVyIGl0c2VsZgotICAgICAgICAgbXVzdCBjb250YWluIGEgdmFsaWQgYnVmZmVyIGFyZWEuCi1sZW5ndGggLSBsZW5ndGggb2YgdGhlIGJ1ZmZlciBwcm92aWRlZC4KLQotVGhlIHJlYWRfZGV2X2NoYXJzKCkgZnVuY3Rpb24gcmV0dXJucyA6Ci0KLSAgICAgIDAgLSBzdWNjZXNzZnVsIGNvbXBsZXRpb24KLS1FTk9ERVYgLSBjZGV2IGludmFsaWQKLS1FSU5WQUwgLSBhbiBpbnZhbGlkIHBhcmFtZXRlciB3YXMgZGV0ZWN0ZWQsIG9yIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkIGVhcmx5LgotLUVCVVNZICAtIGFuIGlycmVjb3ZlcmFibGUgSS9PIGVycm9yIG9jY3VycmVkIG9yIHRoZSBkZXZpY2UgaXMgbm90Ci0gICAgICAgICAgb3BlcmF0aW9uYWwuCi0KLQotcmVhZF9jb25mX2RhdGEoKSwgcmVhZF9jb25mX2RhdGFfbHBtKCkgLSBSZWFkIENvbmZpZ3VyYXRpb24gRGF0YQotCi1SZXRyaWV2ZSB0aGUgZGV2aWNlIGRlcGVuZGVudCBjb25maWd1cmF0aW9uIGRhdGEuIFBsZWFzZSBoYXZlIGEgbG9vayBhdCB5b3VyIAotZGV2aWNlIGRlcGVuZGVudCBJL08gY29tbWFuZHMgZm9yIHRoZSBkZXZpY2Ugc3BlY2lmaWMgbGF5b3V0IG9mIHRoZSBub2RlIAotZGVzY3JpcHRvciBlbGVtZW50cy4gcmVhZF9jb25mX2RhdGFfbHBtKCkgd2lsbCByZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBkYXRhCi1mb3IgYSBzcGVjaWZpYyBwYXRoLgotCi1UaGUgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgY2FsbGVkIHdpdGggdGhlIGRldmljZSBhbHJlYWR5IGVuYWJsZWQ7IHRoYXQgaXMsCi1hdCBlYXJsaWVzdCBkdXJpbmcgc2V0X29ubGluZSgpIHByb2Nlc3NpbmcuCi0KLVRoZSBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGJ1dCB0aGUgZGV2aWNlIG11c3Qgbm90IGJlCi1sb2NrZWQKLQotaW50IHJlYWRfY29uZl9kYXRhKHN0cnVjdCBjY3dfZGV2aWNlLCB2b2lkICoqYnVmZmVyLCBpbnQgKmxlbmd0aCk7Ci1pbnQgcmVhZF9jb25mX2RhdGFfbHBtKHN0cnVjdCBjY3dfZGV2aWNlLCB2b2lkICoqYnVmZmVyLCBpbnQgKmxlbmd0aCwgX191OCBscG0pOwotCi1jZGV2ICAgLSB0aGUgY2N3X2RldmljZSB0aGUgZGF0YSBpcyByZXF1ZXN0ZWQgZm9yLgotYnVmZmVyIC0gUG9pbnRlciB0byBhIGJ1ZmZlciBwb2ludGVyLiBUaGUgcmVhZF9jb25mX2RhdGEoKSByb3V0aW5lCi0gICAgICAgICB3aWxsIGFsbG9jYXRlIGEgYnVmZmVyIGFuZCBpbml0aWFsaXplIHRoZSBidWZmZXIgcG9pbnRlcgotICAgICAgICAgYWNjb3JkaW5nbHkuIEl0J3MgdGhlIGRldmljZSBkcml2ZXIncyByZXNwb25zaWJpbGl0eSB0bwotICAgICAgICAgcmVsZWFzZSB0aGUga2VybmVsIG1lbW9yeSBpZiBubyBsb25nZXIgbmVlZGVkLiAKLWxlbmd0aCAtIExlbmd0aCBvZiB0aGUgYnVmZmVyIGFsbG9jYXRlZCBhbmQgcmV0cmlldmVkLgotbHBtICAgIC0gTG9naWNhbCBwYXRoIG1hc2sgdG8gYmUgdXNlZCBmb3IgcmV0cmlldmluZyB0aGUgZGF0YS4gSWYKLSAgICAgICAgIHplcm8gdGhlIGRhdGEgaXMgcmV0cmlldmVkIG9uIHRoZSBuZXh0IHBhdGggYXZhaWxhYmxlLgotCi1UaGUgcmVhZF9jb25mX2RhdGEoKSBmdW5jdGlvbiByZXR1cm5zIDoKLSAgICAgICAgICAwIC0gU3VjY2Vzc2Z1bCBjb21wbGV0aW9uCi0tRU5PREVWICAgICAtIGNkZXYgaW52YWxpZC4KLS1FSU5WQUwgICAgIC0gQW4gaW52YWxpZCBwYXJhbWV0ZXIgd2FzIGRldGVjdGVkLCBvciB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCBlYXJseS4KLS1FSU8gICAgICAgIC0gQW4gaXJyZWNvdmVyYWJsZSBJL08gZXJyb3Igb2NjdXJyZWQgb3IgdGhlIGRldmljZSBpcwotICAgICAgICAgICAgICBub3Qgb3BlcmF0aW9uYWwuCi0tRU5PTUVNICAgICAtIFRoZSByZWFkX2NvbmZfZGF0YSgpIHJvdXRpbmUgY291bGRuJ3Qgb2J0YWluIHN0b3JhZ2UuCi0tRU9QTk9UU1VQUCAtIFRoZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHRoZSByZWFkIGNvbmZpZ3VyYXRpb24gCi0gICAgICAgICAgICAgIGRhdGEgY29tbWFuZC4KLQotCiBnZXRfY2l3KCkgLSBnZXQgY29tbWFuZCBpbmZvcm1hdGlvbiB3b3JkCiAKIFRoaXMgY2FsbCBlbmFibGVzIGEgZGV2aWNlIGRyaXZlciB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgc3VwcG9ydGVkIGNvbW1hbmRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWFjcmFpZC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWFjcmFpZC50eHQKaW5kZXggMjM2OGU3ZS4uY2UzY2I0MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FhY3JhaWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9hYWNyYWlkLnR4dApAQCAtOTgsOCArOTgsOCBAQAogCTkwMDU6MDI4NTo5MDA1OjAyYjAJCShTdW5yaXNlIExha2UgQVJLKQogCTkwMDU6MDI4NTo5MDA1OjAyYjEJQWRhcHRlYwkoVm9vZG9vIDggaW50ZXJuYWwgOCBleHRlcm5hbCkKIAk5MDA1OjAyODU6MTA4ZTo3YWFjCVNVTglTVEsgUkFJRCBSRU0gKFZvb2RvbzQ0IENveW90ZSkKLQk5MDA1OjAyODU6MTA4ZTowMjg2CVNVTglTRy1YUENJRVNBUy1SLUlOIChDb3VnYXIpCi0JOTAwNTowMjg1OjEwOGU6MDI4NwlTVU4JU0ctWFBDSUVTQVMtUi1FWCAoUHJvbWV0aGV1cykKKwk5MDA1OjAyODU6MTA4ZTowMjg2CVNVTglTVEsgUkFJRCBJTlQgKENvdWdhcikKKwk5MDA1OjAyODU6MTA4ZTowMjg3CVNVTglTVEsgUkFJRCBFWFQgKFByb21ldGhldXMpCiAKIFBlb3BsZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FoYTE1MngudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FoYTE1MngudHh0CmluZGV4IDJjZTAyMmMuLjI5Y2U2ZDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9haGExNTJ4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQKQEAgLTEsNyArMSw3IEBACiAkSWQ6IFJFQURNRS5haGExNTJ4LHYgMS4yIDE5OTkvMTIvMjUgMTU6MzI6MzAgZmlzY2hlciBFeHAgZmlzY2hlciAkCiBBZGFwdGVjIEFIQS0xNTIwLzE1MjIgU0NTSSBkcml2ZXIgZm9yIExpbnV4IChhaGExNTJ4KQogCi1Db3B5cmlnaHQgMTk5My0xOTk5IEr8cmdlbiBGaXNjaGVyIDxmaXNjaGVyQG5vcmJpdC5kZT4KK0NvcHlyaWdodCAxOTkzLTE5OTkgSsO8cmdlbiBGaXNjaGVyIDxmaXNjaGVyQG5vcmJpdC5kZT4KIFRDMTU1MCBwYXRjaGVzIGJ5IEx1dWsgdmFuIERpamsgKGxkekB4czRhbGwubmwpCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHgudHh0CmluZGV4IDliODk0ZjEuLjVmMzRkMmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWljN3h4eC50eHQKQEAgLTQwLDcgKzQwLDcgQEAKICAgIDIuICAgTXVsdGktZnVuY3Rpb24gVHdpbiBDaGFubmVsIERldmljZSAtIFR3byBjb250cm9sbGVycyBvbiBvbmUgY2hpcC4KICAgIDMuICAgQ29tbWFuZCBDaGFubmVsIFNlY29uZGFyeSBETUEgRW5naW5lIC0gQWxsb3dzIHNjYXR0ZXIgZ2F0aGVyIGxpc3QKICAgICAgICAgYW5kIFNDQiBwcmVmZXRjaC4KLSAgIDQuICAgNjQgQnl0ZSBTQ0IgU3VwcG9ydCAtIEFsbG93cyBkaXNjb25uZWN0ZWQsIHVudHRhZ2dlZCByZXF1ZXN0IHRhYmxlCisgICA0LiAgIDY0IEJ5dGUgU0NCIFN1cHBvcnQgLSBBbGxvd3MgZGlzY29ubmVjdGVkLCB1bnRhZ2dlZCByZXF1ZXN0IHRhYmxlCiAgICAgICAgIGZvciBhbGwgcG9zc2libGUgdGFyZ2V0L2x1biBjb21iaW5hdGlvbnMuCiAgICA1LiAgIEJsb2NrIE1vdmUgSW5zdHJ1Y3Rpb24gU3VwcG9ydCAtIERvdWJsZXMgdGhlIHNwZWVkIG9mIGNlcnRhaW4KICAgICAgICAgc2VxdWVuY2VyIG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljN3h4eF9vbGQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHhfb2xkLnR4dAppbmRleCAwNTY2N2U3Li43YmQyMTBhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljN3h4eF9vbGQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4X29sZC50eHQKQEAgLTM1Niw3ICszNTYsNyBAQAogICAgICAgICBvciBlbmFibGUgVGFnZ2VkIENvbW1hbmQgUXVldWVpbmcgKFRDUSkgb24gc3BlY2lmaWMgZGV2aWNlcy4gIEFzIG9mCiAJZHJpdmVyIHZlcnNpb24gNS4xLjExLCBUQ1EgaXMgbm93IGVpdGhlciBvbiBvciBvZmYgYnkgZGVmYXVsdAogCWFjY29yZGluZyB0byB0aGUgc2V0dGluZyB5b3UgY2hvb3NlIGR1cmluZyB0aGUgbWFrZSBjb25maWcgcHJvY2Vzcy4KLQlJbiBvcmRlciB0byBlbi9kaXNhYmxlIFRDUSBmb3IgY2VydGlhbiBkZXZpY2VzIGF0IGJvb3QgdGltZSwgYSB1c2VyCisJSW4gb3JkZXIgdG8gZW4vZGlzYWJsZSBUQ1EgZm9yIGNlcnRhaW4gZGV2aWNlcyBhdCBib290IHRpbWUsIGEgdXNlcgogCW1heSB1c2UgdGhpcyBib290IHBhcmFtLiAgVGhlIGRyaXZlciB3aWxsIHRoZW4gcGFyc2UgdGhpcyBtZXNzYWdlIG91dAogICAgICAgICBhbmQgZW4vZGlzYWJsZSB0aGUgc3BlY2lmaWMgZGV2aWNlIGVudHJpZXMgdGhhdCBhcmUgcHJlc2VudCBiYXNlZCB1cG9uCiAgICAgICAgIHRoZSB2YWx1ZSBnaXZlbi4gIFRoZSBwYXJhbSBsaW5lIGlzIHBhcnNlZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lcjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9uY3I1M2M4eHgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzh4eC50eHQKaW5kZXggODhlZjg4Yi4uMzlkNDA5YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzh4eC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzh4eC50eHQKQEAgLTEyNjAsNyArMTI2MCw3IEBACiAxNS4xIFByb2JsZW0gdHJhY2tpbmcKIAogTW9zdCBTQ1NJIHByb2JsZW1zIGFyZSBkdWUgdG8gYSBub24gY29uZm9ybWFudCBTQ1NJIGJ1cyBvciB0byBidWdneQotZGV2aWNlcy4gIElmIGluZm9ydHVuYXRlbHkgeW91IGhhdmUgU0NTSSBwcm9ibGVtcywgeW91IGNhbiBjaGVjayB0aGUKK2RldmljZXMuICBJZiB1bmZvcnR1bmF0ZWx5IHlvdSBoYXZlIFNDU0kgcHJvYmxlbXMsIHlvdSBjYW4gY2hlY2sgdGhlCiBmb2xsb3dpbmcgdGhpbmdzOgogCiAtIFNDU0kgYnVzIGNhYmxlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zdC50eHQKaW5kZXggM2MxMjQyMi4uYjdiZTk1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0CkBAIC0xLDUgKzEsNSBAQAogVGhpcyBmaWxlIGNvbnRhaW5zIGJyaWVmIGluZm9ybWF0aW9uIGFib3V0IHRoZSBTQ1NJIHRhcGUgZHJpdmVyLgotVGhlIGRyaXZlciBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSBLYWkgTeRraXNhcmEgKGVtYWlsCitUaGUgZHJpdmVyIGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEthaSBNw6RraXNhcmEgKGVtYWlsCiBLYWkuTWFraXNhcmFAa29sdW1idXMuZmkpCiAKIExhc3QgbW9kaWZpZWQ6IE1vbiBNYXIgIDcgMjE6MTQ6NDQgMjAwNSBieSBrYWkubWFraXNhcmEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M4eHhfMi50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3ltNTNjOHh4XzIudHh0CmluZGV4IDJjMTc0NWEuLjNkOWYwNmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M4eHhfMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N5bTUzYzh4eF8yLnR4dApAQCAtNTg3LDcgKzU4Nyw3IEBACiAxNS4xIFByb2JsZW0gdHJhY2tpbmcKIAogTW9zdCBTQ1NJIHByb2JsZW1zIGFyZSBkdWUgdG8gYSBub24gY29uZm9ybWFudCBTQ1NJIGJ1cyBvciB0b28gYnVnZ3kKLWRldmljZXMuICBJZiBpbmZvcnR1bmF0ZWx5IHlvdSBoYXZlIFNDU0kgcHJvYmxlbXMsIHlvdSBjYW4gY2hlY2sgdGhlCitkZXZpY2VzLiAgSWYgdW5mb3J0dW5hdGVseSB5b3UgaGF2ZSBTQ1NJIHByb2JsZW1zLCB5b3UgY2FuIGNoZWNrIHRoZQogZm9sbG93aW5nIHRoaW5nczoKIAogLSBTQ1NJIGJ1cyBjYWJsZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS90bXNjc2ltLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS90bXNjc2ltLnR4dAppbmRleCA4YjIxNjhhLi42MWMwNTMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvdG1zY3NpbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0CkBAIC00MjYsNyArNDI2LDcgQEAKIGFsbCB0aGUgb3RoZXJzIGZvciB0aGUgd29uZGVyZnVsIE9TIGFuZCBzb2Z0d2FyZS4KIFRoYW5rcyB0byBDLkwuIEh1YW5nIGFuZCBQaGlsaXAgR2lhbmcgKFRla3JhbSkgZm9yIHRoZSBpbml0aWFsIGRyaXZlcgogcmVsZWFzZSBhbmQgc3VwcG9ydC4KLVRoYW5rcyB0byBEb3VnIExlZGZvcmQsIEfpcmFyZCBSb3VkaWVyIGZvciBzdXBwb3J0IHdpdGggU0NTSSBjb2RpbmcuCitUaGFua3MgdG8gRG91ZyBMZWRmb3JkLCBHw6lyYXJkIFJvdWRpZXIgZm9yIHN1cHBvcnQgd2l0aCBTQ1NJIGNvZGluZy4KIFRoYW5rcyB0byBhIGxvdCBvZiBwZW9wbGUgKGVzcGVjLiBDaGlha2kgSXNoaWthd2EsIEFuZHJlYXMgSGF1bWVyLCBIdWJlcnQgCiBUb25uZWF1KSBmb3IgaW50ZW5zaXZlbHkgdGVzdGluZyB0aGUgZHJpdmVyIChhbmQgZXZlbiByaXNraW5nIGRhdGEgbG9zcwogZG9pbmcgdGhpcyBkdXJpbmcgZWFybHkgcmV2aXNpb25zKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc29ueXBpLnR4dCBiL0RvY3VtZW50YXRpb24vc29ueXBpLnR4dAppbmRleCBjMTIzN2E5Mi4uNDg1N2FjZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb255cGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc29ueXBpLnR4dApAQCAtMSw3ICsxLDcgQEAKIFNvbnkgUHJvZ3JhbW1hYmxlIEkvTyBDb250cm9sIERldmljZSBEcml2ZXIgUmVhZG1lCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCUNvcHlyaWdodCAoQykgMjAwMS0yMDA0IFN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+Ci0JQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgQWxj9HZlIDx3d3cuYWxjb3ZlLmNvbT4KKwlDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBBbGPDtHZlIDx3d3cuYWxjb3ZlLmNvbT4KIAlDb3B5cmlnaHQgKEMpIDIwMDEgTWljaGFlbCBBc2hsZXkgPG0uYXNobGV5QHVuc3cuZWR1LmF1PgogCUNvcHlyaWdodCAoQykgMjAwMSBKdW5pY2hpIE1vcml0YSA8anVuMW1AbWFycy5kdGkubmUuanA+CiAJQ29weXJpZ2h0IChDKSAyMDAwIFRha2F5YSBLaW5qbyA8dC1raW5qb0B0YzQuc28tbmV0Lm5lLmpwPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAppbmRleCA3M2U5YTE3Li4zNTVmZjBhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApAQCAtODIxLDYgKzgyMSw3IEBACiAJICA2c3RhY2stZGlnCTYtamFjayBkaWdpdGFsIHdpdGggU1BESUYgSS9PCiAJICBhcmltYQkJQXJpbWEgVzgyMERpMQogCSAgbWFjcHJvCU1hY1BybyBzdXBwb3J0CisJICB3MmpjCQlBU1VTIFcySkMKIAkgIGF1dG8JCWF1dG8tY29uZmlnIHJlYWRpbmcgQklPUyAoZGVmYXVsdCkKIAogCUFMQzg4My84ODgKQEAgLTg1Miw2ICs4NTMsNyBAQAogCSAgM3N0YWNrLWRpZwkzLWphY2sgd2l0aCBTUERJRiBPVVQKIAkgIDZzdGFjay1kaWcJNi1qYWNrIHdpdGggU1BESUYgT1VUCiAJICAzc3RhY2stNjYwCTMtamFjayAoZm9yIEFMQzY2MFZEKQorCSAgbGVub3ZvCUxlbm92byAzMDAwIEMyMDAKIAkgIGF1dG8JCWF1dG8tY29uZmlnIHJlYWRpbmcgQklPUyAoZGVmYXVsdCkKIAogCUNNSTk4ODAKQEAgLTkwOSwxMSArOTExLDEzIEBACiAJICBtYWNib29rCUludGVsIE1hYyBCb29rCiAJICBtYWNib29rLXByby12MSBJbnRlbCBNYWMgQm9vayBQcm8gMXN0IGdlbmVyYXRpb24KIAkgIG1hY2Jvb2stcHJvCUludGVsIE1hYyBCb29rIFBybyAybmQgZ2VuZXJhdGlvbgorCSAgaW1hYy1pbnRlbAlJbnRlbCBpTWFjCiAKIAlTVEFDOTIwMi85MjUwLzkyNTEKIAkgIHJlZgkJUmVmZXJlbmNlIGJvYXJkLCBiYXNlIGNvbmZpZwogCSAgbTItMgkJU29tZSBHYXRld2F5IE1YIHNlcmllcyBsYXB0b3BzCiAJICBtNgkJU29tZSBHYXRld2F5IE5YIHNlcmllcyBsYXB0b3BzCisJICBwYTYJCUdhdGV3YXkgTlg4NjAgc2VyaWVzCiAKIAlTVEFDOTIyNy85MjI4LzkyMjkvOTI3eAogCSAgcmVmCQlSZWZlcmVuY2UgYm9hcmQKQEAgLTkyNCw2ICs5MjgsMTAgQEAKIAkgIHZhaW8JCVNldHVwIGZvciBWQUlPIEZFNTUwRy9TWjExMAogCSAgdmFpby1hciBTZXR1cCBmb3IgVkFJTyBBUgogCisgICAgVGhlIG1vZGVsIG5hbWUgImdlbnJpYyIgaXMgdHJlYXRlZCBhcyBhIHNwZWNpYWwgY2FzZS4gIFdoZW4gdGhpcworICAgIG1vZGVsIGlzIGdpdmVuLCB0aGUgZHJpdmVyIHVzZXMgdGhlIGdlbmVyaWMgY29kZWMgcGFyc2VyIHdpdGhvdXQKKyAgICAiY29kZWMtcGF0Y2giLiAgSXQncyBzb21ldGltZXMgZ29vZCBmb3IgdGVzdGluZyBhbmQgZGVidWdnaW5nLgorCiAgICAgSWYgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBkb2Vzbid0IHdvcmsgYW5kIG9uZSBvZiB0aGUgYWJvdmUKICAgICBtYXRjaGVzIHdpdGggeW91ciBkZXZpY2UsIHJlcG9ydCBpdCB0b2dldGhlciB3aXRoIHRoZSBQQ0kKICAgICBzdWJzeXN0ZW0gSUQgKG91dHB1dCBvZiAibHNwY2kgLW52IikgdG8gQUxTQSBCVFMgb3IgYWxzYS1kZXZlbApAQCAtMTI3OCw2ICsxMjg2LDcgQEAKICAgICBwb3J0CS0gcG9ydCBudW1iZXIgb3IgLTEgKGRpc2FibGUpCiAgICAgaXJxCQktIElSUSBudW1iZXIgb3IgLTEgKGRpc2FibGUpCiAgICAgcG5wCQktIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKKyAgICB1YXJ0X2VudGVyCS0gSXNzdWUgVUFSVF9FTlRFUiBjb21tYW5kIGF0IG9wZW4gLSBib29sLCBkZWZhdWx0ID0gb24KIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGRldmljZXMgYW5kIFBuUC4KICAgICAKQEAgLTE2OTIsNiArMTcwMSwxNyBAQAogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcywgYXV0b3Byb2JlIGFuZCBob3RwbHVnZ2luZy4KIAorICBNb2R1bGUgc25kLXVzYi1jYWlhcQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBjYWlhcSBVQiBhdWRpbyBpbnRlcmZhY2VzLAorCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBSaWdLb250cm9sMgorCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBLb3JlIENvbnRyb2xsZXIKKwkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgQXVkaW8gS29udHJvbCAxCisJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEF1ZGlvIDggREoKKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGRldmljZXMsIGF1dG9wcm9iZSBhbmQgaG90cGx1Z2dpbmcuCisKICAgTW9kdWxlIHNuZC11c2ItdXN4MnkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjA0Niw0ICsyMDY2LDQgQEAKICAgICAgICBodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYnVncy8KIAogICBBTFNBIERldmVsb3BlcnMgTUwKLSAgICAgICBtYWlsdG86YWxzYS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKKyAgICAgICBtYWlsdG86YWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQnQ4N3gudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0J0ODd4LnR4dAppbmRleCAxMWVkYjJmLi5mMTU4Y2RlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQnQ4N3gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9CdDg3eC50eHQKQEAgLTM2LDggKzM2LDggQEAKIG90aGVyIHZhbHVlcyB0aGFuIHRoZSBkZWZhdWx0IDMyMDAwIChvZnRlbiBpdCdzIDQ0MTAwIG9yIDY0MDAwKS4KIAogSWYgeW91IGhhdmUgYW4gdW5rbm93biBjYXJkLCBwbGVhc2UgbWFpbCB0aGUgSUQgYW5kIGJvYXJkIG5hbWUgdG8KLTxhbHNhLWRldmVsQGxpc3RzLnNmLm5ldD4sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhdWRpbyBjYXB0dXJlIHdvcmtzIG9yCi1ub3QsIHNvIHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyIGtub3cgYWJvdXQgeW91ciBjYXJkLgorPGFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZz4sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhdWRpbyBjYXB0dXJlIHdvcmtzCitvciBub3QsIHNvIHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyIGtub3cgYWJvdXQgeW91ciBjYXJkLgogCiAKIEF1ZGlvIG1vZGVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9td2F2ZSBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL213YXZlCmluZGV4IDg1ODMzNGIuLjVmYmNiMTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL213YXZlCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL213YXZlCkBAIC0xNjMsNyArMTYzLDcgQEAKIERlZmF1bHQ9U0JQUk8KIAogUmVib290IHRvIFdpbmRvd3MgOTUgYW5kIGNob29zZSBMaW51eC4gV2hlbiBib290ZWQsIHVzZSBzbmRjb25maWcgdG8gY29uZmlndXJlCi10aGUgc291bmQgbW9kdWxlcyBhbmQgdm9pbOAgLSBUaGlua1BhZCBzb3VuZCB3aXRoIExpbnV4LgordGhlIHNvdW5kIG1vZHVsZXMgYW5kIHZvaWzDoCAtIFRoaW5rUGFkIHNvdW5kIHdpdGggTGludXguCiAKIE5vdyB0aGUgZ290Y2hhcyAtIHlvdSBjYW4gZWl0aGVyIGhhdmUgQ0Qgc291bmQgT1IgTWl4ZXJzIGJ1dCBub3QgYm90aC4gVGhhdCdzIGEKIHByb2JsZW0gd2l0aCB0aGUgU0IxLjUgKENEIHNvdW5kKSBvciBTQlBSTyAoTWl4ZXJzKSBzZXR0aW5ncy4gTm8gb25lIGtub3dzIHdoeQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQppbmRleCBlY2M3YzllLi43NmVhNmM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQorKysgYi9Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeQpAQCAtMSwyOCArMSwzMiBAQAogT3ZlcnZpZXcgb2YgTGludXgga2VybmVsIFNQSSBzdXBwb3J0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotMDItRGVjLTIwMDUKKzIxLU1heS0yMDA3CiAKIFdoYXQgaXMgU1BJPwogLS0tLS0tLS0tLS0tCiBUaGUgIlNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSIgKFNQSSkgaXMgYSBzeW5jaHJvbm91cyBmb3VyIHdpcmUgc2VyaWFsCiBsaW5rIHVzZWQgdG8gY29ubmVjdCBtaWNyb2NvbnRyb2xsZXJzIHRvIHNlbnNvcnMsIG1lbW9yeSwgYW5kIHBlcmlwaGVyYWxzLgorSXQncyBhIHNpbXBsZSAiZGUgZmFjdG8iIHN0YW5kYXJkLCBub3QgY29tcGxpY2F0ZWQgZW5vdWdoIHRvIGFjcXVpcmUgYQorc3RhbmRhcmRpemF0aW9uIGJvZHkuICBTUEkgdXNlcyBhIG1hc3Rlci9zbGF2ZSBjb25maWd1cmF0aW9uLgogCi1UaGUgdGhyZWUgc2lnbmFsIHdpcmVzIGhvbGQgYSBjbG9jayAoU0NMSywgb2Z0ZW4gb24gdGhlIG9yZGVyIG9mIDEwIE1IeiksCitUaGUgdGhyZWUgc2lnbmFsIHdpcmVzIGhvbGQgYSBjbG9jayAoU0NLLCBvZnRlbiBvbiB0aGUgb3JkZXIgb2YgMTAgTUh6KSwKIGFuZCBwYXJhbGxlbCBkYXRhIGxpbmVzIHdpdGggIk1hc3RlciBPdXQsIFNsYXZlIEluIiAoTU9TSSkgb3IgIk1hc3RlciBJbiwKIFNsYXZlIE91dCIgKE1JU08pIHNpZ25hbHMuICAoT3RoZXIgbmFtZXMgYXJlIGFsc28gdXNlZC4pICBUaGVyZSBhcmUgZm91cgogY2xvY2tpbmcgbW9kZXMgdGhyb3VnaCB3aGljaCBkYXRhIGlzIGV4Y2hhbmdlZDsgbW9kZS0wIGFuZCBtb2RlLTMgYXJlIG1vc3QKIGNvbW1vbmx5IHVzZWQuICBFYWNoIGNsb2NrIGN5Y2xlIHNoaWZ0cyBkYXRhIG91dCBhbmQgZGF0YSBpbjsgdGhlIGNsb2NrCi1kb2Vzbid0IGN5Y2xlIGV4Y2VwdCB3aGVuIHRoZXJlIGlzIGRhdGEgdG8gc2hpZnQuCitkb2Vzbid0IGN5Y2xlIGV4Y2VwdCB3aGVuIHRoZXJlIGlzIGEgZGF0YSBiaXQgdG8gc2hpZnQuICBOb3QgYWxsIGRhdGEgYml0cworYXJlIHVzZWQgdGhvdWdoOyBub3QgZXZlcnkgcHJvdG9jb2wgdXNlcyB0aG9zZSBmdWxsIGR1cGxleCBjYXBhYmlsaXRpZXMuCiAKLVNQSSBtYXN0ZXJzIG1heSB1c2UgYSAiY2hpcCBzZWxlY3QiIGxpbmUgdG8gYWN0aXZhdGUgYSBnaXZlbiBTUEkgc2xhdmUKK1NQSSBtYXN0ZXJzIHVzZSBhIGZvdXJ0aCAiY2hpcCBzZWxlY3QiIGxpbmUgdG8gYWN0aXZhdGUgYSBnaXZlbiBTUEkgc2xhdmUKIGRldmljZSwgc28gdGhvc2UgdGhyZWUgc2lnbmFsIHdpcmVzIG1heSBiZSBjb25uZWN0ZWQgdG8gc2V2ZXJhbCBjaGlwcwotaW4gcGFyYWxsZWwuICBBbGwgU1BJIHNsYXZlcyBzdXBwb3J0IGNoaXBzZWxlY3RzLiAgU29tZSBkZXZpY2VzIGhhdmUKK2luIHBhcmFsbGVsLiAgQWxsIFNQSSBzbGF2ZXMgc3VwcG9ydCBjaGlwc2VsZWN0czsgdGhleSBhcmUgdXN1YWxseSBhY3RpdmUKK2xvdyBzaWduYWxzLCBsYWJlbGVkIG5DU3ggZm9yIHNsYXZlICd4JyAoZS5nLiBuQ1MwKS4gIFNvbWUgZGV2aWNlcyBoYXZlCiBvdGhlciBzaWduYWxzLCBvZnRlbiBpbmNsdWRpbmcgYW4gaW50ZXJydXB0IHRvIHRoZSBtYXN0ZXIuCiAKLVVubGlrZSBzZXJpYWwgYnVzc2VzIGxpa2UgVVNCIG9yIFNNQlVTLCBldmVuIGxvdyBsZXZlbCBwcm90b2NvbHMgZm9yCitVbmxpa2Ugc2VyaWFsIGJ1c3NlcyBsaWtlIFVTQiBvciBTTUJ1cywgZXZlbiBsb3cgbGV2ZWwgcHJvdG9jb2xzIGZvcgogU1BJIHNsYXZlIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBub3QgaW50ZXJvcGVyYWJsZSBiZXR3ZWVuIHZlbmRvcnMKLShleGNlcHQgZm9yIGNhc2VzIGxpa2UgU1BJIG1lbW9yeSBjaGlwcykuCisoZXhjZXB0IGZvciBjb21tb2RpdGllcyBsaWtlIFNQSSBtZW1vcnkgY2hpcHMpLgogCiAgIC0gU1BJIG1heSBiZSB1c2VkIGZvciByZXF1ZXN0L3Jlc3BvbnNlIHN0eWxlIGRldmljZSBwcm90b2NvbHMsIGFzIHdpdGgKICAgICB0b3VjaHNjcmVlbiBzZW5zb3JzIGFuZCBtZW1vcnkgY2hpcHMuCkBAIC0zMyw2ICszNywxMSBAQAogICAtIFNvbWUgZGV2aWNlcyBtYXkgdXNlIGVpZ2h0IGJpdCB3b3Jkcy4gIE90aGVycyBtYXkgZGlmZmVyZW50IHdvcmQKICAgICBsZW5ndGhzLCBzdWNoIGFzIHN0cmVhbXMgb2YgMTItYml0IG9yIDIwLWJpdCBkaWdpdGFsIHNhbXBsZXMuCiAKKyAgLSBXb3JkcyBhcmUgdXN1YWxseSBzZW50IHdpdGggdGhlaXIgbW9zdCBzaWduaWZpY2FudCBiaXQgKE1TQikgZmlyc3QsCisgICAgYnV0IHNvbWV0aW1lcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpIGdvZXMgZmlyc3QgaW5zdGVhZC4KKworICAtIFNvbWV0aW1lcyBTUEkgaXMgdXNlZCB0byBkYWlzeS1jaGFpbiBkZXZpY2VzLCBsaWtlIHNoaWZ0IHJlZ2lzdGVycy4KKwogSW4gdGhlIHNhbWUgd2F5LCBTUEkgc2xhdmVzIHdpbGwgb25seSByYXJlbHkgc3VwcG9ydCBhbnkga2luZCBvZiBhdXRvbWF0aWMKIGRpc2NvdmVyeS9lbnVtZXJhdGlvbiBwcm90b2NvbC4gIFRoZSB0cmVlIG9mIHNsYXZlIGRldmljZXMgYWNjZXNzaWJsZSBmcm9tCiBhIGdpdmVuIFNQSSBtYXN0ZXIgd2lsbCBub3JtYWxseSBiZSBzZXQgdXAgbWFudWFsbHksIHdpdGggY29uZmlndXJhdGlvbgpAQCAtNDQsNiArNTMsMTQgQEAKIFNlcmlhbCBQcm90b2NvbCIpLCBQU1AgKCJQcm9ncmFtbWFibGUgU2VyaWFsIFByb3RvY29sIiksIGFuZCBvdGhlcgogcmVsYXRlZCBwcm90b2NvbHMuCiAKK1NvbWUgY2hpcHMgZWxpbWluYXRlIGEgc2lnbmFsIGxpbmUgYnkgY29tYmluaW5nIE1PU0kgYW5kIE1JU08sIGFuZAorbGltaXRpbmcgdGhlbXNlbHZlcyB0byBoYWxmLWR1cGxleCBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwuICBJbiBmYWN0Citzb21lIFNQSSBjaGlwcyBoYXZlIHRoaXMgc2lnbmFsIG1vZGUgYXMgYSBzdHJhcHBpbmcgb3B0aW9uLiAgVGhlc2UKK2NhbiBiZSBhY2Nlc3NlZCB1c2luZyB0aGUgc2FtZSBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYXMgU1BJLCBidXQgb2YKK2NvdXJzZSB0aGV5IHdvbid0IGhhbmRsZSBmdWxsIGR1cGxleCB0cmFuc2ZlcnMuICBZb3UgbWF5IGZpbmQgc3VjaAorY2hpcHMgZGVzY3JpYmVkIGFzIHVzaW5nICJ0aHJlZSB3aXJlIiBzaWduYWxpbmc6IFNDSywgZGF0YSwgbkNTeC4KKyhUaGF0IGRhdGEgbGluZSBpcyBzb21ldGltZXMgY2FsbGVkIE1PTUkgb3IgU0lTTy4pCisKIE1pY3JvY29udHJvbGxlcnMgb2Z0ZW4gc3VwcG9ydCBib3RoIG1hc3RlciBhbmQgc2xhdmUgc2lkZXMgb2YgdGhlIFNQSQogcHJvdG9jb2wuICBUaGlzIGRvY3VtZW50IChhbmQgTGludXgpIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHRoZSBtYXN0ZXIKIHNpZGUgb2YgU1BJIGludGVyYWN0aW9ucy4KQEAgLTc0LDExICs5MSwzOCBAQAogY2FyZHMgd2l0aG91dCBuZWVkaW5nIGEgc3BlY2lhbCBwdXJwb3NlIE1NQy9TRC9TRElPIGNvbnRyb2xsZXIuCiAKIAorSSdtIGNvbmZ1c2VkLiAgV2hhdCBhcmUgdGhlc2UgZm91ciBTUEkgImNsb2NrIG1vZGVzIj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJdCdzIGVhc3kgdG8gYmUgY29uZnVzZWQgaGVyZSwgYW5kIHRoZSB2ZW5kb3IgZG9jdW1lbnRhdGlvbiB5b3UnbGwKK2ZpbmQgaXNuJ3QgbmVjZXNzYXJpbHkgaGVscGZ1bC4gIFRoZSBmb3VyIG1vZGVzIGNvbWJpbmUgdHdvIG1vZGUgYml0czoKKworIC0gQ1BPTCBpbmRpY2F0ZXMgdGhlIGluaXRpYWwgY2xvY2sgcG9sYXJpdHkuICBDUE9MPTAgbWVhbnMgdGhlCisgICBjbG9jayBzdGFydHMgbG93LCBzbyB0aGUgZmlyc3QgKGxlYWRpbmcpIGVkZ2UgaXMgcmlzaW5nLCBhbmQKKyAgIHRoZSBzZWNvbmQgKHRyYWlsaW5nKSBlZGdlIGlzIGZhbGxpbmcuICBDUE9MPTEgbWVhbnMgdGhlIGNsb2NrCisgICBzdGFydHMgaGlnaCwgc28gdGhlIGZpcnN0IChsZWFkaW5nKSBlZGdlIGlzIGZhbGxpbmcuCisKKyAtIENQSEEgaW5kaWNhdGVzIHRoZSBjbG9jayBwaGFzZSB1c2VkIHRvIHNhbXBsZSBkYXRhOyBDUEhBPTAgc2F5cworICAgc2FtcGxlIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIENQSEE9MSBtZWFucyB0aGUgdHJhaWxpbmcgZWRnZS4KKworICAgU2luY2UgdGhlIHNpZ25hbCBuZWVkcyB0byBzdGFibGl6ZSBiZWZvcmUgaXQncyBzYW1wbGVkLCBDUEhBPTAKKyAgIGltcGxpZXMgdGhhdCBpdHMgZGF0YSBpcyB3cml0dGVuIGhhbGYgYSBjbG9jayBiZWZvcmUgdGhlIGZpcnN0CisgICBjbG9jayBlZGdlLiAgVGhlIGNoaXBzZWxlY3QgbWF5IGhhdmUgbWFkZSBpdCBiZWNvbWUgYXZhaWxhYmxlLgorCitDaGlwIHNwZWNzIHdvbid0IGFsd2F5cyBzYXkgInVzZXMgU1BJIG1vZGUgWCIgaW4gYXMgbWFueSB3b3JkcywKK2J1dCB0aGVpciB0aW1pbmcgZGlhZ3JhbXMgd2lsbCBtYWtlIHRoZSBDUE9MIGFuZCBDUEhBIG1vZGVzIGNsZWFyLgorCitJbiB0aGUgU1BJIG1vZGUgbnVtYmVyLCBDUE9MIGlzIHRoZSBoaWdoIG9yZGVyIGJpdCBhbmQgQ1BIQSBpcyB0aGUKK2xvdyBvcmRlciBiaXQuICBTbyB3aGVuIGEgY2hpcCdzIHRpbWluZyBkaWFncmFtIHNob3dzIHRoZSBjbG9jaworc3RhcnRpbmcgbG93IChDUE9MPTApIGFuZCBkYXRhIHN0YWJpbGl6ZWQgZm9yIHNhbXBsaW5nIGR1cmluZyB0aGUKK3RyYWlsaW5nIGNsb2NrIGVkZ2UgKENQSEE9MSksIHRoYXQncyBTUEkgbW9kZSAxLgorCisKIEhvdyBkbyB0aGVzZSBkcml2ZXIgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyB3b3JrPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUaGUgPGxpbnV4L3NwaS9zcGkuaD4gaGVhZGVyIGZpbGUgaW5jbHVkZXMga2VybmVsZG9jLCBhcyBkb2VzIHRoZQotbWFpbiBzb3VyY2UgY29kZSwgYW5kIHlvdSBzaG91bGQgY2VydGFpbmx5IHJlYWQgdGhhdC4gIFRoaXMgaXMganVzdAotYW4gb3ZlcnZpZXcsIHNvIHlvdSBnZXQgdGhlIGJpZyBwaWN0dXJlIGJlZm9yZSB0aGUgZGV0YWlscy4KK21haW4gc291cmNlIGNvZGUsIGFuZCB5b3Ugc2hvdWxkIGNlcnRhaW5seSByZWFkIHRoYXQgY2hhcHRlciBvZiB0aGUKK2tlcm5lbCBBUEkgZG9jdW1lbnQuICBUaGlzIGlzIGp1c3QgYW4gb3ZlcnZpZXcsIHNvIHlvdSBnZXQgdGhlIGJpZworcGljdHVyZSBiZWZvcmUgdGhvc2UgZGV0YWlscy4KIAogU1BJIHJlcXVlc3RzIGFsd2F5cyBnbyBpbnRvIEkvTyBxdWV1ZXMuICBSZXF1ZXN0cyBmb3IgYSBnaXZlbiBTUEkgZGV2aWNlCiBhcmUgYWx3YXlzIGV4ZWN1dGVkIGluIEZJRk8gb3JkZXIsIGFuZCBjb21wbGV0ZSBhc3luY2hyb25vdXNseSB0aHJvdWdoCkBAIC04OCw3ICsxMzIsNyBAQAogCiBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIFNQSSBkcml2ZXIsIGhlcmUgY2FsbGVkOgogCi0gIENvbnRyb2xsZXIgZHJpdmVycyAuLi4gdGhlc2UgYXJlIG9mdGVuIGJ1aWx0IGluIHRvIFN5c3RlbS1Pbi1DaGlwCisgIENvbnRyb2xsZXIgZHJpdmVycyAuLi4gY29udHJvbGxlcnMgbWF5IGJlIGJ1aWx0IGluIHRvIFN5c3RlbS1Pbi1DaGlwCiAJcHJvY2Vzc29ycywgYW5kIG9mdGVuIHN1cHBvcnQgYm90aCBNYXN0ZXIgYW5kIFNsYXZlIHJvbGVzLgogCVRoZXNlIGRyaXZlcnMgdG91Y2ggaGFyZHdhcmUgcmVnaXN0ZXJzIGFuZCBtYXkgdXNlIERNQS4KIAlPciB0aGV5IGNhbiBiZSBQSU8gYml0YmFuZ2VycywgbmVlZGluZyBqdXN0IEdQSU8gcGlucy4KQEAgLTEwOCwxOCArMTUyLDE4IEBACiBwcm9ncmFtbWluZyBpbnRlcmZhY2UuCiAKIFRoZXJlIGlzIGEgbWluaW1hbCBjb3JlIG9mIFNQSSBwcm9ncmFtbWluZyBpbnRlcmZhY2VzLCBmb2N1c3Npbmcgb24KLXVzaW5nIGRyaXZlciBtb2RlbCB0byBjb25uZWN0IGNvbnRyb2xsZXIgYW5kIHByb3RvY29sIGRyaXZlcnMgdXNpbmcKK3VzaW5nIHRoZSBkcml2ZXIgbW9kZWwgdG8gY29ubmVjdCBjb250cm9sbGVyIGFuZCBwcm90b2NvbCBkcml2ZXJzIHVzaW5nCiBkZXZpY2UgdGFibGVzIHByb3ZpZGVkIGJ5IGJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIGNvZGUuICBTUEkKIHNob3dzIHVwIGluIHN5c2ZzIGluIHNldmVyYWwgbG9jYXRpb25zOgogCi0gICAvc3lzL2RldmljZXMvLi4uL0NUTFIvc3BpQi5DIC4uLiBzcGlfZGV2aWNlIGZvciBvbiBidXMgIkIiLAorICAgL3N5cy9kZXZpY2VzLy4uLi9DVExSL3NwaUIuQyAuLi4gc3BpX2RldmljZSBvbiBidXMgIkIiLAogCWNoaXBzZWxlY3QgQywgYWNjZXNzZWQgdGhyb3VnaCBDVExSLgogCiAgICAvc3lzL2RldmljZXMvLi4uL0NUTFIvc3BpQi5DL21vZGFsaWFzIC4uLiBpZGVudGlmaWVzIHRoZSBkcml2ZXIKIAl0aGF0IHNob3VsZCBiZSB1c2VkIHdpdGggdGhpcyBkZXZpY2UgKGZvciBob3RwbHVnL2NvbGRwbHVnKQogCiAgICAvc3lzL2J1cy9zcGkvZGV2aWNlcy9zcGlCLkMgLi4uIHN5bWxpbmsgdG8gdGhlIHBoeXNpY2FsCi0gICAJc3BpQi1DIGRldmljZQorICAgCXNwaUIuQyBkZXZpY2UKIAogICAgL3N5cy9idXMvc3BpL2RyaXZlcnMvRCAuLi4gZHJpdmVyIGZvciBvbmUgb3IgbW9yZSBzcGkqLiogZGV2aWNlcwogCkBAIC0yNDAsNyArMjg0LDcgQEAKIHdpdGhvdXQgdGhlIGNoaXAncyBkcml2ZXIgYmVpbmcgbG9hZGVkLiAgVGhlIG1vc3QgdHJvdWJsZXNvbWUgYXNwZWN0IG9mCiB0aGF0IGlzIGxpa2VseSB0aGUgU1BJX0NTX0hJR0ggYml0IGluIHRoZSBzcGlfZGV2aWNlLm1vZGUgZmllbGQsIHNpbmNlCiBzaGFyaW5nIGEgYnVzIHdpdGggYSBkZXZpY2UgdGhhdCBpbnRlcnByZXRzIGNoaXBzZWxlY3QgImJhY2t3YXJkcyIgaXMKLW5vdCBwb3NzaWJsZS4KK25vdCBwb3NzaWJsZSB1bnRpbCB0aGUgaW5mcmFzdHJ1Y3R1cmUga25vd3MgaG93IHRvIGRlc2VsZWN0IGl0LgogCiBUaGVuIHlvdXIgYm9hcmQgaW5pdGlhbGl6YXRpb24gY29kZSB3b3VsZCByZWdpc3RlciB0aGF0IHRhYmxlIHdpdGggdGhlIFNQSQogaW5mcmFzdHJ1Y3R1cmUsIHNvIHRoYXQgaXQncyBhdmFpbGFibGUgbGF0ZXIgd2hlbiB0aGUgU1BJIG1hc3RlciBjb250cm9sbGVyCkBAIC0yNjgsMTYgKzMxMiwxNCBAQAogY2FsbCBhdCBsZWFzdCBzcGlfdW5yZWdpc3Rlcl9kZXZpY2UoKSB3aGVuIHRoYXQgYm9hcmQgaXMgcmVtb3ZlZC4KIAogV2hlbiBMaW51eCBpbmNsdWRlcyBzdXBwb3J0IGZvciBNTUMvU0QvU0RJTy9EYXRhRmxhc2ggY2FyZHMgdGhyb3VnaCBTUEksIHRob3NlCi1jb25maWd1cmF0aW9ucyB3aWxsIGFsc28gYmUgZHluYW1pYy4gIEZvcnR1bmF0ZWx5LCB0aG9zZSBkZXZpY2VzIGFsbCBzdXBwb3J0Ci1iYXNpYyBkZXZpY2UgaWRlbnRpZmljYXRpb24gcHJvYmVzLCBzbyB0aGF0IHN1cHBvcnQgc2hvdWxkIGhvdHBsdWcgbm9ybWFsbHkuCitjb25maWd1cmF0aW9ucyB3aWxsIGFsc28gYmUgZHluYW1pYy4gIEZvcnR1bmF0ZWx5LCBzdWNoIGRldmljZXMgYWxsIHN1cHBvcnQKK2Jhc2ljIGRldmljZSBpZGVudGlmaWNhdGlvbiBwcm9iZXMsIHNvIHRoZXkgc2hvdWxkIGhvdHBsdWcgbm9ybWFsbHkuCiAKIAogSG93IGRvIEkgd3JpdGUgYW4gIlNQSSBQcm90b2NvbCBEcml2ZXIiPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQWxsIFNQSSBkcml2ZXJzIGFyZSBjdXJyZW50bHkga2VybmVsIGRyaXZlcnMuICBBIHVzZXJzcGFjZSBkcml2ZXIgQVBJCi13b3VsZCBqdXN0IGJlIGFub3RoZXIga2VybmVsIGRyaXZlciwgcHJvYmFibHkgb2ZmZXJpbmcgc29tZSBsb3dsZXZlbAotYWNjZXNzIHRocm91Z2ggYWlvX3JlYWQoKSwgYWlvX3dyaXRlKCksIGFuZCBpb2N0bCgpIGNhbGxzIGFuZCB1c2luZyB0aGUKLXN0YW5kYXJkIHVzZXJzcGFjZSBzeXNmcyBtZWNoYW5pc21zIHRvIGJpbmQgdG8gYSBnaXZlbiBTUEkgZGV2aWNlLgorTW9zdCBTUEkgZHJpdmVycyBhcmUgY3VycmVudGx5IGtlcm5lbCBkcml2ZXJzLCBidXQgdGhlcmUncyBhbHNvIHN1cHBvcnQKK2ZvciB1c2Vyc3BhY2UgZHJpdmVycy4gIEhlcmUgd2UgdGFsayBvbmx5IGFib3V0IGtlcm5lbCBkcml2ZXJzLgogCiBTUEkgcHJvdG9jb2wgZHJpdmVycyBzb21ld2hhdCByZXNlbWJsZSBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyczoKIApAQCAtMzE5LDcgKzM2MSw4IEBACiAKIEFzIHNvb24gYXMgaXQgZW50ZXJzIHByb2JlKCksIHRoZSBkcml2ZXIgbWF5IGlzc3VlIEkvTyByZXF1ZXN0cyB0bwogdGhlIFNQSSBkZXZpY2UgdXNpbmcgInN0cnVjdCBzcGlfbWVzc2FnZSIuICBXaGVuIHJlbW92ZSgpIHJldHVybnMsCi10aGUgZHJpdmVyIGd1YXJhbnRlZXMgdGhhdCBpdCB3b24ndCBzdWJtaXQgYW55IG1vcmUgc3VjaCBtZXNzYWdlcy4KK29yIGFmdGVyIHByb2JlKCkgZmFpbHMsIHRoZSBkcml2ZXIgZ3VhcmFudGVlcyB0aGF0IGl0IHdvbid0IHN1Ym1pdAorYW55IG1vcmUgc3VjaCBtZXNzYWdlcy4KIAogICAtIEFuIHNwaV9tZXNzYWdlIGlzIGEgc2VxdWVuY2Ugb2YgcHJvdG9jb2wgb3BlcmF0aW9ucywgZXhlY3V0ZWQKICAgICBhcyBvbmUgYXRvbWljIHNlcXVlbmNlLiAgU1BJIGRyaXZlciBjb250cm9scyBpbmNsdWRlOgpAQCAtMzY4LDcgKzQxMSw4IEBACiBTb21lIGRyaXZlcnMgbWF5IG5lZWQgdG8gbW9kaWZ5IHNwaV9kZXZpY2UgY2hhcmFjdGVyaXN0aWNzIGxpa2UgdGhlCiB0cmFuc2ZlciBtb2RlLCB3b3Jkc2l6ZSwgb3IgY2xvY2sgcmF0ZS4gIFRoaXMgaXMgZG9uZSB3aXRoIHNwaV9zZXR1cCgpLAogd2hpY2ggd291bGQgbm9ybWFsbHkgYmUgY2FsbGVkIGZyb20gcHJvYmUoKSBiZWZvcmUgdGhlIGZpcnN0IEkvTyBpcwotZG9uZSB0byB0aGUgZGV2aWNlLgorZG9uZSB0byB0aGUgZGV2aWNlLiAgSG93ZXZlciwgdGhhdCBjYW4gYWxzbyBiZSBjYWxsZWQgYXQgYW55IHRpbWUKK3RoYXQgbm8gbWVzc2FnZSBpcyBwZW5kaW5nIGZvciB0aGF0IGRldmljZS4KIAogV2hpbGUgInNwaV9kZXZpY2UiIHdvdWxkIGJlIHRoZSBib3R0b20gYm91bmRhcnkgb2YgdGhlIGRyaXZlciwgdGhlCiB1cHBlciBib3VuZGFyaWVzIG1pZ2h0IGluY2x1ZGUgc3lzZnMgKGVzcGVjaWFsbHkgZm9yIHNlbnNvciByZWFkaW5ncyksCkBAIC00NDUsMTEgKzQ4OSwxNSBAQAogCVRoaXMgc2V0cyB1cCB0aGUgZGV2aWNlIGNsb2NrIHJhdGUsIFNQSSBtb2RlLCBhbmQgd29yZCBzaXplcy4KIAlEcml2ZXJzIG1heSBjaGFuZ2UgdGhlIGRlZmF1bHRzIHByb3ZpZGVkIGJ5IGJvYXJkX2luZm8sIGFuZCB0aGVuCiAJY2FsbCBzcGlfc2V0dXAoc3BpKSB0byBpbnZva2UgdGhpcyByb3V0aW5lLiAgSXQgbWF5IHNsZWVwLgorCVVubGVzcyBlYWNoIFNQSSBzbGF2ZSBoYXMgaXRzIG93biBjb25maWd1cmF0aW9uIHJlZ2lzdGVycywgZG9uJ3QKKwljaGFuZ2UgdGhlbSByaWdodCBhd2F5IC4uLiBvdGhlcndpc2UgZHJpdmVycyBjb3VsZCBjb3JydXB0IEkvTworCXRoYXQncyBpbiBwcm9ncmVzcyBmb3Igb3RoZXIgU1BJIGRldmljZXMuCiAKICAgICBtYXN0ZXItPnRyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzc2FnZSkKICAgICAJVGhpcyBtdXN0IG5vdCBzbGVlcC4gIEl0cyByZXNwb25zaWJpbGl0eSBpcyBhcnJhbmdlIHRoYXQgdGhlCi0JdHJhbnNmZXIgaGFwcGVucyBhbmQgaXRzIGNvbXBsZXRlKCkgY2FsbGJhY2sgaXMgaXNzdWVkOyB0aGUgdHdvCi0Jd2lsbCBub3JtYWxseSBoYXBwZW4gbGF0ZXIsIGFmdGVyIG90aGVyIHRyYW5zZmVycyBjb21wbGV0ZS4KKwl0cmFuc2ZlciBoYXBwZW5zIGFuZCBpdHMgY29tcGxldGUoKSBjYWxsYmFjayBpcyBpc3N1ZWQuICBUaGUgdHdvCisJd2lsbCBub3JtYWxseSBoYXBwZW4gbGF0ZXIsIGFmdGVyIG90aGVyIHRyYW5zZmVycyBjb21wbGV0ZSwgYW5kCisJaWYgdGhlIGNvbnRyb2xsZXIgaXMgaWRsZSBpdCB3aWxsIG5lZWQgdG8gYmUga2lja3N0YXJ0ZWQuCiAKICAgICBtYXN0ZXItPmNsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIAlZb3VyIGNvbnRyb2xsZXIgZHJpdmVyIG1heSB1c2Ugc3BpX2RldmljZS5jb250cm9sbGVyX3N0YXRlIHRvIGhvbGQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BpL3NwaWRldiBiL0RvY3VtZW50YXRpb24vc3BpL3NwaWRldgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzhlMWI5OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3BpL3NwaWRldgpAQCAtMCwwICsxLDMwNyBAQAorU1BJIGRldmljZXMgaGF2ZSBhIGxpbWl0ZWQgdXNlcnNwYWNlIEFQSSwgc3VwcG9ydGluZyBiYXNpYyBoYWxmLWR1cGxleAorcmVhZCgpIGFuZCB3cml0ZSgpIGFjY2VzcyB0byBTUEkgc2xhdmUgZGV2aWNlcy4gIFVzaW5nIGlvY3RsKCkgcmVxdWVzdHMsCitmdWxsIGR1cGxleCB0cmFuc2ZlcnMgYW5kIGRldmljZSBJL08gY29uZmlndXJhdGlvbiBhcmUgYWxzbyBhdmFpbGFibGUuCisKKwkjaW5jbHVkZSA8ZmNudGwuaD4KKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpZGV2Lmg+CisKK1NvbWUgcmVhc29ucyB5b3UgbWlnaHQgd2FudCB0byB1c2UgdGhpcyBwcm9ncmFtbWluZyBpbnRlcmZhY2UgaW5jbHVkZToKKworICogUHJvdG90eXBpbmcgaW4gYW4gZW52aXJvbm1lbnQgdGhhdCdzIG5vdCBjcmFzaC1wcm9uZTsgc3RyYXkgcG9pbnRlcnMKKyAgIGluIHVzZXJzcGFjZSB3b24ndCBub3JtYWxseSBicmluZyBkb3duIGFueSBMaW51eCBzeXN0ZW0uCisKKyAqIERldmVsb3Bpbmcgc2ltcGxlIHByb3RvY29scyB1c2VkIHRvIHRhbGsgdG8gbWljcm9jb250cm9sbGVycyBhY3RpbmcKKyAgIGFzIFNQSSBzbGF2ZXMsIHdoaWNoIHlvdSBtYXkgbmVlZCB0byBjaGFuZ2UgcXVpdGUgb2Z0ZW4uCisKK09mIGNvdXJzZSB0aGVyZSBhcmUgZHJpdmVycyB0aGF0IGNhbiBuZXZlciBiZSB3cml0dGVuIGluIHVzZXJzcGFjZSwgYmVjYXVzZQordGhleSBuZWVkIHRvIGFjY2VzcyBrZXJuZWwgaW50ZXJmYWNlcyAoc3VjaCBhcyBJUlEgaGFuZGxlcnMgb3Igb3RoZXIgbGF5ZXJzCitvZiB0aGUgZHJpdmVyIHN0YWNrKSB0aGF0IGFyZSBub3QgYWNjZXNzaWJsZSB0byB1c2Vyc3BhY2UuCisKKworREVWSUNFIENSRUFUSU9OLCBEUklWRVIgQklORElORworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIHNpbXBsZXN0IHdheSB0byBhcnJhbmdlIHRvIHVzZSB0aGlzIGRyaXZlciBpcyB0byBqdXN0IGxpc3QgaXQgaW4gdGhlCitzcGlfYm9hcmRfaW5mbyBmb3IgYSBkZXZpY2UgYXMgdGhlIGRyaXZlciBpdCBzaG91bGQgdXNlOiAgdGhlICJtb2RhbGlhcyIKK2VudHJ5IGlzICJzcGlkZXYiLCBtYXRjaGluZyB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIGV4cG9zaW5nIHRoaXMgQVBJLgorU2V0IHVwIHRoZSBvdGhlciBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIChiaXRzIHBlciB3b3JkLCBTUEkgY2xvY2tpbmcsCitjaGlwc2VsZWN0IHBvbGFyaXR5LCBldGMpIGFzIHVzdWFsLCBzbyB5b3Ugd29uJ3QgYWx3YXlzIG5lZWQgdG8gb3ZlcnJpZGUKK3RoZW0gbGF0ZXIuCisKKyhTeXNmcyBhbHNvIHN1cHBvcnRzIHVzZXJzcGFjZSBkcml2ZW4gYmluZGluZy91bmJpbmRpbmcgb2YgZHJpdmVycyB0bworZGV2aWNlcy4gIFRoYXQgbWVjaGFuaXNtIG1pZ2h0IGJlIHN1cHBvcnRlZCBoZXJlIGluIHRoZSBmdXR1cmUuKQorCitXaGVuIHlvdSBkbyB0aGF0LCB0aGUgc3lzZnMgbm9kZSBmb3IgdGhlIFNQSSBkZXZpY2Ugd2lsbCBpbmNsdWRlIGEgY2hpbGQKK2RldmljZSBub2RlIHdpdGggYSAiZGV2IiBhdHRyaWJ1dGUgdGhhdCB3aWxsIGJlIHVuZGVyc3Rvb2QgYnkgdWRldiBvciBtZGV2LgorKExhcmdlciBzeXN0ZW1zIHdpbGwgaGF2ZSAidWRldiIuICBTbWFsbGVyIG9uZXMgbWF5IGNvbmZpZ3VyZSAibWRldiIgaW50bworYnVzeWJveDsgaXQncyBsZXNzIGZlYXR1cmVmdWwsIGJ1dCBvZnRlbiBlbm91Z2guKSAgRm9yIGEgU1BJIGRldmljZSB3aXRoCitjaGlwc2VsZWN0IEMgb24gYnVzIEIsIHlvdSBzaG91bGQgc2VlOgorCisgICAgL2Rldi9zcGlkZXZCLkMgLi4uIGNoYXJhY3RlciBzcGVjaWFsIGRldmljZSwgbWFqb3IgbnVtYmVyIDE1MyB3aXRoCisJYSBkeW5hbWljYWxseSBjaG9zZW4gbWlub3IgZGV2aWNlIG51bWJlci4gIFRoaXMgaXMgdGhlIG5vZGUKKwl0aGF0IHVzZXJzcGFjZSBwcm9ncmFtcyB3aWxsIG9wZW4sIGNyZWF0ZWQgYnkgInVkZXYiIG9yICJtZGV2Ii4KKworICAgIC9zeXMvZGV2aWNlcy8uLi4vc3BpQi5DIC4uLiBhcyB1c3VhbCwgdGhlIFNQSSBkZXZpY2Ugbm9kZSB3aWxsCisJYmUgYSBjaGlsZCBvZiBpdHMgU1BJIG1hc3RlciBjb250cm9sbGVyLgorCisgICAgL3N5cy9jbGFzcy9zcGlkZXYvc3BpZGV2Qi5DIC4uLiBjcmVhdGVkIHdoZW4gdGhlICJzcGlkZXYiIGRyaXZlcgorCWJpbmRzIHRvIHRoYXQgZGV2aWNlLiAgKERpcmVjdG9yeSBvciBzeW1saW5rLCBiYXNlZCBvbiB3aGV0aGVyCisJb3Igbm90IHlvdSBlbmFibGVkIHRoZSAiZGVwcmVjYXRlZCBzeXNmcyBmaWxlcyIgS2NvbmZpZyBvcHRpb24uKQorCitEbyBub3QgdHJ5IHRvIG1hbmFnZSB0aGUgL2RldiBjaGFyYWN0ZXIgZGV2aWNlIHNwZWNpYWwgZmlsZSBub2RlcyBieSBoYW5kLgorVGhhdCdzIGVycm9yIHByb25lLCBhbmQgeW91J2QgbmVlZCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gc3lzdGVtCitzZWN1cml0eSBpc3N1ZXM7IHVkZXYvbWRldiBzaG91bGQgYWxyZWFkeSBiZSBjb25maWd1cmVkIHNlY3VyZWx5LgorCitJZiB5b3UgdW5iaW5kIHRoZSAic3BpZGV2IiBkcml2ZXIgZnJvbSB0aGF0IGRldmljZSwgdGhvc2UgdHdvICJzcGlkZXYiIG5vZGVzCisoaW4gc3lzZnMgYW5kIGluIC9kZXYpIHNob3VsZCBhdXRvbWF0aWNhbGx5IGJlIHJlbW92ZWQgKHJlc3BlY3RpdmVseSBieSB0aGUKK2tlcm5lbCBhbmQgYnkgdWRldi9tZGV2KS4gIFlvdSBjYW4gdW5iaW5kIGJ5IHJlbW92aW5nIHRoZSAic3BpZGV2IiBkcml2ZXIKK21vZHVsZSwgd2hpY2ggd2lsbCBhZmZlY3QgYWxsIGRldmljZXMgdXNpbmcgdGhpcyBkcml2ZXIuICBZb3UgY2FuIGFsc28gdW5iaW5kCitieSBoYXZpbmcga2VybmVsIGNvZGUgcmVtb3ZlIHRoZSBTUEkgZGV2aWNlLCBwcm9iYWJseSBieSByZW1vdmluZyB0aGUgZHJpdmVyCitmb3IgaXRzIFNQSSBjb250cm9sbGVyIChzbyBpdHMgc3BpX21hc3RlciB2YW5pc2hlcykuCisKK1NpbmNlIHRoaXMgaXMgYSBzdGFuZGFyZCBMaW51eCBkZXZpY2UgZHJpdmVyIC0tIGV2ZW4gdGhvdWdoIGl0IGp1c3QgaGFwcGVucwordG8gZXhwb3NlIGEgbG93IGxldmVsIEFQSSB0byB1c2Vyc3BhY2UgLS0gaXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgbnVtYmVyCitvZiBkZXZpY2VzIGF0IGEgdGltZS4gIEp1c3QgcHJvdmlkZSBvbmUgc3BpX2JvYXJkX2luZm8gcmVjb3JkIGZvciBlYWNoIHN1Y2gKK1NQSSBkZXZpY2UsIGFuZCB5b3UnbGwgZ2V0IGEgL2RldiBkZXZpY2Ugbm9kZSBmb3IgZWFjaCBkZXZpY2UuCisKKworQkFTSUMgQ0hBUkFDVEVSIERFVklDRSBBUEkKKz09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3JtYWwgb3BlbigpIGFuZCBjbG9zZSgpIG9wZXJhdGlvbnMgb24gL2Rldi9zcGlkZXZCLkQgZmlsZXMgd29yayBhcyB5b3UKK3dvdWxkIGV4cGVjdC4KKworU3RhbmRhcmQgcmVhZCgpIGFuZCB3cml0ZSgpIG9wZXJhdGlvbnMgYXJlIG9idmlvdXNseSBvbmx5IGhhbGYtZHVwbGV4LCBhbmQKK3RoZSBjaGlwc2VsZWN0IGlzIGRlYWN0aXZhdGVkIGJldHdlZW4gdGhvc2Ugb3BlcmF0aW9ucy4gIEZ1bGwtZHVwbGV4IGFjY2VzcywKK2FuZCBjb21wb3NpdGUgb3BlcmF0aW9uIHdpdGhvdXQgY2hpcHNlbGVjdCBkZS1hY3RpdmF0aW9uLCBpcyBhdmFpbGFibGUgdXNpbmcKK3RoZSBTUElfSU9DX01FU1NBR0UoTikgcmVxdWVzdC4KKworU2V2ZXJhbCBpb2N0bCgpIHJlcXVlc3RzIGxldCB5b3VyIGRyaXZlciByZWFkIG9yIG92ZXJyaWRlIHRoZSBkZXZpY2UncyBjdXJyZW50CitzZXR0aW5ncyBmb3IgZGF0YSB0cmFuc2ZlciBwYXJhbWV0ZXJzOgorCisgICAgU1BJX0lPQ19SRF9NT0RFLCBTUElfSU9DX1dSX01PREUgLi4uIHBhc3MgYSBwb2ludGVyIHRvIGEgYnl0ZSB3aGljaCB3aWxsCisJcmV0dXJuIChSRCkgb3IgYXNzaWduIChXUikgdGhlIFNQSSB0cmFuc2ZlciBtb2RlLiAgVXNlIHRoZSBjb25zdGFudHMKKwlTUElfTU9ERV8wLi5TUElfTU9ERV8zOyBvciBpZiB5b3UgcHJlZmVyIHlvdSBjYW4gY29tYmluZSBTUElfQ1BPTAorCShjbG9jayBwb2xhcml0eSwgaWRsZSBoaWdoIGlmZiB0aGlzIGlzIHNldCkgb3IgU1BJX0NQSEEgKGNsb2NrIHBoYXNlLAorCXNhbXBsZSBvbiB0cmFpbGluZyBlZGdlIGlmZiB0aGlzIGlzIHNldCkgZmxhZ3MuCisKKyAgICBTUElfSU9DX1JEX0xTQl9GSVJTVCwgU1BJX0lPQ19XUl9MU0JfRklSU1QgLi4uIHBhc3MgYSBwb2ludGVyIHRvIGEgYnl0ZQorCXdoaWNoIHdpbGwgcmV0dXJuIChSRCkgb3IgYXNzaWduIChXUikgdGhlIGJpdCBqdXN0aWZpY2F0aW9uIHVzZWQgdG8KKwl0cmFuc2ZlciBTUEkgd29yZHMuICBaZXJvIGluZGljYXRlcyBNU0ItZmlyc3Q7IG90aGVyIHZhbHVlcyBpbmRpY2F0ZQorCXRoZSBsZXNzIGNvbW1vbiBMU0ItZmlyc3QgZW5jb2RpbmcuICBJbiBib3RoIGNhc2VzIHRoZSBzcGVjaWZpZWQgdmFsdWUKKwlpcyByaWdodC1qdXN0aWZpZWQgaW4gZWFjaCB3b3JkLCBzbyB0aGF0IHVudXNlZCAoVFgpIG9yIHVuZGVmaW5lZCAoUlgpCisJYml0cyBhcmUgaW4gdGhlIE1TQnMuCisKKyAgICBTUElfSU9DX1JEX0JJVFNfUEVSX1dPUkQsIFNQSV9JT0NfV1JfQklUU19QRVJfV09SRCAuLi4gcGFzcyBhIHBvaW50ZXIgdG8KKwlhIGJ5dGUgd2hpY2ggd2lsbCByZXR1cm4gKFJEKSBvciBhc3NpZ24gKFdSKSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4KKwllYWNoIFNQSSB0cmFuc2ZlciB3b3JkLiAgVGhlIHZhbHVlIHplcm8gc2lnbmlmaWVzIGVpZ2h0IGJpdHMuCisKKyAgICBTUElfSU9DX1JEX01BWF9TUEVFRF9IWiwgU1BJX0lPQ19XUl9NQVhfU1BFRURfSFogLi4uIHBhc3MgYSBwb2ludGVyIHRvIGEKKwl1MzIgd2hpY2ggd2lsbCByZXR1cm4gKFJEKSBvciBhc3NpZ24gKFdSKSB0aGUgbWF4aW11bSBTUEkgdHJhbnNmZXIKKwlzcGVlZCwgaW4gSHouICBUaGUgY29udHJvbGxlciBjYW4ndCBuZWNlc3NhcmlseSBhc3NpZ24gdGhhdCBzcGVjaWZpYworCWNsb2NrIHNwZWVkLgorCitOT1RFUzoKKworICAgIC0gQXQgdGhpcyB0aW1lIHRoZXJlIGlzIG5vIGFzeW5jIEkvTyBzdXBwb3J0OyBldmVyeXRoaW5nIGlzIHB1cmVseQorICAgICAgc3luY2hyb25vdXMuCisKKyAgICAtIFRoZXJlJ3MgY3VycmVudGx5IG5vIHdheSB0byByZXBvcnQgdGhlIGFjdHVhbCBiaXQgcmF0ZSB1c2VkIHRvCisgICAgICBzaGlmdCBkYXRhIHRvL2Zyb20gYSBnaXZlbiBkZXZpY2UuCisKKyAgICAtIEZyb20gdXNlcnNwYWNlLCB5b3UgY2FuJ3QgY3VycmVudGx5IGNoYW5nZSB0aGUgY2hpcCBzZWxlY3QgcG9sYXJpdHk7CisgICAgICB0aGF0IGNvdWxkIGNvcnJ1cHQgdHJhbnNmZXJzIHRvIG90aGVyIGRldmljZXMgc2hhcmluZyB0aGUgU1BJIGJ1cy4KKyAgICAgIEVhY2ggU1BJIGRldmljZSBpcyBkZXNlbGVjdGVkIHdoZW4gaXQncyBub3QgaW4gYWN0aXZlIHVzZSwgYWxsb3dpbmcKKyAgICAgIG90aGVyIGRyaXZlcnMgdG8gdGFsayB0byBvdGhlciBkZXZpY2VzLgorCisgICAgLSBUaGVyZSdzIGEgbGltaXQgb24gdGhlIG51bWJlciBvZiBieXRlcyBlYWNoIEkvTyByZXF1ZXN0IGNhbiB0cmFuc2ZlcgorICAgICAgdG8gdGhlIFNQSSBkZXZpY2UuICBJdCBkZWZhdWx0cyB0byBvbmUgcGFnZSwgYnV0IHRoYXQgY2FuIGJlIGNoYW5nZWQKKyAgICAgIHVzaW5nIGEgbW9kdWxlIHBhcmFtZXRlci4KKworICAgIC0gQmVjYXVzZSBTUEkgaGFzIG5vIGxvdy1sZXZlbCB0cmFuc2ZlciBhY2tub3dsZWRnZW1lbnQsIHlvdSB1c3VhbGx5CisgICAgICB3b24ndCBzZWUgYW55IEkvTyBlcnJvcnMgd2hlbiB0YWxraW5nIHRvIGEgbm9uLWV4aXN0ZW50IGRldmljZS4KKworCitGVUxMIERVUExFWCBDSEFSQUNURVIgREVWSUNFIEFQSQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU2VlIHRoZSBzYW1wbGUgcHJvZ3JhbSBiZWxvdyBmb3Igb25lIGV4YW1wbGUgc2hvd2luZyB0aGUgdXNlIG9mIHRoZSBmdWxsCitkdXBsZXggcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLiAgKEFsdGhvdWdoIGl0IGRvZXNuJ3QgcGVyZm9ybSBhIGZ1bGwgZHVwbGV4Cit0cmFuc2Zlci4pICBUaGUgbW9kZWwgaXMgdGhlIHNhbWUgYXMgdGhhdCB1c2VkIGluIHRoZSBrZXJuZWwgc3BpX3N5bmMoKQorcmVxdWVzdDsgdGhlIGluZGl2aWR1YWwgdHJhbnNmZXJzIG9mZmVyIHRoZSBzYW1lIGNhcGFiaWxpdGllcyBhcyBhcmUKK2F2YWlsYWJsZSB0byBrZXJuZWwgZHJpdmVycyAoZXhjZXB0IHRoYXQgaXQncyBub3QgYXN5bmNocm9ub3VzKS4KKworVGhlIGV4YW1wbGUgc2hvd3Mgb25lIGhhbGYtZHVwbGV4IFJQQy1zdHlsZSByZXF1ZXN0IGFuZCByZXNwb25zZSBtZXNzYWdlLgorVGhlc2UgcmVxdWVzdHMgY29tbW9ubHkgcmVxdWlyZSB0aGF0IHRoZSBjaGlwIG5vdCBiZSBkZXNlbGVjdGVkIGJldHdlZW4KK3RoZSByZXF1ZXN0IGFuZCByZXNwb25zZS4gIFNldmVyYWwgc3VjaCByZXF1ZXN0cyBjb3VsZCBiZSBjaGFpbmVkIGludG8KK2Egc2luZ2xlIGtlcm5lbCByZXF1ZXN0LCBldmVuIGFsbG93aW5nIHRoZSBjaGlwIHRvIGJlIGRlc2VsZWN0ZWQgYWZ0ZXIKK2VhY2ggcmVzcG9uc2UuICAoT3RoZXIgcHJvdG9jb2wgb3B0aW9ucyBpbmNsdWRlIGNoYW5naW5nIHRoZSB3b3JkIHNpemUKK2FuZCBiaXRyYXRlIGZvciBlYWNoIHRyYW5zZmVyIHNlZ21lbnQuKQorCitUbyBtYWtlIGEgZnVsbCBkdXBsZXggcmVxdWVzdCwgcHJvdmlkZSBib3RoIHJ4X2J1ZiBhbmQgdHhfYnVmIGZvciB0aGUKK3NhbWUgdHJhbnNmZXIuICBJdCdzIGV2ZW4gT0sgaWYgdGhvc2UgYXJlIHRoZSBzYW1lIGJ1ZmZlci4KKworCitTQU1QTEUgUFJPR1JBTQorPT09PT09PT09PT09PT0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JQ1VUIEhFUkUKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpZGV2Lmg+CisKKworc3RhdGljIGludCB2ZXJib3NlOworCitzdGF0aWMgdm9pZCBkb19yZWFkKGludCBmZCwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyCWJ1ZlszMl0sICpicDsKKwlpbnQJCXN0YXR1czsKKworCS8qIHJlYWQgYXQgbGVhc3QgMiBieXRlcywgbm8gbW9yZSB0aGFuIDMyICovCisJaWYgKGxlbiA8IDIpCisJCWxlbiA9IDI7CisJZWxzZSBpZiAobGVuID4gc2l6ZW9mKGJ1ZikpCisJCWxlbiA9IHNpemVvZihidWYpOworCW1lbXNldChidWYsIDAsIHNpemVvZiBidWYpOworCisJc3RhdHVzID0gcmVhZChmZCwgYnVmLCBsZW4pOworCWlmIChzdGF0dXMgPCAwKSB7CisJCXBlcnJvcigicmVhZCIpOworCQlyZXR1cm47CisJfQorCWlmIChzdGF0dXMgIT0gbGVuKSB7CisJCWZwcmludGYoc3RkZXJyLCAic2hvcnQgcmVhZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoInJlYWQoJTJkLCAlMmQpOiAlMDJ4ICUwMngsIiwgbGVuLCBzdGF0dXMsCisJCWJ1ZlswXSwgYnVmWzFdKTsKKwlzdGF0dXMgLT0gMjsKKwlicCA9IGJ1ZiArIDI7CisJd2hpbGUgKHN0YXR1cy0tID4gMCkKKwkJcHJpbnRmKCIgJTAyeCIsICpicCsrKTsKKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGRvX21zZyhpbnQgZmQsIGludCBsZW4pCit7CisJc3RydWN0IHNwaV9pb2NfdHJhbnNmZXIJeGZlclsyXTsKKwl1bnNpZ25lZCBjaGFyCQlidWZbMzJdLCAqYnA7CisJaW50CQkJc3RhdHVzOworCisJbWVtc2V0KHhmZXIsIDAsIHNpemVvZiB4ZmVyKTsKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YgYnVmKTsKKworCWlmIChsZW4gPiBzaXplb2YgYnVmKQorCQlsZW4gPSBzaXplb2YgYnVmOworCisJYnVmWzBdID0gMHhhYTsKKwl4ZmVyWzBdLnR4X2J1ZiA9IChfX3U2NCkgYnVmOworCXhmZXJbMF0ubGVuID0gMTsKKworCXhmZXJbMV0ucnhfYnVmID0gKF9fdTY0KSBidWY7CisJeGZlclsxXS5sZW4gPSBsZW47CisKKwlzdGF0dXMgPSBpb2N0bChmZCwgU1BJX0lPQ19NRVNTQUdFKDIpLCB4ZmVyKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlwZXJyb3IoIlNQSV9JT0NfTUVTU0FHRSIpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKCJyZXNwb25zZSglMmQsICUyZCk6ICIsIGxlbiwgc3RhdHVzKTsKKwlmb3IgKGJwID0gYnVmOyBsZW47IGxlbi0tKQorCQlwcmludGYoIiAlMDJ4IiwgKmJwKyspOworCXByaW50ZigiXG4iKTsKK30KKworc3RhdGljIHZvaWQgZHVtcHN0YXQoY29uc3QgY2hhciAqbmFtZSwgaW50IGZkKQoreworCV9fdTgJbW9kZSwgbHNiLCBiaXRzOworCV9fdTMyCXNwZWVkOworCisJaWYgKGlvY3RsKGZkLCBTUElfSU9DX1JEX01PREUsICZtb2RlKSA8IDApIHsKKwkJcGVycm9yKCJTUEkgcmRfbW9kZSIpOworCQlyZXR1cm47CisJfQorCWlmIChpb2N0bChmZCwgU1BJX0lPQ19SRF9MU0JfRklSU1QsICZsc2IpIDwgMCkgeworCQlwZXJyb3IoIlNQSSByZF9sc2JfZmlzdCIpOworCQlyZXR1cm47CisJfQorCWlmIChpb2N0bChmZCwgU1BJX0lPQ19SRF9CSVRTX1BFUl9XT1JELCAmYml0cykgPCAwKSB7CisJCXBlcnJvcigiU1BJIGJpdHNfcGVyX3dvcmQiKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoaW9jdGwoZmQsIFNQSV9JT0NfUkRfTUFYX1NQRUVEX0haLCAmc3BlZWQpIDwgMCkgeworCQlwZXJyb3IoIlNQSSBtYXhfc3BlZWRfaHoiKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ZigiJXM6IHNwaSBtb2RlICVkLCAlZCBiaXRzICVzcGVyIHdvcmQsICVkIEh6IG1heFxuIiwKKwkJbmFtZSwgbW9kZSwgYml0cywgbHNiID8gIihsc2IgZmlyc3QpICIgOiAiIiwgc3BlZWQpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CQljOworCWludAkJcmVhZGNvdW50ID0gMDsKKwlpbnQJCW1zZ2xlbiA9IDA7CisJaW50CQlmZDsKKwljb25zdCBjaGFyCSpuYW1lOworCisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJobTpyOnYiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdtJzoKKwkJCW1zZ2xlbiA9IGF0b2kob3B0YXJnKTsKKwkJCWlmIChtc2dsZW4gPCAwKQorCQkJCWdvdG8gdXNhZ2U7CisJCQljb250aW51ZTsKKwkJY2FzZSAncic6CisJCQlyZWFkY291bnQgPSBhdG9pKG9wdGFyZyk7CisJCQlpZiAocmVhZGNvdW50IDwgMCkKKwkJCQlnb3RvIHVzYWdlOworCQkJY29udGludWU7CisJCWNhc2UgJ3YnOgorCQkJdmVyYm9zZSsrOworCQkJY29udGludWU7CisJCWNhc2UgJ2gnOgorCQljYXNlICc/JzoKK3VzYWdlOgorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJInVzYWdlOiAlcyBbLWhdIFstbSBOXSBbLXIgTl0gL2Rldi9zcGlkZXZCLkRcbiIsCisJCQkJYXJndlswXSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWlmICgob3B0aW5kICsgMSkgIT0gYXJnYykKKwkJZ290byB1c2FnZTsKKwluYW1lID0gYXJndltvcHRpbmRdOworCisJZmQgPSBvcGVuKG5hbWUsIE9fUkRXUik7CisJaWYgKGZkIDwgMCkgeworCQlwZXJyb3IoIm9wZW4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZHVtcHN0YXQobmFtZSwgZmQpOworCisJaWYgKG1zZ2xlbikKKwkJZG9fbXNnKGZkLCBtc2dsZW4pOworCisJaWYgKHJlYWRjb3VudCkKKwkJZG9fcmVhZChmZCwgcmVhZGNvdW50KTsKKworCWNsb3NlKGZkKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CmluZGV4IDU5MjJlODQuLjExMWZkMjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dApAQCAtMjIxLDE0ICsyMjEsMTQgQEAKIAogMDogdHJ5IHRvIGNvbnRpbnVlIG9wZXJhdGlvbgogCi0xOiBwYW5pYyBpbW1lZGlhdGx5LiAgSWYgdGhlIGBwYW5pYycgc3lzY3RsIGlzIGFsc28gbm9uLXplcm8gdGhlbiB0aGUKKzE6IHBhbmljIGltbWVkaWF0ZWx5LiAgSWYgdGhlIGBwYW5pYycgc3lzY3RsIGlzIGFsc28gbm9uLXplcm8gdGhlbiB0aGUKICAgIG1hY2hpbmUgd2lsbCBiZSByZWJvb3RlZC4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogcGlkX21heDoKIAotUElEIGFsbG9jYXRpb24gd3JhcCB2YWx1ZS4gIFdoZW4gdGhlIGtlbnJlbCdzIG5leHQgUElEIHZhbHVlCitQSUQgYWxsb2NhdGlvbiB3cmFwIHZhbHVlLiAgV2hlbiB0aGUga2VybmVsJ3MgbmV4dCBQSUQgdmFsdWUKIHJlYWNoZXMgdGhpcyB2YWx1ZSwgaXQgd3JhcHMgYmFjayB0byBhIG1pbmltdW0gUElEIHZhbHVlLgogUElEcyBvZiB2YWx1ZSBwaWRfbWF4IG9yIGxhcmdlciBhcmUgbm90IGFsbG9jYXRlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90aGlua3BhZC1hY3BpLnR4dCBiL0RvY3VtZW50YXRpb24vdGhpbmtwYWQtYWNwaS50eHQKaW5kZXggMmQ0ODAzMy4uOWU2Yjk0ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90aGlua3BhZC1hY3BpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RoaW5rcGFkLWFjcGkudHh0CkBAIC0xMzgsNyArMTM4LDcgQEAKIC0tLS0tLS0tCiAKIHByb2NmczogL3Byb2MvYWNwaS9pYm0vaG90a2V5Ci1zeXNmcyBkZXZpY2UgYXR0cmlidXRlOiBob3RrZXkvKgorc3lzZnMgZGV2aWNlIGF0dHJpYnV0ZTogaG90a2V5XyoKIAogV2l0aG91dCB0aGlzIGRyaXZlciwgb25seSB0aGUgRm4tRjQga2V5IChzbGVlcCBidXR0b24pIGdlbmVyYXRlcyBhbgogQUNQSSBldmVudC4gV2l0aCB0aGUgZHJpdmVyIGxvYWRlZCwgdGhlIGhvdGtleSBmZWF0dXJlIGVuYWJsZWQgYW5kIHRoZQpAQCAtMTk2LDEwICsxOTYsNyBAQAogCiBzeXNmcyBub3RlczoKIAotCVRoZSBob3Qga2V5cyBhdHRyaWJ1dGVzIGFyZSBpbiBhIGhvdGtleS8gc3ViZGlyZWN0b3J5IG9mZiB0aGUKLQl0aGlua3BhZCBkZXZpY2UuCi0KLQliaW9zX2VuYWJsZWQ6CisJaG90a2V5X2Jpb3NfZW5hYmxlZDoKIAkJUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBob3Qga2V5cyBmZWF0dXJlIHdoZW4KIAkJdGhpbmtwYWQtYWNwaSB3YXMgbG9hZGVkLiAgVXBvbiBtb2R1bGUgdW5sb2FkLCB0aGUgaG90CiAJCWtleSBmZWF0dXJlIHN0YXR1cyB3aWxsIGJlIHJlc3RvcmVkIHRvIHRoaXMgdmFsdWUuCkBAIC0yMDcsMTkgKzIwNCwxOSBAQAogCQkwOiBob3Qga2V5cyB3ZXJlIGRpc2FibGVkCiAJCTE6IGhvdCBrZXlzIHdlcmUgZW5hYmxlZAogCi0JYmlvc19tYXNrOgorCWhvdGtleV9iaW9zX21hc2s6CiAJCVJldHVybnMgdGhlIGhvdCBrZXlzIG1hc2sgd2hlbiB0aGlua3BhZC1hY3BpIHdhcyBsb2FkZWQuCiAJCVVwb24gbW9kdWxlIHVubG9hZCwgdGhlIGhvdCBrZXlzIG1hc2sgd2lsbCBiZSByZXN0b3JlZAogCQl0byB0aGlzIHZhbHVlLgogCi0JZW5hYmxlOgorCWhvdGtleV9lbmFibGU6CiAJCUVuYWJsZXMvZGlzYWJsZXMgdGhlIGhvdCBrZXlzIGZlYXR1cmUsIGFuZCByZXBvcnRzCiAJCWN1cnJlbnQgc3RhdHVzIG9mIHRoZSBob3Qga2V5cyBmZWF0dXJlLgogCiAJCTA6IGRpc2FibGVzIHRoZSBob3Qga2V5cyBmZWF0dXJlIC8gZmVhdHVyZSBkaXNhYmxlZAogCQkxOiBlbmFibGVzIHRoZSBob3Qga2V5cyBmZWF0dXJlIC8gZmVhdHVyZSBlbmFibGVkCiAKLQltYXNrOgorCWhvdGtleV9tYXNrOgogCQliaXQgbWFzayB0byBlbmFibGUgQUNQSSBldmVudCBnZW5lcmF0aW9uIGZvciBlYWNoIGhvdAogCQlrZXkgKHNlZSBhYm92ZSkuICBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaG90CiAJCWtleXMgbWFzaywgYW5kIGFsbG93cyBvbmUgdG8gbW9kaWZ5IGl0LgpAQCAtMjI5LDcgKzIyNiw3IEBACiAtLS0tLS0tLS0KIAogcHJvY2ZzOiAvcHJvYy9hY3BpL2libS9ibHVldG9vdGgKLXN5c2ZzIGRldmljZSBhdHRyaWJ1dGU6IGJsdWV0b290aC9lbmFibGUKK3N5c2ZzIGRldmljZSBhdHRyaWJ1dGU6IGJsdWV0b290aF9lbmFibGUKIAogVGhpcyBmZWF0dXJlIHNob3dzIHRoZSBwcmVzZW5jZSBhbmQgY3VycmVudCBzdGF0ZSBvZiBhIFRoaW5rUGFkCiBCbHVldG9vdGggZGV2aWNlIGluIHRoZSBpbnRlcm5hbCBUaGlua1BhZCBDREMgc2xvdC4KQEAgLTI0NCw3ICsyNDEsNyBAQAogU3lzZnMgbm90ZXM6CiAKIAlJZiB0aGUgQmx1ZXRvb3RoIENEQyBjYXJkIGlzIGluc3RhbGxlZCwgaXQgY2FuIGJlIGVuYWJsZWQgLwotCWRpc2FibGVkIHRocm91Z2ggdGhlICJibHVldG9vdGgvZW5hYmxlIiB0aGlua3BhZC1hY3BpIGRldmljZQorCWRpc2FibGVkIHRocm91Z2ggdGhlICJibHVldG9vdGhfZW5hYmxlIiB0aGlua3BhZC1hY3BpIGRldmljZQogCWF0dHJpYnV0ZSwgYW5kIGl0cyBjdXJyZW50IHN0YXR1cyBjYW4gYWxzbyBiZSBxdWVyaWVkLgogCiAJZW5hYmxlOgpAQCAtMjUyLDcgKzI0OSw3IEBACiAJCTE6IGVuYWJsZXMgQmx1ZXRvb3RoIC8gQmx1ZXRvb3RoIGlzIGVuYWJsZWQuCiAKIAlOb3RlOiB0aGlzIGludGVyZmFjZSB3aWxsIGJlIHByb2JhYmx5IGJlIHN1cGVyc2VlZGVkIGJ5IHRoZQotCWdlbmVyaWMgcmZraWxsIGNsYXNzLgorCWdlbmVyaWMgcmZraWxsIGNsYXNzLCBzbyBpdCBpcyBOT1QgdG8gYmUgY29uc2lkZXJlZCBzdGFibGUgeWV0LgogCiBWaWRlbyBvdXRwdXQgY29udHJvbCAtLSAvcHJvYy9hY3BpL2libS92aWRlbwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg5OCw3ICs4OTUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0KIAogcHJvY2ZzOiAvcHJvYy9hY3BpL2libS93YW4KLXN5c2ZzIGRldmljZSBhdHRyaWJ1dGU6IHd3YW4vZW5hYmxlCitzeXNmcyBkZXZpY2UgYXR0cmlidXRlOiB3d2FuX2VuYWJsZQogCiBUaGlzIGZlYXR1cmUgaXMgbWFya2VkIEVYUEVSSU1FTlRBTCBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgogZGlyZWN0bHkgYWNjZXNzZXMgaGFyZHdhcmUgcmVnaXN0ZXJzIGFuZCBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIFVTRQpAQCAtOTIxLDcgKzkxOCw3IEBACiBTeXNmcyBub3RlczoKIAogCUlmIHRoZSBXLVdBTiBjYXJkIGlzIGluc3RhbGxlZCwgaXQgY2FuIGJlIGVuYWJsZWQgLwotCWRpc2FibGVkIHRocm91Z2ggdGhlICJ3d2FuL2VuYWJsZSIgdGhpbmtwYWQtYWNwaSBkZXZpY2UKKwlkaXNhYmxlZCB0aHJvdWdoIHRoZSAid3dhbl9lbmFibGUiIHRoaW5rcGFkLWFjcGkgZGV2aWNlCiAJYXR0cmlidXRlLCBhbmQgaXRzIGN1cnJlbnQgc3RhdHVzIGNhbiBhbHNvIGJlIHF1ZXJpZWQuCiAKIAllbmFibGU6CkBAIC05MjksNyArOTI2LDcgQEAKIAkJMTogZW5hYmxlcyBXV0FOIGNhcmQgLyBXV0FOIGNhcmQgaXMgZW5hYmxlZC4KIAogCU5vdGU6IHRoaXMgaW50ZXJmYWNlIHdpbGwgYmUgcHJvYmFibHkgYmUgc3VwZXJzZWVkZWQgYnkgdGhlCi0JZ2VuZXJpYyByZmtpbGwgY2xhc3MuCisJZ2VuZXJpYyByZmtpbGwgY2xhc3MsIHNvIGl0IGlzIE5PVCB0byBiZSBjb25zaWRlcmVkIHN0YWJsZSB5ZXQuCiAKIE11bHRpcGxlIENvbW1hbmRzLCBNb2R1bGUgUGFyYW1ldGVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3R0eS50eHQgYi9Eb2N1bWVudGF0aW9uL3R0eS50eHQKaW5kZXggNWY3OTllNi4uMDQ4YTg3NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90dHkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHR5LnR4dApAQCAtMTA4LDcgKzEwOCw5IEBACiBzdHJ1Y3R1cmU6CiAKIHdyaXRlKCkJCQlXcml0ZSBhIGJsb2NrIG9mIGNoYXJhY3RlcnMgdG8gdGhlIHR0eSBkZXZpY2UuCi0JCQlSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZC4KKwkJCVJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjY2VwdGVkLiBUaGUKKwkJCWNoYXJhY3RlciBidWZmZXIgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIGlzIGFscmVhZHkKKwkJCWluIGtlcm5lbCBzcGFjZS4KIAogcHV0X2NoYXIoKQkJUXVldWVzIGEgY2hhcmFjdGVyIGZvciB3cml0aW5nIHRvIHRoZSB0dHkgZGV2aWNlLgogCQkJSWYgdGhlcmUgaXMgbm8gcm9vbSBpbiB0aGUgcXVldWUsIHRoZSBjaGFyYWN0ZXIgaXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL0NSRURJVFMgYi9Eb2N1bWVudGF0aW9uL3VzYi9DUkVESVRTCmluZGV4IDI3YTcyMTYuLjY3YzU5Y2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL0NSRURJVFMKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvQ1JFRElUUwpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICAgIHdpbGwgc2VsbCBrZXlib2FyZHMgdG8gc29tZSBvZiB0aGUgMyBtaWxsaW9uIChhdCBsZWFzdCkKICAgICAgICAgICBMaW51eCB1c2Vycy4KIAotICAgICAgICAtIE1hbnkgdGhhbmtzIHRvIGluZyBi/HJvIGggZG9yYW4gW2h0dHA6Ly93d3cuaWJoZG9yYW4uY29tXSEKKyAgICAgICAgLSBNYW55IHRoYW5rcyB0byBpbmcgYsO8cm8gaCBkb3JhbiBbaHR0cDovL3d3dy5pYmhkb3Jhbi5jb21dIQogICAgICAgICAgIEl0IHdhcyBhbG1vc3QgaW1wb3NzaWJsZSB0byBnZXQgYSBQQyBiYWNrcGxhdGUgVVNCIGNvbm5lY3RvcgogICAgICAgICAgIGZvciB0aGUgbW90aGVyYm9hcmQgaGVyZSBhdCBFdXJvcGUgKG1pbmUsIGhvbWUtbWFkZSwgd2FzCiAgICAgICAgICAgcXVpdGUgbG91c3kgOikuIE5vdyBJIGtub3cgd2hlcmUgdG8gYWNxdWlyZSBuaWNlIFVTQiBzdHVmZiEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQKaW5kZXggYjE4ZTg2YS4uNWI2MzVhZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQKQEAgLTQ1LDkgKzQ1LDkgQEAKICAgQ29ubmVjdCBUZWNoJ3MgU3VwcG9ydCBEZXBhcnRtZW50IGF0IHN1cHBvcnRAY29ubmVjdHRlY2guY29tCiAKIAotSGFuZFNwcmluZyBWaXNvciwgUGFsbSBVU0IsIGFuZCBDbGnpIFVTQiBkcml2ZXIKK0hhbmRTcHJpbmcgVmlzb3IsIFBhbG0gVVNCLCBhbmQgQ2xpw6kgVVNCIGRyaXZlcgogCi0gIFRoaXMgZHJpdmVyIHdvcmtzIHdpdGggYWxsIEhhbmRTcHJpbmcgVVNCLCBQYWxtIFVTQiwgYW5kIFNvbnkgQ2xp6SBVU0IKKyAgVGhpcyBkcml2ZXIgd29ya3Mgd2l0aCBhbGwgSGFuZFNwcmluZyBVU0IsIFBhbG0gVVNCLCBhbmQgU29ueSBDbGnDqSBVU0IKICAgZGV2aWNlcy4KIAogICBPbmx5IHdoZW4gdGhlIGRldmljZSB0cmllcyB0byBjb25uZWN0IHRvIHRoZSBob3N0LCB3aWxsIHRoZSBkZXZpY2Ugc2hvdwpAQCAtNjksNyArNjksNyBAQAogICB0aGUgcG9ydCB0byB1c2UgZm9yIHRoZSBIb3RTeW5jIHRyYW5zZmVyLiBUaGUgIkdlbmVyaWMiIHBvcnQgY2FuIGJlIHVzZWQKICAgZm9yIG90aGVyIGRldmljZSBjb21tdW5pY2F0aW9uLCBzdWNoIGFzIGEgUFBQIGxpbmsuCiAKLSAgRm9yIHNvbWUgU29ueSBDbGnpIGRldmljZXMsIC9kZXYvdHR5VVNCMCBtdXN0IGJlIHVzZWQgdG8gdGFsayB0byB0aGUKKyAgRm9yIHNvbWUgU29ueSBDbGnDqSBkZXZpY2VzLCAvZGV2L3R0eVVTQjAgbXVzdCBiZSB1c2VkIHRvIHRhbGsgdG8gdGhlCiAgIGRldmljZS4gIFRoaXMgaXMgdHJ1ZSBmb3IgYWxsIE9TIHZlcnNpb24gMy41IGRldmljZXMsIGFuZCBtb3N0IGRldmljZXMKICAgdGhhdCBoYXZlIGhhZCBhIGZsYXNoIHVwZ3JhZGUgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBPUy4gIFNlZSB0aGUKICAga2VybmVsIHN5c3RlbSBsb2cgZm9yIGluZm9ybWF0aW9uIG9uIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHBvcnQgdG8gdXNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CmluZGV4IGQ3YmIyZTIuLjcxMmU4YzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKQEAgLTUyLDcgKzUyLDcgQEAKICA1MSAtPiBQcm9WaWRlbyBQVjk1MiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNTQwOjk1MjRdCiAgNTIgLT4gQXZlck1lZGlhIEF2ZXJUVi8zMDUgICAgICAgICAgICAgICAgICAgICBbMTQ2MToyMTA4XQogIDUzIC0+IEFTVVMgVFYtRk0gNzEzNSAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg0NV0KLSA1NCAtPiBMaWZlVmlldyBGbHlUViBQbGF0aW51bSBGTSAvIEdvbGQgICAgICAgIFs1MTY4OjAyMTQsMTQ4OTowMjE0LDUxNjg6MDMwNF0KKyA1NCAtPiBMaWZlVmlldyBGbHlUViBQbGF0aW51bSBGTSAvIEdvbGQgICAgICAgIFs1MTY4OjAyMTQsNTE2ODo1MjE0LDE0ODk6MDIxNCw1MTY4OjAzMDRdCiAgNTUgLT4gTGlmZVZpZXcgRmx5RFZCLVQgRFVPIC8gTVNJIFRWQG55d2hlcmUgRHVvIFs1MTY4OjAzMDYsNEU0MjowMzA2XQogIDU2IC0+IEF2ZXJtZWRpYSBBVmVyVFYgMzA3ICAgICAgICAgICAgICAgICAgICAgWzE0NjE6YTcwYV0KICA1NyAtPiBBdmVybWVkaWEgQVZlclRWIEdPIDAwNyBGTSAgICAgICAgICAgICAgIFsxNDYxOmYzMWZdCkBAIC0xMTEsMyArMTExLDYgQEAKIDExMCAtPiBBdmVybWVkaWEgTTEwMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOmYzMWVdCiAxMTEgLT4gQVNVUyBQNzEzMSA0ODcxICAgICAgICAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODcxXQogMTEyIC0+IEFTVVNUZUsgUDcxMzEgSHlicmlkICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg3Nl0KKzExMyAtPiBFbGl0ZWdyb3VwIEVDUyBUVlAzWFAgRk0xMjQ2IFR1bmVyIENhcmQgKFBBTCxGTSkgWzEwMTk6NGNiNl0KKzExNCAtPiBLV29ybGQgRFZCLVQgMjEwICAgICAgICAgICAgICAgICAgICAgICAgIFsxN2RlOjcyNTBdCisxMTUgLT4gU2FicmVudCBQQ01DSUEgVFYtUENCMDUgICAgICAgICAgICAgICAgICBbMDkxOToyMDAzXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUucHZydXNiMiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnB2cnVzYjIKaW5kZXggYTRiN2FlOC4uYTc0NzIwMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUucHZydXNiMgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5wdnJ1c2IyCkBAIC04LDcgKzgsNyBAQAogCiAgIFRoaXMgZHJpdmVyIGlzIGludGVuZGVkIGZvciB0aGUgIkhhdXBwYXVnZSBXaW5UViBQVlIgVVNCIDIuMCIsIHdoaWNoCiAgIGlzIGEgVVNCIDIuMCBob3N0ZWQgVFYgVHVuZXIuICBUaGlzIGRyaXZlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MuCi0gIEl0cyBoaXN0b3J5IHN0YXJ0ZWQgd2l0aCB0aGUgcmV2ZXJzZS1lbmdpbmVlcmluZyBlZmZvcnQgYnkgQmr2cm4KKyAgSXRzIGhpc3Rvcnkgc3RhcnRlZCB3aXRoIHRoZSByZXZlcnNlLWVuZ2luZWVyaW5nIGVmZm9ydCBieSBCasO2cm4KICAgRGFuaWVsc3NvbiA8cHZydXNiMkBkYXgubnU+IHdob3NlIHdlYiBwYWdlIGNhbiBiZSBmb3VuZCBoZXJlOgogCiAgICAgaHR0cDovL3B2cnVzYjIuZGF4Lm51LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KaW5kZXggODVjNTc1YS4uMjk1NDYyYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuCkBAIC0yNDIsNyArMjQyLDcgQEAKIAogQ29uZXhhbnQgYnQ4NjYgVFYgZW5jb2RlcgogaXMgdXNlZCBpbiBBVlM2RVlFUywgYW5kCi1jYW4gZ2VuZXJhdGU6IE5UU0MvUEFMLCBQQUytTSwgUEFMrU4KK2NhbiBnZW5lcmF0ZTogTlRTQy9QQUwsIFBBTMKtTSwgUEFMwq1OCiAKIFRoZSBhZHY3MTd4LCBzaG91bGQgYmUgYWJsZSB0byBwcm9kdWNlIFBBTCBOLiBCdXQgeW91IGZpbmQgbm90aGluZyBQQUwgTgogc3BlY2lmaWMgaW4gdGhlIHJlZ2lzdGVycy4gU2VlbSB0aGF0IHlvdSBoYXZlIHRvIHJldXNlIGEgb3RoZXIgc3RhbmRhcmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvbWV5ZS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L21leWUudHh0CmluZGV4IDVlNTFjNTkuLmJmM2FmNWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvbWV5ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9tZXllLnR4dApAQCAtMSw3ICsxLDcgQEAKIFZhaW8gUGljdHVyZWJvb2sgTW90aW9uIEV5ZSBDYW1lcmEgRHJpdmVyIFJlYWRtZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgU3RlbGlhbiBQb3AgPHN0ZWxpYW5AcG9waWVzLm5ldD4KLQlDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBBbGP0dmUgPHd3dy5hbGNvdmUuY29tPgorCUNvcHlyaWdodCAoQykgMjAwMS0yMDAyIEFsY8O0dmUgPHd3dy5hbGNvdmUuY29tPgogCUNvcHlyaWdodCAoQykgMjAwMCBBbmRyZXcgVHJpZGdlbGwgPHRyaWRnZUBzYW1iYS5vcmc+CiAKIFRoaXMgZHJpdmVyIGVuYWJsZSB0aGUgdXNlIG9mIHZpZGVvNGxpbnV4IGNvbXBhdGlibGUgYXBwbGljYXRpb25zIHdpdGggdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L292NTExLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvb3Y1MTEudHh0CmluZGV4IDc5YWY2MTAuLmIzMzI2YjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvb3Y1MTEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvb3Y1MTEudHh0CkBAIC0xOTUsMTEgKzE5NSwxMSBAQAogICBOQU1FOiBiYW5kaW5nZmlsdGVyCiAgIFRZUEU6IGludGVnZXIgKEJvb2xlYW4pCiAgIERFRkFVTFQ6IDAgKG9mZikKLSAgREVTQzogRW5hYmxlcyB0aGUgc2Vuc29ytHMgYmFuZGluZyBmaWx0ZXIgZXhwb3N1cmUgYWxnb3JpdGhtLiBUaGlzIHJlZHVjZXMKKyAgREVTQzogRW5hYmxlcyB0aGUgc2Vuc29ywrRzIGJhbmRpbmcgZmlsdGVyIGV4cG9zdXJlIGFsZ29yaXRobS4gVGhpcyByZWR1Y2VzCiAJb3Igc3RhYmlsaXplcyB0aGUgImJhbmRpbmciIGNhdXNlZCBieSBzb21lIGFydGlmaWNpYWwgbGlnaHQgc291cmNlcwogCShlc3BlY2lhbGx5IGZsdW9yZXNjZW50KS4gWW91IG1pZ2h0IGhhdmUgdG8gc2V0IGxpZ2h0ZnJlcSBjb3JyZWN0bHkgZm9yCiAJdGhpcyB0byB3b3JrIHJpZ2h0LiBBcyBhbiBhZGRlZCBib251cywgdGhpcyBzb21ldGltZXMgbWFrZXMgaXQKLQlwb3NzaWJsZSB0byBjYXB0dXJlIHlvdXIgbW9uaXRvcrRzIG91dHB1dC4KKwlwb3NzaWJsZSB0byBjYXB0dXJlIHlvdXIgbW9uaXRvcsK0cyBvdXRwdXQuCiAKICAgTkFNRTogZmFzdHNldAogICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zbjljMTAyLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc245YzEwMi50eHQKaW5kZXggNWZlMGFkNy4uMjc5NzE3YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zbjljMTAyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NuOWMxMDIudHh0CkBAIC0zNTUsNiArMzU1LDkgQEAKIAogVmVuZG9yIElEICBQcm9kdWN0IElECiAtLS0tLS0tLS0gIC0tLS0tLS0tLS0KKzB4MDQ1OCAgICAgMHg3MDI1CisweDA0NWUgICAgIDB4MDBmNQorMHgwNDVlICAgICAweDAwZjcKIDB4MDQ3MSAgICAgMHgwMzI3CiAweDA0NzEgICAgIDB4MDMyOAogMHgwYzQ1ICAgICAweDYwMDEKQEAgLTQzMiw3ICs0MzUsNyBAQAogSFY3MTMxRCAgICBIeW5peCBTZW1pY29uZHVjdG9yICAgICB8IFllcyAgICAgICAgIE5vICAgICAgIE5vICAgICAgIE5vCiBIVjcxMzFSICAgIEh5bml4IFNlbWljb25kdWN0b3IgICAgIHwgTm8gICAgICAgICAgWWVzICAgICAgWWVzICAgICAgWWVzCiBNSS0wMzQzICAgIE1pY3JvbiBUZWNobm9sb2d5ICAgICAgIHwgWWVzICAgICAgICAgTm8gICAgICAgTm8gICAgICAgTm8KLU1JLTAzNjAgICAgTWljcm9uIFRlY2hub2xvZ3kgICAgICAgfCBObyAgICAgICAgICBZZXMgICAgICBObyAgICAgICBObworTUktMDM2MCAgICBNaWNyb24gVGVjaG5vbG9neSAgICAgICB8IE5vICAgICAgICAgIFllcyAgICAgIFllcyAgICAgIFllcwogT1Y3NjMwICAgICBPbW5pVmlzaW9uIFRlY2hub2xvZ2llcyB8IFllcyAgICAgICAgIFllcyAgICAgIE5vICAgICAgIE5vCiBPVjc2NjAgICAgIE9tbmlWaXNpb24gVGVjaG5vbG9naWVzIHwgTm8gICAgICAgICAgTm8gICAgICAgWWVzICAgICAgWWVzCiBQQVMxMDZCICAgIFBpeEFydCBJbWFnaW5nICAgICAgICAgIHwgWWVzICAgICAgICAgTm8gICAgICAgTm8gICAgICAgTm8KQEAgLTQ3OCwxMyArNDgxLDEyIEBACiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0d28gZGlmZmVyZW50IHZpZGVvIGZvcm1hdHM6IHRoZSBmaXJzdCBvbmUgaXMgdGhlICI4LWJpdAogU2VxdWVudGlhbCBCYXllciIgZm9ybWF0IGFuZCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gdW5jb21wcmVzc2VkIHZpZGVvIGRhdGEKIGZyb20gdGhlIGRldmljZSB0aHJvdWdoIHRoZSBjdXJyZW50IEkvTyBtZXRob2QsIHdoaWxlIHRoZSBzZWNvbmQgb25lIHByb3ZpZGVzCi0icmF3IiBjb21wcmVzc2VkIHZpZGVvIGRhdGEgKHdpdGhvdXQgZnJhbWUgaGVhZGVycyBub3QgcmVsYXRlZCB0byB0aGUKLWNvbXByZXNzZWQgZGF0YSkuIFRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IG1heSB2YXJ5IGZyb20gMCB0byAxIGFuZCBjYW4gYmUKLXNlbGVjdGVkIG9yIHF1ZXJpZWQgdGhhbmtzIHRvIHRoZSBWSURJT0NfU19KUEVHQ09NUCBhbmQgVklESU9DX0dfSlBFR0NPTVAgVjRMMgotaW9jdGwncy4gRm9yIG1heGltdW0gZmxleGliaWxpdHksIGJvdGggdGhlIGRlZmF1bHQgYWN0aXZlIHZpZGVvIGZvcm1hdCBhbmQgdGhlCi1kZWZhdWx0IGNvbXByZXNzaW9uIHF1YWxpdHkgZGVwZW5kIG9uIGhvdyB0aGUgaW1hZ2Ugc2Vuc29yIGJlaW5nIHVzZWQgaXMKLWluaXRpYWxpemVkIChhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIEFQSSBmb3IgdGhlIGltYWdlIHNlbnNvcnMKLXN1cHBsaWVkIGJ5IHRoaXMgZHJpdmVyKS4KK2VpdGhlciAicmF3IiBjb21wcmVzc2VkIHZpZGVvIGRhdGEgKHdpdGhvdXQgZnJhbWUgaGVhZGVycyBub3QgcmVsYXRlZCB0byB0aGUKK2NvbXByZXNzZWQgZGF0YSkgb3Igc3RhbmRhcmQgSlBFRyAod2l0aCBmcmFtZSBoZWFkZXJzKS4gVGhlIGNvbXByZXNzaW9uIHF1YWxpdHkKK21heSB2YXJ5IGZyb20gMCB0byAxIGFuZCBjYW4gYmUgc2VsZWN0ZWQgb3IgcXVlcmllZCB0aGFua3MgdG8gdGhlCitWSURJT0NfU19KUEVHQ09NUCBhbmQgVklESU9DX0dfSlBFR0NPTVAgVjRMMiBpb2N0bCdzLiBGb3IgbWF4aW11bSBmbGV4aWJpbGl0eSwKK2JvdGggdGhlIGRlZmF1bHQgYWN0aXZlIHZpZGVvIGZvcm1hdCBhbmQgdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gcXVhbGl0eQorZGVwZW5kIG9uIGhvdyB0aGUgaW1hZ2Ugc2Vuc29yIGJlaW5nIHVzZWQgaXMgaW5pdGlhbGl6ZWQuCiAKIAogMTEuIFZpZGVvIGZyYW1lIGZvcm1hdHMgWzFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3NsYWJpbmZvLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL3NsYWJpbmZvLmMKaW5kZXggNDE3MTBjYy4uZDRmMjFmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9zbGFiaW5mby5jCisrKyBiL0RvY3VtZW50YXRpb24vdm0vc2xhYmluZm8uYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPGdldG9wdC5oPgogI2luY2x1ZGUgPHJlZ2V4Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KIAogI2RlZmluZSBNQVhfU0xBQlMgNTAwCiAjZGVmaW5lIE1BWF9BTElBU0VTIDUwMApAQCAtNDEsMTIgKzQyLDE1IEBACiB9IGFsaWFzaW5mb1tNQVhfQUxJQVNFU107CiAKIGludCBzbGFicyA9IDA7CitpbnQgYWN0dWFsX3NsYWJzID0gMDsKIGludCBhbGlhc2VzID0gMDsKIGludCBhbGlhc190YXJnZXRzID0gMDsKIGludCBoaWdoZXN0X25vZGUgPSAwOwogCiBjaGFyIGJ1ZmZlcls0MDk2XTsKIAoraW50IHNob3dfZW1wdHkgPSAwOworaW50IHNob3dfcmVwb3J0ID0gMDsKIGludCBzaG93X2FsaWFzID0gMDsKIGludCBzaG93X3NsYWIgPSAwOwogaW50IHNraXBfemVybyA9IDE7CkBAIC01OSw2ICs2MywxNSBAQAogaW50IHNob3dfc2luZ2xlX3JlZiA9IDA7CiBpbnQgc2hvd190b3RhbHMgPSAwOwogaW50IHNvcnRfc2l6ZSA9IDA7CitpbnQgc2V0X2RlYnVnID0gMDsKK2ludCBzaG93X29wcyA9IDA7CisKKy8qIERlYnVnIG9wdGlvbnMgKi8KK2ludCBzYW5pdHkgPSAwOworaW50IHJlZHpvbmUgPSAwOworaW50IHBvaXNvbiA9IDA7CitpbnQgdHJhY2tpbmcgPSAwOworaW50IHRyYWNpbmcgPSAwOwogCiBpbnQgcGFnZV9zaXplOwogCkBAIC03NiwyMCArODksMzMgQEAKIAogdm9pZCB1c2FnZSh2b2lkKQogewotCXByaW50Zigic2xhYmluZm8gWy1haG5wdnRzel0gW3NsYWItcmVnZXhwXVxuIgorCXByaW50Zigic2xhYmluZm8gNS83LzIwMDcuIChjKSAyMDA3IHNnaS4gY2xhbWV0ZXJAc2dpLmNvbVxuXG4iCisJCSJzbGFiaW5mbyBbLWFobnB2dHN6XSBbLWQgZGVidWdvcHRzXSBbc2xhYi1yZWdleHBdXG4iCiAJCSItYXwtLWFsaWFzZXMgICAgICAgICAgIFNob3cgYWxpYXNlc1xuIgorCQkiLWQ8b3B0aW9ucz58LS1kZWJ1Zz08b3B0aW9ucz4gU2V0L0NsZWFyIERlYnVnIG9wdGlvbnNcbiIKKwkJIi1lfC0tZW1wdHkJCVNob3cgZW1wdHkgc2xhYnNcbiIKKwkJIi1mfC0tZmlyc3QtYWxpYXMgICAgICAgU2hvdyBmaXJzdCBhbGlhc1xuIgogCQkiLWh8LS1oZWxwICAgICAgICAgICAgICBTaG93IHVzYWdlIGluZm9ybWF0aW9uXG4iCisJCSItaXwtLWludmVydGVkICAgICAgICAgIEludmVydGVkIGxpc3RcbiIKKwkJIi1sfC0tc2xhYnMgICAgICAgICAgICAgU2hvdyBzbGFic1xuIgogCQkiLW58LS1udW1hICAgICAgICAgICAgICBTaG93IE5VTUEgaW5mb3JtYXRpb25cbiIKKwkJIi1vfC0tb3BzCQlTaG93IGttZW1fY2FjaGVfb3BzXG4iCiAJCSItc3wtLXNocmluayAgICAgICAgICAgIFNocmluayBzbGFic1xuIgotCQkiLXZ8LS12YWxpZGF0ZSAgICAgICAgICBWYWxpZGF0ZSBzbGFic1xuIgorCQkiLXJ8LS1yZXBvcnQJCURldGFpbGVkIHJlcG9ydCBvbiBzaW5nbGUgc2xhYnNcbiIKKwkJIi1TfC0tU2l6ZSAgICAgICAgICAgICAgU29ydCBieSBzaXplXG4iCiAJCSItdHwtLXRyYWNraW5nICAgICAgICAgIFNob3cgYWxsb2MvZnJlZSBpbmZvcm1hdGlvblxuIgogCQkiLVR8LS1Ub3RhbHMgICAgICAgICAgICBTaG93IHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKLQkJIi1sfC0tc2xhYnMgICAgICAgICAgICAgU2hvdyBzbGFic1xuIgotCQkiLVN8LS1TaXplICAgICAgICAgICAgICBTb3J0IGJ5IHNpemVcbiIKKwkJIi12fC0tdmFsaWRhdGUgICAgICAgICAgVmFsaWRhdGUgc2xhYnNcbiIKIAkJIi16fC0temVybyAgICAgICAgICAgICAgSW5jbHVkZSBlbXB0eSBzbGFic1xuIgotCQkiLWZ8LS1maXJzdC1hbGlhcyAgICAgICBTaG93IGZpcnN0IGFsaWFzXG4iCi0JCSItaXwtLWludmVydGVkICAgICAgICAgIEludmVydGVkIGxpc3RcbiIKIAkJIi0xfC0tMXJlZiAgICAgICAgICAgICAgU2luZ2xlIHJlZmVyZW5jZVxuIgorCQkiXG5WYWxpZCBkZWJ1ZyBvcHRpb25zIChGWlBVVCBtYXkgYmUgY29tYmluZWQpXG4iCisJCSJhIC8gQSAgICAgICAgICBTd2l0Y2ggb24gYWxsIGRlYnVnIG9wdGlvbnMgKD1GWlVQKVxuIgorCQkiLSAgICAgICAgICAgICAgU3dpdGNoIG9mZiBhbGwgZGVidWcgb3B0aW9uc1xuIgorCQkiZiAvIEYgICAgICAgICAgU2FuaXR5IENoZWNrcyAoU0xBQl9ERUJVR19GUkVFKVxuIgorCQkieiAvIFogICAgICAgICAgUmVkem9uaW5nXG4iCisJCSJwIC8gUCAgICAgICAgICBQb2lzb25pbmdcbiIKKwkJInUgLyBVICAgICAgICAgIFRyYWNraW5nXG4iCisJCSJ0IC8gVCAgICAgICAgICBUcmFjaW5nXG4iCiAJKTsKIH0KIApAQCAtMTQzLDExICsxNjksMTAgQEAKIHZvaWQgc2V0X29iaihzdHJ1Y3Qgc2xhYmluZm8gKnMsIGNoYXIgKm5hbWUsIGludCBuKQogewogCWNoYXIgeFsxMDBdOworCUZJTEUgKmY7CiAKIAlzcHJpbnRmKHgsICIlcy8lcyIsIHMtPm5hbWUsIG5hbWUpOwotCi0JRklMRSAqZiA9IGZvcGVuKHgsICJ3Iik7Ci0KKwlmID0gZm9wZW4oeCwgInciKTsKIAlpZiAoIWYpCiAJCWZhdGFsKCJDYW5ub3Qgd3JpdGUgdG8gJXNcbiIsIHgpOwogCkBAIC0xNTUsNiArMTgwLDI2IEBACiAJZmNsb3NlKGYpOwogfQogCit1bnNpZ25lZCBsb25nIHJlYWRfc2xhYl9vYmooc3RydWN0IHNsYWJpbmZvICpzLCBjaGFyICpuYW1lKQoreworCWNoYXIgeFsxMDBdOworCUZJTEUgKmY7CisJaW50IGw7CisKKwlzcHJpbnRmKHgsICIlcy8lcyIsIHMtPm5hbWUsIG5hbWUpOworCWYgPSBmb3Blbih4LCAiciIpOworCWlmICghZikgeworCQlidWZmZXJbMF0gPSAwOworCQlsID0gMDsKKwl9IGVsc2UgeworCQlsID0gZnJlYWQoYnVmZmVyLCAxLCBzaXplb2YoYnVmZmVyKSwgZik7CisJCWJ1ZmZlcltsXSA9IDA7CisJCWZjbG9zZShmKTsKKwl9CisJcmV0dXJuIGw7Cit9CisKKwogLyoKICAqIFB1dCBhIHNpemUgc3RyaW5nIHRvZ2V0aGVyCiAgKi8KQEAgLTE5Nyw2ICsyNDIsOSBAQAogCiAJbWVtc2V0KG51bWEsIDAsIE1BWF9OT0RFUyAqIHNpemVvZihpbnQpKTsKIAorCWlmICghdCkKKwkJcmV0dXJuOworCiAJd2hpbGUgKCp0ID09ICdOJykgewogCQl0Kys7CiAJCW5vZGUgPSBzdHJ0b3VsKHQsICZ0LCAxMCk7CkBAIC0yMTQsMTEgKzI2MiwxNyBAQAogCiB2b2lkIHNsYWJfdmFsaWRhdGUoc3RydWN0IHNsYWJpbmZvICpzKQogeworCWlmIChzdHJjbXAocy0+bmFtZSwgIioiKSA9PSAwKQorCQlyZXR1cm47CisKIAlzZXRfb2JqKHMsICJ2YWxpZGF0ZSIsIDEpOwogfQogCiB2b2lkIHNsYWJfc2hyaW5rKHN0cnVjdCBzbGFiaW5mbyAqcykKIHsKKwlpZiAoc3RyY21wKHMtPm5hbWUsICIqIikgPT0gMCkKKwkJcmV0dXJuOworCiAJc2V0X29iaihzLCAic2hyaW5rIiwgMSk7CiB9CiAKQEAgLTIyNiw3ICsyODAsNyBAQAogCiB2b2lkIGZpcnN0X2xpbmUodm9pZCkKIHsKLQlwcmludGYoIk5hbWUgICAgICAgICAgICAgICAgIE9iamVjdHMgICBPYmpzaXplICAgIFNwYWNlICIKKwlwcmludGYoIk5hbWUgICAgICAgICAgICAgICAgICAgT2JqZWN0cyBPYmpzaXplICAgIFNwYWNlICIKIAkJIlNsYWJzL1BhcnQvQ3B1ICBPL1MgTyAlJUZyICUlRWYgRmxnXG4iKTsKIH0KIApAQCAtMjQ2LDEwICszMDAsNyBAQAogCQkJCQlyZXR1cm4gYmVzdDsKIAkJCX0KIAl9Ci0JaWYgKGJlc3QpCi0JCXJldHVybiBiZXN0OwotCWZhdGFsKCJDYW5ub3QgZmluZCBhbGlhcyBmb3IgJXNcbiIsIGZpbmQtPm5hbWUpOwotCXJldHVybiBOVUxMOworCXJldHVybiBiZXN0OwogfQogCiB1bnNpZ25lZCBsb25nIHNsYWJfc2l6ZShzdHJ1Y3Qgc2xhYmluZm8gKnMpCkBAIC0yNTcsNiArMzA4LDEyOCBAQAogCXJldHVybiAJcy0+c2xhYnMgKiAocGFnZV9zaXplIDw8IHMtPm9yZGVyKTsKIH0KIAordm9pZCBzbGFiX251bWEoc3RydWN0IHNsYWJpbmZvICpzLCBpbnQgbW9kZSkKK3sKKwlpbnQgbm9kZTsKKworCWlmIChzdHJjbXAocy0+bmFtZSwgIioiKSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoIWhpZ2hlc3Rfbm9kZSkgeworCQlwcmludGYoIlxuJXM6IE5vIE5VTUEgaW5mb3JtYXRpb24gYXZhaWxhYmxlLlxuIiwgcy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc2tpcF96ZXJvICYmICFzLT5zbGFicykKKwkJcmV0dXJuOworCisJaWYgKCFsaW5lKSB7CisJCXByaW50ZigiXG4lLTIxczoiLCBtb2RlID8gIk5VTUEgbm9kZXMiIDogIlNsYWIiKTsKKwkJZm9yKG5vZGUgPSAwOyBub2RlIDw9IGhpZ2hlc3Rfbm9kZTsgbm9kZSsrKQorCQkJcHJpbnRmKCIgJTRkIiwgbm9kZSk7CisJCXByaW50ZigiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisJCWZvcihub2RlID0gMDsgbm9kZSA8PSBoaWdoZXN0X25vZGU7IG5vZGUrKykKKwkJCXByaW50ZigiLS0tLS0iKTsKKwkJcHJpbnRmKCJcbiIpOworCX0KKwlwcmludGYoIiUtMjFzICIsIG1vZGUgPyAiQWxsIHNsYWJzIiA6IHMtPm5hbWUpOworCWZvcihub2RlID0gMDsgbm9kZSA8PSBoaWdoZXN0X25vZGU7IG5vZGUrKykgeworCQljaGFyIGJbMjBdOworCisJCXN0b3JlX3NpemUoYiwgcy0+bnVtYVtub2RlXSk7CisJCXByaW50ZigiICU0cyIsIGIpOworCX0KKwlwcmludGYoIlxuIik7CisJaWYgKG1vZGUpIHsKKwkJcHJpbnRmKCIlLTIxcyAiLCAiUGFydGlhbCBzbGFicyIpOworCQlmb3Iobm9kZSA9IDA7IG5vZGUgPD0gaGlnaGVzdF9ub2RlOyBub2RlKyspIHsKKwkJCWNoYXIgYlsyMF07CisKKwkJCXN0b3JlX3NpemUoYiwgcy0+bnVtYV9wYXJ0aWFsW25vZGVdKTsKKwkJCXByaW50ZigiICU0cyIsIGIpOworCQl9CisJCXByaW50ZigiXG4iKTsKKwl9CisJbGluZSsrOworfQorCit2b2lkIHNob3dfdHJhY2tpbmcoc3RydWN0IHNsYWJpbmZvICpzKQoreworCXByaW50ZigiXG4lczogS2VybmVsIG9iamVjdCBhbGxvY2F0aW9uXG4iLCBzLT5uYW1lKTsKKwlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlpZiAocmVhZF9zbGFiX29iaihzLCAiYWxsb2NfY2FsbHMiKSkKKwkJcHJpbnRmKGJ1ZmZlcik7CisJZWxzZQorCQlwcmludGYoIk5vIERhdGFcbiIpOworCisJcHJpbnRmKCJcbiVzOiBLZXJuZWwgb2JqZWN0IGZyZWVpbmdcbiIsIHMtPm5hbWUpOworCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlpZiAocmVhZF9zbGFiX29iaihzLCAiZnJlZV9jYWxscyIpKQorCQlwcmludGYoYnVmZmVyKTsKKwllbHNlCisJCXByaW50ZigiTm8gRGF0YVxuIik7CisKK30KKwordm9pZCBvcHMoc3RydWN0IHNsYWJpbmZvICpzKQoreworCWlmIChzdHJjbXAocy0+bmFtZSwgIioiKSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAocmVhZF9zbGFiX29iaihzLCAib3BzIikpIHsKKwkJcHJpbnRmKCJcbiVzOiBrbWVtX2NhY2hlIG9wZXJhdGlvbnNcbiIsIHMtPm5hbWUpOworCQlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJcHJpbnRmKGJ1ZmZlcik7CisJfSBlbHNlCisJCXByaW50ZigiXG4lcyBoYXMgbm8ga21lbV9jYWNoZSBvcGVyYXRpb25zXG4iLCBzLT5uYW1lKTsKK30KKworY29uc3QgY2hhciAqb25vZmYoaW50IHgpCit7CisJaWYgKHgpCisJCXJldHVybiAiT24gIjsKKwlyZXR1cm4gIk9mZiI7Cit9CisKK3ZvaWQgcmVwb3J0KHN0cnVjdCBzbGFiaW5mbyAqcykKK3sKKwlpZiAoc3RyY21wKHMtPm5hbWUsICIqIikgPT0gMCkKKwkJcmV0dXJuOworCisJcHJpbnRmKCJcblNsYWJjYWNoZTogJS0yMHMgIEFsaWFzZXM6ICUyZCBPcmRlciA6ICUyZCBPYmplY3RzOiAlZFxuIiwKKwkJcy0+bmFtZSwgcy0+YWxpYXNlcywgcy0+b3JkZXIsIHMtPm9iamVjdHMpOworCWlmIChzLT5od2NhY2hlX2FsaWduKQorCQlwcmludGYoIioqIEhhcmR3YXJlIGNhY2hlbGluZSBhbGlnbmVkXG4iKTsKKwlpZiAocy0+Y2FjaGVfZG1hKQorCQlwcmludGYoIioqIE1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4gYSBzcGVjaWFsIERNQSB6b25lXG4iKTsKKwlpZiAocy0+ZGVzdHJveV9ieV9yY3UpCisJCXByaW50ZigiKiogU2xhYnMgYXJlIGRlc3Ryb3llZCB2aWEgUkNVXG4iKTsKKwlpZiAocy0+cmVjbGFpbV9hY2NvdW50KQorCQlwcmludGYoIioqIFJlY2xhaW0gYWNjb3VudGluZyBhY3RpdmVcbiIpOworCisJcHJpbnRmKCJcblNpemVzIChieXRlcykgICAgIFNsYWJzICAgICAgICAgICAgICBEZWJ1ZyAgICAgICAgICAgICAgICBNZW1vcnlcbiIpOworCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlwcmludGYoIk9iamVjdCA6ICU3ZCAgVG90YWwgIDogJTdsZCAgIFNhbml0eSBDaGVja3MgOiAlcyAgVG90YWw6ICU3bGRcbiIsCisJCQlzLT5vYmplY3Rfc2l6ZSwgcy0+c2xhYnMsIG9ub2ZmKHMtPnNhbml0eV9jaGVja3MpLAorCQkJcy0+c2xhYnMgKiAocGFnZV9zaXplIDw8IHMtPm9yZGVyKSk7CisJcHJpbnRmKCJTbGFiT2JqOiAlN2QgIEZ1bGwgICA6ICU3bGQgICBSZWR6b25pbmcgICAgIDogJXMgIFVzZWQgOiAlN2xkXG4iLAorCQkJcy0+c2xhYl9zaXplLCBzLT5zbGFicyAtIHMtPnBhcnRpYWwgLSBzLT5jcHVfc2xhYnMsCisJCQlvbm9mZihzLT5yZWRfem9uZSksIHMtPm9iamVjdHMgKiBzLT5vYmplY3Rfc2l6ZSk7CisJcHJpbnRmKCJTbGFiU2l6OiAlN2QgIFBhcnRpYWw6ICU3bGQgICBQb2lzb25pbmcgICAgIDogJXMgIExvc3MgOiAlN2xkXG4iLAorCQkJcGFnZV9zaXplIDw8IHMtPm9yZGVyLCBzLT5wYXJ0aWFsLCBvbm9mZihzLT5wb2lzb24pLAorCQkJcy0+c2xhYnMgKiAocGFnZV9zaXplIDw8IHMtPm9yZGVyKSAtIHMtPm9iamVjdHMgKiBzLT5vYmplY3Rfc2l6ZSk7CisJcHJpbnRmKCJMb3NzICAgOiAlN2QgIENwdVNsYWI6ICU3ZCAgIFRyYWNraW5nICAgICAgOiAlcyAgTGFsaWc6ICU3bGRcbiIsCisJCQlzLT5zbGFiX3NpemUgLSBzLT5vYmplY3Rfc2l6ZSwgcy0+Y3B1X3NsYWJzLCBvbm9mZihzLT5zdG9yZV91c2VyKSwKKwkJCShzLT5zbGFiX3NpemUgLSBzLT5vYmplY3Rfc2l6ZSkgKiBzLT5vYmplY3RzKTsKKwlwcmludGYoIkFsaWduICA6ICU3ZCAgT2JqZWN0czogJTdkICAgVHJhY2luZyAgICAgICA6ICVzICBMcGFkZDogJTdsZFxuIiwKKwkJCXMtPmFsaWduLCBzLT5vYmpzX3Blcl9zbGFiLCBvbm9mZihzLT50cmFjZSksCisJCQkoKHBhZ2Vfc2l6ZSA8PCBzLT5vcmRlcikgLSBzLT5vYmpzX3Blcl9zbGFiICogcy0+c2xhYl9zaXplKSAqCisJCQlzLT5zbGFicyk7CisKKwlvcHMocyk7CisJc2hvd190cmFja2luZyhzKTsKKwlzbGFiX251bWEocywgMSk7Cit9CiAKIHZvaWQgc2xhYmNhY2hlKHN0cnVjdCBzbGFiaW5mbyAqcykKIHsKQEAgLTI2NSw3ICs0MzgsMTggQEAKIAljaGFyIGZsYWdzWzIwXTsKIAljaGFyICpwID0gZmxhZ3M7CiAKLQlpZiAoc2tpcF96ZXJvICYmICFzLT5zbGFicykKKwlpZiAoc3RyY21wKHMtPm5hbWUsICIqIikgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGFjdHVhbF9zbGFicyA9PSAxKSB7CisJCXJlcG9ydChzKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChza2lwX3plcm8gJiYgIXNob3dfZW1wdHkgJiYgIXMtPnNsYWJzKQorCQlyZXR1cm47CisKKwlpZiAoc2hvd19lbXB0eSAmJiBzLT5zbGFicykKIAkJcmV0dXJuOwogCiAJc3RvcmVfc2l6ZShzaXplX3N0ciwgc2xhYl9zaXplKHMpKTsKQEAgLTMwMyw0OCArNDg3LDEzMSBAQAogCQlmbGFncyk7CiB9CiAKLXZvaWQgc2xhYl9udW1hKHN0cnVjdCBzbGFiaW5mbyAqcykKKy8qCisgKiBBbmFseXplIGRlYnVnIG9wdGlvbnMuIFJldHVybiBmYWxzZSBpZiBzb21ldGhpbmcgaXMgYW1pc3MuCisgKi8KK2ludCBkZWJ1Z19vcHRfc2NhbihjaGFyICpvcHQpCiB7Ci0JaW50IG5vZGU7CisJaWYgKCFvcHQgfHwgIW9wdFswXSB8fCBzdHJjbXAob3B0LCAiLSIpID09IDApCisJCXJldHVybiAxOwogCi0JaWYgKCFoaWdoZXN0X25vZGUpCi0JCWZhdGFsKCJObyBOVU1BIGluZm9ybWF0aW9uIGF2YWlsYWJsZS5cbiIpOwotCi0JaWYgKHNraXBfemVybyAmJiAhcy0+c2xhYnMpCi0JCXJldHVybjsKLQotCWlmICghbGluZSkgewotCQlwcmludGYoIlxuU2xhYiAgICAgICAgICAgICBOb2RlICIpOwotCQlmb3Iobm9kZSA9IDA7IG5vZGUgPD0gaGlnaGVzdF9ub2RlOyBub2RlKyspCi0JCQlwcmludGYoIiAlNGQiLCBub2RlKTsKLQkJcHJpbnRmKCJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkJZm9yKG5vZGUgPSAwOyBub2RlIDw9IGhpZ2hlc3Rfbm9kZTsgbm9kZSsrKQotCQkJcHJpbnRmKCItLS0tLSIpOwotCQlwcmludGYoIlxuIik7CisJaWYgKHN0cmNhc2VjbXAob3B0LCAiYSIpID09IDApIHsKKwkJc2FuaXR5ID0gMTsKKwkJcG9pc29uID0gMTsKKwkJcmVkem9uZSA9IDE7CisJCXRyYWNraW5nID0gMTsKKwkJcmV0dXJuIDE7CiAJfQotCXByaW50ZigiJS0yMXMgIiwgcy0+bmFtZSk7Ci0JZm9yKG5vZGUgPSAwOyBub2RlIDw9IGhpZ2hlc3Rfbm9kZTsgbm9kZSsrKSB7Ci0JCWNoYXIgYlsyMF07CiAKLQkJc3RvcmVfc2l6ZShiLCBzLT5udW1hW25vZGVdKTsKLQkJcHJpbnRmKCIgJTRzIiwgYik7Ci0JfQotCXByaW50ZigiXG4iKTsKLQlsaW5lKys7CisJZm9yICggOyAqb3B0OyBvcHQrKykKKwkgCXN3aXRjaCAoKm9wdCkgeworCQljYXNlICdGJyA6IGNhc2UgJ2YnOgorCQkJaWYgKHNhbml0eSkKKwkJCQlyZXR1cm4gMDsKKwkJCXNhbml0eSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnUCcgOiBjYXNlICdwJzoKKwkJCWlmIChwb2lzb24pCisJCQkJcmV0dXJuIDA7CisJCQlwb2lzb24gPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSAnWicgOiBjYXNlICd6JzoKKwkJCWlmIChyZWR6b25lKQorCQkJCXJldHVybiAwOworCQkJcmVkem9uZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlICdVJyA6IGNhc2UgJ3UnOgorCQkJaWYgKHRyYWNraW5nKQorCQkJCXJldHVybiAwOworCQkJdHJhY2tpbmcgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSAnVCcgOiBjYXNlICd0JzoKKwkJCWlmICh0cmFjaW5nKQorCQkJCXJldHVybiAwOworCQkJdHJhY2luZyA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJcmV0dXJuIDE7CiB9CiAKLXZvaWQgc2hvd190cmFja2luZyhzdHJ1Y3Qgc2xhYmluZm8gKnMpCitpbnQgc2xhYl9lbXB0eShzdHJ1Y3Qgc2xhYmluZm8gKnMpCiB7Ci0JcHJpbnRmKCJcbiVzOiBDYWxscyB0byBhbGxvY2F0ZSBhIHNsYWIgb2JqZWN0XG4iLCBzLT5uYW1lKTsKLQlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JaWYgKHJlYWRfb2JqKCJhbGxvY19jYWxscyIpKQotCQlwcmludGYoYnVmZmVyKTsKKwlpZiAocy0+b2JqZWN0cyA+IDApCisJCXJldHVybiAwOwogCi0JcHJpbnRmKCIlczogQ2FsbHMgdG8gZnJlZSBhIHNsYWIgb2JqZWN0XG4iLCBzLT5uYW1lKTsKLQlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQlpZiAocmVhZF9vYmooImZyZWVfY2FsbHMiKSkKLQkJcHJpbnRmKGJ1ZmZlcik7CisJLyoKKwkgKiBXZSBtYXkgc3RpbGwgaGF2ZSBzbGFicyBldmVuIGlmIHRoZXJlIGFyZSBubyBvYmplY3RzLiBTaHJpbmtpbmcgd2lsbAorCSAqIHJlbW92ZSB0aGVtLgorCSAqLworCWlmIChzLT5zbGFicyAhPSAwKQorCQlzZXRfb2JqKHMsICJzaHJpbmsiLCAxKTsKIAorCXJldHVybiAxOworfQorCit2b2lkIHNsYWJfZGVidWcoc3RydWN0IHNsYWJpbmZvICpzKQoreworCWlmIChzdHJjbXAocy0+bmFtZSwgIioiKSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoc2FuaXR5ICYmICFzLT5zYW5pdHlfY2hlY2tzKSB7CisJCXNldF9vYmoocywgInNhbml0eSIsIDEpOworCX0KKwlpZiAoIXNhbml0eSAmJiBzLT5zYW5pdHlfY2hlY2tzKSB7CisJCWlmIChzbGFiX2VtcHR5KHMpKQorCQkJc2V0X29iaihzLCAic2FuaXR5IiwgMCk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMgbm90IGVtcHR5IGNhbm5vdCBkaXNhYmxlIHNhbml0eSBjaGVja3NcbiIsIHMtPm5hbWUpOworCX0KKwlpZiAocmVkem9uZSAmJiAhcy0+cmVkX3pvbmUpIHsKKwkJaWYgKHNsYWJfZW1wdHkocykpCisJCQlzZXRfb2JqKHMsICJyZWRfem9uZSIsIDEpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIG5vdCBlbXB0eSBjYW5ub3QgZW5hYmxlIHJlZHpvbmluZ1xuIiwgcy0+bmFtZSk7CisJfQorCWlmICghcmVkem9uZSAmJiBzLT5yZWRfem9uZSkgeworCQlpZiAoc2xhYl9lbXB0eShzKSkKKwkJCXNldF9vYmoocywgInJlZF96b25lIiwgMCk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMgbm90IGVtcHR5IGNhbm5vdCBkaXNhYmxlIHJlZHpvbmluZ1xuIiwgcy0+bmFtZSk7CisJfQorCWlmIChwb2lzb24gJiYgIXMtPnBvaXNvbikgeworCQlpZiAoc2xhYl9lbXB0eShzKSkKKwkJCXNldF9vYmoocywgInBvaXNvbiIsIDEpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIG5vdCBlbXB0eSBjYW5ub3QgZW5hYmxlIHBvaXNvbmluZ1xuIiwgcy0+bmFtZSk7CisJfQorCWlmICghcG9pc29uICYmIHMtPnBvaXNvbikgeworCQlpZiAoc2xhYl9lbXB0eShzKSkKKwkJCXNldF9vYmoocywgInBvaXNvbiIsIDApOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIG5vdCBlbXB0eSBjYW5ub3QgZGlzYWJsZSBwb2lzb25pbmdcbiIsIHMtPm5hbWUpOworCX0KKwlpZiAodHJhY2tpbmcgJiYgIXMtPnN0b3JlX3VzZXIpIHsKKwkJaWYgKHNsYWJfZW1wdHkocykpCisJCQlzZXRfb2JqKHMsICJzdG9yZV91c2VyIiwgMSk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMgbm90IGVtcHR5IGNhbm5vdCBlbmFibGUgdHJhY2tpbmdcbiIsIHMtPm5hbWUpOworCX0KKwlpZiAoIXRyYWNraW5nICYmIHMtPnN0b3JlX3VzZXIpIHsKKwkJaWYgKHNsYWJfZW1wdHkocykpCisJCQlzZXRfb2JqKHMsICJzdG9yZV91c2VyIiwgMCk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMgbm90IGVtcHR5IGNhbm5vdCBkaXNhYmxlIHRyYWNraW5nXG4iLCBzLT5uYW1lKTsKKwl9CisJaWYgKHRyYWNpbmcgJiYgIXMtPnRyYWNlKSB7CisJCWlmIChzbGFicyA9PSAxKQorCQkJc2V0X29iaihzLCAidHJhY2UiLCAxKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICIlcyBjYW4gb25seSBlbmFibGUgdHJhY2UgZm9yIG9uZSBzbGFiIGF0IGEgdGltZVxuIiwgcy0+bmFtZSk7CisJfQorCWlmICghdHJhY2luZyAmJiBzLT50cmFjZSkKKwkJc2V0X29iaihzLCAidHJhY2UiLCAxKTsKIH0KIAogdm9pZCB0b3RhbHModm9pZCkKQEAgLTUzOCwxMSArODA1LDExIEBACiAKIAlzdG9yZV9zaXplKGIxLCB0b3RhbF9zaXplKTtzdG9yZV9zaXplKGIyLCB0b3RhbF93YXN0ZSk7CiAJc3RvcmVfc2l6ZShiMywgdG90YWxfd2FzdGUgKiAxMDAgLyB0b3RhbF91c2VkKTsKLQlwcmludGYoIk1lbW9yeSB1c2VkOiAlNnMgICAjIExvc3MgICA6ICU2cyAgIE1SYXRpbzogJTZzJSVcbiIsIGIxLCBiMiwgYjMpOworCXByaW50ZigiTWVtb3J5IHVzZWQ6ICU2cyAgICMgTG9zcyAgIDogJTZzICAgTVJhdGlvOiU2cyUlXG4iLCBiMSwgYjIsIGIzKTsKIAogCXN0b3JlX3NpemUoYjEsIHRvdGFsX29iamVjdHMpO3N0b3JlX3NpemUoYjIsIHRvdGFsX3BhcnRvYmopOwogCXN0b3JlX3NpemUoYjMsIHRvdGFsX3BhcnRvYmogKiAxMDAgLyB0b3RhbF9vYmplY3RzKTsKLQlwcmludGYoIiMgT2JqZWN0cyAgOiAlNnMgICAjIFBhcnRPYmo6ICU2cyAgIE9SYXRpbzogJTZzJSVcbiIsIGIxLCBiMiwgYjMpOworCXByaW50ZigiIyBPYmplY3RzICA6ICU2cyAgICMgUGFydE9iajogJTZzICAgT1JhdGlvOiU2cyUlXG4iLCBiMSwgYjIsIGIzKTsKIAogCXByaW50ZigiXG4iKTsKIAlwcmludGYoIlBlciBDYWNoZSAgICBBdmVyYWdlICAgICAgICAgTWluICAgICAgICAgTWF4ICAgICAgIFRvdGFsXG4iKTsKQEAgLTU2NSw3ICs4MzIsNyBAQAogCXN0b3JlX3NpemUoYjEsIGF2Z19wcGFydCk7c3RvcmVfc2l6ZShiMiwgbWluX3BwYXJ0KTsKIAlzdG9yZV9zaXplKGIzLCBtYXhfcHBhcnQpOwogCXN0b3JlX3NpemUoYjQsIHRvdGFsX3BhcnRpYWwgKiAxMDAgIC8gdG90YWxfc2xhYnMpOwotCXByaW50ZigiJSVQYXJ0U2xhYiAlMTBzJSUgJTEwcyUlICUxMHMlJSAlMTBzJSVcbiIsCisJcHJpbnRmKCIlJVBhcnRTbGFiJTEwcyUlICUxMHMlJSAlMTBzJSUgJTEwcyUlXG4iLAogCQkJYjEsCWIyLAliMywJYjQpOwogCiAJc3RvcmVfc2l6ZShiMSwgYXZnX3BhcnRvYmopO3N0b3JlX3NpemUoYjIsIG1pbl9wYXJ0b2JqKTsKQEAgLTU3Nyw3ICs4NDQsNyBAQAogCXN0b3JlX3NpemUoYjEsIGF2Z19wcGFydG9iaik7c3RvcmVfc2l6ZShiMiwgbWluX3BwYXJ0b2JqKTsKIAlzdG9yZV9zaXplKGIzLCBtYXhfcHBhcnRvYmopOwogCXN0b3JlX3NpemUoYjQsIHRvdGFsX3BhcnRvYmogKiAxMDAgLyB0b3RhbF9vYmplY3RzKTsKLQlwcmludGYoIiUlIFBhcnRPYmogJTEwcyUlICUxMHMlJSAlMTBzJSUgJTEwcyUlXG4iLAorCXByaW50ZigiJSUgUGFydE9iaiUxMHMlJSAlMTBzJSUgJTEwcyUlICUxMHMlJVxuIiwKIAkJCWIxLAliMiwJYjMsCWI0KTsKIAogCXN0b3JlX3NpemUoYjEsIGF2Z19zaXplKTtzdG9yZV9zaXplKGIyLCBtaW5fc2l6ZSk7CkBAIC02NzMsNyArOTQwLDcgQEAKIAogCWZvciAoYSA9IGFsaWFzaW5mbzsgYSA8IGFsaWFzaW5mbyArIGFsaWFzZXM7IGErKykgewogCi0JCWZvcihzID0gc2xhYmluZm87IHMgPCBzbGFiaW5mbyArIHNsYWJzOyBzKyspCisJCWZvciAocyA9IHNsYWJpbmZvOyBzIDwgc2xhYmluZm8gKyBzbGFiczsgcysrKQogCQkJaWYgKHN0cmNtcChhLT5yZWYsIHMtPm5hbWUpID09IDApIHsKIAkJCQlhLT5zbGFiID0gczsKIAkJCQlzLT5yZWZzKys7CkBAIC03MDQsNyArOTcxLDcgQEAKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJfQotCQkJcHJpbnRmKCJcbiUtMjBzIDwtICVzIiwgYS0+c2xhYi0+bmFtZSwgYS0+bmFtZSk7CisJCQlwcmludGYoIlxuJS0xMnMgPC0gJXMiLCBhLT5zbGFiLT5uYW1lLCBhLT5uYW1lKTsKIAkJCWFjdGl2ZSA9IGEtPnNsYWItPm5hbWU7CiAJCX0KIAkJZWxzZQpAQCAtNzI5LDcgKzk5NiwxMiBAQAogCiAJCWEgPSBmaW5kX29uZV9hbGlhcyhzKTsKIAotCQlzLT5uYW1lID0gYS0+bmFtZTsKKwkJaWYgKGEpCisJCQlzLT5uYW1lID0gYS0+bmFtZTsKKwkJZWxzZSB7CisJCQlzLT5uYW1lID0gIioiOworCQkJYWN0dWFsX3NsYWJzLS07CisJCX0KIAl9CiB9CiAKQEAgLTc0OCwxMSArMTAyMCwxNCBAQAogCWNoYXIgKnQ7CiAJaW50IGNvdW50OwogCisJaWYgKGNoZGlyKCIvc3lzL3NsYWIiKSkKKwkJZmF0YWwoIlNZU0ZTIHN1cHBvcnQgZm9yIFNMVUIgbm90IGFjdGl2ZVxuIik7CisKIAlkaXIgPSBvcGVuZGlyKCIuIik7CiAJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkpIHsKIAkJaWYgKGRlLT5kX25hbWVbMF0gPT0gJy4nIHx8Ci0JCQkJc2xhYl9taXNtYXRjaChkZS0+ZF9uYW1lKSkKLQkJCWNvbnRpbnVlOworCQkJKGRlLT5kX25hbWVbMF0gIT0gJzonICYmIHNsYWJfbWlzbWF0Y2goZGUtPmRfbmFtZSkpKQorCQkJCWNvbnRpbnVlOwogCQlzd2l0Y2ggKGRlLT5kX3R5cGUpIHsKIAkJICAgY2FzZSBEVF9MTks6CiAJCSAgIAlhbGlhcy0+bmFtZSA9IHN0cmR1cChkZS0+ZF9uYW1lKTsKQEAgLTgwNyw2ICsxMDgyLDcgQEAKIAl9CiAJY2xvc2VkaXIoZGlyKTsKIAlzbGFicyA9IHNsYWIgLSBzbGFiaW5mbzsKKwlhY3R1YWxfc2xhYnMgPSBzbGFiczsKIAlhbGlhc2VzID0gYWxpYXMgLSBhbGlhc2luZm87CiAJaWYgKHNsYWJzID4gTUFYX1NMQUJTKQogCQlmYXRhbCgiVG9vIG1hbnkgc2xhYnNcbiIpOwpAQCAtODI1LDM0ICsxMTAxLDM5IEBACiAKIAogCQlpZiAoc2hvd19udW1hKQotCQkJc2xhYl9udW1hKHNsYWIpOwotCQllbHNlCi0JCWlmIChzaG93X3RyYWNrKQorCQkJc2xhYl9udW1hKHNsYWIsIDApOworCQllbHNlIGlmIChzaG93X3RyYWNrKQogCQkJc2hvd190cmFja2luZyhzbGFiKTsKLQkJZWxzZQotCQlpZiAodmFsaWRhdGUpCisJCWVsc2UgaWYgKHZhbGlkYXRlKQogCQkJc2xhYl92YWxpZGF0ZShzbGFiKTsKLQkJZWxzZQotCQlpZiAoc2hyaW5rKQorCQllbHNlIGlmIChzaHJpbmspCiAJCQlzbGFiX3NocmluayhzbGFiKTsKLQkJZWxzZSB7Ci0JCQlpZiAoc2hvd19zbGFiKQotCQkJCXNsYWJjYWNoZShzbGFiKTsKLQkJfQorCQllbHNlIGlmIChzZXRfZGVidWcpCisJCQlzbGFiX2RlYnVnKHNsYWIpOworCQllbHNlIGlmIChzaG93X29wcykKKwkJCW9wcyhzbGFiKTsKKwkJZWxzZSBpZiAoc2hvd19zbGFiKQorCQkJc2xhYmNhY2hlKHNsYWIpOworCQllbHNlIGlmIChzaG93X3JlcG9ydCkKKwkJCXJlcG9ydChzbGFiKTsKIAl9CiB9CiAKIHN0cnVjdCBvcHRpb24gb3B0c1tdID0gewogCXsgImFsaWFzZXMiLCAwLCBOVUxMLCAnYScgfSwKLQl7ICJzbGFicyIsIDAsIE5VTEwsICdsJyB9LAotCXsgIm51bWEiLCAwLCBOVUxMLCAnbicgfSwKLQl7ICJ6ZXJvIiwgMCwgTlVMTCwgJ3onIH0sCi0JeyAiaGVscCIsIDAsIE5VTEwsICdoJyB9LAotCXsgInZhbGlkYXRlIiwgMCwgTlVMTCwgJ3YnIH0sCisJeyAiZGVidWciLCAyLCBOVUxMLCAnZCcgfSwKKwl7ICJlbXB0eSIsIDAsIE5VTEwsICdlJyB9LAogCXsgImZpcnN0LWFsaWFzIiwgMCwgTlVMTCwgJ2YnIH0sCi0JeyAic2hyaW5rIiwgMCwgTlVMTCwgJ3MnIH0sCi0JeyAidHJhY2siLCAwLCBOVUxMLCAndCd9LAorCXsgImhlbHAiLCAwLCBOVUxMLCAnaCcgfSwKIAl7ICJpbnZlcnRlZCIsIDAsIE5VTEwsICdpJ30sCisJeyAibnVtYSIsIDAsIE5VTEwsICduJyB9LAorCXsgIm9wcyIsIDAsIE5VTEwsICdvJyB9LAorCXsgInJlcG9ydCIsIDAsIE5VTEwsICdyJyB9LAorCXsgInNocmluayIsIDAsIE5VTEwsICdzJyB9LAorCXsgInNsYWJzIiwgMCwgTlVMTCwgJ2wnIH0sCisJeyAidHJhY2siLCAwLCBOVUxMLCAndCd9LAorCXsgInZhbGlkYXRlIiwgMCwgTlVMTCwgJ3YnIH0sCisJeyAiemVybyIsIDAsIE5VTEwsICd6JyB9LAogCXsgIjFyZWYiLCAwLCBOVUxMLCAnMSd9LAogCXsgTlVMTCwgMCwgTlVMTCwgMCB9CiB9OwpAQCAtODY0LDEwICsxMTQ1LDkgQEAKIAljaGFyICpwYXR0ZXJuX3NvdXJjZTsKIAogCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0JaWYgKGNoZGlyKCIvc3lzL3NsYWIiKSkKLQkJZmF0YWwoIlRoaXMga2VybmVsIGRvZXMgbm90IGhhdmUgU0xVQiBzdXBwb3J0LlxuIik7CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWZoaWwxbnBzdHZ6VFMiLCBvcHRzLCBOVUxMKSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFkOjplZmhpbDFub3Byc3R2elRTIiwKKwkJCQkJCW9wdHMsIE5VTEwpKSAhPSAtMSkKIAlzd2l0Y2goYykgewogCQljYXNlICcxJzoKIAkJCXNob3dfc2luZ2xlX3JlZiA9IDE7CkBAIC04NzUsNiArMTE1NSwxNCBAQAogCQljYXNlICdhJzoKIAkJCXNob3dfYWxpYXMgPSAxOwogCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJc2V0X2RlYnVnID0gMTsKKwkJCWlmICghZGVidWdfb3B0X3NjYW4ob3B0YXJnKSkKKwkJCQlmYXRhbCgiSW52YWxpZCBkZWJ1ZyBvcHRpb24gJyVzJ1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdlJzoKKwkJCXNob3dfZW1wdHkgPSAxOworCQkJYnJlYWs7CiAJCWNhc2UgJ2YnOgogCQkJc2hvd19maXJzdF9hbGlhcyA9IDE7CiAJCQlicmVhazsKQEAgLTg4Nyw2ICsxMTc1LDEyIEBACiAJCWNhc2UgJ24nOgogCQkJc2hvd19udW1hID0gMTsKIAkJCWJyZWFrOworCQljYXNlICdvJzoKKwkJCXNob3dfb3BzID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCXNob3dfcmVwb3J0ID0gMTsKKwkJCWJyZWFrOwogCQljYXNlICdzJzoKIAkJCXNocmluayA9IDE7CiAJCQlicmVhazsKQEAgLTkxNCw4ICsxMjA4LDggQEAKIAogCX0KIAotCWlmICghc2hvd19zbGFiICYmICFzaG93X2FsaWFzICYmICFzaG93X3RyYWNrCi0JCSYmICF2YWxpZGF0ZSAmJiAhc2hyaW5rKQorCWlmICghc2hvd19zbGFiICYmICFzaG93X2FsaWFzICYmICFzaG93X3RyYWNrICYmICFzaG93X3JlcG9ydAorCQkmJiAhdmFsaWRhdGUgJiYgIXNocmluayAmJiAhc2V0X2RlYnVnICYmICFzaG93X29wcykKIAkJCXNob3dfc2xhYiA9IDE7CiAKIAlpZiAoYXJnYyA+IG9wdGluZCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vc2x1Yi50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL3NsdWIudHh0CmluZGV4IDcyN2M4ZDguLjE1MjMzMjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vc2x1Yi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9zbHViLnR4dApAQCAtMSwxMyArMSw5IEBACiBTaG9ydCB1c2VycyBndWlkZSBmb3IgU0xVQgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRmlyc3Qgb2YgYWxsIHNsdWIgc2hvdWxkIHRyYW5zcGFyZW50bHkgcmVwbGFjZSBTTEFCLiBJZiB5b3UgZW5hYmxlCi1TTFVCIHRoZW4gZXZlcnl0aGluZyBzaG91bGQgd29yayB0aGUgc2FtZSAoTm90ZSB0aGUgd29yZCAic2hvdWxkIi4KLVRoZXJlIGlzIGxpa2VseSBub3QgbXVjaCB2YWx1ZSBpbiB0aGF0IHdvcmQgYXQgdGhpcyBwb2ludCkuCi0KIFRoZSBiYXNpYyBwaGlsb3NvcGh5IG9mIFNMVUIgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSBTTEFCLiBTTEFCCiByZXF1aXJlcyByZWJ1aWxkaW5nIHRoZSBrZXJuZWwgdG8gYWN0aXZhdGUgZGVidWcgb3B0aW9ucyBmb3IgYWxsCi1TTEFCUy4gU0xVQiBhbHdheXMgaW5jbHVkZXMgZnVsbCBkZWJ1Z2dpbmcgYnV0IGl0cyBvZmYgYnkgZGVmYXVsdC4KK3NsYWIgY2FjaGVzLiBTTFVCIGFsd2F5cyBpbmNsdWRlcyBmdWxsIGRlYnVnZ2luZyBidXQgaXQgaXMgb2ZmIGJ5IGRlZmF1bHQuCiBTTFVCIGNhbiBlbmFibGUgZGVidWdnaW5nIG9ubHkgZm9yIHNlbGVjdGVkIHNsYWJzIGluIG9yZGVyIHRvIGF2b2lkCiBhbiBpbXBhY3Qgb24gb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2Ugd2hpY2ggbWF5IG1ha2UgYSBidWcgbW9yZQogZGlmZmljdWx0IHRvIGZpbmQuCkBAIC03NiwxMyArNzIsMjggQEAKIENhcmVmdWwgd2l0aCB0cmFjaW5nOiBJdCBtYXkgc3BldyBvdXQgbG90cyBvZiBpbmZvcm1hdGlvbiBhbmQgbmV2ZXIgc3RvcCBpZgogdXNlZCBvbiB0aGUgd3Jvbmcgc2xhYi4KIAotU0xBQiBNZXJnaW5nCitTbGFiIG1lcmdpbmcKIC0tLS0tLS0tLS0tLQogCi1JZiBubyBkZWJ1Z2dpbmcgaXMgc3BlY2lmaWVkIHRoZW4gU0xVQiBtYXkgbWVyZ2Ugc2ltaWxhciBzbGFicyB0b2dldGhlcgorSWYgbm8gZGVidWcgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIHRoZW4gU0xVQiBtYXkgbWVyZ2Ugc2ltaWxhciBzbGFicyB0b2dldGhlcgogaW4gb3JkZXIgdG8gcmVkdWNlIG92ZXJoZWFkIGFuZCBpbmNyZWFzZSBjYWNoZSBob3RuZXNzIG9mIG9iamVjdHMuCiBzbGFiaW5mbyAtYSBkaXNwbGF5cyB3aGljaCBzbGFicyB3ZXJlIG1lcmdlZCB0b2dldGhlci4KIAorU2xhYiB2YWxpZGF0aW9uCistLS0tLS0tLS0tLS0tLS0KKworU0xVQiBjYW4gdmFsaWRhdGUgYWxsIG9iamVjdCBpZiB0aGUga2VybmVsIHdhcyBib290ZWQgd2l0aCBzbHViX2RlYnVnLiBJbgorb3JkZXIgdG8gZG8gc28geW91IG11c3QgaGF2ZSB0aGUgc2xhYmluZm8gdG9vbC4gVGhlbiB5b3UgY2FuIGRvCisKK3NsYWJpbmZvIC12CisKK3doaWNoIHdpbGwgdGVzdCBhbGwgb2JqZWN0cy4gT3V0cHV0IHdpbGwgYmUgZ2VuZXJhdGVkIHRvIHRoZSBzeXNsb2cuCisKK1RoaXMgYWxzbyB3b3JrcyBpbiBhIG1vcmUgbGltaXRlZCB3YXkgaWYgYm9vdCB3YXMgd2l0aG91dCBzbGFiIGRlYnVnLgorSW4gdGhhdCBjYXNlIHNsYWJpbmZvIC12IHNpbXBseSB0ZXN0cyBhbGwgcmVhY2hhYmxlIG9iamVjdHMuIFVzdWFsbHkKK3RoZXNlIGFyZSBpbiB0aGUgY3B1IHNsYWJzIGFuZCB0aGUgcGFydGlhbCBzbGFicy4gRnVsbCBzbGFicyBhcmUgbm90Cit0cmFja2VkIGJ5IFNMVUIgaW4gYSBub24gZGVidWcgc2l0dWF0aW9uLgorCiBHZXR0aW5nIG1vcmUgcGVyZm9ybWFuY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC05MSw5ICsxMDIsOSBAQAogZ292ZXJuZWQgYnkgdGhlIG9yZGVyIG9mIHRoZSBhbGxvY2F0aW9uIGZvciBlYWNoIHNsYWIuIFRoZSBhbGxvY2F0aW9ucwogY2FuIGJlIGluZmx1ZW5jZWQgYnkga2VybmVsIHBhcmFtZXRlcnM6CiAKLXNsdWJfbWluX29iamVjdHM9eAkJKGRlZmF1bHQgOCkKK3NsdWJfbWluX29iamVjdHM9eAkJKGRlZmF1bHQgNCkKIHNsdWJfbWluX29yZGVyPXgJCShkZWZhdWx0IDApCi1zbHViX21heF9vcmRlcj14CQkoZGVmYXVsdCA0KQorc2x1Yl9tYXhfb3JkZXI9eAkJKGRlZmF1bHQgMSkKIAogc2x1Yl9taW5fb2JqZWN0cyBhbGxvd3MgdG8gc3BlY2lmeSBob3cgbWFueSBvYmplY3RzIG11c3QgYXQgbGVhc3QgZml0CiBpbnRvIG9uZSBzbGFiIGluIG9yZGVyIGZvciB0aGUgYWxsb2NhdGlvbiBvcmRlciB0byBiZSBhY2NlcHRhYmxlLgpAQCAtMTA5LDUgKzEyMCwxMDcgQEAKIHN1cGVyIGxhcmdlIG9yZGVyIHBhZ2VzIHRvIGZpdCBzbHViX21pbl9vYmplY3RzIG9mIGEgc2xhYiBjYWNoZSB3aXRoCiBsYXJnZSBvYmplY3Qgc2l6ZXMgaW50byBvbmUgaGlnaCBvcmRlciBwYWdlLgogCitTTFVCIERlYnVnIG91dHB1dAorLS0tLS0tLS0tLS0tLS0tLS0KIAotQ2hyaXN0b3BoIExhbWV0ZXIsIDxjbGFtZXRlckBzZ2kuY29tPiwgQXByaWwgMTAsIDIwMDcKK0hlcmUgaXMgYSBzYW1wbGUgb2Ygc2x1YiBkZWJ1ZyBvdXRwdXQ6CisKKyoqKiBTTFVCIGttYWxsb2MtODogUmVkem9uZSBBY3RpdmVAMHhjOTBmNmQyMCBzbGFiIDB4YzUyOGM1MzAgb2Zmc2V0PTMzNjAgZmxhZ3M9MHg0MDAwMDBjMyBpbnVzZT02MSBmcmVlbGlzdD0weGM5MGY2ZDU4CisgIEJ5dGVzIGI0IDB4YzkwZjZkMTA6ICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCA1YSA1YSA1YSA1YSA1YSA1YSA1YSA1YSAuLi4uLi4uLlpaWlpaWlpaCisgICAgT2JqZWN0IDB4YzkwZjZkMjA6ICAzMSAzMCAzMSAzOSAyZSAzMCAzMCAzNSAgICAgICAgICAgICAgICAgICAgICAgICAxMDE5LjAwNQorICAgUmVkem9uZSAweGM5MGY2ZDI4OiAgMDAgY2MgY2MgY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorRnJlZVBvaW50ZXIgMHhjOTBmNmQyYyAtPiAweGM5MGY2ZDU4CitMYXN0IGFsbG9jOiBnZXRfbW9kYWxpYXMrMHg2MS8weGY1IGppZmZpZXNfYWdvPTUzIGNwdT0xIHBpZD01NTQKK0ZpbGxlciAweGM5MGY2ZDUwOiAgNWEgNWEgNWEgNWEgNWEgNWEgNWEgNWEgICAgICAgICAgICAgICAgICAgICAgICAgWlpaWlpaWloKKyAgWzxjMDEwNTIzZD5dIGR1bXBfdHJhY2UrMHg2My8weDFlYgorICBbPGMwMTA1M2RmPl0gc2hvd190cmFjZV9sb2dfbHZsKzB4MWEvMHgyZgorICBbPGMwMTA2MDFkPl0gc2hvd190cmFjZSsweDEyLzB4MTQKKyAgWzxjMDEwNjAzNT5dIGR1bXBfc3RhY2srMHgxNi8weDE4CisgIFs8YzAxN2UwZmE+XSBvYmplY3RfZXJyKzB4MTQzLzB4MTRiCisgIFs8YzAxN2UyY2M+XSBjaGVja19vYmplY3QrMHg2Ni8weDIzNAorICBbPGMwMTdlYjQzPl0gX19zbGFiX2ZyZWUrMHgyMzkvMHgzODQKKyAgWzxjMDE3ZjQ0Nj5dIGtmcmVlKzB4YTYvMHhjNgorICBbPGMwMmUyMzM1Pl0gZ2V0X21vZGFsaWFzKzB4YjkvMHhmNQorICBbPGMwMmUyM2I3Pl0gZG1pX2Rldl91ZXZlbnQrMHgyNy8weDNjCisgIFs8YzAyNzg2NmE+XSBkZXZfdWV2ZW50KzB4MWFkLzB4MWRhCisgIFs8YzAyMDUwMjQ+XSBrb2JqZWN0X3VldmVudF9lbnYrMHgyMGEvMHg0NWIKKyAgWzxjMDIwNTI3Zj5dIGtvYmplY3RfdWV2ZW50KzB4YS8weGYKKyAgWzxjMDI3NzlmMT5dIHN0b3JlX3VldmVudCsweDRmLzB4NTgKKyAgWzxjMDI3NzU4ZT5dIGRldl9hdHRyX3N0b3JlKzB4MjkvMHgyZgorICBbPGMwMWJlYzRmPl0gc3lzZnNfd3JpdGVfZmlsZSsweDE2ZS8weDE5YworICBbPGMwMTgzYmE3Pl0gdmZzX3dyaXRlKzB4ZDEvMHgxNWEKKyAgWzxjMDE4NDFkNz5dIHN5c193cml0ZSsweDNkLzB4NzIKKyAgWzxjMDEwNDExMj5dIHN5c2VudGVyX3Bhc3RfZXNwKzB4NWYvMHg5OQorICBbPGI3ZjdiNDEwPl0gMHhiN2Y3YjQxMAorICA9PT09PT09PT09PT09PT09PT09PT09PQorQEBAIFNMVUIga21hbGxvYy04OiBSZXN0b3JpbmcgcmVkem9uZSAoMHhjYykgZnJvbSAweGM5MGY2ZDI4LTB4YzkwZjZkMmIKKworCisKK0lmIFNMVUIgZW5jb3VudGVycyBhIGNvcnJ1cHRlZCBvYmplY3QgdGhlbiBpdCB3aWxsIHBlcmZvcm0gdGhlIGZvbGxvd2luZworYWN0aW9uczoKKworMS4gSXNvbGF0aW9uIGFuZCByZXBvcnQgb2YgdGhlIGlzc3VlCisKK1RoaXMgd2lsbCBiZSBhIG1lc3NhZ2UgaW4gdGhlIHN5c3RlbSBsb2cgc3RhcnRpbmcgd2l0aAorCisqKiogU0xVQiA8c2xhYiBjYWNoZSBhZmZlY3RlZD46IDxXaGF0IHdlbnQgd3Jvbmc+QDxvYmplY3QgYWRkcmVzcz4KK29mZnNldD08b2Zmc2V0IG9mIG9iamVjdCBpbnRvIHNsYWI+IGZsYWdzPTxzbGFiZmxhZ3M+CitpbnVzZT08b2JqZWN0cyBpbiB1c2UgaW4gdGhpcyBzbGFiPiBmcmVlbGlzdD08Zmlyc3QgZnJlZSBvYmplY3QgaW4gc2xhYj4KKworMi4gUmVwb3J0IG9uIGhvdyB0aGUgcHJvYmxlbSB3YXMgZGVhbHQgd2l0aCBpbiBvcmRlciB0byBlbnN1cmUgdGhlIGNvbnRpbnVlZAorb3BlcmF0aW9uIG9mIHRoZSBzeXN0ZW0uCisKK1RoZXNlIGFyZSBtZXNzYWdlcyBpbiB0aGUgc3lzdGVtIGxvZyBiZWdpbm5pbmcgd2l0aAorCitAQEAgU0xVQiA8c2xhYiBjYWNoZSBhZmZlY3RlZD46IDxjb3JyZWN0aXZlIGFjdGlvbiB0YWtlbj4KKworCitJbiB0aGUgYWJvdmUgc2FtcGxlIFNMVUIgZm91bmQgdGhhdCB0aGUgUmVkem9uZSBvZiBhbiBhY3RpdmUgb2JqZWN0IGhhcworYmVlbiBvdmVyd3JpdHRlbi4gSGVyZSBhIHN0cmluZyBvZiA4IGNoYXJhY3RlcnMgd2FzIHdyaXR0ZW4gaW50byBhIHNsYWIgdGhhdAoraGFzIHRoZSBsZW5ndGggb2YgOCBjaGFyYWN0ZXJzLiBIb3dldmVyLCBhIDggY2hhcmFjdGVyIHN0cmluZyBuZWVkcyBhCit0ZXJtaW5hdGluZyAwLiBUaGF0IHplcm8gaGFzIG92ZXJ3cml0dGVuIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBSZWR6b25lIGZpZWxkLgorQWZ0ZXIgcmVwb3J0aW5nIHRoZSBkZXRhaWxzIG9mIHRoZSBpc3N1ZSBlbmNvdW50ZXJlZCB0aGUgQEBAIFNMVUIgbWVzc2FnZQordGVsbCB1cyB0aGF0IFNMVUIgaGFzIHJlc3RvcmVkIHRoZSByZWR6b25lIHRvIGl0cyBwcm9wZXIgdmFsdWUgYW5kIHRoZW4KK3N5c3RlbSBvcGVyYXRpb25zIGNvbnRpbnVlLgorCitWYXJpb3VzIHR5cGVzIG9mIGxpbmVzIGNhbiBmb2xsb3cgdGhlIEBAQCBTTFVCIGxpbmU6CisKK0J5dGVzIGI0IDxhZGRyZXNzPiA6IDxieXRlcz4KKwlTaG93IGEgZmV3IGJ5dGVzIGJlZm9yZSB0aGUgb2JqZWN0IHdoZXJlIHRoZSBwcm9ibGVtIHdhcyBkZXRlY3RlZC4KKwlDYW4gYmUgdXNlZnVsIGlmIHRoZSBjb3JydXB0aW9uIGRvZXMgbm90IHN0b3Agd2l0aCB0aGUgc3RhcnQgb2YgdGhlCisJb2JqZWN0LgorCitPYmplY3QgPGFkZHJlc3M+IDogPGJ5dGVzPgorCVRoZSBieXRlcyBvZiB0aGUgb2JqZWN0LiBJZiB0aGUgb2JqZWN0IGlzIGluYWN0aXZlIHRoZW4gdGhlIGJ5dGVzCisJdHlwaWNhbGx5IGNvbnRhaW4gcG9pc29uaW5nIHZhbHVlcy4gQW55IG5vbi1wb2lzb24gdmFsdWUgc2hvd3MgYQorCWNvcnJ1cHRpb24gYnkgYSB3cml0ZSBhZnRlciBmcmVlLgorCitSZWR6b25lIDxhZGRyZXNzPiA6IDxieXRlcz4KKwlUaGUgcmVkem9uZSBmb2xsb3dpbmcgdGhlIG9iamVjdC4gVGhlIHJlZHpvbmUgaXMgdXNlZCB0byBkZXRlY3QKKwl3cml0ZXMgYWZ0ZXIgdGhlIG9iamVjdC4gQWxsIGJ5dGVzIHNob3VsZCBhbHdheXMgaGF2ZSB0aGUgc2FtZQorCXZhbHVlLiBJZiB0aGVyZSBpcyBhbnkgZGV2aWF0aW9uIHRoZW4gaXQgaXMgZHVlIHRvIGEgd3JpdGUgYWZ0ZXIKKwl0aGUgb2JqZWN0IGJvdW5kYXJ5LgorCitGcmVlcG9pbnRlcgorCVRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGZyZWUgb2JqZWN0IGluIHRoZSBzbGFiLiBNYXkgYmVjb21lCisJY29ycnVwdGVkIGlmIG92ZXJ3cml0aW5nIGNvbnRpbnVlcyBhZnRlciB0aGUgcmVkIHpvbmUuCisKK0xhc3QgYWxsb2M6CitMYXN0IGZyZWU6CisJU2hvd3MgdGhlIGFkZHJlc3MgZnJvbSB3aGljaCB0aGUgb2JqZWN0IHdhcyBhbGxvY2F0ZWQvZnJlZWQgbGFzdC4KKwlXZSBub3RlIHRoZSBwaWQsIHRoZSB0aW1lIGFuZCB0aGUgQ1BVIHRoYXQgZGlkIHNvLiBUaGlzIGlzIHVzdWFsbHkKKwl0aGUgbW9zdCB1c2VmdWwgaW5mb3JtYXRpb24gdG8gZmlndXJlIG91dCB3aGVyZSB0aGluZ3Mgd2VudCB3cm9uZy4KKwlIZXJlIGdldF9tb2RhbGlhcygpIGRpZCBhbiBrbWFsbG9jKDgpIGluc3RlYWQgb2YgYSBrbWFsbG9jKDkpLgorCitGaWxsZXIgPGFkZHJlc3M+IDogPGJ5dGVzPgorCVVudXNlZCBkYXRhIHRvIGZpbGwgdXAgdGhlIHNwYWNlIGluIG9yZGVyIHRvIGdldCB0aGUgbmV4dCBvYmplY3QKKwlwcm9wZXJseSBhbGlnbmVkLiBJbiB0aGUgZGVidWcgY2FzZSB3ZSBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUKKwlhdCBsZWFzdCA0IGJ5dGVzIG9mIGZpbGxlci4gVGhpcyBhbGxvdyBmb3IgdGhlIGRldGVjdGlvbiBvZiB3cml0ZXMKKwliZWZvcmUgdGhlIG9iamVjdC4KKworRm9sbG93aW5nIHRoZSBmaWxsZXIgd2lsbCBiZSBhIHN0YWNrZHVtcC4gVGhhdCBzdGFja2R1bXAgZGVzY3JpYmVzIHRoZQorbG9jYXRpb24gd2hlcmUgdGhlIGVycm9yIHdhcyBkZXRlY3RlZC4gVGhlIGNhdXNlIG9mIHRoZSBjb3JydXB0aW9uIGlzIG1vcmUKK2xpa2VseSB0byBiZSBmb3VuZCBieSBsb29raW5nIGF0IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGFzdCBhbGxvYyAvIGZyZWUuCisKK0NocmlzdG9waCBMYW1ldGVyLCA8Y2xhbWV0ZXJAc2dpLmNvbT4sIE1heSAyMywgMjAwNwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9wY3dkLXdhdGNoZG9nLnR4dCBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvcGN3ZC13YXRjaGRvZy50eHQKaW5kZXggZDllZTYzMy4uNGY2ODA1MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy9wY3dkLXdhdGNoZG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3Bjd2Qtd2F0Y2hkb2cudHh0CkBAIC0xLDMgKzEsNSBAQAorTGFzdCByZXZpZXdlZDogMTAvMDUvMjAwNworCiAgICAgICAgICAgICAgICAgICAgICBCZXJrc2hpcmUgUHJvZHVjdHMgUEMgV2F0Y2hkb2cgQ2FyZAogICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIElTQSBDYXJkcyAgUmV2aXNpb24gQSBhbmQgQwogICAgICAgICAgICBEb2N1bWVudGF0aW9uIGFuZCBEcml2ZXIgYnkgS2VuIEhvbGxpcyA8a2VuamlAYml0Z2F0ZS5jb20+CkBAIC0xNCw4ICsxNiw4IEBACiAKICBUaGUgV2F0Y2hkb2cgRHJpdmVyIHdpbGwgYXV0b21hdGljYWxseSBmaW5kIHlvdXIgd2F0Y2hkb2cgY2FyZCwgYW5kIHdpbGwKICBhdHRhY2ggYSBydW5uaW5nIGRyaXZlciBmb3IgdXNlIHdpdGggdGhhdCBjYXJkLiAgQWZ0ZXIgdGhlIHdhdGNoZG9nCi0gZHJpdmVycyBoYXZlIGluaXRpYWxpemVkLCB5b3UgY2FuIHRoZW4gdGFsayB0byB0aGUgY2FyZCB1c2luZyB0aGUgUEMKLSBXYXRjaGRvZyBwcm9ncmFtLCBhdmFpbGFibGUgZnJvbSBodHRwOi8vZnRwLmJpdGdhdGUuY29tL3Bjd2QvLgorIGRyaXZlcnMgaGF2ZSBpbml0aWFsaXplZCwgeW91IGNhbiB0aGVuIHRhbGsgdG8gdGhlIGNhcmQgdXNpbmcgYSBQQworIFdhdGNoZG9nIHByb2dyYW0uCiAKICBJIHN1Z2dlc3QgcHV0dGluZyBhICJ3YXRjaGRvZyAtZCIgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgYW4gZnNjaywgYW5kCiAgYSAid2F0Y2hkb2cgLWUgLXQgMSIgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVuZCBvZiBhbiBmc2NrLiAgKFJlbWVtYmVyCkBAIC02Miw1ICs2NCwzIEBACiAgLS0gS2VuIEhvbGxpcwogICAgIChrZW5qaUBiaXRnYXRlLmNvbSkKIAotKFRoaXMgZG9jdW1lbnRhdGlvbiBtYXkgYmUgb3V0IG9mIGRhdGUuICBDaGVjawotIGh0dHA6Ly9mdHAuYml0Z2F0ZS5jb20vcGN3ZC8gZm9yIHRoZSBhYnNvbHV0ZSBsYXRlc3QgYWRkaXRpb25zLikKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2ctYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2ctYXBpLnR4dAppbmRleCA4ZDE2ZjZmLi5iYjdjYjFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLWFwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy1hcGkudHh0CkBAIC0xLDMgKzEsNiBAQAorTGFzdCByZXZpZXdlZDogMTAvMDUvMjAwNworCisKIFRoZSBMaW51eCBXYXRjaGRvZyBkcml2ZXIgQVBJLgogCiBDb3B5cmlnaHQgMjAwMiBDaHJpc3RlciBXZWluZ2VsIDx3aW5nZWxAbmFuby1zeXN0ZW0uY29tPgpAQCAtMjIsNyArMjUsNyBAQAogbm90aWZpY2F0aW9ucyBjZWFzZSB0byBvY2N1ciwgYW5kIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyB3aWxsIHJlc2V0IHRoZQogc3lzdGVtIChjYXVzaW5nIGEgcmVib290KSBhZnRlciB0aGUgdGltZW91dCBvY2N1cnMuCiAKLVRoZSBMaW51eCB3YXRjaGRvZyBBUEkgaXMgYSByYXRoZXIgQUQgaG9jIGNvbnN0cnVjdGlvbiBhbmQgZGlmZmVyZW50CitUaGUgTGludXggd2F0Y2hkb2cgQVBJIGlzIGEgcmF0aGVyIGFkLWhvYyBjb25zdHJ1Y3Rpb24gYW5kIGRpZmZlcmVudAogZHJpdmVycyBpbXBsZW1lbnQgZGlmZmVyZW50LCBhbmQgc29tZXRpbWVzIGluY29tcGF0aWJsZSwgcGFydHMgb2YgaXQuCiBUaGlzIGZpbGUgaXMgYW4gYXR0ZW1wdCB0byBkb2N1bWVudCB0aGUgZXhpc3RpbmcgdXNhZ2UgYW5kIGFsbG93CiBmdXR1cmUgZHJpdmVyIHdyaXRlcnMgdG8gdXNlIGl0IGFzIGEgcmVmZXJlbmNlLgpAQCAtNDYsMTQgKzQ5LDE2IEBACiBzaHV0ZG93biBvbiBjbG9zZSIsIENPTkZJR19XQVRDSERPR19OT1dBWU9VVC4gIElmIGl0IGlzIHNldCB0byBZIHdoZW4KIGNvbXBpbGluZyB0aGUga2VybmVsLCB0aGVyZSBpcyBubyB3YXkgb2YgZGlzYWJsaW5nIHRoZSB3YXRjaGRvZyBvbmNlCiBpdCBoYXMgYmVlbiBzdGFydGVkLiAgU28sIGlmIHRoZSB3YXRjaGRvZyBkYWVtb24gY3Jhc2hlcywgdGhlIHN5c3RlbQotd2lsbCByZWJvb3QgYWZ0ZXIgdGhlIHRpbWVvdXQgaGFzIHBhc3NlZC4KK3dpbGwgcmVib290IGFmdGVyIHRoZSB0aW1lb3V0IGhhcyBwYXNzZWQuIFdhdGNoZG9nIGRldmljZXMgYWxzbyB1c3VhbGx5CitzdXBwb3J0IHRoZSBub3dheW91dCBtb2R1bGUgcGFyYW1ldGVyIHNvIHRoYXQgdGhpcyBvcHRpb24gY2FuIGJlIGNvbnRyb2xsZWQKK2F0IHJ1bnRpbWUuCiAKLVNvbWUgb3RoZXIgZHJpdmVycyB3aWxsIG5vdCBkaXNhYmxlIHRoZSB3YXRjaGRvZywgdW5sZXNzIGEgc3BlY2lmaWMKLW1hZ2ljIGNoYXJhY3RlciAnVicgaGFzIGJlZW4gc2VudCAvZGV2L3dhdGNoZG9nIGp1c3QgYmVmb3JlIGNsb3NpbmcKLXRoZSBmaWxlLiAgSWYgdGhlIHVzZXJzcGFjZSBkYWVtb24gY2xvc2VzIHRoZSBmaWxlIHdpdGhvdXQgc2VuZGluZwotdGhpcyBzcGVjaWFsIGNoYXJhY3RlciwgdGhlIGRyaXZlciB3aWxsIGFzc3VtZSB0aGF0IHRoZSBkYWVtb24gKGFuZAotdXNlcnNwYWNlIGluIGdlbmVyYWwpIGRpZWQsIGFuZCB3aWxsIHN0b3AgcGluZ2luZyB0aGUgd2F0Y2hkb2cgd2l0aG91dAotZGlzYWJsaW5nIGl0IGZpcnN0LiAgVGhpcyB3aWxsIHRoZW4gY2F1c2UgYSByZWJvb3QuCitEcml2ZXJzIHdpbGwgbm90IGRpc2FibGUgdGhlIHdhdGNoZG9nLCB1bmxlc3MgYSBzcGVjaWZpYyBtYWdpYyBjaGFyYWN0ZXIgJ1YnCitoYXMgYmVlbiBzZW50IC9kZXYvd2F0Y2hkb2cganVzdCBiZWZvcmUgY2xvc2luZyB0aGUgZmlsZS4gIElmIHRoZSB1c2Vyc3BhY2UKK2RhZW1vbiBjbG9zZXMgdGhlIGZpbGUgd2l0aG91dCBzZW5kaW5nIHRoaXMgc3BlY2lhbCBjaGFyYWN0ZXIsIHRoZSBkcml2ZXIKK3dpbGwgYXNzdW1lIHRoYXQgdGhlIGRhZW1vbiAoYW5kIHVzZXJzcGFjZSBpbiBnZW5lcmFsKSBkaWVkLCBhbmQgd2lsbCBzdG9wCitwaW5naW5nIHRoZSB3YXRjaGRvZyB3aXRob3V0IGRpc2FibGluZyBpdCBmaXJzdC4gIFRoaXMgd2lsbCB0aGVuIGNhdXNlIGEKK3JlYm9vdCBpZiB0aGUgd2F0Y2hkb2cgaXMgbm90IHJlLW9wZW5lZCBpbiBzdWZmaWNpZW50IHRpbWUuCiAKIFRoZSBpb2N0bCBBUEk6CiAKQEAgLTIyNywyMTggKzIzMiwzIEBACiAKIFtGSVhNRSAtLSBiZXR0ZXIgZXhwbGFuYXRpb25zXQogCi1JbXBsZW1lbnRhdGlvbnMgaW4gdGhlIGN1cnJlbnQgZHJpdmVycyBpbiB0aGUga2VybmVsIHRyZWU6Ci0KLUhlcmUgSSBoYXZlIHRyaWVkIHRvIHN1bW1hcml6ZSB3aGF0IHRoZSBkaWZmZXJlbnQgZHJpdmVycyBzdXBwb3J0IGFuZAotd2hlcmUgdGhleSBkbyBzdHJhbmdlIHRoaW5ncyBjb21wYXJlZCB0byB0aGUgb3RoZXIgZHJpdmVycy4KLQotYWNxdWlyZXdkdC5jIC0tIEFjcXVpcmUgU2luZ2xlIEJvYXJkIENvbXB1dGVyCi0KLQlUaGlzIGRyaXZlciBoYXMgYSBoYXJkY29kZWQgdGltZW91dCBvZiAxIG1pbnV0ZQotCi0JU3VwcG9ydHMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCi0KLQlHRVRTVVBQT1JUIHJldHVybnMgS0VFUEFMSVZFUElORy4gIEdFVFNUQVRVUyB3aWxsIHJldHVybiAxIGlmCi0JdGhlIGRldmljZSBpcyBvcGVuLCAwIGlmIG5vdC4gIFtGSVhNRSAtLSBpc24ndCB0aGlzIHJhdGhlcgotCXNpbGx5PyAgVG8gYmUgYWJsZSB0byB1c2UgdGhlIGlvY3RsLCB0aGUgZGV2aWNlIG11c3QgYmUgb3BlbgotCWFuZCBzbyBHRVRTVEFUVVMgd2lsbCBhbHdheXMgcmV0dXJuIDFdLgotCi1hZHZhbnRlY2h3ZHQuYyAtLSBBZHZhbnRlY2ggU2luZ2xlIEJvYXJkIENvbXB1dGVyCi0KLQlUaW1lb3V0IHRoYXQgZGVmYXVsdHMgdG8gNjAgc2Vjb25kcywgc3VwcG9ydHMgU0VUVElNRU9VVC4KLQotCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAotCi0JR0VUU1VQUE9SVCByZXR1cm5zIFdESU9GX0tFRVBBTElWRVBJTkcgYW5kIFdESU9GX1NFVFRJTUVPVVQuCi0JVGhlIEdFVFNUQVRVUyBjYWxsIHJldHVybnMgaWYgdGhlIGRldmljZSBpcyBvcGVuIG9yIG5vdC4KLQlbRklYTUUgLS0gc2lsbGluZXNzIGFnYWluP10KLQkKLWJvb2tlX3dkdC5jIC0tIFBvd2VyUEMgQm9va0UgV2F0Y2hkb2cgVGltZXIKLQotCVRpbWVvdXQgZGVmYXVsdCB2YXJpZXMgYWNjb3JkaW5nIHRvIGZyZXF1ZW5jeSwgc3VwcG9ydHMKLQlTRVRUSU1FT1VUCi0KLQlXYXRjaGRvZyBjYW5ub3QgYmUgdHVybmVkIG9mZiwgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCi0JZG9lcyBub3QgbWFrZSBzZW5zZQotCi0JR0VUU1VQUE9SVCByZXR1cm5zIHRoZSB3YXRjaGRvZ19pbmZvIHN0cnVjdCwgYW5kCi0JR0VUU1RBVFVTIHJldHVybnMgdGhlIHN1cHBvcnRlZCBvcHRpb25zLiBHRVRCT09UU1RBVFVTCi0JcmV0dXJucyBhIDEgaWYgdGhlIGxhc3QgcmVzZXQgd2FzIGNhdXNlZCBieSB0aGUKLQl3YXRjaGRvZyBhbmQgYSAwIG90aGVyd2lzZS4gVGhpcyB3YXRjaGRvZyBjYW5ub3QgYmUKLQlkaXNhYmxlZCBvbmNlIGl0IGhhcyBiZWVuIHN0YXJ0ZWQuIFRoZSB3ZHRfcGVyaW9kIGtlcm5lbAotCXBhcmFtZXRlciBzZWxlY3RzIHdoaWNoIGJpdCBvZiB0aGUgdGltZSBiYXNlIGNoYW5naW5nCi0JZnJvbSAwLT4xIHdpbGwgdHJpZ2dlciB0aGUgd2F0Y2hkb2cgZXhjZXB0aW9uLiBDaGFuZ2luZwotCXRoZSB0aW1lb3V0IGZyb20gdGhlIGlvY3RsIGNhbGxzIHdpbGwgY2hhbmdlIHRoZQotCXdkdF9wZXJpb2QgYXMgZGVmaW5lZCBhYm92ZS4gRmluYWxseSBpZiB5b3Ugd291bGQgbGlrZSB0bwotCXJlcGxhY2UgdGhlIGRlZmF1bHQgV2F0Y2hkb2cgSGFuZGxlciB5b3UgY2FuIGltcGxlbWVudCB0aGUKLQlXYXRjaGRvZ0hhbmRsZXIoKSBmdW5jdGlvbiBpbiB5b3VyIG93biBjb2RlLgotCi1ldXJvdGVjaHdkdC5jIC0tIEV1cm90ZWNoIENQVS0xMjIwLzE0MTAKLQotCVRoZSB0aW1lb3V0IGNhbiBiZSBzZXQgdXNpbmcgdGhlIFNFVFRJTUVPVVQgaW9jdGwgYW5kIGRlZmF1bHRzCi0JdG8gNjAgc2Vjb25kcy4KLQotCUFsc28gaGFzIGEgbW9kdWxlIHBhcmFtZXRlciAiZXYiLCBldmVudCB0eXBlIHdoaWNoIGNvbnRyb2xzCi0Jd2hhdCBzaG91bGQgaGFwcGVuIG9uIGEgdGltZW91dCwgdGhlIHN0cmluZyAiaW50IiBvciBhbnl0aGluZwotCWVsc2UgdGhhdCBjYXVzZXMgYSByZWJvb3QuICBbRklYTUUgLS0gYmV0dGVyIGRlc2NyaXB0aW9uXQotCi0JU3VwcG9ydHMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCi0KLQlHRVRTVVBQT1JUIHJldHVybnMgQ0FSRFJFU0VUIGFuZCBXRElPRl9TRVRUSU1FT1VUIGJ1dAotCUdFVFNUQVRVUyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBHRVRCT09UU1RBVFVTIGp1c3QgcmV0dXJucyAwLgotCi1pODEwLXRjby5jIC0tIEludGVsIDgxMCBjaGlwc2V0Ci0KLQlBbHNvIGhhcyBzdXBwb3J0IGZvciBhIGxvdCBvZiBvdGhlciBpOHgwIHN0dWZmLCBidXQgdGhlCi0Jd2F0Y2hkb2cgaXMgb25lIG9mIHRoZSB0aGluZ3MuCi0KLQlUaGUgdGltZW91dCBpcyBzZXQgdXNpbmcgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgImk4MTBfbWFyZ2luIiwKLQl3aGljaCBpcyBpbiBzdGVwcyBvZiAwLjYgc2Vjb25kcyB3aGVyZSAyPGk4MTBfbWFyZ2luPDY0LiAgVGhlCi0JZHJpdmVyIHN1cHBvcnRzIHRoZSBTRVRUSU1FT1VUIGlvY3RsLgotCi0JU3VwcG9ydHMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VULgotCi0JR0VUU1VQUE9SVCByZXR1cm5zIFdESU9GX1NFVFRJTUVPVVQuICBUaGUgR0VUU1RBVFVTIGNhbGwKLQlyZXR1cm5zIHNvbWUga2luZCBvZiB0aW1lciB2YWx1ZSB3aGljaCBpc3Qgbm90IGNvbXBhdGlibGUgd2l0aAotCXRoZSBvdGhlciBkcml2ZXJzLiAgR0VUQk9PVCBzdGF0dXMgcmV0dXJucyBzb21lIGtpbmQgb2YKLQloYXJkd2FyZSBzcGVjaWZpYyBib290IHN0YXR1cy4gIFtGSVhNRSAtLSBkZXNjcmliZSB0aGlzXQotCi1pYjcwMHdkdC5jIC0tIElCNzAwIFNpbmdsZSBCb2FyZCBDb21wdXRlcgotCi0JRGVmYXVsdCB0aW1lb3V0IG9mIDMwIHNlY29uZHMgYW5kIHRoZSB0aW1lb3V0IGlzIHNldHRhYmxlCi0JdXNpbmcgdGhlIFNFVFRJTUVPVVQgaW9jdGwuICBOb3RlIHRoYXQgb25seSBhIGZldyB0aW1lb3V0Ci0JdmFsdWVzIGFyZSBzdXBwb3J0ZWQuCi0KLQlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLQotCUdFVFNVUFBPUlQgcmV0dXJucyBXRElPRl9LRUVQQUxJVkVQSU5HIGFuZCBXRElPRl9TRVRUSU1FT1VULgotCVRoZSBHRVRTVEFUVVMgY2FsbCByZXR1cm5zIGlmIHRoZSBkZXZpY2UgaXMgb3BlbiBvciBub3QuCi0JW0ZJWE1FIC0tIHNpbGxpbmVzcyBhZ2Fpbj9dCi0KLW1hY2h6d2QuYyAtLSBNYWNoWiBaRi1Mb2dpYwotCi0JSGFyZGNvZGVkIHRpbWVvdXQgb2YgMTAgc2Vjb25kcwotCi0JSGFzIGEgbW9kdWxlIHBhcmFtZXRlciAiYWN0aW9uIiB0aGF0IGNvbnRyb2xzIHdoYXQgaGFwcGVucwotCXdoZW4gdGhlIHRpbWVvdXQgcnVucyBvdXQgd2hpY2ggY2FuIGJlIDAgPSBSRVNFVCAoZGVmYXVsdCksIAotCTEgPSBTTUksIDIgPSBOTUksIDMgPSBTQ0kuCi0KLQlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgYW5kIHRoZSBtYWdpYyBjaGFyYWN0ZXIKLQknVicgY2xvc2UgaGFuZGxpbmcuCi0KLQlHRVRTVVBQT1JUIHJldHVybnMgV0RJT0ZfS0VFUEFMSVZFUElORywgYW5kIHRoZSBHRVRTVEFUVVMgY2FsbAotCXJldHVybnMgaWYgdGhlIGRldmljZSBpcyBvcGVuIG9yIG5vdC4gIFtGSVhNRSAtLSBzaWxsaW5lc3MKLQlhZ2Fpbj9dCi0KLW1peGNvbXdkLmMgLS0gTWl4Q29tIFdhdGNoZG9nCi0KLQlbRklYTUUgLS0gSSdtIHVuYWJsZSB0byB0ZWxsIHdoYXQgdGhlIHRpbWVvdXQgaXNdCi0KLQlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLQotCUdFVFNVUFBPUlQgcmV0dXJucyBXRElPRl9LRUVQQUxJVkVQSU5HLCBHRVRTVEFUVVMgcmV0dXJucyBpZgotCXRoZSBkZXZpY2UgaXMgb3BlbmVkIG9yIG5vdCBbRklYTUUgLS0gSSdtIG5vdCByZWFsbHkgc3VyZSBob3cKLQl0aGlzIHdvcmtzLCB0aGVyZSBzZWVtcyB0byBiZSBzb21lIG1hZ2ljIGNvbm5lY3RlZCB0bwotCUNPTkZJR19XQVRDSERPR19OT1dBWU9VVF0KLQotcGN3ZC5jIC0tIEJlcmtzaGlyZSBQQyBXYXRjaGRvZwotCi0JSGFyZGNvZGVkIHRpbWVvdXQgb2YgMS41IHNlY29uZHMKLQotCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAotCi0JR0VUU1VQUE9SVCByZXR1cm5zIFdESU9GX09WRVJIRUFUfFdESU9GX0NBUkRSRVNFVCBhbmQgYm90aAotCUdFVFNUQVRVUyBhbmQgR0VUQk9PVFNUQVRVUyByZXR1cm4gc29tZXRoaW5nIHVzZWZ1bC4KLQotCVRoZSBTRVRPUFRJT05TIGNhbGwgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjYXJkCi0JYW5kIHRvIGFzayB0aGUgZHJpdmVyIHRvIGNhbGwgcGFuaWMgaWYgdGhlIHN5c3RlbSBvdmVyaGVhdHMuCi0KLXNiYzYweHh3ZHQuYyAtLSA2MHh4IFNpbmdsZSBCb2FyZCBDb21wdXRlcgotCi0JSGFyZGNvZGVkIHRpbWVvdXQgb2YgMTAgc2Vjb25kcwotCi0JRG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQsIGJ1dCBoYXMgdGhlIG1hZ2ljCi0JY2hhcmFjdGVyICdWJyBjbG9zZSBoYW5kbGluZy4KLQotCU5vIGJpdHMgc2V0IGluIEdFVFNVUFBPUlQKLQotc2N4MjAwLmMgLS0gTmF0aW9uYWwgU0N4MjAwIENQVXMKLQotCU5vdCBpbiB0aGUga2VybmVsIHlldC4KLQotCVRoZSB0aW1lb3V0IGlzIHNldCB1c2luZyBhIG1vZHVsZSBwYXJhbWV0ZXIgIm1hcmdpbiIgd2hpY2gKLQlkZWZhdWx0cyB0byA2MCBzZWNvbmRzLiAgVGhlIHRpbWVvdXQgY2FuIGFsc28gYmUgc2V0IHVzaW5nCi0JU0VUVElNRU9VVCBhbmQgcmVhZCB1c2luZyBHRVRUSU1FT1VULgotCi0JU3VwcG9ydHMgYSBtb2R1bGUgcGFyYW1ldGVyICJub3dheW91dCIgdGhhdCBpcyBpbml0aWFsaXplZAotCXdpdGggdGhlIHZhbHVlIG9mIENPTkZJR19XQVRDSERPR19OT1dBWU9VVC4gIEFsc28gc3VwcG9ydHMgdGhlCi0JbWFnaWMgY2hhcmFjdGVyICdWJyBoYW5kbGluZy4KLQotc2h3ZHQuYyAtLSBTdXBlckggMy80IHByb2Nlc3NvcnMKLQotCVtGSVhNRSAtLSBJJ20gdW5hYmxlIHRvIHRlbGwgd2hhdCB0aGUgdGltZW91dCBpc10KLQotCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAotCi0JR0VUU1VQUE9SVCByZXR1cm5zIFdESU9GX0tFRVBBTElWRVBJTkcsIGFuZCB0aGUgR0VUU1RBVFVTIGNhbGwKLQlyZXR1cm5zIGlmIHRoZSBkZXZpY2UgaXMgb3BlbiBvciBub3QuICBbRklYTUUgLS0gc2lsbGluZXNzCi0JYWdhaW4/XQotCi1zb2Z0ZG9nLmMgLS0gU29mdHdhcmUgd2F0Y2hkb2cKLQotCVRoZSB0aW1lb3V0IGlzIHNldCB3aXRoIHRoZSBtb2R1bGUgcGFyYW1ldGVyICJzb2Z0X21hcmdpbiIKLQl3aGljaCBkZWZhdWx0cyB0byA2MCBzZWNvbmRzLCB0aGUgdGltZW91dCBpcyBhbHNvIHNldHRhYmxlCi0JdXNpbmcgdGhlIFNFVFRJTUVPVVQgaW9jdGwuCi0KLQlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLQotCVdESU9GX1NFVFRJTUVPVVQgYml0IHNldCBpbiBHRVRTVVBQT1JUCi0KLXc4Mzg3N2Zfd2R0LmMgLS0gVzgzODc3RiBDb21wdXRlcgotCi0JSGFyZGNvZGVkIHRpbWVvdXQgb2YgMzAgc2Vjb25kcwotCi0JRG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQsIGJ1dCBoYXMgdGhlIG1hZ2ljCi0JY2hhcmFjdGVyICdWJyBjbG9zZSBoYW5kbGluZy4KLQotCU5vIGJpdHMgc2V0IGluIEdFVFNVUFBPUlQKLQotdzgzNjI3aGZfd2R0LmMgLS0gdzgzNjI3aGYgd2F0Y2hkb2cKLQotCVRpbWVvdXQgdGhhdCBkZWZhdWx0cyB0byA2MCBzZWNvbmRzLCBzdXBwb3J0cyBTRVRUSU1FT1VULgotCi0JU3VwcG9ydHMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCi0KLQlHRVRTVVBQT1JUIHJldHVybnMgV0RJT0ZfS0VFUEFMSVZFUElORyBhbmQgV0RJT0ZfU0VUVElNRU9VVC4KLQlUaGUgR0VUU1RBVFVTIGNhbGwgcmV0dXJucyBpZiB0aGUgZGV2aWNlIGlzIG9wZW4gb3Igbm90LgotCi13ZHQuYyAtLSBJQ1MgV0RUNTAwLzUwMSBJU0EgYW5kCi13ZHRfcGNpLmMgLS0gSUNTIFdEVDUwMC81MDEgUENJCi0KLQlEZWZhdWx0IHRpbWVvdXQgb2YgNjAgc2Vjb25kcy4gIFRoZSB0aW1lb3V0IGlzIGFsc28gc2V0dGFibGUKLSAgICAgICAgdXNpbmcgdGhlIFNFVFRJTUVPVVQgaW9jdGwuCi0KLQlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLQotCUdFVFNVUFBPUlQgcmV0dXJucyB3aXRoIGJpdHMgc2V0IGRlcGVuZGluZyBvbiB0aGUgYWN0dWFsCi0JY2FyZC4gVGhlIFdEVDUwMSBzdXBwb3J0cyBhIGxvdCBvZiBleHRlcm5hbCBtb25pdG9yaW5nLCB0aGUKLQlXRFQ1MDAgbXVjaCBsZXNzLgotCi13ZHQyODUuYyAtLSBGb290YnJpZGdlIHdhdGNoZG9nCi0KLQlUaGUgdGltZW91dCBpcyBzZXQgd2l0aCB0aGUgbW9kdWxlIHBhcmFtZXRlciAic29mdF9tYXJnaW4iCi0Jd2hpY2ggZGVmYXVsdHMgdG8gNjAgc2Vjb25kcy4gIFRoZSB0aW1lb3V0IGlzIGFsc28gc2V0dGFibGUKLQl1c2luZyB0aGUgU0VUVElNRU9VVCBpb2N0bC4KLQotCURvZXMgbm90IHN1cHBvcnQgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCi0KLQlXRElPRl9TRVRUSU1FT1VUIGJpdCBzZXQgaW4gR0VUU1VQUE9SVAotCi13ZHQ5NzcuYyAtLSBOZXR3aW5kZXIgVzgzOTc3QUYgY2hpcAotCi0JSGFyZGNvZGVkIHRpbWVvdXQgb2YgMyBtaW51dGVzCi0KLQlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLQotCURvZXMgbm90IHN1cHBvcnQgYW55IGlvY3RscyBhdCBhbGwuCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2cudHh0IGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMWZmNjkuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0JV2F0Y2hkb2cgVGltZXIgSW50ZXJmYWNlcyBGb3IgVGhlIExpbnV4IE9wZXJhdGluZyBTeXN0ZW0KLQotCQlBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgotCi0JICAgICBDdXN0b20gTGludXggRHJpdmVyIEFuZCBQcm9ncmFtIERldmVsb3BtZW50Ci0KLQotVGhlIGZvbGxvd2luZyB3YXRjaGRvZyBkcml2ZXJzIGFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQ6Ci0KLQlJQ1MJV0RUNTAxLVAKLQlJQ1MJV0RUNTAxLVAgKG5vIGZhbiB0YWNob21ldGVyKQotCUlDUwlXRFQ1MDAtUAotCVNvZnR3YXJlIE9ubHkKLQlTQTExMDAgSW50ZXJuYWwgV2F0Y2hkb2cKLQlCZXJrc2hpcmUgUHJvZHVjdHMgUEMgV2F0Y2hkb2cgUmV2aXNpb24gQSAmIEMgKGJ5IEtlbiBIb2xsaXMpCi0KLQotQWxsIHNpeCBpbnRlcmZhY2VzIHByb3ZpZGUgL2Rldi93YXRjaGRvZywgd2hpY2ggd2hlbiBvcGVuIG11c3QgYmUgd3JpdHRlbgotdG8gd2l0aGluIGEgdGltZW91dCBvciB0aGUgbWFjaGluZSB3aWxsIHJlYm9vdC4gRWFjaCB3cml0ZSBkZWxheXMgdGhlIHJlYm9vdAotdGltZSBhbm90aGVyIHRpbWVvdXQuIEluIHRoZSBjYXNlIG9mIHRoZSBzb2Z0d2FyZSB3YXRjaGRvZyB0aGUgYWJpbGl0eSB0byAKLXJlYm9vdCB3aWxsIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIG1hY2hpbmVzIGFuZCBpbnRlcnJ1cHRzLiBUaGUgaGFyZHdhcmUKLWJvYXJkcyBwaHlzaWNhbGx5IHB1bGwgdGhlIG1hY2hpbmUgZG93biBvZmYgdGhlaXIgb3duIG9uYm9hcmQgdGltZXJzIGFuZAotd2lsbCByZWJvb3QgZnJvbSBhbG1vc3QgYW55dGhpbmcuCi0KLUEgc2Vjb25kIHRlbXBlcmF0dXJlIG1vbml0b3JpbmcgaW50ZXJmYWNlIGlzIGF2YWlsYWJsZSBvbiB0aGUgV0RUNTAxUCBjYXJkcwotYW5kIHNvbWUgQmVya3NoaXJlIGNhcmRzLiBUaGlzIHByb3ZpZGVzIC9kZXYvdGVtcGVyYXR1cmUuIFRoaXMgaXMgdGhlIG1hY2hpbmUgCi1pbnRlcm5hbCB0ZW1wZXJhdHVyZSBpbiBkZWdyZWVzIEZhaHJlbmhlaXQuIEVhY2ggcmVhZCByZXR1cm5zIGEgc2luZ2xlIGJ5dGUgCi1naXZpbmcgdGhlIHRlbXBlcmF0dXJlLgotCi1UaGUgdGhpcmQgaW50ZXJmYWNlIGxvZ3Mga2VybmVsIG1lc3NhZ2VzIG9uIGFkZGl0aW9uYWwgYWxlcnQgZXZlbnRzLgotCi1Cb3RoIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSB3YXRjaGRvZyBkcml2ZXJzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHN0YW5kYXJkCi1rZXJuZWwuIElmIHlvdSBhcmUgdXNpbmcgdGhlIHNvZnR3YXJlIHdhdGNoZG9nLCB5b3UgcHJvYmFibHkgYWxzbyB3YW50Ci10byB1c2UgInBhbmljPTYwIiBhcyBhIGJvb3QgYXJndW1lbnQgYXMgd2VsbC4KLQotVGhlIHdkdCBjYXJkIGNhbm5vdCBiZSBzYWZlbHkgcHJvYmVkIGZvci4gSW5zdGVhZCB5b3UgbmVlZCB0byBwYXNzCi13ZHQ9aW9hZGRyLGlycSBhcyBhIGJvb3QgcGFyYW1ldGVyIC0gZWcgIndkdD0weDI0MCwxMSIuCi0KLVRoZSBTQTExMDAgd2F0Y2hkb2cgbW9kdWxlIGNhbiBiZSBjb25maWd1cmVkIHdpdGggdGhlICJzYTExMDBfbWFyZ2luIgotY29tbWFuZGxpbmUgYXJndW1lbnQgd2hpY2ggc3BlY2lmaWVzIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLQotVGhlIGk4MTAgVENPIHdhdGNoZG9nIG1vZHVsZXMgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgImk4MTBfbWFyZ2luIgotY29tbWFuZGxpbmUgYXJndW1lbnQgd2hpY2ggc3BlY2lmaWVzIHRoZSBjb3VudGVyIGluaXRpYWwgdmFsdWUuIFRoZSBjb3VudGVyCi1pcyBkZWNyZW1lbnRlZCBldmVyeSAwLjYgc2Vjb25kcyBhbmQgZGVmYXVsdCB0byA1MCAoMzAgc2Vjb25kcykuIFZhbHVlcyBjYW4KLXJhbmdlIGJldHdlZW4gMyBhbmQgNjMuCi0KLVRoZSBpODEwIFRDTyB3YXRjaGRvZyBkcml2ZXIgYWxzbyBpbXBsZW1lbnRzIHRoZSBXRElPQ19HRVRTVEFUVVMgYW5kCi1XRElPQ19HRVRCT09UU1RBVFVTIGlvY3RsKClzLiBXRElPQ19HRVRTVEFUVVMgcmV0dXJucyB0aGUgYWN0dWFsIGNvdW50ZXIgdmFsdWUKLWFuZCBXRElPQ19HRVRCT09UU1RBVFVTIHJldHVybnMgdGhlIHZhbHVlIG9mIFRDTzIgU3RhdHVzIFJlZ2lzdGVyIChzZWUgSW50ZWwncwotZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDgyODAxQUEgYW5kIDgyODAxQUIgZGF0YXNoZWV0KS4gCi0KLUZlYXR1cmVzCi0tLS0tLS0tLQotCQlXRFQ1MDFQCQlXRFQ1MDBQCQlTb2Z0d2FyZQlCZXJrc2hpcmUJaTgxMCBUQ08JU0ExMTAwV0QKLVJlYm9vdCBUaW1lcgkgICBYICAgICAgICAgICAgICAgWCAgICAgICAgICAgICAgICBYCQkgICAgWCAgICAgICAgICAgICAgIFggICAgICAgICAgICAgICBYCi1FeHRlcm5hbCBSZWJvb3QJICAgWAkgICAgICAgICAgIFggICAgICAgICAgICAgICAgbwkJICAgIG8gICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgWAotSS9PIFBvcnQgTW9uaXRvciAgIG8JCSAgIG8JCSAgICBvCQkgICAgWCAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvCi1UZW1wZXJhdHVyZQkgICBYCQkgICBvCQkgICAgbyAgICAgICAgICAgICAgIFggICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbwotRmFuIFNwZWVkICAgICAgICAgIFgJCSAgIG8JCSAgICBvICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvCi1Qb3dlciBVbmRlcgkgICBYICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvCi1Qb3dlciBPdmVyICAgICAgICAgWCAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbwotT3ZlcmhlYXQgICAgICAgICAgIFggICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8KLQotVGhlIGV4dGVybmFsIGV2ZW50IGludGVyZmFjZXMgb24gdGhlIFdEVCBib2FyZHMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgotTWlub3IgbnVtYmVycyBhcmUgaG93ZXZlciBhbGxvY2F0ZWQgZm9yIGl0LgotCi0KLUV4YW1wbGUgV2F0Y2hkb2cgRHJpdmVyOiAgc2VlIERvY3VtZW50YXRpb24vd2F0Y2hkb2cvc3JjL3dhdGNoZG9nLXNpbXBsZS5jCi0KLQotQ29udGFjdCBJbmZvcm1hdGlvbgotCi1QZW9wbGUga2VlcCBhc2tpbmcgYWJvdXQgdGhlIFdEVCB3YXRjaGRvZyB0aW1lciBoYXJkd2FyZTogVGhlIHBob25lIGNvbnRhY3RzCi1mb3IgSW5kdXN0cmlhbCBDb21wdXRlciBTb3VyY2UgYXJlOgotIAotSW5kdXN0cmlhbCBDb21wdXRlciBTb3VyY2UKLWh0dHA6Ly93d3cuaW5kY29tcHNyYy5jb20KLUlDUyBBZHZlbnQsIFNhbiBEaWVnbwotNjI2MCBTZXF1ZW5jZSBEci4KLVNhbiBEaWVnbywgQ0EgOTIxMjEtNDM3MQotUGhvbmUgKDg1OCkgNjc3LTA4NzcKLUZBWDogKDg1OCkgNjc3LTA4OTUKLT4KLUlDUyBBZHZlbnQgRXVyb3BlLCBVSwotT3ZpbmcgUm9hZAotQ2hpY2hlc3RlciwKLVdlc3QgU3Vzc2V4LAotUE8xOSA0RVQsIFVLCi1QaG9uZTogMDAuNDQuMTI0My41MzM5MDAKLQotCi1hbmQgcGxlYXNlIG1lbnRpb24gTGludXggd2hlbiBlbnF1aXJpbmcuCi0KLUZvciBmdWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBQQ1dEIGNhcmRzIHNlZSB0aGUgcGN3ZC13YXRjaGRvZy50eHQgZG9jdW1lbnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dkdC50eHQgYi9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dkdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmZDc1NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2R0LnR4dApAQCAtMCwwICsxLDQzIEBACitMYXN0IFJldmlld2VkOiAxMC8wNS8yMDA3CisKKwlXRFQgV2F0Y2hkb2cgVGltZXIgSW50ZXJmYWNlcyBGb3IgVGhlIExpbnV4IE9wZXJhdGluZyBTeXN0ZW0KKwkJQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KKworCUlDUwlXRFQ1MDEtUAorCUlDUwlXRFQ1MDEtUCAobm8gZmFuIHRhY2hvbWV0ZXIpCisJSUNTCVdEVDUwMC1QCisKK0FsbCB0aGUgaW50ZXJmYWNlcyBwcm92aWRlIC9kZXYvd2F0Y2hkb2csIHdoaWNoIHdoZW4gb3BlbiBtdXN0IGJlIHdyaXR0ZW4KK3RvIHdpdGhpbiBhIHRpbWVvdXQgb3IgdGhlIG1hY2hpbmUgd2lsbCByZWJvb3QuIEVhY2ggd3JpdGUgZGVsYXlzIHRoZSByZWJvb3QKK3RpbWUgYW5vdGhlciB0aW1lb3V0LiBJbiB0aGUgY2FzZSBvZiB0aGUgc29mdHdhcmUgd2F0Y2hkb2cgdGhlIGFiaWxpdHkgdG8KK3JlYm9vdCB3aWxsIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIG1hY2hpbmVzIGFuZCBpbnRlcnJ1cHRzLiBUaGUgaGFyZHdhcmUKK2JvYXJkcyBwaHlzaWNhbGx5IHB1bGwgdGhlIG1hY2hpbmUgZG93biBvZmYgdGhlaXIgb3duIG9uYm9hcmQgdGltZXJzIGFuZAord2lsbCByZWJvb3QgZnJvbSBhbG1vc3QgYW55dGhpbmcuCisKK0Egc2Vjb25kIHRlbXBlcmF0dXJlIG1vbml0b3JpbmcgaW50ZXJmYWNlIGlzIGF2YWlsYWJsZSBvbiB0aGUgV0RUNTAxUCBjYXJkcworVGhpcyBwcm92aWRlcyAvZGV2L3RlbXBlcmF0dXJlLiBUaGlzIGlzIHRoZSBtYWNoaW5lIGludGVybmFsIHRlbXBlcmF0dXJlIGluCitkZWdyZWVzIEZhaHJlbmhlaXQuIEVhY2ggcmVhZCByZXR1cm5zIGEgc2luZ2xlIGJ5dGUgZ2l2aW5nIHRoZSB0ZW1wZXJhdHVyZS4KKworVGhlIHRoaXJkIGludGVyZmFjZSBsb2dzIGtlcm5lbCBtZXNzYWdlcyBvbiBhZGRpdGlvbmFsIGFsZXJ0IGV2ZW50cy4KKworVGhlIHdkdCBjYXJkIGNhbm5vdCBiZSBzYWZlbHkgcHJvYmVkIGZvci4gSW5zdGVhZCB5b3UgbmVlZCB0byBwYXNzCit3ZHQ9aW9hZGRyLGlycSBhcyBhIGJvb3QgcGFyYW1ldGVyIC0gZWcgIndkdD0weDI0MCwxMSIuCisKK0ZlYXR1cmVzCistLS0tLS0tLQorCQlXRFQ1MDFQCQlXRFQ1MDBQCitSZWJvb3QgVGltZXIJICAgWCAgICAgICAgICAgICAgIFgKK0V4dGVybmFsIFJlYm9vdAkgICBYCSAgICAgICAgICAgWAorSS9PIFBvcnQgTW9uaXRvciAgIG8JCSAgIG8KK1RlbXBlcmF0dXJlCSAgIFgJCSAgIG8KK0ZhbiBTcGVlZCAgICAgICAgICBYCQkgICBvCitQb3dlciBVbmRlcgkgICBYICAgICAgICAgICAgICAgbworUG93ZXIgT3ZlciAgICAgICAgIFggICAgICAgICAgICAgICBvCitPdmVyaGVhdCAgICAgICAgICAgWCAgICAgICAgICAgICAgIG8KKworVGhlIGV4dGVybmFsIGV2ZW50IGludGVyZmFjZXMgb24gdGhlIFdEVCBib2FyZHMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorTWlub3IgbnVtYmVycyBhcmUgaG93ZXZlciBhbGxvY2F0ZWQgZm9yIGl0LgorCisKK0V4YW1wbGUgV2F0Y2hkb2cgRHJpdmVyOiAgc2VlIERvY3VtZW50YXRpb24vd2F0Y2hkb2cvc3JjL3dhdGNoZG9nLXNpbXBsZS5jCisKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNmQ2NjVhYy4uZjNiNWEzOSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTMwLDggKzMwLDExIEBACiAJam9iIHRoZSBtYWludGFpbmVycyAoYW5kIGVzcGVjaWFsbHkgTGludXMpIGRvIGlzIHRvIGtlZXAgdGhpbmdzCiAJbG9va2luZyB0aGUgc2FtZS4gU29tZXRpbWVzIHRoaXMgbWVhbnMgdGhhdCB0aGUgY2xldmVyIGhhY2sgaW4KIAl5b3VyIGRyaXZlciB0byBnZXQgYXJvdW5kIGEgcHJvYmxlbSBhY3R1YWxseSBuZWVkcyB0byBiZWNvbWUgYQotCWdlbmVyYWxpemVkIGtlcm5lbCBmZWF0dXJlIHJlYWR5IGZvciBuZXh0IHRpbWUuIFNlZQotCURvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUgZm9yIGd1aWRhbmNlIGhlcmUuCisJZ2VuZXJhbGl6ZWQga2VybmVsIGZlYXR1cmUgcmVhZHkgZm9yIG5leHQgdGltZS4KKworCVBMRUFTRSBjaGVjayB5b3VyIHBhdGNoIHdpdGggdGhlIGF1dG9tYXRlZCBzdHlsZSBjaGVja2VyCisJKHNjcmlwdHMvY2hlY2twYXRjaC5wbCkgdG8gY2F0Y2ggdHJpdmFsIHN0eWxlIHZpb2xhdGlvbnMuCisJU2VlIERvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUgZm9yIGd1aWRhbmNlIGhlcmUuCiAKIAlQTEVBU0UgdHJ5IHRvIGluY2x1ZGUgYW55IGNyZWRpdCBsaW5lcyB5b3Ugd2FudCBhZGRlZCB3aXRoIHRoZQogCXBhdGNoLiBJdCBhdm9pZHMgcGVvcGxlIGJlaW5nIG1pc3NlZCBvZmYgYnkgbWlzdGFrZSBhbmQgbWFrZXMKQEAgLTMzMiw2ICszMzUsOSBAQAogVzoJaHR0cDovL3d3dy5saW51eC11c2Iub3JnL1NwZWVkVG91Y2gvCiBTOglNYWludGFpbmVkCiAKK0FMQ0hFTVkgQVUxWFgwIE1NQyBEUklWRVIKK1M6CU9ycGhhbgorCiBBTEkxNTYzIEkyQyBEUklWRVIKIFA6CVJ1ZG9sZiBNYXJlawogTToJci5tYXJla0Bhc3NlbWJsZXIuY3oKQEAgLTM3Miw3ICszNzgsNyBAQAogUDoJSm9oYW5uZXMgQmVyZwogTToJam9oYW5uZXNAc2lwc29sdXRpb25zLm5ldAogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKLUw6CWFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZworTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnIChzdWJzY3JpYmVycy1vbmx5KQogUzoJTWFpbnRhaW5lZAogCiBBUE0gRFJJVkVSCkBAIC0zODIsNiArMzg4LDEyIEBACiBXOglodHRwOi8vd3d3LmNhbmIuYXV1Zy5vcmcuYXUvfnNmci8KIFM6CVN1cHBvcnRlZAogCitBUFBMRSBTTUMgRFJJVkVSCitQOglOaWNvbGFzIEJvaWNoYXQKK006CW5pY29sYXNAYm9pY2hhdC5jaAorTDoJbWFjdGVsLWxpbnV4LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorUzoJTWFpbnRhaW5lZAorCiBBUFBMRVRBTEsgTkVUV09SSyBMQVlFUgogUDoJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvCiBNOglhY21lQGdob3N0cHJvdG9jb2xzLm5ldApAQCAtNDEyLDYgKzQyNCwxMiBAQAogTToJc3B5cm9AZjJzLmNvbQogUzoJTWFpbnRhaW5lZAogCitBUk0gUFJJTUVDRUxMIE1NQ0kgUEwxODAvMSBEUklWRVIKK1A6CVJ1c3NlbGwgS2luZworTToJcm1rQGFybS5saW51eC5vcmcudWsKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CU1haW50YWluZWQKKwogQVJNL0FESSBST0FEUlVOTkVSIE1BQ0hJTkUgU1VQUE9SVAogUDoJTGVubmVydCBCdXl0ZW5oZWsKIE06CWtlcm5lbEB3YW50c3RvZmx5Lm9yZwpAQCAtNjQzLDYgKzY2MSw5IEBACiBXOglodHRwOi8vbGludXgtYXRtLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogCitBVE1FTCBBVDkxIE1DSSBEUklWRVIKK1M6CU9ycGhhbgorCiBBVE1FTCBNQUNCIEVUSEVSTkVUIERSSVZFUgogUDoJSGFhdmFyZCBTa2lubmVtb2VuCiBNOgloc2tpbm5lbW9lbkBhdG1lbC5jb20KQEAgLTY3Myw2ICs2OTQsNyBAQAogUDoJTWlndWVsIE9qZWRhIFNhbmRvbmlzCiBNOgltYXhleHRyZW1lQGdtYWlsLmNvbQogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL2F1eGRpc3BsYXkuZ29vZ2xlcGFnZXMuY29tLwogUzoJTWFpbnRhaW5lZAogCiBBVlIzMiBBUkNISVRFQ1RVUkUKQEAgLTkzNywxMiArOTU5LDE0IEBACiBQOglNaWd1ZWwgT2plZGEgU2FuZG9uaXMKIE06CW1heGV4dHJlbWVAZ21haWwuY29tCiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vYXV4ZGlzcGxheS5nb29nbGVwYWdlcy5jb20vCiBTOglNYWludGFpbmVkCiAKIENGQUcxMjg2NEJGQiBMQ0QgRlJBTUVCVUZGRVIgRFJJVkVSCiBQOglNaWd1ZWwgT2plZGEgU2FuZG9uaXMKIE06CW1heGV4dHJlbWVAZ21haWwuY29tCiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vYXV4ZGlzcGxheS5nb29nbGVwYWdlcy5jb20vCiBTOglNYWludGFpbmVkCiAKIENGRzgwMjExIGFuZCBOTDgwMjExCkBAIC05NTEsNiArOTc1LDE1IEBACiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorQ0hFQ0tQQVRDSAorUDoJQW5keSBXaGl0Y3JvZnQKK006CWFwd0BzaGFkb3dlbi5vcmcKK1A6CVJhbmR5IER1bmxhcAorTToJcmR1bmxhcEB4ZW5vdGltZS5uZXQKK1A6CUpvZWwgU2Nob3BwCitNOglqc2Nob3BwQGF1c3Rpbi5pYm0uY29tCitTOglTdXBwb3J0ZWQKKwogQ09NTU9OIElOVEVSTkVUIEZJTEUgU1lTVEVNIChDSUZTKQogUDoJU3RldmUgRnJlbmNoCiBNOglzZnJlbmNoQHNhbWJhLm9yZwpAQCAtMTAyOSw2ICsxMDYyLDE0IEBACiBDT05FWEFOVCBBQ0NFU1NSVU5ORVIgVVNCIERSSVZFUgogUDoJU2ltb24gQXJsb3R0CiBNOgljeGFjcnVAZmlyZS5scDAuZXUKK0w6CWFjY2Vzc3J1bm5lci1nZW5lcmFsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorVzoJaHR0cDovL2FjY2Vzc3J1bm5lci5zb3VyY2Vmb3JnZS5uZXQvCitTOglNYWludGFpbmVkCisKK0NPUkVURU1QIEhBUkRXQVJFIE1PTklUT1JJTkcgRFJJVkVSCitQOglSdWRvbGYgTWFyZWsKK006CXIubWFyZWtAYXNzZW1ibGVyLmN6CitMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCiBTOglNYWludGFpbmVkCiAKIENPU0EvU1JQIFNZTkMgU0VSSUFMIERSSVZFUgpAQCAtMTQ0Niw2ICsxNDg3LDEzIEBACiBMOglsaW51eHBwYy1lbWJlZGRlZEBvemxhYnMub3JnCiBTOglNYWludGFpbmVkCiAKK0ZSRUVTQ0FMRSBRVUlDQyBFTkdJTkUgVUNDIEVUSEVSTkVUIERSSVZFUgorUDoJTGkgWWFuZworTToJbGVvbGlAZnJlZXNjYWxlLmNvbQorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworTDoJbGludXhwcGMtZW1iZWRkZWRAb3psYWJzLm9yZworUzoJTWFpbnRhaW5lZAorCiBGSUxFIExPQ0tJTkcgKGZsb2NrKCkgYW5kIGZjbnRsKCkvbG9ja2YoKSkKIFA6CU1hdHRoZXcgV2lsY294CiBNOgltYXR0aGV3QHdpbC5jeApAQCAtMTQ1Nyw2ICsxNTA1LDE0IEBACiBNOgl2aXJvQHplbml2LmxpbnV4Lm9yZy51awogUzoJTWFpbnRhaW5lZAogCitGSVJFV0lSRSBTVUJTWVNURU0KK1A6CUtyaXN0aWFuIEhvZWdzYmVyZywgU3RlZmFuIFJpY2h0ZXIKK006CWtyaEByZWRoYXQuY29tLCBzdGVmYW5yQHM1cjYuaW4tYmVybGluLmRlCitMOglsaW51eDEzOTQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitXOglodHRwOi8vd3d3LmxpbnV4MTM5NC5vcmcvCitUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2llZWUxMzk0L2xpbnV4MTM5NC0yLjYuZ2l0CitTOglNYWludGFpbmVkCisKIEZJUk1XQVJFIExPQURFUiAocmVxdWVzdF9maXJtd2FyZSkKIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU9ycGhhbgpAQCAtMTY5NSwxOCArMTc1MSwxMCBAQAogUzoJTWFpbnRhaW5lZAogCiBpMzg2IFNFVFVQIENPREUgLyBDUFUgRVJSQVRBIFdPUktBUk9VTkRTCi1QOglEYXZlIEpvbmVzCi1NOglkYXZlakBjb2RlbW9ua2V5Lm9yZy51awogUDoJSC4gUGV0ZXIgQW52aW4KIE06CWhwYUB6eXRvci5jb20KIFM6CU1haW50YWluZWQKIAotaTgxMCBUQ08gVElNRVIgV0FUQ0hET0cKLVA6CU5pbHMgRmFlcmJlcgotTToJbmlsc0BrZXJuZWxjb25jZXB0cy5kZQotVzoJaHR0cDovL3d3dy5rZXJuZWxjb25jZXB0cy5kZS8KLVM6CU1haW50YWluZWQKLQogSUE2NCAoSXRhbml1bSkgUExBVEZPUk0KIFA6CVRvbnkgTHVjawogTToJdG9ueS5sdWNrQGludGVsLmNvbQpAQCAtMjAyMSw3ICsyMDY5LDcgQEAKIE06CXZnb3lhbEBpbi5pYm0uY29tCiBQOglIYXJlbiBNeW5lbmkKIE06CWhiYWJ1QHVzLmlibS5jb20KLUw6CWZhc3Rib290QGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCitMOglrZXhlY0BsaXN0cy5pbmZyYWRlYWQub3JnCiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9rZHVtcC8KIFM6CU1haW50YWluZWQKQEAgLTIwNzEsNyArMjExOSw3IEBACiBNOgllYmllZGVybUB4bWlzc2lvbi5jb20KIFc6CWh0dHA6Ly93d3cueG1pc3Npb24uY29tL35lYmllZGVybS9maWxlcy9rZXhlYy8KIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKLUw6CWZhc3Rib290QGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCitMOglrZXhlY0BsaXN0cy5pbmZyYWRlYWQub3JnCiBTOglNYWludGFpbmVkCiAKIEtQUk9CRVMKQEAgLTIwOTAsNiArMjEzOCw3IEBACiBQOglNaWd1ZWwgT2plZGEgU2FuZG9uaXMKIE06CW1heGV4dHJlbWVAZ21haWwuY29tCiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vYXV4ZGlzcGxheS5nb29nbGVwYWdlcy5jb20vCiBTOglNYWludGFpbmVkCiAKIExBUEIgbW9kdWxlCkBAIC0yMjIxLDExICsyMjcwLDExIEBACiBMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCiBTOglNYWludGFpbmVkCiAKLUxPR0lDQUwgRElTSyBNQU5BR0VSIFNVUFBPUlQgKExETSwgV2luZG93cyAyMDAwL1hQIER5bmFtaWMgRGlza3MpCitMT0dJQ0FMIERJU0sgTUFOQUdFUiBTVVBQT1JUIChMRE0sIFdpbmRvd3MgMjAwMC9YUC9WaXN0YSBEeW5hbWljIERpc2tzKQogUDoJUmljaGFyZCBSdXNzb24gKEZsYXRDYXApCiBNOglsZG1AZmxhdGNhcC5vcmcKLUw6CWxkbS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLVc6CWh0dHA6Ly9sZG0uc291cmNlZm9yZ2UubmV0CitMOglsaW51eC1udGZzLWRldkBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK1c6CWh0dHA6Ly93d3cubGludXgtbnRmcy5vcmcvY29udGVudC92aWV3LzE5LzM3LwogUzoJTWFpbnRhaW5lZAogCiBMU0lMT0dJQyBNUFQgRlVTSU9OIERSSVZFUlMgKEZDL1NBUy9TUEkpCkBAIC0yMzA0LDkgKzIzNTMsMTUgQEAKIEw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKIFM6CU1haW50YWluZWQKIAorTUFYNjY1MCBIQVJEV0FSRSBNT05JVE9SIEFORCBGQU4gQ09OVFJPTExFUiBEUklWRVIKK1A6CUhhbnMgSi4gS29jaAorTToJaGprQGxpbnV0cm9uaXguZGUKK0w6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKK1M6CU1haW50YWluZWQKKwogTUVHQVJBSUQgU0NTSSBEUklWRVJTCiBQOglOZWVsYSBTeWFtIEtvbGxpCi1NOglOZWVsYS5Lb2xsaUBlbmdlbmlvLmNvbQorTToJbWVnYXJhaWRsaW51eEBsc2kuY29tCiBTOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL21lZ2FyYWlkLmxzaWxvZ2ljLmNvbQogUzoJTWFpbnRhaW5lZApAQCAtMjM2NCw2ICsyNDE5LDEzIEBACiBXOglodHRwOi8vcG9waWVzLm5ldC9tZXllLwogUzoJTWFpbnRhaW5lZAogCitNT1RPUk9MQSBJTVggTU1DL1NEIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UgRFJJVkVSCitQOglQYXZlbCBQaXNhCitNOglwcGlzYUBwaWtyb24uY29tCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitXOglodHRwOi8vbW1jLmRyemV1cy5jeC93aWtpL0NvbnRyb2xsZXJzL0ZyZWVzY2FsZS9TREhDCitTOglNYWludGFpbmVkCisKIE1PVVNFIEFORCBNSVNDIERFVklDRVMgW0dFTkVSQUxdCiBQOglBbGVzc2FuZHJvIFJ1YmluaQogTToJcnViaW5pQGlwdnZpcy51bmlwdi5pdApAQCAtMjYyNCw2ICsyNjg2LDEyIEBACiBMOgl2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20KIFM6CU1haW50YWluZWQKIAorT05FTkFORCBGTEFTSCBEUklWRVIKK1A6CUt5dW5nbWluIFBhcmsKK006CWt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20KK0w6CWxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnCitTOglNYWludGFpbmVkCisKIE9OU1RSRUFNIFNDU0kgVEFQRSBEUklWRVIKIFA6CVdpbGxlbSBSaWVkZQogTToJb3NzdEByaWVkZS5vcmcKQEAgLTI2NjcsMTMgKzI3MzUsMTMgQEAKIFM6CU1haW50YWluZWQKIAogUEFSQUxMRUwgUE9SVCBTVVBQT1JUCi1MOglsaW51eC1wYXJwb3J0QGxpc3RzLmluZnJhZGVhZC5vcmcKK0w6CWxpbnV4LXBhcnBvcnRAbGlzdHMuaW5mcmFkZWFkLm9yZyAoc3Vic2NyaWJlcnMtb25seSkKIFM6CU9ycGhhbgogCiBQQVJJREUgRFJJVkVSUyBGT1IgUEFSQUxMRUwgUE9SVCBJREUgREVWSUNFUwogUDoJVGltIFdhdWdoCiBNOgl0aW1AY3liZXJlbGsubmV0Ci1MOglsaW51eC1wYXJwb3J0QGxpc3RzLmluZnJhZGVhZC5vcmcKK0w6CWxpbnV4LXBhcnBvcnRAbGlzdHMuaW5mcmFkZWFkLm9yZyAoc3Vic2NyaWJlcnMtb25seSkKIFc6CWh0dHA6Ly93d3cudG9ycXVlLm5ldC9saW51eC1wcC5odG1sCiBTOglNYWludGFpbmVkCiAKQEAgLTI3NzgsNyArMjg0Niw3IEBACiBTOglNYWludGFpbmVkCiAKIFBIUkFNIE1URCBEUklWRVIKLVA6CUr2cm4gRW5nZWwKK1A6CUrDtnJuIEVuZ2VsCiBNOglqb2VybkB3aC5maC13ZWRlbC5kZQogTDoJbGludXgtbXRkQGxpc3RzLmluZnJhZGVhZC5vcmcKIFM6CU1haW50YWluZWQKQEAgLTI4MzksOCArMjkwNyw4IEBACiBTOglTdXBwb3J0ZWQKIAogUFJJU001NCBXSVJFTEVTUyBEUklWRVIKLVA6CVByaXNtNTQgRGV2ZWxvcG1lbnQgVGVhbQotTToJZGV2ZWxvcGVyc0Bpc2xzbS5vcmcKK1A6CUx1aXMgUi4gUm9kcmlndWV6CitNOgltY2dyb2ZAZ21haWwuY29tCiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9wcmlzbTU0Lm9yZwogUzoJTWFpbnRhaW5lZApAQCAtMjg3OCw2ICsyOTQ2LDkgQEAKIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKIFM6CU1haW50YWluZWQKIAorUFhBIE1NQ0kgRFJJVkVSCitTOglPcnBoYW4KKwogUUxPR0lDIFFMQTJYWFggRkMtU0NTSSBEUklWRVIKIFA6CUFuZHJldyBWYXNxdWV6CiBNOglsaW51eC1kcml2ZXJAcWxvZ2ljLmNvbQpAQCAtMzA1Miw3ICszMTIzLDcgQEAKIFM6CU1haW50YWluZWQKIAogU0NTSSBUQVBFIERSSVZFUgotUDoJS2FpIE3ka2lzYXJhCitQOglLYWkgTcOka2lzYXJhCiBNOglLYWkuTWFraXNhcmFAa29sdW1idXMuZmkKIEw6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCkBAIC0zMDk4LDYgKzMxNjksMTEgQEAKIFc6CWh0dHA6Ly93d3cubnNhLmdvdi9zZWxpbnV4CiBTOglTdXBwb3J0ZWQKIAorU0VOU0FCTEUgUEhBTlRPTQorUDoJSmlyaSBTbGFieQorTToJamlyaXNsYWJ5QGdtYWlsLmNvbQorUzoJTWFpbnRhaW5lZAorCiBTRVJJQUwgQVRBIChTQVRBKSBTVUJTWVNURU06CiBQOglKZWZmIEdhcnppawogTToJamdhcnppa0Bwb2JveC5jb20KQEAgLTMyMTAsMTMgKzMyODYsMTMgQEAKIFNPVU5ECiBQOglKYXJvc2xhdiBLeXNlbGEKIE06CXBlcmV4QHN1c2UuY3oKLUw6CWFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZworTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnIChzdWJzY3JpYmVycy1vbmx5KQogUzoJTWFpbnRhaW5lZAogCiBTT1VORCAtIFNPQyBMQVlFUiAvIERZTkFNSUMgQVVESU8gUE9XRVIgTUFOQUdFTUVOVAogUDoJTGlhbSBHaXJkd29vZAogTToJbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tCi1MOglhbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcKK0w6CWFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZyAoc3Vic2NyaWJlcnMtb25seSkKIFM6CVN1cHBvcnRlZAogCiBTUEkgU1VCU1lTVEVNCkBAIC0zMzg5LDYgKzM0NjUsMTMgQEAKIE06ICAgICAgb2FrYWRAeWFob28uY29tCiBTOiAgICAgIE1haW50YWluZWQKIAorVEkgT01BUCBNTUMgSU5URVJGQUNFIERSSVZFUgorUDoJQ2FybG9zIEFndWlhciwgQW5kZXJzb24gQnJpZ2xpYSBhbmQgU3llZCBLaGFzaW0KK006CWxpbnV4LW9tYXAtb3Blbi1zb3VyY2VAbGludXgub21hcC5jb20gCitXOglodHRwOi8vbGludXgub21hcC5jb20KK1c6CWh0dHA6Ly93d3cubXVydS5jb20vbGludXgvb21hcC8KK1M6CU1haW50YWluZWQKKwogVEkgT01BUCBSQU5ET00gTlVNQkVSIEdFTkVSQVRPUiBTVVBQT1JUCiBQOglEZWVwYWsgU2F4ZW5hCiBNOglkc2F4ZW5hQHBsZXhpdHkubmV0CkBAIC0zNDY5LDcgKzM1NTIsNyBAQAogCiBUVUxJUCBORVRXT1JLIERSSVZFUgogUDoJVmFsZXJpZSBIZW5zb24KLU06CXZhbF9oZW5zb25AbGludXguaW50ZWwuY29tCitNOgl2YWxAbm10LmVkdQogTDoJdHVsaXAtdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3R1bGlwLwogUzoJTWFpbnRhaW5lZApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBkZmU1NTljLi41NjJhOTA5IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw4ICsxLDggQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgotU1VCTEVWRUwgPSAyMQotRVhUUkFWRVJTSU9OID0KLU5BTUUgPSBOb2N0dXJuYWwgTW9uc3RlciBQdXBweQorU1VCTEVWRUwgPSAyMgorRVhUUkFWRVJTSU9OID0gLXJjMworTkFNRSA9IEplZmYgVGhpbmtzIEkgU2hvdWxkIENoYW5nZSBUaGlzLCBCdXQgVG8gV2hhdD8KIAogIyAqRE9DVU1FTlRBVElPTioKICMgVG8gc2VlIGEgbGlzdCBvZiB0eXBpY2FsIHRhcmdldHMgZXhlY3V0ZSAibWFrZSBoZWxwIgpAQCAtNDkxLDcgKzQ5MSw3IEBACiBpbmNsdWRlICQoc3JjdHJlZSkvYXJjaC8kKEFSQ0gpL01ha2VmaWxlCiAKIGlmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCi1DRkxBR1MJCSs9IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tb3B0aW1pemUtc2libGluZy1jYWxscworQ0ZMQUdTCQkrPSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAkKGNhbGwgY2Mtb3B0aW9uLC1mbm8tb3B0aW1pemUtc2libGluZy1jYWxscywpCiBlbHNlCiBDRkxBR1MJCSs9IC1mb21pdC1mcmFtZS1wb2ludGVyCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnCmluZGV4IDc3MGY3MTcuLjc5YzZlNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZworKysgYi9hcmNoL2FscGhhL0tjb25maWcKQEAgLTgzLDIyICs4MywyMCBAQAogCSAgY2hlY2sgb3V0IHRoZSBMaW51eC9BbHBoYSBGQVEsIGFjY2Vzc2libGUgb24gdGhlIFdXVyBmcm9tCiAJICA8aHR0cDovL3d3dy5hbHBoYWxpbnV4Lm9yZy8+LiBJbiBzdW1tYXJ5OgogCi0JICBBbGNvci9BbHBoYS1YTFQgICAgIEFTIDYwMAorCSAgQWxjb3IvQWxwaGEtWExUICAgICBBUyA2MDAsIEFTIDUwMCwgWEwtMzAwLCBYTC0zNjYKIAkgIEFscGhhLVhMICAgICAgICAgICAgWEwtMjMzLCBYTC0yNjYKIAkgIEFscGhhQm9vazEgICAgICAgICAgQWxwaGEgbGFwdG9wCiAJICBBdmFudGkgICAgICAgICAgICAgIEFTIDIwMCwgQVMgMjA1LCBBUyAyNTAsIEFTIDI1NSwgQVMgMzAwLCBBUyA0MDAKIAkgIENhYnJpb2xldCAgICAgICAgICAgQWxwaGFQQzY0LCBBbHBoYVBDSTY0Ci0JICBEUDI2NCAgICAgICAgICAgICAgIERQMjY0CisJICBEUDI2NCAgICAgICAgICAgICAgIERQMjY0IC8gRFMyMCAvIEVTNDAgLyBEUzEwIC8gRFMxMEwKIAkgIEVCMTY0ICAgICAgICAgICAgICAgRUIxNjQgMjExNjQgZXZhbHVhdGlvbiBib2FyZAogCSAgRUI2NCsgICAgICAgICAgICAgICBFQjY0KyAyMTA2NCBldmFsdWF0aW9uIGJvYXJkCiAJICBFQjY2ICAgICAgICAgICAgICAgIEVCNjYgMjEwNjYgZXZhbHVhdGlvbiBib2FyZAogCSAgRUI2NisgICAgICAgICAgICAgICBFQjY2KyAyMTA2NiBldmFsdWF0aW9uIGJvYXJkCi0JICBKZW5zZW4gICAgICAgICAgICAgIERFQ3BjIDE1MCwgREVDIDIwMDAgbW9kZWwgMzAwLAotCSAgREVDIDIwMDAgbW9kZWwgNTAwCisJICBKZW5zZW4gICAgICAgICAgICAgIERFQ3BjIDE1MCwgREVDIDIwMDAgbW9kZWxzIDMwMCwgNTAwCiAJICBMWDE2NCAgICAgICAgICAgICAgIEFscGhhUEMxNjQtTFgKIAkgIEx5bnggICAgICAgICAgICAgICAgQVMgMjEwMEEKLQkgIE1pYXRhICAgICAgICAgICAgICAgUGVyc29uYWwgV29ya3N0YXRpb24gNDMzYSwgNDMzYXUsIDUwMGEsCi0JICA1MDBhdSwgNjAwYSwgb3IgNjAwYXUKKwkgIE1pYXRhICAgICAgICAgICAgICAgUGVyc29uYWwgV29ya3N0YXRpb24gNDMzLzUwMC82MDAgYS9hdQogCSAgTWFydmVsICAgICAgICAgICAgICBBbHBoYVNlcnZlciBFUzQ3IC8gRVM4MCAvIEdTMTI4MAogCSAgTWlrYXNhICAgICAgICAgICAgICBBUyAxMDAwCiAJICBOb25hbWUgICAgICAgICAgICAgIEFYUHBjaTMzLCBVREIgKE11bHRpYSkKQEAgLTEwOCw5ICsxMDYsOSBAQAogCSAgUnVmZmlhbiAgICAgICAgICAgICBSUFgxNjQtMiwgQWxwaGFQQzE2NC1VWCwgQWxwaGFQQzE2NC1CWAogCSAgU1gxNjQgICAgICAgICAgICAgICBBbHBoYVBDMTY0LVNYCiAJICBTYWJsZSAgICAgICAgICAgICAgIEFTIDIwMDAsIEFTIDIxMDAKLQkgIFNoYXJrCQkgICAgICBEUyAyMEwKLQkgIFRha2FyYSAgICAgICAgICAgICAgVGFrYXJhCi0JICBUaXRhbiAgICAgICAgICAgICAgIEFscGhhU2VydmVyIEVTNDUgLyBEUzI1CisJICBTaGFyayAgICAgICAgICAgICAgIERTIDIwTAorCSAgVGFrYXJhICAgICAgICAgICAgICBUYWthcmEgKE9FTSkKKwkgIFRpdGFuICAgICAgICAgICAgICAgQWxwaGFTZXJ2ZXIgRVM0NSAvIERTMjUgLyBEUzE1CiAJICBXaWxkZmlyZSAgICAgICAgICAgIEFscGhhU2VydmVyIEdTIDQwLzgwLzE2MC8zMjAKIAogCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbywgY2hvb3NlICJnZW5lcmljIi4KQEAgLTQ4MSw2ICs0NzksMTUgQEAKIAlkZXBlbmRzIG9uIEFMUEhBX0dFTkVSSUMgfHwgQUxQSEFfUEMxNjQKIAlkZWZhdWx0IHkKIAorY29uZmlnIFZHQV9IT1NFCisJYm9vbAorCWRlcGVuZHMgb24gQUxQSEFfR0VORVJJQyB8fCBBTFBIQV9USVRBTiB8fCBBTFBIQV9NQVJWRUwgfHwgQUxQSEFfVFNVTkFNSQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFN1cHBvcnQgVkdBIG9uIGFuIGFyYml0cmFyeSBob3NlOyBuZWVkZWQgZm9yIHNldmVyYWwgcGxhdGZvcm1zCisJICB3aGljaCBhbHdheXMgaGF2ZSBtdWx0aXBsZSBob3NlcywgYW5kIHdob3NlIGNvbnNvbGVzIHN1cHBvcnQgaXQuCisKKwogY29uZmlnIEFMUEhBX1NSTQogCWJvb2wgIlVzZSBTUk0gYXMgYm9vdGxvYWRlciIgaWYgQUxQSEFfQ0FCUklPTEVUIHx8IEFMUEhBX0FWQU5USV9DSCB8fCBBTFBIQV9FQjY0UCB8fCBBTFBIQV9QQzE2NCB8fCBBTFBIQV9UQUtBUkEgfHwgQUxQSEFfRUIxNjQgfHwgQUxQSEFfQUxDT1IgfHwgQUxQSEFfTUlBVEEgfHwgQUxQSEFfTFgxNjQgfHwgQUxQSEFfU1gxNjQgfHwgQUxQSEFfTkFVVElMVVMgfHwgQUxQSEFfTk9OQU1FCiAJZGVmYXVsdCB5IGlmIEFMUEhBX0pFTlNFTiB8fCBBTFBIQV9NSUtBU0EgfHwgQUxQSEFfU0FCTEUgfHwgQUxQSEFfTFlOWCB8fCBBTFBIQV9OT1JJVEFLRSB8fCBBTFBIQV9EUDI2NCB8fCBBTFBIQV9SQVdISURFIHx8IEFMUEhBX0VJR0VSIHx8IEFMUEhBX1dJTERGSVJFIHx8IEFMUEhBX1RJVEFOIHx8IEFMUEhBX1NIQVJLIHx8IEFMUEhBX01BUlZFTApAQCAtNTM3LDEwICs1NDQsMTQgQEAKIAlkZWZhdWx0IHkKIAogY29uZmlnIE5SX0NQVVMKLQlpbnQgIk1heGltdW0gbnVtYmVyIG9mIENQVXMgKDItNjQpIgotCXJhbmdlIDIgNjQKKwlpbnQgIk1heGltdW0gbnVtYmVyIG9mIENQVXMgKDItMzIpIgorCXJhbmdlIDIgMzIKIAlkZXBlbmRzIG9uIFNNUAotCWRlZmF1bHQgIjY0IgorCWRlZmF1bHQgIjMyIiBpZiBBTFBIQV9HRU5FUklDIHx8IEFMUEhBX01BUlZFTAorCWRlZmF1bHQgIjQiIGlmICFBTFBIQV9HRU5FUklDICYmICFBTFBIQV9NQVJWRUwKKwloZWxwCisJICBNQVJWRUwgc3VwcG9ydCBjYW4gaGFuZGxlIGEgbWF4aW11bSBvZiAzMiBDUFVzLCBhbGwgdGhlIG90aGVycworICAgICAgICAgIHdpdGggd29ya2luZyBzdXBwb3J0IGhhdmUgYSBtYXhpbXVtIG9mIDQgQ1BVcy4KIAogY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQogCWJvb2wgIkRpc2NvbnRpZ3VvdXMgTWVtb3J5IFN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCkBAIC02NDQsNiArNjU1LDEzIEBACiAKIHNvdXJjZSAiYXJjaC9hbHBoYS9LY29uZmlnLmRlYnVnIgogCisjIERVTU1ZX0NPTlNPTEUgbWF5IGJlIGRlZmluZWQgaW4gZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKKyMgYnV0IHdlIGFsc28gbmVlZCBpdCBpZiBWR0FfSE9TRSBpcyBzZXQKK2NvbmZpZyBEVU1NWV9DT05TT0xFCisJYm9vbAorCWRlcGVuZHMgb24gVkdBX0hPU0UKKwlkZWZhdWx0IHkKKwogc291cmNlICJzZWN1cml0eS9LY29uZmlnIgogCiBzb3VyY2UgImNyeXB0by9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnLmRlYnVnIGIvYXJjaC9hbHBoYS9LY29uZmlnLmRlYnVnCmluZGV4IDM2ZDAxMDYuLmY0NWYyOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2FscGhhL0tjb25maWcuZGVidWcKQEAgLTE2LDE0ICsxNiw2IEBACiAJICB0b28gbWFueSBhdHRlbXB0cy4gIElmIHlvdSBzdXNwZWN0IGEgcndsb2NrIHByb2JsZW0gb3IgYSBrZXJuZWwKIAkgIGhhY2tlciBhc2tzIGZvciB0aGlzIG9wdGlvbiB0aGVuIHNheSBZLiAgT3RoZXJ3aXNlIHNheSBOLgogCi1jb25maWcgREVCVUdfU0VNQVBIT1JFCi0JYm9vbCAiU2VtYXBob3JlIGRlYnVnZ2luZyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlIHRoZW4gc2VtYXBob3JlIHByb2Nlc3Npbmcgd2lsbCBpc3N1ZSBsb3RzIG9mCi0JICB2ZXJib3NlIGRlYnVnZ2luZyBtZXNzYWdlcy4gIElmIHlvdSBzdXNwZWN0IGEgc2VtYXBob3JlIHByb2JsZW0gb3IgYQotCSAga2VybmVsIGhhY2tlciBhc2tzIGZvciB0aGlzIG9wdGlvbiB0aGVuIHNheSBZLiAgT3RoZXJ3aXNlIHNheSBOLgotCiBjb25maWcgQUxQSEFfTEVHQUNZX1NUQVJUX0FERFJFU1MKIAlib29sICJMZWdhY3kga2VybmVsIHN0YXJ0IGFkZHJlc3MiCiAJZGVwZW5kcyBvbiBBTFBIQV9HRU5FUklDCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2Jvb3QvdG9vbHMvbWtiYi5jIGIvYXJjaC9hbHBoYS9ib290L3Rvb2xzL21rYmIuYwppbmRleCAyM2M3MTkwLi42MzJhN2ZkIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2Jvb3QvdG9vbHMvbWtiYi5jCisrKyBiL2FyY2gvYWxwaGEvYm9vdC90b29scy9ta2JiLmMKQEAgLTgxLDcgKzgxLDcgQEAKICNkZWZpbmUJYm9vdGJsb2NrX2xhYmVsCQlfX3UxLl9fbGFiZWwKICNkZWZpbmUgYm9vdGJsb2NrX2NoZWNrc3VtCV9fdTIuX19jaGVja3N1bQogCi1tYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KQogewogICAgIGJvb3RibG9jawkJYm9vdGJsb2NrX2Zyb21fZGlzazsKICAgICBib290YmxvY2sJCWJvb3Rsb2FkZXJfaW1hZ2U7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9jb25zb2xlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9jb25zb2xlLmMKaW5kZXggZjMxM2IzNC4uZGE3MTFlMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvY29uc29sZS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2NvbnNvbGUuYwpAQCAtOSwxNiArOSwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvdnQuaD4KICNpbmNsdWRlIDxhc20vdmdhLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KIAorI2luY2x1ZGUgInBjaV9pbXBsLmgiCisKICNpZmRlZiBDT05GSUdfVkdBX0hPU0UKIAotLyoKLSAqIEV4dGVybmFsbHktdmlzaWJsZSB2Z2EgaG9zZSBiYXNlcwotICovCi11bnNpZ25lZCBsb25nIF9fdmdhX2hvc2VfaW9fYmFzZSA9IDA7CS8qIGJhc2UgZm9yIGRlZmF1bHQgaG9zZSAqLwotdW5zaWduZWQgbG9uZyBfX3ZnYV9ob3NlX21lbV9iYXNlID0gMDsJLyogYmFzZSBmb3IgZGVmYXVsdCBob3NlICovCitzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBjaV92Z2FfaG9zZTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWxwaGFfdmdhID0geworCS5uYW1lCT0gImFscGhhLXZnYSsiLAorCS5zdGFydAk9IDB4M0MwLAorCS5lbmQJPSAweDNERgorfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciAqIF9faW5pdCAKIGRlZmF1bHRfdmdhX2hvc2Vfc2VsZWN0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaDEsIHN0cnVjdCBwY2lfY29udHJvbGxlciAqaDIpCkBAIC0zMCwzNiArMzQsNTggQEAKIH0KIAogdm9pZCBfX2luaXQgCi1zZXRfdmdhX2hvc2Uoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCWlmIChob3NlKSB7Ci0JCV9fdmdhX2hvc2VfaW9fYmFzZSA9IGhvc2UtPmlvX3NwYWNlLT5zdGFydDsKLQkJX192Z2FfaG9zZV9tZW1fYmFzZSA9IGhvc2UtPm1lbV9zcGFjZS0+c3RhcnQ7Ci0JfQotfQotCi12b2lkIF9faW5pdCAKIGxvY2F0ZV9hbmRfaW5pdF92Z2Eodm9pZCAqKCpzZWxfZnVuYykodm9pZCAqLCB2b2lkICopKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IE5VTEw7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CiAKKwkvKiBEZWZhdWx0IHRoZSBzZWxlY3QgZnVuY3Rpb24gKi8KIAlpZiAoIXNlbF9mdW5jKSBzZWxfZnVuYyA9ICh2b2lkICopZGVmYXVsdF92Z2FfaG9zZV9zZWxlY3Q7CiAKKwkvKiBGaW5kIHRoZSBjb25zb2xlIFZHQSBkZXZpY2UgKi8KIAlmb3IoZGV2PU5VTEw7IChkZXY9cGNpX2dldF9jbGFzcyhQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgZGV2KSk7KSB7Ci0JCWlmICghaG9zZSkgaG9zZSA9IGRldi0+c3lzZGF0YTsKLQkJZWxzZSBob3NlID0gc2VsX2Z1bmMoaG9zZSwgZGV2LT5zeXNkYXRhKTsKKwkJaWYgKCFob3NlKQorCQkJaG9zZSA9IGRldi0+c3lzZGF0YTsKKwkJZWxzZQorCQkJaG9zZSA9IHNlbF9mdW5jKGhvc2UsIGRldi0+c3lzZGF0YSk7CiAJfQogCi0JLyogRGlkIHdlIGFscmVhZHkgaW5pdGl0aWFsaXplIHRoZSBjb3JyZWN0IG9uZT8gKi8KLQlpZiAoY29uc3dpdGNocCA9PSAmdmdhX2NvbiAmJgotCSAgICBfX3ZnYV9ob3NlX2lvX2Jhc2UgPT0gaG9zZS0+aW9fc3BhY2UtPnN0YXJ0ICYmCi0JICAgIF9fdmdhX2hvc2VfbWVtX2Jhc2UgPT0gaG9zZS0+bWVtX3NwYWNlLT5zdGFydCkKKwkvKiBEaWQgd2UgYWxyZWFkeSBpbml0aWFsaXplIHRoZSBjb3JyZWN0IG9uZT8gSXMgdGhlcmUgb25lPyAqLworCWlmICghaG9zZSB8fCAoY29uc3dpdGNocCA9PSAmdmdhX2NvbiAmJiBwY2lfdmdhX2hvc2UgPT0gaG9zZSkpCiAJCXJldHVybjsKIAotCS8qIFNldCB0aGUgVkdBIGhvc2UgYW5kIGluaXQgdGhlIG5ldyBjb25zb2xlICovCi0Jc2V0X3ZnYV9ob3NlKGhvc2UpOworCS8qIENyZWF0ZSBhIG5ldyBWR0EgaW9wb3J0IHJlc291cmNlIFdSVCB0aGUgaG9zZSBpdCBpcyBvbi4gKi8KKwlhbHBoYV92Z2Euc3RhcnQgKz0gaG9zZS0+aW9fc3BhY2UtPnN0YXJ0OworCWFscGhhX3ZnYS5lbmQgKz0gaG9zZS0+aW9fc3BhY2UtPnN0YXJ0OworCXJlcXVlc3RfcmVzb3VyY2UoaG9zZS0+aW9fc3BhY2UsICZhbHBoYV92Z2EpOworCisJLyogU2V0IHRoZSBWR0EgaG9zZSBhbmQgaW5pdCB0aGUgbmV3IGNvbnNvbGUuICovCisJcGNpX3ZnYV9ob3NlID0gaG9zZTsKIAl0YWtlX292ZXJfY29uc29sZSgmdmdhX2NvbiwgMCwgTUFYX05SX0NPTlNPTEVTLTEsIDEpOwogfQogCit2b2lkIF9faW5pdAorZmluZF9jb25zb2xlX3ZnYV9ob3NlKHZvaWQpCit7CisJdTY0ICpwdTY0ID0gKHU2NCAqKSgodTY0KWh3cnBiICsgaHdycGItPmN0YnRfb2Zmc2V0KTsKKworCWlmIChwdTY0WzddID09IDMpIHsJLyogVEVSTV9UWVBFID09IGdyYXBoaWNzICovCisJCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKKwkJaW50IGggPSAocHU2NFszMF0gPj4gMjQpICYgMHhmZjsJLyogY29uc29sZSBob3NlICMgKi8KKworCQkvKgorCQkgKiBPdXIgaG9zZSBudW1iZXJpbmcgRE9FUyBtYXRjaCB0aGUgY29uc29sZSdzLCBzbyBmaW5kCisJCSAqIHRoZSByaWdodCBvbmUuLi4KKwkJICovCisJCWZvciAoaG9zZSA9IGhvc2VfaGVhZDsgaG9zZTsgaG9zZSA9IGhvc2UtPm5leHQpIHsKKwkJCWlmIChob3NlLT5pbmRleCA9PSBoKSBicmVhazsKKwkJfQorCisJCWlmIChob3NlKSB7CisJCQlwcmludGsoIkNvbnNvbGUgZ3JhcGhpY3Mgb24gaG9zZSAlZFxuIiwgaCk7CisJCQlwY2lfdmdhX2hvc2UgPSBob3NlOworCQl9CisJfQorfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jCmluZGV4IDdmNmE5ODQuLmYxMGQyZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgorI2luY2x1ZGUgPGFzbS92Z2EuaD4KIAogI2luY2x1ZGUgInByb3RvLmgiCiAjaW5jbHVkZSAicGNpX2ltcGwuaCIKQEAgLTM2Nyw5ICszNjgsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQKLW1hcnZlbF9pbml0X3ZnYV9ob3NlKHZvaWQpCittYXJ2ZWxfZmluZF9jb25zb2xlX3ZnYV9ob3NlKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1ZHQV9IT1NFCiAJdTY0ICpwdTY0ID0gKHU2NCAqKSgodTY0KWh3cnBiICsgaHdycGItPmN0YnRfb2Zmc2V0KTsKIAogCWlmIChwdTY0WzddID09IDMpIHsJLyogVEVSTV9UWVBFID09IGdyYXBoaWNzICovCkBAIC00MDMsNyArNDAzLDYgQEAKIAkJCXBjaV92Z2FfaG9zZSA9IGhvc2U7CiAJCX0KIAl9Ci0jZW5kaWYgLyogQ09ORklHX1ZHQV9IT1NFICovCiB9CiAKIGdjdDZfc2VhcmNoX3N0cnVjdCBnY3Rfd2FudGVkX25vZGVfbGlzdFtdID0gewpAQCAtNDU5LDcgKzQ1OCw3IEBACiAJCW1hcnZlbF9pbml0X2lvNyhpbzcpOwogCiAJLyogQ2hlY2sgZm9yIGdyYXBoaWMgY29uc29sZSBsb2NhdGlvbiAoaWYgYW55KS4gICovCi0JbWFydmVsX2luaXRfdmdhX2hvc2UoKTsKKwltYXJ2ZWxfZmluZF9jb25zb2xlX3ZnYV9ob3NlKCk7CiB9CiAKIHZvaWQKQEAgLTY4NCw5ICs2ODMsNiBAQAogLyoKICAqIElPIG1hcCBzdXBwb3J0LgogICovCi0KLSNkZWZpbmUgX19tYXJ2ZWxfaXNfbWVtX3ZnYShhKQkoKChhKSA+PSAweGEwMDAwKSAmJiAoKGEpIDw9IDB4YzAwMDApKQotCiB2b2lkIF9faW9tZW0gKgogbWFydmVsX2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CkBAIC02OTgsMTMgKzY5NCw5IEBACiAJdW5zaWduZWQgbG9uZyBwZm47CiAKIAkvKgotCSAqIEFkanVzdCB0aGUgYWRkci4KKwkgKiBBZGp1c3QgdGhlIGFkZHJlc3MuCiAJICovIAotI2lmZGVmIENPTkZJR19WR0FfSE9TRQotCWlmIChwY2lfdmdhX2hvc2UgJiYgX19tYXJ2ZWxfaXNfbWVtX3ZnYShhZGRyKSkgewotCQlhZGRyICs9IHBjaV92Z2FfaG9zZS0+bWVtX3NwYWNlLT5zdGFydDsKLQl9Ci0jZW5kaWYKKwlGSVhVUF9NRU1BRERSX1ZHQShhZGRyKTsKIAogCS8qCiAJICogRmluZCB0aGUgaG9zZS4KQEAgLTc4MSw3ICs3NzMsOSBAQAogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSB2YWRkcjsKIAl9CiAKLQlyZXR1cm4gTlVMTDsKKwkvKiBBc3N1bWUgaXQgd2FzIGFscmVhZHkgYSByZWFzb25hYmxlIGFkZHJlc3MgKi8KKwl2YWRkciA9IGJhZGRyICsgaG9zZS0+bWVtX3NwYWNlLT5zdGFydDsKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSB2YWRkcjsKIH0KIAogdm9pZApAQCAtODAzLDIxICs3OTcsMTIgQEAKIAkJcmV0dXJuIChhZGRyICYgMHhGRjAwMDAwMFVMKSA9PSAwOwogfQogCi0jZGVmaW5lIF9fbWFydmVsX2lzX3BvcnRfdmdhKGEpCVwKLSAgKCgoYSkgPj0gMHgzYjApICYmICgoYSkgPCAweDNlMCkgJiYgKChhKSAhPSAweDNiMykgJiYgKChhKSAhPSAweDNkMykpCiAjZGVmaW5lIF9fbWFydmVsX2lzX3BvcnRfa2JkKGEpCSgoKGEpID09IDB4NjApIHx8ICgoYSkgPT0gMHg2NCkpCiAjZGVmaW5lIF9fbWFydmVsX2lzX3BvcnRfcnRjKGEpCSgoKGEpID09IDB4NzApIHx8ICgoYSkgPT0gMHg3MSkpCiAKIHZvaWQgX19pb21lbSAqbWFydmVsX2lvcG9ydG1hcCAodW5zaWduZWQgbG9uZyBhZGRyKQogewotCWlmIChfX21hcnZlbF9pc19wb3J0X3J0YyAoYWRkcikgfHwgX19tYXJ2ZWxfaXNfcG9ydF9rYmQoYWRkcikpCi0JCTsKLSNpZmRlZiBDT05GSUdfVkdBX0hPU0UKLQllbHNlIGlmIChfX21hcnZlbF9pc19wb3J0X3ZnYSAoYWRkcikgJiYgcGNpX3ZnYV9ob3NlKQotCQlhZGRyICs9IHBjaV92Z2FfaG9zZS0+aW9fc3BhY2UtPnN0YXJ0OwotI2VuZGlmCi0JZWxzZQotCQlyZXR1cm4gTlVMTDsKKwlGSVhVUF9JT0FERFJfVkdBKGFkZHIpOwogCXJldHVybiAodm9pZCBfX2lvbWVtICopYWRkcjsKIH0KIApAQCAtODI5LDggKzgxNCwxNCBAQAogCQlyZXR1cm4gMDsKIAllbHNlIGlmIChfX21hcnZlbF9pc19wb3J0X3J0YyhhZGRyKSkKIAkJcmV0dXJuIF9fbWFydmVsX3J0Y19pbygwLCBhZGRyLCAwKTsKLQllbHNlCisJZWxzZSBpZiAobWFydmVsX2lzX2lvYWRkcihhZGRyKSkKIAkJcmV0dXJuIF9fa2VybmVsX2xkYnUoKih2dWNwKWFkZHIpOworCWVsc2UKKwkJLyogdGhpcyBzaG91bGQgY2F0Y2ggb3RoZXIgbGVnYWN5IGFkZHJlc3NlcworCQkgICB0aGF0IHdvdWxkIG5vcm1hbGx5IGZhaWwgb24gTUFSVkVMLAorCQkgICBiZWNhdXNlIHRoZXJlIHJlYWxseSBpcyBub3RoaW5nIHRoZXJlLi4uCisJCSovCisJCXJldHVybiB+MDsKIH0KIAogdm9pZApAQCAtODQxLDcgKzgzMiw3IEBACiAJCXJldHVybjsKIAllbHNlIGlmIChfX21hcnZlbF9pc19wb3J0X3J0YyhhZGRyKSkgCiAJCV9fbWFydmVsX3J0Y19pbyhiLCBhZGRyLCAxKTsKLQllbHNlCisJZWxzZSBpZiAobWFydmVsX2lzX2lvYWRkcihhZGRyKSkKIAkJX19rZXJuZWxfc3RiKGIsICoodnVjcClhZGRyKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jCmluZGV4IDM2NjJmZWYuLjgxOTMyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdmdhLmg+CiAKICNpbmNsdWRlICJwcm90by5oIgogI2luY2x1ZGUgInBjaV9pbXBsLmgiCkBAIC0zNSw2ICszNiwxMSBAQAogfSBzYXZlZF9jb25maWdbNF0gX19hdHRyaWJ1dGVfXygoY29tbW9uKSk7CiAKIC8qCisgKiBJcyBQQ2hpcCAxIHByZXNlbnQ/IE5vIG5lZWQgdG8gcXVlcnkgaXQgbW9yZSB0aGFuIG9uY2UuCisgKi8KK3N0YXRpYyBpbnQgdGl0YW5fcGNoaXAxX3ByZXNlbnQ7CisKKy8qCiAgKiBCSU9TMzItc3R5bGUgUENJIGludGVyZmFjZToKICAqLwogCkBAIC0zNDQsNDMgKzM1MCwxNyBAQAogc3RhdGljIHZvaWQgX19pbml0CiB0aXRhbl9pbml0X3BhY2hpcHModGl0YW5fcGFjaGlwICpwYWNoaXAwLCB0aXRhbl9wYWNoaXAgKnBhY2hpcDEpCiB7Ci0JaW50IHBjaGlwMV9wcmVzZW50ID0gVElUQU5fY2NoaXAtPmNzYy5jc3IgJiAxTDw8MTQ7CisJdGl0YW5fcGNoaXAxX3ByZXNlbnQgPSBUSVRBTl9jY2hpcC0+Y3NjLmNzciAmIDFMPDwxNDsKIAogCS8qIEluaXQgdGhlIHBvcnRzIGluIGhvc2Ugb3JkZXIuLi4gKi8KIAl0aXRhbl9pbml0X29uZV9wYWNoaXBfcG9ydCgmcGFjaGlwMC0+Z19wb3J0LCAwKTsJLyogaG9zZSAwICovCi0JaWYgKHBjaGlwMV9wcmVzZW50KQorCWlmICh0aXRhbl9wY2hpcDFfcHJlc2VudCkKIAkJdGl0YW5faW5pdF9vbmVfcGFjaGlwX3BvcnQoJnBhY2hpcDEtPmdfcG9ydCwgMSk7LyogaG9zZSAxICovCiAJdGl0YW5faW5pdF9vbmVfcGFjaGlwX3BvcnQoJnBhY2hpcDAtPmFfcG9ydCwgMik7CS8qIGhvc2UgMiAqLwotCWlmIChwY2hpcDFfcHJlc2VudCkKKwlpZiAodGl0YW5fcGNoaXAxX3ByZXNlbnQpCiAJCXRpdGFuX2luaXRfb25lX3BhY2hpcF9wb3J0KCZwYWNoaXAxLT5hX3BvcnQsIDMpOy8qIGhvc2UgMyAqLwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQKLXRpdGFuX2luaXRfdmdhX2hvc2Uodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfVkdBX0hPU0UKLQl1NjQgKnB1NjQgPSAodTY0ICopKCh1NjQpaHdycGIgKyBod3JwYi0+Y3RidF9vZmZzZXQpOwotCi0JaWYgKHB1NjRbN10gPT0gMykgewkvKiBURVJNX1RZUEUgPT0gZ3JhcGhpY3MgKi8KLQkJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCQlpbnQgaCA9IChwdTY0WzMwXSA+PiAyNCkgJiAweGZmOwkvKiBjb25zb2xlIGhvc2UgIyAqLwotCi0JCS8qCi0JCSAqIE91ciBob3NlIG51bWJlcmluZyBtYXRjaGVzIHRoZSBjb25zb2xlJ3MsIHNvIGp1c3QgZmluZAotCQkgKiB0aGUgcmlnaHQgb25lLi4uCi0JCSAqLwotCQlmb3IgKGhvc2UgPSBob3NlX2hlYWQ7IGhvc2U7IGhvc2UgPSBob3NlLT5uZXh0KSB7Ci0JCQlpZiAoaG9zZS0+aW5kZXggPT0gaCkgYnJlYWs7Ci0JCX0KLQotCQlpZiAoaG9zZSkgewotCQkJcHJpbnRrKCJDb25zb2xlIGdyYXBoaWNzIG9uIGhvc2UgJWRcbiIsIGhvc2UtPmluZGV4KTsKLQkJCXBjaV92Z2FfaG9zZSA9IGhvc2U7Ci0JCX0KLQl9Ci0jZW5kaWYgLyogQ09ORklHX1ZHQV9IT1NFICovCi19Ci0KIHZvaWQgX19pbml0CiB0aXRhbl9pbml0X2FyY2godm9pZCkKIHsKQEAgLTQwNiw2ICszODYsNyBAQAogCiAJLyogV2l0aCBtdWx0aXBsZSBQQ0kgYnVzc2VzLCB3ZSBwbGF5IHdpdGggSS9PIGFzIHBoeXNpY2FsIGFkZHJzLiAgKi8KIAlpb3BvcnRfcmVzb3VyY2UuZW5kID0gfjBVTDsKKwlpb21lbV9yZXNvdXJjZS5lbmQgPSB+MFVMOwogCiAJLyogUENJIERNQSBEaXJlY3QgTWFwcGluZyBpcyAxR0IgYXQgMkdCLiAgKi8KIAlfX2RpcmVjdF9tYXBfYmFzZSA9IDB4ODAwMDAwMDA7CkBAIC00MTUsNyArMzk2LDcgQEAKIAl0aXRhbl9pbml0X3BhY2hpcHMoVElUQU5fcGFjaGlwMCwgVElUQU5fcGFjaGlwMSk7CiAKIAkvKiBDaGVjayBmb3IgZ3JhcGhpYyBjb25zb2xlIGxvY2F0aW9uIChpZiBhbnkpLiAgKi8KLQl0aXRhbl9pbml0X3ZnYV9ob3NlKCk7CisJZmluZF9jb25zb2xlX3ZnYV9ob3NlKCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00NDEsOSArNDIyLDcgQEAKIHN0YXRpYyB2b2lkCiB0aXRhbl9raWxsX3BhY2hpcHModGl0YW5fcGFjaGlwICpwYWNoaXAwLCB0aXRhbl9wYWNoaXAgKnBhY2hpcDEpCiB7Ci0JaW50IHBjaGlwMV9wcmVzZW50ID0gVElUQU5fY2NoaXAtPmNzYy5jc3IgJiAxTDw8MTQ7Ci0KLQlpZiAocGNoaXAxX3ByZXNlbnQpIHsKKwlpZiAodGl0YW5fcGNoaXAxX3ByZXNlbnQpIHsKIAkJdGl0YW5fa2lsbF9vbmVfcGFjaGlwX3BvcnQoJnBhY2hpcDEtPmdfcG9ydCwgMSk7CiAJCXRpdGFuX2tpbGxfb25lX3BhY2hpcF9wb3J0KCZwYWNoaXAxLT5hX3BvcnQsIDMpOwogCX0KQEAgLTQ2Myw2ICs0NDIsMTQgQEAKICAqLwogCiB2b2lkIF9faW9tZW0gKgordGl0YW5faW9wb3J0bWFwKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlGSVhVUF9JT0FERFJfVkdBKGFkZHIpOworCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBUSVRBTl9JT19CSUFTKTsKK30KKworCit2b2lkIF9faW9tZW0gKgogdGl0YW5faW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpbnQgaCA9IChhZGRyICYgVElUQU5fSE9TRV9NQVNLKSA+PiBUSVRBTl9IT1NFX1NISUZUOwpAQCAtNDc1LDE0ICs0NjIsMTIgQEAKIAl1bnNpZ25lZCBsb25nIHBmbjsKIAogCS8qCi0JICogQWRqdXN0IHRoZSBhZGRyLgorCSAqIEFkanVzdCB0aGUgYWRkcmVzcyBhbmQgaG9zZSwgaWYgbmVjZXNzYXJ5LgogCSAqLyAKLSNpZmRlZiBDT05GSUdfVkdBX0hPU0UKLQlpZiAocGNpX3ZnYV9ob3NlICYmIF9fdGl0YW5faXNfbWVtX3ZnYShhZGRyKSkgeworCWlmIChwY2lfdmdhX2hvc2UgJiYgX19pc19tZW1fdmdhKGFkZHIpKSB7CiAJCWggPSBwY2lfdmdhX2hvc2UtPmluZGV4OwogCQlhZGRyICs9IHBjaV92Z2FfaG9zZS0+bWVtX3NwYWNlLT5zdGFydDsKIAl9Ci0jZW5kaWYKIAogCS8qCiAJICogRmluZCB0aGUgaG9zZS4KQEAgLTUyMSw4ICs1MDYsMTAgQEAKIAkJICogTWFwIGl0CiAJCSAqLwogCQlhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fSU9SRU1BUCk7Ci0JCWlmICghYXJlYSkKKwkJaWYgKCFhcmVhKSB7CisJCQlwcmludGsoImlvcmVtYXAgZmFpbGVkLi4uIG5vIHZtX2FyZWEuLi5cbiIpOwogCQkJcmV0dXJuIE5VTEw7CisJCX0KIAogCQlwdGVzID0gaG9zZS0+c2dfcGNpLT5wdGVzOwogCQlmb3IgKHZhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsgCkBAIC01MzksNyArNTI2LDcgQEAKIAkJCWlmIChfX2FscGhhX3JlbWFwX2FyZWFfcGFnZXModmFkZHIsCiAJCQkJCQkgICAgIHBmbiA8PCBQQUdFX1NISUZULCAKIAkJCQkJCSAgICAgUEFHRV9TSVpFLCAwKSkgewotCQkJCXByaW50aygiRkFJTEVEIHRvIG1hcC4uLlxuIik7CisJCQkJcHJpbnRrKCJGQUlMRUQgdG8gcmVtYXBfYXJlYV9wYWdlcy4uLlxuIik7CiAJCQkJdmZyZWUoYXJlYS0+YWRkcik7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CkBAIC01NTEsNyArNTM4LDggQEAKIAkJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgdmFkZHI7CiAJfQogCi0JcmV0dXJuIE5VTEw7CisJLyogQXNzdW1lIGEgbGVnYWN5IChyZWFkOiBWR0EpIGFkZHJlc3MsIGFuZCByZXR1cm4gYXBwcm9wcmlhdGVseS4gKi8KKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgVElUQU5fTUVNX0JJQVMpOwogfQogCiB2b2lkCkBAIC01NzQsNiArNTYyLDcgQEAKIH0KIAogI2lmbmRlZiBDT05GSUdfQUxQSEFfR0VORVJJQworRVhQT1JUX1NZTUJPTCh0aXRhbl9pb3BvcnRtYXApOwogRVhQT1JUX1NZTUJPTCh0aXRhbl9pb3JlbWFwKTsKIEVYUE9SVF9TWU1CT0wodGl0YW5faW91bm1hcCk7CiBFWFBPUlRfU1lNQk9MKHRpdGFuX2lzX21taW8pOwpAQCAtNzUwLDYgKzczOSw3IEBACiAJaWYgKHRpdGFuX3F1ZXJ5X2FncChwb3J0KSkKIAkJaG9zZW51bSA9IDI7CiAJaWYgKGhvc2VudW0gPCAwICYmIAorCSAgICB0aXRhbl9wY2hpcDFfcHJlc2VudCAmJgogCSAgICB0aXRhbl9xdWVyeV9hZ3AocG9ydCA9ICZUSVRBTl9wYWNoaXAxLT5hX3BvcnQpKSAKIAkJaG9zZW51bSA9IDM7CiAJCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RzdW5hbWkuYyBiL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfdHN1bmFtaS5jCmluZGV4IGNlNjIzYzYuLmVmOTFlMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfdHN1bmFtaS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfdHN1bmFtaS5jCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS92Z2EuaD4KIAogI2luY2x1ZGUgInByb3RvLmgiCiAjaW5jbHVkZSAicGNpX2ltcGwuaCIKQEAgLTM0OSw2ICszNTAsMjYgQEAKIAl0c3VuYW1pX3BjaV90YmkoaG9zZSwgMCwgLTEpOwogfQogCisKK3ZvaWQgX19pb21lbSAqCit0c3VuYW1pX2lvcG9ydG1hcCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJRklYVVBfSU9BRERSX1ZHQShhZGRyKTsKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgVFNVTkFNSV9JT19CSUFTKTsKK30KKwordm9pZCBfX2lvbWVtICoKK3RzdW5hbWlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlGSVhVUF9NRU1BRERSX1ZHQShhZGRyKTsKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgVFNVTkFNSV9NRU1fQklBUyk7Cit9CisKKyNpZm5kZWYgQ09ORklHX0FMUEhBX0dFTkVSSUMKK0VYUE9SVF9TWU1CT0wodHN1bmFtaV9pb3BvcnRtYXApOworRVhQT1JUX1NZTUJPTCh0c3VuYW1pX2lvcmVtYXApOworI2VuZGlmCisKIHZvaWQgX19pbml0CiB0c3VuYW1pX2luaXRfYXJjaCh2b2lkKQogewpAQCAtMzkzLDYgKzQxNCw5IEBACiAJdHN1bmFtaV9pbml0X29uZV9wY2hpcChUU1VOQU1JX3BjaGlwMCwgMCk7CiAJaWYgKFRTVU5BTUlfY2NoaXAtPmNzYy5jc3IgJiAxTDw8MTQpCiAJCXRzdW5hbWlfaW5pdF9vbmVfcGNoaXAoVFNVTkFNSV9wY2hpcDEsIDEpOworCisJLyogQ2hlY2sgZm9yIGdyYXBoaWMgY29uc29sZSBsb2NhdGlvbiAoaWYgYW55KS4gICovCisJZmluZF9jb25zb2xlX3ZnYV9ob3NlKCk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUwppbmRleCBjOTVlOTVlLi5kZWJjOGYwIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2VudHJ5LlMKQEAgLTM5MSwxMSArMzkxLDEwIEBACiAJYm5lCSQyLCAkd29ya19yZXNjaGVkCiAKICR3b3JrX25vdGlmeXNpZzoKLQltb3YJJHNwLCAkMTcKKwltb3YJJHNwLCAkMTYKIAlicgkkMSwgZG9fc3dpdGNoX3N0YWNrCi0JbW92CSQ1LCAkMjEKLQltb3YJJHNwLCAkMTgKLQltb3YJJDMxLCAkMTYKKwltb3YJJHNwLCAkMTcKKwltb3YJJDUsICQxOAogCWpzcgkkMjYsIGRvX25vdGlmeV9yZXN1bWUKIAlic3IJJDEsIHVuZG9fc3dpdGNoX3N0YWNrCiAJYnIJcmVzdG9yZV9hbGwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwppbmRleCBlYTQwNWY1Li5jZTg1NzE1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCkBAIC05NTMsMTUgKzk1MywyNSBAQAogYXNtbGlua2FnZSBpbnQKIG9zZl91dGltZXMoY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBzdHJ1Y3QgdGltZXZhbDMyIF9fdXNlciAqdHZzKQogewotCXN0cnVjdCB0aW1ldmFsIGt0dnNbMl07CisJc3RydWN0IHRpbWVzcGVjIHR2WzJdOwogCiAJaWYgKHR2cykgeworCQlzdHJ1Y3QgdGltZXZhbCBrdHZzWzJdOwogCQlpZiAoZ2V0X3R2MzIoJmt0dnNbMF0sICZ0dnNbMF0pIHx8CiAJCSAgICBnZXRfdHYzMigma3R2c1sxXSwgJnR2c1sxXSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoa3R2c1swXS50dl91c2VjIDwgMCB8fCBrdHZzWzBdLnR2X3VzZWMgPj0gMTAwMDAwMCB8fAorCQkgICAga3R2c1sxXS50dl91c2VjIDwgMCB8fCBrdHZzWzFdLnR2X3VzZWMgPj0gMTAwMDAwMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXR2WzBdLnR2X3NlYyA9IGt0dnNbMF0udHZfc2VjOworCQl0dlswXS50dl9uc2VjID0gMTAwMCAqIGt0dnNbMF0udHZfdXNlYzsKKwkJdHZbMV0udHZfc2VjID0ga3R2c1sxXS50dl9zZWM7CisJCXR2WzFdLnR2X25zZWMgPSAxMDAwICoga3R2c1sxXS50dl91c2VjOwogCX0KIAotCXJldHVybiBkb191dGltZXMoQVRfRkRDV0QsIGZpbGVuYW1lLCB0dnMgPyBrdHZzIDogTlVMTCk7CisJcmV0dXJuIGRvX3V0aW1lcyhBVF9GRENXRCwgZmlsZW5hbWUsIHR2cyA/IHR2IDogTlVMTCwgMCk7CiB9CiAKICNkZWZpbmUgTUFYX1NFTEVDVF9TRUNPTkRTIFwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKaW5kZXggNmU3ZDFmZS4uMjhjODRlNSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaHdycGIuaD4KQEAgLTUzLDcgKzU0LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG1lbSA9IG1heF9sb3dfcGZuIDw8IFBBR0VfU0hJRlQ7CiAJaWYgKG1lbSA8IG1heCkKLQkJbWF4ID0gMVVMIDw8IGNlaWxfbG9nMihtZW0pOworCQltYXggPSByb3VuZHVwX3Bvd19vZl90d28obWVtKTsKIAlyZXR1cm4gbWF4OwogfQogDApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGMxNTE4NjMuLjkyYjYxNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wcm90by5oIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHJvdG8uaAppbmRleCA5NTkxMmVjLi43MDhkNWNhIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wcm90by5oCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb3RvLmgKQEAgLTEwOCw2ICsxMDgsMTUgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHdpbGRmaXJlX25vZGVfbWVtX3N0YXJ0KGludCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB3aWxkZmlyZV9ub2RlX21lbV9zaXplKGludCk7CiAKKy8qIGNvbnNvbGUuYyAqLworI2lmZGVmIENPTkZJR19WR0FfSE9TRQorZXh0ZXJuIHZvaWQgZmluZF9jb25zb2xlX3ZnYV9ob3NlKHZvaWQpOworZXh0ZXJuIHZvaWQgbG9jYXRlX2FuZF9pbml0X3ZnYSh2b2lkICooKikodm9pZCAqLCB2b2lkICopKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZmluZF9jb25zb2xlX3ZnYV9ob3NlKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGxvY2F0ZV9hbmRfaW5pdF92Z2Eodm9pZCAqKCpzZWxfZnVuYykodm9pZCAqLCB2b2lkICopKSB7IH0KKyNlbmRpZgorCiAvKiBzZXR1cC5jICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBzcm1faGFlOwogZXh0ZXJuIGludCBib290X2NwdWlkOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMKaW5kZXggZDM1MmMyYi4uYmQ1ZTY4YyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAKIGV4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgcGFuaWNfbm90aWZpZXJfbGlzdDsKIHN0YXRpYyBpbnQgYWxwaGFfcGFuaWNfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CkBAIC03NDQsMTUgKzc0NSw2IEBACiAJcGFnaW5nX2luaXQoKTsKIH0KIAotdm9pZCBfX2luaXQKLWRpc2FibGVfZWFybHlfcHJpbnRrKHZvaWQpCi17Ci0JaWYgKGFscGhhX3VzaW5nX3NybSAmJiBzcm1jb25zX291dHB1dCkgewotCQl1bnJlZ2lzdGVyX3NybV9jb25zb2xlKCk7Ci0JCXNybWNvbnNfb3V0cHV0ID0gMDsKLQl9Ci19Ci0KIHN0YXRpYyBjaGFyIHN5c191bmtub3duW10gPSAiVW5rbm93biI7CiBzdGF0aWMgY2hhciBzeXN0eXBlX25hbWVzW11bMTZdID0gewogCSIwIiwKQEAgLTEzMTIsNyArMTMwNCw3IEBACiAJbG9uZyBzaXplID0gbWluc2l6ZSwgbWF4c2l6ZSA9IE1BWF9CQ0FDSEVfU0laRSAqIDI7CiAKIAlpZiAobWF4c2l6ZSA+IChtYXhfbG93X3BmbiArIDEpIDw8IFBBR0VfU0hJRlQpCi0JCW1heHNpemUgPSAxIDw8IChmbG9vcl9sb2cyKG1heF9sb3dfcGZuICsgMSkgKyBQQUdFX1NISUZUKTsKKwkJbWF4c2l6ZSA9IDEgPDwgKGlsb2cyKG1heF9sb3dfcGZuICsgMSkgKyBQQUdFX1NISUZUKTsKIAogCS8qIEdldCB0aGUgZmlyc3QgYmxvY2sgY2FjaGVkLiAqLwogCXJlYWRfbWVtX2Jsb2NrKF9fdmEoMCksIHN0cmlkZSwgc2l6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYWxwaGEva2VybmVsL3NpZ25hbC5jCmluZGV4IDc0MWRhMDkuLjQxMGFmNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3NpZ25hbC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KQEAgLTMzLDggKzMyLDggQEAKICNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCiAKIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9zeXNfY2FsbCh2b2lkKTsKLXN0YXRpYyBpbnQgZG9fc2lnbmFsKHNpZ3NldF90ICosIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKiwKLQkJICAgICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB2b2lkIGRvX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqLCBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICosCisJCSAgICAgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCiAKIC8qCkBAIC0xNDcsMTEgKzE0Niw5IEBACiBhc21saW5rYWdlIGludAogZG9fc2lnc3VzcGVuZChvbGRfc2lnc2V0X3QgbWFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3KQogewotCXNpZ3NldF90IG9sZHNldDsKLQogCW1hc2sgJj0gX0JMT0NLQUJMRTsKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlvbGRzZXQgPSBjdXJyZW50LT5ibG9ja2VkOworCWN1cnJlbnQtPnNhdmVkX3NpZ21hc2sgPSBjdXJyZW50LT5ibG9ja2VkOwogCXNpZ2luaXRzZXQoJmN1cnJlbnQtPmJsb2NrZWQsIG1hc2spOwogCXJlY2FsY19zaWdwZW5kaW5nKCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKQEAgLTE2MSwxOSArMTU4LDE3IEBACiAJcmVncy0+cjAgPSBFSU5UUjsKIAlyZWdzLT5yMTkgPSAxOwogCi0Jd2hpbGUgKDEpIHsKLQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JCXNjaGVkdWxlKCk7Ci0JCWlmIChkb19zaWduYWwoJm9sZHNldCwgcmVncywgc3csIDAsIDApKQotCQkJcmV0dXJuIC1FSU5UUjsKLQl9CisJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJc2NoZWR1bGUoKTsKKwlzZXRfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJcmV0dXJuIC1FUkVTVEFSVE5PSEFORDsKIH0KIAogYXNtbGlua2FnZSBpbnQKIGRvX3J0X3NpZ3N1c3BlbmQoc2lnc2V0X3QgX191c2VyICp1c2V0LCBzaXplX3Qgc2lnc2V0c2l6ZSwKIAkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdykKIHsKLQlzaWdzZXRfdCBvbGRzZXQsIHNldDsKKwlzaWdzZXRfdCBzZXQ7CiAKIAkvKiBYWFg6IERvbid0IHByZWNsdWRlIGhhbmRsaW5nIGRpZmZlcmVudCBzaXplZCBzaWdzZXRfdCdzLiAgKi8KIAlpZiAoc2lnc2V0c2l6ZSAhPSBzaXplb2Yoc2lnc2V0X3QpKQpAQCAtMTgzLDcgKzE3OCw3IEBACiAKIAlzaWdkZWxzZXRtYXNrKCZzZXQsIH5fQkxPQ0tBQkxFKTsKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlvbGRzZXQgPSBjdXJyZW50LT5ibG9ja2VkOworCWN1cnJlbnQtPnNhdmVkX3NpZ21hc2sgPSBjdXJyZW50LT5ibG9ja2VkOwogCWN1cnJlbnQtPmJsb2NrZWQgPSBzZXQ7CiAJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpAQCAtMTkzLDEyICsxODgsMTAgQEAKIAlyZWdzLT5yMCA9IEVJTlRSOwogCXJlZ3MtPnIxOSA9IDE7CiAKLQl3aGlsZSAoMSkgewotCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQkJc2NoZWR1bGUoKTsKLQkJaWYgKGRvX3NpZ25hbCgmb2xkc2V0LCByZWdzLCBzdywgMCwgMCkpCi0JCQlyZXR1cm4gLUVJTlRSOwotCX0KKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwlzY2hlZHVsZSgpOworCXNldF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKTsKKwlyZXR1cm4gLUVSRVNUQVJUTk9IQU5EOwogfQogCiBhc21saW5rYWdlIGludApAQCAtNDM3LDcgKzQzMCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIHNldHVwX2ZyYW1lKGludCBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHNpZ3NldF90ICpzZXQsCiAJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICogc3cpCiB7CkBAIC00ODIsMTMgKzQ3NSwxNCBAQAogCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIGZyYW1lLCByZWdzLT5wYywgcmVncy0+cjI2KTsKICNlbmRpZgogCi0JcmV0dXJuOworCXJldHVybiAwOwogCiBnaXZlX3NpZ3NlZ3Y6CiAJZm9yY2Vfc2lnc2VndihzaWcsIGN1cnJlbnQpOworCXJldHVybiAtRUZBVUxUOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogc2V0dXBfcnRfZnJhbWUoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAogCSAgICAgICBzaWdzZXRfdCAqc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHN3aXRjaF9zdGFjayAqIHN3KQogewpAQCAtNTQ0LDM0ICs1MzgsMzggQEAKIAkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBmcmFtZSwgcmVncy0+cGMsIHJlZ3MtPnIyNik7CiAjZW5kaWYKIAotCXJldHVybjsKKwlyZXR1cm4gMDsKIAogZ2l2ZV9zaWdzZWd2OgogCWZvcmNlX3NpZ3NlZ3Yoc2lnLCBjdXJyZW50KTsKKwlyZXR1cm4gLUVGQVVMVDsKIH0KIAogCiAvKgogICogT0ssIHdlJ3JlIGludm9raW5nIGEgaGFuZGxlci4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIGludAogaGFuZGxlX3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzaWdpbmZvX3QgKmluZm8sCiAJICAgICAgc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdykKIHsKKwlpbnQgcmV0OworCiAJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1NJR0lORk8pCi0JCXNldHVwX3J0X2ZyYW1lKHNpZywga2EsIGluZm8sIG9sZHNldCwgcmVncywgc3cpOworCQlyZXQgPSBzZXR1cF9ydF9mcmFtZShzaWcsIGthLCBpbmZvLCBvbGRzZXQsIHJlZ3MsIHN3KTsKIAllbHNlCi0JCXNldHVwX2ZyYW1lKHNpZywga2EsIG9sZHNldCwgcmVncywgc3cpOworCQlyZXQgPSBzZXR1cF9mcmFtZShzaWcsIGthLCBvbGRzZXQsIHJlZ3MsIHN3KTsKIAotCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNFVEhBTkQpCi0JCWthLT5zYS5zYV9oYW5kbGVyID0gU0lHX0RGTDsKKwlpZiAocmV0ID09IDApIHsKKwkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwmY3VycmVudC0+YmxvY2tlZCwma2EtPnNhLnNhX21hc2spOworCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9OT0RFRkVSKSkgCisJCQlzaWdhZGRzZXQoJmN1cnJlbnQtPmJsb2NrZWQsc2lnKTsKKwkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl9CiAKLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlzaWdvcnNldHMoJmN1cnJlbnQtPmJsb2NrZWQsJmN1cnJlbnQtPmJsb2NrZWQsJmthLT5zYS5zYV9tYXNrKTsKLQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9OT0RFRkVSKSkgCi0JCXNpZ2FkZHNldCgmY3VycmVudC0+YmxvY2tlZCxzaWcpOwotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTYxMiwzMCArNjEwLDQyIEBACiAgKiByZXN0YXJ0LiAicjAiIGlzIGFsc28gdXNlZCBhcyBhbiBpbmRpY2F0b3Igd2hldGhlciB3ZSBjYW4gcmVzdGFydCBhdAogICogYWxsIChpZiB3ZSBnZXQgaGVyZSBmcm9tIGFueXRoaW5nIGJ1dCBhIHN5c2NhbGwgcmV0dXJuLCBpdCB3aWxsIGJlIDApCiAgKi8KLXN0YXRpYyBpbnQKLWRvX3NpZ25hbChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKiBzdywKK3N0YXRpYyB2b2lkCitkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICogc3csCiAJICB1bnNpZ25lZCBsb25nIHIwLCB1bnNpZ25lZCBsb25nIHIxOSkKIHsKIAlzaWdpbmZvX3QgaW5mbzsKIAlpbnQgc2lnbnI7CiAJdW5zaWduZWQgbG9uZyBzaW5nbGVfc3RlcHBpbmcgPSBwdHJhY2VfY2FuY2VsX2JwdChjdXJyZW50KTsKIAlzdHJ1Y3Qga19zaWdhY3Rpb24ga2E7CisJc2lnc2V0X3QgKm9sZHNldDsKIAotCWlmICghb2xkc2V0KQorCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQorCQlvbGRzZXQgPSAmY3VycmVudC0+c2F2ZWRfc2lnbWFzazsKKwllbHNlCiAJCW9sZHNldCA9ICZjdXJyZW50LT5ibG9ja2VkOwogCiAJLyogVGhpcyBsZXRzIHRoZSBkZWJ1Z2dlciBydW4sIC4uLiAqLwogCXNpZ25yID0gZ2V0X3NpZ25hbF90b19kZWxpdmVyKCZpbmZvLCAma2EsIHJlZ3MsIE5VTEwpOworCiAJLyogLi4uIHNvIHJlLWNoZWNrIHRoZSBzaW5nbGUgc3RlcHBpbmcuICovCiAJc2luZ2xlX3N0ZXBwaW5nIHw9IHB0cmFjZV9jYW5jZWxfYnB0KGN1cnJlbnQpOwogCiAJaWYgKHNpZ25yID4gMCkgewogCQkvKiBXaGVlISAgQWN0dWFsbHkgZGVsaXZlciB0aGUgc2lnbmFsLiAgKi8KLQkJaWYgKHIwKSBzeXNjYWxsX3Jlc3RhcnQocjAsIHIxOSwgcmVncywgJmthKTsKLQkJaGFuZGxlX3NpZ25hbChzaWduciwgJmthLCAmaW5mbywgb2xkc2V0LCByZWdzLCBzdyk7CisJCWlmIChyMCkKKwkJCXN5c2NhbGxfcmVzdGFydChyMCwgcjE5LCByZWdzLCAma2EpOworCQlpZiAoaGFuZGxlX3NpZ25hbChzaWduciwgJmthLCAmaW5mbywgb2xkc2V0LCByZWdzLCBzdykgPT0gMCkgeworCQkJLyogQSBzaWduYWwgd2FzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQsIGFuZCB0aGUKKwkJCSAgIHNhdmVkIHNpZ21hc2sgd2FzIHN0b3JlZCBvbiB0aGUgc2lnbmFsIGZyYW1lLAorCQkJICAgYW5kIHdpbGwgYmUgcmVzdG9yZWQgYnkgc2lncmV0dXJuLiAgU28gd2UgY2FuCisJCQkgICBzaW1wbHkgY2xlYXIgdGhlIHJlc3RvcmUgc2lnbWFzayBmbGFnLiAgKi8KKwkJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQorCQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spOworCQl9CiAJCWlmIChzaW5nbGVfc3RlcHBpbmcpIAogCQkJcHRyYWNlX3NldF9icHQoY3VycmVudCk7IC8qIHJlLXNldCBicHQgKi8KLQkJcmV0dXJuIDE7CisJCXJldHVybjsKIAl9CiAKIAlpZiAocjApIHsKQEAgLTY1NSwxNyArNjY1LDIyIEBACiAJCQlicmVhazsKIAkJfQogCX0KKworCS8qIElmIHRoZXJlJ3Mgbm8gc2lnbmFsIHRvIGRlbGl2ZXIsIHdlIGp1c3QgcmVzdG9yZSB0aGUgc2F2ZWQgbWFzay4gICovCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpIHsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmY3VycmVudC0+c2F2ZWRfc2lnbWFzaywgTlVMTCk7CisJfQorCiAJaWYgKHNpbmdsZV9zdGVwcGluZykKIAkJcHRyYWNlX3NldF9icHQoY3VycmVudCk7CS8qIHJlLXNldCBicmVha3BvaW50ICovCi0KLQlyZXR1cm4gMDsKIH0KIAogdm9pZAotZG9fbm90aWZ5X3Jlc3VtZShzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3LCB1bnNpZ25lZCBsb25nIHIwLAotCQkgdW5zaWduZWQgbG9uZyByMTksIHVuc2lnbmVkIGxvbmcgdGhyZWFkX2luZm9fZmxhZ3MpCitkb19ub3RpZnlfcmVzdW1lKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdywKKwkJIHVuc2lnbmVkIGxvbmcgdGhyZWFkX2luZm9fZmxhZ3MsCisJCSB1bnNpZ25lZCBsb25nIHIwLCB1bnNpZ25lZCBsb25nIHIxOSkKIHsKLQlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiBfVElGX1NJR1BFTkRJTkcpCi0JCWRvX3NpZ25hbChvbGRzZXQsIHJlZ3MsIHN3LCByMCwgcjE5KTsKKwlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9SRVNUT1JFX1NJR01BU0spKQorCQlkb19zaWduYWwocmVncywgc3csIHIwLCByMTkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwppbmRleCBkMWVjNGY1Li44MGNmYjc1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zcm1jb25zLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zcm1jb25zLmMKaW5kZXggODVhODIxYS4uOTMwY2VkYyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3JtY29ucy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3NybWNvbnMuYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAJLndyaXRlCQk9IHNybV9jb25zb2xlX3dyaXRlLAogCS5kZXZpY2UJCT0gc3JtX2NvbnNvbGVfZGV2aWNlLAogCS5zZXR1cAkJPSBzcm1fY29uc29sZV9zZXR1cCwKLQkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5mbGFncwkJPSBDT05fUFJJTlRCVUZGRVIgfCBDT05fQk9PVCwKIAkuaW5kZXgJCT0gLTEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jCmluZGV4IDg1ZDJmOTMuLmM3MWIwZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jCkBAIC01NDMsNiArNTQzLDcgQEAKIHsKIAljb21tb25faW5pdF9wY2koKTsKIAlTTUM2NjlfSW5pdCgwKTsKKwlsb2NhdGVfYW5kX2luaXRfdmdhKE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQKQEAgLTU1MSw2ICs1NTIsMTQgQEAKIAljb21tb25faW5pdF9wY2koKTsKIAlTTUM2NjlfSW5pdCgxKTsKIAllczE4ODhfaW5pdCgpOworCWxvY2F0ZV9hbmRfaW5pdF92Z2EoTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorY2xpcHBlcl9pbml0X3BjaSh2b2lkKQoreworCWNvbW1vbl9pbml0X3BjaSgpOworCWxvY2F0ZV9hbmRfaW5pdF92Z2EoTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdApAQCAtNjU1LDcgKzY2NCw3IEBACiAJLmluaXRfYXJjaAkJPSB0c3VuYW1pX2luaXRfYXJjaCwKIAkuaW5pdF9pcnEJCT0gY2xpcHBlcl9pbml0X2lycSwKIAkuaW5pdF9ydGMJCT0gY29tbW9uX2luaXRfcnRjLAotCS5pbml0X3BjaQkJPSBjb21tb25faW5pdF9wY2ksCisJLmluaXRfcGNpCQk9IGNsaXBwZXJfaW5pdF9wY2ksCiAJLmtpbGxfYXJjaAkJPSB0c3VuYW1pX2tpbGxfYXJjaCwKIAkucGNpX21hcF9pcnEJCT0gY2xpcHBlcl9tYXBfaXJxLAogCS5wY2lfc3dpenpsZQkJPSBjb21tb25fc3dpenpsZSwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19tYXJ2ZWwuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19tYXJ2ZWwuYwppbmRleCBlMzQ5ZjAzLi4wYmNiOTY4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWFydmVsLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21hcnZlbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL2NvcmVfbWFydmVsLmg+CiAjaW5jbHVkZSA8YXNtL2h3cnBiLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3ZnYS5oPgogCiAjaW5jbHVkZSAicHJvdG8uaCIKICNpbmNsdWRlICJlcnJfaW1wbC5oIgpAQCAtNDEyLDEwICs0MTMsNyBAQAogCiAJcGNpX3Byb2JlX29ubHkgPSAxOwogCWNvbW1vbl9pbml0X3BjaSgpOwotCi0jaWZkZWYgQ09ORklHX1ZHQV9IT1NFCiAJbG9jYXRlX2FuZF9pbml0X3ZnYShOVUxMKTsKLSNlbmRpZgogCiAJLyogQ2xlYXIgYW55IGlvNyBlcnJvcnMuICAqLwogCWZvciAoaW83ID0gTlVMTDsgKGlvNyA9IG1hcnZlbF9uZXh0X2lvNyhpbzcpKSAhPSBOVUxMOyApIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGl0YW4uYwppbmRleCBmMDA5YjdiLi4xZDNjMTM5IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGl0YW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGl0YW4uYwpAQCAtMzMxLDkgKzMzMSw3IEBACiAJcGNpX3Byb2JlX29ubHkgPSAxOwogCWNvbW1vbl9pbml0X3BjaSgpOwogCVNNQzY2OV9Jbml0KDApOwotI2lmZGVmIENPTkZJR19WR0FfSE9TRQogCWxvY2F0ZV9hbmRfaW5pdF92Z2EoTlVMTCk7Ci0jZW5kaWYKIH0KIAogDApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCmluZGV4IGY2Y2ZlOGMuLjc5ZGU5OWUzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCkBAIC00NjUsNiArNDY1LDM4IEBACiAJLnF1YWQgc3lzX2lub3RpZnlfaW5pdAogCS5xdWFkIHN5c19pbm90aWZ5X2FkZF93YXRjaAkJLyogNDQ1ICovCiAJLnF1YWQgc3lzX2lub3RpZnlfcm1fd2F0Y2gKKwkucXVhZCBzeXNfZmRhdGFzeW5jCisJLnF1YWQgc3lzX2tleGVjX2xvYWQKKwkucXVhZCBzeXNfbWlncmF0ZV9wYWdlcworCS5xdWFkIHN5c19vcGVuYXQJCQkvKiA0NTAgKi8KKwkucXVhZCBzeXNfbWtkaXJhdAorCS5xdWFkIHN5c19ta25vZGF0CisJLnF1YWQgc3lzX2ZjaG93bmF0CisJLnF1YWQgc3lzX2Z1dGltZXNhdAorCS5xdWFkIHN5c19mc3RhdGF0NjQJCQkvKiA0NTUgKi8KKwkucXVhZCBzeXNfdW5saW5rYXQKKwkucXVhZCBzeXNfcmVuYW1lYXQKKwkucXVhZCBzeXNfbGlua2F0CisJLnF1YWQgc3lzX3N5bWxpbmthdAorCS5xdWFkIHN5c19yZWFkbGlua2F0CQkJLyogNDYwICovCisJLnF1YWQgc3lzX2ZjaG1vZGF0CisJLnF1YWQgc3lzX2ZhY2Nlc3NhdAorCS5xdWFkIHN5c19wc2VsZWN0NgorCS5xdWFkIHN5c19wcG9sbAorCS5xdWFkIHN5c191bnNoYXJlCQkJLyogNDY1ICovCisJLnF1YWQgc3lzX3NldF9yb2J1c3RfbGlzdAorCS5xdWFkIHN5c19nZXRfcm9idXN0X2xpc3QKKwkucXVhZCBzeXNfc3BsaWNlCisJLnF1YWQgc3lzX3N5bmNfZmlsZV9yYW5nZQorCS5xdWFkIHN5c190ZWUJCQkJLyogNDcwICovCisJLnF1YWQgc3lzX3Ztc3BsaWNlCisJLnF1YWQgc3lzX21vdmVfcGFnZXMKKwkucXVhZCBzeXNfZ2V0Y3B1CisJLnF1YWQgc3lzX2Vwb2xsX3B3YWl0CisJLnF1YWQgc3lzX3V0aW1lbnNhdAkJCS8qIDQ3NSAqLworCS5xdWFkIHN5c19zaWduYWxmZAorCS5xdWFkIHN5c190aW1lcmZkCisJLnF1YWQgc3lzX2V2ZW50ZmQKIAogCS5zaXplIHN5c19jYWxsX3RhYmxlLCAuIC0gc3lzX2NhbGxfdGFibGUKIAkudHlwZSBzeXNfY2FsbF90YWJsZSwgQG9iamVjdApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggY2YxZTZmYy4uNDQ5ZTc2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNSw3ICsxNSw3IEBACiAKICAgX3RleHQgPSAuOwkJCQkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KICAgLnRleHQgOiB7IAotCSooLnRleHQpIAorCVRFWFRfVEVYVAogCVNDSEVEX1RFWFQKIAlMT0NLX1RFWFQKIAkqKC5maXh1cCkKQEAgLTg5LDcgKzg5LDcgQEAKIAogICBfZGF0YSA9IC47CiAgIC5kYXRhIDogewkJCQkJLyogRGF0YSAqLwotCSooLmRhdGEpCisJREFUQV9EQVRBCiAJQ09OU1RSVUNUT1JTCiAgIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9saWIvTWFrZWZpbGUgYi9hcmNoL2FscGhhL2xpYi9NYWtlZmlsZQppbmRleCBlYTA5OGYzLi4yNjZmNzhlIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL2FscGhhL2xpYi9NYWtlZmlsZQpAQCAtMzcsNyArMzcsOCBAQAogCSQoZXY2LXkpY2xlYXJfcGFnZS5vIFwKIAkkKGV2Ni15KWNvcHlfcGFnZS5vIFwKIAlmcHJlZy5vIFwKLQljYWxsYmFja19zcm0ubyBzcm1fcHV0cy5vIHNybV9wcmludGsubworCWNhbGxiYWNrX3NybS5vIHNybV9wdXRzLm8gc3JtX3ByaW50ay5vIFwKKwlmbHMubwogCiBsaWItJChDT05GSUdfU01QKSArPSBkZWNfYW5kX2xvY2subwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2xpYi9mbHMuYyBiL2FyY2gvYWxwaGEvbGliL2Zscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDg0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FscGhhL2xpYi9mbHMuYwpAQCAtMCwwICsxLDM4IEBACisvKiAKKyAqIGFyY2gvYWxwaGEvbGliL2Zscy5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworLyogVGhpcyBpcyBmbHMoeCktMSwgZXhjZXB0IHplcm8gaXMgaGVsZCB0byB6ZXJvLiAgVGhpcyBhbGxvd3MgbW9zdAorICAgZWZmaWNlbnQgaW5wdXQgaW50byBleHRibCwgcGx1cyBpdCBhbGxvd3MgZWFzeSBoYW5kbGluZyBvZiBmbHMoMCk9MC4gICovCisKK2NvbnN0IHVuc2lnbmVkIGNoYXIgX19mbHNtMV90YWJbMjU2XSA9IAoreworICAwLAorICAwLAorICAxLCAxLAorICAyLCAyLCAyLCAyLAorICAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLAorICA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LAorCisgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsCisgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsCisKKyAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwKKyAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwKKyAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwKKyAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwKKworICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAorICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAorICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAorICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAorICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAorICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAorICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAorICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAorfTsKKworRVhQT1JUX1NZTUJPTChfX2Zsc20xX3RhYik7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL21tL2ZhdWx0LmMgYi9hcmNoL2FscGhhL21tL2ZhdWx0LmMKaW5kZXggOGFhOWRiOC4uZjU4NjI3OSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYWxwaGEvbW0vZmF1bHQuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCAwZDhmYWMzLi41MGQ5ZjNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTExNCw5ICsxMTQsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfQlVTVF9TUElOTE9DSwotCWJvb2wKLQogY29uZmlnIEFSQ0hfTUFZX0hBVkVfUENfRkRDCiAJYm9vbAogCkBAIC0yNDcsNiArMjQ0LDE1IEBACiAJaGVscAogCSAgU3VwcG9ydCBmb3IgTW90b3JvbGEncyBpLk1YIGZhbWlseSBvZiBwcm9jZXNzb3JzIChNWDEsIE1YTCkuCiAKK2NvbmZpZyBBUkNIX0lPUDEzWFgKKwlib29sICJJT1AxM3h4LWJhc2VkIgorCWRlcGVuZHMgb24gTU1VCisJc2VsZWN0IFBMQVRfSU9QCisJc2VsZWN0IFBDSQorCXNlbGVjdCBBUkNIX1NVUFBPUlRTX01TSQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIEludGVsJ3MgSU9QMTNYWCAoWFNjYWxlKSBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KKwogY29uZmlnIEFSQ0hfSU9QMzJYCiAJYm9vbCAiSU9QMzJ4LWJhc2VkIgogCWRlcGVuZHMgb24gTU1VCkBAIC0yNjQsMjIgKzI3MCwxMiBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEludGVsJ3MgSU9QMzNYIChYU2NhbGUpIGZhbWlseSBvZiBwcm9jZXNzb3JzLgogCi1jb25maWcgQVJDSF9JT1AxM1hYCi0JYm9vbCAiSU9QMTN4eC1iYXNlZCIKK2NvbmZpZyBBUkNIX0lYUDIzWFgKKyAJYm9vbCAiSVhQMjNYWC1iYXNlZCIKIAlkZXBlbmRzIG9uIE1NVQotCXNlbGVjdCBQTEFUX0lPUAotCXNlbGVjdCBQQ0kKLQlzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0kKKyAJc2VsZWN0IFBDSQogCWhlbHAKLQkgIFN1cHBvcnQgZm9yIEludGVsJ3MgSU9QMTNYWCAoWFNjYWxlKSBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KLQotY29uZmlnIEFSQ0hfSVhQNFhYCi0JYm9vbCAiSVhQNHh4LWJhc2VkIgotCWRlcGVuZHMgb24gTU1VCi0Jc2VsZWN0IEdFTkVSSUNfVElNRQotCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgSW50ZWwncyBJWFA0WFggKFhTY2FsZSkgZmFtaWx5IG9mIHByb2Nlc3NvcnMuCisJICBTdXBwb3J0IGZvciBJbnRlbCdzIElYUDIzeHggKFhTY2FsZSkgZmFtaWx5IG9mIHByb2Nlc3NvcnMuCiAKIGNvbmZpZyBBUkNIX0lYUDIwMDAKIAlib29sICJJWFAyNDAwLzI4MDAtYmFzZWQiCkBAIC0yODgsMTIgKzI4NCwxNCBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEludGVsJ3MgSVhQMjQwMC8yODAwIChYU2NhbGUpIGZhbWlseSBvZiBwcm9jZXNzb3JzLgogCi1jb25maWcgQVJDSF9JWFAyM1hYCi0gCWJvb2wgIklYUDIzWFgtYmFzZWQiCitjb25maWcgQVJDSF9JWFA0WFgKKwlib29sICJJWFA0eHgtYmFzZWQiCiAJZGVwZW5kcyBvbiBNTVUKLSAJc2VsZWN0IFBDSQorCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAloZWxwCi0JICBTdXBwb3J0IGZvciBJbnRlbCdzIElYUDIzeHggKFhTY2FsZSkgZmFtaWx5IG9mIHByb2Nlc3NvcnMuCisJICBTdXBwb3J0IGZvciBJbnRlbCdzIElYUDRYWCAoWFNjYWxlKSBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KIAogY29uZmlnIEFSQ0hfTDcyMDAKIAlib29sICJMaW5rVXAtTDcyMDAiCkBAIC0zMDgsNiArMzA2LDEyIEBACiAJICBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIGNvbW1lbnRzIGFib3V0IHRoZSBMaW51eCBrZXJuZWwgcG9ydAogCSAgdG8gdGhpcyBib2FyZCwgc2VuZCBlLW1haWwgdG8gPHNqaGlsbEBjb3R3LmNvbT4uCiAKK2NvbmZpZyBBUkNIX0tTODY5NQorCWJvb2wgIk1pY3JlbC9LZW5kaW4gS1M4Njk1IgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIE1pY3JlbC9LZW5kaW4gS1M4Njk1ICJDZW50YXVyIiAoQVJNOTIyVCkgYmFzZWQKKwkgIFN5c3RlbS1vbi1DaGlwIGRldmljZXMuCisKIGNvbmZpZyBBUkNIX05TOVhYWAogCWJvb2wgIk5ldFNpbGljb24gTlM5eHh4IgogCWhlbHAKQEAgLTM3Niw2ICszODAsMTMgQEAKIAkgIGNvcmUgd2l0aCBhIHdpZGUgYXJyYXkgb2YgaW50ZWdyYXRlZCBkZXZpY2VzIGZvcgogCSAgaGFuZC1oZWxkIGFuZCBsb3ctcG93ZXIgYXBwbGljYXRpb25zLgogCitjb25maWcgQVJDSF9EQVZJTkNJCisJYm9vbCAiVEkgRGFWaW5jaSIKKwlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwloZWxwCisJICBTdXBwb3J0IGZvciBUSSdzIERhVmluY2kgcGxhdGZvcm0uCisKIGNvbmZpZyBBUkNIX09NQVAKIAlib29sICJUSSBPTUFQIgogCXNlbGVjdCBHRU5FUklDX0dQSU8KQEAgLTQ0NCw2ICs0NTUsMTAgQEAKIAogc291cmNlICJhcmNoL2FybS9tYWNoLW5zOXh4eC9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvYXJtL21hY2gta3M4Njk1L0tjb25maWciCisKICMgRGVmaW5pdGlvbnMgdG8gbWFrZSBsaWZlIGVhc2llcgogY29uZmlnIEFSQ0hfQUNPUk4KIAlib29sCkBAIC01MDQsNyArNTE5LDcgQEAKIAlib29sCiAKIGNvbmZpZyBQQ0kKLQlib29sICJQQ0kgc3VwcG9ydCIgaWYgQVJDSF9JTlRFR1JBVE9SX0FQIHx8IEFSQ0hfVkVSU0FUSUxFX1BCIHx8IEFSQ0hfSVhQNFhYCisJYm9vbCAiUENJIHN1cHBvcnQiIGlmIEFSQ0hfSU5URUdSQVRPUl9BUCB8fCBBUkNIX1ZFUlNBVElMRV9QQiB8fCBBUkNIX0lYUDRYWCB8fCBBUkNIX0tTODY5NQogCWhlbHAKIAkgIEZpbmQgb3V0IHdoZXRoZXIgeW91IGhhdmUgYSBQQ0kgbW90aGVyYm9hcmQuIFBDSSBpcyB0aGUgbmFtZSBvZiBhCiAJICBidXMgc3lzdGVtLCBpLmUuIHRoZSB3YXkgdGhlIENQVSB0YWxrcyB0byB0aGUgb3RoZXIgc3R1ZmYgaW5zaWRlCkBAIC02NzMsNyArNjg4LDggQEAKIAkJICAgQVJDSF9MVUJCT0NLIHx8IE1BQ0hfTUFJTlNUT05FIHx8IEFSQ0hfTkVUV0lOREVSIHx8IFwKIAkJICAgQVJDSF9PTUFQIHx8IEFSQ0hfUDcyMFQgfHwgQVJDSF9QWEFfSURQIHx8IFwKIAkJICAgQVJDSF9TQTExMDAgfHwgQVJDSF9TSEFSSyB8fCBBUkNIX1ZFUlNBVElMRSB8fCBcCi0JCSAgIEFSQ0hfQVQ5MSB8fCBNQUNIX1RSSVpFUFM0CisJCSAgIEFSQ0hfQVQ5MSB8fCBNQUNIX1RSSVpFUFM0IHx8IEFSQ0hfREFWSU5DSSB8fCBcCisJCSAgIEFSQ0hfS1M4Njk1CiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSBMRURzIG9uIHlvdXIgbWFjaGluZSB3aWxsIGJlIHVzZWQKIAkgIHRvIHByb3ZpZGUgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgY3VycmVudCBzeXN0ZW0gc3RhdHVzLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCBhYjlmMmQ0Li5jYmQ1MDEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtNDcsOCArNDcsMTMgQEAKICMgTm90ZSB0aGF0IEdDQyBkb2VzIG5vdCBudW1lcmljYWxseSBkZWZpbmUgYW4gYXJjaGl0ZWN0dXJlIHZlcnNpb24KICMgbWFjcm8sIGJ1dCBpbnN0ZWFkIGRlZmluZXMgYSB3aG9sZSBzZXJpZXMgb2YgbWFjcm9zIHdoaWNoIG1ha2VzCiAjIHRlc3RpbmcgZm9yIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGxhdGVyIHJhdGhlciBpbXBvc3NpYmxlLgorYXJjaC0kKENPTkZJR19DUFVfMzJ2NykJCTo9LURfX0xJTlVYX0FSTV9BUkNIX189NyAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1hcm12N2EsLW1hcmNoPWFybXY1dCAtV2EkKGNvbW1hKS1tYXJjaD1hcm12N2EpCiBhcmNoLSQoQ09ORklHX0NQVV8zMnY2KQkJOj0tRF9fTElOVVhfQVJNX0FSQ0hfXz02ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWFybXY2LC1tYXJjaD1hcm12NXQgLVdhJChjb21tYSktbWFyY2g9YXJtdjYpCisjIE9ubHkgb3ZlcnJpZGUgdGhlIGNvbXBpbGVyIG9wdGlvbiBpZiBBUk12Ni4gVGhlIEFSTXY2SyBleHRlbnNpb25zIGFyZQorIyBhbHdheXMgYXZhaWxhYmxlIGluIEFSTXY3CitpZmVxICgkKENPTkZJR19DUFVfMzJ2NikseSkKIGFyY2gtJChDT05GSUdfQ1BVXzMydjZLKQk6PS1EX19MSU5VWF9BUk1fQVJDSF9fPTYgJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9YXJtdjZrLC1tYXJjaD1hcm12NXQgLVdhJChjb21tYSktbWFyY2g9YXJtdjZrKQorZW5kaWYKIGFyY2gtJChDT05GSUdfQ1BVXzMydjUpCQk6PS1EX19MSU5VWF9BUk1fQVJDSF9fPTUgJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9YXJtdjV0ZSwtbWFyY2g9YXJtdjR0KQogYXJjaC0kKENPTkZJR19DUFVfMzJ2NFQpCTo9LURfX0xJTlVYX0FSTV9BUkNIX189NCAtbWFyY2g9YXJtdjR0CiBhcmNoLSQoQ09ORklHX0NQVV8zMnY0KQkJOj0tRF9fTElOVVhfQVJNX0FSQ0hfXz00IC1tYXJjaD1hcm12NApAQCAtMTMwLDYgKzEzNSw4IEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX05FVFgpCSAgIDo9IG5ldHgKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTlM5WFhYKQkgICA6PSBuczl4eHgKICB0ZXh0b2ZzLSQoQ09ORklHX0FSQ0hfTlM5WFhYKQkgICA6PSAweDAwMTA4MDAwCisgbWFjaGluZS0kKENPTkZJR19BUkNIX0RBVklOQ0kpCSAgIDo9IGRhdmluY2kKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfS1M4Njk1KSAgICAgOj0ga3M4Njk1CiAKIGlmZXEgKCQoQ09ORklHX0FSQ0hfRUJTQTExMCkseSkKICMgVGhpcyBpcyB3aGF0IGhhcHBlbnMgaWYgeW91IGZvcmdldCB0aGUgSU9DUzE2IGxpbmUuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKaW5kZXggNmZiZTc3Mi4uYjM2YjFlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwpAQCAtNiw3ICs2LDcgQEAKICAqICBjb3B5IGRhdGEgdG8vZnJvbSBidWZmZXJzIGxvY2F0ZWQgb3V0c2lkZSB0aGUgRE1BIHJlZ2lvbi4gVGhpcwogICogIG9ubHkgd29ya3MgZm9yIHN5c3RlbXMgaW4gd2hpY2ggRE1BIG1lbW9yeSBpcyBhdCB0aGUgYm90dG9tIG9mCiAgKiAgUkFNLCB0aGUgcmVtYWluZGVyIG9mIG1lbW9yeSBpcyBhdCB0aGUgdG9wIGFuZCB0aGUgRE1BIG1lbW9yeQotICogIGNhbiBiZSBtYXJrZWQgYXMgWk9ORV9ETUEuIEFueXRoaW5nIGJleW9uZCB0aGF0IHN1Y2ggYXMgZGlzY29udGlnb3VzCisgKiAgY2FuIGJlIG1hcmtlZCBhcyBaT05FX0RNQS4gQW55dGhpbmcgYmV5b25kIHRoYXQgc3VjaCBhcyBkaXNjb250aWd1b3VzCiAgKiAgRE1BIHdpbmRvd3Mgd2lsbCByZXF1aXJlIGN1c3RvbSBpbXBsZW1lbnRhdGlvbnMgdGhhdCByZXNlcnZlIG1lbW9yeQogICogIGFyZWFzIGF0IGVhcmx5IGJvb3R1cC4KICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZ2ljLmMgYi9hcmNoL2FybS9jb21tb24vZ2ljLmMKaW5kZXggNGRlZWNlNS4uMGM4OWJkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2dpYy5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9naWMuYwpAQCAtNzIsNyArNzIsNyBAQAogICogdW5tYXNrIGl0LCBpbiB0aGUgc2FtZSB3YXkgd2UgbmVlZCB0byB1bm1hc2sgYW4gaW50ZXJydXB0IHdoZW4KICAqIHdlIGZpcnN0IGVuYWJsZSBpdC4KICAqCi0gKiBUaGUgR0lDIGhhcyBhIHNlcGVyYXRlIG5vdGlvbiBvZiAiZW5kIG9mIGludGVycnVwdCIgdG8gcmUtZW5hYmxlCisgKiBUaGUgR0lDIGhhcyBhIHNlcGFyYXRlIG5vdGlvbiBvZiAiZW5kIG9mIGludGVycnVwdCIgdG8gcmUtZW5hYmxlCiAgKiBhbiBpbnRlcnJ1cHQgYWZ0ZXIgaGFuZGxpbmcsIGluIG9yZGVyIHRvIHN1cHBvcnQgaGFyZHdhcmUKICAqIHByaW9yaXRpc2F0aW9uLgogICoKQEAgLTEyNSwxMiArMTI1LDExIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgZmFzdGNhbGwgZ2ljX2hhbmRsZV9jYXNjYWRlX2lycSh1bnNpZ25lZCBpbnQgaXJxLAotCQkJCQkgICAgc3RydWN0IGlycV9kZXNjICpkZXNjKQorc3RhdGljIHZvaWQgZ2ljX2hhbmRsZV9jYXNjYWRlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGdpY19jaGlwX2RhdGEgKmNoaXBfZGF0YSA9IGdldF9pcnFfZGF0YShpcnEpOwogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcChpcnEpOwotCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycTsKKwl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnEsIGdpY19pcnE7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXM7CiAKIAkvKiBwcmltYXJ5IGNvbnRyb2xsZXIgYWNrJ2luZyAqLwpAQCAtMTQwLDE2ICsxMzksMTUgQEAKIAlzdGF0dXMgPSByZWFkbChjaGlwX2RhdGEtPmNwdV9iYXNlICsgR0lDX0NQVV9JTlRBQ0spOwogCXNwaW5fdW5sb2NrKCZpcnFfY29udHJvbGxlcl9sb2NrKTsKIAotCWNhc2NhZGVfaXJxID0gKHN0YXR1cyAmIDB4M2ZmKTsKLQlpZiAoY2FzY2FkZV9pcnEgPiAxMDIwKQorCWdpY19pcnEgPSAoc3RhdHVzICYgMHgzZmYpOworCWlmIChnaWNfaXJxID09IDEwMjMpCiAJCWdvdG8gb3V0OwotCWlmIChjYXNjYWRlX2lycSA8IDMyIHx8IGNhc2NhZGVfaXJxID49IE5SX0lSUVMpIHsKLQkJZG9fYmFkX0lSUShjYXNjYWRlX2lycSwgZGVzYyk7Ci0JCWdvdG8gb3V0OwotCX0KIAotCWNhc2NhZGVfaXJxICs9IGNoaXBfZGF0YS0+aXJxX29mZnNldDsKLQlnZW5lcmljX2hhbmRsZV9pcnEoY2FzY2FkZV9pcnEpOworCWNhc2NhZGVfaXJxID0gZ2ljX2lycSArIGNoaXBfZGF0YS0+aXJxX29mZnNldDsKKwlpZiAodW5saWtlbHkoZ2ljX2lycSA8IDMyIHx8IGdpY19pcnEgPiAxMDIwIHx8IGNhc2NhZGVfaXJxID49IE5SX0lSUVMpKQorCQlkb19iYWRfSVJRKGNhc2NhZGVfaXJxLCBkZXNjKTsKKwllbHNlCisJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CiAKICBvdXQ6CiAJLyogcHJpbWFyeSBjb250cm9sbGVyIHVubWFza2luZyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3NoYXJwc2xfcGFyYW0uYyBiL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BhcmFtLmMKaW5kZXggYzk0ODY0Yy4uYWFkNGQ5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3NoYXJwc2xfcGFyYW0uYworKysgYi9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wYXJhbS5jCkBAIC0yMCw3ICsyMCw3IEBACiAgKiB0eXBpY2FsbHkgaW5jbHVkaW5nIExDRCBwYXJhbWV0ZXJzIGFyZSBsb2FkZWQgYnkgdGhlIGJvb3Rsb2FkZXIgYXQgdGhlCiAgKiBhZGRyZXNzIFBBUkFNX0JBU0UuIEFzIHRoZSBrZXJuZWwgd2lsbCBvdmVyd3JpdGUgdGhlbSwgd2UgbmVlZCB0byBzdG9yZQogICogdGhlbSBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLCB0aGVuIHBhc3MgdGhlbSB0byB0aGUgYXBwcm9wcmlhdGUgZHJpdmVycy4KLSAqIE5vdCBhbGwgZGV2aWNlcyB1c2UgYWxsIHBhcmFtYXRlcnMgYnV0IHRoZSBmb3JtYXQgaXMgY29tbW9uIHRvIGFsbC4KKyAqIE5vdCBhbGwgZGV2aWNlcyB1c2UgYWxsIHBhcmFtZXRlcnMgYnV0IHRoZSBmb3JtYXQgaXMgY29tbW9uIHRvIGFsbC4KICAqLwogI2lmZGVmIENPTkZJR19BUkNIX1NBMTEwMAogI2RlZmluZSBQQVJBTV9CQVNFCTB4ZThmZmMwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BtLmMgYi9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jCmluZGV4IDU5NzJkZjIuLjNiZjNhOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BtLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3NoYXJwc2xfcG0uYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJCXNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9wZXJjZW50ID0gcGVyY2VudDsKIAl9CiAKLQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQmF0dGVyeTogdm9sdGFnZTogJWQsIHN0YXR1czogJWQsIHBlcmNlbnRhZ2U6ICVkLCB0aW1lOiAlZFxuIiwgdm9sdGFnZSwKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQmF0dGVyeTogdm9sdGFnZTogJWQsIHN0YXR1czogJWQsIHBlcmNlbnRhZ2U6ICVkLCB0aW1lOiAlbGRcbiIsIHZvbHRhZ2UsCiAJCQlzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzLCBzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfcGVyY2VudCwgamlmZmllcyk7CiAKIAkvKiBJZiBiYXR0ZXJ5IGlzIGxvdy4gbGltaXQgYmFja2xpZ2h0IGludGVuc2l0eSB0byBzYXZlIHBvd2VyLiAqLwpAQCAtMjkxLDcgKzI5MSw3IEBACiB9CiAKIC8qIENoYXJnaW5nIEZpbmlzaGVkIEludGVycnVwdCAoTm90IHByZXNlbnQgb24gQ29yZ2kpICovCi0vKiBDYW4gdHJpZ2dlciBhdCB0aGUgc2FtZSB0aW1lIGFzIGFuIEFDIHN0YXVzIGNoYW5nZSBzbworLyogQ2FuIHRyaWdnZXIgYXQgdGhlIHNhbWUgdGltZSBhcyBhbiBBQyBzdGF0dXMgY2hhbmdlIHNvCiAgICBkZWxheSB1bnRpbCBhZnRlciB0aGF0IGhhcyBiZWVuIHByb2Nlc3NlZCAqLwogaXJxcmV0dXJuX3Qgc2hhcnBzbF9jaHJnX2Z1bGxfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKQEAgLTYyNSw3ICs2MjUsNyBAQAogCX0KIAogCXRlbXAgPSBnZXRfc2VsZWN0X3ZhbChidWZmKTsKLQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAic2hhcnBzbF9mYXRhbF9jaGVjazogYWNpbjogJWQsIGRpc2NoYXJnZSB2b2x0YWdlOiAlZCwgbm8gZGlzY2hhcmdlOiAlZFxuIiwgYWNpbiwgdGVtcCwgc2hhcnBzbF9wbS5tYWNoaW5mby0+cmVhZF9kZXZkYXRhKFNIQVJQU0xfQkFUVF9WT0xUKSk7CisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgInNoYXJwc2xfZmF0YWxfY2hlY2s6IGFjaW46ICVkLCBkaXNjaGFyZ2Ugdm9sdGFnZTogJWQsIG5vIGRpc2NoYXJnZTogJWxkXG4iLCBhY2luLCB0ZW1wLCBzaGFycHNsX3BtLm1hY2hpbmZvLT5yZWFkX2RldmRhdGEoU0hBUlBTTF9CQVRUX1ZPTFQpKTsKIAogCWlmICgoYWNpbiAmJiAodGVtcCA8IHNoYXJwc2xfcG0ubWFjaGluZm8tPmZhdGFsX2FjaW5fdm9sdCkpIHx8CiAJCQkoIWFjaW4gJiYgKHRlbXAgPCBzaGFycHNsX3BtLm1hY2hpbmZvLT5mYXRhbF9ub2FjaW5fdm9sdCkpKQpAQCAtNjM1LDcgKzYzNSw3IEBACiAKIHN0YXRpYyBpbnQgc2hhcnBzbF9vZmZfY2hhcmdlX2Vycm9yKHZvaWQpCiB7Ci0JZGV2X2VycihzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogRXJyb3Igb2NjdXJlZC5cbiIpOworCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZXI6IEVycm9yIG9jY3VycmVkLlxuIik7CiAJc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlKDApOwogCXNoYXJwc2xfcG1fbGVkKFNIQVJQU0xfTEVEX0VSUk9SKTsKIAlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19FUlJPUjsKQEAgLTY5MSwxNCArNjkxLDE0IEBACiAKIAkJdGltZSA9IFJDTlI7CiAJCXdoaWxlKDEpIHsKLQkJCS8qIENoZWNrIGlmIGFueSB3YWtldXAgZXZlbnQgaGFkIG9jY3VyZWQgKi8KKwkJCS8qIENoZWNrIGlmIGFueSB3YWtldXAgZXZlbnQgaGFkIG9jY3VycmVkICovCiAJCQlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlcl93YWtldXAoKSAhPSAwKQogCQkJCXJldHVybiAwOwogCQkJLyogQ2hlY2sgZm9yIHRpbWVvdXQgKi8KIAkJCWlmICgoUkNOUiAtIHRpbWUpID4gU0hBUlBTTF9XQUlUX0NPX1RJTUUpCiAJCQkJcmV0dXJuIDE7CiAJCQlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+cmVhZF9kZXZkYXRhKFNIQVJQU0xfU1RBVFVTX0NIUkdGVUxMKSkgewotCQkJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZXI6IENoYXJnZSBmdWxsIG9jY3VyZWQuIFJldHJ5aW5nIHRvIGNoZWNrXG4iKTsKKwkJCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiT2ZmbGluZSBDaGFyZ2VyOiBDaGFyZ2UgZnVsbCBvY2N1cnJlZC4gUmV0cnlpbmcgdG8gY2hlY2tcbiIpOwogCSAgIAkJCXNoYXJwc2xfcG0uZnVsbF9jb3VudCsrOwogCQkJCXNoYXJwc2xfcG0ubWFjaGluZm8tPmNoYXJnZSgwKTsKIAkJCQltZGVsYXkoU0hBUlBTTF9DSEFSR0VfV0FJVF9USU1FKTsKQEAgLTcxNCw3ICs3MTQsNyBAQAogCiAJdGltZSA9IFJDTlI7CiAJd2hpbGUoMSkgewotCQkvKiBDaGVjayBpZiBhbnkgd2FrZXVwIGV2ZW50IGhhZCBvY2N1cmVkICovCisJCS8qIENoZWNrIGlmIGFueSB3YWtldXAgZXZlbnQgaGFkIG9jY3VycmVkICovCiAJCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5jaGFyZ2VyX3dha2V1cCgpICE9IDApCiAJCQlyZXR1cm4gMDsKIAkJLyogQ2hlY2sgZm9yIHRpbWVvdXQgKi8KQEAgLTc3NCw2ICs3NzQsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzaGFycHNsX3BtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJaW50IHJldDsKKwogCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC03OTIsOCArNzk0LDEwIEBACiAKIAlzaGFycHNsX3BtLm1hY2hpbmZvLT5pbml0KCk7CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2JhdHRlcnlfcGVyY2VudGFnZSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9iYXR0ZXJ5X3ZvbHRhZ2UpOworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfYmF0dGVyeV9wZXJjZW50YWdlKTsKKwlyZXQgfD0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9iYXR0ZXJ5X3ZvbHRhZ2UpOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBhdHRyaWJ1dGVzICglZClcbiIsIHJldCk7CiAKIAlhcG1fZ2V0X3Bvd2VyX3N0YXR1cyA9IHNoYXJwc2xfYXBtX2dldF9wb3dlcl9zdGF0dXM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybGVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybGVrX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmU4YjMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTU3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjEKKyMgTW9uIE1heSAgNyAxNjozMDo0MCAyMDA3CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfU0xBQj15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIEJsb2NrIGxheWVyCisjCitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUOTE9eQorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKworIworIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCisjCisjIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTD15CisKKyMKKyMgQVQ5MVNBTTlSTCBCb2FyZCBUeXBlCisjCitDT05GSUdfTUFDSF9BVDkxU0FNOVJMRUs9eQorCisjCisjIEFUOTEgQm9hcmQgT3B0aW9ucworIworCisjCisjIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTI2VD15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MjExMDAwMDAsMTcxMDUzNjMgcm9vdD0vZGV2L3JhbTAgcnciCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTVREX0RBVEFGTEFTSD15CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfQVQ5MT15CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKworIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTQKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTI0NTc2CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTMyMAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTI0MAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0FUTUVMPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQVRNRUxfVFRZQVQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworQ09ORklHX1dBVENIRE9HPXkKK0NPTkZJR19XQVRDSERPR19OT1dBWU9VVD15CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FUTUVMPXkKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX0FUTUVMPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX1NFUVVFTkNFUj15CitDT05GSUdfU05EX1NFUV9EVU1NWT15CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKK0NPTkZJR19TTkRfREVCVUc9eQorQ09ORklHX1NORF9ERUJVR19ERVRFQ1Q9eQorIyBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgQUxTQSBBUk0gZGV2aWNlcworIworCisjCisjIFNvQyBhdWRpbyBzdXBwb3J0CisjCisjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorCisjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19BVDkxPXkKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva3M4Njk1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mva3M4Njk1X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWIyMWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9rczg2OTVfZGVmY29uZmlnCkBAIC0wLDAgKzEsODgwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmM0CisjIFRodSBNYXkgMjUgMTU6NDI6NTEgMjAwNgorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9LUzg2OTU9eQorCisjCisjIEtlbmRpbi9NaWNyZWwgS1M4Njk1IEltcGxlbWVudGF0aW9ucworIworQ09ORklHX01BQ0hfS1M4Njk1PXkKKyMgQ09ORklHX01BQ0hfRFNNMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ000MDAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ000MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ000MHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTElURTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NFNDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BTkdBX0tTODY5NSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjJUPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0VD15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX1BDST15CitDT05GSUdfUENJX0RFQlVHPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCitDT05GSUdfUENDQVJEPXkKKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPXkKK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorQ09ORklHX1BDTUNJQV9JT0NUTD15CitDT05GSUdfQ0FSREJVUz15CisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCitDT05GSUdfWUVOVEE9eQorQ09ORklHX1lFTlRBX08yPXkKK0NPTkZJR19ZRU5UQV9SSUNPSD15CitDT05GSUdfWUVOVEFfVEk9eQorQ09ORklHX1lFTlRBX0VORV9UVU5FPXkKK0NPTkZJR19ZRU5UQV9UT1NISUJBPXkKKyMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CisjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAorQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9eQorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVMwLDExNTIwMCBpbml0cmQ9MHgyMDQxMDAwMCwzMTQ1NzI4IHJvb3Q9L2Rldi9yYW0wIHJ3IgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorQ09ORklHX0FSTV9LUzg2OTVfRVRIRVI9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0tTODY5NT15CitDT05GSUdfU0VSSUFMX0tTODY5NV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcKaW5kZXggYTY2OThkYy4uNmRiNjM5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcKQEAgLTEsMTUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNwotIyBTYXQgSnVuIDI0IDIyOjQ1OjE0IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMQorIyBNb24gQXByIDMwIDIxOjIzOjIwIDIwMDcKICMKIENPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19aT05FX0RNQT15CiBDT05GSUdfQVJDSF9NVERfWElQPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKQEAgLTI2LDE4ICszOCwyNSBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BVURJVD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQogQ09ORklHX0hPVFBMVUc9eQpAQCAtNDksMTAgKzY4LDExIEBACiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPXkKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtNjAsMTQgKzgwLDE3IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CiAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0xTRj15CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtODUsMTggKzEwOCwyOSBAQAogIwogIyBTeXN0ZW0gVHlwZQogIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKQEAgLTEwNCwxMiArMTM4LDYgQEAKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAogCiAjCiAjIEludGVsIFBYQTJ4eCBJbXBsZW1lbnRhdGlvbnMKQEAgLTEzMywxMSArMTYxLDE2IEBACiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQogCiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwogIwogQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0lXTU1YVD15CiBDT05GSUdfWFNDQUxFX1BNVT15CiAKICMKQEAgLTE0NywxNiArMTgwLDE2IEBACiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKICMKLUNPTkZJR19QQ0NBUkQ9bQorQ09ORklHX1BDQ0FSRD15CiAjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCi1DT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUE9eQorIyBDT05GSUdfUENNQ0lBX0xPQURfQ0lTIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUFfSU9DVEw9eQogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwogIwotQ09ORklHX1BDTUNJQV9QWEEyWFg9bQorQ09ORklHX1BDTUNJQV9QWEEyWFg9eQogCiAjCiAjIEtlcm5lbCBGZWF0dXJlcwpAQCAtMTY0LDcgKzE5Nyw4IEBACiBDT05GSUdfUFJFRU1QVD15CiAjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKIENPTkZJR19IWj0xMDAKLSMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQogIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xNzQsNiArMjA4LDggQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0xFRFM9eQogQ09ORklHX0xFRFNfVElNRVI9eQogQ09ORklHX0xFRFNfQ1BVPXkKQEAgLTE4NCw4ICsyMjAsOSBAQAogIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTAKIENPTkZJR19aQk9PVF9ST01fQlNTPTAKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIGlwPWJvb3RwIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiCitDT05GSUdfQ01ETElORT0icm9vdD1mZTAxIGNvbnNvbGU9dHR5UzAsMzg0MDBuOCBsb2dsZXZlbD01IgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAKICMKICMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCkBAIC0yMDMsMTYgKzI0MCwxNiBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9NSVNDPW0KLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQotQ09ORklHX1BNX0xFR0FDWT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotQ09ORklHX0FQTT15CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTIyMiwxMyArMjU5LDE1IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI0NiwyNCArMjg1LDI1IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogCiAjCiAjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTI3MSwyOSArMzExLDE2IEBACiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19JUF9ORl9DVF9BQ0NUPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLSMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCi0jIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KLQotIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAKICMKICMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCkBAIC0zMTgsNyArMzQ1LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zNzgsNiArNDA0LDcgQEAKICMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QWEFfRklDUCBpcyBub3Qgc2V0CisjIENPTkZJR19NQ1NfRklSIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQogQ09ORklHX0JUX1NDTz1tCkBAIC00MDEsMTQgKzQyOCwyMCBAQAogIyBDT05GSUdfQlRfSENJQkxVRUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJQlRVQVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKK0NPTkZJR19DRkc4MDIxMT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19JRUVFODAyMTE9eQogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQogQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KICMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MjAsMTYgKzQ1MywxMyBAQAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKICMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgogIwogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfUFJPQ19FVkVOVFM9eQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKQEAgLTQ0NSwxMiArNDc1LDEzIEBACiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCiBDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlRMPXkKLUNPTkZJR19ORlRMX1JXPXkKLUNPTkZJR19JTkZUTD15CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00OTAsOSArNTIxLDggQEAKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQogQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDQwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCiBDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKLSMgQ09ORklHX01URF9UUklaRVBTNCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0CkBAIC01MDEsNDIgKzUzMSw0NSBAQAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0JMT0NLMk1URD15CiAKICMKICMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCiAjCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0RPQzIwMDA9eQorQ09ORklHX01URF9ET0MyMDAxPXkKIENPTkZJR19NVERfRE9DMjAwMVBMVVM9eQogQ09ORklHX01URF9ET0NQUk9CRT15CiBDT05GSUdfTVREX0RPQ0VDQz15Ci0jIENPTkZJR19NVERfRE9DUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01URF9ET0NQUk9CRV9BRERSRVNTPTAKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCitDT05GSUdfTVREX0RPQ1BST0JFX0FEVkFOQ0VEPXkKK0NPTkZJR19NVERfRE9DUFJPQkVfQUREUkVTUz0weDQwMDAwMDAKK0NPTkZJR19NVERfRE9DUFJPQkVfSElHSD15CisjIENPTkZJR19NVERfRE9DUFJPQkVfNTVBQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQogIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9IMTkwMCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfSURTPXkKIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQUREUkVTUz0wCi0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQX0JCVFdSSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0FEVkFOQ0VEPXkKK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0FERFJFU1M9MHg0MDAwMDAwCitDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9ISUdIPXkKK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQX0JCVFdSSVRFPXkKICMgQ09ORklHX01URF9OQU5EX1NIQVJQU0wgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkQ9eQorIyBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKIAogIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAKICMKICMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CkBAIC01NDYsNiArNTc5LDcgQEAKICMKICMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CiAjCisjIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKIAogIwogIyBCbG9jayBkZXZpY2VzCkBAIC01NTYsOSArNTkwLDkgQEAKIENPTkZJR19CTEtfREVWX05CRD15CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9NAorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTgKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIApAQCAtNTY2LDYgKzYwMCw3IEBACiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwpAQCAtNTg1LDI3ICs2MjAsMjcgQEAKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwogQ09ORklHX0lERV9HRU5FUklDPXkKLUNPTkZJR19JREVfUFhBX0NGPXkKLUNPTkZJR19JREVfQVJNPXkKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST1tCitDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKICMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKICMKLUNPTkZJR19CTEtfREVWX1NEPW0KK0NPTkZJR19CTEtfREVWX1NEPXkKICMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotQ09ORklHX0NIUl9ERVZfU0c9bQorQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAogCiAjCkBAIC02MTQsMjEgKzY0OSwyMyBAQAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCiAjCiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FU1BfQ09SRSBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIFNDU0kgYWRhcHRlciBzdXBwb3J0CkBAIC02NDAsNiArNjc3LDE0IEBACiAjIENPTkZJR19QQ01DSUFfU1lNNTNDNTAwIGlzIG5vdCBzZXQKIAogIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKK0NPTkZJR19BVEE9bQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX1BDTUNJQT1tCitDT05GSUdfUEFUQV9QTEFURk9STT1tCisKKyMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKICMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKQEAgLTY3NSwxMCArNzIwLDE0IEBACiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKICMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19EQVZJQ09NX1BIWT15CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNjg3LDYgKzczNiw3IEBACiBDT05GSUdfTUlJPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiBDT05GSUdfRE05MDAwPXkKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC03MDEsNDEgKzc1MSwyMyBAQAogIwogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBXaXJlbGVzcyBMQU4KICMKLUNPTkZJR19ORVRfUkFESU89eQotIyBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKLSMKLSMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9XQVZFTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9ORVRXQVZFIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyA4MDIuMTEgRnJlcXVlbmN5IEhvcHBpbmcgY2FyZHMgc3VwcG9ydAotIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTl84MDIxMT15CiAjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIDgwMi4xMWIgSVNBL1BDSSBjYXJkcyBzdXBwb3J0Ci0jCi1DT05GSUdfSEVSTUVTPW0KK0NPTkZJR19IRVJNRVM9eQogIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIDgwMi4xMWIgUGNtY2lhL0NhcmRidXMgY2FyZHMgc3VwcG9ydAotIwotQ09ORklHX1BDTUNJQV9IRVJNRVM9bQotIyBDT05GSUdfUENNQ0lBX1NQRUNUUlVNIGlzIG5vdCBzZXQKLUNPTkZJR19BSVJPX0NTPW0KK0NPTkZJR19QQ01DSUFfSEVSTUVTPXkKK0NPTkZJR19QQ01DSUFfU1BFQ1RSVU09eQorIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKLUNPTkZJR19IT1NUQVA9bQorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CitDT05GSUdfSE9TVEFQPXkKIENPTkZJR19IT1NUQVBfRklSTVdBUkU9eQogQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15Ci1DT05GSUdfSE9TVEFQX0NTPW0KLUNPTkZJR19ORVRfV0lSRUxFU1M9eQorQ09ORklHX0hPU1RBUF9DUz15CisjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTc1Niw2ICs3ODgsNyBAQAogQ09ORklHX1BQUF9NUFBFPW0KICMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CkBAIC03NzAsNiArODAzLDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03ODksMjIgKzgyMywyNyBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9bQogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAotQ09ORklHX01PVVNFX1NFUklBTD15CitDT05GSUdfTU9VU0VfU0VSSUFMPW0KICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKK0NPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwPXkKIENPTkZJR19JTlBVVF9NSVNDPXkKIENPTkZJR19JTlBVVF9VSU5QVVQ9bQogCkBAIC04MjMsNiArODYyLDcgQEAKIENPTkZJR19WVD15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtODYyLDE1ICs5MDIsMTIgQEAKICMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0KLSMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCiAjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CkBAIC04ODIsNyArOTE5LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC05MDIsNiArOTM4LDcgQEAKICMKIENPTkZJR19JMkNfUFhBPXkKIENPTkZJR19JMkNfUFhBX1NMQVZFPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldApAQCAtOTExLDcgKzk0OCw3IEBACiAjCiAjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19FRVBST009bQorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldApAQCAtOTI0LDE4ICs5NjEsOCBAQAogIwogIyBTUEkgc3VwcG9ydAogIwotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19TUElfUFhBMlhYPW0KLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKQEAgLTk0Nyw5ICs5NzQsMTEgQEAKICMKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldApAQCAtOTczLDEwICsxMDAyLDE1IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldApAQCAtOTg3LDE2ICsxMDIxLDE1IEBACiAjCiAKICMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19VQ0IxNDAwPXkKLUNPTkZJR19VQ0IxNDAwX1RTPXkKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAKICMKICMgTEVEIGRldmljZXMKICMKIENPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15CisjIENPTkZJR19MRURTX0NMQVNTIGlzIG5vdCBzZXQKIAogIwogIyBMRUQgZHJpdmVycwpAQCAtMTAwNywxMyArMTA0MCwxMyBAQAogIwogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15Ci1DT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSyBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTEwMjQsMTcgKzEwNTcsMjggQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CiBDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIwogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX1BYQT15CiAjIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjMsMTEgKzExMDcsNiBAQAogQ09ORklHX0xPR09fTElOVVhfTU9OTz15CiBDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9ERVZJQ0U9eQotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0xDRF9ERVZJQ0U9eQogCiAjCiAjIFNvdW5kCkBAIC0xMDgyLDcgKzExMjEsNyBAQAogQ09ORklHX1NORF9QQ009eQogQ09ORklHX1NORF9IV0RFUD1tCiBDT05GSUdfU05EX1JBV01JREk9bQotQ09ORklHX1NORF9TRVFVRU5DRVI9bQorQ09ORklHX1NORF9TRVFVRU5DRVI9eQogIyBDT05GSUdfU05EX1NFUV9EVU1NWSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9eQpAQCAtMTA5MywxMyArMTEzMiwxNCBAQAogQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQogQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RFQlVHPXkKK0NPTkZJR19TTkRfREVCVUdfREVURUNUPXkKKyMgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgR2VuZXJpYyBkZXZpY2VzCiAjCiBDT05GSUdfU05EX0FDOTdfQ09ERUM9eQotQ09ORklHX1NORF9BQzk3X0JVUz15CiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKQEAgLTExMjQsOSArMTE2NCwzMiBAQAogIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0CiAKICMKKyMgU29DIGF1ZGlvIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorCisjCiAjIE9wZW4gU291bmQgU3lzdGVtCiAjCiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9eQorCisjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKKyMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CiAKICMKICMgVVNCIHN1cHBvcnQKQEAgLTExNDEsNyArMTIwNCw3IEBACiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKQEAgLTExNTEsNyArMTIxNCw4IEBACiAjCiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAKQEAgLTExNzksMzggKzEyNDMsMjUgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotQ09ORklHX1VTQl9ISUQ9bQotQ09ORklHX1VTQl9ISURJTlBVVD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1RPVUNIU0NSRUVOPW0KLSMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl9FR0FMQVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX1BBTkpJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fM00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0lUTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwpAQCAtMTIyNSw5ICsxMjc2LDkgQEAKICMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTEyMzYsMjMgKzEyODcsNjYgQEAKICMKICMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAogIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTD1tCisjIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNjIsOSArMTM1NiwxMCBAQAogIwogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKLUNPTkZJR19VU0JfR0FER0VUPXkKK0NPTkZJR19VU0JfR0FER0VUPW0KICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKQEAgLTEyNzIsMTUgKzEzNjcsMTQgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEPXkKLUNPTkZJR19VU0JfRFVNTVlfSENEPXkKK0NPTkZJR19VU0JfRFVNTVlfSENEPW0KIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CiAjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci1DT05GSUdfVVNCX0dBREdFVEZTPW0KLUNPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKICMgTU1DL1NEIENhcmQgc3VwcG9ydApAQCAtMTI5NSw4ICsxMzg5LDggQEAKICMKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFJUQyBpbnRlcmZhY2VzCkBAIC0xMzA0LDE3ICsxMzk4LDI1IEBACiBDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQogQ09ORklHX1JUQ19JTlRGX1BST0M9eQogQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAogCiAjCiAjIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1BDRjg1ODM9bQogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1NBMTEwMD15CiAjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0xMzI4LDYgKzE0MzAsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtMTMzNSwxMCArMTQzOCwxMiBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtMTM2NSw4ICsxNDcwLDEwIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtMTM3NiwxOCArMTQ4MywxNyBAQAogIwogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0pGRlNfRlM9eQotQ09ORklHX0pGRlNfRlNfVkVSQk9TRT0wCi1DT05GSUdfSkZGU19QUk9DX0ZTPXkKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAogQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKICMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQogQ09ORklHX0pGRlMyX1pMSUI9eQogQ09ORklHX0pGRlMyX1JUSU1FPXkKQEAgLTE0MDcsMjAgKzE1MTMsMTggQEAKICMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1YzX0FDTD15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQogIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEPXkKLUNPTkZJR19ORlNEX1YyX0FDTD15CiBDT05GSUdfTkZTRF9WMz15Ci1DT05GSUdfTkZTRF9WM19BQ0w9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU0RfVjQ9eQogQ09ORklHX05GU0RfVENQPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19FWFBPUlRGUz15Ci1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQpAQCAtMTQzMCw3ICsxNTM0LDkgQEAKICMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCiAjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldApAQCAtMTUwNCwyMiArMTYxMCwyOCBAQAogQ09ORklHX05MU19VVEY4PW0KIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPXkKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKIAogIwpAQCAtMTUzMSwyMiArMTY0MywzMSBAQAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPXkKICMgQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX1NFQ0xWTCBpcyBub3Qgc2V0CiAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01END15CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldApAQCAtMTU1NCwxMiArMTY3NSwxMyBAQAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9eQogIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE1NjksNiArMTY5MSw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkMzMj15CkBAIC0xNTc3LDMgKzE3MDAsNiBAQAogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfUkVFRF9TT0xPTU9OPXkKIENPTkZJR19SRUVEX1NPTE9NT05fREVDMTY9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMgYi9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYwppbmRleCA0Nzc5ZjQ3Li5mNzNkNjJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYwpAQCAtNTcsNyArNTcsNyBAQAogI2RlZmluZSBFWFBPUlRfU1lNQk9MX0FMSUFTKHN5bSxvcmlnKQkJXAogIEVYUE9SVF9DUkNfQUxJQVMoc3ltKQkJCQlcCiAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sIF9fa3N5bXRhYl8jI3N5bQlcCi0gIF9fYXR0cmlidXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2tzeW10YWIiKSkpID0JXAorICBfX3VzZWQgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19rc3ltdGFiIikpKSA9CVwKICAgICB7ICh1bnNpZ25lZCBsb25nKSZvcmlnLCAjc3ltIH07CiAKIC8qCkBAIC03Niw2ICs3Niw3IEBACiAKIAkvKiBuZXR3b3JraW5nICovCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CitFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2spOwogRVhQT1JUX1NZTUJPTChfX2NzdW1faXB2Nl9tYWdpYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggM2MwNzhlMy4uMzI3OGU3MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTg1LDcgKzg1LDcgQEAKICAgREVGSU5FKFNfT0xEX1IwLAkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9PUklHX3IwKSk7CiAgIERFRklORShTX0ZSQU1FX1NJWkUsCQlzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKICAgQkxBTksoKTsKLSNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgorI2lmZGVmIENPTkZJR19DUFVfSEFTX0FTSUQKICAgREVGSU5FKE1NX0NPTlRFWFRfSUQsCQlvZmZzZXRvZihzdHJ1Y3QgbW1fc3RydWN0LCBjb250ZXh0LmlkKSk7CiAgIEJMQU5LKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKaW5kZXggYWU4OWNkZC4uMTkzMjZkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKQEAgLTM1Nyw2ICszNTcsMTAgQEAKIC8qIDM0NSAqLwlDQUxMKHN5c19nZXRjcHUpCiAJCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiBldmVudHVhbGx5IGVwb2xsX3B3YWl0ICovCiAJCUNBTEwoc3lzX2tleGVjX2xvYWQpCisJCUNBTEwoc3lzX3V0aW1lbnNhdCkKKwkJQ0FMTChzeXNfc2lnbmFsZmQpCisvKiAzNTAgKi8JQ0FMTChzeXNfdGltZXJmZCkKKwkJQ0FMTChzeXNfZXZlbnRmZCkKICNpZm5kZWYgc3lzY2FsbHNfY291bnRlZAogLmVxdSBzeXNjYWxsc19wYWRkaW5nLCAoKE5SX3N5c2NhbGxzICsgMykgJiB+MykgLSBOUl9zeXNjYWxscwogI2RlZmluZSBzeXNjYWxsc19jb3VudGVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZWNhcmQuYyBiL2FyY2gvYXJtL2tlcm5lbC9lY2FyZC5jCmluZGV4IGJkYmQ3ZGEuLmY1NmQ0OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lY2FyZC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lY2FyZC5jCkBAIC00MSwxMSArNDEsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vZWNhcmQuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CkBAIC05NTgsNiArOTU4LDMxIEBACiB9CiBFWFBPUlRfU1lNQk9MKGVjYXJkX3JlbGVhc2VfcmVzb3VyY2VzKTsKIAordm9pZCBlY2FyZF9zZXRpcnEoc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYywgY29uc3Qgc3RydWN0IGV4cGFuc2lvbl9jYXJkX29wcyAqb3BzLCB2b2lkICppcnFfZGF0YSkKK3sKKwllYy0+aXJxX2RhdGEgPSBpcnFfZGF0YTsKKwliYXJyaWVyKCk7CisJZWMtPm9wcyA9IG9wczsKK30KK0VYUE9SVF9TWU1CT0woZWNhcmRfc2V0aXJxKTsKKwordm9pZCBfX2lvbWVtICplY2FyZG1faW9tYXAoc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYywgdW5zaWduZWQgaW50IHJlcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIG1heHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IGVjYXJkX3Jlc291cmNlX3N0YXJ0KGVjLCByZXMpOworCXVuc2lnbmVkIGxvbmcgZW5kID0gZWNhcmRfcmVzb3VyY2VfZW5kKGVjLCByZXMpOworCisJaWYgKG9mZnNldCA+IChlbmQgLSBzdGFydCkpCisJCXJldHVybiBOVUxMOworCisJc3RhcnQgKz0gb2Zmc2V0OworCWlmIChtYXhzaXplICYmIGVuZCAtIHN0YXJ0ID4gbWF4c2l6ZSkKKwkJZW5kID0gc3RhcnQgKyBtYXhzaXplOworCQorCXJldHVybiBkZXZtX2lvcmVtYXAoJmVjLT5kZXYsIHN0YXJ0LCBlbmQgLSBzdGFydCk7Cit9CitFWFBPUlRfU1lNQk9MKGVjYXJkbV9pb21hcCk7CisKIC8qCiAgKiBQcm9iZSBmb3IgYW4gZXhwYW5zaW9uIGNhcmQuCiAgKgpAQCAtMTEzMyw2ICsxMTU4LDE0IEBACiAJZHJ2LT5yZW1vdmUoZWMpOwogCWVjYXJkX3JlbGVhc2UoZWMpOwogCisJLyoKKwkgKiBSZXN0b3JlIHRoZSBkZWZhdWx0IG9wZXJhdGlvbnMuICBXZSBlbnN1cmUgdGhhdCB0aGUKKwkgKiBvcHMgYXJlIHNldCBiZWZvcmUgd2UgY2hhbmdlIHRoZSBkYXRhLgorCSAqLworCWVjLT5vcHMgPSAmZWNhcmRfZGVmYXVsdF9vcHM7CisJYmFycmllcigpOworCWVjLT5pcnFfZGF0YSA9IE5VTEw7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2hlYWQtbm9tbXUuUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLW5vbW11LlMKaW5kZXggMDExOWMwZC4uNWQ3OGZmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQtbm9tbXUuUworKysgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC1ub21tdS5TCkBAIC0zMyw3ICszMyw3IEBACiAgKiBudW1iZXJzIGZvciByMS4KICAqCiAgKi8KLQlfX0lOSVQKKwkuc2VjdGlvbiAiLnRleHQuaGVhZCIsICJheCIKIAkudHlwZQlzdGV4dCwgJWZ1bmN0aW9uCiBFTlRSWShzdGV4dCkKIAltc3IJY3Bzcl9jLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUgQCBlbnN1cmUgc3ZjIG1vZGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCmluZGV4IDFkMzVlZGEuLjQxZjk4YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwpAQCAtNzMsNyArNzMsNyBAQAogICogY3JhcCBoZXJlIC0gdGhhdCdzIHdoYXQgdGhlIGJvb3QgbG9hZGVyIChvciBpbiBleHRyZW1lLCB3ZWxsIGp1c3RpZmllZAogICogY2lyY3Vtc3RhbmNlcywgekltYWdlKSBpcyBmb3IuCiAgKi8KLQlfX0lOSVQKKwkuc2VjdGlvbiAiLnRleHQuaGVhZCIsICJheCIKIAkudHlwZQlzdGV4dCwgJWZ1bmN0aW9uCiBFTlRSWShzdGV4dCkKIAltc3IJY3Bzcl9jLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUgQCBlbnN1cmUgc3ZjIG1vZGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9pbml0X3Rhc2suYyBiL2FyY2gvYXJtL2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCBhMDBjY2EwLi5iZDRlZjUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaW5pdF90YXNrLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2luaXRfdGFzay5jCkBAIC0zMSw3ICszMSw3IEBACiAgKiBUaGUgdGhpbmdzIHdlIGRvIGZvciBwZXJmb3JtYW5jZS4uCiAgKi8KIHVuaW9uIHRocmVhZF91bmlvbiBpbml0X3RocmVhZF91bmlvbgotCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuaW5pdC50YXNrIikpKSA9CisJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLmluaXRfdGFzayIpKSkgPQogCQl7IElOSVRfVEhSRUFEX0lORk8oaW5pdF90YXNrKSB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCmluZGV4IDFiMDYxNTguLjc5YjdlNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKQEAgLTExNiw4ICsxMTYsOCBAQAogCiAJCQlvZmZzZXQgKz0gc3ltLT5zdF92YWx1ZSAtIGxvYzsKIAkJCWlmIChvZmZzZXQgJiAzIHx8Ci0JCQkgICAgb2Zmc2V0IDw9IChzMzIpMHhmYzAwMDAwMCB8fAotCQkJICAgIG9mZnNldCA+PSAoczMyKTB4MDQwMDAwMDApIHsKKwkJCSAgICBvZmZzZXQgPD0gKHMzMikweGZlMDAwMDAwIHx8CisJCQkgICAgb2Zmc2V0ID49IChzMzIpMHgwMjAwMDAwMCkgewogCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCSAgICAgICAiJXM6IHJlbG9jYXRpb24gb3V0IG9mIHJhbmdlLCBzZWN0aW9uICIKIAkJCQkgICAgICAgIiVkIHJlbG9jICVkIHN5bSAnJXMnXG4iLCBtb2R1bGUtPm5hbWUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMTNhZjQwMC4uNmYyZjQ2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCAwNDUzZGNjLi42NTBlYWMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtOTE4LDcgKzkxOCw3IEBACiAKIAlpZiAoKHByb2Nlc3Nvcl9pZCAmIDB4MDAwOGYwMDApID09IDB4MDAwMDAwMDApIHsKIAkJLyogcHJlLUFSTTcgKi8KLQkJc2VxX3ByaW50ZihtLCAiQ1BVIHBhcnRcdFx0OiAlMDd4XG4iLCBwcm9jZXNzb3JfaWQgPj4gNCk7CisJCXNlcV9wcmludGYobSwgIkNQVSBwYXJ0XHQ6ICUwN3hcbiIsIHByb2Nlc3Nvcl9pZCA+PiA0KTsKIAl9IGVsc2UgewogCQlpZiAoKHByb2Nlc3Nvcl9pZCAmIDB4MDAwOGYwMDApID09IDB4MDAwMDcwMDApIHsKIAkJCS8qIEFSTTcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwppbmRleCAwNzBiY2I3Li4xYjc2ZDg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCkBAIC00ODYsNyArNDg2LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19MT0NBTF9USU1FUlMKLWFzbWxpbmthZ2Ugdm9pZCBkb19sb2NhbF90aW1lcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2Ugdm9pZCBfX2V4Y2VwdGlvbiBkb19sb2NhbF90aW1lcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTU1MSw3ICs1NTEsNyBAQAogICoKICAqICBCaXQgMCAtIEludGVyLXByb2Nlc3NvciBmdW5jdGlvbiBjYWxsCiAgKi8KLWFzbWxpbmthZ2Ugdm9pZCBkb19JUEkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQgX19leGNlcHRpb24gZG9fSVBJKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IGlwaV9kYXRhICppcGkgPSAmcGVyX2NwdShpcGlfZGF0YSwgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IDc3ZWYzNWUuLmFlMzFkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtMSwzICsxLDQgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KIApAQCAtMTIsNyArMTMsNyBAQAogCQkvKgogCQkgKiBDaGVjayBjdXJyZW50IGZyYW1lIHBvaW50ZXIgaXMgd2l0aGluIGJvdW5kcwogCQkgKi8KLQkJaWYgKChmcCAtIDEyKSA8IGxvdyB8fCBmcCArIDQgPj0gaGlnaCkKKwkJaWYgKGZwIDwgKGxvdyArIDEyKSB8fCBmcCArIDQgPj0gaGlnaCkKIAkJCWJyZWFrOwogCiAJCWZyYW1lID0gKHN0cnVjdCBzdGFja2ZyYW1lICopKGZwIC0gMTIpOwpAQCAtMzAsNiArMzEsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHdhbGtfc3RhY2tmcmFtZSk7CiAKICNpZmRlZiBDT05GSUdfU1RBQ0tUUkFDRQogc3RydWN0IHN0YWNrX3RyYWNlX2RhdGEgewpAQCAtNTIsMjEgKzU0LDE1IEBACiAJcmV0dXJuIHRyYWNlLT5ucl9lbnRyaWVzID49IHRyYWNlLT5tYXhfZW50cmllczsKIH0KIAotdm9pZCBzYXZlX3N0YWNrX3RyYWNlKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3ZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQogewogCXN0cnVjdCBzdGFja190cmFjZV9kYXRhIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBmcCwgYmFzZTsKIAogCWRhdGEudHJhY2UgPSB0cmFjZTsKIAlkYXRhLnNraXAgPSB0cmFjZS0+c2tpcDsKLQotCWlmICh0YXNrKSB7Ci0JCWJhc2UgPSAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UodGFzayk7Ci0JCWZwID0gMDsgLyogRklYTUUgKi8KLQl9IGVsc2UgewotCQliYXNlID0gKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKGN1cnJlbnQpOwotCQlhc20oIm1vdiAlMCwgZnAiIDogIj1yIiAoZnApKTsKLQl9CisJYmFzZSA9ICh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZShjdXJyZW50KTsKKwlhc20oIm1vdiAlMCwgZnAiIDogIj1yIiAoZnApKTsKIAogCXdhbGtfc3RhY2tmcmFtZShmcCwgYmFzZSwgYmFzZSArIFRIUkVBRF9TSVpFLCBzYXZlX3RyYWNlLCAmZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc3lzX2FybS5jIGIvYXJjaC9hcm0va2VybmVsL3N5c19hcm0uYwppbmRleCAzZDRmY2JjLi4xY2EyZDUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc3lzX2FybS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMKQEAgLTMyMCw3ICszMjAsNyBAQAogRVhQT1JUX1NZTUJPTChrZXJuZWxfZXhlY3ZlKTsKIAogLyoKLSAqIFNpbmNlIGxvZmZfdCBpcyBhIDY0IGJpdCB0eXBlIHdlIGF2b2lkIGEgbG90IG9mIEFCSSBoYXN0bGUKKyAqIFNpbmNlIGxvZmZfdCBpcyBhIDY0IGJpdCB0eXBlIHdlIGF2b2lkIGEgbG90IG9mIEFCSSBoYXNzbGUKICAqIHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQgb3JkZXJpbmcuCiAgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfYXJtX2ZhZHZpc2U2NF82NChpbnQgZmQsIGludCBhZHZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwppbmRleCBkMDU0MGU0Li4xNTMzZDNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogCiAjaWZkZWYgQ09ORklHX05PX0lETEVfSFoKIAlpZiAoc3lzdGVtX3RpbWVyLT5keW5fdGljaykKLQkJc3lzdGVtX3RpbWVyLT5keW5fdGljay0+bG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKwkJc3Bpbl9sb2NrX2luaXQoJnN5c3RlbV90aW1lci0+ZHluX3RpY2stPmxvY2spOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggZjA1ZTY2Yi4uMTBmZjM2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTI0NSw4ICsyNDUsOCBAQAogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKLXZvaWQgbm90aWZ5X2RpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywKLQkJdW5zaWduZWQgbG9uZyBlcnIsIHVuc2lnbmVkIGxvbmcgdHJhcCkKK3ZvaWQgYXJtX25vdGlmeV9kaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJc3RydWN0IHNpZ2luZm8gKmluZm8sIHVuc2lnbmVkIGxvbmcgZXJyLCB1bnNpZ25lZCBsb25nIHRyYXApCiB7CiAJaWYgKHVzZXJfbW9kZShyZWdzKSkgewogCQljdXJyZW50LT50aHJlYWQuZXJyb3JfY29kZSA9IGVycjsKQEAgLTMzMCw3ICszMzAsNyBAQAogCWluZm8uc2lfY29kZSAgPSBJTExfSUxMT1BDOwogCWluZm8uc2lfYWRkciAgPSBwYzsKIAotCW5vdGlmeV9kaWUoIk9vcHMgLSB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24iLCByZWdzLCAmaW5mbywgMCwgNik7CisJYXJtX25vdGlmeV9kaWUoIk9vcHMgLSB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24iLCByZWdzLCAmaW5mbywgMCwgNik7CiB9CiAKIGFzbWxpbmthZ2Ugdm9pZCBkb191bmV4cF9maXEgKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMzg0LDcgKzM4NCw3IEBACiAJaW5mby5zaV9hZGRyICA9ICh2b2lkIF9fdXNlciAqKWluc3RydWN0aW9uX3BvaW50ZXIocmVncykgLQogCQkJICh0aHVtYl9tb2RlKHJlZ3MpID8gMiA6IDQpOwogCi0Jbm90aWZ5X2RpZSgiT29wcyAtIGJhZCBzeXNjYWxsIiwgcmVncywgJmluZm8sIG4sIDApOworCWFybV9ub3RpZnlfZGllKCJPb3BzIC0gYmFkIHN5c2NhbGwiLCByZWdzLCAmaW5mbywgbiwgMCk7CiAKIAlyZXR1cm4gcmVncy0+QVJNX3IwOwogfQpAQCAtNDI4LDcgKzQyOCw3IEBACiAJCWluZm8uc2lfY29kZSAgPSBTRUdWX01BUEVSUjsKIAkJaW5mby5zaV9hZGRyICA9IE5VTEw7CiAKLQkJbm90aWZ5X2RpZSgiYnJhbmNoIHRocm91Z2ggemVybyIsIHJlZ3MsICZpbmZvLCAwLCAwKTsKKwkJYXJtX25vdGlmeV9kaWUoImJyYW5jaCB0aHJvdWdoIHplcm8iLCByZWdzLCAmaW5mbywgMCwgMCk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBOUihicmVha3BvaW50KTogLyogU1dJIEJSRUFLX1BPSU5UICovCkBAIC01NjQsNyArNTY0LDcgQEAKIAlpbmZvLnNpX2FkZHIgID0gKHZvaWQgX191c2VyICopaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAtCiAJCQkgKHRodW1iX21vZGUocmVncykgPyAyIDogNCk7CiAKLQlub3RpZnlfZGllKCJPb3BzIC0gYmFkIHN5c2NhbGwoMikiLCByZWdzLCAmaW5mbywgbm8sIDApOworCWFybV9ub3RpZnlfZGllKCJPb3BzIC0gYmFkIHN5c2NhbGwoMikiLCByZWdzLCAmaW5mbywgbm8sIDApOwogCXJldHVybiAwOwogfQogCkBAIC02MzgsNyArNjM4LDcgQEAKIAlpbmZvLnNpX2NvZGUgID0gSUxMX0lMTE9QQzsKIAlpbmZvLnNpX2FkZHIgID0gKHZvaWQgX191c2VyICopYWRkcjsKIAotCW5vdGlmeV9kaWUoInVua25vd24gZGF0YSBhYm9ydCBjb2RlIiwgcmVncywgJmluZm8sIGluc3RyLCAwKTsKKwlhcm1fbm90aWZ5X2RpZSgidW5rbm93biBkYXRhIGFib3J0IGNvZGUiLCByZWdzLCAmaW5mbywgaW5zdHIsIDApOwogfQogCiB2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgX19idWcoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZiZTY3MjkuLjJiN2E4ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0yMywxMSArMjMsMTUgQEAKICNlbHNlCiAJLiA9IFBBR0VfT0ZGU0VUICsgVEVYVF9PRkZTRVQ7CiAjZW5kaWYKLQkuaW5pdCA6IHsJCQkvKiBJbml0IGNvZGUgYW5kIGRhdGEJCSovCisJLnRleHQuaGVhZCA6IHsKIAkJX3N0ZXh0ID0gLjsKLQkJCV9zaW5pdHRleHQgPSAuOworCQlfc2luaXR0ZXh0ID0gLjsKKwkJKigudGV4dC5oZWFkKQorCX0KKworCS5pbml0IDogewkJCS8qIEluaXQgY29kZSBhbmQgZGF0YQkJKi8KIAkJCSooLmluaXQudGV4dCkKLQkJCV9laW5pdHRleHQgPSAuOworCQlfZWluaXR0ZXh0ID0gLjsKIAkJX19wcm9jX2luZm9fYmVnaW4gPSAuOwogCQkJKigucHJvYy5pbmZvLmluaXQpCiAJCV9fcHJvY19pbmZvX2VuZCA9IC47CkBAIC04Niw3ICs5MCw3IEBACiAJCQlfX2V4Y2VwdGlvbl90ZXh0X3N0YXJ0ID0gLjsKIAkJCSooLmV4Y2VwdGlvbi50ZXh0KQogCQkJX19leGNlcHRpb25fdGV4dF9lbmQgPSAuOwotCQkJKigudGV4dCkKKwkJCVRFWFRfVEVYVAogCQkJU0NIRURfVEVYVAogCQkJTE9DS19URVhUCiAjaWZkZWYgQ09ORklHX01NVQpAQCAtMTE5LDcgKzEyMyw3IEBACiAJCSAqIGZpcnN0LCB0aGUgaW5pdCB0YXNrIHVuaW9uLCBhbGlnbmVkCiAJCSAqIHRvIGFuIDgxOTIgYnl0ZSBib3VuZGFyeS4KIAkJICovCi0JCSooLmluaXQudGFzaykKKwkJKiguZGF0YS5pbml0X3Rhc2spCiAKICNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAogCQkuID0gQUxJR04oNDA5Nik7CkBAIC0xNTQsNyArMTU4LDcgQEAKIAkJLyoKIAkJICogYW5kIHRoZSB1c3VhbCBkYXRhIHNlY3Rpb24KIAkJICovCi0JCSooLmRhdGEpCisJCURBVEFfREFUQQogCQlDT05TVFJVQ1RPUlMKIAogCQlfZWRhdGEgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2JpdG9wcy5oIGIvYXJjaC9hcm0vbGliL2JpdG9wcy5oCmluZGV4IDU0MjI1MTAuLjJlNzg3ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9iaXRvcHMuaAorKysgYi9hcmNoL2FybS9saWIvYml0b3BzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqIEBzdG9yZTogc3RvcmUgaW5zdHJ1Y3Rpb24KICAqCiAgKiBOb3RlOiB3ZSBjYW4gdHJpdmlhbGx5IGNvbmRpdGlvbmFsaXNlIHRoZSBzdG9yZSBpbnN0cnVjdGlvbgotICogdG8gYXZvaWQgZGlydGluZyB0aGUgZGF0YSBjYWNoZS4KKyAqIHRvIGF2b2lkIGRpcnR5aW5nIHRoZSBkYXRhIGNhY2hlLgogICovCiAJLm1hY3JvCXRlc3RvcCwgaW5zdHIsIHN0b3JlCiAJYWRkCXIxLCByMSwgcjAsIGxzciAjMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2NvcmUuYwppbmRleCBhOTUwMTYwLi4wNDQ2ZWYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2NvcmUuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGFhZWMyMDAwX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiQUFFQy0yMDAwIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIJPSBhYWVjMjAwMF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCmluZGV4IGUyMzhhZDguLmEzMTE1N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCkBAIC0xNyw2ICsxNyw5IEBACiBjb25maWcgQVJDSF9BVDkxU0FNOTI2MwogCWJvb2wgIkFUOTFTQU05MjYzIgogCitjb25maWcgQVJDSF9BVDkxU0FNOVJMCisJYm9vbCAiQVQ5MVNBTTlSTCIKKwogZW5kY2hvaWNlCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA3LDcgKzExMCw3IEBACiAJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05MjYwCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05WEUgU3lzdGVtLW9uLUNoaXAuCi0JICBUaGV5IGFyZSBiYXNpY2FseSBBVDkxU0FNOTI2MHMgd2l0aCB2YXJpb3VzIHNpemVzIG9mIGVtYmVkZGVkIEZsYXNoLgorCSAgVGhleSBhcmUgYmFzaWNhbGx5IEFUOTFTQU05MjYwcyB3aXRoIHZhcmlvdXMgc2l6ZXMgb2YgZW1iZWRkZWQgRmxhc2guCiAKIGNvbW1lbnQgIkFUOTFTQU05MjYwIC8gQVQ5MVNBTTlYRSBCb2FyZCBUeXBlIgogCkBAIC0xNTIsNiArMTU1LDIwIEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitpZiBBUkNIX0FUOTFTQU05UkwKKworY29tbWVudCAiQVQ5MVNBTTlSTCBCb2FyZCBUeXBlIgorCitjb25maWcgTUFDSF9BVDkxU0FNOVJMRUsKKwlib29sICJBdG1lbCBBVDkxU0FNOVJMLUVLIEV2YWx1YXRpb24gS2l0IgorCWRlcGVuZHMgb24gQVJDSF9BVDkxU0FNOVJMCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBBdG1lbCdzIEFUOTFTQU05UkwtRUsgRXZhbHVhdGlvbiBLaXQuCisKK2VuZGlmCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBjb21tZW50ICJBVDkxIEJvYXJkIE9wdGlvbnMiCiAKIGNvbmZpZyBNVERfQVQ5MV9EQVRBRkxBU0hfQ0FSRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCmluZGV4IGE0MTJhZTEuLmE0ZDgwZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAKIG9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05MjYwKQkrPSBhdDkxc2FtOTI2MC5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOTI2MF9kZXZpY2VzLm8KIG9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05MjYxKQkrPSBhdDkxc2FtOTI2MS5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOTI2MV9kZXZpY2VzLm8KIG9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05MjYzKQkrPSBhdDkxc2FtOTI2My5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOTI2M19kZXZpY2VzLm8KK29iai0kKENPTkZJR19BUkNIX0FUOTFTQU05UkwpCSs9IGF0OTFzYW05cmwubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTlybF9kZXZpY2VzLm8KIAogIyBBVDkxUk05MjAwIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX09ORUFSTSkJKz0gYm9hcmQtMWFybS5vCkBAIC0zNiw5ICszNywxMyBAQAogIyBBVDkxU0FNOTI2MyBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOTI2M0VLKSArPSBib2FyZC1zYW05MjYzZWsubwogCisjIEFUOTFTQU05UkwgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlSTEVLKQkrPSBib2FyZC1zYW05cmxlay5vCisKICMgTEVEcyBzdXBwb3J0CiBsZWQtJChDT05GSUdfQVJDSF9BVDkxUk05MjAwREspCSs9IGxlZHMubwogbGVkLSQoQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLKQkrPSBsZWRzLm8KK2xlZC0kKENPTkZJR19NQUNIX0FUOTFTQU05MjYxRUspKz0gbGVkcy5vCiBsZWQtJChDT05GSUdfTUFDSF9DU0IzMzcpCSs9IGxlZHMubwogbGVkLSQoQ09ORklHX01BQ0hfQ1NCNjM3KQkrPSBsZWRzLm8KIGxlZC0kKENPTkZJR19NQUNIX0tCOTIwMCkJKz0gbGVkcy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF9kZXZpY2VzLmMKaW5kZXggMjYyNGE0Zi4uNzA1OTliYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX2RldmljZXMuYwpAQCAtMjIsOSArMjIsNiBAQAogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCi0jZGVmaW5lIFNaXzUxMgkweDAwMDAwMjAwCi0jZGVmaW5lIFNaXzI1NgkweDAwMDAwMTAwCi0jZGVmaW5lIFNaXzE2CTB4MDAwMDAwMTAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBVU0IgSG9zdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfdGltZS5jCmluZGV4IDk0OTE5OWEuLmE2MzQwMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF90aW1lLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gYXQ5MXJtOTIwMF90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gImF0OTFfdGljayIsCi0JLmZsYWdzCQk9IElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIJPSBhdDkxcm05MjAwX3RpbWVyX2ludGVycnVwdAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKaW5kZXggNDA1ODZlMi4uZmZkMzE1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCkBAIC0yMiw5ICsyMiw2IEBACiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKLSNkZWZpbmUgU1pfNTEyCTB4MDAwMDAyMDAKLSNkZWZpbmUgU1pfMjU2CTB4MDAwMDAxMDAKLSNkZWZpbmUgU1pfMTYJMHgwMDAwMDAxMAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFVTQiBIb3N0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxX2RldmljZXMuYwppbmRleCA4ZTc4MTk5Li45ZGI1OGRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjFfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MV9kZXZpY2VzLmMKQEAgLTIzLDkgKzIzLDYgQEAKIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAotI2RlZmluZSBTWl81MTIJMHgwMDAwMDIwMAotI2RlZmluZSBTWl8yNTYJMHgwMDAwMDEwMAotI2RlZmluZSBTWl8xNgkweDAwMDAwMDEwCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgVVNCIEhvc3QKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCmluZGV4IDJiMmUxOGEuLjYzNTY5NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYwpAQCAtMjIsOSArMjIsNiBAQAogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCi0jZGVmaW5lIFNaXzUxMgkweDAwMDAwMjAwCi0jZGVmaW5lIFNaXzI1NgkweDAwMDAwMTAwCi0jZGVmaW5lIFNaXzE2CTB4MDAwMDAwMTAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBVU0IgSG9zdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjZ4X3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2eF90aW1lLmMKaW5kZXggYTRkZGVkMi4uNWMwOTBjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjZ4X3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNnhfdGltZS5jCkBAIC02Niw3ICs2Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGF0OTFzYW05MjZ4X3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiYXQ5MV90aWNrIiwKLQkuZmxhZ3MJCT0gSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKIAkuaGFuZGxlcgk9IGF0OTFzYW05MjZ4X3RpbWVyX2ludGVycnVwdAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmwuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgxM2EzNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsLmMKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybC5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOXJsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9wbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3JzdGMuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGF0OTFzYW05cmxfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9TWVMsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfU1lTKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdDkxc2FtOXJsX3NyYW1fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MVNBTTlSTF9TUkFNX0JBU0UpLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfQorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDbG9ja3MKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBUaGUgcGVyaXBoZXJhbCBjbG9ja3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHBpb0FfY2xrID0geworCS5uYW1lCQk9ICJwaW9BX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1BJT0EsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBwaW9CX2NsayA9IHsKKwkubmFtZQkJPSAicGlvQl9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9QSU9CLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGlvQ19jbGsgPSB7CisJLm5hbWUJCT0gInBpb0NfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfUElPQywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBpb0RfY2xrID0geworCS5uYW1lCQk9ICJwaW9EX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1BJT0QsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB1c2FydDBfY2xrID0geworCS5uYW1lCQk9ICJ1c2FydDBfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVVMwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKKwkubmFtZQkJPSAidXNhcnQxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1VTMSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0Ml9jbGsgPSB7CisJLm5hbWUJCT0gInVzYXJ0Ml9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9VUzIsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB1c2FydDNfY2xrID0geworCS5uYW1lCQk9ICJ1c2FydDNfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVVMzLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgbW1jX2NsayA9IHsKKwkubmFtZQkJPSAibWNpX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX01DSSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHR3aTBfY2xrID0geworCS5uYW1lCQk9ICJ0d2kwX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1RXSTAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0d2kxX2NsayA9IHsKKwkubmFtZQkJPSAidHdpMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9UV0kxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3BpX2NsayA9IHsKKwkubmFtZQkJPSAic3BpX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1NQSSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzYzBfY2xrID0geworCS5uYW1lCQk9ICJzc2MwX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1NTQzAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBzc2MxX2NsayA9IHsKKwkubmFtZQkJPSAic3NjMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9TU0MxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdGMwX2NsayA9IHsKKwkubmFtZQkJPSAidGMwX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX1RDMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jbGsgPSB7CisJLm5hbWUJCT0gInRjMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9UQzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0YzJfY2xrID0geworCS5uYW1lCQk9ICJ0YzJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfVEMyLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcHdtY19jbGsgPSB7CisJLm5hbWUJCT0gInB3bWNfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfUFdNQywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRzY19jbGsgPSB7CisJLm5hbWUJCT0gInRzY19jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9UU0MsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0geworCS5uYW1lCQk9ICJkbWFfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05UkxfSURfRE1BLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdWRwaHNfY2xrID0geworCS5uYW1lCQk9ICJ1ZHBoc19jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9VRFBIUywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGxjZGNfY2xrID0geworCS5uYW1lCQk9ICJsY2RjX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOVJMX0lEX0xDREMsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBhYzk3X2NsayA9IHsKKwkubmFtZQkJPSAiYWM5N19jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlSTF9JRF9BQzk3QywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKnBlcmlwaF9jbG9ja3NbXSBfX2luaXRkYXRhID0geworCSZwaW9BX2NsaywKKwkmcGlvQl9jbGssCisJJnBpb0NfY2xrLAorCSZwaW9EX2NsaywKKwkmdXNhcnQwX2NsaywKKwkmdXNhcnQxX2NsaywKKwkmdXNhcnQyX2NsaywKKwkmdXNhcnQzX2NsaywKKwkmbW1jX2NsaywKKwkmdHdpMF9jbGssCisJJnR3aTFfY2xrLAorCSZzcGlfY2xrLAorCSZzc2MwX2NsaywKKwkmc3NjMV9jbGssCisJJnRjMF9jbGssCisJJnRjMV9jbGssCisJJnRjMl9jbGssCisJJnB3bWNfY2xrLAorCSZ0c2NfY2xrLAorCSZkbWFfY2xrLAorCSZ1ZHBoc19jbGssCisJJmxjZGNfY2xrLAorCSZhYzk3X2NsaywKKwkvLyBpcnEwCit9OworCisvKgorICogVGhlIHR3byBwcm9ncmFtbWFibGUgY2xvY2tzLgorICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7CisJLm5hbWUJCT0gInBjazAiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAorCS5pZAkJPSAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7CisJLm5hbWUJCT0gInBjazEiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAorCS5pZAkJPSAxLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05cmxfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQorCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7CisKKwljbGtfcmVnaXN0ZXIoJnBjazApOworCWNsa19yZWdpc3RlcigmcGNrMSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgR1BJTworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBhdDkxX2dwaW9fYmFuayBhdDkxc2FtOXJsX2dwaW9bXSA9IHsKKwl7CisJCS5pZAkJPSBBVDkxU0FNOVJMX0lEX1BJT0EsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9BLAorCQkuY2xvY2sJCT0gJnBpb0FfY2xrLAorCX0sIHsKKwkJLmlkCQk9IEFUOTFTQU05UkxfSURfUElPQiwKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0IsCisJCS5jbG9jawkJPSAmcGlvQl9jbGssCisJfSwgeworCQkuaWQJCT0gQVQ5MVNBTTlSTF9JRF9QSU9DLAorCQkub2Zmc2V0CQk9IEFUOTFfUElPQywKKwkJLmNsb2NrCQk9ICZwaW9DX2NsaywKKwl9LCB7CisJCS5pZAkJPSBBVDkxU0FNOVJMX0lEX1BJT0QsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9ELAorCQkuY2xvY2sJCT0gJnBpb0RfY2xrLAorCX0KK307CisKK3N0YXRpYyB2b2lkIGF0OTFzYW05cmxfcmVzZXQodm9pZCkKK3sKKwlhdDkxX3N5c193cml0ZShBVDkxX1JTVENfQ1IsIEFUOTFfUlNUQ19LRVkgfCBBVDkxX1JTVENfUFJPQ1JTVCB8IEFUOTFfUlNUQ19QRVJSU1QpOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQVQ5MVNBTTlSTCBwcm9jZXNzb3IgaW5pdGlhbGl6YXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQgX19pbml0IGF0OTFzYW05cmxfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spCit7CisJdW5zaWduZWQgbG9uZyBjaWRyLCBzcmFtX3NpemU7CisKKwkvKiBNYXAgcGVyaXBoZXJhbHMgKi8KKwlpb3RhYmxlX2luaXQoYXQ5MXNhbTlybF9pb19kZXNjLCBBUlJBWV9TSVpFKGF0OTFzYW05cmxfaW9fZGVzYykpOworCisJY2lkciA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9EQkdVX0NJRFIpOworCisJc3dpdGNoIChjaWRyICYgQVQ5MV9DSURSX1NSQU1TSVopIHsKKwkJY2FzZSBBVDkxX0NJRFJfU1JBTVNJWl8zMks6CisJCQlzcmFtX3NpemUgPSAyICogU1pfMTZLOworCQkJYnJlYWs7CisJCWNhc2UgQVQ5MV9DSURSX1NSQU1TSVpfMTZLOgorCQlkZWZhdWx0OgorCQkJc3JhbV9zaXplID0gU1pfMTZLOworCX0KKworCWF0OTFzYW05cmxfc3JhbV9kZXNjLT52aXJ0dWFsID0gQVQ5MV9JT19WSVJUX0JBU0UgLSBzcmFtX3NpemU7CisJYXQ5MXNhbTlybF9zcmFtX2Rlc2MtPmxlbmd0aCA9IHNyYW1fc2l6ZTsKKworCS8qIE1hcCBTUkFNICovCisJaW90YWJsZV9pbml0KGF0OTFzYW05cmxfc3JhbV9kZXNjLCBBUlJBWV9TSVpFKGF0OTFzYW05cmxfc3JhbV9kZXNjKSk7CisKKwlhdDkxX2FyY2hfcmVzZXQgPSBhdDkxc2FtOXJsX3Jlc2V0OworCWF0OTFfZXh0ZXJuX2lycSA9ICgxIDw8IEFUOTFTQU05UkxfSURfSVJRMCk7CisKKwkvKiBJbml0IGNsb2NrIHN1YnN5c3RlbSAqLworCWF0OTFfY2xvY2tfaW5pdChtYWluX2Nsb2NrKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBwcm9jZXNzb3Itc3BlY2lmaWMgY2xvY2tzICovCisJYXQ5MXNhbTlybF9yZWdpc3Rlcl9jbG9ja3MoKTsKKworCS8qIFJlZ2lzdGVyIEdQSU8gc3Vic3lzdGVtICovCisJYXQ5MV9ncGlvX2luaXQoYXQ5MXNhbTlybF9ncGlvLCA0KTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MXNhbTlybF9kZWZhdWx0X2lycV9wcmlvcml0eVtOUl9BSUNfSVJRU10gX19pbml0ZGF0YSA9IHsKKwk3LAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworCTcsCS8qIFN5c3RlbSBQZXJpcGhlcmFscyAqLworCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQSAqLworCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLworCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLworCTEsCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgRCAqLworCTUsCS8qIFVTQVJUIDAgKi8KKwk1LAkvKiBVU0FSVCAxICovCisJNSwJLyogVVNBUlQgMiAqLworCTUsCS8qIFVTQVJUIDMgKi8KKwkwLAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCisJNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDAgKi8KKwk2LAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMSAqLworCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAqLworCTQsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDAgKi8KKwk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAxICovCisJMCwJLyogVGltZXIgQ291bnRlciAwICovCisJMCwJLyogVGltZXIgQ291bnRlciAxICovCisJMCwJLyogVGltZXIgQ291bnRlciAyICovCisJMCwKKwkwLAkvKiBUb3VjaCBTY3JlZW4gQ29udHJvbGxlciAqLworCTAsCS8qIERNQSBDb250cm9sbGVyICovCisJMiwJLyogVVNCIERldmljZSBIaWdoIHNwZWVkIHBvcnQgKi8KKwkyLAkvKiBMQ0QgQ29udHJvbGxlciAqLworCTYsCS8qIEFDOTcgQ29udHJvbGxlciAqLworCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCit9OworCit2b2lkIF9faW5pdCBhdDkxc2FtOXJsX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbTlJfQUlDX0lSUVNdKQoreworCWlmICghcHJpb3JpdHkpCisJCXByaW9yaXR5ID0gYXQ5MXNhbTlybF9kZWZhdWx0X2lycV9wcmlvcml0eTsKKworCS8qIEluaXRpYWxpemUgdGhlIEFJQyBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCWF0OTFfYWljX2luaXQocHJpb3JpdHkpOworCisJLyogRW5hYmxlIEdQSU8gaW50ZXJydXB0cyAqLworCWF0OTFfZ3Bpb19pcnFfc2V0dXAoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDc1MzJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCkBAIC0wLDAgKzEsNjMwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05cmwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOXJsX21hdHJpeC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjZ4X21jLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBNTUMgLyBTRAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01NQ19BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfQVQ5MV9NT0RVTEUpCitzdGF0aWMgdTY0IG1tY19kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworc3RhdGljIHN0cnVjdCBhdDkxX21tY19kYXRhIG1tY19kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1tY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9NQ0ksCisJCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfTUNJICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfTUNJLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9JRF9NQ0ksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX21tY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfbWNpIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZtbWNfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZtbWNfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IG1tY19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tY19yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzaG9ydCBtbWNfaWQsIHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKQoreworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJLyogaW5wdXQvaXJxICovCisJaWYgKGRhdGEtPmRldF9waW4pIHsKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+ZGV0X3BpbiwgMSk7CisJfQorCWlmIChkYXRhLT53cF9waW4pCisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+d3BfcGluLCAxKTsKKwlpZiAoZGF0YS0+dmNjX3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+dmNjX3BpbiwgMCk7CisKKwkvKiBDTEsgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIsIDApOworCisJLyogQ01EICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExLCAxKTsKKworCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTAsIDEpOworCWlmIChkYXRhLT53aXJlNCkgeworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTMsIDEpOworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTQsIDEpOworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTUsIDEpOworCX0KKworCW1tY19kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX21tY19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgTkFORCAvIFNtYXJ0TWVkaWEKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVDkxX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9uYW5kX2RhdGEgbmFuZF9kYXRhOworCisjZGVmaW5lIE5BTkRfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBOQU5EX0JBU0UsCisJCS5lbmQJPSBOQU5EX0JBU0UgKyBTWl8yNTZNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV9uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gbmFuZF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdDkxX25hbmRfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGNzYTsKKworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJY3NhID0gYXQ5MV9zeXNfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfQ1MzQV9TTUNfU01BUlRNRURJQSk7CisKKwkvKiBzZXQgdGhlIGJ1cyBpbnRlcmZhY2UgY2hhcmFjdGVyaXN0aWNzICovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfU0VUVVAoMyksIEFUOTFfU01DX05XRVNFVFVQXygwKSB8IEFUOTFfU01DX05DU19XUlNFVFVQXygwKQorCQkJfCBBVDkxX1NNQ19OUkRTRVRVUF8oMCkgfCBBVDkxX1NNQ19OQ1NfUkRTRVRVUF8oMCkpOworCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfUFVMU0UoMyksIEFUOTFfU01DX05XRVBVTFNFXygyKSB8IEFUOTFfU01DX05DU19XUlBVTFNFXyg1KQorCQkJfCBBVDkxX1NNQ19OUkRQVUxTRV8oMikgfCBBVDkxX1NNQ19OQ1NfUkRQVUxTRV8oNSkpOworCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfQ1lDTEUoMyksIEFUOTFfU01DX05XRUNZQ0xFXyg3KSB8IEFUOTFfU01DX05SRENZQ0xFXyg3KSk7CisKKwlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19NT0RFKDMpLCBBVDkxX1NNQ19EQldfOCB8IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX1RERl8oMSkpOworCisJLyogZW5hYmxlIHBpbiAqLworCWlmIChkYXRhLT5lbmFibGVfcGluKQorCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5lbmFibGVfcGluLCAxKTsKKworCS8qIHJlYWR5L2J1c3kgcGluICovCisJaWYgKGRhdGEtPnJkeV9waW4pCisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cmR5X3BpbiwgMSk7CisKKwkvKiBjYXJkIGRldGVjdCBwaW4gKi8KKwlpZiAoZGF0YS0+ZGV0X3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKKworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNCwgMCk7CQkvKiBOQU5ET0UgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjUsIDApOwkJLyogTkFORFdFICovCisKKwluYW5kX2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFfbmFuZF9kZXZpY2UpOworfQorCisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0OTFfbmFuZF9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUV0kgKGkyYykKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0FUOTFfTU9EVUxFKQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHR3aV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9UV0kwLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX1RXSTAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9JRF9UV0kwLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9JRF9UV0kwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF90d2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX2kyYyIsCisJLmlkCQk9IC0xLAorCS5yZXNvdXJjZQk9IHR3aV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHR3aV9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyh2b2lkKQoreworCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjMsIDApOwkJLyogVFdEICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyMywgMSk7CisKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAwKTsJCS8qIFRXQ0sgKi8KKwlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTI0LCAxKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF90d2lfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHZvaWQpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFNQSQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKK3N0YXRpYyB1NjQgc3BpX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX1NQSSwKKwkJLmVuZAk9IEFUOTFTQU05UkxfQkFTRV9TUEkgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9JRF9TUEksCisJCS5lbmQJPSBBVDkxU0FNOVJMX0lEX1NQSSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05cmxfc3BpX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfc3BpIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJfSwKKwkucmVzb3VyY2UJPSBzcGlfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGlfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzcGlfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BBMjgsIEFUOTFfUElOX1BCNywgQVQ5MV9QSU5fUEQ4LCBBVDkxX1BJTl9QRDkgfTsKKworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBjc19waW47CisKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTI1LCAwKTsJLyogTUlTTyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjYsIDApOwkvKiBNT1NJICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyNywgMCk7CS8qIFNQQ0sgKi8KKworCS8qIEVuYWJsZSBTUEkgY2hpcC1zZWxlY3RzICovCisJZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgeworCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCisJCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7CisJCWVsc2UKKwkJCWNzX3BpbiA9IHNwaV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKworCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGluICovCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7CisKKwkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCisJCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOworCX0KKworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlybF9zcGlfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIExDRCBDb250cm9sbGVyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKK3N0YXRpYyB1NjQgbGNkY19kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvIGxjZGNfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsY2RjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9MQ0RDX0JBU0UsCisJCS5lbmQJPSBBVDkxU0FNOVJMX0xDRENfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfTENEQywKKwkJLmVuZAk9IEFUOTFTQU05UkxfSURfTENEQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9JTlRTUkFNKQorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9TUkFNX0JBU0UsCisJCS5lbmQJPSBBVDkxU0FNOVJMX1NSQU1fQkFTRSArIEFUOTFTQU05UkxfU1JBTV9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9sY2RjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfbGNkZmIiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmbGNkY19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmxjZGNfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGxjZGNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsY2RjX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbGNkYyhzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpIHsKKwkJcmV0dXJuOworCX0KKworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMSwgMCk7CS8qIExDRFBXUiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDNSwgMCk7CS8qIExDREhTWU5DICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM2LCAwKTsJLyogTENERE9UQ0sgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzcsIDApOwkvKiBMQ0RERU4gKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMsIDApOwkvKiBMQ0RDQyAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CS8qIExDREQzICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMCwgMCk7CS8qIExDREQ0ICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMSwgMCk7CS8qIExDREQ1ICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMiwgMCk7CS8qIExDREQ2ICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMywgMCk7CS8qIExDREQ3ICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxNSwgMCk7CS8qIExDREQxMSAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTYsIDApOwkvKiBMQ0REMTIgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzE3LCAwKTsJLyogTENERDEzICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxOCwgMCk7CS8qIExDREQxNCAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMTksIDApOwkvKiBMQ0REMTUgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIwLCAwKTsJLyogTENERDE4ICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyMSwgMCk7CS8qIExDREQxOSAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjIsIDApOwkvKiBMQ0REMjAgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzIzLCAwKTsJLyogTENERDIxICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMyNCwgMCk7CS8qIExDREQyMiAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMjUsIDApOwkvKiBMQ0REMjMgKi8KKworCWxjZGNfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9sY2RjX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIExFRHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19MRURTKQordTggYXQ5MV9sZWRzX2NwdTsKK3U4IGF0OTFfbGVkc190aW1lcjsKKwordm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKQoreworCS8qIEVuYWJsZSBHUElPIHRvIGFjY2VzcyB0aGUgTEVEcyAqLworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNwdV9sZWQsIDEpOworCWF0OTFfc2V0X2dwaW9fb3V0cHV0KHRpbWVyX2xlZCwgMSk7CisKKwlhdDkxX2xlZHNfY3B1CT0gY3B1X2xlZDsKKwlhdDkxX2xlZHNfdGltZXIJPSB0aW1lcl9sZWQ7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTggY3B1X2xlZCwgdTggdGltZXJfbGVkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBVQVJUCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYmd1X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9WQV9CQVNFX1NZUyArIEFUOTFfREJHVSwKKwkJLmVuZAk9IEFUOTFfVkFfQkFTRV9TWVMgKyBBVDkxX0RCR1UgKyBTWl81MTIgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9JRF9TWVMsCisJCS5lbmQJPSBBVDkxX0lEX1NZUywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIGRiZ3VfZGF0YSA9IHsKKwkudXNlX2RtYV90eAk9IDAsCisJLnVzZV9kbWFfcngJPSAwLAkJLyogREJHVSBub3QgY2FwYWJsZSBvZiByZWNlaXZlIERNQSAqLworCS5yZWdzCQk9ICh2b2lkIF9faW9tZW0gKikoQVQ5MV9WQV9CQVNFX1NZUyArIEFUOTFfREJHVSksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX2RiZ3VfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmZGJndV9kYXRhLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAwKTsJCS8qIERSWEQgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAxKTsJCS8qIERUWEQgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzAsCisJCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMwICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfVVMwLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9JRF9VUzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MF9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3VhcnQwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJnVhcnQwX2RhdGEsCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDBfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModm9pZCkKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTYsIDEpOwkJLyogVFhEMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBNywgMCk7CQkvKiBSWEQwICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE5LCAwKTsJCS8qIFJUUzAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEwLCAwKTsJCS8qIENUUzAgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzEsCisJCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfVVMxLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9JRF9VUzEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MV9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3VhcnQxX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJnVhcnQxX2RhdGEsCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorCS5yZXNvdXJjZQk9IHVhcnQxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDFfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQxX3BpbnModm9pZCkKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTExLCAxKTsJCS8qIFRYRDEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEyLCAwKTsJCS8qIFJYRDEgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzIsCisJCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMyICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfVVMyLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9JRF9VUzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3VhcnQyX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAorCS5pZAkJPSAzLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJnVhcnQyX2RhdGEsCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModm9pZCkKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEzLCAxKTsJCS8qIFRYRDIgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE0LCAwKTsJCS8qIFJYRDIgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfQkFTRV9VUzMsCisJCS5lbmQJPSBBVDkxU0FNOVJMX0JBU0VfVVMzICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfVVMzLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9JRF9VUzMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0M19kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOXJsX3VhcnQzX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAorCS5pZAkJPSA0LAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJnVhcnQzX2RhdGEsCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorCS5yZXNvdXJjZQk9IHVhcnQzX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDNfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQzX3BpbnModm9pZCkKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDEpOwkJLyogVFhEMyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMSwgMCk7CQkvKiBSWEQzICovCit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0OTFfdWFydHNbQVRNRUxfTUFYX1VBUlRdOwkvKiB0aGUgVUFSVHMgdG8gdXNlICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlOwkvKiB0aGUgc2VyaWFsIGNvbnNvbGUgZGV2aWNlICovCisKK3ZvaWQgX19pbml0IGF0OTFfaW5pdF9zZXJpYWwoc3RydWN0IGF0OTFfdWFydF9jb25maWcgKmNvbmZpZykKK3sKKwlpbnQgaTsKKworCS8qIEZpbGwgaW4gbGlzdCBvZiBzdXBwb3J0ZWQgVUFSVHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ucl90dHk7IGkrKykgeworCQlzd2l0Y2ggKGNvbmZpZy0+dHR5X21hcFtpXSkgeworCQkJY2FzZSAwOgorCQkJCWNvbmZpZ3VyZV91c2FydDBfcGlucygpOworCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTlybF91YXJ0MF9kZXZpY2U7CisJCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0MF9jbGsiLCAmYXQ5MXNhbTlybF91YXJ0MF9kZXZpY2UuZGV2LCAidXNhcnQiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQljb25maWd1cmVfdXNhcnQxX3BpbnMoKTsKKwkJCQlhdDkxX3VhcnRzW2ldID0gJmF0OTFzYW05cmxfdWFydDFfZGV2aWNlOworCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDFfY2xrIiwgJmF0OTFzYW05cmxfdWFydDFfZGV2aWNlLmRldiwgInVzYXJ0Iik7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKCk7CisJCQkJYXQ5MV91YXJ0c1tpXSA9ICZhdDkxc2FtOXJsX3VhcnQyX2RldmljZTsKKwkJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQyX2NsayIsICZhdDkxc2FtOXJsX3VhcnQyX2RldmljZS5kZXYsICJ1c2FydCIpOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCWNvbmZpZ3VyZV91c2FydDNfcGlucygpOworCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTlybF91YXJ0M19kZXZpY2U7CisJCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0M19jbGsiLCAmYXQ5MXNhbTlybF91YXJ0M19kZXZpY2UuZGV2LCAidXNhcnQiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQljb25maWd1cmVfZGJndV9waW5zKCk7CisJCQkJYXQ5MV91YXJ0c1tpXSA9ICZhdDkxc2FtOXJsX2RiZ3VfZGV2aWNlOworCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJtY2siLCAmYXQ5MXNhbTlybF9kYmd1X2RldmljZS5kZXYsICJ1c2FydCIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQljb250aW51ZTsKKwkJfQorCQlhdDkxX3VhcnRzW2ldLT5pZCA9IGk7CQkvKiB1cGRhdGUgSUQgbnVtYmVyIHRvIG1hcHBlZCBJRCAqLworCX0KKworCS8qIFNldCBzZXJpYWwgY29uc29sZSBkZXZpY2UgKi8KKwlpZiAoY29uZmlnLT5jb25zb2xlX3R0eSA8IEFUTUVMX01BWF9VQVJUKQorCQlhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlID0gYXQ5MV91YXJ0c1tjb25maWctPmNvbnNvbGVfdHR5XTsKKwlpZiAoIWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UpCisJCXByaW50ayhLRVJOX0lORk8gIkFUOTE6IE5vIGRlZmF1bHQgc2VyaWFsIGNvbnNvbGUgZGVmaW5lZC5cbiIpOworfQorCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUFYX1VBUlQ7IGkrKykgeworCQlpZiAoYXQ5MV91YXJ0c1tpXSkKKwkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihhdDkxX3VhcnRzW2ldKTsKKwl9Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9pbml0X3NlcmlhbChzdHJ1Y3QgYXQ5MV91YXJ0X2NvbmZpZyAqY29uZmlnKSB7fQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIFRoZXNlIGRldmljZXMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBkb24ndCBuZWVkIGFueSBib2FyZC1zcGVjaWZpYworICogc2V0dXAuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXJtZXZhLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jCmluZGV4IGI0NTE4NjEuLjc2ZWM4NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXJtZXZhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYwpAQCAtNzksNyArNzksNyBAQAogCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEQ5LAogfTsKIAotLyogRklYTUU6IHVzZXIgZGVwZW5kZW5kICovCisvKiBGSVhNRTogdXNlciBkZXBlbmRhbnQgKi8KIC8vIHN0YXRpYyBzdHJ1Y3QgYXQ5MV9jZl9kYXRhIF9faW5pdGRhdGEgY2FybWV2YV9jZl9kYXRhID0gewogLy8JLmRldF9waW4JPSBBVDkxX1BJTl9QQjAsCiAvLwkucnN0X3Bpbgk9IEFUOTFfUElOX1BDNSwKQEAgLTEwMCwxNyArMTAwLDE3IEBACiAJCS5jaGlwX3NlbGVjdCAgPSAwLAogCQkubWF4X3NwZWVkX2h6ID0gMTAgKiAxMDAwICogMTAwMCwKIAl9LAotCXsgLyogVXNlciBhY2Nlc3NhYmxlIHNwaSAtIGNzMSAoMjUwS0h6KSAqLworCXsgLyogVXNlciBhY2Nlc3NpYmxlIHNwaSAtIGNzMSAoMjUwS0h6KSAqLwogCQkubW9kYWxpYXMgPSAic3BpLWNzMSIsCiAJCS5jaGlwX3NlbGVjdCAgPSAxLAogCQkubWF4X3NwZWVkX2h6ID0gMjUwICogIDEwMDAsCiAJfSwKLQl7IC8qIFVzZXIgYWNjZXNzYWJsZSBzcGkgLSBjczIgKDFNSHopICovCisJeyAvKiBVc2VyIGFjY2Vzc2libGUgc3BpIC0gY3MyICgxTUh6KSAqLwogCQkubW9kYWxpYXMgPSAic3BpLWNzMiIsCiAJCS5jaGlwX3NlbGVjdCAgPSAyLAogCQkubWF4X3NwZWVkX2h6ID0gMSAqIDEwMDAgKiAgMTAwMCwKIAl9LAotCXsgLyogVXNlciBhY2Nlc3NhYmxlIHNwaSAtIGNzMyAoMTBNSHopICovCisJeyAvKiBVc2VyIGFjY2Vzc2libGUgc3BpIC0gY3MzICgxME1IeikgKi8KIAkJLm1vZGFsaWFzID0gInNwaS1jczMiLAogCQkuY2hpcF9zZWxlY3QgID0gMywKIAkJLm1heF9zcGVlZF9oeiA9IDEwICogMTAwMCAqICAxMDAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWRrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZGsuYwppbmRleCA2MDQzYzM4Li5hZjQ5Nzg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZGsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZGsuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqbmFuZF9wYXJ0aXRpb25zKGludCBzaXplLCBpbnQgKm51bV9wYXJ0aXRpb25zKQorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICogX19pbml0IG5hbmRfcGFydGl0aW9ucyhpbnQgc2l6ZSwgaW50ICpudW1fcGFydGl0aW9ucykKIHsKIAkqbnVtX3BhcnRpdGlvbnMgPSBBUlJBWV9TSVpFKGRrX25hbmRfcGFydGl0aW9uKTsKIAlyZXR1cm4gZGtfbmFuZF9wYXJ0aXRpb247CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2I5MjAyLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQta2I5MjAyLmMKaW5kZXggNzZmNmUxZS4uN2Q5YjFhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWtiOTIwMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1rYjkyMDIuYwpAQCAtOTYsNyArOTYsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gKm5hbmRfcGFydGl0aW9ucyhpbnQgc2l6ZSwgaW50ICpudW1fcGFydGl0aW9ucykKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCiB7CiAJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShrYjkyMDJfbmFuZF9wYXJ0aXRpb24pOwogCXJldHVybiBrYjkyMDJfbmFuZF9wYXJ0aXRpb247CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKaW5kZXggYmNmNzE1My4uMjZjYThhYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKQEAgLTYwLDYgKzYwLDkgQEAKIAkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCiAJYXQ5MXNhbTkyNjFfaW5pdGlhbGl6ZSgxODQzMjAwMCk7CiAKKwkvKiBTZXR1cCB0aGUgTEVEcyAqLworCWF0OTFfaW5pdF9sZWRzKEFUOTFfUElOX1BBMTMsIEFUOTFfUElOX1BBMTQpOworCiAJLyogU2V0dXAgdGhlIHNlcmlhbCBwb3J0cyBhbmQgY29uc29sZSAqLwogCWF0OTFfaW5pdF9zZXJpYWwoJmVrX3VhcnRfY29uZmlnKTsKIH0KQEAgLTE3NSw3ICsxNzgsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gKm5hbmRfcGFydGl0aW9ucyhpbnQgc2l6ZSwgaW50ICpudW1fcGFydGl0aW9ucykKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCiB7CiAJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbik7CiAJcmV0dXJuIGVrX25hbmRfcGFydGl0aW9uOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCmluZGV4IGY1NzQ1ODUuLmMxNjRjOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYzZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKQEAgLTE4MCw3ICsxODAsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gKm5hbmRfcGFydGl0aW9ucyhpbnQgc2l6ZSwgaW50ICpudW1fcGFydGl0aW9ucykKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCiB7CiAJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShla19uYW5kX3BhcnRpdGlvbik7CiAJcmV0dXJuIGVrX25hbmRfcGFydGl0aW9uOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOXJsZWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjYxMzIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjZ4X21jLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKworLyoKKyAqIFNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24uCisgKiAgICAwIC4uIDMgPSBVU0FSVDAgLi4gVVNBUlQzCisgKiAgICA0ICAgICAgPSBEQkdVCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91YXJ0X2NvbmZpZyBfX2luaXRkYXRhIGVrX3VhcnRfY29uZmlnID0geworCS5jb25zb2xlX3R0eQk9IDAsCQkJCS8qIHR0eVMwICovCisJLm5yX3R0eQkJPSAyLAorCS50dHlfbWFwCT0geyA0LCAwLCAtMSwgLTEsIC0xIH0JCS8qIHR0eVMwLCAuLi4sIHR0eVM0ICovCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZWtfbWFwX2lvKHZvaWQpCit7CisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLworCWF0OTFzYW05cmxfaW5pdGlhbGl6ZSgxMjAwMDAwMCk7CisKKwkvKiBTZXR1cCB0aGUgc2VyaWFsIHBvcnRzIGFuZCBjb25zb2xlICovCisJYXQ5MV9pbml0X3NlcmlhbCgmZWtfdWFydF9jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZWtfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDkxc2FtOXJsX2luaXRfaW50ZXJydXB0cyhOVUxMKTsKK30KKworCisvKgorICogTUNJIChTRC9NTUMpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0geworCS53aXJlNAkJPSAxLAorCS5kZXRfcGluCT0gQVQ5MV9QSU5fUEExNSwKKy8vCS53cF9waW4JCT0gLi4uIG5vdCBjb25uZWN0ZWQKKy8vCS52Y2NfcGluCT0gLi4uIG5vdCBjb25uZWN0ZWQKK307CisKKworLyoKKyAqIE5BTkQgZmxhc2gKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgZWtfbmFuZF9wYXJ0aXRpb25bXSA9IHsKKwl7CisJCS5uYW1lCT0gIlBhcnRpdGlvbiAxIiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gMjU2ICogMTAyNCwKKwl9LAorCXsKKwkJLm5hbWUJPSAiUGFydGl0aW9uIDIiLAorCQkub2Zmc2V0CT0gMjU2ICogMTAyNCAsCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICogX19pbml0IG5hbmRfcGFydGl0aW9ucyhpbnQgc2l6ZSwgaW50ICpudW1fcGFydGl0aW9ucykKK3sKKwkqbnVtX3BhcnRpdGlvbnMgPSBBUlJBWV9TSVpFKGVrX25hbmRfcGFydGl0aW9uKTsKKwlyZXR1cm4gZWtfbmFuZF9wYXJ0aXRpb247Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9uYW5kX2RhdGEgX19pbml0ZGF0YSBla19uYW5kX2RhdGEgPSB7CisJLmFsZQkJPSAyMSwKKwkuY2xlCQk9IDIyLAorLy8JLmRldF9waW4JPSAuLi4gbm90IGNvbm5lY3RlZAorCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEQxNywKKwkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BCNiwKKwkucGFydGl0aW9uX2luZm8JPSBuYW5kX3BhcnRpdGlvbnMsCisJLmJ1c193aWR0aF8xNgk9IDAsCit9OworCisKKy8qCisgKiBTUEkgZGV2aWNlcworICovCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7CisJewkvKiBEYXRhRmxhc2ggY2hpcCAqLworCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAorCQkuYnVzX251bQk9IDAsCisJfSwKK307CisKKworLyoKKyAqIExDRCBDb250cm9sbGVyCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7CisJeworCQkubmFtZQkJPSAiVFgwOUQ1MFZNMUNDQSBAIDYwIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gMjQwLAkJLnlyZXMJCT0gMzIwLAorCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoNDk2NSksCisKKwkJLmxlZnRfbWFyZ2luCT0gMSwJCS5yaWdodF9tYXJnaW4JPSAzMywKKwkJLnVwcGVyX21hcmdpbgk9IDEsCQkubG93ZXJfbWFyZ2luCT0gMCwKKwkJLmhzeW5jX2xlbgk9IDUsCQkudnN5bmNfbGVuCT0gMSwKKworCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgYXQ5MWZiX2RlZmF1bHRfbW9uc3BlY3MgPSB7CisJLm1hbnVmYWN0dXJlcgk9ICJISVQiLAorCS5tb25pdG9yCT0gIlRYMDlENTBWTTFDQ0EiLAorCisJLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCisJLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCisJLmhmbWluCQk9IDE1MDAwLAorCS5oZm1heAkJPSA2NDAwMCwKKwkudmZtaW4JCT0gNTAsCisJLnZmbWF4CQk9IDE1MCwKK307CisKKyNkZWZpbmUgQVQ5MVNBTTlSTF9ERUZBVUxUX0xDRENPTjIJKEFUTUVMX0xDRENfTUVNT1JfTElUVExFIFwKKwkJCQkJfCBBVE1FTF9MQ0RDX0RJU1RZUEVfVEZUIFwKKwkJCQkJfCBBVE1FTF9MQ0RDX0NMS01PRF9BTFdBWVNBQ1RJVkUpCisKK3N0YXRpYyB2b2lkIGF0OTFfbGNkY19wb3dlcl9jb250cm9sKGludCBvbikKK3sKKwlpZiAob24pCisJCWF0OTFfc2V0X2dwaW9fdmFsdWUoQVQ5MV9QSU5fUEEzMCwgMCk7CS8qIHBvd2VyIHVwICovCisJZWxzZQorCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BBMzAsIDEpOwkvKiBwb3dlciBkb3duICovCit9CisKKy8qIERyaXZlciBkYXRhcyAqLworc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvIF9faW5pdGRhdGEgZWtfbGNkY19kYXRhID0geworCS5kZWZhdWx0X2JwcAkJCT0gMTYsCisJLmRlZmF1bHRfZG1hY29uCQkJPSBBVE1FTF9MQ0RDX0RNQUVOLAorCS5kZWZhdWx0X2xjZGNvbjIJCT0gQVQ5MVNBTTlSTF9ERUZBVUxUX0xDRENPTjIsCisJLmRlZmF1bHRfbW9uc3BlY3MJCT0gJmF0OTFmYl9kZWZhdWx0X21vbnNwZWNzLAorCS5hdG1lbF9sY2RmYl9wb3dlcl9jb250cm9sCT0gYXQ5MV9sY2RjX3Bvd2VyX2NvbnRyb2wsCisJLmd1YXJkX3RpbWUJCQk9IDEsCit9OworCisjZWxzZQorc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvIF9faW5pdGRhdGEgZWtfbGNkY19kYXRhOworI2VuZGlmCisKKworc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBTZXJpYWwgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7CisJLyogSTJDICovCisJYXQ5MV9hZGRfZGV2aWNlX2kyYygpOworCS8qIE5BTkQgKi8KKwlhdDkxX2FkZF9kZXZpY2VfbmFuZCgmZWtfbmFuZF9kYXRhKTsKKwkvKiBTUEkgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc3BpKGVrX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX3NwaV9kZXZpY2VzKSk7CisJLyogTU1DICovCisJYXQ5MV9hZGRfZGV2aWNlX21tYygwLCAmZWtfbW1jX2RhdGEpOworCS8qIExDRCBDb250cm9sbGVyICovCisJYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQVQ5MVNBTTlSTEVLLCAiQXRtZWwgQVQ5MVNBTTlSTC1FSyIpCisJLyogTWFpbnRhaW5lcjogQXRtZWwgKi8KKwkucGh5c19pbwk9IEFUOTFfQkFTRV9TWVMsCisJLmlvX3BnX29mZnN0CT0gKEFUOTFfVkFfQkFTRV9TWVMgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEFUOTFfU0RSQU1fQkFTRSArIDB4MTAwLAorCS50aW1lcgkJPSAmYXQ5MXNhbTkyNnhfdGltZXIsCisJLm1hcF9pbwkJPSBla19tYXBfaW8sCisJLmluaXRfaXJxCT0gZWtfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IGVrX2JvYXJkX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKaW5kZXggYmRhMjYyMi4uNjhlZDcxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCkBAIC0xMywxMiArMTMsMTQgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MF9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jayk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjFfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFzYW05MjYzX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxc2FtOXJsX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIAogIC8qIEludGVycnVwdHMgKi8KIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxcm05MjAwX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjBfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxc2FtOTI2MV9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFzYW05MjYzX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTlybF9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWljX2luaXQodW5zaWduZWQgaW50IHByaW9yaXR5W10pOwogCiAgLyogVGltZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC90aW1lLmMKaW5kZXggNDI4NDkzZC4uZjQyOGFmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC90aW1lLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY2xwczcxMXhfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJDTFBTNzExeCBUaW1lciBUaWNrIiwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAogCS5oYW5kbGVyCT0gcDcyMHRfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzUwMC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2NvcmUuYwppbmRleCAyMzFiOTAwLi40ZGRlMzRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWNscHM3NTAwL2NvcmUuYwpAQCAtMzE2LDcgKzMxNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNscHM3NTAwX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiQ0xQUzc1MDAgVGltZXIgVGljayIsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKIAkuaGFuZGxlcgk9IGNscHM3NTAwX3RpbWVyX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjOTg4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCkBAIC0wLDAgKzEsMjMgQEAKK2lmIEFSQ0hfREFWSU5DSQorCittZW51ICJUSSBEYVZpbmNpIEltcGxlbWVudGF0aW9ucyIKKworY29tbWVudCAiRGFWaW5jaSBDb3JlIFR5cGUiCisKK2NvbmZpZyBBUkNIX0RBVklOQ0k2NDR4CisJZGVmYXVsdCB5CisJYm9vbCAiRGFWaW5jaSA2NDR4IGJhc2VkIHN5c3RlbSIKKworY29tbWVudCAiRGFWaW5jaSBCb2FyZCBUeXBlIgorCitjb25maWcgTUFDSF9EQVZJTkNJX0VWTQorCWJvb2wgIlRJIERhVmluY2kgRVZNIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJNjQ0eAorCWhlbHAKKwkgIENvbmZpZ3VyZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSB3aGV0aGVyIHRoZSBib2FyZCB1c2VkCisJICBmb3IgZGV2ZWxvcG1lbnQgaXMgYSBEYVZpbmNpIEVWTQorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmODhjZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworIworCisjIENvbW1vbiBvYmplY3RzCitvYmoteSAJCQk6PSB0aW1lLm8gaXJxLm8gc2VyaWFsLm8gaW8ubyBpZC5vIHBzYy5vCisKKyMgQm9hcmQgc3BlY2lmaWMKK29iai0kKENPTkZJR19NQUNIX0RBVklOQ0lfRVZNKSAgKz0gYm9hcmQtZXZtLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkZDM2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMyBAQAorICAgenJlbGFkZHIteQk6PSAweDgwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4ODAwMDAxMDAKK2luaXRyZF9waHlzLXkJOj0gMHg4MDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWV2bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzM2MxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZXZtLmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBUSSBEYVZpbmNpIEVWTSBib2FyZCBzdXBwb3J0CisgKgorICogQXV0aG9yOiBLZXZpbiBIaWxtYW4sIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDcgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CisKKy8qIG90aGVyIG1pc2MuIGluaXQgZnVuY3Rpb25zICovCit2b2lkIF9faW5pdCBkYXZpbmNpX3BzY19pbml0KHZvaWQpOwordm9pZCBfX2luaXQgZGF2aW5jaV9pcnFfaW5pdCh2b2lkKTsKK3ZvaWQgX19pbml0IGRhdmluY2lfbWFwX2NvbW1vbl9pbyh2b2lkKTsKKworLyogTk9SIEZsYXNoIGJhc2UgYWRkcmVzcyBzZXQgdG8gQ1MwIGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgTk9SX0ZMQVNIX1BIWVMgMHgwMjAwMDAwMAorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZGF2aW5jaV9ldm1fcGFydGl0aW9uc1tdID0geworCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCA0IHNlY3RvcnMgKi8KKwl7CisJCS5uYW1lCQk9ICJib290bG9hZGVyIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSA0ICogU1pfNjRLLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJLyogYm9vdGxvYWRlciBwYXJhbXMgaW4gdGhlIG5leHQgMSBzZWN0b3JzICovCisJeworCQkubmFtZQkJPSAicGFyYW1zIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzY0SywKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0sCisJLyoga2VybmVsICovCisJeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzJNLAorCQkubWFza19mbGFncwk9IDAKKwl9LAorCS8qIGZpbGUgc3lzdGVtICovCisJeworCQkubmFtZQkJPSAiZmlsZXN5c3RlbSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkubWFza19mbGFncwk9IDAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBkYXZpbmNpX2V2bV9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorCS5wYXJ0cwkJPSBkYXZpbmNpX2V2bV9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZGF2aW5jaV9ldm1fcGFydGl0aW9ucyksCit9OworCisvKiBOT1RFOiBDRkkgcHJvYmUgd2lsbCBjb3JyZWN0bHkgZGV0ZWN0IGZsYXNoIHBhcnQgYXMgMzJNLCBidXQgRU1JRgorICogbGltaXRzIGFkZHJlc3NlcyB0byAxNk0sIHNvIHVzaW5nIGFkZHJlc3NlcyBwYXN0IDE2TSB3aWxsIHdyYXAgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGF2aW5jaV9ldm1fZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IE5PUl9GTEFTSF9QSFlTLAorCS5lbmQJCT0gTk9SX0ZMQVNIX1BIWVMgKyBTWl8xNk0gLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRhdmluY2lfZXZtX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRhdmluY2lfZXZtX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmRhdmluY2lfZXZtX2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRhdmluY2lfZXZtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZkYXZpbmNpX2V2bV9mbGFzaF9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQKK2RhdmluY2lfZXZtX21hcF9pbyh2b2lkKQoreworCWRhdmluY2lfbWFwX2NvbW1vbl9pbygpOworfQorCitzdGF0aWMgX19pbml0IHZvaWQgZGF2aW5jaV9ldm1faW5pdCh2b2lkKQoreworCWRhdmluY2lfcHNjX2luaXQoKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfREFWSU5DSSkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9EQVZJTkNJX01PRFVMRSkKKwlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBib3RoIElERSBhbmQgTk9SIGZsYXNoIGFyZSBlbmFibGVkLCAiCisJICAgICAgICJidXQgc2hhcmUgcGlucy5cblx0IERpc2FibGUgSURFIGZvciBOT1Igc3VwcG9ydC5cbiIpOworI2VuZGlmCisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkYXZpbmNpX2V2bV9kZXZpY2VzLAorCQkJICAgICBBUlJBWV9TSVpFKGRhdmluY2lfZXZtX2RldmljZXMpKTsKK30KKworc3RhdGljIF9faW5pdCB2b2lkIGRhdmluY2lfZXZtX2lycV9pbml0KHZvaWQpCit7CisJZGF2aW5jaV9pcnFfaW5pdCgpOworfQorCitNQUNISU5FX1NUQVJUKERBVklOQ0lfRVZNLCAiRGFWaW5jaSBFVk0iKQorCS8qIE1haW50YWluZXI6IE1vbnRhVmlzdGEgU29mdHdhcmUgPHNvdXJjZUBtdmlzdGEuY29tPiAqLworCS5waHlzX2lvICAgICAgPSBJT19QSFlTLAorCS5pb19wZ19vZmZzdCAgPSAoaW9fcDJ2KElPX1BIWVMpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgID0gKERBVklOQ0lfRERSX0JBU0UgKyAweDEwMCksCisJLm1hcF9pbwkgICAgICA9IGRhdmluY2lfZXZtX21hcF9pbywKKwkuaW5pdF9pcnEgICAgID0gZGF2aW5jaV9ldm1faXJxX2luaXQsCisJLnRpbWVyCSAgICAgID0gJmRhdmluY2lfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IGRhdmluY2lfZXZtX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2lkLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDYwOGY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2lkLmMKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIERhdmluY2kgQ1BVIGlkZW50aWZpY2F0aW9uIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgS29tYWwgU2hhaCA8a29tYWxfc2hhaDgwMjAwM0B5YWhvby5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIE9NQVAxIENQVSBpZGVudGlmaWNhdGlvbiBjb2RlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIEpUQUdfSURfQkFTRQkJMHgwMWM0MDAyOAorCitzdHJ1Y3QgZGF2aW5jaV9pZCB7CisJdTgJdmFyaWFudDsJLyogSlRBRyBJRCBiaXRzIDMxOjI4ICovCisJdTE2CXBhcnRfbm87CS8qIEpUQUcgSUQgYml0cyAyNzoxMiAqLworCXUzMgltYW51ZmFjdHVyZXI7CS8qIEpUQUcgSUQgYml0cyAxMToxICovCisJdTMyCXR5cGU7CQkvKiBDcHUgaWQgYml0cyBbMzE6OF0sIGNwdSBjbGFzcyBiaXRzIFs3OjBdICovCit9OworCisvKiBSZWdpc3RlciB2YWx1ZXMgdG8gZGV0ZWN0IHRoZSBEYVZpbmNpIHZlcnNpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9pZCBkYXZpbmNpX2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkvKiBETTY0NDYgKi8KKwkJLnBhcnRfbm8gICAgICA9IDB4YjcwMCwKKwkJLnZhcmlhbnQgICAgICA9IDB4MCwKKwkJLm1hbnVmYWN0dXJlciA9IDB4MDE3LAorCQkudHlwZQkgICAgICA9IDB4NjQ0NjAwMDAsCisJfSwKK307CisKKy8qCisgKiBHZXQgRGV2aWNlIFBhcnQgTm8uIGZyb20gSlRBRyBJRCByZWdpc3RlcgorICovCitzdGF0aWMgdTE2IF9faW5pdCBkYXZpbmNpX2dldF9wYXJ0X25vKHZvaWQpCit7CisJdTMyIGRldl9pZCwgcGFydF9ubzsKKworCWRldl9pZCA9IGRhdmluY2lfcmVhZGwoSlRBR19JRF9CQVNFKTsKKworCXBhcnRfbm8gPSAoKGRldl9pZCA+PiAxMikgJiAweGZmZmYpOworCisJcmV0dXJuIHBhcnRfbm87Cit9CisKKy8qCisgKiBHZXQgRGV2aWNlIFJldmlzaW9uIGZyb20gSlRBRyBJRCByZWdpc3RlcgorICovCitzdGF0aWMgdTggX19pbml0IGRhdmluY2lfZ2V0X3ZhcmlhbnQodm9pZCkKK3sKKwl1MzIgdmFyaWFudDsKKworCXZhcmlhbnQgPSBkYXZpbmNpX3JlYWRsKEpUQUdfSURfQkFTRSk7CisKKwl2YXJpYW50ID0gKHZhcmlhbnQgPj4gMjgpICYgMHhmOworCisJcmV0dXJuIHZhcmlhbnQ7Cit9CisKK3ZvaWQgX19pbml0IGRhdmluY2lfY2hlY2tfcmV2aXNpb24odm9pZCkKK3sKKwlpbnQgaTsKKwl1MTYgcGFydF9ubzsKKwl1OCB2YXJpYW50OworCisJcGFydF9ubyA9IGRhdmluY2lfZ2V0X3BhcnRfbm8oKTsKKwl2YXJpYW50ID0gZGF2aW5jaV9nZXRfdmFyaWFudCgpOworCisJLyogRmlyc3QgY2hlY2sgb25seSB0aGUgbWFqb3IgdmVyc2lvbiBpbiBhIHNhZmUgd2F5ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF2aW5jaV9pZHMpOyBpKyspIHsKKwkJaWYgKHBhcnRfbm8gPT0gKGRhdmluY2lfaWRzW2ldLnBhcnRfbm8pKSB7CisJCQlzeXN0ZW1fcmV2ID0gZGF2aW5jaV9pZHNbaV0udHlwZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogQ2hlY2sgaWYgd2UgY2FuIGZpbmQgdGhlIGRldiByZXZpc2lvbiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdmluY2lfaWRzKTsgaSsrKSB7CisJCWlmIChwYXJ0X25vID09IGRhdmluY2lfaWRzW2ldLnBhcnRfbm8gJiYKKwkJICAgIHZhcmlhbnQgPT0gZGF2aW5jaV9pZHNbaV0udmFyaWFudCkgeworCQkJc3lzdGVtX3JldiA9IGRhdmluY2lfaWRzW2ldLnR5cGU7CisJCQlicmVhazsKKwkJfQorCX0KKworCXByaW50aygiRGFWaW5jaSBETSUwNHggdmFyaWFudCAweCV4XG4iLCBzeXN0ZW1fcmV2ID4+IDE2LCB2YXJpYW50KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pby5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdmYWU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pby5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBEYVZpbmNpIEkvTyBtYXBwaW5nIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworZXh0ZXJuIHZvaWQgZGF2aW5jaV9jaGVja19yZXZpc2lvbih2b2lkKTsKKworLyoKKyAqIFRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5IHByb3ZpZGUgdGhlIGV4dHJhIG1hcHBpbmcgYmVzaWRlcyB0aGUKKyAqIGRlZmF1bHQgbWFwcGluZyBwcm92aWRlZCBoZXJlLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGRhdmluY2lfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IElPX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihJT19QSFlTKSwKKwkJLmxlbmd0aAkJPSBJT19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorfTsKKwordm9pZCBfX2luaXQgZGF2aW5jaV9tYXBfY29tbW9uX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KGRhdmluY2lfaW9fZGVzYywgQVJSQVlfU0laRShkYXZpbmNpX2lvX2Rlc2MpKTsKKworCS8qIE5vcm1hbGx5IGRldmljZW1hcHNfaW5pdCgpIHdvdWxkIGZsdXNoIGNhY2hlcyBhbmQgdGxiIGFmdGVyCisJICogbWRlc2MtPm1hcF9pbygpLCBidXQgd2UgbXVzdCBhbHNvIGRvIGl0IGhlcmUgYmVjYXVzZSBvZiB0aGUgQ1BVCisJICogcmV2aXNpb24gY2hlY2sgYmVsb3cuCisJICovCisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworCWZsdXNoX2NhY2hlX2FsbCgpOworCisJLyogV2Ugd2FudCB0byBjaGVjayBDUFUgcmV2aXNpb24gZWFybHkgZm9yIGNwdV9pc194eHh4KCkgbWFjcm9zLgorCSAqIElPIHNwYWNlIG1hcHBpbmcgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgd2UgY2FuIGRvIHRoYXQuCisJICovCisJZGF2aW5jaV9jaGVja19yZXZpc2lvbigpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMzNkODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaXJxLmMKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgRGFWaW5jaSBib2FyZHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRleGFzIEluc3RydW1lbnRzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjZGVmaW5lIElSUV9CSVQoaXJxKQkJKChpcnEpICYgMHgxZikKKworI2RlZmluZSBGSVFfUkVHMF9PRkZTRVQJCTB4MDAwMAorI2RlZmluZSBGSVFfUkVHMV9PRkZTRVQJCTB4MDAwNAorI2RlZmluZSBJUlFfUkVHMF9PRkZTRVQJCTB4MDAwOAorI2RlZmluZSBJUlFfUkVHMV9PRkZTRVQJCTB4MDAwQworI2RlZmluZSBJUlFfRU5UX1JFRzBfT0ZGU0VUCTB4MDAxOAorI2RlZmluZSBJUlFfRU5UX1JFRzFfT0ZGU0VUCTB4MDAxQworI2RlZmluZSBJUlFfSU5DVExfUkVHX09GRlNFVAkweDAwMjAKKyNkZWZpbmUgSVJRX0VBQkFTRV9SRUdfT0ZGU0VUCTB4MDAyNAorI2RlZmluZSBJUlFfSU5UUFJJMF9SRUdfT0ZGU0VUCTB4MDAzMAorI2RlZmluZSBJUlFfSU5UUFJJN19SRUdfT0ZGU0VUCTB4MDA0QworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYXZpbmNpX2lycV9yZWFkbChpbnQgb2Zmc2V0KQoreworCXJldHVybiBkYXZpbmNpX3JlYWRsKERBVklOQ0lfQVJNX0lOVENfQkFTRSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYXZpbmNpX2lycV93cml0ZWwodW5zaWduZWQgbG9uZyB2YWx1ZSwgaW50IG9mZnNldCkKK3sKKwlkYXZpbmNpX3dyaXRlbCh2YWx1ZSwgREFWSU5DSV9BUk1fSU5UQ19CQVNFICsgb2Zmc2V0KTsKK30KKworLyogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KK3N0YXRpYyB2b2lkIGRhdmluY2lfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwl1MzIgbDsKKworCW1hc2sgPSAxIDw8IElSUV9CSVQoaXJxKTsKKworCWlmIChpcnEgPiAzMSkgeworCQlsID0gZGF2aW5jaV9pcnFfcmVhZGwoSVJRX0VOVF9SRUcxX09GRlNFVCk7CisJCWwgJj0gfm1hc2s7CisJCWRhdmluY2lfaXJxX3dyaXRlbChsLCBJUlFfRU5UX1JFRzFfT0ZGU0VUKTsKKwl9IGVsc2UgeworCQlsID0gZGF2aW5jaV9pcnFfcmVhZGwoSVJRX0VOVF9SRUcwX09GRlNFVCk7CisJCWwgJj0gfm1hc2s7CisJCWRhdmluY2lfaXJxX3dyaXRlbChsLCBJUlFfRU5UX1JFRzBfT0ZGU0VUKTsKKwl9Cit9CisKKy8qIEVuYWJsZSBpbnRlcnJ1cHQgKi8KK3N0YXRpYyB2b2lkIGRhdmluY2lfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBtYXNrOworCXUzMiBsOworCisJbWFzayA9IDEgPDwgSVJRX0JJVChpcnEpOworCisJaWYgKGlycSA+IDMxKSB7CisJCWwgPSBkYXZpbmNpX2lycV9yZWFkbChJUlFfRU5UX1JFRzFfT0ZGU0VUKTsKKwkJbCB8PSBtYXNrOworCQlkYXZpbmNpX2lycV93cml0ZWwobCwgSVJRX0VOVF9SRUcxX09GRlNFVCk7CisJfSBlbHNlIHsKKwkJbCA9IGRhdmluY2lfaXJxX3JlYWRsKElSUV9FTlRfUkVHMF9PRkZTRVQpOworCQlsIHw9IG1hc2s7CisJCWRhdmluY2lfaXJxX3dyaXRlbChsLCBJUlFfRU5UX1JFRzBfT0ZGU0VUKTsKKwl9Cit9CisKKy8qIEVPSSBpbnRlcnJ1cHQgKi8KK3N0YXRpYyB2b2lkIGRhdmluY2lfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBtYXNrOworCisJbWFzayA9IDEgPDwgSVJRX0JJVChpcnEpOworCisJaWYgKGlycSA+IDMxKQorCQlkYXZpbmNpX2lycV93cml0ZWwobWFzaywgSVJRX1JFRzFfT0ZGU0VUKTsKKwllbHNlCisJCWRhdmluY2lfaXJxX3dyaXRlbChtYXNrLCBJUlFfUkVHMF9PRkZTRVQpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGRhdmluY2lfaXJxX2NoaXBfMCA9IHsKKwkubmFtZQk9ICJBSU5UQyIsCisJLmFjawk9IGRhdmluY2lfYWNrX2lycSwKKwkubWFzawk9IGRhdmluY2lfbWFza19pcnEsCisJLnVubWFzayA9IGRhdmluY2lfdW5tYXNrX2lycSwKK307CisKKworLyogRklRIGFyZSBwcmkgMC0xOyBvdGhlcndpc2UgMi03LCB3aXRoIDcgbG93ZXN0IHByaW9yaXR5ICovCitzdGF0aWMgY29uc3QgdTggZGVmYXVsdF9wcmlvcml0aWVzW0RBVklOQ0lfTl9BSU5UQ19JUlFdIF9faW5pdGRhdGEgPSB7CisJW0lSUV9WRElOVDBdCQk9IDIsCisJW0lSUV9WRElOVDFdCQk9IDYsCisJW0lSUV9WRElOVDJdCQk9IDYsCisJW0lSUV9ISVNUSU5UXQkJPSA2LAorCVtJUlFfSDNBSU5UXQkJPSA2LAorCVtJUlFfUFJWVUlOVF0JCT0gNiwKKwlbSVJRX1JTWklOVF0JCT0gNiwKKwlbN10JCQk9IDcsCisJW0lSUV9WRU5DSU5UXQkJPSA2LAorCVtJUlFfQVNRSU5UXQkJPSA2LAorCVtJUlFfSU1YSU5UXQkJPSA2LAorCVtJUlFfVkxDRElOVF0JCT0gNiwKKwlbSVJRX1VTQklOVF0JCT0gNCwKKwlbSVJRX0VNQUNJTlRdCQk9IDQsCisJWzE0XQkJCT0gNywKKwlbMTVdCQkJPSA3LAorCVtJUlFfQ0NJTlQwXQkJPSA1LAkvKiBkbWEgKi8KKwlbSVJRX0NDRVJSSU5UXQkJPSA1LAkvKiBkbWEgKi8KKwlbSVJRX1RDRVJSSU5UMF0JCT0gNSwJLyogZG1hICovCisJW0lSUV9UQ0VSUklOVF0JCT0gNSwJLyogZG1hICovCisJW0lSUV9QU0NJTl0JCT0gNywKKwlbMjFdCQkJPSA3LAorCVtJUlFfSURFXQkJPSA0LAorCVsyM10JCQk9IDcsCisJW0lSUV9NQlhJTlRdCQk9IDcsCisJW0lSUV9NQlJJTlRdCQk9IDcsCisJW0lSUV9NTUNJTlRdCQk9IDcsCisJW0lSUV9TRElPSU5UXQkJPSA3LAorCVsyOF0JCQk9IDcsCisJW0lSUV9ERFJJTlRdCQk9IDcsCisJW0lSUV9BRU1JRklOVF0JCT0gNywKKwlbSVJRX1ZMUUlOVF0JCT0gNCwKKwlbSVJRX1RJTlQwX1RJTlQxMl0JPSAyLAkvKiBjbG9ja2V2ZW50ICovCisJW0lSUV9USU5UMF9USU5UMzRdCT0gMiwJLyogY2xvY2tzb3VyY2UgKi8KKwlbSVJRX1RJTlQxX1RJTlQxMl0JPSA3LAkvKiBEU1AgdGltZXIgKi8KKwlbSVJRX1RJTlQxX1RJTlQzNF0JPSA3LAkvKiBzeXN0ZW0gdGljayAqLworCVtJUlFfUFdNSU5UMF0JCT0gNywKKwlbSVJRX1BXTUlOVDFdCQk9IDcsCisJW0lSUV9QV01JTlQyXQkJPSA3LAorCVtJUlFfSTJDXQkJPSAzLAorCVtJUlFfVUFSVElOVDBdCQk9IDMsCisJW0lSUV9VQVJUSU5UMV0JCT0gMywKKwlbSVJRX1VBUlRJTlQyXQkJPSAzLAorCVtJUlFfU1BJTlQwXQkJPSAzLAorCVtJUlFfU1BJTlQxXQkJPSAzLAorCVs0NV0JCQk9IDcsCisJW0lSUV9EU1AyQVJNMF0JCT0gNCwKKwlbSVJRX0RTUDJBUk0xXQkJPSA0LAorCVtJUlFfR1BJTzBdCQk9IDcsCisJW0lSUV9HUElPMV0JCT0gNywKKwlbSVJRX0dQSU8yXQkJPSA3LAorCVtJUlFfR1BJTzNdCQk9IDcsCisJW0lSUV9HUElPNF0JCT0gNywKKwlbSVJRX0dQSU81XQkJPSA3LAorCVtJUlFfR1BJTzZdCQk9IDcsCisJW0lSUV9HUElPN10JCT0gNywKKwlbSVJRX0dQSU9CTkswXQkJPSA3LAorCVtJUlFfR1BJT0JOSzFdCQk9IDcsCisJW0lSUV9HUElPQk5LMl0JCT0gNywKKwlbSVJRX0dQSU9CTkszXQkJPSA3LAorCVtJUlFfR1BJT0JOSzRdCQk9IDcsCisJW0lSUV9DT01NVFhdCQk9IDcsCisJW0lSUV9DT01NUlhdCQk9IDcsCisJW0lSUV9FTVVJTlRdCQk9IDcsCit9OworCisvKiBBUk0gSW50ZXJydXB0IENvbnRyb2xsZXIgSW5pdGlhbGl6YXRpb24gKi8KK3ZvaWQgX19pbml0IGRhdmluY2lfaXJxX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpOworCWNvbnN0IHU4ICpwcmlvcml0eSA9IGRlZmF1bHRfcHJpb3JpdGllczsKKworCS8qIENsZWFyIGFsbCBpbnRlcnJ1cHQgcmVxdWVzdHMgKi8KKwlkYXZpbmNpX2lycV93cml0ZWwofjB4MCwgRklRX1JFRzBfT0ZGU0VUKTsKKwlkYXZpbmNpX2lycV93cml0ZWwofjB4MCwgRklRX1JFRzFfT0ZGU0VUKTsKKwlkYXZpbmNpX2lycV93cml0ZWwofjB4MCwgSVJRX1JFRzBfT0ZGU0VUKTsKKwlkYXZpbmNpX2lycV93cml0ZWwofjB4MCwgSVJRX1JFRzFfT0ZGU0VUKTsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwlkYXZpbmNpX2lycV93cml0ZWwoMHgwLCBJUlFfRU5UX1JFRzBfT0ZGU0VUKTsKKwlkYXZpbmNpX2lycV93cml0ZWwoMHgwLCBJUlFfRU5UX1JFRzFfT0ZGU0VUKTsKKworCS8qIEludGVycnVwdHMgZGlzYWJsZWQgaW1tZWRpYXRlbHksIElSUSBlbnRyeSByZWZsZWN0cyBhbGwgKi8KKwlkYXZpbmNpX2lycV93cml0ZWwoMHgwLCBJUlFfSU5DVExfUkVHX09GRlNFVCk7CisKKwkvKiB3ZSBkb24ndCB1c2UgdGhlIGhhcmR3YXJlIHZlY3RvciB0YWJsZSwganVzdCBpdHMgZW50cnkgYWRkcmVzc2VzICovCisJZGF2aW5jaV9pcnFfd3JpdGVsKDAsIElSUV9FQUJBU0VfUkVHX09GRlNFVCk7CisKKwkvKiBDbGVhciBhbGwgaW50ZXJydXB0IHJlcXVlc3RzICovCisJZGF2aW5jaV9pcnFfd3JpdGVsKH4weDAsIEZJUV9SRUcwX09GRlNFVCk7CisJZGF2aW5jaV9pcnFfd3JpdGVsKH4weDAsIEZJUV9SRUcxX09GRlNFVCk7CisJZGF2aW5jaV9pcnFfd3JpdGVsKH4weDAsIElSUV9SRUcwX09GRlNFVCk7CisJZGF2aW5jaV9pcnFfd3JpdGVsKH4weDAsIElSUV9SRUcxX09GRlNFVCk7CisKKwlmb3IgKGkgPSBJUlFfSU5UUFJJMF9SRUdfT0ZGU0VUOyBpIDw9IElSUV9JTlRQUkk3X1JFR19PRkZTRVQ7IGkgKz0gNCkgeworCQl1bnNpZ25lZAlqOworCQl1MzIJCXByaTsKKworCQlmb3IgKGogPSAwLCBwcmkgPSAwOyBqIDwgMzI7IGogKz0gNCwgcHJpb3JpdHkrKykKKwkJCXByaSB8PSAoKnByaW9yaXR5ICYgMHgwNykgPDwgajsKKwkJZGF2aW5jaV9pcnFfd3JpdGVsKHByaSwgaSk7CisJfQorCisJLyogc2V0IHVwIGdlbmlycSBkaXNwYXRjaCBmb3IgQVJNIElOVEMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgREFWSU5DSV9OX0FJTlRDX0lSUTsgaSsrKSB7CisJCXNldF9pcnFfY2hpcChpLCAmZGF2aW5jaV9pcnFfY2hpcF8wKTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJCWlmIChpICE9IElSUV9USU5UMV9USU5UMzQpCisJCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJZWxzZQorCQkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9wc2MuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9wc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWIwMDUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3BzYy5jCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogVEkgRGFWaW5jaSBQb3dlciBhbmQgU2xlZXAgQ29udHJvbGxlciAoUFNDKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBUZXhhcyBJbnN0cnVtZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wc2MuaD4KKworI2RlZmluZSBQVENNRAkgICAgIF9fUkVHKDB4MDFDNDExMjApCisjZGVmaW5lIFBEU1RBVAkgICAgIF9fUkVHKDB4MDFDNDEyMDApCisjZGVmaW5lIFBEQ1RMMQkgICAgIF9fUkVHKDB4MDFDNDEzMDQpCisjZGVmaW5lIEVQQ1BSCSAgICAgX19SRUcoMHgwMUM0MTA3MCkKKyNkZWZpbmUgUFRTVEFUCSAgICAgX19SRUcoMHgwMUM0MTEyOCkKKworI2RlZmluZSBNRFNUQVQJICAgICBJT19BRERSRVNTKDB4MDFDNDE4MDApCisjZGVmaW5lIE1EQ1RMCSAgICAgSU9fQUREUkVTUygweDAxQzQxQTAwKQorCisjZGVmaW5lIFBJTk1VWDAJICAgICBfX1JFRygweDAxYzQwMDAwKQorI2RlZmluZSBQSU5NVVgxCSAgICAgX19SRUcoMHgwMWM0MDAwNCkKKyNkZWZpbmUgVkREM1AzVl9QV0ROIF9fUkVHKDB4MDFDNDAwNDgpCisKK3N0YXRpYyB2b2lkIGRhdmluY2lfcHNjX211eCh1bnNpZ25lZCBpbnQgaWQpCit7CisJc3dpdGNoIChpZCkgeworCWNhc2UgREFWSU5DSV9MUFNDX0FUQToKKwkJUElOTVVYMCB8PSAoMSA8PCAxNykgfCAoMSA8PCAxNik7CisJCWJyZWFrOworCWNhc2UgREFWSU5DSV9MUFNDX01NQ19TRDoKKwkJLyogVkREIHBvd2VyIG1hbnVwdWxhdGlvbnMgYXJlIGRvbmUgaW4gVS1Cb290IGZvciBDUE1BQworCQkgKiBzbyBhcHBsaWVzIHRvIE1NQyBhcyB3ZWxsCisJCSAqLworCQkvKlNldCB1cCB0aGUgcHVsbCByZWdpdGVyIGZvciBNTUMgKi8KKwkJVkREM1AzVl9QV0ROID0gMHgwOworCQlQSU5NVVgxICY9ICh+KDEgPDwgOSkpOworCQlicmVhazsKKwljYXNlIERBVklOQ0lfTFBTQ19JMkM6CisJCVBJTk1VWDEgfD0gKDEgPDwgNyk7CisJCWJyZWFrOworCWNhc2UgREFWSU5DSV9MUFNDX01jQlNQOgorCQlQSU5NVVgxIHw9ICgxIDw8IDEwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKiBFbmFibGUgb3IgZGlzYWJsZSBhIFBTQyBkb21haW4gKi8KK3ZvaWQgZGF2aW5jaV9wc2NfY29uZmlnKHVuc2lnbmVkIGludCBkb21haW4sIHVuc2lnbmVkIGludCBpZCwgY2hhciBlbmFibGUpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICptZHN0YXQgPSAodW5zaWduZWQgaW50ICopKChpbnQpTURTVEFUICsgNCAqIGlkKTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKm1kY3RsID0gKHVuc2lnbmVkIGludCAqKSgoaW50KU1EQ1RMICsgNCAqIGlkKTsKKworCWlmIChpZCA8IDApCisJCXJldHVybjsKKworCWlmIChlbmFibGUpCisJCSptZGN0bCB8PSAweDAwMDAwMDAzOwkvKiBFbmFibGUgTW9kdWxlICovCisJZWxzZQorCQkqbWRjdGwgJj0gMHhGRkZGRkZGMjsJLyogRGlzYWJsZSBNb2R1bGUgKi8KKworCWlmICgoUERTVEFUICYgMHgwMDAwMDAwMSkgPT0gMCkgeworCQlQRENUTDEgfD0gMHgxOworCQlQVENNRCA9ICgxIDw8IGRvbWFpbik7CisJCXdoaWxlICgoKChFUENQUiA+PiBkb21haW4pICYgMSkgPT0gMCkpOworCisJCVBEQ1RMMSB8PSAweDEwMDsKKwkJd2hpbGUgKCEoKChQVFNUQVQgPj4gZG9tYWluKSAmIDEpID09IDApKTsKKwl9IGVsc2UgeworCQlQVENNRCA9ICgxIDw8IGRvbWFpbik7CisJCXdoaWxlICghKCgoUFRTVEFUID4+IGRvbWFpbikgJiAxKSA9PSAwKSk7CisJfQorCisJaWYgKGVuYWJsZSkKKwkJd2hpbGUgKCEoKCptZHN0YXQgJiAweDAwMDAwMDFGKSA9PSAweDMpKTsKKwllbHNlCisJCXdoaWxlICghKCgqbWRzdGF0ICYgMHgwMDAwMDAxRikgPT0gMHgyKSk7CisKKwlpZiAoZW5hYmxlKQorCQlkYXZpbmNpX3BzY19tdXgoaWQpOworfQorCit2b2lkIF9faW5pdCBkYXZpbmNpX3BzY19pbml0KHZvaWQpCit7CisJZGF2aW5jaV9wc2NfY29uZmlnKERBVklOQ0lfR1BTQ19BUk1ET01BSU4sIERBVklOQ0lfTFBTQ19WUFNTTVNUUiwgMSk7CisJZGF2aW5jaV9wc2NfY29uZmlnKERBVklOQ0lfR1BTQ19BUk1ET01BSU4sIERBVklOQ0lfTFBTQ19WUFNTU0xWLCAxKTsKKwlkYXZpbmNpX3BzY19jb25maWcoREFWSU5DSV9HUFNDX0FSTURPTUFJTiwgREFWSU5DSV9MUFNDX1RQQ0MsIDEpOworCWRhdmluY2lfcHNjX2NvbmZpZyhEQVZJTkNJX0dQU0NfQVJNRE9NQUlOLCBEQVZJTkNJX0xQU0NfVFBUQzAsIDEpOworCWRhdmluY2lfcHNjX2NvbmZpZyhEQVZJTkNJX0dQU0NfQVJNRE9NQUlOLCBEQVZJTkNJX0xQU0NfVFBUQzEsIDEpOworCWRhdmluY2lfcHNjX2NvbmZpZyhEQVZJTkNJX0dQU0NfQVJNRE9NQUlOLCBEQVZJTkNJX0xQU0NfR1BJTywgMSk7CisKKwkvKiBUdXJuIG9uIFdhdGNoRG9nIHRpbWVyIExQU0MuCSBOZWVkZWQgZm9yIFJFU0VUIHRvIHdvcmsgKi8KKwlkYXZpbmNpX3BzY19jb25maWcoREFWSU5DSV9HUFNDX0FSTURPTUFJTiwgREFWSU5DSV9MUFNDX1RJTUVSMiwgMSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2OGM5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9zZXJpYWwuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogVEkgRGFWaW5jaSBzZXJpYWwgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRleGFzIEluc3RydW1lbnRzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorCisjZGVmaW5lIFVBUlRfREFWSU5DSV9QV1JFTVUgMHgwYworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYXZpbmNpX3NlcmlhbF9pbihzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnVwLAorCQkJCQkgIGludCBvZmZzZXQpCit7CisJb2Zmc2V0IDw8PSB1cC0+cmVnc2hpZnQ7CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpX19yYXdfcmVhZGIodXAtPm1lbWJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGF2aW5jaV9zZXJpYWxfb3V0cChzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAsCisJCQkJICAgICAgIGludCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlvZmZzZXQgPDw9IHAtPnJlZ3NoaWZ0OworCV9fcmF3X3dyaXRlYih2YWx1ZSwgcC0+bWVtYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tZW1iYXNlCT0gKGNoYXIgKilJT19BRERSRVNTKERBVklOQ0lfVUFSVDBfQkFTRSksCisJCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpREFWSU5DSV9VQVJUMF9CQVNFLAorCQkuaXJxCQk9IElSUV9VQVJUSU5UMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSAyNzAwMDAwMCwKKwl9LAorCXsKKwkJLmZsYWdzCQk9IDAKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJCT0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGRhdmluY2lfc2VyaWFsX3Jlc2V0KHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCkKK3sKKwkvKiByZXNldCBib3RoIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlcjogYml0cyAxNCwxMyA9IFVUUlNULCBVUlJTVCAqLworCXVuc2lnbmVkIGludCBwd3JlbXUgPSAwOworCisJZGF2aW5jaV9zZXJpYWxfb3V0cChwLCBVQVJUX0lFUiwgMCk7ICAvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisKKwlkYXZpbmNpX3NlcmlhbF9vdXRwKHAsIFVBUlRfREFWSU5DSV9QV1JFTVUsIHB3cmVtdSk7CisJbWRlbGF5KDEwKTsKKworCXB3cmVtdSB8PSAoMHgzIDw8IDEzKTsKKwlwd3JlbXUgfD0gMHgxOworCWRhdmluY2lfc2VyaWFsX291dHAocCwgVUFSVF9EQVZJTkNJX1BXUkVNVSwgcHdyZW11KTsKK30KKworc3RhdGljIGludCBfX2luaXQgZGF2aW5jaV9pbml0KHZvaWQpCit7CisJZGF2aW5jaV9zZXJpYWxfcmVzZXQoJnNlcmlhbF9wbGF0Zm9ybV9kYXRhWzBdKTsKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKK30KKworYXJjaF9pbml0Y2FsbChkYXZpbmNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4NDI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS90aW1lLmMKQEAgLTAsMCArMSwzNzIgQEAKKy8qCisgKiBEYVZpbmNpIHRpbWVyIHN1YnN5c3RlbQorICoKKyAqIEF1dGhvcjogS2V2aW4gSGlsbWFuLCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA3IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNsb2NrZXZlbnRfZGF2aW5jaTsKKworI2RlZmluZSBEQVZJTkNJX1RJTUVSMF9CQVNFIChJT19QSFlTICsgMHgyMTQwMCkKKyNkZWZpbmUgREFWSU5DSV9USU1FUjFfQkFTRSAoSU9fUEhZUyArIDB4MjE4MDApCisjZGVmaW5lIERBVklOQ0lfV0RPR19CQVNFICAgKElPX1BIWVMgKyAweDIxQzAwKQorCitlbnVtIHsKKwlUMF9CT1QgPSAwLCBUMF9UT1AsIFQxX0JPVCwgVDFfVE9QLCBOVU1fVElNRVJTLAorfTsKKworI2RlZmluZSBJU19USU1FUjEoaWQpICAgIChpZCAmIDB4MikKKyNkZWZpbmUgSVNfVElNRVIwKGlkKSAgICAoIUlTX1RJTUVSMShpZCkpCisjZGVmaW5lIElTX1RJTUVSX1RPUChpZCkgKChpZCAmIDB4MSkpCisjZGVmaW5lIElTX1RJTUVSX0JPVChpZCkgKCFJU19USU1FUl9UT1AoaWQpKQorCitzdGF0aWMgaW50IHRpbWVyX2lycXNbTlVNX1RJTUVSU10gPSB7CisJSVJRX1RJTlQwX1RJTlQxMiwKKwlJUlFfVElOVDBfVElOVDM0LAorCUlSUV9USU5UMV9USU5UMTIsCisJSVJRX1RJTlQxX1RJTlQzNCwKK307CisKKy8qCisgKiBUaGlzIGRyaXZlciBjb25maWd1cmVzIHRoZSAyIDY0LWJpdCBjb3VudC11cCB0aW1lcnMgYXMgNCBpbmRlcGVuZGVudAorICogMzItYml0IGNvdW50LXVwIHRpbWVycyB1c2VkIGFzIGZvbGxvd3M6CisgKgorICogVDBfQk9UOiBUaW1lciAwLCBib3R0b206ICBjbG9ja2V2ZW50IHNvdXJjZSBmb3IgaHJ0aW1lcnMKKyAqIFQwX1RPUDogVGltZXIgMCwgdG9wICAgOiAgY2xvY2tzb3VyY2UgZm9yIGdlbmVyaWMgdGltZWtlZXBpbmcKKyAqIFQxX0JPVDogVGltZXIgMSwgYm90dG9tOiAgKHVzZWQgYnkgRFNQIGluIFRJIERTUExpbmsgY29kZSkKKyAqIFQxX1RPUDogVGltZXIgMSwgdG9wICAgOiAgPHVudXNlZD4KKyAqLworI2RlZmluZSBUSURfQ0xPQ0tFVkVOVCAgVDBfQk9UCisjZGVmaW5lIFRJRF9DTE9DS1NPVVJDRSBUMF9UT1AKKworLyogVGltZXIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBQSUQxMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBUSU0xMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgVElNMzQgICAgICAgICAgICAgICAgICAgICAgICAweDE0CisjZGVmaW5lIFBSRDEyICAgICAgICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBQUkQzNCAgICAgICAgICAgICAgICAgICAgICAgIDB4MWMKKyNkZWZpbmUgVENSICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFRHQ1IgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNAorI2RlZmluZSBXRFRDUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgKKworLyogVGltZXIgcmVnaXN0ZXIgYml0ZmllbGRzICovCisjZGVmaW5lIFRDUl9FTkFNT0RFX0RJU0FCTEUgICAgICAgICAgMHgwCisjZGVmaW5lIFRDUl9FTkFNT0RFX09ORVNIT1QgICAgICAgICAgMHgxCisjZGVmaW5lIFRDUl9FTkFNT0RFX1BFUklPRElDICAgICAgICAgMHgyCisjZGVmaW5lIFRDUl9FTkFNT0RFX01BU0sgICAgICAgICAgICAgMHgzCisKKyNkZWZpbmUgVEdDUl9USU1NT0RFX1NISUZUICAgICAgICAgICAyCisjZGVmaW5lIFRHQ1JfVElNTU9ERV82NEJJVF9HUCAgICAgICAgMHgwCisjZGVmaW5lIFRHQ1JfVElNTU9ERV8zMkJJVF9VTkNIQUlORUQgMHgxCisjZGVmaW5lIFRHQ1JfVElNTU9ERV82NEJJVF9XRE9HICAgICAgMHgyCisjZGVmaW5lIFRHQ1JfVElNTU9ERV8zMkJJVF9DSEFJTkVEICAgMHgzCisKKyNkZWZpbmUgVEdDUl9USU0xMlJTX1NISUZUICAgICAgICAgICAwCisjZGVmaW5lIFRHQ1JfVElNMzRSU19TSElGVCAgICAgICAgICAgMQorI2RlZmluZSBUR0NSX1JFU0VUICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBUR0NSX1VOUkVTRVQgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBUR0NSX1JFU0VUX01BU0sgICAgICAgICAgICAgIDB4MworCisjZGVmaW5lIFdEVENSX1dERU5fU0hJRlQgICAgICAgICAgICAgMTQKKyNkZWZpbmUgV0RUQ1JfV0RFTl9ESVNBQkxFICAgICAgICAgICAweDAKKyNkZWZpbmUgV0RUQ1JfV0RFTl9FTkFCTEUgICAgICAgICAgICAweDEKKyNkZWZpbmUgV0RUQ1JfV0RLRVlfU0hJRlQgICAgICAgICAgICAxNgorI2RlZmluZSBXRFRDUl9XREtFWV9TRVEwICAgICAgICAgICAgIDB4YTVjNgorI2RlZmluZSBXRFRDUl9XREtFWV9TRVExICAgICAgICAgICAgIDB4ZGE3ZQorCitzdHJ1Y3QgdGltZXJfcyB7CisJY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJdW5zaWduZWQgbG9uZyBwZXJpb2Q7CisJdW5zaWduZWQgbG9uZyBvcHRzOworCXVuc2lnbmVkIGxvbmcgcmVnX2Jhc2U7CisJdW5zaWduZWQgbG9uZyB0aW1fcmVnOworCXVuc2lnbmVkIGxvbmcgcHJkX3JlZzsKKwl1bnNpZ25lZCBsb25nIGVuYW1vZGVfc2hpZnQ7CisJc3RydWN0IGlycWFjdGlvbiBpcnFhY3Rpb247Cit9Oworc3RhdGljIHN0cnVjdCB0aW1lcl9zIHRpbWVyc1tdOworCisvKiB2YWx1ZXMgZm9yICdvcHRzJyBmaWVsZCBvZiBzdHJ1Y3QgdGltZXJfcyAqLworI2RlZmluZSBUSU1FUl9PUFRTX0RJU0FCTEVEICAgMHgwMAorI2RlZmluZSBUSU1FUl9PUFRTX09ORVNIT1QgICAgMHgwMQorI2RlZmluZSBUSU1FUl9PUFRTX1BFUklPRElDICAgMHgwMgorCitzdGF0aWMgaW50IHRpbWVyMzJfY29uZmlnKHN0cnVjdCB0aW1lcl9zICp0KQoreworCXUzMiB0Y3IgPSBkYXZpbmNpX3JlYWRsKHQtPnJlZ19iYXNlICsgVENSKTsKKworCS8qIGRpc2FibGUgdGltZXIgKi8KKwl0Y3IgJj0gfihUQ1JfRU5BTU9ERV9NQVNLIDw8IHQtPmVuYW1vZGVfc2hpZnQpOworCWRhdmluY2lfd3JpdGVsKHRjciwgdC0+cmVnX2Jhc2UgKyBUQ1IpOworCisJLyogcmVzZXQgY291bnRlciB0byB6ZXJvLCBzZXQgbmV3IHBlcmlvZCAqLworCWRhdmluY2lfd3JpdGVsKDAsIHQtPnRpbV9yZWcpOworCWRhdmluY2lfd3JpdGVsKHQtPnBlcmlvZCwgdC0+cHJkX3JlZyk7CisKKwkvKiBTZXQgZW5hYmxlIG1vZGUgKi8KKwlpZiAodC0+b3B0cyAmIFRJTUVSX09QVFNfT05FU0hPVCkgeworCQl0Y3IgfD0gVENSX0VOQU1PREVfT05FU0hPVCA8PCB0LT5lbmFtb2RlX3NoaWZ0OworCX0gZWxzZSBpZiAodC0+b3B0cyAmIFRJTUVSX09QVFNfUEVSSU9ESUMpIHsKKwkJdGNyIHw9IFRDUl9FTkFNT0RFX1BFUklPRElDIDw8IHQtPmVuYW1vZGVfc2hpZnQ7CisJfQorCisJZGF2aW5jaV93cml0ZWwodGNyLCB0LT5yZWdfYmFzZSArIFRDUik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHRpbWVyMzJfcmVhZChzdHJ1Y3QgdGltZXJfcyAqdCkKK3sKKwlyZXR1cm4gZGF2aW5jaV9yZWFkbCh0LT50aW1fcmVnKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJmNsb2NrZXZlbnRfZGF2aW5jaTsKKworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogY2FsbGVkIHdoZW4gMzItYml0IGNvdW50ZXIgd3JhcHMgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBmcmVlcnVuX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHRpbWVyX3MgdGltZXJzW10gPSB7CisJW1RJRF9DTE9DS0VWRU5UXSA9IHsKKwkJLm5hbWUgICAgICA9ICJjbG9ja2V2ZW50IiwKKwkJLm9wdHMgICAgICA9IFRJTUVSX09QVFNfRElTQUJMRUQsCisJCS5pcnFhY3Rpb24gPSB7CisJCQkuZmxhZ3MgICA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCQkJLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCisJCX0KKwl9LAorCVtUSURfQ0xPQ0tTT1VSQ0VdID0geworCQkubmFtZSAgICAgICA9ICJmcmVlLXJ1biBjb3VudGVyIiwKKwkJLnBlcmlvZCAgICAgPSB+MCwKKwkJLm9wdHMgICAgICAgPSBUSU1FUl9PUFRTX1BFUklPRElDLAorCQkuaXJxYWN0aW9uID0geworCQkJLmZsYWdzICAgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkJCS5oYW5kbGVyID0gZnJlZXJ1bl9pbnRlcnJ1cHQsCisJCX0KKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHRpbWVyX2luaXQodm9pZCkKK3sKKwl1MzIgYmFzZXNbXSA9IHtEQVZJTkNJX1RJTUVSMF9CQVNFLCBEQVZJTkNJX1RJTUVSMV9CQVNFfTsKKwlpbnQgaTsKKworCS8qIEdsb2JhbCBpbml0IG9mIGVhY2ggNjQtYml0IHRpbWVyIGFzIGEgd2hvbGUgKi8KKwlmb3IoaT0wOyBpPDI7IGkrKykgeworCQl1MzIgdGdjciwgYmFzZSA9IGJhc2VzW2ldOworCisJCS8qIERpc2FibGVkLCBJbnRlcm5hbCBjbG9jayBzb3VyY2UgKi8KKwkJZGF2aW5jaV93cml0ZWwoMCwgYmFzZSArIFRDUik7CisKKwkJLyogcmVzZXQgYm90aCB0aW1lcnMsIG5vIHByZS1zY2FsZXIgZm9yIHRpbWVyMzQgKi8KKwkJdGdjciA9IDA7CisJCWRhdmluY2lfd3JpdGVsKHRnY3IsIGJhc2UgKyBUR0NSKTsKKworCQkvKiBTZXQgYm90aCB0aW1lcnMgdG8gdW5jaGFpbmVkIDMyLWJpdCAqLworCQl0Z2NyID0gVEdDUl9USU1NT0RFXzMyQklUX1VOQ0hBSU5FRCA8PCBUR0NSX1RJTU1PREVfU0hJRlQ7CisJCWRhdmluY2lfd3JpdGVsKHRnY3IsIGJhc2UgKyBUR0NSKTsKKworCQkvKiBVbnJlc2V0IHRpbWVycyAqLworCQl0Z2NyIHw9IChUR0NSX1VOUkVTRVQgPDwgVEdDUl9USU0xMlJTX1NISUZUKSB8CisJCQkoVEdDUl9VTlJFU0VUIDw8IFRHQ1JfVElNMzRSU19TSElGVCk7CisJCWRhdmluY2lfd3JpdGVsKHRnY3IsIGJhc2UgKyBUR0NSKTsKKworCQkvKiBJbml0IGJvdGggY291bnRlcnMgdG8gemVybyAqLworCQlkYXZpbmNpX3dyaXRlbCgwLCBiYXNlICsgVElNMTIpOworCQlkYXZpbmNpX3dyaXRlbCgwLCBiYXNlICsgVElNMzQpOworCX0KKworCS8qIEluaXQgb2YgZWFjaCB0aW1lciBhcyBhIDMyLWJpdCB0aW1lciAqLworCWZvciAoaT0wOyBpPCBBUlJBWV9TSVpFKHRpbWVycyk7IGkrKykgeworCQlzdHJ1Y3QgdGltZXJfcyAqdCA9ICZ0aW1lcnNbaV07CisKKwkJaWYgKHQtPm5hbWUpIHsKKwkJCXQtPmlkID0gaTsKKwkJCXQtPnJlZ19iYXNlID0gKElTX1RJTUVSMSh0LT5pZCkgPworCQkJICAgICAgIERBVklOQ0lfVElNRVIxX0JBU0UgOiBEQVZJTkNJX1RJTUVSMF9CQVNFKTsKKworCQkJaWYgKElTX1RJTUVSX0JPVCh0LT5pZCkpIHsKKwkJCQl0LT5lbmFtb2RlX3NoaWZ0ID0gNjsKKwkJCQl0LT50aW1fcmVnID0gdC0+cmVnX2Jhc2UgKyBUSU0xMjsKKwkJCQl0LT5wcmRfcmVnID0gdC0+cmVnX2Jhc2UgKyBQUkQxMjsKKwkJCX0gZWxzZSB7CisJCQkJdC0+ZW5hbW9kZV9zaGlmdCA9IDIyOworCQkJCXQtPnRpbV9yZWcgPSB0LT5yZWdfYmFzZSArIFRJTTM0OworCQkJCXQtPnByZF9yZWcgPSB0LT5yZWdfYmFzZSArIFBSRDM0OworCQkJfQorCisJCQkvKiBSZWdpc3RlciBpbnRlcnJ1cHQgKi8KKwkJCXQtPmlycWFjdGlvbi5uYW1lID0gdC0+bmFtZTsKKwkJCXQtPmlycWFjdGlvbi5kZXZfaWQgPSAodm9pZCAqKXQ7CisJCQlpZiAodC0+aXJxYWN0aW9uLmhhbmRsZXIgIT0gTlVMTCkgeworCQkJCXNldHVwX2lycSh0aW1lcl9pcnFzW3QtPmlkXSwgJnQtPmlycWFjdGlvbik7CisJCQl9CisKKwkJCXRpbWVyMzJfY29uZmlnKCZ0aW1lcnNbaV0pOworCQl9CisJfQorfQorCisvKgorICogY2xvY2tzb3VyY2UKKyAqLworc3RhdGljIGN5Y2xlX3QgcmVhZF9jeWNsZXModm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXJfcyAqdCA9ICZ0aW1lcnNbVElEX0NMT0NLU09VUkNFXTsKKworCXJldHVybiAoY3ljbGVzX3QpdGltZXIzMl9yZWFkKHQpOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX2RhdmluY2kgPSB7CisJLm5hbWUJCT0gInRpbWVyMF8xIiwKKwkucmF0aW5nCQk9IDMwMCwKKwkucmVhZAkJPSByZWFkX2N5Y2xlcywKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuc2hpZnQJCT0gMjQsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworLyoKKyAqIGNsb2NrZXZlbnQKKyAqLworc3RhdGljIGludCBkYXZpbmNpX3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgY3ljbGVzLAorCQkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXN0cnVjdCB0aW1lcl9zICp0ID0gJnRpbWVyc1tUSURfQ0xPQ0tFVkVOVF07CisKKwl0LT5wZXJpb2QgPSBjeWNsZXM7CisJdGltZXIzMl9jb25maWcodCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRhdmluY2lfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlzdHJ1Y3QgdGltZXJfcyAqdCA9ICZ0aW1lcnNbVElEX0NMT0NLRVZFTlRdOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJdC0+cGVyaW9kID0gQ0xPQ0tfVElDS19SQVRFIC8gKEhaKTsKKwkJdC0+b3B0cyA9IFRJTUVSX09QVFNfUEVSSU9ESUM7CisJCXRpbWVyMzJfY29uZmlnKHQpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCXQtPm9wdHMgPSBUSU1FUl9PUFRTX09ORVNIT1Q7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJCXQtPm9wdHMgPSBUSU1FUl9PUFRTX0RJU0FCTEVEOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNsb2NrZXZlbnRfZGF2aW5jaSA9IHsKKwkubmFtZQkJPSAidGltZXIwXzAiLAorCS5mZWF0dXJlcyAgICAgICA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuc2hpZnQJCT0gMzIsCisJLnNldF9uZXh0X2V2ZW50CT0gZGF2aW5jaV9zZXRfbmV4dF9ldmVudCwKKwkuc2V0X21vZGUJPSBkYXZpbmNpX3NldF9tb2RlLAorfTsKKworCitzdGF0aWMgdm9pZCBfX2luaXQgZGF2aW5jaV90aW1lcl9pbml0KHZvaWQpCit7CisJc3RhdGljIGNoYXIgZXJyW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSCisJCSIlczogY2FuJ3QgcmVnaXN0ZXIgY2xvY2tzb3VyY2UhXG4iOworCisJLyogaW5pdCB0aW1lciBodyAqLworCXRpbWVyX2luaXQoKTsKKworCS8qIHNldHVwIGNsb2Nrc291cmNlICovCisJY2xvY2tzb3VyY2VfZGF2aW5jaS5tdWx0ID0KKwkJY2xvY2tzb3VyY2Vfa2h6Mm11bHQoQ0xPQ0tfVElDS19SQVRFLzEwMDAsCisJCQkJICAgICBjbG9ja3NvdXJjZV9kYXZpbmNpLnNoaWZ0KTsKKwlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2RhdmluY2kpKQorCQlwcmludGsoZXJyLCBjbG9ja3NvdXJjZV9kYXZpbmNpLm5hbWUpOworCisJLyogc2V0dXAgY2xvY2tldmVudCAqLworCWNsb2NrZXZlbnRfZGF2aW5jaS5tdWx0ID0gZGl2X3NjKENMT0NLX1RJQ0tfUkFURSwgTlNFQ19QRVJfU0VDLAorCQkJCQkgY2xvY2tldmVudF9kYXZpbmNpLnNoaWZ0KTsKKwljbG9ja2V2ZW50X2RhdmluY2kubWF4X2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygweGZmZmZmZmZlLCAmY2xvY2tldmVudF9kYXZpbmNpKTsKKwljbG9ja2V2ZW50X2RhdmluY2kubWluX2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygxLCAmY2xvY2tldmVudF9kYXZpbmNpKTsKKworCWNsb2NrZXZlbnRfZGF2aW5jaS5jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoMCk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZjbG9ja2V2ZW50X2RhdmluY2kpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIGRhdmluY2lfdGltZXIgPSB7CisJLmluaXQgICA9IGRhdmluY2lfdGltZXJfaW5pdCwKK307CisKKworLyogcmVzZXQgYm9hcmQgdXNpbmcgd2F0Y2hkb2cgdGltZXIgKi8KK3ZvaWQgZGF2aW5jaV93YXRjaGRvZ19yZXNldCh2b2lkKSB7CisJdTMyIHRnY3IsIHdkdGNyLCBiYXNlID0gREFWSU5DSV9XRE9HX0JBU0U7CisKKwkvKiBkaXNhYmxlLCBpbnRlcm5hbCBjbG9jayBzb3VyY2UgKi8KKwlkYXZpbmNpX3dyaXRlbCgwLCBiYXNlICsgVENSKTsKKworCS8qIHJlc2V0IHRpbWVyLCBzZXQgbW9kZSB0byA2NC1iaXQgd2F0Y2hkb2csIGFuZCB1bnJlc2V0ICovCisJdGdjciA9IDA7CisJZGF2aW5jaV93cml0ZWwodGdjciwgYmFzZSArIFRDUik7CisJdGdjciA9IFRHQ1JfVElNTU9ERV82NEJJVF9XRE9HIDw8IFRHQ1JfVElNTU9ERV9TSElGVDsKKwl0Z2NyIHw9IChUR0NSX1VOUkVTRVQgPDwgVEdDUl9USU0xMlJTX1NISUZUKSB8CisJCShUR0NSX1VOUkVTRVQgPDwgVEdDUl9USU0zNFJTX1NISUZUKTsKKwlkYXZpbmNpX3dyaXRlbCh0Z2NyLCBiYXNlICsgVENSKTsKKworCS8qIGNsZWFyIGNvdW50ZXIgYW5kIHBlcmlvZCByZWdzICovCisJZGF2aW5jaV93cml0ZWwoMCwgYmFzZSArIFRJTTEyKTsKKwlkYXZpbmNpX3dyaXRlbCgwLCBiYXNlICsgVElNMzQpOworCWRhdmluY2lfd3JpdGVsKDAsIGJhc2UgKyBQUkQxMik7CisJZGF2aW5jaV93cml0ZWwoMCwgYmFzZSArIFBSRDM0KTsKKworCS8qIGVuYWJsZSAqLworCXdkdGNyID0gZGF2aW5jaV9yZWFkbChiYXNlICsgV0RUQ1IpOworCXdkdGNyIHw9IFdEVENSX1dERU5fRU5BQkxFIDw8IFdEVENSX1dERU5fU0hJRlQ7CisJZGF2aW5jaV93cml0ZWwod2R0Y3IsIGJhc2UgKyBXRFRDUik7CisKKwkvKiBwdXQgd2F0Y2hkb2cgaW4gcHJlLWFjdGl2ZSBzdGF0ZSAqLworCXdkdGNyID0gKFdEVENSX1dES0VZX1NFUTAgPDwgV0RUQ1JfV0RLRVlfU0hJRlQpIHwKKwkJKFdEVENSX1dERU5fRU5BQkxFIDw8IFdEVENSX1dERU5fU0hJRlQpOworCWRhdmluY2lfd3JpdGVsKHdkdGNyLCBiYXNlICsgV0RUQ1IpOworCisJLyogcHV0IHdhdGNoZG9nIGluIGFjdGl2ZSBzdGF0ZSAqLworCXdkdGNyID0gKFdEVENSX1dES0VZX1NFUTEgPDwgV0RUQ1JfV0RLRVlfU0hJRlQpIHwKKwkJKFdEVENSX1dERU5fRU5BQkxFIDw8IFdEVENSX1dERU5fU0hJRlQpOworCWRhdmluY2lfd3JpdGVsKHdkdGNyLCBiYXNlICsgV0RUQ1IpOworCisJLyogd3JpdGUgYW4gaW52YWxpZCB2YWx1ZSB0byB0aGUgV0RLRVkgZmllbGQgdG8gdHJpZ2dlcgorCSAqIGEgd2F0Y2hkb2cgcmVzZXQgKi8KKwl3ZHRjciA9IDB4MDAwMDQwMDA7CisJZGF2aW5jaV93cml0ZWwod2R0Y3IsIGJhc2UgKyBXRFRDUik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2NvcmUuYwppbmRleCA4NDU5NDMxLi44YzFiNTY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9jb3JlLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBlYnNhMTEwX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiRUJTQTExMCBUaW1lciBUaWNrIiwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAogCS5oYW5kbGVyCT0gZWJzYTExMF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW8uYyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pby5jCmluZGV4IGJiZjBkMzMuLjZiMjM4MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pby5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIEVYUE9SVF9TWU1CT0woX19yZWFkdyk7CiBFWFBPUlRfU1lNQk9MKF9fcmVhZGwpOwogCi12b2lkIHJlYWRzdyh2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBsZW4pCit2b2lkIHJlYWRzdyhjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCkBAIC0xMTIsNyArMTEyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wocmVhZHN3KTsKIAotdm9pZCByZWFkc2wodm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbGVuKQordm9pZCByZWFkc2woY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbGVuKQogewogCXZvaWQgX19pb21lbSAqYSA9IF9faXNhbWVtX2NvbnZlcnRfYWRkcihhZGRyKTsKIApAQCAtMTU3LDcgKzE1Nyw3IEBACiBFWFBPUlRfU1lNQk9MKF9fd3JpdGV3KTsKIEVYUE9SVF9TWU1CT0woX193cml0ZWwpOwogCi12b2lkIHdyaXRlc3codm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbGVuKQordm9pZCB3cml0ZXN3KHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAl2b2lkIF9faW9tZW0gKmEgPSBfX2lzYW1lbV9jb252ZXJ0X2FkZHIoYWRkcik7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQAogfQogRVhQT1JUX1NZTUJPTCh3cml0ZXN3KTsKIAotdm9pZCB3cml0ZXNsKHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3ZvaWQgd3JpdGVzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdm9pZCBfX2lvbWVtICphID0gX19pc2FtZW1fY29udmVydF9hZGRyKGFkZHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKaW5kZXggODI5YWVkNi4uODUxY2M3MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGVwOTN4eF90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gImVwOTN4eCB0aW1lciIsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKIAkuaGFuZGxlcgk9IGVwOTN4eF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY2F0cy1wY2kuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jYXRzLXBjaS5jCmluZGV4IDRmOTg0ZmQuLjM1ZWIyMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jYXRzLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jYXRzLXBjaS5jCkBAIC00NSw3ICs0NSw3IEBACiAJLnBvc3Rpbml0CQk9IGRjMjEyODVfcG9zdGluaXQsCiB9OwogCi1zdGF0aWMgaW50IGNhdHNfcGNpX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNhdHNfcGNpX2luaXQodm9pZCkKIHsKIAlpZiAobWFjaGluZV9pc19jYXRzKCkpCiAJCXBjaV9jb21tb25faW5pdCgmY2F0c19wY2kpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKaW5kZXggZmE2YmU4Ny4uM2E2Mzk0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jCkBAIC00NCw3ICs0NCw3IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBmb290YnJpZGdlX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiVGltZXIxIHRpbWVyIHRpY2siLAogCS5oYW5kbGVyCT0gdGltZXIxX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYwppbmRleCBkODg0YTM5Li5kMDhkNjQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jCkBAIC03Myw3ICs3Myw3IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpc2FfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJJU0EgdGltZXIgdGljayIsCiAJLmhhbmRsZXIJPSBpc2FfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgaXNhX3RpbWVyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaDcyMHgvY3B1LWg3MjAxLmMgYi9hcmNoL2FybS9tYWNoLWg3MjB4L2NwdS1oNzIwMS5jCmluZGV4IDEzZjc2YmQuLjkxMDdiOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaDcyMHgvY3B1LWg3MjAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9jcHUtaDcyMDEuYwpAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBoNzIwMV90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gImg3MjAxIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIJPSBoNzIwMV90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWg3MjB4L2NwdS1oNzIwMi5jIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9jcHUtaDcyMDIuYwppbmRleCA3MDM4NzBmLi4wYTFhMjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWg3MjB4L2NwdS1oNzIwMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvY3B1LWg3MjAyLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogfQogCiAvKgotICogbWFzayBtdWx0aXBsZXhlZCB0aW1lciBpcnEncworICogbWFzayBtdWx0aXBsZXhlZCB0aW1lciBJUlFzCiAgKi8KIHN0YXRpYyB2b2lkIGlubGluZSBtYXNrX3RpbWVyeF9pcnEgKHUzMiBpcnEpCiB7CkBAIC0xNTMsNyArMTUzLDcgQEAKIH0KIAogLyoKLSAqIHVubWFzayBtdWx0aXBsZXhlZCB0aW1lciBpcnEncworICogdW5tYXNrIG11bHRpcGxleGVkIHRpbWVyIElSUXMKICAqLwogc3RhdGljIHZvaWQgaW5saW5lIHVubWFza190aW1lcnhfaXJxICh1MzIgaXJxKQogewpAQCAtMTcwLDcgKzE3MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGg3MjAyX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiaDcyMDIgVGltZXIgVGljayIsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKIAkuaGFuZGxlcgk9IGg3MjAyX3RpbWVyX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2NwdWZyZXEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2NwdWZyZXEuYwppbmRleCA3ZTcwZTBiLi40NjdkODk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jcHVmcmVxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY3B1ZnJlcS5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAlpZihtcGN0bDApIHsKIAkJQ1NDUiB8PSBDU0NSX01QTExfUkVTVEFSVDsKIAotCQkvKiBXYWl0IHVudGlsIE1QTEwgaXMgc3RhYmxpemVkICovCisJCS8qIFdhaXQgdW50aWwgTVBMTCBpcyBzdGFiaWxpemVkICovCiAJCXdoaWxlKCBDU0NSICYgQ1NDUl9NUExMX1JFU1RBUlQgKTsKIAogCQlpbXhfc2V0X2FzeW5jX21vZGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKaW5kZXggNmQ1MGQ4NS4uYmM2ZmIwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogICogVGhlIGZ1bmN0aW9uIHNldHVwcyBETUEgY2hhbm5lbCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBmb3IgdHJhbnNmZXIKICAqIHNwZWNpZmllZCBieSBwcm92aWRlZCBwYXJhbWV0ZXJzLiBUaGUgc2NhdHRlci1nYXRoZXIgZW11bGF0aW9uIGlzIGRpc2FibGVkLAogICogYmVjYXVzZSBsaW5lYXIgZGF0YSBibG9jawotICogZm9ybSB0aGUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpcyB0cmFuc2ZlcmVkLgorICogZm9ybSB0aGUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpcyB0cmFuc2ZlcnJlZC4KICAqIFJldHVybiB2YWx1ZTogaWYgaW5jb3JyZWN0IHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkIC0lRUlOVkFMLgogICoJCVplcm8gaW5kaWNhdGVzIHN1Y2Nlc3MuCiAgKi8KQEAgLTE5Miw3ICsxOTIsNyBAQAogICogQGRtYW1vZGU6IERNQSB0cmFuc2ZlciBtb2RlLCAlRE1BX01PREVfUkVBRCBmcm9tIHRoZSBkZXZpY2UgdG8gdGhlIG1lbW9yeQogICogICAgICAgICAgIG9yICVETUFfTU9ERV9XUklURSBmcm9tIG1lbW9yeSB0byB0aGUgZGV2aWNlCiAgKgotICogVGhlIGZ1bmN0aW9uIHNldHVwcyBETUEgY2hhbm5lbCBzdGF0ZSBhbmQgcmVnaXN0ZXJzIHRvIGJlIHJlYWR5IGZvciB0cmFuc2ZlcgorICogVGhlIGZ1bmN0aW9uIHNldHMgdXAgRE1BIGNoYW5uZWwgc3RhdGUgYW5kIHJlZ2lzdGVycyB0byBiZSByZWFkeSBmb3IgdHJhbnNmZXIKICAqIHNwZWNpZmllZCBieSBwcm92aWRlZCBwYXJhbWV0ZXJzLiBUaGUgc2NhdHRlci1nYXRoZXIgZW11bGF0aW9uIGlzIHNldCB1cAogICogYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzLgogICoKQEAgLTIxMiw3ICsyMTIsNyBAQAogICoKICAqICVDQ1JfU01PRF9MSU5FQVIgfCAlQ0NSX1NTSVpfMzIgfCAlQ0NSX0RNT0RfRklGTyB8ICVDQ1JfRFNJWl94CiAgKgotICogQmUgY2FyZWZ1bGwgdGhlcmUgYW5kIGRvIG5vdCBtaXN0YWtlbmx5IG1peCBzb3VyY2UgYW5kIHRhcmdldCBkZXZpY2UKKyAqIEJlIGNhcmVmdWwgaGVyZSBhbmQgZG8gbm90IG1pc3Rha2VubHkgbWl4IHNvdXJjZSBhbmQgdGFyZ2V0IGRldmljZQogICogcG9ydCBzaXplcyBjb25zdGFudHMsIHRoZXkgYXJlIHJlYWxseSBkaWZmZXJlbnQ6CiAgKiAlQ0NSX1NTSVpfOCwgJUNDUl9TU0laXzE2LCAlQ0NSX1NTSVpfMzIsCiAgKiAlQ0NSX0RTSVpfOCwgJUNDUl9EU0laXzE2LCAlQ0NSX0RTSVpfMzIKQEAgLTQ5NSw3ICs0OTUsNyBAQAogCQkvKgogCQkgKiBUaGUgY2xlYW5pbmcgb2YgQHNnIGZpZWxkIHdvdWxkIGJlIHF1ZXN0aW9uYWJsZQogCQkgKiB0aGVyZSwgYmVjYXVzZSBpdHMgdmFsdWUgY2FuIGhlbHAgdG8gY29tcHV0ZQotCQkgKiByZW1haW5pbmcvdHJhbnNmZXJlZCBieXRlcyBjb3VudCBpbiB0aGUgaGFuZGxlcgorCQkgKiByZW1haW5pbmcvdHJhbnNmZXJyZWQgYnl0ZXMgY291bnQgaW4gdGhlIGhhbmRsZXIKIAkJICovCiAJCS8qaW14X2RtYV9jaGFubmVsc1tpXS5zZyA9IE5VTEw7Ki8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5jCmluZGV4IDdhN2ZhNTEuLjFjNDc0Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMKQEAgLTIwMSw3ICsyMDEsNiBAQAogewogCWlteF9tbWNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5mbzsKIH0KLUVYUE9SVF9TWU1CT0woaW14X3NldF9tbWNfaW5mbyk7CiAKIHN0YXRpYyBzdHJ1Y3QgaW14ZmJfbWFjaF9pbmZvIGlteF9mYl9pbmZvOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWlteC90aW1lLmMKaW5kZXggMjcwM2E3My4uNjk2MGE5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L3RpbWUuYwpAQCAtNTYsNyArNTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpbXhfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJpLk1YIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIJPSBpbXhfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL01ha2VmaWxlCmluZGV4IGViYjI1NWIuLjE1OGRhYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvTWFrZWZpbGUKQEAgLTEyLDQgKzEyLDMgQEAKIG9iai0kKENPTkZJR19QQ0kpCQkJKz0gcGNpX3YzLm8gcGNpLm8KIG9iai0kKENPTkZJR19DUFVfRlJFUV9JTlRFR1JBVE9SKQkrPSBjcHUubwogb2JqLSQoQ09ORklHX0lOVEVHUkFUT1JfSU1QRDEpCQkrPSBpbXBkMS5vCi1vYmotJChDT05GSUdfU01QKQkJCSs9IHBsYXRzbXAubyBoZWFkc21wLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCmluZGV4IDhkODgwY2IuLmU5YzgyZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYwpAQCAtMjU3LDIzICsyNTcsNyBAQAogCSAqLwogCXdyaXRlbCgxLCBUSU1FUjFfVkFfQkFTRSArIFRJTUVSX0lOVENMUik7CiAKLQkvKgotCSAqIHRoZSBjbG9jayB0aWNrIHJvdXRpbmVzIGFyZSBvbmx5IHByb2Nlc3NlZCBvbiB0aGUKLQkgKiBwcmltYXJ5IENQVQotCSAqLwotCWlmIChoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKSB7Ci0JCXRpbWVyX3RpY2soKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCXNtcF9zZW5kX3RpbWVyKCk7Ci0jZW5kaWYKLQl9Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0JLyoKLQkgKiB0aGlzIGlzIHRoZSBBUk0gZXF1aXZhbGVudCBvZiB0aGUgQVBJQyB0aW1lciBpbnRlcnJ1cHQKLQkgKi8KLQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCisJdGltZXJfdGljaygpOwogCiAJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKIApAQCAtMjgyLDcgKzI2Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGludGVncmF0b3JfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJJbnRlZ3JhdG9yIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIJPSBpbnRlZ3JhdG9yX3RpbWVyX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9oZWFkc21wLlMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaGVhZHNtcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWFhODhlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9oZWFkc21wLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9oZWFkc21wLlMKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAzIEFSTSBMaW1pdGVkCi0gKiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0JX19JTklUCi0KLS8qCi0gKiBJbnRlZ3JhdG9yIHNwZWNpZmljIGVudHJ5IHBvaW50IGZvciBzZWNvbmRhcnkgQ1BVcy4gIFRoaXMgcHJvdmlkZXMKLSAqIGEgImhvbGRpbmcgcGVuIiBpbnRvIHdoaWNoIGFsbCBzZWNvbmRhcnkgY29yZXMgYXJlIGhlbGQgdW50aWwgd2UncmUKLSAqIHJlYWR5IGZvciB0aGVtIHRvIGluaXRpYWxpc2UuCi0gKi8KLUVOVFJZKGludGVncmF0b3Jfc2Vjb25kYXJ5X3N0YXJ0dXApCi0JYWRyCXI0LCAxZgotCWxkbWlhCXI0LCB7cjUsIHI2fQotCXN1YglyNCwgcjQsIHI1Ci0JbGRyCXI2LCBbcjYsIHI0XQotcGVuOglsZHIJcjcsIFtyNl0KLQljbXAJcjcsIHIwCi0JYm5lCXBlbgotCi0JLyoKLQkgKiB3ZSd2ZSBiZWVuIHJlbGVhc2VkIGZyb20gdGhlIGhvbGRpbmcgcGVuOiBzZWNvbmRhcnlfc3RhY2sKLQkgKiBzaG91bGQgbm93IGNvbnRhaW4gdGhlIFNWQyBzdGFjayBmb3IgdGhpcyBjb3JlCi0JICovCi0JYglzZWNvbmRhcnlfc3RhcnR1cAotCi0xOgkubG9uZwkuCi0JLmxvbmcJcGh5c19wZW5fcmVsZWFzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCmluZGV4IGFmOWViY2MuLmQ0ZDgxMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2lfdjMuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3BjaV92My5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BsYXRzbXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEzYjg0MS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGxhdHNtcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1jaW50ZWdyYXRvci9wbGF0c21wLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIEFSTSBMdGQuCi0gKiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KLSNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotCi1leHRlcm4gdm9pZCBpbnRlZ3JhdG9yX3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOwotCi0vKgotICogY29udHJvbCBmb3Igd2hpY2ggY29yZSBpcyB0aGUgbmV4dCB0byBjb21lIG91dCBvZiB0aGUgc2Vjb25kYXJ5Ci0gKiBib290ICJob2xkaW5nIHBlbiIKLSAqLwotdm9sYXRpbGUgaW50IF9fY3B1aW5pdGRhdGEgcGVuX3JlbGVhc2UgPSAtMTsKLXVuc2lnbmVkIGxvbmcgX19jcHVpbml0ZGF0YSBwaHlzX3Blbl9yZWxlYXNlID0gMDsKLQotc3RhdGljIERFRklORV9TUElOTE9DSyhib290X2xvY2spOwotCi12b2lkIF9fY3B1aW5pdCBwbGF0Zm9ybV9zZWNvbmRhcnlfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KQotewotCS8qCi0JICogdGhlIHByaW1hcnkgY29yZSBtYXkgaGF2ZSB1c2VkIGEgImNyb3NzIGNhbGwiIHNvZnQgaW50ZXJydXB0Ci0JICogdG8gZ2V0IHRoaXMgcHJvY2Vzc29yIG91dCBvZiBXRkkgaW4gdGhlIEJvb3RNb25pdG9yIC0gbWFrZQotCSAqIHN1cmUgdGhhdCB3ZSBhcmUgbm8gbG9uZ2VyIGJlaW5nIHNlbnQgdGhpcyBzb2Z0IGludGVycnVwdAotCSAqLwotCXNtcF9jcm9zc19jYWxsX2RvbmUoY3B1bWFza19vZl9jcHUoY3B1KSk7Ci0KLQkvKgotCSAqIGlmIGFueSBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBwcmltYXJ5Ci0JICogY29yZSAoZS5nLiB0aW1lciBpcnEpLCB0aGVuIHRoZXkgd2lsbCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQKLQkgKiBmb3IgdXM6IGRvIHNvCi0JICovCi0Jc2Vjb25kYXJ5X3NjYW5faXJxcygpOwotCi0JLyoKLQkgKiBsZXQgdGhlIHByaW1hcnkgcHJvY2Vzc29yIGtub3cgd2UncmUgb3V0IG9mIHRoZQotCSAqIHBlbiwgdGhlbiBoZWFkIG9mZiBpbnRvIHRoZSBDIGVudHJ5IHBvaW50Ci0JICovCi0JcGVuX3JlbGVhc2UgPSAtMTsKLQotCS8qCi0JICogU3luY2hyb25pc2Ugd2l0aCB0aGUgYm9vdCB0aHJlYWQuCi0JICovCi0Jc3Bpbl9sb2NrKCZib290X2xvY2spOwotCXNwaW5fdW5sb2NrKCZib290X2xvY2spOwotfQotCi1pbnQgX19jcHVpbml0IGJvb3Rfc2Vjb25kYXJ5KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKLXsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQkvKgotCSAqIHNldCBzeW5jaHJvbmlzYXRpb24gc3RhdGUgYmV0d2VlbiB0aGlzIGJvb3QgcHJvY2Vzc29yCi0JICogYW5kIHRoZSBzZWNvbmRhcnkgb25lCi0JICovCi0Jc3Bpbl9sb2NrKCZib290X2xvY2spOwotCi0JLyoKLQkgKiBUaGUgc2Vjb25kYXJ5IHByb2Nlc3NvciBpcyB3YWl0aW5nIHRvIGJlIHJlbGVhc2VkIGZyb20KLQkgKiB0aGUgaG9sZGluZyBwZW4gLSByZWxlYXNlIGl0LCB0aGVuIHdhaXQgZm9yIGl0IHRvIGZsYWcKLQkgKiB0aGF0IGl0IGhhcyBiZWVuIHJlbGVhc2VkIGJ5IHJlc2V0dGluZyBwZW5fcmVsZWFzZS4KLQkgKgotCSAqIE5vdGUgdGhhdCAicGVuX3JlbGVhc2UiIGlzIHRoZSBoYXJkd2FyZSBDUFUgSUQsIHdoZXJlYXMKLQkgKiAiY3B1IiBpcyBMaW51eCdzIGludGVybmFsIElELgotCSAqLwotCXBlbl9yZWxlYXNlID0gY3B1OwotCWZsdXNoX2NhY2hlX2FsbCgpOwotCi0JLyoKLQkgKiBYWFgKLQkgKgotCSAqIFRoaXMgaXMgYSBsYXRlciBhZGRpdGlvbiB0byB0aGUgYm9vdGluZyBwcm90b2NvbDogdGhlCi0JICogYm9vdE1vbml0b3Igbm93IHB1dHMgc2Vjb25kYXJ5IGNvcmVzIGludG8gV0ZJLCBzbwotCSAqIHBva2VfbWlsbygpIG5vIGxvbmdlciBnZXRzIHRoZSBjb3JlcyBtb3Zpbmc7IHdlIG5lZWQKLQkgKiB0byBzZW5kIGEgc29mdCBpbnRlcnJ1cHQgdG8gd2FrZSB0aGUgc2Vjb25kYXJ5IGNvcmUuCi0JICogVXNlIHNtcF9jcm9zc19jYWxsKCkgZm9yIHRoaXMsIHNpbmNlIHRoZXJlJ3MgbGl0dGxlCi0JICogcG9pbnQgZHVwbGljYXRpbmcgdGhlIGNvZGUgaGVyZQotCSAqLwotCXNtcF9jcm9zc19jYWxsKGNwdW1hc2tfb2ZfY3B1KGNwdSkpOwotCi0JdGltZW91dCA9IGppZmZpZXMgKyAoMSAqIEhaKTsKLQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKLQkJaWYgKHBlbl9yZWxlYXNlID09IC0xKQotCQkJYnJlYWs7Ci0KLQkJdWRlbGF5KDEwKTsKLQl9Ci0KLQkvKgotCSAqIG5vdyB0aGUgc2Vjb25kYXJ5IGNvcmUgaXMgc3RhcnRpbmcgdXAgbGV0IGl0IHJ1biBpdHMKLQkgKiBjYWxpYnJhdGlvbnMsIHRoZW4gd2FpdCBmb3IgaXQgdG8gZmluaXNoCi0JICovCi0Jc3Bpbl91bmxvY2soJmJvb3RfbG9jayk7Ci0KLQlyZXR1cm4gcGVuX3JlbGVhc2UgIT0gLTEgPyAtRU5PU1lTIDogMDsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHBva2VfbWlsbyh2b2lkKQotewotCWV4dGVybiB2b2lkIHNlY29uZGFyeV9zdGFydHVwKHZvaWQpOwotCi0JLyogbm9ib2R5IGlzIHRvIGJlIHJlbGVhc2VkIGZyb20gdGhlIHBlbiB5ZXQgKi8KLQlwZW5fcmVsZWFzZSA9IC0xOwotCi0JcGh5c19wZW5fcmVsZWFzZSA9IHZpcnRfdG9fcGh5cygmcGVuX3JlbGVhc2UpOwotCi0JLyoKLQkgKiB3cml0ZSB0aGUgYWRkcmVzcyBvZiBzZWNvbmRhcnkgc3RhcnR1cCBpbnRvIHRoZSBzeXN0ZW0td2lkZQotCSAqIGZsYWdzIHJlZ2lzdGVyLCB0aGVuIGNsZWFyIHRoZSBib3R0b20gdHdvIGJpdHMsIHdoaWNoIGlzIHdoYXQKLQkgKiBCb290TW9uaXRvciBpcyB3YWl0aW5nIGZvcgotCSAqLwotI2lmIDEKLSNkZWZpbmUgQ0lOVEVHUkFUT1JfSERSX0ZMQUdTU19PRkZTRVQgMHgzMAotCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoaW50ZWdyYXRvcl9zZWNvbmRhcnlfc3RhcnR1cCksCi0JCSAgICAgKElPX0FERFJFU1MoSU5URUdSQVRPUl9IRFJfQkFTRSkgKwotCQkgICAgICBDSU5URUdSQVRPUl9IRFJfRkxBR1NTX09GRlNFVCkpOwotI2RlZmluZSBDSU5URUdSQVRPUl9IRFJfRkxBR1NDX09GRlNFVCAweDM0Ci0JX19yYXdfd3JpdGVsKDMsCi0JCSAgICAgKElPX0FERFJFU1MoSU5URUdSQVRPUl9IRFJfQkFTRSkgKwotCQkgICAgICBDSU5URUdSQVRPUl9IRFJfRkxBR1NDX09GRlNFVCkpOwotI2VuZGlmCi0KLQltYigpOwotfQotCi0vKgotICogSW5pdGlhbGlzZSB0aGUgQ1BVIHBvc3NpYmxlIG1hcCBlYXJseSAtIHRoaXMgZGVzY3JpYmVzIHRoZSBDUFVzCi0gKiB3aGljaCBtYXkgYmUgcHJlc2VudCBvciBiZWNvbWUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLgotICovCi12b2lkIF9faW5pdCBzbXBfaW5pdF9jcHVzKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGksIG5jb3JlcyA9IGdldF9jb3JlX2NvdW50KCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmNvcmVzOyBpKyspCi0JCWNwdV9zZXQoaSwgY3B1X3Bvc3NpYmxlX21hcCk7Ci19Ci0KLXZvaWQgX19pbml0IHNtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQotewotCXVuc2lnbmVkIGludCBuY29yZXMgPSBnZXRfY29yZV9jb3VudCgpOwotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaW50IGk7Ci0KLQkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAobmNvcmVzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiSW50ZWdyYXRvci9DUDogc3RyYW5nZSBDTSBjb3VudCBvZiAwPyBEZWZhdWx0IHRvIDFcbiIpOwotCi0JCW5jb3JlcyA9IDE7Ci0JfQotCi0JaWYgKG5jb3JlcyA+IE5SX0NQVVMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkludGVncmF0b3IvQ1A6IG5vLiBvZiBjb3JlcyAoJWQpIGdyZWF0ZXIgdGhhbiBjb25maWd1cmVkICIKLQkJICAgICAgICJtYXhpbXVtIG9mICVkIC0gY2xpcHBpbmdcbiIsCi0JCSAgICAgICBuY29yZXMsIE5SX0NQVVMpOwotCQluY29yZXMgPSBOUl9DUFVTOwotCX0KLQotCS8qCi0JICogc3RhcnQgd2l0aCBzb21lIG1vcmUgY29uZmlnIGZvciB0aGUgQm9vdCBDUFUsIG5vdyB0aGF0Ci0JICogdGhlIHdvcmxkIGlzIGEgYml0IG1vcmUgYWxpdmUgKHdoaWNoIHdhcyBub3QgdGhlIGNhc2UKLQkgKiB3aGVuIHNtcF9wcmVwYXJlX2Jvb3RfY3B1KCkgd2FzIGNhbGxlZCkKLQkgKi8KLQlzbXBfc3RvcmVfY3B1X2luZm8oY3B1KTsKLQotCS8qCi0JICogYXJlIHdlIHRyeWluZyB0byBib290IG1vcmUgY29yZXMgdGhhbiBleGlzdD8KLQkgKi8KLQlpZiAobWF4X2NwdXMgPiBuY29yZXMpCi0JCW1heF9jcHVzID0gbmNvcmVzOwotCi0JLyoKLQkgKiBJbml0aWFsaXNlIHRoZSBwcmVzZW50IG1hcCwgd2hpY2ggZGVzY3JpYmVzIHRoZSBzZXQgb2YgQ1BVcwotCSAqIGFjdHVhbGx5IHBvcHVsYXRlZCBhdCB0aGUgcHJlc2VudCB0aW1lLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBtYXhfY3B1czsgaSsrKQotCQljcHVfc2V0KGksIGNwdV9wcmVzZW50X21hcCk7Ci0KLQkvKgotCSAqIERvIHdlIG5lZWQgYW55IG1vcmUgQ1BVcz8gSWYgc28sIHRoZW4gbGV0IHRoZW0ga25vdyB3aGVyZQotCSAqIHRvIHN0YXJ0LiBOb3RlIHRoYXQsIG9uIG1vZGVybiB2ZXJzaW9ucyBvZiBNSUxPLCB0aGUgInBva2UiCi0JICogZG9lc24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyB1bnRpbCBlYWNoIGluZGl2aWR1YWwgY29yZSBpcwotCSAqIHNlbnQgYSBzb2Z0IGludGVycnVwdCB0byBnZXQgaXQgb3V0IG9mIFdGSQotCSAqLwotCWlmIChtYXhfY3B1cyA+IDEpCi0JCXBva2VfbWlsbygpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L01ha2VmaWxlCmluZGV4IGRhMTYwOWQuLmNhZDAxNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvTWFrZWZpbGUKQEAgLTEwLDMgKzEwLDQgQEAKIG9iai0kKENPTkZJR19BUkNIX0lPUDEzWFgpICs9IHRwbWkubwogb2JqLSQoQ09ORklHX01BQ0hfSVE4MTM0MFNDKSArPSBpcTgxMzQwc2Mubwogb2JqLSQoQ09ORklHX01BQ0hfSVE4MTM0ME1DKSArPSBpcTgxMzQwbWMubworb2JqLSQoQ09ORklHX1BDSV9NU0kpICs9IG1zaS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXJxLmMKaW5kZXggYjJlYjBiOS4uNjlmMDdiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcnEuYwpAQCAtMjYsODAgKzI2LDY5IEBACiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXNpLmg+CiAKIC8qIElOVENUTDAgQ1A2IFIwIFBhZ2UgNAogICovCi1zdGF0aWMgaW5saW5lIHUzMiByZWFkX2ludGN0bF8wKHZvaWQpCitzdGF0aWMgdTMyIHJlYWRfaW50Y3RsXzAodm9pZCkKIHsKIAl1MzIgdmFsOwogCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzAsIGM0LCAwIjoiPXIiICh2YWwpKTsKIAlyZXR1cm4gdmFsOwogfQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2ludGN0bF8wKHUzMiB2YWwpCitzdGF0aWMgdm9pZCB3cml0ZV9pbnRjdGxfMCh1MzIgdmFsKQogewogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzAsIGM0LCAwIjo6InIiICh2YWwpKTsKIH0KIAogLyogSU5UQ1RMMSBDUDYgUjEgUGFnZSA0CiAgKi8KLXN0YXRpYyBpbmxpbmUgdTMyIHJlYWRfaW50Y3RsXzEodm9pZCkKK3N0YXRpYyB1MzIgcmVhZF9pbnRjdGxfMSh2b2lkKQogewogCXUzMiB2YWw7CiAJYXNtIHZvbGF0aWxlKCJtcmMgcDYsIDAsICUwLCBjMSwgYzQsIDAiOiI9ciIgKHZhbCkpOwogCXJldHVybiB2YWw7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfaW50Y3RsXzEodTMyIHZhbCkKK3N0YXRpYyB2b2lkIHdyaXRlX2ludGN0bF8xKHUzMiB2YWwpCiB7CiAJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMSwgYzQsIDAiOjoiciIgKHZhbCkpOwogfQogCiAvKiBJTlRDVEwyIENQNiBSMiBQYWdlIDQKICAqLwotc3RhdGljIGlubGluZSB1MzIgcmVhZF9pbnRjdGxfMih2b2lkKQorc3RhdGljIHUzMiByZWFkX2ludGN0bF8yKHZvaWQpCiB7CiAJdTMyIHZhbDsKIAlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGMyLCBjNCwgMCI6Ij1yIiAodmFsKSk7CiAJcmV0dXJuIHZhbDsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9pbnRjdGxfMih1MzIgdmFsKQorc3RhdGljIHZvaWQgd3JpdGVfaW50Y3RsXzIodTMyIHZhbCkKIHsKIAlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMyLCBjNCwgMCI6OiJyIiAodmFsKSk7CiB9CiAKIC8qIElOVENUTDMgQ1A2IFIzIFBhZ2UgNAogICovCi1zdGF0aWMgaW5saW5lIHUzMiByZWFkX2ludGN0bF8zKHZvaWQpCitzdGF0aWMgdTMyIHJlYWRfaW50Y3RsXzModm9pZCkKIHsKIAl1MzIgdmFsOwogCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzMsIGM0LCAwIjoiPXIiICh2YWwpKTsKIAlyZXR1cm4gdmFsOwogfQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2ludGN0bF8zKHUzMiB2YWwpCitzdGF0aWMgdm9pZCB3cml0ZV9pbnRjdGxfMyh1MzIgdmFsKQogewogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzMsIGM0LCAwIjo6InIiICh2YWwpKTsKIH0KIAogLyogSU5UU1RSMCBDUDYgUjAgUGFnZSA1CiAgKi8KLXN0YXRpYyBpbmxpbmUgdTMyIHJlYWRfaW50c3RyXzAodm9pZCkKLXsKLQl1MzIgdmFsOwotCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzAsIGM1LCAwIjoiPXIiICh2YWwpKTsKLQlyZXR1cm4gdmFsOwotfQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2ludHN0cl8wKHUzMiB2YWwpCitzdGF0aWMgdm9pZCB3cml0ZV9pbnRzdHJfMCh1MzIgdmFsKQogewogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzAsIGM1LCAwIjo6InIiICh2YWwpKTsKIH0KIAogLyogSU5UU1RSMSBDUDYgUjEgUGFnZSA1CiAgKi8KLXN0YXRpYyBpbmxpbmUgdTMyIHJlYWRfaW50c3RyXzEodm9pZCkKLXsKLQl1MzIgdmFsOwotCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzEsIGM1LCAwIjoiPXIiICh2YWwpKTsKLQlyZXR1cm4gdmFsOwotfQogc3RhdGljIHZvaWQgd3JpdGVfaW50c3RyXzEodTMyIHZhbCkKIHsKIAlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMxLCBjNSwgMCI6OiJyIiAodmFsKSk7CkBAIC0xMDcsMTIgKzk2LDYgQEAKIAogLyogSU5UU1RSMiBDUDYgUjIgUGFnZSA1CiAgKi8KLXN0YXRpYyBpbmxpbmUgdTMyIHJlYWRfaW50c3RyXzIodm9pZCkKLXsKLQl1MzIgdmFsOwotCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzIsIGM1LCAwIjoiPXIiICh2YWwpKTsKLQlyZXR1cm4gdmFsOwotfQogc3RhdGljIHZvaWQgd3JpdGVfaW50c3RyXzIodTMyIHZhbCkKIHsKIAlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMyLCBjNSwgMCI6OiJyIiAodmFsKSk7CkBAIC0xMjAsMTIgKzEwMyw2IEBACiAKIC8qIElOVFNUUjMgQ1A2IFIzIFBhZ2UgNQogICovCi1zdGF0aWMgaW5saW5lIHUzMiByZWFkX2ludHN0cl8zKHZvaWQpCi17Ci0JdTMyIHZhbDsKLQlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGMzLCBjNSwgMCI6Ij1yIiAodmFsKSk7Ci0JcmV0dXJuIHZhbDsKLX0KIHN0YXRpYyB2b2lkIHdyaXRlX2ludHN0cl8zKHUzMiB2YWwpCiB7CiAJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMywgYzUsIDAiOjoiciIgKHZhbCkpOwpAQCAtMTMzLDEyICsxMTAsNiBAQAogCiAvKiBJTlRCQVNFIENQNiBSMCBQYWdlIDIKICAqLwotc3RhdGljIGlubGluZSB1MzIgcmVhZF9pbnRiYXNlKHZvaWQpCi17Ci0JdTMyIHZhbDsKLQlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGMwLCBjMiwgMCI6Ij1yIiAodmFsKSk7Ci0JcmV0dXJuIHZhbDsKLX0KIHN0YXRpYyB2b2lkIHdyaXRlX2ludGJhc2UodTMyIHZhbCkKIHsKIAlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMwLCBjMiwgMCI6OiJyIiAodmFsKSk7CkBAIC0xNDYsMTIgKzExNyw2IEBACiAKIC8qIElOVFNJWkUgQ1A2IFIyIFBhZ2UgMgogICovCi1zdGF0aWMgaW5saW5lIHUzMiByZWFkX2ludHNpemUodm9pZCkKLXsKLQl1MzIgdmFsOwotCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzIsIGMyLCAwIjoiPXIiICh2YWwpKTsKLQlyZXR1cm4gdmFsOwotfQogc3RhdGljIHZvaWQgd3JpdGVfaW50c2l6ZSh1MzIgdmFsKQogewogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzIsIGMyLCAwIjo6InIiICh2YWwpKTsKQEAgLTI1OCw3ICsyMjMsNyBAQAogCXdyaXRlX2ludGJhc2UoSU5UQkFTRSk7CiAJd3JpdGVfaW50c2l6ZShJTlRTSVpFXzQpOwogCi0JZm9yKGkgPSAwOyBpIDwgTlJfSU9QMTNYWF9JUlFTOyBpKyspIHsKKwlmb3IoaSA9IDA7IGkgPD0gSVJRX0lPUDEzWFhfSFBJOyBpKyspIHsKIAkJaWYgKGkgPCAzMikKIAkJCXNldF9pcnFfY2hpcChpLCAmaW9wMTN4eF9pcnFjaGlwMSk7CiAJCWVsc2UgaWYgKGkgPCA2NCkKQEAgLTI3MSw0ICsyMzYsNiBAQAogCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CiAJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwogCX0KKworCWlvcDEzeHhfbXNpX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9tc2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9tc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2VmMTEyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvbXNpLmMKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlvcDEzeHgvbXNpLmMKKyAqCisgKiBQQ0kgTVNJIHN1cHBvcnQgZm9yIHRoZSBpb3AxM3h4IHByb2Nlc3NvcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKKyAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworCisjZGVmaW5lIElPUDEzWFhfTlVNX01TSV9JUlFTIDEyOAorc3RhdGljIERFQ0xBUkVfQklUTUFQKG1zaV9pcnFfaW5fdXNlLCBJT1AxM1hYX05VTV9NU0lfSVJRUyk7CisKKy8qIElNSVBSMCBDUDYgUjggUGFnZSAxCisgKi8KK3N0YXRpYyB1MzIgcmVhZF9pbWlwcl8wKHZvaWQpCit7CisJdTMyIHZhbDsKKwlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGM4LCBjMSwgMCI6Ij1yIiAodmFsKSk7CisJcmV0dXJuIHZhbDsKK30KK3N0YXRpYyB2b2lkIHdyaXRlX2ltaXByXzAodTMyIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGM4LCBjMSwgMCI6OiJyIiAodmFsKSk7Cit9CisKKy8qIElNSVBSMSBDUDYgUjkgUGFnZSAxCisgKi8KK3N0YXRpYyB1MzIgcmVhZF9pbWlwcl8xKHZvaWQpCit7CisJdTMyIHZhbDsKKwlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGM5LCBjMSwgMCI6Ij1yIiAodmFsKSk7CisJcmV0dXJuIHZhbDsKK30KK3N0YXRpYyB2b2lkIHdyaXRlX2ltaXByXzEodTMyIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGM5LCBjMSwgMCI6OiJyIiAodmFsKSk7Cit9CisKKy8qIElNSVBSMiBDUDYgUjEwIFBhZ2UgMQorICovCitzdGF0aWMgdTMyIHJlYWRfaW1pcHJfMih2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgcDYsIDAsICUwLCBjMTAsIGMxLCAwIjoiPXIiICh2YWwpKTsKKwlyZXR1cm4gdmFsOworfQorc3RhdGljIHZvaWQgd3JpdGVfaW1pcHJfMih1MzIgdmFsKQoreworCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzEwLCBjMSwgMCI6OiJyIiAodmFsKSk7Cit9CisKKy8qIElNSVBSMyBDUDYgUjExIFBhZ2UgMQorICovCitzdGF0aWMgdTMyIHJlYWRfaW1pcHJfMyh2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgcDYsIDAsICUwLCBjMTEsIGMxLCAwIjoiPXIiICh2YWwpKTsKKwlyZXR1cm4gdmFsOworfQorc3RhdGljIHZvaWQgd3JpdGVfaW1pcHJfMyh1MzIgdmFsKQoreworCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzExLCBjMSwgMCI6OiJyIiAodmFsKSk7Cit9CisKK3N0YXRpYyB1MzIgKCpyZWFkX2ltaXByW10pKHZvaWQpID0geworCXJlYWRfaW1pcHJfMCwKKwlyZWFkX2ltaXByXzEsCisJcmVhZF9pbWlwcl8yLAorCXJlYWRfaW1pcHJfMywKK307CisKK3N0YXRpYyB2b2lkICgqd3JpdGVfaW1pcHJbXSkodTMyKSA9IHsKKwl3cml0ZV9pbWlwcl8wLAorCXdyaXRlX2ltaXByXzEsCisJd3JpdGVfaW1pcHJfMiwKKwl3cml0ZV9pbWlwcl8zLAorfTsKKworc3RhdGljIHZvaWQgaW9wMTN4eF9tc2lfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJaW50IGksIGo7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CisKKwkvKiByZWFkIElNSVBSIHJlZ2lzdGVycyBhbmQgZmluZCBhbnkgYWN0aXZlIGludGVycnVwdHMsCisJICogdGhlbiBjYWxsIElTUiBmb3IgZWFjaCBhY3RpdmUgaW50ZXJydXB0CisJICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVhZF9pbWlwcik7IGkrKykgeworCQlzdGF0dXMgPSAocmVhZF9pbWlwcltpXSkoKTsKKwkJaWYgKCFzdGF0dXMpCisJCQljb250aW51ZTsKKworCQlkbyB7CisJCQlqID0gZmluZF9maXJzdF9iaXQoJnN0YXR1cywgMzIpOworCQkJKHdyaXRlX2ltaXByW2ldKSgxIDw8IGopOyAvKiB3cml0ZSBiYWNrIHRvIGNsZWFyIGJpdCAqLworCQkJZGVzYyA9IGlycV9kZXNjICsgSVJRX0lPUDEzWFhfTVNJXzAgKyBqICsgKDMyKmkpOworCQkJZGVzY19oYW5kbGVfaXJxKElSUV9JT1AxM1hYX01TSV8wICsgaiArICgzMippKSwJZGVzYyk7CisJCQlzdGF0dXMgPSAocmVhZF9pbWlwcltpXSkoKTsKKwkJfSB3aGlsZSAoc3RhdHVzKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IGlvcDEzeHhfbXNpX2luaXQodm9pZCkKK3sKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfSU9QMTNYWF9JTkJEX01TSSwgaW9wMTN4eF9tc2lfaGFuZGxlcik7Cit9CisKKy8qCisgKiBEeW5hbWljIGlycSBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0aW9uCisgKi8KK2ludCBjcmVhdGVfaXJxKHZvaWQpCit7CisJaW50IGlycSwgcG9zOworCithZ2FpbjoKKwlwb3MgPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1zaV9pcnFfaW5fdXNlLCBJT1AxM1hYX05VTV9NU0lfSVJRUyk7CisJaXJxID0gSVJRX0lPUDEzWFhfTVNJXzAgKyBwb3M7CisJaWYgKGlycSA+IE5SX0lSUVMpCisJCXJldHVybiAtRU5PU1BDOworCS8qIHRlc3RfYW5kX3NldF9iaXQgb3BlcmF0ZXMgb24gMzItYml0cyBhdCBhIHRpbWUgKi8KKwlpZiAodGVzdF9hbmRfc2V0X2JpdChwb3MsIG1zaV9pcnFfaW5fdXNlKSkKKwkJZ290byBhZ2FpbjsKKworCWR5bmFtaWNfaXJxX2luaXQoaXJxKTsKKworCXJldHVybiBpcnE7Cit9CisKK3ZvaWQgZGVzdHJveV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgcG9zID0gaXJxIC0gSVJRX0lPUDEzWFhfTVNJXzA7CisKKwlkeW5hbWljX2lycV9jbGVhbnVwKGlycSk7CisKKwljbGVhcl9iaXQocG9zLCBtc2lfaXJxX2luX3VzZSk7Cit9CisKK3ZvaWQgYXJjaF90ZWFyZG93bl9tc2lfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJZGVzdHJveV9pcnEoaXJxKTsKK30KKworc3RhdGljIHZvaWQgaW9wMTN4eF9tc2lfbm9wKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvcDEzeHhfbXNpX2NoaXAgPSB7CisJLm5hbWUgPSAiUENJLU1TSSIsCisJLmFjayA9IGlvcDEzeHhfbXNpX25vcCwKKwkuZW5hYmxlID0gdW5tYXNrX21zaV9pcnEsCisJLmRpc2FibGUgPSBtYXNrX21zaV9pcnEsCisJLm1hc2sgPSBtYXNrX21zaV9pcnEsCisJLnVubWFzayA9IHVubWFza19tc2lfaXJxLAorfTsKKworaW50IGFyY2hfc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IG1zaV9kZXNjICpkZXNjKQoreworCWludCBpZCwgaXJxID0gY3JlYXRlX2lycSgpOworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJc2V0X2lycV9tc2koaXJxLCBkZXNjKTsKKworCW1zZy5hZGRyZXNzX2hpID0gMHgwOworCW1zZy5hZGRyZXNzX2xvID0gSU9QMTNYWF9NVV9NSU1SX1BDSTsKKworCWlkID0gaW9wMTN4eF9jcHVfaWQoKTsKKwltc2cuZGF0YSA9IChpZCA8PCBJT1AxM1hYX01VX01JTVJfQ09SRV9TRUxFQ1QpIHwgKGlycSAmIDB4N2YpOworCisJd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZpb3AxM3h4X21zaV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYwppbmRleCBkMWQwZDMyLi45ZDYzZDdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3BjaS5jCkBAIC0xOSwxMCArMTksMTEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9wY2kuaD4KIApAQCAtMTQ0LDcgKzE0NSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGludCBpb3AxM3h4X2F0dV9mdW5jdGlvbihpbnQgYXR1KQorc3RhdGljIGludCBpb3AxM3h4X2F0dV9mdW5jdGlvbihpbnQgYXR1KQogewogCWludCBmdW5jID0gMDsKIAkvKiB0aGUgZnVuY3Rpb24gbnVtYmVyIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZQpAQCAtMjU5LDcgKzI2MCw3IEBACiAgKiBkYXRhLiAgTm90ZSB0aGF0IHRoZSBkYXRhIGRlcGVuZGVuY3kgb24gJTAgZW5jb3VyYWdlcyBhbiBhYm9ydAogICogdG8gYmUgZGV0ZWN0ZWQgYmVmb3JlIHdlIHJldHVybi4KICAqLwotc3RhdGljIGlubGluZSB1MzIgaW9wMTN4eF9hdHV4X3JlYWQodW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHUzMiBpb3AxM3h4X2F0dXhfcmVhZCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJdTMyIHZhbDsKIApAQCAtMzg3LDcgKzM4OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19pbml0CitzdGF0aWMgaW50CiBpb3AxM3h4X3BjaWVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBpZHNlbCwgdTggcGluKQogewogCVdBUk5fT04oaWRzZWwgIT0gMCk7CkBAIC00MDEsNyArNDAyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIGlvcDEzeHhfYXR1ZV9yZWFkKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyB1MzIgaW9wMTN4eF9hdHVlX3JlYWQodW5zaWduZWQgbG9uZyBhZGRyKQogewogCXUzMiB2YWw7CiAKQEAgLTU1OSw2ICs1NjAsMTQgQEAKIAlpbnQgZnVuYyA9IGlvcDEzeHhfYXR1X2Z1bmN0aW9uKElPUDEzWFhfSU5JVF9BVFVfQVRVRSk7CiAJdTMyIHJlZ192YWw7CiAKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCS8qIEJBUiAwIChpbmJvdW5kIG1zaSB3aW5kb3cpICovCisJX19yYXdfd3JpdGVsKElPUDEzWFhfTVVfQkFTRV9QSFlTLCBJT1AxM1hYX01VX01VQkFSKTsKKwlfX3Jhd193cml0ZWwofihJT1AxM1hYX01VX1dJTkRPV19TSVpFIC0gMSksIElPUDEzWFhfQVRVRV9JQUxSMCk7CisJX19yYXdfd3JpdGVsKElPUDEzWFhfTVVfQkFTRV9QSFlTLCBJT1AxM1hYX0FUVUVfSUFUVlIwKTsKKwlfX3Jhd193cml0ZWwoSU9QMTNYWF9NVV9CQVNFX1BDSSwgSU9QMTNYWF9BVFVFX0lBQkFSMCk7CisjZW5kaWYKKwogCS8qIEJBUiAxICgxOjEgbWFwcGluZyB3aXRoIFBoeXNpY2FsIFJBTSkgKi8KIAkvKiBTZXQgbGltaXQgYW5kIGVuYWJsZSAqLwogCV9fcmF3X3dyaXRlbCh+KElPUDEzWFhfTUFYX1JBTV9TSVpFIC0gUEhZU19PRkZTRVQgLSAxKSAmIH4weDEsCkBAIC03MjAsNiArNzI5LDE0IEBACiAJZWxzZQogCQlhdHV4X3RyaGZhX3RpbWVvdXQgPSBqaWZmaWVzOwogCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwkvKiBCQVIgMCAoaW5ib3VuZCBtc2kgd2luZG93KSAqLworCV9fcmF3X3dyaXRlbChJT1AxM1hYX01VX0JBU0VfUEhZUywgSU9QMTNYWF9NVV9NVUJBUik7CisJX19yYXdfd3JpdGVsKH4oSU9QMTNYWF9NVV9XSU5ET1dfU0laRSAtIDEpLCBJT1AxM1hYX0FUVVhfSUFMUjApOworCV9fcmF3X3dyaXRlbChJT1AxM1hYX01VX0JBU0VfUEhZUywgSU9QMTNYWF9BVFVYX0lBVFZSMCk7CisJX19yYXdfd3JpdGVsKElPUDEzWFhfTVVfQkFTRV9QQ0ksIElPUDEzWFhfQVRVWF9JQUJBUjApOworI2VuZGlmCisKIAkvKiBCQVIgMSAoMToxIG1hcHBpbmcgd2l0aCBQaHlzaWNhbCBSQU0pICovCiAJLyogU2V0IGxpbWl0IGFuZCBlbmFibGUgKi8KIAlfX3Jhd193cml0ZWwofihJT1AxM1hYX01BWF9SQU1fU0laRSAtIFBIWVNfT0ZGU0VUIC0gMSkgJiB+MHgxLApAQCAtOTczLDcgKzk5MCw3IEBACiAJCQkiaW1wcmVjaXNlIGV4dGVybmFsIGFib3J0Iik7CiB9CiAKLS8qIGludGlhbGl6ZSB0aGUgcGNpIG1lbW9yeSBzcGFjZS4gIGhhbmRsZSBhbnkgY29tYmluYXRpb24gb2YKKy8qIGluaXRpYWxpemUgdGhlIHBjaSBtZW1vcnkgc3BhY2UuICBoYW5kbGUgYW55IGNvbWJpbmF0aW9uIG9mCiAgKiBhdHVlIGFuZCBhdHV4IGVuYWJsZWQvZGlzYWJsZWQKICAqLwogaW50IGlvcDEzeHhfcGNpX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvZ2xhbnRhbmsuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2dsYW50YW5rLmMKaW5kZXggNDVmNGYxMy4uNTc3NmZkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvZ2xhbnRhbmsuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9nbGFudGFuay5jCkBAIC03NSw3ICs3NSw3IEBACiAjZGVmaW5lIElOVEMJSVJRX0lPUDMyWF9YSU5UMgogI2RlZmluZSBJTlRECUlSUV9JT1AzMlhfWElOVDMKIAotc3RhdGljIGlubGluZSBpbnQgX19pbml0CitzdGF0aWMgaW50IF9faW5pdAogZ2xhbnRhbmtfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBpbnQgcGNpX2lycV90YWJsZVtdWzRdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXEzMTI0NC5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXEzMTI0NC5jCmluZGV4IDdiMjFjNmUuLmQ0ZWVmYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lxMzEyNDQuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcTMxMjQ0LmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogLyoKICAqIEVQODAyMTkvSVEzMTI0NCBQQ0kuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdAorc3RhdGljIGludCBfX2luaXQKIGVwODAyMTlfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWludCBpcnE7CkBAIC0xNDAsNyArMTQwLDcgQEAKIAkubWFwX2lycQk9IGVwODAyMTlfcGNpX21hcF9pcnEsCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBfX2luaXQKK3N0YXRpYyBpbnQgX19pbml0CiBpcTMxMjQ0X3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpbnQgaXJxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXE4MDMyMS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXE4MDMyMS5jCmluZGV4IGJjMjVmYjkuLjhkOWY0OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lxODAzMjEuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcTgwMzIxLmMKQEAgLTcyLDcgKzcyLDcgQEAKIC8qCiAgKiBJUTgwMzIxIFBDSS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgX19pbml0CitzdGF0aWMgaW50IF9faW5pdAogaXE4MDMyMV9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJaW50IGlycTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXJxLmMKaW5kZXggODI1OThkYy4uYzk3MTE3MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXJxLmMKQEAgLTIxLDEyICsyMSwxMiBAQAogCiBzdGF0aWMgdTMyIGlvcDMyeF9tYXNrOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW50Y3RsX3dyaXRlKHUzMiB2YWwpCitzdGF0aWMgdm9pZCBpbnRjdGxfd3JpdGUodTMyIHZhbCkKIHsKIAlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMwLCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnRzdHJfd3JpdGUodTMyIHZhbCkKK3N0YXRpYyB2b2lkIGludHN0cl93cml0ZSh1MzIgdmFsKQogewogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzQsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L24yMTAwLmMgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9uMjEwMC5jCmluZGV4IDVmMDczNDQuLmQ1NTAwNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L24yMTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvbjIxMDAuYwpAQCAtNzYsNyArNzYsNyBAQAogLyoKICAqIE4yMTAwIFBDSS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgX19pbml0CitzdGF0aWMgaW50IF9faW5pdAogbjIxMDBfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWludCBpcnE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMxLmMgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMxLmMKaW5kZXggMzc2YzkzMi4uMmIwNjMxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzEuYwpAQCAtNTUsNyArNTUsNyBAQAogLyoKICAqIElRODAzMzEgUENJLgogICovCi1zdGF0aWMgaW5saW5lIGludCBfX2luaXQKK3N0YXRpYyBpbnQgX19pbml0CiBpcTgwMzMxX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpbnQgaXJxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMi5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMi5jCmluZGV4IDU4YzgxNDkuLjc4ODljZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzIuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMyLmMKQEAgLTU1LDcgKzU1LDcgQEAKIC8qCiAgKiBJUTgwMzMyIFBDSS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgX19pbml0CitzdGF0aWMgaW50IF9faW5pdAogaXE4MDMzMl9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJaW50IGlycTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXJxLmMKaW5kZXggYzY1ZWE3OC4uZjA5ZGQwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXJxLmMKQEAgLTIyLDMyICsyMiwzMiBAQAogc3RhdGljIHUzMiBpb3AzM3hfbWFzazA7CiBzdGF0aWMgdTMyIGlvcDMzeF9tYXNrMTsKIAotc3RhdGljIGlubGluZSB2b2lkIGludGN0bDBfd3JpdGUodTMyIHZhbCkKK3N0YXRpYyB2b2lkIGludGN0bDBfd3JpdGUodTMyIHZhbCkKIHsKIAlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMwLCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnRjdGwxX3dyaXRlKHUzMiB2YWwpCitzdGF0aWMgdm9pZCBpbnRjdGwxX3dyaXRlKHUzMiB2YWwpCiB7CiAJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMSwgYzAsIDAiIDogOiAiciIgKHZhbCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW50c3RyMF93cml0ZSh1MzIgdmFsKQorc3RhdGljIHZvaWQgaW50c3RyMF93cml0ZSh1MzIgdmFsKQogewogCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzIsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGludHN0cjFfd3JpdGUodTMyIHZhbCkKK3N0YXRpYyB2b2lkIGludHN0cjFfd3JpdGUodTMyIHZhbCkKIHsKIAlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMzLCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnRiYXNlX3dyaXRlKHUzMiB2YWwpCitzdGF0aWMgdm9pZCBpbnRiYXNlX3dyaXRlKHUzMiB2YWwpCiB7CiAJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMTIsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGludHNpemVfd3JpdGUodTMyIHZhbCkKK3N0YXRpYyB2b2lkIGludHNpemVfd3JpdGUodTMyIHZhbCkKIHsKIAlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMxMywgYzAsIDAiIDogOiAiciIgKHZhbCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9jb3JlLmMKaW5kZXggOWNmMjQ5OC4uY2I2YWQyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvY29yZS5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXhwMjAwMF90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gIklYUDIwMDAgVGltZXIgVGljayIsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKIAkuaGFuZGxlcgk9IGl4cDIwMDBfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2VucDI2MTEuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9lbnAyNjExLmMKaW5kZXggNTAwZTk5Ny4uOWM0OTQzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2VucDI2MTEuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvZW5wMjYxMS5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRU5QLTI2MTEgTWFjaGluZSBJbnRpYWxpemF0aW9uCisgKiBFTlAtMjYxMSBNYWNoaW5lIEluaXRpYWxpemF0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBlbnAyNjExX2ZsYXNoX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDI0MDAuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjQwMC5jCmluZGV4IDBmZGQwM2EuLmNlN2MxNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjQwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjQwMC5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIAogc3Vic3lzX2luaXRjYWxsKGl4ZHAyNDAwX3BjaV9pbml0KTsKIAotdm9pZCBpeGRwMjQwMF9pbml0X2lycSh2b2lkKQordm9pZCBfX2luaXQgaXhkcDI0MDBfaW5pdF9pcnEodm9pZCkKIHsKIAlpeGRwMngwMF9pbml0X2lycShJWERQMjQwMF9DUExEX0lOVF9TVEFULCBJWERQMjQwMF9DUExEX0lOVF9NQVNLLCBJWERQMjQwMF9OUl9JUlFTKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyODAwLmMKaW5kZXggNzBkMjQ3Zi4uMTRmMDliODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jCkBAIC0yNzksNyArMjc5LDcgQEAKIAogc3Vic3lzX2luaXRjYWxsKGl4ZHAyODAwX3BjaV9pbml0KTsKIAotdm9pZCBpeGRwMjgwMF9pbml0X2lycSh2b2lkKQordm9pZCBfX2luaXQgaXhkcDI4MDBfaW5pdF9pcnEodm9pZCkKIHsKIAlpeGRwMngwMF9pbml0X2lycShJWERQMjgwMF9DUExEX0lOVF9TVEFULCBJWERQMjgwMF9DUExEX0lOVF9NQVNLLCBJWERQMjgwMF9OUl9JUlFTKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKaW5kZXggNTJiMzY4Yi4uNzNjNjUxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCS51bm1hc2sJPSBpeGRwMngwMF9pcnFfdW5tYXNrCiB9OwogCi12b2lkIGl4ZHAyeDAwX2luaXRfaXJxKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnN0YXRfcmVnLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICptYXNrX3JlZywgdW5zaWduZWQgbG9uZyBucl9pcnFzKQordm9pZCBfX2luaXQgaXhkcDJ4MDBfaW5pdF9pcnEodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqc3RhdF9yZWcsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKm1hc2tfcmVnLCB1bnNpZ25lZCBsb25nIG5yX2lycXMpCiB7CiAJdW5zaWduZWQgaW50IGlycTsKIApAQCAtMTk1LDcgKzE5NSw3IEBACiAgKiBpbnN0YW5jZXMgIG9mIHRoZSBrZXJuZWwuIFNvIGZhciBzbyBnb29kLiBQZWVycyBvbiB0aGUgUENJIGJ1cyBydW5uaW5nIAogICogTGludXggaXMgYSBjb21tb24gZGVzaWduIGluIHRlbGVjb20gc3lzdGVtcy4gVGhlIHByb2JsZW0gaXMgdGhhdCBpbnN0ZWFkIAogICogb2YgYWxsIHRoZSBkZXZpY2VzIGJlaW5nIGNvbnRyb2xsZWQgYnkgYSBzaW5nbGUgaG9zdCwgZGlmZmVyZW50Ci0gKiBkZXZpY2VzIGFyZSBjb250cm9sbGVzIGJ5IGRpZmZlcmVudCBOUFVzIG9uIHRoZSBzYW1lIGJ1cywgbGVhZGluZyB0bworICogZGV2aWNlcyBhcmUgY29udHJvbGxlZCBieSBkaWZmZXJlbnQgTlBVcyBvbiB0aGUgc2FtZSBidXMsIGxlYWRpbmcgdG8KICAqIG11bHRpcGxlIGhvc3RzIG9uIHRoZSBidXMuIFRoZSBleGFjdCBidXMgbGF5b3V0IGxvb2tzIGxpa2U6CiAgKgogICogICAgICAgICAgICAgICAgICAgQnVzIDAKQEAgLTIxMSw3ICsyMTEsNyBAQAogICogICAgICAgICAgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfAogICogICAgICAgICAgICAgLi4uIERldiAgICBQTUMgICAgICAgTWVkaWEgICAgIEV0aDAgICBFdGgxIC4uLgogICoKLSAqIFRoZSBtYXN0ZXIgY29udHJvbGxzIGFsbCBidXQgRXRoMSwgd2hpY2ggaXMgY29udHJvbGxlZCBieSB0aGUKKyAqIFRoZSBtYXN0ZXIgY29udHJvbHMgYWxsIGJ1dCBFdGgxLCB3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoZQogICogc2xhdmUuIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IHRoZSBib3RoIHRoZSBtYXN0ZXIgYW5kIHRoZSBzbGF2ZQogICogaGF2ZSB0byBzY2FuIHRoZSBidXMsIGJ1dCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBlbnVtZXJhdGUgdGhlIGJ1cy4KICAqIEluIGFkZGl0aW9uLCBhZnRlciB0aGUgYnVzIGlzIHNjYW5uZWQsIGVhY2gga2VybmVsIG11c3QgcmVtb3ZlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDJ4MDEuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCmluZGV4IDMwODRhNWYuLmQzZDczMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAkvKiBEZXZpY2UgaXMgbG9jYXRlZCBhZnRlciBmaXJzdCBNQiBicmlkZ2UgKi8KIAljYXNlIDB4MDAwODoKIAkJaWYgKHRtcF9idXMgPT0gZGV2LT5idXMpIHsKLQkJCS8qIERldmljZSBpcyBsb2NhdGVkIGRpcmVjdHkgYWZ0ZXIgZmlyc3QgTUIgYnJpZGdlICovCisJCQkvKiBEZXZpY2UgaXMgbG9jYXRlZCBkaXJlY3RseSBhZnRlciBmaXJzdCBNQiBicmlkZ2UgKi8KIAkJCXN3aXRjaCAoZGV2cGluKSB7CiAJCQljYXNlIERFVlBJTigxLCAxKToJLyogT25ib2FyZCA4MjU0NiBjaCAwICovCiAJCQkJaWYgKG1hY2hpbmVfaXNfaXhkcDI0MDEoKSkKQEAgLTI5OSw3ICsyOTksNyBAQAogCQlicmVhazsKIAljYXNlIDB4MDAxMDoKIAkJaWYgKHRtcF9idXMgPT0gZGV2LT5idXMpIHsKLQkJCS8qIERldmljZSBpcyBsb2NhdGVkIGRpcmVjdHkgYWZ0ZXIgc2Vjb25kIE1CIGJyaWRnZSAqLworCQkJLyogRGV2aWNlIGlzIGxvY2F0ZWQgZGlyZWN0bHkgYWZ0ZXIgc2Vjb25kIE1CIGJyaWRnZSAqLwogCQkJLyogU2Vjb25kYXJ5IGJ1cyBvZiBzZWNvbmQgYnJpZGdlICovCiAJCQlzd2l0Y2ggKGRldnBpbikgewogCQkJY2FzZSBERVZQSU4oMCwgMSk6CS8qIERCIzAgKi8KQEAgLTM0OCw3ICszNDgsNyBAQAogc3Vic3lzX2luaXRjYWxsKGl4ZHAyeDAxX3BjaV9pbml0KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIElYRFAyeDAxIE1hY2hpbmUgSW50aWFsaXphdGlvbgorICogSVhEUDJ4MDEgTWFjaGluZSBJbml0aWFsaXphdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgaXhkcDJ4MDFfZmxhc2hfcGxhdGZvcm1fZGF0YSA9IHsKIAkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9wY2kuYwppbmRleCA1YTA5YTkwLi4wM2Y0Y2Y3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL3BjaS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIH0KIAogLyoKLSAqIFdlIGRvbid0IGRvIGVycm9yIGNoZWNrcyBieSBjYWxsbGluZyBjbGVhcl9tYXN0ZXJfYWJvcnRzKCkgYi9jIHRoZQorICogV2UgZG9uJ3QgZG8gZXJyb3IgY2hlY2tzIGJ5IGNhbGxpbmcgY2xlYXJfbWFzdGVyX2Fib3J0cygpIGIvYyB0aGUKICAqIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgY2FsbGVyIGRpZCBhIHJlYWQgZmlyc3QgdG8gbWFrZSBzdXJlIGEgZGV2aWNlCiAgKiBleGlzdHMuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvY29yZS5jCmluZGV4IGNlNmFkNjMuLjE2MzU2ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2NvcmUuYwpAQCAtMzYzLDcgKzM2Myw3IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpeHAyM3h4X3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiSVhQMjN4eCBUaW1lciBUaWNrIiwKIAkuaGFuZGxlcgk9IGl4cDIzeHhfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiB9OwogCiB2b2lkIF9faW5pdCBpeHAyM3h4X2luaXRfdGltZXIodm9pZCkKQEAgLTM4OSw3ICszODksNyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBJWFAyM3h4IFBsYXRmb3JtIEluaXRpYWxpemFpb24KKyAqIElYUDIzeHggUGxhdGZvcm0gSW5pdGlhbGl6YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpeHAyM3h4X3VhcnRfcmVzb3VyY2VzW10gPSB7CiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2l4ZHAyMzUxLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaXhkcDIzNTEuYwppbmRleCA3YTg2YTI1Li5jNDFhNmI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaXhkcDIzNTEuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaXhkcDIzNTEuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJLnVubWFzawk9IGl4ZHAyMzUxX2ludGJfdW5tYXNrCiB9OwogCi12b2lkIGl4ZHAyMzUxX2luaXRfaXJxKHZvaWQpCit2b2lkIF9faW5pdCBpeGRwMjM1MV9pbml0X2lycSh2b2lkKQogewogCWludCBpcnE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9wY2kuYwppbmRleCBhYzdkNDNkLi4yMjdmODA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3BjaS5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotdm9pZCBpeHAyM3h4X3BjaV9zbGF2ZV9pbml0KHZvaWQpCit2b2lkIF9faW5pdCBpeHAyM3h4X3BjaV9zbGF2ZV9pbml0KHZvaWQpCiB7CiAJaXhwMjN4eF9wY2lfY29tbW9uX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9yb2FkcnVubmVyLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvcm9hZHJ1bm5lci5jCmluZGV4IGQwNmUyMWIuLmUzNTY0NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9yb2FkcnVubmVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3JvYWRydW5uZXIuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJcmV0dXJuIE5PX0lSUTsKIH0KIAotc3RhdGljIHZvaWQgcm9hZHJ1bm5lcl9wY2lfcHJlaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHJvYWRydW5uZXJfcGNpX3ByZWluaXQodm9pZCkKIHsKIAlzZXRfaXJxX3R5cGUoSVJRX1JPQURSVU5ORVJfUENJX0lOVEMsIElSUVRfTE9XKTsKIAlzZXRfaXJxX3R5cGUoSVJRX1JPQURSVU5ORVJfUENJX0lOVEQsIElSUVRfTE9XKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCmluZGV4IDk3MTVlZjUuLjA2MDkwOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZwpAQCAtMTA0LDkgKzEwNCw2IEBACiAJICBEU00tRzYwMCBSZXZBIGRldmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwbGF0Zm9ybSwKIAkgIHNlZSBodHRwOi8vd3d3Lm5zbHUyLWxpbnV4Lm9yZy93aWtpL0RTTUc2MDAvSG9tZVBhZ2UKIAotIwotIyBBdmlsYSBhbmQgSVhEUCBzaGFyZSB0aGUgc2FtZSBzb3VyY2UgZm9yIG5vdy4gV2lsbCBjaGFuZ2UgaW4gZnV0dXJlCi0jCiBjb25maWcJQVJDSF9JWERQNFhYCiAJYm9vbAogCWRlcGVuZHMgb24gQVJDSF9JWERQNDI1IHx8IE1BQ0hfSVhEUDQ2NSB8fCBNQUNIX0tJWFJQNDM1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCmluZGV4IGY1Y2FlMWUuLjgxMTJmNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC0yNzksMTEgKzI3OSwxMSBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpeHA0eHhfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJ0aW1lcjEiLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIJPSBpeHA0eHhfdGltZXJfaW50ZXJydXB0LAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGl4cDR4eF90aW1lcl9pbml0KHZvaWQpCit2b2lkIF9faW5pdCBpeHA0eHhfdGltZXJfaW5pdCh2b2lkKQogewogCS8qIFJlc2V0L2Rpc2FibGUgY291bnRlciAqLwogCSpJWFA0WFhfT1NSVDEgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY295b3RlLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY295b3RlLXBjaS5jCmluZGV4IDdiYzk0ZjMuLmFkMmU1YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NveW90ZS1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtcGNpLmMKQEAgLTI1LDEwICsyNSw2IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KIAotZXh0ZXJuIHZvaWQgaXhwNHh4X3BjaV9wcmVpbml0KHZvaWQpOwotZXh0ZXJuIGludCBpeHA0eHhfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOwotZXh0ZXJuIHN0cnVjdCBwY2lfYnVzICppeHA0eHhfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOwotCiB2b2lkIF9faW5pdCBjb3lvdGVfcGNpX3ByZWluaXQodm9pZCkKIHsKIAlzZXRfaXJxX3R5cGUoSVJRX0NPWU9URV9QQ0lfU0xPVDAsIElSUVRfTE9XKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2RzbWc2MDAtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2RzbWc2MDAtc2V0dXAuYwppbmRleCAxY2FmZjY1Li4xZTc1ZTEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9kc21nNjAwLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZHNtZzYwMC1zZXR1cC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBkc21nNjAwX2ZsYXNoX2RhdGEgPSB7CiAJLm1hcF9uYW1lCQk9ICJjZmlfcHJvYmUiLApAQCAtMTI4LDYgKzEyOSwxOSBAQAogCWdwaW9fbGluZV9zZXQoRFNNRzYwMF9QT19HUElPLCBJWFA0WFhfR1BJT19ISUdIKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGRzbWc2MDBfdGltZXJfaW5pdCh2b2lkKQoreworICAgIC8qIFRoZSB4dGFsIG9uIHRoaXMgbWFjaGluZSBpcyBub24tc3RhbmRhcmQuICovCisgICAgaXhwNHh4X3RpbWVyX2ZyZXEgPSBEU01HNjAwX0ZSRVE7CisKKyAgICAvKiBDYWxsIHN0YW5kYXJkIHRpbWVyX2luaXQgZnVuY3Rpb24uICovCisgICAgaXhwNHh4X3RpbWVyX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgZHNtZzYwMF90aW1lciA9IHsKKyAgICAuaW5pdCAgID0gZHNtZzYwMF90aW1lcl9pbml0LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGRzbWc2MDBfaW5pdCh2b2lkKQogewogCWl4cDR4eF9zeXNfaW5pdCgpOwpAQCAtMTU1LDIxICsxNjksMTMgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHNtZzYwMF9maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICpkZXNjLAotICAgICAgICAgICAgICAgIHN0cnVjdCB0YWcgKnRhZ3MsIGNoYXIgKipjbWRsaW5lLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpCi17Ci0gICAgICAgLyogVGhlIHh0YWwgb24gdGhpcyBtYWNoaW5lIGlzIG5vbi1zdGFuZGFyZC4gKi8KLSAgICAgICAgaXhwNHh4X3RpbWVyX2ZyZXEgPSBEU01HNjAwX0ZSRVE7Ci19Ci0KIE1BQ0hJTkVfU1RBUlQoRFNNRzYwMCwgIkQtTGluayBEU00tRzYwMCBSZXZBIikKIAkvKiBNYWludGFpbmVyOiB3d3cubnNsdTItbGludXgub3JnICovCiAJLnBoeXNfaW8JPSBJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1BIWVMsCiAJLmlvX3BnX29mZnN0CT0gKChJWFA0WFhfUEVSSVBIRVJBTF9CQVNFX1ZJUlQpID4+IDE4KSAmIDB4RkZGQywKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAotCS5maXh1cCAgICAgICAgICA9IGRzbWc2MDBfZml4dXAsCiAJLm1hcF9pbwkJPSBpeHA0eHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGl4cDR4eF9pbml0X2lycSwKLQkudGltZXIgICAgICAgICAgPSAmaXhwNHh4X3RpbWVyLAorCS50aW1lciAgICAgICAgICA9ICZkc21nNjAwX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBkc21nNjAwX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ3R3eDU3MTUtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXNldHVwLmMKaW5kZXggMzBmMTMwMC4uZGM2NzI1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ3R3eDU3MTUtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9ndHd4NTcxNS1zZXR1cC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXNldHVwLmMKICAqCi0gKiBHZW10ZWsgR1RXWDU3MTUgKExpbmtzeXMgV1JWNTRHKSBib2FyZCBzZXR0dXAKKyAqIEdlbXRlayBHVFdYNTcxNSAoTGlua3N5cyBXUlY1NEcpIGJvYXJkIHNldHVwCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0IEdlb3JnZSBULiBKb3NlcGgKICAqIERlcml2ZWQgZnJvbSBDb3lvdGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHBnNDI1LXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcGc0MjUtcGNpLmMKaW5kZXggNTA5YTk1YS4uZDFlNzViNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcGc0MjUtcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcGc0MjUtcGNpLmMKQEAgLTIzLDEwICsyMyw2IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KIAotZXh0ZXJuIHZvaWQgaXhwNHh4X3BjaV9wcmVpbml0KHZvaWQpOwotZXh0ZXJuIGludCBpeHA0eHhfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOwotZXh0ZXJuIHN0cnVjdCBwY2lfYnVzICppeHA0eHhfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOwotCiB2b2lkIF9faW5pdCBpeGRwZzQyNV9wY2lfcHJlaW5pdCh2b2lkKQogewogCXNldF9pcnFfdHlwZShJUlFfSVhQNFhYX0dQSU82LCBJUlFUX0xPVyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXNldHVwLmMKaW5kZXggOWEzMTQ0NC4uNzhhMTc0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbmFzMTAwZC1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L25hczEwMGQtc2V0dXAuYwpAQCAtMTU1LDcgKzE1NSw4IEBACiAKIAlwbV9wb3dlcl9vZmYgPSBuYXMxMDBkX3Bvd2VyX29mZjsKIAotCS8qIFRoaXMgaXMgb25seSB1c2VmdWwgb24gYSBtb2RpZmllZCBtYWNoaW5lLCBidXQgaXQgaXMgdmFsdWFibGUKKwkvKgorCSAqIFRoaXMgaXMgb25seSB1c2VmdWwgb24gYSBtb2RpZmllZCBtYWNoaW5lLCBidXQgaXQgaXMgdmFsdWFibGUKIAkgKiB0byBoYXZlIGl0IGZpcnN0IGluIG9yZGVyIHRvIHNlZSBkZWJ1ZyBtZXNzYWdlcywgYW5kIHNvIHRoYXQKIAkgKiBpdCBkb2VzICpub3QqIGdldCByZW1vdmVkIGlmIHBsYXRmb3JtX2FkZF9kZXZpY2VzIGZhaWxzIQogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXNldHVwLmMKaW5kZXggMTYyYzI2Ni4uOWJmOGNjYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1zZXR1cC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBuc2x1Ml9mbGFzaF9kYXRhID0gewogCS5tYXBfbmFtZQkJPSAiY2ZpX3Byb2JlIiwKQEAgLTQ5LDI2ICs1MCwyNiBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuc2x1Ml9sZWRfcmVzb3VyY2VzW10gPSB7CiAJewogCQkubmFtZQkJPSAicmVhZHkiLCAgLyogZ3JlZW4gbGVkICovCi0JCS5zdGFydAkJPSBOU0xVMl9MRURfR1JOLAotCQkuZW5kCQk9IE5TTFUyX0xFRF9HUk4sCisJCS5zdGFydAkJPSBOU0xVMl9MRURfR1JOX0dQSU8sCisJCS5lbmQJCT0gTlNMVTJfTEVEX0dSTl9HUElPLAogCQkuZmxhZ3MJCT0gSVhQNFhYX0dQSU9fSElHSCwKIAl9LAogCXsKIAkJLm5hbWUJCT0gInN0YXR1cyIsIC8qIHJlZCBsZWQgKi8KLQkJLnN0YXJ0CQk9IE5TTFUyX0xFRF9SRUQsCi0JCS5lbmQJCT0gTlNMVTJfTEVEX1JFRCwKKwkJLnN0YXJ0CQk9IE5TTFUyX0xFRF9SRURfR1BJTywKKwkJLmVuZAkJPSBOU0xVMl9MRURfUkVEX0dQSU8sCiAJCS5mbGFncwkJPSBJWFA0WFhfR1BJT19ISUdILAogCX0sCiAJewogCQkubmFtZQkJPSAiZGlzay0xIiwKLQkJLnN0YXJ0CQk9IE5TTFUyX0xFRF9ESVNLMSwKLQkJLmVuZAkJPSBOU0xVMl9MRURfRElTSzEsCisJCS5zdGFydAkJPSBOU0xVMl9MRURfRElTSzFfR1BJTywKKwkJLmVuZAkJPSBOU0xVMl9MRURfRElTSzFfR1BJTywKIAkJLmZsYWdzCQk9IElYUDRYWF9HUElPX0xPVywKIAl9LAogCXsKIAkJLm5hbWUJCT0gImRpc2stMiIsCi0JCS5zdGFydAkJPSBOU0xVMl9MRURfRElTSzIsCi0JCS5lbmQJCT0gTlNMVTJfTEVEX0RJU0syLAorCQkuc3RhcnQJCT0gTlNMVTJfTEVEX0RJU0syX0dQSU8sCisJCS5lbmQJCT0gTlNMVTJfTEVEX0RJU0syX0dQSU8sCiAJCS5mbGFncwkJPSBJWFA0WFhfR1BJT19MT1csCiAJfSwKIH07CkBAIC0xNTcsMTAgKzE1OCwyMSBAQAogCWdwaW9fbGluZV9zZXQoTlNMVTJfUE9fR1BJTywgSVhQNFhYX0dQSU9fSElHSCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBuc2x1Ml90aW1lcl9pbml0KHZvaWQpCit7CisgICAgLyogVGhlIHh0YWwgb24gdGhpcyBtYWNoaW5lIGlzIG5vbi1zdGFuZGFyZC4gKi8KKyAgICBpeHA0eHhfdGltZXJfZnJlcSA9IE5TTFUyX0ZSRVE7CisKKyAgICAvKiBDYWxsIHN0YW5kYXJkIHRpbWVyX2luaXQgZnVuY3Rpb24uICovCisgICAgaXhwNHh4X3RpbWVyX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbnNsdTJfdGltZXIgPSB7CisgICAgLmluaXQgICA9IG5zbHUyX3RpbWVyX2luaXQsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgbnNsdTJfaW5pdCh2b2lkKQogewotCWl4cDR4eF90aW1lcl9mcmVxID0gTlNMVTJfRlJFUTsKLQogCWl4cDR4eF9zeXNfaW5pdCgpOwogCiAJbnNsdTJfZmxhc2hfcmVzb3VyY2Uuc3RhcnQgPSBJWFA0WFhfRVhQX0JVU19CQVNFKDApOwpAQCAtMTY5LDcgKzE4MSw4IEBACiAKIAlwbV9wb3dlcl9vZmYgPSBuc2x1Ml9wb3dlcl9vZmY7CiAKLQkvKiBUaGlzIGlzIG9ubHkgdXNlZnVsIG9uIGEgbW9kaWZpZWQgbWFjaGluZSwgYnV0IGl0IGlzIHZhbHVhYmxlCisJLyoKKwkgKiBUaGlzIGlzIG9ubHkgdXNlZnVsIG9uIGEgbW9kaWZpZWQgbWFjaGluZSwgYnV0IGl0IGlzIHZhbHVhYmxlCiAJICogdG8gaGF2ZSBpdCBmaXJzdCBpbiBvcmRlciB0byBzZWUgZGVidWcgbWVzc2FnZXMsIGFuZCBzbyB0aGF0CiAJICogaXQgZG9lcyAqbm90KiBnZXQgcmVtb3ZlZCBpZiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyBmYWlscyEKIAkgKi8KQEAgLTE4NSw2ICsxOTgsNiBAQAogCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCiAJLm1hcF9pbwkJPSBpeHA0eHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGl4cDR4eF9pbml0X2lycSwKLQkudGltZXIgICAgICAgICAgPSAmaXhwNHh4X3RpbWVyLAorCS50aW1lciAgICAgICAgICA9ICZuc2x1Ml90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0gbnNsdTJfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTFjZjhkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvS2NvbmZpZwpAQCAtMCwwICsxLDEzIEBACitpZiBBUkNIX0tTODY5NQorCittZW51ICJLZW5kaW4vTWljcmVsIEtTODY5NSBJbXBsZW1lbnRhdGlvbnMiCisKK2NvbmZpZyBNQUNIX0tTODY5NQorCWJvb2wgIktTODY5NSBkZXZlbG9wbWVudCBib2FyZCIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gcnVuIG9uIHRoZSBvcmlnaW5hbAorCSAgS2VuZGluLU1pY3JlbCBLUzg2OTUgZGV2ZWxvcG1lbnQgYm9hcmQuCisKK2VuZG1lbnUKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiN2QzMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKKyMgYXJjaC9hcm0vbWFjaC1rczg2OTUvTWFrZWZpbGUKKyMKKyMgTWFrZWZpbGUgZm9yIEtTODY5NSBhcmNoaXRlY3R1cmUgc3VwcG9ydAorIworCitvYmoteQkJCQk6PSBjcHUubyBpcnEubyB0aW1lLm8gZGV2aWNlcy5vCitvYmotbQkJCQk6PQorb2JqLW4JCQkJOj0KK29iai0JCQkJOj0KKworIyBQQ0kgc3VwcG9ydCBpcyBvcHRpb25hbAorI29iai0kKENPTkZJR19QQ0kpCQkrPSBwY2kubworCisjIEJvYXJkLXNwZWNpZmljIHN1cHBvcnQKK29iai0kKENPTkZJR19NQUNIX0tTODY5NSkJKz0gYm9hcmQtbWljcmVsLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZWIyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsOCBAQAorIyBOb3RlOiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBhbHdheXMgYmUgdHJ1ZToKKyMgICBaUkVMQUREUiA9PSB2aXJ0X3RvX3BoeXMoVEVYVEFERFIpCisjICAgUEFSQU1TX1BIWVMgbXVzdCBiZSB3aXRoaW4gNE1CIG9mIFpSRUxBRERSCisjICAgSU5JVFJEX1BIWVMgbXVzdCBiZSBpbiBSQU0KKworICAgenJlbGFkZHIteQk6PSAweDAwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MDAwMDAxMDAKK2luaXRyZF9waHlzLXkJOj0gMHgwMDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtbWljcmVsLmMgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9ib2FyZC1taWNyZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmMwZWRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtbWljcmVsLmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gta3M4Njk1L2JvYXJkLW1pY3JlbC5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZGV2aWNlcy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisjaWZkZWYgQ09ORklHX1BDSQorc3RhdGljIGludCBfX2luaXQgbWljcmVsX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlyZXR1cm4gS1M4Njk1X0lSUV9FWFRFUk4wOworfQorCitzdGF0aWMgc3RydWN0IGtzODY5NV9wY2lfY2ZnIG1pY3JlbF9wY2kgPSB7CisJLm1vZGUJCT0gS1M4Njk1X01PREVfTUlOSVBDSSwKKwkubWFwX2lycQk9IG1pY3JlbF9wY2lfbWFwX2lycSwKK307CisjZW5kaWYKKworCitzdGF0aWMgdm9pZCBtaWNyZWxfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIk1pY3JlbCBLUzg2OTUgRGV2ZWxvcG1lbnQgQm9hcmQgaW5pdGlhbGl6aW5nXG4iKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKwlrczg2OTVfaW5pdF9wY2koJm1pY3JlbF9wY2kpOworI2VuZGlmCisKKwkvKiBBZGQgZGV2aWNlcyAqLworCWtzODY5NV9hZGRfZGV2aWNlX3dhbigpOwkvKiBldGgwID0gV0FOICovCisJa3M4Njk1X2FkZF9kZXZpY2VfbGFuKCk7CS8qIGV0aDEgPSBMQU4gKi8KK30KKworTUFDSElORV9TVEFSVChLUzg2OTUsICJLUzg2OTUgQ2VudGF1ciBEZXZlbG9wbWVudCBCb2FyZCIpCisJLyogTWFpbnRhaW5lcjogTWljcmVsIFNlbWljb25kdWN0b3IgSW5jLiAqLworCS5waHlzX2lvCT0gS1M4Njk1X0lPX1BBLAorCS5pb19wZ19vZmZzdAk9IChLUzg2OTVfSU9fVkEgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEtTODY5NV9TRFJBTV9QQSArIDB4MTAwLAorCS5tYXBfaW8JCT0ga3M4Njk1X21hcF9pbywKKwkuaW5pdF9pcnEJPSBrczg2OTVfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG1pY3JlbF9pbml0LAorCS50aW1lcgkJPSAma3M4Njk1X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3ZDI1NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2NwdS5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWtzODY5NS9jcHUuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogS1M4Njk1IENQVSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXN5cy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbWlzYy5oPgorCisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBtYXBfZGVzYyBrczg2OTVfaW9fZGVzY1tdID0geworCXsKKwkJLnZpcnR1YWwJPSBLUzg2OTVfSU9fVkEsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihLUzg2OTVfSU9fUEEpLAorCQkubGVuZ3RoCQk9IEtTODY5NV9JT19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGtzODY5NV9wcm9jZXNzb3JfaW5mbyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaWQsIHJldjsKKworCWlkID0gX19yYXdfcmVhZGwoS1M4Njk1X01JU0NfVkEgKyBLUzg2OTVfRElEKTsKKwlyZXYgPSBfX3Jhd19yZWFkbChLUzg2OTVfTUlTQ19WQSArIEtTODY5NV9SSUQpOworCisJcHJpbnRrKCJLUzg2OTUgSUQ9JTA0bHggIFN1YklEPSUwMmx4ICBSZXZpc2lvbj0lMDJseFxuIiwgKGlkICYgRElEX0lEKSwgKHJldiAmIFJJRF9TVUJJRCksIChyZXYgJiBSSURfUkVWSVNJT04pKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzeXNjbGtbOF0gPSB7IDEyNTAwMDAwMCwgMTAwMDAwMDAwLCA2MjUwMDAwMCwgNTAwMDAwMDAsIDQxNzAwMDAwLCAzMzMwMDAwMCwgMzEzMDAwMDAsIDI1MDAwMDAwIH07CitzdGF0aWMgdW5zaWduZWQgaW50IGNwdWNsa1s4XSA9IHsgMTY2MDAwMDAwLCAxNjYwMDAwMDAsIDgzMDAwMDAwLCA4MzAwMDAwMCwgNTUzMDAwMDAsIDU1MzAwMDAwLCA0MTUwMDAwMCwgNDE1MDAwMDAgfTsKKworc3RhdGljIHZvaWQgX19pbml0IGtzODY5NV9jbG9ja19pbmZvKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHNjZGMgPSBfX3Jhd19yZWFkbChLUzg2OTVfU1lTX1ZBICsgS1M4Njk1X0NMS0NPTikgJiBDTEtDT05fU0NEQzsKKworCXByaW50aygiQ2xvY2tzOiBTeXN0ZW0gJXUgTUh6LCBDUFUgJXUgTUh6XG4iLAorCQkJc3lzY2xrW3NjZGNdIC8gMTAwMDAwMCwgY3B1Y2xrW3NjZGNdIC8gMTAwMDAwMCk7Cit9CisKK3ZvaWQgX19pbml0IGtzODY5NV9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoa3M4Njk1X2lvX2Rlc2MsIEFSUkFZX1NJWkUoa3M4Njk1X2lvX2Rlc2MpKTsKKworCWtzODY5NV9wcm9jZXNzb3JfaW5mbygpOworCWtzODY5NV9jbG9ja19pbmZvKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2NTkzZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2RldmljZXMuYwpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gta3M4Njk1L2RldmljZXMuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbmRyZXcgVmljdG9yCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy13YW4uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWxhbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaHBuYS5oPgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgRXRoZXJuZXQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUk1fS1M4Njk1X0VUSEVSKSB8fCBkZWZpbmVkKENPTkZJR19BUk1fS1M4Njk1X0VUSEVSX01PRFVMRSkKK3N0YXRpYyB1NjQgZXRoX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga3M4Njk1X3dhbl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEtTODY5NV9XQU5fVkEsCisJCS5lbmQJPSBLUzg2OTVfV0FOX1ZBICsgMHgwMGZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJPSAiV0FOIFJYIiwKKwkJLnN0YXJ0CT0gS1M4Njk1X0lSUV9XQU5fUlhfU1RBVFVTLAorCQkuZW5kCT0gS1M4Njk1X0lSUV9XQU5fUlhfU1RBVFVTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJPSAiV0FOIFRYIiwKKwkJLnN0YXJ0CT0gS1M4Njk1X0lSUV9XQU5fVFhfU1RBVFVTLAorCQkuZW5kCT0gS1M4Njk1X0lSUV9XQU5fVFhfU1RBVFVTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVszXSA9IHsKKwkJLm5hbWUJPSAiV0FOIExpbmsiLAorCQkuc3RhcnQJPSBLUzg2OTVfSVJRX1dBTl9MSU5LLAorCQkuZW5kCT0gS1M4Njk1X0lSUV9XQU5fTElOSywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtzODY5NV93YW5fZGV2aWNlID0geworCS5uYW1lCQk9ICJrczg2OTVfZXRoZXIiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmZXRoX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwl9LAorCS5yZXNvdXJjZQk9IGtzODY5NV93YW5fcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShrczg2OTVfd2FuX3Jlc291cmNlcyksCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga3M4Njk1X2xhbl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEtTODY5NV9MQU5fVkEsCisJCS5lbmQJPSBLUzg2OTVfTEFOX1ZBICsgMHgwMGZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJPSAiTEFOIFJYIiwKKwkJLnN0YXJ0CT0gS1M4Njk1X0lSUV9MQU5fUlhfU1RBVFVTLAorCQkuZW5kCT0gS1M4Njk1X0lSUV9MQU5fUlhfU1RBVFVTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJPSAiTEFOIFRYIiwKKwkJLnN0YXJ0CT0gS1M4Njk1X0lSUV9MQU5fVFhfU1RBVFVTLAorCQkuZW5kCT0gS1M4Njk1X0lSUV9MQU5fVFhfU1RBVFVTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga3M4Njk1X2xhbl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImtzODY5NV9ldGhlciIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZldGhfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCX0sCisJLnJlc291cmNlCT0ga3M4Njk1X2xhbl9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGtzODY5NV9sYW5fcmVzb3VyY2VzKSwKK307CisKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBrczg2OTVfaHBuYV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEtTODY5NV9IUE5BX1ZBLAorCQkuZW5kCT0gS1M4Njk1X0hQTkFfVkEgKyAweDAwZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkubmFtZQk9ICJIUE5BIFJYIiwKKwkJLnN0YXJ0CT0gS1M4Njk1X0lSUV9IUE5BX1JYX1NUQVRVUywKKwkJLmVuZAk9IEtTODY5NV9JUlFfSFBOQV9SWF9TVEFUVVMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkubmFtZQk9ICJIUE5BIFRYIiwKKwkJLnN0YXJ0CT0gS1M4Njk1X0lSUV9IUE5BX1RYX1NUQVRVUywKKwkJLmVuZAk9IEtTODY5NV9JUlFfSFBOQV9UWF9TVEFUVVMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBrczg2OTVfaHBuYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImtzODY5NV9ldGhlciIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZldGhfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCX0sCisJLnJlc291cmNlCT0ga3M4Njk1X2hwbmFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShrczg2OTVfaHBuYV9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQga3M4Njk1X2FkZF9kZXZpY2Vfd2FuKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZrczg2OTVfd2FuX2RldmljZSk7Cit9CisKK3ZvaWQgX19pbml0IGtzODY5NV9hZGRfZGV2aWNlX2xhbih2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma3M4Njk1X2xhbl9kZXZpY2UpOworfQorCit2b2lkIF9faW5pdCBrczg2OTZfYWRkX2RldmljZV9ocG5hKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZrczg2OTVfaHBuYV9kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGtzODY5NV9hZGRfZGV2aWNlX3dhbih2b2lkKSB7fQordm9pZCBfX2luaXQga3M4Njk1X2FkZF9kZXZpY2VfbGFuKHZvaWQpIHt9Cit2b2lkIF9faW5pdCBrczg2OTZfYWRkX2RldmljZV9ocG5hKHZvaWQpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFdhdGNoZG9nCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfS1M4Njk1X1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19LUzg2OTVfV0FUQ0hET0dfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga3M4Njk1X3dkdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImtzODY5NV93ZHQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQga3M4Njk1X2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmtzODY5NV93ZHRfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQga3M4Njk1X2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBUaGVzZSBkZXZpY2VzIGFyZSBhbHdheXMgcHJlc2VudCBhbmQgZG9uJ3QgbmVlZCBhbnkgYm9hcmQtc3BlY2lmaWMKKyAqIHNldHVwLgorICovCitzdGF0aWMgaW50IF9faW5pdCBrczg2OTVfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKK3sKKwlrczg2OTVfYWRkX2RldmljZV93YXRjaGRvZygpOworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKGtzODY5NV9hZGRfc3RhbmRhcmRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLWtzODY5NS9nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiZmFiOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2dlbmVyaWMuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1rczg2OTUvZ2VuZXJpYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKi8KKworZXh0ZXJuIF9faW5pdCB2b2lkIGtzODY5NV9tYXBfaW8odm9pZCk7CitleHRlcm4gX19pbml0IHZvaWQga3M4Njk1X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIga3M4Njk1X3RpbWVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDA3YmJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaXJxLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWtzODY5NS9pcnEuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisKK3N0YXRpYyB2b2lkIGtzODY5NV9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJdW5zaWduZWQgbG9uZyBpbnRlbjsKKworCWludGVuID0gX19yYXdfcmVhZGwoS1M4Njk1X0lSUV9WQSArIEtTODY5NV9JTlRFTik7CisJaW50ZW4gJj0gfigxIDw8IGlycW5vKTsKKworCV9fcmF3X3dyaXRlbChpbnRlbiwgS1M4Njk1X0lSUV9WQSArIEtTODY5NV9JTlRFTik7Cit9CisKK3N0YXRpYyB2b2lkIGtzODY5NV9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwl1bnNpZ25lZCBsb25nIGludGVuOworCisJaW50ZW4gPSBfX3Jhd19yZWFkbChLUzg2OTVfSVJRX1ZBICsgS1M4Njk1X0lOVEVOKTsKKwlpbnRlbiB8PSAoMSA8PCBpcnFubyk7CisKKwlfX3Jhd193cml0ZWwoaW50ZW4sIEtTODY5NV9JUlFfVkEgKyBLUzg2OTVfSU5URU4pOworfQorCitzdGF0aWMgdm9pZCBrczg2OTVfaXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJX19yYXdfd3JpdGVsKCgxIDw8IGlycW5vKSwgS1M4Njk1X0lSUV9WQSArIEtTODY5NV9JTlRTVCk7Cit9CisKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBrczg2OTVfaXJxX2xldmVsX2NoaXA7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGtzODY5NV9pcnFfZWRnZV9jaGlwOworCisKK3N0YXRpYyBpbnQga3M4Njk1X2lycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCB0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgY3RybCwgbW9kZTsKKwl1bnNpZ25lZCBzaG9ydCBsZXZlbF90cmlnZ2VyZWQgPSAwOworCisJY3RybCA9IF9fcmF3X3JlYWRsKEtTODY5NV9HUElPX1ZBICsgS1M4Njk1X0lPUEMpOworCisJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgSVJRVF9ISUdIOgorCQkJbW9kZSA9IElPUENfVE1fSElHSDsKKwkJCWxldmVsX3RyaWdnZXJlZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBJUlFUX0xPVzoKKwkJCW1vZGUgPSBJT1BDX1RNX0xPVzsKKwkJCWxldmVsX3RyaWdnZXJlZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBJUlFUX1JJU0lORzoKKwkJCW1vZGUgPSBJT1BDX1RNX1JJU0lORzsKKwkJCWJyZWFrOworCQljYXNlIElSUVRfRkFMTElORzoKKwkJCW1vZGUgPSBJT1BDX1RNX0ZBTExJTkc7CisJCQlicmVhazsKKwkJY2FzZSBJUlFUX0JPVEhFREdFOgorCQkJbW9kZSA9IElPUENfVE1fRURHRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChpcnFubykgeworCQljYXNlIEtTODY5NV9JUlFfRVhURVJOMDoKKwkJCWN0cmwgJj0gfklPUENfSU9FSU5UMFRNOworCQkJY3RybCB8PSBJT1BDX0lPRUlOVDBfTU9ERShtb2RlKTsKKwkJCWJyZWFrOworCQljYXNlIEtTODY5NV9JUlFfRVhURVJOMToKKwkJCWN0cmwgJj0gfklPUENfSU9FSU5UMVRNOworCQkJY3RybCB8PSBJT1BDX0lPRUlOVDFfTU9ERShtb2RlKTsKKwkJCWJyZWFrOworCQljYXNlIEtTODY5NV9JUlFfRVhURVJOMjoKKwkJCWN0cmwgJj0gfklPUENfSU9FSU5UMlRNOworCQkJY3RybCB8PSBJT1BDX0lPRUlOVDJfTU9ERShtb2RlKTsKKwkJCWJyZWFrOworCQljYXNlIEtTODY5NV9JUlFfRVhURVJOMzoKKwkJCWN0cmwgJj0gfklPUENfSU9FSU5UM1RNOworCQkJY3RybCB8PSBJT1BDX0lPRUlOVDNfTU9ERShtb2RlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGxldmVsX3RyaWdnZXJlZCkgeworCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZrczg2OTVfaXJxX2xldmVsX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGhhbmRsZV9sZXZlbF9pcnEpOworCX0KKwllbHNlIHsKKwkJc2V0X2lycV9jaGlwKGlycW5vLCAma3M4Njk1X2lycV9lZGdlX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGhhbmRsZV9lZGdlX2lycSk7CisJfQorCisJX19yYXdfd3JpdGVsKGN0cmwsIEtTODY5NV9HUElPX1ZBICsgS1M4Njk1X0lPUEMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGtzODY5NV9pcnFfbGV2ZWxfY2hpcCA9IHsKKwkuYWNrCQk9IGtzODY5NV9pcnFfbWFzaywKKwkubWFzawkJPSBrczg2OTVfaXJxX21hc2ssCisJLnVubWFzawkJPSBrczg2OTVfaXJxX3VubWFzaywKKwkuc2V0X3R5cGUJPSBrczg2OTVfaXJxX3NldF90eXBlLAorfTsKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBrczg2OTVfaXJxX2VkZ2VfY2hpcCA9IHsKKwkuYWNrCQk9IGtzODY5NV9pcnFfYWNrLAorCS5tYXNrCQk9IGtzODY5NV9pcnFfbWFzaywKKwkudW5tYXNrCQk9IGtzODY5NV9pcnFfdW5tYXNrLAorCS5zZXRfdHlwZQk9IGtzODY5NV9pcnFfc2V0X3R5cGUsCit9OworCit2b2lkIF9faW5pdCBrczg2OTVfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBpbml0aWFsbHkgKi8KKwlfX3Jhd193cml0ZWwoMCwgS1M4Njk1X0lSUV9WQSArIEtTODY5NV9JTlRNQyk7CisJX19yYXdfd3JpdGVsKDAsIEtTODY5NV9JUlFfVkEgKyBLUzg2OTVfSU5URU4pOworCisJZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgeworCQlzd2l0Y2ggKGlycSkgeworCQkJLyogTGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgKi8KKwkJCWNhc2UgS1M4Njk1X0lSUV9CVVNfRVJST1I6CisJCQljYXNlIEtTODY5NV9JUlFfVUFSVF9NT0RFTV9TVEFUVVM6CisJCQljYXNlIEtTODY5NV9JUlFfVUFSVF9MSU5FX1NUQVRVUzoKKwkJCWNhc2UgS1M4Njk1X0lSUV9VQVJUX1JYOgorCQkJY2FzZSBLUzg2OTVfSVJRX0NPTU1fVFg6CisJCQljYXNlIEtTODY5NV9JUlFfQ09NTV9SWDoKKwkJCQlzZXRfaXJxX2NoaXAoaXJxLCAma3M4Njk1X2lycV9sZXZlbF9jaGlwKTsKKwkJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJCQlicmVhazsKKworCQkJLyogRWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyAqLworCQkJZGVmYXVsdDoKKwkJCQlrczg2OTVfaXJxX2FjayhpcnEpOwkvKiBjbGVhciBwZW5kaW5nIGJpdCAqLworCQkJCXNldF9pcnFfY2hpcChpcnEsICZrczg2OTVfaXJxX2VkZ2VfY2hpcCk7CisJCQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJfQorCisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWtzODY5NS90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjODZlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L3RpbWUuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gta3M4Njk1L3RpbWUuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWlycS5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisvKgorICogUmV0dXJucyBudW1iZXIgb2YgbXMgc2luY2UgbGFzdCBjbG9jayBpbnRlcnJ1cHQuICBOb3RlIHRoYXQgaW50ZXJydXB0cworICogd2lsbCBoYXZlIGJlZW4gZGlzYWJsZWQgYnkgZG9fZ2V0dGltZW9mZnNldCgpCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtzODY5NV9nZXR0aW1lb2Zmc2V0ICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZWxhcHNlZCwgdGljazIsIGludHBlbmRpbmc7CisKKwkvKgorCSAqIEdldCB0aGUgY3VycmVudCBudW1iZXIgb2YgdGlja3MuICBOb3RlIHRoYXQgdGhlcmUgaXMgYSByYWNlCisJICogY29uZGl0aW9uIGJldHdlZW4gdXMgcmVhZGluZyB0aGUgdGltZXIgYW5kIGNoZWNraW5nIGZvciBhbgorCSAqIGludGVycnVwdC4gIFdlIHNvbHZlIHRoaXMgYnkgZW5zdXJpbmcgdGhhdCB0aGUgY291bnRlciBoYXMgbm90CisJICogcmVsb2FkZWQgYmV0d2VlbiBvdXIgdHdvIHJlYWRzLgorCSAqLworCWVsYXBzZWQgPSBfX3Jhd19yZWFkbChLUzg2OTVfVE1SX1ZBICsgS1M4Njk1X1QxVEMpICsgX19yYXdfcmVhZGwoS1M4Njk1X1RNUl9WQSArIEtTODY5NV9UMVBEKTsKKwlkbyB7CisJCXRpY2syID0gZWxhcHNlZDsKKwkJaW50cGVuZGluZyA9IF9fcmF3X3JlYWRsKEtTODY5NV9JUlFfVkEgKyBLUzg2OTVfSU5UU1QpICYgKDEgPDwgS1M4Njk1X0lSUV9USU1FUjEpOworCQllbGFwc2VkID0gX19yYXdfcmVhZGwoS1M4Njk1X1RNUl9WQSArIEtTODY5NV9UMVRDKSArIF9fcmF3X3JlYWRsKEtTODY5NV9UTVJfVkEgKyBLUzg2OTVfVDFQRCk7CisJfSB3aGlsZSAoZWxhcHNlZCA+IHRpY2syKTsKKworCS8qIENvbnZlcnQgdG8gbnVtYmVyIG9mIHRpY2tzIGV4cGlyZWQgKG5vdCByZW1haW5pbmcpICovCisJZWxhcHNlZCA9IChDTE9DS19USUNLX1JBVEUgLyBIWikgLSBlbGFwc2VkOworCisJLyogSXMgaW50ZXJydXB0IHBlbmRpbmc/ICBJZiBzbywgdGhlbiB0aW1lciBoYXMgYmVlbiByZWxvYWRlZCBhbHJlYWR5LiAqLworCWlmIChpbnRwZW5kaW5nKQorCQllbGFwc2VkICs9IChDTE9DS19USUNLX1JBVEUgLyBIWik7CisKKwkvKiBDb252ZXJ0IHRpY2tzIHRvIHVzZWNzICovCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKShlbGFwc2VkICogKHRpY2tfbnNlYyAvIDEwMDApKSAvIExBVENIOworfQorCisvKgorICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lci4KKyAqLworc3RhdGljIGlycXJldHVybl90IGtzODY5NV90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCXRpbWVyX3RpY2soKTsKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBrczg2OTVfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJrczg2OTVfdGljayIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5oYW5kbGVyCT0ga3M4Njk1X3RpbWVyX2ludGVycnVwdCwKK307CisKK3N0YXRpYyB2b2lkIGtzODY5NV90aW1lcl9zZXR1cCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdG1vdXQgPSBDTE9DS19USUNLX1JBVEUgLyBIWjsKKwl1bnNpZ25lZCBsb25nIHRtY29uOworCisJLyogZGlzYWJsZSB0aW1lcjEgKi8KKwl0bWNvbiA9IF9fcmF3X3JlYWRsKEtTODY5NV9UTVJfVkEgKyBLUzg2OTVfVE1DT04pOworCV9fcmF3X3dyaXRlbCh0bWNvbiAmIH5UTUNPTl9UMUVOLCBLUzg2OTVfVE1SX1ZBICsgS1M4Njk1X1RNQ09OKTsKKworCV9fcmF3X3dyaXRlbCh0bW91dCAvIDIsIEtTODY5NV9UTVJfVkEgKyBLUzg2OTVfVDFUQyk7CisJX19yYXdfd3JpdGVsKHRtb3V0IC8gMiwgS1M4Njk1X1RNUl9WQSArIEtTODY5NV9UMVBEKTsKKworCS8qIHJlLWVuYWJsZSB0aW1lcjEgKi8KKwlfX3Jhd193cml0ZWwodG1jb24gfCBUTUNPTl9UMUVOLCBLUzg2OTVfVE1SX1ZBICsgS1M4Njk1X1RNQ09OKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGtzODY5NV90aW1lcl9pbml0ICh2b2lkKQoreworCWtzODY5NV90aW1lcl9zZXR1cCgpOworCisJLyogRW5hYmxlIHRpbWVyIGludGVycnVwdHMgKi8KKwlzZXR1cF9pcnEoS1M4Njk1X0lSUV9USU1FUjEsICZrczg2OTVfdGltZXJfaXJxKTsKK30KKworc3RydWN0IHN5c190aW1lciBrczg2OTVfdGltZXIgPSB7CisJLmluaXQJCT0ga3M4Njk1X3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSBrczg2OTVfZ2V0dGltZW9mZnNldCwKKwkucmVzdW1lCQk9IGtzODY5NV90aW1lcl9zZXR1cCwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvbGNkLXBhbmVsLmggYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvbGNkLXBhbmVsLmgKaW5kZXggNGZiMmVmYy4uZGY2ZTM4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2xjZC1wYW5lbC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9sY2QtcGFuZWwuaApAQCAtMTI2LDcgKzEyNiw3IEBACiAKICAqLwogCi0vKiBUaGUgZnVsbCBob3Jvem9udGFsIGN5Y2xlIChUaCkgaXMgY2xvY2svMzYwLzQwMC80NTAuICovCisvKiBUaGUgZnVsbCBob3Jpem9udGFsIGN5Y2xlIChUaCkgaXMgY2xvY2svMzYwLzQwMC80NTAuICovCiAvKiBUaGUgZnVsbCB2ZXJ0aWNhbCAgIGN5Y2xlIChUdikgaXMgbGluZS8yNTEvMjYyLzI4MC4gKi8KIAogI2RlZmluZSBQSVhfQ0xPQ0tfVEFSR0VUCSg2MzAwMDAwKSAvKiAtLzYuMy83IE1IeiAqLwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJLyogTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudCBMQ0QgNi40IiBWR0EgLTEwICovCiAJLyogU2hhcnAgUE4gTFE2NEQzNDMgKi8KIAotLyogVGhlIGZ1bGwgaG9yb3pvbnRhbCBjeWNsZSAoVGgpIGlzIGNsb2NrLzc1MC84MDAvOTAwLiAqLworLyogVGhlIGZ1bGwgaG9yaXpvbnRhbCBjeWNsZSAoVGgpIGlzIGNsb2NrLzc1MC84MDAvOTAwLiAqLwogLyogVGhlIGZ1bGwgdmVydGljYWwgICBjeWNsZSAoVHYpIGlzIGxpbmUvNTE1LzUyNS81NjAuICovCiAKICNkZWZpbmUgUElYX0NMT0NLX1RBUkdFVAkoMjgzMzAwMDApCkBAIC0yNDMsNyArMjQzLDcgQEAKICAqIChmZGlzaywgZTJmc2NrKS4gIEFuZCwgYXQgdGhhdCBzcGVlZCB0aGUgZGlzcGxheSBtYXkgaGF2ZSBhIHZpc2libGUKICAqIGZsaWNrZXIuICovCiAKLS8qIFRoZSBmdWxsIGhvcm96b250YWwgY3ljbGUgKFRoKSBpcyBjbG9jay84MzIvMTA1Ni8xMzk1LiAqLworLyogVGhlIGZ1bGwgaG9yaXpvbnRhbCBjeWNsZSAoVGgpIGlzIGNsb2NrLzgzMi8xMDU2LzEzOTUuICovCiAKICNkZWZpbmUgUElYX0NMT0NLX1RBUkdFVAkoMjAwMDAwMDApCiAjZGVmaW5lIFBJWF9DTE9DS19ESVZJREVSCUNMT0NLX1RPX0RJViAoUElYX0NMT0NLX1RBUkdFVCwgSENMSykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvdGltZS5jCmluZGV4IGJlZjNjNGIuLmMyNTMxNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L3RpbWUuYwpAQCAtNTMsNyArNTMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBsaDdhNDB4X3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiTEhBNzQweCBUaW1lciBUaWNrIiwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAogCS5oYW5kbGVyCT0gbGg3YTQweF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1uZXR4L3RpbWUuYwppbmRleCA3ZTEzMmZjLi40NzYyZTIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5ldHgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC90aW1lLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbmV0eF90aW1lcl9pcnEgPSB7CiAJLm5hbWUgICAgICAgICAgID0gIk5ldFggVGltZXIgVGljayIsCi0JLmZsYWdzICAgICAgICAgID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmZsYWdzICAgICAgICAgID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIgICAgICAgID0gbmV0eF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC90aW1lLmMKaW5kZXggZWVjMDVmMS4uYjk3ZDBjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L3RpbWUuYwpAQCAtMzUsNyArMzUsNyBAQAogewogCS8qIHJldHVybiB0aGUgbWljcm9zZWNvbmRzIHdoaWNoIGhhdmUgcGFzc2VkIHNpbmNlIHRoZSBsYXN0IGludGVycnVwdAogCSAqIHdhcyBfc2VydmljZWRfLiAgVGhhdCBpcywgaWYgYW4gaW50ZXJydXB0IGlzIHBlbmRpbmcgb3IgdGhlIGNvdW50ZXIKLQkgKiByZWxvYWRzLCByZXR1cm4gb25lIHBlcmlvZGUgbW9yZS4gKi8KKwkgKiByZWxvYWRzLCByZXR1cm4gb25lIHBlcmlvZCBtb3JlLiAqLwogCiAJdTMyIGNvdW50ZXIxID0gU1lTX1RSKDApOwogCWludCBwZW5kaW5nID0gU1lTX0lTUiAmICgxIDw8IElSUV9USU1FUjApOwpAQCAtNTMsNyArNTMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBuczl4eHhfdGltZXJfaXJxID0gewogCS5uYW1lID0gIk5TOXh4eCBUaW1lciBUaWNrIiwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKIAkuaGFuZGxlciA9IG5zOXh4eF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKaW5kZXggODc4MWFhZS4uZjZlY2RkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwpAQCAtMjIsNiArMjIsNyBAQAogY29uZmlnIE1BQ0hfT01BUF9JTk5PVkFUT1IKIAlib29sICJUSSBJbm5vdmF0b3IiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFgpCisJc2VsZWN0IE9NQVBfTUNCU1AKIAloZWxwCiAgICAgICAgICAgVEkgT01BUCAxNTEwIG9yIDE2MTAgSW5ub3ZhdG9yIGJvYXJkIHN1cHBvcnQuIFNheSBZIGhlcmUgaWYgeW91CiAgICAgICAgICAgaGF2ZSBzdWNoIGEgYm9hcmQuCkBAIC0yOSw2ICszMCw3IEBACiBjb25maWcgTUFDSF9PTUFQX0gyCiAJYm9vbCAiVEkgSDIgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTZYWAorCXNlbGVjdCBPTUFQX01DQlNQCiAgICAgCWhlbHAKIAkgIFRJIE9NQVAgMTYxMC8xNjExQiBIMiBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2gKIAkgIGEgYm9hcmQuCkBAIC0zNiw2ICszOCw3IEBACiBjb25maWcgTUFDSF9PTUFQX0gzCiAJYm9vbCAiVEkgSDMgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTZYWAorIwlzZWxlY3QgR1BJT0VYUEFOREVSX09NQVAKICAgICAJaGVscAogCSAgVEkgT01BUCAxNzEwIEgzIGJvYXJkIHN1cHBvcnQuIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaAogCSAgYSBib2FyZC4KQEAgLTQzLDcgKzQ2LDcgQEAKIGNvbmZpZyBNQUNIX09NQVBfT1NLCiAJYm9vbCAiVEkgT1NLIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE2WFgKLQlzZWxlY3QgVFBTNjUwMTAKKwlzZWxlY3QgT01BUF9NQ0JTUAogICAgIAloZWxwCiAJICBUSSBPTUFQIDU5MTIgT1NLIChPTUFQIFN0YXJ0ZXIgS2l0KSBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlCiAgICAgICAgICAgaWYgeW91IGhhdmUgc3VjaCBhIGJvYXJkLgpAQCAtODQsNyArODcsNyBAQAogICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSBQYWxtIFR1bmdzdGVuIEUgUERBLiBDdXJyZW50bHkgb25seSB0aGUgTENEIHBhbmVsCiAgICAgICAgICAgaXMgc3VwcG9ydGVkLiBUbyBib290IHRoZSBrZXJuZWwsIHlvdSdsbCBuZWVkIGEgUGFsbU9TIGNvbXBhdGlibGUKICAgICAgICAgICBib290bG9hZGVyOyBjaGVjayBvdXQgaHR0cDovL3BhbG10ZWxpbnV4LnNvdXJjZWZvcmdlLm5ldCBmb3IgbW9yZQotICAgICAgICAgIGluZm9ybWF0aW9ucy4KKyAgICAgICAgICBpbmZvcm1hdGlvbi4KICAgICAgICAgICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2ggYSBQREEsIHNheSBOTyBvdGhlcndpc2UuCiAKIGNvbmZpZyBNQUNIX05PS0lBNzcwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQppbmRleCA3MTY1Zjc0Li5hOGI5YTAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKQEAgLTM3LDQgKzM3LDMgQEAKIGxlZC0kKENPTkZJR19NQUNIX09NQVBfUEVSU0VVUzIpCSs9IGxlZHMtaDJwMi1kZWJ1Zy5vCiBsZWQtJChDT05GSUdfTUFDSF9PTUFQX09TSykJCSs9IGxlZHMtb3NrLm8KIG9iai0kKENPTkZJR19MRURTKQkJCSs9ICQobGVkLXkpCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKaW5kZXggNjJlNDJjNy4uZjY1YmFhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCW1kZWxheSg1MCk7CiB9CiAKLXZvaWQgb21hcF9mc2FtcGxlX2luaXRfaXJxKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9mc2FtcGxlX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcDFfaW5pdF9jb21tb25faHcoKTsKIAlvbWFwX2luaXRfaXJxKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKaW5kZXggYWQ1MTkzOS4uNDhjOGM5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwpAQCAtMzI2LDcgKzMyNiw3IEBACiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBoMl9jb25maWdbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGgyX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiAJeyBPTUFQX1RBR19VU0IsICAgICAgICAgICAmaDJfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfTU1DLCAgICAgICAgICAgJmgyX21tY19jb25maWcgfSwKIAl7IE9NQVBfVEFHX1VBUlQsCSZoMl91YXJ0X2NvbmZpZyB9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCmluZGV4IDlkMjM0NmYuLjdiMjYwYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCX0KIH0KIAotdm9pZCBoM19pbml0X2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGgzX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcDFfaW5pdF9jb21tb25faHcoKTsKIAlvbWFwX2luaXRfaXJxKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCBjYjAwNTMwLi43ZTYzYTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTMwOCw3ICszMDgsNyBAQAogCX0KIH0KIAotdm9pZCBpbm5vdmF0b3JfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBpbm5vdmF0b3JfaW5pdF9pcnEodm9pZCkKIHsKIAlvbWFwMV9pbml0X2NvbW1vbl9odygpOwogCW9tYXBfaW5pdF9pcnEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCmluZGV4IDdkMGNmN2EuLmU3MTMwMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwpAQCAtMzg1LDcgKzM4NSw3IEBACiAJLyogV29ya2Fyb3VuZCBmb3Igd3JvbmcgQ1MzIChOT1IgZmxhc2gpIHRpbWluZwogCSAqIFRoZXJlIGFyZSBzb21lIFUtQm9vdCB2ZXJzaW9ucyBvdXQgdGhlcmUgd2hpY2ggY29uZmlndXJlCiAJICogd3JvbmcgQ1MzIG1lbW9yeSB0aW1pbmdzLiBUaGlzIG1haW5seSBsZWFkcyB0byBDUkMKLQkgKiBvciBzaW1pbGlhciBlcnJvcnMgaWYgeW91IHVzZSBOT1IgZmxhc2ggKGUuZy4gd2l0aCBKRkZTMikKKwkgKiBvciBzaW1pbGFyIGVycm9ycyBpZiB5b3UgdXNlIE5PUiBmbGFzaCAoZS5nLiB3aXRoIEpGRlMyKQogCSAqLwogCWlmIChFTUlGU19DQ1MoMykgIT0gRU1JRlNfQ1MzX1ZBTCkKIAkJRU1JRlNfQ0NTKDMpID0gRU1JRlNfQ1MzX1ZBTDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCmluZGV4IDRiYzhhNjIuLjAxNTgyNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBPcmlnaW5hbCB2ZXJzaW9uIDogTGF1cmVudCBHb256YWxlegogICoKLSAqIE1haW50YWludGVycyA6IGh0dHA6Ly9wYWxtdGVsaW51eC5zZi5uZXQKKyAqIE1haW50YWluZXJzIDogaHR0cDovL3BhbG10ZWxpbnV4LnNmLm5ldAogICogICAgICAgICAgICAgICAgcGFsbXRlbGludXgtZGV2ZWxvcHBlcnNAbGlzdHMuc2YubmV0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwppbmRleCBmYTRiZTk2Li4xZDVjOGQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAltZGVsYXkoNTApOwogfQogCi12b2lkIG9tYXBfcGVyc2V1czJfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3BlcnNldXMyX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcDFfaW5pdF9jb21tb25faHcoKTsKIAlvbWFwX2luaXRfaXJxKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCmluZGV4IDZkY2QxMGEuLmRhOGEzYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jCkBAIC0yNCwzNSArMjQsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KIAotI2lmCWRlZmluZWQoQ09ORklHX09NQVAxNjEwX0lSKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQMTYxT19JUl9NT0RVTEUpCi0KLXN0YXRpYyB1NjQgaXJkYV9kbWFtYXNrID0gMHhmZmZmZmZmZjsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDE2MTBpcl9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAib21hcDE2MTAtaXIiLAotCS5pZCA9IC0xLAotCS5kZXYgPSB7Ci0JCS5kbWFfbWFzawk9ICZpcmRhX2RtYW1hc2ssCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9pcmRhKHZvaWQpCi17Ci0JLyogRklYTUUgZGVmaW5lIGFuZCB1c2UgYSBib290IHRhZywgbWVtYmVycyBzb21ldGhpbmcgbGlrZToKLQkgKiAgdTgJCXVhcnQ7CQkvLyB1YXJ0MSwgb3IgdWFydDMKLQkgKiAuLi4gYnV0IGRyaXZlciBvbmx5IGhhbmRsZXMgdWFydDMgZm9yIG5vdwotCSAqICBzMTYJCWZpcl9zZWw7CS8vIGdwaW8gZm9yIFNJUiB2cyBGSVIKLQkgKiAuLi4gbWF5IHByZWZlciBhIGNhbGxiYWNrIGZvciBTSVIvTUlSL0ZJUiBtb2RlIHNlbGVjdDsKLQkgKiB3aGlsZSBoMiB1c2VzIGEgR1BJTywgSDMgdXNlcyBhIGdwaW8gZXhwYW5kZXIKLQkgKi8KLQlpZiAobWFjaGluZV9pc19vbWFwX2gyKCkKLQkJCXx8IG1hY2hpbmVfaXNfb21hcF9oMygpKQotCQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMTYxMGlyX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9pcmRhKHZvaWQpIHt9Ci0jZW5kaWYKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9PTUFQX01PRFVMRSkKQEAgLTkwLDYgKzYxLDQ1IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3J0Yyh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0RTUCkgfHwgZGVmaW5lZChDT05GSUdfT01BUF9EU1BfTU9EVUxFKQorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKKyMgIGRlZmluZSBPTUFQMV9NQk9YX1NJWkUJMHgyMworIyAgZGVmaW5lIElOVF9EU1BfTUFJTEJPWDEJSU5UXzE1MTBfRFNQX01BSUxCT1gxCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorIyAgZGVmaW5lIE9NQVAxX01CT1hfU0laRQkweDJmCisjICBkZWZpbmUgSU5UX0RTUF9NQUlMQk9YMQlJTlRfMTYxMF9EU1BfTUFJTEJPWDEKKyNlbmRpZgorCisjZGVmaW5lIE9NQVAxX01CT1hfQkFTRQkJSU9fQUREUkVTUyhPTUFQMTZYWF9NQUlMQk9YX0JBU0UpCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWJveF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQMV9NQk9YX0JBU0UsCisJCS5lbmQJCT0gT01BUDFfTUJPWF9CQVNFICsgT01BUDFfTUJPWF9TSVpFLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBJTlRfRFNQX01BSUxCT1gxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1ib3hfZGV2aWNlID0geworCS5uYW1lCQk9ICJtYWlsYm94IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1ib3hfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtYm94X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfbWJveCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWJveF9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfbWJveCh2b2lkKSB7IH0KKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9TVEkpCiAKICNkZWZpbmUgT01BUDFfU1RJX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZlYTAwMCkKQEAgLTE1NCw3ICsxNjQsOCBAQAogCS8qIHBsZWFzZSBrZWVwIHRoZXNlIGNhbGxzLCBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFib3ZlLAogCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCiAJICovCi0Jb21hcF9pbml0X2lyZGEoKTsKKworCW9tYXBfaW5pdF9tYm94KCk7CiAJb21hcF9pbml0X3J0YygpOwogCW9tYXBfaW5pdF9zdGkoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCmluZGV4IGZhYjhiMGIuLjgxYzRlNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKQEAgLTE3LDExICsxNywxMSBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvb21hcGZiLmg+CiAKIGV4dGVybiBpbnQgb21hcDFfY2xrX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX2NoZWNrX3JldmlzaW9uKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcF9zcmFtX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwZmJfcmVzZXJ2ZV9zZHJhbSh2b2lkKTsKIAogLyoKICAqIFRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5IHByb3ZpZGUgdGhlIGV4dHJhIG1hcHBpbmcgYmVzaWRlcyB0aGUKQEAgLTEyMSw3ICsxMjEsNyBAQAogI2VuZGlmCiAKIAlvbWFwX3NyYW1faW5pdCgpOwotCW9tYXBmYl9yZXNlcnZlX21lbSgpOworCW9tYXBmYl9yZXNlcnZlX3NkcmFtKCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWFpbGJveC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYWJmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYwpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIE1haWxib3ggcmVzZXJ2YXRpb24gbW9kdWxlcyBmb3IgRFNQCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKiBXcml0dGVuIGJ5OiBIaXJvc2hpIERPWVUgPEhpcm9zaGkuRE9ZVUBub2tpYS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWFpbGJveC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBNQUlMQk9YX0FSTTJEU1AxCQkweDAwCisjZGVmaW5lIE1BSUxCT1hfQVJNMkRTUDFiCQkweDA0CisjZGVmaW5lIE1BSUxCT1hfRFNQMkFSTTEJCTB4MDgKKyNkZWZpbmUgTUFJTEJPWF9EU1AyQVJNMWIJCTB4MGMKKyNkZWZpbmUgTUFJTEJPWF9EU1AyQVJNMgkJMHgxMAorI2RlZmluZSBNQUlMQk9YX0RTUDJBUk0yYgkJMHgxNAorI2RlZmluZSBNQUlMQk9YX0FSTTJEU1AxX0ZsYWcJCTB4MTgKKyNkZWZpbmUgTUFJTEJPWF9EU1AyQVJNMV9GbGFnCQkweDFjCisjZGVmaW5lIE1BSUxCT1hfRFNQMkFSTTJfRmxhZwkJMHgyMAorCit1bnNpZ25lZCBsb25nIG1ib3hfYmFzZTsKKworc3RydWN0IG9tYXBfbWJveDFfZmlmbyB7CisJdW5zaWduZWQgbG9uZyBjbWQ7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKK307CisKK3N0cnVjdCBvbWFwX21ib3gxX3ByaXYgeworCXN0cnVjdCBvbWFwX21ib3gxX2ZpZm8gdHhfZmlmbzsKKwlzdHJ1Y3Qgb21hcF9tYm94MV9maWZvIHJ4X2ZpZm87Cit9OworCitzdGF0aWMgaW5saW5lIGludCBtYm94X3JlYWRfcmVnKHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWR3KG1ib3hfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3dyaXRlX3JlZyh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCV9fcmF3X3dyaXRldyh2YWwsIG1ib3hfYmFzZSArIHJlZyk7Cit9CisKKy8qIG1zZyAqLworc3RhdGljIGlubGluZSBtYm94X21zZ190IG9tYXAxX21ib3hfZmlmb19yZWFkKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJc3RydWN0IG9tYXBfbWJveDFfZmlmbyAqZmlmbyA9CisJCSYoKHN0cnVjdCBvbWFwX21ib3gxX3ByaXYgKiltYm94LT5wcml2KS0+cnhfZmlmbzsKKwltYm94X21zZ190IG1zZzsKKworCW1zZyA9IG1ib3hfcmVhZF9yZWcoZmlmby0+ZGF0YSk7CisJbXNnIHw9ICgobWJveF9tc2dfdCkgbWJveF9yZWFkX3JlZyhmaWZvLT5jbWQpKSA8PCAxNjsKKworCXJldHVybiBtc2c7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorb21hcDFfbWJveF9maWZvX3dyaXRlKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgbXNnKQoreworCXN0cnVjdCBvbWFwX21ib3gxX2ZpZm8gKmZpZm8gPQorCQkmKChzdHJ1Y3Qgb21hcF9tYm94MV9wcml2ICopbWJveC0+cHJpdiktPnR4X2ZpZm87CisKKwltYm94X3dyaXRlX3JlZyhtc2cgJiAweGZmZmYsIGZpZm8tPmRhdGEpOworCW1ib3hfd3JpdGVfcmVnKG1zZyA+PiAxNiwgZmlmby0+Y21kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb21hcDFfbWJveF9maWZvX2VtcHR5KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAxX21ib3hfZmlmb19mdWxsKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJc3RydWN0IG9tYXBfbWJveDFfZmlmbyAqZmlmbyA9CisJCSYoKHN0cnVjdCBvbWFwX21ib3gxX3ByaXYgKiltYm94LT5wcml2KS0+cnhfZmlmbzsKKworCXJldHVybiAobWJveF9yZWFkX3JlZyhmaWZvLT5mbGFnKSk7Cit9CisKKy8qIGlycSAqLworc3RhdGljIGlubGluZSB2b2lkCitvbWFwMV9tYm94X2VuYWJsZV9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X3R5cGVfdCBpcnEpCit7CisJaWYgKGlycSA9PSBJUlFfUlgpCisJCWVuYWJsZV9pcnEobWJveC0+aXJxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitvbWFwMV9tYm94X2Rpc2FibGVfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF90eXBlX3QgaXJxKQoreworCWlmIChpcnEgPT0gSVJRX1JYKQorCQlkaXNhYmxlX2lycShtYm94LT5pcnEpOworfQorCitzdGF0aWMgaW5saW5lIGludAorb21hcDFfbWJveF9pc19pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X3R5cGVfdCBpcnEpCit7CisJaWYgKGlycSA9PSBJUlFfVFgpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfbWJveF9vcHMgb21hcDFfbWJveF9vcHMgPSB7CisJLnR5cGUJCT0gT01BUF9NQk9YX1RZUEUxLAorCS5maWZvX3JlYWQJPSBvbWFwMV9tYm94X2ZpZm9fcmVhZCwKKwkuZmlmb193cml0ZQk9IG9tYXAxX21ib3hfZmlmb193cml0ZSwKKwkuZmlmb19lbXB0eQk9IG9tYXAxX21ib3hfZmlmb19lbXB0eSwKKwkuZmlmb19mdWxsCT0gb21hcDFfbWJveF9maWZvX2Z1bGwsCisJLmVuYWJsZV9pcnEJPSBvbWFwMV9tYm94X2VuYWJsZV9pcnEsCisJLmRpc2FibGVfaXJxCT0gb21hcDFfbWJveF9kaXNhYmxlX2lycSwKKwkuaXNfaXJxCQk9IG9tYXAxX21ib3hfaXNfaXJxLAorfTsKKworLyogRklYTUU6IHRoZSBmb2xsb3dpbmcgc3RydWN0IHNob3VsZCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHVzZXIgaWQgKi8KKworLyogRFNQICovCitzdGF0aWMgc3RydWN0IG9tYXBfbWJveDFfcHJpdiBvbWFwMV9tYm94X2RzcF9wcml2ID0geworCS50eF9maWZvID0geworCQkuY21kCT0gTUFJTEJPWF9BUk0yRFNQMWIsCisJCS5kYXRhCT0gTUFJTEJPWF9BUk0yRFNQMSwKKwkJLmZsYWcJPSBNQUlMQk9YX0FSTTJEU1AxX0ZsYWcsCisJfSwKKwkucnhfZmlmbyA9IHsKKwkJLmNtZAk9IE1BSUxCT1hfRFNQMkFSTTFiLAorCQkuZGF0YQk9IE1BSUxCT1hfRFNQMkFSTTEsCisJCS5mbGFnCT0gTUFJTEJPWF9EU1AyQVJNMV9GbGFnLAorCX0sCit9OworCitzdHJ1Y3Qgb21hcF9tYm94IG1ib3hfZHNwX2luZm8gPSB7CisJLm5hbWUJPSAiZHNwIiwKKwkub3BzCT0gJm9tYXAxX21ib3hfb3BzLAorCS5wcml2CT0gJm9tYXAxX21ib3hfZHNwX3ByaXYsCit9OworRVhQT1JUX1NZTUJPTChtYm94X2RzcF9pbmZvKTsKKworc3RhdGljIGludCBfX2luaXQgb21hcDFfbWJveF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQgPSAwOworCisJaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgIT0gMikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIG51bWJlciBvZiByZXNvdXJjZXM6ICVkXG4iLAorCQkJcGRldi0+bnVtX3Jlc291cmNlcyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIE1CT1ggYmFzZSAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHVubGlrZWx5KCFyZXMpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbWVtIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCW1ib3hfYmFzZSA9IHJlcy0+c3RhcnQ7CisKKwkvKiBEU1AgSVJRICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAodW5saWtlbHkoIXJlcykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBpcnEgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJbWJveF9kc3BfaW5mby5pcnEgPSByZXMtPnN0YXJ0OworCisJcmV0ID0gb21hcF9tYm94X3JlZ2lzdGVyKCZtYm94X2RzcF9pbmZvKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb21hcDFfbWJveF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlvbWFwX21ib3hfdW5yZWdpc3RlcigmbWJveF9kc3BfaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDFfbWJveF9kcml2ZXIgPSB7CisJLnByb2JlCT0gb21hcDFfbWJveF9wcm9iZSwKKwkucmVtb3ZlCT0gb21hcDFfbWJveF9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAibWFpbGJveCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAxX21ib3hfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXAxX21ib3hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9tYXAxX21ib3hfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwMV9tYm94X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9tYXAxX21ib3hfaW5pdCk7Cittb2R1bGVfZXhpdChvbWFwMV9tYm94X2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKaW5kZXggNmY0ZWE0Yi4uNWJiMzQ4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uYwpAQCAtMSw0ICsxLDMgQEAKLS8va2VybmVsL2xpbnV4LW9tYXAtZnNhbXBsZS9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMjMyAtIGludGVncmF0ZSBjaGFuZ2UgNDU0NSAodGV4dCkKIC8qCiAgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKICAqCkBAIC0zNzcsNyArMzc2LDcgQEAKIAkgKiBKdW1wIHRvIGFzc2VtYmx5IGNvZGUuIFRoZSBwcm9jZXNzb3Igd2lsbCBzdGF5IHRoZXJlCiAJICogdW50aWwgd2FrZSB1cC4KIAkgKi8KLSAgICAgICAgb21hcF9zcmFtX3N1c3BlbmQoYXJnMCwgYXJnMSk7CisJb21hcF9zcmFtX3N1c3BlbmQoYXJnMCwgYXJnMSk7CiAKIAkvKgogCSAqIElmIHdlIGFyZSBoZXJlLCBwcm9jZXNzb3IgaXMgd29rZW4gdXAhCkBAIC00MzksNyArNDM4LDcgQEAKIAkJb21hcF93cml0ZXcoMCwgVUxQRF9TT0ZUX0RJU0FCTEVfUkVRX1JFRyk7CiAKIAkvKgotCSAqIFJlZW5hYmxlIGludGVycnVwdHMKKwkgKiBSZS1lbmFibGUgaW50ZXJydXB0cwogCSAqLwogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtNjMxLDEwICs2MzAsNiBAQAogCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgogCWNhc2UgUE1fU1VTUEVORF9NRU06CiAJCWJyZWFrOwotCi0JY2FzZSBQTV9TVVNQRU5EX0RJU0s6Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0KIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC02NTcsMTAgKzY1Miw2IEBACiAJY2FzZSBQTV9TVVNQRU5EX01FTToKIAkJb21hcF9wbV9zdXNwZW5kKCk7CiAJCWJyZWFrOwotCi0JY2FzZSBQTV9TVVNQRU5EX0RJU0s6Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0KIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCmluZGV4IDg1ZTA0OGIuLjM3MDVkMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gb21hcF9tcHVfdGltZXIxX2lycSA9IHsKIAkubmFtZQkJPSAibXB1X3RpbWVyMSIsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKIAkuaGFuZGxlcgk9IG9tYXBfbXB1X3RpbWVyMV9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggYWFiOTdjYy4uNzM5MzEwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtOSw2ICs5LDcgQEAKIAlib29sICJPTUFQMjQyMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMjRYWAogCXNlbGVjdCBPTUFQX0RNX1RJTUVSCisJc2VsZWN0IEFSQ0hfT01BUF9PVEcKIAogY29tbWVudCAiT01BUCBCb2FyZCBUeXBlIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMgpAQCAtMjAsNiArMjEsNyBAQAogY29uZmlnIE1BQ0hfT01BUF9INAogCWJvb2wgIk9NQVAgMjQyMCBINCBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgJiYgQVJDSF9PTUFQMjRYWAorCXNlbGVjdCBPTUFQX0RFQlVHX0xFRFMgaWYgTEVEUyB8fCBMRURTX09NQVBfREVCVUcKIAogY29uZmlnIE1BQ0hfT01BUF9BUE9MTE9OCiAJYm9vbCAiT01BUCAyNDIwIEFwb2xsb24gYm9hcmQiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKaW5kZXggMWU3ZWQ2ZC4uNDUyMTkzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwpAQCAtMjY2LDEyICsyNjYsMjYgQEAKIAkuaWQJCT0gLTEsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGg0X2xlZF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoNF9sZWRfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwX2RiZ19sZWQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaDRfbGVkX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaDRfbGVkX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpoNF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmaDRfc21jOTF4X2RldmljZSwKIAkmaDRfZmxhc2hfZGV2aWNlLAogCSZoNF9pcmRhX2RldmljZSwKIAkmaDRfa3BfZGV2aWNlLAogCSZoNF9sY2RfZGV2aWNlLAorCSZoNF9sZWRfZGV2aWNlLAogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBoNF9pbml0X3NtYzkxeCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCmluZGV4IDUxNzA0ODEuLjU4OGFkYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCiAvKgogICogQ2hlY2sgdGhlIERMTCBsb2NrIHN0YXRlLCBhbmQgcmV0dXJuIHR1ZSBpZiBydW5uaW5nIGluIHVubG9jayBtb2RlLgotICogVGhpcyBpcyBuZWVkZWQgdG8gY29tcGVuc3RlIGZvciB0aGUgc2hpZnRlZCBETEwgdmFsdWUgaW4gdW5sb2NrIG1vZGUuCisgKiBUaGlzIGlzIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciB0aGUgc2hpZnRlZCBETEwgdmFsdWUgaW4gdW5sb2NrIG1vZGUuCiAgKi8KIHN0YXRpYyB1MzIgb21hcDJfZGxsX2ZvcmNlX25lZWRlZCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCmluZGV4IDE2Mjk3OGYuLjRmNzkxODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKQEAgLTMzOCw3ICszMzgsNyBAQAogLyoKICAqIFRoZXNlIHJlcHJlc2VudCBvcHRpbWFsIHZhbHVlcyBmb3IgY29tbW9uIHBhcnRzLCBpdCB3b24ndCB3b3JrIGZvciBhbGwuCiAgKiBBcyBsb25nIGFzIHlvdSBzY2FsZSBkb3duLCBtb3N0IHBhcmFtZXRlcnMgYXJlIHN0aWxsIHdvcmssIHRoZXkganVzdAotICogYmVjb21lIHN1Yi1vcHRpbWFsLiBUaGUgUkZSIHZhbHVlIGdvZXMgaW4gdGhlIG9wcGlzaXRlIGRpcmVjdGlvbi4gSWYgeW91CisgKiBiZWNvbWUgc3ViLW9wdGltYWwuIFRoZSBSRlIgdmFsdWUgZ29lcyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBJZiB5b3UKICAqIGRvbid0IGFkanVzdCBpdCBkb3duIGFzIHlvdXIgY2xvY2sgcGVyaW9kIGluY3JlYXNlcyB0aGUgcmVmcmVzaCBpbnRlcnZhbAogICogd2lsbCBub3QgYmUgbWV0LiBTZXR0aW5nIGFsbCBwYXJhbWV0ZXJzIGZvciBjb21wbGV0ZSB3b3JzdCBjYXNlIG1heSB3b3JrLAogICogYnV0IG1heSBjdXQgbWVtb3J5IHBlcmZvcm1hbmNlIGJ5IDJ4LiBEdWUgdG8gZXJyYXRhIHRoZSBETExzIG5lZWQgdG8gYmUKQEAgLTM4NCw3ICszODQsNyBAQAogICogRmlsbGluZyBpbiB0YWJsZSBiYXNlZCBvbiBINCBib2FyZHMgYW5kIDI0MzAtU0RQcyB2YXJpYW50cyBhdmFpbGFibGUuCiAgKiBUaGVyZSBhcmUgcXVpdGUgYSBmZXcgbW9yZSByYXRlcyBjb21iaW5hdGlvbnMgd2hpY2ggY291bGQgYmUgZGVmaW5lZC4KICAqCi0gKiBXaGVuIG11bHRpcGxlIHZhbHVlcyBhcmUgZGVmaWVuZCB0aGUgc3RhcnQgdXAgd2lsbCB0cnkgYW5kIGNob29zZSB0aGUKKyAqIFdoZW4gbXVsdGlwbGUgdmFsdWVzIGFyZSBkZWZpbmVkIHRoZSBzdGFydCB1cCB3aWxsIHRyeSBhbmQgY2hvb3NlIHRoZQogICogZmFzdGVzdCBvbmUuIElmIGEgJ2Zhc3QnIHZhbHVlIGlzIGRlZmluZWQsIHRoZW4gYXV0b21hdGljYWxseSwgdGhlIC8yCiAgKiBvbmUgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGl0IGNhbiBiZSB1c2VkLglHZW5lcmFsbHkgaGF2aW5nIG1vcmUgdGhhdAogICogb25lIGZhc3Qgc2V0IGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGFzIHN0YXRpYyB0aW1pbmdzIG5lZWQgdG8gYmUgY2hhbmdlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCBhYTQzMjI0Li41MmVjMmYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KIAotI2lmIAlkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQorI2lmCWRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCiAKICNkZWZpbmUgT01BUDJfSTJDX0JBU0UyCQkweDQ4MDcyMDAwCiAjZGVmaW5lIE9NQVAyX0kyQ19JTlQyCQk1NwpAQCAtNDIsOCArNDIsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9pMmNfZGV2aWNlMiA9IHsKLSAgICAgICAgLm5hbWUgICAgICAgICAgID0gImkyY19vbWFwIiwKLSAgICAgICAgLmlkICAgICAgICAgICAgID0gMiwKKwkubmFtZSAgICAgICAgICAgPSAiaTJjX29tYXAiLAorCS5pZCAgICAgICAgICAgICA9IDIsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGkyY19yZXNvdXJjZXMyKSwKIAkucmVzb3VyY2UJPSBpMmNfcmVzb3VyY2VzMiwKIH07CkBAIC02Niw2ICs2Niw0MCBAQAogCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfRFNQKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0RTUF9NT0RVTEUpCisjZGVmaW5lIE9NQVAyX01CT1hfQkFTRQkJSU9fQUREUkVTUyhPTUFQMjRYWF9NQUlMQk9YX0JBU0UpCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWJveF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQMl9NQk9YX0JBU0UsCisJCS5lbmQJCT0gT01BUDJfTUJPWF9CQVNFICsgMHgxMWYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElOVF8yNFhYX01BSUxfVTBfTVBVLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSBJTlRfMjRYWF9NQUlMX1UzX01QVSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtYm94X2RldmljZSA9IHsKKwkubmFtZQkJPSAibWFpbGJveCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtYm94X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbWJveF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21ib3godm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1ib3hfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21ib3godm9pZCkgeyB9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX09NQVBfU1RJKQogCiAjZGVmaW5lIE9NQVAyX1NUSV9CQVNFCQlJT19BRERSRVNTKDB4NDgwNjgwMDApCkBAIC0xMTEsMjkgKzE0NSw0NSBAQAogI2RlZmluZSBPTUFQMl9NQ1NQSTFfQkFTRQkJMHg0ODA5ODAwMAogI2RlZmluZSBPTUFQMl9NQ1NQSTJfQkFTRQkJMHg0ODA5YTAwMAogCi0vKiBGSVhNRTogdXNlIHJlc291cmNlcyBpbnN0ZWFkICovCi0KIHN0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfcGxhdGZvcm1fY29uZmlnIG9tYXAyX21jc3BpMV9jb25maWcgPSB7Ci0JLmJhc2UJCT0gaW9fcDJ2KE9NQVAyX01DU1BJMV9CQVNFKSwKIAkubnVtX2NzCQk9IDQsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAyX21jc3BpMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQMl9NQ1NQSTFfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMl9NQ1NQSTFfQkFTRSArIDB4ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKwogc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9tY3NwaTEgPSB7CiAJLm5hbWUJCT0gIm9tYXAyX21jc3BpIiwKIAkuaWQJCT0gMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDJfbWNzcGkxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb21hcDJfbWNzcGkxX3Jlc291cmNlcywKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDJfbWNzcGkxX2NvbmZpZywKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9wbGF0Zm9ybV9jb25maWcgb21hcDJfbWNzcGkyX2NvbmZpZyA9IHsKLQkuYmFzZQkJPSBpb19wMnYoT01BUDJfTUNTUEkyX0JBU0UpLAogCS5udW1fY3MJCT0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDJfbWNzcGkyX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX01DU1BJMl9CQVNFLAorCQkuZW5kCQk9IE9NQVAyX01DU1BJMl9CQVNFICsgMHhmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXAyX21jc3BpMiA9IHsKIAkubmFtZQkJPSAib21hcDJfbWNzcGkiLAogCS5pZAkJPSAyLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvbWFwMl9tY3NwaTJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvbWFwMl9tY3NwaTJfcmVzb3VyY2VzLAogCS5kZXYJCT0gewogCQkucGxhdGZvcm1fZGF0YSA9ICZvbWFwMl9tY3NwaTJfY29uZmlnLAogCX0sCkBAIC0xNTcsMTAgKzIwNywxMCBAQAogCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCiAJICovCiAJb21hcF9pbml0X2kyYygpOworCW9tYXBfaW5pdF9tYm94KCk7CiAJb21hcF9pbml0X21jc3BpKCk7CiAJb21hcF9pbml0X3N0aSgpOwogCiAJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKG9tYXAyX2luaXRfZGV2aWNlcyk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKaW5kZXggZDhmNTc4Mi4uZTI5MGI5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZQlncG1jX21lbV9yb290Owogc3RhdGljIHN0cnVjdCByZXNvdXJjZQlncG1jX2NzX21lbVtHUE1DX0NTX05VTV07Ci1zdGF0aWMgc3BpbmxvY2tfdAlncG1jX21lbV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIERFRklORV9TUElOTE9DSyhncG1jX21lbV9sb2NrKTsKIHN0YXRpYyB1bnNpZ25lZAkJZ3BtY19jc19tYXA7CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmdwbWNfYmFzZSA9CkBAIC0yNDYsMTQgKzI0NiwyMiBAQAogCXJldHVybiBsICYgKDEgPDwgNik7CiB9CiAKLXN0YXRpYyB2b2lkIGdwbWNfY3Nfc2V0X3Jlc2VydmVkKGludCBjcywgaW50IHJlc2VydmVkKQoraW50IGdwbWNfY3Nfc2V0X3Jlc2VydmVkKGludCBjcywgaW50IHJlc2VydmVkKQogeworCWlmIChjcyA+IEdQTUNfQ1NfTlVNKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWdwbWNfY3NfbWFwICY9IH4oMSA8PCBjcyk7CiAJZ3BtY19jc19tYXAgfD0gKHJlc2VydmVkID8gMSA6IDApIDw8IGNzOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ3BtY19jc19yZXNlcnZlZChpbnQgY3MpCitpbnQgZ3BtY19jc19yZXNlcnZlZChpbnQgY3MpCiB7CisJaWYgKGNzID4gR1BNQ19DU19OVU0pCisJCXJldHVybiAtRU5PREVWOworCiAJcmV0dXJuIGdwbWNfY3NfbWFwICYgKDEgPDwgY3MpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggYTA3MjhjMy4uODJkYzcwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtMjcsNiArMjcsNyBAQAogZXh0ZXJuIGludCBvbWFwMl9jbGtfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAyX2NoZWNrX3JldmlzaW9uKHZvaWQpOwogZXh0ZXJuIHZvaWQgZ3BtY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcGZiX3Jlc2VydmVfc2RyYW0odm9pZCk7CiAKIC8qCiAgKiBUaGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heSBwcm92aWRlIHRoZSBleHRyYSBtYXBwaW5nIGJlc2lkZXMgdGhlCkBAIC00MCw5ICs0MSwyMSBAQAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LAogCXsKLQkJLnZpcnR1YWwJPSBMNF8yNFhYX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF8yNFhYX1BIWVMpLAotCQkubGVuZ3RoCQk9IEw0XzI0WFhfU0laRSwKKwkJLnZpcnR1YWwJPSBEU1BfTUVNXzI0WFhfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERTUF9NRU1fMjRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBEU1BfTUVNXzI0WFhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gRFNQX0lQSV8yNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihEU1BfSVBJXzI0WFhfUEhZUyksCisJCS5sZW5ndGgJCT0gRFNQX0lQSV8yNFhYX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IERTUF9NTVVfMjRYWF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oRFNQX01NVV8yNFhYX1BIWVMpLAorCQkubGVuZ3RoCQk9IERTUF9NTVVfMjRYWF9TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9CiB9OwpAQCAtNjAsNyArNzMsNyBAQAogCiAJb21hcDJfY2hlY2tfcmV2aXNpb24oKTsKIAlvbWFwX3NyYW1faW5pdCgpOwotCW9tYXBmYl9yZXNlcnZlX21lbSgpOworCW9tYXBmYl9yZXNlcnZlX3NkcmFtKCk7CiB9CiAKIHZvaWQgX19pbml0IG9tYXAyX2luaXRfY29tbW9uX2h3KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwM2NkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwpAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAqIE1haWxib3ggcmVzZXJ2YXRpb24gbW9kdWxlcyBmb3IgT01BUDIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqIFdyaXR0ZW4gYnk6IEhpcm9zaGkgRE9ZVSA8SGlyb3NoaS5ET1lVQG5va2lhLmNvbT4KKyAqICAgICAgICBhbmQgIFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tYWlsYm94Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIE1BSUxCT1hfUkVWSVNJT04JCTB4MDAKKyNkZWZpbmUgTUFJTEJPWF9TWVNDT05GSUcJCTB4MTAKKyNkZWZpbmUgTUFJTEJPWF9TWVNTVEFUVVMJCTB4MTQKKyNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzAJCTB4NDAKKyNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzEJCTB4NDQKKyNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzIJCTB4NDgKKyNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzMJCTB4NGMKKyNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzQJCTB4NTAKKyNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFXzUJCTB4NTQKKyNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzAJCTB4ODAKKyNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzEJCTB4ODQKKyNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzIJCTB4ODgKKyNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzMJCTB4OGMKKyNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzQJCTB4OTAKKyNkZWZpbmUgTUFJTEJPWF9GSUZPU1RBVFVTXzUJCTB4OTQKKyNkZWZpbmUgTUFJTEJPWF9NU0dTVEFUVVNfMAkJMHhjMAorI2RlZmluZSBNQUlMQk9YX01TR1NUQVRVU18xCQkweGM0CisjZGVmaW5lIE1BSUxCT1hfTVNHU1RBVFVTXzIJCTB4YzgKKyNkZWZpbmUgTUFJTEJPWF9NU0dTVEFUVVNfMwkJMHhjYworI2RlZmluZSBNQUlMQk9YX01TR1NUQVRVU180CQkweGQwCisjZGVmaW5lIE1BSUxCT1hfTVNHU1RBVFVTXzUJCTB4ZDQKKyNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMAkJMHgxMDAKKyNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMAkJMHgxMDQKKyNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMQkJMHgxMDgKKyNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMQkJMHgxMGMKKyNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMgkJMHgxMTAKKyNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMgkJMHgxMTQKKyNkZWZpbmUgTUFJTEJPWF9JUlFTVEFUVVNfMwkJMHgxMTgKKyNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEVfMwkJMHgxMWMKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWJveF9iYXNlOworCisjZGVmaW5lIE1BSUxCT1hfSVJRX05PVEZVTEwobikJCSgxIDw8ICgyICogKG4pICsgMSkpCisjZGVmaW5lIE1BSUxCT1hfSVJRX05FV01TRyhuKQkJKDEgPDwgKDIgKiAobikpKQorCitzdHJ1Y3Qgb21hcF9tYm94Ml9maWZvIHsKKwl1bnNpZ25lZCBsb25nIG1zZzsKKwl1bnNpZ25lZCBsb25nIGZpZm9fc3RhdDsKKwl1bnNpZ25lZCBsb25nIG1zZ19zdGF0OworfTsKKworc3RydWN0IG9tYXBfbWJveDJfcHJpdiB7CisJc3RydWN0IG9tYXBfbWJveDJfZmlmbyB0eF9maWZvOworCXN0cnVjdCBvbWFwX21ib3gyX2ZpZm8gcnhfZmlmbzsKKwl1bnNpZ25lZCBsb25nIGlycWVuYWJsZTsKKwl1bnNpZ25lZCBsb25nIGlycXN0YXR1czsKKwl1MzIgbmV3bXNnX2JpdDsKKwl1MzIgbm90ZnVsbF9iaXQ7Cit9OworCitzdGF0aWMgc3RydWN0IGNsayAqbWJveF9pY2tfaGFuZGxlOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYm94X3JlYWRfcmVnKHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG1ib3hfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3dyaXRlX3JlZyh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIG1ib3hfYmFzZSArIHJlZyk7Cit9CisKKy8qIE1haWxib3ggSC9XIHByZXBhcmF0aW9ucyAqLworc3RhdGljIGlubGluZSBpbnQgb21hcDJfbWJveF9zdGFydHVwKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJdW5zaWduZWQgaW50IGw7CisKKwltYm94X2lja19oYW5kbGUgPSBjbGtfZ2V0KE5VTEwsICJtYWlsYm94ZXNfaWNrIik7CisJaWYgKElTX0VSUihtYm94X2lja19oYW5kbGUpKSB7CisJCXByaW50aygiQ291bGQgbm90IGdldCBtYWlsYm94ZXNfaWNrXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWNsa19lbmFibGUobWJveF9pY2tfaGFuZGxlKTsKKworCS8qIHNldCBzbWFydC1pZGxlICYgYXV0b2lkbGUgKi8KKwlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1NZU0NPTkZJRyk7CisJbCB8PSAweDAwMDAwMDExOworCW1ib3hfd3JpdGVfcmVnKGwsIE1BSUxCT1hfU1lTQ09ORklHKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfbWJveF9zaHV0ZG93bihzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoreworCWNsa19kaXNhYmxlKG1ib3hfaWNrX2hhbmRsZSk7CisJY2xrX3B1dChtYm94X2lja19oYW5kbGUpOworfQorCisvKiBNYWlsYm94IEZJRk8gaGFuZGxlIGZ1bmN0aW9ucyAqLworc3RhdGljIGlubGluZSBtYm94X21zZ190IG9tYXAyX21ib3hfZmlmb19yZWFkKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJc3RydWN0IG9tYXBfbWJveDJfZmlmbyAqZmlmbyA9CisJCSYoKHN0cnVjdCBvbWFwX21ib3gyX3ByaXYgKiltYm94LT5wcml2KS0+cnhfZmlmbzsKKwlyZXR1cm4gKG1ib3hfbXNnX3QpIG1ib3hfcmVhZF9yZWcoZmlmby0+bXNnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21ib3hfZmlmb193cml0ZShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZykKK3sKKwlzdHJ1Y3Qgb21hcF9tYm94Ml9maWZvICpmaWZvID0KKwkJJigoc3RydWN0IG9tYXBfbWJveDJfcHJpdiAqKW1ib3gtPnByaXYpLT50eF9maWZvOworCW1ib3hfd3JpdGVfcmVnKG1zZywgZmlmby0+bXNnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb21hcDJfbWJveF9maWZvX2VtcHR5KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJc3RydWN0IG9tYXBfbWJveDJfZmlmbyAqZmlmbyA9CisJCSYoKHN0cnVjdCBvbWFwX21ib3gyX3ByaXYgKiltYm94LT5wcml2KS0+cnhfZmlmbzsKKwlyZXR1cm4gKG1ib3hfcmVhZF9yZWcoZmlmby0+bXNnX3N0YXQpID09IDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBvbWFwMl9tYm94X2ZpZm9fZnVsbChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoreworCXN0cnVjdCBvbWFwX21ib3gyX2ZpZm8gKmZpZm8gPQorCQkmKChzdHJ1Y3Qgb21hcF9tYm94Ml9wcml2ICopbWJveC0+cHJpdiktPnR4X2ZpZm87CisJcmV0dXJuIChtYm94X3JlYWRfcmVnKGZpZm8tPmZpZm9fc3RhdCkpOworfQorCisvKiBNYWlsYm94IElSUSBoYW5kbGUgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfbWJveF9lbmFibGVfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsCisJCW9tYXBfbWJveF90eXBlX3QgaXJxKQoreworCXN0cnVjdCBvbWFwX21ib3gyX3ByaXYgKnAgPSAoc3RydWN0IG9tYXBfbWJveDJfcHJpdiAqKW1ib3gtPnByaXY7CisJdTMyIGwsIGJpdCA9IChpcnEgPT0gSVJRX1RYKSA/IHAtPm5vdGZ1bGxfYml0IDogcC0+bmV3bXNnX2JpdDsKKworCWwgPSBtYm94X3JlYWRfcmVnKHAtPmlycWVuYWJsZSk7CisJbCB8PSBiaXQ7CisJbWJveF93cml0ZV9yZWcobCwgcC0+aXJxZW5hYmxlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21ib3hfZGlzYWJsZV9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwKKwkJb21hcF9tYm94X3R5cGVfdCBpcnEpCit7CisJc3RydWN0IG9tYXBfbWJveDJfcHJpdiAqcCA9IChzdHJ1Y3Qgb21hcF9tYm94Ml9wcml2ICopbWJveC0+cHJpdjsKKwl1MzIgbCwgYml0ID0gKGlycSA9PSBJUlFfVFgpID8gcC0+bm90ZnVsbF9iaXQgOiBwLT5uZXdtc2dfYml0OworCisJbCA9IG1ib3hfcmVhZF9yZWcocC0+aXJxZW5hYmxlKTsKKwlsICY9IH5iaXQ7CisJbWJveF93cml0ZV9yZWcobCwgcC0+aXJxZW5hYmxlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21ib3hfYWNrX2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LAorCQlvbWFwX21ib3hfdHlwZV90IGlycSkKK3sKKwlzdHJ1Y3Qgb21hcF9tYm94Ml9wcml2ICpwID0gKHN0cnVjdCBvbWFwX21ib3gyX3ByaXYgKiltYm94LT5wcml2OworCXUzMiBiaXQgPSAoaXJxID09IElSUV9UWCkgPyBwLT5ub3RmdWxsX2JpdCA6IHAtPm5ld21zZ19iaXQ7CisKKwltYm94X3dyaXRlX3JlZyhiaXQsIHAtPmlycXN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAyX21ib3hfaXNfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsCisJCW9tYXBfbWJveF90eXBlX3QgaXJxKQoreworCXN0cnVjdCBvbWFwX21ib3gyX3ByaXYgKnAgPSAoc3RydWN0IG9tYXBfbWJveDJfcHJpdiAqKW1ib3gtPnByaXY7CisJdTMyIGJpdCA9IChpcnEgPT0gSVJRX1RYKSA/IHAtPm5vdGZ1bGxfYml0IDogcC0+bmV3bXNnX2JpdDsKKwl1MzIgZW5hYmxlID0gbWJveF9yZWFkX3JlZyhwLT5pcnFlbmFibGUpOworCXUzMiBzdGF0dXMgPSBtYm94X3JlYWRfcmVnKHAtPmlycXN0YXR1cyk7CisKKwlyZXR1cm4gKGVuYWJsZSAmIHN0YXR1cyAmIGJpdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94X29wcyBvbWFwMl9tYm94X29wcyA9IHsKKwkudHlwZQkJPSBPTUFQX01CT1hfVFlQRTIsCisJLnN0YXJ0dXAJPSBvbWFwMl9tYm94X3N0YXJ0dXAsCisJLnNodXRkb3duCT0gb21hcDJfbWJveF9zaHV0ZG93biwKKwkuZmlmb19yZWFkCT0gb21hcDJfbWJveF9maWZvX3JlYWQsCisJLmZpZm9fd3JpdGUJPSBvbWFwMl9tYm94X2ZpZm9fd3JpdGUsCisJLmZpZm9fZW1wdHkJPSBvbWFwMl9tYm94X2ZpZm9fZW1wdHksCisJLmZpZm9fZnVsbAk9IG9tYXAyX21ib3hfZmlmb19mdWxsLAorCS5lbmFibGVfaXJxCT0gb21hcDJfbWJveF9lbmFibGVfaXJxLAorCS5kaXNhYmxlX2lycQk9IG9tYXAyX21ib3hfZGlzYWJsZV9pcnEsCisJLmFja19pcnEJPSBvbWFwMl9tYm94X2Fja19pcnEsCisJLmlzX2lycQkJPSBvbWFwMl9tYm94X2lzX2lycSwKK307CisKKy8qCisgKiBNQUlMQk9YIDA6IEFSTSAtPiBEU1AsCisgKiBNQUlMQk9YIDE6IEFSTSA8LSBEU1AuCisgKiBNQUlMQk9YIDI6IEFSTSAtPiBJVkEsCisgKiBNQUlMQk9YIDM6IEFSTSA8LSBJVkEuCisgKi8KKworLyogRklYTUU6IHRoZSBmb2xsb3dpbmcgc3RydWN0cyBzaG91bGQgYmUgZmlsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHVzZXIgaWQgKi8KKworLyogRFNQICovCitzdGF0aWMgc3RydWN0IG9tYXBfbWJveDJfcHJpdiBvbWFwMl9tYm94X2RzcF9wcml2ID0geworCS50eF9maWZvID0geworCQkubXNnCQk9IE1BSUxCT1hfTUVTU0FHRV8wLAorCQkuZmlmb19zdGF0CT0gTUFJTEJPWF9GSUZPU1RBVFVTXzAsCisJfSwKKwkucnhfZmlmbyA9IHsKKwkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0VfMSwKKwkJLm1zZ19zdGF0CT0gTUFJTEJPWF9NU0dTVEFUVVNfMSwKKwl9LAorCS5pcnFlbmFibGUJPSBNQUlMQk9YX0lSUUVOQUJMRV8wLAorCS5pcnFzdGF0dXMJPSBNQUlMQk9YX0lSUVNUQVRVU18wLAorCS5ub3RmdWxsX2JpdAk9IE1BSUxCT1hfSVJRX05PVEZVTEwoMCksCisJLm5ld21zZ19iaXQJPSBNQUlMQk9YX0lSUV9ORVdNU0coMSksCit9OworCitzdHJ1Y3Qgb21hcF9tYm94IG1ib3hfZHNwX2luZm8gPSB7CisJLm5hbWUJPSAiZHNwIiwKKwkub3BzCT0gJm9tYXAyX21ib3hfb3BzLAorCS5wcml2CT0gJm9tYXAyX21ib3hfZHNwX3ByaXYsCit9OworRVhQT1JUX1NZTUJPTChtYm94X2RzcF9pbmZvKTsKKworLyogSVZBICovCitzdGF0aWMgc3RydWN0IG9tYXBfbWJveDJfcHJpdiBvbWFwMl9tYm94X2l2YV9wcml2ID0geworCS50eF9maWZvID0geworCQkubXNnCQk9IE1BSUxCT1hfTUVTU0FHRV8yLAorCQkuZmlmb19zdGF0CT0gTUFJTEJPWF9GSUZPU1RBVFVTXzIsCisJfSwKKwkucnhfZmlmbyA9IHsKKwkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0VfMywKKwkJLm1zZ19zdGF0CT0gTUFJTEJPWF9NU0dTVEFUVVNfMywKKwl9LAorCS5pcnFlbmFibGUJPSBNQUlMQk9YX0lSUUVOQUJMRV8zLAorCS5pcnFzdGF0dXMJPSBNQUlMQk9YX0lSUVNUQVRVU18zLAorCS5ub3RmdWxsX2JpdAk9IE1BSUxCT1hfSVJRX05PVEZVTEwoMiksCisJLm5ld21zZ19iaXQJPSBNQUlMQk9YX0lSUV9ORVdNU0coMyksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbWJveCBtYm94X2l2YV9pbmZvID0geworCS5uYW1lCT0gIml2YSIsCisJLm9wcwk9ICZvbWFwMl9tYm94X29wcywKKwkucHJpdgk9ICZvbWFwMl9tYm94X2l2YV9wcml2LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcDJfbWJveF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQgPSAwOworCisJaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgIT0gMykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIG51bWJlciBvZiByZXNvdXJjZXM6ICVkXG4iLAorCQkJcGRldi0+bnVtX3Jlc291cmNlcyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIE1CT1ggYmFzZSAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHVubGlrZWx5KCFyZXMpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbWVtIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCW1ib3hfYmFzZSA9IHJlcy0+c3RhcnQ7CisKKwkvKiBEU1AgSVJRICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAodW5saWtlbHkoIXJlcykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBpcnEgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJbWJveF9kc3BfaW5mby5pcnEgPSByZXMtPnN0YXJ0OworCisJcmV0ID0gb21hcF9tYm94X3JlZ2lzdGVyKCZtYm94X2RzcF9pbmZvKTsKKworCS8qIElWQSBJUlEgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDEpOworCWlmICh1bmxpa2VseSghcmVzKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIGlycSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwltYm94X2l2YV9pbmZvLmlycSA9IHJlcy0+c3RhcnQ7CisKKwlyZXQgPSBvbWFwX21ib3hfcmVnaXN0ZXIoJm1ib3hfaXZhX2luZm8pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvbWFwMl9tYm94X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW9tYXBfbWJveF91bnJlZ2lzdGVyKCZtYm94X2RzcF9pbmZvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDJfbWJveF9kcml2ZXIgPSB7CisJLnByb2JlID0gb21hcDJfbWJveF9wcm9iZSwKKwkucmVtb3ZlID0gb21hcDJfbWJveF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibWFpbGJveCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX21ib3hfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXAyX21ib3hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9tYXAyX21ib3hfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwMl9tYm94X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9tYXAyX21ib3hfaW5pdCk7Cittb2R1bGVfZXhpdChvbWFwMl9tYm94X2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCBmNTM4ZDBmLi4wNDM5OTA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTQzLDcgKzQzLDcgQEAKIC8qIDI0eHggSTJDICovCiBNVVhfQ0ZHXzI0WFgoIk0xOV8yNFhYX0kyQzFfU0NMIiwJMHgxMTEsCTAsCTAsCTAsCTEpCiBNVVhfQ0ZHXzI0WFgoIkwxNV8yNFhYX0kyQzFfU0RBIiwJMHgxMTIsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkoxNV8yNFhYX0kyQzJfU0NMIiwJMHgxMTMsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkoxNV8yNFhYX0kyQzJfU0NMIiwJMHgxMTMsCTAsCTAsCTEsCTEpCiBNVVhfQ0ZHXzI0WFgoIkgxOV8yNFhYX0kyQzJfU0RBIiwJMHgxMTQsCTAsCTAsCTAsCTEpCiAKIC8qIE1lbmVsYXVzIGludGVycnVwdCAqLwpAQCAtNTIsNyArNTIsOSBAQAogLyogMjR4eCBjbG9ja3MgKi8KIE1VWF9DRkdfMjRYWCgiVzE0XzI0WFhfU1lTX0NMS09VVCIsCTB4MTM3LAkwLAkxLAkxLAkxKQogCi0vKiAyNHh4IEdQTUMgd2FpdCBwaW4gbW9uaXRvcmluZyAqLworLyogMjR4eCBHUE1DIGNoaXBzZWxlY3RzLCB3YWl0IHBpbiBtb25pdG9yaW5nICovCitNVVhfQ0ZHXzI0WFgoIkUyX0dQTUNfTkNTMiIsCTB4MDhlLAkwLAkxLAkxLAkxKQorTVVYX0NGR18yNFhYKCJMMl9HUE1DX05DUzciLAkweDA5MywJMCwJMSwJMSwJMSkKIE1VWF9DRkdfMjRYWCgiTDNfR1BNQ19XQUlUMCIsCQkweDA5YSwJMCwJMSwJMSwJMSkKIE1VWF9DRkdfMjRYWCgiTjdfR1BNQ19XQUlUMSIsCQkweDA5YiwJMCwJMSwJMSwJMSkKIE1VWF9DRkdfMjRYWCgiTTFfR1BNQ19XQUlUMiIsCQkweDA5YywJMCwJMSwJMSwJMSkKQEAgLTY2LDYgKzY4LDcgQEAKIAogLyogMjR4eCBHUElPICovCiBNVVhfQ0ZHXzI0WFgoIk0yMV8yNDJYX0dQSU8xMSIsCQkweDBjOSwgIDMsICAgICAgMSwgICAgICAxLCAgICAgIDEpCitNVVhfQ0ZHXzI0WFgoIlAyMV8yNDJYX0dQSU8xMiIsCTB4MGNhLAkzLAkwLAkwLAkxKQogTVVYX0NGR18yNFhYKCJBQTEwXzI0MlhfR1BJTzEzIiwJMHgwZTUsICAzLCAgICAgIDAsICAgICAgMCwgICAgICAxKQogTVVYX0NGR18yNFhYKCJBQTZfMjQyWF9HUElPMTQiLAkJMHgwZTYsICAzLCAgICAgIDAsICAgICAgMCwgICAgICAxKQogTVVYX0NGR18yNFhYKCJBQTRfMjQyWF9HUElPMTUiLAkJMHgwZTcsICAzLCAgICAgIDAsICAgICAgMCwgICAgICAxKQpAQCAtNzUsNyArNzgsOSBAQAogTVVYX0NGR18yNFhYKCJZMjBfMjRYWF9HUElPNjAiLAkJMHgxMmMsCTMsCTAsCTAsCTEpCiBNVVhfQ0ZHXzI0WFgoIlc0X18yNFhYX0dQSU83NCIsCQkweDBmMiwgIDMsICAgICAgMCwgICAgICAwLCAgICAgIDEpCiBNVVhfQ0ZHXzI0WFgoIk0xNV8yNFhYX0dQSU85MiIsCQkweDEwYSwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiSjE1XzI0WFhfR1BJTzk5IiwJMHgxMTMsCTMsCTEsCTEsCTEpCiBNVVhfQ0ZHXzI0WFgoIlYxNF8yNFhYX0dQSU8xMTciLAkweDEyOCwJMywJMSwJMCwJMSkKK01VWF9DRkdfMjRYWCgiUDE0XzI0WFhfR1BJTzEyNSIsCTB4MTQwLAkzLAkxLAkxLAkxKQogCiAvKiAyNDJ4IERCRyBHUElPICovCiBNVVhfQ0ZHXzI0WFgoIlY0XzI0MlhfR1BJTzQ5IiwJCTB4ZDMsCTMsCTAsCTAsCTEpCkBAIC0xMTgsNiArMTIzLDMwIEBACiBNVVhfQ0ZHXzI0WFgoIkcxOF8yNFhYX01NQ19DTURfRElSIiwJMHgwZmQsCTAsCTAsCTAsCTEpCiBNVVhfQ0ZHXzI0WFgoIkgxNV8yNFhYX01NQ19DTEtJIiwJMHgwZmUsCTAsCTAsCTAsCTEpCiAKKy8qIEZ1bGwgc3BlZWQgVVNCICovCitNVVhfQ0ZHXzI0WFgoIkoyMF8yNFhYX1VTQjBfUFVFTiIsCTB4MTFkLAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJKMTlfMjRYWF9VU0IwX1ZQIiwJMHgxMWUsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIksyMF8yNFhYX1VTQjBfVk0iLAkweDExZiwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiSjE4XzI0WFhfVVNCMF9SQ1YiLAkweDEyMCwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiSzE5XzI0WFhfVVNCMF9UWEVOIiwJMHgxMjEsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkoxNF8yNFhYX1VTQjBfU0UwIiwJMHgxMjIsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIksxOF8yNFhYX1VTQjBfREFUIiwJMHgxMjMsCTAsCTAsCTAsCTEpCisKK01VWF9DRkdfMjRYWCgiTjE0XzI0WFhfVVNCMV9TRTAiLAkweDBlZCwJMiwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVzEyXzI0WFhfVVNCMV9TRTAiLAkweDBkZCwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiUDE1XzI0WFhfVVNCMV9EQVQiLAkweDBlZSwJMiwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiUjEzXzI0WFhfVVNCMV9EQVQiLAkweDBlMCwJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiVzIwXzI0WFhfVVNCMV9UWEVOIiwJMHgwZWMsCTIsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIlAxM18yNFhYX1VTQjFfVFhFTiIsCTB4MGRmLAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJWMTlfMjRYWF9VU0IxX1JDViIsCTB4MGViLAkyLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJWMTJfMjRYWF9VU0IxX1JDViIsCTB4MGRlLAkzLAkwLAkwLAkxKQorCitNVVhfQ0ZHXzI0WFgoIkFBMTBfMjRYWF9VU0IyX1NFMCIsCTB4MGU1LAkyLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJZMTFfMjRYWF9VU0IyX0RBVCIsCTB4MGU4LAkyLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJBQTEyXzI0WFhfVVNCMl9UWEVOIiwJMHgwZTksCTIsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFBNl8yNFhYX1VTQjJfUkNWIiwJMHgwZTYsCTIsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkFBNF8yNFhYX1VTQjJfVExMU0UwIiwJMHgwZTcsCTIsCTAsCTAsCTEpCisKIC8qIEtleXBhZCBHUElPKi8KIE1VWF9DRkdfMjRYWCgiVDE5XzI0WFhfS0JSMCIsCQkweDEwNiwJMywJMSwJMSwJMSkKIE1VWF9DRkdfMjRYWCgiUjE5XzI0WFhfS0JSMSIsCQkweDEwNywJMywJMSwJMSwJMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwppbmRleCA0NWQxYWFhLi42MmU4MDFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXAyX2dwX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiZ3AgdGltZXIiLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIJPSBvbWFwMl9ncF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvZG1hLmMKaW5kZXggZDZhMjc5ZS4uZjcwMDlkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9kbWEuYwpAQCAtNDcsNyArNDcsNyBAQAogCWludCBjb3VudDsKIH0gbGxfcG9vbDsKIAotc3RhdGljIHNwaW5sb2NrX3QgbGxfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGxfbG9jayk7CiAKIHN0cnVjdCBwbng0MDA4X2RtYV9sbCAqcG54NDAwOF9hbGxvY19sbF9lbnRyeShkbWFfYWRkcl90ICogbGxfZG1hKQogewpAQCAtMTM1LDcgKzEzNSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3BpbmxvY2tfdCBkbWFfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZG1hX2xvY2spOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG54NDAwOF9kbWFfbG9jayh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmMKaW5kZXggODYyMWMyMC4uNjdlMDVmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5jCkBAIC04Miw3ICs4Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHBueDQwMDhfdGltZXJfaXJxID0gewogCS5uYW1lID0gIlBOWDQwMDggVGljayBUaW1lciIsCi0JLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIgPSBwbng0MDA4X3RpbWVyX2ludGVycnVwdAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9sY2QuYwppbmRleCBhNzI0NzZjLi4zNjViOTQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9sY2QuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9sY2QuYwpAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZSBQSUNUUkxfQURSUyAgICAgMHgwNgogI2RlZmluZSBQT0xDVFJMX0FEUlMgICAgMHgwNwogCi0vKiBSZXNnaXN0ZXIgQml0IERlZmluaXRpb25zICovCisvKiBSZWdpc3RlciBCaXQgRGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgUkVTQ1RMX1FWR0EgICAgIDB4MDEKICNkZWZpbmUgUkVTQ1RMX1ZHQSAgICAgIDB4MDAKIApAQCAtNTUsMTEgKzU1LDExIEBACiAjZGVmaW5lIFBPV0VSMF9DT01fRENMSyAweDAxICAvKiBDT00gVm9sdGFnZSBEQyBCaWFzIERBQyBTZXJpYWwgRGF0YSBDbG9jayAqLwogI2RlZmluZSBQT1dFUjBfQ09NX0RPVVQgMHgwMiAgLyogQ09NIFZvbHRhZ2UgREMgQmlhcyBEQUMgU2VyaWFsIERhdGEgT3V0ICovCiAjZGVmaW5lIFBPV0VSMF9EQUNfT04gICAweDA0ICAvKiBEQUMgUG93ZXIgU3VwcGx5IE9OICovCi0jZGVmaW5lIFBPV0VSMF9DT01fT04gICAweDA4ICAvKiBDT00gUG93ZXdyIFN1cHBseSBPTiAqLworI2RlZmluZSBQT1dFUjBfQ09NX09OICAgMHgwOCAgLyogQ09NIFBvd2VyIFN1cHBseSBPTiAqLwogI2RlZmluZSBQT1dFUjBfVkNDNV9PTiAgMHgxMCAgLyogVkNDNSBQb3dlciBTdXBwbHkgT04gKi8KIAogI2RlZmluZSBQT1dFUjBfREFDX09GRiAgMHgwMCAgLyogREFDIFBvd2VyIFN1cHBseSBPRkYgKi8KLSNkZWZpbmUgUE9XRVIwX0NPTV9PRkYgIDB4MDAgIC8qIENPTSBQb3dld3IgU3VwcGx5IE9GRiAqLworI2RlZmluZSBQT1dFUjBfQ09NX09GRiAgMHgwMCAgLyogQ09NIFBvd2VyIFN1cHBseSBPRkYgKi8KICNkZWZpbmUgUE9XRVIwX1ZDQzVfT0ZGIDB4MDAgIC8qIFZDQzUgUG93ZXIgU3VwcGx5IE9GRiAqLwogCiAjZGVmaW5lIFBJQ1RSTF9JTklUX1NUQVRFICAgICAgMHgwMQpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJbGNkdGdfaTJjX3NlbmRfc3RvcChiYXNlX2RhdGEpOwogfQogCi0vKiBTZXQgUGhhc2UgQWRqdWN0ICovCisvKiBTZXQgUGhhc2UgQWRqdXN0ICovCiBzdGF0aWMgdm9pZCBsY2R0Z19zZXRfcGhhZGFkaihpbnQgbW9kZSkKIHsKIAlpbnQgYWRqOwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJCS8qIFNpZ25hbHMgb3V0cHV0IGVuYWJsZSAqLwogCQljb3JnaV9zc3BfbGNkdGdfc2VuZChQSUNUUkxfQURSUywgMCk7CiAKLQkJLyogU2V0IFBoYXNlIEFkanVjdCAqLworCQkvKiBTZXQgUGhhc2UgQWRqdXN0ICovCiAJCWxjZHRnX3NldF9waGFkYWRqKG1vZGUpOwogCiAJCS8qIEluaXRpYWxpemUgZm9yIElucHV0IFNpZ25hbHMgZnJvbSBBVEkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMKaW5kZXggZmY2YjRlZS4uNDBkZWEzZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCkBAIC0zMiw3ICszMiw3IEBACiAgKiBUaGVyZSBhcmUgdGhyZWUgZGV2aWNlcyBjb25uZWN0ZWQgdG8gdGhlIFNTUCBpbnRlcmZhY2U6CiAgKiAgIDEuIEEgdG91Y2hzY3JlZW4gY29udHJvbGxlciAoVEkgQURTNzg0NiBjb21wYXRpYmxlKQogICogICAyLiBBbiBMQ0QgY29udG9sbGVyICh3aXRoIHNvbWUgQmFja2xpZ2h0IGZ1bmN0aW9uYWxpdHkpCi0gKiAgIDMuIEEgYmF0dGVyeSBtb2luaXRvcmluZyBJQyAoTWF4aW0gTUFYMTExMSkKKyAqICAgMy4gQSBiYXR0ZXJ5IG1vbml0b3JpbmcgSUMgKE1heGltIE1BWDExMTEpCiAgKgogICogRWFjaCBkZXZpY2UgdXNlcyBhIGRpZmZlcmVudCBzcGVlZC9tb2RlIG9mIGNvbW11bmljYXRpb24uCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCmluZGV4IGZjM2I4MmEuLjUyNDhhYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcHhhX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiUFhBIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIJPSBweGFfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKaW5kZXggMTE5YzY0Yi4uMjhjNzliZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KQEAgLTU1LDIzICs1NiwzMSBAQAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHRyaXplcHM0X3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lID0JCSJCb290bG9hZGVyIiwKKwkJLm9mZnNldCA9CTB4MDAwMDAwMDAsCiAJCS5zaXplID0JCTB4MDAwNDAwMDAsCi0JCS5vZmZzZXQgPQkwLAogCQkubWFza19mbGFncyA9CU1URF9XUklURUFCTEUgIC8qIGZvcmNlIHJlYWQtb25seSAqLwogCX0sewotCQkubmFtZSA9CQkiS2VybmVsIiwKLQkJLnNpemUgPQkJMHgwMDQwMDAwMCwKLQkJLm9mZnNldCA9CTB4MDAwNDAwMDAKKwkJLm5hbWUgPQkJIkJhY2t1cCIsCisJCS5vZmZzZXQgPQkweDAwMDQwMDAwLAorCQkuc2l6ZSA9CQkweDAwMDQwMDAwLAogCX0sewotCQkubmFtZSA9CQkiRmlsZXN5c3RlbSIsCisJCS5uYW1lID0JCSJJbWFnZSIsCisJCS5vZmZzZXQgPQkweDAwMDgwMDAwLAorCQkuc2l6ZSA9CQkweDAxMDgwMDAwLAorCX0seworCQkubmFtZSA9CQkiSVBTTSIsCisJCS5vZmZzZXQgPQkweDAxMTAwMDAwLAorCQkuc2l6ZSA9CQkweDAwZTAwMDAwLAorCX0seworCQkubmFtZSA9CQkiUmVnaXN0cnkiLAorCQkub2Zmc2V0ID0JMHgwMWYwMDAwMCwKIAkJLnNpemUgPQkJTVREUEFSVF9TSVpfRlVMTCwKLQkJLm9mZnNldCA9CTB4MDA0NDAwMDAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgdHJpemVwczRfZmxhc2hfZGF0YVtdID0geworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgdHJpemVwczRfZmxhc2hfZGF0YVtdID0gewogCXsKLQkJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJCS53aWR0aAkJPSA0LAkJCS8qIGJhbmt3aWR0aCBpbiBieXRlcyAqLwogCQkucGFydHMJCT0gdHJpemVwczRfcGFydGl0aW9ucywKIAkJLm5yX3BhcnRzCT0gQVJSQVlfU0laRSh0cml6ZXBzNF9wYXJ0aXRpb25zKQogCX0KQEAgLTc5LDE1ICs4OCwxNSBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlID0gewogCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKLQkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfNjRNIC0gMSwKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZsYXNoX2RldmljZSA9IHsKLQkubmFtZQkJPSAicHhhMnh4LWZsYXNoIiwKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmdHJpemVwczRfZmxhc2hfZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEgPSB0cml6ZXBzNF9mbGFzaF9kYXRhLAogCX0sCiAJLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAogCS5udW1fcmVzb3VyY2VzID0gMSwKQEAgLTM5MywxMSArNDAyLDM3IEBACiAgICAgLnB4YWZiX2JhY2tsaWdodF9wb3dlciA9IGJvYXJkX2JhY2tsaWdodF9wb3dlciwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIHRvc2hpYmFfbGNkX21vZGUgPSB7CisgICAgLnBpeGNsb2NrCQk9IDM5NzIwLAorICAgIC54cmVzCQk9IDY0MCwKKyAgICAueXJlcwkJPSA0ODAsCisgICAgLmJwcAkJPSA4LAorICAgIC5oc3luY19sZW4JCT0gNjMsCisgICAgLmxlZnRfbWFyZ2luCT0gMTIsCisgICAgLnJpZ2h0X21hcmdpbgk9IDEyLAorICAgIC52c3luY19sZW4JCT0gNCwKKyAgICAudXBwZXJfbWFyZ2luCT0gMzIsCisgICAgLmxvd2VyX21hcmdpbgk9IDEwLAorICAgIC5zeW5jCQk9IDAsCisgICAgLmNtYXBfZ3JleXNjYWxlCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHRvc2hpYmFfbGNkID0geworICAgIC5tb2RlcwkJPSAmdG9zaGliYV9sY2RfbW9kZSwKKyAgICAubnVtX21vZGVzCT0gMSwKKyAgICAuY21hcF9pbnZlcnNlCT0gMCwKKyAgICAuY21hcF9zdGF0aWMJPSAwLAorICAgIC5sY2NyMAkJPSBMQ0NSMF9Db2xvciB8IExDQ1IwX0FjdCwKKyAgICAubGNjcjMJCT0gMHgwMzQwMDAwMiwKKyAgICAucHhhZmJfYmFja2xpZ2h0X3Bvd2VyID0gYm9hcmRfYmFja2xpZ2h0X3Bvd2VyLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHRyaXplcHM0X2luaXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyh0cml6ZXBzNF9kZXZpY2VzLCBBUlJBWV9TSVpFKHRyaXplcHM0X2RldmljZXMpKTsKIAotCXNldF9weGFfZmJfaW5mbygmc2hhcnBfbGNkKTsKKy8qCXNldF9weGFfZmJfaW5mbygmc2hhcnBfbGNkKTsgKi8KKwlzZXRfcHhhX2ZiX2luZm8oJnRvc2hpYmFfbGNkKTsKIAogCXB4YV9zZXRfbWNpX2luZm8oJnRyaXplcHM0X21jaV9wbGF0Zm9ybV9kYXRhKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmdHJpemVwczRfZmljcF9wbGF0Zm9ybV9kYXRhKTsKQEAgLTQzNiw5ICs0NzEsMTAgQEAKIAkvKiB3aGF0cyB0aGF0IGZvciA/Pz8gKi8KIAlweGFfZ3Bpb19tb2RlKEdQSU83OV9uQ1NfM19NRCk7CiAKKyNpZmRlZiBDT05GSUdfTEVEUwogCXB4YV9ncGlvX21vZGUoIEdQSU9fU1lTX0JVU1lfTEVEICB8IEdQSU9fT1VUKTsJCS8qIExFRDEgKi8KIAlweGFfZ3Bpb19tb2RlKCBHUElPX0hFQVJUQkVBVF9MRUQgfCBHUElPX09VVCk7CQkvKiBMRUQyICovCi0KKyNlbmRpZgogI2lmZGVmIENPTkZJR19NQUNIX1RSSVpFUFM0X0NPTlhTCiAjaWZkZWYgQ09ORklHX0lERV9QWEFfQ0YKIAkvKiBpZiBib290IGRpcmVjdCBmcm9tIGNvbXBhY3QgZmxhc2ggZG9udCBkaXNhYmxlIHBvd2VyICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCmluZGV4IDg0ZDNmZTcuLmM3ZjFiNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCkBAIC01NDksNyArNTQ5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcmVhbHZpZXdfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJSZWFsVmlldyBUaW1lciBUaWNrIiwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAogCS5oYW5kbGVyCT0gcmVhbHZpZXdfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9sb2NhbHRpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYwppbmRleCBjYWY2YjhiLi5jN2JkZjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYwpAQCAtMzAsNyArMzAsNyBAQAogLyoKICAqIGxvY2FsX3RpbWVyX2FjazogY2hlY2tzIGZvciBhIGxvY2FsIHRpbWVyIGludGVycnVwdC4KICAqCi0gKiBJZiBhIGxvY2FsIHRpbWVyIGludGVycnVwdCBoYXMgb2NjdXJlZCwgYWNrbm93bGVkZ2UgYW5kIHJldHVybiAxLgorICogSWYgYSBsb2NhbCB0aW1lciBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkLCBhY2tub3dsZWRnZSBhbmQgcmV0dXJuIDEuCiAgKiBPdGhlcndpc2UsIHJldHVybiAwLgogICovCiBpbnQgbG9jYWxfdGltZXJfYWNrKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKaW5kZXggOWEzZDNkMi4uM2U3YTg1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQpAQCAtMjAsNyArMjAsNyBAQAogIyBNYWNoaW5lIHN1cHBvcnQKIAogb2JqLSQoQ09ORklHX0FSQ0hfU01ESzI0MTApCSs9IG1hY2gtc21kazI0MTAubwotb2JqLSQoQ09ORklHX0FSQ0hfSDE5NDApCSs9IG1hY2gtaDE5NDAubworb2JqLSQoQ09ORklHX0FSQ0hfSDE5NDApCSs9IG1hY2gtaDE5NDAubyBoMTk0MC1ibHVldG9vdGgubwogb2JqLSQoQ09ORklHX1BNX0gxOTQwKQkJKz0gcG0taDE5NDAubwogb2JqLSQoQ09ORklHX01BQ0hfTjMwKQkJKz0gbWFjaC1uMzAubwogb2JqLSQoQ09ORklHX0FSQ0hfQkFTVCkJCSs9IG1hY2gtYmFzdC5vIHVzYi1zaW10ZWMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ODU0MzcuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QuaAotZXh0ZXJuIHZvaWQgYmFzdF9pbml0X2lycSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9oMTk0MC1ibHVldG9vdGguYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9oMTk0MC1ibHVldG9vdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzQ4ODg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2gxOTQwLWJsdWV0b290aC5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2gxOTQwLWJsdWV0b290aC5jCisgKiBDb3B5cmlnaHQgKGMpIEFybmF1ZCBQYXRhcmQgPGFybmF1ZC5wYXRhcmRAcnRwLW5ldC5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqCSAgICBTM0MyNDEwIGJsdWV0b290aCAiZHJpdmVyIgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oMTk0MC1sYXRjaC5oPgorCisjZGVmaW5lIERSVl9OQU1FICAgICAgICAgICAgICAiaDE5NDAtYnQiCisKKyNpZmRlZiBDT05GSUdfTEVEU19IMTk0MAorREVGSU5FX0xFRF9UUklHR0VSKGJ0X2xlZF90cmlnZ2VyKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHN0YXRlOworCisvKiBCbHVldG9vdGggY29udHJvbCAqLworc3RhdGljIHZvaWQgaDE5NDBidF9lbmFibGUoaW50IG9uKQoreworCWlmIChvbikgeworI2lmZGVmIENPTkZJR19MRURTX0gxOTQwCisJCS8qIGZsYXNoaW5nIEJsdWUgKi8KKwkJbGVkX3RyaWdnZXJfZXZlbnQoYnRfbGVkX3RyaWdnZXIsIExFRF9IQUxGKTsKKyNlbmRpZgorCisJCS8qIFBvd2VyIG9uIHRoZSBjaGlwICovCisJCWgxOTQwX2xhdGNoX2NvbnRyb2woMCwgSDE5NDBfTEFUQ0hfQkxVRVRPT1RIX1BPV0VSKTsKKwkJLyogUmVzZXQgdGhlIGNoaXAgKi8KKwkJbWRlbGF5KDEwKTsKKwkJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQSDEsIDEpOworCQltZGVsYXkoMTApOworCQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BIMSwgMCk7CisKKwkJc3RhdGUgPSAxOworCX0KKwllbHNlIHsKKyNpZmRlZiBDT05GSUdfTEVEU19IMTk0MAorCQlsZWRfdHJpZ2dlcl9ldmVudChidF9sZWRfdHJpZ2dlciwgMCk7CisjZW5kaWYKKworCQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BIMSwgMSk7CisJCW1kZWxheSgxMCk7CisJCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEgxLCAwKTsKKwkJbWRlbGF5KDEwKTsKKwkJaDE5NDBfbGF0Y2hfY29udHJvbChIMTk0MF9MQVRDSF9CTFVFVE9PVEhfUE9XRVIsIDApOworCisJCXN0YXRlID0gMDsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IGgxOTQwYnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHN0YXRlKTsKK30KKworc3RhdGljIHNzaXplX3QgaDE5NDBidF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgbmV3X3N0YXRlOworCWNoYXIgKmVuZHA7CisKKwluZXdfc3RhdGUgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmRwLCAwKTsKKwlpZiAoKmVuZHAgJiYgIWlzc3BhY2UoKmVuZHApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWgxOTQwYnRfZW5hYmxlKG5ld19zdGF0ZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlLCAwNjQ0LAorCQloMTk0MGJ0X3Nob3csCisJCWgxOTQwYnRfc3RvcmUpOworCitzdGF0aWMgaW50IF9faW5pdCBoMTk0MGJ0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJLyogQ29uZmlndXJlcyBCVCBzZXJpYWwgcG9ydCBHUElPcyAqLworCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEgwLCBTM0MyNDEwX0dQSDBfbkNUUzApOworCXMzYzI0MTBfZ3Bpb19wdWxsdXAoUzNDMjQxMF9HUEgwLCAxKTsKKwlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BIMSwgUzNDMjQxMF9HUEgxX09VVFApOworCXMzYzI0MTBfZ3Bpb19wdWxsdXAoUzNDMjQxMF9HUEgxLCAxKTsKKwlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BIMiwgUzNDMjQxMF9HUEgyX1RYRDApOworCXMzYzI0MTBfZ3Bpb19wdWxsdXAoUzNDMjQxMF9HUEgyLCAxKTsKKwlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BIMywgUzNDMjQxMF9HUEgzX1JYRDApOworCXMzYzI0MTBfZ3Bpb19wdWxsdXAoUzNDMjQxMF9HUEgzLCAxKTsKKworI2lmZGVmIENPTkZJR19MRURTX0gxOTQwCisJbGVkX3RyaWdnZXJfcmVnaXN0ZXJfc2ltcGxlKCJoMTk0MC1ibHVldG9vdGgiLCAmYnRfbGVkX3RyaWdnZXIpOworI2VuZGlmCisKKwkvKiBkaXNhYmxlIEJUIGJ5IGRlZmF1bHQgKi8KKwloMTk0MGJ0X2VuYWJsZSgwKTsKKworCXJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2VuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgaDE5NDBidF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKyNpZmRlZiBDT05GSUdfTEVEU19IMTk0MAorCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKGJ0X2xlZF90cmlnZ2VyKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGgxOTQwYnRfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSVl9OQU1FLAorCX0sCisJLnByb2JlCQk9IGgxOTQwYnRfcHJvYmUsCisJLnJlbW92ZQkJPSBoMTk0MGJ0X3JlbW92ZSwKK307CisKKworc3RhdGljIGludCBfX2luaXQgaDE5NDBidF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaDE5NDBidF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaDE5NDBidF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmgxOTQwYnRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaDE5NDBidF9pbml0KTsKK21vZHVsZV9leGl0KGgxOTQwYnRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFybmF1ZCBQYXRhcmQgPGFybmF1ZC5wYXRhcmRAcnRwLW5ldC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIGlQQVEgSDE5NDAgYmx1ZXRvb3RoIGNoaXAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbWxtNTkwMC5jCmluZGV4IGJjMzA4Y2UuLjQzNWFkY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW1sbTU5MDAuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAjZW5kaWYKIH07CiAKLXZvaWQgX19pbml0IGFtbG01OTAwX21hcF9pbyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGFtbG01OTAwX21hcF9pbyh2b2lkKQogewogCXMzYzI0eHhfaW5pdF9pbyhhbWxtNTkwMF9pb2Rlc2MsIEFSUkFZX1NJWkUoYW1sbTU5MDBfaW9kZXNjKSk7CiAJczNjMjR4eF9pbml0X2Nsb2NrcygwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCmluZGV4IDVkNWYwMGUuLjVjOWJjZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCkBAIC0xNzcsNiArMTc4LDExIEBACiAJLmlkICAgICAgICAgICAgICAgPSAtMSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfYmx1ZXRvb3RoID0geworCS5uYW1lICAgICAgICAgICAgID0gImgxOTQwLWJ0IiwKKwkuaWQgICAgICAgICAgICAgICA9IC0xLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmgxOTQwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzM2NfZGV2aWNlX3VzYiwKIAkmczNjX2RldmljZV9sY2QsCkBAIC0xODUsNiArMTkxLDcgQEAKIAkmczNjX2RldmljZV9paXMsCiAJJnMzY19kZXZpY2VfdXNiZ2FkZ2V0LAogCSZzM2NfZGV2aWNlX2xlZHMsCisJJnMzY19kZXZpY2VfYmx1ZXRvb3RoLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGgxOTQwX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcXQyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYwppbmRleCA5Y2M0MjUzLi5kODZlNmYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKaW5kZXggNjM3YWFiYS4uZDFlZWVkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1zbGVlcC5TCisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYwppbmRleCBkMGY0Njk1Li42NjhjY2NlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCkBAIC01OSw4ICs1OSw4IEBACiAJW0RNQUNIX1NQSTFdID0gewogCQkubmFtZQkJPSAic3BpMSIsCiAJCS5jaGFubmVscwk9IE1BUChTM0MyNDEyX0RNQVJFUVNFTF9TUEkxVFgpLAotCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfU1BJICsgMHgyMCArIFMzQzI0MTBfU1BUREFULAotCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9TUEkgKyAweDIwICsgUzNDMjQxMF9TUFJEQVQsCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9TUEkgKyBTM0MyNDEyX1NQSTEgKyBTM0MyNDEwX1NQVERBVCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfU1BJICsgUzNDMjQxMl9TUEkxICArIFMzQzI0MTBfU1BSREFULAogCX0sCiAJW0RNQUNIX1VBUlQwXSA9IHsKIAkJLm5hbWUJCT0gInVhcnQwIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCmluZGV4IGFhZmUwYmMuLjc4MmI1ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0yOSw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pZGxlLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CkBAIC0zNyw2ICszOSw4IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvai5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZHNjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zcGkuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXMzYzI0MTIuaD4KIAogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CkBAIC03NCw2ICs3OCwxNCBAQAogCXMzY19kZXZpY2Vfc2RpLm5hbWUgID0gInMzYzI0MTItc2RpIjsKIAlzM2NfZGV2aWNlX2xjZC5uYW1lICA9ICJzM2MyNDEyLWxjZCI7CiAJczNjX2RldmljZV9uYW5kLm5hbWUgPSAiczNjMjQxMi1uYW5kIjsKKworCS8qIHNwaSBjaGFubmVsIHJlbGF0ZWQgY2hhbmdlcywgczNjMjQxMi8xMyBzcGVjaWZpYyAqLworCXMzY19kZXZpY2Vfc3BpMC5uYW1lID0gInMzYzI0MTItc3BpIjsKKwlzM2NfZGV2aWNlX3NwaTAucmVzb3VyY2VbMF0uZW5kID0gUzNDMjRYWF9QQV9TUEkgKyAweDI0OworCXMzY19kZXZpY2Vfc3BpMS5uYW1lID0gInMzYzI0MTItc3BpIjsKKwlzM2NfZGV2aWNlX3NwaTEucmVzb3VyY2VbMF0uc3RhcnQgPSBTM0MyNFhYX1BBX1NQSSArIFMzQzI0MTJfU1BJMTsKKwlzM2NfZGV2aWNlX3NwaTEucmVzb3VyY2VbMF0uZW5kID0gUzNDMjRYWF9QQV9TUEkgKyBTM0MyNDEyX1NQSTEgKyAweDI0OworCiB9CiAKIC8qIHMzYzI0MTJfaWRsZQpAQCAtOTcsNiArMTA5LDIzIEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAorc3RhdGljIHZvaWQgczNjMjQxMl9oYXJkX3Jlc2V0KHZvaWQpCit7CisJLyogZXJyYXRhICJXYXRjaC1kb2cvU29mdHdhcmUgUmVzZXQgUHJvYmxlbSIgc3BlY2lmaWVzIHRoYXQKKwkgKiB0aGlzIHJlc2V0IG11c3QgYmUgZG9uZSB3aXRoIHRoZSBTWVNDTEsgc291cmNlZCBmcm9tCisJICogRVhUQ0xLIGluc3RlYWQgb2YgRk9VVCB0byBhdm9pZCBhIGdsaXRjaCBpbiB0aGUgcmVzZXQKKwkgKiBtZWNoYW5pc20uCisJICoKKwkgKiBTZWUgdGhlIHdhdGNoZG9nIHNlY3Rpb24gb2YgdGhlIFMzQzI0MTIgbWFudWFsIGZvciBtb3JlCisJICogaW5mb3JtYXRpb24gb24gdGhpcyBmaXguCisJICovCisKKwlfX3Jhd193cml0ZWwoMHgwMCwgUzNDMjQxMl9DTEtTUkMpOworCV9fcmF3X3dyaXRlbChTM0MyNDEyX1NXUlNUX1JFU0VULCBTM0MyNDEyX1NXUlNUKTsKKworCW1kZWxheSgxKTsKK30KKwogLyogczNjMjQxMl9tYXBfaW8KICAqCiAgKiByZWdpc3RlciB0aGUgc3RhbmRhcmQgY3B1IElPIGFyZWFzLCBhbmQgYW55IHBhc3NlZCBpbiBmcm9tIHRoZQpAQCAtMTEzLDYgKzE0MiwxMCBAQAogCiAJczNjMjR4eF9pZGxlID0gczNjMjQxMl9pZGxlOwogCisJLyogc2V0IGN1c3RvbSByZXNldCBob29rICovCisKKwlzM2MyNHh4X3Jlc2V0X2hvb2sgPSBzM2MyNDEyX2hhcmRfcmVzZXQ7CisKIAkvKiByZWdpc3RlciBvdXIgaW8tdGFibGVzICovCiAKIAlpb3RhYmxlX2luaXQoczNjMjQxMl9pb2Rlc2MsIEFSUkFZX1NJWkUoczNjMjQxMl9pb2Rlc2MpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKaW5kZXggMzI0ZjVhMi4uNGQ2YzdhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgogCi0vKiBvbmJvYXJkIHBlcmlocGhlcmFsIG1hcCAqLworLyogb25ib2FyZCBwZXJpaHBlcmFsIG1hcCAqLwogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9zaXJpc19pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogICAvKiBJU0EgSU8gYXJlYXMgKG1heSBiZSBvdmVyLXdyaXR0ZW4gbGF0ZXIpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCmluZGV4IGMzY2M0YmYuLjg2NmZmNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwppbmRleCBkZDIyNzJmLi41ODQwMjk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBjbGsgY2xrX3VzYl9idXNfaG9zdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa191c2JfYnVzX2hvc3QgPSB7CiAJLm5hbWUJCT0gInVzYi1idXMtaG9zdC1wYXJlbnQiLAogCS5pZAkJPSAtMSwKIAkucGFyZW50CQk9ICZjbGtfZXN5c2NsaywKQEAgLTc0Nyw2ICs3NDcsMjQgQEAKIAkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaCwKIAkJLmN0cmxiaXQJPSBTM0MyNDQzX0hDTEtDT05fVVNCRCwKIAl9LCB7CisJCS5uYW1lCQk9ICJoc21tYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX2gsCisJCS5jdHJsYml0CT0gUzNDMjQ0M19IQ0xLQ09OX0hTTU1DLAorCX0sIHsKKwkJLm5hbWUJCT0gImNmYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX2gsCisJCS5jdHJsYml0CT0gUzNDMjQ0M19IQ0xLQ09OX0NGQywKKwl9LCB7CisJCS5uYW1lCQk9ICJzc21jIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfaCwKKwkJLmN0cmxiaXQJPSBTM0MyNDQzX0hDTEtDT05fU1NNQywKKwl9LCB7CiAJCS5uYW1lCQk9ICJ0aW1lcnMiLAogCQkuaWQJCT0gLTEsCiAJCS5wYXJlbnQJCT0gJmNsa19wLApAQCAtNzkxLDYgKzgwOSwxMSBAQAogCQkubmFtZQkJPSAidXNiLWJ1cy1ob3N0IiwKIAkJLmlkCQk9IC0xLAogCQkucGFyZW50CQk9ICZjbGtfdXNiX2J1c19ob3N0LAorCX0sIHsKKwkJLm5hbWUJCT0gImFjOTciLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfUENMS0NPTl9BQzk3LAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9tYWNoLXNtZGsyNDQzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvbWFjaC1zbWRrMjQ0My5jCmluZGV4IGI3MWVlNTMuLmIxZWI3MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9tYWNoLXNtZGsyNDQzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL21hY2gtc21kazI0NDMuYwpAQCAtMTA0LDYgKzEwNCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21kazI0NDNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9oc21tYywKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbWRrMjQ0M19tYXBfaW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9zM2MyNDQzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvczNjMjQ0My5jCmluZGV4IDExYjFkMGIuLjhkODExNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9zM2MyNDQzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL3MzYzI0NDMuYwpAQCAtNjMsNiArNjMsMTAgQEAKIAogCXMzY19kZXZpY2VfbmFuZC5uYW1lID0gInMzYzI0MTItbmFuZCI7CiAKKwkvKiBjaGFuZ2UgV0RUIElSUSBudW1iZXIgKi8KKwlzM2NfZGV2aWNlX3dkdC5yZXNvdXJjZVsxXS5zdGFydCA9IElSUV9TM0MyNDQzX1dEVDsKKwlzM2NfZGV2aWNlX3dkdC5yZXNvdXJjZVsxXS5lbmQgICA9IElSUV9TM0MyNDQzX1dEVDsKKwogCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnMzYzI0NDNfc3lzZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaDM2MDAuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzNjAwLmMKaW5kZXggYjAzNGFkNi4uYjcyZmVlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaDM2MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzYwMC5jCkBAIC03NDAsNyArNzQwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGgzODAwX2lycSA9IHsKIAkubmFtZQkJPSAiaDM4MDBfYXNpYyIsCiAJLmhhbmRsZXIJPSBoMzgwMF9JUlFfZGVtdXgsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKIH07CiAKIHUzMiBrcGlvX2ludF9zaGFkb3cgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMKaW5kZXggZDdjMDM4YS4uNGNiZjk0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jCkBAIC0xMzksMTIgKzEzOSwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2ExMTAwX3BvcnRfZm5zIG5lcG9uc2V0X3BvcnRfZm5zIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNhMTEwMF9wb3J0X2ZucyBuZXBvbnNldF9wb3J0X2ZucyBfX2RldmluaXRkYXRhID0gewogCS5zZXRfbWN0cmwJPSBuZXBvbnNldF9zZXRfbWN0cmwsCiAJLmdldF9tY3RybAk9IG5lcG9uc2V0X2dldF9tY3RybCwKIH07CiAKLXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXNhMTEwMF9yZWdpc3Rlcl91YXJ0X2ZucygmbmVwb25zZXRfcG9ydF9mbnMpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKaW5kZXggMjljODlmOS4uMjljYjBjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwpAQCAtMjUsNyArMjUsNyBAQAogewogCS8qCiAJICogQWNjb3JkaW5nIHRvIHRoZSBtYW51YWwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gbGV0IFJUVFIgYmUgemVybwotCSAqIGFuZCB0aGVuIGEgZGVmYXVsdCBkaXZpc2VyIGZvciBhIDMyLjc2OEtIeiBjbG9jayBpcyB1c2VkLgorCSAqIGFuZCB0aGVuIGEgZGVmYXVsdCBkaXZpc29yIGZvciBhIDMyLjc2OEtIeiBjbG9jayBpcyB1c2VkLgogCSAqIEFwcGFyZW50bHkgdGhpcyBkb2Vzbid0IHdvcmssIGF0IGxlYXN0IGZvciBteSBTQTExMTAgcmV2IDUuCiAJICogSWYgdGhlIGNsb2NrIGRpdmlkZXIgaXMgdW5pbml0aWFsaXplZCB0aGVuIHJlc2V0IGl0IHRvIHRoZQogCSAqIGRlZmF1bHQgdmFsdWUgdG8gZ2V0IHRoZSAxSHogY2xvY2suCkBAIC0xMTEsNyArMTExLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gc2ExMTAwX3RpbWVyX2lycSA9IHsKIAkubmFtZQkJPSAiU0ExMXh4IFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIJPSBzYTExMDBfdGltZXJfaW50ZXJydXB0LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2NvcmUuYwppbmRleCAwZTQ4MGZhLi5hMDU0NWRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2NvcmUuYwpAQCAtOTAsNyArOTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBzaGFya190aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gIlNoYXJrIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIJPSBzaGFya190aW1lcl9pbnRlcnJ1cHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKaW5kZXggMTI3NWFhNy4uYTdkZDA5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpAQCAtODkxLDcgKzg5MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHZlcnNhdGlsZV90aW1lcl9pcnEgPSB7CiAJLm5hbWUJCT0gIlZlcnNhdGlsZSBUaW1lciBUaWNrIiwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAogCS5oYW5kbGVyCT0gdmVyc2F0aWxlX3RpbWVyX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGU2ODRlOWIuLmU3OTA0YmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTEzMSw4ICsxMzEsOCBAQAogIyBBUk05MjJUCiBjb25maWcgQ1BVX0FSTTkyMlQKIAlib29sICJTdXBwb3J0IEFSTTkyMlQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKLQlkZXBlbmRzIG9uIEFSQ0hfTEg3QTQwWCB8fCBBUkNIX0lOVEVHUkFUT1IKLQlkZWZhdWx0IHkgaWYgQVJDSF9MSDdBNDBYCisJZGVwZW5kcyBvbiBBUkNIX0xIN0E0MFggfHwgQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfS1M4Njk1CisJZGVmYXVsdCB5IGlmIEFSQ0hfTEg3QTQwWCB8fCBBUkNIX0tTODY5NQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVApAQCAtMTQzLDcgKzE0Myw3IEBACiAJaGVscAogCSAgVGhlIEFSTTkyMlQgaXMgYSB2ZXJzaW9uIG9mIHRoZSBBUk05MjBULCBidXQgd2l0aCBzbWFsbGVyCiAJICBpbnN0cnVjdGlvbiBhbmQgZGF0YSBjYWNoZXMuIEl0IGlzIHVzZWQgaW4gQWx0ZXJhJ3MKLQkgIEV4Y2FsaWJ1ciBYQSBkZXZpY2UgZmFtaWx5LgorCSAgRXhjYWxpYnVyIFhBIGRldmljZSBmYW1pbHkgYW5kIE1pY3JlbCdzIEtTODY5NSBDZW50YXVyLgogCiAJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNOTIyVCBwcm9jZXNzb3IuCiAJICBPdGhlcndpc2UsIHNheSBOLgpAQCAtMTcxLDggKzE3MSw4IEBACiAjIEFSTTkyNlQKIGNvbmZpZyBDUFVfQVJNOTI2VAogCWJvb2wgIlN1cHBvcnQgQVJNOTI2VCBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgQVJDSF9WRVJTQVRJTEVfUEIgfHwgTUFDSF9WRVJTQVRJTEVfQUIgfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDE2WFggfHwgTUFDSF9SRUFMVklFV19FQiB8fCBBUkNIX1BOWDQwMDggfHwgQVJDSF9ORVRYIHx8IENQVV9TM0MyNDEyIHx8IEFSQ0hfQVQ5MVNBTTkyNjAgfHwgQVJDSF9BVDkxU0FNOTI2MSB8fCBBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfTlM5WFhYCi0JZGVmYXVsdCB5IGlmIEFSQ0hfVkVSU0FUSUxFX1BCIHx8IE1BQ0hfVkVSU0FUSUxFX0FCIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfUE5YNDAwOCB8fCBBUkNIX05FVFggfHwgQ1BVX1MzQzI0MTIgfHwgQVJDSF9BVDkxU0FNOTI2MCB8fCBBUkNIX0FUOTFTQU05MjYxIHx8IEFSQ0hfQVQ5MVNBTTkyNjMgfHwgQVJDSF9OUzlYWFgKKwlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBBUkNIX1ZFUlNBVElMRV9QQiB8fCBNQUNIX1ZFUlNBVElMRV9BQiB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQMTZYWCB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IEFSQ0hfUE5YNDAwOCB8fCBBUkNIX05FVFggfHwgQ1BVX1MzQzI0MTIgfHwgQVJDSF9BVDkxU0FNOTI2MCB8fCBBUkNIX0FUOTFTQU05MjYxIHx8IEFSQ0hfQVQ5MVNBTTkyNjMgfHwgQVJDSF9BVDkxU0FNOVJMIHx8IEFSQ0hfTlM5WFhYIHx8IEFSQ0hfREFWSU5DSQorCWRlZmF1bHQgeSBpZiBBUkNIX1ZFUlNBVElMRV9QQiB8fCBNQUNIX1ZFUlNBVElMRV9BQiB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX1BOWDQwMDggfHwgQVJDSF9ORVRYIHx8IENQVV9TM0MyNDEyIHx8IEFSQ0hfQVQ5MVNBTTkyNjAgfHwgQVJDSF9BVDkxU0FNOTI2MSB8fCBBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfQVQ5MVNBTTlSTCB8fCBBUkNIX05TOVhYWCB8fCBBUkNIX0RBVklOQ0kKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VEoKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKQEAgLTM1MSw2ICszNTEsNyBAQAogCXNlbGVjdCBDUFVfQ0FDSEVfVjYKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJUFQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCisJc2VsZWN0IENQVV9IQVNfQVNJRAogCXNlbGVjdCBDUFVfQ09QWV9WNiBpZiBNTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNiBpZiBNTVUKIApAQCAtMzY2LDYgKzM2NywyMCBAQAogCSAgZW5hYmxlZCB3aWxsIG5vdCBib290IG9uIHByb2Nlc3NvcnMgd2l0aCBkbyBub3Qgc3VwcG9ydCB0aGVzZQogCSAgaW5zdHJ1Y3Rpb25zLgogCisjIEFSTXY3Citjb25maWcgQ1BVX1Y3CisJYm9vbCAiU3VwcG9ydCBBUk0gVjcgcHJvY2Vzc29yIgorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SCisJc2VsZWN0IENQVV8zMnY2SworCXNlbGVjdCBDUFVfMzJ2NworCXNlbGVjdCBDUFVfQUJSVF9FVjcKKwlzZWxlY3QgQ1BVX0NBQ0hFX1Y3CisJc2VsZWN0IENQVV9DQUNIRV9WSVBUCisJc2VsZWN0IENQVV9DUDE1X01NVQorCXNlbGVjdCBDUFVfSEFTX0FTSUQKKwlzZWxlY3QgQ1BVX0NPUFlfVjYgaWYgTU1VCisJc2VsZWN0IENQVV9UTEJfVjcgaWYgTU1VCisKICMgRmlndXJlIG91dCB3aGF0IHByb2Nlc3NvciBhcmNoaXRlY3R1cmUgdmVyc2lvbiB3ZSBzaG91bGQgYmUgdXNpbmcuCiAjIFRoaXMgZGVmaW5lcyB0aGUgY29tcGlsZXIgaW5zdHJ1Y3Rpb24gc2V0IHdoaWNoIGRlcGVuZHMgb24gdGhlIG1hY2hpbmUgdHlwZS4KIGNvbmZpZyBDUFVfMzJ2MwpAQCAtMzkxLDYgKzQwNiw5IEBACiBjb25maWcgQ1BVXzMydjYKIAlib29sCiAKK2NvbmZpZyBDUFVfMzJ2NworCWJvb2wKKwogIyBUaGUgYWJvcnQgbW9kZWwKIGNvbmZpZyBDUFVfQUJSVF9OT01NVQogCWJvb2wKQEAgLTQxMyw2ICs0MzEsOSBAQAogY29uZmlnIENQVV9BQlJUX0VWNgogCWJvb2wKIAorY29uZmlnIENQVV9BQlJUX0VWNworCWJvb2wKKwogIyBUaGUgY2FjaGUgbW9kZWwKIGNvbmZpZyBDUFVfQ0FDSEVfVjMKIAlib29sCkBAIC00MjksNiArNDUwLDkgQEAKIGNvbmZpZyBDUFVfQ0FDSEVfVjYKIAlib29sCiAKK2NvbmZpZyBDUFVfQ0FDSEVfVjcKKwlib29sCisKIGNvbmZpZyBDUFVfQ0FDSEVfVklWVAogCWJvb2wKIApAQCAtNDc0LDggKzQ5OCwxNyBAQAogY29uZmlnIENQVV9UTEJfVjYKIAlib29sCiAKK2NvbmZpZyBDUFVfVExCX1Y3CisJYm9vbAorCiBlbmRpZgogCitjb25maWcgQ1BVX0hBU19BU0lECisJYm9vbAorCWhlbHAKKwkgIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIENQVSBoYXMgdGhlIEFTSUQgcmVnaXN0ZXI7IHVzZWQgdG8KKwkgIHRhZyBUTEIgYW5kIHBvc3NpYmx5IGNhY2hlIGVudHJpZXMuCisKIGNvbmZpZyBDUFVfQ1AxNQogCWJvb2wKIAloZWxwCkBAIC01MDMsNyArNTM2LDcgQEAKIAogY29uZmlnIEFSTV9USFVNQgogCWJvb2wgIlN1cHBvcnQgVGh1bWIgdXNlciBiaW5hcmllcyIKLQlkZXBlbmRzIG9uIENQVV9BUk03MjBUIHx8IENQVV9BUk03NDBUIHx8IENQVV9BUk05MjBUIHx8IENQVV9BUk05MjJUIHx8IENQVV9BUk05MjVUIHx8IENQVV9BUk05MjZUIHx8IENQVV9BUk05NDBUIHx8IENQVV9BUk05NDZFIHx8IENQVV9BUk0xMDIwIHx8IENQVV9BUk0xMDIwRSB8fCBDUFVfQVJNMTAyMiB8fCBDUFVfQVJNMTAyNiB8fCBDUFVfWFNDQUxFIHx8IENQVV9YU0MzIHx8IENQVV9WNgorCWRlcGVuZHMgb24gQ1BVX0FSTTcyMFQgfHwgQ1BVX0FSTTc0MFQgfHwgQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTk0MFQgfHwgQ1BVX0FSTTk0NkUgfHwgQ1BVX0FSTTEwMjAgfHwgQ1BVX0FSTTEwMjBFIHx8IENQVV9BUk0xMDIyIHx8IENQVV9BUk0xMDI2IHx8IENQVV9YU0NBTEUgfHwgQ1BVX1hTQzMgfHwgQ1BVX1Y2IHx8IENQVV9WNwogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUga2VybmVsIHN1cHBvcnQgZm9yIHJ1bm5pbmcgdXNlciBzcGFjZQpAQCAtNTc4LDkgKzYxMSwxNSBAQAogCSAgU2F5IFkgaGVyZSB0byB1c2UgdGhlIHByZWRpY3RhYmxlIHJvdW5kLXJvYmluIGNhY2hlIHJlcGxhY2VtZW50CiAJICBwb2xpY3kuICBVbmxlc3MgeW91IHNwZWNpZmljYWxseSByZXF1aXJlIHRoaXMgb3IgYXJlIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBDUFVfTDJDQUNIRV9ESVNBQkxFCisJYm9vbCAiRGlzYWJsZSBsZXZlbCAyIGNhY2hlIgorCWRlcGVuZHMgb24gQ1BVX1Y3CisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBkaXNhYmxlIHRoZSBsZXZlbCAyIGNhY2hlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIENQVV9CUFJFRElDVF9ESVNBQkxFCiAJYm9vbCAiRGlzYWJsZSBicmFuY2ggcHJlZGljdGlvbiIKLQlkZXBlbmRzIG9uIENQVV9BUk0xMDIwIHx8IENQVV9WNiB8fCBDUFVfWFNDMworCWRlcGVuZHMgb24gQ1BVX0FSTTEwMjAgfHwgQ1BVX1Y2IHx8IENQVV9YU0MzIHx8IENQVV9WNwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZGlzYWJsZSBicmFuY2ggcHJlZGljdGlvbi4gIElmIHVuc3VyZSwgc2F5IE4uCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL01ha2VmaWxlIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKaW5kZXggMmY4Yjk1OS4uNzYyNzAyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKQEAgLTI0LDEyICsyNCwxNCBAQAogb2JqLSQoQ09ORklHX0NQVV9BQlJUX0VWNVQpCSs9IGFib3J0LWV2NXQubwogb2JqLSQoQ09ORklHX0NQVV9BQlJUX0VWNVRKKQkrPSBhYm9ydC1ldjV0ai5vCiBvYmotJChDT05GSUdfQ1BVX0FCUlRfRVY2KQkrPSBhYm9ydC1ldjYubworb2JqLSQoQ09ORklHX0NQVV9BQlJUX0VWNykJKz0gYWJvcnQtZXY3Lm8KIAogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WMykJKz0gY2FjaGUtdjMubwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WNCkJKz0gY2FjaGUtdjQubwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WNFdUKQkrPSBjYWNoZS12NHd0Lm8KIG9iai0kKENPTkZJR19DUFVfQ0FDSEVfVjRXQikJKz0gY2FjaGUtdjR3Yi5vCiBvYmotJChDT05GSUdfQ1BVX0NBQ0hFX1Y2KQkrPSBjYWNoZS12Ni5vCitvYmotJChDT05GSUdfQ1BVX0NBQ0hFX1Y3KQkrPSBjYWNoZS12Ny5vCiAKIG9iai0kKENPTkZJR19DUFVfQ09QWV9WMykJKz0gY29weXBhZ2UtdjMubwogb2JqLSQoQ09ORklHX0NQVV9DT1BZX1Y0V1QpCSs9IGNvcHlwYWdlLXY0d3QubwpAQCAtNDQsNiArNDYsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9UTEJfVjRXQikJKz0gdGxiLXY0d2Iubwogb2JqLSQoQ09ORklHX0NQVV9UTEJfVjRXQkkpCSs9IHRsYi12NHdiaS5vCiBvYmotJChDT05GSUdfQ1BVX1RMQl9WNikJKz0gdGxiLXY2Lm8KK29iai0kKENPTkZJR19DUFVfVExCX1Y3KQkrPSB0bGItdjcubwogCiBvYmotJChDT05GSUdfQ1BVX0FSTTYxMCkJKz0gcHJvYy1hcm02Xzcubwogb2JqLSQoQ09ORklHX0NQVV9BUk03MTApCSs9IHByb2MtYXJtNl83Lm8KQEAgLTY2LDUgKzY5LDYgQEAKIG9iai0kKENPTkZJR19DUFVfWFNDQUxFKQkrPSBwcm9jLXhzY2FsZS5vCiBvYmotJChDT05GSUdfQ1BVX1hTQzMpCQkrPSBwcm9jLXhzYzMubwogb2JqLSQoQ09ORklHX0NQVV9WNikJCSs9IHByb2MtdjYubworb2JqLSQoQ09ORklHX0NQVV9WNykJCSs9IHByb2MtdjcubwogCiBvYmotJChDT05GSUdfQ0FDSEVfTDJYMCkJKz0gY2FjaGUtbDJ4MC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hYm9ydC1ldjcuUyBiL2FyY2gvYXJtL21tL2Fib3J0LWV2Ny5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOTBiY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjcuUwpAQCAtMCwwICsxLDMyIEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKy8qCisgKiBGdW5jdGlvbjogdjdfZWFybHlfYWJvcnQKKyAqCisgKiBQYXJhbXMgIDogcjIgPSBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24KKyAqICAgICAgICAgOiByMyA9IHNhdmVkIFNQU1IKKyAqCisgKiBSZXR1cm5zIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0CisgKgkgICA6IHIxID0gRlNSLCBiaXQgMTEgPSB3cml0ZQorICoJICAgOiByMi1yOCA9IGNvcnJ1cHRlZAorICoJICAgOiByOSA9IHByZXNlcnZlZAorICoJICAgOiBzcCA9IHBvaW50ZXIgdG8gcmVnaXN0ZXJzCisgKgorICogUHVycG9zZSA6IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGFib3J0ZWQgaW5zdHJ1Y3Rpb24uCisgKi8KKwkuYWxpZ24JNQorRU5UUlkodjdfZWFybHlfYWJvcnQpCisJLyoKKwkgKiBUaGUgZWZmZWN0IG9mIGRhdGEgYWJvcnRzIG9uIG9uIHRoZSBleGNsdXNpdmUgYWNjZXNzIG1vbml0b3IgYXJlCisJICogVU5QUkVESUNUQUJMRS4gRG8gYSBDTFJFWCB0byBjbGVhciB0aGUgc3RhdGUKKwkgKi8KKwljbHJleAorCisJbXJjCXAxNSwgMCwgcjEsIGM1LCBjMCwgMAkJQCBnZXQgRlNSCisJbXJjCXAxNSwgMCwgcjAsIGM2LCBjMCwgMAkJQCBnZXQgRkFSCisKKwkvKgorCSAqIFY2IGNvZGUgYWRqdXN0cyB0aGUgcmV0dXJuZWQgREZTUi4KKwkgKiBOZXcgZGVzaWducyBzaG91bGQgbm90IG5lZWQgdG8gcGF0Y2ggdXAgZmF1bHRzLgorCSAqLworCW1vdglwYywgbHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2FsaWdubWVudC5jIGIvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKaW5kZXggMTljYTMzMy4uMDc0YjdjYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKKysrIGIvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKICAqICBNb2RpZmljYXRpb25zIGZvciBBUk0gcHJvY2Vzc29yIChjKSAxOTk1LTIwMDEgUnVzc2VsbCBLaW5nCi0gKiAgVGh1bWIgYWxpZ21lbnQgZmF1bHQgZml4dXBzIChjKSAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICBUaHVtYiBhbGlnbm1lbnQgZmF1bHQgZml4dXBzIChjKSAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqICAtIEFkYXB0ZWQgZnJvbSBnZGIvc2ltL2FybS90aHVtYmVtdS5jIC0tIFRodW1iIGluc3RydWN0aW9uIGVtdWxhdGlvbi4KICAqICAgIENvcHlyaWdodCAoQykgMTk5NiwgQ3lnbnVzIFNvZnR3YXJlIFRlY2hub2xvZ2llcyBMdGQuCiAgKgpAQCAtNjMwLDcgKzYzMCw3IEBACiAKIAlmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwotCWlmIHRodW1iX21vZGUocmVncykgeworCWlmICh0aHVtYl9tb2RlKHJlZ3MpKSB7CiAJCWZhdWx0ID0gX19nZXRfdXNlcih0aW5zdHIsICh1MTYgKikoaW5zdHJwdHIgJiB+MSkpOwogCQlpZiAoIShmYXVsdCkpCiAJCQlpbnN0ciA9IHRodW1iMmFybSh0aW5zdHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmZmM0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IEFSTSBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBpcyB0aGUgInNoZWxsIiBvZiB0aGUgQVJNdjcgcHJvY2Vzc29yIHN1cHBvcnQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKy8qCisgKgl2N19mbHVzaF9kY2FjaGVfYWxsKCkKKyAqCisgKglGbHVzaCB0aGUgd2hvbGUgRC1jYWNoZS4KKyAqCisgKglDb3JydXB0ZWQgcmVnaXN0ZXJzOiByMC1yNSwgcjcsIHI5LXIxMQorICoKKyAqCS0gbW0gICAgLSBtbV9zdHJ1Y3QgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KK0VOVFJZKHY3X2ZsdXNoX2RjYWNoZV9hbGwpCisJbXJjCXAxNSwgMSwgcjAsIGMwLCBjMCwgMQkJQCByZWFkIGNsaWRyCisJYW5kcwlyMywgcjAsICMweDcwMDAwMDAJCUAgZXh0cmFjdCBsb2MgZnJvbSBjbGlkcgorCW1vdglyMywgcjMsIGxzciAjMjMJCQlAIGxlZnQgYWxpZ24gbG9jIGJpdCBmaWVsZAorCWJlcQlmaW5pc2hlZAkJCUAgaWYgbG9jIGlzIDAsIHRoZW4gbm8gbmVlZCB0byBjbGVhbgorCW1vdglyMTAsICMwCQkJCUAgc3RhcnQgY2xlYW4gYXQgY2FjaGUgbGV2ZWwgMAorbG9vcDE6CisJYWRkCXIyLCByMTAsIHIxMCwgbHNyICMxCQlAIHdvcmsgb3V0IDN4IGN1cnJlbnQgY2FjaGUgbGV2ZWwKKwltb3YJcjEsIHIwLCBsc3IgcjIJCQlAIGV4dHJhY3QgY2FjaGUgdHlwZSBiaXRzIGZyb20gY2xpZHIKKwlhbmQJcjEsIHIxLCAjNwkJCUAgbWFzayBvZiB0aGUgYml0cyBmb3IgY3VycmVudCBjYWNoZSBvbmx5CisJY21wCXIxLCAjMgkJCQlAIHNlZSB3aGF0IGNhY2hlIHdlIGhhdmUgYXQgdGhpcyBsZXZlbAorCWJsdAlza2lwCQkJCUAgc2tpcCBpZiBubyBjYWNoZSwgb3IganVzdCBpLWNhY2hlCisJbWNyCXAxNSwgMiwgcjEwLCBjMCwgYzAsIDAJCUAgc2VsZWN0IGN1cnJlbnQgY2FjaGUgbGV2ZWwgaW4gY3NzcgorCWlzYgkJCQkJQCBpc2IgdG8gc3ljaCB0aGUgbmV3IGNzc3ImY3NpZHIKKwltcmMJcDE1LCAxLCByMSwgYzAsIGMwLCAwCQlAIHJlYWQgdGhlIG5ldyBjc2lkcgorCWFuZAlyMiwgcjEsICM3CQkJQCBleHRyYWN0IHRoZSBsZW5ndGggb2YgdGhlIGNhY2hlIGxpbmVzCisJYWRkCXIyLCByMiwgIzQJCQlAIGFkZCA0IChsaW5lIGxlbmd0aCBvZmZzZXQpCisJbGRyCXI0LCA9MHgzZmYKKwlhbmRzCXI0LCByNCwgcjEsIGxzciAjMwkJQCBmaW5kIG1heGltdW0gbnVtYmVyIG9uIHRoZSB3YXkgc2l6ZQorCWNseglyNSwgcjQJCQkJQCBmaW5kIGJpdCBwb3NpdGlvbiBvZiB3YXkgc2l6ZSBpbmNyZW1lbnQKKwlsZHIJcjcsID0weDdmZmYKKwlhbmRzCXI3LCByNywgcjEsIGxzciAjMTMJCUAgZXh0cmFjdCBtYXggbnVtYmVyIG9mIHRoZSBpbmRleCBzaXplCitsb29wMjoKKwltb3YJcjksIHI0CQkJCUAgY3JlYXRlIHdvcmtpbmcgY29weSBvZiBtYXggd2F5IHNpemUKK2xvb3AzOgorCW9ycglyMTEsIHIxMCwgcjksIGxzbCByNQkJQCBmYWN0b3Igd2F5IGFuZCBjYWNoZSBudW1iZXIgaW50byByMTEKKwlvcnIJcjExLCByMTEsIHI3LCBsc2wgcjIJCUAgZmFjdG9yIGluZGV4IG51bWJlciBpbnRvIHIxMQorCW1jcglwMTUsIDAsIHIxMSwgYzcsIGMxNCwgMgkJQCBjbGVhbiAmIGludmFsaWRhdGUgYnkgc2V0L3dheQorCXN1YnMJcjksIHI5LCAjMQkJCUAgZGVjcmVtZW50IHRoZSB3YXkKKwliZ2UJbG9vcDMKKwlzdWJzCXI3LCByNywgIzEJCQlAIGRlY3JlbWVudCB0aGUgaW5kZXgKKwliZ2UJbG9vcDIKK3NraXA6CisJYWRkCXIxMCwgcjEwLCAjMgkJCUAgaW5jcmVtZW50IGNhY2hlIG51bWJlcgorCWNtcAlyMywgcjEwCisJYmd0CWxvb3AxCitmaW5pc2hlZDoKKwltb3YJcjEwLCAjMAkJCQlAIHN3aXRoIGJhY2sgdG8gY2FjaGUgbGV2ZWwgMAorCW1jcglwMTUsIDIsIHIxMCwgYzAsIGMwLCAwCQlAIHNlbGVjdCBjdXJyZW50IGNhY2hlIGxldmVsIGluIGNzc3IKKwlpc2IKKwltb3YJcGMsIGxyCisKKy8qCisgKgl2N19mbHVzaF9jYWNoZV9hbGwoKQorICoKKyAqCUZsdXNoIHRoZSBlbnRpcmUgY2FjaGUgc3lzdGVtLgorICogIFRoZSBkYXRhIGNhY2hlIGZsdXNoIGlzIG5vdyBhY2hpZXZlZCB1c2luZyBhdG9taWMgY2xlYW4gLyBpbnZhbGlkYXRlcworICogIHdvcmtpbmcgb3V0d2FyZHMgZnJvbSBMMSBjYWNoZS4gVGhpcyBpcyBkb25lIHVzaW5nIFNldC9XYXkgYmFzZWQgY2FjaGUKKyAqICBtYWludGFpbmFuY2UgaW5zdHJ1Y3Rpb25zLgorICogIFRoZSBpbnN0cnVjdGlvbiBjYWNoZSBjYW4gc3RpbGwgYmUgaW52YWxpZGF0ZWQgYmFjayB0byB0aGUgcG9pbnQgb2YKKyAqICB1bmlmaWNhdGlvbiBpbiBhIHNpbmdsZSBpbnN0cnVjdGlvbi4KKyAqCisgKi8KK0VOVFJZKHY3X2ZsdXNoX2tlcm5fY2FjaGVfYWxsKQorCXN0bWZkCXNwISwge3I0LXI1LCByNywgcjktcjExLCBscn0KKwlibAl2N19mbHVzaF9kY2FjaGVfYWxsCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgSStCVEIgY2FjaGUgaW52YWxpZGF0ZQorCWxkbWZkCXNwISwge3I0LXI1LCByNywgcjktcjExLCBscn0KKwltb3YJcGMsIGxyCisKKy8qCisgKgl2N19mbHVzaF9jYWNoZV9hbGwoKQorICoKKyAqCUZsdXNoIGFsbCBUTEIgZW50cmllcyBpbiBhIHBhcnRpY3VsYXIgYWRkcmVzcyBzcGFjZQorICoKKyAqCS0gbW0gICAgLSBtbV9zdHJ1Y3QgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KK0VOVFJZKHY3X2ZsdXNoX3VzZXJfY2FjaGVfYWxsKQorCS8qRkFMTFRIUk9VR0gqLworCisvKgorICoJdjdfZmx1c2hfY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCwgZmxhZ3MpCisgKgorICoJRmx1c2ggYSByYW5nZSBvZiBUTEIgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkIGFkZHJlc3Mgc3BhY2UuCisgKgorICoJLSBzdGFydCAtIHN0YXJ0IGFkZHJlc3MgKG1heSBub3QgYmUgYWxpZ25lZCkKKyAqCS0gZW5kICAgLSBlbmQgYWRkcmVzcyAoZXhjbHVzaXZlLCBtYXkgbm90IGJlIGFsaWduZWQpCisgKgktIGZsYWdzCS0gdm1fYXJlYV9zdHJ1Y3QgZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKgorICoJSXQgaXMgYXNzdW1lZCB0aGF0OgorICoJLSB3ZSBoYXZlIGEgVklQVCBjYWNoZS4KKyAqLworRU5UUlkodjdfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKKwltb3YJcGMsIGxyCisKKy8qCisgKgl2N19jb2hlcmVudF9rZXJuX3JhbmdlKHN0YXJ0LGVuZCkKKyAqCisgKglFbnN1cmUgdGhhdCB0aGUgSSBhbmQgRCBjYWNoZXMgYXJlIGNvaGVyZW50IHdpdGhpbiBzcGVjaWZpZWQKKyAqCXJlZ2lvbi4gIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgd2hlbiBjb2RlIGhhcyBiZWVuIHdyaXR0ZW4gdG8KKyAqCWEgbWVtb3J5IHJlZ2lvbiwgYW5kIHdpbGwgYmUgZXhlY3V0ZWQuCisgKgorICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgorICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KKyAqCisgKglJdCBpcyBhc3N1bWVkIHRoYXQ6CisgKgktIHRoZSBJY2FjaGUgZG9lcyBub3QgcmVhZCBkYXRhIGZyb20gdGhlIHdyaXRlIGJ1ZmZlcgorICovCitFTlRSWSh2N19jb2hlcmVudF9rZXJuX3JhbmdlKQorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKgl2N19jb2hlcmVudF91c2VyX3JhbmdlKHN0YXJ0LGVuZCkKKyAqCisgKglFbnN1cmUgdGhhdCB0aGUgSSBhbmQgRCBjYWNoZXMgYXJlIGNvaGVyZW50IHdpdGhpbiBzcGVjaWZpZWQKKyAqCXJlZ2lvbi4gIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgd2hlbiBjb2RlIGhhcyBiZWVuIHdyaXR0ZW4gdG8KKyAqCWEgbWVtb3J5IHJlZ2lvbiwgYW5kIHdpbGwgYmUgZXhlY3V0ZWQuCisgKgorICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgorICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KKyAqCisgKglJdCBpcyBhc3N1bWVkIHRoYXQ6CisgKgktIHRoZSBJY2FjaGUgZG9lcyBub3QgcmVhZCBkYXRhIGZyb20gdGhlIHdyaXRlIGJ1ZmZlcgorICovCitFTlRSWSh2N19jb2hlcmVudF91c2VyX3JhbmdlKQorCWRjYWNoZV9saW5lX3NpemUgcjIsIHIzCisJc3ViCXIzLCByMiwgIzEKKwliaWMJcjAsIHIwLCByMworMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTEsIDEJCUAgY2xlYW4gRCBsaW5lIHRvIHRoZSBwb2ludCBvZiB1bmlmaWNhdGlvbgorCWRzYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGxpbmUKKwlhZGQJcjAsIHIwLCByMgorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNgkJQCBpbnZhbGlkYXRlIEJUQgorCWRzYgorCWlzYgorCW1vdglwYywgbHIKKworLyoKKyAqCXY3X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uoa2FkZHIpCisgKgorICoJRW5zdXJlIHRoYXQgdGhlIGRhdGEgaGVsZCBpbiB0aGUgcGFnZSBrYWRkciBpcyB3cml0dGVuIGJhY2sKKyAqCXRvIHRoZSBwYWdlIGluIHF1ZXN0aW9uLgorICoKKyAqCS0ga2FkZHIgICAtIGtlcm5lbCBhZGRyZXNzIChndWFyYW50ZWVkIHRvIGJlIHBhZ2UgYWxpZ25lZCkKKyAqLworRU5UUlkodjdfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKKwlkY2FjaGVfbGluZV9zaXplIHIyLCByMworCWFkZAlyMSwgcjAsICNQQUdFX1NaCisxOgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBEIGxpbmUgLyB1bmlmaWVkIGxpbmUKKwlhZGQJcjAsIHIwLCByMgorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwlkc2IKKwltb3YJcGMsIGxyCisKKy8qCisgKgl2N19kbWFfaW52X3JhbmdlKHN0YXJ0LGVuZCkKKyAqCisgKglJbnZhbGlkYXRlIHRoZSBkYXRhIGNhY2hlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJlZ2lvbjsgd2Ugd2lsbAorICoJYmUgcGVyZm9ybWluZyBhIERNQSBvcGVyYXRpb24gaW4gdGhpcyByZWdpb24gYW5kIHdlIHdhbnQgdG8KKyAqCXB1cmdlIG9sZCBkYXRhIGluIHRoZSBjYWNoZS4KKyAqCisgKgktIHN0YXJ0ICAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uCisgKgktIGVuZCAgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzIG9mIHJlZ2lvbgorICovCitFTlRSWSh2N19kbWFfaW52X3JhbmdlKQorCWRjYWNoZV9saW5lX3NpemUgcjIsIHIzCisJc3ViCXIzLCByMiwgIzEKKwl0c3QJcjAsIHIzCisJYmljCXIwLCByMCwgcjMKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBEIC8gVSBsaW5lCisKKwl0c3QJcjEsIHIzCisJYmljCXIxLCByMSwgcjMKKwltY3JuZQlwMTUsIDAsIHIxLCBjNywgYzE0LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBEIC8gVSBsaW5lCisxOgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIC8gVSBsaW5lCisJYWRkCXIwLCByMCwgcjIKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJZHNiCisJbW92CXBjLCBscgorCisvKgorICoJdjdfZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LGVuZCkKKyAqCS0gc3RhcnQgICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyBvZiByZWdpb24KKyAqCS0gZW5kICAgICAtIHZpcnR1YWwgZW5kIGFkZHJlc3Mgb2YgcmVnaW9uCisgKi8KK0VOVFJZKHY3X2RtYV9jbGVhbl9yYW5nZSkKKwlkY2FjaGVfbGluZV9zaXplIHIyLCByMworCXN1YglyMywgcjIsICMxCisJYmljCXIwLCByMCwgcjMKKzE6CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCAvIFUgbGluZQorCWFkZAlyMCwgcjAsIHIyCisJY21wCXIwLCByMQorCWJsbwkxYgorCWRzYgorCW1vdglwYywgbHIKKworLyoKKyAqCXY3X2RtYV9mbHVzaF9yYW5nZShzdGFydCxlbmQpCisgKgktIHN0YXJ0ICAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uCisgKgktIGVuZCAgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzIG9mIHJlZ2lvbgorICovCitFTlRSWSh2N19kbWFfZmx1c2hfcmFuZ2UpCisJZGNhY2hlX2xpbmVfc2l6ZSByMiwgcjMKKwlzdWIJcjMsIHIyLCAjMQorCWJpYwlyMCwgcjAsIHIzCisxOgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBEIC8gVSBsaW5lCisJYWRkCXIwLCByMCwgcjIKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJZHNiCisJbW92CXBjLCBscgorCisJX19JTklUREFUQQorCisJLnR5cGUJdjdfY2FjaGVfZm5zLCAjb2JqZWN0CitFTlRSWSh2N19jYWNoZV9mbnMpCisJLmxvbmcJdjdfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwkubG9uZwl2N19mbHVzaF91c2VyX2NhY2hlX2FsbAorCS5sb25nCXY3X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKKwkubG9uZwl2N19jb2hlcmVudF9rZXJuX3JhbmdlCisJLmxvbmcJdjdfY29oZXJlbnRfdXNlcl9yYW5nZQorCS5sb25nCXY3X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwl2N19kbWFfaW52X3JhbmdlCisJLmxvbmcJdjdfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJdjdfZG1hX2ZsdXNoX3JhbmdlCisJLnNpemUJdjdfY2FjaGVfZm5zLCAuIC0gdjdfY2FjaGVfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb250ZXh0LmMgYi9hcmNoL2FybS9tbS9jb250ZXh0LmMKaW5kZXggOWRhNDNhMC4uZmM4NGZjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29udGV4dC5jCisrKyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwpAQCAtMTQsNyArMTQsOCBAQAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCi11bnNpZ25lZCBpbnQgY3B1X2xhc3RfYXNpZCA9IHsgMSA8PCBBU0lEX0JJVFMgfTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY3B1X2FzaWRfbG9jayk7Cit1bnNpZ25lZCBpbnQgY3B1X2xhc3RfYXNpZCA9IEFTSURfRklSU1RfVkVSU0lPTjsKIAogLyoKICAqIFdlIGZvcmsoKWVkIGEgcHJvY2VzcywgYW5kIHdlIG5lZWQgYSBuZXcgY29udGV4dCBmb3IgdGhlIGNoaWxkCkBAIC0zMSwxNSArMzIsMTYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgYXNpZDsKIAorCXNwaW5fbG9jaygmY3B1X2FzaWRfbG9jayk7CiAJYXNpZCA9ICsrY3B1X2xhc3RfYXNpZDsKIAlpZiAoYXNpZCA9PSAwKQotCQlhc2lkID0gY3B1X2xhc3RfYXNpZCA9IDEgPDwgQVNJRF9CSVRTOworCQlhc2lkID0gY3B1X2xhc3RfYXNpZCA9IEFTSURfRklSU1RfVkVSU0lPTjsKIAogCS8qCiAJICogSWYgd2UndmUgdXNlZCB1cCBhbGwgb3VyIEFTSURzLCB3ZSBuZWVkCiAJICogdG8gc3RhcnQgYSBuZXcgdmVyc2lvbiBhbmQgZmx1c2ggdGhlIFRMQi4KIAkgKi8KLQlpZiAoKGFzaWQgJiB+QVNJRF9NQVNLKSA9PSAwKSB7CisJaWYgKHVubGlrZWx5KChhc2lkICYgfkFTSURfTUFTSykgPT0gMCkpIHsKIAkJYXNpZCA9ICsrY3B1X2xhc3RfYXNpZDsKIAkJLyogc2V0IHRoZSByZXNlcnZlZCBBU0lEIGJlZm9yZSBmbHVzaGluZyB0aGUgVExCICovCiAJCWFzbSgibWNyCXAxNSwgMCwgJTAsIGMxMywgYzAsIDEJQCBzZXQgcmVzZXJ2ZWQgY29udGV4dCBJRFxuIgpAQCAtNDcsNyArNDksMTYgQEAKIAkJICAgIDogInIiICgwKSk7CiAJCWlzYigpOwogCQlmbHVzaF90bGJfYWxsKCk7CisJCWlmIChpY2FjaGVfaXNfdml2dF9hc2lkX3RhZ2dlZCgpKSB7CisJCQlhc20oIm1jcglwMTUsIDAsICUwLCBjNywgYzUsIDAJQCBpbnZhbGlkYXRlIEktY2FjaGVcbiIKKwkJCSAgICAibWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgNglAIGZsdXNoIEJUQUMvQlRCXG4iCisJCQkgICAgOgorCQkJICAgIDogInIiICgwKSk7CisJCQlkc2IoKTsKKwkJfQogCX0KKwlzcGluX3VubG9jaygmY3B1X2FzaWRfbG9jayk7CiAKKwltbS0+Y3B1X3ZtX21hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCW1tLT5jb250ZXh0LmlkID0gYXNpZDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcmNoL2FybS9tbS9mYXVsdC5jCmluZGV4IDVkOWNlN2QuLjc1ZDQ5MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtNDUzLDcgKzQ1Myw3IEBACiAJaW5mby5zaV9lcnJubyA9IDA7CiAJaW5mby5zaV9jb2RlICA9IGluZi0+Y29kZTsKIAlpbmZvLnNpX2FkZHIgID0gKHZvaWQgX191c2VyICopYWRkcjsKLQlub3RpZnlfZGllKCIiLCByZWdzLCAmaW5mbywgZnNyLCAwKTsKKwlhcm1fbm90aWZ5X2RpZSgiIiwgcmVncywgJmluZm8sIGZzciwgMCk7CiB9CiAKIGFzbWxpbmthZ2Ugdm9pZCBfX2V4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jIGIvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCmluZGV4IGQ2MTY3YWQuLmYzYWRlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2lvcmVtYXAuYworKysgYi9hcmNoL2FybS9tbS9pb3JlbWFwLmMKQEAgLTM0Niw3ICszNDYsNyBAQAogI2lmbmRlZiBDT05GSUdfU01QCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGEgc2VjdGlvbiBiYXNlZCBtYXBwaW5nIHdlIG5lZWQgdG8gaGFuZGxlIGl0Ci0JICogc3BlY2lhbGx5IGFzIHRoZSBWTSBzdWJ5c3lzdGVtIGRvZXMgbm90IGtub3cgaG93IHRvIGhhbmRsZQorCSAqIHNwZWNpYWxseSBhcyB0aGUgVk0gc3Vic3lzdGVtIGRvZXMgbm90IGtub3cgaG93IHRvIGhhbmRsZQogCSAqIHN1Y2ggYSBiZWFzdC4gV2UgbmVlZCB0aGUgbG9jayBoZXJlIGIvYyB3ZSBuZWVkIHRvIGNsZWFyCiAJICogYWxsIHRoZSBtYXBwaW5ncyBiZWZvcmUgdGhlIGFyZWEgY2FuIGJlIHJlY2xhaW1lZAogCSAqIGJ5IHNvbWVvbmUgZWxzZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tYXAuYyBiL2FyY2gvYXJtL21tL21tYXAuYwppbmRleCAyYzRjMjQyLi4yNzI4YjBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbWFwLmMKKysrIGIvYXJjaC9hcm0vbW0vbW1hcC5jCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NobS5oPgotCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNkZWZpbmUgQ09MT1VSX0FMSUdOKGFkZHIscGdvZmYpCQlcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbXUuYyBiL2FyY2gvYXJtL21tL21tdS5jCmluZGV4IDJiYTE1MzAuLjAyZTA1MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tdS5jCisrKyBiL2FyY2gvYXJtL21tL21tdS5jCkBAIC05Miw3ICs5Miw3IEBACiB9OwogCiAvKgotICogVGhlc2UgYXJlIHVzZWZ1bCBmb3IgaWRlbnRpZmluZyBjYWNoZSBjb2hlcmVuY3kKKyAqIFRoZXNlIGFyZSB1c2VmdWwgZm9yIGlkZW50aWZ5aW5nIGNhY2hlIGNvaGVyZW5jeQogICogcHJvYmxlbXMgYnkgYWxsb3dpbmcgdGhlIGNhY2hlIG9yIHRoZSBjYWNoZSBhbmQKICAqIHdyaXRlYnVmZmVyIHRvIGJlIHR1cm5lZCBvZmYuICAoTm90ZTogdGhlIHdyaXRlCiAgKiBidWZmZXIgc2hvdWxkIG5vdCBiZSBvbiBhbmQgdGhlIGNhY2hlIG9mZikuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TIGIvYXJjaC9hcm0vbW0vcHJvYy1tYWNyb3MuUwppbmRleCA5ZTJjODllLi5iMTMxNTAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMKQEAgLTU5LDMgKzU5LDE1IEBACiAJLndvcmQJXHVjc2V0CiAjZW5kaWYKIAkuZW5kbQorCisvKgorICogY2FjaGVfbGluZV9zaXplIC0gZ2V0IHRoZSBjYWNoZSBsaW5lIHNpemUgZnJvbSB0aGUgQ1NJRFIgcmVnaXN0ZXIKKyAqIChhdmFpbGFibGUgb24gQVJNdjcrKS4gSXQgYXNzdW1lcyB0aGF0IHRoZSBDU1NSIHJlZ2lzdGVyIHdhcyBjb25maWd1cmVkCisgKiB0byBhY2Nlc3MgdGhlIEwxIGRhdGEgY2FjaGUgQ1NJRFIuCisgKi8KKwkubWFjcm8JZGNhY2hlX2xpbmVfc2l6ZSwgcmVnLCB0bXAKKwltcmMJcDE1LCAxLCBcdG1wLCBjMCwgYzAsIDAJCUAgcmVhZCBDU0lEUgorCWFuZAlcdG1wLCBcdG1wLCAjNwkJCUAgY2FjaGUgbGluZSBzaXplIGVuY29kaW5nCisJbW92CVxyZWcsICMxNgkJCUAgc2l6ZSBvZmZzZXQKKwltb3YJXHJlZywgXHJlZywgbHNsIFx0bXAJCUAgYWN0dWFsIGNhY2hlIGxpbmUgc2l6ZQorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4ZjQ3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9wcm9jLXY3LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgaXMgdGhlICJzaGVsbCIgb2YgdGhlIEFSTXY3IHByb2Nlc3NvciBzdXBwb3J0LgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vZWxmLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCisjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKKworI2RlZmluZSBUVEJfQwkJKDEgPDwgMCkKKyNkZWZpbmUgVFRCX1MJCSgxIDw8IDEpCisjZGVmaW5lIFRUQl9SR05fT0NfV1QJKDIgPDwgMykKKyNkZWZpbmUgVFRCX1JHTl9PQ19XQgkoMyA8PCAzKQorCitFTlRSWShjcHVfdjdfcHJvY19pbml0KQorCW1vdglwYywgbHIKKworRU5UUlkoY3B1X3Y3X3Byb2NfZmluKQorCW1vdglwYywgbHIKKworLyoKKyAqCWNwdV92N19yZXNldChsb2MpCisgKgorICoJUGVyZm9ybSBhIHNvZnQgcmVzZXQgb2YgdGhlIHN5c3RlbS4gIFB1dCB0aGUgQ1BVIGludG8gdGhlCisgKglzYW1lIHN0YXRlIGFzIGl0IHdvdWxkIGJlIGlmIGl0IGhhZCBiZWVuIHJlc2V0LCBhbmQgYnJhbmNoCisgKgl0byB3aGF0IHdvdWxkIGJlIHRoZSByZXNldCB2ZWN0b3IuCisgKgorICoJLSBsb2MgICAtIGxvY2F0aW9uIHRvIGp1bXAgdG8gZm9yIHNvZnQgcmVzZXQKKyAqCisgKglJdCBpcyBhc3N1bWVkIHRoYXQ6CisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X3Y3X3Jlc2V0KQorCW1vdglwYywgcjAKKworLyoKKyAqCWNwdV92N19kb19pZGxlKCkKKyAqCisgKglJZGxlIHRoZSBwcm9jZXNzb3IgKGVnLCB3YWl0IGZvciBpbnRlcnJ1cHQpLgorICoKKyAqCUlSUXMgYXJlIGFscmVhZHkgZGlzYWJsZWQuCisgKi8KK0VOVFJZKGNwdV92N19kb19pZGxlKQorCS5sb25nCTB4ZTMyMGYwMDMJCQlAIEFSTSBWNyBXRkkgaW5zdHJ1Y3Rpb24KKwltb3YJcGMsIGxyCisKK0VOVFJZKGNwdV92N19kY2FjaGVfY2xlYW5fYXJlYSkKKyNpZm5kZWYgVExCX0NBTl9SRUFEX0ZST01fTDFfQ0FDSEUKKwlkY2FjaGVfbGluZV9zaXplIHIyLCByMworMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsIHIyCisJc3VicwlyMSwgcjEsIHIyCisJYmhpCTFiCisJZHNiCisjZW5kaWYKKwltb3YJcGMsIGxyCisKKy8qCisgKgljcHVfdjdfc3dpdGNoX21tKHBnZF9waHlzLCB0c2spCisgKgorICoJU2V0IHRoZSB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIHBvaW50ZXIgdG8gYmUgcGdkX3BoeXMKKyAqCisgKgktIHBnZF9waHlzIC0gcGh5c2ljYWwgYWRkcmVzcyBvZiBuZXcgVFRCCisgKgorICoJSXQgaXMgYXNzdW1lZCB0aGF0OgorICoJLSB3ZSBhcmUgbm90IHVzaW5nIHNwbGl0IHBhZ2UgdGFibGVzCisgKi8KK0VOVFJZKGNwdV92N19zd2l0Y2hfbW0pCisJbW92CXIyLCAjMAorCWxkcglyMSwgW3IxLCAjTU1fQ09OVEVYVF9JRF0JQCBnZXQgbW0tPmNvbnRleHQuaWQKKwlvcnIJcjAsIHIwLCAjVFRCX1JHTl9PQ19XQgkJQCBtYXJrIFBUV3Mgb3V0ZXIgY2FjaGVhYmxlLCBXQgorCW1jcglwMTUsIDAsIHIyLCBjMTMsIGMwLCAxCQlAIHNldCByZXNlcnZlZCBjb250ZXh0IElECisJaXNiCisxOgltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIHNldCBUVEIgMAorCWlzYgorCW1jcglwMTUsIDAsIHIxLCBjMTMsIGMwLCAxCQlAIHNldCBjb250ZXh0IElECisJaXNiCisJbW92CXBjLCBscgorCisvKgorICoJY3B1X3Y3X3NldF9wdGVfZXh0KHB0ZXAsIHB0ZSkKKyAqCisgKglTZXQgYSBsZXZlbCAyIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5LgorICoKKyAqCS0gcHRlcCAgLSBwb2ludGVyIHRvIGxldmVsIDIgdHJhbnNsYXRpb24gdGFibGUgZW50cnkKKyAqCQkgIChoYXJkd2FyZSB2ZXJzaW9uIGlzIHN0b3JlZCBhdCAtMTAyNCBieXRlcykKKyAqCS0gcHRlICAgLSBQVEUgdmFsdWUgdG8gc3RvcmUKKyAqCS0gZXh0CS0gdmFsdWUgZm9yIGV4dGVuZGVkIFBURSBiaXRzCisgKgorICoJUGVybWlzc2lvbnM6CisgKgkgIFlVV0QgIEFQWCBBUDEgQVAwCVNWQwlVc2VyCisgKgkgIDB4eHggICAwICAgMCAgIDAJbm8gYWNjCW5vIGFjYworICoJICAxMDB4ICAgMSAgIDAgICAxCXIvbwlubyBhY2MKKyAqCSAgMTB4MCAgIDEgICAwICAgMQlyL28Jbm8gYWNjCisgKgkgIDEwMTEgICAwICAgMCAgIDEJci93CW5vIGFjYworICoJICAxMTB4ICAgMCAgIDEgICAwCXIvdwlyL28KKyAqCSAgMTF4MCAgIDAgICAxICAgMAlyL3cJci9vCisgKgkgIDExMTEgICAwICAgMSAgIDEJci93CXIvdworICovCitFTlRSWShjcHVfdjdfc2V0X3B0ZV9leHQpCisJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgorCisJYmljCXIzLCByMSwgIzB4MDAwMDAzZjAKKwliaWMJcjMsIHIzLCAjMHgwMDAwMDAwMworCW9ycglyMywgcjMsIHIyCisJb3JyCXIzLCByMywgI1BURV9FWFRfQVAwIHwgMgorCisJdHN0CXIxLCAjTF9QVEVfV1JJVEUKKwl0c3RuZQlyMSwgI0xfUFRFX0RJUlRZCisJb3JyZXEJcjMsIHIzLCAjUFRFX0VYVF9BUFgKKworCXRzdAlyMSwgI0xfUFRFX1VTRVIKKwlvcnJuZQlyMywgcjMsICNQVEVfRVhUX0FQMQorCXRzdG5lCXIzLCAjUFRFX0VYVF9BUFgKKwliaWNuZQlyMywgcjMsICNQVEVfRVhUX0FQWCB8IFBURV9FWFRfQVAwCisKKwl0c3QJcjEsICNMX1BURV9ZT1VORworCWJpY2VxCXIzLCByMywgI1BURV9FWFRfQVBYIHwgUFRFX0VYVF9BUF9NQVNLCisKKwl0c3QJcjEsICNMX1BURV9FWEVDCisJb3JyZXEJcjMsIHIzLCAjUFRFX0VYVF9YTgorCisJdHN0CXIxLCAjTF9QVEVfUFJFU0VOVAorCW1vdmVxCXIzLCAjMAorCisJc3RyCXIzLCBbcjBdCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgZmx1c2hfcHRlCisJbW92CXBjLCBscgorCitjcHVfdjdfbmFtZToKKwkuYXNjaWkJIkFSTXY3IFByb2Nlc3NvciIKKwkuYWxpZ24KKworCS5zZWN0aW9uICIudGV4dC5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCisKKy8qCisgKglfX3Y3X3NldHVwCisgKgorICoJSW5pdGlhbGlzZSBUTEIsIENhY2hlcywgYW5kIE1NVSBzdGF0ZSByZWFkeSB0byBzd2l0Y2ggdGhlIE1NVQorICoJb24uICBSZXR1cm4gaW4gcjAgdGhlIG5ldyBDUDE1IEMxIGNvbnRyb2wgcmVnaXN0ZXIgc2V0dGluZy4KKyAqCisgKglXZSBhdXRvbWF0aWNhbGx5IGRldGVjdCBpZiB3ZSBoYXZlIGEgSGFydmFyZCBjYWNoZSwgYW5kIHVzZSB0aGUKKyAqCUhhcnZhcmQgY2FjaGUgY29udHJvbCBpbnN0cnVjdGlvbnMgaW5zZWFkIG9mIHRoZSB1bmlmaWVkIGNhY2hlCisgKgljb250cm9sIGluc3RydWN0aW9ucy4KKyAqCisgKglUaGlzIHNob3VsZCBiZSBhYmxlIHRvIGNvdmVyIGFsbCBBUk12NyBjb3Jlcy4KKyAqCisgKglJdCBpcyBhc3N1bWVkIHRoYXQ6CisgKgktIGNhY2hlIHR5cGUgcmVnaXN0ZXIgaXMgaW1wbGVtZW50ZWQKKyAqLworX192N19zZXR1cDoKKwlhZHIJcjEyLCBfX3Y3X3NldHVwX3N0YWNrCQlAIHRoZSBsb2NhbCBzdGFjaworCXN0bWlhCXIxMiwge3IwLXI1LCByNywgcjksIHIxMSwgbHJ9CisJYmwJdjdfZmx1c2hfZGNhY2hlX2FsbAorCWxkbWlhCXIxMiwge3IwLXI1LCByNywgcjksIHIxMSwgbHJ9CisJbW92CXIxMCwgIzAKKyNpZmRlZiBIQVJWQVJEX0NBQ0hFCisJbWNyCXAxNSwgMCwgcjEwLCBjNywgYzUsIDAJCUAgSStCVEIgY2FjaGUgaW52YWxpZGF0ZQorI2VuZGlmCisJZHNiCisJbWNyCXAxNSwgMCwgcjEwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICsgRCBUTEJzCisJbWNyCXAxNSwgMCwgcjEwLCBjMiwgYzAsIDIJCUAgVFRCIGNvbnRyb2wgcmVnaXN0ZXIKKwlvcnIJcjQsIHI0LCAjVFRCX1JHTl9PQ19XQgkJQCBtYXJrIFBUV3Mgb3V0ZXIgY2FjaGVhYmxlLCBXQgorCW1jcglwMTUsIDAsIHI0LCBjMiwgYzAsIDAJCUAgbG9hZCBUVEIwCisJbWNyCXAxNSwgMCwgcjQsIGMyLCBjMCwgMQkJQCBsb2FkIFRUQjEKKwltb3YJcjEwLCAjMHgxZgkJCUAgZG9tYWlucyAwLCAxID0gbWFuYWdlcgorCW1jcglwMTUsIDAsIHIxMCwgYzMsIGMwLCAwCQlAIGxvYWQgZG9tYWluIGFjY2VzcyByZWdpc3RlcgorI2lmbmRlZiBDT05GSUdfQ1BVX0wyQ0FDSEVfRElTQUJMRQorCUAgTDIgY2FjaGUgY29uZmlndXJhdGlvbiBpbiB0aGUgTDIgYXV4IGNvbnRyb2wgcmVnaXN0ZXIKKwltcmMJcDE1LCAxLCByMTAsIGM5LCBjMCwgMgorCWJpYwlyMTAsIHIxMCwgIygxIDw8IDE2KQkJQCBMMiBvdXRlciBjYWNoZQorCW1jcglwMTUsIDEsIHIxMCwgYzksIGMwLCAyCisJQCBMMiBjYWNoZSBpcyBlbmFibGVkIGluIHRoZSBhdXggY29udHJvbCByZWdpc3RlcgorCW1yYwlwMTUsIDAsIHIxMCwgYzEsIGMwLCAxCisJb3JyCXIxMCwgcjEwLCAjMgorCW1jcglwMTUsIDAsIHIxMCwgYzEsIGMwLCAxCisjZW5kaWYKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIHJlYWQgY29udHJvbCByZWdpc3RlcgorCWxkcglyMTAsIGNyMV9jbGVhcgkJCUAgZ2V0IG1hc2sgZm9yIGJpdHMgdG8gY2xlYXIKKwliaWMJcjAsIHIwLCByMTAJCQlAIGNsZWFyIGJpdHMgdGhlbQorCWxkcglyMTAsIGNyMV9zZXQJCQlAIGdldCBtYXNrIGZvciBiaXRzIHRvIHNldAorCW9ycglyMCwgcjAsIHIxMAkJCUAgc2V0IHRoZW0KKwltb3YJcGMsIGxyCQkJCUAgcmV0dXJuIHRvIGhlYWQuUzpfX3JldAorCisJLyoKKwkgKiAgICAgICAgIFYgWCBGICAgSSBEIExSCisJICogLi4uLiAuLi5FIFBVSS4gLlQuVCA0UlZJIFpGUlMgQkxEUCBXQ0FNCisJICogcnJyciBycnJ4IHh4eDAgMDEwMSB4eHh4IHh4eHggeDExMSB4eHh4IDwgZm9yY2VkCisJICogICAgICAgICAwIDExMCAgICAgICAwMDExIDEuMDAgLjExMSAxMTAxIDwgd2Ugd2FudAorCSAqLworCS50eXBlCWNyMV9jbGVhciwgI29iamVjdAorCS50eXBlCWNyMV9zZXQsICNvYmplY3QKK2NyMV9jbGVhcjoKKwkud29yZAkweDAxMjBjMzAyCitjcjFfc2V0OgorCS53b3JkCTB4MDBjMDM4N2QKKworX192N19zZXR1cF9zdGFjazoKKwkuc3BhY2UJNCAqIDExCQkJCUAgMTEgcmVnaXN0ZXJzCisKKwkudHlwZQl2N19wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CitFTlRSWSh2N19wcm9jZXNzb3JfZnVuY3Rpb25zKQorCS53b3JkCXY3X2Vhcmx5X2Fib3J0CisJLndvcmQJY3B1X3Y3X3Byb2NfaW5pdAorCS53b3JkCWNwdV92N19wcm9jX2ZpbgorCS53b3JkCWNwdV92N19yZXNldAorCS53b3JkCWNwdV92N19kb19pZGxlCisJLndvcmQJY3B1X3Y3X2RjYWNoZV9jbGVhbl9hcmVhCisJLndvcmQJY3B1X3Y3X3N3aXRjaF9tbQorCS53b3JkCWNwdV92N19zZXRfcHRlX2V4dAorCS5zaXplCXY3X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSB2N19wcm9jZXNzb3JfZnVuY3Rpb25zCisKKwkudHlwZQljcHVfYXJjaF9uYW1lLCAjb2JqZWN0CitjcHVfYXJjaF9uYW1lOgorCS5hc2NpegkiYXJtdjciCisJLnNpemUJY3B1X2FyY2hfbmFtZSwgLiAtIGNwdV9hcmNoX25hbWUKKworCS50eXBlCWNwdV9lbGZfbmFtZSwgI29iamVjdAorY3B1X2VsZl9uYW1lOgorCS5hc2NpegkidjciCisJLnNpemUJY3B1X2VsZl9uYW1lLCAuIC0gY3B1X2VsZl9uYW1lCisJLmFsaWduCisKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCisKKwkvKgorCSAqIE1hdGNoIGFueSBBUk12NyBwcm9jZXNzb3IgY29yZS4KKwkgKi8KKwkudHlwZQlfX3Y3X3Byb2NfaW5mbywgI29iamVjdAorX192N19wcm9jX2luZm86CisJLmxvbmcJMHgwMDBmMDAwMAkJQCBSZXF1aXJlZCBJRCB2YWx1ZQorCS5sb25nCTB4MDAwZjAwMDAJCUAgTWFzayBmb3IgSUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX1hOIHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCWIJX192N19zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfRURTUAorCS5sb25nCWNwdV92N19uYW1lCisJLmxvbmcJdjdfcHJvY2Vzc29yX2Z1bmN0aW9ucworCS5sb25nCXY3d2JpX3RsYl9mbnMKKwkubG9uZwl2Nl91c2VyX2ZucworCS5sb25nCXY3X2NhY2hlX2ZucworCS5zaXplCV9fdjdfcHJvY19pbmZvLCAuIC0gX192N19wcm9jX2luZm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3RsYi12Ny5TIGIvYXJjaC9hcm0vbW0vdGxiLXY3LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU2ZGRhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3RsYi12Ny5TCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vdGxiLXY3LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgUnVzc2VsbCBLaW5nCisgKiAgTW9kaWZpZWQgZm9yIEFSTXY3IGJ5IENhdGFsaW4gTWFyaW5hcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEFSTSBhcmNoaXRlY3R1cmUgdmVyc2lvbiA2IFRMQiBoYW5kbGluZyBmdW5jdGlvbnMuCisgKiAgVGhlc2UgYXNzdW1lIGEgc3BsaXQgSS9EIFRMQi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKy8qCisgKgl2N3diaV9mbHVzaF91c2VyX3RsYl9yYW5nZShzdGFydCwgZW5kLCB2bWEpCisgKgorICoJSW52YWxpZGF0ZSBhIHJhbmdlIG9mIFRMQiBlbnRyaWVzIGluIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBzcGFjZS4KKyAqCisgKgktIHN0YXJ0IC0gc3RhcnQgYWRkcmVzcyAobWF5IG5vdCBiZSBhbGlnbmVkKQorICoJLSBlbmQgICAtIGVuZCBhZGRyZXNzIChleGNsdXNpdmUsIG1heSBub3QgYmUgYWxpZ25lZCkKKyAqCS0gdm1hICAgLSB2bWFfc3RydWN0IGRlc2NyaWJpbmcgYWRkcmVzcyByYW5nZQorICoKKyAqCUl0IGlzIGFzc3VtZWQgdGhhdDoKKyAqCS0gdGhlICJJbnZhbGlkYXRlIHNpbmdsZSBlbnRyeSIgaW5zdHJ1Y3Rpb24gd2lsbCBpbnZhbGlkYXRlCisgKgkgIGJvdGggdGhlIEkgYW5kIHRoZSBEIFRMQnMgb24gSGFydmFyZC1zdHlsZSBUTEJzCisgKi8KK0VOVFJZKHY3d2JpX2ZsdXNoX3VzZXJfdGxiX3JhbmdlKQorCXZtYV92bV9tbSByMywgcjIJCQlAIGdldCB2bWEtPnZtX21tCisJbW1pZAlyMywgcjMJCQkJQCBnZXQgdm1fbW0tPmNvbnRleHQuaWQKKwlkc2IKKwltb3YJcjAsIHIwLCBsc3IgI1BBR0VfU0hJRlQJCUAgYWxpZ24gYWRkcmVzcworCW1vdglyMSwgcjEsIGxzciAjUEFHRV9TSElGVAorCWFzaWQJcjMsIHIzCQkJCUAgbWFzayBBU0lECisJb3JyCXIwLCByMywgcjAsIGxzbCAjUEFHRV9TSElGVAlAIENyZWF0ZSBpbml0aWFsIE1WQQorCW1vdglyMSwgcjEsIGxzbCAjUEFHRV9TSElGVAorCXZtYV92bV9mbGFncyByMiwgcjIJCQlAIGdldCB2bWEtPnZtX2ZsYWdzCisxOgorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzYsIDEJCUAgVExCIGludmFsaWRhdGUgRCBNVkEgKHdhcyAxKQorCXRzdAlyMiwgI1ZNX0VYRUMJCQlAIEV4ZWN1dGFibGUgYXJlYSA/CisJbWNybmUJcDE1LCAwLCByMCwgYzgsIGM1LCAxCQlAIFRMQiBpbnZhbGlkYXRlIEkgTVZBICh3YXMgMSkKKwlhZGQJcjAsIHIwLCAjUEFHRV9TWgorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgNgkJQCBmbHVzaCBCVEFDL0JUQgorCWRzYgorCW1vdglwYywgbHIKKworLyoKKyAqCXY3d2JpX2ZsdXNoX2tlcm5fdGxiX3JhbmdlKHN0YXJ0LGVuZCkKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2Yga2VybmVsIFRMQiBlbnRyaWVzCisgKgorICoJLSBzdGFydCAtIHN0YXJ0IGFkZHJlc3MgKG1heSBub3QgYmUgYWxpZ25lZCkKKyAqCS0gZW5kICAgLSBlbmQgYWRkcmVzcyAoZXhjbHVzaXZlLCBtYXkgbm90IGJlIGFsaWduZWQpCisgKi8KK0VOVFJZKHY3d2JpX2ZsdXNoX2tlcm5fdGxiX3JhbmdlKQorCWRzYgorCW1vdglyMCwgcjAsIGxzciAjUEFHRV9TSElGVAkJQCBhbGlnbiBhZGRyZXNzCisJbW92CXIxLCByMSwgbHNyICNQQUdFX1NISUZUCisJbW92CXIwLCByMCwgbHNsICNQQUdFX1NISUZUCisJbW92CXIxLCByMSwgbHNsICNQQUdFX1NISUZUCisxOgorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzYsIDEJCUAgVExCIGludmFsaWRhdGUgRCBNVkEKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM1LCAxCQlAIFRMQiBpbnZhbGlkYXRlIEkgTVZBCisJYWRkCXIwLCByMCwgI1BBR0VfU1oKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXIyLCAjMAorCW1jcglwMTUsIDAsIHIyLCBjNywgYzUsIDYJCUAgZmx1c2ggQlRBQy9CVEIKKwlkc2IKKwlpc2IKKwltb3YJcGMsIGxyCisKKwkuc2VjdGlvbiAiLnRleHQuaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgorCisJLnR5cGUJdjd3YmlfdGxiX2ZucywgI29iamVjdAorRU5UUlkodjd3YmlfdGxiX2ZucykKKwkubG9uZwl2N3diaV9mbHVzaF91c2VyX3RsYl9yYW5nZQorCS5sb25nCXY3d2JpX2ZsdXNoX2tlcm5fdGxiX3JhbmdlCisJLmxvbmcJdjZ3YmlfdGxiX2ZsYWdzCisJLnNpemUJdjd3YmlfdGxiX2ZucywgLiAtIHY3d2JpX3RsYl9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL3NvZnRmbG9hdC5oIGIvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LmgKaW5kZXggMGEzMDY3NC4uMjYwZmUyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LmgKKysrIGIvYXJjaC9hcm0vbndmcGUvc29mdGZsb2F0LmgKQEAgLTI3Myw0ICsyNzMsNyBAQAogZXh0ZXJuIGZsYWcgZmxvYXQzMl9pc19uYW4oIGZsb2F0MzIgYSApOwogZXh0ZXJuIGZsYWcgZmxvYXQ2NF9pc19uYW4oIGZsb2F0NjQgYSApOwogCitleHRlcm4gaW50MzIgZmxvYXQ2NF90b191aW50MzIoIHN0cnVjdCByb3VuZGluZ0RhdGEgKnJvdW5kRGF0YSwgZmxvYXQ2NCBhICk7CitleHRlcm4gaW50MzIgZmxvYXQ2NF90b191aW50MzJfcm91bmRfdG9femVybyggZmxvYXQ2NCBhICk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfbXBjb3JlLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuYwppbmRleCA4OTg1MDA3Li43NzkxZGE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuYwpAQCAtMjU3LDggKzI1NywxMyBAQAogICovCiBzdGF0aWMgdm9pZCBlbV9yb3V0ZV9pcnEoaW50IGlycSwgdW5zaWduZWQgaW50IGNwdSkKIHsKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoY3B1KTsKLQlpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eShpcnEsIGNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWNwdW1hc2tfdCBtYXNrID0gY3B1bWFza19vZl9jcHUoY3B1KTsKKworCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOworCWRlc2MtPmFmZmluaXR5ID0gbWFzazsKKwlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOwogfQogCiBzdGF0aWMgaW50IGVtX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCmluZGV4IGUyNzQ0YjcuLjJiNWFhMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CkBAIC04NSwxMCArODYsMTAgQEAKIAogLyoKICAqIFNpbXBseSB3cml0ZSB0aGUgYWRkcmVzcyByZWdpc3RlciBhbmQgcmVhZCB0aGUgY29uZmlndXJhdGlvbgotICogZGF0YS4gIE5vdGUgdGhhdCB0aGUgNCBub3AncyBlbnN1cmUgdGhhdCB3ZSBhcmUgYWJsZSB0byBoYW5kbGUKKyAqIGRhdGEuICBOb3RlIHRoYXQgdGhlIDQgbm9wcyBlbnN1cmUgdGhhdCB3ZSBhcmUgYWJsZSB0byBoYW5kbGUKICAqIGEgZGVsYXllZCBhYm9ydCAoaW4gdGhlb3J5LikKICAqLwotc3RhdGljIGlubGluZSB1MzIgaW9wM3h4X3JlYWQodW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHUzMiBpb3AzeHhfcmVhZCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJdTMyIHZhbDsKIApAQCAtMzIxLDcgKzMyMiw3IEBACiAvKiBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBBVFUgaXMgaW5pdGlhbGl6ZWQgYW5kIHRoZSBQQ0kgYnVzIHNjYW5uZWQgKi8KIGludCBpbml0X2F0dTsKIAotdm9pZCBpb3AzeHhfcGNpX3ByZWluaXQodm9pZCkKK3ZvaWQgX19pbml0IGlvcDN4eF9wY2lfcHJlaW5pdCh2b2lkKQogewogCWlmIChpb3AzeHhfZ2V0X2luaXRfYXR1KCkgPT0gSU9QM1hYX0lOSVRfQVRVX0VOQUJMRSkgewogCQlpb3AzeHhfYXR1X2Rpc2FibGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYwppbmRleCAwY2MyNmRhLi4xMDBkNTdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jCkBAIC03NSw3ICs3NSw3IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpb3BfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJJT1AgVGltZXIgVGljayIsCiAJLmhhbmRsZXIJPSBpb3BfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiB9OwogCiB2b2lkIF9faW5pdCBpb3BfaW5pdF90aW1lKHVuc2lnbmVkIGxvbmcgdGlja19yYXRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwppbmRleCA5ZThkMjFlLi5jZmM2OWYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwpAQCAtMjAsNiArMjAsMTEgQEAKIAogY29tbWVudCAiT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMiCiAKK2NvbmZpZyBPTUFQX0RFQlVHX0xFRFMKKwlib29sCisJaGVscAorCSAgRm9yIGRlYnVnIGNhcmQgbGVkcyBvbiBUSSByZWZlcmVuY2UgYm9hcmRzLgorCiBjb25maWcgT01BUF9SRVNFVF9DTE9DS1MKIAlib29sICJSZXNldCB1bnVzZWQgY2xvY2tzIGR1cmluZyBib290IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQCkBAIC01OCw2ICs2MywxNCBAQAogCSAgdG8gY2hhbmdlIHRoZSBwaW4gbXVsdGlwbGV4aW5nIHNldHVwLiAgV2hlbiB0aGVyZSBhcmUgbm8gd2FybmluZ3MKIAkgIHByaW50ZWQsIGl0J3Mgc2FmZSB0byBkZXNlbGVjdCBPTUFQX01VWCBmb3IgeW91ciBwcm9kdWN0LgogCitjb25maWcgT01BUF9NQ0JTUAorCWJvb2wgIk1jQlNQIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBPTUFQIE11bHRpY2hhbm5lbAorCSAgQnVmZmVyZWQgU2VyaWFsIFBvcnQuCisKIGNob2ljZQogICAgICAgICBwcm9tcHQgIlN5c3RlbSB0aW1lciIKIAlkZWZhdWx0IE9NQVBfTVBVX1RJTUVSCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKaW5kZXggMjg5NmI0NS4uNDFhM2MxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQpAQCAtMyw3ICszLDggQEAKICMKIAogIyBDb21tb24gc3VwcG9ydAotb2JqLXkgOj0gY29tbW9uLm8gc3JhbS5vIHNyYW0tZm4ubyBjbG9jay5vIGRldmljZXMubyBkbWEubyBtdXgubyBncGlvLm8gbWNic3AubyB1c2IubyBmYi5vCitvYmoteSA6PSBjb21tb24ubyBzcmFtLm8gc3JhbS1mbi5vIGNsb2NrLm8gZGV2aWNlcy5vIGRtYS5vIG11eC5vIGdwaW8ubyBcCisJIHVzYi5vIGZiLm8KIG9iai1tIDo9CiBvYmotbiA6PQogb2JqLSAgOj0KQEAgLTE2LDQgKzE3LDQgQEAKIAogb2JqLSQoQ09ORklHX0NQVV9GUkVRKSArPSBjcHUtb21hcC5vCiBvYmotJChDT05GSUdfT01BUF9ETV9USU1FUikgKz0gZG10aW1lci5vCi0KK29iai0kKENPTkZJR19PTUFQX0RFQlVHX0xFRFMpICs9IGRlYnVnLWxlZHMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwppbmRleCBmMTE3OWFkLi4wYTYwMzI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwpAQCAtMzMsNiArMzMsNDEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGtfZnVuY3Rpb25zICphcmNoX2Nsb2NrOwogCisjaWZkZWYgQ09ORklHX1BNX0RFQlVHCisKK3N0YXRpYyB2b2lkIHByaW50X3BhcmVudHMoc3RydWN0IGNsayAqY2xrKQoreworCXN0cnVjdCBjbGsgKnA7CisJaW50IHByaW50ZWQgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7CisJCWlmIChwLT5wYXJlbnQgPT0gY2xrICYmIHAtPnVzZWNvdW50KSB7CisJCQlpZiAoIWNsay0+dXNlY291bnQgJiYgIXByaW50ZWQpIHsKKwkJCQlwcmludGsoIk1JU01BVENIOiAlc1xuIiwgY2xrLT5uYW1lKTsKKwkJCQlwcmludGVkID0gMTsKKwkJCX0KKwkJCXByaW50aygiXHQlLTE1c1xuIiwgcC0+bmFtZSk7CisJCX0KKwl9Cit9CisKK3ZvaWQgY2xrX3ByaW50X3VzZWNvdW50cyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNsayAqcDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKHAtPnVzZWNvdW50KQorCQkJcHJpbnRrKCIlLTE1czogJWRcbiIsIHAtPm5hbWUsIHAtPnVzZWNvdW50KTsKKwkJcHJpbnRfcGFyZW50cyhwKTsKKworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKK30KKworI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogU3RhbmRhcmQgY2xvY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9jbGsuaAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTI0OSw2ICsyODQsOCBAQAogCQlyZXR1cm47CiAKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZTsKKwlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CiB9CiAKIC8qIFByb3BhZ2F0ZSByYXRlIHRvIGNoaWxkcmVuICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKaW5kZXggZmVjZDNkNi4uNzk4N2FhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtNzMsNyArNzMsNyBAQAogCX0KIAlpZiAoaW5mbyAhPSBOVUxMKSB7CiAJCS8qIENoZWNrIHRoZSBsZW5ndGggYXMgYSBsYW1lIGF0dGVtcHQgdG8gY2hlY2sgZm9yCi0JCSAqIGJpbmFyeSBpbmNvbnNpc3RhbmN5LiAqLworCQkgKiBiaW5hcnkgaW5jb25zaXN0ZW5jeS4gKi8KIAkJaWYgKGxlbiAhPSBOT19MRU5HVEhfQ0hFQ0spIHsKIAkJCS8qIFdvcmQtYWxpZ24gbGVuICovCiAJCQlpZiAobGVuICYgMHgwMykKQEAgLTkzLDggKzkzLDEyIEBACiAJICogaW4gdGhlIGtlcm5lbC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgb21hcF9ib2FyZF9jb25maWdfc2l6ZTsgaSsrKSB7CiAJCWlmIChvbWFwX2JvYXJkX2NvbmZpZ1tpXS50YWcgPT0gdGFnKSB7Ci0JCQlraW5mbyA9ICZvbWFwX2JvYXJkX2NvbmZpZ1tpXTsKLQkJCWJyZWFrOworCQkJaWYgKHNraXAgPT0gMCkgeworCQkJCWtpbmZvID0gJm9tYXBfYm9hcmRfY29uZmlnW2ldOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlza2lwLS07CisJCQl9CiAJCX0KIAl9CiAJaWYgKGtpbmZvID09IE5VTEwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGVidWctbGVkcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWxlZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTI4YTgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWxlZHMuYwpAQCAtMCwwICsxLDMxNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1sZWRzLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwMyBieSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKKworLyogTWFueSBPTUFQIGRldmVsb3BtZW50IHBsYXRmb3JtcyByZXVzZSB0aGUgc2FtZSAiZGVidWcgYm9hcmQiOyB0aGVzZQorICogcGxhdGZvcm1zIGluY2x1ZGUgSDIsIEgzLCBINCwgYW5kIFBlcnNldXMyLiAgVGhlcmUgYXJlIDE2IExFRHMgb24gdGhlCisgKiBkZWJ1ZyBib2FyZCAoYWxsIGdyZWVuKSwgYWNjZXNzZWQgdGhyb3VnaCBGUEdBIHJlZ2lzdGVycy4KKyAqCisgKiBUaGUgInN1cmZlciIgZXhwYW5zaW9uIGJvYXJkIGFuZCBIMiBzYW1wbGUgYm9hcmQgYWxzbyBoYXZlIHR3by1jb2xvcgorICogZ3JlZW4rcmVkIExFRHMgKGluIHBhcmFsbGVsKSwgdXNlZCBoZXJlIGZvciB0aW1lciBhbmQgaWRsZSBpbmRpY2F0b3JzCisgKiBpbiBwcmVmZXJlbmNlIHRvIHRoZSBvbmVzIG9uIHRoZSBkZWJ1ZyBib2FyZCwgZm9yIGEgIkRpc2NvIExFRCIgZWZmZWN0LgorICoKKyAqIFRoaXMgZHJpdmVyIGV4cG9ydHMgZWl0aGVyIHRoZSBvcmlnaW5hbCBBUk0gTEVEIEFQSSwgdGhlIG5ldyBnZW5lcmljCisgKiBvbmUsIG9yIGJvdGguCisgKi8KKworc3RhdGljIHNwaW5sb2NrX3QJCQlsb2NrOworc3RhdGljIHN0cnVjdCBoMnAyX2RiZ19mcGdhIF9faW9tZW0JKmZwZ2E7CitzdGF0aWMgdTE2CQkJCWxlZF9zdGF0ZSwgaHdfbGVkX3N0YXRlOworCisKKyNpZmRlZglDT05GSUdfTEVEU19PTUFQX0RFQlVHCisjZGVmaW5lIG5ld19sZWRfYXBpKCkJMQorI2Vsc2UKKyNkZWZpbmUgbmV3X2xlZF9hcGkoKQkwCisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBvcmlnaW5hbCBBUk0gZGVidWcgTEVEIEFQSToKKyAqICAtIHRpbWVyIGFuZCBpZGxlIGxlZHMgKHNvbWUgYm9hcmRzIHVzZSBub24tRlBHQSBsZWRzIGhlcmUpOworICogIC0gdXAgdG8gNCBnZW5lcmljIGxlZHMsIGVhc2lseSBhY2Nlc3NlZCBpbi1rZXJuZWwgKGFueSBjb250ZXh0KQorICovCisKKyNkZWZpbmUgR1BJT19MRURfUkVECQkzCisjZGVmaW5lIEdQSU9fTEVEX0dSRUVOCQlPTUFQX01QVUlPKDQpCisKKyNkZWZpbmUgTEVEX1NUQVRFX0VOQUJMRUQJMHgwMQorI2RlZmluZSBMRURfU1RBVEVfQ0xBSU1FRAkweDAyCisjZGVmaW5lIExFRF9USU1FUl9PTgkJMHgwNAorCisjZGVmaW5lIEdQSU9fSURMRQkJR1BJT19MRURfR1JFRU4KKyNkZWZpbmUgR1BJT19USU1FUgkJR1BJT19MRURfUkVECisKK3N0YXRpYyB2b2lkIGgycDJfZGJnX2xlZHNfZXZlbnQobGVkX2V2ZW50X3QgZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jaywgZmxhZ3MpOworCisJaWYgKCEobGVkX3N0YXRlICYgTEVEX1NUQVRFX0VOQUJMRUQpICYmIGV2dCAhPSBsZWRfc3RhcnQpCisJCWdvdG8gZG9uZTsKKworCXN3aXRjaCAoZXZ0KSB7CisJY2FzZSBsZWRfc3RhcnQ6CisJCWlmIChmcGdhKQorCQkJbGVkX3N0YXRlIHw9IExFRF9TVEFURV9FTkFCTEVEOworCQlicmVhazsKKworCWNhc2UgbGVkX3N0b3A6CisJY2FzZSBsZWRfaGFsdGVkOgorCQkvKiBhbGwgbGVkcyBvZmYgZHVyaW5nIHN1c3BlbmQgb3Igc2h1dGRvd24gKi8KKworCQlpZiAoIShtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSB8fCBtYWNoaW5lX2lzX29tYXBfaDQoKSkpIHsKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX1RJTUVSLCAwKTsKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDApOworCQl9CisKKwkJX19yYXdfd3JpdGV3KH4wLCAmZnBnYS0+bGVkcyk7CisJCWxlZF9zdGF0ZSAmPSB+TEVEX1NUQVRFX0VOQUJMRUQ7CisJCWdvdG8gZG9uZTsKKworCWNhc2UgbGVkX2NsYWltOgorCQlsZWRfc3RhdGUgfD0gTEVEX1NUQVRFX0NMQUlNRUQ7CisJCWh3X2xlZF9zdGF0ZSA9IDA7CisJCWJyZWFrOworCisJY2FzZSBsZWRfcmVsZWFzZToKKwkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfQ0xBSU1FRDsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfTEVEU19USU1FUgorCWNhc2UgbGVkX3RpbWVyOgorCQlsZWRfc3RhdGUgXj0gTEVEX1RJTUVSX09OOworCisJCWlmIChtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSB8fCBtYWNoaW5lX2lzX29tYXBfaDQoKSkKKwkJCWh3X2xlZF9zdGF0ZSBePSBIMlAyX0RCR19GUEdBX1AyX0xFRF9USU1FUjsKKwkJZWxzZSB7CisJCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19USU1FUiwKKwkJCQkJbGVkX3N0YXRlICYgTEVEX1RJTUVSX09OKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTEVEU19DUFUKKwkvKiBMRUQgbGl0IGlmZiBidXN5ICovCisJY2FzZSBsZWRfaWRsZV9zdGFydDoKKwkJaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpIHx8IG1hY2hpbmVfaXNfb21hcF9oNCgpKQorCQkJaHdfbGVkX3N0YXRlICY9IH5IMlAyX0RCR19GUEdBX1AyX0xFRF9JRExFOworCQllbHNlIHsKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDEpOworCQkJZ290byBkb25lOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9pZGxlX2VuZDoKKwkJaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpIHx8IG1hY2hpbmVfaXNfb21hcF9oNCgpKQorCQkJaHdfbGVkX3N0YXRlIHw9IEgyUDJfREJHX0ZQR0FfUDJfTEVEX0lETEU7CisJCWVsc2UgeworCQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fSURMRSwgMCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlicmVhazsKKyNlbmRpZgorCisJY2FzZSBsZWRfZ3JlZW5fb246CisJCWh3X2xlZF9zdGF0ZSB8PSBIMlAyX0RCR19GUEdBX0xFRF9HUkVFTjsKKwkJYnJlYWs7CisJY2FzZSBsZWRfZ3JlZW5fb2ZmOgorCQlod19sZWRfc3RhdGUgJj0gfkgyUDJfREJHX0ZQR0FfTEVEX0dSRUVOOworCQlicmVhazsKKworCWNhc2UgbGVkX2FtYmVyX29uOgorCQlod19sZWRfc3RhdGUgfD0gSDJQMl9EQkdfRlBHQV9MRURfQU1CRVI7CisJCWJyZWFrOworCWNhc2UgbGVkX2FtYmVyX29mZjoKKwkJaHdfbGVkX3N0YXRlICY9IH5IMlAyX0RCR19GUEdBX0xFRF9BTUJFUjsKKwkJYnJlYWs7CisKKwljYXNlIGxlZF9yZWRfb246CisJCWh3X2xlZF9zdGF0ZSB8PSBIMlAyX0RCR19GUEdBX0xFRF9SRUQ7CisJCWJyZWFrOworCWNhc2UgbGVkX3JlZF9vZmY6CisJCWh3X2xlZF9zdGF0ZSAmPSB+SDJQMl9EQkdfRlBHQV9MRURfUkVEOworCQlicmVhazsKKworCWNhc2UgbGVkX2JsdWVfb246CisJCWh3X2xlZF9zdGF0ZSB8PSBIMlAyX0RCR19GUEdBX0xFRF9CTFVFOworCQlicmVhazsKKwljYXNlIGxlZF9ibHVlX29mZjoKKwkJaHdfbGVkX3N0YXRlICY9IH5IMlAyX0RCR19GUEdBX0xFRF9CTFVFOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCisJLyoKKwkgKiAgQWN0dWFsbHkgYnVybiB0aGUgTEVEcworCSAqLworCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfRU5BQkxFRCkKKwkJX19yYXdfd3JpdGV3KH5od19sZWRfc3RhdGUsICZmcGdhLT5sZWRzKTsKKworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrLCBmbGFncyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qICJuZXciIExFRCBBUEkKKyAqICAtIHdpdGggc3lmcyBhY2Nlc3MgYW5kIGdlbmVyaWMgdHJpZ2dlcmluZworICogIC0gbm90IHJlYWRpbHkgYWNjZXNzaWJsZSB0byBpbi1rZXJuZWwgZHJpdmVycworICovCisKK3N0cnVjdCBkYmdfbGVkIHsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2CWNkZXY7CisJdTE2CQkJbWFzazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGJnX2xlZCBkYmdfbGVkc1tdID0geworCS8qIFJFVklTSVQgYXQgbGVhc3QgSDIgdXNlcyBkaWZmZXJlbnQgdGltZXIgJiBjcHUgbGVkcy4uLiAqLworI2lmbmRlZiBDT05GSUdfTEVEU19USU1FUgorCXsgLm1hc2sgPSAxIDw8IDAsICAuY2Rldi5uYW1lID0gICJkNDpncmVlbiIsCisJCS5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9ICJoZWFydGJlYXQiLCB9LAorI2VuZGlmCisjaWZuZGVmIENPTkZJR19MRURTX0NQVQorCXsgLm1hc2sgPSAxIDw8IDEsICAuY2Rldi5uYW1lID0gICJkNTpncmVlbiIsIH0sCQkvKiAhaWRsZSAqLworI2VuZGlmCisJeyAubWFzayA9IDEgPDwgMiwgIC5jZGV2Lm5hbWUgPSAgImQ2OmdyZWVuIiwgfSwKKwl7IC5tYXNrID0gMSA8PCAzLCAgLmNkZXYubmFtZSA9ICAiZDc6Z3JlZW4iLCB9LAorCisJeyAubWFzayA9IDEgPDwgNCwgIC5jZGV2Lm5hbWUgPSAgImQ4OmdyZWVuIiwgfSwKKwl7IC5tYXNrID0gMSA8PCA1LCAgLmNkZXYubmFtZSA9ICAiZDk6Z3JlZW4iLCB9LAorCXsgLm1hc2sgPSAxIDw8IDYsICAuY2Rldi5uYW1lID0gImQxMDpncmVlbiIsIH0sCisJeyAubWFzayA9IDEgPDwgNywgIC5jZGV2Lm5hbWUgPSAiZDExOmdyZWVuIiwgfSwKKworCXsgLm1hc2sgPSAxIDw8IDgsICAuY2Rldi5uYW1lID0gImQxMjpncmVlbiIsIH0sCisJeyAubWFzayA9IDEgPDwgOSwgIC5jZGV2Lm5hbWUgPSAiZDEzOmdyZWVuIiwgfSwKKwl7IC5tYXNrID0gMSA8PCAxMCwgLmNkZXYubmFtZSA9ICJkMTQ6Z3JlZW4iLCB9LAorCXsgLm1hc2sgPSAxIDw8IDExLCAuY2Rldi5uYW1lID0gImQxNTpncmVlbiIsIH0sCisKKyNpZm5kZWYJQ09ORklHX0xFRFMKKwl7IC5tYXNrID0gMSA8PCAxMiwgLmNkZXYubmFtZSA9ICJkMTY6Z3JlZW4iLCB9LAorCXsgLm1hc2sgPSAxIDw8IDEzLCAuY2Rldi5uYW1lID0gImQxNzpncmVlbiIsIH0sCisJeyAubWFzayA9IDEgPDwgMTQsIC5jZGV2Lm5hbWUgPSAiZDE4OmdyZWVuIiwgfSwKKwl7IC5tYXNrID0gMSA8PCAxNSwgLmNkZXYubmFtZSA9ICJkMTk6Z3JlZW4iLCB9LAorI2VuZGlmCit9OworCitzdGF0aWMgdm9pZAorZnBnYV9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYsIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCit7CisJc3RydWN0IGRiZ19sZWQJKmxlZCA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgZGJnX2xlZCwgY2Rldik7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrLCBmbGFncyk7CisJaWYgKHZhbHVlID09IExFRF9PRkYpCisJCWh3X2xlZF9zdGF0ZSAmPSB+bGVkLT5tYXNrOworCWVsc2UKKwkJaHdfbGVkX3N0YXRlIHw9IGxlZC0+bWFzazsKKwlfX3Jhd193cml0ZXcofmh3X2xlZF9zdGF0ZSwgJmZwZ2EtPmxlZHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG5ld2xlZF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZAlpOworCXN0cnVjdCBkYmdfbGVkCSpsZWQ7CisJaW50CQlzdGF0dXM7CisKKwlmb3IgKGkgPSAwLCBsZWQgPSBkYmdfbGVkczsgaSA8IEFSUkFZX1NJWkUoZGJnX2xlZHMpOyBpKyssIGxlZCsrKSB7CisJCWxlZC0+Y2Rldi5icmlnaHRuZXNzX3NldCA9IGZwZ2FfbGVkX3NldDsKKwkJc3RhdHVzID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKGRldiwgJmxlZC0+Y2Rldik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IC8qIF9faW5pdCAqLyBmcGdhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlCSppb21lbTsKKworCXNwaW5fbG9ja19pbml0KCZsb2NrKTsKKworCWlvbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIWlvbWVtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZwZ2EgPSBpb3JlbWFwKGlvbWVtLT5zdGFydCwgSDJQMl9EQkdfRlBHQV9TSVpFKTsKKwlfX3Jhd193cml0ZXcofjAsICZmcGdhLT5sZWRzKTsKKworI2lmZGVmCUNPTkZJR19MRURTCisJbGVkc19ldmVudCA9IGgycDJfZGJnX2xlZHNfZXZlbnQ7CisJbGVkc19ldmVudChsZWRfc3RhcnQpOworI2VuZGlmCisKKwlpZiAobmV3X2xlZF9hcGkoKSkgeworCQluZXdsZWRfaW5pdCgmcGRldi0+ZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmcGdhX3N1c3BlbmRfbGF0ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlfX3Jhd193cml0ZXcofjAsICZmcGdhLT5sZWRzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmcGdhX3Jlc3VtZV9lYXJseShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCV9fcmF3X3dyaXRldyh+aHdfbGVkX3N0YXRlLCAmZnBnYS0+bGVkcyk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbGVkX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUJPSAib21hcF9kYmdfbGVkIiwKKwkucHJvYmUJCT0gZnBnYV9wcm9iZSwKKwkuc3VzcGVuZF9sYXRlCT0gZnBnYV9zdXNwZW5kX2xhdGUsCisJLnJlc3VtZV9lYXJseQk9IGZwZ2FfcmVzdW1lX2Vhcmx5LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZnBnYV9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfb21hcF9oNCgpCisJCQl8fCBtYWNoaW5lX2lzX29tYXBfaDMoKQorCQkJfHwgbWFjaGluZV9pc19vbWFwX2gyKCkKKwkJCXx8IG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpCisJCQkpCisJCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmxlZF9kcml2ZXIpOworCXJldHVybiAwOworfQorZnNfaW5pdGNhbGwoZnBnYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCmluZGV4IGVlYjMzZmUuLmM1ZGFiMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwpAQCAtMjUsNyArMjUsNzEgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbWVuZWxhdXMuaD4KIAotI2lmIAlkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQorI2lmCWRlZmluZWQoQ09ORklHX09NQVBfRFNQKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0RTUF9NT0RVTEUpCisKKyNpbmNsdWRlICIuLi9wbGF0LW9tYXAvZHNwL2RzcF9jb21tb24uaCIKKworc3RhdGljIHN0cnVjdCBkc3BfcGxhdGZvcm1fZGF0YSBkc3BfcGRhdGEgPSB7CisJLmtkZXZfbGlzdCA9IExJU1RfSEVBRF9JTklUKGRzcF9wZGF0YS5rZGV2X2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwX2RzcF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gImRzcF9tbXUiLAorCQkuc3RhcnQJPSAtMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfZHNwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZHNwIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9tYXBfZHNwX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb21hcF9kc3BfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmRzcF9wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9kc3Aodm9pZCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlpcnEgPSBJTlRfMTUxMF9EU1BfTU1VOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlpcnEgPSBJTlRfMTYxMF9EU1BfTU1VOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlpcnEgPSBJTlRfMjRYWF9EU1BfTU1VOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZSgmb21hcF9kc3BfZGV2aWNlLAorCQkJCQkgICBJT1JFU09VUkNFX0lSUSwgImRzcF9tbXUiKTsKKwlyZXMtPnN0YXJ0ID0gaXJxOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX2RzcF9kZXZpY2UpOworfQorCitpbnQgZHNwX2tmdW5jX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZHNwX2tmdW5jX2RldmljZSAqa2RldikKK3sKKwlzdGF0aWMgREVGSU5FX01VVEVYKGRzcF9wZGF0YV9sb2NrKTsKKworCW11dGV4X2luaXQoJmtkZXYtPmxvY2spOworCisJbXV0ZXhfbG9jaygmZHNwX3BkYXRhX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmtkZXYtPmVudHJ5LCAmZHNwX3BkYXRhLmtkZXZfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkc3BfcGRhdGFfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHNwX2tmdW5jX2RldmljZV9yZWdpc3Rlcik7CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2RzcCh2b2lkKSB7IH0KKyNlbmRpZgkvKiBDT05GSUdfT01BUF9EU1AgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZglkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQogCiAjZGVmaW5lCU9NQVAxX0kyQ19CQVNFCQkweGZmZmIzODAwCiAjZGVmaW5lIE9NQVAyX0kyQ19CQVNFMQkJMHg0ODA3MDAwMApAQCAtNDgsOCArMTEyLDggQEAKIC8qIERNQSBub3QgdXNlZDsgd29ya3MgYXJvdW5kIGVycmF0dW0gd3JpdGluZyB0byBub24tZW1wdHkgaTJjIGZpZm8gKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9pMmNfZGV2aWNlMSA9IHsKLSAgICAgICAgLm5hbWUgICAgICAgICAgID0gImkyY19vbWFwIiwKLSAgICAgICAgLmlkICAgICAgICAgICAgID0gMSwKKwkubmFtZSAgICAgICAgICAgPSAiaTJjX29tYXAiLAorCS5pZCAgICAgICAgICAgICA9IDEsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGkyY19yZXNvdXJjZXMxKSwKIAkucmVzb3VyY2UJPSBpMmNfcmVzb3VyY2VzMSwKIH07CkBAIC0zNzYsNyArNDQwLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2lmCWRlZmluZWQoQ09ORklHX09NQVBfUk5HKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX1JOR19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfSFdfUkFORE9NX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0hXX1JBTkRPTV9PTUFQX01PRFVMRSkKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCiAjZGVmaW5lCU9NQVBfUk5HX0JBU0UJCTB4NDgwQTAwMDAKQEAgLTQzNiw2ICs1MDAsNyBAQAogCS8qIHBsZWFzZSBrZWVwIHRoZXNlIGNhbGxzLCBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFib3ZlLAogCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCiAJICovCisJb21hcF9pbml0X2RzcCgpOwogCW9tYXBfaW5pdF9pMmMoKTsKIAlvbWFwX2luaXRfa3AoKTsKIAlvbWFwX2luaXRfbW1jKCk7CkBAIC00NDYsNCArNTExLDMgQEAKIAlyZXR1cm4gMDsKIH0KIGFyY2hfaW5pdGNhbGwob21hcF9pbml0X2RldmljZXMpOwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggZjNmODRmYi4uODhkNWI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtNzQ3LDcgKzc0Nyw3IEBACiAgKi8KIGRtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX3NyY19wb3MoaW50IGxjaCkKIHsKLQlkbWFfYWRkcl90IG9mZnNldDsKKwlkbWFfYWRkcl90IG9mZnNldCA9IDA7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCiAJCW9mZnNldCA9IChkbWFfYWRkcl90KSAoT01BUDFfRE1BX0NTU0FfTF9SRUcobGNoKSB8CkBAIC03NjksNyArNzY5LDcgQEAKICAqLwogZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKQogewotCWRtYV9hZGRyX3Qgb2Zmc2V0OworCWRtYV9hZGRyX3Qgb2Zmc2V0ID0gMDsKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKIAkJb2Zmc2V0ID0gKGRtYV9hZGRyX3QpIChPTUFQMV9ETUFfQ0RTQV9MX1JFRyhsY2gpIHwKQEAgLTkyNSwxMCArOTI1LDE3IEBACiB7CiAJdTMyIHN0YXR1cyA9IE9NQVBfRE1BX0NTUl9SRUcoY2gpOwogCi0JaWYgKCFzdGF0dXMpCisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIERNQSBJUlEgZm9yIGxjaCAlZFxuIiwgY2gpOwogCQlyZXR1cm4gMDsKLQlpZiAodW5saWtlbHkoZG1hX2NoYW5bY2hdLmRldl9pZCA9PSAtMSkpCisJfQorCWlmICh1bmxpa2VseShkbWFfY2hhbltjaF0uZGV2X2lkID09IC0xKSkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSVJRICUwNHggZm9yIG5vbi1hbGxvY2F0ZWQgRE1BIgorCQkJCQkiY2hhbm5lbCAlZFxuIiwgc3RhdHVzLCBjaCk7CiAJCXJldHVybiAwOworCX0KIAlpZiAodW5saWtlbHkoc3RhdHVzICYgT01BUF9ETUFfRFJPUF9JUlEpKQogCQlwcmludGsoS0VSTl9JTkZPCiAJCSAgICAgICAiRE1BIHN5bmNocm9uaXphdGlvbiBldmVudCBkcm9wIG9jY3VycmVkIHdpdGggZGV2aWNlICIKQEAgLTk1OSwxMSArOTY2LDE1IEBACiAJaW50IGk7CiAKIAl2YWwgPSBvbWFwX3JlYWRsKE9NQVBfRE1BNF9JUlFTVEFUVVNfTDApOwotCi0JZm9yIChpID0gMTsgaSA8PSBPTUFQX0xPR0lDQUxfRE1BX0NIX0NPVU5UOyBpKyspIHsKLQkJaW50IGFjdGl2ZSA9IHZhbCAmICgxIDw8IChpIC0gMSkpOwotCQlpZiAoYWN0aXZlKQotCQkJb21hcDJfZG1hX2hhbmRsZV9jaChpIC0gMSk7CisJaWYgKHZhbCA9PSAwKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTcHVyaW91cyBETUEgSVJRXG4iKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVCAmJiB2YWwgIT0gMDsgaSsrKSB7CisJCWlmICh2YWwgJiAxKQorCQkJb21hcDJfZG1hX2hhbmRsZV9jaChpKTsKKwkJdmFsID4+PSAxOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTExNjEsNyArMTE3Miw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwotCQlyZXR1cm47CS8qIFN1cHJlc3Mgd2FybmluZyBhYm91dCB1bmluaXRpYWxpemVkIHZhcnMgKi8KKwkJcmV0dXJuOwkvKiBTdXBwcmVzcyB3YXJuaW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQgdmFycyAqLwogCX0KIAogCWlmIChvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKaW5kZXggNjU5NjE5Zi4uMzYwNzNkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCkBAIC0zNzIsNyArMzcyLDcgQEAKIAogCS8qIFdoZW4gdGhlIGZ1bmN0aW9uYWwgY2xvY2sgZGlzYXBwZWFycywgdG9vIHF1aWNrIHdyaXRlcyBzZWVtIHRvCiAJICogY2F1c2UgYW4gYWJvcnQuICovCi0JX19kZWxheSgxNTAwMCk7CisJX19kZWxheSgxNTAwMDApOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9mYi5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2ZiLmMKaW5kZXggNTZhY2I4Ny4uNDQ5M2JjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2ZiLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2ZiLmMKQEAgLTEsMyArMSwyNiBAQAorLyoKKyAqIEZpbGU6IGFyY2gvYXJtL3BsYXQtb21hcC9mYi5jCisgKgorICogRnJhbWVidWZmZXIgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmb3IgVEkgT01BUCBwbGF0Zm9ybXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xNiw2ICszOSw4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfRkJfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfRkJfT01BUF9NT0RVTEUpCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcGZiX3BsYXRmb3JtX2RhdGEgb21hcGZiX2NvbmZpZzsKK3N0YXRpYyBpbnQgY29uZmlnX2ludmFsaWQ7CitzdGF0aWMgaW50IGNvbmZpZ3VyZWRfcmVnaW9uczsKIAogc3RhdGljIHU2NCBvbWFwX2ZiX2RtYV9tYXNrID0gfih1MzIpMDsKIApAQCAtMzAsMzkgKzU1LDI3MCBAQAogCS5udW1fcmVzb3VyY2VzID0gMCwKIH07CiAKLS8qIGNhbGxlZCBmcm9tIG1hcF9pbyAqLwotdm9pZCBvbWFwZmJfcmVzZXJ2ZV9tZW0odm9pZCkKK3N0YXRpYyBpbmxpbmUgaW50IHJhbmdlc19vdmVybGFwKHVuc2lnbmVkIGxvbmcgc3RhcnQxLCB1bnNpZ25lZCBsb25nIHNpemUxLAorCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0MiwgdW5zaWduZWQgbG9uZyBzaXplMikKIHsKLQljb25zdCBzdHJ1Y3Qgb21hcF9mYm1lbV9jb25maWcgKmZibWVtX2NvbmY7CisJcmV0dXJuIChzdGFydDEgPj0gc3RhcnQyICYmIHN0YXJ0MSA8IHN0YXJ0MiArIHNpemUyKSB8fAorCSAgICAgICAoc3RhcnQyID49IHN0YXJ0MSAmJiBzdGFydDIgPCBzdGFydDEgKyBzaXplMSk7Cit9CiAKLQlvbWFwZmJfY29uZmlnLmZibWVtLmZiX3NyYW1fc3RhcnQgPSBvbWFwX2ZiX3NyYW1fc3RhcnQ7Ci0Jb21hcGZiX2NvbmZpZy5mYm1lbS5mYl9zcmFtX3NpemUgPSBvbWFwX2ZiX3NyYW1fc2l6ZTsKK3N0YXRpYyBpbmxpbmUgaW50IHJhbmdlX2luY2x1ZGVkKHVuc2lnbmVkIGxvbmcgc3RhcnQxLCB1bnNpZ25lZCBsb25nIHNpemUxLAorCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0MiwgdW5zaWduZWQgbG9uZyBzaXplMikKK3sKKwlyZXR1cm4gc3RhcnQxID49IHN0YXJ0MiAmJiBzdGFydDEgKyBzaXplMSA8PSBzdGFydDIgKyBzaXplMjsKK30KIAotCWZibWVtX2NvbmYgPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfRkJNRU0sIHN0cnVjdCBvbWFwX2ZibWVtX2NvbmZpZyk7CiAKLQlpZiAoZmJtZW1fY29uZiAhPSBOVUxMKSB7Ci0JCS8qIGluZGljYXRlIHRoYXQgdGhlIGJvb3Rsb2FkZXIgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUKLQkJICogZmIgZGV2aWNlLCBzbyB3ZSdsbCBza2lwIHRoYXQgcGFydCBpbiB0aGUgZmIgZHJpdmVyCi0JCSAqLwotCQlvbWFwZmJfY29uZmlnLmZibWVtLmZiX3NkcmFtX3N0YXJ0ID0gZmJtZW1fY29uZi0+ZmJfc2RyYW1fc3RhcnQ7Ci0JCW9tYXBmYl9jb25maWcuZmJtZW0uZmJfc2RyYW1fc2l6ZSA9IGZibWVtX2NvbmYtPmZiX3NkcmFtX3NpemU7Ci0JCWlmIChmYm1lbV9jb25mLT5mYl9zZHJhbV9zaXplKSB7Ci0JCQlwcl9pbmZvKCJSZXNlcnZpbmcgJXUgYnl0ZXMgU0RSQU0gZm9yIGZyYW1lIGJ1ZmZlclxuIiwKLQkJCQlmYm1lbV9jb25mLT5mYl9zZHJhbV9zaXplKTsKLQkJCXJlc2VydmVfYm9vdG1lbShmYm1lbV9jb25mLT5mYl9zZHJhbV9zdGFydCwKLQkJCQkJZmJtZW1fY29uZi0+ZmJfc2RyYW1fc2l6ZSk7Ci0JCX0KKy8qIENoZWNrIGlmIHRoZXJlIGlzIGFuIG92ZXJsYXBwaW5nIHJlZ2lvbi4gKi8KK3N0YXRpYyBpbnQgZmJtZW1fcmVnaW9uX3Jlc2VydmVkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBvbWFwZmJfbWVtX3JlZ2lvbiAqcmc7CisJaW50IGk7CisKKwlyZyA9ICZvbWFwZmJfY29uZmlnLm1lbV9kZXNjLnJlZ2lvblswXTsKKwlmb3IgKGkgPSAwOyBpIDwgT01BUEZCX1BMQU5FX05VTTsgaSsrLCByZysrKSB7CisJCWlmICghcmctPnBhZGRyKQorCQkJLyogRW1wdHkgc2xvdC4gKi8KKwkJCWNvbnRpbnVlOworCQlpZiAocmFuZ2VzX292ZXJsYXAoc3RhcnQsIHNpemUsIHJnLT5wYWRkciwgcmctPnNpemUpKQorCQkJcmV0dXJuIDE7CiAJfQorCXJldHVybiAwOworfQorCisvKgorICogR2V0IHRoZSByZWdpb25faWR4YHRoIHJlZ2lvbiBmcm9tIGJvYXJkIGNvbmZpZy9BVEFHIGFuZCBjb252ZXJ0IGl0IHRvCisgKiBvdXIgaW50ZXJuYWwgZm9ybWF0LgorICovCitzdGF0aWMgaW50IGdldF9mYm1lbV9yZWdpb24oaW50IHJlZ2lvbl9pZHgsIHN0cnVjdCBvbWFwZmJfbWVtX3JlZ2lvbiAqcmcpCit7CisJY29uc3Qgc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnCSpjb25mOworCXUzMgkJCQlwYWRkcjsKKworCWNvbmYgPSBvbWFwX2dldF9ucl9jb25maWcoT01BUF9UQUdfRkJNRU0sCisJCQkJICBzdHJ1Y3Qgb21hcF9mYm1lbV9jb25maWcsIHJlZ2lvbl9pZHgpOworCWlmIChjb25mID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJcGFkZHIgPSBjb25mLT5zdGFydDsKKwkvKgorCSAqIExvdyBiaXRzIGVuY29kZSB0aGUgcGFnZSBhbGxvY2F0aW9uIG1vZGUsIGlmIGhpZ2ggYml0cworCSAqIGFyZSB6ZXJvLiBPdGhlcndpc2Ugd2UgbmVlZCBhIHBhZ2UgYWxpZ25lZCBmaXhlZAorCSAqIGFkZHJlc3MuCisJICovCisJbWVtc2V0KHJnLCAwLCBzaXplb2YoKnJnKSk7CisJcmctPnR5cGUgPSBwYWRkciAmIH5QQUdFX01BU0s7CisJcmctPnBhZGRyID0gcGFkZHIgJiBQQUdFX01BU0s7CisJcmctPnNpemUgPSBQQUdFX0FMSUdOKGNvbmYtPnNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9mYm1lbV9yZWdpb25fdHlwZShzdHJ1Y3Qgb21hcGZiX21lbV9yZWdpb24gKnJnLCBpbnQgbWVtX3R5cGUsCisJCQkJICB1bnNpZ25lZCBsb25nIG1lbV9zdGFydCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbWVtX3NpemUpCit7CisJLyoKKwkgKiBDaGVjayBpZiB0aGUgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdGhlIHR5cGUgZXhwbGljaXRseS4KKwkgKiB0eXBlID0gMCAmJiBwYWRkciA9IDAsIGEgZGVmYXVsdCBkb24ndCBjYXJlIGNhc2UgbWFwcyB0bworCSAqIHRoZSBTRFJBTSB0eXBlLgorCSAqLworCWlmIChyZy0+dHlwZSB8fCAoIXJnLT50eXBlICYmICFyZy0+cGFkZHIpKQorCQlyZXR1cm4gMDsKKwlpZiAocmFuZ2VzX292ZXJsYXAocmctPnBhZGRyLCByZy0+c2l6ZSwgbWVtX3N0YXJ0LCBtZW1fc2l6ZSkpIHsKKwkJcmctPnR5cGUgPSBtZW1fdHlwZTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIENhbid0IGRldGVybWluZSBpdC4gKi8KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZmJtZW1fcmVnaW9uKGludCByZWdpb25faWR4LCBzdHJ1Y3Qgb21hcGZiX21lbV9yZWdpb24gKnJnLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9hdmFpbCwgdW5zaWduZWQgc2l6ZV9hdmFpbCkKK3sKKwl1bnNpZ25lZCBsb25nCXBhZGRyID0gcmctPnBhZGRyOworCXNpemVfdAkJc2l6ZSA9IHJnLT5zaXplOworCisJaWYgKHJnLT50eXBlID4gT01BUEZCX01FTVRZUEVfTUFYKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIkludmFsaWQgc3RhcnQgYWRkcmVzcyBmb3IgRkIgcmVnaW9uICVkXG4iLCByZWdpb25faWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFyZy0+c2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIlplcm8gc2l6ZSBmb3IgRkIgcmVnaW9uICVkXG4iLCByZWdpb25faWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFwYWRkcikKKwkJLyogQWxsb2NhdGUgdGhpcyBkeW5hbWljYWxseSwgbGVhdmUgcGFkZHIgMCBmb3Igbm93LiAqLworCQlyZXR1cm4gMDsKKworCS8qCisJICogRml4ZWQgcmVnaW9uIGZvciB0aGUgZ2l2ZW4gUkFNIHJhbmdlLiBDaGVjayBpZiBpdCdzIGFscmVhZHkKKwkgKiByZXNlcnZlZCBieSB0aGUgRkIgY29kZSBvciBzb21lb25lIGVsc2UuCisJICovCisJaWYgKGZibWVtX3JlZ2lvbl9yZXNlcnZlZChwYWRkciwgc2l6ZSkgfHwKKwkgICAgIXJhbmdlX2luY2x1ZGVkKHBhZGRyLCBzaXplLCBzdGFydF9hdmFpbCwgc2l6ZV9hdmFpbCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gdXNlIHJlc2VydmVkIG1lbW9yeSAiCisJCQkiZm9yIEZCIHJlZ2lvbiAlZFxuIiwgcmVnaW9uX2lkeCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQ2FsbGVkIGZyb20gbWFwX2lvLiBXZSBuZWVkIHRvIGNhbGwgdG8gdGhpcyBlYXJseSBlbm91Z2ggc28gdGhhdCB3ZQorICogY2FuIHJlc2VydmUgdGhlIGZpeGVkIFNEUkFNIHJlZ2lvbnMgYmVmb3JlIFZNIGNvdWxkIGdldCBob2xkIG9mIHRoZW0uCisgKi8KK3ZvaWQgb21hcGZiX3Jlc2VydmVfc2RyYW0odm9pZCkKK3sKKwlzdHJ1Y3QgYm9vdG1lbV9kYXRhCSpiZGF0YTsKKwl1bnNpZ25lZCBsb25nCQlzZHJhbV9zdGFydCwgc2RyYW1fc2l6ZTsKKwl1bnNpZ25lZCBsb25nCQlyZXNlcnZlZDsKKwlpbnQJCQlpOworCisJaWYgKGNvbmZpZ19pbnZhbGlkKQorCQlyZXR1cm47CisKKwliZGF0YSA9IE5PREVfREFUQSgwKS0+YmRhdGE7CisJc2RyYW1fc3RhcnQgPSBiZGF0YS0+bm9kZV9ib290X3N0YXJ0OworCXNkcmFtX3NpemUgPSAoYmRhdGEtPm5vZGVfbG93X3BmbiA8PCBQQUdFX1NISUZUKSAtIHNkcmFtX3N0YXJ0OworCXJlc2VydmVkID0gMDsKKwlmb3IgKGkgPSAwOyA7IGkrKykgeworCQlzdHJ1Y3Qgb21hcGZiX21lbV9yZWdpb24Jcmc7CisKKwkJaWYgKGdldF9mYm1lbV9yZWdpb24oaSwgJnJnKSA8IDApCisJCQlicmVhazsKKwkJaWYgKGkgPT0gT01BUEZCX1BMQU5FX05VTSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIkV4dHJhbmVvdXMgRkIgbWVtIGNvbmZpZ3VyYXRpb24gZW50cmllc1xuIik7CisJCQljb25maWdfaW52YWxpZCA9IDE7CisJCQlyZXR1cm47CisJCX0KKwkJLyogQ2hlY2sgaWYgaXQncyBvdXIgbWVtb3J5IHR5cGUuICovCisJCWlmIChzZXRfZmJtZW1fcmVnaW9uX3R5cGUoJnJnLCBPTUFQRkJfTUVNVFlQRV9TRFJBTSwKKwkJCQkgICAgICAgICAgc2RyYW1fc3RhcnQsIHNkcmFtX3NpemUpIDwgMCB8fAorCQkgICAgKHJnLnR5cGUgIT0gT01BUEZCX01FTVRZUEVfU0RSQU0pKQorCQkJY29udGludWU7CisJCUJVR19PTihvbWFwZmJfY29uZmlnLm1lbV9kZXNjLnJlZ2lvbltpXS5zaXplKTsKKwkJaWYgKGNoZWNrX2ZibWVtX3JlZ2lvbihpLCAmcmcsIHNkcmFtX3N0YXJ0LCBzZHJhbV9zaXplKSA8IDApIHsKKwkJCWNvbmZpZ19pbnZhbGlkID0gMTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAocmcucGFkZHIpCisJCQlyZXNlcnZlX2Jvb3RtZW0ocmcucGFkZHIsIHJnLnNpemUpOworCQlyZXNlcnZlZCArPSByZy5zaXplOworCQlvbWFwZmJfY29uZmlnLm1lbV9kZXNjLnJlZ2lvbltpXSA9IHJnOworCQljb25maWd1cmVkX3JlZ2lvbnMrKzsKKwl9CisJb21hcGZiX2NvbmZpZy5tZW1fZGVzYy5yZWdpb25fY250ID0gaTsKKwlpZiAocmVzZXJ2ZWQpCisJCXByX2luZm8oIlJlc2VydmluZyAlbHUgYnl0ZXMgU0RSQU0gZm9yIGZyYW1lIGJ1ZmZlclxuIiwKKwkJCSByZXNlcnZlZCk7Cit9CisKKy8qCisgKiBDYWxsZWQgYXQgc3JhbSBpbml0IHRpbWUsIGJlZm9yZSBhbnl0aGluZyBpcyBwdXNoZWQgdG8gdGhlIFNSQU0gc3RhY2suCisgKiBCZWNhdXNlIG9mIHRoZSBzdGFjayBzY2hlbWUsIHdlIHdpbGwgYWxsb2NhdGUgZXZlcnl0aGluZyBmcm9tIHRoZQorICogc3RhcnQgb2YgdGhlIGxvd2VzdCBhZGRyZXNzIHJlZ2lvbiB0byB0aGUgZW5kIG9mIFNSQU0uIFRoaXMgd2lsbCBhbHNvCisgKiBpbmNsdWRlIHBhZGRpbmcgZm9yIHBhZ2UgYWxpZ25tZW50IGFuZCBwb3NzaWJsZSBob2xlcyBiZXR3ZWVuIHJlZ2lvbnMuCisgKgorICogQXMgb3Bwb3NlZCB0byB0aGUgU0RSQU0gY2FzZSwgd2UnbGwgYWxzbyBkbyBhbnkgZHluYW1pYyBhbGxvY2F0aW9ucyBhdAorICogdGhpcyBwb2ludCwgc2luY2UgdGhlIGRyaXZlciBidWlsdCBhcyBhIG1vZHVsZSB3b3VsZCBoYXZlIHByb2JsZW0gd2l0aAorICogZnJlZWluZyAvIHJlYWxsb2NhdGluZyB0aGUgcmVnaW9ucy4KKyAqLwordW5zaWduZWQgbG9uZyBvbWFwZmJfcmVzZXJ2ZV9zcmFtKHVuc2lnbmVkIGxvbmcgc3JhbV9wc3RhcnQsCisJCQkJICB1bnNpZ25lZCBsb25nIHNyYW1fdnN0YXJ0LAorCQkJCSAgdW5zaWduZWQgbG9uZyBzcmFtX3NpemUsCisJCQkJICB1bnNpZ25lZCBsb25nIHBzdGFydF9hdmFpbCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZV9hdmFpbCkKK3sKKwlzdHJ1Y3Qgb21hcGZiX21lbV9yZWdpb24Jcmc7CisJdW5zaWduZWQgbG9uZwkJCXBlbmRfYXZhaWw7CisJdW5zaWduZWQgbG9uZwkJCXJlc2VydmVkOworCWludAkJCQlpOworCisJaWYgKGNvbmZpZ19pbnZhbGlkKQorCQlyZXR1cm4gMDsKKworCXJlc2VydmVkID0gMDsKKwlwZW5kX2F2YWlsID0gcHN0YXJ0X2F2YWlsICsgc2l6ZV9hdmFpbDsKKwlmb3IgKGkgPSAwOyA7IGkrKykgeworCQlpZiAoZ2V0X2ZibWVtX3JlZ2lvbihpLCAmcmcpIDwgMCkKKwkJCWJyZWFrOworCQlpZiAoaSA9PSBPTUFQRkJfUExBTkVfTlVNKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiRXh0cmFuZW91cyBGQiBtZW0gY29uZmlndXJhdGlvbiBlbnRyaWVzXG4iKTsKKwkJCWNvbmZpZ19pbnZhbGlkID0gMTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogQ2hlY2sgaWYgaXQncyBvdXIgbWVtb3J5IHR5cGUuICovCisJCWlmIChzZXRfZmJtZW1fcmVnaW9uX3R5cGUoJnJnLCBPTUFQRkJfTUVNVFlQRV9TUkFNLAorCQkJCSAgICAgICAgICBzcmFtX3BzdGFydCwgc3JhbV9zaXplKSA8IDAgfHwKKwkJICAgIChyZy50eXBlICE9IE9NQVBGQl9NRU1UWVBFX1NSQU0pKQorCQkJY29udGludWU7CisJCUJVR19PTihvbWFwZmJfY29uZmlnLm1lbV9kZXNjLnJlZ2lvbltpXS5zaXplKTsKKworCQlpZiAoY2hlY2tfZmJtZW1fcmVnaW9uKGksICZyZywgcHN0YXJ0X2F2YWlsLCBzaXplX2F2YWlsKSA8IDApIHsKKwkJCWNvbmZpZ19pbnZhbGlkID0gMTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKCFyZy5wYWRkcikgeworCQkJLyogRHluYW1pYyBhbGxvY2F0aW9uICovCisJCQlpZiAoKHNpemVfYXZhaWwgJiBQQUdFX01BU0spIDwgcmcuc2l6ZSkgeworCQkJCXByaW50aygiTm90IGVub3VnaCBTUkFNIGZvciBGQiByZWdpb24gJWRcbiIsCisJCQkJCWkpOworCQkJCWNvbmZpZ19pbnZhbGlkID0gMTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXNpemVfYXZhaWwgPSAoc2l6ZV9hdmFpbCAtIHJnLnNpemUpICYgUEFHRV9NQVNLOworCQkJcmcucGFkZHIgPSBwc3RhcnRfYXZhaWwgKyBzaXplX2F2YWlsOworCQl9CisJCS8qIFJlc2VydmUgZXZlcnl0aGluZyBhYm92ZSB0aGUgc3RhcnQgb2YgdGhlIHJlZ2lvbi4gKi8KKwkJaWYgKHBlbmRfYXZhaWwgLSByZy5wYWRkciA+IHJlc2VydmVkKQorCQkJcmVzZXJ2ZWQgPSBwZW5kX2F2YWlsIC0gcmcucGFkZHI7CisJCXNpemVfYXZhaWwgPSBwZW5kX2F2YWlsIC0gcmVzZXJ2ZWQgLSBwc3RhcnRfYXZhaWw7CisKKwkJLyoKKwkJICogV2UgaGF2ZSBhIGtlcm5lbCBtYXBwaW5nIGZvciB0aGlzIGFscmVhZHksIHNvIHRoZQorCQkgKiBkcml2ZXIgd29uJ3QgaGF2ZSB0byBtYWtlIG9uZS4KKwkJICovCisJCXJnLnZhZGRyID0gKHZvaWQgKikoc3JhbV92c3RhcnQgKyByZy5wYWRkciAtIHNyYW1fcHN0YXJ0KTsKKwkJb21hcGZiX2NvbmZpZy5tZW1fZGVzYy5yZWdpb25baV0gPSByZzsKKwkJY29uZmlndXJlZF9yZWdpb25zKys7CisJfQorCW9tYXBmYl9jb25maWcubWVtX2Rlc2MucmVnaW9uX2NudCA9IGk7CisJaWYgKHJlc2VydmVkKQorCQlwcl9pbmZvKCJSZXNlcnZpbmcgJWx1IGJ5dGVzIFNSQU0gZm9yIGZyYW1lIGJ1ZmZlclxuIiwKKwkJCSByZXNlcnZlZCk7CisJcmV0dXJuIHJlc2VydmVkOworfQorCit2b2lkIG9tYXBmYl9zZXRfY3RybF9wbGF0Zm9ybV9kYXRhKHZvaWQgKmRhdGEpCit7CisJb21hcGZiX2NvbmZpZy5jdHJsX3BsYXRmb3JtX2RhdGEgPSBkYXRhOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBvbWFwX2luaXRfZmIodm9pZCkKIHsKIAljb25zdCBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnICpjb25mOwogCi0JY29uZiA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19MQ0QsIHN0cnVjdCBvbWFwX2xjZF9jb25maWcpOwotCWlmIChjb25mID09IE5VTEwpCisJaWYgKGNvbmZpZ19pbnZhbGlkKQogCQlyZXR1cm4gMDsKLQorCWlmIChjb25maWd1cmVkX3JlZ2lvbnMgIT0gb21hcGZiX2NvbmZpZy5tZW1fZGVzYy5yZWdpb25fY250KSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBGQiBtZW0gY29uZmlndXJhdGlvbiBlbnRyaWVzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWNvbmYgPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfTENELCBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnKTsKKwlpZiAoY29uZiA9PSBOVUxMKSB7CisJCWlmIChjb25maWd1cmVkX3JlZ2lvbnMpCisJCQkvKiBGQiBtZW0gY29uZmlnLCBidXQgbm8gTENEIGNvbmZpZz8gKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiTWlzc2luZyBMQ0QgY29uZmlndXJhdGlvblxuIik7CisJCXJldHVybiAwOworCX0KIAlvbWFwZmJfY29uZmlnLmxjZCA9ICpjb25mOwogCiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9mYl9kZXZpY2UpOwpAQCAtNzIsNyArMzI4LDE2IEBACiAKICNlbHNlCiAKLXZvaWQgb21hcGZiX3Jlc2VydmVfbWVtKHZvaWQpIHt9Cit2b2lkIG9tYXBmYl9yZXNlcnZlX3NkcmFtKHZvaWQpIHt9Cit1bnNpZ25lZCBsb25nIG9tYXBmYl9yZXNlcnZlX3NyYW0odW5zaWduZWQgbG9uZyBzcmFtX3BzdGFydCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgc3JhbV92c3RhcnQsCisJCQkJICB1bnNpZ25lZCBsb25nIHNyYW1fc2l6ZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnRfYXZhaWwsCisJCQkJICB1bnNpZ25lZCBsb25nIHNpemVfYXZhaWwpCit7CisJcmV0dXJuIDA7Cit9CisKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IDlkYzZkMzYuLjMzNzQ1NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpAQCAtMTMsNyArMTMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC0xNTQ1LDcgKzE1NDQsNyBAQAogICogVGhpcyBtYXkgZ2V0IGNhbGxlZCBlYXJseSBmcm9tIGJvYXJkIHNwZWNpZmljIGluaXQKICAqIGZvciBib2FyZHMgdGhhdCBoYXZlIGludGVycnVwdHMgcm91dGVkIHZpYSBGUEdBLgogICovCi1pbnQgb21hcF9ncGlvX2luaXQodm9pZCkKK2ludCBfX2luaXQgb21hcF9ncGlvX2luaXQodm9pZCkKIHsKIAlpZiAoIWluaXRpYWxpemVkKQogCQlyZXR1cm4gX29tYXBfZ3Bpb19pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdlNmVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYwpAQCAtMCwwICsxLDUwOSBAQAorLyoKKyAqIE9NQVAgbWFpbGJveCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQ29udGFjdDogVG9zaGloaXJvIEtvYmF5YXNoaSA8dG9zaGloaXJvLmtvYmF5YXNoaUBub2tpYS5jb20+CisgKgkJUmVzdHJ1Y3R1cmVkIGJ5IEhpcm9zaGkgRE9ZVSA8SGlyb3NoaS5ET1lVQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21haWxib3guaD4KKyNpbmNsdWRlICJtYWlsYm94LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94ICptYm94ZXM7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhtYm94ZXNfbG9jayk7CisKKy8qIE1haWxib3ggU2VxdWVuY2UgQml0IGZ1bmN0aW9uICovCit2b2lkIG9tYXBfbWJveF9pbml0X3NlcShzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoreworCW1ib3hfc2VxX2luaXQobWJveCk7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfbWJveF9pbml0X3NlcSk7CisKKy8qCisgKiBtZXNzYWdlIHNlbmRlcgorICovCitzdGF0aWMgaW50IF9fbWJveF9tc2dfc2VuZChzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZywgdm9pZCAqYXJnKQoreworCWludCByZXQgPSAwLCBpID0gMTAwMDsKKworCXdoaWxlIChtYm94X2ZpZm9fZnVsbChtYm94KSkgeworCQlpZiAobWJveC0+b3BzLT50eXBlID09IE9NQVBfTUJPWF9UWVBFMikKKwkJCXJldHVybiAtMTsKKwkJaWYgKC0taSA9PSAwKQorCQkJcmV0dXJuIC0xOworCQl1ZGVsYXkoMSk7CisJfQorCisJaWYgKGFyZyAmJiBtYm94LT50eHEtPmNhbGxiYWNrKSB7CisJCXJldCA9IG1ib3gtPnR4cS0+Y2FsbGJhY2soYXJnKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCW1ib3hfc2VxX3RvZ2dsZShtYm94LCAmbXNnKTsKKwltYm94X2ZpZm9fd3JpdGUobWJveCwgbXNnKTsKKyBvdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IG9tYXBfbWJveF9tc2dfc2VuZChzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZywgdm9pZCogYXJnKQoreworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1ib3gtPnR4cS0+cXVldWU7CisJaW50IHJldCA9IDA7CisKKwlycSA9IGJsa19nZXRfcmVxdWVzdChxLCBXUklURSwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCFycSkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCXJxLT5kYXRhID0gKHZvaWQgKiltc2c7CisJYmxrX2luc2VydF9yZXF1ZXN0KHEsIHJxLCAwLCBhcmcpOworCisJc2NoZWR1bGVfd29yaygmbWJveC0+dHhxLT53b3JrKTsKKyBmYWlsOgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfbWJveF9tc2dfc2VuZCk7CisKK3N0YXRpYyB2b2lkIG1ib3hfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJc3RydWN0IG9tYXBfbWJveF9xdWV1ZSAqbXEgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQlzdHJ1Y3Qgb21hcF9tYm94X3F1ZXVlLCB3b3JrKTsKKwlzdHJ1Y3Qgb21hcF9tYm94ICptYm94ID0gbXEtPnF1ZXVlLT5xdWV1ZWRhdGE7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtYm94LT50eHEtPnF1ZXVlOworCisJd2hpbGUgKDEpIHsKKwkJc3Bpbl9sb2NrKHEtPnF1ZXVlX2xvY2spOworCQlycSA9IGVsdl9uZXh0X3JlcXVlc3QocSk7CisJCXNwaW5fdW5sb2NrKHEtPnF1ZXVlX2xvY2spOworCisJCWlmICghcnEpCisJCQlicmVhazsKKworCQlyZXQgPSBfX21ib3hfbXNnX3NlbmQobWJveCwgKG1ib3hfbXNnX3QpIHJxLT5kYXRhLCBycS0+c3BlY2lhbCk7CisJCWlmIChyZXQpIHsKKwkJCWVuYWJsZV9tYm94X2lycShtYm94LCBJUlFfVFgpOworCQkJcmV0dXJuOworCQl9CisKKwkJc3Bpbl9sb2NrKHEtPnF1ZXVlX2xvY2spOworCQlibGtkZXZfZGVxdWV1ZV9yZXF1ZXN0KHJxKTsKKwkJZW5kX3RoYXRfcmVxdWVzdF9sYXN0KHJxLCAwKTsKKwkJc3Bpbl91bmxvY2socS0+cXVldWVfbG9jayk7CisJfQorfQorCisvKgorICogTWVzc2FnZSByZWNlaXZlcih3b3JrcXVldWUpCisgKi8KK3N0YXRpYyB2b2lkIG1ib3hfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG9tYXBfbWJveF9xdWV1ZSAqbXEgPQorCQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvbWFwX21ib3hfcXVldWUsIHdvcmspOworCXN0cnVjdCBvbWFwX21ib3ggKm1ib3ggPSBtcS0+cXVldWUtPnF1ZXVlZGF0YTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1ib3gtPnJ4cS0+cXVldWU7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCW1ib3hfbXNnX3QgbXNnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobWJveC0+cnhxLT5jYWxsYmFjayA9PSBOVUxMKSB7CisJCXN5c2ZzX25vdGlmeSgmbWJveC0+ZGV2LmtvYmosIE5VTEwsICJtYm94Iik7CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoMSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJCXJxID0gZWx2X25leHRfcmVxdWVzdChxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJCWlmICghcnEpCisJCQlicmVhazsKKworCQltc2cgPSAobWJveF9tc2dfdCkgcnEtPmRhdGE7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOworCQlibGtkZXZfZGVxdWV1ZV9yZXF1ZXN0KHJxKTsKKwkJZW5kX3RoYXRfcmVxdWVzdF9sYXN0KHJxLCAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisKKwkJbWJveC0+cnhxLT5jYWxsYmFjaygodm9pZCAqKW1zZyk7CisJfQorfQorCisvKgorICogTWFpbGJveCBpbnRlcnJ1cHQgaGFuZGxlcgorICovCitzdGF0aWMgdm9pZCBtYm94X3R4cV9mbihyZXF1ZXN0X3F1ZXVlX3QgKiBxKQoreworfQorCitzdGF0aWMgdm9pZCBtYm94X3J4cV9mbihyZXF1ZXN0X3F1ZXVlX3QgKiBxKQoreworfQorCitzdGF0aWMgdm9pZCBfX21ib3hfdHhfaW50ZXJydXB0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJZGlzYWJsZV9tYm94X2lycShtYm94LCBJUlFfVFgpOworCWFja19tYm94X2lycShtYm94LCBJUlFfVFgpOworCXNjaGVkdWxlX3dvcmsoJm1ib3gtPnR4cS0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkIF9fbWJveF9yeF9pbnRlcnJ1cHQoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJbWJveF9tc2dfdCBtc2c7CisJcmVxdWVzdF9xdWV1ZV90ICpxID0gbWJveC0+cnhxLT5xdWV1ZTsKKworCWRpc2FibGVfbWJveF9pcnEobWJveCwgSVJRX1JYKTsKKworCXdoaWxlICghbWJveF9maWZvX2VtcHR5KG1ib3gpKSB7CisJCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFdSSVRFLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHVubGlrZWx5KCFycSkpCisJCQlnb3RvIG5vbWVtOworCisJCW1zZyA9IG1ib3hfZmlmb19yZWFkKG1ib3gpOworCQlycS0+ZGF0YSA9ICh2b2lkICopbXNnOworCisJCWlmICh1bmxpa2VseShtYm94X3NlcV90ZXN0KG1ib3gsIG1zZykpKSB7CisJCQlwcl9pbmZvKCJtYm94OiBJbGxlZ2FsIHNlcSBiaXQhKCUwOHgpXG4iLCBtc2cpOworCQkJaWYgKG1ib3gtPmVycl9ub3RpZnkpCisJCQkJbWJveC0+ZXJyX25vdGlmeSgpOworCQl9CisKKwkJYmxrX2luc2VydF9yZXF1ZXN0KHEsIHJxLCAwLCBOVUxMKTsKKwkJaWYgKG1ib3gtPm9wcy0+dHlwZSA9PSBPTUFQX01CT1hfVFlQRTEpCisJCQlicmVhazsKKwl9CisKKwkvKiBubyBtb3JlIG1lc3NhZ2VzIGluIHRoZSBmaWZvLiBjbGVhciBJUlEgc291cmNlLiAqLworCWFja19tYm94X2lycShtYm94LCBJUlFfUlgpOworCWVuYWJsZV9tYm94X2lycShtYm94LCBJUlFfUlgpOworCW5vbWVtOgorCXNjaGVkdWxlX3dvcmsoJm1ib3gtPnJ4cS0+d29yayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYm94X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwKQoreworCXN0cnVjdCBvbWFwX21ib3ggKm1ib3ggPSAoc3RydWN0IG9tYXBfbWJveCAqKXA7CisKKwlpZiAoaXNfbWJveF9pcnEobWJveCwgSVJRX1RYKSkKKwkJX19tYm94X3R4X2ludGVycnVwdChtYm94KTsKKworCWlmIChpc19tYm94X2lycShtYm94LCBJUlFfUlgpKQorCQlfX21ib3hfcnhfaW50ZXJydXB0KG1ib3gpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogc3lzZnMgZmlsZXMKKyAqLworc3RhdGljIHNzaXplX3QKK29tYXBfbWJveF93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IHJldDsKKwltYm94X21zZ190ICpwID0gKG1ib3hfbXNnX3QgKilidWY7CisJc3RydWN0IG9tYXBfbWJveCAqbWJveCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZm9yICg7IGNvdW50ID49IHNpemVvZihtYm94X21zZ190KTsgY291bnQgLT0gc2l6ZW9mKG1ib3hfbXNnX3QpKSB7CisJCXJldCA9IG9tYXBfbWJveF9tc2dfc2VuZChtYm94LCBiZTMyX3RvX2NwdSgqcCksIE5VTEwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FQUdBSU47CisJCXArKzsKKwl9CisKKwlyZXR1cm4gKHNpemVfdCkoKGNoYXIgKilwIC0gYnVmKTsKK30KKworc3RhdGljIHNzaXplX3QKK29tYXBfbWJveF9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwltYm94X21zZ190ICpwID0gKG1ib3hfbXNnX3QgKikgYnVmOworCXN0cnVjdCBvbWFwX21ib3ggKm1ib3ggPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1ib3gtPnJ4cS0+cXVldWU7CisKKwl3aGlsZSAoMSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJCXJxID0gZWx2X25leHRfcmVxdWVzdChxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisKKwkJaWYgKCFycSkKKwkJCWJyZWFrOworCisJCSpwID0gKG1ib3hfbXNnX3QpIHJxLT5kYXRhOworCisJCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwkJYmxrZGV2X2RlcXVldWVfcmVxdWVzdChycSk7CisJCWVuZF90aGF0X3JlcXVlc3RfbGFzdChycSwgMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOworCisJCWlmICh1bmxpa2VseShtYm94X3NlcV90ZXN0KG1ib3gsICpwKSkpIHsKKwkJCXByX2luZm8oIm1ib3g6IElsbGVnYWwgc2VxIGJpdCEoJTA4eCkgaWdub3JlZFxuIiwgKnApOworCQkJY29udGludWU7CisJCX0KKwkJcCsrOworCX0KKworCXByX2RlYnVnKCIlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10pOworCisJcmV0dXJuIChzaXplX3QpICgoY2hhciAqKXAgLSBidWYpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobWJveCwgU19JUlVHTyB8IFNfSVdVU1IsIG9tYXBfbWJveF9yZWFkLCBvbWFwX21ib3hfd3JpdGUpOworCitzdGF0aWMgc3NpemVfdCBtYm94X3Nob3coc3RydWN0IGNsYXNzICpjbGFzcywgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm1ib3giKTsKK30KKworc3RhdGljIENMQVNTX0FUVFIobWJveCwgU19JUlVHTywgbWJveF9zaG93LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBjbGFzcyBvbWFwX21ib3hfY2xhc3MgPSB7CisJLm5hbWUgPSAib21hcF9tYm94IiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94X3F1ZXVlICptYm94X3F1ZXVlX2FsbG9jKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsCisJCQkJCXJlcXVlc3RfZm5fcHJvYyAqIHByb2MsCisJCQkJCXZvaWQgKCp3b3JrKSAoc3RydWN0IHdvcmtfc3RydWN0ICopKQoreworCXJlcXVlc3RfcXVldWVfdCAqcTsKKwlzdHJ1Y3Qgb21hcF9tYm94X3F1ZXVlICptcTsKKworCW1xID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfbWJveF9xdWV1ZSksIEdGUF9LRVJORUwpOworCWlmICghbXEpCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2luaXQoJm1xLT5sb2NrKTsKKworCXEgPSBibGtfaW5pdF9xdWV1ZShwcm9jLCAmbXEtPmxvY2spOworCWlmICghcSkKKwkJZ290byBlcnJvcjsKKwlxLT5xdWV1ZWRhdGEgPSBtYm94OworCW1xLT5xdWV1ZSA9IHE7CisKKwlJTklUX1dPUksoJm1xLT53b3JrLCB3b3JrKTsKKworCXJldHVybiBtcTsKK2Vycm9yOgorCWtmcmVlKG1xKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgbWJveF9xdWV1ZV9mcmVlKHN0cnVjdCBvbWFwX21ib3hfcXVldWUgKnEpCit7CisJYmxrX2NsZWFudXBfcXVldWUocS0+cXVldWUpOworCWtmcmVlKHEpOworfQorCitzdGF0aWMgaW50IG9tYXBfbWJveF9pbml0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb21hcF9tYm94X3F1ZXVlICptcTsKKworCWlmIChsaWtlbHkobWJveC0+b3BzLT5zdGFydHVwKSkgeworCQlyZXQgPSBtYm94LT5vcHMtPnN0YXJ0dXAobWJveCk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwltYm94LT5kZXYuY2xhc3MgPSAmb21hcF9tYm94X2NsYXNzOworCXN0cmxjcHkobWJveC0+ZGV2LmJ1c19pZCwgbWJveC0+bmFtZSwgS09CSl9OQU1FX0xFTik7CisJZGV2X3NldF9kcnZkYXRhKCZtYm94LT5kZXYsIG1ib3gpOworCisJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZtYm94LT5kZXYpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGZhaWxfZGV2aWNlX3JlZzsKKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmbWJveC0+ZGV2LCAmZGV2X2F0dHJfbWJveCk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZmFpbF9jcmVhdGVfbWJveDsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShtYm94LT5pcnEsIG1ib3hfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAorCQkJCW1ib3gtPm5hbWUsIG1ib3gpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImZhaWxlZCB0byByZWdpc3RlciBtYWlsYm94IGludGVycnVwdDolZFxuIiwgcmV0KTsKKwkJZ290byBmYWlsX3JlcXVlc3RfaXJxOworCX0KKwllbmFibGVfbWJveF9pcnEobWJveCwgSVJRX1JYKTsKKworCW1xID0gbWJveF9xdWV1ZV9hbGxvYyhtYm94LCBtYm94X3R4cV9mbiwgbWJveF90eF93b3JrKTsKKwlpZiAoIW1xKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9hbGxvY190eHE7CisJfQorCW1ib3gtPnR4cSA9IG1xOworCisJbXEgPSBtYm94X3F1ZXVlX2FsbG9jKG1ib3gsIG1ib3hfcnhxX2ZuLCBtYm94X3J4X3dvcmspOworCWlmICghbXEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2FsbG9jX3J4cTsKKwl9CisJbWJveC0+cnhxID0gbXE7CisKKwlyZXR1cm4gMDsKKworIGZhaWxfYWxsb2NfcnhxOgorCW1ib3hfcXVldWVfZnJlZShtYm94LT50eHEpOworIGZhaWxfYWxsb2NfdHhxOgorCWZyZWVfaXJxKG1ib3gtPmlycSwgbWJveCk7CisgZmFpbF9yZXF1ZXN0X2lycToKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1ib3gtPmRldiwgJmRldl9hdHRyX21ib3gpOworIGZhaWxfY3JlYXRlX21ib3g6CisJZGV2aWNlX3VucmVnaXN0ZXIoJm1ib3gtPmRldik7CisgZmFpbF9kZXZpY2VfcmVnOgorCWlmICh1bmxpa2VseShtYm94LT5vcHMtPnNodXRkb3duKSkKKwkJbWJveC0+b3BzLT5zaHV0ZG93bihtYm94KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWJveF9maW5pKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJbWJveF9xdWV1ZV9mcmVlKG1ib3gtPnR4cSk7CisJbWJveF9xdWV1ZV9mcmVlKG1ib3gtPnJ4cSk7CisKKwlmcmVlX2lycShtYm94LT5pcnEsIG1ib3gpOworCWRldmljZV9yZW1vdmVfZmlsZSgmbWJveC0+ZGV2LCAmZGV2X2F0dHJfbWJveCk7CisJY2xhc3NfdW5yZWdpc3Rlcigmb21hcF9tYm94X2NsYXNzKTsKKworCWlmICh1bmxpa2VseShtYm94LT5vcHMtPnNodXRkb3duKSkKKwkJbWJveC0+b3BzLT5zaHV0ZG93bihtYm94KTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX21ib3ggKipmaW5kX21ib3hlcyhjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvbWFwX21ib3ggKipwOworCisJZm9yIChwID0gJm1ib3hlczsgKnA7IHAgPSAmKCpwKS0+bmV4dCkgeworCQlpZiAoc3RyY21wKCgqcCktPm5hbWUsIG5hbWUpID09IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcDsKK30KKworc3RydWN0IG9tYXBfbWJveCAqb21hcF9tYm94X2dldChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvbWFwX21ib3ggKm1ib3g7CisJaW50IHJldDsKKworCXJlYWRfbG9jaygmbWJveGVzX2xvY2spOworCW1ib3ggPSAqKGZpbmRfbWJveGVzKG5hbWUpKTsKKwlpZiAobWJveCA9PSBOVUxMKSB7CisJCXJlYWRfdW5sb2NrKCZtYm94ZXNfbG9jayk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCX0KKworCXJlYWRfdW5sb2NrKCZtYm94ZXNfbG9jayk7CisKKwlyZXQgPSBvbWFwX21ib3hfaW5pdChtYm94KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCXJldHVybiBtYm94OworfQorRVhQT1JUX1NZTUJPTChvbWFwX21ib3hfZ2V0KTsKKwordm9pZCBvbWFwX21ib3hfcHV0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJb21hcF9tYm94X2ZpbmkobWJveCk7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfbWJveF9wdXQpOworCitpbnQgb21hcF9tYm94X3JlZ2lzdGVyKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9tYXBfbWJveCAqKnRtcDsKKworCWlmICghbWJveCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG1ib3gtPm5leHQpCisJCXJldHVybiAtRUJVU1k7CisKKwl3cml0ZV9sb2NrKCZtYm94ZXNfbG9jayk7CisJdG1wID0gZmluZF9tYm94ZXMobWJveC0+bmFtZSk7CisJaWYgKCp0bXApCisJCXJldCA9IC1FQlVTWTsKKwllbHNlCisJCSp0bXAgPSBtYm94OworCXdyaXRlX3VubG9jaygmbWJveGVzX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9tYm94X3JlZ2lzdGVyKTsKKworaW50IG9tYXBfbWJveF91bnJlZ2lzdGVyKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJc3RydWN0IG9tYXBfbWJveCAqKnRtcDsKKworCXdyaXRlX2xvY2soJm1ib3hlc19sb2NrKTsKKwl0bXAgPSAmbWJveGVzOworCXdoaWxlICgqdG1wKSB7CisJCWlmIChtYm94ID09ICp0bXApIHsKKwkJCSp0bXAgPSBtYm94LT5uZXh0OworCQkJbWJveC0+bmV4dCA9IE5VTEw7CisJCQl3cml0ZV91bmxvY2soJm1ib3hlc19sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisJCXRtcCA9ICYoKnRtcCktPm5leHQ7CisJfQorCXdyaXRlX3VubG9jaygmbWJveGVzX2xvY2spOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfbWJveF91bnJlZ2lzdGVyKTsKKworc3RhdGljIGludCBfX2luaXQgb21hcF9tYm94X2NsYXNzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gY2xhc3NfcmVnaXN0ZXIoJm9tYXBfbWJveF9jbGFzcyk7CisJaWYgKCFyZXQpCisJCXJldCA9IGNsYXNzX2NyZWF0ZV9maWxlKCZvbWFwX21ib3hfY2xhc3MsICZjbGFzc19hdHRyX21ib3gpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9tYXBfbWJveF9jbGFzc19leGl0KHZvaWQpCit7CisJY2xhc3NfcmVtb3ZlX2ZpbGUoJm9tYXBfbWJveF9jbGFzcywgJmNsYXNzX2F0dHJfbWJveCk7CisJY2xhc3NfdW5yZWdpc3Rlcigmb21hcF9tYm94X2NsYXNzKTsKK30KKworc3Vic3lzX2luaXRjYWxsKG9tYXBfbWJveF9jbGFzc19pbml0KTsKK21vZHVsZV9leGl0KG9tYXBfbWJveF9jbGFzc19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdjNjc0MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBNYWlsYm94IGludGVybmFsIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOb2tpYSBDb3Jwb3JhdGlvbgorICogV3JpdHRlbiBieTogSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9QTEFUX01BSUxCT1hfSAorI2RlZmluZSBfX0FSQ0hfQVJNX1BMQVRfTUFJTEJPWF9ICisKKy8qCisgKiBNYWlsYm94IHNlcXVlbmNlIGJpdCBBUEkKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCisjICBkZWZpbmUgTUJPWF9VU0VfU0VRX0JJVAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKKyMgIGRlZmluZSBNQk9YX1VTRV9TRVFfQklUCisjZW5kaWYKKworI2lmZGVmIE1CT1hfVVNFX1NFUV9CSVQKKy8qIHNlcV9yY3Ygc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggYW55IHZhbHVlIG90aGVyIHRoYW4KKyAqIDAgYW5kIDEgPDwgMzEsIHRvIGFsbG93IGVpdGhlciB2YWx1ZSBmb3IgdGhlIGZpcnN0CisgKiBtZXNzYWdlLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3NlcV9pbml0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJLyogYW55IHZhbHVlIG90aGVyIHRoYW4gMCBhbmQgMSA8PCAzMSAqLworCW1ib3gtPnNlcV9yY3YgPSAweGZmZmZmZmZmOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWJveF9zZXFfdG9nZ2xlKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgKiBtc2cpCit7CisJLyogYWRkIHNlcV9zbmQgdG8gbXNnICovCisJKm1zZyA9ICgqbXNnICYgMHg3ZmZmZmZmZikgfCBtYm94LT5zZXFfc25kOworCS8qIGZsaXAgc2VxX3NuZCAqLworCW1ib3gtPnNlcV9zbmQgXj0gMSA8PCAzMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWJveF9zZXFfdGVzdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZykKK3sKKwltYm94X21zZ190IHNlcSA9IG1zZyAmICgxIDw8IDMxKTsKKwlpZiAoc2VxID09IG1ib3gtPnNlcV9yY3YpCisJCXJldHVybiAtMTsKKwltYm94LT5zZXFfcmN2ID0gc2VxOworCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3NlcV9pbml0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbWJveF9zZXFfdG9nZ2xlKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgKiBtc2cpCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBtYm94X3NlcV90ZXN0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgbXNnKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qIE1haWxib3ggRklGTyBoYW5kbGUgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIG1ib3hfbXNnX3QgbWJveF9maWZvX3JlYWQoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlyZXR1cm4gbWJveC0+b3BzLT5maWZvX3JlYWQobWJveCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbWJveF9maWZvX3dyaXRlKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgbXNnKQoreworCW1ib3gtPm9wcy0+Zmlmb193cml0ZShtYm94LCBtc2cpOworfQorc3RhdGljIGlubGluZSBpbnQgbWJveF9maWZvX2VtcHR5KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJcmV0dXJuIG1ib3gtPm9wcy0+Zmlmb19lbXB0eShtYm94KTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IG1ib3hfZmlmb19mdWxsKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJcmV0dXJuIG1ib3gtPm9wcy0+Zmlmb19mdWxsKG1ib3gpOworfQorCisvKiBNYWlsYm94IElSUSBoYW5kbGUgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX21ib3hfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpCit7CisJbWJveC0+b3BzLT5lbmFibGVfaXJxKG1ib3gsIGlycSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9tYm94X2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKQoreworCW1ib3gtPm9wcy0+ZGlzYWJsZV9pcnEobWJveCwgaXJxKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2tfbWJveF9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X2lycV90IGlycSkKK3sKKwlpZiAobWJveC0+b3BzLT5hY2tfaXJxKQorCQltYm94LT5vcHMtPmFja19pcnEobWJveCwgaXJxKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGlzX21ib3hfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpCit7CisJcmV0dXJuIG1ib3gtPm9wcy0+aXNfaXJxKG1ib3gsIGlycSk7Cit9CisKKyNlbmRpZgkJCQkvKiBfX0FSQ0hfQVJNX1BMQVRfTUFJTEJPWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMKaW5kZXggNmM3OThkMi4uNzUyMTFmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYwpAQCAtODMsMTAgKzgzLDIxIEBACiAJCQlyZWcgfD0gT01BUDI0WFhfUFVMTF9FTkE7CiAJCWlmKGNmZy0+cHVfcGRfdmFsKQogCQkJcmVnIHw9IE9NQVAyNFhYX1BVTExfVVA7Ci0jaWZkZWYgQ09ORklHX09NQVBfTVVYX0RFQlVHCi0JCXByaW50aygiTXV4aW5nICVzICgweCUwOHgpOiAweCUwMnggLT4gMHglMDJ4XG4iLAotCQkgICAgICAgY2ZnLT5uYW1lLCBPTUFQMjRYWF9MNF9CQVNFICsgY2ZnLT5tdXhfcmVnLAotCQkgICAgICAgb21hcF9yZWFkYihPTUFQMjRYWF9MNF9CQVNFICsgY2ZnLT5tdXhfcmVnKSwgcmVnKTsKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX01VWF9ERUJVRykgfHwgZGVmaW5lZChDT05GSUdfT01BUF9NVVhfV0FSTklOR1MpCisJCXsKKwkJCXU4IG9yaWcgPSBvbWFwX3JlYWRiKE9NQVAyNFhYX0w0X0JBU0UgKyBjZmctPm11eF9yZWcpOworCQkJdTggZGVidWcgPSAwOworCisjaWZkZWYJQ09ORklHX09NQVBfTVVYX0RFQlVHCisJCQlkZWJ1ZyA9IGNmZy0+ZGVidWc7CisjZW5kaWYKKwkJCXdhcm4gPSAob3JpZyAhPSByZWcpOworCQkJaWYgKGRlYnVnIHx8IHdhcm4pCisJCQkJcHJpbnRrKCJNVVg6IHNldHVwICVzICgweCUwOHgpOiAweCUwMnggLT4gMHglMDJ4XG4iLAorCQkJCQkJY2ZnLT5uYW1lLAorCQkJCQkJT01BUDI0WFhfTDRfQkFTRSArIGNmZy0+bXV4X3JlZywKKwkJCQkJCW9yaWcsIHJlZyk7CisJCX0KICNlbmRpZgogCQlvbWFwX3dyaXRlYihyZWcsIE9NQVAyNFhYX0w0X0JBU0UgKyBjZmctPm11eF9yZWcpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwppbmRleCAxOTAxNGIyLi4xZjIzZjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKQEAgLTQ2LDE2ICs0NiwyMSBAQAogCiAjZGVmaW5lIFJPVU5EX0RPV04odmFsdWUsYm91bmRhcnkpCSgodmFsdWUpICYgKH4oKGJvdW5kYXJ5KS0xKSkpCiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfc3JhbV9zdGFydDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfc3JhbV9iYXNlOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcF9zcmFtX3NpemU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwX3NyYW1fY2VpbDsKIAotdW5zaWduZWQgbG9uZyBvbWFwX2ZiX3NyYW1fc3RhcnQ7Ci11bnNpZ25lZCBsb25nIG9tYXBfZmJfc3JhbV9zaXplOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcGZiX3Jlc2VydmVfc3JhbSh1bnNpZ25lZCBsb25nIHNyYW1fcHN0YXJ0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBzcmFtX3ZzdGFydCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgc3JhbV9zaXplLAorCQkJCQkgdW5zaWduZWQgbG9uZyBwc3RhcnRfYXZhaWwsCisJCQkJCSB1bnNpZ25lZCBsb25nIHNpemVfYXZhaWwpOwogCi0vKiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBSQU1GUyBmaXJld2FsbCBzZXR1cCwgdGhlIHB1YmxpYyB1c2FibGUgYW1vdW50IG9mCi0gKiBTUkFNIHZhcmllcy4gIFRoZSBkZWZhdWx0IGFjY2Vzc2FibGUgc2l6ZSBmb3IgYWxsIGRldmljZSB0eXBlcyBpcyAyay4gQSBHUAotICogZGV2aWNlIGFsbG93cyBBUk0xMSBidXQgbm90IG90aGVyIGluaXRhdG9ycyBmb3IgZnVsbCBzaXplLiBUaGlzCisvKgorICogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgUkFNRlMgZmlyZXdhbGwgc2V0dXAsIHRoZSBwdWJsaWMgdXNhYmxlIGFtb3VudCBvZgorICogU1JBTSB2YXJpZXMuICBUaGUgZGVmYXVsdCBhY2Nlc3NpYmxlIHNpemUgZm9yIGFsbCBkZXZpY2UgdHlwZXMgaXMgMmsuIEEgR1AKKyAqIGRldmljZSBhbGxvd3MgQVJNMTEgYnV0IG5vdCBvdGhlciBpbml0aWF0b3JzIGZvciBmdWxsIHNpemUuIFRoaXMKICAqIGZ1bmN0aW9uYWxpdHkgc2VlbXMgb2sgdW50aWwgc29tZSBuaWNlIHNlY3VyaXR5IEFQSSBoYXBwZW5zLgogICovCiBzdGF0aWMgaW50IGlzX3NyYW1fbG9ja2VkKHZvaWQpCkBAIC02Niw3ICs3MSw3IEBACiAJCXR5cGUgPSBfX3Jhd19yZWFkbChWQV9DT05UUk9MX1NUQVQpICYgVFlQRV9NQVNLOwogCiAJaWYgKHR5cGUgPT0gR1BfREVWSUNFKSB7Ci0JCS8qIFJBTUZXOiBSL1cgYWNjZXNzIHRvIGFsbCBpbml0YXRvcnMgZm9yIGFsbCBxdWFsaWZpZXIgc2V0cyAqLworCQkvKiBSQU1GVzogUi9XIGFjY2VzcyB0byBhbGwgaW5pdGlhdG9ycyBmb3IgYWxsIHF1YWxpZmllciBzZXRzICovCiAJCWlmIChjcHVfaXNfb21hcDI0MngoKSkgewogCQkJX19yYXdfd3JpdGVsKDB4RkYsIFZBX1JFUUlORk9QRVJNMCk7IC8qIGFsbCBxLXZlY3RzICovCiAJCQlfX3Jhd193cml0ZWwoMHhDRkRFLCBWQV9SRUFEUEVSTTApOyAgLyogYWxsIGktcmVhZCAqLwpAQCAtNzcsMzIgKzgyLDYgQEAKIAkJcmV0dXJuIDE7IC8qIGFzc3VtZSBsb2NrZWQgd2l0aCBubyBQUEEgb3Igc2VjdXJpdHkgZHJpdmVyICovCiB9CiAKLXZvaWQgZ2V0X2ZiX3NyYW1fY29uZih1bnNpZ25lZCBsb25nIHN0YXJ0X2F2YWlsLCB1bnNpZ25lZCBzaXplX2F2YWlsLAotCQkgICAgICB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKLXsKLQljb25zdCBzdHJ1Y3Qgb21hcF9mYm1lbV9jb25maWcgKmZibWVtX2NvbmY7Ci0KLQlmYm1lbV9jb25mID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX0ZCTUVNLCBzdHJ1Y3Qgb21hcF9mYm1lbV9jb25maWcpOwotCWlmIChmYm1lbV9jb25mICE9IE5VTEwpIHsKLQkJKnN0YXJ0ID0gZmJtZW1fY29uZi0+ZmJfc3JhbV9zdGFydDsKLQkJKnNpemUgPSBmYm1lbV9jb25mLT5mYl9zcmFtX3NpemU7Ci0JfSBlbHNlIHsKLQkJKnNpemUgPSAwOwotCQkqc3RhcnQgPSAwOwotCX0KLQotCWlmICgqc2l6ZSAmJiAoCi0JICAgICpzdGFydCA8IHN0YXJ0X2F2YWlsIHx8Ci0JICAgICpzdGFydCArICpzaXplID4gc3RhcnRfYXZhaWwgKyBzaXplX2F2YWlsKSkgewotCQlwcmludGsoS0VSTl9FUlIgImludmFsaWQgRkIgU1JBTSBjb25maWd1cmF0aW9uXG4iKTsKLQkJKnN0YXJ0ID0gc3RhcnRfYXZhaWw7Ci0JCSpzaXplID0gc2l6ZV9hdmFpbDsKLQl9Ci0KLQlpZiAoKnNpemUpCi0JCXByX2luZm8oIlJlc2VydmluZyAlbHUgYnl0ZXMgU1JBTSBmb3IgZnJhbWUgYnVmZmVyXG4iLCAqc2l6ZSk7Ci19Ci0KIC8qCiAgKiBUaGUgYW1vdW50IG9mIFNSQU0gZGVwZW5kcyBvbiB0aGUgY29yZSB0eXBlLgogICogTm90ZSB0aGF0IHdlIGNhbm5vdCB0cnkgdG8gdGVzdCBmb3IgU1JBTSBoZXJlIGJlY2F1c2Ugd3JpdGVzCkBAIC0xMTEsMTYgKzkwLDE2IEBACiAgKi8KIHZvaWQgX19pbml0IG9tYXBfZGV0ZWN0X3NyYW0odm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHNyYW1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKIAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCQlpZiAoaXNfc3JhbV9sb2NrZWQoKSkgewogCQkJb21hcF9zcmFtX2Jhc2UgPSBPTUFQMl9TUkFNX1BVQl9WQTsKLQkJCXNyYW1fc3RhcnQgPSBPTUFQMl9TUkFNX1BVQl9QQTsKKwkJCW9tYXBfc3JhbV9zdGFydCA9IE9NQVAyX1NSQU1fUFVCX1BBOwogCQkJb21hcF9zcmFtX3NpemUgPSAweDgwMDsgLyogMksgKi8KIAkJfSBlbHNlIHsKIAkJCW9tYXBfc3JhbV9iYXNlID0gT01BUDJfU1JBTV9WQTsKLQkJCXNyYW1fc3RhcnQgPSBPTUFQMl9TUkFNX1BBOworCQkJb21hcF9zcmFtX3N0YXJ0ID0gT01BUDJfU1JBTV9QQTsKIAkJCWlmIChjcHVfaXNfb21hcDI0MngoKSkKIAkJCQlvbWFwX3NyYW1fc2l6ZSA9IDB4YTAwMDA7IC8qIDY0MEsgKi8KIAkJCWVsc2UgaWYgKGNwdV9pc19vbWFwMjQzeCgpKQpAQCAtMTI4LDcgKzEwNyw3IEBACiAJCX0KIAl9IGVsc2UgewogCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAxX1NSQU1fVkE7Ci0JCXNyYW1fc3RhcnQgPSBPTUFQMV9TUkFNX1BBOworCQlvbWFwX3NyYW1fc3RhcnQgPSBPTUFQMV9TUkFNX1BBOwogCiAJCWlmIChjcHVfaXNfb21hcDczMCgpKQogCQkJb21hcF9zcmFtX3NpemUgPSAweDMyMDAwOwkvKiAyMDBLICovCkBAIC0xNDQsMTIgKzEyMywxMSBAQAogCQkJb21hcF9zcmFtX3NpemUgPSAweDQwMDA7CiAJCX0KIAl9Ci0JZ2V0X2ZiX3NyYW1fY29uZihzcmFtX3N0YXJ0ICsgU1JBTV9CT09UTE9BREVSX1NaLAotCQkJIG9tYXBfc3JhbV9zaXplIC0gU1JBTV9CT09UTE9BREVSX1NaLAotCQkJICZvbWFwX2ZiX3NyYW1fc3RhcnQsICZvbWFwX2ZiX3NyYW1fc2l6ZSk7Ci0JaWYgKG9tYXBfZmJfc3JhbV9zaXplKQotCQlvbWFwX3NyYW1fc2l6ZSAtPSBzcmFtX3N0YXJ0ICsgb21hcF9zcmFtX3NpemUgLQotCQkJCSAgb21hcF9mYl9zcmFtX3N0YXJ0OworCXJlc2VydmVkID0gb21hcGZiX3Jlc2VydmVfc3JhbShvbWFwX3NyYW1fc3RhcnQsIG9tYXBfc3JhbV9iYXNlLAorCQkJCSAgICAgICBvbWFwX3NyYW1fc2l6ZSwKKwkJCQkgICAgICAgb21hcF9zcmFtX3N0YXJ0ICsgU1JBTV9CT09UTE9BREVSX1NaLAorCQkJCSAgICAgICBvbWFwX3NyYW1fc2l6ZSAtIFNSQU1fQk9PVExPQURFUl9TWik7CisJb21hcF9zcmFtX3NpemUgLT0gcmVzZXJ2ZWQ7CiAJb21hcF9zcmFtX2NlaWwgPSBvbWFwX3NyYW1fYmFzZSArIG9tYXBfc3JhbV9zaXplOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvdGltZXIzMmsuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC90aW1lcjMyay5jCmluZGV4IDExNGY4NzEuLjJmZWNlZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC90aW1lcjMyay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC90aW1lcjMyay5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gb21hcF8zMmtfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICIzMktIeiB0aW1lciIsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKIAkuaGFuZGxlcgk9IG9tYXBfMzJrX3RpbWVyX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwppbmRleCA3ZTgwOTY4Li5hNWFlZGY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCkBAIC0zNyw5ICszNywyNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQorCisjZGVmaW5lIElOVF9VU0JfSVJRX0dFTgkJSUgyX0JBU0UgKyAyMAorI2RlZmluZSBJTlRfVVNCX0lSUV9OSVNPCUlIMl9CQVNFICsgMzAKKyNkZWZpbmUgSU5UX1VTQl9JUlFfSVNPCQlJSDJfQkFTRSArIDI5CisjZGVmaW5lIElOVF9VU0JfSVJRX0hHRU4JSU5UX1VTQl9ISENfMQorI2RlZmluZSBJTlRfVVNCX0lSUV9PVEcJCUlIMl9CQVNFICsgOAorCisjZWxzZQorCisjZGVmaW5lIElOVF9VU0JfSVJRX0dFTgkJSU5UXzI0WFhfVVNCX0lSUV9HRU4KKyNkZWZpbmUgSU5UX1VTQl9JUlFfTklTTwlJTlRfMjRYWF9VU0JfSVJRX05JU08KKyNkZWZpbmUgSU5UX1VTQl9JUlFfSVNPCQlJTlRfMjRYWF9VU0JfSVJRX0lTTworI2RlZmluZSBJTlRfVVNCX0lSUV9IR0VOCUlOVF8yNFhYX1VTQl9JUlFfSEdFTgorI2RlZmluZSBJTlRfVVNCX0lSUV9PVEcJCUlOVF8yNFhYX1VTQl9JUlFfT1RHCisKKyNlbmRpZgorCisKIC8qIFRoZXNlIHJvdXRpbmVzIHNob3VsZCBoYW5kbGUgdGhlIHN0YW5kYXJkIGNoaXAtc3BlY2lmaWMgbW9kZXMKICAqIGZvciB1c2IwLzEvMiBwb3J0cywgY292ZXJpbmcgYmFzaWMgbXV4IGFuZCB0cmFuc2NlaXZlciBzZXR1cC4KLSAqIENhbGwgb21hcF91c2JfaW5pdCgpIG9uY2UsIGZyb20gSU5JVF9NQUNISU5FKCkuCiAgKgogICogU29tZSBib2FyZC0qLmMgZmlsZXMgd2lsbCBuZWVkIHRvIHNldCB1cCBhZGRpdGlvbmFsIG11eCBvcHRpb25zLAogICogbGlrZSBmb3Igc3VzcGVuZCBoYW5kbGluZywgdmJ1cyBzZW5zaW5nLCBHUElPcywgYW5kIHRoZSBEKyBwdWxsdXAuCkBAIC05NiwxOSArMTE0LDI2IEBACiB7CiAJdTMyCXN5c2NvbjEgPSAwOwogCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlDT05UUk9MX0RFVkNPTkZfUkVHICY9IH5VU0JUMFdSTU9ERUkoVVNCX0JJRElSX1RMTCk7CisKIAlpZiAobndpcmVzID09IDApIHsKLQkJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkgeworCQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkgJiYgIWNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCQkvKiBwdWxsZG93biBEKy9ELSAqLwogCQkJVVNCX1RSQU5TQ0VJVkVSX0NUUkxfUkVHICY9IH4oMyA8PCAxKTsKIAkJfQogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoaXNfZGV2aWNlKQotCQlvbWFwX2NmZ19yZWcoVzRfVVNCX1BVRU4pOworCWlmIChpc19kZXZpY2UpIHsKKwkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQkJb21hcF9jZmdfcmVnKEoyMF8yNFhYX1VTQjBfUFVFTik7CisJCWVsc2UKKwkJCW9tYXBfY2ZnX3JlZyhXNF9VU0JfUFVFTik7CisJfQogCi0JLyogaW50ZXJuYWwgdHJhbnNjZWl2ZXIgKi8KLQlpZiAobndpcmVzID09IDIpIHsKKwkvKiBpbnRlcm5hbCB0cmFuc2NlaXZlciAodW5hdmFpbGFibGUgb24gMTd4eCwgMjR4eCkgKi8KKwlpZiAoIWNwdV9jbGFzc19pc19vbWFwMigpICYmIG53aXJlcyA9PSAyKSB7CiAJCS8vIG9tYXBfY2ZnX3JlZyhQOV9VU0JfRFApOwogCQkvLyBvbWFwX2NmZ19yZWcoUjhfVVNCX0RNKTsKIApAQCAtMTM2LDI5ICsxNjEsNTAgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0Jb21hcF9jZmdfcmVnKFY2X1VTQjBfVFhEKTsKLQlvbWFwX2NmZ19yZWcoVzlfVVNCMF9UWEVOKTsKLQlvbWFwX2NmZ19yZWcoVzVfVVNCMF9TRTApOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlvbWFwX2NmZ19yZWcoSzE4XzI0WFhfVVNCMF9EQVQpOworCQlvbWFwX2NmZ19yZWcoSzE5XzI0WFhfVVNCMF9UWEVOKTsKKwkJb21hcF9jZmdfcmVnKEoxNF8yNFhYX1VTQjBfU0UwKTsKKwkJaWYgKG53aXJlcyAhPSAzKQorCQkJb21hcF9jZmdfcmVnKEoxOF8yNFhYX1VTQjBfUkNWKTsKKwl9IGVsc2UgeworCQlvbWFwX2NmZ19yZWcoVjZfVVNCMF9UWEQpOworCQlvbWFwX2NmZ19yZWcoVzlfVVNCMF9UWEVOKTsKKwkJb21hcF9jZmdfcmVnKFc1X1VTQjBfU0UwKTsKKwkJaWYgKG53aXJlcyAhPSAzKQorCQkJb21hcF9jZmdfcmVnKFk1X1VTQjBfUkNWKTsKKwl9CiAKLQkvKiBOT1RFOiAgU1BFRUQgYW5kIFNVU1AgYXJlbid0IGNvbmZpZ3VyZWQgaGVyZSAqLworCS8qIE5PVEU6ICBTUEVFRCBhbmQgU1VTUCBhcmVuJ3QgY29uZmlndXJlZCBoZXJlLiAgT1RHIGhvc3RzCisJICogbWF5IGJlIGFibGUgdG8gdXNlIEkyQyByZXF1ZXN0cyB0byBzZXQgdGhvc2UgYml0cyBhbG9uZworCSAqIHdpdGggVkJVUyBzd2l0Y2hpbmcgYW5kIG92ZXJjdXJyZW50IGRldGVjdGlvbi4KKwkgKi8KIAotCWlmIChud2lyZXMgIT0gMykKLQkJb21hcF9jZmdfcmVnKFk1X1VTQjBfUkNWKTsKLQlpZiAobndpcmVzICE9IDYpCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpICYmIG53aXJlcyAhPSA2KQogCQlVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUcgJj0gfkNPTkZfVVNCMl9VTklfUjsKIAogCXN3aXRjaCAobndpcmVzKSB7CiAJY2FzZSAzOgogCQlzeXNjb24xID0gMjsKKwkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQkJQ09OVFJPTF9ERVZDT05GX1JFRyB8PSBVU0JUMFdSTU9ERUkoVVNCX0JJRElSKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgogCQlzeXNjb24xID0gMTsKKwkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQkJQ09OVFJPTF9ERVZDT05GX1JFRyB8PSBVU0JUMFdSTU9ERUkoVVNCX0JJRElSKTsKIAkJYnJlYWs7CiAJY2FzZSA2OgogCQlzeXNjb24xID0gMzsKLQkJb21hcF9jZmdfcmVnKEFBOV9VU0IwX1ZQKTsKLQkJb21hcF9jZmdfcmVnKFI5X1VTQjBfVk0pOwotCQlVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUcgfD0gQ09ORl9VU0IyX1VOSV9SOworCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJCW9tYXBfY2ZnX3JlZyhKMTlfMjRYWF9VU0IwX1ZQKTsKKwkJCW9tYXBfY2ZnX3JlZyhLMjBfMjRYWF9VU0IwX1ZNKTsKKwkJCUNPTlRST0xfREVWQ09ORl9SRUcgfD0gVVNCVDBXUk1PREVJKFVTQl9VTklESVIpOworCQl9IGVsc2UgeworCQkJb21hcF9jZmdfcmVnKEFBOV9VU0IwX1ZQKTsKKwkJCW9tYXBfY2ZnX3JlZyhSOV9VU0IwX1ZNKTsKKwkJCVVTQl9UUkFOU0NFSVZFUl9DVFJMX1JFRyB8PSBDT05GX1VTQjJfVU5JX1I7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJpbGxlZ2FsIHVzYiVkICVkLXdpcmUgdHJhbnNjZWl2ZXJcbiIsCkBAIC0xNzEsMTQgKzIxNywyMiBAQAogewogCXUzMglzeXNjb24xID0gMDsKIAotCWlmIChud2lyZXMgIT0gNiAmJiAhY3B1X2lzX29tYXAxNXh4KCkpCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpICYmICFjcHVfaXNfb21hcDE1eHgoKSAmJiBud2lyZXMgIT0gNikKIAkJVVNCX1RSQU5TQ0VJVkVSX0NUUkxfUkVHICY9IH5DT05GX1VTQjFfVU5JX1I7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlDT05UUk9MX0RFVkNPTkZfUkVHICY9IH5VU0JUMVdSTU9ERUkoVVNCX0JJRElSX1RMTCk7CisKIAlpZiAobndpcmVzID09IDApCiAJCXJldHVybiAwOwogCiAJLyogZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKi8KLQlvbWFwX2NmZ19yZWcoVVNCMV9UWEQpOwotCW9tYXBfY2ZnX3JlZyhVU0IxX1RYRU4pOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlvbWFwX2NmZ19yZWcoVVNCMV9UWEQpOworCQlvbWFwX2NmZ19yZWcoVVNCMV9UWEVOKTsKKwkJaWYgKG53aXJlcyAhPSAzKQorCQkJb21hcF9jZmdfcmVnKFVTQjFfUkNWKTsKKwl9CisKIAlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJb21hcF9jZmdfcmVnKFVTQjFfU0VPKTsKIAkJb21hcF9jZmdfcmVnKFVTQjFfU1BFRUQpOwpAQCAtMTkwLDIwICsyNDQsMzggQEAKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTcxMCgpKSB7CiAJCW9tYXBfY2ZnX3JlZyhSMTNfMTcxMF9VU0IxX1NFMCk7CiAJCS8vIFNVU1AKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCS8qIE5PVEU6ICBib2FyZC1zcGVjaWZpYyBjb2RlIG11c3Qgc2V0IHVwIHBpbiBtdXhpbmcgZm9yIHVzYjEsCisJCSAqIHNpbmNlIGVhY2ggc2lnbmFsIGNvdWxkIGNvbWUgb3V0IG9uIGVpdGhlciBvZiB0d28gYmFsbHMuCisJCSAqLwogCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCJ1c2IgdW5yZWNvZ25pemVkXG4iKTsKKwkJcHJfZGVidWcoInVzYiVkIGNwdSB1bnJlY29nbml6ZWRcbiIsIDEpOworCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKG53aXJlcyAhPSAzKQotCQlvbWFwX2NmZ19yZWcoVVNCMV9SQ1YpOwogCiAJc3dpdGNoIChud2lyZXMpIHsKKwljYXNlIDI6CisJCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCQlnb3RvIGJhZDsKKwkJLyogTk9URTogYm9hcmQtc3BlY2lmaWMgY29kZSBtdXN0IG92ZXJyaWRlIHRoaXMgc2V0dGluZyBpZgorCQkgKiB0aGlzIFRMTCBsaW5rIGlzIG5vdCB1c2luZyBEUC9ETQorCQkgKi8KKwkJc3lzY29uMSA9IDE7CisJCUNPTlRST0xfREVWQ09ORl9SRUcgfD0gVVNCVDFXUk1PREVJKFVTQl9CSURJUl9UTEwpOworCQlicmVhazsKIAljYXNlIDM6CiAJCXN5c2NvbjEgPSAyOworCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCQlDT05UUk9MX0RFVkNPTkZfUkVHIHw9IFVTQlQxV1JNT0RFSShVU0JfQklESVIpOwogCQlicmVhazsKIAljYXNlIDQ6CiAJCXN5c2NvbjEgPSAxOworCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCQlDT05UUk9MX0RFVkNPTkZfUkVHIHw9IFVTQlQxV1JNT0RFSShVU0JfQklESVIpOwogCQlicmVhazsKIAljYXNlIDY6CisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJCWdvdG8gYmFkOwogCQlzeXNjb24xID0gMzsKIAkJb21hcF9jZmdfcmVnKFVTQjFfVlApOwogCQlvbWFwX2NmZ19yZWcoVVNCMV9WTSk7CkBAIC0yMTEsNiArMjgzLDcgQEAKIAkJCVVTQl9UUkFOU0NFSVZFUl9DVFJMX1JFRyB8PSBDT05GX1VTQjFfVU5JX1I7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CitiYWQ6CiAJCXByaW50ayhLRVJOX0VSUiAiaWxsZWdhbCB1c2IlZCAlZC13aXJlIHRyYW5zY2VpdmVyXG4iLAogCQkJMSwgbndpcmVzKTsKIAl9CkBAIC0yMjEsMTAgKzI5NCwxNyBAQAogewogCXUzMglzeXNjb24xID0gMDsKIAotCS8qIE5PVEUgZXJyYXR1bTogbXVzdCBsZWF2ZSBVU0IyX1VOSV9SIHNldCBpZiB1c2IwIGluIHVzZSAqLworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlDT05UUk9MX0RFVkNPTkZfUkVHICY9IH4oVVNCVDJXUk1PREVJKFVTQl9CSURJUl9UTEwpCisJCQkJCXwgVVNCVDJUTEw1UEkpOworCQlhbHRfcGluZ3JvdXAgPSAwOworCX0KKworCS8qIE5PVEUgb21hcDEgZXJyYXR1bTogbXVzdCBsZWF2ZSBVU0IyX1VOSV9SIHNldCBpZiB1c2IwIGluIHVzZSAqLwogCWlmIChhbHRfcGluZ3JvdXAgfHwgbndpcmVzID09IDApCiAJCXJldHVybiAwOwotCWlmIChud2lyZXMgIT0gNiAmJiAhY3B1X2lzX29tYXAxNXh4KCkpCisKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkgJiYgIWNwdV9pc19vbWFwMTV4eCgpICYmIG53aXJlcyAhPSA2KQogCQlVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUcgJj0gfkNPTkZfVVNCMl9VTklfUjsKIAogCS8qIGV4dGVybmFsIHRyYW5zY2VpdmVyICovCkBAIC0yNDIsMTkgKzMyMiw1NCBAQAogCQlpZiAobndpcmVzICE9IDMpCiAJCQlvbWFwX2NmZ19yZWcoWTVfVVNCMl9SQ1YpOwogCQkvLyBGSVhNRSBvbWFwX2NmZ19yZWcoVVNCMl9TUEVFRCk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlvbWFwX2NmZ19yZWcoWTExXzI0WFhfVVNCMl9EQVQpOworCQlvbWFwX2NmZ19yZWcoQUExMF8yNFhYX1VTQjJfU0UwKTsKKwkJaWYgKG53aXJlcyA+IDIpCisJCQlvbWFwX2NmZ19yZWcoQUExMl8yNFhYX1VTQjJfVFhFTik7CisJCWlmIChud2lyZXMgPiAzKQorCQkJb21hcF9jZmdfcmVnKEFBNl8yNFhYX1VTQjJfUkNWKTsKIAl9IGVsc2UgewotCQlwcl9kZWJ1ZygidXNiIHVucmVjb2duaXplZFxuIik7CisJCXByX2RlYnVnKCJ1c2IlZCBjcHUgdW5yZWNvZ25pemVkXG4iLCAxKTsKKwkJcmV0dXJuIDA7CiAJfQotCS8vIG9tYXBfY2ZnX3JlZyhVU0IyX1NVU1ApOworCS8vIGlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgb21hcF9jZmdfcmVnKFVTQjJfU1VTUCk7CiAKIAlzd2l0Y2ggKG53aXJlcykgeworCWNhc2UgMjoKKwkJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKKwkJCWdvdG8gYmFkOworCQkvKiBOT1RFOiBib2FyZC1zcGVjaWZpYyBjb2RlIG11c3Qgb3ZlcnJpZGUgdGhpcyBzZXR0aW5nIGlmCisJCSAqIHRoaXMgVExMIGxpbmsgaXMgbm90IHVzaW5nIERQL0RNCisJCSAqLworCQlzeXNjb24xID0gMTsKKwkJQ09OVFJPTF9ERVZDT05GX1JFRyB8PSBVU0JUMldSTU9ERUkoVVNCX0JJRElSX1RMTCk7CisJCWJyZWFrOwogCWNhc2UgMzoKIAkJc3lzY29uMSA9IDI7CisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJCUNPTlRST0xfREVWQ09ORl9SRUcgfD0gVVNCVDJXUk1PREVJKFVTQl9CSURJUik7CiAJCWJyZWFrOwogCWNhc2UgNDoKIAkJc3lzY29uMSA9IDE7CisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJCUNPTlRST0xfREVWQ09ORl9SRUcgfD0gVVNCVDJXUk1PREVJKFVTQl9CSURJUik7CisJCWJyZWFrOworCWNhc2UgNToKKwkJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKKwkJCWdvdG8gYmFkOworCQlvbWFwX2NmZ19yZWcoQUE0XzI0WFhfVVNCMl9UTExTRTApOworCQkvKiBOT1RFOiBib2FyZC1zcGVjaWZpYyBjb2RlIG11c3Qgb3ZlcnJpZGUgdGhpcyBzZXR0aW5nIGlmCisJCSAqIHRoaXMgVExMIGxpbmsgaXMgbm90IHVzaW5nIERQL0RNLiAgU29tZXRoaW5nIG11c3QgYWxzbworCQkgKiBzZXQgdXAgT1RHX1NZU0NPTjIuSE1DX1RMTHtBVFRBQ0gsU1BFRUR9CisJCSAqLworCQlzeXNjb24xID0gMzsKKwkJQ09OVFJPTF9ERVZDT05GX1JFRyB8PSBVU0JUMldSTU9ERUkoVVNCX1VOSURJUl9UTEwpCisJCQkJCXwgVVNCVDJUTEw1UEk7CiAJCWJyZWFrOwogCWNhc2UgNjoKKwkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQkJZ290byBiYWQ7CiAJCXN5c2NvbjEgPSAzOwogCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJCW9tYXBfY2ZnX3JlZyhVU0IyX1ZQKTsKQEAgLTI2Niw2ICszODEsNyBAQAogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CitiYWQ6CiAJCXByaW50ayhLRVJOX0VSUiAiaWxsZWdhbCB1c2IlZCAlZC13aXJlIHRyYW5zY2VpdmVyXG4iLAogCQkJMiwgbndpcmVzKTsKIAl9CkBAIC0yOTQsMTMgKzQxMCwxMyBAQAogCQkuZW5kCQk9IFVEQ19CQVNFICsgMHhmZiwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsJCS8qIGdlbmVyYWwgSVJRICovCi0JCS5zdGFydAkJPSBJSDJfQkFTRSArIDIwLAorCQkuc3RhcnQJCT0gSU5UX1VTQl9JUlFfR0VOLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwgewkJLyogUElPIElSUSAqLwotCQkuc3RhcnQJCT0gSUgyX0JBU0UgKyAzMCwKKwkJLnN0YXJ0CQk9IElOVF9VU0JfSVJRX05JU08sCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKIAl9LCB7CQkvKiBTT0YgSVJRICovCi0JCS5zdGFydAkJPSBJSDJfQkFTRSArIDI5LAorCQkuc3RhcnQJCT0gSU5UX1VTQl9JUlFfSVNPLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0zMjksMTEgKzQ0NSwxMSBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvaGNpX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0CT0gT01BUF9PSENJX0JBU0UsCi0JCS5lbmQJPSBPTUFQX09IQ0lfQkFTRSArIDQwOTYgLSAxLAorCQkuZW5kCT0gT01BUF9PSENJX0JBU0UgKyAweGZmLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCXsKLQkJLnN0YXJ0CT0gSU5UX1VTQl9ISENfMSwKKwkJLnN0YXJ0CT0gSU5UX1VTQl9JUlFfSEdFTiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0zNjEsNyArNDc3LDcgQEAKIAkJLmVuZAkJPSBPVEdfQkFTRSArIDB4ZmYsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5zdGFydAkJPSBJSDJfQkFTRSArIDgsCisJCS5zdGFydAkJPSBJTlRfVVNCX0lSUV9PVEcsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTM4NSw3ICs1MDEsNyBAQAogCiAKIC8vIEZJWE1FIGNvcnJlY3QgYW5zd2VyIGRlcGVuZHMgb24gaG1jX21vZGUsCi0vLyBhcyBkb2VzIGFueSBub256ZXJvIHZhbHVlIGZvciBjb25maWctPm90ZyBwb3J0IG51bWJlcgorLy8gYXMgZG9lcyAob24gb21hcDEpIGFueSBub256ZXJvIHZhbHVlIGZvciBjb25maWctPm90ZyBwb3J0IG51bWJlcgogI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX09NQVAKICNkZWZpbmUJaXNfdXNiMF9kZXZpY2UoY29uZmlnKQkxCiAjZWxzZQpAQCAtNDI2LDEyICs1NDIsMTMgQEAKIAlpZiAoY29uZmlnLT5vdGcpCiAJCXN5c2NvbiB8PSBPVEdfRU47CiAjZW5kaWYKLQlwcl9kZWJ1ZygiVVNCX1RSQU5TQ0VJVkVSX0NUUkxfUkVHID0gJTAzeFxuIiwgVVNCX1RSQU5TQ0VJVkVSX0NUUkxfUkVHKTsKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCXByX2RlYnVnKCJVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUcgPSAlMDN4XG4iLCBVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUcpOwogCXByX2RlYnVnKCJPVEdfU1lTQ09OXzJfUkVHID0gJTA4eFxuIiwgc3lzY29uKTsKIAlPVEdfU1lTQ09OXzJfUkVHID0gc3lzY29uOwogCiAJcHJpbnRrKCJVU0I6IGhtYyAlZCIsIGNvbmZpZy0+aG1jX21vZGUpOwotCWlmIChhbHRfcGluZ3JvdXApCisJaWYgKCFhbHRfcGluZ3JvdXApCiAJCXByaW50aygiLCB1c2IyIGFsdCAlZCB3aXJlcyIsIGNvbmZpZy0+cGluc1syXSk7CiAJZWxzZSBpZiAoY29uZmlnLT5waW5zWzBdKQogCQlwcmludGsoIiwgdXNiMCAlZCB3aXJlcyVzIiwgY29uZmlnLT5waW5zWzBdLApAQCAtNDQ0LDEwICs1NjEsMTIgQEAKIAkJcHJpbnRrKCIsIE1pbmktQUIgb24gdXNiJWQiLCBjb25maWctPm90ZyAtIDEpOwogCXByaW50aygiXG4iKTsKIAotCS8qIGxlYXZlIFVTQiBjbG9ja3MvY29udHJvbGxlcnMgb2ZmIHVudGlsIG5lZWRlZCAqLwotCVVMUERfU09GVF9SRVFfUkVHICY9IH5TT0ZUX1VTQl9DTEtfUkVROwotCVVMUERfQ0xPQ0tfQ1RSTF9SRUcgJj0gflVTQl9NQ0xLX0VOOwotCVVMUERfQ0xPQ0tfQ1RSTF9SRUcgfD0gRElTX1VTQl9QVkNJX0NMSzsKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJLyogbGVhdmUgVVNCIGNsb2Nrcy9jb250cm9sbGVycyBvZmYgdW50aWwgbmVlZGVkICovCisJCVVMUERfU09GVF9SRVFfUkVHICY9IH5TT0ZUX1VTQl9DTEtfUkVROworCQlVTFBEX0NMT0NLX0NUUkxfUkVHICY9IH5VU0JfTUNMS19FTjsKKwkJVUxQRF9DTE9DS19DVFJMX1JFRyB8PSBESVNfVVNCX1BWQ0lfQ0xLOworCX0KIAlzeXNjb24gPSBPVEdfU1lTQ09OXzFfUkVHOwogCXN5c2NvbiB8PSBIU1RfSURMRV9FTnxERVZfSURMRV9FTnxPVEdfSURMRV9FTjsKIApAQCAtNTg1LDcgKzcwNCw3IEBACiAJfQogCXBsYXRmb3JtX2RhdGEgPSAqY29uZmlnOwogCi0JaWYgKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNnh4KCkpCisJaWYgKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2lzX29tYXAyNHh4KCkpCiAJCW9tYXBfb3RnX2luaXQoJnBsYXRmb3JtX2RhdGEpOwogCWVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQlvbWFwXzE1MTBfdXNiX2luaXQoJnBsYXRmb3JtX2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYwppbmRleCA5MDhlZmE3Li43ZWQxOWIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KQEAgLTI5LDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTkyLDYgKzE5NCw5IEBACiAJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRjYsIDEpOwogCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEY3LCAxKTsKIAorCWlmIChtYWNoaW5lX2lzX3NtZGsyNDQzKCkpCisJCXNtZGtfbmFuZF9pbmZvLnR3cnBoMCA9IDUwOworCiAJczNjX2RldmljZV9uYW5kLmRldi5wbGF0Zm9ybV9kYXRhID0gJnNtZGtfbmFuZF9pbmZvOwogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoc21ka19kZXZzLCBBUlJBWV9TSVpFKHNtZGtfZGV2cykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKaW5kZXggMGZlNTNiMy4uNTg3NWRhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc3BpLmg+CiAKIC8qIFNlcmlhbCBwb3J0IHJlZ2lzdHJhdGlvbnMgKi8KIApAQCAtNDAyLDYgKzQwMywzNiBAQAogCiBFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2Vfc2RpKTsKIAorLyogSGlnaC1zcGVlZCBNTUMvU0QgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfaHNtbWNfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzI0NDNfUEFfSFNNTUMsCisJCS5lbmQgICA9IFMzQzI0NDNfUEFfSFNNTUMgKyBTM0MyNDQzX1NaX0hTTU1DIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9TM0MyNDQzX0hTTU1DLAorCQkuZW5kICAgPSBJUlFfUzNDMjQ0M19IU01NQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHU2NCBzM2NfZGV2aWNlX2hzbW1jX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9oc21tYyA9IHsKKwkubmFtZQkJICA9ICJzM2Mtc2RoY2kiLAorCS5pZAkJICA9IC0xLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY19oc21tY19yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfaHNtbWNfcmVzb3VyY2UsCisJLmRldiAgICAgICAgICAgICAgPSB7CisJCS5kbWFfbWFzayA9ICZzM2NfZGV2aWNlX2hzbW1jX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTAorCX0KK307CisKKworCiAvKiBTUEkgKDApICovCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX3NwaTBfcmVzb3VyY2VbXSA9IHsKQEAgLTQzNyw4ICs0NjgsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY19zcGkxX3Jlc291cmNlW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQgPSBTM0MyNFhYX1BBX1NQSSArIDB4MjAsCi0JCS5lbmQgICA9IFMzQzI0WFhfUEFfU1BJICsgMHgyMCArIDB4MWYsCisJCS5zdGFydCA9IFMzQzI0WFhfUEFfU1BJICsgUzNDMjQxMF9TUEkxLAorCQkuZW5kICAgPSBTM0MyNFhYX1BBX1NQSSArIFMzQzI0MTBfU1BJMSArIDB4MWYsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCmluZGV4IDZmMDNjOTMuLjA4ZDgwZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKQEAgLTExNTMsNyArMTE1Myw3IEBACiAgKgogICogaHdjZmc6ICAgICB0aGUgdmFsdWUgZm9yIHh4eFNUQ24gcmVnaXN0ZXIsCiAgKiAgICAgICAgICAgIGJpdCAwOiAwPWluY3JlbWVudCBwb2ludGVyLCAxPWxlYXZlIHBvaW50ZXIKLSAqICAgICAgICAgICAgYml0IDE6IDA9c291Y3JlIGlzIEFIQiwgMT1zb3VjcmUgaXMgQVBCCisgKiAgICAgICAgICAgIGJpdCAxOiAwPXNvdXJjZSBpcyBBSEIsIDE9c291cmNlIGlzIEFQQgogICoKICAqIGRldmFkZHI6ICAgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgc291cmNlCiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLXNpbXRlYy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLXNpbXRlYy5jCmluZGV4IGJkOTY1ZjIuLmNiMGIzYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0tc2ltdGVjLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0uYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCmluZGV4IGM2YjAzZjguLjU2OTJlY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCkBAIC01NTUsNyArNTU1LDcgQEAKIAlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRQTkQpLCBTM0MyNDEwX0lOVFBORCk7CiAJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwgUzNDMjQxMF9TUkNQTkQpOwogCi0JLyogY2FsbCBjcHUgc3BlY2lmaWMgcHJlcGVyYXRpb24gKi8KKwkvKiBjYWxsIGNwdSBzcGVjaWZpYyBwcmVwYXJhdGlvbiAqLwogCiAJcG1fY3B1X3ByZXAoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUwppbmRleCA0MzUzNDlkLi43YjdhZTc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUwpAQCAtMSw0ICsxLDQgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TCisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC90aW1lLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvdGltZS5jCmluZGV4IGM1MjNkMWMuLmI3NjY3MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3RpbWUuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHMzYzI0MTBfdGltZXJfaXJxID0gewogCS5uYW1lCQk9ICJTM0MyNDEwIFRpbWVyIFRpY2siLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLmhhbmRsZXIJPSBzM2MyNDEwX3RpbWVyX2ludGVycnVwdCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IGIxMTQyY2UuLjBhOWE1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IE1vbiBBcHIgMTYgMjE6MDE6MDQgMjAwNworIyBMYXN0IHVwZGF0ZTogRnJpIE1heSAxMSAxOTo1Mzo0MSAyMDA3CiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTEzMzUsMyArMTMzNSwzNSBAQAogY29tdGVjaF9yb3V0ZXIJCU1BQ0hfQ09NVEVDSF9ST1VURVIJQ09NVEVDSF9ST1VURVIJCTEzMjcKIHNiYzI0MTB4CQlNQUNIX1NCQzI0MTBYCQlTQkMyNDEwWAkJMTMyOAogYXQ0eDBiZAkJCU1BQ0hfQVQ0WDBCRAkJQVQ0WDBCRAkJCTEzMjkKK2NiaWZyCQkJTUFDSF9DQklGUgkJQ0JJRlIJCQkxMzMwCithcmNvbV9xdWFudHVtCQlNQUNIX0FSQ09NX1FVQU5UVU0JQVJDT01fUVVBTlRVTQkJMTMzMQorbWF0cml4NTIwCQlNQUNIX01BVFJJWDUyMAkJTUFUUklYNTIwCQkxMzMyCittYXRyaXg1MTAJCU1BQ0hfTUFUUklYNTEwCQlNQVRSSVg1MTAJCTEzMzMKK21hdHJpeDUwMAkJTUFDSF9NQVRSSVg1MDAJCU1BVFJJWDUwMAkJMTMzNAorbTUwMQkJCU1BQ0hfTTUwMQkJTTUwMQkJCTEzMzUKK2FhZW9uMTI3MAkJTUFDSF9BQUVPTjEyNzAJCUFBRU9OMTI3MAkJMTMzNgorbWF0cml4NTAwZXYJCU1BQ0hfTUFUUklYNTAwRVYJTUFUUklYNTAwRVYJCTEzMzcKK3BhYzUwMAkJCU1BQ0hfUEFDNTAwCQlQQUM1MDAJCQkxMzM4Citwbng4MTgxCQkJTUFDSF9QTlg4MTgxCQlQTlg4MTgxCQkJMTMzOQorY29saWJyaTMyMAkJTUFDSF9DT0xJQlJJMzIwCQlDT0xJQlJJMzIwCQkxMzQwCithenRvb2xiYgkJTUFDSF9BWlRPT0xCQgkJQVpUT09MQkIJCTEzNDEKK2F6dG9vbGcyCQlNQUNIX0FaVE9PTEcyCQlBWlRPT0xHMgkJMTM0MgorZHZsaG9zdAkJCU1BQ0hfRFZMSE9TVAkJRFZMSE9TVAkJCTEzNDMKK3ppcjkyMDAJCQlNQUNIX1pJUjkyMDAJCVpJUjkyMDAJCQkxMzQ0Cit6aXI5MjYwCQkJTUFDSF9aSVI5MjYwCQlaSVI5MjYwCQkJMTM0NQorY29jb3BhaAkJCU1BQ0hfQ09DT1BBSAkJQ09DT1BBSAkJCTEzNDYKK25kcwkJCU1BQ0hfTkRTCQlORFMJCQkxMzQ3Cityb3NlbmNyYW50egkJTUFDSF9ST1NFTkNSQU5UWglST1NFTkNSQU5UWgkJMTM0OAorZnR0eF9vZHNjCQlNQUNIX0ZUVFhfT0RTQwkJRlRUWF9PRFNDCQkxMzQ5CitjbGFzc2VfcjY5MDQJCU1BQ0hfQ0xBU1NFX1I2OTA0CUNMQVNTRV9SNjkwNAkJMTM1MAorY2FtNjAJCQlNQUNIX0NBTTYwCQlDQU02MAkJCTEzNTEKK214YzMwMDMxYWRzCQlNQUNIX01YQzMwMDMxQURTCU1YQzMwMDMxQURTCQkxMzUyCitkYXRhY2FsbAkJTUFDSF9EQVRBQ0FMTAkJREFUQUNBTEwJCTEzNTMKK2F0OTFlYjAxCQlNQUNIX0FUOTFFQjAxCQlBVDkxRUIwMQkJMTM1NAorcnR5CQkJTUFDSF9SVFkJCVJUWQkJCTEzNTUKK2R3bDIxMDAJCQlNQUNIX0RXTDIxMDAJCURXTDIxMDAJCQkxMzU2Cit2aW5zaQkJCU1BQ0hfVklOU0kJCVZJTlNJCQkJMTM1NworZGI4OGY1MjgxCQlNQUNIX0RCODhGNTI4MQkJREI4OEY1MjgxCQkxMzU4Citjc2I3MjYJCQlNQUNIX0NTQjcyNgkJQ1NCNzI2CQkJMTM1OQordGlrMjcJCQlNQUNIX1RJSzI3CQlUSUsyNwkJCTEzNjAKK214X3VjNzQyMAkJTUFDSF9NWF9VQzc0MjAJCU1YX1VDNzQyMAkJMTM2MQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvYXJta3N5bXMuYyBiL2FyY2gvYXJtMjYva2VybmVsL2FybWtzeW1zLmMKaW5kZXggOTMyOTNkMC4uZjczNWQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9rZXJuZWwvYXJta3N5bXMuYworKysgYi9hcmNoL2FybTI2L2tlcm5lbC9hcm1rc3ltcy5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybTI2L2tlcm5lbC9wdHJhY2UuYwppbmRleCA5MzQzODg5Li40MTY5Mjc5IDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2FybTI2L2tlcm5lbC9wdHJhY2UuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2FybTI2L2tlcm5lbC9zaWduYWwuYwppbmRleCA2YThlZjhkLi4zNzliODJkIDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2FybTI2L2tlcm5lbC9zaWduYWwuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2tlcm5lbC92bWxpbnV4LWFybTI2LXhpcC5sZHMuaW4gYi9hcmNoL2FybTI2L2tlcm5lbC92bWxpbnV4LWFybTI2LXhpcC5sZHMuaW4KaW5kZXggMDQ2YTg1MC4uNGVjNzE1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9rZXJuZWwvdm1saW51eC1hcm0yNi14aXAubGRzLmluCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL3ZtbGludXgtYXJtMjYteGlwLmxkcy5pbgpAQCAtNjQsNyArNjQsNyBAQAogCiAJLnRleHQgOiB7CQkJLyogUmVhbCB0ZXh0IHNlZ21lbnQJCSovCiAJCV90ZXh0ID0gLjsJCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhCSovCi0JCQkqKC50ZXh0KQorCQkJVEVYVF9URVhUCiAJCQlTQ0hFRF9URVhUCiAJCQlMT0NLX1RFWFQgICAgICAgLyogRklYTUUgLSBib3Jyb3dlZCBmcm9tIGFybTMyIC0gY2hlY2sqLwogCQkJKiguZml4dXApCkBAIC0xMTEsNyArMTExLDcgQEAKIAkJLyoKIAkJICogYW5kIHRoZSB1c3VhbCBkYXRhIHNlY3Rpb24KIAkJICovCi0JCSooLmRhdGEpCisJCURBVEFfREFUQQogCQlDT05TVFJVQ1RPUlMKIAogCQkqKC5pbml0LmRhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2tlcm5lbC92bWxpbnV4LWFybTI2Lmxkcy5pbiBiL2FyY2gvYXJtMjYva2VybmVsL3ZtbGludXgtYXJtMjYubGRzLmluCmluZGV4IDFkMjk0OWUuLjZjNDRmNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYva2VybmVsL3ZtbGludXgtYXJtMjYubGRzLmluCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL3ZtbGludXgtYXJtMjYubGRzLmluCkBAIC02NSw3ICs2NSw3IEBACiAKIAkudGV4dCA6IHsJCQkvKiBSZWFsIHRleHQgc2VnbWVudAkJKi8KIAkJX3RleHQgPSAuOwkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEJKi8KLQkJCSooLnRleHQpCisJCQlURVhUX1RFWFQKIAkJCVNDSEVEX1RFWFQKIAkJCUxPQ0tfVEVYVAogCQkJKiguZml4dXApCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkJLyoKIAkJICogYW5kIHRoZSB1c3VhbCBkYXRhIHNlY3Rpb24KIAkJICovCi0JCSooLmRhdGEpCisJCURBVEFfREFUQQogCQlDT05TVFJVQ1RPUlMKIAogCQlfZWRhdGEgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9tbS9tZW1jLmMgYi9hcmNoL2FybTI2L21tL21lbWMuYwppbmRleCBmMjkwMTU4Li40MjUwNTU0IDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L21tL21lbWMuYworKysgYi9hcmNoL2FybTI2L21tL21lbWMuYwpAQCAtMTc2LDEzICsxNzYsOSBAQAogewogCXB0ZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJwdGUtY2FjaGUiLAogCQkJCXNpemVvZihwdGVfdCkgKiBQVFJTX1BFUl9QVEUsCi0JCQkJMCwgMCwgcHRlX2NhY2hlX2N0b3IsIE5VTEwpOwotCWlmICghcHRlX2NhY2hlKQotCQlCVUcoKTsKKwkJCQkwLCBTTEFCX1BBTklDLCBwdGVfY2FjaGVfY3RvciwgTlVMTCk7CiAKIAlwZ2RfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicGdkLWNhY2hlIiwgTUVNQ19UQUJMRV9TSVpFICsKIAkJCQlzaXplb2YocGdkX3QpICogUFRSU19QRVJfUEdELAotCQkJCTAsIDAsIHBnZF9jYWNoZV9jdG9yLCBOVUxMKTsKLQlpZiAoIXBnZF9jYWNoZSkKLQkJQlVHKCk7CisJCQkJMCwgU0xBQl9QQU5JQywgcGdkX2NhY2hlX2N0b3IsIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9NYWtlZmlsZSBiL2FyY2gvYXZyMzIvTWFrZWZpbGUKaW5kZXggNjExNWZjMS4uZGM2YmMwMSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9NYWtlZmlsZQorKysgYi9hcmNoL2F2cjMyL01ha2VmaWxlCkBAIC0xNiw3ICsxNiw3IEBACiBDRkxBR1NfTU9EVUxFCSs9IC1tbm8tcmVsYXgKIExERkxBR1Nfdm1saW51eAkrPSAtLXJlbGF4CiAKLWNwdWZsYWdzLSQoQ09ORklHX0NQVV9BUDcwMDApCSs9IC1tY3B1PWFwNzAwMAorY3B1ZmxhZ3MtJChDT05GSUdfQ1BVX0FUMzJBUDcwMDApCSs9IC1tY3B1PWFwNzAwMAogCiBDRkxBR1MJCSs9ICQoY3B1ZmxhZ3MteSkKIEFGTEFHUwkJKz0gJChjcHVmbGFncy15KQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMC5oIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNDllZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAwLmgKQEAgLTAsMCArMSwxNSBAQAorLyoKKyAqIEFUU1RLMTAwMCBzZXR1cCBjb2RlOiBEYXVnaHRlcmJvYXJkIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BUkNIX0FWUjMyX0JPQVJEU19BVFNUSzEwMDBfQVRTVEsxMDAwX0gKKyNkZWZpbmUgX19BUkNIX0FWUjMyX0JPQVJEU19BVFNUSzEwMDBfQVRTVEsxMDAwX0gKKworZXh0ZXJuIHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvIGF0c3RrMTAwMF9sY2RjX2RhdGE7CisKKyNlbmRpZiAvKiBfX0FSQ0hfQVZSMzJfQk9BUkRTX0FUU1RLMTAwMF9BVFNUSzEwMDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMi5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMi5jCmluZGV4IGFiZTZjYTIuLmZlMWRiZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDIuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAyLmMKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIAorI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KKwogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0MzJhcDcwMDAuaD4KQEAgLTIzLDYgKzI1LDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcG9ydG11eC5oPgogCisjaW5jbHVkZSAiYXRzdGsxMDAwLmgiCiAKICNkZWZpbmUJU1cyX0RFRkFVTFQJCS8qIE1NQ0kgYW5kIFVBUlRfQSBhdmFpbGFibGUgKi8KIApAQCAtMzEsOSArMzQsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBldGhfYWRkciBfX2luaXRkYXRhIGh3X2FkZHJbMl07Ci0KIHN0YXRpYyBzdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBldGhfZGF0YVsyXTsKLXN0YXRpYyBzdHJ1Y3QgbGNkY19wbGF0Zm9ybV9kYXRhIGF0c3RrMTAwMF9mYjBfZGF0YTsKIAogc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBzcGkwX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0gewogCXsKQEAgLTE0OCw5ICsxNDksOCBAQAogCXNldF9od19hZGRyKGF0MzJfYWRkX2RldmljZV9ldGgoMCwgJmV0aF9kYXRhWzBdKSk7CiAKIAlhdDMyX2FkZF9kZXZpY2Vfc3BpKDAsIHNwaTBfYm9hcmRfaW5mbywgQVJSQVlfU0laRShzcGkwX2JvYXJkX2luZm8pKTsKLQlhdHN0azEwMDBfZmIwX2RhdGEuZmJtZW1fc3RhcnQgPSBmYm1lbV9zdGFydDsKLQlhdHN0azEwMDBfZmIwX2RhdGEuZmJtZW1fc2l6ZSA9IGZibWVtX3NpemU7Ci0JYXQzMl9hZGRfZGV2aWNlX2xjZGMoMCwgJmF0c3RrMTAwMF9mYjBfZGF0YSk7CisJYXQzMl9hZGRfZGV2aWNlX2xjZGMoMCwgJmF0c3RrMTAwMF9sY2RjX2RhdGEsCisJCQkgICAgIGZibWVtX3N0YXJ0LCBmYm1lbV9zaXplKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL3NldHVwLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvc2V0dXAuYwppbmRleCAyYmM0Yjg4Li5jOWFmNDA5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvc2V0dXAuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvc2V0dXAuYwpAQCAtOCwxMyArOCw1NiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+CiAKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogCisjaW5jbHVkZSAiYXRzdGsxMDAwLmgiCisKIC8qIEluaXRpYWxpemVkIGJ5IGJvb3Rsb2FkZXItc3BlY2lmaWMgc3RhcnR1cCBjb2RlLiAqLwogc3RydWN0IHRhZyAqYm9vdGxvYWRlcl90YWdzIF9faW5pdGRhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIF9faW5pdGRhdGEgbHR2MzUwcXZfbW9kZXNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICIzMjB4MjQwIEAgNzUiLAorCQkucmVmcmVzaAk9IDc1LAorCQkueHJlcwkJPSAzMjAsCQkueXJlcwkJPSAyNDAsCisJCS5waXhjbG9jawk9IEtIWjJQSUNPUyg2ODkxKSwKKworCQkubGVmdF9tYXJnaW4JPSAxNywJCS5yaWdodF9tYXJnaW4JPSAzMywKKwkJLnVwcGVyX21hcmdpbgk9IDEwLAkJLmxvd2VyX21hcmdpbgk9IDEwLAorCQkuaHN5bmNfbGVuCT0gMTYsCQkudnN5bmNfbGVuCT0gMSwKKworCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9tb25zcGVjcyBfX2luaXRkYXRhIGF0c3RrMTAwMF9kZWZhdWx0X21vbnNwZWNzID0geworCS5tYW51ZmFjdHVyZXIJCT0gIlNORyIsCisJLm1vbml0b3IJCT0gIkxUVjM1MFFWIiwKKwkubW9kZWRiCQkJPSBsdHYzNTBxdl9tb2RlcywKKwkubW9kZWRiX2xlbgkJPSBBUlJBWV9TSVpFKGx0djM1MHF2X21vZGVzKSwKKwkuaGZtaW4JCQk9IDE0ODIwLAorCS5oZm1heAkJCT0gMjIyMzAsCisJLnZmbWluCQkJPSA2MCwKKwkudmZtYXgJCQk9IDkwLAorCS5kY2xrbWF4CQk9IDMwMDAwMDAwLAorfTsKKworc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gX19pbml0ZGF0YSBhdHN0azEwMDBfbGNkY19kYXRhID0geworCS5kZWZhdWx0X2JwcAkJPSAyNCwKKwkuZGVmYXVsdF9kbWFjb24JCT0gQVRNRUxfTENEQ19ETUFFTiB8IEFUTUVMX0xDRENfRE1BMkRFTiwKKwkuZGVmYXVsdF9sY2Rjb24yCT0gKEFUTUVMX0xDRENfRElTVFlQRV9URlQKKwkJCQkgICB8IEFUTUVMX0xDRENfSU5WQ0xLCisJCQkJICAgfCBBVE1FTF9MQ0RDX0NMS01PRF9BTFdBWVNBQ1RJVkUKKwkJCQkgICB8IEFUTUVMX0xDRENfTUVNT1JfQklHKSwKKwkuZGVmYXVsdF9tb25zcGVjcwk9ICZhdHN0azEwMDBfZGVmYXVsdF9tb25zcGVjcywKKwkuZ3VhcmRfdGltZQkJPSAyLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2lycS5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKaW5kZXggZmQzMTEyNC4uNjFmMmRlMiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMKQEAgLTcsMTUgKzcsNiBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGUgdXNlZCBieSB2YXJpb3VzIElSUSBoYW5kbGluZyByb3V0aW5lczoKLSAqIGFza2luZyBmb3IgZGlmZmVyZW50IElSUSdzIHNob3VsZCBiZSBkb25lIHRocm91Z2ggdGhlc2Ugcm91dGluZXMKLSAqIGluc3RlYWQgb2YganVzdCBncmFiYmluZyB0aGVtLiBUaHVzIHNldHVwcyB3aXRoIGRpZmZlcmVudCBJUlEgbnVtYmVycwotICogc2hvdWxkbid0IHJlc3VsdCBpbiBhbnkgd2VpcmQgc3VycHJpc2VzLCBhbmQgaW5zdGFsbGluZyBuZXcgaGFuZGxlcnMKLSAqIHNob3VsZCBiZSBlYXNpZXIuCi0gKgotICogSVJRJ3MgYXJlIGluIGZhY3QgaW1wbGVtZW50ZWQgYSBiaXQgbGlrZSBzaWduYWwgaGFuZGxlcnMgZm9yIHRoZSBrZXJuZWwuCi0gKiBOYXR1cmFsbHkgaXQncyBub3QgYSAxOjEgcmVsYXRpb24sIGJ1dCB0aGVyZSBhcmUgc2ltaWxhcml0aWVzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvYXZyMzIva2VybmVsL2twcm9iZXMuYwppbmRleCBkMGFiYmNhLi40OTQyZWU2IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vb2NkLmg+CiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrcHJvYmUgKiwgY3VycmVudF9rcHJvYmUpOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQoraW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKIHsKIAlzdHJ1Y3Qga3Byb2JlICpjdXIgPSBrcHJvYmVfcnVubmluZygpOwogCkBAIC0yMTYsMTEgKzIxNiw2IEBACiAJCWlmIChwb3N0X2twcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKQogCQkJcmV0ID0gTk9USUZZX1NUT1A7CiAJCWJyZWFrOwotCWNhc2UgRElFX0ZBVUxUOgotCQlpZiAoa3Byb2JlX3J1bm5pbmcoKQotCQkgICAgJiYga3Byb2JlX2ZhdWx0X2hhbmRsZXIoYXJncy0+cmVncywgYXJncy0+dHJhcG5yKSkKLQkJCXJldCA9IE5PVElGWV9TVE9QOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNGU0MTgxZS4uMTNmOTg4NCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3Byb2Nlc3MuYwpAQCAtMzMwLDEzICszMzAsMTMgQEAKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqY2hpbGRyZWdzOwogCi0JY2hpbGRyZWdzID0gKChzdHJ1Y3QgcHRfcmVncyAqKShUSFJFQURfU0laRSArICh1bnNpZ25lZCBsb25nKXAtPnRocmVhZF9pbmZvKSkgLSAxOworCWNoaWxkcmVncyA9ICgoc3RydWN0IHB0X3JlZ3MgKikoVEhSRUFEX1NJWkUgKyAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UocCkpKSAtIDE7CiAJKmNoaWxkcmVncyA9ICpyZWdzOwogCiAJaWYgKHVzZXJfbW9kZShyZWdzKSkKIAkJY2hpbGRyZWdzLT5zcCA9IHVzcDsKIAllbHNlCi0JCWNoaWxkcmVncy0+c3AgPSAodW5zaWduZWQgbG9uZylwLT50aHJlYWRfaW5mbyArIFRIUkVBRF9TSVpFOworCQljaGlsZHJlZ3MtPnNwID0gKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHApICsgVEhSRUFEX1NJWkU7CiAKIAljaGlsZHJlZ3MtPnIxMiA9IDA7IC8qIFNldCByZXR1cm4gdmFsdWUgZm9yIGNoaWxkICovCiAKQEAgLTQwMyw3ICs0MDMsNyBAQAogCWlmICghcCB8fCBwID09IGN1cnJlbnQgfHwgcC0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKQogCQlyZXR1cm4gMDsKIAotCXN0YWNrX3BhZ2UgPSAodW5zaWduZWQgbG9uZylwLT50aHJlYWRfaW5mbzsKKwlzdGFja19wYWdlID0gKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHApOwogCUJVR19PTighc3RhY2tfcGFnZSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9wdHJhY2UuYwppbmRleCA2ZjQzODhmLi4zYzM2YzJkIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9wdHJhY2UuYwpAQCAtOSw3ICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KQEAgLTIxLDExICsyMCwxMSBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL29jZC5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KIAogc3RhdGljIHN0cnVjdCBwdF9yZWdzICpnZXRfdXNlcl9yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCXJldHVybiAoc3RydWN0IHB0X3JlZ3MgKikoKHVuc2lnbmVkIGxvbmcpIHRzay0+dGhyZWFkX2luZm8gKworCXJldHVybiAoc3RydWN0IHB0X3JlZ3MgKikoKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHRzaykgKwogCQkJCSAgVEhSRUFEX1NJWkUgLSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKIH0KIApAQCAtMzAwLDcgKzI5OSw3IEBACiAJZWxzZQogCQlkaWVfdmFsID0gRElFX0JSRUFLUE9JTlQ7CiAKLQlpZiAobm90aWZ5X2RpZShkaWVfdmFsLCByZWdzLCAwLCBTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkKKwlpZiAobm90aWZ5X2RpZShkaWVfdmFsLCAicHRyYWNlIiwgcmVncywgMCwgMCwgU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCiAJCXJldHVybjsKIAogCWlmIChsaWtlbHkoZHMgJiBEU19TU1MpKSB7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggN2MyNzk1OC4uNzVjODFmMiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGxfdGFibGUuUwpAQCAtMjkxLDQgKzI5MSw4IEBACiAJLmxvbmcJc3lzX3NobWdldAkJLyogMjc1ICovCiAJLmxvbmcJc3lzX3NobWR0CiAJLmxvbmcJc3lzX3NobWN0bAorCS5sb25nCXN5c191dGltZW5zYXQKKwkubG9uZwlzeXNfc2lnbmFsZmQKKwkubG9uZwlzeXNfdGltZXJmZAkJLyogMjgwICovCisJLmxvbmcJc3lzX2V2ZW50ZmQKIAkubG9uZwlzeXNfbmlfc3lzY2FsbAkJLyogcjggaXMgc2F0dXJhdGVkIGF0IG5yX3N5c2NhbGxzICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvdHJhcHMuYwppbmRleCA0ZjAzODJkLi44NmQxMDc1IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3RyYXBzLmMKQEAgLTIwLDIwICsyMCw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3JlZy5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogCi1BVE9NSUNfTk9USUZJRVJfSEVBRChhdnIzMl9kaWVfY2hhaW4pOwotCi1pbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmYXZyMzJfZGllX2NoYWluLCBuYik7Ci19Ci1FWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2RpZV9ub3RpZmllcik7Ci0KLWludCB1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQotewotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmYXZyMzJfZGllX2NoYWluLCBuYik7Ci19Ci1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKTsKLQogc3RhdGljIERFRklORV9TUElOTE9DSyhkaWVfbG9jayk7CiAKIHZvaWQgTk9SRVRfVFlQRSBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpCkBAIC0xMzcsNyArMTIzLDcgQEAKIAogLyogVGhpcyB3YXkgb2YgaGFuZGxpbmcgdW5kZWZpbmVkIGluc3RydWN0aW9ucyBpcyBzdG9sZW4gZnJvbSBBUk0gKi8KIHN0YXRpYyBMSVNUX0hFQUQodW5kZWZfaG9vayk7Ci1zdGF0aWMgc3BpbmxvY2tfdCB1bmRlZl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIERFRklORV9TUElOTE9DSyh1bmRlZl9sb2NrKTsKIAogdm9pZCByZWdpc3Rlcl91bmRlZl9ob29rKHN0cnVjdCB1bmRlZl9ob29rICpob29rKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvdm1saW51eC5sZHMuYyBiL2FyY2gvYXZyMzIva2VybmVsL3ZtbGludXgubGRzLmMKaW5kZXggN2FkMjBjZi4uZGIwNDM4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvdm1saW51eC5sZHMuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC92bWxpbnV4Lmxkcy5jCkBAIC0zNSw3ICszNSw3IEBACiAJCQlfZWluaXR0ZXh0ID0gLjsKIAkJLiA9IEFMSUdOKDQpOwogCQlfX3RhZ3RhYmxlX2JlZ2luID0gLjsKLQkJCSooLnRhZ2xpc3QpCisJCQkqKC50YWdsaXN0LmluaXQpCiAJCV9fdGFndGFibGVfZW5kID0gLjsKIAkJCSooLmluaXQuZGF0YSkKIAkJLiA9IEFMSUdOKDE2KTsKQEAgLTc2LDcgKzc2LDcgQEAKIAkJLiA9IDB4MTAwOwogCQkqKC5zY2FsbC50ZXh0KQogCQkqKC5pcnEudGV4dCkKLQkJKigudGV4dCkKKwkJVEVYVF9URVhUCiAJCVNDSEVEX1RFWFQKIAkJTE9DS19URVhUCiAJCUtQUk9CRVNfVEVYVApAQCAtMTEyLDcgKzExMiw3IEBACiAKIAkJLyogQW5kIHRoZSByZXN0Li4uICovCiAJCSooLmRhdGEucmVsKikKLQkJKiguZGF0YSkKKwkJREFUQV9EQVRBCiAJCUNPTlNUUlVDVE9SUwogCiAJCV9lZGF0YSA9IC47CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMDAuYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAwMC5jCmluZGV4IDU2ZGI0NWIuLjFkMmJmMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAwMC5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAwMC5jCkBAIC02LDYgKzYsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CkBAIC0xNyw2ICsxOCw4IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvcG9ydG11eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3NtLmg+CiAKKyNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+CisKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImhtYXRyaXguaCIKICNpbmNsdWRlICJwaW8uaCIKQEAgLTg4MSwyMCArODg0LDI2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIExDREMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgc3RydWN0IGxjZGNfcGxhdGZvcm1fZGF0YSBsY2RjMF9kYXRhOwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsY2RjMF9yZXNvdXJjZVtdID0geworc3RhdGljIHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvIGF0bWVsX2xjZGZiMF9kYXRhOworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdG1lbF9sY2RmYjBfcmVzb3VyY2VbXSA9IHsKIAl7CiAJCS5zdGFydAkJPSAweGZmMDAwMDAwLAogCQkuZW5kCQk9IDB4ZmYwMDBmZmYsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCUlSUSgxKSwKKwl7CisJCS8qIFBsYWNlaG9sZGVyIGZvciBwcmUtYWxsb2NhdGVkIGZiIG1lbW9yeSAqLworCQkuc3RhcnQJCT0gMHgwMDAwMDAwMCwKKwkJLmVuZAkJPSAweDAwMDAwMDAwLAorCQkuZmxhZ3MJCT0gMCwKKwl9LAogfTsKLURFRklORV9ERVZfREFUQShsY2RjLCAwKTsKLURFVl9DTEsoaGNsaywgbGNkYzAsIGhzYiwgNyk7Ci1zdGF0aWMgc3RydWN0IGNsayBsY2RjMF9waXhjbGsgPSB7Ci0JLm5hbWUJCT0gInBpeGNsayIsCi0JLmRldgkJPSAmbGNkYzBfZGV2aWNlLmRldiwKK0RFRklORV9ERVZfREFUQShhdG1lbF9sY2RmYiwgMCk7CitERVZfQ0xLKGhjazEsIGF0bWVsX2xjZGZiMCwgaHNiLCA3KTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGF0bWVsX2xjZGZiMF9waXhjbGsgPSB7CisJLm5hbWUJCT0gImxjZGNfY2xrIiwKKwkuZGV2CQk9ICZhdG1lbF9sY2RmYjBfZGV2aWNlLmRldiwKIAkubW9kZQkJPSBnZW5jbGtfbW9kZSwKIAkuZ2V0X3JhdGUJPSBnZW5jbGtfZ2V0X3JhdGUsCiAJLnNldF9yYXRlCT0gZ2VuY2xrX3NldF9yYXRlLApAQCAtOTAzLDEzICs5MTIsMzQgQEAKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdAotYXQzMl9hZGRfZGV2aWNlX2xjZGModW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgbGNkY19wbGF0Zm9ybV9kYXRhICpkYXRhKQorYXQzMl9hZGRfZGV2aWNlX2xjZGModW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyAqZGF0YSwKKwkJICAgICB1bnNpZ25lZCBsb25nIGZibWVtX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGZibWVtX2xlbikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvICppbmZvOworCXN0cnVjdCBmYl9tb25zcGVjcyAqbW9uc3BlY3M7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZWRiOworCXVuc2lnbmVkIGludCBtb2RlZGJfc2l6ZTsKKworCS8qCisJICogRG8gYSBkZWVwIGNvcHkgb2YgdGhlIGZiIGRhdGEsIG1vbnNwZWNzIGFuZCBtb2RlZGIuIE1ha2UKKwkgKiBzdXJlIGFsbCBhbGxvY2F0aW9ucyBhcmUgZG9uZSBiZWZvcmUgc2V0dGluZyB1cCB0aGUKKwkgKiBwb3J0bXV4LgorCSAqLworCW1vbnNwZWNzID0ga21lbWR1cChkYXRhLT5kZWZhdWx0X21vbnNwZWNzLAorCQkJICAgc2l6ZW9mKHN0cnVjdCBmYl9tb25zcGVjcyksIEdGUF9LRVJORUwpOworCWlmICghbW9uc3BlY3MpCisJCXJldHVybiBOVUxMOworCisJbW9kZWRiX3NpemUgPSBzaXplb2Yoc3RydWN0IGZiX3ZpZGVvbW9kZSkgKiBtb25zcGVjcy0+bW9kZWRiX2xlbjsKKwltb2RlZGIgPSBrbWVtZHVwKG1vbnNwZWNzLT5tb2RlZGIsIG1vZGVkYl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1vZGVkYikKKwkJZ290byBlcnJfZHVwX21vZGVkYjsKKwltb25zcGVjcy0+bW9kZWRiID0gbW9kZWRiOwogCiAJc3dpdGNoIChpZCkgewogCWNhc2UgMDoKLQkJcGRldiA9ICZsY2RjMF9kZXZpY2U7CisJCXBkZXYgPSAmYXRtZWxfbGNkZmIwX2RldmljZTsKIAkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMTkpLCBQRVJJUEhfQSwgMCk7CS8qIENDCSAgKi8KIAkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMjApLCBQRVJJUEhfQSwgMCk7CS8qIEhTWU5DICAqLwogCQlzZWxlY3RfcGVyaXBoZXJhbChQQygyMSksIFBFUklQSF9BLCAwKTsJLyogUENMSwkgICovCkBAIC05NDIsMTkgKzk3MiwzMiBAQAogCQlzZWxlY3RfcGVyaXBoZXJhbChQRCgxNiksIFBFUklQSF9BLCAwKTsJLyogREFUQTIyICovCiAJCXNlbGVjdF9wZXJpcGhlcmFsKFBEKDE3KSwgUEVSSVBIX0EsIDApOwkvKiBEQVRBMjMgKi8KIAotCQljbGtfc2V0X3BhcmVudCgmbGNkYzBfcGl4Y2xrLCAmcGxsMCk7Ci0JCWNsa19zZXRfcmF0ZSgmbGNkYzBfcGl4Y2xrLCBjbGtfZ2V0X3JhdGUoJnBsbDApKTsKKwkJY2xrX3NldF9wYXJlbnQoJmF0bWVsX2xjZGZiMF9waXhjbGssICZwbGwwKTsKKwkJY2xrX3NldF9yYXRlKCZhdG1lbF9sY2RmYjBfcGl4Y2xrLCBjbGtfZ2V0X3JhdGUoJnBsbDApKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBlcnJfaW52YWxpZF9pZDsKIAl9CiAKLQltZW1jcHkocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIGRhdGEsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgbGNkY19wbGF0Zm9ybV9kYXRhKSk7CisJaWYgKGZibWVtX2xlbikgeworCQlwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCA9IGZibWVtX3N0YXJ0OworCQlwZGV2LT5yZXNvdXJjZVsyXS5lbmQgPSBmYm1lbV9zdGFydCArIGZibWVtX2xlbiAtIDE7CisJCXBkZXYtPnJlc291cmNlWzJdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJfQorCisJaW5mbyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCW1lbWNweShpbmZvLCBkYXRhLCBzaXplb2Yoc3RydWN0IGF0bWVsX2xjZGZiX2luZm8pKTsKKwlpbmZvLT5kZWZhdWx0X21vbnNwZWNzID0gbW9uc3BlY3M7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CiAJcmV0dXJuIHBkZXY7CisKK2Vycl9pbnZhbGlkX2lkOgorCWtmcmVlKG1vZGVkYik7CitlcnJfZHVwX21vZGVkYjoKKwlrZnJlZShtb25zcGVjcyk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDM3LDggKzEwODAsOCBAQAogCSZtYWNiMV9wY2xrLAogCSZhdG1lbF9zcGkwX3NwaV9jbGssCiAJJmF0bWVsX3NwaTFfc3BpX2NsaywKLQkmbGNkYzBfaGNsaywKLQkmbGNkYzBfcGl4Y2xrLAorCSZhdG1lbF9sY2RmYjBfaGNrMSwKKwkmYXRtZWxfbGNkZmIwX3BpeGNsaywKIAkmZ2NsazAsCiAJJmdjbGsxLAogCSZnY2xrMiwKQEAgLTEwNzcsNyArMTEyMCw3IEBACiAJZ2VuY2xrX2luaXRfcGFyZW50KCZnY2xrMik7CiAJZ2VuY2xrX2luaXRfcGFyZW50KCZnY2xrMyk7CiAJZ2VuY2xrX2luaXRfcGFyZW50KCZnY2xrNCk7Ci0JZ2VuY2xrX2luaXRfcGFyZW50KCZsY2RjMF9waXhjbGspOworCWdlbmNsa19pbml0X3BhcmVudCgmYXRtZWxfbGNkZmIwX3BpeGNsayk7CiAKIAkvKgogCSAqIFR1cm4gb24gYWxsIGNsb2NrcyB0aGF0IGhhdmUgYXQgbGVhc3Qgb25lIHVzZXIgYWxyZWFkeSwgYW5kCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2Nsb2NrLmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2Nsb2NrLmMKaW5kZXggMDBjNDM1NC4uMGY4Yzg5YyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jbG9jay5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvY2xvY2suYwpAQCAtMTgsNyArMTgsNyBAQAogCiAjaW5jbHVkZSAiY2xvY2suaCIKIAotc3RhdGljIHNwaW5sb2NrX3QgY2xrX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKIAogc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS9kbWEtY29oZXJlbnQuYyBiL2FyY2gvYXZyMzIvbW0vZG1hLWNvaGVyZW50LmMKaW5kZXggYjY4ZDY2OS4uMDk5MjEyZCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tbS9kbWEtY29oZXJlbnQuYworKysgYi9hcmNoL2F2cjMyL21tL2RtYS1jb2hlcmVudC5jCkBAIC0xMTIsMTYgKzExMiwyMSBAQAogfQogRVhQT1JUX1NZTUJPTChkbWFfZnJlZV9jb2hlcmVudCk7CiAKLSNpZiAwCiB2b2lkICpkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkgICAgIGRtYV9hZGRyX3QgKmhhbmRsZSwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBwYWdlICpwYWdlOworCWRtYV9hZGRyX3QgcGh5czsKIAogCXBhZ2UgPSBfX2RtYV9hbGxvYyhkZXYsIHNpemUsIGhhbmRsZSwgZ2ZwKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiBOVUxMOworCisJcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKKwkqaGFuZGxlID0gcGh5czsKIAogCS8qIE5vdywgbWFwIHRoZSBwYWdlIGludG8gUDMgd2l0aCB3cml0ZS1jb21iaW5pbmcgdHVybmVkIG9uICovCi0JcmV0dXJuIF9faW9yZW1hcChwYWdlX3RvX3BoeXMocGFnZSksIHNpemUsIF9QQUdFX0JVRkZFUik7CisJcmV0dXJuIF9faW9yZW1hcChwaHlzLCBzaXplLCBfUEFHRV9CVUZGRVIpOwogfQogRVhQT1JUX1NZTUJPTChkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKTsKIApAQCAtMTMyLDggKzEzNyw3IEBACiAKIAlpb3VubWFwKGNwdV9hZGRyKTsKIAotCXBhZ2UgPSBidXNfdG9fcGFnZShoYW5kbGUpOworCXBhZ2UgPSBwaHlzX3RvX3BhZ2UoaGFuZGxlKTsKIAlfX2RtYV9mcmVlKGRldiwgc2l6ZSwgcGFnZSwgaGFuZGxlKTsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX2ZyZWVfd3JpdGVjb21iaW5lKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS9mYXVsdC5jIGIvYXJjaC9hdnIzMi9tbS9mYXVsdC5jCmluZGV4IDE0NmViZGIuLmUwMTFmMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbW0vZmF1bHQuYworKysgYi9hcmNoL2F2cjMyL21tL2ZhdWx0LmMKQEAgLTEyLDQxICsxMiwzMCBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vc3lzcmVnLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpZmRlZiBDT05GSUdfS1BST0JFUwotQVRPTUlDX05PVElGSUVSX0hFQUQobm90aWZ5X3BhZ2VfZmF1bHRfY2hhaW4pOwotCi0vKiBIb29rIHRvIHJlZ2lzdGVyIGZvciBwYWdlIGZhdWx0IG5vdGlmaWNhdGlvbnMgKi8KLWludCByZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCitzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXApCiB7Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3Rlcigmbm90aWZ5X3BhZ2VfZmF1bHRfY2hhaW4sIG5iKTsKLX0KKwlpbnQgcmV0ID0gMDsKIAotaW50IHVucmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQotewotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3Rlcigmbm90aWZ5X3BhZ2VfZmF1bHRfY2hhaW4sIG5iKTsKLX0KKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkgeworCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLCB0cmFwKSkKKwkJCXJldCA9IDE7CisJfQogCi1zdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChlbnVtIGRpZV92YWwgdmFsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkgICAgaW50IHRyYXAsIGludCBzaWcpCi17Ci0Jc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7Ci0JCS5yZWdzID0gcmVncywKLQkJLnRyYXBuciA9IHRyYXAsCi0JfTsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5vdGlmeV9wYWdlX2ZhdWx0X2NoYWluLCB2YWwsICZhcmdzKTsKKwlyZXR1cm4gcmV0OwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KGVudW0gZGllX3ZhbCB2YWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCSAgICBpbnQgdHJhcCwgaW50IHNpZykKK3N0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcCkKIHsKLQlyZXR1cm4gTk9USUZZX0RPTkU7CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIApAQCAtNzYsOCArNjUsNyBAQAogCWxvbmcgc2lnbnI7CiAJaW50IGNvZGU7CiAKLQlpZiAobm90aWZ5X3BhZ2VfZmF1bHQoRElFX1BBR0VfRkFVTFQsIHJlZ3MsCi0JCQkgICAgICBlY3IsIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQorCWlmIChub3RpZnlfcGFnZV9mYXVsdChyZWdzLCBlY3IpKQogCQlyZXR1cm47CiAKIAlhZGRyZXNzID0gc3lzcmVnX3JlYWQoVExCRUFSKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwppbmRleCAxYTQ5MzA1Li5iMWIxMTFiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCkBAIC0yNSw2ICsyNSwxMCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIFpPTkVfRE1BCisJYm9vbAorCWRlZmF1bHQgeQorCiBjb25maWcgQkZJTgogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTE4OSw3ICsxOTMsNyBAQAogCSAgQ00tQkY1Mzcgc3VwcG9ydCBmb3IgRVZBTC0gYW5kIERFVi1Cb2FyZC4KIAogY29uZmlnIEJGSU41NjFfQkxVRVRFQ0hOSVhfQ00KLQlib29sICJCRjU2MS1DTSIKKwlib29sICJCbHVldGVjaG5peCBDTS1CRjU2MSIKIAlkZXBlbmRzIG9uIChCRjU2MSkKIAloZWxwCiAJICBDTS1CRjU2MSBzdXBwb3J0IGZvciBFVkFMLSBhbmQgREVWLUJvYXJkLgpAQCAtMjAwLDYgKzIwNCwxMiBAQAogCWhlbHAKIAkgIEJGNTYxLUVaS0lULUxJVEUgYm9hcmQgU3VwcG9ydC4KIAorY29uZmlnIEJGSU41NjFfVEVQTEEKKwlib29sICJCRjU2MS1URVBMQSIKKwlkZXBlbmRzIG9uIChCRjU2MSkKKwloZWxwCisJIEJGNTYxLVRFUExBIGJvYXJkIFN1cHBvcnQuCisKIGNvbmZpZyBQTkFWMTAKIAlib29sICJQTkFWIDEuMCBib2FyZCIKIAlkZXBlbmRzIG9uIChCRjUzNykKQEAgLTU2MCwxNCArNTcwLDYgQEAKIAogc291cmNlICJtbS9LY29uZmlnIgogCi1jb25maWcgTEFSR0VfQUxMT0NTCi0JYm9vbCAiQWxsb3cgYWxsb2NhdGluZyBsYXJnZSBibG9ja3MgKD4gMU1CKSBvZiBtZW1vcnkiCi0JaGVscAotCSAgQWxsb3cgdGhlIHNsYWIgbWVtb3J5IGFsbG9jYXRvciB0byBrZWVwIGNoYWlucyBmb3IgdmVyeSBsYXJnZQotCSAgbWVtb3J5IHNpemVzIC0gdXB0byAzMk1CLiBZb3UgbWF5IG5lZWQgdGhpcyBpZiB5b3VyIHN5c3RlbSBoYXMKLQkgIGEgbG90IG9mIFJBTSwgYW5kIHlvdSBuZWVkIHRvIGFibGUgdG8gYWxsb2NhdGUgdmVyeSBsYXJnZQotCSAgY29udGlndW91cyBjaHVua3MuIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBCRklOX0RNQV81WFgKIAlib29sICJFbmFibGUgRE1BIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiAoQkY1MzMgfHwgQkY1MzIgfHwgQkY1MzEgfHwgQkY1MzcgfHwgQkY1MzYgfHwgQkY1MzQgfHwgQkY1NjEpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL01ha2VmaWxlIGIvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZQppbmRleCA1MmQ0ZGJkLi43NWU4OWMzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4vTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAKIENGTEFHU19NT0RVTEUgICAgKz0gLW1sb25nLWNhbGxzCiBLQUxMU1lNUyAgICAgICAgICs9IC0tc3ltYm9sLXByZWZpeD1fCiAKK0tCVUlMRF9ERUZDT05GSUcgOj0gQkY1MzctU1RBTVBfZGVmY29uZmlnCiAKICMgc2V0dXAgdGhlIG1hY2hpbmUgbmFtZSBhbmQgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHNldHRpbmdzCiBtYWNoaW5lLSQoQ09ORklHX0JGNTMxKSA6PSBiZjUzMwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3YzhlMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKQEAgLTAsMCArMSwxMDE0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTkuMworIworIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CitDT05GSUdfQkxBQ0tGSU49eQorQ09ORklHX0JGSU49eQorQ09ORklHX1NFTUFQSE9SRV9TTEVFUEVSUz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfVUNMSU5VWD15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNAorQ09ORklHX0lSUUNISVBfREVNVVhfR1BJTz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19CSUdfT1JERVJfQUxMT0NfTk9GQUlMX01BR0lDPTMKKyMgQ09ORklHX0xJTUlUX1BBR0VDQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQlVERFk9eQorIyBDT05GSUdfTlAyIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfVElOWV9TSE1FTT15CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIEJsb2NrIGxheWVyCisjCitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorCisjCisjIEJsYWNrZmluIFByb2Nlc3NvciBPcHRpb25zCisjCisKKyMKKyMgUHJvY2Vzc29yIGFuZCBCb2FyZCBTZXR0aW5ncworIworIyBDT05GSUdfQkY1MzEgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzIgaXMgbm90IHNldAorQ09ORklHX0JGNTMzPXkKKyMgQ09ORklHX0JGNTM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl8wXzIgaXMgbm90IHNldAorQ09ORklHX0JGX1JFVl8wXzM9eQorIyBDT05GSUdfQkZfUkVWXzBfNCBpcyBub3Qgc2V0CisjIENPTkZJR19CRl9SRVZfMF81IGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX1NJTkdMRV9DT1JFPXkKK0NPTkZJR19CRklONTMzX0VaS0lUPXkKKyMgQ09ORklHX0JGSU41MzNfU1RBTVAgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjUzN19TVEFNUCBpcyBub3Qgc2V0CisjIENPTkZJR19CRklONTMzX0JMVUVURUNITklYX0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU41MzdfQkxVRVRFQ0hOSVhfQ00gaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjU2MV9CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklONTYxX0VaS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOQVYxMCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19NRU1fTVQ0OExDMTZNMTZBMlRHXzc1PXkKKworIworIyBCRjUzMy8yLzEgU3BlY2lmaWMgQ29uZmlndXJhdGlvbgorIworCisjCisjIEludGVycnVwdCBQcmlvcml0eSBBc3NpZ25tZW50CisjCisKKyMKKyMgUHJpb3JpdHkKKyMKK0NPTkZJR19VQVJUX0VSUk9SPTcKK0NPTkZJR19TUE9SVDBfRVJST1I9NworQ09ORklHX1NQSV9FUlJPUj03CitDT05GSUdfU1BPUlQxX0VSUk9SPTcKK0NPTkZJR19QUElfRVJST1I9NworQ09ORklHX0RNQV9FUlJPUj03CitDT05GSUdfUExMV0FLRV9FUlJPUj03CitDT05GSUdfUlRDX0VSUk9SPTgKK0NPTkZJR19ETUEwX1BQST04CitDT05GSUdfRE1BMV9TUE9SVDBSWD05CitDT05GSUdfRE1BMl9TUE9SVDBUWD05CitDT05GSUdfRE1BM19TUE9SVDFSWD05CitDT05GSUdfRE1BNF9TUE9SVDFUWD05CitDT05GSUdfRE1BNV9TUEk9MTAKK0NPTkZJR19ETUE2X1VBUlRSWD0xMAorQ09ORklHX0RNQTdfVUFSVFRYPTEwCitDT05GSUdfVElNRVIwPTExCitDT05GSUdfVElNRVIxPTExCitDT05GSUdfVElNRVIyPTExCitDT05GSUdfUEZBPTEyCitDT05GSUdfUEZCPTEyCitDT05GSUdfTUVNRE1BMD0xMworQ09ORklHX01FTURNQTE9MTMKK0NPTkZJR19XRFRJTUVSPTEzCisKKyMKKyMgQm9hcmQgY3VzdG9taXphdGlvbnMKKyMKKworIworIyBCb2FyZCBTZXR1cAorIworQ09ORklHX0NMS0lOX0haPTI3MDAwMDAwCitDT05GSUdfTUVNX1NJWkU9MzIKK0NPTkZJR19NRU1fQUREX1dJRFRIPTkKK0NPTkZJR19CT09UX0xPQUQ9MHgxMDAwCisKKyMKKyMgQ29uc29sZSBVQVJUIFNldHVwCisjCisjIENPTkZJR19CQVVEXzk2MDAgaXMgbm90IHNldAorIyBDT05GSUdfQkFVRF8xOTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVVEXzM4NDAwIGlzIG5vdCBzZXQKK0NPTkZJR19CQVVEXzU3NjAwPXkKKyMgQ09ORklHX0JBVURfMTE1MjAwIGlzIG5vdCBzZXQKK0NPTkZJR19CQVVEX05PX1BBUklUWT15CisjIENPTkZJR19CQVVEX1BBUklUWSBpcyBub3Qgc2V0CitDT05GSUdfQkFVRF8xX1NUT1BCSVQ9eQorIyBDT05GSUdfQkFVRF8yX1NUT1BCSVQgaXMgbm90IHNldAorCisjCisjIEJsYWNrZmluIEtlcm5lbCBPcHRpbWl6YXRpb25zCisjCisKKyMKKyMgVGltZXIgVGljaworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisKKyMKKyMgTWVtb3J5IE9wdGltaXphdGlvbnMKKyMKK0NPTkZJR19JX0VOVFJZX0wxPXkKK0NPTkZJR19FWENQVF9JUlFfU1lTQ19MMT15CitDT05GSUdfRE9fSVJRX0wxPXkKK0NPTkZJR19DT1JFX1RJTUVSX0lSUV9MMT15CitDT05GSUdfSURMRV9MMT15CitDT05GSUdfU0NIRURVTEVfTDE9eQorQ09ORklHX0FSSVRITUVUSUNfT1BTX0wxPXkKK0NPTkZJR19BQ0NFU1NfT0tfTDE9eQorQ09ORklHX01FTVNFVF9MMT15CitDT05GSUdfTUVNQ1BZX0wxPXkKK0NPTkZJR19TWVNfQkZJTl9TUElOTE9DS19MMT15CisjIENPTkZJR19JUF9DSEVDS1NVTV9MMSBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDQUxMX1RBQl9MMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDEgaXMgbm90IHNldAorQ09ORklHX1JBTUtFUk5FTD15CisjIENPTkZJR19ST01LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19MQVJHRV9BTExPQ1M9eQorQ09ORklHX0JGSU5fRE1BXzVYWD15CisjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldAorQ09ORklHX0RNQV9VTkNBQ0hFRF8xTT15CisjIENPTkZJR19ETUFfVU5DQUNIRURfTk9ORSBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGUgU3VwcG9ydAorIworQ09ORklHX0JMS0ZJTl9DQUNIRT15CitDT05GSUdfQkxLRklOX0RDQUNIRT15CisjIENPTkZJR19CTEtGSU5fRENBQ0hFX0JBTktBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS0ZJTl9DQUNIRV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS0ZJTl9XQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLRklOX1dUPXkKK0NPTkZJR19MMV9NQVhfUElFQ0U9MTYKKworIworIyBDbG9jayBTZXR0aW5ncworIworIyBDT05GSUdfQkZJTl9LRVJORUxfQ0xPQ0sgaXMgbm90IHNldAorCisjCisjIEFzeW5jaG9ub3VzIE1lbW9yeSBDb25maWd1cmF0aW9uCisjCisKKyMKKyMgRUJJVV9BTUJDVEwgR2xvYmFsIENvbnRyb2wKKyMKK0NPTkZJR19DX0FNQ0tFTj15CitDT05GSUdfQ19DRFBSSU89eQorIyBDT05GSUdfQ19BTUJFTiBpcyBub3Qgc2V0CisjIENPTkZJR19DX0FNQkVOX0IwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NfQU1CRU5fQjBfQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ19BTUJFTl9CMF9CMV9CMiBpcyBub3Qgc2V0CitDT05GSUdfQ19BTUJFTl9BTEw9eQorCisjCisjIEVCSVVfQU1CQ1RMIENvbnRyb2wKKyMKK0NPTkZJR19CQU5LXzA9MHg3QkIwCitDT05GSUdfQkFOS18xPTB4N0JCMAorQ09ORklHX0JBTktfMj0weDdCQjAKK0NPTkZJR19CQU5LXzM9MHg5OUIzCisKKyMKKyMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBNQ0EsIElTQSkKKyMKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CisjCisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGX0ZEUElDPXkKK0NPTkZJR19CSU5GTVRfRkxBVD15CitDT05GSUdfQklORk1UX1pGTEFUPXkKKyMgQ09ORklHX0JJTkZNVF9TSEFSRURfRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX1BNX0xFR0FDWT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9XQUtFVVBfR1BJT19CWV9TSUNfSVdSPXkKKyMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1dBS0VVUF9HUElPX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfUE1fV0FLRVVQX1NJQ19JV1I9MHgxMDAwMDAKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9bQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0pFREVDUFJPQkU9bQorQ09ORklHX01URF9HRU5fUFJPQkU9bQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01XMzIwRD1tCitDT05GSUdfTVREX1JBTT15CitDT05GSUdfTVREX1JPTT1tCisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkY1eHg9bQorQ09ORklHX0JGSU5fRkxBU0hfU0laRT0weDQwMDAwMAorQ09ORklHX0VCSVVfRkxBU0hfQkFTRT0weDIwMDAwMDAwCisKKyMKKyMgRkxBU0hfRUJJVV9BTUJDVEwgQ29udHJvbAorIworQ09ORklHX0JGSU5fRkxBU0hfQkFOS18wPTB4N0JCMAorQ09ORklHX0JGSU5fRkxBU0hfQkFOS18xPTB4N0JCMAorQ09ORklHX0JGSU5fRkxBU0hfQkFOS18yPTB4N0JCMAorQ09ORklHX0JGSU5fRkxBU0hfQkFOS18zPTB4N0JCMAorIyBDT05GSUdfTVREX1VDTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CitDT05GSUdfU01DOTFYPXkKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfQUQ5OTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9BRENfQkY1MzMgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzNfUEZMQUdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNXh4X1BQSUZDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjV4eF9USU1FUlMgaXMgbm90IHNldAorIyBDT05GSUdfQkY1eHhfUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9USU1FUl9MQVRFTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0JGSU49eQorQ09ORklHX1NFUklBTF9CRklOX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9CRklOX0RNQT15CisjIENPTkZJR19TRVJJQUxfQkZJTl9QSU8gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9CRklOX1VBUlQwPXkKKyMgQ09ORklHX0JGSU5fVUFSVDBfQ1RTUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorCisjCisjIENBTiwgdGhlIGNhciBidXMgYW5kIGluZHVzdHJpYWwgZmllbGRidXMKKyMKKyMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKK0NPTkZJR19CTEFDS0ZJTl9EUE1DPXkKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIworCisjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0JGSU49eQorCisjCisjIERNQSBFbmdpbmUgc3VwcG9ydAorIworIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKworIworIyBETUEgRGV2aWNlcworIworCisjCisjIFBCWCBzdXBwb3J0CisjCisjIENPTkZJR19QQlggaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX0ZTPW0KK0NPTkZJR19ZQUZGU19ZQUZGUzE9eQorIyBDT05GSUdfWUFGRlNfRE9FU19FQ0MgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX1lBRkZTMj15CitDT05GSUdfWUFGRlNfQVVUT19ZQUZGUzI9eQorIyBDT05GSUdfWUFGRlNfRElTQUJMRV9MQVpZX0xPQUQgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX0NIRUNLUE9JTlRfUkVTRVJWRURfQkxPQ0tTPTEwCisjIENPTkZJR19ZQUZGU19ESVNBQkxFX1dJREVfVE5PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lBRkZTX0FMV0FZU19DSEVDS19DSFVOS19FUkFTRUQgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lOX1JBTT15CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz1tCitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRVJJQUxfRUFSTFlfSU5JVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSFVOVF9GT1JfWkVSTz15CisjIENPTkZJR19ERUJVR19CRklOX05PX0tFUk5fSFdUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UUEFSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTk9fS0VSTkVMX01TRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BMQl9JTkZPPXkKKyMgQ09ORklHX05PX0FDQ0VTU19DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPXkKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19QTElTVD15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGE5NDhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEyOTYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC40CisjCisjIENPTkZJR19NTVUgaXMgbm90IHNldAorIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEFDS0ZJTj15CitDT05GSUdfQkZJTj15CitDT05GSUdfU0VNQVBIT1JFX1NMRUVQRVJTPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNAorQ09ORklHX0lSUUNISVBfREVNVVhfR1BJTz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19CSUdfT1JERVJfQUxMT0NfTk9GQUlMX01BR0lDPTMKKyMgQ09ORklHX0xJTUlUX1BBR0VDQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQlVERFk9eQorIyBDT05GSUdfTlAyIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfVElOWV9TSE1FTT15CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIEJsb2NrIGxheWVyCisjCitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisKKyMKKyMgQmxhY2tmaW4gUHJvY2Vzc29yIE9wdGlvbnMKKyMKKworIworIyBQcm9jZXNzb3IgYW5kIEJvYXJkIFNldHRpbmdzCisjCisjIENPTkZJR19CRjUzMSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzMiBpcyBub3Qgc2V0CitDT05GSUdfQkY1MzM9eQorIyBDT05GSUdfQkY1MzQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzYgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NjEgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWXzBfMiBpcyBub3Qgc2V0CitDT05GSUdfQkZfUkVWXzBfMz15CisjIENPTkZJR19CRl9SRVZfMF80IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl8wXzUgaXMgbm90IHNldAorQ09ORklHX0JGSU5fU0lOR0xFX0NPUkU9eQorIyBDT05GSUdfQkZJTjUzM19FWktJVCBpcyBub3Qgc2V0CitDT05GSUdfQkZJTjUzM19TVEFNUD15CisjIENPTkZJR19CRklONTM3X1NUQU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU41MzNfQkxVRVRFQ0hOSVhfQ00gaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjUzN19CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklONTYxX0JMVUVURUNITklYX0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU41NjFfRVpLSVQgaXMgbm90IHNldAorIyBDT05GSUdfUE5BVjEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX01FTV9NVDQ4TEM2NE00QTJGQl83RT15CitDT05GSUdfQkZJTl9TSEFSRURfRkxBU0hfRU5FVD15CisKKyMKKyMgQkY1MzMvMi8xIFNwZWNpZmljIENvbmZpZ3VyYXRpb24KKyMKKworIworIyBJbnRlcnJ1cHQgUHJpb3JpdHkgQXNzaWdubWVudAorIworCisjCisjIFByaW9yaXR5CisjCitDT05GSUdfVUFSVF9FUlJPUj03CitDT05GSUdfU1BPUlQwX0VSUk9SPTcKK0NPTkZJR19TUElfRVJST1I9NworQ09ORklHX1NQT1JUMV9FUlJPUj03CitDT05GSUdfUFBJX0VSUk9SPTcKK0NPTkZJR19ETUFfRVJST1I9NworQ09ORklHX1BMTFdBS0VfRVJST1I9NworQ09ORklHX1JUQ19FUlJPUj04CitDT05GSUdfRE1BMF9QUEk9OAorQ09ORklHX0RNQTFfU1BPUlQwUlg9OQorQ09ORklHX0RNQTJfU1BPUlQwVFg9OQorQ09ORklHX0RNQTNfU1BPUlQxUlg9OQorQ09ORklHX0RNQTRfU1BPUlQxVFg9OQorQ09ORklHX0RNQTVfU1BJPTEwCitDT05GSUdfRE1BNl9VQVJUUlg9MTAKK0NPTkZJR19ETUE3X1VBUlRUWD0xMAorQ09ORklHX1RJTUVSMD0xMQorQ09ORklHX1RJTUVSMT0xMQorQ09ORklHX1RJTUVSMj0xMQorQ09ORklHX1BGQT0xMgorQ09ORklHX1BGQj0xMgorQ09ORklHX01FTURNQTA9MTMKK0NPTkZJR19NRU1ETUExPTEzCitDT05GSUdfV0RUSU1FUj0xMworCisjCisjIEJvYXJkIGN1c3RvbWl6YXRpb25zCisjCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorCisjCisjIEJvYXJkIFNldHVwCisjCitDT05GSUdfQ0xLSU5fSFo9MTEwNTkyMDAKK0NPTkZJR19NRU1fU0laRT0xMjgKK0NPTkZJR19NRU1fQUREX1dJRFRIPTExCitDT05GSUdfRU5FVF9GTEFTSF9QSU49MAorQ09ORklHX0JPT1RfTE9BRD0weDEwMDAKKworIworIyBMRUQgU3RhdHVzIEluZGljYXRvcnMKKyMKKyMgQ09ORklHX0JGSU5fQUxJVkVfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fSURMRV9MRUQgaXMgbm90IHNldAorQ09ORklHX0JGSU5fQUxJVkVfTEVEX1BPUlQ9MHhGRkMwMDcwMAorQ09ORklHX0JGSU5fQUxJVkVfTEVEX0RQT1JUPTB4RkZDMDA3MzAKK0NPTkZJR19CRklOX0lETEVfTEVEX1BPUlQ9MHhGRkMwMDcwMAorQ09ORklHX0JGSU5fSURMRV9MRURfRFBPUlQ9MHhGRkMwMDczMAorCisjCisjIENvbnNvbGUgVUFSVCBTZXR1cAorIworIyBDT05GSUdfQkFVRF85NjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVURfMTkyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkFVRF8zODQwMCBpcyBub3Qgc2V0CitDT05GSUdfQkFVRF81NzYwMD15CisjIENPTkZJR19CQVVEXzExNTIwMCBpcyBub3Qgc2V0CitDT05GSUdfQkFVRF9OT19QQVJJVFk9eQorIyBDT05GSUdfQkFVRF9QQVJJVFkgaXMgbm90IHNldAorQ09ORklHX0JBVURfMV9TVE9QQklUPXkKKyMgQ09ORklHX0JBVURfMl9TVE9QQklUIGlzIG5vdCBzZXQKKworIworIyBCbGFja2ZpbiBLZXJuZWwgT3B0aW1pemF0aW9ucworIworCisjCisjIFRpbWVyIFRpY2sKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKworIworIyBNZW1vcnkgT3B0aW1pemF0aW9ucworIworQ09ORklHX0lfRU5UUllfTDE9eQorQ09ORklHX0VYQ1BUX0lSUV9TWVNDX0wxPXkKK0NPTkZJR19ET19JUlFfTDE9eQorQ09ORklHX0NPUkVfVElNRVJfSVJRX0wxPXkKK0NPTkZJR19JRExFX0wxPXkKK0NPTkZJR19TQ0hFRFVMRV9MMT15CitDT05GSUdfQVJJVEhNRVRJQ19PUFNfTDE9eQorQ09ORklHX0FDQ0VTU19PS19MMT15CitDT05GSUdfTUVNU0VUX0wxPXkKK0NPTkZJR19NRU1DUFlfTDE9eQorQ09ORklHX1NZU19CRklOX1NQSU5MT0NLX0wxPXkKKyMgQ09ORklHX0lQX0NIRUNLU1VNX0wxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NBTExfVEFCX0wxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTEJfU1dJVENIX1RBQl9MMSBpcyBub3Qgc2V0CitDT05GSUdfUkFNS0VSTkVMPXkKKyMgQ09ORklHX1JPTUtFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX0xBUkdFX0FMTE9DUz15CitDT05GSUdfQkZJTl9ETUFfNVhYPXkKKyMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CitDT05GSUdfRE1BX1VOQ0FDSEVEXzFNPXkKKyMgQ09ORklHX0RNQV9VTkNBQ0hFRF9OT05FIGlzIG5vdCBzZXQKKworIworIyBDYWNoZSBTdXBwb3J0CisjCitDT05GSUdfQkxLRklOX0NBQ0hFPXkKK0NPTkZJR19CTEtGSU5fRENBQ0hFPXkKKyMgQ09ORklHX0JMS0ZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAorIyBDT05GSUdfQkxLRklOX0NBQ0hFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQkxLRklOX1dCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtGSU5fV1Q9eQorQ09ORklHX0wxX01BWF9QSUVDRT0xNgorCisjCisjIENsb2NrIFNldHRpbmdzCisjCisjIENPTkZJR19CRklOX0tFUk5FTF9DTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgQXN5bmNob25vdXMgTWVtb3J5IENvbmZpZ3VyYXRpb24KKyMKKworIworIyBFQklVX0FNQkNUTCBHbG9iYWwgQ29udHJvbAorIworQ09ORklHX0NfQU1DS0VOPXkKK0NPTkZJR19DX0NEUFJJTz15CisjIENPTkZJR19DX0FNQkVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NfQU1CRU5fQjAgaXMgbm90IHNldAorIyBDT05GSUdfQ19BTUJFTl9CMF9CMSBpcyBub3Qgc2V0CisjIENPTkZJR19DX0FNQkVOX0IwX0IxX0IyIGlzIG5vdCBzZXQKK0NPTkZJR19DX0FNQkVOX0FMTD15CisKKyMKKyMgRUJJVV9BTUJDVEwgQ29udHJvbAorIworQ09ORklHX0JBTktfMD0weDdCQjAKK0NPTkZJR19CQU5LXzE9MHg3QkIwCitDT05GSUdfQkFOS18yPTB4N0JCMAorQ09ORklHX0JBTktfMz0weDk5QjMKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIE1DQSwgSVNBKQorIworIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEZfRkRQSUM9eQorQ09ORklHX0JJTkZNVF9GTEFUPXkKK0NPTkZJR19CSU5GTVRfWkZMQVQ9eQorIyBDT05GSUdfQklORk1UX1NIQVJFRF9GTEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CitDT05GSUdfUE1fTEVHQUNZPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAorQ09ORklHX1BNX1dBS0VVUF9HUElPX0JZX1NJQ19JV1I9eQorIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1fV0FLRVVQX0dQSU9fQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9XQUtFVVBfU0lDX0lXUj0weDEwMDAwMAorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorQ09ORklHX0lSREE9bQorCisjCisjIElyREEgcHJvdG9jb2xzCisjCitDT05GSUdfSVJMQU49bQorQ09ORklHX0lSQ09NTT1tCisjIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKKworIworIyBJckRBIG9wdGlvbnMKKyMKK0NPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUD15CisjIENPTkZJR19JUkRBX0ZBU1RfUlIgaXMgbm90IHNldAorIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0lSVFRZX1NJUj1tCisKKyMKKyMgRG9uZ2xlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RPTkdMRSBpcyBub3Qgc2V0CisKKyMKKyMgT2xkIFNJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfSVJQT1JUX1NJUiBpcyBub3Qgc2V0CisKKyMKKyMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAorIworCisjCisjIEZJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj1tCitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0pFREVDUFJPQkU9bQorQ09ORklHX01URF9HRU5fUFJPQkU9bQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01XMzIwRD1tCitDT05GSUdfTVREX1JBTT15CitDT05GSUdfTVREX1JPTT1tCisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkY1eHg9bQorQ09ORklHX0JGSU5fRkxBU0hfU0laRT0weDQwMDAwMAorQ09ORklHX0VCSVVfRkxBU0hfQkFTRT0weDIwMDAwMDAwCisKKyMKKyMgRkxBU0hfRUJJVV9BTUJDVEwgQ29udHJvbAorIworQ09ORklHX0JGSU5fRkxBU0hfQkFOS18wPTB4N0JCMAorQ09ORklHX0JGSU5fRkxBU0hfQkFOS18xPTB4N0JCMAorQ09ORklHX0JGSU5fRkxBU0hfQkFOS18yPTB4N0JCMAorQ09ORklHX0JGSU5fRkxBU0hfQkFOS18zPTB4N0JCMAorIyBDT05GSUdfTVREX1VDTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX1NNQzkxWD15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj1tCisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzWF9QRkJVVFRPTlMgaXMgbm90IHNldAorQ09ORklHX1RXSV9LRVlQQUQ9bQorQ09ORklHX0JGSU5fVFdJS0VZUEFEX0lSUV9QRlg9MzkKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfQUQ5OTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9BRENfQkY1MzMgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzNfUEZMQUdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNXh4X1BQSUZDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjV4eF9USU1FUlMgaXMgbm90IHNldAorIyBDT05GSUdfQkY1eHhfUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX1NQT1JUPXkKKyMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0CitDT05GSUdfVFdJX0xDRD1tCitDT05GSUdfVFdJX0xDRF9TTEFWRV9BRERSPTM0CisjIENPTkZJR19BRDUzMDQgaXMgbm90IHNldAorIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQkZJTj15CitDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0JGSU5fRE1BPXkKKyMgQ09ORklHX1NFUklBTF9CRklOX1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0JGSU5fVUFSVDA9eQorIyBDT05GSUdfQkZJTl9VQVJUMF9DVFNSVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0FOLCB0aGUgY2FyIGJ1cyBhbmQgaW5kdXN0cmlhbCBmaWVsZGJ1cworIworIyBDT05GSUdfQ0FONExJTlVYIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorQ09ORklHX0JMQUNLRklOX0RQTUM9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19DSEFSREVWPW0KKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPW0KKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19CTEFDS0ZJTl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDUyNTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1NDMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKK0NPTkZJR19TUElfQkZJTj15CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorQ09ORklHX0ZCPW0KK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9bQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT1tCitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQkZJTl83MTcxPW0KK0NPTkZJR19GQl9CRklOXzczOTM9bQorQ09ORklHX05UU0M9eQorIyBDT05GSUdfUEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05UU0NfNjQweDQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQUxfNjQweDQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19OVFNDX1lDQkNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTF9ZQ0JDUiBpcyBub3Qgc2V0CitDT05GSUdfQURWNzM5M18xWE1FTT15CisjIENPTkZJR19BRFY3MzkzXzJYTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9bQorCisjCisjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIworQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKworIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfU1BJX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIworIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMKKworIworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorCisjCisjIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0JGSU49eQorCisjCisjIERNQSBFbmdpbmUgc3VwcG9ydAorIworIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKworIworIyBETUEgRGV2aWNlcworIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKKyMgUEJYIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BCWCBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CisjIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX0ZTPW0KK0NPTkZJR19ZQUZGU19ZQUZGUzE9eQorIyBDT05GSUdfWUFGRlNfRE9FU19FQ0MgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX1lBRkZTMj15CitDT05GSUdfWUFGRlNfQVVUT19ZQUZGUzI9eQorIyBDT05GSUdfWUFGRlNfRElTQUJMRV9MQVpZX0xPQUQgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX0NIRUNLUE9JTlRfUkVTRVJWRURfQkxPQ0tTPTEwCisjIENPTkZJR19ZQUZGU19ESVNBQkxFX1dJREVfVE5PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lBRkZTX0FMV0FZU19DSEVDS19DSFVOS19FUkFTRUQgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lOX1JBTT15CitDT05GSUdfSkZGUzJfRlM9bQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KKyMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9bQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0VSSUFMX0VBUkxZX0lOSVQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0hVTlRfRk9SX1pFUk89eQorIyBDT05GSUdfREVCVUdfQkZJTl9OT19LRVJOX0hXVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0NQTEJfSU5GTz15CitDT05GSUdfQUNDRVNTX0NIRUNLPXkKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVM9eQorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQ2N2RjNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKQEAgLTAsMCArMSwxMzMyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAuNAorIworIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CitDT05GSUdfQkxBQ0tGSU49eQorQ09ORklHX0JGSU49eQorQ09ORklHX1NFTUFQSE9SRV9TTEVFUEVSUz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTQKK0NPTkZJR19JUlFDSElQX0RFTVVYX0dQSU89eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQklHX09SREVSX0FMTE9DX05PRkFJTF9NQUdJQz0zCisjIENPTkZJR19MSU1JVF9QQUdFQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0JVRERZPXkKKyMgQ09ORklHX05QMiBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX1RJTllfU0hNRU09eQorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBCbG9jayBsYXllcgorIworQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorCisjCisjIEJsYWNrZmluIFByb2Nlc3NvciBPcHRpb25zCisjCisKKyMKKyMgUHJvY2Vzc29yIGFuZCBCb2FyZCBTZXR0aW5ncworIworIyBDT05GSUdfQkY1MzEgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzMgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzYgaXMgbm90IHNldAorQ09ORklHX0JGNTM3PXkKKyMgQ09ORklHX0JGNTYxIGlzIG5vdCBzZXQKK0NPTkZJR19CRl9SRVZfMF8yPXkKKyMgQ09ORklHX0JGX1JFVl8wXzMgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWXzBfNCBpcyBub3Qgc2V0CisjIENPTkZJR19CRl9SRVZfMF81IGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX1NJTkdMRV9DT1JFPXkKKyMgQ09ORklHX0JGSU41MzNfRVpLSVQgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjUzM19TVEFNUCBpcyBub3Qgc2V0CitDT05GSUdfQkZJTjUzN19TVEFNUD15CisjIENPTkZJR19CRklONTMzX0JMVUVURUNITklYX0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU41MzdfQkxVRVRFQ0hOSVhfQ00gaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjU2MV9CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklONTYxX0VaS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOQVYxMCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19NRU1fTVQ0OExDMzJNOEEyXzc1PXkKK0NPTkZJR19JUlFfUExMX1dBS0VVUD03CisKKyMKKyMgQkY1MzcgU3BlY2lmaWMgQ29uZmlndXJhdGlvbgorIworCisjCisjIFBPUlQgRi9HIFNlbGVjdGlvbgorIworQ09ORklHX0JGNTM3X1BPUlRfRj15CisjIENPTkZJR19CRjUzN19QT1JUX0cgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzdfUE9SVF9IIGlzIG5vdCBzZXQKKworIworIyBJbnRlcnJ1cHQgUHJpb3JpdHkgQXNzaWdubWVudAorIworCisjCisjIFByaW9yaXR5CisjCitDT05GSUdfSVJRX0RNQV9FUlJPUj03CitDT05GSUdfSVJRX0VSUk9SPTcKK0NPTkZJR19JUlFfUlRDPTgKK0NPTkZJR19JUlFfUFBJPTgKK0NPTkZJR19JUlFfU1BPUlQwX1JYPTkKK0NPTkZJR19JUlFfU1BPUlQwX1RYPTkKK0NPTkZJR19JUlFfU1BPUlQxX1JYPTkKK0NPTkZJR19JUlFfU1BPUlQxX1RYPTkKK0NPTkZJR19JUlFfVFdJPTEwCitDT05GSUdfSVJRX1NQST0xMAorQ09ORklHX0lSUV9VQVJUMF9SWD0xMAorQ09ORklHX0lSUV9VQVJUMF9UWD0xMAorQ09ORklHX0lSUV9VQVJUMV9SWD0xMAorQ09ORklHX0lSUV9VQVJUMV9UWD0xMAorQ09ORklHX0lSUV9DQU5fUlg9MTEKK0NPTkZJR19JUlFfQ0FOX1RYPTExCitDT05GSUdfSVJRX01BQ19SWD0xMQorQ09ORklHX0lSUV9NQUNfVFg9MTEKK0NPTkZJR19JUlFfVE1SMD0xMgorQ09ORklHX0lSUV9UTVIxPTEyCitDT05GSUdfSVJRX1RNUjI9MTIKK0NPTkZJR19JUlFfVE1SMz0xMgorQ09ORklHX0lSUV9UTVI0PTEyCitDT05GSUdfSVJRX1RNUjU9MTIKK0NPTkZJR19JUlFfVE1SNj0xMgorQ09ORklHX0lSUV9UTVI3PTEyCitDT05GSUdfSVJRX1BST0dfSU5UQT0xMgorQ09ORklHX0lSUV9QT1JUR19JTlRCPTEyCitDT05GSUdfSVJRX01FTV9ETUEwPTEzCitDT05GSUdfSVJRX01FTV9ETUExPTEzCitDT05GSUdfSVJRX1dBVENIPTEzCisKKyMKKyMgQm9hcmQgY3VzdG9taXphdGlvbnMKKyMKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisKKyMKKyMgQm9hcmQgU2V0dXAKKyMKK0NPTkZJR19DTEtJTl9IWj0yNTAwMDAwMAorQ09ORklHX01FTV9TSVpFPTY0CitDT05GSUdfTUVNX0FERF9XSURUSD0xMAorQ09ORklHX0JPT1RfTE9BRD0weDEwMDAKKworIworIyBDb25zb2xlIFVBUlQgU2V0dXAKKyMKKyMgQ09ORklHX0JBVURfOTYwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVVEXzE5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVURfMzg0MDAgaXMgbm90IHNldAorQ09ORklHX0JBVURfNTc2MDA9eQorIyBDT05GSUdfQkFVRF8xMTUyMDAgaXMgbm90IHNldAorQ09ORklHX0JBVURfTk9fUEFSSVRZPXkKKyMgQ09ORklHX0JBVURfUEFSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19CQVVEXzFfU1RPUEJJVD15CisjIENPTkZJR19CQVVEXzJfU1RPUEJJVCBpcyBub3Qgc2V0CisKKyMKKyMgQmxhY2tmaW4gS2VybmVsIE9wdGltaXphdGlvbnMKKyMKKworIworIyBUaW1lciBUaWNrCisjCisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisKKyMKKyMgTWVtb3J5IE9wdGltaXphdGlvbnMKKyMKK0NPTkZJR19JX0VOVFJZX0wxPXkKK0NPTkZJR19FWENQVF9JUlFfU1lTQ19MMT15CitDT05GSUdfRE9fSVJRX0wxPXkKK0NPTkZJR19DT1JFX1RJTUVSX0lSUV9MMT15CitDT05GSUdfSURMRV9MMT15CitDT05GSUdfU0NIRURVTEVfTDE9eQorQ09ORklHX0FSSVRITUVUSUNfT1BTX0wxPXkKK0NPTkZJR19BQ0NFU1NfT0tfTDE9eQorQ09ORklHX01FTVNFVF9MMT15CitDT05GSUdfTUVNQ1BZX0wxPXkKK0NPTkZJR19TWVNfQkZJTl9TUElOTE9DS19MMT15CisjIENPTkZJR19JUF9DSEVDS1NVTV9MMSBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDQUxMX1RBQl9MMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDEgaXMgbm90IHNldAorQ09ORklHX1JBTUtFUk5FTD15CisjIENPTkZJR19ST01LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19MQVJHRV9BTExPQ1M9eQorQ09ORklHX0JGSU5fRE1BXzVYWD15CisjIENPTkZJR19ETUFfVU5DQUNIRURfMk0gaXMgbm90IHNldAorQ09ORklHX0RNQV9VTkNBQ0hFRF8xTT15CisjIENPTkZJR19ETUFfVU5DQUNIRURfTk9ORSBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGUgU3VwcG9ydAorIworQ09ORklHX0JMS0ZJTl9DQUNIRT15CitDT05GSUdfQkxLRklOX0RDQUNIRT15CisjIENPTkZJR19CTEtGSU5fRENBQ0hFX0JBTktBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS0ZJTl9DQUNIRV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS0ZJTl9XQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLRklOX1dUPXkKK0NPTkZJR19MMV9NQVhfUElFQ0U9MTYKKworIworIyBDbG9jayBTZXR0aW5ncworIworIyBDT05GSUdfQkZJTl9LRVJORUxfQ0xPQ0sgaXMgbm90IHNldAorCisjCisjIEFzeW5jaG9ub3VzIE1lbW9yeSBDb25maWd1cmF0aW9uCisjCisKKyMKKyMgRUJJVV9BTUJDVEwgR2xvYmFsIENvbnRyb2wKKyMKK0NPTkZJR19DX0FNQ0tFTj15CitDT05GSUdfQ19DRFBSSU89eQorIyBDT05GSUdfQ19BTUJFTiBpcyBub3Qgc2V0CisjIENPTkZJR19DX0FNQkVOX0IwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NfQU1CRU5fQjBfQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ19BTUJFTl9CMF9CMV9CMiBpcyBub3Qgc2V0CitDT05GSUdfQ19BTUJFTl9BTEw9eQorCisjCisjIEVCSVVfQU1CQ1RMIENvbnRyb2wKKyMKK0NPTkZJR19CQU5LXzA9MHg3QkIwCitDT05GSUdfQkFOS18xPTB4N0JCMAorQ09ORklHX0JBTktfMj0weDdCQjAKK0NPTkZJR19CQU5LXzM9MHg5OUIzCisKKyMKKyMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBNQ0EsIElTQSkKKyMKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CisjCisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGX0ZEUElDPXkKK0NPTkZJR19CSU5GTVRfRkxBVD15CitDT05GSUdfQklORk1UX1pGTEFUPXkKKyMgQ09ORklHX0JJTkZNVF9TSEFSRURfRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX1BNX0xFR0FDWT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9XQUtFVVBfR1BJT19CWV9TSUNfSVdSPXkKKyMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1dBS0VVUF9HUElPX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfUE1fV0FLRVVQX1NJQ19JV1I9MHg4MDAwMDAwMAorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorQ09ORklHX0lSREE9bQorCisjCisjIElyREEgcHJvdG9jb2xzCisjCitDT05GSUdfSVJMQU49bQorQ09ORklHX0lSQ09NTT1tCisjIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKKworIworIyBJckRBIG9wdGlvbnMKKyMKK0NPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUD15CisjIENPTkZJR19JUkRBX0ZBU1RfUlIgaXMgbm90IHNldAorIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0lSVFRZX1NJUj1tCisKKyMKKyMgRG9uZ2xlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RPTkdMRSBpcyBub3Qgc2V0CisKKyMKKyMgT2xkIFNJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfSVJQT1JUX1NJUiBpcyBub3Qgc2V0CisKKyMKKyMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAorIworCisjCisjIEZJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj1tCitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0pFREVDUFJPQkU9bQorQ09ORklHX01URF9HRU5fUFJPQkU9bQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01XMzIwRD1tCitDT05GSUdfTVREX1JBTT15CitDT05GSUdfTVREX1JPTT1tCisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkY1eHg9bQorQ09ORklHX0JGSU5fRkxBU0hfU0laRT0weDQwMDAwMAorQ09ORklHX0VCSVVfRkxBU0hfQkFTRT0weDIwMDAwMDAwCisKKyMKKyMgRkxBU0hfRUJJVV9BTUJDVEwgQ29udHJvbAorIworQ09ORklHX0JGSU5fRkxBU0hfQkFOS18wPTB4N0JCMAorQ09ORklHX0JGSU5fRkxBU0hfQkFOS18xPTB4N0JCMAorQ09ORklHX0JGSU5fRkxBU0hfQkFOS18yPTB4N0JCMAorQ09ORklHX0JGSU5fRkxBU0hfQkFOS18zPTB4N0JCMAorIyBDT05GSUdfTVREX1VDTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX01URF9OQU5EPW0KKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9CRklOPW0KK0NPTkZJR19CRklOX05BTkRfQkFTRT0weDIwMjEyMDAwCitDT05GSUdfQkZJTl9OQU5EX0NMRT0yCitDT05GSUdfQkZJTl9OQU5EX0FMRT0xCitDT05GSUdfQkZJTl9OQU5EX1JFQURZPTMKK0NPTkZJR19NVERfTkFORF9JRFM9bQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKworIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9NQUM9eQorQ09ORklHX0JGSU5fTUFDX1VTRV9MMT15CitDT05GSUdfQkZJTl9UWF9ERVNDX05VTT0xMAorQ09ORklHX0JGSU5fUlhfREVTQ19OVU09MjAKKyMgQ09ORklHX0JGSU5fTUFDX1JNSUkgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9bQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1M1hfUEZCVVRUT05TIGlzIG5vdCBzZXQKK0NPTkZJR19UV0lfS0VZUEFEPW0KK0NPTkZJR19CRklOX1RXSUtFWVBBRF9JUlFfUEZYPTcyCisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX0FEOTk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQURDX0JGNTMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTMzX1BGTEFHUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjV4eF9QUElGQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkY1eHhfVElNRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNXh4X1BQSSBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9TUE9SVD15CisjIENPTkZJR19CRklOX1RJTUVSX0xBVEVOQ1kgaXMgbm90IHNldAorQ09ORklHX1RXSV9MQ0Q9bQorQ09ORklHX1RXSV9MQ0RfU0xBVkVfQUREUj0zNAorIyBDT05GSUdfQUQ1MzA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0JGSU49eQorQ09ORklHX1NFUklBTF9CRklOX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9CRklOX0RNQT15CisjIENPTkZJR19TRVJJQUxfQkZJTl9QSU8gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9CRklOX1VBUlQwPXkKKyMgQ09ORklHX0JGSU5fVUFSVDBfQ1RTUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9CRklOX1VBUlQxIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorCisjCisjIENBTiwgdGhlIGNhciBidXMgYW5kIGluZHVzdHJpYWwgZmllbGRidXMKKyMKK0NPTkZJR19DQU40TElOVVg9eQorCisjCisjIGxpbnV4IGVtYmVkZGVkIGRyaXZlcnMKKyMKKyMgQ09ORklHX0NBTl9NQ0Y1MjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9VTkNUV0lOQ0FOIGlzIG5vdCBzZXQKK0NPTkZJR19DQU5fQkxBQ0tGSU49bQorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CitDT05GSUdfQkxBQ0tGSU5fRFBNQz15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz1tCitDT05GSUdfSTJDX0NIQVJERVY9bQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQkxBQ0tGSU5fR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0JMQUNLRklOX1RXST1tCitDT05GSUdfSTJDX0JMQUNLRklOX1RXSV9DTEtfS0haPTUwCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0FENTI1Mj1tCisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTU0MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworQ09ORklHX1NQSV9CRklOPXkKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRklSTVdBUkVfRURJRD15CitDT05GSUdfRkI9bQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD1tCitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPW0KK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPW0KKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9CRklOXzcxNzE9bQorQ09ORklHX0ZCX0JGSU5fNzM5Mz1tCitDT05GSUdfTlRTQz15CisjIENPTkZJR19QQUwgaXMgbm90IHNldAorIyBDT05GSUdfTlRTQ182NDB4NDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTF82NDB4NDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05UU0NfWUNCQ1IgaXMgbm90IHNldAorIyBDT05GSUdfUEFMX1lDQkNSIGlzIG5vdCBzZXQKK0NPTkZJR19BRFY3MzkzXzFYTUVNPXkKKyMgQ09ORklHX0FEVjczOTNfMlhNRU0gaXMgbm90IHNldAorQ09ORklHX0ZCX0JGNTM3X0xRMDM1PW0KK0NPTkZJR19MUTAzNV9TTEFWRV9BRERSPTB4NTgKKyMgQ09ORklHX0ZCX0JGSU5fTEFORFNDQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JGSU5fQkdSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPW0KK0NPTkZJR19CQUNLTElHSFRfREVWSUNFPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KK0NPTkZJR19MQ0RfREVWSUNFPXkKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPW0KKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJpYyBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CisKKyMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSV9NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisKKyMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjCisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKworIworIyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9CRklOPXkKKworIworIyBETUEgRW5naW5lIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorCisjCisjIERNQSBDbGllbnRzCisjCisKKyMKKyMgRE1BIERldmljZXMKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCisjIFBCWCBzdXBwb3J0CisjCisjIENPTkZJR19QQlggaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19GUz1tCitDT05GSUdfWUFGRlNfWUFGRlMxPXkKKyMgQ09ORklHX1lBRkZTX0RPRVNfRUNDIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19ZQUZGUzI9eQorQ09ORklHX1lBRkZTX0FVVE9fWUFGRlMyPXkKKyMgQ09ORklHX1lBRkZTX0RJU0FCTEVfTEFaWV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19DSEVDS1BPSU5UX1JFU0VSVkVEX0JMT0NLUz0xMAorIyBDT05GSUdfWUFGRlNfRElTQUJMRV9XSURFX1ROT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ZQUZGU19BTFdBWVNfQ0hFQ0tfQ0hVTktfRVJBU0VEIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19TSE9SVF9OQU1FU19JTl9SQU09eQorQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9bQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NFUklBTF9FQVJMWV9JTklUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19IVU5UX0ZPUl9aRVJPPXkKKyMgQ09ORklHX0RFQlVHX0JGSU5fTk9fS0VSTl9IV1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUExCX0lORk89eQorQ09ORklHX0FDQ0VTU19DSEVDSz15CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPXkKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0NSQ19DQ0lUVD1tCisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0lPTUFQX0NPUFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyY2EyMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKQEAgLTAsMCArMSwxMDczIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTkuMworIworIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CitDT05GSUdfQkxBQ0tGSU49eQorQ09ORklHX0JGSU49eQorQ09ORklHX1NFTUFQSE9SRV9TTEVFUEVSUz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfVUNMSU5VWD15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNAorQ09ORklHX0lSUUNISVBfREVNVVhfR1BJTz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX0JJR19PUkRFUl9BTExPQ19OT0ZBSUxfTUFHSUM9MworIyBDT05GSUdfTElNSVRfUEFHRUNBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19CVUREWT15CisjIENPTkZJR19OUDIgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19USU5ZX1NITUVNPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisKKyMKKyMgQmxhY2tmaW4gUHJvY2Vzc29yIE9wdGlvbnMKKyMKKworIworIyBQcm9jZXNzb3IgYW5kIEJvYXJkIFNldHRpbmdzCisjCisjIENPTkZJR19CRjUzMSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzMyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzNCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzNiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUzNyBpcyBub3Qgc2V0CitDT05GSUdfQkY1NjE9eQorIyBDT05GSUdfQkZfUkVWXzBfMiBpcyBub3Qgc2V0CitDT05GSUdfQkZfUkVWXzBfMz15CisjIENPTkZJR19CRl9SRVZfMF80IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl8wXzUgaXMgbm90IHNldAorQ09ORklHX0JGSU5fRFVBTF9DT1JFPXkKKyMgQ09ORklHX0JGSU41MzNfRVpLSVQgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjUzM19TVEFNUCBpcyBub3Qgc2V0CisjIENPTkZJR19CRklONTM3X1NUQU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU41MzNfQkxVRVRFQ0hOSVhfQ00gaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjUzN19CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklONTYxX0JMVUVURUNITklYX0NNIGlzIG5vdCBzZXQKK0NPTkZJR19CRklONTYxX0VaS0lUPXkKKyMgQ09ORklHX1BOQVYxMCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19NRU1fTVQ0OExDMTZNMTZBMlRHXzc1PXkKKworIworIyBCRjU2MSBTcGVjaWZpYyBDb25maWd1cmF0aW9uCisjCisKKyMKKyMgQ29yZSBCIFN1cHBvcnQKKyMKKworIworIyBDb3JlIEIgU3VwcG9ydAorIworQ09ORklHX0JGNTYxX0NPUkVCPXkKK0NPTkZJR19CRjU2MV9DT1JFQl9SRVNFVD15CisKKyMKKyMgSW50ZXJydXB0IFByaW9yaXR5IEFzc2lnbm1lbnQKKyMKKworIworIyBQcmlvcml0eQorIworQ09ORklHX0lSUV9QTExfV0FLRVVQPTcKK0NPTkZJR19JUlFfRE1BMV9FUlJPUj03CitDT05GSUdfSVJRX0RNQTJfRVJST1I9NworQ09ORklHX0lSUV9JTURNQV9FUlJPUj03CitDT05GSUdfSVJRX1BQSTBfRVJST1I9NworQ09ORklHX0lSUV9QUEkxX0VSUk9SPTcKK0NPTkZJR19JUlFfU1BPUlQwX0VSUk9SPTcKK0NPTkZJR19JUlFfU1BPUlQxX0VSUk9SPTcKK0NPTkZJR19JUlFfU1BJX0VSUk9SPTcKK0NPTkZJR19JUlFfVUFSVF9FUlJPUj03CitDT05GSUdfSVJRX1JFU0VSVkVEX0VSUk9SPTcKK0NPTkZJR19JUlFfRE1BMV8wPTgKK0NPTkZJR19JUlFfRE1BMV8xPTgKK0NPTkZJR19JUlFfRE1BMV8yPTgKK0NPTkZJR19JUlFfRE1BMV8zPTgKK0NPTkZJR19JUlFfRE1BMV80PTgKK0NPTkZJR19JUlFfRE1BMV81PTgKK0NPTkZJR19JUlFfRE1BMV82PTgKK0NPTkZJR19JUlFfRE1BMV83PTgKK0NPTkZJR19JUlFfRE1BMV84PTgKK0NPTkZJR19JUlFfRE1BMV85PTgKK0NPTkZJR19JUlFfRE1BMV8xMD04CitDT05GSUdfSVJRX0RNQTFfMTE9OAorQ09ORklHX0lSUV9ETUEyXzA9OQorQ09ORklHX0lSUV9ETUEyXzE9OQorQ09ORklHX0lSUV9ETUEyXzI9OQorQ09ORklHX0lSUV9ETUEyXzM9OQorQ09ORklHX0lSUV9ETUEyXzQ9OQorQ09ORklHX0lSUV9ETUEyXzU9OQorQ09ORklHX0lSUV9ETUEyXzY9OQorQ09ORklHX0lSUV9ETUEyXzc9OQorQ09ORklHX0lSUV9ETUEyXzg9OQorQ09ORklHX0lSUV9ETUEyXzk9OQorQ09ORklHX0lSUV9ETUEyXzEwPTkKK0NPTkZJR19JUlFfRE1BMl8xMT05CitDT05GSUdfSVJRX1RJTUVSMD0xMAorQ09ORklHX0lSUV9USU1FUjE9MTAKK0NPTkZJR19JUlFfVElNRVIyPTEwCitDT05GSUdfSVJRX1RJTUVSMz0xMAorQ09ORklHX0lSUV9USU1FUjQ9MTAKK0NPTkZJR19JUlFfVElNRVI1PTEwCitDT05GSUdfSVJRX1RJTUVSNj0xMAorQ09ORklHX0lSUV9USU1FUjc9MTAKK0NPTkZJR19JUlFfVElNRVI4PTEwCitDT05GSUdfSVJRX1RJTUVSOT0xMAorQ09ORklHX0lSUV9USU1FUjEwPTEwCitDT05GSUdfSVJRX1RJTUVSMTE9MTAKK0NPTkZJR19JUlFfUFJPRzBfSU5UQT0xMQorQ09ORklHX0lSUV9QUk9HMF9JTlRCPTExCitDT05GSUdfSVJRX1BST0cxX0lOVEE9MTEKK0NPTkZJR19JUlFfUFJPRzFfSU5UQj0xMQorQ09ORklHX0lSUV9QUk9HMl9JTlRBPTExCitDT05GSUdfSVJRX1BST0cyX0lOVEI9MTEKK0NPTkZJR19JUlFfRE1BMV9XUlJEMD04CitDT05GSUdfSVJRX0RNQTFfV1JSRDE9OAorQ09ORklHX0lSUV9ETUEyX1dSUkQwPTkKK0NPTkZJR19JUlFfRE1BMl9XUlJEMT05CitDT05GSUdfSVJRX0lNRE1BX1dSUkQwPTEyCitDT05GSUdfSVJRX0lNRE1BX1dSUkQxPTEyCitDT05GSUdfSVJRX1dEVElNRVI9MTMKKworIworIyBCb2FyZCBjdXN0b21pemF0aW9ucworIworCisjCisjIEJvYXJkIFNldHVwCisjCitDT05GSUdfQ0xLSU5fSFo9MzAwMDAwMDAKK0NPTkZJR19NRU1fU0laRT02NAorQ09ORklHX01FTV9BRERfV0lEVEg9OQorQ09ORklHX0JPT1RfTE9BRD0weDEwMDAKKworIworIyBDb25zb2xlIFVBUlQgU2V0dXAKKyMKKyMgQ09ORklHX0JBVURfOTYwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVVEXzE5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVURfMzg0MDAgaXMgbm90IHNldAorQ09ORklHX0JBVURfNTc2MDA9eQorIyBDT05GSUdfQkFVRF8xMTUyMDAgaXMgbm90IHNldAorQ09ORklHX0JBVURfTk9fUEFSSVRZPXkKKyMgQ09ORklHX0JBVURfUEFSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19CQVVEXzFfU1RPUEJJVD15CisjIENPTkZJR19CQVVEXzJfU1RPUEJJVCBpcyBub3Qgc2V0CisKKyMKKyMgQmxhY2tmaW4gS2VybmVsIE9wdGltaXphdGlvbnMKKyMKKworIworIyBUaW1lciBUaWNrCisjCisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKworIworIyBNZW1vcnkgT3B0aW1pemF0aW9ucworIworQ09ORklHX0lfRU5UUllfTDE9eQorQ09ORklHX0VYQ1BUX0lSUV9TWVNDX0wxPXkKK0NPTkZJR19ET19JUlFfTDE9eQorQ09ORklHX0NPUkVfVElNRVJfSVJRX0wxPXkKK0NPTkZJR19JRExFX0wxPXkKK0NPTkZJR19TQ0hFRFVMRV9MMT15CitDT05GSUdfQVJJVEhNRVRJQ19PUFNfTDE9eQorQ09ORklHX0FDQ0VTU19PS19MMT15CitDT05GSUdfTUVNU0VUX0wxPXkKK0NPTkZJR19NRU1DUFlfTDE9eQorQ09ORklHX1NZU19CRklOX1NQSU5MT0NLX0wxPXkKKyMgQ09ORklHX0lQX0NIRUNLU1VNX0wxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NBTExfVEFCX0wxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTEJfU1dJVENIX1RBQl9MMSBpcyBub3Qgc2V0CitDT05GSUdfUkFNS0VSTkVMPXkKKyMgQ09ORklHX1JPTUtFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX0xBUkdFX0FMTE9DUz15CitDT05GSUdfQkZJTl9ETUFfNVhYPXkKKyMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CitDT05GSUdfRE1BX1VOQ0FDSEVEXzFNPXkKKyMgQ09ORklHX0RNQV9VTkNBQ0hFRF9OT05FIGlzIG5vdCBzZXQKKworIworIyBDYWNoZSBTdXBwb3J0CisjCitDT05GSUdfQkxLRklOX0NBQ0hFPXkKK0NPTkZJR19CTEtGSU5fRENBQ0hFPXkKKyMgQ09ORklHX0JMS0ZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAorIyBDT05GSUdfQkxLRklOX0NBQ0hFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQkxLRklOX1dCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtGSU5fV1Q9eQorQ09ORklHX0wxX01BWF9QSUVDRT0xNgorCisjCisjIENsb2NrIFNldHRpbmdzCisjCisjIENPTkZJR19CRklOX0tFUk5FTF9DTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgQXN5bmNob25vdXMgTWVtb3J5IENvbmZpZ3VyYXRpb24KKyMKKworIworIyBFQklVX0FNQkNUTCBHbG9iYWwgQ29udHJvbAorIworQ09ORklHX0NfQU1DS0VOPXkKK0NPTkZJR19DX0NEUFJJTz15CitDT05GSUdfQ19CMFBFTj15CitDT05GSUdfQ19CMVBFTj15CitDT05GSUdfQ19CMlBFTj15CisjIENPTkZJR19DX0IzUEVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NfQU1CRU4gaXMgbm90IHNldAorIyBDT05GSUdfQ19BTUJFTl9CMCBpcyBub3Qgc2V0CisjIENPTkZJR19DX0FNQkVOX0IwX0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NfQU1CRU5fQjBfQjFfQjIgaXMgbm90IHNldAorQ09ORklHX0NfQU1CRU5fQUxMPXkKKworIworIyBFQklVX0FNQkNUTCBDb250cm9sCisjCitDT05GSUdfQkFOS18wPTB4N0JCMAorQ09ORklHX0JBTktfMT0weDdCQjAKK0NPTkZJR19CQU5LXzI9MHg3QkIwCitDT05GSUdfQkFOS18zPTB4OTlCMworCisjCisjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgTUNBLCBJU0EpCisjCisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEhvdHBsdWcgU3VwcG9ydAorIworCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRl9GRFBJQz15CitDT05GSUdfQklORk1UX0ZMQVQ9eQorQ09ORklHX0JJTkZNVF9aRkxBVD15CisjIENPTkZJR19CSU5GTVRfU0hBUkVEX0ZMQVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj1tCitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfSkVERUNQUk9CRT1tCitDT05GSUdfTVREX0dFTl9QUk9CRT1tCisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTVczMjBEPW0KK0NPTkZJR19NVERfUkFNPXkKK0NPTkZJR19NVERfUk9NPW0KKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0VaS0lUNTYxIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkY1eHg9bQorQ09ORklHX0JGSU5fRkxBU0hfU0laRT0weDA0MDAwMDAKK0NPTkZJR19FQklVX0ZMQVNIX0JBU0U9MHgyMDAwMDAwMAorCisjCisjIEZMQVNIX0VCSVVfQU1CQ1RMIENvbnRyb2wKKyMKK0NPTkZJR19CRklOX0ZMQVNIX0JBTktfMD0weDdCQjAKK0NPTkZJR19CRklOX0ZMQVNIX0JBTktfMT0weDdCQjAKK0NPTkZJR19CRklOX0ZMQVNIX0JBTktfMj0weDdCQjAKK0NPTkZJR19CRklOX0ZMQVNIX0JBTktfMz0weDdCQjAKKyMgQ09ORklHX01URF9VQ0xJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX1NNQzkxWD15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX0FEOTk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQURDX0JGNTMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTMzX1BGTEFHUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjV4eF9QUElGQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkY1eHhfVElNRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNXh4X1BQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1NQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9CRklOPXkKK0NPTkZJR19TRVJJQUxfQkZJTl9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQkZJTl9ETUE9eQorIyBDT05GSUdfU0VSSUFMX0JGSU5fUElPIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQkZJTl9VQVJUMD15CisjIENPTkZJR19CRklOX1VBUlQwX0NUU1JUUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQgaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKworIworIyBDQU4sIHRoZSBjYXIgYnVzIGFuZCBpbmR1c3RyaWFsIGZpZWxkYnVzCisjCisjIENPTkZJR19DQU40TElOVVggaXMgbm90IHNldAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEFDS0ZJTl9EUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIworCisjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBETUEgRW5naW5lIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorCisjCisjIERNQSBDbGllbnRzCisjCisKKyMKKyMgRE1BIERldmljZXMKKyMKKworIworIyBQQlggc3VwcG9ydAorIworIyBDT05GSUdfUEJYIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfWUFGRlNfRlM9bQorQ09ORklHX1lBRkZTX1lBRkZTMT15CisjIENPTkZJR19ZQUZGU19ET0VTX0VDQyBpcyBub3Qgc2V0CitDT05GSUdfWUFGRlNfWUFGRlMyPXkKK0NPTkZJR19ZQUZGU19BVVRPX1lBRkZTMj15CisjIENPTkZJR19ZQUZGU19ESVNBQkxFX0xBWllfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfWUFGRlNfQ0hFQ0tQT0lOVF9SRVNFUlZFRF9CTE9DS1M9MTAKKyMgQ09ORklHX1lBRkZTX0RJU0FCTEVfV0lERV9UTk9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfWUFGRlNfQUxXQVlTX0NIRUNLX0NIVU5LX0VSQVNFRCBpcyBub3Qgc2V0CitDT05GSUdfWUFGRlNfU0hPUlRfTkFNRVNfSU5fUkFNPXkKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9bQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0VSSUFMX0VBUkxZX0lOSVQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0hVTlRfRk9SX1pFUk89eQorIyBDT05GSUdfREVCVUdfQkZJTl9OT19LRVJOX0hXVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFVBTF9DT1JFX1RFU1RfTU9EVUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RQQVJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19OT19LRVJORUxfTVNHIGlzIG5vdCBzZXQKK0NPTkZJR19DUExCX0lORk89eQorIyBDT05GSUdfTk9fQUNDRVNTX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVM9eQorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1BMSVNUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9QTkFWLTEwX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9QTkFWLTEwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2I0ZmZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL1BOQVYtMTBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTI1MyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LjMKKyMKKyMgQ09ORklHX01NVSBpcyBub3Qgc2V0CisjIENPTkZJR19GUFUgaXMgbm90IHNldAorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0gaXMgbm90IHNldAorQ09ORklHX0JMQUNLRklOPXkKK0NPTkZJR19CRklOPXkKK0NPTkZJR19TRU1BUEhPUkVfU0xFRVBFUlM9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1VDTElOVVg9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTQKK0NPTkZJR19JUlFDSElQX0RFTVVYX0dQSU89eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfQklHX09SREVSX0FMTE9DX05PRkFJTF9NQUdJQz05CisjIENPTkZJR19MSU1JVF9QQUdFQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0JVRERZPXkKKyMgQ09ORklHX05QMiBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX1RJTllfU0hNRU09eQorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBCbG9jayBsYXllcgorIworQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKworIworIyBCbGFja2ZpbiBQcm9jZXNzb3IgT3B0aW9ucworIworCisjCisjIFByb2Nlc3NvciBhbmQgQm9hcmQgU2V0dGluZ3MKKyMKKyMgQ09ORklHX0JGNTMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTM2IGlzIG5vdCBzZXQKK0NPTkZJR19CRjUzNz15CisjIENPTkZJR19CRjU2MSBpcyBub3Qgc2V0CitDT05GSUdfQkZfUkVWXzBfMj15CisjIENPTkZJR19CRl9SRVZfMF8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl8wXzQgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWXzBfNSBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9TSU5HTEVfQ09SRT15CisjIENPTkZJR19CRklONTMzX0VaS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU41MzNfU1RBTVAgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjUzN19TVEFNUCBpcyBub3Qgc2V0CisjIENPTkZJR19CRklONTMzX0JMVUVURUNITklYX0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU41MzdfQkxVRVRFQ0hOSVhfQ00gaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjU2MV9CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklONTYxX0VaS0lUIGlzIG5vdCBzZXQKK0NPTkZJR19QTkFWMTA9eQorIyBDT05GSUdfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfTUVNX01UNDhMQzMyTThBMl83NT15CitDT05GSUdfSVJRX1BMTF9XQUtFVVA9NworCisjCisjIEJGNTM3IFNwZWNpZmljIENvbmZpZ3VyYXRpb24KKyMKKworIworIyBQT1JUIEYvRyBTZWxlY3Rpb24KKyMKK0NPTkZJR19CRjUzN19QT1JUX0Y9eQorIyBDT05GSUdfQkY1MzdfUE9SVF9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNTM3X1BPUlRfSCBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZXJydXB0IFByaW9yaXR5IEFzc2lnbm1lbnQKKyMKKworIworIyBQcmlvcml0eQorIworQ09ORklHX0lSUV9ETUFfRVJST1I9NworQ09ORklHX0lSUV9FUlJPUj03CitDT05GSUdfSVJRX1JUQz04CitDT05GSUdfSVJRX1BQST04CitDT05GSUdfSVJRX1NQT1JUMF9SWD05CitDT05GSUdfSVJRX1NQT1JUMF9UWD05CitDT05GSUdfSVJRX1NQT1JUMV9SWD05CitDT05GSUdfSVJRX1NQT1JUMV9UWD05CitDT05GSUdfSVJRX1RXST0xMAorQ09ORklHX0lSUV9TUEk9MTAKK0NPTkZJR19JUlFfVUFSVDBfUlg9MTAKK0NPTkZJR19JUlFfVUFSVDBfVFg9MTAKK0NPTkZJR19JUlFfVUFSVDFfUlg9MTAKK0NPTkZJR19JUlFfVUFSVDFfVFg9MTAKK0NPTkZJR19JUlFfQ0FOX1JYPTExCitDT05GSUdfSVJRX0NBTl9UWD0xMQorQ09ORklHX0lSUV9NQUNfUlg9MTEKK0NPTkZJR19JUlFfTUFDX1RYPTExCitDT05GSUdfSVJRX1RNUjA9MTIKK0NPTkZJR19JUlFfVE1SMT0xMgorQ09ORklHX0lSUV9UTVIyPTEyCitDT05GSUdfSVJRX1RNUjM9MTIKK0NPTkZJR19JUlFfVE1SND0xMgorQ09ORklHX0lSUV9UTVI1PTEyCitDT05GSUdfSVJRX1RNUjY9MTIKK0NPTkZJR19JUlFfVE1SNz0xMgorQ09ORklHX0lSUV9QUk9HX0lOVEE9MTIKK0NPTkZJR19JUlFfUE9SVEdfSU5UQj0xMgorQ09ORklHX0lSUV9NRU1fRE1BMD0xMworQ09ORklHX0lSUV9NRU1fRE1BMT0xMworQ09ORklHX0lSUV9XQVRDSD0xMworCisjCisjIEJvYXJkIGN1c3RvbWl6YXRpb25zCisjCisKKyMKKyMgQm9hcmQgU2V0dXAKKyMKK0NPTkZJR19DTEtJTl9IWj0yNDU3NjAwMAorQ09ORklHX01FTV9TSVpFPTY0CitDT05GSUdfTUVNX0FERF9XSURUSD0xMAorQ09ORklHX0JPT1RfTE9BRD0weDEwMDAKKworIworIyBDb25zb2xlIFVBUlQgU2V0dXAKKyMKKyMgQ09ORklHX0JBVURfOTYwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVVEXzE5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVURfMzg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfQkFVRF81NzYwMCBpcyBub3Qgc2V0CitDT05GSUdfQkFVRF8xMTUyMDA9eQorQ09ORklHX0JBVURfTk9fUEFSSVRZPXkKKyMgQ09ORklHX0JBVURfUEFSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19CQVVEXzFfU1RPUEJJVD15CisjIENPTkZJR19CQVVEXzJfU1RPUEJJVCBpcyBub3Qgc2V0CisKKyMKKyMgQmxhY2tmaW4gS2VybmVsIE9wdGltaXphdGlvbnMKKyMKKworIworIyBUaW1lciBUaWNrCisjCisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKworIworIyBNZW1vcnkgT3B0aW1pemF0aW9ucworIworQ09ORklHX0lfRU5UUllfTDE9eQorQ09ORklHX0VYQ1BUX0lSUV9TWVNDX0wxPXkKK0NPTkZJR19ET19JUlFfTDE9eQorQ09ORklHX0NPUkVfVElNRVJfSVJRX0wxPXkKK0NPTkZJR19JRExFX0wxPXkKK0NPTkZJR19TQ0hFRFVMRV9MMT15CitDT05GSUdfQVJJVEhNRVRJQ19PUFNfTDE9eQorQ09ORklHX0FDQ0VTU19PS19MMT15CitDT05GSUdfTUVNU0VUX0wxPXkKK0NPTkZJR19NRU1DUFlfTDE9eQorQ09ORklHX1NZU19CRklOX1NQSU5MT0NLX0wxPXkKK0NPTkZJR19JUF9DSEVDS1NVTV9MMT15CitDT05GSUdfU1lTQ0FMTF9UQUJfTDE9eQorQ09ORklHX0NQTEJfU1dJVENIX1RBQl9MMT15CitDT05GSUdfUkFNS0VSTkVMPXkKKyMgQ09ORklHX1JPTUtFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX0xBUkdFX0FMTE9DUz15CitDT05GSUdfQkZJTl9ETUFfNVhYPXkKKyMgQ09ORklHX0RNQV9VTkNBQ0hFRF8yTSBpcyBub3Qgc2V0CitDT05GSUdfRE1BX1VOQ0FDSEVEXzFNPXkKKyMgQ09ORklHX0RNQV9VTkNBQ0hFRF9OT05FIGlzIG5vdCBzZXQKKworIworIyBDYWNoZSBTdXBwb3J0CisjCitDT05GSUdfQkxLRklOX0NBQ0hFPXkKK0NPTkZJR19CTEtGSU5fRENBQ0hFPXkKKyMgQ09ORklHX0JMS0ZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAorIyBDT05GSUdfQkxLRklOX0NBQ0hFX0xPQ0sgaXMgbm90IHNldAorQ09ORklHX0JMS0ZJTl9XQj15CisjIENPTkZJR19CTEtGSU5fV1QgaXMgbm90IHNldAorQ09ORklHX0wxX01BWF9QSUVDRT0xNgorCisjCisjIENsb2NrIFNldHRpbmdzCisjCisjIENPTkZJR19CRklOX0tFUk5FTF9DTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgQXN5bmNob25vdXMgTWVtb3J5IENvbmZpZ3VyYXRpb24KKyMKKworIworIyBFQklVX0FNQkNUTCBHbG9iYWwgQ29udHJvbAorIworQ09ORklHX0NfQU1DS0VOPXkKK0NPTkZJR19DX0NEUFJJTz15CisjIENPTkZJR19DX0FNQkVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NfQU1CRU5fQjAgaXMgbm90IHNldAorIyBDT05GSUdfQ19BTUJFTl9CMF9CMSBpcyBub3Qgc2V0CisjIENPTkZJR19DX0FNQkVOX0IwX0IxX0IyIGlzIG5vdCBzZXQKK0NPTkZJR19DX0FNQkVOX0FMTD15CisKKyMKKyMgRUJJVV9BTUJDVEwgQ29udHJvbAorIworQ09ORklHX0JBTktfMD0weDdCQjAKK0NPTkZJR19CQU5LXzE9MHgzM0IwCitDT05GSUdfQkFOS18yPTB4MzNCMAorQ09ORklHX0JBTktfMz0weDk5QjMKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIE1DQSwgSVNBKQorIworIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEZfRkRQSUM9eQorQ09ORklHX0JJTkZNVF9GTEFUPXkKK0NPTkZJR19CSU5GTVRfWkZMQVQ9eQorIyBDT05GSUdfQklORk1UX1NIQVJFRF9GTEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9bQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1JBTT15CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorIyBDT05GSUdfTVREX0JGNXh4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfVUNMSU5VWD15CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0JGSU49eQorQ09ORklHX0JGSU5fTkFORF9CQVNFPTB4MjAxMDAwMDAKK0NPTkZJR19CRklOX05BTkRfQ0xFPTIKK0NPTkZJR19CRklOX05BTkRfQUxFPTEKK0NPTkZJR19CRklOX05BTkRfUkVBRFk9NDQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKworIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9NQUM9eQorIyBDT05GSUdfQkZJTl9NQUNfVVNFX0wxIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX1RYX0RFU0NfTlVNPTEwMAorQ09ORklHX0JGSU5fUlhfREVTQ19OVU09MTAwCitDT05GSUdfQkZJTl9NQUNfUk1JST15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UU0RFVj15CitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9MjQwCitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9MzIwCitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3PXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CitDT05GSUdfSU5QVVRfVUlOUFVUPXkKKyMgQ09ORklHX0JGNTNYX1BGQlVUVE9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0lfS0VZUEFEIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfQUQ5OTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9BRENfQkY1MzMgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzNfUEZMQUdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNXh4X1BQSUZDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjV4eF9USU1FUlMgaXMgbm90IHNldAorIyBDT05GSUdfQkY1eHhfUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19CRklOX1NQT1JUPXkKKyMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0CitDT05GSUdfVFdJX0xDRD1tCitDT05GSUdfVFdJX0xDRF9TTEFWRV9BRERSPTM0CisjIENPTkZJR19BRDUzMDQgaXMgbm90IHNldAorIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQkZJTj15CitDT05GSUdfU0VSSUFMX0JGSU5fQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0JGSU5fRE1BPXkKKyMgQ09ORklHX1NFUklBTF9CRklOX1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0JGSU5fVUFSVDA9eQorIyBDT05GSUdfQkZJTl9VQVJUMF9DVFNSVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9CRklOX1VBUlQxPXkKKyMgQ09ORklHX0JGSU5fVUFSVDFfQ1RTUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorCisjCisjIENBTiwgdGhlIGNhciBidXMgYW5kIGluZHVzdHJpYWwgZmllbGRidXMKKyMKK0NPTkZJR19DQU40TElOVVg9eQorCisjCisjIGxpbnV4IGVtYmVkZGVkIGRyaXZlcnMKKyMKKyMgQ09ORklHX0NBTl9NQ0Y1MjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9VTkNUV0lOQ0FOIGlzIG5vdCBzZXQKK0NPTkZJR19DQU5fQkxBQ0tGSU49bQorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CitDT05GSUdfQkxBQ0tGSU5fRFBNQz15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQkZJTl9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQkZJTl9UV0k9eQorQ09ORklHX1RXSUNMS19LSFo9NTAKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDUyNTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfUENGODU3ND1tCitDT05GSUdfU0VOU09SU19QQ0Y4NTc1PXkKKyMgQ09ORklHX1NFTlNPUlNfUENBOTU0MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfQkZJTj15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKK0NPTkZJR19GQj15CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkZJTl83MTcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JGSU5fNzM5MyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQkY1MzdfTFEwMzU9eQorQ09ORklHX0xRMDM1X1NMQVZFX0FERFI9MHg1OAorQ09ORklHX0ZCX0JGSU5fTEFORFNDQVBFPXkKKyMgQ09ORklHX0ZCX0JGSU5fQkdSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfREVWSUNFPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19MQ0RfREVWSUNFPXkKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorCisjCisjIEdlbmVyaWMgZGV2aWNlcworIworIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKKworIworIyBBTFNBIEJsYWNrZmluIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9CTEFDS0ZJTl9BRDE4MzYgaXMgbm90IHNldAorQ09ORklHX1NORF9CTEFDS0ZJTl9BRDE5ODFCPW0KKyMgQ09ORklHX1NORF9CRklOX0FENzMzMTEgaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCitDT05GSUdfU09VTkRfUFJJTUU9eQorQ09ORklHX09TU19PQlNPTEVURV9EUklWRVI9eQorIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfU1BJX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIworIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMKKworIworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorCisjCisjIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0JGSU49eQorCisjCisjIERNQSBFbmdpbmUgc3VwcG9ydAorIworIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKworIworIyBETUEgRGV2aWNlcworIworCisjCisjIFBCWCBzdXBwb3J0CisjCisjIENPTkZJR19QQlggaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19GUz15CitDT05GSUdfWUFGRlNfWUFGRlMxPXkKKyMgQ09ORklHX1lBRkZTX0RPRVNfRUNDIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19ZQUZGUzI9eQorQ09ORklHX1lBRkZTX0FVVE9fWUFGRlMyPXkKKyMgQ09ORklHX1lBRkZTX0RJU0FCTEVfTEFaWV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19DSEVDS1BPSU5UX1JFU0VSVkVEX0JMT0NLUz0xMAorIyBDT05GSUdfWUFGRlNfRElTQUJMRV9XSURFX1ROT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ZQUZGU19BTFdBWVNfQ0hFQ0tfQ0hVTktfRVJBU0VEIGlzIG5vdCBzZXQKK0NPTkZJR19ZQUZGU19TSE9SVF9OQU1FU19JTl9SQU09eQorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9bQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0VSSUFMX0VBUkxZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSFVOVF9GT1JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CRklOX05PX0tFUk5fSFdUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UUEFSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTk9fS0VSTkVMX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUExCX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfTk9fQUNDRVNTX0NIRUNLIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVM9eQorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2RlZmNvbmZpZwppbmRleCBkNTkwNGNhLi5hNTEzZmJlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2RlZmNvbmZpZwpAQCAtMSwxOSArMSwyMCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAuNAogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CitDT05GSUdfQkxBQ0tGSU49eQogQ09ORklHX0JGSU49eQogQ09ORklHX1NFTUFQSE9SRV9TTEVFUEVSUz15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1VDTElOVVg9eQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTQKIENPTkZJR19JUlFDSElQX0RFTVVYX0dQSU89eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKQEAgLTU1LDYgKzU2LDcgQEAKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfQklHX09SREVSX0FMTE9DX05PRkFJTF9NQUdJQz0zCiAjIENPTkZJR19MSU1JVF9QQUdFQ0FDSEUgaXMgbm90IHNldAogQ09ORklHX0JVRERZPXkKICMgQ09ORklHX05QMiBpcyBub3Qgc2V0CkBAIC05NSw2ICs5Nyw5IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIAogIwogIyBCbGFja2ZpbiBQcm9jZXNzb3IgT3B0aW9ucwpAQCAtMTA3LDcgKzExMiw2IEBACiAjIENPTkZJR19CRjUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRjUzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRjUzNiBpcyBub3Qgc2V0CiBDT05GSUdfQkY1Mzc9eQogIyBDT05GSUdfQkY1NjEgaXMgbm90IHNldApAQCAtMTE1LDcgKzExOSw2IEBACiAjIENPTkZJR19CRl9SRVZfMF8zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGX1JFVl8wXzQgaXMgbm90IHNldAogIyBDT05GSUdfQkZfUkVWXzBfNSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxBQ0tGSU49eQogQ09ORklHX0JGSU5fU0lOR0xFX0NPUkU9eQogIyBDT05GSUdfQkZJTjUzM19FWktJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklONTMzX1NUQU1QIGlzIG5vdCBzZXQKQEAgLTE4Miw2ICsxODUsNyBAQAogIwogIyBCb2FyZCBjdXN0b21pemF0aW9ucwogIworIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBCb2FyZCBTZXR1cApAQCAtMjIxLDYgKzIyNSwxOSBAQAogIyBNZW1vcnkgT3B0aW1pemF0aW9ucwogIwogQ09ORklHX0lfRU5UUllfTDE9eQorQ09ORklHX0VYQ1BUX0lSUV9TWVNDX0wxPXkKK0NPTkZJR19ET19JUlFfTDE9eQorQ09ORklHX0NPUkVfVElNRVJfSVJRX0wxPXkKK0NPTkZJR19JRExFX0wxPXkKK0NPTkZJR19TQ0hFRFVMRV9MMT15CitDT05GSUdfQVJJVEhNRVRJQ19PUFNfTDE9eQorQ09ORklHX0FDQ0VTU19PS19MMT15CitDT05GSUdfTUVNU0VUX0wxPXkKK0NPTkZJR19NRU1DUFlfTDE9eQorQ09ORklHX1NZU19CRklOX1NQSU5MT0NLX0wxPXkKKyMgQ09ORklHX0lQX0NIRUNLU1VNX0wxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NBTExfVEFCX0wxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTEJfU1dJVENIX1RBQl9MMSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNS0VSTkVMPXkKICMgQ09ORklHX1JPTUtFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDMsNiArMjYwLDcgQEAKICMKIENPTkZJR19CTEtGSU5fQ0FDSEU9eQogQ09ORklHX0JMS0ZJTl9EQ0FDSEU9eQorIyBDT05GSUdfQkxLRklOX0RDQUNIRV9CQU5LQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtGSU5fQ0FDSEVfTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtGSU5fV0IgaXMgbm90IHNldAogQ09ORklHX0JMS0ZJTl9XVD15CkBAIC04MTUsOSArODMzLDggQEAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi0jIENPTkZJR19JMkNfQkZJTl9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfQkZJTl9UV0k9bQotQ09ORklHX1RXSUNMS19LSFo9NTAKKyMgQ09ORklHX0kyQ19CTEFDS0ZJTl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0kgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CkBAIC04MzIsNiArODQ5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTQzIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKQEAgLTg1MCwxMSArODY4LDExIEBACiAjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX0JGSU49eQogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiAjCitDT05GSUdfU1BJX0JGSU49eQogCiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKQEAgLTk0MCwxMCArOTU4LDYgQEAKICMgQ09ORklHX1BBTF9ZQ0JDUiBpcyBub3Qgc2V0CiBDT05GSUdfQURWNzM5M18xWE1FTT15CiAjIENPTkZJR19BRFY3MzkzXzJYTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9CRjUzN19MUTAzNT1tCi1DT05GSUdfTFEwMzVfU0xBVkVfQUREUj0weDU4Ci0jIENPTkZJR19GQl9CRklOX0xBTkRTQ0FQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CRklOX0JHUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIApAQCAtMTI4MCwxMiArMTI5NCwxMSBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NFUklBTF9FQVJMWV9JTklUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19IVU5UX0ZPUl9aRVJPPXkKICMgQ09ORklHX0RFQlVHX0JGSU5fTk9fS0VSTl9IV1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RQQVJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19LRVJORUxfTVNHIGlzIG5vdCBzZXQKIENPTkZJR19DUExCX0lORk89eQotIyBDT05GSUdfTk9fQUNDRVNTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19BQ0NFU1NfQ0hFQ0s9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDQxZDlhOWYuLmU0NTVmNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNDYsNyArNDYsNyBAQAogCURFRklORShUQVNLX1BUUkFDRSwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBwdHJhY2UpKTsKIAlERUZJTkUoVEFTS19CTE9DS0VELCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGJsb2NrZWQpKTsKIAlERUZJTkUoVEFTS19USFJFQUQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkKSk7Ci0JREVGSU5FKFRBU0tfVEhSRUFEX0lORk8sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8pKTsKKwlERUZJTkUoVEFTS19USFJFQURfSU5GTywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpOwogCURFRklORShUQVNLX01NLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIG1tKSk7CiAJREVGSU5FKFRBU0tfQUNUSVZFX01NLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGFjdGl2ZV9tbSkpOwogCURFRklORShUQVNLX1NJR1BFTkRJTkcsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgcGVuZGluZykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYwppbmRleCA4ZWEwNzllLi4wY2NiMGRjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYwpAQCAtMTE5LDcgKzExOSw3IEBACiAJU1NZTkMoKTsKIH0KIAotaW50IF9faW5pdCBibGFja2Zpbl9kbWFfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYmxhY2tmaW5fZG1hX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIApAQCAtMTMwLDcgKzEzMCw5IEBACiAJCWRtYV9jaFtpXS5yZWdzID0gYmFzZV9hZGRyW2ldOwogCQltdXRleF9pbml0KCYoZG1hX2NoW2ldLmRtYWxvY2spKTsKIAl9Ci0KKwkvKiBNYXJrIE1FTURNQSBDaGFubmVsIDAgYXMgcmVxdWVzdGVkIHNpbmNlIHdlJ3JlIHVzaW5nIGl0IGludGVybmFsbHkgKi8KKwlkbWFfY2hbQ0hfTUVNX1NUUkVBTTBfREVTVF0uY2hhbl9zdGF0dXMgPSBETUFfQ0hBTk5FTF9SRVFVRVNURUQ7CisJZG1hX2NoW0NIX01FTV9TVFJFQU0wX1NSQ10uY2hhbl9zdGF0dXMgPSBETUFfQ0hBTk5FTF9SRVFVRVNURUQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU5MywxNCArNTk1LDE3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGdldF9kbWFfY3Vycl95Y291bnQpOwogCi12b2lkICpkbWFfbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpCit2b2lkICpfZG1hX21lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKQogewogCWludCBkaXJlY3Rpb247CS8qIDEgLSBhZGRyZXNzIGRlY3JlYXNlLCAwIC0gYWRkcmVzcyBpbmNyZWFzZSAqLwogCWludCBmbGFnX2FsaWduOwkvKiAxIC0gYWRkcmVzcyBhbGlnbmVkLCAgMCAtIGFkZHJlc3MgdW5hbGlnbmVkICovCiAJaW50IGZsYWdfMkQ7CS8qIDEgLSAyRCBETUEgbmVlZGVkLAkgMCAtIDFEIERNQSBuZWVkZWQgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHNpemUgPD0gMCkKIAkJcmV0dXJuIE5VTEw7CisJCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJaWYgKCh1bnNpZ25lZCBsb25nKXNyYyA8IG1lbW9yeV9lbmQpCiAJCWJsYWNrZmluX2RjYWNoZV9mbHVzaF9yYW5nZSgodW5zaWduZWQgaW50KXNyYywKQEAgLTcyNSwxOCArNzMwLDIyNCBAQAogCWlmICgodW5zaWduZWQgbG9uZylkZXN0IDwgbWVtb3J5X2VuZCkKIAkJYmxhY2tmaW5fZGNhY2hlX2ludmFsaWRhdGVfcmFuZ2UoKHVuc2lnbmVkIGludClkZXN0LAogCQkJCQkJICh1bnNpZ25lZCBpbnQpKGRlc3QgKyBzaXplKSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIGRlc3Q7CiB9CisKK3ZvaWQgKmRtYV9tZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgYnVsazsKKwlzaXplX3QgcmVzdDsKKwl2b2lkICogYWRkcjsKKworCWJ1bGsgPSAoc2l6ZSA+PiAxNikgPDwgMTY7CisJcmVzdCA9IHNpemUgLSBidWxrOworCWlmIChidWxrKQorCQlfZG1hX21lbWNweShkZXN0LCBzcmMsIGJ1bGspOworCWFkZHIgPSBfZG1hX21lbWNweShkZXN0K2J1bGssIHNyYytidWxrLCByZXN0KTsKKwlyZXR1cm4gYWRkcjsKK30KKwogRVhQT1JUX1NZTUJPTChkbWFfbWVtY3B5KTsKIAogdm9pZCAqc2FmZV9kbWFfbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpCiB7Ci0JaW50IGZsYWdzID0gMDsKIAl2b2lkICphZGRyOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlhZGRyID0gZG1hX21lbWNweShkZXN0LCBzcmMsIHNpemUpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gYWRkcjsKIH0KIEVYUE9SVF9TWU1CT0woc2FmZV9kbWFfbWVtY3B5KTsKKwordm9pZCBkbWFfb3V0c2Iodm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIHNob3J0IGxlbikKK3sKKworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQorCWJsYWNrZmluX2RjYWNoZV9mbHVzaF9yYW5nZSgodW5zaWduZWQgaW50KWJ1ZiwodW5zaWduZWQgaW50KShidWYpICsgbGVuKTsKKworICAgCWJmaW5fd3JpdGVfTURNQV9EMF9TVEFSVF9BRERSKGFkZHIpOworCWJmaW5fd3JpdGVfTURNQV9EMF9YX0NPVU5UKGxlbik7CisJYmZpbl93cml0ZV9NRE1BX0QwX1hfTU9ESUZZKDApOworCWJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKERNQV9ET05FIHwgRE1BX0VSUik7CisKKwliZmluX3dyaXRlX01ETUFfUzBfU1RBUlRfQUREUihidWYpOworCWJmaW5fd3JpdGVfTURNQV9TMF9YX0NPVU5UKGxlbik7CisJYmZpbl93cml0ZV9NRE1BX1MwX1hfTU9ESUZZKDEpOworCWJmaW5fd3JpdGVfTURNQV9TMF9JUlFfU1RBVFVTKERNQV9ET05FIHwgRE1BX0VSUik7CisKKwliZmluX3dyaXRlX01ETUFfUzBfQ09ORklHKERNQUVOIHwgV0RTSVpFXzgpOworCWJmaW5fd3JpdGVfTURNQV9EMF9DT05GSUcoV05SIHwgRElfRU4gfCBETUFFTiB8IFdEU0laRV84KTsKKworCXdoaWxlICghKGJmaW5fcmVhZF9NRE1BX0QwX0lSUV9TVEFUVVMoKSAmIERNQV9ET05FKSk7CisKKwliZmluX3dyaXRlX01ETUFfRDBfSVJRX1NUQVRVUyhETUFfRE9ORSB8IERNQV9FUlIpOworCisJYmZpbl93cml0ZV9NRE1BX1MwX0NPTkZJRygwKTsKKwliZmluX3dyaXRlX01ETUFfRDBfQ09ORklHKDApOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworfQorRVhQT1JUX1NZTUJPTChkbWFfb3V0c2IpOworCisKK3ZvaWQgZG1hX2luc2IoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWYsIHVuc2lnbmVkIHNob3J0IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisgICAJYmZpbl93cml0ZV9NRE1BX0QwX1NUQVJUX0FERFIoYnVmKTsKKwliZmluX3dyaXRlX01ETUFfRDBfWF9DT1VOVChsZW4pOworCWJmaW5fd3JpdGVfTURNQV9EMF9YX01PRElGWSgxKTsKKwliZmluX3dyaXRlX01ETUFfRDBfSVJRX1NUQVRVUyhETUFfRE9ORSB8IERNQV9FUlIpOworCisJYmZpbl93cml0ZV9NRE1BX1MwX1NUQVJUX0FERFIoYWRkcik7CisJYmZpbl93cml0ZV9NRE1BX1MwX1hfQ09VTlQobGVuKTsKKwliZmluX3dyaXRlX01ETUFfUzBfWF9NT0RJRlkoMCk7CisJYmZpbl93cml0ZV9NRE1BX1MwX0lSUV9TVEFUVVMoRE1BX0RPTkUgfCBETUFfRVJSKTsKKworCWJmaW5fd3JpdGVfTURNQV9TMF9DT05GSUcoRE1BRU4gfCBXRFNJWkVfOCk7CisJYmZpbl93cml0ZV9NRE1BX0QwX0NPTkZJRyhXTlIgfCBESV9FTiB8IERNQUVOIHwgV0RTSVpFXzgpOworCisJYmxhY2tmaW5fZGNhY2hlX2ludmFsaWRhdGVfcmFuZ2UoKHVuc2lnbmVkIGludClidWYsICh1bnNpZ25lZCBpbnQpKGJ1ZikgKyBsZW4pOworCisJd2hpbGUgKCEoYmZpbl9yZWFkX01ETUFfRDBfSVJRX1NUQVRVUygpICYgRE1BX0RPTkUpKTsKKworCWJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKERNQV9ET05FIHwgRE1BX0VSUik7CisKKwliZmluX3dyaXRlX01ETUFfUzBfQ09ORklHKDApOworCWJmaW5fd3JpdGVfTURNQV9EMF9DT05GSUcoMCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCit9CitFWFBPUlRfU1lNQk9MKGRtYV9pbnNiKTsKKwordm9pZCBkbWFfb3V0c3codm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICAqYnVmLCB1bnNpZ25lZCBzaG9ydCBsZW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQorCWJsYWNrZmluX2RjYWNoZV9mbHVzaF9yYW5nZSgodW5zaWduZWQgaW50KWJ1ZiwodW5zaWduZWQgaW50KShidWYpICsgbGVuKTsKKworICAgCWJmaW5fd3JpdGVfTURNQV9EMF9TVEFSVF9BRERSKGFkZHIpOworCWJmaW5fd3JpdGVfTURNQV9EMF9YX0NPVU5UKGxlbik7CisJYmZpbl93cml0ZV9NRE1BX0QwX1hfTU9ESUZZKDApOworCWJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKERNQV9ET05FIHwgRE1BX0VSUik7CisKKwliZmluX3dyaXRlX01ETUFfUzBfU1RBUlRfQUREUihidWYpOworCWJmaW5fd3JpdGVfTURNQV9TMF9YX0NPVU5UKGxlbik7CisJYmZpbl93cml0ZV9NRE1BX1MwX1hfTU9ESUZZKDIpOworCWJmaW5fd3JpdGVfTURNQV9TMF9JUlFfU1RBVFVTKERNQV9ET05FIHwgRE1BX0VSUik7CisKKwliZmluX3dyaXRlX01ETUFfUzBfQ09ORklHKERNQUVOIHwgV0RTSVpFXzE2KTsKKwliZmluX3dyaXRlX01ETUFfRDBfQ09ORklHKFdOUiB8IERJX0VOIHwgRE1BRU4gfCBXRFNJWkVfMTYpOworCisJd2hpbGUgKCEoYmZpbl9yZWFkX01ETUFfRDBfSVJRX1NUQVRVUygpICYgRE1BX0RPTkUpKTsKKworCWJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKERNQV9ET05FIHwgRE1BX0VSUik7CisKKwliZmluX3dyaXRlX01ETUFfUzBfQ09ORklHKDApOworCWJmaW5fd3JpdGVfTURNQV9EMF9DT05GSUcoMCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCit9CitFWFBPUlRfU1lNQk9MKGRtYV9vdXRzdyk7CisKK3ZvaWQgZG1hX2luc3coY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWYsIHVuc2lnbmVkIHNob3J0IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCisgICAJYmZpbl93cml0ZV9NRE1BX0QwX1NUQVJUX0FERFIoYnVmKTsKKwliZmluX3dyaXRlX01ETUFfRDBfWF9DT1VOVChsZW4pOworCWJmaW5fd3JpdGVfTURNQV9EMF9YX01PRElGWSgyKTsKKwliZmluX3dyaXRlX01ETUFfRDBfSVJRX1NUQVRVUyhETUFfRE9ORSB8IERNQV9FUlIpOworCisJYmZpbl93cml0ZV9NRE1BX1MwX1NUQVJUX0FERFIoYWRkcik7CisJYmZpbl93cml0ZV9NRE1BX1MwX1hfQ09VTlQobGVuKTsKKwliZmluX3dyaXRlX01ETUFfUzBfWF9NT0RJRlkoMCk7CisJYmZpbl93cml0ZV9NRE1BX1MwX0lSUV9TVEFUVVMoRE1BX0RPTkUgfCBETUFfRVJSKTsKKworCWJmaW5fd3JpdGVfTURNQV9TMF9DT05GSUcoRE1BRU4gfCBXRFNJWkVfMTYpOworCWJmaW5fd3JpdGVfTURNQV9EMF9DT05GSUcoV05SIHwgRElfRU4gfCBETUFFTiB8IFdEU0laRV8xNik7CisKKwlibGFja2Zpbl9kY2FjaGVfaW52YWxpZGF0ZV9yYW5nZSgodW5zaWduZWQgaW50KWJ1ZiwgKHVuc2lnbmVkIGludCkoYnVmKSArIGxlbik7CisKKwl3aGlsZSAoIShiZmluX3JlYWRfTURNQV9EMF9JUlFfU1RBVFVTKCkgJiBETUFfRE9ORSkpOworCisJYmZpbl93cml0ZV9NRE1BX0QwX0lSUV9TVEFUVVMoRE1BX0RPTkUgfCBETUFfRVJSKTsKKworCWJmaW5fd3JpdGVfTURNQV9TMF9DT05GSUcoMCk7CisJYmZpbl93cml0ZV9NRE1BX0QwX0NPTkZJRygwKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKK30KK0VYUE9SVF9TWU1CT0woZG1hX2luc3cpOworCit2b2lkIGRtYV9vdXRzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgc2hvcnQgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQorCWJsYWNrZmluX2RjYWNoZV9mbHVzaF9yYW5nZSgodW5zaWduZWQgaW50KWJ1ZiwodW5zaWduZWQgaW50KShidWYpICsgbGVuKTsKKworICAgCWJmaW5fd3JpdGVfTURNQV9EMF9TVEFSVF9BRERSKGFkZHIpOworCWJmaW5fd3JpdGVfTURNQV9EMF9YX0NPVU5UKGxlbik7CisJYmZpbl93cml0ZV9NRE1BX0QwX1hfTU9ESUZZKDApOworCWJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKERNQV9ET05FIHwgRE1BX0VSUik7CisKKwliZmluX3dyaXRlX01ETUFfUzBfU1RBUlRfQUREUihidWYpOworCWJmaW5fd3JpdGVfTURNQV9TMF9YX0NPVU5UKGxlbik7CisJYmZpbl93cml0ZV9NRE1BX1MwX1hfTU9ESUZZKDQpOworCWJmaW5fd3JpdGVfTURNQV9TMF9JUlFfU1RBVFVTKERNQV9ET05FIHwgRE1BX0VSUik7CisKKwliZmluX3dyaXRlX01ETUFfUzBfQ09ORklHKERNQUVOIHwgV0RTSVpFXzMyKTsKKwliZmluX3dyaXRlX01ETUFfRDBfQ09ORklHKFdOUiB8IERJX0VOIHwgRE1BRU4gfCBXRFNJWkVfMzIpOworCisJd2hpbGUgKCEoYmZpbl9yZWFkX01ETUFfRDBfSVJRX1NUQVRVUygpICYgRE1BX0RPTkUpKTsKKworCWJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKERNQV9ET05FIHwgRE1BX0VSUik7CisKKwliZmluX3dyaXRlX01ETUFfUzBfQ09ORklHKDApOworCWJmaW5fd3JpdGVfTURNQV9EMF9DT05GSUcoMCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCit9CitFWFBPUlRfU1lNQk9MKGRtYV9vdXRzbCk7CisKK3ZvaWQgZG1hX2luc2woY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWYsIHVuc2lnbmVkIHNob3J0IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkKKyAgIAliZmluX3dyaXRlX01ETUFfRDBfU1RBUlRfQUREUihidWYpOworCWJmaW5fd3JpdGVfTURNQV9EMF9YX0NPVU5UKGxlbik7CisJYmZpbl93cml0ZV9NRE1BX0QwX1hfTU9ESUZZKDQpOworCWJmaW5fd3JpdGVfTURNQV9EMF9JUlFfU1RBVFVTKERNQV9ET05FIHwgRE1BX0VSUik7CisKKwliZmluX3dyaXRlX01ETUFfUzBfU1RBUlRfQUREUihhZGRyKTsKKwliZmluX3dyaXRlX01ETUFfUzBfWF9DT1VOVChsZW4pOworCWJmaW5fd3JpdGVfTURNQV9TMF9YX01PRElGWSgwKTsKKwliZmluX3dyaXRlX01ETUFfUzBfSVJRX1NUQVRVUyhETUFfRE9ORSB8IERNQV9FUlIpOworCisJYmZpbl93cml0ZV9NRE1BX1MwX0NPTkZJRyhETUFFTiB8IFdEU0laRV8zMik7CisJYmZpbl93cml0ZV9NRE1BX0QwX0NPTkZJRyhXTlIgfCBESV9FTiB8IERNQUVOIHwgV0RTSVpFXzMyKTsKKworCWJsYWNrZmluX2RjYWNoZV9pbnZhbGlkYXRlX3JhbmdlKCh1bnNpZ25lZCBpbnQpYnVmLCAodW5zaWduZWQgaW50KShidWYpICsgbGVuKTsKKworCXdoaWxlICghKGJmaW5fcmVhZF9NRE1BX0QwX0lSUV9TVEFUVVMoKSAmIERNQV9ET05FKSk7CisKKwliZmluX3dyaXRlX01ETUFfRDBfSVJRX1NUQVRVUyhETUFfRE9ORSB8IERNQV9FUlIpOworCisJYmZpbl93cml0ZV9NRE1BX1MwX0NPTkZJRygwKTsKKwliZmluX3dyaXRlX01ETUFfRDBfQ09ORklHKDApOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworfQorRVhQT1JUX1NZTUJPTChkbWFfaW5zbCk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCmluZGV4IGU5ZjI0YTkuLjNmNDlmYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIH0KIAogI2lmZGVmIEJGNTM3X0ZBTUlMWQotdm9pZCBwb3J0X3NldHVwKHVuc2lnbmVkIHNob3J0IGdwaW8sIHVuc2lnbmVkIHNob3J0IHVzYWdlKQorc3RhdGljIHZvaWQgcG9ydF9zZXR1cCh1bnNpZ25lZCBzaG9ydCBncGlvLCB1bnNpZ25lZCBzaG9ydCB1c2FnZSkKIHsKIAlpZiAodXNhZ2UgPT0gR1BJT19VU0FHRSkgewogCQlpZiAoKnBvcnRfZmVyW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkKQEAgLTE2MCw3ICsxNjAsNyBAQAogI2VuZGlmCiAKIAotdm9pZCBkZWZhdWx0X2dwaW8odW5zaWduZWQgc2hvcnQgZ3BpbykKK3N0YXRpYyB2b2lkIGRlZmF1bHRfZ3Bpbyh1bnNpZ25lZCBzaG9ydCBncGlvKQogewogCXVuc2lnbmVkIHNob3J0IGJhbmssYml0bWFzazsKIApAQCAtMTc3LDggKzE3Nyw3IEBACiAJZ3Bpb19iYW5rYltiYW5rXS0+ZWRnZSAmPSB+Yml0bWFzazsKIH0KIAotCi1pbnQgX19pbml0IGJmaW5fZ3Bpb19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBiZmluX2dwaW9faW5pdCh2b2lkKQogewogCWludCBpOwogCkBAIC0xODksOSArMTg4LDkgQEAKIAogI2lmIGRlZmluZWQoQkY1MzdfRkFNSUxZKSAmJiAoZGVmaW5lZChDT05GSUdfQkZJTl9NQUMpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTUFDX01PRFVMRSkpCiAjIGlmIGRlZmluZWQoQ09ORklHX0JGSU5fTUFDX1JNSUkpCi0JcmVzZXJ2ZWRfbWFwW1BPUlRfSF0gPSAweEMzNzM7CisJcmVzZXJ2ZWRfbWFwW2dwaW9fYmFuayhQT1JUX0gpXSA9IDB4QzM3MzsKICMgZWxzZQotCXJlc2VydmVkX21hcFtQT1JUX0hdID0gMHhGRkZGOworCXJlc2VydmVkX21hcFtncGlvX2JhbmsoUE9SVF9IKV0gPSAweEZGRkY7CiAjIGVuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwppbmRleCBkN2M4ZTUxLi5lNzE4YmI0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwpAQCAtNzMsNyArNzMsNyBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRfcmVncyAqZ2V0X3VzZXJfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJcmV0dXJuIChzdHJ1Y3QgcHRfcmVncyAqKQotCSAgICAoKHVuc2lnbmVkIGxvbmcpdGFzay0+dGhyZWFkX2luZm8gKworCSAgICAoKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHRhc2spICsKIAkgICAgIChUSFJFQURfU0laRSAtIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpKTsKIH0KIApAQCAtOTksNyArOTksNyBAQAogCXVuc2lnbmVkIGNoYXIgKnJlZ19wdHI7CiAKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9Ci0JICAgIChzdHJ1Y3QgcHRfcmVncyAqKSgodW5zaWduZWQgbG9uZyl0YXNrLT50aHJlYWRfaW5mbyArCisJICAgIChzdHJ1Y3QgcHRfcmVncyAqKSgodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UodGFzaykgKwogCQkJICAgICAgIChUSFJFQURfU0laRSAtIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpKTsKIAlyZWdfcHRyID0gKGNoYXIgKilyZWdzOwogCkBAIC0xMjUsNyArMTI1LDcgQEAKIAljaGFyICogcmVnX3B0cjsKIAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0KLQkgICAgKHN0cnVjdCBwdF9yZWdzICopKCh1bnNpZ25lZCBsb25nKXRhc2stPnRocmVhZF9pbmZvICsKKwkgICAgKHN0cnVjdCBwdF9yZWdzICopKCh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZSh0YXNrKSArCiAJCQkgICAgICAgKFRIUkVBRF9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSkpOwogCXJlZ19wdHIgPSAoY2hhciAqKXJlZ3M7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCmluZGV4IDM0MmJiOGQuLjAyZGM3NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogCiAjaW5jbHVkZSA8bGludXgvZXh0Ml9mcy5oPgpAQCAtNDQsNiArNDMsOCBAQAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgogI2luY2x1ZGUgPGFzbS9jcGxiaW5pdC5oPgogCit1MTYgX2JmaW5fc3dyc3Q7CisKIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kLCBwaHlzaWNhbF9tZW1fZW5kOwogdW5zaWduZWQgbG9uZyByZXNlcnZlZF9tZW1fZGNhY2hlX29uOwogdW5zaWduZWQgbG9uZyByZXNlcnZlZF9tZW1faWNhY2hlX29uOwpAQCAtMTc1LDYgKzE3Niw5IEBACiAJdW5zaWduZWQgbG9uZyBtdGRfcGh5cyA9IDA7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCisJY29uc3dpdGNocCA9ICZkdW1teV9jb247CisjZW5kaWYKIAljY2xrID0gZ2V0X2NjbGsoKTsKIAlzY2xrID0gZ2V0X3NjbGsoKTsKIApAQCAtMzc5LDM3ICszODMsMjcgQEAKIAlpZiAobDFfbGVuZ3RoID4gTDFfREFUQV9BX0xFTkdUSCkKIAkJcGFuaWMoIkwxIG1lbW9yeSBvdmVyZmxvd1xuIik7CiAKLQliZjUzeF9jYWNoZV9pbml0KCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpIHx8IGRlZmluZWQoQ09ORklHX1NNQzkxWF9NT0RVTEUpCi0jIGlmIGRlZmluZWQoQ09ORklHX0JGSU5fU0hBUkVEX0ZMQVNIX0VORVQpICYmIGRlZmluZWQoQ09ORklHX0JGSU41MzNfU1RBTVApCi0JLyogc2V0dXAgQkY1MzNfU1RBTVAgQ1BMRCB0byByb3V0ZSBBTVMzIHRvIEV0aGVybmV0IE1BQyAqLwotCWJmaW5fd3JpdGVfRklPX0RJUihiZmluX3JlYWRfRklPX0RJUigpIHwgKDEgPDwgQ09ORklHX0VORVRfRkxBU0hfUElOKSk7Ci0JYmZpbl93cml0ZV9GSU9fRkxBR19TKDEgPDwgQ09ORklHX0VORVRfRkxBU0hfUElOKTsKLQlTU1lOQygpOwotIyBlbmRpZgotIyBpZiBkZWZpbmVkIChDT05GSUdfQkZJTjU2MV9FWktJVCkKLQliZmluX3dyaXRlX0ZJTzBfRElSKGJmaW5fcmVhZF9GSU8wX0RJUigpIHwgKDEgPDwgMTIpKTsKLQlTU1lOQygpOwotIyBlbmRpZiAvKiBkZWZpbmVkIChDT05GSUdfQkZJTjU2MV9FWktJVCkgKi8KKyNpZmRlZiBCRjU2MV9GQU1JTFkKKwlfYmZpbl9zd3JzdCA9IGJmaW5fcmVhZF9TSUNBX1NXUlNUKCk7CisjZWxzZQorCV9iZmluX3N3cnN0ID0gYmZpbl9yZWFkX1NXUlNUKCk7CiAjZW5kaWYKIAorCWJmNTN4X2NhY2hlX2luaXQoKTsKKwogCXByaW50ayhLRVJOX0lORk8gIkhhcmR3YXJlIFRyYWNlIEVuYWJsZWRcbiIpOwogCWJmaW5fd3JpdGVfVEJVRkNUTCgweDAzKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0JGNTYxKQotc3RhdGljIHN0cnVjdCBjcHUgY3B1WzJdOwotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgY3B1IGNwdVsxXTsKLSNlbmRpZgogc3RhdGljIGludCBfX2luaXQgdG9wb2xvZ3lfaW5pdCh2b2lkKQogewogI2lmIGRlZmluZWQgKENPTkZJR19CRjU2MSkKKwlzdGF0aWMgc3RydWN0IGNwdSBjcHVbMl07CiAJcmVnaXN0ZXJfY3B1KCZjcHVbMF0sIDApOwogCXJlZ2lzdGVyX2NwdSgmY3B1WzFdLCAxKTsKIAlyZXR1cm4gMDsKICNlbHNlCisJc3RhdGljIHN0cnVjdCBjcHUgY3B1WzFdOwogCXJldHVybiByZWdpc3Rlcl9jcHUoY3B1LCAwKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKaW5kZXggOTU1NmI3My4uOTkzMmVkZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCkBAIC01OSw5ICs1OSwxMCBAQAogCXN0cnVjdCB2bV9saXN0X3N0cnVjdCAqdm1sOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAogI2lmZGVmIENPTkZJR19LQUxMU1lNUwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMCwgc3ltc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHN5bXNpemU7CiAJY29uc3QgY2hhciAqc3ltbmFtZTsKIAljaGFyICptb2RuYW1lOwogCWNoYXIgKmRlbGltID0gIjoiOwpAQCAtMTA2LDEyICsxMDcsMTkgQEAKIAkJCQkJICAgICAgICAgICAgICBzaXplb2YoX3RtcGJ1ZikpOwogCQkJCX0KIAorCQkJCS8qIEZMQVQgZG9lcyBub3QgaGF2ZSBpdHMgdGV4dCBhbGlnbmVkIHRvIHRoZSBzdGFydCBvZgorCQkJCSAqIHRoZSBtYXAgd2hpbGUgRkRQSUMgRUxGIGRvZXMgLi4uCisJCQkJICovCisJCQkJaWYgKGN1cnJlbnQtPm1tICYmCisJCQkJICAgIChhZGRyZXNzID4gY3VycmVudC0+bW0tPnN0YXJ0X2NvZGUpICYmCisJCQkJICAgIChhZGRyZXNzIDwgY3VycmVudC0+bW0tPmVuZF9jb2RlKSkKKwkJCQkJb2Zmc2V0ID0gYWRkcmVzcyAtIGN1cnJlbnQtPm1tLT5zdGFydF9jb2RlOworCQkJCWVsc2UKKwkJCQkJb2Zmc2V0ID0gKGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0KSArICh2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpOworCiAJCQkJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAJCQkJcmV0dXJuIHByaW50aygiPDB4JXA+IFsgJXMgKyAweCVseCBdIiwKLQkJCQkgICAgICAgICAgICAgICh2b2lkKilhZGRyZXNzLCBuYW1lLAotCQkJCSAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpCi0JCQkJICAgICAgICAgICAgICAgICgoYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQpICsKLQkJCQkgICAgICAgICAgICAgICAgICh2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpKSk7CisJCQkJICAgICAgICAgICAgICAodm9pZCopYWRkcmVzcywgbmFtZSwgb2Zmc2V0KTsKIAkJCX0KIAogCQkJdm1sID0gdm1sLT5uZXh0OwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNmFlOWViYi4uODZmZTY3OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC01NCw3ICs1NCw3IEBACiAJewogCQkgX3RleHQgPSAuOwogCQkgX19zdGV4dCA9IC47Ci0JCSooLnRleHQpCisJCVRFWFRfVEVYVAogCQlTQ0hFRF9URVhUCiAJCSooLnRleHQubG9jaykKIAkJLiA9IEFMSUdOKDE2KTsKQEAgLTIwMCw3ICsyMDAsNyBAQAogCQkgX19zZGF0YSA9IC47CiAJCS4gPSBBTElHTigweDIwMDApOwogCQkqKC5kYXRhLmluaXRfdGFzaykKLQkJKiguZGF0YSkKKwkJREFUQV9EQVRBCiAKIAkJLiA9IEFMSUdOKDMyKTsKIAkJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL2lucy5TIGIvYXJjaC9ibGFja2Zpbi9saWIvaW5zLlMKaW5kZXggNzMwZDJiNC4uN2Q1ZTk4NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvaW5zLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvaW5zLlMKQEAgLTI5LDYgKzI5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgogCiAuYWxpZ24gMgogCkBAIC0zOSwxMSArNDAsMTQgQEAKIAlQMiA9IFIyOwkvKiBQMiA9IGNvdW50ICovCiAJU1NZTkM7CiAJTFNFVFVQKCAuTGxvbmdfbG9vcF9zLCAuTGxvbmdfbG9vcF9lKSBMQzAgPSBQMjsKLS5MbG9uZ19sb29wX3M6IFIwID0gW1AwXTsKLS5MbG9uZ19sb29wX2U6IFtQMSsrXSA9IFIwOworLkxsb25nX2xvb3BfczogIFIwID0gW1AwXTsKKwkJW1AxKytdID0gUjA7CisJCU5PUDsKKy5MbG9uZ19sb29wX2U6IAlOT1A7CiAJc3RpIFIzOwogCVJUUzsKIAorCiBFTlRSWShfaW5zdykKIAlQMCA9IFIwOwkvKiBQMCA9IHBvcnQgKi8KIAljbGkgUjM7CkBAIC01MSw4ICs1NSwxMCBAQAogCVAyID0gUjI7CS8qIFAyID0gY291bnQgKi8KIAlTU1lOQzsKIAlMU0VUVVAoIC5Md29yZF9sb29wX3MsIC5Md29yZF9sb29wX2UpIExDMCA9IFAyOwotLkx3b3JkX2xvb3BfczogUjAgPSBXW1AwXTsKLS5Md29yZF9sb29wX2U6IFdbUDErK10gPSBSMDsKKy5Md29yZF9sb29wX3M6ICBSMCA9IFdbUDBdOworCQlXW1AxKytdID0gUjA7CisJCU5PUDsKKy5Md29yZF9sb29wX2U6IAlOT1A7CiAJc3RpIFIzOwogCVJUUzsKIApAQCAtNjMsNyArNjksOSBAQAogCVAyID0gUjI7CS8qIFAyID0gY291bnQgKi8KIAlTU1lOQzsKIAlMU0VUVVAoIC5MYnl0ZV9sb29wX3MsIC5MYnl0ZV9sb29wX2UpIExDMCA9IFAyOwotLkxieXRlX2xvb3BfczogUjAgPSBCW1AwXTsKLS5MYnl0ZV9sb29wX2U6IEJbUDErK10gPSBSMDsKKy5MYnl0ZV9sb29wX3M6ICBSMCA9IEJbUDBdOworCQlCW1AxKytdID0gUjA7CisJCU5PUDsKKy5MYnl0ZV9sb29wX2U6ICBOT1A7CiAJc3RpIFIzOwogCVJUUzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYwppbmRleCBkN2IzYTVkLi45YTQ3MmZlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jCkBAIC0xNjQsNiArMTY0LDEzIEBACiB9OwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfbW1jX2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDEsCisJLmJpdHNfcGVyX3dvcmQgPSA4LAorfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGJmaW5fc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0gewogI2lmIGRlZmluZWQoQ09ORklHX01URF9NMjVQODApIHx8IGRlZmluZWQoQ09ORklHX01URF9NMjVQODBfTU9EVUxFKQogCXsKQEAgLTE5OSw2ICsyMDYsMjcgQEAKIAl9LAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKKwl7CisJCS5tb2RhbGlhcyA9ICJzcGlfbW1jX2R1bW15IiwKKwkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCQkuYnVzX251bSA9IDEsCisJCS5jaGlwX3NlbGVjdCA9IDAsCisJCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfbW1jX2NoaXBfaW5mbywKKwkJLm1vZGUgPSBTUElfTU9ERV8zLAorCX0sCisJeworCQkubW9kYWxpYXMgPSAic3BpX21tYyIsCisJCS5tYXhfc3BlZWRfaHogPSAyNTAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KKwkJLmJ1c19udW0gPSAxLAorCQkuY2hpcF9zZWxlY3QgPSBDT05GSUdfU1BJX01NQ19DU19DSEFOLAorCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX21tY19jaGlwX2luZm8sCisJCS5tb2RlID0gU1BJX01PREVfMywKKwl9LAorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19QQlgpCiAJewogCQkubW9kYWxpYXMJPSAiZnhzLXNwaSIsCkBAIC0zMTAsMTIgKzMzOCwyNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzdGFtcF9pbml0KHZvaWQpCiB7CisJaW50IHJldDsKKwogCXByaW50ayhLRVJOX0lORk8gIiVzKCk6IHJlZ2lzdGVyaW5nIGRldmljZSByZXNvdXJjZXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JcGxhdGZvcm1fYWRkX2RldmljZXMoc3RhbXBfZGV2aWNlcywgQVJSQVlfU0laRShzdGFtcF9kZXZpY2VzKSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfU1BJX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NQSV9CRklOX01PRFVMRSkKLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhiZmluX3NwaV9ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKGJmaW5fc3BpX2JvYXJkX2luZm8pKTsKKwlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzdGFtcF9kZXZpY2VzLCBBUlJBWV9TSVpFKHN0YW1wX2RldmljZXMpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkgfHwgZGVmaW5lZChDT05GSUdfU01DOTFYX01PRFVMRSkKKyMgaWYgZGVmaW5lZChDT05GSUdfQkZJTl9TSEFSRURfRkxBU0hfRU5FVCkKKwkvKiBzZXR1cCBCRjUzM19TVEFNUCBDUExEIHRvIHJvdXRlIEFNUzMgdG8gRXRoZXJuZXQgTUFDICovCisJYmZpbl93cml0ZV9GSU9fRElSKGJmaW5fcmVhZF9GSU9fRElSKCkgfCAoMSA8PCBDT05GSUdfRU5FVF9GTEFTSF9QSU4pKTsKKwliZmluX3dyaXRlX0ZJT19GTEFHX1MoMSA8PCBDT05GSUdfRU5FVF9GTEFTSF9QSU4pOworCVNTWU5DKCk7CisjIGVuZGlmCiAjZW5kaWYKLQlyZXR1cm4gMDsKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGJmaW5fc3BpX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoYmZpbl9zcGlfYm9hcmRfaW5mbykpOworI2VuZGlmCiB9CiAKIGFyY2hfaW5pdGNhbGwoc3RhbXBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2hlYWQuUwppbmRleCA0ODA4ZWRiLi40ZGI5ZTYyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaGVhZC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9oZWFkLlMKQEAgLTE3Myw3ICsxNzMsOCBAQAogCVNUSSBSMjsKICNlbmRpZgogCi0JLyogSW5pdGlhbGlzZSBVQVJUICovCisJLyogSW5pdGlhbGlzZSBVQVJUIC0gd2hlbiBib290aW5nIGZyb20gdS1ib290LCB0aGUgVUFSVCBpcyBub3QgZGlzYWJsZWQKKwkgKiBzbyBpZiB3ZSBkb250IGluaXRhbGl6ZSBoZXJlLCBvdXIgc2VyaWFsIGNvbnNvbGUgZ2V0cyBob3NlZCAqLwogCXAwLmggPSBoaShVQVJUX0xDUik7CiAJcDAubCA9IGxvKFVBUlRfTENSKTsKIAlyMCA9IDB4MChaKTsKQEAgLTQ2OCwxMiArNDY5LDYgQEAKIAl3W3AwXSA9IHIwLmw7CiAjZW5kaWYKIAotCS8qIENsZWFyIHRoZSBiaXRzIDEzLTE1IGluIFNXUlNUIGlmIHRoZXkgd2VyZW50IGNsZWFyZWQgKi8KLQlwMC5oID0gaGkoU1dSU1QpOwotCXAwLmwgPSBsbyhTV1JTVCk7Ci0JY3N5bmM7Ci0JcjAubCA9IHdbcDBdOwotCiAJLyogQ2xlYXIgdGhlIElNQVNLIHJlZ2lzdGVyICovCiAJcDAuaCA9IGhpKElNQVNLKTsKIAlwMC5sID0gbG8oSU1BU0spOwpAQCAtNDg3LDY2ICs0ODIsMzAgQEAKIAlbcDBdID0gcjA7CiAJU1NZTkM7CiAKLQkvKiBEaXNhYmxlIHRoZSBXRE9HIFRJTUVSICovCi0JcDAuaCA9IGhpKFdET0dfQ1RMKTsKLQlwMC5sID0gbG8oV0RPR19DVEwpOwotCXIwLmwgPSAweEFENjsKLQl3W3AwXSA9IHIwLmw7CisJLyogbWFrZSBzdXJlIFNZU0NSIGlzIHNldCB0byB1c2UgQk1PREUgKi8KKwlQMC5oID0gaGkoU1lTQ1IpOworCVAwLmwgPSBsbyhTWVNDUik7CisJUjAubCA9IDB4MDsKKwlXW1AwXSA9IFIwLmw7CiAJU1NZTkM7CiAKLQkvKiBDbGVhciB0aGUgc3RpY2t5IGJpdCBpbmNhc2UgaXQgaXMgYWxyZWFkeSBzZXQgKi8KLQlwMC5oID0gaGkoV0RPR19DVEwpOwotCXAwLmwgPSBsbyhXRE9HX0NUTCk7Ci0JcjAubCA9IDB4OEFENjsKLQl3W3AwXSA9IHIwLmw7CisJLyogaXNzdWUgYSBzeXN0ZW0gc29mdCByZXNldCAqLworCVAxLmggPSBoaShTV1JTVCk7CisJUDEubCA9IGxvKFNXUlNUKTsKKwlSMS5sID0gMHgwMDA3OworCVdbUDFdID0gUjE7CiAJU1NZTkM7CiAKLQkvKiBQcm9ncmFtIHRoZSBjb3VudCB2YWx1ZSAqLwotCVIwLmwgPSAweDEwMDsKLQlSMC5oID0gMHgwOwotCVAwLmggPSBoaShXRE9HX0NOVCk7Ci0JUDAubCA9IGxvKFdET0dfQ05UKTsKLQlbUDBdID0gUjA7CisJLyogY2xlYXIgc3lzdGVtIHNvZnQgcmVzZXQgKi8KKwlSMC5sID0gMHgwMDAwOworCVdbUDBdID0gUjA7CiAJU1NZTkM7CiAKLQkvKiBQcm9ncmFtIFdET0dfU1RBVCBpZiBuZWNlc3NhcnkgKi8KLQlQMC5oID0gaGkoV0RPR19DVEwpOwotCVAwLmwgPSBsbyhXRE9HX0NUTCk7Ci0JUjAgPSBXW1AwXShaKTsKLQlDQyA9IEJJVFRTVChSMCwxKTsKLQlpZiAhQ0MgSlVNUCAuTFdSSVRFU1RBVDsKLQlDQyA9IEJJVFRTVChSMCwyKTsKLQlpZiAhQ0MgSlVNUCAuTFdSSVRFU1RBVDsKLQlKVU1QIC5MU0tJUF9XUklURTsKLQotLkxXUklURVNUQVQ6Ci0JLyogV2hlbiB3YXRjaCBkb2cgdGltZXIgaXMgZW5hYmxlZCwgYSB3cml0ZSB0byBTVEFUIHdpbGwgbG9hZCB0aGUgY29udGVudHMgb2YgQ05UIHRvIFNUQVQgKi8KLQlSMCA9IDB4MDAwMCh6KTsKLQlQMC5oID0gaGkoV0RPR19TVEFUKTsKLQlQMC5sID0gbG8oV0RPR19TVEFUKQotCVtQMF0gPSBSMDsKLQlTU1lOQzsKLQotLkxTS0lQX1dSSVRFOgotCS8qIEVuYWJsZSB0aGUgcmVzZXQgZXZlbnQgKi8KLQlQMC5oID0gaGkoV0RPR19DVEwpOwotCVAwLmwgPSBsbyhXRE9HX0NUTCk7Ci0JUjAgPSBXW1AwXShaKTsKLQlCSVRDTFIoUjAsMSk7Ci0JQklUQ0xSKFIwLDIpOwotCVdbUDBdID0gUjAuTDsKLQlTU1lOQzsKLQlOT1A7Ci0KLQkvKiBFbmFibGUgdGhlIHdkb2cgY291bnRlciAqLwotCVIwID0gV1tQMF0oWik7Ci0JQklUQ0xSKFIwLDQpOwotCVdbUDBdID0gUjAuTDsKLQlTU1lOQzsKLQotCUlETEU7CisJLyogaXNzdWUgY29yZSByZXNldCAqLworCXJhaXNlIDE7CiAKIAlSVFM7CitFTkRQUk9DKF9iZmluX3Jlc2V0KQogCiAjaWYgQ09ORklHX0RFQlVHX0tFUk5FTF9TVEFSVAogZGVidWdfa2VybmVsX3N0YXJ0X3RyYXA6CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvY3B1LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvY3B1LmMKaW5kZXggMmQ4M2I3ZS4uMDQ0MmM0YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2NwdS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9jcHUuYwpAQCAtNDMsMTMgKzQzLDEzIEBACiAjZGVmaW5lIFZDTzEgKENPTkZJR19DTEtJTl9IWio5KQkvKjk5NTMyODAwICovCiAjZGVmaW5lIFZDTyh4KSBWQ08jI3gKIAotI2RlZmluZSBGUkVRKHgpIHtWQ08oeCksVkNPKHgpLzR9LHtWQ08oeCksVkNPKHgpLzJ9LHtWQ08oeCksVkNPKHgpfQorI2RlZmluZSBNRlJFUSh4KSB7VkNPKHgpLFZDTyh4KS80fSx7VkNPKHgpLFZDTyh4KS8yfSx7VkNPKHgpLFZDTyh4KX0KIC8qIGZyZXF1ZW5jeSAqLwogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBiZjUzN19mcmVxX3RhYmxlW10gPSB7Ci0JRlJFUSgxKSwKLQlGUkVRKDMpLAorCU1GUkVRKDEpLAorCU1GUkVRKDMpLAogCXtWQ080LCBWQ080IC8gMn0sIHtWQ080LCBWQ080fSwKLQlGUkVRKDUpLAorCU1GUkVRKDUpLAogCXswLCBDUFVGUkVRX1RBQkxFX0VORH0sCiB9OwogCkBAIC01OSwxMyArNTksMTQgQEAKICAqLwogc3RhdGljIGludCBiZjUzN19nZXRmcmVxKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBjY2xrX21oeiwgdmNvX21oejsKKwl1bnNpZ25lZCBsb25nIGNjbGtfbWh6OwogCiAJLyogVGhlIGRyaXZlciBvbmx5IHN1cHBvcnQgc2luZ2xlIGNwdSAqLwogCWlmIChjcHUgPT0gMCkKIAkJZHBtY19mb3BzLmlvY3RsKE5VTEwsIE5VTEwsIElPQ1RMX0dFVF9DT1JFQ0xPQ0ssICZjY2xrX21oeik7CiAJZWxzZQogCQljY2xrX21oeiA9IC0xOworCiAJcmV0dXJuIGNjbGtfbWh6OwogfQogCkBAIC03NSwxMyArNzYsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGNjbGtfbWh6OwogCXVuc2lnbmVkIGxvbmcgdmNvX21oejsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpbmRleCwgdmNvX2luZGV4OwotCWludCBpOwotCisJdW5zaWduZWQgaW50IGluZGV4OwogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQKLQkgICAgKHBvbGljeSwgYmY1MzdfZnJlcV90YWJsZSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmaW5kZXgpKQorCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIGJmNTM3X2ZyZXFfdGFibGUsIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJmluZGV4KSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKIAljY2xrX21oeiA9IGJmNTM3X2ZyZXFfdGFibGVbaW5kZXhdLmZyZXF1ZW5jeTsKIAl2Y29fbWh6ID0gYmY1MzdfZnJlcV90YWJsZVtpbmRleF0uaW5kZXg7CiAKQEAgLTExNCw4ICsxMTQsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBfX2JmNTM3X2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewotCWludCByZXN1bHQ7Ci0KIAlpZiAocG9saWN5LT5jcHUgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9oZWFkLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaGVhZC5TCmluZGV4IGQxMDRlMWQ4Li4yYzI2NTJiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaGVhZC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9oZWFkLlMKQEAgLTE4MSw3ICsxODEsOCBAQAogCVNTWU5DOwogI2VuZGlmCiAKLQkvKkluaXRpYWxpc2UgVUFSVCovCisJLyogSW5pdGlhbGlzZSBVQVJUIC0gd2hlbiBib290aW5nIGZyb20gdS1ib290LCB0aGUgVUFSVCBpcyBub3QgZGlzYWJsZWQKKwkgKiBzbyBpZiB3ZSBkb250IGluaXRhbGl6ZSBoZXJlLCBvdXIgc2VyaWFsIGNvbnNvbGUgZ2V0cyBob3NlZCAqLwogCXAwLmggPSBoaShVQVJUX0xDUik7CiAJcDAubCA9IGxvKFVBUlRfTENSKTsKIAlyMCA9IDB4MChaKTsKQEAgLTQ2OSw0NyArNDcwLDQxIEBACiAJU1NZTkM7CiAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfTTI1UDgwKQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgY29kZSBmaXggdGhlIFNQSSBmbGFzaCByZWJvb3QgaXNzdWUsCi0gKiAvQ1Mgc2lnbmFsIG9mIHRoZSBjaGlwIHdoaWNoIGlzIHVzaW5nIFBGMTAgcmV0dXJuIHRvIEdQSU8gbW9kZQotICovCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGNvZGUgZml4IHRoZSBTUEkgZmxhc2ggcmVib290IGlzc3VlLAorCSAqIC9DUyBzaWduYWwgb2YgdGhlIGNoaXAgd2hpY2ggaXMgdXNpbmcgUEYxMCByZXR1cm4gdG8gR1BJTyBtb2RlCisJICovCiAJcDAuaCA9IGhpKFBPUlRGX0ZFUik7CiAJcDAubCA9IGxvKFBPUlRGX0ZFUik7CiAJcjAubCA9IDB4MDAwMDsKIAl3W3AwXSA9IHIwLmw7CiAJU1NZTkM7CiAKLS8qIC9DUyByZXR1cm4gdG8gaGlnaCAqLworCS8qIC9DUyByZXR1cm4gdG8gaGlnaCAqLwogCXAwLmggPSBoaShQT1JURklPKTsKIAlwMC5sID0gbG8oUE9SVEZJTyk7CiAJcjAubCA9IDB4RkZGRjsKIAl3W3AwXSA9IHIwLmw7CiAJU1NZTkM7CiAKLS8qIERlbGF5IHNvbWUgdGltZSwgVGhpcyBpcyBuZWNlc3NhcnkgKi8KKwkvKiBEZWxheSBzb21lIHRpbWUsIFRoaXMgaXMgbmVjZXNzYXJ5ICovCiAJcjEuaCA9IDA7CiAJcjEubCA9IDB4NDAwOwogCXAxICAgPSByMTsKLQlsc2V0dXAgKF9kZWxheV9sYWIxLF9kZWxheV9sYWIxX2VuZCApIGxjMSA9IHAxOwotX2RlbGF5X2xhYjE6CisJbHNldHVwICguTF9kZWxheV9sYWIxLCAuTF9kZWxheV9sYWIxX2VuZCkgbGMxID0gcDE7CisuTF9kZWxheV9sYWIxOgogCXIwLmggPSAwOwogCXIwLmwgPSAweDgwMDA7CiAJcDAgICA9IHIwOwotCWxzZXR1cCAoX2RlbGF5X2xhYjAsX2RlbGF5X2xhYjBfZW5kICkgbGMwID0gcDA7Ci1fZGVsYXlfbGFiMDoKKwlsc2V0dXAgKC5MX2RlbGF5X2xhYjAsIC5MX2RlbGF5X2xhYjBfZW5kKSBsYzAgPSBwMDsKKy5MX2RlbGF5X2xhYjA6CiAJbm9wOwotX2RlbGF5X2xhYjBfZW5kOgorLkxfZGVsYXlfbGFiMF9lbmQ6CiAJbm9wOwotX2RlbGF5X2xhYjFfZW5kOgorLkxfZGVsYXlfbGFiMV9lbmQ6CiAJbm9wOwogI2VuZGlmCiAKLQkvKiBDbGVhciB0aGUgYml0cyAxMy0xNSBpbiBTV1JTVCBpZiB0aGV5IHdlcmVudCBjbGVhcmVkICovCi0JcDAuaCA9IGhpKFNXUlNUKTsKLQlwMC5sID0gbG8oU1dSU1QpOwotCWNzeW5jOwotCXIwLmwgPSB3W3AwXTsKLQogCS8qIENsZWFyIHRoZSBJTUFTSyByZWdpc3RlciAqLwogCXAwLmggPSBoaShJTUFTSyk7CiAJcDAubCA9IGxvKElNQVNLKTsKQEAgLTUyMyw2OCArNTE4LDMwIEBACiAJW3AwXSA9IHIwOwogCVNTWU5DOwogCi0JLyogRGlzYWJsZSB0aGUgV0RPRyBUSU1FUiAqLwotCXAwLmggPSBoaShXRE9HX0NUTCk7Ci0JcDAubCA9IGxvKFdET0dfQ1RMKTsKLQlyMC5sID0gMHhBRDY7Ci0Jd1twMF0gPSByMC5sOworCS8qIG1ha2Ugc3VyZSBTWVNDUiBpcyBzZXQgdG8gdXNlIEJNT0RFICovCisJUDAuaCA9IGhpKFNZU0NSKTsKKwlQMC5sID0gbG8oU1lTQ1IpOworCVIwLmwgPSAweDA7CisJV1tQMF0gPSBSMC5sOwogCVNTWU5DOwogCi0JLyogQ2xlYXIgdGhlIHN0aWNreSBiaXQgaW5jYXNlIGl0IGlzIGFscmVhZHkgc2V0ICovCi0JcDAuaCA9IGhpKFdET0dfQ1RMKTsKLQlwMC5sID0gbG8oV0RPR19DVEwpOwotCXIwLmwgPSAweDhBRDY7Ci0Jd1twMF0gPSByMC5sOworCS8qIGlzc3VlIGEgc3lzdGVtIHNvZnQgcmVzZXQgKi8KKwlQMS5oID0gaGkoU1dSU1QpOworCVAxLmwgPSBsbyhTV1JTVCk7CisJUjEubCA9IDB4MDAwNzsKKwlXW1AxXSA9IFIxOwogCVNTWU5DOwogCi0JLyogUHJvZ3JhbSB0aGUgY291bnQgdmFsdWUgKi8KLQlSMC5sID0gMHgxMDA7Ci0JUjAuaCA9IDB4MDsKLQlQMC5oID0gaGkoV0RPR19DTlQpOwotCVAwLmwgPSBsbyhXRE9HX0NOVCk7Ci0JW1AwXSA9IFIwOworCS8qIGNsZWFyIHN5c3RlbSBzb2Z0IHJlc2V0ICovCisJUjAubCA9IDB4MDAwMDsKKwlXW1AwXSA9IFIwOwogCVNTWU5DOwogCi0JLyogUHJvZ3JhbSBXRE9HX1NUQVQgaWYgbmVjZXNzYXJ5ICovCi0JUDAuaCA9IGhpKFdET0dfQ1RMKTsKLQlQMC5sID0gbG8oV0RPR19DVEwpOwotCVIwID0gV1tQMF0oWik7Ci0JQ0MgPSBCSVRUU1QoUjAsMSk7Ci0JaWYgIUNDIEpVTVAgLkxXUklURVNUQVQ7Ci0JQ0MgPSBCSVRUU1QoUjAsMik7Ci0JaWYgIUNDIEpVTVAgLkxXUklURVNUQVQ7Ci0JSlVNUCAuTFNLSVBfV1JJVEU7Ci0KLS5MV1JJVEVTVEFUOgotCS8qIFdoZW4gd2F0Y2ggZG9nIHRpbWVyIGlzIGVuYWJsZWQsCi0JICogYSB3cml0ZSB0byBTVEFUIHdpbGwgbG9hZCB0aGUgY29udGVudHMgb2YgQ05UIHRvIFNUQVQKLQkgKi8KLQlSMCA9IDB4MDAwMCh6KTsKLQlQMC5oID0gaGkoV0RPR19TVEFUKTsKLQlQMC5sID0gbG8oV0RPR19TVEFUKQotCVtQMF0gPSBSMDsKLQlTU1lOQzsKLQotLkxTS0lQX1dSSVRFOgotCS8qIEVuYWJsZSB0aGUgcmVzZXQgZXZlbnQgKi8KLQlQMC5oID0gaGkoV0RPR19DVEwpOwotCVAwLmwgPSBsbyhXRE9HX0NUTCk7Ci0JUjAgPSBXW1AwXShaKTsKLQlCSVRDTFIoUjAsMSk7Ci0JQklUQ0xSKFIwLDIpOwotCVdbUDBdID0gUjAuTDsKLQlTU1lOQzsKLQlOT1A7Ci0KLQkvKiBFbmFibGUgdGhlIHdkb2cgY291bnRlciAqLwotCVIwID0gV1tQMF0oWik7Ci0JQklUQ0xSKFIwLDQpOwotCVdbUDBdID0gUjAuTDsKLQlTU1lOQzsKLQotCUlETEU7CisJLyogaXNzdWUgY29yZSByZXNldCAqLworCXJhaXNlIDE7CiAKIAlSVFM7CitFTkRQUk9DKF9iZmluX3Jlc2V0KQogCiAuZGF0YQogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9NYWtlZmlsZQppbmRleCA4ODZlZGM3Li40OTVhMWNmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvTWFrZWZpbGUKQEAgLTMsNSArMyw2IEBACiAjCiAKIG9iai0kKENPTkZJR19HRU5FUklDX0JPQVJEKSAgICAgICAgICAgICs9IGdlbmVyaWNfYm9hcmQubwotb2JqLSQoQ09ORklHX0JGSU41NjFfRVpLSVQpICAgICAgICAgICAgKz0gZXpraXQubwogb2JqLSQoQ09ORklHX0JGSU41NjFfQkxVRVRFQ0hOSVhfQ00pICAgKz0gY21fYmY1NjEubworb2JqLSQoQ09ORklHX0JGSU41NjFfRVpLSVQpICAgICAgICAgICAgKz0gZXpraXQubworb2JqLSQoQ09ORklHX0JGSU41NjFfVEVQTEEpICAgICAgICAgICAgKz0gdGVwbGEubwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jCmluZGV4IDE0ZWI0ZjkuLjk3MjBiNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2V6a2l0LmMKQEAgLTMyLDEyICszMiw2MSBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKIC8qCiAgKiBOYW1lIHRoZSBCb2FyZCBmb3IgdGhlIC9wcm9jL2NwdWluZm8KICAqLwogY2hhciAqYmZpbl9ib2FyZF9uYW1lID0gIkFERFMtQkY1NjEtRVpLSVQiOwogCisjZGVmaW5lIElTUDE3NjFfQkFTRSAgICAgICAweDJDMEYwMDAwCisjZGVmaW5lIElTUDE3NjFfSVJRICAgICAgICBJUlFfUEYxMAorCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDE3NjBfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTc2MF9IQ0RfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2lzcDE3NjFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJpc3AxNzYxLXJlZ3MiLAorCQkuc3RhcnQgID0gSVNQMTc2MV9CQVNFICsgMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IElTUDE3NjFfQkFTRSArIDB4MDAwZmZmZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IElTUDE3NjFfSVJRLAorCQkuZW5kICAgID0gSVNQMTc2MV9JUlEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9pc3AxNzYxX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiaXNwMTc2MSIsCisJLmlkICAgICAgICAgICAgID0gMCwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGJmaW5faXNwMTc2MV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IGJmaW5faXNwMTc2MV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYmZpbl9pc3AxNzYxX2RldmljZXNbXSA9IHsKKwkmYmZpbl9pc3AxNzYxX2RldmljZSwKK307CisKK2ludCBfX2luaXQgYmZpbl9pc3AxNzYxX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2RldmljZXM9QVJSQVlfU0laRShiZmluX2lzcDE3NjFfZGV2aWNlcyk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcygpOiByZWdpc3RlcmluZyBkZXZpY2UgcmVzb3VyY2VzXG4iLCBfX0ZVTkNUSU9OX18pOworCXNldF9pcnFfdHlwZShJU1AxNzYxX0lSUSwgSVJRRl9UUklHR0VSX0ZBTExJTkcpOworCisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGJmaW5faXNwMTc2MV9kZXZpY2VzLCBudW1fZGV2aWNlcyk7Cit9CisKK3ZvaWQgX19leGl0IGJmaW5faXNwMTc2MV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmJmaW5faXNwMTc2MV9kZXZpY2UpOworfQorCithcmNoX2luaXRjYWxsKGJmaW5faXNwMTc2MV9pbml0KTsKKyNlbmRpZgorCiAvKgogICogIFVTQi1MQU4gRXpFeHRlbmRlciBib2FyZAogICogIERyaXZlciBuZWVkcyB0byBrbm93IGFkZHJlc3MsIGlycSBhbmQgZmxhZyBwaW4uCkBAIC0xMzUsMTMgKzE4NCwxOCBAQAogewogCWludCByZXQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlcygpOiByZWdpc3RlcmluZyBkZXZpY2UgcmVzb3VyY2VzXG4iLCBfX0ZVTkNUSU9OX18pOwotCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKGV6a2l0X2RldmljZXMsCi0JCSBBUlJBWV9TSVpFKGV6a2l0X2RldmljZXMpKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcygpOiByZWdpc3RlcmluZyBkZXZpY2UgcmVzb3VyY2VzXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhlemtpdF9kZXZpY2VzLCBBUlJBWV9TSVpFKGV6a2l0X2RldmljZXMpKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQlyZXR1cm4gc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYmZpbl9zcGlfYm9hcmRfaW5mbywKLQkJCQlBUlJBWV9TSVpFKGJmaW5fc3BpX2JvYXJkX2luZm8pKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkgfHwgZGVmaW5lZChDT05GSUdfU01DOTFYX01PRFVMRSkKKwliZmluX3dyaXRlX0ZJTzBfRElSKGJmaW5fcmVhZF9GSU8wX0RJUigpIHwgKDEgPDwgMTIpKTsKKwlTU1lOQygpOworI2VuZGlmCisKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYmZpbl9zcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShiZmluX3NwaV9ib2FyZF9pbmZvKSk7CiB9CiAKIGFyY2hfaW5pdGNhbGwoZXpraXRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL3RlcGxhLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL3RlcGxhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzMDhjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvdGVwbGEuYwpAQCAtMCwwICsxLDYxIEBACisvKgorICogIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS90ZXBsYS5jCisgKgorICogIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogIE9ubHkgU01TQzkxQzExMTEgd2FzIHJlZ2lzdGVyZWQsIG1heSBkbyBtb3JlIGxhdGVyLgorICoKKyAqICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSksIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiAgVGhhbmtzIHRvIEphbWV5IEhpY2tzLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworY2hhciAqYmZpbl9ib2FyZF9uYW1lID0gIlRlcGxhLUJGNTYxIjsKKworLyoKKyAqICBEcml2ZXIgbmVlZHMgdG8ga25vdyBhZGRyZXNzLCBpcnEgYW5kIGZsYWcgcGluLgorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4MkMwMDAzMDAsCisJCS5lbmQJPSAweDJDMDAwMzIwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LHsKKwkJLnN0YXJ0CT0gSVJRX1BST0dfSU5UQiwKKwkJLmVuZAk9IElSUV9QUk9HX0lOVEIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRfElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCwKKwl9LHsKKwkJLyoKKwkJICogIGRlbm90ZXMgdGhlIGZsYWcgcGluIGFuZCBpcyB1c2VkIGRpcmVjdGx5IGlmCisJCSAqICBDT05GSUdfSVJRQ0hJUF9ERU1VWF9HUElPIGlzIGRlZmluZWQuCisJCSAqLworCQkuc3RhcnQJPSBJUlFfUEY3LAorCQkuZW5kCT0gSVJRX1BGNywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlF8SU9SRVNPVVJDRV9JUlFfSElHSExFVkVMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgID0gInNtYzkxeCIsCisJLmlkICAgICAgICAgICAgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICA9IHNtYzkxeF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdGVwbGFfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNtYzkxeF9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0ZXBsYV9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKTogcmVnaXN0ZXJpbmcgZGV2aWNlIHJlc291cmNlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXModGVwbGFfZGV2aWNlcywgQVJSQVlfU0laRSh0ZXBsYV9kZXZpY2VzKSk7Cit9CisKK2FyY2hfaW5pdGNhbGwodGVwbGFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2hlYWQuUwppbmRleCA3YmNhNDc4Li5hZDkxODdhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaGVhZC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9oZWFkLlMKQEAgLTEyNyw3ICsxMjcsOCBAQAogCVNUSSBSMjsKICNlbmRpZgogCi0JLyogSW5pdGlhbGlzZSBVQVJUKi8KKwkvKiBJbml0aWFsaXNlIFVBUlQgLSB3aGVuIGJvb3RpbmcgZnJvbSB1LWJvb3QsIHRoZSBVQVJUIGlzIG5vdCBkaXNhYmxlZAorCSAqIHNvIGlmIHdlIGRvbnQgaW5pdGFsaXplIGhlcmUsIG91ciBzZXJpYWwgY29uc29sZSBnZXRzIGhvc2VkICovCiAJcDAuaCA9IGhpKFVBUlRfTENSKTsKIAlwMC5sID0gbG8oVUFSVF9MQ1IpOwogCXIwID0gMHgwKFopOwpAQCAtNDE0LDEyICs0MTUsNiBAQAogCXdbcDBdID0gcjAubDsKICNlbmRpZgogCi0JLyogQ2xlYXIgdGhlIGJpdHMgMTMtMTUgaW4gU1dSU1QgaWYgdGhleSB3ZXJlbnQgY2xlYXJlZCAqLwotCXAwLmggPSBoaShTSUNBX1NXUlNUKTsKLQlwMC5sID0gbG8oU0lDQV9TV1JTVCk7Ci0JY3N5bmM7Ci0JcjAubCA9IHdbcDBdOwotCiAJLyogQ2xlYXIgdGhlIElNQVNLIHJlZ2lzdGVyICovCiAJcDAuaCA9IGhpKElNQVNLKTsKIAlwMC5sID0gbG8oSU1BU0spOwpAQCAtNDMzLDY4ICs0MjgsMzAgQEAKIAlbcDBdID0gcjA7CiAJU1NZTkM7CiAKLQkvKiBEaXNhYmxlIHRoZSBXRE9HIFRJTUVSICovCi0JcDAuaCA9IGhpKFdET0dBX0NUTCk7Ci0JcDAubCA9IGxvKFdET0dBX0NUTCk7Ci0JcjAubCA9IDB4QUQ2OwotCXdbcDBdID0gcjAubDsKKwkvKiBtYWtlIHN1cmUgU1lTQ1IgaXMgc2V0IHRvIHVzZSBCTU9ERSAqLworCVAwLmggPSBoaShTSUNBX1NZU0NSKTsKKwlQMC5sID0gbG8oU0lDQV9TWVNDUik7CisJUjAubCA9IDB4MjA7CisJV1tQMF0gPSBSMC5sOwogCVNTWU5DOwogCi0JLyogQ2xlYXIgdGhlIHN0aWNreSBiaXQgaW5jYXNlIGl0IGlzIGFscmVhZHkgc2V0ICovCi0JcDAuaCA9IGhpKFdET0dBX0NUTCk7Ci0JcDAubCA9IGxvKFdET0dBX0NUTCk7Ci0JcjAubCA9IDB4OEFENjsKLQl3W3AwXSA9IHIwLmw7CisJLyogaXNzdWUgYSBzeXN0ZW0gc29mdCByZXNldCAqLworCVAxLmggPSBoaShTSUNBX1NXUlNUKTsKKwlQMS5sID0gbG8oU0lDQV9TV1JTVCk7CisJUjEubCA9IDB4MDAwNzsKKwlXW1AxXSA9IFIxOwogCVNTWU5DOwogCi0JLyogUHJvZ3JhbSB0aGUgY291bnQgdmFsdWUgKi8KLQlSMC5sID0gMHgxMDA7Ci0JUjAuaCA9IDB4MDsKLQlQMC5oID0gaGkoV0RPR0FfQ05UKTsKLQlQMC5sID0gbG8oV0RPR0FfQ05UKTsKLQlbUDBdID0gUjA7CisJLyogY2xlYXIgc3lzdGVtIHNvZnQgcmVzZXQgKi8KKwlSMC5sID0gMHgwMDAwOworCVdbUDBdID0gUjA7CiAJU1NZTkM7CiAKLQkvKiBQcm9ncmFtIFdET0dfU1RBVCBpZiBuZWNlc3NhcnkgKi8KLQlQMC5oID0gaGkoV0RPR0FfQ1RMKTsKLQlQMC5sID0gbG8oV0RPR0FfQ1RMKTsKLQlSMCA9IFdbUDBdKFopOwotCUNDID0gQklUVFNUKFIwLDEpOwotCWlmICFDQyBKVU1QIC5MV1JJVEVTVEFUOwotCUNDID0gQklUVFNUKFIwLDIpOwotCWlmICFDQyBKVU1QIC5MV1JJVEVTVEFUOwotCUpVTVAgLkxTS0lQX1dSSVRFOwotCi0uTFdSSVRFU1RBVDoKLQkvKiBXaGVuIHdhdGNoIGRvZyB0aW1lciBpcyBlbmFibGVkLAotCSAqIGEgd3JpdGUgdG8gU1RBVCB3aWxsIGxvYWQgdGhlIGNvbnRlbnRzIG9mIENOVCB0byBTVEFUCi0JICovCi0JUjAgPSAweDAwMDAoeik7Ci0JUDAuaCA9IGhpKFdET0dBX1NUQVQpOwotCVAwLmwgPSBsbyhXRE9HQV9TVEFUKQotCVtQMF0gPSBSMDsKLQlTU1lOQzsKLQotLkxTS0lQX1dSSVRFOgotCS8qIEVuYWJsZSB0aGUgcmVzZXQgZXZlbnQgKi8KLQlQMC5oID0gaGkoV0RPR0FfQ1RMKTsKLQlQMC5sID0gbG8oV0RPR0FfQ1RMKTsKLQlSMCA9IFdbUDBdKFopOwotCUJJVENMUihSMCwxKTsKLQlCSVRDTFIoUjAsMik7Ci0JV1tQMF0gPSBSMC5MOwotCVNTWU5DOwotCU5PUDsKLQotCS8qIEVuYWJsZSB0aGUgd2RvZyBjb3VudGVyICovCi0JUjAgPSBXW1AwXShaKTsKLQlCSVRDTFIoUjAsNCk7Ci0JV1tQMF0gPSBSMC5MOwotCVNTWU5DOwotCi0JSURMRTsKKwkvKiBpc3N1ZSBjb3JlIHJlc2V0ICovCisJcmFpc2UgMTsKIAogCVJUUzsKK0VORFBST0MoX2JmaW5fcmVzZXQpCiAKIC5kYXRhCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwppbmRleCA4ZWIwYTkwLi43ZDAzNjg3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCkBAIC0xODEsNiArMTgxLDEyIEBACiAKIF9yZXR1cm5fZnJvbV9leGNlcHRpb246CiAJREVCVUdfU1RBUlRfSFdUUkFDRQorI2lmZGVmIEFOT01BTFlfMDUwMDAyNTcKKwlSNz1MQzA7CisJTEMwPVI3OworCVI3PUxDMTsKKwlMQzE9Ujc7CisjZW5kaWYKIAkoUjc6NixQNTo0KSA9IFtzcCsrXTsKIAlBU1RBVCA9IFtzcCsrXTsKIAlzcCA9IHJldG47CkBAIC03MDYsNiArNzEyLDExIEBACiAJcDEuaCA9IF9ldnRfc3lzdGVtX2NhbGw7CiAJW3AwXSA9IHAxOwogCWNzeW5jOworCisJLyogU2V0IG9yaWdfcDAgdG8gLTEgdG8gaW5kaWNhdGUgdGhpcyBpc24ndCB0aGUgZW5kIG9mIGEgc3lzY2FsbC4gICovCisJcjAgPSAtMSAoeCk7CisJW3NwICsgUFRfT1JJR19QMF0gPSByMDsKKwogCXAxID0gcmV0czsKIAlbc3AgKyBQVF9SRVNFUlZFRF0gPSBwMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCmluZGV4IGRlYjI3MjcuLmFmZWQ1MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKQEAgLTEwMiwxMCArMTAyLDggQEAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBQTV9TVVNQRU5EX1NUQU5EQlk6CiAJCWJyZWFrOwotCWNhc2UgUE1fU1VTUEVORF9NRU06Ci0JCXJldHVybiAtRU5PVFNVUFA7CiAKLQljYXNlIFBNX1NVU1BFTkRfRElTSzoKKwljYXNlIFBNX1NVU1BFTkRfTUVNOgogCQlyZXR1cm4gLUVOT1RTVVBQOwogCiAJZGVmYXVsdDoKQEAgLTEyNiwxMCArMTI0LDggQEAKIAljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKIAkJYmZpbl9wbV9zdXNwZW5kX3N0YW5kYnlfZW50ZXIoKTsKIAkJYnJlYWs7Ci0JY2FzZSBQTV9TVVNQRU5EX01FTToKLQkJcmV0dXJuIC1FTk9UU1VQUDsKIAotCWNhc2UgUE1fU1VTUEVORF9ESVNLOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CiAJCXJldHVybiAtRU5PVFNVUFA7CiAKIAlkZWZhdWx0OgpAQCAtMTU1LDkgKzE1MSw2IEBACiAJY2FzZSBQTV9TVVNQRU5EX01FTToKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAotCWNhc2UgUE1fU1VTUEVORF9ESVNLOgotCQlyZXR1cm4gLUVOT1RTVVBQOwotCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTY2LDcgKzE1OSw2IEBACiB9CiAKIHN0cnVjdCBwbV9vcHMgYmZpbl9wbV9vcHMgPSB7Ci0JLnBtX2Rpc2tfbW9kZSA9IFBNX0RJU0tfUExBVEZPUk0sCiAJLnByZXBhcmUgPSBiZmluX3BtX3ByZXBhcmUsCiAJLmVudGVyID0gYmZpbl9wbV9lbnRlciwKIAkuZmluaXNoID0gYmZpbl9wbV9maW5pc2gsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL2luaXQuYyBiL2FyY2gvYmxhY2tmaW4vbW0vaW5pdC5jCmluZGV4IDczZjcyYWIuLmQ2Y2YxMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vaW5pdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vaW5pdC5jCkBAIC0xMTYsNyArMTE2LDggQEAKIAl7CiAJCXVuc2lnbmVkIGxvbmcgem9uZXNfc2l6ZVtNQVhfTlJfWk9ORVNdID0geyAwLCB9OwogCi0JCXpvbmVzX3NpemVbWk9ORV9OT1JNQUxdID0gKGVuZF9tZW0gLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVDsKKwkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSAoZW5kX21lbSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUOworCQl6b25lc19zaXplW1pPTkVfTk9STUFMXSA9IDA7CiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIAkJem9uZXNfc2l6ZVtaT05FX0hJR0hNRU1dID0gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOTYxYzBkNS4uZmQyMTI5YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3B0cmFjZS5jCkBAIC02LDcgKzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMTliY2FkMC4uNDFkNGE1ZiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3NpZ25hbC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL0tjb25maWcgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9LY29uZmlnCmluZGV4IGY2NDYyNGYuLjFkODU5YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL0tjb25maWcKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvS2NvbmZpZwpAQCAtNjAzLDcgKzYwMyw3IEBACiAgICAgICAgIHNlbGVjdCBIT1RQTFVHCiAgICAgICAgIHNlbGVjdCBQQ0NBUkRfTk9OU1RBVElDCiAgICAgICAgIGhlbHAKLQkgRW5hYmxlZCB0aGUgRVRSQVggQ2FyYnVzIGRyaXZlci4KKwkgRW5hYmxlZCB0aGUgRVRSQVggQ2FyZGJ1cyBkcml2ZXIuCiAKIGNvbmZpZyBQQ0kKICAgICAgICBib29sCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvZG1hLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvZG1hLmMKaW5kZXggNzBkM2JmMC4uODMyZmM2MyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2RtYS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjaS9kbWEuYwpAQCAtNzYsNyArNzYsNyBAQAogewogCXZvaWQgX19pb21lbSAqbWVtX2Jhc2U7CiAJaW50IHBhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOwotCWludCBiaXRtYXBfc2l6ZSA9IChwYWdlcyArIDMxKS8zMjsKKwlpbnQgYml0bWFwX3NpemUgPSBCSVRTX1RPX0xPTkdTKHBhZ2VzKSAqIHNpemVvZihsb25nKTsKIAogCWlmICgoZmxhZ3MgJiAoRE1BX01FTU9SWV9NQVAgfCBETUFfTUVNT1JZX0lPKSkgPT0gMCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9wdHJhY2UuYwppbmRleCA4MmNmMmUzLi5kNGQ1N2I3IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHRyYWNlLmMKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL2NyaXNrc3ltcy5jIGIvYXJjaC9jcmlzL2tlcm5lbC9jcmlza3N5bXMuYwppbmRleCAxZjIwYzE2Li4xMDViYjVlIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL2NyaXNrc3ltcy5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvY3Jpc2tzeW1zLmMKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9jcmlzL2tlcm5lbC9wdHJhY2UuYwppbmRleCAyYjYzNjNjLi4xMDg1ZDAzIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvcHRyYWNlLmMKQEAgLTY3LDcgKzY3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L0tjb25maWcgYi9hcmNoL2Zydi9LY29uZmlnCmluZGV4IGVlZDY5NDMuLjc0ZWVmNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L0tjb25maWcKKysrIGIvYXJjaC9mcnYvS2NvbmZpZwpAQCAtNDUsNiArNDUsMTAgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBRVUlDS0xJU1QKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKIAlib29sCiAJZGVmYXVsdCB5CkBAIC01MywxMCArNTcsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEFSQ0hfVVNFU19TTEFCX1BBR0VfU1RSVUNUCi0JYm9vbAotCWRlZmF1bHQgeQotCiBtYWlubWVudSAiRnVqaXRzdSBGUi1WIEtlcm5lbCBDb25maWd1cmF0aW9uIgogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKQEAgLTEwMiwxNCArMTAyLDYgQEAKIAkgIHdpdGggYSBsb3Qgb2YgUkFNLCB0aGlzIGNhbiBiZSB3YXN0ZWZ1bCBvZiBwcmVjaW91cyBsb3cgbWVtb3J5LgogCSAgU2V0dGluZyB0aGlzIG9wdGlvbiB3aWxsIHB1dCB1c2VyLXNwYWNlIHBhZ2UgdGFibGVzIGluIGhpZ2ggbWVtb3J5LgogCi1jb25maWcgTEFSR0VfQUxMT0NTCi0JYm9vbCAiQWxsb3cgYWxsb2NhdGluZyBsYXJnZSBibG9ja3MgKD4gMU1CKSBvZiBtZW1vcnkiCi0JaGVscAotCSAgQWxsb3cgdGhlIHNsYWIgbWVtb3J5IGFsbG9jYXRvciB0byBrZWVwIGNoYWlucyBmb3IgdmVyeSBsYXJnZSBtZW1vcnkKLQkgIHNpemVzIC0gdXAgdG8gMzJNQi4gWW91IG1heSBuZWVkIHRoaXMgaWYgeW91ciBzeXN0ZW0gaGFzIGEgbG90IG9mCi0JICBSQU0sIGFuZCB5b3UgbmVlZCB0byBhYmxlIHRvIGFsbG9jYXRlIHZlcnkgbGFyZ2UgY29udGlndW91cyBjaHVua3MuCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBzb3VyY2UgIm1tL0tjb25maWciCiAKIGNob2ljZQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUwppbmRleCA5NDBhYzMwLi40M2RjMDhlIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnkuUwpAQCAtMTQ4Miw2ICsxNDgyLDE2IEBACiAJLmxvbmcgc3lzX2ZhY2Nlc3NhdAogCS5sb25nIHN5c19wc2VsZWN0NgogCS5sb25nIHN5c19wcG9sbAorCS5sb25nIHN5c191bnNoYXJlCQkvKiAzMTAgKi8KKwkubG9uZyBzeXNfc2V0X3JvYnVzdF9saXN0CisJLmxvbmcgc3lzX2dldF9yb2J1c3RfbGlzdAorCS5sb25nIHN5c19zcGxpY2UKKwkubG9uZyBzeXNfc3luY19maWxlX3JhbmdlCisJLmxvbmcgc3lzX3RlZQkJCS8qIDMxNSAqLworCS5sb25nIHN5c192bXNwbGljZQorCS5sb25nIHN5c19tb3ZlX3BhZ2VzCisJLmxvbmcgc3lzX2dldGNwdQorCS5sb25nIHN5c19lcG9sbF9wd2FpdAogCiAKIHN5c2NhbGxfdGFibGVfc2l6ZSA9ICguIC0gc3lzX2NhbGxfdGFibGUpCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvZ2RiLXN0dWIuYyBiL2FyY2gvZnJ2L2tlcm5lbC9nZGItc3R1Yi5jCmluZGV4IDk1NTBmMzcuLjFlN2ExMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9nZGItc3R1Yi5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9nZGItc3R1Yi5jCkBAIC0xMTk1LDcgKzExOTUsNyBAQAogLyoKICAqCiAgKi8KLXN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGdkYnN0dWJfc2hvd19yZWdzKHZvaWQpCitzdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZCBnZGJzdHViX3Nob3dfcmVncyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgKnJlZzsKIAlpbnQgbG9vcDsKQEAgLTEyMjMsNyArMTIyMyw3IEBACiAvKgogICogZHVtcCBkZWJ1Z2dpbmcgcmVncwogICovCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBnZGJzdHViX2R1bXBfZGVidWdyZWdzKHZvaWQpCitzdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZCBnZGJzdHViX2R1bXBfZGVidWdyZWdzKHZvaWQpCiB7CiAJZ2Ric3R1Yl9wcmludGsoIkRDUiAgICAlMDhseCAgIiwgX19kZWJ1Z19zdGF0dXMuZGNyKTsKIAlnZGJzdHViX3ByaW50aygiQlJSICAgICUwOGx4XG4iLCBfX2RlYnVnX3N0YXR1cy5icnIpOwpAQCAtMjA3OSwyNSArMjA3OSwyNSBAQAogICogR0RCIHdhbnRzIHRvIGNhbGwgbWFsbG9jKCkgYW5kIGZyZWUoKSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNhbGxpbmcga2VybmVsCiAgKiBmdW5jdGlvbnMgZGlyZWN0bHkgZnJvbSBpdHMgY29tbWFuZCBsaW5lCiAgKi8KLXN0YXRpYyB2b2lkICptYWxsb2Moc2l6ZV90IHNpemUpIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOworc3RhdGljIHZvaWQgKm1hbGxvYyhzaXplX3Qgc2l6ZSkgX19tYXliZV91bnVzZWQ7CiBzdGF0aWMgdm9pZCAqbWFsbG9jKHNpemVfdCBzaXplKQogewogCXJldHVybiBrbWFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlKHZvaWQgKnApIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOworc3RhdGljIHZvaWQgZnJlZSh2b2lkICpwKSBfX21heWJlX3VudXNlZDsKIHN0YXRpYyB2b2lkIGZyZWUodm9pZCAqcCkKIHsKIAlrZnJlZShwKTsKIH0KIAotc3RhdGljIHVpbnQzMl90IF9fX2dldF9IU1IwKHZvaWQpIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOworc3RhdGljIHVpbnQzMl90IF9fX2dldF9IU1IwKHZvaWQpIF9fbWF5YmVfdW51c2VkOwogc3RhdGljIHVpbnQzMl90IF9fX2dldF9IU1IwKHZvaWQpCiB7CiAJcmV0dXJuIF9fZ2V0X0hTUigwKTsKIH0KIAotc3RhdGljIHVpbnQzMl90IF9fX3NldF9IU1IwKHVpbnQzMl90IHgpIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOworc3RhdGljIHVpbnQzMl90IF9fX3NldF9IU1IwKHVpbnQzMl90IHgpIF9fbWF5YmVfdW51c2VkOwogc3RhdGljIHVpbnQzMl90IF9fX3NldF9IU1IwKHVpbnQzMl90IHgpCiB7CiAJX19zZXRfSFNSKDAsIHgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2lycS5jIGIvYXJjaC9mcnYva2VybmVsL2lycS5jCmluZGV4IDg3ZjM2MGEuLmM3ZTU5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvZnJ2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNTE1YTVjZS4uOTU4M2EzMyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yNSwxMiArMjUsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vZ2RiLXN0dWIuaD4KICNpbmNsdWRlIDxhc20vbWItcmVncy5oPgogCkBAIC04OCw2ICs5MCw4IEBACiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKIAkJCWlycV9zdGF0W2NwdV0uaWRsZV90aW1lc3RhbXAgPSBqaWZmaWVzOwogCisJCQljaGVja19wZ3RfY2FjaGUoKTsKKwogCQkJaWYgKCFmcnZfZG1hX2lucHJvZ3Jlc3MgJiYgaWRsZSkKIAkJCQlpZGxlKCk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvZnJ2L2tlcm5lbC9wdHJhY2UuYwppbmRleCBmY2ZmODE5Li5jZTg4ZmI5IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3B0cmFjZS5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL2Zydi9rZXJuZWwvc2VtYXBob3JlLmMKaW5kZXggZjI3OGNkZi4uOGUxODJjZSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3NlbWFwaG9yZS5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9zZW1hcGhvcmUuYwpAQCAtMTksNyArMTksNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKIH07CiAKLSNpZiBTRU1BUEhPUkVfREVCVUcKKyNpZmRlZiBDT05GSUdfREVCVUdfU0VNQVBIT1JFCiB2b2lkIHNlbXRyYWNlKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwgY29uc3QgY2hhciAqc3RyKQogewogCWlmIChzZW0tPmRlYnVnKQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3NldHVwLmMgYi9hcmNoL2Zydi9rZXJuZWwvc2V0dXAuYwppbmRleCA4ZWEzY2EyLi5hYTNjNzk1IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvc2V0dXAuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsb2NrX2Ntb2RlIF9fcG1pbml0ZGF0YSAqY2xvY2tfY21vZGVzOwogc3RhdGljIGludCBfX3BtaW5pdGRhdGEgY2xvY2tfZG91YmxlZDsKIAotc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgX19pbml0ZGF0YSBfX2Zydl91YXJ0MCA9IHsKK3N0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IF9fcG1pbml0ZGF0YSBfX2Zydl91YXJ0MCA9IHsKIAkudWFydGNsawkJPSAwLAogCS5tZW1iYXNlCQk9IChjaGFyICopIFVBUlQwX0JBU0UsCiAJLmlycQkJCT0gSVJRX0NQVV9VQVJUMCwKQEAgLTIwMCw3ICsyMDAsNyBAQAogCS5mbGFncwkJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAogfTsKIAotc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgX19pbml0ZGF0YSBfX2Zydl91YXJ0MSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IF9fcG1pbml0ZGF0YSBfX2Zydl91YXJ0MSA9IHsKIAkudWFydGNsawkJPSAwLAogCS5tZW1iYXNlCQk9IChjaGFyICopIFVBUlQxX0JBU0UsCiAJLmlycQkJCT0gSVJRX0NQVV9VQVJUMSwKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYwppbmRleCA4NWJhZWFlLi5kNjRiY2FmIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9zeXNfZnJ2LmMgYi9hcmNoL2Zydi9rZXJuZWwvc3lzX2Zydi5jCmluZGV4IGM0ZDQzNDguLjI2YjNkZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9zeXNfZnJ2LmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3N5c19mcnYuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L21zZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NobS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2Zydi9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAyOGVhZTk3Li40ODFkYzEzIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTAxLDEzICsxMDEsMTQgQEAKICAgX3N0ZXh0ID0gLjsKICAgLnRleHQgOiB7CiAJKigKLQkJLnRleHQuc3RhcnQgLnRleHQgLnRleHQuKgorCQkudGV4dC5zdGFydCAudGV4dC4qCiAjaWZkZWYgQ09ORklHX0RFQlVHX0lORk8KIAkuaW5pdC50ZXh0CiAJLmV4aXQudGV4dAogCS5leGl0Y2FsbC5leGl0CiAjZW5kaWYKIAkpCisJVEVYVF9URVhUCiAJU0NIRURfVEVYVAogCUxPQ0tfVEVYVAogCSooLmZpeHVwKQpAQCAtMTM1LDcgKzEzNiw4IEBACiAKICAgX3NkYXRhID0gLjsKICAgLmRhdGEgOiB7CQkJLyogRGF0YSAqLwotCSooLmRhdGEgLmRhdGEuKikKKwlEQVRBX0RBVEEKKwkqKC5kYXRhLiopCiAJKiguZXhpdC5kYXRhKQogCUNPTlNUUlVDVE9SUwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21tL2VsZi1mZHBpYy5jIGIvYXJjaC9mcnYvbW0vZWxmLWZkcGljLmMKaW5kZXggY2FjMmMwMS4uMzg1ZmQzMCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbW0vZWxmLWZkcGljLmMKKysrIGIvYXJjaC9mcnYvbW0vZWxmLWZkcGljLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLWZkcGljLmg+CisjaW5jbHVkZSA8YXNtL21tYW4uaD4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21tL3BnYWxsb2MuYyBiL2FyY2gvZnJ2L21tL3BnYWxsb2MuYwppbmRleCAxOWIxM2JlLi43Nzg3YzNjIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tbS9wZ2FsbG9jLmMKKysrIGIvYXJjaC9mcnYvbW0vcGdhbGxvYy5jCkBAIC0xMywxMiArMTMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvcXVpY2tsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChQQUdFX1NJWkUpKSk7Ci1zdHJ1Y3Qga21lbV9jYWNoZSAqcGdkX2NhY2hlOwogCiBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCQlzZXRfcGFnZV9wcml2YXRlKG5leHQsICh1bnNpZ25lZCBsb25nKSBwcHJldik7CiB9CiAKLXZvaWQgcGdkX2N0b3Iodm9pZCAqcGdkLCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgdW51c2VkKQordm9pZCBwZ2RfY3Rvcih2b2lkICpwZ2QpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTIwLDcgKzEyMCw3IEBACiB9CiAKIC8qIG5ldmVyIGNhbGxlZCB3aGVuIFBUUlNfUEVSX1BNRCA+IDEgKi8KLXZvaWQgcGdkX2R0b3Iodm9pZCAqcGdkLCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgdW51c2VkKQordm9pZCBwZ2RfZHRvcih2b2lkICpwZ2QpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsgLyogY2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCiAKQEAgLTEzMyw3ICsxMzMsNyBAQAogewogCXBnZF90ICpwZ2Q7CiAKLQlwZ2QgPSBrbWVtX2NhY2hlX2FsbG9jKHBnZF9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJcGdkID0gcXVpY2tsaXN0X2FsbG9jKDAsIEdGUF9LRVJORUwsIHBnZF9jdG9yKTsKIAlpZiAoIXBnZCkKIAkJcmV0dXJuIHBnZDsKIApAQCAtMTQzLDE3ICsxNDMsMTUgQEAKIHZvaWQgcGdkX2ZyZWUocGdkX3QgKnBnZCkKIHsKIAkvKiBpbiB0aGUgbm9uLVBBRSBjYXNlLCBjbGVhcl9wYWdlX3RhYmxlcygpIGNsZWFycyB1c2VyIHBnZCBlbnRyaWVzICovCi0Ja21lbV9jYWNoZV9mcmVlKHBnZF9jYWNoZSwgcGdkKTsKKyAJcXVpY2tsaXN0X2ZyZWUoMCwgcGdkX2R0b3IsIHBnZCk7CiB9CiAKIHZvaWQgX19pbml0IHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKQogewotCXBnZF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJwZ2QiLAotCQkJCSAgICAgIFBUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCksCi0JCQkJICAgICAgUFRSU19QRVJfUEdEICogc2l6ZW9mKHBnZF90KSwKLQkJCQkgICAgICAwLAotCQkJCSAgICAgIHBnZF9jdG9yLAotCQkJCSAgICAgIHBnZF9kdG9yKTsKLQlpZiAoIXBnZF9jYWNoZSkKLQkJcGFuaWMoInBndGFibGVfY2FjaGVfaW5pdCgpOiBDYW5ub3QgY3JlYXRlIHBnZCBjYWNoZSIpOwogfQorCit2b2lkIGNoZWNrX3BndF9jYWNoZSh2b2lkKQoreworCXF1aWNrbGlzdF90cmltKDAsIHBnZF9kdG9yLCAyNSwgMTYpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL0tjb25maWcuZGVidWcgYi9hcmNoL2g4MzAwL0tjb25maWcuZGVidWcKaW5kZXggZTBlOWJjYi4uNTU0ZWZlNiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvaDgzMDAvS2NvbmZpZy5kZWJ1ZwpAQCAtMjEsMTIgKzIxLDEyIEBACiAJYm9vbCAiTWVzc2FnZSBPdXRwdXQgZm9yIEdEQiBNYWdpY1ByaW50IHNlcnZpY2UiCiAJZGVwZW5kcyBvbiAoSDgzMDBIX1NJTSB8fCBIOFNfU0lNKQogCWhlbHAKLQkgIGtlcm5lbCBtZXNzYWdlcyBvdXRwdXQgdXNlaW5nIE1hZ2ljUHJpbnQgc2VydmljZSBmcm9tIEdEQgorCSAga2VybmVsIG1lc3NhZ2VzIG91dHB1dCB1c2luZyBNYWdpY1ByaW50IHNlcnZpY2UgZnJvbSBHREIKIAogY29uZmlnIFNZU0NBTExfUFJJTlQKIAlib29sICJTeXN0ZW1DYWxsIHRyYWNlIHByaW50IgogCWhlbHAKLQkgIG91dG91dCBoaXN0b3J5IG9mIHN5c3RlbWNhbGwKKwkgIG91dHB1dCBoaXN0b3J5IG9mIHN5c3RlbWNhbGwKIAogY29uZmlnIEdEQl9ERUJVRwogICAgCWJvb2wgIlVzZSBnZGIgc3R1YiIKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGI3OGI4MmEuLmZjMzBiNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMzAsNyArMzAsNyBAQAogCURFRklORShUQVNLX1BUUkFDRSwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBwdHJhY2UpKTsKIAlERUZJTkUoVEFTS19CTE9DS0VELCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGJsb2NrZWQpKTsKIAlERUZJTkUoVEFTS19USFJFQUQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkKSk7Ci0JREVGSU5FKFRBU0tfVEhSRUFEX0lORk8sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8pKTsKKwlERUZJTkUoVEFTS19USFJFQURfSU5GTywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpOwogCURFRklORShUQVNLX01NLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIG1tKSk7CiAJREVGSU5FKFRBU0tfQUNUSVZFX01NLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGFjdGl2ZV9tbSkpOwogCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvaDgzMDAva2VybmVsL3B0cmFjZS5jCmluZGV4IGY2MDMxMzcuLjhmMjQxMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3B0cmFjZS5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9zeXNfaDgzMDAuYyBiL2FyY2gvaDgzMDAva2VybmVsL3N5c19oODMwMC5jCmluZGV4IDMwMmEyZGYuLmRlNzY4OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3N5c19oODMwMC5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3N5c19oODMwMC5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAjaW5jbHVkZSA8bGludXgvbXNnLmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CkBAIC0yODksOSArMjg4LDkgQEAKIGludCBrZXJuZWxfZXhlY3ZlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICpjb25zdCBhcmd2W10sIGNoYXIgKmNvbnN0IGVudnBbXSkKIHsKIAlyZWdpc3RlciBsb25nIHJlcyBfX2FzbV9fKCJlcjAiKTsKKwlyZWdpc3RlciBjaGFyICpjb25zdCAqX2MgX19hc21fXygiZXIzIikgPSBlbnZwOworCXJlZ2lzdGVyIGNoYXIgKmNvbnN0ICpfYiBfX2FzbV9fKCJlcjIiKSA9IGFyZ3Y7CiAJcmVnaXN0ZXIgY29uc3QgY2hhciAqIF9hIF9fYXNtX18oImVyMSIpID0gZmlsZW5hbWU7Ci0JcmVnaXN0ZXIgdm9pZCAqX2IgX19hc21fXygiZXIyIikgPSBhcmd2OwotCXJlZ2lzdGVyIHZvaWQgKl9jIF9fYXNtX18oImVyMyIpID0gZW52cDsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdi5sICUxLGVyMFxuXHQiCiAJCQkidHJhcGEJIzBcblx0IgogCQkJOiAiPXIiIChyZXMpCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9oODMwMC9rZXJuZWwvc3lzY2FsbHMuUwppbmRleCBkYWI5OGZkLi41NGUyMWMzIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9zeXNjYWxscy5TCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3N5c2NhbGxzLlMKQEAgLTMxLDcgKzMxLDcgQEAKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfbWtub2QpCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2NobW9kKQkJLyogMTUgKi8KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfY2hvd24xNikKLQkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJCQkJLyogb2xkIGJyZWFrIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIG9sZCBicmVhayBzeXNjYWxsIGhvbGRlciAqLwogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19zdGF0KQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19sc2VlaykKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfZ2V0cGlkKQkJLyogMjAgKi8KQEAgLTQ1LDExICs0NSwxMSBAQAogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19mc3RhdCkKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfcGF1c2UpCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3V0aW1lKQkJLyogMzAgKi8KLQkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJCQkJLyogb2xkIHN0dHkgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJCQkJLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJLyogb2xkIHN0dHkgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfYWNjZXNzKQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaWNlKQotCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQkvKiAzNSAqLwkJLyogb2xkIGZ0aW1lIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIDM1IG9sZCBmdGltZSBzeXNjYWxsIGhvbGRlciAqLwogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19zeW5jKQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19raWxsKQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19yZW5hbWUpCkBAIC01OCw3ICs1OCw3IEBACiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2R1cCkKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfcGlwZSkKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfdGltZXMpCi0JLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCQkJCS8qIG9sZCBwcm9mIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIG9sZCBwcm9mIHN5c2NhbGwgaG9sZGVyICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2JyaykJCS8qIDQ1ICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3NldGdpZDE2KQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19nZXRnaWQxNikKQEAgLTY2LDEzICs2NiwxMyBAQAogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19nZXRldWlkMTYpCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2dldGVnaWQxNikJLyogNTAgKi8KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfYWNjdCkKLQkubG9uZyBTWU1CT0xfTkFNRShzeXNfdW1vdW50KQkJCQkJLyogcmVjeWNsZWQgbmV2ZXIgdXNlZCBwaHlzKCkgKi8KLQkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJCQkJLyogb2xkIGxvY2sgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfdW1vdW50KQkJLyogcmVjeWNsZWQgbmV2ZXIgdXNlZCBwaHlzKCkgKi8KKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJLyogb2xkIGxvY2sgc3lzY2FsbCBob2xkZXIgKi8KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfaW9jdGwpCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2ZjbnRsKQkJLyogNTUgKi8KLQkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJCQkJLyogb2xkIG1weCBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQkvKiBvbGQgbXB4IHN5c2NhbGwgaG9sZGVyICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3NldHBnaWQpCi0JLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCQkJCS8qIG9sZCB1bGltaXQgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJLyogb2xkIHVsaW1pdCBzeXNjYWxsIGhvbGRlciAqLwogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c191bWFzaykJCS8qIDYwICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2Nocm9vdCkKQEAgLTExMiw3ICsxMTIsNyBAQAogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19mY2hvd24xNikJCS8qIDk1ICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2dldHByaW9yaXR5KQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19zZXRwcmlvcml0eSkKLQkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJCQkJLyogb2xkIHByb2ZpbCBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQkvKiBvbGQgcHJvZmlsIHN5c2NhbGwgaG9sZGVyICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3N0YXRmcykKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfZnN0YXRmcykJCS8qIDEwMCAqLwogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQkvKiBpb3Blcm0gZm9yIGkzODYgKi8KQEAgLTIwMiw4ICsyMDIsOCBAQAogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19jYXBzZXQpICAgICAgICAgICAvKiAxODUgKi8KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfc2lnYWx0c3RhY2spCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3NlbmRmaWxlKQotCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQkJLyogc3RyZWFtczEgKi8KLQkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJCS8qIHN0cmVhbXMyICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIHN0cmVhbXMxICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIHN0cmVhbXMyICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3Zmb3JrKSAgICAgICAgICAgIC8qIDE5MCAqLwogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19nZXRybGltaXQpCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX21tYXAyKQpAQCAtMjM2LDEwICsyMzYsMTAgQEAKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfZ2V0ZGVudHM2NCkJLyogMjIwICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2ZjbnRsNjQpCi0JLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIHJlc2VydmVkIGZvciBUVVggKi8KLQkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkKKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJLyogcmVzZXJ2ZWQgVFVYICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIHJlc2VydmVkIFNlY3VyaXR5ICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2dldHRpZCkKLQkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJLyogMjI1ICovIC8qIHN5c19yZWFkYWhlYWQgKi8KKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfcmVhZGFoZWFkKQkvKiAyMjUgKi8KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfc2V0eGF0dHIpCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2xzZXR4YXR0cikKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfZnNldHhhdHRyKQpAQCAtMjU3LDggKzI1Nyw4IEBACiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2Z1dGV4KQkJLyogMjQwICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3NjaGVkX3NldGFmZmluaXR5KQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19zY2hlZF9nZXRhZmZpbml0eSkKLQkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJLyogc3lzX3NldF90aHJlYWRfYXJlYSAqLwotCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQkvKiBzeXNfZ2V0X3RocmVhZF9hcmVhICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2lvX3NldHVwKQkJLyogMjQ1ICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2lvX2Rlc3Ryb3kpCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2lvX2dldGV2ZW50cykKQEAgLTI4OCw4ICsyODgsOCBAQAogCS5sb25nIFNZTUJPTF9OQU1FKHN5c191dGltZXMpCiAgCS5sb25nIFNZTUJPTF9OQU1FKHN5c19mYWR2aXNlNjRfNjQpCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIHN5c192c2VydmVyICovCi0JLmxvbmcgU1lNQk9MX05BTUUoc3lzX21iaW5kKQotCS5sb25nIFNZTUJPTF9OQU1FKHN5c19nZXRfbWVtcG9saWN5KQorCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQorCS5sb25nIFNZTUJPTF9OQU1FKHN5c19nZXRfbWVtcG9saWN5KQkvKiAyNzUgKi8KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfc2V0X21lbXBvbGljeSkKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfbXFfb3BlbikKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfbXFfdW5saW5rKQpAQCAtMjk3LDE2ICsyOTcsNDIgQEAKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfbXFfdGltZWRyZWNlaXZlKQkvKiAyODAgKi8KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfbXFfbm90aWZ5KQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19tcV9nZXRzZXRhdHRyKQotCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQkvKiByZXNlcnZlZCBmb3Iga2V4ZWMgKi8KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfd2FpdGlkKQotCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQkvKiAyODUgKi8gLyogYXZhaWxhYmxlICovCi0JLmxvbmcgU1lNQk9MX05BTUUoc3lzX2FkZF9rZXkpCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIHN5c19rZXhlY19sb2FkICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2FkZF9rZXkpIAkJLyogMjg1ICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3JlcXVlc3Rfa2V5KQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19rZXljdGwpCi0KLQkucmVwdCBOUl9zeXNjYWxscy0oLi1TWU1CT0xfTkFNRShzeXNfY2FsbF90YWJsZSkpLzQKLQkJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCi0JLmVuZHIKKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfaW9wcmlvX3NldCkKKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfaW9wcmlvX2dldCkJLyogMjkwICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2lub3RpZnlfaW5pdCkKKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfaW5vdGlmeV9hZGRfd2F0Y2gpCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2lub3RpZnlfcm1fd2F0Y2gpCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX21pZ3JhdGVfcGFnZXMpCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX29wZW5hdCkJCS8qIDI5NSAqLworCS5sb25nIFNZTUJPTF9OQU1FKHN5c19ta2RpcmF0KQorCS5sb25nIFNZTUJPTF9OQU1FKHN5c19ta25vZGF0KQorCS5sb25nIFNZTUJPTF9OQU1FKHN5c19mY2hvd25hdCkKKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfZnV0aW1lc2F0KQorCS5sb25nIFNZTUJPTF9OQU1FKHN5c19mc3RhdGF0NjQpCS8qIDMwMCAqLworCS5sb25nIFNZTUJPTF9OQU1FKHN5c191bmxpbmthdCkKKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfcmVuYW1lYXQpCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2xpbmthdCkKKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfc3ltbGlua2F0KQorCS5sb25nIFNZTUJPTF9OQU1FKHN5c19yZWFkbGlua2F0KQkvKiAzMDUgKi8KKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfZmNobW9kYXQpCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2ZhY2Nlc3NhdCkKKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJLyogc3lzX3BzZWxlY3Q2ICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIHN5c19wcG9sbCAqLworCS5sb25nIFNZTUJPTF9OQU1FKHN5c191bnNoYXJlKQkJLyogMzEwICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3NldF9yb2J1c3RfbGlzdCkKKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfZ2V0X3JvYnVzdF9saXN0KQorCS5sb25nIFNZTUJPTF9OQU1FKHN5c19zcGxpY2UpCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3N5bmNfZmlsZV9yYW5nZSkKKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfdGVlKQkJLyogMzE1ICovCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3Ztc3BsaWNlKQorCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQkvKiBzeXNfbW92ZV9wYWdlcyAqLworCS5sb25nIFNZTUJPTF9OQU1FKHN5c19nZXRjcHUpCisJLmxvbmcgU1lNQk9MX05BTUUoc3lzX25pX3N5c2NhbGwpCS8qIHN5c19lcG9sbF9wd2FpdCAqLwogCiAJLm1hY3JvCWNhbGxfc3AgYWRkcgogCW1vdi5sCSNTWU1CT0xfTkFNRShcYWRkciksZXI2CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdHJhcHMuYwppbmRleCAzMDBlMzI3Li5mOTcxODMwIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RyYXBzLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXByaW50aygiXG5DYWxsIFRyYWNlOiIpOwogCWkgPSAwOwogCXN0YWNrID0gZXNwOwotCXdoaWxlICgoKHVuc2lnbmVkIGxvbmcpc3RhY2sgJiAoVEhSRUFEX1NJWkUgLSAxKSkgPT0gMCkgeworCXdoaWxlICgoKHVuc2lnbmVkIGxvbmcpc3RhY2sgJiAoVEhSRUFEX1NJWkUgLSAxKSkgIT0gMCkgewogCQlhZGRyID0gKnN0YWNrKys7CiAJCS8qCiAJCSAqIElmIHRoZSBhZGRyZXNzIGlzIGVpdGhlciBpbiB0aGUgdGV4dCBzZWdtZW50IG9mIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvaDgzMDAva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNjVmMWNkYy4uYTJlNzJkNCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC03NSw3ICs3NSw3IEBACiAJKiguaW50X3JlZGlyZWN0KQogI2VuZGlmCiAJX19zdGV4dCA9IC4gOwotICAgICAgICAJKigudGV4dCkKKwlURVhUX1RFWFQKIAlTQ0hFRF9URVhUCiAJTE9DS19URVhUCiAJX19ldGV4dCA9IC4gOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJLiA9IEFMSUdOKDB4MjAwMCkgOwogCQkqKC5kYXRhLmluaXRfdGFzaykKIAkuID0gQUxJR04oMHg0KSA7Ci0JCSooLmRhdGEpCisJCURBVEFfREFUQQogCS4gPSBBTElHTigweDQpIDsKIAkJKiguZGF0YS4qKQkKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcgYi9hcmNoL2kzODYvS2NvbmZpZwppbmRleCA2NGFkMTBmLi44NzcwYTVkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvS2NvbmZpZworKysgYi9hcmNoL2kzODYvS2NvbmZpZwpAQCAtNTUsNiArNTUsMTAgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBRVUlDS0xJU1QKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBTQlVTCiAJYm9vbAogCkBAIC03OSwxMCArODMsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEFSQ0hfVVNFU19TTEFCX1BBR0VfU1RSVUNUCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgRE1JCiAJYm9vbAogCWRlZmF1bHQgeQpAQCAtODU4LDkgKzg1OCw5IEBACiAJYm9vbCAiQnVpbGQgYSByZWxvY2F0YWJsZSBrZXJuZWwoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWhlbHAKLQkgIFRoaXMgYnVpbGQgYSBrZXJuZWwgaW1hZ2UgdGhhdCByZXRhaW5zIHJlbG9jYXRpb24gaW5mb3JtYXRpb24KKwkgIFRoaXMgYnVpbGRzIGEga2VybmVsIGltYWdlIHRoYXQgcmV0YWlucyByZWxvY2F0aW9uIGluZm9ybWF0aW9uCiAgICAgICAgICAgc28gaXQgY2FuIGJlIGxvYWRlZCBzb21lcGxhY2UgYmVzaWRlcyB0aGUgZGVmYXVsdCAxTUIuCi0JICBUaGUgcmVsb2NhdGlvbnMgdGVuZCB0byB0aGUga2VybmVsIGJpbmFyeSBhYm91dCAxMCUgbGFyZ2VyLAorCSAgVGhlIHJlbG9jYXRpb25zIHRlbmQgdG8gbWFrZSB0aGUga2VybmVsIGJpbmFyeSBhYm91dCAxMCUgbGFyZ2VyLAogICAgICAgICAgIGJ1dCBhcmUgZGlzY2FyZGVkIGF0IHJ1bnRpbWUuCiAKIAkgIE9uZSB1c2UgaXMgZm9yIHRoZSBrZXhlYyBvbiBwYW5pYyBjYXNlIHdoZXJlIHRoZSByZWNvdmVyeSBrZXJuZWwKQEAgLTg5MSw3ICs4OTEsNyBAQAogCSAgRG9uJ3QgY2hhbmdlIHRoaXMgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KIAogY29uZmlnIEhPVFBMVUdfQ1BVCi0JYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIlN1cHBvcnQgZm9yIHN1c3BlbmQgb24gU01QIGFuZCBob3QtcGx1Z2dhYmxlIENQVXMgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBTTVAgJiYgSE9UUExVRyAmJiBFWFBFUklNRU5UQUwgJiYgIVg4Nl9WT1lBR0VSCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSB0byBleHBlcmltZW50IHdpdGggdHVybmluZyBDUFVzIG9mZiBhbmQgb24sIGFuZCB0bwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcuY3B1IGIvYXJjaC9pMzg2L0tjb25maWcuY3B1CmluZGV4IGRjZTYxMjQuLmQ3ZjZmYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL2kzODYvS2NvbmZpZy5jcHUKQEAgLTEwOCw3ICsxMDgsNyBAQAogCWJvb2wgIkNvcmUgMi9uZXdlciBYZW9uIgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIGZvciBJbnRlbCBDb3JlIDIgYW5kIG5ld2VyIENvcmUgMiBYZW9ucyAoWGVvbiA1MXh4IGFuZCA1M3h4KQotCSAgQ1BVcy4gWW91IGNhbiBkaXN0aW5ndXNoIG5ld2VyIGZyb20gb2xkZXIgWGVvbnMgYnkgdGhlIENQVSBmYW1pbHkKKwkgIENQVXMuIFlvdSBjYW4gZGlzdGluZ3Vpc2ggbmV3ZXIgZnJvbSBvbGRlciBYZW9ucyBieSB0aGUgQ1BVIGZhbWlseQogCSAgaW4gL3Byb2MvY3B1aW5mby4gTmV3ZXIgb25lcyBoYXZlIDYuCiAKIGNvbmZpZyBNUEVOVElVTTQKQEAgLTE3Miw3ICsxNzIsNyBAQAogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIGZvciBhbiBJRFQgV2luY2hpcC0yQSBvciAzLiAgTGludXggYW5kIEdDQwogCSAgdHJlYXQgdGhpcyBjaGlwIGFzIGEgNTg2VFNDIHdpdGggc29tZSBleHRlbmRlZCBpbnN0cnVjdGlvbnMKLQkgIGFuZCBhbGlnbm1lbnQgcmVxaXJlbWVudHMuICBBbHNvIGVuYWJsZSBvdXQgb2Ygb3JkZXIgbWVtb3J5CisJICBhbmQgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gIEFsc28gZW5hYmxlIG91dCBvZiBvcmRlciBtZW1vcnkKIAkgIHN0b3JlcyBmb3IgdGhpcyBDUFUsIHdoaWNoIGNhbiBpbmNyZWFzZSBwZXJmb3JtYW5jZSBvZiBzb21lCiAJICBvcGVyYXRpb25zLgogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvTWFrZWZpbGUgYi9hcmNoL2kzODYvTWFrZWZpbGUKaW5kZXggNmRjNWU1ZC4uYmQyOGY5ZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L01ha2VmaWxlCisrKyBiL2FyY2gvaTM4Ni9NYWtlZmlsZQpAQCAtMzQsNyArMzQsNyBAQAogQ0ZMQUdTICs9IC1waXBlIC1tc29mdC1mbG9hdCAtbXJlZ3Bhcm09MyAtZnJlZy1zdHJ1Y3QtcmV0dXJuCiAKICMgcHJldmVudCBnY2MgZnJvbSBrZWVwaW5nIHRoZSBzdGFjayAxNiBieXRlIGFsaWduZWQKLUNGTEFHUyArPSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00CitDRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT0yKQogCiAjIENQVS1zcGVjaWZpYyB0dW5pbmcuIEFueXRoaW5nIHdoaWNoIGNhbiBiZSBzaGFyZWQgd2l0aCBVTUwgc2hvdWxkIGdvIGhlcmUuCiBpbmNsdWRlICQoc3JjdHJlZSkvYXJjaC9pMzg2L01ha2VmaWxlLmNwdQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2Jvb3Qvc2V0dXAuUyBiL2FyY2gvaTM4Ni9ib290L3NldHVwLlMKaW5kZXggZjhiM2I5Yy4uNmRiY2M5NSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2Jvb3Qvc2V0dXAuUworKysgYi9hcmNoL2kzODYvYm9vdC9zZXR1cC5TCkBAIC0zMTAsNiArMzEwLDggQEAKIAljYWxsIHZlcmlmeV9jcHUKIAl0ZXN0bCAgJWVheCwlZWF4CiAJanoJY3B1X29rCisJbW92dwklY3MsJWF4CQkjIGFrYSBTRVRVUFNFRworCW1vdncJJWF4LCVkcwogCWxlYQljcHVfcGFuaWNfbWVzcywlc2kKIAljYWxsCXBydHN0cgogMToJam1wCTFiCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvZGVmY29uZmlnIGIvYXJjaC9pMzg2L2RlZmNvbmZpZwppbmRleCA5ZGE4NDQxLi4xYTNhMjIxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvZGVmY29uZmlnCisrKyBiL2FyY2gvaTM4Ni9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjEtZ2l0MwotIyBUdWUgTWF5ICAxIDA3OjMwOjUxIDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi1yYzIKKyMgTW9uIE1heSAyMSAxMzoyMzo0NCAyMDA3CiAjCiBDT05GSUdfWDg2XzMyPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX1g4Nj15CiBDT05GSUdfTU1VPXkKIENPTkZJR19aT05FX0RNQT15CitDT05GSUdfUVVJQ0tMSVNUPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQogQ09ORklHX0dFTkVSSUNfSU9NQVA9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKQEAgLTQ1LDYgKzQ2LDcgQEAKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xOAogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC02NCwxNCArNjYsMTkgQEAKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xNjUsNyArMTcyLDcgQEAKIENPTkZJR19YODZfVVNFX1BQUk9fQ0hFQ0tTVU09eQogQ09ORklHX1g4Nl9UU0M9eQogQ09ORklHX1g4Nl9DTU9WPXkKLUNPTkZJR19YODZfTUlOSU1VTV9DUFVfTU9ERUw9NAorQ09ORklHX1g4Nl9NSU5JTVVNX0NQVV9GQU1JTFk9NAogQ09ORklHX0hQRVRfVElNRVI9eQogQ09ORklHX0hQRVRfRU1VTEFURV9SVEM9eQogQ09ORklHX05SX0NQVVM9MzIKQEAgLTIxMSw2ICsyMTgsNyBAQAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX05SX1FVSUNLPTEKICMgQ09ORklHX0hJR0hQVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogQ09ORklHX01UUlI9eQpAQCAtMjM3LDcgKzI0NSw3IEBACiBDT05GSUdfUE09eQogQ09ORklHX1BNX0xFR0FDWT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRD15CisjIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKIAogIwogIyBBQ1BJIChBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UpIFN1cHBvcnQKQEAgLTI3Nyw3ICsyODUsNyBAQAogIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKLUNPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAogCiAjCiAjIENQVUZyZXEgcHJvY2Vzc29yIGRyaXZlcnMKQEAgLTMxNSw5ICszMjMsMTAgQEAKIENPTkZJR19QQ0lfRElSRUNUPXkKIENPTkZJR19QQ0lfTU1DT05GSUc9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKIENPTkZJR19QQ0lfTVNJPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVF9JUlEgaXMgbm90IHNldAorQ09ORklHX0hUX0lSUT15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogIyBDT05GSUdfSVNBIGlzIG5vdCBzZXQKICMgQ09ORklHX01DQSBpcyBub3Qgc2V0CkBAIC0zMjgsMTAgKzMzNyw2IEBACiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKICMKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIwogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCiAjCkBAIC0zNzcsNyArMzgyLDcgQEAKIENPTkZJR19JTkVUX1RVTk5FTD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTM5Niw3ICs0MDEsNyBAQAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTQ1MCw3ICs0NTUsOSBAQAogIwogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC01MTMsMTQgKzUyMCwxMiBAQAogIyBNaXNjIGRldmljZXMKICMKICMgQ09ORklHX0lCTV9BU00gaXMgbm90IHNldAorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfU09OWV9MQVBUT1AgaXMgbm90IHNldAogIyBDT05GSUdfVEhJTktQQURfQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQkxJTksgaXMgbm90IHNldAogQ09ORklHX0lERT15CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCkBAIC01MzcsNiArNTQyLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJPXkKICMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwpAQCAtNTQ2LDYgKzU1Miw3IEBACiAjIENPTkZJR19CTEtfREVWX0lERVBOUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQogIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15CiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldApAQCAtNjAwLDkgKzYwNyw4IEBACiBDT05GSUdfQkxLX0RFVl9TRD15CiAjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TUj15Ci0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAogCiAjCkBAIC02MTIsNiArNjE4LDcgQEAKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KIAogIwogIyBTQ1NJIFRyYW5zcG9ydHMKQEAgLTY0MCw3ICs2NDcsNiBAQAogQ09ORklHX1NDU0lfQUlDNzlYWD15CiBDT05GSUdfQUlDNzlYWF9DTURTX1BFUl9ERVZJQ0U9MzIKIENPTkZJR19BSUM3OVhYX1JFU0VUX0RFTEFZX01TPTQwMDAKLSMgQ09ORklHX0FJQzc5WFhfRU5BQkxFX1JEX1NUUk0gaXMgbm90IHNldAogIyBDT05GSUdfQUlDNzlYWF9ERUJVR19FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX0FJQzc5WFhfREVCVUdfTUFTSz0wCiAjIENPTkZJR19BSUM3OVhYX1JFR19QUkVUVFlfUFJJTlQgaXMgbm90IHNldApAQCAtNjYyLDcgKzY2OCw2IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CkBAIC02NzMsNzkgKzY3OCwxMiBAQAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0VTUF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKLUNPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX0FIQ0k9eQotQ09ORklHX1NBVEFfU1ZXPXkKLUNPTkZJR19BVEFfUElJWD15Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX05WPXkKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX1NJTD15Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX1ZJQT15Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci1DT05GSUdfU0FUQV9BQ1BJPXkKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQogIwotQ09ORklHX01EPXkKLSMgQ09ORklHX0JMS19ERVZfTUQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfRE09eQotIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRE1fQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfRE1fTUlSUk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKIAogIwogIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CkBAIC03NjAsNiArNjk4LDcgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogQ09ORklHX0lFRUUxMzk0PXkKIAogIwpAQCAtNzkwLDExICs3MjksNyBAQAogIyBJMk8gZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTgxMCwxMCArNzQ1LDYgQEAKICMgQVJDbmV0IGRldmljZXMKICMKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogCiAjCkBAIC04MjQsOSArNzU1LDcgQEAKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1ZFTkRPUl8zQ09NPXkKLUNPTkZJR19WT1JURVg9eQotIyBDT05GSUdfVFlQSE9PTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC04NjcsMTAgKzc5Niw3IEBACiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIworQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15CkBAIC04OTAsMTYgKzgxNiwxNCBAQAogQ09ORklHX0JOWDI9eQogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKK0NPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC05MTMsOCArODM3LDE0IEBACiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIAogIwotIyBXYW4gaW50ZXJmYWNlcworIyBVU0IgTmV0d29yayBBZGFwdGVycwogIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKQEAgLTk2Nyw5ICs4OTcsMTcgQEAKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTEwMTksMTAgKzk1Nyw2IEBACiAjIElQTUkKICMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQogQ09ORklHX0hXX1JBTkRPTV9JTlRFTD15CkBAIC0xMDMxLDcgKzk2NSw2IEBACiBDT05GSUdfSFdfUkFORE9NX1ZJQT15CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDPXkKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfU09OWVBJIGlzIG5vdCBzZXQKQEAgLTEwNTYsMTcgKzk4OSwxNCBAQAogQ09ORklHX0hQRVQ9eQogIyBDT05GSUdfSFBFVF9SVENfSVJRIGlzIG5vdCBzZXQKIENPTkZJR19IUEVUX01NQVA9eQotIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19IQU5HQ0hFQ0tfVElNRVI9eQogCiAjCiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIworQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA3OSwxMiArMTAwOSw3IEBACiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtMTA5NSwxNyArMTAyMCwyMCBAQAogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQogIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAogCiAjCkBAIC0xMTE0LDcgKzEwNDIsNyBAQAogQ09ORklHX1ZHQV9DT05TT0xFPXkKIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLPXkKIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLX1NJWkU9MTI4Ci1DT05GSUdfVklERU9fU0VMRUNUPXkKKyMgQ09ORklHX1ZJREVPX1NFTEVDVCBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiAKICMKQEAgLTExMzEsMTQgKzEwNTksMTAgQEAKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKIENPTkZJR19TT1VORF9QUklNRT15Ci1DT05GSUdfT0JTT0xFVEVfT1NTPXkKLSMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0VTMTM3MSBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfSUNIPXkKKyMgQ09ORklHX09TU19PQlNPTEVURSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX09TUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMTcsMzcgKzExNDEsMTAgQEAKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dUQ08gaXMgbm90IHNldAotCi0jCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIAogIwpAQCAtMTI5MSwxMCArMTE4OCw2IEBACiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMzOSwxMCArMTIzMiw2IEBACiAjCiAKICMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCiAjIFZpcnR1YWxpemF0aW9uCiAjCiAjIENPTkZJR19LVk0gaXMgbm90IHNldApAQCAtMTM4Myw3ICsxMjcyLDYgQEAKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz15CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtMTQxMSw3ICsxMjk5LDcgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQpAQCAtMTQ1Myw2ICsxMzQxLDcgQEAKIENPTkZJR19FWFBPUlRGUz15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTE1MjksMTcgKzE0MTgsMTYgQEAKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xOAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotQ09ORklHX1RJTUVSX1NUQVRTPXkKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTU1Niw2ICsxNDQ0LDcgQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CkBAIC0xNTg2LDEyICsxNDc1LDE0IEBACiBDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNGY5ODUxNi4uMDZkYTU5ZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBACiBvYmotJChDT05GSUdfTUlDUk9DT0RFKQkJKz0gbWljcm9jb2RlLm8KIG9iai0kKENPTkZJR19BUE0pCQkrPSBhcG0ubwogb2JqLSQoQ09ORklHX1g4Nl9TTVApCQkrPSBzbXAubyBzbXBib290Lm8gdHNjX3N5bmMubworb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcGNvbW1vbi5vCiBvYmotJChDT05GSUdfWDg2X1RSQU1QT0xJTkUpCSs9IHRyYW1wb2xpbmUubwogb2JqLSQoQ09ORklHX1g4Nl9NUFBBUlNFKQkrPSBtcHBhcnNlLm8KIG9iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpYy5vIG5taS5vCkBAIC0zNCw2ICszNSw3IEBACiBvYmotJChDT05GSUdfQUNQSV9TUkFUKSAJKz0gc3JhdC5vCiBvYmotJChDT05GSUdfRUZJKSAJCSs9IGVmaS5vIGVmaV9zdHViLm8KIG9iai0kKENPTkZJR19ET1VCTEVGQVVMVCkgCSs9IGRvdWJsZWZhdWx0Lm8KK29iai0kKENPTkZJR19TRVJJQUxfODI1MCkJKz0gbGVnYWN5X3NlcmlhbC5vCiBvYmotJChDT05GSUdfVk04NikJCSs9IHZtODYubwogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gZWFybHlfcHJpbnRrLm8KIG9iai0kKENPTkZJR19IUEVUX1RJTUVSKSAJKz0gaHBldC5vCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2FwaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jCmluZGV4IGFjYTA1NGMuLjY3ODI0ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMgYi9hcmNoL2kzODYva2VybmVsL2FwbS5jCmluZGV4IDM2N2ZmMWQuLjQxMTJhZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYwpAQCAtMjIzLDcgKzIyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpAQCAtMTE3Myw3ICsxMTcyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjUzX2xvY2ssIGZsYWdzKTsKLQkvKiBzZXQgdGhlIGNsb2NrIHRvIDEwMCBIeiAqLworCS8qIHNldCB0aGUgY2xvY2sgdG8gSFogKi8KIAlvdXRiX3AoMHgzNCwgUElUX01PREUpOwkJLyogYmluYXJ5LCBtb2RlIDIsIExTQi9NU0IsIGNoIDAgKi8KIAl1ZGVsYXkoMTApOwogCW91dGJfcChMQVRDSCAmIDB4ZmYsIFBJVF9DSDApOwkvKiBMU0IgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKaW5kZXggNGZlYzcwMi4uNmY0N2VlZSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTI4MCw2ICsyODAsMTAgQEAKIAogCWlmIChjLT54ODYgPT0gMHgxMCAmJiAhZm9yY2VfbXdhaXQpCiAJCWNsZWFyX2JpdChYODZfRkVBVFVSRV9NV0FJVCwgYy0+eDg2X2NhcGFiaWxpdHkpOworCisJLyogSzZzIHJlcG9ydHMgTUNFcyBidXQgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhbGwgdGhlIE1TUnMgKi8KKwlpZiAoYy0+eDg2IDwgNikKKwkJY2xlYXJfYml0KFg4Nl9GRUFUVVJFX01DRSwgYy0+eDg2X2NhcGFiaWxpdHkpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1aW5pdCBhbWRfc2l6ZV9jYWNoZShzdHJ1Y3QgY3B1aW5mb194ODYgKiBjLCB1bnNpZ25lZCBpbnQgc2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYwppbmRleCA4MzdiMDQxLi5jYTNlMWQzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCkBAIC0zNDEsMTUgKzM0MSwxNyBAQAogCXBjLnZhbCA9ICh1bnNpZ25lZCBsb25nKSBhY3BpX3Byb2Nlc3Nvcl9wZXJmLT5zdGF0ZXNbMF0uY29udHJvbDsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX3NjYWxlczsgaSsrKSB7CiAJCXU4IGZpZCwgdmlkOwotCQl1bnNpZ25lZCBpbnQgc3BlZWQ7CisJCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9weCAqc3RhdGUgPQorCQkJJmFjcGlfcHJvY2Vzc29yX3BlcmYtPnN0YXRlc1tpXTsKKwkJdW5zaWduZWQgaW50IHNwZWVkLCBzcGVlZF9taHo7CiAKLQkJcGMudmFsID0gKHVuc2lnbmVkIGxvbmcpIGFjcGlfcHJvY2Vzc29yX3BlcmYtPnN0YXRlc1tpXS5jb250cm9sOworCQlwYy52YWwgPSAodW5zaWduZWQgbG9uZykgc3RhdGUtPmNvbnRyb2w7CiAJCWRwcmludGsgKCJhY3BpOiAgUCVkOiAlZCBNSHogJWQgbVcgJWQgdVMgY29udHJvbCAlMDh4IFNHVEMgJWRcbiIsCiAJCQkgaSwKLQkJCSAodTMyKSBhY3BpX3Byb2Nlc3Nvcl9wZXJmLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3ksCi0JCQkgKHUzMikgYWNwaV9wcm9jZXNzb3JfcGVyZi0+c3RhdGVzW2ldLnBvd2VyLAotCQkJICh1MzIpIGFjcGlfcHJvY2Vzc29yX3BlcmYtPnN0YXRlc1tpXS50cmFuc2l0aW9uX2xhdGVuY3ksCi0JCQkgKHUzMikgYWNwaV9wcm9jZXNzb3JfcGVyZi0+c3RhdGVzW2ldLmNvbnRyb2wsCisJCQkgKHUzMikgc3RhdGUtPmNvcmVfZnJlcXVlbmN5LAorCQkJICh1MzIpIHN0YXRlLT5wb3dlciwKKwkJCSAodTMyKSBzdGF0ZS0+dHJhbnNpdGlvbl9sYXRlbmN5LAorCQkJICh1MzIpIHN0YXRlLT5jb250cm9sLAogCQkJIHBjLmJpdHMuc2d0Yyk7CiAKIAkJdmlkID0gcGMuYml0cy52aWQ7CkBAIC0zNjAsNiArMzYyLDE4IEBACiAJCXBvd2Vybm93X3RhYmxlW2ldLmluZGV4IHw9ICh2aWQgPDwgOCk7IC8qIHVwcGVyIDggYml0cyAqLwogCiAJCXNwZWVkID0gcG93ZXJub3dfdGFibGVbaV0uZnJlcXVlbmN5OworCQlzcGVlZF9taHogPSBzcGVlZCAvIDEwMDA7CisKKwkJLyogcHJvY2Vzc29yX3BlcmZsaWIgd2lsbCBtdWx0aXBseSB0aGUgTUh6IHZhbHVlIGJ5IDEwMDAgdG8KKwkJICogZ2V0IGEgS0h6IHZhbHVlIChlLmcuIDEyNjYwMDApLiBIb3dldmVyLCBwb3dlcm5vdy1rNyB3b3JrcworCQkgKiB3aXRoIHRydWUgS0h6IHZhbHVlcyAoZS5nLiAxMjY2NzY4KS4gVG8gZW5zdXJlIHRoYXQgYWxsCisJCSAqIHBvd2Vybm93IGZyZXF1ZW5jaWVzIGFyZSBhdmFpbGFibGUsIHdlIG11c3QgZW5zdXJlIHRoYXQKKwkJICogQUNQSSBkb2Vzbid0IHJlc3RyaWN0IHRoZW0sIHNvIHdlIHJvdW5kIHVwIHRoZSBNSHogdmFsdWUKKwkJICogdG8gZW5zdXJlIHRoYXQgcGVyZmxpYidzIGNvbXB1dGVkIEtIeiB2YWx1ZSBpcyBncmVhdGVyIHRoYW4KKwkJICogb3IgZXF1YWwgdG8gcG93ZXJub3cncyBLSHogdmFsdWUuCisJCSAqLworCQlpZiAoc3BlZWQgJSAxMDAwID4gMCkKKwkJCXNwZWVkX21oeisrOwogCiAJCWlmICgoZmlkX2NvZGVzW2ZpZF0gJSAxMCk9PTUpIHsKIAkJCWlmIChoYXZlX2EwID09IDEpCkBAIC0zNjgsMTAgKzM4MiwxNiBAQAogCiAJCWRwcmludGsgKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgogCQkJICJWSUQ6IDB4JXggKCVkLiUwM2RWKVxuIiwgZmlkLCBmaWRfY29kZXNbZmlkXSAvIDEwLAotCQkJIGZpZF9jb2Rlc1tmaWRdICUgMTAsIHNwZWVkLzEwMDAsIHZpZCwKKwkJCSBmaWRfY29kZXNbZmlkXSAlIDEwLCBzcGVlZF9taHosIHZpZCwKIAkJCSBtb2JpbGVfdmlkX3RhYmxlW3ZpZF0vMTAwMCwKIAkJCSBtb2JpbGVfdmlkX3RhYmxlW3ZpZF0lMTAwMCk7CiAKKwkJaWYgKHN0YXRlLT5jb3JlX2ZyZXF1ZW5jeSAhPSBzcGVlZF9taHopIHsKKwkJCXN0YXRlLT5jb3JlX2ZyZXF1ZW5jeSA9IHNwZWVkX21oejsKKwkJCWRwcmludGsoIiAgIENvcnJlY3RlZCBBQ1BJIGZyZXF1ZW5jeSB0byAlZFxuIiwKKwkJCQlzcGVlZF9taHopOworCQl9CisKIAkJaWYgKGxhdGVuY3kgPCBwYy5iaXRzLnNndGMpCiAJCQlsYXRlbmN5ID0gcGMuYml0cy5zZ3RjOwogCkBAIC02MDIsNyArNjIyLDcgQEAKIAkJCXJlc3VsdCA9IHBvd2Vybm93X2FjcGlfaW5pdCgpOwogCQkJaWYgKHJlc3VsdCkgewogCQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiQUNQSSBhbmQgbGVnYWN5IG1ldGhvZHMgZmFpbGVkXG4iKTsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlNlZSBodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrL3Byb2plY3RzL2NwdWZyZXEvcG93ZXJub3ctazcuc2h0bWxcbiIpOworCQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiU2VlIGh0dHA6Ly93d3cuY29kZW1vbmtleS5vcmcudWsvcHJvamVjdHMvY3B1ZnJlcS9wb3dlcm5vdy1rNy5odG1sXG4iKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIFNHVEMgdXNlIHRoZSBidXMgY2xvY2sgYXMgdGltZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCA3Y2YzZDIwLi40YWRlNTVjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC01MjEsNyArNTIxLDcgQEAKIAogCWlmICgoZWF4ICYgQ1BVSURfWEZBTSkgPT0gQ1BVSURfWEZBTV9LOCkgewogCQlpZiAoKChlYXggJiBDUFVJRF9VU0VfWEZBTV9YTU9EKSAhPSBDUFVJRF9VU0VfWEZBTV9YTU9EKSB8fAotCQkgICAgKChlYXggJiBDUFVJRF9YTU9EKSA+IENQVUlEX1hNT0RfUkVWX0cpKSB7CisJCSAgICAoKGVheCAmIENQVUlEX1hNT0QpID4gQ1BVSURfWE1PRF9SRVZfTUFTSykpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gUEZYICJQcm9jZXNzb3IgY3B1aWQgJXggbm90IHN1cHBvcnRlZFxuIiwgZWF4KTsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmggYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKaW5kZXggOTViZTUwMS4uYjA2YzgxMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaApAQCAtNDYsOCArNDYsOCBAQAogI2RlZmluZSBDUFVJRF9YRkFNCQkJMHgwZmYwMDAwMAkvKiBleHRlbmRlZCBmYW1pbHkgKi8KICNkZWZpbmUgQ1BVSURfWEZBTV9LOAkJCTAKICNkZWZpbmUgQ1BVSURfWE1PRAkJCTB4MDAwZjAwMDAJLyogZXh0ZW5kZWQgbW9kZWwgKi8KLSNkZWZpbmUgQ1BVSURfWE1PRF9SRVZfRwkJMHgwMDA2MDAwMAotI2RlZmluZSBDUFVJRF9YRkFNXzEwSCAJCQkweDAwMTAwMDAwCS8qIGZhbWlseSAweDEwICovCisjZGVmaW5lIENQVUlEX1hNT0RfUkVWX01BU0sJCTB4MDAwODAwMDAKKyNkZWZpbmUgQ1BVSURfWEZBTV8xMEgJCQkweDAwMTAwMDAwCS8qIGZhbWlseSAweDEwICovCiAjZGVmaW5lIENQVUlEX1VTRV9YRkFNX1hNT0QJCTB4MDAwMDBmMDAKICNkZWZpbmUgQ1BVSURfR0VUX01BWF9DQVBBQklMSVRJRVMJMHg4MDAwMDAwMAogI2RlZmluZSBDUFVJRF9GUkVRX1ZPTFRfQ0FQQUJJTElUSUVTCTB4ODAwMDAwMDcKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKaW5kZXggYjQyNWNkMy4uNjk4Zjk4MCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJzcGVlZHN0ZXAtbGliLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2N5cml4LmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jeXJpeC5jCmluZGV4IDBiODQxMWEuLmU4OGQyZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2N5cml4LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3lyaXguYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1kaXJlY3QuaD4KKyNpbmNsdWRlIDxhc20vdHNjLmg+CiAKICNpbmNsdWRlICJjcHUuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwppbmRleCA4MGI0YzVkLi5lNWJlODE5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtNzMzLDkgKzczMywxMSBAQAogCXN5c19kZXYgPSBnZXRfY3B1X3N5c2RldihjcHUpOwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CiAJCWNhY2hlX2FkZF9kZXYoc3lzX2Rldik7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RFQUQ6CisJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCWNhY2hlX3JlbW92ZV9kZXYoc3lzX2Rldik7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9rNy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMKaW5kZXggZjlmYTQxNC4uZWVmNjNlMyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMKQEAgLTcyLDEyICs3MiwxMiBAQAogCXUzMiBsLCBoOwogCWludCBpOwogCi0JbWFjaGluZV9jaGVja192ZWN0b3IgPSBrN19tYWNoaW5lX2NoZWNrOwotCXdtYigpOwotCiAJaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01DRSkpCiAJCXJldHVybjsKIAorCW1hY2hpbmVfY2hlY2tfdmVjdG9yID0gazdfbWFjaGluZV9jaGVjazsKKwl3bWIoKTsKKwogCXByaW50ayAoS0VSTl9JTkZPICJJbnRlbCBtYWNoaW5lIGNoZWNrIGFyY2hpdGVjdHVyZSBzdXBwb3J0ZWQuXG4iKTsKIAlyZG1zciAoTVNSX0lBMzJfTUNHX0NBUCwgbCwgaCk7CiAJaWYgKGwgJiAoMTw8OCkpCS8qIENvbnRyb2wgcmVnaXN0ZXIgcHJlc2VudCA/ICovCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4IDA2NTAwNWMuLjdiYTdjM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZS9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKKyAqIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCiAgKgogICogVGhlcm1hbCB0aHJvdHRsZSBldmVudCBzdXBwb3J0IGNvZGUgKHN1Y2ggYXMgc3lzbG9nIG1lc3NhZ2luZyBhbmQgcmF0ZQogICogbGltaXRpbmcpIHRoYXQgd2FzIGZhY3RvcmVkIG91dCBmcm9tIHg4Nl82NCAobWNlX2ludGVsLmMpIGFuZCBpMzg2IChwNC5jKS4KQEAgLTEzNywxMCArMTM3LDEyIEBACiAJbXV0ZXhfbG9jaygmdGhlcm1fY3B1X2xvY2spOwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CiAJCWVyciA9IHRoZXJtYWxfdGhyb3R0bGVfYWRkX2RldihzeXNfZGV2KTsKIAkJV0FSTl9PTihlcnIpOwogCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQl0aGVybWFsX3Rocm90dGxlX3JlbW92ZV9kZXYoc3lzX2Rldik7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYwppbmRleCAwNzM3YTU5Li45ZWRmNTYyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9jeXJpeC5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIAkvKiAgU2F2ZSB2YWx1ZSBvZiBDUjQgYW5kIGNsZWFyIFBhZ2UgR2xvYmFsIEVuYWJsZSAoYml0IDcpICAqLwogCWlmICggY3B1X2hhc19wZ2UgKSB7CiAJCWNyNCA9IHJlYWRfY3I0KCk7Ci0JCXdyaXRlX2NyNChjcjQgJiAodW5zaWduZWQgY2hhcikgfigxIDw8IDcpKTsKKwkJd3JpdGVfY3I0KGNyNCAmIH5YODZfQ1I0X1BHRSk7CiAJfQogCiAJLyogIERpc2FibGUgYW5kIGZsdXNoIGNhY2hlcy4gTm90ZSB0aGF0IHdiaW52ZCBmbHVzaGVzIHRoZSBUTEJzIGFzCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCmluZGV4IDUzNjdlMzIuLmM0ZWJiNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCkBAIC03OCw3ICs3OCw3IEBACiB9CiAKIC8qICBHcmFiIGFsbCBvZiB0aGUgTVRSUiBzdGF0ZSBmb3IgdGhpcyBDUFUgaW50byAqc3RhdGUgICovCi12b2lkIF9faW5pdCBnZXRfbXRycl9zdGF0ZSh2b2lkKQordm9pZCBnZXRfbXRycl9zdGF0ZSh2b2lkKQogewogCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBtdHJyX3Zhcl9yYW5nZSAqdnJzOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL21haW4uYwppbmRleCAwMmEyZjM5Li43MjAyYjk4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL21haW4uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL21haW4uYwpAQCAtNjM5LDcgKzYzOSw3IEBACiAgKiBpbml0aWFsaXplZCAoaS5lLiBiZWZvcmUgc21wX2luaXQoKSkuCiAgKiAKICAqLwotdm9pZCBfX2luaXQgbXRycl9icF9pbml0KHZvaWQpCit2b2lkIG10cnJfYnBfaW5pdCh2b2lkKQogewogCWluaXRfaWZzKCk7CiAKQEAgLTczNCwxMCArNzM0LDEzIEBACiAgKi8KIHZvaWQgbXRycl9zYXZlX3N0YXRlKHZvaWQpCiB7Ci0JaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKQorCWludCBjcHUgPSBnZXRfY3B1KCk7CisKKwlpZiAoY3B1ID09IDApCiAJCW10cnJfc2F2ZV9maXhlZF9yYW5nZXMoTlVMTCk7CiAJZWxzZQogCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoMCwgbXRycl9zYXZlX2ZpeGVkX3JhbmdlcywgTlVMTCwgMSwgMSk7CisJcHV0X2NwdSgpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBtdHJyX2luaXRfZmluaWFsaXplKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMKaW5kZXggZjYyZWNkMS4uN2IzOWEyZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9zdGF0ZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L210cnIvc3RhdGUuYwpAQCAtMTksNyArMTksNyBAQAogCQkvKiAgU2F2ZSB2YWx1ZSBvZiBDUjQgYW5kIGNsZWFyIFBhZ2UgR2xvYmFsIEVuYWJsZSAoYml0IDcpICAqLwogCQlpZiAoIGNwdV9oYXNfcGdlICkgewogCQkJY3R4dC0+Y3I0dmFsID0gcmVhZF9jcjQoKTsKLQkJCXdyaXRlX2NyNChjdHh0LT5jcjR2YWwgJiAodW5zaWduZWQgY2hhcikgfigxIDw8IDcpKTsKKwkJCXdyaXRlX2NyNChjdHh0LT5jcjR2YWwgJiB+WDg2X0NSNF9QR0UpOwogCQl9CiAKIAkJLyogIERpc2FibGUgYW5kIGZsdXNoIGNhY2hlcy4gTm90ZSB0aGF0IHdiaW52ZCBmbHVzaGVzIHRoZSBUTEJzIGFzCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS90cmFuc21ldGEuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCmluZGV4IDY0NzFhNWEuLjIwMGZiM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCkBAIC03Nyw4ICs3NywxMCBAQAogCXNldF9iaXQoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDLCBjLT54ODZfY2FwYWJpbGl0eSk7CiAJCiAJLyogSWYgd2UgY2FuIHJ1biBpNjg2IHVzZXItc3BhY2UgY29kZSwgY2FsbCB1cyBhbiBpNjg2ICovCi0jZGVmaW5lIFVTRVI2ODYgKFg4Nl9GRUFUVVJFX1RTQ3xYODZfRkVBVFVSRV9DWDh8WDg2X0ZFQVRVUkVfQ01PVikKLSAgICAgICAgaWYgKCBjLT54ODYgPT0gNSAmJiAoYy0+eDg2X2NhcGFiaWxpdHlbMF0gJiBVU0VSNjg2KSA9PSBVU0VSNjg2ICkKKyNkZWZpbmUgVVNFUjY4NiAoKDEgPDwgWDg2X0ZFQVRVUkVfVFNDKXxcCisJCSAoMSA8PCBYODZfRkVBVFVSRV9DWDgpfFwKKwkJICgxIDw8IFg4Nl9GRUFUVVJFX0NNT1YpKQorICAgICAgICBpZiAoYy0+eDg2ID09IDUgJiYgKGMtPng4Nl9jYXBhYmlsaXR5WzBdICYgVVNFUjY4NikgPT0gVVNFUjY4NikKIAkJYy0+eDg2ID0gNjsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYwppbmRleCBlZWFlMGQ5Li41YzJmYWExIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdWlkLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHVpZC5jCkBAIC0xNjksOSArMTY5LDExIEBACiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgogCQljcHVpZF9kZXZpY2VfY3JlYXRlKGNwdSk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RFQUQ6CisJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCWRldmljZV9kZXN0cm95KGNwdWlkX2NsYXNzLCBNS0RFVihDUFVJRF9NQUpPUiwgY3B1KSk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3Jhc2guYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3Jhc2guYwppbmRleCBhNWUwZTk5Li41MzU4OWQxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcmFzaC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL25taS5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNpbmNsdWRlIDxtYWNoX2lwaS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9lZmkuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvZWZpLmMKaW5kZXggZGQ5ZTdmYS4uYTE4MDgwMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2kzODYva2VybmVsL2VmaS5jCkBAIC0zNDcsMTQgKzM0NywxMiBAQAogCQlwcmludGsoS0VSTl9FUlIgUEZYICJXb2FoISBDb3VsZG4ndCBtYXAgdGhlIEVGSSBzeXN0ZW0gdGFibGUuXG4iKTsKIAlpZiAoZWZpLnN5c3RhYi0+aGRyLnNpZ25hdHVyZSAhPSBFRklfU1lTVEVNX1RBQkxFX1NJR05BVFVSRSkKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiV29haCEgRUZJIHN5c3RlbSB0YWJsZSBzaWduYXR1cmUgaW5jb3JyZWN0XG4iKTsKLQlpZiAoKGVmaS5zeXN0YWItPmhkci5yZXZpc2lvbiBeIEVGSV9TWVNURU1fVEFCTEVfUkVWSVNJT04pID4+IDE2ICE9IDApCi0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICJXYXJuaW5nOiBFRkkgc3lzdGVtIHRhYmxlIG1ham9yIHZlcnNpb24gbWlzbWF0Y2g6ICIKLQkJICAgICAgICJnb3QgJWQuJTAyZCwgZXhwZWN0ZWQgJWQuJTAyZFxuIiwKKwlpZiAoKGVmaS5zeXN0YWItPmhkci5yZXZpc2lvbiA+PiAxNikgPT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiV2FybmluZzogRUZJIHN5c3RlbSB0YWJsZSB2ZXJzaW9uICIKKwkJICAgICAgICIlZC4lMDJkLCBleHBlY3RlZCAxLjAwIG9yIGdyZWF0ZXJcbiIsCiAJCSAgICAgICBlZmkuc3lzdGFiLT5oZHIucmV2aXNpb24gPj4gMTYsCi0JCSAgICAgICBlZmkuc3lzdGFiLT5oZHIucmV2aXNpb24gJiAweGZmZmYsCi0JCSAgICAgICBFRklfU1lTVEVNX1RBQkxFX1JFVklTSU9OID4+IDE2LAotCQkgICAgICAgRUZJX1NZU1RFTV9UQUJMRV9SRVZJU0lPTiAmIDB4ZmZmZik7CisJCSAgICAgICBlZmkuc3lzdGFiLT5oZHIucmV2aXNpb24gJiAweGZmZmYpOworCiAJLyoKIAkgKiBHcmFiIHNvbWUgZGV0YWlscyBmcm9tIHRoZSBzeXN0ZW0gdGFibGUKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TIGIvYXJjaC9pMzg2L2tlcm5lbC9oZWFkLlMKaW5kZXggOWIxMGFmNi4uZjc0ZGZjNCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9oZWFkLlMKQEAgLTcxLDEyICs3MSw2IEBACiAuc2VjdGlvbiAudGV4dC5oZWFkLCJheCIsQHByb2diaXRzCiBFTlRSWShzdGFydHVwXzMyKQogCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCi0gICAgICAgIG1vdmwgJWNzLCAlZWF4Ci0gICAgICAgIHRlc3RsICQweDMsICVlYXgKLSAgICAgICAgam56IHN0YXJ0dXBfcGFyYXZpcnQKLSNlbmRpZgotCiAvKgogICogU2V0IHNlZ21lbnRzIHRvIGtub3duIHZhbHVlcy4KICAqLwpAQCAtNTAxLDM4ICs0OTUsNiBAQAogCWlyZXQKIAogLnNlY3Rpb24gLnRleHQKLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLXN0YXJ0dXBfcGFyYXZpcnQ6Ci0JY2xkCi0gCW1vdmwgJChpbml0X3RocmVhZF91bmlvbitUSFJFQURfU0laRSksJWVzcAotCi0JLyogV2UgdGFrZSBwYWlucyB0byBwcmVzZXJ2ZSBhbGwgdGhlIHJlZ3MuICovCi0JcHVzaGwJJWVkeAotCXB1c2hsCSVlY3gKLQlwdXNobAklZWF4Ci0KLQlwdXNobAkkX19zdGFydF9wYXJhdmlydHByb2JlCi0xOgotCW1vdmwJMCglZXNwKSwgJWVheAotCWNtcGwJJF9fc3RvcF9wYXJhdmlydHByb2JlLCAlZWF4Ci0JamUJdW5oYW5kbGVkX3BhcmF2aXJ0Ci0JcHVzaGwJKCVlYXgpCi0JbW92bAk4KCVlc3ApLCAlZWF4Ci0JY2FsbAkqKCVlc3ApCi0JcG9wbAklZWF4Ci0KLQltb3ZsCTQoJWVzcCksICVlYXgKLQltb3ZsCTgoJWVzcCksICVlY3gKLQltb3ZsCTEyKCVlc3ApLCAlZWR4Ci0KLQlhZGRsCSQ0LCAoJWVzcCkKLQlqbXAJMWIKLQotdW5oYW5kbGVkX3BhcmF2aXJ0OgotCS8qIE5vdGhpbmcgd2FudGVkIHVzOiB3ZSdyZSBzY3Jld2VkLiAqLwotCXVkMgotI2VuZGlmCi0KIC8qCiAgKiBSZWFsIGJlZ2lubmluZyBvZiBub3JtYWwgInRleHQiIHNlZ21lbnQKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9pODI1OS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9pODI1OS5jCmluZGV4IDAzYWJmZGIuLjA0OTljYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaTgyNTkuYworKysgYi9hcmNoL2kzODYva2VybmVsL2k4MjU5LmMKQEAgLTUsNyArNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IDFiNjIzY2QuLjdmOGI3YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2lvcG9ydC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9pb3BvcnQuYwppbmRleCBkMWU0MmUwLi4zZDMxMGE5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2lvcG9ydC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9wb3J0LmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGI1NDViYzcuLmRkZTgyOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTIyNiwyNCArMjI2LDE1IEBACiB9CiAKIC8qIENhbGxlZCB3aXRoIGtyZXRwcm9iZV9sb2NrIGhlbGQgKi8KLXZvaWQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZSAqcnAsCit2b2lkIF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3JldHByb2JlKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAogCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgKnNhcmEgPSAodW5zaWduZWQgbG9uZyAqKSZyZWdzLT5lc3A7CiAKLQlzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaTsKKwlyaS0+cmV0X2FkZHIgPSAoa3Byb2JlX29wY29kZV90ICopICpzYXJhOwogCi0JaWYgKChyaSA9IGdldF9mcmVlX3JwX2luc3QocnApKSAhPSBOVUxMKSB7Ci0JCXJpLT5ycCA9IHJwOwotCQlyaS0+dGFzayA9IGN1cnJlbnQ7Ci0JCXJpLT5yZXRfYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgKnNhcmE7Ci0KLQkJLyogUmVwbGFjZSB0aGUgcmV0dXJuIGFkZHIgd2l0aCB0cmFtcG9saW5lIGFkZHIgKi8KLQkJKnNhcmEgPSAodW5zaWduZWQgbG9uZykgJmtyZXRwcm9iZV90cmFtcG9saW5lOwotCQlhZGRfcnBfaW5zdChyaSk7Ci0JfSBlbHNlIHsKLQkJcnAtPm5taXNzZWQrKzsKLQl9CisJLyogUmVwbGFjZSB0aGUgcmV0dXJuIGFkZHIgd2l0aCB0cmFtcG9saW5lIGFkZHIgKi8KKwkqc2FyYSA9ICh1bnNpZ25lZCBsb25nKSAma3JldHByb2JlX3RyYW1wb2xpbmU7CiB9CiAKIC8qCkBAIC00NDksOCArNDQwLDcgQEAKIAkJCWJyZWFrOwogCX0KIAotCUJVR19PTighb3JpZ19yZXRfYWRkcmVzcyB8fCAob3JpZ19yZXRfYWRkcmVzcyA9PSB0cmFtcG9saW5lX2FkZHJlc3MpKTsKLQorCWtyZXRwcm9iZV9hc3NlcnQocmksIG9yaWdfcmV0X2FkZHJlc3MsIHRyYW1wb2xpbmVfYWRkcmVzcyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma3JldHByb2JlX2xvY2ssIGZsYWdzKTsKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmksIG5vZGUsIHRtcCwgJmVtcHR5X3JwLCBobGlzdCkgewpAQCAtNzUzLDYgKzc0MywxMSBAQAogCXJldHVybiAwOwogfQogCitpbnQgX19rcHJvYmVzIGFyY2hfdHJhbXBvbGluZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlyZXR1cm4gMDsKK30KKwogaW50IF9faW5pdCBhcmNoX2luaXRfa3Byb2Jlcyh2b2lkKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9sZHQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbGR0LmMKaW5kZXggYjQxMGU1Zi4uZTBiMmQxNyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9sZHQuYworKysgYi9hcmNoL2kzODYva2VybmVsL2xkdC5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1MTAxMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBMZWdhY3kgQ09NIHBvcnQgZGV2aWNlcyBmb3IgeDg2IHBsYXRmb3JtcyB3aXRob3V0IFBOUEJJT1Mgb3IgQUNQSS4KKyAqIERhdGEgdGFrZW4gZnJvbSBpbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwNyBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgorICoJQmpvcm4gSGVsZ2FhcyA8Ympvcm4uaGVsZ2Fhc0BocC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorCisvKiBTdGFuZGFyZCBDT00gZmxhZ3MgKGV4Y2VwdCBmb3IgQ09NNCwgYmVjYXVzZSBvZiB0aGUgODUxNCBwcm9ibGVtKSAqLworI2lmZGVmIENPTkZJR19TRVJJQUxfREVURUNUX0lSUQorI2RlZmluZSBDT01fRkxBR1MgKFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9BVVRPX0lSUSkKKyNkZWZpbmUgQ09NNF9GTEFHUyAoVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfQVVUT19JUlEpCisjZWxzZQorI2RlZmluZSBDT01fRkxBR1MgKFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCkKKyNkZWZpbmUgQ09NNF9GTEFHUyBVUEZfQk9PVF9BVVRPQ09ORgorI2VuZGlmCisKKyNkZWZpbmUgUE9SVChfYmFzZSxfaXJxLF9mbGFncykJCQkJXAorCXsJCQkJCQlcCisJCS5pb2Jhc2UJCT0gX2Jhc2UsCQlcCisJCS5pcnEJCT0gX2lycSwJCQlcCisJCS51YXJ0Y2xrCT0gMTg0MzIwMCwJCVwKKwkJLmlvdHlwZQkJPSBVUElPX1BPUlQsCQlcCisJCS5mbGFncwkJPSBfZmxhZ3MsCQlcCisJfQorCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHg4Nl9jb21fZGF0YVtdID0geworCVBPUlQoMHgzRjgsIDQsIENPTV9GTEFHUyksCisJUE9SVCgweDJGOCwgMywgQ09NX0ZMQUdTKSwKKwlQT1JUKDB4M0U4LCA0LCBDT01fRkxBR1MpLAorCVBPUlQoMHgyRTgsIDMsIENPTTRfRkxBR1MpLAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHg4Nl9jb21fZGV2aWNlID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHg4Nl9jb21fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIGludCBmb3JjZV9sZWdhY3lfcHJvYmU7Cittb2R1bGVfcGFyYW1fbmFtZWQoZm9yY2UsIGZvcmNlX2xlZ2FjeV9wcm9iZSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlLCAiRm9yY2UgbGVnYWN5IHNlcmlhbCBwb3J0IHByb2JlIik7CisKK3N0YXRpYyBpbnQgX19pbml0IHNlcmlhbDgyNTBfeDg2X2NvbV9pbml0KHZvaWQpCit7CisJaWYgKHBucF9wbGF0Zm9ybV9kZXZpY2VzICYmICFmb3JjZV9sZWdhY3lfcHJvYmUpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmeDg2X2NvbV9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChzZXJpYWw4MjUwX3g4Nl9jb21faW5pdCk7CisKK01PRFVMRV9BVVRIT1IoIkJqb3JuIEhlbGdhYXMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyA4MjUwLzE2eDUwIGxlZ2FjeSBwcm9iZSBtb2R1bGUiKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbWljcm9jb2RlLmMgYi9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jCmluZGV4IGNiZTdlYzguLmQ4NjVkMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbWljcm9jb2RlLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9taWNyb2NvZGUuYwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBtaWNyb2NvZGVfZGV2X2V4aXQgKHZvaWQpCitzdGF0aWMgdm9pZCBtaWNyb2NvZGVfZGV2X2V4aXQgKHZvaWQpCiB7CiAJbWlzY19kZXJlZ2lzdGVyKCZtaWNyb2NvZGVfZGV2KTsKIH0KQEAgLTU2Nyw3ICs1NjcsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBhcHBseV9taWNyb2NvZGVfb25fY3B1KGludCBjcHUpCitzdGF0aWMgaW50IGFwcGx5X21pY3JvY29kZV9jaGVja19jcHUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YSArIGNwdTsKIAlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1OwpAQCAtNTc1LDggKzU3NSw5IEBACiAJdW5zaWduZWQgaW50IHZhbFsyXTsKIAlpbnQgZXJyID0gMDsKIAorCS8qIENoZWNrIGlmIHRoZSBtaWNyb2NvZGUgaXMgYXZhaWxhYmxlICovCiAJaWYgKCF1Y2ktPm1jKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CiAKIAlvbGQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKQEAgLTYxNCw3ICs2MTUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIG1pY3JvY29kZV9pbml0X2NwdShpbnQgY3B1KQorc3RhdGljIHZvaWQgbWljcm9jb2RlX2luaXRfY3B1KGludCBjcHUsIGludCByZXN1bWUpCiB7CiAJY3B1bWFza190IG9sZDsKIAlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1OwpAQCAtNjI0LDggKzYyNSw3IEBACiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKIAltdXRleF9sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOwogCWNvbGxlY3RfY3B1X2luZm8oY3B1KTsKLQlpZiAodWNpLT52YWxpZCAmJiBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcgJiYKLQkgICAgIXN1c3BlbmRfY3B1X2hvdHBsdWcpCisJaWYgKHVjaS0+dmFsaWQgJiYgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SVU5OSU5HICYmICFyZXN1bWUpCiAJCWNwdV9yZXF1ZXN0X21pY3JvY29kZShjcHUpOwogCW11dGV4X3VubG9jaygmbWljcm9jb2RlX211dGV4KTsKIAlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZCk7CkBAIC03MDIsNyArNzAyLDcgQEAKIAkubmFtZSA9ICJtaWNyb2NvZGUiLAogfTsKIAotc3RhdGljIGludCBtY19zeXNkZXZfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNfZGV2KQorc3RhdGljIGludCBfX21jX3N5c2Rldl9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXYsIGludCByZXN1bWUpCiB7CiAJaW50IGVyciwgY3B1ID0gc3lzX2Rldi0+aWQ7CiAJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKQEAgLTcxMSwzOSArNzExLDMxIEBACiAJCXJldHVybiAwOwogCiAJcHJfZGVidWcoIk1pY3JvY29kZTpDUFUgJWQgYWRkZWRcbiIsIGNwdSk7Ci0JLyogSWYgc3VzcGVuZF9jcHVfaG90cGx1ZyBpcyBzZXQsIHRoZSBzeXN0ZW0gaXMgcmVzdW1pbmcgYW5kIHdlIHNob3VsZAotCSAqIHVzZSB0aGUgZGF0YSBmcm9tIGJlZm9yZSB0aGUgc3VzcGVuZC4KLQkgKi8KLQlpZiAoc3VzcGVuZF9jcHVfaG90cGx1ZykgewotCQllcnIgPSBhcHBseV9taWNyb2NvZGVfb25fY3B1KGNwdSk7Ci0JCWlmIChlcnIpCi0JCQltaWNyb2NvZGVfZmluaV9jcHUoY3B1KTsKLQl9Ci0JaWYgKCF1Y2ktPnZhbGlkKQotCQltZW1zZXQodWNpLCAwLCBzaXplb2YoKnVjaSkpOworCW1lbXNldCh1Y2ksIDAsIHNpemVvZigqdWNpKSk7CiAKIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnN5c19kZXYtPmtvYmosICZtY19hdHRyX2dyb3VwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCF1Y2ktPnZhbGlkKQotCQltaWNyb2NvZGVfaW5pdF9jcHUoY3B1KTsKKwltaWNyb2NvZGVfaW5pdF9jcHUoY3B1LCByZXN1bWUpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWNfc3lzZGV2X2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzX2RldikKK3sKKwlyZXR1cm4gX19tY19zeXNkZXZfYWRkKHN5c19kZXYsIDApOworfQorCiBzdGF0aWMgaW50IG1jX3N5c2Rldl9yZW1vdmUoc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXYpCiB7CiAJaW50IGNwdSA9IHN5c19kZXYtPmlkOwogCiAJaWYgKCFjcHVfb25saW5lKGNwdSkpCiAJCXJldHVybiAwOworCiAJcHJfZGVidWcoIk1pY3JvY29kZTpDUFUgJWQgcmVtb3ZlZFxuIiwgY3B1KTsKLQkvKiBJZiBzdXNwZW5kX2NwdV9ob3RwbHVnIGlzIHNldCwgdGhlIHN5c3RlbSBpcyBzdXNwZW5kaW5nIGFuZCB3ZSBzaG91bGQKLQkgKiBrZWVwIHRoZSBtaWNyb2NvZGUgaW4gbWVtb3J5IGZvciB0aGUgcmVzdW1lLgotCSAqLwotCWlmICghc3VzcGVuZF9jcHVfaG90cGx1ZykKLQkJbWljcm9jb2RlX2ZpbmlfY3B1KGNwdSk7CisJbWljcm9jb2RlX2ZpbmlfY3B1KGNwdSk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzeXNfZGV2LT5rb2JqLCAmbWNfYXR0cl9ncm91cCk7CiAJcmV0dXJuIDA7CiB9CkBAIC03NzQsMTMgKzc2NiwzNCBAQAogCiAJc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGNwdSk7CiAJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CisJCS8qIFRoZSBDUFUgcmVmdXNlZCB0byBjb21lIHVwIGR1cmluZyBhIHN5c3RlbSByZXN1bWUgKi8KKwkJbWljcm9jb2RlX2ZpbmlfY3B1KGNwdSk7CisJCWJyZWFrOwogCWNhc2UgQ1BVX09OTElORToKIAljYXNlIENQVV9ET1dOX0ZBSUxFRDoKIAkJbWNfc3lzZGV2X2FkZChzeXNfZGV2KTsKIAkJYnJlYWs7CisJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKKwkJLyogU3lzdGVtLXdpZGUgcmVzdW1lIGlzIGluIHByb2dyZXNzLCB0cnkgdG8gYXBwbHkgbWljcm9jb2RlICovCisJCWlmIChhcHBseV9taWNyb2NvZGVfY2hlY2tfY3B1KGNwdSkpIHsKKwkJCS8qIFRoZSBhcHBsaWNhdGlvbiBvZiBtaWNyb2NvZGUgZmFpbGVkICovCisJCQltaWNyb2NvZGVfZmluaV9jcHUoY3B1KTsKKwkJCV9fbWNfc3lzZGV2X2FkZChzeXNfZGV2LCAxKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBDUFVfRE9XTl9GQUlMRURfRlJPWkVOOgorCQlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZzeXNfZGV2LT5rb2JqLCAmbWNfYXR0cl9ncm91cCkpCisJCQlwcmludGsoS0VSTl9FUlIgIk1pY3JvY29kZTogRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc3lzZnMgIgorCQkJCSJncm91cCBmb3IgQ1BVJWRcbiIsIGNwdSk7CisJCWJyZWFrOwogCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKIAkJbWNfc3lzZGV2X3JlbW92ZShzeXNfZGV2KTsKIAkJYnJlYWs7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKKwkJLyogU3VzcGVuZCBpcyBpbiBwcm9ncmVzcywgb25seSByZW1vdmUgdGhlIGludGVyZmFjZSAqLworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnN5c19kZXYtPmtvYmosICZtY19hdHRyX2dyb3VwKTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiBOT1RJRllfT0s7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21wcGFyc2UuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCmluZGV4IDA5NTJlY2MuLjEzYWJiNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9tc3IuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXNyLmMKaW5kZXggYmNhYTZlOS4uMGMxMDY5YiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9tc3IuYworKysgYi9hcmNoL2kzODYva2VybmVsL21zci5jCkBAIC00NSwxMDQgKzQ1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqbXNyX2NsYXNzOwogCi1zdGF0aWMgaW5saW5lIGludCB3cm1zcl9laW8odTMyIHJlZywgdTMyIGVheCwgdTMyIGVkeCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gd3Jtc3Jfc2FmZShyZWcsIGVheCwgZWR4KTsKLQlpZiAoZXJyKQotCQllcnIgPSAtRUlPOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJkbXNyX2Vpbyh1MzIgcmVnLCB1MzIgKmVheCwgdTMyICplZHgpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHJkbXNyX3NhZmUocmVnLCBlYXgsIGVkeCk7Ci0JaWYgKGVycikKLQkJZXJyID0gLUVJTzsKLQlyZXR1cm4gZXJyOwotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotCi1zdHJ1Y3QgbXNyX2NvbW1hbmQgewotCWludCBlcnI7Ci0JdTMyIHJlZzsKLQl1MzIgZGF0YVsyXTsKLX07Ci0KLXN0YXRpYyB2b2lkIG1zcl9zbXBfd3Jtc3Iodm9pZCAqY21kX2Jsb2NrKQotewotCXN0cnVjdCBtc3JfY29tbWFuZCAqY21kID0gKHN0cnVjdCBtc3JfY29tbWFuZCAqKWNtZF9ibG9jazsKLQotCWNtZC0+ZXJyID0gd3Jtc3JfZWlvKGNtZC0+cmVnLCBjbWQtPmRhdGFbMF0sIGNtZC0+ZGF0YVsxXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1zcl9zbXBfcmRtc3Iodm9pZCAqY21kX2Jsb2NrKQotewotCXN0cnVjdCBtc3JfY29tbWFuZCAqY21kID0gKHN0cnVjdCBtc3JfY29tbWFuZCAqKWNtZF9ibG9jazsKLQotCWNtZC0+ZXJyID0gcmRtc3JfZWlvKGNtZC0+cmVnLCAmY21kLT5kYXRhWzBdLCAmY21kLT5kYXRhWzFdKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG9fd3Jtc3IoaW50IGNwdSwgdTMyIHJlZywgdTMyIGVheCwgdTMyIGVkeCkKLXsKLQlzdHJ1Y3QgbXNyX2NvbW1hbmQgY21kOwotCWludCByZXQ7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkgewotCQlyZXQgPSB3cm1zcl9laW8ocmVnLCBlYXgsIGVkeCk7Ci0JfSBlbHNlIHsKLQkJY21kLnJlZyA9IHJlZzsKLQkJY21kLmRhdGFbMF0gPSBlYXg7Ci0JCWNtZC5kYXRhWzFdID0gZWR4OwotCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIG1zcl9zbXBfd3Jtc3IsICZjbWQsIDEsIDEpOwotCQlyZXQgPSBjbWQuZXJyOwotCX0KLQlwcmVlbXB0X2VuYWJsZSgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvX3JkbXNyKGludCBjcHUsIHUzMiByZWcsIHUzMiAqIGVheCwgdTMyICogZWR4KQotewotCXN0cnVjdCBtc3JfY29tbWFuZCBjbWQ7Ci0JaW50IHJldDsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7Ci0JCXJldCA9IHJkbXNyX2VpbyhyZWcsIGVheCwgZWR4KTsKLQl9IGVsc2UgewotCQljbWQucmVnID0gcmVnOwotCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIG1zcl9zbXBfcmRtc3IsICZjbWQsIDEsIDEpOwotCi0JCSplYXggPSBjbWQuZGF0YVswXTsKLQkJKmVkeCA9IGNtZC5kYXRhWzFdOwotCi0JCXJldCA9IGNtZC5lcnI7Ci0JfQotCXByZWVtcHRfZW5hYmxlKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotI2Vsc2UJCQkJLyogISBDT05GSUdfU01QICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGRvX3dybXNyKGludCBjcHUsIHUzMiByZWcsIHUzMiBlYXgsIHUzMiBlZHgpCi17Ci0JcmV0dXJuIHdybXNyX2VpbyhyZWcsIGVheCwgZWR4KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG9fcmRtc3IoaW50IGNwdSwgdTMyIHJlZywgdTMyICplYXgsIHUzMiAqZWR4KQotewotCXJldHVybiByZG1zcl9laW8ocmVnLCBlYXgsIGVkeCk7Ci19Ci0KLSNlbmRpZgkJCQkvKiAhIENPTkZJR19TTVAgKi8KLQogc3RhdGljIGxvZmZfdCBtc3Jfc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCiB7CiAJbG9mZl90IHJldCA9IC1FSU5WQUw7CkBAIC0xNzQsOSArNzYsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsJLyogSW52YWxpZCBjaHVuayBzaXplICovCiAKIAlmb3IgKDsgY291bnQ7IGNvdW50IC09IDgpIHsKLQkJZXJyID0gZG9fcmRtc3IoY3B1LCByZWcsICZkYXRhWzBdLCAmZGF0YVsxXSk7CisJCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGNwdSwgcmVnLCAmZGF0YVswXSwgJmRhdGFbMV0pOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwkJCXJldHVybiAtRUlPOwogCQlpZiAoY29weV90b191c2VyKHRtcCwgJmRhdGEsIDgpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXRtcCArPSAyOwpAQCAtMjAwLDkgKzEwMiw5IEBACiAJZm9yICg7IGNvdW50OyBjb3VudCAtPSA4KSB7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgdG1wLCA4KSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQllcnIgPSBkb193cm1zcihjcHUsIHJlZywgZGF0YVswXSwgZGF0YVsxXSk7CisJCWVyciA9IHdybXNyX3NhZmVfb25fY3B1KGNwdSwgcmVnLCBkYXRhWzBdLCBkYXRhWzFdKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJCQlyZXR1cm4gLUVJTzsKIAkJdG1wICs9IDI7CiAJfQogCkBAIC0yNTEsOSArMTUzLDExIEBACiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgogCQltc3JfZGV2aWNlX2NyZWF0ZShjcHUpOwogCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQlkZXZpY2VfZGVzdHJveShtc3JfY2xhc3MsIE1LREVWKE1TUl9NQUpPUiwgY3B1KSk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMgYi9hcmNoL2kzODYva2VybmVsL25taS5jCmluZGV4IDMzY2YyZjMuLmZiYTEyMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYwpAQCAtMjMsMTAgKzIzLDEwIEBACiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS9ubWkuaD4KLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAKICNpbmNsdWRlICJtYWNoX3RyYXBzLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcGFyYXZpcnQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvcGFyYXZpcnQuYwppbmRleCA1YzEwZjM3Li5mYWFiMDlhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3BhcmF2aXJ0LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9wYXJhdmlydC5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhcnRfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogCiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL2kzODYva2VybmVsL3BjaS1kbWEuYwppbmRleCAzZWJjZWEwLi4zMGI3NTRmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3BjaS1kbWEuYworKysgYi9hcmNoL2kzODYva2VybmVsL3BjaS1kbWEuYwpAQCAtNzcsNyArNzcsNyBAQAogewogCXZvaWQgX19pb21lbSAqbWVtX2Jhc2UgPSBOVUxMOwogCWludCBwYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKLQlpbnQgYml0bWFwX3NpemUgPSAocGFnZXMgKyAzMSkvMzI7CisJaW50IGJpdG1hcF9zaXplID0gQklUU19UT19MT05HUyhwYWdlcykgKiBzaXplb2YobG9uZyk7CiAKIAlpZiAoKGZsYWdzICYgKERNQV9NRU1PUllfTUFQIHwgRE1BX01FTU9SWV9JTykpID09IDApCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCA2MTk5OTQ3Li4wNmRmYTY1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTE4Nyw2ICsxODYsNyBAQAogCQkJaWYgKF9fZ2V0X2NwdV92YXIoY3B1X2lkbGVfc3RhdGUpKQogCQkJCV9fZ2V0X2NwdV92YXIoY3B1X2lkbGVfc3RhdGUpID0gMDsKIAorCQkJY2hlY2tfcGd0X2NhY2hlKCk7CiAJCQlybWIoKTsKIAkJCWlkbGUgPSBwbV9pZGxlOwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCA0YThmOGEyLi4wYzBjZWVjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3JlYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCA1MGRmYzY1Li41NTEzZjhkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3JlYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcmVib290LmMKQEAgLTg5LDYgKzg5LDE0IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIHJlYm9vdF9kbWlfdGFibGVbXSA9IHsKKwl7CS8qIEhhbmRsZSBwcm9ibGVtcyB3aXRoIHJlYm9vdGluZyBvbiBEZWxsIEU1MjAncyAqLworCQkuY2FsbGJhY2sgPSBzZXRfYmlvc19yZWJvb3QsCisJCS5pZGVudCA9ICJEZWxsIEU1MjAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJEZWxsIERNMDYxIiksCisJCX0sCisJfSwKIAl7CS8qIEhhbmRsZSBwcm9ibGVtcyB3aXRoIHJlYm9vdGluZyBvbiBEZWxsIDEzMDAncyAqLwogCQkuY2FsbGJhY2sgPSBzZXRfYmlvc19yZWJvb3QsCiAJCS5pZGVudCA9ICJEZWxsIFBvd2VyRWRnZSAxMzAwIiwKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2kzODYva2VybmVsL3NpZ25hbC5jCmluZGV4IDRmOTllODcuLmQ1NzRlMzggMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zaWduYWwuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NtcC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXAuYwppbmRleCA4OWE0NWE5Li42Mjk5YzA4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgpAQCAtNDY4LDcgKzQ2Nyw3IEBACiAgKiBpdCBnb2VzIHN0cmFpZ2h0IHRocm91Z2ggYW5kIHdhc3RlcyBubyB0aW1lIHNlcmlhbGl6aW5nCiAgKiBhbnl0aGluZy4gV29yc3QgY2FzZSBpcyB0aGF0IHdlIGxvc2UgYSByZXNjaGVkdWxlIC4uLgogICovCi12b2lkIG5hdGl2ZV9zbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpCitzdGF0aWMgdm9pZCBuYXRpdmVfc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQogewogCVdBUk5fT04oY3B1X2lzX29mZmxpbmUoY3B1KSk7CiAJc2VuZF9JUElfbWFzayhjcHVtYXNrX29mX2NwdShjcHUpLCBSRVNDSEVEVUxFX1ZFQ1RPUik7CkBAIC01NDcsOSArNTQ2LDEwIEBACiAgKiBZb3UgbXVzdCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyBvciBmcm9tIGEKICAqIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyIG9yIGZyb20gYSBib3R0b20gaGFsZiBoYW5kbGVyLgogICovCi1pbnQgbmF0aXZlX3NtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1bWFza190IG1hc2ssCi0JCQkJICB2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqaW5mbywKLQkJCQkgIGludCB3YWl0KQorc3RhdGljIGludAorbmF0aXZlX3NtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1bWFza190IG1hc2ssCisJCQkgICAgICB2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqaW5mbywKKwkJCSAgICAgIGludCB3YWl0KQogewogCXN0cnVjdCBjYWxsX2RhdGFfc3RydWN0IGRhdGE7CiAJY3B1bWFza190IGFsbGJ1dHNlbGY7CkBAIC02MDAsNjAgKzYwMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogc21wX2NhbGxfZnVuY3Rpb24oKTogUnVuIGEgZnVuY3Rpb24gb24gYWxsIG90aGVyIENQVXMuCi0gKiBAZnVuYzogVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KLSAqIEBpbmZvOiBBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KLSAqIEBub25hdG9taWM6IFVudXNlZC4KLSAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBzdGF0dXMgY29kZS4KLSAqCi0gKiBJZiBAd2FpdCBpcyB0cnVlLCB0aGVuIHJldHVybnMgb25jZSBAZnVuYyBoYXMgcmV0dXJuZWQ7IG90aGVyd2lzZQotICogaXQgcmV0dXJucyBqdXN0IGJlZm9yZSB0aGUgdGFyZ2V0IGNwdSBjYWxscyBAZnVuYy4KLSAqCi0gKiBZb3UgbXVzdCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyBvciBmcm9tIGEKLSAqIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyIG9yIGZyb20gYSBib3R0b20gaGFsZiBoYW5kbGVyLgotICovCi1pbnQgc21wX2NhbGxfZnVuY3Rpb24odm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywgaW50IG5vbmF0b21pYywKLQkJICAgICAgaW50IHdhaXQpCi17Ci0JcmV0dXJuIHNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1X29ubGluZV9tYXAsIGZ1bmMsIGluZm8sIHdhaXQpOwotfQotRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbik7Ci0KLS8qKgotICogc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlIC0gUnVuIGEgZnVuY3Rpb24gb24gYW5vdGhlciBDUFUKLSAqIEBjcHU6IFRoZSB0YXJnZXQgQ1BVLiAgQ2Fubm90IGJlIHRoZSBjYWxsaW5nIENQVS4KLSAqIEBmdW5jOiBUaGUgZnVuY3Rpb24gdG8gcnVuLiBUaGlzIG11c3QgYmUgZmFzdCBhbmQgbm9uLWJsb2NraW5nLgotICogQGluZm86IEFuIGFyYml0cmFyeSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLgotICogQG5vbmF0b21pYzogVW51c2VkLgotICogQHdhaXQ6IElmIHRydWUsIHdhaXQgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCBvbiBvdGhlciBDUFVzLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgc3RhdHVzIGNvZGUuCi0gKgotICogSWYgQHdhaXQgaXMgdHJ1ZSwgdGhlbiByZXR1cm5zIG9uY2UgQGZ1bmMgaGFzIHJldHVybmVkOyBvdGhlcndpc2UKLSAqIGl0IHJldHVybnMganVzdCBiZWZvcmUgdGhlIHRhcmdldCBjcHUgY2FsbHMgQGZ1bmMuCi0gKi8KLWludCBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoaW50IGNwdSwgdm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKLQkJCSAgICAgaW50IG5vbmF0b21pYywgaW50IHdhaXQpCi17Ci0JLyogcHJldmVudCBwcmVlbXB0aW9uIGFuZCByZXNjaGVkdWxlIG9uIGFub3RoZXIgcHJvY2Vzc29yICovCi0JaW50IHJldDsKLQlpbnQgbWUgPSBnZXRfY3B1KCk7Ci0JaWYgKGNwdSA9PSBtZSkgewotCQlXQVJOX09OKDEpOwotCQlwdXRfY3B1KCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0ID0gc21wX2NhbGxfZnVuY3Rpb25fbWFzayhjcHVtYXNrX29mX2NwdShjcHUpLCBmdW5jLCBpbmZvLCB3YWl0KTsKLQotCXB1dF9jcHUoKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUpOwotCiBzdGF0aWMgdm9pZCBzdG9wX3RoaXNfY3B1ICh2b2lkICogZHVtbXkpCiB7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKQEAgLTY3MSw3ICs2MTcsNyBAQAogICogdGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgJ3N0b3AnIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBDUFVzIGluIHRoZSBzeXN0ZW0uCiAgKi8KIAotdm9pZCBuYXRpdmVfc21wX3NlbmRfc3RvcCh2b2lkKQorc3RhdGljIHZvaWQgbmF0aXZlX3NtcF9zZW5kX3N0b3Aodm9pZCkKIHsKIAkvKiBEb24ndCBkZWFkbG9jayBvbiB0aGUgY2FsbCBsb2NrIGluIHBhbmljICovCiAJaW50IG5vbG9jayA9ICFzcGluX3RyeWxvY2soJmNhbGxfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGE0YjdhZDIuLjg4YmFlZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KQEAgLTk5LDkgKzk4LDYgQEAKIAogdTggYXBpY2lkXzJfbm9kZVtNQVhfQVBJQ0lEXTsKIAotREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdGhpc19jcHVfb2ZmKTsKLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTCh0aGlzX2NwdV9vZmYpOwotCiAvKgogICogVHJhbXBvbGluZSA4MHg4NiBwcm9ncmFtIGFzIGFuIGFycmF5LgogICovCkBAIC03NjQsMjUgKzc2MCw2IEBACiAjZGVmaW5lIGFsbG9jX2lkbGVfdGFzayhjcHUpIGZvcmtfaWRsZShjcHUpCiAjZW5kaWYKIAotLyogSW5pdGlhbGl6ZSB0aGUgQ1BVJ3MgR0RULiAgVGhpcyBpcyBlaXRoZXIgdGhlIGJvb3QgQ1BVIGRvaW5nIGl0c2VsZgotICAgKHN0aWxsIHVzaW5nIHRoZSBtYXN0ZXIgcGVyLWNwdSBhcmVhKSwgb3IgYSBDUFUgZG9pbmcgaXQgZm9yIGEKLSAgIHNlY29uZGFyeSB3aGljaCB3aWxsIHNvb24gY29tZSB1cC4gKi8KLXN0YXRpYyBfX2NwdWluaXQgdm9pZCBpbml0X2dkdChpbnQgY3B1KQotewotCXN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0ID0gZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKLQotCXBhY2tfZGVzY3JpcHRvcigodTMyICopJmdkdFtHRFRfRU5UUllfUEVSQ1BVXS5hLAotCQkJKHUzMiAqKSZnZHRbR0RUX0VOVFJZX1BFUkNQVV0uYiwKLQkJCV9fcGVyX2NwdV9vZmZzZXRbY3B1XSwgMHhGRkZGRiwKLQkJCTB4ODAgfCBERVNDVFlQRV9TIHwgMHgyLCAweDgpOwotCi0JcGVyX2NwdSh0aGlzX2NwdV9vZmYsIGNwdSkgPSBfX3Blcl9jcHVfb2Zmc2V0W2NwdV07Ci0JcGVyX2NwdShjcHVfbnVtYmVyLCBjcHUpID0gY3B1OwotfQotCi0vKiBEZWZpbmVkIGluIGhlYWQuUyAqLwotZXh0ZXJuIHN0cnVjdCBYZ3RfZGVzY19zdHJ1Y3QgZWFybHlfZ2R0X2Rlc2NyOwotCiBzdGF0aWMgaW50IF9fY3B1aW5pdCBkb19ib290X2NwdShpbnQgYXBpY2lkLCBpbnQgY3B1KQogLyoKICAqIE5PVEUgLSBvbiBtb3N0IHN5c3RlbXMgdGhpcyBpcyBhIFBIWVNJQ0FMIGFwaWMgSUQsIGJ1dCBvbiBtdWx0aXF1YWQKQEAgLTk2NiwxMCArOTQzLDkgQEAKIAogc3RhdGljIHZvaWQgc21wX3R1bmVfc2NoZWR1bGluZyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgY2FjaGVzaXplOyAgICAgICAvKiBrQiAgICovCi0KIAlpZiAoY3B1X2toeikgewotCQljYWNoZXNpemUgPSBib290X2NwdV9kYXRhLng4Nl9jYWNoZV9zaXplOworCQkvKiBjYWNoZSBzaXplIGluIGtCICovCisJCWxvbmcgY2FjaGVzaXplID0gYm9vdF9jcHVfZGF0YS54ODZfY2FjaGVfc2l6ZTsKIAogCQlpZiAoY2FjaGVzaXplID4gMCkKIAkJCW1heF9jYWNoZV9zaXplID0gY2FjaGVzaXplICogMTAyNDsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wY29tbW9uLmMgYi9hcmNoL2kzODYva2VybmVsL3NtcGNvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjhhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2kzODYva2VybmVsL3NtcGNvbW1vbi5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBTTVAgc3R1ZmYgd2hpY2ggaXMgY29tbW9uIHRvIGFsbCBzdWItYXJjaGl0ZWN0dXJlcy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKworREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdGhpc19jcHVfb2ZmKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTCh0aGlzX2NwdV9vZmYpOworCisvKiBJbml0aWFsaXplIHRoZSBDUFUncyBHRFQuICBUaGlzIGlzIGVpdGhlciB0aGUgYm9vdCBDUFUgZG9pbmcgaXRzZWxmCisgICAoc3RpbGwgdXNpbmcgdGhlIG1hc3RlciBwZXItY3B1IGFyZWEpLCBvciBhIENQVSBkb2luZyBpdCBmb3IgYQorICAgc2Vjb25kYXJ5IHdoaWNoIHdpbGwgc29vbiBjb21lIHVwLiAqLworX19jcHVpbml0IHZvaWQgaW5pdF9nZHQoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdCA9IGdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7CisKKwlwYWNrX2Rlc2NyaXB0b3IoKHUzMiAqKSZnZHRbR0RUX0VOVFJZX1BFUkNQVV0uYSwKKwkJCSh1MzIgKikmZ2R0W0dEVF9FTlRSWV9QRVJDUFVdLmIsCisJCQlfX3Blcl9jcHVfb2Zmc2V0W2NwdV0sIDB4RkZGRkYsCisJCQkweDgwIHwgREVTQ1RZUEVfUyB8IDB4MiwgMHg4KTsKKworCXBlcl9jcHUodGhpc19jcHVfb2ZmLCBjcHUpID0gX19wZXJfY3B1X29mZnNldFtjcHVdOworCXBlcl9jcHUoY3B1X251bWJlciwgY3B1KSA9IGNwdTsKK30KKworCisvKioKKyAqIHNtcF9jYWxsX2Z1bmN0aW9uKCk6IFJ1biBhIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBDUFVzLgorICogQGZ1bmM6IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCisgKiBAaW5mbzogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCisgKiBAbm9uYXRvbWljOiBVbnVzZWQuCisgKiBAd2FpdDogSWYgdHJ1ZSwgd2FpdCAoYXRvbWljYWxseSkgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCBvbiBvdGhlciBDUFVzLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgc3RhdHVzIGNvZGUuCisgKgorICogSWYgQHdhaXQgaXMgdHJ1ZSwgdGhlbiByZXR1cm5zIG9uY2UgQGZ1bmMgaGFzIHJldHVybmVkOyBvdGhlcndpc2UKKyAqIGl0IHJldHVybnMganVzdCBiZWZvcmUgdGhlIHRhcmdldCBjcHUgY2FsbHMgQGZ1bmMuCisgKgorICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgb3IgZnJvbSBhCisgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBmcm9tIGEgYm90dG9tIGhhbGYgaGFuZGxlci4KKyAqLworaW50IHNtcF9jYWxsX2Z1bmN0aW9uKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCBub25hdG9taWMsCisJCSAgICAgIGludCB3YWl0KQoreworCXJldHVybiBzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKGNwdV9vbmxpbmVfbWFwLCBmdW5jLCBpbmZvLCB3YWl0KTsKK30KK0VYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb24pOworCisvKioKKyAqIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSAtIFJ1biBhIGZ1bmN0aW9uIG9uIGFub3RoZXIgQ1BVCisgKiBAY3B1OiBUaGUgdGFyZ2V0IENQVS4gIENhbm5vdCBiZSB0aGUgY2FsbGluZyBDUFUuCisgKiBAZnVuYzogVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KKyAqIEBpbmZvOiBBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KKyAqIEBub25hdG9taWM6IFVudXNlZC4KKyAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IHVudGlsIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQgb24gb3RoZXIgQ1BVcy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIHN0YXR1cyBjb2RlLgorICoKKyAqIElmIEB3YWl0IGlzIHRydWUsIHRoZW4gcmV0dXJucyBvbmNlIEBmdW5jIGhhcyByZXR1cm5lZDsgb3RoZXJ3aXNlCisgKiBpdCByZXR1cm5zIGp1c3QgYmVmb3JlIHRoZSB0YXJnZXQgY3B1IGNhbGxzIEBmdW5jLgorICovCitpbnQgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGludCBjcHUsIHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisJCQkgICAgIGludCBub25hdG9taWMsIGludCB3YWl0KQoreworCS8qIHByZXZlbnQgcHJlZW1wdGlvbiBhbmQgcmVzY2hlZHVsZSBvbiBhbm90aGVyIHByb2Nlc3NvciAqLworCWludCByZXQ7CisJaW50IG1lID0gZ2V0X2NwdSgpOworCWlmIChjcHUgPT0gbWUpIHsKKwkJV0FSTl9PTigxKTsKKwkJcHV0X2NwdSgpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldCA9IHNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1bWFza19vZl9jcHUoY3B1KSwgZnVuYywgaW5mbywgd2FpdCk7CisKKwlwdXRfY3B1KCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc3lzX2kzODYuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzX2kzODYuYwppbmRleCA0MDQ4Mzk3Li5lNWRjYjkzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3N5c19pMzg2LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zeXNfaTM4Ni5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAjaW5jbHVkZSA8bGludXgvbXNnLmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IDI2OTdlOTIuLmJmNmFkY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0zMTksMyArMzE5LDcgQEAKIAkubG9uZyBzeXNfbW92ZV9wYWdlcwogCS5sb25nIHN5c19nZXRjcHUKIAkubG9uZyBzeXNfZXBvbGxfcHdhaXQKKwkubG9uZyBzeXNfdXRpbWVuc2F0CQkvKiAzMjAgKi8KKwkubG9uZyBzeXNfc2lnbmFsZmQKKwkubG9uZyBzeXNfdGltZXJmZAorCS5sb25nIHN5c19ldmVudGZkCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKaW5kZXggZjIxYjQxZS4uOTBkYTA1NyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtOTUsMjAgKzk1LDYgQEAKIAogaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDI0Owogc3RhdGljIHVuc2lnbmVkIGludCBjb2RlX2J5dGVzID0gNjQ7Ci1BVE9NSUNfTk9USUZJRVJfSEVBRChpMzg2ZGllX2NoYWluKTsKLQotaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQotewotCXZtYWxsb2Nfc3luY19hbGwoKTsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZpMzg2ZGllX2NoYWluLCBuYik7Ci19Ci1FWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2RpZV9ub3RpZmllcik7IC8qIHVzZWQgbW9kdWxhciBieSBrZGIgKi8KLQotaW50IHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZpMzg2ZGllX2NoYWluLCBuYik7Ci19Ci1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKTsgLyogdXNlZCBtb2R1bGFyIGJ5IGtkYiAqLwogCiBzdGF0aWMgaW5saW5lIGludCB2YWxpZF9zdGFja19wdHIoc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywgdm9pZCAqcCkKIHsKQEAgLTMxOSw3ICszMDUsNyBAQAogCSAgICAgICByZWdzLT54ZHMgJiAweGZmZmYsIHJlZ3MtPnhlcyAmIDB4ZmZmZiwgcmVncy0+eGZzICYgMHhmZmZmLCBncywgc3MpOwogCXByaW50ayhLRVJOX0VNRVJHICJQcm9jZXNzICUuKnMgKHBpZDogJWQsIHRpPSVwIHRhc2s9JXAgdGFzay50aT0lcCkiLAogCQlUQVNLX0NPTU1fTEVOLCBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCi0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKSwgY3VycmVudCwgY3VycmVudC0+dGhyZWFkX2luZm8pOworCQljdXJyZW50X3RocmVhZF9pbmZvKCksIGN1cnJlbnQsIHRhc2tfdGhyZWFkX2luZm8oY3VycmVudCkpOwogCS8qCiAJICogV2hlbiBpbi1rZXJuZWwsIHdlIGFsc28gcHJpbnQgb3V0IHRoZSBzdGFjayBhbmQgY29kZSBhdCB0aGUKIAkgKiB0aW1lIG9mIHRoZSBmYXVsdC4uCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3ZlcmlmeV9jcHUuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvdmVyaWZ5X2NwdS5TCmluZGV4IGU1MWE4NjkuLmYxZDFlYWNmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3ZlcmlmeV9jcHUuUworKysgYi9hcmNoL2kzODYva2VybmVsL3ZlcmlmeV9jcHUuUwpAQCAtMiw2ICsyLDcgQEAKICAgIFRoaXMgcnVucyBpbiAxNmJpdCBtb2RlIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gc3RpbGwgdXNlIHRoZSBCSU9TCiAgICB0byBvdXRwdXQgZXJyb3JzIG9uIHRoZSBzY3JlZW4gKi8KICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAogdmVyaWZ5X2NwdToKIAlwdXNoZmwJCQkJIyBTYXZlIGNhbGxlciBwYXNzZWQgZmxhZ3MKQEAgLTEwLDcgKzExLDkgQEAKIAogI2lmIENPTkZJR19YODZfTUlOSU1VTV9DUFVfTU9ERUwgPj0gNAogCXB1c2hmbAotCW9ybAkkKDE8PDE4KSwoJWVzcCkJCSMgdHJ5IHNldHRpbmcgQUMKKwlwb3AJJWVheAorCW9ybAkkKDE8PDE4KSwlZWF4CQkjIHRyeSBzZXR0aW5nIEFDCisJcHVzaAklZWF4CiAJcG9wZmwKIAlwdXNoZmwKIAlwb3BsICAgICVlYXgKQEAgLTQzLDYgKzQ2LDMyIEBACiAJY21wbAkkMHgxLCVlYXgKIAlqYgliYWQJCQkjIG5vIGNwdWlkIDEKIAorI2lmIFJFUVVJUkVEX01BU0sxICYgTkVFRF9DTVBYQ0hHNjQKKwkvKiBTb21lIFZJQSBDM3MgbmVlZCBtYWdpYyBNU1JzIHRvIGVuYWJsZSBDWDY0LiBEbyB0aGlzIGhlcmUgKi8KKwljbXBsCSQweDc0NmU2NTQzLCVlYngJIyBDZW50CisJam5lCTFmCisJY21wbCAJJDB4NDg3Mjc1NjEsJWVkeAkjIGF1ckgKKwlqbmUJMWYKKwljbXBsCSQweDczNmM3NTYxLCVlY3gJIyBhdWxzCisJam5lCTFmCisJbW92bAkkMSwlZWF4CQkJIyBjaGVjayBtb2RlbAorCWNwdWlkCisJbW92bAklZWF4LCVlYngKKwlzaHIJJDgsJWVieAorCWFuZGwJJDB4ZiwlZWJ4CisJY21wCSQ2LCVlYngJCQkjIGNoZWNrIGZhbWlseSA9PSA2CisJam5lCTFmCisJc2hyCSQ0LCVlYXgKKwlhbmRsCSQweGYsJWVheAorCWNtcGwJJDYsJWVheAkJCSMgY2hlY2sgbW9kZWwgPj0gNgorCWpiCTFmCisJIyBhc3N1bWUgbW9kZWxzID49IDYgYWxsIHN1cHBvcnQgdGhpcyBNU1IKKwltb3ZsCSRNU1JfVklBX0ZDUiwlZWN4CisJcmRtc3IKKwlvcmwJJCgoMTw8MSl8KDE8PDcpKSwlZWF4CSMgZW5hYmxlIENNUFhDSEc2NCBhbmQgUEdFCisJd3Jtc3IKKzE6CisjZW5kaWYKIAltb3ZsICAgICQweDEsJWVheAkJIyBEb2VzIHRoZSBjcHUgaGF2ZSB3aGF0IGl0IHRha2VzCiAJY3B1aWQKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC92bTg2LmMgYi9hcmNoL2kzODYva2VybmVsL3ZtODYuYwppbmRleCBkMWI4ZjJiLi5mMmRjZDFkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3ZtODYuYworKysgYi9hcmNoL2kzODYva2VybmVsL3ZtODYuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdm1pLmMgYi9hcmNoL2kzODYva2VybmVsL3ZtaS5jCmluZGV4IGM4NzI2YzQuLmMxMjcyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdm1pLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC92bWkuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS92bWkuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2kzODYva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMjNlODYxNC4uYWE4N2IwNiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDQsNyArNDQsNyBAQAogCiAgIC8qIHJlYWQtb25seSAqLwogICAudGV4dCA6IEFUKEFERFIoLnRleHQpIC0gTE9BRF9PRkZTRVQpIHsKLQkqKC50ZXh0KQorCVRFWFRfVEVYVAogCVNDSEVEX1RFWFQKIAlMT0NLX1RFWFQKIAlLUFJPQkVTX1RFWFQKQEAgLTc0LDE2ICs3NCwxMCBAQAogICAvKiB3cml0ZWFibGUgKi8KICAgLiA9IEFMSUdOKDQwOTYpOwogICAuZGF0YSA6IEFUKEFERFIoLmRhdGEpIC0gTE9BRF9PRkZTRVQpIHsJLyogRGF0YSAqLwotCSooLmRhdGEpCisJREFUQV9EQVRBCiAJQ09OU1RSVUNUT1JTCiAJfSA6ZGF0YQogCi0gIC5wYXJhdmlydHByb2JlIDogQVQoQUREUigucGFyYXZpcnRwcm9iZSkgLSBMT0FEX09GRlNFVCkgewotICAJX19zdGFydF9wYXJhdmlydHByb2JlID0gLjsKLQkqKC5wYXJhdmlydHByb2JlKQotICAJX19zdG9wX3BhcmF2aXJ0cHJvYmUgPSAuOwotICB9Ci0KICAgLiA9IEFMSUdOKDQwOTYpOwogICAuZGF0YV9ub3NhdmUgOiBBVChBRERSKC5kYXRhX25vc2F2ZSkgLSBMT0FEX09GRlNFVCkgewogICAJX19ub3NhdmVfYmVnaW4gPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2xpYi9tc3Itb24tY3B1LmMgYi9hcmNoL2kzODYvbGliL21zci1vbi1jcHUuYwppbmRleCAxYzQ2YmRhLi43NzY3OTYyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbGliL21zci1vbi1jcHUuYworKysgYi9hcmNoL2kzODYvbGliL21zci1vbi1jcHUuYwpAQCAtNiw2ICs2LDcgQEAKIHN0cnVjdCBtc3JfaW5mbyB7CiAJdTMyIG1zcl9ubzsKIAl1MzIgbCwgaDsKKwlpbnQgZXJyOwogfTsKIAogc3RhdGljIHZvaWQgX19yZG1zcl9vbl9jcHUodm9pZCAqaW5mbykKQEAgLTE1LDIwICsxNiwzOCBAQAogCXJkbXNyKHJ2LT5tc3Jfbm8sIHJ2LT5sLCBydi0+aCk7CiB9CiAKLXZvaWQgcmRtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKQorc3RhdGljIHZvaWQgX19yZG1zcl9zYWZlX29uX2NwdSh2b2lkICppbmZvKQogeworCXN0cnVjdCBtc3JfaW5mbyAqcnYgPSBpbmZvOworCisJcnYtPmVyciA9IHJkbXNyX3NhZmUocnYtPm1zcl9ubywgJnJ2LT5sLCAmcnYtPmgpOworfQorCitzdGF0aWMgaW50IF9yZG1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgsIGludCBzYWZlKQoreworCWludCBlcnIgPSAwOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gY3B1KQotCQlyZG1zcihtc3Jfbm8sICpsLCAqaCk7CisJCWlmIChzYWZlKQorCQkJZXJyID0gcmRtc3Jfc2FmZShtc3Jfbm8sIGwsIGgpOworCQllbHNlCisJCQlyZG1zcihtc3Jfbm8sICpsLCAqaCk7CiAJZWxzZSB7CiAJCXN0cnVjdCBtc3JfaW5mbyBydjsKIAogCQlydi5tc3Jfbm8gPSBtc3Jfbm87Ci0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcmRtc3Jfb25fY3B1LCAmcnYsIDAsIDEpOworCQlpZiAoc2FmZSkgeworCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX19yZG1zcl9zYWZlX29uX2NwdSwKKwkJCQkJCSAmcnYsIDAsIDEpOworCQkJZXJyID0gcnYuZXJyOworCQl9IGVsc2UgeworCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX19yZG1zcl9vbl9jcHUsICZydiwgMCwgMSk7CisJCX0KIAkJKmwgPSBydi5sOwogCQkqaCA9IHJ2Lmg7CiAJfQogCXByZWVtcHRfZW5hYmxlKCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX193cm1zcl9vbl9jcHUodm9pZCAqaW5mbykKQEAgLTM4LDIxICs1Nyw2MyBAQAogCXdybXNyKHJ2LT5tc3Jfbm8sIHJ2LT5sLCBydi0+aCk7CiB9CiAKLXZvaWQgd3Jtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCkKK3N0YXRpYyB2b2lkIF9fd3Jtc3Jfc2FmZV9vbl9jcHUodm9pZCAqaW5mbykKIHsKKwlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKKworCXJ2LT5lcnIgPSB3cm1zcl9zYWZlKHJ2LT5tc3Jfbm8sIHJ2LT5sLCBydi0+aCk7Cit9CisKK3N0YXRpYyBpbnQgX3dybXNyX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgsIGludCBzYWZlKQoreworCWludCBlcnIgPSAwOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gY3B1KQotCQl3cm1zcihtc3Jfbm8sIGwsIGgpOworCQlpZiAoc2FmZSkKKwkJCWVyciA9IHdybXNyX3NhZmUobXNyX25vLCBsLCBoKTsKKwkJZWxzZQorCQkJd3Jtc3IobXNyX25vLCBsLCBoKTsKIAllbHNlIHsKIAkJc3RydWN0IG1zcl9pbmZvIHJ2OwogCiAJCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKIAkJcnYubCA9IGw7CiAJCXJ2LmggPSBoOwotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3dybXNyX29uX2NwdSwgJnJ2LCAwLCAxKTsKKwkJaWYgKHNhZmUpIHsKKwkJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfc2FmZV9vbl9jcHUsCisJCQkJCQkgJnJ2LCAwLCAxKTsKKwkJCWVyciA9IHJ2LmVycjsKKwkJfSBlbHNlIHsKKwkJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfb25fY3B1LCAmcnYsIDAsIDEpOworCQl9CiAJfQogCXByZWVtcHRfZW5hYmxlKCk7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCB3cm1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyIGwsIHUzMiBoKQoreworCV93cm1zcl9vbl9jcHUoY3B1LCBtc3Jfbm8sIGwsIGgsIDApOworfQorCit2b2lkIHJkbXNyX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgKmwsIHUzMiAqaCkKK3sKKwlfcmRtc3Jfb25fY3B1KGNwdSwgbXNyX25vLCBsLCBoLCAwKTsKK30KKworLyogVGhlc2UgInNhZmUiIHZhcmlhbnRzIGFyZSBzbG93ZXIgYW5kIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIHRhcmdldCBNU1IKKyAgIG1heSBub3QgYWN0dWFsbHkgZXhpc3QuICovCitpbnQgd3Jtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyIGwsIHUzMiBoKQoreworCXJldHVybiBfd3Jtc3Jfb25fY3B1KGNwdSwgbXNyX25vLCBsLCBoLCAxKTsKK30KKworaW50IHJkbXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKQoreworCXJldHVybiBfcmRtc3Jfb25fY3B1KGNwdSwgbXNyX25vLCBsLCBoLCAxKTsKIH0KIAogRVhQT1JUX1NZTUJPTChyZG1zcl9vbl9jcHUpOwogRVhQT1JUX1NZTUJPTCh3cm1zcl9vbl9jcHUpOworRVhQT1JUX1NZTUJPTChyZG1zcl9zYWZlX29uX2NwdSk7CitFWFBPUlRfU1lNQk9MKHdybXNyX3NhZmVfb25fY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLWRlZmF1bHQvc2V0dXAuYyBiL2FyY2gvaTM4Ni9tYWNoLWRlZmF1bHQvc2V0dXAuYwppbmRleCBjNzg4MTYyLi43ZjYzNWM3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtZGVmYXVsdC9zZXR1cC5jCkBAIC04MSw3ICs4MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HLAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HIHwgSVJRRl9JUlFQT0xMLAogCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJ0aW1lciIKIH07CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC1nZW5lcmljL2JpZ3NtcC5jIGIvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYwppbmRleCBlOTMyZDM0Li41OGE0NzdiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1nZW5lcmljL2JpZ3NtcC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAogc3RhdGljIGludCBkbWlfYmlnc21wOyAvKiBjYW4gYmUgc2V0IGJ5IGRtaSBzY2FubmVycyAqLwogCi1zdGF0aWMgX19pbml0IGludCBocF9odF9iaWdzbXAoc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCitzdGF0aWMgaW50IGhwX2h0X2JpZ3NtcChzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKIHsKICNpZmRlZiBDT05GSUdfWDg2X0dFTkVSSUNBUkNICiAJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBkZXRlY3RlZDogZm9yY2UgdXNlIG9mIGFwaWM9Ymlnc21wXG4iLCBkLT5pZGVudCk7CkBAIC0zMSw3ICszMSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgYmlnc21wX2RtaV90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGJpZ3NtcF9kbWlfdGFibGVbXSA9IHsKIAl7IGhwX2h0X2JpZ3NtcCwgIkhQIFByb0xpYW50IERMNzYwIEcyIiwgewogCQlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiSFAiKSwKIAkJRE1JX01BVENIKERNSV9CSU9TX1ZFUlNJT04sICJQNDQtIiksCkBAIC00NSw3ICs0NSw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQgX19pbml0IHByb2JlX2JpZ3NtcCh2b2lkKQorc3RhdGljIGludCBwcm9iZV9iaWdzbXAodm9pZCkKIHsgCiAJaWYgKGRlZl90b19iaWdzbXApCiAgICAgICAgIAlkbWlfYmlnc21wID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYyBiL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYwppbmRleCBhN2IzOTk5Li43NGYzZGE2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1nZW5lcmljL3Byb2JlLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9wcm9iZS5jCkBAIC0xMTksOSArMTE5LDcgQEAKIAlyZXR1cm4gMDsJCiB9CiAKLSNpZmRlZiBDT05GSUdfU01QCiBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCiB7CiAJcmV0dXJuIGdlbmFwaWMtPmdldF9hcGljX2lkKCoodW5zaWduZWQgbG9uZyAqKShBUElDX0JBU0UrQVBJQ19JRCkpOwogfQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12aXN3cy9zZXR1cC5jIGIvYXJjaC9pMzg2L21hY2gtdmlzd3Mvc2V0dXAuYwppbmRleCAyMzNlZTIwLi4xZjgxZjEwIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC12aXN3cy9zZXR1cC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3NldHVwLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwID0gewogCS5oYW5kbGVyID0JdGltZXJfaW50ZXJydXB0LAotCS5mbGFncyA9CUlSUUZfRElTQUJMRUQsCisJLmZsYWdzID0JSVJRRl9ESVNBQkxFRCB8IElSUUZfSVJRUE9MTCwKIAkubmFtZSA9CQkidGltZXIiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtdmlzd3Mvdmlzd3NfYXBpYy5jIGIvYXJjaC9pMzg2L21hY2gtdmlzd3Mvdmlzd3NfYXBpYy5jCmluZGV4IDM4YzJiMTMuLjcxMGZhZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3Zpc3dzX2FwaWMuYworKysgYi9hcmNoL2kzODYvbWFjaC12aXN3cy92aXN3c19hcGljLmMKQEAgLTE4LDcgKzE4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvc2V0dXAuYyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvc2V0dXAuYwppbmRleCA0NDdiYjEwLi4yYjU1Njk0IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3NldHVwLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci9zZXR1cC5jCkBAIC00Miw3ICs0Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HLAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HIHwgSVJRRl9JUlFQT0xMLAogCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJ0aW1lciIKIH07CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfYmFzaWMuYyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9iYXNpYy5jCmluZGV4IDhmZTdlNDUuLjliNzdiMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9iYXNpYy5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9iYXNpYy5jCkBAIC0yOTIsOCArMjkyLDggQEAKIHZvaWQKIG1jYV9ubWlfaG9vayh2b2lkKQogewotCV9fdTggZHVtcHZhbCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IGluYigweGY4MjMpOwotCV9fdTggc3dubWkgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSBpbmIoMHhmODEzKTsKKwlfX3U4IGR1bXB2YWwgX19tYXliZV91bnVzZWQgPSBpbmIoMHhmODIzKTsKKwlfX3U4IHN3bm1pIF9fbWF5YmVfdW51c2VkID0gaW5iKDB4ZjgxMyk7CiAKIAkvKiBGSVhNRTogYXNzdW1lIGR1bXAgc3dpdGNoIHByZXNzZWQgKi8KIAkvKiBjaGVjayB0byBzZWUgaWYgdGhlIGR1bXAgc3dpdGNoIHdhcyBwcmVzc2VkICovCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMgYi9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMKaW5kZXggMWE1ZTQ0OC4uYjg3Zjg1NCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CkBAIC0yOCw3ICsyNyw2IEBACiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgotI2luY2x1ZGUgPGFzbS9wZGEuaD4KIAogLyogVExCIHN0YXRlIC0tIHZpc2libGUgZXh0ZXJuYWxseSwgaW5kZXhlZCBwaHlzaWNhbGx5ICovCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGxiX3N0YXRlLCBjcHVfdGxic3RhdGUpIF9fX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsgJmluaXRfbW0sIDAgfTsKQEAgLTQyMyw3ICs0MjEsNyBAQAogCSAgICAgVk9ZQUdFUl9TVVNfSU5fQ09OVFJPTF9QT1JUKTsKIAogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1ID0gYm9vdF9jcHVfaWQ7Ci0Jd3JpdGVfcGRhKGNwdV9udW1iZXIsIGJvb3RfY3B1X2lkKTsKKwl4ODZfd3JpdGVfcGVyY3B1KGNwdV9udW1iZXIsIGJvb3RfY3B1X2lkKTsKIH0KIAogLyoKQEAgLTQzNiw3ICs0MzQsNyBAQAogCiAJKmMgPSBib290X2NwdV9kYXRhOwogCi0JaWRlbnRpZnlfY3B1KGMpOworCWlkZW50aWZ5X3NlY29uZGFyeV9jcHUoYyk7CiB9CiAKIC8qIHNldCB1cCB0aGUgdHJhbXBvbGluZSBhbmQgcmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjb2RlICovCkBAIC00NjAsNyArNDU4LDcgQEAKIAkvKiBleHRlcm5hbCBmdW5jdGlvbnMgbm90IGRlZmluZWQgaW4gdGhlIGhlYWRlcnMgKi8KIAlleHRlcm4gdm9pZCBjYWxpYnJhdGVfZGVsYXkodm9pZCk7CiAKLQlzZWNvbmRhcnlfY3B1X2luaXQoKTsKKwljcHVfaW5pdCgpOwogCiAJLyogT0ssIHdlJ3JlIGluIHRoZSByb3V0aW5lICovCiAJYWNrX0NQSShWSUNfQ1BVX0JPT1RfQ1BJKTsKQEAgLTU3Myw3ICs1NzEsOSBAQAogCS8qIGluaXRfdGFza3MgKGluIHNjaGVkLmMpIGlzIGluZGV4ZWQgbG9naWNhbGx5ICovCiAJc3RhY2tfc3RhcnQuZXNwID0gKHZvaWQgKikgaWRsZS0+dGhyZWFkLmVzcDsKIAotCWluaXRfZ2R0KGNwdSwgaWRsZSk7CisJaW5pdF9nZHQoY3B1KTsKKyAJcGVyX2NwdShjdXJyZW50X3Rhc2ssIGNwdSkgPSBpZGxlOworCWVhcmx5X2dkdF9kZXNjci5hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKIAlpcnFfY3R4X2luaXQoY3B1KTsKIAogCS8qIE5vdGU6IERvbid0IG1vZGlmeSBpbml0aWFsIHNzIG92ZXJyaWRlICovCkBAIC04NjAsOCArODYwLDggQEAKIAogLyogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aXRoIGEgcGh5c2ljYWwgY3B1IG1hc2sgKi8KIHN0YXRpYyB2b2lkCi1mbHVzaF90bGJfb3RoZXJzICh1bnNpZ25lZCBsb25nIGNwdW1hc2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkJdW5zaWduZWQgbG9uZyB2YSkKK3ZveWFnZXJfZmx1c2hfdGxiX290aGVycyAodW5zaWduZWQgbG9uZyBjcHVtYXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgdW5zaWduZWQgbG9uZyB2YSkKIHsKIAlpbnQgc3R1Y2sgPSA1MDAwMDsKIApAQCAtOTEzLDcgKzkxMyw3IEBACiAJY3B1X21hc2sgPSBjcHVzX2FkZHIobW0tPmNwdV92bV9tYXNrKVswXSAmIH4oMSA8PCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWxvY2FsX2ZsdXNoX3RsYigpOwogCWlmIChjcHVfbWFzaykKLQkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIEZMVVNIX0FMTCk7CisJCXZveWFnZXJfZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIEZMVVNIX0FMTCk7CiAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQpAQCAtOTM1LDcgKzkzNSw3IEBACiAJCQlsZWF2ZV9tbShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCX0KIAlpZiAoY3B1X21hc2spCi0JCWZsdXNoX3RsYl9vdGhlcnMoY3B1X21hc2ssIG1tLCBGTFVTSF9BTEwpOworCQl2b3lhZ2VyX2ZsdXNoX3RsYl9vdGhlcnMoY3B1X21hc2ssIG1tLCBGTFVTSF9BTEwpOwogCiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KQEAgLTk1Niw3ICs5NTYsNyBAQAogCX0KIAogCWlmIChjcHVfbWFzaykKLQkJZmx1c2hfdGxiX290aGVycyhjcHVfbWFzaywgbW0sIHZhKTsKKwkJdm95YWdlcl9mbHVzaF90bGJfb3RoZXJzKGNwdV9tYXNrLCBtbSwgdmEpOwogCiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KQEAgLTEwNDUsMTAgKzEwNDUsMTIgQEAKIH0KIAogc3RhdGljIGludAotX19zbXBfY2FsbF9mdW5jdGlvbl9tYXNrICh2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgcmV0cnksCi0JCQkgIGludCB3YWl0LCBfX3UzMiBtYXNrKQordm95YWdlcl9zbXBfY2FsbF9mdW5jdGlvbl9tYXNrIChjcHVtYXNrX3QgY3B1bWFzaywKKwkJCQl2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLAorCQkJCWludCB3YWl0KQogewogCXN0cnVjdCBjYWxsX2RhdGFfc3RydWN0IGRhdGE7CisJdTMyIG1hc2sgPSBjcHVzX2FkZHIoY3B1bWFzaylbMF07CiAKIAltYXNrICY9IH4oMTw8c21wX3Byb2Nlc3Nvcl9pZCgpKTsKIApAQCAtMTA4NCw0NyArMTA4Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIENhbGwgdGhpcyBmdW5jdGlvbiBvbiBhbGwgQ1BVcyB1c2luZyB0aGUgZnVuY3Rpb25faW50ZXJydXB0IGFib3ZlCi0gICAgPGZ1bmM+IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCi0gICAgPGluZm8+IEFuIGFyYml0cmFyeSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLgotICAgIDxyZXRyeT4gSWYgdHJ1ZSwga2VlcCByZXRyeWluZyB1bnRpbCByZWFkeS4KLSAgICA8d2FpdD4gSWYgdHJ1ZSwgd2FpdCB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCi0gICAgW1JFVFVSTlNdIDAgb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIHN0YXR1cyBjb2RlLiBEb2VzIG5vdCByZXR1cm4gdW50aWwKLSAgICByZW1vdGUgQ1BVcyBhcmUgbmVhcmx5IHJlYWR5IHRvIGV4ZWN1dGUgPDxmdW5jPj4gb3IgYXJlIG9yIGhhdmUgZXhlY3V0ZWQuCi0qLwotaW50Ci1zbXBfY2FsbF9mdW5jdGlvbih2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgcmV0cnksCi0JCSAgIGludCB3YWl0KQotewotCV9fdTMyIG1hc2sgPSBjcHVzX2FkZHIoY3B1X29ubGluZV9tYXApWzBdOwotCi0JcmV0dXJuIF9fc21wX2NhbGxfZnVuY3Rpb25fbWFzayhmdW5jLCBpbmZvLCByZXRyeSwgd2FpdCwgbWFzayk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uKTsKLQotLyoKLSAqIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSAtIFJ1biBhIGZ1bmN0aW9uIG9uIGFub3RoZXIgQ1BVCi0gKiBAZnVuYzogVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KLSAqIEBpbmZvOiBBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KLSAqIEBub25hdG9taWM6IEN1cnJlbnRseSB1bnVzZWQuCi0gKiBAd2FpdDogSWYgdHJ1ZSwgd2FpdCB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCi0gKgotICogUmV0cnVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgc3RhdHVzIGNvZGUuCi0gKgotICogRG9lcyBub3QgcmV0dXJuIHVudGlsIHRoZSByZW1vdGUgQ1BVIGlzIG5lYXJseSByZWFkeSB0byBleGVjdXRlIDxmdW5jPgotICogb3IgaXMgb3IgaGFzIGV4ZWN1dGVkLgotICovCi0KLWludAotc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGludCBjcHUsIHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCi0JCQkgaW50IG5vbmF0b21pYywgaW50IHdhaXQpCi17Ci0JX191MzIgbWFzayA9IDEgPDwgY3B1OwotCi0JcmV0dXJuIF9fc21wX2NhbGxfZnVuY3Rpb25fbWFzayhmdW5jLCBpbmZvLCBub25hdG9taWMsIHdhaXQsIG1hc2spOwotfQotRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUpOwotCiAvKiBTb3JyeSBhYm91dCB0aGUgbmFtZS4gIEluIGFuIEFQSUMgYmFzZWQgc3lzdGVtLCB0aGUgQVBJQ3MKICAqIHRoZW1zZWx2ZXMgYXJlIHByb2dyYW1tZWQgdG8gc2VuZCBhIHRpbWVyIGludGVycnVwdC4gIFRoaXMgaXMgdXNlZAogICogYnkgbGludXggdG8gcmVzY2hlZHVsZSB0aGUgcHJvY2Vzc29yLiAgVm95YWdlciBkb2Vzbid0IGhhdmUgdGhpcywKQEAgLTEyMzgsOCArMTE5OSw4IEBACiB9CiAKIC8qIHNlbmQgYSByZXNjaGVkdWxlIENQSSB0byBvbmUgQ1BVIGJ5IHBoeXNpY2FsIENQVSBudW1iZXIqLwotdm9pZAotc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQorc3RhdGljIHZvaWQKK3ZveWFnZXJfc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQogewogCXNlbmRfb25lX0NQSShjcHUsIFZJQ19SRVNDSEVEVUxFX0NQSSk7CiB9CkBAIC0xMjY4LDggKzEyMjksOCBAQAogfQogCiAvKiBicm9hZGNhc3QgYSBoYWx0IHRvIGFsbCBvdGhlciBDUFVzICovCi12b2lkCi1zbXBfc2VuZF9zdG9wKHZvaWQpCitzdGF0aWMgdm9pZAordm95YWdlcl9zbXBfc2VuZF9zdG9wKHZvaWQpCiB7CiAJc21wX2NhbGxfZnVuY3Rpb24oc21wX3N0b3BfY3B1X2Z1bmN0aW9uLCBOVUxMLCAxLCAxKTsKIH0KQEAgLTE5MzEsMjMgKzE4OTIsMjYgQEAKIAkJc21wX3N0b3BfY3B1X2Z1bmN0aW9uKE5VTEwpOwogfQogCi12b2lkIF9faW5pdAotc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCitzdGF0aWMgdm9pZCBfX2luaXQKK3ZveWFnZXJfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CiAJLyogRklYTUU6IGlnbm9yZSBtYXhfY3B1cyBmb3Igbm93ICovCiAJc21wX2Jvb3RfY3B1cygpOwogfQogCi12b2lkIF9fZGV2aW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHZveWFnZXJfc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKIHsKKwlpbml0X2dkdChzbXBfcHJvY2Vzc29yX2lkKCkpOworCXN3aXRjaF90b19uZXdfZ2R0KCk7CisKIAljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXApOwogCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfY2FsbG91dF9tYXApOwogCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfcG9zc2libGVfbWFwKTsKIAljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X3ByZXNlbnRfbWFwKTsKIH0KIAotaW50IF9fZGV2aW5pdAotX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbnQgX19kZXZpbml0Cit2b3lhZ2VyX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQogewogCS8qIFRoaXMgb25seSB3b3JrcyBhdCBib290IGZvciB4ODYuICBTZWUgInJld3JpdGUiIGFib3ZlLiAqLwogCWlmIChjcHVfaXNzZXQoY3B1LCBzbXBfY29tbWVuY2VkX21hc2spKQpAQCAtMTk2Myw4ICsxOTI3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2luaXQgCi1zbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3N0YXRpYyB2b2lkIF9faW5pdAordm95YWdlcl9zbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKIAl6YXBfbG93X21hcHBpbmdzKCk7CiB9CkBAIC0xOTczLDUgKzE5MzcsMTYgQEAKIHNtcF9zZXR1cF9wcm9jZXNzb3JfaWQodm9pZCkKIHsKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXdyaXRlX3BkYShjcHVfbnVtYmVyLCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJeDg2X3dyaXRlX3BlcmNwdShjcHVfbnVtYmVyLCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CisKK3N0cnVjdCBzbXBfb3BzIHNtcF9vcHMgPSB7CisJLnNtcF9wcmVwYXJlX2Jvb3RfY3B1ID0gdm95YWdlcl9zbXBfcHJlcGFyZV9ib290X2NwdSwKKwkuc21wX3ByZXBhcmVfY3B1cyA9IHZveWFnZXJfc21wX3ByZXBhcmVfY3B1cywKKwkuY3B1X3VwID0gdm95YWdlcl9jcHVfdXAsCisJLnNtcF9jcHVzX2RvbmUgPSB2b3lhZ2VyX3NtcF9jcHVzX2RvbmUsCisKKwkuc21wX3NlbmRfc3RvcCA9IHZveWFnZXJfc21wX3NlbmRfc3RvcCwKKwkuc21wX3NlbmRfcmVzY2hlZHVsZSA9IHZveWFnZXJfc21wX3NlbmRfcmVzY2hlZHVsZSwKKwkuc21wX2NhbGxfZnVuY3Rpb25fbWFzayA9IHZveWFnZXJfc21wX2NhbGxfZnVuY3Rpb25fbWFzaywKK307CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMgYi9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMKaW5kZXggZmRjMWQ5Mi4uYjRiMjRlMCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3RocmVhZC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl90aHJlYWQuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vZGlzY29udGlnLmMgYi9hcmNoL2kzODYvbW0vZGlzY29udGlnLmMKaW5kZXggYWE1ODcyMC4uODYwZTkxMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvaTM4Ni9tbS9kaXNjb250aWcuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTk3LDE0ICs5OCw4IEBACiAjZW5kaWYKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmluZF9tYXhfbG93X3Bmbih2b2lkKTsKLWV4dGVybiB2b2lkIGZpbmRfbWF4X3Bmbih2b2lkKTsKIGV4dGVybiB2b2lkIGFkZF9vbmVfaGlnaHBhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqLCBpbnQsIGludCk7Ci0KLWV4dGVybiBzdHJ1Y3QgZTgyMG1hcCBlODIwOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaGlnaGVuZF9wZm4sIGhpZ2hzdGFydF9wZm47Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3BmbjsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmFtX3BhZ2VzOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxoaWdoX3BhZ2VzOwogCiAjZGVmaW5lIExBUkdFX1BBR0VfQllURVMgKFBUUlNfUEVSX1BURSAqIFBBR0VfU0laRSkKIApAQCAtMzYwLDcgKzM1NSw5IEBACiAJbWF4X3pvbmVfcGZuc1taT05FX0RNQV0gPQogCQl2aXJ0X3RvX3BoeXMoKGNoYXIgKilNQVhfRE1BX0FERFJFU1MpID4+IFBBR0VfU0hJRlQ7CiAJbWF4X3pvbmVfcGZuc1taT05FX05PUk1BTF0gPSBtYXhfbG93X3BmbjsKKyNpZmRlZiBDT05GSUdfSElHSE1FTQogCW1heF96b25lX3BmbnNbWk9ORV9ISUdITUVNXSA9IGhpZ2hlbmRfcGZuOworI2VuZGlmCiAKIAkvKiBJZiBTUkFUIGhhcyBub3QgcmVnaXN0ZXJlZCBtZW1vcnksIHJlZ2lzdGVyIGl0IG5vdyAqLwogCWlmIChmaW5kX21heF9wZm5fd2l0aF9hY3RpdmVfcmVnaW9ucygpID09IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9mYXVsdC5jIGIvYXJjaC9pMzg2L21tL2ZhdWx0LmMKaW5kZXggZjUzNGMyOS4uMjlkN2Q2MSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21tL2ZhdWx0LmMKKysrIGIvYXJjaC9pMzg2L21tL2ZhdWx0LmMKQEAgLTE0LDIwICsxNCwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4JCS8qIEZvciB1bmJsYW5rX3NjcmVlbigpICovCiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4JCS8qIGZvciBtYXhfbG93X3BmbiAqLworI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAKIGV4dGVybiB2b2lkIGRpZShjb25zdCBjaGFyICosc3RydWN0IHB0X3JlZ3MgKixsb25nKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9pMzg2L21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggNjI3MmE0Zi4uZWZkZjk1YSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9pMzg2L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21tL2luaXQuYyBiL2FyY2gvaTM4Ni9tbS9pbml0LmMKaW5kZXggMWE3MTk3ZS4uYjIyY2U4ZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21tL2luaXQuYworKysgYi9hcmNoL2kzODYvbW0vaW5pdC5jCkBAIC03NDAsNyArNzQwLDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJlbW92ZV9tZW1vcnkpOwogI2VuZGlmCiAKLXN0cnVjdCBrbWVtX2NhY2hlICpwZ2RfY2FjaGU7CiBzdHJ1Y3Qga21lbV9jYWNoZSAqcG1kX2NhY2hlOwogCiB2b2lkIF9faW5pdCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCkKQEAgLTc1MSwxMiArNzUwLDkgQEAKIAkJcG1kX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInBtZCIsCiAJCQkJCVBUUlNfUEVSX1BNRCpzaXplb2YocG1kX3QpLAogCQkJCQlQVFJTX1BFUl9QTUQqc2l6ZW9mKHBtZF90KSwKLQkJCQkJMCwKKwkJCQkJU0xBQl9QQU5JQywKIAkJCQkJcG1kX2N0b3IsCiAJCQkJCU5VTEwpOwotCQlpZiAoIXBtZF9jYWNoZSkKLQkJCXBhbmljKCJwZ3RhYmxlX2NhY2hlX2luaXQoKTogY2Fubm90IGNyZWF0ZSBwbWQgY2FjaGUiKTsKLQogCQlpZiAoIVNIQVJFRF9LRVJORUxfUE1EKSB7CiAJCQkvKiBJZiB3ZSdyZSBpbiBQQUUgbW9kZSBhbmQgaGF2ZSBhIG5vbi1zaGFyZWQKIAkJCSAgIGtlcm5lbCBwbWQsIHRoZW4gdGhlIHBnZCBzaXplIG11c3QgYmUgYQpAQCAtNzY3LDE0ICs3NjMsNiBAQAogCQkJcGdkX3NpemUgPSBQQUdFX1NJWkU7CiAJCX0KIAl9Ci0JcGdkX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInBnZCIsCi0JCQkJcGdkX3NpemUsCi0JCQkJcGdkX3NpemUsCi0JCQkJMCwKLQkJCQlwZ2RfY3RvciwKLQkJCQkoIVNIQVJFRF9LRVJORUxfUE1EKSA/IHBnZF9kdG9yIDogTlVMTCk7Ci0JaWYgKCFwZ2RfY2FjaGUpCi0JCXBhbmljKCJwZ3RhYmxlX2NhY2hlX2luaXQoKTogQ2Fubm90IGNyZWF0ZSBwZ2QgY2FjaGUiKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9tbWFwLmMgYi9hcmNoL2kzODYvbW0vbW1hcC5jCmluZGV4IGU0NzMwYTEuLjU1MmUwODQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9tbWFwLmMKKysrIGIvYXJjaC9pMzg2L21tL21tYXAuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKgogICogVG9wIG9mIG1tYXAgYXJlYSAoanVzdCBiZWxvdyB0aGUgcHJvY2VzcyBzdGFjaykuCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vcGd0YWJsZS5jIGIvYXJjaC9pMzg2L21tL3BndGFibGUuYwppbmRleCA5YTk2YzE2Li44ZDdjMDg2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvaTM4Ni9tbS9wZ3RhYmxlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9xdWlja2xpc3QuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtMjA1LDggKzIwNiw2IEBACiAgKiBhZ2FpbnN0IHBhZ2VhdHRyLmM7IGl0IGlzIHRoZSB1bmlxdWUgY2FzZSBpbiB3aGljaCBhIHZhbGlkIGNoYW5nZQogICogb2Yga2VybmVsIHBhZ2V0YWJsZXMgY2FuJ3QgYmUgbGF6aWx5IHN5bmNocm9uaXplZCBieSB2bWFsbG9jIGZhdWx0cy4KICAqIHZtYWxsb2MgZmF1bHRzIHdvcmsgYmVjYXVzZSBhdHRhY2hlZCBwYWdldGFibGVzIGFyZSBuZXZlciBmcmVlZC4KLSAqIFRoZSBsb2NraW5nIHNjaGVtZSB3YXMgY2hvc2VuIG9uIHRoZSBiYXNpcyBvZiBtYW5mcmVkJ3MKLSAqIHJlY29tbWVuZGF0aW9ucyBhbmQgaGF2aW5nIG5vIGNvcmUgaW1wYWN0IHdoYXRzb2V2ZXIuCiAgKiAtLSB3bGkKICAqLwogREVGSU5FX1NQSU5MT0NLKHBnZF9sb2NrKTsKQEAgLTIzMiw5ICsyMzEsMTEgQEAKIAkJc2V0X3BhZ2VfcHJpdmF0ZShuZXh0LCAodW5zaWduZWQgbG9uZylwcHJldik7CiB9CiAKKworCiAjaWYgKFBUUlNfUEVSX1BNRCA9PSAxKQogLyogTm9uLVBBRSBwZ2QgY29uc3RydWN0b3IgKi8KLXZvaWQgcGdkX2N0b3Iodm9pZCAqcGdkLCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgdW51c2VkKQordm9pZCBwZ2RfY3Rvcih2b2lkICpwZ2QpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjU2LDcgKzI1Nyw3IEBACiB9CiAjZWxzZSAgLyogUFRSU19QRVJfUE1EID4gMSAqLwogLyogUEFFIHBnZCBjb25zdHJ1Y3RvciAqLwotdm9pZCBwZ2RfY3Rvcih2b2lkICpwZ2QsIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyB1bnVzZWQpCit2b2lkIHBnZF9jdG9yKHZvaWQgKnBnZCkKIHsKIAkvKiBQQUUsIGtlcm5lbCBQTUQgbWF5IGJlIHNoYXJlZCAqLwogCkBAIC0yNzUsMTEgKzI3NiwxMiBAQAogfQogI2VuZGlmCS8qIFBUUlNfUEVSX1BNRCAqLwogCi12b2lkIHBnZF9kdG9yKHZvaWQgKnBnZCwgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIHVudXNlZCkKK3ZvaWQgcGdkX2R0b3Iodm9pZCAqcGdkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7IC8qIGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwogCi0JQlVHX09OKFNIQVJFRF9LRVJORUxfUE1EKTsKKwlpZiAoU0hBUkVEX0tFUk5FTF9QTUQpCisJCXJldHVybjsKIAogCXBhcmF2aXJ0X3JlbGVhc2VfcGQoX19wYShwZ2QpID4+IFBBR0VfU0hJRlQpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwZ2RfbG9jaywgZmxhZ3MpOwpAQCAtMzIxLDcgKzMyMyw3IEBACiBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCWludCBpOwotCXBnZF90ICpwZ2QgPSBrbWVtX2NhY2hlX2FsbG9jKHBnZF9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJcGdkX3QgKnBnZCA9IHF1aWNrbGlzdF9hbGxvYygwLCBHRlBfS0VSTkVMLCBwZ2RfY3Rvcik7CiAKIAlpZiAoUFRSU19QRVJfUE1EID09IDEgfHwgIXBnZCkKIAkJcmV0dXJuIHBnZDsKQEAgLTM0NCw3ICszNDYsNyBAQAogCQlwYXJhdmlydF9yZWxlYXNlX3BkKF9fcGEocG1kKSA+PiBQQUdFX1NISUZUKTsKIAkJcG1kX2NhY2hlX2ZyZWUocG1kLCBpKTsKIAl9Ci0Ja21lbV9jYWNoZV9mcmVlKHBnZF9jYWNoZSwgcGdkKTsKKwlxdWlja2xpc3RfZnJlZSgwLCBwZ2RfZHRvciwgcGdkKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMzYxLDUgKzM2MywxMSBAQAogCQkJcG1kX2NhY2hlX2ZyZWUocG1kLCBpKTsKIAkJfQogCS8qIGluIHRoZSBub24tUEFFIGNhc2UsIGZyZWVfcGd0YWJsZXMoKSBjbGVhcnMgdXNlciBwZ2QgZW50cmllcyAqLwotCWttZW1fY2FjaGVfZnJlZShwZ2RfY2FjaGUsIHBnZCk7CisJcXVpY2tsaXN0X2ZyZWUoMCwgcGdkX2R0b3IsIHBnZCk7CiB9CisKK3ZvaWQgY2hlY2tfcGd0X2NhY2hlKHZvaWQpCit7CisJcXVpY2tsaXN0X3RyaW0oMCwgcGdkX2R0b3IsIDI1LCAxNik7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfaW50LmMgYi9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX2ludC5jCmluZGV4IDY5NWY3MzcuLjExYjdhNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfaW50LmMKKysrIGIvYXJjaC9pMzg2L29wcm9maWxlL25taV9pbnQuYwpAQCAtMTQsMTAgKzE0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL25taS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICAKICNpbmNsdWRlICJvcF9jb3VudGVyLmgiCiAjaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCkBAIC0xMzEsNyArMTMxLDYgQEAKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBvcF9tc3JzICogbXNycyA9ICZjcHVfbXNyc1tjcHVdOwotCW1vZGVsLT5maWxsX2luX2FkZHJlc3Nlcyhtc3JzKTsKIAlubWlfY3B1X3NhdmVfcmVnaXN0ZXJzKG1zcnMpOwogfQogCkBAIC0xNTUsNyArMTU0LDcgQEAKIAlzaXplX3QgY291bnRlcnNfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3BfbXNyKSAqIG1vZGVsLT5udW1fY291bnRlcnM7CiAKIAlpbnQgaTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQljcHVfbXNyc1tpXS5jb3VudGVycyA9IGttYWxsb2MoY291bnRlcnNfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghY3B1X21zcnNbaV0uY291bnRlcnMpIHsKIAkJCXN1Y2Nlc3MgPSAwOwpAQCAtMTk1LDYgKzE5NCw3IEBACiBzdGF0aWMgaW50IG5taV9zZXR1cCh2b2lkKQogewogCWludCBlcnI9MDsKKwlpbnQgY3B1OwogCiAJaWYgKCFhbGxvY2F0ZV9tc3JzKCkpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjA3LDYgKzIwNywxOSBAQAogCS8qIFdlIG5lZWQgdG8gc2VyaWFsaXplIHNhdmUgYW5kIHNldHVwIGZvciBIVCBiZWNhdXNlIHRoZSBzdWJzZXQKIAkgKiBvZiBtc3JzIGFyZSBkaXN0aW5jdCBmb3Igc2F2ZSBhbmQgc2V0dXAgb3BlcmF0aW9ucwogCSAqLworCisJLyogQXNzdW1lIHNhdmVkL3Jlc3RvcmVkIGNvdW50ZXJzIGFyZSB0aGUgc2FtZSBvbiBhbGwgQ1BVcyAqLworCW1vZGVsLT5maWxsX2luX2FkZHJlc3NlcygmY3B1X21zcnNbMF0pOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdSAoY3B1KSB7CisJCWlmIChjcHUgIT0gMCkgeworCQkJbWVtY3B5KGNwdV9tc3JzW2NwdV0uY291bnRlcnMsIGNwdV9tc3JzWzBdLmNvdW50ZXJzLAorCQkJCXNpemVvZihzdHJ1Y3Qgb3BfbXNyKSAqIG1vZGVsLT5udW1fY291bnRlcnMpOworCisJCQltZW1jcHkoY3B1X21zcnNbY3B1XS5jb250cm9scywgY3B1X21zcnNbMF0uY29udHJvbHMsCisJCQkJc2l6ZW9mKHN0cnVjdCBvcF9tc3IpICogbW9kZWwtPm51bV9jb250cm9scyk7CisJCX0KKworCX0KIAlvbl9lYWNoX2NwdShubWlfc2F2ZV9yZWdpc3RlcnMsIE5VTEwsIDAsIDEpOwogCW9uX2VhY2hfY3B1KG5taV9jcHVfc2V0dXAsIE5VTEwsIDAsIDEpOwogCW5taV9lbmFibGVkID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfdGltZXJfaW50LmMgYi9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX3RpbWVyX2ludC5jCmluZGV4IGFiZjBiYTUuLjE0MThlMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfdGltZXJfaW50LmMKKysrIGIvYXJjaC9pMzg2L29wcm9maWxlL25taV90aW1lcl9pbnQuYwpAQCAtMTIsMTIgKzEyLDExIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9ubWkuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAgCiBzdGF0aWMgaW50IHByb2ZpbGVfdGltZXJfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvZml4dXAuYyBiL2FyY2gvaTM4Ni9wY2kvZml4dXAuYwppbmRleCBiNjJlYWZiLi5iOTViNDI5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL2ZpeHVwLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9maXh1cC5jCkBAIC00MzYsMyArNDM2LDE0IEBACiAJCQlwY2lfZWFybHlfZml4dXBfY3lyaXhfNTUzMCk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0xFR0FDWSwKIAkJCXBjaV9lYXJseV9maXh1cF9jeXJpeF81NTMwKTsKKworLyoKKyAqIFNpZW1lbnMgTml4ZG9yZiBBRyBGU0MgTXVsdGlwcm9jZXNzb3IgSW50ZXJydXB0IENvbnRyb2xsZXI6CisgKiBwcmV2ZW50IHVwZGF0ZSBvZiB0aGUgQkFSMCwgd2hpY2ggZG9lc24ndCBsb29rIGxpa2UgYSBub3JtYWwgQkFSLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX3NpZW1lbnNfaW50ZXJydXB0X2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlkZXYtPnJlc291cmNlWzBdLmZsYWdzIHw9IElPUkVTT1VSQ0VfUENJX0ZJWEVEOworfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfU0lFTUVOUywgMHgwMDE1LAorCQkJICBwY2lfc2llbWVuc19pbnRlcnJ1cHRfY29udHJvbGxlcik7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2luaXQuYyBiL2FyY2gvaTM4Ni9wY2kvaW5pdC5jCmluZGV4IDFjZjExYWYuLjNkZTlmOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvaW5pdC5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvaW5pdC5jCkBAIC02LDcgKzYsNyBAQAogICAgaW4gdGhlIHJpZ2h0IHNlcXVlbmNlIGZyb20gaGVyZS4gKi8KIHN0YXRpYyBfX2luaXQgaW50IHBjaV9hY2Nlc3NfaW5pdCh2b2lkKQogewotCWludCB0eXBlIF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gMDsKKwlpbnQgdHlwZSBfX21heWJlX3VudXNlZCA9IDA7CiAKICNpZmRlZiBDT05GSUdfUENJX0RJUkVDVAogCXR5cGUgPSBwY2lfZGlyZWN0X3Byb2JlKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IGUyM2FmNGIuLmRlMWJmZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC0zMSw2ICszMSwxMCBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uICFJQTY0X1NHSV9TTjIKIAorY29uZmlnIFFVSUNLTElTVAorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIE1NVQogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTQ2OCw3ICs0NzIsNyBAQAogCWhlbHAKIAkgIGtleGVjIGlzIGEgc3lzdGVtIGNhbGwgdGhhdCBpbXBsZW1lbnRzIHRoZSBhYmlsaXR5IHRvIHNodXRkb3duIHlvdXIKIAkgIGN1cnJlbnQga2VybmVsLCBhbmQgdG8gc3RhcnQgYW5vdGhlciBrZXJuZWwuICBJdCBpcyBsaWtlIGEgcmVib290Ci0JICBidXQgaXQgaXMgaW5kZXBlZGVudCBvZiB0aGUgc3lzdGVtIGZpcm13YXJlLiAgIEFuZCBsaWtlIGEgcmVib290CisJICBidXQgaXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHN5c3RlbSBmaXJtd2FyZS4gICBBbmQgbGlrZSBhIHJlYm9vdAogCSAgeW91IGNhbiBzdGFydCBhbnkga2VybmVsIHdpdGggaXQsIG5vdCBqdXN0IExpbnV4LgogCiAJICBUaGUgbmFtZSBjb21lcyBmcm9tIHRoZSBzaW1pbGlhcml0eSB0byB0aGUgZXhlYyBzeXN0ZW0gY2FsbC4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vaHdzd19pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKaW5kZXggMjE1M2JjYS4uOTRlNTcxMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKQEAgLTYzLDcgKzYzLDcgQEAKIAlyZXR1cm4gZGV2ICYmIGRldi0+ZG1hX21hc2sgJiYgIWh3aW9tbXVfZG1hX3N1cHBvcnRlZChkZXYsICpkZXYtPmRtYV9tYXNrKTsKIH0KIAotdm9pZAordm9pZCBfX2luaXQKIGh3c3dfaW5pdCAodm9pZCkKIHsKIAkvKiBkZWZhdWx0IHRvIGEgc21hbGxpc2ggMk1CIHN3IEkvTyBUTEIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vYm9vdC9mdy1lbXUuYyBiL2FyY2gvaWE2NC9ocC9zaW0vYm9vdC9mdy1lbXUuYwppbmRleCA1YTBhN2FmLi4zMDBhY2Q5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvc2ltL2Jvb3QvZnctZW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9ib290L2Z3LWVtdS5jCkBAIC0yODcsNyArMjg3LDcgQEAKIAogCW1lbXNldChlZmlfc3lzdGFiLCAwLCBzaXplb2YoZWZpX3N5c3RhYikpOwogCWVmaV9zeXN0YWItPmhkci5zaWduYXR1cmUgPSBFRklfU1lTVEVNX1RBQkxFX1NJR05BVFVSRTsKLQllZmlfc3lzdGFiLT5oZHIucmV2aXNpb24gID0gRUZJX1NZU1RFTV9UQUJMRV9SRVZJU0lPTjsKKwllZmlfc3lzdGFiLT5oZHIucmV2aXNpb24gID0gKCgxIDw8IDE2KSB8IDAwKTsKIAllZmlfc3lzdGFiLT5oZHIuaGVhZGVyc2l6ZSA9IHNpemVvZihlZmlfc3lzdGFiLT5oZHIpOwogCWVmaV9zeXN0YWItPmZ3X3ZlbmRvciA9IF9fcGEoIkhcMGVcMHdcMGxcMGVcMHRcMHRcMC1cMFBcMGFcMGNcMGtcMGFcMHJcMGRcMFwwIik7CiAJZWZpX3N5c3RhYi0+ZndfcmV2aXNpb24gPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvYXVkaXQuYyBiL2FyY2gvaWE2NC9pYTMyL2F1ZGl0LmMKaW5kZXggOTJkN2QwYy4uODg1MGZlNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvYXVkaXQuYworKysgYi9hcmNoL2lhNjQvaWEzMi9hdWRpdC5jCkBAIC0yMCw2ICsyMCwxMSBAQAogfjBVCiB9OwogCit1bnNpZ25lZCBpYTMyX3NpZ25hbF9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3NpZ25hbC5oPgorfjBVCit9OworCiBpbnQgaWEzMl9jbGFzc2lmeV9zeXNjYWxsKHVuc2lnbmVkIHN5c2NhbGwpCiB7CiAJc3dpdGNoKHN5c2NhbGwpIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUwppbmRleCA2ODdlNWZkLi45OWI2NjVlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMKKysrIGIvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCkBAIC01Miw0MyArNTIsNiBAQAogCWJyLnJldC5zcHRrLm1hbnkgcnAKIEVORChpYTMyX2Nsb25lKQogCi1FTlRSWShzeXMzMl9ydF9zaWdzdXNwZW5kKQotCS5wcm9sb2d1ZSBBU01fVU5XX1BSTEdfUlB8QVNNX1VOV19QUkxHX1BGUywgQVNNX1VOV19QUkxHX0dSU0FWRSg4KQotCWFsbG9jIGxvYzE9YXIucGZzLDgsMiwzLDAJCS8vIHByZXNlcnZlIGFsbCBlaWdodCBpbnB1dCByZWdzCi0JbW92IGxvYzA9cnAKLQltb3Ygb3V0MD1pbjAJCQkJLy8gbWFzawotCW1vdiBvdXQxPWluMQkJCQkvLyBzaWdzZXRzaXplCi0JbW92IG91dDI9c3AJCQkJLy8gb3V0MiA9ICZzaWdzY3JhdGNoCi0JLmZmcmFtZSAxNgotCWFkZHMgc3A9LTE2LHNwCQkJCS8vIGFsbG9jYXRlIGR1bW15ICJzaWdzY3JhdGNoIgotCTs7Ci0JLmJvZHkKLQlici5jYWxsLnNwdGsubWFueSBycD1pYTMyX3J0X3NpZ3N1c3BlbmQKLTE6CS5yZXN0b3JlIHNwCi0JYWRkcyBzcD0xNixzcAotCW1vdiBycD1sb2MwCi0JbW92IGFyLnBmcz1sb2MxCi0JYnIucmV0LnNwdGsubWFueSBycAotRU5EKHN5czMyX3J0X3NpZ3N1c3BlbmQpCi0KLUVOVFJZKHN5czMyX3NpZ3N1c3BlbmQpCi0JLnByb2xvZ3VlIEFTTV9VTldfUFJMR19SUHxBU01fVU5XX1BSTEdfUEZTLCBBU01fVU5XX1BSTEdfR1JTQVZFKDgpCi0JYWxsb2MgbG9jMT1hci5wZnMsOCwyLDMsMAkJLy8gcHJlc2VydmUgYWxsIGVpZ2h0IGlucHV0IHJlZ3MKLQltb3YgbG9jMD1ycAotCW1vdiBvdXQwPWluMgkJCQkvLyBtYXNrIChmaXJzdCB0d28gYXJncyBhcmUgaWdub3JlZCkKLQk7OwotCW1vdiBvdXQxPXNwCQkJCS8vIG91dDEgPSAmc2lnc2NyYXRjaAotCS5mZnJhbWUgMTYKLQlhZGRzIHNwPS0xNixzcAkJCQkvLyBhbGxvY2F0ZSBkdW1teSAic2lnc2NyYXRjaCIKLQkuYm9keQotCWJyLmNhbGwuc3B0ay5tYW55IHJwPWlhMzJfc2lnc3VzcGVuZAotMToJLnJlc3RvcmUgc3AKLQlhZGRzIHNwPTE2LHNwCi0JbW92IHJwPWxvYzAKLQltb3YgYXIucGZzPWxvYzEKLQlici5yZXQuc3B0ay5tYW55IHJwCi1FTkQoc3lzMzJfc2lnc3VzcGVuZCkKLQogR0xPQkFMX0VOVFJZKGlhMzJfcmV0X2Zyb21fY2xvbmUpCiAJUFRfUkVHU19VTldJTkRfSU5GTygwKQogewkvKgpAQCAtMzg5LDcgKzM1Miw3IEBACiAJZGF0YTggc3lzX3J0X3NpZ3BlbmRpbmcKIAlkYXRhOCBjb21wYXRfc3lzX3J0X3NpZ3RpbWVkd2FpdAogCWRhdGE4IHN5czMyX3J0X3NpZ3F1ZXVlaW5mbwotCWRhdGE4IHN5czMyX3J0X3NpZ3N1c3BlbmQKKwlkYXRhOCBjb21wYXRfc3lzX3J0X3NpZ3N1c3BlbmQKIAlkYXRhOCBzeXMzMl9wcmVhZAkgIC8qIDE4MCAqLwogCWRhdGE4IHN5czMyX3B3cml0ZQogCWRhdGE4IHN5c19jaG93bgkvKiAxNi1iaXQgdmVyc2lvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9sZHQuYyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfbGR0LmMKaW5kZXggYTE1MjczOC4uMTZkNTFjMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9sZHQuYworKysgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2xkdC5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX3NpZ25hbC5jIGIvYXJjaC9pYTY0L2lhMzIvaWEzMl9zaWduYWwuYwppbmRleCBiMzM1NWE5Li44NWU4MmYzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9pYTMyX3NpZ25hbC5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfc2lnbmFsLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KQEAgLTQ1Miw1OSArNDUxLDIwIEBACiAJCXNhLT5zYS5zYV9oYW5kbGVyID0gKF9fc2lnaGFuZGxlcl90KSAoKCh1bnNpZ25lZCBsb25nKSByZXN0b3JlciA8PCAzMikgfCBoYW5kbGVyKTsKIH0KIAotbG9uZwotX19pYTMyX3J0X3NpZ3N1c3BlbmQgKGNvbXBhdF9zaWdzZXRfdCAqc3NldCwgdW5zaWduZWQgaW50IHNpZ3NldHNpemUsIHN0cnVjdCBzaWdzY3JhdGNoICpzY3IpCithc21saW5rYWdlIGxvbmcKK3N5czMyX3NpZ3N1c3BlbmQgKGludCBoaXN0b3J5MCwgaW50IGhpc3RvcnkxLCBvbGRfc2lnc2V0X3QgbWFzaykKIHsKLQlleHRlcm4gbG9uZyBpYTY0X2RvX3NpZ25hbCAoc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHNpZ3NjcmF0Y2ggKnNjciwgbG9uZyBpbl9zeXNjYWxsKTsKLQlzaWdzZXRfdCBvbGRzZXQsIHNldDsKLQotCXNjci0+c2NyYXRjaF91bmF0ID0gMDsJLyogYXZvaWQgbGVha2luZyBrZXJuZWwgYml0cyB0byB1c2VyIGxldmVsICovCi0JbWVtc2V0KCZzZXQsIDAsIHNpemVvZihzZXQpKTsKLQotCW1lbWNweSgmc2V0LnNpZywgJnNzZXQtPnNpZywgc2lnc2V0c2l6ZSk7Ci0KLQlzaWdkZWxzZXRtYXNrKCZzZXQsIH5fQkxPQ0tBQkxFKTsKLQorCW1hc2sgJj0gX0JMT0NLQUJMRTsKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQl7Ci0JCW9sZHNldCA9IGN1cnJlbnQtPmJsb2NrZWQ7Ci0JCWN1cnJlbnQtPmJsb2NrZWQgPSBzZXQ7Ci0JCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0JfQorCWN1cnJlbnQtPnNhdmVkX3NpZ21hc2sgPSBjdXJyZW50LT5ibG9ja2VkOworCXNpZ2luaXRzZXQoJmN1cnJlbnQtPmJsb2NrZWQsIG1hc2spOworCXJlY2FsY19zaWdwZW5kaW5nKCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCS8qCi0JICogVGhlIHJldHVybiBiZWxvdyB1c3VhbGx5IHJldHVybnMgdG8gdGhlIHNpZ25hbCBoYW5kbGVyLiAgV2UgbmVlZCB0byBwcmUtc2V0IHRoZQotCSAqIGNvcnJlY3QgZXJyb3IgY29kZSBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSByaWdodCB2YWx1ZXMgZ2V0IHNhdmVkIGluIHNpZ2NvbnRleHQKLQkgKiBieSBpYTY0X2RvX3NpZ25hbC4KLQkgKi8KLQlzY3ItPnB0LnI4ID0gLUVJTlRSOwotCXdoaWxlICgxKSB7Ci0JCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCQlzY2hlZHVsZSgpOwotCQlpZiAoaWE2NF9kb19zaWduYWwoJm9sZHNldCwgc2NyLCAxKSkKLQkJCXJldHVybiAtRUlOVFI7Ci0JfQotfQotCi1hc21saW5rYWdlIGxvbmcKLWlhMzJfcnRfc2lnc3VzcGVuZCAoY29tcGF0X3NpZ3NldF90IF9fdXNlciAqdXNldCwgdW5zaWduZWQgaW50IHNpZ3NldHNpemUsIHN0cnVjdCBzaWdzY3JhdGNoICpzY3IpCi17Ci0JY29tcGF0X3NpZ3NldF90IHNldDsKLQotCWlmIChzaWdzZXRzaXplID4gc2l6ZW9mKGNvbXBhdF9zaWdzZXRfdCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZzZXQuc2lnLCAmdXNldC0+c2lnLCBzaWdzZXRzaXplKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gX19pYTMyX3J0X3NpZ3N1c3BlbmQoJnNldCwgc2lnc2V0c2l6ZSwgc2NyKTsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1pYTMyX3NpZ3N1c3BlbmQgKHVuc2lnbmVkIGludCBtYXNrLCBzdHJ1Y3Qgc2lnc2NyYXRjaCAqc2NyKQotewotCXJldHVybiBfX2lhMzJfcnRfc2lnc3VzcGVuZCgoY29tcGF0X3NpZ3NldF90ICopICZtYXNrLCBzaXplb2YobWFzayksIHNjcik7CisJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJc2NoZWR1bGUoKTsKKwlzZXRfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJcmV0dXJuIC1FUkVTVEFSVE5PSEFORDsKIH0KIAogYXNtbGlua2FnZSBsb25nCkBAIC04MTEsNyArNzcxLDExIEBACiAJfQogCS8qIExlZ2FjeSBzdGFjayBzd2l0Y2hpbmcgbm90IHN1cHBvcnRlZCAqLwogCi0JcmV0dXJuICh2b2lkIF9fdXNlciAqKSgoZXNwIC0gZnJhbWVfc2l6ZSkgJiAtOHVsKTsKKwllc3AgLT0gZnJhbWVfc2l6ZTsKKwkvKiBBbGlnbiB0aGUgc3RhY2sgcG9pbnRlciBhY2NvcmRpbmcgdG8gdGhlIGkzODYgQUJJLAorCSAqIGkuZS4gc28gdGhhdCBvbiBmdW5jdGlvbiBlbnRyeSAoKHNwICsgNCkgJiAxNSkgPT0gMC4gKi8KKwllc3AgPSAoKGVzcCArIDQpICYgLTE2dWwpIC0gNDsKKwlyZXR1cm4gKHZvaWQgX191c2VyICopIGVzcDsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9zdXBwb3J0LmMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX3N1cHBvcnQuYwppbmRleCA2YWY0MDBhLi5iZWVhN2EwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9pYTMyX3N1cHBvcnQuYworKysgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX3N1cHBvcnQuYwpAQCAtMjUyLDEwICsyNTIsOCBAQAogCQlleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKnBhcnRpYWxfcGFnZV9jYWNoZXA7CiAKIAkJcGFydGlhbF9wYWdlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJwYXJ0aWFsX3BhZ2VfY2FjaGUiLAotCQkJCQkJCXNpemVvZihzdHJ1Y3QgcGFydGlhbF9wYWdlKSwgMCwgMCwKLQkJCQkJCQlOVUxMLCBOVUxMKTsKLQkJaWYgKCFwYXJ0aWFsX3BhZ2VfY2FjaGVwKQotCQkJcGFuaWMoIkNhbm5vdCBjcmVhdGUgcGFydGlhbCBwYWdlIFNMQUIgY2FjaGUiKTsKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcGFydGlhbF9wYWdlKSwKKwkJCQkJCTAsIFNMQUJfUEFOSUMsIE5VTEwsIE5VTEwpOwogCX0KICNlbmRpZgogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLXByb2Nlc3Nvci5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLXByb2Nlc3Nvci5jCmluZGV4IDRkNDk5M2EuLjVhMjE2YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS1wcm9jZXNzb3IuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGktcHJvY2Vzc29yLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogCWJ1ZlswXSA9IEFDUElfUERDX1JFVklTSU9OX0lEOwogCWJ1ZlsxXSA9IDE7Ci0JYnVmWzJdIHw9IEFDUElfUERDX0VTVF9DQVBBQklMSVRZX1NNUDsKKwlidWZbMl0gPSBBQ1BJX1BEQ19FU1RfQ0FQQUJJTElUWV9TTVA7CiAKIAlvYmotPnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwogCW9iai0+YnVmZmVyLmxlbmd0aCA9IDEyOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwppbmRleCAzNTQ5Yzk0Li4xMDNkZDhlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwpAQCAtNjcsNyArNjcsOCBAQAogdW5zaWduZWQgaW50IGFjcGlfY3BlaV9vdmVycmlkZTsKIHVuc2lnbmVkIGludCBhY3BpX2NwZWlfcGh5c19jcHVpZDsKIAotY29uc3QgY2hhciAqYWNwaV9nZXRfc3lzbmFtZSh2b2lkKQorY29uc3QgY2hhciBfX2luaXQgKgorYWNwaV9nZXRfc3lzbmFtZSh2b2lkKQogewogI2lmZGVmIENPTkZJR19JQTY0X0dFTkVSSUMKIAl1bnNpZ25lZCBsb25nIHJzZHBfcGh5czsKQEAgLTc5MSw3ICs3OTIsNyBAQAogZWFybHlfcGFyYW0oImFkZGl0aW9uYWxfY3B1cyIsIHNldHVwX2FkZGl0aW9uYWxfY3B1cyk7CiAKIC8qCi0gKiBjcHVfcG9zc2libGVfbWFwIHNob3VsZCBiZSBzdGF0aWMsIGl0IGNhbm5vdCBjaGFuZ2UgYXMgY3B1J3MKKyAqIGNwdV9wb3NzaWJsZV9tYXAgc2hvdWxkIGJlIHN0YXRpYywgaXQgY2Fubm90IGNoYW5nZSBhcyBDUFVzCiAgKiBhcmUgb25saW5lZCwgb3Igb2ZmbGluZWQuIFRoZSByZWFzb24gaXMgcGVyLWNwdSBkYXRhLXN0cnVjdHVyZXMKICAqIGFyZSBhbGxvY2F0ZWQgYnkgc29tZSBtb2R1bGVzIGF0IGluaXQgdGltZSwgYW5kIGRvbnQgZXhwZWN0IHRvCiAgKiBkbyB0aGlzIGR5bmFtaWNhbGx5IG9uIGNwdSBhcnJpdmFsL2RlcGFydHVyZS4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYXVkaXQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYXVkaXQuYwppbmRleCAwNDY4MjU1Li5mMzgwMmFlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2F1ZGl0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hdWRpdC5jCkBAIC0yMyw2ICsyMywyMCBAQAogfjBVCiB9OwogCitzdGF0aWMgdW5zaWduZWQgc2lnbmFsX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfc2lnbmFsLmg+Cit+MFUKK307CisKK2ludCBhdWRpdF9jbGFzc2lmeV9hcmNoKGludCBhcmNoKQoreworI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKKwlpZiAoYXJjaCA9PSBBVURJVF9BUkNIX0kzODYpCisJCXJldHVybiAxOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKIGludCBhdWRpdF9jbGFzc2lmeV9zeXNjYWxsKGludCBhYmksIHVuc2lnbmVkIHN5c2NhbGwpCiB7CiAjaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVApAQCAtNDksMTUgKzYzLDE4IEBACiAJZXh0ZXJuIF9fdTMyIGlhMzJfd3JpdGVfY2xhc3NbXTsKIAlleHRlcm4gX191MzIgaWEzMl9yZWFkX2NsYXNzW107CiAJZXh0ZXJuIF9fdTMyIGlhMzJfY2hhdHRyX2NsYXNzW107CisJZXh0ZXJuIF9fdTMyIGlhMzJfc2lnbmFsX2NsYXNzW107CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfV1JJVEVfMzIsIGlhMzJfd3JpdGVfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1JFQURfMzIsIGlhMzJfcmVhZF9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfRElSX1dSSVRFXzMyLCBpYTMyX2Rpcl9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfQ0hBVFRSXzMyLCBpYTMyX2NoYXR0cl9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfU0lHTkFMXzMyLCBpYTMyX3NpZ25hbF9jbGFzcyk7CiAjZW5kaWYKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19XUklURSwgd3JpdGVfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1JFQUQsIHJlYWRfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0RJUl9XUklURSwgZGlyX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFIsIGNoYXR0cl9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfU0lHTkFMLCBzaWduYWxfY2xhc3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2NyYXNoLmMgYi9hcmNoL2lhNjQva2VybmVsL2NyYXNoLmMKaW5kZXggODBhOTRlNy4uMWQ2NGVmNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2guYwpAQCAtMTYsOCArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAKLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL21jYS5oPgogCiBpbnQga2R1bXBfc3RhdHVzW05SX0NQVVNdOwpAQCAtNzQsNyArNzQsNyBAQAogCWJ1ZiA9ICh1NjQgKikgcGVyX2NwdV9wdHIoY3Jhc2hfbm90ZXMsIGNwdSk7CiAJaWYgKCFidWYpCiAJCXJldHVybjsKLQlidWYgPSBhcHBlbmRfZWxmX25vdGUoYnVmLCAiQ09SRSIsIE5UX1BSU1RBVFVTLCBwcnN0YXR1cywKKwlidWYgPSBhcHBlbmRfZWxmX25vdGUoYnVmLCBLRVhFQ19DT1JFX05PVEVfTkFNRSwgTlRfUFJTVEFUVVMsIHByc3RhdHVzLAogCQkJc2l6ZW9mKCpwcnN0YXR1cykpOwogCWZpbmFsX25vdGUoYnVmKTsKIH0KQEAgLTE1NiwyNCArMTU2LDMwIEBACiAJaWYgKCFrZHVtcF9vbl9pbml0KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKLQlpZiAodmFsICE9IERJRV9JTklUX01PTkFSQ0hfRU5URVIgJiYKLQkgICAgdmFsICE9IERJRV9JTklUX1NMQVZFX0VOVEVSICYmCisJaWYgKHZhbCAhPSBESUVfSU5JVF9NT05BUkNIX0xFQVZFICYmCisJICAgIHZhbCAhPSBESUVfSU5JVF9TTEFWRV9MRUFWRSAmJgorCSAgICB2YWwgIT0gRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTICYmCiAJICAgIHZhbCAhPSBESUVfTUNBX1JFTkRaVk9VU19MRUFWRSAmJgogCSAgICB2YWwgIT0gRElFX01DQV9NT05BUkNIX0xFQVZFKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAluZCA9IChzdHJ1Y3QgaWE2NF9tY2Ffbm90aWZ5X2RpZSAqKWFyZ3MtPmVycjsKLQkvKiBSZWFzb24gY29kZSAxIG1lYW5zIG1hY2hpbmUgY2hlY2sgcmVuZGV6b3VzKi8KLQlpZiAoKHZhbCA9PSBESUVfSU5JVF9NT05BUkNIX0VOVEVSIHx8IHZhbCA9PSBESUVfSU5JVF9TTEFWRV9FTlRFUikgJiYKLQkJIG5kLT5zb3MtPnJ2X3JjID09IDEpCisJLyogUmVhc29uIGNvZGUgMSBtZWFucyBtYWNoaW5lIGNoZWNrIHJlbmRlenZvdXMqLworCWlmICgodmFsID09IERJRV9JTklUX01PTkFSQ0hfTEVBVkUgfHwgdmFsID09IERJRV9JTklUX1NMQVZFX0xFQVZFCisJICAgIHx8IHZhbCA9PSBESUVfSU5JVF9NT05BUkNIX1BST0NFU1MpICYmIG5kLT5zb3MtPnJ2X3JjID09IDEpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCXN3aXRjaCAodmFsKSB7Ci0JCWNhc2UgRElFX0lOSVRfTU9OQVJDSF9FTlRFUjoKKwkJY2FzZSBESUVfSU5JVF9NT05BUkNIX1BST0NFU1M6CisJCQlhdG9taWNfc2V0KCZrZHVtcF9pbl9wcm9ncmVzcywgMSk7CisJCQkqKG5kLT5tb25hcmNoX2NwdSkgPSAtMTsKKwkJCWJyZWFrOworCQljYXNlIERJRV9JTklUX01PTkFSQ0hfTEVBVkU6CiAJCQltYWNoaW5lX2tkdW1wX29uX2luaXQoKTsKIAkJCWJyZWFrOwotCQljYXNlIERJRV9JTklUX1NMQVZFX0VOVEVSOgotCQkJdW53X2luaXRfcnVubmluZyhrZHVtcF9jcHVfZnJlZXplLCBOVUxMKTsKKwkJY2FzZSBESUVfSU5JVF9TTEFWRV9MRUFWRToKKwkJCWlmIChhdG9taWNfcmVhZCgma2R1bXBfaW5fcHJvZ3Jlc3MpKQorCQkJCXVud19pbml0X3J1bm5pbmcoa2R1bXBfY3B1X2ZyZWV6ZSwgTlVMTCk7CiAJCQlicmVhazsKIAkJY2FzZSBESUVfTUNBX1JFTkRaVk9VU19MRUFWRToKIAkJCWlmIChhdG9taWNfcmVhZCgma2R1bXBfaW5fcHJvZ3Jlc3MpKQpAQCAtMjE1LDggKzIyMSwxMCBAQAogc3RhdGljIGludAogbWFjaGluZV9jcmFzaF9zZXR1cCh2b2lkKQogeworCS8qIGJlIG5vdGlmaWVkIGJlZm9yZSBkZWZhdWx0X21vbmFyY2hfaW5pdF9wcm9jZXNzICovCiAJc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBrZHVtcF9pbml0X25vdGlmaWVyX25iID0gewogCQkubm90aWZpZXJfY2FsbCA9IGtkdW1wX2luaXRfbm90aWZpZXIsCisJCS5wcmlvcml0eSA9IDEsCiAJfTsKIAlpbnQgcmV0OwogCWlmKChyZXQgPSByZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmtkdW1wX2luaXRfbm90aWZpZXJfbmIpKSAhPSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKaW5kZXggNzhkMjliNy4uNzVlYzM0NyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCkBAIC00NDUsMTEgKzQ0NSwxMSBAQAogCQlwYW5pYygiV29haCEgQ2FuJ3QgZmluZCBFRkkgc3lzdGVtIHRhYmxlLlxuIik7CiAJaWYgKGVmaS5zeXN0YWItPmhkci5zaWduYXR1cmUgIT0gRUZJX1NZU1RFTV9UQUJMRV9TSUdOQVRVUkUpCiAJCXBhbmljKCJXb2FoISBFRkkgc3lzdGVtIHRhYmxlIHNpZ25hdHVyZSBpbmNvcnJlY3RcbiIpOwotCWlmICgoZWZpLnN5c3RhYi0+aGRyLnJldmlzaW9uIF4gRUZJX1NZU1RFTV9UQUJMRV9SRVZJU0lPTikgPj4gMTYgIT0gMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogRUZJIHN5c3RlbSB0YWJsZSBtYWpvciB2ZXJzaW9uIG1pc21hdGNoOiAiCi0JCSAgICAgICAiZ290ICVkLiUwMmQsIGV4cGVjdGVkICVkLiUwMmRcbiIsCi0JCSAgICAgICBlZmkuc3lzdGFiLT5oZHIucmV2aXNpb24gPj4gMTYsIGVmaS5zeXN0YWItPmhkci5yZXZpc2lvbiAmIDB4ZmZmZiwKLQkJICAgICAgIEVGSV9TWVNURU1fVEFCTEVfUkVWSVNJT04gPj4gMTYsIEVGSV9TWVNURU1fVEFCTEVfUkVWSVNJT04gJiAweGZmZmYpOworCWlmICgoZWZpLnN5c3RhYi0+aGRyLnJldmlzaW9uID4+IDE2KSA9PSAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBFRkkgc3lzdGVtIHRhYmxlIHZlcnNpb24gIgorCQkgICAgICAgIiVkLiUwMmQsIGV4cGVjdGVkIDEuMDAgb3IgZ3JlYXRlclxuIiwKKwkJICAgICAgIGVmaS5zeXN0YWItPmhkci5yZXZpc2lvbiA+PiAxNiwKKwkJICAgICAgIGVmaS5zeXN0YWItPmhkci5yZXZpc2lvbiAmIDB4ZmZmZik7CiAKIAljb25maWdfdGFibGVzID0gX192YShlZmkuc3lzdGFiLT50YWJsZXMpOwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggNTVmZDJkNS4uOTVmNTE3NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtMTE5OSwzMiArMTE5OSw2IEBACiAJYnIucmV0LnNwdGsubWFueSBycAogRU5EKG5vdGlmeV9yZXN1bWVfdXNlcikKIAotR0xPQkFMX0VOVFJZKHN5c19ydF9zaWdzdXNwZW5kKQotCS5wcm9sb2d1ZSBBU01fVU5XX1BSTEdfUlB8QVNNX1VOV19QUkxHX1BGUywgQVNNX1VOV19QUkxHX0dSU0FWRSg4KQotCWFsbG9jIGxvYzE9YXIucGZzLDgsMiwzLDAgLy8gcHJlc2VydmUgYWxsIGVpZ2h0IGlucHV0IHJlZ3MgaW4gY2FzZSBvZiBzeXNjYWxsIHJlc3RhcnQhCi0JbW92IHI5PWFyLnVuYXQKLQltb3YgbG9jMD1ycAkJCQkvLyBzYXZlIHJldHVybiBhZGRyZXNzCi0JbW92IG91dDA9aW4wCQkJCS8vIG1hc2sKLQltb3Ygb3V0MT1pbjEJCQkJLy8gc2lnc2V0c2l6ZQotCWFkZHMgb3V0Mj04LHNwCQkJCS8vIG91dDI9JnNpZ3NjcmF0Y2gtPmFyX3BmcwotCTs7Ci0JLmZmcmFtZSAxNgotCS5zcGlsbHNwIGFyLnVuYXQsIDE2Ci0Jc3Q4IFtzcF09cjksLTE2CQkJCS8vIGFsbG9jYXRlIHNwYWNlIGZvciBhci51bmF0IGFuZCBzYXZlIGl0Ci0Jc3Q4IFtvdXQyXT1sb2MxLC04CQkJLy8gc2F2ZSBhci5wZnMsIG91dDI9JnNpZ3NjcmF0Y2gKLQkuYm9keQotCWJyLmNhbGwuc3B0ay5tYW55IHJwPWlhNjRfcnRfc2lnc3VzcGVuZAotLnJldDE3OgkucmVzdG9yZSBzcAotCWFkZHMgc3A9MTYsc3AJCQkJLy8gcG9wIHNjcmF0Y2ggc3RhY2sgc3BhY2UKLQk7OwotCWxkOCByOT1bc3BdCQkJCS8vIGxvYWQgbmV3IHVuYXQgZnJvbSBzdy0+Y2FsbGVyX3VuYXQKLQltb3YgcnA9bG9jMAotCTs7Ci0JbW92IGFyLnVuYXQ9cjkKLQltb3YgYXIucGZzPWxvYzEKLQlici5yZXQuc3B0ay5tYW55IHJwCi1FTkQoc3lzX3J0X3NpZ3N1c3BlbmQpCi0KIEVOVFJZKHN5c19ydF9zaWdyZXR1cm4pCiAJUFRfUkVHU19VTldJTkRfSU5GTygwKQogCS8qCkBAIC0xNTk4LDggKzE1NzIsOCBAQAogCWRhdGE4IHN5c19yZWFkbGlua2F0CiAJZGF0YTggc3lzX2ZjaG1vZGF0CiAJZGF0YTggc3lzX2ZhY2Nlc3NhdAotCWRhdGE4IHN5c19uaV9zeXNjYWxsCQkJLy8gcmVzZXJ2ZWQgZm9yIHBzZWxlY3QKLQlkYXRhOCBzeXNfbmlfc3lzY2FsbAkJCS8vIDEyOTUgcmVzZXJ2ZWQgZm9yIHBwb2xsCisJZGF0YTggc3lzX3BzZWxlY3Q2CisJZGF0YTggc3lzX3Bwb2xsCiAJZGF0YTggc3lzX3Vuc2hhcmUKIAlkYXRhOCBzeXNfc3BsaWNlCiAJZGF0YTggc3lzX3NldF9yb2J1c3RfbGlzdApAQCAtMTYwOSw1ICsxNTgzLDEwIEBACiAJZGF0YTggc3lzX3Ztc3BsaWNlCiAJZGF0YTggc3lzX25pX3N5c2NhbGwJCQkvLyByZXNlcnZlZCBmb3IgbW92ZV9wYWdlcwogCWRhdGE4IHN5c19nZXRjcHUKKwlkYXRhOCBzeXNfZXBvbGxfcHdhaXQJCQkvLyAxMzA1CisJZGF0YTggc3lzX3V0aW1lbnNhdAorCWRhdGE4IHN5c19zaWduYWxmZAorCWRhdGE4IHN5c190aW1lcmZkCisJZGF0YTggc3lzX2V2ZW50ZmQKIAogCS5vcmcgc3lzX2NhbGxfdGFibGUgKyA4Kk5SX3N5c2NhbGxzCS8vIGd1YXJkIGFnYWluc3QgZmFpbHVyZXMgdG8gaW5jcmVhc2UgTlJfc3lzY2FsbHMKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZXJyX2luamVjdC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9lcnJfaW5qZWN0LmMKaW5kZXggZDNlOWYzMy4uYjY0MjY0OCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lcnJfaW5qZWN0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lcnJfaW5qZWN0LmMKQEAgLTIzNiw5ICsyMzYsMTEgQEAKIAlzeXNfZGV2ID0gZ2V0X2NwdV9zeXNkZXYoY3B1KTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgogCQllcnJfaW5qZWN0X2FkZF9kZXYoc3lzX2Rldik7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RFQUQ6CisJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCWVycl9pbmplY3RfcmVtb3ZlX2RldihzeXNfZGV2KTsKIAkJYnJlYWs7CiAJfQpAQCAtMjg5LDUgKzI5MSw1IEBACiBtb2R1bGVfZXhpdChlcnJfaW5qZWN0X2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJGZW5naHVhIFl1IDxmZW5naHVhLnl1QGludGVsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTUMgZXJyb3IgaW5qZWN0aW9uIGtlbnJlbCBzeXNmcyBpbnRlcmZhY2UiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTUMgZXJyb3IgaW5qZWN0aW9uIGtlcm5lbCBzeXNmcyBpbnRlcmZhY2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaW9zYXBpYy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKaW5kZXggZGNmYmYzZS4uMzdmNDY1MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMKQEAgLTg3LDcgKzg3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKQEAgLTEwMTMsNyArMTAxMiw3IEBACiAvKgogICogQUNQSSBjYWxscyB0aGlzIHdoZW4gaXQgZmluZHMgYW4gZW50cnkgZm9yIGEgbGVnYWN5IElTQSBJUlEgb3ZlcnJpZGUuCiAgKi8KLXZvaWQgX19pbml0Cit2b2lkIF9fZGV2aW5pdAogaW9zYXBpY19vdmVycmlkZV9pc2FfaXJxICh1bnNpZ25lZCBpbnQgaXNhX2lycSwgdW5zaWduZWQgaW50IGdzaSwKIAkJCSAgdW5zaWduZWQgbG9uZyBwb2xhcml0eSwKIAkJCSAgdW5zaWduZWQgbG9uZyB0cmlnZ2VyKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKaW5kZXggY2U0OWM4NS4uNDA3YjQ1OCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lycS5jCkBAIC00LDcgKzQsNyBAQAogICoJQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk4IExpbnVzIFRvcnZhbGRzLCBJbmdvIE1vbG5hcgogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29kZSB1c2VkIGJ5IHZhcmlvdXMgSVJRIGhhbmRsaW5nIHJvdXRpbmVzOgotICogYXNraW5nIGZvciBkaWZmZXJlbnQgSVJRJ3Mgc2hvdWxkIGJlIGRvbmUgdGhyb3VnaCB0aGVzZSByb3V0aW5lcworICogYXNraW5nIGZvciBkaWZmZXJlbnQgSVJRcyBzaG91bGQgYmUgZG9uZSB0aHJvdWdoIHRoZXNlIHJvdXRpbmVzCiAgKiBpbnN0ZWFkIG9mIGp1c3QgZ3JhYmJpbmcgdGhlbS4gVGh1cyBzZXR1cHMgd2l0aCBkaWZmZXJlbnQgSVJRIG51bWJlcnMKICAqIHNob3VsZG4ndCByZXN1bHQgaW4gYW55IHdlaXJkIHN1cnByaXNlcywgYW5kIGluc3RhbGxpbmcgbmV3IGhhbmRsZXJzCiAgKiBzaG91bGQgYmUgZWFzaWVyLgpAQCAtMTIsNyArMTIsNyBAQAogICogQ29weXJpZ2h0IChDKSBBc2hvayBSYWo8YXNob2sucmFqQGludGVsLmNvbT4sIEludGVsIENvcnBvcmF0aW9uIDIwMDQKICAqCiAgKiA0LzE0LzIwMDQ6IEFkZGVkIGNvZGUgdG8gaGFuZGxlIGNwdSBtaWdyYXRpb24gYW5kIGRvIHNhZmUgaXJxCi0gKgkJCW1pZ3JhdGlvbiB3aXRob3V0IGxvc3NpbmcgaW50ZXJydXB0cyBmb3IgaW9zYXBpYworICoJCQltaWdyYXRpb24gd2l0aG91dCBsb3NpbmcgaW50ZXJydXB0cyBmb3IgaW9zYXBpYwogICoJCQlhcmNoaXRlY3R1cmUuCiAgKi8KIApAQCAtMTA0LDYgKzEwNCwxNyBAQAogCQlpcnFfcmVkaXJbaXJxXSA9IChjaGFyKSAocmVkaXIgJiAweGZmKTsKIAl9CiB9CisKK2Jvb2wgaXNfYWZmaW5pdHlfbWFza192YWxpZChjcHVtYXNrX3QgY3B1bWFzaykKK3sKKwlpZiAoaWE2NF9wbGF0Zm9ybV9pcygic24yIikpIHsKKwkJLyogT25seSBhbGxvdyBvbmUgQ1BVIHRvIGJlIHNwZWNpZmllZCBpbiB0aGUgc21wX2FmZmluaXR5IG1hc2sgKi8KKwkJaWYgKGNwdXNfd2VpZ2h0KGNwdW1hc2spICE9IDEpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCkBAIC0xNzksNyArMTkwLDcgQEAKIAl9CiAKIAkvKgotCSAqIFBoYXNlIDE6IExvY2F0ZSBpcnEncyBib3VuZCB0byB0aGlzIGNwdSBhbmQKKwkgKiBQaGFzZSAxOiBMb2NhdGUgSVJRcyBib3VuZCB0byB0aGlzIGNwdSBhbmQKIAkgKiByZWxvY2F0ZSB0aGVtIGZvciBjcHUgcmVtb3ZhbC4KIAkgKi8KIAltaWdyYXRlX2lycXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYwppbmRleCA0NTZmNTdiLi5iYzQ3MDQ5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CS8qIGZvciByYW5kX2luaXRpYWxpemVfaXJxKCkgKi8KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAjaWZkZWYgQ09ORklHX1BFUkZNT04KICMgaW5jbHVkZSA8YXNtL3BlcmZtb24uaD4KQEAgLTEyNyw4ICsxMjcsMTAgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKICMJZGVmaW5lIElTX1JFU0NIRURVTEUodmVjKQkodmVjID09IElBNjRfSVBJX1JFU0NIRURVTEUpCisjCWRlZmluZSBJU19MT0NBTF9UTEJfRkxVU0godmVjKQkodmVjID09IElBNjRfSVBJX0xPQ0FMX1RMQl9GTFVTSCkKICNlbHNlCiAjCWRlZmluZSBJU19SRVNDSEVEVUxFKHZlYykJKDApCisjCWRlZmluZSBJU19MT0NBTF9UTEJfRkxVU0godmVjKQkoMCkKICNlbmRpZgogLyoKICAqIFRoYXQncyB3aGVyZSB0aGUgSVZUIGJyYW5jaGVzIHdoZW4gd2UgZ2V0IGFuIGV4dGVybmFsCkBAIC0xODAsOCArMTgyLDExIEBACiAJc2F2ZWRfdHByID0gaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0NSX1RQUik7CiAJaWE2NF9zcmx6X2QoKTsKIAl3aGlsZSAodmVjdG9yICE9IElBNjRfU1BVUklPVVNfSU5UX1ZFQ1RPUikgewotCQlpZiAodW5saWtlbHkoSVNfUkVTQ0hFRFVMRSh2ZWN0b3IpKSkKLQkJCSBrc3RhdF90aGlzX2NwdS5pcnFzW3ZlY3Rvcl0rKzsKKwkJaWYgKHVubGlrZWx5KElTX0xPQ0FMX1RMQl9GTFVTSCh2ZWN0b3IpKSkgeworCQkJc21wX2xvY2FsX2ZsdXNoX3RsYigpOworCQkJa3N0YXRfdGhpc19jcHUuaXJxc1t2ZWN0b3JdKys7CisJCX0gZWxzZSBpZiAodW5saWtlbHkoSVNfUkVTQ0hFRFVMRSh2ZWN0b3IpKSkKKwkJCWtzdGF0X3RoaXNfY3B1LmlycXNbdmVjdG9yXSsrOwogCQllbHNlIHsKIAkJCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19DUl9UUFIsIHZlY3Rvcik7CiAJCQlpYTY0X3NybHpfZCgpOwpAQCAtMjI3LDggKzIzMiwxMSBAQAogCSAgKiBQZXJmb3JtIG5vcm1hbCBpbnRlcnJ1cHQgc3R5bGUgcHJvY2Vzc2luZwogCSAgKi8KIAl3aGlsZSAodmVjdG9yICE9IElBNjRfU1BVUklPVVNfSU5UX1ZFQ1RPUikgewotCQlpZiAodW5saWtlbHkoSVNfUkVTQ0hFRFVMRSh2ZWN0b3IpKSkKLQkJCSBrc3RhdF90aGlzX2NwdS5pcnFzW3ZlY3Rvcl0rKzsKKwkJaWYgKHVubGlrZWx5KElTX0xPQ0FMX1RMQl9GTFVTSCh2ZWN0b3IpKSkgeworCQkJc21wX2xvY2FsX2ZsdXNoX3RsYigpOworCQkJa3N0YXRfdGhpc19jcHUuaXJxc1t2ZWN0b3JdKys7CisJCX0gZWxzZSBpZiAodW5saWtlbHkoSVNfUkVTQ0hFRFVMRSh2ZWN0b3IpKSkKKwkJCWtzdGF0X3RoaXNfY3B1LmlycXNbdmVjdG9yXSsrOwogCQllbHNlIHsKIAkJCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhOVUxMKTsKIApAQCAtMjYwLDEyICsyNjgsMTIgQEAKIAogCiAjaWZkZWYgQ09ORklHX1NNUAotZXh0ZXJuIGlycXJldHVybl90IGhhbmRsZV9JUEkgKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkdW1teV9oYW5kbGVyIChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJQlVHKCk7CiB9CitleHRlcm4gaXJxcmV0dXJuX3QgaGFuZGxlX0lQSSAoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXBpX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9CWhhbmRsZV9JUEksCkBAIC0yNzgsNiArMjg2LDEzIEBACiAJLmZsYWdzID0JSVJRRl9ESVNBQkxFRCwKIAkubmFtZSA9CQkicmVzY2hlZCIKIH07CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRsYl9pcnFhY3Rpb24gPSB7CisJLmhhbmRsZXIgPQlkdW1teV9oYW5kbGVyLAorCS5mbGFncyA9CUlSUUZfRElTQUJMRUQsCisJLm5hbWUgPQkJInRsYl9mbHVzaCIKK307CisKICNlbmRpZgogCiB2b2lkCkBAIC0zMDMsNiArMzE4LDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJcmVnaXN0ZXJfcGVyY3B1X2lycShJQTY0X0lQSV9WRUNUT1IsICZpcGlfaXJxYWN0aW9uKTsKIAlyZWdpc3Rlcl9wZXJjcHVfaXJxKElBNjRfSVBJX1JFU0NIRURVTEUsICZyZXNjaGVkX2lycWFjdGlvbik7CisJcmVnaXN0ZXJfcGVyY3B1X2lycShJQTY0X0lQSV9MT0NBTF9UTEJfRkxVU0gsICZ0bGJfaXJxYWN0aW9uKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QRVJGTU9OCiAJcGZtX2luaXRfcGVyY3B1KCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lycV9sc2FwaWMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2xzYXBpYy5jCmluZGV4IGMyZjA3YmUuLmU1NmE3YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2xzYXBpYy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2xzYXBpYy5jCkBAIC0yMyw3ICsyMyw3IEBACiBzdGF0aWMgdm9pZAogbHNhcGljX25vb3AgKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JLyogbnV0aGluZyB0byBkby4uLiAqLworCS8qIG5vdGhpbmcgdG8gZG8uLi4gKi8KIH0KIAogc3RhdGljIGludCBsc2FwaWNfcmV0cmlnZ2VyKHVuc2lnbmVkIGludCBpcnEpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDZjYjU2ZGQuLjViYzQ2ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC0yOSw5ICsyOSw5IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTE1MSwxMiArMTUxLDEyIEBACiAKIAljbXBfaW5zdC5sID0ga3Byb2JlX2luc3Q7CiAJaWYgKChjbXBfaW5zdC5mLngyID09IDApIHx8IChjbXBfaW5zdC5mLngyID09IDEpKSB7Ci0JCS8qIEludGVnZXJlIGNvbXBhcmUgLSBSZWdpc3RlciBSZWdpc3RlciAoQTYgdHlwZSkqLworCQkvKiBJbnRlZ2VyIGNvbXBhcmUgLSBSZWdpc3RlciBSZWdpc3RlciAoQTYgdHlwZSkqLwogCQlpZiAoKGNtcF9pbnN0LmYudGIgPT0gMCkgJiYgKGNtcF9pbnN0LmYudGEgPT0gMCkKIAkJCQkmJihjbXBfaW5zdC5mLmMgPT0gMSkpCiAJCQljdHlwZV91bmMgPSAxOwogCX0gZWxzZSBpZiAoKGNtcF9pbnN0LmYueDIgPT0gMil8fChjbXBfaW5zdC5mLngyID09IDMpKSB7Ci0JCS8qIEludGVnZXJlIGNvbXBhcmUgLSBJbW1lZGlhdGUgUmVnaXN0ZXIgKEE4IHR5cGUpKi8KKwkJLyogSW50ZWdlciBjb21wYXJlIC0gSW1tZWRpYXRlIFJlZ2lzdGVyIChBOCB0eXBlKSovCiAJCWlmICgoY21wX2luc3QuZi50YSA9PSAwKSAmJihjbXBfaW5zdC5mLmMgPT0gMSkpCiAJCQljdHlwZV91bmMgPSAxOwogCX0KQEAgLTM3MCwxNCArMzcwLDE4IEBACiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewotCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOwotCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOworCXVuc2lnbmVkIGludCBpOworCWkgPSBhdG9taWNfYWRkX3JldHVybigxLCAma2NiLT5wcmV2X2twcm9iZV9pbmRleCk7CisJa2NiLT5wcmV2X2twcm9iZVtpLTFdLmtwID0ga3Byb2JlX3J1bm5pbmcoKTsKKwlrY2ItPnByZXZfa3Byb2JlW2ktMV0uc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOwogfQogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKLQlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IGtjYi0+cHJldl9rcHJvYmUua3A7Ci0Ja2NiLT5rcHJvYmVfc3RhdHVzID0ga2NiLT5wcmV2X2twcm9iZS5zdGF0dXM7CisJdW5zaWduZWQgaW50IGk7CisJaSA9IGF0b21pY19zdWJfcmV0dXJuKDEsICZrY2ItPnByZXZfa3Byb2JlX2luZGV4KTsKKwlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IGtjYi0+cHJldl9rcHJvYmVbaV0ua3A7CisJa2NiLT5rcHJvYmVfc3RhdHVzID0ga2NiLT5wcmV2X2twcm9iZVtpXS5zdGF0dXM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwKQEAgLTQ0NCw3ICs0NDgsOCBAQAogCQkJYnJlYWs7CiAJfQogCi0JQlVHX09OKCFvcmlnX3JldF9hZGRyZXNzIHx8IChvcmlnX3JldF9hZGRyZXNzID09IHRyYW1wb2xpbmVfYWRkcmVzcykpOworCWtyZXRwcm9iZV9hc3NlcnQocmksIG9yaWdfcmV0X2FkZHJlc3MsIHRyYW1wb2xpbmVfYWRkcmVzcyk7CisKIAlyZWdzLT5jcl9paXAgPSBvcmlnX3JldF9hZGRyZXNzOwogCiAJcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKQEAgLTQ2NCwyMyArNDY5LDEzIEBACiB9CiAKIC8qIENhbGxlZCB3aXRoIGtyZXRwcm9iZV9sb2NrIGhlbGQgKi8KLXZvaWQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZSAqcnAsCit2b2lkIF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3JldHByb2JlKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAogCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpOworCXJpLT5yZXRfYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKilyZWdzLT5iMDsKIAotCWlmICgocmkgPSBnZXRfZnJlZV9ycF9pbnN0KHJwKSkgIT0gTlVMTCkgewotCQlyaS0+cnAgPSBycDsKLQkJcmktPnRhc2sgPSBjdXJyZW50OwotCQlyaS0+cmV0X2FkZHIgPSAoa3Byb2JlX29wY29kZV90ICopcmVncy0+YjA7Ci0KLQkJLyogUmVwbGFjZSB0aGUgcmV0dXJuIGFkZHIgd2l0aCB0cmFtcG9saW5lIGFkZHIgKi8KLQkJcmVncy0+YjAgPSAoKHN0cnVjdCBmbnB0ciAqKWtyZXRwcm9iZV90cmFtcG9saW5lKS0+aXA7Ci0KLQkJYWRkX3JwX2luc3QocmkpOwotCX0gZWxzZSB7Ci0JCXJwLT5ubWlzc2VkKys7Ci0JfQorCS8qIFJlcGxhY2UgdGhlIHJldHVybiBhZGRyIHdpdGggdHJhbXBvbGluZSBhZGRyICovCisJcmVncy0+YjAgPSAoKHN0cnVjdCBmbnB0ciAqKWtyZXRwcm9iZV90cmFtcG9saW5lKS0+aXA7CiB9CiAKIGludCBfX2twcm9iZXMgYXJjaF9wcmVwYXJlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQpAQCAtODI1LDcgKzgyMCw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgX19rcHJvYmVzIGtwcm9iZXNfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKK2ludCBfX2twcm9iZXMga3Byb2Jlc19mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CkBAIC05MDksMTMgKzkwNCw2IEBACiAJCQlpZiAocG9zdF9rcHJvYmVzX2hhbmRsZXIoYXJncy0+cmVncykpCiAJCQkJcmV0ID0gTk9USUZZX1NUT1A7CiAJCWJyZWFrOwotCWNhc2UgRElFX1BBR0VfRkFVTFQ6Ci0JCS8qIGtwcm9iZV9ydW5uaW5nKCkgbmVlZHMgc21wX3Byb2Nlc3Nvcl9pZCgpICovCi0JCXByZWVtcHRfZGlzYWJsZSgpOwotCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJgotCQkJa3Byb2Jlc19mYXVsdF9oYW5kbGVyKGFyZ3MtPnJlZ3MsIGFyZ3MtPnRyYXBucikpCi0JCQlyZXQgPSBOT1RJRllfU1RPUDsKLQkJcHJlZW1wdF9lbmFibGUoKTsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC05NTksNyArOTQ3LDcgQEAKIAkvKgogCSAqIENhbGxlZSBvd25zIHRoZSBhcmd1bWVudCBzcGFjZSBhbmQgY291bGQgb3ZlcndyaXRlIGl0LCBlZwogCSAqIHRhaWwgY2FsbCBvcHRpbWl6YXRpb24uIFNvIHRvIGJlIGFic29sdXRlbHkgc2FmZQotCSAqIHdlIHNhdmUgdGhlIGFyZ3VtZW50IHNwYWNlIGJlZm9yZSB0cmFuc2ZlcmluZyB0aGUgY29udHJvbAorCSAqIHdlIHNhdmUgdGhlIGFyZ3VtZW50IHNwYWNlIGJlZm9yZSB0cmFuc2ZlcnJpbmcgdGhlIGNvbnRyb2wKIAkgKiB0byBpbnN0cnVtZW50ZWQganByb2JlIGZ1bmN0aW9uIHdoaWNoIHJ1bnMgaW4KIAkgKiB0aGUgcHJvY2VzcyBjb250ZXh0CiAJICovCkBAIC0xMDIxLDMgKzEwMDksMTIgQEAKIAkJKGtwcm9iZV9vcGNvZGVfdCAqKSgoc3RydWN0IGZucHRyICopa3JldHByb2JlX3RyYW1wb2xpbmUpLT5pcDsKIAlyZXR1cm4gcmVnaXN0ZXJfa3Byb2JlKCZ0cmFtcG9saW5lX3ApOwogfQorCitpbnQgX19rcHJvYmVzIGFyY2hfdHJhbXBvbGluZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlpZiAocC0+YWRkciA9PQorCQkoa3Byb2JlX29wY29kZV90ICopKChzdHJ1Y3QgZm5wdHIgKilrcmV0cHJvYmVfdHJhbXBvbGluZSktPmlwKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tYWNodmVjLmMgYi9hcmNoL2lhNjQva2VybmVsL21hY2h2ZWMuYwppbmRleCA5NjIwODIyLi4xM2RmMzM3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21hY2h2ZWMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21hY2h2ZWMuYwpAQCAtMzUsNyArMzUsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkCit2b2lkIF9faW5pdAogbWFjaHZlY19pbml0IChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBpYTY0X21hY2hpbmVfdmVjdG9yICptdjsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCmluZGV4IDQ5MTY4N2YuLjFlYWQ1ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwpAQCAtNjMsNyArNjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC03Miw5ICs3MSw5IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL21lbWluaXQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTE5LDcgKzExOCw5IEBACiAjZGVmaW5lIENQRV9ISVNUT1JZX0xFTkdUSCAgICA1CiAjZGVmaW5lIENNQ19ISVNUT1JZX0xFTkdUSCAgICA1CiAKKyNpZmRlZiBDT05GSUdfQUNQSQogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGNwZV9wb2xsX3RpbWVyOworI2VuZGlmCiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgY21jX3BvbGxfdGltZXI7CiAvKgogICogVGhpcyB2YXJpYWJsZSB0ZWxscyB3aGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgaW4gcG9sbGluZyBtb2RlLgpAQCAtMjcyLDcgKzI3Myw2IEBACiAKIAltbG9nYnVmX2ZpbmlzaGVkID0gMTsKIH0KLUVYUE9SVF9TWU1CT0woaWE2NF9tbG9nYnVmX2ZpbmlzaCk7CiAKIC8qCiAgKiBQcmludCBidWZmZXJlZCBtZXNzYWdlcyBmcm9tIElOSVQgY29udGV4dC4KQEAgLTE0NzYsNiArMTQ3NiwxMCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnQ7CiAJaWYgKHZhbCAhPSBESUVfSU5JVF9NT05BUkNIX1BST0NFU1MpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKKyNpZmRlZiBDT05GSUdfS0VYRUMKKwlpZiAoYXRvbWljX3JlYWQoJmtkdW1wX2luX3Byb2dyZXNzKSkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworI2VuZGlmCiAKIAkvKgogCSAqIEZJWE1FOiBtbG9nYnVmIHdpbGwgYnJpbSBvdmVyIHdpdGggSU5JVCBzdGFjayBkdW1wcy4KQEAgLTE2OTAsNyArMTY5NCw3IEBACiAJdGktPnByZWVtcHRfY291bnQgPSAxOwogCXRpLT50YXNrID0gcDsKIAl0aS0+Y3B1ID0gY3B1OwotCXAtPnRocmVhZF9pbmZvID0gdGk7CisJcC0+c3RhY2sgPSB0aTsKIAlwLT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOwogCWNwdV9zZXQoY3B1LCBwLT5jcHVzX2FsbG93ZWQpOwogCUlOSVRfTElTVF9IRUFEKCZwLT50YXNrcyk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCmluZGV4IDgzMmNmMWUuLmFiYTgxM2MyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC00MzksNyArNDM4LDcgQEAKICAqIEBwZWlkeDoJcG9pbnRlciBvZiBpbmRleCBvZiBwcm9jZXNzb3IgZXJyb3Igc2VjdGlvbgogICoKICAqIFJldHVybiB2YWx1ZToKLSAqCXRhcmdldCBhZGRyZXNzIG9uIFN1Y2Nlc3MgLyAwIG9uIEZhaWx1ZQorICoJdGFyZ2V0IGFkZHJlc3Mgb24gU3VjY2VzcyAvIDAgb24gRmFpbHVyZQogICovCiBzdGF0aWMgdTY0CiBnZXRfdGFyZ2V0X2lkZW50aWZpZXIocGVpZHhfdGFibGVfdCAqcGVpZHgpCkBAIC03MDIsNyArNzAxLDcgQEAKIAkJcmV0dXJuIGZhdGFsX21jYSgiRXh0ZXJuYWwgYnVzIGNoZWNrIGZhdGFsIHN0YXR1cyIpOwogCiAJLyoKLQkgKiBUaGlzIGlzIGEgbG9jYWwgTUNBIGFuZCBlc3RpbWF0ZWQgYXMgYSByZWNvdmVyYmxlIGVycm9yLgorCSAqIFRoaXMgaXMgYSBsb2NhbCBNQ0EgYW5kIGVzdGltYXRlZCBhcyBhIHJlY292ZXJhYmxlIGVycm9yLgogCSAqLwogCWlmIChwbGF0Zm9ybSkKIAkJcmV0dXJuIHJlY292ZXJfZnJvbV9wbGF0Zm9ybV9lcnJvcihzbGlkeCwgcGVpZHgsIHBiY2ksIHNvcyk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYwppbmRleCAxNThlM2M1Li4xOTYyODc5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKQEAgLTg2MSw3ICs4NjEsNyBAQAogLyoKICAqIE1vZHVsZXMgY29udGFpbiBhIHNpbmdsZSB1bndpbmQgdGFibGUgd2hpY2ggY292ZXJzIGJvdGggdGhlIGNvcmUgYW5kIHRoZSBpbml0IHRleHQKICAqIHNlY3Rpb25zIGJ1dCBzaW5jZSB0aGUgdHdvIGFyZSBub3QgY29udGlndW91cywgd2UgbmVlZCB0byBzcGxpdCB0aGlzIHRhYmxlIHVwIHN1Y2ggdGhhdAotICogd2UgY2FuIHJlZ2lzdGVyIChhbmQgdW5yZWdpc3RlcikgZWFjaCAic2VnbWVudCIgc2VwZXJhdGVseS4gIEZvcnR1bmF0ZWx5LCB0aGlzIHNvdW5kcworICogd2UgY2FuIHJlZ2lzdGVyIChhbmQgdW5yZWdpc3RlcikgZWFjaCAic2VnbWVudCIgc2VwYXJhdGVseS4gIEZvcnR1bmF0ZWx5LCB0aGlzIHNvdW5kcwogICogbW9yZSBjb21wbGljYXRlZCB0aGFuIGl0IHJlYWxseSBpcy4KICAqLwogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGFsaW5mby5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wYWxpbmZvLmMKaW5kZXggYTcxZGY5YS4uODU4MjllMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wYWxpbmZvLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wYWxpbmZvLmMKQEAgLTk3NSw5ICs5NzUsMTEgQEAKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CiAJCWNyZWF0ZV9wYWxpbmZvX3Byb2NfZW50cmllcyhob3RjcHUpOwogCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQlyZW1vdmVfcGFsaW5mb19wcm9jX2VudHJpZXMoaG90Y3B1KTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwppbmRleCBhYmM3YWQwLi5iNzEzM2NhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMzE5LDcgKzEzMTgsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJLyoKLQkgKiB2YWxpZHkgY2hlY2tzIG9uIGNwdV9tYXNrIGhhdmUgYmVlbiBkb25lIHVwc3RyZWFtCisJICogdmFsaWRpdHkgY2hlY2tzIG9uIGNwdV9tYXNrIGhhdmUgYmVlbiBkb25lIHVwc3RyZWFtCiAJICovCiAJTE9DS19QRlMoZmxhZ3MpOwogCkBAIC0xMzg1LDcgKzEzODQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJLyoKLQkgKiB2YWxpZHkgY2hlY2tzIG9uIGNwdV9tYXNrIGhhdmUgYmVlbiBkb25lIHVwc3RyZWFtCisJICogdmFsaWRpdHkgY2hlY2tzIG9uIGNwdV9tYXNrIGhhdmUgYmVlbiBkb25lIHVwc3RyZWFtCiAJICovCiAJTE9DS19QRlMoZmxhZ3MpOwogCkBAIC0xODM2LDcgKzE4MzUsNyBAQAogCS8qCiAJICogcmVtb3ZlIG91ciBmaWxlIGZyb20gdGhlIGFzeW5jIHF1ZXVlLCBpZiB3ZSB1c2UgdGhpcyBtb2RlLgogCSAqIFRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCB0aGUgY29udGV4dCBiZWluZyBwcm90ZWN0ZWQuIFdlIGNvbWUKLQkgKiBoZXJlIHdoZW4gdGhlIGNvbnRleHQgaGFzIGJlY29tZSB1bnJlYWNoZWFibGUgYnkgb3RoZXIgdGFza3MuCisJICogaGVyZSB3aGVuIHRoZSBjb250ZXh0IGhhcyBiZWNvbWUgdW5yZWFjaGFibGUgYnkgb3RoZXIgdGFza3MuCiAJICoKIAkgKiBXZSBtYXkgc3RpbGwgaGF2ZSBhY3RpdmUgbW9uaXRvcmluZyBhdCB0aGlzIHBvaW50IGFuZCB3ZSBtYXkKIAkgKiBlbmQgdXAgaW4gcGZtX292ZXJmbG93X2hhbmRsZXIoKS4gSG93ZXZlciwgZmFzeW5jX2hlbHBlcigpCkBAIC0yMTMzLDcgKzIxMzIsNyBAQAogCWZpbHAtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAKIAkvKgotCSAqIGlmIHdlIGZyZWUgb24gdGhlIHNwb3QsIHRoZSBjb250ZXh0IGlzIG5vdyBjb21wbGV0ZWx5IHVucmVhY2hlYWJsZQorCSAqIGlmIHdlIGZyZWUgb24gdGhlIHNwb3QsIHRoZSBjb250ZXh0IGlzIG5vdyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlCiAJICogZnJvbSB0aGUgY2FsbGVycyBzaWRlLiBUaGUgbW9uaXRvcmVkIHRhc2sgc2lkZSBpcyBhbHNvIGN1dCwgc28gd2UKIAkgKiBjYW4gZnJlZWx5IGN1dC4KIAkgKgpAQCAtMjU2Myw3ICsyNTYyLDcgQEAKIAljdHgtPmN0eF9hbGxfcG1jc1swXSA9IHBtdV9jb25mLT5pbXBsX3BtY3NbMF0gJiB+MHgxOwogCiAJLyoKLQkgKiBiaXRtYXNrIG9mIGFsbCBQTURzIHRoYXQgYXJlIGFjY2VzaWJsZSB0byB0aGlzIGNvbnRleHQKKwkgKiBiaXRtYXNrIG9mIGFsbCBQTURzIHRoYXQgYXJlIGFjY2Vzc2libGUgdG8gdGhpcyBjb250ZXh0CiAJICovCiAJY3R4LT5jdHhfYWxsX3BtZHNbMF0gPSBwbXVfY29uZi0+aW1wbF9wbWRzWzBdOwogCkBAIC0zMzk2LDcgKzMzOTUsNyBAQAogCQlpZiAodW5saWtlbHkoIVBNRF9JU19JTVBMKGNudW0pKSkgZ290byBlcnJvcjsKIAkJLyoKIAkJICogd2UgY2FuIG9ubHkgcmVhZCB0aGUgcmVnaXN0ZXIgdGhhdCB3ZSB1c2UuIFRoYXQgaW5jbHVkZXMKLQkJICogdGhlIG9uZSB3ZSBleHBsaWNpdGVseSBpbml0aWFsaXplIEFORCB0aGUgb25lIHdlIHdhbnQgaW5jbHVkZWQKKwkJICogdGhlIG9uZSB3ZSBleHBsaWNpdGx5IGluaXRpYWxpemUgQU5EIHRoZSBvbmUgd2Ugd2FudCBpbmNsdWRlZAogCQkgKiBpbiB0aGUgc2FtcGxpbmcgYnVmZmVyIChzbXBsX3JlZ3MpLgogCQkgKgogCQkgKiBIYXZpbmcgdGhpcyByZXN0cmljdGlvbiBhbGxvd3Mgb3B0aW1pemF0aW9uIGluIHRoZSBjdHhzdyByb3V0aW5lCkBAIC0zNzE2LDcgKzM3MTUsNyBAQAogCSAqIGlmIG5vbi1ibG9ja2luZywgdGhlbiB3ZSBlbnN1cmUgdGhhdCB0aGUgdGFzayB3aWxsIGdvIGludG8KIAkgKiBwZm1faGFuZGxlX3dvcmsoKSBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIgbW9kZS4KIAkgKgotCSAqIFdlIGNhbm5vdCBleHBsaWNpdGVseSByZXNldCBhbm90aGVyIHRhc2ssIGl0IE1VU1QgYWx3YXlzCisJICogV2UgY2Fubm90IGV4cGxpY2l0bHkgcmVzZXQgYW5vdGhlciB0YXNrLCBpdCBNVVNUIGFsd2F5cwogCSAqIGJlIGRvbmUgYnkgdGhlIHRhc2sgaXRzZWxmLiBUaGlzIHdvcmtzIGZvciBzeXN0ZW0gd2lkZSBiZWNhdXNlCiAJICogdGhlIHRvb2wgdGhhdCBpcyBjb250cm9sbGluZyB0aGUgc2Vzc2lvbiBpcyBsb2dpY2FsbHkgZG9pbmcgCiAJICogInNlbGYtbW9uaXRvcmluZyIuCkBAIC00NjQ1LDcgKzQ2NDQsNyBAQAogCXN3aXRjaChzdGF0ZSkgewogCQljYXNlIFBGTV9DVFhfVU5MT0FERUQ6CiAJCQkvKgotCSAJCSAqIG9ubHkgY29tZXMgdG8gdGhpb3MgZnVuY3Rpb24gaWYgcGZtX2NvbnRleHQgaXMgbm90IE5VTEwsIGkuZS4sIGNhbm5vdAorCSAJCSAqIG9ubHkgY29tZXMgdG8gdGhpcyBmdW5jdGlvbiBpZiBwZm1fY29udGV4dCBpcyBub3QgTlVMTCwgaS5lLiwgY2Fubm90CiAJCQkgKiBiZSBpbiB1bmxvYWRlZCBzdGF0ZQogCSAJCSAqLwogCQkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBwZm1fZXhpdF90aHJlYWQgWyVkXSBjdHggdW5sb2FkZWRcbiIsIHRhc2stPnBpZCk7CkBAIC01MjQ4LDcgKzUyNDcsNyBAQAogCiAvKgogICogbWFpbiBvdmVyZmxvdyBwcm9jZXNzaW5nIHJvdXRpbmUuCi0gKiBpdCBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBwYXRoIG9yIGV4cGxpY2l0ZWx5IGR1cmluZyB0aGUgY29udGV4dCBzd2l0Y2ggY29kZQorICogaXQgY2FuIGJlIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgcGF0aCBvciBleHBsaWNpdGx5IGR1cmluZyB0aGUgY29udGV4dCBzd2l0Y2ggY29kZQogICovCiBzdGF0aWMgdm9pZAogcGZtX292ZXJmbG93X2hhbmRsZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBwZm1fY29udGV4dF90ICpjdHgsIHU2NCBwbWMwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbl9tY2tpbmxleS5oIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX21ja2lubGV5LmgKaW5kZXggOWJlY2NjZC4uYzRiZWM3YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX21ja2lubGV5LmgKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX21ja2lubGV5LmgKQEAgLTE4MSw3ICsxODEsNyBAQAogCS5wbWNfZGVzYyAgICAgID0gcGZtX21ja19wbWNfZGVzYywKIAkubnVtX2licnMgICAgICAgPSA4LAogCS5udW1fZGJycyAgICAgICA9IDgsCi0JLnVzZV9ycl9kYnJlZ3MgPSAxIC8qIGRlYnVnIHJlZ2lzdGVyIGFyZSB1c2UgZm9yIHJhbmdlIHJldHJpY3Rpb25zICovCisJLnVzZV9ycl9kYnJlZ3MgPSAxIC8qIGRlYnVnIHJlZ2lzdGVyIGFyZSB1c2UgZm9yIHJhbmdlIHJlc3RyaWN0aW9ucyAqLwogfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGFlOTZkNDEuLmFmNzNiOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMCwyMCArMjAsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9lbGYuaD4KICNpbmNsdWRlIDxhc20vaWEzMi5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0xNTYsNyArMTU1LDcgQEAKIH0KIAogdm9pZAotZG9fbm90aWZ5X3Jlc3VtZV91c2VyIChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3Qgc2lnc2NyYXRjaCAqc2NyLCBsb25nIGluX3N5c2NhbGwpCitkb19ub3RpZnlfcmVzdW1lX3VzZXIgKHNpZ3NldF90ICp1bnVzZWQsIHN0cnVjdCBzaWdzY3JhdGNoICpzY3IsIGxvbmcgaW5fc3lzY2FsbCkKIHsKIAlpZiAoZnN5c19tb2RlKGN1cnJlbnQsICZzY3ItPnB0KSkgewogCQkvKiBkZWZlciBzaWduYWwtaGFuZGxpbmcgZXRjLiB1bnRpbCB3ZSByZXR1cm4gdG8gcHJpdmlsZWdlLWxldmVsIDAuICAqLwpAQCAtMTcxLDggKzE3MCw4IEBACiAjZW5kaWYKIAogCS8qIGRlYWwgd2l0aCBwZW5kaW5nIHNpZ25hbCBkZWxpdmVyeSAqLwotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKSkKLQkJaWE2NF9kb19zaWduYWwob2xkc2V0LCBzY3IsIGluX3N5c2NhbGwpOworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKXx8dGVzdF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKSkKKwkJaWE2NF9kb19zaWduYWwoc2NyLCBpbl9zeXNjYWxsKTsKIH0KIAogc3RhdGljIGludCBwYWxfaGFsdCAgICAgICAgPSAxOwpAQCAtMjM3LDYgKzIzNiw3IEBACiB7CiAJdW5zaWduZWQgaW50IGNwdSwgdGhpc19jcHUgPSBnZXRfY3B1KCk7CiAJY3B1bWFza190IG1hcDsKKwljcHVtYXNrX3QgdG1wID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwogCiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdSh0aGlzX2NwdSkpOwogCXB1dF9jcHUoKTsKQEAgLTI1OCw2ICsyNTgsNyBAQAogCQl9CiAJCWNwdXNfYW5kKG1hcCwgbWFwLCBjcHVfb25saW5lX21hcCk7CiAJfSB3aGlsZSAoIWNwdXNfZW1wdHkobWFwKSk7CisJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCB0bXApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1X2lkbGVfd2FpdCk7CiAKQEAgLTc2Miw2ICs3NjMsOSBAQAogCXVuc2lnbmVkIGxvbmcgaXA7CiAJaW50IGNvdW50ID0gMDsKIAorCWlmICghcCB8fCBwID09IGN1cnJlbnQgfHwgcC0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKQorCQlyZXR1cm4gMDsKKwogCS8qCiAJICogTm90ZTogcCBtYXkgbm90IGJlIGEgYmxvY2tlZCB0YXNrIChpdCBjb3VsZCBiZSBjdXJyZW50IG9yCiAJICogYW5vdGhlciBwcm9jZXNzIHJ1bm5pbmcgb24gc29tZSBvdGhlciBDUFUuICBSYXRoZXIgdGhhbgpAQCAtNzcyLDYgKzc3Niw4IEBACiAJICovCiAJdW53X2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soJmluZm8sIHApOwogCWRvIHsKKwkJaWYgKHAtPnN0YXRlID09IFRBU0tfUlVOTklORykKKwkJCXJldHVybiAwOwogCQlpZiAodW53X3Vud2luZCgmaW5mbykgPCAwKQogCQkJcmV0dXJuIDA7CiAJCXVud19nZXRfaXAoJmluZm8sICZpcCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TIGIvYXJjaC9pYTY0L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwppbmRleCBhZTQ3M2UzLi45MDNiYWJkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMKQEAgLTk0LDcgKzk0LDcgQEAKIDQ6CiAgICAgICAgIHNybHouaQogICAgICAgICA7OwotCS8vcHVyZ2UgVFIgZW50cnkgZm9yIGtlcm5lbCB0ZXh0IGFuZCBkYXRhCisJLy8gcHVyZ2UgVFIgZW50cnkgZm9yIGtlcm5lbCB0ZXh0IGFuZCBkYXRhCiAgICAgICAgIG1vdmwgcjE2PUtFUk5FTF9TVEFSVAogICAgICAgICBtb3YgcjE4PUtFUk5FTF9UUl9QQUdFX1NISUZUPDwyCiAgICAgICAgIDs7CkBAIC0xMDQsMTUgKzEwNCw2IEBACiAgICAgICAgIHNybHouaQogICAgICAgICA7OwogCi0JLy8gcHVyZ2UgVFIgZW50cnkgZm9yIHBlcmNwdSBkYXRhCi0gICAgICAgIG1vdmwgcjE2PVBFUkNQVV9BRERSCi0gICAgICAgIG1vdiByMTg9UEVSQ1BVX1BBR0VfU0hJRlQ8PDIKLSAgICAgICAgOzsKLSAgICAgICAgcHRyLmQgcjE2LHIxOAotICAgICAgICA7OwotICAgICAgICBzcmx6LmQKLQk7OwotCiAgICAgICAgIC8vIHB1cmdlIFRSIGVudHJ5IGZvciBwYWwgY29kZQogICAgICAgICBtb3YgcjE2PWluMwogICAgICAgICBtb3YgcjE4PUlBNjRfR1JBTlVMRV9TSElGVDw8MgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zYWwuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2FsLmMKaW5kZXggMzdjODc2Zi4uMjdjMmVmNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zYWwuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NhbC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAkgKiBpbnRlcnJ1cHQgcmVkaXJlY3Rpb24uIFRoZSByZWFzb24gaXMgdGhpcyB3b3VsZCByZXF1aXJlIHRoYXQKIAkgKiBBbGwgaW50ZXJydXB0cyBiZSBzdG9wcGVkIGFuZCBoYXJkIGJpbmQgdGhlIGlycSB0byBhIGNwdS4KIAkgKiBMYXRlciB3aGVuIHRoZSBpbnRlcnJ1cHQgaXMgZmlyZWQgd2UgbmVlZCB0byBzZXQgdGhlIHJlZGlyIGhpbnQKLQkgKiBvbiBhZ2FpbiBpbiB0aGUgdmVjdG9yLiBUaGlzIGlzIGNvbWJlcnNvbWUgZm9yIHNvbWV0aGluZyB0aGF0IHRoZQorCSAqIG9uIGFnYWluIGluIHRoZSB2ZWN0b3IuIFRoaXMgaXMgY3VtYmVyc29tZSBmb3Igc29tZXRoaW5nIHRoYXQgdGhlCiAJICogdXNlciBtb2RlIGlycSBiYWxhbmNlciB3aWxsIHNvbHZlIGFueXdheXMuCiAJICovCiAJbm9faW50X3JvdXRpbmc9MTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2FsaW5mby5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zYWxpbmZvLmMKaW5kZXggYWY5Zjg3NS4uMjVjZDc1ZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zYWxpbmZvLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zYWxpbmZvLmMKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIApAQCAtMTYzLDcgKzE2Miw3IEBACiAvKiogc2FsaW5mb19wbGF0Zm9ybV9vZW1kYXRhIC0gb3B0aW9uYWwgY2FsbGJhY2sgdG8gZGVjb2RlIG9lbWRhdGEgZnJvbSBhbiBlcnJvcgogICogcmVjb3JkLgogICogQHNlY3RfaGVhZGVyOiBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgc2VjdGlvbiB0byBkZWNvZGUuCi0gKiBAb2VtZGF0YTogcmV0dXJucyB2bWFsbG9jIGFyZWEgY29udGFpbmluZyB0aGUgZGVjZGVkIG91dHB1dC4KKyAqIEBvZW1kYXRhOiByZXR1cm5zIHZtYWxsb2MgYXJlYSBjb250YWluaW5nIHRoZSBkZWNvZGVkIG91dHB1dC4KICAqIEBvZW1kYXRhX3NpemU6IHJldHVybnMgbGVuZ3RoIG9mIGRlY29kZWQgb3V0cHV0IChzdHJsZW4pLgogICoKICAqIERlc2NyaXB0aW9uOiBJZiB1c2VyIHNwYWNlIGFza3MgZm9yIG9lbSBkYXRhIHRvIGJlIGRlY29kZWQgYnkgdGhlIGtlcm5lbApAQCAtNTgzLDYgKzU4Miw3IEBACiAJc3RydWN0IHNhbGluZm9fZGF0YSAqZGF0YTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YV9zYXZlZF9sb2NrLCBmbGFncyk7CiAJCWZvciAoaSA9IDAsIGRhdGEgPSBzYWxpbmZvX2RhdGE7CiAJCSAgICAgaSA8IEFSUkFZX1NJWkUoc2FsaW5mb19kYXRhKTsKQEAgLTU5Myw2ICs1OTMsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhX3NhdmVkX2xvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfREVBRDoKKwljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGFfc2F2ZWRfbG9jaywgZmxhZ3MpOwogCQlmb3IgKGkgPSAwLCBkYXRhID0gc2FsaW5mb19kYXRhOwogCQkgICAgIGkgPCBBUlJBWV9TSVpFKHNhbGluZm9fZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKaW5kZXggNmUxOWRhMS4uZWFhNmEyNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwpAQCAtNTc2LDcgKzU3Niw3IEBACiB9CiAKIC8qCi0gKiBEaXNwbGF5IGNwdSBpbmZvIGZvciBhbGwgY3B1J3MuCisgKiBEaXNwbGF5IGNwdSBpbmZvIGZvciBhbGwgQ1BVcy4KICAqLwogc3RhdGljIGludAogc2hvd19jcHVpbmZvIChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCkBAIC03NjEsNyArNzYxLDcgQEAKIAljLT5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBiZWxvdyBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuICBieSBpZGVudGlmeV9zaWJsaW5ncygpIAotCSAqIGZvciBNdWx0aS1UaHJlYWRpbmcvTXVsdGktQ29yZSBjYXBhYmxlIGNwdSdzCisJICogZm9yIE11bHRpLVRocmVhZGluZy9NdWx0aS1Db3JlIGNhcGFibGUgQ1BVcwogCSAqLwogCWMtPnRocmVhZHNfcGVyX2NvcmUgPSBjLT5jb3Jlc19wZXJfc29ja2V0ID0gYy0+bnVtX2xvZyA9IDE7CiAJYy0+c29ja2V0X2lkID0gLTE7CkBAIC03ODYsNyArNzg2LDcgQEAKIAljLT51bmltcGxfcGFfbWFzayA9IH4oKDFMPDw2MykgfCAoKDFMIDw8IHBoeXNfYWRkcl9zaXplKSAtIDEpKTsKIH0KIAotdm9pZAordm9pZCBfX2luaXQKIHNldHVwX3Blcl9jcHVfYXJlYXMgKHZvaWQpCiB7CiAJLyogc3RhcnRfa2VybmVsKCkgcmVxdWlyZXMgdGhpcy4uLiAqLwpAQCAtOTQ3LDcgKzk0Nyw3IEBACiAJaWEzMl9jcHVfaW5pdCgpOwogI2VuZGlmCiAKLQkvKiBDbGVhciBJVEMgdG8gZWxpbWluaWF0ZSBzY2hlZF9jbG9jaygpIG92ZXJmbG93cyBpbiBodW1hbiB0aW1lLiAgKi8KKwkvKiBDbGVhciBJVEMgdG8gZWxpbWluYXRlIHNjaGVkX2Nsb2NrKCkgb3ZlcmZsb3dzIGluIGh1bWFuIHRpbWUuICAqLwogCWlhNjRfc2V0X2l0YygwKTsKIAogCS8qIGRpc2FibGUgYWxsIGxvY2FsIGludGVycnVwdCBzb3VyY2VzOiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zaWdmcmFtZS5oIGIvYXJjaC9pYTY0L2tlcm5lbC9zaWdmcmFtZS5oCmluZGV4IDM3Yjk4NmMuLjlmZDlhMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnZnJhbWUuaAorKysgYi9hcmNoL2lhNjQva2VybmVsL3NpZ2ZyYW1lLmgKQEAgLTIyLDQgKzIyLDQgQEAKIAlzdHJ1Y3Qgc2lnY29udGV4dCBzYzsKIH07CiAKLWV4dGVybiBsb25nIGlhNjRfZG9fc2lnbmFsIChzaWdzZXRfdCAqLCBzdHJ1Y3Qgc2lnc2NyYXRjaCAqLCBsb25nKTsKK2V4dGVybiB2b2lkIGlhNjRfZG9fc2lnbmFsIChzdHJ1Y3Qgc2lnc2NyYXRjaCAqLCBsb25nKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCmluZGV4IDc3ZjhiNDkuLmFlZWM4MTggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CkBAIC00MSw0NyArNDAsNiBAQAogIyBkZWZpbmUgR0VUX1NJR1NFVChrLHUpCV9fZ2V0X3VzZXIoKGspLT5zaWdbMF0sICYodSktPnNpZ1swXSkKICNlbmRpZgogCi1sb25nCi1pYTY0X3J0X3NpZ3N1c3BlbmQgKHNpZ3NldF90IF9fdXNlciAqdXNldCwgc2l6ZV90IHNpZ3NldHNpemUsIHN0cnVjdCBzaWdzY3JhdGNoICpzY3IpCi17Ci0Jc2lnc2V0X3Qgb2xkc2V0LCBzZXQ7Ci0KLQkvKiBYWFg6IERvbid0IHByZWNsdWRlIGhhbmRsaW5nIGRpZmZlcmVudCBzaXplZCBzaWdzZXRfdCdzLiAgKi8KLQlpZiAoc2lnc2V0c2l6ZSAhPSBzaXplb2Yoc2lnc2V0X3QpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1c2V0LCBzaWdzZXRzaXplKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoR0VUX1NJR1NFVCgmc2V0LCB1c2V0KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlzaWdkZWxzZXRtYXNrKCZzZXQsIH5fQkxPQ0tBQkxFKTsKLQotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXsKLQkJb2xkc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKLQkJY3VycmVudC0+YmxvY2tlZCA9IHNldDsKLQkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCS8qCi0JICogVGhlIHJldHVybiBiZWxvdyB1c3VhbGx5IHJldHVybnMgdG8gdGhlIHNpZ25hbCBoYW5kbGVyLiAgV2UgbmVlZCB0bwotCSAqIHByZS1zZXQgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSByaWdodCB2YWx1ZXMKLQkgKiBnZXQgc2F2ZWQgaW4gc2lnY29udGV4dCBieSBpYTY0X2RvX3NpZ25hbC4KLQkgKi8KLQlzY3ItPnB0LnI4ID0gRUlOVFI7Ci0Jc2NyLT5wdC5yMTAgPSAtMTsKLQotCXdoaWxlICgxKSB7Ci0JCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCQlzY2hlZHVsZSgpOwotCQlpZiAoaWE2NF9kb19zaWduYWwoJm9sZHNldCwgc2NyLCAxKSkKLQkJCXJldHVybiAtRUlOVFI7Ci0JfQotfQotCiBhc21saW5rYWdlIGxvbmcKIHN5c19zaWdhbHRzdGFjayAoY29uc3Qgc3RhY2tfdCBfX3VzZXIgKnVzcywgc3RhY2tfdCBfX3VzZXIgKnVvc3MsIGxvbmcgYXJnMiwKIAkJIGxvbmcgYXJnMywgbG9uZyBhcmc0LCBsb25nIGFyZzUsIGxvbmcgYXJnNiwgbG9uZyBhcmc3LApAQCAtNDc4LDEwICs0MzYsMTEgQEAKICAqIE5vdGUgdGhhdCBgaW5pdCcgaXMgYSBzcGVjaWFsIHByb2Nlc3M6IGl0IGRvZXNuJ3QgZ2V0IHNpZ25hbHMgaXQgZG9lc24ndCB3YW50IHRvCiAgKiBoYW5kbGUuICBUaHVzIHlvdSBjYW5ub3Qga2lsbCBpbml0IGV2ZW4gd2l0aCBhIFNJR0tJTEwgZXZlbiBieSBtaXN0YWtlLgogICovCi1sb25nCi1pYTY0X2RvX3NpZ25hbCAoc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHNpZ3NjcmF0Y2ggKnNjciwgbG9uZyBpbl9zeXNjYWxsKQordm9pZAoraWE2NF9kb19zaWduYWwgKHN0cnVjdCBzaWdzY3JhdGNoICpzY3IsIGxvbmcgaW5fc3lzY2FsbCkKIHsKIAlzdHJ1Y3Qga19zaWdhY3Rpb24ga2E7CisJc2lnc2V0X3QgKm9sZHNldDsKIAlzaWdpbmZvX3QgaW5mbzsKIAlsb25nIHJlc3RhcnQgPSBpbl9zeXNjYWxsOwogCWxvbmcgZXJybm8gPSBzY3ItPnB0LnI4OwpAQCAtNDkzLDkgKzQ1MiwxMSBAQAogCSAqIGRvaW5nIGFueXRoaW5nIGlmIHNvLgogCSAqLwogCWlmICghdXNlcl9tb2RlKCZzY3ItPnB0KSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAotCWlmICghb2xkc2V0KQorCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQorCQlvbGRzZXQgPSAmY3VycmVudC0+c2F2ZWRfc2lnbWFzazsKKwllbHNlCiAJCW9sZHNldCA9ICZjdXJyZW50LT5ibG9ja2VkOwogCiAJLyoKQEAgLTU1OCw4ICs1MTksMTUgQEAKIAkJICogV2hlZSEgIEFjdHVhbGx5IGRlbGl2ZXIgdGhlIHNpZ25hbC4gIElmIHRoZSBkZWxpdmVyeSBmYWlsZWQsIHdlIG5lZWQgdG8KIAkJICogY29udGludWUgdG8gaXRlcmF0ZSBpbiB0aGlzIGxvb3Agc28gd2UgY2FuIGRlbGl2ZXIgdGhlIFNJR1NFR1YuLi4KIAkJICovCi0JCWlmIChoYW5kbGVfc2lnbmFsKHNpZ25yLCAma2EsICZpbmZvLCBvbGRzZXQsIHNjcikpCi0JCQlyZXR1cm4gMTsKKwkJaWYgKGhhbmRsZV9zaWduYWwoc2lnbnIsICZrYSwgJmluZm8sIG9sZHNldCwgc2NyKSkgeworCQkJLyogYSBzaWduYWwgd2FzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQ7IHRoZSBzYXZlZAorCQkJICogc2lnbWFzayB3aWxsIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlIHNpZ25hbCBmcmFtZSwKKwkJCSAqIGFuZCB3aWxsIGJlIHJlc3RvcmVkIGJ5IHNpZ3JldHVybiwgc28gd2UgY2FuIHNpbXBseQorCQkJICogY2xlYXIgdGhlIFRJRl9SRVNUT1JFX1NJR01BU0sgZmxhZyAqLworCQkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpCisJCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJCQlyZXR1cm47CisJCX0KIAl9CiAKIAkvKiBEaWQgd2UgY29tZSBmcm9tIGEgc3lzdGVtIGNhbGw/ICovCkBAIC01ODUsNSArNTUzLDExIEBACiAJCQl9CiAJCX0KIAl9Ci0JcmV0dXJuIDA7CisKKwkvKiBpZiB0aGVyZSdzIG5vIHNpZ25hbCB0byBkZWxpdmVyLCB3ZSBqdXN0IHB1dCB0aGUgc2F2ZWQgc2lnbWFzaworCSAqIGJhY2sgKi8KKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKSkgeworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKTsKKwkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZjdXJyZW50LT5zYXZlZF9zaWdtYXNrLCBOVUxMKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NtcC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXAuYwppbmRleCA1NWRkZDgwLi5iM2E0N2Y5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wLmMKQEAgLTUwLDYgKzUwLDE4IEBACiAjaW5jbHVkZSA8YXNtL21jYS5oPgogCiAvKgorICogTm90ZTogYWxpZ25tZW50IG9mIDQgZW50cmllcy9jYWNoZWxpbmUgd2FzIGVtcGlyaWNhbGx5IGRldGVybWluZWQKKyAqIHRvIGJlIGEgZ29vZCB0cmFkZW9mZiBiZXR3ZWVuIGhvdCBjYWNoZWxpbmVzICYgc3ByZWFkaW5nIHRoZSBhcnJheQorICogYWNyb3NzIHRvbyBtYW55IGNhY2hlbGluZS4KKyAqLworc3RhdGljIHN0cnVjdCBsb2NhbF90bGJfZmx1c2hfY291bnRzIHsKKwl1bnNpZ25lZCBpbnQgY291bnQ7Cit9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDMyKSkpIGxvY2FsX3RsYl9mbHVzaF9jb3VudHNbTlJfQ1BVU107CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIHNoYWRvd19mbHVzaF9jb3VudHNbTlJfQ1BVU10pIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworCisvKgogICogU3RydWN0dXJlIGFuZCBkYXRhIGZvciBzbXBfY2FsbF9mdW5jdGlvbigpLiBUaGlzIGlzIGRlc2lnbmVkIHRvIG1pbmltaXNlIHN0YXRpYyBtZW1vcnkKICAqIHJlcXVpcmVtZW50cy4gSXQgYWxzbyBsb29rcyBjbGVhbmVyLgogICovCkBAIC0xNzQsNyArMTg2LDcgQEAKIH0KIAogLyoKLSAqIENhbGxlZCB3aXRoIHByZWVlbXB0aW9uIGRpc2FibGVkLgorICogQ2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCiBzZW5kX0lQSV9zaW5nbGUgKGludCBkZXN0X2NwdSwgaW50IG9wKQpAQCAtMTg0LDcgKzE5Niw3IEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgd2l0aCBwcmVlZW1wdGlvbiBkaXNhYmxlZC4KKyAqIENhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogc2VuZF9JUElfYWxsYnV0c2VsZiAoaW50IG9wKQpAQCAtMTk4LDcgKzIxMCw3IEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgd2l0aCBwcmVlZW1wdGlvbiBkaXNhYmxlZC4KKyAqIENhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogc2VuZF9JUElfYWxsIChpbnQgb3ApCkBAIC0yMTEsNyArMjIzLDcgQEAKIH0KIAogLyoKLSAqIENhbGxlZCB3aXRoIHByZWVlbXB0aW9uIGRpc2FibGVkLgorICogQ2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCiBzZW5kX0lQSV9zZWxmIChpbnQgb3ApCkBAIC0yNDAsNyArMjUyLDcgQEAKIH0KICNlbmRpZgogLyoKLSAqIENhbGxlZCB3aXRoIHByZWVlbXB0aW9uIGRpc2FibGVkLgorICogQ2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4KICAqLwogdm9pZAogc21wX3NlbmRfcmVzY2hlZHVsZSAoaW50IGNwdSkKQEAgLTI0OCw2ICsyNjAsNjIgQEAKIAlwbGF0Zm9ybV9zZW5kX2lwaShjcHUsIElBNjRfSVBJX1JFU0NIRURVTEUsIElBNjRfSVBJX0RNX0lOVCwgMCk7CiB9CiAKKy8qCisgKiBDYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLgorICovCitzdGF0aWMgdm9pZAorc21wX3NlbmRfbG9jYWxfZmx1c2hfdGxiIChpbnQgY3B1KQoreworCXBsYXRmb3JtX3NlbmRfaXBpKGNwdSwgSUE2NF9JUElfTE9DQUxfVExCX0ZMVVNILCBJQTY0X0lQSV9ETV9JTlQsIDApOworfQorCit2b2lkCitzbXBfbG9jYWxfZmx1c2hfdGxiKHZvaWQpCit7CisJLyoKKwkgKiBVc2UgYXRvbWljIG9wcy4gT3RoZXJ3aXNlLCB0aGUgbG9hZC9pbmNyZW1lbnQvc3RvcmUgc2VxdWVuY2UgZnJvbQorCSAqIGEgIisrIiBvcGVyYXRpb24gY2FuIGhhdmUgdGhlIGxpbmUgc3RvbGVuIGJldHdlZW4gdGhlIGxvYWQgJiBzdG9yZS4KKwkgKiBUaGUgb3ZlcmhlYWQgb2YgdGhlIGF0b21pYyBvcCBpbiBuZWdsaWdpYmxlIGluIHRoaXMgY2FzZSAmIG9mZmVycworCSAqIHNpZ25pZmljYW50IGJlbmVmaXQgZm9yIHRoZSBicmllZiBwZXJpb2RzIHdoZXJlIGxvdHMgb2YgY3B1cworCSAqIGFyZSBzaW11bHRhbmVvdXNseSBmbHVzaGluZyBUTEJzLgorCSAqLworCWlhNjRfZmV0Y2hhZGQoMSwgJmxvY2FsX3RsYl9mbHVzaF9jb3VudHNbc21wX3Byb2Nlc3Nvcl9pZCgpXS5jb3VudCwgYWNxKTsKKwlsb2NhbF9mbHVzaF90bGJfYWxsKCk7Cit9CisKKyNkZWZpbmUgRkxVU0hfREVMQVkJNSAvKiBVc2VjIGJhY2tvZmYgdG8gZWxpbWluYXRlIGV4Y2Vzc2l2ZSBjYWNoZWxpbmUgYm91bmNpbmcgKi8KKwordm9pZAorc21wX2ZsdXNoX3RsYl9jcHVtYXNrKGNwdW1hc2tfdCB4Y3B1bWFzaykKK3sKKwl1bnNpZ25lZCBpbnQgKmNvdW50cyA9IF9faWE2NF9wZXJfY3B1X3ZhcihzaGFkb3dfZmx1c2hfY291bnRzKTsKKwljcHVtYXNrX3QgY3B1bWFzayA9IHhjcHVtYXNrOworCWludCBteWNwdSwgY3B1LCBmbHVzaF9teWNwdSA9IDA7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlteWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgY3B1bWFzaykKKwkJY291bnRzW2NwdV0gPSBsb2NhbF90bGJfZmx1c2hfY291bnRzW2NwdV0uY291bnQ7CisKKwltYigpOworCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgY3B1bWFzaykgeworCQlpZiAoY3B1ID09IG15Y3B1KQorCQkJZmx1c2hfbXljcHUgPSAxOworCQllbHNlCisJCQlzbXBfc2VuZF9sb2NhbF9mbHVzaF90bGIoY3B1KTsKKwl9CisKKwlpZiAoZmx1c2hfbXljcHUpCisJCXNtcF9sb2NhbF9mbHVzaF90bGIoKTsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgY3B1bWFzaykKKwkJd2hpbGUoY291bnRzW2NwdV0gPT0gbG9jYWxfdGxiX2ZsdXNoX2NvdW50c1tjcHVdLmNvdW50KQorCQkJdWRlbGF5KEZMVVNIX0RFTEFZKTsKKworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKIHZvaWQKIHNtcF9mbHVzaF90bGJfYWxsICh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCBmZjdkZjQzLi4zYzlkOGU2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CkBAIC0zNzEsNyArMzcwLDcgQEAKIHsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0CitzdGF0aWMgdm9pZCBfX2NwdWluaXQKIHNtcF9jYWxsaW4gKHZvaWQpCiB7CiAJaW50IGNwdWlkLCBwaHlzX2lkLCBpdGNfbWFzdGVyOwpAQCAtNDU3LDcgKzQ1Niw3IEBACiAvKgogICogQWN0aXZhdGUgYSBzZWNvbmRhcnkgcHJvY2Vzc29yLiAgaGVhZC5TIGNhbGxzIHRoaXMuCiAgKi8KLWludCBfX2RldmluaXQKK2ludCBfX2NwdWluaXQKIHN0YXJ0X3NlY29uZGFyeSAodm9pZCAqdW51c2VkKQogewogCS8qIEVhcmx5IGNvbnNvbGUgbWF5IHVzZSBJL08gcG9ydHMgKi8KQEAgLTY5NSw3ICs2OTQsNyBAQAogCQkJc2V0X2NwZWlfdGFyZ2V0X2NwdShuZXdfY3BlaV9jcHUpOwogCQkJZGVzYyA9IGlycV9kZXNjICsgaWE2NF9jcGVfaXJxOwogCQkJLyoKLQkJCSAqIFN3aXRjaCBmb3Igbm93LCBpbW1lZGlhdGx5LCB3ZSBuZWVkIHRvIGRvIGZha2UgaW50cgorCQkJICogU3dpdGNoIGZvciBub3csIGltbWVkaWF0ZWx5LCB3ZSBuZWVkIHRvIGRvIGZha2UgaW50cgogCQkJICogYXMgb3RoZXIgaW50ZXJydXB0cywgYnV0IG5lZWQgdG8gc3R1ZHkgQ1BFSSBiZWhhdmlvdXIgd2l0aAogCQkJICogcG9sbGluZyBiZWZvcmUgbWFraW5nIGNoYW5nZXMuCiAJCQkgKi8KQEAgLTg0MSw3ICs4NDAsNyBAQAogfQogCiAvKgotICogQXNzdW1lIHRoYXQgQ1BVJ3MgaGF2ZSBiZWVuIGRpc2NvdmVyZWQgYnkgc29tZSBwbGF0Zm9ybS1kZXBlbmRlbnQgaW50ZXJmYWNlLiAgRm9yCisgKiBBc3N1bWUgdGhhdCBDUFVzIGhhdmUgYmVlbiBkaXNjb3ZlcmVkIGJ5IHNvbWUgcGxhdGZvcm0tZGVwZW5kZW50IGludGVyZmFjZS4gIEZvcgogICogU29mdFNEVi9MaW9uLCB0aGF0IHdvdWxkIGJlIEFDUEkuCiAgKgogICogU2V0dXAgb2YgdGhlIElQSSBpcnEgaGFuZGxlciBpcyBkb25lIGluIGlycS5jOmluaXRfSVJRX1NNUCgpLgpAQCAtODU1LDcgKzg1NCw3IEBACiAJfSAqYXBfc3RhcnR1cDsKIAlsb25nIHNhbF9yZXQ7CiAKLQkvKiBUZWxsIFNBTCB3aGVyZSB0byBkcm9wIHRoZSBBUCdzLiAgKi8KKwkvKiBUZWxsIFNBTCB3aGVyZSB0byBkcm9wIHRoZSBBUHMuICAqLwogCWFwX3N0YXJ0dXAgPSAoc3RydWN0IGZwdHIgKikgc3RhcnRfYXA7CiAJc2FsX3JldCA9IGlhNjRfc2FsX3NldF92ZWN0b3JzKFNBTF9WRUNUT1JfT1NfQk9PVF9SRU5ERVosCiAJCQkJICAgICAgIGlhNjRfdHBhKGFwX3N0YXJ0dXAtPmZwKSwgaWE2NF90cGEoYXBfc3RhcnR1cC0+Z3ApLCAwLCAwLCAwLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc3lzX2lhNjQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc3lzX2lhNjQuYwppbmRleCAyZmNhYTIwLi4xZWRhMTk0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3N5c19pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zeXNfaWE2NC5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvc2htLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgkJLyogZG9oLCBtdXN0IGNvbWUgYWZ0ZXIgc2NoZWQuaC4uLiAqLwogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwppbmRleCAzOWUwY2QzLi5hMDY2NjdjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9CXRpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAorCS5mbGFncyA9CUlSUUZfRElTQUJMRUQgfCBJUlFGX0lSUVBPTEwsCiAJLm5hbWUgPQkJInRpbWVyIgogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jIGIvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jCmluZGV4IDY4NzUwMGQuLjk0YWUzYzggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdG9wb2xvZ3kuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMKQEAgLTQxMiw5ICs0MTIsMTEgQEAKIAlzeXNfZGV2ID0gZ2V0X2NwdV9zeXNkZXYoY3B1KTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgogCQljYWNoZV9hZGRfZGV2KHN5c19kZXYpOwogCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQljYWNoZV9yZW1vdmVfZGV2KHN5c19kZXYpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKaW5kZXggNzY1Y2JlNS4uMTVhZDg1ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMTYsMzMgKzE2LDE3IEBACiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkJLyogZm9yIHNzbGVlcCgpICovCisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vZnBzd2EuaD4KICNpbmNsdWRlIDxhc20vaWEzMi5oPgogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogCiBmcHN3YV9pbnRlcmZhY2VfdCAqZnBzd2FfaW50ZXJmYWNlOwogRVhQT1JUX1NZTUJPTChmcHN3YV9pbnRlcmZhY2UpOwogCi1BVE9NSUNfTk9USUZJRVJfSEVBRChpYTY0ZGllX2NoYWluKTsKLQotaW50Ci1yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZpYTY0ZGllX2NoYWluLCBuYik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9kaWVfbm90aWZpZXIpOwotCi1pbnQKLXVucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZpYTY0ZGllX2NoYWluLCBuYik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcik7Ci0KIHZvaWQgX19pbml0CiB0cmFwX2luaXQgKHZvaWQpCiB7CkBAIC01OSw5ICs0Myw5IEBACiAJCXUzMiBsb2NrX293bmVyOwogCQlpbnQgbG9ja19vd25lcl9kZXB0aDsKIAl9IGRpZSA9IHsKLQkJLmxvY2sgPQkJCVNQSU5fTE9DS19VTkxPQ0tFRCwKLQkJLmxvY2tfb3duZXIgPQkJLTEsCi0JCS5sb2NrX293bmVyX2RlcHRoID0JMAorCQkubG9jayA9CV9fU1BJTl9MT0NLX1VOTE9DS0VEKGRpZS5sb2NrKSwKKwkJLmxvY2tfb3duZXIgPSAtMSwKKwkJLmxvY2tfb3duZXJfZGVwdGggPSAwCiAJfTsKIAlzdGF0aWMgaW50IGRpZV9jb3VudGVyOwogCWludCBjcHUgPSBnZXRfY3B1KCk7CkBAIC0zMjAsNyArMzA0LDcgQEAKIAkJCSAqIExvd2VyIDQgYml0cyBhcmUgdXNlZCBhcyBhIGNvdW50LiBVcHBlciBiaXRzIGFyZSBhIHNlcXVlbmNlCiAJCQkgKiBudW1iZXIgdGhhdCBpcyB1cGRhdGVkIHdoZW4gY291bnQgaXMgcmVzZXQuIFRoZSBjbXB4Y2hnIHdpbGwKIAkJCSAqIGZhaWwgaXMgc2Vxbm8gaGFzIGNoYW5nZWQuIFRoaXMgbWluaW1pemVzIG11dGlwbGUgY3B1cwotCQkJICogcmVzZXRpbmcgdGhlIGNvdW50LgorCQkJICogcmVzZXR0aW5nIHRoZSBjb3VudC4KIAkJCSAqLwogCQkJaWYgKGN1cnJlbnRfamlmZmllcyA+IGxhc3QudGltZSkKIAkJCQkodm9pZCkgY21weGNoZ19hY3EoJmxhc3QuY291bnQsIGNvdW50LCAxNiArIChjb3VudCAmIH4xNSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMKaW5kZXggMWUzNTc1NS4uZmU2YWE1YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3VuYWxpZ25lZC5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAKICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC91bndpbmQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdW53aW5kLmMKaW5kZXggOTNkNWEzYi4uYjBiMDhiNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC91bndpbmQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3Vud2luZC5jCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRmVuZ2h1YSBZdSA8ZmVuZ2h1YS55dUBpbnRlbC5jb20+Ci0gKiAJLSBDaGFuZ2UgcHRfcmVnc19vZmYoKSB0byBtYWtlIGl0IGxlc3MgZGVwZW5kYW50IG9uIHB0X3JlZ3Mgc3RydWN0dXJlLgorICogCS0gQ2hhbmdlIHB0X3JlZ3Nfb2ZmKCkgdG8gbWFrZSBpdCBsZXNzIGRlcGVuZGVudCBvbiBwdF9yZWdzIHN0cnVjdHVyZS4KICAqLwogLyoKICAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGNhbGwgZnJhbWUgdW53aW5kIHN1cHBvcnQgZm9yIHRoZSBMaW51eApAQCAtNjAsNiArNjAsNyBAQAogIyAgZGVmaW5lIFVOV19ERUJVR19PTihuKQl1bndfZGVidWdfbGV2ZWwgPj0gbgogICAgLyogRG8gbm90IGNvZGUgYSBwcmludGsgbGV2ZWwsIG5vdCBhbGwgZGVidWcgbGluZXMgZW5kIGluIG5ld2xpbmUgKi8KICMgIGRlZmluZSBVTldfRFBSSU5UKG4sIC4uLikgIGlmIChVTldfREVCVUdfT04obikpIHByaW50ayhfX1ZBX0FSR1NfXykKKyMgIHVuZGVmIGlubGluZQogIyAgZGVmaW5lIGlubGluZQogI2Vsc2UgLyogIVVOV19ERUJVRyAqLwogIyAgZGVmaW5lIFVOV19ERUJVR19PTihuKSAgMApAQCAtMTQ1LDcgKzE0Niw3IEBACiAjIGVuZGlmCiB9IHVudyA9IHsKIAkudGFibGVzID0gJnVudy5rZXJuZWxfdGFibGUsCi0JLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCh1bncubG9jayksCiAJLnNhdmVfb3JkZXIgPSB7CiAJCVVOV19SRUdfUlAsIFVOV19SRUdfUEZTLCBVTldfUkVHX1BTUCwgVU5XX1JFR19QUiwKIAkJVU5XX1JFR19VTkFULCBVTldfUkVHX0xDLCBVTldfUkVHX0ZQU1IsIFVOV19SRUdfUFJJX1VOQVRfR1IKQEAgLTE4NTksNyArMTg2MCw3IEBACiB1bndfdW53aW5kIChzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBwcmV2X2lwLCBwcmV2X3NwLCBwcmV2X2JzcDsKLQl1bnNpZ25lZCBsb25nIGlwLCBwciwgbnVtX3JlZ3M7CisJdW5zaWduZWQgbG9uZyBpcCwgcHIsIG51bV9yZWdzLCBycF9sb2MsIHBmc19sb2M7CiAJU1RBVCh1bnNpZ25lZCBsb25nIHN0YXJ0LCBmbGFnczspCiAJaW50IHJldHZhbDsKIApAQCAtMTg2OSwxNCArMTg3MCwxNiBAQAogCXByZXZfc3AgPSBpbmZvLT5zcDsKIAlwcmV2X2JzcCA9IGluZm8tPmJzcDsKIAotCS8qIHJlc3RvcmUgdGhlIGlwICovCi0JaWYgKCFpbmZvLT5ycF9sb2MpIHsKKwkvKiB2YWxpZGF0ZSB0aGUgcmV0dXJuIElQIHBvaW50ZXIgKi8KKwlycF9sb2MgPSAodW5zaWduZWQgbG9uZykgaW5mby0+cnBfbG9jOworCWlmICgocnBfbG9jIDwgaW5mby0+cmVnc3RrLmxpbWl0KSB8fCAocnBfbG9jID4gaW5mby0+cmVnc3RrLnRvcCkpIHsKIAkJLyogRklYTUU6IHNob3VsZCByZWFsbHkgYmUgbGV2ZWwgMCBidXQgaXQgb2NjdXJzIHRvbyBvZnRlbi4gS0FPICovCiAJCVVOV19EUFJJTlQoMSwgInVud2luZC4lczogZmFpbGVkIHRvIGxvY2F0ZSByZXR1cm4gbGluayAoaXA9MHglbHgpIVxuIiwKIAkJCSAgIF9fRlVOQ1RJT05fXywgaW5mby0+aXApOwogCQlTVEFUKHVudy5zdGF0LmFwaS51bndpbmRfdGltZSArPSBpYTY0X2dldF9pdGMoKSAtIHN0YXJ0OyBsb2NhbF9pcnFfcmVzdG9yZShmbGFncykpOwogCQlyZXR1cm4gLTE7CiAJfQorCS8qIHJlc3RvcmUgdGhlIGlwICovCiAJaXAgPSBpbmZvLT5pcCA9ICppbmZvLT5ycF9sb2M7CiAJaWYgKGlwIDwgR0FURV9BRERSKSB7CiAJCVVOV19EUFJJTlQoMiwgInVud2luZC4lczogcmVhY2hlZCB1c2VyLXNwYWNlIChpcD0weCVseClcbiIsIF9fRlVOQ1RJT05fXywgaXApOwpAQCAtMTg4NCwxMiArMTg4NywxNCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JLyogcmVzdG9yZSB0aGUgY2ZtOiAqLwotCWlmICghaW5mby0+cGZzX2xvYykgeworCS8qIHZhbGlkYXRlIHRoZSBwcmV2aW91cyBzdGFjayBmcmFtZSBwb2ludGVyICovCisJcGZzX2xvYyA9ICh1bnNpZ25lZCBsb25nKSBpbmZvLT5wZnNfbG9jOworCWlmICgocGZzX2xvYyA8IGluZm8tPnJlZ3N0ay5saW1pdCkgfHwgKHBmc19sb2MgPiBpbmZvLT5yZWdzdGsudG9wKSkgewogCQlVTldfRFBSSU5UKDAsICJ1bndpbmQuJXM6IGZhaWxlZCB0byBsb2NhdGUgYXIucGZzIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJU1RBVCh1bncuc3RhdC5hcGkudW53aW5kX3RpbWUgKz0gaWE2NF9nZXRfaXRjKCkgLSBzdGFydDsgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpKTsKIAkJcmV0dXJuIC0xOwogCX0KKwkvKiByZXN0b3JlIHRoZSBjZm06ICovCiAJaW5mby0+Y2ZtX2xvYyA9IGluZm8tPnBmc19sb2M7CiAKIAkvKiByZXN0b3JlIHRoZSBic3A6ICovCkBAIC0xOTQzLDkgKzE5NDgsOSBAQAogaW50CiB1bndfdW53aW5kX3RvX3VzZXIgKHN0cnVjdCB1bndfZnJhbWVfaW5mbyAqaW5mbykKIHsKLQl1bnNpZ25lZCBsb25nIGlwLCBzcCwgcHIgPSAwOworCXVuc2lnbmVkIGxvbmcgaXAsIHNwLCBwciA9IGluZm8tPnByOwogCi0Jd2hpbGUgKHVud191bndpbmQoaW5mbykgPj0gMCkgeworCWRvIHsKIAkJdW53X2dldF9zcChpbmZvLCAmc3ApOwogCQlpZiAoKGxvbmcpKCh1bnNpZ25lZCBsb25nKWluZm8tPnRhc2sgKyBJQTY0X1NUS19PRkZTRVQgLSBzcCkKIAkJICAgIDwgSUE2NF9QVF9SRUdTX1NJWkUpIHsKQEAgLTE5NjMsNyArMTk2OCw3IEBACiAJCQkJX19GVU5DVElPTl9fLCBpcCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQl9CisJfSB3aGlsZSAodW53X3Vud2luZChpbmZvKSA+PSAwKTsKIAl1bndfZ2V0X2lwKGluZm8sICZpcCk7CiAJVU5XX0RQUklOVCgwLCAidW53aW5kLiVzOiBmYWlsZWQgdG8gdW53aW5kIHRvIHVzZXItbGV2ZWwgKGlwPTB4JWx4KVxuIiwKIAkJICAgX19GVU5DVElPTl9fLCBpcCk7CkBAIC0xOTkxLDEzICsxOTk2LDE2IEBACiAJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwogCiAJcmJzbGltaXQgPSAodW5zaWduZWQgbG9uZykgdCArIElBNjRfUkJTX09GRlNFVDsKKwlzdGtsaW1pdCA9ICh1bnNpZ25lZCBsb25nKSB0ICsgSUE2NF9TVEtfT0ZGU0VUOworCiAJcmJzdG9wICAgPSBzdy0+YXJfYnNwc3RvcmU7Ci0JaWYgKHJic3RvcCAtICh1bnNpZ25lZCBsb25nKSB0ID49IElBNjRfU1RLX09GRlNFVCkKKwlpZiAocmJzdG9wID4gc3RrbGltaXQgfHwgcmJzdG9wIDwgcmJzbGltaXQpCiAJCXJic3RvcCA9IHJic2xpbWl0OwogCi0Jc3RrbGltaXQgPSAodW5zaWduZWQgbG9uZykgdCArIElBNjRfU1RLX09GRlNFVDsKIAlpZiAoc3RrdG9wIDw9IHJic3RvcCkKIAkJc3RrdG9wID0gcmJzdG9wOworCWlmIChzdGt0b3AgPiBzdGtsaW1pdCkKKwkJc3RrdG9wID0gc3RrbGltaXQ7CiAKIAlpbmZvLT5yZWdzdGsubGltaXQgPSByYnNsaW1pdDsKIAlpbmZvLT5yZWdzdGsudG9wICAgPSByYnN0b3A7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNjkyMzgyNi4uNWE2NTk2NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDQsNyArNDQsNyBAQAogICAudGV4dCA6IEFUKEFERFIoLnRleHQpIC0gTE9BRF9PRkZTRVQpCiAgICAgewogCUlWVF9URVhUCi0JKigudGV4dCkKKwlURVhUX1RFWFQKIAlTQ0hFRF9URVhUCiAJTE9DS19URVhUCiAJS1BST0JFU19URVhUCkBAIC0yMTQsNyArMjE0LDEyIEBACiAKICAgZGF0YSA6IHsgfSA6ZGF0YQogICAuZGF0YSA6IEFUKEFERFIoLmRhdGEpIC0gTE9BRF9PRkZTRVQpCi0JeyAqKC5kYXRhKSAqKC5kYXRhMSkgKiguZ251LmxpbmtvbmNlLmQqKSBDT05TVFJVQ1RPUlMgfQorCXsKKwkJREFUQV9EQVRBCisJCSooLmRhdGExKQorCQkqKC5nbnUubGlua29uY2UuZCopCisJCUNPTlNUUlVDVE9SUworCX0KIAogICAuID0gQUxJR04oMTYpOwkvKiBncCBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25lZCBmb3IgZXhjLiB0YWJsZSAqLwogICAuZ290IDogQVQoQUREUiguZ290KSAtIExPQURfT0ZGU0VUKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2NvbnRpZy5jIGIvYXJjaC9pYTY0L21tL2NvbnRpZy5jCmluZGV4IDQ0Y2U1ZWQuLjdhYzg1OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9jb250aWcuYworKysgYi9hcmNoL2lhNjQvbW0vY29udGlnLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICIlZCBwYWdlcyBzaGFyZWRcbiIsIHRvdGFsX3NoYXJlZCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJWQgcGFnZXMgc3dhcCBjYWNoZWRcbiIsIHRvdGFsX2NhY2hlZCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiVG90YWwgb2YgJWxkIHBhZ2VzIGluIHBhZ2UgdGFibGUgY2FjaGVcbiIsCi0JICAgICAgIHBndGFibGVfcXVpY2tsaXN0X3RvdGFsX3NpemUoKSk7CisJICAgICAgIHF1aWNrbGlzdF90b3RhbF9zaXplKCkpOwogCXByaW50ayhLRVJOX0lORk8gIiVkIGZyZWUgYnVmZmVyIHBhZ2VzXG4iLCBucl9mcmVlX2J1ZmZlcl9wYWdlcygpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCmluZGV4IDg3MmRhN2EuLjBkYmYwZTggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKQEAgLTMxNyw3ICszMTcsNyBAQAogCSAqIG5vZGVfb25saW5lX21hcCBpcyBub3Qgc2V0IGZvciBob3QtYWRkZWQgbm9kZXMgYXQgdGhpcyB0aW1lLAogCSAqIGJlY2F1c2Ugd2UgYXJlIGhhbGZ3YXkgdGhyb3VnaCBpbml0aWFsaXphdGlvbiBvZiB0aGUgbmV3IG5vZGUncwogCSAqIHN0cnVjdHVyZXMuICBJZiBmb3JfZWFjaF9vbmxpbmVfbm9kZSgpIGlzIHVzZWQsIGEgbmV3IG5vZGUncwotCSAqIHBnX2RhdGFfcHRycyB3aWxsIGJlIG5vdCBpbml0aWFsaXplZC4gSW5zdGVkIG9mIHVzaW5nIGl0LAorCSAqIHBnX2RhdGFfcHRycyB3aWxsIGJlIG5vdCBpbml0aWFsaXplZC4gSW5zdGVhZCBvZiB1c2luZyBpdCwKIAkgKiBwZ2RhdF9saXN0W10gaXMgY2hlY2tlZC4KIAkgKi8KIAlmb3JfZWFjaF9ub2RlKG5vZGUpIHsKQEAgLTU2MSw3ICs1NjEsNyBAQAogCXByaW50ayhLRVJOX0lORk8gIiVkIHBhZ2VzIHNoYXJlZFxuIiwgdG90YWxfc2hhcmVkKTsKIAlwcmludGsoS0VSTl9JTkZPICIlZCBwYWdlcyBzd2FwIGNhY2hlZFxuIiwgdG90YWxfY2FjaGVkKTsKIAlwcmludGsoS0VSTl9JTkZPICJUb3RhbCBvZiAlbGQgcGFnZXMgaW4gcGFnZSB0YWJsZSBjYWNoZVxuIiwKLQkgICAgICAgcGd0YWJsZV9xdWlja2xpc3RfdG90YWxfc2l6ZSgpKTsKKwkgICAgICAgcXVpY2tsaXN0X3RvdGFsX3NpemUoKSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJWQgZnJlZSBidWZmZXIgcGFnZXNcbiIsIG5yX2ZyZWVfYnVmZmVyX3BhZ2VzKCkpOwogfQogCkBAIC02OTMsNiArNjkzLDcgQEAKIAl6ZXJvX3BhZ2VfbWVtbWFwX3B0ciA9IHZpcnRfdG9fcGFnZShpYTY0X2ltdmEoZW1wdHlfemVyb19wYWdlKSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKIHBnX2RhdGFfdCAqYXJjaF9hbGxvY19ub2RlZGF0YShpbnQgbmlkKQogewogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNvbXB1dGVfcGVybm9kZXNpemUobmlkKTsKQEAgLTcxMCwzICs3MTEsNCBAQAogCXBnZGF0X2xpc3RbdXBkYXRlX25vZGVdID0gdXBkYXRlX3BnZGF0OwogCXNjYXR0ZXJfbm9kZV9kYXRhKCk7CiB9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jIGIvYXJjaC9pYTY0L21tL2ZhdWx0LmMKaW5kZXggNTlmM2FiOS4uYjg3Zjc4NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2ZhdWx0LmMKKysrIGIvYXJjaC9pYTY0L21tL2ZhdWx0LmMKQEAgLTcsNDkgKzcsMzYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAKIGV4dGVybiB2b2lkIGRpZSAoY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKIAogI2lmZGVmIENPTkZJR19LUFJPQkVTCi1BVE9NSUNfTk9USUZJRVJfSEVBRChub3RpZnlfcGFnZV9mYXVsdF9jaGFpbik7Ci0KLS8qIEhvb2sgdG8gcmVnaXN0ZXIgZm9yIHBhZ2UgZmF1bHQgbm90aWZpY2F0aW9ucyAqLwotaW50IHJlZ2lzdGVyX3BhZ2VfZmF1bHRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3N0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcCkKIHsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZub3RpZnlfcGFnZV9mYXVsdF9jaGFpbiwgbmIpOwotfQorCWludCByZXQgPSAwOwogCi1pbnQgdW5yZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZub3RpZnlfcGFnZV9mYXVsdF9jaGFpbiwgbmIpOwotfQorCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7CisJCS8qIGtwcm9iZV9ydW5uaW5nKCkgbmVlZHMgc21wX3Byb2Nlc3Nvcl9pZCgpICovCisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVzX2ZhdWx0X2hhbmRsZXIocmVncywgdHJhcCkpCisJCQlyZXQgPSAxOworCQlwcmVlbXB0X2VuYWJsZSgpOworCX0KIAotc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoZW51bSBkaWVfdmFsIHZhbCwgY29uc3QgY2hhciAqc3RyLAotCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyLCBpbnQgdHJhcCwgaW50IHNpZykKLXsKLQlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsKLQkJLnJlZ3MgPSByZWdzLAotCQkuc3RyID0gc3RyLAotCQkuZXJyID0gZXJyLAotCQkudHJhcG5yID0gdHJhcCwKLQkJLnNpZ25yID0gc2lnCi0JfTsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5vdGlmeV9wYWdlX2ZhdWx0X2NoYWluLCB2YWwsICZhcmdzKTsKKwlyZXR1cm4gcmV0OwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKLQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVyciwgaW50IHRyYXAsIGludCBzaWcpCitzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXApCiB7Ci0JcmV0dXJuIE5PVElGWV9ET05FOworCXJldHVybiAwOwogfQogI2VuZGlmCiAKQEAgLTExOCw4ICsxMDUsNyBAQAogCS8qCiAJICogVGhpcyBpcyB0byBoYW5kbGUgdGhlIGtwcm9iZXMgb24gdXNlciBzcGFjZSBhY2Nlc3MgaW5zdHJ1Y3Rpb25zCiAJICovCi0JaWYgKG5vdGlmeV9wYWdlX2ZhdWx0KERJRV9QQUdFX0ZBVUxULCAicGFnZSBmYXVsdCIsIHJlZ3MsIGNvZGUsIFRSQVBfQlJLUFQsCi0JCQkJCVNJR1NFR1YpID09IE5PVElGWV9TVE9QKQorCWlmIChub3RpZnlfcGFnZV9mYXVsdChyZWdzLCBUUkFQX0JSS1BUKSkKIAkJcmV0dXJuOwogCiAJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2lhNjQvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCBjN2M5MGY0Li4xMzQ2YjdmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL2lhNjQvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxhc20vbW1hbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2luaXQuYyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKaW5kZXggY2ZmYjFlOC4uYzE0YWJlZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2luaXQuYworKysgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCkBAIC0zOSw5ICszOSw2IEBACiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiAKLURFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcgKiwgX19wZ3RhYmxlX3F1aWNrbGlzdCk7Ci1ERUZJTkVfUEVSX0NQVShsb25nLCBfX3BndGFibGVfcXVpY2tsaXN0X3NpemUpOwotCiBleHRlcm4gdm9pZCBpYTY0X3RsYl9pbml0ICh2b2lkKTsKIAogdW5zaWduZWQgbG9uZyBNQVhfRE1BX0FERFJFU1MgPSBQQUdFX09GRlNFVCArIDB4MTAwMDAwMDAwVUw7CkBAIC01Niw1NCArNTMsNiBAQAogc3RydWN0IHBhZ2UgKnplcm9fcGFnZV9tZW1tYXBfcHRyOwkvKiBtYXAgZW50cnkgZm9yIHplcm8gcGFnZSAqLwogRVhQT1JUX1NZTUJPTCh6ZXJvX3BhZ2VfbWVtbWFwX3B0cik7CiAKLSNkZWZpbmUgTUlOX1BHVF9QQUdFUwkJCTI1VUwKLSNkZWZpbmUgTUFYX1BHVF9GUkVFU19QRVJfUEFTUwkJMTZMCi0jZGVmaW5lIFBHVF9GUkFDVElPTl9PRl9OT0RFX01FTQkxNgotCi1zdGF0aWMgaW5saW5lIGxvbmcKLW1heF9wZ3RfcGFnZXModm9pZCkKLXsKLQl1NjQgbm9kZV9mcmVlX3BhZ2VzLCBtYXhfcGd0X3BhZ2VzOwotCi0jaWZuZGVmCUNPTkZJR19OVU1BCi0Jbm9kZV9mcmVlX3BhZ2VzID0gbnJfZnJlZV9wYWdlcygpOwotI2Vsc2UKLQlub2RlX2ZyZWVfcGFnZXMgPSBub2RlX3BhZ2Vfc3RhdGUobnVtYV9ub2RlX2lkKCksIE5SX0ZSRUVfUEFHRVMpOwotI2VuZGlmCi0JbWF4X3BndF9wYWdlcyA9IG5vZGVfZnJlZV9wYWdlcyAvIFBHVF9GUkFDVElPTl9PRl9OT0RFX01FTTsKLQltYXhfcGd0X3BhZ2VzID0gbWF4KG1heF9wZ3RfcGFnZXMsIE1JTl9QR1RfUEFHRVMpOwotCXJldHVybiBtYXhfcGd0X3BhZ2VzOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcKLW1pbl9wYWdlc190b19mcmVlKHZvaWQpCi17Ci0JbG9uZyBwYWdlc190b19mcmVlOwotCi0JcGFnZXNfdG9fZnJlZSA9IHBndGFibGVfcXVpY2tsaXN0X3NpemUgLSBtYXhfcGd0X3BhZ2VzKCk7Ci0JcGFnZXNfdG9fZnJlZSA9IG1pbihwYWdlc190b19mcmVlLCBNQVhfUEdUX0ZSRUVTX1BFUl9QQVNTKTsKLQlyZXR1cm4gcGFnZXNfdG9fZnJlZTsKLX0KLQotdm9pZAotY2hlY2tfcGd0X2NhY2hlKHZvaWQpCi17Ci0JbG9uZyBwYWdlc190b19mcmVlOwotCi0JaWYgKHVubGlrZWx5KHBndGFibGVfcXVpY2tsaXN0X3NpemUgPD0gTUlOX1BHVF9QQUdFUykpCi0JCXJldHVybjsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCXdoaWxlICh1bmxpa2VseSgocGFnZXNfdG9fZnJlZSA9IG1pbl9wYWdlc190b19mcmVlKCkpID4gMCkpIHsKLQkJd2hpbGUgKHBhZ2VzX3RvX2ZyZWUtLSkgewotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBndGFibGVfcXVpY2tsaXN0X2FsbG9jKCkpOwotCQl9Ci0JCXByZWVtcHRfZW5hYmxlKCk7Ci0JCXByZWVtcHRfZGlzYWJsZSgpOwotCX0KLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCiB2b2lkCiBsYXp5X21tdV9wcm90X3VwZGF0ZSAocHRlX3QgcHRlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL3RsYi5jIGIvYXJjaC9pYTY0L21tL3RsYi5jCmluZGV4IGZmYWQ3NjIuLmZhNGU2ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS90bGIuYworKysgYi9hcmNoL2lhNjQvbW0vdGxiLmMKQEAgLTMyLDkgKzMyLDkgQEAKIH0gcHVyZ2U7CiAKIHN0cnVjdCBpYTY0X2N0eCBpYTY0X2N0eCA9IHsKLQkubG9jayA9CQlTUElOX0xPQ0tfVU5MT0NLRUQsCi0JLm5leHQgPQkJMSwKLQkubWF4X2N0eCA9CX4wVQorCS5sb2NrID0JX19TUElOX0xPQ0tfVU5MT0NLRUQoaWE2NF9jdHgubG9jayksCisJLm5leHQgPQkxLAorCS5tYXhfY3R4ID0gfjBVCiB9OwogCiBERUZJTkVfUEVSX0NQVSh1OCwgaWE2NF9uZWVkX3RsYl9mbHVzaCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL3BjaS5jIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwppbmRleCA5ZjYzNTg5Li43MzY5NmI0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvcGNpL3BjaS5jCisrKyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CkBAIC0zNTUsMTAgKzM1NCwxMyBAQAogCiAJYWNwaV93YWxrX3Jlc291cmNlcyhkZXZpY2UtPmhhbmRsZSwgTUVUSE9EX05BTUVfX0NSUywgY291bnRfd2luZG93LAogCQkJJndpbmRvd3MpOwotCWNvbnRyb2xsZXItPndpbmRvdyA9IGttYWxsb2Nfbm9kZShzaXplb2YoKmNvbnRyb2xsZXItPndpbmRvdykgKiB3aW5kb3dzLAotCQkJR0ZQX0tFUk5FTCwgY29udHJvbGxlci0+bm9kZSk7Ci0JaWYgKCFjb250cm9sbGVyLT53aW5kb3cpCi0JCWdvdG8gb3V0MjsKKwlpZiAod2luZG93cykgeworCQljb250cm9sbGVyLT53aW5kb3cgPQorCQkJa21hbGxvY19ub2RlKHNpemVvZigqY29udHJvbGxlci0+d2luZG93KSAqIHdpbmRvd3MsCisJCQkJICAgICBHRlBfS0VSTkVMLCBjb250cm9sbGVyLT5ub2RlKTsKKwkJaWYgKCFjb250cm9sbGVyLT53aW5kb3cpCisJCQlnb3RvIG91dDI7CisJfQogCiAJbmFtZSA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOwogCWlmICghbmFtZSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2J0ZS5jCmluZGV4IGZmMWM1NTYuLmIzNjJkNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYwpAQCAtNjMsNyArNjMsNyBAQAogICogVXNlIHRoZSBibG9jayB0cmFuc2ZlciBlbmdpbmUgdG8gbW92ZSBrZXJuZWwgbWVtb3J5IGZyb20gc3JjIHRvIGRlc3QKICAqIHVzaW5nIHRoZSBhc3NpZ25lZCBtb2RlLgogICoKLSAqIFBhcmFtYXRlcnM6CisgKiBQYXJhbWV0ZXJzOgogICogICBzcmMgLSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB0cmFuc2ZlciBzb3VyY2UuCiAgKiAgIGRlc3QgLSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB0cmFuc2ZlciBkZXN0aW5hdGlvbi4KICAqICAgbGVuIC0gbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIGZyb20gc291cmNlIHRvIGRlc3QuCkBAIC0yNDcsNyArMjQ3LDcgQEAKICAqIHVzZSB0aGUgYmxvY2sgdHJhbnNmZXIgZW5naW5lIHRvIG1vdmUga2VybmVsCiAgKiBtZW1vcnkgZnJvbSBzcmMgdG8gZGVzdCB1c2luZyB0aGUgYXNzaWduZWQgbW9kZS4KICAqCi0gKiBQYXJhbWF0ZXJzOgorICogUGFyYW1ldGVyczoKICAqICAgc3JjIC0gcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgdHJhbnNmZXIgc291cmNlLgogICogICBkZXN0IC0gcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgdHJhbnNmZXIgZGVzdGluYXRpb24uCiAgKiAgIGxlbiAtIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciBmcm9tIHNvdXJjZSB0byBkZXN0LgpAQCAtMjU1LDcgKzI1NSw3IEBACiAgKiAgICAgICAgICBmb3IgSUJDVDAvMSBpbiB0aGUgU0dJIGRvY3VtZW50YXRpb24uCiAgKgogICogTk9URTogSWYgdGhlIHNvdXJjZSwgZGVzdCwgYW5kIGxlbiBhcmUgYWxsIGNhY2hlIGxpbmUgYWxpZ25lZCwKLSAqIHRoZW4gaXQgd291bGQgYmUgX0ZBUl8gcHJlZmVycmFibGUgdG8gdXNlIGJ0ZV9jb3B5IGluc3RlYWQuCisgKiB0aGVuIGl0IHdvdWxkIGJlIF9GQVJfIHByZWZlcmFibGUgdG8gdXNlIGJ0ZV9jb3B5IGluc3RlYWQuCiAgKi8KIGJ0ZV9yZXN1bHRfdCBidGVfdW5hbGlnbmVkX2NvcHkodTY0IHNyYywgdTY0IGRlc3QsIHU2NCBsZW4sIHU2NCBtb2RlKQogewpAQCAtMzAwLDcgKzMwMCw3IEBACiAJICogYSBzdGFuZGFyZCBidGUgY29weS4KIAkgKgogCSAqIE9uZSBuYXN0eSBleGNlcHRpb24gdG8gdGhlIGFib3ZlIHJ1bGUgaXMgd2hlbiB0aGUKLQkgKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBub3Qgc3ltZXRyaWNhbGx5CisJICogc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgbm90IHN5bW1ldHJpY2FsbHkKIAkgKiBtaXMtYWxpZ25lZC4gIElmIHRoZSBzb3VyY2Ugb2Zmc2V0IGZyb20gdGhlIGZpcnN0CiAJICogY2FjaGUgbGluZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGVzdGluYXRpb24gb2Zmc2V0LAogCSAqIHdlIG1ha2UgdGhlIGZpcnN0IHNlY3Rpb24gYmUgdGhlIGVudGlyZSB0cmFuc2ZlcgpAQCAtMzM3LDcgKzMzNyw3IEBACiAKIAkJCWlmIChmb290QmNvcHlEZXN0ID09IChoZWFkQmNvcHlEZXN0ICsgaGVhZEJjb3B5TGVuKSkgewogCQkJCS8qCi0JCQkJICogV2UgaGF2ZSB0d28gY29udGlnb3VzIGJjb3B5CisJCQkJICogV2UgaGF2ZSB0d28gY29udGlndW91cyBiY29weQogCQkJCSAqIGJsb2Nrcy4gIE1lcmdlIHRoZW0uCiAJCQkJICovCiAJCQkJaGVhZEJjb3B5TGVuICs9IGZvb3RCY29weUxlbjsKQEAgLTM3NSw3ICszNzUsNyBAQAogCX0gZWxzZSB7CiAKIAkJLyoKLQkJICogVGhlIHRyYW5zZmVyIGlzIG5vdCBzeW1ldHJpYywgd2Ugd2lsbAorCQkgKiBUaGUgdHJhbnNmZXIgaXMgbm90IHN5bW1ldHJpYywgd2Ugd2lsbAogCQkgKiBhbGxvY2F0ZSBhIGJ1ZmZlciBsYXJnZSBlbm91Z2ggZm9yIGFsbCB0aGUKIAkJICogZGF0YSwgYnRlX2NvcHkgaW50byB0aGF0IGJ1ZmZlciBhbmQgdGhlbgogCQkgKiBiY29weSB0byB0aGUgZGVzdGluYXRpb24uCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2J0ZV9lcnJvci5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGVfZXJyb3IuYwppbmRleCBiNmZjZjgxLi4yN2M1OTM2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2J0ZV9lcnJvci5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlX2Vycm9yLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCX0KIAogCUJURV9QUklOVEsoKCJlaDolcDolZCBDbGVhbmluZyB1cFxuIiwgZXJyX25vZGVwZGEsIHNtcF9wcm9jZXNzb3JfaWQoKSkpOwotCS8qIFJlZW5hYmxlIGJvdGggYnRlIGludGVyZmFjZXMgKi8KKwkvKiBSZS1lbmFibGUgYm90aCBidGUgaW50ZXJmYWNlcyAqLwogCWltZW0uaWlfaW1lbV9yZWd2YWwgPSBSRU1PVEVfSFVCX0wobmFzaWQsIElJT19JTUVNKTsKIAlpbWVtLmlpX2ltZW1fZmxkX3MuaV9iMF9lc2QgPSBpbWVtLmlpX2ltZW1fZmxkX3MuaV9iMV9lc2QgPSAxOwogCVJFTU9URV9IVUJfUyhuYXNpZCwgSUlPX0lNRU0sIGltZW0uaWlfaW1lbV9yZWd2YWwpOwpAQCAtMjQzLDcgKzI0Myw3IEBACiAKIAkvKgogCSAqIFRoZSBjYWxsZXIgaGFzIGFscmVhZHkgZmlndXJlZCBvdXQgdGhlIGVycm9yIHR5cGUsIHdlIHNhdmUgdGhhdAotCSAqIGluIHRoZSBidGUgaGFuZGxlIHN0cnVjdHVyZSBmb3IgdGhlIHRocmVhZCBleGNlcmNpc2luZyB0aGUKKwkgKiBpbiB0aGUgYnRlIGhhbmRsZSBzdHJ1Y3R1cmUgZm9yIHRoZSB0aHJlYWQgZXhlcmNpc2luZyB0aGUKIAkgKiBpbnRlcmZhY2UgdG8gY29uc3VtZS4KIAkgKi8KIAlidGUtPmJoX2Vycm9yID0gaW9lLT5pZV9lcnJvcnR5cGUgKyBCVEVGQUlMX09GRlNFVDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCmluZGV4IGQ0OGJjZDguLjc4N2VkNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAKIAllbGVtZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN5c2RhdGFfZWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVsZW1lbnQpIHsKLQkJZGV2X2RiZyhkZXYsICIlczogb3V0IG9mIG1lbW9yeSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IG91dCBvZiBtZW1vcnkhXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm47CiAJfQogCWVsZW1lbnQtPnN5c2RhdGEgPSBTTl9QQ0lERVZfSU5GTyhkZXYpOwpAQCAtNDc5LDcgKzQ3OSw3IEBACiAJfQogCiAJLyoKLQkgKiBwcmltZSBzbl9wY2lfcHJvdmlkZXJbXS4gIEluZGl2aWRpYWwgcHJvdmlkZXIgaW5pdCByb3V0aW5lcyB3aWxsCisJICogcHJpbWUgc25fcGNpX3Byb3ZpZGVyW10uICBJbmRpdmlkdWFsIHByb3ZpZGVyIGluaXQgcm91dGluZXMgd2lsbAogCSAqIG92ZXJyaWRlIHRoZWlyIHJlc3BlY3RpdmUgZGVmYXVsdCBlbnRyaWVzLgogCSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pcnEuYwppbmRleCA4ZDJhMWJmLi43ZjZkMjM2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaXJxLmMKQEAgLTU5LDYgKzU5LDIyIEBACiAJCQkodTY0KSBzbl9pcnFfaW5mby0+aXJxX2Nvb2tpZSwgMCwgMCk7CiB9CiAKK3U2NCBzbl9pbnRyX3JlZGlyZWN0KG5hc2lkX3QgbG9jYWxfbmFzaWQsIGludCBsb2NhbF93aWRnZXQsCisJCSAgICAgIHN0cnVjdCBzbl9pcnFfaW5mbyAqc25faXJxX2luZm8sCisJCSAgICAgIG5hc2lkX3QgcmVxX25hc2lkLCBpbnQgcmVxX3NsaWNlKQoreworCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOworCXJldF9zdHVmZi5zdGF0dXMgPSAwOworCXJldF9zdHVmZi52MCA9IDA7CisKKwlTQUxfQ0FMTF9OT0xPQ0socmV0X3N0dWZmLCAodTY0KSBTTl9TQUxfSU9JRl9JTlRFUlJVUFQsCisJCQkodTY0KSBTQUxfSU5UUl9SRURJUkVDVCwgKHU2NCkgbG9jYWxfbmFzaWQsCisJCQkodTY0KSBsb2NhbF93aWRnZXQsIF9fcGEoc25faXJxX2luZm8pLAorCQkJKHU2NCkgcmVxX25hc2lkLCAodTY0KSByZXFfc2xpY2UsIDApOworCisJcmV0dXJuIHJldF9zdHVmZi5zdGF0dXM7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc25fc3RhcnR1cF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlyZXR1cm4gMDsKQEAgLTEyNywxNSArMTQzLDggQEAKIAlzdHJ1Y3Qgc25faXJxX2luZm8gKm5ld19pcnFfaW5mbzsKIAlzdHJ1Y3Qgc25fcGNpYnVzX3Byb3ZpZGVyICpwY2lfcHJvdmlkZXI7CiAKLQluZXdfaXJxX2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25faXJxX2luZm8pLCBHRlBfQVRPTUlDKTsKLQlpZiAobmV3X2lycV9pbmZvID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JbWVtY3B5KG5ld19pcnFfaW5mbywgc25faXJxX2luZm8sIHNpemVvZihzdHJ1Y3Qgc25faXJxX2luZm8pKTsKLQotCWJyaWRnZSA9ICh1NjQpIG5ld19pcnFfaW5mby0+aXJxX2JyaWRnZTsKKwlicmlkZ2UgPSAodTY0KSBzbl9pcnFfaW5mby0+aXJxX2JyaWRnZTsKIAlpZiAoIWJyaWRnZSkgewotCQlrZnJlZShuZXdfaXJxX2luZm8pOwogCQlyZXR1cm4gTlVMTDsgLyogaXJxIGlzIG5vdCBhIGRldmljZSBpbnRlcnJ1cHQgKi8KIAl9CiAKQEAgLTE0NSw4ICsxNTQsMjUgQEAKIAkJbG9jYWxfd2lkZ2V0ID0gVElPX1NXSU5fV0lER0VUTlVNKGJyaWRnZSk7CiAJZWxzZQogCQlsb2NhbF93aWRnZXQgPSBTV0lOX1dJREdFVE5VTShicmlkZ2UpOwotCiAJdmVjdG9yID0gc25faXJxX2luZm8tPmlycV9pcnE7CisKKwkvKiBNYWtlIHVzZSBvZiBTQUxfSU5UUl9SRURJUkVDVCBpZiBQUk9NIHN1cHBvcnRzIGl0ICovCisJc3RhdHVzID0gc25faW50cl9yZWRpcmVjdChsb2NhbF9uYXNpZCwgbG9jYWxfd2lkZ2V0LCBzbl9pcnFfaW5mbywgbmFzaWQsIHNsaWNlKTsKKwlpZiAoIXN0YXR1cykgeworCQluZXdfaXJxX2luZm8gPSBzbl9pcnFfaW5mbzsKKwkJZ290byBmaW5pc2hfdXA7CisJfQorCisJLyoKKwkgKiBQUk9NIGRvZXMgbm90IHN1cHBvcnQgU0FMX0lOVFJfUkVESVJFQ1QsIG9yIGl0IGZhaWxlZC4KKwkgKiBSZXZlcnQgdG8gb2xkIG1ldGhvZC4KKwkgKi8KKwluZXdfaXJxX2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25faXJxX2luZm8pLCBHRlBfQVRPTUlDKTsKKwlpZiAobmV3X2lycV9pbmZvID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbWVtY3B5KG5ld19pcnFfaW5mbywgc25faXJxX2luZm8sIHNpemVvZihzdHJ1Y3Qgc25faXJxX2luZm8pKTsKKwogCS8qIEZyZWUgdGhlIG9sZCBQUk9NIG5ld19pcnFfaW5mbyBzdHJ1Y3R1cmUgKi8KIAlzbl9pbnRyX2ZyZWUobG9jYWxfbmFzaWQsIGxvY2FsX3dpZGdldCwgbmV3X2lycV9pbmZvKTsKIAl1bnJlZ2lzdGVyX2ludHJfcGRhKG5ld19pcnFfaW5mbyk7CkBAIC0xNjIsMTEgKzE4OCwxOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlyZWdpc3Rlcl9pbnRyX3BkYShuZXdfaXJxX2luZm8pOworCXNwaW5fbG9jaygmc25faXJxX2luZm9fbG9jayk7CisJbGlzdF9yZXBsYWNlX3JjdSgmc25faXJxX2luZm8tPmxpc3QsICZuZXdfaXJxX2luZm8tPmxpc3QpOworCXNwaW5fdW5sb2NrKCZzbl9pcnFfaW5mb19sb2NrKTsKKwljYWxsX3JjdSgmc25faXJxX2luZm8tPnJjdSwgc25faXJxX2luZm9fZnJlZSk7CisKKworZmluaXNoX3VwOgogCS8qIFVwZGF0ZSBrZXJuZWxzIG5ld19pcnFfaW5mbyB3aXRoIG5ldyB0YXJnZXQgaW5mbyAqLwogCWNwdWlkID0gbmFzaWRfc2xpY2VfdG9fY3B1aWQobmV3X2lycV9pbmZvLT5pcnFfbmFzaWQsCiAJCQkJICAgICBuZXdfaXJxX2luZm8tPmlycV9zbGljZSk7CiAJbmV3X2lycV9pbmZvLT5pcnFfY3B1aWQgPSBjcHVpZDsKLQlyZWdpc3Rlcl9pbnRyX3BkYShuZXdfaXJxX2luZm8pOwogCiAJcGNpX3Byb3ZpZGVyID0gc25fcGNpX3Byb3ZpZGVyW25ld19pcnFfaW5mby0+aXJxX2JyaWRnZV90eXBlXTsKIApAQCAtMTc4LDExICsyMTEsNiBAQAogCSAgICBwY2lfcHJvdmlkZXIgJiYgcGNpX3Byb3ZpZGVyLT50YXJnZXRfaW50ZXJydXB0KQogCQkocGNpX3Byb3ZpZGVyLT50YXJnZXRfaW50ZXJydXB0KShuZXdfaXJxX2luZm8pOwogCi0Jc3Bpbl9sb2NrKCZzbl9pcnFfaW5mb19sb2NrKTsKLQlsaXN0X3JlcGxhY2VfcmN1KCZzbl9pcnFfaW5mby0+bGlzdCwgJm5ld19pcnFfaW5mby0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnNuX2lycV9pbmZvX2xvY2spOwotCWNhbGxfcmN1KCZzbl9pcnFfaW5mby0+cmN1LCBzbl9pcnFfaW5mb19mcmVlKTsKLQogI2lmZGVmIENPTkZJR19TTVAKIAljcHVwaHlzID0gY3B1X3BoeXNpY2FsX2lkKGNwdWlkKTsKIAlzZXRfaXJxX2FmZmluaXR5X2luZm8oKHZlY3RvciAmIDB4ZmYpLCBjcHVwaHlzLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYwppbmRleCBhOWJlZDVjLi42ODRiMWM5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAkgKiBJTyBvbiBTTjIgaXMgZG9uZSB2aWEgU0FMIGNhbGxzLCBlYXJseV9wcmludGsgd29uJ3Qgd29yayB3aXRob3V0IHRoaXMuCiAJICoKIAkgKiBUaGlzIGNvZGUgZHVwbGljYXRlcyBzb21lIG9mIHRoZSBBQ1BJIHRhYmxlIHBhcnNpbmcgdGhhdCBpcyBpbiBlZmkuYyAmIHNhbC5jLgotCSAqIEFueSBjaGFuZ2VzIHRvIHRob3NlIGZpbGUgbWF5IGhhdmUgdG8gYmUgbWFkZSBoZXJlYXMgd2VsbC4KKwkgKiBBbnkgY2hhbmdlcyB0byB0aG9zZSBmaWxlIG1heSBoYXZlIHRvIGJlIG1hZGUgaGVyZSBhcyB3ZWxsLgogCSAqLwogCWVmaV9zeXN0YWIgPSAoZWZpX3N5c3RlbV90YWJsZV90ICopIF9fdmEoaWE2NF9ib290X3BhcmFtLT5lZmlfc3lzdGFiKTsKIAljb25maWdfdGFibGVzID0gX192YShlZmlfc3lzdGFiLT50YWJsZXMpOwpAQCAtMTk0LDcgKzE5NCw3IEBACiB9CiAKIGV4dGVybiBpbnQgcGxhdGZvcm1faW50cl9saXN0W107Ci1zdGF0aWMgaW50IF9faW5pdGRhdGEgc2h1Yl8xXzFfZm91bmQ7CitzdGF0aWMgaW50IF9fY3B1aW5pdGRhdGEgc2h1Yl8xXzFfZm91bmQ7CiAKIC8qCiAgKiBzbl9jaGVja19mb3Jfd2FycwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc24yX3NtcC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc24yX3NtcC5jCmluZGV4IDYwMTc0N2IuLjAzM2M4YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuMl9zbXAuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbjJfc21wLmMKQEAgLTQ2LDYgKzQ2LDkgQEAKIAogc3RhdGljICBfX2NhY2hlbGluZV9hbGlnbmVkIERFRklORV9TUElOTE9DSyhzbjJfZ2xvYmFsX3B0Y19sb2NrKTsKIAorLyogMCA9IG9sZCBhbGdvcml0aG0gKG5vIElQSSBmbHVzaGVzKSwgMSA9IGlwaSBkZWFkbG9jayBmbHVzaCwgMiA9IGlwaSBpbnN0ZWFkIG9mIFNIVUIgcHRjLCA+MiA9IGFsd2F5cyBpcGkgKi8KK3N0YXRpYyBpbnQgc24yX2ZsdXNoX29wdCA9IDA7CisKIGV4dGVybiB1bnNpZ25lZCBsb25nCiBzbjJfcHRjX2RlYWRsb2NrX3JlY292ZXJ5X2NvcmUodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nLAogCQkJICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZywKQEAgLTc2LDYgKzc5LDggQEAKIAl1bnNpZ25lZCBsb25nIHNodWJfaXRjX2Nsb2NrczsKIAl1bnNpZ25lZCBsb25nIHNodWJfaXRjX2Nsb2Nrc19tYXg7CiAJdW5zaWduZWQgbG9uZyBzaHViX3B0Y19mbHVzaGVzX25vdF9teV9tbTsKKwl1bnNpZ25lZCBsb25nIHNodWJfaXBpX2ZsdXNoZXM7CisJdW5zaWduZWQgbG9uZyBzaHViX2lwaV9mbHVzaGVzX2l0Y19jbG9ja3M7CiB9OwogCiAjZGVmaW5lIHNuMl9wdGN0ZXN0CTAKQEAgLTk5LDcgKzEwNCw3IEBACiAgKgogICogU04yIFBJTyB3cml0ZXMgZnJvbSBzZXBhcmF0ZSBDUFVzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBhcnJpdmUgaW4gb3JkZXIuCiAgKiBDb250ZXh0IHN3aXRjaGluZyB1c2VyIHRocmVhZHMgd2hpY2ggaGF2ZSBtZW1vcnktbWFwcGVkIE1NSU8gbWF5IGNhdXNlCi0gKiBQSU9zIHRvIGlzc3VlIGZyb20gc2VwZXJhdGUgQ1BVcywgdGh1cyB0aGUgUElPIHdyaXRlcyBtdXN0IGJlIGRyYWluZWQKKyAqIFBJT3MgdG8gaXNzdWUgZnJvbSBzZXBhcmF0ZSBDUFVzLCB0aHVzIHRoZSBQSU8gd3JpdGVzIG11c3QgYmUgZHJhaW5lZAogICogZnJvbSB0aGUgcHJldmlvdXMgQ1BVJ3MgU2h1YiBiZWZvcmUgZXhlY3V0aW9uIHJlc3VtZXMgb24gdGhlIG5ldyBDUFUuCiAgKi8KIHZvaWQgc25fbWlncmF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCkBAIC0xMjEsNiArMTI2LDE4IEBACiAJCWZsdXNoX3RsYl9tbShtbSk7CiB9CiAKK3N0YXRpYyB2b2lkCitzbjJfaXBpX2ZsdXNoX2FsbF90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyBpdGM7CisKKwlpdGMgPSBpYTY0X2dldF9pdGMoKTsKKwlzbXBfZmx1c2hfdGxiX2NwdW1hc2sobW0tPmNwdV92bV9tYXNrKTsKKwlpdGMgPSBpYTY0X2dldF9pdGMoKSAtIGl0YzsKKwlfX2dldF9jcHVfdmFyKHB0Y3N0YXRzKS5zaHViX2lwaV9mbHVzaGVzX2l0Y19jbG9ja3MgKz0gaXRjOworCV9fZ2V0X2NwdV92YXIocHRjc3RhdHMpLnNodWJfaXBpX2ZsdXNoZXMrKzsKK30KKwogLyoqCiAgKiBzbjJfZ2xvYmFsX3RsYl9wdXJnZSAtIGdsb2JhbGx5IHB1cmdlIHRyYW5zbGF0aW9uIGNhY2hlIG9mIHZpcnR1YWwgYWRkcmVzcyByYW5nZQogICogQG1tOiBtbV9zdHJ1Y3QgY29udGFpbmluZyB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UKQEAgLTE1NCw3ICsxNzEsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGl0YywgaXRjMiwgZmxhZ3MsIGRhdGEwID0gMCwgZGF0YTEgPSAwLCBycl92YWx1ZSwgb2xkX3JyID0gMDsKIAlzaG9ydCBuYXNpZHNbTUFYX05VTU5PREVTXSwgbml4OwogCW5vZGVtYXNrX3Qgbm9kZXNfZmx1c2hlZDsKLQlpbnQgYWN0aXZlLCBtYXhfYWN0aXZlLCBkZWFkbG9jazsKKwlpbnQgYWN0aXZlLCBtYXhfYWN0aXZlLCBkZWFkbG9jaywgZmx1c2hfb3B0ID0gc24yX2ZsdXNoX29wdDsKKworCWlmIChmbHVzaF9vcHQgPiAyKSB7CisJCXNuMl9pcGlfZmx1c2hfYWxsX3RsYihtbSk7CisJCXJldHVybjsKKwl9CiAKIAlub2Rlc19jbGVhcihub2Rlc19mbHVzaGVkKTsKIAlpID0gMDsKQEAgLTE4OSw2ICsyMTEsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAorCWlmIChmbHVzaF9vcHQgPT0gMikgeworCQlzbjJfaXBpX2ZsdXNoX2FsbF90bGIobW0pOworCQlwcmVlbXB0X2VuYWJsZSgpOworCQlyZXR1cm47CisJfQorCiAJaXRjID0gaWE2NF9nZXRfaXRjKCk7CiAJbml4ID0gMDsKIAlmb3JfZWFjaF9ub2RlX21hc2soY25vZGUsIG5vZGVzX2ZsdXNoZWQpCkBAIC0yNTYsNiArMjg0LDggQEAKIAkJCX0KIAkJCWlmIChhY3RpdmUgPj0gbWF4X2FjdGl2ZSB8fCBpID09IChuaXggLSAxKSkgewogCQkJCWlmICgoZGVhZGxvY2sgPSB3YWl0X3Bpb3djKCkpKSB7CisJCQkJCWlmIChmbHVzaF9vcHQgPT0gMSkKKwkJCQkJCWdvdG8gZG9uZTsKIAkJCQkJc24yX3B0Y19kZWFkbG9ja19yZWNvdmVyeShuYXNpZHMsIGliZWdpbiwgaSwgbXluYXNpZCwgcHRjMCwgZGF0YTAsIHB0YzEsIGRhdGExKTsKIAkJCQkJaWYgKHJlc2V0X21heF9hY3RpdmVfb25fZGVhZGxvY2soKSkKIAkJCQkJCW1heF9hY3RpdmUgPSAxOwpAQCAtMjY3LDYgKzI5Nyw3IEBACiAJCXN0YXJ0ICs9ICgxVUwgPDwgbmJpdHMpOwogCX0gd2hpbGUgKHN0YXJ0IDwgZW5kKTsKIAorZG9uZToKIAlpdGMyID0gaWE2NF9nZXRfaXRjKCkgLSBpdGMyOwogCV9fZ2V0X2NwdV92YXIocHRjc3RhdHMpLnNodWJfaXRjX2Nsb2NrcyArPSBpdGMyOwogCWlmIChpdGMyID4gX19nZXRfY3B1X3ZhcihwdGNzdGF0cykuc2h1Yl9pdGNfY2xvY2tzX21heCkKQEAgLTI3OSw2ICszMTAsMTEgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoUFRDX0xPQ0soc2h1YjEpLCBmbGFncyk7CiAKKwlpZiAoZmx1c2hfb3B0ID09IDEgJiYgZGVhZGxvY2spIHsKKwkJX19nZXRfY3B1X3ZhcihwdGNzdGF0cykuZGVhZGxvY2tzKys7CisJCXNuMl9pcGlfZmx1c2hfYWxsX3RsYihtbSk7CisJfQorCiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIApAQCAtNDI1LDI0ICs0NjEsNDIgQEAKIAogCWlmICghY3B1KSB7CiAJCXNlcV9wcmludGYoZmlsZSwKLQkJCSAgICIjIGNwdSBwdGNfbCBuZXdyaWQgcHRjX2ZsdXNoZXMgbm9kZXNfZmx1c2hlZCBkZWFkbG9ja3MgbG9ja19uc2VjIHNodWJfbnNlYyBzaHViX25zZWNfbWF4IG5vdF9teV9tbSBkZWFkbG9jazJcbiIpOwotCQlzZXFfcHJpbnRmKGZpbGUsICIjIHB0Y3Rlc3QgJWRcbiIsIHNuMl9wdGN0ZXN0KTsKKwkJCSAgICIjIGNwdSBwdGNfbCBuZXdyaWQgcHRjX2ZsdXNoZXMgbm9kZXNfZmx1c2hlZCBkZWFkbG9ja3MgbG9ja19uc2VjIHNodWJfbnNlYyBzaHViX25zZWNfbWF4IG5vdF9teV9tbSBkZWFkbG9jazIgaXBpX2ZsdWNoZXMgaXBpX25zZWNcbiIpOworCQlzZXFfcHJpbnRmKGZpbGUsICIjIHB0Y3Rlc3QgJWQsIGZsdXNob3B0ICVkXG4iLCBzbjJfcHRjdGVzdCwgc24yX2ZsdXNoX29wdCk7CiAJfQogCiAJaWYgKGNwdSA8IE5SX0NQVVMgJiYgY3B1X29ubGluZShjcHUpKSB7CiAJCXN0YXQgPSAmcGVyX2NwdShwdGNzdGF0cywgY3B1KTsKLQkJc2VxX3ByaW50ZihmaWxlLCAiY3B1ICVkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZFxuIiwgY3B1LCBzdGF0LT5wdGNfbCwKKwkJc2VxX3ByaW50ZihmaWxlLCAiY3B1ICVkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkXG4iLCBjcHUsIHN0YXQtPnB0Y19sLAogCQkJCXN0YXQtPmNoYW5nZV9yaWQsIHN0YXQtPnNodWJfcHRjX2ZsdXNoZXMsIHN0YXQtPm5vZGVzX2ZsdXNoZWQsCiAJCQkJc3RhdC0+ZGVhZGxvY2tzLAogCQkJCTEwMDAgKiBzdGF0LT5sb2NrX2l0Y19jbG9ja3MgLyBwZXJfY3B1KGNwdV9pbmZvLCBjcHUpLmN5Y19wZXJfdXNlYywKIAkJCQkxMDAwICogc3RhdC0+c2h1Yl9pdGNfY2xvY2tzIC8gcGVyX2NwdShjcHVfaW5mbywgY3B1KS5jeWNfcGVyX3VzZWMsCiAJCQkJMTAwMCAqIHN0YXQtPnNodWJfaXRjX2Nsb2Nrc19tYXggLyBwZXJfY3B1KGNwdV9pbmZvLCBjcHUpLmN5Y19wZXJfdXNlYywKIAkJCQlzdGF0LT5zaHViX3B0Y19mbHVzaGVzX25vdF9teV9tbSwKLQkJCQlzdGF0LT5kZWFkbG9ja3MyKTsKKwkJCQlzdGF0LT5kZWFkbG9ja3MyLAorCQkJCXN0YXQtPnNodWJfaXBpX2ZsdXNoZXMsCisJCQkJMTAwMCAqIHN0YXQtPnNodWJfaXBpX2ZsdXNoZXNfaXRjX2Nsb2NrcyAvIHBlcl9jcHUoY3B1X2luZm8sIGNwdSkuY3ljX3Blcl91c2VjKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNuMl9wdGNfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpkYXRhKQoreworCWludCBjcHU7CisJY2hhciBvcHRzdHJbNjRdOworCisJaWYgKGNvcHlfZnJvbV91c2VyKG9wdHN0ciwgdXNlciwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlvcHRzdHJbY291bnQgLSAxXSA9ICdcMCc7CisJc24yX2ZsdXNoX29wdCA9IHNpbXBsZV9zdHJ0b3VsKG9wdHN0ciwgTlVMTCwgMCk7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJbWVtc2V0KCZwZXJfY3B1KHB0Y3N0YXRzLCBjcHUpLCAwLCBzaXplb2Yoc3RydWN0IHB0Y19zdGF0cykpOworCisJcmV0dXJuIGNvdW50OworfQorCiBzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNuMl9wdGNfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSBzbjJfcHRjX3NlcV9zdGFydCwKIAkubmV4dCA9IHNuMl9wdGNfc2VxX25leHQsCkBAIC00NTgsNiArNTEyLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc24yX3B0Y19vcGVyYXRpb25zID0gewogCS5vcGVuID0gc24yX3B0Y19wcm9jX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKKwkud3JpdGUgPSBzbjJfcHRjX3Byb2Nfd3JpdGUsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYwppbmRleCBjMDhkYjljLi40NGNjYzBkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jCkBAIC0yOTMsNyArMjkzLDcgQEAKIAogCiAvKgotICogUHVsbCB0aGUgcmVtb3RlIHBlciBwYXJ0aXRpdG9uIHNwZWNpZmljIHZhcmlhYmxlcyBmcm9tIHRoZSBzcGVjaWZpZWQKKyAqIFB1bGwgdGhlIHJlbW90ZSBwZXIgcGFydGl0aW9uIHNwZWNpZmljIHZhcmlhYmxlcyBmcm9tIHRoZSBzcGVjaWZpZWQKICAqIHBhcnRpdGlvbi4KICAqLwogZW51bSB4cGNfcmV0dmFsCkBAIC00NjEsNyArNDYxLDcgQEAKIAkvLyA+Pj4gbWF5IHdhbnQgdG8gY2hlY2sgZm9yIGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkcgYmV0d2VlbgogCS8vID4+PiBpdGVyYXRpb25zIG9mIHRoZSBmb3ItbG9vcCwgYmFpbCBpZiBzZXQ/CiAKLQkvLyA+Pj4gc2hvdWxkIHdlIGltcG9zZSBhIG1pbnVtdW0gI29mIGVudHJpZXM/IGxpa2UgNCBvciA4PworCS8vID4+PiBzaG91bGQgd2UgaW1wb3NlIGEgbWluaW11bSAjb2YgZW50cmllcz8gbGlrZSA0IG9yIDg/CiAJZm9yIChuZW50cmllcyA9IGNoLT5sb2NhbF9uZW50cmllczsgbmVudHJpZXMgPiAwOyBuZW50cmllcy0tKSB7CiAKIAkJbmJ5dGVzID0gbmVudHJpZXMgKiBjaC0+bXNnX3NpemU7CkBAIC01MTQsNyArNTE0LDcgQEAKIAkvLyA+Pj4gbWF5IHdhbnQgdG8gY2hlY2sgZm9yIGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkcgYmV0d2VlbgogCS8vID4+PiBpdGVyYXRpb25zIG9mIHRoZSBmb3ItbG9vcCwgYmFpbCBpZiBzZXQ/CiAKLQkvLyA+Pj4gc2hvdWxkIHdlIGltcG9zZSBhIG1pbnVtdW0gI29mIGVudHJpZXM/IGxpa2UgNCBvciA4PworCS8vID4+PiBzaG91bGQgd2UgaW1wb3NlIGEgbWluaW11bSAjb2YgZW50cmllcz8gbGlrZSA0IG9yIDg/CiAJZm9yIChuZW50cmllcyA9IGNoLT5yZW1vdGVfbmVudHJpZXM7IG5lbnRyaWVzID4gMDsgbmVudHJpZXMtLSkgewogCiAJCW5ieXRlcyA9IG5lbnRyaWVzICogY2gtPm1zZ19zaXplOwpAQCAtMTQ3OCw3ICsxNDc4LDcgQEAKIAogCiAJLyoKLQkgKiBCZWZvcmUgcHJvY2VkaW5nIHdpdGggdGhlIHRlYXJkb3duIHdlIGhhdmUgdG8gd2FpdCB1bnRpbCBhbGwKKwkgKiBCZWZvcmUgcHJvY2VlZGluZyB3aXRoIHRoZSB0ZWFyZG93biB3ZSBoYXZlIHRvIHdhaXQgdW50aWwgYWxsCiAJICogZXhpc3RpbmcgcmVmZXJlbmNlcyBjZWFzZS4KIAkgKi8KIAl3YWl0X2V2ZW50KHBhcnQtPnRlYXJkb3duX3dxLCAoYXRvbWljX3JlYWQoJnBhcnQtPnJlZmVyZW5jZXMpID09IDApKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYwppbmRleCA2ODM1NWVmLi5lMzM2ZTE2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jCkBAIC01NSw5ICs1NSw5IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2ludHIuaD4KICNpbmNsdWRlIDxhc20vc24vc25fc2FsLmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3hwYy5oPgogCkBAIC0xMzMyLDcgKzEzMzIsNyBAQAogCQlkZXZfd2Fybih4cGNfcGFydCwgImNhbid0IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllclxuIik7CiAJfQogCi0JLyogYWRkIG91cnNlbHZlcyB0byB0aGUgZGllX25vdGlmaWVyIGxpc3QgKGkuZS4sIGlhNjRkaWVfY2hhaW4pICovCisJLyogYWRkIG91cnNlbHZlcyB0byB0aGUgZGllX25vdGlmaWVyIGxpc3QgKi8KIAlyZXQgPSByZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnhwY19kaWVfbm90aWZpZXIpOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfd2Fybih4cGNfcGFydCwgImNhbid0IHJlZ2lzdGVyIGRpZSBub3RpZmllclxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX3BhcnRpdGlvbi5jCmluZGV4IDU3YzcyM2YuLjdiYTQwMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX3BhcnRpdGlvbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX3BhcnRpdGlvbi5jCkBAIC01NzQsNyArNTc0LDcgQEAKIAkJdTY0IHJlbW90ZV92YXJzX3BhLCBzdHJ1Y3QgeHBjX3ZhcnMgKnJlbW90ZV92YXJzKQogewogCXBhcnQtPnJlbW90ZV9ycF92ZXJzaW9uID0gcmVtb3RlX3JwX3ZlcnNpb247Ci0JZGV2X2RiZyh4cGNfcGFydCwgIiAgcmVtb3RlX3JwX3ZlcnNpb24gPSAweCUwMTZseFxuIiwKKwlkZXZfZGJnKHhwY19wYXJ0LCAiICByZW1vdGVfcnBfdmVyc2lvbiA9IDB4JTAxNnhcbiIsCiAJCXBhcnQtPnJlbW90ZV9ycF92ZXJzaW9uKTsKIAogCXBhcnQtPnJlbW90ZV9ycF9zdGFtcCA9ICpyZW1vdGVfcnBfc3RhbXA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3hwbmV0LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwbmV0LmMKaW5kZXggODhmYWQ4NS4uZTU4ZmNhZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cG5ldC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBuZXQuYwpAQCAtMzQzLDggKzM0Myw4IEBACiAJZW51bSB4cGNfcmV0dmFsIHJldDsKIAogCi0JZGV2X2RiZyh4cG5ldCwgImNhbGxpbmcgeHBjX2Nvbm5lY3QoJWQsIDB4JXAsIE5VTEwsICVsZCwgJWxkLCAlZCwgIgotCQkiJWQpXG4iLCBYUENfTkVUX0NIQU5ORUwsIHhwbmV0X2Nvbm5lY3Rpb25fYWN0aXZpdHksCisJZGV2X2RiZyh4cG5ldCwgImNhbGxpbmcgeHBjX2Nvbm5lY3QoJWQsIDB4JXAsIE5VTEwsICVsZCwgJWxkLCAlbGQsICIKKwkJIiVsZClcbiIsIFhQQ19ORVRfQ0hBTk5FTCwgeHBuZXRfY29ubmVjdGlvbl9hY3Rpdml0eSwKIAkJWFBORVRfTVNHX1NJWkUsIFhQTkVUX01TR19ORU5UUklFUywgWFBORVRfTUFYX0tUSFJFQURTLAogCQlYUE5FVF9NQVhfSURMRV9LVEhSRUFEUyk7CiAKQEAgLTUzMSw3ICs1MzEsNyBAQAogCWRldl9kYmcoeHBuZXQsICJkZXN0aW5hdGlvbiBQYXJ0aXRpb25zIG1hc2sgKGRwKSA9IDB4JWx4XG4iLCBkcCk7CiAKIAkvKgotCSAqIElmIHdlIHdhbnRlZCB0byBhbGxvdyBwcm9taXNjb3VzIG1vZGUgdG8gd29yayBsaWtlIGFuCisJICogSWYgd2Ugd2FudGVkIHRvIGFsbG93IHByb21pc2N1b3VzIG1vZGUgdG8gd29yayBsaWtlIGFuCiAJICogdW5zd2l0Y2hlZCBuZXR3b3JrLCB0aGlzIHdvdWxkIGJlIGEgZ29vZCBwb2ludCB0byBPUiBpbiBhCiAJICogbWFzayBvZiBwYXJ0aXRpb25zIHdoaWNoIHNob3VsZCBiZSByZWNlaXZpbmcgYWxsIHBhY2tldHMuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3BjaV9kbWEuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCmluZGV4IDdhMjkxYTIuLmQ3OWRkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkvKgogCSAqIEZpcnN0LCB0cnkgdGhlIFNOX1NBTF9JT0lGX1BDSV9TQUZFIFNBTCBjYWxsIHdoaWNoIGNhbiB3b3JrCiAJICogYXJvdW5kIGh3IGlzc3VlcyBhdCB0aGUgcGNpIGJ1cyBsZXZlbC4gIFNHSSBwcm9tcyBvbGRlciB0aGFuCi0JICogNC4xMCBkb24ndCBpbXBsbWVudCB0aGlzLgorCSAqIDQuMTAgZG9uJ3QgaW1wbGVtZW50IHRoaXMuCiAJICovCiAKIAlTQUxfQ0FMTChpc3J2LCBTTl9TQUxfSU9JRl9QQ0lfU0FGRSwKQEAgLTM0OCw3ICszNDgsNyBAQAogCS8qCiAJICogSWYgdGhlIGFib3ZlIGZhaWxlZCwgcmV0cnkgdXNpbmcgdGhlIFNBTF9QUk9CRSBjYWxsIHdoaWNoIHNob3VsZAogCSAqIGJlIHByZXNlbnQgaW4gYWxsIHByb21zIChidXQgd2hpY2ggY2Fubm90IHdvcmsgcm91bmQgUENJIGNoaXBzZXQKLQkgKiBidWdzKS4gIFRoaXMgY29kZSBpcyByZXRhaW5lZCBmb3IgY29tcGF0YWJpbGl0eSB3aXRoIG9sZAorCSAqIGJ1Z3MpLiAgVGhpcyBjb2RlIGlzIHJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkCiAJICogcHJlLTQuMTAgcHJvbXMsIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCiAJICovCiAKQEAgLTM3OSw3ICszNzksNyBAQAogCS8qCiAJICogRmlyc3QsIHRyeSB0aGUgU05fU0FMX0lPSUZfUENJX1NBRkUgU0FMIGNhbGwgd2hpY2ggY2FuIHdvcmsKIAkgKiBhcm91bmQgaHcgaXNzdWVzIGF0IHRoZSBwY2kgYnVzIGxldmVsLiAgU0dJIHByb21zIG9sZGVyIHRoYW4KLQkgKiA0LjEwIGRvbid0IGltcGxtZW50IHRoaXMuCisJICogNC4xMCBkb24ndCBpbXBsZW1lbnQgdGhpcy4KIAkgKi8KIAogCVNBTF9DQUxMKGlzcnYsIFNOX1NBTF9JT0lGX1BDSV9TQUZFLApAQCAtMzk0LDcgKzM5NCw3IEBACiAJLyoKIAkgKiBJZiB0aGUgYWJvdmUgZmFpbGVkLCByZXRyeSB1c2luZyB0aGUgU0FMX1BST0JFIGNhbGwgd2hpY2ggc2hvdWxkCiAJICogYmUgcHJlc2VudCBpbiBhbGwgcHJvbXMgKGJ1dCB3aGljaCBjYW5ub3Qgd29yayByb3VuZCBQQ0kgY2hpcHNldAotCSAqIGJ1Z3MpLiAgVGhpcyBjb2RlIGlzIHJldGFpbmVkIGZvciBjb21wYXRhYmlsaXR5IHdpdGggb2xkCisJICogYnVncykuICBUaGlzIGNvZGUgaXMgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQKIAkgKiBwcmUtNC4xMCBwcm9tcywgYW5kIHNob3VsZCBiZSByZW1vdmVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KIAkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9hdGUuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfYXRlLmMKaW5kZXggOTM1MDI5Zi4uMjM5YjNjZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9hdGUuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2F0ZS5jCkBAIC0zMCw3ICszMCw3IEBACiAKIC8qCiAgKiBmaW5kX2ZyZWVfYXRlOiAgRmluZCB0aGUgZmlyc3QgZnJlZSBhdGUgaW5kZXggc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4KLSAqCQkgICBpbmRleCBmb3IgdGhlIGRlc2lyZWQgY29uc2VxdXRpdmUgY291bnQuCisgKgkJICAgaW5kZXggZm9yIHRoZSBkZXNpcmVkIGNvbnNlY3V0aXZlIGNvdW50LgogICovCiBzdGF0aWMgaW50IGZpbmRfZnJlZV9hdGUoc3RydWN0IGF0ZV9yZXNvdXJjZSAqYXRlX3Jlc291cmNlLCBpbnQgc3RhcnQsCiAJCQkgaW50IGNvdW50KQpAQCAtODgsNyArODgsNyBAQAogCQlyZXR1cm4gLTE7CiAKIAkvKgotCSAqIEZpbmQgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBmcmVlIGNvbnNlcXV0aXZlIGF0ZXMuCisJICogRmluZCB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGZyZWUgY29uc2VjdXRpdmUgYXRlcy4KIAkgKi8KIAlzdGFydF9pbmRleCA9CiAJICAgIGZpbmRfZnJlZV9hdGUoYXRlX3Jlc291cmNlLCBhdGVfcmVzb3VyY2UtPmxvd2VzdF9mcmVlX2luZGV4LApAQCAtMTA1LDcgKzEwNSw3IEBACiAvKgogICogQWxsb2NhdGUgImNvdW50IiBjb250aWd1b3VzIEJyaWRnZSBBZGRyZXNzIFRyYW5zbGF0aW9uIEVudHJpZXMKICAqIG9uIHRoZSBzcGVjaWZpZWQgYnJpZGdlIHRvIGJlIHVzZWQgZm9yIFBDSSB0byBYVEFMSyBtYXBwaW5ncy4KLSAqIEluZGljZXMgaW4gcm0gbWFwIHJhbmdlIGZyb20gMS4ubnVtX2VudHJpZXMuICBJbmRpY2llcyByZXR1cm5lZAorICogSW5kaWNlcyBpbiBybSBtYXAgcmFuZ2UgZnJvbSAxLi5udW1fZW50cmllcy4gIEluZGljZXMgcmV0dXJuZWQKICAqIHRvIGNhbGxlciByYW5nZSBmcm9tIDAuLm51bV9lbnRyaWVzLTEuCiAgKgogICogUmV0dXJuIHRoZSBzdGFydCBpbmRleCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMKaW5kZXggOTVhZjQwYy4uZTYyNmU1MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIH0KIAogLyoKLSAqIFdyYXBwZXIgcm91dGluZSBmb3IgZnJlZSdpbmcgRE1BIG1hcHMKKyAqIFdyYXBwZXIgcm91dGluZSBmb3IgZnJlZWluZyBETUEgbWFwcwogICogRE1BIG1hcHBpbmdzIGZvciBEaXJlY3QgNjQgYW5kIDMyIGRvIG5vdCBoYXZlIGFueSBETUEgbWFwcy4KICAqLwogdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jYV9wcm92aWRlci5jIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jYV9wcm92aWRlci5jCmluZGV4IDhhMmNiNGUuLmI5YmVkYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJLyoKIAkgKiBTY2FuIGFsbCB2Z2EgY29udHJvbGxlcnMgb24gdGhpcyBidXMgbWFraW5nIHN1cmUgdGhleSBhbGwKLQkgKiBzdXBvcnQgRlcuICBJZiBub3QsIHJldHVybi4KKwkgKiBzdXBwb3J0IEZXLiAgSWYgbm90LCByZXR1cm4uCiAJICovCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZXYsIHRpb2NhX2tlcm4tPmNhX2RldmljZXMsIGJ1c19saXN0KSB7CkBAIC0zNjQsNyArMzY0LDcgQEAKICAqIEByZXFfc2l6ZTogbGVuIChieXRlcykgdG8gbWFwCiAgKgogICogTWFwIEBwYWRkciBpbnRvIENBIGFkZHJlc3Mgc3BhY2UgdXNpbmcgdGhlIEdBUlQgbWVjaGFuaXNtLiAgVGhlIG1hcHBlZAotICogZG1hX2FkZHJfdCBpcyBndWFyZW50ZWVkIHRvIGJlIGNvbnRpZ3VvdXMgaW4gQ0EgYnVzIHNwYWNlLgorICogZG1hX2FkZHJfdCBpcyBndWFyYW50ZWVkIHRvIGJlIGNvbnRpZ3VvdXMgaW4gQ0EgYnVzIHNwYWNlLgogICovCiBzdGF0aWMgZG1hX2FkZHJfdAogdGlvY2FfZG1hX21hcHBlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTY0IHBhZGRyLCBzaXplX3QgcmVxX3NpemUpCkBAIC01MjYsNyArNTI2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKgotCSAqIElmIGNhcmQgaXMgNjQgb3IgNDggYml0IGFkZHJlc2FibGUsIHVzZSBhIGRpcmVjdCBtYXBwaW5nLiAgMzIKKwkgKiBJZiBjYXJkIGlzIDY0IG9yIDQ4IGJpdCBhZGRyZXNzYWJsZSwgdXNlIGEgZGlyZWN0IG1hcHBpbmcuICAzMgogCSAqIGJpdCBkaXJlY3QgaXMgc28gcmVzdHJpY3RpdmUgdy5yLnQuIHdoZXJlIHRoZSBtZW1vcnkgcmVzaWRlcyB0aGF0CiAJICogd2UgZG9uJ3QgdXNlIGl0IGV2ZW4gdGhvdWdoIENBIGhhcyBzb21lIHN1cHBvcnQuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKaW5kZXggMzVmODU0Zi4uZjRjMGI5NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwpAQCAtMjU2LDkgKzI1Niw5IEBACiAgKiBAY3RfYWRkcjogdGhlIGNvcmV0YWxrIGFkZHJlc3MgdG8gbWFwCiAgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gbWFwCiAgKgotICogR2l2ZW4gdGhlIGFkZHJlc3NpbmcgdHlwZSwgc2V0IHVwIHZhcmlvdXMgcGFyYW1hdGVycyB0aGF0IGRlZmluZSB0aGUKKyAqIEdpdmVuIHRoZSBhZGRyZXNzaW5nIHR5cGUsIHNldCB1cCB2YXJpb3VzIHBhcmFtZXRlcnMgdGhhdCBkZWZpbmUgdGhlCiAgKiBBVEUgcG9vbCB0byB1c2UuICBTZWFyY2ggZm9yIGEgY29udGlndW91cyBibG9jayBvZiBlbnRyaWVzIHRvIGNvdmVyIHRoZQotICogbGVuZ3RoLCBhbmQgaWYgZW5vdWdoIHJlc291cmNlcyBleGlzdCwgZmlsbCBpbiB0aGUgQVRFJ3MgYW5kIGNvbnN0cnVjdCBhCisgKiBsZW5ndGgsIGFuZCBpZiBlbm91Z2ggcmVzb3VyY2VzIGV4aXN0LCBmaWxsIGluIHRoZSBBVEVzIGFuZCBjb25zdHJ1Y3QgYQogICogdGlvY2VfZG1hbWFwIHN0cnVjdCB0byB0cmFjayB0aGUgbWFwcGluZy4KICAqLwogc3RhdGljIHU2NApAQCAtNTgxLDggKzU4MSw4IEBACiAJICovCiAJaWYgKCFtYXBhZGRyICYmICFiYXJyaWVyICYmIGRtYV9tYXNrID49IDB4ZmZmZmZmZmZmZlVMKSB7CiAJCS8qCi0JCSAqIFdlIGhhdmUgdHdvIG9wdGlvbnMgZm9yIDQwLWJpdCBtYXBwaW5nczogIDE2R0IgInN1cGVyIiBBVEUncwotCQkgKiBhbmQgNjRNQiAicmVndWxhciIgQVRFJ3MuICBXZSdsbCB0cnkgYm90aCBpZiBuZWVkZWQgZm9yIGEKKwkJICogV2UgaGF2ZSB0d28gb3B0aW9ucyBmb3IgNDAtYml0IG1hcHBpbmdzOiAgMTZHQiAic3VwZXIiIEFURXMKKwkJICogYW5kIDY0TUIgInJlZ3VsYXIiIEFURXMuICBXZSdsbCB0cnkgYm90aCBpZiBuZWVkZWQgZm9yIGEKIAkJICogZ2l2ZW4gbWFwcGluZyBidXQgd2hpY2ggb25lIHdlIHRyeSBmaXJzdCBkZXBlbmRzIG9uIHRoZQogCQkgKiBzaXplLiAgRm9yIHJlcXVlc3RzID42NE1CLCBwcmVmZXIgdG8gdXNlIGEgc3VwZXIgcGFnZSB3aXRoCiAJCSAqIHJlZ3VsYXIgYXMgdGhlIGZhbGxiYWNrLiBPdGhlcndpc2UsIHRyeSBpbiB0aGUgcmV2ZXJzZSBvcmRlci4KQEAgLTY4Nyw4ICs2ODcsOCBAQAogfQogCiAvKioKLSAqIHRpb2NlX3Jlc2VydmVfbTMyIC0gcmVzZXJ2ZSBNMzIgYXRlJ3MgZm9yIHRoZSBpbmRpY2F0ZWQgYWRkcmVzcyByYW5nZQotICogQHRpb2NlX2tlcm5lbDogVElPQ0UgY29udGV4dCB0byByZXNlcnZlIGF0ZSdzIGZvcgorICogdGlvY2VfcmVzZXJ2ZV9tMzIgLSByZXNlcnZlIE0zMiBBVEVzIGZvciB0aGUgaW5kaWNhdGVkIGFkZHJlc3MgcmFuZ2UKKyAqIEB0aW9jZV9rZXJuZWw6IFRJT0NFIGNvbnRleHQgdG8gcmVzZXJ2ZSBBVEVzIGZvcgogICogQGJhc2U6IHN0YXJ0aW5nIGJ1cyBhZGRyZXNzIHRvIHJlc2VydmUKICAqIEBsaW1pdDogbGFzdCBidXMgYWRkcmVzcyB0byByZXNlcnZlCiAgKgpAQCAtNzYzLDcgKzc2Myw3IEBACiAKIAkvKgogCSAqIFNldCBQTVUgcGFnZXNpemUgdG8gdGhlIGxhcmdlc3Qgc2l6ZSBhdmFpbGFibGUsIGFuZCB6ZXJvIG91dAotCSAqIHRoZSBhdGUncy4KKwkgKiB0aGUgQVRFcy4KIAkgKi8KIAogCXRpb2NlX21tciA9IChzdHJ1Y3QgdGlvY2UgX19pb21lbSAqKXRpb2NlX2NvbW1vbi0+Y2VfcGNpYnVzLmJzX2Jhc2U7CkBAIC03ODQsNyArNzg0LDcgQEAKIAl9CiAKIAkvKgotCSAqIFJlc2VydmUgQVRFJ3MgY29ycmVzcG9uZGluZyB0byByZXNlcnZlZCBhZGRyZXNzIHJhbmdlcy4gIFRoZXNlCisJICogUmVzZXJ2ZSBBVEVzIGNvcnJlc3BvbmRpbmcgdG8gcmVzZXJ2ZWQgYWRkcmVzcyByYW5nZXMuICBUaGVzZQogCSAqIGluY2x1ZGU6CiAJICoKIAkgKglNZW1vcnkgc3BhY2UgY292ZXJlZCBieSBlYWNoIFBQQiBtZW0gYmFzZS9saW1pdCByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCA5NzQwZDZiLi5jM2JiOGE3NSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTI0MSw2ICsyNDEsMTAgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBTQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVIKKyAgICAgICAgYm9vbAorICAgICAgICBkZWZhdWx0IHkKKwogY29uZmlnIFBSRUVNUFQKIAlib29sICJQcmVlbXB0aWJsZSBLZXJuZWwiCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwppbmRleCA4Y2JiYjBiLi40MWE0Yzk1IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYworKysgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwpAQCAtNSw3ICs1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYwppbmRleCA0YjE1NjA1Li45MTZmYWY2IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2lnbmFsLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwppbmRleCA0OGQzNzZmLi4zZWIzMDU5IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3N5c19tMzJyLmMgYi9hcmNoL20zMnIva2VybmVsL3N5c19tMzJyLmMKaW5kZXggYjRlN2JjYi4uYmRhODU1NCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zeXNfbTMyci5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc3lzX20zMnIuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L21zZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NobS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZjNzNiY2EuLjRlMmQ1YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTI3LDcgKzI3LDcgQEAKICAgX3RleHQgPSAuOwkJCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhICovCiAgIC5ib290IDogeyAqKC5ib290KSB9ID0gMAogICAudGV4dCA6IHsKLQkqKC50ZXh0KQorCVRFWFRfVEVYVAogCVNDSEVEX1RFWFQKIAlMT0NLX1RFWFQKIAkqKC5maXh1cCkKQEAgLTUwLDcgKzUwLDcgQEAKICAgLmRhdGEgOiB7CQkJLyogRGF0YSAqLwogCSooLnNwdSkKIAkqKC5zcGkpCi0JKiguZGF0YSkKKwlEQVRBX0RBVEEKIAlDT05TVFJVQ1RPUlMKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9mYXVsdC1ub21tdS5jIGIvYXJjaC9tMzJyL21tL2ZhdWx0LW5vbW11LmMKaW5kZXggOTg4MGFiYS4uODg0NjkxNyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2ZhdWx0LW5vbW11LmMKKysrIGIvYXJjaC9tMzJyL21tL2ZhdWx0LW5vbW11LmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+ICAgICAgICAgICAgICAvKiBGb3IgdW5ibGFua19zY3JlZW4oKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2ZhdWx0LmMgYi9hcmNoL20zMnIvbW0vZmF1bHQuYwppbmRleCAwMzdkNThlLi5mMzkzNWJhIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbW0vZmF1bHQuYworKysgYi9hcmNoL20zMnIvbW0vZmF1bHQuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL21tdS5TIGIvYXJjaC9tMzJyL21tL21tdS5TCmluZGV4IDhiYjc0YjEuLjQ5YTZkMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9tbXUuUworKysgYi9hcmNoL20zMnIvbW0vbW11LlMKQEAgLTE2Myw3ICsxNjMsOCBAQAogCiAJOyBwdGVfZGF0YSA9ICh1bnNpZ25lZCBsb25nKXB0ZV92YWwoKnB0ZSk7CiAJbGQJcjIsIEByMwkJCTsgcjI6IHB0ZSBkYXRhCi0Jb3IzCXIyLCByMiwgIzIJCTsgX1BBR0VfUFJFU0VOVCg9MikKKwlhbmQzCXIzLCByMiwgIzIJCTsgX1BBR0VfUFJFU0VOVCg9MikgY2hlY2sKKwliZXF6CXIzLCAzZgogCiAJLmZpbGxpbnNuCiA1OgpAQCAtMjY0LDExICsyNjUsOCBAQAogOwogCWFuZDMJcjEsIHIxLCAjMHhlZmYKIAlsZGkJcjQsICM2MTEJCTsgX0tFUk5QR19UQUJMRSg9NjExKQotCWJlcQlyMSwgcjQsIDRmCQk7ICFwbWRfYmFkKCpwbWQpID8KLQkuZmlsbGluc24KLTM6Ci0JbGRpCXIxLCAjMAkJCTsgcjE6IHB0ZV9kYXRhID0gMAotCWJyYQk1ZgorCWJuZQlyMSwgcjQsIDNmCQk7ICFwbWRfYmFkKCpwbWQpID8KKwogCS5maWxsaW5zbgogNDoKIAk7IHB0ZSA9IHB0ZV9vZmZzZXQocG1kLCBhZGRyZXNzKTsKQEAgLTI4Miw4ICsyODAsMTAgQEAKIAlhZGQJcjQsIHIzCQkJOyByNDogcHRlCiAJOyBwdGVfZGF0YSA9ICh1bnNpZ25lZCBsb25nKXB0ZV92YWwoKnB0ZSk7CiAJbGQJcjEsIEByNAkJCTsgcjE6IHB0ZV9kYXRhCi0JLmZpbGxpbnNuCisJYW5kMwlyMywgcjEsICMyCQk7IF9QQUdFX1BSRVNFTlQoPTIpIGNoZWNrCisJYmVxeglyMywgM2YKIAorCS5maWxsaW5zbgogOzsgc2V0IHRsYgogOyByMDogYWRkcmVzcywgcjE6IHB0ZV9kYXRhLCByMjogZW50cnkKIDsgcjMscjQ6IChmcmVlKQpAQCAtMjk1LDggKzI5NSw3IEBACiAJYW5kMwlyNCwgcjQsICMoTU1VX0NPTlRFWFRfQVNJRF9NQVNLKQogCW9yCXIzLCByNAogCXN0CXIzLCBAcjIKLQlvcjMJcjQsIHIxLCAjMgkJOyBfUEFHRV9QUkVTRU5UKD0yKQotCXN0CXI0LCBAKDQscjIpCQk7IHNldF90bGJfZGF0YShlbnRyeSwgcHRlX2RhdGEpOworCXN0CXIxLCBAKDQscjIpCQk7IHNldF90bGJfZGF0YShlbnRyeSwgcHRlX2RhdGEpOwogCiAJbGQJcjQsIEBzcCsKIAlsZAlyMywgQHNwKwpAQCAtMzA2LDYgKzMwNSwxMSBAQAogCWxkCXNwLCBAc3ArCiAJcnRlCiAKKwkuZmlsbGluc24KKzM6CisJbGRpCXIxLCAjMgkJCTsgcjE6IHB0ZV9kYXRhID0gMCB8IF9QQUdFX1BSRVNFTlQoPTIpCisJYnJhCTViCisKICNlbHNlCiAjZXJyb3IgdW5rbm93biBpc2EgY29uZmlndXJhdGlvbgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IGI4NTM2YzcuLjg1Y2RkMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC0zNTUsOCArMzU1LDkgQEAKIAkgIGFkdmVudHVyb3VzLgogCiBjb25maWcgU0lOR0xFX01FTU9SWV9DSFVOSwotCWJvb2wgIlVzZSBvbmUgcGh5c2ljYWwgY2h1bmsgb2YgbWVtb3J5IG9ubHkiCi0JZGVwZW5kcyBvbiBBRFZBTkNFRCAmJiAhU1VOMworCWJvb2wgIlVzZSBvbmUgcGh5c2ljYWwgY2h1bmsgb2YgbWVtb3J5IG9ubHkiIGlmIEFEVkFOQ0VEICYmICFTVU4zCisJZGVmYXVsdCB5IGlmIFNVTjMKKwlzZWxlY3QgTkVFRF9NVUxUSVBMRV9OT0RFUwogCWhlbHAKIAkgIElnbm9yZSBhbGwgYnV0IHRoZSBmaXJzdCBjb250aWd1b3VzIGNodW5rIG9mIHBoeXNpY2FsIG1lbW9yeSBmb3IgVk0KIAkgIHB1cnBvc2VzLiAgVGhpcyB3aWxsIHNhdmUgYSBmZXcgYnl0ZXMga2VybmVsIHNpemUgYW5kIG1heSBzcGVlZCB1cApAQCAtMzc3LDYgKzM3OCwxNCBAQAogCSAgaXMgaGFyZHdpcmVkIG9uLiAgVGhlIDUzYzcxMCBTQ1NJIGRyaXZlciBpcyBrbm93biB0byBzdWZmZXIgZnJvbQogCSAgdGhpcyBwcm9ibGVtLgogCitjb25maWcgQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCisJZGVmX2Jvb2wgIVNJTkdMRV9NRU1PUllfQ0hVTksKKworY29uZmlnIE5PREVTX1NISUZUCisJaW50CisJZGVmYXVsdCAiMyIKKwlkZXBlbmRzIG9uICFTSU5HTEVfTUVNT1JZX0NIVU5LCisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL01ha2VmaWxlIGIvYXJjaC9tNjhrL01ha2VmaWxlCmluZGV4IGMyMDgzMWEuLmFhMzgzYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9NYWtlZmlsZQorKysgYi9hcmNoL202OGsvTWFrZWZpbGUKQEAgLTE5LDYgKzE5LDcgQEAKICMgb3ZlcnJpZGUgdG9wIGxldmVsIG1ha2VmaWxlCiBBUyArPSAtbTY4MDIwCiBMREZMQUdTIDo9IC1tIG02OGtlbGYKK0xERkxBR1NfTU9EVUxFICs9IC1UICQoc3JjdHJlZSkvYXJjaC9tNjhrL2tlcm5lbC9tb2R1bGUubGRzCiBpZm5lcSAoJChDT01QSUxFX0FSQ0gpLCQoQVJDSCkpCiAJIyBwcmVmaXggZm9yIGNyb3NzLWNvbXBpbGluZyBiaW5hcmllcwogCUNST1NTX0NPTVBJTEUgPSBtNjhrLWxpbnV4LWdudS0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL202OGsva2VybmVsL01ha2VmaWxlCmluZGV4IDBiNjhhYjguLmE4MDYyMDggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZQpAQCAtOSwxMyArOSwxMiBAQAogZW5kaWYKIGV4dHJhLXkJKz0gdm1saW51eC5sZHMKIAotb2JqLXkJOj0gZW50cnkubyBwcm9jZXNzLm8gdHJhcHMubyBpbnRzLm8gc2lnbmFsLm8gcHRyYWNlLm8gXAorb2JqLXkJOj0gZW50cnkubyBwcm9jZXNzLm8gdHJhcHMubyBpbnRzLm8gc2lnbmFsLm8gcHRyYWNlLm8gbW9kdWxlLm8gXAogCSAgIHN5c19tNjhrLm8gdGltZS5vIHNlbWFwaG9yZS5vIHNldHVwLm8gbTY4a19rc3ltcy5vIGRldnJlcy5vCiAKIGRldnJlcy15ID0gLi4vLi4vLi4va2VybmVsL2lycS9kZXZyZXMubwogCiBvYmotJChDT05GSUdfUENJKQkrPSBiaW9zMzIubwotb2JqLSQoQ09ORklHX01PRFVMRVMpCSs9IG1vZHVsZS5vCiBvYmoteSQoQ09ORklHX01NVV9TVU4zKSArPSBkbWEubwkjIG5vLCBpdCdzIG5vdCBhIHR5cG8KIAogRVhUUkFfQUZMQUdTIDo9IC10cmFkaXRpb25hbApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvbTY4ay9rZXJuZWwvbW9kdWxlLmMKaW5kZXggM2IxYTJmZi4uNzc0ODYyYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL202OGsva2VybmVsL21vZHVsZS5jCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlbG9hZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMTEsNiArMTcsOCBAQAogI2RlZmluZSBERUJVR1AoZm10Li4uKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCiB2b2lkICptb2R1bGVfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQogewogCWlmIChzaXplID09IDApCkBAIC0xMTgsMTEgKzEyNiwzMiBAQAogCiBpbnQgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsCiAJCSAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKLQkJICAgIHN0cnVjdCBtb2R1bGUgKm1lKQorCQkgICAgc3RydWN0IG1vZHVsZSAqbW9kKQogeworCW1vZHVsZV9maXh1cChtb2QsIG1vZC0+YXJjaC5maXh1cF9zdGFydCwgbW9kLT5hcmNoLmZpeHVwX2VuZCk7CisKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCBtb2R1bGVfYXJjaF9jbGVhbnVwKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIH0KKworI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCisKK3ZvaWQgbW9kdWxlX2ZpeHVwKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG02OGtfZml4dXBfaW5mbyAqc3RhcnQsCisJCSAgc3RydWN0IG02OGtfZml4dXBfaW5mbyAqZW5kKQoreworCXN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gKmZpeHVwOworCisJZm9yIChmaXh1cCA9IHN0YXJ0OyBmaXh1cCA8IGVuZDsgZml4dXArKykgeworCQlzd2l0Y2ggKGZpeHVwLT50eXBlKSB7CisJCWNhc2UgbTY4a19maXh1cF9tZW1vZmZzZXQ6CisJCQkqKHUzMiAqKWZpeHVwLT5hZGRyID0gbTY4a19tZW1vZmZzZXQ7CisJCQlicmVhazsKKwkJY2FzZSBtNjhrX2ZpeHVwX3Zub2RlX3NoaWZ0OgorCQkJKih1MTYgKilmaXh1cC0+YWRkciArPSBtNjhrX3ZpcnRfdG9fbm9kZV9zaGlmdDsKKwkJCWJyZWFrOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9tb2R1bGUubGRzIGIvYXJjaC9tNjhrL2tlcm5lbC9tb2R1bGUubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTk0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL21vZHVsZS5sZHMKQEAgLTAsMCArMSw3IEBACitTRUNUSU9OUyB7CisJLm02OGtfZml4dXAgOiB7CisJCV9fc3RhcnRfZml4dXAgPSAuOworCQkqKC5tNjhrX2ZpeHVwKQorCQlfX3N0b3BfZml4dXAgPSAuOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCmluZGV4IDdmZDI3MjAuLmNkYmE5ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jCmluZGV4IDYxMDMxOTMuLjIxNWM3YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL202OGsva2VybmVsL3NldHVwLmMKQEAgLTYwLDE0ICs2MCwxMiBAQAogaW50IG02OGtfbnVtX21lbW9yeTsKIGludCBtNjhrX3JlYWxudW1fbWVtb3J5OwogRVhQT1JUX1NZTUJPTChtNjhrX3JlYWxudW1fbWVtb3J5KTsKLSNpZmRlZiBDT05GSUdfU0lOR0xFX01FTU9SWV9DSFVOSwogdW5zaWduZWQgbG9uZyBtNjhrX21lbW9mZnNldDsKIEVYUE9SVF9TWU1CT0wobTY4a19tZW1vZmZzZXQpOwotI2VuZGlmCiBzdHJ1Y3QgbWVtX2luZm8gbTY4a19tZW1vcnlbTlVNX01FTUlORk9dOwogRVhQT1JUX1NZTUJPTChtNjhrX21lbW9yeSk7CiAKLXN0YXRpYyBzdHJ1Y3QgbWVtX2luZm8gbTY4a19yYW1kaXNrOworc3RydWN0IG1lbV9pbmZvIG02OGtfcmFtZGlzazsKIAogc3RhdGljIGNoYXIgbTY4a19jb21tYW5kX2xpbmVbQ0xfU0laRV07CiAKQEAgLTIwOCw5ICsyMDYsNiBAQAogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewogCWV4dGVybiBpbnQgX2V0ZXh0LCBfZWRhdGEsIF9lbmQ7Ci0jaWZuZGVmIENPTkZJR19TVU4zCi0JdW5zaWduZWQgbG9uZyBlbmRtZW0sIHN0YXJ0bWVtOwotI2VuZGlmCiAJaW50IGk7CiAKIAkvKiBUaGUgYm9vdGluZm8gaXMgbG9jYXRlZCByaWdodCBhZnRlciB0aGUga2VybmVsIGJzcyAqLwpAQCAtMzIwLDMwICszMTUsMTYgQEAKIAkJcGFuaWMoIk5vIGNvbmZpZ3VyYXRpb24gc2V0dXAiKTsKIAl9CiAKKwlwYWdpbmdfaW5pdCgpOworCiAjaWZuZGVmIENPTkZJR19TVU4zCi0Jc3RhcnRtZW09IG02OGtfbWVtb3J5WzBdLmFkZHI7Ci0JZW5kbWVtID0gc3RhcnRtZW0gKyBtNjhrX21lbW9yeVswXS5zaXplOwotCWhpZ2hfbWVtb3J5ID0gKHZvaWQgKilQQUdFX09GRlNFVDsKLQlmb3IgKGkgPSAwOyBpIDwgbTY4a19udW1fbWVtb3J5OyBpKyspIHsKLQkJbTY4a19tZW1vcnlbaV0uc2l6ZSAmPSBNQVNLXzI1Nks7Ci0JCWlmIChtNjhrX21lbW9yeVtpXS5hZGRyIDwgc3RhcnRtZW0pCi0JCQlzdGFydG1lbSA9IG02OGtfbWVtb3J5W2ldLmFkZHI7Ci0JCWlmIChtNjhrX21lbW9yeVtpXS5hZGRyK202OGtfbWVtb3J5W2ldLnNpemUgPiBlbmRtZW0pCi0JCQllbmRtZW0gPSBtNjhrX21lbW9yeVtpXS5hZGRyK202OGtfbWVtb3J5W2ldLnNpemU7Ci0JCWhpZ2hfbWVtb3J5ICs9IG02OGtfbWVtb3J5W2ldLnNpemU7Ci0JfQotCi0JYXZhaWxtZW0gKz0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCBhdmFpbG1lbSA+PiBQQUdFX1NISUZULAotCQkJCSAgICAgIHN0YXJ0bWVtID4+IFBBR0VfU0hJRlQsIGVuZG1lbSA+PiBQQUdFX1NISUZUKTsKLQotCWZvciAoaSA9IDA7IGkgPCBtNjhrX251bV9tZW1vcnk7IGkrKykKLQkJZnJlZV9ib290bWVtKG02OGtfbWVtb3J5W2ldLmFkZHIsIG02OGtfbWVtb3J5W2ldLnNpemUpOwotCi0JcmVzZXJ2ZV9ib290bWVtKG02OGtfbWVtb3J5WzBdLmFkZHIsIGF2YWlsbWVtIC0gbTY4a19tZW1vcnlbMF0uYWRkcik7Ci0KKwlmb3IgKGkgPSAxOyBpIDwgbTY4a19udW1fbWVtb3J5OyBpKyspCisJCWZyZWVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShpKSwgbTY4a19tZW1vcnlbaV0uYWRkciwKKwkJCQkgIG02OGtfbWVtb3J5W2ldLnNpemUpOwogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCWlmIChtNjhrX3JhbWRpc2suc2l6ZSkgewotCQlyZXNlcnZlX2Jvb3RtZW0obTY4a19yYW1kaXNrLmFkZHIsIG02OGtfcmFtZGlzay5zaXplKTsKKwkJcmVzZXJ2ZV9ib290bWVtX25vZGUoX192aXJ0X3RvX25vZGUocGh5c190b192aXJ0KG02OGtfcmFtZGlzay5hZGRyKSksCisJCQkJICAgICBtNjhrX3JhbWRpc2suYWRkciwgbTY4a19yYW1kaXNrLnNpemUpOwogCQlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQobTY4a19yYW1kaXNrLmFkZHIpOwogCQlpbml0cmRfZW5kID0gaW5pdHJkX3N0YXJ0ICsgbTY4a19yYW1kaXNrLnNpemU7CiAJCXByaW50aygiaW5pdHJkOiAlMDhseCAtICUwOGx4XG4iLCBpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwpAQCAtMzYyLDggKzM0Myw2IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX1NVTjMgKi8KIAotCXBhZ2luZ19pbml0KCk7Ci0KIC8qIHNldCBJU0EgZGVmcyBlYXJseSBhcyBwb3NzaWJsZSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgJiYgZGVmaW5lZChNVUxUSV9JU0EpCiAjaWYgZGVmaW5lZChDT05GSUdfUTQwKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN0ZC5sZHMgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcwppbmRleCA0MzdiNGY4Li40MGYwMmIxIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcworKysgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcwpAQCAtMTEsNyArMTEsNyBAQAogICAuID0gMHgxMDAwOwogICBfdGV4dCA9IC47CQkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KICAgLnRleHQgOiB7Ci0JKigudGV4dCkKKwlURVhUX1RFWFQKIAlTQ0hFRF9URVhUCiAJTE9DS19URVhUCiAJKiguZml4dXApCkBAIC0yOCw3ICsyOCw3IEBACiAgIF9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLwogCiAgIC5kYXRhIDogewkJCS8qIERhdGEgKi8KLQkqKC5kYXRhKQorCURBVEFfREFUQQogCUNPTlNUUlVDVE9SUwogCX0KIApAQCAtNjAsNiArNjAsMTEgQEAKICAgX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwogICAuY29uX2luaXRjYWxsLmluaXQgOiB7ICooLmNvbl9pbml0Y2FsbC5pbml0KSB9CiAgIF9fY29uX2luaXRjYWxsX2VuZCA9IC47CisgIC5tNjhrX2ZpeHVwIDogeworCV9fc3RhcnRfZml4dXAgPSAuOworCSooLm02OGtfZml4dXApCisJX19zdG9wX2ZpeHVwID0gLjsKKyAgfQogICBTRUNVUklUWV9JTklUCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAgIC4gPSBBTElHTig4MTkyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcwppbmRleCAyODY4ZTIwLi5mMDY0MjViIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3VuMy5sZHMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN1bjMubGRzCkBAIC0xMiw3ICsxMiw3IEBACiAgIF90ZXh0ID0gLjsJCQkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLwogICAudGV4dCA6IHsKIAkqKC5oZWFkKQotCSooLnRleHQpCisJVEVYVF9URVhUCiAJU0NIRURfVEVYVAogCUxPQ0tfVEVYVAogCSooLmZpeHVwKQpAQCAtMjMsNyArMjMsNyBAQAogICBfZXRleHQgPSAuOwkJCS8qIEVuZCBvZiB0ZXh0IHNlY3Rpb24gKi8KIAogICAuZGF0YSA6IHsJCQkvKiBEYXRhICovCi0JKiguZGF0YSkKKwlEQVRBX0RBVEEKIAlDT05TVFJVQ1RPUlMKIAkuID0gQUxJR04oMTYpOwkJLyogRXhjZXB0aW9uIHRhYmxlICovCiAJX19zdGFydF9fX2V4X3RhYmxlID0gLjsKQEAgLTU0LDYgKzU0LDExIEBACiAJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwogCS5jb25faW5pdGNhbGwuaW5pdCA6IHsgKiguY29uX2luaXRjYWxsLmluaXQpIH0KIAlfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOworCS5tNjhrX2ZpeHVwIDogeworCQlfX3N0YXJ0X2ZpeHVwID0gLjsKKwkJKigubTY4a19maXh1cCkKKwkJX19zdG9wX2ZpeHVwID0gLjsKKwl9CiAJU0VDVVJJVFlfSU5JVAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCS4gPSBBTElHTig4MTkyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvdWFjY2Vzcy5jIGIvYXJjaC9tNjhrL2xpYi91YWNjZXNzLmMKaW5kZXggODY1ZjlmYi4uMTM4NTRlZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2xpYi91YWNjZXNzLmMKKysrIGIvYXJjaC9tNjhrL2xpYi91YWNjZXNzLmMKQEAgLTE4MSw3ICsxODEsNyBAQAogICogWmVybyBVc2Vyc3BhY2UKICAqLwogCi11bnNpZ25lZCBsb25nIGNsZWFyX3VzZXIodm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBsb25nIG4pCit1bnNpZ25lZCBsb25nIF9fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbikKIHsKIAl1bnNpZ25lZCBsb25nIHJlczsKIApAQCAtMjE5LDQgKzIxOSw0IEBACiAKICAgICByZXR1cm4gcmVzOwogfQotRVhQT1JUX1NZTUJPTChjbGVhcl91c2VyKTsKK0VYUE9SVF9TWU1CT0woX19jbGVhcl91c2VyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvZGVidWcuYyBiL2FyY2gvbTY4ay9tYWMvZGVidWcuYwppbmRleCA3YTViZWQ1Li5lOGE1NzEzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL2RlYnVnLmMKKysrIGIvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jCkBAIC03MSw3ICs3MSw3IEBACiAKIAkvKiBjYWxjdWxhdGUgY3VycmVudCBvZmZzZXQgKi8KIAlwZW5nb2Zmc2V0ID0gKHVuc2lnbmVkIGNoYXIgKiltYWNfdmlkZW9iYXNlICsKLQkJKDE1MCtsaW5lKjIpICogbWFjX3Jvd2J5dGVzKSArIDgwICogcGVuZzsKKwkJKDE1MCtsaW5lKjIpICogbWFjX3Jvd2J5dGVzICsgODAgKiBwZW5nOwogCiAJcHB0ciA9IHBlbmdvZmZzZXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9pbml0LmMgYi9hcmNoL202OGsvbW0vaW5pdC5jCmluZGV4IGFiOTAyMTMuLmYxZGUxOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tbS9pbml0LmMKKysrIGIvYXJjaC9tNjhrL21tL2luaXQuYwpAQCAtNyw2ICs3LDcgQEAKICAqICB0byBtb3Rvcm9sYS5jIGFuZCBzdW4zbW11LmMKICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMzEsNiArMzIsMzcgQEAKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAorc3RhdGljIGJvb3RtZW1fZGF0YV90IF9faW5pdGRhdGEgYm9vdG1lbV9kYXRhW01BWF9OVU1OT0RFU107CisKK3BnX2RhdGFfdCBwZ19kYXRhX21hcFtNQVhfTlVNTk9ERVNdOworRVhQT1JUX1NZTUJPTChwZ19kYXRhX21hcCk7CisKK2ludCBtNjhrX3ZpcnRfdG9fbm9kZV9zaGlmdDsKKworI2lmbmRlZiBDT05GSUdfU0lOR0xFX01FTU9SWV9DSFVOSworcGdfZGF0YV90ICpwZ19kYXRhX3RhYmxlWzY1XTsKK0VYUE9SVF9TWU1CT0wocGdfZGF0YV90YWJsZSk7CisjZW5kaWYKKwordm9pZCBtNjhrX3NldHVwX25vZGUoaW50IG5vZGUpCit7CisjaWZuZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCisJc3RydWN0IG1lbV9pbmZvICppbmZvID0gbTY4a19tZW1vcnkgKyBub2RlOworCWludCBpLCBlbmQ7CisKKwlpID0gKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KGluZm8tPmFkZHIpID4+IF9fdmlydF90b19ub2RlX3NoaWZ0KCk7CisJZW5kID0gKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KGluZm8tPmFkZHIgKyBpbmZvLT5zaXplIC0gMSkgPj4gX192aXJ0X3RvX25vZGVfc2hpZnQoKTsKKwlmb3IgKDsgaSA8PSBlbmQ7IGkrKykgeworCQlpZiAocGdfZGF0YV90YWJsZVtpXSkKKwkJCXByaW50aygib3ZlcmxhcCBhdCAldSBmb3IgY2h1bmsgJXVcbiIsIGksIG5vZGUpOworCQlwZ19kYXRhX3RhYmxlW2ldID0gcGdfZGF0YV9tYXAgKyBub2RlOworCX0KKyNlbmRpZgorCXBnX2RhdGFfbWFwW25vZGVdLmJkYXRhID0gYm9vdG1lbV9kYXRhICsgbm9kZTsKKwlub2RlX3NldF9vbmxpbmUobm9kZSk7Cit9CisKKwogLyoKICAqIFpFUk9fUEFHRSBpcyBhIHNwZWNpYWwgcGFnZSB0aGF0IGlzIHVzZWQgZm9yIHplcm8taW5pdGlhbGl6ZWQKICAqIGRhdGEgYW5kIENPVy4KQEAgLTQwLDUyICs3Miw1MSBAQAogCiB2b2lkIHNob3dfbWVtKHZvaWQpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBpOwotICAgIGludCBmcmVlID0gMCwgdG90YWwgPSAwLCByZXNlcnZlZCA9IDAsIHNoYXJlZCA9IDA7Ci0gICAgaW50IGNhY2hlZCA9IDA7CisJcGdfZGF0YV90ICpwZ2RhdDsKKwlpbnQgZnJlZSA9IDAsIHRvdGFsID0gMCwgcmVzZXJ2ZWQgPSAwLCBzaGFyZWQgPSAwOworCWludCBjYWNoZWQgPSAwOworCWludCBpOwogCi0gICAgcHJpbnRrKCJcbk1lbS1pbmZvOlxuIik7Ci0gICAgc2hvd19mcmVlX2FyZWFzKCk7Ci0gICAgcHJpbnRrKCJGcmVlIHN3YXA6ICAgICAgICU2bGRrQlxuIiwgbnJfc3dhcF9wYWdlczw8KFBBR0VfU0hJRlQtMTApKTsKLSAgICBpID0gbWF4X21hcG5yOwotICAgIHdoaWxlIChpLS0gPiAwKSB7Ci0JdG90YWwrKzsKLQlpZiAoUGFnZVJlc2VydmVkKG1lbV9tYXAraSkpCi0JICAgIHJlc2VydmVkKys7Ci0JZWxzZSBpZiAoUGFnZVN3YXBDYWNoZShtZW1fbWFwK2kpKQotCSAgICBjYWNoZWQrKzsKLQllbHNlIGlmICghcGFnZV9jb3VudChtZW1fbWFwK2kpKQotCSAgICBmcmVlKys7Ci0JZWxzZQotCSAgICBzaGFyZWQgKz0gcGFnZV9jb3VudChtZW1fbWFwK2kpIC0gMTsKLSAgICB9Ci0gICAgcHJpbnRrKCIlZCBwYWdlcyBvZiBSQU1cbiIsdG90YWwpOwotICAgIHByaW50aygiJWQgZnJlZSBwYWdlc1xuIixmcmVlKTsKLSAgICBwcmludGsoIiVkIHJlc2VydmVkIHBhZ2VzXG4iLHJlc2VydmVkKTsKLSAgICBwcmludGsoIiVkIHBhZ2VzIHNoYXJlZFxuIixzaGFyZWQpOwotICAgIHByaW50aygiJWQgcGFnZXMgc3dhcCBjYWNoZWRcbiIsY2FjaGVkKTsKKwlwcmludGsoIlxuTWVtLWluZm86XG4iKTsKKwlzaG93X2ZyZWVfYXJlYXMoKTsKKwlwcmludGsoIkZyZWUgc3dhcDogICAgICAgJTZsZGtCXG4iLCBucl9zd2FwX3BhZ2VzPDwoUEFHRV9TSElGVC0xMCkpOworCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlczsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBnZGF0LT5ub2RlX21lbV9tYXAgKyBpOworCQkJdG90YWwrKzsKKwkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCisJCQkJcmVzZXJ2ZWQrKzsKKwkJCWVsc2UgaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCisJCQkJY2FjaGVkKys7CisJCQllbHNlIGlmICghcGFnZV9jb3VudChwYWdlKSkKKwkJCQlmcmVlKys7CisJCQllbHNlCisJCQkJc2hhcmVkICs9IHBhZ2VfY291bnQocGFnZSkgLSAxOworCQl9CisJfQorCXByaW50aygiJWQgcGFnZXMgb2YgUkFNXG4iLHRvdGFsKTsKKwlwcmludGsoIiVkIGZyZWUgcGFnZXNcbiIsZnJlZSk7CisJcHJpbnRrKCIlZCByZXNlcnZlZCBwYWdlc1xuIixyZXNlcnZlZCk7CisJcHJpbnRrKCIlZCBwYWdlcyBzaGFyZWRcbiIsc2hhcmVkKTsKKwlwcmludGsoIiVkIHBhZ2VzIHN3YXAgY2FjaGVkXG4iLGNhY2hlZCk7CiB9CiAKIGV4dGVybiB2b2lkIGluaXRfcG9pbnRlcl90YWJsZSh1bnNpZ25lZCBsb25nIHB0YWJsZSk7CiAKIC8qIFJlZmVyZW5jZXMgdG8gc2VjdGlvbiBib3VuZGFyaWVzICovCiAKLWV4dGVybiBjaGFyIF90ZXh0LCBfZXRleHQsIF9lZGF0YSwgX19ic3Nfc3RhcnQsIF9lbmQ7Ci1leHRlcm4gY2hhciBfX2luaXRfYmVnaW4sIF9faW5pdF9lbmQ7CitleHRlcm4gY2hhciBfdGV4dFtdLCBfZXRleHRbXTsKK2V4dGVybiBjaGFyIF9faW5pdF9iZWdpbltdLCBfX2luaXRfZW5kW107CiAKIGV4dGVybiBwbWRfdCAqemVyb19wZ3RhYmxlOwogCiB2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQogeworCXBnX2RhdGFfdCAqcGdkYXQ7CiAJaW50IGNvZGVwYWdlcyA9IDA7CiAJaW50IGRhdGFwYWdlcyA9IDA7CiAJaW50IGluaXRwYWdlcyA9IDA7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0jaWZuZGVmIENPTkZJR19TVU4zCiAJaW50IGk7Ci0jZW5kaWYKLQotCW1heF9tYXBuciA9IG51bV9waHlzcGFnZXMgPSAoKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5IC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpOwogCiAjaWZkZWYgQ09ORklHX0FUQVJJCiAJaWYgKE1BQ0hfSVNfQVRBUkkpCkBAIC05MywxOSArMTI0LDI1IEBACiAjZW5kaWYKIAogCS8qIHRoaXMgd2lsbCBwdXQgYWxsIG1lbW9yeSBvbnRvIHRoZSBmcmVlbGlzdHMgKi8KLQl0b3RhbHJhbV9wYWdlcyA9IGZyZWVfYWxsX2Jvb3RtZW0oKTsKKwl0b3RhbHJhbV9wYWdlcyA9IG51bV9waHlzcGFnZXMgPSAwOworCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgeworCQludW1fcGh5c3BhZ2VzICs9IHBnZGF0LT5ub2RlX3ByZXNlbnRfcGFnZXM7CiAKLQlmb3IgKHRtcCA9IFBBR0VfT0ZGU0VUIDsgdG1wIDwgKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnk7IHRtcCArPSBQQUdFX1NJWkUpIHsKLQkJaWYgKFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UodG1wKSkpIHsKLQkJCWlmICh0bXAgPj0gKHVuc2lnbmVkIGxvbmcpJl90ZXh0Ci0JCQkgICAgJiYgdG1wIDwgKHVuc2lnbmVkIGxvbmcpJl9ldGV4dCkKKwkJdG90YWxyYW1fcGFnZXMgKz0gZnJlZV9hbGxfYm9vdG1lbV9ub2RlKHBnZGF0KTsKKwkJZm9yIChpID0gMDsgaSA8IHBnZGF0LT5ub2RlX3NwYW5uZWRfcGFnZXM7IGkrKykgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZ2RhdC0+bm9kZV9tZW1fbWFwICsgaTsKKwkJCWNoYXIgKmFkZHIgPSBwYWdlX3RvX3ZpcnQocGFnZSk7CisKKwkJCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGFkZHIgPj0gX3RleHQgJiYKKwkJCSAgICBhZGRyIDwgX2V0ZXh0KQogCQkJCWNvZGVwYWdlcysrOwotCQkJZWxzZSBpZiAodG1wID49ICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2JlZ2luCi0JCQkJICYmIHRtcCA8ICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2VuZCkKKwkJCWVsc2UgaWYgKGFkZHIgPj0gX19pbml0X2JlZ2luICYmCisJCQkJIGFkZHIgPCBfX2luaXRfZW5kKQogCQkJCWluaXRwYWdlcysrOwogCQkJZWxzZQogCQkJCWRhdGFwYWdlcysrOwotCQkJY29udGludWU7CiAJCX0KIAl9CiAKQEAgLTEyNCw3ICsxNjEsNyBAQAogCiAJcHJpbnRrKCJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIGRhdGEsICVkayBpbml0KVxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcpbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKLQkgICAgICAgbWF4X21hcG5yIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgdG90YWxyYW1fcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLAogCSAgICAgICBjb2RlcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLAogCSAgICAgICBkYXRhcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLAogCSAgICAgICBpbml0cGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tZW1vcnkuYyBiL2FyY2gvbTY4ay9tbS9tZW1vcnkuYwppbmRleCAxM2MwYjRhLi5iNzQ3MzUyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vbWVtb3J5LmMKKysrIGIvYXJjaC9tNjhrL21tL21lbW9yeS5jCkBAIC0xMjcsNjcgKzEyNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBERUJVR19JTlZBTElEX1BUT1YKLWludCBtbV9pbnZfY250ID0gNTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCi0vKgotICogVGhlIGZvbGxvd2luZyB0d28gcm91dGluZXMgbWFwIGZyb20gYSBwaHlzaWNhbCBhZGRyZXNzIHRvIGEga2VybmVsCi0gKiB2aXJ0dWFsIGFkZHJlc3MgYW5kIHZpY2UgdmVyc2EuCi0gKi8KLXVuc2lnbmVkIGxvbmcgbW1fdnRvcCh1bnNpZ25lZCBsb25nIHZhZGRyKQotewotCWludCBpPTA7Ci0JdW5zaWduZWQgbG9uZyB2b2ZmID0gKHVuc2lnbmVkIGxvbmcpdmFkZHIgLSBQQUdFX09GRlNFVDsKLQotCWRvIHsKLQkJaWYgKHZvZmYgPCBtNjhrX21lbW9yeVtpXS5zaXplKSB7Ci0jaWZkZWYgREVCVUdQVgotCQkJcHJpbnRrICgiVlRPUCglcCk9JWx4XG4iLCB2YWRkciwKLQkJCQltNjhrX21lbW9yeVtpXS5hZGRyICsgdm9mZik7Ci0jZW5kaWYKLQkJCXJldHVybiBtNjhrX21lbW9yeVtpXS5hZGRyICsgdm9mZjsKLQkJfQotCQl2b2ZmIC09IG02OGtfbWVtb3J5W2ldLnNpemU7Ci0JfSB3aGlsZSAoKytpIDwgbTY4a19udW1fbWVtb3J5KTsKLQotCS8qIEFzIGEgc3BlY2lhbCBjYXNlIGFsbG93IGBfX3BhKGhpZ2hfbWVtb3J5KScuICAqLwotCWlmICh2b2ZmID09IDApCi0JCXJldHVybiBtNjhrX21lbW9yeVtpLTFdLmFkZHIgKyBtNjhrX21lbW9yeVtpLTFdLnNpemU7Ci0KLQlyZXR1cm4gLTE7Ci19Ci1FWFBPUlRfU1lNQk9MKG1tX3Z0b3ApOwotCi11bnNpZ25lZCBsb25nIG1tX3B0b3YgKHVuc2lnbmVkIGxvbmcgcGFkZHIpCi17Ci0JaW50IGkgPSAwOwotCXVuc2lnbmVkIGxvbmcgcG9mZiwgdm9mZiA9IFBBR0VfT0ZGU0VUOwotCi0JZG8gewotCQlwb2ZmID0gcGFkZHIgLSBtNjhrX21lbW9yeVtpXS5hZGRyOwotCQlpZiAocG9mZiA8IG02OGtfbWVtb3J5W2ldLnNpemUpIHsKLSNpZmRlZiBERUJVR1BWCi0JCQlwcmludGsgKCJQVE9WKCVseCk9JWx4XG4iLCBwYWRkciwgcG9mZiArIHZvZmYpOwotI2VuZGlmCi0JCQlyZXR1cm4gcG9mZiArIHZvZmY7Ci0JCX0KLQkJdm9mZiArPSBtNjhrX21lbW9yeVtpXS5zaXplOwotCX0gd2hpbGUgKCsraSA8IG02OGtfbnVtX21lbW9yeSk7Ci0KLSNpZmRlZiBERUJVR19JTlZBTElEX1BUT1YKLQlpZiAobW1faW52X2NudCA+IDApIHsKLQkJbW1faW52X2NudC0tOwotCQlwcmludGsoIkludmFsaWQgdXNlIG9mIHBoeXNfdG9fdmlydCgweCVseCkgYXQgMHglcCFcbiIsCi0JCQlwYWRkciwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gLTE7Ci19Ci1FWFBPUlRfU1lNQk9MKG1tX3B0b3YpOwotI2VuZGlmCi0KIC8qIGludmFsaWRhdGUgcGFnZSBpbiBib3RoIGNhY2hlcyAqLwogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyMDQwKHVuc2lnbmVkIGxvbmcgcGFkZHIpCiB7CkBAIC0zNTQsMTUgKzI5MywzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGNhY2hlX3B1c2gpOwogCi0jaWZuZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCi1pbnQgbW1fZW5kX29mX2NodW5rICh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbTY4a19udW1fbWVtb3J5OyBpKyspCi0JCWlmIChtNjhrX21lbW9yeVtpXS5hZGRyICsgbTY4a19tZW1vcnlbaV0uc2l6ZSA9PSBhZGRyICsgbGVuKQotCQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKG1tX2VuZF9vZl9jaHVuayk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKaW5kZXggYWZjY2NkYy4uN2Q1NzFhMiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKKysrIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKQEAgLTQzLDYgKzQzLDExIEBACiBFWFBPUlRfU1lNQk9MKG1tX2NhY2hlYml0cyk7CiAjZW5kaWYKIAorLyogc2l6ZSBvZiBtZW1vcnkgYWxyZWFkeSBtYXBwZWQgaW4gaGVhZC5TICovCisjZGVmaW5lIElOSVRfTUFQUEVEX1NJWkUJKDRVTDw8MjApCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGF2YWlsbWVtOworCiBzdGF0aWMgcHRlX3QgKiBfX2luaXQga2VybmVsX3BhZ2VfdGFibGUodm9pZCkKIHsKIAlwdGVfdCAqcHRhYmxlcDsKQEAgLTk4LDE5ICsxMDMsMjAgQEAKIAlyZXR1cm4gbGFzdF9wZ3RhYmxlOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQKLW1hcF9jaHVuayAodW5zaWduZWQgbG9uZyBhZGRyLCBsb25nIHNpemUpCitzdGF0aWMgdm9pZCBfX2luaXQgbWFwX25vZGUoaW50IG5vZGUpCiB7CiAjZGVmaW5lIFBUUlRSRUVTSVpFICgyNTYqMTAyNCkKICNkZWZpbmUgUk9PVFRSRUVTSVpFICgzMioxMDI0KjEwMjQpCi0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgdmlydGFkZHIgPSBQQUdFX09GRlNFVDsKLQl1bnNpZ25lZCBsb25nIHBoeXNhZGRyOworCXVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHZpcnRhZGRyLCBzaXplOwogCXBnZF90ICpwZ2RfZGlyOwogCXBtZF90ICpwbWRfZGlyOwogCXB0ZV90ICpwdGVfZGlyOwogCi0JcGh5c2FkZHIgPSAoYWRkciB8IG02OGtfc3VwZXJ2aXNvcl9jYWNoZW1vZGUgfAotCQkgICAgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpOworCXNpemUgPSBtNjhrX21lbW9yeVtub2RlXS5zaXplOworCXBoeXNhZGRyID0gbTY4a19tZW1vcnlbbm9kZV0uYWRkcjsKKwl2aXJ0YWRkciA9ICh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChwaHlzYWRkcik7CisJcGh5c2FkZHIgfD0gbTY4a19zdXBlcnZpc29yX2NhY2hlbW9kZSB8CisJCSAgICBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWTsKIAlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApCiAJCXBoeXNhZGRyIHw9IF9QQUdFX0dMT0JBTDA0MDsKIApAQCAtMTkwLDggKzE5Niw2IEBACiAjaWZkZWYgREVCVUcKIAlwcmludGsoIlxuIik7CiAjZW5kaWYKLQotCXJldHVybiB2aXJ0YWRkcjsKIH0KIAogLyoKQEAgLTIwMCwxNSArMjA0LDE2IEBACiAgKi8KIHZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpCiB7Ci0JaW50IGNodW5rOwotCXVuc2lnbmVkIGxvbmcgbWVtX2F2YWlsID0gMDsKIAl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXSA9IHsgMCwgfTsKKwl1bnNpZ25lZCBsb25nIG1pbl9hZGRyLCBtYXhfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIHNpemUsIGVuZDsKKwlpbnQgaTsKIAogI2lmZGVmIERFQlVHCiAJewogCQlleHRlcm4gdW5zaWduZWQgbG9uZyBhdmFpbG1lbTsKLQkJcHJpbnRrICgic3RhcnQgb2YgcGFnaW5nX2luaXQgKCVwLCAlbHgsICVseCwgJWx4KVxuIiwKLQkJCWtlcm5lbF9wZ19kaXIsIGF2YWlsbWVtLCBzdGFydF9tZW0sIGVuZF9tZW0pOworCQlwcmludGsgKCJzdGFydCBvZiBwYWdpbmdfaW5pdCAoJXAsICVseClcbiIsCisJCQlrZXJuZWxfcGdfZGlyLCBhdmFpbG1lbSk7CiAJfQogI2VuZGlmCiAKQEAgLTIyMiwyNCArMjI3LDYyIEBACiAJCQlwZ3Byb3RfdmFsKHByb3RlY3Rpb25fbWFwW2ldKSB8PSBfUEFHRV9DQUNIRTA0MDsKIAl9CiAKLQkvKgotCSAqIE1hcCB0aGUgcGh5c2ljYWwgbWVtb3J5IGF2YWlsYWJsZSBpbnRvIHRoZSBrZXJuZWwgdmlydHVhbAotCSAqIGFkZHJlc3Mgc3BhY2UuICBJdCBtYXkgYWxsb2NhdGUgc29tZSBtZW1vcnkgZm9yIHBhZ2UKLQkgKiB0YWJsZXMgYW5kIHRodXMgbW9kaWZ5IGF2YWlsbWVtLgotCSAqLworCW1pbl9hZGRyID0gbTY4a19tZW1vcnlbMF0uYWRkcjsKKwltYXhfYWRkciA9IG1pbl9hZGRyICsgbTY4a19tZW1vcnlbMF0uc2l6ZTsKKwlmb3IgKGkgPSAxOyBpIDwgbTY4a19udW1fbWVtb3J5OykgeworCQlpZiAobTY4a19tZW1vcnlbaV0uYWRkciA8IG1pbl9hZGRyKSB7CisJCQlwcmludGsoIklnbm9yaW5nIG1lbW9yeSBjaHVuayBhdCAweCVseDoweCVseCBiZWZvcmUgdGhlIGZpcnN0IGNodW5rXG4iLAorCQkJCW02OGtfbWVtb3J5W2ldLmFkZHIsIG02OGtfbWVtb3J5W2ldLnNpemUpOworCQkJcHJpbnRrKCJGaXggeW91ciBib290bG9hZGVyIG9yIHVzZSBhIG1lbWZpbGUgdG8gbWFrZSB1c2Ugb2YgdGhpcyBhcmVhIVxuIik7CisJCQltNjhrX251bV9tZW1vcnktLTsKKwkJCW1lbW1vdmUobTY4a19tZW1vcnkgKyBpLCBtNjhrX21lbW9yeSArIGkgKyAxLAorCQkJCShtNjhrX251bV9tZW1vcnkgLSBpKSAqIHNpemVvZihzdHJ1Y3QgbWVtX2luZm8pKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWFkZHIgPSBtNjhrX21lbW9yeVtpXS5hZGRyICsgbTY4a19tZW1vcnlbaV0uc2l6ZTsKKwkJaWYgKGFkZHIgPiBtYXhfYWRkcikKKwkJCW1heF9hZGRyID0gYWRkcjsKKwkJaSsrOworCX0KKwltNjhrX21lbW9mZnNldCA9IG1pbl9hZGRyIC0gUEFHRV9PRkZTRVQ7CisJbTY4a192aXJ0X3RvX25vZGVfc2hpZnQgPSBmbHMobWF4X2FkZHIgLSBtaW5fYWRkciAtIDEpIC0gNjsKIAotCWZvciAoY2h1bmsgPSAwOyBjaHVuayA8IG02OGtfbnVtX21lbW9yeTsgY2h1bmsrKykgewotCQltZW1fYXZhaWwgPSBtYXBfY2h1bmsgKG02OGtfbWVtb3J5W2NodW5rXS5hZGRyLAotCQkJCSAgICAgICBtNjhrX21lbW9yeVtjaHVua10uc2l6ZSk7CisJbW9kdWxlX2ZpeHVwKE5VTEwsIF9fc3RhcnRfZml4dXAsIF9fc3RvcF9maXh1cCk7CisJZmx1c2hfaWNhY2hlKCk7CiAKKwloaWdoX21lbW9yeSA9IHBoeXNfdG9fdmlydChtYXhfYWRkcik7CisKKwltaW5fbG93X3BmbiA9IGF2YWlsbWVtID4+IFBBR0VfU0hJRlQ7CisJbWF4X2xvd19wZm4gPSBtYXhfYWRkciA+PiBQQUdFX1NISUZUOworCisJZm9yIChpID0gMDsgaSA8IG02OGtfbnVtX21lbW9yeTsgaSsrKSB7CisJCWFkZHIgPSBtNjhrX21lbW9yeVtpXS5hZGRyOworCQllbmQgPSBhZGRyICsgbTY4a19tZW1vcnlbaV0uc2l6ZTsKKwkJbTY4a19zZXR1cF9ub2RlKGkpOworCQlhdmFpbG1lbSA9IFBBR0VfQUxJR04oYXZhaWxtZW0pOworCQlhdmFpbG1lbSArPSBpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoaSksCisJCQkJCSAgICAgIGF2YWlsbWVtID4+IFBBR0VfU0hJRlQsCisJCQkJCSAgICAgIGFkZHIgPj4gUEFHRV9TSElGVCwKKwkJCQkJICAgICAgZW5kID4+IFBBR0VfU0hJRlQpOwogCX0KIAorCS8qCisJICogTWFwIHRoZSBwaHlzaWNhbCBtZW1vcnkgYXZhaWxhYmxlIGludG8gdGhlIGtlcm5lbCB2aXJ0dWFsCisJICogYWRkcmVzcyBzcGFjZS4gRmlyc3QgaW5pdGlhbGl6ZSB0aGUgYm9vdG1lbSBhbGxvY2F0b3Igd2l0aAorCSAqIHRoZSBtZW1vcnkgd2UgYWxyZWFkeSBtYXBwZWQsIHNvIG1hcF9ub2RlKCkgaGFzIHNvbWV0aGluZworCSAqIHRvIGFsbG9jYXRlLgorCSAqLworCWFkZHIgPSBtNjhrX21lbW9yeVswXS5hZGRyOworCXNpemUgPSBtNjhrX21lbW9yeVswXS5zaXplOworCWZyZWVfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgYXZhaWxtZW0sIG1pbihJTklUX01BUFBFRF9TSVpFLCBzaXplKSAtIChhdmFpbG1lbSAtIGFkZHIpKTsKKwltYXBfbm9kZSgwKTsKKwlpZiAoc2l6ZSA+IElOSVRfTUFQUEVEX1NJWkUpCisJCWZyZWVfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgYWRkciArIElOSVRfTUFQUEVEX1NJWkUsIHNpemUgLSBJTklUX01BUFBFRF9TSVpFKTsKKworCWZvciAoaSA9IDE7IGkgPCBtNjhrX251bV9tZW1vcnk7IGkrKykKKwkJbWFwX25vZGUoaSk7CisKIAlmbHVzaF90bGJfYWxsKCk7Ci0jaWZkZWYgREVCVUcKLQlwcmludGsgKCJtZW1vcnkgYXZhaWxhYmxlIGlzICVsZEtCXG4iLCBtZW1fYXZhaWwgPj4gMTApOwotCXByaW50ayAoInN0YXJ0X21lbSBpcyAlI2x4XG52aXJ0dWFsX2VuZCBpcyAlI2x4XG4iLAotCQlzdGFydF9tZW0sIGVuZF9tZW0pOwotI2VuZGlmCiAKIAkvKgogCSAqIGluaXRpYWxpemUgdGhlIGJhZCBwYWdlIHRhYmxlIGFuZCBiYWQgcGFnZSB0byBwb2ludApAQCAtMjU2LDE0ICsyOTksMTEgQEAKICNpZmRlZiBERUJVRwogCXByaW50ayAoImJlZm9yZSBmcmVlX2FyZWFfaW5pdFxuIik7CiAjZW5kaWYKLQl6b25lc19zaXplW1pPTkVfRE1BXSA9IChtYWNoX21heF9kbWFfYWRkcmVzcyA8ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ID8KLQkJCQkobWFjaF9tYXhfZG1hX2FkZHJlc3MrMSkgOiAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSk7Ci0Jem9uZXNfc2l6ZVtaT05FX05PUk1BTF0gPSAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSAtIHpvbmVzX3NpemVbMF07Ci0KLQl6b25lc19zaXplW1pPTkVfRE1BXSA9ICh6b25lc19zaXplW1pPTkVfRE1BXSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUOwotCXpvbmVzX3NpemVbWk9ORV9OT1JNQUxdID4+PSBQQUdFX1NISUZUOwotCi0JZnJlZV9hcmVhX2luaXQoem9uZXNfc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IG02OGtfbnVtX21lbW9yeTsgaSsrKSB7CisJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbTY4a19tZW1vcnlbaV0uc2l6ZSA+PiBQQUdFX1NISUZUOworCQlmcmVlX2FyZWFfaW5pdF9ub2RlKGksIHBnX2RhdGFfbWFwICsgaSwgem9uZXNfc2l6ZSwKKwkJCQkgICAgbTY4a19tZW1vcnlbaV0uYWRkciA+PiBQQUdFX1NISUZULCBOVUxMKTsKKwl9CiB9CiAKIGV4dGVybiBjaGFyIF9faW5pdF9iZWdpbiwgX19pbml0X2VuZDsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tdm1lMTZ4L3J0Yy5jIGIvYXJjaC9tNjhrL212bWUxNngvcnRjLmMKaW5kZXggMjcyZDQ3ZS4uZTM0MTM4NyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL212bWUxNngvcnRjLmMKKysrIGIvYXJjaC9tNjhrL212bWUxNngvcnRjLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CS8qIEZvciBzdHJ1Y3QgcnRjX3RpbWUgYW5kIGlvY3RscywgZXRjICovCi0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KICNpbmNsdWRlIDxhc20vbXZtZTE2eGh3Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jIGIvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKaW5kZXggNDg1MWI4NC4uYzBmYmQyNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL3N1bjMvY29uZmlnLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vY29udHJlZ3MuaD4KICNpbmNsdWRlIDxhc20vbW92cy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vc3VuMy1oZWFkLmg+CiAjaW5jbHVkZSA8YXNtL3N1bjNtbXUuaD4KICNpbmNsdWRlIDxhc20vcnRjLmg+CkBAIC0xMjcsNiArMTI4LDcgQEAKIAloaWdoX21lbW9yeSA9ICh2b2lkICopbWVtb3J5X2VuZDsKIAlhdmFpbG1lbSA9IG1lbW9yeV9zdGFydDsKIAorCW02OGtfc2V0dXBfbm9kZSgwKTsKIAlhdmFpbG1lbSArPSBpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIHN0YXJ0X3BhZ2UsIDAsIG51bV9wYWdlcyk7CiAJYXZhaWxtZW0gPSAoYXZhaWxtZW0gKyAoUEFHRV9TSVpFLTEpKSAmIFBBR0VfTUFTSzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcKaW5kZXggODIzZjczNy4uYWRjNjRhMiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZworKysgYi9hcmNoL202OGtub21tdS9LY29uZmlnCkBAIC00NzAsMTQgKzQ3MCw2IEBACiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiAoQVZORVQ1MjgyKQogCi1jb25maWcgTEFSR0VfQUxMT0NTCi0JYm9vbCAiQWxsb3cgYWxsb2NhdGluZyBsYXJnZSBibG9ja3MgKD4gMU1CKSBvZiBtZW1vcnkiCi0JaGVscAotCSAgQWxsb3cgdGhlIHNsYWIgbWVtb3J5IGFsbG9jYXRvciB0byBrZWVwIGNoYWlucyBmb3IgdmVyeSBsYXJnZQotCSAgbWVtb3J5IHNpemVzIC0gdXB0byAzMk1CLiBZb3UgbWF5IG5lZWQgdGhpcyBpZiB5b3VyIHN5c3RlbSBoYXMKLQkgIGEgbG90IG9mIFJBTSwgYW5kIHlvdSBuZWVkIHRvIGFibGUgdG8gYWxsb2NhdGUgdmVyeSBsYXJnZQotCSAgY29udGlndW91cyBjaHVua3MuIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyA0S1NUQUNLUwogCWJvb2wgIlVzZSA0S2IgZm9yIGtlcm5lbCBzdGFja3MgaW5zdGVhZCBvZiA4S2IiCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9LY29uZmlnLmRlYnVnIGIvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZy5kZWJ1ZwppbmRleCA3NjNjOWFhLi45ZmY0N2JkIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcuZGVidWcKQEAgLTUsNyArNSw3IEBACiBjb25maWcgRlVMTERFQlVHCiAJYm9vbCAiRnVsbCBTeW1ib2xpYy9Tb3VyY2UgRGVidWdnaW5nIHN1cHBvcnQiCiAJaGVscAotCSAgRW5hYmxlIGRlYnVnaW5nIHN5bWJvbHMgb24ga2VybmVsIGJ1aWxkLgorCSAgRW5hYmxlIGRlYnVnZ2luZyBzeW1ib2xzIG9uIGtlcm5lbCBidWlsZC4KIAogY29uZmlnIEhJR0hQUk9GSUxFCiAJYm9vbCAiVXNlIGZhc3Qgc2Vjb25kIHRpbWVyIGZvciBwcm9maWxpbmciCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGI5ODhjN2IuLjdjZDE4M2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0zMSw3ICszMSw3IEBACiAJREVGSU5FKFRBU0tfUFRSQUNFLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHB0cmFjZSkpOwogCURFRklORShUQVNLX0JMT0NLRUQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgYmxvY2tlZCkpOwogCURFRklORShUQVNLX1RIUkVBRCwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQpKTsKLQlERUZJTkUoVEFTS19USFJFQURfSU5GTywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mbykpOworCURFRklORShUQVNLX1RIUkVBRF9JTkZPLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHN0YWNrKSk7CiAJREVGSU5FKFRBU0tfTU0sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgbW0pKTsKIAlERUZJTkUoVEFTS19BQ1RJVkVfTU0sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgYWN0aXZlX21tKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYwppbmRleCA3MmQzNDk2Li5mNTRiNmEzIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNfbTY4ay5jCmluZGV4IDMyNjViMmQuLjQ4ZTZiMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNfbTY4ay5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNfbTY4ay5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAjaW5jbHVkZSA8bGludXgvbXNnLmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGM4NmExYmYuLjA3YTAwNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC02Miw3ICs2Miw3IEBACiAJLnRleHQgOiB7CiAJCV90ZXh0ID0gLjsKIAkJX3N0ZXh0ID0gLiA7Ci0gICAgICAgIAkqKC50ZXh0KQorCQlURVhUX1RFWFQKIAkJU0NIRURfVEVYVAogICAgICAgICAJKigudGV4dC5sb2NrKQogCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkuZGF0YSBEQVRBX0FERFIgOiB7CiAJCS4gPSBBTElHTig0KTsKIAkJX3NkYXRhID0gLiA7Ci0JCSooLmRhdGEpCisJCURBVEFfREFUQQogCQkuID0gQUxJR04oODE5MikgOwogCQkqKC5kYXRhLmluaXRfdGFzaykKIAkJX2VkYXRhID0gLiA7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IDc0NDFhMmMuLjBmMDk0MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0xNSwxMjEgKzE1LDggQEAKIAlwcm9tcHQgIlN5c3RlbSB0eXBlIgogCWRlZmF1bHQgU0dJX0lQMjIKIAotY29uZmlnIE1JUFNfTVRYMQotCWJvb2wgIjRHIFN5c3RlbXMgTVRYLTEgYm9hcmQiCi0Jc2VsZWN0IERNQV9OT05DT0hFUkVOVAotCXNlbGVjdCBIV19IQVNfUENJCi0Jc2VsZWN0IFJFU09VUkNFU182NEJJVCBpZiBQQ0kKLQlzZWxlY3QgU09DX0FVMTUwMAotCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKLQlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KLQotY29uZmlnIE1JUFNfQk9TUE9SVVMKLQlib29sICJBTUQgQWxjaGVteSBCb3Nwb3J1cyBib2FyZCIKLQlzZWxlY3QgU09DX0FVMTUwMAotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0KLWNvbmZpZyBNSVBTX1BCMTAwMAotCWJvb2wgIkFNRCBBbGNoZW15IFBCMTAwMCBib2FyZCIKLQlzZWxlY3QgU09DX0FVMTAwMAotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgSFdfSEFTX1BDSQotCXNlbGVjdCBSRVNPVVJDRVNfNjRCSVQgaWYgUENJCi0Jc2VsZWN0IFNXQVBfSU9fU1BBQ0UKLQlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0KLWNvbmZpZyBNSVBTX1BCMTEwMAotCWJvb2wgIkFNRCBBbGNoZW15IFBCMTEwMCBib2FyZCIKLQlzZWxlY3QgU09DX0FVMTEwMAotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgSFdfSEFTX1BDSQotCXNlbGVjdCBSRVNPVVJDRVNfNjRCSVQgaWYgUENJCi0Jc2VsZWN0IFNXQVBfSU9fU1BBQ0UKLQlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0KLWNvbmZpZyBNSVBTX1BCMTUwMAotCWJvb2wgIkFNRCBBbGNoZW15IFBCMTUwMCBib2FyZCIKLQlzZWxlY3QgU09DX0FVMTUwMAotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgSFdfSEFTX1BDSQotCXNlbGVjdCBSRVNPVVJDRVNfNjRCSVQgaWYgUENJCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX01JUFMzMl9SMQotCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgotCi1jb25maWcgTUlQU19QQjE1NTAKLQlib29sICJBTUQgQWxjaGVteSBQQjE1NTAgYm9hcmQiCi0Jc2VsZWN0IFNPQ19BVTE1NTAKLQlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCi0Jc2VsZWN0IEhXX0hBU19QQ0kKLQlzZWxlY3QgTUlQU19ESVNBQkxFX09CU09MRVRFX0lERQotCXNlbGVjdCBSRVNPVVJDRVNfNjRCSVQgaWYgUENJCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX01JUFMzMl9SMQotCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgotCi1jb25maWcgTUlQU19QQjEyMDAKLQlib29sICJBTUQgQWxjaGVteSBQQjEyMDAgYm9hcmQiCi0Jc2VsZWN0IFNPQ19BVTEyMDAKLQlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCi0Jc2VsZWN0IE1JUFNfRElTQUJMRV9PQlNPTEVURV9JREUKLQlzZWxlY3QgUkVTT1VSQ0VTXzY0QklUIGlmIFBDSQotCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKLQlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KLQotY29uZmlnIE1JUFNfREIxMDAwCi0JYm9vbCAiQU1EIEFsY2hlbXkgREIxMDAwIGJvYXJkIgotCXNlbGVjdCBTT0NfQVUxMDAwCi0Jc2VsZWN0IERNQV9OT05DT0hFUkVOVAotCXNlbGVjdCBIV19IQVNfUENJCi0Jc2VsZWN0IFJFU09VUkNFU182NEJJVCBpZiBQQ0kKLQlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0KLWNvbmZpZyBNSVBTX0RCMTEwMAotCWJvb2wgIkFNRCBBbGNoZW15IERCMTEwMCBib2FyZCIKLQlzZWxlY3QgU09DX0FVMTEwMAotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0KLWNvbmZpZyBNSVBTX0RCMTUwMAotCWJvb2wgIkFNRCBBbGNoZW15IERCMTUwMCBib2FyZCIKLQlzZWxlY3QgU09DX0FVMTUwMAotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgSFdfSEFTX1BDSQotCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCi0Jc2VsZWN0IFJFU09VUkNFU182NEJJVCBpZiBQQ0kKLQlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0KLWNvbmZpZyBNSVBTX0RCMTU1MAotCWJvb2wgIkFNRCBBbGNoZW15IERCMTU1MCBib2FyZCIKLQlzZWxlY3QgU09DX0FVMTU1MAotCXNlbGVjdCBIV19IQVNfUENJCi0Jc2VsZWN0IERNQV9OT05DT0hFUkVOVAotCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCi0Jc2VsZWN0IFJFU09VUkNFU182NEJJVCBpZiBQQ0kKLQlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0KLWNvbmZpZyBNSVBTX0RCMTIwMAotCWJvb2wgIkFNRCBBbGNoZW15IERCMTIwMCBib2FyZCIKLQlzZWxlY3QgU09DX0FVMTIwMAotCXNlbGVjdCBETUFfQ09IRVJFTlQKLQlzZWxlY3QgTUlQU19ESVNBQkxFX09CU09MRVRFX0lERQotCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKLQlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KLQotY29uZmlnIE1JUFNfTUlSQUdFCi0JYm9vbCAiQU1EIEFsY2hlbXkgTWlyYWdlIGJvYXJkIgotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgU09DX0FVMTUwMAotCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKLQlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KK2NvbmZpZyBNQUNIX0FMQ0hFTVkKKwlib29sICJBbGNoZW15IHByb2Nlc3NvciBiYXNlZCBtYWNoaW5lcyIKIAogY29uZmlnIEJBU0xFUl9FWENJVEUKIAlib29sICJCYXNsZXIgZVhjaXRlIHNtYXJ0IGNhbWVyYSIKQEAgLTM2OSwyOCArMjU2LDYgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgTUlQUyBUZWNobm9sb2dpZXMgTUlQU3NpbSBzb2Z0d2FyZQogCSAgZW11bGF0b3IuCiAKLWNvbmZpZyBNT01FTkNPX0pBR1VBUl9BVFgKLQlib29sICJNb21lbnR1bSBKYWd1YXIgYm9hcmQiCi0Jc2VsZWN0IEJPT1RfRUxGMzIKLQlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCi0Jc2VsZWN0IEhXX0hBU19QQ0kKLQlzZWxlY3QgSVJRX0NQVQotCXNlbGVjdCBJUlFfQ1BVX1JNN0sKLQlzZWxlY3QgSVJRX01WNjQzNDAKLQlzZWxlY3QgTElNSVRFRF9ETUEKLQlzZWxlY3QgUENJX01BUlZFTEwKLQlzZWxlY3QgUk03MDAwX0NQVV9TQ0FDSEUKLQlzZWxlY3QgU1dBUF9JT19TUEFDRQotCXNlbGVjdCBTWVNfSEFTX0NQVV9STTkwMDAKLQlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKLQlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19LR0RCCi0JaGVscAotCSAgVGhlIEphZ3VhciBBVFggaXMgYSBNSVBTLWJhc2VkIFNpbmdsZSBCb2FyZCBDb21wdXRlciAoU0JDKSBtYWRlIGJ5Ci0JICBNb21lbnR1bSBDb21wdXRlciA8aHR0cDovL3d3dy5tb21lbmNvLmNvbS8+LgotCiBjb25maWcgTU9NRU5DT19PQ0VMT1QKIAlib29sICJNb21lbnR1bSBPY2Vsb3QgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVApAQCAtNDQ2LDI5ICszMTEsNiBAQAogCSAgVGhlIE9jZWxvdCBpcyBhIE1JUFMtYmFzZWQgU2luZ2xlIEJvYXJkIENvbXB1dGVyIChTQkMpIG1hZGUgYnkKIAkgIE1vbWVudHVtIENvbXB1dGVyIDxodHRwOi8vd3d3Lm1vbWVuY28uY29tLz4uCiAKLWNvbmZpZyBNT01FTkNPX09DRUxPVF9HCi0JYm9vbCAiTW9tZW50dW0gT2NlbG90LUcgYm9hcmQiCi0Jc2VsZWN0IERNQV9OT05DT0hFUkVOVAotCXNlbGVjdCBIV19IQVNfUENJCi0Jc2VsZWN0IElSUV9DUFUKLQlzZWxlY3QgSVJRX0NQVV9STTdLCi0Jc2VsZWN0IFBDSV9NQVJWRUxMCi0Jc2VsZWN0IFJNNzAwMF9DUFVfU0NBQ0hFCi0Jc2VsZWN0IFNXQVBfSU9fU1BBQ0UKLQlzZWxlY3QgU1lTX0hBU19DUFVfUk03MDAwCi0Jc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKLQlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTCBpZiBCUk9LRU4KLQlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KLQloZWxwCi0JICBUaGUgT2NlbG90IGlzIGEgTUlQUy1iYXNlZCBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIgKFNCQykgbWFkZSBieQotCSAgTW9tZW50dW0gQ29tcHV0ZXIgPGh0dHA6Ly93d3cubW9tZW5jby5jb20vPi4KLQotY29uZmlnIE1JUFNfWFhTMTUwMAotCWJvb2wgIk15Q2FibGUgWFhTMTUwMCBib2FyZCIKLQlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCi0Jc2VsZWN0IFNPQ19BVTE1MDAKLQlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KLQogY29uZmlnIFBOWDg1NTBfSkJTCiAJYm9vbCAiUGhpbGlwcyBQTlg4NTUwIGJhc2VkIEpCUyBib2FyZCIKIAlzZWxlY3QgUE5YODU1MApAQCAtNzc1LDcgKzYxNyw2IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KLQlzZWxlY3QgVE9TSElCQV9CT0FSRFMKIAlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAKIGNvbmZpZyBUT1NISUJBX1JCVFg0OTI3CkBAIC03ODQsNyArNjI1LDYgQEAKIAlzZWxlY3QgSEFTX1RYWDlfU0VSSUFMCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSTgyNTkKLQlzZWxlY3QgSVNBCiAJc2VsZWN0IFNXQVBfSU9fU1BBQ0UKIAlzZWxlY3QgU1lTX0hBU19DUFVfVFg0OVhYCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKQEAgLTc5Miw3ICs2MzIsNiBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfS0dEQgotCXNlbGVjdCBUT1NISUJBX0JPQVJEUwogCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAloZWxwCiAJICBUaGlzIFRvc2hpYmEgYm9hcmQgaXMgYmFzZWQgb24gdGhlIFRYNDkyNyBwcm9jZXNzb3IuIFNheSBZIGhlcmUgdG8KQEAgLTgwNiwxNCArNjQ1LDEyIEBACiAJc2VsZWN0IEhBU19UWFg5X1NFUklBTAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IEk4MjU5Ci0Jc2VsZWN0IElTQQogCXNlbGVjdCBTV0FQX0lPX1NQQUNFCiAJc2VsZWN0IFNZU19IQVNfQ1BVX1RYNDlYWAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19LR0RCCi0Jc2VsZWN0IFRPU0hJQkFfQk9BUkRTCiAJc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCWhlbHAKIAkgIFRoaXMgVG9zaGliYSBib2FyZCBpcyBiYXNlZCBvbiB0aGUgVFg0OTM4IHByb2Nlc3Nvci4gU2F5IFkgaGVyZSB0bwpAQCAtODIxLDExICs2NTgsMTEgQEAKIAogZW5kY2hvaWNlCiAKK3NvdXJjZSAiYXJjaC9taXBzL2F1MTAwMC9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvZGRiNXh4eC9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9qYXp6L0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9sYXNhdC9LY29uZmlnIgotc291cmNlICJhcmNoL21pcHMvbW9tZW50dW0vS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL3BtYy1zaWVycmEvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL3NnaS1pcDI3L0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9zaWJ5dGUvS2NvbmZpZyIKQEAgLTkyNSwxMSArNzYyLDYgQEAKIGNvbmZpZyBJODI1OQogCWJvb2wKIAotY29uZmlnIExJTUlURURfRE1BCi0JYm9vbAotCXNlbGVjdCBISUdITUVNCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19ISUdITUVNCi0KIGNvbmZpZyBNSVBTX0JPTklUTzY0CiAJYm9vbAogCkBAIC05NTgsNyArNzkwLDcgQEAKIAkgIGJ5dGUgb3JkZXIuIFRoZXNlIG1vZGVzIHJlcXVpcmUgZGlmZmVyZW50IGtlcm5lbHMgYW5kIGEgZGlmZmVyZW50CiAJICBMaW51eCBkaXN0cmlidXRpb24uICBJbiBnZW5lcmFsIHRoZXJlIGlzIG9uZSBwcmVmZXJyZWQgYnl0ZW9yZGVyIGZvciBhCiAJICBwYXJ0aWN1bGFyIHN5c3RlbSBidXQgc29tZSBzeXN0ZW1zIGFyZSBqdXN0IGFzIGNvbW1vbmx5IHVzZWQgaW4gdGhlCi0JICBvbmUgb3IgdGhlIG90aGVyIGVuZGlhbmVzcy4KKwkgIG9uZSBvciB0aGUgb3RoZXIgZW5kaWFubmVzcy4KIAogY29uZmlnIENQVV9CSUdfRU5ESUFOCiAJYm9vbCAiQmlnIGVuZGlhbiIKQEAgLTEwMTUsMzMgKzg0Nyw2IEBACiBjb25maWcgUENJX01BUlZFTEwKIAlib29sCiAKLWNvbmZpZyBTT0NfQVUxMDAwCi0JYm9vbAotCXNlbGVjdCBTT0NfQVUxWDAwCi0KLWNvbmZpZyBTT0NfQVUxMTAwCi0JYm9vbAotCXNlbGVjdCBTT0NfQVUxWDAwCi0KLWNvbmZpZyBTT0NfQVUxNTAwCi0JYm9vbAotCXNlbGVjdCBTT0NfQVUxWDAwCi0KLWNvbmZpZyBTT0NfQVUxNTUwCi0JYm9vbAotCXNlbGVjdCBTT0NfQVUxWDAwCi0KLWNvbmZpZyBTT0NfQVUxMjAwCi0JYm9vbAotCXNlbGVjdCBTT0NfQVUxWDAwCi0KLWNvbmZpZyBTT0NfQVUxWDAwCi0JYm9vbAotCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKLQlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTgotCXNlbGVjdCBTWVNfU1VQUE9SVFNfS0dEQgotCiBjb25maWcgU0VSSUFMX1JNOTAwMAogCWJvb2wKIApAQCAtMTA4Myw5ICs4ODgsOSBAQAogY2hvaWNlCiAJcHJvbXB0ICJHYWxpbGVvIENoaXAgQ2xvY2siCiAJI2RlZmF1bHQgU1lTQ0xLXzgzIGlmIE1JUFNfRVY2NDEyMAotCWRlcGVuZHMgb24gTUlQU19FVjY0MTIwIHx8IE1PTUVOQ09fT0NFTE9UIHx8IE1PTUVOQ09fT0NFTE9UX0cKKwlkZXBlbmRzIG9uIE1JUFNfRVY2NDEyMCB8fCBNT01FTkNPX09DRUxPVAogCWRlZmF1bHQgU1lTQ0xLXzgzIGlmIE1JUFNfRVY2NDEyMAotCWRlZmF1bHQgU1lTQ0xLXzEwMCBpZiBNT01FTkNPX09DRUxPVCB8fCBNT01FTkNPX09DRUxPVF9HCisJZGVmYXVsdCBTWVNDTEtfMTAwIGlmIE1PTUVOQ09fT0NFTE9UCiAKIGNvbmZpZyBTWVNDTEtfNzUKIAlib29sICI3NSIgaWYgTUlQU19FVjY0MTIwCkBAIC0xMDk0LDcgKzg5OSw3IEBACiAJYm9vbCAiODMuMyIgaWYgTUlQU19FVjY0MTIwCiAKIGNvbmZpZyBTWVNDTEtfMTAwCi0JYm9vbCAiMTAwIiBpZiBNSVBTX0VWNjQxMjAgfHwgTU9NRU5DT19PQ0VMT1QgfHwgTU9NRU5DT19PQ0VMT1RfRworCWJvb2wgIjEwMCIgaWYgTUlQU19FVjY0MTIwIHx8IE1PTUVOQ09fT0NFTE9UCiAKIGVuZGNob2ljZQogCkBAIC0xMTMzLDkgKzkzOCw2IEBACiBjb25maWcgQk9PVF9FTEY2NAogCWJvb2wKIAotY29uZmlnIFRPU0hJQkFfQk9BUkRTCi0JYm9vbAotCiBtZW51ICJDUFUgc2VsZWN0aW9uIgogCiBjaG9pY2UKQEAgLTE1NTksNiArMTM2MSw3IEBACiAJYm9vbCAiVXNlIDEgVEMgb24gZWFjaCBhdmFpbGFibGUgVlBFIGZvciBTTVAiCiAJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfTVVMVElUSFJFQURJTkcKIAlzZWxlY3QgQ1BVX01JUFNSMl9JUlFfVkkKKwlzZWxlY3QgQ1BVX01JUFNSMl9JUlFfRUkKIAlzZWxlY3QgQ1BVX01JUFNSMl9TUlMKIAlzZWxlY3QgTUlQU19NVAogCXNlbGVjdCBOUl9DUFVTX0RFRkFVTFRfMgpAQCAtMTU3NCw2ICsxMzc3LDcgQEAKIAkjZGVwZW5kcyBvbiBDUFVfTUlQUzY0X1IyCQkjIG9uY2UgdGhlcmUgaXMgaGFyZHdhcmUgLi4uCiAJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfTVVMVElUSFJFQURJTkcKIAlzZWxlY3QgQ1BVX01JUFNSMl9JUlFfVkkKKwlzZWxlY3QgQ1BVX01JUFNSMl9JUlFfRUkKIAlzZWxlY3QgQ1BVX01JUFNSMl9TUlMKIAlzZWxlY3QgTUlQU19NVAogCXNlbGVjdCBOUl9DUFVTX0RFRkFVTFRfOApAQCAtMTU4Niw2ICsxMzkwLDggQEAKIGNvbmZpZyBNSVBTX1ZQRV9MT0FERVIKIAlib29sICJWUEUgbG9hZGVyIHN1cHBvcnQuIgogCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX01VTFRJVEhSRUFESU5HCisJc2VsZWN0IENQVV9NSVBTUjJfSVJRX1ZJCisJc2VsZWN0IENQVV9NSVBTUjJfSVJRX0VJCiAJc2VsZWN0IE1JUFNfTVQKIAloZWxwCiAJICBJbmNsdWRlcyBhIGxvYWRlciBmb3IgbG9hZGluZyBhbiBlbGYgcmVsb2NhdGFibGUgb2JqZWN0CkBAIC0xNzUyLDcgKzE1NTgsNyBAQAogCWJvb2wKIAlkZWZhdWx0IHkgaWYgU0dJX0lQMjcKIAloZWxwCi0JICBTYXkgWSB0byB1cHBvcnQgZWZmaWNpZW50IGhhbmRsaW5nIG9mIGRpc2NvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5LAorCSAgU2F5IFkgdG8gc3VwcG9ydCBlZmZpY2llbnQgaGFuZGxpbmcgb2YgZGlzY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnksCiAJICBmb3IgYXJjaGl0ZWN0dXJlcyB3aGljaCBhcmUgZWl0aGVyIE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpCiAJICBvciBoYXZlIGh1Z2UgaG9sZXMgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgZm9yIG90aGVyIHJlYXNvbnMuCiAJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92bS9udW1hPiBmb3IgbW9yZS4KQEAgLTE5NDAsNyArMTc0Niw3IEBACiAJaGVscAogCSAga2V4ZWMgaXMgYSBzeXN0ZW0gY2FsbCB0aGF0IGltcGxlbWVudHMgdGhlIGFiaWxpdHkgdG8gc2h1dGRvd24geW91cgogCSAgY3VycmVudCBrZXJuZWwsIGFuZCB0byBzdGFydCBhbm90aGVyIGtlcm5lbC4gIEl0IGlzIGxpa2UgYSByZWJvb3QKLQkgIGJ1dCBpdCBpcyBpbmRlcGVkZW50IG9mIHRoZSBzeXN0ZW0gZmlybXdhcmUuICAgQW5kIGxpa2UgYSByZWJvb3QKKwkgIGJ1dCBpdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgc3lzdGVtIGZpcm13YXJlLiAgIEFuZCBsaWtlIGEgcmVib290CiAJICB5b3UgY2FuIHN0YXJ0IGFueSBrZXJuZWwgd2l0aCBpdCwgbm90IGp1c3QgTGludXguCiAKIAkgIFRoZSBuYW1lIGNvbWVzIGZyb20gdGhlIHNpbWlsaWFyaXR5IHRvIHRoZSBleGVjIHN5c3RlbSBjYWxsLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IGYyZjc0MmQuLmY0NTAwNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTkyLDcgKzkyLDcgQEAKICMgd2hlbiBmZWQgdGhlIHRvb2xjaGFpbiBkZWZhdWx0IQogIwogIyBDZXJ0YWluIGdjYyB2ZXJzaW9ucyB1cHRvIGdjYyA0LjEuMSAocHJvYmFibHkgNC4yLXN1YnZlcnNpb24gYXMgb2YKLSMgMjAwNi0xMC0xMCBkb24ndCBwcm9wZXJseSBjaGFuZ2UgdGhlIHRoZSBwcmVkZWZpbmVkIHN5bWJvbHMgaWYgLUVCIC8gLUVMCisjIDIwMDYtMTAtMTAgZG9uJ3QgcHJvcGVybHkgY2hhbmdlIHRoZSBwcmVkZWZpbmVkIHN5bWJvbHMgaWYgLUVCIC8gLUVMCiAjIGFyZSB1c2VkLCBzbyB3ZSBrbHVkZ2UgdGhhdCBoZXJlLiAgQSBidWcgaGFzIGJlZW4gZmlsZWQgYXQKICMgaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0yOTQxMy4KICMKQEAgLTM0MywxNSArMzQzLDYgQEAKIGxvYWQtJChDT05GSUdfTU9NRU5DT19PQ0VMT1QpCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAogCiAjCi0jIE1vbWVudHVtIE9jZWxvdC1HIGJvYXJkCi0jCi0jIFRoZSBPY2Vsb3QtRyBzZXR1cC5vIG11c3QgYmUgbGlua2VkIGVhcmx5IC0gaXQgZG9lcyB0aGUgaW9yZW1hcCgpIGZvciB0aGUKLSMgbWlwc19pb19wb3J0X2Jhc2UuCi0jCi1jb3JlLSQoQ09ORklHX01PTUVOQ09fT0NFTE9UX0cpCSs9IGFyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy8KLWxvYWQtJChDT05GSUdfTU9NRU5DT19PQ0VMT1RfRykJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0KLSMKICMgTW9tZW50dW0gT2NlbG90LUMgYW5kIC1DUyBib2FyZHMKICMKICMgVGhlIE9jZWxvdC1DW1NdIHNldHVwLm8gbXVzdCBiZSBsaW5rZWQgZWFybHkgLSBpdCBkb2VzIHRoZSBpb3JlbWFwKCkgZm9yIHRoZQpAQCAtMzg4LDE3ICszNzksNiBAQAogbG9hZC0kKENPTkZJR19CQVNMRVJfRVhDSVRFKQkrPSAweDgwMTAwMDAwCiAKICMKLSMgTW9tZW50dW0gSmFndWFyIEFUWAotIwotY29yZS0kKENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFgpCSs9IGFyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4LwotY2ZsYWdzLSQoQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCkJKz0gLUlpbmNsdWRlL2FzbS1taXBzL21hY2gtamEKLSNpZmRlZiBDT05GSUdfSkFHVUFSX0RNQUxPVwotI2xvYWQtJChDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYKQkrPSAweGZmZmZmZmZmODgwMDAwMDAKLSNlbHNlCi1sb2FkLSQoQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi0jZW5kaWYKLQotIwogIyBORUMgRERCCiAjCiBjb3JlLSQoQ09ORklHX0REQjVYWFhfQ09NTU9OKQkrPSBhcmNoL21pcHMvZGRiNXh4eC9jb21tb24vCkBAIC03MjksMyArNzA5LDI1IEBACiBDTEVBTl9GSUxFUyArPSB2bWxpbnV4LjMyIFwKIAkgICAgICAgdm1saW51eC42NCBcCiAJICAgICAgIHZtbGludXguZWNvZmYKKworcXVpZXRfY21kX3N5c2NhbGxzX24zMiA9IENBTEwtTjMyICQ8CisgICAgICBjbWRfc3lzY2FsbHNfbjMyID0gJChDT05GSUdfU0hFTEwpICQ8ICQoQ0MpICQoY19mbGFncykgLW1hYmk9bjMyCisKK3F1aWV0X2NtZF9zeXNjYWxsc19vMzIgPSBDQUxMLU8zMiAkPAorICAgICAgY21kX3N5c2NhbGxzX28zMiA9ICQoQ09ORklHX1NIRUxMKSAkPCAkKENDKSAkKGNfZmxhZ3MpIC1tYWJpPTMyCisKK1BIT05ZICs9IG1pc3Npbmctc3lzY2FsbHMtbjMyIG1pc3Npbmctc3lzY2FsbHMtbzMyCisKK21pc3Npbmctc3lzY2FsbHMtbjMyOiBzY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2ggRk9SQ0UKKwkkKGNhbGwgY21kLHN5c2NhbGxzX24zMikKKworbWlzc2luZy1zeXNjYWxscy1vMzI6IHNjcmlwdHMvY2hlY2tzeXNjYWxscy5zaCBGT1JDRQorCSQoY2FsbCBjbWQsc3lzY2FsbHNfbzMyKQorCithcmNocHJlcGFyZToKK2lmZGVmIENPTkZJR19NSVBTMzJfTjMyCisJJChRKSQoTUFLRSkgJChidWlsZCk9YXJjaC9taXBzIG1pc3Npbmctc3lzY2FsbHMtbjMyCitlbmRpZgoraWZkZWYgQ09ORklHX01JUFMzMl9PMzIKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT1hcmNoL21pcHMgbWlzc2luZy1zeXNjYWxscy1vMzIKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL0tjb25maWcgYi9hcmNoL21pcHMvYXUxMDAwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlYTg4MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvS2NvbmZpZwpAQCAtMCwwICsxLDE0MiBAQAorY2hvaWNlCisJcHJvbXB0ICJNYWNoaW5lIHR5cGUiCisJZGVwZW5kcyBvbiBNQUNIX0FMQ0hFTVkKKwlkZWZhdWx0IE1JUFNfREIxMDAwCisKK2NvbmZpZyBNSVBTX01UWDEKKwlib29sICI0RyBTeXN0ZW1zIE1UWC0xIGJvYXJkIgorCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKKwlzZWxlY3QgSFdfSEFTX1BDSQorCXNlbGVjdCBSRVNPVVJDRVNfNjRCSVQgaWYgUENJCisJc2VsZWN0IFNPQ19BVTE1MDAKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKworY29uZmlnIE1JUFNfQk9TUE9SVVMKKwlib29sICJBbGNoZW15IEJvc3BvcnVzIGJvYXJkIgorCXNlbGVjdCBTT0NfQVUxNTAwCisJc2VsZWN0IERNQV9OT05DT0hFUkVOVAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCitjb25maWcgTUlQU19EQjEwMDAKKwlib29sICJBbGNoZW15IERCMTAwMCBib2FyZCIKKwlzZWxlY3QgU09DX0FVMTAwMAorCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKKwlzZWxlY3QgSFdfSEFTX1BDSQorCXNlbGVjdCBSRVNPVVJDRVNfNjRCSVQgaWYgUENJCisJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisKK2NvbmZpZyBNSVBTX0RCMTEwMAorCWJvb2wgIkFsY2hlbXkgREIxMTAwIGJvYXJkIgorCXNlbGVjdCBTT0NfQVUxMTAwCisJc2VsZWN0IERNQV9OT05DT0hFUkVOVAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCitjb25maWcgTUlQU19EQjEyMDAKKwlib29sICJBbGNoZW15IERCMTIwMCBib2FyZCIKKwlzZWxlY3QgU09DX0FVMTIwMAorCXNlbGVjdCBETUFfQ09IRVJFTlQKKwlzZWxlY3QgTUlQU19ESVNBQkxFX09CU09MRVRFX0lERQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCitjb25maWcgTUlQU19EQjE1MDAKKwlib29sICJBbGNoZW15IERCMTUwMCBib2FyZCIKKwlzZWxlY3QgU09DX0FVMTUwMAorCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKKwlzZWxlY3QgSFdfSEFTX1BDSQorCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCisJc2VsZWN0IFJFU09VUkNFU182NEJJVCBpZiBQQ0kKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKworY29uZmlnIE1JUFNfREIxNTUwCisJYm9vbCAiQWxjaGVteSBEQjE1NTAgYm9hcmQiCisJc2VsZWN0IFNPQ19BVTE1NTAKKwlzZWxlY3QgSFdfSEFTX1BDSQorCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKKwlzZWxlY3QgTUlQU19ESVNBQkxFX09CU09MRVRFX0lERQorCXNlbGVjdCBSRVNPVVJDRVNfNjRCSVQgaWYgUENJCisJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisKK2NvbmZpZyBNSVBTX01JUkFHRQorCWJvb2wgIkFsY2hlbXkgTWlyYWdlIGJvYXJkIgorCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKKwlzZWxlY3QgU09DX0FVMTUwMAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCitjb25maWcgTUlQU19QQjEwMDAKKwlib29sICJBbGNoZW15IFBCMTAwMCBib2FyZCIKKwlzZWxlY3QgU09DX0FVMTAwMAorCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKKwlzZWxlY3QgSFdfSEFTX1BDSQorCXNlbGVjdCBSRVNPVVJDRVNfNjRCSVQgaWYgUENJCisJc2VsZWN0IFNXQVBfSU9fU1BBQ0UKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKworY29uZmlnIE1JUFNfUEIxMTAwCisJYm9vbCAiQWxjaGVteSBQQjExMDAgYm9hcmQiCisJc2VsZWN0IFNPQ19BVTExMDAKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgUkVTT1VSQ0VTXzY0QklUIGlmIFBDSQorCXNlbGVjdCBTV0FQX0lPX1NQQUNFCisJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisKK2NvbmZpZyBNSVBTX1BCMTIwMAorCWJvb2wgIkFsY2hlbXkgUEIxMjAwIGJvYXJkIgorCXNlbGVjdCBTT0NfQVUxMjAwCisJc2VsZWN0IERNQV9OT05DT0hFUkVOVAorCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCisJc2VsZWN0IFJFU09VUkNFU182NEJJVCBpZiBQQ0kKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKworY29uZmlnIE1JUFNfUEIxNTAwCisJYm9vbCAiQWxjaGVteSBQQjE1MDAgYm9hcmQiCisJc2VsZWN0IFNPQ19BVTE1MDAKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgUkVTT1VSQ0VTXzY0QklUIGlmIFBDSQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCitjb25maWcgTUlQU19QQjE1NTAKKwlib29sICJBbGNoZW15IFBCMTU1MCBib2FyZCIKKwlzZWxlY3QgU09DX0FVMTU1MAorCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKKwlzZWxlY3QgSFdfSEFTX1BDSQorCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCisJc2VsZWN0IFJFU09VUkNFU182NEJJVCBpZiBQQ0kKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKworY29uZmlnIE1JUFNfWFhTMTUwMAorCWJvb2wgIk15Q2FibGUgWFhTMTUwMCBib2FyZCIKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IFNPQ19BVTE1MDAKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKworZW5kY2hvaWNlCisKK2NvbmZpZyBTT0NfQVUxMDAwCisJYm9vbAorCXNlbGVjdCBTT0NfQVUxWDAwCisKK2NvbmZpZyBTT0NfQVUxMTAwCisJYm9vbAorCXNlbGVjdCBTT0NfQVUxWDAwCisKK2NvbmZpZyBTT0NfQVUxNTAwCisJYm9vbAorCXNlbGVjdCBTT0NfQVUxWDAwCisKK2NvbmZpZyBTT0NfQVUxNTUwCisJYm9vbAorCXNlbGVjdCBTT0NfQVUxWDAwCisKK2NvbmZpZyBTT0NfQVUxMjAwCisJYm9vbAorCXNlbGVjdCBTT0NfQVUxWDAwCisKK2NvbmZpZyBTT0NfQVUxWDAwCisJYm9vbAorCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfS0dEQgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2RldmljZS5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2RldmljZS5jCmluZGV4IGNjMWNlNzcuLmUwMGJjMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9kZXZpY2UuYworKysgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZGV2aWNlLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlCi0JZXhjaXRlX2N0cl9yZXNvdXJjZSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IHsKKwlleGNpdGVfY3RyX3Jlc291cmNlIF9fbWF5YmVfdW51c2VkID0gewogCQkubmFtZQkJPSAiR1BJIGNvdW50ZXJzIiwKIAkJLnN0YXJ0CQk9IDAsCiAJCS5lbmQJCT0gNSwKQEAgLTc3LDcgKzc3LDcgQEAKIAkJLnNpYmxpbmcJPSBOVUxMLAogCQkuY2hpbGQJCT0gTlVMTAogCX0sCi0JZXhjaXRlX2dwaXNsaWNlX3Jlc291cmNlIF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0geworCWV4Y2l0ZV9ncGlzbGljZV9yZXNvdXJjZSBfX21heWJlX3VudXNlZCA9IHsKIAkJLm5hbWUJCT0gIkdQSSBzbGljZXMiLAogCQkuc3RhcnQJCT0gMCwKIAkJLmVuZAkJPSAxLApAQCAtODYsNyArODYsNyBAQAogCQkuc2libGluZwk9IE5VTEwsCiAJCS5jaGlsZAkJPSBOVUxMCiAJfSwKLQlleGNpdGVfbWRpb19jaGFubmVsX3Jlc291cmNlIF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0geworCWV4Y2l0ZV9tZGlvX2NoYW5uZWxfcmVzb3VyY2UgX19tYXliZV91bnVzZWQgPSB7CiAJCS5uYW1lCQk9ICJNRElPIGNoYW5uZWxzIiwKIAkJLnN0YXJ0CQk9IDAsCiAJCS5lbmQJCT0gMSwKQEAgLTk1LDcgKzk1LDcgQEAKIAkJLnNpYmxpbmcJPSBOVUxMLAogCQkuY2hpbGQJCT0gTlVMTAogCX0sCi0JZXhjaXRlX2ZpZm9tZW1fcmVzb3VyY2UgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSB7CisJZXhjaXRlX2ZpZm9tZW1fcmVzb3VyY2UgX19tYXliZV91bnVzZWQgPSB7CiAJCS5uYW1lCQk9ICJGSUZPIG1lbW9yeSIsCiAJCS5zdGFydAkJPSAwLAogCQkuZW5kCQk9IDc2NywKQEAgLTEwNCw3ICsxMDQsNyBAQAogCQkuc2libGluZwk9IE5VTEwsCiAJCS5jaGlsZAkJPSBOVUxMCiAJfSwKLQlleGNpdGVfc2NyYW1fcmVzb3VyY2UgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSB7CisJZXhjaXRlX3NjcmFtX3Jlc291cmNlIF9fbWF5YmVfdW51c2VkID0gewogCQkubmFtZQkJPSAiU2NyYXRjaCBSQU0iLAogCQkuc3RhcnQJCT0gRVhDSVRFX1BIWVNfU0NSQU0sCiAJCS5lbmQJCT0gRVhDSVRFX1BIWVNfU0NSQU0gKyBFWENJVEVfU0laRV9TQ1JBTSAtIDEsCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkJLnNpYmxpbmcJPSBOVUxMLAogCQkuY2hpbGQJCT0gTlVMTAogCX0sCi0JZXhjaXRlX2ZwZ2FfcmVzb3VyY2UgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSB7CisJZXhjaXRlX2ZwZ2FfcmVzb3VyY2UgX19tYXliZV91bnVzZWQgPSB7CiAJCS5uYW1lCQk9ICJTeXN0ZW0gRlBHQSIsCiAJCS5zdGFydAkJPSBFWENJVEVfUEhZU19GUEdBLAogCQkuZW5kCQk9IEVYQ0lURV9QSFlTX0ZQR0EgKyBFWENJVEVfU0laRV9GUEdBIC0gMSwKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQkuc2libGluZwk9IE5VTEwsCiAJCS5jaGlsZAkJPSBOVUxMCiAJfSwKLQlleGNpdGVfbmFuZF9yZXNvdXJjZSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IHsKKwlleGNpdGVfbmFuZF9yZXNvdXJjZSBfX21heWJlX3VudXNlZCA9IHsKIAkJLm5hbWUJCT0gIk5BTkQgZmxhc2ggY29udHJvbCIsCiAJCS5zdGFydAkJPSBFWENJVEVfUEhZU19OQU5ELAogCQkuZW5kCQk9IEVYQ0lURV9QSFlTX05BTkQgKyBFWENJVEVfU0laRV9OQU5EIC0gMSwKQEAgLTEzMSw3ICsxMzEsNyBAQAogCQkuc2libGluZwk9IE5VTEwsCiAJCS5jaGlsZAkJPSBOVUxMCiAJfSwKLQlleGNpdGVfdGl0YW5fcmVzb3VyY2UgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSB7CisJZXhjaXRlX3RpdGFuX3Jlc291cmNlIF9fbWF5YmVfdW51c2VkID0gewogCQkubmFtZQkJPSAiVElUQU4gcmVnaXN0ZXJzIiwKIAkJLnN0YXJ0CQk9IEVYQ0lURV9QSFlTX1RJVEFOLAogCQkuZW5kCQk9IEVYQ0lURV9QSFlTX1RJVEFOICsgRVhDSVRFX1NJWkVfVElUQU4gLSAxLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9jb2JhbHQvTWFrZWZpbGUKaW5kZXggOTU2NWIyMS4uYzI5MmY4MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvYmFsdC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvY29iYWx0L01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIENvYmFsdCBtaWNybyBzeXN0ZW1zIGZhbWlseSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCiAjCiAKLW9iai15CSA6PSBpcnEubyByZXNldC5vIHNldHVwLm8gYnV0dG9ucy5vCitvYmoteSA6PSBidXR0b25zLm8gaXJxLm8gcmVzZXQubyBydGMubyBzZXJpYWwubyBzZXR1cC5vCiAKIG9iai0kKENPTkZJR19QQ0kpCQkrPSBwY2kubwogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gY29uc29sZS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L3J0Yy5jIGIvYXJjaC9taXBzL2NvYmFsdC9ydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODRkYWVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9ydGMuYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogIFJlZ2lzdHJhdGlvbiBvZiBDb2JhbHQgUlRDIHBsYXRmb3JtIGRldmljZS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBZb2ljaGkgWXVhc2EgPHlvaWNoaV95dWFzYUB0cmlwZWFrcy5jby5qcD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29iYWx0X3J0Y19yZXNvdXJjZVtdIF9faW5pdGRhdGEgPSB7CisJeworCQkuc3RhcnQJPSAweDcwLAorCQkuZW5kCT0gMHg3NywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwl9LAorCXsKKwkJLnN0YXJ0CT0gOCwKKwkJLmVuZAk9IDgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgX19pbml0IGludCBjb2JhbHRfcnRjX2FkZCh2b2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IHJldHZhbDsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInJ0Y19jbW9zIiwgLTEpOworCWlmICghcGRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCBjb2JhbHRfcnRjX3Jlc291cmNlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUoY29iYWx0X3J0Y19yZXNvdXJjZSkpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX2ZyZWVfZGV2aWNlOworCisJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9mcmVlX2RldmljZTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9kZXZpY2U6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKworCXJldHVybiByZXR2YWw7Cit9CitkZXZpY2VfaW5pdGNhbGwoY29iYWx0X3J0Y19hZGQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9zZXJpYWwuYyBiL2FyY2gvbWlwcy9jb2JhbHQvc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3MTE2NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9jb2JhbHQvc2VyaWFsLmMKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqICBSZWdpc3RyYXRpb24gb2YgQ29iYWx0IFVBUlQgcGxhdGZvcm0gZGV2aWNlLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIFlvaWNoaSBZdWFzYSA8eW9pY2hpX3l1YXNhQHRyaXBlYWtzLmNvLmpwPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorCisjaW5jbHVkZSA8Y29iYWx0Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29iYWx0X3VhcnRfcmVzb3VyY2VbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnN0YXJ0CT0gMHgxYzgwMDAwMCwKKwkJLmVuZAk9IDB4MWM4MDAwMDcsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBDT0JBTFRfU0VSSUFMX0lSUSwKKwkJLmVuZAk9IENPQkFMVF9TRVJJQUxfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBjb2JhbHRfc2VyaWFsODI1MF9wb3J0W10gPSB7CisJeworCQkuaXJxCQk9IENPQkFMVF9TRVJJQUxfSVJRLAorCQkudWFydGNsawk9IDE4NDMyMDAwLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkuZmxhZ3MJCT0gVVBGX0lPUkVNQVAgfCBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCisJCS5tYXBiYXNlCT0gMHgxYzgwMDAwMCwKKwl9LAorCXt9LAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgY29iYWx0X3VhcnRfYWRkKHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlpbnQgcmV0dmFsOworCisJLyoKKwkgKiBDb2JhbHQgUXViZTEgYW5kIFJBUTEgaGF2ZSBubyBVQVJULgorCSAqLworCWlmIChjb2JhbHRfYm9hcmRfaWQgPD0gQ09CQUxUX0JSRF9JRF9SQVExKQorCQlyZXR1cm4gMDsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNlcmlhbDgyNTAiLCAtMSk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBkZXYtPmlkID0gUExBVDgyNTBfREVWX1BMQVRGT1JNOworCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gY29iYWx0X3NlcmlhbDgyNTBfcG9ydDsKKworCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIGNvYmFsdF91YXJ0X3Jlc291cmNlLCBBUlJBWV9TSVpFKGNvYmFsdF91YXJ0X3Jlc291cmNlKSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfZnJlZV9kZXZpY2U7CisKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX2ZyZWVfZGV2aWNlOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2RldmljZToKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCisJcmV0dXJuIHJldHZhbDsKK30KK2RldmljZV9pbml0Y2FsbChjb2JhbHRfdWFydF9hZGQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jIGIvYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jCmluZGV4IGQwZGQ4MTcuLjdhYmU0NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYworKysgYi9hcmNoL21pcHMvY29iYWx0L3NldHVwLmMKQEAgLTEwLDExICsxMCw4IEBACiAgKgogICovCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KIAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CkBAIC0yNyw5ICsyNCw2IEBACiBleHRlcm4gdm9pZCBjb2JhbHRfbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpOwogZXh0ZXJuIHZvaWQgY29iYWx0X21hY2hpbmVfaGFsdCh2b2lkKTsKIGV4dGVybiB2b2lkIGNvYmFsdF9tYWNoaW5lX3Bvd2VyX29mZih2b2lkKTsKLWV4dGVybiB2b2lkIGNvYmFsdF9lYXJseV9jb25zb2xlKHZvaWQpOwotCi1pbnQgY29iYWx0X2JvYXJkX2lkOwogCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKQEAgLTk1LDggKzg5LDYgQEAKIAogdm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKLQlzdGF0aWMgc3RydWN0IHVhcnRfcG9ydCB1YXJ0OwotCXVuc2lnbmVkIGludCBkZXZmbiA9IFBDSV9ERVZGTihDT0JBTFRfUENJQ09ORl9WSUEsIDApOwogCWludCBpOwogCiAJX21hY2hpbmVfcmVzdGFydCA9IGNvYmFsdF9tYWNoaW5lX3Jlc3RhcnQ7CkBAIC0xMTEsMjkgKzEwMyw2IEBACiAJLyogVGhlc2UgcmVzb3VyY2VzIGhhdmUgYmVlbiByZXNlcnZlZCBieSBWSUEgU3VwZXJJL08gY2hpcC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb2JhbHRfcmVzZXJ2ZWRfcmVzb3VyY2VzKTsgaSsrKQogCQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsIGNvYmFsdF9yZXNlcnZlZF9yZXNvdXJjZXMgKyBpKTsKLQotICAgICAgICAvKiBSZWFkIHRoZSBjb2JhbHQgaWQgcmVnaXN0ZXIgb3V0IG9mIHRoZSBQQ0kgY29uZmlnIHNwYWNlICovCi0gICAgICAgIFBDSV9DRkdfU0VUKGRldmZuLCAoVklBX0NPQkFMVF9CUkRfSURfUkVHICYgfjB4MykpOwotICAgICAgICBjb2JhbHRfYm9hcmRfaWQgPSBHVF9SRUFEKEdUX1BDSTBfQ0ZHREFUQV9PRlMpOwotICAgICAgICBjb2JhbHRfYm9hcmRfaWQgPj49ICgoVklBX0NPQkFMVF9CUkRfSURfUkVHICYgMykgKiA4KTsKLSAgICAgICAgY29iYWx0X2JvYXJkX2lkID0gVklBX0NPQkFMVF9CUkRfUkVHX3RvX0lEKGNvYmFsdF9ib2FyZF9pZCk7Ci0KLQlwcmludGsoIkNvYmFsdCBib2FyZCBJRDogJWRcbiIsIGNvYmFsdF9ib2FyZF9pZCk7Ci0KLQlpZiAoY29iYWx0X2JvYXJkX2lkID4gQ09CQUxUX0JSRF9JRF9SQVExKSB7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCi0JCXVhcnQubGluZQk9IDA7Ci0JCXVhcnQudHlwZQk9IFBPUlRfVU5LTk9XTjsKLQkJdWFydC51YXJ0Y2xrCT0gMTg0MzIwMDA7Ci0JCXVhcnQuaXJxCT0gQ09CQUxUX1NFUklBTF9JUlE7Ci0JCXVhcnQuZmxhZ3MJPSBVUEZfSU9SRU1BUCB8IFVQRl9CT09UX0FVVE9DT05GIHwKLQkJCQkgIFVQRl9TS0lQX1RFU1Q7Ci0JCXVhcnQuaW90eXBlCT0gVVBJT19NRU07Ci0JCXVhcnQubWFwYmFzZQk9IDB4MWM4MDAwMDA7Ci0KLQkJZWFybHlfc2VyaWFsX3NldHVwKCZ1YXJ0KTsKLSNlbmRpZgotCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCmluZGV4IGJhNTkzYjUuLjYzMWIyMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjI0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMS1yYzcKKyMgV2VkIEFwciAxOCAxNDoyNTo0NSAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTYyLDcgKzYyLDYgQEAKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAotQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKQEAgLTc0LDEyICs3MywxNCBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19JODI1OT15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19JUlFfQ1BVPXkKLUNPTkZJR19NSVBTX0dUNjQxMTE9eQorQ09ORklHX1BDSV9HVDY0WFhYX1BDSTA9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCkBAIC0xNzksNiArMTgwLDcgQEAKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CkBAIC00NzcsNyArNDc5LDYgQEAKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPXkKIENPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldApAQCAtNTE4LDcgKzUxOSw3IEBACiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CiAjIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERURNQV9PTkxZRElTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CkBAIC01NDYsNyArNTQ3LDYgQEAKICMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKICMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKQEAgLTc3OSw3ICs3NzksOCBAQAogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLUNPTkZJR19SVEM9eQorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogQ09ORklHX0NPQkFMVF9MQ0Q9eQogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CkBAIC04MTUsNiArODE2LDExIEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODI3LDcgKzgzMyw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIAogIwpAQCAtODM1LDcgKzg0MSw2IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC04OTQsNyArODk5LDI5IEBACiAjCiAjIFJlYWwgVGltZSBDbG9jawogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorCisjCisjIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9DTU9TPXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwogIyBETUEgRW5naW5lIHN1cHBvcnQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCmluZGV4IDBkYjZhOGIuLjEwZjZhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwpAQCAtOSw2ICs5LDcgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKIENPTkZJR19aT05FX0RNQT15CitDT05GSUdfTUFDSF9BTENIRU1ZPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCmluZGV4IDE2MmFkZDkuLjRiMDg2MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwpAQCAtOSw2ICs5LDcgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKIENPTkZJR19aT05FX0RNQT15CitDT05GSUdfTUFDSF9BTENIRU1ZPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCmluZGV4IDgyODAxZWMuLjgyMDY1OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwpAQCAtOSw2ICs5LDcgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKIENPTkZJR19aT05FX0RNQT15CitDT05GSUdfTUFDSF9BTENIRU1ZPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCmluZGV4IDU0NWYyMzAuLjQwNTBiOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwpAQCAtOSw2ICs5LDcgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKIENPTkZJR19aT05FX0RNQT15CitDT05GSUdfTUFDSF9BTENIRU1ZPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCmluZGV4IDViZDNiNDMuLjdiMzUxOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZwpAQCAtOSw2ICs5LDcgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKIENPTkZJR19aT05FX0RNQT15CitDT05GSUdfTUFDSF9BTENIRU1ZPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvamFndWFyLWF0eF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MzEwNGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvamFndWFyLWF0eF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw4OTcgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MzMgMjAwNwotIwotQ09ORklHX01JUFM9eQotCi0jCi0jIE1hY2hpbmUgc2VsZWN0aW9uCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19TRUFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWD15Ci0jIENPTkZJR19NT01FTkNPX09DRUxPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX09DRUxPVF8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fT0NFTE9UX0MgaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfUUVNVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUFRTV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0Ci1DT05GSUdfSkFHVUFSX0RNQUxPVz15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0Ci1DT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKLUNPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKLUNPTkZJR19MSU1JVEVEX0RNQT15Ci1DT05GSUdfQ1BVX0JJR19FTkRJQU49eQotIyBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAotQ09ORklHX1NZU19TVVBQT1JUU19CSUdfRU5ESUFOPXkKLUNPTkZJR19JUlFfQ1BVPXkKLUNPTkZJR19JUlFfQ1BVX1JNN0s9eQotQ09ORklHX0lSUV9NVjY0MzQwPXkKLUNPTkZJR19QQ0lfTUFSVkVMTD15Ci1DT05GSUdfU1dBUF9JT19TUEFDRT15Ci1DT05GSUdfQk9PVF9FTEYzMj15Ci1DT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01Ci0KLSMKLSMgQ1BVIHNlbGVjdGlvbgotIwotIyBDT05GSUdfQ1BVX01JUFMzMl9SMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAotQ09ORklHX0NQVV9STTkwMDA9eQotIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX0hBU19DUFVfUk05MDAwPXkKLUNPTkZJR19XRUFLX09SREVSSU5HPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLQotIwotIyBLZXJuZWwgdHlwZQotIwotQ09ORklHXzMyQklUPXkKLSMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX1NJWkVfNEtCPXkKLSMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAotQ09ORklHX0JPQVJEX1NDQUNIRT15Ci1DT05GSUdfUk03MDAwX0NQVV9TQ0FDSEU9eQotQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQotQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfTExTQz15Ci1DT05GSUdfQ1BVX0hBU19TWU5DPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfSElHSE1FTT15Ci1DT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQotQ09ORklHX1NZU19TVVBQT1JUU19ISUdITUVNPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKLSMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAotQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotIyBDT05GSUdfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKLSMKLUNPTkZJR19IV19IQVNfUENJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCi0KLSMKLSMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLUNPTkZJR19UUkFEX1NJR05BTFM9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfSVBWNj1tCi1DT05GSUdfSVBWNl9QUklWQUNZPXkKLUNPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKLUNPTkZJR19JTkVUNl9BSD1tCi1DT05GSUdfSU5FVDZfRVNQPW0KLUNPTkZJR19JTkVUNl9JUENPTVA9bQotQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JUFY2X1NJVD1tCi1DT05GSUdfSVBWNl9UVU5ORUw9bQotQ09ORklHX05FVFdPUktfU0VDTUFSSz15Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBNaXNjIGRldmljZXMKLSMKLUNPTkZJR19TR0lfSU9DND1tCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfUkFJRF9BVFRSUz1tCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCi0jIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfUEhZTElCPW0KLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBSTzEwMD15Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVY2NDNYWF9FVEg9eQotQ09ORklHX1FMQTNYWFg9bQotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKLSMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlVTRV9GUz1tCi1DT05GSUdfR0VORVJJQ19BQ0w9eQotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCi1DT05GSUdfU1lTX1NVUFBPUlRTX0tHREI9eQotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLUNPTkZJR19LRVlTPXkKLUNPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT1tCi1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPW0KLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMTY9bQotQ09ORklHX0NSQzMyPW0KLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKaW5kZXggMDY4ZTQ4ZS4uMWIzNjRjZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKQEAgLTgwLDcgKzgwLDYgQEAKIENPTkZJR19NSVBTX1RYMzkyNz15CiBDT05GSUdfU1dBUF9JT19TUEFDRT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01Ci1DT05GSUdfVE9TSElCQV9CT0FSRFM9eQogCiAjCiAjIENQVSBzZWxlY3Rpb24KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCmluZGV4IDY5Njc4ZDkuLjM3ZDY5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwpAQCAtOSw2ICs5LDcgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKIENPTkZJR19aT05FX0RNQT15CitDT05GSUdfTUFDSF9BTENIRU1ZPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCmluZGV4IDA3MDY3MjcuLmIxMWYwZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwpAQCAtOSw2ICs5LDcgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKIENPTkZJR19aT05FX0RNQT15CitDT05GSUdfTUFDSF9BTENIRU1ZPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCmluZGV4IDM1NGU0OWIuLjI5MjdmMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZwpAQCAtOSw2ICs5LDcgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKIENPTkZJR19aT05FX0RNQT15CitDT05GSUdfTUFDSF9BTENIRU1ZPXkKICMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9nX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDIwMF9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCA3MyUKcmVuYW1lIGZyb20gYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2dfZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL21pcHMvY29uZmlncy9yYmhtYTQyMDBfZGVmY29uZmlnCmluZGV4IDcwNzhlNmIuLjM1ZDY0MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9nX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQyMDBfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDEzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzozNiAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjEKKyMgV2VkIE1heSAgOSAyMzo0NDoxOSAyMDA3CiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiAjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CkBAIC0zMywxMSArMzIsOSBAQAogIyBDT05GSUdfTUlQU19TRUFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX01PTUVOQ09fT0NFTE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX01PTUVOQ09fT0NFTE9UXzMgaXMgbm90IHNldAogIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfQyBpcyBub3Qgc2V0Ci1DT05GSUdfTU9NRU5DT19PQ0VMT1RfRz15CiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldApAQCAtNjAsOCArNTcsOSBAQAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAorQ09ORklHX1RPU0hJQkFfUkJUWDQ5Mjc9eQogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX0ZQQ0lCMCBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKQEAgLTcwLDE5ICs2OCwxNSBAQAogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19JODI1OT15CiBDT05GSUdfQ1BVX0JJR19FTkRJQU49eQogIyBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19CSUdfRU5ESUFOPXkKLUNPTkZJR19JUlFfQ1BVPXkKLUNPTkZJR19JUlFfQ1BVX1JNN0s9eQotQ09ORklHX1BDSV9NQVJWRUxMPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CiBDT05GSUdfU1dBUF9JT19TUEFDRT15Ci0jIENPTkZJR19TWVNDTEtfNzUgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ0xLXzgzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDTEtfMTAwPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwpAQCAtOTcsMTggKzkxLDE5IEBACiAjIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1RYNDlYWD15CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjEwMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfUk03MDAwPXkKKyMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNfSEFTX0NQVV9STTcwMDA9eQorQ09ORklHX1NZU19IQVNfQ1BVX1RYNDlYWD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiAKQEAgLTEyMSwxOSArMTE2LDE1IEBACiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKLUNPTkZJR19CT0FSRF9TQ0FDSEU9eQotQ09ORklHX1JNNzAwMF9DUFVfU0NBQ0hFPXkKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xNDMsMTcgKzEzNCwxNyBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MjUwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApAQCAtMTgzLDM0ICsxNzQsNDIgQEAKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAogIwotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CiAKICMKICMgQmxvY2sgbGF5ZXIKQEAgLTIxOCw3ICsyMTcsNyBAQAogQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19MU0Y9eQorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMzgsMTcgKzIzNywxMiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CiAjCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwpAQCAtMjYwLDEwICsyNTQsNyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLUNPTkZJR19QTT15Ci0jIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29ya2luZwpAQCAtMjczLDI1ICsyNjQsMjEgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPXkKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CkBAIC0yOTksMTkgKzI4NiwxOSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMzUyLDEzICszMzksMTYgQEAKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT15Ci0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz15Ci0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNjksMTggKzM1OSwxMiBAQAogIwogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKICMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgogIwotQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVEQgaXMgbm90IHNldAogCiAjCkBAIC00MDEsMjEgKzM4NSwyNCBAQAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9eQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPXkKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwogIwotQ09ORklHX1NHSV9JT0M0PXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMSU5LIGlzIG5vdCBzZXQKIAogIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CkBAIC00MjUsNyArNDEyLDcgQEAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9eQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAKQEAgLTQ3MSwyNyArNDU4LDEzIEBACiAjCiAjIFBIWSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX01BUlZFTExfUEhZPXkKLUNPTkZJR19EQVZJQ09NX1BIWT15Ci1DT05GSUdfUVNFTUlfUEhZPXkKLUNPTkZJR19MWFRfUEhZPXkKLUNPTkZJR19DSUNBREFfUEhZPXkKLUNPTkZJR19WSVRFU1NFX1BIWT15Ci1DT05GSUdfU01TQ19QSFk9eQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLUNPTkZJR19HQUxJTEVPXzY0MjQwX0VUSD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKQEAgLTUwMyw2ICs0NzYsNyBAQAogIwogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORTIwMDA9eQogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAKICMKQEAgLTUyMSwxOCArNDk1LDE4IEBACiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPXkKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzPXkKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRYRU5fTklDPXkKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNTQwLDkgKzUxNCwxMCBAQAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBXaXJlbGVzcyBMQU4KICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCiAjCiAjIFdhbiBpbnRlcmZhY2VzCkBAIC01NzAsMjkgKzU0NSw3IEBACiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCkBAIC02MDEsMzQgKzU1NCwzMSBAQAogIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAogQ09ORklHX1NFUklPX1NFUlBPUlQ9eQogIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUkFXPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLUNPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorIyBDT05GSUdfVlQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKIAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9UWFg5PXkKK0NPTkZJR19IQVNfVFhYOV9TRVJJQUw9eQorQ09ORklHX1NFUklBTF9UWFg5X05SX1VBUlRTPTYKK0NPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfVFhYOV9TVERTRVJJQUw9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTY1NiwxMCArNjA2LDcgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCitDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCkBAIC02NzIsMTIgKzYxOSwxMiBAQAogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAKICMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtNjkyLDE1ICs2MzksMTQgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNzA4LDExICs2NTQsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCi0jIEhJRCBEZXZpY2VzCi0jCi0jIENPTkZJR19ISUQgaXMgbm90IHNldAotCi0jCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC03MjgsMTAgKzY2OSw2IEBACiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIwpAQCAtNzU5LDcgKzY5Niw0MCBAQAogIwogIyBSZWFsIFRpbWUgQ2xvY2sKICMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0RTMTc0Mj15CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKIAogIwogIyBETUEgRW5naW5lIHN1cHBvcnQKQEAgLTc4NSw5ICs3NTUsNyBAQAogIwogIyBGaWxlIHN5c3RlbXMKICMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldApAQCAtODAxLDEwICs3NjksMTAgQEAKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlVTRV9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0FDTD15CiAKICMKQEAgLTgyNCwyMSArNzkyLDIwIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldApAQCAtODU1LDE3ICs4MjIsMTcgQEAKICMgTmV0d29yayBGaWxlIFN5c3RlbXMKICMKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPXkKLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC04ODksMTAgKzg1Niw3IEBACiAjCiAjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgogIwotQ09ORklHX0RMTT15Ci1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBQcm9maWxpbmcgc3VwcG9ydApAQCAtOTEwLDcyICs4NzQsMjkgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCitDT05GSUdfU1lTX1NVUFBPUlRTX0tHREI9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLUNPTkZJR19LRVlTPXkKLUNPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPXkKLUNPTkZJR19DUllQVE9fTlVMTD15Ci1DT05GSUdfQ1JZUFRPX01END15Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9eQotQ09ORklHX0NSWVBUT19TSEEyNTY9eQotQ09ORklHX0NSWVBUT19TSEE1MTI9eQotQ09ORklHX0NSWVBUT19XUDUxMj15Ci1DT05GSUdfQ1JZUFRPX1RHUjE5Mj15Ci1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPXkKLUNPTkZJR19DUllQVE9fRUNCPXkKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fUENCQz15Ci1DT05GSUdfQ1JZUFRPX0xSVz15Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci1DT05GSUdfQ1JZUFRPX0ZDUllQVD15Ci1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPXkKLUNPTkZJR19DUllQVE9fVFdPRklTSD15Ci1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPXkKLUNPTkZJR19DUllQVE9fU0VSUEVOVD15Ci1DT05GSUdfQ1JZUFRPX0FFUz15Ci1DT05GSUdfQ1JZUFRPX0NBU1Q1PXkKLUNPTkZJR19DUllQVE9fQ0FTVDY9eQotQ09ORklHX0NSWVBUT19URUE9eQotQ09ORklHX0NSWVBUT19BUkM0PXkKLUNPTkZJR19DUllQVE9fS0hBWkFEPXkKLUNPTkZJR19DUllQVE9fQU5VQklTPXkKLUNPTkZJR19DUllQVE9fREVGTEFURT15Ci1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKLUNPTkZJR19DUllQVE9fQ1JDMzJDPXkKLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9eQotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMTY9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZwppbmRleCAyOWUwZGY5Li40MTAxMWY3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcKQEAgLTg5LDcgKzg5LDYgQEAKIENPTkZJR19TV0FQX0lPX1NQQUNFPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIENPTkZJR19IQVZFX1NURF9QQ19TRVJJQUxfUE9SVD15Ci1DT05GSUdfVE9TSElCQV9CT0FSRFM9eQogCiAjCiAjIENQVSBzZWxlY3Rpb24KQEAgLTI0NSw3ICsyNDQsNiBAQAogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15Ci1DT05GSUdfSVNBPXkKIENPTkZJR19NTVU9eQogCiAjCkBAIC01NzMsNyArNTcxLDYgQEAKICMKICMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CiAjCi0jIENPTkZJR19QTlAgaXMgbm90IHNldAogIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0CiAKICMKQEAgLTY1OCw3ICs2NTUsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfVEM4NkMwMDE9bQogIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKICMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAogIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldApAQCAtNjc3LDExICs2NzMsNiBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwotIyBPbGQgQ0QtUk9NIGRyaXZlcnMgKG5vdCBTQ1NJLCBub3QgSURFKQotIwotIyBDT05GSUdfQ0RfTk9fSURFU0NTSSBpcyBub3Qgc2V0Ci0KLSMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKICMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKQEAgLTc0MiwzNyArNzMzLDIwIEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfSVNBPXkKLSMgQ09ORklHX0UyMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VXUkszIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFWFBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFWFBSRVNTX1BSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUExBTl9QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQNDg2RSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEgxNkkgaXMgbm90IHNldAogQ09ORklHX05FMjAwMD15Ci0jIENPTkZJR19TRUVRODAwNSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQUMzMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUklDT1QgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAogIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKQEAgLTgzMyw4ICs4MDcsNiBAQAogIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQogIwogIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJMQU4gaXMgbm90IHNldAotIyBDT05GSUdfV0FWRUxBTiBpcyBub3Qgc2V0CiAKICMKICMgV2lyZWxlc3MgODAyLjExYiBJU0EvUENJIGNhcmRzIHN1cHBvcnQKQEAgLTkyMCw5ICs4OTIsNiBAQAogQ09ORklHX0lOUFVUX01PVVNFPXkKIENPTkZJR19NT1VTRV9QUzI9eQogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0lOUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9MT0dJQk0gaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUEMxMTBQQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CkBAIC0xMDcyLDcgKzEwNDEsNiBAQAogIwogQ09ORklHX1ZHQV9DT05TT0xFPXkKICMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMTlfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvbWlwcy9jb25maWdzL3RiMDIxOV9kZWZjb25maWcKaW5kZXggMTc1NmQyYi4uOGIxNjc1YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMTlfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6NDEgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIxLXJjNgorIyBTdW4gQXByIDE1IDAxOjA2OjAxIDIwMDcKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjYsMTAgKzY2LDExIEBACiAjIENPTkZJR19JQk1fV09SS1BBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORUNfQ01CVlI0MTMzIGlzIG5vdCBzZXQKIENPTkZJR19UQU5CQUNfVEIwMjJYPXkKLSMgQ09ORklHX1RBTkJBQ19UQjAyMjYgaXMgbm90IHNldAotIyBDT05GSUdfVEFOQkFDX1RCMDI4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUNUT1JfTVBDMzBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1pBT19DQVBDRUxMQSBpcyBub3Qgc2V0CitDT05GSUdfVEFOQkFDX1RCMDIxOT15CisjIENPTkZJR19UQU5CQUNfVEIwMjI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBTkJBQ19UQjAyODcgaXMgbm90IHNldAogQ09ORklHX1BDSV9WUjQxWFg9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKQEAgLTE4NCw2ICsxODUsNyBAQAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQpAQCAtMzc1LDcgKzM3Nyw3IEBACiAjCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj1tCiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTQxNSw3ICs0MTcsNiBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CiBDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIApAQCAtNjQ2LDcgKzY0Nyw3IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLUNPTkZJR19UQU5CQUNfVEIwMjE5PXkKK0NPTkZJR19HUElPX1RCMDIxOT15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogQ09ORklHX0dQSU9fVlI0MVhYPXkKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNjc5LDYgKzY4MCwxMSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTY5Miw3ICs2OTgsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAKICMKQEAgLTcwMCw3ICs3MDYsNiBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtODMxLDYgKzgzNiw3IEBACiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9rZ2RiX2lvLmMgYi9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAva2dkYl9pby5jCmluZGV4IDI2MDRmMmMuLjM0MjU3OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9rZ2RiX2lvLmMKKysrIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL2tnZGJfaW8uYwpAQCAtMzYsNyArMzYsNyBAQAogI2RlZmluZSBUSU1FT1VUICAgICAgIDB4ZmZmZmZmCiAKIHN0YXRpYyBpbnQgcmVtb3RlRGVidWdJbml0aWFsaXplZCA9IDA7Ci1zdGF0aWMgdm9pZCBkZWJ1Z0luaXQoaW50IGJhdWQpCitzdGF0aWMgdm9pZCBkZWJ1Z0luaXQoaW50IGJhdWQpOwogCiBpbnQgcHV0RGVidWdDaGFyKHVuc2lnbmVkIGNoYXIgYykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA3NjFhNzc5Li4zYjI3MzA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC04Miw3ICs4Miw3IEBACiB7CiAJdGV4dCgiLyogTUlQUyB0YXNrX3N0cnVjdCBvZmZzZXRzLiAqLyIpOwogCW9mZnNldCgiI2RlZmluZSBUQVNLX1NUQVRFICAgICAgICAgIiwgc3RydWN0IHRhc2tfc3RydWN0LCBzdGF0ZSk7Ci0Jb2Zmc2V0KCIjZGVmaW5lIFRBU0tfVEhSRUFEX0lORk8gICAiLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvKTsKKwlvZmZzZXQoIiNkZWZpbmUgVEFTS19USFJFQURfSU5GTyAgICIsIHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2spOwogCW9mZnNldCgiI2RlZmluZSBUQVNLX0ZMQUdTICAgICAgICAgIiwgc3RydWN0IHRhc2tfc3RydWN0LCBmbGFncyk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRBU0tfTU0gICAgICAgICAgICAiLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIG1tKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEFTS19QSUQgICAgICAgICAgICIsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcGlkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL21pcHMva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IDMwNGVmZGMuLjlkY2NmYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMTIsNyArMTIsOCBAQAogCiBleHRlcm4gdm9pZCBwcm9tX3B1dGNoYXIoY2hhcik7CiAKLXN0YXRpYyB2b2lkIGVhcmx5X2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgbikKK3N0YXRpYyB2b2lkIF9faW5pdAorZWFybHlfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBuKQogewogCXdoaWxlIChuLS0gJiYgKnMpIHsKIAkJaWYgKCpzID09ICdcbicpCkBAIC0yMiwxOSArMjMsMjAgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBlYXJseV9jb25zb2xlID0geworc3RhdGljIHN0cnVjdCBjb25zb2xlIGVhcmx5X2NvbnNvbGUgX19pbml0ZGF0YSA9IHsKIAkubmFtZQk9ICJlYXJseSIsCiAJLndyaXRlCT0gZWFybHlfY29uc29sZV93cml0ZSwKIAkuZmxhZ3MJPSBDT05fUFJJTlRCVUZGRVIgfCBDT05fQk9PVCwKIAkuaW5kZXgJPSAtMQogfTsKIAorc3RhdGljIGludCBlYXJseV9jb25zb2xlX2luaXRpYWxpemVkIF9faW5pdGRhdGE7CisKIHZvaWQgX19pbml0IHNldHVwX2Vhcmx5X3ByaW50ayh2b2lkKQogewotCXJlZ2lzdGVyX2NvbnNvbGUoJmVhcmx5X2NvbnNvbGUpOwotfQorCWlmIChlYXJseV9jb25zb2xlX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisJZWFybHlfY29uc29sZV9pbml0aWFsaXplZCA9IDE7CiAKLXZvaWQgX19pbml0IGRpc2FibGVfZWFybHlfcHJpbnRrKHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9jb25zb2xlKCZlYXJseV9jb25zb2xlKTsKKwlyZWdpc3Rlcl9jb25zb2xlKCZlYXJseV9jb25zb2xlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJpeGVsZi5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcml4ZWxmLmMKaW5kZXggM2NjMjVjMC4uNDAzZDk2ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcml4ZWxmLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcml4ZWxmLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zaG0uaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL25hbWVpLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lyaXhpb2N0bC5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcml4aW9jdGwuYwppbmRleCBlMjg2MzgyLi4zMGY5ZWIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lyaXhpb2N0bC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJpeGlvY3RsLmMKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lyaXhzaWcuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJpeHNpZy5jCmluZGV4IDIxMzI0ODUuLjY5ODBkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJpeHNpZy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJpeHNpZy5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1tc2MwMS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYwppbmRleCAyOTY3NTM3Li40MTA4NjhiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycS1tc2MwMS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMKQEAgLTEzMiwxMSArMTMyLDExIEBACiB9OwogCiAKLXZvaWQgX19pbml0IGluaXRfbXNjX2lycXModW5zaWduZWQgaW50IGJhc2UsIG1zY19pcnFtYXBfdCAqaW1wLCBpbnQgbmlycSkKK3ZvaWQgX19pbml0IGluaXRfbXNjX2lycXModW5zaWduZWQgbG9uZyBpY3ViYXNlLCB1bnNpZ25lZCBpbnQgaXJxYmFzZSwgbXNjX2lycW1hcF90ICppbXAsIGludCBuaXJxKQogewogCWV4dGVybiB2b2lkICgqYm9hcmRfYmluZF9laWNfaW50ZXJydXB0KSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcmVnc2V0KTsKIAotCV9pY2N0cmxfbXNjID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAgKE1JUFNfTVNDMDFfSUNfUkVHX0JBU0UsIDB4NDAwMDApOworCV9pY2N0cmxfbXNjID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAgKGljdWJhc2UsIDB4NDAwMDApOwogCiAJLyogUmVzZXQgaW50ZXJydXB0IGNvbnRyb2xsZXIgLSBpbml0aWFsaXNlcyBhbGwgcmVnaXN0ZXJzIHRvIDAgKi8KIAlNU0NJQ19XUklURShNU0MwMV9JQ19SU1QsIE1TQzAxX0lDX1JTVF9SU1RfQklUKTsKQEAgLTE0OCwxNCArMTQ4LDE0IEBACiAKIAkJc3dpdGNoIChpbXAtPmltX3R5cGUpIHsKIAkJY2FzZSBNU0MwMV9JUlFfRURHRToKLQkJCXNldF9pcnFfY2hpcChiYXNlK24sICZtc2NfZWRnZWlycV90eXBlKTsKKwkJCXNldF9pcnFfY2hpcChpcnFiYXNlK24sICZtc2NfZWRnZWlycV90eXBlKTsKIAkJCWlmIChjcHVfaGFzX3ZlaWMpCiAJCQkJTVNDSUNfV1JJVEUoTVNDMDFfSUNfU1VQK24qOCwgTVNDMDFfSUNfU1VQX0VER0VfQklUKTsKIAkJCWVsc2UKIAkJCQlNU0NJQ19XUklURShNU0MwMV9JQ19TVVArbio4LCBNU0MwMV9JQ19TVVBfRURHRV9CSVQgfCBpbXAtPmltX2x2bCk7CiAJCQlicmVhazsKIAkJY2FzZSBNU0MwMV9JUlFfTEVWRUw6Ci0JCQlzZXRfaXJxX2NoaXAoYmFzZStuLCAmbXNjX2xldmVsaXJxX3R5cGUpOworCQkJc2V0X2lycV9jaGlwKGlycWJhc2UrbiwgJm1zY19sZXZlbGlycV90eXBlKTsKIAkJCWlmIChjcHVfaGFzX3ZlaWMpCiAJCQkJTVNDSUNfV1JJVEUoTVNDMDFfSUNfU1VQK24qOCwgMCk7CiAJCQllbHNlCkBAIC0xNjMsNyArMTYzLDcgQEAKIAkJfQogCX0KIAotCWlycV9iYXNlID0gYmFzZTsKKwlpcnFfYmFzZSA9IGlycWJhc2U7CiAKIAlNU0NJQ19XUklURShNU0MwMV9JQ19HRU5BLCBNU0MwMV9JQ19HRU5BX0dFTkFfQklUKTsJLyogRW5hYmxlIGludGVycnVwdCBnZW5lcmF0aW9uICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCmluZGV4IDJmZTRjODYuLmFlZGVkNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwpAQCAtMjgsNyArMjgsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpcnFfbWFwW05SX0lSUVMgLyBCSVRTX1BFUl9MT05HXTsKIAotaW50IF9fZGV2aW5pdCBhbGxvY2F0ZV9pcnFubyh2b2lkKQoraW50IGFsbG9jYXRlX2lycW5vKHZvaWQpCiB7CiAJaW50IGlycTsKIApAQCAtNTksNyArNTksNyBAQAogCQlCVUdfT04odGVzdF9hbmRfc2V0X2JpdChpLCBpcnFfbWFwKSk7CiB9CiAKLXZvaWQgX19kZXZpbml0IGZyZWVfaXJxbm8odW5zaWduZWQgaW50IGlycSkKK3ZvaWQgZnJlZV9pcnFubyh1bnNpZ25lZCBpbnQgaXJxKQogewogCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwogCWNsZWFyX2JpdChpcnEsIGlycV9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMjAxYWUxOS4uYjVhN2I0NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMDdkNjczMC4uMmEwOGNlNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsMzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsMzIuYwppbmRleCBiOWEwMTQ0Li4wMDNmODE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwzMi5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsX24zMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWxfbjMyLmMKaW5kZXggYTkyMDJmYS4uNGNmOWZmMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWxfbjMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWxfbjMyLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwppbmRleCA1ZGNmYWI2Li5iMzYxZWRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwpAQCAtNTYwLDcgKzU2MCw3IEBACiAJd3JpdGVfdGNfZ3ByX3NwKF9fS1NUS19UT1MoaWRsZSkpOwogCiAJLyogZ2xvYmFsIHBvaW50ZXIgKi8KLQl3cml0ZV90Y19ncHJfZ3AoKHVuc2lnbmVkIGxvbmcpaWRsZS0+dGhyZWFkX2luZm8pOworCXdyaXRlX3RjX2dwcl9ncCgodW5zaWduZWQgbG9uZyl0YXNrX3RocmVhZF9pbmZvKGlkbGUpKTsKIAogCXNtdGNfc3RhdHVzIHw9IFNNVENfTVRDX0FDVElWRTsKIAl3cml0ZV90Y19jMF90Y2hhbHQoMCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IGE1ODZhYmEuLmViZDlkYjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC0zMSw4ICszMSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzYXZlX2NvbnRleHRfc3RhY2soc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSwKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgc2F2ZV9jb250ZXh0X3N0YWNrKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgc3AgPSByZWdzLT5yZWdzWzI5XTsKICNpZmRlZiBDT05GSUdfS0FMTFNZTVMKQEAgLTQxLDcgKzQwLDcgQEAKIAogCWlmIChyYXdfc2hvd190cmFjZSB8fCAhX19rZXJuZWxfdGV4dF9hZGRyZXNzKHBjKSkgewogCQl1bnNpZ25lZCBsb25nIHN0YWNrX3BhZ2UgPQotCQkJKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHRhc2spOworCQkJKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKGN1cnJlbnQpOwogCQlpZiAoc3RhY2tfcGFnZSAmJiBzcCA+PSBzdGFja19wYWdlICYmCiAJCSAgICBzcCA8PSBzdGFja19wYWdlICsgVEhSRUFEX1NJWkUgLSAzMikKIAkJCXNhdmVfcmF3X2NvbnRleHRfc3RhY2sodHJhY2UsIHNwKTsKQEAgLTU0LDcgKzUzLDcgQEAKIAkJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gcGM7CiAJCWlmICh0cmFjZS0+bnJfZW50cmllcyA+PSB0cmFjZS0+bWF4X2VudHJpZXMpCiAJCQlicmVhazsKLQkJcGMgPSB1bndpbmRfc3RhY2sodGFzaywgJnNwLCBwYywgJnJhKTsKKwkJcGMgPSB1bndpbmRfc3RhY2soY3VycmVudCwgJnNwLCBwYywgJnJhKTsKIAl9IHdoaWxlIChwYyk7CiAjZWxzZQogCXNhdmVfcmF3X2NvbnRleHRfc3RhY2sodHJhY2UsIHNwKTsKQEAgLTY0LDIyICs2MywxMyBAQAogLyoKICAqIFNhdmUgc3RhY2stYmFja3RyYWNlIGFkZHJlc3NlcyBpbnRvIGEgc3RhY2tfdHJhY2UgYnVmZmVyLgogICovCi12b2lkIHNhdmVfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQordm9pZCBzYXZlX3N0YWNrX3RyYWNlKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCiB7CiAJc3RydWN0IHB0X3JlZ3MgZHVtbXlyZWdzOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gJmR1bW15cmVnczsKIAogCVdBUk5fT04odHJhY2UtPm5yX2VudHJpZXMgfHwgIXRyYWNlLT5tYXhfZW50cmllcyk7CiAKLQlpZiAodGFzayAmJiB0YXNrICE9IGN1cnJlbnQpIHsKLQkJcmVncy0+cmVnc1syOV0gPSB0YXNrLT50aHJlYWQucmVnMjk7Ci0JCXJlZ3MtPnJlZ3NbMzFdID0gMDsKLQkJcmVncy0+Y3AwX2VwYyA9IHRhc2stPnRocmVhZC5yZWczMTsKLQl9IGVsc2UgewotCQlpZiAoIXRhc2spCi0JCQl0YXNrID0gY3VycmVudDsKLQkJcHJlcGFyZV9mcmFtZXRyYWNlKHJlZ3MpOwotCX0KLQotCXNhdmVfY29udGV4dF9zdGFjayh0cmFjZSwgdGFzaywgcmVncyk7CisJcHJlcGFyZV9mcmFtZXRyYWNlKHJlZ3MpOworCXNhdmVfY29udGV4dF9zdGFjayh0cmFjZSwgcmVncyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jCmluZGV4IDI2ZTFhN2UuLjlkZDVhMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKaW5kZXggZTVlNTZiZC4uNzUxYjRhMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKQEAgLTMwNiw3ICszMDYsNyBAQAogCiBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfbWlwcyA9IHsKIAkubmFtZQkJPSAiTUlQUyIsCi0JLm1hc2sJCT0gMHhmZmZmZmZmZiwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggNDkzY2IyOS4uMjAwZGUwMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgpAQCAtOTI4LDkgKzkyNyw5IEBACiAJICAgICAgKHJlZ3MtPmNwMF9jYXVzZSAmIDB4N2YpID4+IDIpOwogfQogCi1hc21saW5rYWdlIHZvaWQgZG9fZGVmYXVsdF92aShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBhc21saW5rYWdlIHZvaWQgZG9fZGVmYXVsdF92aSh2b2lkKQogewotCXNob3dfcmVncyhyZWdzKTsKKwlzaG93X3JlZ3MoZ2V0X2lycV9yZWdzKCkpOwogCXBhbmljKCJDYXVnaHQgdW5leHBlY3RlZCB2ZWN0b3JlZCBpbnRlcnJ1cHQuIik7CiB9CiAKQEAgLTExMjksNyArMTEyOCw3IEBACiAJY2xlYXJfYml0KHNldCwgJnNyLT5zcl9hbGxvY2F0ZWQpOwogfQogCi1zdGF0aWMgdm9pZCAqc2V0X3ZpX3Nyc19oYW5kbGVyKGludCBuLCB2b2lkICphZGRyLCBpbnQgc3JzKQorc3RhdGljIHZvaWQgKnNldF92aV9zcnNfaGFuZGxlcihpbnQgbiwgdmlfaGFuZGxlcl90IGFkZHIsIGludCBzcnMpCiB7CiAJdW5zaWduZWQgbG9uZyBoYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcgb2xkX2hhbmRsZXIgPSB2aV9oYW5kbGVyc1tuXTsKQEAgLTEyMTgsNyArMTIxNyw3IEBACiAJcmV0dXJuICh2b2lkICopb2xkX2hhbmRsZXI7CiB9CiAKLXZvaWQgKnNldF92aV9oYW5kbGVyKGludCBuLCB2b2lkICphZGRyKQordm9pZCAqc2V0X3ZpX2hhbmRsZXIoaW50IG4sIHZpX2hhbmRsZXJfdCBhZGRyKQogewogCXJldHVybiBzZXRfdmlfc3JzX2hhbmRsZXIobiwgYWRkciwgMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3VuYWxpZ25lZC5jIGIvYXJjaC9taXBzL2tlcm5lbC91bmFsaWduZWQuYwppbmRleCAyNGI3YjA1Li4xOGM0YTNjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3VuYWxpZ25lZC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdW5hbGlnbmVkLmMKQEAgLTc2LDggKzc2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2JyYW5jaC5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAwNDNmNjM3Li45Yjk5OTJjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0yNyw3ICsyNyw3IEBACiAgIC8qIHJlYWQtb25seSAqLwogICBfdGV4dCA9IC47CQkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KICAgLnRleHQgOiB7Ci0gICAgKigudGV4dCkKKyAgICBURVhUX1RFWFQKICAgICBTQ0hFRF9URVhUCiAgICAgTE9DS19URVhUCiAgICAgKiguZml4dXApCkBAIC02Miw3ICs2Miw3IEBACiAgICAgLiA9IEFMSUdOKF9QQUdFX1NJWkUpOwogICAgICooLmRhdGEuaW5pdF90YXNrKQogCi0gICAgKiguZGF0YSkKKyAgICBEQVRBX0RBVEEKIAogICAgIENPTlNUUlVDVE9SUwogICB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGliL01ha2VmaWxlIGIvYXJjaC9taXBzL2xpYi9NYWtlZmlsZQppbmRleCBkN2QzYjE0Li41ZGFkMTNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUKQEAgLTksNCArOSw0IEBACiBvYmotJChDT05GSUdfUENJKQkrPSBpb21hcC1wY2kubwogCiAjIGxpYmdjYy1zdHlsZSBzdHVmZiBuZWVkZWQgaW4gdGhlIGtlcm5lbAotbGliLXkgKz0gYXNobGRpMy5vIGFzaHJkaTMubyBsc2hyZGkzLm8KK2xpYi15ICs9IGFzaGxkaTMubyBhc2hyZGkzLm8gbHNocmRpMy5vIHVjbXBkaTIubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi91Y21wZGkyLmMgYi9hcmNoL21pcHMvbGliL3VjbXBkaTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWZmMjU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xpYi91Y21wZGkyLmMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAibGliZ2NjLmgiCisKK3dvcmRfdHlwZSBfX3VjbXBkaTIgKHVuc2lnbmVkIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBiKQoreworCWNvbnN0IERXdW5pb24gYXUgPSB7LmxsID0gYX07CisJY29uc3QgRFd1bmlvbiBidSA9IHsubGwgPSBifTsKKworCWlmICgodW5zaWduZWQgaW50KSBhdS5zLmhpZ2ggPCAodW5zaWduZWQgaW50KSBidS5zLmhpZ2gpCisJCXJldHVybiAwOworCWVsc2UgaWYgKCh1bnNpZ25lZCBpbnQpIGF1LnMuaGlnaCA+ICh1bnNpZ25lZCBpbnQpIGJ1LnMuaGlnaCkKKwkJcmV0dXJuIDI7CisJaWYgKCh1bnNpZ25lZCBpbnQpIGF1LnMubG93IDwgKHVuc2lnbmVkIGludCkgYnUucy5sb3cpCisJCXJldHVybiAwOworCWVsc2UgaWYgKCh1bnNpZ25lZCBpbnQpIGF1LnMubG93ID4gKHVuc2lnbmVkIGludCkgYnUucy5sb3cpCisJCXJldHVybiAyOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2RzZW11bC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2RzZW11bC5jCmluZGV4IDgwNzlmM2QuLmVhNmJhNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kc2VtdWwuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHNlbXVsLmMKQEAgLTIsNyArMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbS5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX2ludC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX2ludC5jCmluZGV4IDgzZDc2MDIuLjFjZDgzMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9pbnQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfaW50LmMKQEAgLTMxMSwxNiArMzExLDIxIEBACiAJaWYgKCFjcHVfaGFzX3ZlaWMpCiAJCW1pcHNfY3B1X2lycV9pbml0KCk7CiAKLSAgICAgICAgc3dpdGNoKG1pcHNfcmV2aXNpb25fY29yaWQpIHsKLSAgICAgICAgY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfTVNDOgotICAgICAgICBjYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9GUEdBMjoKLSAgICAgICAgY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTM6Ci0gICAgICAgIGNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFXzI0SzoKLSAgICAgICAgY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRU1VTF9NU0M6CisgICAgICAgIHN3aXRjaChtaXBzX3JldmlzaW9uX3Njb25pZCkgeworICAgICAgICBjYXNlIE1JUFNfUkVWSVNJT05fU0NPTl9TT0NJVDoKKyAgICAgICAgY2FzZSBNSVBTX1JFVklTSU9OX1NDT05fUk9DSVQ6CiAJCWlmIChjcHVfaGFzX3ZlaWMpCi0JCQlpbml0X21zY19pcnFzIChNU0MwMUVfSU5UX0JBU0UsIG1zY19laWNpcnFtYXAsIG1zY19ucl9laWNpcnFzKTsKKwkJCWluaXRfbXNjX2lycXMgKE1JUFNfTVNDMDFfSUNfUkVHX0JBU0UsIE1TQzAxRV9JTlRfQkFTRSwgbXNjX2VpY2lycW1hcCwgbXNjX25yX2VpY2lycXMpOwogCQllbHNlCi0JCQlpbml0X21zY19pcnFzIChNU0MwMUNfSU5UX0JBU0UsIG1zY19pcnFtYXAsIG1zY19ucl9pcnFzKTsKKwkJCWluaXRfbXNjX2lycXMgKE1JUFNfTVNDMDFfSUNfUkVHX0JBU0UsIE1TQzAxQ19JTlRfQkFTRSwgbXNjX2lycW1hcCwgbXNjX25yX2lycXMpOworCQlicmVhazsKKworICAgICAgICBjYXNlIE1JUFNfUkVWSVNJT05fU0NPTl9TT0NJVFNDOgorICAgICAgICBjYXNlIE1JUFNfUkVWSVNJT05fU0NPTl9TT0NJVFNDUDoKKwkJaWYgKGNwdV9oYXNfdmVpYykKKwkJCWluaXRfbXNjX2lycXMgKE1JUFNfU09DSVRTQ19JQ19SRUdfQkFTRSwgTVNDMDFFX0lOVF9CQVNFLCBtc2NfZWljaXJxbWFwLCBtc2NfbnJfZWljaXJxcyk7CisJCWVsc2UKKwkJCWluaXRfbXNjX2lycXMgKE1JUFNfU09DSVRTQ19JQ19SRUdfQkFTRSwgTVNDMDFDX0lOVF9CQVNFLCBtc2NfaXJxbWFwLCBtc2NfbnJfaXJxcyk7CiAJfQogCiAJaWYgKGNwdV9oYXNfdmVpYykgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2ZhdWx0LmMgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwppbmRleCBmOWM1OTVkLi43ZWJlYTMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgkJLyogRm9yIHVuYmxhbmtfc2NyZWVuKCkgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2hpZ2htZW0uYyBiL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKaW5kZXggNjc1NTAyYS4uMTBkZDJhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2hpZ2htZW0uYworKysgYi9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCkBAIC04MCw3ICs4MCw2IEBACiAJcGFnZWZhdWx0X2VuYWJsZSgpOwogfQogCi0jaWZuZGVmIENPTkZJR19MSU1JVEVEX0RNQQogLyoKICAqIFRoaXMgaXMgdGhlIHNhbWUgYXMga21hcF9hdG9taWMoKSBidXQgY2FuIG1hcCBtZW1vcnkgdGhhdCBkb2Vzbid0CiAgKiBoYXZlIGEgc3RydWN0IHBhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0LgpAQCAtOTksNyArOTgsNiBAQAogCiAJcmV0dXJuICh2b2lkKikgdmFkZHI7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0xJTUlURURfRE1BICovCiAKIHN0cnVjdCBwYWdlICpfX2ttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqcHRyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2luaXQuYyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKaW5kZXggMmQxYzJjMC4uNGM4MDUyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2luaXQuYworKysgYi9hcmNoL21pcHMvbW0vaW5pdC5jCkBAIC00MjQsOSArNDI0LDYgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotI2lmZGVmIENPTkZJR19MSU1JVEVEX0RNQQotCQlzZXRfcGFnZV9hZGRyZXNzKHBhZ2UsIGxvd21lbV9wYWdlX2FkZHJlc3MocGFnZSkpOwotI2VuZGlmCiAJCWluaXRfcGFnZV9jb3VudChwYWdlKTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CiAJCXRvdGFsaGlnaF9wYWdlcysrOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2lvcmVtYXAuYyBiL2FyY2gvbWlwcy9tbS9pb3JlbWFwLmMKaW5kZXggY2VhN2QwZS4uNTk5NDViOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2lvcmVtYXAuYworKysgYi9hcmNoL21pcHMvbW0vaW9yZW1hcC5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYmV4LmMgYi9hcmNoL21pcHMvbW0vdGxiZXguYwppbmRleCA0OTJjNTE4Li5lNzE0OTI5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiZXguYworKysgYi9hcmNoL21pcHMvbW0vdGxiZXguYwpAQCAtMzUsMjQgKzM1LDI0IEBACiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS93YXIuaD4KIAotc3RhdGljIF9faW5pdCBpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgcjQ1a19idmFod2J1Zyh2b2lkKQorc3RhdGljIF9faW5pdCBpbnQgX19tYXliZV91bnVzZWQgcjQ1a19idmFod2J1Zyh2b2lkKQogewogCS8qIFhYWDogV2Ugc2hvdWxkIHByb2JlIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBidWcsIGJ1dCB3ZSBkb24ndC4gKi8KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIF9faW5pdCBpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgcjRrXzI1ME1IWmh3YnVnKHZvaWQpCitzdGF0aWMgX19pbml0IGludCBfX21heWJlX3VudXNlZCByNGtfMjUwTUhaaHdidWcodm9pZCkKIHsKIAkvKiBYWFg6IFdlIHNob3VsZCBwcm9iZSBmb3IgdGhlIHByZXNlbmNlIG9mIHRoaXMgYnVnLCBidXQgd2UgZG9uJ3QuICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2luaXQgaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGJjbTEyNTBfbTNfd2FyKHZvaWQpCitzdGF0aWMgX19pbml0IGludCBfX21heWJlX3VudXNlZCBiY20xMjUwX20zX3dhcih2b2lkKQogewogCXJldHVybiBCQ00xMjUwX00zX1dBUjsKIH0KIAotc3RhdGljIF9faW5pdCBpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgcjEwMDAwX2xsc2Nfd2FyKHZvaWQpCitzdGF0aWMgX19pbml0IGludCBfX21heWJlX3VudXNlZCByMTAwMDBfbGxzY193YXIodm9pZCkKIHsKIAlyZXR1cm4gUjEwMDAwX0xMU0NfV0FSOwogfQpAQCAtNTExLDE4ICs1MTEsMTggQEAKICNkZWZpbmUgaV9laGIoYnVmKSBpX3NsbChidWYsIDAsIDAsIDMpCiAKICNpZmRlZiBDT05GSUdfNjRCSVQKLXN0YXRpYyBfX2luaXQgaW50IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGluX2NvbXBhdF9zcGFjZV9wKGxvbmcgYWRkcikKK3N0YXRpYyBfX2luaXQgaW50IF9fbWF5YmVfdW51c2VkIGluX2NvbXBhdF9zcGFjZV9wKGxvbmcgYWRkcikKIHsKIAkvKiBJcyB0aGlzIGFkZHJlc3MgaW4gMzJiaXQgY29tcGF0IHNwYWNlPyAqLwogCXJldHVybiAoKChhZGRyKSAmIDB4ZmZmZmZmZmYwMDAwMDAwMEwpID09IDB4ZmZmZmZmZmYwMDAwMDAwMEwpOwogfQogCi1zdGF0aWMgX19pbml0IGludCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSByZWxfaGlnaGVzdChsb25nIHZhbCkKK3N0YXRpYyBfX2luaXQgaW50IF9fbWF5YmVfdW51c2VkIHJlbF9oaWdoZXN0KGxvbmcgdmFsKQogewogCXJldHVybiAoKCgodmFsICsgMHg4MDAwODAwMDgwMDBMKSA+PiA0OCkgJiAweGZmZmYpIF4gMHg4MDAwKSAtIDB4ODAwMDsKIH0KIAotc3RhdGljIF9faW5pdCBpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgcmVsX2hpZ2hlcihsb25nIHZhbCkKK3N0YXRpYyBfX2luaXQgaW50IF9fbWF5YmVfdW51c2VkIHJlbF9oaWdoZXIobG9uZyB2YWwpCiB7CiAJcmV0dXJuICgoKCh2YWwgKyAweDgwMDA4MDAwTCkgPj4gMzIpICYgMHhmZmZmKSBeIDB4ODAwMCkgLSAweDgwMDA7CiB9CkBAIC01NTYsOCArNTU2LDggQEAKIAkJaV9sdWkoYnVmLCBycywgcmVsX2hpKGFkZHIpKTsKIH0KIAotc3RhdGljIF9faW5pdCB2b2lkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGlfTEEodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgcnMsCi0JCQkJCQlsb25nIGFkZHIpCitzdGF0aWMgX19pbml0IHZvaWQgX19tYXliZV91bnVzZWQgaV9MQSh1MzIgKipidWYsIHVuc2lnbmVkIGludCBycywKKwkJCQkJICAgICBsb25nIGFkZHIpCiB7CiAJaV9MQV9tb3N0bHkoYnVmLCBycywgYWRkcik7CiAJaWYgKHJlbF9sbyhhZGRyKSkKQEAgLTYzNiw4ICs2MzYsOCBAQAogCW1vdmVfbGFiZWxzKGxhYiwgZmlyc3QsIGVuZCwgb2ZmKTsKIH0KIAotc3RhdGljIF9faW5pdCBpbnQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaW5zbl9oYXNfYmRlbGF5KHN0cnVjdCByZWxvYyAqcmVsLAotCQkJCQkJCSAgdTMyICphZGRyKQorc3RhdGljIF9faW5pdCBpbnQgX19tYXliZV91bnVzZWQgaW5zbl9oYXNfYmRlbGF5KHN0cnVjdCByZWxvYyAqcmVsLAorCQkJCQkJICAgICAgIHUzMiAqYWRkcikKIHsKIAlmb3IgKDsgcmVsLT5sYWIgIT0gbGFiZWxfaW52YWxpZDsgcmVsKyspIHsKIAkJaWYgKHJlbC0+YWRkciA9PSBhZGRyCkBAIC02NTAsMTUgKzY1MCwxNSBAQAogfQogCiAvKiBjb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGxhYmVsZWQgYnJhbmNoZXMgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkCiAJaWxfYmx0eih1MzIgKipwLCBzdHJ1Y3QgcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBlbnVtIGxhYmVsX2lkIGwpCiB7CiAJcl9taXBzX3BjMTYociwgKnAsIGwpOwogCWlfYmx0eihwLCByZWcsIDApOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaWxfYih1MzIgKipwLCBzdHJ1Y3QgcmVsb2MgKipyLAotCQkJCQkgZW51bSBsYWJlbF9pZCBsKQorc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkIGlsX2IodTMyICoqcCwgc3RydWN0IHJlbG9jICoqciwKKwkJCQkJICAgICBlbnVtIGxhYmVsX2lkIGwpCiB7CiAJcl9taXBzX3BjMTYociwgKnAsIGwpOwogCWlfYihwLCAwKTsKQEAgLTY3MSw3ICs2NzEsNyBAQAogCWlfYmVxeihwLCByZWcsIDApOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKK3N0YXRpYyB2b2lkIF9faW5pdCBfX21heWJlX3VudXNlZAogaWxfYmVxemwodTMyICoqcCwgc3RydWN0IHJlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywgZW51bSBsYWJlbF9pZCBsKQogewogCXJfbWlwc19wYzE2KHIsICpwLCBsKTsKQEAgLTY5Miw3ICs2OTIsNyBAQAogCWlfYmdlemwocCwgcmVnLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpCitzdGF0aWMgdm9pZCBfX2luaXQgX19tYXliZV91bnVzZWQKIGlsX2JnZXoodTMyICoqcCwgc3RydWN0IHJlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywgZW51bSBsYWJlbF9pZCBsKQogewogCXJfbWlwc19wYzE2KHIsICpwLCBsKTsKQEAgLTgxMCw3ICs4MTAsNyBAQAogICoKICAqIEFzIGlmIHdlIE1JUFMgaGFja2VycyB3b3VsZG4ndCBrbm93IGhvdyB0byBub3AgcGlwZWxpbmVzIGhhcHB5IC4uLgogICovCi1zdGF0aWMgX19pbml0IHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgYnVpbGRfdGxiX3Byb2JlX2VudHJ5KHUzMiAqKnApCitzdGF0aWMgX19pbml0IHZvaWQgX19tYXliZV91bnVzZWQgYnVpbGRfdGxiX3Byb2JlX2VudHJ5KHUzMiAqKnApCiB7CiAJc3dpdGNoIChjdXJyZW50X2NwdV9kYXRhLmNwdXR5cGUpIHsKIAkvKiBGb3VuZCBieSBleHBlcmltZW50OiBSNDYwMCB2Mi4wIG5lZWRzIHRoaXMsIHRvby4gICovCkBAIC0xMDk4LDcgKzEwOTgsNyBAQAogICogVE1QIGFuZCBQVFIgYXJlIHNjcmF0Y2guCiAgKiBUTVAgd2lsbCBiZSBjbG9iYmVyZWQsIFBUUiB3aWxsIGhvbGQgdGhlIHBnZCBlbnRyeS4KICAqLwotc3RhdGljIF9faW5pdCB2b2lkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCitzdGF0aWMgX19pbml0IHZvaWQgX19tYXliZV91bnVzZWQKIGJ1aWxkX2dldF9wZ2RlMzIodTMyICoqcCwgdW5zaWduZWQgaW50IHRtcCwgdW5zaWduZWQgaW50IHB0cikKIHsKIAlsb25nIHBnZGMgPSAobG9uZylwZ2RfY3VycmVudDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9LY29uZmlnIGIvYXJjaC9taXBzL21vbWVudHVtL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwYTYxY2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWNvbmZpZyBKQUdVQVJfRE1BTE9XCi0JYm9vbCAiTG93IERNQSBNb2RlIgotCWRlcGVuZHMgb24gTU9NRU5DT19KQUdVQVJfQVRYCi0JaGVscAotCSAgU2VsZWN0IHRvIFkgaWYganVtcCBKUDUgaXMgc2V0IG9uIHlvdXIgYm9hcmQsIE4gb3RoZXJ3aXNlLiAgTm9ybWFsbHkKLQkgIHRoZSBqdW1wZXIgaXMgc2V0LCBzbyBpZiB5b3UgZmVlbCB1bnNhZmUsIGp1c3Qgc2F5IFkuCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZThjZWJkLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgTW9tZW50dW0gQ29tcHV0ZXIncyBKYWd1YXItQVRYIGJvYXJkLgotIwotIyBOb3RlISBEZXBlbmRlbmNpZXMgYXJlIGRvbmUgYXV0b21hZ2ljYWxseSBieSAnbWFrZSBkZXAnLCB3aGljaCBhbHNvCi0jIHJlbW92ZXMgYW55IG9sZCBkZXBlbmRlbmNpZXMuIERPTidUIHB1dCB5b3VyIG93biBkZXBlbmRlbmNpZXMgaGVyZQotIyB1bmxlc3MgaXQncyBzb21ldGhpbmcgc3BlY2lhbCAoaWUgbm90IGEgLmMgZmlsZSkuCi0jCi0KLW9iai15ICs9IGlycS5vIHBsYXRmb3JtLm8gcHJvbS5vIHJlc2V0Lm8gc2V0dXAubwotCi1vYmotJChDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRSkgKz0gamEtY29uc29sZS5vCi1vYmotJChDT05GSUdfUkVNT1RFX0RFQlVHKSArPSBkYmdfaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvZGJnX2lvLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9kYmdfaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg1YTY1Mi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9kYmdfaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0KLSNpZiBkZWZpbmVkKENPTkZJR19SRU1PVEVfREVCVUcpCi0KLSNpbmNsdWRlIDxhc20vc2VyaWFsLmg+IC8qIEZvciB0aGUgc2VyaWFsIHBvcnQgbG9jYXRpb24gYW5kIGJhc2UgYmF1ZCAqLwotCi0vKiAtLS0gQ09ORklHIC0tLSAqLwotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDg7Ci10eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzI7Ci0KLS8qIC0tLSBFTkQgT0YgQ09ORklHIC0tLSAqLwotCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfMjQwMCAgICAgICAgICAgICAyNDAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfNDgwMCAgICAgICAgICAgICA0ODAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfOTYwMCAgICAgICAgICAgICA5NjAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfMTkyMDAgICAgICAgICAgICAxOTIwMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzM4NDAwICAgICAgICAgICAgMzg0MDAKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfQkFVRF81NzYwMCAgICAgICAgICAgIDU3NjAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfMTE1MjAwICAgICAgICAgICAxMTUyMDAKLQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfTk9ORSAgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfT0REICAgICAgICAgICAgMHgwOAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfRVZFTiAgICAgICAgICAgMHgxOAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfTUFSSyAgICAgICAgICAgMHgyOAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfU1BBQ0UgICAgICAgICAgMHgzOAotCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0RBVEFfNUJJVCAgICAgICAgICAgICAweDAKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfREFUQV82QklUICAgICAgICAgICAgIDB4MQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9EQVRBXzdCSVQgICAgICAgICAgICAgMHgyCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0RBVEFfOEJJVCAgICAgICAgICAgICAweDMKLQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9TVE9QXzFCSVQgICAgICAgICAgICAgMHgwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX1NUT1BfMkJJVCAgICAgICAgICAgICAweDQKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogPT09IENPTkZJRyA9PT0gKi8KLQotLyogW2pzdW5dIHdlIHVzZSB0aGUgc2Vjb25kIHNlcmlhbCBwb3J0IGZvciBrZGIgKi8KLSNkZWZpbmUgICAgICAgICBCQVNFICAgICAgICAgICAgICAgICAgICBPQ0VMT1RfU0VSSUFMMV9CQVNFCi0jZGVmaW5lICAgICAgICAgTUFYX0JBVUQgICAgICAgICAgICAgICAgT0NFTE9UX0JBU0VfQkFVRAotCi0vKiA9PT0gRU5EIE9GIENPTkZJRyA9PT0gKi8KLQotI2RlZmluZSAgICAgICAgIFJFR19PRkZTRVQgICAgICAgICAgICAgIDQKLQotLyogcmVnaXN0ZXIgb2Zmc2V0ICovCi0jZGVmaW5lICAgICAgICAgT0ZTX1JDVl9CVUZGRVIgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIE9GU19UUkFOU19IT0xEICAgICAgICAgIDAKLSNkZWZpbmUgICAgICAgICBPRlNfU0VORF9CVUZGRVIgICAgICAgICAwCi0jZGVmaW5lICAgICAgICAgT0ZTX0lOVFJfRU5BQkxFICAgICAgICAgKDEqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfSU5UUl9JRCAgICAgICAgICAgICAoMipSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19EQVRBX0ZPUk1BVCAgICAgICAgICgzKlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX0xJTkVfQ09OVFJPTCAgICAgICAgKDMqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfTU9ERU1fQ09OVFJPTCAgICAgICAoNCpSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19SUzIzMl9PVVRQVVQgICAgICAgICg0KlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX0xJTkVfU1RBVFVTICAgICAgICAgKDUqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfTU9ERU1fU1RBVFVTICAgICAgICAoNipSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19SUzIzMl9JTlBVVCAgICAgICAgICg2KlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX1NDUkFUQ0hfUEFEICAgICAgICAgKDcqUkVHX09GRlNFVCkKLQotI2RlZmluZSAgICAgICAgIE9GU19ESVZJU09SX0xTQiAgICAgICAgICgwKlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX0RJVklTT1JfTVNCICAgICAgICAgKDEqUkVHX09GRlNFVCkKLQotCi0vKiBtZW1vcnktbWFwcGVkIHJlYWQvd3JpdGUgb2YgdGhlIHBvcnQgKi8KLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUkVBRCh5KSAgICAoKigodm9sYXRpbGUgdWludDgqKShCQVNFICsgeSkpKQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9XUklURSh5LCB6KSAgKCgqKCh2b2xhdGlsZSB1aW50OCopKEJBU0UgKyB5KSkpID0geikKLQotdm9pZCBkZWJ1Z0luaXQodWludDMyIGJhdWQsIHVpbnQ4IGRhdGEsIHVpbnQ4IHBhcml0eSwgdWludDggc3RvcCkKLXsKLQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlVQVJUMTY1NTBfV1JJVEUoT0ZTX0lOVFJfRU5BQkxFLCAwKTsKLQotCS8qIHNldCB1cCBiYXVkIHJhdGUgKi8KLQl7Ci0JCXVpbnQzMiBkaXZpc29yOwotCi0JCS8qIHNldCBESUFCIGJpdCAqLwotCQlVQVJUMTY1NTBfV1JJVEUoT0ZTX0xJTkVfQ09OVFJPTCwgMHg4MCk7Ci0KLQkJLyogc2V0IGRpdmlzb3IgKi8KLQkJZGl2aXNvciA9IE1BWF9CQVVEIC8gYmF1ZDsKLQkJVUFSVDE2NTUwX1dSSVRFKE9GU19ESVZJU09SX0xTQiwgZGl2aXNvciAmIDB4ZmYpOwotCQlVQVJUMTY1NTBfV1JJVEUoT0ZTX0RJVklTT1JfTVNCLCAoZGl2aXNvciAmIDB4ZmYwMCkgPj4gOCk7Ci0KLQkJLyogY2xlYXIgRElBQiBiaXQgKi8KLQkJVUFSVDE2NTUwX1dSSVRFKE9GU19MSU5FX0NPTlRST0wsIDB4MCk7Ci0JfQotCi0JLyogc2V0IGRhdGEgZm9ybWF0ICovCi0JVUFSVDE2NTUwX1dSSVRFKE9GU19EQVRBX0ZPUk1BVCwgZGF0YSB8IHBhcml0eSB8IHN0b3ApOwotfQotCi1zdGF0aWMgaW50IHJlbW90ZURlYnVnSW5pdGlhbGl6ZWQgPSAwOwotCi11aW50OCBnZXREZWJ1Z0NoYXIodm9pZCkKLXsKLQlpZiAoIXJlbW90ZURlYnVnSW5pdGlhbGl6ZWQpIHsKLQkJcmVtb3RlRGVidWdJbml0aWFsaXplZCA9IDE7Ci0JCWRlYnVnSW5pdChVQVJUMTY1NTBfQkFVRF8zODQwMCwKLQkJCSAgVUFSVDE2NTUwX0RBVEFfOEJJVCwKLQkJCSAgVUFSVDE2NTUwX1BBUklUWV9OT05FLCBVQVJUMTY1NTBfU1RPUF8xQklUKTsKLQl9Ci0KLQl3aGlsZSAoKFVBUlQxNjU1MF9SRUFEKE9GU19MSU5FX1NUQVRVUykgJiAweDEpID09IDApOwotCXJldHVybiBVQVJUMTY1NTBfUkVBRChPRlNfUkNWX0JVRkZFUik7Ci19Ci0KLQotaW50IHB1dERlYnVnQ2hhcih1aW50OCBieXRlKQotewotCWlmICghcmVtb3RlRGVidWdJbml0aWFsaXplZCkgewotCQlyZW1vdGVEZWJ1Z0luaXRpYWxpemVkID0gMTsKLQkJZGVidWdJbml0KFVBUlQxNjU1MF9CQVVEXzM4NDAwLAotCQkJICBVQVJUMTY1NTBfREFUQV84QklULAotCQkJICBVQVJUMTY1NTBfUEFSSVRZX05PTkUsIFVBUlQxNjU1MF9TVE9QXzFCSVQpOwotCX0KLQotCXdoaWxlICgoVUFSVDE2NTUwX1JFQUQoT0ZTX0xJTkVfU1RBVFVTKSAmIDB4MjApID09IDApOwotCVVBUlQxNjU1MF9XUklURShPRlNfU0VORF9CVUZGRVIsIGJ5dGUpOwotCXJldHVybiAxOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2lycS5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvaXJxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYjQzMjUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyIE1vbWVudHVtIENvbXB1dGVyLCBJbmMuCi0gKiBBdXRob3I6IE1hdHRoZXcgRGhhcm0sIG1kaGFybUBtb21lbmNvLmNvbQotICoKLSAqIEJhc2VkIG9uIHdvcmsgYnk6Ci0gKiAgIENvcHlyaWdodCAoQykgMjAwMCBSaWRnZVJ1biwgSW5jLgotICogICBBdXRob3I6IFJpZGdlUnVuLCBJbmMuCi0gKiAgIGdsb25ub25AcmlkZ2VydW4uY29tLCBza3JhbnpAcmlkZ2VydW4uY29tLCBzdGV2ZWpAcmlkZ2VydW4uY29tCi0gKgotICogICBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqICAgQXV0aG9yOiBKdW4gU3VuLCBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogICBDb3B5cmlnaHQgKEMpIDIwMDAsIDAxLCAwNiBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotCi1hc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2godm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCk7Ci0KLQlpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQotCQlkb19JUlEoMCk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxKQotCQlkb19JUlEoMSk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAyKQotCQlkb19JUlEoMik7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAzKQotCQlkb19JUlEoMyk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA0KQotCQlkb19JUlEoNCk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA1KQotCQlkb19JUlEoNSk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA2KQotCQlkb19JUlEoNik7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA3KQotCQlsbF90aW1lcl9pbnRlcnJ1cHQoNyk7Ci0JZWxzZSB7Ci0JCS8qCi0JCSAqIE5vdyBsb29rIGF0IHRoZSBleHRlbmRlZCBpbnRlcnJ1cHRzCi0JCSAqLwotCQlwZW5kaW5nID0gKHJlYWRfYzBfY2F1c2UoKSAmIChyZWFkX2MwX2ludGNvbnRyb2woKSA8PCA4KSkgPj4gMTY7Ci0JCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDgpCi0JCQlsbF9tdjY0MzQwX2lycSgpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY2FzY2FkZV9tdjY0MzQwID0gewotCW5vX2FjdGlvbiwgSVJRRl9ESVNBQkxFRCwgQ1BVX01BU0tfTk9ORSwgIk1WNjQzNDAtQ2FzY2FkZSIsIE5VTEwsIE5VTEwKLX07Ci0KLXZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKLXsKLQkvKgotCSAqIENsZWFyIGFsbCBvZiB0aGUgaW50ZXJydXB0cyB3aGlsZSB3ZSBjaGFuZ2UgdGhlIGFibGUgYXJvdW5kIGEgYml0LgotCSAqIGludC1oYW5kbGVyIGlzIG5vdCBvbiBib290c3RyYXAKLQkgKi8KLQljbGVhcl9jMF9zdGF0dXMoU1QwX0lNKTsKLQotCW1pcHNfY3B1X2lycV9pbml0KCk7Ci0Jcm03a19jcHVfaXJxX2luaXQoKTsKLQotCS8qIHNldCB1cCB0aGUgY2FzY2FkaW5nIGludGVycnVwdHMgKi8KLQlzZXR1cF9pcnEoOCwgJmNhc2NhZGVfbXY2NDM0MCk7Ci0KLQltdjY0MzQwX2lycV9pbml0KDE2KTsKLQotCXNldF9jMF9zdGF0dXMoU1QwX0lNKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2phLWNvbnNvbGUuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2phLWNvbnNvbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMzMGI0Zi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9qYS1jb25zb2xlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwNCBSYWxmIEJhZWNobGUKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8bGludXgva2Rldl90Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0jaW5jbHVkZSA8YXNtL3NlcmlhbC5oPgotCi0vKiBTVVBFUklPIHVhcnQgcmVnaXN0ZXIgbWFwICovCi1zdHJ1Y3QgamFfdWFydHJlZ3MgewotCXVuaW9uIHsKLQkJdm9sYXRpbGUgdTgJcGFkMFszXTsKLQkJdm9sYXRpbGUgdTgJcmJyOwkvKiByZWFkIG9ubHksIERMQUIgPT0gMCAqLwotCQl2b2xhdGlsZSB1OAlwYWQxWzNdOwotCQl2b2xhdGlsZSB1OAl0aHI7CS8qIHdyaXRlIG9ubHksIERMQUIgPT0gMCAqLwotCQl2b2xhdGlsZSB1OAlwYWQyWzNdOwotCQl2b2xhdGlsZSB1OAlkbGw7CS8qIERMQUIgPT0gMSAqLwotCX0gdTE7Ci0JdW5pb24gewotCQl2b2xhdGlsZSB1OAlwYWQwWzNdOwotCQl2b2xhdGlsZSB1OAlpZXI7CS8qIERMQUIgPT0gMCAqLwotCQl2b2xhdGlsZSB1OAlwYWQxWzNdOwotCQl2b2xhdGlsZSB1OAlkbG07CS8qIERMQUIgPT0gMSAqLwotCX0gdTI7Ci0JdW5pb24gewotCQl2b2xhdGlsZSB1OAlwYWQwWzNdOwotCQl2b2xhdGlsZSB1OAlpaXI7CS8qIHJlYWQgb25seSAqLwotCQl2b2xhdGlsZSB1OAlwYWQxWzNdOwotCQl2b2xhdGlsZSB1OAlmY3I7CS8qIHdyaXRlIG9ubHkgKi8KLQl9IHUzOwotCXZvbGF0aWxlIHU4CXBhZDBbM107Ci0Jdm9sYXRpbGUgdTgJaXVfbGNyOwotCXZvbGF0aWxlIHU4CXBhZDFbM107Ci0Jdm9sYXRpbGUgdTgJaXVfbWNyOwotCXZvbGF0aWxlIHU4CXBhZDJbM107Ci0Jdm9sYXRpbGUgdTgJaXVfbHNyOwotCXZvbGF0aWxlIHU4CXBhZDNbM107Ci0Jdm9sYXRpbGUgdTgJaXVfbXNyOwotCXZvbGF0aWxlIHU4CXBhZDRbM107Ci0Jdm9sYXRpbGUgdTgJaXVfc2NyOwotfSBqYV91cmVnc190OwotCi0jZGVmaW5lIGl1X3JiciB1MS5yYnIKLSNkZWZpbmUgaXVfdGhyIHUxLnRocgotI2RlZmluZSBpdV9kbGwgdTEuZGxsCi0jZGVmaW5lIGl1X2llciB1Mi5pZXIKLSNkZWZpbmUgaXVfZGxtIHUyLmRsbQotI2RlZmluZSBpdV9paXIgdTMuaWlyCi0jZGVmaW5lIGl1X2ZjciB1My5mY3IKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdWFydF9iYXNlOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBqYV91YXJ0cmVncyAqY29uc29sZV91YXJ0KHZvaWQpCi17Ci0JcmV0dXJuIChzdHJ1Y3QgamFfdWFydHJlZ3MgKikgKHVhcnRfYmFzZSArIDB4MjNVTCk7Ci19Ci0KLXZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgYykKLXsKLQlzdHJ1Y3QgamFfdWFydHJlZ3MgKnVhcnQgPSBjb25zb2xlX3VhcnQoKTsKLQotCXdoaWxlICgodWFydC0+aXVfbHNyICYgMHgyMCkgPT0gMCk7Ci0JdWFydC0+aXVfdGhyID0gYzsKLX0KLQotc3RhdGljIHZvaWQgaW5saW5lIGphX2NvbnNvbGVfcHJvYmUodm9pZCkKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0IHVwOwotCi0JLyoKLQkgKiBSZWdpc3RlciB0byBpbnRlcnJ1cHQgemVybyBiZWNhdXNlIHdlIHNoYXJlIHRoZSBpbnRlcnJ1cHQgd2l0aAotCSAqIHRoZSBzZXJpYWwgZHJpdmVyIHdoaWNoIHdlIGRvbid0IHByb3Blcmx5IHN1cHBvcnQgeWV0LgotCSAqLwotCW1lbXNldCgmdXAsIDAsIHNpemVvZih1cCkpOwotCXVwLm1lbWJhc2UJPSAodW5zaWduZWQgY2hhciAqKSB1YXJ0X2Jhc2UgKyAweDIzVUw7Ci0JdXAuaXJxCQk9IEpBR1VBUl9BVFhfU0VSSUFMMV9JUlE7Ci0JdXAudWFydGNsawk9IEpBR1VBUl9BVFhfVUFSVF9DTEs7Ci0JdXAucmVnc2hpZnQJPSAyOwotCXVwLmlvdHlwZQk9IFVQSU9fTUVNOwotCXVwLmZsYWdzCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUOwotCXVwLmxpbmUJCT0gMDsKLQotCWlmIChlYXJseV9zZXJpYWxfc2V0dXAoJnVwKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJFYXJseSBzZXJpYWwgaW5pdCBvZiBwb3J0IDAgZmFpbGVkXG4iKTsKLX0KLQotX19pbml0IHZvaWQgamFfc2V0dXBfY29uc29sZSh2b2lkKQotewotCWphX2NvbnNvbGVfcHJvYmUoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L2phZ3Vhcl9hdHhfZnBnYS5oIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvamFndWFyX2F0eF9mcGdhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmY2OTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvamFndWFyX2F0eF9mcGdhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogSmFndWFyLUFUWCBCb2FyZCBSZWdpc3RlciBEZWZpbml0aW9ucwotICoKLSAqIChDKSAyMDAyIE1vbWVudHVtIENvbXB1dGVyIEluYy4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLSNpZm5kZWYgX19KQUdVQVJfQVRYX0ZQR0FfSF9fCi0jZGVmaW5lIF9fSkFHVUFSX0FUWF9GUEdBX0hfXwotCi0jZGVmaW5lIEpBR1VBUl9BVFhfUkVHX0JPQVJEUkVWCQkweDAKLSNkZWZpbmUgSkFHVUFSX0FUWF9SRUdfRlBHQV9SRVYJCTB4MQotI2RlZmluZSBKQUdVQVJfQVRYX1JFR19GUEdBX1RZUEUJMHgyCi0jZGVmaW5lIEpBR1VBUl9BVFhfUkVHX1JFU0VUX1NUQVRVUwkweDMKLSNkZWZpbmUgSkFHVUFSX0FUWF9SRUdfQk9BUkRfU1RBVFVTCTB4NAotI2RlZmluZSBKQUdVQVJfQVRYX1JFR19SRVNFUlZFRDEJMHg1Ci0jZGVmaW5lIEpBR1VBUl9BVFhfUkVHX1NFVAkJMHg2Ci0jZGVmaW5lIEpBR1VBUl9BVFhfUkVHX0NMUgkJMHg3Ci0jZGVmaW5lIEpBR1VBUl9BVFhfUkVHX0VFUFJPTV9NT0RFCTB4OQotI2RlZmluZSBKQUdVQVJfQVRYX1JFR19SRVNFUlZFRDIJMHhhCi0jZGVmaW5lIEpBR1VBUl9BVFhfUkVHX1JFU0VSVkVEMwkweGIKLSNkZWZpbmUgSkFHVUFSX0FUWF9SRUdfUkVTRVJWRUQ0CTB4YwotI2RlZmluZSBKQUdVQVJfQVRYX1JFR19QSFlfSU5UU1RBVAkweGQKLSNkZWZpbmUgSkFHVUFSX0FUWF9SRUdfUkVTRVJWRUQ1CTB4ZQotI2RlZmluZSBKQUdVQVJfQVRYX1JFR19SRVNFUlZFRDYJMHhmCi0KLSNkZWZpbmUgSkFHVUFSX0FUWF9DUzBfQUREUgkJMHhmYzAwMDAwMEwKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgamFfZnBnYV9iYXNlOwotCi0jZGVmaW5lIF9fRlBHQV9SRUdfVE9fQUREUihyZWcpCQkJCQkJXAotCSgodm9pZCAqKSBqYV9mcGdhX2Jhc2UgKyBKQUdVQVJfQVRYX1JFR18jI3JlZykKLSNkZWZpbmUgSkFHVUFSX0ZQR0FfV1JJVEUoeCwgcmVnKSB3cml0ZWIoeCwgX19GUEdBX1JFR19UT19BRERSKHJlZykpCi0jZGVmaW5lIEpBR1VBUl9GUEdBX1JFQUQocmVnKSByZWFkYihfX0ZQR0FfUkVHX1RPX0FERFIocmVnKSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvcGxhdGZvcm0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYxODQ0OC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9wbGF0Zm9ybS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXY2NDN4eC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSAiamFndWFyX2F0eF9mcGdhLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NVjY0M1hYX0VUSCkgfHwgZGVmaW5lZChDT05GSUdfTVY2NDNYWF9FVEhfTU9EVUxFKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG12NjQzeHhfZXRoX3NoYXJlZF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lICAgPSAiZXRoZXJuZXQgc2hhcmVkIGJhc2UiLAotCQkuc3RhcnQgID0gMHhmMTAwMDAwMCArIE1WNjQzWFhfRVRIX1NIQVJFRF9SRUdTLAotCQkuZW5kICAgID0gMHhmMTAwMDAwMCArIE1WNjQzWFhfRVRIX1NIQVJFRF9SRUdTICsKLQkJICAgICAgICAgICAgICAgICAgICAgICBNVjY0M1hYX0VUSF9TSEFSRURfUkVHU19TSVpFIC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdjY0M3h4X2V0aF9zaGFyZWRfZGV2aWNlID0gewotCS5uYW1lCQk9IE1WNjQzWFhfRVRIX1NIQVJFRF9OQU1FLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdjY0M3h4X2V0aF9zaGFyZWRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBtdjY0M3h4X2V0aF9zaGFyZWRfcmVzb3VyY2VzLAotfTsKLQotI2RlZmluZSBNVl9TUkFNX0JBU0UJCQkweGZlMDAwMDAwVUwKLSNkZWZpbmUgTVZfU1JBTV9TSVpFCQkJKDI1NiAqIDEwMjQpCi0KLSNkZWZpbmUgTVZfU1JBTV9SWFJJTkdfU0laRQkJKE1WX1NSQU1fU0laRSAvIDQpCi0jZGVmaW5lIE1WX1NSQU1fVFhSSU5HX1NJWkUJCShNVl9TUkFNX1NJWkUgLyA0KQotCi0jZGVmaW5lIE1WX1NSQU1fQkFTRV9FVEgwCQlNVl9TUkFNX0JBU0UKLSNkZWZpbmUgTVZfU1JBTV9CQVNFX0VUSDEJCShNVl9TUkFNX0JBU0UgKyAoTVZfU1JBTV9TSVpFIC8gMikpCi0KLSNkZWZpbmUgTVY2NHg2MF9JUlFfRVRIXzAgNDgKLSNkZWZpbmUgTVY2NHg2MF9JUlFfRVRIXzEgNDkKLSNkZWZpbmUgTVY2NHg2MF9JUlFfRVRIXzIgNTAKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0eDYwX2V0aDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZQk9ICJldGgwIGlycSIsCi0JCS5zdGFydAk9IE1WNjR4NjBfSVJRX0VUSF8wLAotCQkuZW5kCT0gTVY2NHg2MF9JUlFfRVRIXzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZXRoMF9wZCA9IHsKLQkucG9ydF9udW1iZXIJPSAwLAotCi0JLnR4X3NyYW1fYWRkcgk9IE1WX1NSQU1fQkFTRV9FVEgwLAotCS50eF9zcmFtX3NpemUJPSBNVl9TUkFNX1RYUklOR19TSVpFLAotCS50eF9xdWV1ZV9zaXplCT0gTVZfU1JBTV9UWFJJTkdfU0laRSAvIDE2LAotCi0JLnJ4X3NyYW1fYWRkcgk9IE1WX1NSQU1fQkFTRV9FVEgwICsgTVZfU1JBTV9UWFJJTkdfU0laRSwKLQkucnhfc3JhbV9zaXplCT0gTVZfU1JBTV9SWFJJTkdfU0laRSwKLQkucnhfcXVldWVfc2l6ZQk9IE1WX1NSQU1fUlhSSU5HX1NJWkUgLyAxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV0aDBfZGV2aWNlID0gewotCS5uYW1lCQk9IE1WNjQzWFhfRVRIX05BTUUsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12NjR4NjBfZXRoMF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG12NjR4NjBfZXRoMF9yZXNvdXJjZXMsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMF9wZCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0eDYwX2V0aDFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZQk9ICJldGgxIGlycSIsCi0JCS5zdGFydAk9IE1WNjR4NjBfSVJRX0VUSF8xLAotCQkuZW5kCT0gTVY2NHg2MF9JUlFfRVRIXzEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZXRoMV9wZCA9IHsKLQkucG9ydF9udW1iZXIJPSAxLAotCi0JLnR4X3NyYW1fYWRkcgk9IE1WX1NSQU1fQkFTRV9FVEgxLAotCS50eF9zcmFtX3NpemUJPSBNVl9TUkFNX1RYUklOR19TSVpFLAotCS50eF9xdWV1ZV9zaXplCT0gTVZfU1JBTV9UWFJJTkdfU0laRSAvIDE2LAotCi0JLnJ4X3NyYW1fYWRkcgk9IE1WX1NSQU1fQkFTRV9FVEgxICsgTVZfU1JBTV9UWFJJTkdfU0laRSwKLQkucnhfc3JhbV9zaXplCT0gTVZfU1JBTV9SWFJJTkdfU0laRSwKLQkucnhfcXVldWVfc2l6ZQk9IE1WX1NSQU1fUlhSSU5HX1NJWkUgLyAxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV0aDFfZGV2aWNlID0gewotCS5uYW1lCQk9IE1WNjQzWFhfRVRIX05BTUUsCi0JLmlkCQk9IDEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12NjR4NjBfZXRoMV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG12NjR4NjBfZXRoMV9yZXNvdXJjZXMsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMV9wZCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0eDYwX2V0aDJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZQk9ICJldGgyIGlycSIsCi0JCS5zdGFydAk9IE1WNjR4NjBfSVJRX0VUSF8yLAotCQkuZW5kCT0gTVY2NHg2MF9JUlFfRVRIXzIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZXRoMl9wZCA9IHsKLQkucG9ydF9udW1iZXIJPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXRoMl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gTVY2NDNYWF9FVEhfTkFNRSwKLQkuaWQJCT0gMiwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXY2NHg2MF9ldGgyX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gbXY2NHg2MF9ldGgyX3Jlc291cmNlcywKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZldGgyX3BkLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXY2NDN4eF9ldGhfcGRfZGV2c1tdIF9faW5pdGRhdGEgPSB7Ci0JJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCi0JJmV0aDBfZGV2aWNlLAotCSZldGgxX2RldmljZSwKLQkmZXRoMl9kZXZpY2UsCi19OwotCi1zdGF0aWMgdTggX19pbml0IGV4Y2hhbmdlX2JpdCh1OCB2YWwsIHU4IGNzKQotewotCS8qIHBsYWNlIHRoZSBkYXRhICovCi0JSkFHVUFSX0ZQR0FfV1JJVEUoKHZhbCA8PCAyKSB8IGNzLCBFRVBST01fTU9ERSk7Ci0JdWRlbGF5KDEpOwotCi0JLyogdHVybiB0aGUgY2xvY2sgb24gKi8KLQlKQUdVQVJfRlBHQV9XUklURSgodmFsIDw8IDIpIHwgY3MgfCAweDIsIEVFUFJPTV9NT0RFKTsKLQl1ZGVsYXkoMSk7Ci0KLQkvKiB0dXJuIHRoZSBjbG9jayBvZmYgYW5kIHJlYWQtc3Ryb2JlICovCi0JSkFHVUFSX0ZQR0FfV1JJVEUoKHZhbCA8PCAyKSB8IGNzIHwgMHgxMCwgRUVQUk9NX01PREUpOwotCi0JLyogcmV0dXJuIHRoZSBkYXRhICovCi0JcmV0dXJuIChKQUdVQVJfRlBHQV9SRUFEKEVFUFJPTV9NT0RFKSA+PiAzKSAmIDB4MTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGdldF9tYWMoY2hhciBkZXN0WzZdKQotewotCXU4IHJlYWRfb3Bjb2RlWzEyXSA9IHsxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKLQlpbnQgaSxqOwotCi0JZm9yIChpID0gMDsgaSA8IDEyOyBpKyspCi0JCWV4Y2hhbmdlX2JpdChyZWFkX29wY29kZVtpXSwgMSk7Ci0KLQlmb3IgKGogPSAwOyBqIDwgNjsgaisrKSB7Ci0JCWRlc3Rbal0gPSAwOwotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQlkZXN0W2pdIDw8PSAxOwotCQkJZGVzdFtqXSB8PSBleGNoYW5nZV9iaXQoMCwgMSk7Ci0JCX0KLQl9Ci0KLQkvKiB0dXJuIG9mZiBDUyAqLwotCWV4Y2hhbmdlX2JpdCgwLDApOwotfQotCi0vKgotICogQ29weSBhbmQgaW5jcmVtZW50IGV0aGVybmV0IE1BQyBhZGRyZXNzIGJ5IGEgc21hbGwgdmFsdWUuCi0gKgotICogVGhpcyBpcyB1c2VmdWwgZm9yIHN5c3RlbXMgd2hlcmUgdGhlIG9ubHkgb25lIE1BQyBhZGRyZXNzIGlzIHN0b3JlZCBpbgotICogbm9uLXZvbGF0aWxlIG1lbW9yeSBmb3IgbXVsdGlwbGUgcG9ydHMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBldGhfbWFjX2FkZCh1bnNpZ25lZCBjaGFyICpkc3QsIHVuc2lnbmVkIGNoYXIgKnNyYywKLQl1bnNpZ25lZCBpbnQgYWRkKQotewotCWludCBpOwotCi0JQlVHX09OKGFkZCA+PSAyNTYpOwotCi0JZm9yIChpID0gRVRIX0FMRU47IGkgPj0gMDsgaS0tKSB7Ci0JCWRzdFtpXSA9IHNyY1tpXSArIGFkZDsKLQkJYWRkID0gZHN0W2ldIDwgc3JjW2ldOwkJLyogY29tcHV0ZSBjYXJyeSAqLwotCX0KLQotCVdBUk5fT04oYWRkKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgbXY2NDN4eF9ldGhfYWRkX3Bkcyh2b2lkKQotewotCXVuc2lnbmVkIGNoYXIgbWFjW0VUSF9BTEVOXTsKLQlpbnQgcmV0OwotCi0JZ2V0X21hYyhtYWMpOwotCWV0aF9tYWNfYWRkKGV0aDBfcGQubWFjX2FkZHIsIG1hYywgMCk7Ci0JZXRoX21hY19hZGQoZXRoMV9wZC5tYWNfYWRkciwgbWFjLCAxKTsKLQlldGhfbWFjX2FkZChldGgyX3BkLm1hY19hZGRyLCBtYWMsIDIpOwotCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKG12NjQzeHhfZXRoX3BkX2RldnMsCi0JCQlBUlJBWV9TSVpFKG12NjQzeHhfZXRoX3BkX2RldnMpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWRldmljZV9pbml0Y2FsbChtdjY0M3h4X2V0aF9hZGRfcGRzKTsKLQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX01WNjQzWFhfRVRIKSB8fCBkZWZpbmVkKENPTkZJR19NVjY0M1hYX0VUSF9NT0RVTEUpICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9wcm9tLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9wcm9tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZDE1NGUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvcHJvbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwMiBNb21lbnR1bSBDb21wdXRlciBJbmMuCi0gKiBBdXRob3I6IE1hdHRoZXcgRGhhcm0gPG1kaGFybUBtb21lbmNvLmNvbT4KLSAqCi0gKiBMb3VpcyBIYW1pbHRvbiwgUmVkIEhhdCwgSW5jLgotICogaGFtaWx0b25AcmVkaGF0LmNvbSAgW01JUFM2NCBtb2RpZmljYXRpb25zXQotICoKLSAqIEJhc2VkIG9uIE9jZWxvdCBMaW51eCBwb3J0LCB3aGljaCBpcwotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEFkZGVkIGNoYW5nZXMgZm9yIFNNUCAtIE1hbmlzaCBMYWNod2FuaSAobGFjaHdhbmlAcG1jLXNpZXJyYS5jb20pCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL3Btb24uaD4KLQotI2luY2x1ZGUgImphZ3Vhcl9hdHhfZnBnYS5oIgotCi1leHRlcm4gdm9pZCBqYV9zZXR1cF9jb25zb2xlKHZvaWQpOwotCi1zdHJ1Y3QgY2FsbHZlY3RvcnMgKmRlYnVnX3ZlY3RvcnM7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGNwdV9jbG9jazsKLQotY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCi17Ci0JcmV0dXJuICJNb21lbnR1bSBKYWd1YXItQVRYIjsKLX0KLQotI2lmZGVmIENPTkZJR182NEJJVAotCi11bnNpZ25lZCBsb25nIHNpZ25leHQodW5zaWduZWQgbG9uZyBhZGRyKQotewotCWFkZHIgJj0gMHhmZmZmZmZmZjsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKChpbnQpYWRkcik7Ci19Ci0KLXZvaWQgKmdldF9hcmcodW5zaWduZWQgbG9uZyBhcmdzLCBpbnQgYXJjKQotewotCXVuc2lnbmVkIGxvbmcgdWw7Ci0JdW5zaWduZWQgY2hhciAqcHVjLCB1YzsKLQotCWFyZ3MgKz0gKGFyYyAqIDQpOwotCXVsID0gKHVuc2lnbmVkIGxvbmcpc2lnbmV4dChhcmdzKTsKLQlwdWMgPSAodW5zaWduZWQgY2hhciAqKXVsOwotCWlmIChwdWMgPT0gMCkKLQkJcmV0dXJuICh2b2lkICopMDsKLQotI2lmZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgotCXVjID0gKnB1YysrOwotCWwgPSAodW5zaWduZWQgbG9uZyl1YzsKLQl1YyA9ICpwdWMrKzsKLQl1bCB8PSAoKCh1bnNpZ25lZCBsb25nKXVjKSA8PCA4KTsKLQl1YyA9ICpwdWMrKzsKLQl1bCB8PSAoKCh1bnNpZ25lZCBsb25nKXVjKSA8PCAxNik7Ci0JdWMgPSAqcHVjKys7Ci0JdWwgfD0gKCgodW5zaWduZWQgbG9uZyl1YykgPDwgMjQpOwotI2Vsc2UKLQl1YyA9ICpwdWMrKzsKLQl1bCA9ICgodW5zaWduZWQgbG9uZyl1YykgPDwgMjQ7Ci0JdWMgPSAqcHVjKys7Ci0JdWwgfD0gKCgodW5zaWduZWQgbG9uZyl1YykgPDwgMTYpOwotCXVjID0gKnB1YysrOwotCXVsIHw9ICgoKHVuc2lnbmVkIGxvbmcpdWMpIDw8IDgpOwotCXVjID0gKnB1YysrOwotCXVsIHw9ICgodW5zaWduZWQgbG9uZyl1Yyk7Ci0jZW5kaWYKLQl1bCA9IHNpZ25leHQodWwpOwotCi0JcmV0dXJuICh2b2lkICopdWw7Ci19Ci0KLWNoYXIgKmFyZzY0KHVuc2lnbmVkIGxvbmcgYWRkcmluLCBpbnQgYXJnX2luZGV4KQotewotCXVuc2lnbmVkIGxvbmcgYXJnczsKLQljaGFyICpwOwotCi0JYXJncyA9IHNpZ25leHQoYWRkcmluKTsKLQlwID0gKGNoYXIgKilnZXRfYXJnKGFyZ3MsIGFyZ19pbmRleCk7Ci0KLQlyZXR1cm4gcDsKLX0KLSNlbmRpZiAgLyogQ09ORklHXzY0QklUICovCi0KLS8qIFBNT04gcGFzc2VzIGFyZ3VtZW50cyBpbiBDIG1haW4oKSBzdHlsZSAqLwotdm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpCi17Ci0JaW50IGFyZ2MgPSBmd19hcmcwOwotCWNoYXIgKiphcmcgPSAoY2hhciAqKikgZndfYXJnMTsKLQljaGFyICoqZW52ID0gKGNoYXIgKiopIGZ3X2FyZzI7Ci0Jc3RydWN0IGNhbGx2ZWN0b3JzICpjdiA9IChzdHJ1Y3QgY2FsbHZlY3RvcnMgKikgZndfYXJnMzsKLQlpbnQgaTsKLQotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0vLwlqYV9zZXR1cF9jb25zb2xlKCk7CS8qIFRoZSB2ZXJ5IGZpcnN0IHRoaW5nLiAgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHXzY0QklUCi0JY2hhciAqcHRyOwotCi0JcHJpbnRrKCJNaXBzNjQgSmFndWFyLUFUWFxuIik7Ci0JLyogc2F2ZSB0aGUgUFJPTSB2ZWN0b3JzIGZvciBkZWJ1Z2dpbmcgdXNlICovCi0JZGVidWdfdmVjdG9ycyA9IChzdHJ1Y3QgY2FsbHZlY3RvcnMgKilzaWduZXh0KCh1bnNpZ25lZCBsb25nKWN2KTsKLQotCS8qIGFyZ1swXSBpcyAiZyIsIHRoZSByZXN0IGlzIGJvb3QgcGFyYW1ldGVycyAqLwotCWFyY3NfY21kbGluZVswXSA9ICdcMCc7Ci0KLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7Ci0JCXB0ciA9IChjaGFyICopYXJnNjQoKHVuc2lnbmVkIGxvbmcpYXJnLCBpKTsKLQkJaWYgKChzdHJsZW4oYXJjc19jbWRsaW5lKSArIHN0cmxlbihwdHIpICsgMSkgPj0KLQkJICAgIHNpemVvZihhcmNzX2NtZGxpbmUpKQotCQkJYnJlYWs7Ci0JCXN0cmNhdChhcmNzX2NtZGxpbmUsIHB0cik7Ci0JCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgIik7Ci0JfQotCi0JaSA9IDA7Ci0Jd2hpbGUgKDEpIHsKLQkJcHRyID0gKGNoYXIgKilhcmc2NCgodW5zaWduZWQgbG9uZyllbnYsIGkpOwotCQlpZiAoISBwdHIpCi0JCQlicmVhazsKLQotCQlpZiAoc3RybmNtcCgiZ3RiYXNlIiwgcHRyLCBzdHJsZW4oImd0YmFzZSIpKSA9PSAwKSB7Ci0JCQltYXJ2ZWxsX2Jhc2UgPSBzaW1wbGVfc3RydG9sKHB0ciArIHN0cmxlbigiZ3RiYXNlPSIpLAotCQkJCQkJCU5VTEwsIDE2KTsKLQotCQkJaWYgKChtYXJ2ZWxsX2Jhc2UgJiAweGZmZmZmZmZmMDAwMDAwMDApID09IDApCi0JCQkJbWFydmVsbF9iYXNlIHw9IDB4ZmZmZmZmZmYwMDAwMDAwMDsKLQotCQkJcHJpbnRrKCJtYXJ2ZWxsX2Jhc2Ugc2V0IHRvIDB4JTAxNmx4XG4iLCBtYXJ2ZWxsX2Jhc2UpOwotCQl9Ci0JCWlmIChzdHJuY21wKCJjcHVjbG9jayIsIHB0ciwgc3RybGVuKCJjcHVjbG9jayIpKSA9PSAwKSB7Ci0JCQljcHVfY2xvY2sgPSBzaW1wbGVfc3RydG9sKHB0ciArIHN0cmxlbigiY3B1Y2xvY2s9IiksCi0JCQkJCQkJTlVMTCwgMTApOwotCQkJcHJpbnRrKCJjcHVfY2xvY2sgc2V0IHRvICVkXG4iLCBjcHVfY2xvY2spOwotCQl9Ci0JCWkrKzsKLQl9Ci0JcHJpbnRrKCJhcmNzX2NtZGxpbmU6ICVzXG4iLCBhcmNzX2NtZGxpbmUpOwotCi0jZWxzZSAgIC8qIENPTkZJR182NEJJVCAqLwotCS8qIHNhdmUgdGhlIFBST00gdmVjdG9ycyBmb3IgZGVidWdnaW5nIHVzZSAqLwotCWRlYnVnX3ZlY3RvcnMgPSBjdjsKLQotCS8qIGFyZ1swXSBpcyAiZyIsIHRoZSByZXN0IGlzIGJvb3QgcGFyYW1ldGVycyAqLwotCWFyY3NfY21kbGluZVswXSA9ICdcMCc7Ci0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQlpZiAoc3RybGVuKGFyY3NfY21kbGluZSkgKyBzdHJsZW4oYXJnW2ldICsgMSkKLQkJICAgID49IHNpemVvZihhcmNzX2NtZGxpbmUpKQotCQkJYnJlYWs7Ci0JCXN0cmNhdChhcmNzX2NtZGxpbmUsIGFyZ1tpXSk7Ci0JCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgIik7Ci0JfQotCi0Jd2hpbGUgKCplbnYpIHsKLQkJaWYgKHN0cm5jbXAoImd0YmFzZSIsICplbnYsIHN0cmxlbigiZ3RiYXNlIikpID09IDApIHsKLQkJCW1hcnZlbGxfYmFzZSA9IHNpbXBsZV9zdHJ0b2woKmVudiArIHN0cmxlbigiZ3RiYXNlPSIpLAotCQkJCQkJCU5VTEwsIDE2KTsKLQkJfQotCQlpZiAoc3RybmNtcCgiY3B1Y2xvY2siLCAqZW52LCBzdHJsZW4oImNwdWNsb2NrIikpID09IDApIHsKLQkJCWNwdV9jbG9jayA9IHNpbXBsZV9zdHJ0b2woKmVudiArIHN0cmxlbigiY3B1Y2xvY2s9IiksCi0JCQkJCQkJTlVMTCwgMTApOwotCQl9Ci0JCWVudisrOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KLQltaXBzX21hY2hncm91cCA9IE1BQ0hfR1JPVVBfTU9NRU5DTzsKLQltaXBzX21hY2h0eXBlID0gTUFDSF9NT01FTkNPX0pBR1VBUl9BVFg7Ci19Ci0KLXZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQotewotfQotCi12b2lkIF9faW5pdCBwcm9tX2ZpeHVwX21lbV9tYXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci19Ci0KLWludCBwcm9tX2Jvb3Rfc2Vjb25kYXJ5KGludCBjcHUsIHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZ3ApCi17Ci0JLyogQ2xlYXIgdGhlIHNlbWFwaG9yZSAqLwotCSoodm9sYXRpbGUgdWludDMyX3QgKikoMHhiYjAwMGE2OCkgPSAweDgwMDAwMDAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXZvaWQgcHJvbV9pbml0X3NlY29uZGFyeSh2b2lkKQotewotICAgICAgICBjbGVhcl9jMF9jb25maWcoQ09ORl9DTV9DTUFTSyk7Ci0gICAgICAgIHNldF9jMF9jb25maWcoMHgyKTsKLQotCWNsZWFyX2MwX3N0YXR1cyhTVDBfSU0pOwotCXNldF9jMF9zdGF0dXMoMHgxZmZmZik7Ci19Ci0KLXZvaWQgcHJvbV9zbXBfZmluaXNoKHZvaWQpCi17Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9yZXNldC5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvcmVzZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzczYjA4OS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9yZXNldC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3LCAyMDAxIFJhbGYgQmFlY2hsZQotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgTW9tZW50dW0gQ29tcHV0ZXIgSW5jLgotICogQXV0aG9yOiBNYXR0aGV3IERoYXJtIDxtZGhhcm1AbW9tZW5jby5jb20+Ci0gKgotICogTG91aXMgSGFtaWx0b24sIFJlZCBIYXQsIEluYy4KLSAqIGhhbWlsdG9uQHJlZGhhdC5jb20gIFtNSVBTNjQgbW9kaWZpY2F0aW9uc10KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vcmVib290Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLXZvaWQgbW9tZW5jb19qYWd1YXJfcmVzdGFydChjaGFyICpjb21tYW5kKQotewotCS8qIGJhc2UgYWRkcmVzcyBvZiB0aW1la2VlcGVyIHBvcnRpb24gb2YgcGFydCAqLwotI2lmZGVmIENPTkZJR182NEJJVAotCXZvaWQgKm52cmFtID0gKHZvaWQqKSAweGZmZmZmZmZmZmM4MDcwMDA7Ci0jZWxzZQotCXZvaWQgKm52cmFtID0gKHZvaWQqKSAweGZjODA3MDAwOwotI2VuZGlmCi0JLyogQXNrIHRoZSBOVlJBTS9SVEMvd2F0Y2hkb2cgY2hpcCB0byBhc3NlcnQgcmVzZXQgaW4gMS8xNiBzZWNvbmQgKi8KLQl3cml0ZWIoMHg4NCwgbnZyYW0gKyAweGZmNyk7Ci0KLQkvKiB3YWl0IGZvciB0aGUgd2F0Y2hkb2cgdG8gZ28gb2ZmICovCi0JbWRlbGF5KDEwMCsoMTAwMC8xNikpOwotCi0JLyogaWYgdGhlIHdhdGNoZG9nIGZhaWxzIGZvciBzb21lIHJlYXNvbiwgbGV0IHBlb3BsZSBrbm93ICovCi0JcHJpbnRrKEtFUk5fTk9USUNFICJXYXRjaGRvZyByZXNldCBmYWlsZWRcbiIpOwotfQotCi12b2lkIG1vbWVuY29famFndWFyX2hhbHQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuKiogWW91IGNhbiBzYWZlbHkgdHVybiBvZmYgdGhlIHBvd2VyXG4iKTsKLQl3aGlsZSAoMSkKLQkJX19hc21fXygiLnNldFx0bWlwczNcblx0IgotCSAgICAgICAgICAgICAgICAid2FpdFxuXHQiCi0JCQkiLnNldFx0bWlwczAiKTsKLX0KLQotdm9pZCBtb21lbmNvX2phZ3Vhcl9wb3dlcl9vZmYodm9pZCkKLXsKLQltb21lbmNvX2phZ3Vhcl9oYWx0KCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvc2V0dXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE1MTAxNC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDc1ICswLDAgQEAKLS8qCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqIE1vbWVudHVtIENvbXB1dGVyIEphZ3Vhci1BVFggYm9hcmQgZGVwZW5kZW50IGJvb3Qgcm91dGluZXMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDEsIDA0LCAwNiAgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAwIFJpZGdlUnVuLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDAyIE1vbWVudHVtIENvbXB1dGVyCi0gKgotICogQXV0aG9yOiBNYXR0aGV3IERoYXJtLCBNb21lbnR1bSBDb21wdXRlcgotICogICBtZGhhcm1AbW9tZW5jby5jb20KLSAqCi0gKiBMb3VpcyBIYW1pbHRvbiwgUmVkIEhhdCwgSW5jLgotICogICBoYW1pbHRvbkByZWRoYXQuY29tICBbTUlQUzY0IG1vZGlmaWNhdGlvbnNdCi0gKgotICogQXV0aG9yOiBSaWRnZVJ1biwgSW5jLgotICogICBnbG9ubm9uQHJpZGdlcnVuLmNvbSwgc2tyYW56QHJpZGdlcnVuLmNvbSwgc3RldmVqQHJpZGdlcnVuLmNvbQotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvYmNkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dhcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vcmVib290Lmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0KLSNpbmNsdWRlICJqYWd1YXJfYXR4X2ZwZ2EuaCIKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXY2NDM0MF9zcmFtX2Jhc2U7Ci11bnNpZ25lZCBsb25nIGNwdV9jbG9jazsKLQotLyogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGZvciByZWJvb3Rpbmcgb3IgaGFsdGluZyB0aGUgbWFjaGluZSovCi1leHRlcm4gdm9pZCBtb21lbmNvX2phZ3Vhcl9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpOwotZXh0ZXJuIHZvaWQgbW9tZW5jb19qYWd1YXJfaGFsdCh2b2lkKTsKLWV4dGVybiB2b2lkIG1vbWVuY29famFndWFyX3Bvd2VyX29mZih2b2lkKTsKLQotdm9pZCBtb21lbmNvX3RpbWVfaW5pdCh2b2lkKTsKLQotc3RhdGljIGNoYXIgcmVzZXRfcmVhc29uOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgRU5UUllMTyh1bnNpZ25lZCBsb25nIHBhZGRyKQotewotCXJldHVybiAoKHBhZGRyICYgUEFHRV9NQVNLKSB8Ci0JICAgICAgIChfUEFHRV9QUkVTRU5UIHwgX19SRUFEQUJMRSB8IF9fV1JJVEVBQkxFIHwgX1BBR0VfR0xPQkFMIHwKLQkJX0NBQ0hFX1VOQ0FDSEVEKSkgPj4gNjsKLX0KLQotdm9pZCBfX2luaXQgYnVzX2Vycm9yX2luaXQodm9pZCkgeyAvKiBub3RoaW5nICovIH0KLQotLyoKLSAqIExvYWQgYSBmZXcgVExCIGVudHJpZXMgZm9yIHRoZSBNVjY0MzQwIGFuZCBwZXJoaXBlcmFscy4gVGhlIE1WNjQzNDAgaXMgZ29pbmcKLSAqIHRvIGJlIGhpdCBvbiBldmVyeSBJUlEgYW55d2F5IC0gdGhlcmUncyBhYnNvbHV0ZWx5IG5vIHBvaW50IGluIGxldHRpbmcgaXQgYmUKLSAqIGEgcmFuZG9tIFRMQiBlbnRyeSwgYXMgaXQnbGwganVzdCBjYXVzZSBuZWVkbGVzcyBjaHVybmluZyBvZiB0aGUgVExCLiBBbmQgd2UKLSAqIHVzZSB0aGUgb3RoZXIgaGFsZiBmb3IgdGhlIHNlcmlhbCBwb3J0LCB3aGljaCBpcyBqdXN0IGEgUElUQSBvdGhlcndpc2UgOikKLSAqCi0gKglEZXZpY2UJCQlQaHlzaWNhbAlWaXJ0dWFsCi0gKglNVjY0MzQwIEludGVybmFsIFJlZ3MJMHhmNDAwMDAwMAkweGY0MDAwMDAwCi0gKglPY2Vsb3QtQ1tTXSBQTEQgKENTMCkJMHhmYzAwMDAwMAkweGZjMDAwMDAwCi0gKglOVlJBTSAoQ1MxKQkJMHhmYzgwMDAwMAkweGZjODAwMDAwCi0gKglVQVJUcyAoQ1MyKQkJMHhmZDAwMDAwMAkweGZkMDAwMDAwCi0gKglJbnRlcm5hbCBTUkFNCQkweGZlMDAwMDAwCTB4ZmUwMDAwMDAKLSAqCU0tU3lzdGVtcyBET0MgKENTMykJMHhmZjAwMDAwMAkweGZmMDAwMDAwCi0gKi8KLQotc3RhdGljIF9faW5pdCB2b2lkIHdpcmVfc3R1cGlkaXR5X2ludG9fdGxiKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHXzMyQklUCi0Jd3JpdGVfYzBfd2lyZWQoMCk7Ci0JbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwotCi0JLyogbWFydmVsbCBhbmQgZXh0cmEgc3BhY2UgKi8KLQlhZGRfd2lyZWRfZW50cnkoRU5UUllMTygweGY0MDAwMDAwKSwgRU5UUllMTygweGY0MDEwMDAwKSwKLQkgICAgICAgICAgICAgICAgMHhmNDAwMDAwMFVMLCBQTV82NEspOwotCS8qIGZwZ2EsIHJ0YywgYW5kIHVhcnQgKi8KLQlhZGRfd2lyZWRfZW50cnkoRU5UUllMTygweGZjMDAwMDAwKSwgRU5UUllMTygweGZkMDAwMDAwKSwKLQkgICAgICAgICAgICAgICAgMHhmYzAwMDAwMFVMLCBQTV8xNk0pOwotLy8JLyogbS1zeXMgYW5kIGludGVybmFsIFNSQU0gKi8KLS8vCWFkZF93aXJlZF9lbnRyeShFTlRSWUxPKDB4ZmUwMDAwMDApLCBFTlRSWUxPKDB4ZmYwMDAwMDApLAotLy8JICAgICAgICAgICAgICAgIDB4ZmUwMDAwMDBVTCwgUE1fMTZNKTsKLQotCW1hcnZlbGxfYmFzZSA9IDB4ZjQwMDAwMDA7Ci0JLy9tdjY0MzQwX3NyYW1fYmFzZSA9IDB4ZmUwMDAwMDA7CS8qIEN1cnJlbnRseSB1bnVzZWQgKi8KLSNlbmRpZgotfQotCi11bnNpZ25lZCBsb25nIG1hcnZlbGxfYmFzZQk9IDB4ZjQwMDAwMDBMOwotdW5zaWduZWQgbG9uZyBqYV9mcGdhX2Jhc2UJPSBKQUdVQVJfQVRYX0NTMF9BRERSOwotdW5zaWduZWQgbG9uZyB1YXJ0X2Jhc2UJCT0gMHhmZDAwMDAwMEw7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciAqcnRjX2Jhc2UJPSAodW5zaWduZWQgY2hhciopIDB4ZmM4MDAwMDBMOwotCi1FWFBPUlRfU1lNQk9MKG1hcnZlbGxfYmFzZSk7Ci0KLXN0YXRpYyBfX2luaXQgaW50IHBlcl9jcHVfbWFwcGluZ3Modm9pZCkKLXsKLQltYXJ2ZWxsX2Jhc2UJPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcCgweGY0MDAwMDAwLCAweDEwMDAwKTsKLQlqYV9mcGdhX2Jhc2UJPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcChKQUdVQVJfQVRYX0NTMF9BRERSLCAgMHgxMDAwKTsKLQl1YXJ0X2Jhc2UJPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcCgweGZkMDAwMDAwVUwsIDB4MTAwMCk7Ci0JcnRjX2Jhc2UJPSBpb3JlbWFwKDB4ZmMwMDAwMDBVTCwgMHg4MDAwKTsKLQkvLyBpb3JlbWFwKDB4ZmUwMDAwMDAsICAzMiA8PCAyMCk7Ci0Jd3JpdGVfYzBfd2lyZWQoMCk7Ci0JbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwotCWphX3NldHVwX2NvbnNvbGUoKTsKLQotCXJldHVybiAwOwotfQotYXJjaF9pbml0Y2FsbChwZXJfY3B1X21hcHBpbmdzKTsKLQotdW5zaWduZWQgbG9uZyBtNDh0Mzd5X2dldF90aW1lKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbiwgc2VjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQkvKiBzdG9wIHRoZSB1cGRhdGUgKi8KLQlydGNfYmFzZVsweDdmZjhdID0gMHg0MDsKLQotCXllYXIgPSBCQ0QyQklOKHJ0Y19iYXNlWzB4N2ZmZl0pOwotCXllYXIgKz0gQkNEMkJJTihydGNfYmFzZVsweDdmZjFdKSAqIDEwMDsKLQotCW1vbnRoID0gQkNEMkJJTihydGNfYmFzZVsweDdmZmVdKTsKLQotCWRheSA9IEJDRDJCSU4ocnRjX2Jhc2VbMHg3ZmZkXSk7Ci0KLQlob3VyID0gQkNEMkJJTihydGNfYmFzZVsweDdmZmJdKTsKLQltaW4gPSBCQ0QyQklOKHJ0Y19iYXNlWzB4N2ZmYV0pOwotCXNlYyA9IEJDRDJCSU4ocnRjX2Jhc2VbMHg3ZmY5XSk7Ci0KLQkvKiBzdGFydCB0aGUgdXBkYXRlICovCi0JcnRjX2Jhc2VbMHg3ZmY4XSA9IDB4MDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBta3RpbWUoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWluLCBzZWMpOwotfQotCi1pbnQgbTQ4dDM3eV9zZXRfdGltZSh1bnNpZ25lZCBsb25nIHNlYykKLXsKLQlzdHJ1Y3QgcnRjX3RpbWUgdG07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIGNvbnZlcnQgdG8gYSBtb3JlIHVzZWZ1bCBmb3JtYXQgLS0gbm90ZSBtb250aHMgY291bnQgZnJvbSAwICovCi0JdG9fdG0oc2VjLCAmdG0pOwotCXRtLnRtX21vbiArPSAxOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0JLyogZW5hYmxlIHdyaXRpbmcgKi8KLQlydGNfYmFzZVsweDdmZjhdID0gMHg4MDsKLQotCS8qIHllYXIgKi8KLQlydGNfYmFzZVsweDdmZmZdID0gQklOMkJDRCh0bS50bV95ZWFyICUgMTAwKTsKLQlydGNfYmFzZVsweDdmZjFdID0gQklOMkJDRCh0bS50bV95ZWFyIC8gMTAwKTsKLQotCS8qIG1vbnRoICovCi0JcnRjX2Jhc2VbMHg3ZmZlXSA9IEJJTjJCQ0QodG0udG1fbW9uKTsKLQotCS8qIGRheSAqLwotCXJ0Y19iYXNlWzB4N2ZmZF0gPSBCSU4yQkNEKHRtLnRtX21kYXkpOwotCi0JLyogaG91ci9taW4vc2VjICovCi0JcnRjX2Jhc2VbMHg3ZmZiXSA9IEJJTjJCQ0QodG0udG1faG91cik7Ci0JcnRjX2Jhc2VbMHg3ZmZhXSA9IEJJTjJCQ0QodG0udG1fbWluKTsKLQlydGNfYmFzZVsweDdmZjldID0gQklOMkJDRCh0bS50bV9zZWMpOwotCi0JLyogZGF5IG9mIHdlZWsgLS0gbm90IHJlYWxseSB1c2VkLCBidXQgbGV0J3Mga2VlcCBpdCB1cC10by1kYXRlICovCi0JcnRjX2Jhc2VbMHg3ZmZjXSA9IEJJTjJCQ0QodG0udG1fd2RheSArIDEpOwotCi0JLyogZGlzYWJsZSB3cml0aW5nICovCi0JcnRjX2Jhc2VbMHg3ZmY4XSA9IDB4MDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIF9faW5pdCBwbGF0X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKLXsKLQlzZXR1cF9pcnEoOCwgaXJxKTsKLX0KLQotLyoKLSAqIFVnbHkgYnV0IHRoZSBsZWFzdCBvZiBhbGwgZXZpbHMuICBUTEIgaW5pdGlhbGl6YXRpb24gZGlkIGZsdXNoIHRoZSBUTEIgc28KLSAqIFdlIG5lZWQgdG8gc2V0dXAgbWFwcGluZ3MgYWdhaW4gYmVmb3JlIHdlIGNhbiB0b3VjaCB0aGUgUlRDLgotICovCi12b2lkIG1vbWVuY29fdGltZV9pbml0KHZvaWQpCi17Ci0Jd2lyZV9zdHVwaWRpdHlfaW50b190bGIoKTsKLQotCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IGNwdV9jbG9jayAvIDI7Ci0KLQlydGNfbWlwc19nZXRfdGltZSA9IG00OHQzN3lfZ2V0X3RpbWU7Ci0JcnRjX21pcHNfc2V0X3RpbWUgPSBtNDh0Mzd5X3NldF90aW1lOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG12X3BjaV9pb19tZW0wX3Jlc291cmNlID0gewotCS5uYW1lCT0gIk1WNjQzNDAgUENJMCBJTyBNRU0iLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXZfcGNpX21lbTBfcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiTVY2NDM0MCBQQ0kwIE1FTSIsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXZfcGNpX2NvbnRyb2xsZXIgbXZfYnVzMF9jb250cm9sbGVyID0gewotCS5wY2ljID0gewotCQkucGNpX29wcwk9ICZtdl9wY2lfb3BzLAotCQkubWVtX3Jlc291cmNlCT0gJm12X3BjaV9tZW0wX3Jlc291cmNlLAotCQkuaW9fcmVzb3VyY2UJPSAmbXZfcGNpX2lvX21lbTBfcmVzb3VyY2UsCi0JfSwKLQkuY29uZmlnX2FkZHIJPSBNVjY0MzQwX1BDSV8wX0NPTkZJR19BRERSLAotCS5jb25maWdfdnJlZwk9IE1WNjQzNDBfUENJXzBfQ09ORklHX0RBVEFfVklSVFVBTF9SRUcsCi19OwotCi1zdGF0aWMgdWludDMyX3QgbXZfaW9fYmFzZSwgbXZfaW9fc2l6ZTsKLQotc3RhdGljIHZvaWQgamFfcGNpMF9pbml0KHZvaWQpCi17Ci0JdWludDMyX3QgbWVtMF9iYXNlLCBtZW0wX3NpemU7Ci0JdWludDMyX3QgaW9fYmFzZSwgaW9fc2l6ZTsKLQotCWlvX2Jhc2UgPSBNVl9SRUFEKE1WNjQzNDBfUENJXzBfSU9fQkFTRV9BRERSKSA8PCAxNjsKLQlpb19zaXplID0gKE1WX1JFQUQoTVY2NDM0MF9QQ0lfMF9JT19TSVpFKSArIDEpIDw8IDE2OwotCW1lbTBfYmFzZSA9IE1WX1JFQUQoTVY2NDM0MF9QQ0lfMF9NRU1PUlkwX0JBU0VfQUREUikgPDwgMTY7Ci0JbWVtMF9zaXplID0gKE1WX1JFQUQoTVY2NDM0MF9QQ0lfMF9NRU1PUlkwX1NJWkUpICsgMSkgPDwgMTY7Ci0KLQltdl9wY2lfaW9fbWVtMF9yZXNvdXJjZS5zdGFydAkJPSAwOwotCW12X3BjaV9pb19tZW0wX3Jlc291cmNlLmVuZAkJPSBpb19zaXplIC0gMTsKLQltdl9wY2lfbWVtMF9yZXNvdXJjZS5zdGFydAkJPSBtZW0wX2Jhc2U7Ci0JbXZfcGNpX21lbTBfcmVzb3VyY2UuZW5kCQk9IG1lbTBfYmFzZSArIG1lbTBfc2l6ZSAtIDE7Ci0JbXZfYnVzMF9jb250cm9sbGVyLnBjaWMubWVtX29mZnNldAk9IG1lbTBfYmFzZTsKLQltdl9idXMwX2NvbnRyb2xsZXIucGNpYy5pb19vZmZzZXQJPSAwOwotCi0JaW9wb3J0X3Jlc291cmNlLmVuZAkJPSBpb19zaXplIC0gMTsKLQotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZtdl9idXMwX2NvbnRyb2xsZXIucGNpYyk7Ci0KLQltdl9pb19iYXNlID0gaW9fYmFzZTsKLQltdl9pb19zaXplID0gaW9fc2l6ZTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdl9wY2lfaW9fbWVtMV9yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJNVjY0MzQwIFBDSTEgSU8gTUVNIiwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG12X3BjaV9tZW0xX3Jlc291cmNlID0gewotCS5uYW1lCT0gIk1WNjQzNDAgUENJMSBNRU0iLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi19OwotCi1zdGF0aWMgc3RydWN0IG12X3BjaV9jb250cm9sbGVyIG12X2J1czFfY29udHJvbGxlciA9IHsKLQkucGNpYyA9IHsKLQkJLnBjaV9vcHMJPSAmbXZfcGNpX29wcywKLQkJLm1lbV9yZXNvdXJjZQk9ICZtdl9wY2lfbWVtMV9yZXNvdXJjZSwKLQkJLmlvX3Jlc291cmNlCT0gJm12X3BjaV9pb19tZW0xX3Jlc291cmNlLAotCX0sCi0JLmNvbmZpZ19hZGRyCT0gTVY2NDM0MF9QQ0lfMV9DT05GSUdfQUREUiwKLQkuY29uZmlnX3ZyZWcJPSBNVjY0MzQwX1BDSV8xX0NPTkZJR19EQVRBX1ZJUlRVQUxfUkVHLAotfTsKLQotc3RhdGljIF9faW5pdCB2b2lkIGphX3BjaTFfaW5pdCh2b2lkKQotewotCXVpbnQzMl90IG1lbTBfYmFzZSwgbWVtMF9zaXplOwotCXVpbnQzMl90IGlvX2Jhc2UsIGlvX3NpemU7Ci0KLQlpb19iYXNlID0gTVZfUkVBRChNVjY0MzQwX1BDSV8xX0lPX0JBU0VfQUREUikgPDwgMTY7Ci0JaW9fc2l6ZSA9IChNVl9SRUFEKE1WNjQzNDBfUENJXzFfSU9fU0laRSkgKyAxKSA8PCAxNjsKLQltZW0wX2Jhc2UgPSBNVl9SRUFEKE1WNjQzNDBfUENJXzFfTUVNT1JZMF9CQVNFX0FERFIpIDw8IDE2OwotCW1lbTBfc2l6ZSA9IChNVl9SRUFEKE1WNjQzNDBfUENJXzFfTUVNT1JZMF9TSVpFKSArIDEpIDw8IDE2OwotCi0JLyoKLQkgKiBIZXJlIHdlIGFzc3VtZSB0aGUgSS9PIHdpbmRvdyBvZiBzZWNvbmQgYnVzIHRvIGJlIGNvbnRpZ3VvdXMgd2l0aAotCSAqIHRoZSBmaXJzdC4gIEEgZ2FwIGlzIG5vIHByb2JsZW0gYnV0IHdvdWxkIHdhc3RlIGFkZHJlc3Mgc3BhY2UgZm9yCi0JICogcmVtYXBwaW5nIHRoZSBwb3J0IHNwYWNlLgotCSAqLwotCW12X3BjaV9pb19tZW0xX3Jlc291cmNlLnN0YXJ0CQk9IG12X2lvX3NpemU7Ci0JbXZfcGNpX2lvX21lbTFfcmVzb3VyY2UuZW5kCQk9IG12X2lvX3NpemUgKyBpb19zaXplIC0gMTsKLQltdl9wY2lfbWVtMV9yZXNvdXJjZS5zdGFydAkJPSBtZW0wX2Jhc2U7Ci0JbXZfcGNpX21lbTFfcmVzb3VyY2UuZW5kCQk9IG1lbTBfYmFzZSArIG1lbTBfc2l6ZSAtIDE7Ci0JbXZfYnVzMV9jb250cm9sbGVyLnBjaWMubWVtX29mZnNldAk9IG1lbTBfYmFzZTsKLQltdl9idXMxX2NvbnRyb2xsZXIucGNpYy5pb19vZmZzZXQJPSAwOwotCi0JaW9wb3J0X3Jlc291cmNlLmVuZAkJPSBpb19iYXNlICsgaW9fc2l6ZSAtbXZfaW9fYmFzZSAtIDE7Ci0KLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmbXZfYnVzMV9jb250cm9sbGVyLnBjaWMpOwotCi0JbXZfaW9fc2l6ZSA9IGlvX2Jhc2UgKyBpb19zaXplIC0gbXZfaW9fYmFzZTsKLX0KLQotc3RhdGljIF9faW5pdCBpbnQgX19pbml0IGphX3BjaV9pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBpb192X2Jhc2U7Ci0JdWludDMyX3QgZW5hYmxlOwotCi0JZW5hYmxlID0gfk1WX1JFQUQoTVY2NDM0MF9CQVNFX0FERFJfRU5BQkxFKTsKLQotCS8qCi0JICogV2UgcmVxdWlyZSBhdCBsZWFzdCBvbmUgZW5hYmxlZCBJL08gb3IgUENJIG1lbW9yeSB3aW5kb3cgb3Igd2UKLQkgKiB3aWxsIGlnbm9yZSB0aGlzIFBDSSBidXMuICBXZSBpZ25vcmUgUENJIHdpbmRvd3MgMSwgMiBhbmQgMy4KLQkgKi8KLQlpZiAoZW5hYmxlICYgKDB4MDEgPDwgIDkpIHx8IGVuYWJsZSAmICgweDAxIDw8IDEwKSkKLQkJamFfcGNpMF9pbml0KCk7Ci0KLQlpZiAoZW5hYmxlICYgKDB4MDEgPDwgMTQpIHx8IGVuYWJsZSAmICgweDAxIDw8IDE1KSkKLQkJamFfcGNpMV9pbml0KCk7Ci0KLQlpZiAobXZfaW9fc2l6ZSkgewotCQlpb192X2Jhc2UgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcChtdl9pb19iYXNlLCBtdl9pb19zaXplKTsKLQkJaWYgKCFpb192X2Jhc2UpCi0JCQlwYW5pYygiQ291bGQgbm90IGlvcmVtYXAgSS9PIHBvcnQgcmFuZ2UiKTsKLQotCQlzZXRfaW9fcG9ydF9iYXNlKGlvX3ZfYmFzZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoamFfcGNpX2luaXQpOwotCi12b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQotewotCXVuc2lnbmVkIGludCB0bXB3b3JkOwotCi0JYm9hcmRfdGltZV9pbml0ID0gbW9tZW5jb190aW1lX2luaXQ7Ci0KLQlfbWFjaGluZV9yZXN0YXJ0ID0gbW9tZW5jb19qYWd1YXJfcmVzdGFydDsKLQlfbWFjaGluZV9oYWx0ID0gbW9tZW5jb19qYWd1YXJfaGFsdDsKLQlwbV9wb3dlcl9vZmYgPSBtb21lbmNvX2phZ3Vhcl9wb3dlcl9vZmY7Ci0KLQkvKgotCSAqIGluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWphZ3Vhcl9pbml0cmRfc3RhcnQ7Ci0JICogaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKWphZ3Vhcl9pbml0cmRfc3RhcnQgKyAodWxvbmcpamFndWFyX2luaXRyZF9zaXplOwotCSAqIGluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7Ci0JICovCi0KLQl3aXJlX3N0dXBpZGl0eV9pbnRvX3RsYigpOwotCi0JLyoKLQkgKiBzaHV0IGRvd24gZXRoZXJuZXQgcG9ydHMsIGp1c3QgdG8gYmUgc3VyZSBvdXIgbWVtb3J5IGRvZXNuJ3QgZ2V0Ci0JICogY29ycnVwdGVkIGJ5IHJhbmRvbSBldGhlcm5ldCB0cmFmZmljLgotCSAqLwotCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDApLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDIpLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMCksIDB4ZmYgPDwgOCk7Ci0JTVZfV1JJVEUoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSwgMHhmZiA8PCA4KTsKLQlNVl9XUklURShNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDIpLCAweGZmIDw8IDgpOwotCXdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMCkpICYgMHhmZik7Ci0Jd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSkgJiAweGZmKTsKLQl3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDIpKSAmIDB4ZmYpOwotCXdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDApKSAmIDB4ZmYpOwotCXdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpKSAmIDB4ZmYpOwotCXdoaWxlIChNVl9SRUFEKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDIpKSAmIDB4ZmYpOwotCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApLAotCSAgICAgICAgIE1WX1JFQUQoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMCkpICYgfjEpOwotCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDEpLAotCSAgICAgICAgIE1WX1JFQUQoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSkpICYgfjEpOwotCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDIpLAotCSAgICAgICAgIE1WX1JFQUQoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMikpICYgfjEpOwotCi0JLyogVHVybiBvZmYgdGhlIEJpdC1FcnJvciBMRUQgKi8KLQlKQUdVQVJfRlBHQV9XUklURSgweDgwLCBDTFIpOwotCi0JdG1wd29yZCA9IEpBR1VBUl9GUEdBX1JFQUQoQk9BUkRSRVYpOwotCWlmICh0bXB3b3JkIDwgMjYpCi0JCXByaW50aygiTW9tZW50dW0gSmFndWFyLUFUWDogQm9hcmQgQXNzZW1ibHkgUmV2LiAlY1xuIiwKLQkJCSdBJyt0bXB3b3JkKTsKLQllbHNlCi0JCXByaW50aygiTW9tZW50dW0gSmFndWFyLUFUWDogQm9hcmQgQXNzZW1ibHkgUmV2aXNpb24gIzB4JXhcbiIsCi0JCQl0bXB3b3JkKTsKLQotCXRtcHdvcmQgPSBKQUdVQVJfRlBHQV9SRUFEKEZQR0FfUkVWKTsKLQlwcmludGsoIkZQR0EgUmV2OiAlZC4lZFxuIiwgdG1wd29yZD4+NCwgdG1wd29yZCYxNSk7Ci0JdG1wd29yZCA9IEpBR1VBUl9GUEdBX1JFQUQoUkVTRVRfU1RBVFVTKTsKLQlwcmludGsoIlJlc2V0IHJlYXNvbjogMHgleFxuIiwgdG1wd29yZCk7Ci0Jc3dpdGNoICh0bXB3b3JkKSB7Ci0JY2FzZSAweDE6Ci0JCXByaW50aygiICAtIFBvd2VyLXVwIHJlc2V0XG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDI6Ci0JCXByaW50aygiICAtIFB1c2gtYnV0dG9uIHJlc2V0XG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDg6Ci0JCXByaW50aygiICAtIFdhdGNoZG9nIHJlc2V0XG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDEwOgotCQlwcmludGsoIiAgLSBKVEFHIHJlc2V0XG4iKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKCIgIC0gVW5rbm93biByZXNldCBjYXVzZVxuIik7Ci0JfQotCXJlc2V0X3JlYXNvbiA9IHRtcHdvcmQ7Ci0JSkFHVUFSX0ZQR0FfV1JJVEUoMHhmZiwgUkVTRVRfU1RBVFVTKTsKLQotCXRtcHdvcmQgPSBKQUdVQVJfRlBHQV9SRUFEKEJPQVJEX1NUQVRVUyk7Ci0JcHJpbnRrKCJCb2FyZCBTdGF0dXMgcmVnaXN0ZXI6IDB4JTAyeFxuIiwgdG1wd29yZCk7Ci0JcHJpbnRrKCIgIC0gVXNlciBqdW1wZXI6ICVzXG4iLCAodG1wd29yZCAmIDB4ODApPyJpbnN0YWxsZWQiOiJhYnNlbnQiKTsKLQlwcmludGsoIiAgLSBCb290IGZsYXNoIHdyaXRlIGp1bXBlcjogJXNcbiIsICh0bXB3b3JkJjB4NDApPyJpbnN0YWxsZWQiOiJhYnNlbnQiKTsKLQotCS8qIDI1Nk1pQiBvZiBSTTkwMDB4MiBERFIgKi8KLS8vCWFkZF9tZW1vcnlfcmVnaW9uKDB4MCwgMHgxMDA8PDIwLCBCT09UX01FTV9SQU0pOwotCi0JLyogMTI4TWlCIG9mIE1WLTY0MzQwIEREUiAqLwotLy8JYWRkX21lbW9yeV9yZWdpb24oMHgxMDA8PDIwLCAweDgwPDwyMCwgQk9PVF9NRU1fUkFNKTsKLQotCS8qIFhYWCBNZW1vcnkgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgcGlja2VkIHVwIGZyb20gUE1PTjJrICovCi0jaWZkZWYgQ09ORklHX0pBR1VBUl9ETUFMT1cKLQlwcmludGsoIkphZ3VhciBBVFggRE1BLWxvdyBtb2RlIHNldFxuIik7Ci0JYWRkX21lbW9yeV9yZWdpb24oMHgwMDAwMDAwMCwgMHgwODAwMDAwMCwgQk9PVF9NRU1fUkFNKTsKLQlhZGRfbWVtb3J5X3JlZ2lvbigweDA4MDAwMDAwLCAweDEwMDAwMDAwLCBCT09UX01FTV9SQU0pOwotI2Vsc2UKLQkvKiAxMjhNaUIgb2YgTVYtNjQzNDAgRERSIFJBTSAqLwotCXByaW50aygiSmFndWFyIEFUWCBETUEtbG93IG1vZGUgaXMgbm90IHNldFxuIik7Ci0JYWRkX21lbW9yeV9yZWdpb24oMHgxMDA8PDIwLCAweDgwPDwyMCwgQk9PVF9NRU1fUkFNKTsKLSNlbmRpZgotCi0jaWZkZWYgR0VNREVCVUdfVFJBQ0VCVUZGRVIKLQl7Ci0JICB1bnNpZ25lZCBpbnQgdGJDb250cm9sOwotCSAgdGJDb250cm9sID0KLQkgICAgMCA8PCAyNiB8ICAvKiBwb3N0IHRyaWdnZXIgZGVsYXkgMCAqLwotCQkgICAgMHgyIDw8IDE2IHwJCS8qIHNlcXVlbnRpYWwgdHJhY2UgbW9kZSAqLwotCSAgICAvLwkgICAgMHgwIDw8IDE2IHwJCS8qIG5vbi1zZXF1ZW50aWFsIHRyYWNlIG1vZGUgKi8KLQkgICAgLy8JICAgIDB4ZiA8PCA0IHwJCS8qIHdhdGNocG9pbnRzIGRpc2FibGVkICovCi0JICAgIDIgPDwgMiB8CQkvKiBhcm1lZCAqLwotCSAgICAyIDsJCQkvKiBpbnRlcnJ1cHQgZGlzYWJsZWQgICovCi0JICBwcmludGsgKCJzZXR0aW5nICAgICB0YkNvbnRyb2wgPSAlMDhseFxuIiwgdGJDb250cm9sKTsKLQkgIHdyaXRlXzMyYml0X2NwMF9zZXQxX3JlZ2lzdGVyKCQyMiwgdGJDb250cm9sKTsKLQkgIF9fYXNtX18gX192b2xhdGlsZV9fKCIuc2V0IG5vcmVvcmRlclxuXHQiIFwKLQkJCSAgICAgICAibm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDtcblx0IiBcCi0JCQkgICAgICAgIm5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7XG5cdCIgXAotCQkJICAgICAgICIuc2V0IHJlb3JkZXJcblx0Iik7Ci0KLQl9Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBhMDAzMC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIE1vbWVudHVtIENvbXB1dGVyJ3MgT2NlbG90LUcgYm9hcmQuCi0jCi0KLW9iai15CSAJCSs9IGlycS5vIGd0LWlycS5vIHByb20ubyByZXNldC5vIHNldHVwLm8KLW9iai0kKENPTkZJR19LR0RCKQkrPSBkYmdfaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2RiZ19pby5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2RiZ19pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmQ2ZmI0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9kYmdfaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0KLSNpbmNsdWRlIDxhc20vc2VyaWFsLmg+IC8qIEZvciB0aGUgc2VyaWFsIHBvcnQgbG9jYXRpb24gYW5kIGJhc2UgYmF1ZCAqLwotCi0vKiAtLS0gQ09ORklHIC0tLSAqLwotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDg7Ci10eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzI7Ci0KLS8qIC0tLSBFTkQgT0YgQ09ORklHIC0tLSAqLwotCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfMjQwMCAgICAgICAgICAgICAyNDAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfNDgwMCAgICAgICAgICAgICA0ODAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfOTYwMCAgICAgICAgICAgICA5NjAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfMTkyMDAgICAgICAgICAgICAxOTIwMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzM4NDAwICAgICAgICAgICAgMzg0MDAKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfQkFVRF81NzYwMCAgICAgICAgICAgIDU3NjAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfMTE1MjAwICAgICAgICAgICAxMTUyMDAKLQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfTk9ORSAgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfT0REICAgICAgICAgICAgMHgwOAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfRVZFTiAgICAgICAgICAgMHgxOAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfTUFSSyAgICAgICAgICAgMHgyOAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfU1BBQ0UgICAgICAgICAgMHgzOAotCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0RBVEFfNUJJVCAgICAgICAgICAgICAweDAKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfREFUQV82QklUICAgICAgICAgICAgIDB4MQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9EQVRBXzdCSVQgICAgICAgICAgICAgMHgyCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0RBVEFfOEJJVCAgICAgICAgICAgICAweDMKLQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9TVE9QXzFCSVQgICAgICAgICAgICAgMHgwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX1NUT1BfMkJJVCAgICAgICAgICAgICAweDQKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogPT09IENPTkZJRyA9PT0gKi8KLQotLyogW2pzdW5dIHdlIHVzZSB0aGUgc2Vjb25kIHNlcmlhbCBwb3J0IGZvciBrZGIgKi8KLSNkZWZpbmUgICAgICAgICBCQVNFICAgICAgICAgICAgICAgICAgICBPQ0VMT1RfU0VSSUFMMV9CQVNFCi0jZGVmaW5lICAgICAgICAgTUFYX0JBVUQgICAgICAgICAgICAgICAgT0NFTE9UX0JBU0VfQkFVRAotCi0vKiA9PT0gRU5EIE9GIENPTkZJRyA9PT0gKi8KLQotI2RlZmluZSAgICAgICAgIFJFR19PRkZTRVQgICAgICAgICAgICAgIDQKLQotLyogcmVnaXN0ZXIgb2Zmc2V0ICovCi0jZGVmaW5lICAgICAgICAgT0ZTX1JDVl9CVUZGRVIgICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIE9GU19UUkFOU19IT0xEICAgICAgICAgIDAKLSNkZWZpbmUgICAgICAgICBPRlNfU0VORF9CVUZGRVIgICAgICAgICAwCi0jZGVmaW5lICAgICAgICAgT0ZTX0lOVFJfRU5BQkxFICAgICAgICAgKDEqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfSU5UUl9JRCAgICAgICAgICAgICAoMipSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19EQVRBX0ZPUk1BVCAgICAgICAgICgzKlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX0xJTkVfQ09OVFJPTCAgICAgICAgKDMqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfTU9ERU1fQ09OVFJPTCAgICAgICAoNCpSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19SUzIzMl9PVVRQVVQgICAgICAgICg0KlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX0xJTkVfU1RBVFVTICAgICAgICAgKDUqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfTU9ERU1fU1RBVFVTICAgICAgICAoNipSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19SUzIzMl9JTlBVVCAgICAgICAgICg2KlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX1NDUkFUQ0hfUEFEICAgICAgICAgKDcqUkVHX09GRlNFVCkKLQotI2RlZmluZSAgICAgICAgIE9GU19ESVZJU09SX0xTQiAgICAgICAgICgwKlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX0RJVklTT1JfTVNCICAgICAgICAgKDEqUkVHX09GRlNFVCkKLQotCi0vKiBtZW1vcnktbWFwcGVkIHJlYWQvd3JpdGUgb2YgdGhlIHBvcnQgKi8KLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUkVBRCh5KSAgICAoKigodm9sYXRpbGUgdWludDgqKShCQVNFICsgeSkpKQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9XUklURSh5LCB6KSAgKCgqKCh2b2xhdGlsZSB1aW50OCopKEJBU0UgKyB5KSkpID0geikKLQotdm9pZCBkZWJ1Z0luaXQodWludDMyIGJhdWQsIHVpbnQ4IGRhdGEsIHVpbnQ4IHBhcml0eSwgdWludDggc3RvcCkKLXsKLQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlVQVJUMTY1NTBfV1JJVEUoT0ZTX0lOVFJfRU5BQkxFLCAwKTsKLQotCS8qIHNldCB1cCBiYXVkIHJhdGUgKi8KLQl7Ci0JCXVpbnQzMiBkaXZpc29yOwotCi0JCS8qIHNldCBESUFCIGJpdCAqLwotCQlVQVJUMTY1NTBfV1JJVEUoT0ZTX0xJTkVfQ09OVFJPTCwgMHg4MCk7Ci0KLQkJLyogc2V0IGRpdmlzb3IgKi8KLQkJZGl2aXNvciA9IE1BWF9CQVVEIC8gYmF1ZDsKLQkJVUFSVDE2NTUwX1dSSVRFKE9GU19ESVZJU09SX0xTQiwgZGl2aXNvciAmIDB4ZmYpOwotCQlVQVJUMTY1NTBfV1JJVEUoT0ZTX0RJVklTT1JfTVNCLCAoZGl2aXNvciAmIDB4ZmYwMCkgPj4gOCk7Ci0KLQkJLyogY2xlYXIgRElBQiBiaXQgKi8KLQkJVUFSVDE2NTUwX1dSSVRFKE9GU19MSU5FX0NPTlRST0wsIDB4MCk7Ci0JfQotCi0JLyogc2V0IGRhdGEgZm9ybWF0ICovCi0JVUFSVDE2NTUwX1dSSVRFKE9GU19EQVRBX0ZPUk1BVCwgZGF0YSB8IHBhcml0eSB8IHN0b3ApOwotfQotCi1zdGF0aWMgaW50IHJlbW90ZURlYnVnSW5pdGlhbGl6ZWQgPSAwOwotCi11aW50OCBnZXREZWJ1Z0NoYXIodm9pZCkKLXsKLQlpZiAoIXJlbW90ZURlYnVnSW5pdGlhbGl6ZWQpIHsKLQkJcmVtb3RlRGVidWdJbml0aWFsaXplZCA9IDE7Ci0JCWRlYnVnSW5pdChVQVJUMTY1NTBfQkFVRF8zODQwMCwKLQkJCSAgVUFSVDE2NTUwX0RBVEFfOEJJVCwKLQkJCSAgVUFSVDE2NTUwX1BBUklUWV9OT05FLCBVQVJUMTY1NTBfU1RPUF8xQklUKTsKLQl9Ci0KLQl3aGlsZSAoKFVBUlQxNjU1MF9SRUFEKE9GU19MSU5FX1NUQVRVUykgJiAweDEpID09IDApOwotCXJldHVybiBVQVJUMTY1NTBfUkVBRChPRlNfUkNWX0JVRkZFUik7Ci19Ci0KLQotaW50IHB1dERlYnVnQ2hhcih1aW50OCBieXRlKQotewotCWlmICghcmVtb3RlRGVidWdJbml0aWFsaXplZCkgewotCQlyZW1vdGVEZWJ1Z0luaXRpYWxpemVkID0gMTsKLQkJZGVidWdJbml0KFVBUlQxNjU1MF9CQVVEXzM4NDAwLAotCQkJICBVQVJUMTY1NTBfREFUQV84QklULAotCQkJICBVQVJUMTY1NTBfUEFSSVRZX05PTkUsIFVBUlQxNjU1MF9TVE9QXzFCSVQpOwotCX0KLQotCXdoaWxlICgoVUFSVDE2NTUwX1JFQUQoT0ZTX0xJTkVfU1RBVFVTKSAmIDB4MjApID09IDApOwotCVVBUlQxNjU1MF9XUklURShPRlNfU0VORF9CVUZGRVIsIGJ5dGUpOwotCXJldHVybiAxOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2d0LWlycS5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2d0LWlycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTU3NmJkLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9ndC1pcnEuYworKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKgotICoKLSAqIENvcHlyaWdodCAyMDAyIE1vbWVudHVtIENvbXB1dGVyCi0gKiBBdXRob3I6IG1kaGFybUBtb21lbmNvLmNvbQotICoKLSAqIGFyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9ndF9pcnEuYwotICogICAgIEludGVycnVwdCByb3V0aW5lcyBmb3IgZ3Q2NDI0MC4gIEN1cnJlbnRseSBpdCBvbmx5IGhhbmRsZXMgdGltZXIgaXJxLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8YXNtL2d0NjQyNDAuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotdW5zaWduZWQgbG9uZyBidXNfY2xvY2s7Ci0KLS8qCi0gKiBUaGVzZSBhcmUgaW50ZXJydXB0IGhhbmRsZXJzIGZvciB0aGUgR1Qgb24tY2hpcCBpbnRlcnJ1cHRzLiAgVGhleQotICogYWxsIGNvbWUgaW4gdG8gdGhlIE1JUFMgb24gYSBzaW5nbGUgaW50ZXJydXB0IGxpbmUsIGFuZCBoYXZlIHRvCi0gKiBiZSBoYW5kbGVkIGFuZCBhY2snZWQgZGlmZmVyZW50bHkgdGhhbiBvdGhlciBNSVBTIGludGVycnVwdHMuCi0gKi8KLQotI2lmIDAKLQotc3RydWN0IHRxX3N0cnVjdCBpcnFfaGFuZGxlcnNbTUFYX0NBVVNFX1JFR1NdW01BWF9DQVVTRV9SRUdfV0lEVEhdOwotdm9pZCBob29rX2lycV9oYW5kbGVyKGludCBpbnRfY2F1c2UsIGludCBiaXRfbnVtLCB2b2lkICppc3JfcHRyKTsKLQotLyoKLSAqIEhvb2tzIElSUSBoYW5kbGVyIHRvIHRoZSBzeXN0ZW0uIFdoZW4gdGhlIHN5c3RlbSBpcyBpbnRlcnJ1cHRlZAotICogdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgaXMgY2FsbGVkLgotICoKLSAqIElucHV0cyA6Ci0gKiBpbnRfY2F1c2UgLSBUaGUgaW50ZXJydXB0IGNhdXNlIG51bWJlci4gSW4gRVZCNjQxMjAgdHdvIHBhcmFtZXRlcnMKLSAqICAgICAgICAgICAgIGFyZSBkZWNsYXJlZCwgSU5UX0NBVVNFX01BSU4gYW5kIElOVF9DQVVTRV9ISUdILgotICogYml0X251bSAgIC0gSW5kaWNhdGVzIHdoaWNoIGJpdCBudW1iZXIgaW4gdGhlIGNhdXNlIHJlZ2lzdGVyCi0gKiBpc3JfcHRyICAgLSBQb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCi0gKi8KLXZvaWQgaG9va19pcnFfaGFuZGxlcihpbnQgaW50X2NhdXNlLCBpbnQgYml0X251bSwgdm9pZCAqaXNyX3B0cikKLXsKLQlpcnFfaGFuZGxlcnNbaW50X2NhdXNlXVtiaXRfbnVtXS5yb3V0aW5lID0gaXNyX3B0cjsKLX0KLQotCi0vKgotICogRW5hYmxlcyB0aGUgSVJRIG9uIEdhbGlsZW8gQ2hpcAotICoKLSAqIElucHV0cyA6Ci0gKiBpbnRfY2F1c2UgLSBUaGUgaW50ZXJydXB0IGNhdXNlIG51bWJlci4gSW4gRVZCNjQxMjAgdHdvIHBhcmFtZXRlcnMKLSAqICAgICAgICAgICAgIGFyZSBkZWNsYXJlZCwgSU5UX0NBVVNFX01BSU4gYW5kIElOVF9DQVVTRV9ISUdILgotICogYml0X251bSAgIC0gSW5kaWNhdGVzIHdoaWNoIGJpdCBudW1iZXIgaW4gdGhlIGNhdXNlIHJlZ2lzdGVyCi0gKgotICogT3V0cHV0cyA6Ci0gKiAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgZmFpbHVyZQotICovCi1pbnQgZW5hYmxlX2dhbGlsZW9faXJxKGludCBpbnRfY2F1c2UsIGludCBiaXRfbnVtKQotewotCWlmIChpbnRfY2F1c2UgPT0gSU5UX0NBVVNFX01BSU4pCi0JCVNFVF9SRUdfQklUUyhDUFVfSU5URVJSVVBUX01BU0tfUkVHSVNURVIsICgxIDw8IGJpdF9udW0pKTsKLQllbHNlIGlmIChpbnRfY2F1c2UgPT0gSU5UX0NBVVNFX0hJR0gpCi0JCVNFVF9SRUdfQklUUyhDUFVfSElHSF9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUiwKLQkJCSAgICAgKDEgPDwgYml0X251bSkpOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIERpc2FibGVzIHRoZSBJUlEgb24gR2FsaWxlbyBDaGlwCi0gKgotICogSW5wdXRzIDoKLSAqIGludF9jYXVzZSAtIFRoZSBpbnRlcnJ1cHQgY2F1c2UgbnVtYmVyLiBJbiBFVkI2NDEyMCB0d28gcGFyYW1ldGVycwotICogICAgICAgICAgICAgYXJlIGRlY2xhcmVkLCBJTlRfQ0FVU0VfTUFJTiBhbmQgSU5UX0NBVVNFX0hJR0guCi0gKiBiaXRfbnVtICAgLSBJbmRpY2F0ZXMgd2hpY2ggYml0IG51bWJlciBpbiB0aGUgY2F1c2UgcmVnaXN0ZXIKLSAqCi0gKiBPdXRwdXRzIDoKLSAqIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBmYWlsdXJlCi0gKi8KLWludCBkaXNhYmxlX2dhbGlsZW9faXJxKGludCBpbnRfY2F1c2UsIGludCBiaXRfbnVtKQotewotCWlmIChpbnRfY2F1c2UgPT0gSU5UX0NBVVNFX01BSU4pCi0JCVJFU0VUX1JFR19CSVRTKENQVV9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUiwKLQkJCSAgICAgICAoMSA8PCBiaXRfbnVtKSk7Ci0JZWxzZSBpZiAoaW50X2NhdXNlID09IElOVF9DQVVTRV9ISUdIKQotCQlSRVNFVF9SRUdfQklUUyhDUFVfSElHSF9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUiwKLQkJCSAgICAgICAoMSA8PCBiaXRfbnVtKSk7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLSNlbmRpZiAvKiAwICovCi0KLS8qCi0gKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgaW50ZXJydXB0cyBjb21pbmcgZnJvbSB0aGUgR2FsaWxlbyBjaGlwIHZpYSBQMF9JTlQjLgotICoKLSAqIFdlIHJvdXRlIHRoZSB0aW1lciBpbnRlcnJ1cHQgdG8gUDBfSU5UIyAoSVJRIDYpLCBhbmQgdGhhdCdzIGFsbCB0aGlzCi0gKiByb3V0aW5lIGNhbiBoYW5kbGUsIGZvciBub3cuCi0gKgotICogSW4gdGhlIGZ1dHVyZSwgd2UnbGwgcm91dGUgbW9yZSBpbnRlcnJ1cHRzIHRvIHRoaXMgcGluLCBhbmQgdGhhdCdzIHdoeQotICogd2Uga2VlcCB0aGlzIHBhcnRpY3VsYXIgc3RydWN0dXJlIGluIHRoZSBmdW5jdGlvbi4KLSAqLwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgZ3Q2NDI0MF9wMGludF9pcnEoaW50IGlycSwgdm9pZCAqZGV2KQotewotCXVpbnQzMl90IGlycV9zcmMsIGlycV9zcmNfbWFzazsKLQlpbnQgaGFuZGxlZDsKLQotCS8qIGdldCB0aGUgbG93IGludGVycnVwdCBjYXVzZSByZWdpc3RlciAqLwotCWlycV9zcmMgPSBNVl9SRUFEKExPV19JTlRFUlJVUFRfQ0FVU0VfUkVHSVNURVIpOwotCi0JLyogZ2V0IHRoZSBtYXNrIHJlZ2lzdGVyIGZvciB0aGlzIHBpbiAqLwotCWlycV9zcmNfbWFzayA9IE1WX1JFQUQoUENJXzBJTlRFUlJVUFRfQ0FVU0VfTUFTS19SRUdJU1RFUl9MT1cpOwotCi0JLyogbWFzayBvZmYgb25seSB0aGUgaW50ZXJydXB0cyB3ZSdyZSBpbnRlcmVzdGVkIGluICovCi0JaXJxX3NyYyA9IGlycV9zcmMgJiBpcnFfc3JjX21hc2s7Ci0KLQloYW5kbGVkID0gSVJRX05PTkU7Ci0KLQkvKiBDaGVjayBmb3IgdGltZXIgaW50ZXJydXB0ICovCi0JaWYgKGlycV9zcmMgJiAweDAwMDAwMTAwKSB7Ci0JCWhhbmRsZWQgPSBJUlFfSEFORExFRDsKLQkJaXJxX3NyYyAmPSB+MHgwMDAwMDEwMDsKLQotCQkvKiBDbGVhciBhbnkgcGVuZGluZyBjYXVzZSBiaXRzICovCi0JCU1WX1dSSVRFKFRJTUVSX0NPVU5URVJfMF8zX0lOVEVSUlVQVF9DQVVTRSwgMHgwKTsKLQotCQkvKiBoYW5kbGUgdGhlIHRpbWVyIGNhbGwgKi8KLQkJZG9fdGltZXIoMSk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQkJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKGdldF9pcnFfcmVncygpKSk7Ci0jZW5kaWYKLQl9Ci0KLQlpZiAoaXJxX3NyYykgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiVU5LTk9XTiBQMF9JTlQjIGludGVycnVwdCByZWNlaXZlZCwgaXJxX3NyYz0weCV4XG4iLAotCQkgICAgICAgaXJxX3NyYyk7Ci0JfQotCi0JcmV0dXJuIGhhbmRsZWQ7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplcyB0aW1lciB1c2luZyBnYWxpbGVvJ3MgYnVpbHQgaW4gdGltZXIuCi0gKi8KLQotLyoKLSAqIFRoaXMgd2lsbCBpZ25vcmUgdGhlIHN0YW5kYXJkIE1JUFMgdGltZXIgaW50ZXJydXB0IGhhbmRsZXIKLSAqIHRoYXQgaXMgcGFzc2VkIGluIGFzICppcnEgKD1pcnEwIGluIC4uL2tlcm5lbC90aW1lLmMpLgotICogV2Ugd2lsbCBkbyBvdXIgb3duIHRpbWVyIGludGVycnVwdCBoYW5kbGluZy4KLSAqLwotdm9pZCBndDY0MjQwX3RpbWVfaW5pdCh2b2lkKQotewotCXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyOwotCi0JLyogU3RvcCB0aGUgdGltZXIgLS0gd2UnbGwgdXNlIHRpbWVyICMwICovCi0JTVZfV1JJVEUoVElNRVJfQ09VTlRFUl8wXzNfQ09OVFJPTCwgMHgwKTsKLQotCS8qIExvYWQgdGltZXIgdmFsdWUgZm9yIDEwMCBIeiAqLwotCU1WX1dSSVRFKFRJTUVSX0NPVU5URVIwLCBidXNfY2xvY2sgLyAxMDApOwotCi0JLyoKLQkgKiBDcmVhdGUgdGhlIElSUSBzdHJ1Y3R1cmUgZW50cnkgZm9yIHRoZSB0aW1lci4gIFNpbmNlIHdlJ3JlIHRvbyBlYXJseQotCSAqIGluIHRoZSBib290IHByb2Nlc3MgdG8gdXNlIHRoZSAicmVxdWVzdF9pcnEoKSIgY2FsbCwgd2UnbGwgaGFyZC1jb2RlCi0JICogdGhlIHZhbHVlcyB0byB0aGUgY29ycmVjdCBpbnRlcnJ1cHQgbGluZS4KLQkgKi8KLQl0aW1lci5oYW5kbGVyID0gJmd0NjQyNDBfcDBpbnRfaXJxOwotCXRpbWVyLmZsYWdzID0gSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVEOwotCXRpbWVyLm5hbWUgPSAidGltZXIiOwotCXRpbWVyLmRldl9pZCA9IE5VTEw7Ci0JdGltZXIubmV4dCA9IE5VTEw7Ci0JdGltZXIubWFzayA9IENQVV9NQVNLX05PTkU7Ci0JaXJxX2Rlc2NbNl0uYWN0aW9uID0gJnRpbWVyOwotCi0JZW5hYmxlX2lycSg2KTsKLQotCS8qIENsZWFyIGFueSBwZW5kaW5nIGNhdXNlIGJpdHMgKi8KLQlNVl9XUklURShUSU1FUl9DT1VOVEVSXzBfM19JTlRFUlJVUFRfQ0FVU0UsIDB4MCk7Ci0KLQkvKiBFbmFibGUgdGhlIGludGVycnVwdCBmb3IgdGltZXIgMCAqLwotCU1WX1dSSVRFKFRJTUVSX0NPVU5URVJfMF8zX0lOVEVSUlVQVF9NQVNLLCAweDEpOwotCi0JLyogRW5hYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQgZm9yIEdULTY0MjQwIHBpbiBQMF9JTlQjICovCi0JTVZfV1JJVEUgKFBDSV8wSU5URVJSVVBUX0NBVVNFX01BU0tfUkVHSVNURVJfTE9XLCAweDEwMCk7Ci0KLQkvKiBDb25maWd1cmUgYW5kIHN0YXJ0IHRoZSB0aW1lciAqLwotCU1WX1dSSVRFKFRJTUVSX0NPVU5URVJfMF8zX0NPTlRST0wsIDB4Myk7Ci19Ci0KLXZvaWQgZ3Q2NDI0MF9pcnFfaW5pdCh2b2lkKQotewotI2lmIDAKLQlpbnQgaSwgajsKLQotCS8qIFJlc2V0IGlycSBoYW5kbGVycyBwb2ludGVycyB0byBOVUxMICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9DQVVTRV9SRUdTOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IE1BWF9DQVVTRV9SRUdfV0lEVEg7IGorKykgewotCQkJaXJxX2hhbmRsZXJzW2ldW2pdLm5leHQgPSBOVUxMOwotCQkJaXJxX2hhbmRsZXJzW2ldW2pdLnN5bmMgPSAwOwotCQkJaXJxX2hhbmRsZXJzW2ldW2pdLnJvdXRpbmUgPSBOVUxMOwotCQkJaXJxX2hhbmRsZXJzW2ldW2pdLmRhdGEgPSBOVUxMOwotCQl9Ci0JfQotI2VuZGlmIC8qIDAgKi8KLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9pcnEuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjczNTQxZi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBSaWRnZVJ1biwgSW5jLgotICogQXV0aG9yOiBSaWRnZVJ1biwgSW5jLgotICogICBnbG9ubm9uQHJpZGdlcnVuLmNvbSwgc2tyYW56QHJpZGdlcnVuLmNvbSwgc3RldmVqQHJpZGdlcnVuLmNvbQotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBKdW4gU3VuLCBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDAxLCAwNSBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLQotYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOwotCi0JaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKLQkJZG9fSVJRKDIpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMykKLQkJZG9fSVJRKDMpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNCkKLQkJZG9fSVJRKDQpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNSkKLQkJZG9fSVJRKDUpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNikKLQkJZG9fSVJRKDYpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKLQkJZG9fSVJRKDcpOwotCWVsc2UgewotCQkvKgotCQkgKiBOb3cgbG9vayBhdCB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0cwotCQkgKi8KLQkJcGVuZGluZyA9IChyZWFkX2MwX2NhdXNlKCkgJiAocmVhZF9jMF9pbnRjb250cm9sKCkgPDwgOCkpID4+IDE2OwotCi0JCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDgpCi0JCQlkb19JUlEoOCk7Ci0JCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQOSkKLQkJCWRvX0lSUSg5KTsKLQkJZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAxMCkKLQkJCWRvX0lSUSgxMCk7Ci0JCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMTEpCi0JCQlkb19JUlEoMTEpOwotCQllbHNlCi0JCQlzcHVyaW91c19pbnRlcnJ1cHQoKTsKLQl9Ci19Ci0KLWV4dGVybiB2b2lkIGd0NjQyNDBfaXJxX2luaXQodm9pZCk7Ci0KLXZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKLXsKLQkvKgotCSAqIENsZWFyIGFsbCBvZiB0aGUgaW50ZXJydXB0cyB3aGlsZSB3ZSBjaGFuZ2UgdGhlIGFibGUgYXJvdW5kIGEgYml0LgotCSAqIGludC1oYW5kbGVyIGlzIG5vdCBvbiBib290c3RyYXAKLQkgKi8KLQljbGVhcl9jMF9zdGF0dXMoU1QwX0lNKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0JbWlwc19jcHVfaXJxX2luaXQoKTsKLQlybTdrX2NwdV9pcnFfaW5pdCgpOwotCi0JZ3Q2NDI0MF9pcnFfaW5pdCgpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL29jZWxvdF9wbGQuaCBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9vY2Vsb3RfcGxkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZTA1MzQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL29jZWxvdF9wbGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBPY2Vsb3QgQm9hcmQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMKLSAqCi0gKiAoQykgMjAwMSBSZWQgSGF0LCBJbmMuCi0gKgotICogR1BMJ2QKLSAqLwotI2lmbmRlZiBfX01PTUVOQ09fT0NFTE9UX1BMRF9IX18KLSNkZWZpbmUgX19NT01FTkNPX09DRUxPVF9QTERfSF9fCi0KLSNkZWZpbmUgT0NFTE9UX0NTMF9BRERSICgweGZjMDAwMDAwKQotCi0jZGVmaW5lIE9DRUxPVF9SRUdfQk9BUkRSRVYgKDApCi0jZGVmaW5lIE9DRUxPVF9SRUdfUExEMV9JRCAoMSkKLSNkZWZpbmUgT0NFTE9UX1JFR19QTEQyX0lEICgyKQotI2RlZmluZSBPQ0VMT1RfUkVHX1JFU0VUX1NUQVRVUyAoMykKLSNkZWZpbmUgT0NFTE9UX1JFR19CT0FSRF9TVEFUVVMgKDQpCi0jZGVmaW5lIE9DRUxPVF9SRUdfQ1BDSV9JRCAoNSkKLSNkZWZpbmUgT0NFTE9UX1JFR19JMkNfQ1RSTCAoOCkKLSNkZWZpbmUgT0NFTE9UX1JFR19FRVBST01fTU9ERSAoOSkKLSNkZWZpbmUgT0NFTE9UX1JFR19JTlRNQVNLICgxMCkKLSNkZWZpbmUgT0NFTE9UX1JFR19JTlRTVEFUVVMgKDExKQotI2RlZmluZSBPQ0VMT1RfUkVHX0lOVFNFVCAoMTIpCi0jZGVmaW5lIE9DRUxPVF9SRUdfSU5UQ0xSICgxMykKLQotI2RlZmluZSBfX1BMRF9SRUdfVE9fQUREUihyZWcpICgodm9pZCAqKSBPQ0VMT1RfQ1MwX0FERFIgKyBPQ0VMT1RfUkVHXyMjcmVnKQotI2RlZmluZSBPQ0VMT1RfUExEX1dSSVRFKHgsIHJlZykgd3JpdGViKHgsIF9fUExEX1JFR19UT19BRERSKHJlZykpCi0jZGVmaW5lIE9DRUxPVF9QTERfUkVBRChyZWcpIHJlYWRiKF9fUExEX1JFR19UT19BRERSKHJlZykpCi0KLSNlbmRpZiAvKiBfX01PTUVOQ09fT0NFTE9UX1BMRF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9wcm9tLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvcHJvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzZkMDgzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9wcm9tLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDIgTW9tZW50dW0gQ29tcHV0ZXIgSW5jLgotICogQXV0aG9yOiBNYXR0aGV3IERoYXJtIDxtZGhhcm1AbW9tZW5jby5jb20+Ci0gKgotICogQmFzZWQgb24gT2NlbG90IExpbnV4IHBvcnQsIHdoaWNoIGlzCi0gKiBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjoganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLQotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxhc20vcG1vbi5oPgotI2luY2x1ZGUgPGFzbS9ndDY0MjQwLmg+Ci0KLSNpbmNsdWRlICJvY2Vsb3RfcGxkLmgiCi0KLXN0cnVjdCBjYWxsdmVjdG9ycyogZGVidWdfdmVjdG9yczsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWFydmVsbF9iYXNlOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYnVzX2Nsb2NrOwotCi0jaWZkZWYgQ09ORklHX0dBTElMRU9fR1Q2NDI0MF9FVEgKLWV4dGVybiB1bnNpZ25lZCBjaGFyIHByb21fbWFjX2FkZHJfYmFzZVs2XTsKLSNlbmRpZgotCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gIk1vbWVudHVtIE9jZWxvdCI7Ci19Ci0KLXZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQotewotCWludCBhcmdjID0gZndfYXJnMDsKLQljaGFyICoqYXJnID0gKGNoYXIgKiopIGZ3X2FyZzE7Ci0JY2hhciAqKmVudiA9IChjaGFyICoqKSBmd19hcmcyOwotCXN0cnVjdCBjYWxsdmVjdG9ycyAqY3YgPSAoc3RydWN0IGNhbGx2ZWN0b3JzICopIGZ3X2FyZzM7Ci0JaW50IGk7Ci0KLQkvKiBzYXZlIHRoZSBQUk9NIHZlY3RvcnMgZm9yIGRlYnVnZ2luZyB1c2UgKi8KLQlkZWJ1Z192ZWN0b3JzID0gY3Y7Ci0KLQkvKiBhcmdbMF0gaXMgImciLCB0aGUgcmVzdCBpcyBib290IHBhcmFtZXRlcnMgKi8KLQlhcmNzX2NtZGxpbmVbMF0gPSAnXDAnOwotCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLQkJaWYgKHN0cmxlbihhcmNzX2NtZGxpbmUpICsgc3RybGVuKGFyZ1tpXSArIDEpCi0JCSAgICA+PSBzaXplb2YoYXJjc19jbWRsaW5lKSkKLQkJCWJyZWFrOwotCQlzdHJjYXQoYXJjc19jbWRsaW5lLCBhcmdbaV0pOwotCQlzdHJjYXQoYXJjc19jbWRsaW5lLCAiICIpOwotCX0KLQotCW1pcHNfbWFjaGdyb3VwID0gTUFDSF9HUk9VUF9NT01FTkNPOwotCW1pcHNfbWFjaHR5cGUgPSBNQUNIX01PTUVOQ09fT0NFTE9UX0c7Ci0KLSNpZmRlZiBDT05GSUdfR0FMSUxFT19HVDY0MjQwX0VUSAotCS8qIGdldCB0aGUgYmFzZSBNQUMgYWRkcmVzcyBmb3Igb24tYm9hcmQgZXRoZXJuZXQgcG9ydHMgKi8KLQltZW1jcHkocHJvbV9tYWNfYWRkcl9iYXNlLCAodm9pZCopMHhmYzgwN2NmMiwgNik7Ci0jZW5kaWYKLQotCXdoaWxlICgqZW52KSB7Ci0JCWlmIChzdHJuY21wKCJndGJhc2UiLCAqZW52LCBzdHJsZW4oImd0YmFzZSIpKSA9PSAwKSB7Ci0JCQltYXJ2ZWxsX2Jhc2UgPSBzaW1wbGVfc3RydG9sKCplbnYgKyBzdHJsZW4oImd0YmFzZT0iKSwKLQkJCQkJCQlOVUxMLCAxNik7Ci0JCX0KLQkJaWYgKHN0cm5jbXAoImJ1c2Nsb2NrIiwgKmVudiwgc3RybGVuKCJidXNjbG9jayIpKSA9PSAwKSB7Ci0JCQlidXNfY2xvY2sgPSBzaW1wbGVfc3RydG9sKCplbnYgKyBzdHJsZW4oImJ1c2Nsb2NrPSIpLAotCQkJCQkJCU5VTEwsIDEwKTsKLQkJfQotCQllbnYrKzsKLQl9Ci19Ci0KLXZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQotewotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3Jlc2V0LmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvcmVzZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZkNDk5YS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvcmVzZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NywgMjAwMSBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKi8KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi12b2lkIG1vbWVuY29fb2NlbG90X3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKLXsKLQl2b2lkICpudnJhbSA9IGlvcmVtYXBfbm9jYWNoZSgweDJjODA3MDAwLCAweDEwMDApOwotCi0JaWYgKCFudnJhbSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgImlvcmVtYXAgb2YgcmVzZXQgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKLQkJcmV0dXJuOwotCX0KLQl3cml0ZWIoMHg4NCwgbnZyYW0gKyAweGZmNyk7IC8qIEFzayB0aGUgTlZSQU0vUlRDL3dhdGNoZG9nIGNoaXAgdG8KLQkJCQkJYXNzZXJ0IHJlc2V0IGluIDEvMTYgc2Vjb25kICovCi0JbWRlbGF5KDEwKygxMDAwLzE2KSk7Ci0JaW91bm1hcChudnJhbSk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJXYXRjaGRvZyByZXNldCBmYWlsZWRcbiIpOwotfQotCi12b2lkIG1vbWVuY29fb2NlbG90X2hhbHQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuKiogWW91IGNhbiBzYWZlbHkgdHVybiBvZmYgdGhlIHBvd2VyXG4iKTsKLQl3aGlsZSAoMSkKLQkJX19hc21fXygiLnNldFx0bWlwczNcblx0IgotCSAgICAgICAgICAgICAgICAid2FpdFxuXHQiCi0JCQkiLnNldFx0bWlwczAiKTsKLX0KLQotdm9pZCBtb21lbmNvX29jZWxvdF9wb3dlcl9vZmYodm9pZCkKLXsKLQltb21lbmNvX29jZWxvdF9oYWx0KCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvc2V0dXAuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGI2MzhhLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqIE1vbWVudHVtIENvbXB1dGVyIE9jZWxvdC1HIChDUDcwMDBHKSAtIGJvYXJkIGRlcGVuZGVudCBib290IHJvdXRpbmVzCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAyMDAxICBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMjAwMCBSaWRnZVJ1biwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDAxIFJlZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwMiBNb21lbnR1bSBDb21wdXRlcgotICoKLSAqIEF1dGhvcjogTWF0dGhldyBEaGFybSwgTW9tZW50dW0gQ29tcHV0ZXIKLSAqICAgbWRoYXJtQG1vbWVuY28uY29tCi0gKgotICogQXV0aG9yOiBSaWRnZVJ1biwgSW5jLgotICogICBnbG9ubm9uQHJpZGdlcnVuLmNvbSwgc2tyYW56QHJpZGdlcnVuLmNvbSwgc3RldmVqQHJpZGdlcnVuLmNvbQotICoKLSAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dhcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLQotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZ3Q2NDI0MC5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLQotI2luY2x1ZGUgIm9jZWxvdF9wbGQuaCIKLQotI2lmZGVmIENPTkZJR19HQUxJTEVPX0dUNjQyNDBfRVRICi1leHRlcm4gdW5zaWduZWQgY2hhciBwcm9tX21hY19hZGRyX2Jhc2VbNl07Ci0jZW5kaWYKLQotdW5zaWduZWQgbG9uZyBtYXJ2ZWxsX2Jhc2U7Ci0KLS8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBmb3IgcmVib290aW5nIG9yIGhhbHRpbmcgdGhlIG1hY2hpbmUqLwotZXh0ZXJuIHZvaWQgbW9tZW5jb19vY2Vsb3RfcmVzdGFydChjaGFyICpjb21tYW5kKTsKLWV4dGVybiB2b2lkIG1vbWVuY29fb2NlbG90X2hhbHQodm9pZCk7Ci1leHRlcm4gdm9pZCBtb21lbmNvX29jZWxvdF9wb3dlcl9vZmYodm9pZCk7Ci0KLWV4dGVybiB2b2lkIGd0NjQyNDBfdGltZV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgbW9tZW5jb19vY2Vsb3RfaXJxX3NldHVwKHZvaWQpOwotCi1zdGF0aWMgY2hhciByZXNldF9yZWFzb247Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIEVOVFJZTE8odW5zaWduZWQgbG9uZyBwYWRkcikKLXsKLQlyZXR1cm4gKChwYWRkciAmIFBBR0VfTUFTSykgfAotCSAgICAgICAoX1BBR0VfUFJFU0VOVCB8IF9fUkVBREFCTEUgfCBfX1dSSVRFQUJMRSB8IF9QQUdFX0dMT0JBTCB8Ci0JCV9DQUNIRV9VTkNBQ0hFRCkpID4+IDY7Ci19Ci0KLS8qIHNldHVwIGNvZGUgZm9yIGEgaGFuZG9mZiBmcm9tIGEgdmVyc2lvbiAyIFBNT04gMjAwMCBQUk9NICovCi12b2lkIFBNT05fdjJfc2V0dXAodm9pZCkKLXsKLQkvKiBBIHdpcmVkIFRMQiBlbnRyeSBmb3IgdGhlIEdUNjQyNDAgYW5kIHRoZSBzZXJpYWwgcG9ydC4gVGhlCi0JICAgR1Q2NDI0MCBpcyBnb2luZyB0byBiZSBoaXQgb24gZXZlcnkgSVJRIGFueXdheSAtIHRoZXJlJ3MKLQkgICBhYnNvbHV0ZWx5IG5vIHBvaW50IGluIGxldHRpbmcgaXQgYmUgYSByYW5kb20gVExCIGVudHJ5LCBhcwotCSAgIGl0J2xsIGp1c3QgY2F1c2UgbmVlZGxlc3MgY2h1cm5pbmcgb2YgdGhlIFRMQi4gQW5kIHdlIHVzZQotCSAgIHRoZSBvdGhlciBoYWxmIGZvciB0aGUgc2VyaWFsIHBvcnQsIHdoaWNoIGlzIGp1c3QgYSBQSVRBCi0JICAgb3RoZXJ3aXNlIDopCi0KLQkJRGV2aWNlCQkJUGh5c2ljYWwJVmlydHVhbAotCQlHVDY0MjQwIEludGVybmFsIFJlZ3MJMHhmNDAwMDAwMAkweGUwMDAwMDAwCi0JCVVBUlRzIChDUzIpCQkweGZkMDAwMDAwCTB4ZTAwMDEwMDAKLQkqLwotCWFkZF93aXJlZF9lbnRyeShFTlRSWUxPKDB4ZjQwMDAwMDApLCBFTlRSWUxPKDB4ZjQwMTAwMDApLAotCSAgICAgICAgICAgICAgICAweGY0MDAwMDAwLCBQTV82NEspOwotCWFkZF93aXJlZF9lbnRyeShFTlRSWUxPKDB4ZmQwMDAwMDApLCBFTlRSWUxPKDB4ZmQwMDEwMDApLAotCSAgICAgICAgICAgICAgICAweGZkMDAwMDAwLCBQTV80Syk7Ci0KLQkvKiBBbHNvIGEgdGVtcG9yYXJ5IGVudHJ5IHRvIGxldCB1cyB0YWxrIHRvIHRoZSBPY2Vsb3QgUExEIGFuZCBOVlJBTQotCSAgIGluIHRoZSBDU1swMTJdIHJlZ2lvbi4gV2UgY2FuJ3QgdXNlIGlvcmVtYXAoKSB5ZXQuIFRoZSBOVlJBTQotCSAgIGlzIGEgU1QgTTQ4VDM3WSwgd2hpY2ggaW5jbHVkZXMgTlZSQU0sIFJUQywgYW5kIFdhdGNoZG9nIGZ1bmN0aW9ucy4KLQotCQlPY2Vsb3QgUExEIChDUzApCTB4ZmMwMDAwMDAJMHhlMDAyMDAwMAotCQlOVlJBTSAoQ1MxKQkJMHhmYzgwMDAwMAkweGUwMDMwMDAwCi0JKi8KLQlhZGRfdGVtcG9yYXJ5X2VudHJ5KEVOVFJZTE8oMHhmYzAwMDAwMCksIEVOVFJZTE8oMHhmYzAxMDAwMCksCi0JICAgICAgICAgICAgICAgICAgICAweGZjMDAwMDAwLCBQTV82NEspOwotCWFkZF90ZW1wb3JhcnlfZW50cnkoRU5UUllMTygweGZjODAwMDAwKSwgRU5UUllMTygweGZjODEwMDAwKSwKLQkgICAgICAgICAgICAgICAgICAgIDB4ZmM4MDAwMDAsIFBNXzY0Syk7Ci0KLQltYXJ2ZWxsX2Jhc2UgPSAweGY0MDAwMDAwOwotfQotCi1leHRlcm4gaW50IHJtN2tfdGNhY2hlX2VuYWJsZWQ7Ci0KLS8qCi0gKiBUaGlzIHJ1bnMgaW4gS1NFRzEuIFNlZSB0aGUgdmVyYmlhZ2UgaW4gcm03ay5jOjpwcm9iZV9zY2FjaGUoKQotICovCi0jZGVmaW5lIFBhZ2VfSW52YWxpZGF0ZV9UIDB4MTYKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9sM2NhY2hlKHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlpbnQgcmVnaXN0ZXIgaTsKLQotCXByaW50aygiRW5hYmxpbmcgTDMgY2FjaGUuLi4iKTsKLQotCS8qIEVuYWJsZSB0aGUgTDMgY2FjaGUgaW4gdGhlIEdUNjQxMjBBJ3MgQ1BVIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KLQlNVl9XUklURSgwLCBNVl9SRUFEKDApIHwgKDE8PDE0KSk7Ci0KLQkvKiBFbmFibGUgdGhlIEwzIGNhY2hlIGluIHRoZSBDUFUgKi8KLQlzZXRfYzBfY29uZmlnKDE8PDEyIC8qIENPTkZfVEUgKi8pOwotCi0JLyogQ2xlYXIgdGhlIGNhY2hlICovCi0Jd3JpdGVfYzBfdGFnbG8oMCk7Ci0Jd3JpdGVfYzBfdGFnaGkoMCk7Ci0KLQlmb3IgKGk9MDsgaSA8IHNpemU7IGkrPSA0MDk2KSB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJCSIuc2V0IG5vcmVvcmRlclxuXHQiCi0JCQkiLnNldCBtaXBzM1xuXHQiCi0JCQkiY2FjaGUgJTEsICglMClcblx0IgotCQkJIi5zZXQgbWlwczBcblx0IgotCQkJIi5zZXQgcmVvcmRlciIKLQkJCToKLQkJCTogInIiIChLU0VHMEFERFIoaSkpLAotCQkJICAiaSIgKFBhZ2VfSW52YWxpZGF0ZV9UKSk7Ci0JfQotCi0JLyogTGV0IHRoZSBSTTcwMDAgTU0gY29kZSBrbm93IHRoYXQgdGhlIHRlcnRpYXJ5IGNhY2hlIGlzIGVuYWJsZWQgKi8KLQlybTdrX3RjYWNoZV9lbmFibGVkID0gMTsKLQotCXByaW50aygiRG9uZVxuIik7Ci19Ci0KLXZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQotewotfQotCi12b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQotewotCXZvaWQgKCpsM2Z1bmMpKHVuc2lnbmVkIGxvbmcpID0gKHZvaWQgKikgS1NFRzFBRERSKHNldHVwX2wzY2FjaGUpOwotCXVuc2lnbmVkIGludCB0bXB3b3JkOwotCi0JYm9hcmRfdGltZV9pbml0ID0gZ3Q2NDI0MF90aW1lX2luaXQ7Ci0KLQlfbWFjaGluZV9yZXN0YXJ0ID0gbW9tZW5jb19vY2Vsb3RfcmVzdGFydDsKLQlfbWFjaGluZV9oYWx0ID0gbW9tZW5jb19vY2Vsb3RfaGFsdDsKLQlwbV9wb3dlcl9vZmYgPSBtb21lbmNvX29jZWxvdF9wb3dlcl9vZmY7Ci0KLQkvKgotCSAqIGluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKW9jZWxvdF9pbml0cmRfc3RhcnQ7Ci0JICogaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKW9jZWxvdF9pbml0cmRfc3RhcnQgKyAodWxvbmcpb2NlbG90X2luaXRyZF9zaXplOwotCSAqIGluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7Ci0JICovCi0KLQkvKiBkbyBoYW5kb2ZmIHJlY29uZmlndXJhdGlvbiAqLwotCVBNT05fdjJfc2V0dXAoKTsKLQotI2lmZGVmIENPTkZJR19HQUxJTEVPX0dUNjQyNDBfRVRICi0JLyogZ2V0IHRoZSBtYWMgYWRkciAqLwotCW1lbWNweShwcm9tX21hY19hZGRyX2Jhc2UsICh2b2lkKikweGZjODA3Y2YyLCA2KTsKLSNlbmRpZgotCi0JLyogVHVybiBvZmYgdGhlIEJpdC1FcnJvciBMRUQgKi8KLQlPQ0VMT1RfUExEX1dSSVRFKDB4ODAsIElOVENMUik7Ci0KLQl0bXB3b3JkID0gT0NFTE9UX1BMRF9SRUFEKEJPQVJEUkVWKTsKLQlpZiAodG1wd29yZCA8IDI2KQotCQlwcmludGsoIk1vbWVuY28gT2NlbG90LUc6IEJvYXJkIEFzc2VtYmx5IFJldi4gJWNcbiIsICdBJyt0bXB3b3JkKTsKLQllbHNlCi0JCXByaW50aygiTW9tZW5jbyBPY2Vsb3QtRzogQm9hcmQgQXNzZW1ibHkgUmV2aXNpb24gIzB4JXhcbiIsIHRtcHdvcmQpOwotCi0JdG1wd29yZCA9IE9DRUxPVF9QTERfUkVBRChQTEQxX0lEKTsKLQlwcmludGsoIlBMRCAxIElEOiAlZC4lZFxuIiwgdG1wd29yZD4+NCwgdG1wd29yZCYxNSk7Ci0JdG1wd29yZCA9IE9DRUxPVF9QTERfUkVBRChQTEQyX0lEKTsKLQlwcmludGsoIlBMRCAyIElEOiAlZC4lZFxuIiwgdG1wd29yZD4+NCwgdG1wd29yZCYxNSk7Ci0JdG1wd29yZCA9IE9DRUxPVF9QTERfUkVBRChSRVNFVF9TVEFUVVMpOwotCXByaW50aygiUmVzZXQgcmVhc29uOiAweCV4XG4iLCB0bXB3b3JkKTsKLQlyZXNldF9yZWFzb24gPSB0bXB3b3JkOwotCU9DRUxPVF9QTERfV1JJVEUoMHhmZiwgUkVTRVRfU1RBVFVTKTsKLQotCXRtcHdvcmQgPSBPQ0VMT1RfUExEX1JFQUQoQk9BUkRfU1RBVFVTKTsKLQlwcmludGsoIkJvYXJkIFN0YXR1cyByZWdpc3RlcjogMHglMDJ4XG4iLCB0bXB3b3JkKTsKLQlwcmludGsoIiAgLSBVc2VyIGp1bXBlcjogJXNcbiIsICh0bXB3b3JkICYgMHg4MCk/Imluc3RhbGxlZCI6ImFic2VudCIpOwotCXByaW50aygiICAtIEJvb3QgZmxhc2ggd3JpdGUganVtcGVyOiAlc1xuIiwgKHRtcHdvcmQmMHg0MCk/Imluc3RhbGxlZCI6ImFic2VudCIpOwotCXByaW50aygiICAtIFR1bGlwIFBIWSAlcyBjb25uZWN0ZWRcbiIsICh0bXB3b3JkJjB4MTApPyJpcyI6Im5vdCIpOwotCXByaW50aygiICAtIEwzIENhY2hlIHNpemU6ICVkIE1pQlxuIiwgKDE8PCgodG1wd29yZCYxMikgPj4gMikpJn4xKTsKLQlwcmludGsoIiAgLSBTRFJBTSBzaXplOiAlZCBNaUJcbiIsIDE8PCg2Kyh0bXB3b3JkJjMpKSk7Ci0KLQlpZiAodG1wd29yZCYxMikKLQkJbDNmdW5jKCgxPDwoKCh0bXB3b3JkJjEyKSA+PiAyKSsyMCkpKTsKLQotCXN3aXRjaCh0bXB3b3JkICYzKSB7Ci0JY2FzZSAzOgotCQkvKiA1MTJNaUIgLS0gdHdvIGJhbmtzIG9mIDI1Nk1pQiAqLwotCQlhZGRfbWVtb3J5X3JlZ2lvbiggIDB4MDw8MjAsIDB4MTAwPDwyMCwgQk9PVF9NRU1fUkFNKTsKLS8qCi0JCWFkZF9tZW1vcnlfcmVnaW9uKDB4MTAwPDwyMCwgMHgxMDA8PDIwLCBCT09UX01FTV9SQU0pOwotKi8KLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkvKiAyNTZNaUIgLS0gdHdvIGJhbmtzIG9mIDEyOE1pQiAqLwotCQlhZGRfbWVtb3J5X3JlZ2lvbiggMHgwPDwyMCwgMHg4MDw8MjAsIEJPT1RfTUVNX1JBTSk7Ci0JCWFkZF9tZW1vcnlfcmVnaW9uKDB4ODA8PDIwLCAweDgwPDwyMCwgQk9PVF9NRU1fUkFNKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQkvKiAxMjhNaUIgLS0gNjRNaUIgcGVyIGJhbmsgKi8KLQkJYWRkX21lbW9yeV9yZWdpb24oIDB4MDw8MjAsIDB4NDA8PDIwLCBCT09UX01FTV9SQU0pOwotCQlhZGRfbWVtb3J5X3JlZ2lvbigweDQwPDwyMCwgMHg0MDw8MjAsIEJPT1RfTUVNX1JBTSk7Ci0JCWJyZWFrOwotCWNhc2UgMDoKLQkJLyogNjRNaUIgKi8KLQkJYWRkX21lbW9yeV9yZWdpb24oIDB4MDw8MjAsIDB4NDA8PDIwLCBCT09UX01FTV9SQU0pOwotCQlicmVhazsKLQl9Ci0KLQkvKiBGSVhNRTogRml4IHVwIHRoZSBEaXNrT25DaGlwIG1hcHBpbmcgKi8KLQlNVl9XUklURSgweDQ2OCwgMHhmZWY3Myk7Ci19Ci0KLS8qIFRoaXMgbmVlZHMgdG8gYmUgb25lIG9mIHRoZSBmaXJzdCBpbml0Y2FsbHMsIGJlY2F1c2Ugbm8gSS9PIHBvcnQgYWNjZXNzCi0gICBjYW4gd29yayBiZWZvcmUgdGhpcyAqLwotCi1zdGF0aWMgaW50IGlvX2Jhc2VfaW9yZW1hcCh2b2lkKQotewotCS8qIHdlJ3JlIG1hcHBpbmcgUENJIGFjY2Vzc2VzIGZyb20gMHhjMDAwMDAwMCB0byAweGYwMDAwMDAwICovCi0JdW5zaWduZWQgbG9uZyBpb19yZW1hcF9yYW5nZTsKLQotCWlvX3JlbWFwX3JhbmdlID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAoMHhjMDAwMDAwMCwgMHgzMDAwMDAwMCk7Ci0JaWYgKCFpb19yZW1hcF9yYW5nZSkKLQkJcGFuaWMoIkNvdWxkIG5vdCBpb3JlbWFwIEkvTyBwb3J0IHJhbmdlIik7Ci0KLQlzZXRfaW9fcG9ydF9iYXNlKGlvX3JlbWFwX3JhbmdlIC0gMHhjMDAwMDAwMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotbW9kdWxlX2luaXQoaW9fYmFzZV9pb3JlbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUgYi9hcmNoL21pcHMvcGNpL01ha2VmaWxlCmluZGV4IGRmNDg3YzAuLmFiYTNkYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQpAQCAtMzAsMTEgKzMwLDkgQEAKIG9iai0kKENPTkZJR19TT0NfQVUxNTUwKQkrPSBmaXh1cC1hdTEwMDAubyBvcHMtYXUxMDAwLm8KIG9iai0kKENPTkZJR19TT0NfUE5YODU1MCkJKz0gZml4dXAtcG54ODU1MC5vIG9wcy1wbng4NTUwLm8KIG9iai0kKENPTkZJR19NSVBTX01BTFRBKQkrPSBmaXh1cC1tYWx0YS5vCi1vYmotJChDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYKSs9IGZpeHVwLWphZ3Vhci5vCiBvYmotJChDT05GSUdfTU9NRU5DT19PQ0VMT1QpCSs9IGZpeHVwLW9jZWxvdC5vIHBjaS1vY2Vsb3Qubwogb2JqLSQoQ09ORklHX01PTUVOQ09fT0NFTE9UXzMpCSs9IGZpeHVwLW9jZWxvdDMubwogb2JqLSQoQ09ORklHX01PTUVOQ09fT0NFTE9UX0MpCSs9IGZpeHVwLW9jZWxvdC1jLm8gcGNpLW9jZWxvdC1jLm8KLW9iai0kKENPTkZJR19NT01FTkNPX09DRUxPVF9HKQkrPSBmaXh1cC1vY2Vsb3QtZy5vIHBjaS1vY2Vsb3QtZy5vCiBvYmotJChDT05GSUdfUE1DX1lPU0VNSVRFKQkrPSBmaXh1cC15b3NlbWl0ZS5vIG9wcy10aXRhbi5vIG9wcy10aXRhbi1odC5vIFwKIAkJCQkgICBwY2kteW9zZW1pdGUubwogb2JqLSQoQ09ORklHX1NHSV9JUDI3KQkJKz0gb3BzLWJyaWRnZS5vIHBjaS1pcDI3Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtY29iYWx0LmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWNvYmFsdC5jCmluZGV4IDdkNWY2YmIuLmQ1N2ZmZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtY29iYWx0LmMKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC1jb2JhbHQuYwpAQCAtMTcsOSArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC1jb2JhbHQvY29iYWx0Lmg+Ci0KLWV4dGVybiBpbnQgY29iYWx0X2JvYXJkX2lkOworI2luY2x1ZGUgPGNvYmFsdC5oPgogCiBzdGF0aWMgdm9pZCBxdWJlX3JhcV9nYWxpbGVvX2Vhcmx5X2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CkBAIC0xMTUsNiArMTEzLDI3IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQQ0lfREVWSUNFX0lEX01BUlZFTExfR1Q2NDExMSwKIAkgcXViZV9yYXFfZ2FsaWxlb19maXh1cCk7CiAKK2ludCBjb2JhbHRfYm9hcmRfaWQ7CisKK3N0YXRpYyB2b2lkIHF1YmVfcmFxX3ZpYV9ib2FyZF9pZF9maXh1cChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXU4IGlkOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFZJQV9DT0JBTFRfQlJEX0lEX1JFRywgJmlkKTsKKwlpZiAocmV0dmFsKSB7CisJCXBhbmljKCJDYW5ub3QgcmVhZCBib2FyZCBJRCIpOworCQlyZXR1cm47CisJfQorCisJY29iYWx0X2JvYXJkX2lkID0gVklBX0NPQkFMVF9CUkRfUkVHX3RvX0lEKGlkKTsKKworCXByaW50ayhLRVJOX0lORk8gIkNvYmFsdCBib2FyZCBJRDogJWRcbiIsIGNvYmFsdF9ib2FyZF9pZCk7Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzAsCisJIHF1YmVfcmFxX3ZpYV9ib2FyZF9pZF9maXh1cCk7CisKIHN0YXRpYyBjaGFyIGlycV90YWJfcXViZTFbXSBfX2luaXRkYXRhID0gewogICBbQ09CQUxUX1BDSUNPTkZfQ1BVXSAgICAgPSAwLAogICBbQ09CQUxUX1BDSUNPTkZfRVRIMF0gICAgPSBDT0JBTFRfUVVCRTFfRVRIMF9JUlEsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWphZ3Vhci5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC1qYWd1YXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM1ZTFkNC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWphZ3Vhci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIE1hcnZlbGwgTVY2NDM0MCBpbnRlcnJ1cHQgZml4dXAgY29kZS4KLSAqCi0gKiBNYXJ2ZWxsIHdhbnRzIGFuIE5EQSBmb3IgdGhlaXIgZG9jcyBzbyB0aGlzIHdhcyB3cml0dGVuIHdpdGhvdXQKLSAqIGRvY3VtZW50YXRpb24uICBZb3UndmUgYmVlbiB3YXJuZWQuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLQotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotCi0vKgotICogV0FSTklORzogRXhhbXBsZSBvZiBob3cgX05PVF8gdG8gZG8gaXQuCi0gKi8KLWludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKLXsKLQlpbnQgYnVzID0gZGV2LT5idXMtPm51bWJlcjsKLQotCWlmIChidXMgPT0gMCAmJiBzbG90ID09IDEpCi0JCXJldHVybiAzOwkvKiBQQ0ktWCBBICovCi0JaWYgKGJ1cyA9PSAwICYmIHNsb3QgPT0gMikKLQkJcmV0dXJuIDQ7CS8qIFBDSS1YIEIgKi8KLQlpZiAoYnVzID09IDEgJiYgc2xvdCA9PSAxKQotCQlyZXR1cm4gNTsJLyogUENJIEEgKi8KLQlpZiAoYnVzID09IDEgJiYgc2xvdCA9PSAyKQotCQlyZXR1cm4gNjsJLyogUENJIEIgKi8KLQotcmV0dXJuIDA7Ci0JcGFuaWMoIldob29vcHMgaW4gcGNpYmlvc19tYXBfaXJxIik7Ci19Ci0KLS8qIERvIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0aWFsaXphdGlvbiBhdCBwY2lfZW5hYmxlX2RldmljZSgpIHRpbWUgKi8KLWludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtb2NlbG90LWcuYyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtb2NlbG90LWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdhNjUyZS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLW9jZWxvdC1nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQotICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLWludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKLXsKLQlpbnQgYnVzID0gZGV2LT5idXMtPm51bWJlcjsKLQotCWlmIChidXMgPT0gMCAmJiBzbG90ID09IDEpCS8qIEludGVsIDgyNTQzIEdpZ2FiaXQgTUFDICovCi0JCXJldHVybiAyOwkJLyogaXJxX25yIGlzIDIgZm9yIElOVDAgKi8KLQotCWlmIChidXMgPT0gMCAmJiBzbG90ID09IDIpCS8qIEludGVsIDgyNTQzIEdpZ2FiaXQgTUFDICovCi0JCXJldHVybiAzOwkJLyogaXJxX25yIGlzIDMgZm9yIElOVDEgKi8KLQotCWlmIChidXMgPT0gMSAmJiBzbG90ID09IDMpCS8qIEludGVsIDIxNTU1IGJyaWRnZSAqLwotCQlyZXR1cm4gNTsJCS8qIGlycV9uciBpcyA4IGZvciBJTlQ2ICovCi0KLQlpZiAoYnVzID09IDEgJiYgc2xvdCA9PSA0KQkvKiBQTUMgU2xvdCAqLwotCQlyZXR1cm4gOTsJCS8qIGlycV9uciBpcyA5IGZvciBJTlQ3ICovCi0KLQlyZXR1cm4gLTE7Ci19Ci0KLS8qIERvIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0aWFsaXphdGlvbiBhdCBwY2lfZW5hYmxlX2RldmljZSgpIHRpbWUgKi8KLWludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtc2IxMjUwLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLXNiMTI1MC5jCmluZGV4IDdhNzQ0NDguLjBhZDM5ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtc2IxMjUwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC1zYjEyNTAuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAvKgotICogU2V0IHRoZSB0aGUgQkNNMTI1MCwgZXRjLiBQQ0kgaG9zdCBicmlkZ2UncyBUUkRZIHRpbWVvdXQKKyAqIFNldCB0aGUgQkNNMTI1MCwgZXRjLiBQQ0kgaG9zdCBicmlkZ2UncyBUUkRZIHRpbWVvdXQKICAqIHRvIHRoZSBmaW5pdGUgbWF4LgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfc2IxMjUwX3BjaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQpAQCAtMzUsNyArMzUsNyBAQAogCQkJcXVpcmtfc2IxMjUwX2h0KTsKIAogLyoKLSAqIFNldCB0aGUgdGhlIFNQMTAxMSBIVC9QQ0kgYnJpZGdlJ3MgVFJEWSB0aW1lb3V0IHRvIHRoZSBmaW5pdGUgbWF4LgorICogU2V0IHRoZSBTUDEwMTEgSFQvUENJIGJyaWRnZSdzIFRSRFkgdGltZW91dCB0byB0aGUgZmluaXRlIG1heC4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IHF1aXJrX3NwMTAxMShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktb2NlbG90LWcuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jZWxvdC1nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMzQzMDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktb2NlbG90LWcuYworKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQotICoKLSAqIFRoaXMgZG9lc24ndCByZWFsbHkgZmx5IC0gYnV0IEkgZG9uJ3QgaGF2ZSBhIEdUNjQyNDAgc3lzdGVtIGZvciB0ZXN0aW5nLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2d0NjQyNDAuaD4KLQotLyoKLSAqIFdlIGFzc3VtZSB0aGVzZSBhZGRyZXNzIHJhbmdlcyBoYXZlIGJlZW4gcHJvZ3JhbW1lZCBpbnRvIHRoZSBHVC02NDI0MCBieQotICogdGhlIGZpcm13YXJlLiAgUE1PTiBpbiBjYXNlIG9mIHRoZSBPY2Vsb3QgRyBkb2VzIHRoYXQuICBOb3RlIHRoZSBzaXplIG9mCi0gKiB0aGUgSS9PIHJhbmdlIGlzIGNvbXBsZXRseSBzdHVwaWQ7IEkvTyBtYXBwaW5ncyBhcmUgbGltaXRlZCB0byBhdCBtb3N0Ci0gKiAyNTYgYnl0ZXMgYnkgdGhlIFBDSSBzcGVjIGFuZCBkZXByZWNhdGVkOyBhbmQganVzdCB0byBtYWtlIHRoaW5ncyB3b3JzZQotICogYXBwYXJlbnRseSBtYW55IGRldmljZXMgZG9uJ3QgZGVjb2RlIG1vcmUgdGhhbiA2NGsgb2YgSS9PIHNwYWNlLgotICovCi0KLSNkZWZpbmUgZ3RfaW9fc2l6ZQkweDIwMDAwMDAwVUwKLSNkZWZpbmUgZ3RfaW9fYmFzZQkweGUwMDAwMDAwVUwKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBndF9wY2lfbWVtMF9yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJNVjY0MjQwIFBDSTAgTUVNIiwKLQkuc3RhcnQJPSAweGMwMDAwMDAwVUwsCi0JLmVuZAk9IDB4Y2ZmZmZmZmZVTCwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBndF9wY2lfaW9fbWVtMF9yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJNVjY0MjQwIFBDSTAgSU8gTUVNIiwKLQkuc3RhcnQJPSAweGUwMDAwMDAwVUwsCi0JLmVuZAk9IDB4ZWZmZmZmZmZVTCwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCi19OwotCi1zdGF0aWMgc3RydWN0IG12X3BjaV9jb250cm9sbGVyIGd0X2J1czBfY29udHJvbGxlciA9IHsKLQkucGNpYyA9IHsKLQkJLnBjaV9vcHMJPSAmbXZfcGNpX29wcywKLQkJLm1lbV9yZXNvdXJjZQk9ICZndF9wY2lfbWVtMF9yZXNvdXJjZSwKLQkJLm1lbV9vZmZzZXQJPSAweGMwMDAwMDAwVUwsCi0JCS5pb19yZXNvdXJjZQk9ICZndF9wY2lfaW9fbWVtMF9yZXNvdXJjZSwKLQkJLmlvX29mZnNldAk9IDB4MDAwMDAwMDBVTAotCX0sCi0JLmNvbmZpZ19hZGRyCT0gUENJXzBDT05GSUdVUkFUSU9OX0FERFJFU1MsCi0JLmNvbmZpZ192cmVnCT0gUENJXzBDT05GSUdVUkFUSU9OX0RBVEFfVklSVFVBTF9SRUdJU1RFUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ3RfcGNpX21lbTFfcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiTVY2NDI0MCBQQ0kxIE1FTSIsCi0JLnN0YXJ0CT0gMHhkMDAwMDAwMFVMLAotCS5lbmQJPSAweGRmZmZmZmZmVUwsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ3RfcGNpX2lvX21lbTFfcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiTVY2NDI0MCBQQ0kxIElPIE1FTSIsCi0JLnN0YXJ0CT0gMHhmMDAwMDAwMFVMLAotCS5lbmQJPSAweGZmZmZmZmZmVUwsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9JTwotfTsKLQotc3RhdGljIHN0cnVjdCBtdl9wY2lfY29udHJvbGxlciBndF9idXMxX2NvbnRyb2xsZXIgPSB7Ci0JLnBjaWMgPSB7Ci0JCS5wY2lfb3BzCT0gJm12X3BjaV9vcHMsCi0JCS5tZW1fcmVzb3VyY2UJPSAmZ3RfcGNpX21lbTFfcmVzb3VyY2UsCi0JCS5tZW1fb2Zmc2V0CT0gMHhkMDAwMDAwMFVMLAotCQkuaW9fcmVzb3VyY2UJPSAmZ3RfcGNpX2lvX21lbTFfcmVzb3VyY2UsCi0JCS5pb19vZmZzZXQJPSAweDEwMDAwMDAwVUwKLQl9LAotCS5jb25maWdfYWRkcgk9IFBDSV8xQ09ORklHVVJBVElPTl9BRERSRVNTLAotCS5jb25maWdfdnJlZwk9IFBDSV8xQ09ORklHVVJBVElPTl9EQVRBX1ZJUlRVQUxfUkVHSVNURVIsCi19OwotCi1zdGF0aWMgX19pbml0IGludCBfX2luaXQgb2NlbG90X2dfcGNpX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGlvX3ZfYmFzZTsKLQotCWlmIChndF9pb19zaXplKSB7Ci0JCWlvX3ZfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwKGd0X2lvX2Jhc2UsIGd0X2lvX3NpemUpOwotCQlpZiAoIWlvX3ZfYmFzZSkKLQkJCXBhbmljKCJDb3VsZCBub3QgaW9yZW1hcCBJL08gcG9ydCByYW5nZSIpOwotCi0JCXNldF9pb19wb3J0X2Jhc2UoaW9fdl9iYXNlKTsKLQl9Ci0KLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmZ3RfYnVzMF9jb250cm9sbGVyLnBjaWMpOwotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZndF9idXMxX2NvbnRyb2xsZXIucGNpYyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotYXJjaF9pbml0Y2FsbChvY2Vsb3RfZ19wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1vY2Vsb3QuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jZWxvdC5jCmluZGV4IDdmOTRmMjYuLjE0MjFkMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jZWxvdC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jZWxvdC5jCkBAIC03MSwxOSArNzEsMTkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvY2Vsb3RfbWVtX3Jlc291cmNlID0gewotCXN0YXJ0CT0gR1RfUENJX01FTV9CQVNFOwotCWVuZAk9IEdUX1BDSV9NRU1fQkFTRSArIEdUX1BDSV9NRU1fQkFTRSAtIDE7CisJLnN0YXJ0CT0gR1RfUENJX01FTV9CQVNFLAorCS5lbmQJPSBHVF9QQ0lfTUVNX0JBU0UgKyBHVF9QQ0lfTUVNX0JBU0UgLSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvY2Vsb3RfaW9fcmVzb3VyY2UgPSB7Ci0Jc3RhcnQJPSBHVF9QQ0lfSU9fQkFTRTsKLQllbmQJPSBHVF9QQ0lfSU9fQkFTRSArIEdUX1BDSV9JT19TSVpFIC0gMTsKKwkuc3RhcnQJPSBHVF9QQ0lfSU9fQkFTRSwKKwkuZW5kCT0gR1RfUENJX0lPX0JBU0UgKyBHVF9QQ0lfSU9fU0laRSAtIDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIG9jZWxvdF9wY2lfY29udHJvbGxlciA9IHsKLQkucGNpX29wcwk9IGd0NjR4eHhfcGNpMF9vcHM7Ci0JLm1lbV9yZXNvdXJjZQk9ICZvY2Vsb3RfbWVtX3Jlc291cmNlOwotCS5pb19yZXNvdXJjZQk9ICZvY2Vsb3RfaW9fcmVzb3VyY2U7CisJLnBjaV9vcHMJPSBndDY0eHh4X3BjaTBfb3BzLAorCS5tZW1fcmVzb3VyY2UJPSAmb2NlbG90X21lbV9yZXNvdXJjZSwKKwkuaW9fcmVzb3VyY2UJPSAmb2NlbG90X2lvX3Jlc291cmNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb2NlbG90X3BjaWJpb3NfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL01ha2VmaWxlIGIvYXJjaC9taXBzL3NnaS1pcDIyL01ha2VmaWxlCmluZGV4IGI2ZDY0OTIuLjFmYjNlMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvc2dpLWlwMjIvTWFrZWZpbGUKQEAgLTQsNiArNCw2IEBACiAjCiAKIG9iai15CSs9IGlwMjItbWMubyBpcDIyLWhwYy5vIGlwMjItaW50Lm8gaXAyMi1iZXJyLm8gXAotCSAgIGlwMjItdGltZS5vIGlwMjItbnZyYW0ubyBpcDIyLXJlc2V0Lm8gaXAyMi1zZXR1cC5vCisJICAgaXAyMi10aW1lLm8gaXAyMi1udnJhbS5vIGlwMjItcGxhdGZvcm0ubyBpcDIyLXJlc2V0Lm8gaXAyMi1zZXR1cC5vCiAKIG9iai0kKENPTkZJR19FSVNBKQkrPSBpcDIyLWVpc2EubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiNjA4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMKQEAgLTAsMCArMSwxNzcgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9wYWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3NnaS9pcDIyLmg+CisjaW5jbHVkZSA8YXNtL3NnaS9ocGMzLmg+CisjaW5jbHVkZSA8YXNtL3NnaS9tYy5oPgorI2luY2x1ZGUgPGFzbS9zZ2kvc2VlcS5oPgorI2luY2x1ZGUgPGFzbS9zZ2kvd2QuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzZ2l3ZDkzXzBfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJldGgwIGlycSIsCisJCS5zdGFydAk9IFNHSV9XRDkzXzBfSVJRLAorCQkuZW5kCT0gU0dJX1dEOTNfMF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzZ2l3ZDkzX3BsYXRmb3JtX2RhdGEgc2dpd2Q5M18wX3BkID0geworCS51bml0CT0gMCwKKwkuaXJxCT0gU0dJX1dEOTNfMF9JUlEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZ2l3ZDkzXzBfZGV2aWNlID0geworCS5uYW1lCQk9ICJzZ2l3ZDkzIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2dpd2Q5M18wX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2dpd2Q5M18wX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzZ2l3ZDkzXzBfcGQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2dpd2Q5M18xX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiZXRoMCBpcnEiLAorCQkuc3RhcnQJPSBTR0lfV0Q5M18xX0lSUSwKKwkJLmVuZAk9IFNHSV9XRDkzXzFfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2dpd2Q5M19wbGF0Zm9ybV9kYXRhIHNnaXdkOTNfMV9wZCA9IHsKKwkudW5pdAk9IDEsCisJLmlycQk9IFNHSV9XRDkzXzFfSVJRLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2dpd2Q5M18xX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2dpd2Q5MyIsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNnaXdkOTNfMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNnaXdkOTNfMV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc2dpd2Q5M18xX3BkLAorCX0sCit9OworCisvKgorICogQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGZvciB0aGUgR1BJIHBvcnQgdGhhdCByZWNlaXZlcyB0aGUKKyAqIGltYWdlIGRhdGEgZnJvbSB0aGUgZW1iZWRkZWQgY2FtZXJhLgorICovCitzdGF0aWMgaW50IF9faW5pdCBzZ2l3ZDkzX2RldmluaXQodm9pZCkKK3sKKwlpbnQgcmVzOworCisJc2dpd2Q5M18wX3BkLmhyZWdzCT0gJmhwYzNjMC0+c2NzaV9jaGFuMDsKKwlzZ2l3ZDkzXzBfcGQud2RyZWdzCT0gKHVuc2lnbmVkIGNoYXIgKikgaHBjM2MwLT5zY3NpMF9leHQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNnaXdkOTNfMF9kZXZpY2UpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwlpZiAoIWlwMjJfaXNfZnVsbGhvdXNlKCkpCisJCXJldHVybiAwOworCisJc2dpd2Q5M18xX3BkLmhyZWdzCT0gJmhwYzNjMC0+c2NzaV9jaGFuMTsKKwlzZ2l3ZDkzXzFfcGQud2RyZWdzCT0gKHVuc2lnbmVkIGNoYXIgKikgaHBjM2MwLT5zY3NpMV9leHQ7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZ2l3ZDkzXzFfZGV2aWNlKTsKK30KKworZGV2aWNlX2luaXRjYWxsKHNnaXdkOTNfZGV2aW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2dpc2VlcV8wX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiZXRoMCBpcnEiLAorCQkuc3RhcnQJPSBTR0lfRU5FVF9JUlEsCisJCS5lbmQJPSBTR0lfRU5FVF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzZ2lzZWVxX3BsYXRmb3JtX2RhdGEgZXRoMF9wZDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXRoMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNnaXNlZXEiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzZ2lzZWVxXzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzZ2lzZWVxXzBfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmV0aDBfcGQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2dpc2VlcV8xX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiZXRoMSBpcnEiLAorCQkuc3RhcnQJPSBTR0lfR0lPXzBfSVJRLAorCQkuZW5kCT0gU0dJX0dJT18wX0lSUSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHNnaXNlZXFfcGxhdGZvcm1fZGF0YSBldGgxX3BkOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldGgxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2dpc2VlcSIsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNnaXNlZXFfMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNnaXNlZXFfMV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMV9wZCwKKwl9LAorfTsKKworLyoKKyAqIENyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBmb3IgdGhlIEdQSSBwb3J0IHRoYXQgcmVjZWl2ZXMgdGhlCisgKiBpbWFnZSBkYXRhIGZyb20gdGhlIGVtYmVkZGVkIGNhbWVyYS4KKyAqLworc3RhdGljIGludCBfX2luaXQgc2dpc2VlcV9kZXZpbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKwlpbnQgcmVzLCBpOworCisJZXRoMF9wZC5ocGMgPSBocGMzYzA7CisJZXRoMF9wZC5pcnEgPSBTR0lfRU5FVF9JUlE7CisjZGVmaW5lIEVBRERSX05WT0ZTICAgICAyNTAKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXVuc2lnbmVkIHNob3J0IHRtcCA9IGlwMjJfbnZyYW1fcmVhZChFQUREUl9OVk9GUyAvIDIgKyBpKTsKKworCQlldGgwX3BkLm1hY1syICogaV0gICAgID0gdG1wID4+IDg7CisJCWV0aDBfcGQubWFjWzIgKiBpICsgMV0gPSB0bXAgJiAweGZmOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXRoMF9kZXZpY2UpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwkvKiBTZWNvbmQgSFBDIGlzIG1pc3Npbmc/ICovCisJaWYgKGlwMjJfaXNfZnVsbGhvdXNlKCkgfHwKKwkgICAgIWdldF9kYmUodG1wLCAodW5zaWduZWQgaW50ICopJmhwYzNjMS0+cGJkbWFbMV0pKQorCQlyZXR1cm4gMDsKKworCXNnaW1jLT5naW9wYXIgfD0gU0dJTUNfR0lPUEFSX01BU1RFUkVYUDEgfCBTR0lNQ19HSU9QQVJfRVhQMTY0IHwKKwkgICAgICAgICAgICAgICAgIFNHSU1DX0dJT1BBUl9IUEMyNjQ7CisJaHBjM2MxLT5wYnVzX3Bpb2NmZ1swXVswXSA9IDB4M2ZmZmY7CisJLyogaW50ZXJydXB0L2NvbmZpZyByZWdpc3RlciBvbiBDaGFsbGVuZ2UgUyBNZXp6IGJvYXJkICovCisJaHBjM2MxLT5wYnVzX2V4dHJlZ3NbMF1bMF0gPSAweDMwOworCisJZXRoMV9wZC5ocGMgPSBocGMzYzE7CisJZXRoMV9wZC5pcnEgPSBTR0lfR0lPXzBfSVJROworI2RlZmluZSBFQUREUl9OVk9GUyAgICAgMjUwCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl1bnNpZ25lZCBzaG9ydCB0bXAgPSBpcDIyX2VlcHJvbV9yZWFkKCZocGMzYzEtPmVlcHJvbSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQUREUl9OVk9GUyAvIDIgKyBpKTsKKworCQlldGgxX3BkLm1hY1syICogaV0gICAgID0gdG1wID4+IDg7CisJCWV0aDFfcGQubWFjWzIgKiBpICsgMV0gPSB0bXAgJiAweGZmOworCX0KKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmV0aDFfZGV2aWNlKTsKK30KKworZGV2aWNlX2luaXRjYWxsKHNnaXNlZXFfZGV2aW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCmluZGV4IDYwYWRlNzYuLmJhOGUwNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvTWFrZWZpbGUgYi9hcmNoL21pcHMvc2dpLWlwMzIvTWFrZWZpbGUKaW5kZXggN2UxNDE2Ny4uNjBmMDIyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9NYWtlZmlsZQpAQCAtMyw1ICszLDUgQEAKICMgdW5kZXIgTGludXguCiAjCiAKLW9iai15CSs9IGlwMzItYmVyci5vIGlwMzItaXJxLm8gaXAzMi1zZXR1cC5vIGlwMzItcmVzZXQubyBcCitvYmoteQkrPSBpcDMyLWJlcnIubyBpcDMyLWlycS5vIGlwMzItcGxhdGZvcm0ubyBpcDMyLXNldHVwLm8gaXAzMi1yZXNldC5vIFwKIAkgICBjcmltZS5vIGlwMzItbWVtb3J5Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXBsYXRmb3JtLmMgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMGIxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMjAgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKK3N0YXRpYyBfX2luaXQgaW50IG1ldGhfZGV2aW5pdCh2b2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkOworCWludCByZXQ7CisKKwlwZCA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygibWV0aCIsIC0xKTsKKwlpZiAoIXBkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGQpOworCWlmIChyZXQpCisJCXBsYXRmb3JtX2RldmljZV9wdXQocGQpOworCisJcmV0dXJuIHJldDsKK30KKworZGV2aWNlX2luaXRjYWxsKG1ldGhfZGV2aW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL2lycS5jIGIvYXJjaC9taXBzL3NuaS9pcnEuYwppbmRleCBhZDVmYzQ3Li45Y2NmZmRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zbmkvaXJxLmMKQEAgLTQyLDcgKzQyLDcgQEAKIHN0cnVjdCBpcnFhY3Rpb24gc25pX2lzYV9pcnEgPSB7CiAJLmhhbmRsZXIgPSBzbmlfaXNhX2lycV9oYW5kbGVyLAogCS5uYW1lID0gIklTQSIsCi0JLmZsYWdzID0gU0FfU0hJUlEKKwkuZmxhZ3MgPSBJUlFGX1NIQVJFRAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy90b3NoaWJhX3JidHg0OTI3X3NldHVwLmMgYi9hcmNoL21pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcvdG9zaGliYV9yYnR4NDkyN19zZXR1cC5jCmluZGV4IDBmNzU3NmQuLmEwYzExZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy90b3NoaWJhX3JidHg0OTI3X3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5Mjdfc2V0dXAuYwpAQCAtMTA0OSwzICsxMDQ5LDIyIEBACiAJcmV0dXJuIElTX0VSUihkZXYpID8gUFRSX0VSUihkZXYpIDogMDsKIH0KIGRldmljZV9pbml0Y2FsbCh0b3NoaWJhX3JidHg0OTI3X3J0Y19pbml0KTsKKworc3RhdGljIGludCBfX2luaXQgcmJ0eDQ5MjdfbmVfaW5pdCh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgX19pbml0ZGF0YSByZXNbXSA9IHsKKwkJeworCQkJLnN0YXJ0CT0gUkJUWDQ5MjdfUlRMXzgwMTlfQkFTRSwKKwkJCS5lbmQJPSBSQlRYNDkyN19SVExfODAxOV9CQVNFICsgMHgyMCAtIDEsCisJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCQl9LCB7CisJCQkuc3RhcnQJPSBSQlRYNDkyN19SVExfODAxOV9JUlEsCisJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJfQorCX07CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0KKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibmUiLCAtMSwKKwkJCQkJCXJlcywgQVJSQVlfU0laRShyZXMpKTsKKwlyZXR1cm4gSVNfRVJSKGRldikgPyBQVFJfRVJSKGRldikgOiAwOworfQorZGV2aWNlX2luaXRjYWxsKHJidHg0OTI3X25lX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L3NldHVwLmMgYi9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc2V0dXAuYwppbmRleCA2NjE2M2JhLi5mNWQxY2U3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc2V0dXAuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL3diZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CkBAIC0xMDM3LDMgKzEwMzgsMjIgQEAKIAogX19pbml0Y2FsbCh0eDQ5Mzhfc3BpX3Byb2Nfc2V0dXApOwogI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHJidHg0OTM4X25lX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzW10gPSB7CisJCXsKKwkJCS5zdGFydAk9IFJCVFg0OTM4X1JUTF84MDE5X0JBU0UsCisJCQkuZW5kCT0gUkJUWDQ5MzhfUlRMXzgwMTlfQkFTRSArIDB4MjAgLSAxLAorCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwkJfSwgeworCQkJLnN0YXJ0CT0gUkJUWDQ5MzhfUlRMXzgwMTlfSVJRLAorCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCX0KKwl9OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm5lIiwgLTEsCisJCQkJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSk7CisJcmV0dXJuIElTX0VSUihkZXYpID8gUFRSX0VSUihkZXYpIDogMDsKK30KK2RldmljZV9pbml0Y2FsbChyYnR4NDkzOF9uZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2hwdXgvZnMuYyBiL2FyY2gvcGFyaXNjL2hwdXgvZnMuYwppbmRleCBjN2E4MWEyLi5kODZlMTU3IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9ocHV4L2ZzLmMKKysrIGIvYXJjaC9wYXJpc2MvaHB1eC9mcy5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2hwdXgvaW9jdGwuYyBiL2FyY2gvcGFyaXNjL2hwdXgvaW9jdGwuYwppbmRleCBiMzRiNGYzLi5kZWRlNDc2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9ocHV4L2lvY3RsLmMKKysrIGIvYXJjaC9wYXJpc2MvaHB1eC9pb2N0bC5jCkBAIC0zNCw3ICszNCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA1NGZkYjk1Li5kM2I3OTE3IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNTQsNyArNTQsNyBAQAogCiBpbnQgbWFpbih2b2lkKQogewotCURFRklORShUQVNLX1RIUkVBRF9JTkZPLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvKSk7CisJREVGSU5FKFRBU0tfVEhSRUFEX0lORk8sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2spKTsKIAlERUZJTkUoVEFTS19TVEFURSwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGF0ZSkpOwogCURFRklORShUQVNLX0ZMQUdTLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGZsYWdzKSk7CiAJREVGSU5FKFRBU0tfU0lHUEVORElORywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBwZW5kaW5nKSk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCmluZGV4IDBkYzkyNGMuLjM5NWJiY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9wZGMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCmluZGV4IGU5ZDA5YjAuLmM1YzkxMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKQEAgLTM4OCw3ICszODgsNyBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfYWN0aW9uID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAogCS5uYW1lID0gInRpbWVyIiwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfUEVSQ1BVLAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9QRVJDUFUgfCBJUlFGX0lSUVBPTEwsCiB9OwogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jCmluZGV4IGRkNWQwY2IuLjU2NjIyNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLQorI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgkvKiBmb3IgcmVnaXN0ZXJfcGFyaXNjX2RyaXZlcigpIHN0dWZmICovCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jCmluZGV4IDBkMGQ2MTcuLjhhMGRiMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYwppbmRleCA5Nzg0ZTQwLi5mYjM1ZWJjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwzMi5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbDMyLmMKaW5kZXggMWMxYTM3Zi4uZGI5NGFmZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbDMyLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbDMyLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMKaW5kZXggNmZlZDA4MC4uNGY1ODkyMSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3RyYXBzLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYwppbmRleCA1NWJjMTQ3Li43NDVmZjc0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYwppbmRleCA1Zjc1YjNlLi44OWMwMzcwIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jCkBAIC0yMTYsMTEgKzIxNiw4IEBACiAJCS8qIEhhbmRsZSBzb21lIGZyZXF1ZW50IHNwZWNpYWwgY2FzZXMuLi4uICovCiAJCXsKIAkJCWNoYXIgc3ltbmFtZVtLU1lNX05BTUVfTEVOKzFdOwotCQkJY2hhciAqbW9kbmFtZTsKLQkJCXVuc2lnbmVkIGxvbmcgc3ltc2l6ZSwgb2Zmc2V0OwogCi0JCQlrYWxsc3ltc19sb29rdXAoaW5mby0+aXAsICZzeW1zaXplLCAmb2Zmc2V0LAotCQkJCQkmbW9kbmFtZSwgc3ltbmFtZSk7CisJCQlrYWxsc3ltc19sb29rdXAoaW5mby0+aXAsIE5VTEwsIE5VTEwsIE5VTEwsIHN5bW5hbWUpOwogCiAJCQlkYmcoImluZm8tPmlwID0gMHglbHgsIG5hbWUgPSAlc1xuIiwgaW5mby0+aXAsIHN5bW5hbWUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGM3NDU4NTkuLjRkOTZiYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC01MSw3ICs1MSw3IEBACiAKICAgX3RleHQgPSAuOwkJCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhICovCiAgIC50ZXh0IEFMSUdOKDE2KSA6IHsKLQkqKC50ZXh0KQorCVRFWFRfVEVYVAogCVNDSEVEX1RFWFQKIAlMT0NLX1RFWFQKIAkqKC50ZXh0LmRvX3NvZnRpcnEpCkBAIC05MSw3ICs5MSw3IEBACiAKICAgLiA9IEFMSUdOKEwxX0NBQ0hFX0JZVEVTKTsKICAgLmRhdGEgOiB7CQkJLyogRGF0YSAqLwotCSooLmRhdGEpCisJREFUQV9EQVRBCiAJQ09OU1RSVUNUT1JTCiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDhkZTVmOWYuLjVlYWVhZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0xMTcsMTggKzExNyw5IEBACiAJZGVmYXVsdCB5CiAJZGVwZW5kcyBvbiBCVUcKIAotIwotIyBQb3dlcnBjIHVzZXMgdGhlIHNsYWIgYWxsb2NhdG9yIHRvIG1hbmFnZSBpdHMgcHRlcyBhbmQgdGhlCi0jIHBhZ2Ugc3RydWN0cyBvZiBwdGVzIGFyZSB1c2VkIGZvciBzcGxpdHRpbmcgdGhlIHBhZ2UgdGFibGUKLSMgbG9jayBmb3IgY29uZmlndXJhdGlvbnMgc3VwcG9ydGluZyBtb3JlIHRoYW4gU1BMSVRfUFRMT0NLX0NQVVMuCi0jCi0jIEluIHRoYXQgc3BlY2lhbCBjb25maWd1cmF0aW9uIHRoZSBwYWdlIHN0cnVjdHMgb2Ygc2xhYnMgYXJlIG1vZGlmaWVkLgotIyBUaGlzIHNldHRpbmcgZGlzYWJsZXMgdGhlIHNlbGVjdGlvbiBvZiBTTFVCIGFzIGEgc2xhYiBhbGxvY2F0b3IuCi0jCi1jb25maWcgQVJDSF9VU0VTX1NMQUJfUEFHRV9TVFJVQ1QKK2NvbmZpZyBTWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTgorCWRlZmF1bHQgeSBpZiBQTUFDX0FQTV9FTVUKIAlib29sCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBTUExJVF9QVExPQ0tfQ1BVUyA8PSBOUl9DUFVTCiAKIGNvbmZpZyBERUZBVUxUX1VJTUFHRQogCWJvb2wKQEAgLTEzNiw2ICsxMjcsMTEgQEAKIAkgIFVzZWQgdG8gYWxsb3cgYSBib2FyZCB0byBzcGVjaWZ5IGl0IHdhbnRzIGEgdUltYWdlIGJ1aWx0IGJ5IGRlZmF1bHQKIAlkZWZhdWx0IG4KIAorY29uZmlnIFBQQzY0X1NXU1VTUAorCWJvb2wKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIChCUk9LRU4gfHwgKFBQQ19QTUFDNjQgJiYgRVhQRVJJTUVOVEFMKSkKKwlkZWZhdWx0IHkKKwogbWVudSAiUHJvY2Vzc29yIHN1cHBvcnQiCiBjaG9pY2UKIAlwcm9tcHQgIlByb2Nlc3NvciBUeXBlIgpAQCAtMjA2LDYgKzIwMiw3IEBACiBjb25maWcgNDR4CiAJYm9vbCAiQU1DQyA0NHgiCiAJc2VsZWN0IFBQQ19EQ1JfTkFUSVZFCisJc2VsZWN0IFdBTlRfREVWSUNFX1RSRUUKIAogY29uZmlnIEUyMDAKIAlib29sICJGcmVlc2NhbGUgZTIwMCIKQEAgLTI3MCw5ICsyNjcsMTQgQEAKIAlkZXBlbmRzIG9uIFBQQzY0ICMgbm90IHN1cHBvcnRlZCBvbiAzMiBiaXRzIHlldAogCWRlZmF1bHQgbgogCitjb25maWcgNHh4CisJYm9vbAorCWRlcGVuZHMgb24gNDB4IHx8IDQ0eAorCWRlZmF1bHQgeQorCiBjb25maWcgQk9PS0UKIAlib29sCi0JZGVwZW5kcyBvbiBFMjAwIHx8IEU1MDAKKwlkZXBlbmRzIG9uIEUyMDAgfHwgRTUwMCB8fCA0NHgKIAlkZWZhdWx0IHkKIAogY29uZmlnIEZTTF9CT09LRQpAQCAtMzM4LDYgKzM0MCwxMSBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFBQQ19TVERfTU1VICYmIFBQQzMyCiAKK2NvbmZpZyBQUENfTU1fU0xJQ0VTCisJYm9vbAorCWRlZmF1bHQgeSBpZiBIVUdFVExCX1BBR0UKKwlkZWZhdWx0IG4KKwogY29uZmlnIFZJUlRfQ1BVX0FDQ09VTlRJTkcKIAlib29sICJEZXRlcm1pbmlzdGljIHRhc2sgYW5kIENQVSB0aW1lIGFjY291bnRpbmciCiAJZGVwZW5kcyBvbiBQUEM2NApAQCAtMzgzLDYgKzM5MCw5IEBACiAJYm9vbAogCWRlcGVuZHMgb24gNHh4IHx8IDh4eCB8fCBFMjAwCiAJZGVmYXVsdCB5CisKK2NvbmZpZyBDT05GSUdfQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZCisJYm9vbAogZW5kbWVudQogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKQEAgLTQ0NSw3ICs0NTUsNyBAQAogCiBjb25maWcgS0VYRUMKIAlib29sICJrZXhlYyBzeXN0ZW0gY2FsbCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gKFBQQ19QUlBNQzI4MDAgfHwgUFBDX01VTFRJUExBVEZPUk0pICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIGtleGVjIGlzIGEgc3lzdGVtIGNhbGwgdGhhdCBpbXBsZW1lbnRzIHRoZSBhYmlsaXR5IHRvIHNodXRkb3duIHlvdXIKIAkgIGN1cnJlbnQga2VybmVsLCBhbmQgdG8gc3RhcnQgYW5vdGhlciBrZXJuZWwuICBJdCBpcyBsaWtlIGEgcmVib290CkBAIC01MjcsOSArNTM3LDE1IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUwogCitjb25maWcgUFBDX0hBU19IQVNIXzY0SworCWJvb2wKKwlkZXBlbmRzIG9uIFBQQzY0CisJZGVmYXVsdCBuCisKIGNvbmZpZyBQUENfNjRLX1BBR0VTCiAJYm9vbCAiNjRrIHBhZ2Ugc2l6ZSIKIAlkZXBlbmRzIG9uIFBQQzY0CisJc2VsZWN0IFBQQ19IQVNfSEFTSF82NEsKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSBrZXJuZWwgbG9naWNhbCBwYWdlIHNpemUgdG8gNjRrLiBPbiBtYWNoaW5lcwogCSAgd2l0aG91dCBwcm9jZXNzb3Igc3VwcG9ydCBmb3IgNjRrIHBhZ2VzLCB0aGUga2VybmVsIHdpbGwgc2ltdWxhdGUKQEAgLTY2OSwxMSArNjg1LDEyIEBACiBjb25maWcgUENJCiAJYm9vbCAiUENJIHN1cHBvcnQiIGlmIDQweCB8fCBDUE0yIHx8IFBQQ184M3h4IHx8IFBQQ184NXh4IHx8IFBQQ184Nnh4IFwKIAkJfHwgUFBDX01QQzUyeHggfHwgKEVNQkVEREVEICYmIChQUENfUFNFUklFUyB8fCBQUENfSVNFUklFUykpIFwKLQkJfHwgTVBDNzQ0OEhQQzIgfHwgUFBDX1BTMworCQl8fCBNUEM3NDQ4SFBDMiB8fCBQUENfUFMzIHx8IFBQQ19IT0xMWQogCWRlZmF1bHQgeSBpZiAhNDB4ICYmICFDUE0yICYmICE4eHggJiYgIUFQVVMgJiYgIVBQQ184M3h4IFwKIAkJJiYgIVBQQ184NXh4ICYmICFQUENfODZ4eAogCWRlZmF1bHQgUENJX1BFUk1FRElBIGlmICE0eHggJiYgIUNQTTIgJiYgITh4eCAmJiBBUFVTCiAJZGVmYXVsdCBQQ0lfUVNQQU4gaWYgITR4eCAmJiAhQ1BNMiAmJiA4eHgKKwlzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0kKIAloZWxwCiAJICBGaW5kIG91dCB3aGV0aGVyIHlvdXIgc3lzdGVtIGluY2x1ZGVzIGEgUENJIGJ1cy4gUENJIGlzIHRoZSBuYW1lIG9mCiAJICBhIGJ1cyBzeXN0ZW0sIGkuZS4gdGhlIHdheSB0aGUgQ1BVIHRhbGtzIHRvIHRoZSBvdGhlciBzdHVmZiBpbnNpZGUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKaW5kZXggODZhYTM3NC4uMzQ2Y2QzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKQEAgLTMyLDcgKzMyLDcgQEAKIAlkZXBlbmRzIG9uIFBQQ19QU0VSSUVTICYmIERFQlVHX0ZTCiAJaGVscAogCSAgQWRkcyBjb2RlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBoeXBlcnZpc29yIGNhbGxzIG1hZGUgYW5kCi0JICB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgaW4gaHlwZXJ2aXNvciBjYWxsc3IuICBXYWxsIHRpbWUgc3BlbnQgaW4KKwkgIHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCBpbiBoeXBlcnZpc29yIGNhbGxzLiAgV2FsbCB0aW1lIHNwZW50IGluCiAJICBlYWNoIGNhbGwgaXMgYWx3YXlzIGNhbGN1bGF0ZWQsIGFuZCBpZiBhdmFpbGFibGUgQ1BVIGN5Y2xlcyBzcGVudAogCSAgYXJlIGFsc28gY2FsY3VsYXRlZC4gIEEgZGlyZWN0b3J5IG5hbWVkIGhjYWxsX2luc3QgaXMgYWRkZWQgYXQgdGhlCiAJICByb290IG9mIHRoZSBkZWJ1Z2ZzIGZpbGVzeXN0ZW0uICBXaXRoaW4gdGhlIGhjYWxsX2luc3QgZGlyZWN0b3J5CkBAIC0xMzksMTAgKzEzOSw2IEBACiAJICBTYXkgWSBoZXJlIHRvIHNlZSBwcm9ncmVzcyBtZXNzYWdlcyBmcm9tIHRoZSBib290IGZpcm13YXJlIGluIHRleHQKIAkgIG1vZGUuIFJlcXVpcmVzIGVpdGhlciBCb290WCBvciBPcGVuIEZpcm13YXJlLgogCi1jb25maWcgU0VSSUFMX1RFWFRfREVCVUcKLQlib29sICJTdXBwb3J0IGZvciBlYXJseSBib290IHRleHRzIG92ZXIgc2VyaWFsIHBvcnQiCi0JZGVwZW5kcyBvbiA0eHgKLQogY29uZmlnIFBQQ19FQVJMWV9ERUJVRwogCWJvb2wgIkVhcmx5IGRlYnVnZ2luZyAoZGFuZ2Vyb3VzKSIKIApAQCAtMjA3LDYgKzIwMywyNCBAQAogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSBlYXJseSBkZWJ1Z2dpbmcgZm9yIENlbGxlYiB3aXRoIEJlYXQuCiAKK2NvbmZpZyBQUENfRUFSTFlfREVCVUdfNDR4CisJYm9vbCAiRWFybHkgc2VyaWFsIGRlYnVnZ2luZyBmb3IgSUJNL0FNQ0MgNDR4IENQVXMiCisJZGVwZW5kcyBvbiA0NHgKKwlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKKwloZWxwCisJICBTZWxlY3QgdGhpcyB0byBlbmFibGUgZWFybHkgZGVidWdnaW5nIGZvciBJQk0gNDR4IGNoaXBzIHZpYSB0aGUKKwkgIGluYnVpbHQgc2VyaWFsIHBvcnQuCisKIGVuZGNob2ljZQogCitjb25maWcgUFBDX0VBUkxZX0RFQlVHXzQ0eF9QSFlTTE9XCisJaGV4ICJMb3cgMzIgYml0cyBvZiBlYXJseSBkZWJ1ZyBVQVJUIHBoeXNpY2FsIGFkZHJlc3MiCisJZGVwZW5kcyBQUENfRUFSTFlfREVCVUdfNDR4CisJZGVmYXVsdCAiMHg0MDAwMDIwMCIKKworY29uZmlnIFBQQ19FQVJMWV9ERUJVR180NHhfUEhZU0hJR0gKKwloZXggIkVQUk4gb2YgZWFybHkgZGVidWcgVUFSVCBwaHlzaWNhbCBhZGRyZXNzIgorCWRlcGVuZHMgUFBDX0VBUkxZX0RFQlVHXzQ0eAorCWRlZmF1bHQgIjB4MSIKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCmluZGV4IDc5NDk5MjAuLmZiYWZkOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIENST1NTMzJBUwk6PSAkKEFTKSAtYTMyCiBDUk9TUzMyTEQJOj0gJChMRCkgLW0gZWxmMzJwcGMKIENST1NTMzJPQkpDT1BZCTo9ICQoT0JKQ09QWSkKLUNST1NTMzJBUgk6PSAkKEFSKQorQ1JPU1MzMkFSCTo9IEdOVVRBUkdFVD1lbGYzMi1wb3dlcnBjICQoQVIpCiBlbmRpZgogZW5kaWYKIApAQCAtNTgsNiArNTgsNyBAQAogb3ZlcnJpZGUgQVMJKz0gLWEkKFNaKQogb3ZlcnJpZGUgTEQJKz0gLW0gZWxmJChTWilwcGMKIG92ZXJyaWRlIENDCSs9IC1tJChTWikKK292ZXJyaWRlIEFSCTo9IEdOVVRBUkdFVD1lbGYkKFNaKS1wb3dlcnBjICQoQVIpCiBlbmRpZgogCiBMREZMQUdTX3ZtbGludXgJOj0gLUJzdGF0aWMKQEAgLTE0MSwxNCArMTQyLDEzIEBACiAKICMgRGVmYXVsdCB0byB6SW1hZ2UsIG92ZXJyaWRlIHdoZW4gbmVlZGVkCiBkZWZhdWx0aW1hZ2UteQkJCTo9IHpJbWFnZQotZGVmYXVsdGltYWdlLSQoQ09ORklHX1BQQ19JU0VSSUVTKSA6PSB2bWxpbnV4CiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfREVGQVVMVF9VSU1BR0UpIDo9IHVJbWFnZQogS0JVSUxEX0lNQUdFIDo9ICQoZGVmYXVsdGltYWdlLXkpCiBhbGw6ICQoS0JVSUxEX0lNQUdFKQogCiBDUFBGTEFHU192bWxpbnV4Lmxkcwk6PSAtVXBvd2VycGMKIAotQk9PVF9UQVJHRVRTID0gekltYWdlIHpJbWFnZS5pbml0cmQgdUltYWdlIGN1SW1hZ2UKK0JPT1RfVEFSR0VUUyA9IHpJbWFnZSB6SW1hZ2UuaW5pdHJkIHpJbWFnZS5kdHMgekltYWdlLmR0c19pbml0cmQgdUltYWdlCiAKIFBIT05ZICs9ICQoQk9PVF9UQVJHRVRTKQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC80NHguYyBiL2FyY2gvcG93ZXJwYy9ib290LzQ0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTM3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC80NHguYwpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgRGF2aWQgR2lic29uLCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogQmFzZWQgb24gZWFybGllciBjb2RlOgorICogICBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogICBDb3B5cmlnaHQgMjAwMi0yMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICAgRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PgorICogICBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgWnVsdHlzIFRlY2hub2xvZ2llcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgInN0cmluZy5oIgorI2luY2x1ZGUgInN0ZGlvLmgiCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAiZGNyLmgiCisKKy8qIFJlYWQgdGhlIDQ0eCBtZW1vcnkgY29udHJvbGxlciB0byBnZXQgc2l6ZSBvZiBzeXN0ZW0gbWVtb3J5LiAqLwordm9pZCBpYm00NHhfZml4dXBfbWVtc2l6ZSh2b2lkKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZSwgYmFua19jb25maWc7CisKKwltZW1zaXplID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZHJhbV9ieGNyKTsgaSsrKSB7CisJCW10ZGNyKERDUk5fU0RSQU0wX0NGR0FERFIsIHNkcmFtX2J4Y3JbaV0pOworCQliYW5rX2NvbmZpZyA9IG1mZGNyKERDUk5fU0RSQU0wX0NGR0RBVEEpOworCisJCWlmIChiYW5rX2NvbmZpZyAmIFNEUkFNX0NPTkZJR19CQU5LX0VOQUJMRSkKKwkJCW1lbXNpemUgKz0gU0RSQU1fQ09ORklHX0JBTktfU0laRShiYW5rX2NvbmZpZyk7CisJfQorCisJZHRfZml4dXBfbWVtb3J5KDAsIG1lbXNpemUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvNDR4LmggYi9hcmNoL3Bvd2VycGMvYm9vdC80NHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjEyOWFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvNDR4LmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIFBvd2VyUEMgNDR4IHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDcgRGF2aWQgR2lic29uLCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKyNpZm5kZWYgX1BQQ19CT09UXzQ0WF9IXworI2RlZmluZSBfUFBDX0JPT1RfNDRYX0hfCisKK3ZvaWQgaWJtNDR4X2ZpeHVwX21lbXNpemUodm9pZCk7Cit2b2lkIGVib255X2luaXQodm9pZCAqbWFjMCwgdm9pZCAqbWFjMSk7CisKKyNlbmRpZiAvKiBfUFBDX0JPT1RfNDRYX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCmluZGV4IDM3MTY1OTQuLmZmMjcwMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCkBAIC0xMSwyMCArMTEsMTggQEAKICMJYm9vdGxvYWRlciBhbmQgaW5jcmVhc2UgY29tcGF0aWJpbGl0eSB3aXRoIE9wZW5GaXJtd2FyZS4KICMKICMJVG8gdGhpcyBlbmQgd2UgbmVlZCB0byBkZWZpbmUgQk9PVENDLCBldGMsIGFzIHRoZSB0b29scwotIwluZWVkZWQgdG8gYnVpbGQgdGhlIDMyIGJpdCBpbWFnZS4gIFRoZXNlIGFyZSBub3JtYWxseSBIT1NUQ0MsCi0jCWJ1dCBtYXkgYmUgYSB0aGlyZCBjb21waWxlciBpZiwgZm9yIGV4YW1wbGUsIHlvdSBhcmUgY3Jvc3MKLSMJY29tcGlsaW5nIGZyb20gYW4gaW50ZWwgYm94LiAgT25jZSB0aGUgNjRiaXQgcHBjIGdjYyBpcwotIwlzdGFibGUgaXQgd2lsbCBwcm9iYWJseSBzaW1wbHkgYmUgYSBjb21waWxlciBzd2l0Y2ggdG8KLSMJY29tcGlsZSBmb3IgMzJiaXQgbW9kZS4KKyMJbmVlZGVkIHRvIGJ1aWxkIHRoZSAzMiBiaXQgaW1hZ2UuICBUaGF0J3Mgbm9ybWFsbHkgdGhlIHNhbWUKKyMJY29tcGlsZXIgZm9yIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwsIHdpdGggdGhlIC1tMzIgZmxhZyBhZGRlZC4KICMJVG8gbWFrZSBpdCBlYXNpZXIgdG8gc2V0dXAgYSBjcm9zcyBjb21waWxlciwKICMJQ1JPU1MzMl9DT01QSUxFIGlzIHNldHVwIGFzIGEgcHJlZml4IGp1c3QgbGlrZSBDUk9TU19DT01QSUxFCiAjCWluIHRoZSB0b3BsZXZlbCBtYWtlZmlsZS4KIAogYWxsOiAkKG9iaikvekltYWdlCiAKLUhPU1RDQwkJOj0gZ2NjCi1CT09UQ0ZMQUdTCTo9ICQoSE9TVENGTEFHUykgLWZuby1idWlsdGluIC1ub3N0ZGluYyAtaXN5c3RlbSBcCi0JCSAgICQoc2hlbGwgJChDUk9TUzMyQ0MpIC1wcmludC1maWxlLW5hbWU9aW5jbHVkZSkgLWZQSUMKK0JPT1RDRkxBR1MgICAgOj0gLVdhbGwgLVd1bmRlZiAtV3N0cmljdC1wcm90b3R5cGVzIC1Xbm8tdHJpZ3JhcGhzIFwKKwkJIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PcyAtbXNvZnQtZmxvYXQgLXBpcGUgXAorCQkgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1idWlsdGluIC1mUElDIC1ub3N0ZGluYyBcCisJCSAtaXN5c3RlbSAkKHNoZWxsICQoQ1JPU1MzMkNDKSAtcHJpbnQtZmlsZS1uYW1lPWluY2x1ZGUpCiBCT09UQUZMQUdTCTo9IC1EX19BU1NFTUJMWV9fICQoQk9PVENGTEFHUykgLXRyYWRpdGlvbmFsIC1ub3N0ZGluYwogCiBpZmVxICgkKGNhbGwgY2Mtb3B0aW9uLXluLCAtZnN0YWNrLXByb3RlY3RvcikseSkKQEAgLTMzLDE3ICszMSwyMiBAQAogCiBCT09UQ0ZMQUdTCSs9IC1JJChvYmopIC1JJChzcmN0cmVlKS8kKG9iaikKIAorJChvYmopLzQ0eC5vOiBCT09UQ0ZMQUdTICs9IC1tY3B1PTQ0MAorJChvYmopL2Vib255Lm86IEJPT1RDRkxBR1MgKz0gLW1jcHU9NDQwCisKIHpsaWIgICAgICAgOj0gaW5mZmFzdC5jIGluZmxhdGUuYyBpbmZ0cmVlcy5jCiB6bGliaGVhZGVyIDo9IGluZmZhc3QuaCBpbmZmaXhlZC5oIGluZmxhdGUuaCBpbmZ0cmVlcy5oIGluZnV0aWwuaAogemxpYmxpbnV4aGVhZGVyIDo9IHpsaWIuaCB6Y29uZi5oIHp1dGlsLmgKIAotJChhZGRwcmVmaXggJChvYmopLywkKHpsaWIpIG1haW4ubyk6ICQoYWRkcHJlZml4ICQob2JqKS8sJCh6bGlibGludXhoZWFkZXIpKSBcCi0JCSQoYWRkcHJlZml4ICQob2JqKS8sJCh6bGliaGVhZGVyKSkKKyQoYWRkcHJlZml4ICQob2JqKS8sJCh6bGliKSBndW56aXBfdXRpbC5vIG1haW4ubyk6IFwKKwkkKGFkZHByZWZpeCAkKG9iaikvLCQoemxpYmxpbnV4aGVhZGVyKSkgJChhZGRwcmVmaXggJChvYmopLywkKHpsaWJoZWFkZXIpKQogCiBzcmMtd2xpYiA6PSBzdHJpbmcuUyBjcnQwLlMgc3RkaW8uYyBtYWluLmMgZmxhdGRldnRyZWUuYyBmbGF0ZGV2dHJlZV9taXNjLmMgXAogCQluczE2NTUwLmMgc2VyaWFsLmMgc2ltcGxlX2FsbG9jLmMgZGl2NjQuUyB1dGlsLlMgXAotCQlndW56aXBfdXRpbC5jIGVsZl91dGlsLmMgJCh6bGliKSBkZXZ0cmVlLmMKLXNyYy1wbGF0IDo9IG9mLmMgY3Vib290LTgzeHguYyBjdWJvb3QtODV4eC5jCisJCWd1bnppcF91dGlsLmMgZWxmX3V0aWwuYyAkKHpsaWIpIGRldnRyZWUuYyBcCisJCTQ0eC5jIGVib255LmMgbXY2NHg2MC5jIG1wc2MuYyBtdjY0eDYwX2kyYy5jCitzcmMtcGxhdCA6PSBvZi5jIGN1Ym9vdC04M3h4LmMgY3Vib290LTg1eHguYyBob2xseS5jIFwKKwkJY3Vib290LWVib255LmMgdHJlZWJvb3QtZWJvbnkuYyBwcnBtYzI4MDAuYwogc3JjLWJvb3QgOj0gJChzcmMtd2xpYikgJChzcmMtcGxhdCkgZW1wdHkuYwogCiBzcmMtYm9vdCA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCAkKHNyYy1ib290KSkKQEAgLTUyLDEzICs1NSwxMyBAQAogb2JqLXBsYXQgOj0gJChhZGRzdWZmaXggLm8sICQoYmFzZW5hbWUgJChhZGRwcmVmaXggJChvYmopLywgJChzcmMtcGxhdCkpKSkKIAogcXVpZXRfY21kX2NvcHlfemxpYiA9IENPUFkgICAgJEAKLSAgICAgIGNtZF9jb3B5X3psaWIgPSBzZWQgInNAX19hdHRyaWJ1dGVfdXNlZF9fQEA7c0A8bGludXgvXChbXj5dXCtcKS4qQFwiXDFcIkAiICQ8ID4gJEAKKyAgICAgIGNtZF9jb3B5X3psaWIgPSBzZWQgInNAX19hdHRyaWJ1dGVfdXNlZF9fQEA7c0A8bGludXgvXChbXj5dKlwpLipAXCJcMVwiQCIgJDwgPiAkQAogCiBxdWlldF9jbWRfY29weV96bGliaGVhZGVyID0gQ09QWSAgICAkQAotICAgICAgY21kX2NvcHlfemxpYmhlYWRlciA9IHNlZCAic0A8bGludXgvXChbXj5dXCtcKS4qQFwiXDFcIkAiICQ8ID4gJEAKKyAgICAgIGNtZF9jb3B5X3psaWJoZWFkZXIgPSBzZWQgInNAPGxpbnV4L1woW14+XSpcKS4qQFwiXDFcIkAiICQ8ID4gJEAKICMgc3RkZGVmLmggZm9yIE5VTEwKIHF1aWV0X2NtZF9jb3B5X3psaWJsaW51eGhlYWRlciA9IENPUFkgICAgJEAKLSAgICAgIGNtZF9jb3B5X3psaWJsaW51eGhlYWRlciA9IHNlZCAic0A8bGludXgvc3RyaW5nLmg+QFwic3RyaW5nLmhcIkA7c0A8bGludXgva2VybmVsLmg+QDxzdGRkZWYuaD5AO3NAPGxpbnV4L1woW14+XVwrXCkuKkBcIlwxXCJAIiAkPCA+ICRACisgICAgICBjbWRfY29weV96bGlibGludXhoZWFkZXIgPSBzZWQgInNAPGxpbnV4L3N0cmluZy5oPkBcInN0cmluZy5oXCJAO3NAPGxpbnV4L2tlcm5lbC5oPkA8c3RkZGVmLmg+QDtzQDxsaW51eC9cKFtePl0qXCkuKkBcIlwxXCJAIiAkPCA+ICRACiAKICQoYWRkcHJlZml4ICQob2JqKS8sJCh6bGliKSk6ICQob2JqKS8lOiAkKHNyY3RyZWUpL2xpYi96bGliX2luZmxhdGUvJQogCSQoY2FsbCBjbWQsY29weV96bGliKQpAQCAtMTI5LDcgKzEzMiwxNiBAQAogaW1hZ2UtJChDT05GSUdfUFBDX0NIUlApCQkrPSB6SW1hZ2UuY2hycAogaW1hZ2UtJChDT05GSUdfUFBDX0VGSUtBKQkJKz0gekltYWdlLmNocnAKIGltYWdlLSQoQ09ORklHX1BQQ19QTUFDKQkJKz0gekltYWdlLnBtYWMKLWltYWdlLSQoQ09ORklHX0RFRkFVTFRfVUlNQUdFKQkJKz0gdUltYWdlIGN1SW1hZ2UKK2ltYWdlLSQoQ09ORklHX1BQQ19IT0xMWSkJCSs9IHpJbWFnZS5ob2xseS1lbGYKK2ltYWdlLSQoQ09ORklHX1BQQ19QUlBNQzI4MDApCQkrPSB6SW1hZ2UucHJwbWMyODAwCitpbWFnZS0kKENPTkZJR19QUENfSVNFUklFUykJCSs9IHpJbWFnZS5pc2VyaWVzCitpbWFnZS0kKENPTkZJR19ERUZBVUxUX1VJTUFHRSkJCSs9IHVJbWFnZQorCitpZm5lcSAoJChDT05GSUdfREVWSUNFX1RSRUUpLCIiKQoraW1hZ2UtJChDT05GSUdfUFBDXzgzeHgpCQkrPSBjdUltYWdlLjgzeHgKK2ltYWdlLSQoQ09ORklHX1BQQ184NXh4KQkJKz0gY3VJbWFnZS44NXh4CitpbWFnZS0kKENPTkZJR19FQk9OWSkJCQkrPSB0cmVlSW1hZ2UuZWJvbnkgY3VJbWFnZS5lYm9ueQorZW5kaWYKIAogIyBGb3IgMzItYml0IHBvd2VybWFjcywgYnVpbGQgdGhlIENPRkYgYW5kIG1pYm9vdCBpbWFnZXMKICMgYXMgd2VsbCBhcyB0aGUgRUxGIGltYWdlcy4KQEAgLTEzOCw1MSArMTUwLDg3IEBACiBlbmRpZgogCiBpbml0cmQtICA6PSAkKHBhdHN1YnN0IHpJbWFnZSUsIHpJbWFnZS5pbml0cmQlLCAkKGltYWdlLW4pICQoaW1hZ2UtKSkKLWluaXRyZC15IDo9ICQocGF0c3Vic3QgekltYWdlJSwgekltYWdlLmluaXRyZCUsICQoaW1hZ2UteSkpCitpbml0cmQteSA6PSAkKHBhdHN1YnN0IHpJbWFnZSUsIHpJbWFnZS5pbml0cmQlLCBcCisJCSQocGF0c3Vic3QgdHJlZUltYWdlJSwgdHJlZUltYWdlLmluaXRyZCUsICQoaW1hZ2UteSkpKQogaW5pdHJkLXkgOj0gJChmaWx0ZXItb3V0ICQoaW1hZ2UteSksICQoaW5pdHJkLXkpKQogdGFyZ2V0cwkrPSAkKGltYWdlLXkpICQoaW5pdHJkLXkpCiAKICQoYWRkcHJlZml4ICQob2JqKS8sICQoaW5pdHJkLXkpKTogJChvYmopL3JhbWRpc2suaW1hZ2UuZ3oKIAorZHRzLSAgOj0gJChwYXRzdWJzdCB6SW1hZ2UlLCB6SW1hZ2UuZHRzJSwgJChpbWFnZS1uKSAkKGltYWdlLSkpCitkdHMteSA6PSAkKHBhdHN1YnN0IHpJbWFnZSUsIHpJbWFnZS5kdHMlLCAkKGltYWdlLXkpKQorZHRzLXkgOj0gJChmaWx0ZXItb3V0ICQoaW1hZ2UteSksICQoZHRzLXkpKQordGFyZ2V0cwkrPSAkKGltYWdlLXkpICQoZHRzLXkpCisKK2R0c19pbml0cmQtICA6PSAkKHBhdHN1YnN0IHpJbWFnZSUsIHpJbWFnZS5kdHNfaW5pdHJkJSwgJChpbWFnZS1uKSAkKGltYWdlLSkpCitkdHNfaW5pdHJkLXkgOj0gJChwYXRzdWJzdCB6SW1hZ2UlLCB6SW1hZ2UuZHRzX2luaXRyZCUsICQoaW1hZ2UteSkpCitkdHNfaW5pdHJkLXkgOj0gJChmaWx0ZXItb3V0ICQoaW1hZ2UteSksICQoZHRzX2luaXRyZC15KSkKK3RhcmdldHMJKz0gJChpbWFnZS15KSAkKGR0c19pbml0cmQteSkKKworJChhZGRwcmVmaXggJChvYmopLywgJChkdHNfaW5pdHJkLXkpKTogJChvYmopL3JhbWRpc2suaW1hZ2UuZ3oKKwogIyBEb24ndCBwdXQgdGhlIHJhbWRpc2sgb24gdGhlIHBhdHRlcm4gcnVsZTsgd2hlbiBpdHMgbWlzc2luZyBtYWtlIHdpbGwgdHJ5CiAjIHRoZSBwYXR0ZXJuIHJ1bGUgd2l0aCBsZXNzIGRlcGVuZGVuY2llcyB0aGF0IGFsc28gbWF0Y2hlcyAoZXZlbiB3aXRoIHRoZQogIyBoYXJkIGRlcGVuZGVuY3kgbGlzdGVkKS4KKyQob2JqKS96SW1hZ2UuZHRzX2luaXRyZC4lOiB2bWxpbnV4ICQod3JhcHBlcmJpdHMpICQoZHRzKSAkKG9iaikvcmFtZGlzay5pbWFnZS5negorCSQoY2FsbCBpZl9jaGFuZ2VkLHdyYXAsJCosJChkdHMpLCwkKG9iaikvcmFtZGlzay5pbWFnZS5neikKKworJChvYmopL3pJbWFnZS5kdHMuJTogdm1saW51eCAkKHdyYXBwZXJiaXRzKSAkKGR0cykKKwkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwLCQqLCQoZHRzKSkKKwogJChvYmopL3pJbWFnZS5pbml0cmQuJTogdm1saW51eCAkKHdyYXBwZXJiaXRzKQogCSQoY2FsbCBpZl9jaGFuZ2VkLHdyYXAsJCosLCwkKG9iaikvcmFtZGlzay5pbWFnZS5neikKIAogJChvYmopL3pJbWFnZS4lOiB2bWxpbnV4ICQod3JhcHBlcmJpdHMpCiAJJChjYWxsIGlmX2NoYW5nZWQsd3JhcCwkKikKIAorJChvYmopL3pJbWFnZS5pc2VyaWVzOiB2bWxpbnV4CisJJChTVFJJUCkgLXMgLVIgLmNvbW1lbnQgJDwgLW8gJEAKKwogJChvYmopL3pJbWFnZS5wczM6IHZtbGludXgKIAkkKFNUUklQKSAtcyAtUiAuY29tbWVudCAkPCAtbyAkQAogCiAkKG9iaikvekltYWdlLmluaXRyZC5wczM6IHZtbGludXgKIAlAZWNobyAiICBXQVJOSU5HIHpJbWFnZS5pbml0cmQucHMzIG5vdCBzdXBwb3J0ZWQgKHlldCkiCiAKKyQob2JqKS96SW1hZ2UuaG9sbHktZWxmOiB2bWxpbnV4ICQod3JhcHBlcmJpdHMpCisJJChjYWxsIGlmX2NoYW5nZWQsd3JhcCxob2xseSwkKG9iaikvZHRzL2hvbGx5LmR0cywsKQorCiskKG9iaikvekltYWdlLmluaXRyZC5ob2xseS1lbGY6IHZtbGludXggJCh3cmFwcGVyYml0cykgJChvYmopL3JhbWRpc2suaW1hZ2UuZ3oKKwkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwLGhvbGx5LCQob2JqKS9kdHMvaG9sbHkuZHRzLCwkKG9iaikvcmFtZGlzay5pbWFnZS5neikKKwogJChvYmopL3VJbWFnZTogdm1saW51eCAkKHdyYXBwZXJiaXRzKQogCSQoY2FsbCBpZl9jaGFuZ2VkLHdyYXAsdWJvb3QpCiAKLWN1Ym9vdC1wbGF0LSQoQ09ORklHXzgzeHgpICs9IDgzeHgKLWN1Ym9vdC1wbGF0LSQoQ09ORklHXzg1eHgpICs9IDg1eHgKLWN1Ym9vdC1wbGF0LXkgKz0gdW5rbm93bi1wbGF0Zm9ybQotCisjIENPTkZJR19ERVZJQ0VfVFJFRSB3aWxsIGhhdmUgIiIgYXJvdW5kIGl0LCBtYWtlIHN1cmUgdG8gc3RyaXAgdGhlbQogZHRzID0gJChpZiAkKHNoZWxsIGVjaG8gJChDT05GSUdfREVWSUNFX1RSRUUpIHwgZ3JlcCAnXi8nKSxcCi0gICAgICAgLCQoc3JjdHJlZSkvJChzcmMpL2R0cy8pJChDT05GSUdfREVWSUNFX1RSRUUpCisJLCQoc3JjdHJlZSkvJChzcmMpL2R0cy8pJChDT05GSUdfREVWSUNFX1RSRUU6IiUiPSUpCiAKLSQob2JqKS9jdUltYWdlOiB2bWxpbnV4ICQod3JhcHBlcmJpdHMpCi0JJChjYWxsIGlmX2NoYW5nZWQsd3JhcCxjdWJvb3QtJCh3b3JkIDEsJChjdWJvb3QtcGxhdC15KSksJChkdHMpKQorJChvYmopL2N1SW1hZ2UuJTogdm1saW51eCAkKGR0cykgJCh3cmFwcGVyYml0cykKKwkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwLGN1Ym9vdC0kKiwkKGR0cykpCisKKyQob2JqKS90cmVlSW1hZ2UuaW5pdHJkLiU6IHZtbGludXggJChkdHMpICQod3JhcHBlcmJpdHMpCisJJChjYWxsIGlmX2NoYW5nZWQsd3JhcCx0cmVlYm9vdC0kKiwkKGR0cyksLCQob2JqKS9yYW1kaXNrLmltYWdlLmd6KQorCiskKG9iaikvdHJlZUltYWdlLiU6IHZtbGludXggJChkdHMpICQod3JhcHBlcmJpdHMpCisJJChjYWxsIGlmX2NoYW5nZWQsd3JhcCx0cmVlYm9vdC0kKiwkKGR0cykpCiAKICQob2JqKS96SW1hZ2U6CQkkKGFkZHByZWZpeCAkKG9iaikvLCAkKGltYWdlLXkpKQogCUBybSAtZiAkQDsgbG4gJDwgJEAKICQob2JqKS96SW1hZ2UuaW5pdHJkOgkkKGFkZHByZWZpeCAkKG9iaikvLCAkKGluaXRyZC15KSkKIAlAcm0gLWYgJEA7IGxuICQ8ICRACiskKG9iaikvekltYWdlLmR0czoJJChhZGRwcmVmaXggJChvYmopLywgJChkdHMteSkpCisJQHJtIC1mICRAOyBsbiAkPCAkQAorJChvYmopL3pJbWFnZS5kdHNfaW5pdHJkOgkkKGFkZHByZWZpeCAkKG9iaikvLCAkKGR0c19pbml0cmQteSkpCisJQHJtIC1mICRAOyBsbiAkPCAkQAorCiAKIGluc3RhbGw6ICQoQ09ORklHVVJFKSAkKGFkZHByZWZpeCAkKG9iaikvLCAkKGltYWdlLXkpKQogCXNoIC14ICQoc3JjdHJlZSkvJChzcmMpL2luc3RhbGwuc2ggIiQoS0VSTkVMUkVMRUFTRSkiIHZtbGludXggU3lzdGVtLm1hcCAiJChJTlNUQUxMX1BBVEgpIiAkPAogCiAjIGFueXRoaW5nIG5vdCBpbiAkKHRhcmdldHMpCi1jbGVhbi1maWxlcyArPSAkKGltYWdlLSkgJChpbml0cmQtKSB6SW1hZ2UgekltYWdlLmluaXRyZCBcCi0gICAgICAgICAgICAgICBjdUltYWdlLmVsZiBjdUltYWdlLmJpbi5negorY2xlYW4tZmlsZXMgKz0gJChpbWFnZS0pICQoaW5pdHJkLSkgekltYWdlIHpJbWFnZS5pbml0cmQgY3VJbWFnZS4qIFwKKwl0cmVlSW1hZ2UuKiB6SW1hZ2UuZHRzIHpJbWFnZS5kdHNfaW5pdHJkCiAKICMgY2xlYW4gdXAgZmlsZXMgY2FjaGVkIGJ5IHdyYXBwZXIKIGNsZWFuLWtlcm5lbCA6PSB2bWxpbnV4LnN0cmlwIHZtbGludXguYmluCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtODN4eC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LTgzeHguYwppbmRleCA2Y2JjMjBhLi45YWY1NTRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtODN4eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC04M3h4LmMKQEAgLTU3LDcgKzU3LDcgQEAKIAogCW1lbWNweSgmYmQsIChiZF90ICopcjMsIHNpemVvZihiZCkpOwogCWxvYWRlcl9pbmZvLmluaXRyZF9hZGRyID0gcjQ7Ci0JbG9hZGVyX2luZm8uaW5pdHJkX3NpemUgPSByNCA/IHI1IDogMDsKKwlsb2FkZXJfaW5mby5pbml0cmRfc2l6ZSA9IHI0ID8gcjUgLSByNCA6IDA7CiAJbG9hZGVyX2luZm8uY21kbGluZSA9IChjaGFyICopcjY7CiAJbG9hZGVyX2luZm8uY21kbGluZV9sZW4gPSByNyAtIHI2OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtODV4eC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LTg1eHguYwppbmRleCBmODhiYTAwLi5lMjU2MDMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtODV4eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC04NXh4LmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogCW1lbWNweSgmYmQsIChiZF90ICopcjMsIHNpemVvZihiZCkpOwogCWxvYWRlcl9pbmZvLmluaXRyZF9hZGRyID0gcjQ7Ci0JbG9hZGVyX2luZm8uaW5pdHJkX3NpemUgPSByNCA/IHI1IDogMDsKKwlsb2FkZXJfaW5mby5pbml0cmRfc2l6ZSA9IHI0ID8gcjUgLSByNCA6IDA7CiAJbG9hZGVyX2luZm8uY21kbGluZSA9IChjaGFyICopcjY7CiAJbG9hZGVyX2luZm8uY21kbGluZV9sZW4gPSByNyAtIHI2OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtZWJvbnkuYyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1lYm9ueS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NjRjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtZWJvbnkuYwpAQCAtMCwwICsxLDQyIEBACisvKgorICogT2xkIFUtYm9vdCBjb21wYXRpYmlsaXR5IGZvciBFYm9ueQorICoKKyAqIEF1dGhvcjogRGF2aWQgR2lic29uIDxkYXZpZEBnaWJzb24uZHJvcGJlYXIuaWQuYXU+CisgKgorICogQ29weXJpZ2h0IDIwMDcgRGF2aWQgR2lic29uLCBJQk0gQ29ycG9yYXRpby4KKyAqICAgQmFzZWQgb24gY3Vib290LTgzeHguYywgd2hpY2ggaXM6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJvcHMuaCIKKyNpbmNsdWRlICJzdGRpby5oIgorI2luY2x1ZGUgIjQ0eC5oIgorCisjZGVmaW5lIFRBUkdFVF80NHgKKyNpbmNsdWRlICJwcGNib290LmgiCisKK3N0YXRpYyBiZF90IGJkOworZXh0ZXJuIGNoYXIgX2VuZFtdOworCitCU1NfU1RBQ0soNDA5Nik7CisKK3ZvaWQgcGxhdGZvcm1faW5pdCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpCit7CisJdW5zaWduZWQgbG9uZyBlbmRfb2ZfcmFtID0gYmQuYmlfbWVtc3RhcnQgKyBiZC5iaV9tZW1zaXplOworCXVuc2lnbmVkIGxvbmcgYXZhaWxfcmFtID0gZW5kX29mX3JhbSAtICh1bnNpZ25lZCBsb25nKV9lbmQ7CisKKwltZW1jcHkoJmJkLCAoYmRfdCAqKXIzLCBzaXplb2YoYmQpKTsKKwlsb2FkZXJfaW5mby5pbml0cmRfYWRkciA9IHI0OworCWxvYWRlcl9pbmZvLmluaXRyZF9zaXplID0gcjQgPyByNSA6IDA7CisJbG9hZGVyX2luZm8uY21kbGluZSA9IChjaGFyICopcjY7CisJbG9hZGVyX2luZm8uY21kbGluZV9sZW4gPSByNyAtIHI2OworCisJc2ltcGxlX2FsbG9jX2luaXQoX2VuZCwgYXZhaWxfcmFtLCAzMiwgNjQpOworCisJZWJvbnlfaW5pdCgmYmQuYmlfZW5ldGFkZHIsICZiZC5iaV9lbmV0MWFkZHIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZGNyLmggYi9hcmNoL3Bvd2VycGMvYm9vdC9kY3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzdiYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZGNyLmgKQEAgLTAsMCArMSw4NyBAQAorI2lmbmRlZiBfUFBDX0JPT1RfRENSX0hfCisjZGVmaW5lIF9QUENfQk9PVF9EQ1JfSF8KKworI2RlZmluZSBtZmRjcihybikgXAorCSh7CVwKKwkJdW5zaWduZWQgbG9uZyBydmFsOyBcCisJCWFzbSB2b2xhdGlsZSgibWZkY3IgJTAsJTEiIDogIj1yIihydmFsKSA6ICJpIihybikpOyBcCisJCXJ2YWw7IFwKKwl9KQorI2RlZmluZSBtdGRjcihybiwgdmFsKSBcCisJYXNtIHZvbGF0aWxlKCJtdGRjciAlMCwlMSIgOiA6ICJpIihybiksICJyIih2YWwpKQorCisvKiA0NDBHUC80NDBHWCBTRFJBTSBjb250cm9sbGVyIERDUnMgKi8KKyNkZWZpbmUgRENSTl9TRFJBTTBfQ0ZHQUREUgkJCQkweDAxMAorI2RlZmluZSBEQ1JOX1NEUkFNMF9DRkdEQVRBCQkJCTB4MDExCisKKyNkZWZpbmUgCVNEUkFNMF9CMENSCQkJCTB4NDAKKyNkZWZpbmUgCVNEUkFNMF9CMUNSCQkJCTB4NDQKKyNkZWZpbmUgCVNEUkFNMF9CMkNSCQkJCTB4NDgKKyNkZWZpbmUgCVNEUkFNMF9CM0NSCQkJCTB4NGMKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgc2RyYW1fYnhjcltdID0geyBTRFJBTTBfQjBDUiwgU0RSQU0wX0IxQ1IsIFNEUkFNMF9CMkNSLCBTRFJBTTBfQjNDUiB9OworCisjZGVmaW5lCQkJU0RSQU1fQ09ORklHX0JBTktfRU5BQkxFICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lCQkJU0RSQU1fQ09ORklHX1NJWkVfTUFTSyAgICAgICAgICAweDAwMGUwMDAwCisjZGVmaW5lCQkJU0RSQU1fQ09ORklHX0JBTktfU0laRShyZWcpCVwKKwkoMHgwMDQwMDAwMCA8PCAoKHJlZyAmIFNEUkFNX0NPTkZJR19TSVpFX01BU0spID4+IDE3KSkKKworLyogNDQwR1AgQ2xvY2ssIFBNLCBjaGlwIGNvbnRyb2wgKi8KKyNkZWZpbmUgRENSTl9DUEMwX1NSCQkJCQkweDBiMAorI2RlZmluZSBEQ1JOX0NQQzBfRVIJCQkJCTB4MGIxCisjZGVmaW5lIERDUk5fQ1BDMF9GUgkJCQkJMHgwYjIKKyNkZWZpbmUgRENSTl9DUEMwX1NZUzAJCQkJCTB4MGUwCisjZGVmaW5lCSAgQ1BDMF9TWVMwX1RVTkUJCQkJICAweGZmYzAwMDAwCisjZGVmaW5lCSAgQ1BDMF9TWVMwX0ZCRFZfTUFTSwkJCQkgIDB4MDAzYzAwMDAKKyNkZWZpbmUJICBDUEMwX1NZUzBfRldEVkFfTUFTSwkJCQkgIDB4MDAwMzgwMDAKKyNkZWZpbmUJICBDUEMwX1NZUzBfRldEVkJfTUFTSwkJCQkgIDB4MDAwMDcwMDAKKyNkZWZpbmUJICBDUEMwX1NZUzBfT1BEVl9NQVNLCQkJCSAgMHgwMDAwMGMwMAorI2RlZmluZQkgIENQQzBfU1lTMF9FUERWX01BU0sJCQkJICAweDAwMDAwMzAwCisvKiBIZWxwZXIgbWFjcm9zIHRvIGNvbXB1dGUgdGhlIGFjdHVhbCBjbG9jayBkaXZpZGVyIHZhbHVlcyBmcm9tIHRoZQorICogZW5jb2RpbmdzIGluIHRoZSBDUEMwIHJlZ2lzdGVyICovCisjZGVmaW5lCSAgQ1BDMF9TWVMwX0ZCRFYocmVnKSBcCisJCSgoKCgoKHJlZykgJiBDUEMwX1NZUzBfRkJEVl9NQVNLKSA+PiAxOCkgLSAxKSAmIDB4ZikgKyAxKQorI2RlZmluZQkgIENQQzBfU1lTMF9GV0RWQShyZWcpIFwKKwkJKDggLSAoKChyZWcpICYgQ1BDMF9TWVMwX0ZXRFZBX01BU0spID4+IDE1KSkKKyNkZWZpbmUJICBDUEMwX1NZUzBfRldEVkIocmVnKSBcCisJCSg4IC0gKCgocmVnKSAmIENQQzBfU1lTMF9GV0RWQl9NQVNLKSA+PiAxMikpCisjZGVmaW5lCSAgQ1BDMF9TWVMwX09QRFYocmVnKSBcCisJCSgoKChyZWcpICYgQ1BDMF9TWVMwX09QRFZfTUFTSykgPj4gMTApICsgMSkKKyNkZWZpbmUJICBDUEMwX1NZUzBfRVBEVihyZWcpIFwKKwkJKCgoKHJlZykgJiBDUEMwX1NZUzBfRVBEVl9NQVNLKSA+PiA4KSArIDEpCisjZGVmaW5lCSAgQ1BDMF9TWVMwX0VYVFNMCQkJCSAgMHgwMDAwMDA4MAorI2RlZmluZQkgIENQQzBfU1lTMF9SV19NQVNLCQkJCSAgMHgwMDAwMDA2MAorI2RlZmluZQkgIENQQzBfU1lTMF9STAkJCQkJICAweDAwMDAwMDEwCisjZGVmaW5lCSAgQ1BDMF9TWVMwX1pNSUlTTF9NQVNLCQkJCSAgMHgwMDAwMDAwYworI2RlZmluZQkgIENQQzBfU1lTMF9CWVBBU1MJCQkJICAweDAwMDAwMDAyCisjZGVmaW5lCSAgQ1BDMF9TWVMwX05UTzEJCQkJICAweDAwMDAwMDAxCisjZGVmaW5lIERDUk5fQ1BDMF9TWVMxCQkJCQkweDBlMQorI2RlZmluZSBEQ1JOX0NQQzBfQ1VTVDAJCQkJCTB4MGUyCisjZGVmaW5lIERDUk5fQ1BDMF9DVVNUMQkJCQkJMHgwZTMKKyNkZWZpbmUgRENSTl9DUEMwX1NUUlAwCQkJCQkweDBlNAorI2RlZmluZSBEQ1JOX0NQQzBfU1RSUDEJCQkJCTB4MGU1CisjZGVmaW5lIERDUk5fQ1BDMF9TVFJQMgkJCQkJMHgwZTYKKyNkZWZpbmUgRENSTl9DUEMwX1NUUlAzCQkJCQkweDBlNworI2RlZmluZSBEQ1JOX0NQQzBfR1BJTwkJCQkJMHgwZTgKKyNkZWZpbmUgRENSTl9DUEMwX1BMQgkJCQkJMHgwZTkKKyNkZWZpbmUgRENSTl9DUEMwX0NSMQkJCQkJMHgwZWEKKyNkZWZpbmUgRENSTl9DUEMwX0NSMAkJCQkJMHgwZWIKKyNkZWZpbmUJICBDUEMwX0NSMF9TV0UJCQkJCSAgMHg4MDAwMDAwMAorI2RlZmluZQkgIENQQzBfQ1IwX0NFVEUJCQkJCSAgMHg0MDAwMDAwMAorI2RlZmluZQkgIENQQzBfQ1IwX1UxRkNTCQkJCSAgMHgyMDAwMDAwMAorI2RlZmluZQkgIENQQzBfQ1IwX1UwRFRFCQkJCSAgMHgxMDAwMDAwMAorI2RlZmluZQkgIENQQzBfQ1IwX1UwRFJFCQkJCSAgMHgwODAwMDAwMAorI2RlZmluZQkgIENQQzBfQ1IwX1UwREMJCQkJCSAgMHgwNDAwMDAwMAorI2RlZmluZQkgIENQQzBfQ1IwX1UxRFRFCQkJCSAgMHgwMjAwMDAwMAorI2RlZmluZQkgIENQQzBfQ1IwX1UxRFJFCQkJCSAgMHgwMTAwMDAwMAorI2RlZmluZQkgIENQQzBfQ1IwX1UxREMJCQkJCSAgMHgwMDgwMDAwMAorI2RlZmluZQkgIENQQzBfQ1IwX1UwRUMJCQkJCSAgMHgwMDQwMDAwMAorI2RlZmluZQkgIENQQzBfQ1IwX1UxRUMJCQkJCSAgMHgwMDIwMDAwMAorI2RlZmluZQkgIENQQzBfQ1IwX1VESVZfTUFTSwkJCQkgIDB4MDAxZjAwMDAKKyNkZWZpbmUJICBDUEMwX0NSMF9VRElWKHJlZykgXAorCQkoKCgocmVnKSAmIENQQzBfQ1IwX1VESVZfTUFTSykgPj4gMTYpICsgMSkKKyNkZWZpbmUgRENSTl9DUEMwX01JUlEwCQkJCQkweDBlYworI2RlZmluZSBEQ1JOX0NQQzBfTUlSUTEJCQkJCTB4MGVkCisjZGVmaW5lIERDUk5fQ1BDMF9KVEFHSUQJCQkJMHgwZWYKKworI2VuZGlmCS8qIF9QUENfQk9PVF9EQ1JfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9lYm9ueS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZWJvbnkuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYzAyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZWJvbnkuZHRzCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBJQk0gRWJvbnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgSUJNIENvcnAuCisgKiBKb3NoIEJveWVyIDxqd2JveWVyQGxpbnV4LnZuZXQuaWJtLmNvbT4sIERhdmlkIEdpYnNvbiA8ZHdnQGF1MS5pYm0uY29tPgorICoKKyAqIEZJWE1FOiBEcmFmdCBvbmx5IQorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0CisgKiBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqIFRvIGJ1aWxkOgorICogICBkdGMgLUkgZHRzIC1PIGFzbSAtbyBlYm9ueS5TIC1iIDAgZWJvbnkuZHRzCisgKiAgIGR0YyAtSSBkdHMgLU8gZHRiIC1vIGVib255LmR0YiAtYiAwIGVib255LmR0cworICovCisKKy8geworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDE+OworCW1vZGVsID0gImlibSxlYm9ueSI7CisJY29tcGF0aWJsZSA9ICJpYm0sZWJvbnkiOworCWRjci1wYXJlbnQgPSA8Ji9jcHVzL1Bvd2VyUEMsNDQwR1BAMD47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsNDQwR1BAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvLyBGaWxsZWQgaW4gYnkgekltYWdlCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47IC8vIEZpbGxlZCBpbiBieSB6SW1hZ2UKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtc2l6ZSA9IDw4MDAwPjsgLyogMzIga0IgKi8KKwkJCWQtY2FjaGUtc2l6ZSA9IDw4MDAwPjsgLyogMzIga0IgKi8KKwkJCWRjci1jb250cm9sbGVyOworCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDAgMCAwPjsgLy8gRmlsbGVkIGluIGJ5IHpJbWFnZQorCX07CisKKwlVSUMwOiBpbnRlcnJ1cHQtY29udHJvbGxlcjAgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDQwZ3AiLCAiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDA+OworCQlkY3ItcmVnID0gPDBjMCAwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisKKwl9OworCisJVUlDMTogaW50ZXJydXB0LWNvbnRyb2xsZXIxIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ0MGdwIiwgImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwxPjsKKwkJZGNyLXJlZyA9IDwwZDAgMDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDFlIDQgMWYgND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCUNQQzA6IGNwYyB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGNwYy00NDBncCI7CisJCWRjci1yZWcgPSA8MGIwIDAwMyAwZTAgMDEwPjsKKwkJLy8gRklYTUU6IGFueXRoaW5nIGVsc2U/CisJfTsKKworCXBsYiB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHBsYi00NDBncCIsICJpYm0scGxiNCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZpbGxlZCBpbiBieSB6SW1hZ2UKKworCQlTRFJBTTA6IG1lbW9yeS1jb250cm9sbGVyIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHNkcmFtLTQ0MGdwIjsKKwkJCWRjci1yZWcgPSA8MDEwIDI+OworCQkJLy8gRklYTUU6IGFueXRoaW5nIGVsc2U/CisJCX07CisKKwkJU1JBTTA6IHNyYW0geworCQkJY29tcGF0aWJsZSA9ICJpYm0sc3JhbS00NDBncCI7CisJCQlkY3ItcmVnID0gPDAyMCA4IDAwYSAxPjsKKwkJfTsKKworCQlETUEwOiBkbWEgeworCQkJLy8gRklYTUU6ID8/PworCQkJY29tcGF0aWJsZSA9ICJpYm0sZG1hLTQ0MGdwIjsKKwkJCWRjci1yZWcgPSA8MTAwIDAyNz47CisJCX07CisKKwkJTUFMMDogbWNtYWwgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sbWNtYWwtNDQwZ3AiLCAiaWJtLG1jbWFsIjsKKwkJCWRjci1yZWcgPSA8MTgwIDYyPjsKKwkJCW51bS10eC1jaGFucyA9IDw0PjsKKwkJCW51bS1yeC1jaGFucyA9IDw0PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jk1BTDA+OworCQkJaW50ZXJydXB0cyA9IDwwIDEgMiAzIDQ+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlpbnRlcnJ1cHQtbWFwID0gPC8qVFhFT0IqLyAwICZVSUMwIGEgNAorCQkJCQkgLypSWEVPQiovIDEgJlVJQzAgYiA0CisJCQkJCSAvKlNFUlIqLyAgMiAmVUlDMSAwIDQKKwkJCQkJIC8qVFhERSovICAzICZVSUMxIDEgNAorCQkJCQkgLypSWERFKi8gIDQgJlVJQzEgMiA0PjsKKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmZmZmZmZmZj47CisJCX07CisKKwkJUE9CMDogb3BiIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLG9wYi00NDBncCIsICJpYm0sb3BiIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkvKiBXaXNoIHRoZXJlIHdhcyBhIG5pY2VyIHdheSBvZiBzcGVjaWZ5aW5nIGEgZnVsbCAzMi1iaXQKKwkJCSAgIHJhbmdlICovCisJCQlyYW5nZXMgPSA8MDAwMDAwMDAgMSAwMDAwMDAwMCA4MDAwMDAwMAorCQkJCSAgODAwMDAwMDAgMSA4MDAwMDAwMCA4MDAwMDAwMD47CisJCQlkY3ItcmVnID0gPDA5MCAwMGI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCQlpbnRlcnJ1cHRzID0gPDcgND47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZpbGxlZCBpbiBieSB6SW1hZ2UKKworCQkJRUJDMDogZWJjIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxlYmMtNDQwZ3AiLCAiaWJtLGViYyI7CisJCQkJZGNyLXJlZyA9IDwwMTIgMj47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvLyBGaWxsZWQgaW4gYnkgekltYWdlCisJCQkJcmFuZ2VzID0gPDAgMDAwMDAwMDAgZmZmMDAwMDAgMTAwMDAwCisJCQkJCSAgMSAwMDAwMDAwMCA0ODAwMDAwMCAxMDAwMDAKKwkJCQkJICAyIDAwMDAwMDAwIGZmODAwMDAwIDQwMDAwMAorCQkJCQkgIDMgMDAwMDAwMDAgNDgyMDAwMDAgMTAwMDAwCisJCQkJCSAgNyAwMDAwMDAwMCA0ODMwMDAwMCAxMDAwMDA+OworCQkJCWludGVycnVwdHMgPSA8NSA0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKworCQkJCXNtYWxsLWZsYXNoQDAsODAwMDAgeworCQkJCQlkZXZpY2VfdHlwZSA9ICJyb20iOworCQkJCQljb21wYXRpYmxlID0gImRpcmVjdC1tYXBwZWQiOworCQkJCQlwcm9iZS10eXBlID0gIkpFREVDIjsKKwkJCQkJYmFuay13aWR0aCA9IDwxPjsKKwkJCQkJcGFydGl0aW9ucyA9IDwwIDgwMDAwPjsKKwkJCQkJcGFydGl0aW9uLW5hbWVzID0gIk9wZW5CSU9TIjsKKwkJCQkJcmVnID0gPDAgODAwMDAgODAwMDA+OworCQkJCX07CisKKwkJCQlkczE3NDNAMSwwIHsKKwkJCQkJLyogTlZSQU0gJiBSVEMgKi8KKwkJCQkJY29tcGF0aWJsZSA9ICJkczE3NDMiOworCQkJCQlyZWcgPSA8MSAwIDIwMDA+OworCQkJCX07CisKKwkJCQlsYXJnZS1mbGFzaEAyLDAgeworCQkJCQlkZXZpY2VfdHlwZSA9ICJyb20iOworCQkJCQljb21wYXRpYmxlID0gImRpcmVjdC1tYXBwZWQiOworCQkJCQlwcm9iZS10eXBlID0gIkpFREVDIjsKKwkJCQkJYmFuay13aWR0aCA9IDwxPjsKKwkJCQkJcGFydGl0aW9ucyA9IDwwIDM4MDAwMAorCQkJCQkJICAgICAgMzgwMDAwIDgwMDAwPjsKKwkJCQkJcGFydGl0aW9uLW5hbWVzID0gImZzIiwgImZpcm13YXJlIjsKKwkJCQkJcmVnID0gPDIgMCA0MDAwMDA+OworCQkJCX07CisKKwkJCQlpckAzLDAgeworCQkJCQlyZWcgPSA8MyAwIDEwPjsKKwkJCQl9OworCisJCQkJZnBnYUA3LDAgeworCQkJCQljb21wYXRpYmxlID0gIkVib255LUZQR0EiOworCQkJCQlyZWcgPSA8NyAwIDEwPjsKKwkJCQl9OworCQkJfTsKKworCQkJVUFSVDA6IHNlcmlhbEA0MDAwMDIwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDw0MDAwMDIwMCA4PjsKKwkJCQl2aXJ0dWFsLXJlZyA9IDxlMDAwMDIwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPEE4QzAwMD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwyNTgwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDAgND47CisJCQl9OworCisJCQlVQVJUMTogc2VyaWFsQDQwMDAwMzAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQkJcmVnID0gPDQwMDAwMzAwIDg+OworCQkJCXZpcnR1YWwtcmVnID0gPGUwMDAwMzAwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8QThDMDAwPjsKKwkJCQljdXJyZW50LXNwZWVkID0gPDI1ODA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MSA0PjsKKwkJCX07CisKKwkJCUlJQzA6IGkyY0A0MDAwMDQwMCB7CisJCQkJLyogRklYTUUgKi8KKwkJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBncCIsICJpYm0saWljIjsKKwkJCQlyZWcgPSA8NDAwMDA0MDAgMTQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MiA0PjsKKwkJCX07CisJCQlJSUMxOiBpMmNANDAwMDA1MDAgeworCQkJCS8qIEZJWE1FICovCisJCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwZ3AiLCAiaWJtLGlpYyI7CisJCQkJcmVnID0gPDQwMDAwNTAwIDE0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDMgND47CisJCQl9OworCisJCQlHUElPMDogZ3Bpb0A0MDAwMDcwMCB7CisJCQkJLyogRklYTUUgKi8KKwkJCQljb21wYXRpYmxlID0gImlibSxncGlvLTQ0MGdwIjsKKwkJCQlyZWcgPSA8NDAwMDA3MDAgMjA+OworCQkJfTsKKworCQkJWk1JSTA6IGVtYWMtem1paUA0MDAwMDc4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sem1paS00NDBncCIsICJpYm0sem1paSI7CisJCQkJcmVnID0gPDQwMDAwNzgwIGM+OworCQkJfTsKKworCQkJRU1BQzA6IGV0aGVybmV0QDQwMDAwODAwIHsKKwkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDQwZ3AiLCAiaWJtLGVtYWMiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJCWludGVycnVwdHMgPSA8MWMgNCAxZCA0PjsKKwkJCQlyZWcgPSA8NDAwMDA4MDAgNzA+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07IC8vIEZpbGxlZCBpbiBieSB6SW1hZ2UKKwkJCQltYWwtZGV2aWNlID0gPCZNQUwwPjsKKwkJCQltYWwtdHgtY2hhbm5lbCA9IDwwIDE+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8NWRjPjsKKwkJCQlyeC1maWZvLXNpemUgPSA8MTAwMD47CisJCQkJdHgtZmlmby1zaXplID0gPDgwMD47CisJCQkJcGh5LW1vZGUgPSAicm1paSI7CisJCQkJcGh5LW1hcCA9IDwwMDAwMDAwMT47CisJCQkJem1paS1kZXZpY2UgPSA8JlpNSUkwPjsKKwkJCQl6bWlpLWNoYW5uZWwgPSA8MD47CisJCQl9OworCQkJRU1BQzE6IGV0aGVybmV0QDQwMDAwOTAwIHsKKwkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDE+OworCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDQwZ3AiLCAiaWJtLGVtYWMiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJCWludGVycnVwdHMgPSA8MWUgNCAxZiA0PjsKKwkJCQlyZWcgPSA8NDAwMDA5MDAgNzA+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07IC8vIEZpbGxlZCBpbiBieSB6SW1hZ2UKKwkJCQltYWwtZGV2aWNlID0gPCZNQUwwPjsKKwkJCQltYWwtdHgtY2hhbm5lbCA9IDwyIDM+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDE+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8NWRjPjsKKwkJCQlyeC1maWZvLXNpemUgPSA8MTAwMD47CisJCQkJdHgtZmlmby1zaXplID0gPDgwMD47CisJCQkJcGh5LW1vZGUgPSAicm1paSI7CisJCQkJcGh5LW1hcCA9IDwwMDAwMDAwMT47CisJCQkJem1paS1kZXZpY2UgPSA8JlpNSUkwPjsKKwkJCQl6bWlpLWNoYW5uZWwgPSA8MT47CisJCQl9OworCisKKwkJCUdQVDA6IGdwdEA0MDAwMGEwMCB7CisJCQkJLyogRklYTUUgKi8KKwkJCQlyZWcgPSA8NDAwMDBhMDAgZDQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MTIgNCAxMyA0IDE0IDQgMTUgNCAxNiA0PjsKKwkJCX07CisKKwkJfTsKKworCQlQQ0lYMDogcGNpQDEyMzQgeworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCS8qIEZJWE1FICovCisJCQlyZWcgPSA8MiAwZWMwMDAwMCA4CisJCQkgICAgICAgMiAwZWM4MDAwMCBmMAorCQkJICAgICAgIDIgMGVjODAxMDAgZmM+OworCQl9OworCX07CisKKwljaG9zZW4geworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICIvcGxiL29wYi9zZXJpYWxANDAwMDAyMDAiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2hvbGx5LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9ob2xseS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU0NDk5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9ob2xseS5kdHMKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIElCTSBIb2xseSAoUFBDIDc1MENMIHdpdGggVFNJIGNvbnRyb2xsZXIpCisgKiBDb3B5cmlnaHQgMjAwNywgSUJNIENvcnBvcmF0aW9uCisgKgorICogU3RlcGhlbiBXaW5pZWNraSA8c3RldmV3aW5AdXMuaWJtLmNvbT4KKyAqIEpvc2ggQm95ZXIgPGp3Ym95ZXJAbGludXgudm5ldC5pYm0uY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0CisgKiBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqIFRvIGJ1aWxkOgorICogICBkdGMgLUkgZHRzIC1PIGFzbSAtbyBob2xseS5TIC1iIDAgaG9sbHkuZHRzCisgKiAgIGR0YyAtSSBkdHMgLU8gZHRiIC1vIGhvbGx5LmR0YiAtYiAwIGhvbGx5LmR0cworICovCisKKy8geworCW1vZGVsID0gIjQxSzczMzkiOworCWNvbXBhdGlibGUgPSAiaWJtLGhvbGx5IjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPTwwPjsKKwkJUG93ZXJQQyw3NTBDTEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CisJCQlkLWNhY2hlLXNpemUgPSA8ODAwMD47CisJCQlpLWNhY2hlLXNpemUgPSA8ODAwMD47CisJCQlkLWNhY2hlLXNldHMgPSA8ODA+OworCQkJaS1jYWNoZS1zZXRzID0gPDgwPjsKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwyZmFmMDgwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyM2MzNDYwMD47CisJCQlidXMtZnJlcXVlbmN5ID0gPGJlYmMyMDA+OworCQkJMzItYml0OworCQl9OworCX07CisKKwltZW1vcnlAMCB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwwMDAwMDAwMCAyMDAwMDAwMD47CisJfTsKKworICAJdHNpMTA5QGMwMDAwMDAwIHsKKwkJZGV2aWNlX3R5cGUgPSAidHNpLWJyaWRnZSI7CisJCWNvbXBhdGlibGUgPSAidHNpLWJyaWRnZSI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAwMDAwMDAwIGMwMDAwMDAwIDAwMDEwMDAwPjsKKwkJcmVnID0gPGMwMDAwMDAwIDAwMDEwMDAwPjsKKworCQlpMmNANzAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOworCQkJY29tcGF0aWJsZSAgPSAidHNpLWkyYyI7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmL3RzaTEwOUBjMDAwMDAwMC9waWNANzQwMCA+OworCQkJaW50ZXJydXB0cyA9IDxlIDI+OworCQkJcmVnID0gPDcwMDAgNDAwPjsKKwkJfTsKKworCQltZGlvQDYwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAibWRpbyI7CisJCQljb21wYXRpYmxlID0gInRzaS1ldGhlcm5ldCI7CisKKwkJCVBIWTE6IGV0aGVybmV0LXBoeUA2MDAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCWNvbXBhdGlibGUgPSAiYmNtNTR4eCI7CisJCQkJcmVnID0gPDYwMDAgNTA+OworCQkJCXBoeS1pZCA9IDwxPjsKKwkJCX07CisKKwkJCVBIWTI6IGV0aGVybmV0LXBoeUA2NDAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCWNvbXBhdGlibGUgPSAiYmNtNTR4eCI7CisJCQkJcmVnID0gPDYwMDAgNTA+OworCQkJCXBoeS1pZCA9IDwyPjsKKwkJCX07CisJCX07CisKKwkJZXRoZXJuZXRANjIwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCWNvbXBhdGlibGUgPSAidHNpLWV0aGVybmV0IjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8NjAwMCAyMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmL3RzaTEwOUBjMDAwMDAwMC9waWNANzQwMCA+OworCQkJaW50ZXJydXB0cyA9IDwxMCAyPjsKKwkJCXBoeS1oYW5kbGUgPSA8JlBIWTE+OworCQl9OworCisJCWV0aGVybmV0QDY2MDAgeworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQljb21wYXRpYmxlID0gInRzaS1ldGhlcm5ldCI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDY0MDAgMjAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJi90c2kxMDlAYzAwMDAwMDAvcGljQDc0MDAgPjsKKwkJCWludGVycnVwdHMgPSA8MTEgMj47CisJCQlwaHktaGFuZGxlID0gPCZQSFkyPjsKKwkJfTsKKworCQlzZXJpYWxANzgwOCB7CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDw3ODA4IDIwMD47CisJCQl2aXJ0dWFsLXJlZyA9IDxjMDAwNzgwOD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8M0Y5QzYwMDA+OworCQkJY3VycmVudC1zcGVlZCA9IDwxYzIwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmL3RzaTEwOUBjMDAwMDAwMC9waWNANzQwMCA+OworCQkJaW50ZXJydXB0cyA9IDxjIDI+OworCQl9OworCisJCXNlcmlhbEA3YzA4IHsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDdjMDggMjAwPjsKKwkJCXZpcnR1YWwtcmVnID0gPGMwMDA3YzA4PjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzRjlDNjAwMD47CisJCQljdXJyZW50LXNwZWVkID0gPDFjMjAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8ICYvdHNpMTA5QGMwMDAwMDAwL3BpY0A3NDAwID47CisJCQlpbnRlcnJ1cHRzID0gPGQgMj47CisJCX07CisKKwkgIAlNUElDOiBwaWNANzQwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDc0MDAgNDAwPjsKKwkJCWJpZy1lbmRpYW47CisJCX07CisKKwkJcGNpQDEwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCWNvbXBhdGlibGUgPSAidHNpMTA5IjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJcmVnID0gPDEwMDAgMTAwMD47CisJCQlidXMtcmFuZ2UgPSA8MCAwPjsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJCXwgUENJIG1lbW9yeSByYW5nZS4KKwkJCXwgMDEgZGVub3RlcyBJL08gc3BhY2UKKwkJCXwgMDIgZGVub3RlcyAzMi1iaXQgbWVtb3J5IHNwYWNlCisJCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA0MDAwMDAwMCA0MDAwMDAwMCAwIDEwMDAwMDAwCisJCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIDdlMDAwMDAwIDAgMDAwMTAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDdmMjgxNTQ+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJi90c2kxMDlAYzAwMDAwMDAvcGljQDc0MDAgPjsKKwkJCWludGVycnVwdHMgPSA8MTcgMj47CisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCQl8IFRoZSBJTlRBLCBJTlRCLCBJTlRDLCBJTlREIGFyZSBzaGFyZWQuCisJCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJCTA4MDAgMCAwIDEgJlJUMCAyNCAwCisJCQkJMDgwMCAwIDAgMiAmUlQwIDI1IDAKKwkJCQkwODAwIDAgMCAzICZSVDAgMjYgMAorCQkJCTA4MDAgMCAwIDQgJlJUMCAyNyAwCisKKwkJCQkxMDAwIDAgMCAxICZSVDAgMjUgMAorCQkJCTEwMDAgMCAwIDIgJlJUMCAyNiAwCisJCQkJMTAwMCAwIDAgMyAmUlQwIDI3IDAKKwkJCQkxMDAwIDAgMCA0ICZSVDAgMjQgMAorCisJCQkJMTgwMCAwIDAgMSAmUlQwIDI2IDAKKwkJCQkxODAwIDAgMCAyICZSVDAgMjcgMAorCQkJCTE4MDAgMCAwIDMgJlJUMCAyNCAwCisJCQkJMTgwMCAwIDAgNCAmUlQwIDI1IDAKKworCQkJCTIwMDAgMCAwIDEgJlJUMCAyNyAwCisJCQkJMjAwMCAwIDAgMiAmUlQwIDI0IDAKKwkJCQkyMDAwIDAgMCAzICZSVDAgMjUgMAorCQkJCTIwMDAgMCAwIDQgJlJUMCAyNiAwCisJCQkJPjsKKworCQkJUlQwOiByb3V0ZXJAMTE4MCB7CisgCQkJCWRldmljZV90eXBlID0gInBpYy1yb3V0ZXIiOworIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKyAJCQkJYmlnLWVuZGlhbjsKKyAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKyAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKyAJCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmL3RzaTEwOUBjMDAwMDAwMC9waWNANzQwMCA+OworCQkJfTsKKwkJfTsKKwl9OworCisJY2hvc2VuIHsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3RzaTEwOUBjMDAwMDAwMC9zZXJpYWxANzgwOCI7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rdXJvYm94SEQuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2t1cm9ib3hIRC5kdHMKaW5kZXggMTU3ZGM5OC4uYTk4MzY4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2t1cm9ib3hIRC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2t1cm9ib3hIRC5kdHMKQEAgLTIxLDE5ICsyMSwxNiBAQAogICovCiAKIC8gewotCWxpbnV4LHBoYW5kbGUgPSA8MTAwMD47CiAJbW9kZWwgPSAiS3Vyb2JveEhEIjsKIAljb21wYXRpYmxlID0gImxpbmtzdGF0aW9uIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKIAogCWNwdXMgewotCQlsaW51eCxwaGFuZGxlID0gPDIwMDA+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAKIAkJUG93ZXJQQyw2MDNlIHsgLyogUmVhbGx5IDgyNDEgKi8KLQkJCWxpbnV4LHBoYW5kbGUgPSA8MjEwMD47CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJcmVnID0gPDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPGJlYmMyMDA+OwkvKiBGaXhlZCBieSBib290d3JhcHBlciAqLwpAQCAtNDgsMTMgKzQ1LDExIEBACiAJfTsKIAogCW1lbW9yeSB7Ci0JCWxpbnV4LHBoYW5kbGUgPSA8MzAwMD47CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CiAJCXJlZyA9IDwwMDAwMDAwMCAwNDAwMDAwMD47CiAJfTsKIAogCXNvYzEweCB7IC8qIEFGQUlDVCBuZWVkIHRvIG1ha2Ugc29jIGZvciA4MjQ1J3MgdWFydHMgdG8gYmUgZGVmaW5lZCAqLwotCQlsaW51eCxwaGFuZGxlID0gPDQwMDA+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CkBAIC02OSwzOCArNjQsMzQgQEAKIAkJCSAgZmVmMDAwMDAgZmVmMDAwMDAgMDAxMDAwMDA+OwkvKiBwY2kgaWFjayAqLwogCiAJCWkyY0A4MDAwMzAwMCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDQzMDA+OwogCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CiAJCQlyZWcgPSA8ODAwMDMwMDAgMTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDUgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQ0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJc2VyaWFsQDgwMDA0NTAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8NDUxMT47CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKIAkJCXJlZyA9IDw4MDAwNDUwMCA4PjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1ZDA4ZDg4PjsKIAkJCWN1cnJlbnQtc3BlZWQgPSA8MjU4MD47CiAJCQlpbnRlcnJ1cHRzID0gPDkgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQ0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJc2VyaWFsQDgwMDA0NjAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8NDUxMj47CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKIAkJCXJlZyA9IDw4MDAwNDYwMCA4PjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw1ZDA4ZDg4PjsKIAkJCWN1cnJlbnQtc3BlZWQgPSA8ZTEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPGEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQ0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKLQkJcGljQDgwMDQwMDAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8NDQwMD47CisJCW1waWM6IHBpY0A4MDA0MDAwMCB7CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CkBAIC0xMTEsNyArMTAyLDYgQEAKIAkJfTsKIAogCQlwY2lAZmVjMDAwMDAgewotCQkJbGludXgscGhhbmRsZSA9IDw0NTAwPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwogCQkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMTIyLDI0ICsxMTIsMjQgQEAKIAkJCQkgIDAyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCA3MDAwMDAwMD47CiAJCQlidXMtcmFuZ2UgPSA8MCBmZj47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8N2YyODE1NT47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQ0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CiAJCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkJCS8qIElEU0VMIDExIC0gSVJRMCBFVEggKi8KLQkJCQk1ODAwIDAgMCAxIDQ0MDAgMCAxCi0JCQkJNTgwMCAwIDAgMiA0NDAwIDEgMQotCQkJCTU4MDAgMCAwIDMgNDQwMCAyIDEKLQkJCQk1ODAwIDAgMCA0IDQ0MDAgMyAxCisJCQkJNTgwMCAwIDAgMSAmbXBpYyAwIDEKKwkJCQk1ODAwIDAgMCAyICZtcGljIDEgMQorCQkJCTU4MDAgMCAwIDMgJm1waWMgMiAxCisJCQkJNTgwMCAwIDAgNCAmbXBpYyAzIDEKIAkJCQkvKiBJRFNFTCAxMiAtIElSUTEgSURFMCAqLwotCQkJCTYwMDAgMCAwIDEgNDQwMCAxIDEKLQkJCQk2MDAwIDAgMCAyIDQ0MDAgMiAxCi0JCQkJNjAwMCAwIDAgMyA0NDAwIDMgMQotCQkJCTYwMDAgMCAwIDQgNDQwMCAwIDEKKwkJCQk2MDAwIDAgMCAxICZtcGljIDEgMQorCQkJCTYwMDAgMCAwIDIgJm1waWMgMiAxCisJCQkJNjAwMCAwIDAgMyAmbXBpYyAzIDEKKwkJCQk2MDAwIDAgMCA0ICZtcGljIDAgMQogCQkJCS8qIElEU0VMIDE0IC0gSVJRMyBVU0IyLjAgKi8KLQkJCQk3MDAwIDAgMCAxIDQ0MDAgMyAxCi0JCQkJNzAwMCAwIDAgMiA0NDAwIDMgMQotCQkJCTcwMDAgMCAwIDMgNDQwMCAzIDEKLQkJCQk3MDAwIDAgMCA0IDQ0MDAgMyAxCisJCQkJNzAwMCAwIDAgMSAmbXBpYyAzIDEKKwkJCQk3MDAwIDAgMCAyICZtcGljIDMgMQorCQkJCTcwMDAgMCAwIDMgJm1waWMgMyAxCisJCQkJNzAwMCAwIDAgNCAmbXBpYyAzIDEKIAkJCT47CiAJCX07CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rdXJvYm94SEcuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2t1cm9ib3hIRy5kdHMKaW5kZXggOTE5ZWIyOS4uNWNmNDJkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2t1cm9ib3hIRy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2t1cm9ib3hIRy5kdHMKQEAgLTIxLDE5ICsyMSwxNiBAQAogICovCiAKIC8gewotCWxpbnV4LHBoYW5kbGUgPSA8MTAwMD47CiAJbW9kZWwgPSAiS3Vyb2JveEhHIjsKIAljb21wYXRpYmxlID0gImxpbmtzdGF0aW9uIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKIAogCWNwdXMgewotCQlsaW51eCxwaGFuZGxlID0gPDIwMDA+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CiAKIAkJUG93ZXJQQyw2MDNlIHsgLyogUmVhbGx5IDgyNDEgKi8KLQkJCWxpbnV4LHBoYW5kbGUgPSA8MjEwMD47CiAJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwogCQkJcmVnID0gPDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPGZkYWQ2ODA+OwkvKiBGaXhlZCBieSBib290d3JhcHBlciAqLwpAQCAtNDgsMTMgKzQ1LDExIEBACiAJfTsKIAogCW1lbW9yeSB7Ci0JCWxpbnV4LHBoYW5kbGUgPSA8MzAwMD47CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CiAJCXJlZyA9IDwwMDAwMDAwMCAwODAwMDAwMD47CiAJfTsKIAogCXNvYzEweCB7IC8qIEFGQUlDVCBuZWVkIHRvIG1ha2Ugc29jIGZvciA4MjQ1J3MgdWFydHMgdG8gYmUgZGVmaW5lZCAqLwotCQlsaW51eCxwaGFuZGxlID0gPDQwMDA+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CkBAIC02OSwzOCArNjQsMzUgQEAKIAkJCSAgZmVmMDAwMDAgZmVmMDAwMDAgMDAxMDAwMDA+OwkvKiBwY2kgaWFjayAqLwogCiAJCWkyY0A4MDAwMzAwMCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDQzMDA+OwogCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CiAJCQlyZWcgPSA8ODAwMDMwMDAgMTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDUgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQ0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJc2VyaWFsQDgwMDA0NTAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8NDUxMT47CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKIAkJCXJlZyA9IDw4MDAwNDUwMCA4PjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw3YzA0NGE4PjsKIAkJCWN1cnJlbnQtc3BlZWQgPSA8MjU4MD47CiAJCQlpbnRlcnJ1cHRzID0gPDkgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQ0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJc2VyaWFsQDgwMDA0NjAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8NDUxMj47CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKIAkJCXJlZyA9IDw4MDAwNDYwMCA4PjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw3YzA0NGE4PjsKIAkJCWN1cnJlbnQtc3BlZWQgPSA8ZTEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPGEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQ0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKLQkJcGljQDgwMDQwMDAwIHsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8NDQwMD47CisJCW1waWM6IHBpY0A4MDA0MDAwMCB7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKQEAgLTExMSw3ICsxMDMsNiBAQAogCQl9OwogCiAJCXBjaUBmZWMwMDAwMCB7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDQ1MDA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CkBAIC0xMjIsMjQgKzExMywyNCBAQAogCQkJCSAgMDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDcwMDAwMDAwPjsKIAkJCWJ1cy1yYW5nZSA9IDwwIGZmPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw3ZjI4MTU1PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDQwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKIAkJCWludGVycnVwdC1tYXAgPSA8CiAJCQkJLyogSURTRUwgMTEgLSBJUlEwIEVUSCAqLwotCQkJCTU4MDAgMCAwIDEgNDQwMCAwIDEKLQkJCQk1ODAwIDAgMCAyIDQ0MDAgMSAxCi0JCQkJNTgwMCAwIDAgMyA0NDAwIDIgMQotCQkJCTU4MDAgMCAwIDQgNDQwMCAzIDEKKwkJCQk1ODAwIDAgMCAxICZtcGljIDAgMQorCQkJCTU4MDAgMCAwIDIgJm1waWMgMSAxCisJCQkJNTgwMCAwIDAgMyAmbXBpYyAyIDEKKwkJCQk1ODAwIDAgMCA0ICZtcGljIDMgMQogCQkJCS8qIElEU0VMIDEyIC0gSVJRMSBJREUwICovCi0JCQkJNjAwMCAwIDAgMSA0NDAwIDEgMQotCQkJCTYwMDAgMCAwIDIgNDQwMCAyIDEKLQkJCQk2MDAwIDAgMCAzIDQ0MDAgMyAxCi0JCQkJNjAwMCAwIDAgNCA0NDAwIDAgMQorCQkJCTYwMDAgMCAwIDEgJm1waWMgMSAxCisJCQkJNjAwMCAwIDAgMiAmbXBpYyAyIDEKKwkJCQk2MDAwIDAgMCAzICZtcGljIDMgMQorCQkJCTYwMDAgMCAwIDQgJm1waWMgMCAxCiAJCQkJLyogSURTRUwgMTQgLSBJUlEzIFVTQjIuMCAqLwotCQkJCTcwMDAgMCAwIDEgNDQwMCAzIDEKLQkJCQk3MDAwIDAgMCAyIDQ0MDAgMyAxCi0JCQkJNzAwMCAwIDAgMyA0NDAwIDMgMQotCQkJCTcwMDAgMCAwIDQgNDQwMCAzIDEKKwkJCQk3MDAwIDAgMCAxICZtcGljIDMgMQorCQkJCTcwMDAgMCAwIDIgJm1waWMgMyAxCisJCQkJNzAwMCAwIDAgMyAmbXBpYyAzIDEKKwkJCQk3MDAwIDAgMCA0ICZtcGljIDMgMQogCQkJPjsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKaW5kZXggYmE1NGM2Yi4uZDI5MzA4ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCkBAIC00OCw3ICs0OCw4IEBACiAKIAlzb2M1MjAwQGYwMDAwMDAwIHsKIAkJbW9kZWwgPSAiZnNsLG1wYzUyMDAiOwotCQlyZXZpc2lvbiA9ICIiCQkJLy8gZnJvbSBib290bG9hZGVyCisJCWNvbXBhdGlibGUgPSAibXBjNTIwMCI7CisJCXJldmlzaW9uID0gIiI7CQkJLy8gZnJvbSBib290bG9hZGVyCiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CiAJCWRldmljZV90eXBlID0gInNvYyI7CiAJCXJhbmdlcyA9IDwwIGYwMDAwMDAwIGYwMDEwMDAwPjsKQEAgLTYxLDkgKzYyLDggQEAKIAkJCXJlZyA9IDwyMDAgMzg+OwogCQl9OwogCi0JCXBpY0A1MDAgeworCQltcGM1MjAwX3BpYzogcGljQDUwMCB7CiAJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOwotCQkJbGludXgscGhhbmRsZSA9IDw1MDA+OwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OwogCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOwpAQCAtNzgsNyArNzgsNyBAQAogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDw2MDAgMTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQloYXMtd2R0OwogCQl9OwogCkBAIC04OCw3ICs4OCw3IEBACiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDYxMCAxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgYSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlncHRANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCkBAIC05Nyw3ICs5Nyw3IEBACiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJcmVnID0gPDYyMCAxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgYiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlncHRANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlyZWcgPSA8NjMwIDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSBjIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWdwdEA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKQEAgLTExNSw3ICsxMTUsNyBAQAogCQkJY2VsbC1pbmRleCA9IDw0PjsKIAkJCXJlZyA9IDw2NDAgMTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIGQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJZ3B0QDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgpAQCAtMTI0LDcgKzEyNCw3IEBACiAJCQljZWxsLWluZGV4ID0gPDU+OwogCQkJcmVnID0gPDY1MCAxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgZSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlncHRANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJCWNlbGwtaW5kZXggPSA8Nj47CiAJCQlyZWcgPSA8NjYwIDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSBmIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWdwdEA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKQEAgLTE0Miw3ICsxNDIsNyBAQAogCQkJY2VsbC1pbmRleCA9IDw3PjsKIAkJCXJlZyA9IDw2NzAgMTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXJ0Y0A4MDAgewkvLyBSZWFsIHRpbWUgY2xvY2sKQEAgLTE1MCw3ICsxNTAsNyBAQAogCQkJZGV2aWNlX3R5cGUgPSAicnRjIjsKIAkJCXJlZyA9IDw4MDAgMTAwPjsKIAkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCW1zY2FuQDkwMCB7CkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAibXBjNTIwMC1tc2NhbiI7CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDExIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDkwMCA4MD47CiAJCX07CiAKQEAgLTE2Niw4ICsxNjYsOCBAQAogCQkJZGV2aWNlX3R5cGUgPSAibXNjYW4iOwogCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwLW1zY2FuIjsKIAkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTIgMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlyZWcgPSA8OTgwIDgwPjsKIAkJfTsKIApAQCAtMTc1LDE0ICsxNzUsMTQgQEAKIAkJCWNvbXBhdGlibGUgPSAibXBjNTIwMC1ncGlvIjsKIAkJCXJlZyA9IDxiMDAgNDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKLQkJZ3Bpby13a3VwQGIwMCB7CisJCWdwaW8td2t1cEBjMDAgewogCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwLWdwaW8td2t1cCI7CiAJCQlyZWcgPSA8YzAwIDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXBjaUAwZDAwIHsKQEAgLTE5MywxMyArMTkzLDEzIEBACiAJCQljb21wYXRpYmxlID0gIm1wYzUyMDAtcGNpIjsKIAkJCXJlZyA9IDxkMDAgMTAwPjsKIAkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKLQkJCWludGVycnVwdC1tYXAgPSA8YzAwMCAwIDAgMSA1MDAgMCAwIDMKLQkJCSAgICAgICAgICAgICAgICAgYzAwMCAwIDAgMiA1MDAgMCAwIDMKLQkJCSAgICAgICAgICAgICAgICAgYzAwMCAwIDAgMyA1MDAgMCAwIDMKLQkJCSAgICAgICAgICAgICAgICAgYzAwMCAwIDAgNCA1MDAgMCAwIDM+OworCQkJaW50ZXJydXB0LW1hcCA9IDxjMDAwIDAgMCAxICZtcGM1MjAwX3BpYyAwIDAgMworCQkJICAgICAgICAgICAgICAgICBjMDAwIDAgMCAyICZtcGM1MjAwX3BpYyAwIDAgMworCQkJICAgICAgICAgICAgICAgICBjMDAwIDAgMCAzICZtcGM1MjAwX3BpYyAwIDAgMworCQkJICAgICAgICAgICAgICAgICBjMDAwIDAgMCA0ICZtcGM1MjAwX3BpYyAwIDAgMz47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKIAkJCWludGVycnVwdHMgPSA8MiA4IDAgMiA5IDAgMiBhIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJYnVzLXJhbmdlID0gPDAgMD47CiAJCQlyYW5nZXMgPSA8NDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDIwMDAwMDAwCiAJCQkgICAgICAgICAgMDIwMDAwMDAgMCBhMDAwMDAwMCBhMDAwMDAwMCAwIDEwMDAwMDAwCkBAIC0yMTEsNyArMjExLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAibXBjNTIwMC1zcGkiOwogCQkJcmVnID0gPGYwMCAyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgZCAwIDIgZSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl1c2JAMTAwMCB7CkBAIC0yMTksNyArMjE5LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAibXBjNTIwMC1vaGNpXDBvaGNpLWJlIjsKIAkJCXJlZyA9IDwxMDAwIGZmPjsKIAkJCWludGVycnVwdHMgPSA8MiA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWJlc3Rjb21tQDEyMDAgewpAQCAtMjMwLDcgKzIzMCw3IEBACiAJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCiAJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyBhIDAgIDMgYiAwCiAJCQkgICAgICAgICAgICAgIDMgYyAwICAzIGQgMCAgMyBlIDAgIDMgZiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MjAwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJLy8gUFNDMiBpbiBhYzk3IG1vZGUgZXhhbXBsZQpAQCAtMjU1LDcgKzI1NSw3IEBACiAJCS8vCWNlbGwtaW5kZXggPSA8MT47CiAJCS8vCXJlZyA9IDwyMjAwIDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiAyIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzMgaW4gQ09ERUMgbW9kZSBleGFtcGxlCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkJLy8JY2VsbC1pbmRleCA9IDwyPjsKIAkJLy8JcmVnID0gPDI0MDAgMTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDMgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDNCBpbiB1YXJ0IG1vZGUgZXhhbXBsZQpAQCAtMjc1LDcgKzI3NSw3IEBACiAJCS8vCWNlbGwtaW5kZXggPSA8Mz47CiAJCS8vCXJlZyA9IDwyNjAwIDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiBiIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzUgaW4gdWFydCBtb2RlIGV4YW1wbGUKQEAgLTI4NSw3ICsyODUsNyBAQAogCQkvLwljZWxsLWluZGV4ID0gPDQ+OwogCQkvLwlyZWcgPSA8MjgwMCAxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgYyAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0M2IGluIHNwaSBtb2RlIGV4YW1wbGUKQEAgLTI5NSw3ICsyOTUsNyBAQAogCQkvLwljZWxsLWluZGV4ID0gPDU+OwogCQkvLwlyZWcgPSA8MmMwMCAxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQlldGhlcm5ldEAzMDAwIHsKQEAgLTMwNCw3ICszMDQsNyBAQAogCQkJcmVnID0gPDMwMDAgODAwPjsKIAkJCW1hYy1hZGRyZXNzID0gWyAwMiAwMyAwNCAwNSAwNiAwNyBdOyAvLyBCYWQhCiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlhdGFAM2EwMCB7CkBAIC0zMTIsMjUgKzMxMiwyNyBAQAogCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwLWF0YSI7CiAJCQlyZWcgPSA8M2EwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJaTJjQDNkMDAgewogCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKLQkJCWNvbXBhdGlibGUgPSAibXBjNTIwMC1pMmMiOworCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwLWkyY1wwZnNsLWkyYyI7CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDNkMDAgNDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIGYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKIAkJCWRldmljZV90eXBlID0gImkyYyI7Ci0JCQljb21wYXRpYmxlID0gIm1wYzUyMDAtaTJjIjsKKwkJCWNvbXBhdGlibGUgPSAibXBjNTIwMC1pMmNcMGZzbC1pMmMiOwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwzZDQwIDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxMCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAJCXNyYW1AODAwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJzcmFtIjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKaW5kZXggMmUwMDMwOC4uZjI0MjUzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKQEAgLTQ4LDYgKzQ4LDcgQEAKIAogCXNvYzUyMDBAZjAwMDAwMDAgewogCQltb2RlbCA9ICJmc2wsbXBjNTIwMGIiOworCQljb21wYXRpYmxlID0gIm1wYzUyMDAiOwogCQlyZXZpc2lvbiA9ICIiOwkJCS8vIGZyb20gYm9vdGxvYWRlcgogCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OwogCQlkZXZpY2VfdHlwZSA9ICJzb2MiOwpAQCAtNjEsOSArNjIsOCBAQAogCQkJcmVnID0gPDIwMCAzOD47CiAJCX07CiAKLQkJcGljQDUwMCB7CisJCW1wYzUyMDBfcGljOiBwaWNANTAwIHsKIAkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDUwMD47CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CkBAIC03OCw3ICs3OCw3IEBACiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDYwMCAxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWhhcy13ZHQ7CiAJCX07CiAKQEAgLTg4LDcgKzg4LDcgQEAKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8NjEwIDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSBhIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWdwdEA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKQEAgLTk3LDcgKzk3LDcgQEAKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlyZWcgPSA8NjIwIDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSBiIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWdwdEA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKQEAgLTEwNiw3ICsxMDYsNyBAQAogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCXJlZyA9IDw2MzAgMTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIGMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJZ3B0QDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgpAQCAtMTE1LDcgKzExNSw3IEBACiAJCQljZWxsLWluZGV4ID0gPDQ+OwogCQkJcmVnID0gPDY0MCAxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgZCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlncHRANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCkBAIC0xMjQsNyArMTI0LDcgQEAKIAkJCWNlbGwtaW5kZXggPSA8NT47CiAJCQlyZWcgPSA8NjUwIDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSBlIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWdwdEA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKQEAgLTEzMyw3ICsxMzMsNyBAQAogCQkJY2VsbC1pbmRleCA9IDw2PjsKIAkJCXJlZyA9IDw2NjAgMTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIGYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJZ3B0QDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgpAQCAtMTQyLDcgKzE0Miw3IEBACiAJCQljZWxsLWluZGV4ID0gPDc+OwogCQkJcmVnID0gPDY3MCAxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJcnRjQDgwMCB7CS8vIFJlYWwgdGltZSBjbG9jawpAQCAtMTUwLDcgKzE1MCw3IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJydGMiOwogCQkJcmVnID0gPDgwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDUgMCAxIDYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJbXNjYW5AOTAwIHsKQEAgLTE1OCw3ICsxNTgsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwYi1tc2NhblwwbXBjNTIwMC1tc2NhbiI7CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDExIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDkwMCA4MD47CiAJCX07CiAKQEAgLTE2Niw4ICsxNjYsOCBAQAogCQkJZGV2aWNlX3R5cGUgPSAibXNjYW4iOwogCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwYi1tc2NhblwwbXBjNTIwMC1tc2NhbiI7CiAJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDEyIDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDk4MCA4MD47CiAJCX07CiAKQEAgLTE3NSwxNCArMTc1LDE0IEBACiAJCQljb21wYXRpYmxlID0gIm1wYzUyMDBiLWdwaW9cMG1wYzUyMDAtZ3BpbyI7CiAJCQlyZWcgPSA8YjAwIDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCi0JCWdwaW8td2t1cEBiMDAgeworCQlncGlvLXdrdXBAYzAwIHsKIAkJCWNvbXBhdGlibGUgPSAibXBjNTIwMGItZ3Bpby13a3VwXDBtcGM1MjAwLWdwaW8td2t1cCI7CiAJCQlyZWcgPSA8YzAwIDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXBjaUAwZDAwIHsKQEAgLTE5MywxOCArMTkzLDE4IEBACiAJCQljb21wYXRpYmxlID0gIm1wYzUyMDBiLXBjaVwwbXBjNTIwMC1wY2kiOwogCQkJcmVnID0gPGQwMCAxMDA+OwogCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OwotCQkJaW50ZXJydXB0LW1hcCA9IDxjMDAwIDAgMCAxIDUwMCAwIDAgMyAvLyAxc3Qgc2xvdAotCQkJICAgICAgICAgICAgICAgICBjMDAwIDAgMCAyIDUwMCAxIDEgMwotCQkJICAgICAgICAgICAgICAgICBjMDAwIDAgMCAzIDUwMCAxIDIgMwotCQkJICAgICAgICAgICAgICAgICBjMDAwIDAgMCA0IDUwMCAxIDMgMworCQkJaW50ZXJydXB0LW1hcCA9IDxjMDAwIDAgMCAxICZtcGM1MjAwX3BpYyAwIDAgMyAvLyAxc3Qgc2xvdAorCQkJICAgICAgICAgICAgICAgICBjMDAwIDAgMCAyICZtcGM1MjAwX3BpYyAxIDEgMworCQkJICAgICAgICAgICAgICAgICBjMDAwIDAgMCAzICZtcGM1MjAwX3BpYyAxIDIgMworCQkJICAgICAgICAgICAgICAgICBjMDAwIDAgMCA0ICZtcGM1MjAwX3BpYyAxIDMgMwogCi0JCQkgICAgICAgICAgICAgICAgIGM4MDAgMCAwIDEgNTAwIDEgMSAzIC8vIDJuZCBzbG90Ci0JCQkgICAgICAgICAgICAgICAgIGM4MDAgMCAwIDIgNTAwIDEgMiAzCi0JCQkgICAgICAgICAgICAgICAgIGM4MDAgMCAwIDMgNTAwIDEgMyAzCi0JCQkgICAgICAgICAgICAgICAgIGM4MDAgMCAwIDQgNTAwIDAgMCAzPjsKKwkJCSAgICAgICAgICAgICAgICAgYzgwMCAwIDAgMSAmbXBjNTIwMF9waWMgMSAxIDMgLy8gMm5kIHNsb3QKKwkJCSAgICAgICAgICAgICAgICAgYzgwMCAwIDAgMiAmbXBjNTIwMF9waWMgMSAyIDMKKwkJCSAgICAgICAgICAgICAgICAgYzgwMCAwIDAgMyAmbXBjNTIwMF9waWMgMSAzIDMKKwkJCSAgICAgICAgICAgICAgICAgYzgwMCAwIDAgNCAmbXBjNTIwMF9waWMgMCAwIDM+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvLyBGcm9tIGJvb3QgbG9hZGVyCiAJCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgYSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQkJcmFuZ2VzID0gPDQyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAyMDAwMDAwMAogCQkJICAgICAgICAgIDAyMDAwMDAwIDAgYTAwMDAwMDAgYTAwMDAwMDAgMCAxMDAwMDAwMApAQCAtMjE2LDcgKzIxNiw3IEBACiAJCQljb21wYXRpYmxlID0gIm1wYzUyMDBiLXNwaVwwbXBjNTIwMC1zcGkiOwogCQkJcmVnID0gPGYwMCAyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgZCAwIDIgZSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl1c2JAMTAwMCB7CkBAIC0yMjQsNyArMjI0LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAibXBjNTIwMGItb2hjaVwwbXBjNTIwMC1vaGNpXDBvaGNpLWJlIjsKIAkJCXJlZyA9IDwxMDAwIGZmPjsKIAkJCWludGVycnVwdHMgPSA8MiA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWJlc3Rjb21tQDEyMDAgewpAQCAtMjM1LDcgKzIzNSw3IEBACiAJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCiAJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyBhIDAgIDMgYiAwCiAJCQkgICAgICAgICAgICAgIDMgYyAwICAzIGQgMCAgMyBlIDAgIDMgZiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0yNTAsNyArMjUwLDcgQEAKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MjAwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJLy8gUFNDMiBpbiBhYzk3IG1vZGUgZXhhbXBsZQpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCS8vCWNlbGwtaW5kZXggPSA8MT47CiAJCS8vCXJlZyA9IDwyMjAwIDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiAyIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzMgaW4gQ09ERUMgbW9kZSBleGFtcGxlCkBAIC0yNzAsNyArMjcwLDcgQEAKIAkJLy8JY2VsbC1pbmRleCA9IDwyPjsKIAkJLy8JcmVnID0gPDI0MDAgMTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDMgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDNCBpbiB1YXJ0IG1vZGUgZXhhbXBsZQpAQCAtMjgwLDcgKzI4MCw3IEBACiAJCS8vCWNlbGwtaW5kZXggPSA8Mz47CiAJCS8vCXJlZyA9IDwyNjAwIDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiBiIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzUgaW4gdWFydCBtb2RlIGV4YW1wbGUKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQkvLwljZWxsLWluZGV4ID0gPDQ+OwogCQkvLwlyZWcgPSA8MjgwMCAxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgYyAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0M2IGluIHNwaSBtb2RlIGV4YW1wbGUKQEAgLTMwMCw3ICszMDAsNyBAQAogCQkvLwljZWxsLWluZGV4ID0gPDU+OwogCQkvLwlyZWcgPSA8MmMwMCAxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDw1MDA+OworCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQlldGhlcm5ldEAzMDAwIHsKQEAgLTMwOSw3ICszMDksNyBAQAogCQkJcmVnID0gPDMwMDAgODAwPjsKIAkJCW1hYy1hZGRyZXNzID0gWyAwMiAwMyAwNCAwNSAwNiAwNyBdOyAvLyBCYWQhCiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlhdGFAM2EwMCB7CkBAIC0zMTcsMjUgKzMxNywyNyBAQAogCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwYi1hdGFcMG1wYzUyMDAtYXRhIjsKIAkJCXJlZyA9IDwzYTAwIDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NTAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlpMmNAM2QwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOwotCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwYi1pMmNcMG1wYzUyMDAtaTJjIjsKKwkJCWNvbXBhdGlibGUgPSAibXBjNTIwMGItaTJjXDBtcGM1MjAwLWkyY1wwZnNsLWkyYyI7CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDNkMDAgNDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIGYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKIAkJCWRldmljZV90eXBlID0gImkyYyI7Ci0JCQljb21wYXRpYmxlID0gIm1wYzUyMDBiLWkyY1wwbXBjNTIwMC1pMmMiOworCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwYi1pMmNcMG1wYzUyMDAtaTJjXDBmc2wtaTJjIjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8M2Q0MCA0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTAgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDUwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCQlzcmFtQDgwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAic3JhbSI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNzQ0OGhwYzIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzc0NDhocGMyLmR0cwppbmRleCA2ZmEzNzU0Li43NjVjMzA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNzQ0OGhwYzIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM3NDQ4aHBjMi5kdHMKQEAgLTE2LDEyICsxNiwxMCBAQAogCWNvbXBhdGlibGUgPSAibXBjNzR4eCI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47Ci0JbGludXgscGhhbmRsZSA9IDwxMDA+OwogCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9PDA+OwotCQlsaW51eCxwaGFuZGxlID0gPDIwMD47CiAJCQkJCiAJCVBvd2VyUEMsNzQ0OEAwIHsKIAkJCWRldmljZV90eXBlID0gImNwdSI7CkBAIC0zNCwxMyArMzIsMTEgQEAKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gVS1Cb290CiAJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSBVLUJvb3QKIAkJCTMyLWJpdDsKLQkJCWxpbnV4LHBoYW5kbGUgPSA8MjAxPjsKIAkJfTsKIAl9OwogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJbGludXgscGhhbmRsZSA9IDwzMDA+OwogCQlyZWcgPSA8MDAwMDAwMDAgMjAwMDAwMDAJLy8gRERSMiAgIDUxMk0gYXQgMAogCQkgICAgICAgPjsKIAl9OwpAQCAtNTUsNyArNTEsNyBAQAogCQlidXMtZnJlcXVlbmN5ID0gPDA+OwogCiAJCWkyY0A3MDAwIHsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzQwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdHMgPSA8RSAwPjsKIAkJCXJlZyA9IDw3MDAwIDQwMD47CiAJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOwpAQCAtNjYsMTggKzYyLDE2IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKIAkJCWNvbXBhdGlibGUgPSAidHNpLWV0aGVybmV0IjsKIAotCQkJZXRoZXJuZXQtcGh5QDYwMDAgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8NjAwMD47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3NDAwPjsKKwkJCXBoeTg6IGV0aGVybmV0LXBoeUA2MDAwIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDIgMT47CiAJCQkJcmVnID0gPDYwMDAgNTA+OwogCQkJCXBoeS1pZCA9IDw4PjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJfTsKIAotCQkJZXRoZXJuZXQtcGh5QDY0MDAgewotCQkJCWxpbnV4LHBoYW5kbGUgPSA8NjQwMD47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3NDAwPjsKKwkJCXBoeTk6IGV0aGVybmV0LXBoeUA2NDAwIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDIgMT47CiAJCQkJcmVnID0gPDYwMDAgNTA+OwogCQkJCXBoeS1pZCA9IDw5PjsKQEAgLTk0LDggKzg4LDggQEAKIAkJCXJlZyA9IDw2MDAwIDIwMD47CiAJCQlhZGRyZXNzID0gWyAwMCAwNiBEMiAwMCAwMCAwMSBdOwogCQkJaW50ZXJydXB0cyA9IDwxMCAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzQwMD47Ci0JCQlwaHktaGFuZGxlID0gPDYwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHk4PjsKIAkJfTsKIAogCQlldGhlcm5ldEA2NjAwIHsKQEAgLTEwNyw4ICsxMDEsOCBAQAogCQkJcmVnID0gPDY0MDAgMjAwPjsKIAkJCWFkZHJlc3MgPSBbIDAwIDA2IEQyIDAwIDAwIDAyIF07CiAJCQlpbnRlcnJ1cHRzID0gPDExIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3NDAwPjsKLQkJCXBoeS1oYW5kbGUgPSA8NjQwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTk+OwogCQl9OwogCiAJCXNlcmlhbEA3ODA4IHsKQEAgLTExNyw3ICsxMTEsNyBAQAogCQkJcmVnID0gPDc4MDggMjAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjZiNWEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPGMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDc0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJc2VyaWFsQDdjMDggewpAQCAtMTI2LDExICsxMjAsMTAgQEAKIAkJCXJlZyA9IDw3YzA4IDIwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8M2Y2YjVhMDA+OwogCQkJaW50ZXJydXB0cyA9IDxkIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3NDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCi0JICAJcGljQDc0MDAgewotCQkJbGludXgscGhhbmRsZSA9IDw3NDAwPjsKKwkgIAltcGljOiBwaWNANzQwMCB7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwpAQCAtMTQ0LDcgKzEzNyw2IEBACiAJCXBjaUAxMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAidHNpMTB4IjsKIAkJCWRldmljZV90eXBlID0gInBjaSI7Ci0JCQlsaW51eCxwaGFuZGxlID0gPDEwMDA+OwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDI+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CkBAIC0xNTMsMzcgKzE0NSwzNyBAQAogCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgZTAwMDAwMDAgZTAwMDAwMDAgMCAxQTAwMDAwMAkKIAkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZmEwMDAwMDAgMCAwMDAxMDAwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8N2YyODE1ND47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDc0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlpbnRlcnJ1cHRzID0gPDE3IDI+OwogCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OwogCQkJaW50ZXJydXB0LW1hcCA9IDwKIAogCQkJCS8qIElEU0VMIDB4MTEgKi8KLQkJCQkwODAwIDAgMCAxIDExODAgMjQgMAotCQkJCTA4MDAgMCAwIDIgMTE4MCAyNSAwCi0JCQkJMDgwMCAwIDAgMyAxMTgwIDI2IDAKLQkJCQkwODAwIDAgMCA0IDExODAgMjcgMAorCQkJCTA4MDAgMCAwIDEgJlJUMCAyNCAwCisJCQkJMDgwMCAwIDAgMiAmUlQwIDI1IDAKKwkJCQkwODAwIDAgMCAzICZSVDAgMjYgMAorCQkJCTA4MDAgMCAwIDQgJlJUMCAyNyAwCiAKIAkJCQkvKiBJRFNFTCAweDEyICovCi0JCQkJMTAwMCAwIDAgMSAxMTgwIDI1IDAKLQkJCQkxMDAwIDAgMCAyIDExODAgMjYgMAotCQkJCTEwMDAgMCAwIDMgMTE4MCAyNyAwCi0JCQkJMTAwMCAwIDAgNCAxMTgwIDI0IDAKKwkJCQkxMDAwIDAgMCAxICZSVDAgMjUgMAorCQkJCTEwMDAgMCAwIDIgJlJUMCAyNiAwCisJCQkJMTAwMCAwIDAgMyAmUlQwIDI3IDAKKwkJCQkxMDAwIDAgMCA0ICZSVDAgMjQgMAogCiAJCQkJLyogSURTRUwgMHgxMyAqLwotCQkJCTE4MDAgMCAwIDEgMTE4MCAyNiAwCi0JCQkJMTgwMCAwIDAgMiAxMTgwIDI3IDAKLQkJCQkxODAwIDAgMCAzIDExODAgMjQgMAotCQkJCTE4MDAgMCAwIDQgMTE4MCAyNSAwCisJCQkJMTgwMCAwIDAgMSAmUlQwIDI2IDAKKwkJCQkxODAwIDAgMCAyICZSVDAgMjcgMAorCQkJCTE4MDAgMCAwIDMgJlJUMCAyNCAwCisJCQkJMTgwMCAwIDAgNCAmUlQwIDI1IDAKIAogCQkJCS8qIElEU0VMIDB4MTQgKi8KLQkJCQkyMDAwIDAgMCAxIDExODAgMjcgMAotCQkJCTIwMDAgMCAwIDIgMTE4MCAyNCAwCi0JCQkJMjAwMCAwIDAgMyAxMTgwIDI1IDAKLQkJCQkyMDAwIDAgMCA0IDExODAgMjYgMAorCQkJCTIwMDAgMCAwIDEgJlJUMCAyNyAwCisJCQkJMjAwMCAwIDAgMiAmUlQwIDI0IDAKKwkJCQkyMDAwIDAgMCAzICZSVDAgMjUgMAorCQkJCTIwMDAgMCAwIDQgJlJUMCAyNiAwCiAJCQkJPjsKLQkJCXJvdXRlckAxMTgwIHsKLQkJCQlsaW51eCxwaGFuZGxlID0gPDExODA+OworCisJCQlSVDA6IHJvdXRlckAxMTgwIHsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkJZGV2aWNlX3R5cGUgPSAicGljLXJvdXRlciI7CkBAIC0xOTIsNyArMTg0LDcgQEAKIAkJCQlidWlsdC1pbjsKIAkJCQliaWctZW5kaWFuOwogCQkJCWludGVycnVwdHMgPSA8MTcgMj47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3NDAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCX07CiAJCX07CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzCmluZGV4IGM3OTg0OTEuLjExMmRkNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfbWRzLmR0cwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJaW50ZXJydXB0cyA9IDw0MiA4PjsKIAkJCWJ1cy1yYW5nZSA9IDwwIDA+OwotCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYTAwMDAwMDAgOTAwMDAwMDAgMCAxMDAwMDAwMAorCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgOTAwMDAwMDAgOTAwMDAwMDAgMCAxMDAwMDAwMAogCQkJICAgICAgICAgIDQyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAxMDAwMDAwMAogCQkJICAgICAgICAgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZDAwMDAwMDAgMCAwMDEwMDAwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CkBAIC0zMDYsMTQgKzMwNiwxMiBAQAogCQkJCWludGVycnVwdHMgPSA8MTEgOD47CiAJCQkJcmVnID0gPDM+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQkJaW50ZXJmYWNlID0gPDM+OyAvL0VORVRfMTAwX01JSQogCQkJfTsKIAkJCXBoeTQ6IGV0aGVybmV0LXBoeUAwNCB7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDEyIDg+OwogCQkJCXJlZyA9IDw0PjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJCWludGVyZmFjZSA9IDwzPjsKIAkJCX07CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9yZGIuZHRzCmluZGV4IGI1NWJjZWQuLmJlNGMzNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfcmRiLmR0cwpAQCAtMjY1LDE0ICsyNjUsMTIgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDA+OwogCQkJCXJlZyA9IDwwPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJCWludGVyZmFjZSA9IDwzPjsgLy9FTkVUXzEwMF9NSUkKIAkJCX07CiAJCQlwaHkwNDpldGhlcm5ldC1waHlAMDQgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JnBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwwPjsKIAkJCQlyZWcgPSA8ND47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCQlpbnRlcmZhY2UgPSA8Mz47CiAJCQl9OwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cwppbmRleCAwN2JjYzUxLi5kZjc3M2ZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCWludGVycnVwdHMgPSA8NDIgOD47CiAJCQlidXMtcmFuZ2UgPSA8MCAwPjsKLQkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGEwMDAwMDAwIGEwMDAwMDAwIDAgMTAwMDAwMDAKKwkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIDkwMDAwMDAwIDkwMDAwMDAwIDAgMTAwMDAwMDAKIAkJCQkgIDQyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAxMDAwMDAwMAogCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMCBlMjAwMDAwMCAwIDAwMTAwMDAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjk0MGFhPjsKQEAgLTI4NCw3ICsyODQsNyBAQAogCQkJaW50ZXJydXB0cyA9IDw0MiA4PjsKIAkJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYjAwMDAwMDAgYjAwMDAwMDAgMCAxMDAwMDAwMAotCQkJCSAgNDIwMDAwMDAgMCA5MDAwMDAwMCA5MDAwMDAwMCAwIDEwMDAwMDAwCisJCQkJICA0MjAwMDAwMCAwIGEwMDAwMDAwIGEwMDAwMDAwIDAgMTAwMDAwMDAKIAkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZTIxMDAwMDAgMCAwMDEwMDAwMD47CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8M2Y5NDBhYT47CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMKaW5kZXggN2Y1NzhlYi4uMzhjODU5NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2eF9tZHMuZHRzCkBAIC0zMDUsNiArMzA1LDcgQEAKIAkJCXJ4LWNsb2NrID0gPDA+OwogCQkJdHgtY2xvY2sgPSA8MTk+OwogCQkJcGh5LWhhbmRsZSA9IDwgJnBoeTAgPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOwogCQkJcGlvLWhhbmRsZSA9IDwgJnBpbzEgPjsKIAkJfTsKIApAQCAtMzIwLDYgKzMyMSw3IEBACiAJCQlyeC1jbG9jayA9IDwwPjsKIAkJCXR4LWNsb2NrID0gPDE0PjsKIAkJCXBoeS1oYW5kbGUgPSA8ICZwaHkxID47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKIAkJCXBpby1oYW5kbGUgPSA8ICZwaW8yID47CiAJCX07CiAKQEAgLTMzNSwxNCArMzM3LDEyIEBACiAJCQkJaW50ZXJydXB0cyA9IDwxMSA4PjsKIAkJCQlyZWcgPSA8MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCQlpbnRlcmZhY2UgPSA8Nj47IC8vRU5FVF8xMDAwX0dNSUkKIAkJCX07CiAJCQlwaHkxOiBldGhlcm5ldC1waHlAMDEgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCQkJaW50ZXJydXB0cyA9IDwxMiA4PjsKIAkJCQlyZWcgPSA8MT47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCQlpbnRlcmZhY2UgPSA8Nj47CiAJCQl9OwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMKaW5kZXggZjI2MWQ2NC4uZDkxZTgxYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDBhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQwYWRzLmR0cwpAQCAtNDgsNiArNDgsMjIgQEAKIAkJcmVnID0gPGUwMDAwMDAwIDAwMTAwMDAwPjsJLy8gQ0NTUkJBUiAxTQogCQlidXMtZnJlcXVlbmN5ID0gPDA+OwogCisJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0MC1tZW1vcnktY29udHJvbGxlciI7CisJCQlyZWcgPSA8MjAwMCAxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDI+OworCQl9OworCisJCWwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0MC1sMi1jYWNoZS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwyMDAwMCAxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDQwMDAwPjsJLy8gTDIsIDI1NksKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwwIDI+OworCQl9OworCiAJCWkyY0AzMDAwIHsKIAkJCWRldmljZV90eXBlID0gImkyYyI7CiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzCmluZGV4IDVmZGNiNjkuLjRmMmMzYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQxY2RzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMKQEAgLTQ4LDYgKzQ4LDIyIEBACiAJCXJlZyA9IDxlMDAwMDAwMCAwMDEwMDAwMD47CS8vIENDU1JCQVIgMU0KIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKIAorCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NDEtbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDIwMDAgMTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAyPjsKKwkJfTsKKworCQlsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NDEtbDItY2FjaGUtY29udHJvbGxlciI7CisJCQlyZWcgPSA8MjAwMDAgMTAwMD47CisJCQljYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcworCQkJY2FjaGUtc2l6ZSA9IDw0MDAwMD47CS8vIEwyLCAyNTZLCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MCAyPjsKKwkJfTsKKwogCQlpMmNAMzAwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ0ZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDRkcy5kdHMKaW5kZXggNmIwODQ2MC4uMzAzMzU5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDRkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDRkcy5kdHMKQEAgLTQ4LDYgKzQ4LDIyIEBACiAJCXJlZyA9IDxlMDAwMDAwMCAwMDEwMDAwMD47CS8vIENDU1JCQVIgMU0KIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZpbGxlZCBvdXQgYnkgdWJvb3QuCiAKKwkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCw4NTQ0LW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwyMDAwIDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgMj47CisJCX07CisKKwkJbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCw4NTQ0LWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDIwMDAwIDEwMDA+OworCQkJY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKKwkJCWNhY2hlLXNpemUgPSA8NDAwMDA+OwkvLyBMMiwgMjU2SworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDAgMj47CisJCX07CisKIAkJaTJjQDMwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMKaW5kZXggYjJiMjIwMC4uYWQ5NjM4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDhjZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cwpAQCAtNDgsNiArNDgsMjIgQEAKIAkJcmVnID0gPGUwMDAwMDAwIDAwMTAwMDAwPjsJLy8gQ0NTUkJBUiAxTQogCQlidXMtZnJlcXVlbmN5ID0gPDA+OwogCisJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0OC1tZW1vcnktY29udHJvbGxlciI7CisJCQlyZWcgPSA8MjAwMCAxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDI+OworCQl9OworCisJCWwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsODU0OC1sMi1jYWNoZS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwyMDAwMCAxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDgwMDAwPjsJLy8gTDIsIDUxMksKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwwIDI+OworCQl9OworCiAJCWkyY0AzMDAwIHsKIAkJCWRldmljZV90eXBlID0gImkyYyI7CiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzCmluZGV4IDY4YTQ3OTUuLjk1MWVkOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTU1Y2RzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMKQEAgLTQ4LDYgKzQ4LDIyIEBACiAJCXJlZyA9IDxlMDAwMDAwMCAwMDEwMDAwMD47CS8vIENDU1JCQVIgMU0KIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKIAorCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NTUtbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDIwMDAgMTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAyPjsKKwkJfTsKKworCQlsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NTUtbDItY2FjaGUtY29udHJvbGxlciI7CisJCQlyZWcgPSA8MjAwMDAgMTAwMD47CisJCQljYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcworCQkJY2FjaGUtc2l6ZSA9IDw0MDAwMD47CS8vIEwyLCAyNTZLCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MCAyPjsKKwkJfTsKKwogCQlpMmNAMzAwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cwppbmRleCAxZjJhZmU5Li44MDY4MjE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2MGFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjBhZHMuZHRzCkBAIC00OCw2ICs0OCwyMiBAQAogCQlyZWcgPSA8ZTAwMDAwMDAgMDAwMDAyMDA+OwogCQlidXMtZnJlcXVlbmN5ID0gPDEzYWI2NjgwPjsKIAorCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NDAtbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDIwMDAgMTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAyPjsKKwkJfTsKKworCQlsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NDAtbDItY2FjaGUtY29udHJvbGxlciI7CisJCQlyZWcgPSA8MjAwMDAgMTAwMD47CisJCQljYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcworCQkJY2FjaGUtc2l6ZSA9IDw0MDAwMD47CS8vIEwyLCAyNTZLCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MCAyPjsKKwkJfTsKKwogCQltZGlvQDI0NTIwIHsKIAkJCWRldmljZV90eXBlID0gIm1kaW8iOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKQEAgLTExMCw3ICsxMjYsNyBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CiAJCQljb21wYXRpYmxlID0gIjg1eHgiOwogCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJCXJlZyA9IDw4MDAwIDQwMD47CisJCQlyZWcgPSA8ODAwMCAxMDAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjk0MGFhPjsKIAkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKIAkJCWludGVycnVwdC1tYXAgPSA8CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKaW5kZXggNzM2MWIzNi4uYTEyM2VjOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cwpAQCAtNTcsNiArNTcsMjIgQEAKIAkJcmVnID0gPGUwMDAwMDAwIDAwMTAwMDAwPjsKIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKIAorCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NjgtbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDIwMDAgMTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAyPjsKKwkJfTsKKworCQlsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLDg1NjgtbDItY2FjaGUtY29udHJvbGxlciI7CisJCQlyZWcgPSA8MjAwMDAgMTAwMD47CisJCQljYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcworCQkJY2FjaGUtc2l6ZSA9IDw4MDAwMD47CS8vIEwyLCA1MTJLCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MCAyPjsKKwkJfTsKKwogCQlpMmNAMzAwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKQEAgLTI4OCw2ICszMDQsNyBAQAogCQkJcngtY2xvY2sgPSA8MD47CiAJCQl0eC1jbG9jayA9IDwxOT47CiAJCQlwaHktaGFuZGxlID0gPCZxZV9waHkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAiZ21paSI7CiAJCQlwaW8taGFuZGxlID0gPCZwaW8xPjsKIAkJfTsKIApAQCAtMzAzLDYgKzMyMCw3IEBACiAJCQlyeC1jbG9jayA9IDwwPjsKIAkJCXR4LWNsb2NrID0gPDE0PjsKIAkJCXBoeS1oYW5kbGUgPSA8JnFlX3BoeTE+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKIAkJCXBpby1oYW5kbGUgPSA8JnBpbzI+OwogCQl9OwogCkBAIC0zMjAsMjggKzMzOCwyNCBAQAogCQkJCWludGVycnVwdHMgPSA8MzEgMT47CiAJCQkJcmVnID0gPDA+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQkJaW50ZXJmYWNlID0gPDY+OyAvL0VORVRfMTAwMF9HTUlJCiAJCQl9OwogCQkJcWVfcGh5MTogZXRoZXJuZXQtcGh5QDAxIHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDMyIDE+OwogCQkJCXJlZyA9IDwxPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJCWludGVyZmFjZSA9IDw2PjsKIAkJCX07CiAJCQlxZV9waHkyOiBldGhlcm5ldC1waHlAMDIgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MzEgMT47CiAJCQkJcmVnID0gPDI+OwogCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQkJaW50ZXJmYWNlID0gPDY+OyAvL0VORVRfMTAwMF9HTUlJCiAJCQl9OwogCQkJcWVfcGh5MzogZXRoZXJuZXQtcGh5QDAzIHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDMyIDE+OwogCQkJCXJlZyA9IDwzPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJCWludGVyZmFjZSA9IDw2PjsgLy9FTkVUXzEwMDBfR01JSQogCQkJfTsKIAkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BycG1jMjgwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcHJwbWMyODAwLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njg5NjVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BycG1jMjgwMC5kdHMKQEAgLTAsMCArMSwzMTUgQEAKKy8qIERldmljZSBUcmVlIFNvdXJjZSBmb3IgTW90b3JvbGEgUHJQTUMyODAwCisgKgorICogQXV0aG9yOiBNYXJrIEEuIEdyZWVyIDxtZ3JlZXJAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA3IChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICoKKyAqIFByb3BlcnR5IHZhbHVlcyB0aGF0IGFyZSBsYWJlbGVkIGFzICJEZWZhdWx0IiB3aWxsIGJlIHVwZGF0ZWQgYnkgYm9vdHdyYXBwZXIKKyAqIGlmIGl0IGNhbiBkZXRlcm1pbmUgdGhlIGV4YWN0IFByUE1DIHR5cGUuCisgKgorICogVG8gYnVpbGQ6CisgKiAgIGR0YyAtSSBkdHMgLU8gYXNtIC1vIHBycG1jMjgwMC5TIC1iIDAgcHJwbWMyODAwLmR0cworICogICBkdGMgLUkgZHRzIC1PIGR0YiAtbyBwcnBtYzI4MDAuZHRiIC1iIDAgcHJwbWMyODAwLmR0cworICovCisKKy8geworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCW1vZGVsID0gIlByUE1DMjgwL1ByUE1DMjgwMCI7IC8qIERlZmF1bHQgKi8KKwljb21wYXRpYmxlID0gIm1vdG9yb2xhLFByUE1DMjgwMCI7CisJY29oZXJlbmN5LW9mZjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw3NDQ3IHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MmJiMGIxNDA+OwkvKiBEZWZhdWx0ICg3MzMgTUh6KSAqLworCQkJYnVzLWZyZXF1ZW5jeSA9IDw3ZjI4MTU1PjsJLyogMTMzLjMzMzMzMyBNSHogKi8KKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwxZmNhMDU1PjsJLyogMzMuMzMzMzMzIE1IeiAqLworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MjA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MjA+OworCQkJaS1jYWNoZS1zaXplID0gPDgwMDA+OworCQkJZC1jYWNoZS1zaXplID0gPDgwMDA+OworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MDAwMDAwMDAgMjAwMDAwMDA+OwkvKiBEZWZhdWx0ICg1MTJNQikgKi8KKwl9OworCisJbXY2NHg2MEBmMTAwMDAwMCB7IC8qIE1hcnZlbGwgRGlzY292ZXJ5ICovCisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJbW9kZWwgPSAibXY2NDM2MCI7CQkJLyogRGVmYXVsdCAqLworCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MCI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw3ZjI4MTU1PjsJCS8qIDEzMy4zMzMzMzMgTUh6ICovCisJCXJlZyA9IDxmMTAwMDAwMCAwMDAxMDAwMD47CisJCXZpcnR1YWwtcmVnID0gPGYxMDAwMDAwPjsKKwkJcmFuZ2VzID0gPDg4MDAwMDAwIDg4MDAwMDAwIDAxMDAwMDAwCS8qIFBDSSAwIEkvTyBTcGFjZSAqLworCQkJICA4MDAwMDAwMCA4MDAwMDAwMCAwODAwMDAwMAkvKiBQQ0kgMCBNRU0gU3BhY2UgKi8KKwkJCSAgYTAwMDAwMDAgYTAwMDAwMDAgMDQwMDAwMDAJLyogVXNlciBGTEFTSCAqLworCQkJICAwMDAwMDAwMCBmMTAwMDAwMCAwMDAxMDAwMAkvKiBCcmlkZ2UncyByZWdzICovCisJCQkgIGYyMDAwMDAwIGYyMDAwMDAwIDAwMDQwMDAwPjsJLyogSW50ZWdyYXRlZCBTUkFNICovCisKKwkJZmxhc2hAYTAwMDAwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAicm9tIjsKKwkJCWNvbXBhdGlibGUgPSAiZGlyZWN0LW1hcHBlZCI7CisJCQlyZWcgPSA8YTAwMDAwMDAgNDAwMDAwMD47IC8qIERlZmF1bHQgKDY0TUIpICovCisJCQlwcm9iZS10eXBlID0gIkNGSSI7CisJCQliYW5rLXdpZHRoID0gPDQ+OworCQkJcGFydGl0aW9ucyA9IDwwMDAwMDAwMCAwMDEwMDAwMCAvKiBSTyAqLworCQkJCSAgICAgIDAwMTAwMDAwIDAwMDQwMDAxIC8qIFJXICovCisJCQkJICAgICAgMDAxNDAwMDAgMDA0MDAwMDAgLyogUk8gKi8KKwkJCQkgICAgICAwMDU0MDAwMCAwMzljMDAwMCAvKiBSTyAqLworCQkJCSAgICAgIDAzZjAwMDAwIDAwMTAwMDAwPjsgLyogUk8gKi8KKwkJCXBhcnRpdGlvbi1uYW1lcyA9ICJGVyBJbWFnZSBBIiwgIkZXIENvbmZpZyBEYXRhIiwgIktlcm5lbCBJbWFnZSIsICJGaWxlc3lzdGVtIiwgIkZXIEltYWdlIEIiOworCQl9OworCisJCW1kaW8geworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm1kaW8iOworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4NjAtbWRpbyI7CisJCQlldGhlcm5ldC1waHlAMSB7CisJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQljb21wYXRpYmxlID0gImJyb2FkY29tLGJjbTU0MjEiOworCQkJCWludGVycnVwdHMgPSA8NGM+OwkvKiBHUFAgMTIgKi8KKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OworCQkJCXJlZyA9IDwxPjsKKwkJCX07CisJCQlldGhlcm5ldC1waHlAMyB7CisJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQljb21wYXRpYmxlID0gImJyb2FkY29tLGJjbTU0MjEiOworCQkJCWludGVycnVwdHMgPSA8NGM+OwkvKiBHUFAgMTIgKi8KKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OworCQkJCXJlZyA9IDwzPjsKKwkJCX07CisJCX07CisKKwkJZXRoZXJuZXRAMjAwMCB7CisJCQlyZWcgPSA8MjAwMCAyMDAwPjsKKwkJCWV0aDAgeworCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLWV0aCI7CisJCQkJYmxvY2staW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0cyA9IDwyMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmL212NjR4NjAvcGljPjsKKwkJCQlwaHkgPSA8Ji9tdjY0eDYwL21kaW8vZXRoZXJuZXQtcGh5QDE+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJfTsKKwkJCWV0aDEgeworCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLWV0aCI7CisJCQkJYmxvY2staW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0cyA9IDwyMT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmL212NjR4NjAvcGljPjsKKwkJCQlwaHkgPSA8Ji9tdjY0eDYwL21kaW8vZXRoZXJuZXQtcGh5QDM+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJfTsKKwkJfTsKKworCQlzZG1hQDQwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAiZG1hIjsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLXNkbWEiOworCQkJcmVnID0gPDQwMDAgYzE4PjsKKwkJCXZpcnR1YWwtcmVnID0gPGYxMDA0MDAwPjsKKwkJCWludGVycnVwdC1iYXNlID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwyND47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OworCQl9OworCisJCXNkbWFANjAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJkbWEiOworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4NjAtc2RtYSI7CisJCQlyZWcgPSA8NjAwMCBjMTg+OworCQkJdmlydHVhbC1yZWcgPSA8ZjEwMDYwMDA+OworCQkJaW50ZXJydXB0LWJhc2UgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDI2PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Ji9tdjY0eDYwL3BpYz47CisJCX07CisKKwkJYnJnQGIyMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4NjAtYnJnIjsKKwkJCXJlZyA9IDxiMjAwIDg+OworCQkJY2xvY2stc3JjID0gPDg+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDdlZDZiNDA+OworCQkJY3VycmVudC1zcGVlZCA9IDwyNTgwPjsKKwkJCWJjciA9IDwwPjsKKwkJfTsKKworCQlicmdAYjIwOCB7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MC1icmciOworCQkJcmVnID0gPGIyMDggOD47CisJCQljbG9jay1zcmMgPSA8OD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8N2VkNmI0MD47CisJCQljdXJyZW50LXNwZWVkID0gPDI1ODA+OworCQkJYmNyID0gPDA+OworCQl9OworCisJCWN1bml0QGYyMDAgeworCQkJcmVnID0gPGYyMDAgMjAwPjsKKwkJfTsKKworCQltcHNjcm91dGluZ0BiNDAwIHsKKwkJCXJlZyA9IDxiNDAwIGM+OworCQl9OworCisJCW1wc2NpbnRyQGI4MDAgeworCQkJcmVnID0gPGI4MDAgMTAwPjsKKwkJCXZpcnR1YWwtcmVnID0gPGYxMDBiODAwPjsKKwkJfTsKKworCQltcHNjQDgwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtcHNjIjsKKwkJCXJlZyA9IDw4MDAwIDM4PjsKKwkJCXZpcnR1YWwtcmVnID0gPGYxMDA4MDAwPjsKKwkJCXNkbWEgPSA8Ji9tdjY0eDYwL3NkbWFANDAwMD47CisJCQlicmcgPSA8Ji9tdjY0eDYwL2JyZ0BiMjAwPjsKKwkJCWN1bml0ID0gPCYvbXY2NHg2MC9jdW5pdEBmMjAwPjsKKwkJCW1wc2Nyb3V0aW5nID0gPCYvbXY2NHg2MC9tcHNjcm91dGluZ0BiNDAwPjsKKwkJCW1wc2NpbnRyID0gPCYvbXY2NHg2MC9tcHNjaW50ckBiODAwPjsKKwkJCWJsb2NrLWluZGV4ID0gPDA+OworCQkJbWF4X2lkbGUgPSA8Mjg+OworCQkJY2hyXzEgPSA8MD47CisJCQljaHJfMiA9IDwwPjsKKwkJCWNocl8xMCA9IDwzPjsKKwkJCW1wY3IgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDI4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Ji9tdjY0eDYwL3BpYz47CisJCX07CisKKwkJbXBzY0A5MDAwIHsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXBzYyI7CisJCQlyZWcgPSA8OTAwMCAzOD47CisJCQl2aXJ0dWFsLXJlZyA9IDxmMTAwOTAwMD47CisJCQlzZG1hID0gPCYvbXY2NHg2MC9zZG1hQDYwMDA+OworCQkJYnJnID0gPCYvbXY2NHg2MC9icmdAYjIwOD47CisJCQljdW5pdCA9IDwmL212NjR4NjAvY3VuaXRAZjIwMD47CisJCQltcHNjcm91dGluZyA9IDwmL212NjR4NjAvbXBzY3JvdXRpbmdAYjQwMD47CisJCQltcHNjaW50ciA9IDwmL212NjR4NjAvbXBzY2ludHJAYjgwMD47CisJCQlibG9jay1pbmRleCA9IDwxPjsKKwkJCW1heF9pZGxlID0gPDI4PjsKKwkJCWNocl8xID0gPDA+OworCQkJY2hyXzIgPSA8MD47CisJCQljaHJfMTAgPSA8Mz47CisJCQltcGNyID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwyYT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OworCQl9OworCisJCWkyY0BjMDAwIHsKKwkJCWRldmljZV90eXBlID0gImkyYyI7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MC1pMmMiOworCQkJcmVnID0gPGMwMDAgMjA+OworCQkJdmlydHVhbC1yZWcgPSA8ZjEwMGMwMDA+OworCQkJZnJlcV9tID0gPDg+OworCQkJZnJlcV9uID0gPDM+OworCQkJdGltZW91dCA9IDwzZTg+OwkJLyogMTAwMCA9IDEgc2Vjb25kICovCisJCQlyZXRyaWVzID0gPDE+OworCQkJaW50ZXJydXB0cyA9IDwyNT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCYvbXY2NHg2MC9waWM+OworCQl9OworCisJCXBpYyB7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MC1waWMiOworCQkJcmVnID0gPDAwMDAgODg+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCX07CisKKwkJbXBwQGYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4NjAtbXBwIjsKKwkJCXJlZyA9IDxmMDAwIDEwPjsKKwkJfTsKKworCQlncHBAZjEwMCB7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MC1ncHAiOworCQkJcmVnID0gPGYxMDAgMjA+OworCQl9OworCisJCXBjaUA4MDAwMDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MC1wY2kiOworCQkJcmVnID0gPDBjZjggOD47CisJCQlyYW5nZXMgPSA8MDEwMDAwMDAgMCAgICAgICAgMCA4ODAwMDAwMCAwIDAxMDAwMDAwCisJCQkJICAwMjAwMDAwMCAwIDgwMDAwMDAwIDgwMDAwMDAwIDAgMDgwMDAwMDA+OworCQkJYnVzLXJhbmdlID0gPDAgZmY+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDNFRjE0ODA+OworCQkJaW50ZXJydXB0LXBjaS1pYWNrID0gPDBjMzQ+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmL212NjR4NjAvcGljPjsKKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKKwkJCWludGVycnVwdC1tYXAgPSA8CisJCQkJLyogSURTRUwgMHgwYSAqLworCQkJCTUwMDAgMCAwIDEgJi9tdjY0eDYwL3BpYyA1MAorCQkJCTUwMDAgMCAwIDIgJi9tdjY0eDYwL3BpYyA1MQorCQkJCTUwMDAgMCAwIDMgJi9tdjY0eDYwL3BpYyA1YgorCQkJCTUwMDAgMCAwIDQgJi9tdjY0eDYwL3BpYyA1ZAorCisJCQkJLyogSURTRUwgMHgwYiAqLworCQkJCTU4MDAgMCAwIDEgJi9tdjY0eDYwL3BpYyA1YgorCQkJCTU4MDAgMCAwIDIgJi9tdjY0eDYwL3BpYyA1ZAorCQkJCTU4MDAgMCAwIDMgJi9tdjY0eDYwL3BpYyA1MAorCQkJCTU4MDAgMCAwIDQgJi9tdjY0eDYwL3BpYyA1MQorCisJCQkJLyogSURTRUwgMHgwYyAqLworCQkJCTYwMDAgMCAwIDEgJi9tdjY0eDYwL3BpYyA1YgorCQkJCTYwMDAgMCAwIDIgJi9tdjY0eDYwL3BpYyA1ZAorCQkJCTYwMDAgMCAwIDMgJi9tdjY0eDYwL3BpYyA1MAorCQkJCTYwMDAgMCAwIDQgJi9tdjY0eDYwL3BpYyA1MQorCisJCQkJLyogSURTRUwgMHgwZCAqLworCQkJCTY4MDAgMCAwIDEgJi9tdjY0eDYwL3BpYyA1ZAorCQkJCTY4MDAgMCAwIDIgJi9tdjY0eDYwL3BpYyA1MAorCQkJCTY4MDAgMCAwIDMgJi9tdjY0eDYwL3BpYyA1MQorCQkJCTY4MDAgMCAwIDQgJi9tdjY0eDYwL3BpYyA1YgorCQkJPjsKKwkJfTsKKworCQljcHUtZXJyb3JAMDA3MCB7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MC1jcHUtZXJyb3IiOworCQkJcmVnID0gPDAwNzAgMTAgMDEyOCAyOD47CisJCQlpbnRlcnJ1cHRzID0gPDAzPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Ji9tdjY0eDYwL3BpYz47CisJCX07CisKKwkJc3JhbS1jdHJsQDAzODAgeworCQkJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG12NjR4NjAtc3JhbS1jdHJsIjsKKwkJCXJlZyA9IDwwMzgwIDgwPjsKKwkJCWludGVycnVwdHMgPSA8MGQ+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmL212NjR4NjAvcGljPjsKKwkJfTsKKworCQlwY2ktZXJyb3JAMWQ0MCB7CisJCQljb21wYXRpYmxlID0gIm1hcnZlbGwsbXY2NHg2MC1wY2ktZXJyb3IiOworCQkJcmVnID0gPDFkNDAgNDAgMGMyOCA0PjsKKwkJCWludGVycnVwdHMgPSA8MGM+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmL212NjR4NjAvcGljPjsKKwkJfTsKKworCQltZW0tY3RybEAxNDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFydmVsbCxtdjY0eDYwLW1lbS1jdHJsIjsKKwkJCXJlZyA9IDwxNDAwIDYwPjsKKwkJCWludGVycnVwdHMgPSA8MTE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmL212NjR4NjAvcGljPjsKKwkJfTsKKwl9OworCisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiaXA9b24gY29uc29sZT10dHlNTTAiOworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICIvbXY2NHg2MEBmMTAwMDAwMC9tcHNjQDgwMDAiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZWJvbnkuYyBiL2FyY2gvcG93ZXJwYy9ib290L2Vib255LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyNTFlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2Vib255LmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBEYXZpZCBHaWJzb24sIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBCYXNlZCBvbiBlYXJsaWVyIGNvZGU6CisgKiAgIENvcHlyaWdodCAoQykgUGF1bCBNYWNrZXJyYXMgMTk5Ny4KKyAqCisgKiAgIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKiAgIENvcHlyaWdodCAyMDAyLTIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogICBFdWdlbmUgU3Vyb3ZlZ2luIDxldWdlbmUuc3Vyb3ZlZ2luQHp1bHR5cy5jb20+IG9yIDxlYnNAZWJzaG9tZS5uZXQ+CisgKiAgIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBadWx0eXMgVGVjaG5vbG9naWVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZWxmLmgiCisjaW5jbHVkZSAic3RyaW5nLmgiCisjaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlICJwYWdlLmgiCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAiZGNyLmgiCisjaW5jbHVkZSAiNDR4LmgiCisKK2V4dGVybiBjaGFyIF9kdGJfc3RhcnRbXTsKK2V4dGVybiBjaGFyIF9kdGJfZW5kW107CisKK3N0YXRpYyB1OCAqZWJvbnlfbWFjMCwgKmVib255X21hYzE7CisKKy8qIENhbGN1bGF0ZSA0NDBHUCBjbG9ja3MgKi8KK3ZvaWQgaWJtNDQwZ3BfZml4dXBfY2xvY2tzKHVuc2lnbmVkIGludCBzeXNjbGssIHVuc2lnbmVkIGludCBzZXJfY2xrKQoreworCXUzMiBzeXMwID0gbWZkY3IoRENSTl9DUEMwX1NZUzApOworCXUzMiBjcjAgPSBtZmRjcihEQ1JOX0NQQzBfQ1IwKTsKKwl1MzIgY3B1LCBwbGIsIG9wYiwgZWJjLCB0YiwgdWFydDAsIHVhcnQxLCBtOworCXUzMiBvcGR2ID0gQ1BDMF9TWVMwX09QRFYoc3lzMCk7CisJdTMyIGVwZHYgPSBDUEMwX1NZUzBfRVBEVihzeXMwKTsKKworCWlmIChzeXMwICYgQ1BDMF9TWVMwX0JZUEFTUykgeworCQkvKiBCeXBhc3Mgc3lzdGVtIFBMTCAqLworCQljcHUgPSBwbGIgPSBzeXNjbGs7CisJfSBlbHNlIHsKKwkJaWYgKHN5czAgJiBDUEMwX1NZUzBfRVhUU0wpCisJCQkvKiBQZXJDbGsgKi8KKwkJCW0gPSBDUEMwX1NZUzBfRldEVkIoc3lzMCkgKiBvcGR2ICogZXBkdjsKKwkJZWxzZQorCQkJLyogQ1BVIGNsb2NrICovCisJCQltID0gQ1BDMF9TWVMwX0ZCRFYoc3lzMCkgKiBDUEMwX1NZUzBfRldEVkEoc3lzMCk7CisJCWNwdSA9IHN5c2NsayAqIG0gLyBDUEMwX1NZUzBfRldEVkEoc3lzMCk7CisJCXBsYiA9IHN5c2NsayAqIG0gLyBDUEMwX1NZUzBfRldEVkIoc3lzMCk7CisJfQorCisJb3BiID0gcGxiIC8gb3BkdjsKKwllYmMgPSBvcGIgLyBlcGR2OworCisJLyogRklYTUU6IENoZWNrIGlmIHRoaXMgaXMgZm9yIGFsbCA0NDBHUCwgb3IganVzdCBFYm9ueSAqLworCWlmICgobWZwdnIoKSAmIDB4ZjAwMDBmZmYpID09IDB4NDAwMDA0NDApCisJCS8qIFJldi4gQiA0NDBHUCwgdXNlIGV4dGVybmFsIHN5c3RlbSBjbG9jayAqLworCQl0YiA9IHN5c2NsazsKKwllbHNlCisJCS8qIFJldi4gQyA0NDBHUCwgZXJyYXRhIGZvcmNlIHVzIHRvIHVzZSBpbnRlcm5hbCBjbG9jayAqLworCQl0YiA9IGNwdTsKKworCWlmIChjcjAgJiBDUEMwX0NSMF9VMEVDKQorCQkvKiBFeHRlcm5hbCBVQVJUIGNsb2NrICovCisJCXVhcnQwID0gc2VyX2NsazsKKwllbHNlCisJCS8qIEludGVybmFsIFVBUlQgY2xvY2sgKi8KKwkJdWFydDAgPSBwbGIgLyBDUEMwX0NSMF9VRElWKGNyMCk7CisKKwlpZiAoY3IwICYgQ1BDMF9DUjBfVTFFQykKKwkJLyogRXh0ZXJuYWwgVUFSVCBjbG9jayAqLworCQl1YXJ0MSA9IHNlcl9jbGs7CisJZWxzZQorCQkvKiBJbnRlcm5hbCBVQVJUIGNsb2NrICovCisJCXVhcnQxID0gcGxiIC8gQ1BDMF9DUjBfVURJVihjcjApOworCisJcHJpbnRmKCJQUEM0NDBHUDogU3lzQ2xrID0gJWRNSHogKCV4KVxuXHIiLAorCSAgICAgICAoc3lzY2xrICsgNTAwMDAwKSAvIDEwMDAwMDAsIHN5c2Nsayk7CisKKwlkdF9maXh1cF9jcHVfY2xvY2tzKGNwdSwgdGIsIDApOworCisJZHRfZml4dXBfY2xvY2soIi9wbGIiLCBwbGIpOworCWR0X2ZpeHVwX2Nsb2NrKCIvcGxiL29wYiIsIG9wYik7CisJZHRfZml4dXBfY2xvY2soIi9wbGIvb3BiL2ViYyIsIGViYyk7CisJZHRfZml4dXBfY2xvY2soIi9wbGIvb3BiL3NlcmlhbEA0MDAwMDIwMCIsIHVhcnQwKTsKKwlkdF9maXh1cF9jbG9jaygiL3BsYi9vcGIvc2VyaWFsQDQwMDAwMzAwIiwgdWFydDEpOworfQorCitzdGF0aWMgdm9pZCBlYm9ueV9maXh1cHModm9pZCkKK3sKKwkvLyBGSVhNRTogc3lzY2xrIHNob3VsZCBiZSBkZXJpdmVkIGJ5IHJlYWRpbmcgdGhlIEZQR0EgcmVnaXN0ZXJzCisJdW5zaWduZWQgbG9uZyBzeXNjbGsgPSAzMzAwMDAwMDsKKworCWlibTQ0MGdwX2ZpeHVwX2Nsb2NrcyhzeXNjbGssIDYgKiAxODQzMjAwKTsKKwlpYm00NHhfZml4dXBfbWVtc2l6ZSgpOworCWR0X2ZpeHVwX21hY19hZGRyZXNzZXMoZWJvbnlfbWFjMCwgZWJvbnlfbWFjMSk7Cit9CisKKyNkZWZpbmUgU1BSTl9EQkNSMAkJMHgxMzQKKyNkZWZpbmUgICBEQkNSMF9SU1RfU1lTVEVNCTB4MzAwMDAwMDAKKworc3RhdGljIHZvaWQgZWJvbnlfZXhpdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYXNtIHZvbGF0aWxlICgKKwkJIm1mc3ByCSUwLCUxXG4iCisJCSJvcmlzCSUwLCUwLCUyQGhcbiIKKwkJIm10c3ByCSUxLCUwIgorCQk6ICI9JnIiKHRtcCkgOiAiaSIoU1BSTl9EQkNSMCksICJpIihEQkNSMF9SU1RfU1lTVEVNKQorCQkpOworCit9CisKK3ZvaWQgZWJvbnlfaW5pdCh2b2lkICptYWMwLCB2b2lkICptYWMxKQoreworCXBsYXRmb3JtX29wcy5maXh1cHMgPSBlYm9ueV9maXh1cHM7CisJcGxhdGZvcm1fb3BzLmV4aXQgPSBlYm9ueV9leGl0OworCWVib255X21hYzAgPSBtYWMwOworCWVib255X21hYzEgPSBtYWMxOworCWZ0X2luaXQoX2R0Yl9zdGFydCwgX2R0Yl9lbmQgLSBfZHRiX3N0YXJ0LCAzMik7CisJc2VyaWFsX2NvbnNvbGVfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZmxhdGRldnRyZWUuYyBiL2FyY2gvcG93ZXJwYy9ib290L2ZsYXRkZXZ0cmVlLmMKaW5kZXggZDAwZmJkOS4uYjczMjY0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZmxhdGRldnRyZWUuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9mbGF0ZGV2dHJlZS5jCkBAIC04OTEsMjggKzg5MSwyNyBAQAogCXN0cnVjdCBmdF9hdG9tIGF0b207CiAJdm9pZCAqbm9kZTsKIAljaGFyICpwLCAqbmV4dDsKLQlpbnQgbmV4dHJhLCBkZXB0aDsKKwlpbnQgbmV4dHJhOwogCiAJbm9kZSA9IGZ0X25vZGVfcGgybm9kZShjeHQsIHBoYW5kbGUpOwogCWlmIChub2RlID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAotCWRlcHRoID0gMDsKLQlwID0gbm9kZTsKKwluZXh0ID0gZnRfbmV4dChjeHQsIG5vZGUsICZhdG9tKTsKKwlpZiAoYXRvbS50YWcgIT0gT0ZfRFRfQkVHSU5fTk9ERSkKKwkJLyogcGhhbmRsZSBkaWRuJ3QgcG9pbnQgdG8gYSBub2RlICovCisJCXJldHVybiAtMTsKKwlwID0gbmV4dDsKIAogCXdoaWxlICgobmV4dCA9IGZ0X25leHQoY3h0LCBwLCAmYXRvbSkpICE9IE5VTEwpIHsKIAkJc3dpdGNoIChhdG9tLnRhZykgewotCQljYXNlIE9GX0RUX0JFR0lOX05PREU6Ci0JCQkrK2RlcHRoOwotCQkJYnJlYWs7CisJCWNhc2UgT0ZfRFRfQkVHSU5fTk9ERTogLyogcHJvcGVydGllcyBtdXN0IGdvIGJlZm9yZSBzdWJub2RlcyAqLwogCQljYXNlIE9GX0RUX0VORF9OT0RFOgotCQkJaWYgKC0tZGVwdGggPiAwKQotCQkJCWJyZWFrOwogCQkJLyogaGF2ZW4ndCBmb3VuZCB0aGUgcHJvcGVydHksIGluc2VydCBoZXJlICovCiAJCQljeHQtPnAgPSBwOwogCQkJcmV0dXJuIGZ0X3Byb3AoY3h0LCBwcm9wbmFtZSwgYnVmLCBidWZsZW4pOwogCQljYXNlIE9GX0RUX1BST1A6Ci0JCQlpZiAoKGRlcHRoICE9IDEpIHx8IHN0cmNtcChhdG9tLm5hbWUsIHByb3BuYW1lKSkKKwkJCWlmIChzdHJjbXAoYXRvbS5uYW1lLCBwcm9wbmFtZSkpCiAJCQkJYnJlYWs7CiAJCQkvKiBmb3VuZCBhbiBleGlzdGluZyBwcm9wZXJ0eSwgb3ZlcndyaXRlIGl0ICovCiAJCQluZXh0cmEgPSBfQUxJR04oYnVmbGVuLCA0KSAtIF9BTElHTihhdG9tLnNpemUsIDQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvaG9sbHkuYyBiL2FyY2gvcG93ZXJwYy9ib290L2hvbGx5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2NTM5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2hvbGx5LmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIFN0ZXBoZW4gV2luaWVja2kgPHN0ZXZld2luQHVzLmlibS5jb20+CisgKiBKb3NoIEJveWVyIDxqd2JveWVyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBlYXJsaWVyIGNvZGU6CisgKiBDb3B5cmlnaHQgKEMpIFBhdWwgTWFja2VycmFzIDE5OTcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZWxmLmgiCisjaW5jbHVkZSAic3RyaW5nLmgiCisjaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlICJwYWdlLmgiCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAiaW8uaCIKKworZXh0ZXJuIGNoYXIgX3N0YXJ0W107CitleHRlcm4gY2hhciBfZW5kW107CitleHRlcm4gY2hhciBfZHRiX3N0YXJ0W107CitleHRlcm4gY2hhciBfZHRiX2VuZFtdOworCitCU1NfU1RBQ0soNDA5Nik7CisKK3ZvaWQgcGxhdGZvcm1faW5pdCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1KQoreworCXUzMiBoZWFwc2l6ZSA9IDB4ODAwMDAwMCAtICh1MzIpX2VuZDsgLyogMTI4TSAqLworCisJc2ltcGxlX2FsbG9jX2luaXQoX2VuZCwgaGVhcHNpemUsIDMyLCA2NCk7CisJZnRfaW5pdChfZHRiX3N0YXJ0LCAwLCA0KTsKKwlzZXJpYWxfY29uc29sZV9pbml0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9ta3RyZWUuYyBiL2FyY2gvcG93ZXJwYy9ib290L21rdHJlZS5jCmluZGV4IDRjYjg5MjkuLjQ1ZDA2YTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L21rdHJlZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L21rdHJlZS5jCkBAIC00Niw4ICs0Niw4IEBACiAJc3RydWN0CXN0YXQJc3Q7CiAJYm9vdF9ibG9ja190CWJ0OwogCi0JaWYgKGFyZ2MgPCAzKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIDx6SW1hZ2UtZmlsZT4gPGJvb3QtaW1hZ2U+IFtlbnRyeS1wb2ludF1cbiIsYXJndlswXSk7CisJaWYgKGFyZ2MgPCA1KSB7CisJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIDx6SW1hZ2UtZmlsZT4gPGJvb3QtaW1hZ2U+IDxsb2FkIGFkZHJlc3M+IDxlbnRyeSBwb2ludD5cbiIsYXJndlswXSk7CiAJCWV4aXQoMSk7CiAJfQogCkBAIC02MSwxMCArNjEsOCBAQAogCWJ0LmJiX21hZ2ljID0gaHRvbmwoMHgwMDUyNTA0Rik7CiAKIAkvKiBJZiB3ZSBoYXZlIHRoZSBvcHRpb25hbCBlbnRyeSBwb2ludCBwYXJhbWV0ZXIsIHVzZSBpdCAqLwotCWlmIChhcmdjID09IDQpCi0JCWJ0LmJiX2Rlc3QgPSBidC5iYl9lbnRyeV9wb2ludCA9IGh0b25sKHN0cnRvdWwoYXJndlszXSwgTlVMTCwgMCkpOwotCWVsc2UKLQkJYnQuYmJfZGVzdCA9IGJ0LmJiX2VudHJ5X3BvaW50ID0gaHRvbmwoMHg1MDAwMDApOworCWJ0LmJiX2Rlc3QgPSBodG9ubChzdHJ0b3VsKGFyZ3ZbM10sIE5VTEwsIDApKTsKKwlidC5iYl9lbnRyeV9wb2ludCA9IGh0b25sKHN0cnRvdWwoYXJndls0XSwgTlVMTCwgMCkpOwogCiAJLyogV2Uga25vdyB0aGVzZSBmcm9tIHRoZSBsaW5rZXIgY29tbWFuZC4KIAkgKiAuLi5hbmQgdGhlbiBtb3ZlIGl0IHVwIGludG8gbWVtb3J5IGEgbGl0dGxlIG1vcmUgc28gdGhlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9tcHNjLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9tcHNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFjMGU5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L21wc2MuYwpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIE1QU0MvVUFSVCBkcml2ZXIgZm9yIHRoZSBNYXJ2ZWxsIG12NjQzNjAsIG12NjQ0NjAsIC4uLgorICoKKyAqIEF1dGhvcjogTWFyayBBLiBHcmVlciA8bWdyZWVyQG12aXN0YS5jb20+CisgKgorICogMjAwNyAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIKKyNpbmNsdWRlICJzdGRpby5oIgorI2luY2x1ZGUgImlvLmgiCisjaW5jbHVkZSAib3BzLmgiCisKK2V4dGVybiB2b2lkIHVkZWxheShsb25nIGRlbGF5KTsKKworI2RlZmluZSBNUFNDX0NIUl8xCQkweDAwMGMKKworI2RlZmluZSBNUFNDX0NIUl8yCQkweDAwMTAKKyNkZWZpbmUgTVBTQ19DSFJfMl9UQQkJKDE8PDcpCisjZGVmaW5lIE1QU0NfQ0hSXzJfVENTCQkoMTw8OSkKKyNkZWZpbmUgTVBTQ19DSFJfMl9SQQkJKDE8PDIzKQorI2RlZmluZSBNUFNDX0NIUl8yX0NSRAkJKDE8PDI1KQorI2RlZmluZSBNUFNDX0NIUl8yX0VICQkoMTw8MzEpCisKKyNkZWZpbmUgTVBTQ19DSFJfNAkJMHgwMDE4CisjZGVmaW5lIE1QU0NfQ0hSXzRfWgkJKDE8PDI5KQorCisjZGVmaW5lIE1QU0NfQ0hSXzUJCTB4MDAxYworI2RlZmluZSBNUFNDX0NIUl81X0NUTDFfSU5UUgkoMTw8MTIpCisjZGVmaW5lIE1QU0NfQ0hSXzVfQ1RMMV9WQUxJRAkoMTw8MTUpCisKKyNkZWZpbmUgTVBTQ19DSFJfMTAJCTB4MDAzMAorCisjZGVmaW5lIE1QU0NfSU5UUl9DQVVTRQkJMHgwMDAwCisjZGVmaW5lIE1QU0NfSU5UUl9DQVVTRV9SQ0MJKDE8PDYpCisjZGVmaW5lIE1QU0NfSU5UUl9NQVNLCQkweDAwODAKKworI2RlZmluZSBTRE1BX1NEQ00JCTB4MDAwOAorI2RlZmluZSBTRE1BX1NEQ01fQVIJCSgxPDwxNSkKKyNkZWZpbmUgU0RNQV9TRENNX0FUCQkoMTw8MzEpCisKK3N0YXRpYyB2b2xhdGlsZSBjaGFyICptcHNjX2Jhc2U7CitzdGF0aWMgdm9sYXRpbGUgY2hhciAqbXBzY2ludHJfYmFzZTsKK3N0YXRpYyB1MzIgY2hyMSwgY2hyMjsKKworc3RhdGljIGludCBtcHNjX29wZW4odm9pZCkKK3sKKwljaHIxID0gaW5fbGUzMigodTMyICopKG1wc2NfYmFzZSArIE1QU0NfQ0hSXzEpKSAmIDB4MDBmZjAwMDA7CisJY2hyMiA9IGluX2xlMzIoKHUzMiAqKShtcHNjX2Jhc2UgKyBNUFNDX0NIUl8yKSkgJiB+KE1QU0NfQ0hSXzJfVEEKKwkJCXwgTVBTQ19DSFJfMl9UQ1MgfCBNUFNDX0NIUl8yX1JBIHwgTVBTQ19DSFJfMl9DUkQKKwkJCXwgTVBTQ19DSFJfMl9FSCk7CisJb3V0X2xlMzIoKHUzMiAqKShtcHNjX2Jhc2UgKyBNUFNDX0NIUl80KSwgTVBTQ19DSFJfNF9aKTsKKwlvdXRfbGUzMigodTMyICopKG1wc2NfYmFzZSArIE1QU0NfQ0hSXzUpLAorCQkJTVBTQ19DSFJfNV9DVEwxX0lOVFIgfCBNUFNDX0NIUl81X0NUTDFfVkFMSUQpOworCW91dF9sZTMyKCh1MzIgKikobXBzY19iYXNlICsgTVBTQ19DSFJfMiksIGNocjIgfCBNUFNDX0NIUl8yX0VIKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXBzY19wdXRjKHVuc2lnbmVkIGNoYXIgYykKK3sKKwl3aGlsZSAoaW5fbGUzMigodTMyICopKG1wc2NfYmFzZSArIE1QU0NfQ0hSXzIpKSAmIE1QU0NfQ0hSXzJfVENTKTsKKworCW91dF9sZTMyKCh1MzIgKikobXBzY19iYXNlICsgTVBTQ19DSFJfMSksIGNocjEgfCBjKTsKKwlvdXRfbGUzMigodTMyICopKG1wc2NfYmFzZSArIE1QU0NfQ0hSXzIpLCBjaHIyIHwgTVBTQ19DSFJfMl9UQ1MpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBtcHNjX2dldGModm9pZCkKK3sKKwl1MzIgY2F1c2UgPSAwOworCXVuc2lnbmVkIGNoYXIgYzsKKworCXdoaWxlICghKGNhdXNlICYgTVBTQ19JTlRSX0NBVVNFX1JDQykpCisJCWNhdXNlID0gaW5fbGUzMigodTMyICopKG1wc2NpbnRyX2Jhc2UgKyBNUFNDX0lOVFJfQ0FVU0UpKTsKKworCWMgPSBpbl84KCh1OCAqKShtcHNjX2Jhc2UgKyBNUFNDX0NIUl8xMCArIDIpKTsKKwlvdXRfOCgodTggKikobXBzY19iYXNlICsgTVBTQ19DSFJfMTAgKyAyKSwgYyk7CisJb3V0X2xlMzIoKHUzMiAqKShtcHNjaW50cl9iYXNlICsgTVBTQ19JTlRSX0NBVVNFKSwKKwkJCWNhdXNlICYgfk1QU0NfSU5UUl9DQVVTRV9SQ0MpOworCisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB1OCBtcHNjX3RzdGModm9pZCkKK3sKKwlyZXR1cm4gKHU4KSgoaW5fbGUzMigodTMyICopKG1wc2NpbnRyX2Jhc2UgKyBNUFNDX0lOVFJfQ0FVU0UpKQorCQkJCSYgTVBTQ19JTlRSX0NBVVNFX1JDQykgIT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIG1wc2Nfc3RvcF9kbWEodm9sYXRpbGUgY2hhciAqc2RtYV9iYXNlKQoreworCW91dF9sZTMyKCh1MzIgKikobXBzY19iYXNlICsgTVBTQ19DSFJfMiksTVBTQ19DSFJfMl9UQSB8IE1QU0NfQ0hSXzJfUkEpOworCW91dF9sZTMyKCh1MzIgKikoc2RtYV9iYXNlICsgU0RNQV9TRENNKSwgU0RNQV9TRENNX0FSIHwgU0RNQV9TRENNX0FUKTsKKworCXdoaWxlICgoaW5fbGUzMigodTMyICopKHNkbWFfYmFzZSArIFNETUFfU0RDTSkpCisJCQkJJiAoU0RNQV9TRENNX0FSIHwgU0RNQV9TRENNX0FUKSkgIT0gMCkKKwkJdWRlbGF5KDEwMCk7Cit9CisKK3N0YXRpYyB2b2xhdGlsZSBjaGFyICptcHNjX2dldF92aXJ0cmVnX29mX3BoYW5kbGUodm9pZCAqZGV2cCwgY2hhciAqcHJvcCkKK3sKKwl2b2lkICp2OworCWludCBuOworCisJbiA9IGdldHByb3AoZGV2cCwgcHJvcCwgJnYsIHNpemVvZih2KSk7CisJaWYgKG4gIT0gc2l6ZW9mKHYpKQorCQlnb3RvIGVycl9vdXQ7CisKKwlkZXZwID0gZmluZF9ub2RlX2J5X2xpbnV4cGhhbmRsZSgodTMyKXYpOworCWlmIChkZXZwID09IE5VTEwpCisJCWdvdG8gZXJyX291dDsKKworCW4gPSBnZXRwcm9wKGRldnAsICJ2aXJ0dWFsLXJlZyIsICZ2LCBzaXplb2YodikpOworCWlmIChuID09IHNpemVvZih2KSkKKwkJcmV0dXJuIHY7CisKK2Vycl9vdXQ6CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBtcHNjX2NvbnNvbGVfaW5pdCh2b2lkICpkZXZwLCBzdHJ1Y3Qgc2VyaWFsX2NvbnNvbGVfZGF0YSAqc2NkcCkKK3sKKwl2b2lkICp2OworCWludCBuLCByZWdfc2V0OworCXZvbGF0aWxlIGNoYXIgKnNkbWFfYmFzZTsKKworCW4gPSBnZXRwcm9wKGRldnAsICJ2aXJ0dWFsLXJlZyIsICZ2LCBzaXplb2YodikpOworCWlmIChuICE9IHNpemVvZih2KSkKKwkJZ290byBlcnJfb3V0OworCW1wc2NfYmFzZSA9IHY7CisKKwlzZG1hX2Jhc2UgPSBtcHNjX2dldF92aXJ0cmVnX29mX3BoYW5kbGUoZGV2cCwgInNkbWEiKTsKKwlpZiAoc2RtYV9iYXNlID09IE5VTEwpCisJCWdvdG8gZXJyX291dDsKKworCW1wc2NpbnRyX2Jhc2UgPSBtcHNjX2dldF92aXJ0cmVnX29mX3BoYW5kbGUoZGV2cCwgIm1wc2NpbnRyIik7CisJaWYgKG1wc2NpbnRyX2Jhc2UgPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0OworCisJbiA9IGdldHByb3AoZGV2cCwgImJsb2NrLWluZGV4IiwgJnYsIHNpemVvZih2KSk7CisJaWYgKG4gIT0gc2l6ZW9mKHYpKQorCQlnb3RvIGVycl9vdXQ7CisJcmVnX3NldCA9IChpbnQpdjsKKworCW1wc2NpbnRyX2Jhc2UgKz0gKHJlZ19zZXQgPT0gMCkgPyAweDQgOiAweGM7CisKKwkvKiBNYWtlIHN1cmUgdGhlIG1wc2MgY3RscnMgYXJlIHNodXRkb3duICovCisJb3V0X2xlMzIoKHUzMiAqKShtcHNjaW50cl9iYXNlICsgTVBTQ19JTlRSX0NBVVNFKSwgMCk7CisJb3V0X2xlMzIoKHUzMiAqKShtcHNjaW50cl9iYXNlICsgTVBTQ19JTlRSX0NBVVNFKSwgMCk7CisJb3V0X2xlMzIoKHUzMiAqKShtcHNjaW50cl9iYXNlICsgTVBTQ19JTlRSX01BU0spLCAwKTsKKwlvdXRfbGUzMigodTMyICopKG1wc2NpbnRyX2Jhc2UgKyBNUFNDX0lOVFJfTUFTSyksIDApOworCisJbXBzY19zdG9wX2RtYShzZG1hX2Jhc2UpOworCisJc2NkcC0+b3BlbiA9IG1wc2Nfb3BlbjsKKwlzY2RwLT5wdXRjID0gbXBzY19wdXRjOworCXNjZHAtPmdldGMgPSBtcHNjX2dldGM7CisJc2NkcC0+dHN0YyA9IG1wc2NfdHN0YzsKKwlzY2RwLT5jbG9zZSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9tdjY0eDYwLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9tdjY0eDYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzMjU5NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L212NjR4NjAuYwpAQCAtMCwwICsxLDU4MSBAQAorLyoKKyAqIE1hcnZlbGwgaG9zdGJyaWRnZSByb3V0aW5lcworICoKKyAqIEF1dGhvcjogTWFyayBBLiBHcmVlciA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwNCwgMjAwNSwgMjAwNyAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJlbGYuaCIKKyNpbmNsdWRlICJwYWdlLmgiCisjaW5jbHVkZSAic3RyaW5nLmgiCisjaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlICJpby5oIgorI2luY2x1ZGUgIm9wcy5oIgorI2luY2x1ZGUgIm12NjR4NjAuaCIKKworI2RlZmluZSBQQ0lfREVWRk4oc2xvdCxmdW5jKQkoKCgoc2xvdCkgJiAweDFmKSA8PCAzKSB8ICgoZnVuYykgJiAweDA3KSkKKworI2RlZmluZSBNVjY0eDYwX0NQVTJNRU1fV0lORE9XUwkJCTQKKyNkZWZpbmUgTVY2NHg2MF9DUFUyTUVNXzBfQkFTRQkJCTB4MDAwOAorI2RlZmluZSBNVjY0eDYwX0NQVTJNRU1fMF9TSVpFCQkJMHgwMDEwCisjZGVmaW5lIE1WNjR4NjBfQ1BVMk1FTV8xX0JBU0UJCQkweDAyMDgKKyNkZWZpbmUgTVY2NHg2MF9DUFUyTUVNXzFfU0laRQkJCTB4MDIxMAorI2RlZmluZSBNVjY0eDYwX0NQVTJNRU1fMl9CQVNFCQkJMHgwMDE4CisjZGVmaW5lIE1WNjR4NjBfQ1BVMk1FTV8yX1NJWkUJCQkweDAwMjAKKyNkZWZpbmUgTVY2NHg2MF9DUFUyTUVNXzNfQkFTRQkJCTB4MDIxOAorI2RlZmluZSBNVjY0eDYwX0NQVTJNRU1fM19TSVpFCQkJMHgwMjIwCisKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV9CQVJfRU5BQkxFCQkweDIyOTAKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV8wX0JBU0UJCQkweDIyMDAKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV8wX1NJWkUJCQkweDIyMDQKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV8xX0JBU0UJCQkweDIyMDgKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV8xX1NJWkUJCQkweDIyMGMKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV8yX0JBU0UJCQkweDIyMTAKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV8yX1NJWkUJCQkweDIyMTQKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV8zX0JBU0UJCQkweDIyMTgKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV8zX1NJWkUJCQkweDIyMWMKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV80X0JBU0UJCQkweDIyMjAKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV80X1NJWkUJCQkweDIyMjQKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV81X0JBU0UJCQkweDIyMjgKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV81X1NJWkUJCQkweDIyMmMKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV9BQ0NfUFJPVF8wCQkweDIyOTQKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV9BQ0NfUFJPVF8xCQkweDIyOTgKKyNkZWZpbmUgTVY2NHg2MF9FTkVUMk1FTV9BQ0NfUFJPVF8yCQkweDIyOWMKKworI2RlZmluZSBNVjY0eDYwX01QU0MyTUVNX0JBUl9FTkFCTEUJCTB4ZjI1MAorI2RlZmluZSBNVjY0eDYwX01QU0MyTUVNXzBfQkFTRQkJCTB4ZjIwMAorI2RlZmluZSBNVjY0eDYwX01QU0MyTUVNXzBfU0laRQkJCTB4ZjIwNAorI2RlZmluZSBNVjY0eDYwX01QU0MyTUVNXzFfQkFTRQkJCTB4ZjIwOAorI2RlZmluZSBNVjY0eDYwX01QU0MyTUVNXzFfU0laRQkJCTB4ZjIwYworI2RlZmluZSBNVjY0eDYwX01QU0MyTUVNXzJfQkFTRQkJCTB4ZjIxMAorI2RlZmluZSBNVjY0eDYwX01QU0MyTUVNXzJfU0laRQkJCTB4ZjIxNAorI2RlZmluZSBNVjY0eDYwX01QU0MyTUVNXzNfQkFTRQkJCTB4ZjIxOAorI2RlZmluZSBNVjY0eDYwX01QU0MyTUVNXzNfU0laRQkJCTB4ZjIxYworI2RlZmluZSBNVjY0eDYwX01QU0NfMF9SRU1BUAkJCTB4ZjI0MAorI2RlZmluZSBNVjY0eDYwX01QU0NfMV9SRU1BUAkJCTB4ZjI0NAorI2RlZmluZSBNVjY0eDYwX01QU0MyTUVNX0FDQ19QUk9UXzAJCTB4ZjI1NAorI2RlZmluZSBNVjY0eDYwX01QU0MyTUVNX0FDQ19QUk9UXzEJCTB4ZjI1OAorI2RlZmluZSBNVjY0eDYwX01QU0MyUkVHU19CQVNFCQkJMHhmMjVjCisKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV9CQVJfRU5BQkxFCQkweDBhODAKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV8wX0JBU0UJCQkweDBhMDAKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV8wX1NJWkUJCQkweDBhMDQKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV8xX0JBU0UJCQkweDBhMDgKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV8xX1NJWkUJCQkweDBhMGMKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV8yX0JBU0UJCQkweDBhMTAKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV8yX1NJWkUJCQkweDBhMTQKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV8zX0JBU0UJCQkweDBhMTgKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV8zX1NJWkUJCQkweDBhMWMKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV80X0JBU0UJCQkweDBhMjAKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV80X1NJWkUJCQkweDBhMjQKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV81X0JBU0UJCQkweDBhMjgKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV81X1NJWkUJCQkweDBhMmMKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV82X0JBU0UJCQkweDBhMzAKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV82X1NJWkUJCQkweDBhMzQKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV83X0JBU0UJCQkweDBhMzgKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV83X1NJWkUJCQkweDBhM2MKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV9BQ0NfUFJPVF8wCQkweDBhNzAKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV9BQ0NfUFJPVF8xCQkweDBhNzQKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV9BQ0NfUFJPVF8yCQkweDBhNzgKKyNkZWZpbmUgTVY2NHg2MF9JRE1BMk1FTV9BQ0NfUFJPVF8zCQkweDBhN2MKKworI2RlZmluZSBNVjY0eDYwX1BDSV9BQ0NfQ05UTF9XSU5ET1dTCQk2CisjZGVmaW5lIE1WNjR4NjBfUENJMF9QQ0lfREVDT0RFX0NOVEwJCTB4MGQzYworI2RlZmluZSBNVjY0eDYwX1BDSTFfUENJX0RFQ09ERV9DTlRMCQkweDBkYmMKKworI2RlZmluZSBNVjY0eDYwX1BDSTBfQkFSX0VOQUJMRQkJCTB4MGMzYworI2RlZmluZSBNVjY0eDYwX1BDSTAyTUVNXzBfU0laRQkJCTB4MGMwOAorI2RlZmluZSBNVjY0eDYwX1BDSTBfQUNDX0NOVExfMF9CQVNFX0xPCQkweDFlMDAKKyNkZWZpbmUgTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzBfQkFTRV9ISQkJMHgxZTA0CisjZGVmaW5lIE1WNjR4NjBfUENJMF9BQ0NfQ05UTF8wX1NJWkUJCTB4MWUwOAorI2RlZmluZSBNVjY0eDYwX1BDSTBfQUNDX0NOVExfMV9CQVNFX0xPCQkweDFlMTAKKyNkZWZpbmUgTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzFfQkFTRV9ISQkJMHgxZTE0CisjZGVmaW5lIE1WNjR4NjBfUENJMF9BQ0NfQ05UTF8xX1NJWkUJCTB4MWUxOAorI2RlZmluZSBNVjY0eDYwX1BDSTBfQUNDX0NOVExfMl9CQVNFX0xPCQkweDFlMjAKKyNkZWZpbmUgTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzJfQkFTRV9ISQkJMHgxZTI0CisjZGVmaW5lIE1WNjR4NjBfUENJMF9BQ0NfQ05UTF8yX1NJWkUJCTB4MWUyOAorI2RlZmluZSBNVjY0eDYwX1BDSTBfQUNDX0NOVExfM19CQVNFX0xPCQkweDFlMzAKKyNkZWZpbmUgTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzNfQkFTRV9ISQkJMHgxZTM0CisjZGVmaW5lIE1WNjR4NjBfUENJMF9BQ0NfQ05UTF8zX1NJWkUJCTB4MWUzOAorI2RlZmluZSBNVjY0eDYwX1BDSTBfQUNDX0NOVExfNF9CQVNFX0xPCQkweDFlNDAKKyNkZWZpbmUgTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzRfQkFTRV9ISQkJMHgxZTQ0CisjZGVmaW5lIE1WNjR4NjBfUENJMF9BQ0NfQ05UTF80X1NJWkUJCTB4MWU0OAorI2RlZmluZSBNVjY0eDYwX1BDSTBfQUNDX0NOVExfNV9CQVNFX0xPCQkweDFlNTAKKyNkZWZpbmUgTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzVfQkFTRV9ISQkJMHgxZTU0CisjZGVmaW5lIE1WNjR4NjBfUENJMF9BQ0NfQ05UTF81X1NJWkUJCTB4MWU1OAorCisjZGVmaW5lIE1WNjR4NjBfUENJMV9CQVJfRU5BQkxFCQkJMHgwY2JjCisjZGVmaW5lIE1WNjR4NjBfUENJMTJNRU1fMF9TSVpFCQkJMHgwYzg4CisjZGVmaW5lIE1WNjR4NjBfUENJMV9BQ0NfQ05UTF8wX0JBU0VfTE8JCTB4MWU4MAorI2RlZmluZSBNVjY0eDYwX1BDSTFfQUNDX0NOVExfMF9CQVNFX0hJCQkweDFlODQKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzBfU0laRQkJMHgxZTg4CisjZGVmaW5lIE1WNjR4NjBfUENJMV9BQ0NfQ05UTF8xX0JBU0VfTE8JCTB4MWU5MAorI2RlZmluZSBNVjY0eDYwX1BDSTFfQUNDX0NOVExfMV9CQVNFX0hJCQkweDFlOTQKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzFfU0laRQkJMHgxZTk4CisjZGVmaW5lIE1WNjR4NjBfUENJMV9BQ0NfQ05UTF8yX0JBU0VfTE8JCTB4MWVhMAorI2RlZmluZSBNVjY0eDYwX1BDSTFfQUNDX0NOVExfMl9CQVNFX0hJCQkweDFlYTQKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzJfU0laRQkJMHgxZWE4CisjZGVmaW5lIE1WNjR4NjBfUENJMV9BQ0NfQ05UTF8zX0JBU0VfTE8JCTB4MWViMAorI2RlZmluZSBNVjY0eDYwX1BDSTFfQUNDX0NOVExfM19CQVNFX0hJCQkweDFlYjQKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzNfU0laRQkJMHgxZWI4CisjZGVmaW5lIE1WNjR4NjBfUENJMV9BQ0NfQ05UTF80X0JBU0VfTE8JCTB4MWVjMAorI2RlZmluZSBNVjY0eDYwX1BDSTFfQUNDX0NOVExfNF9CQVNFX0hJCQkweDFlYzQKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzRfU0laRQkJMHgxZWM4CisjZGVmaW5lIE1WNjR4NjBfUENJMV9BQ0NfQ05UTF81X0JBU0VfTE8JCTB4MWVkMAorI2RlZmluZSBNVjY0eDYwX1BDSTFfQUNDX0NOVExfNV9CQVNFX0hJCQkweDFlZDQKKyNkZWZpbmUgTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzVfU0laRQkJMHgxZWQ4CisKKyNkZWZpbmUgTVY2NHg2MF9DUFUyUENJX1NXQVBfTk9ORQkJMHgwMTAwMDAwMAorCisjZGVmaW5lIE1WNjR4NjBfQ1BVMlBDSTBfSU9fQkFTRQkJMHgwMDQ4CisjZGVmaW5lIE1WNjR4NjBfQ1BVMlBDSTBfSU9fU0laRQkJMHgwMDUwCisjZGVmaW5lIE1WNjR4NjBfQ1BVMlBDSTBfSU9fUkVNQVAJCTB4MDBmMAorI2RlZmluZSBNVjY0eDYwX0NQVTJQQ0kwX01FTV8wX0JBU0UJCTB4MDA1OAorI2RlZmluZSBNVjY0eDYwX0NQVTJQQ0kwX01FTV8wX1NJWkUJCTB4MDA2MAorI2RlZmluZSBNVjY0eDYwX0NQVTJQQ0kwX01FTV8wX1JFTUFQX0xPCQkweDAwZjgKKyNkZWZpbmUgTVY2NHg2MF9DUFUyUENJMF9NRU1fMF9SRU1BUF9ISQkJMHgwMzIwCisKKyNkZWZpbmUgTVY2NHg2MF9DUFUyUENJMV9JT19CQVNFCQkweDAwOTAKKyNkZWZpbmUgTVY2NHg2MF9DUFUyUENJMV9JT19TSVpFCQkweDAwOTgKKyNkZWZpbmUgTVY2NHg2MF9DUFUyUENJMV9JT19SRU1BUAkJMHgwMTA4CisjZGVmaW5lIE1WNjR4NjBfQ1BVMlBDSTFfTUVNXzBfQkFTRQkJMHgwMGEwCisjZGVmaW5lIE1WNjR4NjBfQ1BVMlBDSTFfTUVNXzBfU0laRQkJMHgwMGE4CisjZGVmaW5lIE1WNjR4NjBfQ1BVMlBDSTFfTUVNXzBfUkVNQVBfTE8JCTB4MDExMAorI2RlZmluZSBNVjY0eDYwX0NQVTJQQ0kxX01FTV8wX1JFTUFQX0hJCQkweDAzNDAKKworc3RydWN0IG12NjR4NjBfbWVtX3dpbiB7CisJdTMyIGhpOworCXUzMiBsbzsKKwl1MzIgc2l6ZTsKK307CisKK3N0cnVjdCBtdjY0eDYwX3BjaV93aW4geworCXUzMiBmY247CisJdTMyIGhpOworCXUzMiBsbzsKKwl1MzIgc2l6ZTsKK307CisKKy8qIFBDSSBjb25maWcgYWNjZXNzIHJvdXRpbmVzICovCitzdHJ1Y3QgeworCXUzMiBhZGRyOworCXUzMiBkYXRhOworfSBzdGF0aWMgbXY2NHg2MF9wY2lfY2ZnaW9bMl0gPSB7CisJeyAvKiBob3NlIDAgKi8KKwkJLmFkZHIJPSAweGNmOCwKKwkJLmRhdGEJPSAweGNmYywKKwl9LAorCXsgLyogaG9zZSAxICovCisJCS5hZGRyCT0gMHhjNzgsCisJCS5kYXRhCT0gMHhjN2MsCisJfQorfTsKKwordTMyIG12NjR4NjBfY2ZnX3JlYWQodTggKmJyaWRnZV9iYXNlLCB1OCBob3NlLCB1OCBidXMsIHU4IGRldmZuLCB1OCBvZmZzZXQpCit7CisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIG12NjR4NjBfcGNpX2NmZ2lvW2hvc2VdLmFkZHIpLAorCQkJKDEgPDwgMzEpIHwgKGJ1cyA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCBvZmZzZXQpOworCXJldHVybiBpbl9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBtdjY0eDYwX3BjaV9jZmdpb1tob3NlXS5kYXRhKSk7Cit9CisKK3ZvaWQgbXY2NHg2MF9jZmdfd3JpdGUodTggKmJyaWRnZV9iYXNlLCB1OCBob3NlLCB1OCBidXMsIHU4IGRldmZuLCB1OCBvZmZzZXQsCisJCXUzMiB2YWwpCit7CisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIG12NjR4NjBfcGNpX2NmZ2lvW2hvc2VdLmFkZHIpLAorCQkJKDEgPDwgMzEpIHwgKGJ1cyA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCBvZmZzZXQpOworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBtdjY0eDYwX3BjaV9jZmdpb1tob3NlXS5kYXRhKSwgdmFsKTsKK30KKworLyogSS9PIGN0bHIgLT4gc3lzdGVtIG1lbW9yeSBzZXR1cCAqLworc3RhdGljIHN0cnVjdCBtdjY0eDYwX21lbV93aW4gbXY2NHg2MF9jcHUybWVtW01WNjR4NjBfQ1BVMk1FTV9XSU5ET1dTXSA9IHsKKwl7CisJCS5sbwk9IE1WNjR4NjBfQ1BVMk1FTV8wX0JBU0UsCisJCS5zaXplCT0gTVY2NHg2MF9DUFUyTUVNXzBfU0laRSwKKwl9LAorCXsKKwkJLmxvCT0gTVY2NHg2MF9DUFUyTUVNXzFfQkFTRSwKKwkJLnNpemUJPSBNVjY0eDYwX0NQVTJNRU1fMV9TSVpFLAorCX0sCisJeworCQkubG8JPSBNVjY0eDYwX0NQVTJNRU1fMl9CQVNFLAorCQkuc2l6ZQk9IE1WNjR4NjBfQ1BVMk1FTV8yX1NJWkUsCisJfSwKKwl7CisJCS5sbwk9IE1WNjR4NjBfQ1BVMk1FTV8zX0JBU0UsCisJCS5zaXplCT0gTVY2NHg2MF9DUFUyTUVNXzNfU0laRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdjY0eDYwX21lbV93aW4gbXY2NHg2MF9lbmV0Mm1lbVtNVjY0eDYwX0NQVTJNRU1fV0lORE9XU10gPSB7CisJeworCQkubG8JPSBNVjY0eDYwX0VORVQyTUVNXzBfQkFTRSwKKwkJLnNpemUJPSBNVjY0eDYwX0VORVQyTUVNXzBfU0laRSwKKwl9LAorCXsKKwkJLmxvCT0gTVY2NHg2MF9FTkVUMk1FTV8xX0JBU0UsCisJCS5zaXplCT0gTVY2NHg2MF9FTkVUMk1FTV8xX1NJWkUsCisJfSwKKwl7CisJCS5sbwk9IE1WNjR4NjBfRU5FVDJNRU1fMl9CQVNFLAorCQkuc2l6ZQk9IE1WNjR4NjBfRU5FVDJNRU1fMl9TSVpFLAorCX0sCisJeworCQkubG8JPSBNVjY0eDYwX0VORVQyTUVNXzNfQkFTRSwKKwkJLnNpemUJPSBNVjY0eDYwX0VORVQyTUVNXzNfU0laRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdjY0eDYwX21lbV93aW4gbXY2NHg2MF9tcHNjMm1lbVtNVjY0eDYwX0NQVTJNRU1fV0lORE9XU10gPSB7CisJeworCQkubG8JPSBNVjY0eDYwX01QU0MyTUVNXzBfQkFTRSwKKwkJLnNpemUJPSBNVjY0eDYwX01QU0MyTUVNXzBfU0laRSwKKwl9LAorCXsKKwkJLmxvCT0gTVY2NHg2MF9NUFNDMk1FTV8xX0JBU0UsCisJCS5zaXplCT0gTVY2NHg2MF9NUFNDMk1FTV8xX1NJWkUsCisJfSwKKwl7CisJCS5sbwk9IE1WNjR4NjBfTVBTQzJNRU1fMl9CQVNFLAorCQkuc2l6ZQk9IE1WNjR4NjBfTVBTQzJNRU1fMl9TSVpFLAorCX0sCisJeworCQkubG8JPSBNVjY0eDYwX01QU0MyTUVNXzNfQkFTRSwKKwkJLnNpemUJPSBNVjY0eDYwX01QU0MyTUVNXzNfU0laRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdjY0eDYwX21lbV93aW4gbXY2NHg2MF9pZG1hMm1lbVtNVjY0eDYwX0NQVTJNRU1fV0lORE9XU10gPSB7CisJeworCQkubG8JPSBNVjY0eDYwX0lETUEyTUVNXzBfQkFTRSwKKwkJLnNpemUJPSBNVjY0eDYwX0lETUEyTUVNXzBfU0laRSwKKwl9LAorCXsKKwkJLmxvCT0gTVY2NHg2MF9JRE1BMk1FTV8xX0JBU0UsCisJCS5zaXplCT0gTVY2NHg2MF9JRE1BMk1FTV8xX1NJWkUsCisJfSwKKwl7CisJCS5sbwk9IE1WNjR4NjBfSURNQTJNRU1fMl9CQVNFLAorCQkuc2l6ZQk9IE1WNjR4NjBfSURNQTJNRU1fMl9TSVpFLAorCX0sCisJeworCQkubG8JPSBNVjY0eDYwX0lETUEyTUVNXzNfQkFTRSwKKwkJLnNpemUJPSBNVjY0eDYwX0lETUEyTUVNXzNfU0laRSwKKwl9LAorfTsKKworc3RhdGljIHUzMiBtdjY0eDYwX2RyYW1fc2VsZWN0c1tNVjY0eDYwX0NQVTJNRU1fV0lORE9XU10gPSB7MHhlLDB4ZCwweGIsMHg3fTsKKworLyoKKyAqIEVORVQsIE1QU0MsIGFuZCBJRE1BIGN0bHJzIG9uIHRoZSBNVjY0eDYwIGhhdmUgc2VwYXJhdGUgd2luZG93cyB0aGF0CisgKiBtdXN0IGJlIHNldCB1cCBzbyB0aGF0IHRoZSByZXNwZWN0aXZlIGN0bHIgY2FuIGFjY2VzcyBzeXN0ZW0gbWVtb3J5LgorICogQ29uZmlndXJlIHRoZW0gdG8gYmUgc2FtZSBhcyBjcHUtPm1lbW9yeSB3aW5kb3dzLgorICovCit2b2lkIG12NjR4NjBfY29uZmlnX2N0bHJfd2luZG93cyh1OCAqYnJpZGdlX2Jhc2UsIHU4ICpicmlkZ2VfcGJhc2UsCisJCXU4IGlzX2NvaGVyZW50KQoreworCXUzMiBpLCBiYXNlLCBzaXplLCBlbmFibGVzLCBwcm90ID0gMCwgc25vb3BfYml0cyA9IDA7CisKKwkvKiBEaXNhYmxlIGN0bHItPm1lbSB3aW5kb3dzICovCisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIE1WNjR4NjBfRU5FVDJNRU1fQkFSX0VOQUJMRSksIDB4M2YpOworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX01QU0MyTUVNX0JBUl9FTkFCTEUpLCAweGYpOworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX0VORVQyTUVNX0JBUl9FTkFCTEUpLCAweGZmKTsKKworCWlmIChpc19jb2hlcmVudCkKKwkJc25vb3BfYml0cyA9IDB4MiA8PCAxMjsgLyogV3JpdGViYWNrICovCisKKwllbmFibGVzID0gaW5fbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9DUFVfQkFSX0VOQUJMRSkpICYgMHhmOworCisJZm9yIChpPTA7IGk8TVY2NHg2MF9DUFUyTUVNX1dJTkRPV1M7IGkrKykgeworCQlpZiAoZW5hYmxlcyAmICgxIDw8IGkpKSAvKiBTZXQgbWVhbnMgZGlzYWJsZWQgKi8KKwkJCWNvbnRpbnVlOworCisJCWJhc2UgPSBpbl9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBtdjY0eDYwX2NwdTJtZW1baV0ubG8pKQorCQkJPDwgMTY7CisJCWJhc2UgfD0gc25vb3BfYml0cyB8IChtdjY0eDYwX2RyYW1fc2VsZWN0c1tpXSA8PCA4KTsKKwkJc2l6ZSA9IGluX2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIG12NjR4NjBfY3B1Mm1lbVtpXS5zaXplKSkKKwkJCTw8IDE2OworCQlwcm90IHw9ICgweDMgPDwgKGkgPDwgMSkpOyAvKiBSVyBhY2Nlc3MgKi8KKworCQlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgbXY2NHg2MF9lbmV0Mm1lbVtpXS5sbyksIGJhc2UpOworCQlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgbXY2NHg2MF9lbmV0Mm1lbVtpXS5zaXplKSwgc2l6ZSk7CisJCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBtdjY0eDYwX21wc2MybWVtW2ldLmxvKSwgYmFzZSk7CisJCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBtdjY0eDYwX21wc2MybWVtW2ldLnNpemUpLCBzaXplKTsKKwkJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIG12NjR4NjBfaWRtYTJtZW1baV0ubG8pLCBiYXNlKTsKKwkJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIG12NjR4NjBfaWRtYTJtZW1baV0uc2l6ZSksIHNpemUpOworCX0KKworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX0VORVQyTUVNX0FDQ19QUk9UXzApLCBwcm90KTsKKwlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9FTkVUMk1FTV9BQ0NfUFJPVF8xKSwgcHJvdCk7CisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIE1WNjR4NjBfRU5FVDJNRU1fQUNDX1BST1RfMiksIHByb3QpOworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX01QU0MyTUVNX0FDQ19QUk9UXzApLCBwcm90KTsKKwlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9NUFNDMk1FTV9BQ0NfUFJPVF8xKSwgcHJvdCk7CisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIE1WNjR4NjBfSURNQTJNRU1fQUNDX1BST1RfMCksIHByb3QpOworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX0lETUEyTUVNX0FDQ19QUk9UXzEpLCBwcm90KTsKKwlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9JRE1BMk1FTV9BQ0NfUFJPVF8yKSwgcHJvdCk7CisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIE1WNjR4NjBfSURNQTJNRU1fQUNDX1BST1RfMyksIHByb3QpOworCisJLyogU2V0IG1wc2MtPmJyaWRnZSdzIHJlZyB3aW5kb3cgdG8gdGhlIGJyaWRnZSdzIGludGVybmFsIHJlZ2lzdGVycy4gKi8KKwlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9NUFNDMlJFR1NfQkFTRSksCisJCQkodTMyKWJyaWRnZV9wYmFzZSk7CisKKwlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9FTkVUMk1FTV9CQVJfRU5BQkxFKSwgZW5hYmxlcyk7CisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIE1WNjR4NjBfTVBTQzJNRU1fQkFSX0VOQUJMRSksIGVuYWJsZXMpOworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX0lETUEyTUVNX0JBUl9FTkFCTEUpLCBlbmFibGVzKTsKK30KKworLyogUENJIE1FTSAtPiBzeXN0ZW0gbWVtb3J5LCBldC4gYWwuIHNldHVwICovCitzdGF0aWMgc3RydWN0IG12NjR4NjBfcGNpX3dpbiBtdjY0eDYwX3BjaTJtZW1bMl0gPSB7CisJeyAvKiBob3NlIDAgKi8KKwkJLmZjbgk9IDAsCisJCS5oaQk9IDB4MTQsCisJCS5sbwk9IDB4MTAsCisJCS5zaXplCT0gTVY2NHg2MF9QQ0kwMk1FTV8wX1NJWkUsCisJfSwKKwl7IC8qIGhvc2UgMSAqLworCQkuZmNuCT0gMCwKKwkJLmhpCT0gMHg5NCwKKwkJLmxvCT0gMHg5MCwKKwkJLnNpemUJPSBNVjY0eDYwX1BDSTEyTUVNXzBfU0laRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdAorbXY2NHg2MF9tZW1fd2luIG12NjR4NjBfcGNpX2FjY1syXVtNVjY0eDYwX1BDSV9BQ0NfQ05UTF9XSU5ET1dTXSA9IHsKKwl7IC8qIGhvc2UgMCAqLworCQl7CisJCQkuaGkJPSBNVjY0eDYwX1BDSTBfQUNDX0NOVExfMF9CQVNFX0hJLAorCQkJLmxvCT0gTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzBfQkFTRV9MTywKKwkJCS5zaXplCT0gTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzBfU0laRSwKKwkJfSwKKwkJeworCQkJLmhpCT0gTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzFfQkFTRV9ISSwKKwkJCS5sbwk9IE1WNjR4NjBfUENJMF9BQ0NfQ05UTF8xX0JBU0VfTE8sCisJCQkuc2l6ZQk9IE1WNjR4NjBfUENJMF9BQ0NfQ05UTF8xX1NJWkUsCisJCX0sCisJCXsKKwkJCS5oaQk9IE1WNjR4NjBfUENJMF9BQ0NfQ05UTF8yX0JBU0VfSEksCisJCQkubG8JPSBNVjY0eDYwX1BDSTBfQUNDX0NOVExfMl9CQVNFX0xPLAorCQkJLnNpemUJPSBNVjY0eDYwX1BDSTBfQUNDX0NOVExfMl9TSVpFLAorCQl9LAorCQl7CisJCQkuaGkJPSBNVjY0eDYwX1BDSTBfQUNDX0NOVExfM19CQVNFX0hJLAorCQkJLmxvCT0gTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzNfQkFTRV9MTywKKwkJCS5zaXplCT0gTVY2NHg2MF9QQ0kwX0FDQ19DTlRMXzNfU0laRSwKKwkJfSwKKwl9LAorCXsgLyogaG9zZSAxICovCisJCXsKKwkJCS5oaQk9IE1WNjR4NjBfUENJMV9BQ0NfQ05UTF8wX0JBU0VfSEksCisJCQkubG8JPSBNVjY0eDYwX1BDSTFfQUNDX0NOVExfMF9CQVNFX0xPLAorCQkJLnNpemUJPSBNVjY0eDYwX1BDSTFfQUNDX0NOVExfMF9TSVpFLAorCQl9LAorCQl7CisJCQkuaGkJPSBNVjY0eDYwX1BDSTFfQUNDX0NOVExfMV9CQVNFX0hJLAorCQkJLmxvCT0gTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzFfQkFTRV9MTywKKwkJCS5zaXplCT0gTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzFfU0laRSwKKwkJfSwKKwkJeworCQkJLmhpCT0gTVY2NHg2MF9QQ0kxX0FDQ19DTlRMXzJfQkFTRV9ISSwKKwkJCS5sbwk9IE1WNjR4NjBfUENJMV9BQ0NfQ05UTF8yX0JBU0VfTE8sCisJCQkuc2l6ZQk9IE1WNjR4NjBfUENJMV9BQ0NfQ05UTF8yX1NJWkUsCisJCX0sCisJCXsKKwkJCS5oaQk9IE1WNjR4NjBfUENJMV9BQ0NfQ05UTF8zX0JBU0VfSEksCisJCQkubG8JPSBNVjY0eDYwX1BDSTFfQUNDX0NOVExfM19CQVNFX0xPLAorCQkJLnNpemUJPSBNVjY0eDYwX1BDSTFfQUNDX0NOVExfM19TSVpFLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG12NjR4NjBfbWVtX3dpbiBtdjY0eDYwX3BjaTJyZWdbMl0gPSB7CisJeworCQkuaGkJPSAweDI0LAorCQkubG8JPSAweDIwLAorCQkuc2l6ZQk9IDAsCisJfSwKKwl7CisJCS5oaQk9IDB4YTQsCisJCS5sbwk9IDB4YTAsCisJCS5zaXplCT0gMCwKKwl9LAorfTsKKworLyogT25seSBuZWVkIHRvIHVzZSAxIHdpbmRvdyAocGVyIGhvc2UpIHRvIGdldCBhY2Nlc3MgdG8gYWxsIG9mIHN5c3RlbSBtZW1vcnkgKi8KK3ZvaWQgbXY2NHg2MF9jb25maWdfcGNpX3dpbmRvd3ModTggKmJyaWRnZV9iYXNlLCB1OCAqYnJpZGdlX3BiYXNlLCB1OCBob3NlLAorCQl1OCBidXMsIHUzMiBtZW1fc2l6ZSwgdTMyIGFjY19iaXRzKQoreworCXUzMiBpLCBvZmZzZXQsIGJhcl9lbmFibGUsIGVuYWJsZXM7CisKKwkvKiBEaXNhYmxlIGFsbCB3aW5kb3dzIGJ1dCBQQ0kgTUVNIC0+IEJyaWRnZSdzIHJlZ3Mgd2luZG93ICovCisJZW5hYmxlcyA9IH4oMSA8PCA5KTsKKwliYXJfZW5hYmxlID0gaG9zZSA/IE1WNjR4NjBfUENJMV9CQVJfRU5BQkxFIDogTVY2NHg2MF9QQ0kwX0JBUl9FTkFCTEU7CisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIGJhcl9lbmFibGUpLCBlbmFibGVzKTsKKworCWZvciAoaT0wOyBpPE1WNjR4NjBfUENJX0FDQ19DTlRMX1dJTkRPV1M7IGkrKykKKwkJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIG12NjR4NjBfcGNpX2FjY1tob3NlXVtpXS5sbyksIDApOworCisJLyogSWYgbWVtX3NpemUgaXMgMCwgbGVhdmUgd2luZG93cyBkaXNhYmxlZCAqLworCWlmIChtZW1fc2l6ZSA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBDYXVzZSBhdXRvbWF0aWMgdXBkYXRlcyBvZiBQQ0kgcmVtYXAgcmVncyAqLworCW9mZnNldCA9IGhvc2UgPworCQlNVjY0eDYwX1BDSTFfUENJX0RFQ09ERV9DTlRMIDogTVY2NHg2MF9QQ0kwX1BDSV9ERUNPREVfQ05UTDsKKwlpID0gaW5fbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgb2Zmc2V0KSk7CisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIG9mZnNldCksIGkgJiB+MHgxKTsKKworCW1lbV9zaXplID0gKG1lbV9zaXplIC0gMSkgJiAweGZmZmZmMDAwOworCisJLyogTWFwIFBDSSBNRU0gYWRkciAwIC0+IFN5c3RlbSBNZW0gYWRkciAwICovCisJbXY2NHg2MF9jZmdfd3JpdGUoYnJpZGdlX2Jhc2UsIGhvc2UsIGJ1cywKKwkJCVBDSV9ERVZGTigwLCBtdjY0eDYwX3BjaTJtZW1baG9zZV0uZmNuKSwKKwkJCW12NjR4NjBfcGNpMm1lbVtob3NlXS5oaSwgMCk7CisJbXY2NHg2MF9jZmdfd3JpdGUoYnJpZGdlX2Jhc2UsIGhvc2UsIGJ1cywKKwkJCVBDSV9ERVZGTigwLCBtdjY0eDYwX3BjaTJtZW1baG9zZV0uZmNuKSwKKwkJCW12NjR4NjBfcGNpMm1lbVtob3NlXS5sbywgMCk7CisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIG12NjR4NjBfcGNpMm1lbVtob3NlXS5zaXplKSxtZW1fc2l6ZSk7CisKKwlhY2NfYml0cyB8PSBNVjY0eDYwX1BDSV9BQ0NfQ05UTF9FTkFCTEU7CisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIG12NjR4NjBfcGNpX2FjY1tob3NlXVswXS5oaSksIDApOworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBtdjY0eDYwX3BjaV9hY2NbaG9zZV1bMF0ubG8pLCBhY2NfYml0cyk7CisJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIG12NjR4NjBfcGNpX2FjY1tob3NlXVswXS5zaXplKSxtZW1fc2l6ZSk7CisKKwkvKiBTZXQgUENJIE1FTS0+YnJpZGdlJ3MgcmVnIHdpbmRvdyB0byB3aGVyZSB0aGV5IGFyZSBpbiBDUFUgbWVtIG1hcCAqLworCWkgPSAodTMyKWJyaWRnZV9iYXNlOworCWkgJj0gMHhmZmZmMDAwMDsKKwlpIHw9ICgweDIgPDwgMSk7CisJbXY2NHg2MF9jZmdfd3JpdGUoYnJpZGdlX2Jhc2UsIGhvc2UsIGJ1cywgUENJX0RFVkZOKDAsMCksCisJCQltdjY0eDYwX3BjaTJyZWdbaG9zZV0uaGksIDApOworCW12NjR4NjBfY2ZnX3dyaXRlKGJyaWRnZV9iYXNlLCBob3NlLCBidXMsIFBDSV9ERVZGTigwLDApLAorCQkJbXY2NHg2MF9wY2kycmVnW2hvc2VdLmxvLCBpKTsKKworCWVuYWJsZXMgJj0gfjB4MTsgLyogRW5hYmxlIFBDSSBNRU0gLT4gU3lzdGVtIE1lbSB3aW5kb3cgMCAqLworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBiYXJfZW5hYmxlKSwgZW5hYmxlcyk7Cit9CisKKy8qIENQVSAtPiBQQ0kgSS9PICYgTUVNIHNldHVwICovCitzdHJ1Y3QgbXY2NHg2MF9jcHUycGNpX3dpbiBtdjY0eDYwX2NwdTJwY2lfaW9bMl0gPSB7CisJeyAvKiBob3NlIDAgKi8KKwkJLmxvCQk9IE1WNjR4NjBfQ1BVMlBDSTBfSU9fQkFTRSwKKwkJLnNpemUJCT0gTVY2NHg2MF9DUFUyUENJMF9JT19TSVpFLAorCQkucmVtYXBfaGkJPSAwLAorCQkucmVtYXBfbG8JPSBNVjY0eDYwX0NQVTJQQ0kwX0lPX1JFTUFQLAorCX0sCisJeyAvKiBob3NlIDEgKi8KKwkJLmxvCQk9IE1WNjR4NjBfQ1BVMlBDSTFfSU9fQkFTRSwKKwkJLnNpemUJCT0gTVY2NHg2MF9DUFUyUENJMV9JT19TSVpFLAorCQkucmVtYXBfaGkJPSAwLAorCQkucmVtYXBfbG8JPSBNVjY0eDYwX0NQVTJQQ0kxX0lPX1JFTUFQLAorCX0sCit9OworCitzdHJ1Y3QgbXY2NHg2MF9jcHUycGNpX3dpbiBtdjY0eDYwX2NwdTJwY2lfbWVtWzJdID0geworCXsgLyogaG9zZSAwICovCisJCS5sbwkJPSBNVjY0eDYwX0NQVTJQQ0kwX01FTV8wX0JBU0UsCisJCS5zaXplCQk9IE1WNjR4NjBfQ1BVMlBDSTBfTUVNXzBfU0laRSwKKwkJLnJlbWFwX2hpCT0gTVY2NHg2MF9DUFUyUENJMF9NRU1fMF9SRU1BUF9ISSwKKwkJLnJlbWFwX2xvCT0gTVY2NHg2MF9DUFUyUENJMF9NRU1fMF9SRU1BUF9MTywKKwl9LAorCXsgLyogaG9zZSAxICovCisJCS5sbwkJPSBNVjY0eDYwX0NQVTJQQ0kxX01FTV8wX0JBU0UsCisJCS5zaXplCQk9IE1WNjR4NjBfQ1BVMlBDSTFfTUVNXzBfU0laRSwKKwkJLnJlbWFwX2hpCT0gTVY2NHg2MF9DUFUyUENJMV9NRU1fMF9SRU1BUF9ISSwKKwkJLnJlbWFwX2xvCT0gTVY2NHg2MF9DUFUyUENJMV9NRU1fMF9SRU1BUF9MTywKKwl9LAorfTsKKworLyogT25seSBuZWVkIHRvIHNldCB1cCAxIHdpbmRvdyB0byBwY2kgbWVtIHNwYWNlICovCit2b2lkIG12NjR4NjBfY29uZmlnX2NwdTJwY2lfd2luZG93KHU4ICpicmlkZ2VfYmFzZSwgdTggaG9zZSwgdTMyIHBjaV9iYXNlX2hpLAorCQl1MzIgcGNpX2Jhc2VfbG8sIHUzMiBjcHVfYmFzZSwgdTMyIHNpemUsCisJCXN0cnVjdCBtdjY0eDYwX2NwdTJwY2lfd2luICpvZmZzZXRfdGJsKQoreworCWNwdV9iYXNlID4+PSAxNjsKKwljcHVfYmFzZSB8PSBNVjY0eDYwX0NQVTJQQ0lfU1dBUF9OT05FOworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBvZmZzZXRfdGJsW2hvc2VdLmxvKSwgY3B1X2Jhc2UpOworCisJaWYgKG9mZnNldF90YmxbaG9zZV0ucmVtYXBfaGkgIT0gMCkKKwkJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIG9mZnNldF90YmxbaG9zZV0ucmVtYXBfaGkpLAorCQkJCXBjaV9iYXNlX2hpKTsKKwlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgb2Zmc2V0X3RibFtob3NlXS5yZW1hcF9sbyksCisJCQlwY2lfYmFzZV9sbyA+PiAxNik7CisKKwlzaXplID0gKHNpemUgLSAxKSA+PiAxNjsKKwlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgb2Zmc2V0X3RibFtob3NlXS5zaXplKSwgc2l6ZSk7Cit9CisKKy8qIFJlYWQgbWVtIGN0bHIgdG8gZ2V0IHRoZSBhbW91bnQgb2YgbWVtIGluIHN5c3RlbSAqLwordTMyIG12NjR4NjBfZ2V0X21lbV9zaXplKHU4ICpicmlkZ2VfYmFzZSkKK3sKKwl1MzIgZW5hYmxlcywgaSwgdjsKKwl1MzIgbWVtID0gMDsKKworCWVuYWJsZXMgPSBpbl9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX0NQVV9CQVJfRU5BQkxFKSkgJiAweGY7CisKKwlmb3IgKGk9MDsgaTxNVjY0eDYwX0NQVTJNRU1fV0lORE9XUzsgaSsrKQorCQlpZiAoIShlbmFibGVzICYgKDE8PGkpKSkgeworCQkJdiA9IGluX2xlMzIoKHUzMiopKGJyaWRnZV9iYXNlCisJCQkJCQkrIG12NjR4NjBfY3B1Mm1lbVtpXS5zaXplKSk7CisJCQl2ID0gKCh2ICYgMHhmZmZmKSArIDEpIDw8IDE2OworCQkJbWVtICs9IHY7CisJCX0KKworCXJldHVybiBtZW07Cit9CisKKy8qIEdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIGJyaWRnZSdzIHJlZ2lzdGVycyAqLwordTggKm12NjR4NjBfZ2V0X2JyaWRnZV9wYmFzZSh2b2lkKQoreworCXUzMiB2WzJdOworCXZvaWQgKmRldnA7CisKKwlkZXZwID0gZmluZGRldmljZSgiL212NjR4NjAiKTsKKwlpZiAoZGV2cCA9PSBOVUxMKQorCQlnb3RvIGVycl9vdXQ7CisJaWYgKGdldHByb3AoZGV2cCwgInJlZyIsIHYsIHNpemVvZih2KSkgIT0gc2l6ZW9mKHYpKQorCQlnb3RvIGVycl9vdXQ7CisKKwlyZXR1cm4gKHU4ICopdlswXTsKKworZXJyX291dDoKKwlyZXR1cm4gMDsKK30KKworLyogR2V0IHZpcnR1YWwgYWRkcmVzcyBvZiBicmlkZ2UncyByZWdpc3RlcnMgKi8KK3U4ICptdjY0eDYwX2dldF9icmlkZ2VfYmFzZSh2b2lkKQoreworCXUzMiB2OworCXZvaWQgKmRldnA7CisKKwlkZXZwID0gZmluZGRldmljZSgiL212NjR4NjAiKTsKKwlpZiAoZGV2cCA9PSBOVUxMKQorCQlnb3RvIGVycl9vdXQ7CisJaWYgKGdldHByb3AoZGV2cCwgInZpcnR1YWwtcmVnIiwgJnYsIHNpemVvZih2KSkgIT0gc2l6ZW9mKHYpKQorCQlnb3RvIGVycl9vdXQ7CisKKwlyZXR1cm4gKHU4ICopdjsKKworZXJyX291dDoKKwlyZXR1cm4gMDsKK30KKwordTggbXY2NHg2MF9pc19jb2hlcmVudCh2b2lkKQoreworCXUzMiB2OworCXZvaWQgKmRldnA7CisKKwlkZXZwID0gZmluZGRldmljZSgiLyIpOworCWlmIChkZXZwID09IE5VTEwpCisJCXJldHVybiAxOyAvKiBBc3N1bWUgY29oZXJlbmN5IG9uICovCisKKwlpZiAoZ2V0cHJvcChkZXZwLCAiY29oZXJlbmN5LW9mZiIsICZ2LCBzaXplb2YodikpIDwgMCkKKwkJcmV0dXJuIDE7IC8qIENvaGVyZW5jeSBvbiAqLworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9tdjY0eDYwLmggYi9hcmNoL3Bvd2VycGMvYm9vdC9tdjY0eDYwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyNzEwNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L212NjR4NjAuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQXV0aG9yOiBNYXJrIEEuIEdyZWVyIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA3IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX1BQQ19CT09UX01WNjR4NjBfSF8KKyNkZWZpbmUgX1BQQ19CT09UX01WNjR4NjBfSF8KKworI2RlZmluZSBNVjY0eDYwX0NQVV9CQVJfRU5BQkxFCQkJMHgwMjc4CisKKyNkZWZpbmUgTVY2NHg2MF9QQ0lfQUNDX0NOVExfRU5BQkxFCQkoMTw8MCkKKyNkZWZpbmUgTVY2NHg2MF9QQ0lfQUNDX0NOVExfUkVRNjQJCSgxPDwxKQorI2RlZmluZSBNVjY0eDYwX1BDSV9BQ0NfQ05UTF9TTk9PUF9OT05FCQkweDAwMDAwMDAwCisjZGVmaW5lIE1WNjR4NjBfUENJX0FDQ19DTlRMX1NOT09QX1dUCQkweDAwMDAwMDA0CisjZGVmaW5lIE1WNjR4NjBfUENJX0FDQ19DTlRMX1NOT09QX1dCCQkweDAwMDAwMDA4CisjZGVmaW5lIE1WNjR4NjBfUENJX0FDQ19DTlRMX1NOT09QX01BU0sJCTB4MDAwMDAwMGMKKyNkZWZpbmUgTVY2NHg2MF9QQ0lfQUNDX0NOVExfQUNDUFJPVAkJKDE8PDQpCisjZGVmaW5lIE1WNjR4NjBfUENJX0FDQ19DTlRMX1dSUFJPVAkJKDE8PDUpCisjZGVmaW5lIE1WNjR4NjBfUENJX0FDQ19DTlRMX1NXQVBfQllURQkJMHgwMDAwMDAwMAorI2RlZmluZSBNVjY0eDYwX1BDSV9BQ0NfQ05UTF9TV0FQX05PTkUJCTB4MDAwMDAwNDAKKyNkZWZpbmUgTVY2NHg2MF9QQ0lfQUNDX0NOVExfU1dBUF9CWVRFX1dPUkQJMHgwMDAwMDA4MAorI2RlZmluZSBNVjY0eDYwX1BDSV9BQ0NfQ05UTF9TV0FQX1dPUkQJCTB4MDAwMDAwYzAKKyNkZWZpbmUgTVY2NHg2MF9QQ0lfQUNDX0NOVExfU1dBUF9NQVNLCQkweDAwMDAwMGMwCisjZGVmaW5lIE1WNjR4NjBfUENJX0FDQ19DTlRMX01CVVJTVF8zMl9CWVRFUwkweDAwMDAwMDAwCisjZGVmaW5lIE1WNjR4NjBfUENJX0FDQ19DTlRMX01CVVJTVF82NF9CWVRFUwkweDAwMDAwMTAwCisjZGVmaW5lIE1WNjR4NjBfUENJX0FDQ19DTlRMX01CVVJTVF8xMjhfQllURVMJMHgwMDAwMDIwMAorI2RlZmluZSBNVjY0eDYwX1BDSV9BQ0NfQ05UTF9NQlVSU1RfTUFTSwkweDAwMDAwMzAwCisjZGVmaW5lIE1WNjR4NjBfUENJX0FDQ19DTlRMX1JEU0laRV8zMl9CWVRFUwkweDAwMDAwMDAwCisjZGVmaW5lIE1WNjR4NjBfUENJX0FDQ19DTlRMX1JEU0laRV82NF9CWVRFUwkweDAwMDAwNDAwCisjZGVmaW5lIE1WNjR4NjBfUENJX0FDQ19DTlRMX1JEU0laRV8xMjhfQllURVMJMHgwMDAwMDgwMAorI2RlZmluZSBNVjY0eDYwX1BDSV9BQ0NfQ05UTF9SRFNJWkVfMjU2X0JZVEVTCTB4MDAwMDBjMDAKKyNkZWZpbmUgTVY2NHg2MF9QQ0lfQUNDX0NOVExfUkRTSVpFX01BU0sJMHgwMDAwMGMwMAorCitzdHJ1Y3QgbXY2NHg2MF9jcHUycGNpX3dpbiB7CisJdTMyIGxvOworCXUzMiBzaXplOworCXUzMiByZW1hcF9oaTsKKwl1MzIgcmVtYXBfbG87Cit9OworCitleHRlcm4gc3RydWN0IG12NjR4NjBfY3B1MnBjaV93aW4gbXY2NHg2MF9jcHUycGNpX2lvWzJdOworZXh0ZXJuIHN0cnVjdCBtdjY0eDYwX2NwdTJwY2lfd2luIG12NjR4NjBfY3B1MnBjaV9tZW1bMl07CisKK3UzMiBtdjY0eDYwX2NmZ19yZWFkKHU4ICpicmlkZ2VfYmFzZSwgdTggaG9zZSwgdTggYnVzLCB1OCBkZXZmbiwKKwkJdTggb2Zmc2V0KTsKK3ZvaWQgbXY2NHg2MF9jZmdfd3JpdGUodTggKmJyaWRnZV9iYXNlLCB1OCBob3NlLCB1OCBidXMsIHU4IGRldmZuLAorCQl1OCBvZmZzZXQsIHUzMiB2YWwpOworCit2b2lkIG12NjR4NjBfY29uZmlnX2N0bHJfd2luZG93cyh1OCAqYnJpZGdlX2Jhc2UsIHU4ICpicmlkZ2VfcGJhc2UsCisJCXU4IGlzX2NvaGVyZW50KTsKK3ZvaWQgbXY2NHg2MF9jb25maWdfcGNpX3dpbmRvd3ModTggKmJyaWRnZV9iYXNlLCB1OCAqYnJpZGdlX3BiYXNlLCB1OCBob3NlLAorCQl1OCBidXMsIHUzMiBtZW1fc2l6ZSwgdTMyIGFjY19iaXRzKTsKK3ZvaWQgbXY2NHg2MF9jb25maWdfY3B1MnBjaV93aW5kb3codTggKmJyaWRnZV9iYXNlLCB1OCBob3NlLCB1MzIgcGNpX2Jhc2VfaGksCisJCXUzMiBwY2lfYmFzZV9sbywgdTMyIGNwdV9iYXNlLCB1MzIgc2l6ZSwKKwkJc3RydWN0IG12NjR4NjBfY3B1MnBjaV93aW4gKm9mZnNldF90YmwpOwordTMyIG12NjR4NjBfZ2V0X21lbV9zaXplKHU4ICpicmlkZ2VfYmFzZSk7Cit1OCAqbXY2NHg2MF9nZXRfYnJpZGdlX3BiYXNlKHZvaWQpOwordTggKm12NjR4NjBfZ2V0X2JyaWRnZV9iYXNlKHZvaWQpOwordTggbXY2NHg2MF9pc19jb2hlcmVudCh2b2lkKTsKKworaW50IG12NjR4NjBfaTJjX29wZW4odm9pZCk7CitpbnQgbXY2NHg2MF9pMmNfcmVhZCh1MzIgZGV2YWRkciwgdTggKmJ1ZiwgdTMyIG9mZnNldCwgdTMyIG9mZnNldF9zaXplLAorCQl1MzIgY291bnQpOwordm9pZCBtdjY0eDYwX2kyY19jbG9zZSh2b2lkKTsKKworI2VuZGlmIC8qIF9QUENfQk9PVF9NVjY0eDYwX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9tdjY0eDYwX2kyYy5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbXY2NHg2MF9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzVmZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbXY2NHg2MF9pMmMuYwpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIEJvb3Rsb2FkZXIgdmVyc2lvbiBvZiB0aGUgaTJjIGRyaXZlciBmb3IgdGhlIE1WNjR4NjAuCisgKgorICogQXV0aG9yOiBEYWxlIEZhcm5zd29ydGggPGRmYXJuc3dvcnRoQG12aXN0YS5jb20+CisgKiBNYWludGFpbmVkIGJ5OiBNYXJrIEEuIEdyZWVyIDxtZ3JlZXJAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDAzLCAyMDA3IChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcworICogbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yCisgKiBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImVsZi5oIgorI2luY2x1ZGUgInBhZ2UuaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIKKyNpbmNsdWRlICJzdGRpby5oIgorI2luY2x1ZGUgImlvLmgiCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAibXY2NHg2MC5oIgorCitleHRlcm4gdm9pZCB1ZGVsYXkobG9uZyk7CisKKy8qIFJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgTVY2NHg2MF9JMkNfUkVHX1NMQVZFX0FERFIJCQkweDAwCisjZGVmaW5lIE1WNjR4NjBfSTJDX1JFR19EQVRBCQkJCTB4MDQKKyNkZWZpbmUgTVY2NHg2MF9JMkNfUkVHX0NPTlRST0wJCQkJMHgwOAorI2RlZmluZSBNVjY0eDYwX0kyQ19SRUdfU1RBVFVTCQkJCTB4MGMKKyNkZWZpbmUgTVY2NHg2MF9JMkNfUkVHX0JBVUQJCQkJMHgwYworI2RlZmluZSBNVjY0eDYwX0kyQ19SRUdfRVhUX1NMQVZFX0FERFIJCQkweDEwCisjZGVmaW5lIE1WNjR4NjBfSTJDX1JFR19TT0ZUX1JFU0VUCQkJMHgxYworCisjZGVmaW5lIE1WNjR4NjBfSTJDX0NPTlRST0xfQUNLCQkJCTB4MDQKKyNkZWZpbmUgTVY2NHg2MF9JMkNfQ09OVFJPTF9JRkxHCQkJMHgwOAorI2RlZmluZSBNVjY0eDYwX0kyQ19DT05UUk9MX1NUT1AJCQkweDEwCisjZGVmaW5lIE1WNjR4NjBfSTJDX0NPTlRST0xfU1RBUlQJCQkweDIwCisjZGVmaW5lIE1WNjR4NjBfSTJDX0NPTlRST0xfVFdTSUVOCQkJMHg0MAorI2RlZmluZSBNVjY0eDYwX0kyQ19DT05UUk9MX0lOVEVOCQkJMHg4MAorCisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19CVVNfRVJSCQkJMHgwMAorI2RlZmluZSBNVjY0eDYwX0kyQ19TVEFUVVNfTUFTVF9TVEFSVAkJCTB4MDgKKyNkZWZpbmUgTVY2NHg2MF9JMkNfU1RBVFVTX01BU1RfUkVQRUFUX1NUQVJUCQkweDEwCisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1dSX0FERFJfQUNLCQkweDE4CisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1dSX0FERFJfTk9fQUNLCQkweDIwCisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1dSX0FDSwkJCTB4MjgKKyNkZWZpbmUgTVY2NHg2MF9JMkNfU1RBVFVTX01BU1RfV1JfTk9fQUNLCQkweDMwCisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX0xPU1RfQVJCCQkweDM4CisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1JEX0FERFJfQUNLCQkweDQwCisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1JEX0FERFJfTk9fQUNLCQkweDQ4CisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1JEX0RBVEFfQUNLCQkweDUwCisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1JEX0RBVEFfTk9fQUNLCQkweDU4CisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1dSX0FERFJfMl9BQ0sJCTB4ZDAKKyNkZWZpbmUgTVY2NHg2MF9JMkNfU1RBVFVTX01BU1RfV1JfQUREUl8yX05PX0FDSwkweGQ4CisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1JEX0FERFJfMl9BQ0sJCTB4ZTAKKyNkZWZpbmUgTVY2NHg2MF9JMkNfU1RBVFVTX01BU1RfUkRfQUREUl8yX05PX0FDSwkweGU4CisjZGVmaW5lIE1WNjR4NjBfSTJDX1NUQVRVU19OT19TVEFUVVMJCQkweGY4CisKK3N0YXRpYyB1OCAqY3Rscl9iYXNlOworCitzdGF0aWMgaW50IG12NjR4NjBfaTJjX3dhaXRfZm9yX3N0YXR1cyhpbnQgd2FudGVkKQoreworCWludCBpOworCWludCBzdGF0dXM7CisKKwlmb3IgKGk9MDsgaTwxMDAwOyBpKyspIHsKKwkJdWRlbGF5KDEwKTsKKwkJc3RhdHVzID0gaW5fbGUzMigodTMyICopKGN0bHJfYmFzZSArIE1WNjR4NjBfSTJDX1JFR19TVEFUVVMpKQorCQkJJiAweGZmOworCQlpZiAoc3RhdHVzID09IHdhbnRlZCkKKwkJCXJldHVybiBzdGF0dXM7CisJfQorCXJldHVybiAtc3RhdHVzOworfQorCitzdGF0aWMgaW50IG12NjR4NjBfaTJjX2NvbnRyb2woaW50IGNvbnRyb2wsIGludCBzdGF0dXMpCit7CisJb3V0X2xlMzIoKHUzMiAqKShjdGxyX2Jhc2UgKyBNVjY0eDYwX0kyQ19SRUdfQ09OVFJPTCksIGNvbnRyb2wgJiAweGZmKTsKKwlyZXR1cm4gbXY2NHg2MF9pMmNfd2FpdF9mb3Jfc3RhdHVzKHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgbXY2NHg2MF9pMmNfcmVhZF9ieXRlKGludCBjb250cm9sLCBpbnQgc3RhdHVzKQoreworCW91dF9sZTMyKCh1MzIgKikoY3Rscl9iYXNlICsgTVY2NHg2MF9JMkNfUkVHX0NPTlRST0wpLCBjb250cm9sICYgMHhmZik7CisJaWYgKG12NjR4NjBfaTJjX3dhaXRfZm9yX3N0YXR1cyhzdGF0dXMpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBpbl9sZTMyKCh1MzIgKikoY3Rscl9iYXNlICsgTVY2NHg2MF9JMkNfUkVHX0RBVEEpKSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgbXY2NHg2MF9pMmNfd3JpdGVfYnl0ZShpbnQgZGF0YSwgaW50IGNvbnRyb2wsIGludCBzdGF0dXMpCit7CisJb3V0X2xlMzIoKHUzMiAqKShjdGxyX2Jhc2UgKyBNVjY0eDYwX0kyQ19SRUdfREFUQSksIGRhdGEgJiAweGZmKTsKKwlvdXRfbGUzMigodTMyICopKGN0bHJfYmFzZSArIE1WNjR4NjBfSTJDX1JFR19DT05UUk9MKSwgY29udHJvbCAmIDB4ZmYpOworCXJldHVybiBtdjY0eDYwX2kyY193YWl0X2Zvcl9zdGF0dXMoc3RhdHVzKTsKK30KKworaW50IG12NjR4NjBfaTJjX3JlYWQodTMyIGRldmFkZHIsIHU4ICpidWYsIHUzMiBvZmZzZXQsIHUzMiBvZmZzZXRfc2l6ZSwKKwkJIHUzMiBjb3VudCkKK3sKKwlpbnQgaTsKKwlpbnQgZGF0YTsKKwlpbnQgY29udHJvbDsKKwlpbnQgc3RhdHVzOworCisJaWYgKGN0bHJfYmFzZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwkvKiBzZW5kIHJlc2V0ICovCisJb3V0X2xlMzIoKHUzMiAqKShjdGxyX2Jhc2UgKyBNVjY0eDYwX0kyQ19SRUdfU09GVF9SRVNFVCksIDApOworCW91dF9sZTMyKCh1MzIgKikoY3Rscl9iYXNlICsgTVY2NHg2MF9JMkNfUkVHX1NMQVZFX0FERFIpLCAwKTsKKwlvdXRfbGUzMigodTMyICopKGN0bHJfYmFzZSArIE1WNjR4NjBfSTJDX1JFR19FWFRfU0xBVkVfQUREUiksIDApOworCW91dF9sZTMyKCh1MzIgKikoY3Rscl9iYXNlICsgTVY2NHg2MF9JMkNfUkVHX0JBVUQpLCAoNCA8PCAzKSB8IDB4NCk7CisKKwlpZiAobXY2NHg2MF9pMmNfY29udHJvbChNVjY0eDYwX0kyQ19DT05UUk9MX1RXU0lFTiwKKwkJCQlNVjY0eDYwX0kyQ19TVEFUVVNfTk9fU1RBVFVTKSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIHNlbmQgc3RhcnQgKi8KKwljb250cm9sID0gTVY2NHg2MF9JMkNfQ09OVFJPTF9TVEFSVCB8IE1WNjR4NjBfSTJDX0NPTlRST0xfVFdTSUVOOworCXN0YXR1cyA9IE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1NUQVJUOworCWlmIChtdjY0eDYwX2kyY19jb250cm9sKGNvbnRyb2wsIHN0YXR1cykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBzZWxlY3QgZGV2aWNlIGZvciB3cml0aW5nICovCisJZGF0YSA9IGRldmFkZHIgJiB+MHgxOworCWNvbnRyb2wgPSBNVjY0eDYwX0kyQ19DT05UUk9MX1RXU0lFTjsKKwlzdGF0dXMgPSBNVjY0eDYwX0kyQ19TVEFUVVNfTUFTVF9XUl9BRERSX0FDSzsKKwlpZiAobXY2NHg2MF9pMmNfd3JpdGVfYnl0ZShkYXRhLCBjb250cm9sLCBzdGF0dXMpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogc2VuZCBvZmZzZXQgb2YgZGF0YSAqLworCWNvbnRyb2wgPSBNVjY0eDYwX0kyQ19DT05UUk9MX1RXU0lFTjsKKwlzdGF0dXMgPSBNVjY0eDYwX0kyQ19TVEFUVVNfTUFTVF9XUl9BQ0s7CisJaWYgKG9mZnNldF9zaXplID4gMSkgeworCQlpZiAobXY2NHg2MF9pMmNfd3JpdGVfYnl0ZShvZmZzZXQgPj4gOCwgY29udHJvbCwgc3RhdHVzKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCWlmIChtdjY0eDYwX2kyY193cml0ZV9ieXRlKG9mZnNldCwgY29udHJvbCwgc3RhdHVzKSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIHJlc2VuZCBzdGFydCAqLworCWNvbnRyb2wgPSBNVjY0eDYwX0kyQ19DT05UUk9MX1NUQVJUIHwgTVY2NHg2MF9JMkNfQ09OVFJPTF9UV1NJRU47CisJc3RhdHVzID0gTVY2NHg2MF9JMkNfU1RBVFVTX01BU1RfUkVQRUFUX1NUQVJUOworCWlmIChtdjY0eDYwX2kyY19jb250cm9sKGNvbnRyb2wsIHN0YXR1cykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBzZWxlY3QgZGV2aWNlIGZvciByZWFkaW5nICovCisJZGF0YSA9IGRldmFkZHIgfCAweDE7CisJY29udHJvbCA9IE1WNjR4NjBfSTJDX0NPTlRST0xfVFdTSUVOOworCXN0YXR1cyA9IE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1JEX0FERFJfQUNLOworCWlmIChtdjY0eDYwX2kyY193cml0ZV9ieXRlKGRhdGEsIGNvbnRyb2wsIHN0YXR1cykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiByZWFkIGFsbCBidXQgbGFzdCBieXRlIG9mIGRhdGEgKi8KKwljb250cm9sID0gTVY2NHg2MF9JMkNfQ09OVFJPTF9BQ0sgfCBNVjY0eDYwX0kyQ19DT05UUk9MX1RXU0lFTjsKKwlzdGF0dXMgPSBNVjY0eDYwX0kyQ19TVEFUVVNfTUFTVF9SRF9EQVRBX0FDSzsKKworCWZvciAoaT0xOyBpPGNvdW50OyBpKyspIHsKKwkJZGF0YSA9IG12NjR4NjBfaTJjX3JlYWRfYnl0ZShjb250cm9sLCBzdGF0dXMpOworCQlpZiAoZGF0YSA8IDApIHsKKwkJCXByaW50ZigiZXJyb3JzIG9uIGl0ZXJhdGlvbiAlZFxuIiwgaSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJKmJ1ZisrID0gZGF0YTsKKwl9CisKKwkvKiByZWFkIGxhc3QgYnl0ZSBvZiBkYXRhICovCisJY29udHJvbCA9IE1WNjR4NjBfSTJDX0NPTlRST0xfVFdTSUVOOworCXN0YXR1cyA9IE1WNjR4NjBfSTJDX1NUQVRVU19NQVNUX1JEX0RBVEFfTk9fQUNLOworCWRhdGEgPSBtdjY0eDYwX2kyY19yZWFkX2J5dGUoY29udHJvbCwgc3RhdHVzKTsKKwlpZiAoZGF0YSA8IDApCisJCXJldHVybiAtMTsKKwkqYnVmKysgPSBkYXRhOworCisJLyogc2VuZCBzdG9wICovCisJY29udHJvbCA9IE1WNjR4NjBfSTJDX0NPTlRST0xfU1RPUCB8IE1WNjR4NjBfSTJDX0NPTlRST0xfVFdTSUVOOworCXN0YXR1cyA9IE1WNjR4NjBfSTJDX1NUQVRVU19OT19TVEFUVVM7CisJaWYgKG12NjR4NjBfaTJjX2NvbnRyb2woY29udHJvbCwgc3RhdHVzKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiBjb3VudDsKK30KKworaW50IG12NjR4NjBfaTJjX29wZW4odm9pZCkKK3sKKwl1MzIgdjsKKwl2b2lkICpkZXZwOworCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9tdjY0eDYwL2kyYyIpOworCWlmIChkZXZwID09IE5VTEwpCisJCWdvdG8gZXJyX291dDsKKwlpZiAoZ2V0cHJvcChkZXZwLCAidmlydHVhbC1yZWciLCAmdiwgc2l6ZW9mKHYpKSAhPSBzaXplb2YodikpCisJCWdvdG8gZXJyX291dDsKKworCWN0bHJfYmFzZSA9ICh1OCAqKXY7CisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJcmV0dXJuIC0xOworfQorCit2b2lkIG12NjR4NjBfaTJjX2Nsb3NlKHZvaWQpCit7CisJY3Rscl9iYXNlID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L29wcy5oIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvb3BzLmgKaW5kZXggNzNiZDQ3YS4uOTU5MTI0ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3Qvb3BzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvb3BzLmgKQEAgLTc5LDYgKzc5LDcgQEAKIGludCBmdF9pbml0KHZvaWQgKmR0X2Jsb2IsIHVuc2lnbmVkIGludCBtYXhfc2l6ZSwgdW5zaWduZWQgaW50IG1heF9maW5kX2RldmljZSk7CiBpbnQgc2VyaWFsX2NvbnNvbGVfaW5pdCh2b2lkKTsKIGludCBuczE2NTUwX2NvbnNvbGVfaW5pdCh2b2lkICpkZXZwLCBzdHJ1Y3Qgc2VyaWFsX2NvbnNvbGVfZGF0YSAqc2NkcCk7CitpbnQgbXBzY19jb25zb2xlX2luaXQodm9pZCAqZGV2cCwgc3RydWN0IHNlcmlhbF9jb25zb2xlX2RhdGEgKnNjZHApOwogdm9pZCAqc2ltcGxlX2FsbG9jX2luaXQoY2hhciAqYmFzZSwgdW5zaWduZWQgbG9uZyBoZWFwX3NpemUsCiAJCQl1bnNpZ25lZCBsb25nIGdyYW51bGFyaXR5LCB1bnNpZ25lZCBsb25nIG1heF9hbGxvY3MpOwogZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGUodm9pZCAqLCB1bnNpZ25lZCBsb25nKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3BycG1jMjgwMC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvcHJwbWMyODAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyOGJhYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3BycG1jMjgwMC5jCkBAIC0wLDAgKzEsNTc3IEBACisvKgorICogTW90b3JvbGEgRUNDIHBycG1jMjgwL2YxMDEgJiBwcnBtYzI4MDAvZjEwMWUgcGxhdGZvcm0gY29kZS4KKyAqCisgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPgorICoKKyAqIDIwMDcgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiZWxmLmgiCisjaW5jbHVkZSAicGFnZS5oIgorI2luY2x1ZGUgInN0cmluZy5oIgorI2luY2x1ZGUgInN0ZGlvLmgiCisjaW5jbHVkZSAiaW8uaCIKKyNpbmNsdWRlICJvcHMuaCIKKyNpbmNsdWRlICJndW56aXBfdXRpbC5oIgorI2luY2x1ZGUgIm12NjR4NjAuaCIKKworZXh0ZXJuIGNoYXIgX2VuZFtdOworZXh0ZXJuIGNoYXIgX3ZtbGludXhfc3RhcnRbXSwgX3ZtbGludXhfZW5kW107CitleHRlcm4gY2hhciBfZHRiX3N0YXJ0W10sIF9kdGJfZW5kW107CisKK2V4dGVybiB2b2lkIHVkZWxheShsb25nIGRlbGF5KTsKKworI2RlZmluZSBLQgkxMDI0VQorI2RlZmluZSBNQgkoS0IqS0IpCisjZGVmaW5lIEdCCShLQipNQikKKyNkZWZpbmUgTUh6CSgxMDAwVSoxMDAwVSkKKyNkZWZpbmUgR0h6CSgxMDAwVSpNSHopCisKKyNkZWZpbmUgQk9BUkRfTU9ERUwJIlByUE1DMjgwMCIKKyNkZWZpbmUgQk9BUkRfTU9ERUxfTUFYCTMyIC8qIG1heCBzdHJsZW4oQk9BUkRfTU9ERUwpICsgMSAqLworCisjZGVmaW5lIEVFUFJPTTJfQUREUgkweGE0CisjZGVmaW5lIEVFUFJPTTNfQUREUgkweGE4CisKK0JTU19TVEFDSygxNipLQik7CisKK3N0YXRpYyB1OCAqYnJpZGdlX2Jhc2U7CisKK3R5cGVkZWYgZW51bSB7CisJQk9BUkRfTU9ERUxfUFJQTUMyODAsCisJQk9BUkRfTU9ERUxfUFJQTUMyODAwLAorfSBwcnBtYzI4MDBfYm9hcmRfbW9kZWw7CisKK3R5cGVkZWYgZW51bSB7CisJQlJJREdFX1RZUEVfTVY2NDM2MCwKKwlCUklER0VfVFlQRV9NVjY0MzYyLAorfSBwcnBtYzI4MDBfYnJpZGdlX3R5cGU7CisKK3N0cnVjdCBwcnBtYzI4MDBfYm9hcmRfaW5mbyB7CisJcHJwbWMyODAwX2JvYXJkX21vZGVsIG1vZGVsOworCWNoYXIgdmFyaWFudDsKKwlwcnBtYzI4MDBfYnJpZGdlX3R5cGUgYnJpZGdlX3R5cGU7CisJdTggc3Vic3lzMDsKKwl1OCBzdWJzeXMxOworCXU4IHZwZDQ7CisJdTggdnBkNF9tYXNrOworCXUzMiBjb3JlX3NwZWVkOworCXUzMiBtZW1fc2l6ZTsKKwl1MzIgYm9vdF9mbGFzaDsKKwl1MzIgdXNlcl9mbGFzaDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHJwbWMyODAwX2JvYXJkX2luZm8gcHJwbWMyODAwX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCS5tb2RlbAkJPSBCT0FSRF9NT0RFTF9QUlBNQzI4MCwKKwkJLnZhcmlhbnQJPSAnYScsCisJCS5icmlkZ2VfdHlwZQk9IEJSSURHRV9UWVBFX01WNjQzNjAsCisJCS5zdWJzeXMwCT0gMHhmZiwKKwkJLnN1YnN5czEJPSAweGZmLAorCQkudnBkNAkJPSAweDAwLAorCQkudnBkNF9tYXNrCT0gMHgwZiwKKwkJLmNvcmVfc3BlZWQJPSAxKkdIeiwKKwkJLm1lbV9zaXplCT0gNTEyKk1CLAorCQkuYm9vdF9mbGFzaAk9IDEqTUIsCisJCS51c2VyX2ZsYXNoCT0gNjQqTUIsCisJfSwKKwl7CisJCS5tb2RlbAkJPSBCT0FSRF9NT0RFTF9QUlBNQzI4MCwKKwkJLnZhcmlhbnQJPSAnYicsCisJCS5icmlkZ2VfdHlwZQk9IEJSSURHRV9UWVBFX01WNjQzNjIsCisJCS5zdWJzeXMwCT0gMHhmZiwKKwkJLnN1YnN5czEJPSAweGZmLAorCQkudnBkNAkJPSAweDAxLAorCQkudnBkNF9tYXNrCT0gMHgwZiwKKwkJLmNvcmVfc3BlZWQJPSAxKkdIeiwKKwkJLm1lbV9zaXplCT0gNTEyKk1CLAorCQkuYm9vdF9mbGFzaAk9IDAsCisJCS51c2VyX2ZsYXNoCT0gMCwKKwl9LAorCXsKKwkJLm1vZGVsCQk9IEJPQVJEX01PREVMX1BSUE1DMjgwLAorCQkudmFyaWFudAk9ICdjJywKKwkJLmJyaWRnZV90eXBlCT0gQlJJREdFX1RZUEVfTVY2NDM2MCwKKwkJLnN1YnN5czAJPSAweGZmLAorCQkuc3Vic3lzMQk9IDB4ZmYsCisJCS52cGQ0CQk9IDB4MDIsCisJCS52cGQ0X21hc2sJPSAweDBmLAorCQkuY29yZV9zcGVlZAk9IDczMypNSHosCisJCS5tZW1fc2l6ZQk9IDUxMipNQiwKKwkJLmJvb3RfZmxhc2gJPSAxKk1CLAorCQkudXNlcl9mbGFzaAk9IDY0Kk1CLAorCX0sCisJeworCQkubW9kZWwJCT0gQk9BUkRfTU9ERUxfUFJQTUMyODAsCisJCS52YXJpYW50CT0gJ2QnLAorCQkuYnJpZGdlX3R5cGUJPSBCUklER0VfVFlQRV9NVjY0MzYwLAorCQkuc3Vic3lzMAk9IDB4ZmYsCisJCS5zdWJzeXMxCT0gMHhmZiwKKwkJLnZwZDQJCT0gMHgwMywKKwkJLnZwZDRfbWFzawk9IDB4MGYsCisJCS5jb3JlX3NwZWVkCT0gMSpHSHosCisJCS5tZW1fc2l6ZQk9IDEqR0IsCisJCS5ib290X2ZsYXNoCT0gMSpNQiwKKwkJLnVzZXJfZmxhc2gJPSA2NCpNQiwKKwl9LAorCXsKKwkJLm1vZGVsCQk9IEJPQVJEX01PREVMX1BSUE1DMjgwLAorCQkudmFyaWFudAk9ICdlJywKKwkJLmJyaWRnZV90eXBlCT0gQlJJREdFX1RZUEVfTVY2NDM2MCwKKwkJLnN1YnN5czAJPSAweGZmLAorCQkuc3Vic3lzMQk9IDB4ZmYsCisJCS52cGQ0CQk9IDB4MDQsCisJCS52cGQ0X21hc2sJPSAweDBmLAorCQkuY29yZV9zcGVlZAk9IDEqR0h6LAorCQkubWVtX3NpemUJPSA1MTIqTUIsCisJCS5ib290X2ZsYXNoCT0gMSpNQiwKKwkJLnVzZXJfZmxhc2gJPSA2NCpNQiwKKwl9LAorCXsKKwkJLm1vZGVsCQk9IEJPQVJEX01PREVMX1BSUE1DMjgwLAorCQkudmFyaWFudAk9ICdmJywKKwkJLmJyaWRnZV90eXBlCT0gQlJJREdFX1RZUEVfTVY2NDM2MiwKKwkJLnN1YnN5czAJPSAweGZmLAorCQkuc3Vic3lzMQk9IDB4ZmYsCisJCS52cGQ0CQk9IDB4MDUsCisJCS52cGQ0X21hc2sJPSAweDBmLAorCQkuY29yZV9zcGVlZAk9IDczMypNSHosCisJCS5tZW1fc2l6ZQk9IDEyOCpNQiwKKwkJLmJvb3RfZmxhc2gJPSAxKk1CLAorCQkudXNlcl9mbGFzaAk9IDAsCisJfSwKKwl7CisJCS5tb2RlbAkJPSBCT0FSRF9NT0RFTF9QUlBNQzI4MCwKKwkJLnZhcmlhbnQJPSAnZycsCisJCS5icmlkZ2VfdHlwZQk9IEJSSURHRV9UWVBFX01WNjQzNjAsCisJCS5zdWJzeXMwCT0gMHhmZiwKKwkJLnN1YnN5czEJPSAweGZmLAorCQkudnBkNAkJPSAweDA2LAorCQkudnBkNF9tYXNrCT0gMHgwZiwKKwkJLmNvcmVfc3BlZWQJPSAxKkdIeiwKKwkJLm1lbV9zaXplCT0gMjU2Kk1CLAorCQkuYm9vdF9mbGFzaAk9IDEqTUIsCisJCS51c2VyX2ZsYXNoCT0gMCwKKwl9LAorCXsKKwkJLm1vZGVsCQk9IEJPQVJEX01PREVMX1BSUE1DMjgwLAorCQkudmFyaWFudAk9ICdoJywKKwkJLmJyaWRnZV90eXBlCT0gQlJJREdFX1RZUEVfTVY2NDM2MCwKKwkJLnN1YnN5czAJPSAweGZmLAorCQkuc3Vic3lzMQk9IDB4ZmYsCisJCS52cGQ0CQk9IDB4MDcsCisJCS52cGQ0X21hc2sJPSAweDBmLAorCQkuY29yZV9zcGVlZAk9IDEqR0h6LAorCQkubWVtX3NpemUJPSAxKkdCLAorCQkuYm9vdF9mbGFzaAk9IDEqTUIsCisJCS51c2VyX2ZsYXNoCT0gNjQqTUIsCisJfSwKKwl7CisJCS5tb2RlbAkJPSBCT0FSRF9NT0RFTF9QUlBNQzI4MDAsCisJCS52YXJpYW50CT0gJ2EnLAorCQkuYnJpZGdlX3R5cGUJPSBCUklER0VfVFlQRV9NVjY0MzYwLAorCQkuc3Vic3lzMAk9IDB4YjIsCisJCS5zdWJzeXMxCT0gMHg4YywKKwkJLnZwZDQJCT0gMHgwMCwKKwkJLnZwZDRfbWFzawk9IDB4MDAsCisJCS5jb3JlX3NwZWVkCT0gMSpHSHosCisJCS5tZW1fc2l6ZQk9IDUxMipNQiwKKwkJLmJvb3RfZmxhc2gJPSAyKk1CLAorCQkudXNlcl9mbGFzaAk9IDY0Kk1CLAorCX0sCisJeworCQkubW9kZWwJCT0gQk9BUkRfTU9ERUxfUFJQTUMyODAwLAorCQkudmFyaWFudAk9ICdiJywKKwkJLmJyaWRnZV90eXBlCT0gQlJJREdFX1RZUEVfTVY2NDM2MiwKKwkJLnN1YnN5czAJPSAweGIyLAorCQkuc3Vic3lzMQk9IDB4OGQsCisJCS52cGQ0CQk9IDB4MDAsCisJCS52cGQ0X21hc2sJPSAweDAwLAorCQkuY29yZV9zcGVlZAk9IDEqR0h6LAorCQkubWVtX3NpemUJPSA1MTIqTUIsCisJCS5ib290X2ZsYXNoCT0gMCwKKwkJLnVzZXJfZmxhc2gJPSAwLAorCX0sCisJeworCQkubW9kZWwJCT0gQk9BUkRfTU9ERUxfUFJQTUMyODAwLAorCQkudmFyaWFudAk9ICdjJywKKwkJLmJyaWRnZV90eXBlCT0gQlJJREdFX1RZUEVfTVY2NDM2MCwKKwkJLnN1YnN5czAJPSAweGIyLAorCQkuc3Vic3lzMQk9IDB4OGUsCisJCS52cGQ0CQk9IDB4MDAsCisJCS52cGQ0X21hc2sJPSAweDAwLAorCQkuY29yZV9zcGVlZAk9IDczMypNSHosCisJCS5tZW1fc2l6ZQk9IDUxMipNQiwKKwkJLmJvb3RfZmxhc2gJPSAyKk1CLAorCQkudXNlcl9mbGFzaAk9IDY0Kk1CLAorCX0sCisJeworCQkubW9kZWwJCT0gQk9BUkRfTU9ERUxfUFJQTUMyODAwLAorCQkudmFyaWFudAk9ICdkJywKKwkJLmJyaWRnZV90eXBlCT0gQlJJREdFX1RZUEVfTVY2NDM2MCwKKwkJLnN1YnN5czAJPSAweGIyLAorCQkuc3Vic3lzMQk9IDB4OGYsCisJCS52cGQ0CQk9IDB4MDAsCisJCS52cGQ0X21hc2sJPSAweDAwLAorCQkuY29yZV9zcGVlZAk9IDEqR0h6LAorCQkubWVtX3NpemUJPSAxKkdCLAorCQkuYm9vdF9mbGFzaAk9IDIqTUIsCisJCS51c2VyX2ZsYXNoCT0gNjQqTUIsCisJfSwKKwl7CisJCS5tb2RlbAkJPSBCT0FSRF9NT0RFTF9QUlBNQzI4MDAsCisJCS52YXJpYW50CT0gJ2UnLAorCQkuYnJpZGdlX3R5cGUJPSBCUklER0VfVFlQRV9NVjY0MzYwLAorCQkuc3Vic3lzMAk9IDB4YTIsCisJCS5zdWJzeXMxCT0gMHg4YSwKKwkJLnZwZDQJCT0gMHgwMCwKKwkJLnZwZDRfbWFzawk9IDB4MDAsCisJCS5jb3JlX3NwZWVkCT0gMSpHSHosCisJCS5tZW1fc2l6ZQk9IDUxMipNQiwKKwkJLmJvb3RfZmxhc2gJPSAyKk1CLAorCQkudXNlcl9mbGFzaAk9IDY0Kk1CLAorCX0sCisJeworCQkubW9kZWwJCT0gQk9BUkRfTU9ERUxfUFJQTUMyODAwLAorCQkudmFyaWFudAk9ICdmJywKKwkJLmJyaWRnZV90eXBlCT0gQlJJREdFX1RZUEVfTVY2NDM2MiwKKwkJLnN1YnN5czAJPSAweGEyLAorCQkuc3Vic3lzMQk9IDB4OGIsCisJCS52cGQ0CQk9IDB4MDAsCisJCS52cGQ0X21hc2sJPSAweDAwLAorCQkuY29yZV9zcGVlZAk9IDczMypNSHosCisJCS5tZW1fc2l6ZQk9IDEyOCpNQiwKKwkJLmJvb3RfZmxhc2gJPSAyKk1CLAorCQkudXNlcl9mbGFzaAk9IDAsCisJfSwKKwl7CisJCS5tb2RlbAkJPSBCT0FSRF9NT0RFTF9QUlBNQzI4MDAsCisJCS52YXJpYW50CT0gJ2cnLAorCQkuYnJpZGdlX3R5cGUJPSBCUklER0VfVFlQRV9NVjY0MzYwLAorCQkuc3Vic3lzMAk9IDB4YTIsCisJCS5zdWJzeXMxCT0gMHg4YywKKwkJLnZwZDQJCT0gMHgwMCwKKwkJLnZwZDRfbWFzawk9IDB4MDAsCisJCS5jb3JlX3NwZWVkCT0gMSpHSHosCisJCS5tZW1fc2l6ZQk9IDIqR0IsCisJCS5ib290X2ZsYXNoCT0gMipNQiwKKwkJLnVzZXJfZmxhc2gJPSA2NCpNQiwKKwl9LAorCXsKKwkJLm1vZGVsCQk9IEJPQVJEX01PREVMX1BSUE1DMjgwMCwKKwkJLnZhcmlhbnQJPSAnaCcsCisJCS5icmlkZ2VfdHlwZQk9IEJSSURHRV9UWVBFX01WNjQzNjAsCisJCS5zdWJzeXMwCT0gMHhhMiwKKwkJLnN1YnN5czEJPSAweDhkLAorCQkudnBkNAkJPSAweDAwLAorCQkudnBkNF9tYXNrCT0gMHgwMCwKKwkJLmNvcmVfc3BlZWQJPSA3MzMqTUh6LAorCQkubWVtX3NpemUJPSAxKkdCLAorCQkuYm9vdF9mbGFzaAk9IDIqTUIsCisJCS51c2VyX2ZsYXNoCT0gNjQqTUIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHJwbWMyODAwX2JvYXJkX2luZm8gKnBycG1jMjgwMF9nZXRfYm9hcmRfaW5mbyh1OCAqdnBkKQoreworCXN0cnVjdCBwcnBtYzI4MDBfYm9hcmRfaW5mbyAqYmlwOworCWludCBpOworCisJZm9yIChpPTAsYmlwPXBycG1jMjgwMF9ib2FyZF9pbmZvOyBpPEFSUkFZX1NJWkUocHJwbWMyODAwX2JvYXJkX2luZm8pOworCQkJaSsrLGJpcCsrKQorCQlpZiAoKHZwZFswXSA9PSBiaXAtPnN1YnN5czApICYmICh2cGRbMV0gPT0gYmlwLT5zdWJzeXMxKQorCQkJCSYmICgodnBkWzRdICYgYmlwLT52cGQ0X21hc2spID09IGJpcC0+dnBkNCkpCisJCQlyZXR1cm4gYmlwOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIEdldCBWUEQgZnJvbSBpMmMgZWVwcm9tIDIsIHRoZW4gbWF0Y2ggaXQgdG8gYSBib2FyZCBpbmZvIGVudHJ5ICovCitzdGF0aWMgc3RydWN0IHBycG1jMjgwMF9ib2FyZF9pbmZvICpwcnBtYzI4MDBfZ2V0X2JpcCh2b2lkKQoreworCXN0cnVjdCBwcnBtYzI4MDBfYm9hcmRfaW5mbyAqYmlwOworCXU4IHZwZFs1XTsKKwlpbnQgcmM7CisKKwlpZiAobXY2NHg2MF9pMmNfb3BlbigpKQorCQlmYXRhbCgiRXJyb3I6IENhbid0IG9wZW4gaTJjIGRldmljZVxuXHIiKTsKKworCS8qIEdldCBWUEQgZnJvbSBpMmMgZWVwcm9tLTIgKi8KKwltZW1zZXQodnBkLCAwLCBzaXplb2YodnBkKSk7CisJcmMgPSBtdjY0eDYwX2kyY19yZWFkKEVFUFJPTTJfQUREUiwgdnBkLCAweDFmZGUsIDIsIHNpemVvZih2cGQpKTsKKwlpZiAocmMgPCAwKQorCQlmYXRhbCgiRXJyb3I6IENvdWxkbid0IHJlYWQgZWVwcm9tMlxuXHIiKTsKKwltdjY0eDYwX2kyY19jbG9zZSgpOworCisJLyogR2V0IGJvYXJkIHR5cGUgJiByZWxhdGVkIGluZm8gKi8KKwliaXAgPSBwcnBtYzI4MDBfZ2V0X2JvYXJkX2luZm8odnBkKTsKKwlpZiAoYmlwID09IE5VTEwpIHsKKwkJcHJpbnRmKCJFcnJvcjogVW5zdXBwb3J0ZWQgYm9hcmQgb3IgY29ycnVwdGVkIFZQRDpcblxyIik7CisJCXByaW50ZigiICAweCV4IDB4JXggMHgleCAweCV4IDB4JXhcblxyIiwKKwkJCQl2cGRbMF0sIHZwZFsxXSwgdnBkWzJdLCB2cGRbM10sIHZwZFs0XSk7CisJCXByaW50ZigiVXNpbmcgZGV2aWNlIHRyZWUgZGVmYXVsdHMuLi5cblxyIik7CisJfQorCisJcmV0dXJuIGJpcDsKK30KKworc3RhdGljIHZvaWQgcHJwbWMyODAwX2JyaWRnZV9zZXR1cCh1MzIgbWVtX3NpemUpCit7CisJdTMyIGksIHZbMTJdLCBlbmFibGVzLCBhY2NfYml0czsKKwl1MzIgcGNpX2Jhc2VfaGksIHBjaV9iYXNlX2xvLCBzaXplLCBidWZbMl07CisJdW5zaWduZWQgbG9uZyBjcHVfYmFzZTsKKwlpbnQgcmM7CisJdm9pZCAqZGV2cDsKKwl1OCAqYnJpZGdlX3BiYXNlLCBpc19jb2hlcmVudDsKKwlzdHJ1Y3QgbXY2NHg2MF9jcHUycGNpX3dpbiAqdGJsOworCisJYnJpZGdlX3BiYXNlID0gbXY2NHg2MF9nZXRfYnJpZGdlX3BiYXNlKCk7CisJaXNfY29oZXJlbnQgPSBtdjY0eDYwX2lzX2NvaGVyZW50KCk7CisKKwlpZiAoaXNfY29oZXJlbnQpCisJCWFjY19iaXRzID0gTVY2NHg2MF9QQ0lfQUNDX0NOVExfU05PT1BfV0IKKwkJCXwgTVY2NHg2MF9QQ0lfQUNDX0NOVExfU1dBUF9OT05FCisJCQl8IE1WNjR4NjBfUENJX0FDQ19DTlRMX01CVVJTVF8zMl9CWVRFUworCQkJfCBNVjY0eDYwX1BDSV9BQ0NfQ05UTF9SRFNJWkVfMzJfQllURVM7CisJZWxzZQorCQlhY2NfYml0cyA9IE1WNjR4NjBfUENJX0FDQ19DTlRMX1NOT09QX05PTkUKKwkJCXwgTVY2NHg2MF9QQ0lfQUNDX0NOVExfU1dBUF9OT05FCisJCQl8IE1WNjR4NjBfUENJX0FDQ19DTlRMX01CVVJTVF8xMjhfQllURVMKKwkJCXwgTVY2NHg2MF9QQ0lfQUNDX0NOVExfUkRTSVpFXzI1Nl9CWVRFUzsKKworCW12NjR4NjBfY29uZmlnX2N0bHJfd2luZG93cyhicmlkZ2VfYmFzZSwgYnJpZGdlX3BiYXNlLCBpc19jb2hlcmVudCk7CisJbXY2NHg2MF9jb25maWdfcGNpX3dpbmRvd3MoYnJpZGdlX2Jhc2UsIGJyaWRnZV9wYmFzZSwgMCwgMCwgbWVtX3NpemUsCisJCQlhY2NfYml0cyk7CisKKwkvKiBHZXQgdGhlIGNwdSAtPiBwY2kgaS9vICYgbWVtIG1hcHBpbmdzIGZyb20gdGhlIGRldmljZSB0cmVlICovCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9tdjY0eDYwL3BjaUA4MDAwMDAwMCIpOworCWlmIChkZXZwID09IE5VTEwpCisJCWZhdGFsKCJFcnJvcjogTWlzc2luZyAvbXY2NHg2MC9wY2lAODAwMDAwMDAiCisJCQkJIiBkZXZpY2UgdHJlZSBub2RlXG5cciIpOworCisJcmMgPSBnZXRwcm9wKGRldnAsICJyYW5nZXMiLCB2LCBzaXplb2YodikpOworCWlmIChyYyAhPSBzaXplb2YodikpCisJCWZhdGFsKCJFcnJvcjogQ2FuJ3QgZmluZCAvbXY2NHg2MC9wY2lAODAwMDAwMDAvcmFuZ2VzIgorCQkJCSIgcHJvcGVydHlcblxyIik7CisKKwkvKiBHZXQgdGhlIGNwdSAtPiBwY2kgaS9vICYgbWVtIG1hcHBpbmdzIGZyb20gdGhlIGRldmljZSB0cmVlICovCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9tdjY0eDYwIik7CisJaWYgKGRldnAgPT0gTlVMTCkKKwkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIC9tdjY0eDYwIGRldmljZSB0cmVlIG5vZGVcblxyIik7CisKKwllbmFibGVzID0gaW5fbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9DUFVfQkFSX0VOQUJMRSkpOworCWVuYWJsZXMgfD0gMHgwMDA3ZmUwMDsgLyogRGlzYWJsZSBhbGwgY3B1LT5wY2kgd2luZG93cyAqLworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX0NQVV9CQVJfRU5BQkxFKSwgZW5hYmxlcyk7CisKKwlmb3IgKGk9MDsgaTwxMjsgaSs9NikgeworCQlzd2l0Y2ggKHZbaV0gJiAweGZmMDAwMDAwKSB7CisJCWNhc2UgMHgwMTAwMDAwMDogLyogUENJIEkvTyBTcGFjZSAqLworCQkJdGJsID0gbXY2NHg2MF9jcHUycGNpX2lvOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMjAwMDAwMDogLyogUENJIE1FTSBTcGFjZSAqLworCQkJdGJsID0gbXY2NHg2MF9jcHUycGNpX21lbTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJCX0KKworCQlwY2lfYmFzZV9oaSA9IHZbaSsxXTsKKwkJcGNpX2Jhc2VfbG8gPSB2W2krMl07CisJCWNwdV9iYXNlID0gdltpKzNdOworCQlzaXplID0gdltpKzVdOworCisJCWJ1ZlswXSA9IGNwdV9iYXNlOworCQlidWZbMV0gPSBzaXplOworCisJCWlmICghZHRfeGxhdGVfYWRkcihkZXZwLCBidWYsIHNpemVvZihidWYpLCAmY3B1X2Jhc2UpKQorCQkJZmF0YWwoIkVycm9yOiBDYW4ndCB0cmFuc2xhdGUgUENJIGFkZHJlc3MgMHgleFxuXHIiLAorCQkJCQkodTMyKWNwdV9iYXNlKTsKKworCQltdjY0eDYwX2NvbmZpZ19jcHUycGNpX3dpbmRvdyhicmlkZ2VfYmFzZSwgMCwgcGNpX2Jhc2VfaGksCisJCQkJcGNpX2Jhc2VfbG8sIGNwdV9iYXNlLCBzaXplLCB0YmwpOworCX0KKworCWVuYWJsZXMgJj0gfjB4MDAwMDA2MDA7IC8qIEVuYWJsZSBjcHUtPnBjaTAgaS9vLCBjcHUtPnBjaTAgbWVtMCAqLworCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX0NQVV9CQVJfRU5BQkxFKSwgZW5hYmxlcyk7Cit9CisKK3N0YXRpYyB2b2lkIHBycG1jMjgwMF9maXh1cHModm9pZCkKK3sKKwl1MzIgdlsyXSwgbCwgbWVtX3NpemU7CisJaW50IHJjOworCXZvaWQgKmRldnA7CisJY2hhciBtb2RlbFtCT0FSRF9NT0RFTF9NQVhdOworCXN0cnVjdCBwcnBtYzI4MDBfYm9hcmRfaW5mbyAqYmlwOworCisJYmlwID0gcHJwbWMyODAwX2dldF9iaXAoKTsgLyogR2V0IGJvYXJkIGluZm8gYmFzZWQgb24gVlBEICovCisKKwltZW1fc2l6ZSA9IChiaXApID8gYmlwLT5tZW1fc2l6ZSA6IG12NjR4NjBfZ2V0X21lbV9zaXplKGJyaWRnZV9iYXNlKTsKKwlwcnBtYzI4MDBfYnJpZGdlX3NldHVwKG1lbV9zaXplKTsgLyogRG8gbmVjZXNzYXJ5IGJyaWRnZSBzZXR1cCAqLworCisJLyogSWYgdGhlIFZQRCBkb2Vzbid0IG1hdGNoIHdoYXQgd2Uga25vdyBhYm91dCwganVzdCB1c2UgdGhlCisJICogZGVmYXVsdHMgYWxyZWFkeSBpbiB0aGUgZGV2aWNlIHRyZWUuCisJICovCisJaWYgKCFiaXApCisJCXJldHVybjsKKworCS8qIEtub3cgdGhlIGJvYXJkIHR5cGUgc28gb3ZlcnJpZGUgZGV2aWNlIHRyZWUgZGVmYXVsdHMgKi8KKwkvKiBTZXQgL21vZGVsIGFwcHJvcHJpYXRlbHkgKi8KKwlkZXZwID0gZmluZGRldmljZSgiLyIpOworCWlmIChkZXZwID09IE5VTEwpCisJCWZhdGFsKCJFcnJvcjogTWlzc2luZyAnLycgZGV2aWNlIHRyZWUgbm9kZVxuXHIiKTsKKwltZW1zZXQobW9kZWwsIDAsIEJPQVJEX01PREVMX01BWCk7CisJc3RybmNweShtb2RlbCwgQk9BUkRfTU9ERUwsIEJPQVJEX01PREVMX01BWCAtIDIpOworCWwgPSBzdHJsZW4obW9kZWwpOworCWlmIChiaXAtPm1vZGVsID09IEJPQVJEX01PREVMX1BSUE1DMjgwKQorCQlsLS07CisJbW9kZWxbbCsrXSA9IGJpcC0+dmFyaWFudDsKKwltb2RlbFtsKytdID0gJ1wwJzsKKwlzZXRwcm9wKGRldnAsICJtb2RlbCIsIG1vZGVsLCBsKTsKKworCS8qIFNldCAvY3B1cy9Qb3dlclBDLDc0NDcvY2xvY2stZnJlcXVlbmN5ICovCisJZGV2cCA9IGZpbmRkZXZpY2UoIi9jcHVzL1Bvd2VyUEMsNzQ0NyIpOworCWlmIChkZXZwID09IE5VTEwpCisJCWZhdGFsKCJFcnJvcjogTWlzc2luZyBwcm9wZXIgL2NwdXMgZGV2aWNlIHRyZWUgbm9kZVxuXHIiKTsKKwl2WzBdID0gYmlwLT5jb3JlX3NwZWVkOworCXNldHByb3AoZGV2cCwgImNsb2NrLWZyZXF1ZW5jeSIsICZ2WzBdLCBzaXplb2YodlswXSkpOworCisJLyogU2V0IC9tZW1vcnkvcmVnIHNpemUgKi8KKwlkZXZwID0gZmluZGRldmljZSgiL21lbW9yeSIpOworCWlmIChkZXZwID09IE5VTEwpCisJCWZhdGFsKCJFcnJvcjogTWlzc2luZyAvbWVtb3J5IGRldmljZSB0cmVlIG5vZGVcblxyIik7CisJdlswXSA9IDA7CisJdlsxXSA9IGJpcC0+bWVtX3NpemU7CisJc2V0cHJvcChkZXZwLCAicmVnIiwgdiwgc2l6ZW9mKHYpKTsKKworCS8qIFVwZGF0ZSAvbXY2NHg2MC9tb2RlbCwgaWYgdGhpcyBpcyBhIG12NjQzNjIgKi8KKwlpZiAoYmlwLT5icmlkZ2VfdHlwZSA9PSBCUklER0VfVFlQRV9NVjY0MzYyKSB7CisJCWRldnAgPSBmaW5kZGV2aWNlKCIvbXY2NHg2MCIpOworCQlpZiAoZGV2cCA9PSBOVUxMKQorCQkJZmF0YWwoIkVycm9yOiBNaXNzaW5nIC9tdjY0eDYwIGRldmljZSB0cmVlIG5vZGVcblxyIik7CisJCXNldHByb3AoZGV2cCwgIm1vZGVsIiwgIm12NjQzNjIiLCBzdHJsZW4oIm12NjQzNjIiKSArIDEpOworCX0KKworCS8qIFNldCBVc2VyIEZMQVNIIHNpemUgKi8KKwlkZXZwID0gZmluZGRldmljZSgiL212NjR4NjAvZmxhc2hAYTAwMDAwMDAiKTsKKwlpZiAoZGV2cCA9PSBOVUxMKQorCQlmYXRhbCgiRXJyb3I6IE1pc3NpbmcgVXNlciBGTEFTSCBkZXZpY2UgdHJlZSBub2RlXG5cciIpOworCXJjID0gZ2V0cHJvcChkZXZwLCAicmVnIiwgdiwgc2l6ZW9mKHYpKTsKKwlpZiAocmMgIT0gc2l6ZW9mKHYpKQorCQlmYXRhbCgiRXJyb3I6IENhbid0IGZpbmQgVXNlciBGTEFTSCByZWcgcHJvcGVydHlcblxyIik7CisJdlsxXSA9IGJpcC0+dXNlcl9mbGFzaDsKKwlzZXRwcm9wKGRldnAsICJyZWciLCB2LCBzaXplb2YodikpOworfQorCisjZGVmaW5lIE1WNjR4NjBfTVBQX0NOVExfMAkweGYwMDAKKyNkZWZpbmUgTVY2NHg2MF9NUFBfQ05UTF8yCTB4ZjAwOAorI2RlZmluZSBNVjY0eDYwX0dQUF9JT19DTlRMCTB4ZjEwMAorI2RlZmluZSBNVjY0eDYwX0dQUF9MRVZFTF9DTlRMCTB4ZjExMAorI2RlZmluZSBNVjY0eDYwX0dQUF9WQUxVRV9TRVQJMHhmMTE4CisKK3N0YXRpYyB2b2lkIHBycG1jMjgwMF9yZXNldCh2b2lkKQoreworCXUzMiB0ZW1wOworCisJdWRlbGF5KDUwMDAwMDApOworCisJaWYgKGJyaWRnZV9iYXNlICE9IDApIHsKKwkJdGVtcCA9IGluX2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIE1WNjR4NjBfTVBQX0NOVExfMCkpOworCQl0ZW1wICY9IDB4RkZGRjBGRkY7CisJCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX01QUF9DTlRMXzApLCB0ZW1wKTsKKworCQl0ZW1wID0gaW5fbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9HUFBfTEVWRUxfQ05UTCkpOworCQl0ZW1wIHw9IDB4MDAwMDAwMDQ7CisJCW91dF9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX0dQUF9MRVZFTF9DTlRMKSwgdGVtcCk7CisKKwkJdGVtcCA9IGluX2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIE1WNjR4NjBfR1BQX0lPX0NOVEwpKTsKKwkJdGVtcCB8PSAweDAwMDAwMDA0OworCQlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9HUFBfSU9fQ05UTCksIHRlbXApOworCisJCXRlbXAgPSBpbl9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX01QUF9DTlRMXzIpKTsKKwkJdGVtcCAmPSAweEZGRkYwRkZGOworCQlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9NUFBfQ05UTF8yKSwgdGVtcCk7CisKKwkJdGVtcCA9IGluX2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIE1WNjR4NjBfR1BQX0xFVkVMX0NOVEwpKTsKKwkJdGVtcCB8PSAweDAwMDgwMDAwOworCQlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9HUFBfTEVWRUxfQ05UTCksIHRlbXApOworCisJCXRlbXAgPSBpbl9sZTMyKCh1MzIgKikoYnJpZGdlX2Jhc2UgKyBNVjY0eDYwX0dQUF9JT19DTlRMKSk7CisJCXRlbXAgfD0gMHgwMDA4MDAwMDsKKwkJb3V0X2xlMzIoKHUzMiAqKShicmlkZ2VfYmFzZSArIE1WNjR4NjBfR1BQX0lPX0NOVEwpLCB0ZW1wKTsKKworCQlvdXRfbGUzMigodTMyICopKGJyaWRnZV9iYXNlICsgTVY2NHg2MF9HUFBfVkFMVUVfU0VUKSwKKwkJCQkweDAwMDgwMDA0KTsKKwl9CisKKwlmb3IgKDs7KTsKK30KKworI2RlZmluZSBIRUFQX1NJWkUJKDE2Kk1CKQorc3RhdGljIHN0cnVjdCBndW56aXBfc3RhdGUgZ3pzdGF0ZTsKKwordm9pZCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNykKK3sKKwlzdHJ1Y3QgZWxmX2luZm8gZWk7CisJY2hhciAqaGVhcF9zdGFydCwgKmR0YjsKKwlpbnQgZHRfc2l6ZSA9IF9kdGJfZW5kIC0gX2R0Yl9zdGFydDsKKwl2b2lkICp2bWxpbnV6X2FkZHIgPSBfdm1saW51eF9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHZtbGludXpfc2l6ZSA9IF92bWxpbnV4X2VuZCAtIF92bWxpbnV4X3N0YXJ0OworCWNoYXIgZWxmaGVhZGVyWzI1Nl07CisKKwlpZiAoZHRfc2l6ZSA8PSAwKSAvKiBObyBmZHQgKi8KKwkJZXhpdCgpOworCisJLyoKKwkgKiBTdGFydCBoZWFwIGFmdGVyIGVuZCBvZiB0aGUga2VybmVsIChhZnRlciBkZWNvbXByZXNzZWQgdG8KKwkgKiBhZGRyZXNzIDApIG9yIHRoZSBlbmQgb2YgdGhlIHpJbWFnZSwgd2hpY2hldmVyIGlzIGhpZ2hlci4KKwkgKiBUaGF0J3Mgc28gdGhpbmdzIGFsbG9jYXRlZCBieSBzaW1wbGVfYWxsb2Mgd29uJ3Qgb3ZlcndyaXRlCisJICogYW55IHBhcnQgb2YgdGhlIHpJbWFnZSBhbmQgdGhlIGtlcm5lbCB3b24ndCBvdmVyd3JpdGUgdGhlIGR0YgorCSAqIHdoZW4gZGVjb21wcmVzc2VkICYgcmVsb2NhdGVkLgorCSAqLworCWd1bnppcF9zdGFydCgmZ3pzdGF0ZSwgdm1saW51el9hZGRyLCB2bWxpbnV6X3NpemUpOworCWd1bnppcF9leGFjdGx5KCZnenN0YXRlLCBlbGZoZWFkZXIsIHNpemVvZihlbGZoZWFkZXIpKTsKKworCWlmICghcGFyc2VfZWxmMzIoZWxmaGVhZGVyLCAmZWkpKQorCQlleGl0KCk7CisKKwloZWFwX3N0YXJ0ID0gKGNoYXIgKikoZWkubWVtc2l6ZSArIGVpLmVsZm9mZnNldCk7IC8qIGVuZCBvZiBrZXJuZWwqLworCWhlYXBfc3RhcnQgPSBtYXgoaGVhcF9zdGFydCwgKGNoYXIgKilfZW5kKTsgLyogZW5kIG9mIHpJbWFnZSAqLworCisJaWYgKCh1bnNpZ25lZClzaW1wbGVfYWxsb2NfaW5pdChoZWFwX3N0YXJ0LCBIRUFQX1NJWkUsIDIqS0IsIDE2KQorCQkJPiAoMTI4Kk1CKSkKKwkJZXhpdCgpOworCisJLyogUmVsb2NhdGUgZHRiIHRvIHNhZmUgYXJlYSBwYXN0IGVuZCBvZiB6SW1hZ2UgJiBrZXJuZWwgKi8KKwlkdGIgPSBtYWxsb2MoZHRfc2l6ZSk7CisJaWYgKCFkdGIpCisJCWV4aXQoKTsKKwltZW1tb3ZlKGR0YiwgX2R0Yl9zdGFydCwgZHRfc2l6ZSk7CisJaWYgKGZ0X2luaXQoZHRiLCBkdF9zaXplLCAxNikpCisJCWV4aXQoKTsKKworCWJyaWRnZV9iYXNlID0gbXY2NHg2MF9nZXRfYnJpZGdlX2Jhc2UoKTsKKworCXBsYXRmb3JtX29wcy5maXh1cHMgPSBwcnBtYzI4MDBfZml4dXBzOworCXBsYXRmb3JtX29wcy5leGl0ID0gcHJwbWMyODAwX3Jlc2V0OworCisJaWYgKHNlcmlhbF9jb25zb2xlX2luaXQoKSA8IDApCisJCWV4aXQoKTsKK30KKworLyogX3ppbWFnZV9zdGFydCBjYWxsZWQgdmVyeSBlYXJseS0tbmVlZCB0byB0dXJuIG9mZiBleHRlcm5hbCBpbnRlcnJ1cHRzICovCithc20gKCIJLmdsb2JsIF96aW1hZ2Vfc3RhcnRcblwKKwlfemltYWdlX3N0YXJ0OlxuXAorCQltZm1zcgkxMFxuXAorCQlybHdpbm0JMTAsMTAsMCx+KDE8PDE1KQkvKiBDbGVhciBNU1JfRUUgKi9cblwKKwkJc3luY1xuXAorCQltdG1zcgkxMFxuXAorCQlpc3luY1xuXAorCQliIF96aW1hZ2Vfc3RhcnRfbGliXG5cCisiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3NlcmlhbC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvc2VyaWFsLmMKaW5kZXggZThkZTRjZi4uN2ZkMzIzMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3Qvc2VyaWFsLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvc2VyaWFsLmMKQEAgLTEyNSw2ICsxMjUsOCBAQAogCiAJaWYgKCFzdHJjbXAoY29tcGF0LCAibnMxNjU1MCIpKQogCQlyYyA9IG5zMTY1NTBfY29uc29sZV9pbml0KGRldnAsICZzZXJpYWxfY2QpOworCWVsc2UgaWYgKCFzdHJjbXAoY29tcGF0LCAibWFydmVsbCxtcHNjIikpCisJCXJjID0gbXBzY19jb25zb2xlX2luaXQoZGV2cCwgJnNlcmlhbF9jZCk7CiAKIAkvKiBBZGQgb3RoZXIgc2VyaWFsIGNvbnNvbGUgZHJpdmVyIGNhbGxzIGhlcmUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvdHJlZWJvb3QtZWJvbnkuYyBiL2FyY2gvcG93ZXJwYy9ib290L3RyZWVib290LWVib255LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzNmE5YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3RyZWVib290LWVib255LmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIE9sZCBVLWJvb3QgY29tcGF0aWJpbGl0eSBmb3IgRWJvbnkKKyAqCisgKiBBdXRob3I6IERhdmlkIEdpYnNvbiA8ZGF2aWRAZ2lic29uLmRyb3BiZWFyLmlkLmF1PgorICoKKyAqIENvcHlyaWdodCAyMDA3IERhdmlkIEdpYnNvbiwgSUJNIENvcnBvcmF0aW8uCisgKiAgIEJhc2VkIG9uIGN1Ym9vdC04M3h4LmMsIHdoaWNoIGlzOgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlICI0NHguaCIKKworZXh0ZXJuIGNoYXIgX2VuZFtdOworCitCU1NfU1RBQ0soNDA5Nik7CisKKyNkZWZpbmUgT1BFTkJJT1NfTUFDX0JBU0UJMHhmZmZmZmUwYworI2RlZmluZSBPUEVOQklPU19NQUNfT0ZGU0VUCTB4YworCit2b2lkIHBsYXRmb3JtX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGVuZF9vZl9yYW0gPSAweDgwMDAwMDA7CisJdW5zaWduZWQgbG9uZyBhdmFpbF9yYW0gPSBlbmRfb2ZfcmFtIC0gKHVuc2lnbmVkIGxvbmcpX2VuZDsKKworCXNpbXBsZV9hbGxvY19pbml0KF9lbmQsIGF2YWlsX3JhbSwgMzIsIDY0KTsKKwllYm9ueV9pbml0KCh1OCAqKU9QRU5CSU9TX01BQ19CQVNFLAorCQkgICAodTggKikoT1BFTkJJT1NfTUFDX0JBU0UgKyBPUEVOQklPU19NQUNfT0ZGU0VUKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgppbmRleCA1Y2VkZDkwLi5kYTc3YWRjIDEwMDc1NQotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKQEAgLTEyOSw3ICsxMjksNyBAQAogcG1hY3xwc2VyaWVzfGNocnApCiAgICAgcGxhdGZvcm1vPSRvYmplY3Qvb2YubwogICAgIDs7Ci1wbWFjY29mZikKK2NvZmYpCiAgICAgcGxhdGZvcm1vPSRvYmplY3Qvb2YubwogICAgIGxkcz0kb2JqZWN0L3pJbWFnZS5jb2ZmLmxkcwogICAgIDs7CkBAIC0xNjMsMjAgKzE2MywxOSBAQAogCiB2bXo9IiR2bXokZ3ppcCIKIAotY2FzZSAiJHBsYXRmb3JtIiBpbgotdWJvb3R8Y3Vib290KikKLSAgICB2ZXJzaW9uPWAke0NST1NTfXN0cmluZ3MgIiRrZXJuZWwiIHwgZ3JlcCAnXkxpbnV4IHZlcnNpb24gWy0wLTkuXScgfCBcCi0JY3V0IC1kJyAnIC1mM2AKLSAgICBpZiBbIC1uICIkdmVyc2lvbiIgXTsgdGhlbgotCXZlcnNpb249Ii1uIExpbnV4LSR2ZXJzaW9uIgotICAgIGZpCi1lc2FjCisjIEV4dHJhY3Qga2VybmVsIHZlcnNpb24gaW5mb3JtYXRpb24sIHNvbWUgcGxhdGZvcm1zIHdhbnQgdG8gaW5jbHVkZQorIyBpdCBpbiB0aGUgaW1hZ2UgaGVhZGVyCit2ZXJzaW9uPWAke0NST1NTfXN0cmluZ3MgIiRrZXJuZWwiIHwgZ3JlcCAnXkxpbnV4IHZlcnNpb24gWy0wLTkuXScgfCBcCisgICAgY3V0IC1kJyAnIC1mM2AKK2lmIFsgLW4gIiR2ZXJzaW9uIiBdOyB0aGVuCisgICAgdWJvb3RfdmVyc2lvbj0iLW4gTGludXgtJHZlcnNpb24iCitmaQogCiBjYXNlICIkcGxhdGZvcm0iIGluCiB1Ym9vdCkKICAgICBybSAtZiAiJG9maWxlIgogICAgIG1raW1hZ2UgLUEgcHBjIC1PIGxpbnV4IC1UIGtlcm5lbCAtQyBnemlwIC1hIDAwMDAwMDAwIC1lIDAwMDAwMDAwIFwKLQkkdmVyc2lvbiAtZCAiJHZteiIgIiRvZmlsZSIKKwkkdWJvb3RfdmVyc2lvbiAtZCAiJHZteiIgIiRvZmlsZSIKICAgICBpZiBbIC16ICIkY2FjaGVpdCIgXTsgdGhlbgogCXJtIC1mICIkdm16IgogICAgIGZpCkBAIC0yMTIsMjUgKzIxMSwzMiBAQAogICAgIHJtICR0bXAKIGZpCiAKKyMgU29tZSBwbGF0Zm9ybXMgbmVlZCB0aGUgekltYWdlJ3MgZW50cnkgcG9pbnQgYW5kIGJhc2UgYWRkcmVzcworYmFzZT0weGAke0NST1NTfW5tICIkb2ZpbGUiIHwgZ3JlcCAnIF9zdGFydCQnIHwgY3V0IC1kJyAnIC1mMWAKK2VudHJ5PWAke0NST1NTfW9iamR1bXAgLWYgIiRvZmlsZSIgfCBncmVwICdec3RhcnQgYWRkcmVzcyAnIHwgY3V0IC1kJyAnIC1mM2AKKwogIyBwb3N0LXByb2Nlc3NpbmcgbmVlZGVkIGZvciBzb21lIHBsYXRmb3JtcwogY2FzZSAiJHBsYXRmb3JtIiBpbgogcHNlcmllc3xjaHJwKQogICAgICRvYmplY3QvYWRkbm90ZSAiJG9maWxlIgogICAgIDs7Ci1wbWFjY29mZikKLSAgICBlbnRyeT1gb2JqZHVtcCAtZiAiJG9maWxlIiB8IGdyZXAgJ15zdGFydCBhZGRyZXNzICcgfCBcCi0JY3V0IC1kJyAnIC1mM2AKK2NvZmYpCiAgICAgJHtDUk9TU31vYmpjb3B5IC1PIGFpeGNvZmYtcnM2MDAwIC0tc2V0LXN0YXJ0ICIkZW50cnkiICIkb2ZpbGUiCiAgICAgJG9iamVjdC9oYWNrLWNvZmYgIiRvZmlsZSIKICAgICA7OwogY3Vib290KikKLSAgICBiYXNlPWAke0NST1NTfW5tICIkb2ZpbGUiIHwgZ3JlcCAnIF9zdGFydCQnIHwgY3V0IC1kJyAnIC1mMWAKLSAgICBlbnRyeT1gJHtDUk9TU31vYmpkdW1wIC1mICIkb2ZpbGUiIHwgZ3JlcCAnXnN0YXJ0IGFkZHJlc3MgJyB8IFwKLSAgICAgICAgICAgY3V0IC1kJyAnIC1mM2AKICAgICBtdiAiJG9maWxlIiAiJG9maWxlIi5lbGYKICAgICAke0NST1NTfW9iamNvcHkgLU8gYmluYXJ5ICIkb2ZpbGUiLmVsZiAiJG9maWxlIi5iaW4KICAgICBnemlwIC1mIC05ICIkb2ZpbGUiLmJpbgogICAgIG1raW1hZ2UgLUEgcHBjIC1PIGxpbnV4IC1UIGtlcm5lbCAtQyBnemlwIC1hICIkYmFzZSIgLWUgIiRlbnRyeSIgXAotICAgICAgICAgICAgJHZlcnNpb24gLWQgIiRvZmlsZSIuYmluLmd6ICIkb2ZpbGUiCisgICAgICAgICAgICAkdWJvb3RfdmVyc2lvbiAtZCAiJG9maWxlIi5iaW4uZ3ogIiRvZmlsZSIKKyAgICA7OwordHJlZWJvb3QqKQorICAgIG12ICIkb2ZpbGUiICIkb2ZpbGUuZWxmIgorICAgICRvYmplY3QvbWt0cmVlICIkb2ZpbGUuZWxmIiAiJG9maWxlIiAiJGJhc2UiICIkZW50cnkiCisgICAgaWYgWyAteiAiJGNhY2hlaXQiIF07IHRoZW4KKwlybSAtZiAiJG9maWxlLmVsZiIKKyAgICBmaQorICAgIGV4aXQgMAogICAgIDs7CiBlc2FjCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCmluZGV4IDYwNjFlNWYuLjAyYzQyOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCkBAIC0xNjMsNyArMTYzLDYgQEAKIENPTkZJR19TUFVfQkFTRT15CiBDT05GSUdfQ0JFX1JBUz15CiBDT05GSUdfQ0JFX1RIRVJNPW0KLUNPTkZJR19DQkVfQ1BVRlJFUT1tCiBDT05GSUdfUFBDX05BVElWRT15CiBDT05GSUdfVURCR19SVEFTX0NPTlNPTEU9eQogQ09ORklHX1BQQ19VREJHX0JFQVQ9eQpAQCAtMTcyLDI0ICsxNzEsMTIgQEAKICMgQ09ORklHX1JUQVNfRVJST1JfTE9HR0lORyBpcyBub3Qgc2V0CiBDT05GSUdfUlRBU19QUk9DPXkKIENPTkZJR19SVEFTX0ZMQVNIPXkKLUNPTkZJR19QUENfUE1JPW0KKyMgQ09ORklHX1BQQ19QTUkgaXMgbm90IHNldAogQ09ORklHX01NSU9fTlZSQU09eQogIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0lORElSRUNUX0lPPXkKIENPTkZJR19HRU5FUklDX0lPTUFQPXkKLUNPTkZJR19DUFVfRlJFUT15Ci1DT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQotQ09ORklHX0NQVV9GUkVRX0RFQlVHPXkKLUNPTkZJR19DUFVfRlJFUV9TVEFUPXkKLSMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQotQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9eQotQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQotQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT15CiAjIENPTkZJR19DUFVfRlJFUV9QTUFDNjQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAogQ09ORklHX01QSUM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbGViX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxlYl9kZWZjb25maWcKaW5kZXggYTFmZTk3MS4uOTFiNjU3YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbGViX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsZWJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjNAotIyBUaHUgSmFuIDExIDIwOjU1OjMzIDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMQorIyBUdWUgTWF5ICA4IDEyOjMyOjE2IDIwMDcKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQpAQCAtNjAsNiArNjAsNyBAQAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldApAQCAtNzAsNiArNzEsNyBAQAogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKQEAgLTEzMiwxNSArMTM0LDI2IEBACiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BBU0VNSSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0NFTExFQj15CisjIENPTkZJR19QUENfUFMzIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQ0VMTD15CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19QUzMgaXMgbm90IHNldAotQ09ORklHX1BQQ19DRUxMRUI9eQorCisjCisjIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBvcHRpb25zCisjCitDT05GSUdfU1BVX0ZTPXkKK0NPTkZJR19TUFVfQkFTRT15CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX1BQQ19VREJHX0JFQVQ9eQorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19VM19EQVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldApAQCAtMTQ5LDE1ICsxNjIsNyBAQAogIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIG9wdGlvbnMKLSMKLUNPTkZJR19TUFVfRlM9eQotQ09ORklHX1NQVV9CQVNFPXkKLSMgQ09ORklHX0NCRV9SQVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTE4Myw3ICsxODgsNiBAQAogQ09ORklHX05PREVTX1NISUZUPTQKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTk5LDYgKzIwMyw3IEBACiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19BUkNIX01FTU9SWV9QUk9CRT15CiBDT05GSUdfTk9ERVNfU1BBTl9PVEhFUl9OT0RFUz15CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTIwNywxNCArMjEyLDE0IEBACiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQorIyBDT05GSUdfV0FOVF9ERVZJQ0VfVFJFRSBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCiAjIEJ1cyBvcHRpb25zCiAjCitDT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSU5ESVJFQ1RfUENJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKQEAgLTI0MCwxMyArMjQ1LDEzIEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMjYyLDcgKzI2Nyw3IEBACiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQpAQCAtMjgwLDYgKzI4NSw3IEBACiBDT05GSUdfSVBWNj15CiAjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQpAQCAtMzAyLDE3ICszMDgsMjEgQEAKICMKICMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiBDT05GSUdfSVBfTkZfUVVFVUU9bQorIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKIAogIwogIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAKICMKICMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCkBAIC0zNTIsNiArMzYyLDEzIEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTM2NSwxNiArMzgyLDEzIEBACiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKICMKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtMzg1LDYgKzM5OSw3IEBACiAjCiAjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAogIworIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0CiAKICMKICMgQmxvY2sgZGV2aWNlcwpAQCAtNDA0LDcgKzQxOSw2IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgogQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCkBAIC00NDMsNyArNDU3LDYgQEAKICMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKICMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFRE1BX1BDSV9BVVRPPXkKICMgQ09ORklHX0lERURNQV9PTkxZRElTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKQEAgLTQ1OCw2ICs0NzEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNDY4LDExICs0ODIsMTEgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFX0NFTExFQj15CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0NFTExFQj15CiAjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiAjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLUNPTkZJR19JREVETUFfQVVUTz15CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwpAQCAtNTQ2LDYgKzU2MCw3IEBACiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRVNQX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogCiAjCkBAIC01OTEsMTIgKzYwNiw3IEBACiAjIEkyTyBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBNYWNpbnRvc2ggZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BQ19FTVVNT1VTRUJUTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5ERkFSTSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNjUyLDE1ICs2NjIsMTggQEAKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogQ09ORklHX1NQSURFUl9ORVQ9eQogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVNFTUlfTUFDIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTY2OCw5ICs2ODEsMTAgQEAKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMgV2lyZWxlc3MgTEFOCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIAogIwogIyBXYW4gaW50ZXJmYWNlcwpAQCAtNzcwLDYgKzc4NCw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX1RYWDk9eQogQ09ORklHX0hBU19UWFg5X1NFUklBTD15CitDT05GSUdfU0VSSUFMX1RYWDlfTlJfVUFSVFM9MwogQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX1RYWDlfU1REU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldApAQCAtODkxLDYgKzkwNiwxMSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTkwNCw3ICs5MjQsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiAKQEAgLTkxMyw3ICs5MzMsNiBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtOTI0LDYgKzk0MywxNSBAQAogIyBISUQgRGV2aWNlcwogIwogQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CiAKICMKICMgVVNCIHN1cHBvcnQKQEAgLTkzOCw5ICs5NjYsOCBAQAogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCiAjCkBAIC05NTMsNiArOTgwLDcgQEAKIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU89eQogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CkBAIC05ODksMTAgKzEwMTcsNiBAQAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotQ09ORklHX1VTQl9ISURERVY9eQogIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CkBAIC0xMDA1LDYgKzEwMjksNyBAQAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwpAQCAtMTA0Miw2ICsxMDY3LDcgQEAKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldApAQCAtMTA1Miw2ICsxMDc4LDcgQEAKICMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEwOSw2ICsxMTM2LDEwIEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCiAjIFZpcnR1YWxpemF0aW9uCiAjCiAKQEAgLTEyOTMsNiArMTMyNCw4IEBACiAjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgogIwogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQ19GQVNUIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xMzA1LDcgKzEzMzgsOCBAQAogQ09ORklHX1pMSUJfSU5GTEFURT1tCiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KIENPTkZJR19QTElTVD15Ci1DT05GSUdfSU9NQVBfQ09QWT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtMTMyMywxNSArMTM1NywxNiBAQAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTEzNDEsOCArMTM3NiwxMCBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogQ09ORklHX0RFQlVHR0VSPXkKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQpAQCAtMTM1Niw2ICsxMzkzLDcgQEAKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX01BUExFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19JU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19QQVNfUkVBTE1PREUgaXMgbm90IHNldAogQ09ORklHX1BQQ19FQVJMWV9ERUJVR19CRUFUPXkKIAogIwpAQCAtMTM4NSw4ICsxNDIzLDEwIEBACiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9bQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KQEAgLTE0MDEsNiArMTQ0MSw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19URVNUPW0KIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZWJvbnlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZWJvbnlfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYjk2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lYm9ueV9kZWZjb25maWcKQEAgLTAsMCArMSw5MDUgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMQorIyBGcmkgTWF5ICA0IDEzOjQ3OjA4IDIwMDcKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfQ0xBU1NJQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKK0NPTkZJR180NHg9eQorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSPXkKK0NPTkZJR180eHg9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19QVEVfNjRCSVQ9eQorQ09ORklHX1BIWVNfNjRCSVQ9eQorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19TTEFCPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfRUJPTlk9eQorQ09ORklHXzQ0MEdQPXkKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTTIgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfTUFUSF9FTVVMQVRJT049eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKK0NPTkZJR19ERVZJQ0VfVFJFRT0iZWJvbnkuZHRzIgorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0lfQkUgaXMgbm90IHNldAorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfSElHSE1FTV9TVEFSVD0weGZlMDAwMDAwCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4ODAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorQ09ORklHX0JPT1RfTE9BRD0weDAxMDAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworQ09ORklHX0NPTk5FQ1RPUj15CitDT05GSUdfUFJPQ19FVkVOVFM9eQorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQz15CitDT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKK0NPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0CitDT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCitDT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAorIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisKKyMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjCisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIERNQSBFbmdpbmUgc3VwcG9ydAorIworIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKworIworIyBETUEgRGV2aWNlcworIworCisjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0NfRkFTVCBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CisKKyMKKyMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9URVhUX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2hvbGx5X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2hvbGx5X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTYzM2I5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaG9sbHlfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA3MCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIxCisjIFNhdCBNYXkgIDUgMTE6MDI6MzUgMjAwNworIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfNnh4PXkKK0NPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGxheWVyCisjCitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRDZ4eD15CisjIENPTkZJR19BUFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfTElOS1NUQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTVBDNzQ0OEhQQzIgaXMgbm90IHNldAorQ09ORklHX1BQQ19IT0xMWT15CitDT05GSUdfVFNJMTA4X0JSSURHRT15CitDT05GSUdfTVBJQz15CitDT05GSUdfTVBJQ19XRUlSRD15CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CisjIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorIyBDT05GSUdfV0FOVF9ERVZJQ0VfVFJFRSBpcyBub3Qgc2V0CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CisjIENPTkZJR19QUENfSU5ESVJFQ1RfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CisjCisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weDgwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FU1BfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1ZFTkRPUl8zQ09NPXkKK0NPTkZJR19WT1JURVg9eQorIyBDT05GSUdfVFlQSE9PTiBpcyBub3Qgc2V0CisKKyMKKyMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX1RTSTEwOF9FVEg9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz15CisjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKworIworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIEVuZ2luZSBzdXBwb3J0CisjCisjIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKKworIworIyBETUEgQ2xpZW50cworIworCisjCisjIERNQSBEZXZpY2VzCisjCisKKyMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0NfRkFTVCBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorCisjCisjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdHRVI9eQorQ09ORklHX1hNT049eQorQ09ORklHX1hNT05fREVGQVVMVD15CitDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCmluZGV4IDVmYzg3NDQuLmFmMjUxMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjNQotIyBNb24gSmFuIDIyIDIyOjE2OjQ0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi1yYzEKKyMgTW9uIE1heSAxNCAxNDoyNzo0NiAyMDA3CiAjCiBDT05GSUdfUFBDNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTQwLDYgKzQwLDcgQEAKICMgQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTMyCkBAIC02MCw2ICs2MSw3IEBACiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldApAQCAtNjgsOSArNzAsMTEgQEAKIENPTkZJR19BVURJVFNZU0NBTEw9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQpAQCAtODUsMTQgKzg5LDE5IEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMTMxLDE1ICsxNDAsMzAgQEAKICMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQVVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAorQ09ORklHX0xQQVJDRkc9eQogQ09ORklHX1BQQ19JU0VSSUVTPXkKKworIworIyBpU2VyaWVzIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfVklPREFTRD15CitDT05GSUdfVklPQ0Q9bQorQ09ORklHX1ZJT1RBUEU9bQorQ09ORklHX1ZJT1BBVEg9eQogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QQVNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExFQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUFMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSUJNX0NFTExfQkxBREUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1BTMyBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19VM19EQVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldApAQCAtMTQ5LDggKzE3Myw3IEBACiBDT05GSUdfUFBDX0lORElSRUNUX0lPPXkKIENPTkZJR19HRU5FUklDX0lPTUFQPXkKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTE3Miw3ICsxOTUsNiBAQAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKLUNPTkZJR19MUEFSQ0ZHPXkKICMgQ09ORklHX05VTUEgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CkBAIC0xODcsMzQgKzIwOSwzNCBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCisjIENPTkZJR19QUENfSEFTX0hBU0hfNjRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKKyMgQ09ORklHX1dBTlRfREVWSUNFX1RSRUUgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwogIyBCdXMgb3B0aW9ucwogIworQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKICMKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIwogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwMDAwMDAwMDAKIApAQCAtMjI2LDE0ICsyNDgsMTUgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQogQ09ORklHX1hGUk1fU1VCX1BPTElDWT15CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI3NSw4ICsyOTgsNiBAQAogIwogIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfTkZfQ09OTlRSQUNLPW0KICMgQ09ORklHX05GX0NUX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKQEAgLTI4OCw2ICszMDksNyBAQAogQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQogIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCBpcyBub3Qgc2V0CiBDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KQEAgLTI5OCw3ICszMjAsOSBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKQEAgLTM0MCw3ICszNjQsNiBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KIENPTkZJR19ORl9OQVQ9bQogQ09ORklHX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KQEAgLTM3Myw3ICszOTYsMTIgQEAKICMKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQogCiAjCiAjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQpAQCAtNDA1LDcgKzQzMywxNiBAQAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDE4LDE2ICs0NTUsMTMgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKICMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgogIwogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCiAjIENPTkZJR19NVEQgaXMgbm90IHNldAogCiAjCkBAIC00MzgsNiArNDcyLDcgQEAKICMKICMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CiAjCisjIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKIAogIwogIyBCbG9jayBkZXZpY2VzCkBAIC00NTYsMTUgKzQ5MSwxNiBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgogQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwogIworIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfQkxJTksgaXMgbm90IHNldAogCiAjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKQEAgLTQ5OCw2ICs1MzQsNyBAQAogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KIAogIwogIyBTQ1NJIFRyYW5zcG9ydHMKQEAgLTU0NCwxMSArNTgxLDggQEAKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FU1BfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCkBAIC01NzAsNiArNjA0LDcgQEAKIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1pFUk89bQogIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKIAogIwogIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CkBAIC01ODIsMTggKzYxNywxNCBAQAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAKICMKICMgSTJPIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE1hY2ludG9zaCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkRGQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC02MDgsMTAgKzYzOSw2IEBACiAjIEFSQ25ldCBkZXZpY2VzCiAjCiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIAogIwpAQCAtNjQ4LDEwICs2NzUsOCBAQAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfQUNFTklDPW0KICMgQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0kgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NzAsMTUgKzY5NSwxNyBAQAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBU0VNSV9NQUMgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NTFg0X0RFQlVHPXkKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTY4OSwxMyArNzE2LDEwIEBACiAjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjIFdpcmVsZXNzIExBTgogIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfSVNFUklFU19WRVRIPXkKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldApAQCAtNzE1LDcgKzczOSw2IEBACiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogQ09ORklHX05FVENPTlNPTEU9eQogQ09ORklHX05FVFBPTEw9eQotQ09ORklHX05FVFBPTExfUlg9eQogQ09ORklHX05FVFBPTExfVFJBUD15CiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CiAKQEAgLTc1Myw2ICs3NzYsNyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCkBAIC03NjUsNiArNzg5LDEwIEBACiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTc4MSwyMCArODA5LDE3IEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorQ09ORklHX0hWQ19EUklWRVI9eQorQ09ORklHX0hWQ19JU0VSSUVTPXkKIAogIwogIyBJUE1JCiAjCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQogIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKQEAgLTgwNywxMCArODMyLDcgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCitDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCkBAIC04MjMsMzAgKzg0NSwzOSBAQAogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAKICMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi1DT05GSUdfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogCiAjCiAjIFNvdW5kCkBAIC04NzQsMTAgKzkwNSw2IEBACiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIwpAQCAtOTIxLDEwICs5NDgsNiBAQAogIwogCiAjCi0jIFZpcnR1YWxpemF0aW9uCi0jCi0KLSMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC05NzksNyArMTAwMiw2IEBACiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQotQ09ORklHX1pJU09GU19GUz15CiBDT05GSUdfVURGX0ZTPW0KIENPTkZJR19VREZfTkxTPXkKIApAQCAtMTA0NSw2ICsxMDY3LDcgQEAKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKIENPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMTE0LDE4ICsxMTM3LDkgQEAKICMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCiAjCiBDT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgaVNlcmllcyBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX1ZJT0NPTlM9eQotQ09ORklHX1ZJT0RBU0Q9eQotQ09ORklHX1ZJT0NEPW0KLUNPTkZJR19WSU9UQVBFPW0KLUNPTkZJR19WSU9QQVRIPXkKKyMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQ19GQVNUIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xMTMzLDYgKzExNDcsNyBAQAogQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CkBAIC0xMTQyLDcgKzExNTcsOSBAQAogQ09ORklHX1RFWFRTRUFSQ0hfQk09bQogQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KIENPTkZJR19QTElTVD15Ci1DT05GSUdfSU9NQVBfQ09QWT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtMTE2MCwxNSArMTE3NywxNSBAQAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMTc4LDggKzExOTUsMTAgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAogQ09ORklHX0lSUVNUQUNLUz15CiAjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKQEAgLTEyMTIsOCArMTIzMSwxMSBAQAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KQEAgLTEyMjgsNiArMTI1MCw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19URVNUPW0KIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODMyeF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODMyeF9tZHNfZGVmY29uZmlnCmluZGV4IGUxYjM2ZGUuLjgzMTkyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzMnhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzJ4X21kc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmM1Ci0jIFR1ZSBKYW4gMzAgMTQ6Mjc6MjUgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIxLXJjNQorIyBNb24gQXByICA5IDE2OjA5OjE2IDIwMDcKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CkBAIC0zNCw5ICszNCw5IEBACiBDT05GSUdfUFBDXzgzeHg9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR182eHg9eQogQ09ORklHXzgzeHg9eQpAQCAtNjMsNiArNjMsNyBAQAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldApAQCAtNzEsNiArNzIsNyBAQAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKQEAgLTEyMywxNiArMTI1LDE3IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgogQ09ORklHX1FVSUNDX0VOR0lORT15Ci1DT05GSUdfUFBDX0dFTjU1MD15CiAjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydAogIworIyBDT05GSUdfTVBDODMxM19SREIgaXMgbm90IHNldAogQ09ORklHX01QQzgzMnhfTURTPXkKLSMgQ09ORklHX01QQzgzNHhfU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNjBFX1BCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTVBDODMyeD15CiAjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKIApAQCAtMTYzLDYgKzE2Niw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldApAQCAtMTcyLDYgKzE3Niw3IEBACiAjCiAjIEJ1cyBvcHRpb25zCiAjCitDT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CiAjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CkBAIC0yMjAsNiArMjI1LDcgQEAKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zMjQsNiArMzMwLDcgQEAKICMKICMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CiAjCisjIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKIAogIwogIyBCbG9jayBkZXZpY2VzCkBAIC0zNDIsNyArMzQ5LDYgQEAKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKIENPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIApAQCAtNDgyLDcgKzQ4OCwyMSBAQAogIwogIyBQSFkgZGV2aWNlIHN1cHBvcnQKICMKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfREFWSUNPTV9QSFk9eQorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNTI0LDExICs1NDQsMTMgQEAKICMgQ09ORklHX1VHRVRIX0ZJTFRFUklORyBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1PTkQgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldApAQCAtNjIxLDYgKzY0Myw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTY5MSw2ICs3MTQsNyBAQAogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFTRU1JIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldApAQCAtNzM4LDYgKzc2Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CkBAIC03NzksNiArODA0LDExIEBACiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKQEAgLTc5MSwxMCArODIxLDkgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTgwNSw2ICs4MzQsNyBAQAogIyBISUQgRGV2aWNlcwogIwogQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFVTQiBzdXBwb3J0CkBAIC04NjksNiArODk5LDEwIEBACiAjCiAKICMKKyMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIworCisjCiAjIFZpcnR1YWxpemF0aW9uCiAjCiAKQEAgLTk5NSwxMSArMTAyOSw3IEBACiAjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgogIwogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBRRSBPcHRpb25zCi0jCi1DT05GSUdfVUNDX1NMT1c9eQorIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAogQ09ORklHX1VDQ19GQVNUPXkKIENPTkZJR19VQ0M9eQogCkBAIC0xMDEyLDcgKzEwNDIsOCBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfUExJU1Q9eQotQ09ORklHX0lPTUFQX0NPUFk9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTEwMzIsNyArMTA2Myw2IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9URVhUX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjEsOCArMTA5MSwxMCBAQAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKQEAgLTEwNzYsNiArMTEwOCw3IEBACiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzJ4X3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzJ4X3JkYl9kZWZjb25maWcKaW5kZXggNTZmYzBhOC4uNGE0ZGE4NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODMyeF9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzMnhfcmRiX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMS1yYzMKLSMgTW9uIE1hciAxMiAxNzozMjoxOSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjEtcmM1CisjIE1vbiBBcHIgIDkgMTY6MTI6NDMgMjAwNwogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKQEAgLTEyNSw3ICsxMjUsNiBAQAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKIENPTkZJR19RVUlDQ19FTkdJTkU9eQotQ09ORklHX1BQQ19HRU41NTA9eQogIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC00OTAsNyArNDg5LDIxIEBACiAjCiAjIFBIWSBkZXZpY2Ugc3VwcG9ydAogIwotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19JQ1BMVVNfUEhZPXkKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC0xMjAwLDExICsxMjEzLDcgQEAKICMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCiAjCiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFFFIE9wdGlvbnMKLSMKLUNPTkZJR19VQ0NfU0xPVz15CisjIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0ZBU1Q9eQogQ09ORklHX1VDQz15CiAKQEAgLTEyMzgsNyArMTI0Nyw2IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9URVhUX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNnhfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNnhfbWRzX2RlZmNvbmZpZwppbmRleCA4ZWI0NzVjLi45MjFhMTUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzZ4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM2eF9tZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFNhdCBGZWIgMTcgMTA6MDk6MjYgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIxLXJjNQorIyBNb24gQXByICA5IDE2OjE0OjA1IDIwMDcKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CkBAIC03Miw2ICs3Miw3IEBACiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQpAQCAtMTI0LDcgKzEyNSw2IEBACiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgogQ09ORklHX1FVSUNDX0VOR0lORT15Ci1DT05GSUdfUFBDX0dFTjU1MD15CiAjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTEzMiw2ICsxMzIsNyBAQAogIwogIyBDT05GSUdfTVBDODMxM19SREIgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODMyeF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODM0eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODM0eF9JVFggaXMgbm90IHNldAogQ09ORklHX01QQzgzNnhfTURTPXkKQEAgLTMyOCw2ICszMjksNyBAQAogIwogIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKICMKKyMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAogCiAjCiAjIEJsb2NrIGRldmljZXMKQEAgLTM0Niw3ICszNDgsNiBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAogQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCkBAIC00ODYsNyArNDg3LDIxIEBACiAjCiAjIFBIWSBkZXZpY2Ugc3VwcG9ydAogIwotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC01MjgsNiArNTQzLDcgQEAKICMgQ09ORklHX1VHRVRIX0ZJTFRFUklORyBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1PTkQgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKQEAgLTc0NSw2ICs3NjEsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldApAQCAtNzg2LDYgKzgwMywxMSBAQAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC03OTgsMTAgKzgyMCw5IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLUNPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC0xMDA3LDExICsxMDI4LDcgQEAKICMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCiAjCiAjIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIFFFIE9wdGlvbnMKLSMKLUNPTkZJR19VQ0NfU0xPVz15CisjIENPTkZJR19VQ0NfU0xPVyBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0ZBU1Q9eQogQ09ORklHX1VDQz15CiAKQEAgLTEwNDUsNyArMTA2Miw2IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9URVhUX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnCmluZGV4IDk3YTU3ZTkuLjA1MDdjOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzYKLSMgVGh1IEZlYiAgMSAyMjo1NDoxNSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjEKKyMgTW9uIE1heSAxNCAxMjo1NTowNCAyMDA3CiAjCiBDT05GSUdfUFBDNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTIzLDcgKzIzLDcgQEAKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CiBDT05GSUdfUFBDX09GPXkKIENPTkZJR19QUENfVURCR18xNjU1MD15Ci1DT05GSUdfR0VORVJJQ19UQlNZTkM9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKQEAgLTM5LDYgKzM5LDcgQEAKICMgQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0kgaXMgbm90IHNldAogQ09ORklHX0FMVElWRUM9eQogQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfTU1fU0xJQ0VTPXkKICMgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcgaXMgbm90IHNldAogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0yCkBAIC01OSwxNSArNjAsMTggQEAKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKICMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQpAQCAtODIsMTQgKzg2LDE5IEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMTI3LDM5ICsxMzYsMzggQEAKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiAjIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUFNFUklFUz15CisjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogQ09ORklHX1BQQ19QQVNFTUk9eQotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUFMzIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkFUSVZFPXkKLSMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19YSUNTPXkKLSMgQ09ORklHX1UzX0RBUlQgaXMgbm90IHNldAotQ09ORklHX1BQQ19SVEFTPXkKLUNPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkc9eQotQ09ORklHX1JUQVNfUFJPQz15Ci0jIENPTkZJR19SVEFTX0ZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotQ09ORklHX0lCTVZJTz15Ci0jIENPTkZJR19JQk1FQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQogCiAjCiAjIFBBIFNlbWkgUFdSZmljaWVudCBvcHRpb25zCiAjCiBDT05GSUdfUFBDX1BBU0VNSV9JT01NVT15CitDT05GSUdfUFBDX1BBU0VNSV9NRElPPXkKKyMgQ09ORklHX1BQQ19DRUxMRUIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BTMyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX05BVElWRT15CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19VM19EQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMTc3LDIwICsxODUsMTQgQEAKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiBDT05GSUdfSU9NTVVfVk1FUkdFPXkKLSMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfU1BMUEFSIGlzIG5vdCBzZXQKLUNPTkZJR19FRUg9eQotIyBDT05GSUdfU0NBTkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MUEFSQ0ZHIGlzIG5vdCBzZXQKICMgQ09ORklHX05VTUEgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMjAxLDI0ICsyMDMsMjggQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorIyBDT05GSUdfUFBDX0hBU19IQVNIXzY0SyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTlRfREVWSUNFX1RSRUUgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwogIyBCdXMgb3B0aW9ucwogIworQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0k4MjU5PXkKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMjM3LDEwICsyNDMsNiBAQAogIyBDT05GSUdfWUVOVEEgaXMgbm90IHNldAogIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKICMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIwogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwMDAwMDAwMDAKIApAQCAtMjUyLDE0ICsyNTQsMTUgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMzEsNyArMzM0LDE2IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNDQsMTYgKzM1NiwxMyBAQAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwogIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCiAjCiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKQEAgLTM4OSw3ICszOTgsNiBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCkBAIC00MTIsMTcgKzQyMCwxMyBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAKICMKICMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CkBAIC00MzIsNiArNDM2LDcgQEAKICMKICMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CiAjCisjIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKIAogIwogIyBCbG9jayBkZXZpY2VzCkBAIC00NTEsMTUgKzQ1NiwxNiBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAogQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwogIworIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfQkxJTksgaXMgbm90IHNldAogCiAjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKQEAgLTQ3NCwyMCArNDgwLDIyIEBACiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKIENPTkZJR19JREVESVNLX01VTFRJX01PREU9eQogIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFU0NTST15CiBDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCiAjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKQEAgLTUxNyw2ICs1MjUsNyBAQAogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQogIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCiAKICMKICMgU0NTSSBUcmFuc3BvcnRzCkBAIC01NTAsNyArNTU5LDYgQEAKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JQk1WU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKQEAgLTU2Myw2ICs1NzEsNyBAQAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VTUF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKIAogIwpAQCAtNTc4LDcgKzU4Nyw3IEBACiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotQ09ORklHX1NBVEFfU1ZXPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX01WPXkKICMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldApAQCAtNTg2LDE2ICs1OTUsMTggQEAKICMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX1NJTD15CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TSUwyND15CiAjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CkBAIC02MDcsNiArNjE4LDcgQEAKICMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CkBAIC02NDQsMjcgKzY1NiwyNiBAQAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTEzOTQ9eQogCiAjCiAjIFN1YnN5c3RlbSBPcHRpb25zCiAjCiAjIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTRfT1VJX0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0X0VYVFJBX0NPTkZJR19ST01TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0X0VYUE9SVF9GVUxMX0FQSSBpcyBub3Qgc2V0CiAKICMKLSMgRGV2aWNlIERyaXZlcnMKKyMgQ29udHJvbGxlcnMKICMKIENPTkZJR19JRUVFMTM5NF9QQ0lMWU5YPXkKIENPTkZJR19JRUVFMTM5NF9PSENJMTM5ND15CiAKICMKLSMgUHJvdG9jb2wgRHJpdmVycworIyBQcm90b2NvbHMKICMKICMgQ09ORklHX0lFRUUxMzk0X1ZJREVPMTM5NCBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTEzOTRfU0JQMj15CisjIENPTkZJR19JRUVFMTM5NF9FVEgxMzk0X1JPTV9FTlRSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NF9FVEgxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0X0RWMTM5NCBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTEzOTRfUkFXSU89eQpAQCAtNjczLDEyICs2ODQsNyBAQAogIyBJMk8gZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAotIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTY5Nyw3ICs3MDMsMjAgQEAKICMKICMgUEhZIGRldmljZSBzdXBwb3J0CiAjCi0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPXkKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC03MTQsNyArNzMzLDYgQEAKICMKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNVkVUSD15CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKQEAgLTcyMiw3ICs3NDAsNyBAQAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBSTzEwMD15CisjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKQEAgLTczMyw2ICs3NTEsNyBAQAogIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTc1NCwxNSArNzczLDIwIEBACiBDT05GSUdfVElHT04zPXkKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CitDT05GSUdfUEFTRU1JX01BQz15CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorQ09ORklHX01MWDRfREVCVUc9eQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNzcwLDkgKzc5NCwyMCBAQAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBXaXJlbGVzcyBMQU4KICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC04MzQsOCArODY5LDEwIEBACiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCkBAIC04NzAsMjkgKzkwNywyMSBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9JQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NAotQ09ORklHX0hWQ19EUklWRVI9eQotQ09ORklHX0hWQ19DT05TT0xFPXkKLUNPTkZJR19IVkNfUlRBUz15Ci0jIENPTkZJR19IVkNTIGlzIG5vdCBzZXQKIAogIwogIyBJUE1JCiAjCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKK0NPTkZJR19IV19SQU5ET01fUEFTRU1JPXkKIENPTkZJR19HRU5fUlRDPXkKIENPTkZJR19HRU5fUlRDX1g9eQotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BR1AgaXMgbm90IHNldApAQCAtOTEyLDExICs5NDEsOSBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKK0NPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIAogIwpAQCAtOTQwLDE2ICs5NjcsMTggQEAKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorQ09ORklHX0kyQ19QQVNFTUk9eQogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKQEAgLTk2Myw3ICs5OTIsNyBAQAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfREVCVUdfQlVTPXkKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCkBAIC05NzYsMTYgKzEwMDUsMTQgQEAKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwogQ09ORklHX0hXTU9OPXkKIENPTkZJR19IV01PTl9WSUQ9eQogIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldApAQCAtMTAwOCw2ICsxMDM1LDcgQEAKIENPTkZJR19TRU5TT1JTX0xNOTA9eQogIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldApAQCAtMTAyNywyOSArMTA1NSw1MCBAQAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKworIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQogIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FTVEFURT15CiBDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCX0REQz15CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NQUNNT0RFUz15Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorQ09ORklHX0ZCX0JBQ0tMSUdIVD15CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKIENPTkZJR19GQl9USUxFQkxJVFRJTkc9eQorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiAjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CkBAIC0xMDYwLDI4ICsxMTA5LDI3IEBACiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTlZJRElBPXkKIENPTkZJR19GQl9OVklESUFfSTJDPXkKLUNPTkZJR19GQl9SSVZBPXkKLUNPTkZJR19GQl9SSVZBX0kyQz15Ci0jIENPTkZJR19GQl9SSVZBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9NQVRST1g9eQotQ09ORklHX0ZCX01BVFJPWF9NSUxMRU5JVU09eQotQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRT15Ci1DT05GSUdfRkJfTUFUUk9YX0c9eQotQ09ORklHX0ZCX01BVFJPWF9JMkM9eQotQ09ORklHX0ZCX01BVFJPWF9NQVZFTj15Ci1DT05GSUdfRkJfTUFUUk9YX01VTFRJSEVBRD15CisjIENPTkZJR19GQl9OVklESUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZCX05WSURJQV9CQUNLTElHSFQ9eQorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAogQ09ORklHX0ZCX1JBREVPTj15CiBDT05GSUdfRkJfUkFERU9OX0kyQz15CitDT05GSUdfRkJfUkFERU9OX0JBQ0tMSUdIVD15CiAjIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKQEAgLTEwOTcsMTUgKzExNDUsMTAgQEAKICMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKIENPTkZJR19GT05UXzh4OD15CiBDT05GSUdfRk9OVF84eDE2PXkKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19MT0dPPXkKIENPTkZJR19MT0dPX0xJTlVYX01PTk89eQogQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQogQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC0xMjExLDYgKzEyNTQsNyBAQAogIwogQ09ORklHX1NORF9VU0JfQVVESU89eQogQ09ORklHX1NORF9VU0JfVVNYMlk9eQorIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGRldmljZXMKQEAgLTEyMTksNiArMTI2MywxMSBAQAogIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0CiAKICMKKyMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAorIworIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisKKyMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKQEAgLTEyMjcsNiArMTI3NiwxNSBAQAogIyBISUQgRGV2aWNlcwogIwogQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKIAogIwogIyBVU0Igc3VwcG9ydApAQCAtMTI0MSw3ICsxMjk5LDcgQEAKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwogIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci0jIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCkBAIC0xMjUyLDkgKzEzMTAsMTUgQEAKICMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKIENPTkZJR19VU0JfU0w4MTFfSENEPXkKQEAgLTEyODksNDEgKzEzNTMsMTEgQEAKIENPTkZJR19VU0JfTElCVVNVQUw9eQogCiAjCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotCi0jCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTEzNDQsNiArMTM3OCw3IEBACiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKQEAgLTEzNTQsNiArMTM4OSw3IEBACiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNjQsMTAgKzE0MDAsNiBAQAogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKQEAgLTE0MDgsMjQgKzE0NDAsMzcgQEAKIENPTkZJR19SVENfSU5URl9QUk9DPXkKIENPTkZJR19SVENfSU5URl9ERVY9eQogIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgUlRDIGRyaXZlcnMKKyMgSTJDIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0RTMTMwNz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKworIwogIyBETUEgRW5naW5lIHN1cHBvcnQKICMKICMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldApAQCAtMTQzOSwxMCArMTQ4NCw2IEBACiAjCiAKICMKLSMgVmlydHVhbGl6YXRpb24KLSMKLQotIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTE0NjYsNyArMTUwNyw4IEBACiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz15CkBAIC0xNTM4LDYgKzE1ODAsNyBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTU2Nyw2ICsxNjEwLDcgQEAKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiAKICMKICMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKQEAgLTE2MTYsNiArMTY2MCw4IEBACiAjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgogIwogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQ19GQVNUIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xNjIzLDEwICsxNjY5LDEzIEBACiBDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPXkKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19QTElTVD15Ci1DT05GSUdfSU9NQVBfQ09QWT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtMTY0NSwzMiArMTY5NCwzNCBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX0ZPUkNFRF9JTkxJTklORyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdHRVI9eQogQ09ORklHX1hNT049eQogQ09ORklHX1hNT05fREVGQVVMVD15CiBDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CiAjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotQ09ORklHX0JPT1RYX1RFWFQ9eQorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xNzAwLDggKzE3NTEsMTEgQEAKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKQEAgLTE3MTUsNiArMTc2OSw3IEBACiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzBhNzMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE0NDIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMQorIyBXZWQgTWF5ICA5IDA5OjQyOjQ2IDIwMDcKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfNnh4PXkKK0NPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX0NPTkZJR19DSEVDS19DQUNIRV9DT0hFUkVOQ1k9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGxheWVyCisjCitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ2eHg9eQorIyBDT05GSUdfQVBVUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJTktTVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzc0NDhIUEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19IT0xMWSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1BSUE1DMjgwMD15CitDT05GSUdfTVY2NFg2MD15CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKK0NPTkZJR19ISUdITUVNPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfV0FOVF9ERVZJQ0VfVFJFRT15CitDT05GSUdfREVWSUNFX1RSRUU9InBycG1jMjgwMC5kdHMiCitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CisjIENPTkZJR19QUENfSU5ESVJFQ1RfUENJX0JFIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHg4MDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisjIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfQkxJTksgaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9eQorQ09ORklHX0JMS19ERVZfSURFUENJPXkKKyMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfT05MWURJU0sgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXPXkKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKKyMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FU1BfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorQ09ORklHX1NBVEFfTVY9eQorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlM9eQorIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkRGQVJNIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKK0NPTkZJR184MTM5VE9PPXkKKyMgQ09ORklHXzgxMzlUT09fUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT09fVFVORV9UV0lTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT09fODEyOSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5X09MRF9SWF9SRVNFVCBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorQ09ORklHX0UxMDAwPXkKKyMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19NVjY0M1hYX0VUSD15CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX01QU0M9eQorQ09ORklHX1NFUklBTF9NUFNDX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVY2NFhYWD15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX000MVQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisjIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIworIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIworCisjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTUFYNjkwMD15CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworCisjCisjIERNQSBFbmdpbmUgc3VwcG9ydAorIworIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKworIworIyBETUEgRGV2aWNlcworIworCisjCisjIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMKKworIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQ19GQVNUIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CisKKyMKKyMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKaW5kZXggMDM0NWEyYy4uNDc3OTM0NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjNgotIyBUaHUgSmFuIDI1IDEzOjM1OjM0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMQorIyBGcmkgTWF5IDExIDEwOjE2OjI3IDIwMDcKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQpAQCAtNDAsNiArNDAsNyBAQAogIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfQUxUSVZFQz15CiBDT05GSUdfUFBDX1NURF9NTVU9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKQEAgLTYwLDE1ICs2MSwxOCBAQAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQpAQCAtODUsMTIgKzg5LDEzIEBACiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTEzMSwxMyArMTM2LDM2IEBACiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BBU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTEVCIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfUFMzPXkKKworIworIyBQUzMgUGxhdGZvcm0gT3B0aW9ucworIworIyBDT05GSUdfUFMzX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19QUzNfSFRBQl9TSVpFPTIwCisjIENPTkZJR19QUzNfRFlOQU1JQ19ETUEgaXMgbm90IHNldAorQ09ORklHX1BTM19VU0VfTFBBUl9BRERSPXkKK0NPTkZJR19QUzNfVlVBUlQ9eQorQ09ORklHX1BTM19QUzNBVj15CitDT05GSUdfUFMzX1NZU19NQU5BR0VSPXkKIENPTkZJR19QUENfQ0VMTD15CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUFMzPXkKKworIworIyBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgb3B0aW9ucworIworQ09ORklHX1NQVV9GUz15CitDT05GSUdfU1BVX0JBU0U9eQorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAogIyBDT05GSUdfVTNfREFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKQEAgLTE0NiwyNCArMTc0LDcgQEAKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotCi0jCi0jIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBvcHRpb25zCi0jCi1DT05GSUdfU1BVX0ZTPXkKLUNPTkZJR19TUFVfQkFTRT15Ci0jIENPTkZJR19DQkVfUkFTIGlzIG5vdCBzZXQKLQotIwotIyBQUzMgUGxhdGZvcm0gT3B0aW9ucwotIwotQ09ORklHX1BTM19IVEFCX1NJWkU9MjAKLSMgQ09ORklHX1BTM19EWU5BTUlDX0RNQSBpcyBub3Qgc2V0Ci1DT05GSUdfUFMzX1VTRV9MUEFSX0FERFI9eQotQ09ORklHX1BTM19WVUFSVD15Ci1DT05GSUdfUFMzX1BTM0FWPXkKKyMgQ09ORklHX0NQTTIgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBvcHRpb25zCkBAIC0xNzksMTAgKzE5MCwxMCBAQAogIyBDT05GSUdfUFJFRU1QVF9CS0wgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiAjIENPTkZJR19JT01NVV9WTUVSR0UgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19LRVhFQz15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKQEAgLTIwMywzMyArMjE0LDMxIEBACiBDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19BUkNIX01FTU9SWV9QUk9CRT15Ci1DT05GSUdfUFBDXzY0S19QQUdFUz15CisjIENPTkZJR19QUENfSEFTX0hBU0hfNjRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0icm9vdD0vZGV2L3NkYTEgaXA9ZGhjcCIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTlRfREVWSUNFX1RSRUUgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwogIyBCdXMgb3B0aW9ucwogIworQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAogIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CiAjCiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCiAKICMKQEAgLTI0MCwxMCArMjQ5LDEzIEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtMjYxLDcgKzI3Myw3IEBACiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldApAQCAtMjcwLDkgKzI4MiwyMyBAQAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD15CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIApAQCAtMzEzLDggKzMzOSwzNCBAQAogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19CVD1tCitDT05GSUdfQlRfTDJDQVA9bQorQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfUkZDT01NPW0KKyMgQ09ORklHX0JUX1JGQ09NTV9UVFkgaXMgbm90IHNldAorIyBDT05GSUdfQlRfQk5FUCBpcyBub3Qgc2V0CitDT05GSUdfQlRfSElEUD1tCisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfQlRfSENJVVNCPW0KK0NPTkZJR19CVF9IQ0lVU0JfU0NPPXkKKyMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTMyNywxNiArMzc5LDEzIEBACiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKICMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgogIwogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCiAjIENPTkZJR19NVEQgaXMgbm90IHNldAogCiAjCkBAIC0zNDcsMjQgKzM5NiwyOCBAQAogIwogIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKICMKKyMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAogCiAjCiAjIEJsb2NrIGRldmljZXMKICMKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM1CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjIGRldmljZXMKICMKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTElOSyBpcyBub3Qgc2V0CiAKICMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydApAQCAtMzg4LDcgKzQ0MSw3IEBACiAjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9eQogIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz1tCiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CiAKICMKQEAgLTM5OCw2ICs0NTEsNyBAQAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNDEzLDYgKzQ2Nyw3IEBACiAjCiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VTUF9DT1JFIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKQEAgLTQyMywyNSArNDc4LDcgQEAKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKICMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBNYWNpbnRvc2ggZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BQ19FTVVNT1VTRUJUTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5ERkFSTSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNDYwLDcgKzQ5Nyw3IEBACiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19NSUk9eQorQ09ORklHX01JST1tCiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTQ2OSwxNSArNTA2LDM2IEBACiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIworQ09ORklHX01MWDRfREVCVUc9eQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwogIwogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBXaXJlbGVzcyBMQU4KICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUEVHQVNVUz1tCisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1VTQk5FVF9NSUk9bQorQ09ORklHX1VTQl9VU0JORVQ9bQorIyBDT05GSUdfVVNCX05FVF9DRENFVEhFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX0RNOTYwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX05FVDEwODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9NQ1M3ODMwPW0KKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9aQVVSVVMgaXMgbm90IHNldAogCiAjCiAjIFdhbiBpbnRlcmZhY2VzCkBAIC01MjQsNiArNTgyLDcgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtNTUxLDIxICs2MTAsMTcgQEAKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwogQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgogCiAjCiAjIElQTUkKICMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15CiAjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0CkBAIC01NzQsMTAgKzYyOSw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIwpAQCAtNTkwLDEyICs2NDEsMTIgQEAKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTYxMSwxNSArNjYyLDMzIEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiAjIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CkBAIC02MzQsMjkgKzcwMyw4NCBAQAogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CiAjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKICMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCitDT05GSUdfU05EPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgQUxTQSBQb3dlck1hYyBkZXZpY2VzCisjCisKKyMKKyMgQUxTQSBQb3dlck1hYyByZXF1aXJlcyBJMkMKKyMKKworIworIyBVU0IgZGV2aWNlcworIworIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKKworIworIyBTb0MgYXVkaW8gc3VwcG9ydAorIworIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIAogIwogIyBISUQgRGV2aWNlcwogIwogQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD1tCisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAogCiAjCiAjIFVTQiBzdXBwb3J0CkBAIC02NjUsMTMgKzc4OSwxMyBAQAogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRUZTPXkKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCkBAIC03MDQsNyArODI4LDcgQEAKICMKICMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKK0NPTkZJR19VU0JfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldApAQCAtNzE4LDQ4ICs4NDIsMTAgQEAKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0KLSMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfVVNCTkVUX01JST15Ci1DT05GSUdfVVNCX1VTQk5FVD15Ci1DT05GSUdfVVNCX05FVF9DRENFVEhFUj15Ci0jIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX05FVDEwODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9NQ1M3ODMwPXkKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9aQVVSVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogCiAjCkBAIC03ODEsNiArODY3LDcgQEAKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldApAQCAtNzkxLDYgKzg3OCw4IEBACiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CkBAIC04MDAsMTAgKzg4OSw2IEBACiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIwpAQCAtODQ2LDEzICs5MzEsMTEgQEAKICMKIAogIwotIyBWaXJ0dWFsaXphdGlvbgotIwotCi0jCiAjIEZpbGUgc3lzdGVtcwogIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GUz1tCisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTg3MSwyNyArOTU0LDMwIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPXkKK0NPTkZJR19RVU9UQUNUTD15CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz15CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCi1DT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKICMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0Ci1DT05GSUdfVURGX0ZTPXkKK0NPTkZJR19VREZfRlM9bQogQ09ORklHX1VERl9OTFM9eQogCiAjCiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKLUNPTkZJR19GQVRfRlM9eQorQ09ORklHX0ZBVF9GUz1tCiAjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfVkZBVF9GUz15CitDT05GSUdfVkZBVF9GUz1tCiBDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CiBDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiAjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkzMyw3ICsxMDE5LDcgQEAKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKICMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CkBAIC05NDEsMTAgKzEwMjcsMTcgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMDQsNiArMTA5Nyw4IEBACiAjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgogIwogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQ19GQVNUIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xMDExLDEwICsxMTA2LDEzIEBACiBDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1BMSVNUPXkKLUNPTkZJR19JT01BUF9DT1BZPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQogCiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CkBAIC0xMDMyLDE2ICsxMTMwLDE1IEBACiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TTEFCPXkKLSMgQ09ORklHX0RFQlVHX1NMQUJfTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci1DT05GSUdfREVCVUdfUldTRU1TPXkKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMDUxLDggKzExNDgsMTAgQEAKIENPTkZJR19ERUJVR19MSVNUPXkKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKIENPTkZJR19JUlFTVEFDS1M9eQogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CkBAIC0xMDYzLDYgKzExNjIsOSBAQAogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1BBU19SRUFMTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4IGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMDczLDQgKzExNzUsNDQgQEAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IGFhNjkzZDAuLjNlNzc5ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMzYsOCArMzYsOSBAQAogb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApCSs9IGNyYXNoX2R1bXAubwogb2JqLSQoQ09ORklHXzZ4eCkJCSs9IGlkbGVfNnh4Lm8gbDJjcl82eHgubyBjcHVfc2V0dXBfNnh4Lm8KIG9iai0kKENPTkZJR19UQVUpCQkrPSB0YXVfNnh4Lm8KK29iai0kKENPTkZJR19TT0ZUV0FSRV9TVVNQRU5EKQkrPSBzd3N1c3AubyBzdXNwZW5kLm8KIG9iajMyLSQoQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQpICs9IHN3c3VzcF8zMi5vCi1vYmotJChDT05GSUdfU09GVFdBUkVfU1VTUEVORCkgKz0gc3VzcGVuZC5vCitvYmo2NC0kKENPTkZJR19TT0ZUV0FSRV9TVVNQRU5EKSArPSBzd3N1c3BfNjQubyBzd3N1c3BfYXNtNjQubwogb2JqMzItJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZV8zMi5vCiAKIGlmZXEgKCQoQ09ORklHX1BQQ19NRVJHRSkseSkKQEAgLTY3LDYgKzY4LDcgQEAKIHBjaTY0LSQoQ09ORklHX1BQQzY0KQkJKz0gcGNpXzY0Lm8gcGNpX2RuLm8KIHBjaTMyLSQoQ09ORklHX1BQQzMyKQkJOj0gcGNpXzMyLm8KIG9iai0kKENPTkZJR19QQ0kpCQkrPSAkKHBjaTY0LXkpICQocGNpMzIteSkKK29iai0kKENPTkZJR19QQ0lfTVNJKQkJKz0gbXNpLm8KIGtleGVjLSQoQ09ORklHX1BQQzY0KQkJOj0gbWFjaGluZV9rZXhlY182NC5vCiBrZXhlYy0kKENPTkZJR19QUEMzMikJCTo9IG1hY2hpbmVfa2V4ZWNfMzIubwogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlYy5vIGNyYXNoLm8gJChrZXhlYy15KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDBjNTE1MGMuLjJjYjFkOTQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0yMSwxMiArMjEsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpZmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNTgsNyArNTgsNyBAQAogI2lmZGVmIENPTkZJR19QUEM2NAogCURFRklORShBVURJVENPTlRFWFQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgYXVkaXRfY29udGV4dCkpOwogI2Vsc2UKLQlERUZJTkUoVEhSRUFEX0lORk8sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8pKTsKKwlERUZJTkUoVEhSRUFEX0lORk8sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2spKTsKIAlERUZJTkUoUFRSQUNFLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHB0cmFjZSkpOwogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCkBAIC0xMjIsMTIgKzEyMiwxOCBAQAogCURFRklORShQQUNBU0xCQ0FDSEUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc2xiX2NhY2hlKSk7CiAJREVGSU5FKFBBQ0FTTEJDQUNIRVBUUiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzbGJfY2FjaGVfcHRyKSk7CiAJREVGSU5FKFBBQ0FDT05URVhUSUQsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgY29udGV4dC5pZCkpOwotCURFRklORShQQUNBQ09OVEVYVFNMTFAsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgY29udGV4dC5zbGxwKSk7CiAJREVGSU5FKFBBQ0FWTUFMTE9DU0xMUCwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCB2bWFsbG9jX3NsbHApKTsKLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0JREVGSU5FKFBBQ0FMT1dIVExCQVJFQVMsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgY29udGV4dC5sb3dfaHRsYl9hcmVhcykpOwotCURFRklORShQQUNBSElHSEhUTEJBUkVBUywgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBjb250ZXh0LmhpZ2hfaHRsYl9hcmVhcykpOwotI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KKyNpZmRlZiBDT05GSUdfUFBDX01NX1NMSUNFUworCURFRklORShQQUNBTE9XU0xJQ0VTUFNJWkUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwKKwkJCQkJICAgIGNvbnRleHQubG93X3NsaWNlc19wc2l6ZSkpOworCURFRklORShQQUNBSElHSFNMSUNFUFNJWkUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwKKwkJCQkJICAgIGNvbnRleHQuaGlnaF9zbGljZXNfcHNpemUpKTsKKwlERUZJTkUoTU1VUFNJWkVERUZTSVpFLCBzaXplb2Yoc3RydWN0IG1tdV9wc2l6ZV9kZWYpKTsKKwlERUZJTkUoTU1VUFNJWkVTTExQLCBvZmZzZXRvZihzdHJ1Y3QgbW11X3BzaXplX2RlZiwgc2xscCkpOworI2Vsc2UKKwlERUZJTkUoUEFDQUNPTlRFWFRTTExQLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGNvbnRleHQuc2xscCkpOworCisjZW5kaWYgLyogQ09ORklHX1BQQ19NTV9TTElDRVMgKi8KIAlERUZJTkUoUEFDQV9FWEdFTiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBleGdlbikpOwogCURFRklORShQQUNBX0VYTUMsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgZXhtYykpOwogCURFRklORShQQUNBX0VYU0xCLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGV4c2xiKSk7CkBAIC0yNTcsMTEgKzI2MywxMSBAQAogCURFRklORShDUFVfU1BFQ19TRVRVUCwgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfc2V0dXApKTsKIAlERUZJTkUoQ1BVX1NQRUNfUkVTVE9SRSwgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfcmVzdG9yZSkpOwogCi0jaWZuZGVmIENPTkZJR19QUEM2NAogCURFRklORShwYmVfYWRkcmVzcywgb2Zmc2V0b2Yoc3RydWN0IHBiZSwgYWRkcmVzcykpOwogCURFRklORShwYmVfb3JpZ19hZGRyZXNzLCBvZmZzZXRvZihzdHJ1Y3QgcGJlLCBvcmlnX2FkZHJlc3MpKTsKIAlERUZJTkUocGJlX25leHQsIG9mZnNldG9mKHN0cnVjdCBwYmUsIG5leHQpKTsKIAorI2lmbmRlZiBDT05GSUdfUFBDNjQKIAlERUZJTkUoVEFTS19TSVpFLCBUQVNLX1NJWkUpOwogCURFRklORShOVU1fVVNFUl9TRUdNRU5UUywgVEFTS19TSVpFPj4yOCk7CiAjZW5kaWYgLyogISBDT05GSUdfUFBDNjQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXVkaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXVkaXQuYwppbmRleCA3ZmU1ZTYzLi5hNGRhYjdjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2F1ZGl0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hdWRpdC5jCkBAIC0yMyw2ICsyMywyMCBAQAogfjBVCiB9OwogCitzdGF0aWMgdW5zaWduZWQgc2lnbmFsX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfc2lnbmFsLmg+Cit+MFUKK307CisKK2ludCBhdWRpdF9jbGFzc2lmeV9hcmNoKGludCBhcmNoKQoreworI2lmZGVmIENPTkZJR19QUEM2NAorCWlmIChhcmNoID09IEFVRElUX0FSQ0hfUFBDKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCiBpbnQgYXVkaXRfY2xhc3NpZnlfc3lzY2FsbChpbnQgYWJpLCB1bnNpZ25lZCBzeXNjYWxsKQogewogI2lmZGVmIENPTkZJR19QUEM2NApAQCAtNTEsMTUgKzY1LDE4IEBACiAJZXh0ZXJuIF9fdTMyIHBwYzMyX3dyaXRlX2NsYXNzW107CiAJZXh0ZXJuIF9fdTMyIHBwYzMyX3JlYWRfY2xhc3NbXTsKIAlleHRlcm4gX191MzIgcHBjMzJfY2hhdHRyX2NsYXNzW107CisJZXh0ZXJuIF9fdTMyIHBwYzMyX3NpZ25hbF9jbGFzc1tdOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1dSSVRFXzMyLCBwcGMzMl93cml0ZV9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfUkVBRF8zMiwgcHBjMzJfcmVhZF9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfRElSX1dSSVRFXzMyLCBwcGMzMl9kaXJfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0NIQVRUUl8zMiwgcHBjMzJfY2hhdHRyX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19TSUdOQUxfMzIsIHBwYzMyX3NpZ25hbF9jbGFzcyk7CiAjZW5kaWYKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19XUklURSwgd3JpdGVfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1JFQUQsIHJlYWRfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0RJUl9XUklURSwgZGlyX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFIsIGNoYXR0cl9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfU0lHTkFMLCBzaWduYWxfY2xhc3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NvbXBhdF9hdWRpdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jb21wYXRfYXVkaXQuYwppbmRleCA2NDBkNGJiLi4xMDhmZjE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NvbXBhdF9hdWRpdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY29tcGF0X2F1ZGl0LmMKQEAgLTIxLDYgKzIxLDExIEBACiB+MFUKIH07CiAKK3Vuc2lnbmVkIHBwYzMyX3NpZ25hbF9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3NpZ25hbC5oPgorfjBVCit9OworCiBpbnQgcHBjMzJfY2xhc3NpZnlfc3lzY2FsbCh1bnNpZ25lZCBzeXNjYWxsKQogewogCXN3aXRjaChzeXNjYWxsKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggOWNiMjRkMi4uYjJiNWQ2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtMjM1LDYgKzIzNSw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDgsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9wcGM5NzAsCiAJCS5jcHVfcmVzdG9yZQkJPSBfX3Jlc3RvcmVfY3B1X3BwYzk3MCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0Lzk3ME1QIiwKQEAgLTI1MSw2ICsyNTIsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA4LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcHBjOTcwTVAsCiAJCS5jcHVfcmVzdG9yZQkJPSBfX3Jlc3RvcmVfY3B1X3BwYzk3MCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0Lzk3ME1QIiwKQEAgLTMxNyw2ICszMTksNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGM2NC9wb3dlcjYiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfUE9XRVI0LAogCQkub3Byb2ZpbGVfbW1jcmFfc2lodgk9IFBPV0VSNl9NTUNSQV9TSUhWLApAQCAtMzM1LDYgKzMzOCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDYsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0L3Bvd2VyNiIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCiAJCS5vcHJvZmlsZV9tbWNyYV9zaWh2CT0gUE9XRVI2X01NQ1JBX1NJSFYsCkBAIC04MzYsNyArODQwLDcgQEAKIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCiAJCS5wdnJfdmFsdWUJCT0gMHg4MDA0MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICI3NDQ4IiwKLQkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU183NDQ3QSwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU183NDQ4LAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUiB8CiAJCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QIHwgUFBDX0ZFQVRVUkVfUFBDX0xFLAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IGMyOWQxNjUuLjQwNzRjMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKQEAgLTU5Niw3ICs1OTYsMTEgQEAKIAltcglyMTIscjQJCS8qIHJlc3RhcnQgYXQgZXhjX2V4aXRfcmVzdGFydCAqLwogCWIJMmIKIAotCS5jb21tCWZlZV9yZXN0YXJ0cyw0CisJLnNlY3Rpb24gLmJzcworCS5hbGlnbgkyCitmZWVfcmVzdGFydHM6CisJLnNwYWNlCTQKKwkucHJldmlvdXMKIAogLyogYWFyZ2gsIGEgbm9ucmVjb3ZlcmFibGUgaW50ZXJydXB0LCBwYW5pYyAqLwogLyogYWFyZ2gsIHdlIGRvbid0IGtub3cgd2hpY2ggdHJhcCB0aGlzIGlzICovCkBAIC04NTEsNyArODU1LDExIEBACiAJbXRzcHIJU1BSTl9EQlNSLHIxMQkvKiBjbGVhciBhbGwgcGVuZGluZyBkZWJ1ZyBldmVudHMgKi8KIAlibHIKIAotCS5jb21tCWdsb2JhbF9kYmNyMCw4CisJLnNlY3Rpb24gLmJzcworCS5hbGlnbgk0CitnbG9iYWxfZGJjcjA6CisJLnNwYWNlCTgKKwkucHJldmlvdXMKICNlbmRpZiAvKiAhKENPTkZJR180eHggfHwgQ09ORklHX0JPT0tFKSAqLwogCiBkb193b3JrOgkJCS8qIHIxMCBjb250YWlucyBNU1JfS0VSTkVMIGhlcmUgKi8KQEAgLTkyNiw3ICs5MzQsMTEgQEAKIAkvKiBzaG91bGRuJ3QgcmV0dXJuICovCiAJYgk0YgogCi0JLmNvbW0JZWVfcmVzdGFydHMsNAorCS5zZWN0aW9uIC5ic3MKKwkuYWxpZ24JMgorZWVfcmVzdGFydHM6CisJLnNwYWNlCTQKKwkucHJldmlvdXMKIAogLyoKICAqIFBST00gY29kZSBmb3Igc3BlY2lmaWMgbWFjaGluZXMgZm9sbG93cy4gIFB1dCBpdApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQ0eC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQ0eC5TCmluZGV4IGExNWQ0YjguLjg4Njk1OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDR4LlMKQEAgLTEyMCw4ICsxMjAsOCBAQAogICogQ29uZmlndXJlIGFuZCBsb2FkIHBpbm5lZCBlbnRyeSBpbnRvIFRMQiBzbG90IDYzLgogICovCiAKLQlsaXMJcjMsS0VSTkVMQkFTRUBoCQkvKiBMb2FkIHRoZSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzICovCi0Jb3JpCXIzLHIzLEtFUk5FTEJBU0VAbAorCWxpcwlyMyxQQUdFX09GRlNFVEBoCisJb3JpCXIzLHIzLFBBR0VfT0ZGU0VUQGwKIAogCS8qIEtlcm5lbCBpcyBhdCB0aGUgYmFzZSBvZiBSQU0gKi8KIAlsaSByNCwgMAkJCS8qIExvYWQgdGhlIGtlcm5lbCBwaHlzaWNhbCBhZGRyZXNzICovCkBAIC0xNzIsMzYgKzE3MiwyOCBAQAogCWlzeW5jCiAKIDQ6Ci0jaWZkZWYgQ09ORklHX1NFUklBTF9URVhUX0RFQlVHCi0JLyoKLQkgKiBBZGQgdGVtcG9yYXJ5IFVBUlQgbWFwcGluZyBmb3IgZWFybHkgZGVidWcuCi0JICogV2UgY2FuIG1hcCBVQVJUIHJlZ2lzdGVycyB3aGVyZXZlciB3ZSB3YW50IGFzIGxvbmcgYXMgdGhleSBkb24ndAotCSAqIGludGVyZmVyZSB3aXRoIG90aGVyIHN5c3RlbSBtYXBwaW5ncyAoZS5nLiB3aXRoIHBpbm5lZCBlbnRyaWVzKS4KLQkgKiBGb3IgYW4gZXhhbXBsZSBvZiBob3cgd2UgaGFuZGxlIHRoaXMgLSBzZWUgb2NvdGVhLmguICAgICAgIC0tZWJzCi0JICovCisjaWZkZWYgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHgKKwkvKiBBZGQgVUFSVCBtYXBwaW5nIGZvciBlYXJseSBkZWJ1Zy4gKi8KKwogIAkvKiBwYWdlaWQgZmllbGRzICovCi0JbGlzCXIzLFVBUlQwX0lPX0JBU0VAaAotCW9yaQlyMyxyMyxQUEM0NHhfVExCX1ZBTElEIHwgUFBDNDR4X1RMQl80SworCWxpcwlyMyxQUEM0NHhfRUFSTFlfREVCVUdfVklSVEFERFJAaAorCW9yaQlyMyxyMyxQUEM0NHhfVExCX1ZBTElEfFBQQzQ0eF9UTEJfVFN8UFBDNDR4X1RMQl82NEsKIAogCS8qIHhsYXQgZmllbGRzICovCi0JbGlzCXI0LFVBUlQwX1BIWVNfSU9fQkFTRUBoCQkvKiBSUE4gZGVwZW5kcyBvbiBTb0MgKi8KLSNpZm5kZWYgQ09ORklHXzQ0MEVQCi0Jb3JpCXI0LHI0LDB4MDAwMQkJLyogRVJQTiBpcyAxIGZvciBzZWNvbmQgNEdCIHBhZ2UgKi8KLSNlbmRpZgorCWxpcwlyNCxDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eF9QSFlTTE9XQGgKKwlvcmkJcjQscjQsQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHhfUEhZU0hJR0gKIAogCS8qIGF0dHJpYiBmaWVsZHMgKi8KLQlsaQlyNSwwCi0Jb3JpCXI1LHI1LChQUEM0NHhfVExCX1NXIHwgUFBDNDR4X1RMQl9TUiB8IFBQQzQ0eF9UTEJfSSB8IFBQQzQ0eF9UTEJfRykKKwlsaQlyNSwoUFBDNDR4X1RMQl9TV3xQUEM0NHhfVExCX1NSfFBQQzQ0eF9UTEJfSXxQUEM0NHhfVExCX0cpCisgICAgICAgIGxpICAgICAgcjAsNjIgICAgICAgICAgICAgICAgICAgIC8qIFRMQiBzbG90IDAgKi8KIAotICAgICAgICBsaSAgICAgIHIwLDAgICAgICAgICAgICAgICAgICAgIC8qIFRMQiBzbG90IDAgKi8KLQotCXRsYndlCXIzLHIwLFBQQzQ0eF9UTEJfUEFHRUlECS8qIExvYWQgdGhlIHBhZ2VpZCBmaWVsZHMgKi8KLQl0bGJ3ZQlyNCxyMCxQUEM0NHhfVExCX1hMQVQJLyogTG9hZCB0aGUgdHJhbnNsYXRpb24gZmllbGRzICovCi0JdGxid2UJcjUscjAsUFBDNDR4X1RMQl9BVFRSSUIJLyogTG9hZCB0aGUgYXR0cmliL2FjY2VzcyBmaWVsZHMgKi8KKwl0bGJ3ZQlyMyxyMCxQUEM0NHhfVExCX1BBR0VJRAorCXRsYndlCXI0LHIwLFBQQzQ0eF9UTEJfWExBVAorCXRsYndlCXI1LHIwLFBQQzQ0eF9UTEJfQVRUUklCCiAKIAkvKiBGb3JjZSBjb250ZXh0IGNoYW5nZSAqLwogCWlzeW5jCi0jZW5kaWYgLyogQ09ORklHX1NFUklBTF9URVhUX0RFQlVHICovCisjZW5kaWYgLyogQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHggKi8KIAogCS8qIEVzdGFibGlzaCB0aGUgaW50ZXJydXB0IHZlY3RvciBvZmZzZXRzICovCiAJU0VUX0lWT1IoMCwgIENyaXRpY2FsSW5wdXQpOwpAQCAtNzA5LDE2ICs3MDEsNiBAQAogCWJscgogI2VuZGlmCiAKLS8qCi0gKiBleHRlcm4gdm9pZCBhYm9ydCh2b2lkKQotICoKLSAqIEF0IHByZXNlbnQsIHRoaXMgcm91dGluZSBqdXN0IGFwcGxpZXMgYSBzeXN0ZW0gcmVzZXQuCi0gKi8KLV9HTE9CQUwoYWJvcnQpCi0gICAgICAgIG1mc3ByICAgcjEzLFNQUk5fREJDUjAKLSAgICAgICAgb3JpcyAgICByMTMscjEzLERCQ1IwX1JTVF9TWVNURU1AaAotICAgICAgICBtdHNwciAgIFNQUk5fREJDUjAscjEzCi0KIF9HTE9CQUwoc2V0X2NvbnRleHQpCiAKICNpZmRlZiBDT05GSUdfQkRJX1NXSVRDSApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGUuYwppbmRleCA2ZTdmNTA5Li5hOWU5Y2JkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGUuYwpAQCAtMzMsOCArMzMsMTEgQEAKICNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKy8qIHRoaXMgaXMgdXNlZCBmb3Igc29mdHdhcmUgc3VzcGVuZCwgYW5kIHRoYXQgc2h1dHMgZG93bgorICogQ1BVcyBldmVuIHdoaWxlIHRoZSBzeXN0ZW0gaXMgc3RpbGwgYm9vdGluZy4uLiAqLwogI2RlZmluZSBjcHVfc2hvdWxkX2RpZSgpCShjcHVfaXNfb2ZmbGluZShzbXBfcHJvY2Vzc29yX2lkKCkpICYmIFwKLQkJCQkgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SVU5OSU5HKQorCQkJCSAgIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcgICAgIFwKKwkJCQkgfHwgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKSkKICNlbHNlCiAjZGVmaW5lIGNwdV9zaG91bGRfZGllKCkJMAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfcG93ZXI0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfcG93ZXI0LlMKaW5kZXggYmEzMTk1NC4uNTMyODcwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlX3Bvd2VyNC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV9wb3dlcjQuUwpAQCAtNTMsMyArNTMsMjQgQEAKIAlpc3luYwogCWIJMWIKIAorX0dMT0JBTChwb3dlcjRfY3B1X29mZmxpbmVfcG93ZXJzYXZlKQorCS8qIEdvIHRvIE5BUCBub3cgKi8KKwltZm1zcglyNworCXJsZGljbAlyMCxyNyw0OCwxCisJcm90bGRpCXIwLHIwLDE2CisJbXRtc3JkCXIwLDEJCQkvKiBoYXJkLWRpc2FibGUgaW50ZXJydXB0cyAqLworCWxpCXIwLDEKKwlsaQlyNiwwCisJc3RiCXIwLFBBQ0FIQVJESVJRRU4ocjEzKQkvKiB3ZSdsbCBoYXJkLWVuYWJsZSBzaG9ydGx5ICovCisJc3RiCXI2LFBBQ0FTT0ZUSVJRRU4ocjEzKQkvKiBzb2Z0LWRpc2FibGUgaXJxcyAqLworQkVHSU5fRlRSX1NFQ1RJT04KKwlEU1NBTEwKKwlzeW5jCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9BTFRJVkVDKQorCW9yaQlyNyxyNyxNU1JfRUUKKwlvcmlzCXI3LHI3LE1TUl9QT1dAaAorCXN5bmMKKwlpc3luYworCW10bXNyZAlyNworCWlzeW5jCisJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCA2YzgzZmUyLi40MmM4ZWQ2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTY3LDYgKzY3LDcgQEAKICNpZmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9sdjFjYWxsLmg+CiAjZW5kaWYKIAogaW50IF9faXJxX29mZnNldF92YWx1ZTsKQEAgLTE2Miw3ICsxNjMsMTcgQEAKIAlsb2NhbF9wYWNhLT5oYXJkX2VuYWJsZWQgPSBlbjsKIAlpZiAoKGludCltZnNwcihTUFJOX0RFQykgPCAwKQogCQltdHNwcihTUFJOX0RFQywgMSk7Ci0JaGFyZF9pcnFfZW5hYmxlKCk7CisKKwkvKgorCSAqIEZvcmNlIHRoZSBkZWxpdmVyeSBvZiBwZW5kaW5nIHNvZnQtZGlzYWJsZWQgaW50ZXJydXB0cyBvbiBQUzMuCisJICogQW55IEhWIGNhbGwgd2lsbCBoYXZlIHRoaXMgc2lkZSBlZmZlY3QuCisJICovCisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfUFMzX0xWMSkpIHsKKwkJdTY0IHRtcDsKKwkJbHYxX2dldF92ZXJzaW9uX2luZm8oJnRtcCk7CisJfQorCisJX19oYXJkX2lycV9lbmFibGUoKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIApAQCAtNDc4LDcgKzQ4OSw3IEBACiAJY2FzZSBJUlFfSE9TVF9NQVBfTElORUFSOgogCQlybWFwID0gKHVuc2lnbmVkIGludCAqKShob3N0ICsgMSk7CiAJCWZvciAoaSA9IDA7IGkgPCByZXZtYXBfYXJnOyBpKyspCi0JCQlybWFwW2ldID0gSVJRX05PTkU7CisJCQlybWFwW2ldID0gTk9fSVJROwogCQlob3N0LT5yZXZtYXBfZGF0YS5saW5lYXIuc2l6ZSA9IHJldm1hcF9hcmc7CiAJCXNtcF93bWIoKTsKIAkJaG9zdC0+cmV2bWFwX2RhdGEubGluZWFyLnJldm1hcCA9IHJtYXA7CkBAIC02MDMsNyArNjE0LDcgQEAKIAkgKiBob3N0LT5vcHMtPm1hcCgpIHRvIHVwZGF0ZSB0aGUgZmxhZ3MKIAkgKi8KIAl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhob3N0LCBod2lycSk7Ci0JaWYgKHZpcnEgIT0gSVJRX05PTkUpIHsKKwlpZiAodmlycSAhPSBOT19JUlEpIHsKIAkJaWYgKGhvc3QtPm9wcy0+cmVtYXApCiAJCQlob3N0LT5vcHMtPnJlbWFwKGhvc3QsIHZpcnEsIGh3aXJxKTsKIAkJcHJfZGVidWcoImlycTogLT4gZXhpc3RpbmcgbWFwcGluZyBvbiB2aXJxICVkXG4iLCB2aXJxKTsKQEAgLTczMCw3ICs3NDEsNyBAQAogCXN3aXRjaChob3N0LT5yZXZtYXBfdHlwZSkgewogCWNhc2UgSVJRX0hPU1RfTUFQX0xJTkVBUjoKIAkJaWYgKGh3aXJxIDwgaG9zdC0+cmV2bWFwX2RhdGEubGluZWFyLnNpemUpCi0JCQlob3N0LT5yZXZtYXBfZGF0YS5saW5lYXIucmV2bWFwW2h3aXJxXSA9IElSUV9OT05FOworCQkJaG9zdC0+cmV2bWFwX2RhdGEubGluZWFyLnJldm1hcFtod2lycV0gPSBOT19JUlE7CiAJCWJyZWFrOwogCWNhc2UgSVJRX0hPU1RfTUFQX1RSRUU6CiAJCS8qIENoZWNrIGlmIHJhZGl4IHRyZWUgYWxsb2NhdGVkIHlldCAqLwpAQCAtOTQ3LDMzICs5NTgsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BQQ19NRVJHRSAqLwogCi0jaWZkZWYgQ09ORklHX1BDSV9NU0kKLWludCBwY2lfZW5hYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqIHBkZXYpCi17Ci0JaWYgKHBwY19tZC5lbmFibGVfbXNpKQotCQlyZXR1cm4gcHBjX21kLmVuYWJsZV9tc2kocGRldik7Ci0JZWxzZQotCQlyZXR1cm4gLTE7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjaV9lbmFibGVfbXNpKTsKLQotdm9pZCBwY2lfZGlzYWJsZV9tc2koc3RydWN0IHBjaV9kZXYgKiBwZGV2KQotewotCWlmIChwcGNfbWQuZGlzYWJsZV9tc2kpCi0JCXBwY19tZC5kaXNhYmxlX21zaShwZGV2KTsKLX0KLUVYUE9SVF9TWU1CT0wocGNpX2Rpc2FibGVfbXNpKTsKLQotdm9pZCBwY2lfc2Nhbl9tc2lfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHt9Ci1pbnQgcGNpX2VuYWJsZV9tc2l4KHN0cnVjdCBwY2lfZGV2KiBkZXYsIHN0cnVjdCBtc2l4X2VudHJ5ICplbnRyaWVzLCBpbnQgbnZlYykge3JldHVybiAtMTt9Ci12b2lkIHBjaV9kaXNhYmxlX21zaXgoc3RydWN0IHBjaV9kZXYgKmRldikge30KLXZvaWQgbXNpX3JlbW92ZV9wY2lfaXJxX3ZlY3RvcnMoc3RydWN0IHBjaV9kZXYgKmRldikge30KLXZvaWQgcGNpX25vX21zaSh2b2lkKSB7fQotRVhQT1JUX1NZTUJPTChwY2lfZW5hYmxlX21zaXgpOwotRVhQT1JUX1NZTUJPTChwY2lfZGlzYWJsZV9tc2l4KTsKLQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUFBDNjQKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX25vaXJxZGlzdHJpYihjaGFyICpzdHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGVmNjQ3ZTcuLjBjOTY2MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9zc3RlcC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTEyNiwyMiArMTI2LDEzIEBACiB9CiAKIC8qIENhbGxlZCB3aXRoIGtyZXRwcm9iZV9sb2NrIGhlbGQgKi8KLXZvaWQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZSAqcnAsCit2b2lkIF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3JldHByb2JlKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAogCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpOworCXJpLT5yZXRfYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKilyZWdzLT5saW5rOwogCi0JaWYgKChyaSA9IGdldF9mcmVlX3JwX2luc3QocnApKSAhPSBOVUxMKSB7Ci0JCXJpLT5ycCA9IHJwOwotCQlyaS0+dGFzayA9IGN1cnJlbnQ7Ci0JCXJpLT5yZXRfYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKilyZWdzLT5saW5rOwotCi0JCS8qIFJlcGxhY2UgdGhlIHJldHVybiBhZGRyIHdpdGggdHJhbXBvbGluZSBhZGRyICovCi0JCXJlZ3MtPmxpbmsgPSAodW5zaWduZWQgbG9uZylrcmV0cHJvYmVfdHJhbXBvbGluZTsKLQkJYWRkX3JwX2luc3QocmkpOwotCX0gZWxzZSB7Ci0JCXJwLT5ubWlzc2VkKys7Ci0JfQorCS8qIFJlcGxhY2UgdGhlIHJldHVybiBhZGRyIHdpdGggdHJhbXBvbGluZSBhZGRyICovCisJcmVncy0+bGluayA9ICh1bnNpZ25lZCBsb25nKWtyZXRwcm9iZV90cmFtcG9saW5lOwogfQogCiBzdGF0aWMgaW50IF9fa3Byb2JlcyBrcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTMzNiw3ICszMjcsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0JQlVHX09OKCFvcmlnX3JldF9hZGRyZXNzIHx8IChvcmlnX3JldF9hZGRyZXNzID09IHRyYW1wb2xpbmVfYWRkcmVzcykpOworCWtyZXRwcm9iZV9hc3NlcnQocmksIG9yaWdfcmV0X2FkZHJlc3MsIHRyYW1wb2xpbmVfYWRkcmVzcyk7CiAJcmVncy0+bmlwID0gb3JpZ19yZXRfYWRkcmVzczsKIAogCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CkBAIC00MTAsNyArNDAxLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX2twcm9iZXMga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCitpbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CkBAIC00OTUsMTQgKzQ4Niw2IEBACiAJCWlmIChwb3N0X2twcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKQogCQkJcmV0ID0gTk9USUZZX1NUT1A7CiAJCWJyZWFrOwotCWNhc2UgRElFX1BBR0VfRkFVTFQ6Ci0JCS8qIGtwcm9iZV9ydW5uaW5nKCkgbmVlZHMgc21wX3Byb2Nlc3Nvcl9pZCgpICovCi0JCXByZWVtcHRfZGlzYWJsZSgpOwotCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJgotCQkgICAga3Byb2JlX2ZhdWx0X2hhbmRsZXIoYXJncy0+cmVncywgYXJncy0+dHJhcG5yKSkKLQkJCXJldCA9IE5PVElGWV9TVE9QOwotCQlwcmVlbXB0X2VuYWJsZSgpOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC01NTksMyArNTQyLDExIEBACiB7CiAJcmV0dXJuIHJlZ2lzdGVyX2twcm9iZSgmdHJhbXBvbGluZV9wKTsKIH0KKworaW50IF9fa3Byb2JlcyBhcmNoX3RyYW1wb2xpbmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJaWYgKHAtPmFkZHIgPT0gKGtwcm9iZV9vcGNvZGVfdCAqKSZrcmV0cHJvYmVfdHJhbXBvbGluZSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMKaW5kZXggYWU0ODM2ZS4uY2VhODA0NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMKQEAgLTI0NCw5ICsyNDQsOSBAQAogCSAqIGRvZXNuJ3Qgd29yayBmb3IgdGhlc2Ugc2V0dGluZ3MsIHlvdSdsbCBoYXZlIHRvIGFkZCB5b3VyIG93biBzcGVjaWFsCiAJICogY2FzZXMgaGVyZQogCSAqLwotCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShwY2lfZGV2LCAicGNpMTNhOCwxNTIiKSB8fAotCSAgICBkZXZpY2VfaXNfY29tcGF0aWJsZShwY2lfZGV2LCAicGNpMTNhOCwxNTQiKSB8fAotCSAgICBkZXZpY2VfaXNfY29tcGF0aWJsZShwY2lfZGV2LCAicGNpMTNhOCwxNTgiKSkgeworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwY2lfZGV2LCAicGNpMTNhOCwxNTIiKSB8fAorCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwY2lfZGV2LCAicGNpMTNhOCwxNTQiKSB8fAorCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwY2lfZGV2LCAicGNpMTNhOCwxNTgiKSkgewogCQlhZGRyICs9IDB4MjAwICogbGluZGV4OwogCQliYXNlICs9IDB4MjAwICogbGluZGV4OwogCX0gZWxzZSB7CkBAIC0zNjUsMTEgKzM2NSwxMSBAQAogCQkvKiBDaGVjayBmb3Iga25vd24gcGNpY2xhc3MsIGFuZCBhbHNvIGNoZWNrIHdldGhlciB3ZSBoYXZlCiAJCSAqIGEgZGV2aWNlIHdpdGggY2hpbGQgbm9kZXMgZm9yIHBvcnRzIG9yIG5vdAogCQkgKi8KLQkJaWYgKGRldmljZV9pc19jb21wYXRpYmxlKG5wLCAicGNpY2xhc3MsMDcwMCIpIHx8Ci0JCSAgICBkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInBjaWNsYXNzLDA3MDAwMiIpKQorCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJwY2ljbGFzcywwNzAwIikgfHwKKwkJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAicGNpY2xhc3MsMDcwMDAyIikpCiAJCQlwY2kgPSBucDsKLQkJZWxzZSBpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUocGFyZW50LCAicGNpY2xhc3MsMDcwMCIpIHx8Ci0JCQkgZGV2aWNlX2lzX2NvbXBhdGlibGUocGFyZW50LCAicGNpY2xhc3MsMDcwMDAyIikpCisJCWVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhcmVudCwgInBjaWNsYXNzLDA3MDAiKSB8fAorCQkJIG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhcmVudCwgInBjaWNsYXNzLDA3MDAwMiIpKQogCQkJcGNpID0gcGFyZW50OwogCQllbHNlIHsKIAkJCW9mX25vZGVfcHV0KHBhcmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJtYXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcm1hcC5jCmluZGV4IDU4NGQxZTMuLmFmMTEyODUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcm1hcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcm1hcC5jCkBAIC0xMCw3ICsxMCw4IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9scGFyX21hcC5oPgogCi1jb25zdCBzdHJ1Y3QgTHBhck1hcCBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLnRleHQiKSkpIHhMcGFyTWFwID0geworLyogVGhlICMgaXMgdG8gc3RvcCBnY2MgdHJ5aW5nIHRvIG1ha2UgLnRleHQgbm9uZXhlY3V0YWJsZSAqLworY29uc3Qgc3RydWN0IExwYXJNYXAgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi50ZXh0ICMiKSkpIHhMcGFyTWFwID0gewogCS54TnVtYmVyRXNpZHMgPSBIdkVzaWRzVG9NYXAsCiAJLnhOdW1iZXJSYW5nZXMgPSBIdlJhbmdlc1RvTWFwLAogCS54U2VnbWVudFRhYmxlT2ZmcyA9IFNUQUIwX1BBR0UsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21zaS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjJkMTAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tc2kuYwpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYtMjAwNywgTWljaGFlbCBFbGxlcm1hbiwgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworaW50IGFyY2hfbXNpX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiogZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCit7CisJaWYgKCFwcGNfbWQuc2V0dXBfbXNpX2lycXMgfHwgIXBwY19tZC50ZWFyZG93bl9tc2lfaXJxcykgeworCQlwcl9kZWJ1ZygibXNpOiBQbGF0Zm9ybSBkb2Vzbid0IHByb3ZpZGUgTVNJIGNhbGxiYWNrcy5cbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlpZiAocHBjX21kLm1zaV9jaGVja19kZXZpY2UpIHsKKwkJcHJfZGVidWcoIm1zaTogVXNpbmcgcGxhdGZvcm0gY2hlY2sgcm91dGluZS5cbiIpOworCQlyZXR1cm4gcHBjX21kLm1zaV9jaGVja19kZXZpY2UoZGV2LCBudmVjLCB0eXBlKTsKKwl9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhcmNoX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gcHBjX21kLnNldHVwX21zaV9pcnFzKGRldiwgbnZlYywgdHlwZSk7Cit9CisKK3ZvaWQgYXJjaF90ZWFyZG93bl9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBwcGNfbWQudGVhcmRvd25fbXNpX2lycXMoZGV2KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfZGV2aWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jCmluZGV4IDBjOGVhNzYuLmE0NjRkNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfZGV2aWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9kZXZpY2UuYwpAQCAtMjcsNyArMjcsNyBAQAogCQkJbWF0Y2ggJj0gbm9kZS0+dHlwZQogCQkJCSYmICFzdHJjbXAobWF0Y2hlcy0+dHlwZSwgbm9kZS0+dHlwZSk7CiAJCWlmIChtYXRjaGVzLT5jb21wYXRpYmxlWzBdKQotCQkJbWF0Y2ggJj0gZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwKKwkJCW1hdGNoICY9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5vZGUsCiAJCQkJCQkgICAgICBtYXRjaGVzLT5jb21wYXRpYmxlKTsKIAkJaWYgKG1hdGNoKQogCQkJcmV0dXJuIG1hdGNoZXM7CkBAIC0xMjAsOCArMTIwLDggQEAKIH0KIAogCi1zdGF0aWMgc3NpemVfdCBvZl9kZXZpY2VfZ2V0X21vZGFsaWFzKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAotCQkJCQljaGFyICpzdHIsIHNzaXplX3QgbGVuKQorc3NpemVfdCBvZl9kZXZpY2VfZ2V0X21vZGFsaWFzKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJCWNoYXIgKnN0ciwgc3NpemVfdCBsZW4pCiB7CiAJY29uc3QgY2hhciAqY29tcGF0OwogCWludCBjcGxlbiwgaTsKQEAgLTIzOSwzICsyMzksNCBAQAogRVhQT1JUX1NZTUJPTChvZl9kZXZfcHV0KTsKIEVYUE9SVF9TWU1CT0wob2ZfcmVsZWFzZV9kZXYpOwogRVhQT1JUX1NZTUJPTChvZl9kZXZpY2VfdWV2ZW50KTsKK0VYUE9SVF9TWU1CT0wob2ZfZGV2aWNlX2dldF9tb2RhbGlhcyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMKaW5kZXggOTA4ZWQ3OS4uZDUwMWMyMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCi0KIC8qCiAgKiBUaGUgbGlzdCBvZiBPRiBJRHMgYmVsb3cgaXMgdXNlZCBmb3IgbWF0Y2hpbmcgYnVzIHR5cGVzIGluIHRoZQogICogc3lzdGVtIHdob3NlIGRldmljZXMgYXJlIHRvIGJlIGV4cG9zZWQgYXMgb2ZfcGxhdGZvcm1fZGV2aWNlcy4KQEAgLTQyOCwxMSArNDI3LDEzIEBACiAJLyogUHJvY2VzcyAicmFuZ2VzIiBwcm9wZXJ0eSAqLwogCXBjaV9wcm9jZXNzX2JyaWRnZV9PRl9yYW5nZXMocGhiLCBkZXYtPm5vZGUsIDApOwogCi0JLyogU2V0dXAgSU8gc3BhY2UuCi0JICogVGhpcyB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IGZvciBJU0EgSU9zLCBzb21ldGhpbmcgbmVlZHMgdG8gYmUgZG9uZQotCSAqIGFib3V0IGl0IGlmIHdlIGV2ZXIgZ2VuZXJhbGl6ZSB0aGF0IHdheSBvZiBwcm9iaW5nIFBDSSBicmlnZGVzCisJLyogU2V0dXAgSU8gc3BhY2UuIFdlIHVzZSB0aGUgbm9uLWR5bmFtaWMgdmVyc2lvbiBvZiB0aGF0IGNvZGUgaGVyZSwKKwkgKiB3aGljaCBkb2Vzbid0IHF1aXRlIHN1cHBvcnQgdW5wbHVnZ2luZy4gTmV4dCBrZXJuZWwgcmVsZWFzZSB3aWxsCisJICogaGF2ZSBhIGJldHRlciBmaXggZm9yIHRoaXMuCisJICogTm90ZSBhbHNvIHRoYXQgd2UgZG9uJ3QgZG8gSVNBLCB0aGlzIHdpbGwgYWxzbyBiZSBmaXhlZCB3aXRoIGEKKwkgKiBtb3JlIG1hc3NpdmUgcmV3b3JrLgogCSAqLwotCXBjaV9zZXR1cF9waGJfaW9fZHluYW1pYyhwaGIsIDApOworCXBjaV9zZXR1cF9waGJfaW8ocGhiLCAwKTsKIAogCS8qIEluaXQgcGNpX2RuIGRhdGEgc3RydWN0dXJlcyAqLwogCXBjaV9kZXZzX3BoYl9pbml0X2R5bmFtaWMocGhiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCmluZGV4IGYwMjI4NjIuLmU2NjA2NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYwpAQCAtMTY1OCw3ICsxNjU4LDcgQEAKIAlpbnQgaTsKIAogCWlmIChwYWdlX2lzX3JhbShwZm4pKQotCQlyZXR1cm4gcHJvdDsKKwkJcmV0dXJuIF9fcGdwcm90KHByb3QpOwogCiAJcHJvdCB8PSBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCmluZGV4IDcxMzgwOTIuLjI0OWNjYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwpAQCAtNDEsNiArNDEsNyBAQAogCiB1bnNpZ25lZCBsb25nIHBjaV9wcm9iZV9vbmx5ID0gMTsKIGludCBwY2lfYXNzaWduX2FsbF9idXNlcyA9IDA7CitzdGF0aWMgaW50IHBjaV9pbml0aWFsX3NjYW5fZG9uZTsKIAogc3RhdGljIHZvaWQgZml4dXBfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogc3RhdGljIHZvaWQgZG9fYnVzX3NldHVwKHN0cnVjdCBwY2lfYnVzICpidXMpOwpAQCAtNjA0LDYgKzYwNSw4IEBACiAJCS8qIG1hcCBpbiBQQ0kgSS9PIHNwYWNlICovCiAJCXBoYnNfcmVtYXBfaW8oKTsKIAorCXBjaV9pbml0aWFsX3NjYW5fZG9uZSA9IDE7CisKIAlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBQcm9iaW5nIFBDSSBoYXJkd2FyZSBkb25lXG4iKTsKIAogCXJldHVybiAwOwpAQCAtMTAwNiw4ICsxMDA5LDkgQEAKIAogCQlzd2l0Y2ggKChwY2lfc3BhY2UgPj4gMjQpICYgMHgzKSB7CiAJCWNhc2UgMToJCS8qIEkvTyBzcGFjZSAqLwotCQkJaG9zZS0+aW9fYmFzZV9waHlzID0gY3B1X3BoeXNfYWRkcjsKLQkJCWhvc2UtPnBjaV9pb19zaXplID0gc2l6ZTsKKwkJCWhvc2UtPmlvX2Jhc2VfcGh5cyA9IGNwdV9waHlzX2FkZHIgLSBwY2lfYWRkcjsKKwkJCS8qIGhhbmRsZSBmcm9tIDAgdG8gdG9wIG9mIEkvTyB3aW5kb3cgKi8KKwkJCWhvc2UtPnBjaV9pb19zaXplID0gcGNpX2FkZHIgKyBzaXplOwogCiAJCQlyZXMgPSAmaG9zZS0+aW9fcmVzb3VyY2U7CiAJCQlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKQEAgLTEwNDEsMTMgKzEwNDUsMTYgQEAKIAl9CiB9CiAKLXZvaWQgX19pbml0IHBjaV9zZXR1cF9waGJfaW8oc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgcHJpbWFyeSkKK3ZvaWQgX19kZXZpbml0IHBjaV9zZXR1cF9waGJfaW8oc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgcHJpbWFyeSkKIHsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSBob3NlLT5wY2lfaW9fc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGlvX3ZpcnRfb2Zmc2V0OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaXNhX2RuOwogCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuOworCiAJaG9zZS0+aW9fYmFzZV92aXJ0ID0gcmVzZXJ2ZV9waGJfaW9zcGFjZShzaXplKTsKIAlEQkcoInBoYiVkIGlvX2Jhc2VfcGh5cyAweCVseCBpb19iYXNlX3ZpcnQgMHglbHhcbiIsCiAJCWhvc2UtPmdsb2JhbF9udW1iZXIsIGhvc2UtPmlvX2Jhc2VfcGh5cywKQEAgLTEwNjgsNiArMTA3NSwxNSBAQAogCXJlcyA9ICZob3NlLT5pb19yZXNvdXJjZTsKIAlyZXMtPnN0YXJ0ICs9IGlvX3ZpcnRfb2Zmc2V0OwogCXJlcy0+ZW5kICs9IGlvX3ZpcnRfb2Zmc2V0OworCisJLyogSWYgdGhpcyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGluaXRpYWwgUENJIHNjYW4sIHRoZW4gd2UgbmVlZCB0bworCSAqIHByb2NlZWQgdG8gSU8gbWFwcGluZ3Mgbm93CisJICovCisJaWYgKHBjaV9pbml0aWFsX3NjYW5fZG9uZSkKKwkJX19pb3JlbWFwX2V4cGxpY2l0KGhvc2UtPmlvX2Jhc2VfcGh5cywKKwkJCQkgICAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQsCisJCQkJICAgaG9zZS0+cGNpX2lvX3NpemUsCisJCQkJICAgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVEKTsKIH0KIAogdm9pZCBfX2RldmluaXQgcGNpX3NldHVwX3BoYl9pb19keW5hbWljKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKQEAgLTEwNzcsNiArMTA5Myw5IEBACiAJdW5zaWduZWQgbG9uZyBpb192aXJ0X29mZnNldDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAorCWlmIChzaXplID09IDApCisJCXJldHVybjsKKwogCWhvc2UtPmlvX2Jhc2VfdmlydCA9IF9faW9yZW1hcChob3NlLT5pb19iYXNlX3BoeXMsIHNpemUsCiAJCQkJCV9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCk7CiAJREJHKCJwaGIlZCBpb19iYXNlX3BoeXMgMHglbHggaW9fYmFzZV92aXJ0IDB4JWx4XG4iLApAQCAtMTA5NywzNSArMTExNiwyNyBAQAogCQkJCXVuc2lnbmVkIGxvbmcgKnN0YXJ0X3ZpcnQsIHVuc2lnbmVkIGxvbmcgKnNpemUpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7Ci0Jc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAotCWlmIChidXMtPnNlbGYpIHsKKwlpZiAoYnVzLT5zZWxmKQogCQlyZXMgPSBidXMtPnJlc291cmNlWzBdOwotCQlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhidXMtPnNlbGYsICZyZWdpb24sIHJlcyk7Ci0JCSpzdGFydF9waHlzID0gaG9zZS0+aW9fYmFzZV9waHlzICsgcmVnaW9uLnN0YXJ0OwotCQkqc3RhcnRfdmlydCA9ICh1bnNpZ25lZCBsb25nKSBob3NlLT5pb19iYXNlX3ZpcnQgKyAKLQkJCQlyZWdpb24uc3RhcnQ7Ci0JCWlmIChyZWdpb24uZW5kID4gcmVnaW9uLnN0YXJ0KSAKLQkJCSpzaXplID0gcmVnaW9uLmVuZCAtIHJlZ2lvbi5zdGFydCArIDE7Ci0JCWVsc2UgewotCQkJcHJpbnRrKCIlcygpOiB1bmV4cGVjdGVkIHJlZ2lvbiAweCVseC0+MHglbHhcbiIsIAotCQkJCQlfX0ZVTkNUSU9OX18sIHJlZ2lvbi5zdGFydCwgcmVnaW9uLmVuZCk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQkKLQl9IGVsc2UgeworCWVsc2UKIAkJLyogUm9vdCBCdXMgKi8KIAkJcmVzID0gJmhvc2UtPmlvX3Jlc291cmNlOwotCQkqc3RhcnRfcGh5cyA9IGhvc2UtPmlvX2Jhc2VfcGh5czsKLQkJKnN0YXJ0X3ZpcnQgPSAodW5zaWduZWQgbG9uZykgaG9zZS0+aW9fYmFzZV92aXJ0OwotCQlpZiAocmVzLT5lbmQgPiByZXMtPnN0YXJ0KQotCQkJKnNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwotCQllbHNlIHsKLQkJCXByaW50aygiJXMoKTogdW5leHBlY3RlZCByZWdpb24gMHglbHgtPjB4JWx4XG4iLCAKLQkJCQkJX19GVU5DVElPTl9fLCByZXMtPnN0YXJ0LCByZXMtPmVuZCk7Ci0JCQlyZXR1cm4gMTsKLQkJfQorCisJaWYgKHJlcy0+ZW5kID09IDAgJiYgcmVzLT5zdGFydCA9PSAwKQorCQlyZXR1cm4gMTsKKworCSpzdGFydF92aXJ0ID0gcGNpX2lvX2Jhc2UgKyByZXMtPnN0YXJ0OworCSpzdGFydF9waHlzID0gKnN0YXJ0X3ZpcnQgKyBob3NlLT5pb19iYXNlX3BoeXMKKwkJLSAodW5zaWduZWQgbG9uZykgaG9zZS0+aW9fYmFzZV92aXJ0OworCisJaWYgKHJlcy0+ZW5kID4gcmVzLT5zdGFydCkKKwkJKnNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCWVsc2UgeworCQlwcmludGsoIiVzKCk6IHVuZXhwZWN0ZWQgcmVnaW9uIDB4JWx4LT4weCVseFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgcmVzLT5zdGFydCwgcmVzLT5lbmQpOworCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG1jLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jCmluZGV4IDI0ZDdiN2MuLmVhMDRlMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG1jLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wbWMuYwpAQCAtMjAsOCArMjAsOCBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wbWMuaD4KIAotI2lmbmRlZiBNTUNSMF9QTUEwCi0jZGVmaW5lIE1NQ1IwX1BNQTAJMAorI2lmbmRlZiBNTUNSMF9QTUFPCisjZGVmaW5lIE1NQ1IwX1BNQU8JMAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGR1bW15X3BlcmYoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0zMCw3ICszMCw3IEBACiAJbXRwbXIoUE1STl9QTUdDMCwgbWZwbXIoUE1STl9QTUdDMCkgJiB+UE1HQzBfUE1JRSk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkgfHwgZGVmaW5lZChDT05GSUdfNnh4KQogCWlmIChjdXJfY3B1X3NwZWMtPnBtY190eXBlID09IFBQQ19QTUNfSUJNKQotCQltdHNwcihTUFJOX01NQ1IwLCBtZnNwcihTUFJOX01NQ1IwKSAmIH4oTU1DUjBfUE1YRXxNTUNSMF9QTUEwKSk7CisJCW10c3ByKFNQUk5fTU1DUjAsIG1mc3ByKFNQUk5fTU1DUjApICYgfihNTUNSMF9QTVhFfE1NQ1IwX1BNQU8pKTsKICNlbHNlCiAJbXRzcHIoU1BSTl9NTUNSMCwgbWZzcHIoU1BSTl9NTUNSMCkgJiB+TU1DUjBfUE1YRSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IGZmMjUyYWEuLmM5NmZhOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwpAQCAtNjYsNyArNjYsNiBAQAogRVhQT1JUX1NZTUJPTChJU0FfRE1BX1RIUkVTSE9MRCk7CiBFWFBPUlRfU1lNQk9MKERNQV9NT0RFX1JFQUQpOwogRVhQT1JUX1NZTUJPTChETUFfTU9ERV9XUklURSk7Ci1FWFBPUlRfU1lNQk9MKF9fZGl2NjRfMzIpOwogCiBFWFBPUlRfU1lNQk9MKGRvX3NpZ25hbCk7CiBFWFBPUlRfU1lNQk9MKHRyYW5zZmVyX3RvX2hhbmRsZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCBlNTA5YWFlLi42ZTJmMDM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKaW5kZXggY2FlZjU1NS4uYWY0MmRkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKQEAgLTcxNiwxMSArNzE2LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK3N0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQodW5zaWduZWQgbG9uZyBub2RlKQoreworCXVuc2lnbmVkIGxvbmcgbDsKKwl1MzIgKnByb3A7CisKKwlEQkcoIkxvb2tpbmcgZm9yIGluaXRyZCBwcm9wZXJ0aWVzLi4uICIpOworCisJcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGluaXRyZC1zdGFydCIsICZsKTsKKwlpZiAocHJvcCkgeworCQlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKG9mX3JlYWRfdWxvbmcocHJvcCwgbC80KSk7CisKKwkJcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGluaXRyZC1lbmQiLCAmbCk7CisJCWlmIChwcm9wKSB7CisJCQlpbml0cmRfZW5kID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJCV9fdmEob2ZfcmVhZF91bG9uZyhwcm9wLCBsLzQpKTsKKwkJCWluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7CisJCX0gZWxzZSB7CisJCQlpbml0cmRfc3RhcnQgPSAwOworCQl9CisJfQorCisJREJHKCJpbml0cmRfc3RhcnQ9MHglbHggIGluaXRyZF9lbmQ9MHglbHhcbiIsIGluaXRyZF9zdGFydCwgaW5pdHJkX2VuZCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZCh1bnNpZ25lZCBsb25nIG5vZGUpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5JVFJEICovCisKIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW4odW5zaWduZWQgbG9uZyBub2RlLAogCQkJCQkgICAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nICpscHJvcDsKLQl1MzIgKnByb3A7CiAJdW5zaWduZWQgbG9uZyBsOwogCWNoYXIgKnA7CiAKQEAgLTc2MiwyMSArNzkxLDcgQEAKICAgICAgICAgICAgICAgIGNyYXNoa19yZXMuZW5kID0gY3Jhc2hrX3Jlcy5zdGFydCArICpscHJvcCAtIDE7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCURCRygiTG9va2luZyBmb3IgaW5pdHJkIHByb3BlcnRpZXMuLi4gIik7Ci0JcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGluaXRyZC1zdGFydCIsICZsKTsKLQlpZiAocHJvcCkgewotCQlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKG9mX3JlYWRfdWxvbmcocHJvcCwgbC80KSk7Ci0JCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtZW5kIiwgJmwpOwotCQlpZiAocHJvcCkgewotCQkJaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKV9fdmEob2ZfcmVhZF91bG9uZyhwcm9wLCBsLzQpKTsKLQkJCWluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlpbml0cmRfc3RhcnQgPSAwOwotCQl9Ci0JfQotCURCRygiaW5pdHJkX3N0YXJ0PTB4JWx4ICBpbml0cmRfZW5kPTB4JWx4XG4iLCBpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLworCWVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZChub2RlKTsKIAogCS8qIFJldHJlaXZlIGNvbW1hbmQgbGluZSAqLwogIAlwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiYm9vdGFyZ3MiLCAmbCk7CkBAIC0xMTU2LDExICsxMTcxLDEyIEBACiAKIC8qKgogICoJb2ZfZmluZF9ub2RlX2J5X3R5cGUgLSBGaW5kIGEgbm9kZSBieSBpdHMgImRldmljZV90eXBlIiBwcm9wZXJ0eQotICoJQGZyb206CVRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tIG9yIE5VTEwsIHRoZSBub2RlCi0gKgkJeW91IHBhc3Mgd2lsbCBub3QgYmUgc2VhcmNoZWQsIG9ubHkgdGhlIG5leHQgb25lCi0gKgkJd2lsbDsgdHlwaWNhbGx5LCB5b3UgcGFzcyB3aGF0IHRoZSBwcmV2aW91cyBjYWxsCi0gKgkJcmV0dXJuZWQuIG9mX25vZGVfcHV0KCkgd2lsbCBiZSBjYWxsZWQgb24gaXQKLSAqCUBuYW1lOglUaGUgdHlwZSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdAorICoJQGZyb206CVRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLCBvciBOVUxMIHRvIHN0YXJ0IHNlYXJjaGluZworICoJCXRoZSBlbnRpcmUgZGV2aWNlIHRyZWUuIFRoZSBub2RlIHlvdSBwYXNzIHdpbGwgbm90IGJlCisgKgkJc2VhcmNoZWQsIG9ubHkgdGhlIG5leHQgb25lIHdpbGw7IHR5cGljYWxseSwgeW91IHBhc3MKKyAqCQl3aGF0IHRoZSBwcmV2aW91cyBjYWxsIHJldHVybmVkLiBvZl9ub2RlX3B1dCgpIHdpbGwgYmUKKyAqCQljYWxsZWQgb24gZnJvbSBmb3IgeW91LgorICoJQHR5cGU6CVRoZSB0eXBlIHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0CiAgKgogICoJUmV0dXJucyBhIG5vZGUgcG9pbnRlciB3aXRoIHJlZmNvdW50IGluY3JlbWVudGVkLCB1c2UKICAqCW9mX25vZGVfcHV0KCkgb24gaXQgd2hlbiBkb25lLgpAQCAtMTQ1Nyw2ICsxNDczLDExIEBACiAJbm9kZS0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAibmFtZSIsIE5VTEwpOwogCW5vZGUtPnR5cGUgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7CiAKKwlpZiAoIW5vZGUtPm5hbWUpCisJCW5vZGUtPm5hbWUgPSAiPE5VTEw+IjsKKwlpZiAoIW5vZGUtPnR5cGUpCisJCW5vZGUtPnR5cGUgPSAiPE5VTEw+IjsKKwogCWlmICghcGFyZW50KSB7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggZTI3ZDlkMS4uZDYwNDdjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC02MzUsNiArNjM1LDEyIEBACiAvKiBpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IHByb3BlcnR5IHN1cHBvcnRlZCAqLwogI2RlZmluZSBPVjVfRFJDT05GX01FTU9SWQkweDIwCiAjZGVmaW5lIE9WNV9MQVJHRV9QQUdFUwkJMHgxMAkvKiBsYXJnZSBwYWdlcyBzdXBwb3J0ZWQgKi8KKy8qIFBDSWUvTVNJIHN1cHBvcnQuICBXaXRob3V0IE1TSSBmdWxsIFBDSWUgaXMgbm90IHN1cHBvcnRlZCAqLworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisjZGVmaW5lIE9WNV9NU0kJCQkweDAxCS8qIFBDSWUvTVNJIHN1cHBvcnQgKi8KKyNlbHNlCisjZGVmaW5lIE9WNV9NU0kJCQkweDAwCisjZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KIAogLyoKICAqIFRoZSBhcmNoaXRlY3R1cmUgdmVjdG9yIGhhcyBhbiBhcnJheSBvZiBQVlIgbWFzay92YWx1ZSBwYWlycywKQEAgLTY3OSw3ICs2ODUsNyBAQAogCS8qIG9wdGlvbiB2ZWN0b3IgNTogUEFQUi9PRiBvcHRpb25zICovCiAJMyAtIDIsCQkJCS8qIGxlbmd0aCAqLwogCTAsCQkJCS8qIGRvbid0IGlnbm9yZSwgZG9uJ3QgaGFsdCAqLwotCU9WNV9MUEFSIHwgT1Y1X1NQTFBBUiB8IE9WNV9MQVJHRV9QQUdFUyB8IE9WNV9EUkNPTkZfTUVNT1JZLAorCU9WNV9MUEFSIHwgT1Y1X1NQTFBBUiB8IE9WNV9MQVJHRV9QQUdFUyB8IE9WNV9EUkNPTkZfTUVNT1JZIHwgT1Y1X01TSSwKIH07CiAKIC8qIE9sZCBtZXRob2QgLSBFTEYgaGVhZGVyIHdpdGggUFRfTk9URSBzZWN0aW9ucyAqLwpAQCAtOTY3LDcgKzk3Myw3IEBACiAgKiBJZiBwcm9ibGVtcyBzZWVtIHRvIHNob3cgdXAsIGl0IHdvdWxkIGJlIGEgZ29vZCBzdGFydCB0byB0cmFjawogICogdGhlbSBkb3duLgogICovCi1zdGF0aWMgdm9pZCByZXNlcnZlX21lbSh1NjQgYmFzZSwgdTY0IHNpemUpCitzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9tZW0odTY0IGJhc2UsIHU2NCBzaXplKQogewogCXU2NCB0b3AgPSBiYXNlICsgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGNudCA9IFJFTE9DKG1lbV9yZXNlcnZlX2NudCk7CkBAIC0yMTUzLDcgKzIxNTksNyBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMywxMiwwLCAzLDEzLDAsIDMsMTQsMCwgMywxNSwwIH07CiAJc3RydWN0IHN1YnN0X2VudHJ5IGVmaWthX3N1YnN0X3RhYmxlW10gPSB7CiAJCXsgIi8iLAkJCSJkZXZpY2VfdHlwZSIsCXByb3BfY3N0cigiZWZpa2EiKSB9LAotCQl7ICIvYnVpbHRpbiIsCQkiY29tcGF0aWJsZSIsCXByb3BfY3N0cigic29jIikgfSwKKwkJeyAiL2J1aWx0aW4iLAkJImRldmljZV90eXBlIiwJcHJvcF9jc3RyKCJzb2MiKSB9LAogCQl7ICIvYnVpbHRpbi9hdGEiLAkiY29tcGF0aWJsZSIsCXByb3BfY3N0cigibXBjNTIwMGItYXRhXDBtcGM1MjAwLWF0YSIpLCB9LAogCQl7ICIvYnVpbHRpbi9iZXN0Y29tbSIsCSJjb21wYXRpYmxlIiwJcHJvcF9jc3RyKCJtcGM1MjAwYi1iZXN0Y29tbVwwbXBjNTIwMC1iZXN0Y29tbSIpIH0sCiAJCXsgIi9idWlsdGluL2Jlc3Rjb21tIiwJImludGVycnVwdHMiLAlwcm9wX2Jjb21tX2lycSwgc2l6ZW9mKHByb3BfYmNvbW1faXJxKSB9LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21fcGFyc2UuYwppbmRleCBhYTQwYTUzLi4zNzg2ZGNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21fcGFyc2UuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21fcGFyc2UuYwpAQCAtMjQsNyArMjQsNyBAQAogLyogTWF4IGFkZHJlc3Mgc2l6ZSB3ZSBkZWFsIHdpdGggKi8KICNkZWZpbmUgT0ZfTUFYX0FERFJfQ0VMTFMJNAogI2RlZmluZSBPRl9DSEVDS19DT1VOVFMobmEsIG5zKQkoKG5hKSA+IDAgJiYgKG5hKSA8PSBPRl9NQVhfQUREUl9DRUxMUyAmJiBcCi0JCQkobnMpID4gMCkKKwkJCShucykgPj0gMCkKIAogc3RhdGljIHN0cnVjdCBvZl9idXMgKm9mX21hdGNoX2J1cyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKIHN0YXRpYyBpbnQgX19vZl9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LApAQCAtMTA0MiwzICsxMDQyLDI4IEBACiB9CiBFWFBPUlRfU1lNQk9MKG9mX2dldF9tYWNfYWRkcmVzcyk7CiAKK2ludCBvZl9pcnFfdG9fcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCwgc3RydWN0IHJlc291cmNlICpyKQoreworCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkZXYsIGluZGV4KTsKKworCS8qIE9ubHkgZGVyZWZlcmVuY2UgdGhlIHJlc291cmNlIGlmIGJvdGggdGhlCisJICogcmVzb3VyY2UgYW5kIHRoZSBpcnEgYXJlIHZhbGlkLiAqLworCWlmIChyICYmIGlycSAhPSBOT19JUlEpIHsKKwkJci0+c3RhcnQgPSByLT5lbmQgPSBpcnE7CisJCXItPmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7CisJfQorCisJcmV0dXJuIGlycTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9mX2lycV90b19yZXNvdXJjZSk7CisKK3ZvaWQgX19pb21lbSAqb2ZfaW9tYXAoc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IGluZGV4KQoreworCXN0cnVjdCByZXNvdXJjZSByZXM7CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgaW5kZXgsICZyZXMpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBpb3JlbWFwKHJlcy5zdGFydCwgMSArIHJlcy5lbmQgLSByZXMuc3RhcnQpOworfQorRVhQT1JUX1NZTUJPTChvZl9pb21hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwppbmRleCBjYzQ0YzdiLi5iZjc2NTYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KQEAgLTIxOSw2ICsyMTgsNyBAQAogCQlyZWdzLT5tc3IgfD0gTVNSX1NFOwogI2VuZGlmCiAJfQorCXNldF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1NJTkdMRVNURVApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTIzNCw2ICsyMzQsNyBAQAogCQlyZWdzLT5tc3IgJj0gfk1TUl9TRTsKICNlbmRpZgogCX0KKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1NJTkdMRVNURVApOwogfQogI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXByb2MuYwppbmRleCAxOTBiN2VkLi5mMmUzYmM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMKQEAgLTM3OSw3ICszNzksNyBAQAogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiBzdGF0aWMgaW50IHBwY19ydGFzX3Byb2dyZXNzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWlmIChwcm9ncmVzc19sZWQpCisJaWYgKHByb2dyZXNzX2xlZFswXSkKIAkJc2VxX3ByaW50ZihtLCAiJXNcbiIsIHByb2dyZXNzX2xlZCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwppbmRleCAzNzA4MDM3Li5lZDA3YTE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKQEAgLTUzMCwzICs1MzAsNDQgQEAKIHsKIAlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZwcGNfcGFuaWNfYmxvY2spOwogfQorCisjaWZkZWYgQ09ORklHX0NIRUNLX0NBQ0hFX0NPSEVSRU5DWQorLyoKKyAqIEZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIGNvbmZpZ3VyYWJsZSBjYWNoZS1jb2hlcmVuY3kuICBUaGlzIGZ1bmN0aW9uCisgKiBjaGVja3MgdGhhdCB0aGUgY2FjaGUgY29oZXJlbmN5IHNldHRpbmcgb2YgdGhlIGtlcm5lbCBtYXRjaGVzIHRoZSBzZXR0aW5nCisgKiBsZWZ0IGJ5IHRoZSBmaXJtd2FyZSwgYXMgaW5kaWNhdGVkIGluIHRoZSBkZXZpY2UgdHJlZS4gIFNpbmNlIGEgbWlzbWF0Y2gKKyAqIHdpbGwgZXZlbnR1YWxseSByZXN1bHQgaW4gRE1BIGZhaWx1cmVzLCB3ZSBwcmludCAqIGFuZCBlcnJvciBhbmQgY2FsbAorICogQlVHKCkgaW4gdGhhdCBjYXNlLgorICovCisKKyNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCisjZGVmaW5lIEtFUk5FTF9DT0hFUkVOQ1kJMAorI2Vsc2UKKyNkZWZpbmUgS0VSTkVMX0NPSEVSRU5DWQkxCisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgY2hlY2tfY2FjaGVfY29oZXJlbmN5KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwljb25zdCB2b2lkICpwcm9wOworCWludCBkZXZ0cmVlX2NvaGVyZW5jeTsKKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY29oZXJlbmN5LW9mZiIsIE5VTEwpOworCW9mX25vZGVfcHV0KG5wKTsKKworCWRldnRyZWVfY29oZXJlbmN5ID0gcHJvcCA/IDAgOiAxOworCisJaWYgKGRldnRyZWVfY29oZXJlbmN5ICE9IEtFUk5FTF9DT0hFUkVOQ1kpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkia2VybmVsIGNvaGVyZW5jeTolcyAhPSBkZXZpY2UgdHJlZV9jb2hlcmVuY3k6JXNcbiIsCisJCQlLRVJORUxfQ09IRVJFTkNZID8gIm9uIiA6ICJvZmYiLAorCQkJZGV2dHJlZV9jb2hlcmVuY3kgPyAib24iIDogIm9mZiIpOworCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChjaGVja19jYWNoZV9jb2hlcmVuY3kpOworI2VuZGlmIC8qIENPTkZJR19DSEVDS19DQUNIRV9DT0hFUkVOQ1kgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDZiNDA1YTMuLmRkMWRjYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCBmNzJlOGU4Li4xY2UwYWUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKaW5kZXggZDhlNTAzYi4uZDU3N2I3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCkBAIC0xNzYsMTAgKzE3NiwxMCBAQAogI2RlZmluZSBTTVBfQ0FMTF9USU1FT1VUCTgKIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSAnZ2VuZXJpYyBjYWxsIGZ1bmN0aW9uJyBJUEkgdG8gYWxsIG90aGVyIENQVXMKLSAqIGluIHRoZSBzeXN0ZW0uCisgKiBUaGVzZSBmdW5jdGlvbnMgc2VuZCBhICdnZW5lcmljIGNhbGwgZnVuY3Rpb24nIElQSSB0byBvdGhlciBvbmxpbmUKKyAqIENQVVMgaW4gdGhlIHN5c3RlbS4KICAqCi0gKiBbU1VNTUFSWV0gUnVuIGEgZnVuY3Rpb24gb24gYWxsIG90aGVyIENQVXMuCisgKiBbU1VNTUFSWV0gUnVuIGEgZnVuY3Rpb24gb24gb3RoZXIgQ1BVcy4KICAqIDxmdW5jPiBUaGUgZnVuY3Rpb24gdG8gcnVuLiBUaGlzIG11c3QgYmUgZmFzdCBhbmQgbm9uLWJsb2NraW5nLgogICogPGluZm8+IEFuIGFyYml0cmFyeSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLgogICogPG5vbmF0b21pYz4gY3VycmVudGx5IHVudXNlZC4KQEAgLTE5MCwxOCArMTkwLDE5IEBACiAgKiBZb3UgbXVzdCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyBvciBmcm9tIGEKICAqIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyIG9yIGZyb20gYSBib3R0b20gaGFsZiBoYW5kbGVyLgogICovCi1pbnQgc21wX2NhbGxfZnVuY3Rpb24gKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCBub25hdG9taWMsCi0JCSAgICAgICBpbnQgd2FpdCkKLXsgCitpbnQgc21wX2NhbGxfZnVuY3Rpb25fbWFwKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCBub25hdG9taWMsCisJCQlpbnQgd2FpdCwgY3B1bWFza190IG1hcCkKK3sKIAlzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCBkYXRhOwotCWludCByZXQgPSAtMSwgY3B1czsKKwlpbnQgcmV0ID0gLTEsIG51bV9jcHVzOworCWludCBjcHU7CiAJdTY0IHRpbWVvdXQ7CiAKIAkvKiBDYW4gZGVhZGxvY2sgd2hlbiBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCiAJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwogCiAJaWYgKHVubGlrZWx5KHNtcF9vcHMgPT0gTlVMTCkpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIHJldDsKIAogCWRhdGEuZnVuYyA9IGZ1bmM7CiAJZGF0YS5pbmZvID0gaW5mbzsKQEAgLTIxMyw0NiArMjE0LDU2IEBACiAJc3Bpbl9sb2NrKCZjYWxsX2xvY2spOwogCS8qIE11c3QgZ3JhYiBvbmxpbmUgY3B1IGNvdW50IHdpdGggcHJlZW1wdCBkaXNhYmxlZCwgb3RoZXJ3aXNlCiAJICogaXQgY2FuIGNoYW5nZS4gKi8KLQljcHVzID0gbnVtX29ubGluZV9jcHVzKCkgLSAxOwotCWlmICghY3B1cykgewotCQlyZXQgPSAwOwotCQlnb3RvIG91dDsKLQl9CisJbnVtX2NwdXMgPSBudW1fb25saW5lX2NwdXMoKSAtIDE7CisJaWYgKCFudW1fY3B1cykKKwkJZ290byBkb25lOworCisJLyogcmVtb3ZlICdzZWxmJyBmcm9tIHRoZSBtYXAgKi8KKwlpZiAoY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFwKSkKKwkJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFwKTsKKworCS8qIHNhbml0eSBjaGVjayB0aGUgbWFwLCByZW1vdmUgYW55IG5vbi1vbmxpbmUgcHJvY2Vzc29ycy4gKi8KKwljcHVzX2FuZChtYXAsIG1hcCwgY3B1X29ubGluZV9tYXApOworCWlmIChjcHVzX2VtcHR5KG1hcCkpCisJCWdvdG8gZG9uZTsKIAogCWNhbGxfZGF0YSA9ICZkYXRhOwogCXNtcF93bWIoKTsKLQkvKiBTZW5kIGEgbWVzc2FnZSB0byBhbGwgb3RoZXIgQ1BVcyBhbmQgd2FpdCBmb3IgdGhlbSB0byByZXNwb25kICovCi0Jc21wX29wcy0+bWVzc2FnZV9wYXNzKE1TR19BTExfQlVUX1NFTEYsIFBQQ19NU0dfQ0FMTF9GVU5DVElPTik7CisJLyogU2VuZCBhIG1lc3NhZ2UgdG8gYWxsIENQVXMgaW4gdGhlIG1hcCAqLworCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFwKQorCQlzbXBfb3BzLT5tZXNzYWdlX3Bhc3MoY3B1LCBQUENfTVNHX0NBTExfRlVOQ1RJT04pOwogCiAJdGltZW91dCA9IGdldF90YigpICsgKHU2NCkgU01QX0NBTExfVElNRU9VVCAqIHRiX3RpY2tzX3Blcl9zZWM7CiAKLQkvKiBXYWl0IGZvciByZXNwb25zZSAqLwotCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5zdGFydGVkKSAhPSBjcHVzKSB7CisJLyogV2FpdCBmb3IgaW5kaWNhdGlvbiB0aGF0IHRoZXkgaGF2ZSByZWNlaXZlZCB0aGUgbWVzc2FnZSAqLworCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5zdGFydGVkKSAhPSBudW1fY3B1cykgewogCQlITVRfbG93KCk7CiAJCWlmIChnZXRfdGIoKSA+PSB0aW1lb3V0KSB7CiAJCQlwcmludGsoInNtcF9jYWxsX2Z1bmN0aW9uIG9uIGNwdSAlZDogb3RoZXIgY3B1cyBub3QgIgotCQkJICAgICAgICJyZXNwb25kaW5nICglZClcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwKLQkJCSAgICAgICBhdG9taWNfcmVhZCgmZGF0YS5zdGFydGVkKSk7CisJCQkJInJlc3BvbmRpbmcgKCVkKVxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJCWF0b21pY19yZWFkKCZkYXRhLnN0YXJ0ZWQpKTsKIAkJCWRlYnVnZ2VyKE5VTEwpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKKwkvKiBvcHRpb25hbGx5IHdhaXQgZm9yIHRoZSBDUFVzIHRvIGNvbXBsZXRlICovCiAJaWYgKHdhaXQpIHsKLQkJd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmZpbmlzaGVkKSAhPSBjcHVzKSB7CisJCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5maW5pc2hlZCkgIT0gbnVtX2NwdXMpIHsKIAkJCUhNVF9sb3coKTsKIAkJCWlmIChnZXRfdGIoKSA+PSB0aW1lb3V0KSB7CiAJCQkJcHJpbnRrKCJzbXBfY2FsbF9mdW5jdGlvbiBvbiBjcHUgJWQ6IG90aGVyICIKLQkJCQkgICAgICAgImNwdXMgbm90IGZpbmlzaGluZyAoJWQvJWQpXG4iLAotCQkJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksCi0JCQkJICAgICAgIGF0b21pY19yZWFkKCZkYXRhLmZpbmlzaGVkKSwKLQkJCQkgICAgICAgYXRvbWljX3JlYWQoJmRhdGEuc3RhcnRlZCkpOworCQkJCQkiY3B1cyBub3QgZmluaXNoaW5nICglZC8lZClcbiIsCisJCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSwKKwkJCQkJYXRvbWljX3JlYWQoJmRhdGEuZmluaXNoZWQpLAorCQkJCQlhdG9taWNfcmVhZCgmZGF0YS5zdGFydGVkKSk7CiAJCQkJZGVidWdnZXIoTlVMTCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KIAl9CiAKKyBkb25lOgogCXJldCA9IDA7CiAKICBvdXQ6CkBAIC0yNjIsOCArMjczLDMwIEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IHNtcF9jYWxsX2Z1bmN0aW9uKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCBub25hdG9taWMsCisJCQlpbnQgd2FpdCkKK3sKKwlyZXR1cm4gc21wX2NhbGxfZnVuY3Rpb25fbWFwKGZ1bmMsaW5mbyxub25hdG9taWMsd2FpdCxjcHVfb25saW5lX21hcCk7Cit9CiBFWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uKTsKIAoraW50IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShpbnQgY3B1LCB2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgbm9uYXRvbWljLAorCQkJaW50IHdhaXQpCit7CisJY3B1bWFza190IG1hcCA9IENQVV9NQVNLX05PTkU7CisJaW50IHJldCA9IC1FQlVTWTsKKworCWlmICghY3B1X29ubGluZShjcHUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNwdV9zZXQoY3B1LCBtYXApOworCWlmIChjcHUgIT0gZ2V0X2NwdSgpKQorCQlyZXQgPSBzbXBfY2FsbF9mdW5jdGlvbl9tYXAoZnVuYyxpbmZvLG5vbmF0b21pYyx3YWl0LG1hcCk7CisJcHV0X2NwdSgpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSk7CisKIHZvaWQgc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KHZvaWQpCiB7CiAJdm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3dzdXNwLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YjdiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcC5jCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb21tb24gcG93ZXJwYyBzdXNwZW5kIGNvZGUgZm9yIDMyIGFuZCA2NCBiaXRzCisgKgorICogQ29weXJpZ2h0IDIwMDcJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisKK3ZvaWQgc2F2ZV9wcm9jZXNzb3Jfc3RhdGUodm9pZCkKK3sKKwkvKgorCSAqIGZsdXNoIG91dCBhbGwgdGhlIHNwZWNpYWwgcmVnaXN0ZXJzIHNvIHdlIGRvbid0IG5lZWQKKwkgKiB0byBzYXZlIHRoZW0gaW4gdGhlIHNuYXBzaG90CisJICovCisJZmx1c2hfZnBfdG9fdGhyZWFkKGN1cnJlbnQpOworCWZsdXNoX2FsdGl2ZWNfdG9fdGhyZWFkKGN1cnJlbnQpOworCWZsdXNoX3NwZV90b190aHJlYWQoY3VycmVudCk7CisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwloYXJkX2lycV9kaXNhYmxlKCk7CisjZW5kaWYKKworfQorCit2b2lkIHJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1BQQzMyCisJc2V0X2NvbnRleHQoY3VycmVudC0+YWN0aXZlX21tLT5jb250ZXh0LmlkLCBjdXJyZW50LT5hY3RpdmVfbW0tPnBnZCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3dzdXNwXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF82NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmM2YwNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF82NC5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBQb3dlclBDIDY0LWJpdCBzd3N1c3AgaW1wbGVtZW50YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgMjAwNiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIEdQTHYyCisgKi8KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW9tbXUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKwordm9pZCBkb19hZnRlcl9jb3B5YmFjayh2b2lkKQoreworCWlvbW11X3Jlc3RvcmUoKTsKKwl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CisJbWIoKTsKK30KKwordm9pZCBfaW9tbXVfc2F2ZSh2b2lkKQoreworCWlvbW11X3NhdmUoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3dzdXNwX2FzbTY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF9hc202NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTJjM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF9hc202NC5TCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogUG93ZXJQQyA2NC1iaXQgc3dzdXNwIGltcGxlbWVudGF0aW9uCisgKgorICogQ29weXJpZ2h0IDIwMDYgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBHUEx2MgorICovCisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKworLyoKKyAqIFN0cnVjdHVyZSBmb3Igc3RvcmluZyBDUFUgcmVnaXN0ZXJzIG9uIHRoZSBzYXZlIGFyZWEuCisgKi8KKyNkZWZpbmUgU0xfcjEJCTB4MDAJLyogc3RhY2sgcG9pbnRlciAqLworI2RlZmluZSBTTF9QQwkJMHgwOAorI2RlZmluZSBTTF9NU1IJCTB4MTAKKyNkZWZpbmUgU0xfU0RSMQkJMHgxOAorI2RlZmluZSBTTF9YRVIJCTB4MjAKKyNkZWZpbmUgU0xfVEIJCTB4NDAKKyNkZWZpbmUgU0xfcjIJCTB4NDgKKyNkZWZpbmUgU0xfQ1IJCTB4NTAKKyNkZWZpbmUgU0xfTFIJCTB4NTgKKyNkZWZpbmUgU0xfcjEyCQkweDYwCisjZGVmaW5lIFNMX3IxMwkJMHg2OAorI2RlZmluZSBTTF9yMTQJCTB4NzAKKyNkZWZpbmUgU0xfcjE1CQkweDc4CisjZGVmaW5lIFNMX3IxNgkJMHg4MAorI2RlZmluZSBTTF9yMTcJCTB4ODgKKyNkZWZpbmUgU0xfcjE4CQkweDkwCisjZGVmaW5lIFNMX3IxOQkJMHg5OAorI2RlZmluZSBTTF9yMjAJCTB4YTAKKyNkZWZpbmUgU0xfcjIxCQkweGE4CisjZGVmaW5lIFNMX3IyMgkJMHhiMAorI2RlZmluZSBTTF9yMjMJCTB4YjgKKyNkZWZpbmUgU0xfcjI0CQkweGMwCisjZGVmaW5lIFNMX3IyNQkJMHhjOAorI2RlZmluZSBTTF9yMjYJCTB4ZDAKKyNkZWZpbmUgU0xfcjI3CQkweGQ4CisjZGVmaW5lIFNMX3IyOAkJMHhlMAorI2RlZmluZSBTTF9yMjkJCTB4ZTgKKyNkZWZpbmUgU0xfcjMwCQkweGYwCisjZGVmaW5lIFNMX3IzMQkJMHhmOAorI2RlZmluZSBTTF9TSVpFCQlTTF9yMzErOAorCisvKiB0aGVzZSBtYWNyb3MgcmVseSBvbiB0aGUgc2F2ZSBhcmVhIGJlaW5nCisgKiBwb2ludGVkIHRvIGJ5IHIxMSAqLworI2RlZmluZSBTQVZFX1NQRUNJQUwoc3BlY2lhbCkJCVwKKwltZiMjc3BlY2lhbAlyMAkJO1wKKwlzdGQJcjAsIFNMXyMjc3BlY2lhbChyMTEpCisjZGVmaW5lIFJFU1RPUkVfU1BFQ0lBTChzcGVjaWFsKQlcCisJbGQJcjAsIFNMXyMjc3BlY2lhbChyMTEpCTtcCisJbXQjI3NwZWNpYWwJcjAKKyNkZWZpbmUgU0FWRV9SRUdJU1RFUihyZWcpCQlcCisJc3RkCXJlZywgU0xfIyNyZWcocjExKQorI2RlZmluZSBSRVNUT1JFX1JFR0lTVEVSKHJlZykJCVwKKwlsZAlyZWcsIFNMXyMjcmVnKHIxMSkKKworLyogc3BhY2UgZm9yIHN0b3JpbmcgY3B1IHN0YXRlICovCisJLnNlY3Rpb24gLmRhdGEKKwkuYWxpZ24gIDUKK3N3c3VzcF9zYXZlX2FyZWE6CisJLnNwYWNlIFNMX1NJWkUKKworCS5zZWN0aW9uICIudG9jIiwiYXciCitzd3N1c3Bfc2F2ZV9hcmVhX3B0cjoKKwkudGMJc3dzdXNwX3NhdmVfYXJlYVtUQ10sc3dzdXNwX3NhdmVfYXJlYQorcmVzdG9yZV9wYmxpc3RfcHRyOgorCS50YwlyZXN0b3JlX3BibGlzdFtUQ10scmVzdG9yZV9wYmxpc3QKKworCS5zZWN0aW9uIC50ZXh0CisJLmFsaWduICA1CitfR0xPQkFMKHN3c3VzcF9hcmNoX3N1c3BlbmQpCisJbGQJcjExLHN3c3VzcF9zYXZlX2FyZWFfcHRyQHRvYyhyMikKKwlTQVZFX1NQRUNJQUwoTFIpCisJU0FWRV9SRUdJU1RFUihyMSkKKwlTQVZFX1NQRUNJQUwoQ1IpCisJU0FWRV9TUEVDSUFMKFRCKQorCVNBVkVfUkVHSVNURVIocjIpCisJU0FWRV9SRUdJU1RFUihyMTIpCisJU0FWRV9SRUdJU1RFUihyMTMpCisJU0FWRV9SRUdJU1RFUihyMTQpCisJU0FWRV9SRUdJU1RFUihyMTUpCisJU0FWRV9SRUdJU1RFUihyMTYpCisJU0FWRV9SRUdJU1RFUihyMTcpCisJU0FWRV9SRUdJU1RFUihyMTgpCisJU0FWRV9SRUdJU1RFUihyMTkpCisJU0FWRV9SRUdJU1RFUihyMjApCisJU0FWRV9SRUdJU1RFUihyMjEpCisJU0FWRV9SRUdJU1RFUihyMjIpCisJU0FWRV9SRUdJU1RFUihyMjMpCisJU0FWRV9SRUdJU1RFUihyMjQpCisJU0FWRV9SRUdJU1RFUihyMjUpCisJU0FWRV9SRUdJU1RFUihyMjYpCisJU0FWRV9SRUdJU1RFUihyMjcpCisJU0FWRV9SRUdJU1RFUihyMjgpCisJU0FWRV9SRUdJU1RFUihyMjkpCisJU0FWRV9SRUdJU1RFUihyMzApCisJU0FWRV9SRUdJU1RFUihyMzEpCisJU0FWRV9TUEVDSUFMKE1TUikKKwlTQVZFX1NQRUNJQUwoU0RSMSkKKwlTQVZFX1NQRUNJQUwoWEVSKQorCisJLyogd2UgcHVzaCB0aGUgc3RhY2sgdXAgMTI4IGJ5dGVzIGJ1dCBkb24ndCBzdG9yZSB0aGUKKwkgKiBzdGFjayBwb2ludGVyIG9uIHRoZSBzdGFjayBsaWtlIGEgcmVhbCBzdGFja2ZyYW1lICovCisJYWRkaQlyMSxyMSwtMTI4CisKKwlibCBfaW9tbXVfc2F2ZQorCWJsIHN3c3VzcF9zYXZlCisKKwkvKiByZXN0b3JlIExSICovCisJbGQJcjExLHN3c3VzcF9zYXZlX2FyZWFfcHRyQHRvYyhyMikKKwlSRVNUT1JFX1NQRUNJQUwoTFIpCisJYWRkaQlyMSxyMSwxMjgKKworCWJscgorCisvKiBSZXN1bWUgY29kZSAqLworX0dMT0JBTChzd3N1c3BfYXJjaF9yZXN1bWUpCisJLyogU3RvcCBwZW5kaW5nIGFsaXR2ZWMgc3RyZWFtcyBhbmQgbWVtb3J5IGFjY2Vzc2VzICovCitCRUdJTl9GVFJfU0VDVElPTgorCURTU0FMTAorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQUxUSVZFQykKKwlzeW5jCisKKwlsZAlyMTIscmVzdG9yZV9wYmxpc3RfcHRyQHRvYyhyMikKKwlsZAlyMTIsMChyMTIpCisKKwljbXBkaQlyMTIsMAorCWJlcS0Jbm90aGluZ190b19jb3B5CisJbGkJcjE1LDUxMgorY29weWxvb3A6CisJbGQJcjEzLHBiZV9hZGRyZXNzKHIxMikKKwlsZAlyMTQscGJlX29yaWdfYWRkcmVzcyhyMTIpCisKKwltdGN0cglyMTUKKwlsaQlyMTAsMAorY29weV9wYWdlX2xvb3A6CisJbGR4CXIwLHIxMCxyMTMKKwlzdGR4CXIwLHIxMCxyMTQKKwlhZGRpCXIxMCxyMTAsOAorCWJkbnogY29weV9wYWdlX2xvb3AKKworCWxkCXIxMixwYmVfbmV4dChyMTIpCisJY21wZGkJcjEyLDAKKwlibmUrCWNvcHlsb29wCitub3RoaW5nX3RvX2NvcHk6CisKKwkvKiBmbHVzaCBjYWNoZXMgKi8KKwlsaXMJcjMsIDB4MTAKKwltdGN0cglyMworCWxpCXIzLCAwCisJb3JpCXIzLCByMywgQ09ORklHX0tFUk5FTF9TVEFSVD4+NDgKKwlsaQlyMCwgNDgKKwlzbGQJcjMsIHIzLCByMAorCWxpCXIwLCAwCisxOgorCWRjYmYJcjAscjMKKwlhZGRpCXIzLHIzLDB4MjAKKwliZG56CTFiCisKKwlzeW5jCisKKwl0bGJpYQorCisJbGQJcjExLHN3c3VzcF9zYXZlX2FyZWFfcHRyQHRvYyhyMikKKworCVJFU1RPUkVfU1BFQ0lBTChDUikKKworCS8qIHJlc3RvcmUgdGltZWJhc2UgKi8KKwkvKiBsb2FkIHNhdmVkIHRiICovCisJbGQJcjEsIFNMX1RCKHIxMSkKKwkvKiBnZXQgdXBwZXIgMzIgYml0cyBvZiBpdCAqLworCXNyZGkJcjIsIHIxLCAzMgorCS8qIGNsZWFyIHRiIGxvd2VyIHRvIGF2b2lkIHdyYXAgKi8KKwlsaQlyMCwgMAorCW10dGJsCXIwCisJLyogc2V0IHRiIHVwcGVyICovCisJbXR0YnUJcjIKKwkvKiBzZXQgdGIgbG93ZXIgKi8KKwltdHRibAlyMQorCisJLyogcmVzdG9yZSByZWdpc3RlcnMgKi8KKwlSRVNUT1JFX1JFR0lTVEVSKHIxKQorCVJFU1RPUkVfUkVHSVNURVIocjIpCisJUkVTVE9SRV9SRUdJU1RFUihyMTIpCisJUkVTVE9SRV9SRUdJU1RFUihyMTMpCisJUkVTVE9SRV9SRUdJU1RFUihyMTQpCisJUkVTVE9SRV9SRUdJU1RFUihyMTUpCisJUkVTVE9SRV9SRUdJU1RFUihyMTYpCisJUkVTVE9SRV9SRUdJU1RFUihyMTcpCisJUkVTVE9SRV9SRUdJU1RFUihyMTgpCisJUkVTVE9SRV9SRUdJU1RFUihyMTkpCisJUkVTVE9SRV9SRUdJU1RFUihyMjApCisJUkVTVE9SRV9SRUdJU1RFUihyMjEpCisJUkVTVE9SRV9SRUdJU1RFUihyMjIpCisJUkVTVE9SRV9SRUdJU1RFUihyMjMpCisJUkVTVE9SRV9SRUdJU1RFUihyMjQpCisJUkVTVE9SRV9SRUdJU1RFUihyMjUpCisJUkVTVE9SRV9SRUdJU1RFUihyMjYpCisJUkVTVE9SRV9SRUdJU1RFUihyMjcpCisJUkVTVE9SRV9SRUdJU1RFUihyMjgpCisJUkVTVE9SRV9SRUdJU1RFUihyMjkpCisJUkVTVE9SRV9SRUdJU1RFUihyMzApCisJUkVTVE9SRV9SRUdJU1RFUihyMzEpCisJLyogY2FuJ3QgdXNlIFJFU1RPUkVfU1BFQ0lBTChNU1IpICovCisJbGQJcjAsIFNMX01TUihyMTEpCisJbXRtc3JkCXIwLCAwCisJUkVTVE9SRV9TUEVDSUFMKFNEUjEpCisJUkVTVE9SRV9TUEVDSUFMKFhFUikKKworCXN5bmMKKworCWFkZGkJcjEscjEsLTEyOAorCWJsCXNsYl9mbHVzaF9hbmRfcmVib2x0CisJYmwJZG9fYWZ0ZXJfY29weWJhY2sKKwlhZGRpCXIxLHIxLDEyOAorCisJbGQJcjExLHN3c3VzcF9zYXZlX2FyZWFfcHRyQHRvYyhyMikKKwlSRVNUT1JFX1NQRUNJQUwoTFIpCisKKwlsaQlyMywgMAorCWJscgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy5jCmluZGV4IGQzNTg4NjYuLmZjNjY0N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tc2cuaD4KICNpbmNsdWRlIDxsaW51eC9zaG0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwppbmRleCA5MzNlMjE0Li42ODk5MWMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCkBAIC0zNDIsMTAgKzM0MiwxMiBAQAogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKIAkJcmVnaXN0ZXJfY3B1X29ubGluZShjcHUpOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQl1bnJlZ2lzdGVyX2NwdV9vbmxpbmUoY3B1KTsKIAkJYnJlYWs7CiAjZW5kaWYKQEAgLTQ5OSw0ICs1MDEsNCBAQAogCiAJcmV0dXJuIDA7CiB9Ci1fX2luaXRjYWxsKHRvcG9sb2d5X2luaXQpOworc3Vic3lzX2luaXRjYWxsKHRvcG9sb2d5X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA3Y2VkZWY4Li4yYzg1NjRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtNzExLDMwICs3MTEsMTUgQEAKIHZvaWQgX19pbml0IHNtcF9zcGFjZV90aW1lcnModW5zaWduZWQgaW50IG1heF9jcHVzKQogewogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgaGFsZiA9IHRiX3RpY2tzX3Blcl9qaWZmeSAvIDI7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB0Yl90aWNrc19wZXJfamlmZnkgLyBtYXhfY3B1czsKIAl1NjQgcHJldmlvdXNfdGIgPSBwZXJfY3B1KGxhc3RfamlmZnksIGJvb3RfY3B1aWQpOwogCiAJLyogbWFrZSBzdXJlIHRiID4gcGVyX2NwdShsYXN0X2ppZmZ5LCBjcHUpIGZvciBhbGwgY3B1cyBhbHdheXMgKi8KIAlwcmV2aW91c190YiAtPSB0Yl90aWNrc19wZXJfamlmZnk7Ci0JLyoKLQkgKiBUaGUgc3RvbGVuIHRpbWUgY2FsY3VsYXRpb24gZm9yIFBPV0VSNSBzaGFyZWQtcHJvY2Vzc29yIExQQVIKLQkgKiBzeXN0ZW1zIHdvcmtzIGJldHRlciBpZiB0aGUgdHdvIHRocmVhZHMnIHRpbWViYXNlIGludGVycnVwdHMKLQkgKiBhcmUgc3RhZ2dlcmVkIGJ5IGhhbGYgYSBqaWZmeSB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4KLQkgKi8KKwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCWlmIChpID09IGJvb3RfY3B1aWQpCiAJCQljb250aW51ZTsKLQkJaWYgKGkgPT0gKGJvb3RfY3B1aWQgXiAxKSkKLQkJCXBlcl9jcHUobGFzdF9qaWZmeSwgaSkgPQotCQkJCXBlcl9jcHUobGFzdF9qaWZmeSwgYm9vdF9jcHVpZCkgLSBoYWxmOwotCQllbHNlIGlmIChpICYgMSkKLQkJCXBlcl9jcHUobGFzdF9qaWZmeSwgaSkgPQotCQkJCXBlcl9jcHUobGFzdF9qaWZmeSwgaSBeIDEpICsgaGFsZjsKLQkJZWxzZSB7Ci0JCQlwcmV2aW91c190YiArPSBvZmZzZXQ7Ci0JCQlwZXJfY3B1KGxhc3RfamlmZnksIGkpID0gcHJldmlvdXNfdGI7Ci0JCX0KKwkJcGVyX2NwdShsYXN0X2ppZmZ5LCBpKSA9IHByZXZpb3VzX3RiOwogCX0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IGY3ODYyMjIuLmJmNjQ0NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCi0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC03MiwyMCArNzIsNiBAQAogRVhQT1JUX1NZTUJPTChfX2RlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIpOwogI2VuZGlmCiAKLUFUT01JQ19OT1RJRklFUl9IRUFEKHBvd2VycGNfZGllX2NoYWluKTsKLQotaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQotewotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBvd2VycGNfZGllX2NoYWluLCBuYik7Ci19Ci1FWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2RpZV9ub3RpZmllcik7Ci0KLWludCB1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQotewotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmcG93ZXJwY19kaWVfY2hhaW4sIG5iKTsKLX0KLUVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIpOwotCiAvKgogICogVHJhcCAmIEV4Y2VwdGlvbiBzdXBwb3J0CiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMKaW5kZXggN2UwOTcxOC4uODc3MDNkZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMKQEAgLTUxLDYgKzUxLDkgQEAKIAl1ZGJnX2luaXRfcGFzX3JlYWxtb2RlKCk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19CT09UWF9URVhUKQogCXVkYmdfaW5pdF9idGV4dCgpOworI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eCkKKwkvKiBQUEM0NHggZGVidWcgKi8KKwl1ZGJnX2luaXRfNDR4X2FzMSgpOwogI2VuZGlmCiB9CiAKQEAgLTE0MiwyOSArMTQ1LDIyIEBACiBzdGF0aWMgc3RydWN0IGNvbnNvbGUgdWRiZ19jb25zb2xlID0gewogCS5uYW1lCT0gInVkYmciLAogCS53cml0ZQk9IHVkYmdfY29uc29sZV93cml0ZSwKLQkuZmxhZ3MJPSBDT05fUFJJTlRCVUZGRVIgfCBDT05fRU5BQkxFRCwKKwkuZmxhZ3MJPSBDT05fUFJJTlRCVUZGRVIgfCBDT05fRU5BQkxFRCB8IENPTl9CT09ULAogCS5pbmRleAk9IC0xLAogfTsKIAogc3RhdGljIGludCBlYXJseV9jb25zb2xlX2luaXRpYWxpemVkOwogCi12b2lkIF9faW5pdCBkaXNhYmxlX2Vhcmx5X3ByaW50ayh2b2lkKQotewotCWlmICghZWFybHlfY29uc29sZV9pbml0aWFsaXplZCkKLQkJcmV0dXJuOwotCWlmIChzdHJzdHIoYm9vdF9jb21tYW5kX2xpbmUsICJ1ZGJnLWltbW9ydGFsIikpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZWFybHkgY29uc29sZSBpbW1vcnRhbCAhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQl1bnJlZ2lzdGVyX2NvbnNvbGUoJnVkYmdfY29uc29sZSk7Ci0JZWFybHlfY29uc29sZV9pbml0aWFsaXplZCA9IDA7Ci19Ci0KIC8qIGNhbGxlZCBieSBzZXR1cF9zeXN0ZW0gKi8KIHZvaWQgcmVnaXN0ZXJfZWFybHlfdWRiZ19jb25zb2xlKHZvaWQpCiB7CiAJaWYgKGVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQpCiAJCXJldHVybjsKKworCWlmIChzdHJzdHIoYm9vdF9jb21tYW5kX2xpbmUsICJ1ZGJnLWltbW9ydGFsIikpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZWFybHkgY29uc29sZSBpbW1vcnRhbCAhXG4iKTsKKwkJdWRiZ19jb25zb2xlLmZsYWdzICY9IH5DT05fQk9PVDsKKwl9CiAJZWFybHlfY29uc29sZV9pbml0aWFsaXplZCA9IDE7CiAJcmVnaXN0ZXJfY29uc29sZSgmdWRiZ19jb25zb2xlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMKaW5kZXggYTk2M2Y2NS4uN2FmYWI1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMKQEAgLTE5MSwzICsxOTEsMjYgQEAKIAl1ZGJnX2dldGNfcG9sbCA9IE5VTEw7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19NQVBMRSAqLworCisjaWZkZWYgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHgKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvNDR4LzQ0eC5oPgorCitzdGF0aWMgdm9pZCB1ZGJnXzQ0eF9hczFfcHV0YyhjaGFyIGMpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgeworCQl3aGlsZSAoKGFzMV9yZWFkYigmdWRiZ19jb21wb3J0LT5sc3IpICYgTFNSX1RIUkUpID09IDApCisJCQkvKiB3YWl0IGZvciBpZGxlICovOworCQlhczFfd3JpdGViKGMsICZ1ZGJnX2NvbXBvcnQtPnRocik7IGVpZWlvKCk7CisJCWlmIChjID09ICdcbicpCisJCQl1ZGJnXzQ0eF9hczFfcHV0YygnXHInKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IHVkYmdfaW5pdF80NHhfYXMxKHZvaWQpCit7CisJdWRiZ19jb21wb3J0ID0KKwkJKHZvbGF0aWxlIHN0cnVjdCBOUzE2NTUwIF9faW9tZW0gKilQUEM0NHhfRUFSTFlfREVCVUdfVklSVEFERFI7CisKKwl1ZGJnX3B1dGMgPSB1ZGJnXzQ0eF9hczFfcHV0YzsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwppbmRleCBlNDZjMzFiLi40MjQ1NTc5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwppbmRleCBiMmMxYjY3YS4uNjJjMWJjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIHsKIAl3aGlsZSAoaWRzLT50eXBlWzBdICE9ICdcMCcpIHsKIAkJaWYgKChzdHJuY21wKGRldi0+dHlwZSwgaWRzLT50eXBlLCBzdHJsZW4oaWRzLT50eXBlKSkgPT0gMCkgJiYKLQkJICAgIGRldmljZV9pc19jb21wYXRpYmxlKGRldi0+ZGV2LmFyY2hkYXRhLm9mX25vZGUsCisJCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtPmRldi5hcmNoZGF0YS5vZl9ub2RlLAogCQkJCQkgaWRzLT5jb21wYXQpKQogCQkJcmV0dXJuIGlkczsKIAkJaWRzKys7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMTMyMDY3My4uMjFjMzlmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMzQsNyArMzQsNyBAQAogCS8qIFRleHQgYW5kIGdvdHMgKi8KIAkudGV4dCA6IHsKIAkJX3RleHQgPSAuOwotCQkqKC50ZXh0IC50ZXh0LiopCisJCVRFWFRfVEVYVAogCQlTQ0hFRF9URVhUCiAJCUxPQ0tfVEVYVAogCQlLUFJPQkVTX1RFWFQKQEAgLTE2Nyw3ICsxNjcsNyBAQAogI2lmZGVmIENPTkZJR19QUEMzMgogCS5kYXRhICAgIDoKIAl7Ci0JCSooLmRhdGEpCisJCURBVEFfREFUQQogCQkqKC5zZGF0YSkKIAkJKiguZ290LnBsdCkgKiguZ290KQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvbGliL01ha2VmaWxlCmluZGV4IDQ1MDI1OGQuLjBhNDg2ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9NYWtlZmlsZQpAQCAtMjMsNyArMjMsNSBAQAogZW5kaWYKIAogIyBUZW1wb3JhcnkgaGFjayB1bnRpbCB3ZSBoYXZlIG1pZ3JhdGVkIHRvIGFzbS1wb3dlcnBjCi1pZmVxICgkKENPTkZJR19QUENfTUVSR0UpLHkpCiBvYmotJChDT05GSUdfOHh4KQkrPSByaGVhcC5vCiBvYmotJChDT05GSUdfQ1BNMikJKz0gcmhlYXAubwotZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMgYi9hcmNoL3Bvd2VycGMvbGliL2RtYS1ub25jb2hlcmVudC5jCmluZGV4IDQ4ZjNkMTMuLjY2NTZkNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9kbWEtbm9uY29oZXJlbnQuYwpAQCAtMzA2LDEzICszMDYsMTUgQEAKIHN0YXRpYyBpbnQgX19pbml0IGRtYV9hbGxvY19pbml0KHZvaWQpCiB7CiAJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOwogCXBtZF90ICpwbWQ7CiAJcHRlX3QgKnB0ZTsKIAlpbnQgcmV0ID0gMDsKIAogCWRvIHsKIAkJcGdkID0gcGdkX29mZnNldCgmaW5pdF9tbSwgQ09OU0lTVEVOVF9CQVNFKTsKLQkJcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBwZ2QsIENPTlNJU1RFTlRfQkFTRSk7CisJCXB1ZCA9IHB1ZF9hbGxvYygmaW5pdF9tbSwgcGdkLCBDT05TSVNURU5UX0JBU0UpOworCQlwbWQgPSBwbWRfYWxsb2MoJmluaXRfbW0sIHB1ZCwgQ09OU0lTVEVOVF9CQVNFKTsKIAkJaWYgKCFwbWQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHBtZCB0YWJsZXNcbiIsIF9fZnVuY19fKTsKIAkJCXJldCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMgYi9hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMKaW5kZXggNmM1YzVkZC4uMTgwZWUyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvcmhlYXAuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJaW5mby0+ZW1wdHlfc2xvdHMtLTsKIAogCS8qIEluaXRpYWxpemUgKi8KLQlibGstPnN0YXJ0ID0gTlVMTDsKKwlibGstPnN0YXJ0ID0gMDsKIAlibGstPnNpemUgPSAwOwogCWJsay0+b3duZXIgPSBOVUxMOwogCkBAIC0xNTgsNyArMTU4LDcgQEAKIAogCS8qIFdlIGFzc3VtZSB0aGF0IHRoZXkgYXJlIGFsaWduZWQgcHJvcGVybHkgKi8KIAlzaXplID0gYmxrbi0+c2l6ZTsKLQlzID0gKHVuc2lnbmVkIGxvbmcpYmxrbi0+c3RhcnQ7CisJcyA9IGJsa24tPnN0YXJ0OwogCWUgPSBzICsgc2l6ZTsKIAogCS8qIEZpbmQgdGhlIGJsb2NrcyBpbW1lZGlhdGVseSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBnaXZlbiBvbmUKQEAgLTE3MCw3ICsxNzAsNyBAQAogCWxpc3RfZm9yX2VhY2gobCwgJmluZm8tPmZyZWVfbGlzdCkgewogCQlibGsgPSBsaXN0X2VudHJ5KGwsIHJoX2Jsb2NrX3QsIGxpc3QpOwogCi0JCWJzID0gKHVuc2lnbmVkIGxvbmcpYmxrLT5zdGFydDsKKwkJYnMgPSBibGstPnN0YXJ0OwogCQliZSA9IGJzICsgYmxrLT5zaXplOwogCiAJCWlmIChuZXh0ID09IE5VTEwgJiYgcyA+PSBicykKQEAgLTE4OCwxMCArMTg4LDEwIEBACiAJfQogCiAJLyogTm93IGNoZWNrIGlmIHRoZXkgYXJlIHJlYWxseSBhZGphY2VudCAqLwotCWlmIChiZWZvcmUgIT0gTlVMTCAmJiBzICE9ICh1bnNpZ25lZCBsb25nKWJlZm9yZS0+c3RhcnQgKyBiZWZvcmUtPnNpemUpCisJaWYgKGJlZm9yZSAmJiBzICE9IChiZWZvcmUtPnN0YXJ0ICsgYmVmb3JlLT5zaXplKSkKIAkJYmVmb3JlID0gTlVMTDsKIAotCWlmIChhZnRlciAhPSBOVUxMICYmIGUgIT0gKHVuc2lnbmVkIGxvbmcpYWZ0ZXItPnN0YXJ0KQorCWlmIChhZnRlciAmJiBlICE9IGFmdGVyLT5zdGFydCkKIAkJYWZ0ZXIgPSBOVUxMOwogCiAJLyogTm8gY29hbGVzY2luZzsgbGlzdCBpbnNlcnQgYW5kIHJldHVybiAqLwpAQCAtMjE2LDcgKzIxNiw3IEBACiAKIAkvKiBHcm93IHRoZSBhZnRlciBibG9jayBiYWNrd2FyZHMgKi8KIAlpZiAoYmVmb3JlID09IE5VTEwgJiYgYWZ0ZXIgIT0gTlVMTCkgewotCQlhZnRlci0+c3RhcnQgPSAoaW50OF90ICopYWZ0ZXItPnN0YXJ0IC0gc2l6ZTsKKwkJYWZ0ZXItPnN0YXJ0IC09IHNpemU7CiAJCWFmdGVyLT5zaXplICs9IHNpemU7CiAJCXJldHVybjsKIAl9CkBAIC0zMjEsMTQgKzMyMSwxNCBAQAogfQogCiAvKiBBdHRhY2ggYSBmcmVlIG1lbW9yeSByZWdpb24sIGNvYWxlc2NlcyByZWdpb25zIGlmIGFkanVzY2VudCAqLwotaW50IHJoX2F0dGFjaF9yZWdpb24ocmhfaW5mb190ICogaW5mbywgdm9pZCAqc3RhcnQsIGludCBzaXplKQoraW50IHJoX2F0dGFjaF9yZWdpb24ocmhfaW5mb190ICogaW5mbywgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IHNpemUpCiB7CiAJcmhfYmxvY2tfdCAqYmxrOwogCXVuc2lnbmVkIGxvbmcgcywgZSwgbTsKIAlpbnQgcjsKIAogCS8qIFRoZSByZWdpb24gbXVzdCBiZSBhbGlnbmVkICovCi0JcyA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0OworCXMgPSBzdGFydDsKIAllID0gcyArIHNpemU7CiAJbSA9IGluZm8tPmFsaWdubWVudCAtIDE7CiAKQEAgLTMzOCw5ICszMzgsMTIgQEAKIAkvKiBSb3VuZCBlbmQgZG93biAqLwogCWUgPSBlICYgfm07CiAKKwlpZiAoSVNfRVJSX1ZBTFVFKGUpIHx8IChlIDwgcykpCisJCXJldHVybiAtRVJBTkdFOworCiAJLyogVGFrZSBmaW5hbCB2YWx1ZXMgKi8KLQlzdGFydCA9ICh2b2lkICopczsKLQlzaXplID0gKGludCkoZSAtIHMpOworCXN0YXJ0ID0gczsKKwlzaXplID0gZSAtIHM7CiAKIAkvKiBHcm93IHRoZSBibG9ja3MsIGlmIG5lZWRlZCAqLwogCXIgPSBhc3N1cmVfZW1wdHkoaW5mbywgMSk7CkBAIC0zNTgsNyArMzYxLDcgQEAKIH0KIAogLyogRGV0YXRjaCBnaXZlbiBhZGRyZXNzIHJhbmdlLCBzcGxpdHMgZnJlZSBibG9jayBpZiBuZWVkZWQuICovCi12b2lkICpyaF9kZXRhY2hfcmVnaW9uKHJoX2luZm9fdCAqIGluZm8sIHZvaWQgKnN0YXJ0LCBpbnQgc2l6ZSkKK3Vuc2lnbmVkIGxvbmcgcmhfZGV0YWNoX3JlZ2lvbihyaF9pbmZvX3QgKiBpbmZvLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsOwogCXJoX2Jsb2NrX3QgKmJsaywgKm5ld2JsazsKQEAgLTM2NiwxMCArMzY5LDEwIEBACiAKIAkvKiBWYWxpZGF0ZSBzaXplICovCiAJaWYgKHNpemUgPD0gMCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJCXJldHVybiAodW5zaWduZWQgbG9uZykgLUVJTlZBTDsKIAogCS8qIFRoZSByZWdpb24gbXVzdCBiZSBhbGlnbmVkICovCi0JcyA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0OworCXMgPSBzdGFydDsKIAllID0gcyArIHNpemU7CiAJbSA9IGluZm8tPmFsaWdubWVudCAtIDE7CiAKQEAgLTM4MCwzNCArMzgzLDM0IEBACiAJZSA9IGUgJiB+bTsKIAogCWlmIChhc3N1cmVfZW1wdHkoaW5mbywgMSkgPCAwKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSAtRU5PTUVNOwogCiAJYmxrID0gTlVMTDsKIAlsaXN0X2Zvcl9lYWNoKGwsICZpbmZvLT5mcmVlX2xpc3QpIHsKIAkJYmxrID0gbGlzdF9lbnRyeShsLCByaF9ibG9ja190LCBsaXN0KTsKIAkJLyogVGhlIHJhbmdlIG11c3QgbGllIGVudGlyZWx5IGluc2lkZSBvbmUgZnJlZSBibG9jayAqLwotCQlicyA9ICh1bnNpZ25lZCBsb25nKWJsay0+c3RhcnQ7Ci0JCWJlID0gKHVuc2lnbmVkIGxvbmcpYmxrLT5zdGFydCArIGJsay0+c2l6ZTsKKwkJYnMgPSBibGstPnN0YXJ0OworCQliZSA9IGJsay0+c3RhcnQgKyBibGstPnNpemU7CiAJCWlmIChzID49IGJzICYmIGUgPD0gYmUpCiAJCQlicmVhazsKIAkJYmxrID0gTlVMTDsKIAl9CiAKIAlpZiAoYmxrID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC1FTk9NRU07CiAKIAkvKiBQZXJmZWN0IGZpdCAqLwogCWlmIChicyA9PSBzICYmIGJlID09IGUpIHsKIAkJLyogRGVsZXRlIGZyb20gZnJlZSBsaXN0LCByZWxlYXNlIHNsb3QgKi8KIAkJbGlzdF9kZWwoJmJsay0+bGlzdCk7CiAJCXJlbGVhc2Vfc2xvdChpbmZvLCBibGspOwotCQlyZXR1cm4gKHZvaWQgKilzOworCQlyZXR1cm4gczsKIAl9CiAKIAkvKiBibGsgc3RpbGwgaW4gZnJlZSBsaXN0LCB3aXRoIHVwZGF0ZWQgc3RhcnQgYW5kL29yIHNpemUgKi8KIAlpZiAoYnMgPT0gcyB8fCBiZSA9PSBlKSB7CiAJCWlmIChicyA9PSBzKQotCQkJYmxrLT5zdGFydCA9IChpbnQ4X3QgKilibGstPnN0YXJ0ICsgc2l6ZTsKKwkJCWJsay0+c3RhcnQgKz0gc2l6ZTsKIAkJYmxrLT5zaXplIC09IHNpemU7CiAKIAl9IGVsc2UgewpAQCAtNDE2LDI1ICs0MTksMjkgQEAKIAogCQkvKiB0aGUgYmFjayBmcmVlIGZyYWdtZW50ICovCiAJCW5ld2JsayA9IGdldF9zbG90KGluZm8pOwotCQluZXdibGstPnN0YXJ0ID0gKHZvaWQgKillOworCQluZXdibGstPnN0YXJ0ID0gZTsKIAkJbmV3YmxrLT5zaXplID0gYmUgLSBlOwogCiAJCWxpc3RfYWRkKCZuZXdibGstPmxpc3QsICZibGstPmxpc3QpOwogCX0KIAotCXJldHVybiAodm9pZCAqKXM7CisJcmV0dXJuIHM7CiB9CiAKLXZvaWQgKnJoX2FsbG9jX2FsaWduKHJoX2luZm9fdCAqIGluZm8sIGludCBzaXplLCBpbnQgYWxpZ25tZW50LCBjb25zdCBjaGFyICpvd25lcikKKy8qIEFsbG9jYXRlIGEgYmxvY2sgb2YgbWVtb3J5IGF0IHRoZSBzcGVjaWZpZWQgYWxpZ25tZW50LiAgVGhlIHZhbHVlIHJldHVybmVkCisgKiBpcyBhbiBvZmZzZXQgaW50byB0aGUgYnVmZmVyIGluaXRpYWxpemVkIGJ5IHJoX2luaXQoKSwgb3IgYSBuZWdhdGl2ZSBudW1iZXIKKyAqIGlmIHRoZXJlIGlzIGFuIGVycm9yLgorICovCit1bnNpZ25lZCBsb25nIHJoX2FsbG9jX2FsaWduKHJoX2luZm9fdCAqIGluZm8sIGludCBzaXplLCBpbnQgYWxpZ25tZW50LCBjb25zdCBjaGFyICpvd25lcikKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsOwogCXJoX2Jsb2NrX3QgKmJsazsKIAlyaF9ibG9ja190ICpuZXdibGs7Ci0Jdm9pZCAqc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKIAotCS8qIFZhbGlkYXRlIHNpemUsIChtdXN0IGJlIHBvd2VyIG9mIHR3bykgKi8KKwkvKiBWYWxpZGF0ZSBzaXplLCBhbmQgYWxpZ25tZW50IG11c3QgYmUgcG93ZXIgb2YgdHdvICovCiAJaWYgKHNpemUgPD0gMCB8fCAoYWxpZ25tZW50ICYgKGFsaWdubWVudCAtIDEpKSAhPSAwKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSAtRUlOVkFMOwogCiAJLyogZ2l2ZW4gYWxpZ25tZW50IGxhcmdlciB0aGF0IGRlZmF1bHQgcmhlYXAgYWxpZ25tZW50ICovCiAJaWYgKGFsaWdubWVudCA+IGluZm8tPmFsaWdubWVudCkKQEAgLTQ0NCw3ICs0NTEsNyBAQAogCXNpemUgPSAoc2l6ZSArIChpbmZvLT5hbGlnbm1lbnQgLSAxKSkgJiB+KGluZm8tPmFsaWdubWVudCAtIDEpOwogCiAJaWYgKGFzc3VyZV9lbXB0eShpbmZvLCAxKSA8IDApCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC1FTk9NRU07CiAKIAlibGsgPSBOVUxMOwogCWxpc3RfZm9yX2VhY2gobCwgJmluZm8tPmZyZWVfbGlzdCkgewpAQCAtNDU1LDUwICs0NjIsNTAgQEAKIAl9CiAKIAlpZiAoYmxrID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC1FTk9NRU07CiAKIAkvKiBKdXN0IGZpdHMgKi8KIAlpZiAoYmxrLT5zaXplID09IHNpemUpIHsKIAkJLyogTW92ZSBmcm9tIGZyZWUgbGlzdCB0byB0YWtlbiBsaXN0ICovCiAJCWxpc3RfZGVsKCZibGstPmxpc3QpOwotCQlibGstPm93bmVyID0gb3duZXI7Ci0JCXN0YXJ0ID0gYmxrLT5zdGFydDsKKwkJbmV3YmxrID0gYmxrOworCX0gZWxzZSB7CisJCW5ld2JsayA9IGdldF9zbG90KGluZm8pOworCQluZXdibGstPnN0YXJ0ID0gYmxrLT5zdGFydDsKKwkJbmV3YmxrLT5zaXplID0gc2l6ZTsKIAotCQlhdHRhY2hfdGFrZW5fYmxvY2soaW5mbywgYmxrKTsKLQotCQlyZXR1cm4gc3RhcnQ7CisJCS8qIGJsayBzdGlsbCBpbiBmcmVlIGxpc3QsIHdpdGggdXBkYXRlZCBzdGFydCwgc2l6ZSAqLworCQlibGstPnN0YXJ0ICs9IHNpemU7CisJCWJsay0+c2l6ZSAtPSBzaXplOwogCX0KIAotCW5ld2JsayA9IGdldF9zbG90KGluZm8pOwotCW5ld2Jsay0+c3RhcnQgPSBibGstPnN0YXJ0OwotCW5ld2Jsay0+c2l6ZSA9IHNpemU7CiAJbmV3YmxrLT5vd25lciA9IG93bmVyOwotCi0JLyogYmxrIHN0aWxsIGluIGZyZWUgbGlzdCwgd2l0aCB1cGRhdGVkIHN0YXJ0LCBzaXplICovCi0JYmxrLT5zdGFydCA9IChpbnQ4X3QgKilibGstPnN0YXJ0ICsgc2l6ZTsKLQlibGstPnNpemUgLT0gc2l6ZTsKLQogCXN0YXJ0ID0gbmV3YmxrLT5zdGFydDsKLQogCWF0dGFjaF90YWtlbl9ibG9jayhpbmZvLCBuZXdibGspOwogCiAJLyogZm9yIGxhcmdlciBhbGlnbm1lbnQgcmV0dXJuIGZpeGVkIHVwIHBvaW50ZXIgICovCiAJLyogdGhpcyBpcyBubyBwcm9ibGVtIHdpdGggdGhlIGRlYWxsb2NhdG9yIHNpbmNlICovCiAJLyogd2Ugc2NhbiBmb3IgcG9pbnRlcnMgdGhhdCBsaWUgaW4gdGhlIGJsb2NrcyAgICovCiAJaWYgKGFsaWdubWVudCA+IGluZm8tPmFsaWdubWVudCkKLQkJc3RhcnQgPSAodm9pZCAqKSgoKHVuc2lnbmVkIGxvbmcpc3RhcnQgKyBhbGlnbm1lbnQgLSAxKSAmCi0JCQkJfihhbGlnbm1lbnQgLSAxKSk7CisJCXN0YXJ0ID0gKHN0YXJ0ICsgYWxpZ25tZW50IC0gMSkgJiB+KGFsaWdubWVudCAtIDEpOwogCiAJcmV0dXJuIHN0YXJ0OwogfQogCi12b2lkICpyaF9hbGxvYyhyaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqb3duZXIpCisvKiBBbGxvY2F0ZSBhIGJsb2NrIG9mIG1lbW9yeSBhdCB0aGUgZGVmYXVsdCBhbGlnbm1lbnQuICBUaGUgdmFsdWUgcmV0dXJuZWQgaXMKKyAqIGFuIG9mZnNldCBpbnRvIHRoZSBidWZmZXIgaW5pdGlhbGl6ZWQgYnkgcmhfaW5pdCgpLCBvciBhIG5lZ2F0aXZlIG51bWJlciBpZgorICogdGhlcmUgaXMgYW4gZXJyb3IuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmhfYWxsb2MocmhfaW5mb190ICogaW5mbywgaW50IHNpemUsIGNvbnN0IGNoYXIgKm93bmVyKQogewogCXJldHVybiByaF9hbGxvY19hbGlnbihpbmZvLCBzaXplLCBpbmZvLT5hbGlnbm1lbnQsIG93bmVyKTsKIH0KIAotLyogYWxsb2NhdGUgYXQgcHJlY2lzZWx5IHRoZSBnaXZlbiBhZGRyZXNzICovCi12b2lkICpyaF9hbGxvY19maXhlZChyaF9pbmZvX3QgKiBpbmZvLCB2b2lkICpzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm93bmVyKQorLyogQWxsb2NhdGUgYSBibG9jayBvZiBtZW1vcnkgYXQgdGhlIGdpdmVuIG9mZnNldCwgcm91bmRlZCB1cCB0byB0aGUgZGVmYXVsdAorICogYWxpZ25tZW50LiAgVGhlIHZhbHVlIHJldHVybmVkIGlzIGFuIG9mZnNldCBpbnRvIHRoZSBidWZmZXIgaW5pdGlhbGl6ZWQgYnkKKyAqIHJoX2luaXQoKSwgb3IgYSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhlcmUgaXMgYW4gZXJyb3IuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmhfYWxsb2NfZml4ZWQocmhfaW5mb190ICogaW5mbywgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm93bmVyKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmw7CiAJcmhfYmxvY2tfdCAqYmxrLCAqbmV3YmxrMSwgKm5ld2JsazI7CkBAIC01MDYsMTAgKzUxMywxMCBAQAogCiAJLyogVmFsaWRhdGUgc2l6ZSAqLwogCWlmIChzaXplIDw9IDApCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC1FSU5WQUw7CiAKIAkvKiBUaGUgcmVnaW9uIG11c3QgYmUgYWxpZ25lZCAqLwotCXMgPSAodW5zaWduZWQgbG9uZylzdGFydDsKKwlzID0gc3RhcnQ7CiAJZSA9IHMgKyBzaXplOwogCW0gPSBpbmZvLT5hbGlnbm1lbnQgLSAxOwogCkBAIC01MjAsMjAgKzUyNywyMCBAQAogCWUgPSBlICYgfm07CiAKIAlpZiAoYXNzdXJlX2VtcHR5KGluZm8sIDIpIDwgMCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXJldHVybiAodW5zaWduZWQgbG9uZykgLUVOT01FTTsKIAogCWJsayA9IE5VTEw7CiAJbGlzdF9mb3JfZWFjaChsLCAmaW5mby0+ZnJlZV9saXN0KSB7CiAJCWJsayA9IGxpc3RfZW50cnkobCwgcmhfYmxvY2tfdCwgbGlzdCk7CiAJCS8qIFRoZSByYW5nZSBtdXN0IGxpZSBlbnRpcmVseSBpbnNpZGUgb25lIGZyZWUgYmxvY2sgKi8KLQkJYnMgPSAodW5zaWduZWQgbG9uZylibGstPnN0YXJ0OwotCQliZSA9ICh1bnNpZ25lZCBsb25nKWJsay0+c3RhcnQgKyBibGstPnNpemU7CisJCWJzID0gYmxrLT5zdGFydDsKKwkJYmUgPSBibGstPnN0YXJ0ICsgYmxrLT5zaXplOwogCQlpZiAocyA+PSBicyAmJiBlIDw9IGJlKQogCQkJYnJlYWs7CiAJfQogCiAJaWYgKGJsayA9PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSAtRU5PTUVNOwogCiAJLyogUGVyZmVjdCBmaXQgKi8KIAlpZiAoYnMgPT0gcyAmJiBiZSA9PSBlKSB7CkBAIC01NTEsNyArNTU4LDcgQEAKIAkvKiBibGsgc3RpbGwgaW4gZnJlZSBsaXN0LCB3aXRoIHVwZGF0ZWQgc3RhcnQgYW5kL29yIHNpemUgKi8KIAlpZiAoYnMgPT0gcyB8fCBiZSA9PSBlKSB7CiAJCWlmIChicyA9PSBzKQotCQkJYmxrLT5zdGFydCA9IChpbnQ4X3QgKilibGstPnN0YXJ0ICsgc2l6ZTsKKwkJCWJsay0+c3RhcnQgKz0gc2l6ZTsKIAkJYmxrLT5zaXplIC09IHNpemU7CiAKIAl9IGVsc2UgewpAQCAtNTYwLDE0ICs1NjcsMTQgQEAKIAogCQkvKiBUaGUgYmFjayBmcmVlIGZyYWdtZW50ICovCiAJCW5ld2JsazIgPSBnZXRfc2xvdChpbmZvKTsKLQkJbmV3YmxrMi0+c3RhcnQgPSAodm9pZCAqKWU7CisJCW5ld2JsazItPnN0YXJ0ID0gZTsKIAkJbmV3YmxrMi0+c2l6ZSA9IGJlIC0gZTsKIAogCQlsaXN0X2FkZCgmbmV3YmxrMi0+bGlzdCwgJmJsay0+bGlzdCk7CiAJfQogCiAJbmV3YmxrMSA9IGdldF9zbG90KGluZm8pOwotCW5ld2JsazEtPnN0YXJ0ID0gKHZvaWQgKilzOworCW5ld2JsazEtPnN0YXJ0ID0gczsKIAluZXdibGsxLT5zaXplID0gZSAtIHM7CiAJbmV3YmxrMS0+b3duZXIgPSBvd25lcjsKIApAQCAtNTc3LDcgKzU4NCwxMSBAQAogCXJldHVybiBzdGFydDsKIH0KIAotaW50IHJoX2ZyZWUocmhfaW5mb190ICogaW5mbywgdm9pZCAqc3RhcnQpCisvKiBEZWFsbG9jYXRlIHRoZSBtZW1vcnkgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgb25lIG9mIHRoZSByaF9hbGxvYyBmdW5jdGlvbnMuCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzaXplIG9mIHRoZSBkZWFsbG9jYXRlZCBibG9jaywgb3IgYSBuZWdhdGl2ZSBudW1iZXIKKyAqIGlmIHRoZXJlIGlzIGFuIGVycm9yLgorICovCitpbnQgcmhfZnJlZShyaF9pbmZvX3QgKiBpbmZvLCB1bnNpZ25lZCBsb25nIHN0YXJ0KQogewogCXJoX2Jsb2NrX3QgKmJsaywgKmJsazI7CiAJc3RydWN0IGxpc3RfaGVhZCAqbDsKQEAgLTY0Miw3ICs2NTMsNyBAQAogCXJldHVybiBucjsKIH0KIAotaW50IHJoX3NldF9vd25lcihyaF9pbmZvX3QgKiBpbmZvLCB2b2lkICpzdGFydCwgY29uc3QgY2hhciAqb3duZXIpCitpbnQgcmhfc2V0X293bmVyKHJoX2luZm9fdCAqIGluZm8sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGNvbnN0IGNoYXIgKm93bmVyKQogewogCXJoX2Jsb2NrX3QgKmJsaywgKmJsazI7CiAJc3RydWN0IGxpc3RfaGVhZCAqbDsKQEAgLTY4NCw4ICs2OTUsOCBAQAogCQluciA9IG1heG5yOwogCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQogCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiICAgIDB4JXAtMHglcCAoJXUpXG4iLAotCQkgICAgICAgc3RbaV0uc3RhcnQsIChpbnQ4X3QgKikgc3RbaV0uc3RhcnQgKyBzdFtpXS5zaXplLAorCQkgICAgICAgIiAgICAweCVseC0weCVseCAoJXUpXG4iLAorCQkgICAgICAgc3RbaV0uc3RhcnQsIHN0W2ldLnN0YXJ0ICsgc3RbaV0uc2l6ZSwKIAkJICAgICAgIHN0W2ldLnNpemUpOwogCXByaW50ayhLRVJOX0lORk8gIlxuIik7CiAKQEAgLTY5NSw4ICs3MDYsOCBAQAogCQluciA9IG1heG5yOwogCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQogCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiICAgIDB4JXAtMHglcCAoJXUpICVzXG4iLAotCQkgICAgICAgc3RbaV0uc3RhcnQsIChpbnQ4X3QgKikgc3RbaV0uc3RhcnQgKyBzdFtpXS5zaXplLAorCQkgICAgICAgIiAgICAweCVseC0weCVseCAoJXUpICVzXG4iLAorCQkgICAgICAgc3RbaV0uc3RhcnQsIHN0W2ldLnN0YXJ0ICsgc3RbaV0uc2l6ZSwKIAkJICAgICAgIHN0W2ldLnNpemUsIHN0W2ldLm93bmVyICE9IE5VTEwgPyBzdFtpXS5vd25lciA6ICIiKTsKIAlwcmludGsoS0VSTl9JTkZPICJcbiIpOwogfQpAQCAtNzA0LDYgKzcxNSw2IEBACiB2b2lkIHJoX2R1bXBfYmxrKHJoX2luZm9fdCAqIGluZm8sIHJoX2Jsb2NrX3QgKiBibGspCiB7CiAJcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiYmxrIEAweCVwOiAweCVwLTB4JXAgKCV1KVxuIiwKLQkgICAgICAgYmxrLCBibGstPnN0YXJ0LCAoaW50OF90ICopIGJsay0+c3RhcnQgKyBibGstPnNpemUsIGJsay0+c2l6ZSk7CisJICAgICAgICJibGsgQDB4JXA6IDB4JWx4LTB4JWx4ICgldSlcbiIsCisJICAgICAgIGJsaywgYmxrLT5zdGFydCwgYmxrLT5zdGFydCArIGJsay0+c2l6ZSwgYmxrLT5zaXplKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS80NHhfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vNDR4X21tdS5jCmluZGV4IDBhMGEwNDg3Yi4uY2E0ZGNiMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tLzQ0eF9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vNDR4X21tdS5jCkBAIC0yNCw3MyArMjQsMzggQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotCi0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9ib290eC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKICNpbmNsdWRlICJtbXVfZGVjbC5oIgogCi1leHRlcm4gY2hhciBldGV4dFtdLCBfc3RleHRbXTsKLQogLyogVXNlZCBieSB0aGUgNDR4IFRMQiByZXBsYWNlbWVudCBleGNlcHRpb24gaGFuZGxlci4KICAqIEp1c3QgbmVlZGVkIGl0IGRlY2xhcmVkIHNvbWVwbGFjZS4KICAqLwotdW5zaWduZWQgaW50IHRsYl80NHhfaW5kZXggPSAwOwotdW5zaWduZWQgaW50IHRsYl80NHhfaHdhdGVyID0gNjI7Cit1bnNpZ25lZCBpbnQgdGxiXzQ0eF9pbmRleDsgLyogPSAwICovCit1bnNpZ25lZCBpbnQgdGxiXzQ0eF9od2F0ZXIgPSBQUEM0NHhfVExCX1NJWkUgLSAxIC0gUFBDNDR4X0VBUkxZX1RMQlM7CiAKIC8qCiAgKiAiUGlucyIgYSAyNTZNQiBUTEIgZW50cnkgaW4gQVMwIGZvciBrZXJuZWwgbG93bWVtCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdAotcHBjNDR4X3Bpbl90bGIoaW50IHNsb3QsIHVuc2lnbmVkIGludCB2aXJ0LCB1bnNpZ25lZCBpbnQgcGh5cykKK3N0YXRpYyB2b2lkIF9faW5pdCBwcGM0NHhfcGluX3RsYih1bnNpZ25lZCBpbnQgdmlydCwgdW5zaWduZWQgaW50IHBoeXMpCiB7Ci0JdW5zaWduZWQgbG9uZyBhdHRyaWIgPSAwOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIlwKLQljbHJyd2kJJTIsJTIsMTBcblwKLQlvcmkJJTIsJTIsJTRcblwKLQljbHJyd2kJJTEsJTEsMTBcblwKLQlsaQklMCwwXG5cCi0Jb3JpCSUwLCUwLCU1XG5cCi0JdGxid2UJJTIsJTMsJTZcblwKLQl0bGJ3ZQklMSwlMywlN1xuXAotCXRsYndlCSUwLCUzLCU4IgorCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkidGxid2UJJTIsJTMsJTRcbiIKKwkJInRsYndlCSUxLCUzLCU1XG4iCisJCSJ0bGJ3ZQklMCwlMywlNlxuIgogCToKLQk6ICJyIiAoYXR0cmliKSwgInIiIChwaHlzKSwgInIiICh2aXJ0KSwgInIiIChzbG90KSwKLQkgICJpIiAoUFBDNDR4X1RMQl9WQUxJRCB8IFBQQzQ0eF9UTEJfMjU2TSksCi0JICAiaSIgKFBQQzQ0eF9UTEJfU1cgfCBQUEM0NHhfVExCX1NSIHwgUFBDNDR4X1RMQl9TWCB8IFBQQzQ0eF9UTEJfRyksCisJOiAiciIgKFBQQzQ0eF9UTEJfU1cgfCBQUEM0NHhfVExCX1NSIHwgUFBDNDR4X1RMQl9TWCB8IFBQQzQ0eF9UTEJfRyksCisJICAiciIgKHBoeXMpLAorCSAgInIiICh2aXJ0IHwgUFBDNDR4X1RMQl9WQUxJRCB8IFBQQzQ0eF9UTEJfMjU2TSksCisJICAiciIgKHRsYl80NHhfaHdhdGVyLS0pLCAvKiBzbG90IGZvciB0aGlzIFRMQiBlbnRyeSAqLwogCSAgImkiIChQUEM0NHhfVExCX1BBR0VJRCksCiAJICAiaSIgKFBQQzQ0eF9UTEJfWExBVCksCiAJICAiaSIgKFBQQzQ0eF9UTEJfQVRUUklCKSk7CiB9CiAKLS8qCi0gKiBNTVVfaW5pdF9odyBkb2VzIHRoZSBjaGlwLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIG9mIHRoZSBNTVUgaGFyZHdhcmUuCi0gKi8KIHZvaWQgX19pbml0IE1NVV9pbml0X2h3KHZvaWQpCiB7CiAJZmx1c2hfaW5zdHJ1Y3Rpb25fY2FjaGUoKTsKQEAgLTk4LDIyICs2MywxMyBAQAogCiB1bnNpZ25lZCBsb25nIF9faW5pdCBtbXVfbWFwaW5fcmFtKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHBpbm5lZF90bGJzID0gMTsKLQlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CiAKLQkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGVudHJpZXMgbmVjZXNzYXJ5IHRvIGNvdmVyIGxvd21lbSAqLwotCXBpbm5lZF90bGJzID0gKHVuc2lnbmVkIGludCkKLQkJKF9BTElHTih0b3RhbF9sb3dtZW0sIFBQQ19QSU5fU0laRSkgPj4gUFBDNDR4X1BJTl9TSElGVCk7Ci0KLQkvKiBXcml0ZSB1cHBlciB3YXRlcm1hcmsgdG8gc2F2ZSBsb2NhdGlvbiAqLwotCXRsYl80NHhfaHdhdGVyID0gUFBDNDR4X0xPV19TTE9UIC0gcGlubmVkX3RsYnM7Ci0KLQkvKiBJZiBuZWNlc3NhcnksIHNldCBhZGRpdGlvbmFsIHBpbm5lZCBUTEJzICovCi0JaWYgKHBpbm5lZF90bGJzID4gMSkKLQkJZm9yIChpID0gKFBQQzQ0eF9MT1dfU0xPVC0ocGlubmVkX3RsYnMtMSkpOyBpIDwgUFBDNDR4X0xPV19TTE9UOyBpKyspIHsKLQkJCXVuc2lnbmVkIGludCBwaHlzX2FkZHIgPSAoUFBDNDR4X0xPV19TTE9ULWkpICogUFBDX1BJTl9TSVpFOwotCQkJcHBjNDR4X3Bpbl90bGIoaSwgcGh5c19hZGRyK1BBR0VfT0ZGU0VULCBwaHlzX2FkZHIpOwotCQl9CisJLyogUGluIGluIGVub3VnaCBUTEJzIHRvIGNvdmVyIGFueSBsb3dtZW0gbm90IGNvdmVyZWQgYnkgdGhlCisJICogaW5pdGlhbCAyNTZNIG1hcHBpbmcgZXN0YWJsaXNoZWQgaW4gaGVhZF80NHguUyAqLworCWZvciAoYWRkciA9IFBQQ19QSU5fU0laRTsgYWRkciA8IHRvdGFsX2xvd21lbTsKKwkgICAgIGFkZHIgKz0gUFBDX1BJTl9TSVpFKQorCQlwcGM0NHhfcGluX3RsYihhZGRyICsgUEFHRV9PRkZTRVQsIGFkZHIpOwogCiAJcmV0dXJuIHRvdGFsX2xvd21lbTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9tbS9NYWtlZmlsZQppbmRleCAzOGE4MTk2Li40ZjgzOWM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlCkBAIC0xOCw0ICsxOCw1IEBACiBvYmotJChDT05GSUdfNDR4KQkJKz0gNDR4X21tdS5vCiBvYmotJChDT05GSUdfRlNMX0JPT0tFKQkJKz0gZnNsX2Jvb2tlX21tdS5vCiBvYmotJChDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUykgKz0gbnVtYS5vCitvYmotJChDT05GSUdfUFBDX01NX1NMSUNFUykJKz0gc2xpY2Uubwogb2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkJKz0gaHVnZXRsYnBhZ2UubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwppbmRleCAwM2FlYjNhLi5iZmU5MDEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0zNiw0MCArMzcsMjggQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KIAorCiAjaWZkZWYgQ09ORklHX0tQUk9CRVMKLUFUT01JQ19OT1RJRklFUl9IRUFEKG5vdGlmeV9wYWdlX2ZhdWx0X2NoYWluKTsKLQotLyogSG9vayB0byByZWdpc3RlciBmb3IgcGFnZSBmYXVsdCBub3RpZmljYXRpb25zICovCi1pbnQgcmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQorc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3Rlcigmbm90aWZ5X3BhZ2VfZmF1bHRfY2hhaW4sIG5iKTsKLX0KKwlpbnQgcmV0ID0gMDsKIAotaW50IHVucmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQotewotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3Rlcigmbm90aWZ5X3BhZ2VfZmF1bHRfY2hhaW4sIG5iKTsKLX0KKwkvKiBrcHJvYmVfcnVubmluZygpIG5lZWRzIHNtcF9wcm9jZXNzb3JfaWQoKSAqLworCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLCAxMSkpCisJCQlyZXQgPSAxOworCQlwcmVlbXB0X2VuYWJsZSgpOworCX0KIAotc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoZW51bSBkaWVfdmFsIHZhbCwgY29uc3QgY2hhciAqc3RyLAotCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyLCBpbnQgdHJhcCwgaW50IHNpZykKLXsKLQlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsKLQkJLnJlZ3MgPSByZWdzLAotCQkuc3RyID0gc3RyLAotCQkuZXJyID0gZXJyLAotCQkudHJhcG5yID0gdHJhcCwKLQkJLnNpZ25yID0gc2lnCi0JfTsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5vdGlmeV9wYWdlX2ZhdWx0X2NoYWluLCB2YWwsICZhcmdzKTsKKwlyZXR1cm4gcmV0OwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKLQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVyciwgaW50IHRyYXAsIGludCBzaWcpCitzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlyZXR1cm4gTk9USUZZX0RPTkU7CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIApAQCAtMTc1LDggKzE2NCw3IEBACiAJaXNfd3JpdGUgPSBlcnJvcl9jb2RlICYgRVNSX0RTVDsKICNlbmRpZiAvKiBDT05GSUdfNHh4IHx8IENPTkZJR19CT09LRSAqLwogCi0JaWYgKG5vdGlmeV9wYWdlX2ZhdWx0KERJRV9QQUdFX0ZBVUxULCAicGFnZV9mYXVsdCIsIHJlZ3MsIGVycm9yX2NvZGUsCi0JCQkJMTEsIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQorCWlmIChub3RpZnlfcGFnZV9mYXVsdChyZWdzKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAodHJhcCA9PSAweDMwMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzMyLlMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUwppbmRleCBkZGNlZWZjLi43ZjgzMGE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUwpAQCAtMzAsNyArMzAsMTEgQEAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAogI2lmZGVmIENPTkZJR19TTVAKLQkuY29tbQltbXVfaGFzaF9sb2NrLDQKKwkuc2VjdGlvbiAuYnNzCisJLmFsaWduCTIKKwkuZ2xvYmwgbW11X2hhc2hfbG9jaworbW11X2hhc2hfbG9jazoKKwkuc3BhY2UJNAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogLyoKQEAgLTQ1NSw5ICs0NTksMTUgQEAKIAlzeW5jCQkvKiBtYWtlIHN1cmUgcHRlIHVwZGF0ZXMgZ2V0IHRvIG1lbW9yeSAqLwogCWJscgogCi0JLmNvbW0JbmV4dF9zbG90LDQKLQkuY29tbQlwcmltYXJ5X3B0ZWdfZnVsbCw0Ci0JLmNvbW0JaHRhYl9oYXNoX3NlYXJjaGVzLDQKKwkuc2VjdGlvbiAuYnNzCisJLmFsaWduCTIKK25leHRfc2xvdDoKKwkuc3BhY2UJNAorcHJpbWFyeV9wdGVnX2Z1bGw6CisJLnNwYWNlCTQKK2h0YWJfaGFzaF9zZWFyY2hlczoKKwkuc3BhY2UJNAorCS5wcmV2aW91cwogCiAvKgogICogRmx1c2ggdGhlIGVudHJ5IGZvciBhIHBhcnRpY3VsYXIgcGFnZSBmcm9tIHRoZSBoYXNoIHRhYmxlLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzY0LlMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfNjQuUwppbmRleCBlNjRjZTNlLi40NzYyZmY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfNjQuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfNjQuUwpAQCAtNjE1LDYgKzYxNSw5IEBACiAJbGkJcjMsLTEKIAliCWh0YWJfYmFpbAogCisjZW5kaWYgLyogQ09ORklHX1BQQ182NEtfUEFHRVMgKi8KKworI2lmZGVmIENPTkZJR19QUENfSEFTX0hBU0hfNjRLCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC04NzAsNyArODczLDcgQEAKIAliCWh0NjRfYmFpbAogCiAKLSNlbmRpZiAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLworI2VuZGlmIC8qIENPTkZJR19QUENfSEFTX0hBU0hfNjRLICovCiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCmluZGV4IDc5YWVkYWYuLjRhMjBkODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNtL2tleGVjLmg+CiAKICNpZmRlZiBERUJVR19MT1cKICNkZWZpbmUgREJHX0xPVyhmbXQuLi4pIHVkYmdfcHJpbnRmKGZtdCkKQEAgLTM0MCwzMSArMzQxLDY3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi0vKgotICogWFhYIFRoaXMgbmVlZCBmaXhpbmcgYmFzZWQgb24gcGFnZSBzaXplLiBJdCdzIG9ubHkgdXNlZCBieQotICogbmF0aXZlX2hwdGVfY2xlYXIoKSBmb3Igbm93IHdoaWNoIG5lZWRzIGZpeGluZyB0b28gc28gdGhleQotICogbWFrZSBhIGdvb2QgcGFpci4uLgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzbG90MnZhKHVuc2lnbmVkIGxvbmcgaHB0ZV92LCB1bnNpZ25lZCBsb25nIHNsb3QpCisjZGVmaW5lIExQX1NISUZUCTEyCisjZGVmaW5lIExQX0JJVFMJCTgKKyNkZWZpbmUgTFBfTUFTSyhpKQkoKDB4RkYgPj4gKGkpKSA8PCBMUF9TSElGVCkKKworc3RhdGljIHZvaWQgaHB0ZV9kZWNvZGUoaHB0ZV90ICpocHRlLCB1bnNpZ25lZCBsb25nIHNsb3QsCisJCQlpbnQgKnBzaXplLCB1bnNpZ25lZCBsb25nICp2YSkKIHsKLQl1bnNpZ25lZCBsb25nIGF2cG4gPSBIUFRFX1ZfQVZQTl9WQUwoaHB0ZV92KTsKLQl1bnNpZ25lZCBsb25nIHZhOworCXVuc2lnbmVkIGxvbmcgaHB0ZV9yID0gaHB0ZS0+cjsKKwl1bnNpZ25lZCBsb25nIGhwdGVfdiA9IGhwdGUtPnY7CisJdW5zaWduZWQgbG9uZyBhdnBuOworCWludCBpLCBzaXplLCBzaGlmdCwgcGVuYzsKIAotCXZhID0gYXZwbiA8PCAyMzsKKwlpZiAoIShocHRlX3YgJiBIUFRFX1ZfTEFSR0UpKQorCQlzaXplID0gTU1VX1BBR0VfNEs7CisJZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBMUF9CSVRTOyBpKyspIHsKKwkJCWlmICgoaHB0ZV9yICYgTFBfTUFTSyhpKzEpKSA9PSBMUF9NQVNLKGkrMSkpCisJCQkJYnJlYWs7CisJCX0KKwkJcGVuYyA9IExQX01BU0soaSsxKSA+PiBMUF9TSElGVDsKKwkJZm9yIChzaXplID0gMDsgc2l6ZSA8IE1NVV9QQUdFX0NPVU5UOyBzaXplKyspIHsKIAotCWlmICghIChocHRlX3YgJiBIUFRFX1ZfTEFSR0UpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdnBpLCBwdGVnOworCQkJLyogNEsgcGFnZXMgYXJlIG5vdCByZXByZXNlbnRlZCBieSBMUCAqLworCQkJaWYgKHNpemUgPT0gTU1VX1BBR0VfNEspCisJCQkJY29udGludWU7CisKKwkJCS8qIHZhbGlkIGVudHJpZXMgaGF2ZSBhIHNoaWZ0IHZhbHVlICovCisJCQlpZiAoIW1tdV9wc2l6ZV9kZWZzW3NpemVdLnNoaWZ0KQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocGVuYyA9PSBtbXVfcHNpemVfZGVmc1tzaXplXS5wZW5jKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJLyogVGhpcyB3b3JrcyBmb3IgYWxsIHBhZ2Ugc2l6ZXMsIGFuZCBmb3IgMjU2TSBhbmQgMVQgc2VnbWVudHMgKi8KKwlzaGlmdCA9IG1tdV9wc2l6ZV9kZWZzW3NpemVdLnNoaWZ0OworCWF2cG4gPSAoSFBURV9WX0FWUE5fVkFMKGhwdGVfdikgJiB+bW11X3BzaXplX2RlZnNbc2l6ZV0uYXZwbm0pIDw8IDIzOworCisJaWYgKHNoaWZ0IDwgMjMpIHsKKwkJdW5zaWduZWQgbG9uZyB2cGksIHZzaWQsIHB0ZWc7CiAKIAkJcHRlZyA9IHNsb3QgLyBIUFRFU19QRVJfR1JPVVA7CiAJCWlmIChocHRlX3YgJiBIUFRFX1ZfU0VDT05EQVJZKQogCQkJcHRlZyA9IH5wdGVnOwotCi0JCXZwaSA9ICgodmEgPj4gMjgpIF4gcHRlZykgJiBodGFiX2hhc2hfbWFzazsKLQotCQl2YSB8PSB2cGkgPDwgUEFHRV9TSElGVDsKKwkJc3dpdGNoIChocHRlX3YgPj4gSFBURV9WX1NTSVpFX1NISUZUKSB7CisJCWNhc2UgTU1VX1NFR1NJWkVfMjU2TToKKwkJCXZwaSA9ICgoYXZwbiA+PiAyOCkgXiBwdGVnKSAmIGh0YWJfaGFzaF9tYXNrOworCQkJYnJlYWs7CisJCWNhc2UgTU1VX1NFR1NJWkVfMVQ6CisJCQl2c2lkID0gYXZwbiA+PiA0MDsKKwkJCXZwaSA9ICh2c2lkIF4gKHZzaWQgPDwgMjUpIF4gcHRlZykgJiBodGFiX2hhc2hfbWFzazsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXZwbiA9IHZwaSA9IHNpemUgPSAwOworCQl9CisJCWF2cG4gfD0gKHZwaSA8PCBtbXVfcHNpemVfZGVmc1tzaXplXS5zaGlmdCk7CiAJfQogCi0JcmV0dXJuIHZhOworCSp2YSA9IGF2cG47CisJKnBzaXplID0gc2l6ZTsKIH0KIAogLyoKQEAgLTM3NCwxNSArNDExLDE0IEBACiAgKgogICogVE9ETzogYWRkIGJhdGNoaW5nIHN1cHBvcnQgd2hlbiBlbmFibGVkLiAgcmVtZW1iZXIsIG5vIGR5bmFtaWMgbWVtb3J5IGhlcmUsCiAgKiBhdGhvdWdoIHRoZXJlIGlzIHRoZSBjb250cm9sIHBhZ2UgYXZhaWxhYmxlLi4uCi0gKgotICogWFhYIEZJWE1FOiA0ayBvbmx5IGZvciBub3cgIQogICovCiBzdGF0aWMgdm9pZCBuYXRpdmVfaHB0ZV9jbGVhcih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgc2xvdCwgc2xvdHMsIGZsYWdzOwogCWhwdGVfdCAqaHB0ZXAgPSBodGFiX2FkZHJlc3M7Ci0JdW5zaWduZWQgbG9uZyBocHRlX3Y7CisJdW5zaWduZWQgbG9uZyBocHRlX3YsIHZhOwogCXVuc2lnbmVkIGxvbmcgcHRlZ19jb3VudDsKKwlpbnQgcHNpemU7CiAKIAlwdGVnX2NvdW50ID0gaHRhYl9oYXNoX21hc2sgKyAxOwogCkBAIC00MDgsOCArNDQ0LDkgQEAKIAkJICogYWxyZWFkeSBob2xkIHRoZSBuYXRpdmVfdGxiaWVfbG9jay4KIAkJICovCiAJCWlmIChocHRlX3YgJiBIUFRFX1ZfVkFMSUQpIHsKKwkJCWhwdGVfZGVjb2RlKGhwdGVwLCBzbG90LCAmcHNpemUsICZ2YSk7CiAJCQlocHRlcC0+diA9IDA7Ci0JCQlfX3RsYmllKHNsb3QydmEoaHB0ZV92LCBzbG90KSwgTU1VX1BBR0VfNEspOworCQkJX190bGJpZSh2YSwgcHNpemUpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwppbmRleCA0OTYxODQ2Li40ZjJmNDUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vc3B1Lmg+CiAKICNpZmRlZiBERUJVRwogI2RlZmluZSBEQkcoZm10Li4uKSB1ZGJnX3ByaW50ZihmbXQpCkBAIC0xMDMsNyArMTA0LDcgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCiBzdGF0aWMgdTggKmxpbmVhcl9tYXBfaGFzaF9zbG90czsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxpbmVhcl9tYXBfaGFzaF9jb3VudDsKLXN0YXRpYyBzcGlubG9ja190IGxpbmVhcl9tYXBfaGFzaF9sb2NrOworc3RhdGljIERFRklORV9TUElOTE9DSyhsaW5lYXJfbWFwX2hhc2hfbG9jayk7CiAjZW5kaWYgLyogQ09ORklHX0RFQlVHX1BBR0VBTExPQyAqLwogCiAvKiBUaGVyZSBhcmUgZGVmaW5pdGlvbnMgb2YgcGFnZSBzaXplcyBhcnJheXMgdG8gYmUgdXNlZCB3aGVuIG5vbmUKQEAgLTQxOSw3ICs0MjAsNyBAQAogCWV4dGVybiB1bnNpZ25lZCBpbnQgKmh0YWJfY2FsbF9ocHRlX3JlbW92ZTsKIAlleHRlcm4gdW5zaWduZWQgaW50ICpodGFiX2NhbGxfaHB0ZV91cGRhdGVwcDsKIAotI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisjaWZkZWYgQ09ORklHX1BQQ19IQVNfSEFTSF82NEsKIAlleHRlcm4gdW5zaWduZWQgaW50ICpodDY0X2NhbGxfaHB0ZV9pbnNlcnQxOwogCWV4dGVybiB1bnNpZ25lZCBpbnQgKmh0NjRfY2FsbF9ocHRlX2luc2VydDI7CiAJZXh0ZXJuIHVuc2lnbmVkIGludCAqaHQ2NF9jYWxsX2hwdGVfcmVtb3ZlOwpAQCAtNDI5LDcgKzQzMCw3IEBACiAJbWFrZV9ibChodDY0X2NhbGxfaHB0ZV9pbnNlcnQyLCBwcGNfbWQuaHB0ZV9pbnNlcnQpOwogCW1ha2VfYmwoaHQ2NF9jYWxsX2hwdGVfcmVtb3ZlLCBwcGNfbWQuaHB0ZV9yZW1vdmUpOwogCW1ha2VfYmwoaHQ2NF9jYWxsX2hwdGVfdXBkYXRlcHAsIHBwY19tZC5ocHRlX3VwZGF0ZXBwKTsKLSNlbmRpZiAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLworI2VuZGlmIC8qIENPTkZJR19QUENfSEFTX0hBU0hfNjRLICovCiAKIAltYWtlX2JsKGh0YWJfY2FsbF9ocHRlX2luc2VydDEsIHBwY19tZC5ocHRlX2luc2VydCk7CiAJbWFrZV9ibChodGFiX2NhbGxfaHB0ZV9pbnNlcnQyLCBwcGNfbWQuaHB0ZV9pbnNlcnQpOwpAQCAtNTk2LDIyICs1OTcsMjMgQEAKICAqIERlbW90ZSBhIHNlZ21lbnQgdG8gdXNpbmcgNGsgcGFnZXMuCiAgKiBGb3Igbm93IHRoaXMgbWFrZXMgdGhlIHdob2xlIHByb2Nlc3MgdXNlIDRrIHBhZ2VzLgogICovCi12b2lkIGRlbW90ZV9zZWdtZW50XzRrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17CiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKK3N0YXRpYyB2b2lkIGRlbW90ZV9zZWdtZW50XzRrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CiAJaWYgKG1tLT5jb250ZXh0LnVzZXJfcHNpemUgPT0gTU1VX1BBR0VfNEspCiAJCXJldHVybjsKKyNpZmRlZiBDT05GSUdfUFBDX01NX1NMSUNFUworCXNsaWNlX3NldF91c2VyX3BzaXplKG1tLCBNTVVfUEFHRV80Syk7CisjZWxzZSAvKiBDT05GSUdfUFBDX01NX1NMSUNFUyAqLwogCW1tLT5jb250ZXh0LnVzZXJfcHNpemUgPSBNTVVfUEFHRV80SzsKIAltbS0+Y29udGV4dC5zbGxwID0gU0xCX1ZTSURfVVNFUiB8IG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzRLXS5zbGxwOwotCWdldF9wYWNhKCktPmNvbnRleHQgPSBtbS0+Y29udGV4dDsKLQlzbGJfZmx1c2hfYW5kX3JlYm9sdCgpOworI2VuZGlmIC8qIENPTkZJR19QUENfTU1fU0xJQ0VTICovCisKICNpZmRlZiBDT05GSUdfU1BFX0JBU0UKIAlzcHVfZmx1c2hfYWxsX3NsYnMobW0pOwogI2VuZGlmCi0jZW5kaWYKIH0KLQotRVhQT1JUX1NZTUJPTF9HUEwoZGVtb3RlX3NlZ21lbnRfNGspOworI2VuZGlmIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCiAKIC8qIFJlc3VsdCBjb2RlIGlzOgogICogIDAgLSBoYW5kbGVkCkBAIC02NDYsNyArNjQ4LDExIEBACiAJCQlyZXR1cm4gMTsKIAkJfQogCQl2c2lkID0gZ2V0X3ZzaWQobW0tPmNvbnRleHQuaWQsIGVhKTsKKyNpZmRlZiBDT05GSUdfUFBDX01NX1NMSUNFUworCQlwc2l6ZSA9IGdldF9zbGljZV9wc2l6ZShtbSwgZWEpOworI2Vsc2UKIAkJcHNpemUgPSBtbS0+Y29udGV4dC51c2VyX3BzaXplOworI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgVk1BTExPQ19SRUdJT05fSUQ6CiAJCW1tID0gJmluaXRfbW07CkBAIC02NzQsMTEgKzY4MCwyMiBAQAogCWlmICh1c2VyX3JlZ2lvbiAmJiBjcHVzX2VxdWFsKG1tLT5jcHVfdm1fbWFzaywgdG1wKSkKIAkJbG9jYWwgPSAxOwogCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCS8qIEhhbmRsZSBodWdlcGFnZSByZWdpb25zICovCi0JaWYgKHVubGlrZWx5KGluX2h1Z2VwYWdlX2FyZWEobW0tPmNvbnRleHQsIGVhKSkpIHsKKwlpZiAoSFBBR0VfU0hJRlQgJiYgcHNpemUgPT0gbW11X2h1Z2VfcHNpemUpIHsKIAkJREJHX0xPVygiIC0+IGh1Z2UgcGFnZSAhXG4iKTsKIAkJcmV0dXJuIGhhc2hfaHVnZV9wYWdlKG1tLCBhY2Nlc3MsIGVhLCB2c2lkLCBsb2NhbCwgdHJhcCk7CiAJfQorI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KKworI2lmbmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUworCS8qIElmIHdlIHVzZSA0SyBwYWdlcyBhbmQgb3VyIHBzaXplIGlzIG5vdCA0SywgdGhlbiB3ZSBhcmUgaGl0dGluZworCSAqIGEgc3BlY2lhbCBkcml2ZXIgbWFwcGluZywgd2UgbmVlZCB0byBhbGlnbiB0aGUgYWRkcmVzcyBiZWZvcmUKKwkgKiB3ZSBmZXRjaCB0aGUgUFRFCisJICovCisJaWYgKHBzaXplICE9IE1NVV9QQUdFXzRLKQorCQllYSAmPSB+KCgxdWwgPDwgbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0KSAtIDEpOworI2VuZGlmIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCiAKIAkvKiBHZXQgUFRFIGFuZCBwYWdlIHNpemUgZnJvbSBwYWdlIHRhYmxlcyAqLwogCXB0ZXAgPSBmaW5kX2xpbnV4X3B0ZShwZ2RpciwgZWEpOwpAQCAtNzAyLDU0ICs3MTksNTYgQEAKIAl9CiAKIAkvKiBEbyBhY3R1YWwgaGFzaGluZyAqLwotI2lmbmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwotCXJjID0gX19oYXNoX3BhZ2VfNEsoZWEsIGFjY2VzcywgdnNpZCwgcHRlcCwgdHJhcCwgbG9jYWwpOwotI2Vsc2UKKyNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwogCS8qIElmIF9QQUdFXzRLX1BGTiBpcyBzZXQsIG1ha2Ugc3VyZSB0aGlzIGlzIGEgNGsgc2VnbWVudCAqLwogCWlmIChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFXzRLX1BGTikgewogCQlkZW1vdGVfc2VnbWVudF80ayhtbSwgZWEpOwogCQlwc2l6ZSA9IE1NVV9QQUdFXzRLOwogCX0KIAotCWlmIChtbXVfY2lfcmVzdHJpY3Rpb25zKSB7Ci0JCS8qIElmIHRoaXMgUFRFIGlzIG5vbi1jYWNoZWFibGUsIHN3aXRjaCB0byA0ayAqLwotCQlpZiAocHNpemUgPT0gTU1VX1BBR0VfNjRLICYmCi0JCSAgICAocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9OT19DQUNIRSkpIHsKLQkJCWlmICh1c2VyX3JlZ2lvbikgewotCQkJCWRlbW90ZV9zZWdtZW50XzRrKG1tLCBlYSk7Ci0JCQkJcHNpemUgPSBNTVVfUEFHRV80SzsKLQkJCX0gZWxzZSBpZiAoZWEgPCBWTUFMTE9DX0VORCkgewotCQkJCS8qCi0JCQkJICogc29tZSBkcml2ZXIgZGlkIGEgbm9uLWNhY2hlYWJsZSBtYXBwaW5nCi0JCQkJICogaW4gdm1hbGxvYyBzcGFjZSwgc28gc3dpdGNoIHZtYWxsb2MKLQkJCQkgKiB0byA0ayBwYWdlcwotCQkJCSAqLwotCQkJCXByaW50ayhLRVJOX0FMRVJUICJSZWR1Y2luZyB2bWFsbG9jIHNlZ21lbnQgIgotCQkJCSAgICAgICAidG8gNGtCIHBhZ2VzIGJlY2F1c2Ugb2YgIgotCQkJCSAgICAgICAibm9uLWNhY2hlYWJsZSBtYXBwaW5nXG4iKTsKLQkJCQlwc2l6ZSA9IG1tdV92bWFsbG9jX3BzaXplID0gTU1VX1BBR0VfNEs7Ci0JCQl9CisJLyogSWYgdGhpcyBQVEUgaXMgbm9uLWNhY2hlYWJsZSBhbmQgd2UgaGF2ZSByZXN0cmljdGlvbnMgb24KKwkgKiB1c2luZyBub24gY2FjaGVhYmxlIGxhcmdlIHBhZ2VzLCB0aGVuIHdlIHN3aXRjaCB0byA0aworCSAqLworCWlmIChtbXVfY2lfcmVzdHJpY3Rpb25zICYmIHBzaXplID09IE1NVV9QQUdFXzY0SyAmJgorCSAgICAocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9OT19DQUNIRSkpIHsKKwkJaWYgKHVzZXJfcmVnaW9uKSB7CisJCQlkZW1vdGVfc2VnbWVudF80ayhtbSwgZWEpOworCQkJcHNpemUgPSBNTVVfUEFHRV80SzsKKwkJfSBlbHNlIGlmIChlYSA8IFZNQUxMT0NfRU5EKSB7CisJCQkvKgorCQkJICogc29tZSBkcml2ZXIgZGlkIGEgbm9uLWNhY2hlYWJsZSBtYXBwaW5nCisJCQkgKiBpbiB2bWFsbG9jIHNwYWNlLCBzbyBzd2l0Y2ggdm1hbGxvYworCQkJICogdG8gNGsgcGFnZXMKKwkJCSAqLworCQkJcHJpbnRrKEtFUk5fQUxFUlQgIlJlZHVjaW5nIHZtYWxsb2Mgc2VnbWVudCAiCisJCQkgICAgICAgInRvIDRrQiBwYWdlcyBiZWNhdXNlIG9mICIKKwkJCSAgICAgICAibm9uLWNhY2hlYWJsZSBtYXBwaW5nXG4iKTsKKwkJCXBzaXplID0gbW11X3ZtYWxsb2NfcHNpemUgPSBNTVVfUEFHRV80SzsKICNpZmRlZiBDT05GSUdfU1BFX0JBU0UKIAkJCXNwdV9mbHVzaF9hbGxfc2xicyhtbSk7CiAjZW5kaWYKIAkJfQotCQlpZiAodXNlcl9yZWdpb24pIHsKLQkJCWlmIChwc2l6ZSAhPSBnZXRfcGFjYSgpLT5jb250ZXh0LnVzZXJfcHNpemUpIHsKLQkJCQlnZXRfcGFjYSgpLT5jb250ZXh0ID0gbW0tPmNvbnRleHQ7Ci0JCQkJc2xiX2ZsdXNoX2FuZF9yZWJvbHQoKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChnZXRfcGFjYSgpLT52bWFsbG9jX3NsbHAgIT0KLQkJCSAgIG1tdV9wc2l6ZV9kZWZzW21tdV92bWFsbG9jX3BzaXplXS5zbGxwKSB7Ci0JCQlnZXRfcGFjYSgpLT52bWFsbG9jX3NsbHAgPQotCQkJCW1tdV9wc2l6ZV9kZWZzW21tdV92bWFsbG9jX3BzaXplXS5zbGxwOworCX0KKwlpZiAodXNlcl9yZWdpb24pIHsKKwkJaWYgKHBzaXplICE9IGdldF9wYWNhKCktPmNvbnRleHQudXNlcl9wc2l6ZSkgeworCQkJZ2V0X3BhY2EoKS0+Y29udGV4dC51c2VyX3BzaXplID0KKwkJCQltbS0+Y29udGV4dC51c2VyX3BzaXplOwogCQkJc2xiX2ZsdXNoX2FuZF9yZWJvbHQoKTsKIAkJfQorCX0gZWxzZSBpZiAoZ2V0X3BhY2EoKS0+dm1hbGxvY19zbGxwICE9CisJCSAgIG1tdV9wc2l6ZV9kZWZzW21tdV92bWFsbG9jX3BzaXplXS5zbGxwKSB7CisJCWdldF9wYWNhKCktPnZtYWxsb2Nfc2xscCA9CisJCQltbXVfcHNpemVfZGVmc1ttbXVfdm1hbGxvY19wc2l6ZV0uc2xscDsKKwkJc2xiX2ZsdXNoX2FuZF9yZWJvbHQoKTsKIAl9CisjZW5kaWYgLyogQ09ORklHX1BQQ182NEtfUEFHRVMgKi8KKworI2lmZGVmIENPTkZJR19QUENfSEFTX0hBU0hfNjRLCiAJaWYgKHBzaXplID09IE1NVV9QQUdFXzY0SykKIAkJcmMgPSBfX2hhc2hfcGFnZV82NEsoZWEsIGFjY2VzcywgdnNpZCwgcHRlcCwgdHJhcCwgbG9jYWwpOwogCWVsc2UKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0hBU19IQVNIXzY0SyAqLwogCQlyYyA9IF9faGFzaF9wYWdlXzRLKGVhLCBhY2Nlc3MsIHZzaWQsIHB0ZXAsIHRyYXAsIGxvY2FsKTsKLSNlbmRpZiAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLwogCiAjaWZuZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCiAJREJHX0xPVygiIG8tcHRlOiAlMDE2bHhcbiIsIHB0ZV92YWwoKnB0ZXApKTsKQEAgLTc3Miw0MiArNzkxLDU1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbG9jYWwgPSAwOwogCi0JLyogV2UgZG9uJ3Qgd2FudCBodWdlIHBhZ2VzIHByZWZhdWx0ZWQgZm9yIG5vdwotCSAqLwotCWlmICh1bmxpa2VseShpbl9odWdlcGFnZV9hcmVhKG1tLT5jb250ZXh0LCBlYSkpKQorCUJVR19PTihSRUdJT05fSUQoZWEpICE9IFVTRVJfUkVHSU9OX0lEKTsKKworI2lmZGVmIENPTkZJR19QUENfTU1fU0xJQ0VTCisJLyogV2Ugb25seSBwcmVmYXVsdCBzdGFuZGFyZCBwYWdlcyBmb3Igbm93ICovCisJaWYgKHVubGlrZWx5KGdldF9zbGljZV9wc2l6ZShtbSwgZWEpICE9IG1tLT5jb250ZXh0LnVzZXJfcHNpemUpKTsKIAkJcmV0dXJuOworI2VuZGlmCiAKIAlEQkdfTE9XKCJoYXNoX3ByZWxvYWQobW09JXAsIG1tLT5wZ2Rpcj0lcCwgZWE9JTAxNmx4LCBhY2Nlc3M9JWx4LCIKIAkJIiB0cmFwPSVseFxuIiwgbW0sIG1tLT5wZ2QsIGVhLCBhY2Nlc3MsIHRyYXApOwogCi0JLyogR2V0IFBURSwgVlNJRCwgYWNjZXNzIG1hc2sgKi8KKwkvKiBHZXQgTGludXggUFRFIGlmIGF2YWlsYWJsZSAqLwogCXBnZGlyID0gbW0tPnBnZDsKIAlpZiAocGdkaXIgPT0gTlVMTCkKIAkJcmV0dXJuOwogCXB0ZXAgPSBmaW5kX2xpbnV4X3B0ZShwZ2RpciwgZWEpOwogCWlmICghcHRlcCkKIAkJcmV0dXJuOworCisjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKwkvKiBJZiBlaXRoZXIgX1BBR0VfNEtfUEZOIG9yIF9QQUdFX05PX0NBQ0hFIGlzIHNldCAoYW5kIHdlIGFyZSBvbgorCSAqIGEgNjRLIGtlcm5lbCksIHRoZW4gd2UgZG9uJ3QgcHJlbG9hZCwgaGFzaF9wYWdlKCkgd2lsbCB0YWtlCisJICogY2FyZSBvZiBpdCBvbmNlIHdlIGFjdHVhbGx5IHRyeSB0byBhY2Nlc3MgdGhlIHBhZ2UuCisJICogVGhhdCB3YXkgd2UgZG9uJ3QgaGF2ZSB0byBkdXBsaWNhdGUgYWxsIG9mIHRoZSBsb2dpYyBmb3Igc2VnbWVudAorCSAqIHBhZ2Ugc2l6ZSBkZW1vdGlvbiBoZXJlCisJICovCisJaWYgKHB0ZV92YWwoKnB0ZXApICYgKF9QQUdFXzRLX1BGTiB8IF9QQUdFX05PX0NBQ0hFKSkKKwkJcmV0dXJuOworI2VuZGlmIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCisKKwkvKiBHZXQgVlNJRCAqLwogCXZzaWQgPSBnZXRfdnNpZChtbS0+Y29udGV4dC5pZCwgZWEpOwogCi0JLyogSGFzaCBpdCBpbiAqLworCS8qIEhhc2ggZG9lc24ndCBsaWtlIGlycXMgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBJcyB0aGF0IGxvY2FsIHRvIHRoaXMgQ1BVID8gKi8KIAltYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlpZiAoY3B1c19lcXVhbChtbS0+Y3B1X3ZtX21hc2ssIG1hc2spKQogCQlsb2NhbCA9IDE7Ci0jaWZuZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCi0JX19oYXNoX3BhZ2VfNEsoZWEsIGFjY2VzcywgdnNpZCwgcHRlcCwgdHJhcCwgbG9jYWwpOwotI2Vsc2UKLQlpZiAobW11X2NpX3Jlc3RyaWN0aW9ucykgewotCQkvKiBJZiB0aGlzIFBURSBpcyBub24tY2FjaGVhYmxlLCBzd2l0Y2ggdG8gNGsgKi8KLQkJaWYgKG1tLT5jb250ZXh0LnVzZXJfcHNpemUgPT0gTU1VX1BBR0VfNjRLICYmCi0JCSAgICAocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9OT19DQUNIRSkpCi0JCQlkZW1vdGVfc2VnbWVudF80ayhtbSwgZWEpOwotCX0KKworCS8qIEhhc2ggaXQgaW4gKi8KKyNpZmRlZiBDT05GSUdfUFBDX0hBU19IQVNIXzY0SwogCWlmIChtbS0+Y29udGV4dC51c2VyX3BzaXplID09IE1NVV9QQUdFXzY0SykKIAkJX19oYXNoX3BhZ2VfNjRLKGVhLCBhY2Nlc3MsIHZzaWQsIHB0ZXAsIHRyYXAsIGxvY2FsKTsKIAllbHNlCisjZW5kaWYgLyogQ09ORklHX1BQQ19IQVNfSEFTSF82NEsgKi8KIAkJX19oYXNoX3BhZ2VfNEsoZWEsIGFjY2VzcywgdnNpZCwgcHRlcCwgdHJhcCwgbG9jYWwpOwotI2VuZGlmIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCisKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggMWYwN2Y3MC4uOTJhMWIxNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CkBAIC05Miw3ICs5MSw3IEBACiAJcGdkX3QgKnBnOwogCXB1ZF90ICpwdTsKIAotCUJVR19PTighIGluX2h1Z2VwYWdlX2FyZWEobW0tPmNvbnRleHQsIGFkZHIpKTsKKwlCVUdfT04oZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKSAhPSBtbXVfaHVnZV9wc2l6ZSk7CiAKIAlhZGRyICY9IEhQQUdFX01BU0s7CiAKQEAgLTEyMCw3ICsxMTksNyBAQAogCXB1ZF90ICpwdTsKIAlodWdlcGRfdCAqaHBkcCA9IE5VTEw7CiAKLQlCVUdfT04oISBpbl9odWdlcGFnZV9hcmVhKG1tLT5jb250ZXh0LCBhZGRyKSk7CisJQlVHX09OKGdldF9zbGljZV9wc2l6ZShtbSwgYWRkcikgIT0gbW11X2h1Z2VfcHNpemUpOwogCiAJYWRkciAmPSBIUEFHRV9NQVNLOwogCkBAIC0zMDMsNyArMzAyLDcgQEAKIAlzdGFydCA9IGFkZHI7CiAJcGdkID0gcGdkX29mZnNldCgoKnRsYiktPm1tLCBhZGRyKTsKIAlkbyB7Ci0JCUJVR19PTighIGluX2h1Z2VwYWdlX2FyZWEoKCp0bGIpLT5tbS0+Y29udGV4dCwgYWRkcikpOworCQlCVUdfT04oZ2V0X3NsaWNlX3BzaXplKCgqdGxiKS0+bW0sIGFkZHIpICE9IG1tdV9odWdlX3BzaXplKTsKIAkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpCiAJCQljb250aW51ZTsKQEAgLTMzMiwyMDMgKzMzMSwxMyBAQAogCXJldHVybiBfX3B0ZShvbGQpOwogfQogCi1zdHJ1Y3Qgc2xiX2ZsdXNoX2luZm8gewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCXUxNiBuZXdhcmVhczsKLX07Ci0KLXN0YXRpYyB2b2lkIGZsdXNoX2xvd19zZWdtZW50cyh2b2lkICpwYXJtKQotewotCXN0cnVjdCBzbGJfZmx1c2hfaW5mbyAqZmkgPSBwYXJtOwotCXVuc2lnbmVkIGxvbmcgaTsKLQotCUJVSUxEX0JVR19PTigoc2l6ZW9mKGZpLT5uZXdhcmVhcykqOCkgIT0gTlVNX0xPV19BUkVBUyk7Ci0KLQlpZiAoY3VycmVudC0+YWN0aXZlX21tICE9IGZpLT5tbSkKLQkJcmV0dXJuOwotCi0JLyogT25seSBuZWVkIHRvIGRvIGFueXRoaW5nIGlmIHRoaXMgQ1BVIGlzIHdvcmtpbmcgaW4gdGhlIHNhbWUKLQkgKiBtbSBhcyB0aGUgb25lIHdoaWNoIGhhcyBjaGFuZ2VkICovCi0KLQkvKiB1cGRhdGUgdGhlIHBhY2EgY29weSBvZiB0aGUgY29udGV4dCBzdHJ1Y3QgKi8KLQlnZXRfcGFjYSgpLT5jb250ZXh0ID0gY3VycmVudC0+YWN0aXZlX21tLT5jb250ZXh0OwotCi0JYXNtIHZvbGF0aWxlKCJpc3luYyIgOiA6IDogIm1lbW9yeSIpOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fTE9XX0FSRUFTOyBpKyspIHsKLQkJaWYgKCEgKGZpLT5uZXdhcmVhcyAmICgxVSA8PCBpKSkpCi0JCQljb250aW51ZTsKLQkJYXNtIHZvbGF0aWxlKCJzbGJpZSAlMCIKLQkJCSAgICAgOiA6ICJyIiAoKGkgPDwgU0lEX1NISUZUKSB8IFNMQklFX0MpKTsKLQl9Ci0JYXNtIHZvbGF0aWxlKCJpc3luYyIgOiA6IDogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgdm9pZCBmbHVzaF9oaWdoX3NlZ21lbnRzKHZvaWQgKnBhcm0pCi17Ci0Jc3RydWN0IHNsYl9mbHVzaF9pbmZvICpmaSA9IHBhcm07Ci0JdW5zaWduZWQgbG9uZyBpLCBqOwotCi0KLQlCVUlMRF9CVUdfT04oKHNpemVvZihmaS0+bmV3YXJlYXMpKjgpICE9IE5VTV9ISUdIX0FSRUFTKTsKLQotCWlmIChjdXJyZW50LT5hY3RpdmVfbW0gIT0gZmktPm1tKQotCQlyZXR1cm47Ci0KLQkvKiBPbmx5IG5lZWQgdG8gZG8gYW55dGhpbmcgaWYgdGhpcyBDUFUgaXMgd29ya2luZyBpbiB0aGUgc2FtZQotCSAqIG1tIGFzIHRoZSBvbmUgd2hpY2ggaGFzIGNoYW5nZWQgKi8KLQotCS8qIHVwZGF0ZSB0aGUgcGFjYSBjb3B5IG9mIHRoZSBjb250ZXh0IHN0cnVjdCAqLwotCWdldF9wYWNhKCktPmNvbnRleHQgPSBjdXJyZW50LT5hY3RpdmVfbW0tPmNvbnRleHQ7Ci0KLQlhc20gdm9sYXRpbGUoImlzeW5jIiA6IDogOiAibWVtb3J5Iik7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9ISUdIX0FSRUFTOyBpKyspIHsKLQkJaWYgKCEgKGZpLT5uZXdhcmVhcyAmICgxVSA8PCBpKSkpCi0JCQljb250aW51ZTsKLQkJZm9yIChqID0gMDsgaiA8ICgxVUwgPDwgKEhUTEJfQVJFQV9TSElGVC1TSURfU0hJRlQpKTsgaisrKQotCQkJYXNtIHZvbGF0aWxlKCJzbGJpZSAlMCIKLQkJCQkgICAgIDo6ICJyIiAoKChpIDw8IEhUTEJfQVJFQV9TSElGVCkKLQkJCQkJICAgICAgKyAoaiA8PCBTSURfU0hJRlQpKSB8IFNMQklFX0MpKTsKLQl9Ci0JYXNtIHZvbGF0aWxlKCJpc3luYyIgOiA6IDogIm1lbW9yeSIpOwotfQotCi1zdGF0aWMgaW50IHByZXBhcmVfbG93X2FyZWFfZm9yX2h0bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYXJlYSkKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYXJlYSA8PCBTSURfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSAoYXJlYSsxKSA8PCBTSURfU0hJRlQ7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0KLQlCVUdfT04oYXJlYSA+PSBOVU1fTE9XX0FSRUFTKTsKLQotCS8qIENoZWNrIG5vIFZNQXMgYXJlIGluIHRoZSByZWdpb24gKi8KLQl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOwotCWlmICh2bWEgJiYgKHZtYS0+dm1fc3RhcnQgPCBlbmQpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHJlcGFyZV9oaWdoX2FyZWFfZm9yX2h0bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYXJlYSkKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYXJlYSA8PCBIVExCX0FSRUFfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSAoYXJlYSsxKSA8PCBIVExCX0FSRUFfU0hJRlQ7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0KLQlCVUdfT04oYXJlYSA+PSBOVU1fSElHSF9BUkVBUyk7Ci0KLQkvKiBIYWNrLCBzbyB0aGF0IGVhY2ggYWRkcmVzc2VzIGlzIGNvbnRyb2xsZWQgYnkgZXhhY3RseSBvbmUKLQkgKiBvZiB0aGUgaGlnaCBvciBsb3cgYXJlYSBiaXRtYXBzLCB0aGUgZmlyc3QgaGlnaCBhcmVhIHN0YXJ0cwotCSAqIGF0IDRHQiwgbm90IDAgKi8KLQlpZiAoc3RhcnQgPT0gMCkKLQkJc3RhcnQgPSAweDEwMDAwMDAwMFVMOwotCi0JLyogQ2hlY2sgbm8gVk1BcyBhcmUgaW4gdGhlIHJlZ2lvbiAqLwotCXZtYSA9IGZpbmRfdm1hKG1tLCBzdGFydCk7Ci0JaWYgKHZtYSAmJiAodm1hLT52bV9zdGFydCA8IGVuZCkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcGVuX2xvd19ocGFnZV9hcmVhcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTE2IG5ld2FyZWFzKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQlzdHJ1Y3Qgc2xiX2ZsdXNoX2luZm8gZmk7Ci0KLQlCVUlMRF9CVUdfT04oKHNpemVvZihuZXdhcmVhcykqOCkgIT0gTlVNX0xPV19BUkVBUyk7Ci0JQlVJTERfQlVHX09OKChzaXplb2YobW0tPmNvbnRleHQubG93X2h0bGJfYXJlYXMpKjgpICE9IE5VTV9MT1dfQVJFQVMpOwotCi0JbmV3YXJlYXMgJj0gfihtbS0+Y29udGV4dC5sb3dfaHRsYl9hcmVhcyk7Ci0JaWYgKCEgbmV3YXJlYXMpCi0JCXJldHVybiAwOyAvKiBUaGUgc2VnbWVudHMgd2Ugd2FudCBhcmUgYWxyZWFkeSBvcGVuICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0xPV19BUkVBUzsgaSsrKQotCQlpZiAoKDEgPDwgaSkgJiBuZXdhcmVhcykKLQkJCWlmIChwcmVwYXJlX2xvd19hcmVhX2Zvcl9odGxiKG1tLCBpKSAhPSAwKQotCQkJCXJldHVybiAtRUJVU1k7Ci0KLQltbS0+Y29udGV4dC5sb3dfaHRsYl9hcmVhcyB8PSBuZXdhcmVhczsKLQotCS8qIHRoZSBjb250ZXh0IGNoYW5nZSBtdXN0IG1ha2UgaXQgdG8gbWVtb3J5IGJlZm9yZSB0aGUgZmx1c2gsCi0JICogc28gdGhhdCBmdXJ0aGVyIFNMQiBtaXNzZXMgZG8gdGhlIHJpZ2h0IHRoaW5nLiAqLwotCW1iKCk7Ci0KLQlmaS5tbSA9IG1tOwotCWZpLm5ld2FyZWFzID0gbmV3YXJlYXM7Ci0Jb25fZWFjaF9jcHUoZmx1c2hfbG93X3NlZ21lbnRzLCAmZmksIDAsIDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Blbl9oaWdoX2hwYWdlX2FyZWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1MTYgbmV3YXJlYXMpCi17Ci0Jc3RydWN0IHNsYl9mbHVzaF9pbmZvIGZpOwotCXVuc2lnbmVkIGxvbmcgaTsKLQotCUJVSUxEX0JVR19PTigoc2l6ZW9mKG5ld2FyZWFzKSo4KSAhPSBOVU1fSElHSF9BUkVBUyk7Ci0JQlVJTERfQlVHX09OKChzaXplb2YobW0tPmNvbnRleHQuaGlnaF9odGxiX2FyZWFzKSo4KQotCQkgICAgICE9IE5VTV9ISUdIX0FSRUFTKTsKLQotCW5ld2FyZWFzICY9IH4obW0tPmNvbnRleHQuaGlnaF9odGxiX2FyZWFzKTsKLQlpZiAoISBuZXdhcmVhcykKLQkJcmV0dXJuIDA7IC8qIFRoZSBhcmVhcyB3ZSB3YW50IGFyZSBhbHJlYWR5IG9wZW4gKi8KLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fSElHSF9BUkVBUzsgaSsrKQotCQlpZiAoKDEgPDwgaSkgJiBuZXdhcmVhcykKLQkJCWlmIChwcmVwYXJlX2hpZ2hfYXJlYV9mb3JfaHRsYihtbSwgaSkgIT0gMCkKLQkJCQlyZXR1cm4gLUVCVVNZOwotCi0JbW0tPmNvbnRleHQuaGlnaF9odGxiX2FyZWFzIHw9IG5ld2FyZWFzOwotCi0JLyogdGhlIGNvbnRleHQgY2hhbmdlIG11c3QgbWFrZSBpdCB0byBtZW1vcnkgYmVmb3JlIHRoZSBmbHVzaCwKLQkgKiBzbyB0aGF0IGZ1cnRoZXIgU0xCIG1pc3NlcyBkbyB0aGUgcmlnaHQgdGhpbmcuICovCi0JbWIoKTsKLQotCWZpLm1tID0gbW07Ci0JZmkubmV3YXJlYXMgPSBuZXdhcmVhczsKLQlvbl9lYWNoX2NwdShmbHVzaF9oaWdoX3NlZ21lbnRzLCAmZmksIDAsIDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBwcmVwYXJlX2h1Z2VwYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHBnb2ZmX3QgcGdvZmYpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAocGdvZmYgJiAofkhQQUdFX01BU0sgPj4gUEFHRV9TSElGVCkpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChsZW4gJiB+SFBBR0VfTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGFkZHIgJiB+SFBBR0VfTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYWRkciA8IDB4MTAwMDAwMDAwVUwpCi0JCWVyciA9IG9wZW5fbG93X2hwYWdlX2FyZWFzKGN1cnJlbnQtPm1tLAotCQkJCQkgIExPV19FU0lEX01BU0soYWRkciwgbGVuKSk7Ci0JaWYgKChhZGRyICsgbGVuKSA+IDB4MTAwMDAwMDAwVUwpCi0JCWVyciA9IG9wZW5faGlnaF9ocGFnZV9hcmVhcyhjdXJyZW50LT5tbSwKLQkJCQkJICAgIEhUTEJfQVJFQV9NQVNLKGFkZHIsIGxlbikpOwotI2lmZGVmIENPTkZJR19TUEVfQkFTRQotCXNwdV9mbHVzaF9hbGxfc2xicyhjdXJyZW50LT5tbSk7Ci0jZW5kaWYKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJwcmVwYXJlX2h1Z2VwYWdlX3JhbmdlKCVseCwgJWx4KSIKLQkJICAgICAgICIgZmFpbGVkIChsb3dtYXNrOiAweCUwNGh4LCBoaWdobWFzazogMHglMDRoeClcbiIsCi0JCSAgICAgICBhZGRyLCBsZW4sCi0JCSAgICAgICBMT1dfRVNJRF9NQVNLKGFkZHIsIGxlbiksIEhUTEJfQVJFQV9NQVNLKGFkZHIsIGxlbikpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdHJ1Y3QgcGFnZSAqCiBmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB3cml0ZSkKIHsKIAlwdGVfdCAqcHRlcDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCWlmICghIGluX2h1Z2VwYWdlX2FyZWEobW0tPmNvbnRleHQsIGFkZHJlc3MpKQorCWlmIChnZXRfc2xpY2VfcHNpemUobW0sIGFkZHJlc3MpICE9IG1tdV9odWdlX3BzaXplKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCXB0ZXAgPSBodWdlX3B0ZV9vZmZzZXQobW0sIGFkZHJlc3MpOwpAQCAtNTUyLDM1OSArMzYxLDEzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qIEJlY2F1c2Ugd2UgaGF2ZSBhbiBleGNsdXNpdmUgaHVnZXBhZ2UgcmVnaW9uIHdoaWNoIGxpZXMgd2l0aGluIHRoZQotICogbm9ybWFsIHVzZXIgYWRkcmVzcyBzcGFjZSwgd2UgaGF2ZSB0byB0YWtlIHNwZWNpYWwgbWVhc3VyZXMgdG8gbWFrZQotICogbm9uLWh1Z2UgbW1hcCgpcyBldmFkZSB0aGUgaHVnZXBhZ2UgcmVzZXJ2ZWQgcmVnaW9ucy4gKi8KLXVuc2lnbmVkIGxvbmcgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyOwotCi0JaWYgKGxlbiA+IFRBU0tfU0laRSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBoYW5kbGUgZml4ZWQgbWFwcGluZzogcHJldmVudCBvdmVybGFwIHdpdGggaHVnZSBwYWdlcyAqLwotCWlmIChmbGFncyAmIE1BUF9GSVhFRCkgewotCQlpZiAoaXNfaHVnZXBhZ2Vfb25seV9yYW5nZShtbSwgYWRkciwgbGVuKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gYWRkcjsKLQl9Ci0KLQlpZiAoYWRkcikgewotCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKLQkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwotCQlpZiAoKChUQVNLX1NJWkUgLSBsZW4pID49IGFkZHIpCi0JCSAgICAmJiAoIXZtYSB8fCAoYWRkcitsZW4pIDw9IHZtYS0+dm1fc3RhcnQpCi0JCSAgICAmJiAhaXNfaHVnZXBhZ2Vfb25seV9yYW5nZShtbSwgYWRkcixsZW4pKQotCQkJcmV0dXJuIGFkZHI7Ci0JfQotCWlmIChsZW4gPiBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSkgewotCSAgICAgICAgc3RhcnRfYWRkciA9IGFkZHIgPSBtbS0+ZnJlZV9hcmVhX2NhY2hlOwotCX0gZWxzZSB7Ci0JICAgICAgICBzdGFydF9hZGRyID0gYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKLQkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKLQl9Ci0KLWZ1bGxfc2VhcmNoOgotCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKLQl3aGlsZSAoVEFTS19TSVpFIC0gbGVuID49IGFkZHIpIHsKLQkJQlVHX09OKHZtYSAmJiAoYWRkciA+PSB2bWEtPnZtX2VuZCkpOwotCi0JCWlmICh0b3VjaGVzX2h1Z2VwYWdlX2xvd19yYW5nZShtbSwgYWRkciwgbGVuKSkgewotCQkJYWRkciA9IEFMSUdOKGFkZHIrMSwgMTw8U0lEX1NISUZUKTsKLQkJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh0b3VjaGVzX2h1Z2VwYWdlX2hpZ2hfcmFuZ2UobW0sIGFkZHIsIGxlbikpIHsKLQkJCWFkZHIgPSBBTElHTihhZGRyKzEsIDFVTDw8SFRMQl9BUkVBX1NISUZUKTsKLQkJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCkgewotCQkJLyoKLQkJCSAqIFJlbWVtYmVyIHRoZSBwbGFjZSB3aGVyZSB3ZSBzdG9wcGVkIHRoZSBzZWFyY2g6Ci0JCQkgKi8KLQkJCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBhZGRyICsgbGVuOwotCQkJcmV0dXJuIGFkZHI7Ci0JCX0KLQkJaWYgKGFkZHIgKyBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA8IHZtYS0+dm1fc3RhcnQpCi0JCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB2bWEtPnZtX3N0YXJ0IC0gYWRkcjsKLQkJYWRkciA9IHZtYS0+dm1fZW5kOwotCQl2bWEgPSB2bWEtPnZtX25leHQ7Ci0JfQotCi0JLyogTWFrZSBzdXJlIHdlIGRpZG4ndCBtaXNzIGFueSBob2xlcyAqLwotCWlmIChzdGFydF9hZGRyICE9IFRBU0tfVU5NQVBQRURfQkFTRSkgewotCQlzdGFydF9hZGRyID0gYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKLQkJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSAwOwotCQlnb3RvIGZ1bGxfc2VhcmNoOwotCX0KLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotLyoKLSAqIFRoaXMgbW1hcC1hbGxvY2F0b3IgYWxsb2NhdGVzIG5ldyBhcmVhcyB0b3AtZG93biBmcm9tIGJlbG93IHRoZQotICogc3RhY2sncyBsb3cgbGltaXQgKHRoZSBiYXNlKToKLSAqCi0gKiBCZWNhdXNlIHdlIGhhdmUgYW4gZXhjbHVzaXZlIGh1Z2VwYWdlIHJlZ2lvbiB3aGljaCBsaWVzIHdpdGhpbiB0aGUKLSAqIG5vcm1hbCB1c2VyIGFkZHJlc3Mgc3BhY2UsIHdlIGhhdmUgdG8gdGFrZSBzcGVjaWFsIG1lYXN1cmVzIHRvIG1ha2UKLSAqIG5vbi1odWdlIG1tYXAoKXMgZXZhZGUgdGhlIGh1Z2VwYWdlIHJlc2VydmVkIHJlZ2lvbnMuCi0gKi8KLXVuc2lnbmVkIGxvbmcKLWFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyMCwKLQkJCSAgY29uc3QgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IHVuc2lnbmVkIGxvbmcgcGdvZmYsCi0JCQkgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2X3ZtYTsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG1tLT5tbWFwX2Jhc2UsIGFkZHIgPSBhZGRyMDsKLQl1bnNpZ25lZCBsb25nIGxhcmdlc3RfaG9sZSA9IG1tLT5jYWNoZWRfaG9sZV9zaXplOwotCWludCBmaXJzdF90aW1lID0gMTsKLQotCS8qIHJlcXVlc3RlZCBsZW5ndGggdG9vIGJpZyBmb3IgZW50aXJlIGFkZHJlc3Mgc3BhY2UgKi8KLQlpZiAobGVuID4gVEFTS19TSVpFKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIGhhbmRsZSBmaXhlZCBtYXBwaW5nOiBwcmV2ZW50IG92ZXJsYXAgd2l0aCBodWdlIHBhZ2VzICovCi0JaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7Ci0JCWlmIChpc19odWdlcGFnZV9vbmx5X3JhbmdlKG1tLCBhZGRyLCBsZW4pKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBhZGRyOwotCX0KLQotCS8qIGRvbnQgYWxsb3cgYWxsb2NhdGlvbnMgYWJvdmUgY3VycmVudCBiYXNlICovCi0JaWYgKG1tLT5mcmVlX2FyZWFfY2FjaGUgPiBiYXNlKQotCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYmFzZTsKLQotCS8qIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBhZGRyZXNzICovCi0JaWYgKGFkZHIpIHsKLQkJYWRkciA9IFBBR0VfQUxJR04oYWRkcik7Ci0JCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKLQkJaWYgKFRBU0tfU0laRSAtIGxlbiA+PSBhZGRyICYmCi0JCQkJKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KQotCQkJCSYmICFpc19odWdlcGFnZV9vbmx5X3JhbmdlKG1tLCBhZGRyLGxlbikpCi0JCQlyZXR1cm4gYWRkcjsKLQl9Ci0KLQlpZiAobGVuIDw9IGxhcmdlc3RfaG9sZSkgewotCSAgICAgICAgbGFyZ2VzdF9ob2xlID0gMDsKLQkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IGJhc2U7Ci0JfQotdHJ5X2FnYWluOgotCS8qIG1ha2Ugc3VyZSBpdCBjYW4gZml0IGluIHRoZSByZW1haW5pbmcgYWRkcmVzcyBzcGFjZSAqLwotCWlmIChtbS0+ZnJlZV9hcmVhX2NhY2hlIDwgbGVuKQotCQlnb3RvIGZhaWw7Ci0KLQkvKiBlaXRoZXIgbm8gYWRkcmVzcyByZXF1ZXN0ZWQgb3IgY2FudCBmaXQgaW4gcmVxdWVzdGVkIGFkZHJlc3MgaG9sZSAqLwotCWFkZHIgPSAobW0tPmZyZWVfYXJlYV9jYWNoZSAtIGxlbikgJiBQQUdFX01BU0s7Ci0JZG8gewotaHVnZXBhZ2VfcmVjaGVjazoKLQkJaWYgKHRvdWNoZXNfaHVnZXBhZ2VfbG93X3JhbmdlKG1tLCBhZGRyLCBsZW4pKSB7Ci0JCQlhZGRyID0gKGFkZHIgJiAoKH4wKSA8PCBTSURfU0hJRlQpKSAtIGxlbjsKLQkJCWdvdG8gaHVnZXBhZ2VfcmVjaGVjazsKLQkJfSBlbHNlIGlmICh0b3VjaGVzX2h1Z2VwYWdlX2hpZ2hfcmFuZ2UobW0sIGFkZHIsIGxlbikpIHsKLQkJCWFkZHIgPSAoYWRkciAmICgofjBVTCkgPDwgSFRMQl9BUkVBX1NISUZUKSkgLSBsZW47Ci0JCQlnb3RvIGh1Z2VwYWdlX3JlY2hlY2s7Ci0JCX0KLQotCQkvKgotCQkgKiBMb29rdXAgZmFpbHVyZSBtZWFucyBubyB2bWEgaXMgYWJvdmUgdGhpcyBhZGRyZXNzLAotCQkgKiBpLmUuIHJldHVybiB3aXRoIHN1Y2Nlc3M6Ci0JCSAqLwotIAkgCWlmICghKHZtYSA9IGZpbmRfdm1hX3ByZXYobW0sIGFkZHIsICZwcmV2X3ZtYSkpKQotCQkJcmV0dXJuIGFkZHI7Ci0KLQkJLyoKLQkJICogbmV3IHJlZ2lvbiBmaXRzIGJldHdlZW4gcHJldl92bWEtPnZtX2VuZCBhbmQKLQkJICogdm1hLT52bV9zdGFydCwgdXNlIGl0OgotCQkgKi8KLQkJaWYgKGFkZHIrbGVuIDw9IHZtYS0+dm1fc3RhcnQgJiYKLQkJICAgICAgICAgICghcHJldl92bWEgfHwgKGFkZHIgPj0gcHJldl92bWEtPnZtX2VuZCkpKSB7Ci0JCQkvKiByZW1lbWJlciB0aGUgYWRkcmVzcyBhcyBhIGhpbnQgZm9yIG5leHQgdGltZSAqLwotCQkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gbGFyZ2VzdF9ob2xlOwotCQkgICAgICAgIHJldHVybiAobW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHIpOwotCQl9IGVsc2UgewotCQkJLyogcHVsbCBmcmVlX2FyZWFfY2FjaGUgZG93biB0byB0aGUgZmlyc3QgaG9sZSAqLwotCQkgICAgICAgIGlmIChtbS0+ZnJlZV9hcmVhX2NhY2hlID09IHZtYS0+dm1fZW5kKSB7Ci0JCQkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IHZtYS0+dm1fc3RhcnQ7Ci0JCQkJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSBsYXJnZXN0X2hvbGU7Ci0JCQl9Ci0JCX0KLQotCQkvKiByZW1lbWJlciB0aGUgbGFyZ2VzdCBob2xlIHdlIHNhdyBzbyBmYXIgKi8KLQkJaWYgKGFkZHIgKyBsYXJnZXN0X2hvbGUgPCB2bWEtPnZtX3N0YXJ0KQotCQkgICAgICAgIGxhcmdlc3RfaG9sZSA9IHZtYS0+dm1fc3RhcnQgLSBhZGRyOwotCi0JCS8qIHRyeSBqdXN0IGJlbG93IHRoZSBjdXJyZW50IHZtYS0+dm1fc3RhcnQgKi8KLQkJYWRkciA9IHZtYS0+dm1fc3RhcnQtbGVuOwotCX0gd2hpbGUgKGxlbiA8PSB2bWEtPnZtX3N0YXJ0KTsKLQotZmFpbDoKLQkvKgotCSAqIGlmIGhpbnQgbGVmdCB1cyB3aXRoIG5vIHNwYWNlIGZvciB0aGUgcmVxdWVzdGVkCi0JICogbWFwcGluZyB0aGVuIHRyeSBhZ2FpbjoKLQkgKi8KLQlpZiAoZmlyc3RfdGltZSkgewotCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYmFzZTsKLQkJbGFyZ2VzdF9ob2xlID0gMDsKLQkJZmlyc3RfdGltZSA9IDA7Ci0JCWdvdG8gdHJ5X2FnYWluOwotCX0KLQkvKgotCSAqIEEgZmFpbGVkIG1tYXAoKSB2ZXJ5IGxpa2VseSBjYXVzZXMgYXBwbGljYXRpb24gZmFpbHVyZSwKLQkgKiBzbyBmYWxsIGJhY2sgdG8gdGhlIGJvdHRvbS11cCBmdW5jdGlvbiBoZXJlLiBUaGlzIHNjZW5hcmlvCi0JICogY2FuIGhhcHBlbiB3aXRoIGxhcmdlIHN0YWNrIGxpbWl0cyBhbmQgbGFyZ2UgbW1hcCgpCi0JICogYWxsb2NhdGlvbnMuCi0JICovCi0JbW0tPmZyZWVfYXJlYV9jYWNoZSA9IFRBU0tfVU5NQVBQRURfQkFTRTsKLQltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IH4wVUw7Ci0JYWRkciA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzKTsKLQkvKgotCSAqIFJlc3RvcmUgdGhlIHRvcGRvd24gYmFzZToKLQkgKi8KLQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYmFzZTsKLQltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IH4wVUw7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotc3RhdGljIGludCBodGxiX2NoZWNrX2hpbnRlZF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCi17Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0KLQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7Ci0JaWYgKFRBU0tfU0laRSAtIGxlbiA+PSBhZGRyICYmCi0JICAgICghdm1hIHx8ICgoYWRkciArIGxlbikgPD0gdm1hLT52bV9zdGFydCkpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBodGxiX2dldF9sb3dfYXJlYSh1bnNpZ25lZCBsb25nIGxlbiwgdTE2IHNlZ21hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQotCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKTsKLQl3aGlsZSAoYWRkciArIGxlbiA8PSAweDEwMDAwMDAwMFVMKSB7Ci0JCUJVR19PTih2bWEgJiYgKGFkZHIgPj0gdm1hLT52bV9lbmQpKTsgLyogaW52YXJpYW50ICovCi0KLQkJaWYgKCEgX193aXRoaW5faHVnZXBhZ2VfbG93X3JhbmdlKGFkZHIsIGxlbiwgc2VnbWFzaykpIHsKLQkJCWFkZHIgPSBBTElHTihhZGRyKzEsIDE8PFNJRF9TSElGVCk7Ci0JCQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghdm1hIHx8IChhZGRyICsgbGVuKSA8PSB2bWEtPnZtX3N0YXJ0KQotCQkJcmV0dXJuIGFkZHI7Ci0JCWFkZHIgPSBBTElHTih2bWEtPnZtX2VuZCwgSFBBR0VfU0laRSk7Ci0JCS8qIERlcGVuZGluZyBvbiBzZWdtYXNrIHRoaXMgbWlnaHQgbm90IGJlIGEgY29uZmlybWVkCi0JCSAqIGh1Z2VwYWdlIHJlZ2lvbiwgc28gdGhlIEFMSUdOIGNvdWxkIGhhdmUgc2tpcHBlZAotCQkgKiBzb21lIFZNQXMgKi8KLQkJdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOwotCX0KLQotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBodGxiX2dldF9oaWdoX2FyZWEodW5zaWduZWQgbG9uZyBsZW4sIHUxNiBhcmVhbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAweDEwMDAwMDAwMFVMOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCi0Jdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOwotCXdoaWxlIChhZGRyICsgbGVuIDw9IFRBU0tfU0laRV9VU0VSNjQpIHsKLQkJQlVHX09OKHZtYSAmJiAoYWRkciA+PSB2bWEtPnZtX2VuZCkpOyAvKiBpbnZhcmlhbnQgKi8KLQotCQlpZiAoISBfX3dpdGhpbl9odWdlcGFnZV9oaWdoX3JhbmdlKGFkZHIsIGxlbiwgYXJlYW1hc2spKSB7Ci0JCQlhZGRyID0gQUxJR04oYWRkcisxLCAxVUw8PEhUTEJfQVJFQV9TSElGVCk7Ci0JCQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghdm1hIHx8IChhZGRyICsgbGVuKSA8PSB2bWEtPnZtX3N0YXJ0KQotCQkJcmV0dXJuIGFkZHI7Ci0JCWFkZHIgPSBBTElHTih2bWEtPnZtX2VuZCwgSFBBR0VfU0laRSk7Ci0JCS8qIERlcGVuZGluZyBvbiBzZWdtYXNrIHRoaXMgbWlnaHQgbm90IGJlIGEgY29uZmlybWVkCi0JCSAqIGh1Z2VwYWdlIHJlZ2lvbiwgc28gdGhlIEFMSUdOIGNvdWxkIGhhdmUgc2tpcHBlZAotCQkgKiBzb21lIFZNQXMgKi8KLQkJdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOwotCX0KLQotCXJldHVybiAtRU5PTUVNOwotfQogCiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCiAJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JaW50IGxhc3RzaGlmdDsKLQl1MTYgYXJlYW1hc2ssIGN1cmFyZWFzOwotCi0JaWYgKEhQQUdFX1NISUZUID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChsZW4gJiB+SFBBR0VfTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGxlbiA+IFRBU0tfU0laRSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSXzE2TV9QQUdFKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBQYXJhbm9pYSwgY2FsbGVyIHNob3VsZCBoYXZlIGRlYWx0IHdpdGggdGhpcyAqLwotCUJVR19PTigoYWRkciArIGxlbikgIDwgYWRkcik7Ci0KLQkvKiBIYW5kbGUgTUFQX0ZJWEVEICovCi0JaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7Ci0JCWlmIChwcmVwYXJlX2h1Z2VwYWdlX3JhbmdlKGFkZHIsIGxlbiwgcGdvZmYpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBhZGRyOwotCX0KLQotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpIHsKLQkJY3VyYXJlYXMgPSBjdXJyZW50LT5tbS0+Y29udGV4dC5sb3dfaHRsYl9hcmVhczsKLQotCQkvKiBGaXJzdCBzZWUgaWYgd2UgY2FuIHVzZSB0aGUgaGludCBhZGRyZXNzICovCi0JCWlmIChhZGRyICYmIChodGxiX2NoZWNrX2hpbnRlZF9hcmVhKGFkZHIsIGxlbikgPT0gMCkpIHsKLQkJCWFyZWFtYXNrID0gTE9XX0VTSURfTUFTSyhhZGRyLCBsZW4pOwotCQkJaWYgKG9wZW5fbG93X2hwYWdlX2FyZWFzKGN1cnJlbnQtPm1tLCBhcmVhbWFzaykgPT0gMCkKLQkJCQlyZXR1cm4gYWRkcjsKLQkJfQotCi0JCS8qIE5leHQgc2VlIGlmIHdlIGNhbiBtYXAgaW4gdGhlIGV4aXN0aW5nIGxvdyBhcmVhcyAqLwotCQlhZGRyID0gaHRsYl9nZXRfbG93X2FyZWEobGVuLCBjdXJhcmVhcyk7Ci0JCWlmIChhZGRyICE9IC1FTk9NRU0pCi0JCQlyZXR1cm4gYWRkcjsKLQotCQkvKiBGaW5hbGx5IGdvIGxvb2tpbmcgZm9yIGFyZWFzIHRvIG9wZW4gKi8KLQkJbGFzdHNoaWZ0ID0gMDsKLQkJZm9yIChhcmVhbWFzayA9IExPV19FU0lEX01BU0soMHgxMDAwMDAwMDBVTC1sZW4sIGxlbik7Ci0JCSAgICAgISBsYXN0c2hpZnQ7IGFyZWFtYXNrID4+PTEpIHsKLQkJCWlmIChhcmVhbWFzayAmIDEpCi0JCQkJbGFzdHNoaWZ0ID0gMTsKLQotCQkJYWRkciA9IGh0bGJfZ2V0X2xvd19hcmVhKGxlbiwgY3VyYXJlYXMgfCBhcmVhbWFzayk7Ci0JCQlpZiAoKGFkZHIgIT0gLUVOT01FTSkKLQkJCSAgICAmJiBvcGVuX2xvd19ocGFnZV9hcmVhcyhjdXJyZW50LT5tbSwgYXJlYW1hc2spID09IDApCi0JCQkJcmV0dXJuIGFkZHI7Ci0JCX0KLQl9IGVsc2UgewotCQljdXJhcmVhcyA9IGN1cnJlbnQtPm1tLT5jb250ZXh0LmhpZ2hfaHRsYl9hcmVhczsKLQotCQkvKiBGaXJzdCBzZWUgaWYgd2UgY2FuIHVzZSB0aGUgaGludCBhZGRyZXNzICovCi0JCS8qIFdlIGRpc2NvdXJhZ2UgNjQtYml0IHByb2Nlc3NlcyBmcm9tIGRvaW5nIGh1Z2VwYWdlCi0JCSAqIG1hcHBpbmdzIGJlbG93IDRHQiAobXVzdCB1c2UgTUFQX0ZJWEVEKSAqLwotCQlpZiAoKGFkZHIgPj0gMHgxMDAwMDAwMDBVTCkKLQkJICAgICYmIChodGxiX2NoZWNrX2hpbnRlZF9hcmVhKGFkZHIsIGxlbikgPT0gMCkpIHsKLQkJCWFyZWFtYXNrID0gSFRMQl9BUkVBX01BU0soYWRkciwgbGVuKTsKLQkJCWlmIChvcGVuX2hpZ2hfaHBhZ2VfYXJlYXMoY3VycmVudC0+bW0sIGFyZWFtYXNrKSA9PSAwKQotCQkJCXJldHVybiBhZGRyOwotCQl9Ci0KLQkJLyogTmV4dCBzZWUgaWYgd2UgY2FuIG1hcCBpbiB0aGUgZXhpc3RpbmcgaGlnaCBhcmVhcyAqLwotCQlhZGRyID0gaHRsYl9nZXRfaGlnaF9hcmVhKGxlbiwgY3VyYXJlYXMpOwotCQlpZiAoYWRkciAhPSAtRU5PTUVNKQotCQkJcmV0dXJuIGFkZHI7Ci0KLQkJLyogRmluYWxseSBnbyBsb29raW5nIGZvciBhcmVhcyB0byBvcGVuICovCi0JCWxhc3RzaGlmdCA9IDA7Ci0JCWZvciAoYXJlYW1hc2sgPSBIVExCX0FSRUFfTUFTSyhUQVNLX1NJWkVfVVNFUjY0LWxlbiwgbGVuKTsKLQkJICAgICAhIGxhc3RzaGlmdDsgYXJlYW1hc2sgPj49MSkgewotCQkJaWYgKGFyZWFtYXNrICYgMSkKLQkJCQlsYXN0c2hpZnQgPSAxOwotCi0JCQlhZGRyID0gaHRsYl9nZXRfaGlnaF9hcmVhKGxlbiwgY3VyYXJlYXMgfCBhcmVhbWFzayk7Ci0JCQlpZiAoKGFkZHIgIT0gLUVOT01FTSkKLQkJCSAgICAmJiBvcGVuX2hpZ2hfaHBhZ2VfYXJlYXMoY3VycmVudC0+bW0sIGFyZWFtYXNrKSA9PSAwKQotCQkJCXJldHVybiBhZGRyOwotCQl9Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICJodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKCkgdW5hYmxlIHRvIG9wZW4iCi0JICAgICAgICIgZW5vdWdoIGFyZWFzXG4iKTsKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gc2xpY2VfZ2V0X3VubWFwcGVkX2FyZWEoYWRkciwgbGVuLCBmbGFncywKKwkJCQkgICAgICAgbW11X2h1Z2VfcHNpemUsIDEsIDApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKaW5kZXggNDQxNmQ1MS4uNzMxMmEyNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCkBAIC0xNDYsMjEgKzE0NiwxNiBAQAogCW1lbXNldChhZGRyLCAwLCBrbWVtX2NhY2hlX3NpemUoY2FjaGUpKTsKIH0KIAotI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBndGFibGVfY2FjaGVfc2l6ZVszXSA9IHsKLQlQVEVfVEFCTEVfU0laRSwgUE1EX1RBQkxFX1NJWkUsIFBHRF9UQUJMRV9TSVpFCi19Owotc3RhdGljIGNvbnN0IGNoYXIgKnBndGFibGVfY2FjaGVfbmFtZVtBUlJBWV9TSVpFKHBndGFibGVfY2FjaGVfc2l6ZSldID0gewotCSJwdGVfcG1kX2NhY2hlIiwgInBtZF9jYWNoZSIsICJwZ2RfY2FjaGUiLAotfTsKLSNlbHNlCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBndGFibGVfY2FjaGVfc2l6ZVsyXSA9IHsKLQlQVEVfVEFCTEVfU0laRSwgUE1EX1RBQkxFX1NJWkUKKwlQR0RfVEFCTEVfU0laRSwgUE1EX1RBQkxFX1NJWkUKIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcGd0YWJsZV9jYWNoZV9uYW1lW0FSUkFZX1NJWkUocGd0YWJsZV9jYWNoZV9zaXplKV0gPSB7Ci0JInBnZF9wdGVfY2FjaGUiLCAicHVkX3BtZF9jYWNoZSIsCi19OworI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisJInBnZF9jYWNoZSIsICJwbWRfY2FjaGUiLAorI2Vsc2UKKwkicGdkX2NhY2hlIiwgInB1ZF9wbWRfY2FjaGUiLAogI2VuZGlmIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCit9OwogCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogLyogSHVnZXBhZ2VzIG5lZWQgb25lIGV4dHJhIGNhY2hlLCBpbml0aWFsaXplZCBpbiBodWdldGxicGFnZS5jLiAgV2UKQEAgLTE4MywxMSArMTc4LDggQEAKIAkJICAgICJmb3Igc2l6ZTogJTA4eC4uLlxuIiwgbmFtZSwgaSwgc2l6ZSk7CiAJCXBndGFibGVfY2FjaGVbaV0gPSBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lLAogCQkJCQkJICAgICBzaXplLCBzaXplLAotCQkJCQkJICAgICAwLAorCQkJCQkJICAgICBTTEFCX1BBTklDLAogCQkJCQkJICAgICB6ZXJvX2N0b3IsCiAJCQkJCQkgICAgIE5VTEwpOwotCQlpZiAoISBwZ3RhYmxlX2NhY2hlW2ldKQotCQkJcGFuaWMoInBndGFibGVfY2FjaGVfaW5pdCgpOiBjb3VsZCBub3QgY3JlYXRlICVzIVxuIiwKLQkJCSAgICAgIG5hbWUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwppbmRleCBjNGJjZDc1Li4wMjY2YTk0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC04MCw3ICs4MSw2IEBACiAJcmV0dXJuIDA7CiAjZW5kaWYKIH0KLUVYUE9SVF9TWU1CT0wocGFnZV9pc19yYW0pOwogCiBwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHZtYV9wcm90KQpAQCAtMjc3LDYgKzI3NywyOCBAQAogCWluaXRfYm9vdG1lbV9kb25lID0gMTsKIH0KIAorLyogbWFyayBwYWdlcyB0aGF0IGRvbid0IGV4aXN0IGFzIG5vc2F2ZSAqLworc3RhdGljIGludCBfX2luaXQgbWFya19ub25yYW1fbm9zYXZlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsbWJfbmV4dF9yZWdpb25fc3RhcnRfcGZuLAorCQkgICAgICBsbWJfcmVnaW9uX21heF9wZm47CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbG1iLm1lbW9yeS5jbnQgLSAxOyBpKyspIHsKKwkJbG1iX3JlZ2lvbl9tYXhfcGZuID0KKwkJCShsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlID4+IFBBR0VfU0hJRlQpICsKKwkJCShsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplID4+IFBBR0VfU0hJRlQpOworCQlsbWJfbmV4dF9yZWdpb25fc3RhcnRfcGZuID0KKwkJCWxtYi5tZW1vcnkucmVnaW9uW2krMV0uYmFzZSA+PiBQQUdFX1NISUZUOworCisJCWlmIChsbWJfcmVnaW9uX21heF9wZm4gPCBsbWJfbmV4dF9yZWdpb25fc3RhcnRfcGZuKQorCQkJcmVnaXN0ZXJfbm9zYXZlX3JlZ2lvbihsbWJfcmVnaW9uX21heF9wZm4sCisJCQkJCSAgICAgICBsbWJfbmV4dF9yZWdpb25fc3RhcnRfcGZuKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMgLSBpbiBmYWN0IHdlJ3ZlIGFscmVhZHkgZG9uZSB0aGlzLgogICovCkBAIC0yODgsMTEgKzMxMCwxMiBAQAogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIAltYXBfcGFnZShQS01BUF9CQVNFLCAwLCAwKTsJLyogWFhYIGdyb3NzICovCi0JcGttYXBfcGFnZV90YWJsZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZF9vZmZzZXQocGdkX29mZnNldF9rCi0JCQkoUEtNQVBfQkFTRSksIFBLTUFQX0JBU0UpLCBQS01BUF9CQVNFKTsKKwlwa21hcF9wYWdlX3RhYmxlID0gcHRlX29mZnNldF9rZXJuZWwocG1kX29mZnNldChwdWRfb2Zmc2V0KHBnZF9vZmZzZXRfaworCQkJKFBLTUFQX0JBU0UpLCBQS01BUF9CQVNFKSwgUEtNQVBfQkFTRSksIFBLTUFQX0JBU0UpOwogCW1hcF9wYWdlKEtNQVBfRklYX0JFR0lOLCAwLCAwKTsJLyogWFhYIGdyb3NzICovCi0Ja21hcF9wdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfb2Zmc2V0KHBnZF9vZmZzZXRfawotCQkJKEtNQVBfRklYX0JFR0lOKSwgS01BUF9GSVhfQkVHSU4pLCBLTUFQX0ZJWF9CRUdJTik7CisJa21hcF9wdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfb2Zmc2V0KHB1ZF9vZmZzZXQocGdkX29mZnNldF9rCisJCQkoS01BUF9GSVhfQkVHSU4pLCBLTUFQX0ZJWF9CRUdJTiksIEtNQVBfRklYX0JFR0lOKSwKKwkJCSBLTUFQX0ZJWF9CRUdJTik7CiAJa21hcF9wcm90ID0gUEFHRV9LRVJORUw7CiAjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KIApAQCAtMzA4LDYgKzMzMSw4IEBACiAJbWF4X3pvbmVfcGZuc1taT05FX0RNQV0gPSB0b3Bfb2ZfcmFtID4+IFBBR0VfU0hJRlQ7CiAjZW5kaWYKIAlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKKworCW1hcmtfbm9ucmFtX25vc2F2ZSgpOwogfQogI2VuZGlmIC8qICEgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tYXAuYyBiL2FyY2gvcG93ZXJwYy9tbS9tbWFwLmMKaW5kZXggOTcyYThlOC4uODYwMTBmYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21tYXAuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW1hcC5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLyoKICAqIFRvcCBvZiBtbWFwIGFyZWEgKGp1c3QgYmVsb3cgdGhlIHByb2Nlc3Mgc3RhY2spLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfNjQuYwppbmRleCA5MGEwNmFjLi43YTc4Y2RjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfNjQuYwpAQCAtMjgsNiArMjgsNyBAQAogewogCWludCBpbmRleDsKIAlpbnQgZXJyOworCWludCBuZXdfY29udGV4dCA9IChtbS0+Y29udGV4dC5pZCA9PSAwKTsKIAogYWdhaW46CiAJaWYgKCFpZHJfcHJlX2dldCgmbW11X2NvbnRleHRfaWRyLCBHRlBfS0VSTkVMKSkKQEAgLTUwLDkgKzUxLDE4IEBACiAJfQogCiAJbW0tPmNvbnRleHQuaWQgPSBpbmRleDsKKyNpZmRlZiBDT05GSUdfUFBDX01NX1NMSUNFUworCS8qIFRoZSBvbGQgY29kZSB3b3VsZCByZS1wcm9tb3RlIG9uIGZvcmssIHdlIGRvbid0IGRvIHRoYXQKKwkgKiB3aGVuIHVzaW5nIHNsaWNlcyBhcyBpdCBjb3VsZCBjYXVzZSBwcm9ibGVtIHByb21vdGluZyBzbGljZXMKKwkgKiB0aGF0IGhhdmUgYmVlbiBmb3JjZWQgZG93biB0byA0SworCSAqLworCWlmIChuZXdfY29udGV4dCkKKwkJc2xpY2Vfc2V0X3VzZXJfcHNpemUobW0sIG1tdV92aXJ0dWFsX3BzaXplKTsKKyNlbHNlCiAJbW0tPmNvbnRleHQudXNlcl9wc2l6ZSA9IG1tdV92aXJ0dWFsX3BzaXplOwogCW1tLT5jb250ZXh0LnNsbHAgPSBTTEJfVlNJRF9VU0VSIHwKIAkJbW11X3BzaXplX2RlZnNbbW11X3ZpcnR1YWxfcHNpemVdLnNsbHA7CisjZW5kaWYKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9kZWNsLmggYi9hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaAppbmRleCA5YzQ1MzhiLi4yNTU4YzM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaAorKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaApAQCAtNDAsNyArNDAsOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9yZW1hcF9iYXNlOwogZXh0ZXJuIHVuc2lnbmVkIGludCBydGFzX2RhdGEsIHJ0YXNfc2l6ZTsKIAotZXh0ZXJuIFBURSAqSGFzaCwgKkhhc2hfZW5kOworc3RydWN0IF9QVEU7CitleHRlcm4gc3RydWN0IF9QVEUgKkhhc2gsICpIYXNoX2VuZDsKIGV4dGVybiB1bnNpZ25lZCBsb25nIEhhc2hfc2l6ZSwgSGFzaF9tYXNrOwogCiBleHRlcm4gdW5zaWduZWQgaW50IG51bV90bGJjYW1fZW50cmllczsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IGIzYTU5MmIuLmRlNDVhYTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtMjUyLDEyICsyNTIsMTUgQEAKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKIAkJbnVtYV9zZXR1cF9jcHUobGNwdSk7CiAJCXJldCA9IE5PVElGWV9PSzsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJY2FzZSBDUFVfREVBRDoKKwljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CiAJCXVubWFwX2NwdV9mcm9tX25vZGUobGNwdSk7CiAJCWJyZWFrOwogCQlyZXQgPSBOT1RJRllfT0s7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwppbmRleCBiY2E1NjAzLi5mNmFlMWE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKQEAgLTkzLDcgKzkzLDcgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBnZCwgUEdESVJfT1JERVIpOwogfQogCi1wdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK19faW5pdF9yZWZvayBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlwdGVfdCAqcHRlOwogCWV4dGVybiBpbnQgbWVtX2luaXRfZG9uZTsKQEAgLTI2MSw3ICsyNjEsNyBAQAogCWludCBlcnIgPSAtRU5PTUVNOwogCiAJLyogVXNlIHVwcGVyIDEwIGJpdHMgb2YgVkEgdG8gaW5kZXggdGhlIGZpcnN0IGxldmVsIG1hcCAqLwotCXBkID0gcG1kX29mZnNldChwZ2Rfb2Zmc2V0X2sodmEpLCB2YSk7CisJcGQgPSBwbWRfb2Zmc2V0KHB1ZF9vZmZzZXQocGdkX29mZnNldF9rKHZhKSwgdmEpLCB2YSk7CiAJLyogVXNlIG1pZGRsZSAxMCBiaXRzIG9mIFZBIHRvIGluZGV4IHRoZSBzZWNvbmQtbGV2ZWwgbWFwICovCiAJcGcgPSBwdGVfYWxsb2Nfa2VybmVsKHBkLCB2YSk7CiAJaWYgKHBnICE9IDApIHsKQEAgLTM1NCwyMyArMzU0LDI3IEBACiBnZXRfcHRlcHRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICoqcHRlcCwgcG1kX3QgKipwbWRwKQogewogICAgICAgICBwZ2RfdAkqcGdkOworCXB1ZF90CSpwdWQ7CiAgICAgICAgIHBtZF90CSpwbWQ7CiAgICAgICAgIHB0ZV90CSpwdGU7CiAgICAgICAgIGludCAgICAgcmV0dmFsID0gMDsKIAogICAgICAgICBwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyICYgUEFHRV9NQVNLKTsKICAgICAgICAgaWYgKHBnZCkgewotICAgICAgICAgICAgICAgIHBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyICYgUEFHRV9NQVNLKTsKLSAgICAgICAgICAgICAgICBpZiAocG1kX3ByZXNlbnQoKnBtZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkciAmIFBBR0VfTUFTSyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHRlKSB7Ci0JCQkJcmV0dmFsID0gMTsKLQkJCQkqcHRlcCA9IHB0ZTsKLQkJCQlpZiAocG1kcCkKLQkJCQkJKnBtZHAgPSBwbWQ7Ci0JCQkJLyogWFhYIGNhbGxlciBuZWVkcyB0byBkbyBwdGVfdW5tYXAsIHl1Y2sgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyICYgUEFHRV9NQVNLKTsKKwkJaWYgKHB1ZCAmJiBwdWRfcHJlc2VudCgqcHVkKSkgeworCQkJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIgJiBQQUdFX01BU0spOworCQkJaWYgKHBtZF9wcmVzZW50KCpwbWQpKSB7CisJCQkJcHRlID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyICYgUEFHRV9NQVNLKTsKKwkJCQlpZiAocHRlKSB7CisJCQkJCXJldHZhbCA9IDE7CisJCQkJCSpwdGVwID0gcHRlOworCQkJCQlpZiAocG1kcCkKKwkJCQkJCSpwbWRwID0gcG1kOworCQkJCQkvKiBYWFggY2FsbGVyIG5lZWRzIHRvIGRvIHB0ZV91bm1hcCwgeXVjayAqLworCQkJCX0KKwkJCX0KKwkJfQogICAgICAgICB9CiAgICAgICAgIHJldHVybihyZXR2YWwpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKaW5kZXggMWQ0NDM0MC4uYWQ2ZTEzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCkBAIC0zMjIsNiArMzIyLDggQEAKIEVYUE9SVF9TWU1CT0woaW91bm1hcCk7CiBFWFBPUlRfU1lNQk9MKF9faW91bm1hcCk7CiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGhiX2lvX2xvY2spOworCiB2b2lkIF9faW9tZW0gKiByZXNlcnZlX3BoYl9pb3NwYWNlKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAl2b2lkIF9faW9tZW0gKnZpcnRfYWRkcjsKQEAgLTMyOSw4ICszMzEsMTAgQEAKIAlpZiAocGhic19pb19ib3QgPj0gSU1BTExPQ19CQVNFKSAKIAkJcGFuaWMoInJlc2VydmVfcGhiX2lvc3BhY2UoKTogcGhiIGlvIHNwYWNlIG92ZXJmbG93XG4iKTsKIAkJCQorCXNwaW5fbG9jaygmcGhiX2lvX2xvY2spOwogCXZpcnRfYWRkciA9ICh2b2lkIF9faW9tZW0gKikgcGhic19pb19ib3Q7CiAJcGhic19pb19ib3QgKz0gc2l6ZTsKKwlzcGluX3VubG9jaygmcGhiX2lvX2xvY2spOwogCiAJcmV0dXJuIHZpcnRfYWRkcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vcHBjX21tdV8zMi5jCmluZGV4IDA1MDY2NjcuLmVjMTQyMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAKIAlpZiAoSGFzaCA9PSAwKQogCQlyZXR1cm47Ci0JcG1kID0gcG1kX29mZnNldChwZ2Rfb2Zmc2V0KG1tLCBlYSksIGVhKTsKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZF9vZmZzZXQocGdkX29mZnNldChtbSwgZWEpLCBlYSksIGVhKTsKIAlpZiAoIXBtZF9ub25lKCpwbWQpKQogCQlhZGRfaGFzaF9wYWdlKG1tLT5jb250ZXh0LmlkLCBlYSwgcG1kX3ZhbCgqcG1kKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc2xiLmMgYi9hcmNoL3Bvd2VycGMvbW0vc2xiLmMKaW5kZXggMjI0ZTk2MC4uMzA0Mzc1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zbGIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vc2xiLmMKQEAgLTE5OCwxMiArMTk4LDYgQEAKIAlzdGF0aWMgaW50IHNsYl9lbmNvZGluZ19pbml0ZWQ7CiAJZXh0ZXJuIHVuc2lnbmVkIGludCAqc2xiX21pc3Nfa2VybmVsX2xvYWRfbGluZWFyOwogCWV4dGVybiB1bnNpZ25lZCBpbnQgKnNsYl9taXNzX2tlcm5lbF9sb2FkX2lvOwotI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKLQlleHRlcm4gdW5zaWduZWQgaW50ICpzbGJfbWlzc191c2VyX2xvYWRfaHVnZTsKLQl1bnNpZ25lZCBsb25nIGh1Z2VfbGxwOwotCi0JaHVnZV9sbHAgPSBtbXVfcHNpemVfZGVmc1ttbXVfaHVnZV9wc2l6ZV0uc2xscDsKLSNlbmRpZgogCiAJLyogUHJlcGFyZSBvdXIgU0xCIG1pc3MgaGFuZGxlciBiYXNlZCBvbiBvdXIgcGFnZSBzaXplICovCiAJbGluZWFyX2xscCA9IG1tdV9wc2l6ZV9kZWZzW21tdV9saW5lYXJfcHNpemVdLnNsbHA7CkBAIC0yMjAsMTEgKzIxNCw2IEBACiAKIAkJREJHKCJTTEI6IGxpbmVhciAgTExQID0gJTA0eFxuIiwgbGluZWFyX2xscCk7CiAJCURCRygiU0xCOiBpbyAgICAgIExMUCA9ICUwNHhcbiIsIGlvX2xscCk7Ci0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQotCQlwYXRjaF9zbGJfZW5jb2Rpbmcoc2xiX21pc3NfdXNlcl9sb2FkX2h1Z2UsCi0JCQkJICAgU0xCX1ZTSURfVVNFUiB8IGh1Z2VfbGxwKTsKLQkJREJHKCJTTEI6IGh1Z2UgICAgTExQID0gJTA0eFxuIiwgaHVnZV9sbHApOwotI2VuZGlmCiAJfQogCiAJZ2V0X3BhY2EoKS0+c3RhYl9yciA9IFNMQl9OVU1fQk9MVEVEOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUyBiL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMKaW5kZXggYjEwZTQ3MC4uY2QxYTkzZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCkBAIC04MiwzMSArODIsNDUgQEAKIAlzcmRpLglyOSxyMTAsVVNFUl9FU0lEX0JJVFMKIAlibmUtCThmCQkJLyogaW52YWxpZCBlYSBiaXRzIHNldCAqLwogCi0JLyogRmlndXJlIG91dCBpZiB0aGUgc2VnbWVudCBjb250YWlucyBodWdlIHBhZ2VzICovCi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQotQkVHSU5fRlRSX1NFQ1RJT04KLQliCTFmCi1FTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl8xNk1fUEFHRSkKKworCS8qIHdoZW4gdXNpbmcgc2xpY2VzLCB3ZSBleHRyYWN0IHRoZSBwc2l6ZSBvZmYgdGhlIHNsaWNlIGJpdG1hcHMKKwkgKiBhbmQgdGhlbiB3ZSBuZWVkIHRvIGdldCB0aGUgc2xscCBlbmNvZGluZyBvZmYgdGhlIG1tdV9wc2l6ZV9kZWZzCisJICogYXJyYXkuCisJICoKKwkgKiBYWFggVGhpcyBpcyBhIGJpdCBpbmVmZmljaWVudCBlc3BlY2lhbGx5IGZvciB0aGUgbm9ybWFsIGNhc2UsCisJICogc28gd2Ugc2hvdWxkIHRyeSB0byBpbXBsZW1lbnQgYSBmYXN0IHBhdGggZm9yIHRoZSBzdGFuZGFyZCBwYWdlCisJICogc2l6ZSB1c2luZyB0aGUgb2xkIHNsbHAgdmFsdWUgc28gd2UgYXZvaWQgdGhlIGFycmF5LiBXZSBjYW5ub3QKKwkgKiByZWFsbHkgZG8gZHluYW1pYyBwYXRjaGluZyB1bmZvcnR1bmF0ZWx5IGFzIHByb2Nlc3NlcyBtaWdodCBmbGlwCisJICogYmV0d2VlbiA0ayBhbmQgNjRrIHN0YW5kYXJkIHBhZ2Ugc2l6ZQorCSAqLworI2lmZGVmIENPTkZJR19QUENfTU1fU0xJQ0VTCiAJY21wbGRpCXIxMCwxNgogCi0JbGh6CXI5LFBBQ0FMT1dIVExCQVJFQVMocjEzKQotCW1yCXIxMSxyMTAKKwkvKiBHZXQgdGhlIHNsaWNlIGluZGV4ICogNCBpbiByMTEgYW5kIG1hdGNoaW5nIHNsaWNlIHNpemUgbWFzayBpbiByOSAqLworCWxkCXI5LFBBQ0FMT1dTTElDRVNQU0laRShyMTMpCisJc2xkaQlyMTEscjEwLDIKIAlibHQJNWYKKwlsZAlyOSxQQUNBSElHSFNMSUNFUFNJWkUocjEzKQorCXNyZGkJcjExLHIxMCwoU0xJQ0VfSElHSF9TSElGVCAtIFNMSUNFX0xPV19TSElGVCAtIDIpCisJYW5kaS4JcjExLHIxMSwweDNjCiAKLQlsaHoJcjksUEFDQUhJR0hIVExCQVJFQVMocjEzKQotCXNyZGkJcjExLHIxMCwoSFRMQl9BUkVBX1NISUZULVNJRF9TSElGVCkKKzU6CS8qIEV4dHJhY3QgdGhlIHBzaXplIGFuZCBtdWx0aXBseSB0byBnZXQgYW4gYXJyYXkgb2Zmc2V0ICovCisJc3JkCXI5LHI5LHIxMQorCWFuZGkuCXI5LHI5LDB4ZgorCW11bGxpCXI5LHI5LE1NVVBTSVpFREVGU0laRQogCi01OglzcmQJcjkscjkscjExCi0JYW5kaS4JcjkscjksMQotCWJlcQkxZgotX0dMT0JBTChzbGJfbWlzc191c2VyX2xvYWRfaHVnZSkKLQlsaQlyMTEsMAotCWIJMmYKLTE6Ci0jZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLwotCisJLyogTm93IGdldCB0byB0aGUgYXJyYXkgYW5kIG9idGFpbiB0aGUgc2xscAorCSAqLworCWxkCXIxMSxQQUNBVE9DKHIxMykKKwlsZAlyMTEsbW11X3BzaXplX2RlZnNAZ290KHIxMSkKKwlhZGQJcjExLHIxMSxyOQorCWxkCXIxMSxNTVVQU0laRVNMTFAocjExKQorCW9yaQlyMTEscjExLFNMQl9WU0lEX1VTRVIKKyNlbHNlCisJLyogcGFjYSBjb250ZXh0IHNsbHAgYWxyZWFkeSBjb250YWlucyB0aGUgU0xCX1ZTSURfVVNFUiBiaXRzICovCiAJbGh6CXIxMSxQQUNBQ09OVEVYVFNMTFAocjEzKQotMjoKKyNlbmRpZiAvKiBDT05GSUdfUFBDX01NX1NMSUNFUyAqLworCiAJbGQJcjksUEFDQUNPTlRFWFRJRChyMTMpCiAJcmxkaW1pCXIxMCxyOSxVU0VSX0VTSURfQklUUywwCiAJYglzbGJfZmluaXNoX2xvYWQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zbGljZS5jIGIvYXJjaC9wb3dlcnBjL21tL3NsaWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzM2RiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9zbGljZS5jCkBAIC0wLDAgKzEsNjMzIEBACisvKgorICogYWRkcmVzcyBzcGFjZSAic2xpY2VzIiAobWV0YS1zZWdtZW50cykgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogQmFzZWQgb24gaHVnZXRsYiBpbXBsZW1lbnRhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBHaWJzb24sIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9tbWFuLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9zcHUuaD4KKworc3RhdGljIHNwaW5sb2NrX3Qgc2xpY2VfY29udmVydF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCisKKyNpZmRlZiBERUJVRworaW50IF9zbGljZV9kZWJ1ZyA9IDE7CisKK3N0YXRpYyB2b2lkIHNsaWNlX3ByaW50X21hc2soY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBzbGljZV9tYXNrIG1hc2spCit7CisJY2hhcgkqcCwgYnVmWzE2ICsgMyArIDE2ICsgMV07CisJaW50CWk7CisKKwlpZiAoIV9zbGljZV9kZWJ1ZykKKwkJcmV0dXJuOworCXAgPSBidWY7CisJZm9yIChpID0gMDsgaSA8IFNMSUNFX05VTV9MT1c7IGkrKykKKwkJKihwKyspID0gKG1hc2subG93X3NsaWNlcyAmICgxIDw8IGkpKSA/ICcxJyA6ICcwJzsKKwkqKHArKykgPSAnICc7CisJKihwKyspID0gJy0nOworCSoocCsrKSA9ICcgJzsKKwlmb3IgKGkgPSAwOyBpIDwgU0xJQ0VfTlVNX0hJR0g7IGkrKykKKwkJKihwKyspID0gKG1hc2suaGlnaF9zbGljZXMgJiAoMSA8PCBpKSkgPyAnMScgOiAnMCc7CisJKihwKyspID0gMDsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczolc1xuIiwgbGFiZWwsIGJ1Zik7Cit9CisKKyNkZWZpbmUgc2xpY2VfZGJnKGZtdC4uLikgZG8geyBpZiAoX3NsaWNlX2RlYnVnKSBwcl9kZWJ1ZyhmbXQpOyB9IHdoaWxlKDApCisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIHNsaWNlX3ByaW50X21hc2soY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBzbGljZV9tYXNrIG1hc2spIHt9CisjZGVmaW5lIHNsaWNlX2RiZyhmbXQuLi4pCisKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHNsaWNlX21hc2sgc2xpY2VfcmFuZ2VfdG9fbWFzayh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBsZW4gLSAxOworCXN0cnVjdCBzbGljZV9tYXNrIHJldCA9IHsgMCwgMCB9OworCisJaWYgKHN0YXJ0IDwgU0xJQ0VfTE9XX1RPUCkgeworCQl1bnNpZ25lZCBsb25nIG1lbmQgPSBtaW4oZW5kLCBTTElDRV9MT1dfVE9QKTsKKwkJdW5zaWduZWQgbG9uZyBtc3RhcnQgPSBtaW4oc3RhcnQsIFNMSUNFX0xPV19UT1ApOworCisJCXJldC5sb3dfc2xpY2VzID0gKDF1IDw8IChHRVRfTE9XX1NMSUNFX0lOREVYKG1lbmQpICsgMSkpCisJCQktICgxdSA8PCBHRVRfTE9XX1NMSUNFX0lOREVYKG1zdGFydCkpOworCX0KKworCWlmICgoc3RhcnQgKyBsZW4pID4gU0xJQ0VfTE9XX1RPUCkKKwkJcmV0LmhpZ2hfc2xpY2VzID0gKDF1IDw8IChHRVRfSElHSF9TTElDRV9JTkRFWChlbmQpICsgMSkpCisJCQktICgxdSA8PCBHRVRfSElHSF9TTElDRV9JTkRFWChzdGFydCkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbGljZV9hcmVhX2lzX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCisJaWYgKChtbS0+dGFza19zaXplIC0gbGVuKSA8IGFkZHIpCisJCXJldHVybiAwOworCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKKwlyZXR1cm4gKCF2bWEgfHwgKGFkZHIgKyBsZW4pIDw9IHZtYS0+dm1fc3RhcnQpOworfQorCitzdGF0aWMgaW50IHNsaWNlX2xvd19oYXNfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHNsaWNlKQoreworCXJldHVybiAhc2xpY2VfYXJlYV9pc19mcmVlKG1tLCBzbGljZSA8PCBTTElDRV9MT1dfU0hJRlQsCisJCQkJICAgMXVsIDw8IFNMSUNFX0xPV19TSElGVCk7Cit9CisKK3N0YXRpYyBpbnQgc2xpY2VfaGlnaF9oYXNfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHNsaWNlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBzbGljZSA8PCBTTElDRV9ISUdIX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyAoMXVsIDw8IFNMSUNFX0hJR0hfU0hJRlQpOworCisJLyogSGFjaywgc28gdGhhdCBlYWNoIGFkZHJlc3NlcyBpcyBjb250cm9sbGVkIGJ5IGV4YWN0bHkgb25lCisJICogb2YgdGhlIGhpZ2ggb3IgbG93IGFyZWEgYml0bWFwcywgdGhlIGZpcnN0IGhpZ2ggYXJlYSBzdGFydHMKKwkgKiBhdCA0R0IsIG5vdCAwICovCisJaWYgKHN0YXJ0ID09IDApCisJCXN0YXJ0ID0gU0xJQ0VfTE9XX1RPUDsKKworCXJldHVybiAhc2xpY2VfYXJlYV9pc19mcmVlKG1tLCBzdGFydCwgZW5kIC0gc3RhcnQpOworfQorCitzdGF0aWMgc3RydWN0IHNsaWNlX21hc2sgc2xpY2VfbWFza19mb3JfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3Qgc2xpY2VfbWFzayByZXQgPSB7IDAsIDAgfTsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0xJQ0VfTlVNX0xPVzsgaSsrKQorCQlpZiAoIXNsaWNlX2xvd19oYXNfdm1hKG1tLCBpKSkKKwkJCXJldC5sb3dfc2xpY2VzIHw9IDF1IDw8IGk7CisKKwlpZiAobW0tPnRhc2tfc2l6ZSA8PSBTTElDRV9MT1dfVE9QKQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IFNMSUNFX05VTV9ISUdIOyBpKyspCisJCWlmICghc2xpY2VfaGlnaF9oYXNfdm1hKG1tLCBpKSkKKwkJCXJldC5oaWdoX3NsaWNlcyB8PSAxdSA8PCBpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzbGljZV9tYXNrIHNsaWNlX21hc2tfZm9yX3NpemUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBwc2l6ZSkKK3sKKwlzdHJ1Y3Qgc2xpY2VfbWFzayByZXQgPSB7IDAsIDAgfTsKKwl1bnNpZ25lZCBsb25nIGk7CisJdTY0IHBzaXplczsKKworCXBzaXplcyA9IG1tLT5jb250ZXh0Lmxvd19zbGljZXNfcHNpemU7CisJZm9yIChpID0gMDsgaSA8IFNMSUNFX05VTV9MT1c7IGkrKykKKwkJaWYgKCgocHNpemVzID4+IChpICogNCkpICYgMHhmKSA9PSBwc2l6ZSkKKwkJCXJldC5sb3dfc2xpY2VzIHw9IDF1IDw8IGk7CisKKwlwc2l6ZXMgPSBtbS0+Y29udGV4dC5oaWdoX3NsaWNlc19wc2l6ZTsKKwlmb3IgKGkgPSAwOyBpIDwgU0xJQ0VfTlVNX0hJR0g7IGkrKykKKwkJaWYgKCgocHNpemVzID4+IChpICogNCkpICYgMHhmKSA9PSBwc2l6ZSkKKwkJCXJldC5oaWdoX3NsaWNlcyB8PSAxdSA8PCBpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbGljZV9jaGVja19maXQoc3RydWN0IHNsaWNlX21hc2sgbWFzaywgc3RydWN0IHNsaWNlX21hc2sgYXZhaWxhYmxlKQoreworCXJldHVybiAobWFzay5sb3dfc2xpY2VzICYgYXZhaWxhYmxlLmxvd19zbGljZXMpID09IG1hc2subG93X3NsaWNlcyAmJgorCQkobWFzay5oaWdoX3NsaWNlcyAmIGF2YWlsYWJsZS5oaWdoX3NsaWNlcykgPT0gbWFzay5oaWdoX3NsaWNlczsKK30KKworc3RhdGljIHZvaWQgc2xpY2VfZmx1c2hfc2VnbWVudHModm9pZCAqcGFybSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHBhcm07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChtbSAhPSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCXJldHVybjsKKworCS8qIHVwZGF0ZSB0aGUgcGFjYSBjb3B5IG9mIHRoZSBjb250ZXh0IHN0cnVjdCAqLworCWdldF9wYWNhKCktPmNvbnRleHQgPSBjdXJyZW50LT5hY3RpdmVfbW0tPmNvbnRleHQ7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJc2xiX2ZsdXNoX2FuZF9yZWJvbHQoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNlX2NvbnZlcnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBzbGljZV9tYXNrIG1hc2ssIGludCBwc2l6ZSkKK3sKKwkvKiBXcml0ZSB0aGUgbmV3IHNsaWNlIHBzaXplIGJpdHMgKi8KKwl1NjQgbHBzaXplcywgaHBzaXplczsKKwl1bnNpZ25lZCBsb25nIGksIGZsYWdzOworCisJc2xpY2VfZGJnKCJzbGljZV9jb252ZXJ0KG1tPSVwLCBwc2l6ZT0lZClcbiIsIG1tLCBwc2l6ZSk7CisJc2xpY2VfcHJpbnRfbWFzaygiIG1hc2siLCBtYXNrKTsKKworCS8qIFdlIG5lZWQgdG8gdXNlIGEgc3BpbmxvY2sgaGVyZSB0byBwcm90ZWN0IGFnYWluc3QKKwkgKiBjb25jdXJyZW50IDY0ayAtPiA0ayBkZW1vdGlvbiAuLi4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xpY2VfY29udmVydF9sb2NrLCBmbGFncyk7CisKKwlscHNpemVzID0gbW0tPmNvbnRleHQubG93X3NsaWNlc19wc2l6ZTsKKwlmb3IgKGkgPSAwOyBpIDwgU0xJQ0VfTlVNX0xPVzsgaSsrKQorCQlpZiAobWFzay5sb3dfc2xpY2VzICYgKDF1IDw8IGkpKQorCQkJbHBzaXplcyA9IChscHNpemVzICYgfigweGZ1bCA8PCAoaSAqIDQpKSkgfAorCQkJCSgoKHVuc2lnbmVkIGxvbmcpcHNpemUpIDw8IChpICogNCkpOworCisJaHBzaXplcyA9IG1tLT5jb250ZXh0LmhpZ2hfc2xpY2VzX3BzaXplOworCWZvciAoaSA9IDA7IGkgPCBTTElDRV9OVU1fSElHSDsgaSsrKQorCQlpZiAobWFzay5oaWdoX3NsaWNlcyAmICgxdSA8PCBpKSkKKwkJCWhwc2l6ZXMgPSAoaHBzaXplcyAmIH4oMHhmdWwgPDwgKGkgKiA0KSkpIHwKKwkJCQkoKCh1bnNpZ25lZCBsb25nKXBzaXplKSA8PCAoaSAqIDQpKTsKKworCW1tLT5jb250ZXh0Lmxvd19zbGljZXNfcHNpemUgPSBscHNpemVzOworCW1tLT5jb250ZXh0LmhpZ2hfc2xpY2VzX3BzaXplID0gaHBzaXplczsKKworCXNsaWNlX2RiZygiIGxzcHM9JWx4LCBoc3BzPSVseFxuIiwKKwkJICBtbS0+Y29udGV4dC5sb3dfc2xpY2VzX3BzaXplLAorCQkgIG1tLT5jb250ZXh0LmhpZ2hfc2xpY2VzX3BzaXplKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNlX2NvbnZlcnRfbG9jaywgZmxhZ3MpOworCW1iKCk7CisKKwkvKiBYWFggdGhpcyBpcyBzdWItb3B0aW1hbCBidXQgd2lsbCBkbyBmb3Igbm93ICovCisJb25fZWFjaF9jcHUoc2xpY2VfZmx1c2hfc2VnbWVudHMsIG1tLCAwLCAxKTsKKyNpZmRlZiBDT05GSUdfU1BVX0JBU0UKKwlzcHVfZmx1c2hfYWxsX3NsYnMobW0pOworI2VuZGlmCit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNsaWNlX2ZpbmRfYXJlYV9ib3R0b211cChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJCSAgICAgIHN0cnVjdCBzbGljZV9tYXNrIGF2YWlsYWJsZSwKKwkJCQkJICAgICAgaW50IHBzaXplLCBpbnQgdXNlX2NhY2hlKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkciwgYWRkcjsKKwlzdHJ1Y3Qgc2xpY2VfbWFzayBtYXNrOworCWludCBwc2hpZnQgPSBtYXhfdChpbnQsIG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdCwgUEFHRV9TSElGVCk7CisKKwlpZiAodXNlX2NhY2hlKSB7CisJCWlmIChsZW4gPD0gbW0tPmNhY2hlZF9ob2xlX3NpemUpIHsKKwkJCXN0YXJ0X2FkZHIgPSBhZGRyID0gVEFTS19VTk1BUFBFRF9CQVNFOworCQkJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSAwOworCQl9IGVsc2UKKwkJCXN0YXJ0X2FkZHIgPSBhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKKwl9IGVsc2UKKwkJc3RhcnRfYWRkciA9IGFkZHIgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisKK2Z1bGxfc2VhcmNoOgorCWZvciAoOzspIHsKKwkJYWRkciA9IF9BTElHTl9VUChhZGRyLCAxdWwgPDwgcHNoaWZ0KTsKKwkJaWYgKChUQVNLX1NJWkUgLSBsZW4pIDwgYWRkcikKKwkJCWJyZWFrOworCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CisJCUJVR19PTih2bWEgJiYgKGFkZHIgPj0gdm1hLT52bV9lbmQpKTsKKworCQltYXNrID0gc2xpY2VfcmFuZ2VfdG9fbWFzayhhZGRyLCBsZW4pOworCQlpZiAoIXNsaWNlX2NoZWNrX2ZpdChtYXNrLCBhdmFpbGFibGUpKSB7CisJCQlpZiAoYWRkciA8IFNMSUNFX0xPV19UT1ApCisJCQkJYWRkciA9IF9BTElHTl9VUChhZGRyICsgMSwgIDF1bCA8PCBTTElDRV9MT1dfU0hJRlQpOworCQkJZWxzZQorCQkJCWFkZHIgPSBfQUxJR05fVVAoYWRkciArIDEsICAxdWwgPDwgU0xJQ0VfSElHSF9TSElGVCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtYS0+dm1fc3RhcnQpIHsKKwkJCS8qCisJCQkgKiBSZW1lbWJlciB0aGUgcGxhY2Ugd2hlcmUgd2Ugc3RvcHBlZCB0aGUgc2VhcmNoOgorCQkJICovCisJCQlpZiAodXNlX2NhY2hlKQorCQkJCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBhZGRyICsgbGVuOworCQkJcmV0dXJuIGFkZHI7CisJCX0KKwkJaWYgKHVzZV9jYWNoZSAmJiAoYWRkciArIG1tLT5jYWNoZWRfaG9sZV9zaXplKSA8IHZtYS0+dm1fc3RhcnQpCisJCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB2bWEtPnZtX3N0YXJ0IC0gYWRkcjsKKwkJYWRkciA9IHZtYS0+dm1fZW5kOworCX0KKworCS8qIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBhbnkgaG9sZXMgKi8KKwlpZiAodXNlX2NhY2hlICYmIHN0YXJ0X2FkZHIgIT0gVEFTS19VTk1BUFBFRF9CQVNFKSB7CisJCXN0YXJ0X2FkZHIgPSBhZGRyID0gVEFTS19VTk1BUFBFRF9CQVNFOworCQltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CisJCWdvdG8gZnVsbF9zZWFyY2g7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzbGljZV9maW5kX2FyZWFfdG9wZG93bihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkJICAgICBzdHJ1Y3Qgc2xpY2VfbWFzayBhdmFpbGFibGUsCisJCQkJCSAgICAgaW50IHBzaXplLCBpbnQgdXNlX2NhY2hlKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlzdHJ1Y3Qgc2xpY2VfbWFzayBtYXNrOworCWludCBwc2hpZnQgPSBtYXhfdChpbnQsIG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdCwgUEFHRV9TSElGVCk7CisKKwkvKiBjaGVjayBpZiBmcmVlX2FyZWFfY2FjaGUgaXMgdXNlZnVsIGZvciB1cyAqLworCWlmICh1c2VfY2FjaGUpIHsKKwkJaWYgKGxlbiA8PSBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSkgeworCQkJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSAwOworCQkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IG1tLT5tbWFwX2Jhc2U7CisJCX0KKworCQkvKiBlaXRoZXIgbm8gYWRkcmVzcyByZXF1ZXN0ZWQgb3IgY2FuJ3QgZml0IGluIHJlcXVlc3RlZAorCQkgKiBhZGRyZXNzIGhvbGUKKwkJICovCisJCWFkZHIgPSBtbS0+ZnJlZV9hcmVhX2NhY2hlOworCisJCS8qIG1ha2Ugc3VyZSBpdCBjYW4gZml0IGluIHRoZSByZW1haW5pbmcgYWRkcmVzcyBzcGFjZSAqLworCQlpZiAoYWRkciA+IGxlbikgeworCQkJYWRkciA9IF9BTElHTl9ET1dOKGFkZHIgLSBsZW4sIDF1bCA8PCBwc2hpZnQpOworCQkJbWFzayA9IHNsaWNlX3JhbmdlX3RvX21hc2soYWRkciwgbGVuKTsKKwkJCWlmIChzbGljZV9jaGVja19maXQobWFzaywgYXZhaWxhYmxlKSAmJgorCQkJICAgIHNsaWNlX2FyZWFfaXNfZnJlZShtbSwgYWRkciwgbGVuKSkKKwkJCQkJLyogcmVtZW1iZXIgdGhlIGFkZHJlc3MgYXMgYSBoaW50IGZvcgorCQkJCQkgKiBuZXh0IHRpbWUKKwkJCQkJICovCisJCQkJCXJldHVybiAobW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHIpOworCQl9CisJfQorCisJYWRkciA9IG1tLT5tbWFwX2Jhc2U7CisJd2hpbGUgKGFkZHIgPiBsZW4pIHsKKwkJLyogR28gZG93biBieSBjaHVuayBzaXplICovCisJCWFkZHIgPSBfQUxJR05fRE9XTihhZGRyIC0gbGVuLCAxdWwgPDwgcHNoaWZ0KTsKKworCQkvKiBDaGVjayBmb3IgaGl0IHdpdGggZGlmZmVyZW50IHBhZ2Ugc2l6ZSAqLworCQltYXNrID0gc2xpY2VfcmFuZ2VfdG9fbWFzayhhZGRyLCBsZW4pOworCQlpZiAoIXNsaWNlX2NoZWNrX2ZpdChtYXNrLCBhdmFpbGFibGUpKSB7CisJCQlpZiAoYWRkciA8IFNMSUNFX0xPV19UT1ApCisJCQkJYWRkciA9IF9BTElHTl9ET1dOKGFkZHIsIDF1bCA8PCBTTElDRV9MT1dfU0hJRlQpOworCQkJZWxzZSBpZiAoYWRkciA8ICgxdWwgPDwgU0xJQ0VfSElHSF9TSElGVCkpCisJCQkJYWRkciA9IFNMSUNFX0xPV19UT1A7CisJCQllbHNlCisJCQkJYWRkciA9IF9BTElHTl9ET1dOKGFkZHIsIDF1bCA8PCBTTElDRV9ISUdIX1NISUZUKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTG9va3VwIGZhaWx1cmUgbWVhbnMgbm8gdm1hIGlzIGFib3ZlIHRoaXMgYWRkcmVzcywKKwkJICogZWxzZSBpZiBuZXcgcmVnaW9uIGZpdHMgYmVsb3cgdm1hLT52bV9zdGFydCwKKwkJICogcmV0dXJuIHdpdGggc3VjY2VzczoKKwkJICovCisJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKKwkJaWYgKCF2bWEgfHwgKGFkZHIgKyBsZW4pIDw9IHZtYS0+dm1fc3RhcnQpIHsKKwkJCS8qIHJlbWVtYmVyIHRoZSBhZGRyZXNzIGFzIGEgaGludCBmb3IgbmV4dCB0aW1lICovCisJCQlpZiAodXNlX2NhY2hlKQorCQkJCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBhZGRyOworCQkJcmV0dXJuIGFkZHI7CisJCX0KKworCQkvKiByZW1lbWJlciB0aGUgbGFyZ2VzdCBob2xlIHdlIHNhdyBzbyBmYXIgKi8KKwkJaWYgKHVzZV9jYWNoZSAmJiAoYWRkciArIG1tLT5jYWNoZWRfaG9sZV9zaXplKSA8IHZtYS0+dm1fc3RhcnQpCisJCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB2bWEtPnZtX3N0YXJ0IC0gYWRkcjsKKworCQkvKiB0cnkganVzdCBiZWxvdyB0aGUgY3VycmVudCB2bWEtPnZtX3N0YXJ0ICovCisJCWFkZHIgPSB2bWEtPnZtX3N0YXJ0OworCX0KKworCS8qCisJICogQSBmYWlsZWQgbW1hcCgpIHZlcnkgbGlrZWx5IGNhdXNlcyBhcHBsaWNhdGlvbiBmYWlsdXJlLAorCSAqIHNvIGZhbGwgYmFjayB0byB0aGUgYm90dG9tLXVwIGZ1bmN0aW9uIGhlcmUuIFRoaXMgc2NlbmFyaW8KKwkgKiBjYW4gaGFwcGVuIHdpdGggbGFyZ2Ugc3RhY2sgbGltaXRzIGFuZCBsYXJnZSBtbWFwKCkKKwkgKiBhbGxvY2F0aW9ucy4KKwkgKi8KKwlhZGRyID0gc2xpY2VfZmluZF9hcmVhX2JvdHRvbXVwKG1tLCBsZW4sIGF2YWlsYWJsZSwgcHNpemUsIDApOworCisJLyoKKwkgKiBSZXN0b3JlIHRoZSB0b3Bkb3duIGJhc2U6CisJICovCisJaWYgKHVzZV9jYWNoZSkgeworCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gbW0tPm1tYXBfYmFzZTsKKwkJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB+MFVMOworCX0KKworCXJldHVybiBhZGRyOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNsaWNlX2ZpbmRfYXJlYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJICAgICBzdHJ1Y3Qgc2xpY2VfbWFzayBtYXNrLCBpbnQgcHNpemUsCisJCQkJICAgICBpbnQgdG9wZG93biwgaW50IHVzZV9jYWNoZSkKK3sKKwlpZiAodG9wZG93bikKKwkJcmV0dXJuIHNsaWNlX2ZpbmRfYXJlYV90b3Bkb3duKG1tLCBsZW4sIG1hc2ssIHBzaXplLCB1c2VfY2FjaGUpOworCWVsc2UKKwkJcmV0dXJuIHNsaWNlX2ZpbmRfYXJlYV9ib3R0b211cChtbSwgbGVuLCBtYXNrLCBwc2l6ZSwgdXNlX2NhY2hlKTsKK30KKwordW5zaWduZWQgbG9uZyBzbGljZV9nZXRfdW5tYXBwZWRfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGludCBwc2l6ZSwKKwkJCQkgICAgICBpbnQgdG9wZG93biwgaW50IHVzZV9jYWNoZSkKK3sKKwlzdHJ1Y3Qgc2xpY2VfbWFzayBtYXNrOworCXN0cnVjdCBzbGljZV9tYXNrIGdvb2RfbWFzazsKKwlzdHJ1Y3Qgc2xpY2VfbWFzayBwb3RlbnRpYWxfbWFzayA9IHswLDB9IC8qIHNpbGVuY2Ugc3R1cGlkIHdhcm5pbmcgKi87CisJaW50IHBtYXNrX3NldCA9IDA7CisJaW50IGZpeGVkID0gKGZsYWdzICYgTUFQX0ZJWEVEKTsKKwlpbnQgcHNoaWZ0ID0gbWF4X3QoaW50LCBtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQsIFBBR0VfU0hJRlQpOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisKKwkvKiBTYW5pdHkgY2hlY2tzICovCisJQlVHX09OKG1tLT50YXNrX3NpemUgPT0gMCk7CisKKwlzbGljZV9kYmcoInNsaWNlX2dldF91bm1hcHBlZF9hcmVhKG1tPSVwLCBwc2l6ZT0lZC4uLlxuIiwgbW0sIHBzaXplKTsKKwlzbGljZV9kYmcoIiBhZGRyPSVseCwgbGVuPSVseCwgZmxhZ3M9JWx4LCB0b3Bkb3duPSVkLCB1c2VfY2FjaGU9JWRcbiIsCisJCSAgYWRkciwgbGVuLCBmbGFncywgdG9wZG93biwgdXNlX2NhY2hlKTsKKworCWlmIChsZW4gPiBtbS0+dGFza19zaXplKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZml4ZWQgJiYgKGFkZHIgJiAoKDF1bCA8PCBwc2hpZnQpIC0gMSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZml4ZWQgJiYgYWRkciA+IChtbS0+dGFza19zaXplIC0gbGVuKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBJZiBoaW50LCBtYWtlIHN1cmUgaXQgbWF0Y2hlcyBvdXIgYWxpZ25tZW50IHJlc3RyaWN0aW9ucyAqLworCWlmICghZml4ZWQgJiYgYWRkcikgeworCQlhZGRyID0gX0FMSUdOX1VQKGFkZHIsIDF1bCA8PCBwc2hpZnQpOworCQlzbGljZV9kYmcoIiBhbGlnbmVkIGFkZHI9JWx4XG4iLCBhZGRyKTsKKwl9CisKKwkvKiBGaXJzdCBtYWtldXAgYSAiZ29vZCIgbWFzayBvZiBzbGljZXMgdGhhdCBoYXZlIHRoZSByaWdodCBzaXplCisJICogYWxyZWFkeQorCSAqLworCWdvb2RfbWFzayA9IHNsaWNlX21hc2tfZm9yX3NpemUobW0sIHBzaXplKTsKKwlzbGljZV9wcmludF9tYXNrKCIgZ29vZF9tYXNrIiwgZ29vZF9tYXNrKTsKKworCS8qIEZpcnN0IGNoZWNrIGhpbnQgaWYgaXQncyB2YWxpZCBvciBpZiB3ZSBoYXZlIE1BUF9GSVhFRCAqLworCWlmICgoYWRkciAhPSAwIHx8IGZpeGVkKSAmJiAobW0tPnRhc2tfc2l6ZSAtIGxlbikgPj0gYWRkcikgeworCisJCS8qIERvbid0IGJvdGhlciB3aXRoIGhpbnQgaWYgaXQgb3ZlcmxhcHMgYSBWTUEgKi8KKwkJaWYgKCFmaXhlZCAmJiAhc2xpY2VfYXJlYV9pc19mcmVlKG1tLCBhZGRyLCBsZW4pKQorCQkJZ290byBzZWFyY2g7CisKKwkJLyogQnVpbGQgYSBtYXNrIGZvciB0aGUgcmVxdWVzdGVkIHJhbmdlICovCisJCW1hc2sgPSBzbGljZV9yYW5nZV90b19tYXNrKGFkZHIsIGxlbik7CisJCXNsaWNlX3ByaW50X21hc2soIiBtYXNrIiwgbWFzayk7CisKKwkJLyogQ2hlY2sgaWYgd2UgZml0IGluIHRoZSBnb29kIG1hc2suIElmIHdlIGRvLCB3ZSBqdXN0IHJldHVybiwKKwkJICogbm90aGluZyBlbHNlIHRvIGRvCisJCSAqLworCQlpZiAoc2xpY2VfY2hlY2tfZml0KG1hc2ssIGdvb2RfbWFzaykpIHsKKwkJCXNsaWNlX2RiZygiIGZpdHMgZ29vZCAhXG4iKTsKKwkJCXJldHVybiBhZGRyOworCQl9CisKKwkJLyogV2UgZG9uJ3QgZml0IGluIHRoZSBnb29kIG1hc2ssIGNoZWNrIHdoYXQgb3RoZXIgc2xpY2VzIGFyZQorCQkgKiBlbXB0eSBhbmQgdGh1cyBjYW4gYmUgY29udmVydGVkCisJCSAqLworCQlwb3RlbnRpYWxfbWFzayA9IHNsaWNlX21hc2tfZm9yX2ZyZWUobW0pOworCQlwb3RlbnRpYWxfbWFzay5sb3dfc2xpY2VzIHw9IGdvb2RfbWFzay5sb3dfc2xpY2VzOworCQlwb3RlbnRpYWxfbWFzay5oaWdoX3NsaWNlcyB8PSBnb29kX21hc2suaGlnaF9zbGljZXM7CisJCXBtYXNrX3NldCA9IDE7CisJCXNsaWNlX3ByaW50X21hc2soIiBwb3RlbnRpYWwiLCBwb3RlbnRpYWxfbWFzayk7CisJCWlmIChzbGljZV9jaGVja19maXQobWFzaywgcG90ZW50aWFsX21hc2spKSB7CisJCQlzbGljZV9kYmcoIiBmaXRzIHBvdGVudGlhbCAhXG4iKTsKKwkJCWdvdG8gY29udmVydDsKKwkJfQorCX0KKworCS8qIElmIHdlIGhhdmUgTUFQX0ZJWEVEIGFuZCBmYWlsZWQgdGhlIGFib3ZlIHN0ZXAsIHRoZW4gZXJyb3Igb3V0ICovCisJaWYgKGZpeGVkKQorCQlyZXR1cm4gLUVCVVNZOworCisgc2VhcmNoOgorCXNsaWNlX2RiZygiIHNlYXJjaC4uLlxuIik7CisKKwkvKiBOb3cgbGV0J3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWV0aGluZyBpbiB0aGUgZXhpc3Rpbmcgc2xpY2VzCisJICogZm9yIHRoYXQgc2l6ZQorCSAqLworCWFkZHIgPSBzbGljZV9maW5kX2FyZWEobW0sIGxlbiwgZ29vZF9tYXNrLCBwc2l6ZSwgdG9wZG93biwgdXNlX2NhY2hlKTsKKwlpZiAoYWRkciAhPSAtRU5PTUVNKSB7CisJCS8qIEZvdW5kIHdpdGhpbiB0aGUgZ29vZCBtYXNrLCB3ZSBkb24ndCBoYXZlIHRvIHNldHVwLAorCQkgKiB3ZSB0aHVzIHJldHVybiBkaXJlY3RseQorCQkgKi8KKwkJc2xpY2VfZGJnKCIgZm91bmQgYXJlYSBhdCAweCVseFxuIiwgYWRkcik7CisJCXJldHVybiBhZGRyOworCX0KKworCS8qIFdvbid0IGZpdCwgY2hlY2sgd2hhdCBjYW4gYmUgY29udmVydGVkICovCisJaWYgKCFwbWFza19zZXQpIHsKKwkJcG90ZW50aWFsX21hc2sgPSBzbGljZV9tYXNrX2Zvcl9mcmVlKG1tKTsKKwkJcG90ZW50aWFsX21hc2subG93X3NsaWNlcyB8PSBnb29kX21hc2subG93X3NsaWNlczsKKwkJcG90ZW50aWFsX21hc2suaGlnaF9zbGljZXMgfD0gZ29vZF9tYXNrLmhpZ2hfc2xpY2VzOworCQlwbWFza19zZXQgPSAxOworCQlzbGljZV9wcmludF9tYXNrKCIgcG90ZW50aWFsIiwgcG90ZW50aWFsX21hc2spOworCX0KKworCS8qIE5vdyBsZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZXRoaW5nIGluIHRoZSBleGlzdGluZyBzbGljZXMKKwkgKiBmb3IgdGhhdCBzaXplCisJICovCisJYWRkciA9IHNsaWNlX2ZpbmRfYXJlYShtbSwgbGVuLCBwb3RlbnRpYWxfbWFzaywgcHNpemUsIHRvcGRvd24sCisJCQkgICAgICAgdXNlX2NhY2hlKTsKKwlpZiAoYWRkciA9PSAtRU5PTUVNKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1hc2sgPSBzbGljZV9yYW5nZV90b19tYXNrKGFkZHIsIGxlbik7CisJc2xpY2VfZGJnKCIgZm91bmQgcG90ZW50aWFsIGFyZWEgYXQgMHglbHhcbiIsIGFkZHIpOworCXNsaWNlX3ByaW50X21hc2soIiBtYXNrIiwgbWFzayk7CisKKyBjb252ZXJ0OgorCXNsaWNlX2NvbnZlcnQobW0sIG1hc2ssIHBzaXplKTsKKwlyZXR1cm4gYWRkcjsKKworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2xpY2VfZ2V0X3VubWFwcGVkX2FyZWEpOworCit1bnNpZ25lZCBsb25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiBzbGljZV9nZXRfdW5tYXBwZWRfYXJlYShhZGRyLCBsZW4sIGZsYWdzLAorCQkJCSAgICAgICBjdXJyZW50LT5tbS0+Y29udGV4dC51c2VyX3BzaXplLAorCQkJCSAgICAgICAwLCAxKTsKK30KKwordW5zaWduZWQgbG9uZyBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJCSAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyMCwKKwkJCQkJICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkJICAgICBjb25zdCB1bnNpZ25lZCBsb25nIHBnb2ZmLAorCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIHNsaWNlX2dldF91bm1hcHBlZF9hcmVhKGFkZHIwLCBsZW4sIGZsYWdzLAorCQkJCSAgICAgICBjdXJyZW50LT5tbS0+Y29udGV4dC51c2VyX3BzaXplLAorCQkJCSAgICAgICAxLCAxKTsKK30KKwordW5zaWduZWQgaW50IGdldF9zbGljZV9wc2l6ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXU2NCBwc2l6ZXM7CisJaW50IGluZGV4OworCisJaWYgKGFkZHIgPCBTTElDRV9MT1dfVE9QKSB7CisJCXBzaXplcyA9IG1tLT5jb250ZXh0Lmxvd19zbGljZXNfcHNpemU7CisJCWluZGV4ID0gR0VUX0xPV19TTElDRV9JTkRFWChhZGRyKTsKKwl9IGVsc2UgeworCQlwc2l6ZXMgPSBtbS0+Y29udGV4dC5oaWdoX3NsaWNlc19wc2l6ZTsKKwkJaW5kZXggPSBHRVRfSElHSF9TTElDRV9JTkRFWChhZGRyKTsKKwl9CisKKwlyZXR1cm4gKHBzaXplcyA+PiAoaW5kZXggKiA0KSkgJiAweGY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnZXRfc2xpY2VfcHNpemUpOworCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgaGFzaF9wYWdlIHdoZW4gaXQgbmVlZHMgdG8gZG8gYSBsYXp5IGNvbnZlcnNpb24gb2YKKyAqIGFuIGFkZHJlc3Mgc3BhY2UgZnJvbSByZWFsIDY0SyBwYWdlcyB0byBjb21ibyA0SyBwYWdlcyAodHlwaWNhbGx5CisgKiB3aGVuIGhpdHRpbmcgYSBub24gY2FjaGVhYmxlIG1hcHBpbmcgb24gYSBwcm9jZXNzb3Igb3IgaHlwZXJ2aXNvcgorICogdGhhdCB3b24ndCBhbGxvdyB0aGVtIGZvciA2NEsgcGFnZXMpLgorICoKKyAqIFRoaXMgaXMgYWxzbyBjYWxsZWQgaW4gaW5pdF9uZXdfY29udGV4dCgpIHRvIGNoYW5nZSBiYWNrIHRoZSB1c2VyCisgKiBwc2l6ZSBmcm9tIHdoYXRldmVyIHRoZSBwYXJlbnQgY29udGV4dCBoYWQgaXQgc2V0IHRvCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgY2hhbmdlIHRoZSBjb250ZW50IG9mIHRoZSB7bG93LGhpZ2gpX3NsaWNlX3BzaXplCisgKiBtYXNrcywgaXQgd2lsbCBub3QgZmx1c2ggU0xCcyBhcyB0aGlzIHNoYWxsIGJlIGhhbmRsZWQgbGF6aWx5IGJ5IHRoZQorICogY2FsbGVyLgorICovCit2b2lkIHNsaWNlX3NldF91c2VyX3BzaXplKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgcHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgbHBzaXplcywgaHBzaXplczsKKwl1bnNpZ25lZCBpbnQgb2xkX3BzaXplOworCWludCBpOworCisJc2xpY2VfZGJnKCJzbGljZV9zZXRfdXNlcl9wc2l6ZShtbT0lcCwgcHNpemU9JWQpXG4iLCBtbSwgcHNpemUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNsaWNlX2NvbnZlcnRfbG9jaywgZmxhZ3MpOworCisJb2xkX3BzaXplID0gbW0tPmNvbnRleHQudXNlcl9wc2l6ZTsKKwlzbGljZV9kYmcoIiBvbGRfcHNpemU9JWRcbiIsIG9sZF9wc2l6ZSk7CisJaWYgKG9sZF9wc2l6ZSA9PSBwc2l6ZSkKKwkJZ290byBiYWlsOworCisJbW0tPmNvbnRleHQudXNlcl9wc2l6ZSA9IHBzaXplOworCXdtYigpOworCisJbHBzaXplcyA9IG1tLT5jb250ZXh0Lmxvd19zbGljZXNfcHNpemU7CisJZm9yIChpID0gMDsgaSA8IFNMSUNFX05VTV9MT1c7IGkrKykKKwkJaWYgKCgobHBzaXplcyA+PiAoaSAqIDQpKSAmIDB4ZikgPT0gb2xkX3BzaXplKQorCQkJbHBzaXplcyA9IChscHNpemVzICYgfigweGZ1bCA8PCAoaSAqIDQpKSkgfAorCQkJCSgoKHVuc2lnbmVkIGxvbmcpcHNpemUpIDw8IChpICogNCkpOworCisJaHBzaXplcyA9IG1tLT5jb250ZXh0LmhpZ2hfc2xpY2VzX3BzaXplOworCWZvciAoaSA9IDA7IGkgPCBTTElDRV9OVU1fSElHSDsgaSsrKQorCQlpZiAoKChocHNpemVzID4+IChpICogNCkpICYgMHhmKSA9PSBvbGRfcHNpemUpCisJCQlocHNpemVzID0gKGhwc2l6ZXMgJiB+KDB4ZnVsIDw8IChpICogNCkpKSB8CisJCQkJKCgodW5zaWduZWQgbG9uZylwc2l6ZSkgPDwgKGkgKiA0KSk7CisKKwltbS0+Y29udGV4dC5sb3dfc2xpY2VzX3BzaXplID0gbHBzaXplczsKKwltbS0+Y29udGV4dC5oaWdoX3NsaWNlc19wc2l6ZSA9IGhwc2l6ZXM7CisKKwlzbGljZV9kYmcoIiBsc3BzPSVseCwgaHNwcz0lbHhcbiIsCisJCSAgbW0tPmNvbnRleHQubG93X3NsaWNlc19wc2l6ZSwKKwkJICBtbS0+Y29udGV4dC5oaWdoX3NsaWNlc19wc2l6ZSk7CisKKyBiYWlsOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNlX2NvbnZlcnRfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogaXNfaHVnZXBhZ2Vfb25seV9yYW5nZSgpIGlzIHVzZWQgYnkgZ2VuZXJpYyBjb2RlIHRvIHZlcmlmeSB3ZXRoZXIKKyAqIGEgbm9ybWFsIG1tYXAgbWFwcGluZyAobm9uIGh1Z2V0bGJmcykgaXMgdmFsaWQgb24gYSBnaXZlbiBhcmVhLgorICoKKyAqIHVudGlsIHRoZSBnZW5lcmljIGNvZGUgcHJvdmlkZXMgYSBtb3JlIGdlbmVyaWMgaG9vayBhbmQvb3Igc3RhcnRzCisgKiBjYWxsaW5nIGFyY2ggZ2V0X3VubWFwcGVkX2FyZWEgZm9yIE1BUF9GSVhFRCAod2hpY2ggb3VyIGltcGxlbWVudGF0aW9uCisgKiBoZXJlIGtub3dzIGhvdyB0byBkZWFsIHdpdGgpLCB3ZSBoaWphY2sgaXQgdG8ga2VlcCBzdGFuZGFyZCBtYXBwaW5ncworICogYXdheSBmcm9tIHVzLgorICoKKyAqIGJlY2F1c2Ugb2YgdGhhdCBnZW5lcmljIGNvZGUgbGltaXRhdGlvbiwgTUFQX0ZJWEVEIG1hcHBpbmcgY2Fubm90CisgKiAiY29udmVydCIgYmFjayBhIHNsaWNlIHdpdGggbm8gVk1BcyB0byB0aGUgc3RhbmRhcmQgcGFnZSBzaXplLCBvbmx5CisgKiBnZXRfdW5tYXBwZWRfYXJlYSgpIGNhbi4gSXQgd291bGQgYmUgcG9zc2libGUgdG8gZml4IGl0IGhlcmUgYnV0IEkKKyAqIHByZWZlciB3b3JraW5nIG9uIGZpeGluZyB0aGUgZ2VuZXJpYyBjb2RlIGluc3RlYWQuCisgKgorICogV0FSTklORzogVGhpcyB3aWxsIG5vdCB3b3JrIGlmIGh1Z2V0bGJmcyBpc24ndCBlbmFibGVkIHNpbmNlIHRoZQorICogZ2VuZXJpYyBjb2RlIHdpbGwgcmVkZWZpbmUgdGhhdCBmdW5jdGlvbiBhcyAwIGluIHRoYXQuIFRoaXMgaXMgb2sKKyAqIGZvciBub3cgYXMgd2Ugb25seSB1c2Ugc2xpY2VzIHdpdGggaHVnZXRsYmZzIGVuYWJsZWQuIFRoaXMgc2hvdWxkCisgKiBiZSBmaXhlZCBhcyB0aGUgZ2VuZXJpYyBjb2RlIGdldHMgZml4ZWQuCisgKi8KK2ludCBpc19odWdlcGFnZV9vbmx5X3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3Qgc2xpY2VfbWFzayBtYXNrLCBhdmFpbGFibGU7CisKKwltYXNrID0gc2xpY2VfcmFuZ2VfdG9fbWFzayhhZGRyLCBsZW4pOworCWF2YWlsYWJsZSA9IHNsaWNlX21hc2tfZm9yX3NpemUobW0sIG1tLT5jb250ZXh0LnVzZXJfcHNpemUpOworCisjaWYgMCAvKiB0b28gdmVyYm9zZSAqLworCXNsaWNlX2RiZygiaXNfaHVnZXBhZ2Vfb25seV9yYW5nZShtbT0lcCwgYWRkcj0lbHgsIGxlbj0lbHgpXG4iLAorCQkgbW0sIGFkZHIsIGxlbik7CisJc2xpY2VfcHJpbnRfbWFzaygiIG1hc2siLCBtYXNrKTsKKwlzbGljZV9wcmludF9tYXNrKCIgYXZhaWxhYmxlIiwgYXZhaWxhYmxlKTsKKyNlbmRpZgorCXJldHVybiAhc2xpY2VfY2hlY2tfZml0KG1hc2ssIGF2YWlsYWJsZSk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMgYi9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCmluZGV4IGVlZWFjYWIuLjEzMmM2YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3N0YWIuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAgKiB0aGUgZmlyc3QgKGJvbHRlZCkgc2VnbWVudCwgc28gdGhhdCBkb19zdGFiX2JvbHRlZCB3b24ndCBnZXQgYQogICogcmVjdXJzaXZlIHNlZ21lbnQgbWlzcyBvbiB0aGUgc2VnbWVudCB0YWJsZSBpdHNlbGYuCiAgKi8KLXZvaWQgc3RhYnNfYWxsb2Modm9pZCkKK3ZvaWQgX19pbml0IHN0YWJzX2FsbG9jKHZvaWQpCiB7CiAJaW50IGNwdTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3RsYl8zMi5jCmluZGV4IDkyNWZmNzAuLjZhNjk0MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiXzMyLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCWlmIChzdGFydCA+PSBlbmQpCiAJCXJldHVybjsKIAllbmQgPSAoZW5kIC0gMSkgfCB+UEFHRV9NQVNLOwotCXBtZCA9IHBtZF9vZmZzZXQocGdkX29mZnNldChtbSwgc3RhcnQpLCBzdGFydCk7CisJcG1kID0gcG1kX29mZnNldChwdWRfb2Zmc2V0KHBnZF9vZmZzZXQobW0sIHN0YXJ0KSwgc3RhcnQpLCBzdGFydCk7CiAJZm9yICg7OykgewogCQlwbWRfZW5kID0gKChzdGFydCArIFBHRElSX1NJWkUpICYgUEdESVJfTUFTSykgLSAxOwogCQlpZiAocG1kX2VuZCA+IGVuZCkKQEAgLTE2OSw3ICsxNjksNyBAQAogCQlyZXR1cm47CiAJfQogCW1tID0gKHZtYWRkciA8IFRBU0tfU0laRSk/IHZtYS0+dm1fbW06ICZpbml0X21tOwotCXBtZCA9IHBtZF9vZmZzZXQocGdkX29mZnNldChtbSwgdm1hZGRyKSwgdm1hZGRyKTsKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZF9vZmZzZXQocGdkX29mZnNldChtbSwgdm1hZGRyKSwgdm1hZGRyKSwgdm1hZGRyKTsKIAlpZiAoIXBtZF9ub25lKCpwbWQpKQogCQlmbHVzaF9oYXNoX3BhZ2VzKG1tLT5jb250ZXh0LmlkLCB2bWFkZHIsIHBtZF92YWwoKnBtZCksIDEpOwogCUZJTklTSF9GTFVTSDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfNjQuYwppbmRleCBmZDhkMDhjLi4yYmZjNGQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl82NC5jCkBAIC0xNDMsMTYgKzE0MywyMiBAQAogCSAqLwogCWFkZHIgJj0gUEFHRV9NQVNLOwogCi0JLyogR2V0IHBhZ2Ugc2l6ZSAobWF5YmUgbW92ZSBiYWNrIHRvIGNhbGxlcikgKi8KKwkvKiBHZXQgcGFnZSBzaXplIChtYXliZSBtb3ZlIGJhY2sgdG8gY2FsbGVyKS4KKwkgKgorCSAqIE5PVEU6IHdoZW4gdXNpbmcgc3BlY2lhbCA2NEsgbWFwcGluZ3MgaW4gNEsgZW52aXJvbm1lbnQgbGlrZQorCSAqIGZvciBTUEVzLCB3ZSBvYnRhaW4gdGhlIHBhZ2Ugc2l6ZSBmcm9tIHRoZSBzbGljZSwgd2hpY2ggdGh1cworCSAqIG11c3Qgc3RpbGwgZXhpc3QgKGFuZCB0aHVzIHRoZSBWTUEgbm90IHJldXNlZCkgYXQgdGhlIHRpbWUKKwkgKiBvZiB0aGlzIGNhbGwKKwkgKi8KIAlpZiAoaHVnZSkgewogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIAkJcHNpemUgPSBtbXVfaHVnZV9wc2l6ZTsKICNlbHNlCiAJCUJVRygpOwotCQlwc2l6ZSA9IHB0ZV9wYWdlc2l6ZV9pbmRleChwdGUpOyAvKiBzaHV0dXAgZ2NjICovCisJCXBzaXplID0gcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpOyAvKiBzaHV0dXAgZ2NjICovCiAjZW5kaWYKIAl9IGVsc2UKLQkJcHNpemUgPSBwdGVfcGFnZXNpemVfaW5kZXgocHRlKTsKKwkJcHNpemUgPSBwdGVfcGFnZXNpemVfaW5kZXgobW0sIGFkZHIsIHB0ZSk7CiAKIAkvKiBCdWlsZCBmdWxsIHZhZGRyICovCiAJaWYgKCFpc19rZXJuZWxfYWRkcihhZGRyKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX2NlbGwuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9jZWxsLmMKaW5kZXggNjI2YjI5Zi4uYzI5MjkzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX2NlbGwuYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfY2VsbC5jCkBAIC03NDcsNyArNzQ3LDcgQEAKIAkJICogY291bnRlciB2YWx1ZSBldGMuKSBhcmUgbm90IGNvcGllZCB0byB0aGUgYWN0dWFsIHJlZ2lzdGVycwogCQkgKiB1bnRpbCB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvciBpcyBlbmFibGVkLiAgSW4gb3JkZXIgdG8gZ2V0CiAJCSAqIHRoaXMgdG8gd29yayBhcyBkZXNpcmVkLCB0aGUgcGVybW9ybWFuY2UgbW9uaXRvciBuZWVkcyB0bwotCQkgKiBiZSBkaXNhYmxlZCB3aGlsZSB3cml0dGluZyB0byB0aGUgbGF0Y2hlcy4gIFRoaXMgaXMgYQorCQkgKiBiZSBkaXNhYmxlZCB3aGlsZSB3cml0aW5nIHRvIHRoZSBsYXRjaGVzLiAgVGhpcyBpcyBhCiAJCSAqIEhXIGRlc2lnbiBpc3N1ZS4KIAkJICovCiAJCWNiZV9lbmFibGVfcG0oY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4LzQ0eC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvNDR4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlYWJmOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4LzQ0eC5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX1BPV0VSUENfUExBVEZPUk1TXzQ0WF80NFhfSAorI2RlZmluZSBfX1BPV0VSUENfUExBVEZPUk1TXzQ0WF80NFhfSAorCitleHRlcm4gdTggYXMxX3JlYWRiKHZvbGF0aWxlIHU4IF9faW9tZW0gICphZGRyKTsKK2V4dGVybiB2b2lkIGFzMV93cml0ZWIodTggZGF0YSwgdm9sYXRpbGUgdTggX19pb21lbSAqYWRkcik7CitleHRlcm4gdm9pZCBwcGM0NHhfcmVzZXRfc3lzdGVtKGNoYXIgKmNtZCk7CisKKyNlbmRpZiAvKiBfX1BPV0VSUENfUExBVEZPUk1TXzQ0WF80NFhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzZTAwOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKQEAgLTAsMCArMSw1NyBAQAorI2NvbmZpZyBCQU1CT08KKyMJYm9vbCAiQmFtYm9vIgorIwlkZXBlbmRzIG9uIDQ0eAorIwlkZWZhdWx0IG4KKyMJc2VsZWN0IDQ0MEVQCisjCWhlbHAKKyMJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBJQk0gUFBDNDQwRVAgZXZhbHVhdGlvbiBib2FyZC4KKworY29uZmlnIEVCT05ZCisJYm9vbCAiRWJvbnkiCisJZGVwZW5kcyBvbiA0NHgKKwlkZWZhdWx0IHkKKwlzZWxlY3QgNDQwR1AKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBJQk0gUFBDNDQwR1AgZXZhbHVhdGlvbiBib2FyZC4KKworI2NvbmZpZyBMVUFOCisjCWJvb2wgIkx1YW4iCisjCWRlcGVuZHMgb24gNDR4CisjCWRlZmF1bHQgbgorIwlzZWxlY3QgNDQwU1AKKyMJaGVscAorIwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIElCTSBQUEM0NDBTUCBldmFsdWF0aW9uIGJvYXJkLgorCisjY29uZmlnIE9DT1RFQQorIwlib29sICJPY290ZWEiCisjCWRlcGVuZHMgb24gNDR4CisjCWRlZmF1bHQgbgorIwlzZWxlY3QgNDQwR1gKKyMJaGVscAorIwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIElCTSBQUEM0NDBHWCBldmFsdWF0aW9uIGJvYXJkLgorCisjIDQ0eCBzcGVjaWZpYyBDUFUgbW9kdWxlcywgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIGJvYXJkIGFib3ZlLgorY29uZmlnIDQ0MEVQCisJYm9vbAorCXNlbGVjdCBQUENfRlBVCisJc2VsZWN0IElCTTQ0MEVQX0VSUjQyCisKK2NvbmZpZyA0NDBHUAorCWJvb2wKKyMgRGlzYWJsZWQgdW50aWwgdGhlIG5ldyBFTUFDIERyaXZlciBpcyBtZXJnZWQuCisjCXNlbGVjdCBJQk1fTkVXX0VNQUNfWk1JSQorCitjb25maWcgNDQwR1gKKwlib29sCisKK2NvbmZpZyA0NDBTUAorCWJvb2wKKworY29uZmlnIDQ0MEEKKwlib29sCisJZGVwZW5kcyBvbiA0NDBHWAorCWRlZmF1bHQgeQorCisjIDQ0eCBlcnJhdGEvd29ya2Fyb3VuZCBjb25maWcgc3ltYm9scywgc2VsZWN0ZWQgYnkgdGhlIENQVSBtb2RlbHMgYWJvdmUKK2NvbmZpZyBJQk00NDBFUF9FUlI0MgorCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFkMGExOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L01ha2VmaWxlCkBAIC0wLDAgKzEsMiBAQAorb2JqLSQoQ09ORklHXzQ0eCkJOj0gbWlzY180NHgubworb2JqLSQoQ09ORklHX0VCT05ZKQkrPSBlYm9ueS5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9lYm9ueS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvZWJvbnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTdmZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvZWJvbnkuYwpAQCAtMCwwICsxLDczIEBACisvKgorICogRWJvbnkgYm9hcmQgc3BlY2lmaWMgcm91dGluZXMKKyAqCisgKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogQ29weXJpZ2h0IDIwMDItMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiBFdWdlbmUgU3Vyb3ZlZ2luIDxldWdlbmUuc3Vyb3ZlZ2luQHp1bHR5cy5jb20+IG9yIDxlYnNAZWJzaG9tZS5uZXQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBadWx0eXMgVGVjaG5vbG9naWVzCisgKgorICogUmV3cml0dGVuIGFuZCBwb3J0ZWQgdG8gdGhlIG1lcmdlZCBwb3dlcnBjIHRyZWU6CisgKiBDb3B5cmlnaHQgMjAwNyBEYXZpZCBHaWJzb24gPGR3Z0BhdTEuaWJtLmNvbT4sIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vdWljLmg+CisjaW5jbHVkZSA8YXNtL29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICI0NHguaCIKKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZWJvbnlfb2ZfYnVzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiNCIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpYm0sb3BiIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImlibSxlYmMiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZWJvbnlfZGV2aWNlX3Byb2JlKHZvaWQpCit7CisJaWYgKCFtYWNoaW5lX2lzKGVib255KSkKKwkJcmV0dXJuIDA7CisKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgZWJvbnlfb2ZfYnVzLCBOVUxMKTsKKworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKGVib255X2RldmljZV9wcm9iZSk7CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgTU1VIGlzIG9mZiwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgZWJvbnlfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiaWJtLGVib255IikpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlYm9ueV9zZXR1cF9hcmNoKHZvaWQpCit7Cit9CisKK2RlZmluZV9tYWNoaW5lKGVib255KSB7CisJLm5hbWUJCQk9ICJFYm9ueSIsCisJLnByb2JlCQkJPSBlYm9ueV9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBlYm9ueV9zZXR1cF9hcmNoLAorCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAorCS5pbml0X0lSUQkJPSB1aWNfaW5pdF90cmVlLAorCS5nZXRfaXJxCQk9IHVpY19nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IHBwYzQ0eF9yZXNldF9zeXN0ZW0sCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvbWlzY180NHguUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L21pc2NfNDR4LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjZTcxZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L21pc2NfNDR4LlMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBtaXNjZWxsYW5lb3VzIGxvdy1sZXZlbCBmdW5jdGlvbnMgZm9yIFBQQyA0NHguCisgKiAgICBDb3B5cmlnaHQgMjAwNyBEYXZpZCBHaWJzb24gPGR3Z0BhdTEuaWJtLmNvbT4sIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisKKwkudGV4dAorCisvKgorICogRG8gYW4gSU8gYWNjZXNzIGluIEFTMQorICovCitfR0xPQkFMKGFzMV9yZWFkYikKKwltZm1zcglyNworCW9yaQlyMCxyNyxNU1JfRFMKKwlzeW5jCisJbXRtc3IJcjAKKwlzeW5jCisJaXN5bmMKKwlsYnoJcjMsMChyMykKKwlzeW5jCisJbXRtc3IJcjcKKwlzeW5jCisJaXN5bmMKKwlibHIKKworX0dMT0JBTChhczFfd3JpdGViKQorCW1mbXNyCXI3CisJb3JpCXIwLHI3LE1TUl9EUworCXN5bmMKKwltdG1zcglyMAorCXN5bmMKKwlpc3luYworCXN0YglyMywwKHI0KQorCXN5bmMKKwltdG1zcglyNworCXN5bmMKKwlpc3luYworCWJscgorCisvKgorICogdm9pZCBwcGM0NHhfcmVzZXRfc3lzdGVtKGNoYXIgKmNtZCkKKyAqCisgKiBBdCBwcmVzZW50LCB0aGlzIHJvdXRpbmUganVzdCBhcHBsaWVzIGEgc3lzdGVtIHJlc2V0LgorICovCitfR0xPQkFMKHBwYzQ0eF9yZXNldF9zeXN0ZW0pCisJbWZzcHIJcjEzLFNQUk5fREJDUjAKKwlvcmlzCXIxMyxyMTMsREJDUjBfUlNUX1NZU1RFTUBoCisJbXRzcHIJU1BSTl9EQkNSMCxyMTMKKwliCS4JCQkvKiBKdXN0IGluIGNhc2UgdGhlIHJlc2V0IGRvZXNuJ3Qgd29yayAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvS2NvbmZpZwppbmRleCBiYzRhYTRhLi4zZmZhYTA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvS2NvbmZpZwpAQCAtMSw1ICsxLDYgQEAKIGNvbmZpZyBQUENfTVBDNTJ4eAogCWJvb2wKKwlzZWxlY3QgRlNMX1NPQwogCWRlZmF1bHQgbgogCiBjb25maWcgUFBDX01QQzUyMDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9NYWtlZmlsZQppbmRleCAwN2NkYmNhLi5iOTFlMzljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L01ha2VmaWxlCkBAIC04LDMgKzgsNSBAQAogCiBvYmotJChDT05GSUdfUFBDX0VGSUtBKQkJKz0gZWZpa2Eubwogb2JqLSQoQ09ORklHX1BQQ19MSVRFNTIwMCkJKz0gbGl0ZTUyMDAubworCitvYmotJChDT05GSUdfUE0pCQkrPSBtcGM1Mnh4X3NsZWVwLm8gbXBjNTJ4eF9wbS5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvZWZpa2EuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9lZmlrYS5jCmluZGV4IGE2YmJhOTcuLmY1OTFhOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9lZmlrYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9lZmlrYS5jCkBAIC0xODQsNiArMTg0LDE2IEBACiAJb2Zfbm9kZV9wdXQocm9vdCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyB2b2lkIGVmaWthX3N1c3BlbmRfcHJlcGFyZSh2b2lkIF9faW9tZW0gKm1iYXIpCit7CisJdTggcGluID0gNDsJLyogR1BJT19XS1VQXzQgKEdQSU9fUFNDNl8wIC0gSVJEQV9SWCkgKi8KKwl1OCBsZXZlbCA9IDE7CS8qIHdha2V1cCBvbiBoaWdoIGxldmVsICovCisJLyogSU9XLiB0byB3YWtlIGl0IHVwLCBzaG9ydCBwaW5zIDEgYW5kIDMgb24gSVJEQSBjb25uZWN0b3IgKi8KKwltcGM1Mnh4X3NldF93YWtldXBfZ3BpbyhwaW4sIGxldmVsKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgZWZpa2Ffc2V0dXBfYXJjaCh2b2lkKQogewogCXJ0YXNfaW5pdGlhbGl6ZSgpOwpAQCAtMTk5LDYgKzIwOSwxMSBAQAogCiAJZWZpa2FfcGNpc2V0dXAoKTsKIAorI2lmZGVmIENPTkZJR19QTQorCW1wYzUyeHhfc3VzcGVuZC5ib2FyZF9zdXNwZW5kX3ByZXBhcmUgPSBlZmlrYV9zdXNwZW5kX3ByZXBhcmU7CisJbXBjNTJ4eF9wbV9pbml0KCk7CisjZW5kaWYKKwogCWlmIChwcGNfbWQucHJvZ3Jlc3MpCiAJCXBwY19tZC5wcm9ncmVzcygiTGludXgvUFBDICIgVVRTX1JFTEVBU0UgIiBydW5uaW5nIG9uIEVmaWthIDstKVxuIiwgMHgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9saXRlNTIwMC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L2xpdGU1MjAwLmMKaW5kZXggOGUyNjQ2YS4uMWNmYzAwZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L2xpdGU1MjAwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L2xpdGU1MjAwLmMKQEAgLTg1LDYgKzg1LDI4IEBACiAJaW91bm1hcChncGlvKTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIHUzMiBkZXNjcl9hOworc3RhdGljIHZvaWQgbGl0ZTUyMDBfc3VzcGVuZF9wcmVwYXJlKHZvaWQgX19pb21lbSAqbWJhcikKK3sKKwl1OCBwaW4gPSAxOwkvKiBHUElPX1dLVVBfMSAoR1BJT19QU0MyXzQpICovCisJdTggbGV2ZWwgPSAwOwkvKiB3YWtldXAgb24gbG93IGxldmVsICovCisJbXBjNTJ4eF9zZXRfd2FrZXVwX2dwaW8ocGluLCBsZXZlbCk7CisKKwkvKgorCSAqIHBvd2VyIGRvd24gdXNiIHBvcnQKKwkgKiB0aGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgb2Ytb2hjaSBzdXNwZW5kIGNvZGUKKwkgKi8KKwlkZXNjcl9hID0gaW5fYmUzMihtYmFyICsgMHgxMDQ4KTsKKwlvdXRfYmUzMihtYmFyICsgMHgxMDQ4LCAoZGVzY3JfYSAmIH4weDIwMCkgfCAweDEwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpdGU1MjAwX3Jlc3VtZV9maW5pc2godm9pZCBfX2lvbWVtICptYmFyKQoreworCW91dF9iZTMyKG1iYXIgKyAweDEwNDgsIGRlc2NyX2EpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIF9faW5pdCBsaXRlNTIwMF9zZXR1cF9hcmNoKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKQEAgLTEwNyw2ICsxMjksMTIgQEAKIAltcGM1Mnh4X3NldHVwX2NwdSgpOwkvKiBHZW5lcmljICovCiAJbGl0ZTUyMDBfc2V0dXBfY3B1KCk7CS8qIFBsYXRvcm0gc3BlY2lmaWMgKi8KIAorI2lmZGVmIENPTkZJR19QTQorCW1wYzUyeHhfc3VzcGVuZC5ib2FyZF9zdXNwZW5kX3ByZXBhcmUgPSBsaXRlNTIwMF9zdXNwZW5kX3ByZXBhcmU7CisJbXBjNTJ4eF9zdXNwZW5kLmJvYXJkX3Jlc3VtZV9maW5pc2ggPSBsaXRlNTIwMF9yZXN1bWVfZmluaXNoOworCW1wYzUyeHhfcG1faW5pdCgpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUENJCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAicGNpIik7CiAJaWYgKG5wKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wbS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQwMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcG0uYwpAQCAtMCwwICsxLDE5MSBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CisKKyNpbmNsdWRlICJtcGM1Mnh4X3BpYy5oIgorCisKKy8qIHRoZXNlIGFyZSBkZWZpbmVkIGluIG1wYzUyeHhfc2xlZXAuUywgYW5kIG9ubHkgdXNlZCBoZXJlICovCitleHRlcm4gdm9pZCBtcGM1Mnh4X2RlZXBfc2xlZXAodm9pZCAqc3JhbSwgdm9pZCAqc2RyYW1fcmVncywKKwkJc3RydWN0IG1wYzUyeHhfY2RtICosIHN0cnVjdCBtcGM1Mnh4X2ludHIgKik7CitleHRlcm4gdm9pZCBtcGM1Mnh4X2RzX3NyYW0odm9pZCk7CitleHRlcm4gY29uc3QgbG9uZyBtcGM1Mnh4X2RzX3NyYW1fc2l6ZTsKK2V4dGVybiB2b2lkIG1wYzUyeHhfZHNfY2FjaGVkKHZvaWQpOworZXh0ZXJuIGNvbnN0IGxvbmcgbXBjNTJ4eF9kc19jYWNoZWRfc2l6ZTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqbWJhcjsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnNkcmFtOworc3RhdGljIHN0cnVjdCBtcGM1Mnh4X2NkbSBfX2lvbWVtICpjZG07CitzdGF0aWMgc3RydWN0IG1wYzUyeHhfaW50ciBfX2lvbWVtICppbnRyOworc3RhdGljIHN0cnVjdCBtcGM1Mnh4X2dwaW9fd2t1cCBfX2lvbWVtICpncGlvdzsKK3N0YXRpYyB2b2lkICpzcmFtOworc3RhdGljIGludCBzcmFtX3NpemU7CisKK3N0cnVjdCBtcGM1Mnh4X3N1c3BlbmQgbXBjNTJ4eF9zdXNwZW5kOworCitzdGF0aWMgaW50IG1wYzUyeHhfcG1fdmFsaWQoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitpbnQgbXBjNTJ4eF9zZXRfd2FrZXVwX2dwaW8odTggcGluLCB1OCBsZXZlbCkKK3sKKwl1MTYgdG1wOworCisJLyogZW5hYmxlIGdwaW8gKi8KKwlvdXRfOCgmZ3Bpb3ctPndrdXBfZ3Bpb2UsIGluXzgoJmdwaW93LT53a3VwX2dwaW9lKSB8ICgxIDw8IHBpbikpOworCS8qIHNldCBhcyBpbnB1dCAqLworCW91dF84KCZncGlvdy0+d2t1cF9kZHIsIGluXzgoJmdwaW93LT53a3VwX2RkcikgJiB+KDEgPDwgcGluKSk7CisJLyogZW5hYmxlIGRlZXAgc2xlZXAgaW50ZXJydXB0ICovCisJb3V0XzgoJmdwaW93LT53a3VwX2ludGVuLCBpbl84KCZncGlvdy0+d2t1cF9pbnRlbikgfCAoMSA8PCBwaW4pKTsKKwkvKiBsb3cvaGlnaCBsZXZlbCBjcmVhdGVzIHdha2V1cCBpbnRlcnJ1cHQgKi8KKwl0bXAgPSBpbl9iZTE2KCZncGlvdy0+d2t1cF9pdHlwZSk7CisJdG1wICY9IH4oMHgzIDw8IChwaW4gKiAyKSk7CisJdG1wIHw9ICghbGV2ZWwgKyAxKSA8PCAocGluICogMik7CisJb3V0X2JlMTYoJmdwaW93LT53a3VwX2l0eXBlLCB0bXApOworCS8qIG1hc3RlciBlbmFibGUgKi8KKwlvdXRfOCgmZ3Bpb3ctPndrdXBfbWFzdGUsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtcGM1Mnh4X3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX1NUQU5EQlkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbWFwIHRoZSB3aG9sZSByZWdpc3RlciBzcGFjZSAqLworCW1iYXIgPSBtcGM1Mnh4X2ZpbmRfYW5kX21hcCgibXBjNTIwMCIpOworCWlmICghbWJhcikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiVpIEVycm9yIG1hcHBpbmcgcmVnaXN0ZXJzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisJLyogdGhlc2Ugb2Zmc2V0cyBhcmUgZnJvbSBtcGM1MjAwIHVzZXJzIG1hbnVhbCAqLworCXNkcmFtCT0gbWJhciArIDB4MTAwOworCWNkbQk9IG1iYXIgKyAweDIwMDsKKwlpbnRyCT0gbWJhciArIDB4NTAwOworCWdwaW93CT0gbWJhciArIDB4YzAwOworCXNyYW0JPSBtYmFyICsgMHg4MDAwOwkvKiBUaG9zZSB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlICovCisJc3JhbV9zaXplID0gMHg0MDAwOwkJLyogYmVzdGNvbW0gZHJpdmVyIHNvb24gKi8KKworCS8qIGNhbGwgYm9hcmQgc3VzcGVuZCBjb2RlLCBpZiBhcHBsaWNhYmxlICovCisJaWYgKG1wYzUyeHhfc3VzcGVuZC5ib2FyZF9zdXNwZW5kX3ByZXBhcmUpCisJCW1wYzUyeHhfc3VzcGVuZC5ib2FyZF9zdXNwZW5kX3ByZXBhcmUobWJhcik7CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0FMRVJUICIlczogJWkgZG9uJ3Qga25vdyBob3cgdG8gd2FrZSB1cCB0aGUgYm9hcmRcbiIsCisJCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJZ290byBvdXRfdW5tYXA7CisJfQorCisJcmV0dXJuIDA7CisKKyBvdXRfdW5tYXA6CisJaW91bm1hcChtYmFyKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworCitjaGFyIHNhdmVkX3NyYW1bMHg0MDAwXTsKKworaW50IG1wYzUyeHhfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXUzMiBjbGtfZW5hYmxlczsKKwl1MzIgbXNyLCBoaWQwOworCXUzMiBpbnRyX21haW5fbWFzazsKKwl2b2lkIF9faW9tZW0gKiBpcnFfMHg1MDAgPSAodm9pZCAqKUNPTkZJR19LRVJORUxfU1RBUlQgKyAweDUwMDsKKwl1bnNpZ25lZCBsb25nIGlycV8weDUwMF9zdG9wID0gKHVuc2lnbmVkIGxvbmcpaXJxXzB4NTAwICsgbXBjNTJ4eF9kc19jYWNoZWRfc2l6ZTsKKwljaGFyIHNhdmVkXzB4NTAwW21wYzUyeHhfZHNfY2FjaGVkX3NpemVdOworCisJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyBpbiBQSUMgKi8KKwlpbnRyX21haW5fbWFzayA9IGluX2JlMzIoJmludHItPm1haW5fbWFzayk7CisJb3V0X2JlMzIoJmludHItPm1haW5fbWFzaywgaW50cl9tYWluX21hc2sgfCAweDFmZmZmKTsKKworCS8qIGRvbid0IGxldCBERUMgZXhwaXJlIGFueSB0aW1lIHNvb24gKi8KKwltdHNwcihTUFJOX0RFQywgMHg3ZmZmZmZmZik7CisKKwkvKiBzYXZlIFNSQU0gKi8KKwltZW1jcHkoc2F2ZWRfc3JhbSwgc3JhbSwgc3JhbV9zaXplKTsKKworCS8qIGNvcHkgbG93IGxldmVsIHN1c3BlbmQgY29kZSB0byBzcmFtICovCisJbWVtY3B5KHNyYW0sIG1wYzUyeHhfZHNfc3JhbSwgbXBjNTJ4eF9kc19zcmFtX3NpemUpOworCisJb3V0XzgoJmNkbS0+Y2NzX3NsZWVwX2VuYWJsZSwgMSk7CisJb3V0XzgoJmNkbS0+b3NjX3NsZWVwX2VuYWJsZSwgMSk7CisJb3V0XzgoJmNkbS0+Y2NzX3FyZXFfdGVzdCwgMSk7CisKKwkvKiBkaXNhYmxlIGFsbCBidXQgU0RSQU0gYW5kIGJlc3Rjb21tIChTUkFNKSBjbG9ja3MgKi8KKwljbGtfZW5hYmxlcyA9IGluX2JlMzIoJmNkbS0+Y2xrX2VuYWJsZXMpOworCW91dF9iZTMyKCZjZG0tPmNsa19lbmFibGVzLCBjbGtfZW5hYmxlcyAmIDB4MDAwODgwMDApOworCisJLyogZGlzYWJsZSBwb3dlciBtYW5hZ2VtZW50ICovCisJbXNyID0gbWZtc3IoKTsKKwltdG1zcihtc3IgJiB+TVNSX1BPVyk7CisKKwkvKiBlbmFibGUgc2xlZXAgbW9kZSwgZGlzYWJsZSBvdGhlcnMgKi8KKwloaWQwID0gbWZzcHIoU1BSTl9ISUQwKTsKKwltdHNwcihTUFJOX0hJRDAsIChoaWQwICYgfihISUQwX0RPWkUgfCBISUQwX05BUCB8IEhJRDBfRFBNKSkgfCBISUQwX1NMRUVQKTsKKworCS8qIHNhdmUgb3JpZ2luYWwsIGNvcHkgb3VyIGlycSBoYW5kbGVyLCBmbHVzaCBmcm9tIGRjYWNoZSBhbmQgaW52YWxpZGF0ZSBpY2FjaGUgKi8KKwltZW1jcHkoc2F2ZWRfMHg1MDAsIGlycV8weDUwMCwgbXBjNTJ4eF9kc19jYWNoZWRfc2l6ZSk7CisJbWVtY3B5KGlycV8weDUwMCwgbXBjNTJ4eF9kc19jYWNoZWQsIG1wYzUyeHhfZHNfY2FjaGVkX3NpemUpOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylpcnFfMHg1MDAsIGlycV8weDUwMF9zdG9wKTsKKworCS8qIGNhbGwgbG93LWxldmVsIHNsZWVwIGNvZGUgKi8KKwltcGM1Mnh4X2RlZXBfc2xlZXAoc3JhbSwgc2RyYW0sIGNkbSwgaW50cik7CisKKwkvKiByZXN0b3JlIG9yaWdpbmFsIGlycSBoYW5kbGVyICovCisJbWVtY3B5KGlycV8weDUwMCwgc2F2ZWRfMHg1MDAsIG1wYzUyeHhfZHNfY2FjaGVkX3NpemUpOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylpcnFfMHg1MDAsIGlycV8weDUwMF9zdG9wKTsKKworCS8qIHJlc3RvcmUgb2xkIHBvd2VyIG1vZGUgKi8KKwltdG1zcihtc3IgJiB+TVNSX1BPVyk7CisJbXRzcHIoU1BSTl9ISUQwLCBoaWQwKTsKKwltdG1zcihtc3IpOworCisJb3V0X2JlMzIoJmNkbS0+Y2xrX2VuYWJsZXMsIGNsa19lbmFibGVzKTsKKwlvdXRfOCgmY2RtLT5jY3Nfc2xlZXBfZW5hYmxlLCAwKTsKKwlvdXRfOCgmY2RtLT5vc2Nfc2xlZXBfZW5hYmxlLCAwKTsKKworCS8qIHJlc3RvcmUgU1JBTSAqLworCW1lbWNweShzcmFtLCBzYXZlZF9zcmFtLCBzcmFtX3NpemUpOworCisJLyogcmVzdGFydCBqaWZmaWVzICovCisJd2FrZXVwX2RlY3JlbWVudGVyKCk7CisKKwkvKiByZWVuYWJsZSBpbnRlcnJ1cHRzIGluIFBJQyAqLworCW91dF9iZTMyKCZpbnRyLT5tYWluX21hc2ssIGludHJfbWFpbl9tYXNrKTsKKworCXJldHVybiAwOworfQorCitpbnQgbXBjNTJ4eF9wbV9maW5pc2goc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCS8qIGNhbGwgYm9hcmQgcmVzdW1lIGNvZGUgKi8KKwlpZiAobXBjNTJ4eF9zdXNwZW5kLmJvYXJkX3Jlc3VtZV9maW5pc2gpCisJCW1wYzUyeHhfc3VzcGVuZC5ib2FyZF9yZXN1bWVfZmluaXNoKG1iYXIpOworCisJaW91bm1hcChtYmFyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBtX29wcyBtcGM1Mnh4X3BtX29wcyA9IHsKKwkudmFsaWQJCT0gbXBjNTJ4eF9wbV92YWxpZCwKKwkucHJlcGFyZQk9IG1wYzUyeHhfcG1fcHJlcGFyZSwKKwkuZW50ZXIJCT0gbXBjNTJ4eF9wbV9lbnRlciwKKwkuZmluaXNoCQk9IG1wYzUyeHhfcG1fZmluaXNoLAorfTsKKworaW50IF9faW5pdCBtcGM1Mnh4X3BtX2luaXQodm9pZCkKK3sKKwlwbV9zZXRfb3BzKCZtcGM1Mnh4X3BtX29wcyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9zbGVlcC5TIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfc2xlZXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGMxNzBiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfc2xlZXAuUwpAQCAtMCwwICsxLDE1NCBAQAorI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworCisudGV4dAorCitfR0xPQkFMKG1wYzUyeHhfZGVlcF9zbGVlcCkKK21wYzUyeHhfZGVlcF9zbGVlcDogLyogYXJncyByMy1yNjogU1JBTSwgU0RSQU0gcmVncywgQ0RNIHJlZ3MsIElOVFIgcmVncyAqLworCisJLyogZW5hYmxlIGludGVycnVwdHMgKi8KKwltZm1zcglyNworCW9yaQlyNywgcjcsIDB4ODAwMCAvKiBFRSAqLworCW10bXNyCXI3CisJc3luYzsgaXN5bmM7CisKKwlsaQlyMTAsIDAgLyogZmxhZyB0aGF0IGlycSBoYW5kbGVyIHNldHMgKi8KKworCS8qIGVuYWJsZSB0bXI3IChvciBhbnkgb3RoZXIpIGludGVycnVwdCAqLworCWx3eglyOCwgMHgxNChyNikgLyogaW50ci0+bWFpbl9tYXNrICovCisJb3JpCXI4LCByOCwgMHgxCisJeG9yaQlyOCwgcjgsIDB4MQorCXN0dwlyOCwgMHgxNChyNikKKwlzeW5jCisKKwkvKiBlbXVsYXRlIHRtcjcgaW50ZXJydXB0ICovCisJbGkJcjgsIDB4MQorCXN0dwlyOCwgMHg0MChyNikgLyogaW50ci0+bWFpbl9lbXVsYXRlICovCisJc3luYworCisJLyogd2FpdCBmb3IgaXQgdG8gaGFwcGVuICovCisxOgorCWNtcGkJY3IwLCByMTAsIDEKKwlibmUJY3IwLCAxYgorCisJLyogbG9jayBpY2FjaGUgKi8KKwltZnNwcglyMTAsIFNQUk5fSElEMAorCW9yaQlyMTAsIHIxMCwgMHgyMDAwCisJc3luYzsgaXN5bmM7CisJbXRzcHIJU1BSTl9ISUQwLCByMTAKKwlzeW5jOyBpc3luYzsKKworCisJbWZscglyOSAvKiBzYXZlIExSICovCisKKwkvKiBqdW1wIHRvIHNyYW0gKi8KKwltdGxyCXIzCisJYmxybAorCisJbXRscglyOSAvKiByZXN0b3JlIExSICovCisKKwkvKiB1bmxvY2sgaWNhY2hlICovCisJbWZzcHIJcjEwLCBTUFJOX0hJRDAKKwlvcmkJcjEwLCByMTAsIDB4MjAwMAorCXhvcmkJcjEwLCByMTAsIDB4MjAwMAorCXN5bmM7IGlzeW5jOworCW10c3ByCVNQUk5fSElEMCwgcjEwCisJc3luYzsgaXN5bmM7CisKKworCS8qIHJldHVybiB0byBDIGNvZGUgKi8KKwlibHIKKworCitfR0xPQkFMKG1wYzUyeHhfZHNfc3JhbSkKK21wYzUyeHhfZHNfc3JhbToKKwkvKiBwdXQgU0RSQU0gaW50byBzZWxmLXJlZnJlc2ggKi8KKwlsd3oJcjgsIDB4NChyNCkJLyogc2RyYW0tPmN0cmwgKi8KKworCW9yaXMJcjgsIHI4LCAweDgwMDAgLyogbW9kZV9lbiAqLworCXN0dwlyOCwgMHg0KHI0KQorCXN5bmMKKworCW9yaQlyOCwgcjgsIDB4MDAwMiAvKiBzb2Z0X3ByZSAqLworCXN0dwlyOCwgMHg0KHI0KQorCXN5bmMKKwl4b3JpCXI4LCByOCwgMHgwMDAyCisKKwl4b3JpcwlyOCwgcjgsIDB4ODAwMCAvKiAhbW9kZV9lbiAqLworCXN0dwlyOCwgMHg0KHI0KQorCXN5bmMKKworCW9yaXMJcjgsIHI4LCAweDUwMDAKKwl4b3JpcwlyOCwgcjgsIDB4NDAwMCAvKiByZWZfZW4gIWNrZSAqLworCXN0dwlyOCwgMHg0KHI0KQorCXN5bmMKKworCS8qIGRpc2FibGUgU0RSQU0gY2xvY2sgKi8KKwlsd3oJcjgsIDB4MTQocjUpIC8qIGNkbS0+Y2xrZW5hYmxlICovCisJb3JpCXI4LCByOCwgMHgwMDA4CisJeG9yaQlyOCwgcjgsIDB4MDAwOAorCXN0dwlyOCwgMHgxNChyNSkKKwlzeW5jCisKKworCS8qIHB1dCBtcGM1MjAwIHRvIHNsZWVwICovCisJbWZtc3IJcjEwCisJb3JpcwlyMTAsIHIxMCwgMHgwMDA0CS8qIFBPVyA9IDEgKi8KKwlzeW5jOyBpc3luYzsKKwltdG1zcglyMTAKKwlzeW5jOyBpc3luYzsKKworCisJLyogZW5hYmxlIGNsb2NrICovCisJbHd6CXI4LCAweDE0KHI1KQorCW9yaQlyOCwgcjgsIDB4MDAwOAorCXN0dwlyOCwgMHgxNChyNSkKKwlzeW5jCisKKwkvKiBnZXQgcmFtIG91dCBvZiBzZWxmLXJlZnJlc2ggKi8KKwlsd3oJcjgsIDB4NChyNCkKKwlvcmlzCXI4LCByOCwgMHg1MDAwIC8qIGNrZSByZWZfZW4gKi8KKwlzdHcJcjgsIDB4NChyNCkKKwlzeW5jCisKKwlibHIKK19HTE9CQUwobXBjNTJ4eF9kc19zcmFtX3NpemUpCittcGM1Mnh4X2RzX3NyYW1fc2l6ZToKKwkubG9uZyAkLW1wYzUyeHhfZHNfc3JhbQorCisKKy8qICMjIyBpbnRlcnJ1cHQgaGFuZGxlciBmb3Igd2FrZXVwIGZyb20gZGVlcC1zbGVlcCAjIyMgKi8KK19HTE9CQUwobXBjNTJ4eF9kc19jYWNoZWQpCittcGM1Mnh4X2RzX2NhY2hlZDoKKwltdHNwcglTUFJOX1NQUkcwLCByNworCW10c3ByCVNQUk5fU1BSRzEsIHI4CisKKwkvKiBkaXNhYmxlIGVtdWxhdGVkIGludGVycnVwdCAqLworCW1mc3ByCXI3LCAzMTEgLyogTUJBUiAqLworCWFkZGkJcjcsIHI3LCAweDU0MAkvKiBpbnRyLT5tYWluX2VtdWwgKi8KKwlsaQlyOCwgMAorCXN0dwlyOCwgMChyNykKKwlzeW5jCisJZGNiZgkwLCByNworCisJLyogYWNrbm93bGVkZ2Ugd2FrZXVwLCBzbyBDQ1MgcmVsZWFzZXMgcG93ZXIgcG93biAqLworCW1mc3ByCXI3LCAzMTEJLyogTUJBUiAqLworCWFkZGkJcjcsIHI3LCAweDUyNAkvKiBpbnRyLT5lbmNfc3RhdHVzICovCisJbHd6CXI4LCAwKHI3KQorCW9yaQlyOCwgcjgsIDB4MDQwMAorCXN0dwlyOCwgMChyNykKKwlzeW5jCisJZGNiZgkwLCByNworCisJLyogZmxhZyAtIHdlIGhhbmRsZWQgdGhlIGludGVycnVwdCAqLworCWxpCXIxMCwgMQorCisJbWZzcHIJcjgsIFNQUk5fU1BSRzEKKwltZnNwcglyNywgU1BSTl9TUFJHMAorCisJcmZpCitfR0xPQkFMKG1wYzUyeHhfZHNfY2FjaGVkX3NpemUpCittcGM1Mnh4X2RzX2NhY2hlZF9zaXplOgorCS5sb25nICQtbXBjNTJ4eF9kc19jYWNoZWQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzEzX3JkYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMTNfcmRiLmMKaW5kZXggMzJlOWU5NC4uOTY5NzBhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMTNfcmRiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMTNfcmRiLmMKQEAgLTQwLDcgKzQwLDkgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IG1wYzgzMTNfcmRiX3NldHVwX2FyY2godm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfUENJCiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKKyNlbmRpZgogCiAJaWYgKHBwY19tZC5wcm9ncmVzcykKIAkJcHBjX21kLnByb2dyZXNzKCJtcGM4MzEzX3JkYl9zZXR1cF9hcmNoKCkiLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfbWRzLmMKaW5kZXggZmZmMDlmNS4uOTQ4NDNlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfbWRzLmMKQEAgLTExMSw2ICsxMTEsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAudHlwZSA9ICJxZSIsIH0sCisJeyAudHlwZSA9ICJtZGlvIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X3JkYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfcmRiLmMKaW5kZXggNmI3MWU5Zi4uM2RiNjhiNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfcmRiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfcmRiLmMKQEAgLTQ0LDcgKzQ0LDkgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IG1wYzgzMnhfcmRiX3NldHVwX2FyY2godm9pZCkKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpIHx8IGRlZmluZWQoQ09ORklHX1FVSUNDX0VOR0lORSkKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworI2VuZGlmCiAKIAlpZiAocHBjX21kLnByb2dyZXNzKQogCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzgzMnhfcmRiX3NldHVwX2FyY2goKSIsIDApOwpAQCAtNzMsNiArNzUsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAudHlwZSA9ICJxZSIsIH0sCisJeyAudHlwZSA9ICJtZGlvIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMKaW5kZXggM2MwMDlmNi4uNDBhMDE5NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMKQEAgLTUwLDcgKzUwLDkgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IG1wYzgzNHhfaXR4X3NldHVwX2FyY2godm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfUENJCiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKKyNlbmRpZgogCiAJaWYgKHBwY19tZC5wcm9ncmVzcykKIAkJcHBjX21kLnByb2dyZXNzKCJtcGM4MzR4X2l0eF9zZXR1cF9hcmNoKCkiLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKaW5kZXggOGFhOWE5My4uMTAzOTRiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKQEAgLTEyMCw3ICsxMjAsOSBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgbXBjODM0eF9tZHNfc2V0dXBfYXJjaCh2b2lkKQogeworI2lmZGVmIENPTkZJR19QQ0kKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworI2VuZGlmCiAKIAlpZiAocHBjX21kLnByb2dyZXNzKQogCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzgzNHhfbWRzX3NldHVwX2FyY2goKSIsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNnhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2eF9tZHMuYwppbmRleCA1MjZlZDA5Li5iY2VlZmY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2eF9tZHMuYwpAQCAtMTE4LDYgKzExOCw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC50eXBlID0gInFlIiwgfSwKKwl7IC50eXBlID0gIm1kaW8iLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDRfZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTQ0X2RzLmMKaW5kZXggMjg2N2Y4NS4uYmVjODRmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDRfZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0NF9kcy5jCkBAIC04NCw3ICs4NCw3IEBACiAjaWZkZWYgQ09ORklHX1BQQ19JODI1OQogCS8qIEluaXRpYWxpemUgdGhlIGk4MjU5IGNvbnRyb2xsZXIgKi8KIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpCi0JICAgIGlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImNocnAsaWljIikpIHsKKwkgICAgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiY2hycCxpaWMiKSkgewogCQljYXNjYWRlX25vZGUgPSBucDsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYwppbmRleCA3ZTcxNjM2Li4xNDkwZWIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAjaWZkZWYgQ09ORklHX1BQQ19JODI1OQogCS8qIEluaXRpYWxpemUgdGhlIGk4MjU5IGNvbnRyb2xsZXIgKi8KIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpCi0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImNocnAsaWljIikpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiY2hycCxpaWMiKSkgewogCQkJY2FzY2FkZV9ub2RlID0gbnA7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwppbmRleCA1NGRiNDE2Li5lM2RkZGJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwpAQCAtMTQ3LDYgKzE0Nyw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC50eXBlID0gInFlIiwgfSwKKwl7IC50eXBlID0gIm1kaW8iLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCmluZGV4IDNkM2Q5OGYuLjEwNTE3MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogI2lmZGVmIENPTkZJR19QQ0kKIAkvKiBJbml0aWFsaXplIGk4MjU5IGNvbnRyb2xsZXIgKi8KIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpCi0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImNocnAsaWljIikpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiY2hycCxpaWMiKSkgewogCQkJY2FzY2FkZV9ub2RlID0gbnA7CiAJCQlicmVhazsKIAkJfQpAQCAtMTY4LDcgKzE2OCw3IEBACiB7CiAJdW5zaWduZWQgc2hvcnQgdGVtcDsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoZGV2LT5idXMpOwotCXVuc2lnbmVkIGNoYXIgaXJxMnBpblsxNl07CisJdW5zaWduZWQgY2hhciBpcnEycGluWzE2XSwgYzsKIAl1bnNpZ25lZCBsb25nIHBpcnFfbWFwX3dvcmQgPSAwOwogCXUzMiBpcnE7CiAJaW50IGk7CkBAIC0yODgsNiArMjg4LDExIEBACiAJb3V0YigweDFlLCAweDRkMSk7CiAKICN1bmRlZiBVTEkxNTc1X1NFVF9ERVZfSVJRCisKKwkvKiBEaXNhYmxlIHRoZSBIRCBpbnRlcmZhY2UgYW5kIGVuYWJsZSB0aGUgQUM5NyBpbnRlcmZhY2UuICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweGI4LCAmYyk7CisJYyAmPSAweDdmOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4YjgsIGMpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfdWxpNTI4OChzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9zbXAuYwppbmRleCA3ZWYwYzY4Li5iYTU1YjBmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9zbXAuYwpAQCAtMTUsOCArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KICNpbmNsdWRlIDxhc20tcG93ZXJwYy9tcGljLmg+CiAjaW5jbHVkZSA8YXNtL21wYzg2eHguaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L21wYzg2eGFkc19zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbXBjODZ4YWRzX3NldHVwLmMKaW5kZXggYTM1MzE1YS4uY2YwZTdiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbXBjODZ4YWRzX3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbXBjODZ4YWRzX3NldHVwLmMKQEAgLTEsNCArMSw0IEBACi0vKmFyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4NnhhZHMtc2V0dXAuYworLyphcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tcGM4NnhhZHNfc2V0dXAuYwogICoKICAqIFBsYXRmb3JtIHNldHVwIGZvciB0aGUgRnJlZXNjYWxlIG1wYzg2eGFkcyBib2FyZAogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L21wYzg4NWFkc19zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbXBjODg1YWRzX3NldHVwLmMKaW5kZXggYTU3YjU3Ny4uYzM2ZTQ3NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbXBjODg1YWRzX3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbXBjODg1YWRzX3NldHVwLmMKQEAgLTEsNCArMSw0IEBACi0vKmFyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4ODVhZHMtc2V0dXAuYworLyphcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tcGM4ODVhZHNfc2V0dXAuYwogICoKICAqIFBsYXRmb3JtIHNldHVwIGZvciB0aGUgRnJlZXNjYWxlIG1wYzg4NWFkcyBib2FyZAogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwppbmRleCA1MWUzMzM0Li4zNjFhY2ZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCkBAIC00Miw2ICs0Miw3IEBACiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnIgogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnIgorc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnIgogI3NvdXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80eHgvS2NvbmZpZwogCiBjb25maWcgUFBDX05BVElWRQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKaW5kZXggNDUyMDA0Mi4uZDZlMDQxYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCkBAIC02LDcgKzYsOCBAQAogZW5kaWYKIGVuZGlmCiBvYmotJChDT05GSUdfUFBDX0NIUlApCQkrPSBjaHJwLwotb2JqLSQoQ09ORklHXzR4eCkJCSs9IDR4eC8KKyNvYmotJChDT05GSUdfNHh4KQkJKz0gNHh4Lworb2JqLSQoQ09ORklHXzQ0eCkJCSs9IDQ0eC8KIG9iai0kKENPTkZJR19QUENfTVBDNTJ4eCkJKz0gNTJ4eC8KIG9iai0kKENPTkZJR19QUENfOHh4KQkJKz0gOHh4Lwogb2JqLSQoQ09ORklHX1BQQ184Mnh4KQkJKz0gODJ4eC8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKaW5kZXggODI1NTE3Ny4uOWIyYjM4NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKQEAgLTM1LDYgKzM1LDIxIEBACiAJICBVbml0cyBvbiBtYWNoaW5lcyBpbXBsZW1lbnRpbmcgdGhlIEJyb2FkYmFuZCBQcm9jZXNzb3IKIAkgIEFyY2hpdGVjdHVyZS4KIAorY29uZmlnIFNQVV9GU182NEtfTFMKKwlib29sICJVc2UgNjRLIHBhZ2VzIHRvIG1hcCBTUEUgbG9jYWwgIHN0b3JlIgorCSMgd2UgZGVwZW5kIG9uIFBQQ19NTV9TTElDRVMgZm9yIG5vdyByYXRoZXIgdGhhbiBzZWxlY3RpbmcKKwkjIGl0IGJlY2F1c2Ugd2UgZGVwZW5kIG9uIGh1Z2V0bGJmcyBob29rcyBiZWluZyBwcmVzZW50LiBXZQorCSMgd2lsbCBmaXggdGhhdCB3aGVuIHRoZSBnZW5lcmljIGNvZGUgaGFzIGJlZW4gaW1wcm92ZWQgdG8KKwkjIG5vdCByZXF1aXJlIGhpamFja2luZyBodWdldGxiZnMgaG9va3MuCisJZGVwZW5kcyBvbiBTUFVfRlMgJiYgUFBDX01NX1NMSUNFUyAmJiAhUFBDXzY0S19QQUdFUworCWRlZmF1bHQgeQorCXNlbGVjdCBQUENfSEFTX0hBU0hfNjRLCisJaGVscAorCSAgVGhpcyBvcHRpb24gY2F1c2VzIFNQRSBsb2NhbCBzdG9yZXMgdG8gYmUgbWFwcGVkIGluIHByb2Nlc3MKKwkgIGFkZHJlc3Mgc3BhY2VzIHVzaW5nIDY0SyBwYWdlcyB3aGlsZSB0aGUgcmVzdCBvZiB0aGUga2VybmVsCisJICB1c2VzIDRLIHBhZ2VzLiBUaGlzIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlcyBvZiBhcHBsaWNhdGlvbnMKKwkgIHVzaW5nIG11bHRpcGxlIFNQRXMgYnkgbG93ZXJpbmcgdGhlIFRMQiBwcmVzc3VyZSBvbiB0aGVtLgorCiBjb25maWcgU1BVX0JBU0UKIAlib29sCiAJZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKaW5kZXggNGZjNGU5MjcuLjQ3MjY0ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCiBzdGF0aWMgaW50IGlpY19ob3N0X21hdGNoKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewotCXJldHVybiBkZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLAorCXJldHVybiBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLAogCQkJCSAgICAiSUJNLENCRUEtSW50ZXJuYWwtSW50ZXJydXB0LUNvbnRyb2xsZXIiKTsKIH0KIApAQCAtMjU2LDcgKzI1Niw3IEBACiAJdW5zaWduZWQgaW50IG5vZGUsIGV4dCwgdW5pdCwgY2xhc3M7CiAJY29uc3QgdTMyICp2YWw7CiAKLQlpZiAoIWRldmljZV9pc19jb21wYXRpYmxlKGN0LAorCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY3QsCiAJCQkJICAgICAiSUJNLENCRUEtSW50ZXJuYWwtSW50ZXJydXB0LUNvbnRyb2xsZXIiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKGludHNpemUgIT0gMSkKQEAgLTMyNCw3ICszMjQsNyBAQAogCiAJZm9yIChkbiA9IE5VTEw7CiAJICAgICAoZG4gPSBvZl9maW5kX25vZGVfYnlfbmFtZShkbiwiaW50ZXJydXB0LWNvbnRyb2xsZXIiKSkgIT0gTlVMTDspIHsKLQkJaWYgKCFkZXZpY2VfaXNfY29tcGF0aWJsZShkbiwKKwkJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkbiwKIAkJCQkgICAgICJJQk0sQ0JFQS1JbnRlcm5hbC1JbnRlcnJ1cHQtQ29udHJvbGxlciIpKQogCQkJY29udGludWU7CiAJCW5wID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGludGVycnVwdC1zZXJ2ZXItcmFuZ2VzIiwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW8td29ya2Fyb3VuZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5jCmluZGV4IGQ2OGQ5MjAuLjdmYjkyZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5jCkBAIC03NCw3ICs3NCw3IEBACiAJLyogRmFzdCBwYXRoIGlmIHdlIGhhdmUgYSBub24tMCB0b2tlbiwgaXQgaW5kaWNhdGVzIHdoaWNoIGJ1cyB3ZQogCSAqIGFyZSBvbi4KIAkgKgotCSAqIElmIHRoZSB0b2tlbiBpcyAwLCB0aGF0IG1lYW5zIGVpdGhlciB0aGUgdGhlIGlvcmVtYXAgd2FzIGRvbmUKKwkgKiBJZiB0aGUgdG9rZW4gaXMgMCwgdGhhdCBtZWFucyBlaXRoZXIgdGhhdCB0aGUgaW9yZW1hcCB3YXMgZG9uZQogCSAqIGJlZm9yZSB3ZSBpbml0aWFsaXplZCB0aGlzIGxheWVyLCBvciBpdCdzIGEgUElPIG9wZXJhdGlvbi4gV2UKIAkgKiBmYWxsYmFjayB0byBhIGxvdyBwYXRoIGluIHRoaXMgY2FzZS4gSG9wZWZ1bGx5LCBpbnRlcm5hbCBkZXZpY2VzCiAJICogd2hpY2ggYXJlIGlvcmVtYXAnZWQgZWFybHkgc2hvdWxkIHVzZSBpbl9YWC9vdXRfWFggZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcGVydmFzaXZlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcGVydmFzaXZlLmMKaW5kZXggOGMyMGYwZi4uODEyYmY1NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3BlcnZhc2l2ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9wZXJ2YXNpdmUuYwpAQCAtNDMsMTIgKzQzLDEwIEBACiAJdW5zaWduZWQgbG9uZyBjdHJsLCB0aHJlYWRfc3dpdGNoX2NvbnRyb2w7CiAKIAkvKgotCSAqIFdlIG5lZWQgdG8gaGFyZCBkaXNhYmxlIGludGVycnVwdHMsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gbWFyayB0aGVtCi0JICogaGFyZCBkaXNhYmxlZCBpbiB0aGUgUEFDQSBzbyB0aGF0IHRoZSBsb2NhbF9pcnFfZW5hYmxlKCkgZG9uZSBieQotCSAqIG91ciBjYWxsZXIgdXBvbiByZXR1cm4gcHJvcGVydGx5IGhhcmQgZW5hYmxlcy4KKwkgKiBXZSBuZWVkIHRvIGhhcmQgZGlzYWJsZSBpbnRlcnJ1cHRzLCB0aGUgbG9jYWxfaXJxX2VuYWJsZSgpIGRvbmUgYnkKKwkgKiBvdXIgY2FsbGVyIHVwb24gcmV0dXJuIHdpbGwgaGFyZCByZS1lbmFibGUuCiAJICovCiAJaGFyZF9pcnFfZGlzYWJsZSgpOwotCWdldF9wYWNhKCktPmhhcmRfZW5hYmxlZCA9IDA7CiAKIAljdHJsID0gbWZzcHIoU1BSTl9DVFJMRik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKaW5kZXggNTRiOTYxOC4uZGI2NjU0MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCiAJZm9yIChkbiA9IE5VTEw7CiAJICAgICAoZG4gPSBvZl9maW5kX25vZGVfYnlfbmFtZShkbiwgImludGVycnVwdC1jb250cm9sbGVyIikpOykgewotCQlpZiAoIWRldmljZV9pc19jb21wYXRpYmxlKGRuLCAiQ0JFQSxwbGF0Zm9ybS1vcGVuLXBpYyIpKQorCQlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKGRuLCAiQ0JFQSxwbGF0Zm9ybS1vcGVuLXBpYyIpKQogCQkJY29udGludWU7CiAKIAkJLyogVGhlIE1QSUMgZHJpdmVyIHdpbGwgZ2V0IGV2ZXJ5dGhpbmcgaXQgbmVlZHMgZnJvbSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCmluZGV4IGZiMWYxNTcuLjA1ZjRiM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYwpAQCAtMzU4LDEyICszNTgsMTIgQEAKIAkgKi8KIAlmb3IgKGRuID0gTlVMTDsKIAkgICAgIChkbiA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKGRuLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiKSk7KSB7Ci0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkbiwgIkNCRUEscGxhdGZvcm0tc3BpZGVyLXBpYyIpKSB7CisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkbiwgIkNCRUEscGxhdGZvcm0tc3BpZGVyLXBpYyIpKSB7CiAJCQlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShkbiwgMCwgJnIpKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic3BpZGVyLXBpYzogRmFpbGVkXG4iKTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJfSBlbHNlIGlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkbiwgInN0aSxwbGF0Zm9ybS1zcGlkZXItcGljIikKKwkJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkbiwgInN0aSxwbGF0Zm9ybS1zcGlkZXItcGljIikKIAkJCSAgICYmIChjaGlwIDwgMikpIHsKIAkJCXN0YXRpYyBsb25nIGhhcmRfY29kZWRfcGljc1tdID0KIAkJCQl7IDB4MjQwMDAwMDgwMDB1bCwgMHgzNDAwMDAwODAwMHVsfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKaW5kZXggZmVjNTE1Mi4uYTdmNWE3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKQEAgLTE0NCwxMiArMTQ0LDExIEBACiAKIAlzd2l0Y2goUkVHSU9OX0lEKGVhKSkgewogCWNhc2UgVVNFUl9SRUdJT05fSUQ6Ci0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQotCQlpZiAoaW5faHVnZXBhZ2VfYXJlYShtbS0+Y29udGV4dCwgZWEpKQotCQkJcHNpemUgPSBtbXVfaHVnZV9wc2l6ZTsKLQkJZWxzZQorI2lmZGVmIENPTkZJR19QUENfTU1fU0xJQ0VTCisJCXBzaXplID0gZ2V0X3NsaWNlX3BzaXplKG1tLCBlYSk7CisjZWxzZQorCQlwc2l6ZSA9IG1tLT5jb250ZXh0LnVzZXJfcHNpemU7CiAjZW5kaWYKLQkJCXBzaXplID0gbW0tPmNvbnRleHQudXNlcl9wc2l6ZTsKIAkJdnNpZCA9IChnZXRfdnNpZChtbS0+Y29udGV4dC5pZCwgZWEpIDw8IFNMQl9WU0lEX1NISUZUKSB8CiAJCQkJU0xCX1ZTSURfVVNFUjsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUKaW5kZXggMmNkODljMS4uMzI4YWZjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLW9iai15ICs9IHN3aXRjaC5vIGZhdWx0Lm8KK29iai15ICs9IHN3aXRjaC5vIGZhdWx0Lm8gbHNjc2FfYWxsb2MubwogCiBvYmotJChDT05GSUdfU1BVX0ZTKSArPSBzcHVmcy5vCiBzcHVmcy15ICs9IGlub2RlLm8gZmlsZS5vIGNvbnRleHQubyBzeXNjYWxscy5vIGNvcmVkdW1wLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9iYWNraW5nX29wcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2JhY2tpbmdfb3BzLmMKaW5kZXggMzMyMjUyOC4uZDMyZGI5ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2JhY2tpbmdfb3BzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2JhY2tpbmdfb3BzLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb250ZXh0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29udGV4dC5jCmluZGV4IGE4N2Q5Y2EuLjg2NTQ3NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb250ZXh0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvbnRleHQuYwpAQCAtMzYsMTAgKzM2LDggQEAKIAkvKiBCaW5kaW5nIHRvIHBoeXNpY2FsIHByb2Nlc3NvciBkZWZlcnJlZAogCSAqIHVudGlsIHNwdV9hY3RpdmF0ZSgpLgogCSAqLwotCXNwdV9pbml0X2NzYSgmY3R4LT5jc2EpOwotCWlmICghY3R4LT5jc2EubHNjc2EpIHsKKwlpZiAoc3B1X2luaXRfY3NhKCZjdHgtPmNzYSkpCiAJCWdvdG8gb3V0X2ZyZWU7Ci0JfQogCXNwaW5fbG9ja19pbml0KCZjdHgtPm1taW9fbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmN0eC0+bWFwcGluZ19sb2NrKTsKIAlrcmVmX2luaXQoJmN0eC0+a3JlZik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwppbmRleCBkMDEwYjI0Li40NTYxNGM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKQEAgLTExOCwxNCArMTE4LDMyIEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzcHVmc19tZW1fbW1hcF9ub3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0Jc3RydWN0IHNwdV9jb250ZXh0ICpjdHggPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nIHBmbiwgb2Zmc2V0ID0gYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQ7CisJc3RydWN0IHNwdV9jb250ZXh0ICpjdHgJPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHBmbiwgb2Zmc2V0LCBhZGRyMCA9IGFkZHJlc3M7CisjaWZkZWYgQ09ORklHX1NQVV9GU182NEtfTFMKKwlzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EgPSAmY3R4LT5jc2E7CisJaW50IHBzaXplOwogCi0Jb2Zmc2V0ICs9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwkvKiBDaGVjayB3aGF0IHBhZ2Ugc2l6ZSB3ZSBhcmUgdXNpbmcgKi8KKwlwc2l6ZSA9IGdldF9zbGljZV9wc2l6ZSh2bWEtPnZtX21tLCBhZGRyZXNzKTsKIAorCS8qIFNvbWUgc2FuaXR5IGNoZWNraW5nICovCisJQlVHX09OKGNzYS0+dXNlX2JpZ19wYWdlcyAhPSAocHNpemUgPT0gTU1VX1BBR0VfNjRLKSk7CisKKwkvKiBXb3csIDY0SywgY29vbCwgd2UgbmVlZCB0byBhbGlnbiB0aGUgYWRkcmVzcyB0aG91Z2ggKi8KKwlpZiAoY3NhLT51c2VfYmlnX3BhZ2VzKSB7CisJCUJVR19PTih2bWEtPnZtX3N0YXJ0ICYgMHhmZmZmKTsKKwkJYWRkcmVzcyAmPSB+MHhmZmZmdWw7CisJfQorI2VuZGlmIC8qIENPTkZJR19TUFVfRlNfNjRLX0xTICovCisKKwlvZmZzZXQgPSAoYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQpICsgKHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCk7CiAJaWYgKG9mZnNldCA+PSBMU19TSVpFKQogCQlyZXR1cm4gTk9QRk5fU0lHQlVTOwogCisJcHJfZGVidWcoInNwdWZzX21lbV9tbWFwX25vcGZuIGFkZHJlc3M9MHglbHggLT4gMHglbHgsIG9mZnNldD0weCVseFxuIiwKKwkJIGFkZHIwLCBhZGRyZXNzLCBvZmZzZXQpOworCiAJc3B1X2FjcXVpcmUoY3R4KTsKIAogCWlmIChjdHgtPnN0YXRlID09IFNQVV9TVEFURV9TQVZFRCkgewpAQCAtMTQ5LDkgKzE2NywyNCBAQAogCS5ub3BmbiA9IHNwdWZzX21lbV9tbWFwX25vcGZuLAogfTsKIAotc3RhdGljIGludAotc3B1ZnNfbWVtX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIGludCBzcHVmc19tZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CisjaWZkZWYgQ09ORklHX1NQVV9GU182NEtfTFMKKwlzdHJ1Y3Qgc3B1X2NvbnRleHQJKmN0eCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3B1X3N0YXRlCSpjc2EgPSAmY3R4LT5jc2E7CisKKwkvKiBTYW5pdHkgY2hlY2sgVk1BIGFsaWdubWVudCAqLworCWlmIChjc2EtPnVzZV9iaWdfcGFnZXMpIHsKKwkJcHJfZGVidWcoInNwdWZzX21lbV9tbWFwIDY0Sywgc3RhcnQ9MHglbHgsIGVuZD0weCVseCwiCisJCQkgIiBwZ29mZj0weCVseFxuIiwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCisJCQkgdm1hLT52bV9wZ29mZik7CisJCWlmICh2bWEtPnZtX3N0YXJ0ICYgMHhmZmZmKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh2bWEtPnZtX3Bnb2ZmICYgMHhmKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorI2VuZGlmIC8qIENPTkZJR19TUFVfRlNfNjRLX0xTICovCisKIAlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE2MywxMyArMTk2LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1BVX0ZTXzY0S19MUwordW5zaWduZWQgbG9uZyBzcHVmc19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHNwdV9jb250ZXh0CSpjdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNwdV9zdGF0ZQkqY3NhID0gJmN0eC0+Y3NhOworCisJLyogSWYgbm90IHVzaW5nIGJpZyBwYWdlcywgZmFsbGJhY2sgdG8gbm9ybWFsIE1NIGdfdV9hICovCisJaWYgKCFjc2EtPnVzZV9iaWdfcGFnZXMpCisJCXJldHVybiBjdXJyZW50LT5tbS0+Z2V0X3VubWFwcGVkX2FyZWEoZmlsZSwgYWRkciwgbGVuLAorCQkJCQkJICAgICAgcGdvZmYsIGZsYWdzKTsKKworCS8qIEVsc2UsIHRyeSB0byBvYnRhaW4gYSA2NEsgcGFnZXMgc2xpY2UgKi8KKwlyZXR1cm4gc2xpY2VfZ2V0X3VubWFwcGVkX2FyZWEoYWRkciwgbGVuLCBmbGFncywKKwkJCQkgICAgICAgTU1VX1BBR0VfNjRLLCAxLCAwKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1BVX0ZTXzY0S19MUyAqLworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19tZW1fZm9wcyA9IHsKLQkub3BlbgkgPSBzcHVmc19tZW1fb3BlbiwKLQkucmVsZWFzZSA9IHNwdWZzX21lbV9yZWxlYXNlLAotCS5yZWFkICAgID0gc3B1ZnNfbWVtX3JlYWQsCi0JLndyaXRlICAgPSBzcHVmc19tZW1fd3JpdGUsCi0JLmxsc2VlayAgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotCS5tbWFwICAgID0gc3B1ZnNfbWVtX21tYXAsCisJLm9wZW4JIAkJPSBzcHVmc19tZW1fb3BlbiwKKwkucmVhZCAgIAkJPSBzcHVmc19tZW1fcmVhZCwKKwkud3JpdGUgICAJCT0gc3B1ZnNfbWVtX3dyaXRlLAorCS5sbHNlZWsgIAkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAorCS5tbWFwICAgIAkJPSBzcHVmc19tZW1fbW1hcCwKKyNpZmRlZiBDT05GSUdfU1BVX0ZTXzY0S19MUworCS5nZXRfdW5tYXBwZWRfYXJlYQk9IHNwdWZzX2dldF91bm1hcHBlZF9hcmVhLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzcHVmc19wc19ub3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9od19vcHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9od19vcHMuYwppbmRleCA0Mjg4NzVjLi5mYzRlZDFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaHdfb3BzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2h3X29wcy5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwppbmRleCBhOTNmMzI4Li43MTUwNzMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwpAQCAtNzEsOSArNzEsNyBAQAogewogCXN0cnVjdCBzcHVmc19pbm9kZV9pbmZvICplaSA9IHA7CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKLQl9CisJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpbm9kZSAqCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvbHNjc2FfYWxsb2MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9sc2NzYV9hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YjNjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvbHNjc2FfYWxsb2MuYwpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIFNQVSBsb2NhbCBzdG9yZSBhbGxvY2F0aW9uIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IDIwMDcgQmVuamFtaW4gSGVycmVuc2NobWlkdCwgSUJNIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPGFzbS9zcHUuaD4KKyNpbmNsdWRlIDxhc20vc3B1X2NzYS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKworc3RhdGljIGludCBzcHVfYWxsb2NfbHNjc2Ffc3RkKHN0cnVjdCBzcHVfc3RhdGUgKmNzYSkKK3sKKwlzdHJ1Y3Qgc3B1X2xzY3NhICpsc2NzYTsKKwl1bnNpZ25lZCBjaGFyICpwOworCisJbHNjc2EgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3B1X2xzY3NhKSk7CisJaWYgKCFsc2NzYSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGxzY3NhLCAwLCBzaXplb2Yoc3RydWN0IHNwdV9sc2NzYSkpOworCWNzYS0+bHNjc2EgPSBsc2NzYTsKKworCS8qIFNldCBMUyBwYWdlcyByZXNlcnZlZCB0byBhbGxvdyBmb3IgdXNlci1zcGFjZSBtYXBwaW5nLiAqLworCWZvciAocCA9IGxzY3NhLT5sczsgcCA8IGxzY3NhLT5scyArIExTX1NJWkU7IHAgKz0gUEFHRV9TSVpFKQorCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKHApKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcHVfZnJlZV9sc2NzYV9zdGQoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKQoreworCS8qIENsZWFyIHJlc2VydmVkIGJpdCBiZWZvcmUgdmZyZWUuICovCisJdW5zaWduZWQgY2hhciAqcDsKKworCWlmIChjc2EtPmxzY3NhID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAocCA9IGNzYS0+bHNjc2EtPmxzOyBwIDwgY3NhLT5sc2NzYS0+bHMgKyBMU19TSVpFOyBwICs9IFBBR0VfU0laRSkKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKHApKTsKKworCXZmcmVlKGNzYS0+bHNjc2EpOworfQorCisjaWZkZWYgQ09ORklHX1NQVV9GU182NEtfTFMKKworI2RlZmluZSBTUFVfNjRLX1BBR0VfU0hJRlQJMTYKKyNkZWZpbmUgU1BVXzY0S19QQUdFX09SREVSCShTUFVfNjRLX1BBR0VfU0hJRlQgLSBQQUdFX1NISUZUKQorI2RlZmluZSBTUFVfNjRLX1BBR0VfQ09VTlQJKDF1bCA8PCBTUFVfNjRLX1BBR0VfT1JERVIpCisKK2ludCBzcHVfYWxsb2NfbHNjc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKQoreworCXN0cnVjdCBwYWdlCSoqcGdhcnJheTsKKwl1bnNpZ25lZCBjaGFyCSpwOworCWludAkJaSwgaiwgbl80azsKKworCS8qIENoZWNrIGF2YWlsYWJpbGl0eSBvZiA2NEsgcGFnZXMgKi8KKwlpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfNjRLXS5zaGlmdCA9PSAwKQorCQlnb3RvIGZhaWw7CisKKwljc2EtPnVzZV9iaWdfcGFnZXMgPSAxOworCisJcHJfZGVidWcoInNwdV9hbGxvY19sc2NzYShjc2E9MHglcCksIHRyeWluZyB0byBhbGxvY2F0ZSA2NEsgcGFnZXNcbiIsCisJCSBjc2EpOworCisJLyogRmlyc3QgdHJ5IHRvIGFsbG9jYXRlIG91ciA2NEsgcGFnZXMuIFdlIG5lZWQgNSBvZiB0aGVtCisJICogd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIHRyeQorCSAqIHRvIHNlcGFyYXRlIHRoZSBsc2NzYSB3aXRoIHRoZSBhY3R1YWwgbG9jYWwgc3RvcmUgaW1hZ2UsIHRodXMKKwkgKiBhbGxvd2luZyB1cyB0byByZXF1aXJlIG9ubHkgNCA2NEsgcGFnZXMgcGVyIGNvbnRleHQKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU1BVX0xTQ1NBX05VTV9CSUdfUEFHRVM7IGkrKykgeworCQkvKiBYWFggVGhpcyBpcyBsaWtlbHkgdG8gZmFpbCwgd2Ugc2hvdWxkIHVzZSBhIHNwZWNpYWwgcG9vbAorCQkgKiAgICAgc2ltaWxpYXIgdG8gd2hhdCBodWdldGxiZnMgZG9lcy4KKwkJICovCisJCWNzYS0+bHNjc2FfcGFnZXNbaV0gPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLAorCQkJCQkJICBTUFVfNjRLX1BBR0VfT1JERVIpOworCQlpZiAoY3NhLT5sc2NzYV9wYWdlc1tpXSA9PSBOVUxMKQorCQkJZ290byBmYWlsOworCX0KKworCXByX2RlYnVnKCIgc3VjY2VzcyAhIGNyZWF0aW5nIHZtYXAuLi5cbiIpOworCisJLyogTm93IHdlIG5lZWQgdG8gY3JlYXRlIGEgdm1hbGxvYyBtYXBwaW5nIG9mIHRoZXNlIGZvciB0aGUga2VybmVsCisJICogYW5kIFNQVSBjb250ZXh0IHN3aXRjaCBjb2RlIHRvIHVzZS4gQ3VycmVudGx5LCB3ZSBzdGljayB0byBhCisJICogbm9ybWFsIGtlcm5lbCB2bWFsbG9jIG1hcHBpbmcsIHdoaWNoIGluIG91ciBjYXNlIHdpbGwgYmUgNEsKKwkgKi8KKwluXzRrID0gU1BVXzY0S19QQUdFX0NPVU5UICogU1BVX0xTQ1NBX05VTV9CSUdfUEFHRVM7CisJcGdhcnJheSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbl80aywgR0ZQX0tFUk5FTCk7CisJaWYgKHBnYXJyYXkgPT0gTlVMTCkKKwkJZ290byBmYWlsOworCWZvciAoaSA9IDA7IGkgPCBTUFVfTFNDU0FfTlVNX0JJR19QQUdFUzsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgU1BVXzY0S19QQUdFX0NPVU5UOyBqKyspCisJCQkvKiBXZSBhc3N1bWUgYWxsIHRoZSBzdHJ1Y3QgcGFnZSdzIGFyZSBjb250aWd1b3VzCisJCQkgKiB3aGljaCBzaG91bGQgYmUgaG9wZWZ1bGx5IHRoZSBjYXNlIGZvciBhbiBvcmRlciA0CisJCQkgKiBhbGxvY2F0aW9uLi4KKwkJCSAqLworCQkJcGdhcnJheVtpICogU1BVXzY0S19QQUdFX0NPVU5UICsgal0gPQorCQkJCWNzYS0+bHNjc2FfcGFnZXNbaV0gKyBqOworCWNzYS0+bHNjc2EgPSB2bWFwKHBnYXJyYXksIG5fNGssIFZNX1VTRVJNQVAsIFBBR0VfS0VSTkVMKTsKKwlrZnJlZShwZ2FycmF5KTsKKwlpZiAoY3NhLT5sc2NzYSA9PSBOVUxMKQorCQlnb3RvIGZhaWw7CisKKwltZW1zZXQoY3NhLT5sc2NzYSwgMCwgc2l6ZW9mKHN0cnVjdCBzcHVfbHNjc2EpKTsKKworCS8qIFNldCBMUyBwYWdlcyByZXNlcnZlZCB0byBhbGxvdyBmb3IgdXNlci1zcGFjZSBtYXBwaW5nLgorCSAqCisJICogWFhYIGlzbid0IHRoYXQgYSBiaXQgb2Jzb2xldGUgPyBJIHRoaW5rIHdlIHNob3VsZCBqdXN0CisJICogbWFrZSBzdXJlIHRoZSBwYWdlIGNvdW50IGlzIGhpZ2ggZW5vdWdoLiBBbnl3YXksIHdvbid0IGhhcm0KKwkgKiBmb3Igbm93CisJICovCisJZm9yIChwID0gY3NhLT5sc2NzYS0+bHM7IHAgPCBjc2EtPmxzY3NhLT5scyArIExTX1NJWkU7IHAgKz0gUEFHRV9TSVpFKQorCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKHApKTsKKworCXByX2RlYnVnKCIgYWxsIGdvb2QgIVxuIik7CisKKwlyZXR1cm4gMDsKK2ZhaWw6CisJcHJfZGVidWcoInNwdWZzOiBmYWlsZWQgdG8gYWxsb2NhdGUgbHNjc2EgNjRLIHBhZ2VzLCBmYWxsaW5nIGJhY2tcbiIpOworCXNwdV9mcmVlX2xzY3NhKGNzYSk7CisJcmV0dXJuIHNwdV9hbGxvY19sc2NzYV9zdGQoY3NhKTsKK30KKwordm9pZCBzcHVfZnJlZV9sc2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpCit7CisJdW5zaWduZWQgY2hhciAqcDsKKwlpbnQgaTsKKworCWlmICghY3NhLT51c2VfYmlnX3BhZ2VzKSB7CisJCXNwdV9mcmVlX2xzY3NhX3N0ZChjc2EpOworCQlyZXR1cm47CisJfQorCWNzYS0+dXNlX2JpZ19wYWdlcyA9IDA7CisKKwlpZiAoY3NhLT5sc2NzYSA9PSBOVUxMKQorCQlnb3RvIGZyZWVfcGFnZXM7CisKKwlmb3IgKHAgPSBjc2EtPmxzY3NhLT5sczsgcCA8IGNzYS0+bHNjc2EtPmxzICsgTFNfU0laRTsgcCArPSBQQUdFX1NJWkUpCisJCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZShwKSk7CisKKwl2dW5tYXAoY3NhLT5sc2NzYSk7CisJY3NhLT5sc2NzYSA9IE5VTEw7CisKKyBmcmVlX3BhZ2VzOgorCisJZm9yIChpID0gMDsgaSA8IFNQVV9MU0NTQV9OVU1fQklHX1BBR0VTOyBpKyspCisJCWlmIChjc2EtPmxzY3NhX3BhZ2VzW2ldKQorCQkJX19mcmVlX3BhZ2VzKGNzYS0+bHNjc2FfcGFnZXNbaV0sIFNQVV82NEtfUEFHRV9PUkRFUik7Cit9CisKKyNlbHNlIC8qIENPTkZJR19TUFVfRlNfNjRLX0xTICovCisKK2ludCBzcHVfYWxsb2NfbHNjc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKQoreworCXJldHVybiBzcHVfYWxsb2NfbHNjc2Ffc3RkKGNzYSk7Cit9CisKK3ZvaWQgc3B1X2ZyZWVfbHNjc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKQoreworCXNwdV9mcmVlX2xzY3NhX3N0ZChjc2EpOworfQorCisjZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1NQVV9GU182NEtfTFMpICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCmluZGV4IDkxMDMwYjguLmI2ZWNiMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zd2l0Y2guYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zd2l0Y2guYwppbmRleCA4MzQ3YzRhLi43MWEwYjQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3dpdGNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N3aXRjaC5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KIApAQCAtMjE4OSw0MCArMjE4OCwzMCBAQAogICogYXMgaXQgaXMgYnkgZmFyIHRoZSBsYXJnZXN0IG9mIHRoZSBjb250ZXh0IHNhdmUgcmVnaW9ucywKICAqIGFuZCBtYXkgbmVlZCB0byBiZSBwaW5uZWQgb3Igb3RoZXJ3aXNlIHNwZWNpYWxseSBhbGlnbmVkLgogICovCi12b2lkIHNwdV9pbml0X2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpCitpbnQgc3B1X2luaXRfY3NhKHN0cnVjdCBzcHVfc3RhdGUgKmNzYSkKIHsKLQlzdHJ1Y3Qgc3B1X2xzY3NhICpsc2NzYTsKLQl1bnNpZ25lZCBjaGFyICpwOworCWludCByYzsKIAogCWlmICghY3NhKQotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCW1lbXNldChjc2EsIDAsIHNpemVvZihzdHJ1Y3Qgc3B1X3N0YXRlKSk7CiAKLQlsc2NzYSA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzcHVfbHNjc2EpKTsKLQlpZiAoIWxzY3NhKQotCQlyZXR1cm47CisJcmMgPSBzcHVfYWxsb2NfbHNjc2EoY3NhKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAotCW1lbXNldChsc2NzYSwgMCwgc2l6ZW9mKHN0cnVjdCBzcHVfbHNjc2EpKTsKLQljc2EtPmxzY3NhID0gbHNjc2E7CiAJc3Bpbl9sb2NrX2luaXQoJmNzYS0+cmVnaXN0ZXJfbG9jayk7CiAKLQkvKiBTZXQgTFMgcGFnZXMgcmVzZXJ2ZWQgdG8gYWxsb3cgZm9yIHVzZXItc3BhY2UgbWFwcGluZy4gKi8KLQlmb3IgKHAgPSBsc2NzYS0+bHM7IHAgPCBsc2NzYS0+bHMgKyBMU19TSVpFOyBwICs9IFBBR0VfU0laRSkKLQkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZShwKSk7Ci0KIAlpbml0X3Byb2IoY3NhKTsKIAlpbml0X3ByaXYxKGNzYSk7CiAJaW5pdF9wcml2Mihjc2EpOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcHVfaW5pdF9jc2EpOwogCiB2b2lkIHNwdV9maW5pX2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpCiB7Ci0JLyogQ2xlYXIgcmVzZXJ2ZWQgYml0IGJlZm9yZSB2ZnJlZS4gKi8KLQl1bnNpZ25lZCBjaGFyICpwOwotCWZvciAocCA9IGNzYS0+bHNjc2EtPmxzOyBwIDwgY3NhLT5sc2NzYS0+bHMgKyBMU19TSVpFOyBwICs9IFBBR0VfU0laRSkKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKHApKTsKLQotCXZmcmVlKGNzYS0+bHNjc2EpOworCXNwdV9mcmVlX2xzY3NhKGNzYSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcHVfZmluaV9jc2EpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9wY2kuYwppbmRleCBkMWFkZjM0Li5lOWFjMTljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9wY2kuYwpAQCAtNDU3LDYgKzQ1Nyw3IEBACiAKIAlwcl9kZWJ1ZygiUENJOiBjZWxsZWJfc2V0dXBfcGhiKCkgJXNcbiIsIG5hbWUpOwogCXBoYl9zZXRfYnVzX3JhbmdlcyhkZXYsIHBoYik7CisJcGhiLT5idWlkID0gMTsKIAogCWlmIChzdHJjbXAobmFtZSwgImVwY2kiKSA9PSAwKSB7CiAJCXBoYi0+b3BzID0gJmNlbGxlYl9lcGNpX29wczsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL3NjY19lcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9zY2NfZXBjaS5jCmluZGV4IGZiMjNkNTMuLmM0YjAxMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL3NjY19lcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvc2NjX2VwY2kuYwpAQCAtMTMzLDEzICsxMzMsMTMgQEAKIH0KIAogc3RhdGljIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqY2VsbGViX2VwY2lfbWFrZV9jb25maWdfYWRkcigKKwkJCQkJc3RydWN0IHBjaV9idXMgKmJ1cywKIAkJCQkJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAogCQkJCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSkKIHsKIAl2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHI7Ci0Jc3RydWN0IHBjaV9idXMgKmJ1cyA9IGhvc2UtPmJ1czsKIAotCWlmIChidXMtPnNlbGYpCisJaWYgKGJ1cyAhPSBob3NlLT5idXMpCiAJCWFkZHIgPSBjZWxsZWJfZXBjaV9nZXRfZXBjaV9jZmcoaG9zZSkgKwogCQkgICAgICAgKCgoYnVzLT5udW1iZXIgJiAweGZmKSA8PCAxNikKIAkJICAgICAgICB8ICgoZGV2Zm4gJiAweGZmKSA8PCA4KQpAQCAtMTkzLDcgKzE5Myw3IEBACiAJfSBlbHNlIHsKIAogCQljbGVhcl9hbmRfZGlzYWJsZV9tYXN0ZXJfYWJvcnRfaW50ZXJydXB0KGhvc2UpOwotCQlhZGRyID0gY2VsbGViX2VwY2lfbWFrZV9jb25maWdfYWRkcihob3NlLCBkZXZmbiwgd2hlcmUpOworCQlhZGRyID0gY2VsbGViX2VwY2lfbWFrZV9jb25maWdfYWRkcihidXMsIGhvc2UsIGRldmZuLCB3aGVyZSk7CiAKIAkJc3dpdGNoIChzaXplKSB7CiAJCWNhc2UgMToKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCX0gZWxzZSB7CiAKIAkJY2xlYXJfYW5kX2Rpc2FibGVfbWFzdGVyX2Fib3J0X2ludGVycnVwdChob3NlKTsKLQkJYWRkciA9IGNlbGxlYl9lcGNpX21ha2VfY29uZmlnX2FkZHIoaG9zZSwgZGV2Zm4sIHdoZXJlKTsKKwkJYWRkciA9IGNlbGxlYl9lcGNpX21ha2VfY29uZmlnX2FkZHIoYnVzLCBob3NlLCBkZXZmbiwgd2hlcmUpOwogCiAJCXN3aXRjaCAoc2l6ZSkgewogCQljYXNlIDE6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvc2V0dXAuYwppbmRleCA1OTZhYjJhLi41ZTlmN2YxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL3NldHVwLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotX19zZXR1cCgiY2VsbGViX21hY2hpbmVfdHlwZV9oYWNrIiwgY2VsbGViX21hY2hpbmVfdHlwZV9oYWNrKTsKK19fc2V0dXAoImNlbGxlYl9tYWNoaW5lX3R5cGVfaGFjaz0iLCBjZWxsZWJfbWFjaGluZV90eXBlX2hhY2spOwogCiBzdGF0aWMgdm9pZCBjZWxsZWJfcHJvZ3Jlc3MoY2hhciAqcywgdW5zaWduZWQgc2hvcnQgaGV4KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jCmluZGV4IDE0NjlkNjQuLmQzMmZlZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCQltb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShkZXYsICJtb2RlbCIsIE5VTEwpOwogCQlpZiAobW9kZWwgPT0gTlVMTCkKIAkJCW1vZGVsID0gIjxub25lPiI7Ci0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJJQk0scHl0aG9uIikpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldiwgIklCTSxweXRob24iKSkgewogCQkJc2V0dXBfcHl0aG9uKGhvc2UsIGRldik7CiAJCX0gZWxzZSBpZiAoaXNfbW90CiAJCQkgICB8fCBzdHJuY21wKG1vZGVsLCAiTW90b3JvbGEsIEdyYWNrbGUiLCAxNykgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BlZ2Fzb3NfZXRoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYwppbmRleCA3MTA0NTY3Li41YmNjNThkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAKIC8qKioqKioqKioqKi8KIC8qKioqKioqKioqKi8KLWludCBtdjY0M3h4X2V0aF9hZGRfcGRzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtdjY0M3h4X2V0aF9hZGRfcGRzKHZvaWQpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9tYXJ2ZWxsX212NjQzNjBbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKaW5kZXggMTg3MDAzOC4uMzczZGU0YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCiAJLyogTG9vayBmb3IgY2FzY2FkZSAqLwogCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgImludGVycnVwdC1jb250cm9sbGVyIikKLQkJaWYgKGRldmljZV9pc19jb21wYXRpYmxlKG5wLCAiY2hycCxpaWMiKSkgeworCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJjaHJwLGlpYyIpKSB7CiAJCQlwaWMgPSBucDsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc21wLmMKaW5kZXggMWQyMzA3ZS4uM2VhMGViNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zbXAuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWcKaW5kZXggOTU1NzkwOC4uZjJkMjYyNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZwpAQCAtMjAsMTYgKzIwLDMyIEBACiAJc2VsZWN0IFRTSTEwOF9CUklER0UKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKLQlzZWxlY3QgTVBJQwotCXNlbGVjdCBNUElDX1dFSVJECiAJaGVscAogCSAgU2VsZWN0IE1QQzc0NDhIUEMyIGlmIGNvbmZpZ3VyaW5nIGZvciBGcmVlc2NhbGUgTVBDNzQ0OEhQQzIgKFRhaWdhKQogCSAgcGxhdGZvcm0KKworY29uZmlnIFBQQ19IT0xMWQorCWJvb2wgIlBQQzc1MEdYL0NMIHdpdGggVFNJMTB4IGJyaWRnZSAoSGlja29yeS9Ib2xseSkiCisJc2VsZWN0IFRTSTEwOF9CUklER0UKKwlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKKwloZWxwCisJICBTZWxlY3QgUFBDX0hPTExZIGlmIGNvbmZpZ3VyaW5nIGZvciBhbiBJQk0gNzUwR1gvQ0wgRXZhbAorCSAgQm9hcmQgd2l0aCBUU0kxMDgvOSBicmlkZ2UgKEhpY2tvcnkvSG9sbHkpCisKK2NvbmZpZyBQUENfUFJQTUMyODAwCisJYm9vbCAiTW90b3JvbGEtUHJQTUMyODAwIgorCXNlbGVjdCBNVjY0WDYwCisJc2VsZWN0IE5PVF9DT0hFUkVOVF9DQUNIRQorCXNlbGVjdCBXQU5UX0RFVklDRV9UUkVFCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3JvbGEgUHJQTUMyODAwIGJvYXJkCiBlbmRjaG9pY2UKIAogY29uZmlnIFRTSTEwOF9CUklER0UKIAlib29sCi0JZGVwZW5kcyBvbiBNUEM3NDQ4SFBDMgorCWRlcGVuZHMgb24gTVBDNzQ0OEhQQzIgfHwgUFBDX0hPTExZCisJc2VsZWN0IE1QSUMKKwlzZWxlY3QgTVBJQ19XRUlSRAogCWRlZmF1bHQgeQogCiBjb25maWcgTVBDMTBYX0JSSURHRQpAQCAtMzgsNiArNTQsMTEgQEAKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQogCWRlZmF1bHQgeQogCitjb25maWcgTVY2NFg2MAorCWJvb2wKKwlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQorCXNlbGVjdCBDT05GSUdfQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZCisKIGNvbmZpZyBNUEMxMFhfT1BFTlBJQwogCWJvb2wKIAlkZXBlbmRzIG9uIExJTktTVEFUSU9OCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9NYWtlZmlsZQppbmRleCBkM2QxMWEzLi44NDQ5NDdjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvTWFrZWZpbGUKQEAgLTMsMyArMyw1IEBACiAjCiBvYmotJChDT05GSUdfTVBDNzQ0OEhQQzIpCSs9IG1wYzc0NDhfaHBjMi5vCiBvYmotJChDT05GSUdfTElOS1NUQVRJT04pCSs9IGxpbmtzdGF0aW9uLm8gbHNfdWFydC5vCitvYmotJChDT05GSUdfUFBDX0hPTExZKQkJKz0gaG9sbHkubworb2JqLSQoQ09ORklHX1BQQ19QUlBNQzI4MDApCSs9IHBycG1jMjgwMC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hvbGx5LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hvbGx5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwYjRhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvaG9sbHkuYwpAQCAtMCwwICsxLDMxNyBAQAorLyoKKyAqIEJvYXJkIHNldHVwIHJvdXRpbmVzIGZvciB0aGUgSUJNIDc1MEdYL0NMIHBsYXRmb3JtIHcvIFRTSTEweCBicmlkZ2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBTdGVwaGVuIFdpbmllY2tpIDxzdGV2ZXdpbkB1cy5pYm0uY29tPgorICogSm9zaCBCb3llciA8andib3llckBsaW51eC52bmV0LmlibS5jb20+CisgKgorICogQmFzZWQgb24gY29kZSBmcm9tIG1wYzc0NDhfaHBjMi5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxhc20vdHNpMTA4Lmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KKyNpbmNsdWRlIDxhc20vdHNpMTA4X2lycS5oPgorI2luY2x1ZGUgPGFzbS90c2kxMDhfcGNpLmg+CisjaW5jbHVkZSA8YXNtL21waWMuaD4KKyNpbmNsdWRlIDxhc20vb2ZfcGxhdGZvcm0uaD4KKworI3VuZGVmIERFQlVHCisKKyNkZWZpbmUgSE9MTFlfUENJX0NGR19QSFlTIDB4N2MwMDAwMDAKKworaW50IGhvbGx5X2V4Y2x1ZGVfZGV2aWNlKHVfY2hhciBidXMsIHVfY2hhciBkZXZmbikKK3sKKwlpZiAoYnVzID09IDAgJiYgUENJX1NMT1QoZGV2Zm4pID09IDApCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJZWxzZQorCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgdm9pZCBob2xseV9yZW1hcF9icmlkZ2Uodm9pZCkKK3sKKwl1MzIgbHV0X3ZhbCwgbHV0X2FkZHI7CisJaW50IGk7CisKKwlwcmludGsoS0VSTl9JTkZPICJSZW1hcHBpbmcgUENJIGJyaWRnZVxuIik7CisKKwkvKiBSZS1pbml0IHRoZSBQQ0kgYnJpZGdlIGFuZCBMVVQgcmVnaXN0ZXJzIHRvIGhhdmUgbWFwcGluZ3MgdGhhdCBkb24ndAorCSAqIHJlbHkgb24gUElCUworCSAqLworCWx1dF9hZGRyID0gMHg5MDA7CisJZm9yIChpID0gMDsgaSA8IDMxOyBpKyspIHsKKwkJdHNpMTA4X3dyaXRlX3JlZyhUU0kxMDhfUEJfT0ZGU0VUICsgbHV0X2FkZHIsIDB4MDAwMDAyMDEpOworCQlsdXRfYWRkciArPSA0OworCQl0c2kxMDhfd3JpdGVfcmVnKFRTSTEwOF9QQl9PRkZTRVQgKyBsdXRfYWRkciwgMHgwKTsKKwkJbHV0X2FkZHIgKz0gNDsKKwl9CisKKwkvKiBSZXNlcnZlIHRoZSBsYXN0IExVVCBlbnRyeSBmb3IgUENJIEkvTyBzcGFjZSAqLworCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BCX09GRlNFVCArIGx1dF9hZGRyLCAweDAwMDAwMjQxKTsKKwlsdXRfYWRkciArPSA0OworCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BCX09GRlNFVCArIGx1dF9hZGRyLCAweDApOworCisJLyogTWFwIFBDSSBJL08gc3BhY2UgKi8KKwl0c2kxMDhfd3JpdGVfcmVnKFRTSTEwOF9QQ0lfUEZBQl9JT19VUFBFUiwgMHgwKTsKKwl0c2kxMDhfd3JpdGVfcmVnKFRTSTEwOF9QQ0lfUEZBQl9JTywgMHgxKTsKKworCS8qIE1hcCBQQ0kgQ0ZHIHNwYWNlICovCisJdHNpMTA4X3dyaXRlX3JlZyhUU0kxMDhfUENJX1BGQUJfQkFSMF9VUFBFUiwgMHgwKTsKKwl0c2kxMDhfd3JpdGVfcmVnKFRTSTEwOF9QQ0lfUEZBQl9CQVIwLCAweDdjMDAwMDAwIHwgMHgwMSk7CisKKwkvKiBXZSBkb24ndCBuZWVkIE1FTTMyIGFuZCBQUk0gcmVtYXBwaW5nIHNvIGRpc2FibGUgdGhlbSAqLworCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BDSV9QRkFCX01FTTMyLCAweDApOworCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BDSV9QRkFCX1BGTTMsIDB4MCk7CisJdHNpMTA4X3dyaXRlX3JlZyhUU0kxMDhfUENJX1BGQUJfUEZNNCwgMHgwKTsKKworCS8qIFNldCBQMk9fQkFSMCAqLworCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BDSV9QMk9fQkFSMF9VUFBFUiwgMHgwKTsKKwl0c2kxMDhfd3JpdGVfcmVnKFRTSTEwOF9QQ0lfUDJPX0JBUjAsIDB4YzAwMDAwMDApOworCisJLyogSW5pdCB0aGUgUENJIExVVHMgdG8gZG8gbm8gcmVtYXBwaW5nICovCisJbHV0X2FkZHIgPSAweDUwMDsKKwlsdXRfdmFsID0gMHgwMDAwMDAwMjsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBsdXRfYWRkciwgbHV0X3ZhbCk7CisJCWx1dF9hZGRyICs9IDQ7CisJCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BDSV9PRkZTRVQgKyBsdXRfYWRkciwgMHg0MDAwMDAwMCk7CisJCWx1dF9hZGRyICs9IDQ7CisJCWx1dF92YWwgKz0gMHgwMjAwMDAwMDsKKwl9CisJdHNpMTA4X3dyaXRlX3JlZyhUU0kxMDhfUENJX1AyT19QQUdFX1NJWkVTLCAweDAwMDA3OTAwKTsKKworCS8qIFNldCA2NC1iaXQgUENJIGJ1cyBhZGRyZXNzIGZvciBzeXN0ZW0gbWVtb3J5ICovCisJdHNpMTA4X3dyaXRlX3JlZyhUU0kxMDhfUENJX1AyT19CQVIyX1VQUEVSLCAweDApOworCXRzaTEwOF93cml0ZV9yZWcoVFNJMTA4X1BDSV9QMk9fQkFSMiwgMHgwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGhvbGx5X3NldHVwX2FyY2godm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJob2xseV9zZXR1cF9hcmNoKCk6c2V0X2JyaWRnZSIsIDApOworCisJY3B1ID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOworCWlmIChjcHUpIHsKKwkJY29uc3QgdW5zaWduZWQgaW50ICpmcDsKKworCQlmcCA9IG9mX2dldF9wcm9wZXJ0eShjcHUsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKKwkJaWYgKGZwKQorCQkJbG9vcHNfcGVyX2ppZmZ5ID0gKmZwIC8gSFo7CisJCWVsc2UKKwkJCWxvb3BzX3Blcl9qaWZmeSA9IDUwMDAwMDAwIC8gSFo7CisJCW9mX25vZGVfcHV0KGNwdSk7CisJfQorCXRzaTEwOF9jc3JfdmlyX2Jhc2UgPSBnZXRfdmlyX2NzcmJhc2UoKTsKKworCS8qIHNldHVwIFBDSSBob3N0IGJyaWRnZSAqLworCWhvbGx5X3JlbWFwX2JyaWRnZSgpOworCisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAicGNpIik7CisJaWYgKG5wKQorCQl0c2kxMDhfc2V0dXBfcGNpKG5wLCBIT0xMWV9QQ0lfQ0ZHX1BIWVMsIDEpOworCisJcHBjX21kLnBjaV9leGNsdWRlX2RldmljZSA9IGhvbGx5X2V4Y2x1ZGVfZGV2aWNlOworCWlmIChwcGNfbWQucHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygidHNpMTA4OiByZXNvdXJjZXMgc2V0IiwgMHgxMDApOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUFBDNzUwR1gvQ0wgUGxhdGZvcm1cbiIpOworfQorCisvKgorICogSW50ZXJydXB0IHNldHVwIGFuZCBzZXJ2aWNlLiAgSW50ZXJycnVwdHMgb24gdGhlIGhvbGx5IGNvbWUKKyAqIGZyb20gdGhlIGZvdXIgZXh0ZXJuYWwgSU5UIHBpbnMsIFBDSSBpbnRlcnJ1cHRzIGFyZSByb3V0ZWQgdmlhCisgKiBQQ0kgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXJzLCBpdCBnZW5lcmF0ZXMgaW50ZXJuYWwgSVJRMjMKKyAqCisgKiBJbnRlcnJ1cHQgcm91dGluZyBvbiB0aGUgSG9sbHkgQm9hcmQ6CisgKiBUU0kxMDg6UEJfSU5UWzBdIC0+IENQVTA6SU5UIworICogVFNJMTA4OlBCX0lOVFsxXSAtPiBDUFUwOk1DUCMKKyAqIFRTSTEwODpQQl9JTlRbMl0gLT4gTi9DCisgKiBUU0kxMDg6UEJfSU5UWzNdIC0+IE4vQworICovCitzdGF0aWMgdm9pZCBfX2luaXQgaG9sbHlfaW5pdF9JUlEodm9pZCkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYzsKKwlwaHlzX2FkZHJfdCBtcGljX3BhZGRyID0gMDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRzaV9waWM7CisjaWZkZWYgQ09ORklHX1BDSQorCXVuc2lnbmVkIGludCBjYXNjYWRlX3BjaV9pcnE7CisJc3RydWN0IGRldmljZV9ub2RlICp0c2lfcGNpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2FzY2FkZV9ub2RlID0gTlVMTDsKKyNlbmRpZgorCisJdHNpX3BpYyA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJvcGVuLXBpYyIpOworCWlmICh0c2lfcGljKSB7CisJCXVuc2lnbmVkIGludCBzaXplOworCQljb25zdCB2b2lkICpwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KHRzaV9waWMsICJyZWciLCAmc2l6ZSk7CisJCW1waWNfcGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyh0c2lfcGljLCBwcm9wKTsKKwl9CisKKwlpZiAobXBpY19wYWRkciA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIHRzaTEwOCBQSUMgZm91bmQgIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJcHJfZGVidWcoIiVzOiB0c2kxMDggcGljIHBoeXNfYWRkciA9IDB4JXhcbiIsIF9fZnVuY19fLCAodTMyKSBtcGljX3BhZGRyKTsKKworCW1waWMgPSBtcGljX2FsbG9jKHRzaV9waWMsIG1waWNfcGFkZHIsCisJCQlNUElDX1BSSU1BUlkgfCBNUElDX0JJR19FTkRJQU4gfCBNUElDX1dBTlRTX1JFU0VUIHwKKwkJCU1QSUNfU1BWX0VPSSB8IE1QSUNfTk9fUFRIUk9VX0RJUyB8IE1QSUNfUkVHU0VUX1RTSTEwOCwKKwkJCTI0LAorCQkJTlJfSVJRUy00LCAvKiBudW1fc291cmNlcyB1c2VkICovCisJCQkiVHNpMTA4X1BJQyIpOworCisJQlVHX09OKG1waWMgPT0gTlVMTCk7CisKKwltcGljX2Fzc2lnbl9pc3UobXBpYywgMCwgbXBpY19wYWRkciArIDB4MTAwKTsKKworCW1waWNfaW5pdChtcGljKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKwl0c2lfcGNpID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgInBjaSIpOworCWlmICh0c2lfcGNpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogTm8gdHNpMTA4IHBjaSBub2RlIGZvdW5kICFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWNhc2NhZGVfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJwaWMtcm91dGVyIik7CisJaWYgKGNhc2NhZGVfbm9kZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIHRzaTEwOCBwY2kgY2FzY2FkZSBub2RlIGZvdW5kICFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWNhc2NhZGVfcGNpX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHRzaV9wY2ksIDApOworCXByX2RlYnVnKCIlczogdHNpMTA4IGNhc2NhZGVfcGNpX2lycSA9IDB4JXhcbiIsIF9fZnVuY19fLCAodTMyKSBjYXNjYWRlX3BjaV9pcnEpOworCXRzaTEwOF9wY2lfaW50X2luaXQoY2FzY2FkZV9ub2RlKTsKKwlzZXRfaXJxX2RhdGEoY2FzY2FkZV9wY2lfaXJxLCBtcGljKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihjYXNjYWRlX3BjaV9pcnEsIHRzaTEwOF9pcnFfY2FzY2FkZSk7CisjZW5kaWYKKwkvKiBDb25maWd1cmUgTVBJQyBvdXRwdXRzIHRvIENQVTAgKi8KKwl0c2kxMDhfd3JpdGVfcmVnKFRTSTEwOF9NUElDX09GRlNFVCArIDB4MzBjLCAwKTsKKwlvZl9ub2RlX3B1dCh0c2lfcGljKTsKK30KKwordm9pZCBob2xseV9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQoreworCXNlcV9wcmludGYobSwgInZlbmRvclx0XHQ6IElCTVxuIik7CisJc2VxX3ByaW50ZihtLCAibWFjaGluZVx0XHQ6IFBQQzc1MCBHWC9DTFxuIik7Cit9CisKK3ZvaWQgaG9sbHlfcmVzdGFydChjaGFyICpjbWQpCit7CisJX19iZTMyIF9faW9tZW0gKm9jbl9iYXIxID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGJhcjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmJyaWRnZSA9IE5VTEw7CisJY29uc3Qgdm9pZCAqcHJvcDsKKwlpbnQgc2l6ZTsKKwlwaHlzX2FkZHJfdCBhZGRyID0gMHhjMDAwMDAwMDsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwlicmlkZ2UgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAidHNpLWJyaWRnZSIpOworCWlmIChicmlkZ2UpIHsKKwkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShicmlkZ2UsICJyZWciLCAmc2l6ZSk7CisJCWFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhicmlkZ2UsIHByb3ApOworCX0KKwlhZGRyICs9IChUU0kxMDhfUEJfT0ZGU0VUICsgMHg0MTQpOworCisJb2NuX2JhcjEgPSBpb3JlbWFwKGFkZHIsIDB4NCk7CisKKwkvKiBUdXJuIG9uIHRoZSBCT09UIGJpdCBzbyB0aGUgYWRkcmVzc2VzIGFyZSBjb3JyZWN0bHkKKwkgKiByb3V0ZWQgdG8gdGhlIEhMUCBpbnRlcmZhY2UgKi8KKwliYXIgPSBpb3JlYWQzMmJlKG9jbl9iYXIxKTsKKwliYXIgfD0gMjsKKwlpb3dyaXRlMzJiZShiYXIsIG9jbl9iYXIxKTsKKwlpb3N5bmMoKTsKKworCS8qIFNldCBTUlIwIHRvIHRoZSByZXNldCB2ZWN0b3IgYW5kIHR1cm4gb24gTVNSX0lQICovCisJbXRzcHIoU1BSTl9TUlIwLCAweGZmZjAwMTAwKTsKKwltdHNwcihTUFJOX1NSUjEsIE1TUl9JUCk7CisKKwkvKiBEbyBhbiByZmkgdG8ganVtcCBiYWNrIHRvIGZpcm13YXJlLiAgU29tZXdoYXQgZXZpbCwKKwkgKiBidXQgaXQgd29ya3MKKwkgKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmZpIiA6IDogOiAibWVtb3J5Iik7CisKKwkvKiBTcGluIHVudGlsIHJlc2V0IGhhcHBlbnMuICBTaG91bGRuJ3QgcmVhbGx5IGdldCBoZXJlICovCisJZm9yICg7OykgOworfQorCit2b2lkIGhvbGx5X3Bvd2VyX29mZih2b2lkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJLyogTm8gd2F5IHRvIHNodXQgcG93ZXIgb2ZmIHdpdGggc29mdHdhcmUgKi8KKwlmb3IgKDs7KSA7Cit9CisKK3ZvaWQgaG9sbHlfaGFsdCh2b2lkKQoreworCWhvbGx5X3Bvd2VyX29mZigpOworfQorCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGhvbGx5X3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKCFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImlibSxob2xseSIpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwcGM3NTBfbWFjaGluZV9jaGVja19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZW50cnk7CisKKwkvKiBBcmUgd2UgcHJlcGFyZWQgdG8gaGFuZGxlIHRoaXMgZmF1bHQgKi8KKwlpZiAoKGVudHJ5ID0gc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+bmlwKSkgIT0gTlVMTCkgeworCQl0c2kxMDhfY2xlYXJfcGNpX2NmZ19lcnJvcigpOworCQlyZWdzLT5tc3IgfD0gTVNSX1JJOworCQlyZWdzLT5uaXAgPSBlbnRyeS0+Zml4dXA7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworZGVmaW5lX21hY2hpbmUoaG9sbHkpeworCS5uYW1lICAgICAgICAgICAgICAgICAgIAk9ICJQUEM3NTAgR1gvQ0wgVFNJIiwKKwkucHJvYmUgICAgICAgICAgICAgICAgICAJPSBob2xseV9wcm9iZSwKKwkuc2V0dXBfYXJjaCAgICAgICAgICAgICAJPSBob2xseV9zZXR1cF9hcmNoLAorCS5pbml0X0lSUSAgICAgICAgICAgICAgIAk9IGhvbGx5X2luaXRfSVJRLAorCS5zaG93X2NwdWluZm8gICAgICAgICAgIAk9IGhvbGx5X3Nob3dfY3B1aW5mbywKKwkuZ2V0X2lycSAgICAgICAgICAgICAgICAJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQgICAgICAgICAgICAgICAgCT0gaG9sbHlfcmVzdGFydCwKKwkuY2FsaWJyYXRlX2RlY3IgICAgICAgICAJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5tYWNoaW5lX2NoZWNrX2V4Y2VwdGlvbgk9IHBwYzc1MF9tYWNoaW5lX2NoZWNrX2V4Y2VwdGlvbiwKKwkucHJvZ3Jlc3MgICAgICAgICAgICAgICAJPSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvbXBjNzQ0OF9ocGMyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jCmluZGV4IGMzZjY0ZGQuLjQ1NDJlMGM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvbXBjNzQ0OF9ocGMyLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxhc20vcmVnLmg+CiAjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KICNpbmNsdWRlICJtcGM3NDQ4X2hwYzIuaCIKKyNpbmNsdWRlIDxhc20vdHNpMTA4X3BjaS5oPgogI2luY2x1ZGUgPGFzbS90c2kxMDhfaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21waWMuaD4KIApAQCAtNTEsMTYgKzUyLDE1IEBACiAjZGVmaW5lIERCRyhmbXQuLi4pIGRvIHsgfSB3aGlsZSgwKQogI2VuZGlmCiAKKyNkZWZpbmUgTVBDNzQ0OEhQQzJfUENJX0NGR19QSFlTIDB4ZmIwMDAwMDAKKwogI2lmbmRlZiBDT05GSUdfUENJCiBpc2FfaW9fYmFzZSA9IE1QQzc0NDhfSFBDMl9JU0FfSU9fQkFTRTsKIGlzYV9tZW1fYmFzZSA9IE1QQzc0NDhfSFBDMl9JU0FfTUVNX0JBU0U7CiBwY2lfZHJhbV9vZmZzZXQgPSBNUEM3NDQ4X0hQQzJfUENJX01FTV9PRkZTRVQ7CiAjZW5kaWYKIAotZXh0ZXJuIGludCB0c2kxMDhfc2V0dXBfcGNpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KTsKIGV4dGVybiB2b2lkIF9ubWFza19hbmRfb3JfbXNyKHVuc2lnbmVkIGxvbmcgbm1hc2ssIHVuc2lnbmVkIGxvbmcgb3JfdmFsKTsKLWV4dGVybiB2b2lkIHRzaTEwOF9wY2lfaW50X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKLWV4dGVybiB2b2lkIHRzaTEwOF9pcnFfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwogCiBpbnQgbXBjNzQ0OF9ocGMyX2V4Y2x1ZGVfZGV2aWNlKHVfY2hhciBidXMsIHVfY2hhciBkZXZmbikKIHsKQEAgLTcyLDI4ICs3MiwxNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXBjNzQ0OF9ocGMyX3NldHVwX2FyY2godm9pZCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCWlmIChwcGNfbWQucHJvZ3Jlc3MpCiAJCXBwY19tZC5wcm9ncmVzcygibXBjNzQ0OF9ocGMyX3NldHVwX2FyY2goKTpzZXRfYnJpZGdlIiwgMCk7CiAKLQljcHUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7Ci0JaWYgKGNwdSAhPSAwKSB7Ci0JCWNvbnN0IHVuc2lnbmVkIGludCAqZnA7Ci0KLQkJZnAgPSBvZl9nZXRfcHJvcGVydHkoY3B1LCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7Ci0JCWlmIChmcCAhPSAwKQotCQkJbG9vcHNfcGVyX2ppZmZ5ID0gKmZwIC8gSFo7Ci0JCWVsc2UKLQkJCWxvb3BzX3Blcl9qaWZmeSA9IDUwMDAwMDAwIC8gSFo7Ci0JCW9mX25vZGVfcHV0KGNwdSk7Ci0JfQogCXRzaTEwOF9jc3JfdmlyX2Jhc2UgPSBnZXRfdmlyX2NzcmJhc2UoKTsKIAogCS8qIHNldHVwIFBDSSBob3N0IGJyaWRnZSAqLwogI2lmZGVmIENPTkZJR19QQ0kKIAlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobnAsICJwY2kiKSkgIT0gTlVMTDspCi0JCXRzaTEwOF9zZXR1cF9wY2kobnApOworCQl0c2kxMDhfc2V0dXBfcGNpKG5wLCBNUEM3NDQ4SFBDMl9QQ0lfQ0ZHX1BIWVMsIDApOwogCiAJcHBjX21kLnBjaV9leGNsdWRlX2RldmljZSA9IG1wYzc0NDhfaHBjMl9leGNsdWRlX2RldmljZTsKIAlpZiAocHBjX21kLnByb2dyZXNzKQpAQCAtMjIyLDcgKzIxMCw2IEBACiAKIHN0YXRpYyBpbnQgbXBjNzQ0OF9tYWNoaW5lX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlleHRlcm4gdm9pZCB0c2kxMDhfY2xlYXJfcGNpX2NmZ19lcnJvcih2b2lkKTsKIAljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICplbnRyeTsKIAogCS8qIEFyZSB3ZSBwcmVwYXJlZCB0byBoYW5kbGUgdGhpcyBmYXVsdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9wcnBtYzI4MDAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvcHJwbWMyODAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0MjA5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvcHJwbWMyODAwLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBCb2FyZCBzZXR1cCByb3V0aW5lcyBmb3IgdGhlIE1vdG9yb2xhIFByUE1DMjgwMAorICoKKyAqIEF1dGhvcjogRGFsZSBGYXJuc3dvcnRoIDxkYWxlQGZhcm5zd29ydGgub3JnPgorICoKKyAqIDIwMDcgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20va2V4ZWMuaD4KKworI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisKKyNpbmNsdWRlIDxzeXNkZXYvbXY2NHg2MC5oPgorCisjZGVmaW5lIE1WNjR4NjBfTVBQX0NOVExfMAkweDAwMDAKKyNkZWZpbmUgTVY2NHg2MF9NUFBfQ05UTF8yCTB4MDAwOAorCisjZGVmaW5lIE1WNjR4NjBfR1BQX0lPX0NOVEwJMHgwMDAwCisjZGVmaW5lIE1WNjR4NjBfR1BQX0xFVkVMX0NOVEwJMHgwMDEwCisjZGVmaW5lIE1WNjR4NjBfR1BQX1ZBTFVFX1NFVAkweDAwMTgKKworI2RlZmluZSBQTEFURk9STV9OQU1FX01BWAkzMgorCitzdGF0aWMgY2hhciBwcnBtYzI4MDBfcGxhdGZvcm1fbmFtZVtQTEFURk9STV9OQU1FX01BWF07CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm12NjR4NjBfbXBwX3JlZ19iYXNlOworc3RhdGljIHZvaWQgX19pb21lbSAqbXY2NHg2MF9ncHBfcmVnX2Jhc2U7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwcnBtYzI4MDBfc2V0dXBfYXJjaCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJcGh5c19hZGRyX3QgcGFkZHI7CisJY29uc3QgdW5zaWduZWQgaW50ICpyZWc7CisJY29uc3QgdW5zaWduZWQgaW50ICpwcm9wOworCisJLyoKKwkgKiBpb3JlbWFwIG1wcCBhbmQgZ3BwIHJlZ2lzdGVycyBpbiBjYXNlIHRoZXkgYXJlIGxhdGVyCisJICogbmVlZGVkIGJ5IHBycG1jMjgwMF9yZXNldF9ib2FyZCgpLgorCSAqLworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgIm1hcnZlbGwsbXY2NHg2MC1tcHAiKTsKKwlyZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKKwlwYWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCByZWcpOworCW9mX25vZGVfcHV0KG5wKTsKKwltdjY0eDYwX21wcF9yZWdfYmFzZSA9IGlvcmVtYXAocGFkZHIsIHJlZ1sxXSk7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJtYXJ2ZWxsLG12NjR4NjAtZ3BwIik7CisJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CisJcGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgcmVnKTsKKwlvZl9ub2RlX3B1dChucCk7CisJbXY2NHg2MF9ncHBfcmVnX2Jhc2UgPSBpb3JlbWFwKHBhZGRyLCByZWdbMV0pOworCisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7CisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOworCWlmIChwcm9wKQorCQlsb29wc19wZXJfamlmZnkgPSAqcHJvcCAvIEhaOworCW9mX25vZGVfcHV0KG5wKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKwltdjY0eDYwX3BjaV9pbml0KCk7CisjZW5kaWYKKworCXByaW50aygiTW90b3JvbGEgJXNcbiIsIHBycG1jMjgwMF9wbGF0Zm9ybV9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgcHJwbWMyODAwX3Jlc2V0X2JvYXJkKHZvaWQpCit7CisJdTMyIHRlbXA7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJdGVtcCA9IGluX2xlMzIobXY2NHg2MF9tcHBfcmVnX2Jhc2UgKyBNVjY0eDYwX01QUF9DTlRMXzApOworCXRlbXAgJj0gMHhGRkZGMEZGRjsKKwlvdXRfbGUzMihtdjY0eDYwX21wcF9yZWdfYmFzZSArIE1WNjR4NjBfTVBQX0NOVExfMCwgdGVtcCk7CisKKwl0ZW1wID0gaW5fbGUzMihtdjY0eDYwX2dwcF9yZWdfYmFzZSArIE1WNjR4NjBfR1BQX0xFVkVMX0NOVEwpOworCXRlbXAgfD0gMHgwMDAwMDAwNDsKKwlvdXRfbGUzMihtdjY0eDYwX2dwcF9yZWdfYmFzZSArIE1WNjR4NjBfR1BQX0xFVkVMX0NOVEwsIHRlbXApOworCisJdGVtcCA9IGluX2xlMzIobXY2NHg2MF9ncHBfcmVnX2Jhc2UgKyBNVjY0eDYwX0dQUF9JT19DTlRMKTsKKwl0ZW1wIHw9IDB4MDAwMDAwMDQ7CisJb3V0X2xlMzIobXY2NHg2MF9ncHBfcmVnX2Jhc2UgKyBNVjY0eDYwX0dQUF9JT19DTlRMLCB0ZW1wKTsKKworCXRlbXAgPSBpbl9sZTMyKG12NjR4NjBfbXBwX3JlZ19iYXNlICsgTVY2NHg2MF9NUFBfQ05UTF8yKTsKKwl0ZW1wICY9IDB4RkZGRjBGRkY7CisJb3V0X2xlMzIobXY2NHg2MF9tcHBfcmVnX2Jhc2UgKyBNVjY0eDYwX01QUF9DTlRMXzIsIHRlbXApOworCisJdGVtcCA9IGluX2xlMzIobXY2NHg2MF9ncHBfcmVnX2Jhc2UgKyBNVjY0eDYwX0dQUF9MRVZFTF9DTlRMKTsKKwl0ZW1wIHw9IDB4MDAwODAwMDA7CisJb3V0X2xlMzIobXY2NHg2MF9ncHBfcmVnX2Jhc2UgKyBNVjY0eDYwX0dQUF9MRVZFTF9DTlRMLCB0ZW1wKTsKKworCXRlbXAgPSBpbl9sZTMyKG12NjR4NjBfZ3BwX3JlZ19iYXNlICsgTVY2NHg2MF9HUFBfSU9fQ05UTCk7CisJdGVtcCB8PSAweDAwMDgwMDAwOworCW91dF9sZTMyKG12NjR4NjBfZ3BwX3JlZ19iYXNlICsgTVY2NHg2MF9HUFBfSU9fQ05UTCwgdGVtcCk7CisKKwlvdXRfbGUzMihtdjY0eDYwX2dwcF9yZWdfYmFzZSArIE1WNjR4NjBfR1BQX1ZBTFVFX1NFVCwgMHgwMDA4MDAwNCk7Cit9CisKK3N0YXRpYyB2b2lkIHBycG1jMjgwMF9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwl2b2xhdGlsZSB1bG9uZyBpID0gMTAwMDAwMDA7CisKKwlwcnBtYzI4MDBfcmVzZXRfYm9hcmQoKTsKKworCXdoaWxlIChpLS0gPiAwKTsKKwlwYW5pYygicmVzdGFydCBmYWlsZWRcbiIpOworfQorCisjaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQorI2RlZmluZSBQUFJQTTI4MDBfQ09IRVJFTkNZX1NFVFRJTkcgIm9mZiIKKyNlbHNlCisjZGVmaW5lIFBQUlBNMjgwMF9DT0hFUkVOQ1lfU0VUVElORyAib24iCisjZW5kaWYKKwordm9pZCBwcnBtYzI4MDBfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwl1aW50IG1lbXNpemUgPSB0b3RhbF9tZW1vcnk7CisKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBNb3Rvcm9sYVxuIik7CisJc2VxX3ByaW50ZihtLCAiTWVtb3J5XHRcdDogJWQgTUJcbiIsIG1lbXNpemUgLyAoMTAyNCAqIDEwMjQpKTsKKwlzZXFfcHJpbnRmKG0sICJjb2hlcmVuY3lcdDogJXNcbiIsIFBQUlBNMjgwMF9DT0hFUkVOQ1lfU0VUVElORyk7Cit9CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgcHJwbWMyODAwX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCXVuc2lnbmVkIGxvbmcgbGVuID0gUExBVEZPUk1fTkFNRV9NQVg7CisJdm9pZCAqbTsKKworCWlmICghb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJtb3Rvcm9sYSxQclBNQzI4MDAiKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBVcGRhdGUgcHBjX21kLm5hbWUgd2l0aCBuYW1lIGZyb20gZHQgKi8KKwltID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChyb290LCAibW9kZWwiLCAmbGVuKTsKKwlpZiAobSkKKwkJc3RybmNweShwcnBtYzI4MDBfcGxhdGZvcm1fbmFtZSwgbSwKKwkJCW1pbigoaW50KWxlbiwgUExBVEZPUk1fTkFNRV9NQVggLSAxKSk7CisKKwlyZXR1cm4gMTsKK30KKworZGVmaW5lX21hY2hpbmUocHJwbWMyODAwKXsKKwkubmFtZQkJCT0gcHJwbWMyODAwX3BsYXRmb3JtX25hbWUsCisJLnByb2JlCQkJPSBwcnBtYzI4MDBfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gcHJwbWMyODAwX3NldHVwX2FyY2gsCisJLnNob3dfY3B1aW5mbwkJPSBwcnBtYzI4MDBfc2hvd19jcHVpbmZvLAorCS5pbml0X0lSUQkJPSBtdjY0eDYwX2luaXRfaXJxLAorCS5nZXRfaXJxCQk9IG12NjR4NjBfZ2V0X2lycSwKKwkucmVzdGFydAkJPSBwcnBtYzI4MDBfcmVzdGFydCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKyNpZmRlZiBDT05GSUdfS0VYRUMKKwkubWFjaGluZV9rZXhlYwkJPSBkZWZhdWx0X21hY2hpbmVfa2V4ZWMsCisJLm1hY2hpbmVfa2V4ZWNfcHJlcGFyZQk9IGRlZmF1bHRfbWFjaGluZV9rZXhlY19wcmVwYXJlLAorCS5tYWNoaW5lX2NyYXNoX3NodXRkb3duCT0gZGVmYXVsdF9tYWNoaW5lX2NyYXNoX3NodXRkb3duLAorI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZwppbmRleCA0NmMzYThlLi43NjFkOWU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZwpAQCAtNyw3ICs3LDkgQEAKIAlkZXBlbmRzIG9uIFBQQ19JU0VSSUVTCiAKIGNvbmZpZyBWSU9DT05TCi0JdHJpc3RhdGUgImlTZXJpZXMgVmlydHVhbCBDb25zb2xlIFN1cHBvcnQgKE9ic29sZXRlKSIKKwlib29sICJpU2VyaWVzIFZpcnR1YWwgQ29uc29sZSBTdXBwb3J0IChPYnNvbGV0ZSkiCisJZGVwZW5kcyBvbiAhSFZDX0lTRVJJRVMKKwlkZWZhdWx0IG4KIAloZWxwCiAJICBUaGlzIGlzIHRoZSBvbGQgdmlydHVhbCBjb25zb2xlIGRyaXZlciBmb3IgbGVnYWN5IGlTZXJpZXMuCiAJICBZb3Ugc2hvdWxkIHVzZSB0aGUgaVNlcmllcyBIeXBlcnZpc29yIFZpcnR1YWwgQ29uc29sZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NtcC5jCmluZGV4IGFlZTU5MDguLjcyMjMzNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc21wLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpb3BhdGguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMKaW5kZXggMmNhMmQ4YS4uNmEwMDYwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpb3BhdGguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jCkBAIC0zNiw4ICszNiw4IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtODIsNyArODIsNyBAQAogICogaWYgc3lzdGVtX3N0YXRlIGlzIG5vdCBTWVNURU1fUlVOTklORywgdGhlbiB3YWl0X2F0b21pYyBpcyB1c2VkIC4uLgogICovCiBzdHJ1Y3QgYWxsb2NfcGFybXMgewotCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CiAJaW50IG51bWJlcjsKIAlhdG9taWNfdCB3YWl0X2F0b21pYzsKIAlpbnQgdXNlZF93YWl0X2F0b21pYzsKQEAgLTExNiw3ICsxMTYsNyBAQAogCXUxNiB2bGFuTWFwOwogCWRtYV9hZGRyX3QgaGFuZGxlOwogCUh2THBFdmVudF9SYyBodnJjOwotCURFQ0xBUkVfTVVURVhfTE9DS0VEKFNlbWFwaG9yZSk7CisJREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKIAljb25zdCBjaGFyICpzeXNpZDsKIApAQCAtMTMzLDEzICsxMzMsMTMgQEAKIAkJCUh2THBFdmVudF9BY2tJbmRfRG9BY2ssIEh2THBFdmVudF9BY2tUeXBlX0ltbWVkaWF0ZUFjaywKIAkJCXZpb3BhdGhfc291cmNlaW5zdCh2aW9wYXRoX2hvc3RMcCksCiAJCQl2aW9wYXRoX3RhcmdldGluc3QodmlvcGF0aF9ob3N0THApLAotCQkJKHU2NCkodW5zaWduZWQgbG9uZykmU2VtYXBob3JlLCBWSU9WRVJTSU9OIDw8IDE2LAorCQkJKHU2NCkodW5zaWduZWQgbG9uZykmZG9uZSwgVklPVkVSU0lPTiA8PCAxNiwKIAkJCSgodTY0KWhhbmRsZSkgPDwgMzIsIEhXX1BBR0VfU0laRSwgMCwgMCk7CiAKIAlpZiAoaHZyYyAhPSBIdkxwRXZlbnRfUmNfR29vZCkKIAkJcHJpbnRrKFZJT1BBVEhfS0VSTl9XQVJOICJodiBlcnJvciBvbiBvcCAlZFxuIiwgKGludClodnJjKTsKIAotCWRvd24oJlNlbWFwaG9yZSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CiAKIAl2bGFuTWFwID0gSHZMcENvbmZpZ19nZXRWaXJ0dWFsTGFuSW5kZXhNYXAoKTsKIApAQCAtMzU0LDcgKzM1NCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQl1cCgoc3RydWN0IHNlbWFwaG9yZSAqKWV2ZW50LT54Q29ycmVsYXRpb25Ub2tlbik7CisJY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uICopZXZlbnQtPnhDb3JyZWxhdGlvblRva2VuKTsKIH0KIAogLyoKQEAgLTQ2NSw3ICs0NjUsNyBAQAogCWlmIChwYXJtc3AtPnVzZWRfd2FpdF9hdG9taWMpCiAJCWF0b21pY19zZXQoJnBhcm1zcC0+d2FpdF9hdG9taWMsIDApOwogCWVsc2UKLQkJdXAoJnBhcm1zcC0+c2VtKTsKKwkJY29tcGxldGUoJnBhcm1zcC0+ZG9uZSk7CiB9CiAKIHN0YXRpYyBpbnQgYWxsb2NhdGVFdmVudHMoSHZMcEluZGV4IHJlbW90ZUxwLCBpbnQgbnVtRXZlbnRzKQpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJCWF0b21pY19zZXQoJnBhcm1zLndhaXRfYXRvbWljLCAxKTsKIAl9IGVsc2UgewogCQlwYXJtcy51c2VkX3dhaXRfYXRvbWljID0gMDsKLQkJaW5pdF9NVVRFWF9MT0NLRUQoJnBhcm1zLnNlbSk7CisJCWluaXRfY29tcGxldGlvbigmcGFybXMuZG9uZSk7CiAJfQogCW1mX2FsbG9jYXRlX2xwX2V2ZW50cyhyZW1vdGVMcCwgSHZMcEV2ZW50X1R5cGVfVmlydHVhbElvLCAyNTAsCS8qIEl0IHdvdWxkIGJlIG5pY2UgdG8gcHV0IGEgcmVhbCBudW1iZXIgaGVyZSEgKi8KIAkJCSAgICBudW1FdmVudHMsICZ2aW9wYXRoX2RvbmVhbGxvYywgJnBhcm1zKTsKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCQl3aGlsZSAoYXRvbWljX3JlYWQoJnBhcm1zLndhaXRfYXRvbWljKSkKIAkJCW1iKCk7CiAJfSBlbHNlCi0JCWRvd24oJnBhcm1zLnNlbSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnBhcm1zLmRvbmUpOwogCXJldHVybiBwYXJtcy5udW1iZXI7CiB9CiAKQEAgLTU4NiwxMCArNTg2LDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhdHVzbG9jaywgZmxhZ3MpOwogCiAJcGFybXMudXNlZF93YWl0X2F0b21pYyA9IDA7Ci0JaW5pdF9NVVRFWF9MT0NLRUQoJnBhcm1zLnNlbSk7CisJaW5pdF9jb21wbGV0aW9uKCZwYXJtcy5kb25lKTsKIAltZl9kZWFsbG9jYXRlX2xwX2V2ZW50cyhyZW1vdGVMcCwgSHZMcEV2ZW50X1R5cGVfVmlydHVhbElvLAogCQkJICAgICAgbnVtUmVxLCAmdmlvcGF0aF9kb25lYWxsb2MsICZwYXJtcyk7Ci0JZG93bigmcGFybXMuc2VtKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZwYXJtcy5kb25lKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdGF0dXNsb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMCwgbnVtT3BlbiA9IDA7IGkgPCBWSU9fTUFYX1NVQlRZUEVTOyBpKyspCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9wY2kuYwppbmRleCBiMWQzYjk5Li43YWFhNWJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMKQEAgLTQ2NywxNSArNDY3LDE1IEBACiAJaG9zZS0+bGFzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVsxXSA6IDB4ZmY7CiAKIAlkaXNwX25hbWUgPSBOVUxMOwotCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJ1My1hZ3AiKSkgeworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJ1My1hZ3AiKSkgewogCQlzZXR1cF91M19hZ3AoaG9zZSk7CiAJCWRpc3BfbmFtZSA9ICJVMy1BR1AiOwogCQlwcmltYXJ5ID0gMDsKLQl9IGVsc2UgaWYgKGRldmljZV9pc19jb21wYXRpYmxlKGRldiwgInUzLWh0IikpIHsKKwl9IGVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldiwgInUzLWh0IikpIHsKIAkJc2V0dXBfdTNfaHQoaG9zZSk7CiAJCWRpc3BfbmFtZSA9ICJVMy1IVCI7CiAJCXByaW1hcnkgPSAxOwotICAgICAgICB9IGVsc2UgaWYgKGRldmljZV9pc19jb21wYXRpYmxlKGRldiwgInU0LXBjaWUiKSkgeworICAgICAgICB9IGVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldiwgInU0LXBjaWUiKSkgewogICAgICAgICAgICAgICAgIHNldHVwX3U0X3BjaWUoaG9zZSk7CiAgICAgICAgICAgICAgICAgZGlzcF9uYW1lID0gIlU0LVBDSUUiOwogICAgICAgICAgICAgICAgIHByaW1hcnkgPSAwOwpAQCAtNTU2LDEyICs1NTYsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoc3RyY21wKG5wLT50eXBlLCAicGNpIikgJiYgc3RyY21wKG5wLT50eXBlLCAiaHQiKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKGRldmljZV9pc19jb21wYXRpYmxlKG5wLCAidTQtcGNpZSIpIHx8Ci0JCSAgICAgZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJ1My1hZ3AiKSkgJiYKKwkJaWYgKChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInU0LXBjaWUiKSB8fAorCQkgICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAidTMtYWdwIikpICYmCiAJCSAgICBhZGRfYnJpZGdlKG5wKSA9PSAwKQogCQkJb2Zfbm9kZV9nZXQobnApOwogCi0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInUzLWh0IikpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAidTMtaHQiKSkgewogCQkJb2Zfbm9kZV9nZXQobnApOwogCQkJaHQgPSBucDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jCmluZGV4IDJhMzBjNWIuLjM1NGMwNTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3NldHVwLmMKQEAgLTIzMSw3ICsyMzEsNyBAQAogCSAqLwogCiAJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiKQotCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJvcGVuLXBpYyIpKSB7CisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgIm9wZW4tcGljIikpIHsKIAkJCW1waWNfbm9kZSA9IG5wOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9LY29uZmlnCmluZGV4IGViNGRiYzcuLjdjNTA3NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvS2NvbmZpZwpAQCAtNCw3ICs0LDYgQEAKIAlkZWZhdWx0IG4KIAlzZWxlY3QgTVBJQwogCXNlbGVjdCBQUENfVURCR18xNjU1MAotCXNlbGVjdCBHRU5FUklDX1RCU1lOQwogCXNlbGVjdCBQUENfTkFUSVZFCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBQQSBTZW1pJ3MgUFdSZmljaWVudCBsaW5lCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9jcHVmcmVxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9jcHVmcmVxLmMKaW5kZXggMmE1N2Q2MC4uM2FlMDgzOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvY3B1ZnJlcS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2NwdWZyZXEuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKICNkZWZpbmUgU0RDQVNSX1JFRwkJMHgwMTAwCiAjZGVmaW5lIFNEQ0FTUl9SRUdfU1RSSURFCTB4MTAwMApAQCAtMjA0LDYgKzIwNSw4IEBACiAJcG9saWN5LT5jdXIgPSBwYXNfZnJlcXNbY3VyX2FzdGF0ZV0uZnJlcXVlbmN5OwogCXBvbGljeS0+Y3B1cyA9IGNwdV9vbmxpbmVfbWFwOwogCisJcHBjX3Byb2NfZnJlcSA9IHBvbGljeS0+Y3VyICogMTAwMHVsOworCiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIocGFzX2ZyZXFzLCBwb2xpY3ktPmNwdSk7CiAKIAkvKiB0aGlzIGVuc3VyZXMgdGhhdCBwb2xpY3ktPmNwdWluZm9fbWluIGFuZCBwb2xpY3ktPmNwdWluZm9fbWF4CkBAIC0yNzAsNiArMjczLDcgQEAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKIAltdXRleF91bmxvY2soJnBhc19zd2l0Y2hfbXV0ZXgpOwogCisJcHBjX3Byb2NfZnJlcSA9IGZyZXFzLm5ldyAqIDEwMDB1bDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaWRsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaWRsZS5jCmluZGV4IDU5ODVjZTAuLjNjOTYyZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lkbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pZGxlLmMKQEAgLTIyLDkgKzIyLDExIEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogI2luY2x1ZGUgInBhc2VtaS5oIgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3BjaS5jCmluZGV4IDA1NjI0M2QuLmJiYzZkZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3BjaS5jCkBAIC0xNzMsMTkgKzE3Myw2IEBACiB9CiAKIAotdm9pZCBfX2RldmluaXQgcGFzX3BjaV9pcnFfZml4dXAoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQkvKiBETUEgaXMgc3BlY2lhbCwgODQgaW50ZXJydXB0cyAoMTI4IC0+IDIxMSksIGFsbCBidXQgMTI4Ci0JICogbmVlZCB0byBiZSBtYXBwZWQgYnkgaGFuZCBoZXJlLgotCSAqLwotCWlmIChkZXYtPnZlbmRvciA9PSAweDE5NTkgJiYgZGV2LT5kZXZpY2UgPT0gMHhhMDA3KSB7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAxMjk7IGkgPCAyMTI7IGkrKykKLQkJCWlycV9jcmVhdGVfbWFwcGluZyhOVUxMLCBpKTsKLQl9Ci19Ci0KLQogdm9pZCBfX2luaXQgcGFzX3BjaV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCwgKnJvb3Q7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvc2V0dXAuYwppbmRleCBmODhmMGVjLi5jNWEzZjYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3NldHVwLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCW1waWNfbm9kZSA9IE5VTEw7CiAKIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpCi0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgIm9wZW4tcGljIikpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAib3Blbi1waWMiKSkgewogCQkJbXBpY19ub2RlID0gbnA7CiAJCQlicmVhazsKIAkJfQpAQCAtMjExLDcgKzIxMSwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwYXNlbWlfcHVibGlzaF9kZXZpY2VzKHZvaWQpCiB7Ci0JLyogUHVibGlzaCBPRiBwbGF0Zm9ybSBkZXZpY2VzIGZvciBzb3V0aGJyaWRnZSBJT3MgKi8KKwlpZiAoIW1hY2hpbmVfaXMocGFzZW1pKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBQdWJsaXNoIE9GIHBsYXRmb3JtIGRldmljZXMgZm9yIFNEQyBhbmQgb3RoZXIgbm9uLVBDSSBkZXZpY2VzICovCiAJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIHBhc2VtaV9idXNfaWRzLCBOVUxMKTsKIAogCXJldHVybiAwOwpAQCAtMjQ4LDUgKzI1MSw0IEBACiAJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiAJLnByb2dyZXNzCQk9IHBhc19wcm9ncmVzcywKIAkubWFjaGluZV9jaGVja19leGNlcHRpb24gPSBwYXNfbWFjaGluZV9jaGVja19oYW5kbGVyLAotCS5wY2lfaXJxX2ZpeHVwCQk9IHBhc19wY2lfaXJxX2ZpeHVwLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMKaW5kZXggNTY3ZDU1Mi4uMDBmNTAyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMKQEAgLTM1NywxMyArMzU3LDEzIEBACiAKIHN0YXRpYyBpbnQgZzVfY3B1ZnJlcV9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQlpZiAocG9saWN5LT5jcHUgIT0gMCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlwb2xpY3ktPmdvdmVybm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSBDUFVGUkVRX0VURVJOQUw7CiAJcG9saWN5LT5jdXIgPSBnNV9jcHVfZnJlcXNbZzVfcXVlcnlfZnJlcSgpXS5mcmVxdWVuY3k7Ci0JcG9saWN5LT5jcHVzID0gY3B1X3Bvc3NpYmxlX21hcDsKKwkvKiBzZWNvbmRhcnkgQ1BVcyBhcmUgdGllZCB0byB0aGUgcHJpbWFyeSBvbmUgYnkgdGhlCisJICogY3B1ZnJlcSBjb3JlIGlmIGluIHRoZSBzZWNvbmRhcnkgcG9saWN5IHdlIHRlbGwgaXQgdGhhdAorCSAqIGl0IGFjdHVhbGx5IG11c3QgYmUgb25lIHBvbGljeSB0b2dldGhlciB3aXRoIGFsbCBvdGhlcnMuICovCisJcG9saWN5LT5jcHVzID0gY3B1X29ubGluZV9tYXA7CiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoZzVfY3B1X2ZyZXFzLCBwb2xpY3ktPmNwdSk7CiAKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCmluZGV4IDUyY2ZkZDguLmYyOTcwNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jCkBAIC0xNDE4LDcgKzE0MTgsNyBAQAogCXBoeSA9IG9mX2dldF9uZXh0X2NoaWxkKG5vZGUsIE5VTEwpOwogCWlmICghcGh5KQogCQlyZXR1cm4gLUVOT0RFVjsKLQluZWVkX3Jlc2V0ID0gZGV2aWNlX2lzX2NvbXBhdGlibGUocGh5LCAiQjUyMjEiKTsKKwluZWVkX3Jlc2V0ID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGh5LCAiQjUyMjEiKTsKIAlvZl9ub2RlX3B1dChwaHkpOwogCWlmICghbmVlZF9yZXNldCkKIAkJcmV0dXJuIDA7CkBAIC0yNjI0LDcgKzI2MjQsNyBAQAogCWZvciAobm9kZSA9IE5VTEw7IChub2RlID0gb2ZfZmluZF9ub2RlX2J5X25hbWUobm9kZSwgbmFtZSkpICE9IE5VTEw7KSB7CiAJCWlmICghY29tcGF0KQogCQkJYnJlYWs7Ci0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCBjb21wYXQpKQorCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgY29tcGF0KSkKIAkJCWJyZWFrOwogCX0KIAlpZiAoIW5vZGUpCkBAIC0yNzI4LDcgKzI3MjgsNyBAQAogCWNvbm4gPSBvZl9nZXRfcHJvcGVydHkobnAsICJBQVBMLGNvbm5lY3RvciIsICZsZW4pOwogCWlmIChjb25uICYmIChzdHJjbXAoY29ubiwgImluZnJhcmVkIikgPT0gMCkpCiAJCXBvcnRfdHlwZSA9IFBNQUNfU0NDX0lSREE7Ci0JZWxzZSBpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJjb2JhbHQiKSkKKwllbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImNvYmFsdCIpKQogCQltb2RlbSA9IDE7CiAJZWxzZSBpZiAoc2xvdHMgJiYgc2xvdHMtPmNvdW50ID4gMCkgewogCQlpZiAoc3RyY21wKHNsb3RzLT5uYW1lLCAiSXJEQSIpID09IDApCkBAIC0yNzg3LDcgKzI3ODcsNyBAQAogCQkgKi8KIAkJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiZXRoZXJuZXQiKTsKIAkJd2hpbGUobnApIHsKLQkJCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgIksyLUdNQUMiKSkKKwkJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgIksyLUdNQUMiKSkKIAkJCQlnNV9nbWFjX2VuYWJsZShucCwgMCwgMSk7CiAJCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKG5wLCAiZXRoZXJuZXQiKTsKIAkJfQpAQCAtMjc5OSw3ICsyNzk5LDcgQEAKIAkJICovCiAJCW5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImZpcmV3aXJlIik7CiAJCXdoaWxlKG5wKSB7Ci0JCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJwY2kxMDZiLDU4MTEiKSkgeworCQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAicGNpMTA2Yiw1ODExIikpIHsKIAkJCQltYWNpb19jaGlwc1swXS5mbGFncyB8PSBNQUNJT19GTEFHX0ZXX1NVUFBPUlRFRDsKIAkJCQlnNV9md19lbmFibGUobnAsIDAsIDEpOwogCQkJfQpAQCAtMjgxNyw4ICsyODE3LDggQEAKIAkJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiZXRoZXJuZXQiKTsKIAkJd2hpbGUobnApIHsKIAkJCWlmIChucC0+cGFyZW50Ci0JCQkgICAgJiYgZGV2aWNlX2lzX2NvbXBhdGlibGUobnAtPnBhcmVudCwgInVuaS1ub3J0aCIpCi0JCQkgICAgJiYgZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJnbWFjIikpCisJCQkgICAgJiYgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAtPnBhcmVudCwgInVuaS1ub3J0aCIpCisJCQkgICAgJiYgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJnbWFjIikpCiAJCQkJY29yZTk5X2dtYWNfZW5hYmxlKG5wLCAwLCAxKTsKIAkJCW5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUobnAsICJldGhlcm5ldCIpOwogCQl9CkBAIC0yODMxLDEwICsyODMxLDEwIEBACiAJCW5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImZpcmV3aXJlIik7CiAJCXdoaWxlKG5wKSB7CiAJCQlpZiAobnAtPnBhcmVudAotCQkJICAgICYmIGRldmljZV9pc19jb21wYXRpYmxlKG5wLT5wYXJlbnQsICJ1bmktbm9ydGgiKQotCQkJICAgICYmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInBjaTEwNmIsMTgiKSB8fAotCQkJICAgICAgICBkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInBjaTEwNmIsMzAiKSB8fAotCQkJICAgICAgICBkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInBjaTExYzEsNTgxMSIpKSkgeworCQkJICAgICYmIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLT5wYXJlbnQsICJ1bmktbm9ydGgiKQorCQkJICAgICYmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInBjaTEwNmIsMTgiKSB8fAorCQkJICAgICAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInBjaTEwNmIsMzAiKSB8fAorCQkJICAgICAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInBjaTExYzEsNTgxMSIpKSkgewogCQkJCW1hY2lvX2NoaXBzWzBdLmZsYWdzIHw9IE1BQ0lPX0ZMQUdfRldfU1VQUE9SVEVEOwogCQkJCWNvcmU5OV9maXJld2lyZV9lbmFibGUobnAsIDAsIDEpOwogCQkJfQpAQCAtMjg0NSw4ICsyODQ1LDggQEAKIAkJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiYXRhLTYiKTsKIAkJd2hpbGUobnApIHsKIAkJCWlmIChucC0+cGFyZW50Ci0JCQkgICAgJiYgZGV2aWNlX2lzX2NvbXBhdGlibGUobnAtPnBhcmVudCwgInVuaS1ub3J0aCIpCi0JCQkgICAgJiYgZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJrYXVhaS1hdGEiKSkgeworCQkJICAgICYmIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLT5wYXJlbnQsICJ1bmktbm9ydGgiKQorCQkJICAgICYmIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAia2F1YWktYXRhIikpIHsKIAkJCQljb3JlOTlfYXRhMTAwX2VuYWJsZShucCwgMSk7CiAJCQl9CiAJCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKG5wLCAiYXRhLTYiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKaW5kZXggNTQzMGUxNC4uM2Y1MDdhYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKQEAgLTEyMDcsNyArMTIwNyw3IEBACiAJCQkJaWYgKHN0cmNtcChucC0+bmFtZSwgcC0+bmFtZSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChwLT5jb21wYXRpYmxlICYmCi0JCQkJICAgICFkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgcC0+Y29tcGF0aWJsZSkpCisJCQkJICAgICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgcC0+Y29tcGF0aWJsZSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChwLT5xdWlya3MgJiBwbWFjX2kyY19xdWlya19za2lwKQogCQkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYwppbmRleCA2OTI5NDVjLi5jNmYwZjllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9udnJhbS5jCkBAIC01NTMsNyArNTUzLDcgQEAKIAkgKiBpZGVudGlmeSB0aGUgY2hpcCB1c2luZyBmbGFzaCBpZCBjb21tYW5kcyBhbmQgYmFzZSBvdXJzZWx2ZXMgb24KIAkgKiBhIGxpc3Qgb2Yga25vd24gY2hpcHMgSURzCiAJICovCi0JaWYgKGRldmljZV9pc19jb21wYXRpYmxlKGRwLCAiYW1kLTAxMzciKSkgeworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkcCwgImFtZC0wMTM3IikpIHsKIAkJY29yZTk5X2VyYXNlX2JhbmsgPSBhbWRfZXJhc2VfYmFuazsKIAkJY29yZTk5X3dyaXRlX2JhbmsgPSBhbWRfd3JpdGVfYmFuazsKIAl9IGVsc2UgewpAQCAtNTg4LDcgKzU4OCw3IEBACiAJCX0KIAl9CiAKLQlpc19jb3JlXzk5ID0gZGV2aWNlX2lzX2NvbXBhdGlibGUoZHAsICJudnJhbSxmbGFzaCIpOworCWlzX2NvcmVfOTkgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkcCwgIm52cmFtLGZsYXNoIik7CiAJaWYgKGlzX2NvcmVfOTkpIHsKIAkJZXJyID0gY29yZTk5X252cmFtX3NldHVwKGRwLCByMS5zdGFydCk7CiAJCWdvdG8gYmFpbDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCmluZGV4IDIyYzRhZTQuLmM0YWY5ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwpAQCAtOTM0LDE1ICs5MzQsMTUgQEAKIAogCS8qIDY0IGJpdHMgb25seSBicmlkZ2VzICovCiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0JaWYgKGRldmljZV9pc19jb21wYXRpYmxlKGRldiwgInUzLWFncCIpKSB7CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldiwgInUzLWFncCIpKSB7CiAJCXNldHVwX3UzX2FncChob3NlKTsKIAkJZGlzcF9uYW1lID0gIlUzLUFHUCI7CiAJCXByaW1hcnkgPSAwOwotCX0gZWxzZSBpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LCAidTMtaHQiKSkgeworCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LCAidTMtaHQiKSkgewogCQlzZXR1cF91M19odChob3NlKTsKIAkJZGlzcF9uYW1lID0gIlUzLUhUIjsKIAkJcHJpbWFyeSA9IDE7Ci0JfSBlbHNlIGlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJ1NC1wY2llIikpIHsKKwl9IGVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldiwgInU0LXBjaWUiKSkgewogCQlzZXR1cF91NF9wY2llKGhvc2UpOwogCQlkaXNwX25hbWUgPSAiVTQtUENJRSI7CiAJCXByaW1hcnkgPSAwOwpAQCAtOTUzLDcgKzk1Myw3IEBACiAKIAkvKiAzMiBiaXRzIG9ubHkgYnJpZGdlcyAqLwogI2lmZGVmIENPTkZJR19QUEMzMgotCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJ1bmktbm9ydGgiKSkgeworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJ1bmktbm9ydGgiKSkgewogCQlwcmltYXJ5ID0gc2V0dXBfdW5pbm9ydGgoaG9zZSwgJnJzcmMpOwogCQlkaXNwX25hbWUgPSAiVW5pTm9ydGgiOwogCX0gZWxzZSBpZiAoc3RyY21wKGRldi0+bmFtZSwgInBjaSIpID09IDApIHsKQEAgLTExMjksMjEgKzExMjksMjEgQEAKIAkJcmV0dXJuIDA7CiAKIAl1bmlub3J0aF9jaGlsZCA9IG5vZGUtPnBhcmVudCAmJgotCQlkZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLT5wYXJlbnQsICJ1bmktbm9ydGgiKTsKKwkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZS0+cGFyZW50LCAidW5pLW5vcnRoIik7CiAKIAkvKiBGaXJld2lyZSAmIEdNQUMgd2VyZSBkaXNhYmxlZCBhZnRlciBQQ0kgcHJvYmUsIHRoZSBkcml2ZXIgaXMKIAkgKiBjbGFpbWluZyB0aGVtLCB3ZSBtdXN0IHJlLWVuYWJsZSB0aGVtIG5vdy4KIAkgKi8KIAlpZiAodW5pbm9ydGhfY2hpbGQgJiYgIXN0cmNtcChub2RlLT5uYW1lLCAiZmlyZXdpcmUiKSAmJgotCSAgICAoZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInBjaTEwNmIsMTgiKSB8fAotCSAgICAgZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInBjaTEwNmIsMzAiKSB8fAotCSAgICAgZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInBjaTExYzEsNTgxMSIpKSkgeworCSAgICAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInBjaTEwNmIsMTgiKSB8fAorCSAgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInBjaTEwNmIsMzAiKSB8fAorCSAgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInBjaTExYzEsNTgxMSIpKSkgewogCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl8xMzk0X0NBQkxFX1BPV0VSLCBub2RlLCAwLCAxKTsKIAkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfMTM5NF9FTkFCTEUsIG5vZGUsIDAsIDEpOwogCQl1cGRhdGVjZmcgPSAxOwogCX0KIAlpZiAodW5pbm9ydGhfY2hpbGQgJiYgIXN0cmNtcChub2RlLT5uYW1lLCAiZXRoZXJuZXQiKSAmJgotCSAgICBkZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCAiZ21hYyIpKSB7CisJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5vZGUsICJnbWFjIikpIHsKIAkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfR01BQ19FTkFCTEUsIG5vZGUsIDAsIDEpOwogCQl1cGRhdGVjZmcgPSAxOwogCX0KQEAgLTEyMDMsMTggKzEyMDMsMTggQEAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREUgKi8KIAogCWZvcl9lYWNoX25vZGVfYnlfbmFtZShuZCwgImZpcmV3aXJlIikgewotCQlpZiAobmQtPnBhcmVudCAmJiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobmQsICJwY2kxMDZiLDE4IikgfHwKLQkJCQkgICBkZXZpY2VfaXNfY29tcGF0aWJsZShuZCwgInBjaTEwNmIsMzAiKSB8fAotCQkJCSAgIGRldmljZV9pc19jb21wYXRpYmxlKG5kLCAicGNpMTFjMSw1ODExIikpCi0JCSAgICAmJiBkZXZpY2VfaXNfY29tcGF0aWJsZShuZC0+cGFyZW50LCAidW5pLW5vcnRoIikpIHsKKwkJaWYgKG5kLT5wYXJlbnQgJiYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5kLCAicGNpMTA2YiwxOCIpIHx8CisJCQkJICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobmQsICJwY2kxMDZiLDMwIikgfHwKKwkJCQkgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShuZCwgInBjaTExYzEsNTgxMSIpKQorCQkgICAgJiYgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobmQtPnBhcmVudCwgInVuaS1ub3J0aCIpKSB7CiAJCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl8xMzk0X0VOQUJMRSwgbmQsIDAsIDApOwogCQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfMTM5NF9DQUJMRV9QT1dFUiwgbmQsIDAsIDApOwogCQl9CiAJfQogCW9mX25vZGVfcHV0KG5kKTsKIAlmb3JfZWFjaF9ub2RlX2J5X25hbWUobmQsICJldGhlcm5ldCIpIHsKLQkJaWYgKG5kLT5wYXJlbnQgJiYgZGV2aWNlX2lzX2NvbXBhdGlibGUobmQsICJnbWFjIikKLQkJICAgICYmIGRldmljZV9pc19jb21wYXRpYmxlKG5kLT5wYXJlbnQsICJ1bmktbm9ydGgiKSkKKwkJaWYgKG5kLT5wYXJlbnQgJiYgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobmQsICJnbWFjIikKKwkJICAgICYmIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5kLT5wYXJlbnQsICJ1bmktbm9ydGgiKSkKIAkJCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0dNQUNfRU5BQkxFLCBuZCwgMCwgMCk7CiAJfQogCW9mX25vZGVfcHV0KG5kKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCmluZGV4IGFlNTA5N2EuLjg3Y2Q2ODA1MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIAkJc2xhdmUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShtYXN0ZXIsICJtYWMtaW8iKTsKIAogCQkvKiBDaGVjayBvcmRlcmluZyBvZiBtYXN0ZXIgJiBzbGF2ZSAqLwotCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobWFzdGVyLCAiZ2F0d2ljayIpKSB7CisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShtYXN0ZXIsICJnYXR3aWNrIikpIHsKIAkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdG1wOwogCQkJQlVHX09OKHNsYXZlID09IE5VTEwpOwogCQkJdG1wID0gbWFzdGVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCmluZGV4IGI4MjBjYWIuLjA3YjFjNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKQEAgLTM4NCw3ICszODQsNyBAQAogc3RhdGljIGRldl90IGJvb3RfZGV2OwogCiAjaWZkZWYgQ09ORklHX1NDU0kKLXZvaWQgX19pbml0IG5vdGVfc2NzaV9ob3N0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgdm9pZCAqaG9zdCkKK3ZvaWQgbm90ZV9zY3NpX2hvc3Qoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCB2b2lkICpob3N0KQogewogCWludCBsOwogCWNoYXIgKnA7CkBAIC00MzksNzYgKzQzOSwxNCBAQAogI2VuZGlmCiB9CiAKLS8qIFRPRE86IE1lcmdlIHRoZSBzdXNwZW5kLXRvLXJhbSB3aXRoIHRoZSBjb21tb24gY29kZSAhISEKLSAqIGN1cnJlbnRseSwgdGhpcyBpcyBhIHN0dWIgaW1wbGVtZW50YXRpb24gZm9yIHN1c3BlbmQtdG8tZGlzawotICogb25seQotICovCi0KLSNpZmRlZiBDT05GSUdfU09GVFdBUkVfU1VTUEVORAotCi1zdGF0aWMgaW50IHBtYWNfcG1fcHJlcGFyZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBzdGF0ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwbWFjX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXRlKTsKLQotCS8qIEdpdmV1cCB0aGUgbGF6eSBGUFUgJiB2ZWMgc28gd2UgZG9uJ3QgaGF2ZSB0byBiYWNrIHRoZW0KLQkgKiB1cCBmcm9tIHRoZSBsb3cgbGV2ZWwgY29kZQotCSAqLwotCWVuYWJsZV9rZXJuZWxfZnAoKTsKLQotI2lmZGVmIENPTkZJR19BTFRJVkVDCi0JaWYgKGN1cl9jcHVfc3BlYy0+Y3B1X2ZlYXR1cmVzICYgQ1BVX0ZUUl9BTFRJVkVDKQotCQllbmFibGVfa2VybmVsX2FsdGl2ZWMoKTsKLSNlbmRpZiAvKiBDT05GSUdfQUxUSVZFQyAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcG1hY19wbV9maW5pc2goc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQotewotCXByaW50ayhLRVJOX0RFQlVHICIlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgc3RhdGUpOwotCi0JLyogUmVzdG9yZSB1c2VybGFuZCBNTVUgY29udGV4dCAqLwotCXNldF9jb250ZXh0KGN1cnJlbnQtPmFjdGl2ZV9tbS0+Y29udGV4dC5pZCwgY3VycmVudC0+YWN0aXZlX21tLT5wZ2QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcG1hY19wbV92YWxpZChzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCi17Ci0Jc3dpdGNoIChzdGF0ZSkgewotCWNhc2UgUE1fU1VTUEVORF9ESVNLOgotCQlyZXR1cm4gMTsKLQkvKiBjYW4ndCBkbyBhbnkgb3RoZXIgc3RhdGVzIHZpYSBnZW5lcmljIG1lY2hhbmlzbSB5ZXQgKi8KLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcG1fb3BzIHBtYWNfcG1fb3BzID0gewotCS5wbV9kaXNrX21vZGUJPSBQTV9ESVNLX1NIVVRET1dOLAotCS5wcmVwYXJlCT0gcG1hY19wbV9wcmVwYXJlLAotCS5lbnRlcgkJPSBwbWFjX3BtX2VudGVyLAotCS5maW5pc2gJCT0gcG1hY19wbV9maW5pc2gsCi0JLnZhbGlkCQk9IHBtYWNfcG1fdmFsaWQsCi19OwotCi0jZW5kaWYgLyogQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQgKi8KLQogc3RhdGljIGludCBpbml0aWFsaXppbmcgPSAxOwogCiBzdGF0aWMgaW50IHBtYWNfbGF0ZV9pbml0KHZvaWQpCiB7CiAJaW5pdGlhbGl6aW5nID0gMDsKLSNpZmRlZiBDT05GSUdfU09GVFdBUkVfU1VTUEVORAotCXBtX3NldF9vcHMoJnBtYWNfcG1fb3BzKTsKLSNlbmRpZiAvKiBDT05GSUdfU09GVFdBUkVfU1VTUEVORCAqLworCS8qIHRoaXMgaXMgdWRiZyAod2hpY2ggaXMgX19pbml0KSBhbmQgd2UgY2FuIGxhdGVyIHVzZSBpdCBkdXJpbmcKKwkgKiBjcHUgaG90cGx1ZyAoaW4gc21wX2NvcmU5OV9raWNrX2NwdSkgKi8KKwlwcGNfbWQucHJvZ3Jlc3MgPSBOVUxMOwogCXJldHVybiAwOwogfQogCkBAIC03MjEsMTIgKzY1OSw1NyBAQAogCS8qIFdlIG5lZWQgdG8gdXNlIG5vcm1hbCBQQ0kgcHJvYmluZyBmb3IgdGhlIEFHUCBidXMsCiAJICogc2luY2UgdGhlIGRldmljZSBmb3IgdGhlIEFHUCBicmlkZ2UgaXNuJ3QgaW4gdGhlIHRyZWUuCiAJICovCi0JaWYgKGJ1cy0+c2VsZiA9PSBOVUxMICYmIChkZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCAidTMtYWdwIikgfHwKLQkJCQkgIGRldmljZV9pc19jb21wYXRpYmxlKG5vZGUsICJ1NC1wY2llIikpKQorCWlmIChidXMtPnNlbGYgPT0gTlVMTCAmJiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgInUzLWFncCIpIHx8CisJCQkJICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCAidTQtcGNpZSIpKSkKIAkJcmV0dXJuIFBDSV9QUk9CRV9OT1JNQUw7CiAJcmV0dXJuIFBDSV9QUk9CRV9ERVZUUkVFOwogfQotI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKy8qIGFjY2VzcyBwZXIgY3B1IHZhcnMgZnJvbSBnZW5lcmljIHNtcC5jICovCitERUNMQVJFX1BFUl9DUFUoaW50LCBjcHVfc3RhdGUpOworCitzdGF0aWMgdm9pZCBwbWFjX2NwdV9kaWUodm9pZCkKK3sKKwkvKgorCSAqIHR1cm4gb2ZmIGFzIG11Y2ggYXMgcG9zc2libGUsIHdlJ2xsIGJlCisJICoga2lja2VkIG91dCBhcyB0aGlzIHdpbGwgb25seSBiZSBpbnZva2VkCisJICogb24gY29yZTk5IHBsYXRmb3JtcyBmb3Igbm93IC4uLgorCSAqLworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIyVkIG9mZmxpbmVcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJX19nZXRfY3B1X3ZhcihjcHVfc3RhdGUpID0gQ1BVX0RFQUQ7CisJc21wX3dtYigpOworCisJLyoKKwkgKiBkdXJpbmcgdGhlIHBhdGggdGhhdCBsZWFkcyBoZXJlIHByZWVtcHRpb24gaXMgZGlzYWJsZWQsCisJICogcmVlbmFibGUgaXQgbm93IHNvIHRoYXQgd2hlbiBjb21pbmcgdXAgcHJlZW1wdCBjb3VudCBpcworCSAqIHplcm8gY29ycmVjdGx5CisJICovCisJcHJlZW1wdF9lbmFibGUoKTsKKworCS8qCisJICogaGFyZC1kaXNhYmxlIGludGVycnVwdHMgZm9yIHRoZSBub24tTkFQIGNhc2UsIHRoZSBOQVAgY29kZQorCSAqIG5lZWRzIHRvIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIChidXQgc29mdC1kaXNhYmxlcyB0aGVtKQorCSAqLworCWhhcmRfaXJxX2Rpc2FibGUoKTsKKworCXdoaWxlICgxKSB7CisJCS8qIGxldCdzIG5vdCB0YWtlIHRpbWVyIGludGVycnVwdHMgdG9vIG9mdGVuIC4uLiAqLworCQlzZXRfZGVjKDB4N2ZmZmZmZmYpOworCisJCS8qIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSBhdCB0aGlzIHBvaW50ICovCisJCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DQU5fTkFQKSkKKwkJCXBvd2VyNF9jcHVfb2ZmbGluZV9wb3dlcnNhdmUoKTsKKwkJZWxzZSB7CisJCQlITVRfbG93KCk7CisJCQlITVRfdmVyeV9sb3coKTsKKwkJfQorCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KKworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiBkZWZpbmVfbWFjaGluZShwb3dlcm1hYykgewogCS5uYW1lCQkJPSAiUG93ZXJNYWMiLApAQCAtNzYzLDYgKzc0Niw2IEBACiAJLnBoeXNfbWVtX2FjY2Vzc19wcm90CT0gcGNpX3BoeXNfbWVtX2FjY2Vzc19wcm90LAogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpICYmIGRlZmluZWQoQ09ORklHX1BQQzY0KQotCS5jcHVfZGllCQk9IGdlbmVyaWNfbWFjaF9jcHVfZGllLAorCS5jcHVfZGllCQk9IHBtYWNfY3B1X2RpZSwKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCmluZGV4IDZmMzJjNGUuLjY4NmVkODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC01NjIsNyArNTYxLDcgQEAKIAkvKiBMb29rIGZvciB0aGUgY2xvY2sgY2hpcCAqLwogCXdoaWxlICgoY2MgPSBvZl9maW5kX25vZGVfYnlfbmFtZShjYywgImkyYy1od2Nsb2NrIikpICE9IE5VTEwpIHsKIAkJcCA9IG9mX2dldF9wYXJlbnQoY2MpOwotCQlvayA9IHAgJiYgZGV2aWNlX2lzX2NvbXBhdGlibGUocCwgInVuaS1uLWkyYyIpOworCQlvayA9IHAgJiYgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocCwgInVuaS1uLWkyYyIpOwogCQlvZl9ub2RlX3B1dChwKTsKIAkJaWYgKCFvaykKIAkJCWNvbnRpbnVlOwpAQCAtNTc1LDExICs1NzQsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQlzd2l0Y2ggKCpyZWcpIHsKIAkJY2FzZSAweGQyOgotCQkJaWYgKGRldmljZV9pc19jb21wYXRpYmxlKGNjLCJwdWxzYXItbGVnYWN5LXNsZXdpbmciKSkgeworCQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNjLCJwdWxzYXItbGVnYWN5LXNsZXdpbmciKSkgewogCQkJCXBtYWNfdGJfZnJlZXplID0gc21wX2NvcmU5OV9wdWxzYXJfdGJfZnJlZXplOwogCQkJCXBtYWNfdGJfcHVsc2FyX2FkZHIgPSAweGQyOwogCQkJCW5hbWUgPSAiUHVsc2FyIjsKLQkJCX0gZWxzZSBpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUoY2MsICJjeTI4NTA4IikpIHsKKwkJCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2MsICJjeTI4NTA4IikpIHsKIAkJCQlwbWFjX3RiX2ZyZWV6ZSA9IHNtcF9jb3JlOTlfY3lwcmVzc190Yl9mcmVlemU7CiAJCQkJbmFtZSA9ICJDeXByZXNzIjsKIAkJCX0KQEAgLTkwMCw3ICs4OTksNyBAQAogCWNwdV9kZWFkW2NwdV0gPSAwOwogfQogCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgJiYgQ09ORklHX1BQMzIgKi8KIAogLyogQ29yZTk5IE1hY3MgKGR1YWwgRzRzIGFuZCBHNXMpICovCiBzdHJ1Y3Qgc21wX29wc190IGNvcmU5OV9zbXBfb3BzID0gewpAQCAtOTEwLDggKzkwOSwxNiBAQAogCS5zZXR1cF9jcHUJPSBzbXBfY29yZTk5X3NldHVwX2NwdSwKIAkuZ2l2ZV90aW1lYmFzZQk9IHNtcF9jb3JlOTlfZ2l2ZV90aW1lYmFzZSwKIAkudGFrZV90aW1lYmFzZQk9IHNtcF9jb3JlOTlfdGFrZV90aW1lYmFzZSwKLSNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCisjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpCisjIGlmIGRlZmluZWQoQ09ORklHX1BQQzMyKQogCS5jcHVfZGlzYWJsZQk9IHNtcF9jb3JlOTlfY3B1X2Rpc2FibGUsCiAJLmNwdV9kaWUJPSBzbXBfY29yZTk5X2NwdV9kaWUsCisjIGVuZGlmCisjIGlmIGRlZmluZWQoQ09ORklHX1BQQzY0KQorCS5jcHVfZGlzYWJsZQk9IGdlbmVyaWNfY3B1X2Rpc2FibGUsCisJLmNwdV9kaWUJPSBnZW5lcmljX2NwdV9kaWUsCisJLyogaW50ZW50aW9uYWxseSBkbyAqTk9UKiBhc3NpZ24gY3B1X2VuYWJsZSwKKwkgKiB0aGUgZ2VuZXJpYyBjb2RlIHdpbGwgdXNlIGtpY2tfY3B1IHRoZW4hICovCisjIGVuZGlmCiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9odGFiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9odGFiLmMKaW5kZXggZWE2MGM0NS4uYTE0MDllNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaHRhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2h0YWIuYwpAQCAtMjczLDcgKzI3Myw4IEBACiAKIAlyZXN1bHQgPSBsdjFfbWFwX2h0YWIoMCwgJmh0YWJfYWRkcik7CiAKLQlodGFiID0gKGhwdGVfdCAqKV9faW9yZW1hcChodGFiX2FkZHIsIGh0YWJfc2l6ZSwgUEFHRV9SRUFET05MWV9YKTsKKwlodGFiID0gKGhwdGVfdCAqKV9faW9yZW1hcChodGFiX2FkZHIsIGh0YWJfc2l6ZSwKKwkJCQkgICBwZ3Byb3RfdmFsKFBBR0VfUkVBRE9OTFlfWCkpOwogCiAJREJHKCIlczolZDogbHBhciAlMDE2bHhoLCB2aXJ0ICUwMTZseGhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKIAkJaHRhYl9hZGRyLCAodW5zaWduZWQgbG9uZylodGFiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2ludGVycnVwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKaW5kZXggNjMxYzMwMC4uZWM5MDMwZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAjaW5jbHVkZSA8YXNtL2x2MWNhbGwuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNpbmNsdWRlICJwbGF0Zm9ybS5oIgogCkBAIC04OSw3ICs5MCwxOCBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBzM19wcml2YXRlLCBwczNfcHJpdmF0ZSk7CiAKLWludCBwczNfYWxsb2NfaXJxKGVudW0gcHMzX2NwdV9iaW5kaW5nIGNwdSwgdW5zaWduZWQgbG9uZyBvdXRsZXQsCisvKioKKyAqIHBzM192aXJxX3NldHVwIC0gdmlycSByZWxhdGVkIHNldHVwLgorICogQGNwdTogZW51bSBwczNfY3B1X2JpbmRpbmcgaW5kaWNhdGluZyB0aGUgY3B1IHRoZSBpbnRlcnJ1cHQgc2hvdWxkIGJlCisgKiBzZXJ2aWNlZCBvbi4KKyAqIEBvdXRsZXQ6IFRoZSBIViBvdXRsZXQgZnJvbSB0aGUgdmFyaW91cyBjcmVhdGUgb3V0bGV0IHJvdXRpbmVzLgorICogQHZpcnE6IFRoZSBhc3NpZ25lZCBMaW51eCB2aXJxLgorICoKKyAqIENhbGxzIGlycV9jcmVhdGVfbWFwcGluZygpIHRvIGdldCBhIHZpcnEgYW5kIHNldHMgdGhlIGNoaXAgZGF0YSB0bworICogcHMzX3ByaXZhdGUgZGF0YS4KKyAqLworCitpbnQgcHMzX3ZpcnFfc2V0dXAoZW51bSBwczNfY3B1X2JpbmRpbmcgY3B1LCB1bnNpZ25lZCBsb25nIG91dGxldCwKIAl1bnNpZ25lZCBpbnQgKnZpcnEpCiB7CiAJaW50IHJlc3VsdDsKQEAgLTExMSwxNyArMTIzLDYgQEAKIAkJZ290byBmYWlsX2NyZWF0ZTsKIAl9CiAKLQkvKiBCaW5kcyBvdXRsZXQgdG8gY3B1ICsgdmlycS4gKi8KLQotCXJlc3VsdCA9IGx2MV9jb25uZWN0X2lycV9wbHVnX2V4dChwZC0+bm9kZSwgcGQtPmNwdSwgKnZpcnEsIG91dGxldCwgMCk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JCXByX2luZm8oIiVzOiVkOiBsdjFfY29ubmVjdF9pcnFfcGx1Z19leHQgZmFpbGVkOiAlc1xuIiwKLQkJX19mdW5jX18sIF9fTElORV9fLCBwczNfcmVzdWx0KHJlc3VsdCkpOwotCQlyZXN1bHQgPSAtRVBFUk07Ci0JCWdvdG8gZmFpbF9jb25uZWN0OwotCX0KLQogCXByX2RlYnVnKCIlczolZDogb3V0bGV0ICVsdSA9PiBjcHUgJXUsIHZpcnEgJXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKIAkJb3V0bGV0LCBjcHUsICp2aXJxKTsKIApAQCAtMTM2LDE1ICsxMzcsODcgQEAKIAlyZXR1cm4gcmVzdWx0OwogCiBmYWlsX3NldDoKLQlsdjFfZGlzY29ubmVjdF9pcnFfcGx1Z19leHQocGQtPm5vZGUsIHBkLT5jcHUsICp2aXJxKTsKLWZhaWxfY29ubmVjdDoKIAlpcnFfZGlzcG9zZV9tYXBwaW5nKCp2aXJxKTsKIGZhaWxfY3JlYXRlOgogCXJldHVybiByZXN1bHQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChwczNfYWxsb2NfaXJxKTsKIAotaW50IHBzM19mcmVlX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKKy8qKgorICogcHMzX3ZpcnFfZGVzdHJveSAtIHZpcnEgcmVsYXRlZCB0ZWFyZG93bi4KKyAqIEB2aXJxOiBUaGUgYXNzaWduZWQgTGludXggdmlycS4KKyAqCisgKiBDbGVhcnMgY2hpcCBkYXRhIGFuZCBjYWxscyBpcnFfZGlzcG9zZV9tYXBwaW5nKCkgZm9yIHRoZSB2aXJxLgorICovCisKK2ludCBwczNfdmlycV9kZXN0cm95KHVuc2lnbmVkIGludCB2aXJxKQoreworCWNvbnN0IHN0cnVjdCBwczNfcHJpdmF0ZSAqcGQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKworCXByX2RlYnVnKCIlczolZDogbm9kZSAlbHUsIGNwdSAlZCwgdmlycSAldVxuIiwgX19mdW5jX18sIF9fTElORV9fLAorCQlwZC0+bm9kZSwgcGQtPmNwdSwgdmlycSk7CisKKwlzZXRfaXJxX2NoaXBfZGF0YSh2aXJxLCBOVUxMKTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHZpcnEpOworCisJcHJfZGVidWcoIiVzOiVkIDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXJldHVybiAwOworfQorCisvKioKKyAqIHBzM19pcnFfcGx1Z19zZXR1cCAtIEdlbmVyaWMgb3V0bGV0IGFuZCB2aXJxIHJlbGF0ZWQgc2V0dXAuCisgKiBAY3B1OiBlbnVtIHBzM19jcHVfYmluZGluZyBpbmRpY2F0aW5nIHRoZSBjcHUgdGhlIGludGVycnVwdCBzaG91bGQgYmUKKyAqIHNlcnZpY2VkIG9uLgorICogQG91dGxldDogVGhlIEhWIG91dGxldCBmcm9tIHRoZSB2YXJpb3VzIGNyZWF0ZSBvdXRsZXQgcm91dGluZXMuCisgKiBAdmlycTogVGhlIGFzc2lnbmVkIExpbnV4IHZpcnEuCisgKgorICogU2V0cyB1cCB2aXJxIGFuZCBjb25uZWN0cyB0aGUgaXJxIHBsdWcuCisgKi8KKworaW50IHBzM19pcnFfcGx1Z19zZXR1cChlbnVtIHBzM19jcHVfYmluZGluZyBjcHUsIHVuc2lnbmVkIGxvbmcgb3V0bGV0LAorCXVuc2lnbmVkIGludCAqdmlycSkKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBwczNfcHJpdmF0ZSAqcGQ7CisKKwlyZXN1bHQgPSBwczNfdmlycV9zZXR1cChjcHUsIG91dGxldCwgdmlycSk7CisKKwlpZiAocmVzdWx0KSB7CisJCXByX2RlYnVnKCIlczolZDogcHMzX3ZpcnFfc2V0dXAgZmFpbGVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQlnb3RvIGZhaWxfc2V0dXA7CisJfQorCisJcGQgPSBnZXRfaXJxX2NoaXBfZGF0YSgqdmlycSk7CisKKwkvKiBCaW5kcyBvdXRsZXQgdG8gY3B1ICsgdmlycS4gKi8KKworCXJlc3VsdCA9IGx2MV9jb25uZWN0X2lycV9wbHVnX2V4dChwZC0+bm9kZSwgcGQtPmNwdSwgKnZpcnEsIG91dGxldCwgMCk7CisKKwlpZiAocmVzdWx0KSB7CisJCXByX2luZm8oIiVzOiVkOiBsdjFfY29ubmVjdF9pcnFfcGx1Z19leHQgZmFpbGVkOiAlc1xuIiwKKwkJX19mdW5jX18sIF9fTElORV9fLCBwczNfcmVzdWx0KHJlc3VsdCkpOworCQlyZXN1bHQgPSAtRVBFUk07CisJCWdvdG8gZmFpbF9jb25uZWN0OworCX0KKworCXJldHVybiByZXN1bHQ7CisKK2ZhaWxfY29ubmVjdDoKKwlwczNfdmlycV9kZXN0cm95KCp2aXJxKTsKK2ZhaWxfc2V0dXA6CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBzM19pcnFfcGx1Z19zZXR1cCk7CisKKy8qKgorICogcHMzX2lycV9wbHVnX2Rlc3Ryb3kgLSBHZW5lcmljIG91dGxldCBhbmQgdmlycSByZWxhdGVkIHRlYXJkb3duLgorICogQHZpcnE6IFRoZSBhc3NpZ25lZCBMaW51eCB2aXJxLgorICoKKyAqIERpc2Nvbm5lY3RzIHRoZSBpcnEgcGx1ZyBhbmQgdGVhcnMgZG93biB2aXJxLgorICogRG8gbm90IGNhbGwgZm9yIHN5c3RlbSBidXMgZXZlbnQgaW50ZXJydXB0cyBzZXR1cCB3aXRoCisgKiBwczNfc2JfZXZlbnRfcmVjZWl2ZV9wb3J0X3NldHVwKCkuCisgKi8KKworaW50IHBzM19pcnFfcGx1Z19kZXN0cm95KHVuc2lnbmVkIGludCB2aXJxKQogewogCWludCByZXN1bHQ7CiAJY29uc3Qgc3RydWN0IHBzM19wcml2YXRlICpwZCA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOwpAQCAtMTU4LDcyICsyMzEsMjQgQEAKIAkJcHJfaW5mbygiJXM6JWQ6IGx2MV9kaXNjb25uZWN0X2lycV9wbHVnX2V4dCBmYWlsZWQ6ICVzXG4iLAogCQlfX2Z1bmNfXywgX19MSU5FX18sIHBzM19yZXN1bHQocmVzdWx0KSk7CiAKLQlzZXRfaXJxX2NoaXBfZGF0YSh2aXJxLCBOVUxMKTsKLQlpcnFfZGlzcG9zZV9tYXBwaW5nKHZpcnEpOworCXBzM192aXJxX2Rlc3Ryb3kodmlycSk7CisKIAlyZXR1cm4gcmVzdWx0OwogfQotRVhQT1JUX1NZTUJPTF9HUEwocHMzX2ZyZWVfaXJxKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBzM19pcnFfcGx1Z19kZXN0cm95KTsKIAogLyoqCi0gKiBwczNfYWxsb2NfaW9faXJxIC0gQXNzaWduIGEgdmlycSB0byBhIHN5c3RlbSBidXMgZGV2aWNlLgotICogQGNwdTogZW51bSBwczNfY3B1X2JpbmRpbmcgaW5kaWNhdGluZyB0aGUgY3B1IHRoZSBpbnRlcnJ1cHQgc2hvdWxkIGJlCi0gKiBzZXJ2aWNlZCBvbi4KLSAqIEBpbnRlcnJ1cHRfaWQ6IFRoZSBkZXZpY2UgaW50ZXJydXB0IGlkIHJlYWQgZnJvbSB0aGUgc3lzdGVtIHJlcG9zaXRvcnkuCi0gKiBAdmlycTogVGhlIGFzc2lnbmVkIExpbnV4IHZpcnEuCi0gKgotICogQW4gaW8gaXJxIHJlcHJlc2VudHMgYSBub24tdmlydHVhbGl6ZWQgZGV2aWNlIGludGVycnVwdC4gIGludGVycnVwdF9pZAotICogY29yZXNwb25kcyB0byB0aGUgaW50ZXJydXB0IG51bWJlciBvZiB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuCi0gKi8KLQotaW50IHBzM19hbGxvY19pb19pcnEoZW51bSBwczNfY3B1X2JpbmRpbmcgY3B1LCB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X2lkLAotCXVuc2lnbmVkIGludCAqdmlycSkKLXsKLQlpbnQgcmVzdWx0OwotCXVuc2lnbmVkIGxvbmcgb3V0bGV0OwotCi0JcmVzdWx0ID0gbHYxX2NvbnN0cnVjdF9pb19pcnFfb3V0bGV0KGludGVycnVwdF9pZCwgJm91dGxldCk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JCXByX2RlYnVnKCIlczolZDogbHYxX2NvbnN0cnVjdF9pb19pcnFfb3V0bGV0IGZhaWxlZDogJXNcbiIsCi0JCQlfX2Z1bmNfXywgX19MSU5FX18sIHBzM19yZXN1bHQocmVzdWx0KSk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcmVzdWx0ID0gcHMzX2FsbG9jX2lycShjcHUsIG91dGxldCwgdmlycSk7Ci0JQlVHX09OKHJlc3VsdCk7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwocHMzX2FsbG9jX2lvX2lycSk7Ci0KLWludCBwczNfZnJlZV9pb19pcnEodW5zaWduZWQgaW50IHZpcnEpCi17Ci0JaW50IHJlc3VsdDsKLQotCXJlc3VsdCA9IGx2MV9kZXN0cnVjdF9pb19pcnFfb3V0bGV0KHZpcnFfdG9faHcodmlycSkpOwotCi0JaWYgKHJlc3VsdCkKLQkJcHJfZGVidWcoIiVzOiVkOiBsdjFfZGVzdHJ1Y3RfaW9faXJxX291dGxldCBmYWlsZWQ6ICVzXG4iLAotCQkJX19mdW5jX18sIF9fTElORV9fLCBwczNfcmVzdWx0KHJlc3VsdCkpOwotCi0JcHMzX2ZyZWVfaXJxKHZpcnEpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBzM19mcmVlX2lvX2lycSk7Ci0KLS8qKgotICogcHMzX2FsbG9jX2V2ZW50X2lycSAtIEFsbG9jYXRlIGEgdmlycSBmb3IgdXNlIHdpdGggYSBzeXN0ZW0gZXZlbnQuCisgKiBwczNfZXZlbnRfcmVjZWl2ZV9wb3J0X3NldHVwIC0gU2V0dXAgYW4gZXZlbnQgcmVjZWl2ZSBwb3J0LgogICogQGNwdTogZW51bSBwczNfY3B1X2JpbmRpbmcgaW5kaWNhdGluZyB0aGUgY3B1IHRoZSBpbnRlcnJ1cHQgc2hvdWxkIGJlCiAgKiBzZXJ2aWNlZCBvbi4KICAqIEB2aXJxOiBUaGUgYXNzaWduZWQgTGludXggdmlycS4KICAqCiAgKiBUaGUgdmlycSBjYW4gYmUgdXNlZCB3aXRoIGx2MV9jb25uZWN0X2ludGVycnVwdF9ldmVudF9yZWNlaXZlX3BvcnQoKSB0bwotICogYXJyYW5nZSB0byByZWNlaXZlIGV2ZW50cywgb3Igd2l0aCBwczNfc2VuZF9ldmVudF9sb2NhbGx5KCkgdG8gc2lnbmFsCi0gKiBldmVudHMuCisgKiBhcnJhbmdlIHRvIHJlY2VpdmUgaW50ZXJydXB0cyBmcm9tIHN5c3RlbS1idXMgZGV2aWNlcywgb3Igd2l0aAorICogcHMzX3NlbmRfZXZlbnRfbG9jYWxseSgpIHRvIHNpZ25hbCBldmVudHMuCiAgKi8KIAotaW50IHBzM19hbGxvY19ldmVudF9pcnEoZW51bSBwczNfY3B1X2JpbmRpbmcgY3B1LCB1bnNpZ25lZCBpbnQgKnZpcnEpCitpbnQgcHMzX2V2ZW50X3JlY2VpdmVfcG9ydF9zZXR1cChlbnVtIHBzM19jcHVfYmluZGluZyBjcHUsIHVuc2lnbmVkIGludCAqdmlycSkKIHsKIAlpbnQgcmVzdWx0OwogCXVuc2lnbmVkIGxvbmcgb3V0bGV0OwpAQCAtMjM3LDE3ICsyNjIsMjcgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLQlyZXN1bHQgPSBwczNfYWxsb2NfaXJxKGNwdSwgb3V0bGV0LCB2aXJxKTsKKwlyZXN1bHQgPSBwczNfaXJxX3BsdWdfc2V0dXAoY3B1LCBvdXRsZXQsIHZpcnEpOwogCUJVR19PTihyZXN1bHQpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHBzM19ldmVudF9yZWNlaXZlX3BvcnRfc2V0dXApOwogCi1pbnQgcHMzX2ZyZWVfZXZlbnRfaXJxKHVuc2lnbmVkIGludCB2aXJxKQorLyoqCisgKiBwczNfZXZlbnRfcmVjZWl2ZV9wb3J0X2Rlc3Ryb3kgLSBEZXN0cm95IGFuIGV2ZW50IHJlY2VpdmUgcG9ydC4KKyAqIEB2aXJxOiBUaGUgYXNzaWduZWQgTGludXggdmlycS4KKyAqCisgKiBTaW5jZSBwczNfZXZlbnRfcmVjZWl2ZV9wb3J0X2Rlc3Ryb3kgZGVzdHJveXMgdGhlIHJlY2VpdmUgcG9ydCBvdXRsZXQsCisgKiBTQiBkZXZpY2VzIG5lZWQgdG8gY2FsbCBkaXNjb25uZWN0X2ludGVycnVwdF9ldmVudF9yZWNlaXZlX3BvcnQoKSBiZWZvcmUKKyAqIHRoaXMuCisgKi8KKworaW50IHBzM19ldmVudF9yZWNlaXZlX3BvcnRfZGVzdHJveSh1bnNpZ25lZCBpbnQgdmlycSkKIHsKIAlpbnQgcmVzdWx0OwogCi0JcHJfZGVidWcoIiAtPiAlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwlwcl9kZWJ1ZygiIC0+ICVzOiVkIHZpcnE6ICV1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIHZpcnEpOwogCiAJcmVzdWx0ID0gbHYxX2Rlc3RydWN0X2V2ZW50X3JlY2VpdmVfcG9ydCh2aXJxX3RvX2h3KHZpcnEpKTsKIApAQCAtMjU1LDExICsyOTAsMTcgQEAKIAkJcHJfZGVidWcoIiVzOiVkOiBsdjFfZGVzdHJ1Y3RfZXZlbnRfcmVjZWl2ZV9wb3J0IGZhaWxlZDogJXNcbiIsCiAJCQlfX2Z1bmNfXywgX19MSU5FX18sIHBzM19yZXN1bHQocmVzdWx0KSk7CiAKLQlwczNfZnJlZV9pcnEodmlycSk7CisJLyogbHYxX2Rlc3RydWN0X2V2ZW50X3JlY2VpdmVfcG9ydCgpIGRlc3Ryb3lzIHRoZSBJUlEgcGx1ZywKKwkgKiBzbyBkb24ndCBjYWxsIHBzM19pcnFfcGx1Z19kZXN0cm95KCkgaGVyZS4KKwkgKi8KKworCXJlc3VsdCA9IHBzM192aXJxX2Rlc3Ryb3kodmlycSk7CisJQlVHX09OKHJlc3VsdCk7CiAKIAlwcl9kZWJ1ZygiIDwtICVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwczNfZXZlbnRfcmVjZWl2ZV9wb3J0X2Rlc3Ryb3kpOwogCiBpbnQgcHMzX3NlbmRfZXZlbnRfbG9jYWxseSh1bnNpZ25lZCBpbnQgdmlycSkKIHsKQEAgLTI2Nyw3ICszMDgsNyBAQAogfQogCiAvKioKLSAqIHBzM19jb25uZWN0X2V2ZW50X2lycSAtIEFzc2lnbiBhIHZpcnEgdG8gYSBzeXN0ZW0gYnVzIGRldmljZS4KKyAqIHBzM19zYl9ldmVudF9yZWNlaXZlX3BvcnRfc2V0dXAgLSBTZXR1cCBhIHN5c3RlbSBidXMgZXZlbnQgcmVjZWl2ZSBwb3J0LgogICogQGNwdTogZW51bSBwczNfY3B1X2JpbmRpbmcgaW5kaWNhdGluZyB0aGUgY3B1IHRoZSBpbnRlcnJ1cHQgc2hvdWxkIGJlCiAgKiBzZXJ2aWNlZCBvbi4KICAqIEBkaWQ6IFRoZSBIViBkZXZpY2UgaWRlbnRpZmllciByZWFkIGZyb20gdGhlIHN5c3RlbSByZXBvc2l0b3J5LgpAQCAtMjc4LDEzICszMTksMTUgQEAKICAqIGNvcmVzcG9uZHMgdG8gdGhlIHNvZnR3YXJlIGludGVycnVwdCBudW1iZXIuCiAgKi8KIAotaW50IHBzM19jb25uZWN0X2V2ZW50X2lycShlbnVtIHBzM19jcHVfYmluZGluZyBjcHUsCitpbnQgcHMzX3NiX2V2ZW50X3JlY2VpdmVfcG9ydF9zZXR1cChlbnVtIHBzM19jcHVfYmluZGluZyBjcHUsCiAJY29uc3Qgc3RydWN0IHBzM19kZXZpY2VfaWQgKmRpZCwgdW5zaWduZWQgaW50IGludGVycnVwdF9pZCwKIAl1bnNpZ25lZCBpbnQgKnZpcnEpCiB7CisJLyogdGhpcyBzaG91bGQgZ28gaW4gc3lzdGVtLWJ1cy5jICovCisKIAlpbnQgcmVzdWx0OwogCi0JcmVzdWx0ID0gcHMzX2FsbG9jX2V2ZW50X2lycShjcHUsIHZpcnEpOworCXJlc3VsdCA9IHBzM19ldmVudF9yZWNlaXZlX3BvcnRfc2V0dXAoY3B1LCB2aXJxKTsKIAogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CkBAIC0yOTYsNyArMzM5LDcgQEAKIAkJcHJfZGVidWcoIiVzOiVkOiBsdjFfY29ubmVjdF9pbnRlcnJ1cHRfZXZlbnRfcmVjZWl2ZV9wb3J0IgogCQkJIiBmYWlsZWQ6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCiAJCQlwczNfcmVzdWx0KHJlc3VsdCkpOwotCQlwczNfZnJlZV9ldmVudF9pcnEoKnZpcnEpOworCQlwczNfZXZlbnRfcmVjZWl2ZV9wb3J0X2Rlc3Ryb3koKnZpcnEpOwogCQkqdmlycSA9IE5PX0lSUTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CkBAIC0zMDYsMTAgKzM0OSwxMyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHBzM19zYl9ldmVudF9yZWNlaXZlX3BvcnRfc2V0dXApOwogCi1pbnQgcHMzX2Rpc2Nvbm5lY3RfZXZlbnRfaXJxKGNvbnN0IHN0cnVjdCBwczNfZGV2aWNlX2lkICpkaWQsCitpbnQgcHMzX3NiX2V2ZW50X3JlY2VpdmVfcG9ydF9kZXN0cm95KGNvbnN0IHN0cnVjdCBwczNfZGV2aWNlX2lkICpkaWQsCiAJdW5zaWduZWQgaW50IGludGVycnVwdF9pZCwgdW5zaWduZWQgaW50IHZpcnEpCiB7CisJLyogdGhpcyBzaG91bGQgZ28gaW4gc3lzdGVtLWJ1cy5jICovCisKIAlpbnQgcmVzdWx0OwogCiAJcHJfZGVidWcoIiAtPiAlczolZDogaW50ZXJydXB0X2lkICV1LCB2aXJxICV1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCkBAIC0zMjMsMTQgKzM2OSw2NSBAQAogCQkJIiBmYWlsZWQ6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCiAJCQlwczNfcmVzdWx0KHJlc3VsdCkpOwogCi0JcHMzX2ZyZWVfZXZlbnRfaXJxKHZpcnEpOworCXJlc3VsdCA9IHBzM19ldmVudF9yZWNlaXZlX3BvcnRfZGVzdHJveSh2aXJxKTsKKwlCVUdfT04ocmVzdWx0KTsKIAogCXByX2RlYnVnKCIgPC0gJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0wocHMzX3NiX2V2ZW50X3JlY2VpdmVfcG9ydF9kZXN0cm95KTsKIAogLyoqCi0gKiBwczNfYWxsb2NfdnVhcnRfaXJxIC0gQ29uZmlndXJlIHRoZSBzeXN0ZW0gdmlydHVhbCB1YXJ0IHZpcnEuCisgKiBwczNfaW9faXJxX3NldHVwIC0gU2V0dXAgYSBzeXN0ZW0gYnVzIGlvIGlycS4KKyAqIEBjcHU6IGVudW0gcHMzX2NwdV9iaW5kaW5nIGluZGljYXRpbmcgdGhlIGNwdSB0aGUgaW50ZXJydXB0IHNob3VsZCBiZQorICogc2VydmljZWQgb24uCisgKiBAaW50ZXJydXB0X2lkOiBUaGUgZGV2aWNlIGludGVycnVwdCBpZCByZWFkIGZyb20gdGhlIHN5c3RlbSByZXBvc2l0b3J5LgorICogQHZpcnE6IFRoZSBhc3NpZ25lZCBMaW51eCB2aXJxLgorICoKKyAqIEFuIGlvIGlycSByZXByZXNlbnRzIGEgbm9uLXZpcnR1YWxpemVkIGRldmljZSBpbnRlcnJ1cHQuICBpbnRlcnJ1cHRfaWQKKyAqIGNvcmVzcG9uZHMgdG8gdGhlIGludGVycnVwdCBudW1iZXIgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyLgorICovCisKK2ludCBwczNfaW9faXJxX3NldHVwKGVudW0gcHMzX2NwdV9iaW5kaW5nIGNwdSwgdW5zaWduZWQgaW50IGludGVycnVwdF9pZCwKKwl1bnNpZ25lZCBpbnQgKnZpcnEpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIG91dGxldDsKKworCXJlc3VsdCA9IGx2MV9jb25zdHJ1Y3RfaW9faXJxX291dGxldChpbnRlcnJ1cHRfaWQsICZvdXRsZXQpOworCisJaWYgKHJlc3VsdCkgeworCQlwcl9kZWJ1ZygiJXM6JWQ6IGx2MV9jb25zdHJ1Y3RfaW9faXJxX291dGxldCBmYWlsZWQ6ICVzXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBwczNfcmVzdWx0KHJlc3VsdCkpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJlc3VsdCA9IHBzM19pcnFfcGx1Z19zZXR1cChjcHUsIG91dGxldCwgdmlycSk7CisJQlVHX09OKHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocHMzX2lvX2lycV9zZXR1cCk7CisKK2ludCBwczNfaW9faXJxX2Rlc3Ryb3kodW5zaWduZWQgaW50IHZpcnEpCit7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IGx2MV9kZXN0cnVjdF9pb19pcnFfb3V0bGV0KHZpcnFfdG9faHcodmlycSkpOworCisJaWYgKHJlc3VsdCkKKwkJcHJfZGVidWcoIiVzOiVkOiBsdjFfZGVzdHJ1Y3RfaW9faXJxX291dGxldCBmYWlsZWQ6ICVzXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBwczNfcmVzdWx0KHJlc3VsdCkpOworCisJcmVzdWx0ID0gcHMzX2lycV9wbHVnX2Rlc3Ryb3kodmlycSk7CisJQlVHX09OKHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocHMzX2lvX2lycV9kZXN0cm95KTsKKworLyoqCisgKiBwczNfdnVhcnRfaXJxX3NldHVwIC0gU2V0dXAgdGhlIHN5c3RlbSB2aXJ0dWFsIHVhcnQgdmlycS4KICAqIEBjcHU6IGVudW0gcHMzX2NwdV9iaW5kaW5nIGluZGljYXRpbmcgdGhlIGNwdSB0aGUgaW50ZXJydXB0IHNob3VsZCBiZQogICogc2VydmljZWQgb24uCiAgKiBAdmlydF9hZGRyX2JtcDogVGhlIGNhbGxlciBzdXBwbGllZCB2aXJ0dWFsIHVhcnQgaW50ZXJydXB0IGJpdG1hcC4KQEAgLTM0MCw3ICs0MzcsNyBAQAogICogZnJlZWluZyB0aGUgaW50ZXJydXB0IHdpbGwgcmV0dXJuIGEgd3Jvbmcgc3RhdGUgZXJyb3IuCiAgKi8KIAotaW50IHBzM19hbGxvY192dWFydF9pcnEoZW51bSBwczNfY3B1X2JpbmRpbmcgY3B1LCB2b2lkKiB2aXJ0X2FkZHJfYm1wLAoraW50IHBzM192dWFydF9pcnFfc2V0dXAoZW51bSBwczNfY3B1X2JpbmRpbmcgY3B1LCB2b2lkKiB2aXJ0X2FkZHJfYm1wLAogCXVuc2lnbmVkIGludCAqdmlycSkKIHsKIAlpbnQgcmVzdWx0OwpAQCAtMzU5LDEzICs0NTYsMTMgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLQlyZXN1bHQgPSBwczNfYWxsb2NfaXJxKGNwdSwgb3V0bGV0LCB2aXJxKTsKKwlyZXN1bHQgPSBwczNfaXJxX3BsdWdfc2V0dXAoY3B1LCBvdXRsZXQsIHZpcnEpOwogCUJVR19PTihyZXN1bHQpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotaW50IHBzM19mcmVlX3Z1YXJ0X2lycSh1bnNpZ25lZCBpbnQgdmlycSkKK2ludCBwczNfdnVhcnRfaXJxX2Rlc3Ryb3kodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJaW50IHJlc3VsdDsKIApAQCAtMzc3LDEzICs0NzQsMTQgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLQlwczNfZnJlZV9pcnEodmlycSk7CisJcmVzdWx0ID0gcHMzX2lycV9wbHVnX2Rlc3Ryb3kodmlycSk7CisJQlVHX09OKHJlc3VsdCk7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQogCiAvKioKLSAqIHBzM19hbGxvY19zcGVfaXJxIC0gQ29uZmlndXJlIGFuIHNwZSB2aXJxLgorICogcHMzX3NwZV9pcnFfc2V0dXAgLSBTZXR1cCBhbiBzcGUgdmlycS4KICAqIEBjcHU6IGVudW0gcHMzX2NwdV9iaW5kaW5nIGluZGljYXRpbmcgdGhlIGNwdSB0aGUgaW50ZXJydXB0IHNob3VsZCBiZQogICogc2VydmljZWQgb24uCiAgKiBAc3BlX2lkOiBUaGUgc3BlX2lkIHJldHVybmVkIGZyb20gbHYxX2NvbnN0cnVjdF9sb2dpY2FsX3NwZSgpLgpAQCAtMzkyLDcgKzQ5MCw3IEBACiAgKgogICovCiAKLWludCBwczNfYWxsb2Nfc3BlX2lycShlbnVtIHBzM19jcHVfYmluZGluZyBjcHUsIHVuc2lnbmVkIGxvbmcgc3BlX2lkLAoraW50IHBzM19zcGVfaXJxX3NldHVwKGVudW0gcHMzX2NwdV9iaW5kaW5nIGNwdSwgdW5zaWduZWQgbG9uZyBzcGVfaWQsCiAJdW5zaWduZWQgaW50IGNsYXNzLCB1bnNpZ25lZCBpbnQgKnZpcnEpCiB7CiAJaW50IHJlc3VsdDsKQEAgLTQwOCwxNSArNTA2LDE2IEBACiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JcmVzdWx0ID0gcHMzX2FsbG9jX2lycShjcHUsIG91dGxldCwgdmlycSk7CisJcmVzdWx0ID0gcHMzX2lycV9wbHVnX3NldHVwKGNwdSwgb3V0bGV0LCB2aXJxKTsKIAlCVUdfT04ocmVzdWx0KTsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKLWludCBwczNfZnJlZV9zcGVfaXJxKHVuc2lnbmVkIGludCB2aXJxKQoraW50IHBzM19zcGVfaXJxX2Rlc3Ryb3kodW5zaWduZWQgaW50IHZpcnEpCiB7Ci0JcHMzX2ZyZWVfaXJxKHZpcnEpOworCWludCByZXN1bHQgPSBwczNfaXJxX3BsdWdfZGVzdHJveSh2aXJxKTsKKwlCVUdfT04ocmVzdWx0KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKaW5kZXggMjAxNGQyYi4uZjhhM2UyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jCkBAIC04MjYsNSArODI2LDQgQEAKIHZvaWQgcHMzX21tX3NodXRkb3duKHZvaWQpCiB7CiAJcHMzX21tX3JlZ2lvbl9kZXN0cm95KCZtYXAucjEpOwotCW1hcC50b3RhbCA9IG1hcC5ybS5zaXplOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmMKaW5kZXggYWM1ZGY5Ni4uOTM1Mzk2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jCkBAIC05OSw2ICs5OSw3IEBACiAJd2hpbGUoMSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfRkJfUFMzCiBzdGF0aWMgdm9pZCBwcmVhbGxvYyhzdHJ1Y3QgcHMzX3ByZWFsbG9jICpwKQogewogCWlmICghcC0+c2l6ZSkKQEAgLTExNSw3ICsxMTYsNiBAQAogCSAgICAgICBwLT5hZGRyZXNzKTsKIH0KIAotI2lmZGVmIENPTkZJR19GQl9QUzMKIHN0cnVjdCBwczNfcHJlYWxsb2MgcHMzZmJfdmlkZW9tZW1vcnkgPSB7CiAgICAgLm5hbWUgPSAicHMzZmIgdmlkZW9tZW1vcnkiLAogICAgIC5zaXplID0gQ09ORklHX0ZCX1BTM19ERUZBVUxUX1NJWkVfTSoxMDI0KjEwMjQsCkBAIC0xMzcsNiArMTM3LDEyIEBACiAjZGVmaW5lIHByZWFsbG9jX3BzM2ZiX3ZpZGVvbWVtb3J5KCkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgcHMzX3NldF9kYWJyKHU2NCBkYWJyKQoreworCWVudW0ge0RBQlJfVVNFUiA9IDEsIERBQlJfS0VSTkVMID0gMix9OworCisJcmV0dXJuIGx2MV9zZXRfZGFicihkYWJyLCBEQUJSX0tFUk5FTCB8IERBQlJfVVNFUikgPyAtMSA6IDA7Cit9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwczNfc2V0dXBfYXJjaCh2b2lkKQogewpAQCAtMjM0LDYgKzI0MCw3IEBACiAJLmdldF9ib290X3RpbWUJCQk9IHBzM19nZXRfYm9vdF90aW1lLAogCS5zZXRfcnRjX3RpbWUJCQk9IHBzM19zZXRfcnRjX3RpbWUsCiAJLmdldF9ydGNfdGltZQkJCT0gcHMzX2dldF9ydGNfdGltZSwKKwkuc2V0X2RhYnIJCQk9IHBzM19zZXRfZGFiciwKIAkuY2FsaWJyYXRlX2RlY3IJCQk9IHBzM19jYWxpYnJhdGVfZGVjciwKIAkucHJvZ3Jlc3MJCQk9IHBzM19wcm9ncmVzcywKIAkucmVzdGFydAkJCT0gcHMzX3Jlc3RhcnQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NtcC5jCmluZGV4IDZmYjg4NzkuLjUzNDE2ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NtcC5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlCVUlMRF9CVUdfT04oUFBDX01TR19ERUJVR0dFUl9CUkVBSyAhPSAzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNU0dfQ09VTlQ7IGkrKykgewotCQlyZXN1bHQgPSBwczNfYWxsb2NfZXZlbnRfaXJxKGNwdSwgJnZpcnFzW2ldKTsKKwkJcmVzdWx0ID0gcHMzX2V2ZW50X3JlY2VpdmVfcG9ydF9zZXR1cChjcHUsICZ2aXJxc1tpXSk7CiAKIAkJaWYgKHJlc3VsdCkKIAkJCWNvbnRpbnVlOwpAQCAtMTE4LDkgKzExOCwxMSBAQAogCQlEQkcoIiVzOiVkOiAoJWQsICVkKSA9PiB2aXJxICV1XG4iLAogCQkJX19mdW5jX18sIF9fTElORV9fLCBjcHUsIGksIHZpcnFzW2ldKTsKIAorCQlyZXN1bHQgPSByZXF1ZXN0X2lycSh2aXJxc1tpXSwgaXBpX2Z1bmN0aW9uX2hhbmRsZXIsCisJCQlJUlFGX0RJU0FCTEVELCBuYW1lc1tpXSwgKHZvaWQqKShsb25nKWkpOwogCi0JCXJlcXVlc3RfaXJxKHZpcnFzW2ldLCBpcGlfZnVuY3Rpb25faGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKLQkJCW5hbWVzW2ldLCAodm9pZCopKGxvbmcpaSk7CisJCWlmIChyZXN1bHQpCisJCQl2aXJxc1tpXSA9IE5PX0lSUTsKIAl9CiAKIAlwczNfcmVnaXN0ZXJfaXBpX2RlYnVnX2JyayhjcHUsIHZpcnFzW1BQQ19NU0dfREVCVUdHRVJfQlJFQUtdKTsKQEAgLTEzNCwxMSArMTM2LDEzIEBACiAJaW50IGk7CiAKIAlEQkcoIiAtPiAlczolZDogKCVkKVxuIiwgX19mdW5jX18sIF9fTElORV9fLCBjcHUpOworCiAJZm9yIChpID0gMDsgaSA8IE1TR19DT1VOVDsgaSsrKSB7Ci0JCXBzM19mcmVlX2V2ZW50X2lycSh2aXJxc1tpXSk7CiAJCWZyZWVfaXJxKHZpcnFzW2ldLCAodm9pZCopKGxvbmcpaSk7CisJCXBzM19ldmVudF9yZWNlaXZlX3BvcnRfZGVzdHJveSh2aXJxc1tpXSk7CiAJCXZpcnFzW2ldID0gTk9fSVJROwogCX0KKwogCURCRygiIDwtICVzOiVkOiAoJWQpXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGNwdSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3B1LmMKaW5kZXggYTM5N2U0ZS4uNjUxNDM3YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3B1LmMKQEAgLTE4NCw3ICsxODQsNyBAQAogCiAJc3B1X3BkYXRhKHNwdSktPnNoYWRvdyA9IF9faW9yZW1hcCgKIAkJc3B1X3BkYXRhKHNwdSktPnNoYWRvd19hZGRyLCBzaXplb2Yoc3RydWN0IHNwZV9zaGFkb3cpLAotCQlQQUdFX1JFQURPTkxZIHwgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVEKTsKKwkJcGdwcm90X3ZhbChQQUdFX1JFQURPTkxZKSB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCk7CiAJaWYgKCFzcHVfcGRhdGEoc3B1KS0+c2hhZG93KSB7CiAJCXByX2RlYnVnKCIlczolZDogaW9yZW1hcCBzaGFkb3cgZmFpbGVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlnb3RvIGZhaWxfaW9yZW1hcDsKQEAgLTIzMCwxOSArMjMwLDE5IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXJlc3VsdCA9IHBzM19hbGxvY19zcGVfaXJxKFBTM19CSU5ESU5HX0NQVV9BTlksIHNwdV9wZGF0YShzcHUpLT5zcGVfaWQsCisJcmVzdWx0ID0gcHMzX3NwZV9pcnFfc2V0dXAoUFMzX0JJTkRJTkdfQ1BVX0FOWSwgc3B1X3BkYXRhKHNwdSktPnNwZV9pZCwKIAkJMCwgJnNwdS0+aXJxc1swXSk7CiAKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWxfYWxsb2NfMDsKIAotCXJlc3VsdCA9IHBzM19hbGxvY19zcGVfaXJxKFBTM19CSU5ESU5HX0NQVV9BTlksIHNwdV9wZGF0YShzcHUpLT5zcGVfaWQsCisJcmVzdWx0ID0gcHMzX3NwZV9pcnFfc2V0dXAoUFMzX0JJTkRJTkdfQ1BVX0FOWSwgc3B1X3BkYXRhKHNwdSktPnNwZV9pZCwKIAkJMSwgJnNwdS0+aXJxc1sxXSk7CiAKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWxfYWxsb2NfMTsKIAotCXJlc3VsdCA9IHBzM19hbGxvY19zcGVfaXJxKFBTM19CSU5ESU5HX0NQVV9BTlksIHNwdV9wZGF0YShzcHUpLT5zcGVfaWQsCisJcmVzdWx0ID0gcHMzX3NwZV9pcnFfc2V0dXAoUFMzX0JJTkRJTkdfQ1BVX0FOWSwgc3B1X3BkYXRhKHNwdSktPnNwZV9pZCwKIAkJMiwgJnNwdS0+aXJxc1syXSk7CiAKIAlpZiAocmVzdWx0KQpAQCAtMjUxLDkgKzI1MSw5IEBACiAJcmV0dXJuIHJlc3VsdDsKIAogZmFpbF9hbGxvY18yOgotCXBzM19mcmVlX3NwZV9pcnEoc3B1LT5pcnFzWzFdKTsKKwlwczNfc3BlX2lycV9kZXN0cm95KHNwdS0+aXJxc1sxXSk7CiBmYWlsX2FsbG9jXzE6Ci0JcHMzX2ZyZWVfc3BlX2lycShzcHUtPmlycXNbMF0pOworCXBzM19zcGVfaXJxX2Rlc3Ryb3koc3B1LT5pcnFzWzBdKTsKIGZhaWxfYWxsb2NfMDoKIAlzcHUtPmlycXNbMF0gPSBzcHUtPmlycXNbMV0gPSBzcHUtPmlycXNbMl0gPSBOT19JUlE7CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTMwMSw5ICszMDEsOSBAQAogCXJlc3VsdCA9IGx2MV9kaXNhYmxlX2xvZ2ljYWxfc3BlKHNwdV9wZGF0YShzcHUpLT5zcGVfaWQsIDApOwogCUJVR19PTihyZXN1bHQpOwogCi0JcHMzX2ZyZWVfc3BlX2lycShzcHUtPmlycXNbMl0pOwotCXBzM19mcmVlX3NwZV9pcnEoc3B1LT5pcnFzWzFdKTsKLQlwczNfZnJlZV9zcGVfaXJxKHNwdS0+aXJxc1swXSk7CisJcHMzX3NwZV9pcnFfZGVzdHJveShzcHUtPmlycXNbMl0pOworCXBzM19zcGVfaXJxX2Rlc3Ryb3koc3B1LT5pcnFzWzFdKTsKKwlwczNfc3BlX2lycV9kZXN0cm95KHNwdS0+aXJxc1swXSk7CiAKIAlzcHUtPmlycXNbMF0gPSBzcHUtPmlycXNbMV0gPSBzcHUtPmlycXNbMl0gPSBOT19JUlE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYwppbmRleCAzYzQ4Y2NlLi42YmRhNTEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jCkBAIC0yNzQsMTMgKzI3NCwxMyBAQAogc3RhdGljIGludCBwczNfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0Jc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2ID0gdG9fcHMzX3N5c3RlbV9idXNfZGV2aWNlKF9kZXYpOwotCWludCBpOwotCiAjaWYgZGVmaW5lZChDT05GSUdfUFMzX0RZTkFNSUNfRE1BKQogCUJVR19PTigiZG8iKTsKIAlyZXR1cm4gLUVQRVJNOwogI2Vsc2UKKwlzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYgPSB0b19wczNfc3lzdGVtX2J1c19kZXZpY2UoX2Rldik7CisJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKywgc2crKykgewogCQlpbnQgcmVzdWx0ID0gcHMzX2RtYV9tYXAoZGV2LT5kX3JlZ2lvbiwKIAkJCXBhZ2VfdG9fcGh5cyhzZy0+cGFnZSkgKyBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCmluZGV4IDkwMjM1ZDUuLmFlMWZjOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKQEAgLTExLDYgKzExLDcgQEAKIG9iai0kKENPTkZJR19FRUgpCSs9IGVlaC5vIGVlaF9jYWNoZS5vIGVlaF9kcml2ZXIubyBlZWhfZXZlbnQubwogb2JqLSQoQ09ORklHX0tFWEVDKQkrPSBrZXhlYy5vCiBvYmotJChDT05GSUdfUENJKQkrPSBwY2kubyBwY2lfZGxwYXIubworb2JqLSQoQ09ORklHX1BDSV9NU0kpCSs9IG1zaS5vCiAKIG9iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJKz0gaG90cGx1Zy1jcHUubwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKaW5kZXggNDhmYmQ0NC4uNWYzZTZkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwpAQCAtNzYsNyArNzYsNyBAQAogICovCiAjZGVmaW5lIEVFSF9NQVhfRkFJTFMJMjEwMDAwMAogCi0vKiBUaW1lIHRvIHdhaXQgZm9yIGEgUENJIHNsb3QgdG8gcmV0cG9ydCBzdGF0dXMsIGluIG1pbGxpc2Vjb25kcyAqLworLyogVGltZSB0byB3YWl0IGZvciBhIFBDSSBzbG90IHRvIHJlcG9ydCBzdGF0dXMsIGluIG1pbGxpc2Vjb25kcyAqLwogI2RlZmluZSBQQ0lfQlVTX1JFU0VUX1dBSVRfTVNFQyAoNjAqMTAwMCkKIAogLyogUlRBUyB0b2tlbnMgKi8KQEAgLTk1LDExICs5NSwyMSBAQAogLyogTG9jayB0byBhdm9pZCByYWNlcyBkdWUgdG8gbXVsdGlwbGUgcmVwb3J0cyBvZiBhbiBlcnJvciAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhjb25maXJtX2Vycm9yX2xvY2spOwogCi0vKiBCdWZmZXIgZm9yIHJlcG9ydGluZyBzbG90LWVycm9yLWRldGFpbCBydGFzIGNhbGxzICovCisvKiBCdWZmZXIgZm9yIHJlcG9ydGluZyBzbG90LWVycm9yLWRldGFpbCBydGFzIGNhbGxzLiBJdHMgaGVyZQorICogaW4gQlNTLCBhbmQgbm90IGR5bmFtaWNhbGx5IGFsbG9jZWQsIHNvIHRoYXQgaXQgZW5kcyB1cCBpbgorICogUk1PIHdoZXJlIFJUQVMgY2FuIGFjY2VzcyBpdC4KKyAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgc2xvdF9lcnJidWZbUlRBU19FUlJPUl9MT0dfTUFYXTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2xvdF9lcnJidWZfbG9jayk7CiBzdGF0aWMgaW50IGVlaF9lcnJvcl9idWZfc2l6ZTsKIAorLyogQnVmZmVyIGZvciByZXBvcnRpbmcgcGNpIHJlZ2lzdGVyIGR1bXBzLiBJdHMgaGVyZSBpbiBCU1MsIGFuZAorICogbm90IGR5bmFtaWNhbGx5IGFsbG9jZWQsIHNvIHRoYXQgaXQgZW5kcyB1cCBpbiBSTU8gd2hlcmUgUlRBUworICogY2FuIGFjY2VzcyBpdC4KKyAqLworI2RlZmluZSBFRUhfUENJX1JFR1NfTE9HX0xFTiA0MDk2CitzdGF0aWMgdW5zaWduZWQgY2hhciBwY2lfcmVnc19idWZbRUVIX1BDSV9SRUdTX0xPR19MRU5dOworCiAvKiBTeXN0ZW0gbW9uaXRvcmluZyBzdGF0aXN0aWNzICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBub19kZXZpY2U7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBub19kbjsKQEAgLTExNSw3ICsxMjUsOCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBCZWxvdyBsaWVzIHRoZSBFRUggZXZlbnQgaW5mcmFzdHJ1Y3R1cmUgKi8KIAotdm9pZCBlZWhfc2xvdF9lcnJvcl9kZXRhaWwgKHN0cnVjdCBwY2lfZG4gKnBkbiwgaW50IHNldmVyaXR5KQorc3RhdGljIHZvaWQgcnRhc19zbG90X2Vycm9yX2RldGFpbChzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCBzZXZlcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZHJpdmVyX2xvZywgc2l6ZV90IGxvZ2xlbikKIHsKIAlpbnQgY29uZmlnX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzMyw3ICsxNDQsOCBAQAogCXJjID0gcnRhc19jYWxsKGlibV9zbG90X2Vycm9yX2RldGFpbCwKIAkgICAgICAgICAgICAgICA4LCAxLCBOVUxMLCBjb25maWdfYWRkciwKIAkgICAgICAgICAgICAgICBCVUlEX0hJKHBkbi0+cGhiLT5idWlkKSwKLQkgICAgICAgICAgICAgICBCVUlEX0xPKHBkbi0+cGhiLT5idWlkKSwgTlVMTCwgMCwKKwkgICAgICAgICAgICAgICBCVUlEX0xPKHBkbi0+cGhiLT5idWlkKSwKKwkgICAgICAgICAgICAgICB2aXJ0X3RvX3BoeXMoZHJpdmVyX2xvZyksIGxvZ2xlbiwKIAkgICAgICAgICAgICAgICB2aXJ0X3RvX3BoeXMoc2xvdF9lcnJidWYpLAogCSAgICAgICAgICAgICAgIGVlaF9lcnJvcl9idWZfc2l6ZSwKIAkgICAgICAgICAgICAgICBzZXZlcml0eSk7CkBAIC0xNDQsNiArMTU2LDg0IEBACiB9CiAKIC8qKgorICogZ2F0aGVyX3BjaV9kYXRhIC0gY29weSBhc3NvcnRlZCBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVycyB0byBidWZmCisgKiBAcGRuOiBkZXZpY2UgdG8gcmVwb3J0IGRhdGEgZm9yCisgKiBAYnVmOiBwb2ludCB0byBidWZmZXIgaW4gd2hpY2ggdG8gbG9nCisgKiBAbGVuOiBhbW91bnQgb2Ygcm9vbSBpbiBidWZmZXIKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FwdHVyZXMgYXNzb3J0ZWQgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGF0YSwKKyAqIGFuZCBwdXRzIHRoZW0gaW50byBhIGJ1ZmZlciBmb3IgUlRBUyBlcnJvciBsb2dnaW5nLgorICovCitzdGF0aWMgc2l6ZV90IGdhdGhlcl9wY2lfZGF0YShzdHJ1Y3QgcGNpX2RuICpwZG4sIGNoYXIgKiBidWYsIHNpemVfdCBsZW4pCit7CisJdTMyIGNmZzsKKwlpbnQgY2FwLCBpOworCWludCBuID0gMDsKKworCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBsZW4tbiwgIiVzXG4iLCBwZG4tPm5vZGUtPmZ1bGxfbmFtZSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiRUVIOiBvZiBub2RlPSVzXG4iLCBwZG4tPm5vZGUtPmZ1bGxfbmFtZSk7CisKKwlydGFzX3JlYWRfY29uZmlnKHBkbiwgUENJX1ZFTkRPUl9JRCwgNCwgJmNmZyk7CisJbiArPSBzY25wcmludGYoYnVmK24sIGxlbi1uLCAiZGV2L3ZlbmQ6JTA4eFxuIiwgY2ZnKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJFRUg6IFBDSSBkZXZpY2UvdmVuZG9yOiAlMDh4XG4iLCBjZmcpOworCisJcnRhc19yZWFkX2NvbmZpZyhwZG4sIFBDSV9DT01NQU5ELCA0LCAmY2ZnKTsKKwluICs9IHNjbnByaW50ZihidWYrbiwgbGVuLW4sICJjbWQvc3RhdDoleFxuIiwgY2ZnKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJFRUg6IFBDSSBjbWQvc3RhdHVzIHJlZ2lzdGVyOiAlMDh4XG4iLCBjZmcpOworCisJLyogRHVtcCBvdXQgdGhlIFBDSS1YIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdzICovCisJY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZG4tPnBjaWRldiwgUENJX0NBUF9JRF9QQ0lYKTsKKwlpZiAoY2FwKSB7CisJCXJ0YXNfcmVhZF9jb25maWcocGRuLCBjYXAsIDQsICZjZmcpOworCQluICs9IHNjbnByaW50ZihidWYrbiwgbGVuLW4sICJwY2l4LWNtZDoleFxuIiwgY2ZnKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRUVIOiBQQ0ktWCBjbWQ6ICUwOHhcbiIsIGNmZyk7CisKKwkJcnRhc19yZWFkX2NvbmZpZyhwZG4sIGNhcCs0LCA0LCAmY2ZnKTsKKwkJbiArPSBzY25wcmludGYoYnVmK24sIGxlbi1uLCAicGNpeC1zdGF0OiV4XG4iLCBjZmcpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFRUg6IFBDSS1YIHN0YXR1czogJTA4eFxuIiwgY2ZnKTsKKwl9CisKKwkvKiBJZiBQQ0ktRSBjYXBhYmxlLCBkdW1wIFBDSS1FIGNhcCAxMCwgYW5kIHRoZSBBRVIgKi8KKwljYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkbi0+cGNpZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKGNhcCkgeworCQluICs9IHNjbnByaW50ZihidWYrbiwgbGVuLW4sICJwY2ktZSBjYXAxMDpcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiRUVIOiBQQ0ktRSBjYXBhYmlsaXRpZXMgYW5kIHN0YXR1cyBmb2xsb3c6XG4iKTsKKworCQlmb3IgKGk9MDsgaTw9ODsgaSsrKSB7CisJCQlydGFzX3JlYWRfY29uZmlnKHBkbiwgY2FwKzQqaSwgNCwgJmNmZyk7CisJCQluICs9IHNjbnByaW50ZihidWYrbiwgbGVuLW4sICIlMDJ4OiV4XG4iLCA0KmksIGNmZyk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJFRUg6IFBDSS1FICUwMng6ICUwOHhcbiIsIGksIGNmZyk7CisJCX0KKworCQljYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZG4tPnBjaWRldixQQ0lfRVhUX0NBUF9JRF9FUlIpOworCQlpZiAoY2FwKSB7CisJCQluICs9IHNjbnByaW50ZihidWYrbiwgbGVuLW4sICJwY2ktZSBBRVI6XG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiRUVIOiBQQ0ktRSBBRVIgY2FwYWJpbGl0eSByZWdpc3RlciBzZXQgZm9sbG93czpcbiIpOworCisJCQlmb3IgKGk9MDsgaTwxNDsgaSsrKSB7CisJCQkJcnRhc19yZWFkX2NvbmZpZyhwZG4sIGNhcCs0KmksIDQsICZjZmcpOworCQkJCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBsZW4tbiwgIiUwMng6JXhcbiIsIDQqaSwgY2ZnKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJFRUg6IFBDSS1FIEFFUiAlMDJ4OiAlMDh4XG4iLCBpLCBjZmcpOworCQkJfQorCQl9CisJfQorCXJldHVybiBuOworfQorCit2b2lkIGVlaF9zbG90X2Vycm9yX2RldGFpbChzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCBzZXZlcml0eSkKK3sKKwlzaXplX3QgbG9nbGVuID0gMDsKKwlwY2lfcmVnc19idWZbMF0gPSAwOworCisJcnRhc19wY2lfZW5hYmxlKHBkbiwgRUVIX1RIQVdfTU1JTyk7CisJbG9nbGVuID0gZ2F0aGVyX3BjaV9kYXRhKHBkbiwgcGNpX3JlZ3NfYnVmLCBFRUhfUENJX1JFR1NfTE9HX0xFTik7CisKKwlydGFzX3Nsb3RfZXJyb3JfZGV0YWlsKHBkbiwgc2V2ZXJpdHksIHBjaV9yZWdzX2J1ZiwgbG9nbGVuKTsKK30KKworLyoqCiAgKiByZWFkX3Nsb3RfcmVzZXRfc3RhdGUgLSBSZWFkIHRoZSByZXNldCBzdGF0ZSBvZiBhIGRldmljZSBub2RlJ3Mgc2xvdAogICogQGRuOiBkZXZpY2Ugbm9kZSB0byByZWFkCiAgKiBAcmV0czogYXJyYXkgdG8gcmV0dXJuIHJlc3VsdHMgaW4KQEAgLTU4MCw2ICs2NzAsMzYgQEAKIH0KIAogLyoqCisgKiBwY2liaW9zX3NldF9wY2llX3Nsb3RfcmVzZXQgLSBTZXQgUENJLUUgcmVzZXQgc3RhdGUKKyAqIEBkZXY6CXBjaSBkZXZpY2Ugc3RydWN0CisgKiBAc3RhdGU6CXJlc2V0IHN0YXRlIHRvIGVudGVyCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCTAgaWYgc3VjY2VzcworICoqLworaW50IHBjaWJpb3Nfc2V0X3BjaWVfcmVzZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgZW51bSBwY2llX3Jlc2V0X3N0YXRlIHN0YXRlKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKwlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBQQ0lfRE4oZG4pOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgcGNpZV9kZWFzc2VydF9yZXNldDoKKwkJcnRhc19wY2lfc2xvdF9yZXNldChwZG4sIDApOworCQlicmVhazsKKwljYXNlIHBjaWVfaG90X3Jlc2V0OgorCQlydGFzX3BjaV9zbG90X3Jlc2V0KHBkbiwgMSk7CisJCWJyZWFrOworCWNhc2UgcGNpZV93YXJtX3Jlc2V0OgorCQlydGFzX3BjaV9zbG90X3Jlc2V0KHBkbiwgMyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX07CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBydGFzX3NldF9zbG90X3Jlc2V0IC0tIGFzc2VydCB0aGUgcGNpICNSU1QgbGluZSBmb3IgMS80IHNlY29uZAogICogQHBkbjogcGNpIGRldmljZSBub2RlIHRvIGJlIHJlc2V0LgogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IDMxNzBlMDAuLjE2MWE1ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtMzYxLDExICszNjEsMTIgQEAKIAkJZ290byBoYXJkX2ZhaWw7CiAJfQogCi0JZWVoX3Nsb3RfZXJyb3JfZGV0YWlsKGZyb3plbl9wZG4sIDEgLyogVGVtcG9yYXJ5IEVycm9yICovKTsKIAlwcmludGsoS0VSTl9XQVJOSU5HCi0JICAgIkVFSDogVGhpcyBQQ0kgZGV2aWNlIGhhcyBmYWlsZWQgJWQgdGltZXMgc2luY2UgbGFzdCByZWJvb3Q6ICIKLQkJImxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lc1xuIiwKLQkJZnJvemVuX3Bkbi0+ZWVoX2ZyZWV6ZV9jb3VudCwgbG9jYXRpb24sIGRydl9zdHIsIHBjaV9zdHIpOworCSAgICJFRUg6IFRoaXMgUENJIGRldmljZSBoYXMgZmFpbGVkICVkIHRpbWVzIGluIHRoZSBsYXN0IGhvdXI6XG4iLAorCQlmcm96ZW5fcGRuLT5lZWhfZnJlZXplX2NvdW50KTsKKwlwcmludGsoS0VSTl9XQVJOSU5HCisJCSJFRUg6IGxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lc1xuIiwKKwkJbG9jYXRpb24sIGRydl9zdHIsIHBjaV9zdHIpOwogCiAJLyogV2FsayB0aGUgdmFyaW91cyBkZXZpY2UgZHJpdmVycyBhdHRhY2hlZCB0byB0aGlzIHNsb3QgdGhyb3VnaAogCSAqIGEgcmVzZXQgc2VxdWVuY2UsIGdpdmluZyBlYWNoIGFuIG9wcG9ydHVuaXR5IHRvIGRvIHdoYXQgaXQgbmVlZHMKQEAgLTM3NSw2ICszNzYsMTIgQEAKIAkgKi8KIAlwY2lfd2Fsa19idXMoZnJvemVuX2J1cywgZWVoX3JlcG9ydF9lcnJvciwgJnJlc3VsdCk7CiAKKwkvKiBTaW5jZSBydGFzIG1heSBlbmFibGUgTU1JTyB3aGVuIHBvc3RpbmcgdGhlIGVycm9yIGxvZywKKwkgKiBkb24ndCBwb3N0IHRoZSBlcnJvciBsb2cgdW50aWwgYWZ0ZXIgYWxsIGRldiBkcml2ZXJzCisJICogaGF2ZSBiZWVuIGluZm9ybWVkLgorCSAqLworCWVlaF9zbG90X2Vycm9yX2RldGFpbChmcm96ZW5fcGRuLCBFRUhfTE9HX1RFTVBfRkFJTFVSRSk7CisKIAkvKiBJZiBhbGwgZGV2aWNlIGRyaXZlcnMgd2VyZSBFRUgtdW5hd2FyZSwgdGhlbiBzaHV0CiAJICogZG93biBhbGwgb2YgdGhlIGRldmljZSBkcml2ZXJzLCBhbmQgaG9wZSB0aGV5CiAJICogZ28gZG93biB3aWxsaW5nbHksIHdpdGhvdXQgcGFuaWNpbmcgdGhlIHN5c3RlbS4KQEAgLTQ2NCw3ICs0NzEsNyBAQAogCQlsb2NhdGlvbiwgZHJ2X3N0ciwgcGNpX3N0cik7CiAKIHBlcm1fZXJyb3I6Ci0JZWVoX3Nsb3RfZXJyb3JfZGV0YWlsKGZyb3plbl9wZG4sIDIgLyogUGVybWFuZW50IEVycm9yICovKTsKKwllZWhfc2xvdF9lcnJvcl9kZXRhaWwoZnJvemVuX3BkbiwgRUVIX0xPR19QRVJNX0ZBSUxVUkUpOwogCiAJLyogTm90aWZ5IGFsbCBkZXZpY2VzIHRoYXQgdGhleSdyZSBhYm91dCB0byBnbyBkb3duLiAqLwogCXBjaV93YWxrX2J1cyhmcm96ZW5fYnVzLCBlZWhfcmVwb3J0X2ZhaWx1cmUsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYwppbmRleCA2NjY2NWM4Li5iZTE3ZDIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYwpAQCAtNTA0LDYgKzUwNCwxMiBAQAogCQkJYnJlYWs7CiAJfQogCisJaWYgKCFwZG4gfHwgIVBDSV9ETihwZG4pKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBjaV9kbWFfZGV2X3NldHVwX3BTZXJpZXNMUDogIgorCQkgICAgICAgIm5vIERNQSB3aW5kb3cgZm91bmQgZm9yIHBjaSBkZXY9JXMgZG49JXNcbiIsCisJCQkJIHBjaV9uYW1lKGRldiksIGRuPyBkbi0+ZnVsbF9uYW1lIDogIjxudWxsPiIpOworCQlyZXR1cm47CisJfQogCURCRygiICBwYXJlbnQgaXMgJXNcbiIsIHBkbi0+ZnVsbF9uYW1lKTsKIAogCS8qIENoZWNrIGZvciBwYXJlbnQgPT0gTlVMTCBzbyB3ZSBkb24ndCB0cnkgdG8gc2V0dXAgdGhlIGVtcHR5IEVBRFMKQEAgLTUxNCw3ICs1MjAsNiBAQAogCQlkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IFBDSV9ETihwZG4pLT5pb21tdV90YWJsZTsKIAkJcmV0dXJuOwogCX0KLQlEQkcoIiAgZm91bmQgRE1BIHdpbmRvdywgdGFibGU6ICVwXG4iLCBwY2ktPmlvbW11X3RhYmxlKTsKIAogCXBjaSA9IFBDSV9ETihwZG4pOwogCWlmICghcGNpLT5pb21tdV90YWJsZSkgewpAQCAtNTI4LDYgKzUzMyw4IEBACiAKIAkJcGNpLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsLCBwY2ktPnBoYi0+bm9kZSk7CiAJCURCRygiICBjcmVhdGVkIHRhYmxlOiAlcFxuIiwgcGNpLT5pb21tdV90YWJsZSk7CisJfSBlbHNlIHsKKwkJREJHKCIgIGZvdW5kIERNQSB3aW5kb3csIHRhYmxlOiAlcFxuIiwgcGNpLT5pb21tdV90YWJsZSk7CiAJfQogCiAJZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSBwY2ktPmlvbW11X3RhYmxlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2tleGVjLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMva2V4ZWMuYwppbmRleCBhZjI2ODU2Li40MTJhNWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMva2V4ZWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMva2V4ZWMuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgogI2luY2x1ZGUgPGFzbS9tcGljLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiAjaW5jbHVkZSAicHNlcmllcy5oIgogI2luY2x1ZGUgInhpY3MuaCIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCmluZGV4IDNhNzBlOGEuLjM2MmRmYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwpAQCAtMjMxLDEzICsyMzEsMTMgQEAKIAkJZ290byBvdXQ7CiAJdnRlcm1ubyA9IHRlcm1ub1swXTsKIAotCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShzdGRvdXRfbm9kZSwgImh2dGVybTEiKSkgeworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShzdGRvdXRfbm9kZSwgImh2dGVybTEiKSkgewogCQl1ZGJnX3B1dGMgPSB1ZGJnX3B1dGNMUDsKIAkJdWRiZ19nZXRjID0gdWRiZ19nZXRjTFA7CiAJCXVkYmdfZ2V0Y19wb2xsID0gdWRiZ19nZXRjX3BvbGxMUDsKIAkJaWYgKGFkZF9jb25zb2xlKQogCQkJYWRkX3ByZWZlcnJlZF9jb25zb2xlKCJodmMiLCB0ZXJtbm9bMF0gJiAweGZmLCBOVUxMKTsKLQl9IGVsc2UgaWYgKGRldmljZV9pc19jb21wYXRpYmxlKHN0ZG91dF9ub2RlLCAiaHZ0ZXJtLXByb3RvY29sIikpIHsKKwl9IGVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHN0ZG91dF9ub2RlLCAiaHZ0ZXJtLXByb3RvY29sIikpIHsKIAkJdnRlcm1ubyA9IHRlcm1ub1swXTsKIAkJdWRiZ19wdXRjID0gdWRiZ19odnNpX3B1dGM7CiAJCXVkYmdfZ2V0YyA9IHVkYmdfaHZzaV9nZXRjOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNjNlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiBKYWtlIE1vaWxhbmVuIDxtb2lsYW5lbkBhdXN0aW4uaWJtLmNvbT4sIElCTSBDb3JwLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNyBNaWNoYWVsIEVsbGVybWFuLCBJQk0gQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKworI2luY2x1ZGUgPGFzbS9ydGFzLmg+CisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CisKK3N0YXRpYyBpbnQgcXVlcnlfdG9rZW4sIGNoYW5nZV90b2tlbjsKKworI2RlZmluZSBSVEFTX1FVRVJZX0ZOCQkwCisjZGVmaW5lIFJUQVNfQ0hBTkdFX0ZOCQkxCisjZGVmaW5lIFJUQVNfUkVTRVRfRk4JCTIKKyNkZWZpbmUgUlRBU19DSEFOR0VfTVNJX0ZOCTMKKyNkZWZpbmUgUlRBU19DSEFOR0VfTVNJWF9GTgk0CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RuICpnZXRfcGRuKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJc3RydWN0IHBjaV9kbiAqcGRuOworCisJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7CisJaWYgKCFkbikgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJydGFzX21zaTogTm8gT0YgZGV2aWNlIG5vZGVcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwZG4gPSBQQ0lfRE4oZG4pOworCWlmICghcGRuKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJ0YXNfbXNpOiBObyBQQ0kgRE5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcGRuOworfQorCisvKiBSVEFTIEhlbHBlcnMgKi8KKworc3RhdGljIGludCBydGFzX2NoYW5nZV9tc2koc3RydWN0IHBjaV9kbiAqcGRuLCB1MzIgZnVuYywgdTMyIG51bV9pcnFzKQoreworCXUzMiBhZGRyLCBzZXFfbnVtLCBydGFzX3JldFszXTsKKwl1bnNpZ25lZCBsb25nIGJ1aWQ7CisJaW50IHJjOworCisJYWRkciA9IHJ0YXNfY29uZmlnX2FkZHIocGRuLT5idXNubywgcGRuLT5kZXZmbiwgMCk7CisJYnVpZCA9IHBkbi0+cGhiLT5idWlkOworCisJc2VxX251bSA9IDE7CisJZG8geworCQlpZiAoZnVuYyA9PSBSVEFTX0NIQU5HRV9NU0lfRk4gfHwgZnVuYyA9PSBSVEFTX0NIQU5HRV9NU0lYX0ZOKQorCQkJcmMgPSBydGFzX2NhbGwoY2hhbmdlX3Rva2VuLCA2LCA0LCBydGFzX3JldCwgYWRkciwKKwkJCQkJQlVJRF9ISShidWlkKSwgQlVJRF9MTyhidWlkKSwKKwkJCQkJZnVuYywgbnVtX2lycXMsIHNlcV9udW0pOworCQllbHNlCisJCQlyYyA9IHJ0YXNfY2FsbChjaGFuZ2VfdG9rZW4sIDYsIDMsIHJ0YXNfcmV0LCBhZGRyLAorCQkJCQlCVUlEX0hJKGJ1aWQpLCBCVUlEX0xPKGJ1aWQpLAorCQkJCQlmdW5jLCBudW1faXJxcywgc2VxX251bSk7CisKKwkJc2VxX251bSA9IHJ0YXNfcmV0WzFdOworCX0gd2hpbGUgKHJ0YXNfYnVzeV9kZWxheShyYykpOworCisJaWYgKHJjID09IDApIC8qIFN1Y2Nlc3MgKi8KKwkJcmMgPSBydGFzX3JldFswXTsKKworCXByX2RlYnVnKCJydGFzX21zaTogaWJtLGNoYW5nZV9tc2koZnVuYz0lZCxudW09JWQpID0gKCVkKVxuIiwKKwkJIGZ1bmMsIG51bV9pcnFzLCByYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHJ0YXNfZGlzYWJsZV9tc2koc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBjaV9kbiAqcGRuOworCisJcGRuID0gZ2V0X3BkbihwZGV2KTsKKwlpZiAoIXBkbikKKwkJcmV0dXJuOworCisJaWYgKHJ0YXNfY2hhbmdlX21zaShwZG4sIFJUQVNfQ0hBTkdFX0ZOLCAwKSAhPSAwKQorCQlwcl9kZWJ1ZygicnRhc19tc2k6IFNldHRpbmcgTVNJcyB0byAwIGZhaWxlZCFcbiIpOworfQorCitzdGF0aWMgaW50IHJ0YXNfcXVlcnlfaXJxX251bWJlcihzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCBvZmZzZXQpCit7CisJdTMyIGFkZHIsIHJ0YXNfcmV0WzJdOworCXVuc2lnbmVkIGxvbmcgYnVpZDsKKwlpbnQgcmM7CisKKwlhZGRyID0gcnRhc19jb25maWdfYWRkcihwZG4tPmJ1c25vLCBwZG4tPmRldmZuLCAwKTsKKwlidWlkID0gcGRuLT5waGItPmJ1aWQ7CisKKwlkbyB7CisJCXJjID0gcnRhc19jYWxsKHF1ZXJ5X3Rva2VuLCA0LCAzLCBydGFzX3JldCwgYWRkciwKKwkJCSAgICAgICBCVUlEX0hJKGJ1aWQpLCBCVUlEX0xPKGJ1aWQpLCBvZmZzZXQpOworCX0gd2hpbGUgKHJ0YXNfYnVzeV9kZWxheShyYykpOworCisJaWYgKHJjKSB7CisJCXByX2RlYnVnKCJydGFzX21zaTogZXJyb3IgKCVkKSBxdWVyeWluZyBzb3VyY2UgbnVtYmVyXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gcnRhc19yZXRbMF07Cit9CisKK3N0YXRpYyB2b2lkIHJ0YXNfdGVhcmRvd25fbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZwZGV2LT5tc2lfbGlzdCwgbGlzdCkgeworCQlpZiAoZW50cnktPmlycSA9PSBOT19JUlEpCisJCQljb250aW51ZTsKKworCQlzZXRfaXJxX21zaShlbnRyeS0+aXJxLCBOVUxMKTsKKwkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhlbnRyeS0+aXJxKTsKKwl9CisKKwlydGFzX2Rpc2FibGVfbXNpKHBkZXYpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3JlcV9tc2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJc3RydWN0IHBjaV9kbiAqcGRuOworCWNvbnN0IHUzMiAqcmVxX21zaTsKKworCXBkbiA9IGdldF9wZG4ocGRldik7CisJaWYgKCFwZG4pCisJCXJldHVybiAtRU5PREVWOworCisJZG4gPSBwZG4tPm5vZGU7CisKKwlyZXFfbXNpID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLHJlcSNtc2kiLCBOVUxMKTsKKwlpZiAoIXJlcV9tc2kpIHsKKwkJcHJfZGVidWcoInJ0YXNfbXNpOiBObyBpYm0scmVxI21zaSBvbiAlc1xuIiwgZG4tPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWlmICgqcmVxX21zaSA8IG52ZWMpIHsKKwkJcHJfZGVidWcoInJ0YXNfbXNpOiBpYm0scmVxI21zaSByZXF1ZXN0cyA8ICVkIE1TSXNcbiIsIG52ZWMpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGFzX21zaV9jaGVja19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKK3sKKwlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSVgpCisJCXByX2RlYnVnKCJydGFzX21zaTogTVNJLVggdW50ZXN0ZWQsIHRyeWluZyBhbnl3YXkuXG4iKTsKKworCXJldHVybiBjaGVja19yZXFfbXNpKHBkZXYsIG52ZWMpOworfQorCitzdGF0aWMgaW50IHJ0YXNfc2V0dXBfbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgcGNpX2RuICpwZG47CisJaW50IGh3aXJxLCB2aXJxLCBpLCByYzsKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OworCisJcGRuID0gZ2V0X3BkbihwZGV2KTsKKwlpZiAoIXBkbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIFRyeSB0aGUgbmV3IG1vcmUgZXhwbGljaXQgZmlybXdhcmUgaW50ZXJmYWNlLCBpZiB0aGF0IGZhaWxzIGZhbGwKKwkgKiBiYWNrIHRvIHRoZSBvbGQgaW50ZXJmYWNlLiBUaGUgb2xkIGludGVyZmFjZSBpcyBrbm93biB0byBuZXZlcgorCSAqIHJldHVybiBNU0ktWHMuCisJICovCisJaWYgKHR5cGUgPT0gUENJX0NBUF9JRF9NU0kpIHsKKwkJcmMgPSBydGFzX2NoYW5nZV9tc2kocGRuLCBSVEFTX0NIQU5HRV9NU0lfRk4sIG52ZWMpOworCisJCWlmIChyYyAhPSBudmVjKSB7CisJCQlwcl9kZWJ1ZygicnRhc19tc2k6IHRyeWluZyB0aGUgb2xkIGZpcm13YXJlIGNhbGwuXG4iKTsKKwkJCXJjID0gcnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfRk4sIG52ZWMpOworCQl9CisJfSBlbHNlCisJCXJjID0gcnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfTVNJWF9GTiwgbnZlYyk7CisKKwlpZiAocmMgIT0gbnZlYykgeworCQlwcl9kZWJ1ZygicnRhc19tc2k6IHJ0YXNfY2hhbmdlX21zaSgpIGZhaWxlZFxuIik7CisKKwkJLyoKKwkJICogSW4gY2FzZSBvZiBhbiBlcnJvciBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIHRoZSBkZXZpY2UgaXMKKwkJICogbGVmdCB3aXRoIE1TSSBlbmFibGVkIG9yIG5vdCwgc28gd2UgZXhwbGljaXRseSBkaXNhYmxlLgorCQkgKi8KKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlpID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKKwkJaHdpcnEgPSBydGFzX3F1ZXJ5X2lycV9udW1iZXIocGRuLCBpKTsKKwkJaWYgKGh3aXJxIDwgMCkgeworCQkJcmMgPSBod2lycTsKKwkJCXByX2RlYnVnKCJydGFzX21zaTogZXJyb3IgKCVkKSBnZXR0aW5nIGh3aXJxXG4iLCByYyk7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhOVUxMLCBod2lycSk7CisKKwkJaWYgKHZpcnEgPT0gTk9fSVJRKSB7CisJCQlwcl9kZWJ1ZygicnRhc19tc2k6IEZhaWxlZCBtYXBwaW5nIGh3aXJxICVkXG4iLCBod2lycSk7CisJCQlyYyA9IC1FTk9TUEM7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicnRhc19tc2k6IGFsbG9jYXRlZCB2aXJxICVkXG4iLCB2aXJxKTsKKwkJc2V0X2lycV9tc2kodmlycSwgZW50cnkpOworCQl1bm1hc2tfbXNpX2lycSh2aXJxKTsKKwl9CisKKwlyZXR1cm4gMDsKKworIG91dF9mcmVlOgorCXJ0YXNfdGVhcmRvd25fbXNpX2lycXMocGRldik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBydGFzX21zaV9wY2lfaXJxX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCS8qIE5vIExTSSAtPiBsZWF2ZSBNU0lzIChpZiBhbnkpIGNvbmZpZ3VyZWQgKi8KKwlpZiAocGRldi0+aXJxID09IE5PX0lSUSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJydGFzX21zaTogbm8gTFNJLCBub3RoaW5nIHRvIGRvLlxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBObyBNU0kgLT4gTVNJcyBjYW4ndCBoYXZlIGJlZW4gYXNzaWduZWQgYnkgZncsIGxlYXZlIExTSSAqLworCWlmIChjaGVja19yZXFfbXNpKHBkZXYsIDEpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJ0YXNfbXNpOiBubyByZXEjbXNpLCBub3RoaW5nIHRvIGRvLlxuIik7CisJCXJldHVybjsKKwl9CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJydGFzX21zaTogZGlzYWJsaW5nIGV4aXN0aW5nIE1TSS5cbiIpOworCXJ0YXNfZGlzYWJsZV9tc2kocGRldik7Cit9CisKK3N0YXRpYyBpbnQgcnRhc19tc2lfaW5pdCh2b2lkKQoreworCXF1ZXJ5X3Rva2VuICA9IHJ0YXNfdG9rZW4oImlibSxxdWVyeS1pbnRlcnJ1cHQtc291cmNlLW51bWJlciIpOworCWNoYW5nZV90b2tlbiA9IHJ0YXNfdG9rZW4oImlibSxjaGFuZ2UtbXNpIik7CisKKwlpZiAoKHF1ZXJ5X3Rva2VuID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKSB8fAorCQkJKGNoYW5nZV90b2tlbiA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkpIHsKKwkJcHJfZGVidWcoInJ0YXNfbXNpOiBubyBSVEFTIHRva2Vucywgbm8gTVNJIHN1cHBvcnQuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByX2RlYnVnKCJydGFzX21zaTogUmVnaXN0ZXJpbmcgUlRBUyBNU0kgY2FsbGJhY2tzLlxuIik7CisKKwlXQVJOX09OKHBwY19tZC5zZXR1cF9tc2lfaXJxcyk7CisJcHBjX21kLnNldHVwX21zaV9pcnFzID0gcnRhc19zZXR1cF9tc2lfaXJxczsKKwlwcGNfbWQudGVhcmRvd25fbXNpX2lycXMgPSBydGFzX3RlYXJkb3duX21zaV9pcnFzOworCXBwY19tZC5tc2lfY2hlY2tfZGV2aWNlID0gcnRhc19tc2lfY2hlY2tfZGV2aWNlOworCisJV0FSTl9PTihwcGNfbWQucGNpX2lycV9maXh1cCk7CisJcHBjX21kLnBjaV9pcnFfZml4dXAgPSBydGFzX21zaV9wY2lfaXJxX2ZpeHVwOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHJ0YXNfbXNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCmluZGV4IGZkYzFhMzYuLmZmYWY2YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKQEAgLTc5LDYgKzc5LDcgQEAKIAkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKGRldik7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpYmlvc19yZW1vdmVfcGNpX2RldmljZXMpOwogCiAvKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgcGNpX2J1c19hZGRfZGV2aWNlcyAqLwogdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BzZXJpZXMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wc2VyaWVzLmgKaW5kZXggMjJiYzAxOS4uMjcyOWQ1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BzZXJpZXMuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcHNlcmllcy5oCkBAIC0yMSw4ICsyMSw4IEBACiBleHRlcm4gdm9pZCBzbXBfaW5pdF9wc2VyaWVzX21waWModm9pZCk7CiBleHRlcm4gdm9pZCBzbXBfaW5pdF9wc2VyaWVzX3hpY3Modm9pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzbXBfaW5pdF9wc2VyaWVzX21waWModm9pZCkgeyB9Owotc3RhdGljIGlubGluZSBzbXBfaW5pdF9wc2VyaWVzX3hpY3Modm9pZCkgeyB9Oworc3RhdGljIGlubGluZSB2b2lkIHNtcF9pbml0X3BzZXJpZXNfbXBpYyh2b2lkKSB7IH07CitzdGF0aWMgaW5saW5lIHZvaWQgc21wX2luaXRfcHNlcmllc194aWNzKHZvaWQpIHsgfTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tFWEVDCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCmluZGV4IDMzZWVjMjguLjQ3MGRiNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAogCS8qIExvb2sgZm9yIGNhc2NhZGUgKi8KIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpCi0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImNocnAsaWljIikpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiY2hycCxpaWMiKSkgewogCQkJY2FzY2FkZSA9IG5wOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCmluZGV4IDg5NmNiZjMuLmYxZGY5NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJICogbGlrZSB2ZGV2aWNlcywgZXZlbnRzLCBldGMuLi4gVGhlIHRyaWNrIHdlIHVzZSBoZXJlIGlzIHRvIG1hdGNoCiAJICogZXZlcnl0aGluZyBoZXJlIGV4Y2VwdCB0aGUgbGVnYWN5IDgyNTkgd2hpY2ggaXMgY29tcGF0aWJsZSAiY2hycCxpaWMiCiAJICovCi0JcmV0dXJuICFkZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCAiY2hycCxpaWMiKTsKKwlyZXR1cm4gIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5vZGUsICJjaHJwLGlpYyIpOwogfQogCiBzdGF0aWMgaW50IHhpY3NfaG9zdF9tYXBfZGlyZWN0KHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCkBAIC02MTgsNyArNjE4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGludGFjayA9IDA7CiAKIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpCi0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImNocnAsaWljIikpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiY2hycCxpaWMiKSkgewogCQkJZm91bmQgPSBucDsKIAkJCWJyZWFrOwogCQl9CkBAIC03NTIsNiArNzUyLDcgQEAKIHZvaWQgeGljc19yZXF1ZXN0X0lQSXModm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaXBpOworCWludCByYzsKIAogCWlwaSA9IGlycV9jcmVhdGVfbWFwcGluZyh4aWNzX2hvc3QsIFhJQ1NfSVBJKTsKIAlCVUdfT04oaXBpID09IE5PX0lSUSk7CkBAIC03NjIsMTEgKzc2MywxMiBAQAogCSAqLwogCXNldF9pcnFfaGFuZGxlcihpcGksIGhhbmRsZV9wZXJjcHVfaXJxKTsKIAlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKLQkJcmVxdWVzdF9pcnEoaXBpLCB4aWNzX2lwaV9hY3Rpb25fbHBhciwgSVJRRl9ESVNBQkxFRCwKLQkJCSAgICAiSVBJIiwgTlVMTCk7CisJCXJjID0gcmVxdWVzdF9pcnEoaXBpLCB4aWNzX2lwaV9hY3Rpb25fbHBhciwgSVJRRl9ESVNBQkxFRCwKKwkJCQkiSVBJIiwgTlVMTCk7CiAJZWxzZQotCQlyZXF1ZXN0X2lycShpcGksIHhpY3NfaXBpX2FjdGlvbl9kaXJlY3QsIElSUUZfRElTQUJMRUQsCi0JCQkgICAgIklQSSIsIE5VTEwpOworCQlyYyA9IHJlcXVlc3RfaXJxKGlwaSwgeGljc19pcGlfYWN0aW9uX2RpcmVjdCwgSVJRRl9ESVNBQkxFRCwKKwkJCQkiSVBJIiwgTlVMTCk7CisJQlVHX09OKHJjKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCmluZGV4IGU5NmNhOTYuLmMzY2UwYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQpAQCAtMiw3ICsyLDkgQEAKIEVYVFJBX0NGTEFHUwkJCSs9IC1tbm8tbWluaW1hbC10b2MKIGVuZGlmCiAKLW9iai0kKENPTkZJR19NUElDKQkJKz0gbXBpYy5vCittcGljLW1zaS1vYmotJChDT05GSUdfUENJX01TSSkJKz0gbXBpY19tc2kubyBtcGljX3UzbXNpLm8KK29iai0kKENPTkZJR19NUElDKQkJKz0gbXBpYy5vICQobXBpYy1tc2ktb2JqLXkpCisKIG9iai0kKENPTkZJR19QUENfSU5ESVJFQ1RfUENJKQkrPSBpbmRpcmVjdF9wY2kubwogb2JqLSQoQ09ORklHX1BQQ19NUEMxMDYpCSs9IGdyYWNrbGUubwogb2JqLSQoQ09ORklHX1BQQ19EQ1IpCQkrPSBkY3IubwpAQCAtMTQsNiArMTYsOCBAQAogb2JqLSQoQ09ORklHX0ZTTF9QQ0lFKQkJKz0gZnNsX3BjaWUubwogb2JqLSQoQ09ORklHX1RTSTEwOF9CUklER0UpCSs9IHRzaTEwOF9wY2kubyB0c2kxMDhfZGV2Lm8KIG9iai0kKENPTkZJR19RVUlDQ19FTkdJTkUpCSs9IHFlX2xpYi8KK212NjR4NjAtJChDT05GSUdfUENJKQkJKz0gbXY2NHg2MF9wY2kubworb2JqLSQoQ09ORklHX01WNjRYNjApCQkrPSAkKG12NjR4NjAteSkgbXY2NHg2MF9waWMubyBtdjY0eDYwX2Rldi5vCiAKICMgY29udGFpbnMgb25seSB0aGUgc3VzcGVuZCBoYW5kbGVyIGZvciB0aW1lCiBvYmotJChDT05GSUdfUE0pCQkrPSB0aW1lci5vCkBAIC0yNiw3ICszMCw2IEBACiAKICMgVGVtcG9yYXJ5IGhhY2sgdW50aWwgd2UgaGF2ZSBtaWdyYXRlZCB0byBhc20tcG93ZXJwYwogaWZlcSAoJChBUkNIKSxwb3dlcnBjKQotb2JqLSQoQ09ORklHX01URCkJCSs9IHJvbS5vCiBvYmotJChDT05GSUdfQ1BNMikJCSs9IGNwbTJfY29tbW9uLm8gY3BtMl9waWMubwogb2JqLSQoQ09ORklHXzh4eCkJCSs9IG1wYzh4eF9waWMubyBjb21tcHJvYy5vCiBvYmotJChDT05GSUdfVUNPREVfUEFUQ0gpCSs9IG1pY3JvcGF0Y2gubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jb21tcHJvYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jb21tcHJvYy5jCmluZGV4IDliNGZhZmQuLjRmNjdiODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY29tbXByb2MuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NvbW1wcm9jLmMKQEAgLTMzMCw3ICszMzAsNyBAQAogCSAqIHdpdGggdGhlIHByb2Nlc3NvciBhbmQgdGhlIG1pY3JvY29kZSBwYXRjaGVzIGFwcGxpZWQgLyBhY3RpdmF0ZWQuCiAJICogQnV0IHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGF0IGxlYXN0IHNhZmUuCiAJICovCi0JcmhfYXR0YWNoX3JlZ2lvbigmY3BtX2RwbWVtX2luZm8sICh2b2lkICopQ1BNX0RBVEFPTkxZX0JBU0UsIENQTV9EQVRBT05MWV9TSVpFKTsKKwlyaF9hdHRhY2hfcmVnaW9uKCZjcG1fZHBtZW1faW5mbywgQ1BNX0RBVEFPTkxZX0JBU0UsIENQTV9EQVRBT05MWV9TSVpFKTsKIH0KIAogLyoKQEAgLTMzOCw5ICszMzgsOSBAQAogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9mZnNldCBpbnRvIHRoZSBEUFJBTSBhcmVhLgogICogVXNlIGNwbV9kcHJhbV9hZGRyKCkgdG8gZ2V0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGFyZWEuCiAgKi8KLXVpbnQgY3BtX2RwYWxsb2ModWludCBzaXplLCB1aW50IGFsaWduKQordW5zaWduZWQgbG9uZyBjcG1fZHBhbGxvYyh1aW50IHNpemUsIHVpbnQgYWxpZ24pCiB7Ci0Jdm9pZCAqc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7CkBAIC0zNTIsMzAgKzM1MiwzMCBAQAogfQogRVhQT1JUX1NZTUJPTChjcG1fZHBhbGxvYyk7CiAKLWludCBjcG1fZHBmcmVlKHVpbnQgb2Zmc2V0KQoraW50IGNwbV9kcGZyZWUodW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7Ci0JcmV0ID0gcmhfZnJlZSgmY3BtX2RwbWVtX2luZm8sICh2b2lkICopb2Zmc2V0KTsKKwlyZXQgPSByaF9mcmVlKCZjcG1fZHBtZW1faW5mbywgb2Zmc2V0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woY3BtX2RwZnJlZSk7CiAKLXVpbnQgY3BtX2RwYWxsb2NfZml4ZWQodWludCBvZmZzZXQsIHVpbnQgc2l6ZSwgdWludCBhbGlnbikKK3Vuc2lnbmVkIGxvbmcgY3BtX2RwYWxsb2NfZml4ZWQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQgc2l6ZSwgdWludCBhbGlnbikKIHsKLQl2b2lkICpzdGFydDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3BtX2RwbWVtX2xvY2ssIGZsYWdzKTsKIAljcG1fZHBtZW1faW5mby5hbGlnbm1lbnQgPSBhbGlnbjsKLQlzdGFydCA9IHJoX2FsbG9jX2ZpeGVkKCZjcG1fZHBtZW1faW5mbywgKHZvaWQgKilvZmZzZXQsIHNpemUsICJjb21tcHJvYyIpOworCXN0YXJ0ID0gcmhfYWxsb2NfZml4ZWQoJmNwbV9kcG1lbV9pbmZvLCBvZmZzZXQsIHNpemUsICJjb21tcHJvYyIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gKHVpbnQpc3RhcnQ7CisJcmV0dXJuIHN0YXJ0OwogfQogRVhQT1JUX1NZTUJPTChjcG1fZHBhbGxvY19maXhlZCk7CiAKQEAgLTM4NSw3ICszODUsNyBAQAogfQogRVhQT1JUX1NZTUJPTChjcG1fZHBkdW1wKTsKIAotdm9pZCAqY3BtX2RwcmFtX2FkZHIodWludCBvZmZzZXQpCit2b2lkICpjcG1fZHByYW1fYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAlyZXR1cm4gKHZvaWQgKikoZHByYW1fdmJhc2UgKyBvZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX2NvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX2NvbW1vbi5jCmluZGV4IGVjMjY1OTkuLjkyNDQxMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfY29tbW9uLmMKQEAgLTI0OCwxNSArMjQ4LDE0IEBACiAJICogdmFyaWVzIHdpdGggdGhlIHByb2Nlc3NvciBhbmQgdGhlIG1pY3JvY29kZSBwYXRjaGVzIGFjdGl2YXRlZC4KIAkgKiBCdXQgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgYXQgbGVhc3Qgc2FmZS4KIAkgKi8KLQlyaF9hdHRhY2hfcmVnaW9uKCZjcG1fZHBtZW1faW5mbywgKHZvaWQgKilDUE1fREFUQU9OTFlfQkFTRSwKLQkJCUNQTV9EQVRBT05MWV9TSVpFKTsKKwlyaF9hdHRhY2hfcmVnaW9uKCZjcG1fZHBtZW1faW5mbywgQ1BNX0RBVEFPTkxZX0JBU0UsIENQTV9EQVRBT05MWV9TSVpFKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGluZGV4IGludG8gdGhlIERQUkFNIGFyZWEuCiAgKi8KLXVpbnQgY3BtX2RwYWxsb2ModWludCBzaXplLCB1aW50IGFsaWduKQordW5zaWduZWQgbG9uZyBjcG1fZHBhbGxvYyh1aW50IHNpemUsIHVpbnQgYWxpZ24pCiB7Ci0Jdm9pZCAqc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7CkBAIC0yNjgsMTMgKzI2NywxMyBAQAogfQogRVhQT1JUX1NZTUJPTChjcG1fZHBhbGxvYyk7CiAKLWludCBjcG1fZHBmcmVlKHVpbnQgb2Zmc2V0KQoraW50IGNwbV9kcGZyZWUodW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7Ci0JcmV0ID0gcmhfZnJlZSgmY3BtX2RwbWVtX2luZm8sICh2b2lkICopb2Zmc2V0KTsKKwlyZXQgPSByaF9mcmVlKCZjcG1fZHBtZW1faW5mbywgb2Zmc2V0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTI4MiwxNyArMjgxLDE3IEBACiBFWFBPUlRfU1lNQk9MKGNwbV9kcGZyZWUpOwogCiAvKiBub3Qgc3VyZSBpZiB0aGlzIGlzIGV2ZXIgbmVlZGVkICovCi11aW50IGNwbV9kcGFsbG9jX2ZpeGVkKHVpbnQgb2Zmc2V0LCB1aW50IHNpemUsIHVpbnQgYWxpZ24pCit1bnNpZ25lZCBsb25nIGNwbV9kcGFsbG9jX2ZpeGVkKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1aW50IHNpemUsIHVpbnQgYWxpZ24pCiB7Ci0Jdm9pZCAqc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7CiAJY3BtX2RwbWVtX2luZm8uYWxpZ25tZW50ID0gYWxpZ247Ci0Jc3RhcnQgPSByaF9hbGxvY19maXhlZCgmY3BtX2RwbWVtX2luZm8sICh2b2lkICopb2Zmc2V0LCBzaXplLCAiY29tbXByb2MiKTsKKwlzdGFydCA9IHJoX2FsbG9jX2ZpeGVkKCZjcG1fZHBtZW1faW5mbywgb2Zmc2V0LCBzaXplLCAiY29tbXByb2MiKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuICh1aW50KXN0YXJ0OworCXJldHVybiBzdGFydDsKIH0KIEVYUE9SVF9TWU1CT0woY3BtX2RwYWxsb2NfZml4ZWQpOwogCkBAIC0zMDIsNyArMzAxLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woY3BtX2RwZHVtcCk7CiAKLXZvaWQgKmNwbV9kcHJhbV9hZGRyKHVpbnQgb2Zmc2V0KQordm9pZCAqY3BtX2RwcmFtX2FkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAJcmV0dXJuICh2b2lkICopKGltX2RwcmFtYmFzZSArIG9mZnNldCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2RhcnRfaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCmluZGV4IDMzNjE4NmQuLmExZDIwNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CkBAIC01NCw2ICs1NSw5IEBACiAKIC8qIFZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBEQVJUIHRhYmxlICovCiBzdGF0aWMgdTMyICpkYXJ0X3ZiYXNlOworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIHUzMiAqZGFydF9jb3B5OworI2VuZGlmCiAKIC8qIE1hcHBlZCBiYXNlIGFkZHJlc3MgZm9yIHRoZSBkYXJ0ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IF9faW9tZW0gKmRhcnQ7CkBAIC0zNDYsNiArMzUwLDQ4IEBACiAJc2V0X3BjaV9kbWFfb3BzKCZkbWFfZGlyZWN0X29wcyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyB2b2lkIGlvbW11X2RhcnRfc2F2ZSh2b2lkKQoreworCW1lbWNweShkYXJ0X2NvcHksIGRhcnRfdmJhc2UsIDIqMTAyNCoxMDI0KTsKK30KKworc3RhdGljIHZvaWQgaW9tbXVfZGFydF9yZXN0b3JlKHZvaWQpCit7CisJbWVtY3B5KGRhcnRfdmJhc2UsIGRhcnRfY29weSwgMioxMDI0KjEwMjQpOworCWRhcnRfdGxiX2ludmFsaWRhdGVfYWxsKCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGlvbW11X2luaXRfbGF0ZV9kYXJ0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0YmFzZXBmbjsKKwlzdHJ1Y3QgcGFnZSAqcDsKKworCS8qIGlmIG5vIGRhcnQgdGFibGUgZXhpc3RzIHRoZW4gd2Ugd29uJ3QgbmVlZCB0byBzYXZlIGl0CisJICogYW5kIHRoZSBhcmVhIGhhcyBhbHNvIG5vdCBiZWVuIHJlc2VydmVkICovCisJaWYgKCFkYXJ0X3RhYmxlYmFzZSkKKwkJcmV0dXJuIDA7CisKKwl0YmFzZXBmbiA9IF9fcGEoZGFydF90YWJsZWJhc2UpID4+IFBBR0VfU0hJRlQ7CisJcmVnaXN0ZXJfbm9zYXZlX3JlZ2lvbl9sYXRlKHRiYXNlcGZuLAorCQkJCSAgICB0YmFzZXBmbiArICgoMTw8MjQpID4+IFBBR0VfU0hJRlQpKTsKKworCS8qIEZvciBzdXNwZW5kIHdlIG5lZWQgdG8gY29weSB0aGUgZGFydCBjb250ZW50cyBiZWNhdXNlCisJICogaXQgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ3VsYXIgbWFwcGluZyAoc2VlIGFib3ZlKSBhbmQKKwkgKiB0aHVzIG5vdCBzYXZlZCBhdXRvbWF0aWNhbGx5LiBUaGUgbWVtb3J5IGZvciB0aGlzIGNvcHkKKwkgKiBtdXN0IGJlIGFsbG9jYXRlZCBlYXJseSBiZWNhdXNlIHdlIG5lZWQgMiBNQi4gKi8KKwlwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgMjEgLSBQQUdFX1NISUZUKTsKKwlCVUdfT04oIXApOworCWRhcnRfY29weSA9IHBhZ2VfYWRkcmVzcyhwKTsKKworCXBwY19tZC5pb21tdV9zYXZlID0gaW9tbXVfZGFydF9zYXZlOworCXBwY19tZC5pb21tdV9yZXN0b3JlID0gaW9tbXVfZGFydF9yZXN0b3JlOworCisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoaW9tbXVfaW5pdF9sYXRlX2RhcnQpOworI2VuZGlmCiAKIHZvaWQgX19pbml0IGFsbG9jX2RhcnRfdGFibGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMKaW5kZXggOGExMjNjNy4uY2FkMTc1NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMKQEAgLTkwNyw3ICs5MDcsNyBAQAogCQlzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyBmc19lbmV0X2RhdGE7CiAJCWNvbnN0IHVuc2lnbmVkIGludCAqaWQ7CiAJCWNvbnN0IHVuc2lnbmVkIGludCAqcGh5X2FkZHI7Ci0JCXZvaWQgKm1hY19hZGRyOworCQljb25zdCB2b2lkICptYWNfYWRkcjsKIAkJY29uc3QgcGhhbmRsZSAqcGg7CiAJCWNvbnN0IGNoYXIgKm1vZGVsOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCmluZGV4IDBiODRiN2MuLjc1YWFkMzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSA8YXNtL21waWMuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKKyNpbmNsdWRlICJtcGljLmgiCisKICNpZmRlZiBERUJVRwogI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoZm10KQogI2Vsc2UKQEAgLTM1NCw2ICszNTYsMTIgQEAKIAkJdG1wIHw9IDB4MjI7CiAJd3JpdGVsKHRtcCwgZml4dXAtPmJhc2UgKyA0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfUE0KKwkvKiB1c2UgdGhlIGxvd2VzdCBiaXQgaW52ZXJ0ZWQgdG8gdGhlIGFjdHVhbCBIVywKKwkgKiBzZXQgaWYgdGhpcyBmaXh1cCB3YXMgZW5hYmxlZCwgY2xlYXIgb3RoZXJ3aXNlICovCisJbXBpYy0+c2F2ZV9kYXRhW3NvdXJjZV0uZml4dXBfZGF0YSA9IHRtcCB8IDE7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgbXBpY19zaHV0ZG93bl9odF9pbnRlcnJ1cHQoc3RydWN0IG1waWMgKm1waWMsIHVuc2lnbmVkIGludCBzb3VyY2UsCkBAIC0zNzUsOCArMzgzLDU4IEBACiAJdG1wIHw9IDE7CiAJd3JpdGVsKHRtcCwgZml4dXAtPmJhc2UgKyA0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfUE0KKwkvKiB1c2UgdGhlIGxvd2VzdCBiaXQgaW52ZXJ0ZWQgdG8gdGhlIGFjdHVhbCBIVywKKwkgKiBzZXQgaWYgdGhpcyBmaXh1cCB3YXMgZW5hYmxlZCwgY2xlYXIgb3RoZXJ3aXNlICovCisJbXBpYy0+c2F2ZV9kYXRhW3NvdXJjZV0uZml4dXBfZGF0YSA9IHRtcCAmIH4xOworI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfUENJX01TSQorc3RhdGljIHZvaWQgX19pbml0IG1waWNfc2Nhbl9odF9tc2koc3RydWN0IG1waWMgKm1waWMsIHU4IF9faW9tZW0gKmRldmJhc2UsCisJCQkJICAgIHVuc2lnbmVkIGludCBkZXZmbikKK3sKKwl1OCBfX2lvbWVtICpiYXNlOworCXU4IHBvcywgZmxhZ3M7CisJdTY0IGFkZHIgPSAwOworCisJZm9yIChwb3MgPSByZWFkYihkZXZiYXNlICsgUENJX0NBUEFCSUxJVFlfTElTVCk7IHBvcyAhPSAwOworCSAgICAgcG9zID0gcmVhZGIoZGV2YmFzZSArIHBvcyArIFBDSV9DQVBfTElTVF9ORVhUKSkgeworCQl1OCBpZCA9IHJlYWRiKGRldmJhc2UgKyBwb3MgKyBQQ0lfQ0FQX0xJU1RfSUQpOworCQlpZiAoaWQgPT0gUENJX0NBUF9JRF9IVCkgeworCQkJaWQgPSByZWFkYihkZXZiYXNlICsgcG9zICsgMyk7CisJCQlpZiAoKGlkICYgSFRfNUJJVF9DQVBfTUFTSykgPT0gSFRfQ0FQVFlQRV9NU0lfTUFQUElORykKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChwb3MgPT0gMCkKKwkJcmV0dXJuOworCisJYmFzZSA9IGRldmJhc2UgKyBwb3M7CisKKwlmbGFncyA9IHJlYWRiKGJhc2UgKyBIVF9NU0lfRkxBR1MpOworCWlmICghKGZsYWdzICYgSFRfTVNJX0ZMQUdTX0ZJWEVEKSkgeworCQlhZGRyID0gcmVhZGwoYmFzZSArIEhUX01TSV9BRERSX0xPKSAmIEhUX01TSV9BRERSX0xPX01BU0s7CisJCWFkZHIgPSBhZGRyIHwgKCh1NjQpcmVhZGwoYmFzZSArIEhUX01TSV9BRERSX0hJKSA8PCAzMik7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIm1waWM6ICAgLSBIVDolMDJ4LiV4ICVzIE1TSSBtYXBwaW5nIGZvdW5kIEAgMHglbHhcbiIsCisJCVBDSV9TTE9UKGRldmZuKSwgUENJX0ZVTkMoZGV2Zm4pLAorCQlmbGFncyAmIEhUX01TSV9GTEFHU19FTkFCTEUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBhZGRyKTsKKworCWlmICghKGZsYWdzICYgSFRfTVNJX0ZMQUdTX0VOQUJMRSkpCisJCXdyaXRlYihmbGFncyB8IEhUX01TSV9GTEFHU19FTkFCTEUsIGJhc2UgKyBIVF9NU0lfRkxBR1MpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGljX3NjYW5faHRfbXNpKHN0cnVjdCBtcGljICptcGljLCB1OCBfX2lvbWVtICpkZXZiYXNlLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZGV2Zm4pCit7CisJcmV0dXJuOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIF9faW5pdCBtcGljX3NjYW5faHRfcGljKHN0cnVjdCBtcGljICptcGljLCB1OCBfX2lvbWVtICpkZXZiYXNlLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgZGV2Zm4sIHUzMiB2ZGlkKQogewpAQCAtNDY4LDYgKzUyNiw3IEBACiAJCQlnb3RvIG5leHQ7CiAKIAkJbXBpY19zY2FuX2h0X3BpYyhtcGljLCBkZXZiYXNlLCBkZXZmbiwgbCk7CisJCW1waWNfc2Nhbl9odF9tc2kobXBpYywgZGV2YmFzZSwgZGV2Zm4pOwogCiAJbmV4dDoKIAkJLyogbmV4dCBkZXZpY2UsIGlmIGZ1bmN0aW9uIDAgKi8KQEAgLTU1OSw3ICs2MTgsNyBAQAogICovCiAKIAotc3RhdGljIHZvaWQgbXBpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit2b2lkIG1waWNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBsb29wcyA9IDEwMDAwMDsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnEoaXJxKTsKQEAgLTU3OSw3ICs2MzgsNyBAQAogCX0gd2hpbGUobXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSU5GTyhJUlFfVkVDVE9SX1BSSSkpICYgTVBJQ19WRUNQUklfTUFTSyk7CiB9CiAKLXN0YXRpYyB2b2lkIG1waWNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3ZvaWQgbXBpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBsb29wcyA9IDEwMDAwMDsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnEoaXJxKTsKQEAgLTYwMCw3ICs2NTksNyBAQAogCX0gd2hpbGUoIShtcGljX2lycV9yZWFkKHNyYywgTVBJQ19JTkZPKElSUV9WRUNUT1JfUFJJKSkgJiBNUElDX1ZFQ1BSSV9NQVNLKSk7CiB9CiAKLXN0YXRpYyB2b2lkIG1waWNfZW5kX2lycSh1bnNpZ25lZCBpbnQgaXJxKQordm9pZCBtcGljX2VuZF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnEoaXJxKTsKIApAQCAtNzMzLDcgKzc5Miw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG1waWNfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQoraW50IG1waWNfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycSh2aXJxKTsKIAl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcodmlycSk7CkBAIC04MzQsNiArODkzLDggQEAKIAlpZiAoaHcgPj0gbXBpYy0+aXJxX2NvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW1waWNfbXNpX3Jlc2VydmVfaHdpcnEobXBpYywgaHcpOworCiAJLyogRGVmYXVsdCBjaGlwICovCiAJY2hpcCA9ICZtcGljLT5oY19pcnE7CiAKQEAgLTExNDIsOCArMTIwMywxMCBAQAogCiAJLyogRG8gdGhlIEhUIFBJQyBmaXh1cHMgb24gVTMgYnJva2VuIG1waWMgKi8KIAlEQkcoIk1QSUMgZmxhZ3M6ICV4XG4iLCBtcGljLT5mbGFncyk7Ci0JaWYgKChtcGljLT5mbGFncyAmIE1QSUNfVTNfSFRfSVJRUykgJiYgKG1waWMtPmZsYWdzICYgTVBJQ19QUklNQVJZKSkKLSAJCW1waWNfc2Nhbl9odF9waWNzKG1waWMpOworCWlmICgobXBpYy0+ZmxhZ3MgJiBNUElDX1UzX0hUX0lSUVMpICYmIChtcGljLT5mbGFncyAmIE1QSUNfUFJJTUFSWSkpIHsKKwkJbXBpY19zY2FuX2h0X3BpY3MobXBpYyk7CisJCW1waWNfdTNtc2lfaW5pdChtcGljKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbXBpYy0+bnVtX3NvdXJjZXM7IGkrKykgewogCQkvKiBzdGFydCB3aXRoIHZlY3RvciA9IHNvdXJjZSBudW1iZXIsIGFuZCBtYXNrZWQgKi8KQEAgLTExNjcsNiArMTIzMCwxMiBAQAogCiAJLyogU2V0IGN1cnJlbnQgcHJvY2Vzc29yIHByaW9yaXR5IHRvIDAgKi8KIAltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0NVUlJFTlRfVEFTS19QUkkpLCAwKTsKKworI2lmZGVmIENPTkZJR19QTQorCS8qIGFsbG9jYXRlIG1lbW9yeSB0byBzYXZlIG1waWMgc3RhdGUgKi8KKwltcGljLT5zYXZlX2RhdGEgPSBhbGxvY19ib290bWVtKG1waWMtPm51bV9zb3VyY2VzICogc2l6ZW9mKHN0cnVjdCBtcGljX2lycV9zYXZlKSk7CisJQlVHX09OKG1waWMtPnNhdmVfZGF0YSA9PSBOVUxMKTsKKyNlbmRpZgogfQogCiB2b2lkIF9faW5pdCBtcGljX3NldF9jbGtfcmF0aW8oc3RydWN0IG1waWMgKm1waWMsIHUzMiBjbG9ja19yYXRpbykKQEAgLTEzMzMsOCArMTQwMiwxMSBAQAogI2lmZGVmIERFQlVHX0xPVwogCURCRygiJXM6IGdldF9vbmVfaXJxKCk6ICVkXG4iLCBtcGljLT5uYW1lLCBzcmMpOwogI2VuZGlmCi0JaWYgKHVubGlrZWx5KHNyYyA9PSBtcGljLT5zcHVyaW91c192ZWMpKQorCWlmICh1bmxpa2VseShzcmMgPT0gbXBpYy0+c3B1cmlvdXNfdmVjKSkgeworCQlpZiAobXBpYy0+ZmxhZ3MgJiBNUElDX1NQVl9FT0kpCisJCQltcGljX2VvaShtcGljKTsKIAkJcmV0dXJuIE5PX0lSUTsKKwl9CiAJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKG1waWMtPmlycWhvc3QsIHNyYyk7CiB9CiAKQEAgLTEzNTIsNyArMTQyNCw3IEBACiB2b2lkIG1waWNfcmVxdWVzdF9pcGlzKHZvaWQpCiB7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX3ByaW1hcnk7Ci0JaW50IGk7CisJaW50IGksIGVycjsKIAlzdGF0aWMgY2hhciAqaXBpX25hbWVzW10gPSB7CiAJCSJJUEkwIChjYWxsIGZ1bmN0aW9uKSIsCiAJCSJJUEkxIChyZXNjaGVkdWxlKSIsCkBAIC0xMzcwLDggKzE0NDIsMTQgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBJUEkgJWRcbiIsIGkpOwogCQkJYnJlYWs7CiAJCX0KLQkJcmVxdWVzdF9pcnEodmlwaSwgbXBpY19pcGlfYWN0aW9uLCBJUlFGX0RJU0FCTEVEfElSUUZfUEVSQ1BVLAotCQkJICAgIGlwaV9uYW1lc1tpXSwgbXBpYyk7CisJCWVyciA9IHJlcXVlc3RfaXJxKHZpcGksIG1waWNfaXBpX2FjdGlvbiwKKwkJCQkgIElSUUZfRElTQUJMRUR8SVJRRl9QRVJDUFUsCisJCQkJICBpcGlfbmFtZXNbaV0sIG1waWMpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlJlcXVlc3Qgb2YgaXJxICVkIGZvciBJUEkgJWQgZmFpbGVkXG4iLAorCQkJICAgICAgIHZpcGksIGkpOworCQkJYnJlYWs7CisJCX0KIAl9CiB9CiAKQEAgLTE0MTcsMyArMTQ5NSw3OSBAQAogCW1waWNfc2V0dXBfdGhpc19jcHUoKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgbXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtcGljLCBzeXNkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1waWMtPm51bV9zb3VyY2VzOyBpKyspIHsKKwkJbXBpYy0+c2F2ZV9kYXRhW2ldLnZlY3ByaW8gPQorCQkJbXBpY19pcnFfcmVhZChpLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpKTsKKwkJbXBpYy0+c2F2ZV9kYXRhW2ldLmRlc3QgPQorCQkJbXBpY19pcnFfcmVhZChpLCBNUElDX0lORk8oSVJRX0RFU1RJTkFUSU9OKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBpY19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtcGljLCBzeXNkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1waWMtPm51bV9zb3VyY2VzOyBpKyspIHsKKwkJbXBpY19pcnFfd3JpdGUoaSwgTVBJQ19JTkZPKElSUV9WRUNUT1JfUFJJKSwKKwkJCSAgICAgICBtcGljLT5zYXZlX2RhdGFbaV0udmVjcHJpbyk7CisJCW1waWNfaXJxX3dyaXRlKGksIE1QSUNfSU5GTyhJUlFfREVTVElOQVRJT04pLAorCQkJICAgICAgIG1waWMtPnNhdmVfZGF0YVtpXS5kZXN0KTsKKworI2lmZGVmIENPTkZJR19NUElDX1UzX0hUX0lSUVMKKwl7CisJCXN0cnVjdCBtcGljX2lycV9maXh1cCAqZml4dXAgPSAmbXBpYy0+Zml4dXBzW2ldOworCisJCWlmIChmaXh1cC0+YmFzZSkgeworCQkJLyogd2UgdXNlIHRoZSBsb3dlc3QgYml0IGluIGFuIGludmVydGVkIG1lYW5pbmcgKi8KKwkJCWlmICgobXBpYy0+c2F2ZV9kYXRhW2ldLmZpeHVwX2RhdGEgJiAxKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBFbmFibGUgYW5kIGNvbmZpZ3VyZSAqLworCQkJd3JpdGViKDB4MTAgKyAyICogZml4dXAtPmluZGV4LCBmaXh1cC0+YmFzZSArIDIpOworCisJCQl3cml0ZWwobXBpYy0+c2F2ZV9kYXRhW2ldLmZpeHVwX2RhdGEgJiB+MSwKKwkJCSAgICAgICBmaXh1cC0+YmFzZSArIDQpOworCQl9CisJfQorI2VuZGlmCisJfSAvKiBlbmQgZm9yIGxvb3AgKi8KKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG1waWNfc3lzY2xhc3MgPSB7CisjaWZkZWYgQ09ORklHX1BNCisJLnJlc3VtZSA9IG1waWNfcmVzdW1lLAorCS5zdXNwZW5kID0gbXBpY19zdXNwZW5kLAorI2VuZGlmCisJc2V0X2tzZXRfbmFtZSgibXBpYyIpLAorfTsKKworc3RhdGljIGludCBtcGljX2luaXRfc3lzKHZvaWQpCit7CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljczsKKwlpbnQgZXJyb3IsIGlkID0gMDsKKworCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZtcGljX3N5c2NsYXNzKTsKKworCXdoaWxlIChtcGljICYmICFlcnJvcikgeworCQltcGljLT5zeXNkZXYuY2xzID0gJm1waWNfc3lzY2xhc3M7CisJCW1waWMtPnN5c2Rldi5pZCA9IGlkKys7CisJCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZtcGljLT5zeXNkZXYpOworCQltcGljID0gbXBpYy0+bmV4dDsKKwl9CisJcmV0dXJuIGVycm9yOworfQorCitkZXZpY2VfaW5pdGNhbGwobXBpY19pbml0X3N5cyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMWMzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIF9QT1dFUlBDX1NZU0RFVl9NUElDX0gKKyNkZWZpbmUgX1BPV0VSUENfU1lTREVWX01QSUNfSAorCisvKgorICogQ29weXJpZ2h0IDIwMDYtMjAwNywgTWljaGFlbCBFbGxlcm1hbiwgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKi8KKworI2lmZGVmIENPTkZJR19QQ0lfTVNJCitleHRlcm4gdm9pZCBtcGljX21zaV9yZXNlcnZlX2h3aXJxKHN0cnVjdCBtcGljICptcGljLCBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpOworZXh0ZXJuIGludCBtcGljX21zaV9pbml0X2FsbG9jYXRvcihzdHJ1Y3QgbXBpYyAqbXBpYyk7CitleHRlcm4gaXJxX2h3X251bWJlcl90IG1waWNfbXNpX2FsbG9jX2h3aXJxcyhzdHJ1Y3QgbXBpYyAqbXBpYywgaW50IG51bSk7CitleHRlcm4gdm9pZCBtcGljX21zaV9mcmVlX2h3aXJxcyhzdHJ1Y3QgbXBpYyAqbXBpYywgaW50IG9mZnNldCwgaW50IG51bSk7CitleHRlcm4gaW50IG1waWNfdTNtc2lfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1waWNfbXNpX3Jlc2VydmVfaHdpcnEoc3RydWN0IG1waWMgKm1waWMsCisJCQkJCSAgaXJxX2h3X251bWJlcl90IGh3aXJxKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXBpY191M21zaV9pbml0KHN0cnVjdCBtcGljICptcGljKQoreworCXJldHVybiAtMTsKK30KKyNlbmRpZgorCitleHRlcm4gaW50IG1waWNfc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKTsKK2V4dGVybiB2b2lkIG1waWNfZW5kX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIG1waWNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBtcGljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSk7CisKKyNlbmRpZiAvKiBfUE9XRVJQQ19TWVNERVZfTVBJQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA3Njc5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19tc2kuYwpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDcsIE1pY2hhZWwgRWxsZXJtYW4sIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXNpLmg+CisjaW5jbHVkZSA8YXNtL21waWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KKyNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgorCisKK3N0YXRpYyB2b2lkIF9fbXBpY19tc2lfcmVzZXJ2ZV9od2lycShzdHJ1Y3QgbXBpYyAqbXBpYywgaXJxX2h3X251bWJlcl90IGh3aXJxKQoreworCXByX2RlYnVnKCJtcGljOiByZXNlcnZpbmcgaHdpcnEgMHglbHhcbiIsIGh3aXJxKTsKKwliaXRtYXBfYWxsb2NhdGVfcmVnaW9uKG1waWMtPmh3aXJxX2JpdG1hcCwgaHdpcnEsIDApOworfQorCit2b2lkIG1waWNfbXNpX3Jlc2VydmVfaHdpcnEoc3RydWN0IG1waWMgKm1waWMsIGlycV9od19udW1iZXJfdCBod2lycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogVGhlIG1waWMgY2FsbHMgdGhpcyBldmVuIHdoZW4gdGhlcmUgaXMgbm8gYWxsb2NhdG9yIHNldHVwICovCisJaWYgKCFtcGljLT5od2lycV9iaXRtYXApCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5iaXRtYXBfbG9jaywgZmxhZ3MpOworCV9fbXBpY19tc2lfcmVzZXJ2ZV9od2lycShtcGljLCBod2lycSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKK30KKworaXJxX2h3X251bWJlcl90IG1waWNfbXNpX2FsbG9jX2h3aXJxcyhzdHJ1Y3QgbXBpYyAqbXBpYywgaW50IG51bSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBvZmZzZXQsIG9yZGVyID0gZ2V0X2NvdW50X29yZGVyKG51bSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKKwkvKgorCSAqIFRoaXMgaXMgZmFzdCwgYnV0IHN0cmljdGVyIHRoYW4gd2UgbmVlZC4gV2UgbWlnaHQgd2FudCB0byBhZGQKKwkgKiBhIGZhbGxiYWNrIHJvdXRpbmUgd2hpY2ggZG9lcyBhIGxpbmVhciBzZWFyY2ggd2l0aCBubyBhbGlnbm1lbnQuCisJICovCisJb2Zmc2V0ID0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24obXBpYy0+aHdpcnFfYml0bWFwLCBtcGljLT5pcnFfY291bnQsCisJCQkJCSBvcmRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKKworCXByX2RlYnVnKCJtcGljOiBhbGxvY2F0ZWQgMHgleCAoMl4lZCkgYXQgb2Zmc2V0IDB4JXhcbiIsCisJCSBudW0sIG9yZGVyLCBvZmZzZXQpOworCisJcmV0dXJuIG9mZnNldDsKK30KKwordm9pZCBtcGljX21zaV9mcmVlX2h3aXJxcyhzdHJ1Y3QgbXBpYyAqbXBpYywgaW50IG9mZnNldCwgaW50IG51bSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBvcmRlciA9IGdldF9jb3VudF9vcmRlcihudW0pOworCisJcHJfZGVidWcoIm1waWM6IGZyZWVpbmcgMHgleCAoMl4lZCkgYXQgb2Zmc2V0IDB4JXhcbiIsCisJCSBudW0sIG9yZGVyLCBvZmZzZXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1waWMtPmJpdG1hcF9sb2NrLCBmbGFncyk7CisJYml0bWFwX3JlbGVhc2VfcmVnaW9uKG1waWMtPmh3aXJxX2JpdG1hcCwgb2Zmc2V0LCBvcmRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKK30KKworI2lmZGVmIENPTkZJR19NUElDX1UzX0hUX0lSUVMKK3N0YXRpYyBpbnQgbXBpY19tc2lfcmVzZXJ2ZV91M19od2lycXMoc3RydWN0IG1waWMgKm1waWMpCit7CisJaXJxX2h3X251bWJlcl90IGh3aXJxOworCXN0cnVjdCBpcnFfaG9zdF9vcHMgKm9wcyA9IG1waWMtPmlycWhvc3QtPm9wczsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWludCBmbGFncywgaW5kZXgsIGk7CisJc3RydWN0IG9mX2lycSBvaXJxOworCisJcHJfZGVidWcoIm1waWM6IGZvdW5kIFUzLCBndWVzc2luZyBtc2kgYWxsb2NhdG9yIHNldHVwXG4iKTsKKworCS8qIFJlc2VydmUgc291cmNlIG51bWJlcnMgd2Uga25vdyBhcmUgcmVzZXJ2ZWQgaW4gdGhlIEhXICovCisJZm9yIChpID0gMDsgICBpIDwgODsgICBpKyspCisJCV9fbXBpY19tc2lfcmVzZXJ2ZV9od2lycShtcGljLCBpKTsKKworCWZvciAoaSA9IDQyOyAgaSA8IDQ2OyAgaSsrKQorCQlfX21waWNfbXNpX3Jlc2VydmVfaHdpcnEobXBpYywgaSk7CisKKwlmb3IgKGkgPSAxMDA7IGkgPCAxMDU7IGkrKykKKwkJX19tcGljX21zaV9yZXNlcnZlX2h3aXJxKG1waWMsIGkpOworCisJbnAgPSBOVUxMOworCXdoaWxlICgobnAgPSBvZl9maW5kX2FsbF9ub2RlcyhucCkpKSB7CisJCXByX2RlYnVnKCJtcGljOiBtYXBwaW5nIGh3aXJxcyBmb3IgJXNcbiIsIG5wLT5mdWxsX25hbWUpOworCisJCWluZGV4ID0gMDsKKwkJd2hpbGUgKG9mX2lycV9tYXBfb25lKG5wLCBpbmRleCsrLCAmb2lycSkgPT0gMCkgeworCQkJb3BzLT54bGF0ZShtcGljLT5pcnFob3N0LCBOVUxMLCBvaXJxLnNwZWNpZmllciwKKwkJCQkJCW9pcnEuc2l6ZSwgJmh3aXJxLCAmZmxhZ3MpOworCQkJX19tcGljX21zaV9yZXNlcnZlX2h3aXJxKG1waWMsIGh3aXJxKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgbXBpY19tc2lfcmVzZXJ2ZV91M19od2lycXMoc3RydWN0IG1waWMgKm1waWMpCit7CisJcmV0dXJuIC0xOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgbXBpY19tc2lfcmVzZXJ2ZV9kdF9od2lycXMoc3RydWN0IG1waWMgKm1waWMpCit7CisJaW50IGksIGxlbjsKKwljb25zdCB1MzIgKnA7CisKKwlwID0gb2ZfZ2V0X3Byb3BlcnR5KG1waWMtPm9mX25vZGUsICJtc2ktYXZhaWxhYmxlLXJhbmdlcyIsICZsZW4pOworCWlmICghcCkgeworCQlwcl9kZWJ1ZygibXBpYzogbm8gbXNpLWF2YWlsYWJsZS1yYW5nZXMgcHJvcGVydHkgZm91bmQgb24gJXNcbiIsCisJCQkgIG1waWMtPm9mX25vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChsZW4gJSA4ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibXBpYzogTWFsZm9ybWVkIG1zaS1hdmFpbGFibGUtcmFuZ2VzICIKKwkJICAgICAgICJwcm9wZXJ0eSBvbiAlc1xuIiwgbXBpYy0+b2Zfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYml0bWFwX2FsbG9jYXRlX3JlZ2lvbihtcGljLT5od2lycV9iaXRtYXAsIDAsCisJCQkgICAgICAgZ2V0X2NvdW50X29yZGVyKG1waWMtPmlycV9jb3VudCkpOworCisJLyogRm9ybWF0IGlzOiAoPHUzMiBzdGFydD4gPHUzMiBjb3VudD4pKyAqLworCWxlbiAvPSBzaXplb2YodTMyKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gMjsgaSsrLCBwICs9IDIpCisJCW1waWNfbXNpX2ZyZWVfaHdpcnFzKG1waWMsICpwLCAqKHAgKyAxKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1waWNfbXNpX2luaXRfYWxsb2NhdG9yKHN0cnVjdCBtcGljICptcGljKQoreworCWludCByYywgc2l6ZTsKKworCUJVR19PTihtcGljLT5od2lycV9iaXRtYXApOworCXNwaW5fbG9ja19pbml0KCZtcGljLT5iaXRtYXBfbG9jayk7CisKKwlzaXplID0gQklUU19UT19MT05HUyhtcGljLT5pcnFfY291bnQpICogc2l6ZW9mKGxvbmcpOworCXByX2RlYnVnKCJtcGljOiBhbGxvY2F0b3IgYml0bWFwIHNpemUgaXMgMHgleCBieXRlc1xuIiwgc2l6ZSk7CisKKwlpZiAobWVtX2luaXRfZG9uZSkKKwkJbXBpYy0+aHdpcnFfYml0bWFwID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwllbHNlCisJCW1waWMtPmh3aXJxX2JpdG1hcCA9IGFsbG9jX2Jvb3RtZW0oc2l6ZSk7CisKKwlpZiAoIW1waWMtPmh3aXJxX2JpdG1hcCkgeworCQlwcl9kZWJ1ZygibXBpYzogRU5PTUVNIGFsbG9jYXRpbmcgYWxsb2NhdG9yIGJpdG1hcCFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQobXBpYy0+aHdpcnFfYml0bWFwLCAwLCBzaXplKTsKKworCXJjID0gbXBpY19tc2lfcmVzZXJ2ZV9kdF9od2lycXMobXBpYyk7CisJaWYgKHJjKSB7CisJCWlmIChtcGljLT5mbGFncyAmIE1QSUNfVTNfSFRfSVJRUykKKwkJCXJjID0gbXBpY19tc2lfcmVzZXJ2ZV91M19od2lycXMobXBpYyk7CisKKwkJaWYgKHJjKQorCQkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKKworIG91dF9mcmVlOgorCWlmIChtZW1faW5pdF9kb25lKQorCQlrZnJlZShtcGljLT5od2lycV9iaXRtYXApOworCisJbXBpYy0+aHdpcnFfYml0bWFwID0gTlVMTDsKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWI4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2LCBTZWdoZXIgQm9lc3Nlbmtvb2wsIElCTSBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcsIE1pY2hhZWwgRWxsZXJtYW4sIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbXNpLmg+CisjaW5jbHVkZSA8YXNtL21waWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KKyNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgorCisjaW5jbHVkZSAibXBpYy5oIgorCisvKiBBIGJpdCB1Z2x5LCBjYW4gd2UgZ2V0IHRoaXMgZnJvbSB0aGUgcGNpX2RldiBzb21laG93PyAqLworc3RhdGljIHN0cnVjdCBtcGljICptc2lfbXBpYzsKKworc3RhdGljIHZvaWQgbXBpY191M21zaV9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCW1hc2tfbXNpX2lycShpcnEpOworCW1waWNfbWFza19pcnEoaXJxKTsKK30KKworc3RhdGljIHZvaWQgbXBpY191M21zaV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJbXBpY191bm1hc2tfaXJxKGlycSk7CisJdW5tYXNrX21zaV9pcnEoaXJxKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGljX3UzbXNpX2NoaXAgPSB7CisJLnNodXRkb3duCT0gbXBpY191M21zaV9tYXNrX2lycSwKKwkubWFzawkJPSBtcGljX3UzbXNpX21hc2tfaXJxLAorCS51bm1hc2sJCT0gbXBpY191M21zaV91bm1hc2tfaXJxLAorCS5lb2kJCT0gbXBpY19lbmRfaXJxLAorCS5zZXRfdHlwZQk9IG1waWNfc2V0X2lycV90eXBlLAorCS50eXBlbmFtZQk9ICJNUElDLVUzTVNJIiwKK307CisKK3N0YXRpYyB1NjQgcmVhZF9odF9tYWdpY19hZGRyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgcG9zKQoreworCXU4IGZsYWdzOworCXUzMiB0bXA7CisJdTY0IGFkZHI7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBwb3MgKyBIVF9NU0lfRkxBR1MsICZmbGFncyk7CisKKwlpZiAoZmxhZ3MgJiBIVF9NU0lfRkxBR1NfRklYRUQpCisJCXJldHVybiBIVF9NU0lfRklYRURfQUREUjsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwb3MgKyBIVF9NU0lfQUREUl9MTywgJnRtcCk7CisJYWRkciA9IHRtcCAmIEhUX01TSV9BRERSX0xPX01BU0s7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBvcyArIEhUX01TSV9BRERSX0hJLCAmdG1wKTsKKwlhZGRyID0gYWRkciB8ICgodTY0KXRtcCA8PCAzMik7CisKKwlyZXR1cm4gYWRkcjsKK30KKworc3RhdGljIHU2NCBmaW5kX2h0X21hZ2ljX2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwl1bnNpZ25lZCBpbnQgcG9zOworCisJZm9yIChidXMgPSBwZGV2LT5idXM7IGJ1czsgYnVzID0gYnVzLT5wYXJlbnQpIHsKKwkJcG9zID0gcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eShidXMtPnNlbGYsIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOworCQlpZiAocG9zKQorCQkJcmV0dXJuIHJlYWRfaHRfbWFnaWNfYWRkcihidXMtPnNlbGYsIHBvcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdTNtc2lfbXNpX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQoreworCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJWCkKKwkJcHJfZGVidWcoInUzbXNpOiBNU0ktWCB1bnRlc3RlZCwgdHJ5aW5nIGFueXdheS5cbiIpOworCisJLyogSWYgd2UgY2FuJ3QgZmluZCBhIG1hZ2ljIGFkZHJlc3MgdGhlbiBNU0kgYWluJ3QgZ29ubmEgd29yayAqLworCWlmIChmaW5kX2h0X21hZ2ljX2FkZHIocGRldikgPT0gMCkgeworCQlwcl9kZWJ1ZygidTNtc2k6IG5vIG1hZ2ljIGFkZHJlc3MgZm91bmQgZm9yICVzXG4iLAorCQkJIHBjaV9uYW1lKHBkZXYpKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdTNtc2lfdGVhcmRvd25fbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKworICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGVudHJ5LT5pcnEgPT0gTk9fSVJRKQorCQkJY29udGludWU7CisKKwkJc2V0X2lycV9tc2koZW50cnktPmlycSwgTlVMTCk7CisJCW1waWNfbXNpX2ZyZWVfaHdpcnFzKG1zaV9tcGljLCB2aXJxX3RvX2h3KGVudHJ5LT5pcnEpLCAxKTsKKwkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhlbnRyeS0+aXJxKTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHUzbXNpX2NvbXBvc2VfbXNpX21zZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHZpcnEsCisJCQkJICBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXU2NCBhZGRyOworCisJYWRkciA9IGZpbmRfaHRfbWFnaWNfYWRkcihwZGV2KTsKKwltc2ctPmFkZHJlc3NfbG8gPSBhZGRyICYgMHhGRkZGRkZGRjsKKwltc2ctPmFkZHJlc3NfaGkgPSBhZGRyID4+IDMyOworCW1zZy0+ZGF0YSA9IHZpcnFfdG9faHcodmlycSk7CisKKwlwcl9kZWJ1ZygidTNtc2k6IGFsbG9jYXRlZCB2aXJxIDB4JXggKGh3IDB4JWx4KSBhdCBhZGRyZXNzIDB4JWx4XG4iLAorCQkgdmlycSwgdmlycV90b19odyh2aXJxKSwgYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgdTNtc2lfc2V0dXBfbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKK3sKKwlpcnFfaHdfbnVtYmVyX3QgaHdpcnE7CisJaW50IHJjOworCXVuc2lnbmVkIGludCB2aXJxOworCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJCWh3aXJxID0gbXBpY19tc2lfYWxsb2NfaHdpcnFzKG1zaV9tcGljLCAxKTsKKwkJaWYgKGh3aXJxIDwgMCkgeworCQkJcmMgPSBod2lycTsKKwkJCXByX2RlYnVnKCJ1M21zaTogZmFpbGVkIGFsbG9jYXRpbmcgaHdpcnFcbiIpOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCisJCXZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcobXNpX21waWMtPmlycWhvc3QsIGh3aXJxKTsKKwkJaWYgKHZpcnEgPT0gTk9fSVJRKSB7CisJCQlwcl9kZWJ1ZygidTNtc2k6IGZhaWxlZCBtYXBwaW5nIGh3aXJxIDB4JWx4XG4iLCBod2lycSk7CisJCQltcGljX21zaV9mcmVlX2h3aXJxcyhtc2lfbXBpYywgaHdpcnEsIDEpOworCQkJcmMgPSAtRU5PU1BDOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCisJCXNldF9pcnFfbXNpKHZpcnEsIGVudHJ5KTsKKwkJc2V0X2lycV9jaGlwKHZpcnEsICZtcGljX3UzbXNpX2NoaXApOworCQlzZXRfaXJxX3R5cGUodmlycSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCisJCXUzbXNpX2NvbXBvc2VfbXNpX21zZyhwZGV2LCB2aXJxLCAmbXNnKTsKKwkJd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKKworCQlod2lycSsrOworCX0KKworCXJldHVybiAwOworCisgb3V0X2ZyZWU6CisJdTNtc2lfdGVhcmRvd25fbXNpX2lycXMocGRldik7CisJcmV0dXJuIHJjOworfQorCitpbnQgbXBpY191M21zaV9pbml0KHN0cnVjdCBtcGljICptcGljKQoreworCWludCByYzsKKworCXJjID0gbXBpY19tc2lfaW5pdF9hbGxvY2F0b3IobXBpYyk7CisJaWYgKHJjKSB7CisJCXByX2RlYnVnKCJ1M21zaTogRXJyb3IgYWxsb2NhdGluZyBiaXRtYXAhXG4iKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXByX2RlYnVnKCJ1M21zaTogUmVnaXN0ZXJpbmcgTVBJQyBVMyBNU0kgY2FsbGJhY2tzLlxuIik7CisKKwlCVUdfT04obXNpX21waWMpOworCW1zaV9tcGljID0gbXBpYzsKKworCVdBUk5fT04ocHBjX21kLnNldHVwX21zaV9pcnFzKTsKKwlwcGNfbWQuc2V0dXBfbXNpX2lycXMgPSB1M21zaV9zZXR1cF9tc2lfaXJxczsKKwlwcGNfbWQudGVhcmRvd25fbXNpX2lycXMgPSB1M21zaV90ZWFyZG93bl9tc2lfaXJxczsKKwlwcGNfbWQubXNpX2NoZWNrX2RldmljZSA9IHUzbXNpX21zaV9jaGVja19kZXZpY2U7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MC5oIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmMGI0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX19NVjY0WDYwX0hfXworI2RlZmluZSBfX01WNjRYNjBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKK2V4dGVybiB2b2lkIF9faW5pdCBtdjY0eDYwX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBtdjY0eDYwX2dldF9pcnEodm9pZCk7CisKK2V4dGVybiB2b2lkIF9faW5pdCBtdjY0eDYwX3BjaV9pbml0KHZvaWQpOworCisjZW5kaWYgLyogX19NVjY0WDYwX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMGE5YzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfZGV2LmMKQEAgLTAsMCArMSw0MjIgQEAKKy8qCisgKiBQbGF0Zm9ybSBkZXZpY2Ugc2V0dXAgZm9yIE1hcnZlbGwgbXY2NDM2MC9tdjY0NDYwIGhvc3QgYnJpZGdlcyAoRGlzY292ZXJ5KQorICoKKyAqIEF1dGhvcjogRGFsZSBGYXJuc3dvcnRoIDxkYWxlQGZhcm5zd29ydGgub3JnPgorICoKKyAqIDIwMDcgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorCisvKgorICogVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBzZXR1cCBmb3IgdGhlIG12NjR4NjAgZHJpdmVycy4KKyAqIFRoZXNlIGRyaXZlcnMgYXJlIHVudXN1YWwgaW4gdGhhdCB0aGV5IHdvcmsgb24gYm90aCB0aGUgTUlQUyBhbmQgUG93ZXJQQworICogYXJjaGl0ZWN0dXJlcy4gIEJlY2F1c2Ugb2YgdGhhdCwgdGhlIGRyaXZlcnMgZG8gbm90IHN1cHBvcnQgdGhlIG5vcm1hbAorICogUG93ZXJQQyBvZl9wbGF0Zm9ybV9idXNfdHlwZS4gIFRoZXkgc3VwcG9ydCBwbGF0Zm9ybV9idXNfdHlwZSBpbnN0ZWFkLgorICovCisKKy8qCisgKiBDcmVhdGUgTVBTQyBwbGF0Zm9ybSBkZXZpY2VzCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG12NjR4NjBfbXBzY19yZWdpc3Rlcl9zaGFyZWRfcGRldihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHJlc291cmNlIHJbMl07CisJc3RydWN0IG1wc2Nfc2hhcmVkX3BkYXRhIHBkYXRhOworCWNvbnN0IHBoYW5kbGUgKnBoOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbXBzY3JvdXRpbmcsICptcHNjaW50cjsKKwlpbnQgZXJyOworCisJcGggPSBvZl9nZXRfcHJvcGVydHkobnAsICJtcHNjcm91dGluZyIsIE5VTEwpOworCW1wc2Nyb3V0aW5nID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKnBoKTsKKwlpZiAoIW1wc2Nyb3V0aW5nKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobXBzY3JvdXRpbmcsIDAsICZyWzBdKTsKKwlvZl9ub2RlX3B1dChtcHNjcm91dGluZyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXBoID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibXBzY2ludHIiLCBOVUxMKTsKKwltcHNjaW50ciA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKCpwaCk7CisJaWYgKCFtcHNjaW50cikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG1wc2NpbnRyLCAwLCAmclsxXSk7CisJb2Zfbm9kZV9wdXQobXBzY2ludHIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltZW1zZXQoJnBkYXRhLCAwLCBzaXplb2YocGRhdGEpKTsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoTVBTQ19TSEFSRURfTkFNRSwgMCk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHIsIDIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgJnBkYXRhLCBzaXplb2YocGRhdGEpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBtdjY0eDYwX21wc2NfZGV2aWNlX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpZCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2Ugcls1XTsKKwlzdHJ1Y3QgbXBzY19wZGF0YSBwZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWNvbnN0IHVuc2lnbmVkIGludCAqcHJvcDsKKwljb25zdCBwaGFuZGxlICpwaDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNkbWEsICpicmc7CisJaW50IGVycjsKKwlpbnQgcG9ydF9udW1iZXI7CisKKwkvKiBvbmx5IHJlZ2lzdGVyIHRoZSBzaGFyZWQgcGxhdGZvcm0gZGV2aWNlIHRoZSBmaXJzdCB0aW1lIHRocm91Z2ggKi8KKwlpZiAoaWQgPT0gMCAmJiAoZXJyID0gbXY2NHg2MF9tcHNjX3JlZ2lzdGVyX3NoYXJlZF9wZGV2KG5wKSkpCisJCXJldHVybiBlcnI7CisKKwltZW1zZXQociwgMCwgc2l6ZW9mKHIpKTsKKworCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyWzBdKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJb2ZfaXJxX3RvX3Jlc291cmNlKG5wLCAwLCAmcls0XSk7CisKKwlwaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInNkbWEiLCBOVUxMKTsKKwlzZG1hID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKnBoKTsKKwlpZiAoIXNkbWEpCisJCXJldHVybiAtRU5PREVWOworCisJb2ZfaXJxX3RvX3Jlc291cmNlKHNkbWEsIDAsICZyWzNdKTsKKwllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKHNkbWEsIDAsICZyWzFdKTsKKwlvZl9ub2RlX3B1dChzZG1hKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcGggPSBvZl9nZXRfcHJvcGVydHkobnAsICJicmciLCBOVUxMKTsKKwlicmcgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGgpOworCWlmICghYnJnKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoYnJnLCAwLCAmclsyXSk7CisJb2Zfbm9kZV9wdXQoYnJnKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImJsb2NrLWluZGV4IiwgTlVMTCk7CisJaWYgKCFwcm9wKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlwb3J0X251bWJlciA9ICooaW50ICopcHJvcDsKKworCW1lbXNldCgmcGRhdGEsIDAsIHNpemVvZihwZGF0YSkpOworCisJcGRhdGEuY2FjaGVfbWdtdCA9IDE7IC8qIEFsbCBjdXJyZW50IHJldnMgbmVlZCB0aGlzIHNldCAqLworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1heF9pZGxlIiwgTlVMTCk7CisJaWYgKHByb3ApCisJCXBkYXRhLm1heF9pZGxlID0gKnByb3A7CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGJyZywgImN1cnJlbnQtc3BlZWQiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJcGRhdGEuZGVmYXVsdF9iYXVkID0gKnByb3A7CisKKwkvKiBEZWZhdWx0IGlzIDggYml0cywgbm8gcGFyaXR5LCBubyBmbG93IGNvbnRyb2wgKi8KKwlwZGF0YS5kZWZhdWx0X2JpdHMgPSA4OworCXBkYXRhLmRlZmF1bHRfcGFyaXR5ID0gJ24nOworCXBkYXRhLmRlZmF1bHRfZmxvdyA9ICduJzsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjaHJfMSIsIE5VTEwpOworCWlmIChwcm9wKQorCQlwZGF0YS5jaHJfMV92YWwgPSAqcHJvcDsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjaHJfMiIsIE5VTEwpOworCWlmIChwcm9wKQorCQlwZGF0YS5jaHJfMl92YWwgPSAqcHJvcDsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjaHJfMTAiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJcGRhdGEuY2hyXzEwX3ZhbCA9ICpwcm9wOworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1wY3IiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJcGRhdGEubXBjcl92YWwgPSAqcHJvcDsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoYnJnLCAiYmNyIiwgTlVMTCk7CisJaWYgKHByb3ApCisJCXBkYXRhLmJjcl92YWwgPSAqcHJvcDsKKworCXBkYXRhLmJyZ19jYW5fdHVuZSA9IDE7IC8qIEFsbCBjdXJyZW50IHJldnMgbmVlZCB0aGlzIHNldCAqLworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShicmcsICJjbG9jay1zcmMiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJcGRhdGEuYnJnX2Nsa19zcmMgPSAqcHJvcDsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoYnJnLCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7CisJaWYgKHByb3ApCisJCXBkYXRhLmJyZ19jbGtfZnJlcSA9ICpwcm9wOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhNUFNDX0NUTFJfTkFNRSwgcG9ydF9udW1iZXIpOworCWlmICghcGRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByLCA1KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsICZwZGF0YSwgc2l6ZW9mKHBkYXRhKSk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCXJldHVybiAwOworCitlcnJvcjoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDcmVhdGUgbXY2NHg2MF9ldGggcGxhdGZvcm0gZGV2aWNlcworICovCitzdGF0aWMgaW50IF9faW5pdCBldGhfcmVnaXN0ZXJfc2hhcmVkX3BkZXYoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCByZXNvdXJjZSByWzFdOworCWludCBlcnI7CisKKwlucCA9IG9mX2dldF9wYXJlbnQobnApOworCWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJbMF0pOworCW9mX25vZGVfcHV0KG5wKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoTVY2NDNYWF9FVEhfU0hBUkVEX05BTUUsIDAsCisJCQkJCSAgICAgICByLCAxKTsKKwlpZiAoSVNfRVJSKHBkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihwZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtdjY0eDYwX2V0aF9kZXZpY2Vfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IGlkKQoreworCXN0cnVjdCByZXNvdXJjZSByWzFdOworCXN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHBkYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpwaHk7CisJY29uc3QgdTggKm1hY19hZGRyOworCWNvbnN0IGludCAqcHJvcDsKKwljb25zdCBwaGFuZGxlICpwaDsKKwlpbnQgZXJyOworCisJLyogb25seSByZWdpc3RlciB0aGUgc2hhcmVkIHBsYXRmb3JtIGRldmljZSB0aGUgZmlyc3QgdGltZSB0aHJvdWdoICovCisJaWYgKGlkID09IDAgJiYgKGVyciA9IGV0aF9yZWdpc3Rlcl9zaGFyZWRfcGRldihucCkpKQorCQlyZXR1cm4gZXJyOzsKKworCW1lbXNldChyLCAwLCBzaXplb2YocikpOworCW9mX2lycV90b19yZXNvdXJjZShucCwgMCwgJnJbMF0pOworCisJbWVtc2V0KCZwZGF0YSwgMCwgc2l6ZW9mKHBkYXRhKSk7CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiYmxvY2staW5kZXgiLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybiAtRU5PREVWOworCXBkYXRhLnBvcnRfbnVtYmVyID0gKnByb3A7CisKKwltYWNfYWRkciA9IG9mX2dldF9tYWNfYWRkcmVzcyhucCk7CisJaWYgKG1hY19hZGRyKQorCQltZW1jcHkocGRhdGEubWFjX2FkZHIsIG1hY19hZGRyLCA2KTsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJzcGVlZCIsIE5VTEwpOworCWlmIChwcm9wKQorCQlwZGF0YS5zcGVlZCA9ICpwcm9wOworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInR4X3F1ZXVlX3NpemUiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJcGRhdGEudHhfcXVldWVfc2l6ZSA9ICpwcm9wOworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJ4X3F1ZXVlX3NpemUiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJcGRhdGEucnhfcXVldWVfc2l6ZSA9ICpwcm9wOworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInR4X3NyYW1fYWRkciIsIE5VTEwpOworCWlmIChwcm9wKQorCQlwZGF0YS50eF9zcmFtX2FkZHIgPSAqcHJvcDsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJ0eF9zcmFtX3NpemUiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJcGRhdGEudHhfc3JhbV9zaXplID0gKnByb3A7CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicnhfc3JhbV9hZGRyIiwgTlVMTCk7CisJaWYgKHByb3ApCisJCXBkYXRhLnJ4X3NyYW1fYWRkciA9ICpwcm9wOworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJ4X3NyYW1fc2l6ZSIsIE5VTEwpOworCWlmIChwcm9wKQorCQlwZGF0YS5yeF9zcmFtX3NpemUgPSAqcHJvcDsKKworCXBoID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGh5IiwgTlVMTCk7CisJaWYgKCFwaCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwaHkgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGgpOworCWlmIChwaHkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KHBoeSwgInJlZyIsIE5VTEwpOworCWlmIChwcm9wKSB7CisJCXBkYXRhLmZvcmNlX3BoeV9hZGRyID0gMTsKKwkJcGRhdGEucGh5X2FkZHIgPSAqcHJvcDsKKwl9CisKKwlvZl9ub2RlX3B1dChwaHkpOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhNVjY0M1hYX0VUSF9OQU1FLCBwZGF0YS5wb3J0X251bWJlcik7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHIsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgJnBkYXRhLCBzaXplb2YocGRhdGEpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENyZWF0ZSBtdjY0eDYwX2kyYyBwbGF0Zm9ybSBkZXZpY2VzCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG12NjR4NjBfaTJjX2RldmljZV9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBpbnQgaWQpCit7CisJc3RydWN0IHJlc291cmNlIHJbMl07CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgbXY2NHh4eF9pMmNfcGRhdGEgcGRhdGE7CisJY29uc3QgdW5zaWduZWQgaW50ICpwcm9wOworCWludCBlcnI7CisKKwltZW1zZXQociwgMCwgc2l6ZW9mKHIpKTsKKworCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyWzBdKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJb2ZfaXJxX3RvX3Jlc291cmNlKG5wLCAwLCAmclsxXSk7CisKKwltZW1zZXQoJnBkYXRhLCAwLCBzaXplb2YocGRhdGEpKTsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJmcmVxX20iLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybiAtRU5PREVWOworCXBkYXRhLmZyZXFfbSA9ICpwcm9wOworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImZyZXFfbiIsIE5VTEwpOworCWlmICghcHJvcCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcGRhdGEuZnJlcV9uID0gKnByb3A7CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAidGltZW91dCIsIE5VTEwpOworCWlmIChwcm9wKQorCQlwZGF0YS50aW1lb3V0ID0gKnByb3A7CisJZWxzZQorCQlwZGF0YS50aW1lb3V0ID0gMTAwMDsJLyogMSBzZWNvbmQgKi8KKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZXRyaWVzIiwgTlVMTCk7CisJaWYgKHByb3ApCisJCXBkYXRhLnJldHJpZXMgPSAqcHJvcDsKKwllbHNlCisJCXBkYXRhLnJldHJpZXMgPSAxOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhNVjY0WFhYX0kyQ19DVExSX05BTUUsIGlkKTsKKwlpZiAoIXBkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgciwgMik7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCAmcGRhdGEsIHNpemVvZihwZGF0YSkpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtdjY0eDYwX2RldmljZV9zZXR1cCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOworCWludCBpZDsKKwlpbnQgZXJyOworCisJZm9yIChpZCA9IDA7CisJICAgICAobnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShucCwgInNlcmlhbCIsICJtYXJ2ZWxsLG1wc2MiKSk7IGlkKyspCisJCWlmICgoZXJyID0gbXY2NHg2MF9tcHNjX2RldmljZV9zZXR1cChucCwgaWQpKSkKKwkJCWdvdG8gZXJyb3I7CisKKwlmb3IgKGlkID0gMDsKKwkgICAgIChucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKG5wLCAibmV0d29yayIsCisJCQkJCSAgICJtYXJ2ZWxsLG12NjR4NjAtZXRoIikpOworCSAgICAgaWQrKykKKwkJaWYgKChlcnIgPSBtdjY0eDYwX2V0aF9kZXZpY2Vfc2V0dXAobnAsIGlkKSkpCisJCQlnb3RvIGVycm9yOworCisJZm9yIChpZCA9IDA7CisJICAgICAobnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShucCwgImkyYyIsICJtYXJ2ZWxsLG12NjR4NjAtaTJjIikpOworCSAgICAgaWQrKykKKwkJaWYgKChlcnIgPSBtdjY0eDYwX2kyY19kZXZpY2Vfc2V0dXAobnAsIGlkKSkpCisJCQlnb3RvIGVycm9yOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCW9mX25vZGVfcHV0KG5wKTsKKwlyZXR1cm4gZXJyOworfQorYXJjaF9pbml0Y2FsbChtdjY0eDYwX2RldmljZV9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhZWY0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9wY2kuYwpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIFBDSSBidXMgc2V0dXAgZm9yIE1hcnZlbGwgbXY2NDM2MC9tdjY0NDYwIGhvc3QgYnJpZGdlcyAoRGlzY292ZXJ5KQorICoKKyAqIEF1dGhvcjogRGFsZSBGYXJuc3dvcnRoIDxkYWxlQGZhcm5zd29ydGgub3JnPgorICoKKyAqIDIwMDcgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKworI2RlZmluZSBQQ0lfSEVBREVSX1RZUEVfSU5WQUxJRAkJMHg3ZgkvKiBJbnZhbGlkIFBDSSBoZWFkZXIgdHlwZSAqLworCisjaWZkZWYgQ09ORklHX1NZU0ZTCisvKiAzMi1iaXQgaGV4IG9yIGRlYyBzdHJpbmdpZmllZCBudW1iZXIgKyAnXG4nICovCisjZGVmaW5lIE1WNjRYNjBfVkFMX0xFTl9NQVgJCTExCisjZGVmaW5lIE1WNjRYNjBfUENJQ0ZHX0NQQ0lfSE9UU1dBUAkweDY4CisKK3N0YXRpYyBzc2l6ZV90IG12NjR4NjBfaHNfcmVnX3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwKKwkJCQkgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBoYjsKKwl1MzIgdjsKKworCWlmIChvZmYgPiAwKQorCQlyZXR1cm4gMDsKKwlpZiAoY291bnQgPCBNVjY0WDYwX1ZBTF9MRU5fTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBoYiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KDAsIFBDSV9ERVZGTigwLCAwKSk7CisJaWYgKCFwaGIpCisJCXJldHVybiAtRU5PREVWOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwaGIsIE1WNjRYNjBfUENJQ0ZHX0NQQ0lfSE9UU1dBUCwgJnYpOworCXBjaV9kZXZfcHV0KHBoYik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIHYpOworfQorCitzdGF0aWMgc3NpemVfdCBtdjY0eDYwX2hzX3JlZ193cml0ZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLAorCQkJCSAgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBoYjsKKwl1MzIgdjsKKworCWlmIChvZmYgPiAwKQorCQlyZXR1cm4gMDsKKwlpZiAoY291bnQgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVpIiwgJnYpICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJcGhiID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgUENJX0RFVkZOKDAsIDApKTsKKwlpZiAoIXBoYikKKwkJcmV0dXJuIC1FTk9ERVY7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwaGIsIE1WNjRYNjBfUENJQ0ZHX0NQQ0lfSE9UU1dBUCwgdik7CisJcGNpX2Rldl9wdXQocGhiKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIG12NjR4NjBfaHNfcmVnX2F0dHIgPSB7IC8qIEhvdHN3YXAgcmVnaXN0ZXIgKi8KKwkuYXR0ciA9IHsKKwkJLm5hbWUgPSAiaHNfcmVnIiwKKwkJLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkuc2l6ZSAgPSBNVjY0WDYwX1ZBTF9MRU5fTUFYLAorCS5yZWFkICA9IG12NjR4NjBfaHNfcmVnX3JlYWQsCisJLndyaXRlID0gbXY2NHg2MF9oc19yZWdfd3JpdGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtdjY0eDYwX3N5c2ZzX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJY29uc3QgdW5zaWduZWQgaW50ICpwcm9wOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAibWFydmVsbCxtdjY0eDYwIik7CisJaWYgKCFucCkKKwkJcmV0dXJuIDA7CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiaHNfcmVnX3ZhbGlkIiwgTlVMTCk7CisJb2Zfbm9kZV9wdXQobnApOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm1hcnZlbGwsbXY2NHg2MCIsIDAsIE5VTEwsIDApOworCWlmIChJU19FUlIocGRldikpCisJCXJldHVybiBQVFJfRVJSKHBkZXYpOworCisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZtdjY0eDYwX2hzX3JlZ19hdHRyKTsKK30KKworc3Vic3lzX2luaXRjYWxsKG12NjR4NjBfc3lzZnNfaW5pdCk7CisKKyNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi8KKworc3RhdGljIHZvaWQgX19pbml0IG12NjR4NjBfcGNpX2ZpeHVwX2Vhcmx5KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLyoKKwkgKiBTZXQgdGhlIGhvc3QgYnJpZGdlIGhkcl90eXBlIHRvIGFuIGludmFsaWQgdmFsdWUgc28gdGhhdAorCSAqIHBjaV9zZXR1cF9kZXZpY2UoKSB3aWxsIGlnbm9yZSB0aGUgaG9zdCBicmlkZ2UuCisJICovCisJZGV2LT5oZHJfdHlwZSA9IFBDSV9IRUFERVJfVFlQRV9JTlZBTElEOworfQorREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQQ0lfREVWSUNFX0lEX01BUlZFTExfTVY2NDM2MCwKKwkJCW12NjR4NjBfcGNpX2ZpeHVwX2Vhcmx5KTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUENJX0RFVklDRV9JRF9NQVJWRUxMX01WNjQ0NjAsCisJCQltdjY0eDYwX3BjaV9maXh1cF9lYXJseSk7CisKK3N0YXRpYyBpbnQgX19pbml0IG12NjR4NjBfYWRkX2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKK3sKKwlpbnQgbGVuOworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgcnNyYzsKKwljb25zdCBpbnQgKmJ1c19yYW5nZTsKKwlpbnQgcHJpbWFyeTsKKworCW1lbXNldCgmcnNyYywgMCwgc2l6ZW9mKHJzcmMpKTsKKworCS8qIEZldGNoIGhvc3QgYnJpZGdlIHJlZ2lzdGVycyBhZGRyZXNzICovCisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LCAwLCAmcnNyYykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJObyBQQ0kgcmVnIHByb3BlcnR5IGluIGRldmljZSB0cmVlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogR2V0IGJ1cyByYW5nZSBpZiBhbnkgKi8KKwlidXNfcmFuZ2UgPSBvZl9nZXRfcHJvcGVydHkoZGV2LCAiYnVzLXJhbmdlIiwgJmxlbik7CisJaWYgKGJ1c19yYW5nZSA9PSBOVUxMIHx8IGxlbiA8IDIgKiBzaXplb2YoaW50KSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZ2V0IGJ1cy1yYW5nZSBmb3IgJXMsIGFzc3VtZSIKKwkJICAgICAgICIgYnVzIDBcbiIsIGRldi0+ZnVsbF9uYW1lKTsKKworCWhvc2UgPSBwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIoKTsKKwlpZiAoIWhvc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJaG9zZS0+YXJjaF9kYXRhID0gZGV2OworCWhvc2UtPnNldF9jZmdfdHlwZSA9IDE7CisKKwlob3NlLT5maXJzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVswXSA6IDA7CisJaG9zZS0+bGFzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVsxXSA6IDB4ZmY7CisKKwlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgcnNyYy5zdGFydCwgcnNyYy5zdGFydCArIDQpOworCWhvc2UtPmJ1c19vZmZzZXQgPSBob3NlLT5maXJzdF9idXNubzsKKworCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIE1WNjR4NjAgUENJIGhvc3QgYnJpZGdlIGF0IDB4JTAxNmxseC4gIgorCSAgICAgICAiRmlybXdhcmUgYnVzIG51bWJlcjogJWQtPiVkXG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJzcmMuc3RhcnQsIGhvc2UtPmZpcnN0X2J1c25vLAorCSAgICAgICBob3NlLT5sYXN0X2J1c25vKTsKKworCS8qIEludGVycHJldCB0aGUgInJhbmdlcyIgcHJvcGVydHkgKi8KKwkvKiBUaGlzIGFsc28gbWFwcyB0aGUgSS9PIHJlZ2lvbiBhbmQgc2V0cyBpc2FfaW8vbWVtX2Jhc2UgKi8KKwlwcmltYXJ5ID0gKGhvc2UtPmZpcnN0X2J1c25vID09IDApOworCXBjaV9wcm9jZXNzX2JyaWRnZV9PRl9yYW5nZXMoaG9zZSwgZGV2LCBwcmltYXJ5KTsKKworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBtdjY0eDYwX3BjaV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7CisKKwl3aGlsZSAoKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAibWFydmVsbCxtdjY0eDYwLXBjaSIpKSkKKwkJbXY2NHg2MF9hZGRfYnJpZGdlKG5wKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9waWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQzMTYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX3BpYy5jCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogSW50ZXJydXB0IGhhbmRsaW5nIGZvciBNYXJ2ZWxsIG12NjQzNjAvbXY2NDQ2MCBob3N0IGJyaWRnZXMgKERpc2NvdmVyeSkKKyAqCisgKiBBdXRob3I6IERhbGUgRmFybnN3b3J0aCA8ZGFsZUBmYXJuc3dvcnRoLm9yZz4KKyAqCisgKiAyMDA3IChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgIm12NjR4NjAuaCIKKworLyogSW50ZXJydXB0IENvbnRyb2xsZXIgSW50ZXJmYWNlIFJlZ2lzdGVycyAqLworI2RlZmluZSBNVjY0WDYwX0lDX01BSU5fQ0FVU0VfTE8JMHgwMDA0CisjZGVmaW5lIE1WNjRYNjBfSUNfTUFJTl9DQVVTRV9ISQkweDAwMGMKKyNkZWZpbmUgTVY2NFg2MF9JQ19DUFUwX0lOVFJfTUFTS19MTwkweDAwMTQKKyNkZWZpbmUgTVY2NFg2MF9JQ19DUFUwX0lOVFJfTUFTS19ISQkweDAwMWMKKyNkZWZpbmUgTVY2NFg2MF9JQ19DUFUwX1NFTEVDVF9DQVVTRQkweDAwMjQKKworI2RlZmluZSBNVjY0WDYwX0hJR0hfR1BQX0dST1VQUwkJMHgwZjAwMDAwMAorI2RlZmluZSBNVjY0WDYwX1NFTEVDVF9DQVVTRV9ISUdICTB4NDAwMDAwMDAKKworLyogR2VuZXJhbCBQdXJwb3NlIFBpbnMgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCisjZGVmaW5lIE1WNjR4NjBfR1BQX0lOVFJfQ0FVU0UJCTB4MDAwOAorI2RlZmluZSBNVjY0eDYwX0dQUF9JTlRSX01BU0sJCTB4MDAwYworCisjZGVmaW5lIE1WNjR4NjBfTEVWRUwxX0xPVwkJMAorI2RlZmluZSBNVjY0eDYwX0xFVkVMMV9ISUdICQkxCisjZGVmaW5lIE1WNjR4NjBfTEVWRUwxX0dQUAkJMgorCisjZGVmaW5lIE1WNjR4NjBfTEVWRUwxX01BU0sJCTB4MDAwMDAwNjAKKyNkZWZpbmUgTVY2NHg2MF9MRVZFTDFfT0ZGU0VUCQk1CisKKyNkZWZpbmUgTVY2NHg2MF9MRVZFTDJfTUFTSwkJMHgwMDAwMDAxZgorCisjZGVmaW5lIE1WNjR4NjBfTlVNX0lSUVMJCTk2CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobXY2NHg2MF9sb2NrKTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqbXY2NHg2MF9pcnFfcmVnX2Jhc2U7CitzdGF0aWMgdm9pZCBfX2lvbWVtICptdjY0eDYwX2dwcF9yZWdfYmFzZTsKKworLyoKKyAqIEludGVycnVwdCBDb250cm9sbGVyIEhhbmRsaW5nCisgKgorICogVGhlIGludGVycnVwdCBjb250cm9sbGVyIGhhbmRsZXMgdGhyZWUgZ3JvdXBzIG9mIGludGVycnVwdHM6CisgKiAgIG1haW4gbG93OglJUlEwLUlSUTMxCisgKiAgIG1haW4gaGlnaDoJSVJRMzItSVJRNjMKKyAqICAgZ3BwOglJUlE2NC1JUlE5NQorICoKKyAqIFRoaXMgY29kZSBoYW5kbGVzIGludGVycnVwdHMgaW4gdHdvIGxldmVscy4gIExldmVsIDEgc2VsZWN0cyB0aGUKKyAqIGludGVycnVwdCBncm91cCwgYW5kIGxldmVsIDIgc2VsZWN0cyBhbiBJUlEgd2l0aGluIHRoYXQgZ3JvdXAuCisgKiBFYWNoIGdyb3VwIGhhcyBpdHMgb3duIGlycV9jaGlwIHN0cnVjdHVyZS4KKyAqLworCitzdGF0aWMgdTMyIG12NjR4NjBfY2FjaGVkX2xvd19tYXNrOworc3RhdGljIHUzMiBtdjY0eDYwX2NhY2hlZF9oaWdoX21hc2sgPSBNVjY0WDYwX0hJR0hfR1BQX0dST1VQUzsKK3N0YXRpYyB1MzIgbXY2NHg2MF9jYWNoZWRfZ3BwX21hc2s7CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3QgKm12NjR4NjBfaXJxX2hvc3Q7CisKKy8qCisgKiBtdjY0eDYwX2NoaXBfbG93IGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkIG12NjR4NjBfbWFza19sb3codW5zaWduZWQgaW50IHZpcnEpCit7CisJaW50IGxldmVsMiA9IGlycV9tYXBbdmlycV0uaHdpcnEgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CisJbXY2NHg2MF9jYWNoZWRfbG93X21hc2sgJj0gfigxIDw8IGxldmVsMik7CisJb3V0X2xlMzIobXY2NHg2MF9pcnFfcmVnX2Jhc2UgKyBNVjY0WDYwX0lDX0NQVTBfSU5UUl9NQVNLX0xPLAorCQkgbXY2NHg2MF9jYWNoZWRfbG93X21hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOworCSh2b2lkKWluX2xlMzIobXY2NHg2MF9pcnFfcmVnX2Jhc2UgKyBNVjY0WDYwX0lDX0NQVTBfSU5UUl9NQVNLX0xPKTsKK30KKworc3RhdGljIHZvaWQgbXY2NHg2MF91bm1hc2tfbG93KHVuc2lnbmVkIGludCB2aXJxKQoreworCWludCBsZXZlbDIgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOworCW12NjR4NjBfY2FjaGVkX2xvd19tYXNrIHw9IDEgPDwgbGV2ZWwyOworCW91dF9sZTMyKG12NjR4NjBfaXJxX3JlZ19iYXNlICsgTVY2NFg2MF9JQ19DUFUwX0lOVFJfTUFTS19MTywKKwkJIG12NjR4NjBfY2FjaGVkX2xvd19tYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKKwkodm9pZClpbl9sZTMyKG12NjR4NjBfaXJxX3JlZ19iYXNlICsgTVY2NFg2MF9JQ19DUFUwX0lOVFJfTUFTS19MTyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXY2NHg2MF9jaGlwX2xvdyA9IHsKKwkubmFtZQkJPSAibXY2NHg2MF9sb3ciLAorCS5tYXNrCQk9IG12NjR4NjBfbWFza19sb3csCisJLm1hc2tfYWNrCT0gbXY2NHg2MF9tYXNrX2xvdywKKwkudW5tYXNrCQk9IG12NjR4NjBfdW5tYXNrX2xvdywKK307CisKKy8qCisgKiBtdjY0eDYwX2NoaXBfaGlnaCBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCBtdjY0eDYwX21hc2tfaGlnaCh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwlpbnQgbGV2ZWwyID0gaXJxX21hcFt2aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKKwltdjY0eDYwX2NhY2hlZF9oaWdoX21hc2sgJj0gfigxIDw8IGxldmVsMik7CisJb3V0X2xlMzIobXY2NHg2MF9pcnFfcmVnX2Jhc2UgKyBNVjY0WDYwX0lDX0NQVTBfSU5UUl9NQVNLX0hJLAorCQkgbXY2NHg2MF9jYWNoZWRfaGlnaF9tYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKKwkodm9pZClpbl9sZTMyKG12NjR4NjBfaXJxX3JlZ19iYXNlICsgTVY2NFg2MF9JQ19DUFUwX0lOVFJfTUFTS19ISSk7Cit9CisKK3N0YXRpYyB2b2lkIG12NjR4NjBfdW5tYXNrX2hpZ2godW5zaWduZWQgaW50IHZpcnEpCit7CisJaW50IGxldmVsMiA9IGlycV9tYXBbdmlycV0uaHdpcnEgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CisJbXY2NHg2MF9jYWNoZWRfaGlnaF9tYXNrIHw9IDEgPDwgbGV2ZWwyOworCW91dF9sZTMyKG12NjR4NjBfaXJxX3JlZ19iYXNlICsgTVY2NFg2MF9JQ19DUFUwX0lOVFJfTUFTS19ISSwKKwkJIG12NjR4NjBfY2FjaGVkX2hpZ2hfbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CisJKHZvaWQpaW5fbGUzMihtdjY0eDYwX2lycV9yZWdfYmFzZSArIE1WNjRYNjBfSUNfQ1BVMF9JTlRSX01BU0tfSEkpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG12NjR4NjBfY2hpcF9oaWdoID0geworCS5uYW1lCQk9ICJtdjY0eDYwX2hpZ2giLAorCS5tYXNrCQk9IG12NjR4NjBfbWFza19oaWdoLAorCS5tYXNrX2Fjawk9IG12NjR4NjBfbWFza19oaWdoLAorCS51bm1hc2sJCT0gbXY2NHg2MF91bm1hc2tfaGlnaCwKK307CisKKy8qCisgKiBtdjY0eDYwX2NoaXBfZ3BwIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkIG12NjR4NjBfbWFza19ncHAodW5zaWduZWQgaW50IHZpcnEpCit7CisJaW50IGxldmVsMiA9IGlycV9tYXBbdmlycV0uaHdpcnEgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CisJbXY2NHg2MF9jYWNoZWRfZ3BwX21hc2sgJj0gfigxIDw8IGxldmVsMik7CisJb3V0X2xlMzIobXY2NHg2MF9ncHBfcmVnX2Jhc2UgKyBNVjY0eDYwX0dQUF9JTlRSX01BU0ssCisJCSBtdjY0eDYwX2NhY2hlZF9ncHBfbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CisJKHZvaWQpaW5fbGUzMihtdjY0eDYwX2dwcF9yZWdfYmFzZSArIE1WNjR4NjBfR1BQX0lOVFJfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIG12NjR4NjBfbWFza19hY2tfZ3BwKHVuc2lnbmVkIGludCB2aXJxKQoreworCWludCBsZXZlbDIgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOworCW12NjR4NjBfY2FjaGVkX2dwcF9tYXNrICY9IH4oMSA8PCBsZXZlbDIpOworCW91dF9sZTMyKG12NjR4NjBfZ3BwX3JlZ19iYXNlICsgTVY2NHg2MF9HUFBfSU5UUl9NQVNLLAorCQkgbXY2NHg2MF9jYWNoZWRfZ3BwX21hc2spOworCW91dF9sZTMyKG12NjR4NjBfZ3BwX3JlZ19iYXNlICsgTVY2NHg2MF9HUFBfSU5UUl9DQVVTRSwKKwkJIH4oMSA8PCBsZXZlbDIpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKKwkodm9pZClpbl9sZTMyKG12NjR4NjBfZ3BwX3JlZ19iYXNlICsgTVY2NHg2MF9HUFBfSU5UUl9DQVVTRSk7Cit9CisKK3N0YXRpYyB2b2lkIG12NjR4NjBfdW5tYXNrX2dwcCh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwlpbnQgbGV2ZWwyID0gaXJxX21hcFt2aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKKwltdjY0eDYwX2NhY2hlZF9ncHBfbWFzayB8PSAxIDw8IGxldmVsMjsKKwlvdXRfbGUzMihtdjY0eDYwX2dwcF9yZWdfYmFzZSArIE1WNjR4NjBfR1BQX0lOVFJfTUFTSywKKwkJIG12NjR4NjBfY2FjaGVkX2dwcF9tYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKKwkodm9pZClpbl9sZTMyKG12NjR4NjBfZ3BwX3JlZ19iYXNlICsgTVY2NHg2MF9HUFBfSU5UUl9NQVNLKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtdjY0eDYwX2NoaXBfZ3BwID0geworCS5uYW1lCQk9ICJtdjY0eDYwX2dwcCIsCisJLm1hc2sJCT0gbXY2NHg2MF9tYXNrX2dwcCwKKwkubWFza19hY2sJPSBtdjY0eDYwX21hc2tfYWNrX2dwcCwKKwkudW5tYXNrCQk9IG12NjR4NjBfdW5tYXNrX2dwcCwKK307CisKKy8qCisgKiBtdjY0eDYwX2hvc3Rfb3BzIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbnQgbXY2NHg2MF9ob3N0X21hdGNoKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlyZXR1cm4gbXY2NHg2MF9pcnFfaG9zdC0+aG9zdF9kYXRhID09IG5wOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwICptdjY0eDYwX2NoaXBzW10gPSB7CisJW01WNjR4NjBfTEVWRUwxX0xPV10gID0gJm12NjR4NjBfY2hpcF9sb3csCisJW01WNjR4NjBfTEVWRUwxX0hJR0hdID0gJm12NjR4NjBfY2hpcF9oaWdoLAorCVtNVjY0eDYwX0xFVkVMMV9HUFBdICA9ICZtdjY0eDYwX2NoaXBfZ3BwLAorfTsKKworc3RhdGljIGludCBtdjY0eDYwX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgIGlycV9od19udW1iZXJfdCBod2lycSkKK3sKKwlpbnQgbGV2ZWwxOworCisJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCisJbGV2ZWwxID0gKGh3aXJxICYgTVY2NHg2MF9MRVZFTDFfTUFTSykgPj4gTVY2NHg2MF9MRVZFTDFfT0ZGU0VUOworCUJVR19PTihsZXZlbDEgPiBNVjY0eDYwX0xFVkVMMV9HUFApOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCBtdjY0eDYwX2NoaXBzW2xldmVsMV0sIGhhbmRsZV9sZXZlbF9pcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIG12NjR4NjBfaG9zdF9vcHMgPSB7CisJLm1hdGNoID0gbXY2NHg2MF9ob3N0X21hdGNoLAorCS5tYXAgICA9IG12NjR4NjBfaG9zdF9tYXAsCit9OworCisvKgorICogR2xvYmFsIGZ1bmN0aW9ucworICovCisKK3ZvaWQgX19pbml0IG12NjR4NjBfaW5pdF9pcnEodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXBoeXNfYWRkcl90IHBhZGRyOworCXVuc2lnbmVkIGludCBzaXplOworCWNvbnN0IHVuc2lnbmVkIGludCAqcmVnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJtYXJ2ZWxsLG12NjR4NjAtZ3BwIik7CisJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJnNpemUpOworCXBhZGRyID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MobnAsIHJlZyk7CisJbXY2NHg2MF9ncHBfcmVnX2Jhc2UgPSBpb3JlbWFwKHBhZGRyLCByZWdbMV0pOworCW9mX25vZGVfcHV0KG5wKTsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgIm1hcnZlbGwsbXY2NHg2MC1waWMiKTsKKwlyZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCAmc2l6ZSk7CisJcGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgcmVnKTsKKwlvZl9ub2RlX3B1dChucCk7CisJbXY2NHg2MF9pcnFfcmVnX2Jhc2UgPSBpb3JlbWFwKHBhZGRyLCByZWdbMV0pOworCisJbXY2NHg2MF9pcnFfaG9zdCA9IGlycV9hbGxvY19ob3N0KElSUV9IT1NUX01BUF9MSU5FQVIsIE1WNjR4NjBfTlVNX0lSUVMsCisJCQkJCSAgJm12NjR4NjBfaG9zdF9vcHMsIE1WNjR4NjBfTlVNX0lSUVMpOworCisJbXY2NHg2MF9pcnFfaG9zdC0+aG9zdF9kYXRhID0gbnA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CisJb3V0X2xlMzIobXY2NHg2MF9ncHBfcmVnX2Jhc2UgKyBNVjY0eDYwX0dQUF9JTlRSX01BU0ssCisJCSBtdjY0eDYwX2NhY2hlZF9ncHBfbWFzayk7CisJb3V0X2xlMzIobXY2NHg2MF9pcnFfcmVnX2Jhc2UgKyBNVjY0WDYwX0lDX0NQVTBfSU5UUl9NQVNLX0xPLAorCQkgbXY2NHg2MF9jYWNoZWRfbG93X21hc2spOworCW91dF9sZTMyKG12NjR4NjBfaXJxX3JlZ19iYXNlICsgTVY2NFg2MF9JQ19DUFUwX0lOVFJfTUFTS19ISSwKKwkJIG12NjR4NjBfY2FjaGVkX2hpZ2hfbWFzayk7CisKKwlvdXRfbGUzMihtdjY0eDYwX2dwcF9yZWdfYmFzZSArIE1WNjR4NjBfR1BQX0lOVFJfQ0FVU0UsIDApOworCW91dF9sZTMyKG12NjR4NjBfaXJxX3JlZ19iYXNlICsgTVY2NFg2MF9JQ19NQUlOX0NBVVNFX0xPLCAwKTsKKwlvdXRfbGUzMihtdjY0eDYwX2lycV9yZWdfYmFzZSArIE1WNjRYNjBfSUNfTUFJTl9DQVVTRV9ISSwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7Cit9CisKK3Vuc2lnbmVkIGludCBtdjY0eDYwX2dldF9pcnEodm9pZCkKK3sKKwl1MzIgY2F1c2U7CisJaW50IGxldmVsMTsKKwlpcnFfaHdfbnVtYmVyX3QgaHdpcnE7CisJaW50IHZpcnEgPSBOT19JUlE7CisKKwljYXVzZSA9IGluX2xlMzIobXY2NHg2MF9pcnFfcmVnX2Jhc2UgKyBNVjY0WDYwX0lDX0NQVTBfU0VMRUNUX0NBVVNFKTsKKwlpZiAoY2F1c2UgJiBNVjY0WDYwX1NFTEVDVF9DQVVTRV9ISUdIKSB7CisJCWNhdXNlICY9IG12NjR4NjBfY2FjaGVkX2hpZ2hfbWFzazsKKwkJbGV2ZWwxID0gTVY2NHg2MF9MRVZFTDFfSElHSDsKKwkJaWYgKGNhdXNlICYgTVY2NFg2MF9ISUdIX0dQUF9HUk9VUFMpIHsKKwkJCWNhdXNlID0gaW5fbGUzMihtdjY0eDYwX2dwcF9yZWdfYmFzZSArCisJCQkJCU1WNjR4NjBfR1BQX0lOVFJfQ0FVU0UpOworCQkJY2F1c2UgJj0gbXY2NHg2MF9jYWNoZWRfZ3BwX21hc2s7CisJCQlsZXZlbDEgPSBNVjY0eDYwX0xFVkVMMV9HUFA7CisJCX0KKwl9IGVsc2UgeworCQljYXVzZSAmPSBtdjY0eDYwX2NhY2hlZF9sb3dfbWFzazsKKwkJbGV2ZWwxID0gTVY2NHg2MF9MRVZFTDFfTE9XOworCX0KKwlpZiAoY2F1c2UpIHsKKwkJaHdpcnEgPSAobGV2ZWwxIDw8IE1WNjR4NjBfTEVWRUwxX09GRlNFVCkgfCBfX2lsb2cyKGNhdXNlKTsKKwkJdmlycSA9IGlycV9saW5lYXJfcmV2bWFwKG12NjR4NjBfaXJxX2hvc3QsIGh3aXJxKTsKKwl9CisKKwlyZXR1cm4gdmlycTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9LY29uZmlnCmluZGV4IDg4NzczOWYuLmY2MTFkMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvS2NvbmZpZwpAQCAtNSwxNSArNSwxMyBAQAogY29uZmlnIFVDQ19TTE9XCiAJYm9vbAogCWRlZmF1bHQgbgotCXNlbGVjdCBVQ0MKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBwcm92aWRlcyBxZV9saWIgc3VwcG9ydCB0byBVQ0Mgc2xvdwogCSAgcHJvdG9jb2xzOiBVQVJULCBCSVNZTkMsIFFNQwogCiBjb25maWcgVUNDX0ZBU1QKIAlib29sCi0JZGVmYXVsdCBuCi0Jc2VsZWN0IFVDQworCWRlZmF1bHQgeSBpZiBVQ0NfR0VUSAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHFlX2xpYiBzdXBwb3J0IHRvIFVDQyBmYXN0CiAJICBwcm90b2NvbHM6IEhETEMsIEV0aGVybmV0LCBBVE0sIHRyYW5zcGFyZW50CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYwppbmRleCA3ZjRjMDc1Li45MGY4NzQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlLmMKQEAgLTI0NCw3ICsyNDQsNyBAQAogc3RhdGljIGludCBxZV9zZG1hX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3Qgc2RtYSAqc2RtYSA9ICZxZV9pbW1yLT5zZG1hOwotCXUzMiBzZG1hX2J1Zl9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBzZG1hX2J1Zl9vZmZzZXQ7CiAKIAlpZiAoIXNkbWEpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMjUyLDEwICsyNTIsMTAgQEAKIAkvKiBhbGxvY2F0ZSAyIGludGVybmFsIHRlbXBvcmFyeSBidWZmZXJzICg1MTIgYnl0ZXMgc2l6ZSBlYWNoKSBmb3IKIAkgKiB0aGUgU0RNQSAqLwogIAlzZG1hX2J1Zl9vZmZzZXQgPSBxZV9tdXJhbV9hbGxvYyg1MTIgKiAyLCA0MDk2KTsKLQlpZiAoSVNfTVVSQU1fRVJSKHNkbWFfYnVmX29mZnNldCkpCisJaWYgKElTX0VSUl9WQUxVRShzZG1hX2J1Zl9vZmZzZXQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW91dF9iZTMyKCZzZG1hLT5zZGViY3IsIHNkbWFfYnVmX29mZnNldCAmIFFFX1NERUJDUl9CQV9NQVNLKTsKKwlvdXRfYmUzMigmc2RtYS0+c2RlYmNyLCAodTMyKSBzZG1hX2J1Zl9vZmZzZXQgJiBRRV9TREVCQ1JfQkFfTUFTSyk7CiAgCW91dF9iZTMyKCZzZG1hLT5zZG1yLCAoUUVfU0RNUl9HTEJfMV9NU0sgfAogIAkJCQkJKDB4MSA8PCBRRV9TRE1SX0NFTl9TSElGVCkpKTsKIApAQCAtMjkxLDMzICsyOTEsMzIgQEAKIAlpZiAoKG5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImRhdGEtb25seSIpKSAhPSBOVUxMKSB7CiAJCWFkZHJlc3MgPSAqb2ZfZ2V0X2FkZHJlc3MobnAsIDAsICZzaXplLCAmZmxhZ3MpOwogCQlvZl9ub2RlX3B1dChucCk7Ci0JCXJoX2F0dGFjaF9yZWdpb24oJnFlX211cmFtX2luZm8sCi0JCQkodm9pZCAqKWFkZHJlc3MsIChpbnQpc2l6ZSk7CisJCXJoX2F0dGFjaF9yZWdpb24oJnFlX211cmFtX2luZm8sIGFkZHJlc3MsIChpbnQpIHNpemUpOwogCX0KIH0KIAogLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGluZGV4IGludG8gdGhlIE1VUkFNIGFyZWEuCiAgKi8KLXUzMiBxZV9tdXJhbV9hbGxvYyh1MzIgc2l6ZSwgdTMyIGFsaWduKQordW5zaWduZWQgbG9uZyBxZV9tdXJhbV9hbGxvYyhpbnQgc2l6ZSwgaW50IGFsaWduKQogewotCXZvaWQgKnN0YXJ0OworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxZV9tdXJhbV9sb2NrLCBmbGFncyk7CiAJc3RhcnQgPSByaF9hbGxvY19hbGlnbigmcWVfbXVyYW1faW5mbywgc2l6ZSwgYWxpZ24sICJRRSIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFlX211cmFtX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAodTMyKSBzdGFydDsKKwlyZXR1cm4gc3RhcnQ7CiB9CiBFWFBPUlRfU1lNQk9MKHFlX211cmFtX2FsbG9jKTsKIAotaW50IHFlX211cmFtX2ZyZWUodTMyIG9mZnNldCkKK2ludCBxZV9tdXJhbV9mcmVlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxZV9tdXJhbV9sb2NrLCBmbGFncyk7Ci0JcmV0ID0gcmhfZnJlZSgmcWVfbXVyYW1faW5mbywgKHZvaWQgKilvZmZzZXQpOworCXJldCA9IHJoX2ZyZWUoJnFlX211cmFtX2luZm8sIG9mZnNldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWVfbXVyYW1fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTMyNSwxNiArMzI0LDE2IEBACiBFWFBPUlRfU1lNQk9MKHFlX211cmFtX2ZyZWUpOwogCiAvKiBub3Qgc3VyZSBpZiB0aGlzIGlzIGV2ZXIgbmVlZGVkICovCi11MzIgcWVfbXVyYW1fYWxsb2NfZml4ZWQodTMyIG9mZnNldCwgdTMyIHNpemUpCit1bnNpZ25lZCBsb25nIHFlX211cmFtX2FsbG9jX2ZpeGVkKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgc2l6ZSkKIHsKLQl2b2lkICpzdGFydDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcWVfbXVyYW1fbG9jaywgZmxhZ3MpOwotCXN0YXJ0ID0gcmhfYWxsb2NfZml4ZWQoJnFlX211cmFtX2luZm8sICh2b2lkICopb2Zmc2V0LCBzaXplLCAiY29tbXByb2MiKTsKKwlzdGFydCA9IHJoX2FsbG9jX2ZpeGVkKCZxZV9tdXJhbV9pbmZvLCBvZmZzZXQsIHNpemUsICJjb21tcHJvYyIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFlX211cmFtX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAodTMyKSBzdGFydDsKKwlyZXR1cm4gc3RhcnQ7CiB9CiBFWFBPUlRfU1lNQk9MKHFlX211cmFtX2FsbG9jX2ZpeGVkKTsKIApAQCAtMzQ0LDcgKzM0Myw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHFlX211cmFtX2R1bXApOwogCi12b2lkICpxZV9tdXJhbV9hZGRyKHUzMiBvZmZzZXQpCit2b2lkICpxZV9tdXJhbV9hZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewogCXJldHVybiAodm9pZCAqKSZxZV9pbW1yLT5tdXJhbVtvZmZzZXRdOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX2Zhc3QuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19mYXN0LmMKaW5kZXggNjYxMzdiZi4uOTE0MzIzNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX2Zhc3QuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2NfZmFzdC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2ltbWFwX3FlLmg+CkBAIC0yNjgsNyArMjY5LDcgQEAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIFR4IFZpcnR1YWwgRmlmbyAqLwogCXVjY2YtPnVjY19mYXN0X3R4X3ZpcnR1YWxfZmlmb19iYXNlX29mZnNldCA9CiAJICAgIHFlX211cmFtX2FsbG9jKHVmX2luZm8tPnV0ZnMsIFVDQ19GQVNUX1ZJUlRfRklGT19SRUdTX0FMSUdOTUVOVCk7Ci0JaWYgKElTX01VUkFNX0VSUih1Y2NmLT51Y2NfZmFzdF90eF92aXJ0dWFsX2ZpZm9fYmFzZV9vZmZzZXQpKSB7CisJaWYgKElTX0VSUl9WQUxVRSh1Y2NmLT51Y2NfZmFzdF90eF92aXJ0dWFsX2ZpZm9fYmFzZV9vZmZzZXQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBhbGxvY2F0ZSBNVVJBTSBmb3IgVFggRklGTyIsIF9fRlVOQ1RJT05fXyk7CiAJCXVjY2YtPnVjY19mYXN0X3R4X3ZpcnR1YWxfZmlmb19iYXNlX29mZnNldCA9IDA7CiAJCXVjY19mYXN0X2ZyZWUodWNjZik7CkBAIC0yODAsNyArMjgxLDcgQEAKIAkJcWVfbXVyYW1fYWxsb2ModWZfaW5mby0+dXJmcyArCiAJCQkgICBVQ0NfRkFTVF9SRUNFSVZFX1ZJUlRVQUxfRklGT19TSVpFX0ZVREdFX0ZBQ1RPUiwKIAkJCSAgIFVDQ19GQVNUX1ZJUlRfRklGT19SRUdTX0FMSUdOTUVOVCk7Ci0JaWYgKElTX01VUkFNX0VSUih1Y2NmLT51Y2NfZmFzdF9yeF92aXJ0dWFsX2ZpZm9fYmFzZV9vZmZzZXQpKSB7CisJaWYgKElTX0VSUl9WQUxVRSh1Y2NmLT51Y2NfZmFzdF9yeF92aXJ0dWFsX2ZpZm9fYmFzZV9vZmZzZXQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBhbGxvY2F0ZSBNVVJBTSBmb3IgUlggRklGTyIsIF9fRlVOQ1RJT05fXyk7CiAJCXVjY2YtPnVjY19mYXN0X3J4X3ZpcnR1YWxfZmlmb19iYXNlX29mZnNldCA9IDA7CiAJCXVjY19mYXN0X2ZyZWUodWNjZik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2Nfc2xvdy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvdWNjX3Nsb3cuYwppbmRleCBiOTMwZDY4Li4xZjY1YzI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi91Y2Nfc2xvdy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3VjY19zbG93LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaW1tYXBfcWUuaD4KQEAgLTE3NSw3ICsxNzYsNyBAQAogCS8qIEdldCBQUkFNIGJhc2UgKi8KIAl1Y2NzLT51c19wcmFtX29mZnNldCA9CiAJCXFlX211cmFtX2FsbG9jKFVDQ19TTE9XX1BSQU1fU0laRSwgQUxJR05NRU5UX09GX1VDQ19TTE9XX1BSQU0pOwotCWlmIChJU19NVVJBTV9FUlIodWNjcy0+dXNfcHJhbV9vZmZzZXQpKSB7CisJaWYgKElTX0VSUl9WQUxVRSh1Y2NzLT51c19wcmFtX29mZnNldCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIE1VUkFNIGZvciBQUkFNIiwgX19GVU5DVElPTl9fKTsKIAkJdWNjX3Nsb3dfZnJlZSh1Y2NzKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMTAsNyArMjExLDcgQEAKIAl1Y2NzLT5yeF9iYXNlX29mZnNldCA9CiAJCXFlX211cmFtX2FsbG9jKHVzX2luZm8tPnJ4X2JkX3JpbmdfbGVuICogc2l6ZW9mKHN0cnVjdCBxZV9iZCksCiAJCQkJUUVfQUxJR05NRU5UX09GX0JEKTsKLQlpZiAoSVNfTVVSQU1fRVJSKHVjY3MtPnJ4X2Jhc2Vfb2Zmc2V0KSkgeworCWlmIChJU19FUlJfVkFMVUUodWNjcy0+cnhfYmFzZV9vZmZzZXQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBhbGxvY2F0ZSBSWCBCRHMiLCBfX0ZVTkNUSU9OX18pOwogCQl1Y2NzLT5yeF9iYXNlX29mZnNldCA9IDA7CiAJCXVjY19zbG93X2ZyZWUodWNjcyk7CkBAIC0yMjAsNyArMjIxLDcgQEAKIAl1Y2NzLT50eF9iYXNlX29mZnNldCA9CiAJCXFlX211cmFtX2FsbG9jKHVzX2luZm8tPnR4X2JkX3JpbmdfbGVuICogc2l6ZW9mKHN0cnVjdCBxZV9iZCksCiAJCQlRRV9BTElHTk1FTlRfT0ZfQkQpOwotCWlmIChJU19NVVJBTV9FUlIodWNjcy0+dHhfYmFzZV9vZmZzZXQpKSB7CisJaWYgKElTX0VSUl9WQUxVRSh1Y2NzLT50eF9iYXNlX29mZnNldCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIFRYIEJEcyIsIF9fRlVOQ1RJT05fXyk7CiAJCXVjY3MtPnR4X2Jhc2Vfb2Zmc2V0ID0gMDsKIAkJdWNjX3Nsb3dfZnJlZSh1Y2NzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcm9tLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3JvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODU1YTNiLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcm9tLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogUk9NIGRldmljZSByZWdpc3RyYXRpb24KLSAqCi0gKiAoQykgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgotICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQotICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCi0gKiBvciBpbXBsaWVkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8YXNtL29mX3BsYXRmb3JtLmg+Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBvd2VycGNfZmxhc2hfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IE5VTEw7Ci0KLQkvKgotCSAqIFJlZ2lzdGVyIGFsbCB0aGUgZGV2aWNlcyB3aGljaCB0eXBlIGlzICJyb20iCi0JICovCi0Jd2hpbGUgKChub2RlID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobm9kZSwgInJvbSIpKSAhPSBOVUxMKSB7Ci0JCWlmIChub2RlLT5uYW1lID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInBvd2VycGNfZmxhc2hfaW5pdDogZm91bmQgJ3JvbScgIgotCQkJCSJkZXZpY2UsIGJ1dCB3aXRoIG5vIG5hbWUsIHNraXBwaW5nLi4uXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCW9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobm9kZSwgbm9kZS0+bmFtZSwgTlVMTCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKHBvd2VycGNfZmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X2Rldi5jCmluZGV4IDMzNzAzOWUuLjdkM2IwOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X2Rldi5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X2Rldi5jCkBAIC0xMDcsOCArMTA3LDkgQEAKIAkJCWdvdG8gZXJyOwogCQl9CiAKLQkJbWFjX2FkZHIgPSBvZl9nZXRfcHJvcGVydHkobnAsICJhZGRyZXNzIiwgTlVMTCk7Ci0JCW1lbWNweSh0c2lfZXRoX2RhdGEubWFjX2FkZHIsIG1hY19hZGRyLCA2KTsKKwkJbWFjX2FkZHIgPSBvZl9nZXRfbWFjX2FkZHJlc3MobnApOworCQlpZiAobWFjX2FkZHIpCisJCQltZW1jcHkodHNpX2V0aF9kYXRhLm1hY19hZGRyLCBtYWNfYWRkciwgNik7CiAKIAkJcGggPSBvZl9nZXRfcHJvcGVydHkobnAsICJwaHktaGFuZGxlIiwgTlVMTCk7CiAJCXBoeSA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKCpwaCk7CkBAIC0xMjksNiArMTMwLDggQEAKIAkJdHNpX2V0aF9kYXRhLnBoeXJlZ3MgPSByZXMuc3RhcnQ7CiAJCXRzaV9ldGhfZGF0YS5waHkgPSAqcGh5X2lkOwogCQl0c2lfZXRoX2RhdGEuaXJxX251bSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBoeSwgImJjbTU0eHgiKSkKKwkJCXRzaV9ldGhfZGF0YS5waHlfdHlwZSA9IFRTSTEwOF9QSFlfQkNNNTRYWDsKIAkJb2Zfbm9kZV9wdXQocGh5KTsKIAkJcmV0ID0KIAkJICAgIHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YSh0c2lfZXRoX2RldiwgJnRzaV9ldGhfZGF0YSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfcGNpLmMKaW5kZXggNThiOWU3Zi4uMjE1MzE2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfcGNpLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CiAjaW5jbHVkZSA8YXNtL3RzaTEwOC5oPgorI2luY2x1ZGUgPGFzbS90c2kxMDhfcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3RzaTEwOF9pcnEuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogCkBAIC00OSw2ICs1MCw3IEBACiAJKCgoKGJ1cyk8PDE2KSB8ICgoZGV2ZnVuYyk8PDgpIHwgKG9mZnNldCAmIDB4ZmMpKSArIHRzaTEwOF9wY2lfY2ZnX2Jhc2UpCiAKIHUzMiB0c2kxMDhfcGNpX2NmZ19iYXNlOworc3RhdGljIHUzMiB0c2kxMDhfcGNpX2NmZ19waHlzOwogdTMyIHRzaTEwOF9jc3JfdmlyX2Jhc2U7CiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpwY2lfaXJxX25vZGU7CiBzdGF0aWMgc3RydWN0IGlycV9ob3N0ICpwY2lfaXJxX2hvc3Q7CkBAIC0xODUsNyArMTg3LDcgQEAKIAogdm9pZCB0c2kxMDhfY2xlYXJfcGNpX2NmZ19lcnJvcih2b2lkKQogewotCXRzaTEwOF9jbGVhcl9wY2lfZXJyb3IoVFNJMTA4X1BDSV9DRkdfQkFTRV9QSFlTKTsKKwl0c2kxMDhfY2xlYXJfcGNpX2Vycm9yKHRzaTEwOF9wY2lfY2ZnX3BoeXMpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9vcHMgdHNpMTA4X2RpcmVjdF9wY2lfb3BzID0gewpAQCAtMTkzLDE3ICsxOTUsMTcgQEAKIAl0c2kxMDhfZGlyZWN0X3dyaXRlX2NvbmZpZwogfTsKIAotaW50IF9faW5pdCB0c2kxMDhfc2V0dXBfcGNpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KQoraW50IF9faW5pdCB0c2kxMDhfc2V0dXBfcGNpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCB1MzIgY2ZnX3BoeXMsIGludCBwcmltYXJ5KQogewogCWludCBsZW47CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwogCXN0cnVjdCByZXNvdXJjZSByc3JjOwogCWNvbnN0IGludCAqYnVzX3JhbmdlOwotCWludCBwcmltYXJ5ID0gMCwgaGFzX2FkZHJlc3MgPSAwOworCWludCBoYXNfYWRkcmVzcyA9IDA7CiAKIAkvKiBQQ0kgQ29uZmlnIG1hcHBpbmcgKi8KLQl0c2kxMDhfcGNpX2NmZ19iYXNlID0gKHUzMilpb3JlbWFwKFRTSTEwOF9QQ0lfQ0ZHX0JBU0VfUEhZUywKLQkJCVRTSTEwOF9QQ0lfQ0ZHX1NJWkUpOworCXRzaTEwOF9wY2lfY2ZnX2Jhc2UgPSAodTMyKWlvcmVtYXAoY2ZnX3BoeXMsIFRTSTEwOF9QQ0lfQ0ZHX1NJWkUpOworCXRzaTEwOF9wY2lfY2ZnX3BoeXMgPSBjZmdfcGh5czsKIAlEQkcoIlRTSV9QQ0k6ICVzIHRzaTEwOF9wY2lfY2ZnX2Jhc2U9MHgleFxuIiwgX19GVU5DVElPTl9fLAogCSAgICB0c2kxMDhfcGNpX2NmZ19iYXNlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMKaW5kZXggOTY4ZmI0MC4uODkwNTk4OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAljb25zdCB1MzIgKmluZGV4cCwgKmRjcnJlZzsKIAlpbnQgbGVuOwogCi0JQlVHX09OKCEgZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgImlibSx1aWMiKSk7CisJQlVHX09OKCEgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgImlibSx1aWMiKSk7CiAKIAl1aWMgPSBhbGxvY19ib290bWVtKHNpemVvZigqdWljKSk7CiAJaWYgKCEgdWljKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCmluZGV4IGI0ODFkYjEuLjI4ZmRmNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKQEAgLTEyMTcsNyArMTIxNyw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBzaXplLCBvZmZzZXQ7CiAJY29uc3QgY2hhciAqbmFtZTsKLQljaGFyICptb2RuYW1lOwogCiAJKnN0YXJ0cCA9ICplbmRwID0gMDsKIAlpZiAocGMgPT0gMCkKQEAgLTEyMjUsNyArMTIyNCw3IEBACiAJaWYgKHNldGptcChidXNfZXJyb3Jfam1wKSA9PSAwKSB7CiAJCWNhdGNoX21lbW9yeV9lcnJvcnMgPSAxOwogCQlzeW5jKCk7Ci0JCW5hbWUgPSBrYWxsc3ltc19sb29rdXAocGMsICZzaXplLCAmb2Zmc2V0LCAmbW9kbmFtZSwgdG1wc3RyKTsKKwkJbmFtZSA9IGthbGxzeW1zX2xvb2t1cChwYywgJnNpemUsICZvZmZzZXQsIE5VTEwsIHRtcHN0cik7CiAJCWlmIChuYW1lICE9IE5VTEwpIHsKIAkJCSpzdGFydHAgPSBwYyAtIG9mZnNldDsKIAkJCSplbmRwID0gcGMgLSBvZmZzZXQgKyBzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvNHh4X2lvL3NlcmlhbF9zaWNjLmMgYi9hcmNoL3BwYy80eHhfaW8vc2VyaWFsX3NpY2MuYwppbmRleCBlMzU0ODM5Li5lZmEwYTU2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy80eHhfaW8vc2VyaWFsX3NpY2MuYworKysgYi9hcmNoL3BwYy80eHhfaW8vc2VyaWFsX3NpY2MuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgQmFzZWQgb24gZHJpdmVycy9jaGFyL3NlcmlhbF9hbWJhLmMsIGJ5IEFSTSBMdGQuCiAgKgotICogIENvcHlyaWdodCAyMDAxIElCTSBDcm9wLgorICogIENvcHlyaWdodCAyMDAxIElCTSBDb3JwLgogICogIEF1dGhvcjogSUJNIENoaW5hIFJlc2VhcmNoIExhYgogICogICAgICAgICAgICBZdWRvbmcgWWFuZyA8eWFuZ3l1ZEBjbi5pYm0uY29tPgogICogICAgICAgICAgICBZaSBHZSAgICAgICA8Z2V5aUBjbi5pYm0uY29tPgpAQCAtMTU1LDE2ICsxNTUsMTYgQEAKIAogLyogc2VyaWFsIHBvcnQgdHJhbnNtaXQgY29tbWFuZCByZWdpc3RlciAqLwogCi0jZGVmaW5lIF9UeENSX0VUX01BU0sgICAweDgwICAgICAgICAgICAvKiB0cmFuc21pdGVyIGVuYWJsZSBtYXNrICovCisjZGVmaW5lIF9UeENSX0VUX01BU0sgICAweDgwICAgICAgICAgICAvKiB0cmFuc21pdHRlciBlbmFibGUgbWFzayAqLwogI2RlZmluZSBfVHhDUl9ETUVfTUFTSyAgMHg2MCAgICAgICAgICAgLyogZG1hIG1vZGUgbWFzayAqLwogI2RlZmluZSBfVHhDUl9USUVfTUFTSyAgMHgxMCAgICAgICAgICAgLyogZW1wdHkgaW50ZXJydXB0IGVuYWJsZSBtYXNrICovCiAjZGVmaW5lIF9UeENSX0VJRV9NQVNLICAweDA4ICAgICAgICAgICAvKiBlcnJvciBpbnRlcnJ1cHQgZW5hYmxlIG1hc2sgKi8KICNkZWZpbmUgX1R4Q1JfU1BFX01BU0sgIDB4MDQgICAgICAgICAgIC8qIHN0b3AvcGF1c2UgbWFzayAqLwogI2RlZmluZSBfVHhDUl9UQl9NQVNLICAgMHgwMiAgICAgICAgICAgLyogdHJhbnNtaXQgYnJlYWsgbWFzayAqLwogCi0jZGVmaW5lIF9UeENSX0VUX0VOQUJMRSBfVHhDUl9FVF9NQVNLICAvKiB0cmFuc21pdGVyIGVuYWJsZWQgKi8KLSNkZWZpbmUgX1R4Q1JfRE1FX0RJU0FCTEUgMHgwMCAgICAgICAgIC8qIHRyYW5zbWl0ZXIgZGlzYWJsZWQsIFRCUiBpbnRyIGRpc2FibGVkICovCi0jZGVmaW5lIF9UeENSX0RNRV9UQlIgICAweDIwICAgICAgICAgICAvKiB0cmFuc21pdGVyIGRpc2FibGVkLCBUQlIgaW50ciBlbmFibGVkICovCisjZGVmaW5lIF9UeENSX0VUX0VOQUJMRSBfVHhDUl9FVF9NQVNLICAvKiB0cmFuc21pdHRlciBlbmFibGVkICovCisjZGVmaW5lIF9UeENSX0RNRV9ESVNBQkxFIDB4MDAgICAgICAgICAvKiB0cmFuc21pdHRlciBkaXNhYmxlZCwgVEJSIGludHIgZGlzYWJsZWQgKi8KKyNkZWZpbmUgX1R4Q1JfRE1FX1RCUiAgIDB4MjAgICAgICAgICAgIC8qIHRyYW5zbWl0dGVyIGRpc2FibGVkLCBUQlIgaW50ciBlbmFibGVkICovCiAjZGVmaW5lIF9UeENSX0RNRV9DSEFOXzIgMHg0MCAgICAgICAgICAvKiBkbWEgZW5hYmxlZCwgZGVzdGluYXRpb24gY2hhbm4gMiAqLwogI2RlZmluZSBfVHhDUl9ETUVfQ0hBTl8zIDB4NjAgICAgICAgICAgLyogZG1hIGVuYWJsZWQsIGRlc3RpbmF0aW9uIGNoYW5uIDMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvOHh4X2lvL2NvbW1wcm9jLmMgYi9hcmNoL3BwYy84eHhfaW8vY29tbXByb2MuYwppbmRleCA3YTg3MjJiLi43MDg4NDI4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy84eHhfaW8vY29tbXByb2MuYworKysgYi9hcmNoL3BwYy84eHhfaW8vY29tbXByb2MuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAKIAkvKiBTZXQgU0RNQSBCdXMgUmVxdWVzdCBwcmlvcml0eSA1LgogCSAqIE9uIDg2MFQsIHRoaXMgYWxzbyBlbmFibGVzIEZFQyBwcmlvcml0eSA2LiAgSSBhbSBub3Qgc3VyZQotCSAqIHRoaXMgaXMgd2hhdCB3ZSByZWFseSB3YW50IGZvciBzb21lIGFwcGxpY2F0aW9ucywgYnV0IHRoZQorCSAqIHRoaXMgaXMgd2hhdCB3ZSByZWFsbHkgd2FudCBmb3Igc29tZSBhcHBsaWNhdGlvbnMsIGJ1dCB0aGUKIAkgKiBtYW51YWwgcmVjb21tZW5kcyBpdC4KIAkgKiBCaXQgMjUsIEZBTSBjYW4gYWxzbyBiZSBzZXQgdG8gdXNlIEZFQyBhZ2dyZXNzaXZlIG1vZGUgKDg2MFQpLgogCSAqLwpAQCAtNDAyLDcgKzQwMiw3IEBACiAJICogd2l0aCB0aGUgcHJvY2Vzc29yIGFuZCB0aGUgbWljcm9jb2RlIHBhdGNoZXMgYXBwbGllZCAvIGFjdGl2YXRlZC4KIAkgKiBCdXQgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgYXQgbGVhc3Qgc2FmZS4KIAkgKi8KLQlyaF9hdHRhY2hfcmVnaW9uKCZjcG1fZHBtZW1faW5mbywgKHZvaWQgKilDUE1fREFUQU9OTFlfQkFTRSwgQ1BNX0RBVEFPTkxZX1NJWkUpOworCXJoX2F0dGFjaF9yZWdpb24oJmNwbV9kcG1lbV9pbmZvLCBDUE1fREFUQU9OTFlfQkFTRSwgQ1BNX0RBVEFPTkxZX1NJWkUpOwogfQogCiAvKgpAQCAtNDEwLDkgKzQxMCw5IEBACiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gb2Zmc2V0IGludG8gdGhlIERQUkFNIGFyZWEuCiAgKiBVc2UgY3BtX2RwcmFtX2FkZHIoKSB0byBnZXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYXJlYS4KICAqLwotdWludCBjcG1fZHBhbGxvYyh1aW50IHNpemUsIHVpbnQgYWxpZ24pCit1bnNpZ25lZCBsb25nIGNwbV9kcGFsbG9jKHVpbnQgc2l6ZSwgdWludCBhbGlnbikKIHsKLQl2b2lkICpzdGFydDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3BtX2RwbWVtX2xvY2ssIGZsYWdzKTsKQEAgLTQyMCwzNCArNDIwLDM0IEBACiAJc3RhcnQgPSByaF9hbGxvYygmY3BtX2RwbWVtX2luZm8sIHNpemUsICJjb21tcHJvYyIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gKHVpbnQpc3RhcnQ7CisJcmV0dXJuIHN0YXJ0OwogfQogRVhQT1JUX1NZTUJPTChjcG1fZHBhbGxvYyk7CiAKLWludCBjcG1fZHBmcmVlKHVpbnQgb2Zmc2V0KQoraW50IGNwbV9kcGZyZWUodW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7Ci0JcmV0ID0gcmhfZnJlZSgmY3BtX2RwbWVtX2luZm8sICh2b2lkICopb2Zmc2V0KTsKKwlyZXQgPSByaF9mcmVlKCZjcG1fZHBtZW1faW5mbywgb2Zmc2V0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woY3BtX2RwZnJlZSk7CiAKLXVpbnQgY3BtX2RwYWxsb2NfZml4ZWQodWludCBvZmZzZXQsIHVpbnQgc2l6ZSwgdWludCBhbGlnbikKK3Vuc2lnbmVkIGxvbmcgY3BtX2RwYWxsb2NfZml4ZWQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQgc2l6ZSwgdWludCBhbGlnbikKIHsKLQl2b2lkICpzdGFydDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3BtX2RwbWVtX2xvY2ssIGZsYWdzKTsKIAljcG1fZHBtZW1faW5mby5hbGlnbm1lbnQgPSBhbGlnbjsKLQlzdGFydCA9IHJoX2FsbG9jX2ZpeGVkKCZjcG1fZHBtZW1faW5mbywgKHZvaWQgKilvZmZzZXQsIHNpemUsICJjb21tcHJvYyIpOworCXN0YXJ0ID0gcmhfYWxsb2NfZml4ZWQoJmNwbV9kcG1lbV9pbmZvLCBvZmZzZXQsIHNpemUsICJjb21tcHJvYyIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gKHVpbnQpc3RhcnQ7CisJcmV0dXJuIHN0YXJ0OwogfQogRVhQT1JUX1NZTUJPTChjcG1fZHBhbGxvY19maXhlZCk7CiAKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogfQogRVhQT1JUX1NZTUJPTChjcG1fZHBkdW1wKTsKIAotdm9pZCAqY3BtX2RwcmFtX2FkZHIodWludCBvZmZzZXQpCit2b2lkICpjcG1fZHByYW1fYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAlyZXR1cm4gKChpbW1hcF90ICopSU1BUF9BRERSKS0+aW1fY3BtLmNwX2RwbWVtICsgb2Zmc2V0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvOHh4X2lvL2ZlYy5jIGIvYXJjaC9wcGMvOHh4X2lvL2ZlYy5jCmluZGV4IDU3YTlhNjEuLmQzODMzNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjLzh4eF9pby9mZWMuYworKysgYi9hcmNoL3BwYy84eHhfaW8vZmVjLmMKQEAgLTE4NzgsNyArMTg3OCw3IEBACiAJYmRwLS07CiAJYmRwLT5jYmRfc2MgfD0gQkRfU0NfV1JBUDsKIAotCS8qIC4uLmFuZCB0aGUgc2FtZSBmb3IgdHJhbnNtbWl0LgorCS8qIC4uLmFuZCB0aGUgc2FtZSBmb3IgdHJhbnNtaXQuCiAJKi8KIAliZHAgPSBmZXAtPnR4X2JkX2Jhc2U7CiAJZm9yIChpPTA7IGk8VFhfUklOR19TSVpFOyBpKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3QvbGliL3ZyZXNldC5jIGIvYXJjaC9wcGMvYm9vdC9saWIvdnJlc2V0LmMKaW5kZXggNDYzYmEwMC4uOTg1MzllOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9saWIvdnJlc2V0LmMKKysrIGIvYXJjaC9wcGMvYm9vdC9saWIvdnJlc2V0LmMKQEAgLTUxOCw3ICs1MTgsNyBAQAogCW91dGIoMHgzYzYsIDB4ZmYpOyAgLyogTUFTSyAqLwogCiAJZm9yICggaSA9IDA7IGkgPCAweDEwOyBpKyspCi0JCXdyaXRlQXR0cihpLCBBQ1tpXSwgMCk7ICAvKiBwYWxsZXRlICovCisJCXdyaXRlQXR0cihpLCBBQ1tpXSwgMCk7ICAvKiBwYWxldHRlICovCiAJd3JpdGVBdHRyKDB4MTAsIDB4MGMsIDApOyAgICAvKiB0ZXh0IG1vZGUgKi8KIAl3cml0ZUF0dHIoMHgxMSwgMHgwMCwgMCk7ICAgIC8qIG92ZXJzY2FuIGNvbG9yIChib3JkZXIpICovCiAJd3JpdGVBdHRyKDB4MTIsIDB4MGYsIDApOyAgICAvKiBwbGFuZSBlbmFibGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL204eHhfdHR5LmMgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9tOHh4X3R0eS5jCmluZGV4IGNhY2M0MGYuLmVhNjE1ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL204eHhfdHR5LmMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbTh4eF90dHkuYwpAQCAtMSw3ICsxLDcgQEAKIC8qIE1pbmltYWwgc2VyaWFsIGZ1bmN0aW9ucyBuZWVkZWQgdG8gc2VuZCBtZXNzYWdlcyBvdXQgdGhlIHNlcmlhbAogICogcG9ydCBvbiB0aGUgTUJYIGNvbnNvbGUuCiAgKgotICogVGhlIE1CWCB1eGVzIFNNQzEgZm9yIHRoZSBzZXJpYWwgcG9ydC4gIFdlIHJlc2V0IHRoZSBwb3J0IGFuZCB1c2UKKyAqIFRoZSBNQlggdXNlcyBTTUMxIGZvciB0aGUgc2VyaWFsIHBvcnQuICBXZSByZXNldCB0aGUgcG9ydCBhbmQgdXNlCiAgKiBvbmx5IHRoZSBmaXJzdCBCRCB0aGF0IEVQUEMtQnVnIHNldCB1cCBhcyBhIGNoYXJhY3RlciBGSUZPLgogICoKICAqIExhdGVyIHZlcnNpb25zIChhdCBsZWFzdCAxLjQsIG1heWJlIGVhcmxpZXIpIG9mIHRoZSBNQlggRVBQQy1CdWcKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtZW1iZWRkZWQuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtZW1iZWRkZWQuYwppbmRleCAxMDIxOWVlYy4uOGEwOGFkMyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1lbWJlZGRlZC5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtZW1iZWRkZWQuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAKIAkvKgogCSAqIFdlIGxpbmsgb3Vyc2VsZiB0byBhbiBhcmJpdHJhcnkgbG93IGFkZHJlc3MuICBXaGVuIHdlIHJ1biwgd2UKLQkgKiByZWxvY2F0ZSBvdXRzZWxmIHRvIHRoYXQgYWRkcmVzcy4gIF9faW1hZ2VfYmVpbmcgcG9pbnRzIHRvCisJICogcmVsb2NhdGUgb3Vyc2VsZiB0byB0aGF0IGFkZHJlc3MuICBfX2ltYWdlX2JlaW5nIHBvaW50cyB0bwogCSAqIHRoZSBwYXJ0IG9mIHRoZSBpbWFnZSB3aGVyZSB0aGUgekltYWdlIGlzLiAtLSBUb20KIAkgKi8KIAl6aW1hZ2Vfc3RhcnQgPSAoY2hhciAqKSh1bnNpZ25lZCBsb25nKSgmX19pbWFnZV9iZWdpbik7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9tcGM1Mnh4X3R0eS5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXBjNTJ4eF90dHkuYwppbmRleCA3YjU5MjRjYy4uNjk1NTg5MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXBjNTJ4eF90dHkuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9tcGM1Mnh4X3R0eS5jCkBAIC0zMyw3ICszMyw3IEBACiAgKiBydGMuICBXZSByZWFkIHRoZSBkZWNyZW1lbnRlciBjaGFuZ2UgZHVyaW5nIG9uZSBydGMgdGljawogICogYW5kIG11bHRpcGx5IGJ5IDQgdG8gZ2V0IHRoZSBzeXN0ZW0gYnVzIGNsb2NrIGZyZXF1ZW5jeS4gU2luY2UgYQogICogcnRjIHRpY2sgaXMgb25lIHNlY29uZHMsIGFuZCB0aGF0J3MgcHJldHR5IGxvbmcsIHdlIGNoYW5nZSB0aGUgcnRjCi0gKiBkaXZpZGVycyB0ZW1wb3Jhcmx5IHRvIHNldCB0aGVtIDY0eCBmYXN0ZXIgOykKKyAqIGRpdmlkZXJzIHRlbXBvcmFyaWx5IHRvIHNldCB0aGVtIDY0eCBmYXN0ZXIgOykKICAqLwogc3RhdGljIGludAogbXBjNTJ4eF9pcGJmcmVxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9tdjY0eDYwX3R0eS5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXY2NHg2MF90dHkuYwppbmRleCA3ODFlMDQwLi44YTczNTc4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9tdjY0eDYwX3R0eS5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL212NjR4NjBfdHR5LmMKQEAgLTMzOCw3ICszMzgsNyBAQAogCiAJcmRwID0gJnJkW2NvbV9wb3J0XVtjdXJfcmRbY29tX3BvcnRdXTsKIAotCS8qIEdvIHRocnUgcmN2IGRlc2MncyB1bnRpbCBlbXB0eSBsb29raW5nIGZvciBvbmUgd2l0aCBkYXRhIChubyBlcnJvcikqLworCS8qIEdvIHRocm91Z2ggcmN2IGRlc2NzIHVudGlsIGVtcHR5IGxvb2tpbmcgZm9yIG9uZSB3aXRoIGRhdGEgKG5vIGVycm9yKSovCiAJd2hpbGUgKCgocmRwLT5jbWRfc3RhdCAmIFNETUFfREVTQ19DTURTVEFUX08pID09IDApICYmCiAJCShsb29wX2NvdW50KysgPCBSWF9OVU1fREVTQykpIHsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvcnc0L3N0Yi5oIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvcnc0L3N0Yi5oCmluZGV4IGZkOThlZTAuLjlhZmE1YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL3J3NC9zdGIuaAorKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9ydzQvc3RiLmgKQEAgLTg4LDcgKzg4LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgU1RCIHRhc2tzLCB0YXNrIHN0YWNrIHNpemVzLCBhbmQgdGFzayBwcmlvcml0aWVzLiAgVGhlIGFjdHVhbCB0YXNrIHByaW9yaXR5CiB8IGlzIDEgbW9yZSB0aGFuIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHNpbmNlIHByaW9yaXR5IDAgaXMgcmVzZXJ2ZWQgKHN5c3RlbQotfCBpbnRlcm5hbHkgYWRkcyAxIHRvIHN1cHBsaWVkIHByaW9yaXR5IG51bWJlcikuCit8IGludGVybmFsbHkgYWRkcyAxIHRvIHN1cHBsaWVkIHByaW9yaXR5IG51bWJlcikuCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZGVmaW5lIFNUQl9JRExFX1RBU0tfU1MgICAgICAgICg1KiAxMDI0KQogI2RlZmluZSBTVEJfSURMRV9UQVNLX1BSSU8gICAgICAwCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGM1ODUwYTIuLmU4ZTk0MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0zNSw3ICszNSw3IEBACiBtYWluKHZvaWQpCiB7CiAJREVGSU5FKFRIUkVBRCwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQpKTsKLQlERUZJTkUoVEhSRUFEX0lORk8sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8pKTsKKwlERUZJTkUoVEhSRUFEX0lORk8sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2spKTsKIAlERUZJTkUoTU0sIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgbW0pKTsKIAlERUZJTkUoUFRSQUNFLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHB0cmFjZSkpOwogCURFRklORShLU1AsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBrc3ApKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9wcGMva2VybmVsL2VudHJ5LlMKaW5kZXggYWI2NDI1Ni4uZmJhN2NhMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2VudHJ5LlMKQEAgLTU5Niw3ICs1OTYsMTEgQEAKIAltcglyMTIscjQJCS8qIHJlc3RhcnQgYXQgZXhjX2V4aXRfcmVzdGFydCAqLwogCWIJMmIKIAotCS5jb21tCWZlZV9yZXN0YXJ0cyw0CisJLnNlY3Rpb24gLmJzcworCS5hbGlnbgkyCitmZWVfcmVzdGFydHM6CisJLnNwYWNlCTQKKwkucHJldmlvdXMKIAogLyogYWFyZ2gsIGEgbm9ucmVjb3ZlcmFibGUgaW50ZXJydXB0LCBwYW5pYyAqLwogLyogYWFyZ2gsIHdlIGRvbid0IGtub3cgd2hpY2ggdHJhcCB0aGlzIGlzICovCkBAIC04NTEsNyArODU1LDExIEBACiAJbXRzcHIJU1BSTl9EQlNSLHIxMQkvKiBjbGVhciBhbGwgcGVuZGluZyBkZWJ1ZyBldmVudHMgKi8KIAlibHIKIAotCS5jb21tCWdsb2JhbF9kYmNyMCw4CisJLnNlY3Rpb24gLmJzcworCS5hbGlnbgk0CitnbG9iYWxfZGJjcjA6CisJLnNwYWNlCTgKKwkucHJldmlvdXMKICNlbmRpZiAvKiAhKENPTkZJR180eHggfHwgQ09ORklHX0JPT0tFKSAqLwogCiBkb193b3JrOgkJCS8qIHIxMCBjb250YWlucyBNU1JfS0VSTkVMIGhlcmUgKi8KQEAgLTkyNiw0ICs5MzQsOCBAQAogCS8qIHNob3VsZG4ndCByZXR1cm4gKi8KIAliCTRiCiAKLQkuY29tbQllZV9yZXN0YXJ0cyw0CisJLnNlY3Rpb24gLmJzcworCS5hbGlnbgkyCitlZV9yZXN0YXJ0czoKKwkuc3BhY2UJNAorCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BwY19odGFiLmMgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2h0YWIuYwppbmRleCAwYTdlNDJkLi5hYTA3YjYzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvcHBjX2h0YWIuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2h0YWIuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IDRhZDQ5OTYuLmE0MTY1MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9idGV4dC5oPgotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS94bW9uLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogI2luY2x1ZGUgPGFzbS9kY3IuaD4KQEAgLTkzLDcgKzkyLDYgQEAKIEVYUE9SVF9TWU1CT0woc3RyY2F0KTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKIEVYUE9SVF9TWU1CT0woc3RyY21wKTsKLUVYUE9SVF9TWU1CT0woX19kaXY2NF8zMik7CiAKIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsKTsKIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvc21wLmMgYi9hcmNoL3BwYy9rZXJuZWwvc21wLmMKaW5kZXggOTZhNTU5Ny4uMDU1OTk4NSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9zbXAuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDgxMGY3YWEuLmFlYTEwMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCkBAIC01NzcsNyArNTc3LDcgQEAKIAkgKiBFU1JfRFNUICghPykgb3IgMC4gIEluIHRoZSBwcm9jZXNzIG9mIGNoYXNpbmcgdGhpcyB3aXRoIHRoZQogCSAqIGhhcmR3YXJlIHBlb3BsZSAtIG5vdCBzdXJlIGlmIGl0IGNhbiBoYXBwZW4gb24gYW55IGlsbGVnYWwKIAkgKiBpbnN0cnVjdGlvbiBvciBvbmx5IG9uIEZQIGluc3RydWN0aW9ucywgd2hldGhlciB0aGVyZSBpcyBhCi0JICogcGF0dGVybiB0byBvY2N1cmVuY2VzIGV0Yy4gLWRnaWJzb24gMzEvTWFyLzIwMDMgKi8KKwkgKiBwYXR0ZXJuIHRvIG9jY3VycmVuY2VzIGV0Yy4gLWRnaWJzb24gMzEvTWFyLzIwMDMgKi8KIAlpZiAoIShyZWFzb24gJiBSRUFTT05fVFJBUCkgJiYgZG9fbWF0aGVtdShyZWdzKSA9PSAwKSB7CiAJCWVtdWxhdGVfc2luZ2xlX3N0ZXAocmVncyk7CiAJCXJldHVybjsKQEAgLTg2MCw3ICs4NjAsNyBAQAogCXNwZWZzY3IgPSBjdXJyZW50LT50aHJlYWQuc3BlZnNjcjsKIAlmcGV4Y19tb2RlID0gY3VycmVudC0+dGhyZWFkLmZwZXhjX21vZGU7CiAKLQkvKiBIYXJkd2FyZSBkb2VzIG5vdCBuZWNjZXNzYXJpbHkgc2V0IHN0aWNreQorCS8qIEhhcmR3YXJlIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHNldCBzdGlja3kKIAkgKiB1bmRlcmZsb3cvb3ZlcmZsb3cvaW52YWxpZCBmbGFncyAqLwogCWlmICgoc3BlZnNjciAmIFNQRUZTQ1JfRk9WRikgJiYgKGZwZXhjX21vZGUgJiBQUl9GUF9FWENfT1ZGKSkgewogCQljb2RlID0gRlBFX0ZMVE9WRjsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wcGMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNDRjZDEyOC4uMTlkYjg3NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTMyLDcgKzMyLDcgQEAKICAgLnRleHQgICAgICA6CiAgIHsKICAgICBfdGV4dCA9IC47Ci0gICAgKigudGV4dCkKKyAgICBURVhUX1RFWFQKICAgICBTQ0hFRF9URVhUCiAgICAgTE9DS19URVhUCiAgICAgKiguZml4dXApCkBAIC02Nyw3ICs2Nyw3IEBACiAgIC4gPSBBTElHTig0MDk2KTsKICAgLmRhdGEgICAgOgogICB7Ci0gICAgKiguZGF0YSkKKyAgICBEQVRBX0RBVEEKICAgICAqKC5kYXRhMSkKICAgICAqKC5zZGF0YSkKICAgICAqKC5zZGF0YTIpCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9saWIvTWFrZWZpbGUgYi9hcmNoL3BwYy9saWIvTWFrZWZpbGUKaW5kZXggNDIyYmVmOS4uMDk1ZTY2MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL2xpYi9NYWtlZmlsZQpAQCAtMyw2ICszLDMgQEAKICMKIAogb2JqLXkJCQk6PSBjaGVja3N1bS5vIHN0cmluZy5vIGRpdjY0Lm8KLQotb2JqLSQoQ09ORklHXzh4eCkJKz0gcmhlYXAubwotb2JqLSQoQ09ORklHX0NQTTIpCSs9IHJoZWFwLm8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2xpYi9yaGVhcC5jIGIvYXJjaC9wcGMvbGliL3JoZWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MDcwMDcuLjAwMDAwMDAKLS0tIGEvYXJjaC9wcGMvbGliL3JoZWFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OTIgKzAsMCBAQAotLyoKLSAqIEEgUmVtb3RlIEhlYXAuICBSZW1vdGUgbWVhbnMgdGhhdCB3ZSBkb24ndCB0b3VjaCB0aGUgbWVtb3J5IHRoYXQgdGhlCi0gKiBoZWFwIHBvaW50cyB0by4gTm9ybWFsIGhlYXAgaW1wbGVtZW50YXRpb25zIHVzZSB0aGUgbWVtb3J5IHRoZXkgbWFuYWdlCi0gKiB0byBwbGFjZSB0aGVpciBsaXN0LiBXZSBjYW5ub3QgZG8gdGhhdCBiZWNhdXNlIHRoZSBtZW1vcnkgd2UgbWFuYWdlIG1heQotICogaGF2ZSBzcGVjaWFsIHByb3BlcnRpZXMsIGZvciBleGFtcGxlIGl0IGlzIHVuY2FjaGFibGUgb3Igb2YgZGlmZmVyZW50Ci0gKiBlbmRpYW5lc3MuCi0gKgotICogQXV0aG9yOiBQYW50ZWxpcyBBbnRvbmlvdSA8cGFudG9AaW50cmFjb20uZ3I+Ci0gKgotICogMjAwNCAoYykgSU5UUkFDT00gUy5BLiBHcmVlY2UuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgotICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQotICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCi0gKiBvciBpbXBsaWVkLgotICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL3JoZWFwLmg+Ci0KLS8qCi0gKiBGaXh1cCBhIGxpc3RfaGVhZCwgbmVlZGVkIHdoZW4gY29weWluZyBsaXN0cy4gIElmIHRoZSBwb2ludGVycyBmYWxsCi0gKiBiZXR3ZWVuIHMgYW5kIGUsIGFwcGx5IHRoZSBkZWx0YS4gIFRoaXMgYXNzdW1lcyB0aGF0Ci0gKiBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCAqKSA9PSBzaXplb2YodW5zaWduZWQgbG9uZyAqKS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZpeHVwKHVuc2lnbmVkIGxvbmcgcywgdW5zaWduZWQgbG9uZyBlLCBpbnQgZCwKLQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsKQotewotCXVuc2lnbmVkIGxvbmcgKnBwOwotCi0JcHAgPSAodW5zaWduZWQgbG9uZyAqKSZsLT5uZXh0OwotCWlmICgqcHAgPj0gcyAmJiAqcHAgPCBlKQotCQkqcHAgKz0gZDsKLQotCXBwID0gKHVuc2lnbmVkIGxvbmcgKikmbC0+cHJldjsKLQlpZiAoKnBwID49IHMgJiYgKnBwIDwgZSkKLQkJKnBwICs9IGQ7Ci19Ci0KLS8qIEdyb3cgdGhlIGFsbG9jYXRlZCBibG9ja3MgKi8KLXN0YXRpYyBpbnQgZ3JvdyhyaF9pbmZvX3QgKiBpbmZvLCBpbnQgbWF4X2Jsb2NrcykKLXsKLQlyaF9ibG9ja190ICpibG9jaywgKmJsazsKLQlpbnQgaSwgbmV3X2Jsb2NrczsKLQlpbnQgZGVsdGE7Ci0JdW5zaWduZWQgbG9uZyBibGtzLCBibGtlOwotCi0JaWYgKG1heF9ibG9ja3MgPD0gaW5mby0+bWF4X2Jsb2NrcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQluZXdfYmxvY2tzID0gbWF4X2Jsb2NrcyAtIGluZm8tPm1heF9ibG9ja3M7Ci0KLQlibG9jayA9IGttYWxsb2Moc2l6ZW9mKHJoX2Jsb2NrX3QpICogbWF4X2Jsb2NrcywgR0ZQX0tFUk5FTCk7Ci0JaWYgKGJsb2NrID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGluZm8tPm1heF9ibG9ja3MgPiAwKSB7Ci0KLQkJLyogY29weSBvbGQgYmxvY2sgYXJlYSAqLwotCQltZW1jcHkoYmxvY2ssIGluZm8tPmJsb2NrLAotCQkgICAgICAgc2l6ZW9mKHJoX2Jsb2NrX3QpICogaW5mby0+bWF4X2Jsb2Nrcyk7Ci0KLQkJZGVsdGEgPSAoY2hhciAqKWJsb2NrIC0gKGNoYXIgKilpbmZvLT5ibG9jazsKLQotCQkvKiBhbmQgZml4dXAgbGlzdCBwb2ludGVycyAqLwotCQlibGtzID0gKHVuc2lnbmVkIGxvbmcpaW5mby0+YmxvY2s7Ci0JCWJsa2UgPSAodW5zaWduZWQgbG9uZykoaW5mby0+YmxvY2sgKyBpbmZvLT5tYXhfYmxvY2tzKTsKLQotCQlmb3IgKGkgPSAwLCBibGsgPSBibG9jazsgaSA8IGluZm8tPm1heF9ibG9ja3M7IGkrKywgYmxrKyspCi0JCQlmaXh1cChibGtzLCBibGtlLCBkZWx0YSwgJmJsay0+bGlzdCk7Ci0KLQkJZml4dXAoYmxrcywgYmxrZSwgZGVsdGEsICZpbmZvLT5lbXB0eV9saXN0KTsKLQkJZml4dXAoYmxrcywgYmxrZSwgZGVsdGEsICZpbmZvLT5mcmVlX2xpc3QpOwotCQlmaXh1cChibGtzLCBibGtlLCBkZWx0YSwgJmluZm8tPnRha2VuX2xpc3QpOwotCi0JCS8qIGZyZWUgdGhlIG9sZCBhbGxvY2F0ZWQgbWVtb3J5ICovCi0JCWlmICgoaW5mby0+ZmxhZ3MgJiBSSElGX1NUQVRJQ19CTE9DSykgPT0gMCkKLQkJCWtmcmVlKGluZm8tPmJsb2NrKTsKLQl9Ci0KLQlpbmZvLT5ibG9jayA9IGJsb2NrOwotCWluZm8tPmVtcHR5X3Nsb3RzICs9IG5ld19ibG9ja3M7Ci0JaW5mby0+bWF4X2Jsb2NrcyA9IG1heF9ibG9ja3M7Ci0JaW5mby0+ZmxhZ3MgJj0gflJISUZfU1RBVElDX0JMT0NLOwotCi0JLyogYWRkIGFsbCBuZXcgYmxvY2tzIHRvIHRoZSBmcmVlIGxpc3QgKi8KLQlmb3IgKGkgPSAwLCBibGsgPSBibG9jayArIGluZm8tPm1heF9ibG9ja3M7IGkgPCBuZXdfYmxvY2tzOyBpKyssIGJsaysrKQotCQlsaXN0X2FkZCgmYmxrLT5saXN0LCAmaW5mby0+ZW1wdHlfbGlzdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEFzc3VyZSBhdCBsZWFzdCB0aGUgcmVxdWlyZWQgYW1vdW50IG9mIGVtcHR5IHNsb3RzLiAgSWYgdGhpcyBmdW5jdGlvbgotICogY2F1c2VzIGEgZ3JvdyBpbiB0aGUgYmxvY2sgYXJlYSB0aGVuIGFsbCBwb2ludGVycyBrZXB0IHRvIHRoZSBibG9jawotICogYXJlYSBhcmUgaW52YWxpZCEKLSAqLwotc3RhdGljIGludCBhc3N1cmVfZW1wdHkocmhfaW5mb190ICogaW5mbywgaW50IHNsb3RzKQotewotCWludCBtYXhfYmxvY2tzOwotCi0JLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgbWVhbnQgdG8gYmUgdXNlZCB0byBncm93IHVuY29udHJvbGxhYmx5ICovCi0JaWYgKHNsb3RzID49IDQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogRW5vdWdoIHNwYWNlICovCi0JaWYgKGluZm8tPmVtcHR5X3Nsb3RzID49IHNsb3RzKQotCQlyZXR1cm4gMDsKLQotCS8qIE5leHQgMTYgc2l6ZWQgYmxvY2sgKi8KLQltYXhfYmxvY2tzID0gKChpbmZvLT5tYXhfYmxvY2tzICsgc2xvdHMpICsgMTUpICYgfjE1OwotCi0JcmV0dXJuIGdyb3coaW5mbywgbWF4X2Jsb2Nrcyk7Ci19Ci0KLXN0YXRpYyByaF9ibG9ja190ICpnZXRfc2xvdChyaF9pbmZvX3QgKiBpbmZvKQotewotCXJoX2Jsb2NrX3QgKmJsazsKLQotCS8qIElmIG5vIG1vcmUgZnJlZSBzbG90cywgYW5kIGZhaWx1cmUgdG8gZXh0ZW5kLiAqLwotCS8qIFhYWDogWW91IHNob3VsZCBoYXZlIGNhbGxlZCBhc3N1cmVfZW1wdHkgYmVmb3JlICovCi0JaWYgKGluZm8tPmVtcHR5X3Nsb3RzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyaDogb3V0IG9mIHNsb3RzOyBjcmFzaCBpcyBpbW1pbmVudC5cbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKiBHZXQgZW1wdHkgc2xvdCB0byB1c2UgKi8KLQlibGsgPSBsaXN0X2VudHJ5KGluZm8tPmVtcHR5X2xpc3QubmV4dCwgcmhfYmxvY2tfdCwgbGlzdCk7Ci0JbGlzdF9kZWxfaW5pdCgmYmxrLT5saXN0KTsKLQlpbmZvLT5lbXB0eV9zbG90cy0tOwotCi0JLyogSW5pdGlhbGl6ZSAqLwotCWJsay0+c3RhcnQgPSBOVUxMOwotCWJsay0+c2l6ZSA9IDA7Ci0JYmxrLT5vd25lciA9IE5VTEw7Ci0KLQlyZXR1cm4gYmxrOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9zbG90KHJoX2luZm9fdCAqIGluZm8sIHJoX2Jsb2NrX3QgKiBibGspCi17Ci0JbGlzdF9hZGQoJmJsay0+bGlzdCwgJmluZm8tPmVtcHR5X2xpc3QpOwotCWluZm8tPmVtcHR5X3Nsb3RzKys7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0dGFjaF9mcmVlX2Jsb2NrKHJoX2luZm9fdCAqIGluZm8sIHJoX2Jsb2NrX3QgKiBibGtuKQotewotCXJoX2Jsb2NrX3QgKmJsazsKLQlyaF9ibG9ja190ICpiZWZvcmU7Ci0JcmhfYmxvY2tfdCAqYWZ0ZXI7Ci0JcmhfYmxvY2tfdCAqbmV4dDsKLQlpbnQgc2l6ZTsKLQl1bnNpZ25lZCBsb25nIHMsIGUsIGJzLCBiZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsOwotCi0JLyogV2UgYXNzdW1lIHRoYXQgdGhleSBhcmUgYWxpZ25lZCBwcm9wZXJseSAqLwotCXNpemUgPSBibGtuLT5zaXplOwotCXMgPSAodW5zaWduZWQgbG9uZylibGtuLT5zdGFydDsKLQllID0gcyArIHNpemU7Ci0KLQkvKiBGaW5kIHRoZSBibG9ja3MgaW1tZWRpYXRlbHkgYmVmb3JlIGFuZCBhZnRlciB0aGUgZ2l2ZW4gb25lCi0JICogKGlmIGFueSkgKi8KLQliZWZvcmUgPSBOVUxMOwotCWFmdGVyID0gTlVMTDsKLQluZXh0ID0gTlVMTDsKLQotCWxpc3RfZm9yX2VhY2gobCwgJmluZm8tPmZyZWVfbGlzdCkgewotCQlibGsgPSBsaXN0X2VudHJ5KGwsIHJoX2Jsb2NrX3QsIGxpc3QpOwotCi0JCWJzID0gKHVuc2lnbmVkIGxvbmcpYmxrLT5zdGFydDsKLQkJYmUgPSBicyArIGJsay0+c2l6ZTsKLQotCQlpZiAobmV4dCA9PSBOVUxMICYmIHMgPj0gYnMpCi0JCQluZXh0ID0gYmxrOwotCi0JCWlmIChiZSA9PSBzKQotCQkJYmVmb3JlID0gYmxrOwotCi0JCWlmIChlID09IGJzKQotCQkJYWZ0ZXIgPSBibGs7Ci0KLQkJLyogSWYgYm90aCBhcmUgbm90IG51bGwsIGJyZWFrIG5vdyAqLwotCQlpZiAoYmVmb3JlICE9IE5VTEwgJiYgYWZ0ZXIgIT0gTlVMTCkKLQkJCWJyZWFrOwotCX0KLQotCS8qIE5vdyBjaGVjayBpZiB0aGV5IGFyZSByZWFsbHkgYWRqYWNlbnQgKi8KLQlpZiAoYmVmb3JlICE9IE5VTEwgJiYgcyAhPSAodW5zaWduZWQgbG9uZyliZWZvcmUtPnN0YXJ0ICsgYmVmb3JlLT5zaXplKQotCQliZWZvcmUgPSBOVUxMOwotCi0JaWYgKGFmdGVyICE9IE5VTEwgJiYgZSAhPSAodW5zaWduZWQgbG9uZylhZnRlci0+c3RhcnQpCi0JCWFmdGVyID0gTlVMTDsKLQotCS8qIE5vIGNvYWxlc2Npbmc7IGxpc3QgaW5zZXJ0IGFuZCByZXR1cm4gKi8KLQlpZiAoYmVmb3JlID09IE5VTEwgJiYgYWZ0ZXIgPT0gTlVMTCkgewotCi0JCWlmIChuZXh0ICE9IE5VTEwpCi0JCQlsaXN0X2FkZCgmYmxrbi0+bGlzdCwgJm5leHQtPmxpc3QpOwotCQllbHNlCi0JCQlsaXN0X2FkZCgmYmxrbi0+bGlzdCwgJmluZm8tPmZyZWVfbGlzdCk7Ci0KLQkJcmV0dXJuOwotCX0KLQotCS8qIFdlIGRvbid0IG5lZWQgaXQgYW55bW9yZSAqLwotCXJlbGVhc2Vfc2xvdChpbmZvLCBibGtuKTsKLQotCS8qIEdyb3cgdGhlIGJlZm9yZSBibG9jayAqLwotCWlmIChiZWZvcmUgIT0gTlVMTCAmJiBhZnRlciA9PSBOVUxMKSB7Ci0JCWJlZm9yZS0+c2l6ZSArPSBzaXplOwotCQlyZXR1cm47Ci0JfQotCi0JLyogR3JvdyB0aGUgYWZ0ZXIgYmxvY2sgYmFja3dhcmRzICovCi0JaWYgKGJlZm9yZSA9PSBOVUxMICYmIGFmdGVyICE9IE5VTEwpIHsKLQkJYWZ0ZXItPnN0YXJ0ID0gKGludDhfdCAqKWFmdGVyLT5zdGFydCAtIHNpemU7Ci0JCWFmdGVyLT5zaXplICs9IHNpemU7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBHcm93IHRoZSBiZWZvcmUgYmxvY2ssIGFuZCByZWxlYXNlIHRoZSBhZnRlciBibG9jayAqLwotCWJlZm9yZS0+c2l6ZSArPSBzaXplICsgYWZ0ZXItPnNpemU7Ci0JbGlzdF9kZWwoJmFmdGVyLT5saXN0KTsKLQlyZWxlYXNlX3Nsb3QoaW5mbywgYWZ0ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBhdHRhY2hfdGFrZW5fYmxvY2socmhfaW5mb190ICogaW5mbywgcmhfYmxvY2tfdCAqIGJsa24pCi17Ci0JcmhfYmxvY2tfdCAqYmxrOwotCXN0cnVjdCBsaXN0X2hlYWQgKmw7Ci0KLQkvKiBGaW5kIHRoZSBibG9jayBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGdpdmVuIG9uZSAoaWYgYW55KSAqLwotCWxpc3RfZm9yX2VhY2gobCwgJmluZm8tPnRha2VuX2xpc3QpIHsKLQkJYmxrID0gbGlzdF9lbnRyeShsLCByaF9ibG9ja190LCBsaXN0KTsKLQkJaWYgKGJsay0+c3RhcnQgPiBibGtuLT5zdGFydCkgewotCQkJbGlzdF9hZGRfdGFpbCgmYmxrbi0+bGlzdCwgJmJsay0+bGlzdCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlsaXN0X2FkZF90YWlsKCZibGtuLT5saXN0LCAmaW5mby0+dGFrZW5fbGlzdCk7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSByZW1vdGUgaGVhcCBkeW5hbWljYWxseS4gIE5vdGUgdGhhdCBubyBtZW1vcnkgZm9yIHRoZSBibG9ja3MKLSAqIGFyZSBhbGxvY2F0ZWQuICBJdCB3aWxsIHVwb24gdGhlIGZpcnN0IGFsbG9jYXRpb24KLSAqLwotcmhfaW5mb190ICpyaF9jcmVhdGUodW5zaWduZWQgaW50IGFsaWdubWVudCkKLXsKLQlyaF9pbmZvX3QgKmluZm87Ci0KLQkvKiBBbGlnbm1lbnQgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byAqLwotCWlmICgoYWxpZ25tZW50ICYgKGFsaWdubWVudCAtIDEpKSAhPSAwKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwotCWlmIChpbmZvID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JaW5mby0+YWxpZ25tZW50ID0gYWxpZ25tZW50OwotCi0JLyogSW5pdGlhbGx5IGV2ZXJ5dGhpbmcgYXMgZW1wdHkgKi8KLQlpbmZvLT5ibG9jayA9IE5VTEw7Ci0JaW5mby0+bWF4X2Jsb2NrcyA9IDA7Ci0JaW5mby0+ZW1wdHlfc2xvdHMgPSAwOwotCWluZm8tPmZsYWdzID0gMDsKLQotCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5lbXB0eV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmaW5mby0+ZnJlZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmaW5mby0+dGFrZW5fbGlzdCk7Ci0KLQlyZXR1cm4gaW5mbzsKLX0KLQotLyoKLSAqIERlc3Ryb3kgYSBkeW5hbWljYWxseSBjcmVhdGVkIHJlbW90ZSBoZWFwLiAgRGVhbGxvY2F0ZSBvbmx5IGlmIHRoZSBhcmVhcwotICogYXJlIG5vdCBzdGF0aWMKLSAqLwotdm9pZCByaF9kZXN0cm95KHJoX2luZm9fdCAqIGluZm8pCi17Ci0JaWYgKChpbmZvLT5mbGFncyAmIFJISUZfU1RBVElDX0JMT0NLKSA9PSAwICYmIGluZm8tPmJsb2NrICE9IE5VTEwpCi0JCWtmcmVlKGluZm8tPmJsb2NrKTsKLQotCWlmICgoaW5mby0+ZmxhZ3MgJiBSSElGX1NUQVRJQ19JTkZPKSA9PSAwKQotCQlrZnJlZShpbmZvKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgaW4gcGxhY2UgYSByZW1vdGUgaGVhcCBpbmZvIGJsb2NrLiAgVGhpcyBpcyBuZWVkZWQgdG8gc3VwcG9ydAotICogb3BlcmF0aW9uIHZlcnkgZWFybHkgaW4gdGhlIHN0YXJ0dXAgb2YgdGhlIGtlcm5lbCwgd2hlbiBpdCBpcyBub3QgeWV0IHNhZmUKLSAqIHRvIGNhbGwga21hbGxvYy4KLSAqLwotdm9pZCByaF9pbml0KHJoX2luZm9fdCAqIGluZm8sIHVuc2lnbmVkIGludCBhbGlnbm1lbnQsIGludCBtYXhfYmxvY2tzLAotCSAgICAgcmhfYmxvY2tfdCAqIGJsb2NrKQotewotCWludCBpOwotCXJoX2Jsb2NrX3QgKmJsazsKLQotCS8qIEFsaWdubWVudCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvICovCi0JaWYgKChhbGlnbm1lbnQgJiAoYWxpZ25tZW50IC0gMSkpICE9IDApCi0JCXJldHVybjsKLQotCWluZm8tPmFsaWdubWVudCA9IGFsaWdubWVudDsKLQotCS8qIEluaXRpYWxseSBldmVyeXRoaW5nIGFzIGVtcHR5ICovCi0JaW5mby0+YmxvY2sgPSBibG9jazsKLQlpbmZvLT5tYXhfYmxvY2tzID0gbWF4X2Jsb2NrczsKLQlpbmZvLT5lbXB0eV9zbG90cyA9IG1heF9ibG9ja3M7Ci0JaW5mby0+ZmxhZ3MgPSBSSElGX1NUQVRJQ19JTkZPIHwgUkhJRl9TVEFUSUNfQkxPQ0s7Ci0KLQlJTklUX0xJU1RfSEVBRCgmaW5mby0+ZW1wdHlfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmluZm8tPmZyZWVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmluZm8tPnRha2VuX2xpc3QpOwotCi0JLyogQWRkIGFsbCBuZXcgYmxvY2tzIHRvIHRoZSBmcmVlIGxpc3QgKi8KLQlmb3IgKGkgPSAwLCBibGsgPSBibG9jazsgaSA8IG1heF9ibG9ja3M7IGkrKywgYmxrKyspCi0JCWxpc3RfYWRkKCZibGstPmxpc3QsICZpbmZvLT5lbXB0eV9saXN0KTsKLX0KLQotLyogQXR0YWNoIGEgZnJlZSBtZW1vcnkgcmVnaW9uLCBjb2FsZXNjZXMgcmVnaW9ucyBpZiBhZGp1c2NlbnQgKi8KLWludCByaF9hdHRhY2hfcmVnaW9uKHJoX2luZm9fdCAqIGluZm8sIHZvaWQgKnN0YXJ0LCBpbnQgc2l6ZSkKLXsKLQlyaF9ibG9ja190ICpibGs7Ci0JdW5zaWduZWQgbG9uZyBzLCBlLCBtOwotCWludCByOwotCi0JLyogVGhlIHJlZ2lvbiBtdXN0IGJlIGFsaWduZWQgKi8KLQlzID0gKHVuc2lnbmVkIGxvbmcpc3RhcnQ7Ci0JZSA9IHMgKyBzaXplOwotCW0gPSBpbmZvLT5hbGlnbm1lbnQgLSAxOwotCi0JLyogUm91bmQgc3RhcnQgdXAgKi8KLQlzID0gKHMgKyBtKSAmIH5tOwotCi0JLyogUm91bmQgZW5kIGRvd24gKi8KLQllID0gZSAmIH5tOwotCi0JLyogVGFrZSBmaW5hbCB2YWx1ZXMgKi8KLQlzdGFydCA9ICh2b2lkICopczsKLQlzaXplID0gKGludCkoZSAtIHMpOwotCi0JLyogR3JvdyB0aGUgYmxvY2tzLCBpZiBuZWVkZWQgKi8KLQlyID0gYXNzdXJlX2VtcHR5KGluZm8sIDEpOwotCWlmIChyIDwgMCkKLQkJcmV0dXJuIHI7Ci0KLQlibGsgPSBnZXRfc2xvdChpbmZvKTsKLQlibGstPnN0YXJ0ID0gc3RhcnQ7Ci0JYmxrLT5zaXplID0gc2l6ZTsKLQlibGstPm93bmVyID0gTlVMTDsKLQotCWF0dGFjaF9mcmVlX2Jsb2NrKGluZm8sIGJsayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogRGV0YXRjaCBnaXZlbiBhZGRyZXNzIHJhbmdlLCBzcGxpdHMgZnJlZSBibG9jayBpZiBuZWVkZWQuICovCi12b2lkICpyaF9kZXRhY2hfcmVnaW9uKHJoX2luZm9fdCAqIGluZm8sIHZvaWQgKnN0YXJ0LCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsOwotCXJoX2Jsb2NrX3QgKmJsaywgKm5ld2JsazsKLQl1bnNpZ25lZCBsb25nIHMsIGUsIG0sIGJzLCBiZTsKLQotCS8qIFZhbGlkYXRlIHNpemUgKi8KLQlpZiAoc2l6ZSA8PSAwKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCS8qIFRoZSByZWdpb24gbXVzdCBiZSBhbGlnbmVkICovCi0JcyA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0OwotCWUgPSBzICsgc2l6ZTsKLQltID0gaW5mby0+YWxpZ25tZW50IC0gMTsKLQotCS8qIFJvdW5kIHN0YXJ0IHVwICovCi0JcyA9IChzICsgbSkgJiB+bTsKLQotCS8qIFJvdW5kIGVuZCBkb3duICovCi0JZSA9IGUgJiB+bTsKLQotCWlmIChhc3N1cmVfZW1wdHkoaW5mbywgMSkgPCAwKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWJsayA9IE5VTEw7Ci0JbGlzdF9mb3JfZWFjaChsLCAmaW5mby0+ZnJlZV9saXN0KSB7Ci0JCWJsayA9IGxpc3RfZW50cnkobCwgcmhfYmxvY2tfdCwgbGlzdCk7Ci0JCS8qIFRoZSByYW5nZSBtdXN0IGxpZSBlbnRpcmVseSBpbnNpZGUgb25lIGZyZWUgYmxvY2sgKi8KLQkJYnMgPSAodW5zaWduZWQgbG9uZylibGstPnN0YXJ0OwotCQliZSA9ICh1bnNpZ25lZCBsb25nKWJsay0+c3RhcnQgKyBibGstPnNpemU7Ci0JCWlmIChzID49IGJzICYmIGUgPD0gYmUpCi0JCQlicmVhazsKLQkJYmxrID0gTlVMTDsKLQl9Ci0KLQlpZiAoYmxrID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JLyogUGVyZmVjdCBmaXQgKi8KLQlpZiAoYnMgPT0gcyAmJiBiZSA9PSBlKSB7Ci0JCS8qIERlbGV0ZSBmcm9tIGZyZWUgbGlzdCwgcmVsZWFzZSBzbG90ICovCi0JCWxpc3RfZGVsKCZibGstPmxpc3QpOwotCQlyZWxlYXNlX3Nsb3QoaW5mbywgYmxrKTsKLQkJcmV0dXJuICh2b2lkICopczsKLQl9Ci0KLQkvKiBibGsgc3RpbGwgaW4gZnJlZSBsaXN0LCB3aXRoIHVwZGF0ZWQgc3RhcnQgYW5kL29yIHNpemUgKi8KLQlpZiAoYnMgPT0gcyB8fCBiZSA9PSBlKSB7Ci0JCWlmIChicyA9PSBzKQotCQkJYmxrLT5zdGFydCA9IChpbnQ4X3QgKilibGstPnN0YXJ0ICsgc2l6ZTsKLQkJYmxrLT5zaXplIC09IHNpemU7Ci0KLQl9IGVsc2UgewotCQkvKiBUaGUgZnJvbnQgZnJlZSBmcmFnbWVudCAqLwotCQlibGstPnNpemUgPSBzIC0gYnM7Ci0KLQkJLyogdGhlIGJhY2sgZnJlZSBmcmFnbWVudCAqLwotCQluZXdibGsgPSBnZXRfc2xvdChpbmZvKTsKLQkJbmV3YmxrLT5zdGFydCA9ICh2b2lkICopZTsKLQkJbmV3YmxrLT5zaXplID0gYmUgLSBlOwotCi0JCWxpc3RfYWRkKCZuZXdibGstPmxpc3QsICZibGstPmxpc3QpOwotCX0KLQotCXJldHVybiAodm9pZCAqKXM7Ci19Ci0KLXZvaWQgKnJoX2FsbG9jKHJoX2luZm9fdCAqIGluZm8sIGludCBzaXplLCBjb25zdCBjaGFyICpvd25lcikKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsOwotCXJoX2Jsb2NrX3QgKmJsazsKLQlyaF9ibG9ja190ICpuZXdibGs7Ci0Jdm9pZCAqc3RhcnQ7Ci0KLQkvKiBWYWxpZGF0ZSBzaXplICovCi0JaWYgKHNpemUgPD0gMCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0KLQkvKiBBbGlnbiB0byBjb25maWd1cmVkIGFsaWdubWVudCAqLwotCXNpemUgPSAoc2l6ZSArIChpbmZvLT5hbGlnbm1lbnQgLSAxKSkgJiB+KGluZm8tPmFsaWdubWVudCAtIDEpOwotCi0JaWYgKGFzc3VyZV9lbXB0eShpbmZvLCAxKSA8IDApCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JYmxrID0gTlVMTDsKLQlsaXN0X2Zvcl9lYWNoKGwsICZpbmZvLT5mcmVlX2xpc3QpIHsKLQkJYmxrID0gbGlzdF9lbnRyeShsLCByaF9ibG9ja190LCBsaXN0KTsKLQkJaWYgKHNpemUgPD0gYmxrLT5zaXplKQotCQkJYnJlYWs7Ci0JCWJsayA9IE5VTEw7Ci0JfQotCi0JaWYgKGJsayA9PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCS8qIEp1c3QgZml0cyAqLwotCWlmIChibGstPnNpemUgPT0gc2l6ZSkgewotCQkvKiBNb3ZlIGZyb20gZnJlZSBsaXN0IHRvIHRha2VuIGxpc3QgKi8KLQkJbGlzdF9kZWwoJmJsay0+bGlzdCk7Ci0JCWJsay0+b3duZXIgPSBvd25lcjsKLQkJc3RhcnQgPSBibGstPnN0YXJ0OwotCi0JCWF0dGFjaF90YWtlbl9ibG9jayhpbmZvLCBibGspOwotCi0JCXJldHVybiBzdGFydDsKLQl9Ci0KLQluZXdibGsgPSBnZXRfc2xvdChpbmZvKTsKLQluZXdibGstPnN0YXJ0ID0gYmxrLT5zdGFydDsKLQluZXdibGstPnNpemUgPSBzaXplOwotCW5ld2Jsay0+b3duZXIgPSBvd25lcjsKLQotCS8qIGJsayBzdGlsbCBpbiBmcmVlIGxpc3QsIHdpdGggdXBkYXRlZCBzdGFydCwgc2l6ZSAqLwotCWJsay0+c3RhcnQgPSAoaW50OF90ICopYmxrLT5zdGFydCArIHNpemU7Ci0JYmxrLT5zaXplIC09IHNpemU7Ci0KLQlzdGFydCA9IG5ld2Jsay0+c3RhcnQ7Ci0KLQlhdHRhY2hfdGFrZW5fYmxvY2soaW5mbywgbmV3YmxrKTsKLQotCXJldHVybiBzdGFydDsKLX0KLQotLyogYWxsb2NhdGUgYXQgcHJlY2lzZWx5IHRoZSBnaXZlbiBhZGRyZXNzICovCi12b2lkICpyaF9hbGxvY19maXhlZChyaF9pbmZvX3QgKiBpbmZvLCB2b2lkICpzdGFydCwgaW50IHNpemUsIGNvbnN0IGNoYXIgKm93bmVyKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmw7Ci0JcmhfYmxvY2tfdCAqYmxrLCAqbmV3YmxrMSwgKm5ld2JsazI7Ci0JdW5zaWduZWQgbG9uZyBzLCBlLCBtLCBicywgYmU7Ci0KLQkvKiBWYWxpZGF0ZSBzaXplICovCi0JaWYgKHNpemUgPD0gMCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0KLQkvKiBUaGUgcmVnaW9uIG11c3QgYmUgYWxpZ25lZCAqLwotCXMgPSAodW5zaWduZWQgbG9uZylzdGFydDsKLQllID0gcyArIHNpemU7Ci0JbSA9IGluZm8tPmFsaWdubWVudCAtIDE7Ci0KLQkvKiBSb3VuZCBzdGFydCB1cCAqLwotCXMgPSAocyArIG0pICYgfm07Ci0KLQkvKiBSb3VuZCBlbmQgZG93biAqLwotCWUgPSBlICYgfm07Ci0KLQlpZiAoYXNzdXJlX2VtcHR5KGluZm8sIDIpIDwgMCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlibGsgPSBOVUxMOwotCWxpc3RfZm9yX2VhY2gobCwgJmluZm8tPmZyZWVfbGlzdCkgewotCQlibGsgPSBsaXN0X2VudHJ5KGwsIHJoX2Jsb2NrX3QsIGxpc3QpOwotCQkvKiBUaGUgcmFuZ2UgbXVzdCBsaWUgZW50aXJlbHkgaW5zaWRlIG9uZSBmcmVlIGJsb2NrICovCi0JCWJzID0gKHVuc2lnbmVkIGxvbmcpYmxrLT5zdGFydDsKLQkJYmUgPSAodW5zaWduZWQgbG9uZylibGstPnN0YXJ0ICsgYmxrLT5zaXplOwotCQlpZiAocyA+PSBicyAmJiBlIDw9IGJlKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKGJsayA9PSBOVUxMKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCS8qIFBlcmZlY3QgZml0ICovCi0JaWYgKGJzID09IHMgJiYgYmUgPT0gZSkgewotCQkvKiBNb3ZlIGZyb20gZnJlZSBsaXN0IHRvIHRha2VuIGxpc3QgKi8KLQkJbGlzdF9kZWwoJmJsay0+bGlzdCk7Ci0JCWJsay0+b3duZXIgPSBvd25lcjsKLQotCQlzdGFydCA9IGJsay0+c3RhcnQ7Ci0JCWF0dGFjaF90YWtlbl9ibG9jayhpbmZvLCBibGspOwotCi0JCXJldHVybiBzdGFydDsKLQotCX0KLQotCS8qIGJsayBzdGlsbCBpbiBmcmVlIGxpc3QsIHdpdGggdXBkYXRlZCBzdGFydCBhbmQvb3Igc2l6ZSAqLwotCWlmIChicyA9PSBzIHx8IGJlID09IGUpIHsKLQkJaWYgKGJzID09IHMpCi0JCQlibGstPnN0YXJ0ID0gKGludDhfdCAqKWJsay0+c3RhcnQgKyBzaXplOwotCQlibGstPnNpemUgLT0gc2l6ZTsKLQotCX0gZWxzZSB7Ci0JCS8qIFRoZSBmcm9udCBmcmVlIGZyYWdtZW50ICovCi0JCWJsay0+c2l6ZSA9IHMgLSBiczsKLQotCQkvKiBUaGUgYmFjayBmcmVlIGZyYWdtZW50ICovCi0JCW5ld2JsazIgPSBnZXRfc2xvdChpbmZvKTsKLQkJbmV3YmxrMi0+c3RhcnQgPSAodm9pZCAqKWU7Ci0JCW5ld2JsazItPnNpemUgPSBiZSAtIGU7Ci0KLQkJbGlzdF9hZGQoJm5ld2JsazItPmxpc3QsICZibGstPmxpc3QpOwotCX0KLQotCW5ld2JsazEgPSBnZXRfc2xvdChpbmZvKTsKLQluZXdibGsxLT5zdGFydCA9ICh2b2lkICopczsKLQluZXdibGsxLT5zaXplID0gZSAtIHM7Ci0JbmV3YmxrMS0+b3duZXIgPSBvd25lcjsKLQotCXN0YXJ0ID0gbmV3YmxrMS0+c3RhcnQ7Ci0JYXR0YWNoX3Rha2VuX2Jsb2NrKGluZm8sIG5ld2JsazEpOwotCi0JcmV0dXJuIHN0YXJ0OwotfQotCi1pbnQgcmhfZnJlZShyaF9pbmZvX3QgKiBpbmZvLCB2b2lkICpzdGFydCkKLXsKLQlyaF9ibG9ja190ICpibGssICpibGsyOwotCXN0cnVjdCBsaXN0X2hlYWQgKmw7Ci0JaW50IHNpemU7Ci0KLQkvKiBMaW5lYXIgc2VhcmNoIGZvciBibG9jayAqLwotCWJsayA9IE5VTEw7Ci0JbGlzdF9mb3JfZWFjaChsLCAmaW5mby0+dGFrZW5fbGlzdCkgewotCQlibGsyID0gbGlzdF9lbnRyeShsLCByaF9ibG9ja190LCBsaXN0KTsKLQkJaWYgKHN0YXJ0IDwgYmxrMi0+c3RhcnQpCi0JCQlicmVhazsKLQkJYmxrID0gYmxrMjsKLQl9Ci0KLQlpZiAoYmxrID09IE5VTEwgfHwgc3RhcnQgPiAoYmxrLT5zdGFydCArIGJsay0+c2l6ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogUmVtb3ZlIGZyb20gdGFrZW4gbGlzdCAqLwotCWxpc3RfZGVsKCZibGstPmxpc3QpOwotCi0JLyogR2V0IHNpemUgb2YgZnJlZWQgYmxvY2sgKi8KLQlzaXplID0gYmxrLT5zaXplOwotCWF0dGFjaF9mcmVlX2Jsb2NrKGluZm8sIGJsayk7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQotaW50IHJoX2dldF9zdGF0cyhyaF9pbmZvX3QgKiBpbmZvLCBpbnQgd2hhdCwgaW50IG1heF9zdGF0cywgcmhfc3RhdHNfdCAqIHN0YXRzKQotewotCXJoX2Jsb2NrX3QgKmJsazsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsOwotCXN0cnVjdCBsaXN0X2hlYWQgKmg7Ci0JaW50IG5yOwotCi0Jc3dpdGNoICh3aGF0KSB7Ci0KLQljYXNlIFJIR1NfRlJFRToKLQkJaCA9ICZpbmZvLT5mcmVlX2xpc3Q7Ci0JCWJyZWFrOwotCi0JY2FzZSBSSEdTX1RBS0VOOgotCQloID0gJmluZm8tPnRha2VuX2xpc3Q7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogTGluZWFyIHNlYXJjaCBmb3IgYmxvY2sgKi8KLQluciA9IDA7Ci0JbGlzdF9mb3JfZWFjaChsLCBoKSB7Ci0JCWJsayA9IGxpc3RfZW50cnkobCwgcmhfYmxvY2tfdCwgbGlzdCk7Ci0JCWlmIChzdGF0cyAhPSBOVUxMICYmIG5yIDwgbWF4X3N0YXRzKSB7Ci0JCQlzdGF0cy0+c3RhcnQgPSBibGstPnN0YXJ0OwotCQkJc3RhdHMtPnNpemUgPSBibGstPnNpemU7Ci0JCQlzdGF0cy0+b3duZXIgPSBibGstPm93bmVyOwotCQkJc3RhdHMrKzsKLQkJfQotCQlucisrOwotCX0KLQotCXJldHVybiBucjsKLX0KLQotaW50IHJoX3NldF9vd25lcihyaF9pbmZvX3QgKiBpbmZvLCB2b2lkICpzdGFydCwgY29uc3QgY2hhciAqb3duZXIpCi17Ci0JcmhfYmxvY2tfdCAqYmxrLCAqYmxrMjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsOwotCWludCBzaXplOwotCi0JLyogTGluZWFyIHNlYXJjaCBmb3IgYmxvY2sgKi8KLQlibGsgPSBOVUxMOwotCWxpc3RfZm9yX2VhY2gobCwgJmluZm8tPnRha2VuX2xpc3QpIHsKLQkJYmxrMiA9IGxpc3RfZW50cnkobCwgcmhfYmxvY2tfdCwgbGlzdCk7Ci0JCWlmIChzdGFydCA8IGJsazItPnN0YXJ0KQotCQkJYnJlYWs7Ci0JCWJsayA9IGJsazI7Ci0JfQotCi0JaWYgKGJsayA9PSBOVUxMIHx8IHN0YXJ0ID4gKGJsay0+c3RhcnQgKyBibGstPnNpemUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWJsay0+b3duZXIgPSBvd25lcjsKLQlzaXplID0gYmxrLT5zaXplOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KLXZvaWQgcmhfZHVtcChyaF9pbmZvX3QgKiBpbmZvKQotewotCXN0YXRpYyByaF9zdGF0c190IHN0WzMyXTsJLyogWFhYIG1heGltdW0gMzIgYmxvY2tzICovCi0JaW50IG1heG5yOwotCWludCBpLCBucjsKLQotCW1heG5yID0gQVJSQVlfU0laRShzdCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJpbmZvIEAweCVwICglZCBzbG90cyBlbXB0eSAvICVkIG1heClcbiIsCi0JICAgICAgIGluZm8sIGluZm8tPmVtcHR5X3Nsb3RzLCBpbmZvLT5tYXhfYmxvY2tzKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiAgRnJlZTpcbiIpOwotCW5yID0gcmhfZ2V0X3N0YXRzKGluZm8sIFJIR1NfRlJFRSwgbWF4bnIsIHN0KTsKLQlpZiAobnIgPiBtYXhucikKLQkJbnIgPSBtYXhucjsKLQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIiAgICAweCVwLTB4JXAgKCV1KVxuIiwKLQkJICAgICAgIHN0W2ldLnN0YXJ0LCAoaW50OF90ICopIHN0W2ldLnN0YXJ0ICsgc3RbaV0uc2l6ZSwKLQkJICAgICAgIHN0W2ldLnNpemUpOwotCXByaW50ayhLRVJOX0lORk8gIlxuIik7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIgIFRha2VuOlxuIik7Ci0JbnIgPSByaF9nZXRfc3RhdHMoaW5mbywgUkhHU19UQUtFTiwgbWF4bnIsIHN0KTsKLQlpZiAobnIgPiBtYXhucikKLQkJbnIgPSBtYXhucjsKLQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIiAgICAweCVwLTB4JXAgKCV1KSAlc1xuIiwKLQkJICAgICAgIHN0W2ldLnN0YXJ0LCAoaW50OF90ICopIHN0W2ldLnN0YXJ0ICsgc3RbaV0uc2l6ZSwKLQkJICAgICAgIHN0W2ldLnNpemUsIHN0W2ldLm93bmVyICE9IE5VTEwgPyBzdFtpXS5vd25lciA6ICIiKTsKLQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotfQotCi12b2lkIHJoX2R1bXBfYmxrKHJoX2luZm9fdCAqIGluZm8sIHJoX2Jsb2NrX3QgKiBibGspCi17Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiYmxrIEAweCVwOiAweCVwLTB4JXAgKCV1KVxuIiwKLQkgICAgICAgYmxrLCBibGstPnN0YXJ0LCAoaW50OF90ICopIGJsay0+c3RhcnQgKyBibGstPnNpemUsIGJsay0+c2l6ZSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9tbS9oYXNodGFibGUuUyBiL2FyY2gvcHBjL21tL2hhc2h0YWJsZS5TCmluZGV4IGU3NTY5NDIuLjVmMzY0ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL21tL2hhc2h0YWJsZS5TCisrKyBiL2FyY2gvcHBjL21tL2hhc2h0YWJsZS5TCkBAIC0zMCw3ICszMCwxMSBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAotCS5jb21tCW1tdV9oYXNoX2xvY2ssNAorCS5zZWN0aW9uIC5ic3MKKwkuYWxpZ24JMgorCS5nbG9ibCBtbXVfaGFzaF9sb2NrCittbXVfaGFzaF9sb2NrOgorCS5zcGFjZQk0CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAvKgpAQCAtNDYxLDkgKzQ2NSwxNyBAQAogCXN5bmMJCS8qIG1ha2Ugc3VyZSBwdGUgdXBkYXRlcyBnZXQgdG8gbWVtb3J5ICovCiAJYmxyCiAKLQkuY29tbQluZXh0X3Nsb3QsNAotCS5jb21tCXByaW1hcnlfcHRlZ19mdWxsLDQKLQkuY29tbQlodGFiX2hhc2hfc2VhcmNoZXMsNAorCS5zZWN0aW9uIC5ic3MKKwkuYWxpZ24JMgorbmV4dF9zbG90OgorCS5zcGFjZQk0CisJLmdsb2JsIHByaW1hcnlfcHRlZ19mdWxsCitwcmltYXJ5X3B0ZWdfZnVsbDoKKwkuc3BhY2UJNAorCS5nbG9ibCBodGFiX2hhc2hfc2VhcmNoZXMKK2h0YWJfaGFzaF9zZWFyY2hlczoKKwkuc3BhY2UJNAorCS5wcmV2aW91cwogCiAvKgogICogRmx1c2ggdGhlIGVudHJ5IGZvciBhIHBhcnRpY3VsYXIgcGFnZSBmcm9tIHRoZSBoYXNoIHRhYmxlLgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbW0vaW5pdC5jIGIvYXJjaC9wcGMvbW0vaW5pdC5jCmluZGV4IGMzNzRlNTMuLjM5MGRkMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL21tL2luaXQuYworKysgYi9hcmNoL3BwYy9tbS9pbml0LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJtbXVfZGVjbC5oIgogCiAjaWYgZGVmaW5lZChDT05GSUdfS0VSTkVMX1NUQVJUX0JPT0wpIHx8IGRlZmluZWQoQ09ORklHX0xPV01FTV9TSVpFX0JPT0wpCi0vKiBUaGUgYW1tb3VudCBvZiBsb3dtZW0gbXVzdCBiZSB3aXRoaW4gMHhGMDAwMDAwMCAtIEtFUk5FTEJBU0UuICovCisvKiBUaGUgYW1vdW50IG9mIGxvd21lbSBtdXN0IGJlIHdpdGhpbiAweEYwMDAwMDAwIC0gS0VSTkVMQkFTRS4gKi8KICNpZiAoQ09ORklHX0xPV01FTV9TSVpFID4gKDB4RjAwMDAwMDAgLSBLRVJORUxCQVNFKSkKICNlcnJvciAiWW91IG11c3QgYWRqdXN0IENPTkZJR19MT1dNRU1fU0laRSBvciBDT05GSUdfU1RBUlRfS0VSTkVMIgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9tbS9wZ3RhYmxlLmMgYi9hcmNoL3BwYy9tbS9wZ3RhYmxlLmMKaW5kZXggYzAyM2I3Mi4uMzVlYmI2MyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvcHBjL21tL3BndGFibGUuYwpAQCAtOTIsNyArOTIsNyBAQAogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGdkLCBQR0RJUl9PUkRFUik7CiB9CiAKLXB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorX19pbml0X3JlZm9rIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXB0ZV90ICpwdGU7CiAJZXh0ZXJuIGludCBtZW1faW5pdF9kb25lOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9idWJpbmdhLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2J1YmluZ2EuYwppbmRleCA3NTg1N2IzLi4xYTdmMDc1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2J1YmluZ2EuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2J1YmluZ2EuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJCSAgICBob3NlLT5maXJzdF9idXNubywgUENJX1NMT1QoaG9zZS0+Zmlyc3RfYnVzbm8pLAogCQkgICAgUENJX0ZVTkMoaG9zZS0+Zmlyc3RfYnVzbm8pLCBiYXIsIGJhcl9yZXNwb25zZSk7CiAJfQotCS8qIGVuZCB3b3JrIGFycm91bmQgKi8KKwkvKiBlbmQgd29ya2Fyb3VuZCAqLwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIlBDSSBicmlkZ2UgcmVncyBhZnRlciBmaXh1cCBcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lcDQwNS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lcDQwNS5jCmluZGV4IGU1YWRmOWJhLi41YWEyOTUwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2VwNDA1LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lcDQwNS5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkJICAgIGhvc2UtPmZpcnN0X2J1c25vLCBQQ0lfU0xPVChob3NlLT5maXJzdF9idXNubyksCiAJCSAgICBQQ0lfRlVOQyhob3NlLT5maXJzdF9idXNubyksIGJhciwgYmFyX3Jlc3BvbnNlKTsKIAl9Ci0JLyogZW5kIHdvcmsgYXJyb3VuZCAqLworCS8qIGVuZCB3b3JrYXJvdW5kICovCiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1ucDQwNWguaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtbnA0MDVoLmgKaW5kZXggNGFhODgyMS4uMDhhNmE3NyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1ucDQwNWguaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libW5wNDA1aC5oCkBAIC04MCw3ICs4MCw3IEBACiAjZGVmaW5lIERDUk5fQ1BNRlJfQkFTRQkweDBCOQogI2RlZmluZSBEQ1JOX0NQTUVSX0JBU0UJMHgwQjgKIAotLyogQ1BNIENsb2NraW5nICYgUG93ZXIgTWFuZ2VtZW50IGRlZmluZXMgKi8KKy8qIENQTSBDbG9ja2luZyAmIFBvd2VyIE1hbmFnZW1lbnQgZGVmaW5lcyAqLwogI2RlZmluZSBJQk1fQ1BNX1BDSQkJMHg0MDAwMDAwMAkvKiBQQ0kgKi8KICNkZWZpbmUgSUJNX0NQTV9FTUFDMgkweDIwMDAwMDAwCS8qIEVNQUMgMiBNSUkgKi8KICNkZWZpbmUgSUJNX0NQTV9FTUFDMwkweDA0MDAwMDAwCS8qIEVNQUMgMyBNSUkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvc3ljYW1vcmUuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvc3ljYW1vcmUuYwppbmRleCBjNDc0OTNlLi44Njg5ZjNlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3N5Y2Ftb3JlLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9zeWNhbW9yZS5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAkJICAgIGhvc2UtPmZpcnN0X2J1c25vLCBQQ0lfU0xPVChob3NlLT5maXJzdF9idXNubyksCiAJCSAgICBQQ0lfRlVOQyhob3NlLT5maXJzdF9idXNubyksIGJhciwgYmFyX3Jlc3BvbnNlKTsKIAl9Ci0JLyogZW5kIHdvcmsgYXJyb3VuZCAqLworCS8qIGVuZCB3b3JrYXJvdW5kICovCiAKICNpZmRlZiBERUJVRwogCXByaW50aygiUENJIGJyaWRnZSByZWdzIGFmdGVyIGZpeHVwIFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3dhbG51dC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC93YWxudXQuYwppbmRleCBmNDE0ZDJkLi4yZjk3NzIzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3dhbG51dC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvd2FsbnV0LmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCQkgICAgaG9zZS0+Zmlyc3RfYnVzbm8sIFBDSV9TTE9UKGhvc2UtPmZpcnN0X2J1c25vKSwKIAkJICAgIFBDSV9GVU5DKGhvc2UtPmZpcnN0X2J1c25vKSwgYmFyLCBiYXJfcmVzcG9uc2UpOwogCX0KLQkvKiBlbmQgd29yayBhcnJvdW5kICovCisJLyogZW5kIHdvcmsgYXJvdW5kICovCiAKICNpZmRlZiBERUJVRwogCXByaW50aygiUENJIGJyaWRnZSByZWdzIGFmdGVyIGZpeHVwIFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDM2MC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQzNjAuYwppbmRleCBmODdlMDZmLi5mOGJhZjA1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDM2MC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MzYwLmMKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCSAqIGFyZSBub24temVybywgdGhlbiB3ZSBzaG91bGQgdXNlIHRoZSBib2FyZCBpbmZvIGZyb20gdGhlIGJkX3QKIAkgKiBzdHJ1Y3R1cmUgYW5kIHRoZSBjbWRsaW5lIHBvaW50ZWQgdG8gYnkgcjYgaW5zdGVhZCBvZiB0aGUKIAkgKiBpbmZvcm1hdGlvbiBmcm9tIGJpcmVjcywgaWYgYW55LiAgT3RoZXJ3aXNlLCB1c2UgdGhlIGluZm9ybWF0aW9uCi0JICogZnJvbSBiaXJlY3MgYXMgZGlzY292ZXJlZCBieSB0aGUgcHJlY2VlZGluZyBjYWxsIHRvCisJICogZnJvbSBiaXJlY3MgYXMgZGlzY292ZXJlZCBieSB0aGUgcHJlY2VkaW5nIGNhbGwgdG8KIAkgKiBwYXJzZV9ib290aW5mbygpLiAgVGhpcyBydWxlIHNob3VsZCB3b3JrIHdpdGggYm90aCBQUENCb290LCB3aGljaAogCSAqIHVzZXMgYSBiZF90IGJvYXJkIGluZm8gc3RydWN0dXJlLCBhbmQgdGhlIGtlcm5lbCBib290IHdyYXBwZXIsCiAJICogd2hpY2ggdXNlcyBiaXJlY3MuCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvaGRwdS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2hkcHUuYwppbmRleCBkODA5ZTE3Li5jYTVkZTEzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvaGRwdS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9oZHB1LmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCiAJLyogRW5hYmxlIHBpcGVsaW5pbmcgKi8KIAltdjY0eDYwX3NldF9iaXRzKCZiaCwgTVY2NHg2MF9DUFVfQ09ORklHLCAoMSA8PCAxMykpOwotCS8qIEVuYWJsZSBTbm9vcCBQaXBlbGluZWluZyAqLworCS8qIEVuYWJsZSBTbm9vcCBQaXBlbGluaW5nICovCiAJbXY2NHg2MF9zZXRfYml0cygmYmgsIE1WNjQzNjBfRF9VTklUX0NPTlRST0xfSElHSCwgKDEgPDwgMjQpKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMva2F0YW5hLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMva2F0YW5hLmMKaW5kZXggNzIwZjhiMy4uYzI4OWU5ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2thdGFuYS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9rYXRhbmEuYwpAQCAtODgwLDcgKzg4MCw3IEBACiAJICogYXJlIG5vbi16ZXJvLCB0aGVuIHdlIHNob3VsZCB1c2UgdGhlIGJvYXJkIGluZm8gZnJvbSB0aGUgYmRfdAogCSAqIHN0cnVjdHVyZSBhbmQgdGhlIGNtZGxpbmUgcG9pbnRlZCB0byBieSByNiBpbnN0ZWFkIG9mIHRoZQogCSAqIGluZm9ybWF0aW9uIGZyb20gYmlyZWNzLCBpZiBhbnkuICBPdGhlcndpc2UsIHVzZSB0aGUgaW5mb3JtYXRpb24KLQkgKiBmcm9tIGJpcmVjcyBhcyBkaXNjb3ZlcmVkIGJ5IHRoZSBwcmVjZWVkaW5nIGNhbGwgdG8KKwkgKiBmcm9tIGJpcmVjcyBhcyBkaXNjb3ZlcmVkIGJ5IHRoZSBwcmVjZWRpbmcgY2FsbCB0bwogCSAqIHBhcnNlX2Jvb3RpbmZvKCkuICBUaGlzIHJ1bGUgc2hvdWxkIHdvcmsgd2l0aCBib3RoIFBQQ0Jvb3QsIHdoaWNoCiAJICogdXNlcyBhIGJkX3QgYm9hcmQgaW5mbyBzdHJ1Y3R1cmUsIGFuZCB0aGUga2VybmVsIGJvb3Qgd3JhcHBlciwKIAkgKiB3aGljaCB1c2VzIGJpcmVjcy4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tYnguaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tYnguaAppbmRleCBmZTgxY2E0Li4xY2YzNmZhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbWJ4LmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL21ieC5oCkBAIC0zNyw3ICszNyw3IEBACiAKIC8qIE1lbW9yeSBtYXAgZm9yIHRoZSBNQlggYXMgY29uZmlndXJlZCBieSBFUFBDLUJ1Zy4gIFdlIGNvdWxkIHJlcHJvZ3JhbQogICogVGhlIFNJVSBhbmQgUENJIGJyaWRnZSwgYW5kIHRyeSB0byB1c2UgbGFyZ2VyIE1NVSBwYWdlcywgYnV0IHRoZQotICogcGVyZm9ybWFuY2UgZ2FpbiBpcyBub3QgbWVhc3VyZWFibGUgYW5kIGl0IGNlcnRhaW5seSBjb21wbGljYXRlcyB0aGUKKyAqIHBlcmZvcm1hbmNlIGdhaW4gaXMgbm90IG1lYXN1cmFibGUgYW5kIGl0IGNlcnRhaW5seSBjb21wbGljYXRlcyB0aGUKICAqIGdlbmVyaWMgTU1VIG1vZGVsLgogICoKICAqIEluIGEgZWZmb3J0IHRvIG1pbmltaXplIG1lbW9yeSB1c2FnZSBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zLCBhbnkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4NjZhZHNfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4NjZhZHNfc2V0dXAuYwppbmRleCA3Y2U1MzY0Li5iZjcyMjA0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODY2YWRzX3NldHVwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg2NmFkc19zZXR1cC5jCkBAIC0xLDQgKzEsNCBAQAotLyphcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODY2YWRzLXNldHVwLmMKKy8qYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg2NmFkc19zZXR1cC5jCiAgKgogICogUGxhdGZvcm0gc2V0dXAgZm9yIHRoZSBGcmVlc2NhbGUgbXBjODY2YWRzIGJvYXJkCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL212bWU1MTAwLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXZtZTUxMDAuaAppbmRleCA5ZTJhMDllLi5mYmI1NDk1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbXZtZTUxMDAuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXZtZTUxMDAuaApAQCAtNjksNyArNjksNyBAQAogCiAjZGVmaW5lIFNURF9DT01fRkxBR1MgQVNZTkNfQk9PVF9BVVRPQ09ORgogCi0vKiBBbGwgVUFSVCBJUlEncyBhcmUgd2lyZS1PUidkIHRvIG9uZSBNUElDIElSUSAqLworLyogQWxsIFVBUlQgSVJRcyBhcmUgd2lyZS1PUidkIHRvIG9uZSBNUElDIElSUSAqLwogI2RlZmluZSBTVERfU0VSSUFMX1BPUlRfREZOUyBcCiAgICAgICAgIHsgMCwgQkFTRV9CQVVELCBNVk1FNTEwMF9TRVJJQUxfMSwgXAogCQlNVk1FNTEwMF9TRVJJQUxfSVJRLCBcCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcGx1cy5oCmluZGV4IGEwN2NiYmQuLmE0YmJhYTggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcGx1cy5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcGx1cy5oCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qCi0gKiBEdWUgdG8gbGltaWF0aW9ucyBpbXBvc2VkIGJ5IGxlZ2FjeSBoYXJkd2FyZSAocHJpbWFyeWlseSBJREUgY29udHJvbGxlcnMpLAorICogRHVlIHRvIGxpbWl0YXRpb25zIGltcG9zZWQgYnkgbGVnYWN5IGhhcmR3YXJlIChwcmltYXJpbHkgSURFIGNvbnRyb2xsZXJzKSwKICAqIHRoZSBQUExVUyBib2FyZHMgb3BlcmF0ZSB1c2luZyBhIFBSZVAgYWRkcmVzcyBtYXAuCiAgKgogICogRnJvbSBQcm9jZXNzb3IgKHBoeXNpY2FsKSAtPiBQQ0k6CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9wY2kuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3BjaS5jCmluZGV4IGM2MjdiYTQuLjFkZjMxNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3BjaS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3BjaS5jCkBAIC01ODksOSArNTg5LDkgQEAKIAl7IDQsIDEsIDIsIDN9LCAgLyogQnVzZXMgMywgNywgMTEgLi4uICovCiB9OwogCi0vKiBXZSBoYXZlIHRvIHR1cm4gb24gTEVWRUwgbW9kZSBmb3IgY2hhbmdlZCBJUlEncyAqLwotLyogQWxsIFBDSSBJUlEncyBuZWVkIHRvIGJlIGxldmVsIG1vZGUsIHNvIHRoaXMgc2hvdWxkIGJlIHNvbWV0aGluZwotICogb3RoZXIgdGhhbiBoYXJkLWNvZGVkIGFzIHdlbGwuLi4gSVJRJ3MgYXJlIGluZGl2aWR1YWxseSBtYXBwYWJsZQorLyogV2UgaGF2ZSB0byB0dXJuIG9uIExFVkVMIG1vZGUgZm9yIGNoYW5nZWQgSVJRcyAqLworLyogQWxsIFBDSSBJUlFzIG5lZWQgdG8gYmUgbGV2ZWwgbW9kZSwgc28gdGhpcyBzaG91bGQgYmUgc29tZXRoaW5nCisgKiBvdGhlciB0aGFuIGhhcmQtY29kZWQgYXMgd2VsbC4uLiBJUlFzIGFyZSBpbmRpdmlkdWFsbHkgbWFwcGFibGUKICAqIHRvIGVpdGhlciBlZGdlIG9yIGxldmVsLgogICovCiAKQEAgLTkyMyw4ICs5MjMsOCBAQAogCU1vdGhlcmJvYXJkX21hcF9uYW1lID0gIklCTSA2MDE1LzcwMjAgKFNhbmRhbGZvb3QvU2FuZGFsYm93KSI7CiAJTW90aGVyYm9hcmRfbWFwID0gaWJtNjAxNV9wY2lfSVJRX21hcDsKIAlNb3RoZXJib2FyZF9yb3V0ZXMgPSBpYm02MDE1X3BjaV9JUlFfcm91dGVzOwotCSppcnFfZWRnZV9tYXNrX2xvID0gMHgwMDsgLyogaXJxJ3MgMC03IGFsbCBlZGdlLXRyaWdnZXJlZCAqLwotCSppcnFfZWRnZV9tYXNrX2hpID0gMHhBMDsgLyogaXJxJ3MgMTMsIDE1IGxldmVsLXRyaWdnZXJlZCAqLworCSppcnFfZWRnZV9tYXNrX2xvID0gMHgwMDsgLyogSVJRcyAwLTcgYWxsIGVkZ2UtdHJpZ2dlcmVkICovCisJKmlycV9lZGdlX21hc2tfaGkgPSAweEEwOyAvKiBJUlFzIDEzLCAxNSBsZXZlbC10cmlnZ2VyZWQgKi8KIH0KIAogdm9pZCBfX2luaXQKQEAgLTkzMyw4ICs5MzMsOCBAQAogCU1vdGhlcmJvYXJkX21hcF9uYW1lID0gIklCTSBUaGlua3BhZCA4NTAvODYwIjsKIAlNb3RoZXJib2FyZF9tYXAgPSBOb2Jpc19wY2lfSVJRX21hcDsKIAlNb3RoZXJib2FyZF9yb3V0ZXMgPSBOb2Jpc19wY2lfSVJRX3JvdXRlczsKLQkqaXJxX2VkZ2VfbWFza19sbyA9IDB4MDA7IC8qIGlycSdzIDAtNyBhbGwgZWRnZS10cmlnZ2VyZWQgKi8KLQkqaXJxX2VkZ2VfbWFza19oaSA9IDB4QTA7IC8qIGlycSdzIDEzLCAxNSBsZXZlbC10cmlnZ2VyZWQgKi8KKwkqaXJxX2VkZ2VfbWFza19sbyA9IDB4MDA7IC8qIElSUXMgMC03IGFsbCBlZGdlLXRyaWdnZXJlZCAqLworCSppcnFfZWRnZV9tYXNrX2hpID0gMHhBMDsgLyogSVJRcyAxMywgMTUgbGV2ZWwtdHJpZ2dlcmVkICovCiB9CiAKIHZvaWQgX19pbml0CkBAIC05NDMsOCArOTQzLDggQEAKIAlNb3RoZXJib2FyZF9tYXBfbmFtZSA9ICJJQk0gNzI0OCwgUG93ZXJTZXJpZXMgODMwLzg1MCAoQ2Fyb2xpbmEpIjsKIAlNb3RoZXJib2FyZF9tYXAgPSBpYm04eHhfcGNpX0lSUV9tYXA7CiAJTW90aGVyYm9hcmRfcm91dGVzID0gaWJtOHh4X3BjaV9JUlFfcm91dGVzOwotCSppcnFfZWRnZV9tYXNrX2xvID0gMHgwMDsgLyogaXJxJ3MgMC03IGFsbCBlZGdlLXRyaWdnZXJlZCAqLwotCSppcnFfZWRnZV9tYXNrX2hpID0gMHhBNDsgLyogaXJxJ3MgMTAsIDEzLCAxNSBsZXZlbC10cmlnZ2VyZWQgKi8KKwkqaXJxX2VkZ2VfbWFza19sbyA9IDB4MDA7IC8qIElSUXMgMC03IGFsbCBlZGdlLXRyaWdnZXJlZCAqLworCSppcnFfZWRnZV9tYXNrX2hpID0gMHhBNDsgLyogSVJRcyAxMCwgMTMsIDE1IGxldmVsLXRyaWdnZXJlZCAqLwogfQogCiB2b2lkIF9faW5pdApAQCAtOTU0LDggKzk1NCw4IEBACiAJTW90aGVyYm9hcmRfbWFwID0gaWJtNDNwX3BjaV9JUlFfbWFwOwogCU1vdGhlcmJvYXJkX3JvdXRlcyA9IGlibTQzcF9wY2lfSVJRX3JvdXRlczsKIAlNb3RoZXJib2FyZF9ub24wID0gaWJtNDNwX3BjaV9tYXBfbm9uMDsKLQkqaXJxX2VkZ2VfbWFza19sbyA9IDB4MDA7IC8qIGlycSdzIDAtNyBhbGwgZWRnZS10cmlnZ2VyZWQgKi8KLQkqaXJxX2VkZ2VfbWFza19oaSA9IDB4QTA7IC8qIGlycSdzIDEzLCAxNSBsZXZlbC10cmlnZ2VyZWQgKi8KKwkqaXJxX2VkZ2VfbWFza19sbyA9IDB4MDA7IC8qIElSUXMgMC03IGFsbCBlZGdlLXRyaWdnZXJlZCAqLworCSppcnFfZWRnZV9tYXNrX2hpID0gMHhBMDsgLyogSVJRcyAxMywgMTUgbGV2ZWwtdHJpZ2dlcmVkICovCiB9CiAKIHZvaWQgX19pbml0CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYwppbmRleCBmMTY2Mjk5Li42ZjIxMTEwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3NldHVwLmMKQEAgLTU5Myw3ICs1OTMsNyBAQAogCVBQQ19ERVZJQ0UgKmF1ZGlvZGV2aWNlID0gTlVMTDsKIAogCS8qCi0JICogR2V0IHRoZSBuZWVkZWQgcmVzb3VyY2UgaW5mb3JtYXRpb25zIGZyb20gcmVzaWR1YWwgZGF0YS4KKwkgKiBHZXQgdGhlIG5lZWRlZCByZXNvdXJjZSBpbmZvcm1hdGlvbiBmcm9tIHJlc2lkdWFsIGRhdGEuCiAJICoKIAkgKi8KIAlpZiAoaGF2ZV9yZXNpZHVhbF9kYXRhKQpAQCAtNjMyLDkgKzYzMiw5IEBACiAJfQogCiAJLyoKLQkgKiBGaW5kIGEgd2F5IHRvIHB1c2ggdGhlc2UgaW5mb3JtYXRpb25zIHRvIHRoZSBjczQyMzIgZHJpdmVyCisJICogRmluZCBhIHdheSB0byBwdXNoIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNzNDIzMiBkcml2ZXIKIAkgKiBHaXZlIGl0IG91dCB3aXRoIHByaW50aywgd2hlbiBub3QgaW4gY21kX2xpbmU/Ci0JICogQXBwZW5kIGl0IHRvICBjbWRfbGluZSBhbmQgYm9vdF9jb21tYW5kX2xpbmU/CisJICogQXBwZW5kIGl0IHRvIGNtZF9saW5lIGFuZCBib290X2NvbW1hbmRfbGluZT8KIAkgKiBGb3JtYXQgaXMgY3M0MjMyPWlvLGlycSxkbWEsZG1hMgogCSAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BycG1jNzUwLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM3NTAuaAppbmRleCA0YzdhZGNjLi5jNGRjZmYwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM3NTAuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM3NTAuaApAQCAtMTYsNyArMTYsNyBAQAogI2RlZmluZSBfX0FTTV9QUlBNQzc1MF9IX18KIAogLyoKLSAqIER1ZSB0byBsaW1pYXRpb25zIGltcG9zZWQgYnkgbGVnYWN5IGhhcmR3YXJlIChwcmltYXJ5aWx5IElERSBjb250cm9sbGVycyksCisgKiBEdWUgdG8gbGltaXRhdGlvbnMgaW1wb3NlZCBieSBsZWdhY3kgaGFyZHdhcmUgKHByaW1hcmlseSBJREUgY29udHJvbGxlcnMpLAogICogdGhlIFByUE1DNzUwIGNhcnJpZXIgYm9hcmQgb3BlcmF0ZXMgdXNpbmcgYSBQUmVQIGFkZHJlc3MgbWFwLgogICoKICAqIEZyb20gUHJvY2Vzc29yIChwaHlzaWNhbCkgLT4gUENJOgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuYwppbmRleCAxM2Q3MGFiLi5iNTU4NjA3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuYwpAQCAtMTM3MSw3ICsxMzcxLDcgQEAKIAkgKiBhcmUgbm9uLXplcm8sIHRoZW4gd2Ugc2hvdWxkIHVzZSB0aGUgYm9hcmQgaW5mbyBmcm9tIHRoZSBiZF90CiAJICogc3RydWN0dXJlIGFuZCB0aGUgY21kbGluZSBwb2ludGVkIHRvIGJ5IHI2IGluc3RlYWQgb2YgdGhlCiAJICogaW5mb3JtYXRpb24gZnJvbSBiaXJlY3MsIGlmIGFueS4gIE90aGVyd2lzZSwgdXNlIHRoZSBpbmZvcm1hdGlvbgotCSAqIGZyb20gYmlyZWNzIGFzIGRpc2NvdmVyZWQgYnkgdGhlIHByZWNlZWRpbmcgY2FsbCB0bworCSAqIGZyb20gYmlyZWNzIGFzIGRpc2NvdmVyZWQgYnkgdGhlIHByZWNlZGluZyBjYWxsIHRvCiAJICogcGFyc2VfYm9vdGluZm8oKS4gIFRoaXMgcnVsZSBzaG91bGQgd29yayB3aXRoIGJvdGggUFBDQm9vdCwgd2hpY2gKIAkgKiB1c2VzIGEgYmRfdCBib2FyZCBpbmZvIHN0cnVjdHVyZSwgYW5kIHRoZSBrZXJuZWwgYm9vdCB3cmFwcGVyLAogCSAqIHdoaWNoIHVzZXMgYmlyZWNzLgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3NhbmRwb2ludC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3NhbmRwb2ludC5jCmluZGV4IGE3NjAwMmEuLjMzNTJmYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvc2FuZHBvaW50LmMKQEAgLTU0LDcgKzU0LDcgQEAKICAqCiAgKgogICogTW90b3JvbGEgaGFzIGZpbmFsbHkgcmVsZWFzZWQgYSB2ZXJzaW9uIG9mIERJTkszMiB0aGF0IGNvcnJlY3RseQotICogKHNlZW1pbmdseSkgaW5pdGFsaXplcyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgY29ycmVjdGx5LCByZWdhcmRsZXNzCisgKiAoc2VlbWluZ2x5KSBpbml0aWFsaXplcyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgY29ycmVjdGx5LCByZWdhcmRsZXNzCiAgKiBvZiB0aGUgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgc3lzdGVtLiAgT25jZSBhIG1ldGhvZCBvZiBkZXRlcm1pbmluZwogICogd2hhdCB2ZXJzaW9uIG9mIERJTksgaW5pdGlhbGl6ZXMgdGhlIHN5c3RlbSBmb3IgdXMsIGlmIGFwcGxpY2FibGUsIGlzCiAgKiBmb3VuZCwgd2UgY2FuIGhvcGVmdWxseSBzdG9wIGhhcmRjb2RpbmcgMzJNQiBvZiBSQU0uCkBAIC00NzMsNyArNDczLDcgQEAKIGFyY2hfaW5pdGNhbGwoc2FuZHBvaW50X3JlcXVlc3RfaW8pOwogCiAvKgotICogSW50ZXJydXB0IHNldHVwIGFuZCBzZXJ2aWNlLiAgSW50ZXJycnVwdHMgb24gdGhlIFNhbmRwb2ludCBjb21lCisgKiBJbnRlcnJ1cHQgc2V0dXAgYW5kIHNlcnZpY2UuICBJbnRlcnJ1cHRzIG9uIHRoZSBTYW5kcG9pbnQgY29tZQogICogZnJvbSB0aGUgZm91ciBQQ0kgc2xvdHMgcGx1cyB0aGUgODI1OSBpbiB0aGUgV2luYm9uZCBTdXBlciBJL08gKFNJTykuCiAgKiBUaGUgODI1OSBpcyBjYXNjYWRlZCBmcm9tIEVQSUMgSVJRMCwgSVJRMS00IG1hcCB0byBQQ0kgc2xvdHMgMS00LAogICogSURFIGlzIG9uIEVQSUMgNyBhbmQgOC4KQEAgLTUwNSw3ICs1MDUsNyBAQAogCWlmIChicC0+YmlfbWVtc2l6ZSkKIAkJcmV0dXJuIGJwLT5iaV9tZW1zaXplOwogCi0JLyogRElOSzMyIDEzLjAgY29ycmVjdGx5IGluaXRhbGl6ZXMgdGhpbmdzLCBzbyBpZmYgeW91IHVzZQorCS8qIERJTkszMiAxMy4wIGNvcnJlY3RseSBpbml0aWFsaXplcyB0aGluZ3MsIHNvIGlmZiB5b3UgdXNlCiAJICogdGhpcyB5b3UgX3Nob3VsZF8gYmUgYWJsZSB0byBjaGFuZ2UgdGhpcyBpbnN0ZWFkIG9mIGEKIAkgKiBoYXJkY29kZWQgdmFsdWUuICovCiAjaWYgMApAQCAtNjc3LDcgKzY3Nyw3IEBACiAJICogYXJlIG5vbi16ZXJvLCB0aGVuIHdlIHNob3VsZCB1c2UgdGhlIGJvYXJkIGluZm8gZnJvbSB0aGUgYmRfdAogCSAqIHN0cnVjdHVyZSBhbmQgdGhlIGNtZGxpbmUgcG9pbnRlZCB0byBieSByNiBpbnN0ZWFkIG9mIHRoZQogCSAqIGluZm9ybWF0aW9uIGZyb20gYmlyZWNzLCBpZiBhbnkuICBPdGhlcndpc2UsIHVzZSB0aGUgaW5mb3JtYXRpb24KLQkgKiBmcm9tIGJpcmVjcyBhcyBkaXNjb3ZlcmVkIGJ5IHRoZSBwcmVjZWVkaW5nIGNhbGwgdG8KKwkgKiBmcm9tIGJpcmVjcyBhcyBkaXNjb3ZlcmVkIGJ5IHRoZSBwcmVjZWRpbmcgY2FsbCB0bwogCSAqIHBhcnNlX2Jvb3RpbmZvKCkuICBUaGlzIHJ1bGUgc2hvdWxkIHdvcmsgd2l0aCBib3RoIFBQQ0Jvb3QsIHdoaWNoCiAJICogdXNlcyBhIGJkX3QgYm9hcmQgaW5mbyBzdHJ1Y3R1cmUsIGFuZCB0aGUga2VybmVsIGJvb3Qgd3JhcHBlciwKIAkgKiB3aGljaCB1c2VzIGJpcmVjcy4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9jcG0yX2NvbW1vbi5jIGIvYXJjaC9wcGMvc3lzbGliL2NwbTJfY29tbW9uLmMKaW5kZXggY2JhYzQ0Yi4uNmNkODU5ZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2NwbTJfY29tbW9uLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL2NwbTJfY29tbW9uLmMKQEAgLTEzNiwxNSArMTM2LDE0IEBACiAJICogdmFyaWVzIHdpdGggdGhlIHByb2Nlc3NvciBhbmQgdGhlIG1pY3JvY29kZSBwYXRjaGVzIGFjdGl2YXRlZC4KIAkgKiBCdXQgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgYXQgbGVhc3Qgc2FmZS4KIAkgKi8KLQlyaF9hdHRhY2hfcmVnaW9uKCZjcG1fZHBtZW1faW5mbywgKHZvaWQgKilDUE1fREFUQU9OTFlfQkFTRSwKLQkJCUNQTV9EQVRBT05MWV9TSVpFKTsKKwlyaF9hdHRhY2hfcmVnaW9uKCZjcG1fZHBtZW1faW5mbywgQ1BNX0RBVEFPTkxZX0JBU0UsIENQTV9EQVRBT05MWV9TSVpFKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGluZGV4IGludG8gdGhlIERQUkFNIGFyZWEuCiAgKi8KLXVpbnQgY3BtX2RwYWxsb2ModWludCBzaXplLCB1aW50IGFsaWduKQordW5zaWduZWQgbG9uZyBjcG1fZHBhbGxvYyh1aW50IHNpemUsIHVpbnQgYWxpZ24pCiB7Ci0Jdm9pZCAqc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbV9kcG1lbV9sb2NrLCBmbGFncyk7CkBAIC0xNTIsMTcgKzE1MSwxNyBAQAogCXN0YXJ0ID0gcmhfYWxsb2MoJmNwbV9kcG1lbV9pbmZvLCBzaXplLCAiY29tbXByb2MiKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuICh1aW50KXN0YXJ0OworCXJldHVybiBzdGFydDsKIH0KIEVYUE9SVF9TWU1CT0woY3BtX2RwYWxsb2MpOwogCi1pbnQgY3BtX2RwZnJlZSh1aW50IG9mZnNldCkKK2ludCBjcG1fZHBmcmVlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwotCXJldCA9IHJoX2ZyZWUoJmNwbV9kcG1lbV9pbmZvLCAodm9pZCAqKW9mZnNldCk7CisJcmV0ID0gcmhfZnJlZSgmY3BtX2RwbWVtX2luZm8sIG9mZnNldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3BtX2RwbWVtX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CkBAIC0xNzAsMTcgKzE2OSwxNyBAQAogRVhQT1JUX1NZTUJPTChjcG1fZHBmcmVlKTsKIAogLyogbm90IHN1cmUgaWYgdGhpcyBpcyBldmVyIG5lZWRlZCAqLwotdWludCBjcG1fZHBhbGxvY19maXhlZCh1aW50IG9mZnNldCwgdWludCBzaXplLCB1aW50IGFsaWduKQordW5zaWduZWQgbG9uZyBjcG1fZHBhbGxvY19maXhlZCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludCBzaXplLCB1aW50IGFsaWduKQogewotCXZvaWQgKnN0YXJ0OworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcG1fZHBtZW1fbG9jaywgZmxhZ3MpOwogCWNwbV9kcG1lbV9pbmZvLmFsaWdubWVudCA9IGFsaWduOwotCXN0YXJ0ID0gcmhfYWxsb2NfZml4ZWQoJmNwbV9kcG1lbV9pbmZvLCAodm9pZCAqKW9mZnNldCwgc2l6ZSwgImNvbW1wcm9jIik7CisJc3RhcnQgPSByaF9hbGxvY19maXhlZCgmY3BtX2RwbWVtX2luZm8sIG9mZnNldCwgc2l6ZSwgImNvbW1wcm9jIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3BtX2RwbWVtX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAodWludClzdGFydDsKKwlyZXR1cm4gc3RhcnQ7CiB9CiBFWFBPUlRfU1lNQk9MKGNwbV9kcGFsbG9jX2ZpeGVkKTsKIApAQCAtMTkwLDcgKzE4OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNwbV9kcGR1bXApOwogCi12b2lkICpjcG1fZHByYW1fYWRkcih1aW50IG9mZnNldCkKK3ZvaWQgKmNwbV9kcHJhbV9hZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewogCXJldHVybiAodm9pZCAqKSZjcG0yX2ltbXItPmltX2RwcmFtYmFzZVtvZmZzZXRdOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2hhcnJpZXIuYyBiL2FyY2gvcHBjL3N5c2xpYi9oYXJyaWVyLmMKaW5kZXggYzE1ODNmNC4uNDViNzk3YiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2hhcnJpZXIuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvaGFycmllci5jCkBAIC0yMTAsNyArMjEwLDcgQEAKICAqIFRoaXMgYXNzdW1lcyB0aGF0IFBQQ0J1ZyBoYXMgaW5pdGlhbGl6ZWQgdGhlIG1lbW9yeSBjb250cm9sbGVyIChTTUMpCiAgKiBvbiB0aGUgSGFycmllciBjb3JyZWN0bHkgKGkuZS4sIGl0IGRvZXMgbm8gc2FuaXR5IGNoZWNraW5nKS4KICAqIEl0IGFsc28gYXNzdW1lcyB0aGF0IHRoZSBtZW1vcnkgYmFzZSByZWdpc3RlcnMgYXJlIHNldCB0byBjb25maWd1cmUgdGhlCi0gKiBtZW1vcnkgYXMgY29udGlnb3VzIHN0YXJ0aW5nIHdpdGggIlJBTSBBIEJBU0UiLCAiUkFNIEIgQkFTRSIsIGV0Yy4KKyAqIG1lbW9yeSBhcyBjb250aWd1b3VzIHN0YXJ0aW5nIHdpdGggIlJBTSBBIEJBU0UiLCAiUkFNIEIgQkFTRSIsIGV0Yy4KICAqIGhvd2V2ZXIsIFJBTSBiYXNlIHJlZ2lzdGVycyBjYW4gYmUgc2tpcHBlZCAoZS5nLiBBLCBCLCBDIGFyZSBzZXQsCiAgKiBEIGlzIHNraXBwZWQgYnV0IEUgaXMgc2V0IGlzIG9rYXkpLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaGF3a19jb21tb24uYyBiL2FyY2gvcHBjL3N5c2xpYi9oYXdrX2NvbW1vbi5jCmluZGV4IGM1YmYxNmIuLjg2ODIxZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9oYXdrX2NvbW1vbi5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9oYXdrX2NvbW1vbi5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJCQkgcHJvY2Vzc29yX3BjaV9tZW1fc3RhcnQgKyAKIAkJCQkgaG9zZS0+bWVtX3NwYWNlLnN0YXJ0KSB8IDB4MCk7CiAKLQkvKiBNYXAgTVBJQyBpbnRvIHZpdHVhbCBtZW1vcnkgKi8KKwkvKiBNYXAgTVBJQyBpbnRvIHZpcnR1YWwgbWVtb3J5ICovCiAJT3BlblBJQ19BZGRyID0gaW9yZW1hcChwcm9jZXNzb3JfbXBpY19iYXNlLCBIQVdLX01QSUNfU0laRSk7CiAKIAlyZXR1cm4gMDsKQEAgLTE3Niw3ICsxNzYsNyBAQAogICogVGhpcyBhc3N1bWVzIHRoYXQgUFBDQnVnIGhhcyBpbml0aWFsaXplZCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKFNNQykKICAqIG9uIHRoZSBGYWxjb24vSEFXSyBjb3JyZWN0bHkgKGkuZS4sIGl0IGRvZXMgbm8gc2FuaXR5IGNoZWNraW5nKS4KICAqIEl0IGFsc28gYXNzdW1lcyB0aGF0IHRoZSBtZW1vcnkgYmFzZSByZWdpc3RlcnMgYXJlIHNldCB0byBjb25maWd1cmUgdGhlCi0gKiBtZW1vcnkgYXMgY29udGlnb3VzIHN0YXJ0aW5nIHdpdGggIlJBTSBBIEJBU0UiLCAiUkFNIEIgQkFTRSIsIGV0Yy4KKyAqIG1lbW9yeSBhcyBjb250aWd1b3VzIHN0YXJ0aW5nIHdpdGggIlJBTSBBIEJBU0UiLCAiUkFNIEIgQkFTRSIsIGV0Yy4KICAqIGhvd2V2ZXIsIFJBTSBiYXNlIHJlZ2lzdGVycyBjYW4gYmUgc2tpcHBlZCAoZS5nLiBBLCBCLCBDIGFyZSBzZXQsCiAgKiBEIGlzIHNraXBwZWQgYnV0IEUgaXMgc2V0IGlzIG9rYXkpLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtX29jcC5jIGIvYXJjaC9wcGMvc3lzbGliL2libV9vY3AuYwppbmRleCAzZjZlNTVjLi4yZWUxNzY2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvaWJtX29jcC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pYm1fb2NwLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2libTR4eC5oPgogI2luY2x1ZGUgPGFzbS9vY3AuaD4KIAogc3RydWN0IG9jcF9zeXNfaW5mb19kYXRhIG9jcF9zeXNfaW5mbyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9pcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvaXBpYy5jCmluZGV4IDEwNjU5YzIuLjkxOTI3NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9pcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL2lwaWMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1wcGMvaXBpYy5jCisgKiBhcmNoL3BwYy9zeXNsaWIvaXBpYy5jCiAgKgogICogSVBJQyByb3V0aW5lcyBpbXBsZW1lbnRhdGlvbnMuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL204Mnh4X3BjaS5jIGIvYXJjaC9wcGMvc3lzbGliL204Mnh4X3BjaS5jCmluZGV4IGUzYjU4NmIuLmZlODYwZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tODJ4eF9wY2kuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbTgyeHhfcGNpLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCSAgIENQTSBoaWdoICAgICAgCTBiMDAwMAogCSAgIENQTSBtaWRkbGUgICAgICAgICAgIDBiMDAwMQogCSAgIENQTSBsb3cgICAgICAgCTBiMDAxMAotCSAgIFBDSSByZWd1ZXN0ICAgICAgICAgIDBiMDAxMQorCSAgIFBDSSByZXF1ZXN0ICAgICAgICAgIDBiMDAxMQogCSAgIFJlc2VydmVkICAgICAgCTBiMDEwMAogCSAgIFJlc2VydmVkICAgICAgCTBiMDEwMQogCSAgIEludGVybmFsIENvcmUgICAgIAkwYjAxMTAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGMxMHhfY29tbW9uLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjMTB4X2NvbW1vbi5jCmluZGV4IDJmYzdjNDEuLjQzN2EyOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tcGMxMHhfY29tbW9uLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL21wYzEweF9jb21tb24uYwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJCQlwaHlzX2V1bWJfYmFzZSk7CiAJfQogCi0JLyogSVJRJ3MgYXJlIGRldGVybWluZWQgYXQgcnVudGltZSAqLworCS8qIElSUXMgYXJlIGRldGVybWluZWQgYXQgcnVudGltZSAqLwogCXBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tNUEMxMFhfSUlDMV0ucmVzb3VyY2VbMV0uc3RhcnQgPSBNUEMxMFhfSTJDX0lSUTsKIAlwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbTVBDMTBYX0lJQzFdLnJlc291cmNlWzFdLmVuZCA9IE1QQzEwWF9JMkNfSVJROwogCXBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tNUEMxMFhfRE1BMF0ucmVzb3VyY2VbMV0uc3RhcnQgPSBNUEMxMFhfRE1BMF9JUlE7CkBAIC02NDYsNyArNjQ2LDcgQEAKIAlvcGVucGljX3NldF9zb3VyY2VzKEVQSUNfSVJRX0JBU0UsIDMsIE9wZW5QSUNfQWRkciArIDB4MTEwMjApOwogCS8qIFNraXAgcmVzZXJ2ZWQgc3BhY2UgYW5kIG1hcCBNZXNzYWdlIFVuaXQgSW50ZXJydXB0IChJMk8pICovCiAJb3BlbnBpY19zZXRfc291cmNlcyhFUElDX0lSUV9CQVNFICsgMywgMSwgT3BlblBJQ19BZGRyICsgMHgxMTBDMCk7Ci0JLyogU2tpcCByZXNlcnZlZCBzcGFjZSBhbmQgbWFwIFNlcmlhbCBJbnRlcnVwdHMgKi8KKwkvKiBTa2lwIHJlc2VydmVkIHNwYWNlIGFuZCBtYXAgU2VyaWFsIEludGVycnVwdHMgKi8KIAlvcGVucGljX3NldF9zb3VyY2VzKEVQSUNfSVJRX0JBU0UgKyA0LCAyLCBPcGVuUElDX0FkZHIgKyAweDExMTIwKTsKIAogCW9wZW5waWNfaW5pdChOVU1fODI1OV9JTlRFUlJVUFRTKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3NldHVwLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9zZXR1cC5jCmluZGV4IDgwYzYwOTAuLmVjZmEyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3NldHVwLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfc2V0dXAuYwpAQCAtMjUyLDcgKzI1Miw3IEBACiAJb3V0X2JlMzIoJnhsYi0+c25vb3Bfd2luZG93LCBNUEM1Mnh4X1BDSV9UQVJHRVRfTUVNIHwgMHgxZCk7CiAKIAkvKiBEaXNhYmxlIFhMQiBwaXBlbGluaW5nICovCi0JLyogKGNmciBlcnJhdGUgMjkyLiBXZSBjb3VsZCBkbyB0aGlzIG9ubHkganVzdCBiZWZvcmUgQVRBIFBJTworCS8qIChjZnIgZXJyYXRhIDI5Mi4gV2UgY291bGQgZG8gdGhpcyBvbmx5IGp1c3QgYmVmb3JlIEFUQSBQSU8KIAkgICAgdHJhbnNhY3Rpb24gYW5kIHJlLWVuYWJsZSBpdCBhZnRlciAuLi4pICovCiAJb3V0X2JlMzIoJnhsYi0+Y29uZmlnLCBpbl9iZTMyKCZ4bGItPmNvbmZpZykgfCBNUEM1Mnh4X1hMQl9DRkdfUExESVMpOwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X2RldmljZXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jCmluZGV4IDMxZmI1NjUuLmMwNWFjODcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wcGNfc3lzLmg+CiAKLS8qIFdlIHVzZSBvZmZzZXRzIGZvciBJT1JFU09VUkNFX01FTSB0byBkbyBub3Qgc2V0IGRlcGVuZGVuY2VzIGF0IGNvbXBpbGUgdGltZS4KKy8qIFdlIHVzZSBvZmZzZXRzIGZvciBJT1JFU09VUkNFX01FTSB0byBkbyBub3Qgc2V0IGRlcGVuZGVuY2llcyBhdCBjb21waWxlIHRpbWUuCiAgKiBUaGV5IHdpbGwgZ2V0IGZpeGVkIHVwIGJ5IG1hY2hfbXBjOHh4X2ZpeHVwCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL212NjR4NjAuYyBiL2FyY2gvcHBjL3N5c2xpYi9tdjY0eDYwLmMKaW5kZXggYTZmOGI2OC4uODQ4NWE2OCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL212NjR4NjAuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXY2NHg2MC5jCkBAIC00OTAsNyArNDkwLDcgQEAKIC8qCiAgKiBtdjY0eDYwX2luaXQoKQogICoKLSAqIEluaXRpYWx6ZSB0aGUgYnJpZGdlIGJhc2VkIG9uIHNldHRpbmcgcGFzc2VkIGluIHZpYSAnc2knLiAgVGhlIGJyaWRnZQorICogSW5pdGlhbGl6ZSB0aGUgYnJpZGdlIGJhc2VkIG9uIHNldHRpbmcgcGFzc2VkIGluIHZpYSAnc2knLiAgVGhlIGJyaWRnZQogICogaGFuZGxlLCAnYmgnLCB3aWxsIGJlIHNldCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHRvIG1ha2Ugc3Vic2VxdWVudAogICogY2FsbHMgdG8gcm91dGluZXMgaW4gdGhpcyBmaWxlLgogICovCkBAIC0xNzA0LDcgKzE3MDQsNyBAQAogLyoKICAqIGd0NjQyNjBhX2NoaXBfc3BlY2lmaWNfaW5pdCgpCiAgKgotICogSW1wbGVtZW50IGVycmF0YSB3b3JrIGFyb3VuZHMgZm9yIHRoZSBHVDY0MjYwQS4KKyAqIEltcGxlbWVudCBlcnJhdGEgd29ya2Fyb3VuZHMgZm9yIHRoZSBHVDY0MjYwQS4KICAqLwogc3RhdGljIHZvaWQgX19pbml0CiBndDY0MjYwYV9jaGlwX3NwZWNpZmljX2luaXQoc3RydWN0IG12NjR4NjBfaGFuZGxlICpiaCwKQEAgLTE3NzYsNyArMTc3Niw3IEBACiAvKgogICogZ3Q2NDI2MGJfY2hpcF9zcGVjaWZpY19pbml0KCkKICAqCi0gKiBJbXBsZW1lbnQgZXJyYXRhIHdvcmsgYXJvdW5kcyBmb3IgdGhlIEdUNjQyNjBCLgorICogSW1wbGVtZW50IGVycmF0YSB3b3JrYXJvdW5kcyBmb3IgdGhlIEdUNjQyNjBCLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQKIGd0NjQyNjBiX2NoaXBfc3BlY2lmaWNfaW5pdChzdHJ1Y3QgbXY2NHg2MF9oYW5kbGUgKmJoLApAQCAtMjMxNiw3ICsyMzE2LDcgQEAKIC8qCiAgKiBtdjY0MzYwX2NoaXBfc3BlY2lmaWNfaW5pdCgpCiAgKgotICogSW1wbGVtZW50IGVycmF0YSB3b3JrIGFyb3VuZHMgZm9yIHRoZSBNVjY0MzYwLgorICogSW1wbGVtZW50IGVycmF0YSB3b3JrYXJvdW5kcyBmb3IgdGhlIE1WNjQzNjAuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdAogbXY2NDM2MF9jaGlwX3NwZWNpZmljX2luaXQoc3RydWN0IG12NjR4NjBfaGFuZGxlICpiaCwKQEAgLTIzMzYsNyArMjMzNiw3IEBACiAvKgogICogbXY2NDQ2MF9jaGlwX3NwZWNpZmljX2luaXQoKQogICoKLSAqIEltcGxlbWVudCBlcnJhdGEgd29yayBhcm91bmRzIGZvciB0aGUgTVY2NDQ2MC4KKyAqIEltcGxlbWVudCBlcnJhdGEgd29ya2Fyb3VuZHMgZm9yIHRoZSBNVjY0NDYwLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQKIG12NjQ0NjBfY2hpcF9zcGVjaWZpY19pbml0KHN0cnVjdCBtdjY0eDYwX2hhbmRsZSAqYmgsCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvb2NwLmMgYi9hcmNoL3BwYy9zeXNsaWIvb2NwLmMKaW5kZXggNTBjNTU2Mi4uNDkxZmU5YSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL29jcC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9vY3AuYwpAQCAtMjcsNyArMjcsNyBAQAogICogIGRldmljZSBtb2RlbC4gIFRoZSBkZXZpY2VzIG9uIHRoZSBPQ1AgYnVzIGFyZSBzZWVkZWQgYnkgYW4KICAqICBhbiBpbml0aWFsIE9DUCBkZXZpY2UgYXJyYXkgY3JlYXRlZCBieSB0aGUgYXJjaC1zcGVjaWZpYwogICogIERldmljZSBlbnRyaWVzIGNhbiBiZSBhZGRlZC9yZW1vdmVkL21vZGlmaWVkIHRocm91Z2ggT0NQCi0gKiAgaGVscGVyIGZ1bmN0aW9ucyB0byBhY2NvbW9kYXRlIHN5c3RlbSBhbmQgIGJvYXJkLXNwZWNpZmljCisgKiAgaGVscGVyIGZ1bmN0aW9ucyB0byBhY2NvbW1vZGF0ZSBzeXN0ZW0gYW5kICBib2FyZC1zcGVjaWZpYwogICogIHBhcmFtZXRlcnMgY29tbW9ubHkgZm91bmQgaW4gZW1iZWRkZWQgc3lzdGVtcy4gT0NQIGFsc28KICAqICBwcm92aWRlcyBhIHN0YW5kYXJkIG1ldGhvZCBmb3IgZGV2aWNlcyB0byBkZXNjcmliZSBleHRlbmRlZAogICogIGF0dHJpYnV0ZXMgYWJvdXQgdGhlbXNlbHZlcyB0byB0aGUgc3lzdGVtLiAgQSBzdGFuZGFyZCBhY2Nlc3MKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGM0MDNfcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNDAzX3BpYy5jCmluZGV4IDYwN2ViZDEuLmMzYjdiOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcGM0MDNfcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BwYzQwM19waWMuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAKIAkvKgogCSAqIERpc2FibGUgYWxsIGV4dGVybmFsIGludGVycnVwdHMgdW50aWwgdGhleSBhcmUKLQkgKiBleHBsaWNpdHkgcmVxdWVzdGVkLgorCSAqIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgogCSAqLwogCXBwY19jYWNoZWRfaXJxX21hc2tbMF0gPSAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjNDA1X3BjaS5jIGIvYXJjaC9wcGMvc3lzbGliL3BwYzQwNV9wY2kuYwppbmRleCBkNmQ4MzhiLi45ZTkwMzU2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjNDA1X3BjaS5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0MDVfcGNpLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCWhvc2VfYS0+cGNpX21lbV9vZmZzZXQgPSAwOwogCiAJLyogU2V0dXAgYnJpZGdlIG1lbW9yeS9JTyByYW5nZXMgJiByZXNvdXJjZXMKLQkgKiBUT0RPOiBIYW5kbGUgZmlybXdhcmVzIHNldHRpbmcgdXAgYSBsZWdhY3kgSVNBIG1lbSBiYXNlCisJICogVE9ETzogSGFuZGxlIGZpcm13YXJlIHNldHRpbmcgdXAgYSBsZWdhY3kgSVNBIG1lbSBiYXNlCiAJICovCiAJaG9zZV9hLT5pb19zcGFjZS5zdGFydCA9IFBQQzQwNV9QQ0lfTE9XRVJfSU87CiAJaG9zZV9hLT5pb19zcGFjZS5lbmQgPSBQUEM0MDVfUENJX1VQUEVSX0lPOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9kbWEuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfZG1hLmMKaW5kZXggMWVlZjRmZi4uYmQzMDE4NiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9kbWEuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X2RtYS5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIH0KIAogLyoKLSAqICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgdG8gYmUgdHJhbnNmZXJlZC4KKyAqICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgdG8gYmUgdHJhbnNmZXJyZWQuCiAgKiAgIEFmdGVyIGEgRE1BIHRyYW5zZmVyLCB0aGlzIHNob3VsZCByZXR1cm4gemVyby4KICAqICAgUmVhZGluZyB0aGlzIHdoaWxlIGEgRE1BIHRyYW5zZmVyIGlzIHN0aWxsIGluIHByb2dyZXNzIHdpbGwgcmV0dXJuCiAgKiAgIHVucHJlZGljdGFibGUgcmVzdWx0cy4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfc2dkbWEuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfc2dkbWEuYwppbmRleCA1ZGFkY2EzZS4uYzRiMzY5YiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9zZ2RtYS5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfc2dkbWEuYwpAQCAtMjMsMTAgKzIzLDEwIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vcHBjNHh4X2RtYS5oPgogCiB2b2lkCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9yaW8uYyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3Jpby5jCmluZGV4IDJiMDk3ODAuLmFmMjQyNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3Jpby5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3Jpby5jCkBAIC0zNDksNyArMzQ5LDcgQEAKICAqIEBkZXZfaW5zdGFuY2U6IFBvaW50ZXIgdG8gaW50ZXJydXB0LXNwZWNpZmljIGRhdGEKICAqCiAgKiBIYW5kbGVzIG91dGJvdW5kIG1lc3NhZ2UgaW50ZXJydXB0cy4gRXhlY3V0ZXMgYSByZWdpc3RlciBvdXRib3VuZAotICogbWFpbGJveCBldmVudCBoYW5kbGVyIGFuZCBhY2tzIHRoZSBpbnRlcnJ1cHQgb2NjdXJlbmNlLgorICogbWFpbGJveCBldmVudCBoYW5kbGVyIGFuZCBhY2tzIHRoZSBpbnRlcnJ1cHQgb2NjdXJyZW5jZS4KICAqLwogc3RhdGljIGlycXJldHVybl90CiBtcGM4NXh4X3Jpb190eF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKQEAgLTUxNiw3ICs1MTYsNyBAQAogICogQGRldl9pbnN0YW5jZTogUG9pbnRlciB0byBpbnRlcnJ1cHQtc3BlY2lmaWMgZGF0YQogICoKICAqIEhhbmRsZXMgaW5ib3VuZCBtZXNzYWdlIGludGVycnVwdHMuIEV4ZWN1dGVzIGEgcmVnaXN0ZXJlZCBpbmJvdW5kCi0gKiBtYWlsYm94IGV2ZW50IGhhbmRsZXIgYW5kIGFja3MgdGhlIGludGVycnVwdCBvY2N1cmVuY2UuCisgKiBtYWlsYm94IGV2ZW50IGhhbmRsZXIgYW5kIGFja3MgdGhlIGludGVycnVwdCBvY2N1cnJlbmNlLgogICovCiBzdGF0aWMgaXJxcmV0dXJuX3QKIG1wYzg1eHhfcmlvX3J4X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BxMl9zeXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcTJfc3lzLmMKaW5kZXggZjUyNjAwYy4uOWM4NTMwMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BxMl9zeXMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHEyX3N5cy5jCkBAIC0yNiw3ICsyNiw3IEBACiAJCXsKIAkJCU1QQzgyeHhfQ1BNX0ZDQzEsIE1QQzgyeHhfQ1BNX0ZDQzIsIE1QQzgyeHhfQ1BNX0ZDQzMsCiAJCQlNUEM4Mnh4X0NQTV9TQ0MxLCBNUEM4Mnh4X0NQTV9TQ0MyLCBNUEM4Mnh4X0NQTV9TQ0MzLAotCQkJTVBDODJ4eF9DUE1fU0NDNCwgTVBDODJ4eF9DUE1fTUNDMSwgTVBDODJ4eF9DUE1fU01DMSwKKwkJCU1QQzgyeHhfQ1BNX1NDQzQsIE1QQzgyeHhfQ1BNX01DQzIsIE1QQzgyeHhfQ1BNX1NNQzEsCiAJCQlNUEM4Mnh4X0NQTV9TTUMyLCBNUEM4Mnh4X0NQTV9TUEksIE1QQzgyeHhfQ1BNX0kyQywKIAkJfQogCX0sCkBAIC0zOSw3ICszOSw3IEBACiAJCXsKIAkJCU1QQzgyeHhfQ1BNX0ZDQzEsIE1QQzgyeHhfQ1BNX0ZDQzIsIE1QQzgyeHhfQ1BNX1NDQzEsCiAJCQlNUEM4Mnh4X0NQTV9TQ0MyLCBNUEM4Mnh4X0NQTV9TQ0MzLCBNUEM4Mnh4X0NQTV9TQ0M0LAotCQkJTVBDODJ4eF9DUE1fTUNDMSwgTVBDODJ4eF9DUE1fU01DMSwgTVBDODJ4eF9DUE1fU01DMiwKKwkJCU1QQzgyeHhfQ1BNX01DQzIsIE1QQzgyeHhfQ1BNX1NNQzEsIE1QQzgyeHhfQ1BNX1NNQzIsCiAJCQlNUEM4Mnh4X0NQTV9TUEksIE1QQzgyeHhfQ1BNX0kyQywKIAkJfQogCX0sCkBAIC00Nyw1MiArNDcsNTYgQEAKIAkJLnBwY19zeXNfbmFtZQk9ICI4MjYwIiwKIAkJLm1hc2sJCT0gMHgwMDAwZmYwMCwKIAkJLnZhbHVlCQk9IDB4MDAwMDAwMDAsCi0JCS5udW1fZGV2aWNlcwk9IDEyLAorCQkubnVtX2RldmljZXMJPSAxMywKIAkJLmRldmljZV9saXN0ID0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgyeHhfQ1BNX0ZDQzEsIE1QQzgyeHhfQ1BNX0ZDQzIsIE1QQzgyeHhfQ1BNX0ZDQzMsCiAJCQlNUEM4Mnh4X0NQTV9TQ0MxLCBNUEM4Mnh4X0NQTV9TQ0MyLCBNUEM4Mnh4X0NQTV9TQ0MzLAotCQkJTVBDODJ4eF9DUE1fU0NDNCwgTVBDODJ4eF9DUE1fTUNDMSwgTVBDODJ4eF9DUE1fU01DMSwKLQkJCU1QQzgyeHhfQ1BNX1NNQzIsIE1QQzgyeHhfQ1BNX1NQSSwgTVBDODJ4eF9DUE1fSTJDLAorCQkJTVBDODJ4eF9DUE1fU0NDNCwgTVBDODJ4eF9DUE1fTUNDMSwgTVBDODJ4eF9DUE1fTUNDMiwKKwkJCU1QQzgyeHhfQ1BNX1NNQzEsIE1QQzgyeHhfQ1BNX1NNQzIsIE1QQzgyeHhfQ1BNX1NQSSwKKwkJCU1QQzgyeHhfQ1BNX0kyQywKIAkJfQogCX0sCiAJewogCQkucHBjX3N5c19uYW1lCT0gIjgyNjQiLAogCQkubWFzawkJPSAweDAwMDBmZjAwLAogCQkudmFsdWUJCT0gMHgwMDAwMDAwMCwKLQkJLm51bV9kZXZpY2VzCT0gMTIsCisJCS5udW1fZGV2aWNlcwk9IDEzLAogCQkuZGV2aWNlX2xpc3QgPSAoZW51bSBwcGNfc3lzX2RldmljZXNbXSkKIAkJewogCQkJTVBDODJ4eF9DUE1fRkNDMSwgTVBDODJ4eF9DUE1fRkNDMiwgTVBDODJ4eF9DUE1fRkNDMywKIAkJCU1QQzgyeHhfQ1BNX1NDQzEsIE1QQzgyeHhfQ1BNX1NDQzIsIE1QQzgyeHhfQ1BNX1NDQzMsCi0JCQlNUEM4Mnh4X0NQTV9TQ0M0LCBNUEM4Mnh4X0NQTV9NQ0MxLCBNUEM4Mnh4X0NQTV9TTUMxLAotCQkJTVBDODJ4eF9DUE1fU01DMiwgTVBDODJ4eF9DUE1fU1BJLCBNUEM4Mnh4X0NQTV9JMkMsCisJCQlNUEM4Mnh4X0NQTV9TQ0M0LCBNUEM4Mnh4X0NQTV9NQ0MxLCBNUEM4Mnh4X0NQTV9NQ0MyLAorCQkJTVBDODJ4eF9DUE1fU01DMSwgTVBDODJ4eF9DUE1fU01DMiwgTVBDODJ4eF9DUE1fU1BJLAorCQkJTVBDODJ4eF9DUE1fSTJDLAogCQl9CiAJfSwKIAl7CiAJCS5wcGNfc3lzX25hbWUJPSAiODI2NSIsCiAJCS5tYXNrCQk9IDB4MDAwMGZmMDAsCiAJCS52YWx1ZQkJPSAweDAwMDAwMDAwLAotCQkubnVtX2RldmljZXMJPSAxMiwKKwkJLm51bV9kZXZpY2VzCT0gMTMsCiAJCS5kZXZpY2VfbGlzdCA9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQogCQl7CiAJCQlNUEM4Mnh4X0NQTV9GQ0MxLCBNUEM4Mnh4X0NQTV9GQ0MyLCBNUEM4Mnh4X0NQTV9GQ0MzLAogCQkJTVBDODJ4eF9DUE1fU0NDMSwgTVBDODJ4eF9DUE1fU0NDMiwgTVBDODJ4eF9DUE1fU0NDMywKLQkJCU1QQzgyeHhfQ1BNX1NDQzQsIE1QQzgyeHhfQ1BNX01DQzEsIE1QQzgyeHhfQ1BNX1NNQzEsCi0JCQlNUEM4Mnh4X0NQTV9TTUMyLCBNUEM4Mnh4X0NQTV9TUEksIE1QQzgyeHhfQ1BNX0kyQywKKwkJCU1QQzgyeHhfQ1BNX1NDQzQsIE1QQzgyeHhfQ1BNX01DQzEsIE1QQzgyeHhfQ1BNX01DQzIsCisJCQlNUEM4Mnh4X0NQTV9TTUMxLCBNUEM4Mnh4X0NQTV9TTUMyLCBNUEM4Mnh4X0NQTV9TUEksCisJCQlNUEM4Mnh4X0NQTV9JMkMsCiAJCX0KIAl9LAogCXsKIAkJLnBwY19zeXNfbmFtZQk9ICI4MjY2IiwKIAkJLm1hc2sJCT0gMHgwMDAwZmYwMCwKIAkJLnZhbHVlCQk9IDB4MDAwMDAwMDAsCi0JCS5udW1fZGV2aWNlcwk9IDEyLAorCQkubnVtX2RldmljZXMJPSAxMywKIAkJLmRldmljZV9saXN0ID0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgyeHhfQ1BNX0ZDQzEsIE1QQzgyeHhfQ1BNX0ZDQzIsIE1QQzgyeHhfQ1BNX0ZDQzMsCiAJCQlNUEM4Mnh4X0NQTV9TQ0MxLCBNUEM4Mnh4X0NQTV9TQ0MyLCBNUEM4Mnh4X0NQTV9TQ0MzLAotCQkJTVBDODJ4eF9DUE1fU0NDNCwgTVBDODJ4eF9DUE1fTUNDMSwgTVBDODJ4eF9DUE1fU01DMSwKLQkJCU1QQzgyeHhfQ1BNX1NNQzIsIE1QQzgyeHhfQ1BNX1NQSSwgTVBDODJ4eF9DUE1fSTJDLAorCQkJTVBDODJ4eF9DUE1fU0NDNCwgTVBDODJ4eF9DUE1fTUNDMSwgTVBDODJ4eF9DUE1fTUNDMiwKKwkJCU1QQzgyeHhfQ1BNX1NNQzEsIE1QQzgyeHhfQ1BNX1NNQzIsIE1QQzgyeHhfQ1BNX1NQSSwKKwkJCU1QQzgyeHhfQ1BNX0kyQywKIAkJfQogCX0sCiAJLyogYmVsb3cgaXMgYSBsaXN0IG9mIHRoZSA4MjcyIGZhbWlseSBvZiBwcm9jZXNzb3JzICovCkBAIC0xNTksNyArMTYzLDcgQEAKIAkJewogCQkJTVBDODJ4eF9DUE1fRkNDMSwgTVBDODJ4eF9DUE1fRkNDMiwgTVBDODJ4eF9DUE1fRkNDMywKIAkJCU1QQzgyeHhfQ1BNX1NDQzEsIE1QQzgyeHhfQ1BNX1NDQzIsIE1QQzgyeHhfQ1BNX1NDQzMsCi0JCQlNUEM4Mnh4X0NQTV9TQ0M0LCBNUEM4Mnh4X0NQTV9NQ0MxLCBNUEM4Mnh4X0NQTV9TTUMxLAorCQkJTVBDODJ4eF9DUE1fU0NDNCwgTVBDODJ4eF9DUE1fTUNDMiwgTVBDODJ4eF9DUE1fU01DMSwKIAkJCU1QQzgyeHhfQ1BNX1NNQzIsIE1QQzgyeHhfQ1BNX1NQSSwgTVBDODJ4eF9DUE1fSTJDLAogCQl9LAogCX0sCkBAIC0xNzIsNyArMTc2LDcgQEAKIAkJewogCQkJTVBDODJ4eF9DUE1fRkNDMSwgTVBDODJ4eF9DUE1fRkNDMiwgTVBDODJ4eF9DUE1fRkNDMywKIAkJCU1QQzgyeHhfQ1BNX1NDQzEsIE1QQzgyeHhfQ1BNX1NDQzIsIE1QQzgyeHhfQ1BNX1NDQzMsCi0JCQlNUEM4Mnh4X0NQTV9TQ0M0LCBNUEM4Mnh4X0NQTV9NQ0MxLCBNUEM4Mnh4X0NQTV9TTUMxLAorCQkJTVBDODJ4eF9DUE1fU0NDNCwgTVBDODJ4eF9DUE1fTUNDMiwgTVBDODJ4eF9DUE1fU01DMSwKIAkJCU1QQzgyeHhfQ1BNX1NNQzIsIE1QQzgyeHhfQ1BNX1NQSSwgTVBDODJ4eF9DUE1fSTJDLAogCQl9LAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvdmlydGV4X2RldmljZXMuaCBiL2FyY2gvcHBjL3N5c2xpYi92aXJ0ZXhfZGV2aWNlcy5oCmluZGV4IDRhMTdkZDMuLjNkNGJlMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi92aXJ0ZXhfZGV2aWNlcy5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi92aXJ0ZXhfZGV2aWNlcy5oCkBAIC0xMyw2ICsxMywxMyBAQAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKKy8qIE1MMzAwLzQwMyByZWZlcmVuY2UgZGVzaWduIGZyYW1lYnVmZmVyIGRyaXZlciBwbGF0Zm9ybSBkYXRhIHN0cnVjdCAqLworc3RydWN0IHhpbGlueGZiX3BsYXRmb3JtX2RhdGEgeworCXUzMiByb3RhdGVfc2NyZWVuOworCXUzMiBzY3JlZW5faGVpZ2h0X21tOworCXUzMiBzY3JlZW5fd2lkdGhfbW07Cit9OworCiB2b2lkIF9faW5pdCB2aXJ0ZXhfZWFybHlfc2VyaWFsX21hcCh2b2lkKTsKIAogLyogUHJvdG90eXBlIGZvciBkZXZpY2UgZml4dXAgcm91dGluZS4gIEltcGxlbWVudCB0aGlzIHJvdXRpbmUgaW4gdGhlCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIveGlsaW54X3BpYy5jIGIvYXJjaC9wcGMvc3lzbGliL3hpbGlueF9waWMuYwppbmRleCA2ZmQ0Y2RiLi4zYjgyMzMzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIveGlsaW54X3BpYy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi94aWxpbnhfcGljLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAJLyoKIAkgKiBEaXNhYmxlIGFsbCBleHRlcm5hbCBpbnRlcnJ1cHRzIHVudGlsIHRoZXkgYXJlCi0JICogZXhwbGljaXR5IHJlcXVlc3RlZC4KKwkgKiBleHBsaWNpdGx5IHJlcXVlc3RlZC4KIAkgKi8KIAlpbnRjX291dF9iZTMyKGludGMgKyBJRVIsIDApOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDFhODQ3MTkuLjA5OGM2MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC00LDI3ICs0LDIzIEBACiAjCiAKIGNvbmZpZyBNTVUKLQlib29sCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCiBjb25maWcgWk9ORV9ETUEKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiA2NEJJVAogCiBjb25maWcgTE9DS0RFUF9TVVBQT1JUCi0JYm9vbAotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkKIAogY29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVAotCWJvb2wKLQlkZWZhdWx0IHkKKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCiAJYm9vbAogCiBjb25maWcgUldTRU1fWENIR0FERF9BTEdPUklUSE0KLQlib29sCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCiBjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCiAJYm9vbApAQCAtMzUsOCArMzEsNyBAQAogCWRlZmF1bHQgbgogCiBjb25maWcgR0VORVJJQ19IV0VJR0hUCi0JYm9vbAotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkKIAogY29uZmlnIEdFTkVSSUNfVElNRQogCWRlZl9ib29sIHkKQEAgLTU1LDggKzUwLDcgQEAKIG1haW5tZW51ICJMaW51eCBLZXJuZWwgQ29uZmlndXJhdGlvbiIKIAogY29uZmlnIFMzOTAKLQlib29sCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIApAQCAtMjgwLDYgKzI3NCwxMCBAQAogY29uZmlnIEFSQ0hfUE9QVUxBVEVTX05PREVfTUFQCiAJZGVmX2Jvb2wgeQogCitjb21tZW50ICJLZXJuZWwgcHJlZW1wdGlvbiIKKworc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0IgorCiBzb3VyY2UgIm1tL0tjb25maWciCiAKIGNvbmZpZyBIT0xFU19JTl9aT05FCkBAIC0zMjAsMTcgKzMxOCw2IEBACiAKIGNvbW1lbnQgIk1pc2MiCiAKLWNvbmZpZyBQUkVFTVBUCi0JYm9vbCAiUHJlZW1wdGlibGUgS2VybmVsIgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHJlZHVjZXMgdGhlIGxhdGVuY3kgb2YgdGhlIGtlcm5lbCB3aGVuIHJlYWN0aW5nIHRvCi0JICByZWFsLXRpbWUgb3IgaW50ZXJhY3RpdmUgZXZlbnRzIGJ5IGFsbG93aW5nIGEgbG93IHByaW9yaXR5IHByb2Nlc3MgdG8KLQkgIGJlIHByZWVtcHRlZCBldmVuIGlmIGl0IGlzIGluIGtlcm5lbCBtb2RlIGV4ZWN1dGluZyBhIHN5c3RlbSBjYWxsLgotCSAgVGhpcyBhbGxvd3MgYXBwbGljYXRpb25zIHRvIHJ1biBtb3JlIHJlbGlhYmx5IGV2ZW4gd2hlbiB0aGUgc3lzdGVtIGlzCi0JICB1bmRlciBsb2FkLgotCi0JICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KLQogY29uZmlnIElQTAogCWJvb2wgIkJ1aWx0aW4gSVBMIHJlY29yZCBzdXBwb3J0IgogCWhlbHAKQEAgLTQ4OCw2ICs0NzUsOCBAQAogCSAgVGhpcyBjYW4gYWxzbyBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSwgd2hpY2ggd2lsbCBiZSBjYWxsZWQKIAkgIGFwcGxkYXRhX25ldF9zdW0uby4KIAorc291cmNlIGtlcm5lbC9LY29uZmlnLmh6CisKIGNvbmZpZyBOT19JRExFX0haCiAJYm9vbCAiTm8gSFogdGltZXIgdGlja3MgaW4gaWRsZSIKIAloZWxwCkBAIC01MzUsMTggKzUyNCwxMiBAQAogc291cmNlICJuZXQvS2NvbmZpZyIKIAogY29uZmlnIFBDTUNJQQotCWJvb2wKLQlkZWZhdWx0IG4KKwlkZWZfYm9vbCBuCiAKLXNvdXJjZSAiZHJpdmVycy9iYXNlL0tjb25maWciCitjb25maWcgQ0NXCisJZGVmX2Jvb2wgeQogCi1zb3VyY2UgImRyaXZlcnMvY29ubmVjdG9yL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9zY3NpL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9zMzkwL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9uZXQvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9LY29uZmlnIgogCiBzb3VyY2UgImZzL0tjb25maWciCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCmluZGV4IGVlODliMzMuLjgxYTJiOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMKKysrIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYwpAQCAtNTY3LDkgKzU2NywxMSBAQAogewogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CiAJCWFwcGxkYXRhX29ubGluZV9jcHUoKGxvbmcpIGhjcHUpOwogCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQlhcHBsZGF0YV9vZmZsaW5lX2NwdSgobG9uZykgaGNwdSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL0tjb25maWcgYi9hcmNoL3MzOTAvY3J5cHRvL0tjb25maWcKaW5kZXggOTlmZjlmMC4uZDFkZWZiYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vS2NvbmZpZwpAQCAtNTQsNyArNTQsNyBAQAogCWRlZmF1bHQgIm0iCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgczM5MCBwc2V1ZG8gcmFuZG9tIG51bWJlcgotCSAgZ2VuZXJhdG9yLiBUaGUgUFJORyBpcyBwYXJ0IG9mIHRoZSBjcnlwdG9ncmFoaWMgcHJvY2Vzc29yIGZ1bmN0aW9ucworCSAgZ2VuZXJhdG9yLiBUaGUgUFJORyBpcyBwYXJ0IG9mIHRoZSBjcnlwdG9ncmFwaGljIHByb2Nlc3NvciBmdW5jdGlvbnMKIAkgIGFuZCB1c2VzIHRyaXBsZS1ERVMgdG8gZ2VuZXJhdGUgc2VjdXJlIHJhbmRvbSBudW1iZXJzIGxpa2UgdGhlCiAJICBBTlNJIFg5LjE3IHN0YW5kYXJkLiBUaGUgUFJORyBpcyB1c2FibGUgdmlhIHRoZSBjaGFyIGRldmljZQogCSAgL2Rldi9wcmFuZG9tLgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2RlZmNvbmZpZyBiL2FyY2gvczM5MC9kZWZjb25maWcKaW5kZXggMGU0ZGE4YS4uNDg1YjYwYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIxLXJjMQotIyBXZWQgRmViIDIxIDEwOjQ0OjMwIDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMQorIyBUaHUgTWF5IDEwIDE1OjE4OjE5IDIwMDcKICMKIENPTkZJR19NTVU9eQogQ09ORklHX1pPTkVfRE1BPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19OT19JT01FTT15CitDT05GSUdfTk9fRE1BPXkKIENPTkZJR19TMzkwPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTQxLDkgKzQyLDExIEBACiAjIENPTkZJR19BVURJVFNZU0NBTEwgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CkBAIC02MCwxMiArNjMsMTQgQEAKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMTI4LDYgKzEzMywxNCBAQAogQ09ORklHX1NUQUNLX0dVQVJEPTI1NgogIyBDT05GSUdfV0FSTl9TVEFDSyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorCisjCisjIEtlcm5lbCBwcmVlbXB0aW9uCisjCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX1BSRUVNUFRfQktMPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTE1MCw3ICsxNjMsNiBAQAogIwogIyBNaXNjCiAjCi1DT05GSUdfUFJFRU1QVD15CiBDT05GSUdfSVBMPXkKICMgQ09ORklHX0lQTF9UQVBFIGlzIG5vdCBzZXQKIENPTkZJR19JUExfVk09eQpAQCAtMTYzLDYgKzE3NSwxMSBAQAogQ09ORklHX1ZJUlRfVElNRVI9eQogQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogIyBDT05GSUdfQVBQTERBVEFfQkFTRSBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCiBDT05GSUdfTk9fSURMRV9IWj15CiBDT05GSUdfTk9fSURMRV9IWl9JTklUPXkKIENPTkZJR19TMzkwX0hZUEZTX0ZTPXkKQEAgLTE3Nyw3ICsxOTQsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjE2LDYgKzIzMiw3IEBACiBDT05GSUdfSVBWNj15CiAjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldApAQCAtMjQwLDcgKzI1NywxMiBAQAogIwogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CiAKICMKICMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCkBAIC0yNjMsOSArMjg1LDYgQEAKICMKIENPTkZJR19ORVRfU0NIRUQ9eQogQ09ORklHX05FVF9TQ0hfRklGTz15Ci1DT05GSUdfTkVUX1NDSF9DTEtfSklGRklFUz15Ci0jIENPTkZJR19ORVRfU0NIX0NMS19HRVRUSU1FT0ZEQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSF9DTEtfQ1BVIGlzIG5vdCBzZXQKIAogIwogIyBRdWV1ZWluZy9TY2hlZHVsaW5nCkBAIC0zMDgsMTEgKzMyNywxNCBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDTUNJQSBpcyBub3Qgc2V0CitDT05GSUdfQ0NXPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIwogCiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKQEAgLTMzMCw2ICszNTIsMzcgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiAKICMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBTLzM5MCBibG9jayBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0JMS19ERVZfWFBSQU09bQorIyBDT05GSUdfRENTU0JMSyBpcyBub3Qgc2V0CitDT05GSUdfREFTRD15CitDT05GSUdfREFTRF9QUk9GSUxFPXkKK0NPTkZJR19EQVNEX0VDS0Q9eQorQ09ORklHX0RBU0RfRkJBPXkKK0NPTkZJR19EQVNEX0RJQUc9eQorQ09ORklHX0RBU0RfRUVSPXkKKworIworIyBNaXNjIGRldmljZXMKKyMKKyMgQ09ORklHX0JMSU5LIGlzIG5vdCBzZXQKKworIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKQEAgLTM1Niw2ICs0MDksNyBAQAogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQogQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtMzcyLDM0ICs0MjYsNiBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1pGQ1A9eQotQ09ORklHX0NDVz15Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9bQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX05CRD1tCi1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBTLzM5MCBibG9jayBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX0JMS19ERVZfWFBSQU09bQotIyBDT05GSUdfRENTU0JMSyBpcyBub3Qgc2V0Ci1DT05GSUdfREFTRD15Ci1DT05GSUdfREFTRF9QUk9GSUxFPXkKLUNPTkZJR19EQVNEX0VDS0Q9eQotQ09ORklHX0RBU0RfRkJBPXkKLUNPTkZJR19EQVNEX0RJQUc9eQotQ09ORklHX0RBU0RfRUVSPXkKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTQyMSw1NiArNDQ3LDcgQEAKIENPTkZJR19ETV9aRVJPPXkKIENPTkZJR19ETV9NVUxUSVBBVEg9eQogIyBDT05GSUdfRE1fTVVMVElQQVRIX0VNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX1VOSVg5OF9QVFlfQ09VTlQ9MjA0OAotIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFMvMzkwIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX1ROMzI3MD15Ci1DT05GSUdfVE4zMjcwX1RUWT15Ci1DT05GSUdfVE4zMjcwX0ZTPW0KLUNPTkZJR19UTjMyNzBfQ09OU09MRT15Ci1DT05GSUdfVE4zMjE1PXkKLUNPTkZJR19UTjMyMTVfQ09OU09MRT15Ci1DT05GSUdfQ0NXX0NPTlNPTEU9eQotQ09ORklHX1NDTFBfVFRZPXkKLUNPTkZJR19TQ0xQX0NPTlNPTEU9eQotQ09ORklHX1NDTFBfVlQyMjBfVFRZPXkKLUNPTkZJR19TQ0xQX1ZUMjIwX0NPTlNPTEU9eQotQ09ORklHX1NDTFBfQ1BJPW0KLUNPTkZJR19TMzkwX1RBUEU9bQotCi0jCi0jIFMvMzkwIHRhcGUgaW50ZXJmYWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TMzkwX1RBUEVfQkxPQ0s9eQotCi0jCi0jIFMvMzkwIHRhcGUgaGFyZHdhcmUgc3VwcG9ydAotIwotQ09ORklHX1MzOTBfVEFQRV8zNFhYPW0KLSMgQ09ORklHX1MzOTBfVEFQRV8zNTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNTE9HUkRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTU9OUkVBREVSIGlzIG5vdCBzZXQKLUNPTkZJR19NT05XUklURVI9bQotCi0jCi0jIENyeXB0b2dyYXBoaWMgZGV2aWNlcwotIwotQ09ORklHX1pDUllQVD1tCi0jIENPTkZJR19aQ1JZUFRfTU9OT0xJVEhJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNDgyLDEwICs0NTksNiBAQAogQ09ORklHX1RVTj1tCiAKICMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTQ5OCw2ICs0NzEsNyBAQAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKK0NPTkZJR19NTFg0X0RFQlVHPXkKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTUwNSwxMSArNDc5LDYgQEAKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKICMgV2FuIGludGVyZmFjZXMKICMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CkBAIC01MzcsNiArNTA2LDU2IEBACiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKIAogIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT1tCisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CitDT05GSUdfUkFXX0RSSVZFUj1tCitDT05GSUdfTUFYX1JBV19ERVZTPTI1NgorIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKKworIworIyBTLzM5MCBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19UTjMyNzA9eQorQ09ORklHX1ROMzI3MF9UVFk9eQorQ09ORklHX1ROMzI3MF9GUz1tCitDT05GSUdfVE4zMjcwX0NPTlNPTEU9eQorQ09ORklHX1ROMzIxNT15CitDT05GSUdfVE4zMjE1X0NPTlNPTEU9eQorQ09ORklHX0NDV19DT05TT0xFPXkKK0NPTkZJR19TQ0xQPXkKK0NPTkZJR19TQ0xQX1RUWT15CitDT05GSUdfU0NMUF9DT05TT0xFPXkKK0NPTkZJR19TQ0xQX1ZUMjIwX1RUWT15CitDT05GSUdfU0NMUF9WVDIyMF9DT05TT0xFPXkKK0NPTkZJR19TQ0xQX0NQST1tCitDT05GSUdfUzM5MF9UQVBFPW0KKworIworIyBTLzM5MCB0YXBlIGludGVyZmFjZSBzdXBwb3J0CisjCitDT05GSUdfUzM5MF9UQVBFX0JMT0NLPXkKKworIworIyBTLzM5MCB0YXBlIGhhcmR3YXJlIHN1cHBvcnQKKyMKK0NPTkZJR19TMzkwX1RBUEVfMzRYWD1tCisjIENPTkZJR19TMzkwX1RBUEVfMzU5MCBpcyBub3Qgc2V0CisjIENPTkZJR19WTUxPR1JEUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTlJFQURFUiBpcyBub3Qgc2V0CitDT05GSUdfTU9OV1JJVEVSPW0KKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTYyOCw2ICs2NDcsNyBAQAogQ09ORklHX0VYUE9SVEZTPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtNjU4LDYgKzY3OCw3IEBACiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogCiAjCiAjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CkBAIC02NjgsOCArNjg5LDYgQEAKICMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCiAjCiBDT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTY5Myw3ICs3MTIsNiBAQAogQ09ORklHX0RFQlVHX0ZTPXkKIENPTkZJR19IRUFERVJTX0NIRUNLPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CkBAIC03MjksMTIgKzc0NywxMyBAQAogQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSE1BQz1tCiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9bQogIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKQEAgLTc0NSw2ICs3NjQsNyBAQAogQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRkNSWVBUPW0KICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CkBAIC03NzEsNiArNzkxLDggQEAKICMgQ09ORklHX0NSWVBUT19ERVNfUzM5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQUVTX1MzOTAgaXMgbm90IHNldAogQ09ORklHX1MzOTBfUFJORz1tCitDT05GSUdfWkNSWVBUPW0KKyMgQ09ORklHX1pDUllQVF9NT05PTElUSElDIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwppbmRleCAyNzgyY2Y5Li5iOWExY2UxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKQEAgLTQ4MSw5ICs0ODEsMTcgQEAKIAogLyogRGlhZ25vc2UgMjI0IGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgdm9pZCBkaWFnMjI0KHZvaWQgKnB0cikKK3N0YXRpYyBpbnQgZGlhZzIyNCh2b2lkICpwdHIpCiB7Ci0JYXNtIHZvbGF0aWxlKCJkaWFnICUwLCUxLDB4MjI0IiA6IDoiZCIgKDApLCAiZCIocHRyKSA6ICJtZW1vcnkiKTsKKwlpbnQgcmMgPSAtRU5PVFNVUFA7CisKKwlhc20gdm9sYXRpbGUoCisJCSIJZGlhZwklMSwlMiwweDIyNFxuIgorCQkiMDoJbGhpCSUwLDB4MFxuIgorCQkiMTpcbiIKKwkJRVhfVEFCTEUoMGIsMWIpCisJCTogIitkIiAocmMpIDoiZCIgKDApLCAiZCIgKHB0cikgOiAibWVtb3J5Iik7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGRpYWcyMjRfZ2V0X25hbWVfdGFibGUodm9pZCkKQEAgLTQ5Miw3ICs1MDAsMTAgQEAKIAlkaWFnMjI0X2NwdV9uYW1lcyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFkaWFnMjI0X2NwdV9uYW1lcykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZGlhZzIyNChkaWFnMjI0X2NwdV9uYW1lcyk7CisJaWYgKGRpYWcyMjQoZGlhZzIyNF9jcHVfbmFtZXMpKSB7CisJCWtmcmVlKGRpYWcyMjRfY3B1X25hbWVzKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CiAJRUJDQVNDKGRpYWcyMjRfY3B1X25hbWVzICsgMTYsICgqZGlhZzIyNF9jcHVfbmFtZXMgKyAxKSAqIDE2KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jIGIvYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMKaW5kZXggYmE1ZDMxNi4uOGUxZWExYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCQkJZ290byBmYWlsX2RpYWc7CiAJCX0KIAl9Ci0Ja3NldF9zZXRfa3NldF9zKCZzMzkwX3N1YnN5cywgaHlwZXJ2aXNvcl9zdWJzeXMpOworCWtvYmpfc2V0X2tzZXRfcygmczM5MF9zdWJzeXMsIGh5cGVydmlzb3Jfc3Vic3lzKTsKIAlyYyA9IHN1YnN5c3RlbV9yZWdpc3RlcigmczM5MF9zdWJzeXMpOwogCWlmIChyYykKIAkJZ290byBmYWlsX3N5c2ZzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGVjNTE0ZmUuLjEzNzVmOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAogaW50IG1haW4odm9pZCkKIHsKLQlERUZJTkUoX19USFJFQURfaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mbyksKTsKKwlERUZJTkUoX19USFJFQURfaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjayksKTsKIAlERUZJTkUoX19USFJFQURfa3NwLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5rc3ApLCk7CiAJREVGSU5FKF9fVEhSRUFEX3Blciwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQucGVyX2luZm8pLCk7CiAJREVGSU5FKF9fVEhSRUFEX21tX3NlZ21lbnQsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2F1ZGl0LmMgYi9hcmNoL3MzOTAva2VybmVsL2F1ZGl0LmMKaW5kZXggMDc0MWQ5MS4uZDFjNzZmZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9hdWRpdC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvYXVkaXQuYwpAQCAtMjMsNiArMjMsMjAgQEAKIH4wVQogfTsKIAorc3RhdGljIHVuc2lnbmVkIHNpZ25hbF9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3NpZ25hbC5oPgorfjBVCit9OworCitpbnQgYXVkaXRfY2xhc3NpZnlfYXJjaChpbnQgYXJjaCkKK3sKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJaWYgKGFyY2ggPT0gQVVESVRfQVJDSF9TMzkwKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCiBpbnQgYXVkaXRfY2xhc3NpZnlfc3lzY2FsbChpbnQgYWJpLCB1bnNpZ25lZCBzeXNjYWxsKQogewogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTUxLDE1ICs2NSwxOCBAQAogCWV4dGVybiBfX3UzMiBzMzkwX3dyaXRlX2NsYXNzW107CiAJZXh0ZXJuIF9fdTMyIHMzOTBfcmVhZF9jbGFzc1tdOwogCWV4dGVybiBfX3UzMiBzMzkwX2NoYXR0cl9jbGFzc1tdOworCWV4dGVybiBfX3UzMiBzMzkwX3NpZ25hbF9jbGFzc1tdOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1dSSVRFXzMyLCBzMzkwX3dyaXRlX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19SRUFEXzMyLCBzMzkwX3JlYWRfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0RJUl9XUklURV8zMiwgczM5MF9kaXJfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0NIQVRUUl8zMiwgczM5MF9jaGF0dHJfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1NJR05BTF8zMiwgczM5MF9zaWduYWxfY2xhc3MpOwogI2VuZGlmCiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfV1JJVEUsIHdyaXRlX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19SRUFELCByZWFkX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEUsIGRpcl9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfQ0hBVFRSLCBjaGF0dHJfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1NJR05BTCwgc2lnbmFsX2NsYXNzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfYXVkaXQuYyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2F1ZGl0LmMKaW5kZXggMTZkOTQzNi4uMDU2OWY1MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfYXVkaXQuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9hdWRpdC5jCkBAIC0yMSw2ICsyMSwxMSBAQAogfjBVCiB9OwogCit1bnNpZ25lZCBzMzkwX3NpZ25hbF9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3NpZ25hbC5oPgorfjBVCit9OworCiBpbnQgczM5MF9jbGFzc2lmeV9zeXNjYWxsKHVuc2lnbmVkIHN5c2NhbGwpCiB7CiAJc3dpdGNoKHN5c2NhbGwpIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKaW5kZXggODBhNTRhMC4uYTU2OTJjNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCmluZGV4IDMyYTY5YTEuLmFjYzQxNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKQEAgLTE2ODIsMyArMTY4MiwzMSBAQAogCWxsZ3RyCSVyMiwlcjIJCQkjIGNoYXIgKgogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCBjb21wYXRfdGltZXZhbCAqCiAJamcJY29tcGF0X3N5c191dGltZXMKKworCS5nbG9ibAljb21wYXRfc3lzX3V0aW1lbnNhdF93cmFwcGVyCitjb21wYXRfc3lzX3V0aW1lbnNhdF93cmFwcGVyOgorCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAorCWxsZ3RyCSVyMywlcjMJCQkjIGNoYXIgKgorCWxsZ3RyCSVyNCwlcjQJCQkjIHN0cnVjdCBjb21wYXRfdGltZXNwZWMgKgorCWxnZnIJJXI1LCVyNQkJCSMgaW50CisJamcJY29tcGF0X3N5c191dGltZW5zYXQKKworCS5nbG9ibAljb21wYXRfc3lzX3NpZ25hbGZkX3dyYXBwZXIKK2NvbXBhdF9zeXNfc2lnbmFsZmRfd3JhcHBlcjoKKwlsZ2ZyCSVyMiwlcjIJCQkjIGludAorCWxsZ3RyCSVyMywlcjMJCQkjIGNvbXBhdF9zaWdzZXRfdCAqCisJbGxnZnIJJXI0LCVyNAkJCSMgY29tcGF0X3NpemVfdAorCWpnCWNvbXBhdF9zeXNfc2lnbmFsZmQKKworCS5nbG9ibAljb21wYXRfc3lzX3RpbWVyZmRfd3JhcHBlcgorY29tcGF0X3N5c190aW1lcmZkX3dyYXBwZXI6CisJbGdmcgklcjIsJXIyCQkJIyBpbnQKKwlsZ2ZyCSVyMywlcjMJCQkjIGludAorCWxnZnIJJXI0LCVyNAkJCSMgaW50CisJbGxndHIJJXI1LCVyNQkJCSMgc3RydWN0IGNvbXBhdF9pdGltZXJzcGVjICoKKwlqZwljb21wYXRfc3lzX3RpbWVyZmQKKworCS5nbG9ibAlzeXNfZXZlbnRmZF93cmFwcGVyCitzeXNfZXZlbnRmZF93cmFwcGVyOgorCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAorCWpnCXN5c19ldmVudGZkCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKaW5kZXggZGNhNmVhZi4uMWIyZjVjZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAKIHN0YXRpYyBkZWJ1Z19pbmZvX3QgKmRlYnVnX2FyZWFfZmlyc3QgPSBOVUxMOwogc3RhdGljIGRlYnVnX2luZm9fdCAqZGVidWdfYXJlYV9sYXN0ID0gTlVMTDsKLXN0YXRpYyBERUNMQVJFX01VVEVYKGRlYnVnX2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChkZWJ1Z19tdXRleCk7CiAKIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CiAKQEAgLTU3Niw3ICs1NzYsNyBAQAogCWludCByYyA9IDA7CiAJZmlsZV9wcml2YXRlX2luZm9fdCAqcF9pbmZvOwogCi0JZG93bigmZGVidWdfbG9jayk7CisJbXV0ZXhfbG9jaygmZGVidWdfbXV0ZXgpOwogCXBfaW5mbyA9ICgoZmlsZV9wcml2YXRlX2luZm9fdCAqKSBmaWxlLT5wcml2YXRlX2RhdGEpOwogCWlmIChwX2luZm8tPnZpZXctPmlucHV0X3Byb2MpCiAJCXJjID0gcF9pbmZvLT52aWV3LT5pbnB1dF9wcm9jKHBfaW5mby0+ZGVidWdfaW5mb19vcmcsCkBAIC01ODQsNyArNTg0LDcgQEAKIAkJCQkJICAgICAgbGVuZ3RoLCBvZmZzZXQpOwogCWVsc2UKIAkJcmMgPSAtRVBFUk07Ci0JdXAoJmRlYnVnX2xvY2spOworCW11dGV4X3VubG9jaygmZGVidWdfbXV0ZXgpOwogCXJldHVybiByYzsJCS8qIG51bWJlciBvZiBpbnB1dCBjaGFyYWN0ZXJzICovCiB9CiAKQEAgLTYwMiw3ICs2MDIsNyBAQAogCWZpbGVfcHJpdmF0ZV9pbmZvX3QgKnBfaW5mbzsKIAlkZWJ1Z19pbmZvX3QgKmRlYnVnX2luZm8sICpkZWJ1Z19pbmZvX3NuYXBzaG90OwogCi0JZG93bigmZGVidWdfbG9jayk7CisJbXV0ZXhfbG9jaygmZGVidWdfbXV0ZXgpOwogCWRlYnVnX2luZm8gPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CiAJLyogZmluZCBkZWJ1ZyB2aWV3ICovCiAJZm9yIChpID0gMDsgaSA8IERFQlVHX01BWF9WSUVXUzsgaSsrKSB7CkBAIC02NTMsNyArNjUzLDcgQEAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwX2luZm87CiAJZGVidWdfaW5mb19nZXQoZGVidWdfaW5mbyk7CiBvdXQ6Ci0JdXAoJmRlYnVnX2xvY2spOworCW11dGV4X3VubG9jaygmZGVidWdfbXV0ZXgpOwogCXJldHVybiByYzsKIH0KIApAQCAtNjg4LDcgKzY4OCw3IEBACiAKIAlpZiAoIWluaXRpYWxpemVkKQogCQlCVUcoKTsKLQlkb3duKCZkZWJ1Z19sb2NrKTsKKwltdXRleF9sb2NrKCZkZWJ1Z19tdXRleCk7CiAKICAgICAgICAgLyogY3JlYXRlIG5ldyBkZWJ1Z19pbmZvICovCiAKQEAgLTcwMiw3ICs3MDIsNyBAQAogICAgICAgICBpZiAoIXJjKXsKIAkJcHJpbnRrKEtFUk5fRVJSICJkZWJ1ZzogZGVidWdfcmVnaXN0ZXIgZmFpbGVkIGZvciAlc1xuIixuYW1lKTsKICAgICAgICAgfQotCXVwKCZkZWJ1Z19sb2NrKTsKKwltdXRleF91bmxvY2soJmRlYnVnX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTcxNiw5ICs3MTYsOSBAQAogewogCWlmICghaWQpCiAJCWdvdG8gb3V0OwotCWRvd24oJmRlYnVnX2xvY2spOworCW11dGV4X2xvY2soJmRlYnVnX211dGV4KTsKIAlkZWJ1Z19pbmZvX3B1dChpZCk7Ci0JdXAoJmRlYnVnX2xvY2spOworCW11dGV4X3VubG9jaygmZGVidWdfbXV0ZXgpOwogCiBvdXQ6CiAJcmV0dXJuOwpAQCAtMTA1NCwxMSArMTA1NCwxMSBAQAogCWludCByYyA9IDA7CiAKIAlzMzkwZGJmX3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoczM5MGRiZl9kaXJfdGFibGUpOwotCWRvd24oJmRlYnVnX2xvY2spOworCW11dGV4X2xvY2soJmRlYnVnX211dGV4KTsKIAlkZWJ1Z19kZWJ1Z2ZzX3Jvb3RfZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoREVCVUdfRElSX1JPT1QsTlVMTCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiZGVidWc6IEluaXRpYWxpemF0aW9uIGNvbXBsZXRlXG4iKTsKIAlpbml0aWFsaXplZCA9IDE7Ci0JdXAoJmRlYnVnX2xvY2spOworCW11dGV4X3VubG9jaygmZGVidWdfbXV0ZXgpOwogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYyBiL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMKaW5kZXggZGFiYWY5OC4uYTA1N2ViZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Rpcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTMzLDcgKzM0LDYgQEAKICNpbmNsdWRlIDxhc20vczM5MF9leHQuaD4KICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KIAogI2lmbmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgT05FTE9ORyAiJTA4bHg6ICIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IDBlYTA0OGQuLjM2N2NhZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwpAQCAtODE2LDIzICs4MTYsMjMgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaXBsX3N1YnN5cy5rc2V0LmtvYmosCisJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmlwbF9zdWJzeXMua29iaiwKIAkJCQkmaXBsX2ZjcF9hdHRyX2dyb3VwKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwotCXJjID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZpcGxfc3Vic3lzLmtzZXQua29iaiwKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaXBsX3N1YnN5cy5rb2JqLAogCQkJCSAgICZpcGxfcGFyYW1ldGVyX2F0dHIpOwogCWlmIChyYykKIAkJZ290byBvdXRfaXBsX3Bhcm07Ci0JcmMgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmlwbF9zdWJzeXMua3NldC5rb2JqLAorCXJjID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZpcGxfc3Vic3lzLmtvYmosCiAJCQkJICAgJmlwbF9zY3BfZGF0YV9hdHRyKTsKIAlpZiAoIXJjKQogCQlnb3RvIG91dDsKIAotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaXBsX3N1YnN5cy5rc2V0LmtvYmosICZpcGxfcGFyYW1ldGVyX2F0dHIpOworCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaXBsX3N1YnN5cy5rb2JqLCAmaXBsX3BhcmFtZXRlcl9hdHRyKTsKIAogb3V0X2lwbF9wYXJtOgotCXN5c2ZzX3JlbW92ZV9ncm91cCgmaXBsX3N1YnN5cy5rc2V0LmtvYmosICZpcGxfZmNwX2F0dHJfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmaXBsX3N1YnN5cy5rb2JqLCAmaXBsX2ZjcF9hdHRyX2dyb3VwKTsKIG91dDoKIAlyZXR1cm4gcmM7CiB9CkBAIC04NDYsNyArODQ2LDcgQEAKIAkJcmV0dXJuIHJjOwogCXN3aXRjaCAoaXBsX2luZm8udHlwZSkgewogCWNhc2UgSVBMX1RZUEVfQ0NXOgotCQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaXBsX3N1YnN5cy5rc2V0LmtvYmosCisJCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpcGxfc3Vic3lzLmtvYmosCiAJCQkJCSZpcGxfY2N3X2F0dHJfZ3JvdXApOwogCQlicmVhazsKIAljYXNlIElQTF9UWVBFX0ZDUDoKQEAgLTg1NCwxMSArODU0LDExIEBACiAJCXJjID0gaXBsX3JlZ2lzdGVyX2ZjcF9maWxlcygpOwogCQlicmVhazsKIAljYXNlIElQTF9UWVBFX05TUzoKLQkJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmlwbF9zdWJzeXMua3NldC5rb2JqLAorCQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaXBsX3N1YnN5cy5rb2JqLAogCQkJCQkmaXBsX25zc19hdHRyX2dyb3VwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmlwbF9zdWJzeXMua3NldC5rb2JqLAorCQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaXBsX3N1YnN5cy5rb2JqLAogCQkJCQkmaXBsX3Vua25vd25fYXR0cl9ncm91cCk7CiAJCWJyZWFrOwogCX0KQEAgLTg4NSw3ICs4ODUsNyBAQAogCiAJaWYgKCFNQUNISU5FX0lTX1ZNKQogCQlyZXR1cm4gMDsKLQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcmVpcGxfc3Vic3lzLmtzZXQua29iaiwgJnJlaXBsX25zc19hdHRyX2dyb3VwKTsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcmVpcGxfc3Vic3lzLmtvYmosICZyZWlwbF9uc3NfYXR0cl9ncm91cCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAJc3RybmNweShyZWlwbF9uc3NfbmFtZSwga2VybmVsX25zc19uYW1lLCBOU1NfTkFNRV9TSVpFICsgMSk7CkBAIC05MDAsNyArOTAwLDcgQEAKIAlyZWlwbF9ibG9ja19jY3cgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZWlwbF9ibG9ja19jY3cpCiAJCXJldHVybiAtRU5PTUVNOwotCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZyZWlwbF9zdWJzeXMua3NldC5rb2JqLCAmcmVpcGxfY2N3X2F0dHJfZ3JvdXApOworCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZyZWlwbF9zdWJzeXMua29iaiwgJnJlaXBsX2Njd19hdHRyX2dyb3VwKTsKIAlpZiAocmMpIHsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXJlaXBsX2Jsb2NrX2Njdyk7CiAJCXJldHVybiByYzsKQEAgLTkzOCw3ICs5MzgsNyBAQAogCXJlaXBsX2Jsb2NrX2ZjcCA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXJlaXBsX2Jsb2NrX2ZjcCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnJlaXBsX3N1YnN5cy5rc2V0LmtvYmosICZyZWlwbF9mY3BfYXR0cl9ncm91cCk7CisJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnJlaXBsX3N1YnN5cy5rb2JqLCAmcmVpcGxfZmNwX2F0dHJfZ3JvdXApOwogCWlmIChyYykgewogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcmVpcGxfYmxvY2tfZmNwKTsKIAkJcmV0dXJuIHJjOwpAQCAtOTkwLDcgKzk5MCw3IEBACiAJZHVtcF9ibG9ja19jY3cgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFkdW1wX2Jsb2NrX2NjdykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmR1bXBfc3Vic3lzLmtzZXQua29iaiwgJmR1bXBfY2N3X2F0dHJfZ3JvdXApOworCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkdW1wX3N1YnN5cy5rb2JqLCAmZHVtcF9jY3dfYXR0cl9ncm91cCk7CiAJaWYgKHJjKSB7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkdW1wX2Jsb2NrX2Njdyk7CiAJCXJldHVybiByYzsKQEAgLTEwMTQsNyArMTAxNCw3IEBACiAJZHVtcF9ibG9ja19mY3AgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFkdW1wX2Jsb2NrX2ZjcCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmR1bXBfc3Vic3lzLmtzZXQua29iaiwgJmR1bXBfZmNwX2F0dHJfZ3JvdXApOworCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkdW1wX3N1YnN5cy5rb2JqLCAmZHVtcF9mY3BfYXR0cl9ncm91cCk7CiAJaWYgKHJjKSB7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkdW1wX2Jsb2NrX2ZjcCk7CiAJCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMjNjNjFmNi4uMzU4ZDJiYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTI0LDggKzI0LDggQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI3MSwyMyArMjcxLDEzIEBACiB9CiAKIC8qIENhbGxlZCB3aXRoIGtyZXRwcm9iZV9sb2NrIGhlbGQgKi8KLXZvaWQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZSAqcnAsCit2b2lkIF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3JldHByb2JlKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAogCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaTsKKwlyaS0+cmV0X2FkZHIgPSAoa3Byb2JlX29wY29kZV90ICopIHJlZ3MtPmdwcnNbMTRdOwogCi0JaWYgKChyaSA9IGdldF9mcmVlX3JwX2luc3QocnApKSAhPSBOVUxMKSB7Ci0JCXJpLT5ycCA9IHJwOwotCQlyaS0+dGFzayA9IGN1cnJlbnQ7Ci0JCXJpLT5yZXRfYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgcmVncy0+Z3Byc1sxNF07Ci0KLQkJLyogUmVwbGFjZSB0aGUgcmV0dXJuIGFkZHIgd2l0aCB0cmFtcG9saW5lIGFkZHIgKi8KLQkJcmVncy0+Z3Byc1sxNF0gPSAodW5zaWduZWQgbG9uZykma3JldHByb2JlX3RyYW1wb2xpbmU7Ci0KLQkJYWRkX3JwX2luc3QocmkpOwotCX0gZWxzZSB7Ci0JCXJwLT5ubWlzc2VkKys7Ci0JfQorCS8qIFJlcGxhY2UgdGhlIHJldHVybiBhZGRyIHdpdGggdHJhbXBvbGluZSBhZGRyICovCisJcmVncy0+Z3Byc1sxNF0gPSAodW5zaWduZWQgbG9uZykma3JldHByb2JlX3RyYW1wb2xpbmU7CiB9CiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIGtwcm9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtNDIzLDcgKzQxMyw3IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlCVUdfT04oIW9yaWdfcmV0X2FkZHJlc3MgfHwgKG9yaWdfcmV0X2FkZHJlc3MgPT0gdHJhbXBvbGluZV9hZGRyZXNzKSk7CisJa3JldHByb2JlX2Fzc2VydChyaSwgb3JpZ19yZXRfYWRkcmVzcywgdHJhbXBvbGluZV9hZGRyZXNzKTsKIAlyZWdzLT5wc3cuYWRkciA9IG9yaWdfcmV0X2FkZHJlc3MgfCBQU1dfQUREUl9BTU9ERTsKIAogCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CkBAIC02NzEsMyArNjYxLDEwIEBACiB7CiAJcmV0dXJuIHJlZ2lzdGVyX2twcm9iZSgmdHJhbXBvbGluZV9wKTsKIH0KKworaW50IF9fa3Byb2JlcyBhcmNoX3RyYW1wb2xpbmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJaWYgKHAtPmFkZHIgPT0gKGtwcm9iZV9vcGNvZGVfdCAqKSAmIGtyZXRwcm9iZV90cmFtcG9saW5lKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMTFkOWIwMS4uZWI0M2MzYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggNmJmYjA4OC4uNTFkNjMwOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAvKgogICogY3B1X2luaXQoKSBpbml0aWFsaXplcyBzdGF0ZSB0aGF0IGlzIHBlci1DUFUuCiAgKi8KLXZvaWQgX19kZXZpbml0IGNwdV9pbml0ICh2b2lkKQordm9pZCBfX2NwdWluaXQgY3B1X2luaXQodm9pZCkKIHsKICAgICAgICAgaW50IGFkZHIgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtOTE1LDcgKzkxNSw3IEBACiAJc2V0dXBfemZjcGR1bXAoY29uc29sZV9kZXZubyk7CiB9CiAKLXZvaWQgcHJpbnRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbykKK3ZvaWQgX19jcHVpbml0IHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX1MzOTAgKmNwdWluZm8pCiB7CiAgICBwcmludGsoImNwdSAlZCAiCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggM2M0MTkwNy4uZDI2NDY3MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IDM3NTRlMjAuLjhmZjJmZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNDkzLDcgKzQ5Miw3IEBACiAvKgogICoJQWN0aXZhdGUgYSBzZWNvbmRhcnkgcHJvY2Vzc29yLgogICovCi1pbnQgX19kZXZpbml0IHN0YXJ0X3NlY29uZGFyeSh2b2lkICpjcHV2b2lkKQoraW50IF9fY3B1aW5pdCBzdGFydF9zZWNvbmRhcnkodm9pZCAqY3B1dm9pZCkKIHsKIAkvKiBTZXR1cCB0aGUgY3B1ICovCiAJY3B1X2luaXQoKTsKQEAgLTc0Miw3ICs3NDEsNyBAQAogCQkJc21wX2NyZWF0ZV9pZGxlKGNwdSk7CiB9CiAKLXZvaWQgX19kZXZpbml0IHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCit2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKQogewogCUJVR19PTihzbXBfcHJvY2Vzc29yX2lkKCkgIT0gMCk7CiAKQEAgLTc1MSw3ICs3NTAsNyBAQAogCWN1cnJlbnRfc2V0WzBdID0gY3VycmVudDsKIH0KIAotdm9pZCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3ZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQogewogCWNwdV9wcmVzZW50X21hcCA9IGNwdV9wb3NzaWJsZV9tYXA7CiB9CkBAIC03OTAsMTAgKzc4OSwxMiBAQAogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKIAkJaWYgKHN5c2Rldl9jcmVhdGVfZmlsZShzLCAmYXR0cl9jYXBhYmlsaXR5KSkKIAkJCXJldHVybiBOT1RJRllfQkFEOwogCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQlzeXNkZXZfcmVtb3ZlX2ZpbGUocywgJmF0dHJfY2FwYWJpbGl0eSk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zdGFja3RyYWNlLmMKaW5kZXggMmU1YzY1YS4uNTE1ZmY5MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAl9CiB9CiAKLXZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit2b2lkIHNhdmVfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKIHsKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHNwIGFzbSAoIjE1Iik7CiAJdW5zaWduZWQgbG9uZyBvcmlnX3NwLCBuZXdfc3A7CkBAIC02OSwyMCArNjksMTYgQEAKIAluZXdfc3AgPSBzYXZlX2NvbnRleHRfc3RhY2sodHJhY2UsICZ0cmFjZS0+c2tpcCwgb3JpZ19zcCwKIAkJCQlTMzkwX2xvd2NvcmUucGFuaWNfc3RhY2sgLSBQQUdFX1NJWkUsCiAJCQkJUzM5MF9sb3djb3JlLnBhbmljX3N0YWNrKTsKLQlpZiAoKG5ld19zcCAhPSBvcmlnX3NwKSAmJiAhdHJhY2UtPmFsbF9jb250ZXh0cykKKwlpZiAobmV3X3NwICE9IG9yaWdfc3ApCiAJCXJldHVybjsKIAluZXdfc3AgPSBzYXZlX2NvbnRleHRfc3RhY2sodHJhY2UsICZ0cmFjZS0+c2tpcCwgbmV3X3NwLAogCQkJCVMzOTBfbG93Y29yZS5hc3luY19zdGFjayAtIEFTWU5DX1NJWkUsCiAJCQkJUzM5MF9sb3djb3JlLmFzeW5jX3N0YWNrKTsKLQlpZiAoKG5ld19zcCAhPSBvcmlnX3NwKSAmJiAhdHJhY2UtPmFsbF9jb250ZXh0cykKKwlpZiAobmV3X3NwICE9IG9yaWdfc3ApCiAJCXJldHVybjsKLQlpZiAodGFzaykKLQkJc2F2ZV9jb250ZXh0X3N0YWNrKHRyYWNlLCAmdHJhY2UtPnNraXAsIG5ld19zcCwKLQkJCQkgICAodW5zaWduZWQgbG9uZykgdGFza19zdGFja19wYWdlKHRhc2spLAotCQkJCSAgICh1bnNpZ25lZCBsb25nKSB0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSk7Ci0JZWxzZQotCQlzYXZlX2NvbnRleHRfc3RhY2sodHJhY2UsICZ0cmFjZS0+c2tpcCwgbmV3X3NwLAotCQkJCSAgIFMzOTBfbG93Y29yZS50aHJlYWRfaW5mbywKLQkJCQkgICBTMzkwX2xvd2NvcmUudGhyZWFkX2luZm8gKyBUSFJFQURfU0laRSk7CisKKwlzYXZlX2NvbnRleHRfc3RhY2sodHJhY2UsICZ0cmFjZS0+c2tpcCwgbmV3X3NwLAorCQkJICAgUzM5MF9sb3djb3JlLnRocmVhZF9pbmZvLAorCQkJICAgUzM5MF9sb3djb3JlLnRocmVhZF9pbmZvICsgVEhSRUFEX1NJWkUpOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3lzX3MzOTAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzX3MzOTAuYwppbmRleCAzYTc3YzIyLi4xYzkwYzdlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N5c19zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNfczM5MC5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAjaW5jbHVkZSA8bGludXgvbXNnLmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMgYi9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKaW5kZXggY2Q4ZDMyMS4uNzM4ZmViNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUwpAQCAtMzIyLDMgKzMyMiw4IEBACiBTWVNDQUxMKHN5c19nZXRjcHUsc3lzX2dldGNwdSxzeXNfZ2V0Y3B1X3dyYXBwZXIpCiBTWVNDQUxMKHN5c19lcG9sbF9wd2FpdCxzeXNfZXBvbGxfcHdhaXQsY29tcGF0X3N5c19lcG9sbF9wd2FpdF93cmFwcGVyKQogU1lTQ0FMTChzeXNfdXRpbWVzLHN5c191dGltZXMsY29tcGF0X3N5c191dGltZXNfd3JhcHBlcikKK05JX1NZU0NBTEwJCQkJCQkJLyogMzE0IHN5c19mYWxsb2NhdGUgKi8KK1NZU0NBTEwoc3lzX3V0aW1lbnNhdCxzeXNfdXRpbWVuc2F0LGNvbXBhdF9zeXNfdXRpbWVuc2F0X3dyYXBwZXIpCS8qIDMxNSAqLworU1lTQ0FMTChzeXNfc2lnbmFsZmQsc3lzX3NpZ25hbGZkLGNvbXBhdF9zeXNfc2lnbmFsZmRfd3JhcHBlcikKK1NZU0NBTEwoc3lzX3RpbWVyZmQsc3lzX3RpbWVyZmQsY29tcGF0X3N5c190aW1lcmZkX3dyYXBwZXIpCitTWVNDQUxMKHN5c19ldmVudGZkLHN5c19ldmVudGZkLHN5c19ldmVudGZkX3dyYXBwZXIpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IDcxMWRhZTguLjljMjg3MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMgYi9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKaW5kZXggNDlkZWM4My4uY2JmZTczMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwpAQCAtMjIsMTEgKzIyLDExIEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSA8YXNtL3MzOTBfZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vZGVidWcuaD4KLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAKIC8qIENhbGxlZCBmcm9tIGVudHJ5LlMgb25seSAqLwogZXh0ZXJuIHZvaWQgaGFuZGxlX3Blcl9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpAQCAtNzAsMjAgKzY5LDYgQEAKIHN0YXRpYyBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gMjA7CiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAKLUFUT01JQ19OT1RJRklFUl9IRUFEKHMzOTBkaWVfY2hhaW4pOwotCi1pbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmczM5MGRpZV9jaGFpbiwgbmIpOwotfQotRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9kaWVfbm90aWZpZXIpOwotCi1pbnQgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnMzOTBkaWVfY2hhaW4sIG5iKTsKLX0KLUVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIpOwotCiAvKgogICogRm9yIHNob3dfdHJhY2Ugd2UgaGF2ZSB0cmVlIGRpZmZlcmVudCBzdGFjayB0byBjb25zaWRlcjoKICAqICAgLSB0aGUgcGFuaWMgc3RhY2sgd2hpY2ggaXMgdXNlZCBpZiB0aGUga2VybmVsIHN0YWNrIGhhcyBvdmVyZmxvd24KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBlOWQzNDMyLi43MTU4YTgwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0yMSw3ICsyMSw3IEBACiAgIC4gPSAweDAwMDAwMDAwOwogICBfdGV4dCA9IC47CQkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KICAgLnRleHQgOiB7Ci0JKigudGV4dCkKKwlURVhUX1RFWFQKIAlTQ0hFRF9URVhUCiAJTE9DS19URVhUCiAJS1BST0JFU19URVhUCkBAIC00OCw3ICs0OCw3IEBACiAgIEJVR19UQUJMRQogCiAgIC5kYXRhIDogewkJCS8qIERhdGEgKi8KLQkqKC5kYXRhKQorCURBVEFfREFUQQogCUNPTlNUUlVDVE9SUwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA5MWY3MDVhLi5kODU1Y2RiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYworKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KQEAgLTMwLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vczM5MF9leHQuaD4KIAogI2lmbmRlZiBDT05GSUdfNjRCSVQKQEAgLTI1Myw3ICsyNTMsMTAgQEAKIAkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKIHsKIAl1MTYgaW5zdHJ1Y3Rpb247Ci0JaW50IHJjLCBjb21wYXQ7CisJaW50IHJjOworI2lmZGVmIENPTkZJR19DT01QQVQKKwlpbnQgY29tcGF0OworI2VuZGlmCiAKIAlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCXJjID0gX19nZXRfdXNlcihpbnN0cnVjdGlvbiwgKHUxNiBfX3VzZXIgKikgcmVncy0+cHN3LmFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggOTE2YjcyYS4uOTA5ODUzMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC02MSwzMCArNjEsMzggQEAKIAogdm9pZCBzaG93X21lbSh2b2lkKQogewotICAgICAgICBpbnQgaSwgdG90YWwgPSAwLCByZXNlcnZlZCA9IDA7Ci0gICAgICAgIGludCBzaGFyZWQgPSAwLCBjYWNoZWQgPSAwOworCWludCBpLCB0b3RhbCA9IDAsIHJlc2VydmVkID0gMDsKKwlpbnQgc2hhcmVkID0gMCwgY2FjaGVkID0gMDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotICAgICAgICBwcmludGsoIk1lbS1pbmZvOlxuIik7Ci0gICAgICAgIHNob3dfZnJlZV9hcmVhcygpOwotICAgICAgICBwcmludGsoIkZyZWUgc3dhcDogICAgICAgJTZsZGtCXG4iLCBucl9zd2FwX3BhZ2VzPDwoUEFHRV9TSElGVC0xMCkpOwotICAgICAgICBpID0gbWF4X21hcG5yOwotICAgICAgICB3aGlsZSAoaS0tID4gMCkgeworCXByaW50aygiTWVtLWluZm86XG4iKTsKKwlzaG93X2ZyZWVfYXJlYXMoKTsKKwlwcmludGsoIkZyZWUgc3dhcDogICAgICAgJTZsZGtCXG4iLCBucl9zd2FwX3BhZ2VzIDw8IChQQUdFX1NISUZUIC0gMTApKTsKKwlpID0gbWF4X21hcG5yOworCXdoaWxlIChpLS0gPiAwKSB7CiAJCWlmICghcGZuX3ZhbGlkKGkpKQogCQkJY29udGludWU7CiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShpKTsKLSAgICAgICAgICAgICAgICB0b3RhbCsrOworCQl0b3RhbCsrOwogCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQrKzsKKwkJCXJlc2VydmVkKys7CiAJCWVsc2UgaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQrKzsKKwkJCWNhY2hlZCsrOwogCQllbHNlIGlmIChwYWdlX2NvdW50KHBhZ2UpKQogCQkJc2hhcmVkICs9IHBhZ2VfY291bnQocGFnZSkgLSAxOwotICAgICAgICB9Ci0gICAgICAgIHByaW50aygiJWQgcGFnZXMgb2YgUkFNXG4iLHRvdGFsKTsKLSAgICAgICAgcHJpbnRrKCIlZCByZXNlcnZlZCBwYWdlc1xuIixyZXNlcnZlZCk7Ci0gICAgICAgIHByaW50aygiJWQgcGFnZXMgc2hhcmVkXG4iLHNoYXJlZCk7Ci0gICAgICAgIHByaW50aygiJWQgcGFnZXMgc3dhcCBjYWNoZWRcbiIsY2FjaGVkKTsKKwl9CisJcHJpbnRrKCIlZCBwYWdlcyBvZiBSQU1cbiIsIHRvdGFsKTsKKwlwcmludGsoIiVkIHJlc2VydmVkIHBhZ2VzXG4iLCByZXNlcnZlZCk7CisJcHJpbnRrKCIlZCBwYWdlcyBzaGFyZWRcbiIsIHNoYXJlZCk7CisJcHJpbnRrKCIlZCBwYWdlcyBzd2FwIGNhY2hlZFxuIiwgY2FjaGVkKTsKKworCXByaW50aygiJWx1IHBhZ2VzIGRpcnR5XG4iLCBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSk7CisJcHJpbnRrKCIlbHUgcGFnZXMgd3JpdGViYWNrXG4iLCBnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0spKTsKKwlwcmludGsoIiVsdSBwYWdlcyBtYXBwZWRcbiIsIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfTUFQUEVEKSk7CisJcHJpbnRrKCIlbHUgcGFnZXMgc2xhYlxuIiwKKwkgICAgICAgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9SRUNMQUlNQUJMRSkgKworCSAgICAgICBnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1VOUkVDTEFJTUFCTEUpKTsKKwlwcmludGsoIiVsdSBwYWdlcyBwYWdldGFibGVzXG4iLCBnbG9iYWxfcGFnZV9zdGF0ZShOUl9QQUdFVEFCTEUpKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3JvX3JlZ2lvbih2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IGQ3NGViMTIuLjAzODE3OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTUyLDYgKzUyLDkgQEAKIGNvbmZpZyBHRU5FUklDX1RJTUUKIAlkZWZfYm9vbCBuCiAKK2NvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTCisJZGVmX2Jvb2wgbgorCiBjb25maWcgU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT04KIAlib29sCiAKQEAgLTQzNiwxMSArNDM5LDExIEBACiAKIG1lbnUgIlRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uIgogCi1pZiAhR0VORVJJQ19USU1FCi0KIGNvbmZpZyBTSF9UTVUKIAlib29sICJUTVUgdGltZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENQVV9TSDMgfHwgQ1BVX1NINAorCXNlbGVjdCBHRU5FUklDX1RJTUUKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBUTVUgYXMgdGhlIHN5c3RlbSB0aW1lci4KQEAgLTQ1OSw4ICs0NjIsNiBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBNVFUyIGFzIHRoZSBzeXN0ZW0gdGltZXIuCiAKLWVuZGlmCi0KIGNvbmZpZyBTSF9USU1FUl9JUlEKIAlpbnQKIAlkZWZhdWx0ICIyOCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NQpAQCAtNDY4LDI0ICs0NjksNiBAQAogCWRlZmF1bHQgIjE0MCIgaWYgQ1BVX1NVQlRZUEVfU0g3MjA2CiAJZGVmYXVsdCAiMTYiCiAKLWNvbmZpZyBOT19JRExFX0haCi0JYm9vbCAiRHluYW1pYyB0aWNrIHRpbWVyIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIGNvbnRpbnVvdXMgdGltZXIgdGlja3MKLQkgIGFuZCBoYXZlIHRoZW0gcHJvZ3JhbW1lZCB0byBvY2N1ciBhcyByZXF1aXJlZC4gVGhpcyBvcHRpb24gc2F2ZXMKLQkgIHBvd2VyIGFzIHRoZSBzeXN0ZW0gY2FuIHJlbWFpbiBpbiBpZGxlIHN0YXRlIGZvciBsb25nZXIuCi0KLQkgIEJ5IGRlZmF1bHQgZHluYW1pYyB0aWNrIGlzIGRpc2FibGVkIGR1cmluZyB0aGUgYm9vdCwgYW5kIGNhbiBiZQotCSAgbWFudWFsbHkgZW5hYmxlZCB3aXRoOgotCi0JICAgIGVjaG8gMSA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vdGltZXIvdGltZXIwL2R5bl90aWNrCi0KLQkgIEFsdGVybmF0aXZlbHksIGlmIHlvdSB3YW50IGR5bmFtaWMgdGljayBhdXRvbWF0aWNhbGx5IGVuYWJsZWQKLQkgIGR1cmluZyBib290LCBwYXNzICJkeW50aWNrPWVuYWJsZSIgdmlhIHRoZSBrZXJuZWwgY29tbWFuZCBzdHJpbmcuCi0KLQkgIFBsZWFzZSBub3RlIHRoYXQgZHluYW1pYyB0aWNrIG1heSBhZmZlY3QgdGhlIGFjY3VyYWN5IG9mCi0JICB0aW1la2VlcGluZyBvbiBzb21lIHBsYXRmb3JtcyBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLgotCiBjb25maWcgU0hfUENMS19GUkVRCiAJaW50ICJQZXJpcGhlcmFsIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopIgogCWRlZmF1bHQgIjI3MDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDczMTgwIHx8IENQVV9TVUJUWVBFX1NINzM0MwpAQCAtNTA5LDYgKzQ5Miw4IEBACiAJaGVscAogCSAgTUQyIC0gTUQwIHBpbiBzZXR0aW5nLgogCitzb3VyY2UgImtlcm5lbC90aW1lL0tjb25maWciCisKIGVuZG1lbnUKIAogbWVudSAiQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggN2IxMTIyNC4uODgzYjAzYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC0zOSw3ICszOSw3IEBACiBjZmxhZ3MtJChDT05GSUdfQ1BVX1NIMykJCTo9IC1tMwogY2ZsYWdzLSQoQ09ORklHX0NQVV9TSDQpCQk6PSAtbTQgXAogCSQoY2FsbCBjYy1vcHRpb24sLW1uby1pbXBsaWNpdC1mcCwtbTQtbm9mcHUpCi1jZmxhZ3MtJChDT05GSUdfQ1BVX1NINEEpCQk6PSAtbTRhICQoY2FsbCBjYy1vcHRpb24sLW00YS1ub2ZwdSwpCitjZmxhZ3MtJChDT05GSUdfQ1BVX1NINEEpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tNGEsKSAkKGNhbGwgY2Mtb3B0aW9uLC1tNGEtbm9mcHUsKQogCiBjZmxhZ3MtJChDT05GSUdfQ1BVX0JJR19FTkRJQU4pCQkrPSAtbWIKIGNmbGFncy0kKENPTkZJR19DUFVfTElUVExFX0VORElBTikJKz0gLW1sCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9sYW5kaXNrL2dpby5jIGIvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9naW8uYwppbmRleCA1MGQzOGJlLi5hMzc2NDNkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9sYW5kaXNrL2dpby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2xhbmRpc2svZ2lvLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAl9CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgR0lPRFJWX0lPQ1NHSU9TRVRBRERSOgkvKiBhZGRyZXMgc2V0ICovCisJY2FzZSBHSU9EUlZfSU9DU0dJT1NFVEFERFI6CS8qIGFkZHJlc3Mgc2V0ICovCiAJCWFkZHIgPSBkYXRhOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9zZXR1cC5jCmluZGV4IGE4M2E1ZDkuLmY5NTNjNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2xhbmRpc2svc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9sYW5kaXNrL3NldHVwLmMKQEAgLTQ0LDggKzQ0LDE0IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInJzNWMzMTMiLAorCS5pZAkJPSAtMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpsYW5kaXNrX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZjZl9pZGVfZGV2aWNlLAorCSZydGNfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbGFuZGlza19kZXZpY2VzX3NldHVwKHZvaWQpCkBAIC05Myw2ICs5OSw3IEBACiAgKi8KIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9sYW5kaXNrIF9faW5pdG12ID0gewogCS5tdl9uYW1lID0gIkxBTkRJU0siLAorCS5tdl9ucl9pcnFzID0gNzIsCiAJLm12X3NldHVwID0gbGFuZGlza19zZXR1cCwKIAkubXZfaW5pdF9pcnEgPSBpbml0X2xhbmRpc2tfSVJRLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9NYWtlZmlsZQppbmRleCA2MDllNWQ1Li5iMWQyMGFmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL01ha2VmaWxlCkBAIC0zLDUgKzMsOCBAQAogIwogaXJxaW5pdC15CQkJOj0gaXJxLXI3NzgwcnAubwogaXJxaW5pdC0kKENPTkZJR19TSF9SNzc4NVJQKQk6PSBpcnEtcjc3ODVycC5vCitvYmoteQkJCQk6PSBzZXR1cC5vIGlycS5vICQoaXJxaW5pdC15KQorCitpZm5lcSAoJChDT05GSUdfU0hfUjc3ODVSUCkseSkKIG9iai0kKENPTkZJR19QVVNIX1NXSVRDSCkJKz0gcHN3Lm8KLW9iai15CSAJCQk6PSBzZXR1cC5vIGlycS5vICQoaXJxaW5pdC15KQorZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvc2V0dXAuYwppbmRleCA3NzBkZWZlLi41MmM3YmZhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9zZXR1cC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvc2gva2VybmVsL3NldHVwXzc3NTFzZS5jCisgKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL3NldHVwLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEthenVtb3RvIEtvamltYQogICoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NuYXBnZWFyL3J0Yy5jIGIvYXJjaC9zaC9ib2FyZHMvc25hcGdlYXIvcnRjLmMKaW5kZXggMTY1OWZkZC4uZWRiM2RkOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc25hcGdlYXIvcnRjLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc25hcGdlYXIvcnRjLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogc3RhdGljIHZvaWQgZHMxMzAyX3Jlc2V0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKLQkvKiBIYXJkd2FyZSBkZXBlbmRhbnQgcmVzZXQvaW5pdCAqLworCS8qIEhhcmR3YXJlIGRlcGVuZGVudCByZXNldC9pbml0ICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXNldF9kaXJwKGdldF9kaXJwKCkgfCBSVENfUkVTRVQgfCBSVENfSU9EQVRBIHwgUlRDX1NDTEspOwogCXNldF9kcChnZXRfZHAoKSAmIH4oUlRDX1JFU0VUIHwgUlRDX0lPREFUQSB8IFJUQ19TQ0xLKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9pby5jCmluZGV4IDgzNDE5YmYuLmI3MDRlMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9pby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9pby5jCkBAIC0xOTgsMTIgKzE5OCwxMiBAQAogCS8qCiAJICoJVGhlcmUgaXMgYSBib2FyZCBmZWF0dXJlIHdpdGggdGhlIGN1cnJlbnQgU0g0LTIwMiBNaWNyb0RldiBpbgogCSAqCXRoYXQgdGhlIDIgYnl0ZSBlbmFibGVzIChuQkUwIGFuZCBuQkUxKSBhcmUgdGllZCB0b2dldGhlciAoYW5kCi0JICoJdG8gdGhlIENoaXAgU2VsZWN0IExpbmUgKEV0aGVybmV0X0NTKSkuIER1ZSB0byB0aGlzIGNvbmVjdGl2aXR5LAorCSAqCXRvIHRoZSBDaGlwIFNlbGVjdCBMaW5lIChFdGhlcm5ldF9DUykpLiBEdWUgdG8gdGhpcyBjb25uZWN0aXZpdHksCiAJICoJaXQgaXMgbm90IHBvc3NpYmxlIHRvIHNhZmVseSBwZXJmb3JtIDgtYml0IHdyaXRlcyB0byB0aGUKIAkgKglFdGhlcm5ldCByZWdpc3RlcnMsIGFzIDE2LWJpdHMgd2lsbCBiZSBjb25zdW1lZCBmcm9tIHRoZSBEYXRhCiAJICoJbGluZXMgKGNvcnJ1cHRpbmcgdGhlIG90aGVyIGJ5dGUpLiAgSGVuY2UsIHRoaXMgZnVuY3Rpb24gaXMKLQkgKgl3cml0dGVuIHRvIGltcGxpbWVudCAxNi1iaXQgcmVhZC9tb2RpZnkvd3JpdGUgZm9yIGFsbCBieXRlLXdpZGUKLQkgKglhY2Nlc2VzLgorCSAqCXdyaXR0ZW4gdG8gaW1wbGVtZW50IDE2LWJpdCByZWFkL21vZGlmeS93cml0ZSBmb3IgYWxsIGJ5dGUtd2lkZQorCSAqCWFjY2Vzc2VzLgogCSAqCiAJICoJTm90ZTogdGhlcmUgaXMgbm8gcHJvYmxlbSB3aXRoIGJ5dGUgUkVBRFMgKGV2ZW4gb3Igb2RkKS4KIAkgKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc3VwZXJoL21pY3JvZGV2L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvc3VwZXJoL21pY3JvZGV2L2lycS5jCmluZGV4IDhjNjRiYWEuLmNjMWNiMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvaXJxLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAJZnBnYUlycSA9IGZwZ2FJcnFUYWJsZVtpcnFdLmZwZ2FJcnE7CiAKLQkvKiBkaXNhYmxlIGludGVydXB0cyBvbiB0aGUgRlBHQSBJTlRDIHJlZ2lzdGVyICovCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBGUEdBIElOVEMgcmVnaXN0ZXIgKi8KIAljdHJsX291dGwoTUlDUk9ERVZfRlBHQV9JTlRDX01BU0soZnBnYUlycSksIE1JQ1JPREVWX0ZQR0FfSU5URFNCX1JFRyk7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogCXByaW9yaXRpZXMgfD0gTUlDUk9ERVZfRlBHQV9JTlRQUklfTEVWRUwoZnBnYUlycSwgcHJpKTsKIAljdHJsX291dGwocHJpb3JpdGllcywgcHJpb3JpdHlSZWcpOwogCi0JLyogZW5hYmxlIGludGVydXB0cyBvbiB0aGUgRlBHQSBJTlRDIHJlZ2lzdGVyICovCisJLyogZW5hYmxlIGludGVycnVwdHMgb24gdGhlIEZQR0EgSU5UQyByZWdpc3RlciAqLwogCWN0cmxfb3V0bChNSUNST0RFVl9GUEdBX0lOVENfTUFTSyhmcGdhSXJxKSwgTUlDUk9ERVZfRlBHQV9JTlRFTkJfUkVHKTsKIH0KIApAQCAtMTUyLDcgKzE1Miw3IEBACiB7CiAJaW50IGk7CiAKLQkJLyogZGlzYWJsZSBpbnRlcnVwdHMgb24gdGhlIEZQR0EgSU5UQyByZWdpc3RlciAqLworCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIEZQR0EgSU5UQyByZWdpc3RlciAqLwogCWN0cmxfb3V0bCh+MHVsLCBNSUNST0RFVl9GUEdBX0lOVERTQl9SRUcpOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9FWFRFUk5BTF9JUlFTOyBpKyspCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9zZXR1cC5jCmluZGV4IDAzMWM4MTQuLjYzOTZjZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9zZXR1cC5jCkBAIC0zNDksNyArMzQ5LDcgQEAKIAlTTVNDX1dSSVRFX0lOREVYRUQoMHgwMCwgMHhjNyk7CS8qIEdQNDcgPSBuSU9XT1AgKi8KIAlTTVNDX1dSSVRFX0lOREVYRUQoMHgwOCwgMHhlOCk7CS8qIEdQMjAgPSBuSURFMl9PRSAqLwogCi0JCS8qIEV4aXQgdGhlIGNvbmZpZ3VyYXRvbiBzdGF0ZSAqLworCQkvKiBFeGl0IHRoZSBjb25maWd1cmF0aW9uIHN0YXRlICovCiAJb3V0YihTTVNDX0VYSVRfQ09ORklHX0tFWSwgU01TQ19DT05GSUdfUE9SVF9BRERSKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvdW5rbm93bi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvdW5rbm93bi9zZXR1cC5jCmluZGV4IDFjOTQxMzcuLmJlZTQ2MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3Vua25vd24vc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy91bmtub3duL3NldHVwLmMKQEAgLTYsNyArNiw3IEBACiAgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKgotICogU2V0dXAgY29kZSBmb3IgYW4gdW5rbm93biBtYWNoaW5lIChpbnRlcm5hbCBwZXJpcGhlcmlhbHMgb25seSkKKyAqIFNldHVwIGNvZGUgZm9yIGFuIHVua25vd24gbWFjaGluZSAoaW50ZXJuYWwgcGVyaXBoZXJhbHMgb25seSkKICAqCiAgKiBUaGlzIGlzIHRoZSBzaW1wbGVzdCBvZiBhbGwgYm9hcmRzLCBhbmQgc2VydmVzIG9ubHkgYXMgYSBxdWljayBhbmQgZGlydHkKICAqIG1ldGhvZCB0byBzdGFydCBkZWJ1Z2dpbmcgYSBuZXcgYm9hcmQgZHVyaW5nIGJyaW5nLXVwIHVudGlsIHByb3BlciBib2FyZApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL01ha2VmaWxlIGIvYXJjaC9zaC9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDZjYjkyNjcuLmUxM2YwNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTIsOCArMiw5IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXggU3VwZXJILXNwZWNpZmljIGRldmljZSBkcml2ZXJzLgogIwogCitvYmoteQkJKz0gZG1hLworCiBvYmotJChDT05GSUdfUENJKQkJKz0gcGNpLwotb2JqLSQoQ09ORklHX1NIX0RNQSkJCSs9IGRtYS8KIG9iai0kKENPTkZJR19TVVBFUkhZV0FZKQkrPSBzdXBlcmh5d2F5Lwogb2JqLSQoQ09ORklHX1BVU0hfU1dJVENIKQkrPSBwdXNoLXN3aXRjaC5vCiBvYmotJChDT05GSUdfSEVBUlRCRUFUKQkJKz0gaGVhcnRiZWF0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCBkZWZjMTNjLi45OTkzNWY5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC0xLDEyICsxLDEyIEBACiBtZW51ICJETUEgc3VwcG9ydCIKIAotY29uZmlnIFNIX0RNQQotCWJvb2wgIkRNQSBjb250cm9sbGVyIChETUFDKSBzdXBwb3J0IgotCWhlbHAKLQkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIHByb3ZpZGUgc2FtZSBBUEkgYXMgUEMncyBEaXJlY3QgTWVtb3J5Ci0JICBBY2Nlc3MgQ29udHJvbGxlcig4MjM3QSkgZm9yIFN1cGVySCBETUFDLgorY29uZmlnIFNIX0RNQV9BUEkKKwlib29sCiAKLQkgIElmIHVuc3VyZSwgc2F5IE4uCitjb25maWcgU0hfRE1BCisJYm9vbCAiU3VwZXJIIG9uLWNoaXAgRE1BIGNvbnRyb2xsZXIgKERNQUMpIHN1cHBvcnQiCisJc2VsZWN0IFNIX0RNQV9BUEkKKwlkZWZhdWx0IG4KIAogY29uZmlnIE5SX09OQ0hJUF9ETUFfQ0hBTk5FTFMKIAlkZXBlbmRzIG9uIFNIX0RNQQpAQCAtNTMsNCArNTMsMTIgQEAKIAkgIGluIGNhc2UgY2hhbm5lbCAzIGlzIHVuYXZhaWxhYmxlLiBPbiB0aGUgU0g0LCBjaGFubmVscyAxLDIsIGFuZCAzCiAJICBhcmUgZHVhbC1hZGRyZXNzIGNhcGFibGUuCiAKK2NvbmZpZyBTSF9ETUFCUkcKKwlib29sICJTSDc3NjAgRE1BQlJHIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3NjAKKwloZWxwCisJICBUaGUgRE1BQlJHIGRvZXMgZGF0YSB0cmFuc2ZlcnMgZnJvbSBtYWluIG1lbW9yeSB0byBBdWRpby9VU0IgdW5pdHMKKwkgIG9mIHRoZSBTSDc3NjAuCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2UgQXVkaW8vVVNCIERNQSBvbiB5b3VyIFNINzc2MCBib2FyZC4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2FyY2gvc2gvZHJpdmVycy9kbWEvTWFrZWZpbGUKaW5kZXggZGIxMjk1ZC4uMWFjODEyZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL01ha2VmaWxlCkBAIC0yLDggKzIsOCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIFN1cGVySCBETUEgc3BlY2lmaWMga2VybmVsIGludGVyZmFjZSByb3V0aW5lcyB1bmRlciBMaW51eC4KICMKIAotb2JqLXkJCQkJKz0gZG1hLWFwaS5vCitvYmotJChDT05GSUdfU0hfRE1BX0FQSSkJKz0gZG1hLWFwaS5vIGRtYS1zeXNmcy5vCiBvYmotJChDT05GSUdfSVNBX0RNQV9BUEkpCSs9IGRtYS1pc2Eubwotb2JqLSQoQ09ORklHX1NZU0ZTKQkJKz0gZG1hLXN5c2ZzLm8KIG9iai0kKENPTkZJR19TSF9ETUEpCQkrPSBkbWEtc2gubwogb2JqLSQoQ09ORklHX1NIX0RSRUFNQ0FTVCkJKz0gZG1hLXB2cjIubyBkbWEtZzIubworb2JqLSQoQ09ORklHX1NIX0RNQUJSRykJCSs9IGRtYWJyZy5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1hcGkuYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWFwaS5jCmluZGV4IGUwNjIwNjcuLmNmOGUxMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWFwaS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWFwaS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKIERFRklORV9TUElOTE9DSyhkbWFfc3Bpbl9sb2NrKTsKQEAgLTExNSw3ICsxMTYsNyBAQAogLyoqCiAgKiByZXF1ZXN0X2RtYV9ieWNhcCAtIEFsbG9jYXRlIGEgRE1BIGNoYW5uZWwgYmFzZWQgb24gaXRzIGNhcGFiaWxpdGllcwogICogQGRtYWM6IExpc3Qgb2YgRE1BIGNvbnRyb2xsZXJzIHRvIHNlYXJjaAotICogQGNhcHM6IExpc3Qgb2YgY2FwYWJpbGl0ZXMKKyAqIEBjYXBzOiBMaXN0IG9mIGNhcGFiaWxpdGllcwogICoKICAqIFNlYXJjaCBhbGwgY2hhbm5lbHMgb2YgYWxsIERNQSBjb250cm9sbGVycyB0byBmaW5kIGEgY2hhbm5lbCB3aGljaAogICogbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIGNhcGFiaWxpdGllcy4gVGhlIHJlc3VsdCBpcyB0aGUgY2hhbm5lbApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtaXNhLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1pc2EuYwppbmRleCAwNWE3NGZmLi41ZmIwNDRiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1pc2EuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1pc2EuYwpAQCAtMjgsNyArMjgsNyBAQAogICogTk9URTogb3BzLT54ZmVyKCkgaXMgdGhlIHByZWZlcnJlZCB3YXkgb2YgZG9pbmcgdGhpbmdzLiBIb3dldmVyLCB0aGVyZQogICogYXJlIHNvbWUgdXNlcnMgb2YgdGhlIElTQSBETUEgQVBJIHRoYXQgZXhpc3QgaW4gY29tbW9uIGNvZGUgdGhhdCB3ZQogICogZG9uJ3QgbmVjZXNzYXJpbHkgd2FudCB0byBnbyBvdXQgb2Ygb3VyIHdheSB0byBicmVhaywgc28gd2Ugc3RpbGwKLSAqIGFsbG93IGZvciBzb21lIGNvbXBhdGFiaWxpdHkgYXQgdGhhdCBsZXZlbC4gQW55IG5ldyBjb2RlIGlzIHN0cm9uZ2x5CisgKiBhbGxvdyBmb3Igc29tZSBjb21wYXRpYmlsaXR5IGF0IHRoYXQgbGV2ZWwuIEFueSBuZXcgY29kZSBpcyBzdHJvbmdseQogICogYWR2aXNlZCB0byBydW4gZmFyIGF3YXkgZnJvbSB0aGUgSVNBIERNQSBBUEkgYW5kIHVzZSB0aGUgU0ggRE1BIEFQSQogICogZGlyZWN0bHkuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hYnJnLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYWJyZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMjI2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYWJyZy5jCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogU0g3NzYwIERNQUJSRyBJUlEgaGFuZGxpbmcKKyAqCisgKiAoYykgMjAwNyBNU0MgVmVydHJpZWJzZ2VzLm0uYi5ILCBNYW51ZWwgTGF1c3MgPG1sYXVAbXNjLWdlLmNvbT4KKyAqICBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2RtYWJyZy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKgorICogVGhlIERNQUJSRyBpcyBhIHNwZWNpYWwgRE1BIHVuaXQgd2l0aGluIHRoZSBTSDc3NjAuIEl0IGRvZXMgdHJhbnNmZXJzCisgKiBmcm9tIFVTQi1TUkFNL0F1ZGlvIHVuaXRzIHRvIG1haW4gbWVtb3J5IChhbmQgYWxzbyB0aGUgTENEQzsgYnV0IHRoYXQKKyAqIHBhcnQgaXMgc2Vuc2libHkgcGxhY2VkICBpbiB0aGUgTENEQyAgcmVnaXN0ZXJzIGFuZCByZXF1aXJlcyBubyBpcnFzKQorICogSXQgaGFzIDMgSVJRIGxpbmVzIHdoaWNoIHRyaWdnZXIgMTAgZXZlbnRzLCBhbmQgd29ya3MgaW5kZXBlbmRlbnRseQorICogZnJvbSB0aGUgdHJhZGl0aW9uYWwgU0ggRE1BQyAoYWx0aG91Z2ggaXQgYmxvY2tzIHVzYWdlIG9mIERNQUMgMCkKKyAqCisgKiBCUkdJUlFJRCAgIHwgY29tcG9uZW50IHwgZGlyIHwgbWVhbmluZyAgICAgIHwgc291cmNlCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgIDAgICAgICB8IFVTQi1ETUEgICB8IC4uLiB8IHhmZXIgZG9uZSAgICB8IERNQUJSR0kxCisgKiAgICAgMSAgICAgIHwgVVNCLVVBRSAgIHwgLi4uIHwgVVNCIGFkZHIgZXJyLnwgRE1BQlJHSTAKKyAqICAgICAyICAgICAgfCBIQUMwL1NTSTAgfCBwbGF5fCBhbGwgZG9uZSAgICAgfCBETUFCUkdJMQorICogICAgIDMgICAgICB8IEhBQzAvU1NJMCB8IHBsYXl8IGhhbGYgZG9uZSAgICB8IERNQUJSR0kyCisgKiAgICAgNCAgICAgIHwgSEFDMC9TU0kwIHwgcmVjIHwgYWxsIGRvbmUgICAgIHwgRE1BQlJHSTEKKyAqICAgICA1ICAgICAgfCBIQUMwL1NTSTAgfCByZWMgfCBoYWxmIGRvbmUgICAgfCBETUFCUkdJMgorICogICAgIDYgICAgICB8IEhBQzEvU1NJMSB8IHBsYXl8IGFsbCBkb25lICAgICB8IERNQUJSR0kxCisgKiAgICAgNyAgICAgIHwgSEFDMS9TU0kxIHwgcGxheXwgaGFsZiBkb25lICAgIHwgRE1BQlJHSTIKKyAqICAgICA4ICAgICAgfCBIQUMxL1NTSTEgfCByZWMgfCBhbGwgZG9uZSAgICAgfCBETUFCUkdJMQorICogICAgIDkgICAgICB8IEhBQzEvU1NJMSB8IHJlYyB8IGhhbGYgZG9uZSAgICB8IERNQUJSR0kyCisgKgorICogYWxsIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIGluIHRoZSBETUFCUkdDUiByZWdpc3RlciwKKyAqIGFzIHdlbGwgYXMgY2hlY2tlZCBpZiB0aGV5IG9jY3VycmVkLgorICoKKyAqIERNQUJSR0kwIHNlcnZpY2VzICBVU0IgIERNQSAgQWRkcmVzcyAgZXJyb3JzLCAgYnV0IGl0IHN0aWxsIG11c3QgYmUKKyAqIGVuYWJsZWQvYWNrZWQgaW4gdGhlIERNQUJSR0NSIHJlZ2lzdGVyLiAgVVNCLURNQSBjb21wbGV0ZSBpbmRpY2F0b3IKKyAqIGlzIGdyb3VwZWQgdG9nZXRoZXIgd2l0aCB0aGUgYXVkaW8gYnVmZmVyIGVuZCBpbmRpY2F0b3JzLCB0b28gYmFkLi4uCisgKgorICogRE1BQlJHQ1I6CUJpdHMgMzEtMjQ6IGF1ZGlvLWRtYSBFTkFCTEUgZmxhZ3MsCisgKgkJQml0cyAyMy0xNjogYXVkaW8tZG1hIFNUQVRVUyBmbGFncywKKyAqCQlCaXRzICA5LTg6ICBVU0IgZXJyb3IveGZlciBFTkFCTEUsCisgKgkJQml0cyAgMS0wOiAgVVNCIGVycm9yL3hmZXIgU1RBVFVTLgorICoJQWNrIGFuIElSUSBieSB3cml0aW5nIDAgdG8gdGhlIFNUQVRVUyBmbGFnLgorICoJTWFzayBJUlEgYnkgd3JpdGluZyAwIHRvIEVOQUJMRSBmbGFnLgorICoKKyAqIFVzYWdlIGlzIGFsbW9zdCBsaWtlIHdpdGggYW55IG90aGVyIElSUToKKyAqICBkbWFicmdfcmVxdWVzdF9pcnEoQlJHSVJRSUQsIGhhbmRsZXIsIGRhdGEpCisgKiAgZG1hYnJnX2ZyZWVfaXJxKEJSR0lSUUlEKQorICoKKyAqIGhhbmRsZXIgcHJvdG90eXBlOiAgdm9pZCBicmdpcnFoYW5kbGVyKHZvaWQgKmRhdGEpCisgKi8KKworI2RlZmluZSBETUFSU1JBCQkweGZlMDkwMDAwCisjZGVmaW5lIERNQU9SCQkweGZmYTAwMDQwCisjZGVmaW5lIERNQUNIQ1IwCTB4ZmZhMDAwMGMKKyNkZWZpbmUgRE1BQlJHQ1IJMHhmZTNjMDAwMAorCisjZGVmaW5lIERNQU9SX0JSRwkweDAwMDBjMDAwCisjZGVmaW5lIERNQU9SX0RNRU4JMHgwMDAwMDAwMQorCisjZGVmaW5lIERNQUJSR0kwCTY4CisjZGVmaW5lIERNQUJSR0kxCTY5CisjZGVmaW5lIERNQUJSR0kyCTcwCisKK3N0cnVjdCBkbWFicmdfaGFuZGxlciB7CisJdm9pZCAoKmhhbmRsZXIpKHZvaWQgKik7CisJdm9pZCAqZGF0YTsKK30gKmRtYWJyZ19oYW5kbGVyczsKKworc3RhdGljIGlubGluZSB2b2lkIGRtYWJyZ19jYWxsX2hhbmRsZXIoaW50IGkpCit7CisJZG1hYnJnX2hhbmRsZXJzW2ldLmhhbmRsZXIoZG1hYnJnX2hhbmRsZXJzW2ldLmRhdGEpOworfQorCisvKgorICogbWFpbiBETUFCUkcgaXJxIGhhbmRsZXIuIEl0IGFja3MgaXJxcyBhbmQgdGhlbgorICogaGFuZGxlcyBldmVyeSBzZXQgYW5kIHVubWFza2VkIGJpdCBzZXF1ZW50aWFsbHkuCisgKiBObyBsb2NraW5nIGFuZCBubyB2YWxpZGl0eSBjaGVja3M7IGl0IHNob3VsZCBiZQorICogYXMgZmFzdCBhcyBwb3NzaWJsZSAoYXVkaW8hKQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hYnJnX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZGNyOworCXVuc2lnbmVkIGludCBpOworCisJZGNyID0gY3RybF9pbmwoRE1BQlJHQ1IpOworCWN0cmxfb3V0bChkY3IgJiB+MHgwMGZmMDAwMywgRE1BQlJHQ1IpOwkvKiBhY2sgYWxsICovCisJZGNyICY9IGRjciA+PiA4OwkvKiBpZ25vcmUgbWFza2VkICovCisKKwkvKiBVU0Igc3R1ZmYsIGdldCBpdCBvdXQgb2YgdGhlIHdheSBmaXJzdCAqLworCWlmIChkY3IgJiAxKQorCQlkbWFicmdfY2FsbF9oYW5kbGVyKERNQUJSR0lSUV9VU0JETUEpOworCWlmIChkY3IgJiAyKQorCQlkbWFicmdfY2FsbF9oYW5kbGVyKERNQUJSR0lSUV9VU0JETUFFUlIpOworCisJLyogQXVkaW8gKi8KKwlkY3IgPj49IDE2OworCXdoaWxlIChkY3IpIHsKKwkJaSA9IF9fZmZzKGRjcik7CisJCWRjciAmPSBkY3IgLSAxOworCQlkbWFicmdfY2FsbF9oYW5kbGVyKGkgKyBETUFCUkdJUlFfQTBUWEYpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJyZ19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgZG1haXJxKQoreworCXVuc2lnbmVkIGxvbmcgZGNyOworCWRjciA9IGN0cmxfaW5sKERNQUJSR0NSKTsKKwlkY3IgJj0gfigxIDw8ICgoZG1haXJxID4gMSkgPyBkbWFpcnEgKyAyMiA6IGRtYWlycSArIDgpKTsKKwljdHJsX291dGwoZGNyLCBETUFCUkdDUik7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJyZ19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBkbWFpcnEpCit7CisJdW5zaWduZWQgbG9uZyBkY3I7CisJZGNyID0gY3RybF9pbmwoRE1BQlJHQ1IpOworCWRjciB8PSAoMSA8PCAoKGRtYWlycSA+IDEpID8gZG1haXJxICsgMjIgOiBkbWFpcnEgKyA4KSk7CisJY3RybF9vdXRsKGRjciwgRE1BQlJHQ1IpOworfQorCitpbnQgZG1hYnJnX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBkbWFpcnEsIHZvaWQoKmhhbmRsZXIpKHZvaWQqKSwKKwkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJaWYgKChkbWFpcnEgPiA5KSB8fCAhaGFuZGxlcikKKwkJcmV0dXJuIC1FTk9FTlQ7CisJaWYgKGRtYWJyZ19oYW5kbGVyc1tkbWFpcnFdLmhhbmRsZXIpCisJCXJldHVybiAtRUJVU1k7CisKKwlkbWFicmdfaGFuZGxlcnNbZG1haXJxXS5oYW5kbGVyID0gaGFuZGxlcjsKKwlkbWFicmdfaGFuZGxlcnNbZG1haXJxXS5kYXRhID0gZGF0YTsKKwkKKwlkbWFicmdfZW5hYmxlX2lycShkbWFpcnEpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1hYnJnX3JlcXVlc3RfaXJxKTsKKwordm9pZCBkbWFicmdfZnJlZV9pcnEodW5zaWduZWQgaW50IGRtYWlycSkKK3sKKwlpZiAobGlrZWx5KGRtYWlycSA8IDEwKSkgeworCQlkbWFicmdfZGlzYWJsZV9pcnEoZG1haXJxKTsKKwkJZG1hYnJnX2hhbmRsZXJzW2RtYWlycV0uaGFuZGxlciA9IE5VTEw7CisJCWRtYWJyZ19oYW5kbGVyc1tkbWFpcnFdLmRhdGEgPSBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtYWJyZ19mcmVlX2lycSk7CisKK3N0YXRpYyBpbnQgX19pbml0IGRtYWJyZ19pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBvcjsKKwlpbnQgcmV0OworCisJZG1hYnJnX2hhbmRsZXJzID0ga3phbGxvYygxMCAqIHNpemVvZihzdHJ1Y3QgZG1hYnJnX2hhbmRsZXIpLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbWFicmdfaGFuZGxlcnMpCisJCXJldHVybiAtRU5PTUVNOworCisjaWZkZWYgQ09ORklHX1NIX0RNQQorCS8qIHJlcXVlc3QgRE1BQyBjaGFubmVsIDAgYmVmb3JlIGFueW9uZSBlbHNlIGNhbiBnZXQgaXQgKi8KKwlyZXQgPSByZXF1ZXN0X2RtYSgwLCAiRE1BQyAwIChETUFCUkcpIik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0lORk8gIkRNQUJSRzogRE1BQyBjaDAgbm90IHJlc2VydmVkIVxuIik7CisjZW5kaWYKKworCWN0cmxfb3V0bCgwLCBETUFCUkdDUik7CisJY3RybF9vdXRsKDAsIERNQUNIQ1IwKTsKKwljdHJsX291dGwoMHg5NDAwMDAwMCwgRE1BUlNSQSk7CS8qIGVuYWJsZSBETUFCUkcgaW4gRE1BQyAwICovCisKKwkvKiBlbmFibGUgRE1BQlJHIG1vZGUsIGVuYWJsZSB0aGUgRE1BQyAqLworCW9yID0gY3RybF9pbmwoRE1BT1IpOworCWN0cmxfb3V0bChvciB8IERNQU9SX0JSRyB8IERNQU9SX0RNRU4sIERNQU9SKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKERNQUJSR0kwLCBkbWFicmdfaXJxLCBJUlFGX0RJU0FCTEVELAorCQkJIkRNQUJSRyBVU0IgYWRkcmVzcyBlcnJvciIsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0MDsKKworCXJldCA9IHJlcXVlc3RfaXJxKERNQUJSR0kxLCBkbWFicmdfaXJxLCBJUlFGX0RJU0FCTEVELAorCQkJIkRNQUJSRyBUcmFuc2ZlciBFbmQiLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDE7CisKKwlyZXQgPSByZXF1ZXN0X2lycShETUFCUkdJMiwgZG1hYnJnX2lycSwgSVJRRl9ESVNBQkxFRCwKKwkJCSJETUFCUkcgVHJhbnNmZXIgSGFsZiIsIE5VTEwpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIHJldDsKKworCWZyZWVfaXJxKERNQUJSR0kxLCAwKTsKK291dDE6CWZyZWVfaXJxKERNQUJSR0kwLCAwKTsKK291dDA6CWtmcmVlKGRtYWJyZ19oYW5kbGVycyk7CisJcmV0dXJuIHJldDsKK30KK3N1YnN5c19pbml0Y2FsbChkbWFicmdfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1kcmVhbWNhc3QuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWRyZWFtY2FzdC5jCmluZGV4IDM4MTMwNmMuLmUxMjg0ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWRyZWFtY2FzdC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWRyZWFtY2FzdC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAgKgogICogQWxzbywgd2UgY291bGQgdmVyeSBlYXNpbHkgc3VwcG9ydCBib3RoIFR5cGUgMCBhbmQgVHlwZSAxIGNvbmZpZ3VyYXRpb25zCiAgKiBoZXJlLCBidXQgc2luY2UgaXQgZG9lc24ndCBzZWVtIHRoYXQgdGhlcmUgaXMgYW55IHN1Y2ggaW1wbGVtZW50YXRpb24gaW4KLSAqIGV4aXN0YW5jZSwgd2UgZG9uJ3QgYm90aGVyLgorICogZXhpc3RlbmNlLCB3ZSBkb24ndCBib3RoZXIuCiAgKgogICogSSBzdXBwb3NlIGlmIHNvbWVvbmUgYWN0dWFsbHkgZ2V0cyBhcm91bmQgdG8gcmlwcGluZyB0aGUgY2hpcCBvdXQgb2YKICAqIHRoZSBCQkEgYW5kIGhhbmdpbmcgc29tZSBtb3JlIGRldmljZXMgb2ZmIG9mIGl0LCB0aGVuIHRoaXMgbWlnaHQgYmUKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXN0NDAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXN0NDAuYwppbmRleCBlZmVjYjNkLi41NDM0MTdmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zdDQwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc3Q0MC5jCkBAIC05LDcgKzksNiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTI5Myw3ICsyOTIsNyBAQAogCQkJICAgIFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUiB8CiAJCQkgICAgUENJX0NPTU1BTkRfSU8pOwogCi0JLyogQWNjZXNzZSB0byB0aGUgMHhiMDAwMDAwMCAtPiAweGI2MDAwMDAwIGFyZWEgd2lsbCBnbyB0aHJvdWdoIHRvIDB4MTAwMDAwMDAgLT4gMHgxNjAwMDAwMAorCS8qIEFjY2VzcyB0byB0aGUgMHhiMDAwMDAwMCAtPiAweGI2MDAwMDAwIGFyZWEgd2lsbCBnbyB0aHJvdWdoIHRvIDB4MTAwMDAwMDAgLT4gMHgxNjAwMDAwMAogCSAqIG9uIHRoZSBQQ0kgYnVzLiBUaGlzIGFsbG93cyBhIG5pY2UgMS0xIGJ1cyB0byBwaHlzIG1hcHBpbmcuCiAJICovCiAKQEAgLTMxNiw3ICszMTUsNyBAQAogCVNUNDBQQ0lfV1JJVEUoQ1NSX01CQVIwLCAwKTsKIAlTVDQwUENJX1dSSVRFKExTUjAsIDB4MGZmZjAwMDEpOwogCi0JLyogLi4uIGFuZCBzZXQgdXAgdGhlIGluaXRpYWwgaW5jb21taW5nIHdpbmRvdyB0byBleHBvc2UgYWxsIG9mIFJBTSAqLworCS8qIC4uLiBhbmQgc2V0IHVwIHRoZSBpbml0aWFsIGluY29taW5nIHdpbmRvdyB0byBleHBvc2UgYWxsIG9mIFJBTSAqLwogCXBjaV9zZXRfcmJhcl9yZWdpb24oNywgbWVtU3RhcnQsIG1lbVN0YXJ0LCBtZW1TaXplKTsKIAogCS8qIE1heGltaXNlIHRpbWVvdXQgdmFsdWVzICovCkBAIC00NzQsNyArNDczLDcgQEAKIAogCW1hc2sgPSByMnAyKHJlZ2lvblNpemUpIC0gMHgxMDAwMDsKIAotCS8qIERpYWJsZSB0aGUgcmVnaW9uIChpbiBjYXNlIGN1cnJlbnRseSBpbiB1c2UsIHNob3VsZCBuZXZlciBoYXBwZW4pICovCisJLyogRGlzYWJsZSB0aGUgcmVnaW9uIChpbiBjYXNlIGN1cnJlbnRseSBpbiB1c2UsIHNob3VsZCBuZXZlciBoYXBwZW4pICovCiAJU1Q0MFBDSV9XUklURV9JTkRFWEVEKFJTUiwgcmVnaW9uLCAwKTsKIAogCS8qIFN0YXJ0IG9mIGxvY2FsIGFkZHJlc3Mgc3BhY2UgdG8gcHVibGlzaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc3Q0MC5oIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc3Q0MC5oCmluZGV4IGQ3MjllMGMuLmNmMGQzNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXN0NDAuaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zdDQwLmgKQEAgLTQsNyArNCw3IEBACiAgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICoKLSAqIERlZmludGlvbnMgZm9yIHRoZSBTVDQwIFBDSSBoYXJkd2FyZS4KKyAqIERlZmluaXRpb25zIGZvciB0aGUgU1Q0MCBQQ0kgaGFyZHdhcmUuCiAgKi8KIAogI2lmbmRlZiBfX1BDSV9TVDQwX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3N1cGVyaHl3YXkvb3BzLXNoNC0yMDIuYyBiL2FyY2gvc2gvZHJpdmVycy9zdXBlcmh5d2F5L29wcy1zaDQtMjAyLmMKaW5kZXggYTU1Yzk4YS4uM2IxNGJmOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3N1cGVyaHl3YXkvb3BzLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvc3VwZXJoeXdheS9vcHMtc2g0LTIwMi5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkgKiBTb21lIG1vZHVsZXMgKFBCUiBhbmQgZVBCUiBmb3IgaW5zdGFuY2UpIGFsc28gYXBwZWFyIHRvIGhhdmUKIAkgKiBWQ1JML1ZDUkggZmxpcHBlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgYnV0IG9uIHRoZSBTSDQtMjAyCiAJICogaXRzZWxmIGl0IGFwcGVhcnMgdGhhdCB0aGVzZSBhcmUgYWxsIGNvbnNpc3RlbnRseSBtYXBwZWQgd2l0aAotCSAqIFZDUkggcHJlY2VlZGluZyBWQ1JMLgorCSAqIFZDUkggcHJlY2VkaW5nIFZDUkwuCiAJICoKIAkgKiBEbyBub3QgdHJ1c3QgdGhlIGRvY3VtZW50YXRpb24sIGZvciBpdCBpcyBldmlsLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY2YtZW5hYmxlci5jIGIvYXJjaC9zaC9rZXJuZWwvY2YtZW5hYmxlci5jCmluZGV4IDA3NThkNDguLmViYzczYjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NmLWVuYWJsZXIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jZi1lbmFibGVyLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC0zMSw3ICszMiw3IEBACiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQogLyogU0g0IGNhbid0IGFjY2VzcyBQQ01DSUEgaW50ZXJmYWNlIHRocm91Z2ggUDIgYXJlYS4KLSAqIHdlIG11c3QgcmVtYXAgaXQgd2l0aCBhcHByb3ByZWF0ZSBhdHRyaWJ1dGUgYml0IG9mIHRoZSBwYWdlIHNldC4KKyAqIHdlIG11c3QgcmVtYXAgaXQgd2l0aCBhcHByb3ByaWF0ZSBhdHRyaWJ1dGUgYml0IG9mIHRoZSBwYWdlIHNldC4KICAqIHRoaXMgcGFydCBpcyBiYXNlZCBvbiBHcmVnIEJhbmtzJyBoZDY0NDY1X3NzLmMgaW1wbGVtZW50YXRpb24gLSBNYXNhaGlybyBBYmUgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0NGX0FSRUE2KQpAQCAtMTQ5LDYgKzE1MCwxMSBAQAogCWN0cmxfb3V0YigweDQyLCBQQV9NUlNIUENfTVcyICsgMHgyMDApOwogCXJldHVybiAwOwogfQorI2Vsc2UKK3N0YXRpYyBpbnQgX19pbml0IGNmX2luaXRfc2Uodm9pZCkKK3sKKwlyZXR1cm4gLTE7Cit9CiAjZW5kaWYKIAogaW50IF9faW5pdCBjZl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCmluZGV4IDAxNGYzMTguLjYzMjUxNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCkBAIC0yNzgsNiArMjc4LDExIEBACiB7CiB9CiAKK3ZvaWQgX19pbml0IF9fYXR0cmlidXRlX18gKCh3ZWFrKSkKK2FyY2hfY2xrX2luaXQodm9pZCkKK3sKK30KKwogc3RhdGljIGludCBzaG93X2Nsb2NrcyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAogCQkgICAgICAgaW50IGxlbiwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7CkBAIC0zMTQsNiArMzE5LDggQEAKIAkJcmV0IHw9IGNsa19yZWdpc3RlcihjbGspOwogCX0KIAorCWFyY2hfY2xrX2luaXQoKTsKKwogCS8qIEtpY2sgdGhlIGNoaWxkIGNsb2Nrcy4uICovCiAJcHJvcGFnYXRlX3JhdGUoJm1hc3Rlcl9jbGspOwogCXByb3BhZ2F0ZV9yYXRlKCZidXNfY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvbWFza3JlZy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9tYXNrcmVnLmMKaW5kZXggNDkyZGIzMS4uOTc4OTkyZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9tYXNrcmVnLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9tYXNrcmVnLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAkuZW5kID0gZW5kX21hc2tyZWdfaXJxCiB9OwogCi0vKiBhY3R1YWwgaW1wbGVtZW50YXRpbiAqLworLyogYWN0dWFsIGltcGxlbWVudGF0aW9uICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfbWFza3JlZ19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAllbmFibGVfbWFza3JlZ19pcnEoaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKaW5kZXggMzUwOTcyYS4uOTY1ZmEyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKQEAgLTIsOSArMiw4IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvU3VwZXJIIFNILTJBIGJhY2tlbmRzLgogIwogCi1vYmoteQk6PSBjb21tb24ubyBwcm9iZS5vCitvYmoteQk6PSBjb21tb24ubyBwcm9iZS5vIG9wY29kZV9oZWxwZXIubwogCi1jb21tb24teQkrPSAkKGFkZHByZWZpeCAuLi9zaDIvLCBleC5vKQotY29tbW9uLXkJKz0gJChhZGRwcmVmaXggLi4vc2gyLywgZW50cnkubykKK2NvbW1vbi15CSs9ICQoYWRkcHJlZml4IC4uL3NoMi8sIGV4Lm8gZW50cnkubykKIAogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNikgKz0gc2V0dXAtc2g3MjA2Lm8gY2xvY2stc2g3MjA2Lm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL29wY29kZV9oZWxwZXIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL29wY29kZV9oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzA0Yjc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvb3Bjb2RlX2hlbHBlci5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9vcGNvZGVfaGVscGVyLmMKKyAqCisgKiBIZWxwZXIgZm9yIHRoZSBTSC0yQSAzMi1iaXQgb3Bjb2Rlcy4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKy8qCisgKiBJbnN0cnVjdGlvbnMgb24gU0ggYXJlIGdlbmVyYWxseSBmaXhlZCBhdCAxNi1iaXRzLCBob3dldmVyLCBTSC0yQQorICogaW50cm9kdWNlcyBzb21lIDMyLWJpdCBpbnN0cnVjdGlvbnMuIFNpbmNlIHRoZXJlIGFyZSBubyByZWFsCisgKiBjb25zdHJhaW50cyBvbiB0aGVpciB1c2UgKGFuZCB0aGV5IGNhbiBiZSBtaXhlZCBhbmQgbWF0Y2hlZCksIHdlIG5lZWQKKyAqIHRvIGNoZWNrIHRoZSBpbnN0cnVjdGlvbiBlbmNvZGluZyB0byB3b3JrIG91dCBpZiBpdCdzIGEgdHJ1ZSAzMi1iaXQKKyAqIGluc3RydWN0aW9uIG9yIG5vdC4KKyAqCisgKiBQcmVzZW50bHksIDMyLWJpdCBvcGNvZGVzIGhhdmUgb25seSBzbGlnaHQgdmFyaWF0aW9ucyBpbiB3aGF0IHRoZQorICogYWN0dWFsIGVuY29kaW5nIGxvb2tzIGxpa2UgaW4gdGhlIGZpcnN0LWhhbGYgb2YgdGhlIGluc3RydWN0aW9uLCB3aGljaAorICogbWFrZXMgaXQgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBkaWZmZXJlbnRpYXRlIGZyb20gdGhlIDE2LWJpdCBvbmVzLgorICoKKyAqIEZpcnN0IDE2LWJpdHMgb2YgZW5jb2RpbmcJCVVzZWQgYnkKKyAqCisgKgkwMDExbm5ubm1tbW0wMDAxCW1vdi5iLCBtb3YudywgbW92LmwsIGZtb3YuZCwKKyAqCQkJCWZtb3YucywgbW92dS5iLCBtb3Z1LncKKyAqCisgKgkwMDExbm5ubjBpaWkxMDAxICAgICAgICBiY2xyLmIsIGJsZC5iLCBic2V0LmIsIGJzdC5iLCBiYW5kLmIsCisgKgkJCQliYW5kbm90LmIsIGJsZG5vdC5iLCBib3IuYiwgYm9ybm90LmIsCisgKgkJCQlieG9yLmIKKyAqCisgKgkwMDAwbm5ubmlpaWkwMDAwICAgICAgICBtb3ZpMjAKKyAqCTAwMDBubm5uaWlpaTAwMDEgICAgICAgIG1vdmkyMHMKKyAqLwordW5zaWduZWQgaW50IGluc3RydWN0aW9uX3NpemUodW5zaWduZWQgaW50IGluc24pCit7CisJLyogTG9vayBmb3IgdGhlIGNvbW1vbiBjYXNlcyAqLworCXN3aXRjaCAoKGluc24gJiAweGYwMGYpKSB7CisJY2FzZSAweDAwMDA6CS8qIG1vdmkyMCAqLworCWNhc2UgMHgwMDAxOgkvKiBtb3ZpMjBzICovCisJY2FzZSAweDMwMDE6CS8qIDMyLWJpdCBtb3YvZm1vdi9tb3Z1IHZhcmlhbnRzICovCisJCXJldHVybiA0OworCX0KKworCS8qIEFuZCB0aGUgc3BlY2lhbCBjYXNlcy4uICovCisJc3dpdGNoICgoaW5zbiAmIDB4ZjA4ZikpIHsKKwljYXNlIDB4MzAwOToJLyogMzItYml0IGIqLmIgYml0IG9wZXJhdGlvbnMgKi8KKwkJcmV0dXJuIDQ7CisJfQorCisJcmV0dXJuIDI7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9wcm9iZS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvcHJvYmUuYwppbmRleCA0MjZmNmRiLi5mNDU1YzM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9wcm9iZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3Byb2JlLmMKQEAgLTE4LDYgKzE4LDcgQEAKIHsKIAkvKiBKdXN0IFNINzIwNiBmb3Igbm93IC4uICovCiAJY3VycmVudF9jcHVfZGF0YS50eXBlCQkJPSBDUFVfU0g3MjA2OworCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MJCQl8PSBDUFVfSEFTX09QMzI7CiAKIAljdXJyZW50X2NwdV9kYXRhLmRjYWNoZS53YXlzCQk9IDQ7CiAJY3VycmVudF9jcHVfZGF0YS5kY2FjaGUud2F5X2luY3IJPSAoMSA8PCAxMSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKaW5kZXggZjNlODI3Zi4uNjU5Y2MwOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL3NoL2tlcm5lbC9lbnRyeS5TCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAyICBOaWliZSBZdXRha2EKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2ICBQYXVsIE11bmR0CkBAIC0zMjAsNiArMzIwLDcgQEAKIAogCS5hbGlnbgkyCiA1OgkubG9uZwkweDAwMDAxMDAwCSEgRFNQCis2OgkubG9uZwlpbl9ubWkKIDc6CS5sb25nCTB4MzAwMDAwMDAKIAogISBjb21tb24gZXhjZXB0aW9uIGhhbmRsZXIKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUwppbmRleCBiYTMwODJkLi4yYjJhOWUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9leC5TCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBhcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMKICAqCi0gKiAgVGhlIFNILTMgZXhjZXB0aW9uIHZlY3RvciB0YWJsZS4KKyAqICBUaGUgU0gtMyBhbmQgU0gtNCBleGNlcHRpb24gdmVjdG9yIHRhYmxlLgogCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAyICBOaWliZSBZdXRha2EKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2ICBQYXVsIE11bmR0CkBAIC05LDcgKzksNiBAQAogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgogICovCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCkBAIC0zNiw4ICszNSwxMiBAQAogCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkhIGFkZHJlc3MgZXJyb3IgbG9hZAogCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkhIGFkZHJlc3MgZXJyb3Igc3RvcmUJLyogMTAwICovCiAjZW5kaWYKLQkubG9uZwlleGNlcHRpb25fZXJyb3IJISBmcHVfZXhjZXB0aW9uCS8qIDEyMCAqLwotCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkJCS8qIDE0MCAqLworI2lmIGRlZmluZWQoQ09ORklHX1NIX0ZQVSkKKwkubG9uZwlkb19mcHVfZXJyb3IJCS8qIDEyMCAqLworI2Vsc2UKKwkubG9uZwlleGNlcHRpb25fZXJyb3IJCS8qIDEyMCAqLworI2VuZGlmCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCQkvKiAxNDAgKi8KIAkubG9uZwlzeXN0ZW1fY2FsbAkhIFVuY29uZGl0aW9uYWwgVHJhcAkgLyogMTYwICovCiAJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCSEgcmVzZXJ2ZWRfaW5zdHJ1Y3Rpb24gKGZpbGxlZCBieSB0cmFwX2luaXQpIC8qIDE4MCAqLwogCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkhIGlsbGVnYWxfc2xvdF9pbnN0cnVjdGlvbiAoZmlsbGVkIGJ5IHRyYXBfaW5pdCkgLyoxQTAqLwpAQCAtNTUsNCArNTgsNCBAQAogCSAqIGF3YXkgb2Zmc2V0cyBjYW4gYmUgbWFudWFsbHkgaW5zZXJ0ZWQgaW4gdG8gdGhlaXIgYXBwcm9wcmlhdGUKIAkgKiBsb2NhdGlvbiB2aWEgc2V0X2V4Y2VwdGlvbl90YWJsZV97ZXZ0LHZlY30oKS4KIAkgKi8KLQkuYmFsaWduIDQwOTYsMCw0MDk2CisJLmJhbGlnbgk0MDk2LDAsNDA5NgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUKaW5kZXggMTljYTY4Yy4uOGFkZDEwYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlCkBAIC0yLDEwICsyLDEwIEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvU3VwZXJIIFNILTQgYmFja2VuZHMuCiAjCiAKLW9iai15CTo9IGV4Lm8gcHJvYmUubyBjb21tb24ubwotY29tbW9uLXkJKz0gJChhZGRwcmVmaXggLi4vc2gzLywgZW50cnkubykKK29iai15CTo9IHByb2JlLm8gY29tbW9uLm8KK2NvbW1vbi15CSs9ICQoYWRkcHJlZml4IC4uL3NoMy8sIGVudHJ5Lm8gZXgubykKIAotb2JqLSQoQ09ORklHX1NIX0ZQVSkgICAgICAgICAgICAgICAgICAgICs9IGZwdS5vCitvYmotJChDT05GSUdfU0hfRlBVKQkJCSs9IGZwdS5vCiBvYmotJChDT05GSUdfU0hfU1RPUkVfUVVFVUVTKQkJKz0gc3EubwogCiAjIENQVSBzdWJ0eXBlIHNldHVwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2V4LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2V4LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjOGFiNTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9leC5TCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqICBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2V4LlMKLSAqCi0gKiAgVGhlIFNILTQgZXhjZXB0aW9uIHZlY3RvciB0YWJsZS4KLQotICogIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMiAgTmlpYmUgWXV0YWthCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiAgUGF1bCBNdW5kdAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLQotCS5hbGlnbiAyCi0JLmRhdGEKLQotRU5UUlkoZXhjZXB0aW9uX2hhbmRsaW5nX3RhYmxlKQotCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkJLyogMDAwICovCi0JLmxvbmcJZXhjZXB0aW9uX2Vycm9yCi0jaWYgZGVmaW5lZChDT05GSUdfTU1VKQotCS5sb25nCXRsYl9taXNzX2xvYWQJCS8qIDA0MCAqLwotCS5sb25nCXRsYl9taXNzX3N0b3JlCi0JLmxvbmcJaW5pdGlhbF9wYWdlX3dyaXRlCi0JLmxvbmcJdGxiX3Byb3RlY3Rpb25fdmlvbGF0aW9uX2xvYWQKLQkubG9uZwl0bGJfcHJvdGVjdGlvbl92aW9sYXRpb25fc3RvcmUKLQkubG9uZwlhZGRyZXNzX2Vycm9yX2xvYWQKLQkubG9uZwlhZGRyZXNzX2Vycm9yX3N0b3JlCS8qIDEwMCAqLwotI2Vsc2UKLQkubG9uZwlleGNlcHRpb25fZXJyb3IJISB0bGIgbWlzcyBsb2FkCQkvKiAwNDAgKi8KLQkubG9uZwlleGNlcHRpb25fZXJyb3IJISB0bGIgbWlzcyBzdG9yZQotCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkhIGluaXRpYWwgcGFnZSB3cml0ZQotCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkhIHRsYiBwcm90IHZpb2xhdGlvbiBsb2FkCi0JLmxvbmcJZXhjZXB0aW9uX2Vycm9yCSEgdGxiIHByb3QgdmlvbGF0aW9uIHN0b3JlCi0JLmxvbmcJZXhjZXB0aW9uX2Vycm9yCSEgYWRkcmVzcyBlcnJvciBsb2FkCi0JLmxvbmcJZXhjZXB0aW9uX2Vycm9yCSEgYWRkcmVzcyBlcnJvciBzdG9yZQkvKiAxMDAgKi8KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NIX0ZQVSkKLQkubG9uZwlkb19mcHVfZXJyb3IJCS8qIDEyMCAqLwotI2Vsc2UKLQkubG9uZwlleGNlcHRpb25fZXJyb3IJCS8qIDEyMCAqLwotI2VuZGlmCi0JLmxvbmcJZXhjZXB0aW9uX2Vycm9yCQkvKiAxNDAgKi8KLQkubG9uZwlzeXN0ZW1fY2FsbAkhIFVuY29uZGl0aW9uYWwgVHJhcAkgLyogMTYwICovCi0JLmxvbmcJZXhjZXB0aW9uX2Vycm9yCSEgcmVzZXJ2ZWRfaW5zdHJ1Y3Rpb24gKGZpbGxlZCBieSB0cmFwX2luaXQpIC8qIDE4MCAqLwotCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkhIGlsbGVnYWxfc2xvdF9pbnN0cnVjdGlvbiAoZmlsbGVkIGJ5IHRyYXBfaW5pdCkgLyoxQTAqLwotRU5UUlkobm1pX3Nsb3QpCi0jaWYgZGVmaW5lZCAoQ09ORklHX0tHREJfTk1JKQotCS5sb25nCWRlYnVnX2VudGVyCS8qIDFDMCAqLwkhIEFsbG93IHRyYXAgdG8gZGVidWdnZXIKLSNlbHNlCi0JLmxvbmcJZXhjZXB0aW9uX25vbmUJLyogMUMwICovCSEgTm90IGltcGxlbWVudGVkIHlldAotI2VuZGlmCi1FTlRSWSh1c2VyX2JyZWFrX3BvaW50X3RyYXApCi0JLmxvbmcJYnJlYWtfcG9pbnRfdHJhcAkvKiAxRTAgKi8KLQotCS8qCi0JICogUGFkIHRoZSByZW1haW5kZXIgb2YgdGhlIHRhYmxlIG91dCwgZXhjZXB0aW9ucyByZXNpZGluZyBpbiBmYXIKLQkgKiBhd2F5IG9mZnNldHMgY2FuIGJlIG1hbnVhbGx5IGluc2VydGVkIGluIHRvIHRoZWlyIGFwcHJvcHJpYXRlCi0JICogbG9jYXRpb24gdmlhIHNldF9leGNlcHRpb25fdGFibGVfe2V2dCx2ZWN9KCkuCi0JICovCi0JLmJhbGlnbgk0MDk2LDAsNDA5NgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMKaW5kZXggNzYyNDY3Ny4uYzVhNGZjNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAvKiBUaGUgUFIgKHByZWNpc2lvbikgYml0IGluIHRoZSBGUCBTdGF0dXMgUmVnaXN0ZXIgbXVzdCBiZSBjbGVhciB3aGVuCkBAIC0xMzcsNyArMTM4LDcgQEAKIC8qCiAgKiBMb2FkIHRoZSBGUFUgd2l0aCBzaWduYWxsaW5nIE5BTlMuICBUaGlzIGJpdCBwYXR0ZXJuIHdlJ3JlIHVzaW5nCiAgKiBoYXMgdGhlIHByb3BlcnR5IHRoYXQgbm8gbWF0dGVyIHdldGhlciBjb25zaWRlcmVkIGFzIHNpbmdsZSBvciBhcwotICogZG91YmxlIHByZWNpc3Npb24gcmVwcmVzZW50cyBzaWduYWxpbmcgTkFOUy4gIAorICogZG91YmxlIHByZWNpc2lvbiByZXByZXNlbnRzIHNpZ25hbGluZyBOQU5TLiAgCiAgKi8KIAogc3RhdGljIHZvaWQKQEAgLTI2NSw3ICsyNjYsNyBAQAogCQluZXh0cGMgPSByZWdzLT5wcjsKIAkJZmluc24gPSAqKHVuc2lnbmVkIHNob3J0ICopIChyZWdzLT5wYyArIDIpOwogCX0gZWxzZSB7Ci0JCW5leHRwYyA9IHJlZ3MtPnBjICsgMjsKKwkJbmV4dHBjID0gcmVncy0+cGMgKyBpbnN0cnVjdGlvbl9zaXplKGluc24pOwogCQlmaW5zbiA9IGluc247CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKaW5kZXggOGNkMDQ5MC4uZmFiMmViMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCA2ZjhmNDU4Li4wM2IxNGNmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTEwNiw2ICsxMDYsNyBAQAogCXsgMzgsIDIsICA4LCA3IH0sIC8qIERNQUMgRE1BRSAqLwogfTsKIAorI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEKIHN0YXRpYyBzdHJ1Y3QgaXByX2RhdGEgc2g3NzUxX2lwcl9tYXBbXSA9IHsKIAl7IDQ0LCAyLCAgOCwgNyB9LCAvKiBETUFDIERNVEU0ICovCiAJeyA0NSwgMiwgIDgsIDcgfSwgLyogRE1BQyBETVRFNSAqLwpAQCAtMTE3LDYgKzExOCw3IEBACiAJLyp7IDcyLCBJTlRQUkkwMCwgIDgsID8gfSwqLyAvKiBUTVUzIFRVTkkgKi8KIAkvKnsgNzYsIElOVFBSSTAwLCAxMiwgPyB9LCovIC8qIFRNVTQgVFVOSSAqLwogfTsKKyNlbmRpZgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpcHJfb2Zmc2V0c1tdID0gewogCTB4ZmZkMDAwMDRVTCwJLyogMDogSVBSQSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzE4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzE4MC5jCmluZGV4IDJmYTVjYjIuLjZkNWJhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzMxODAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczMTgwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDczMTgwLmMKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzMxODAuYwogICoKICAqIFNINzMxODAgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yawogICoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM0My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKaW5kZXggMTcwN2EyMS4uN2FkYzRmMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDczNDMuYworICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKICAqCiAgKiBTSDczNDMvU0g3NzIyIHN1cHBvcnQgZm9yIHRoZSBjbG9jayBmcmFtZXdvcmsKICAqCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMi5jCmluZGV4IDI5MDkwMDMuLjUxYjM4NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMi5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2ZyZXEuaD4KIAotI2RlZmluZSBTSDc3MjJfUExMX0ZSRVEgKDMyMDAwMDAwLzgpCiAjZGVmaW5lIE4gICgtMSkKICNkZWZpbmUgTk0gKC0yKQogI2RlZmluZSBST1VORF9ORUFSRVNUIDAKQEAgLTE0MSwyOCArMTQwLDM2IEBACiAqLwogc3RhdGljIGludCBkaXZpc29yczJbXSA9IHsgMiwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAsIDI0LCAzMiwgNDAgfTsKIAotc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGtfc2V0X3JhdGUoY2xrLCBjbGtfZ2V0X3JhdGUoY2xrKSk7CisJdW5zaWduZWQgZnJxY3IgPSBjdHJsX2lubChGUlFDUik7CisKKwljbGstPnJhdGUgPSBDT05GSUdfU0hfUENMS19GUkVRICogKCgoZnJxY3IgPj4gMjQpICYgMHgxZikgKyAxKTsKIH0KIAotc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPnBhcmVudCA9IE5VTEw7CisJY2xrLT5mbGFncyB8PSBDTEtfUkFURV9QUk9QQUdBVEVTOworCWNsay0+cmF0ZSA9IENPTkZJR19TSF9QQ0xLX0ZSRVE7CisJbWFzdGVyX2Nsa19yZWNhbGMoY2xrKTsKK30KKworCitzdGF0aWMgdm9pZCBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBmcnFjciA9IGN0cmxfaW5sKEZSUUNSKTsKIAotCWNsay0+cmF0ZSA9IENPTkZJR19TSF9QQ0xLX0ZSRVEgKiAoMSArIChmcnFjciA+PiAyNCAmIDB4RikpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKCgoZnJxY3IgPj4gMjQpICYgMHgxZikgKyAxKTsKIH0KIAogc3RhdGljIGludCBtYXN0ZXJfY2xrX3NldHJhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUsIGludCBpZCkKIHsKLQlpbnQgZGl2ID0gcmF0ZSAvIFNINzcyMl9QTExfRlJFUTsKKwlpbnQgZGl2ID0gcmF0ZSAvIGNsay0+cmF0ZTsKIAlpbnQgbWFzdGVyX2RpdnNbXSA9IHsgMiwgMywgNCwgNiwgOCwgMTYgfTsKIAlpbnQgaW5kZXg7CiAJdW5zaWduZWQgbG9uZyBmcnFjcjsKIAotCWlmIChyYXRlIDwgU0g3NzIyX1BMTF9GUkVRICogMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlmb3IgKGluZGV4ID0gMTsgaW5kZXggPCBBUlJBWV9TSVpFKG1hc3Rlcl9kaXZzKTsgaW5kZXgrKykKIAkJaWYgKGRpdiA+PSBtYXN0ZXJfZGl2c1tpbmRleCAtIDFdICYmIGRpdiA8IG1hc3Rlcl9kaXZzW2luZGV4XSkKIAkJCWJyZWFrOwpAQCAtMTg1LDYgKzE5MiwxMCBAQAogCS5zZXRfcmF0ZSA9IG1hc3Rlcl9jbGtfc2V0cmF0ZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3MjJfbW9kdWxlX2Nsa19vcHMgPSB7CisgICAgICAgLnJlY2FsYyA9IG1vZHVsZV9jbGtfcmVjYWxjLAorfTsKKwogc3RydWN0IGZycWNyX2NvbnRleHQgewogCXVuc2lnbmVkIG1hc2s7CiAJdW5zaWduZWQgc2hpZnQ7CkBAIC00ODksNyArNTAwLDcgQEAKIAogCWlmIChzaXUgPCAwKQogCQlyZXR1cm4gLyogc2l1ICovIDsKLQlCVUdfT04oc2l1ID4gMSk7CisJQlVHX09OKHNpdSA+IDIpOwogCXIgPSBjdHJsX2lubChzaDc3MjJfc2l1X3JlZ3Nbc2l1XSk7CiAJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgKiAyIC8gZGl2aXNvcnMyW3IgJiAweEZdOwogfQpAQCAtNTcxLDcgKzU4Miw3IEBACiAgKi8KIHN0cnVjdCBjbGtfb3BzICpvbmNoaXBfb3BzW10gPSB7CiAJJnNoNzcyMl9tYXN0ZXJfY2xrX29wcywKLQkmc2g3NzIyX2ZycWNyX2Nsa19vcHMsCisJJnNoNzcyMl9tb2R1bGVfY2xrX29wcywKIAkmc2g3NzIyX2ZycWNyX2Nsa19vcHMsCiAJJnNoNzcyMl9mcnFjcl9jbGtfb3BzLAogfTsKQEAgLTU4Myw3ICs1OTQsNyBAQAogCSpvcHMgPSBvbmNoaXBfb3BzW3R5cGVdOwogfQogCi1pbnQgX19pbml0IHNoNzcyMl9jbG9ja19pbml0KHZvaWQpCitpbnQgX19pbml0IGFyY2hfY2xrX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgY2xrICptYXN0ZXI7CiAJaW50IGk7CkBAIC01OTcsNCArNjA4LDMgQEAKIAljbGtfcHV0KG1hc3Rlcik7CiAJcmV0dXJuIDA7CiB9Ci1hcmNoX2luaXRjYWxsKHNoNzcyMl9jbG9ja19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzcwLmMKaW5kZXggYzg2OTRiYS4uOGUyMzYwNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzcwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzcwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDc3NzAuYworICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzcwLmMKICAqCiAgKiBTSDc3NzAgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yawogICoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKaW5kZXggOWU2YTIxNi4uMDFmM2RhNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDc3ODAuYworICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKICAqCiAgKiBTSDc3ODAgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yawogICoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggOTA0OGMwMy4uOTgzMzQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTE5MiwyMCArMTkyLDE0IEBACiAJfQogI2VuZGlmCiAKLQlpZiAobGlrZWx5KGVhcmx5X2NvbnNvbGUpKQorCWlmIChsaWtlbHkoZWFybHlfY29uc29sZSkpIHsKKwkJaWYgKGtlZXBfZWFybHkpCisJCQllYXJseV9jb25zb2xlLT5mbGFncyAmPSB+Q09OX0JPT1Q7CisJCWVsc2UKKwkJCWVhcmx5X2NvbnNvbGUtPmZsYWdzIHw9IENPTl9CT09UOwogCQlyZWdpc3Rlcl9jb25zb2xlKGVhcmx5X2NvbnNvbGUpOworCX0KIAogCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oImVhcmx5cHJpbnRrIiwgc2V0dXBfZWFybHlfcHJpbnRrKTsKLQotdm9pZCBfX2luaXQgZGlzYWJsZV9lYXJseV9wcmludGsodm9pZCkKLXsKLQlpZiAoIWVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQgfHwgIWVhcmx5X2NvbnNvbGUpCi0JCXJldHVybjsKLQlpZiAoIWtlZXBfZWFybHkpIHsKLQkJcHJpbnRrKCJkaXNhYmxpbmcgZWFybHkgY29uc29sZVxuIik7Ci0JCXVucmVnaXN0ZXJfY29uc29sZShlYXJseV9jb25zb2xlKTsKLQl9IGVsc2UKLQkJcHJpbnRrKCJrZWVwaW5nIGVhcmx5IGNvbnNvbGVcbiIpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwva2dkYl9zdHViLmMgYi9hcmNoL3NoL2tlcm5lbC9rZ2RiX3N0dWIuYwppbmRleCBhNTMyMzM2Li5lZGQxZWMyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9rZ2RiX3N0dWIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9rZ2RiX3N0dWIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqCi0gKiBDb250YWluZXMgZXh0cmFjdHMgZnJvbSBjb2RlIGJ5IEdsZW5uIEVuZ2VsLCBKaW0gS2luZ2RvbiwKKyAqIENvbnRhaW5zIGV4dHJhY3RzIGZyb20gY29kZSBieSBHbGVubiBFbmdlbCwgSmltIEtpbmdkb24sCiAgKiBEYXZpZCBHcm90aGUgPGRhdmVAZ2NvbS5jb20+LCBUaWdyYW4gQWl2YXppYW4gPHRpZ3JhbkBzY28uY29tPiwKICAqIEFtaXQgUy4gS2FsZSA8YWthbGVAdmVyaXRhcy5jb20+LCAgV2lsbGlhbSBHYXRsaWZmIDxiZ2F0QG9wZW4td2lkZ2V0cy5jb20+LAogICogQmVuIExlZSwgU3RldmUgQ2hhbWJlcmxhaW4gYW5kIEJlbm9pdCBNaWxsZXIgPGZ1bGdAaW5hbWUuY29tPi4KQEAgLTg1LDcgKzg1LDcgQEAKICAqCiAgKiBSZXNwb25zZXMgY2FuIGJlIHJ1bi1sZW5ndGggZW5jb2RlZCB0byBzYXZlIHNwYWNlLiAgQSAnKicgbWVhbnMgdGhhdAogICogdGhlIG5leHQgY2hhcmFjdGVyIGlzIGFuIEFTQ0lJIGVuY29kaW5nIGdpdmluZyBhIHJlcGVhdCBjb3VudCB3aGljaAotICogc3RhbmRzIGZvciB0aGF0IG1hbnkgcmVwaXRpdGlvbnMgb2YgdGhlIGNoYXJhY3RlciBwcmVjZWRpbmcgdGhlICcqJy4KKyAqIHN0YW5kcyBmb3IgdGhhdCBtYW55IHJlcGV0aXRpb25zIG9mIHRoZSBjaGFyYWN0ZXIgcHJlY2VkaW5nIHRoZSAnKicuCiAgKiBUaGUgZW5jb2RpbmcgaXMgbisyOSwgeWllbGRpbmcgYSBwcmludGFibGUgY2hhcmFjdGVyIHdoZXJlIG4gPj0zCiAgKiAod2hpY2ggaXMgd2hlcmUgUkxFIHN0YXJ0cyB0byB3aW4pLiAgRG9uJ3QgdXNlIGFuIG4gPiAxMjYuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDMyOWIzZjMuLmExMWUyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE1LDE2ICsxNSwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aWNrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWJjLmg+CiAKIHN0YXRpYyBpbnQgaGx0X2NvdW50ZXI7CiBpbnQgdWJjX3VzZXJjbnQgPSAwOwogCi0jZGVmaW5lIEhBUkRfSURMRV9USU1FT1VUIChIWiAvIDMpCi0KIHZvaWQgKCpwbV9pZGxlKSh2b2lkKTsKIHZvaWQgKCpwbV9wb3dlcl9vZmYpKHZvaWQpOwogRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOwpAQCAtNDEsMTYgKzQyLDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGVuYWJsZV9obHQpOwogCitzdGF0aWMgaW50IF9faW5pdCBub2hsdF9zZXR1cChjaGFyICpfX3VudXNlZCkKK3sKKwlobHRfY291bnRlciA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub2hsdCIsIG5vaGx0X3NldHVwKTsKKworc3RhdGljIGludCBfX2luaXQgaGx0X3NldHVwKGNoYXIgKl9fdW51c2VkKQoreworCWhsdF9jb3VudGVyID0gMDsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImhsdCIsIGhsdF9zZXR1cCk7CisKIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCiB7Ci0JaWYgKCFobHRfY291bnRlcikKLQkJY3B1X3NsZWVwKCk7Ci0JZWxzZQotCQljcHVfcmVsYXgoKTsKKwlpZiAoIWhsdF9jb3VudGVyKSB7CisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXNldF9ibF9iaXQoKTsKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCWNwdV9zbGVlcCgpOworCQljbGVhcl9ibF9iaXQoKTsKKwkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJfSBlbHNlCisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCisJCQljcHVfcmVsYXgoKTsKIH0KIAogdm9pZCBjcHVfaWRsZSh2b2lkKQogeworCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSAoMSkgewogCQl2b2lkICgqaWRsZSkodm9pZCkgPSBwbV9pZGxlOwpAQCAtNTgsMTIgKzgyLDE1IEBACiAJCWlmICghaWRsZSkKIAkJCWlkbGUgPSBkZWZhdWx0X2lkbGU7CiAKKwkJdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljaygpOwogCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQogCQkJaWRsZSgpOworCQl0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrKCk7CiAKIAkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOwogCQlwcmVlbXB0X2Rpc2FibGUoKTsKKwkJY2hlY2tfcGd0X2NhY2hlKCk7CiAJfQogfQogCkBAIC00OTUsOSArNTIyLDkgQEAKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IFJFTE9DX0hJREUoJl9fcmVncywgMCk7CiAKIAkvKiBSZXdpbmQgKi8KLQlyZWdzLT5wYyAtPSAyOworCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CiAKLQlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgcmVncywgcmVncy0+dHJhICYgMHhmZiwKKwlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgImRlYnVnIHRyYXAiLCByZWdzLCAwLCByZWdzLT50cmEgJiAweGZmLAogCQkgICAgICAgU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCiAJCXJldHVybjsKIApAQCAtNTE0LDkgKzU0MSw5IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBSRUxPQ19ISURFKCZfX3JlZ3MsIDApOwogCiAJLyogUmV3aW5kICovCi0JcmVncy0+cGMgLT0gMjsKKwlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOwogCi0JaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsIHJlZ3MsIFRSQVBBX0JVR19PUENPREUgJiAweGZmLAorCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCAiYnVnIHRyYXAiLCByZWdzLCAwLCBUUkFQQV9CVUdfT1BDT0RFICYgMHhmZiwKIAkJICAgICAgIFNJR1RSQVApID09IE5PVElGWV9TVE9QKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggODU1ZjcyNC4uM2ZiNWZjMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IDQ3N2QyYTguLmMyNzcyOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtNDMxLDcgKzQzMSw3IEBACiAvKiBTeW1ib2xpYyBDUFUgZmxhZ3MsIGtlZXAgaW4gc3luYyB3aXRoIGFzbS9jcHUtZmVhdHVyZXMuaCAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9mbGFnc1tdID0gewogCSJub25lIiwgImZwdSIsICJwMmZsdXNoIiwgIm1tdWFzc29jIiwgImRzcCIsICJwZXJmY3RyIiwKLQkicHRlYSIsICJsbHNjIiwgImwyIiwgTlVMTAorCSJwdGVhIiwgImxsc2MiLCAibDIiLCAib3AzMiIsIE5VTEwKIH07CiAKIHN0YXRpYyB2b2lkIHNob3dfY3B1ZmxhZ3Moc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc2hfY3B1aW5mbyAqYykKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jCmluZGV4IDE3ZjBiNTAuLmMxY2ZjYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYwpAQCAtNSw3ICs1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpAQCAtNTksOCArNTgsNiBAQAogRVhQT1JUX1NZTUJPTChfX25kZWxheSk7CiBFWFBPUlRfU1lNQk9MKF9fY29uc3RfdWRlbGF5KTsKIAotRVhQT1JUX1NZTUJPTChfX2RpdjY0XzMyKTsKLQogI2RlZmluZSBERUNMQVJFX0VYUE9SVChuYW1lKSBleHRlcm4gdm9pZCBuYW1lKHZvaWQpO0VYUE9SVF9TWU1CT0wobmFtZSkKIAogLyogVGhlc2Ugc3ltYm9scyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciBpdHNlbGYgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggOWYzOWVmMS4uYjMyYzM1YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKQEAgLTExLDcgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMjQsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KLQorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWNvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC01MDEsNyArNTAwLDkgQEAKIAkJCQl9CiAJCQkvKiBmYWxsdGhyb3VnaCAqLwogCQkJY2FzZSAtRVJFU1RBUlROT0lOVFI6Ci0JCQkJcmVncy0+cGMgLT0gMjsKKwkJCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKAorCQkJCQkJY3RybF9pbncocmVncy0+cGMgLSA0KSk7CisJCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBnVVNBIGhhbmRsaW5nICovCkBAIC01MTcsNyArNTE4LDggQEAKIAkJCXJlZ3MtPnJlZ3NbMTVdID0gcmVncy0+cmVnc1sxXTsKIAkJCWlmIChyZWdzLT5wYyA8IHJlZ3MtPnJlZ3NbMF0pCiAJCQkJLyogR28gdG8gcmV3aW5kIHBvaW50ICMxICovCi0JCQkJcmVncy0+cGMgPSByZWdzLT5yZWdzWzBdICsgb2Zmc2V0IC0gMjsKKwkJCQlyZWdzLT5wYyA9IHJlZ3MtPnJlZ3NbMF0gKyBvZmZzZXQgLQorCQkJCQlpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjLTQpKTsKIAkJfQogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTYwMSw5ICs2MDMsOSBAQAogCQkgICAgcmVncy0+cmVnc1swXSA9PSAtRVJFU1RBUlRTWVMgfHwKIAkJICAgIHJlZ3MtPnJlZ3NbMF0gPT0gLUVSRVNUQVJUTk9JTlRSKSB7CiAJCQlyZWdzLT5yZWdzWzBdID0gc2F2ZV9yMDsKLQkJCXJlZ3MtPnBjIC09IDI7CisJCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOwogCQl9IGVsc2UgaWYgKHJlZ3MtPnJlZ3NbMF0gPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSykgewotCQkJcmVncy0+cGMgLT0gMjsKKwkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CiAJCQlyZWdzLT5yZWdzWzNdID0gX19OUl9yZXN0YXJ0X3N5c2NhbGw7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zbXAuYyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCmluZGV4IGRiZWJhZGQuLjI4M2UxNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9zaC9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IDBkNTI2OGEuLmQ0MWU1NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3N0YWNrdHJhY2UuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTE3LDE2ICsxNyw5IEBACiAvKgogICogU2F2ZSBzdGFjay1iYWNrdHJhY2UgYWRkcmVzc2VzIGludG8gYSBzdGFja190cmFjZSBidWZmZXIuCiAgKi8KLXZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit2b2lkIHNhdmVfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKIHsKLQl1bnNpZ25lZCBsb25nICpzcDsKLQotCWlmICghdGFzaykKLQkJdGFzayA9IGN1cnJlbnQ7Ci0JaWYgKHRhc2sgPT0gY3VycmVudCkKLQkJc3AgPSAodW5zaWduZWQgbG9uZyAqKWN1cnJlbnRfc3RhY2tfcG9pbnRlcjsKLQllbHNlCi0JCXNwID0gKHVuc2lnbmVkIGxvbmcgKil0YXNrLT50aHJlYWQuc3A7CisJdW5zaWduZWQgbG9uZyAqc3AgPSAodW5zaWduZWQgbG9uZyAqKWN1cnJlbnRfc3RhY2tfcG9pbnRlcjsKIAogCXdoaWxlICgha3N0YWNrX2VuZChzcCkpIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyID0gKnNwKys7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNfc2guYyBiL2FyY2gvc2gva2VybmVsL3N5c19zaC5jCmluZGV4IGUxOGYxODMuLjc2YjFiYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3N5c19zaC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3N5c19zaC5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAjaW5jbHVkZSA8bGludXgvbXNnLmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMuUwppbmRleCAzOGZjOGNkLi43ZGIxYzJkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy5TCisrKyBiL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzLlMKQEAgLTM1NCwzICszNTQsNyBAQAogCS5sb25nIHN5c19tb3ZlX3BhZ2VzCiAJLmxvbmcgc3lzX2dldGNwdQogCS5sb25nIHN5c19lcG9sbF9wd2FpdAorCS5sb25nIHN5c191dGltZW5zYXQJCS8qIDMyMCAqLworCS5sb25nIHN5c19zaWduYWxmZAorCS5sb25nIHN5c190aW1lcmZkCisJLmxvbmcgc3lzX2V2ZW50ZmQKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWUuYyBiL2FyY2gvc2gva2VybmVsL3RpbWUuYwppbmRleCBkNDdlNzc1Li5hM2E2N2QxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkgIFRldHN1eWEgT2thZGEgJiBOaWliZSBZdXRha2EKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgIFBoaWxpcHAgUnVtcGYgPHBydW1wZkB0dXgub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDYgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA3ICBQYXVsIE11bmR0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyICBNLiBSLiBCcm93biAgPG1yYnJvd25AbGludXgtc2gub3JnPgogICoKICAqICBTb21lIGNvZGUgdGFrZW4gZnJvbSBpMzg2IHZlcnNpb24uCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgpAQCAtMzgsNiArMzksMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIE51bGwgaGlnaCBwcmVjaXNpb24gdGltZXIgZnVuY3Rpb25zIGZvciBzeXN0ZW1zIGxhY2tpbmcgb25lLgorICovCitzdGF0aWMgY3ljbGVfdCBudWxsX2hwdF9yZWFkKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQgKCpydGNfc2hfZ2V0X3RpbWUpKHN0cnVjdCB0aW1lc3BlYyAqKSA9IG51bGxfcnRjX2dldF90aW1lOwogaW50ICgqcnRjX3NoX3NldF90aW1lKShjb25zdCB0aW1lX3QpID0gbnVsbF9ydGNfc2V0X3RpbWU7CiAKQEAgLTEwMSw2ICsxMTAsNyBAQAogRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOwogI2VuZGlmIC8qICFDT05GSUdfR0VORVJJQ19USU1FICovCiAKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMKIC8qIGxhc3QgdGltZSB0aGUgUlRDIGNsb2NrIGdvdCB1cGRhdGVkICovCiBzdGF0aWMgbG9uZyBsYXN0X3J0Y191cGRhdGU7CiAKQEAgLTEzOCw2ICsxNDgsNyBAQAogCQkJbGFzdF9ydGNfdXBkYXRlID0geHRpbWUudHZfc2VjIC0gNjAwOwogCX0KIH0KKyNlbmRpZiAvKiAhQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgKi8KIAogI2lmZGVmIENPTkZJR19QTQogaW50IHRpbWVyX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtMTY4LDEwOCArMTc5LDYgQEAKIAkucmVzdW1lCSA9IHRpbWVyX3Jlc3VtZSwKIH07CiAKLSNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgotc3RhdGljIGludCB0aW1lcl9keW5fdGlja19lbmFibGUodm9pZCkKLXsKLQlzdHJ1Y3QgZHluX3RpY2tfdGltZXIgKmR5bl90aWNrID0gc3lzX3RpbWVyLT5keW5fdGljazsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAtRU5PREVWOwotCi0JaWYgKGR5bl90aWNrKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwotCQlyZXQgPSAwOwotCQlpZiAoIShkeW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKSkgewotCQkJcmV0ID0gZHluX3RpY2stPmVuYWJsZSgpOwotCi0JCQlpZiAocmV0ID09IDApCi0JCQkJZHluX3RpY2stPnN0YXRlIHw9IERZTl9USUNLX0VOQUJMRUQ7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHluX3RpY2stPmxvY2ssIGZsYWdzKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHRpbWVyX2R5bl90aWNrX2Rpc2FibGUodm9pZCkKLXsKLQlzdHJ1Y3QgZHluX3RpY2tfdGltZXIgKmR5bl90aWNrID0gc3lzX3RpbWVyLT5keW5fdGljazsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAtRU5PREVWOwotCi0JaWYgKGR5bl90aWNrKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwotCQlyZXQgPSAwOwotCQlpZiAoZHluX3RpY2stPnN0YXRlICYgRFlOX1RJQ0tfRU5BQkxFRCkgewotCQkJcmV0ID0gZHluX3RpY2stPmRpc2FibGUoKTsKLQotCQkJaWYgKHJldCA9PSAwKQotCQkJCWR5bl90aWNrLT5zdGF0ZSAmPSB+RFlOX1RJQ0tfRU5BQkxFRDsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBSZXByb2dyYW0gdGhlIHN5c3RlbSB0aW1lciBmb3IgYXQgbGVhc3QgdGhlIGNhbGN1bGF0ZWQgdGltZSBpbnRlcnZhbC4KLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBpZGxlIHRocmVhZCB3aXRoIElSUXMgZGlzYWJsZWQsCi0gKiBpbW1lZGlhdGVseSBiZWZvcmUgc2xlZXBpbmcuCi0gKi8KLXZvaWQgdGltZXJfZHluX3JlcHJvZ3JhbSh2b2lkKQotewotCXN0cnVjdCBkeW5fdGlja190aW1lciAqZHluX3RpY2sgPSBzeXNfdGltZXItPmR5bl90aWNrOwotCXVuc2lnbmVkIGxvbmcgbmV4dCwgc2VxLCBmbGFnczsKLQotCWlmICghZHluX3RpY2spCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwotCWlmIChkeW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKSB7Ci0JCW5leHQgPSBuZXh0X3RpbWVyX2ludGVycnVwdCgpOwotCQlkbyB7Ci0JCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQkJCWR5bl90aWNrLT5yZXByb2dyYW0obmV4dCAtIGppZmZpZXMpOwotCQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHluX3RpY2stPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHNzaXplX3QgdGltZXJfc2hvd19keW5fdGljayhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsCi0JCSAgICAgICAoc3lzX3RpbWVyLT5keW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKSA+PiAxKTsKLX0KLQotc3RhdGljIHNzaXplX3QgdGltZXJfc2V0X2R5bl90aWNrKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkgIHNpemVfdCBjb3VudCkKLXsKLQl1bnNpZ25lZCBpbnQgZW5hYmxlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAyKTsKLQotCWlmIChlbmFibGUpCi0JCXRpbWVyX2R5bl90aWNrX2VuYWJsZSgpOwotCWVsc2UKLQkJdGltZXJfZHluX3RpY2tfZGlzYWJsZSgpOwotCi0JcmV0dXJuIGNvdW50OwotfQotc3RhdGljIFNZU0RFVl9BVFRSKGR5bl90aWNrLCAwNjQ0LCB0aW1lcl9zaG93X2R5bl90aWNrLCB0aW1lcl9zZXRfZHluX3RpY2spOwotCi0vKgotICogZHludGljaz1lbmFibGV8ZGlzYWJsZQotICovCi1zdGF0aWMgY2hhciBkeW50aWNrX3N0cls0XSBfX2luaXRkYXRhID0gIiI7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGR5bnRpY2tfc2V0dXAoY2hhciAqc3RyKQotewotCWlmIChzdHIpCi0JCXN0cmxjcHkoZHludGlja19zdHIsIHN0ciwgc2l6ZW9mKGR5bnRpY2tfc3RyKSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoImR5bnRpY2s9IiwgZHludGlja19zZXR1cCk7Ci0jZW5kaWYKLQogc3RhdGljIGludCBfX2luaXQgdGltZXJfaW5pdF9zeXNmcyh2b2lkKQogewogCWludCByZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnRpbWVyX3N5c2NsYXNzKTsKQEAgLTI3NywyNyArMTg2LDUxIEBACiAJCXJldHVybiByZXQ7CiAKIAlzeXNfdGltZXItPmRldi5jbHMgPSAmdGltZXJfc3lzY2xhc3M7Ci0JcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZzeXNfdGltZXItPmRldik7Ci0KLSNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgotCWlmIChyZXQgPT0gMCAmJiBzeXNfdGltZXItPmR5bl90aWNrKSB7Ci0JCXJldCA9IHN5c2Rldl9jcmVhdGVfZmlsZSgmc3lzX3RpbWVyLT5kZXYsICZhdHRyX2R5bl90aWNrKTsKLQotCQkvKgotCQkgKiBUdXJuIG9uIGR5bmFtaWMgdGljayBhZnRlciBjYWxpYnJhdGUgZGVsYXkKLQkJICogZm9yIGNvcnJlY3QgYm9nb21pcHMKLQkJICovCi0JCWlmIChyZXQgPT0gMCAmJiBkeW50aWNrX3N0clswXSA9PSAnZScpCi0JCQlyZXQgPSB0aW1lcl9keW5fdGlja19lbmFibGUoKTsKLQl9Ci0jZW5kaWYKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHN5c2Rldl9yZWdpc3Rlcigmc3lzX3RpbWVyLT5kZXYpOwogfQogZGV2aWNlX2luaXRjYWxsKHRpbWVyX2luaXRfc3lzZnMpOwogCiB2b2lkICgqYm9hcmRfdGltZV9pbml0KSh2b2lkKTsKIAorLyoKKyAqIFNoYW1lbGVzc2x5IGJhc2VkIG9uIHRoZSBNSVBTIGFuZCBTcGFyYzY0IHdvcmsuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3RpY2tzX3Blcl9uc2VjX3F1b3RpZW50IF9fcmVhZF9tb3N0bHk7Cit1bnNpZ25lZCBsb25nIHNoX2hwdF9mcmVxdWVuY3kgPSAwOworCisjZGVmaW5lIE5TRUNfUEVSX0NZQ19TSElGVAkxMAorCitzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2Vfc2ggPSB7CisJLm5hbWUJCT0gIlN1cGVySCIsCisJLnJhdGluZwkJPSAyMDAsCisJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJLnJlYWQJCT0gbnVsbF9ocHRfcmVhZCwKKwkuc2hpZnQJCT0gMTYsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGluaXRfc2hfY2xvY2tzb3VyY2Uodm9pZCkKK3sKKwlpZiAoIXNoX2hwdF9mcmVxdWVuY3kgfHwgY2xvY2tzb3VyY2Vfc2gucmVhZCA9PSBudWxsX2hwdF9yZWFkKQorCQlyZXR1cm47CisKKwljbG9ja3NvdXJjZV9zaC5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChzaF9ocHRfZnJlcXVlbmN5LAorCQkJCQkJICBjbG9ja3NvdXJjZV9zaC5zaGlmdCk7CisKKwl0aW1lcl90aWNrc19wZXJfbnNlY19xdW90aWVudCA9CisJCWNsb2Nrc291cmNlX2h6Mm11bHQoc2hfaHB0X2ZyZXF1ZW5jeSwgTlNFQ19QRVJfQ1lDX1NISUZUKTsKKworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9zaCk7Cit9CisKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19USU1FCit1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdGlja3MgPSBjbG9ja3NvdXJjZV9zaC5yZWFkKCk7CisJcmV0dXJuICh0aWNrcyAqIHRpbWVyX3RpY2tzX3Blcl9uc2VjX3F1b3RpZW50KSA+PiBOU0VDX1BFUl9DWUNfU0hJRlQ7Cit9CisjZW5kaWYKKwogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CiAJaWYgKGJvYXJkX3RpbWVfaW5pdCkKQEAgLTMxNiwxMCArMjQ5LDE1IEBACiAJc3lzX3RpbWVyID0gZ2V0X3N5c190aW1lcigpOwogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nICVzIGZvciBzeXN0ZW0gdGltZXJcbiIsIHN5c190aW1lci0+bmFtZSk7CiAKLSNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgotCWlmIChzeXNfdGltZXItPmR5bl90aWNrKQotCQlzcGluX2xvY2tfaW5pdCgmc3lzX3RpbWVyLT5keW5fdGljay0+bG9jayk7Ci0jZW5kaWYKKwlpZiAoc3lzX3RpbWVyLT5vcHMtPnJlYWQpCisJCWNsb2Nrc291cmNlX3NoLnJlYWQgPSBzeXNfdGltZXItPm9wcy0+cmVhZDsKKworCWluaXRfc2hfY2xvY2tzb3VyY2UoKTsKKworCWlmIChzaF9ocHRfZnJlcXVlbmN5KQorCQlwcmludGsoIlVzaW5nICVsdS4lMDNsdSBNSHogaGlnaCBwcmVjaXNpb24gdGltZXIuXG4iLAorCQkgICAgICAgKChzaF9ocHRfZnJlcXVlbmN5ICsgNTAwKSAvIDEwMDApIC8gMTAwMCwKKwkJICAgICAgICgoc2hfaHB0X2ZyZXF1ZW5jeSArIDUwMCkgLyAxMDAwKSAlIDEwMDApOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0hfS0dEQikKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWNtdC5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWNtdC5jCmluZGV4IGE1NzRiOTMuLjgyZGU2ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItY210LmMKQEAgLTExNSw3ICsxMTUsNyBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY210X2lycSA9IHsKIAkubmFtZQkJPSAidGltZXIiLAogCS5oYW5kbGVyCT0gY210X3RpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAogCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYwppbmRleCBmZmZjZDFjLi5iNzQ5OWEyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbXR1Ml9pcnEgPSB7CiAJLm5hbWUJCT0gInRpbWVyIiwKIAkuaGFuZGxlcgk9IG10dTJfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwppbmRleCBhZDFlZGU1Li4yZDk5N2UyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYyAtIFRNVSBUaW1lciBTdXBwb3J0CiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNSAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDcgIFBhdWwgTXVuZHQKICAqCiAgKiBUTVUgaGFuZGxpbmcgY29kZSBoYWNrZWQgb3V0IG9mIGFyY2gvc2gva2VybmVsL3RpbWUuYwogICoKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9ydGMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTI1LDU2ICsyNiw3NSBAQAogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogCiAjZGVmaW5lIFRNVV9UT0NSX0lOSVQJMHgwMAotI2RlZmluZSBUTVUwX1RDUl9JTklUCTB4MDAyMAotI2RlZmluZSBUTVVfVFNUUl9JTklUCTEKKyNkZWZpbmUgVE1VX1RDUl9JTklUCTB4MDAyMAogCi0jZGVmaW5lIFRNVTBfVENSX0NBTElCCTB4MDAwMAotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0bXVfdGltZXJfZ2V0X29mZnNldCh2b2lkKQorc3RhdGljIGludCB0bXVfdGltZXJfc3RhcnQodm9pZCkKIHsKLQlpbnQgY291bnQ7Ci0Jc3RhdGljIGludCBjb3VudF9wID0gMHg3ZmZmZmZmZjsgICAgLyogZm9yIHRoZSBmaXJzdCBjYWxsIGFmdGVyIGJvb3QgKi8KLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3AgPSAwOwotCi0JLyoKLQkgKiBjYWNoZSB2b2xhdGlsZSBqaWZmaWVzIHRlbXBvcmFyaWx5OyB3ZSBoYXZlIElSUXMgdHVybmVkIG9mZi4KLQkgKi8KLQl1bnNpZ25lZCBsb25nIGppZmZpZXNfdDsKLQotCS8qIHRpbWVyIGNvdW50IG1heSB1bmRlcmZsb3cgcmlnaHQgaGVyZSAqLwotCWNvdW50ID0gY3RybF9pbmwoVE1VMF9UQ05UKTsJLyogcmVhZCB0aGUgbGF0Y2hlZCBjb3VudCAqLwotCi0JamlmZmllc190ID0gamlmZmllczsKLQotCS8qCi0JICogYXZvaWRpbmcgdGltZXIgaW5jb25zaXN0ZW5jaWVzICh0aGV5IGFyZSByYXJlLCBidXQgdGhleSBoYXBwZW4pLi4uCi0JICogdGhlcmUgaXMgb25lIGtpbmQgb2YgcHJvYmxlbSB0aGF0IG11c3QgYmUgYXZvaWRlZCBoZXJlOgotCSAqICAxLiB0aGUgdGltZXIgY291bnRlciB1bmRlcmZsb3dzCi0JICovCi0KLQlpZiAoamlmZmllc190ID09IGppZmZpZXNfcCkgewotCQlpZiAoY291bnQgPiBjb3VudF9wKSB7Ci0JCQkvKiB0aGUgbnV0Y2FzZSAqLwotCQkJaWYgKGN0cmxfaW53KFRNVTBfVENSKSAmIDB4MTAwKSB7IC8qIENoZWNrIFVORiBiaXQgKi8KLQkJCQljb3VudCAtPSBMQVRDSDsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKCIlcyAoKTogaGFyZHdhcmUgdGltZXIgcHJvYmxlbT9cbiIsCi0JCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UKLQkJamlmZmllc19wID0gamlmZmllc190OwotCi0JY291bnRfcCA9IGNvdW50OwotCi0JY291bnQgPSAoKExBVENILTEpIC0gY291bnQpICogVElDS19TSVpFOwotCWNvdW50ID0gKGNvdW50ICsgTEFUQ0gvMikgLyBMQVRDSDsKLQotCXJldHVybiBjb3VudDsKKwljdHJsX291dGIoY3RybF9pbmIoVE1VX1RTVFIpIHwgMHgzLCBUTVVfVFNUUik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHRtdTBfdGltZXJfc2V0X2ludGVydmFsKHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwsIHVuc2lnbmVkIGludCByZWxvYWQpCit7CisJY3RybF9vdXRsKGludGVydmFsLCBUTVUwX1RDTlQpOworCisJLyoKKwkgKiBUQ05UIHJlbG9hZHMgZnJvbSBUQ09SIG9uIHVuZGVyZmxvdywgY2xlYXIgaXQgaWYgd2UgZG9uJ3QKKwkgKiBpbnRlbmQgdG8gYXV0by1yZWxvYWQKKwkgKi8KKwlpZiAocmVsb2FkKQorCQljdHJsX291dGwoaW50ZXJ2YWwsIFRNVTBfVENPUik7CisJZWxzZQorCQljdHJsX291dGwoMCwgVE1VMF9UQ09SKTsKKworCXRtdV90aW1lcl9zdGFydCgpOworfQorCitzdGF0aWMgaW50IHRtdV90aW1lcl9zdG9wKHZvaWQpCit7CisJY3RybF9vdXRiKGN0cmxfaW5iKFRNVV9UU1RSKSAmIH4weDMsIFRNVV9UU1RSKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGN5Y2xlX3QgdG11X3RpbWVyX3JlYWQodm9pZCkKK3sKKwlyZXR1cm4gfmN0cmxfaW5sKFRNVTFfVENOVCk7Cit9CisKK3N0YXRpYyBpbnQgdG11X3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgY3ljbGVzLAorCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXRtdTBfdGltZXJfc2V0X2ludGVydmFsKGN5Y2xlcywgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRtdV9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCSBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJY3RybF9vdXRsKGN0cmxfaW5sKFRNVTBfVENOVCksIFRNVTBfVENPUik7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJY3RybF9vdXRsKDAsIFRNVTBfVENPUik7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgdG11MF9jbG9ja2V2ZW50ID0geworCS5uYW1lCQk9ICJ0bXUwIiwKKwkuc2hpZnQJCT0gMzIsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAorCS5zZXRfbW9kZQk9IHRtdV9zZXRfbW9kZSwKKwkuc2V0X25leHRfZXZlbnQJPSB0bXVfc2V0X25leHRfZXZlbnQsCit9OworCiBzdGF0aWMgaXJxcmV0dXJuX3QgdG11X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkdW1teSkKIHsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmdG11MF9jbG9ja2V2ZW50OwogCXVuc2lnbmVkIGxvbmcgdGltZXJfc3RhdHVzOwogCiAJLyogQ2xlYXIgVU5GIGJpdCAqLwpAQCAtODIsNzIgKzEwMiw3NiBAQAogCXRpbWVyX3N0YXR1cyAmPSB+MHgxMDA7CiAJY3RybF9vdXR3KHRpbWVyX3N0YXR1cywgVE1VMF9UQ1IpOwogCi0JLyoKLQkgKiBIZXJlIHdlIGFyZSBpbiB0aGUgdGltZXIgaXJxIGhhbmRsZXIuIFdlIGp1c3QgaGF2ZSBpcnFzIGxvY2FsbHkKLQkgKiBkaXNhYmxlZCBidXQgd2UgZG9uJ3Qga25vdyBpZiB0aGUgdGltZXJfYmggaXMgcnVubmluZyBvbiB0aGUgb3RoZXIKLQkgKiBDUFUuIFdlIG5lZWQgdG8gYXZvaWQgdG8gU01QIHJhY2Ugd2l0aCBpdC4gTk9URTogd2UgZG9uJyB0IG5lZWQKLQkgKiB0aGUgaXJxIHZlcnNpb24gb2Ygd3JpdGVfbG9jayBiZWNhdXNlIGFzIGp1c3Qgc2FpZCB3ZSBoYXZlIGlycQotCSAqIGxvY2FsbHkgZGlzYWJsZWQuIC1hcmNhCi0JICovCi0Jd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7Ci0JaGFuZGxlX3RpbWVyX3RpY2soKTsKLQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0bXVfaXJxID0gewotCS5uYW1lCQk9ICJ0aW1lciIsCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0bXUwX2lycSA9IHsKKwkubmFtZQkJPSAicGVyaW9kaWMgdGltZXIiLAogCS5oYW5kbGVyCT0gdG11X3RpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAogCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiB9OwogCi1zdGF0aWMgdm9pZCB0bXVfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgdG11MF9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTggZGl2aXNvciA9IFRNVTBfVENSX0lOSVQgJiAweDc7Ci0JY3RybF9vdXR3KFRNVTBfVENSX0lOSVQsIFRNVTBfVENSKTsKKwl1OCBkaXZpc29yID0gVE1VX1RDUl9JTklUICYgMHg3OworCWN0cmxfb3V0dyhUTVVfVENSX0lOSVQsIFRNVTBfVENSKTsKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICg0IDw8IChkaXZpc29yIDw8IDEpKTsKIH0KIAotc3RhdGljIHZvaWQgdG11X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgdG11MF9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1OCBkaXZpc29yID0gY3RybF9pbncoVE1VMF9UQ1IpICYgMHg3OwogCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDQgPDwgKGRpdmlzb3IgPDwgMSkpOwogfQogCi1zdGF0aWMgc3RydWN0IGNsa19vcHMgdG11X2Nsa19vcHMgPSB7Ci0JLmluaXQJCT0gdG11X2Nsa19pbml0LAotCS5yZWNhbGMJCT0gdG11X2Nsa19yZWNhbGMsCitzdGF0aWMgc3RydWN0IGNsa19vcHMgdG11MF9jbGtfb3BzID0geworCS5pbml0CQk9IHRtdTBfY2xrX2luaXQsCisJLnJlY2FsYwkJPSB0bXUwX2Nsa19yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB0bXUwX2NsayA9IHsKIAkubmFtZQkJPSAidG11MF9jbGsiLAotCS5vcHMJCT0gJnRtdV9jbGtfb3BzLAorCS5vcHMJCT0gJnRtdTBfY2xrX29wcywKIH07CiAKLXN0YXRpYyBpbnQgdG11X3RpbWVyX3N0YXJ0KHZvaWQpCitzdGF0aWMgdm9pZCB0bXUxX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljdHJsX291dGIoVE1VX1RTVFJfSU5JVCwgVE1VX1RTVFIpOwotCXJldHVybiAwOworCXU4IGRpdmlzb3IgPSBUTVVfVENSX0lOSVQgJiAweDc7CisJY3RybF9vdXR3KGRpdmlzb3IsIFRNVTFfVENSKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICg0IDw8IChkaXZpc29yIDw8IDEpKTsKIH0KIAotc3RhdGljIGludCB0bXVfdGltZXJfc3RvcCh2b2lkKQorc3RhdGljIHZvaWQgdG11MV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljdHJsX291dGIoMCwgVE1VX1RTVFIpOwotCXJldHVybiAwOworCXU4IGRpdmlzb3IgPSBjdHJsX2ludyhUTVUxX1RDUikgJiAweDc7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoNCA8PCAoZGl2aXNvciA8PCAxKSk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyB0bXUxX2Nsa19vcHMgPSB7CisJLmluaXQJCT0gdG11MV9jbGtfaW5pdCwKKwkucmVjYWxjCQk9IHRtdTFfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRtdTFfY2xrID0geworCS5uYW1lCQk9ICJ0bXUxX2NsayIsCisJLm9wcwkJPSAmdG11MV9jbGtfb3BzLAorfTsKKwogc3RhdGljIGludCB0bXVfdGltZXJfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7CisJdW5zaWduZWQgbG9uZyBmcmVxdWVuY3k7CiAKLQlzZXR1cF9pcnEoQ09ORklHX1NIX1RJTUVSX0lSUSwgJnRtdV9pcnEpOworCXNldHVwX2lycShDT05GSUdfU0hfVElNRVJfSVJRLCAmdG11MF9pcnEpOwogCiAJdG11MF9jbGsucGFyZW50ID0gY2xrX2dldChOVUxMLCAibW9kdWxlX2NsayIpOworCXRtdTFfY2xrLnBhcmVudCA9IGNsa19nZXQoTlVMTCwgIm1vZHVsZV9jbGsiKTsKIAotCS8qIFN0YXJ0IFRNVTAgKi8KIAl0bXVfdGltZXJfc3RvcCgpOworCiAjaWYgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkgJiYgXAogICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQpAQCAtMTU1LDE1ICsxNzksMjkgQEAKICNlbmRpZgogCiAJY2xrX3JlZ2lzdGVyKCZ0bXUwX2Nsayk7CisJY2xrX3JlZ2lzdGVyKCZ0bXUxX2Nsayk7CiAJY2xrX2VuYWJsZSgmdG11MF9jbGspOworCWNsa19lbmFibGUoJnRtdTFfY2xrKTsKIAotCWludGVydmFsID0gKGNsa19nZXRfcmF0ZSgmdG11MF9jbGspICsgSFogLyAyKSAvIEhaOwotCXByaW50ayhLRVJOX0lORk8gIkludGVydmFsID0gJWxkXG4iLCBpbnRlcnZhbCk7CisJZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKCZ0bXUwX2Nsayk7CisJaW50ZXJ2YWwgPSAoZnJlcXVlbmN5ICsgSFogLyAyKSAvIEhaOwogCi0JY3RybF9vdXRsKGludGVydmFsLCBUTVUwX1RDT1IpOwotCWN0cmxfb3V0bChpbnRlcnZhbCwgVE1VMF9UQ05UKTsKKwlzaF9ocHRfZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKCZ0bXUxX2Nsayk7CisJY3RybF9vdXRsKH4wLCBUTVUxX1RDTlQpOworCWN0cmxfb3V0bCh+MCwgVE1VMV9UQ09SKTsKIAotCXRtdV90aW1lcl9zdGFydCgpOworCXRtdTBfdGltZXJfc2V0X2ludGVydmFsKGludGVydmFsLCAxKTsKKworCXRtdTBfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKGZyZXF1ZW5jeSwgTlNFQ19QRVJfU0VDLAorCQkJCSAgICAgIHRtdTBfY2xvY2tldmVudC5zaGlmdCk7CisJdG11MF9jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9CisJCQljbG9ja2V2ZW50X2RlbHRhMm5zKC0xLCAmdG11MF9jbG9ja2V2ZW50KTsKKwl0bXUwX2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0KKwkJCWNsb2NrZXZlbnRfZGVsdGEybnMoMSwgJnRtdTBfY2xvY2tldmVudCk7CisKKwl0bXUwX2Nsb2NrZXZlbnQuY3B1bWFzayA9IGNwdW1hc2tfb2ZfY3B1KDApOworCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZ0bXUwX2Nsb2NrZXZlbnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzIsOSArMjEwLDcgQEAKIAkuaW5pdAkJPSB0bXVfdGltZXJfaW5pdCwKIAkuc3RhcnQJCT0gdG11X3RpbWVyX3N0YXJ0LAogCS5zdG9wCQk9IHRtdV90aW1lcl9zdG9wLAotI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCi0JLmdldF9vZmZzZXQJPSB0bXVfdGltZXJfZ2V0X29mZnNldCwKLSNlbmRpZgorCS5yZWFkCQk9IHRtdV90aW1lcl9yZWFkLAogfTsKIAogc3RydWN0IHN5c190aW1lciB0bXVfdGltZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXIuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci5jCmluZGV4IGE2YmNjOTEuLjRlN2U3NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyICpzeXNfdGltZXJzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyICpzeXNfdGltZXJzW10gPSB7CiAjaWZkZWYgQ09ORklHX1NIX1RNVQogCSZ0bXVfdGltZXIsCiAjZW5kaWYKQEAgLTI2LDcgKzI2LDcgQEAKIAlOVUxMLAogfTsKIAotc3RhdGljIGNoYXIgdGltZXJfb3ZlcnJpZGVbMTBdIF9faW5pdGRhdGE7CitzdGF0aWMgY2hhciB0aW1lcl9vdmVycmlkZVsxMF07CiBzdGF0aWMgaW50IF9faW5pdCB0aW1lcl9zZXR1cChjaGFyICpzdHIpCiB7CiAJaWYgKHN0cikKQEAgLTUzLDQgKzUzLDMgQEAKIAogCXJldHVybiBOVUxMOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYwppbmRleCA3YjQwZjBmLi41Yjc1Y2I2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKQEAgLTIwLDEwICsyMCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KIAogI2lmZGVmIENPTkZJR19TSF9LR0RCCiAjaW5jbHVkZSA8YXNtL2tnZGIuaD4KQEAgLTc2LDIwICs3Nyw2IEBACiAJfQogfQogCi1BVE9NSUNfTk9USUZJRVJfSEVBRChzaGRpZV9jaGFpbik7Ci0KLWludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZzaGRpZV9jaGFpbiwgbmIpOwotfQotRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9kaWVfbm90aWZpZXIpOwotCi1pbnQgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnNoZGllX2NoYWluLCBuYik7Ci19Ci1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKTsKLQogc3RhdGljIERFRklORV9TUElOTE9DSyhkaWVfbG9jayk7CiAKIHZvaWQgZGllKGNvbnN0IGNoYXIgKiBzdHIsIHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnIpCkBAIC0xMTUsNiArMTAyLDE2IEBACiAKIAlidXN0X3NwaW5sb2NrcygwKTsKIAlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKKworCWlmIChrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkpCisJCWNyYXNoX2tleGVjKHJlZ3MpOworCisJaWYgKGluX2ludGVycnVwdCgpKQorCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIGluIGludGVycnVwdCIpOworCisJaWYgKHBhbmljX29uX29vcHMpCisJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKKwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKQEAgLTUwNSw3ICs1MDIsNyBAQAogIHNpbXBsZToKIAlyZXQgPSBoYW5kbGVfdW5hbGlnbmVkX2lucyhpbnN0cnVjdGlvbixyZWdzKTsKIAlpZiAocmV0PT0wKQotCQlyZWdzLT5wYyArPSAyOworCQlyZWdzLT5wYyArPSBpbnN0cnVjdGlvbl9zaXplKGluc3RydWN0aW9uKTsKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmIC8qIENPTkZJR19DUFVfU0gyQSAqLwpAQCAtNTI3LDcgKzUyNCw3IEBACiAgKiAgICAgICBtaXNhbGlnbmVkIGRhdGEgYWNjZXNzCiAgKiAgICAgICBhY2Nlc3MgdG8gPj0gMHg4MDAwMDAwMCBpcyB1c2VyIG1vZGUKICAqIFVuZm9ydHVudGFseSB3ZSBjYW4ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGluc3RydWN0aW9uIGFkZHJlc3MgZXJyb3IKLSAqIGFuZCBkYXRhIGFkZHJlc3MgZXJyb3JzIGNhdXNlZCBieSByZWFkIGFjY2VzZXMuCisgKiBhbmQgZGF0YSBhZGRyZXNzIGVycm9ycyBjYXVzZWQgYnkgcmVhZCBhY2Nlc3Nlcy4KICAqLwogYXNtbGlua2FnZSB2b2lkIGRvX2FkZHJlc3NfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJIHVuc2lnbmVkIGxvbmcgd3JpdGVhY2Nlc3MsCkBAIC02ODIsNyArNjc5LDcgQEAKIAogCWVyciA9IGRvX2ZwdV9pbnN0KGluc3QsIHJlZ3MpOwogCWlmICghZXJyKSB7Ci0JCXJlZ3MtPnBjICs9IDI7CisJCXJlZ3MtPnBjICs9IGluc3RydWN0aW9uX3NpemUoaW5zdCk7CiAJCXJldHVybjsKIAl9CiAJLyogbm90IGEgRlBVIGluc3QuICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBkODMxNDNjLi40YzViNTdlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIyLDcgKzIyLDcgQEAKIAkqKC5lbXB0eV96ZXJvX3BhZ2UpCiAJfSA9IDAKICAgLnRleHQgOiB7Ci0JKigudGV4dCkKKwlURVhUX1RFWFQKIAlTQ0hFRF9URVhUCiAJTE9DS19URVhUCiAJKiguZml4dXApCkBAIC00MSw3ICs0MSw3IEBACiAgIEJVR19UQUJMRQogCiAgIC5kYXRhIDogewkJCS8qIERhdGEgKi8KLQkqKC5kYXRhKQorCURBVEFfREFUQQogCiAgCSAvKiBBbGlnbiB0aGUgaW5pdGlhbCByYW1kaXNrIGltYWdlIChJTklUUkQpIG9uIHBhZ2UgYm91bmRhcmllcy4gKi8KICAJIC4gPSBBTElHTihQQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwuYyBiL2FyY2gvc2gva2VybmVsL3ZzeXNjYWxsL3ZzeXNjYWxsLmMKaW5kZXggN2IwZjY2Zi4uMmFhOTQzOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwuYworKysgYi9hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFyY2gvc2gva2VybmVsL3ZzeXNjYWxsLmMKKyAqIGFyY2gvc2gva2VybmVsL3ZzeXNjYWxsL3ZzeXNjYWxsLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IFBhdWwgTXVuZHQKICAqCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLyoKICAqIFNob3VsZCB0aGUga2VybmVsIG1hcCBhIFZEU08gcGFnZSBpbnRvIHByb2Nlc3NlcyBhbmQgcGFzcyBpdHMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbGliL2RlbGF5LmMgYi9hcmNoL3NoL2xpYi9kZWxheS5jCmluZGV4IDM1MTcxNDYuLmYzZGRkMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9zaC9saWIvZGVsYXkuYwpAQCAtMjQsOSArMjQsMTAgQEAKIAlfX2FzbV9fKCJkbXVsdS5sCSUwLCAlMlxuXHQiCiAJCSJzdHMJbWFjaCwgJTAiCiAJCTogIj1yIiAoeGxvb3BzKQotCQk6ICIwIiAoeGxvb3BzKSwgInIiIChjcHVfZGF0YVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXS5sb29wc19wZXJfamlmZnkpCisJCTogIjAiICh4bG9vcHMpLAorCQkgICJyIiAoSFogKiBjcHVfZGF0YVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXS5sb29wc19wZXJfamlmZnkpCiAJCTogIm1hY2wiLCAibWFjaCIpOwotCV9fZGVsYXkoeGxvb3BzICogSFopOworCV9fZGVsYXkoeGxvb3BzKTsKIH0KIAogdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tYXRoLWVtdS9tYXRoLmMgYi9hcmNoL3NoL21hdGgtZW11L21hdGguYwppbmRleCAxZWZiYWMxLi5hMzhlMWVlIDEwMDY0NAotLS0gYS9hcmNoL3NoL21hdGgtZW11L21hdGguYworKysgYi9hcmNoL3NoL21hdGgtZW11L21hdGguYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8vIHRvIHByb2Nlc3MgZm1vdidzIGV4dGVudGlvbiAob2RkIG4gZm9yIERSIGFjY2VzcyBYRCkuCisvLyB0byBwcm9jZXNzIGZtb3YncyBleHRlbnNpb24gKG9kZCBuIGZvciBEUiBhY2Nlc3MgWEQpLgogI2RlZmluZSBGTU9WX0VYVCh4KSBpZih4JjEpIHgrPTE2LTEKIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9LY29uZmlnIGIvYXJjaC9zaC9tbS9LY29uZmlnCmluZGV4IDEyZjNkMzkuLjI1MzM0NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vS2NvbmZpZworKysgYi9hcmNoL3NoL21tL0tjb25maWcKQEAgLTIxOCw2ICsyMTgsOSBAQAogCiBtZW51ICJNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zIgogCitjb25maWcgUVVJQ0tMSVNUCisJZGVmX2Jvb2wgeQorCiBjb25maWcgTU1VCiAgICAgICAgIGJvb2wgIlN1cHBvcnQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGhhcmR3YXJlIgogCWRlcGVuZHMgb24gIUNQVV9TSDIKQEAgLTMwMCw2ICszMDMsMTAgQEAKIGNvbmZpZyBBUkNIX0ZMQVRNRU1fRU5BQkxFCiAJZGVmX2Jvb2wgeQogCitjb25maWcgTUFYX0FDVElWRV9SRUdJT05TCisJaW50CisJZGVmYXVsdCAiMSIKKwogY29uZmlnIEFSQ0hfUE9QVUxBVEVTX05PREVfTUFQCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NvcHlfcGFnZS5TIGIvYXJjaC9zaC9tbS9jb3B5X3BhZ2UuUwppbmRleCAzOTdjOTRjLi5hZTAzOWYyIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NvcHlfcGFnZS5TCisrKyBiL2FyY2gvc2gvbW0vY29weV9wYWdlLlMKQEAgLTEyOSw2ICsxMjksNyBAQAogCXJ0cwogCSBub3AKICNlbmRpZgorCS5hbGlnbiAyCiAuTHBzejoJLmxvbmcJUEFHRV9TSVpFCiAvKgogICogX19rZXJuZWxfc2l6ZV90IF9fY29weV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBfX2tlcm5lbF9zaXplX3Qgbik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2ZhdWx0LW5vbW11LmMgYi9hcmNoL3NoL21tL2ZhdWx0LW5vbW11LmMKaW5kZXggMzRkNGUwYy4uOTIzY2I0NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9mYXVsdC1ub21tdS5jCisrKyBiL2FyY2gvc2gvbW0vZmF1bHQtbm9tbXUuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2ZhdWx0LmMgYi9hcmNoL3NoL21tL2ZhdWx0LmMKaW5kZXggMGVjYzExNy4uYzg3OGZhYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvc2gvbW0vZmF1bHQuYwpAQCAtMTUsNDMgKzE1LDExIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2tnZGIuaD4KIAotI2lmZGVmIENPTkZJR19LUFJPQkVTCi1BVE9NSUNfTk9USUZJRVJfSEVBRChub3RpZnlfcGFnZV9mYXVsdF9jaGFpbik7Ci0KLS8qIEhvb2sgdG8gcmVnaXN0ZXIgZm9yIHBhZ2UgZmF1bHQgbm90aWZpY2F0aW9ucyAqLwotaW50IHJlZ2lzdGVyX3BhZ2VfZmF1bHRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZub3RpZnlfcGFnZV9mYXVsdF9jaGFpbiwgbmIpOwotfQotCi1pbnQgdW5yZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZub3RpZnlfcGFnZV9mYXVsdF9jaGFpbiwgbmIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChlbnVtIGRpZV92YWwgdmFsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkgICAgaW50IHRyYXAsIGludCBzaWcpCi17Ci0Jc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7Ci0JCS5yZWdzID0gcmVncywKLQkJLnRyYXBuciA9IHRyYXAsCi0JfTsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5vdGlmeV9wYWdlX2ZhdWx0X2NoYWluLCB2YWwsICZhcmdzKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChlbnVtIGRpZV92YWwgdmFsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkgICAgaW50IHRyYXAsIGludCBzaWcpCi17Ci0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotI2VuZGlmCi0KIC8qCiAgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBwYWdlIGZhdWx0cy4gIEl0IGRldGVybWluZXMgdGhlIGFkZHJlc3MsCiAgKiBhbmQgdGhlIHByb2JsZW0sIGFuZCB0aGVuIHBhc3NlcyBpdCBvZmYgdG8gb25lIG9mIHRoZSBhcHByb3ByaWF0ZQpAQCAtNjksMTEgKzM3LDYgQEAKIAlzaWdpbmZvX3QgaW5mbzsKIAogCXRyYWNlX2hhcmRpcnFzX29uKCk7Ci0KLQlpZiAobm90aWZ5X3BhZ2VfZmF1bHQoRElFX1BBR0VfRkFVTFQsIHJlZ3MsCi0JCQkgICAgICB3cml0ZWFjY2VzcywgU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCi0JCXJldHVybjsKLQogCWxvY2FsX2lycV9lbmFibGUoKTsKIAogI2lmZGVmIENPTkZJR19TSF9LR0RCCkBAIC0yODUsNyArMjQ4LDcgQEAKIAlwdGVfdCAqcHRlOwogCXB0ZV90IGVudHJ5OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0Jc3BpbmxvY2tfdCAqcHRsOworCXNwaW5sb2NrX3QgKnB0bCA9IE5VTEw7CiAJaW50IHJldCA9IDE7CiAKICNpZmRlZiBDT05GSUdfU0hfS0dEQgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9zaC9tbS9odWdldGxicGFnZS5jCmluZGV4IGNmMmMyZWUuLmFlOGMzMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3NoL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW5pdC5jIGIvYXJjaC9zaC9tbS9pbml0LmMKaW5kZXggNGQwMzA5OC4uZTBlNjQ0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pbml0LmMKKysrIGIvYXJjaC9zaC9tbS9pbml0LmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KQEAgLTY3LDYgKzY4LDggQEAKIAlwcmludGsoIiVkIHNsYWIgcGFnZXNcbiIsIHNsYWIpOwogCXByaW50aygiJWQgcGFnZXMgc2hhcmVkXG4iLCBzaGFyZWQpOwogCXByaW50aygiJWQgcGFnZXMgc3dhcCBjYWNoZWRcbiIsIGNhY2hlZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiVG90YWwgb2YgJWxkIHBhZ2VzIGluIHBhZ2UgdGFibGUgY2FjaGVcbiIsCisJICAgICAgIHF1aWNrbGlzdF90b3RhbF9zaXplKCkpOwogfQogCiAjaWZkZWYgQ09ORklHX01NVQpAQCAtMTEwLDcgKzExMyw3IEBACiAgKiBBcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3RoZXIgcGxhdGZvcm1zIHByZXNlcnZlIHRoZSBmaXhtYXAgbWFwcGluZwogICogYWNyb3NzIGEgY29udGV4dCBzd2l0Y2gsIHdlIGRvbid0IHByZXNlbnRseSBkbyB0aGlzLCBidXQgdGhpcyBjb3VsZCBiZSBkb25lCiAgKiBpbiBhIHNpbWlsYXIgZmFzaGlvbiBhcyB0byB0aGUgd2lyZWQgVExCIGludGVyZmFjZSB0aGF0IHNoNjQgdXNlcyAoYnkgd2F5Ci0gKiBvZiB0aGUgbWVtb3JyeSBtYXBwZWQgVVRMQiBjb25maWd1cmF0aW9uKSAtLSB0aGlzIHVuZm9ydHVuYXRlbHkgZm9yY2VzIHVzIHRvCisgKiBvZiB0aGUgbWVtb3J5IG1hcHBlZCBVVExCIGNvbmZpZ3VyYXRpb24pIC0tIHRoaXMgdW5mb3J0dW5hdGVseSBmb3JjZXMgdXMgdG8KICAqIGdpdmUgdXAgYSBUTEIgZW50cnkgZm9yIGVhY2ggbWFwcGluZyB3ZSB3YW50IHRvIHByZXNlcnZlLiBXaGlsZSB0aGlzIG1heSBiZQogICogdmlhYmxlIGZvciBhIHNtYWxsIG51bWJlciBvZiBmaXhtYXBzLCBpdCdzIG5vdCBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvcgogICogZXZlcnl0aGluZyBhbmQgbmVlZHMgdG8gYmUgY2FyZWZ1bGx5IGV2YWx1YXRlZC4gKGllLCB3ZSBtYXkgd2FudCB0aGlzIGZvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wbWIuYyBiL2FyY2gvc2gvbW0vcG1iLmMKaW5kZXggZDBkNDVlMi4uYjZhNWEzMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wbWIuYworKysgYi9hcmNoL3NoL21tL3BtYi5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFByaXZpbGVnZWQgU3BhY2UgTWFwcGluZyBCdWZmZXIgKFBNQikgU3VwcG9ydC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IFBhdWwgTXVuZHQKICAqCiAgKiBQMS9QMiBTZWN0aW9uIG1hcHBpbmcgZGVmaW5pdGlvbnMgZnJvbSBtYXAzMi5oLCB3aGljaCB3YXM6CiAgKgpAQCAtNjgsNiArNjgsMzIgQEAKIAlyZXR1cm4gbWtfcG1iX2VudHJ5KGVudHJ5KSB8IFBNQl9EQVRBOwogfQogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBtYl9saXN0X2xvY2spOworc3RhdGljIHN0cnVjdCBwbWJfZW50cnkgKnBtYl9saXN0OworCitzdGF0aWMgaW5saW5lIHZvaWQgcG1iX2xpc3RfYWRkKHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCit7CisJc3RydWN0IHBtYl9lbnRyeSAqKnAsICp0bXA7CisKKwlwID0gJnBtYl9saXN0OworCXdoaWxlICgodG1wID0gKnApICE9IE5VTEwpCisJCXAgPSAmdG1wLT5uZXh0OworCisJcG1iZS0+bmV4dCA9IHRtcDsKKwkqcCA9IHBtYmU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWJfbGlzdF9kZWwoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKK3sKKwlzdHJ1Y3QgcG1iX2VudHJ5ICoqcCwgKnRtcDsKKworCWZvciAocCA9ICZwbWJfbGlzdDsgKHRtcCA9ICpwKTsgcCA9ICZ0bXAtPm5leHQpCisJCWlmICh0bXAgPT0gcG1iZSkgeworCQkJKnAgPSB0bXAtPm5leHQ7CisJCQlyZXR1cm47CisJCX0KK30KKwogc3RydWN0IHBtYl9lbnRyeSAqcG1iX2FsbG9jKHVuc2lnbmVkIGxvbmcgdnBuLCB1bnNpZ25lZCBsb25nIHBwbiwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtODEsMTEgKzEwNywxOSBAQAogCXBtYmUtPnBwbgk9IHBwbjsKIAlwbWJlLT5mbGFncwk9IGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycSgmcG1iX2xpc3RfbG9jayk7CisJcG1iX2xpc3RfYWRkKHBtYmUpOworCXNwaW5fdW5sb2NrX2lycSgmcG1iX2xpc3RfbG9jayk7CisKIAlyZXR1cm4gcG1iZTsKIH0KIAogdm9pZCBwbWJfZnJlZShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQogeworCXNwaW5fbG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworCXBtYl9saXN0X2RlbChwbWJlKTsKKwlzcGluX3VubG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworCiAJa21lbV9jYWNoZV9mcmVlKHBtYl9jYWNoZSwgcG1iZSk7CiB9CiAKQEAgLTE2NywzMSArMjAxLDYgQEAKIAljbGVhcl9iaXQoZW50cnksICZwbWJfbWFwKTsKIH0KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhwbWJfbGlzdF9sb2NrKTsKLXN0YXRpYyBzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJfbGlzdDsKLQotc3RhdGljIGlubGluZSB2b2lkIHBtYl9saXN0X2FkZChzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQotewotCXN0cnVjdCBwbWJfZW50cnkgKipwLCAqdG1wOwotCi0JcCA9ICZwbWJfbGlzdDsKLQl3aGlsZSAoKHRtcCA9ICpwKSAhPSBOVUxMKQotCQlwID0gJnRtcC0+bmV4dDsKLQotCXBtYmUtPm5leHQgPSB0bXA7Ci0JKnAgPSBwbWJlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcG1iX2xpc3RfZGVsKHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCi17Ci0Jc3RydWN0IHBtYl9lbnRyeSAqKnAsICp0bXA7Ci0KLQlmb3IgKHAgPSAmcG1iX2xpc3Q7ICh0bXAgPSAqcCk7IHAgPSAmdG1wLT5uZXh0KQotCQlpZiAodG1wID09IHBtYmUpIHsKLQkJCSpwID0gdG1wLT5uZXh0OwotCQkJcmV0dXJuOwotCQl9Ci19CiAKIHN0YXRpYyBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKQEAgLTI4MywyNSArMjkyLDE0IEBACiAJfSB3aGlsZSAocG1iZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBtYl9jYWNoZV9jdG9yKHZvaWQgKnBtYiwgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyB2b2lkIHBtYl9jYWNoZV9jdG9yKHZvaWQgKnBtYiwgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IHBtYl9lbnRyeSAqcG1iZSA9IHBtYjsKIAogCW1lbXNldChwbWIsIDAsIHNpemVvZihzdHJ1Y3QgcG1iX2VudHJ5KSk7CiAKLQlzcGluX2xvY2tfaXJxKCZwbWJfbGlzdF9sb2NrKTsKLQogCXBtYmUtPmVudHJ5ID0gUE1CX05PX0VOVFJZOwotCXBtYl9saXN0X2FkZChwbWJlKTsKLQotCXNwaW5fdW5sb2NrX2lycSgmcG1iX2xpc3RfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBtYl9jYWNoZV9kdG9yKHZvaWQgKnBtYiwgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlzcGluX2xvY2tfaXJxKCZwbWJfbGlzdF9sb2NrKTsKLQlwbWJfbGlzdF9kZWwocG1iKTsKLQlzcGluX3VubG9ja19pcnEoJnBtYl9saXN0X2xvY2spOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwbWJfaW5pdCh2b2lkKQpAQCAtMzExLDkgKzMwOSw4IEBACiAKIAlCVUdfT04odW5saWtlbHkobnJfZW50cmllcyA+PSBOUl9QTUJfRU5UUklFUykpOwogCi0JcG1iX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInBtYiIsIHNpemVvZihzdHJ1Y3QgcG1iX2VudHJ5KSwKLQkJCQkgICAgICAwLCAwLCBwbWJfY2FjaGVfY3RvciwgcG1iX2NhY2hlX2R0b3IpOwotCUJVR19PTighcG1iX2NhY2hlKTsKKwlwbWJfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicG1iIiwgc2l6ZW9mKHN0cnVjdCBwbWJfZW50cnkpLCAwLAorCQkJCSAgICAgIFNMQUJfUEFOSUMsIHBtYl9jYWNoZV9jdG9yLCBOVUxMKTsKIAogCWp1bXBfdG9fUDIoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCmluZGV4IDU1NGY4MDEuLmZiNDBmMTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTcsOCArNywxMSBAQAogIwogU0UJCQlTSF9TT0xVVElPTl9FTkdJTkUKIDc3NTFTRQkJCVNIXzc3NTFfU09MVVRJT05fRU5HSU5FCQkKKzc3MjJTRQkJCVNIXzc3MjJfU09MVVRJT05fRU5HSU5FCQkKIDczMDBTRQkJCVNIXzczMDBfU09MVVRJT05fRU5HSU5FCiA3MzQzU0UJCQlTSF83MzQzX1NPTFVUSU9OX0VOR0lORQorNzIwNlNFCQkJU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUKKzc2MTlTRQkJCVNIXzc2MTlfU09MVVRJT05fRU5HSU5FCiA3NzgwU0UJCQlTSF83NzgwX1NPTFVUSU9OX0VOR0lORQogNzMxODBTRQkJCVNIXzczMTgwX1NPTFVUSU9OX0VOR0lORQogNzc1MVNZU1RFTUgJCVNIXzc3NTFfU1lTVEVNSApAQCAtMzEsNSArMzQsMyBAQAogVElUQU4JCQlTSF9USVRBTgogU0hNSU4JCQlTSF9TSE1JTgogNzcxMFZPSVBHVwkJU0hfNzcxMFZPSVBHVwotNzIwNlNFCQkJU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUKLTc2MTlTRQkJCVNIXzc2MTlfU09MVVRJT05fRU5HSU5FCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQvS2NvbmZpZyBiL2FyY2gvc2g2NC9LY29uZmlnCmluZGV4IGUxNGI1MzMuLmZmNjU0MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9LY29uZmlnCisrKyBiL2FyY2gvc2g2NC9LY29uZmlnCkBAIC0xNyw2ICsxNyw5IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgUVVJQ0tMSVNUCisJZGVmX2Jvb2wgeQorCiBjb25maWcgUldTRU1fR0VORVJJQ19TUElOTE9DSwogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9jb25maWdzL2NheW1hbl9kZWZjb25maWcgYi9hcmNoL3NoNjQvY29uZmlncy9jYXltYW5fZGVmY29uZmlnCmluZGV4IGQ4MWRmNTcuLmVkMDM1MDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9jb25maWdzL2NheW1hbl9kZWZjb25maWcKKysrIGIvYXJjaC9zaDY0L2NvbmZpZ3MvY2F5bWFuX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOAotIyBUdWUgT2N0ICAzIDEzOjMwOjUxIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi1yYzEKKyMgTW9uIE1heSAxNCAwODo0MzozMSAyMDA3CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkg2ND15CkBAIC0xMCw2ICsxMCw4IEBACiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMzMsMTMgKzM1LDE1IEBACiAjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19VSUQxNj15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTQ5LDE0ICs1MywxOSBAQAogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTEzNSw3ICsxNDQsNyBAQAogIwogQ09ORklHX0hFQVJUQkVBVD15CiBDT05GSUdfSERTUDI1M19MRUQ9eQotQ09ORklHX1NIX0RNQT15CisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKQEAgLTE0NiwyMyArMTU1LDIwIEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgTUNBLCBJU0EpCiAjCiBDT05GSUdfUENJPXkKIENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQotIyBDT05GSUdfUENJX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAogIwogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKICMKQEAgLTE4MCwxMyArMTg2LDEzIEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0yMDcsMTEgKzIxMywxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldApAQCAtMjU2LDcgKzI2NCwxNiBAQAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMjY5LDE2ICsyODYsMTMgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwogIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCiAjCiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiAKICMKQEAgLTI4OSw2ICszMDMsNyBAQAogIwogIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKICMKKyMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAogCiAjCiAjIEJsb2NrIGRldmljZXMKQEAgLTMwNiwxMSArMzIxLDE4IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKIENPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfQkxJTksgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0zMjAsNiArMzQyLDcgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCkBAIC0zMzksNiArMzYyLDcgQEAKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIFRyYW5zcG9ydHMKQEAgLTM3OCwxOCArNDAyLDE2IEBACiBDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCisjIENPTkZJR19TQ1NJX0VTUF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKQEAgLTQwOCw2ICs0MzAsNyBAQAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAKICMKQEAgLTQyOCwxMCArNDUxLDYgQEAKICMgQVJDbmV0IGRldmljZXMKICMKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogCiAjCkBAIC00NzksMTAgKzQ5OCw4IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKQEAgLTQ5OCwxNCArNTE1LDE2IEBACiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NTFg0X0RFQlVHPXkKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTUxMywxMyArNTMyLDEwIEBACiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjIFdpcmVsZXNzIExBTgogIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKQEAgLTU3MSw5ICs1ODcsMTcgQEAKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTYxOSwxMCArNjQzLDYgQEAKICMgSVBNSQogIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNjM5LDEzICs2NTksOCBAQAogIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtNjUzLDExICs2NjgsNyBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKK0NPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKQEAgLTY2OSw0NCArNjgwLDYwIEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0RBQj15CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKICMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKQEAgLTcyMCwxMyArNzQ3LDE3IEBACiAjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKIENPTkZJR19GQl9LWVJPPXkKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCiAjCkBAIC03NDYsMTAgKzc3Nyw2IEBACiAjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19MT0dPPXkKICMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKQEAgLTc1Nyw3ICs3ODQsNiBAQAogIyBDT05GSUdfTE9HT19TVVBFUkhfTU9OTyBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX1NVUEVSSF9WR0ExNiBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC03NjUsNiArNzkxLDEyIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtNzgwLDEwICs4MTIsNiBAQAogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKQEAgLTgzNiw2ICs4NjQsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTg0Myw2ICs4NzIsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlOSVhfRlM9eQogQ09ORklHX1JPTUZTX0ZTPXkKQEAgLTkxMiw2ICs5NDIsNyBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtOTQxLDYgKzk3Miw3IEBACiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogCiAjCiAjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CkBAIC05NDgsNiArOTgwLDExIEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTk1OSwyOCArOTk2LDI5IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiBDT05GSUdfU0NIRURTVEFUUz15CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMX1dJVEhfR0RCX1NUVUIgaXMgbm90IHNldAogQ09ORklHX1NINjRfUFJPQ19UTEI9eQpAQCAtMTAwNCwxMCArMTA0MiwxNSBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3NoNjQva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IDhjOGE3NmUuLjRmOTEzMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtNzksNyArNzksNyBAQAogCS5uYW1lCQk9ICJzY2lmY29uIiwKIAkud3JpdGUJCT0gc2hfY29uc29sZV93cml0ZSwKIAkuc2V0dXAJCT0gc2hfY29uc29sZV9zZXR1cCwKLQkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5mbGFncwkJPSBDT05fUFJJTlRCVUZGRVIgfCBDT05fQk9PVCwKIAkuaW5kZXgJCT0gLTEsCiB9OwogCkBAIC05Nyw5ICs5NywzIEBACiAKIAlyZWdpc3Rlcl9jb25zb2xlKCZzaF9jb25zb2xlKTsKIH0KLQotdm9pZCBkaXNhYmxlX2Vhcmx5X3ByaW50ayh2b2lkKQotewotCXVucmVnaXN0ZXJfY29uc29sZSgmc2hfY29uc29sZSk7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvc2g2NC9rZXJuZWwvZW50cnkuUwppbmRleCA0MGQ0NTM0Li43MDEzZmNiIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9lbnRyeS5TCkBAIC05NDcsMTQgKzk0NywxNCBAQAogCSEgRklYTUU6ISEhCiAJISBubyBoYW5kbGluZyBvZiBUSUZfU1lTQ0FMTF9UUkFDRSB5ZXQhIQogCi0JbW92aQkoMSA8PCBUSUZfTkVFRF9SRVNDSEVEKSwgcjgKKwltb3ZpCV9USUZfTkVFRF9SRVNDSEVELCByOAogCWFuZAlyOCwgcjcsIHI4CiAJcHRhCXdvcmtfcmVzY2hlZCwgdHIwCiAJYm5lCXI4LCBaRVJPLCB0cjAKIAogCXB0YQlyZXN0b3JlX2FsbCwgdHIxCiAKLQltb3ZpCSgxIDw8IFRJRl9TSUdQRU5ESU5HKSwgcjgKKwltb3ZpCShfVElGX1NJR1BFTkRJTkcgfCBfVElGX1JFU1RPUkVfU0lHTUFTSyksIHI4CiAJYW5kCXI4LCByNywgcjgKIAlwdGEJd29ya19ub3RpZnlzaWcsIHRyMAogCWJuZQlyOCwgWkVSTywgdHIwCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL2lycS5jIGIvYXJjaC9zaDY0L2tlcm5lbC9pcnEuYwppbmRleCBlN2UwN2Y4Li45NDEyYjcxIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc2g2NC9rZXJuZWwvaXJxLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KQEAgLTk1LDYgKzk0LDcgQEAKICAqLwogYXNtbGlua2FnZSBpbnQgZG9fSVJRKHVuc2lnbmVkIGxvbmcgdmVjdG9yX251bSwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogeworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKIAlpbnQgaXJxOwogCiAJaXJxX2VudGVyKCk7CkBAIC0xMDIsMTMgKzEwMiwxNCBAQAogCWlycSA9IGlycV9kZW11eCh2ZWN0b3JfbnVtKTsKIAogCWlmIChpcnEgPj0gMCkgewotCQlfX2RvX0lSUShpcnEsIHJlZ3MpOworCQlfX2RvX0lSUShpcnEpOwogCX0gZWxzZSB7CiAJCXByaW50aygidW5leHBlY3RlZCBJUlEgdHJhcCBhdCB2ZWN0b3IgJTAzbHhcbiIsIHZlY3Rvcl9udW0pOwogCX0KIAogCWlycV9leGl0KCk7CiAKKwlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL3BjaV9zaDUuYyBiL2FyY2gvc2g2NC9rZXJuZWwvcGNpX3NoNS5jCmluZGV4IDlkYWU2ODkuLmZiNTE2NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvcGNpX3NoNS5jCisrKyBiL2FyY2gvc2g2NC9rZXJuZWwvcGNpX3NoNS5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMzQxLDggKzM0MCw5IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotaXJxcmV0dXJuX3QgcGNpc2g1X2Vycl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpcnFyZXR1cm5fdCBwY2lzaDVfZXJyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAl1bnNpZ25lZCBwY2lfaW50LCBwY2lfYWlyLCBwY2lfY2lyLCBwY2lfYWludDsKIAogCXBjaV9pbnQgPSBTSDVQQ0lfUkVBRChJTlQpOwpAQCAtMzY5LDE1ICszNjksMTMgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLWlycXJldHVybl90IHBjaXNoNV9zZXJyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGlycXJldHVybl90IHBjaXNoNV9zZXJyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJcHJpbnRrKCJTRVJSIElSUVxuIik7CiAKIAlyZXR1cm4gSVJRX05PTkU7CiB9CiAKLSNkZWZpbmUgUk9VTkRfVVAoeCwgYSkJCSgoKHgpICsgKGEpIC0gMSkgJiB+KChhKSAtIDEpKQotCiBzdGF0aWMgdm9pZCBfX2luaXQKIHBjaWJpb3Nfc2l6ZV9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHJlc291cmNlICppb3IsCiAJCSAgICBzdHJ1Y3QgcmVzb3VyY2UgKm1lbXIpCkBAIC00MzQsOCArNDMyLDggQEAKIAltZW1fcmVzLmVuZCAtPSBtZW1fcmVzLnN0YXJ0OwogCiAJLyogQWxpZ24gdGhlIHNpemVzIHVwIGJ5IGJyaWRnZSBydWxlcyAqLwotCWlvX3Jlcy5lbmQgPSBST1VORF9VUChpb19yZXMuZW5kLCA0KjEwMjQpIC0gMTsKLQltZW1fcmVzLmVuZCA9IFJPVU5EX1VQKG1lbV9yZXMuZW5kLCAxKjEwMjQqMTAyNCkgLSAxOworCWlvX3Jlcy5lbmQgPSBBTElHTihpb19yZXMuZW5kLCA0KjEwMjQpIC0gMTsKKwltZW1fcmVzLmVuZCA9IEFMSUdOKG1lbV9yZXMuZW5kLCAxKjEwMjQqMTAyNCkgLSAxOwogCiAJLyogQWRqdXN0IHRoZSBicmlkZ2UncyBhbGxvY2F0aW9uIHJlcXVpcmVtZW50cyAqLwogCWJyaWRnZS0+cmVzb3VyY2VbMF0uZW5kID0gYnJpZGdlLT5yZXNvdXJjZVswXS5zdGFydCArIGlvX3Jlcy5lbmQ7CkBAIC00NDgsMTggKzQ0NiwxNiBAQAogCiAJLyogYWRqdXN0IHBhcmVudCdzIHJlc291cmNlIHJlcXVpcmVtZW50cyAqLwogCWlmIChpb3IpIHsKLQkJaW9yLT5lbmQgPSBST1VORF9VUChpb3ItPmVuZCwgNCoxMDI0KTsKKwkJaW9yLT5lbmQgPSBBTElHTihpb3ItPmVuZCwgNCoxMDI0KTsKIAkJaW9yLT5lbmQgKz0gaW9fcmVzLmVuZDsKIAl9CiAKIAlpZiAobWVtcikgewotCQltZW1yLT5lbmQgPSBST1VORF9VUChtZW1yLT5lbmQsIDEqMTAyNCoxMDI0KTsKKwkJbWVtci0+ZW5kID0gQUxJR04obWVtci0+ZW5kLCAxKjEwMjQqMTAyNCk7CiAJCW1lbXItPmVuZCArPSBtZW1fcmVzLmVuZDsKIAl9CiB9CiAKLSN1bmRlZiBST1VORF9VUAotCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNpYmlvc19zaXplX2JyaWRnZXModm9pZCkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgaW9fcmVzLCBtZW1fcmVzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9wY2lfc2g1LmggYi9hcmNoL3NoNjQva2VybmVsL3BjaV9zaDUuaAppbmRleCA4ZjIxZjVkLi5jNzExNTlkIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3BjaV9zaDUuaAorKysgYi9hcmNoL3NoNjQva2VybmVsL3BjaV9zaDUuaApAQCAtNCw3ICs0LDcgQEAKICAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqCi0gKiBEZWZpbnRpb25zIGZvciB0aGUgU0g1IFBDSSBoYXJkd2FyZS4KKyAqIERlZmluaXRpb25zIGZvciB0aGUgU0g1IFBDSSBoYXJkd2FyZS4KICAqLwogCiAvKiBQcm9kdWN0IElEICovCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc2g2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDUyNWQwZWMuLjFiODljOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc2g2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zODcsNyArMzg3LDcgQEAKICAqIE5PVEUhIE9ubHkgYSBrZXJuZWwtb25seSBwcm9jZXNzKGllIHRoZSBzd2FwcGVyIG9yIGRpcmVjdCBkZXNjZW5kYW50cwogICogd2hvIGhhdmVuJ3QgZG9uZSBhbiAiZXhlY3ZlKCkiKSBzaG91bGQgdXNlIHRoaXM6IGl0IHdpbGwgd29yayB3aXRoaW4KICAqIGEgc3lzdGVtIGNhbGwgZnJvbSBhICJyZWFsIiBwcm9jZXNzLCBidXQgdGhlIHByb2Nlc3MgbWVtb3J5IHNwYWNlIHdpbGwKLSAqIG5vdCBiZSBmcmVlJ2QgdW50aWwgYm90aCB0aGUgcGFyZW50IGFuZCB0aGUgY2hpbGQgaGF2ZSBleGl0ZWQuCisgKiBub3QgYmUgZnJlZWQgdW50aWwgYm90aCB0aGUgcGFyZW50IGFuZCB0aGUgY2hpbGQgaGF2ZSBleGl0ZWQuCiAgKi8KIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9zaF9rc3ltcy5jIGIvYXJjaC9zaDY0L2tlcm5lbC9zaF9rc3ltcy5jCmluZGV4IDdhYTRiNGYuLjQ2MWVhM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvc2hfa3N5bXMuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3NoX2tzeW1zLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KIAogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3NoNjQva2VybmVsL3NpZ25hbC5jCmluZGV4IDE2NjZkM2UuLmM4NTI1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9zaWduYWwuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC02OTksNyArNjk4LDkgQEAKIAlpZiAodHJ5X3RvX2ZyZWV6ZSgpKQogCQlnb3RvIG5vX3NpZ25hbDsKIAotCWlmICghb2xkc2V0KQorCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQorCQlvbGRzZXQgPSAmY3VycmVudC0+c2F2ZWRfc2lnbWFzazsKKwllbHNlIGlmICghb2xkc2V0KQogCQlvbGRzZXQgPSAmY3VycmVudC0+YmxvY2tlZDsKIAogCXNpZ25yID0gZ2V0X3NpZ25hbF90b19kZWxpdmVyKCZpbmZvLCAma2EsIHJlZ3MsIDApOwpAQCAtNzA3LDYgKzcwOCwxNSBAQAogCWlmIChzaWduciA+IDApIHsKIAkJLyogV2hlZSEgIEFjdHVhbGx5IGRlbGl2ZXIgdGhlIHNpZ25hbC4gICovCiAJCWhhbmRsZV9zaWduYWwoc2lnbnIsICZpbmZvLCAma2EsIG9sZHNldCwgcmVncyk7CisKKwkJLyoKKwkJICogSWYgYSBzaWduYWwgd2FzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQsIHRoZSBzYXZlZCBzaWdtYXNrCisJCSAqIGlzIGluIGl0cyBmcmFtZSwgYW5kIHdlIGNhbiBjbGVhciB0aGUgVElGX1JFU1RPUkVfU0lHTUFTSworCQkgKiBmbGFnLgorCQkgKi8KKwkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpCisJCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKTsKKwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTcxNCwxMyArNzI0LDI3IEBACiAJLyogRGlkIHdlIGNvbWUgZnJvbSBhIHN5c3RlbSBjYWxsPyAqLwogCWlmIChyZWdzLT5zeXNjYWxsX25yID49IDApIHsKIAkJLyogUmVzdGFydCB0aGUgc3lzdGVtIGNhbGwgLSBubyBoYW5kbGVycyBwcmVzZW50ICovCi0JCWlmIChyZWdzLT5yZWdzW1JFR19SRVRdID09IC1FUkVTVEFSVE5PSEFORCB8fAotCQkgICAgcmVncy0+cmVnc1tSRUdfUkVUXSA9PSAtRVJFU1RBUlRTWVMgfHwKLQkJICAgIHJlZ3MtPnJlZ3NbUkVHX1JFVF0gPT0gLUVSRVNUQVJUTk9JTlRSKSB7CisJCXN3aXRjaCAocmVncy0+cmVnc1tSRUdfUkVUXSkgeworCQljYXNlIC1FUkVTVEFSVE5PSEFORDoKKwkJY2FzZSAtRVJFU1RBUlRTWVM6CisJCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgogCQkJLyogRGVjb2RlIFN5c2NhbGwgIyAqLwogCQkJcmVncy0+cmVnc1tSRUdfUkVUXSA9IHJlZ3MtPnN5c2NhbGxfbnI7CiAJCQlyZWdzLT5wYyAtPSA0OworCQkJYnJlYWs7CisKKwkJY2FzZSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOgorCQkJcmVncy0+cmVnc1tSRUdfUkVUXSA9IF9fTlJfcmVzdGFydF9zeXNjYWxsOworCQkJcmVncy0+cGMgLT0gNDsKKwkJCWJyZWFrOwogCQl9CiAJfQorCisJLyogTm8gc2lnbmFsIHRvIGRlbGl2ZXIgLS0gcHV0IHRoZSBzYXZlZCBzaWdtYXNrIGJhY2sgKi8KKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKSkgeworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKTsKKwkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZjdXJyZW50LT5zYXZlZF9zaWdtYXNrLCBOVUxMKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvc3lzX3NoNjQuYyBiL2FyY2gvc2g2NC9rZXJuZWwvc3lzX3NoNjQuYwppbmRleCBhZDBmYTRlLi4xOTEyNmRhIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3N5c19zaDY0LmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9zeXNfc2g2NC5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAjaW5jbHVkZSA8bGludXgvbXNnLmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL3N5c2NhbGxzLlMgYi9hcmNoL3NoNjQva2VybmVsL3N5c2NhbGxzLlMKaW5kZXggYzAwNzlkNS4uYTVjNjgwZCAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L2tlcm5lbC9zeXNjYWxscy5TCisrKyBiL2FyY2gvc2g2NC9rZXJuZWwvc3lzY2FsbHMuUwpAQCAtMiw3ICsyLDcgQEAKICAqIGFyY2gvc2g2NC9rZXJuZWwvc3lzY2FsbHMuUwogICoKICAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSAgUGFvbG8gQWxiZXJlbGxpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDcgIFBhdWwgTXVuZHQKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBSaWNoYXJkIEN1cm5vdwogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC0yMCw3ICsyMCw3IEBACiAgKi8KIAkuZ2xvYmwgIHN5c19jYWxsX3RhYmxlCiBzeXNfY2FsbF90YWJsZToKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogMCAgLSAgb2xkICJzZXR1cCgpIiBzeXN0ZW0gY2FsbCAgKi8KKwkubG9uZyBzeXNfcmVzdGFydF9zeXNjYWxsCS8qIDAgIC0gIG9sZCAic2V0dXAoKSIgc3lzdGVtIGNhbGwgICovCiAJLmxvbmcgc3lzX2V4aXQKIAkubG9uZyBzeXNfZm9yawogCS5sb25nIHN5c19yZWFkCkBAIC0zNDcsNCArMzQ3LDM0IEBACiAJLmxvbmcgc3lzX2lub3RpZnlfaW5pdAogCS5sb25nIHN5c19pbm90aWZ5X2FkZF93YXRjaAogCS5sb25nIHN5c19pbm90aWZ5X3JtX3dhdGNoCS8qIDMyMCAqLwotCisJLmxvbmcgc3lzX25pX3N5c2NhbGwKKwkubG9uZyBzeXNfbWlncmF0ZV9wYWdlcworCS5sb25nIHN5c19vcGVuYXQKKwkubG9uZyBzeXNfbWtkaXJhdAorCS5sb25nIHN5c19ta25vZGF0CQkvKiAzMjUgKi8KKwkubG9uZyBzeXNfZmNob3duYXQKKwkubG9uZyBzeXNfZnV0aW1lc2F0CisJLmxvbmcgc3lzX2ZzdGF0YXQ2NAorCS5sb25nIHN5c191bmxpbmthdAorCS5sb25nIHN5c19yZW5hbWVhdAkJLyogMzMwICovCisJLmxvbmcgc3lzX2xpbmthdAorCS5sb25nIHN5c19zeW1saW5rYXQKKwkubG9uZyBzeXNfcmVhZGxpbmthdAorCS5sb25nIHN5c19mY2htb2RhdAorCS5sb25nIHN5c19mYWNjZXNzYXQJCS8qIDMzNSAqLworCS5sb25nIHN5c19wc2VsZWN0NgorCS5sb25nIHN5c19wcG9sbAorCS5sb25nIHN5c191bnNoYXJlCisJLmxvbmcgc3lzX3NldF9yb2J1c3RfbGlzdAorCS5sb25nIHN5c19nZXRfcm9idXN0X2xpc3QJLyogMzQwICovCisJLmxvbmcgc3lzX3NwbGljZQorCS5sb25nIHN5c19zeW5jX2ZpbGVfcmFuZ2UKKwkubG9uZyBzeXNfdGVlCisJLmxvbmcgc3lzX3Ztc3BsaWNlCisJLmxvbmcgc3lzX21vdmVfcGFnZXMJCS8qIDM0NSAqLworCS5sb25nIHN5c19nZXRjcHUKKwkubG9uZyBzeXNfZXBvbGxfcHdhaXQKKwkubG9uZyBzeXNfdXRpbWVuc2F0CisJLmxvbmcgc3lzX3NpZ25hbGZkCisJLmxvbmcgc3lzX3RpbWVyZmQJCS8qIDM1MCAqLworCS5sb25nIHN5c19ldmVudGZkCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL3RpbWUuYyBiL2FyY2gvc2g2NC9rZXJuZWwvdGltZS5jCmluZGV4IDM5MGI0MGQuLmIzN2Y0ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvc2g2NC9rZXJuZWwvdGltZS5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc2NhbGVkX3JlY2lwX2N0Y190aWNrc19wZXJfamlmZnk7CiAKIC8qIEVzdGltYXRlIG51bWJlciBvZiBtaWNyb3NlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZXIgdGljaywKLSAgIGJ5IHNjYWxpbmcgdGhlIGRlbHRhIHRoYXQgaGFzIG9jY3VyZWQgaW4gdGhlIENUQyByZWdpc3Rlci4KKyAgIGJ5IHNjYWxpbmcgdGhlIGRlbHRhIHRoYXQgaGFzIG9jY3VycmVkIGluIHRoZSBDVEMgcmVnaXN0ZXIuCiAKICAgIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HIDogVGhpcyBhbGdvcml0aG0gcmVsaWVzIG9uIHRoZSBDVEMgZGVjcmVtZW50aW5nIGF0CiAgICB0aGUgQ1BVIGNsb2NrIHJhdGUuICBJZiB0aGUgQ1BVIHNsZWVwcywgdGhlIENUQyBzdG9wcyBjb3VudGluZy4gIEJlYXIgdGhpcwpAQCAtMjgyLDcgKzI4Miw3IEBACiAgKiB0aW1lcl9pbnRlcnJ1cHQoKSBuZWVkcyB0byBrZWVwIHVwIHRoZSByZWFsLXRpbWUgY2xvY2ssCiAgKiBhcyB3ZWxsIGFzIGNhbGwgdGhlICJkb190aW1lcigpIiByb3V0aW5lIGV2ZXJ5IGNsb2NrdGljawogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZG9fdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGlubGluZSB2b2lkIGRvX3RpbWVyX2ludGVycnVwdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50X2N0YzsKIAlhc20gKCJnZXRjb24gY3I2MiwgJTAiIDogIj1yIiAoY3VycmVudF9jdGMpKTsKQEAgLTI5MCw5ICsyOTAsMTAgQEAKIAogCWRvX3RpbWVyKDEpOwogI2lmbmRlZiBDT05GSUdfU01QCi0JdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKKwl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKICNlbmRpZgotCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HLCByZWdzKTsKKwlpZiAoY3VycmVudC0+cGlkKQorCQlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORyk7CiAKICNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCiAJewpAQCAtMzIzLDcgKzMyNCw3IEBACiAgKiBUaW1lIFN0YW1wIENvdW50ZXIgdmFsdWUgYXQgdGhlIHRpbWUgb2YgdGhlIHRpbWVyIGludGVycnVwdCwgc28gdGhhdAogICogd2UgbGF0ZXIgb24gY2FuIGVzdGltYXRlIHRoZSB0aW1lIG9mIGRheSBtb3JlIGV4YWN0bHkuCiAgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXVuc2lnbmVkIGxvbmcgdGltZXJfc3RhdHVzOwogCkBAIC0zNDAsNyArMzQxLDcgQEAKIAkgKiBsb2NhbGx5IGRpc2FibGVkLiAtYXJjYQogCSAqLwogCXdyaXRlX2xvY2soJnh0aW1lX2xvY2spOwotCWRvX3RpbWVyX2ludGVycnVwdChpcnEsIHJlZ3MpOworCWRvX3RpbWVyX2ludGVycnVwdCgpOwogCXdyaXRlX3VubG9jaygmeHRpbWVfbG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC00NjUsOSArNDY2LDEwIEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGlycXJldHVybl90IHNoNjRfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCi0JCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2g2NF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOworCiAJY3RybF9vdXRiKDAsIFJDUjEpOwkvKiBEaXNhYmxlIENhcnJ5IEludGVycnVwdHMgKi8KIAlyZWdzLT5yZWdzWzNdID0gMTsJLyogVXNpbmcgcjMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zaDY0L2tlcm5lbC90cmFwcy5jCmluZGV4IGMzNDZkN2UuLjlkMGQ1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3RyYXBzLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC91bndpbmQuYyBiL2FyY2gvc2g2NC9rZXJuZWwvdW53aW5kLmMKaW5kZXggZjkzNGY5Ny4uMTIxNGM3OCAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L2tlcm5lbC91bndpbmQuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3Vud2luZC5jCkBAIC00NiwxNSArNDYsMTUgQEAKIAkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJY29uc3QgY2hhciAqc3ltOwotCWNoYXIgKm1vZG5hbWUsIG5hbWVidWZbMTI4XTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTsKKwljaGFyIG5hbWVidWZbMTI4XTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIHByb2xvZ3VlID0gMDsKIAl1bnNpZ25lZCBsb25nIGZwX2Rpc3BsYWNlbWVudCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmcF9wcmV2ID0gMDsKIAl1bnNpZ25lZCBsb25nIG9mZnNldF9yMTQgPSAwLCBvZmZzZXRfcjE4ID0gMDsKIAlpbnQgaSwgZm91bmRfcHJvbG9ndWVfZW5kID0gMDsKIAotCXN5bSA9IGthbGxzeW1zX2xvb2t1cChwYywgJnNpemUsICZvZmZzZXQsICZtb2RuYW1lLCBuYW1lYnVmKTsKKwlzeW0gPSBrYWxsc3ltc19sb29rdXAocGMsIE5VTEwsICZvZmZzZXQsIE5VTEwsIG5hbWVidWYpOwogCWlmICghc3ltKQogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zaDY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDRmOTYxNmYuLjAyYWVhODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3NoNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTU0LDcgKzU0LDcgQEAKIAl9ID0gMAogCiAgIC50ZXh0IDogQ19QSFlTKC50ZXh0KSB7Ci0JKigudGV4dCkKKwlURVhUX1RFWFQKIAkqKC50ZXh0NjQpCiAgICAgICAgICooLnRleHQuLlNIbWVkaWEzMikKIAlTQ0hFRF9URVhUCkBAIC03OCw3ICs3OCw3IEBACiAgIF9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLwogCiAgIC5kYXRhIDogQ19QSFlTKC5kYXRhKSB7CQkJLyogRGF0YSAqLwotCSooLmRhdGEpCisJREFUQV9EQVRBCiAJQ09OU1RSVUNUT1JTCiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQvbGliLy5naXRpZ25vcmUgYi9hcmNoL3NoNjQvbGliLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwOGMyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2g2NC9saWIvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitzeXNjYWxsdGFiLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9pcnEuYyBiL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9pcnEuYwppbmRleCAyMjhjZTYxLi5hYWFkMzZkIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbWFjaC1jYXltYW4vaXJxLmMKKysrIGIvYXJjaC9zaDY0L21hY2gtY2F5bWFuL2lycS5jCkBAIC0yOSwxMyArMjksMTMgQEAKIC8qIE5vdGUgdGhlIFNNU0MgU3VwZXJJTyBjaGlwIGFuZCBTTVNDIExBTiBjaGlwIGludGVycnVwdHMgYXJlIGFsbCBtdXhlZCBvbnRvCiAgICB0aGUgc2FtZSBTSC01IGludGVycnVwdCAqLwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgY2F5bWFuX2ludGVycnVwdF9zbXNjKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaXJxcmV0dXJuX3QgY2F5bWFuX2ludGVycnVwdF9zbXNjKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiQ0FZTUFOOiBzcHVyaW91cyBTTVNDIGludGVycnVwdFxuIik7CiAJcmV0dXJuIElSUV9OT05FOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgY2F5bWFuX2ludGVycnVwdF9wY2kyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaXJxcmV0dXJuX3QgY2F5bWFuX2ludGVycnVwdF9wY2kyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiQ0FZTUFOOiBzcHVyaW91cyBQQ0kgaW50ZXJydXB0LCBJUlEgJWRcbiIsIGlycSk7CiAJcmV0dXJuIElSUV9OT05FOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L21hY2gtY2F5bWFuL3NldHVwLmMgYi9hcmNoL3NoNjQvbWFjaC1jYXltYW4vc2V0dXAuYwppbmRleCAzZWQ4N2NkLi5jMzYxMWNjIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbWFjaC1jYXltYW4vc2V0dXAuYworKysgYi9hcmNoL3NoNjQvbWFjaC1jYXltYW4vc2V0dXAuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJU01TQ19TVVBFUklPX1dSSVRFX0lOREVYRUQoMHgwMCwgMHhjNyk7IC8qIEdQNDcgPSBuSU9XT1AgKi8KICNlbmRpZgogCi0JLyogRXhpdCB0aGUgY29uZmlndXJhdG9uIHN0YXRlICovCisJLyogRXhpdCB0aGUgY29uZmlndXJhdGlvbiBzdGF0ZSAqLwogCW91dGIoU01TQ19FWElUX0NPTkZJR19LRVksIFNNU0NfQ09ORklHX1BPUlRfQUREUik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9tbS9mYXVsdC5jIGIvYXJjaC9zaDY0L21tL2ZhdWx0LmMKaW5kZXggNGY3MmFiMy4uM2NkOTNiYSAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zaDY0L21tL2ZhdWx0LmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMTM2LDcgKzEzNSw3IEBACiAJLyogU0lNCiAJICogTm90ZSB0aGlzIGlzIG5vdyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIHN0aWxsIGRpc2FibGVkCiAJICogVGhpcyBpcyB0byBjb3BlIHdpdGggYmVpbmcgY2FsbGVkIGZvciBhIG1pc3NpbmcgSU8gcG9ydAotCSAqIGFkZHJlc3Mgd2l0aCBpbnRlcnVwdHMgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGFzCisJICogYWRkcmVzcyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGFzCiAJICogc29vbiBhcyB3ZSBoYXZlIGEgYmV0dGVyICdmYXN0IHBhdGgnIG1pc3MgaGFuZGxlci4KIAkgKgogCSAqIFBsdXMgdGFrZSBjYXJlIGhvdyB5b3UgdHJ5IGFuZCBkZWJ1ZyB0aGlzIHN0dWZmLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3NoNjQvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCA0YjQ1NWY2Li5mYTY2ZGFhIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3NoNjQvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L21tL2luaXQuYyBiL2FyY2gvc2g2NC9tbS9pbml0LmMKaW5kZXggNWRjMDg3OC4uNTU5NzE3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L21tL2luaXQuYworKysgYi9hcmNoL3NoNjQvbW0vaW5pdC5jCkBAIC04NCw3ICs4NCw3IEBACiAJcHJpbnRrKCIlZCByZXNlcnZlZCBwYWdlc1xuIixyZXNlcnZlZCk7CiAJcHJpbnRrKCIlZCBwYWdlcyBzaGFyZWRcbiIsc2hhcmVkKTsKIAlwcmludGsoIiVkIHBhZ2VzIHN3YXAgY2FjaGVkXG4iLGNhY2hlZCk7Ci0JcHJpbnRrKCIlbGQgcGFnZXMgaW4gcGFnZSB0YWJsZSBjYWNoZVxuIixwZ3RhYmxlX2NhY2hlX3NpemUpOworCXByaW50aygiJWxkIHBhZ2VzIGluIHBhZ2UgdGFibGUgY2FjaGVcbiIsIHF1aWNrbGlzdF90b3RhbF9zaXplKCkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L21tL3RsYm1pc3MuYyBiL2FyY2gvc2g2NC9tbS90bGJtaXNzLmMKaW5kZXggYzg2MTU5NS4uYjc2N2Q2YyAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L21tL3RsYm1pc3MuYworKysgYi9hcmNoL3NoNjQvbW0vdGxibWlzcy5jCkBAIC0xNCw3ICsxNCw3IEBACiAgKiBJTVBPUlRBTlQgTk9URVMgOgogICogVGhlIGRvX2Zhc3RfcGFnZV9mYXVsdCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIGNvbnRleHQgaW4gZW50cnkuUyB3aGVyZSB2ZXJ5IGZldyByZWdpc3RlcnMKICAqIGhhdmUgYmVlbiBzYXZlZC4gIEluIHBhcnRpY3VsYXIsIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBtdXN0IGJlIGNvbXBpbGVkIG5vdCB0byB1c2UgQU5ZCi0gKiBjYWxsZXItc2F2ZSByZWdpc2V0ZXJzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSByZXN0cmljdGVkIHNhdmUgc2V0LiAgQWxzbywgaXQgbWVhbnMgdGhhdAorICogY2FsbGVyLXNhdmUgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSByZXN0cmljdGVkIHNhdmUgc2V0LiAgQWxzbywgaXQgbWVhbnMgdGhhdAogICogY29kZSBpbiB0aGlzIGZpbGUgbXVzdCBub3QgbWFrZSBjYWxscyB0byBmdW5jdGlvbnMgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWwsIG9yIGVsc2UgdGhlCiAgKiBleGNlcHRpbmcgY29udGV4dCB3aWxsIHNlZSBjb3JydXB0aW9uIGluIGl0cyBjYWxsZXItc2F2ZSByZWdpc3RlcnMuICBQbHVzLCB0aGUgZW50cnkuUyBzYXZlCiAgKiBhcmVhIGlzIG5vbi1yZWVudHJhbnQsIHNvIHRoaXMgY29kZSBoYXMgdG8gcnVuIHdpdGggU1IuQkw9PTEsIGkuZS4gbm8gaW50ZXJydXB0cyB0YWtlbiBpbnNpZGUKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMjUwLDcgKzI0OSw3IEBACiAJLyogU0lNCiAJICogTm90ZSB0aGlzIGlzIG5vdyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIHN0aWxsIGRpc2FibGVkCiAJICogVGhpcyBpcyB0byBjb3BlIHdpdGggYmVpbmcgY2FsbGVkIGZvciBhIG1pc3NpbmcgSU8gcG9ydAotCSAqIGFkZHJlc3Mgd2l0aCBpbnRlcnVwdHMgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGFzCisJICogYWRkcmVzcyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGFzCiAJICogc29vbiBhcyB3ZSBoYXZlIGEgYmV0dGVyICdmYXN0IHBhdGgnIG1pc3MgaGFuZGxlci4KIAkgKgogCSAqIFBsdXMgdGFrZSBjYXJlIGhvdyB5b3UgdHJ5IGFuZCBkZWJ1ZyB0aGlzIHN0dWZmLgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IGJkOTkyYzAuLmZiY2MwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTE3OCw2ICsxNzgsMTMgQEAKIAlib29sCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBFTVVMQVRFRF9DTVBYQ0hHCisJYm9vbAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNwYXJjMzIgZG9lcyBub3QgaGF2ZSBhIENBUyBpbnN0cnVjdGlvbiBsaWtlIHNwYXJjNjQuIGNtcHhjaGcoKQorCSAgaXMgZW11bGF0ZWQsIGFuZCB0aGVyZWZvcmUgaXQgaXMgbm90IGNvbXBsZXRlbHkgYXRvbWljLgorCiBjb25maWcgU1VOX1BNCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9kZWZjb25maWcgYi9hcmNoL3NwYXJjL2RlZmNvbmZpZwppbmRleCA3OWU1NDg5Li4zOGJkNzlmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2RlZmNvbmZpZworKysgYi9hcmNoL3NwYXJjL2RlZmNvbmZpZwpAQCAtMSwxMCArMSwxMSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjMQotIyBTdW4gRGVjIDE3IDE0OjIwOjQ3IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi1yYzEKKyMgTW9uIE1heSAxNCAwMzoyNToxNCAyMDA3CiAjCiBDT05GSUdfTU1VPXkKIENPTkZJR19ISUdITUVNPXkKK0NPTkZJR19aT05FX0RNQT15CiBDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTIzLDE0ICsyNCwxNyBAQAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKQEAgLTQ2LDE0ICs1MCwxOSBAQAogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTEwNyw3ICsxMTYsNyBAQAogQ09ORklHX1NVTl9QTT15CiAjIENPTkZJR19TVU40IGlzIG5vdCBzZXQKIENPTkZJR19QQ0k9eQotIyBDT05GSUdfUENJX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfU1VOX09QRU5QUk9NRlM9bQogIyBDT05GSUdfU1BBUkNfTEVEIGlzIG5vdCBzZXQKQEAgLTEyNCw2ICsxMzMsNyBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKIAogIwogIyBOZXR3b3JraW5nCkBAIC0xMzMsMTQgKzE0MywxNSBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTE3MCw2ICsxODEsNyBAQAogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CiAjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCkBAIC0yMjksNyArMjQxLDE4IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19BRl9SWFJQQz1tCisjIENPTkZJR19BRl9SWFJQQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SWEtBRCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMjQyLDE2ICsyNjUsMTMgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwogIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCiAjCiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiAKICMKQEAgLTI2Miw2ICsyODIsNyBAQAogIwogIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKICMKKyMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAogCiAjCiAjIEJsb2NrIGRldmljZXMKQEAgLTI4MCwxNSArMzAxLDE2IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKIENPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjIGRldmljZXMKICMKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMSU5LIGlzIG5vdCBzZXQKIAogIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CkBAIC0zMjIsMTEgKzM0NCwxMiBAQAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwogIwotQ09ORklHX1NDU0lfU1BJX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldApAQCAtMzY2LDEyICszODksOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0VTUF9DT1JFPXkKIENPTkZJR19TQ1NJX1NVTkVTUD15CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCkBAIC0zOTAsNiArNDEwLDcgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogCiAjCkBAIC00MTAsMTAgKzQzMSw2IEBACiAjIEFSQ25ldCBkZXZpY2VzCiAjCiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIAogIwpAQCAtNDM1LDEwICs0NTIsNyBAQAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCitDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldApAQCAtNDU0LDE1ICs0NjgsMTYgQEAKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIworIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorQ09ORklHX01MWDRfREVCVUc9eQogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNDcwLDEzICs0ODUsMTAgQEAKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMgV2lyZWxlc3MgTEFOCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtNTI4LDkgKzU0MCwxNyBAQAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKIENPTkZJR19NT1VTRV9QUzI9bQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfU0VSSUFMPW0KKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTU3OCwxNCArNTk4LDkgQEAKICMgSVBNSQogIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT1tCiBDT05GSUdfUlRDPW0KLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKQEAgLTU5NSwxMCArNjEwLDcgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCitDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCkBAIC02MTEsMzIgKzYyMywzOSBAQAogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi1DT05GSUdfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAKICMKQEAgLTY0NCw3ICs2NjMsNiBAQAogIwogIyBDT05GSUdfUFJPTV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTY1NSw2ICs2NzMsNyBAQAogIyBISUQgRGV2aWNlcwogIwogQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFVTQiBzdXBwb3J0CkBAIC02NzIsMTAgKzY5MSw2IEBACiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIwpAQCAtNzE5LDEwICs3MzQsNiBAQAogIwogCiAjCi0jIFZpcnR1YWxpemF0aW9uCi0jCi0KLSMKICMgTWlzYyBMaW51eC9TUEFSQyBkcml2ZXJzCiAjCiBDT05GSUdfU1VOX09QRU5QUk9NSU89bQpAQCAtODAxLDYgKzgxMiw3IEBACiAjCiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19CRUZTX0ZTPW0KQEAgLTgyNyw2ICs4MzksNyBAQAogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz1tCisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9bQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODM5LDcgKzg1Miw3IEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQUZTX0ZTPW0KLUNPTkZJR19SWFJQQz1tCisjIENPTkZJR19BRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCkBAIC05MTMsMTUgKzkyNiwxNCBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTkzMiwxMiArOTQ0LDE0IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorQ09ORklHX0tFWVM9eQorIyBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogCiAjCkBAIC05NjEsOCArOTc1LDExIEBACiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQpAQCAtOTc3LDYgKzk5NCw3IEBACiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC05ODksOSArMTAwNywxMiBAQAogQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQogQ09ORklHX1BMSVNUPXkKLUNPTkZJR19JT01BUF9DT1BZPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMjlkN2NmZC4uNjc3M2VkNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0yOCw3ICsyOCw3IEBACiAJREVGSU5FKEFPRkZfdGFza19naWQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgZ2lkKSk7CiAJREVGSU5FKEFPRkZfdGFza19ldWlkLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGV1aWQpKTsKIAlERUZJTkUoQU9GRl90YXNrX2VnaWQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgZWdpZCkpOwotCS8qIERFRklORShUSFJFQURfSU5GTywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mbykpOyAqLworCS8qIERFRklORShUSFJFQURfSU5GTywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpOyAqLwogCURFRklORShBU0laX3Rhc2tfdWlkLAlzaXplb2YoY3VycmVudC0+dWlkKSk7CiAJREVGSU5FKEFTSVpfdGFza19naWQsCXNpemVvZihjdXJyZW50LT5naWQpKTsKIAlERUZJTkUoQVNJWl90YXNrX2V1aWQsCXNpemVvZihjdXJyZW50LT5ldWlkKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9hdXhpby5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXV4aW8uYwppbmRleCAxMThmM2VjLi5iYWY0ZWQzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9hdXhpby5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBzdW40bToKIAkJaWYoIWF1eGlvX3JlZ2lzdGVyKQotCQkJYnJlYWs7ICAgICAvKiBWTUUgY2hhc3NpYyBzdW40bSwgbm8gYXV4aW8uICovCisJCQlicmVhazsgICAgIC8qIFZNRSBjaGFzc2lzIHN1bjRtLCBubyBhdXhpby4gKi8KIAkJcmVndmFsID0gc2J1c19yZWFkYihhdXhpb19yZWdpc3Rlcik7CiAJCXNidXNfd3JpdGViKCgocmVndmFsIHwgYml0c19vbikgJiB+Yml0c19vZmYpIHwgQVVYSU9fT1JNRUlONE0sCiAJCQlhdXhpb19yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCmluZGV4IDk4N2VjNjcuLjYyMTgyZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCkBAIC02MTcsNyArNjE3LDcgQEAKICAqIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB3aGF0IGFzIHBhc3NlZCBpbnRvIHBjaV9hbGxvY19jb25zaXN0ZW50LAogICogYW5kIGxpa2V3aXNlIGRtYV9hZGRyIG11c3QgYmUgdGhlIHNhbWUgYXMgd2hhdCAqZG1hX2FkZHJwIHdhcyBzZXQgdG8uCiAgKgotICogUmVmZXJlbmNlcyB0byB0aGUgbWVtb3J5IGFuZCBtYXBwaW5ncyBhc3Nvc2NpYXRlZCB3aXRoIGNwdV9hZGRyL2RtYV9hZGRyCisgKiBSZWZlcmVuY2VzIHRvIHRoZSBtZW1vcnkgYW5kIG1hcHBpbmdzIGFzc29jaWF0ZWQgd2l0aCBjcHVfYWRkci9kbWFfYWRkcgogICogcGFzdCB0aGlzIGNhbGwgYXJlIGlsbGVnYWwuCiAgKi8KIHZvaWQgcGNpX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IG4sIHZvaWQgKnAsIGRtYV9hZGRyX3QgYmEpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnEuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lycS5jCmluZGV4IDViNDg0MWQuLmYyNTdhNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lycS5jCkBAIC0xLDYgKzEsNiBAQAogLyogICRJZDogaXJxLmMsdiAxLjExNCAyMDAxLzEyLzExIDA0OjU1OjUxIGRhdmVtIEV4cCAkCiAgKiAgYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmM6ICBJbnRlcnJ1cHQgcmVxdWVzdCBoYW5kbGluZyByb3V0aW5lcy4gT24gdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGFyYyB0aGUgSVJRJ3MgYXJlIGJhc2ljYWxseSAnY2FzdCBpbiBzdG9uZScKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwYXJjIHRoZSBJUlFzIGFyZSBiYXNpY2FsbHkgJ2Nhc3QgaW4gc3RvbmUnCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgeW91IGFyZSBzdXBwb3NlZCB0byBwcm9iZSB0aGUgcHJvbSdzIGRldmljZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSB0cmVlcyB0byBmaW5kIG91dCB3aG8ncyBnb3Qgd2hpY2ggSVJRLgogICoKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtMzMxLDcgKzMzMCw3IEBACiAJaXJxX2VudGVyKCk7CiAJZGlzYWJsZV9waWxfaXJxKGlycSk7CiAjaWZkZWYgQ09ORklHX1NNUAotCS8qIE9ubHkgcm90YXRlIG9uIGxvd2VyIHByaW9yaXR5IElSUSdzIChzY3NpLCBldGhlcm5ldCwgZXRjLikuICovCisJLyogT25seSByb3RhdGUgb24gbG93ZXIgcHJpb3JpdHkgSVJRcyAoc2NzaSwgZXRoZXJuZXQsIGV0Yy4pLiAqLwogCWlmKChzcGFyY19jcHVfbW9kZWw9PXN1bjRtKSAmJiAoaXJxIDwgMTApKQogCQlzbXA0bV9pcnFfcm90YXRlKGNwdSk7CiAjZW5kaWYKQEAgLTM3Miw3ICszNzEsNyBAQAogfQogI2VuZGlmCiAKLS8qIEZhc3QgSVJRJ3Mgb24gdGhlIFNwYXJjIGNhbiBvbmx5IGhhdmUgb25lIHJvdXRpbmUgYXR0YWNoZWQgdG8gdGhlbSwKKy8qIEZhc3QgSVJRcyBvbiB0aGUgU3BhcmMgY2FuIG9ubHkgaGF2ZSBvbmUgcm91dGluZSBhdHRhY2hlZCB0byB0aGVtLAogICogdGh1cyBubyBzaGFyaW5nIHBvc3NpYmxlLgogICovCiBpbnQgcmVxdWVzdF9mYXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLApAQCAtNjA5LDcgKzYwOCw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJvbV9wcmludGYoIkNhbm5vdCBpbml0aWFsaXplIElSUSdzIG9uIHRoaXMgU3VuIG1hY2hpbmUuLi4iKTsKKwkJcHJvbV9wcmludGYoIkNhbm5vdCBpbml0aWFsaXplIElSUXMgb24gdGhpcyBTdW4gbWFjaGluZS4uLiIpOwogCQlicmVhazsKIAl9CiAJYnRmaXh1cCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jCmluZGV4IDVjYTdlOGYuLjc5MTc3MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKQEAgLTc1NSw3ICs3NTUsNyBAQAogc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBkb19nZXR0aW1lb2Zmc2V0KHZvaWQpCiB7CiAJLyoKLQkgKiBXZSBkZXZpZGUgYWxsIHRvIDEwMAorCSAqIFdlIGRpdmlkZSBhbGwgYnkgMTAwCiAJICogdG8gaGF2ZSBtaWNyb3NlY29uZCByZXNvbHV0aW9uIGFuZCB0byBhdm9pZCBvdmVyZmxvdwogCSAqLwogCXVuc2lnbmVkIGxvbmcgY291bnQgPQpAQCAtOTU2LDcgKzk1Niw3IEBACiAgKiBBbHNvLCB0aGluayBmb3IgYSBtb21lbnQgYWJvdXQgbGlrZXMgb2YgZmxvcHB5LmMgdGhhdAogICogaW5jbHVkZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcGFydHMuIFRoZXkgbWF5IHdhbnQgdG8gcmVkZWZpbmUgaW5zL291dHMuCiAgKgotICogV2UgZG8gbm90IHVzZSBob3Jyb2JsZSBtYWNyb3NlcyBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0bworICogV2UgZG8gbm90IHVzZSBob3JyaWJsZSBtYWNyb3MgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8KICAqIGFkdmFuY2UgcG9pbnRlciBieSBzaXplb2Yoc2l6ZSkuCiAgKi8KIHZvaWQgb3V0c2IodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZmM4NzRlNi4uOGMzN2Y4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgpAQCAtNjg0LDcgKzY4Myw3IEBACiAgKiBOT1RFISBPbmx5IGEga2VybmVsLW9ubHkgcHJvY2VzcyhpZSB0aGUgc3dhcHBlciBvciBkaXJlY3QgZGVzY2VuZGFudHMKICAqIHdobyBoYXZlbid0IGRvbmUgYW4gImV4ZWN2ZSgpIikgc2hvdWxkIHVzZSB0aGlzOiBpdCB3aWxsIHdvcmsgd2l0aGluCiAgKiBhIHN5c3RlbSBjYWxsIGZyb20gYSAicmVhbCIgcHJvY2VzcywgYnV0IHRoZSBwcm9jZXNzIG1lbW9yeSBzcGFjZSB3aWxsCi0gKiBub3QgYmUgZnJlZSdkIHVudGlsIGJvdGggdGhlIHBhcmVudCBhbmQgdGhlIGNoaWxkIGhhdmUgZXhpdGVkLgorICogbm90IGJlIGZyZWVkIHVudGlsIGJvdGggdGhlIHBhcmVudCBhbmQgdGhlIGNoaWxkIGhhdmUgZXhpdGVkLgogICovCiBwaWRfdCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwLmMKaW5kZXggZWNjZDhlOC4uNjRjMGVkOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNDAsNyArNDEsNiBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL3ZhZGRycy5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vbWJ1cy5oPgogI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KICNpbmNsdWRlIDxhc20vbWFjaGluZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYzkzMDFiOS4uOTk5NGNhYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgkvKiBkb19jb3JlZHVtICovCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKaW5kZXggNmI1ZjI2Yi4uNGQ5YWQ1OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMKaW5kZXggMGUyN2UyMi4uMzk2Nzk3ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKQEAgLTUyMiw3ICs1MjEsNyBAQAogCQlsdmwxNF9zYXZlWzJdICs9IHNtcDRkX3RpY2tlciAtIHJlYWxfaXJxX2VudHJ5OwogCiAJCS8qIEZvciBTTVAgd2UgdXNlIHRoZSBsZXZlbCAxNCB0aWNrZXIsIGhvd2V2ZXIgdGhlIGJvb3R1cCBjb2RlCi0JCSAqIGhhcyBjb3BpZWQgdGhlIGZpcm13YXJlcyBsZXZlbCAxNCB2ZWN0b3IgaW50byBib290IGNwdSdzCisJCSAqIGhhcyBjb3BpZWQgdGhlIGZpcm13YXJlJ3MgbGV2ZWwgMTQgdmVjdG9yIGludG8gdGhlIGJvb3QgY3B1J3MKIAkJICogdHJhcCB0YWJsZSwgd2UgbXVzdCBmaXggdGhpcyBub3cgb3Igd2UgZ2V0IHNxdWFzaGVkLgogCQkgKi8KIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYwppbmRleCBjNjlkZTVkLi4wOThjOTRmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9pcnEuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX2lycS5jCmluZGV4IGE2NTRjMTYuLjkxYTgwM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX2lycS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX2lycS5jCkBAIC0yOTksNyArMjk5LDcgQEAKIAkJc3RydWN0IHR0X2VudHJ5ICp0cmFwX3RhYmxlID0gJnNwYXJjX3R0YWJsZVtTUF9UUkFQX0lSUTEgKyAoMTQgLSAxKV07CiAKIAkJLyogRm9yIFNNUCB3ZSB1c2UgdGhlIGxldmVsIDE0IHRpY2tlciwgaG93ZXZlciB0aGUgYm9vdHVwIGNvZGUKLQkJICogaGFzIGNvcGllZCB0aGUgZmlybXdhcmVzIGxldmVsIDE0IHZlY3RvciBpbnRvIGJvb3QgY3B1J3MKKwkJICogaGFzIGNvcGllZCB0aGUgZmlybXdhcmUncyBsZXZlbCAxNCB2ZWN0b3IgaW50byB0aGUgYm9vdCBjcHUncwogCQkgKiB0cmFwIHRhYmxlLCB3ZSBtdXN0IGZpeCB0aGlzIG5vdyBvciB3ZSBnZXQgc3F1YXNoZWQuCiAJCSAqLwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX3NtcC5jCmluZGV4IDRlMDdiZGIuLjYzZWQxOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX3NtcC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX3NtcC5jCkBAIC05LDcgKzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW5vc19pb2N0bC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3Vub3NfaW9jdGwuYwppbmRleCAzMmU4Mjc0Li5lNjEzY2M2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW5vc19pb2N0bC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bm9zX2lvY3RsLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NvbGFyaXMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zb2xhcmlzLmMKaW5kZXggMDFiMDdiYi4uMjIyNmE1OSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NvbGFyaXMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc29sYXJpcy5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiBhc21saW5rYWdlIGludApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5TCmluZGV4IDNhNjk3NzguLjkwYjUyZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLlMKQEAgLTgwLDYgKzgwLDcgQEAKIC8qMjk1Ki8JLmxvbmcgc3lzX2ZjaG1vZGF0LCBzeXNfZmFjY2Vzc2F0LCBzeXNfcHNlbGVjdDYsIHN5c19wcG9sbCwgc3lzX3Vuc2hhcmUKIC8qMzAwKi8JLmxvbmcgc3lzX3NldF9yb2J1c3RfbGlzdCwgc3lzX2dldF9yb2J1c3RfbGlzdCwgc3lzX21pZ3JhdGVfcGFnZXMsIHN5c19tYmluZCwgc3lzX2dldF9tZW1wb2xpY3kKIC8qMzA1Ki8JLmxvbmcgc3lzX3NldF9tZW1wb2xpY3ksIHN5c19rZXhlY19sb2FkLCBzeXNfbW92ZV9wYWdlcywgc3lzX2dldGNwdSwgc3lzX2Vwb2xsX3B3YWl0CisvKjMxMCovCS5sb25nIHN5c191dGltZW5zYXQsIHN5c19zaWduYWxmZCwgc3lzX3RpbWVyZmQsIHN5c19ldmVudGZkCiAKICNpZmRlZiBDT05GSUdfU1VOT1NfRU1VTAogCS8qIE5vdyB0aGUgU3VuT1Mgc3lzY2FsbCB0YWJsZS4gKi8KQEAgLTE5Niw1ICsxOTcsNyBAQAogCS5sb25nIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKIAkubG9uZyBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCiAJLmxvbmcgc3Vub3Nfbm9zeXMKKy8qMzEwKi8JLmxvbmcgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cworCS5sb25nIHN1bm9zX25vc3lzCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZS5jCmluZGV4IGYxNDAxYjUuLjdiNDYxMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogfQogCiAvKiBLaWNrIHN0YXJ0IGEgc3RvcHBlZCBjbG9jayAocHJvY2VkdXJlIGZyb20gdGhlIFN1biBOVlJBTS9ob3N0aWQgRkFRKS4gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBraWNrX3N0YXJ0X2Nsb2NrKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQga2lja19zdGFydF9jbG9jayh2b2lkKQogewogCXN0cnVjdCBtb3N0ZWs0OHQwMiAqcmVncyA9IChzdHJ1Y3QgbW9zdGVrNDh0MDIgKiltc3RrNDh0MDJfcmVnczsKIAl1bnNpZ25lZCBjaGFyIHNlYzsKQEAgLTIyMyw3ICsyMjMsNyBAQAogCXJldHVybiAoZGF0YTEgPT0gZGF0YTIpOwkvKiBXYXMgdGhlIHdyaXRlIGJsb2NrZWQ/ICovCiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtb3N0ZWtfc2V0X3N5c3RlbV90aW1lKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbW9zdGVrX3NldF9zeXN0ZW1fdGltZSh2b2lkKQogewogCXVuc2lnbmVkIGludCB5ZWFyLCBtb24sIGRheSwgaG91ciwgbWluLCBzZWM7CiAJc3RydWN0IG1vc3RlazQ4dDAyICptcmVnczsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90cmFwcy5jCmluZGV4IDUyNzY4N2EuLmRjOWZmZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHMuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0yMiw3ICsyMyw2IEBACiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGYwYmI2ZTYuLmY3NWExYjggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTIsNyArMTIsNyBAQAogICAudGV4dCAweGYwMDA0MDAwIDoKICAgewogICAgIF90ZXh0ID0gLjsKLSAgICAqKC50ZXh0KQorICAgIFRFWFRfVEVYVAogICAgIFNDSEVEX1RFWFQKICAgICBMT0NLX1RFWFQKICAgICAqKC5nbnUud2FybmluZykKQEAgLTIyLDcgKzIyLDcgQEAKICAgUk9EQVRBCiAgIC5kYXRhICAgIDoKICAgewotICAgICooLmRhdGEpCisgICAgREFUQV9EQVRBCiAgICAgQ09OU1RSVUNUT1JTCiAgIH0KICAgLmRhdGExICAgOiB7ICooLmRhdGExKSB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9hdG9taWMzMi5jIGIvYXJjaC9zcGFyYy9saWIvYXRvbWljMzIuYwppbmRleCA1NTkzMzVmLi5jYmRkZWIzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9hdG9taWMzMi5jCisrKyBiL2FyY2gvc3BhcmMvbGliL2F0b21pYzMyLmMKQEAgLTIsNiArMiw3IEBACiAgKiBhdG9taWMzMi5jOiAzMi1iaXQgYXRvbWljX3QgaW1wbGVtZW50YXRpb24KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgS2VpdGggTSBXZXNvbG93c2tpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgS3lsZSBNY01hcnRpbgogICogCiAgKiBCYXNlZCBvbiBhc20tcGFyaXNjL2F0b21pYy5oIENvcHlyaWdodCAoQykgMjAwMCBQaGlsaXBwIFJ1bXBmCiAgKi8KQEAgLTExNywzICsxMTgsMTcgQEAKIAlyZXR1cm4gb2xkICYgbWFzazsKIH0KIEVYUE9SVF9TWU1CT0woX19fY2hhbmdlX2JpdCk7CisKK3Vuc2lnbmVkIGxvbmcgX19jbXB4Y2hnX3UzMih2b2xhdGlsZSB1MzIgKnB0ciwgdTMyIG9sZCwgdTMyIG5ldykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBwcmV2OworCisJc3Bpbl9sb2NrX2lycXNhdmUoQVRPTUlDX0hBU0gocHRyKSwgZmxhZ3MpOworCWlmICgocHJldiA9ICpwdHIpID09IG9sZCkKKwkJKnB0ciA9IG5ldzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKEFUT01JQ19IQVNIKHB0ciksIGZsYWdzKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZylwcmV2OworfQorRVhQT1JUX1NZTUJPTChfX2NtcHhjaGdfdTMyKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jIGIvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmMKaW5kZXggMmUxNjhkMS4uNzY0YjNlYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmMKKysrIGIvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmMKQEAgLTksNyArOSw2IEBACiAgKiBmcmFnbWVudGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2ZhdWx0LmMgYi9hcmNoL3NwYXJjL21tL2ZhdWx0LmMKaW5kZXggOWVlZWQzMy4uYzM0ODMzNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vZmF1bHQuYwpAQCAtMTgsOSArMTgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogZXh0ZXJuIGludCBwcm9tX25vZGVfcm9vdDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwppbmRleCAwZGY3MTIxLi5lNWVhYTgwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL3NybW11LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCkBAIC0xOCwxMyArMTgsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL2JpdGV4dC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vdmFkZHJzLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9wcm9tL3ByaW50Zi5jIGIvYXJjaC9zcGFyYy9wcm9tL3ByaW50Zi5jCmluZGV4IGRjOGI1OTguLjI3ZmRhYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9wcmludGYuYworKysgYi9hcmNoL3NwYXJjL3Byb20vcHJpbnRmLmMKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgUGV0ZSBaYWl0Y2V2ICh6YWl0Y2V2QHlhaG9vLmNvbSkKICAqCiAgKiBXZSB1c2VkIHRvIHdhcm4gYWxsIG92ZXIgdGhlIGNvZGU6IERPIE5PVCBVU0UgcHJvbV9wcmludGYoKSwKLSAqIGFuZCB5ZXQgcGVvcGxlIGRvLiBBbnRvbidzIGJhbmtpbmcgY29kZSB3YXMgb3V0cHV0aW5nIGJhbmtzCisgKiBhbmQgeWV0IHBlb3BsZSBkby4gQW50b24ncyBiYW5raW5nIGNvZGUgd2FzIG91dHB1dHRpbmcgYmFua3MKICAqIHdpdGggcHJvbV9wcmludGYgZm9yIG1vc3Qgb2YgdGhlIDIuNCBsaWZldGltZS4gU2luY2UgYW4gZWZmZWN0aXZlCiAgKiBzdGljayBpcyBub3QgYXZhaWxhYmxlLCB3ZSBkZXBsb3llZCBhIGNhcnJvdDogYW4gZWFybHkgcHJpbnRrCiAgKiB0aHJvdWdoIFBST00gYnkgbWVhbnMgb2YgLXAgYm9vdCBvcHRpb24uIFRoaXMgb3VnaHQgdG8gZml4IGl0LgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L0tjb25maWcgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwppbmRleCBhZDhkNmIyLi5iZDAwZjg5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwpAQCAtMTQ3LDEwICsxNDcsMTAgQEAKIAkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uCiAKIGNvbmZpZyBOUl9DUFVTCi0JaW50ICJNYXhpbXVtIG51bWJlciBvZiBDUFVzICgyLTY0KSIKLQlyYW5nZSAyIDY0CisJaW50ICJNYXhpbXVtIG51bWJlciBvZiBDUFVzICgyLTEwMjQpIgorCXJhbmdlIDIgMTAyNAogCWRlcGVuZHMgb24gU01QCi0JZGVmYXVsdCAiMzIiCisJZGVmYXVsdCAiNjQiCiAKIHNvdXJjZSAiZHJpdmVycy9jcHVmcmVxL0tjb25maWciCiAKQEAgLTIyNiw5ICsyMjYsNiBAQAogCWRlZl9ib29sIHkKIAlzZWxlY3QgU1BBUlNFTUVNX1NUQVRJQwogCi1jb25maWcgTEFSR0VfQUxMT0NTCi0JZGVmX2Jvb2wgeQotCiBzb3VyY2UgIm1tL0tjb25maWciCiAKIGNvbmZpZyBJU0EKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcgYi9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCmluZGV4IDM3YzJkMzYuLjY1ODQwYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMQotIyBTdW4gTWF5ICA2IDIyOjQ2OjU0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi1yYzEKKyMgTW9uIE1heSAxNCAwNDoxNzo0OCAyMDA3CiAjCiBDT05GSUdfU1BBUkM9eQogQ09ORklHX1NQQVJDNjQ9eQpAQCAtOSw2ICs5LDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR182NEJJVD15CiBDT05GSUdfTU1VPXkKK0NPTkZJR19RVUlDS0xJU1Q9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CkBAIC00OSw2ICs1MCw3IEBACiAjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CkBAIC02NiwxNCArNjgsMjAgQEAKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xMzcsNyArMTQ1LDYgQEAKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15Ci1DT05GSUdfTEFSR0VfQUxMT0NTPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKICMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTQ4LDYgKzE1NSw3IEBACiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX1JFU09VUkNFU182NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MQogQ09ORklHX1NCVVM9eQogQ09ORklHX1NCVVNDSEFSPXkKIENPTkZJR19TVU5fQVVYSU89eQpAQCAtMzA1LDYgKzMxMyw3IEBACiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM1OSw4ICszNjgsMTAgQEAKICMKICMgTWlzYyBkZXZpY2VzCiAjCisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTElOSyBpcyBub3Qgc2V0CiAKICMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydApAQCAtMzc5LDYgKzM5MCw3IEBACiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCkBAIC0zODYsNiArMzk4LDcgQEAKIENPTkZJR19JREVfR0VORVJJQz15CiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQogIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15CiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldApAQCAtNDk1LDEwICs1MDgsNiBAQAogIyBDT05GSUdfU0NTSV9FU1BfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NVTkVTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCkBAIC01MjEsNiArNTMwLDcgQEAKIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1pFUk89bQogIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKIAogIwogIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CkBAIC01MzMsNiArNTQzLDcgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogCiAjCkBAIC01NTMsMTAgKzU2NCw2IEBACiAjIEFSQ25ldCBkZXZpY2VzCiAjCiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIAogIwpAQCAtNTk2LDEwICs2MDMsNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCitDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPW0KQEAgLTYxOSwxNiArNjIzLDE1IEBACiBDT05GSUdfQk5YMj1tCiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIworQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NTFg0X0RFQlVHPXkKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTY0Miw4ICs2NDUsMTQgQEAKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCiAjCi0jIFdhbiBpbnRlcmZhY2VzCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtNzExLDExICs3MjAsMTggQEAKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogQ09ORklHX01PVVNFX1NFUklBTD15CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKIENPTkZJR19JTlBVVF9TUEFSQ1NQS1I9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKQEAgLTc2MiwxNCArNzc4LDkgQEAKICMgSVBNSQogIwogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19SVEM9eQotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk0gaXMgbm90IHNldApAQCAtNzc5LDYgKzc5MCw3IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldApAQCAtODQxLDEzICs4NTMsMTAgQEAKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CkBAIC04NzQsNiArODgzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CkBAIC05MDEsMjMgKzkxMSwzMCBAQAogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfRERDPXkKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKQEAgLTk0OSw3ICs5NjYsMTAgQEAKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfWFZSNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1hWUjI1MDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUENJIGlzIG5vdCBzZXQKQEAgLTk3MiwxMCArOTkyLDYgQEAKIENPTkZJR19GT05UX1NVTjh4MTY9eQogIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19MT0dPPXkKICMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKQEAgLTEwODMsNiArMTA5OSw3IEBACiAjIFVTQiBkZXZpY2VzCiAjCiAjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAogCiAjCiAjIEFMU0EgU3BhcmMgZGV2aWNlcwpAQCAtMTA5Miw3ICsxMTA5LDcgQEAKICMgQ09ORklHX1NORF9TVU5fREJSSSBpcyBub3Qgc2V0CiAKICMKLSMgU29DIGF1ZGlvIHN1cHBvcnQKKyMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAogIwogIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CiAKQEAgLTExNzgsMzcgKzExOTUsMTAgQEAKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLSMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dUQ08gaXMgbm90IHNldAotCi0jCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCiAjCkBAIC0xMjUyLDEwICsxMjQyLDYgQEAKICMgVVNCIEdhZGdldCBTdXBwb3J0CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCkBAIC0xMjk5LDE0ICsxMjg1LDYgQEAKICMKIAogIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKLQotIwogIyBNaXNjIExpbnV4L1NQQVJDIGRyaXZlcnMKICMKIENPTkZJR19TVU5fT1BFTlBST01JTz1tCkBAIC0xNDg2LDExICsxNDY0LDkgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xOAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKIENPTkZJR19TQ0hFRFNUQVRTPXkKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTU3NCw2ICsxNTUwLDcgQEAKIENPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogQ09ORklHX0NSQzE2PW0KKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKQEAgLTE1ODEsMyArMTU1OCw0IEBACiBDT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCA2YmY2ZmI2Li5kOGQxOTA5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTgsMTEgKzgsMTEgQEAKIGV4dHJhLXkJCTo9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogCiBvYmoteQkJOj0gcHJvY2Vzcy5vIHNldHVwLm8gY3B1Lm8gaWRwcm9tLm8gXAotCQkgICB0cmFwcy5vIGRldmljZXMubyBhdXhpby5vIHVuYV9hc20ubyBcCisJCSAgIHRyYXBzLm8gYXV4aW8ubyB1bmFfYXNtLm8gXAogCQkgICBpcnEubyBwdHJhY2UubyB0aW1lLm8gc3lzX3NwYXJjLm8gc2lnbmFsLm8gXAogCQkgICB1bmFsaWduZWQubyBjZW50cmFsLm8gcGNpLm8gc3RhcmZpcmUubyBzZW1hcGhvcmUubyBcCiAJCSAgIHBvd2VyLm8gc2J1cy5vIGlvbW11X2NvbW1vbi5vIHNwYXJjNjRfa3N5bXMubyBjaG1jLm8gXAotCQkgICB2aXNlbXVsLm8gcHJvbS5vIG9mX2RldmljZS5vCisJCSAgIHZpc2VtdWwubyBwcm9tLm8gb2ZfZGV2aWNlLm8gaHZhcGkubyBzc3RhdGUubyBtZGVzYy5vCiAKIG9iai0kKENPTkZJR19TVEFDS1RSQUNFKSArPSBzdGFja3RyYWNlLm8KIG9iai0kKENPTkZJR19QQ0kpCSArPSBlYnVzLm8gaXNhLm8gcGNpX2NvbW1vbi5vIHBjaV9pb21tdS5vIFwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvYXVkaXQuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvYXVkaXQuYwppbmRleCBhZWYxOWNjLi4yNGQ3ZjRiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2F1ZGl0LmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9hdWRpdC5jCkBAIC0yMyw2ICsyMywyMCBAQAogfjBVCiB9OwogCitzdGF0aWMgdW5zaWduZWQgc2lnbmFsX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfc2lnbmFsLmg+Cit+MFUKK307CisKK2ludCBhdWRpdF9jbGFzc2lmeV9hcmNoKGludCBhcmNoKQoreworI2lmZGVmIENPTkZJR19TUEFSQzMyX0NPTVBBVAorCWlmIChhcmNoID09IEFVRElUX0FSQ0hfU1BBUkMpCisJCXJldHVybiAxOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKIGludCBhdWRpdF9jbGFzc2lmeV9zeXNjYWxsKGludCBhYmksIHVuc2lnbmVkIHN5c2NhbGwpCiB7CiAjaWZkZWYgQ09ORklHX1NQQVJDMzJfQ09NUEFUCkBAIC01MSwxNSArNjUsMTggQEAKIAlleHRlcm4gX191MzIgc3BhcmMzMl93cml0ZV9jbGFzc1tdOwogCWV4dGVybiBfX3UzMiBzcGFyYzMyX3JlYWRfY2xhc3NbXTsKIAlleHRlcm4gX191MzIgc3BhcmMzMl9jaGF0dHJfY2xhc3NbXTsKKwlleHRlcm4gX191MzIgc3BhcmMzMl9zaWduYWxfY2xhc3NbXTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19XUklURV8zMiwgc3BhcmMzMl93cml0ZV9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfUkVBRF8zMiwgc3BhcmMzMl9yZWFkX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEVfMzIsIHNwYXJjMzJfZGlyX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFJfMzIsIHNwYXJjMzJfY2hhdHRyX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19TSUdOQUxfMzIsIHNwYXJjMzJfc2lnbmFsX2NsYXNzKTsKICNlbmRpZgogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1dSSVRFLCB3cml0ZV9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfUkVBRCwgcmVhZF9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfRElSX1dSSVRFLCBkaXJfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0NIQVRUUiwgY2hhdHRyX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19TSUdOQUwsIHNpZ25hbF9jbGFzcyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY29tcGF0X2F1ZGl0LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2NvbXBhdF9hdWRpdC5jCmluZGV4IGNjYTk2YzkuLmMxOTc5NDggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY29tcGF0X2F1ZGl0LmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9jb21wYXRfYXVkaXQuYwpAQCAtMjAsNiArMjAsMTEgQEAKIH4wVQogfTsKIAordW5zaWduZWQgc3BhcmMzMl9zaWduYWxfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9zaWduYWwuaD4KK34wVQorfTsKKwogaW50IHNwYXJjMzJfY2xhc3NpZnlfc3lzY2FsbCh1bnNpZ25lZCBzeXNjYWxsKQogewogCXN3aXRjaChzeXNjYWxsKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2RldmljZXMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZGV2aWNlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzEwZjdlLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZGV2aWNlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qIGRldmljZXMuYzogSW5pdGlhbCBzY2FuIG9mIHRoZSBwcm9tIGRldmljZSB0cmVlIGZvciBpbXBvcnRhbnQKLSAqICAgICAgICAgICAgU3BhcmMgZGV2aWNlIG5vZGVzIHdoaWNoIHdlIG5lZWQgdG8gZmluZC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWVyLmg+Ci0jaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KLQotLyogVXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc2VzIHRvIE5hdFNlbWkgU1VQRVIgSS9PIGNoaXAgY29uZmlndXJlCi0gKiBvcGVyYXRpb25zIGluIGFzbS9uczg3MzAzLmgKLSAqLwotREVGSU5FX1NQSU5MT0NLKG5zODczMDNfbG9jayk7Ci0KLWV4dGVybiB2b2lkIGNwdV9wcm9iZSh2b2lkKTsKLWV4dGVybiB2b2lkIGNlbnRyYWxfcHJvYmUodm9pZCk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpjcHVfbWlkX3Byb3Aodm9pZCkKLXsKLQlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpCi0JCXJldHVybiAidXBhLXBvcnRpZCI7Ci0JcmV0dXJuICJwb3J0aWQiOwotfQotCi1zdGF0aWMgaW50IGdldF9jcHVfbWlkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCi17Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCi0JaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKLQkJc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZzsKLQkJaW50IGxlbjsKLQotCQlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgImNwdWlkIiwgJmxlbik7Ci0JCWlmIChwcm9wICYmIGxlbiA9PSA0KQotCQkJcmV0dXJuICooaW50ICopIHByb3AtPnZhbHVlOwotCi0JCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0JCXJlZyA9IHByb3AtPnZhbHVlOwotCQlyZXR1cm4gKHJlZ1swXS5waHlzX2FkZHIgPj4gMzIpICYgMHgwZmZmZmZmZlVMOwotCX0gZWxzZSB7Ci0JCWNvbnN0IGNoYXIgKnByb3BfbmFtZSA9IGNwdV9taWRfcHJvcCgpOwotCi0JCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCBwcm9wX25hbWUsIE5VTEwpOwotCQlpZiAocHJvcCkKLQkJCXJldHVybiAqKGludCAqKSBwcm9wLT52YWx1ZTsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW50IGNoZWNrX2NwdV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGludCAqY3VyX2luc3QsCi0JCQkgIGludCAoKmNvbXBhcmUpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqLCBpbnQsIHZvaWQgKiksCi0JCQkgIHZvaWQgKmNvbXBhcmVfYXJnLAotCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKipkZXZfbm9kZSwgaW50ICptaWQpCi17Ci0JaWYgKCFjb21wYXJlKGRwLCAqY3VyX2luc3QsIGNvbXBhcmVfYXJnKSkgewotCQlpZiAoZGV2X25vZGUpCi0JCQkqZGV2X25vZGUgPSBkcDsKLQkJaWYgKG1pZCkKLQkJCSptaWQgPSBnZXRfY3B1X21pZChkcCk7Ci0JCXJldHVybiAwOwotCX0KLQotCSgqY3VyX2luc3QpKys7Ci0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIGludCBfX2NwdV9maW5kX2J5KGludCAoKmNvbXBhcmUpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqLCBpbnQsIHZvaWQgKiksCi0JCQkgdm9pZCAqY29tcGFyZV9hcmcsCi0JCQkgc3RydWN0IGRldmljZV9ub2RlICoqZGV2X25vZGUsIGludCAqbWlkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7Ci0JaW50IGN1cl9pbnN0OwotCi0JY3VyX2luc3QgPSAwOwotCWZvcl9lYWNoX25vZGVfYnlfdHlwZShkcCwgImNwdSIpIHsKLQkJaW50IGVyciA9IGNoZWNrX2NwdV9ub2RlKGRwLCAmY3VyX2luc3QsCi0JCQkJCSBjb21wYXJlLCBjb21wYXJlX2FyZywKLQkJCQkJIGRldl9ub2RlLCBtaWQpOwotCQlpZiAoZXJyID09IDApCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIGludCBjcHVfaW5zdGFuY2VfY29tcGFyZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBpbnQgaW5zdGFuY2UsIHZvaWQgKl9hcmcpCi17Ci0JaW50IGRlc2lyZWRfaW5zdGFuY2UgPSAoaW50KSAobG9uZykgX2FyZzsKLQotCWlmIChpbnN0YW5jZSA9PSBkZXNpcmVkX2luc3RhbmNlKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotaW50IGNwdV9maW5kX2J5X2luc3RhbmNlKGludCBpbnN0YW5jZSwgc3RydWN0IGRldmljZV9ub2RlICoqZGV2X25vZGUsIGludCAqbWlkKQotewotCXJldHVybiBfX2NwdV9maW5kX2J5KGNwdV9pbnN0YW5jZV9jb21wYXJlLCAodm9pZCAqKShsb25nKWluc3RhbmNlLAotCQkJICAgICBkZXZfbm9kZSwgbWlkKTsKLX0KLQotc3RhdGljIGludCBjcHVfbWlkX2NvbXBhcmUoc3RydWN0IGRldmljZV9ub2RlICpkcCwgaW50IGluc3RhbmNlLCB2b2lkICpfYXJnKQotewotCWludCBkZXNpcmVkX21pZCA9IChpbnQpIChsb25nKSBfYXJnOwotCWludCB0aGlzX21pZDsKLQotCXRoaXNfbWlkID0gZ2V0X2NwdV9taWQoZHApOwotCWlmICh0aGlzX21pZCA9PSBkZXNpcmVkX21pZCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLWludCBjcHVfZmluZF9ieV9taWQoaW50IG1pZCwgc3RydWN0IGRldmljZV9ub2RlICoqZGV2X25vZGUpCi17Ci0JcmV0dXJuIF9fY3B1X2ZpbmRfYnkoY3B1X21pZF9jb21wYXJlLCAodm9pZCAqKShsb25nKW1pZCwKLQkJCSAgICAgZGV2X25vZGUsIE5VTEwpOwotfQotCi12b2lkIF9faW5pdCBkZXZpY2Vfc2Nhbih2b2lkKQotewotCS8qIEZJWCBNRSBGQVNULi4uIC1EYXZlTSAqLwotCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSAweGZmZmZmZmZmZmZmZmZmZmZVTDsKLQotCXByb21fcHJpbnRmKCJCb290aW5nIExpbnV4Li4uXG4iKTsKLQotI2lmbmRlZiBDT05GSUdfU01QCi0JewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwotCQlpbnQgZXJyLCBkZWY7Ci0KLQkJZXJyID0gY3B1X2ZpbmRfYnlfaW5zdGFuY2UoMCwgJmRwLCBOVUxMKTsKLQkJaWYgKGVycikgewotCQkJcHJvbV9wcmludGYoIk5vIGNwdSBub2RlcywgY2Fubm90IGNvbnRpbnVlXG4iKTsKLQkJCXByb21faGFsdCgpOwotCQl9Ci0JCWNwdV9kYXRhKDApLmNsb2NrX3RpY2sgPQotCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiY2xvY2stZnJlcXVlbmN5IiwgMCk7Ci0KLQkJZGVmID0gKCh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSA/Ci0JCSAgICAgICAoOCAqIDEwMjQpIDoKLQkJICAgICAgICgxNiAqIDEwMjQpKTsKLQkJY3B1X2RhdGEoMCkuZGNhY2hlX3NpemUgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsCi0JCQkJCQkJCSJkY2FjaGUtc2l6ZSIsCi0JCQkJCQkJCWRlZik7Ci0KLQkJZGVmID0gMzI7Ci0JCWNwdV9kYXRhKDApLmRjYWNoZV9saW5lX3NpemUgPQotCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiZGNhY2hlLWxpbmUtc2l6ZSIsIGRlZik7Ci0KLQkJZGVmID0gMTYgKiAxMDI0OwotCQljcHVfZGF0YSgwKS5pY2FjaGVfc2l6ZSA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwKLQkJCQkJCQkJImljYWNoZS1zaXplIiwKLQkJCQkJCQkJZGVmKTsKLQotCQlkZWYgPSAzMjsKLQkJY3B1X2RhdGEoMCkuaWNhY2hlX2xpbmVfc2l6ZSA9Ci0JCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJpY2FjaGUtbGluZS1zaXplIiwgZGVmKTsKLQotCQlkZWYgPSAoKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8KLQkJICAgICAgICgzICogMTAyNCAqIDEwMjQpIDoKLQkJICAgICAgICg0ICogMTAyNCAqIDEwMjQpKTsKLQkJY3B1X2RhdGEoMCkuZWNhY2hlX3NpemUgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsCi0JCQkJCQkJCSJlY2FjaGUtc2l6ZSIsCi0JCQkJCQkJCWRlZik7Ci0KLQkJZGVmID0gNjQ7Ci0JCWNwdV9kYXRhKDApLmVjYWNoZV9saW5lX3NpemUgPQotCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiZWNhY2hlLWxpbmUtc2l6ZSIsIGRlZik7Ci0JCXByaW50aygiQ1BVWzBdOiBDYWNoZXMgIgotCQkgICAgICAgIkRbc3ooJWQpOmxpbmVfc3ooJWQpXSAiCi0JCSAgICAgICAiSVtzeiglZCk6bGluZV9zeiglZCldICIKLQkJICAgICAgICJFW3N6KCVkKTpsaW5lX3N6KCVkKV1cbiIsCi0JCSAgICAgICBjcHVfZGF0YSgwKS5kY2FjaGVfc2l6ZSwgY3B1X2RhdGEoMCkuZGNhY2hlX2xpbmVfc2l6ZSwKLQkJICAgICAgIGNwdV9kYXRhKDApLmljYWNoZV9zaXplLCBjcHVfZGF0YSgwKS5pY2FjaGVfbGluZV9zaXplLAotCQkgICAgICAgY3B1X2RhdGEoMCkuZWNhY2hlX3NpemUsIGNwdV9kYXRhKDApLmVjYWNoZV9saW5lX3NpemUpOwotCX0KLSNlbmRpZgotCi0JY2VudHJhbF9wcm9iZSgpOwotCi0JY3B1X3Byb2JlKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2VidXMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZWJ1cy5jCmluZGV4IDBhY2UxN2IuLmFkNTVhOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZWJ1cy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZWJ1cy5jCkBAIC0xMywxNiArMTMsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BibS5oPgogI2luY2x1ZGUgPGFzbS9lYnVzLmg+CiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL2JwcC5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogRUJVUyBkbWEgbGlicmFyeS4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IGMxNWEzZWQuLmVkNzEyZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMKQEAgLTE3MjUsNzQgKzE3MjUsMTI3IEBACiAJICogcmV0dXJucyAlbzA6IHN5c2lubwogCSAqLwogCS5nbG9ibAlzdW40dl9kZXZpbm9fdG9fc3lzaW5vCisJLnR5cGUJc3VuNHZfZGV2aW5vX3RvX3N5c2lubywjZnVuY3Rpb24KIHN1bjR2X2Rldmlub190b19zeXNpbm86CiAJbW92CUhWX0ZBU1RfSU5UUl9ERVZJTk8yU1lTSU5PLCAlbzUKIAl0YQlIVl9GQVNUX1RSQVAKIAlyZXRsCiAJIG1vdgklbzEsICVvMAorCS5zaXplCXN1bjR2X2Rldmlub190b19zeXNpbm8sIC4tc3VuNHZfZGV2aW5vX3RvX3N5c2lubwogCiAJLyogJW8wOiBzeXNpbm8KIAkgKgogCSAqIHJldHVybnMgJW8wOiBpbnRyX2VuYWJsZWQgKEhWX0lOVFJfe0RJU0FCTEVELEVOQUJMRUR9KQogCSAqLwogCS5nbG9ibAlzdW40dl9pbnRyX2dldGVuYWJsZWQKKwkudHlwZQlzdW40dl9pbnRyX2dldGVuYWJsZWQsI2Z1bmN0aW9uCiBzdW40dl9pbnRyX2dldGVuYWJsZWQ6CiAJbW92CUhWX0ZBU1RfSU5UUl9HRVRFTkFCTEVELCAlbzUKIAl0YQlIVl9GQVNUX1RSQVAKIAlyZXRsCiAJIG1vdgklbzEsICVvMAorCS5zaXplCXN1bjR2X2ludHJfZ2V0ZW5hYmxlZCwgLi1zdW40dl9pbnRyX2dldGVuYWJsZWQKIAogCS8qICVvMDogc3lzaW5vCiAJICogJW8xOiBpbnRyX2VuYWJsZWQgKEhWX0lOVFJfe0RJU0FCTEVELEVOQUJMRUR9KQogCSAqLwogCS5nbG9ibAlzdW40dl9pbnRyX3NldGVuYWJsZWQKKwkudHlwZQlzdW40dl9pbnRyX3NldGVuYWJsZWQsI2Z1bmN0aW9uCiBzdW40dl9pbnRyX3NldGVuYWJsZWQ6CiAJbW92CUhWX0ZBU1RfSU5UUl9TRVRFTkFCTEVELCAlbzUKIAl0YQlIVl9GQVNUX1RSQVAKIAlyZXRsCiAJIG5vcAorCS5zaXplCXN1bjR2X2ludHJfc2V0ZW5hYmxlZCwgLi1zdW40dl9pbnRyX3NldGVuYWJsZWQKIAogCS8qICVvMDogc3lzaW5vCiAJICoKIAkgKiByZXR1cm5zICVvMDogaW50cl9zdGF0ZSAoSFZfSU5UUl9TVEFURV8qKQogCSAqLwogCS5nbG9ibAlzdW40dl9pbnRyX2dldHN0YXRlCisJLnR5cGUJc3VuNHZfaW50cl9nZXRzdGF0ZSwjZnVuY3Rpb24KIHN1bjR2X2ludHJfZ2V0c3RhdGU6CiAJbW92CUhWX0ZBU1RfSU5UUl9HRVRTVEFURSwgJW81CiAJdGEJSFZfRkFTVF9UUkFQCiAJcmV0bAogCSBtb3YJJW8xLCAlbzAKKwkuc2l6ZQlzdW40dl9pbnRyX2dldHN0YXRlLCAuLXN1bjR2X2ludHJfZ2V0c3RhdGUKIAogCS8qICVvMDogc3lzaW5vCiAJICogJW8xOiBpbnRyX3N0YXRlIChIVl9JTlRSX1NUQVRFXyopCiAJICovCiAJLmdsb2JsCXN1bjR2X2ludHJfc2V0c3RhdGUKKwkudHlwZQlzdW40dl9pbnRyX3NldHN0YXRlLCNmdW5jdGlvbgogc3VuNHZfaW50cl9zZXRzdGF0ZToKIAltb3YJSFZfRkFTVF9JTlRSX1NFVFNUQVRFLCAlbzUKIAl0YQlIVl9GQVNUX1RSQVAKIAlyZXRsCiAJIG5vcAorCS5zaXplCXN1bjR2X2ludHJfc2V0c3RhdGUsIC4tc3VuNHZfaW50cl9zZXRzdGF0ZQogCiAJLyogJW8wOiBzeXNpbm8KIAkgKgogCSAqIHJldHVybnMgJW8wOiBjcHVpZAogCSAqLwogCS5nbG9ibAlzdW40dl9pbnRyX2dldHRhcmdldAorCS50eXBlCXN1bjR2X2ludHJfZ2V0dGFyZ2V0LCNmdW5jdGlvbgogc3VuNHZfaW50cl9nZXR0YXJnZXQ6CiAJbW92CUhWX0ZBU1RfSU5UUl9HRVRUQVJHRVQsICVvNQogCXRhCUhWX0ZBU1RfVFJBUAogCXJldGwKIAkgbW92CSVvMSwgJW8wCisJLnNpemUJc3VuNHZfaW50cl9nZXR0YXJnZXQsIC4tc3VuNHZfaW50cl9nZXR0YXJnZXQKIAogCS8qICVvMDogc3lzaW5vCiAJICogJW8xOiBjcHVpZAogCSAqLwogCS5nbG9ibAlzdW40dl9pbnRyX3NldHRhcmdldAorCS50eXBlCXN1bjR2X2ludHJfc2V0dGFyZ2V0LCNmdW5jdGlvbgogc3VuNHZfaW50cl9zZXR0YXJnZXQ6CiAJbW92CUhWX0ZBU1RfSU5UUl9TRVRUQVJHRVQsICVvNQogCXRhCUhWX0ZBU1RfVFJBUAogCXJldGwKIAkgbm9wCisJLnNpemUJc3VuNHZfaW50cl9zZXR0YXJnZXQsIC4tc3VuNHZfaW50cl9zZXR0YXJnZXQKKworCS8qICVvMDoJY3B1aWQKKwkgKiAlbzE6IHBjCisJICogJW8yOglydGJhCisJICogJW8zOglhcmcwCisJICoKKwkgKiByZXR1cm5zICVvMDoJc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X2NwdV9zdGFydAorCS50eXBlCXN1bjR2X2NwdV9zdGFydCwjZnVuY3Rpb24KK3N1bjR2X2NwdV9zdGFydDoKKwltb3YJSFZfRkFTVF9DUFVfU1RBUlQsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXJldGwKKwkgbm9wCisJLnNpemUJc3VuNHZfY3B1X3N0YXJ0LCAuLXN1bjR2X2NwdV9zdGFydAorCisJLyogJW8wOgljcHVpZAorCSAqCisJICogcmV0dXJucyAlbzA6IHN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl9jcHVfc3RvcAorCS50eXBlCXN1bjR2X2NwdV9zdG9wLCNmdW5jdGlvbgorc3VuNHZfY3B1X3N0b3A6CisJbW92CUhWX0ZBU1RfQ1BVX1NUT1AsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXJldGwKKwkgbm9wCisJLnNpemUJc3VuNHZfY3B1X3N0b3AsIC4tc3VuNHZfY3B1X3N0b3AKKworCS8qIHJldHVybnMgJW8wOglzdGF0dXMgICovCisJLmdsb2JsCXN1bjR2X2NwdV95aWVsZAorCS50eXBlCXN1bjR2X2NwdV95aWVsZCwgI2Z1bmN0aW9uCitzdW40dl9jcHVfeWllbGQ6CisJbW92CUhWX0ZBU1RfQ1BVX1lJRUxELCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X2NwdV95aWVsZCwgLi1zdW40dl9jcHVfeWllbGQKIAogCS8qICVvMDoJdHlwZQogCSAqICVvMToJcXVldWUgcGFkZHIKQEAgLTE4MDEsMjAgKzE4NTQsMTMgQEAKIAkgKiByZXR1cm5zICVvMDoJc3RhdHVzCiAJICovCiAJLmdsb2JsCXN1bjR2X2NwdV9xY29uZgorCS50eXBlCXN1bjR2X2NwdV9xY29uZiwjZnVuY3Rpb24KIHN1bjR2X2NwdV9xY29uZjoKIAltb3YJSFZfRkFTVF9DUFVfUUNPTkYsICVvNQogCXRhCUhWX0ZBU1RfVFJBUAogCXJldGwKIAkgbm9wCi0KLQkvKiByZXR1cm5zICVvMDoJc3RhdHVzCi0JICovCi0JLmdsb2JsCXN1bjR2X2NwdV95aWVsZAotc3VuNHZfY3B1X3lpZWxkOgotCW1vdglIVl9GQVNUX0NQVV9ZSUVMRCwgJW81Ci0JdGEJSFZfRkFTVF9UUkFQCi0JcmV0bAotCSBub3AKKwkuc2l6ZQlzdW40dl9jcHVfcWNvbmYsIC4tc3VuNHZfY3B1X3Fjb25mCiAKIAkvKiAlbzA6CW51bSBjcHVzIGluIGNwdSBsaXN0CiAJICogJW8xOgljcHUgbGlzdCBwYWRkcgpAQCAtMTgyMywxMSArMTg2OSwxMyBAQAogCSAqIHJldHVybnMgJW8wOiBzdGF0dXMKIAkgKi8KIAkuZ2xvYmwJc3VuNHZfY3B1X21vbmRvX3NlbmQKKwkudHlwZQlzdW40dl9jcHVfbW9uZG9fc2VuZCwjZnVuY3Rpb24KIHN1bjR2X2NwdV9tb25kb19zZW5kOgogCW1vdglIVl9GQVNUX0NQVV9NT05ET19TRU5ELCAlbzUKIAl0YQlIVl9GQVNUX1RSQVAKIAlyZXRsCiAJIG5vcAorCS5zaXplCXN1bjR2X2NwdV9tb25kb19zZW5kLCAuLXN1bjR2X2NwdV9tb25kb19zZW5kCiAKIAkvKiAlbzA6CUNQVSBJRAogCSAqCkBAIC0xODM1LDYgKzE4ODMsNyBAQAogCSAqICAgICAgICAgJW8wOgljcHUgc3RhdGUgYXMgSFZfQ1BVX1NUQVRFXyoKIAkgKi8KIAkuZ2xvYmwJc3VuNHZfY3B1X3N0YXRlCisJLnR5cGUJc3VuNHZfY3B1X3N0YXRlLCNmdW5jdGlvbgogc3VuNHZfY3B1X3N0YXRlOgogCW1vdglIVl9GQVNUX0NQVV9TVEFURSwgJW81CiAJdGEJSFZfRkFTVF9UUkFQCkBAIC0xODQzLDMgKzE4OTIsNjgxIEBACiAJbW92CSVvMSwgJW8wCiAxOglyZXRsCiAJIG5vcAorCS5zaXplCXN1bjR2X2NwdV9zdGF0ZSwgLi1zdW40dl9jcHVfc3RhdGUKKworCS8qICVvMDogdmlydHVhbCBhZGRyZXNzCisJICogJW8xOiBtdXN0IGJlIHplcm8KKwkgKiAlbzI6IFRURQorCSAqICVvMzogSFZfTU1VXyogZmxhZ3MKKwkgKgorCSAqIHJldHVybnMgJW8wOiBzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfbW11X21hcF9wZXJtX2FkZHIKKwkudHlwZQlzdW40dl9tbXVfbWFwX3Blcm1fYWRkciwjZnVuY3Rpb24KK3N1bjR2X21tdV9tYXBfcGVybV9hZGRyOgorCW1vdglIVl9GQVNUX01NVV9NQVBfUEVSTV9BRERSLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X21tdV9tYXBfcGVybV9hZGRyLCAuLXN1bjR2X21tdV9tYXBfcGVybV9hZGRyCisKKwkvKiAlbzA6IG51bWJlciBvZiBUU0IgZGVzY3JpcHRpb25zCisJICogJW8xOiBUU0IgZGVzY3JpcHRpb25zIHJlYWwgYWRkcmVzcworCSAqCisJICogcmV0dXJucyAlbzA6IHN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl9tbXVfdHNiX2N0eDAKKwkudHlwZQlzdW40dl9tbXVfdHNiX2N0eDAsI2Z1bmN0aW9uCitzdW40dl9tbXVfdHNiX2N0eDA6CisJbW92CUhWX0ZBU1RfTU1VX1RTQl9DVFgwLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X21tdV90c2JfY3R4MCwgLi1zdW40dl9tbXVfdHNiX2N0eDAKKworCS8qICVvMDoJQVBJIGdyb3VwIG51bWJlcgorCSAqICVvMTogcG9pbnRlciB0byB1bnNpZ25lZCBsb25nIG1ham9yIG51bWJlciBzdG9yYWdlCisJICogJW8yOiBwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcgbWlub3IgbnVtYmVyIHN0b3JhZ2UKKwkgKgorCSAqIHJldHVybnMgJW8wOiBzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfZ2V0X3ZlcnNpb24KKwkudHlwZQlzdW40dl9nZXRfdmVyc2lvbiwjZnVuY3Rpb24KK3N1bjR2X2dldF92ZXJzaW9uOgorCW1vdglIVl9DT1JFX0dFVF9WRVIsICVvNQorCW1vdgklbzEsICVvMworCW1vdgklbzIsICVvNAorCXRhCUhWX0NPUkVfVFJBUAorCXN0eAklbzEsIFslbzNdCisJcmV0bAorCSBzdHgJJW8yLCBbJW80XQorCS5zaXplCXN1bjR2X2dldF92ZXJzaW9uLCAuLXN1bjR2X2dldF92ZXJzaW9uCisKKwkvKiAlbzA6IEFQSSBncm91cCBudW1iZXIKKwkgKiAlbzE6IGRlc2lyZWQgbWFqb3IgbnVtYmVyCisJICogJW8yOiBkZXNpcmVkIG1pbm9yIG51bWJlcgorCSAqICVvMzogcG9pbnRlciB0byB1bnNpZ25lZCBsb25nIGFjdHVhbCBtaW5vciBudW1iZXIgc3RvcmFnZQorCSAqCisJICogcmV0dXJucyAlbzA6IHN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl9zZXRfdmVyc2lvbgorCS50eXBlCXN1bjR2X3NldF92ZXJzaW9uLCNmdW5jdGlvbgorc3VuNHZfc2V0X3ZlcnNpb246CisJbW92CUhWX0NPUkVfU0VUX1ZFUiwgJW81CisJbW92CSVvMywgJW80CisJdGEJSFZfQ09SRV9UUkFQCisJcmV0bAorCSBzdHgJJW8xLCBbJW80XQorCS5zaXplCXN1bjR2X3NldF92ZXJzaW9uLCAuLXN1bjR2X3NldF92ZXJzaW9uCisKKwkvKiAlbzA6IHBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZyB0aW1lCisJICoKKwkgKiByZXR1cm5zICVvMDogc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X3RvZF9nZXQKKwkudHlwZQlzdW40dl90b2RfZ2V0LCNmdW5jdGlvbgorc3VuNHZfdG9kX2dldDoKKwltb3YJJW8wLCAlbzQKKwltb3YJSFZfRkFTVF9UT0RfR0VULCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlzdHgJJW8xLCBbJW80XQorCXJldGwKKwkgbm9wCisJLnNpemUJc3VuNHZfdG9kX2dldCwgLi1zdW40dl90b2RfZ2V0CisKKwkvKiAlbzA6IHRpbWUKKwkgKgorCSAqIHJldHVybnMgJW8wOiBzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfdG9kX3NldAorCS50eXBlCXN1bjR2X3RvZF9zZXQsI2Z1bmN0aW9uCitzdW40dl90b2Rfc2V0OgorCW1vdglIVl9GQVNUX1RPRF9TRVQsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXJldGwKKwkgbm9wCisJLnNpemUJc3VuNHZfdG9kX3NldCwgLi1zdW40dl90b2Rfc2V0CisKKwkvKiAlbzA6IHBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZyBzdGF0dXMKKwkgKgorCSAqIHJldHVybnMgJW8wOiBzaWduZWQgY2hhcmFjdGVyCisJICovCisJLmdsb2JsCXN1bjR2X2Nvbl9nZXRjaGFyCisJLnR5cGUJc3VuNHZfY29uX2dldGNoYXIsI2Z1bmN0aW9uCitzdW40dl9jb25fZ2V0Y2hhcjoKKwltb3YJJW8wLCAlbzQKKwltb3YJSFZfRkFTVF9DT05TX0dFVENIQVIsICVvNQorCWNscgklbzAKKwljbHIJJW8xCisJdGEJSFZfRkFTVF9UUkFQCisJc3R4CSVvMCwgWyVvNF0KKwlyZXRsCisJIHNyYQklbzEsIDAsICVvMAorCS5zaXplCXN1bjR2X2Nvbl9nZXRjaGFyLCAuLXN1bjR2X2Nvbl9nZXRjaGFyCisKKwkvKiAlbzA6IHNpZ25lZCBsb25nIGNoYXJhY3RlcgorCSAqCisJICogcmV0dXJucyAlbzA6IHN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl9jb25fcHV0Y2hhcgorCS50eXBlCXN1bjR2X2Nvbl9wdXRjaGFyLCNmdW5jdGlvbgorc3VuNHZfY29uX3B1dGNoYXI6CisJbW92CUhWX0ZBU1RfQ09OU19QVVRDSEFSLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIHNyYQklbzAsIDAsICVvMAorCS5zaXplCXN1bjR2X2Nvbl9wdXRjaGFyLCAuLXN1bjR2X2Nvbl9wdXRjaGFyCisKKwkvKiAlbzA6IGJ1ZmZlciByZWFsIGFkZHJlc3MKKwkgKiAlbzE6IGJ1ZmZlciBzaXplCisJICogJW8yOiBwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcgYnl0ZXNfcmVhZAorCSAqCisJICogcmV0dXJucyAlbzA6IHN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl9jb25fcmVhZAorCS50eXBlCXN1bjR2X2Nvbl9yZWFkLCNmdW5jdGlvbgorc3VuNHZfY29uX3JlYWQ6CisJbW92CSVvMiwgJW80CisJbW92CUhWX0ZBU1RfQ09OU19SRUFELCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlicm56CSVvMCwgMWYKKwkgY21wCSVvMSwgLTEJCS8qIGJyZWFrICovCisJYmUsYSxwbgklaWNjLCAxZgorCSBtb3YJJW8xLCAlbzAKKwljbXAJJW8xLCAtMgkJLyogaHVwICovCisJYmUsYSxwbgklaWNjLCAxZgorCSBtb3YJJW8xLCAlbzAKKwlzdHgJJW8xLCBbJW80XQorMToJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl9jb25fcmVhZCwgLi1zdW40dl9jb25fcmVhZAorCisJLyogJW8wOiBidWZmZXIgcmVhbCBhZGRyZXNzCisJICogJW8xOiBidWZmZXIgc2l6ZQorCSAqICVvMjogcG9pbnRlciB0byB1bnNpZ25lZCBsb25nIGJ5dGVzX3dyaXR0ZW4KKwkgKgorCSAqIHJldHVybnMgJW8wOiBzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfY29uX3dyaXRlCisJLnR5cGUJc3VuNHZfY29uX3dyaXRlLCNmdW5jdGlvbgorc3VuNHZfY29uX3dyaXRlOgorCW1vdgklbzIsICVvNAorCW1vdglIVl9GQVNUX0NPTlNfV1JJVEUsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXN0eAklbzEsIFslbzRdCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl9jb25fd3JpdGUsIC4tc3VuNHZfY29uX3dyaXRlCisKKwkvKiAlbzA6CXNvZnQgc3RhdGUKKwkgKiAlbzE6CWFkZHJlc3Mgb2YgZGVzY3JpcHRpb24gc3RyaW5nCisJICoKKwkgKiByZXR1cm5zICVvMDogc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X21hY2hfc2V0X3NvZnRfc3RhdGUKKwkudHlwZQlzdW40dl9tYWNoX3NldF9zb2Z0X3N0YXRlLCNmdW5jdGlvbgorc3VuNHZfbWFjaF9zZXRfc29mdF9zdGF0ZToKKwltb3YJSFZfRkFTVF9NQUNIX1NFVF9TT0ZUX1NUQVRFLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X21hY2hfc2V0X3NvZnRfc3RhdGUsIC4tc3VuNHZfbWFjaF9zZXRfc29mdF9zdGF0ZQorCisJLyogJW8wOiBleGl0IGNvZGUKKwkgKgorCSAqIERvZXMgbm90IHJldHVybi4KKwkgKi8KKwkuZ2xvYmwJc3VuNHZfbWFjaF9leGl0CisJLnR5cGUJc3VuNHZfbWFjaF9leGl0LCNmdW5jdGlvbgorc3VuNHZfbWFjaF9leGl0OgorCW1vdglIVl9GQVNUX01BQ0hfRVhJVCwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl9tYWNoX2V4aXQsIC4tc3VuNHZfbWFjaF9leGl0CisKKwkvKiAlbzA6IGJ1ZmZlciByZWFsIGFkZHJlc3MKKwkgKiAlbzE6IGJ1ZmZlciBsZW5ndGgKKwkgKiAlbzI6IHBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZyByZWFsX2J1Zl9sZW4KKwkgKgorCSAqIHJldHVybnMgJW8wOiBzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfbWFjaF9kZXNjCisJLnR5cGUJc3VuNHZfbWFjaF9kZXNjLCNmdW5jdGlvbgorc3VuNHZfbWFjaF9kZXNjOgorCW1vdgklbzIsICVvNAorCW1vdglIVl9GQVNUX01BQ0hfREVTQywgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJc3R4CSVvMSwgWyVvNF0KKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X21hY2hfZGVzYywgLi1zdW40dl9tYWNoX2Rlc2MKKworCS8qICVvMDogbmV3IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzCisJICogJW8xOiBwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcgb3JpZ190aW1lb3V0CisJICoKKwkgKiByZXR1cm5zICVvMDogc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X21hY2hfc2V0X3dhdGNoZG9nCisJLnR5cGUJc3VuNHZfbWFjaF9zZXRfd2F0Y2hkb2csI2Z1bmN0aW9uCitzdW40dl9tYWNoX3NldF93YXRjaGRvZzoKKwltb3YJJW8xLCAlbzQKKwltb3YJSFZfRkFTVF9NQUNIX1NFVF9XQVRDSERPRywgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJc3R4CSVvMSwgWyVvNF0KKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X21hY2hfc2V0X3dhdGNoZG9nLCAuLXN1bjR2X21hY2hfc2V0X3dhdGNoZG9nCisKKwkvKiBObyBpbnB1dHMgYW5kIGRvZXMgbm90IHJldHVybi4gICovCisJLmdsb2JsCXN1bjR2X21hY2hfc2lyCisJLnR5cGUJc3VuNHZfbWFjaF9zaXIsI2Z1bmN0aW9uCitzdW40dl9tYWNoX3NpcjoKKwltb3YJJW8xLCAlbzQKKwltb3YJSFZfRkFTVF9NQUNIX1NJUiwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJc3R4CSVvMSwgWyVvNF0KKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X21hY2hfc2lyLCAuLXN1bjR2X21hY2hfc2lyCisKKwkvKiAlbzA6IGNoYW5uZWwKKwkgKiAlbzE6CXJhCisJICogJW8yOgludW1fZW50cmllcworCSAqCisJICogcmV0dXJucyAlbzA6CXN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl9sZGNfdHhfcWNvbmYKKwkudHlwZQlzdW40dl9sZGNfdHhfcWNvbmYsI2Z1bmN0aW9uCitzdW40dl9sZGNfdHhfcWNvbmY6CisJbW92CUhWX0ZBU1RfTERDX1RYX1FDT05GLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X2xkY190eF9xY29uZiwgLi1zdW40dl9sZGNfdHhfcWNvbmYKKworCS8qICVvMDogY2hhbm5lbAorCSAqICVvMToJcG9pbnRlciB0byB1bnNpZ25lZCBsb25nIHJhCisJICogJW8yOglwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcgbnVtX2VudHJpZXMKKwkgKgorCSAqIHJldHVybnMgJW8wOglzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfbGRjX3R4X3FpbmZvCisJLnR5cGUJc3VuNHZfbGRjX3R4X3FpbmZvLCNmdW5jdGlvbgorc3VuNHZfbGRjX3R4X3FpbmZvOgorCW1vdgklbzEsICVnMQorCW1vdgklbzIsICVnMgorCW1vdglIVl9GQVNUX0xEQ19UWF9RSU5GTywgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJc3R4CSVvMSwgWyVnMV0KKwlzdHgJJW8yLCBbJWcyXQorCXJldGwKKwkgbm9wCisJLnNpemUJc3VuNHZfbGRjX3R4X3FpbmZvLCAuLXN1bjR2X2xkY190eF9xaW5mbworCisJLyogJW8wOiBjaGFubmVsCisJICogJW8xOglwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcgaGVhZF9vZmYKKwkgKiAlbzI6CXBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZyB0YWlsX29mZgorCSAqICVvMjoJcG9pbnRlciB0byB1bnNpZ25lZCBsb25nIGNoYW5fc3RhdGUKKwkgKgorCSAqIHJldHVybnMgJW8wOglzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfbGRjX3R4X2dldF9zdGF0ZQorCS50eXBlCXN1bjR2X2xkY190eF9nZXRfc3RhdGUsI2Z1bmN0aW9uCitzdW40dl9sZGNfdHhfZ2V0X3N0YXRlOgorCW1vdgklbzEsICVnMQorCW1vdgklbzIsICVnMgorCW1vdgklbzMsICVnMworCW1vdglIVl9GQVNUX0xEQ19UWF9HRVRfU1RBVEUsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXN0eAklbzEsIFslZzFdCisJc3R4CSVvMiwgWyVnMl0KKwlzdHgJJW8zLCBbJWczXQorCXJldGwKKwkgbm9wCisJLnNpemUJc3VuNHZfbGRjX3R4X2dldF9zdGF0ZSwgLi1zdW40dl9sZGNfdHhfZ2V0X3N0YXRlCisKKwkvKiAlbzA6IGNoYW5uZWwKKwkgKiAlbzE6CXRhaWxfb2ZmCisJICoKKwkgKiByZXR1cm5zICVvMDoJc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X2xkY190eF9zZXRfcXRhaWwKKwkudHlwZQlzdW40dl9sZGNfdHhfc2V0X3F0YWlsLCNmdW5jdGlvbgorc3VuNHZfbGRjX3R4X3NldF9xdGFpbDoKKwltb3YJSFZfRkFTVF9MRENfVFhfU0VUX1FUQUlMLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X2xkY190eF9zZXRfcXRhaWwsIC4tc3VuNHZfbGRjX3R4X3NldF9xdGFpbAorCisJLyogJW8wOiBjaGFubmVsCisJICogJW8xOglyYQorCSAqICVvMjoJbnVtX2VudHJpZXMKKwkgKgorCSAqIHJldHVybnMgJW8wOglzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfbGRjX3J4X3Fjb25mCisJLnR5cGUJc3VuNHZfbGRjX3J4X3Fjb25mLCNmdW5jdGlvbgorc3VuNHZfbGRjX3J4X3Fjb25mOgorCW1vdglIVl9GQVNUX0xEQ19SWF9RQ09ORiwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl9sZGNfcnhfcWNvbmYsIC4tc3VuNHZfbGRjX3J4X3Fjb25mCisKKwkvKiAlbzA6IGNoYW5uZWwKKwkgKiAlbzE6CXBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZyByYQorCSAqICVvMjoJcG9pbnRlciB0byB1bnNpZ25lZCBsb25nIG51bV9lbnRyaWVzCisJICoKKwkgKiByZXR1cm5zICVvMDoJc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X2xkY19yeF9xaW5mbworCS50eXBlCXN1bjR2X2xkY19yeF9xaW5mbywjZnVuY3Rpb24KK3N1bjR2X2xkY19yeF9xaW5mbzoKKwltb3YJJW8xLCAlZzEKKwltb3YJJW8yLCAlZzIKKwltb3YJSFZfRkFTVF9MRENfUlhfUUlORk8sICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXN0eAklbzEsIFslZzFdCisJc3R4CSVvMiwgWyVnMl0KKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X2xkY19yeF9xaW5mbywgLi1zdW40dl9sZGNfcnhfcWluZm8KKworCS8qICVvMDogY2hhbm5lbAorCSAqICVvMToJcG9pbnRlciB0byB1bnNpZ25lZCBsb25nIGhlYWRfb2ZmCisJICogJW8yOglwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcgdGFpbF9vZmYKKwkgKiAlbzI6CXBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZyBjaGFuX3N0YXRlCisJICoKKwkgKiByZXR1cm5zICVvMDoJc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X2xkY19yeF9nZXRfc3RhdGUKKwkudHlwZQlzdW40dl9sZGNfcnhfZ2V0X3N0YXRlLCNmdW5jdGlvbgorc3VuNHZfbGRjX3J4X2dldF9zdGF0ZToKKwltb3YJJW8xLCAlZzEKKwltb3YJJW8yLCAlZzIKKwltb3YJJW8zLCAlZzMKKwltb3YJSFZfRkFTVF9MRENfUlhfR0VUX1NUQVRFLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlzdHgJJW8xLCBbJWcxXQorCXN0eAklbzIsIFslZzJdCisJc3R4CSVvMywgWyVnM10KKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X2xkY19yeF9nZXRfc3RhdGUsIC4tc3VuNHZfbGRjX3J4X2dldF9zdGF0ZQorCisJLyogJW8wOiBjaGFubmVsCisJICogJW8xOgloZWFkX29mZgorCSAqCisJICogcmV0dXJucyAlbzA6CXN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl9sZGNfcnhfc2V0X3FoZWFkCisJLnR5cGUJc3VuNHZfbGRjX3J4X3NldF9xaGVhZCwjZnVuY3Rpb24KK3N1bjR2X2xkY19yeF9zZXRfcWhlYWQ6CisJbW92CUhWX0ZBU1RfTERDX1JYX1NFVF9RSEVBRCwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl9sZGNfcnhfc2V0X3FoZWFkLCAuLXN1bjR2X2xkY19yeF9zZXRfcWhlYWQKKworCS8qICVvMDogY2hhbm5lbAorCSAqICVvMToJcmEKKwkgKiAlbzI6CW51bV9lbnRyaWVzCisJICoKKwkgKiByZXR1cm5zICVvMDogc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X2xkY19zZXRfbWFwX3RhYmxlCisJLnR5cGUJc3VuNHZfbGRjX3NldF9tYXBfdGFibGUsI2Z1bmN0aW9uCitzdW40dl9sZGNfc2V0X21hcF90YWJsZToKKwltb3YJSFZfRkFTVF9MRENfU0VUX01BUF9UQUJMRSwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl9sZGNfc2V0X21hcF90YWJsZSwgLi1zdW40dl9sZGNfc2V0X21hcF90YWJsZQorCisJLyogJW8wOiBjaGFubmVsCisJICogJW8xOglwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcgcmEKKwkgKiAlbzI6CXBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZyBudW1fZW50cmllcworCSAqCisJICogcmV0dXJucyAlbzA6IHN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl9sZGNfZ2V0X21hcF90YWJsZQorCS50eXBlCXN1bjR2X2xkY19nZXRfbWFwX3RhYmxlLCNmdW5jdGlvbgorc3VuNHZfbGRjX2dldF9tYXBfdGFibGU6CisJbW92CSVvMSwgJWcxCisJbW92CSVvMiwgJWcyCisJbW92CUhWX0ZBU1RfTERDX0dFVF9NQVBfVEFCTEUsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXN0eAklbzEsIFslZzFdCisJc3R4CSVvMiwgWyVnMl0KKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X2xkY19nZXRfbWFwX3RhYmxlLCAuLXN1bjR2X2xkY19nZXRfbWFwX3RhYmxlCisKKwkvKiAlbzA6CWNoYW5uZWwKKwkgKiAlbzE6CWRpcl9jb2RlCisJICogJW8yOgl0Z3RfcmFkZHIKKwkgKiAlbzM6CWxjbF9yYWRkcgorCSAqICVvNDoJbGVuCisJICogJW81Oglwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcgYWN0dWFsX2xlbgorCSAqCisJICogcmV0dXJucyAlbzA6CXN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl9sZGNfY29weQorCS50eXBlCXN1bjR2X2xkY19jb3B5LCNmdW5jdGlvbgorc3VuNHZfbGRjX2NvcHk6CisJbW92CSVvNSwgJWcxCisJbW92CUhWX0ZBU1RfTERDX0NPUFksICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXN0eAklbzEsIFslZzFdCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl9sZGNfY29weSwgLi1zdW40dl9sZGNfY29weQorCisJLyogJW8wOgljaGFubmVsCisJICogJW8xOgljb29raWUKKwkgKiAlbzI6CXBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZyByYQorCSAqICVvMzoJcG9pbnRlciB0byB1bnNpZ25lZCBsb25nIHBlcm0KKwkgKgorCSAqIHJldHVybnMgJW8wOglzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfbGRjX21hcGluCisJLnR5cGUJc3VuNHZfbGRjX21hcGluLCNmdW5jdGlvbgorc3VuNHZfbGRjX21hcGluOgorCW1vdgklbzIsICVnMQorCW1vdgklbzMsICVnMgorCW1vdglIVl9GQVNUX0xEQ19NQVBJTiwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJc3R4CSVvMSwgWyVnMV0KKwlzdHgJJW8yLCBbJWcyXQorCXJldGwKKwkgbm9wCisJLnNpemUJc3VuNHZfbGRjX21hcGluLCAuLXN1bjR2X2xkY19tYXBpbgorCisJLyogJW8wOglyYQorCSAqCisJICogcmV0dXJucyAlbzA6CXN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl9sZGNfdW5tYXAKKwkudHlwZQlzdW40dl9sZGNfdW5tYXAsI2Z1bmN0aW9uCitzdW40dl9sZGNfdW5tYXA6CisJbW92CUhWX0ZBU1RfTERDX1VOTUFQLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X2xkY191bm1hcCwgLi1zdW40dl9sZGNfdW5tYXAKKworCS8qICVvMDoJY29va2llCisJICogJW8xOgltdGVfY29va2llCisJICoKKwkgKiByZXR1cm5zICVvMDoJc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X2xkY19yZXZva2UKKwkudHlwZQlzdW40dl9sZGNfcmV2b2tlLCNmdW5jdGlvbgorc3VuNHZfbGRjX3Jldm9rZToKKwltb3YJSFZfRkFTVF9MRENfUkVWT0tFLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X2xkY19yZXZva2UsIC4tc3VuNHZfbGRjX3Jldm9rZQorCisJLyogJW8wOiBkZXZpY2UgaGFuZGxlCisJICogJW8xOglkZXZpY2UgSU5PCisJICogJW8yOglwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcgY29va2llCisJICoKKwkgKiByZXR1cm5zICVvMDogc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X3ZpbnRyX2dldF9jb29raWUKKwkudHlwZQlzdW40dl92aW50cl9nZXRfY29va2llLCNmdW5jdGlvbgorc3VuNHZfdmludHJfZ2V0X2Nvb2tpZToKKwltb3YJJW8yLCAlZzEKKwltb3YJSFZfRkFTVF9WSU5UUl9HRVRfQ09PS0lFLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlzdHgJJW8xLCBbJWcxXQorCXJldGwKKwkgbm9wCisJLnNpemUJc3VuNHZfdmludHJfZ2V0X2Nvb2tpZSwgLi1zdW40dl92aW50cl9nZXRfY29va2llCisKKwkvKiAlbzA6IGRldmljZSBoYW5kbGUKKwkgKiAlbzE6CWRldmljZSBJTk8KKwkgKiAlbzI6CWNvb2tpZQorCSAqCisJICogcmV0dXJucyAlbzA6IHN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl92aW50cl9zZXRfY29va2llCisJLnR5cGUJc3VuNHZfdmludHJfc2V0X2Nvb2tpZSwjZnVuY3Rpb24KK3N1bjR2X3ZpbnRyX3NldF9jb29raWU6CisJbW92CUhWX0ZBU1RfVklOVFJfU0VUX0NPT0tJRSwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl92aW50cl9zZXRfY29va2llLCAuLXN1bjR2X3ZpbnRyX3NldF9jb29raWUKKworCS8qICVvMDogZGV2aWNlIGhhbmRsZQorCSAqICVvMToJZGV2aWNlIElOTworCSAqICVvMjoJcG9pbnRlciB0byB1bnNpZ25lZCBsb25nIHZhbGlkX3N0YXRlCisJICoKKwkgKiByZXR1cm5zICVvMDogc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X3ZpbnRyX2dldF92YWxpZAorCS50eXBlCXN1bjR2X3ZpbnRyX2dldF92YWxpZCwjZnVuY3Rpb24KK3N1bjR2X3ZpbnRyX2dldF92YWxpZDoKKwltb3YJJW8yLCAlZzEKKwltb3YJSFZfRkFTVF9WSU5UUl9HRVRfVkFMSUQsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXN0eAklbzEsIFslZzFdCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl92aW50cl9nZXRfdmFsaWQsIC4tc3VuNHZfdmludHJfZ2V0X3ZhbGlkCisKKwkvKiAlbzA6IGRldmljZSBoYW5kbGUKKwkgKiAlbzE6CWRldmljZSBJTk8KKwkgKiAlbzI6CXZhbGlkX3N0YXRlCisJICoKKwkgKiByZXR1cm5zICVvMDogc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X3ZpbnRyX3NldF92YWxpZAorCS50eXBlCXN1bjR2X3ZpbnRyX3NldF92YWxpZCwjZnVuY3Rpb24KK3N1bjR2X3ZpbnRyX3NldF92YWxpZDoKKwltb3YJSFZfRkFTVF9WSU5UUl9TRVRfVkFMSUQsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXJldGwKKwkgbm9wCisJLnNpemUJc3VuNHZfdmludHJfc2V0X3ZhbGlkLCAuLXN1bjR2X3ZpbnRyX3NldF92YWxpZAorCisJLyogJW8wOiBkZXZpY2UgaGFuZGxlCisJICogJW8xOglkZXZpY2UgSU5PCisJICogJW8yOglwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcgc3RhdGUKKwkgKgorCSAqIHJldHVybnMgJW8wOiBzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfdmludHJfZ2V0X3N0YXRlCisJLnR5cGUJc3VuNHZfdmludHJfZ2V0X3N0YXRlLCNmdW5jdGlvbgorc3VuNHZfdmludHJfZ2V0X3N0YXRlOgorCW1vdgklbzIsICVnMQorCW1vdglIVl9GQVNUX1ZJTlRSX0dFVF9TVEFURSwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJc3R4CSVvMSwgWyVnMV0KKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X3ZpbnRyX2dldF9zdGF0ZSwgLi1zdW40dl92aW50cl9nZXRfc3RhdGUKKworCS8qICVvMDogZGV2aWNlIGhhbmRsZQorCSAqICVvMToJZGV2aWNlIElOTworCSAqICVvMjoJc3RhdGUKKwkgKgorCSAqIHJldHVybnMgJW8wOiBzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfdmludHJfc2V0X3N0YXRlCisJLnR5cGUJc3VuNHZfdmludHJfc2V0X3N0YXRlLCNmdW5jdGlvbgorc3VuNHZfdmludHJfc2V0X3N0YXRlOgorCW1vdglIVl9GQVNUX1ZJTlRSX1NFVF9TVEFURSwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl92aW50cl9zZXRfc3RhdGUsIC4tc3VuNHZfdmludHJfc2V0X3N0YXRlCisKKwkvKiAlbzA6IGRldmljZSBoYW5kbGUKKwkgKiAlbzE6CWRldmljZSBJTk8KKwkgKiAlbzI6CXBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZyBjcHVpZAorCSAqCisJICogcmV0dXJucyAlbzA6IHN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl92aW50cl9nZXRfdGFyZ2V0CisJLnR5cGUJc3VuNHZfdmludHJfZ2V0X3RhcmdldCwjZnVuY3Rpb24KK3N1bjR2X3ZpbnRyX2dldF90YXJnZXQ6CisJbW92CSVvMiwgJWcxCisJbW92CUhWX0ZBU1RfVklOVFJfR0VUX1RBUkdFVCwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJc3R4CSVvMSwgWyVnMV0KKwlyZXRsCisJIG5vcAorCS5zaXplCXN1bjR2X3ZpbnRyX2dldF90YXJnZXQsIC4tc3VuNHZfdmludHJfZ2V0X3RhcmdldAorCisJLyogJW8wOiBkZXZpY2UgaGFuZGxlCisJICogJW8xOglkZXZpY2UgSU5PCisJICogJW8yOgljcHVpZAorCSAqCisJICogcmV0dXJucyAlbzA6IHN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl92aW50cl9zZXRfdGFyZ2V0CisJLnR5cGUJc3VuNHZfdmludHJfc2V0X3RhcmdldCwjZnVuY3Rpb24KK3N1bjR2X3ZpbnRyX3NldF90YXJnZXQ6CisJbW92CUhWX0ZBU1RfVklOVFJfU0VUX1RBUkdFVCwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl92aW50cl9zZXRfdGFyZ2V0LCAuLXN1bjR2X3ZpbnRyX3NldF90YXJnZXQKKworCS8qICVvMDogTkNTIHN1Yi1mdW5jdGlvbgorCSAqICVvMToJc3ViLWZ1bmN0aW9uIGFyZyByZWFsLWFkZHJlc3MKKwkgKiAlbzI6CXN1Yi1mdW5jdGlvbiBhcmcgc2l6ZQorCSAqCisJICogcmV0dXJucyAlbzA6CXN0YXR1cworCSAqLworCS5nbG9ibAlzdW40dl9uY3NfcmVxdWVzdAorCS50eXBlCXN1bjR2X25jc19yZXF1ZXN0LCNmdW5jdGlvbgorc3VuNHZfbmNzX3JlcXVlc3Q6CisJbW92CUhWX0ZBU1RfTkNTX1JFUVVFU1QsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXJldGwKKwkgbm9wCisJLnNpemUJc3VuNHZfbmNzX3JlcXVlc3QsIC4tc3VuNHZfbmNzX3JlcXVlc3QKKworCS5nbG9ibAlzdW40dl9zY3Zfc2VuZAorCS50eXBlCXN1bjR2X3Njdl9zZW5kLCNmdW5jdGlvbgorc3VuNHZfc2N2X3NlbmQ6CisJc2F2ZQklc3AsIC0xOTIsICVzcAorCW1vdgklaTAsICVvMAorCW1vdgklaTEsICVvMQorCW1vdgklaTIsICVvMgorCW1vdglIVl9GQVNUX1NWQ19TRU5ELCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlzdHgJJW8xLCBbJWkzXQorCXJldAorCXJlc3RvcmUKKwkuc2l6ZQlzdW40dl9zY3Zfc2VuZCwgLi1zdW40dl9zY3Zfc2VuZAorCisJLmdsb2JsCXN1bjR2X3Njdl9yZWN2CisJLnR5cGUJc3VuNHZfc2N2X3JlY3YsI2Z1bmN0aW9uCitzdW40dl9zY3ZfcmVjdjoKKwlzYXZlCSVzcCwgLTE5MiwgJXNwCisJbW92CSVpMCwgJW8wCisJbW92CSVpMSwgJW8xCisJbW92CSVpMiwgJW8yCisJbW92CUhWX0ZBU1RfU1ZDX1JFQ1YsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXN0eAklbzEsIFslaTNdCisJcmV0CisJcmVzdG9yZQorCS5zaXplCXN1bjR2X3Njdl9yZWN2LCAuLXN1bjR2X3Njdl9yZWN2CisKKwkuZ2xvYmwJc3VuNHZfc2N2X2dldHN0YXR1cworCS50eXBlCXN1bjR2X3Njdl9nZXRzdGF0dXMsI2Z1bmN0aW9uCitzdW40dl9zY3ZfZ2V0c3RhdHVzOgorCW1vdglIVl9GQVNUX1NWQ19HRVRTVEFUVVMsICVvNQorCW1vdgklbzEsICVvNAorCXRhCUhWX0ZBU1RfVFJBUAorCXN0eAklbzEsIFslbzRdCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl9zY3ZfZ2V0c3RhdHVzLCAuLXN1bjR2X3Njdl9nZXRzdGF0dXMKKworCS5nbG9ibAlzdW40dl9zY3Zfc2V0c3RhdHVzCisJLnR5cGUJc3VuNHZfc2N2X3NldHN0YXR1cywjZnVuY3Rpb24KK3N1bjR2X3Njdl9zZXRzdGF0dXM6CisJbW92CUhWX0ZBU1RfU1ZDX1NFVFNUQVRVUywgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl9zY3Zfc2V0c3RhdHVzLCAuLXN1bjR2X3Njdl9zZXRzdGF0dXMKKworCS5nbG9ibAlzdW40dl9zY3ZfY2xyc3RhdHVzCisJLnR5cGUJc3VuNHZfc2N2X2NscnN0YXR1cywjZnVuY3Rpb24KK3N1bjR2X3Njdl9jbHJzdGF0dXM6CisJbW92CUhWX0ZBU1RfU1ZDX0NMUlNUQVRVUywgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKwkuc2l6ZQlzdW40dl9zY3ZfY2xyc3RhdHVzLCAuLXN1bjR2X3Njdl9jbHJzdGF0dXMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMKaW5kZXggYmFlYTEwYS4uNzcyNTk1MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMKQEAgLTUyMyw3ICs1MjMsNyBAQAogI2Vsc2UKIAltb3YJMCwgJW8wCiAjZW5kaWYKLQlzdGIJJW8wLCBbJWc2ICsgVElfQ1BVXQorCXN0aAklbzAsIFslZzYgKyBUSV9DUFVdCiAKIAkvKiBPZmYgd2UgZ28uLi4uICovCiAJY2FsbAlzdGFydF9rZXJuZWwKQEAgLTY1MywzMyArNjUzLDU0IEBACiAJIHJlc3RvcmUKIHNwYXJjNjRfYm9vdF9lbmQ6CiAKLSNpbmNsdWRlICJrdGxiLlMiCi0jaW5jbHVkZSAidHNiLlMiCiAjaW5jbHVkZSAiZXRyYXAuUyIKICNpbmNsdWRlICJydHJhcC5TIgogI2luY2x1ZGUgIndpbmZpeHVwLlMiCiAjaW5jbHVkZSAiZW50cnkuUyIKICNpbmNsdWRlICJzdW40dl90bGJfbWlzcy5TIgogI2luY2x1ZGUgInN1bjR2X2l2ZWMuUyIKKyNpbmNsdWRlICJrdGxiLlMiCisjaW5jbHVkZSAidHNiLlMiCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIHNraXAgbWFrZXMgc3VyZSB0aGUgdHJhcCB0YWJsZSBpbiB0dGFibGUuUyBpcyBhbGlnbmVkCiAgKiBvbiBhIDMySyBib3VuZGFyeSBhcyByZXF1aXJlZCBieSB0aGUgdjkgc3BlY3MgZm9yIFRCQSByZWdpc3Rlci4KICAqCiAgKiBXZSBhbGlnbiB0byBhIDMySyBib3VuZGFyeSwgdGhlbiB3ZSBoYXZlIHRoZSAzMksga2VybmVsIFRTQiwKLSAqIHRoZW4gdGhlIDMySyBhbGlnbmVkIHRyYXAgdGFibGUuCisgKiB0aGUgNjRLIGtlcm5lbCA0TUIgVFNCLCBhbmQgdGhlbiB0aGUgMzJLIGFsaWduZWQgdHJhcCB0YWJsZS4KICAqLwogMToKIAkuc2tpcAkweDQwMDAgKyBfc3RhcnQgLSAxYgogCishIDB4MDAwMDAwMDAwMDQwODAwMAorCiAJLmdsb2JsCXN3YXBwZXJfdHNiCiBzd2FwcGVyX3RzYjoKIAkuc2tpcAkoMzIgKiAxMDI0KQogCi0hIDB4MDAwMDAwMDAwMDQwODAwMAorCS5nbG9ibAlzd2FwcGVyXzRtX3RzYgorc3dhcHBlcl80bV90c2I6CisJLnNraXAJKDY0ICogMTAyNCkKIAorISAweDAwMDAwMDAwMDA0MjAwMDAKKworCS8qIFNvbWUgY2FyZSBuZWVkcyB0byBiZSBleGVyY2lzZWQgaWYgeW91IHRyeSB0byBtb3ZlIHRoZQorCSAqIGxvY2F0aW9uIG9mIHRoZSB0cmFwIHRhYmxlIHJlbGF0aXZlIHRvIG90aGVyIHRoaW5ncy4gIEZvcgorCSAqIG9uZSB0aGluZyB0aGVyZSBhcmUgYnIqIGluc3RydWN0aW9ucyBpbiBzb21lIG9mIHRoZQorCSAqIHRyYXAgdGFibGUgZW50aXJlcyB3aGljaCBicmFuY2ggYmFjayB0byBjb2RlIGluIGt0bGIuUworCSAqIFRob3NlIGluc3RydWN0aW9ucyBjYW4gb25seSBoYW5kbGUgYSBzaWduZWQgMTYtYml0CisJICogZGlzcGxhY2VtZW50LgorCSAqCisJICogVGhlcmUgaXMgYSBiaW51dGlscyBidWcgKGJ1Z3ppbGxhICM0NTU4KSB3aGljaCBjYXVzZXMKKwkgKiB0aGUgcmVsb2NhdGlvbiBvdmVyZmxvdyBjaGVja3MgZm9yIHN1Y2ggaW5zdHJ1Y3Rpb25zIHRvCisJICogbm90IGJlIGRvbmUgY29ycmVjdGx5LiAgU28gYmludHVpbHMgd2lsbCBub3Qgbm90aWNlIHRoZQorCSAqIGVycm9yIGFuZCB3aWxsIGluc3RlYWQgd3JpdGUganVuayBpbnRvIHRoZSByZWxvY2F0aW9uIGFuZAorCSAqIHlvdSdsbCBoYXZlIGFuIHVuYm9vdGFibGUga2VybmVsLgorCSAqLwogI2luY2x1ZGUgInR0YWJsZS5TIgogCishIDB4MDAwMDAwMDAwMDQyODAwMAorCiAjaW5jbHVkZSAic3lzdGJscy5TIgogCiAJLmRhdGEKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaHZhcGkuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaHZhcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzRmNWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9odmFwaS5jCkBAIC0wLDAgKzEsMTkyIEBACisvKiBodmFwaS5jOiBIeXBlcnZpc29yIEFQSSBtYW5hZ2VtZW50LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vc3N0YXRlLmg+CisKKy8qIElmIHRoZSBoeXBlcnZpc29yIGluZGljYXRlcyB0aGF0IHRoZSBBUEkgc2V0dGluZworICogY2FsbHMgYXJlIHVuc3VwcG9ydGVkLCBieSByZXR1cm5pbmcgSFZfRUJBRFRSQVAgb3IKKyAqIEhWX0VOT1RTVVBQT1JURUQsIHdlIGFzc3VtZSB0aGF0IEFQSSBncm91cHMgd2l0aCB0aGUKKyAqIFBSRV9BUEkgZmxhZyBzZXQgYXJlIG1ham9yIDEgbWlub3IgMC4KKyAqLworc3RydWN0IGFwaV9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIGdyb3VwOworCXVuc2lnbmVkIGxvbmcgbWFqb3I7CisJdW5zaWduZWQgbG9uZyBtaW5vcjsKKwl1bnNpZ25lZCBpbnQgcmVmY250OworCXVuc2lnbmVkIGludCBmbGFnczsKKyNkZWZpbmUgRkxBR19QUkVfQVBJCQkweDAwMDAwMDAxCit9OworCitzdGF0aWMgc3RydWN0IGFwaV9pbmZvIGFwaV90YWJsZVtdID0geworCXsgLmdyb3VwID0gSFZfR1JQX1NVTjRWLAkuZmxhZ3MgPSBGTEFHX1BSRV9BUEkJfSwKKwl7IC5ncm91cCA9IEhWX0dSUF9DT1JFLAkJLmZsYWdzID0gRkxBR19QUkVfQVBJCX0sCisJeyAuZ3JvdXAgPSBIVl9HUlBfSU5UUiwJCQkJCX0sCisJeyAuZ3JvdXAgPSBIVl9HUlBfU09GVF9TVEFURSwJCQkJfSwKKwl7IC5ncm91cCA9IEhWX0dSUF9QQ0ksCQkuZmxhZ3MgPSBGTEFHX1BSRV9BUEkJfSwKKwl7IC5ncm91cCA9IEhWX0dSUF9MRE9NLAkJCQkJfSwKKwl7IC5ncm91cCA9IEhWX0dSUF9TVkNfQ0hBTiwJLmZsYWdzID0gRkxBR19QUkVfQVBJCX0sCisJeyAuZ3JvdXAgPSBIVl9HUlBfTkNTLAkJLmZsYWdzID0gRkxBR19QUkVfQVBJCX0sCisJeyAuZ3JvdXAgPSBIVl9HUlBfTklBR19QRVJGLAkuZmxhZ3MgPSBGTEFHX1BSRV9BUEkJfSwKKwl7IC5ncm91cCA9IEhWX0dSUF9GSVJFX1BFUkYsCQkJCX0sCisJeyAuZ3JvdXAgPSBIVl9HUlBfRElBRywJCS5mbGFncyA9IEZMQUdfUFJFX0FQSQl9LAorfTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhodmFwaV9sb2NrKTsKKworc3RhdGljIHN0cnVjdCBhcGlfaW5mbyAqX19nZXRfaW5mbyh1bnNpZ25lZCBsb25nIGdyb3VwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXBpX3RhYmxlKTsgaSsrKSB7CisJCWlmIChhcGlfdGFibGVbaV0uZ3JvdXAgPT0gZ3JvdXApCisJCQlyZXR1cm4gJmFwaV90YWJsZVtpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZ2V0X3JlZihzdHJ1Y3QgYXBpX2luZm8gKnApCit7CisJcC0+cmVmY250Kys7Cit9CisKK3N0YXRpYyB2b2lkIF9fcHV0X3JlZihzdHJ1Y3QgYXBpX2luZm8gKnApCit7CisJaWYgKC0tcC0+cmVmY250ID09IDApIHsKKwkJdW5zaWduZWQgbG9uZyBpZ25vcmU7CisKKwkJc3VuNHZfc2V0X3ZlcnNpb24ocC0+Z3JvdXAsIDAsIDAsICZpZ25vcmUpOworCQlwLT5tYWpvciA9IHAtPm1pbm9yID0gMDsKKwl9Cit9CisKKy8qIFJlZ2lzdGVyIGEgaHlwZXJ2aXNvciBBUEkgc3BlY2lmaWNhdGlvbi4gIEl0IGluZGljYXRlcyB0aGUKKyAqIEFQSSBncm91cCBhbmQgZGVzaXJlZCBtYWpvcittaW5vci4KKyAqCisgKiBJZiBhbiBleGlzdGluZyBBUEkgcmVnaXN0cmF0aW9uIGV4aXN0cyAnMCcgKHN1Y2Nlc3MpIHdpbGwKKyAqIGJlIHJldHVybmVkIGlmIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgb25lIGJlaW5nIHJlZ2lzdGVyZWQuCisgKiBPdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICogT3RoZXJ3aXNlIGFuIGF0dGVtcHQgd2lsbCBiZSBtYWRlIHRvIG5lZ290aWF0ZSB0aGUgcmVxdWVzdGVkCisgKiBBUEkgZ3JvdXAvbWFqb3IvbWlub3Igd2l0aCB0aGUgaHlwZXJ2aXNvciwgYW5kIGVycm9ycyByZXR1cm5lZAorICogaWYgdGhhdCBkb2VzIG5vdCBzdWNjZWVkLgorICovCitpbnQgc3VuNHZfaHZhcGlfcmVnaXN0ZXIodW5zaWduZWQgbG9uZyBncm91cCwgdW5zaWduZWQgbG9uZyBtYWpvciwKKwkJCSB1bnNpZ25lZCBsb25nICptaW5vcikKK3sKKwlzdHJ1Y3QgYXBpX2luZm8gKnA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh2YXBpX2xvY2ssIGZsYWdzKTsKKwlwID0gX19nZXRfaW5mbyhncm91cCk7CisJcmV0ID0gLUVJTlZBTDsKKwlpZiAocCkgeworCQlpZiAocC0+cmVmY250KSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJaWYgKHAtPm1ham9yID09IG1ham9yKSB7CisJCQkJKm1pbm9yID0gcC0+bWlub3I7CisJCQkJcmV0ID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGxvbmcgYWN0dWFsX21pbm9yOworCQkJdW5zaWduZWQgbG9uZyBodl9yZXQ7CisKKwkJCWh2X3JldCA9IHN1bjR2X3NldF92ZXJzaW9uKGdyb3VwLCBtYWpvciwgKm1pbm9yLAorCQkJCQkJICAgJmFjdHVhbF9taW5vcik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJaWYgKGh2X3JldCA9PSBIVl9FT0spIHsKKwkJCQkqbWlub3IgPSBhY3R1YWxfbWlub3I7CisJCQkJcC0+bWFqb3IgPSBtYWpvcjsKKwkJCQlwLT5taW5vciA9IGFjdHVhbF9taW5vcjsKKwkJCQlyZXQgPSAwOworCQkJfSBlbHNlIGlmIChodl9yZXQgPT0gSFZfRUJBRFRSQVAgfHwKKwkJCQkgICBodl9yZXQgPT0gSFZfRU5PVFNVUFBPUlRFRCkgeworCQkJCWlmIChwLT5mbGFncyAmIEZMQUdfUFJFX0FQSSkgeworCQkJCQlpZiAobWFqb3IgPT0gMSkgeworCQkJCQkJcC0+bWFqb3IgPSAxOworCQkJCQkJcC0+bWlub3IgPSAwOworCQkJCQkJKm1pbm9yID0gMDsKKwkJCQkJCXJldCA9IDA7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAocmV0ID09IDApCisJCQlfX2dldF9yZWYocCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh2YXBpX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHN1bjR2X2h2YXBpX3JlZ2lzdGVyKTsKKwordm9pZCBzdW40dl9odmFwaV91bnJlZ2lzdGVyKHVuc2lnbmVkIGxvbmcgZ3JvdXApCit7CisJc3RydWN0IGFwaV9pbmZvICpwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHZhcGlfbG9jaywgZmxhZ3MpOworCXAgPSBfX2dldF9pbmZvKGdyb3VwKTsKKwlpZiAocCkKKwkJX19wdXRfcmVmKHApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh2YXBpX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woc3VuNHZfaHZhcGlfdW5yZWdpc3Rlcik7CisKK2ludCBzdW40dl9odmFwaV9nZXQodW5zaWduZWQgbG9uZyBncm91cCwKKwkJICAgIHVuc2lnbmVkIGxvbmcgKm1ham9yLAorCQkgICAgdW5zaWduZWQgbG9uZyAqbWlub3IpCit7CisJc3RydWN0IGFwaV9pbmZvICpwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZodmFwaV9sb2NrLCBmbGFncyk7CisJcmV0ID0gLUVJTlZBTDsKKwlwID0gX19nZXRfaW5mbyhncm91cCk7CisJaWYgKHAgJiYgcC0+cmVmY250KSB7CisJCSptYWpvciA9IHAtPm1ham9yOworCQkqbWlub3IgPSBwLT5taW5vcjsKKwkJcmV0ID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHZhcGlfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woc3VuNHZfaHZhcGlfZ2V0KTsKKwordm9pZCBfX2luaXQgc3VuNHZfaHZhcGlfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZ3JvdXAsIG1ham9yLCBtaW5vcjsKKworCWdyb3VwID0gSFZfR1JQX1NVTjRWOworCW1ham9yID0gMTsKKwltaW5vciA9IDA7CisJaWYgKHN1bjR2X2h2YXBpX3JlZ2lzdGVyKGdyb3VwLCBtYWpvciwgJm1pbm9yKSkKKwkJZ290byBiYWQ7CisKKwlncm91cCA9IEhWX0dSUF9DT1JFOworCW1ham9yID0gMTsKKwltaW5vciA9IDE7CisJaWYgKHN1bjR2X2h2YXBpX3JlZ2lzdGVyKGdyb3VwLCBtYWpvciwgJm1pbm9yKSkKKwkJZ290byBiYWQ7CisKKwlzdW40dl9zc3RhdGVfaW5pdCgpOworCisJcmV0dXJuOworCitiYWQ6CisJcHJvbV9wcmludGYoIkhWQVBJOiBDYW5ub3QgcmVnaXN0ZXIgQVBJIGdyb3VwICIKKwkJICAgICIlbHggd2l0aCBtYWpvcigldSkgbWlub3IoJXUpXG4iLAorCQkgICAgZ3JvdXAsIG1ham9yLCBtaW5vcik7CisJcHJvbV9oYWx0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYwppbmRleCAzZWRjMThlLi5hMzZmOGRkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXJxLmMKQEAgLTE3MSw4ICsxNzEsNiBAQAogCXJldHVybiAwOwogfQogCi1leHRlcm4gdW5zaWduZWQgbG9uZyByZWFsX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKLQogc3RhdGljIHVuc2lnbmVkIGludCBzdW40dV9jb21wdXRlX3RpZCh1bnNpZ25lZCBsb25nIGltYXAsIHVuc2lnbmVkIGxvbmcgY3B1aWQpCiB7CiAJdW5zaWduZWQgaW50IHRpZDsKQEAgLTY5NCw5ICs2OTIsMjAgQEAKIAl0cmFwX2Jsb2NrW2NwdV0uaXJxX3dvcmtsaXN0ID0gMDsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IHJlZ2lzdGVyX29uZV9tb25kbyh1bnNpZ25lZCBsb25nIHBhZGRyLCB1bnNpZ25lZCBsb25nIHR5cGUpCisvKiBQbGVhc2UgYmUgdmVyeSBjYXJlZnVsIHdpdGggcmVnaXN0ZXJfb25lX21vbmRvKCkgYW5kCisgKiBzdW40dl9yZWdpc3Rlcl9tb25kb19xdWV1ZXMoKS4KKyAqCisgKiBPbiBTTVAgdGhpcyBnZXRzIGludm9rZWQgZnJvbSB0aGUgQ1BVIHRyYW1wb2xpbmUgYmVmb3JlCisgKiB0aGUgY3B1IGhhcyBmdWxseSB0YWtlbiBvdmVyIHRoZSB0cmFwIHRhYmxlIGZyb20gT0JQLAorICogYW5kIGl0J3Mga2VybmVsIHN0YWNrICsgJWc2IHRocmVhZCByZWdpc3RlciBzdGF0ZSBpcworICogbm90IGZ1bGx5IGNvb2tlZCB5ZXQuCisgKgorICogVGhlcmVmb3JlIHlvdSBjYW5ub3QgbWFrZSBhbnkgT0JQIGNhbGxzLCBub3QgZXZlbiBwcm9tX3ByaW50ZiwKKyAqIGZyb20gdGhlc2UgdHdvIHJvdXRpbmVzLgorICovCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmVnaXN0ZXJfb25lX21vbmRvKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGxvbmcgdHlwZSwgdW5zaWduZWQgbG9uZyBxbWFzaykKIHsKLQl1bnNpZ25lZCBsb25nIG51bV9lbnRyaWVzID0gMTI4OworCXVuc2lnbmVkIGxvbmcgbnVtX2VudHJpZXMgPSAocW1hc2sgKyAxKSAvIDY0OwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwogCiAJc3RhdHVzID0gc3VuNHZfY3B1X3Fjb25mKHR5cGUsIHBhZGRyLCBudW1fZW50cmllcyk7CkBAIC03MTEsNDQgKzcyMCw1OCBAQAogewogCXN0cnVjdCB0cmFwX3Blcl9jcHUgKnRiID0gJnRyYXBfYmxvY2tbdGhpc19jcHVdOwogCi0JcmVnaXN0ZXJfb25lX21vbmRvKHRiLT5jcHVfbW9uZG9fcGEsIEhWX0NQVV9RVUVVRV9DUFVfTU9ORE8pOwotCXJlZ2lzdGVyX29uZV9tb25kbyh0Yi0+ZGV2X21vbmRvX3BhLCBIVl9DUFVfUVVFVUVfREVWSUNFX01PTkRPKTsKLQlyZWdpc3Rlcl9vbmVfbW9uZG8odGItPnJlc3VtX21vbmRvX3BhLCBIVl9DUFVfUVVFVUVfUkVTX0VSUk9SKTsKLQlyZWdpc3Rlcl9vbmVfbW9uZG8odGItPm5vbnJlc3VtX21vbmRvX3BhLCBIVl9DUFVfUVVFVUVfTk9OUkVTX0VSUk9SKTsKKwlyZWdpc3Rlcl9vbmVfbW9uZG8odGItPmNwdV9tb25kb19wYSwgSFZfQ1BVX1FVRVVFX0NQVV9NT05ETywKKwkJCSAgIHRiLT5jcHVfbW9uZG9fcW1hc2spOworCXJlZ2lzdGVyX29uZV9tb25kbyh0Yi0+ZGV2X21vbmRvX3BhLCBIVl9DUFVfUVVFVUVfREVWSUNFX01PTkRPLAorCQkJICAgdGItPmRldl9tb25kb19xbWFzayk7CisJcmVnaXN0ZXJfb25lX21vbmRvKHRiLT5yZXN1bV9tb25kb19wYSwgSFZfQ1BVX1FVRVVFX1JFU19FUlJPUiwKKwkJCSAgIHRiLT5yZXN1bV9xbWFzayk7CisJcmVnaXN0ZXJfb25lX21vbmRvKHRiLT5ub25yZXN1bV9tb25kb19wYSwgSFZfQ1BVX1FVRVVFX05PTlJFU19FUlJPUiwKKwkJCSAgIHRiLT5ub25yZXN1bV9xbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBhbGxvY19vbmVfbW9uZG8odW5zaWduZWQgbG9uZyAqcGFfcHRyLCBpbnQgdXNlX2Jvb3RtZW0pCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgYWxsb2Nfb25lX21vbmRvKHVuc2lnbmVkIGxvbmcgKnBhX3B0ciwgdW5zaWduZWQgbG9uZyBxbWFzaywgaW50IHVzZV9ib290bWVtKQogewotCXZvaWQgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9BTElHTihxbWFzayArIDEpOworCXVuc2lnbmVkIGxvbmcgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisJdm9pZCAqcCA9IE5VTEw7CiAKLQlpZiAodXNlX2Jvb3RtZW0pCi0JCXBhZ2UgPSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwotCWVsc2UKLQkJcGFnZSA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKKwlpZiAodXNlX2Jvb3RtZW0pIHsKKwkJcCA9IF9fYWxsb2NfYm9vdG1lbV9sb3coc2l6ZSwgc2l6ZSwgMCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlcyhHRlBfQVRPTUlDIHwgX19HRlBfWkVSTywgb3JkZXIpOworCQlpZiAocGFnZSkKKwkJCXAgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJfQogCi0JaWYgKCFwYWdlKSB7CisJaWYgKCFwKSB7CiAJCXByb21fcHJpbnRmKCJTVU40VjogRXJyb3IsIGNhbm5vdCBhbGxvY2F0ZSBtb25kbyBxdWV1ZS5cbiIpOwogCQlwcm9tX2hhbHQoKTsKIAl9CiAKLQkqcGFfcHRyID0gX19wYShwYWdlKTsKKwkqcGFfcHRyID0gX19wYShwKTsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IGFsbG9jX29uZV9rYnVmKHVuc2lnbmVkIGxvbmcgKnBhX3B0ciwgaW50IHVzZV9ib290bWVtKQorc3RhdGljIHZvaWQgX19jcHVpbml0IGFsbG9jX29uZV9rYnVmKHVuc2lnbmVkIGxvbmcgKnBhX3B0ciwgdW5zaWduZWQgbG9uZyBxbWFzaywgaW50IHVzZV9ib290bWVtKQogewotCXZvaWQgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9BTElHTihxbWFzayArIDEpOworCXVuc2lnbmVkIGxvbmcgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisJdm9pZCAqcCA9IE5VTEw7CiAKLQlpZiAodXNlX2Jvb3RtZW0pCi0JCXBhZ2UgPSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwotCWVsc2UKLQkJcGFnZSA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKKwlpZiAodXNlX2Jvb3RtZW0pIHsKKwkJcCA9IF9fYWxsb2NfYm9vdG1lbV9sb3coc2l6ZSwgc2l6ZSwgMCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlcyhHRlBfQVRPTUlDIHwgX19HRlBfWkVSTywgb3JkZXIpOworCQlpZiAocGFnZSkKKwkJCXAgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJfQogCi0JaWYgKCFwYWdlKSB7CisJaWYgKCFwKSB7CiAJCXByb21fcHJpbnRmKCJTVU40VjogRXJyb3IsIGNhbm5vdCBhbGxvY2F0ZSBrYnVmIHBhZ2UuXG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQogCi0JKnBhX3B0ciA9IF9fcGEocGFnZSk7CisJKnBhX3B0ciA9IF9fcGEocCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBpbml0X2NwdV9zZW5kX21vbmRvX2luZm8oc3RydWN0IHRyYXBfcGVyX2NwdSAqdGIsIGludCB1c2VfYm9vdG1lbSkKQEAgLTc3OSwxMiArODAyLDEyIEBACiAJc3RydWN0IHRyYXBfcGVyX2NwdSAqdGIgPSAmdHJhcF9ibG9ja1tjcHVdOwogCiAJaWYgKGFsbG9jKSB7Ci0JCWFsbG9jX29uZV9tb25kbygmdGItPmNwdV9tb25kb19wYSwgdXNlX2Jvb3RtZW0pOwotCQlhbGxvY19vbmVfbW9uZG8oJnRiLT5kZXZfbW9uZG9fcGEsIHVzZV9ib290bWVtKTsKLQkJYWxsb2Nfb25lX21vbmRvKCZ0Yi0+cmVzdW1fbW9uZG9fcGEsIHVzZV9ib290bWVtKTsKLQkJYWxsb2Nfb25lX2tidWYoJnRiLT5yZXN1bV9rZXJuZWxfYnVmX3BhLCB1c2VfYm9vdG1lbSk7Ci0JCWFsbG9jX29uZV9tb25kbygmdGItPm5vbnJlc3VtX21vbmRvX3BhLCB1c2VfYm9vdG1lbSk7Ci0JCWFsbG9jX29uZV9rYnVmKCZ0Yi0+bm9ucmVzdW1fa2VybmVsX2J1Zl9wYSwgdXNlX2Jvb3RtZW0pOworCQlhbGxvY19vbmVfbW9uZG8oJnRiLT5jcHVfbW9uZG9fcGEsIHRiLT5jcHVfbW9uZG9fcW1hc2ssIHVzZV9ib290bWVtKTsKKwkJYWxsb2Nfb25lX21vbmRvKCZ0Yi0+ZGV2X21vbmRvX3BhLCB0Yi0+ZGV2X21vbmRvX3FtYXNrLCB1c2VfYm9vdG1lbSk7CisJCWFsbG9jX29uZV9tb25kbygmdGItPnJlc3VtX21vbmRvX3BhLCB0Yi0+cmVzdW1fcW1hc2ssIHVzZV9ib290bWVtKTsKKwkJYWxsb2Nfb25lX2tidWYoJnRiLT5yZXN1bV9rZXJuZWxfYnVmX3BhLCB0Yi0+cmVzdW1fcW1hc2ssIHVzZV9ib290bWVtKTsKKwkJYWxsb2Nfb25lX21vbmRvKCZ0Yi0+bm9ucmVzdW1fbW9uZG9fcGEsIHRiLT5ub25yZXN1bV9xbWFzaywgdXNlX2Jvb3RtZW0pOworCQlhbGxvY19vbmVfa2J1ZigmdGItPm5vbnJlc3VtX2tlcm5lbF9idWZfcGEsIHRiLT5ub25yZXN1bV9xbWFzaywgdXNlX2Jvb3RtZW0pOwogCiAJCWluaXRfY3B1X3NlbmRfbW9uZG9faW5mbyh0YiwgdXNlX2Jvb3RtZW0pOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXRsYl9taXNzLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2l0bGJfbWlzcy5TCmluZGV4IGFkNDZlMjAuLjVhODM3N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXRsYl9taXNzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pdGxiX21pc3MuUwpAQCAtMTEsMTIgKzExLDEyIEBACiAvKiBJVExCICoqIElDQUNIRSBsaW5lIDI6IFRTQiBjb21wYXJlIGFuZCBUTEIgbG9hZAkqLwogCWJuZSxwbgkleGNjLCB0c2JfbWlzc19pdGxiCQkhIE1pc3MKIAkgbW92CUZBVUxUX0NPREVfSVRMQiwgJWczCi0JYW5kY2MJJWc1LCBfUEFHRV9FWEVDXzRVLCAlZzAJCSEgRXhlY3V0YWJsZT8KKwlzZXRoaQklaGkoX1BBR0VfRVhFQ180VSksICVnNAorCWFuZGNjCSVnNSwgJWc0LCAlZzAJCQkhIEV4ZWN1dGFibGU/CiAJYmUscG4JJXhjYywgdHNiX2RvX2ZhdWx0CiAJIG5vcAkJCQkJISBEZWxheSBzbG90LCBmaWxsIG1lCiAJc3R4YQklZzUsIFslZzBdIEFTSV9JVExCX0RBVEFfSU4JISBMb2FkIFRMQgogCXJldHJ5CQkJCQkhIFRyYXAgZG9uZQotCW5vcAogCiAvKiBJVExCICoqIElDQUNIRSBsaW5lIDM6IAkJCQkqLwogCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2twcm9iZXMuYwppbmRleCBhZTIyMWYwLi5jOTNhMTViIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2twcm9iZXMuYwpAQCAtNiw3ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0zMTMsNyArMzEzLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX2twcm9iZXMga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCitpbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQogewogCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CkBAIC00MDMsMTUgKzQwMyw2IEBACiAJCWlmIChwb3N0X2twcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKQogCQkJcmV0ID0gTk9USUZZX1NUT1A7CiAJCWJyZWFrOwotCWNhc2UgRElFX0dQRjoKLQljYXNlIERJRV9QQUdFX0ZBVUxUOgotCQkvKiBrcHJvYmVfcnVubmluZygpIG5lZWRzIHNtcF9wcm9jZXNzb3JfaWQoKSAqLwotCQlwcmVlbXB0X2Rpc2FibGUoKTsKLQkJaWYgKGtwcm9iZV9ydW5uaW5nKCkgJiYKLQkJICAgIGtwcm9iZV9mYXVsdF9oYW5kbGVyKGFyZ3MtPnJlZ3MsIGFyZ3MtPnRyYXBucikpCi0JCQlyZXQgPSBOT1RJRllfU1RPUDsKLQkJcHJlZW1wdF9lbmFibGUoKTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9tZGVzYy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9tZGVzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDZjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL21kZXNjLmMKQEAgLTAsMCArMSw2MTkgQEAKKy8qIG1kZXNjLmM6IFN1bjRWIG1hY2hpbmUgZGVzY3JpcHRpb24gaGFuZGxpbmcuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKworI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8YXNtL21kZXNjLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKy8qIFVubGlrZSB0aGUgT0JQIGRldmljZSB0cmVlLCB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBpcyBhIGZ1bGwtb24KKyAqIERBRy4gIEFuIGFyYml0cmFyeSBudW1iZXIgb2YgQVJDcyBhcmUgcG9zc2libGUgZnJvbSBvbmUKKyAqIG5vZGUgdG8gb3RoZXIgbm9kZXMgYW5kIHRodXMgd2UgY2FuJ3QgdXNlIHRoZSBPQlAgZGV2aWNlX25vZGUKKyAqIGRhdGEgc3RydWN0dXJlIHRvIHJlcHJlc2VudCB0aGVzZSBub2RlcyBpbnNpZGUgb2YgdGhlIGtlcm5lbC4KKyAqCisgKiBBY3R1YWxseSwgaXQgaXNuJ3QgZXZlbiBhIERBRywgYmVjYXVzZSB0aGVyZSBhcmUgYmFjayBwb2ludGVycworICogd2hpY2ggY3JlYXRlIGN5Y2xlcyBpbiB0aGUgZ3JhcGguCisgKgorICogbWRlc2NfaGRyIGFuZCBtZGVzY19lbGVtIGRlc2NyaWJlIHRoZSBsYXlvdXQgb2YgdGhlIGRhdGEgc3RydWN0dXJlCisgKiB3ZSBnZXQgZnJvbSB0aGUgSHlwZXJ2aXNvci4KKyAqLworc3RydWN0IG1kZXNjX2hkciB7CisJdTMyCXZlcnNpb247IC8qIFRyYW5zcG9ydCB2ZXJzaW9uICovCisJdTMyCW5vZGVfc3o7IC8qIG5vZGUgYmxvY2sgc2l6ZSAqLworCXUzMgluYW1lX3N6OyAvKiBuYW1lIGJsb2NrIHNpemUgKi8KKwl1MzIJZGF0YV9zejsgLyogZGF0YSBibG9jayBzaXplICovCit9OworCitzdHJ1Y3QgbWRlc2NfZWxlbSB7CisJdTgJdGFnOworI2RlZmluZSBNRF9MSVNUX0VORAkweDAwCisjZGVmaW5lIE1EX05PREUJCTB4NGUKKyNkZWZpbmUgTURfTk9ERV9FTkQJMHg0NQorI2RlZmluZSBNRF9OT09QCQkweDIwCisjZGVmaW5lIE1EX1BST1BfQVJDCTB4NjEKKyNkZWZpbmUgTURfUFJPUF9WQUwJMHg3NgorI2RlZmluZSBNRF9QUk9QX1NUUgkweDczCisjZGVmaW5lIE1EX1BST1BfREFUQQkweDY0CisJdTgJbmFtZV9sZW47CisJdTE2CXJlc3Y7CisJdTMyCW5hbWVfb2Zmc2V0OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMglkYXRhX2xlbjsKKwkJCXUzMglkYXRhX29mZnNldDsKKwkJfSBkYXRhOworCQl1NjQJdmFsOworCX0gZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWRlc2NfaGRyICptYWluX21kZXNjOworc3RhdGljIHN0cnVjdCBtZGVzY19ub2RlICphbGxub2RlczsKKworc3RhdGljIHN0cnVjdCBtZGVzY19ub2RlICphbGxub2Rlc190YWlsOworc3RhdGljIHVuc2lnbmVkIGludCB1bmlxdWVfaWQ7CisKK3N0YXRpYyBzdHJ1Y3QgbWRlc2Nfbm9kZSAqKm1kZXNjX2hhc2g7CitzdGF0aWMgdW5zaWduZWQgaW50IG1kZXNjX2hhc2hfc2l6ZTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbm9kZV9oYXNoZm4odTY0IG5vZGUpCit7CisJcmV0dXJuICgodW5zaWduZWQgaW50KSAobm9kZSBeIChub2RlID4+IDgpIF4gKG5vZGUgPj4gMTYpKSkKKwkJJiAobWRlc2NfaGFzaF9zaXplIC0gMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYXNoX25vZGUoc3RydWN0IG1kZXNjX25vZGUgKm1wKQoreworCXN0cnVjdCBtZGVzY19ub2RlICoqaGVhZCA9ICZtZGVzY19oYXNoW25vZGVfaGFzaGZuKG1wLT5ub2RlKV07CisKKwltcC0+aGFzaF9uZXh0ID0gKmhlYWQ7CisJKmhlYWQgPSBtcDsKKworCWlmIChhbGxub2Rlc190YWlsKSB7CisJCWFsbG5vZGVzX3RhaWwtPmFsbG5vZGVzX25leHQgPSBtcDsKKwkJYWxsbm9kZXNfdGFpbCA9IG1wOworCX0gZWxzZSB7CisJCWFsbG5vZGVzID0gYWxsbm9kZXNfdGFpbCA9IG1wOworCX0KK30KKworc3RhdGljIHN0cnVjdCBtZGVzY19ub2RlICpmaW5kX25vZGUodTY0IG5vZGUpCit7CisJc3RydWN0IG1kZXNjX25vZGUgKm1wID0gbWRlc2NfaGFzaFtub2RlX2hhc2hmbihub2RlKV07CisKKwl3aGlsZSAobXApIHsKKwkJaWYgKG1wLT5ub2RlID09IG5vZGUpCisJCQlyZXR1cm4gbXA7CisKKwkJbXAgPSBtcC0+aGFzaF9uZXh0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IHByb3BlcnR5ICptZF9maW5kX3Byb3BlcnR5KGNvbnN0IHN0cnVjdCBtZGVzY19ub2RlICptcCwKKwkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICBpbnQgKmxlbnApCit7CisJc3RydWN0IHByb3BlcnR5ICpwcDsKKworCWZvciAocHAgPSBtcC0+cHJvcGVydGllczsgcHAgIT0gMDsgcHAgPSBwcC0+bmV4dCkgeworCQlpZiAoc3RyY2FzZWNtcChwcC0+bmFtZSwgbmFtZSkgPT0gMCkgeworCQkJaWYgKGxlbnApCisJCQkJKmxlbnAgPSBwcC0+bGVuZ3RoOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHBwOworfQorRVhQT1JUX1NZTUJPTChtZF9maW5kX3Byb3BlcnR5KTsKKworLyoKKyAqIEZpbmQgYSBwcm9wZXJ0eSB3aXRoIGEgZ2l2ZW4gbmFtZSBmb3IgYSBnaXZlbiBub2RlCisgKiBhbmQgcmV0dXJuIHRoZSB2YWx1ZS4KKyAqLworY29uc3Qgdm9pZCAqbWRfZ2V0X3Byb3BlcnR5KGNvbnN0IHN0cnVjdCBtZGVzY19ub2RlICptcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICBpbnQgKmxlbnApCit7CisJc3RydWN0IHByb3BlcnR5ICpwcCA9IG1kX2ZpbmRfcHJvcGVydHkobXAsIG5hbWUsIGxlbnApOworCXJldHVybiBwcCA/IHBwLT52YWx1ZSA6IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKG1kX2dldF9wcm9wZXJ0eSk7CisKK3N0cnVjdCBtZGVzY19ub2RlICptZF9maW5kX25vZGVfYnlfbmFtZShzdHJ1Y3QgbWRlc2Nfbm9kZSAqZnJvbSwKKwkJCQkJY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgbWRlc2Nfbm9kZSAqbXA7CisKKwltcCA9IGZyb20gPyBmcm9tLT5hbGxub2Rlc19uZXh0IDogYWxsbm9kZXM7CisJZm9yICg7IG1wICE9IE5VTEw7IG1wID0gbXAtPmFsbG5vZGVzX25leHQpIHsKKwkJaWYgKHN0cmNtcChtcC0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gbXA7Cit9CitFWFBPUlRfU1lNQk9MKG1kX2ZpbmRfbm9kZV9ieV9uYW1lKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBtZGVzY19lYXJseV9hbGxvY2F0ZWQ7CisKK3N0YXRpYyB2b2lkICogX19pbml0IG1kZXNjX2Vhcmx5X2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICpyZXQ7CisKKwlyZXQgPSBfX2FsbG9jX2Jvb3RtZW0oc2l6ZSwgU01QX0NBQ0hFX0JZVEVTLCAwVUwpOworCWlmIChyZXQgPT0gTlVMTCkgeworCQlwcm9tX3ByaW50ZigiTURFU0M6IGFsbG9jIG9mICVsdSBieXRlcyBmYWlsZWQuXG4iLCBzaXplKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJbWVtc2V0KHJldCwgMCwgc2l6ZSk7CisKKwltZGVzY19lYXJseV9hbGxvY2F0ZWQgKz0gc2l6ZTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGNvdW50X2FyY3Moc3RydWN0IG1kZXNjX2VsZW0gKmVwKQoreworCXVuc2lnbmVkIGludCByZXQgPSAwOworCisJZXArKzsKKwl3aGlsZSAoZXAtPnRhZyAhPSBNRF9OT0RFX0VORCkgeworCQlpZiAoZXAtPnRhZyA9PSBNRF9QUk9QX0FSQykKKwkJCXJldCsrOworCQllcCsrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbWRlc2Nfbm9kZV9hbGxvYyh1NjQgbm9kZSwgc3RydWN0IG1kZXNjX2VsZW0gKmVwLCBjb25zdCBjaGFyICpuYW1lcykKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2FyY3MgPSBjb3VudF9hcmNzKGVwKTsKKwlzdHJ1Y3QgbWRlc2Nfbm9kZSAqbXA7CisKKwltcCA9IG1kZXNjX2Vhcmx5X2FsbG9jKHNpemVvZigqbXApICsKKwkJCSAgICAgICAobnVtX2FyY3MgKiBzaXplb2Yoc3RydWN0IG1kZXNjX2FyYykpKTsKKwltcC0+bmFtZSA9IG5hbWVzICsgZXAtPm5hbWVfb2Zmc2V0OworCW1wLT5ub2RlID0gbm9kZTsKKwltcC0+dW5pcXVlX2lkID0gdW5pcXVlX2lkKys7CisJbXAtPm51bV9hcmNzID0gbnVtX2FyY3M7CisKKwloYXNoX25vZGUobXApOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZGVzY19lbGVtICpub2RlX2Jsb2NrKHN0cnVjdCBtZGVzY19oZHIgKm1kZXNjKQoreworCXJldHVybiAoc3RydWN0IG1kZXNjX2VsZW0gKikgKG1kZXNjICsgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqbmFtZV9ibG9jayhzdHJ1Y3QgbWRlc2NfaGRyICptZGVzYykKK3sKKwlyZXR1cm4gKCh2b2lkICopIG5vZGVfYmxvY2sobWRlc2MpKSArIG1kZXNjLT5ub2RlX3N6OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmRhdGFfYmxvY2soc3RydWN0IG1kZXNjX2hkciAqbWRlc2MpCit7CisJcmV0dXJuICgodm9pZCAqKSBuYW1lX2Jsb2NrKG1kZXNjKSkgKyBtZGVzYy0+bmFtZV9zejsKK30KKworLyogSW4gb3JkZXIgdG8gYXZvaWQgcmVjdXJzaW9uICh0aGUgZ3JhcGggY2FuIGJlIHZlcnkgZGVlcCkgd2UgdXNlIGEKKyAqIHR3byBwYXNzIGFsZ29yaXRobS4gIEZpcnN0IHdlIGFsbG9jYXRlIGFsbCB0aGUgbm9kZXMgYW5kIGhhc2ggdGhlbS4KKyAqIFRoZW4gd2UgaXRlcmF0ZSBvdmVyIGVhY2ggbm9kZSwgZmlsbGluZyBpbiB0aGUgYXJjcyBhbmQgcHJvcGVydGllcy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGJ1aWxkX2FsbF9ub2RlcyhzdHJ1Y3QgbWRlc2NfaGRyICptZGVzYykKK3sKKwlzdHJ1Y3QgbWRlc2NfZWxlbSAqc3RhcnQsICplcDsKKwlzdHJ1Y3QgbWRlc2Nfbm9kZSAqbXA7CisJY29uc3QgY2hhciAqbmFtZXM7CisJdm9pZCAqZGF0YTsKKwl1NjQgbGFzdF9ub2RlOworCisJc3RhcnQgPSBlcCA9IG5vZGVfYmxvY2sobWRlc2MpOworCWxhc3Rfbm9kZSA9IG1kZXNjLT5ub2RlX3N6IC8gMTY7CisKKwluYW1lcyA9IG5hbWVfYmxvY2sobWRlc2MpOworCisJd2hpbGUgKDEpIHsKKwkJdTY0IG5vZGUgPSBlcCAtIHN0YXJ0OworCisJCWlmIChlcC0+dGFnID09IE1EX0xJU1RfRU5EKQorCQkJYnJlYWs7CisKKwkJaWYgKGVwLT50YWcgIT0gTURfTk9ERSkgeworCQkJcHJvbV9wcmludGYoIk1ERVNDOiBJbmNvbnNpc3RlbnQgZWxlbWVudCBsaXN0LlxuIik7CisJCQlwcm9tX2hhbHQoKTsKKwkJfQorCisJCW1kZXNjX25vZGVfYWxsb2Mobm9kZSwgZXAsIG5hbWVzKTsKKworCQlpZiAoZXAtPmQudmFsID49IGxhc3Rfbm9kZSkgeworCQkJcHJpbnRrKCJNREVTQzogV2FybmluZywgZWFybHkgYnJlYWsgb3V0IG9mIG5vZGUgc2Nhbi5cbiIpOworCQkJcHJpbnRrKCJNREVTQzogTmV4dCBub2RlIFslbHVdIGxhc3Rfbm9kZSBbJWx1XS5cbiIsCisJCQkgICAgICAgbm9kZSwgbGFzdF9ub2RlKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZXAgPSBzdGFydCArIGVwLT5kLnZhbDsKKwl9CisKKwlkYXRhID0gZGF0YV9ibG9jayhtZGVzYyk7CisJZm9yIChtcCA9IGFsbG5vZGVzOyBtcDsgbXAgPSBtcC0+YWxsbm9kZXNfbmV4dCkgeworCQlzdHJ1Y3QgbWRlc2NfZWxlbSAqZXAgPSBzdGFydCArIG1wLT5ub2RlOworCQlzdHJ1Y3QgcHJvcGVydHkgKipsaW5rID0gJm1wLT5wcm9wZXJ0aWVzOworCQl1bnNpZ25lZCBpbnQgdGhpc19hcmMgPSAwOworCisJCWVwKys7CisJCXdoaWxlIChlcC0+dGFnICE9IE1EX05PREVfRU5EKSB7CisJCQlzd2l0Y2ggKGVwLT50YWcpIHsKKwkJCWNhc2UgTURfUFJPUF9BUkM6IHsKKwkJCQlzdHJ1Y3QgbWRlc2Nfbm9kZSAqdGFyZ2V0OworCisJCQkJaWYgKHRoaXNfYXJjID49IG1wLT5udW1fYXJjcykgeworCQkJCQlwcm9tX3ByaW50ZigiTURFU0M6IEFSQyBvdmVycnVuIFsldToldV1cbiIsCisJCQkJCQkgICAgdGhpc19hcmMsIG1wLT5udW1fYXJjcyk7CisJCQkJCXByb21faGFsdCgpOworCQkJCX0KKwkJCQl0YXJnZXQgPSBmaW5kX25vZGUoZXAtPmQudmFsKTsKKwkJCQlpZiAoIXRhcmdldCkgeworCQkJCQlwcmludGsoIk1ERVNDOiBXYXJuaW5nLCBhcmMgcG9pbnRzIHRvICIKKwkJCQkJICAgICAgICJtaXNzaW5nIG5vZGUsIGlnbm9yaW5nLlxuIik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQltcC0+YXJjc1t0aGlzX2FyY10ubmFtZSA9CisJCQkJCShuYW1lcyArIGVwLT5uYW1lX29mZnNldCk7CisJCQkJbXAtPmFyY3NbdGhpc19hcmNdLmFyYyA9IHRhcmdldDsKKwkJCQl0aGlzX2FyYysrOworCQkJCWJyZWFrOworCQkJfQorCisJCQljYXNlIE1EX1BST1BfVkFMOgorCQkJY2FzZSBNRF9QUk9QX1NUUjoKKwkJCWNhc2UgTURfUFJPUF9EQVRBOiB7CisJCQkJc3RydWN0IHByb3BlcnR5ICpwID0gbWRlc2NfZWFybHlfYWxsb2Moc2l6ZW9mKCpwKSk7CisKKwkJCQlwLT51bmlxdWVfaWQgPSB1bmlxdWVfaWQrKzsKKwkJCQlwLT5uYW1lID0gKGNoYXIgKikgbmFtZXMgKyBlcC0+bmFtZV9vZmZzZXQ7CisJCQkJaWYgKGVwLT50YWcgPT0gTURfUFJPUF9WQUwpIHsKKwkJCQkJcC0+dmFsdWUgPSAmZXAtPmQudmFsOworCQkJCQlwLT5sZW5ndGggPSA4OworCQkJCX0gZWxzZSB7CisJCQkJCXAtPnZhbHVlID0gZGF0YSArIGVwLT5kLmRhdGEuZGF0YV9vZmZzZXQ7CisJCQkJCXAtPmxlbmd0aCA9IGVwLT5kLmRhdGEuZGF0YV9sZW47CisJCQkJfQorCQkJCSpsaW5rID0gcDsKKwkJCQlsaW5rID0gJnAtPm5leHQ7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWNhc2UgTURfTk9PUDoKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoIk1ERVNDOiBXYXJuaW5nLCBpZ25vcmluZyB1bmtub3duIHRhZyB0eXBlICUwMnhcbiIsCisJCQkJICAgICAgIGVwLT50YWcpOworCQkJfQorCQkJZXArKzsKKwkJfQorCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgY291bnRfbm9kZXMoc3RydWN0IG1kZXNjX2hkciAqbWRlc2MpCit7CisJc3RydWN0IG1kZXNjX2VsZW0gKmVwID0gbm9kZV9ibG9jayhtZGVzYyk7CisJc3RydWN0IG1kZXNjX2VsZW0gKmVuZDsKKwl1bnNpZ25lZCBpbnQgY250ID0gMDsKKworCWVuZCA9ICgodm9pZCAqKWVwKSArIG1kZXNjLT5ub2RlX3N6OworCXdoaWxlIChlcCA8IGVuZCkgeworCQlpZiAoZXAtPnRhZyA9PSBNRF9OT0RFKQorCQkJY250Kys7CisJCWVwKys7CisJfQorCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCByZXBvcnRfcGxhdGZvcm1fcHJvcGVydGllcyh2b2lkKQoreworCXN0cnVjdCBtZGVzY19ub2RlICpwbiA9IG1kX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJwbGF0Zm9ybSIpOworCWNvbnN0IGNoYXIgKnM7CisJY29uc3QgdTY0ICp2OworCisJaWYgKCFwbikgeworCQlwcm9tX3ByaW50ZigiTm8gcGxhdGZvcm0gbm9kZSBpbiBtYWNoaW5lLWRlc2NyaXB0aW9uLlxuIik7CisJCXByb21faGFsdCgpOworCX0KKworCXMgPSBtZF9nZXRfcHJvcGVydHkocG4sICJiYW5uZXItbmFtZSIsIE5VTEwpOworCXByaW50aygiUExBVEZPUk06IGJhbm5lci1uYW1lIFslc11cbiIsIHMpOworCXMgPSBtZF9nZXRfcHJvcGVydHkocG4sICJuYW1lIiwgTlVMTCk7CisJcHJpbnRrKCJQTEFURk9STTogbmFtZSBbJXNdXG4iLCBzKTsKKworCXYgPSBtZF9nZXRfcHJvcGVydHkocG4sICJob3N0aWQiLCBOVUxMKTsKKwlpZiAodikKKwkJcHJpbnRrKCJQTEFURk9STTogaG9zdGlkIFslMDhseF1cbiIsICp2KTsKKwl2ID0gbWRfZ2V0X3Byb3BlcnR5KHBuLCAic2VyaWFsIyIsIE5VTEwpOworCWlmICh2KQorCQlwcmludGsoIlBMQVRGT1JNOiBzZXJpYWwjIFslMDhseF1cbiIsICp2KTsKKwl2ID0gbWRfZ2V0X3Byb3BlcnR5KHBuLCAic3RpY2stZnJlcXVlbmN5IiwgTlVMTCk7CisJcHJpbnRrKCJQTEFURk9STTogc3RpY2stZnJlcXVlbmN5IFslMDhseF1cbiIsICp2KTsKKwl2ID0gbWRfZ2V0X3Byb3BlcnR5KHBuLCAibWFjLWFkZHJlc3MiLCBOVUxMKTsKKwlpZiAodikKKwkJcHJpbnRrKCJQTEFURk9STTogbWFjLWFkZHJlc3MgWyVseF1cbiIsICp2KTsKKwl2ID0gbWRfZ2V0X3Byb3BlcnR5KHBuLCAid2F0Y2hkb2ctcmVzb2x1dGlvbiIsIE5VTEwpOworCWlmICh2KQorCQlwcmludGsoIlBMQVRGT1JNOiB3YXRjaGRvZy1yZXNvbHV0aW9uIFslbHUgbXNdXG4iLCAqdik7CisJdiA9IG1kX2dldF9wcm9wZXJ0eShwbiwgIndhdGNoZG9nLW1heC10aW1lb3V0IiwgTlVMTCk7CisJaWYgKHYpCisJCXByaW50aygiUExBVEZPUk06IHdhdGNoZG9nLW1heC10aW1lb3V0IFslbHUgbXNdXG4iLCAqdik7CisJdiA9IG1kX2dldF9wcm9wZXJ0eShwbiwgIm1heC1jcHVzIiwgTlVMTCk7CisJaWYgKHYpCisJCXByaW50aygiUExBVEZPUk06IG1heC1jcHVzIFslbHVdXG4iLCAqdik7Cit9CisKK3N0YXRpYyBpbnQgaW5saW5lIGZpbmRfaW5fcHJvcGxpc3QoY29uc3QgY2hhciAqbGlzdCwgY29uc3QgY2hhciAqbWF0Y2gsIGludCBsZW4pCit7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaW50IGw7CisKKwkJaWYgKCFzdHJjbXAobGlzdCwgbWF0Y2gpKQorCQkJcmV0dXJuIDE7CisJCWwgPSBzdHJsZW4obGlzdCkgKyAxOworCQlsaXN0ICs9IGw7CisJCWxlbiAtPSBsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGZpbGxfaW5fb25lX2NhY2hlKGNwdWluZm9fc3BhcmMgKmMsIHN0cnVjdCBtZGVzY19ub2RlICptcCkKK3sKKwljb25zdCB1NjQgKmxldmVsID0gbWRfZ2V0X3Byb3BlcnR5KG1wLCAibGV2ZWwiLCBOVUxMKTsKKwljb25zdCB1NjQgKnNpemUgPSBtZF9nZXRfcHJvcGVydHkobXAsICJzaXplIiwgTlVMTCk7CisJY29uc3QgdTY0ICpsaW5lX3NpemUgPSBtZF9nZXRfcHJvcGVydHkobXAsICJsaW5lLXNpemUiLCBOVUxMKTsKKwljb25zdCBjaGFyICp0eXBlOworCWludCB0eXBlX2xlbjsKKworCXR5cGUgPSBtZF9nZXRfcHJvcGVydHkobXAsICJ0eXBlIiwgJnR5cGVfbGVuKTsKKworCXN3aXRjaCAoKmxldmVsKSB7CisJY2FzZSAxOgorCQlpZiAoZmluZF9pbl9wcm9wbGlzdCh0eXBlLCAiaW5zdG4iLCB0eXBlX2xlbikpIHsKKwkJCWMtPmljYWNoZV9zaXplID0gKnNpemU7CisJCQljLT5pY2FjaGVfbGluZV9zaXplID0gKmxpbmVfc2l6ZTsKKwkJfSBlbHNlIGlmIChmaW5kX2luX3Byb3BsaXN0KHR5cGUsICJkYXRhIiwgdHlwZV9sZW4pKSB7CisJCQljLT5kY2FjaGVfc2l6ZSA9ICpzaXplOworCQkJYy0+ZGNhY2hlX2xpbmVfc2l6ZSA9ICpsaW5lX3NpemU7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCWMtPmVjYWNoZV9zaXplID0gKnNpemU7CisJCWMtPmVjYWNoZV9saW5lX3NpemUgPSAqbGluZV9zaXplOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmICgqbGV2ZWwgPT0gMSkgeworCQl1bnNpZ25lZCBpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbXAtPm51bV9hcmNzOyBpKyspIHsKKwkJCXN0cnVjdCBtZGVzY19ub2RlICp0ID0gbXAtPmFyY3NbaV0uYXJjOworCisJCQlpZiAoc3RyY21wKG1wLT5hcmNzW2ldLm5hbWUsICJmd2QiKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFzdHJjbXAodC0+bmFtZSwgImNhY2hlIikpCisJCQkJZmlsbF9pbl9vbmVfY2FjaGUoYywgdCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtYXJrX2NvcmVfaWRzKHN0cnVjdCBtZGVzY19ub2RlICptcCwgaW50IGNvcmVfaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXAtPm51bV9hcmNzOyBpKyspIHsKKwkJc3RydWN0IG1kZXNjX25vZGUgKnQgPSBtcC0+YXJjc1tpXS5hcmM7CisJCWNvbnN0IHU2NCAqaWQ7CisKKwkJaWYgKHN0cmNtcChtcC0+YXJjc1tpXS5uYW1lLCAiYmFjayIpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFzdHJjbXAodC0+bmFtZSwgImNwdSIpKSB7CisJCQlpZCA9IG1kX2dldF9wcm9wZXJ0eSh0LCAiaWQiLCBOVUxMKTsKKwkJCWlmICgqaWQgPCBOUl9DUFVTKQorCQkJCWNwdV9kYXRhKCppZCkuY29yZV9pZCA9IGNvcmVfaWQ7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgajsKKworCQkJZm9yIChqID0gMDsgaiA8IHQtPm51bV9hcmNzOyBqKyspIHsKKwkJCQlzdHJ1Y3QgbWRlc2Nfbm9kZSAqbiA9IHQtPmFyY3Nbal0uYXJjOworCisJCQkJaWYgKHN0cmNtcCh0LT5hcmNzW2pdLm5hbWUsICJiYWNrIikpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKHN0cmNtcChuLT5uYW1lLCAiY3B1IikpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWQgPSBtZF9nZXRfcHJvcGVydHkobiwgImlkIiwgTlVMTCk7CisJCQkJaWYgKCppZCA8IE5SX0NQVVMpCisJCQkJCWNwdV9kYXRhKCppZCkuY29yZV9pZCA9IGNvcmVfaWQ7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXRfY29yZV9pZHModm9pZCkKK3sKKwlzdHJ1Y3QgbWRlc2Nfbm9kZSAqbXA7CisJaW50IGlkeDsKKworCWlkeCA9IDE7CisJbWRfZm9yX2VhY2hfbm9kZV9ieV9uYW1lKG1wLCAiY2FjaGUiKSB7CisJCWNvbnN0IHU2NCAqbGV2ZWwgPSBtZF9nZXRfcHJvcGVydHkobXAsICJsZXZlbCIsIE5VTEwpOworCQljb25zdCBjaGFyICp0eXBlOworCQlpbnQgbGVuOworCisJCWlmICgqbGV2ZWwgIT0gMSkKKwkJCWNvbnRpbnVlOworCisJCXR5cGUgPSBtZF9nZXRfcHJvcGVydHkobXAsICJ0eXBlIiwgJmxlbik7CisJCWlmICghZmluZF9pbl9wcm9wbGlzdCh0eXBlLCAiaW5zdG4iLCBsZW4pKQorCQkJY29udGludWU7CisKKwkJbWFya19jb3JlX2lkcyhtcCwgaWR4KTsKKworCQlpZHgrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZXRfb25lX21vbmRvX2JpdHMoY29uc3QgdTY0ICpwLCB1bnNpZ25lZCBpbnQgKm1hc2ssIHVuc2lnbmVkIGNoYXIgZGVmKQoreworCXU2NCB2YWw7CisKKwlpZiAoIXApCisJCWdvdG8gdXNlX2RlZmF1bHQ7CisJdmFsID0gKnA7CisKKwlpZiAoIXZhbCB8fCB2YWwgPj0gNjQpCisJCWdvdG8gdXNlX2RlZmF1bHQ7CisKKwkqbWFzayA9ICgoMVUgPDwgdmFsKSAqIDY0VSkgLSAxVTsKKwlyZXR1cm47CisKK3VzZV9kZWZhdWx0OgorCSptYXNrID0gKCgxVSA8PCBkZWYpICogNjRVKSAtIDFVOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2V0X21vbmRvX2RhdGEoc3RydWN0IG1kZXNjX25vZGUgKm1wLCBzdHJ1Y3QgdHJhcF9wZXJfY3B1ICp0YikKK3sKKwljb25zdCB1NjQgKnZhbDsKKworCXZhbCA9IG1kX2dldF9wcm9wZXJ0eShtcCwgInEtY3B1LW1vbmRvLSNiaXRzIiwgTlVMTCk7CisJZ2V0X29uZV9tb25kb19iaXRzKHZhbCwgJnRiLT5jcHVfbW9uZG9fcW1hc2ssIDcpOworCisJdmFsID0gbWRfZ2V0X3Byb3BlcnR5KG1wLCAicS1kZXYtbW9uZG8tI2JpdHMiLCBOVUxMKTsKKwlnZXRfb25lX21vbmRvX2JpdHModmFsLCAmdGItPmRldl9tb25kb19xbWFzaywgNyk7CisKKwl2YWwgPSBtZF9nZXRfcHJvcGVydHkobXAsICJxLXJlc3VtYWJsZS0jYml0cyIsIE5VTEwpOworCWdldF9vbmVfbW9uZG9fYml0cyh2YWwsICZ0Yi0+cmVzdW1fcW1hc2ssIDYpOworCisJdmFsID0gbWRfZ2V0X3Byb3BlcnR5KG1wLCAicS1ub25yZXN1bWFibGUtI2JpdHMiLCBOVUxMKTsKKwlnZXRfb25lX21vbmRvX2JpdHModmFsLCAmdGItPm5vbnJlc3VtX3FtYXNrLCAyKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1kZXNjX2ZpbGxfaW5fY3B1X2RhdGEodm9pZCkKK3sKKwlzdHJ1Y3QgbWRlc2Nfbm9kZSAqbXA7CisKKwluY3B1c19wcm9iZWQgPSAwOworCW1kX2Zvcl9lYWNoX25vZGVfYnlfbmFtZShtcCwgImNwdSIpIHsKKwkJY29uc3QgdTY0ICppZCA9IG1kX2dldF9wcm9wZXJ0eShtcCwgImlkIiwgTlVMTCk7CisJCWNvbnN0IHU2NCAqY2ZyZXEgPSBtZF9nZXRfcHJvcGVydHkobXAsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKKwkJc3RydWN0IHRyYXBfcGVyX2NwdSAqdGI7CisJCWNwdWluZm9fc3BhcmMgKmM7CisJCXVuc2lnbmVkIGludCBpOworCQlpbnQgY3B1aWQ7CisKKwkJbmNwdXNfcHJvYmVkKys7CisKKwkJY3B1aWQgPSAqaWQ7CisKKyNpZmRlZiBDT05GSUdfU01QCisJCWlmIChjcHVpZCA+PSBOUl9DUFVTKQorCQkJY29udGludWU7CisjZWxzZQorCQkvKiBPbiB1bmlwcm9jZXNzb3Igd2Ugb25seSB3YW50IHRoZSB2YWx1ZXMgZm9yIHRoZQorCQkgKiByZWFsIHBoeXNpY2FsIGNwdSB0aGUga2VybmVsIGJvb3RlZCBvbnRvLCBob3dldmVyCisJCSAqIGNwdV9kYXRhKCkgb25seSBoYXMgb25lIGVudHJ5IGF0IGluZGV4IDAuCisJCSAqLworCQlpZiAoY3B1aWQgIT0gcmVhbF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCWNvbnRpbnVlOworCQljcHVpZCA9IDA7CisjZW5kaWYKKworCQljID0gJmNwdV9kYXRhKGNwdWlkKTsKKwkJYy0+Y2xvY2tfdGljayA9ICpjZnJlcTsKKworCQl0YiA9ICZ0cmFwX2Jsb2NrW2NwdWlkXTsKKwkJZ2V0X21vbmRvX2RhdGEobXAsIHRiKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbXAtPm51bV9hcmNzOyBpKyspIHsKKwkJCXN0cnVjdCBtZGVzY19ub2RlICp0ID0gbXAtPmFyY3NbaV0uYXJjOworCQkJdW5zaWduZWQgaW50IGo7CisKKwkJCWlmIChzdHJjbXAobXAtPmFyY3NbaV0ubmFtZSwgImZ3ZCIpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIXN0cmNtcCh0LT5uYW1lLCAiY2FjaGUiKSkgeworCQkJCWZpbGxfaW5fb25lX2NhY2hlKGMsIHQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlmb3IgKGogPSAwOyBqIDwgdC0+bnVtX2FyY3M7IGorKykgeworCQkJCXN0cnVjdCBtZGVzY19ub2RlICpuOworCisJCQkJbiA9IHQtPmFyY3Nbal0uYXJjOworCQkJCWlmIChzdHJjbXAodC0+YXJjc1tqXS5uYW1lLCAiZndkIikpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKCFzdHJjbXAobi0+bmFtZSwgImNhY2hlIikpCisJCQkJCWZpbGxfaW5fb25lX2NhY2hlKGMsIG4pOworCQkJfQorCQl9CisKKyNpZmRlZiBDT05GSUdfU01QCisJCWNwdV9zZXQoY3B1aWQsIGNwdV9wcmVzZW50X21hcCk7CisJCWNwdV9zZXQoY3B1aWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKyNlbmRpZgorCisJCWMtPmNvcmVfaWQgPSAwOworCX0KKworCXNldF9jb3JlX2lkcygpOworCisJc21wX2ZpbGxfaW5fc2liX2NvcmVfbWFwcygpOworfQorCit2b2lkIF9faW5pdCBzdW40dl9tZGVzY19pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsZW4sIHJlYWxfbGVuLCBzdGF0dXM7CisKKwkodm9pZCkgc3VuNHZfbWFjaF9kZXNjKDBVTCwgMFVMLCAmbGVuKTsKKworCXByaW50aygiTURFU0M6IFNpemUgaXMgJWx1IGJ5dGVzLlxuIiwgbGVuKTsKKworCW1haW5fbWRlc2MgPSBtZGVzY19lYXJseV9hbGxvYyhsZW4pOworCisJc3RhdHVzID0gc3VuNHZfbWFjaF9kZXNjKF9fcGEobWFpbl9tZGVzYyksIGxlbiwgJnJlYWxfbGVuKTsKKwlpZiAoc3RhdHVzICE9IEhWX0VPSyB8fCByZWFsX2xlbiA+IGxlbikgeworCQlwcm9tX3ByaW50Zigic3VuNHZfbWFjaF9kZXNjIGZhaWxzLCBlcnIoJWx1KSwgIgorCQkJICAgICJsZW4oJWx1KSwgcmVhbF9sZW4oJWx1KVxuIiwKKwkJCSAgICBzdGF0dXMsIGxlbiwgcmVhbF9sZW4pOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwlsZW4gPSBjb3VudF9ub2RlcyhtYWluX21kZXNjKTsKKwlwcmludGsoIk1ERVNDOiAlbHUgbm9kZXMuXG4iLCBsZW4pOworCisJbGVuID0gcm91bmR1cF9wb3dfb2ZfdHdvKGxlbik7CisKKwltZGVzY19oYXNoID0gbWRlc2NfZWFybHlfYWxsb2MobGVuICogc2l6ZW9mKHN0cnVjdCBtZGVzY19ub2RlICopKTsKKwltZGVzY19oYXNoX3NpemUgPSBsZW47CisKKwlwcmludGsoIk1ERVNDOiBIYXNoIHNpemUgJWx1IGVudHJpZXMuXG4iLCBsZW4pOworCisJYnVpbGRfYWxsX25vZGVzKG1haW5fbWRlc2MpOworCisJcHJpbnRrKCJNREVTQzogQnVpbHQgZ3JhcGggd2l0aCAldSBieXRlcyBvZiBtZW1vcnkuXG4iLAorCSAgICAgICBtZGVzY19lYXJseV9hbGxvY2F0ZWQpOworCisJcmVwb3J0X3BsYXRmb3JtX3Byb3BlcnRpZXMoKTsKKwltZGVzY19maWxsX2luX2NwdV9kYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9vZl9kZXZpY2UuYwppbmRleCA5YWM5YTMwLi4xNmNjNDZhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL29mX2RldmljZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMKQEAgLTUzNyw2ICs1MzcsMTMgQEAKIAkJCXJldHVybiAwOwogCX0KIAorCS8qIFdoZW4gd2UgbWlzcyBhbiBJL08gc3BhY2UgbWF0Y2ggb24gUENJLCBqdXN0IHBhc3MgaXQgdXAKKwkgKiB0byB0aGUgbmV4dCBQQ0kgYnJpZGdlIGFuZC9vciBjb250cm9sbGVyLgorCSAqLworCWlmICghc3RyY21wKGJ1cy0+bmFtZSwgInBjaSIpICYmCisJICAgIChhZGRyWzBdICYgMHgwMzAwMDAwMCkgPT0gMHgwMTAwMDAwMCkKKwkJcmV0dXJuIDA7CisKIAlyZXR1cm4gMTsKIH0KIApAQCAtNTk2LDcgKzYwMyw3IEBACiAJLyogQ29udmVydCB0byBudW0tZW50cmllcy4gICovCiAJbnVtX3JlZyAvPSBuYSArIG5zOwogCi0JLyogUHJldmVudCBvdmVycnVuaW5nIHRoZSBvcC0+cmVzb3VyY2VzW10gYXJyYXkuICAqLworCS8qIFByZXZlbnQgb3ZlcnJ1bm5pbmcgdGhlIG9wLT5yZXNvdXJjZXNbXSBhcnJheS4gICovCiAJaWYgKG51bV9yZWcgPiBQUk9NUkVHX01BWCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVG9vIG1hbnkgcmVncyAoJWQpLCAiCiAJCSAgICAgICAibGltaXRpbmcgdG8gJWQuXG4iLApAQCAtOTA0LDcgKzkxMSw3IEBACiAJCW9wLT5udW1faXJxcyA9IDA7CiAJfQogCi0JLyogUHJldmVudCBvdmVycnVuaW5nIHRoZSBvcC0+aXJxc1tdIGFycmF5LiAgKi8KKwkvKiBQcmV2ZW50IG92ZXJydW5uaW5nIHRoZSBvcC0+aXJxc1tdIGFycmF5LiAgKi8KIAlpZiAob3AtPm51bV9pcnFzID4gUFJPTUlOVFJfTUFYKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUb28gbWFueSBpcnFzICglZCksICIKIAkJICAgICAgICJsaW1pdGluZyB0byAlZC5cbiIsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYwppbmRleCBhZjJjN2ZmLi4zOGEzMmJjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpLmMKQEAgLTE0LDEzICsxNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9wYm0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vZWJ1cy5oPgpAQCAtNDksMTAgKzQ4LDEwIEBACiAjZWxzZQogCiAvKiBMaXN0IG9mIGFsbCBQQ0kgY29udHJvbGxlcnMgZm91bmQgaW4gdGhlIHN5c3RlbS4gKi8KLXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwY2lfY29udHJvbGxlcl9yb290ID0gTlVMTDsKK3N0cnVjdCBwY2lfcGJtX2luZm8gKnBjaV9wYm1fcm9vdCA9IE5VTEw7CiAKLS8qIEVhY2ggUENJIGNvbnRyb2xsZXIgZm91bmQgZ2V0cyBhIHVuaXF1ZSBpbmRleC4gKi8KLWludCBwY2lfbnVtX2NvbnRyb2xsZXJzID0gMDsKKy8qIEVhY2ggUEJNIGZvdW5kIGdldHMgYSB1bmlxdWUgaW5kZXguICovCitpbnQgcGNpX251bV9wYm1zID0gMDsKIAogdm9sYXRpbGUgaW50IHBjaV9wb2tlX2luX3Byb2dyZXNzOwogdm9sYXRpbGUgaW50IHBjaV9wb2tlX2NwdSA9IC0xOwpAQCAtMjkyLDcgKzI5MSw3IEBACiAKIC8qIEZpbmQgZWFjaCBjb250cm9sbGVyIGluIHRoZSBzeXN0ZW0sIGF0dGFjaCBhbmQgaW5pdGlhbGl6ZQogICogc29mdHdhcmUgc3RhdGUgc3RydWN0dXJlIGZvciBlYWNoIGFuZCBsaW5rIGludG8gdGhlCi0gKiBwY2lfY29udHJvbGxlcl9yb290LiAgU2V0dXAgdGhlIGNvbnRyb2xsZXIgZW5vdWdoIHN1Y2gKKyAqIHBjaV9wYm1fcm9vdC4gIFNldHVwIHRoZSBjb250cm9sbGVyIGVub3VnaCBzdWNoCiAgKiB0aGF0IGJ1cyBzY2FubmluZyBjYW4gYmUgZG9uZS4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IHBjaV9jb250cm9sbGVyX3Byb2JlKHZvaWQpCkBAIC0zMDcsNiArMzA2LDIwIEBACiAJcGNpX2NvbnRyb2xsZXJfc2NhbihwY2lfY29udHJvbGxlcl9pbml0KTsKIH0KIAorc3RhdGljIGludCBvZnBjaV92ZXJib3NlOworCitzdGF0aWMgaW50IF9faW5pdCBvZnBjaV9kZWJ1ZyhjaGFyICpzdHIpCit7CisJaW50IHZhbCA9IDA7CisKKwlnZXRfb3B0aW9uKCZzdHIsICZ2YWwpOworCWlmICh2YWwpCisJCW9mcGNpX3ZlcmJvc2UgPSAxOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJvZnBjaV9kZWJ1Zz0iLCBvZnBjaV9kZWJ1Zyk7CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBjaV9wYXJzZV9vZl9mbGFncyh1MzIgYWRkcjApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CkBAIC0zMzgsNyArMzUxLDkgQEAKIAlhZGRycyA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAiYXNzaWduZWQtYWRkcmVzc2VzIiwgJnByb3BsZW4pOwogCWlmICghYWRkcnMpCiAJCXJldHVybjsKLQlwcmludGsoIiAgICBwYXJzZSBhZGRyZXNzZXMgKCVkIGJ5dGVzKSBAICVwXG4iLCBwcm9wbGVuLCBhZGRycyk7CisJaWYgKG9mcGNpX3ZlcmJvc2UpCisJCXByaW50aygiICAgIHBhcnNlIGFkZHJlc3NlcyAoJWQgYnl0ZXMpIEAgJXBcbiIsCisJCSAgICAgICBwcm9wbGVuLCBhZGRycyk7CiAJb3BfcmVzID0gJm9wLT5yZXNvdXJjZVswXTsKIAlmb3IgKDsgcHJvcGxlbiA+PSAyMDsgcHJvcGxlbiAtPSAyMCwgYWRkcnMgKz0gNSwgb3BfcmVzKyspIHsKIAkJc3RydWN0IHJlc291cmNlICpyZXM7CkBAIC0zNDksOCArMzY0LDkgQEAKIAkJaWYgKCFmbGFncykKIAkJCWNvbnRpbnVlOwogCQlpID0gYWRkcnNbMF0gJiAweGZmOwotCQlwcmludGsoIiAgc3RhcnQ6ICVseCwgZW5kOiAlbHgsIGk6ICV4XG4iLAotCQkgICAgICAgb3BfcmVzLT5zdGFydCwgb3BfcmVzLT5lbmQsIGkpOworCQlpZiAob2ZwY2lfdmVyYm9zZSkKKwkJCXByaW50aygiICBzdGFydDogJWx4LCBlbmQ6ICVseCwgaTogJXhcbiIsCisJCQkgICAgICAgb3BfcmVzLT5zdGFydCwgb3BfcmVzLT5lbmQsIGkpOwogCiAJCWlmIChQQ0lfQkFTRV9BRERSRVNTXzAgPD0gaSAmJiBpIDw9IFBDSV9CQVNFX0FERFJFU1NfNSkgewogCQkJcmVzID0gJmRldi0+cmVzb3VyY2VbKGkgLSBQQ0lfQkFTRV9BRERSRVNTXzApID4+IDJdOwpAQCAtMzc4LDcgKzM5NCw3IEBACiAJY29uc3QgY2hhciAqdHlwZTsKIAl1MzIgY2xhc3M7CiAKLQlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2RldiksIEdGUF9LRVJORUwpOworCWRldiA9IGFsbG9jX3BjaV9kZXYoKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTM5NCw4ICs0MTAsOSBAQAogCWlmICh0eXBlID09IE5VTEwpCiAJCXR5cGUgPSAiIjsKIAotCXByaW50aygiICAgIGNyZWF0ZSBkZXZpY2UsIGRldmZuOiAleCwgdHlwZTogJXMgaG9zdGNvbnRyb2xsZXIoJWQpXG4iLAotCSAgICAgICBkZXZmbiwgdHlwZSwgaG9zdF9jb250cm9sbGVyKTsKKwlpZiAob2ZwY2lfdmVyYm9zZSkKKwkJcHJpbnRrKCIgICAgY3JlYXRlIGRldmljZSwgZGV2Zm46ICV4LCB0eXBlOiAlc1xuIiwKKwkJICAgICAgIGRldmZuLCB0eXBlKTsKIAogCWRldi0+YnVzID0gYnVzOwogCWRldi0+c3lzZGF0YSA9IG5vZGU7CkBAIC00MzUsOCArNDUyLDkgQEAKIAkJc3ByaW50ZihwY2lfbmFtZShkZXYpLCAiJTA0eDolMDJ4OiUwMnguJWQiLCBwY2lfZG9tYWluX25yKGJ1cyksCiAJCQlkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChkZXZmbiksIFBDSV9GVU5DKGRldmZuKSk7CiAJfQotCXByaW50aygiICAgIGNsYXNzOiAweCV4IGRldmljZSBuYW1lOiAlc1xuIiwKLQkgICAgICAgZGV2LT5jbGFzcywgcGNpX25hbWUoZGV2KSk7CisJaWYgKG9mcGNpX3ZlcmJvc2UpCisJCXByaW50aygiICAgIGNsYXNzOiAweCV4IGRldmljZSBuYW1lOiAlc1xuIiwKKwkJICAgICAgIGRldi0+Y2xhc3MsIHBjaV9uYW1lKGRldikpOwogCiAJLyogSSBoYXZlIHNlZW4gSURFIGRldmljZXMgd2hpY2ggd2lsbCBub3QgcmVzcG9uZCB0bwogCSAqIHRoZSBibWRtYSBzaW1wbGV4IGNoZWNrIHJlYWRzIGlmIGJ1cyBtYXN0ZXJpbmcgaXMKQEAgLTQ3MCw3ICs0ODgsOCBAQAogCX0KIAlwY2lfcGFyc2Vfb2ZfYWRkcnMoc2QtPm9wLCBub2RlLCBkZXYpOwogCi0JcHJpbnRrKCIgICAgYWRkaW5nIHRvIHN5c3RlbSAuLi5cbiIpOworCWlmIChvZnBjaV92ZXJib3NlKQorCQlwcmludGsoIiAgICBhZGRpbmcgdG8gc3lzdGVtIC4uLlxuIik7CiAKIAlwY2lfZGV2aWNlX2FkZChkZXYsIGJ1cyk7CiAKQEAgLTQ5Niw4ICs1MTUsOCBAQAogCSpsYXN0X3AgPSBsYXN0OwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNpX3Jlc291cmNlX2FkanVzdChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCQkgICAgICAgc3RydWN0IHJlc291cmNlICpyb290KQorc3RhdGljIHZvaWQgcGNpX3Jlc291cmNlX2FkanVzdChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QpCiB7CiAJcmVzLT5zdGFydCArPSByb290LT5zdGFydDsKIAlyZXMtPmVuZCArPSByb290LT5zdGFydDsKQEAgLTU0OCw3ICs1NjcsOCBAQAogCXVuc2lnbmVkIGludCBmbGFnczsKIAl1NjQgc2l6ZTsKIAotCXByaW50aygib2Zfc2Nhbl9wY2lfYnJpZGdlKCVzKVxuIiwgbm9kZS0+ZnVsbF9uYW1lKTsKKwlpZiAob2ZwY2lfdmVyYm9zZSkKKwkJcHJpbnRrKCJvZl9zY2FuX3BjaV9icmlkZ2UoJXMpXG4iLCBub2RlLT5mdWxsX25hbWUpOwogCiAJLyogcGFyc2UgYnVzLXJhbmdlIHByb3BlcnR5ICovCiAJYnVzcmFuZ2UgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgImJ1cy1yYW5nZSIsICZsZW4pOwpAQCAtNjMzLDcgKzY1Myw4IEBACiBzaW1iYV9jb250OgogCXNwcmludGYoYnVzLT5uYW1lLCAiUENJIEJ1cyAlMDR4OiUwMngiLCBwY2lfZG9tYWluX25yKGJ1cyksCiAJCWJ1cy0+bnVtYmVyKTsKLQlwcmludGsoIiAgICBidXMgbmFtZTogJXNcbiIsIGJ1cy0+bmFtZSk7CisJaWYgKG9mcGNpX3ZlcmJvc2UpCisJCXByaW50aygiICAgIGJ1cyBuYW1lOiAlc1xuIiwgYnVzLT5uYW1lKTsKIAogCXBjaV9vZl9zY2FuX2J1cyhwYm0sIG5vZGUsIGJ1cyk7CiB9CkBAIC02NDcsMTIgKzY2OCwxNCBAQAogCWludCByZWdsZW4sIGRldmZuOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKLQlwcmludGsoIlBDSTogc2Nhbl9idXNbJXNdIGJ1cyBubyAlZFxuIiwKLQkgICAgICAgbm9kZS0+ZnVsbF9uYW1lLCBidXMtPm51bWJlcik7CisJaWYgKG9mcGNpX3ZlcmJvc2UpCisJCXByaW50aygiUENJOiBzY2FuX2J1c1slc10gYnVzIG5vICVkXG4iLAorCQkgICAgICAgbm9kZS0+ZnVsbF9uYW1lLCBidXMtPm51bWJlcik7CiAKIAljaGlsZCA9IE5VTEw7CiAJd2hpbGUgKChjaGlsZCA9IG9mX2dldF9uZXh0X2NoaWxkKG5vZGUsIGNoaWxkKSkgIT0gTlVMTCkgewotCQlwcmludGsoIiAgKiAlc1xuIiwgY2hpbGQtPmZ1bGxfbmFtZSk7CisJCWlmIChvZnBjaV92ZXJib3NlKQorCQkJcHJpbnRrKCIgICogJXNcbiIsIGNoaWxkLT5mdWxsX25hbWUpOwogCQlyZWcgPSBvZl9nZXRfcHJvcGVydHkoY2hpbGQsICJyZWciLCAmcmVnbGVuKTsKIAkJaWYgKHJlZyA9PSBOVUxMIHx8IHJlZ2xlbiA8IDIwKQogCQkJY29udGludWU7CkBAIC02NjIsNyArNjg1LDkgQEAKIAkJZGV2ID0gb2ZfY3JlYXRlX3BjaV9kZXYocGJtLCBjaGlsZCwgYnVzLCBkZXZmbiwgMCk7CiAJCWlmICghZGV2KQogCQkJY29udGludWU7Ci0JCXByaW50aygiUENJOiBkZXYgaGVhZGVyIHR5cGU6ICV4XG4iLCBkZXYtPmhkcl90eXBlKTsKKwkJaWYgKG9mcGNpX3ZlcmJvc2UpCisJCQlwcmludGsoIlBDSTogZGV2IGhlYWRlciB0eXBlOiAleFxuIiwKKwkJCSAgICAgICBkZXYtPmhkcl90eXBlKTsKIAogCQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFIHx8CiAJCSAgICBkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKQpAQCAtNzQ0LDcgKzc2OSw2IEBACiAKIHN0cnVjdCBwY2lfYnVzICogX19kZXZpbml0IHBjaV9zY2FuX29uZV9wYm0oc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQogewotCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwID0gcGJtLT5wYXJlbnQ7CiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGJtLT5wcm9tX25vZGU7CiAJc3RydWN0IHBjaV9kZXYgKmhvc3RfcGRldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwpAQCAtNzUyLDcgKzc3Niw3IEBACiAJcHJpbnRrKCJQQ0k6IFNjYW5uaW5nIFBCTSAlc1xuIiwgbm9kZS0+ZnVsbF9uYW1lKTsKIAogCS8qIFhYWCBwYXJlbnQgZGV2aWNlPyBYWFggKi8KLQlidXMgPSBwY2lfY3JlYXRlX2J1cyhOVUxMLCBwYm0tPnBjaV9maXJzdF9idXNubywgcC0+cGNpX29wcywgcGJtKTsKKwlidXMgPSBwY2lfY3JlYXRlX2J1cyhOVUxMLCBwYm0tPnBjaV9maXJzdF9idXNubywgcGJtLT5wY2lfb3BzLCBwYm0pOwogCWlmICghYnVzKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGNyZWF0ZSBidXMgZm9yICVzXG4iLAogCQkgICAgICAgbm9kZS0+ZnVsbF9uYW1lKTsKQEAgLTc3NywxMCArODAxLDEwIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwY2lfc2Nhbl9lYWNoX2NvbnRyb2xsZXJfYnVzKHZvaWQpCiB7Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnA7CisJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtOwogCi0JZm9yIChwID0gcGNpX2NvbnRyb2xsZXJfcm9vdDsgcDsgcCA9IHAtPm5leHQpCi0JCXAtPnNjYW5fYnVzKHApOworCWZvciAocGJtID0gcGNpX3BibV9yb290OyBwYm07IHBibSA9IHBibS0+bmV4dCkKKwkJcGJtLT5zY2FuX2J1cyhwYm0pOwogfQogCiBleHRlcm4gdm9pZCBwb3dlcl9pbml0KHZvaWQpOwpAQCAtNzg4LDcgKzgxMiw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBwY2liaW9zX2luaXQodm9pZCkKIHsKIAlwY2lfY29udHJvbGxlcl9wcm9iZSgpOwotCWlmIChwY2lfY29udHJvbGxlcl9yb290ID09IE5VTEwpCisJaWYgKHBjaV9wYm1fcm9vdCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAogCXBjaV9zY2FuX2VhY2hfY29udHJvbGxlcl9idXMoKTsKQEAgLTkyMywxMCArOTQ3LDggQEAKIAkJCQkgICAgICBlbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUpCiB7CiAJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gcGRldi0+ZGV2LmFyY2hkYXRhLmhvc3RfY29udHJvbGxlcjsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcDsKIAl1bnNpZ25lZCBsb25nIHNwYWNlX3NpemUsIHVzZXJfb2Zmc2V0LCB1c2VyX3NpemU7CiAKLQlwID0gcGJtLT5wYXJlbnQ7CiAJaWYgKG1tYXBfc3RhdGUgPT0gcGNpX21tYXBfaW8pIHsKIAkJc3BhY2Vfc2l6ZSA9IChwYm0tPmlvX3NwYWNlLmVuZCAtCiAJCQkgICAgICBwYm0tPmlvX3NwYWNlLnN0YXJ0KSArIDE7CkBAIC0xMDc5LDExICsxMTAxLDcgQEAKIAlpZiAocGJtID09IE5VTEwgfHwgcGJtLT5wYXJlbnQgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5YSU87CiAJfSBlbHNlIHsKLQkJc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnAgPSBwYm0tPnBhcmVudDsKLQotCQlyZXQgPSBwLT5pbmRleDsKLQkJcmV0ID0gKChyZXQgPDwgMSkgKwotCQkgICAgICAgKChwYm0gPT0gJnBibS0+cGFyZW50LT5wYm1fQikgPyAxIDogMCkpOworCQlyZXQgPSBwYm0tPmluZGV4OwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMDk0LDE3ICsxMTEyLDEyIEBACiBpbnQgYXJjaF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gcGRldi0+ZGV2LmFyY2hkYXRhLmhvc3RfY29udHJvbGxlcjsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCA9IHBibS0+cGFyZW50OwotCWludCB2aXJ0X2lycSwgZXJyOworCWludCB2aXJ0X2lycTsKIAotCWlmICghcGJtLT5tc2lfbnVtIHx8ICFwLT5zZXR1cF9tc2lfaXJxKQorCWlmICghcGJtLT5zZXR1cF9tc2lfaXJxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVyciA9IHAtPnNldHVwX21zaV9pcnEoJnZpcnRfaXJxLCBwZGV2LCBkZXNjKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHBibS0+c2V0dXBfbXNpX2lycSgmdmlydF9pcnEsIHBkZXYsIGRlc2MpOwogfQogCiB2b2lkIGFyY2hfdGVhcmRvd25fbXNpX2lycSh1bnNpZ25lZCBpbnQgdmlydF9pcnEpCkBAIC0xMTEyLDEyICsxMTI1LDExIEBACiAJc3RydWN0IG1zaV9kZXNjICplbnRyeSA9IGdldF9pcnFfbXNpKHZpcnRfaXJxKTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGVudHJ5LT5kZXY7CiAJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gcGRldi0+ZGV2LmFyY2hkYXRhLmhvc3RfY29udHJvbGxlcjsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCA9IHBibS0+cGFyZW50OwogCi0JaWYgKCFwYm0tPm1zaV9udW0gfHwgIXAtPnNldHVwX21zaV9pcnEpCisJaWYgKCFwYm0tPnRlYXJkb3duX21zaV9pcnEpCiAJCXJldHVybjsKIAotCXJldHVybiBwLT50ZWFyZG93bl9tc2lfaXJxKHZpcnRfaXJxLCBwZGV2KTsKKwlyZXR1cm4gcGJtLT50ZWFyZG93bl9tc2lfaXJxKHZpcnRfaXJxLCBwZGV2KTsKIH0KICNlbmRpZiAvKiAhKENPTkZJR19QQ0lfTVNJKSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9jb21tb24uYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2NvbW1vbi5jCmluZGV4IDFlNmFlZWQuLmY5NzRmZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2NvbW1vbi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2NvbW1vbi5jCkBAIC05LDExICs5LDIxOSBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCi0jaW5jbHVkZSA8YXNtL3BibS5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogCiAjaW5jbHVkZSAicGNpX2ltcGwuaCIKKyNpbmNsdWRlICJwY2lfc3VuNHYuaCIKKworc3RhdGljIGludCBjb25maWdfb3V0X29mX3JhbmdlKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGJ1cywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRldmZuLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcmVnKQoreworCWlmIChidXMgPCBwYm0tPnBjaV9maXJzdF9idXNubyB8fAorCSAgICBidXMgPiBwYm0tPnBjaV9sYXN0X2J1c25vKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKnN1bjR1X2NvbmZpZ19ta2FkZHIoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAorCQkJCSB1bnNpZ25lZCBsb25nIGJ1cywKKwkJCQkgdW5zaWduZWQgbG9uZyBkZXZmbiwKKwkJCQkgdW5zaWduZWQgbG9uZyByZWcpCit7CisJdW5zaWduZWQgbG9uZyByYml0cyA9IHBibS0+Y29uZmlnX3NwYWNlX3JlZ19iaXRzOworCisJaWYgKGNvbmZpZ19vdXRfb2ZfcmFuZ2UocGJtLCBidXMsIGRldmZuLCByZWcpKQorCQlyZXR1cm4gTlVMTDsKKworCXJlZyA9IChyZWcgJiAoKDEgPDwgcmJpdHMpIC0gMSkpOworCWRldmZuIDw8PSByYml0czsKKwlidXMgPDw9IHJiaXRzICsgODsKKworCXJldHVybiAodm9pZCAqKQkocGJtLT5jb25maWdfc3BhY2UgfCBidXMgfCBkZXZmbiB8IHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgc3VuNHVfcmVhZF9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbHVlKQoreworCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9IGJ1c19kZXYtPnN5c2RhdGE7CisJdW5zaWduZWQgY2hhciBidXMgPSBidXNfZGV2LT5udW1iZXI7CisJdTMyICphZGRyOworCXUxNiB0bXAxNjsKKwl1OCB0bXA4OworCisJaWYgKGJ1c19kZXYgPT0gcGJtLT5wY2lfYnVzICYmIGRldmZuID09IDB4MDApCisJCXJldHVybiBwY2lfaG9zdF9icmlkZ2VfcmVhZF9wY2lfY2ZnKGJ1c19kZXYsIGRldmZuLCB3aGVyZSwKKwkJCQkJCSAgICBzaXplLCB2YWx1ZSk7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCSp2YWx1ZSA9IDB4ZmY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJKnZhbHVlID0gMHhmZmZmOworCQlicmVhazsKKwljYXNlIDQ6CisJCSp2YWx1ZSA9IDB4ZmZmZmZmZmY7CisJCWJyZWFrOworCX0KKworCWFkZHIgPSBzdW40dV9jb25maWdfbWthZGRyKHBibSwgYnVzLCBkZXZmbiwgd2hlcmUpOworCWlmICghYWRkcikKKwkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJcGNpX2NvbmZpZ19yZWFkOCgodTggKilhZGRyLCAmdG1wOCk7CisJCSp2YWx1ZSA9ICh1MzIpIHRtcDg7CisJCWJyZWFrOworCisJY2FzZSAyOgorCQlpZiAod2hlcmUgJiAweDAxKSB7CisJCQlwcmludGsoInBjaV9yZWFkX2NvbmZpZ193b3JkOiBtaXNhbGlnbmVkIHJlZyBbJXhdXG4iLAorCQkJICAgICAgIHdoZXJlKTsKKwkJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisJCX0KKwkJcGNpX2NvbmZpZ19yZWFkMTYoKHUxNiAqKWFkZHIsICZ0bXAxNik7CisJCSp2YWx1ZSA9ICh1MzIpIHRtcDE2OworCQlicmVhazsKKworCWNhc2UgNDoKKwkJaWYgKHdoZXJlICYgMHgwMykgeworCQkJcHJpbnRrKCJwY2lfcmVhZF9jb25maWdfZHdvcmQ6IG1pc2FsaWduZWQgcmVnIFsleF1cbiIsCisJCQkgICAgICAgd2hlcmUpOworCQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKwkJfQorCQlwY2lfY29uZmlnX3JlYWQzMihhZGRyLCB2YWx1ZSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHN1bjR1X3dyaXRlX3BjaV9jZmcoc3RydWN0IHBjaV9idXMgKmJ1c19kZXYsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsdWUpCit7CisJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gYnVzX2Rldi0+c3lzZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGJ1cyA9IGJ1c19kZXYtPm51bWJlcjsKKwl1MzIgKmFkZHI7CisKKwlpZiAoYnVzX2RldiA9PSBwYm0tPnBjaV9idXMgJiYgZGV2Zm4gPT0gMHgwMCkKKwkJcmV0dXJuIHBjaV9ob3N0X2JyaWRnZV93cml0ZV9wY2lfY2ZnKGJ1c19kZXYsIGRldmZuLCB3aGVyZSwKKwkJCQkJCSAgICAgc2l6ZSwgdmFsdWUpOworCWFkZHIgPSBzdW40dV9jb25maWdfbWthZGRyKHBibSwgYnVzLCBkZXZmbiwgd2hlcmUpOworCWlmICghYWRkcikKKwkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJcGNpX2NvbmZpZ193cml0ZTgoKHU4ICopYWRkciwgdmFsdWUpOworCQlicmVhazsKKworCWNhc2UgMjoKKwkJaWYgKHdoZXJlICYgMHgwMSkgeworCQkJcHJpbnRrKCJwY2lfd3JpdGVfY29uZmlnX3dvcmQ6IG1pc2FsaWduZWQgcmVnIFsleF1cbiIsCisJCQkgICAgICAgd2hlcmUpOworCQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKwkJfQorCQlwY2lfY29uZmlnX3dyaXRlMTYoKHUxNiAqKWFkZHIsIHZhbHVlKTsKKwkJYnJlYWs7CisKKwljYXNlIDQ6CisJCWlmICh3aGVyZSAmIDB4MDMpIHsKKwkJCXByaW50aygicGNpX3dyaXRlX2NvbmZpZ19kd29yZDogbWlzYWxpZ25lZCByZWcgWyV4XVxuIiwKKwkJCSAgICAgICB3aGVyZSk7CisJCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworCQl9CisJCXBjaV9jb25maWdfd3JpdGUzMihhZGRyLCB2YWx1ZSk7CisJfQorCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0cnVjdCBwY2lfb3BzIHN1bjR1X3BjaV9vcHMgPSB7CisJLnJlYWQgPQkJc3VuNHVfcmVhZF9wY2lfY2ZnLAorCS53cml0ZSA9CXN1bjR1X3dyaXRlX3BjaV9jZmcsCit9OworCitzdGF0aWMgaW50IHN1bjR2X3JlYWRfcGNpX2NmZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzX2RldiwgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBidXNfZGV2LT5zeXNkYXRhOworCXUzMiBkZXZoYW5kbGUgPSBwYm0tPmRldmhhbmRsZTsKKwl1bnNpZ25lZCBpbnQgYnVzID0gYnVzX2Rldi0+bnVtYmVyOworCXVuc2lnbmVkIGludCBkZXZpY2UgPSBQQ0lfU0xPVChkZXZmbik7CisJdW5zaWduZWQgaW50IGZ1bmMgPSBQQ0lfRlVOQyhkZXZmbik7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlpZiAoYnVzX2RldiA9PSBwYm0tPnBjaV9idXMgJiYgZGV2Zm4gPT0gMHgwMCkKKwkJcmV0dXJuIHBjaV9ob3N0X2JyaWRnZV9yZWFkX3BjaV9jZmcoYnVzX2RldiwgZGV2Zm4sIHdoZXJlLAorCQkJCQkJICAgIHNpemUsIHZhbHVlKTsKKwlpZiAoY29uZmlnX291dF9vZl9yYW5nZShwYm0sIGJ1cywgZGV2Zm4sIHdoZXJlKSkgeworCQlyZXQgPSB+MFVMOworCX0gZWxzZSB7CisJCXJldCA9IHBjaV9zdW40dl9jb25maWdfZ2V0KGRldmhhbmRsZSwKKwkJCQlIVl9QQ0lfREVWSUNFX0JVSUxEKGJ1cywgZGV2aWNlLCBmdW5jKSwKKwkJCQl3aGVyZSwgc2l6ZSk7CisJfQorCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJKnZhbHVlID0gcmV0ICYgMHhmZjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqdmFsdWUgPSByZXQgJiAweGZmZmY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJKnZhbHVlID0gcmV0ICYgMHhmZmZmZmZmZjsKKwkJYnJlYWs7CisJfTsKKworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBzdW40dl93cml0ZV9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICAgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9IGJ1c19kZXYtPnN5c2RhdGE7CisJdTMyIGRldmhhbmRsZSA9IHBibS0+ZGV2aGFuZGxlOworCXVuc2lnbmVkIGludCBidXMgPSBidXNfZGV2LT5udW1iZXI7CisJdW5zaWduZWQgaW50IGRldmljZSA9IFBDSV9TTE9UKGRldmZuKTsKKwl1bnNpZ25lZCBpbnQgZnVuYyA9IFBDSV9GVU5DKGRldmZuKTsKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCWlmIChidXNfZGV2ID09IHBibS0+cGNpX2J1cyAmJiBkZXZmbiA9PSAweDAwKQorCQlyZXR1cm4gcGNpX2hvc3RfYnJpZGdlX3dyaXRlX3BjaV9jZmcoYnVzX2RldiwgZGV2Zm4sIHdoZXJlLAorCQkJCQkJICAgICBzaXplLCB2YWx1ZSk7CisJaWYgKGNvbmZpZ19vdXRfb2ZfcmFuZ2UocGJtLCBidXMsIGRldmZuLCB3aGVyZSkpIHsKKwkJLyogRG8gbm90aGluZy4gKi8KKwl9IGVsc2UgeworCQlyZXQgPSBwY2lfc3VuNHZfY29uZmlnX3B1dChkZXZoYW5kbGUsCisJCQkJSFZfUENJX0RFVklDRV9CVUlMRChidXMsIGRldmljZSwgZnVuYyksCisJCQkJd2hlcmUsIHNpemUsIHZhbHVlKTsKKwl9CisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RydWN0IHBjaV9vcHMgc3VuNHZfcGNpX29wcyA9IHsKKwkucmVhZCA9CQlzdW40dl9yZWFkX3BjaV9jZmcsCisJLndyaXRlID0Jc3VuNHZfd3JpdGVfcGNpX2NmZywKK307CisKK3ZvaWQgcGNpX2dldF9wYm1fcHJvcHMoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQoreworCWNvbnN0IHUzMiAqdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KHBibS0+cHJvbV9ub2RlLCAiYnVzLXJhbmdlIiwgTlVMTCk7CisKKwlwYm0tPnBjaV9maXJzdF9idXNubyA9IHZhbFswXTsKKwlwYm0tPnBjaV9sYXN0X2J1c25vID0gdmFsWzFdOworCisJdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KHBibS0+cHJvbV9ub2RlLCAiaW5vLWJpdG1hcCIsIE5VTEwpOworCWlmICh2YWwpIHsKKwkJcGJtLT5pbm9fYml0bWFwID0gKCgodTY0KXZhbFsxXSA8PCAzMlVMKSB8CisJCQkJICAgKCh1NjQpdmFsWzBdIDw8ICAwVUwpKTsKKwl9Cit9CiAKIHN0YXRpYyB2b2lkIHBjaV9yZWdpc3Rlcl9sZWdhY3lfcmVnaW9ucyhzdHJ1Y3QgcmVzb3VyY2UgKmlvX3JlcywKIAkJCQkJc3RydWN0IHJlc291cmNlICptZW1fcmVzKQpAQCAtMTQ5LDggKzM1Nyw3IEBACiB9CiAKIC8qIEdlbmVyaWMgaGVscGVyIHJvdXRpbmVzIGZvciBQQ0kgZXJyb3IgcmVwb3J0aW5nLiAqLwotdm9pZCBwY2lfc2Nhbl9mb3JfdGFyZ2V0X2Fib3J0KHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwLAotCQkJICAgICAgIHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKK3ZvaWQgcGNpX3NjYW5fZm9yX3RhcmdldF9hYm9ydChzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCiAJCQkgICAgICAgc3RydWN0IHBjaV9idXMgKnBidXMpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CkBAIC0xNjUsMTggKzM3MiwxNiBAQAogCQkJCSAgIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCkpOwogCQlpZiAoZXJyb3JfYml0cykgewogCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9TVEFUVVMsIGVycm9yX2JpdHMpOwotCQkJcHJpbnRrKCJQQ0klZChQQk0lYyk6IERldmljZSBbJXNdIHNhdyBUYXJnZXQgQWJvcnQgWyUwMTZ4XVxuIiwKLQkJCSAgICAgICBwLT5pbmRleCwgKChwYm0gPT0gJnAtPnBibV9BKSA/ICdBJyA6ICdCJyksCi0JCQkgICAgICAgcGNpX25hbWUocGRldiksIHN0YXR1cyk7CisJCQlwcmludGsoIiVzOiBEZXZpY2UgJXMgc2F3IFRhcmdldCBBYm9ydCBbJTAxNnhdXG4iLAorCQkJICAgICAgIHBibS0+bmFtZSwgcGNpX25hbWUocGRldiksIHN0YXR1cyk7CiAJCX0KIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnBidXMtPmNoaWxkcmVuLCBub2RlKQotCQlwY2lfc2Nhbl9mb3JfdGFyZ2V0X2Fib3J0KHAsIHBibSwgYnVzKTsKKwkJcGNpX3NjYW5fZm9yX3RhcmdldF9hYm9ydChwYm0sIGJ1cyk7CiB9CiAKLXZvaWQgcGNpX3NjYW5fZm9yX21hc3Rlcl9hYm9ydChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwKLQkJCSAgICAgICBzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCit2b2lkIHBjaV9zY2FuX2Zvcl9tYXN0ZXJfYWJvcnQoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAogCQkJICAgICAgIHN0cnVjdCBwY2lfYnVzICpwYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwpAQCAtMTkwLDE4ICszOTUsMTYgQEAKIAkJCShzdGF0dXMgJiAoUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUKSk7CiAJCWlmIChlcnJvcl9iaXRzKSB7CiAJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgUENJX1NUQVRVUywgZXJyb3JfYml0cyk7Ci0JCQlwcmludGsoIlBDSSVkKFBCTSVjKTogRGV2aWNlIFslc10gcmVjZWl2ZWQgTWFzdGVyIEFib3J0IFslMDE2eF1cbiIsCi0JCQkgICAgICAgcC0+aW5kZXgsICgocGJtID09ICZwLT5wYm1fQSkgPyAnQScgOiAnQicpLAotCQkJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBzdGF0dXMpOworCQkJcHJpbnRrKCIlczogRGV2aWNlICVzIHJlY2VpdmVkIE1hc3RlciBBYm9ydCBbJTAxNnhdXG4iLAorCQkJICAgICAgIHBibS0+bmFtZSwgcGNpX25hbWUocGRldiksIHN0YXR1cyk7CiAJCX0KIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnBidXMtPmNoaWxkcmVuLCBub2RlKQotCQlwY2lfc2Nhbl9mb3JfbWFzdGVyX2Fib3J0KHAsIHBibSwgYnVzKTsKKwkJcGNpX3NjYW5fZm9yX21hc3Rlcl9hYm9ydChwYm0sIGJ1cyk7CiB9CiAKLXZvaWQgcGNpX3NjYW5fZm9yX3Bhcml0eV9lcnJvcihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwKLQkJCSAgICAgICBzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCit2b2lkIHBjaV9zY2FuX2Zvcl9wYXJpdHlfZXJyb3Ioc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAogCQkJICAgICAgIHN0cnVjdCBwY2lfYnVzICpwYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwpAQCAtMjE2LDEyICs0MTksMTEgQEAKIAkJCQkgICBQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSkpOwogCQlpZiAoZXJyb3JfYml0cykgewogCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9TVEFUVVMsIGVycm9yX2JpdHMpOwotCQkJcHJpbnRrKCJQQ0klZChQQk0lYyk6IERldmljZSBbJXNdIHNhdyBQYXJpdHkgRXJyb3IgWyUwMTZ4XVxuIiwKLQkJCSAgICAgICBwLT5pbmRleCwgKChwYm0gPT0gJnAtPnBibV9BKSA/ICdBJyA6ICdCJyksCi0JCQkgICAgICAgcGNpX25hbWUocGRldiksIHN0YXR1cyk7CisJCQlwcmludGsoIiVzOiBEZXZpY2UgJXMgc2F3IFBhcml0eSBFcnJvciBbJTAxNnhdXG4iLAorCQkJICAgICAgIHBibS0+bmFtZSwgcGNpX25hbWUocGRldiksIHN0YXR1cyk7CiAJCX0KIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnBidXMtPmNoaWxkcmVuLCBub2RlKQotCQlwY2lfc2Nhbl9mb3JfcGFyaXR5X2Vycm9yKHAsIHBibSwgYnVzKTsKKwkJcGNpX3NjYW5fZm9yX3Bhcml0eV9lcnJvcihwYm0sIGJ1cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9maXJlLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9maXJlLmMKaW5kZXggMGZlNjI2Ni4uN2Y1ZDQ3MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfZmlyZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2ZpcmUuYwpAQCAtNyw3ICs3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCi0jaW5jbHVkZSA8YXNtL3BibS5oPgogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKQEAgLTI4LDE1MyArMjcsOSBAQAogCQkJICAgICAgICJpIiAoQVNJX1BIWVNfQllQQVNTX0VDX0UpIFwKIAkJCSAgICAgOiAibWVtb3J5IikKIAotLyogRmlyZSBjb25maWcgc3BhY2UgYWRkcmVzcyBmb3JtYXQgaXMgbmVhcmx5IGlkZW50aWNhbCB0bwotICogdGhhdCBvZiBTQ0hJWk8gYW5kIFBTWUNITywgZXhjZXB0IHRoYXQgaW4gb3JkZXIgdG8gYWNjb21vZGF0ZQotICogUENJLUUgZXh0ZW5kZWQgY29uZmlnIHNwYWNlIHRoZSBlbmNvZGluZyBjYW4gaGFuZGxlIDEyIGJpdHMKLSAqIG9mIHJlZ2lzdGVyIGFkZHJlc3M6Ci0gKgotICogIDMyICAgICAyOCAyNyAyMCAxOSAgICAxNSAxNCAgICAgIDEyIDExICAyICAxIDAKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHwwIDAgMCAwIDB8IGJ1cyB8IGRldmljZSB8IGZ1bmN0aW9uIHwgcmVnIHwgMCAwIHwKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBGSVJFX0NPTkZJR19CQVNFKFBCTSkJKChQQk0pLT5jb25maWdfc3BhY2UpCi0jZGVmaW5lIEZJUkVfQ09ORklHX0VOQ09ERShCVVMsIERFVkZOLCBSRUcpCVwKLQkoKCh1bnNpZ25lZCBsb25nKShCVVMpICAgPDwgMjApIHwJXAotCSAoKHVuc2lnbmVkIGxvbmcpKERFVkZOKSA8PCAxMikgIHwJXAotCSAoKHVuc2lnbmVkIGxvbmcpKFJFRykpKQotCi1zdGF0aWMgdm9pZCAqZmlyZV9wY2lfY29uZmlnX21rYWRkcihzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCi0JCQkJICAgICAgdW5zaWduZWQgY2hhciBidXMsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGRldmZuLAotCQkJCSAgICAgIGludCB3aGVyZSkKLXsKLQlpZiAoIXBibSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuICh2b2lkICopCi0JCShGSVJFX0NPTkZJR19CQVNFKHBibSkgfAotCQkgRklSRV9DT05GSUdfRU5DT0RFKGJ1cywgZGV2Zm4sIHdoZXJlKSk7Ci19Ci0KLS8qIEZJUkUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjZXNzb3JzLiAqLwotCi1zdGF0aWMgaW50IGZpcmVfcmVhZF9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkgICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsdWUpCi17Ci0Jc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gYnVzX2Rldi0+c3lzZGF0YTsKLQl1bnNpZ25lZCBjaGFyIGJ1cyA9IGJ1c19kZXYtPm51bWJlcjsKLQl1MzIgKmFkZHI7Ci0JdTE2IHRtcDE2OwotCXU4IHRtcDg7Ci0KLQlpZiAoYnVzX2RldiA9PSBwYm0tPnBjaV9idXMgJiYgZGV2Zm4gPT0gMHgwMCkKLQkJcmV0dXJuIHBjaV9ob3N0X2JyaWRnZV9yZWFkX3BjaV9jZmcoYnVzX2RldiwgZGV2Zm4sIHdoZXJlLAotCQkJCQkJICAgIHNpemUsIHZhbHVlKTsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCSp2YWx1ZSA9IDB4ZmY7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJKnZhbHVlID0gMHhmZmZmOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCSp2YWx1ZSA9IDB4ZmZmZmZmZmY7Ci0JCWJyZWFrOwotCX0KLQotCWFkZHIgPSBmaXJlX3BjaV9jb25maWdfbWthZGRyKHBibSwgYnVzLCBkZXZmbiwgd2hlcmUpOwotCWlmICghYWRkcikKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJcGNpX2NvbmZpZ19yZWFkOCgodTggKilhZGRyLCAmdG1wOCk7Ci0JCSp2YWx1ZSA9IHRtcDg7Ci0JCWJyZWFrOwotCi0JY2FzZSAyOgotCQlpZiAod2hlcmUgJiAweDAxKSB7Ci0JCQlwcmludGsoInBjaV9yZWFkX2NvbmZpZ193b3JkOiBtaXNhbGlnbmVkIHJlZyBbJXhdXG4iLAotCQkJICAgICAgIHdoZXJlKTsKLQkJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0JCX0KLQkJcGNpX2NvbmZpZ19yZWFkMTYoKHUxNiAqKWFkZHIsICZ0bXAxNik7Ci0JCSp2YWx1ZSA9IHRtcDE2OwotCQlicmVhazsKLQotCWNhc2UgNDoKLQkJaWYgKHdoZXJlICYgMHgwMykgewotCQkJcHJpbnRrKCJwY2lfcmVhZF9jb25maWdfZHdvcmQ6IG1pc2FsaWduZWQgcmVnIFsleF1cbiIsCi0JCQkgICAgICAgd2hlcmUpOwotCQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQkJfQotCi0JCXBjaV9jb25maWdfcmVhZDMyKGFkZHIsIHZhbHVlKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgZmlyZV93cml0ZV9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkgICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsdWUpCi17Ci0Jc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gYnVzX2Rldi0+c3lzZGF0YTsKLQl1bnNpZ25lZCBjaGFyIGJ1cyA9IGJ1c19kZXYtPm51bWJlcjsKLQl1MzIgKmFkZHI7Ci0KLQlpZiAoYnVzX2RldiA9PSBwYm0tPnBjaV9idXMgJiYgZGV2Zm4gPT0gMHgwMCkKLQkJcmV0dXJuIHBjaV9ob3N0X2JyaWRnZV93cml0ZV9wY2lfY2ZnKGJ1c19kZXYsIGRldmZuLCB3aGVyZSwKLQkJCQkJCSAgICAgc2l6ZSwgdmFsdWUpOwotCWFkZHIgPSBmaXJlX3BjaV9jb25maWdfbWthZGRyKHBibSwgYnVzLCBkZXZmbiwgd2hlcmUpOwotCWlmICghYWRkcikKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJcGNpX2NvbmZpZ193cml0ZTgoKHU4ICopYWRkciwgdmFsdWUpOwotCQlicmVhazsKLQotCWNhc2UgMjoKLQkJaWYgKHdoZXJlICYgMHgwMSkgewotCQkJcHJpbnRrKCJwY2lfd3JpdGVfY29uZmlnX3dvcmQ6IG1pc2FsaWduZWQgcmVnIFsleF1cbiIsCi0JCQkgICAgICAgd2hlcmUpOwotCQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQkJfQotCQlwY2lfY29uZmlnX3dyaXRlMTYoKHUxNiAqKWFkZHIsIHZhbHVlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDQ6Ci0JCWlmICh3aGVyZSAmIDB4MDMpIHsKLQkJCXByaW50aygicGNpX3dyaXRlX2NvbmZpZ19kd29yZDogbWlzYWxpZ25lZCByZWcgWyV4XVxuIiwKLQkJCSAgICAgICB3aGVyZSk7Ci0JCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCQl9Ci0KLQkJcGNpX2NvbmZpZ193cml0ZTMyKGFkZHIsIHZhbHVlKTsKLQl9Ci0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfb3BzIHBjaV9maXJlX29wcyA9IHsKLQkucmVhZAk9CWZpcmVfcmVhZF9wY2lfY2ZnLAotCS53cml0ZQk9CWZpcmVfd3JpdGVfcGNpX2NmZywKLX07Ci0KLXN0YXRpYyB2b2lkIHBibV9zY2FuX2J1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwKLQkJCSBzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCitzdGF0aWMgdm9pZCBwY2lfZmlyZV9zY2FuX2J1cyhzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCiB7CiAJcGJtLT5wY2lfYnVzID0gcGNpX3NjYW5fb25lX3BibShwYm0pOwotfQotCi1zdGF0aWMgdm9pZCBwY2lfZmlyZV9zY2FuX2J1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwotCi0JaWYgKChkcCA9IHAtPnBibV9BLnByb21fbm9kZSkgIT0gTlVMTCkKLQkJcGJtX3NjYW5fYnVzKHAsICZwLT5wYm1fQSk7Ci0KLQlpZiAoKGRwID0gcC0+cGJtX0IucHJvbV9ub2RlKSAhPSBOVUxMKQotCQlwYm1fc2Nhbl9idXMocCwgJnAtPnBibV9CKTsKIAogCS8qIFhYWCByZWdpc3RlciBlcnJvciBpbnRlcnJ1cHQgaGFuZGxlcnMgWFhYICovCiB9CkBAIC0xODIsNyArMzcsNyBAQAogI2RlZmluZSBGSVJFX0lPTU1VX0NPTlRST0wJMHg0MDAwMFVMCiAjZGVmaW5lIEZJUkVfSU9NTVVfVFNCQkFTRQkweDQwMDA4VUwKICNkZWZpbmUgRklSRV9JT01NVV9GTFVTSAkweDQwMTAwVUwKLSNkZWZpbmUgRklSRV9JT01NVV9GTFVTSElOVgkweDQwMTAwVUwKKyNkZWZpbmUgRklSRV9JT01NVV9GTFVTSElOVgkweDQwMTA4VUwKIAogc3RhdGljIHZvaWQgcGNpX2ZpcmVfcGJtX2lvbW11X2luaXQoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQogewpAQCAtMzEzLDE4ICsxNjgsMjUgQEAKIH0KIAogc3RhdGljIHZvaWQgcGNpX2ZpcmVfcGJtX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnAsCi0JCQkJc3RydWN0IGRldmljZV9ub2RlICpkcCwgdTMyIHBvcnRpZCkKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIHUzMiBwb3J0aWQpCiB7CiAJY29uc3Qgc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7CiAJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtOwotCWNvbnN0IHUzMiAqaW5vX2JpdG1hcDsKLQljb25zdCB1bnNpZ25lZCBpbnQgKmJ1c3JhbmdlOwogCiAJaWYgKChwb3J0aWQgJiAxKSA9PSAwKQogCQlwYm0gPSAmcC0+cGJtX0E7CiAJZWxzZQogCQlwYm0gPSAmcC0+cGJtX0I7CiAKKwlwYm0tPm5leHQgPSBwY2lfcGJtX3Jvb3Q7CisJcGNpX3BibV9yb290ID0gcGJtOworCisJcGJtLT5zY2FuX2J1cyA9IHBjaV9maXJlX3NjYW5fYnVzOworCXBibS0+cGNpX29wcyA9ICZzdW40dV9wY2lfb3BzOworCXBibS0+Y29uZmlnX3NwYWNlX3JlZ19iaXRzID0gMTI7CisKKwlwYm0tPmluZGV4ID0gcGNpX251bV9wYm1zKys7CisKIAlwYm0tPnBvcnRpZCA9IHBvcnRpZDsKIAlwYm0tPnBhcmVudCA9IHA7CiAJcGJtLT5wcm9tX25vZGUgPSBkcDsKQEAgLTMzOCwxMyArMjAwLDcgQEAKIAogCXBjaV9kZXRlcm1pbmVfbWVtX2lvX3NwYWNlKHBibSk7CiAKLQlpbm9fYml0bWFwID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiaW5vLWJpdG1hcCIsIE5VTEwpOwotCXBibS0+aW5vX2JpdG1hcCA9ICgoKHU2NClpbm9fYml0bWFwWzFdIDw8IDMyVUwpIHwKLQkJCSAgICgodTY0KWlub19iaXRtYXBbMF0gPDwgIDBVTCkpOwotCi0JYnVzcmFuZ2UgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJidXMtcmFuZ2UiLCBOVUxMKTsKLQlwYm0tPnBjaV9maXJzdF9idXNubyA9IGJ1c3JhbmdlWzBdOwotCXBibS0+cGNpX2xhc3RfYnVzbm8gPSBidXNyYW5nZVsxXTsKKwlwY2lfZ2V0X3BibV9wcm9wcyhwYm0pOwogCiAJcGNpX2ZpcmVfaHdfaW5pdChwYm0pOwogCXBjaV9maXJlX3BibV9pb21tdV9pbml0KHBibSk7CkBAIC0zNjIsMTkgKzIxOCwxMSBAQAogCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwOwogCXUzMiBwb3J0aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJwb3J0aWQiLCAweGZmKTsKIAlzdHJ1Y3QgaW9tbXUgKmlvbW11OworCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKIAotCWZvciAocCA9IHBjaV9jb250cm9sbGVyX3Jvb3Q7IHA7IHAgPSBwLT5uZXh0KSB7Ci0JCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKLQotCQlpZiAocC0+cGJtX0EucHJvbV9ub2RlICYmIHAtPnBibV9CLnByb21fbm9kZSkKLQkJCWNvbnRpbnVlOwotCi0JCXBibSA9IChwLT5wYm1fQS5wcm9tX25vZGUgPwotCQkgICAgICAgJnAtPnBibV9BIDoKLQkJICAgICAgICZwLT5wYm1fQik7Ci0KKwlmb3IgKHBibSA9IHBjaV9wYm1fcm9vdDsgcGJtOyBwYm0gPSBwYm0tPm5leHQpIHsKIAkJaWYgKHBvcnRpZF9jb21wYXJlKHBibS0+cG9ydGlkLCBwb3J0aWQpKSB7Ci0JCQlwY2lfZmlyZV9wYm1faW5pdChwLCBkcCwgcG9ydGlkKTsKKwkJCXBjaV9maXJlX3BibV9pbml0KHBibS0+cGFyZW50LCBkcCwgcG9ydGlkKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTM5NSwxNCArMjQzLDcgQEAKIAogCXAtPnBibV9CLmlvbW11ID0gaW9tbXU7CiAKLQlwLT5uZXh0ID0gcGNpX2NvbnRyb2xsZXJfcm9vdDsKLQlwY2lfY29udHJvbGxlcl9yb290ID0gcDsKLQotCXAtPmluZGV4ID0gcGNpX251bV9jb250cm9sbGVycysrOwotCi0JcC0+c2Nhbl9idXMgPSBwY2lfZmlyZV9zY2FuX2J1czsKIAkvKiBYWFggTVNJIHN1cHBvcnQgWFhYICovCi0JcC0+cGNpX29wcyA9ICZwY2lfZmlyZV9vcHM7CiAKIAkvKiBMaWtlIFBTWUNITyBhbmQgU0NISVpPIHdlIGhhdmUgYSAyR0IgYWxpZ25lZCBhcmVhCiAJICogZm9yIG1lbW9yeSBzcGFjZS4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2ltcGwuaCBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2ltcGwuaAppbmRleCAxMjA4NTgzLi5mNjYwYzJiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9pbXBsLmgKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfaW1wbC5oCkBAIC04LDE1ICs4LDEzMiBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAKLWV4dGVybiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcGNpX2NvbnRyb2xsZXJfcm9vdDsKKy8qIFRoZSBhYnN0cmFjdGlvbiB1c2VkIGhlcmUgaXMgdGhhdCB0aGVyZSBhcmUgUENJIGNvbnRyb2xsZXJzLAorICogZWFjaCB3aXRoIG9uZSAoU2FicmUpIG9yIHR3byAoUFNZQ0hPL1NDSElaTykgUENJIGJ1cyBtb2R1bGVzCisgKiB1bmRlcm5lYXRoLiAgRWFjaCBQQ0kgYnVzIG1vZHVsZSB1c2VzIGFuIElPTU1VIChzaGFyZWQgYnkgYm90aAorICogUEJNcyBvZiBhIGNvbnRyb2xsZXIsIG9yIHBlci1QQk0pLCBhbmQgaWYgYSBzdHJlYW1pbmcgYnVmZmVyCisgKiBpcyBwcmVzZW50LCBlYWNoIFBDSSBidXMgbW9kdWxlIGhhcyBpdCdzIG93bi4gKGllLiB0aGUgSU9NTVUKKyAqIG1pZ2h0IGJlIHNoYXJlZCBiZXR3ZWVuIFBCTXMsIHRoZSBTVEMgaXMgbmV2ZXIgc2hhcmVkKQorICogRnVydGhlcm1vcmUsIGVhY2ggUENJIGJ1cyBtb2R1bGUgY29udHJvbHMgaXQncyBvd24gYXV0b25vbW91cworICogUENJIGJ1cy4KKyAqLworCisjZGVmaW5lIFBDSV9TVENfRkxVU0hGTEFHX0lOSVQoU1RDKSBcCisJKCooKFNUQyktPnN0cmJ1Zl9mbHVzaGZsYWcpID0gMFVMKQorI2RlZmluZSBQQ0lfU1RDX0ZMVVNIRkxBR19TRVQoU1RDKSBcCisJKCooKFNUQyktPnN0cmJ1Zl9mbHVzaGZsYWcpICE9IDBVTCkKKworc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm87CisKK3N0cnVjdCBwY2lfcGJtX2luZm8geworCXN0cnVjdCBwY2lfcGJtX2luZm8JCSpuZXh0OworCWludAkJCQlpbmRleDsKKworCS8qIFBDSSBjb250cm9sbGVyIHdlIHNpdCB1bmRlci4gKi8KKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbwkqcGFyZW50OworCisJLyogUGh5c2ljYWwgYWRkcmVzcyBiYXNlIG9mIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLiAqLworCXVuc2lnbmVkIGxvbmcJCQljb250cm9sbGVyX3JlZ3M7CisKKwkvKiBQaHlzaWNhbCBhZGRyZXNzIGJhc2Ugb2YgUEJNIHJlZ2lzdGVycy4gKi8KKwl1bnNpZ25lZCBsb25nCQkJcGJtX3JlZ3M7CisKKwkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIERNQSBzeW5jIHJlZ2lzdGVyLCBpZiBhbnkuICAqLworCXVuc2lnbmVkIGxvbmcJCQlzeW5jX3JlZzsKKworCS8qIE9wYXF1ZSAzMi1iaXQgc3lzdGVtIGJ1cyBQb3J0IElELiAqLworCXUzMgkJCQlwb3J0aWQ7CisKKwkvKiBPcGFxdWUgMzItYml0IGhhbmRsZSB1c2VkIGZvciBoeXBlcnZpc29yIGNhbGxzLiAgKi8KKwl1MzIJCQkJZGV2aGFuZGxlOworCisJLyogQ2hpcHNldCB2ZXJzaW9uIGluZm9ybWF0aW9uLiAqLworCWludAkJCQljaGlwX3R5cGU7CisjZGVmaW5lIFBCTV9DSElQX1RZUEVfU0FCUkUJCTEKKyNkZWZpbmUgUEJNX0NISVBfVFlQRV9QU1lDSE8JCTIKKyNkZWZpbmUgUEJNX0NISVBfVFlQRV9TQ0hJWk8JCTMKKyNkZWZpbmUgUEJNX0NISVBfVFlQRV9TQ0hJWk9fUExVUwk0CisjZGVmaW5lIFBCTV9DSElQX1RZUEVfVE9NQVRJTExPCQk1CisJaW50CQkJCWNoaXBfdmVyc2lvbjsKKwlpbnQJCQkJY2hpcF9yZXZpc2lvbjsKKworCS8qIE5hbWUgdXNlZCBmb3IgdG9wLWxldmVsIHJlc291cmNlcy4gKi8KKwljaGFyCQkJCSpuYW1lOworCisJLyogT0JQIHNwZWNpZmljIGluZm9ybWF0aW9uLiAqLworCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKnByb21fbm9kZTsKKwl1NjQJCQkJaW5vX2JpdG1hcDsKKworCS8qIFBCTSBJL08gYW5kIE1lbW9yeSBzcGFjZSByZXNvdXJjZXMuICovCisJc3RydWN0IHJlc291cmNlCQkJaW9fc3BhY2U7CisJc3RydWN0IHJlc291cmNlCQkJbWVtX3NwYWNlOworCisJLyogQmFzZSBvZiBQQ0kgQ29uZmlnIHNwYWNlLCBjYW4gYmUgcGVyLVBCTSBvciBzaGFyZWQuICovCisJdW5zaWduZWQgbG9uZwkJCWNvbmZpZ19zcGFjZTsKKworCS8qIFRoaXMgd2lsbCBiZSAxMiBvbiBQQ0ktRSBjb250cm9sbGVycywgOCBlbHNld2hlcmUuICAqLworCXVuc2lnbmVkIGxvbmcJCQljb25maWdfc3BhY2VfcmVnX2JpdHM7CisKKwkvKiBTdGF0ZSBvZiA2Nk1IeiBjYXBhYmlsaXRpZXMgb24gdGhpcyBQQk0uICovCisJaW50CQkJCWlzXzY2bWh6X2NhcGFibGU7CisJaW50CQkJCWFsbF9kZXZzXzY2bWh6OworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwkvKiBNU0kgaW5mby4gICovCisJdTMyCQkJCW1zaXFfbnVtOworCXUzMgkJCQltc2lxX2VudF9jb3VudDsKKwl1MzIJCQkJbXNpcV9maXJzdDsKKwl1MzIJCQkJbXNpcV9maXJzdF9kZXZpbm87CisJdTMyCQkJCW1zaV9udW07CisJdTMyCQkJCW1zaV9maXJzdDsKKwl1MzIJCQkJbXNpX2RhdGFfbWFzazsKKwl1MzIJCQkJbXNpeF9kYXRhX3dpZHRoOworCXU2NAkJCQltc2kzMl9zdGFydDsKKwl1NjQJCQkJbXNpNjRfc3RhcnQ7CisJdTMyCQkJCW1zaTMyX2xlbjsKKwl1MzIJCQkJbXNpNjRfbGVuOworCXZvaWQJCQkJKm1zaV9xdWV1ZXM7CisJdW5zaWduZWQgbG9uZwkJCSptc2lfYml0bWFwOworCWludCAoKnNldHVwX21zaV9pcnEpKHVuc2lnbmVkIGludCAqdmlydF9pcnFfcCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgIHN0cnVjdCBtc2lfZGVzYyAqZW50cnkpOworCXZvaWQgKCp0ZWFyZG93bl9tc2lfaXJxKSh1bnNpZ25lZCBpbnQgdmlydF9pcnEsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKyNlbmRpZiAvKiAhKENPTkZJR19QQ0lfTVNJKSAqLworCisJLyogVGhpcyBQQk0ncyBzdHJlYW1pbmcgYnVmZmVyLiAqLworCXN0cnVjdCBzdHJidWYJCQlzdGM7CisKKwkvKiBJT01NVSBzdGF0ZSwgcG90ZW50aWFsbHkgc2hhcmVkIGJ5IGJvdGggUEJNIHNlZ21lbnRzLiAqLworCXN0cnVjdCBpb21tdQkJCSppb21tdTsKKworCS8qIE5vdyB0aGluZ3MgZm9yIHRoZSBhY3R1YWwgUENJIGJ1cyBwcm9iZXMuICovCisJdW5zaWduZWQgaW50CQkJcGNpX2ZpcnN0X2J1c25vOworCXVuc2lnbmVkIGludAkJCXBjaV9sYXN0X2J1c25vOworCXN0cnVjdCBwY2lfYnVzCQkJKnBjaV9idXM7CisJdm9pZCAoKnNjYW5fYnVzKShzdHJ1Y3QgcGNpX3BibV9pbmZvICopOworCXN0cnVjdCBwY2lfb3BzCQkJKnBjaV9vcHM7Cit9OworCitzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyB7CisJLyogVGhlIFBDSSBidXMgbW9kdWxlcyBjb250cm9sbGVkIGJ5IHVzLiAqLworCXN0cnVjdCBwY2lfcGJtX2luZm8JCXBibV9BOworCXN0cnVjdCBwY2lfcGJtX2luZm8JCXBibV9COworfTsKKworZXh0ZXJuIHN0cnVjdCBwY2lfcGJtX2luZm8gKnBjaV9wYm1fcm9vdDsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9tZW1zcGFjZV9tYXNrOwogCi1leHRlcm4gaW50IHBjaV9udW1fY29udHJvbGxlcnM7CitleHRlcm4gaW50IHBjaV9udW1fcGJtczsKIAogLyogUENJIGJ1cyBzY2FubmluZyBhbmQgZml4dXAgc3VwcG9ydC4gKi8KK2V4dGVybiB2b2lkIHBjaV9pb21tdV90YWJsZV9pbml0KHN0cnVjdCBpb21tdSAqaW9tbXUsIGludCB0c2JzaXplLAorCQkJCSB1MzIgZG1hX29mZnNldCwgdTMyIGRtYV9hZGRyX21hc2spOworZXh0ZXJuIHZvaWQgcGNpX2dldF9wYm1fcHJvcHMoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKTsKIGV4dGVybiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX3NjYW5fb25lX3BibShzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pOwogZXh0ZXJuIHZvaWQgcGNpX2RldGVybWluZV9tZW1faW9fc3BhY2Uoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKTsKIApAQCAtMzAsOSArMTQ3LDkgQEAKIAkJCQkJIHUzMiB2YWx1ZSk7CiAKIC8qIEVycm9yIHJlcG9ydGluZyBzdXBwb3J0LiAqLwotZXh0ZXJuIHZvaWQgcGNpX3NjYW5fZm9yX3RhcmdldF9hYm9ydChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqLCBzdHJ1Y3QgcGNpX3BibV9pbmZvICosIHN0cnVjdCBwY2lfYnVzICopOwotZXh0ZXJuIHZvaWQgcGNpX3NjYW5fZm9yX21hc3Rlcl9hYm9ydChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqLCBzdHJ1Y3QgcGNpX3BibV9pbmZvICosIHN0cnVjdCBwY2lfYnVzICopOwotZXh0ZXJuIHZvaWQgcGNpX3NjYW5fZm9yX3Bhcml0eV9lcnJvcihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqLCBzdHJ1Y3QgcGNpX3BibV9pbmZvICosIHN0cnVjdCBwY2lfYnVzICopOworZXh0ZXJuIHZvaWQgcGNpX3NjYW5fZm9yX3RhcmdldF9hYm9ydChzdHJ1Y3QgcGNpX3BibV9pbmZvICosIHN0cnVjdCBwY2lfYnVzICopOworZXh0ZXJuIHZvaWQgcGNpX3NjYW5fZm9yX21hc3Rlcl9hYm9ydChzdHJ1Y3QgcGNpX3BibV9pbmZvICosIHN0cnVjdCBwY2lfYnVzICopOworZXh0ZXJuIHZvaWQgcGNpX3NjYW5fZm9yX3Bhcml0eV9lcnJvcihzdHJ1Y3QgcGNpX3BibV9pbmZvICosIHN0cnVjdCBwY2lfYnVzICopOwogCiAvKiBDb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vzcy4gKi8KIGV4dGVybiB2b2lkIHBjaV9jb25maWdfcmVhZDgodTggKmFkZHIsIHU4ICpyZXQpOwpAQCAtNDIsNCArMTU5LDcgQEAKIGV4dGVybiB2b2lkIHBjaV9jb25maWdfd3JpdGUxNih1MTYgKmFkZHIsIHUxNiB2YWwpOwogZXh0ZXJuIHZvaWQgcGNpX2NvbmZpZ193cml0ZTMyKHUzMiAqYWRkciwgdTMyIHZhbCk7CiAKK2V4dGVybiBzdHJ1Y3QgcGNpX29wcyBzdW40dV9wY2lfb3BzOworZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIHN1bjR2X3BjaV9vcHM7CisKICNlbmRpZiAvKiAhKFBDSV9JTVBMX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9pb21tdS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfaW9tbXUuYwppbmRleCA5ZTQwNWNiLi43MGQyMzY0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9pb21tdS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2lvbW11LmMKQEAgLTgsMTAgKzgsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAotI2luY2x1ZGUgPGFzbS9wYm0uaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KIAogI2luY2x1ZGUgImlvbW11X2NvbW1vbi5oIgorI2luY2x1ZGUgInBjaV9pbXBsLmgiCiAKICNkZWZpbmUgUENJX1NUQ19DVFhNQVRDSF9BRERSKFNUQywgQ1RYKQlcCiAJKChTVEMpLT5zdHJidWZfY3R4bWF0Y2hfYmFzZSArICgoQ1RYKSA8PCAzKSkKQEAgLTU0MCw3ICs1NDIsNyBAQAogLyogTWFwIGEgc2V0IG9mIGJ1ZmZlcnMgZGVzY3JpYmVkIGJ5IFNHTElTVCB3aXRoIE5FTEVNUyBhcnJheQogICogZWxlbWVudHMgaW4gc3RyZWFtaW5nIG1vZGUgZm9yIFBDSSBETUEuCiAgKiBXaGVuIG1ha2luZyBjaGFuZ2VzIGhlcmUsIGluc3BlY3QgdGhlIGFzc2VtYmx5IG91dHB1dC4gSSB3YXMgaGF2aW5nCi0gKiBoYXJkIHRpbWUgdG8ga2VwcCB0aGlzIHJvdXRpbmUgb3V0IG9mIHVzaW5nIHN0YWNrIHNsb3RzIGZvciBob2xkaW5nIHZhcmlhYmxlcy4KKyAqIGhhcmQgdGltZSB0byBrZWVwIHRoaXMgcm91dGluZSBvdXQgb2YgdXNpbmcgc3RhY2sgc2xvdHMgZm9yIGhvbGRpbmcgdmFyaWFibGVzLgogICovCiBzdGF0aWMgaW50IHBjaV80dV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfcHN5Y2hvLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9wc3ljaG8uYwppbmRleCAyNTNkNDBlLi41OTgzOTNhMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfcHN5Y2hvLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfcHN5Y2hvLmMKQEAgLTEyLDEyICsxMiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAotI2luY2x1ZGUgPGFzbS9wYm0uaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N0YXJmaXJlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CiAKICNpbmNsdWRlICJwY2lfaW1wbC5oIgogI2luY2x1ZGUgImlvbW11X2NvbW1vbi5oIgpAQCAtOTQsMTI3ICs5NCw2IEBACiAJCSBQU1lDSE9fQ09ORklHX0VOQ09ERShidXMsIGRldmZuLCB3aGVyZSkpOwogfQogCi1zdGF0aWMgaW50IHBzeWNob19vdXRfb2ZfcmFuZ2Uoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAotCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgYnVzLAotCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgZGV2Zm4pCi17Ci0JcmV0dXJuICgocGJtLT5wYXJlbnQgPT0gMCkgfHwKLQkJKChwYm0gPT0gJnBibS0+cGFyZW50LT5wYm1fQikgJiYKLQkJIChidXMgPT0gcGJtLT5wY2lfZmlyc3RfYnVzbm8pICYmCi0JCSBQQ0lfU0xPVChkZXZmbikgPiA4KSB8fAotCQkoKHBibSA9PSAmcGJtLT5wYXJlbnQtPnBibV9BKSAmJgotCQkgKGJ1cyA9PSBwYm0tPnBjaV9maXJzdF9idXNubykgJiYKLQkJIFBDSV9TTE9UKGRldmZuKSA+IDgpKTsKLX0KLQotLyogUFNZQ0hPIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vzc29ycy4gKi8KLQotc3RhdGljIGludCBwc3ljaG9fcmVhZF9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkgICAgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBidXNfZGV2LT5zeXNkYXRhOwotCXVuc2lnbmVkIGNoYXIgYnVzID0gYnVzX2Rldi0+bnVtYmVyOwotCXUzMiAqYWRkcjsKLQl1MTYgdG1wMTY7Ci0JdTggdG1wODsKLQotCWlmIChidXNfZGV2ID09IHBibS0+cGNpX2J1cyAmJiBkZXZmbiA9PSAweDAwKQotCQlyZXR1cm4gcGNpX2hvc3RfYnJpZGdlX3JlYWRfcGNpX2NmZyhidXNfZGV2LCBkZXZmbiwgd2hlcmUsCi0JCQkJCQkgICAgc2l6ZSwgdmFsdWUpOwotCi0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQkqdmFsdWUgPSAweGZmOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCSp2YWx1ZSA9IDB4ZmZmZjsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQkqdmFsdWUgPSAweGZmZmZmZmZmOwotCQlicmVhazsKLQl9Ci0KLQlhZGRyID0gcHN5Y2hvX3BjaV9jb25maWdfbWthZGRyKHBibSwgYnVzLCBkZXZmbiwgd2hlcmUpOwotCWlmICghYWRkcikKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotCWlmIChwc3ljaG9fb3V0X29mX3JhbmdlKHBibSwgYnVzLCBkZXZmbikpCi0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlwY2lfY29uZmlnX3JlYWQ4KCh1OCAqKWFkZHIsICZ0bXA4KTsKLQkJKnZhbHVlID0gKHUzMikgdG1wODsKLQkJYnJlYWs7Ci0KLQljYXNlIDI6Ci0JCWlmICh3aGVyZSAmIDB4MDEpIHsKLQkJCXByaW50aygicGNpX3JlYWRfY29uZmlnX3dvcmQ6IG1pc2FsaWduZWQgcmVnIFsleF1cbiIsCi0JCQkgICAgICAgd2hlcmUpOwotCQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQkJfQotCQlwY2lfY29uZmlnX3JlYWQxNigodTE2ICopYWRkciwgJnRtcDE2KTsKLQkJKnZhbHVlID0gKHUzMikgdG1wMTY7Ci0JCWJyZWFrOwotCi0JY2FzZSA0OgotCQlpZiAod2hlcmUgJiAweDAzKSB7Ci0JCQlwcmludGsoInBjaV9yZWFkX2NvbmZpZ19kd29yZDogbWlzYWxpZ25lZCByZWcgWyV4XVxuIiwKLQkJCSAgICAgICB3aGVyZSk7Ci0JCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCQl9Ci0JCXBjaV9jb25maWdfcmVhZDMyKGFkZHIsIHZhbHVlKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgcHN5Y2hvX3dyaXRlX3BjaV9jZmcoc3RydWN0IHBjaV9idXMgKmJ1c19kZXYsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCQlpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsdWUpCi17Ci0Jc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gYnVzX2Rldi0+c3lzZGF0YTsKLQl1bnNpZ25lZCBjaGFyIGJ1cyA9IGJ1c19kZXYtPm51bWJlcjsKLQl1MzIgKmFkZHI7Ci0KLQlpZiAoYnVzX2RldiA9PSBwYm0tPnBjaV9idXMgJiYgZGV2Zm4gPT0gMHgwMCkKLQkJcmV0dXJuIHBjaV9ob3N0X2JyaWRnZV93cml0ZV9wY2lfY2ZnKGJ1c19kZXYsIGRldmZuLCB3aGVyZSwKLQkJCQkJCSAgICAgc2l6ZSwgdmFsdWUpOwotCWFkZHIgPSBwc3ljaG9fcGNpX2NvbmZpZ19ta2FkZHIocGJtLCBidXMsIGRldmZuLCB3aGVyZSk7Ci0JaWYgKCFhZGRyKQotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCi0JaWYgKHBzeWNob19vdXRfb2ZfcmFuZ2UocGJtLCBidXMsIGRldmZuKSkKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJcGNpX2NvbmZpZ193cml0ZTgoKHU4ICopYWRkciwgdmFsdWUpOwotCQlicmVhazsKLQotCWNhc2UgMjoKLQkJaWYgKHdoZXJlICYgMHgwMSkgewotCQkJcHJpbnRrKCJwY2lfd3JpdGVfY29uZmlnX3dvcmQ6IG1pc2FsaWduZWQgcmVnIFsleF1cbiIsCi0JCQkgICAgICAgd2hlcmUpOwotCQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQkJfQotCQlwY2lfY29uZmlnX3dyaXRlMTYoKHUxNiAqKWFkZHIsIHZhbHVlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDQ6Ci0JCWlmICh3aGVyZSAmIDB4MDMpIHsKLQkJCXByaW50aygicGNpX3dyaXRlX2NvbmZpZ19kd29yZDogbWlzYWxpZ25lZCByZWcgWyV4XVxuIiwKLQkJCSAgICAgICB3aGVyZSk7Ci0JCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCQl9Ci0JCXBjaV9jb25maWdfd3JpdGUzMihhZGRyLCB2YWx1ZSk7Ci0JfQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBwc3ljaG9fb3BzID0gewotCS5yZWFkID0JCXBzeWNob19yZWFkX3BjaV9jZmcsCi0JLndyaXRlID0JcHN5Y2hvX3dyaXRlX3BjaV9jZmcsCi19OwotCiAvKiBQU1lDSE8gZXJyb3IgaGFuZGxpbmcgc3VwcG9ydC4gKi8KIGVudW0gcHN5Y2hvX2Vycm9yX3R5cGUgewogCVVFX0VSUiwgQ0VfRVJSLCBQQ0lfRVJSCkBAIC0yNjUsMTIgKzE0NCwxMSBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RjX3RhZ19idWZbMTZdOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RjX2xpbmVfYnVmWzE2XTsKIAotc3RhdGljIHZvaWQgX19wc3ljaG9fY2hlY2tfb25lX3N0YyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwKLQkJCQkgICBzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCitzdGF0aWMgdm9pZCBfX3BzeWNob19jaGVja19vbmVfc3RjKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKIAkJCQkgICBpbnQgaXNfcGJtX2EpCiB7CiAJc3RydWN0IHN0cmJ1ZiAqc3RyYnVmID0gJnBibS0+c3RjOwotCXVuc2lnbmVkIGxvbmcgcmVnYmFzZSA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVnczsKKwl1bnNpZ25lZCBsb25nIHJlZ2Jhc2UgPSBwYm0tPmNvbnRyb2xsZXJfcmVnczsKIAl1bnNpZ25lZCBsb25nIGVycl9iYXNlLCB0YWdfYmFzZSwgbGluZV9iYXNlOwogCXU2NCBjb250cm9sOwogCWludCBpOwpAQCAtMzI2LDkgKzIwNCw4IEBACiAJCQl1bnNpZ25lZCBsb25nIGVycnZhbCA9IHN0Y19lcnJvcl9idWZbal07CiAJCQlpZiAoZXJydmFsICE9IDApIHsKIAkJCQlzYXdfZXJyb3IrKzsKLQkJCQlwcmludGsoIlBTWUNITyVkKFBCTSVjKTogU1RDX0VSUiglZClbd3IoJWQpcmQoJWQpXVxuIiwKLQkJCQkgICAgICAgcC0+aW5kZXgsCi0JCQkJICAgICAgIChpc19wYm1fYSA/ICdBJyA6ICdCJyksCisJCQkJcHJpbnRrKCIlczogU1RDX0VSUiglZClbd3IoJWQpcmQoJWQpXVxuIiwKKwkJCQkgICAgICAgcGJtLT5uYW1lLAogCQkJCSAgICAgICBqLAogCQkJCSAgICAgICAoZXJydmFsICYgUFNZQ0hPX1NUQ0VSUl9XUklURSkgPyAxIDogMCwKIAkJCQkgICAgICAgKGVycnZhbCAmIFBTWUNIT19TVENFUlJfUkVBRCkgPyAxIDogMCk7CkBAIC0zMzcsMTggKzIxNCwxNiBAQAogCQlpZiAoc2F3X2Vycm9yICE9IDApIHsKIAkJCXVuc2lnbmVkIGxvbmcgdGFndmFsID0gc3RjX3RhZ19idWZbaV07CiAJCQl1bnNpZ25lZCBsb25nIGxpbmV2YWwgPSBzdGNfbGluZV9idWZbaV07Ci0JCQlwcmludGsoIlBTWUNITyVkKFBCTSVjKTogU1RDX1RBRyglZClbUEEoJTAxNmx4KVZBKCUwOGx4KVYoJWQpVyglZCldXG4iLAotCQkJICAgICAgIHAtPmluZGV4LAotCQkJICAgICAgIChpc19wYm1fYSA/ICdBJyA6ICdCJyksCisJCQlwcmludGsoIiVzOiBTVENfVEFHKCVkKVtQQSglMDE2bHgpVkEoJTA4bHgpViglZClXKCVkKV1cbiIsCisJCQkgICAgICAgcGJtLT5uYW1lLAogCQkJICAgICAgIGksCiAJCQkgICAgICAgKCh0YWd2YWwgJiBQU1lDSE9fU1RDVEFHX1BQTikgPj4gMTlVTCksCiAJCQkgICAgICAgKHRhZ3ZhbCAmIFBTWUNIT19TVENUQUdfVlBOKSwKIAkJCSAgICAgICAoKHRhZ3ZhbCAmIFBTWUNIT19TVENUQUdfVkFMSUQpID8gMSA6IDApLAogCQkJICAgICAgICgodGFndmFsICYgUFNZQ0hPX1NUQ1RBR19XUklURSkgPyAxIDogMCkpOwotCQkJcHJpbnRrKCJQU1lDSE8lZChQQk0lYyk6IFNUQ19MSU5FKCVkKVtMSURYKCVseClTUCglbHgpTEFERFIoJWx4KUVQKCVseCkiCisJCQlwcmludGsoIiVzOiBTVENfTElORSglZClbTElEWCglbHgpU1AoJWx4KUxBRERSKCVseClFUCglbHgpIgogCQkJICAgICAgICJWKCVkKUZPRk4oJWQpXVxuIiwKLQkJCSAgICAgICBwLT5pbmRleCwKLQkJCSAgICAgICAoaXNfcGJtX2EgPyAnQScgOiAnQicpLAorCQkJICAgICAgIHBibS0+bmFtZSwKIAkJCSAgICAgICBpLAogCQkJICAgICAgICgobGluZXZhbCAmIFBTWUNIT19TVENMSU5FX0xJTkRYKSA+PiAyMVVMKSwKIAkJCSAgICAgICAoKGxpbmV2YWwgJiBQU1lDSE9fU1RDTElORV9TUFRSKSA+PiAxNVVMKSwKQEAgLTM2MiwyMCArMjM3LDEzIEBACiAJc3Bpbl91bmxvY2soJnN0Y19idWZfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fcHN5Y2hvX2NoZWNrX3N0Y19lcnJvcihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwKK3N0YXRpYyB2b2lkIF9fcHN5Y2hvX2NoZWNrX3N0Y19lcnJvcihzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGFmc3IsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGFmYXIsCiAJCQkJICAgICBlbnVtIHBzeWNob19lcnJvcl90eXBlIHR5cGUpCiB7Ci0Jc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtOwotCi0JcGJtID0gJnAtPnBibV9BOwotCWlmIChwYm0tPnN0Yy5zdHJidWZfZW5hYmxlZCkKLQkJX19wc3ljaG9fY2hlY2tfb25lX3N0YyhwLCBwYm0sIDEpOwotCi0JcGJtID0gJnAtPnBibV9COwotCWlmIChwYm0tPnN0Yy5zdHJidWZfZW5hYmxlZCkKLQkJX19wc3ljaG9fY2hlY2tfb25lX3N0YyhwLCBwYm0sIDApOworCV9fcHN5Y2hvX2NoZWNrX29uZV9zdGMocGJtLAorCQkJICAgICAgIChwYm0gPT0gJnBibS0+cGFyZW50LT5wYm1fQSkpOwogfQogCiAvKiBXaGVuIGFuIFVuY29ycmVjdGFibGUgRXJyb3Igb3IgYSBQQ0kgRXJyb3IgaGFwcGVucywgd2UKQEAgLTQxMywxMiArMjgxLDEyIEBACiAjZGVmaW5lICBQU1lDSE9fSU9NTVVfREFUQV9WQUxJRCAoMVVMIDw8IDMwVUwpCiAjZGVmaW5lICBQU1lDSE9fSU9NTVVfREFUQV9DQUNIRSAoMVVMIDw8IDI4VUwpCiAjZGVmaW5lICBQU1lDSE9fSU9NTVVfREFUQV9QUEFHRSAweGZmZmZmZmZVTAotc3RhdGljIHZvaWQgcHN5Y2hvX2NoZWNrX2lvbW11X2Vycm9yKHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwLAorc3RhdGljIHZvaWQgcHN5Y2hvX2NoZWNrX2lvbW11X2Vycm9yKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWZzciwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWZhciwKIAkJCQkgICAgIGVudW0gcHN5Y2hvX2Vycm9yX3R5cGUgdHlwZSkKIHsKLQlzdHJ1Y3QgaW9tbXUgKmlvbW11ID0gcC0+cGJtX0EuaW9tbXU7CisJc3RydWN0IGlvbW11ICppb21tdSA9IHBibS0+aW9tbXU7CiAJdW5zaWduZWQgbG9uZyBpb21tdV90YWdbMTZdOwogCXVuc2lnbmVkIGxvbmcgaW9tbXVfZGF0YVsxNl07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ0OSw4ICszMTcsOCBAQAogCQkJdHlwZV9zdHJpbmcgPSAiRUNDIEVycm9yIjsKIAkJCWJyZWFrOwogCQl9OwotCQlwcmludGsoIlBTWUNITyVkOiBJT01NVSBFcnJvciwgdHlwZVslc11cbiIsCi0JCSAgICAgICBwLT5pbmRleCwgdHlwZV9zdHJpbmcpOworCQlwcmludGsoIiVzOiBJT01NVSBFcnJvciwgdHlwZVslc11cbiIsCisJCSAgICAgICBwYm0tPm5hbWUsIHR5cGVfc3RyaW5nKTsKIAogCQkvKiBQdXQgdGhlIElPTU1VIGludG8gZGlhZ25vc3RpYyBtb2RlIGFuZCBwcm9iZQogCQkgKiBpdCdzIFRMQiBmb3IgZW50cmllcyB3aXRoIGVycm9yIHN0YXR1cy4KQEAgLTQ2NSw3ICszMzMsNyBAQAogCQlwc3ljaG9fd3JpdGUoaW9tbXUtPmlvbW11X2NvbnRyb2wsCiAJCQkgICAgIGNvbnRyb2wgfCBQU1lDSE9fSU9NTVVfQ1RSTF9ERU5BQik7CiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGJhc2UgPSBwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3M7CisJCQl1bnNpZ25lZCBsb25nIGJhc2UgPSBwYm0tPmNvbnRyb2xsZXJfcmVnczsKIAogCQkJaW9tbXVfdGFnW2ldID0KIAkJCQlwc3ljaG9fcmVhZChiYXNlICsgUFNZQ0hPX0lPTU1VX1RBRyArIChpICogOFVMKSk7CkBAIC01MDMsMjAgKzM3MSwyMCBAQAogCQkJCXR5cGVfc3RyaW5nID0gIkVDQyBFcnJvciI7CiAJCQkJYnJlYWs7CiAJCQl9OwotCQkJcHJpbnRrKCJQU1lDSE8lZDogSU9NTVUgVEFHKCVkKVtlcnJvciglcykgd3IoJWQpIHN0ciglZCkgc3ooJWRLKSB2cGcoJTA4bHgpXVxuIiwKLQkJCSAgICAgICBwLT5pbmRleCwgaSwgdHlwZV9zdHJpbmcsCisJCQlwcmludGsoIiVzOiBJT01NVSBUQUcoJWQpW2Vycm9yKCVzKSB3ciglZCkgc3RyKCVkKSBzeiglZEspIHZwZyglMDhseCldXG4iLAorCQkJICAgICAgIHBibS0+bmFtZSwgaSwgdHlwZV9zdHJpbmcsCiAJCQkgICAgICAgKCh0YWcgJiBQU1lDSE9fSU9NTVVfVEFHX1dSSVRFKSA/IDEgOiAwKSwKIAkJCSAgICAgICAoKHRhZyAmIFBTWUNIT19JT01NVV9UQUdfU1RSRUFNKSA/IDEgOiAwKSwKIAkJCSAgICAgICAoKHRhZyAmIFBTWUNIT19JT01NVV9UQUdfU0laRSkgPyA2NCA6IDgpLAogCQkJICAgICAgICh0YWcgJiBQU1lDSE9fSU9NTVVfVEFHX1ZQQUdFKSA8PCBJT01NVV9QQUdFX1NISUZUKTsKLQkJCXByaW50aygiUFNZQ0hPJWQ6IElPTU1VIERBVEEoJWQpW3ZhbGlkKCVkKSBjYWNoZSglZCkgcHBnKCUwMTZseCldXG4iLAotCQkJICAgICAgIHAtPmluZGV4LCBpLAorCQkJcHJpbnRrKCIlczogSU9NTVUgREFUQSglZClbdmFsaWQoJWQpIGNhY2hlKCVkKSBwcGcoJTAxNmx4KV1cbiIsCisJCQkgICAgICAgcGJtLT5uYW1lLCBpLAogCQkJICAgICAgICgoZGF0YSAmIFBTWUNIT19JT01NVV9EQVRBX1ZBTElEKSA/IDEgOiAwKSwKIAkJCSAgICAgICAoKGRhdGEgJiBQU1lDSE9fSU9NTVVfREFUQV9DQUNIRSkgPyAxIDogMCksCiAJCQkgICAgICAgKGRhdGEgJiBQU1lDSE9fSU9NTVVfREFUQV9QUEFHRSkgPDwgSU9NTVVfUEFHRV9TSElGVCk7CiAJCX0KIAl9Ci0JX19wc3ljaG9fY2hlY2tfc3RjX2Vycm9yKHAsIGFmc3IsIGFmYXIsIHR5cGUpOworCV9fcHN5Y2hvX2NoZWNrX3N0Y19lcnJvcihwYm0sIGFmc3IsIGFmYXIsIHR5cGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTU0MSw5ICs0MDksMTAgQEAKIAogc3RhdGljIGlycXJldHVybl90IHBzeWNob191ZV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCA9IGRldl9pZDsKLQl1bnNpZ25lZCBsb25nIGFmc3JfcmVnID0gcC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX1VFX0FGU1I7Ci0JdW5zaWduZWQgbG9uZyBhZmFyX3JlZyA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19VRV9BRkFSOworCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9IGRldl9pZDsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCA9IHBibS0+cGFyZW50OworCXVuc2lnbmVkIGxvbmcgYWZzcl9yZWcgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19VRV9BRlNSOworCXVuc2lnbmVkIGxvbmcgYWZhcl9yZWcgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19VRV9BRkFSOwogCXVuc2lnbmVkIGxvbmcgYWZzciwgYWZhciwgZXJyb3JfYml0czsKIAlpbnQgcmVwb3J0ZWQ7CiAKQEAgLTU2MCwyMiArNDI5LDIyIEBACiAJcHN5Y2hvX3dyaXRlKGFmc3JfcmVnLCBlcnJvcl9iaXRzKTsKIAogCS8qIExvZyB0aGUgZXJyb3IuICovCi0JcHJpbnRrKCJQU1lDSE8lZDogVW5jb3JyZWN0YWJsZSBFcnJvciwgcHJpbWFyeSBlcnJvciB0eXBlWyVzXVxuIiwKLQkgICAgICAgcC0+aW5kZXgsCisJcHJpbnRrKCIlczogVW5jb3JyZWN0YWJsZSBFcnJvciwgcHJpbWFyeSBlcnJvciB0eXBlWyVzXVxuIiwKKwkgICAgICAgcGJtLT5uYW1lLAogCSAgICAgICAoKChlcnJvcl9iaXRzICYgUFNZQ0hPX1VFQUZTUl9QUElPKSA/CiAJCSAiUElPIiA6CiAJCSAoKGVycm9yX2JpdHMgJiBQU1lDSE9fVUVBRlNSX1BEUkQpID8KIAkJICAiRE1BIFJlYWQiIDoKIAkJICAoKGVycm9yX2JpdHMgJiBQU1lDSE9fVUVBRlNSX1BEV1IpID8KIAkJICAgIkRNQSBXcml0ZSIgOiAiPz8/IikpKSkpOwotCXByaW50aygiUFNZQ0hPJWQ6IGJ5dGVtYXNrWyUwNGx4XSBkd29yZF9vZmZzZXRbJWx4XSBVUEFfTUlEWyUwMmx4XSB3YXNfYmxvY2soJWQpXG4iLAotCSAgICAgICBwLT5pbmRleCwKKwlwcmludGsoIiVzOiBieXRlbWFza1slMDRseF0gZHdvcmRfb2Zmc2V0WyVseF0gVVBBX01JRFslMDJseF0gd2FzX2Jsb2NrKCVkKVxuIiwKKwkgICAgICAgcGJtLT5uYW1lLAogCSAgICAgICAoYWZzciAmIFBTWUNIT19VRUFGU1JfQk1TSykgPj4gMzJVTCwKIAkgICAgICAgKGFmc3IgJiBQU1lDSE9fVUVBRlNSX0RPRkYpID4+IDI5VUwsCiAJICAgICAgIChhZnNyICYgUFNZQ0hPX1VFQUZTUl9NSUQpID4+IDI0VUwsCiAJICAgICAgICgoYWZzciAmIFBTWUNIT19VRUFGU1JfQkxLKSA/IDEgOiAwKSk7Ci0JcHJpbnRrKCJQU1lDSE8lZDogVUUgQUZBUiBbJTAxNmx4XVxuIiwgcC0+aW5kZXgsIGFmYXIpOwotCXByaW50aygiUFNZQ0hPJWQ6IFVFIFNlY29uZGFyeSBlcnJvcnMgWyIsIHAtPmluZGV4KTsKKwlwcmludGsoIiVzOiBVRSBBRkFSIFslMDE2bHhdXG4iLCBwYm0tPm5hbWUsIGFmYXIpOworCXByaW50aygiJXM6IFVFIFNlY29uZGFyeSBlcnJvcnMgWyIsIHBibS0+bmFtZSk7CiAJcmVwb3J0ZWQgPSAwOwogCWlmIChhZnNyICYgUFNZQ0hPX1VFQUZTUl9TUElPKSB7CiAJCXJlcG9ydGVkKys7CkBAIC01OTMsOCArNDYyLDkgQEAKIAkJcHJpbnRrKCIobm9uZSkiKTsKIAlwcmludGsoIl1cbiIpOwogCi0JLyogSW50ZXJyb2dhdGUgSU9NTVUgZm9yIGVycm9yIHN0YXR1cy4gKi8KLQlwc3ljaG9fY2hlY2tfaW9tbXVfZXJyb3IocCwgYWZzciwgYWZhciwgVUVfRVJSKTsKKwkvKiBJbnRlcnJvZ2F0ZSBib3RoIElPTU1VcyBmb3IgZXJyb3Igc3RhdHVzLiAqLworCXBzeWNob19jaGVja19pb21tdV9lcnJvcigmcC0+cGJtX0EsIGFmc3IsIGFmYXIsIFVFX0VSUik7CisJcHN5Y2hvX2NoZWNrX2lvbW11X2Vycm9yKCZwLT5wYm1fQiwgYWZzciwgYWZhciwgVUVfRVJSKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTYxOCw5ICs0ODgsOSBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcHN5Y2hvX2NlX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwID0gZGV2X2lkOwotCXVuc2lnbmVkIGxvbmcgYWZzcl9yZWcgPSBwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBQU1lDSE9fQ0VfQUZTUjsKLQl1bnNpZ25lZCBsb25nIGFmYXJfcmVnID0gcC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0NFX0FGQVI7CisJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gZGV2X2lkOworCXVuc2lnbmVkIGxvbmcgYWZzcl9yZWcgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19DRV9BRlNSOworCXVuc2lnbmVkIGxvbmcgYWZhcl9yZWcgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19DRV9BRkFSOwogCXVuc2lnbmVkIGxvbmcgYWZzciwgYWZhciwgZXJyb3JfYml0czsKIAlpbnQgcmVwb3J0ZWQ7CiAKQEAgLTYzNyw4ICs1MDcsOCBAQAogCXBzeWNob193cml0ZShhZnNyX3JlZywgZXJyb3JfYml0cyk7CiAKIAkvKiBMb2cgdGhlIGVycm9yLiAqLwotCXByaW50aygiUFNZQ0hPJWQ6IENvcnJlY3RhYmxlIEVycm9yLCBwcmltYXJ5IGVycm9yIHR5cGVbJXNdXG4iLAotCSAgICAgICBwLT5pbmRleCwKKwlwcmludGsoIiVzOiBDb3JyZWN0YWJsZSBFcnJvciwgcHJpbWFyeSBlcnJvciB0eXBlWyVzXVxuIiwKKwkgICAgICAgcGJtLT5uYW1lLAogCSAgICAgICAoKChlcnJvcl9iaXRzICYgUFNZQ0hPX0NFQUZTUl9QUElPKSA/CiAJCSAiUElPIiA6CiAJCSAoKGVycm9yX2JpdHMgJiBQU1lDSE9fQ0VBRlNSX1BEUkQpID8KQEAgLTY0OSwxNiArNTE5LDE2IEBACiAJLyogWFhYIFVzZSBzeW5kcm9tZSBhbmQgYWZhciB0byBwcmludCBvdXQgbW9kdWxlIHN0cmluZyBqdXN0IGxpa2UKIAkgKiBYWFggVURCIENFIHRyYXAgaGFuZGxlciBkb2VzLi4uIC1EYXZlTQogCSAqLwotCXByaW50aygiUFNZQ0hPJWQ6IHN5bmRyb21lWyUwMmx4XSBieXRlbWFza1slMDRseF0gZHdvcmRfb2Zmc2V0WyVseF0gIgorCXByaW50aygiJXM6IHN5bmRyb21lWyUwMmx4XSBieXRlbWFza1slMDRseF0gZHdvcmRfb2Zmc2V0WyVseF0gIgogCSAgICAgICAiVVBBX01JRFslMDJseF0gd2FzX2Jsb2NrKCVkKVxuIiwKLQkgICAgICAgcC0+aW5kZXgsCisJICAgICAgIHBibS0+bmFtZSwKIAkgICAgICAgKGFmc3IgJiBQU1lDSE9fQ0VBRlNSX0VTWU5EKSA+PiA0OFVMLAogCSAgICAgICAoYWZzciAmIFBTWUNIT19DRUFGU1JfQk1TSykgPj4gMzJVTCwKIAkgICAgICAgKGFmc3IgJiBQU1lDSE9fQ0VBRlNSX0RPRkYpID4+IDI5VUwsCiAJICAgICAgIChhZnNyICYgUFNZQ0hPX0NFQUZTUl9NSUQpID4+IDI0VUwsCiAJICAgICAgICgoYWZzciAmIFBTWUNIT19DRUFGU1JfQkxLKSA/IDEgOiAwKSk7Ci0JcHJpbnRrKCJQU1lDSE8lZDogQ0UgQUZBUiBbJTAxNmx4XVxuIiwgcC0+aW5kZXgsIGFmYXIpOwotCXByaW50aygiUFNZQ0hPJWQ6IENFIFNlY29uZGFyeSBlcnJvcnMgWyIsIHAtPmluZGV4KTsKKwlwcmludGsoIiVzOiBDRSBBRkFSIFslMDE2bHhdXG4iLCBwYm0tPm5hbWUsIGFmYXIpOworCXByaW50aygiJXM6IENFIFNlY29uZGFyeSBlcnJvcnMgWyIsIHBibS0+bmFtZSk7CiAJcmVwb3J0ZWQgPSAwOwogCWlmIChhZnNyICYgUFNZQ0hPX0NFQUZTUl9TUElPKSB7CiAJCXJlcG9ydGVkKys7CkBAIC03NzMsOCArNjQzLDggQEAKIAlwc3ljaG9fd3JpdGUoYWZzcl9yZWcsIGVycm9yX2JpdHMpOwogCiAJLyogTG9nIHRoZSBlcnJvci4gKi8KLQlwcmludGsoIlBTWUNITyVkKFBCTSVjKTogUENJIEVycm9yLCBwcmltYXJ5IGVycm9yIHR5cGVbJXNdXG4iLAotCSAgICAgICBwLT5pbmRleCwgKGlzX3BibV9hID8gJ0EnIDogJ0InKSwKKwlwcmludGsoIiVzOiBQQ0kgRXJyb3IsIHByaW1hcnkgZXJyb3IgdHlwZVslc11cbiIsCisJICAgICAgIHBibS0+bmFtZSwKIAkgICAgICAgKCgoZXJyb3JfYml0cyAmIFBTWUNIT19QQ0lBRlNSX1BNQSkgPwogCQkgIk1hc3RlciBBYm9ydCIgOgogCQkgKChlcnJvcl9iaXRzICYgUFNZQ0hPX1BDSUFGU1JfUFRBKSA/CkBAIC03ODMsMTUgKzY1MywxMyBAQAogCQkgICAiRXhjZXNzaXZlIFJldHJpZXMiIDoKIAkJICAgKChlcnJvcl9iaXRzICYgUFNZQ0hPX1BDSUFGU1JfUFBFUlIpID8KIAkJICAgICJQYXJpdHkgRXJyb3IiIDogIj8/PyIpKSkpKSk7Ci0JcHJpbnRrKCJQU1lDSE8lZChQQk0lYyk6IGJ5dGVtYXNrWyUwNGx4XSBVUEFfTUlEWyUwMmx4XSB3YXNfYmxvY2soJWQpXG4iLAotCSAgICAgICBwLT5pbmRleCwgKGlzX3BibV9hID8gJ0EnIDogJ0InKSwKKwlwcmludGsoIiVzOiBieXRlbWFza1slMDRseF0gVVBBX01JRFslMDJseF0gd2FzX2Jsb2NrKCVkKVxuIiwKKwkgICAgICAgcGJtLT5uYW1lLAogCSAgICAgICAoYWZzciAmIFBTWUNIT19QQ0lBRlNSX0JNU0spID4+IDMyVUwsCiAJICAgICAgIChhZnNyICYgUFNZQ0hPX1BDSUFGU1JfTUlEKSA+PiAyNVVMLAogCSAgICAgICAoYWZzciAmIFBTWUNIT19QQ0lBRlNSX0JMSykgPyAxIDogMCk7Ci0JcHJpbnRrKCJQU1lDSE8lZChQQk0lYyk6IFBDSSBBRkFSIFslMDE2bHhdXG4iLAotCSAgICAgICBwLT5pbmRleCwgKGlzX3BibV9hID8gJ0EnIDogJ0InKSwgYWZhcik7Ci0JcHJpbnRrKCJQU1lDSE8lZChQQk0lYyk6IFBDSSBTZWNvbmRhcnkgZXJyb3JzIFsiLAotCSAgICAgICBwLT5pbmRleCwgKGlzX3BibV9hID8gJ0EnIDogJ0InKSk7CisJcHJpbnRrKCIlczogUENJIEFGQVIgWyUwMTZseF1cbiIsIHBibS0+bmFtZSwgYWZhcik7CisJcHJpbnRrKCIlczogUENJIFNlY29uZGFyeSBlcnJvcnMgWyIsIHBibS0+bmFtZSk7CiAJcmVwb3J0ZWQgPSAwOwogCWlmIChhZnNyICYgUFNZQ0hPX1BDSUFGU1JfU01BKSB7CiAJCXJlcG9ydGVkKys7CkBAIC04MjMsMTEgKzY5MSwxMSBAQAogCSAqIGEgYnVnIGluIHRoZSBJT01NVSBzdXBwb3J0IGNvZGUgb3IgYSBQQ0kgZGV2aWNlIGRyaXZlci4KIAkgKi8KIAlpZiAoZXJyb3JfYml0cyAmIChQU1lDSE9fUENJQUZTUl9QVEEgfCBQU1lDSE9fUENJQUZTUl9TVEEpKSB7Ci0JCXBzeWNob19jaGVja19pb21tdV9lcnJvcihwLCBhZnNyLCBhZmFyLCBQQ0lfRVJSKTsKLQkJcGNpX3NjYW5fZm9yX3RhcmdldF9hYm9ydChwLCBwYm0sIHBibS0+cGNpX2J1cyk7CisJCXBzeWNob19jaGVja19pb21tdV9lcnJvcihwYm0sIGFmc3IsIGFmYXIsIFBDSV9FUlIpOworCQlwY2lfc2Nhbl9mb3JfdGFyZ2V0X2Fib3J0KHBibSwgcGJtLT5wY2lfYnVzKTsKIAl9CiAJaWYgKGVycm9yX2JpdHMgJiAoUFNZQ0hPX1BDSUFGU1JfUE1BIHwgUFNZQ0hPX1BDSUFGU1JfU01BKSkKLQkJcGNpX3NjYW5fZm9yX21hc3Rlcl9hYm9ydChwLCBwYm0sIHBibS0+cGNpX2J1cyk7CisJCXBjaV9zY2FuX2Zvcl9tYXN0ZXJfYWJvcnQocGJtLCBwYm0tPnBjaV9idXMpOwogCiAJLyogRm9yIGV4Y2Vzc2l2ZSByZXRyaWVzLCBQU1lDSE8vUEJNIHdpbGwgYWJvcnQgdGhlIGRldmljZQogCSAqIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gc3BlY2lmaWNhbGx5IGNoZWNrIGZvciBleGNlc3NpdmUKQEAgLTgzNyw3ICs3MDUsNyBAQAogCSAqLwogCiAJaWYgKGVycm9yX2JpdHMgJiAoUFNZQ0hPX1BDSUFGU1JfUFBFUlIgfCBQU1lDSE9fUENJQUZTUl9TUEVSUikpCi0JCXBjaV9zY2FuX2Zvcl9wYXJpdHlfZXJyb3IocCwgcGJtLCBwYm0tPnBjaV9idXMpOworCQlwY2lfc2Nhbl9mb3JfcGFyaXR5X2Vycm9yKHBibSwgcGJtLT5wY2lfYnVzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTg0NywzNCArNzE1LDQ5IEBACiAjZGVmaW5lICBQU1lDSE9fRUNDQ1RSTF9FRQkgMHg4MDAwMDAwMDAwMDAwMDAwVUwgLyogRW5hYmxlIEVDQyBDaGVja2luZyAqLwogI2RlZmluZSAgUFNZQ0hPX0VDQ0NUUkxfVUUJIDB4NDAwMDAwMDAwMDAwMDAwMFVMIC8qIEVuYWJsZSBVRSBJbnRlcnJ1cHRzICovCiAjZGVmaW5lICBQU1lDSE9fRUNDQ1RSTF9DRQkgMHgyMDAwMDAwMDAwMDAwMDAwVUwgLyogRW5hYmxlIENFIElOdGVycnVwdHMgKi8KLXN0YXRpYyB2b2lkIHBzeWNob19yZWdpc3Rlcl9lcnJvcl9oYW5kbGVycyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCkKK3N0YXRpYyB2b2lkIHBzeWNob19yZWdpc3Rlcl9lcnJvcl9oYW5kbGVycyhzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCiB7Ci0Jc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gJnAtPnBibV9BOyAvKiBhcmJpdHJhcnkgKi8KIAlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOwotCXVuc2lnbmVkIGxvbmcgYmFzZSA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVnczsKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSBwYm0tPmNvbnRyb2xsZXJfcmVnczsKIAl1NjQgdG1wOworCWludCBlcnI7CiAKIAlpZiAoIW9wKQogCQlyZXR1cm47CiAKIAkvKiBQc3ljaG8gaW50ZXJydXB0IHByb3BlcnR5IG9yZGVyIGlzOgotCSAqIDA6IFBDSUVSUiBQQk0gQiBJTk8KKwkgKiAwOiBQQ0lFUlIgSU5PIGZvciB0aGlzIFBCTQogCSAqIDE6IFVFIEVSUgogCSAqIDI6IENFIEVSUgogCSAqIDM6IFBPV0VSIEZBSUwKIAkgKiA0OiBTUEFSRSBIQVJEV0FSRQotCSAqIDU6IFBDSUVSUiBQQk0gQSBJTk8KKwkgKiA1OiBQT1dFUiBNQU5BR0VNRU5UCiAJICovCiAKIAlpZiAob3AtPm51bV9pcnFzIDwgNikKIAkJcmV0dXJuOwogCi0JcmVxdWVzdF9pcnEob3AtPmlycXNbMV0sIHBzeWNob191ZV9pbnRyLCBJUlFGX1NIQVJFRCwgIlBTWUNITyBVRSIsIHApOwotCXJlcXVlc3RfaXJxKG9wLT5pcnFzWzJdLCBwc3ljaG9fY2VfaW50ciwgSVJRRl9TSEFSRUQsICJQU1lDSE8gQ0UiLCBwKTsKLQlyZXF1ZXN0X2lycShvcC0+aXJxc1s1XSwgcHN5Y2hvX3BjaWVycl9pbnRyLCBJUlFGX1NIQVJFRCwKLQkJICAgICJQU1lDSE8gUENJRVJSLUEiLCAmcC0+cGJtX0EpOwotCXJlcXVlc3RfaXJxKG9wLT5pcnFzWzBdLCBwc3ljaG9fcGNpZXJyX2ludHIsIElSUUZfU0hBUkVELAotCQkgICAgIlBTWUNITyBQQ0lFUlItQiIsICZwLT5wYm1fQik7CisJLyogV2UgcmVhbGx5IG1lYW4gdG8gaWdub3JlIHRoZSByZXR1cm4gcmVzdWx0IGhlcmUuICBUd28KKwkgKiBQQ0kgY29udHJvbGxlciBzaGFyZSB0aGUgc2FtZSBpbnRlcnJ1cHQgbnVtYmVycyBhbmQKKwkgKiBkcml2ZSB0aGUgc2FtZSBmcm9udC1lbmQgaGFyZHdhcmUuICBXaGljaGV2ZXIgb2YgdGhlCisJICogdHdvIGdldCBpbiBoZXJlIGZpcnN0IHdpbGwgcmVnaXN0ZXIgdGhlIElSUSBoYW5kbGVyCisJICogdGhlIHNlY29uZCB3aWxsIGp1c3QgZXJyb3Igb3V0IHNpbmNlIHdlIGRvIG5vdCBwYXNzIGluCisJICogSVJRRl9TSEFSRUQuCisJICovCisJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbMV0sIHBzeWNob191ZV9pbnRyLCAwLAorCQkJICAiUFNZQ0hPX1VFIiwgcGJtKTsKKwllcnIgPSByZXF1ZXN0X2lycShvcC0+aXJxc1syXSwgcHN5Y2hvX2NlX2ludHIsIDAsCisJCQkgICJQU1lDSE9fQ0UiLCBwYm0pOworCisJLyogVGhpcyBvbmUsIGhvd2V2ZXIsIG91Z2h0IG5vdCB0byBmYWlsLiAgV2UgY2FuIGp1c3Qgd2FybgorCSAqIGFib3V0IGl0IHNpbmNlIHRoZSBzeXN0ZW0gY2FuIHN0aWxsIG9wZXJhdGUgcHJvcGVybHkgZXZlbgorCSAqIGlmIHRoaXMgZmFpbHMuCisJICovCisJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbMF0sIHBzeWNob19wY2llcnJfaW50ciwgMCwKKwkJCSAgIlBTWUNIT19QQ0lFUlIiLCBwYm0pOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDb3VsZCBub3QgcmVnaXN0ZXIgUENJRVJSLCAiCisJCSAgICAgICAiZXJyPSVkXG4iLCBwYm0tPm5hbWUsIGVycik7CiAKIAkvKiBFbmFibGUgVUUgYW5kIENFIGludGVycnVwdHMgZm9yIGNvbnRyb2xsZXIuICovCiAJcHN5Y2hvX3dyaXRlKGJhc2UgKyBQU1lDSE9fRUNDX0NUUkwsCkBAIC05MTgsNTQgKzgwMSw0NSBAQAogCXBjaV9jb25maWdfd3JpdGU4KGFkZHIsIDY0KTsKIH0KIAotc3RhdGljIHZvaWQgcGJtX3NjYW5fYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwLAotCQkJIHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSkKK3N0YXRpYyB2b2lkIHBzeWNob19zY2FuX2J1cyhzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCiB7CisJcGJtX2NvbmZpZ19idXNtYXN0ZXJpbmcocGJtKTsKKwlwYm0tPmlzXzY2bWh6X2NhcGFibGUgPSAwOwogCXBibS0+cGNpX2J1cyA9IHBjaV9zY2FuX29uZV9wYm0ocGJtKTsKLX0KLQotc3RhdGljIHZvaWQgcHN5Y2hvX3NjYW5fYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwKQotewotCXBibV9jb25maWdfYnVzbWFzdGVyaW5nKCZwLT5wYm1fQik7Ci0JcC0+cGJtX0IuaXNfNjZtaHpfY2FwYWJsZSA9IDA7Ci0JcGJtX2NvbmZpZ19idXNtYXN0ZXJpbmcoJnAtPnBibV9BKTsKLQlwLT5wYm1fQS5pc182Nm1oel9jYXBhYmxlID0gMTsKLQlwYm1fc2Nhbl9idXMocCwgJnAtPnBibV9CKTsKLQlwYm1fc2Nhbl9idXMocCwgJnAtPnBibV9BKTsKIAogCS8qIEFmdGVyIHRoZSBQQ0kgYnVzIHNjYW4gaXMgY29tcGxldGUsIHdlIGNhbiByZWdpc3RlcgogCSAqIHRoZSBlcnJvciBpbnRlcnJ1cHQgaGFuZGxlcnMuCiAJICovCi0JcHN5Y2hvX3JlZ2lzdGVyX2Vycm9yX2hhbmRsZXJzKHApOworCXBzeWNob19yZWdpc3Rlcl9lcnJvcl9oYW5kbGVycyhwYm0pOwogfQogCi1zdGF0aWMgdm9pZCBwc3ljaG9faW9tbXVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCkKK3N0YXRpYyB2b2lkIHBzeWNob19pb21tdV9pbml0KHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSkKIHsKLQlzdHJ1Y3QgaW9tbXUgKmlvbW11ID0gcC0+cGJtX0EuaW9tbXU7CisJc3RydWN0IGlvbW11ICppb21tdSA9IHBibS0+aW9tbXU7CiAJdW5zaWduZWQgbG9uZyBpOwogCXU2NCBjb250cm9sOwogCiAJLyogUmVnaXN0ZXIgYWRkcmVzc2VzLiAqLwotCWlvbW11LT5pb21tdV9jb250cm9sICA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9DT05UUk9MOwotCWlvbW11LT5pb21tdV90c2JiYXNlICA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9UU0JCQVNFOwotCWlvbW11LT5pb21tdV9mbHVzaCAgICA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9GTFVTSDsKKwlpb21tdS0+aW9tbXVfY29udHJvbCAgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9DT05UUk9MOworCWlvbW11LT5pb21tdV90c2JiYXNlICA9IHBibS0+Y29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0lPTU1VX1RTQkJBU0U7CisJaW9tbXUtPmlvbW11X2ZsdXNoICAgID0gcGJtLT5jb250cm9sbGVyX3JlZ3MgKyBQU1lDSE9fSU9NTVVfRkxVU0g7CiAJLyogUFNZQ0hPJ3MgSU9NTVUgbGFja3MgY3R4IGZsdXNoaW5nLiAqLwogCWlvbW11LT5pb21tdV9jdHhmbHVzaCA9IDA7CiAKIAkvKiBXZSB1c2UgdGhlIG1haW4gY29udHJvbCByZWdpc3RlciBvZiBQU1lDSE8gYXMgdGhlIHdyaXRlCiAJICogY29tcGxldGlvbiByZWdpc3Rlci4KIAkgKi8KLQlpb21tdS0+d3JpdGVfY29tcGxldGVfcmVnID0gcC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0NPTlRST0w7CisJaW9tbXUtPndyaXRlX2NvbXBsZXRlX3JlZyA9IHBibS0+Y29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0NPTlRST0w7CiAKIAkvKgogCSAqIEludmFsaWRhdGUgVExCIEVudHJpZXMuCiAJICovCi0JY29udHJvbCA9IHBzeWNob19yZWFkKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9DT05UUk9MKTsKKwljb250cm9sID0gcHN5Y2hvX3JlYWQocGJtLT5jb250cm9sbGVyX3JlZ3MgKyBQU1lDSE9fSU9NTVVfQ09OVFJPTCk7CiAJY29udHJvbCB8PSBQU1lDSE9fSU9NTVVfQ1RSTF9ERU5BQjsKLQlwc3ljaG9fd3JpdGUocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0lPTU1VX0NPTlRST0wsIGNvbnRyb2wpOworCXBzeWNob193cml0ZShwYm0tPmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9DT05UUk9MLCBjb250cm9sKTsKIAlmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCXBzeWNob193cml0ZShwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBQU1lDSE9fSU9NTVVfVEFHICsgKGkgKiA4VUwpLCAwKTsKLQkJcHN5Y2hvX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9EQVRBICsgKGkgKiA4VUwpLCAwKTsKKwkJcHN5Y2hvX3dyaXRlKHBibS0+Y29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0lPTU1VX1RBRyArIChpICogOFVMKSwgMCk7CisJCXBzeWNob193cml0ZShwYm0tPmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9EQVRBICsgKGkgKiA4VUwpLCAwKTsKIAl9CiAKIAkvKiBMZWF2ZSBkaWFnIG1vZGUgZW5hYmxlZCBmb3IgZnVsbC1mbHVzaGluZyBkb25lCkBAIC05NzMsMTcgKzg0NywxNyBAQAogCSAqLwogCXBjaV9pb21tdV90YWJsZV9pbml0KGlvbW11LCBJT19UU0JfU0laRSwgMHhjMDAwMDAwMCwgMHhmZmZmZmZmZik7CiAKLQlwc3ljaG9fd3JpdGUocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0lPTU1VX1RTQkJBU0UsCisJcHN5Y2hvX3dyaXRlKHBibS0+Y29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0lPTU1VX1RTQkJBU0UsCiAJCSAgICAgX19wYShpb21tdS0+cGFnZV90YWJsZSkpOwogCi0JY29udHJvbCA9IHBzeWNob19yZWFkKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9DT05UUk9MKTsKKwljb250cm9sID0gcHN5Y2hvX3JlYWQocGJtLT5jb250cm9sbGVyX3JlZ3MgKyBQU1lDSE9fSU9NTVVfQ09OVFJPTCk7CiAJY29udHJvbCAmPSB+KFBTWUNIT19JT01NVV9DVFJMX1RTQlNaIHwgUFNZQ0hPX0lPTU1VX0NUUkxfVEJXU1opOwogCWNvbnRyb2wgfD0gKFBTWUNIT19JT01NVV9UU0JTWl8xMjhLIHwgUFNZQ0hPX0lPTU1VX0NUUkxfRU5BQik7Ci0JcHN5Y2hvX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19JT01NVV9DT05UUk9MLCBjb250cm9sKTsKKwlwc3ljaG9fd3JpdGUocGJtLT5jb250cm9sbGVyX3JlZ3MgKyBQU1lDSE9fSU9NTVVfQ09OVFJPTCwgY29udHJvbCk7CiAKIAkvKiBJZiBuZWNlc3NhcnksIGhvb2sgdXMgdXAgZm9yIHN0YXJmaXJlIElSUSB0cmFuc2xhdGlvbnMuICovCiAJaWYgKHRoaXNfaXNfc3RhcmZpcmUpCi0JCXN0YXJmaXJlX2hvb2t1cChwLT5wYm1fQS5wb3J0aWQpOworCQlzdGFyZmlyZV9ob29rdXAocGJtLT5wb3J0aWQpOwogfQogCiAjZGVmaW5lIFBTWUNIT19JUlFfUkVUUlkJMHgxYTAwVUwKQEAgLTk5OCwzNiArODcyLDM1IEBACiAjZGVmaW5lICBQU1lDSE9fUENJRElBR19JUEFQQVIJIDB4MDAwMDAwMDAwMDAwMDAwMlVMIC8qIEludmVydCBQSU8gYWRkcmVzcyBwYXJpdHkgICAgKi8KICNkZWZpbmUgIFBTWUNIT19QQ0lESUFHX0xQQkFDSwkgMHgwMDAwMDAwMDAwMDAwMDAxVUwgLyogRW5hYmxlIGxvb3BiYWNrIG1vZGUgICAgICAgICAqLwogCi1zdGF0aWMgdm9pZCBwc3ljaG9fY29udHJvbGxlcl9od2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnApCitzdGF0aWMgdm9pZCBwc3ljaG9fY29udHJvbGxlcl9od2luaXQoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQogewogCXU2NCB0bXA7CiAKLQlwc3ljaG9fd3JpdGUocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0lSUV9SRVRSWSwgNSk7CisJcHN5Y2hvX3dyaXRlKHBibS0+Y29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX0lSUV9SRVRSWSwgNSk7CiAKIAkvKiBFbmFibGUgYXJiaXRlciBmb3IgYWxsIFBDSSBzbG90cy4gKi8KLQl0bXAgPSBwc3ljaG9fcmVhZChwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBQU1lDSE9fUENJQV9DVFJMKTsKKwl0bXAgPSBwc3ljaG9fcmVhZChwYm0tPmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19QQ0lBX0NUUkwpOwogCXRtcCB8PSBQU1lDSE9fUENJQ1RSTF9BRU47Ci0JcHN5Y2hvX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19QQ0lBX0NUUkwsIHRtcCk7CisJcHN5Y2hvX3dyaXRlKHBibS0+Y29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX1BDSUFfQ1RSTCwgdG1wKTsKIAotCXRtcCA9IHBzeWNob19yZWFkKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19QQ0lCX0NUUkwpOworCXRtcCA9IHBzeWNob19yZWFkKHBibS0+Y29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX1BDSUJfQ1RSTCk7CiAJdG1wIHw9IFBTWUNIT19QQ0lDVFJMX0FFTjsKLQlwc3ljaG9fd3JpdGUocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX1BDSUJfQ1RSTCwgdG1wKTsKKwlwc3ljaG9fd3JpdGUocGJtLT5jb250cm9sbGVyX3JlZ3MgKyBQU1lDSE9fUENJQl9DVFJMLCB0bXApOwogCiAJLyogRGlzYWJsZSBETUEgd3JpdGUgLyBQSU8gcmVhZCBzeW5jaHJvbml6YXRpb24gb24KIAkgKiBib3RoIFBDSSBidXMgc2VnbWVudHMuCiAJICogWyBVMlAgRXJyYXR1bSAxMjQzNzcwLCBTVFAyMjIzQkdBIGRhdGEgc2hlZXQgXQogCSAqLwotCXRtcCA9IHBzeWNob19yZWFkKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19QQ0lBX0RJQUcpOworCXRtcCA9IHBzeWNob19yZWFkKHBibS0+Y29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX1BDSUFfRElBRyk7CiAJdG1wIHw9IFBTWUNIT19QQ0lESUFHX0REV1NZTkM7Ci0JcHN5Y2hvX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19QQ0lBX0RJQUcsIHRtcCk7CisJcHN5Y2hvX3dyaXRlKHBibS0+Y29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX1BDSUFfRElBRywgdG1wKTsKIAotCXRtcCA9IHBzeWNob19yZWFkKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19QQ0lCX0RJQUcpOworCXRtcCA9IHBzeWNob19yZWFkKHBibS0+Y29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX1BDSUJfRElBRyk7CiAJdG1wIHw9IFBTWUNIT19QQ0lESUFHX0REV1NZTkM7Ci0JcHN5Y2hvX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFBTWUNIT19QQ0lCX0RJQUcsIHRtcCk7CisJcHN5Y2hvX3dyaXRlKHBibS0+Y29udHJvbGxlcl9yZWdzICsgUFNZQ0hPX1BDSUJfRElBRywgdG1wKTsKIH0KIAotc3RhdGljIHZvaWQgcHN5Y2hvX3BibV9zdHJidWZfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwKLQkJCQkgICBzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCitzdGF0aWMgdm9pZCBwc3ljaG9fcGJtX3N0cmJ1Zl9pbml0KHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKIAkJCQkgICBpbnQgaXNfcGJtX2EpCiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gcGJtLT5jb250cm9sbGVyX3JlZ3M7CkBAIC0xMDg4LDcgKzk2MSw2IEBACiBzdGF0aWMgdm9pZCBwc3ljaG9fcGJtX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnAsCiAJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpkcCwgaW50IGlzX3BibV9hKQogewotCXVuc2lnbmVkIGludCAqYnVzcmFuZ2U7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwogCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKIApAQCAtMTA5Nyw2ICs5NjksMTUgQEAKIAllbHNlCiAJCXBibSA9ICZwLT5wYm1fQjsKIAorCXBibS0+bmV4dCA9IHBjaV9wYm1fcm9vdDsKKwlwY2lfcGJtX3Jvb3QgPSBwYm07CisKKwlwYm0tPnNjYW5fYnVzID0gcHN5Y2hvX3NjYW5fYnVzOworCXBibS0+cGNpX29wcyA9ICZzdW40dV9wY2lfb3BzOworCXBibS0+Y29uZmlnX3NwYWNlX3JlZ19iaXRzID0gODsKKworCXBibS0+aW5kZXggPSBwY2lfbnVtX3BibXMrKzsKKwogCXBibS0+Y2hpcF90eXBlID0gUEJNX0NISVBfVFlQRV9QU1lDSE87CiAJcGJtLT5jaGlwX3ZlcnNpb24gPSAwOwogCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAidmVyc2lvbiMiLCBOVUxMKTsKQEAgLTExMTcsMTIgKzk5OCw5IEBACiAKIAlwY2lfZGV0ZXJtaW5lX21lbV9pb19zcGFjZShwYm0pOwogCi0JcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJidXMtcmFuZ2UiLCBOVUxMKTsKLQlidXNyYW5nZSA9IHByb3AtPnZhbHVlOwotCXBibS0+cGNpX2ZpcnN0X2J1c25vID0gYnVzcmFuZ2VbMF07Ci0JcGJtLT5wY2lfbGFzdF9idXNubyA9IGJ1c3JhbmdlWzFdOworCXBjaV9nZXRfcGJtX3Byb3BzKHBibSk7CiAKLQlwc3ljaG9fcGJtX3N0cmJ1Zl9pbml0KHAsIHBibSwgaXNfcGJtX2EpOworCXBzeWNob19wYm1fc3RyYnVmX2luaXQocGJtLCBpc19wYm1fYSk7CiB9CiAKICNkZWZpbmUgUFNZQ0hPX0NPTkZJR1NQQUNFCTB4MDAxMDAwMDAwVUwKQEAgLTExMzEsNiArMTAwOSw3IEBACiB7CiAJc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnByX3JlZ3M7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnA7CisJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtOwogCXN0cnVjdCBpb21tdSAqaW9tbXU7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwogCXUzMiB1cGFfcG9ydGlkOwpAQCAtMTE0MSw3ICsxMDIwLDkgQEAKIAlpZiAocHJvcCkKIAkJdXBhX3BvcnRpZCA9ICoodTMyICopIHByb3AtPnZhbHVlOwogCi0JZm9yKHAgPSBwY2lfY29udHJvbGxlcl9yb290OyBwOyBwID0gcC0+bmV4dCkgeworCWZvciAocGJtID0gcGNpX3BibV9yb290OyBwYm07IHBibSA9IHBibS0+bmV4dCkgeworCQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCA9IHBibS0+cGFyZW50OworCiAJCWlmIChwLT5wYm1fQS5wb3J0aWQgPT0gdXBhX3BvcnRpZCkgewogCQkJaXNfcGJtX2EgPSAocC0+cGJtX0EucHJvbV9ub2RlID09IE5VTEwpOwogCQkJcHN5Y2hvX3BibV9pbml0KHAsIGRwLCBpc19wYm1fYSk7CkBAIC0xMTYxLDE0ICsxMDQyLDggQEAKIAl9CiAJcC0+cGJtX0EuaW9tbXUgPSBwLT5wYm1fQi5pb21tdSA9IGlvbW11OwogCi0JcC0+bmV4dCA9IHBjaV9jb250cm9sbGVyX3Jvb3Q7Ci0JcGNpX2NvbnRyb2xsZXJfcm9vdCA9IHA7Ci0KIAlwLT5wYm1fQS5wb3J0aWQgPSB1cGFfcG9ydGlkOwogCXAtPnBibV9CLnBvcnRpZCA9IHVwYV9wb3J0aWQ7Ci0JcC0+aW5kZXggPSBwY2lfbnVtX2NvbnRyb2xsZXJzKys7Ci0JcC0+c2Nhbl9idXMgPSBwc3ljaG9fc2Nhbl9idXM7Ci0JcC0+cGNpX29wcyA9ICZwc3ljaG9fb3BzOwogCiAJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKIAlwcl9yZWdzID0gcHJvcC0+dmFsdWU7CkBAIC0xMTg1LDkgKzEwNjAsOSBAQAogCSAqLwogCXBjaV9tZW1zcGFjZV9tYXNrID0gMHg3ZmZmZmZmZlVMOwogCi0JcHN5Y2hvX2NvbnRyb2xsZXJfaHdpbml0KHApOworCXBzeWNob19jb250cm9sbGVyX2h3aW5pdCgmcC0+cGJtX0EpOwogCi0JcHN5Y2hvX2lvbW11X2luaXQocCk7CisJcHN5Y2hvX2lvbW11X2luaXQoJnAtPnBibV9BKTsKIAogCWlzX3BibV9hID0gKChwcl9yZWdzWzBdLnBoeXNfYWRkciAmIDB4NjAwMCkgPT0gMHgyMDAwKTsKIAlwc3ljaG9fcGJtX2luaXQocCwgZHAsIGlzX3BibV9hKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NhYnJlLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zYWJyZS5jCmluZGV4IDM5Nzg2MmYuLjMyM2Q2YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NhYnJlLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc2FicmUuYwpAQCAtMTMsMTIgKzEzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxhc20vYXBiLmg+Ci0jaW5jbHVkZSA8YXNtL3BibS5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CiAKICNpbmNsdWRlICJwY2lfaW1wbC5oIgogI2luY2x1ZGUgImlvbW11X2NvbW1vbi5oIgpAQCAtMjA1LDMwMCArMjA1LDE1IEBACiAjZGVmaW5lIFNBQlJFX01FTVNQQUNFCQkweDEwMDAwMDAwMFVMCiAjZGVmaW5lIFNBQlJFX01FTVNQQUNFX1NJWkUJMHgwN2ZmZmZmZmZVTAogCi0vKiBVbHRyYVNwYXJjLUlJaSBQcm9ncmFtbWVyJ3MgTWFudWFsLCBwYWdlIDMyNSwgUENJCi0gKiBjb25maWd1cmF0aW9uIHNwYWNlIGFkZHJlc3MgZm9ybWF0OgotICogCi0gKiAgMzIgICAgICAgICAgICAgMjQgMjMgMTYgMTUgICAgMTEgMTAgICAgICAgOCA3ICAgMiAgMSAwCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHwwIDAgMCAwIDAgMCAwIDAgMXwgYnVzIHwgZGV2aWNlIHwgZnVuY3Rpb24gfCByZWcgfCAwIDAgfAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNkZWZpbmUgU0FCUkVfQ09ORklHX0JBU0UoUEJNKQlcCi0JKChQQk0pLT5jb25maWdfc3BhY2UgfCAoMVVMIDw8IDI0KSkKLSNkZWZpbmUgU0FCUkVfQ09ORklHX0VOQ09ERShCVVMsIERFVkZOLCBSRUcpCVwKLQkoKCh1bnNpZ25lZCBsb25nKShCVVMpICAgPDwgMTYpIHwJXAotCSAoKHVuc2lnbmVkIGxvbmcpKERFVkZOKSA8PCA4KSAgfAlcCi0JICgodW5zaWduZWQgbG9uZykoUkVHKSkpCi0KIHN0YXRpYyBpbnQgaHVtbWluZ2JpcmRfcDsKIHN0YXRpYyBzdHJ1Y3QgcGNpX2J1cyAqc2FicmVfcm9vdF9idXM7CiAKLXN0YXRpYyB2b2lkICpzYWJyZV9wY2lfY29uZmlnX21rYWRkcihzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCi0JCQkJICAgICB1bnNpZ25lZCBjaGFyIGJ1cywKLQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCQkgICAgIGludCB3aGVyZSkKLXsKLQlpZiAoIXBibSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuICh2b2lkICopCi0JCShTQUJSRV9DT05GSUdfQkFTRShwYm0pIHwKLQkJIFNBQlJFX0NPTkZJR19FTkNPREUoYnVzLCBkZXZmbiwgd2hlcmUpKTsKLX0KLQotc3RhdGljIGludCBzYWJyZV9vdXRfb2ZfcmFuZ2UodW5zaWduZWQgY2hhciBkZXZmbikKLXsKLQlpZiAoaHVtbWluZ2JpcmRfcCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gKCgoUENJX1NMT1QoZGV2Zm4pID09IDApICYmIChQQ0lfRlVOQyhkZXZmbikgPiAwKSkgfHwKLQkJKChQQ0lfU0xPVChkZXZmbikgPT0gMSkgJiYgKFBDSV9GVU5DKGRldmZuKSA+IDEpKSB8fAotCQkoUENJX1NMT1QoZGV2Zm4pID4gMSkpOwotfQotCi1zdGF0aWMgaW50IF9fc2FicmVfb3V0X29mX3JhbmdlKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKLQkJCQl1bnNpZ25lZCBjaGFyIGJ1cywKLQkJCQl1bnNpZ25lZCBjaGFyIGRldmZuKQotewotCWlmIChodW1taW5nYmlyZF9wKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAoKHBibS0+cGFyZW50ID09IDApIHx8Ci0JCSgocGJtID09ICZwYm0tPnBhcmVudC0+cGJtX0EpICYmCi0JCSAoYnVzID09IHBibS0+cGNpX2ZpcnN0X2J1c25vKSAmJgotCQkgUENJX1NMT1QoZGV2Zm4pID4gOCkpOwotfQotCi1zdGF0aWMgaW50IF9fc2FicmVfcmVhZF9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkJaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBidXNfZGV2LT5zeXNkYXRhOwotCXVuc2lnbmVkIGNoYXIgYnVzID0gYnVzX2Rldi0+bnVtYmVyOwotCXUzMiAqYWRkcjsKLQl1MTYgdG1wMTY7Ci0JdTggdG1wODsKLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJKnZhbHVlID0gMHhmZjsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqdmFsdWUgPSAweGZmZmY7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJKnZhbHVlID0gMHhmZmZmZmZmZjsKLQkJYnJlYWs7Ci0JfQotCi0JYWRkciA9IHNhYnJlX3BjaV9jb25maWdfbWthZGRyKHBibSwgYnVzLCBkZXZmbiwgd2hlcmUpOwotCWlmICghYWRkcikKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotCWlmIChfX3NhYnJlX291dF9vZl9yYW5nZShwYm0sIGJ1cywgZGV2Zm4pKQotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCi0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlwY2lfY29uZmlnX3JlYWQ4KCh1OCAqKSBhZGRyLCAmdG1wOCk7Ci0JCSp2YWx1ZSA9IHRtcDg7Ci0JCWJyZWFrOwotCi0JY2FzZSAyOgotCQlpZiAod2hlcmUgJiAweDAxKSB7Ci0JCQlwcmludGsoInBjaV9yZWFkX2NvbmZpZ193b3JkOiBtaXNhbGlnbmVkIHJlZyBbJXhdXG4iLAotCQkJICAgICAgIHdoZXJlKTsKLQkJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0JCX0KLQkJcGNpX2NvbmZpZ19yZWFkMTYoKHUxNiAqKSBhZGRyLCAmdG1wMTYpOwotCQkqdmFsdWUgPSB0bXAxNjsKLQkJYnJlYWs7Ci0KLQljYXNlIDQ6Ci0JCWlmICh3aGVyZSAmIDB4MDMpIHsKLQkJCXByaW50aygicGNpX3JlYWRfY29uZmlnX2R3b3JkOiBtaXNhbGlnbmVkIHJlZyBbJXhdXG4iLAotCQkJICAgICAgIHdoZXJlKTsKLQkJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0JCX0KLQkJcGNpX2NvbmZpZ19yZWFkMzIoYWRkciwgdmFsdWUpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IHNhYnJlX3JlYWRfcGNpX2NmZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkgICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbHVlKQotewotCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9IGJ1cy0+c3lzZGF0YTsKLQotCWlmIChidXMgPT0gcGJtLT5wY2lfYnVzICYmIGRldmZuID09IDB4MDApCi0JCXJldHVybiBwY2lfaG9zdF9icmlkZ2VfcmVhZF9wY2lfY2ZnKGJ1cywgZGV2Zm4sIHdoZXJlLAotCQkJCQkJICAgIHNpemUsIHZhbHVlKTsKLQotCWlmICghYnVzLT5udW1iZXIgJiYgc2FicmVfb3V0X29mX3JhbmdlKGRldmZuKSkgewotCQlzd2l0Y2ggKHNpemUpIHsKLQkJY2FzZSAxOgotCQkJKnZhbHVlID0gMHhmZjsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQkqdmFsdWUgPSAweGZmZmY7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJKnZhbHVlID0gMHhmZmZmZmZmZjsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0JfQotCi0JaWYgKGJ1cy0+bnVtYmVyIHx8IFBDSV9TTE9UKGRldmZuKSkKLQkJcmV0dXJuIF9fc2FicmVfcmVhZF9wY2lfY2ZnKGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplLCB2YWx1ZSk7Ci0KLQkvKiBXaGVuIGFjY2Vzc2luZyBQQ0kgY29uZmlnIHNwYWNlIG9mIHRoZSBQQ0kgY29udHJvbGxlciBpdHNlbGYgKGJ1cwotCSAqIDAsIGRldmljZSBzbG90IDAsIGZ1bmN0aW9uIDApIHRoZXJlIGFyZSByZXN0cmljdGlvbnMuICBFYWNoCi0JICogcmVnaXN0ZXIgbXVzdCBiZSBhY2Nlc3NlZCBhcyBpdCdzIG5hdHVyYWwgc2l6ZS4gIFRodXMsIGZvciBleGFtcGxlCi0JICogdGhlIFZlbmRvciBJRCBtdXN0IGJlIGFjY2Vzc2VkIGFzIGEgMTYtYml0IHF1YW50aXR5LgotCSAqLwotCi0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlpZiAod2hlcmUgPCA4KSB7Ci0JCQl1MzIgdG1wMzI7Ci0JCQl1MTYgdG1wMTY7Ci0KLQkJCV9fc2FicmVfcmVhZF9wY2lfY2ZnKGJ1cywgZGV2Zm4sIHdoZXJlICYgfjEsIDIsICZ0bXAzMik7Ci0JCQl0bXAxNiA9ICh1MTYpIHRtcDMyOwotCQkJaWYgKHdoZXJlICYgMSkKLQkJCQkqdmFsdWUgPSB0bXAxNiA+PiA4OwotCQkJZWxzZQotCQkJCSp2YWx1ZSA9IHRtcDE2ICYgMHhmZjsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gX19zYWJyZV9yZWFkX3BjaV9jZmcoYnVzLCBkZXZmbiwgd2hlcmUsIDEsIHZhbHVlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDI6Ci0JCWlmICh3aGVyZSA8IDgpCi0JCQlyZXR1cm4gX19zYWJyZV9yZWFkX3BjaV9jZmcoYnVzLCBkZXZmbiwgd2hlcmUsIDIsIHZhbHVlKTsKLQkJZWxzZSB7Ci0JCQl1MzIgdG1wMzI7Ci0JCQl1OCB0bXA4OwotCi0JCQlfX3NhYnJlX3JlYWRfcGNpX2NmZyhidXMsIGRldmZuLCB3aGVyZSwgMSwgJnRtcDMyKTsKLQkJCXRtcDggPSAodTgpIHRtcDMyOwotCQkJKnZhbHVlID0gdG1wODsKLQkJCV9fc2FicmVfcmVhZF9wY2lfY2ZnKGJ1cywgZGV2Zm4sIHdoZXJlICsgMSwgMSwgJnRtcDMyKTsKLQkJCXRtcDggPSAodTgpIHRtcDMyOwotCQkJKnZhbHVlIHw9IHRtcDggPDwgODsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgNDogewotCQl1MzIgdG1wMzI7Ci0JCXUxNiB0bXAxNjsKLQotCQlzYWJyZV9yZWFkX3BjaV9jZmcoYnVzLCBkZXZmbiwgd2hlcmUsIDIsICZ0bXAzMik7Ci0JCXRtcDE2ID0gKHUxNikgdG1wMzI7Ci0JCSp2YWx1ZSA9IHRtcDE2OwotCQlzYWJyZV9yZWFkX3BjaV9jZmcoYnVzLCBkZXZmbiwgd2hlcmUgKyAyLCAyLCAmdG1wMzIpOwotCQl0bXAxNiA9ICh1MTYpIHRtcDMyOwotCQkqdmFsdWUgfD0gdG1wMTYgPDwgMTY7Ci0JCWJyZWFrOwotCX0KLQl9Ci0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBfX3NhYnJlX3dyaXRlX3BjaV9jZmcoc3RydWN0IHBjaV9idXMgKmJ1c19kZXYsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCQkgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQotewotCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9IGJ1c19kZXYtPnN5c2RhdGE7Ci0JdW5zaWduZWQgY2hhciBidXMgPSBidXNfZGV2LT5udW1iZXI7Ci0JdTMyICphZGRyOwotCi0JYWRkciA9IHNhYnJlX3BjaV9jb25maWdfbWthZGRyKHBibSwgYnVzLCBkZXZmbiwgd2hlcmUpOwotCWlmICghYWRkcikKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotCWlmIChfX3NhYnJlX291dF9vZl9yYW5nZShwYm0sIGJ1cywgZGV2Zm4pKQotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCi0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlwY2lfY29uZmlnX3dyaXRlOCgodTggKikgYWRkciwgdmFsdWUpOwotCQlicmVhazsKLQotCWNhc2UgMjoKLQkJaWYgKHdoZXJlICYgMHgwMSkgewotCQkJcHJpbnRrKCJwY2lfd3JpdGVfY29uZmlnX3dvcmQ6IG1pc2FsaWduZWQgcmVnIFsleF1cbiIsCi0JCQkgICAgICAgd2hlcmUpOwotCQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQkJfQotCQlwY2lfY29uZmlnX3dyaXRlMTYoKHUxNiAqKSBhZGRyLCB2YWx1ZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSA0OgotCQlpZiAod2hlcmUgJiAweDAzKSB7Ci0JCQlwcmludGsoInBjaV93cml0ZV9jb25maWdfZHdvcmQ6IG1pc2FsaWduZWQgcmVnIFsleF1cbiIsCi0JCQkgICAgICAgd2hlcmUpOwotCQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQkJfQotCQlwY2lfY29uZmlnX3dyaXRlMzIoYWRkciwgdmFsdWUpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IHNhYnJlX3dyaXRlX3BjaV9jZmcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCQkJICAgICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBidXMtPnN5c2RhdGE7Ci0KLQlpZiAoYnVzID09IHBibS0+cGNpX2J1cyAmJiBkZXZmbiA9PSAweDAwKQotCQlyZXR1cm4gcGNpX2hvc3RfYnJpZGdlX3dyaXRlX3BjaV9jZmcoYnVzLCBkZXZmbiwgd2hlcmUsCi0JCQkJCQkgICAgIHNpemUsIHZhbHVlKTsKLQotCWlmIChidXMtPm51bWJlcikKLQkJcmV0dXJuIF9fc2FicmVfd3JpdGVfcGNpX2NmZyhidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsdWUpOwotCi0JaWYgKHNhYnJlX291dF9vZl9yYW5nZShkZXZmbikpCi0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCWlmICh3aGVyZSA8IDgpIHsKLQkJCXUzMiB0bXAzMjsKLQkJCXUxNiB0bXAxNjsKLQotCQkJX19zYWJyZV9yZWFkX3BjaV9jZmcoYnVzLCBkZXZmbiwgd2hlcmUgJiB+MSwgMiwgJnRtcDMyKTsKLQkJCXRtcDE2ID0gKHUxNikgdG1wMzI7Ci0JCQlpZiAod2hlcmUgJiAxKSB7Ci0JCQkJdmFsdWUgJj0gMHgwMGZmOwotCQkJCXZhbHVlIHw9IHRtcDE2IDw8IDg7Ci0JCQl9IGVsc2UgewotCQkJCXZhbHVlICY9IDB4ZmYwMDsKLQkJCQl2YWx1ZSB8PSB0bXAxNjsKLQkJCX0KLQkJCXRtcDMyID0gKHUzMikgdG1wMTY7Ci0JCQlyZXR1cm4gX19zYWJyZV93cml0ZV9wY2lfY2ZnKGJ1cywgZGV2Zm4sIHdoZXJlICYgfjEsIDIsIHRtcDMyKTsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gX19zYWJyZV93cml0ZV9wY2lfY2ZnKGJ1cywgZGV2Zm4sIHdoZXJlLCAxLCB2YWx1ZSk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJaWYgKHdoZXJlIDwgOCkKLQkJCXJldHVybiBfX3NhYnJlX3dyaXRlX3BjaV9jZmcoYnVzLCBkZXZmbiwgd2hlcmUsIDIsIHZhbHVlKTsKLQkJZWxzZSB7Ci0JCQlfX3NhYnJlX3dyaXRlX3BjaV9jZmcoYnVzLCBkZXZmbiwgd2hlcmUsIDEsIHZhbHVlICYgMHhmZik7Ci0JCQlfX3NhYnJlX3dyaXRlX3BjaV9jZmcoYnVzLCBkZXZmbiwgd2hlcmUgKyAxLCAxLCB2YWx1ZSA+PiA4KTsKLQkJfQotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXNhYnJlX3dyaXRlX3BjaV9jZmcoYnVzLCBkZXZmbiwgd2hlcmUsIDIsIHZhbHVlICYgMHhmZmZmKTsKLQkJc2FicmVfd3JpdGVfcGNpX2NmZyhidXMsIGRldmZuLCB3aGVyZSArIDIsIDIsIHZhbHVlID4+IDE2KTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBzYWJyZV9vcHMgPSB7Ci0JLnJlYWQgPQkJc2FicmVfcmVhZF9wY2lfY2ZnLAotCS53cml0ZSA9CXNhYnJlX3dyaXRlX3BjaV9jZmcsCi19OwotCiAvKiBTQUJSRSBlcnJvciBoYW5kbGluZyBzdXBwb3J0LiAqLwotc3RhdGljIHZvaWQgc2FicmVfY2hlY2tfaW9tbXVfZXJyb3Ioc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnAsCitzdGF0aWMgdm9pZCBzYWJyZV9jaGVja19pb21tdV9lcnJvcihzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWZzciwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBhZmFyKQogewotCXN0cnVjdCBpb21tdSAqaW9tbXUgPSBwLT5wYm1fQS5pb21tdTsKKwlzdHJ1Y3QgaW9tbXUgKmlvbW11ID0gcGJtLT5pb21tdTsKIAl1bnNpZ25lZCBsb25nIGlvbW11X3RhZ1sxNl07CiAJdW5zaWduZWQgbG9uZyBpb21tdV9kYXRhWzE2XTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTI2LDggKzI0MSw4IEBACiAJCQl0eXBlX3N0cmluZyA9ICJVbmtub3duIjsKIAkJCWJyZWFrOwogCQl9OwotCQlwcmludGsoIlNBQlJFJWQ6IElPTU1VIEVycm9yLCB0eXBlWyVzXVxuIiwKLQkJICAgICAgIHAtPmluZGV4LCB0eXBlX3N0cmluZyk7CisJCXByaW50aygiJXM6IElPTU1VIEVycm9yLCB0eXBlWyVzXVxuIiwKKwkJICAgICAgIHBibS0+bmFtZSwgdHlwZV9zdHJpbmcpOwogCiAJCS8qIEVudGVyIGRpYWdub3N0aWMgbW9kZSBhbmQgcHJvYmUgZm9yIGVycm9yJ2QKIAkJICogZW50cmllcyBpbiB0aGUgSU9UTEIuCkBAIC01MzYsNyArMjUxLDcgQEAKIAkJc2FicmVfd3JpdGUoaW9tbXUtPmlvbW11X2NvbnRyb2wsCiAJCQkgICAgKGNvbnRyb2wgfCBTQUJSRV9JT01NVUNUUkxfREVOQUIpKTsKIAkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgYmFzZSA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVnczsKKwkJCXVuc2lnbmVkIGxvbmcgYmFzZSA9IHBibS0+Y29udHJvbGxlcl9yZWdzOwogCiAJCQlpb21tdV90YWdbaV0gPQogCQkJCXNhYnJlX3JlYWQoYmFzZSArIFNBQlJFX0lPTU1VX1RBRyArIChpICogOFVMKSk7CkBAIC01NjYsMTMgKzI4MSwxMyBAQAogCQkJCXR5cGVfc3RyaW5nID0gIlVua25vd24iOwogCQkJCWJyZWFrOwogCQkJfTsKLQkJCXByaW50aygiU0FCUkUlZDogSU9NTVUgVEFHKCVkKVtSQVcoJTAxNmx4KWVycm9yKCVzKXdyKCVkKXN6KCVkSyl2cGcoJTA4bHgpXVxuIiwKLQkJCSAgICAgICBwLT5pbmRleCwgaSwgdGFnLCB0eXBlX3N0cmluZywKKwkJCXByaW50aygiJXM6IElPTU1VIFRBRyglZClbUkFXKCUwMTZseCllcnJvciglcyl3ciglZClzeiglZEspdnBnKCUwOGx4KV1cbiIsCisJCQkgICAgICAgcGJtLT5uYW1lLCBpLCB0YWcsIHR5cGVfc3RyaW5nLAogCQkJICAgICAgICgodGFnICYgU0FCUkVfSU9NTVVUQUdfV1JJVEUpID8gMSA6IDApLAogCQkJICAgICAgICgodGFnICYgU0FCUkVfSU9NTVVUQUdfU0laRSkgPyA2NCA6IDgpLAogCQkJICAgICAgICgodGFnICYgU0FCUkVfSU9NTVVUQUdfVlBOKSA8PCBJT01NVV9QQUdFX1NISUZUKSk7Ci0JCQlwcmludGsoIlNBQlJFJWQ6IElPTU1VIERBVEEoJWQpW1JBVyglMDE2bHgpdmFsaWQoJWQpdXNlZCglZCljYWNoZSglZClwcGcoJTAxNmx4KVxuIiwKLQkJCSAgICAgICBwLT5pbmRleCwgaSwgZGF0YSwKKwkJCXByaW50aygiJXM6IElPTU1VIERBVEEoJWQpW1JBVyglMDE2bHgpdmFsaWQoJWQpdXNlZCglZCljYWNoZSglZClwcGcoJTAxNmx4KVxuIiwKKwkJCSAgICAgICBwYm0tPm5hbWUsIGksIGRhdGEsCiAJCQkgICAgICAgKChkYXRhICYgU0FCUkVfSU9NTVVEQVRBX1ZBTElEKSA/IDEgOiAwKSwKIAkJCSAgICAgICAoKGRhdGEgJiBTQUJSRV9JT01NVURBVEFfVVNFRCkgPyAxIDogMCksCiAJCQkgICAgICAgKChkYXRhICYgU0FCUkVfSU9NTVVEQVRBX0NBQ0hFKSA/IDEgOiAwKSwKQEAgLTU4NCw5ICsyOTksOSBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2FicmVfdWVfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnAgPSBkZXZfaWQ7Ci0JdW5zaWduZWQgbG9uZyBhZnNyX3JlZyA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX1VFX0FGU1I7Ci0JdW5zaWduZWQgbG9uZyBhZmFyX3JlZyA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX1VFQ0VfQUZBUjsKKwlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBhZnNyX3JlZyA9IHBibS0+Y29udHJvbGxlcl9yZWdzICsgU0FCUkVfVUVfQUZTUjsKKwl1bnNpZ25lZCBsb25nIGFmYXJfcmVnID0gcGJtLT5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9VRUNFX0FGQVI7CiAJdW5zaWduZWQgbG9uZyBhZnNyLCBhZmFyLCBlcnJvcl9iaXRzOwogCWludCByZXBvcnRlZDsKIApAQCAtNjA0LDIxICszMTksMjEgQEAKIAlzYWJyZV93cml0ZShhZnNyX3JlZywgZXJyb3JfYml0cyk7CiAKIAkvKiBMb2cgdGhlIGVycm9yLiAqLwotCXByaW50aygiU0FCUkUlZDogVW5jb3JyZWN0YWJsZSBFcnJvciwgcHJpbWFyeSBlcnJvciB0eXBlWyVzJXNdXG4iLAotCSAgICAgICBwLT5pbmRleCwKKwlwcmludGsoIiVzOiBVbmNvcnJlY3RhYmxlIEVycm9yLCBwcmltYXJ5IGVycm9yIHR5cGVbJXMlc11cbiIsCisJICAgICAgIHBibS0+bmFtZSwKIAkgICAgICAgKChlcnJvcl9iaXRzICYgU0FCUkVfVUVBRlNSX1BEUkQpID8KIAkJIkRNQSBSZWFkIiA6CiAJCSgoZXJyb3JfYml0cyAmIFNBQlJFX1VFQUZTUl9QRFdSKSA/CiAJCSAiRE1BIFdyaXRlIiA6ICI/Pz8iKSksCiAJICAgICAgICgoZXJyb3JfYml0cyAmIFNBQlJFX1VFQUZTUl9QRFRFKSA/CiAJCSI6VHJhbnNsYXRpb24gRXJyb3IiIDogIiIpKTsKLQlwcmludGsoIlNBQlJFJWQ6IGJ5dGVtYXNrWyUwNGx4XSBkd29yZF9vZmZzZXRbJWx4XSB3YXNfYmxvY2soJWQpXG4iLAotCSAgICAgICBwLT5pbmRleCwKKwlwcmludGsoIiVzOiBieXRlbWFza1slMDRseF0gZHdvcmRfb2Zmc2V0WyVseF0gd2FzX2Jsb2NrKCVkKVxuIiwKKwkgICAgICAgcGJtLT5uYW1lLAogCSAgICAgICAoYWZzciAmIFNBQlJFX1VFQUZTUl9CTVNLKSA+PiAzMlVMLAogCSAgICAgICAoYWZzciAmIFNBQlJFX1VFQUZTUl9PRkYpID4+IDI5VUwsCiAJICAgICAgICgoYWZzciAmIFNBQlJFX1VFQUZTUl9CTEspID8gMSA6IDApKTsKLQlwcmludGsoIlNBQlJFJWQ6IFVFIEFGQVIgWyUwMTZseF1cbiIsIHAtPmluZGV4LCBhZmFyKTsKLQlwcmludGsoIlNBQlJFJWQ6IFVFIFNlY29uZGFyeSBlcnJvcnMgWyIsIHAtPmluZGV4KTsKKwlwcmludGsoIiVzOiBVRSBBRkFSIFslMDE2bHhdXG4iLCBwYm0tPm5hbWUsIGFmYXIpOworCXByaW50aygiJXM6IFVFIFNlY29uZGFyeSBlcnJvcnMgWyIsIHBibS0+bmFtZSk7CiAJcmVwb3J0ZWQgPSAwOwogCWlmIChhZnNyICYgU0FCUkVfVUVBRlNSX1NEUkQpIHsKIAkJcmVwb3J0ZWQrKzsKQEAgLTYzNywxNiArMzUyLDE2IEBACiAJcHJpbnRrKCJdXG4iKTsKIAogCS8qIEludGVycm9nYXRlIElPTU1VIGZvciBlcnJvciBzdGF0dXMuICovCi0Jc2FicmVfY2hlY2tfaW9tbXVfZXJyb3IocCwgYWZzciwgYWZhcik7CisJc2FicmVfY2hlY2tfaW9tbXVfZXJyb3IocGJtLCBhZnNyLCBhZmFyKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHNhYnJlX2NlX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwID0gZGV2X2lkOwotCXVuc2lnbmVkIGxvbmcgYWZzcl9yZWcgPSBwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9DRV9BRlNSOwotCXVuc2lnbmVkIGxvbmcgYWZhcl9yZWcgPSBwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9VRUNFX0FGQVI7CisJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gZGV2X2lkOworCXVuc2lnbmVkIGxvbmcgYWZzcl9yZWcgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0NFX0FGU1I7CisJdW5zaWduZWQgbG9uZyBhZmFyX3JlZyA9IHBibS0+Y29udHJvbGxlcl9yZWdzICsgU0FCUkVfVUVDRV9BRkFSOwogCXVuc2lnbmVkIGxvbmcgYWZzciwgYWZhciwgZXJyb3JfYml0czsKIAlpbnQgcmVwb3J0ZWQ7CiAKQEAgLTY2Myw4ICszNzgsOCBAQAogCXNhYnJlX3dyaXRlKGFmc3JfcmVnLCBlcnJvcl9iaXRzKTsKIAogCS8qIExvZyB0aGUgZXJyb3IuICovCi0JcHJpbnRrKCJTQUJSRSVkOiBDb3JyZWN0YWJsZSBFcnJvciwgcHJpbWFyeSBlcnJvciB0eXBlWyVzXVxuIiwKLQkgICAgICAgcC0+aW5kZXgsCisJcHJpbnRrKCIlczogQ29ycmVjdGFibGUgRXJyb3IsIHByaW1hcnkgZXJyb3IgdHlwZVslc11cbiIsCisJICAgICAgIHBibS0+bmFtZSwKIAkgICAgICAgKChlcnJvcl9iaXRzICYgU0FCUkVfQ0VBRlNSX1BEUkQpID8KIAkJIkRNQSBSZWFkIiA6CiAJCSgoZXJyb3JfYml0cyAmIFNBQlJFX0NFQUZTUl9QRFdSKSA/CkBAIC02NzMsMTUgKzM4OCwxNSBAQAogCS8qIFhYWCBVc2Ugc3luZHJvbWUgYW5kIGFmYXIgdG8gcHJpbnQgb3V0IG1vZHVsZSBzdHJpbmcganVzdCBsaWtlCiAJICogWFhYIFVEQiBDRSB0cmFwIGhhbmRsZXIgZG9lcy4uLiAtRGF2ZU0KIAkgKi8KLQlwcmludGsoIlNBQlJFJWQ6IHN5bmRyb21lWyUwMmx4XSBieXRlbWFza1slMDRseF0gZHdvcmRfb2Zmc2V0WyVseF0gIgorCXByaW50aygiJXM6IHN5bmRyb21lWyUwMmx4XSBieXRlbWFza1slMDRseF0gZHdvcmRfb2Zmc2V0WyVseF0gIgogCSAgICAgICAid2FzX2Jsb2NrKCVkKVxuIiwKLQkgICAgICAgcC0+aW5kZXgsCisJICAgICAgIHBibS0+bmFtZSwKIAkgICAgICAgKGFmc3IgJiBTQUJSRV9DRUFGU1JfRVNZTkQpID4+IDQ4VUwsCiAJICAgICAgIChhZnNyICYgU0FCUkVfQ0VBRlNSX0JNU0spID4+IDMyVUwsCiAJICAgICAgIChhZnNyICYgU0FCUkVfQ0VBRlNSX09GRikgPj4gMjlVTCwKIAkgICAgICAgKChhZnNyICYgU0FCUkVfQ0VBRlNSX0JMSykgPyAxIDogMCkpOwotCXByaW50aygiU0FCUkUlZDogQ0UgQUZBUiBbJTAxNmx4XVxuIiwgcC0+aW5kZXgsIGFmYXIpOwotCXByaW50aygiU0FCUkUlZDogQ0UgU2Vjb25kYXJ5IGVycm9ycyBbIiwgcC0+aW5kZXgpOworCXByaW50aygiJXM6IENFIEFGQVIgWyUwMTZseF1cbiIsIHBibS0+bmFtZSwgYWZhcik7CisJcHJpbnRrKCIlczogQ0UgU2Vjb25kYXJ5IGVycm9ycyBbIiwgcGJtLT5uYW1lKTsKIAlyZXBvcnRlZCA9IDA7CiAJaWYgKGFmc3IgJiBTQUJSRV9DRUFGU1JfU0RSRCkgewogCQlyZXBvcnRlZCsrOwpAQCAtNjk4LDEzICs0MTMsMTMgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBzYWJyZV9wY2llcnJfaW50cl9vdGhlcihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBzYWJyZV9wY2llcnJfaW50cl9vdGhlcihzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCiB7CiAJdW5zaWduZWQgbG9uZyBjc3JfcmVnLCBjc3IsIGNzcl9lcnJvcl9iaXRzOwogCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwogCXUxNiBzdGF0OwogCi0JY3NyX3JlZyA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX1BDSUNUUkw7CisJY3NyX3JlZyA9IHBibS0+Y29udHJvbGxlcl9yZWdzICsgU0FCUkVfUENJQ1RSTDsKIAljc3IgPSBzYWJyZV9yZWFkKGNzcl9yZWcpOwogCWNzcl9lcnJvcl9iaXRzID0KIAkJY3NyICYgU0FCUkVfUENJQ1RSTF9TRVJSOwpAQCAtNzE0LDggKzQyOSw4IEBACiAKIAkJLyogTG9nICdlbS4gICovCiAJCWlmIChjc3JfZXJyb3JfYml0cyAmIFNBQlJFX1BDSUNUUkxfU0VSUikKLQkJCXByaW50aygiU0FCUkUlZDogUENJIFNFUlIgc2lnbmFsIGFzc2VydGVkLlxuIiwKLQkJCSAgICAgICBwLT5pbmRleCk7CisJCQlwcmludGsoIiVzOiBQQ0kgU0VSUiBzaWduYWwgYXNzZXJ0ZWQuXG4iLAorCQkJICAgICAgIHBibS0+bmFtZSk7CiAJCXJldCA9IElSUV9IQU5ETEVEOwogCX0KIAlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoc2FicmVfcm9vdF9idXMsIDAsCkBAIC03MjUsOCArNDQwLDggQEAKIAkJICAgIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCB8CiAJCSAgICBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQgfAogCQkgICAgUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SKSkgewotCQlwcmludGsoIlNBQlJFJWQ6IFBDSSBidXMgZXJyb3IsIFBDSV9TVEFUVVNbJTA0eF1cbiIsCi0JCSAgICAgICBwLT5pbmRleCwgc3RhdCk7CisJCXByaW50aygiJXM6IFBDSSBidXMgZXJyb3IsIFBDSV9TVEFUVVNbJTA0eF1cbiIsCisJCSAgICAgICBwYm0tPm5hbWUsIHN0YXQpOwogCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHNhYnJlX3Jvb3RfYnVzLCAwLAogCQkJCQkgIFBDSV9TVEFUVVMsIDB4ZmZmZik7CiAJCXJldCA9IElSUV9IQU5ETEVEOwpAQCAtNzM2LDEzICs0NTEsMTMgQEAKIAogc3RhdGljIGlycXJldHVybl90IHNhYnJlX3BjaWVycl9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCA9IGRldl9pZDsKKwlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBkZXZfaWQ7CiAJdW5zaWduZWQgbG9uZyBhZnNyX3JlZywgYWZhcl9yZWc7CiAJdW5zaWduZWQgbG9uZyBhZnNyLCBhZmFyLCBlcnJvcl9iaXRzOwogCWludCByZXBvcnRlZDsKIAotCWFmc3JfcmVnID0gcC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgU0FCUkVfUElPQUZTUjsKLQlhZmFyX3JlZyA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX1BJT0FGQVI7CisJYWZzcl9yZWcgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX1BJT0FGU1I7CisJYWZhcl9yZWcgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX1BJT0FGQVI7CiAKIAkvKiBMYXRjaCBlcnJvciBzdGF0dXMuICovCiAJYWZhciA9IHNhYnJlX3JlYWQoYWZhcl9yZWcpOwpAQCAtNzU1LDEyICs0NzAsMTIgQEAKIAkJIFNBQlJFX1BJT0FGU1JfU01BIHwgU0FCUkVfUElPQUZTUl9TVEEgfAogCQkgU0FCUkVfUElPQUZTUl9TUlRSWSB8IFNBQlJFX1BJT0FGU1JfU1BFUlIpOwogCWlmICghZXJyb3JfYml0cykKLQkJcmV0dXJuIHNhYnJlX3BjaWVycl9pbnRyX290aGVyKHApOworCQlyZXR1cm4gc2FicmVfcGNpZXJyX2ludHJfb3RoZXIocGJtKTsKIAlzYWJyZV93cml0ZShhZnNyX3JlZywgZXJyb3JfYml0cyk7CiAKIAkvKiBMb2cgdGhlIGVycm9yLiAqLwotCXByaW50aygiU0FCUkUlZDogUENJIEVycm9yLCBwcmltYXJ5IGVycm9yIHR5cGVbJXNdXG4iLAotCSAgICAgICBwLT5pbmRleCwKKwlwcmludGsoIiVzOiBQQ0kgRXJyb3IsIHByaW1hcnkgZXJyb3IgdHlwZVslc11cbiIsCisJICAgICAgIHBibS0+bmFtZSwKIAkgICAgICAgKCgoZXJyb3JfYml0cyAmIFNBQlJFX1BJT0FGU1JfUE1BKSA/CiAJCSAiTWFzdGVyIEFib3J0IiA6CiAJCSAoKGVycm9yX2JpdHMgJiBTQUJSRV9QSU9BRlNSX1BUQSkgPwpAQCAtNzY5LDEyICs0ODQsMTIgQEAKIAkJICAgIkV4Y2Vzc2l2ZSBSZXRyaWVzIiA6CiAJCSAgICgoZXJyb3JfYml0cyAmIFNBQlJFX1BJT0FGU1JfUFBFUlIpID8KIAkJICAgICJQYXJpdHkgRXJyb3IiIDogIj8/PyIpKSkpKSk7Ci0JcHJpbnRrKCJTQUJSRSVkOiBieXRlbWFza1slMDRseF0gd2FzX2Jsb2NrKCVkKVxuIiwKLQkgICAgICAgcC0+aW5kZXgsCisJcHJpbnRrKCIlczogYnl0ZW1hc2tbJTA0bHhdIHdhc19ibG9jayglZClcbiIsCisJICAgICAgIHBibS0+bmFtZSwKIAkgICAgICAgKGFmc3IgJiBTQUJSRV9QSU9BRlNSX0JNU0spID4+IDMyVUwsCiAJICAgICAgIChhZnNyICYgU0FCUkVfUElPQUZTUl9CTEspID8gMSA6IDApOwotCXByaW50aygiU0FCUkUlZDogUENJIEFGQVIgWyUwMTZseF1cbiIsIHAtPmluZGV4LCBhZmFyKTsKLQlwcmludGsoIlNBQlJFJWQ6IFBDSSBTZWNvbmRhcnkgZXJyb3JzIFsiLCBwLT5pbmRleCk7CisJcHJpbnRrKCIlczogUENJIEFGQVIgWyUwMTZseF1cbiIsIHBibS0+bmFtZSwgYWZhcik7CisJcHJpbnRrKCIlczogUENJIFNlY29uZGFyeSBlcnJvcnMgWyIsIHBibS0+bmFtZSk7CiAJcmVwb3J0ZWQgPSAwOwogCWlmIChhZnNyICYgU0FCUkVfUElPQUZTUl9TTUEpIHsKIAkJcmVwb3J0ZWQrKzsKQEAgLTgwNiwxMSArNTIxLDExIEBACiAJICogYSBidWcgaW4gdGhlIElPTU1VIHN1cHBvcnQgY29kZSBvciBhIFBDSSBkZXZpY2UgZHJpdmVyLgogCSAqLwogCWlmIChlcnJvcl9iaXRzICYgKFNBQlJFX1BJT0FGU1JfUFRBIHwgU0FCUkVfUElPQUZTUl9TVEEpKSB7Ci0JCXNhYnJlX2NoZWNrX2lvbW11X2Vycm9yKHAsIGFmc3IsIGFmYXIpOwotCQlwY2lfc2Nhbl9mb3JfdGFyZ2V0X2Fib3J0KHAsICZwLT5wYm1fQSwgcC0+cGJtX0EucGNpX2J1cyk7CisJCXNhYnJlX2NoZWNrX2lvbW11X2Vycm9yKHBibSwgYWZzciwgYWZhcik7CisJCXBjaV9zY2FuX2Zvcl90YXJnZXRfYWJvcnQocGJtLCBwYm0tPnBjaV9idXMpOwogCX0KIAlpZiAoZXJyb3JfYml0cyAmIChTQUJSRV9QSU9BRlNSX1BNQSB8IFNBQlJFX1BJT0FGU1JfU01BKSkKLQkJcGNpX3NjYW5fZm9yX21hc3Rlcl9hYm9ydChwLCAmcC0+cGJtX0EsIHAtPnBibV9BLnBjaV9idXMpOworCQlwY2lfc2Nhbl9mb3JfbWFzdGVyX2Fib3J0KHBibSwgcGJtLT5wY2lfYnVzKTsKIAogCS8qIEZvciBleGNlc3NpdmUgcmV0cmllcywgU0FCUkUvUEJNIHdpbGwgYWJvcnQgdGhlIGRldmljZQogCSAqIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gc3BlY2lmaWNhbGx5IGNoZWNrIGZvciBleGNlc3NpdmUKQEAgLTgyMCwxOCArNTM1LDE4IEBACiAJICovCiAKIAlpZiAoZXJyb3JfYml0cyAmIChTQUJSRV9QSU9BRlNSX1BQRVJSIHwgU0FCUkVfUElPQUZTUl9TUEVSUikpCi0JCXBjaV9zY2FuX2Zvcl9wYXJpdHlfZXJyb3IocCwgJnAtPnBibV9BLCBwLT5wYm1fQS5wY2lfYnVzKTsKKwkJcGNpX3NjYW5fZm9yX3Bhcml0eV9lcnJvcihwYm0sIHBibS0+cGNpX2J1cyk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNhYnJlX3JlZ2lzdGVyX2Vycm9yX2hhbmRsZXJzKHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwKQorc3RhdGljIHZvaWQgc2FicmVfcmVnaXN0ZXJfZXJyb3JfaGFuZGxlcnMoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQogewotCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9ICZwLT5wYm1fQTsgLyogYXJiaXRyYXJ5ICovCiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IHBibS0+cHJvbV9ub2RlOwogCXN0cnVjdCBvZl9kZXZpY2UgKm9wOwogCXVuc2lnbmVkIGxvbmcgYmFzZSA9IHBibS0+Y29udHJvbGxlcl9yZWdzOwogCXU2NCB0bXA7CisJaW50IGVycjsKIAogCWlmIChwYm0tPmNoaXBfdHlwZSA9PSBQQk1fQ0hJUF9UWVBFX1NBQlJFKQogCQlkcCA9IGRwLT5wYXJlbnQ7CkBAIC04NTgsMjIgKzU3MywzMSBAQAogCQkgICAgIFNBQlJFX1VFQUZTUl9TRFJEIHwgU0FCUkVfVUVBRlNSX1NEV1IgfAogCQkgICAgIFNBQlJFX1VFQUZTUl9TRFRFIHwgU0FCUkVfVUVBRlNSX1BEVEUpKTsKIAotCXJlcXVlc3RfaXJxKG9wLT5pcnFzWzFdLCBzYWJyZV91ZV9pbnRyLCBJUlFGX1NIQVJFRCwgIlNBQlJFIFVFIiwgcCk7CisJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbMV0sIHNhYnJlX3VlX2ludHIsIDAsICJTQUJSRV9VRSIsIHBibSk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkbid0IHJlZ2lzdGVyIFVFLCBlcnI9JWQuXG4iLAorCQkgICAgICAgcGJtLT5uYW1lLCBlcnIpOwogCiAJc2FicmVfd3JpdGUoYmFzZSArIFNBQlJFX0NFX0FGU1IsCiAJCSAgICAoU0FCUkVfQ0VBRlNSX1BEUkQgfCBTQUJSRV9DRUFGU1JfUERXUiB8CiAJCSAgICAgU0FCUkVfQ0VBRlNSX1NEUkQgfCBTQUJSRV9DRUFGU1JfU0RXUikpOwogCi0JcmVxdWVzdF9pcnEob3AtPmlycXNbMl0sIHNhYnJlX2NlX2ludHIsIElSUUZfU0hBUkVELCAiU0FCUkUgQ0UiLCBwKTsKLQlyZXF1ZXN0X2lycShvcC0+aXJxc1swXSwgc2FicmVfcGNpZXJyX2ludHIsIElSUUZfU0hBUkVELAotCQkgICAgIlNBQlJFIFBDSUVSUiIsIHApOworCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5pcnFzWzJdLCBzYWJyZV9jZV9pbnRyLCAwLCAiU0FCUkVfQ0UiLCBwYm0pOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDb3VsZG4ndCByZWdpc3RlciBDRSwgZXJyPSVkLlxuIiwKKwkJICAgICAgIHBibS0+bmFtZSwgZXJyKTsKKwllcnIgPSByZXF1ZXN0X2lycShvcC0+aXJxc1swXSwgc2FicmVfcGNpZXJyX2ludHIsIDAsCisJCQkgICJTQUJSRV9QQ0lFUlIiLCBwYm0pOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDb3VsZG4ndCByZWdpc3RlciBQQ0lFUlIsIGVycj0lZC5cbiIsCisJCSAgICAgICBwYm0tPm5hbWUsIGVycik7CiAKIAl0bXAgPSBzYWJyZV9yZWFkKGJhc2UgKyBTQUJSRV9QQ0lDVFJMKTsKIAl0bXAgfD0gU0FCUkVfUENJQ1RSTF9FUlJFTjsKIAlzYWJyZV93cml0ZShiYXNlICsgU0FCUkVfUENJQ1RSTCwgdG1wKTsKIH0KIAotc3RhdGljIHZvaWQgYXBiX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnAsIHN0cnVjdCBwY2lfYnVzICpzYWJyZV9idXMpCitzdGF0aWMgdm9pZCBhcGJfaW5pdChzdHJ1Y3QgcGNpX2J1cyAqc2FicmVfYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCkBAIC05MDksNyArNjMzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNhYnJlX3NjYW5fYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwKQorc3RhdGljIHZvaWQgc2FicmVfc2Nhbl9idXMoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQogewogCXN0YXRpYyBpbnQgb25jZTsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGJ1czsKQEAgLTkxOCw3ICs2NDIsNyBAQAogCSAqIGF0IDY2TWh6LCBidXQgdGhlIGZyb250IHNpZGUgb2YgQVBCIHJ1bnMgYXQgMzNNaHoKIAkgKiBmb3IgYm90aCBzZWdtZW50cy4KIAkgKi8KLQlwLT5wYm1fQS5pc182Nm1oel9jYXBhYmxlID0gMDsKKwlwYm0tPmlzXzY2bWh6X2NhcGFibGUgPSAwOwogCiAJLyogVGhpcyBkcml2ZXIgaGFzIG5vdCBiZWVuIHZlcmlmaWVkIHRvIGhhbmRsZQogCSAqIG11bHRpcGxlIFNBQlJFcyB5ZXQsIHNvIHRyYXAgdGhpcy4KQEAgLTkzMiw0MSArNjU2LDQxIEBACiAJfQogCW9uY2UrKzsKIAotCXBidXMgPSBwY2lfc2Nhbl9vbmVfcGJtKCZwLT5wYm1fQSk7CisJcGJ1cyA9IHBjaV9zY2FuX29uZV9wYm0ocGJtKTsKIAlpZiAoIXBidXMpCiAJCXJldHVybjsKIAogCXNhYnJlX3Jvb3RfYnVzID0gcGJ1czsKIAotCWFwYl9pbml0KHAsIHBidXMpOworCWFwYl9pbml0KHBidXMpOwogCi0Jc2FicmVfcmVnaXN0ZXJfZXJyb3JfaGFuZGxlcnMocCk7CisJc2FicmVfcmVnaXN0ZXJfZXJyb3JfaGFuZGxlcnMocGJtKTsKIH0KIAotc3RhdGljIHZvaWQgc2FicmVfaW9tbXVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwKK3N0YXRpYyB2b2lkIHNhYnJlX2lvbW11X2luaXQoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAogCQkJICAgICBpbnQgdHNic2l6ZSwgdW5zaWduZWQgbG9uZyBkdm1hX29mZnNldCwKIAkJCSAgICAgdTMyIGRtYV9tYXNrKQogewotCXN0cnVjdCBpb21tdSAqaW9tbXUgPSBwLT5wYm1fQS5pb21tdTsKKwlzdHJ1Y3QgaW9tbXUgKmlvbW11ID0gcGJtLT5pb21tdTsKIAl1bnNpZ25lZCBsb25nIGk7CiAJdTY0IGNvbnRyb2w7CiAKIAkvKiBSZWdpc3RlciBhZGRyZXNzZXMuICovCi0JaW9tbXUtPmlvbW11X2NvbnRyb2wgID0gcC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgU0FCUkVfSU9NTVVfQ09OVFJPTDsKLQlpb21tdS0+aW9tbXVfdHNiYmFzZSAgPSBwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9JT01NVV9UU0JCQVNFOwotCWlvbW11LT5pb21tdV9mbHVzaCAgICA9IHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0lPTU1VX0ZMVVNIOwotCWlvbW11LT53cml0ZV9jb21wbGV0ZV9yZWcgPSBwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9XUlNZTkM7CisJaW9tbXUtPmlvbW11X2NvbnRyb2wgID0gcGJtLT5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9JT01NVV9DT05UUk9MOworCWlvbW11LT5pb21tdV90c2JiYXNlICA9IHBibS0+Y29udHJvbGxlcl9yZWdzICsgU0FCUkVfSU9NTVVfVFNCQkFTRTsKKwlpb21tdS0+aW9tbXVfZmx1c2ggICAgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0lPTU1VX0ZMVVNIOworCWlvbW11LT53cml0ZV9jb21wbGV0ZV9yZWcgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX1dSU1lOQzsKIAkvKiBTYWJyZSdzIElPTU1VIGxhY2tzIGN0eCBmbHVzaGluZy4gKi8KIAlpb21tdS0+aW9tbXVfY3R4Zmx1c2ggPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogCS8qIEludmFsaWRhdGUgVExCIEVudHJpZXMuICovCi0JY29udHJvbCA9IHNhYnJlX3JlYWQocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgU0FCUkVfSU9NTVVfQ09OVFJPTCk7CisJY29udHJvbCA9IHNhYnJlX3JlYWQocGJtLT5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9JT01NVV9DT05UUk9MKTsKIAljb250cm9sIHw9IFNBQlJFX0lPTU1VQ1RSTF9ERU5BQjsKLQlzYWJyZV93cml0ZShwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9JT01NVV9DT05UUk9MLCBjb250cm9sKTsKKwlzYWJyZV93cml0ZShwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0lPTU1VX0NPTlRST0wsIGNvbnRyb2wpOwogCiAJZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlzYWJyZV93cml0ZShwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9JT01NVV9UQUcgKyAoaSAqIDhVTCksIDApOwotCQlzYWJyZV93cml0ZShwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9JT01NVV9EQVRBICsgKGkgKiA4VUwpLCAwKTsKKwkJc2FicmVfd3JpdGUocGJtLT5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9JT01NVV9UQUcgKyAoaSAqIDhVTCksIDApOworCQlzYWJyZV93cml0ZShwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0lPTU1VX0RBVEEgKyAoaSAqIDhVTCksIDApOwogCX0KIAogCS8qIExlYXZlIGRpYWcgbW9kZSBlbmFibGVkIGZvciBmdWxsLWZsdXNoaW5nIGRvbmUKQEAgLTk3NCwxMCArNjk4LDEwIEBACiAJICovCiAJcGNpX2lvbW11X3RhYmxlX2luaXQoaW9tbXUsIHRzYnNpemUgKiAxMDI0ICogOCwgZHZtYV9vZmZzZXQsIGRtYV9tYXNrKTsKIAotCXNhYnJlX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0lPTU1VX1RTQkJBU0UsCisJc2FicmVfd3JpdGUocGJtLT5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9JT01NVV9UU0JCQVNFLAogCQkgICAgX19wYShpb21tdS0+cGFnZV90YWJsZSkpOwogCi0JY29udHJvbCA9IHNhYnJlX3JlYWQocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgU0FCUkVfSU9NTVVfQ09OVFJPTCk7CisJY29udHJvbCA9IHNhYnJlX3JlYWQocGJtLT5jb250cm9sbGVyX3JlZ3MgKyBTQUJSRV9JT01NVV9DT05UUk9MKTsKIAljb250cm9sICY9IH4oU0FCUkVfSU9NTVVDVFJMX1RTQlNaIHwgU0FCUkVfSU9NTVVDVFJMX1RCV1NaKTsKIAljb250cm9sIHw9IFNBQlJFX0lPTU1VQ1RSTF9FTkFCOwogCXN3aXRjaCh0c2JzaXplKSB7CkBAIC05OTIsMjIgKzcxNiwyNCBAQAogCQlwcm9tX2hhbHQoKTsKIAkJYnJlYWs7CiAJfQotCXNhYnJlX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0lPTU1VX0NPTlRST0wsIGNvbnRyb2wpOworCXNhYnJlX3dyaXRlKHBibS0+Y29udHJvbGxlcl9yZWdzICsgU0FCUkVfSU9NTVVfQ09OVFJPTCwgY29udHJvbCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNhYnJlX3BibV9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQorc3RhdGljIHZvaWQgc2FicmVfcGJtX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnAsIHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwgc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKLQlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm07Ci0KLQlwYm0gPSAmcC0+cGJtX0E7CiAJcGJtLT5uYW1lID0gZHAtPmZ1bGxfbmFtZTsKIAlwcmludGsoIiVzOiBTQUJSRSBQQ0kgQnVzIE1vZHVsZVxuIiwgcGJtLT5uYW1lKTsKIAorCXBibS0+c2Nhbl9idXMgPSBzYWJyZV9zY2FuX2J1czsKKwlwYm0tPnBjaV9vcHMgPSAmc3VuNHVfcGNpX29wczsKKwlwYm0tPmNvbmZpZ19zcGFjZV9yZWdfYml0cyA9IDg7CisKKwlwYm0tPmluZGV4ID0gcGNpX251bV9wYm1zKys7CisKIAlwYm0tPmNoaXBfdHlwZSA9IFBCTV9DSElQX1RZUEVfU0FCUkU7CiAJcGJtLT5wYXJlbnQgPSBwOwogCXBibS0+cHJvbV9ub2RlID0gZHA7Ci0JcGJtLT5wY2lfZmlyc3RfYnVzbm8gPSBwLT5wY2lfZmlyc3RfYnVzbm87Ci0JcGJtLT5wY2lfbGFzdF9idXNubyA9IHAtPnBjaV9sYXN0X2J1c25vOworCXBjaV9nZXRfcGJtX3Byb3BzKHBibSk7CiAKIAlwY2lfZGV0ZXJtaW5lX21lbV9pb19zcGFjZShwYm0pOwogfQpAQCAtMTAxNiw5ICs3NDIsOSBAQAogewogCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpwcl9yZWdzOwogCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwOworCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKIAlzdHJ1Y3QgaW9tbXUgKmlvbW11OwogCWludCB0c2JzaXplOwotCWNvbnN0IHUzMiAqYnVzcmFuZ2U7CiAJY29uc3QgdTMyICp2ZG1hOwogCXUzMiB1cGFfcG9ydGlkLCBkbWFfbWFzazsKIAl1NjQgY2xlYXJfaXJxOwpAQCAtMTAzNiw5ICs3NjIsMTAgQEAKIAkJCS8qIE9mIGNvdXJzZSwgU3VuIGhhcyB0byBlbmNvZGUgdGhpbmdzIGEgdGhvdXNhbmQKIAkJCSAqIGRpZmZlcmVudCB3YXlzLCBpbmNvbnNpc3RlbnRseS4KIAkJCSAqLwotCQkJY3B1X2ZpbmRfYnlfaW5zdGFuY2UoMCwgJmRwLCBOVUxMKTsKLQkJCWlmICghc3RyY21wKGRwLT5uYW1lLCAiU1VOVyxVbHRyYVNQQVJDLUlJZSIpKQotCQkJCWh1bW1pbmdiaXJkX3AgPSAxOworCQkJZm9yX2VhY2hfbm9kZV9ieV90eXBlKGRwLCAiY3B1IikgeworCQkJCWlmICghc3RyY21wKGRwLT5uYW1lLCAiU1VOVyxVbHRyYVNQQVJDLUlJZSIpKQorCQkJCQlodW1taW5nYmlyZF9wID0gMTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMTA1MywxNyArNzgwLDE1IEBACiAJCXByb21fcHJpbnRmKCJTQUJSRTogRXJyb3IsIGttYWxsb2MocGNpX2lvbW11KSBmYWlsZWQuXG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQotCXAtPnBibV9BLmlvbW11ID0gaW9tbXU7CisJcGJtID0gJnAtPnBibV9BOworCXBibS0+aW9tbXUgPSBpb21tdTsKIAogCXVwYV9wb3J0aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJ1cGEtcG9ydGlkIiwgMHhmZik7CiAKLQlwLT5uZXh0ID0gcGNpX2NvbnRyb2xsZXJfcm9vdDsKLQlwY2lfY29udHJvbGxlcl9yb290ID0gcDsKKwlwYm0tPm5leHQgPSBwY2lfcGJtX3Jvb3Q7CisJcGNpX3BibV9yb290ID0gcGJtOwogCi0JcC0+cGJtX0EucG9ydGlkID0gdXBhX3BvcnRpZDsKLQlwLT5pbmRleCA9IHBjaV9udW1fY29udHJvbGxlcnMrKzsKLQlwLT5zY2FuX2J1cyA9IHNhYnJlX3NjYW5fYnVzOwotCXAtPnBjaV9vcHMgPSAmc2FicmVfb3BzOworCXBibS0+cG9ydGlkID0gdXBhX3BvcnRpZDsKIAogCS8qCiAJICogTWFwIGluIFNBQlJFIHJlZ2lzdGVyIHNldCBhbmQgcmVwb3J0IHRoZSBwcmVzZW5jZSBvZiB0aGlzIFNBQlJFLgpAQCAtMTA3NCwyNiArNzk5LDI2IEBACiAJLyoKIAkgKiBGaXJzdCBSRUcgaW4gcHJvcGVydHkgaXMgYmFzZSBvZiBlbnRpcmUgU0FCUkUgcmVnaXN0ZXIgc3BhY2UuCiAJICovCi0JcC0+cGJtX0EuY29udHJvbGxlcl9yZWdzID0gcHJfcmVnc1swXS5waHlzX2FkZHI7CisJcGJtLT5jb250cm9sbGVyX3JlZ3MgPSBwcl9yZWdzWzBdLnBoeXNfYWRkcjsKIAogCS8qIENsZWFyIGludGVycnVwdHMgKi8KIAogCS8qIFBDSSBmaXJzdCAqLwogCWZvciAoY2xlYXJfaXJxID0gU0FCUkVfSUNMUl9BX1NMT1QwOyBjbGVhcl9pcnEgPCBTQUJSRV9JQ0xSX0JfU0xPVDAgKyAweDgwOyBjbGVhcl9pcnEgKz0gOCkKLQkJc2FicmVfd3JpdGUocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgY2xlYXJfaXJxLCAweDBVTCk7CisJCXNhYnJlX3dyaXRlKHBibS0+Y29udHJvbGxlcl9yZWdzICsgY2xlYXJfaXJxLCAweDBVTCk7CiAKIAkvKiBUaGVuIE9CSU8gKi8KIAlmb3IgKGNsZWFyX2lycSA9IFNBQlJFX0lDTFJfU0NTSTsgY2xlYXJfaXJxIDwgU0FCUkVfSUNMUl9TQ1NJICsgMHg4MDsgY2xlYXJfaXJxICs9IDgpCi0JCXNhYnJlX3dyaXRlKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIGNsZWFyX2lycSwgMHgwVUwpOworCQlzYWJyZV93cml0ZShwYm0tPmNvbnRyb2xsZXJfcmVncyArIGNsZWFyX2lycSwgMHgwVUwpOwogCiAJLyogRXJyb3IgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCBsYXRlciBhZnRlciB0aGUgYnVzIHNjYW4uICovCi0Jc2FicmVfd3JpdGUocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgU0FCUkVfUENJQ1RSTCwKKwlzYWJyZV93cml0ZShwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX1BDSUNUUkwsCiAJCSAgICAoU0FCUkVfUENJQ1RSTF9NUkxFTiAgIHwgU0FCUkVfUENJQ1RSTF9TRVJSIHwKIAkJICAgICBTQUJSRV9QQ0lDVFJMX0FSQlBBUksgfCBTQUJSRV9QQ0lDVFJMX0FFTikpOwogCiAJLyogTm93IG1hcCBpbiBQQ0kgY29uZmlnIHNwYWNlIGZvciBlbnRpcmUgU0FCUkUuICovCi0JcC0+cGJtX0EuY29uZmlnX3NwYWNlID0KLQkJKHAtPnBibV9BLmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0NPTkZJR1NQQUNFKTsKKwlwYm0tPmNvbmZpZ19zcGFjZSA9CisJCShwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNBQlJFX0NPTkZJR1NQQUNFKTsKIAogCXZkbWEgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJ2aXJ0dWFsLWRtYSIsIE5VTEwpOwogCkBAIC0xMTE3LDE0ICs4NDIsMTAgQEAKIAkJCXByb21faGFsdCgpOwogCX0KIAotCXNhYnJlX2lvbW11X2luaXQocCwgdHNic2l6ZSwgdmRtYVswXSwgZG1hX21hc2spOwotCi0JYnVzcmFuZ2UgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJidXMtcmFuZ2UiLCBOVUxMKTsKLQlwLT5wY2lfZmlyc3RfYnVzbm8gPSBidXNyYW5nZVswXTsKLQlwLT5wY2lfbGFzdF9idXNubyA9IGJ1c3JhbmdlWzFdOworCXNhYnJlX2lvbW11X2luaXQocGJtLCB0c2JzaXplLCB2ZG1hWzBdLCBkbWFfbWFzayk7CiAKIAkvKgogCSAqIExvb2sgZm9yIEFQQiB1bmRlcm5lYXRoLgogCSAqLwotCXNhYnJlX3BibV9pbml0KHAsIGRwKTsKKwlzYWJyZV9wYm1faW5pdChwLCBwYm0sIGRwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NjaGl6by5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc2NoaXpvLmMKaW5kZXggOTFhNzM4NS4uYWU3Njg5OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc2NoaXpvLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc2NoaXpvLmMKQEAgLTEwLDEyICsxMCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAotI2luY2x1ZGUgPGFzbS9wYm0uaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3VwYS5oPgogI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KIAogI2luY2x1ZGUgInBjaV9pbXBsLmgiCiAjaW5jbHVkZSAiaW9tbXVfY29tbW9uLmgiCkBAIC0xMDMsMTI1ICsxMDQsNiBAQAogCQkgU0NISVpPX0NPTkZJR19FTkNPREUoYnVzLCBkZXZmbiwgd2hlcmUpKTsKIH0KIAotLyogSnVzdCBtYWtlIHN1cmUgdGhlIGJ1cyBudW1iZXIgaXMgaW4gcmFuZ2UuICAqLwotc3RhdGljIGludCBzY2hpem9fb3V0X29mX3JhbmdlKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGJ1cywKLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGRldmZuKQotewotCWlmIChidXMgPCBwYm0tPnBjaV9maXJzdF9idXNubyB8fAotCSAgICBidXMgPiBwYm0tPnBjaV9sYXN0X2J1c25vKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotLyogU0NISVpPIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vzc29ycy4gKi8KLQotc3RhdGljIGludCBzY2hpem9fcmVhZF9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkgICAgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBidXNfZGV2LT5zeXNkYXRhOwotCXVuc2lnbmVkIGNoYXIgYnVzID0gYnVzX2Rldi0+bnVtYmVyOwotCXUzMiAqYWRkcjsKLQl1MTYgdG1wMTY7Ci0JdTggdG1wODsKLQotCWlmIChidXNfZGV2ID09IHBibS0+cGNpX2J1cyAmJiBkZXZmbiA9PSAweDAwKQotCQlyZXR1cm4gcGNpX2hvc3RfYnJpZGdlX3JlYWRfcGNpX2NmZyhidXNfZGV2LCBkZXZmbiwgd2hlcmUsCi0JCQkJCQkgICAgc2l6ZSwgdmFsdWUpOwotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJKnZhbHVlID0gMHhmZjsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqdmFsdWUgPSAweGZmZmY7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJKnZhbHVlID0gMHhmZmZmZmZmZjsKLQkJYnJlYWs7Ci0JfQotCi0JYWRkciA9IHNjaGl6b19wY2lfY29uZmlnX21rYWRkcihwYm0sIGJ1cywgZGV2Zm4sIHdoZXJlKTsKLQlpZiAoIWFkZHIpCi0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0KLQlpZiAoc2NoaXpvX291dF9vZl9yYW5nZShwYm0sIGJ1cywgZGV2Zm4pKQotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJcGNpX2NvbmZpZ19yZWFkOCgodTggKilhZGRyLCAmdG1wOCk7Ci0JCSp2YWx1ZSA9IHRtcDg7Ci0JCWJyZWFrOwotCi0JY2FzZSAyOgotCQlpZiAod2hlcmUgJiAweDAxKSB7Ci0JCQlwcmludGsoInBjaV9yZWFkX2NvbmZpZ193b3JkOiBtaXNhbGlnbmVkIHJlZyBbJXhdXG4iLAotCQkJICAgICAgIHdoZXJlKTsKLQkJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0JCX0KLQkJcGNpX2NvbmZpZ19yZWFkMTYoKHUxNiAqKWFkZHIsICZ0bXAxNik7Ci0JCSp2YWx1ZSA9IHRtcDE2OwotCQlicmVhazsKLQotCWNhc2UgNDoKLQkJaWYgKHdoZXJlICYgMHgwMykgewotCQkJcHJpbnRrKCJwY2lfcmVhZF9jb25maWdfZHdvcmQ6IG1pc2FsaWduZWQgcmVnIFsleF1cbiIsCi0JCQkgICAgICAgd2hlcmUpOwotCQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQkJfQotCQlwY2lfY29uZmlnX3JlYWQzMihhZGRyLCB2YWx1ZSk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IHNjaGl6b193cml0ZV9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkJaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQotewotCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9IGJ1c19kZXYtPnN5c2RhdGE7Ci0JdW5zaWduZWQgY2hhciBidXMgPSBidXNfZGV2LT5udW1iZXI7Ci0JdTMyICphZGRyOwotCi0JaWYgKGJ1c19kZXYgPT0gcGJtLT5wY2lfYnVzICYmIGRldmZuID09IDB4MDApCi0JCXJldHVybiBwY2lfaG9zdF9icmlkZ2Vfd3JpdGVfcGNpX2NmZyhidXNfZGV2LCBkZXZmbiwgd2hlcmUsCi0JCQkJCQkgICAgIHNpemUsIHZhbHVlKTsKLQlhZGRyID0gc2NoaXpvX3BjaV9jb25maWdfbWthZGRyKHBibSwgYnVzLCBkZXZmbiwgd2hlcmUpOwotCWlmICghYWRkcikKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotCWlmIChzY2hpem9fb3V0X29mX3JhbmdlKHBibSwgYnVzLCBkZXZmbikpCi0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCXBjaV9jb25maWdfd3JpdGU4KCh1OCAqKWFkZHIsIHZhbHVlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDI6Ci0JCWlmICh3aGVyZSAmIDB4MDEpIHsKLQkJCXByaW50aygicGNpX3dyaXRlX2NvbmZpZ193b3JkOiBtaXNhbGlnbmVkIHJlZyBbJXhdXG4iLAotCQkJICAgICAgIHdoZXJlKTsKLQkJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0JCX0KLQkJcGNpX2NvbmZpZ193cml0ZTE2KCh1MTYgKilhZGRyLCB2YWx1ZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSA0OgotCQlpZiAod2hlcmUgJiAweDAzKSB7Ci0JCQlwcmludGsoInBjaV93cml0ZV9jb25maWdfZHdvcmQ6IG1pc2FsaWduZWQgcmVnIFsleF1cbiIsCi0JCQkgICAgICAgd2hlcmUpOwotCQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQkJfQotCi0JCXBjaV9jb25maWdfd3JpdGUzMihhZGRyLCB2YWx1ZSk7Ci0JfQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBzY2hpem9fb3BzID0gewotCS5yZWFkID0JCXNjaGl6b19yZWFkX3BjaV9jZmcsCi0JLndyaXRlID0Jc2NoaXpvX3dyaXRlX3BjaV9jZmcsCi19OwotCiAvKiBTQ0hJWk8gZXJyb3IgaGFuZGxpbmcgc3VwcG9ydC4gKi8KIGVudW0gc2NoaXpvX2Vycm9yX3R5cGUgewogCVVFX0VSUiwgQ0VfRVJSLCBQQ0lfRVJSLCBTQUZBUklfRVJSCkBAIC0yMzgsMjUgKzEyMCw2IEBACiAjZGVmaW5lIFNDSElaT19QQ0lFUlJfQl9JTk8JMHgzMyAvKiBQQk0gQiBQQ0kgYnVzIGVycm9yICovCiAjZGVmaW5lIFNDSElaT19TRVJSX0lOTwkJMHgzNCAvKiBTYWZhcmkgaW50ZXJmYWNlIGVycm9yICovCiAKLXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibV9mb3JfaW5vKHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwLCB1MzIgaW5vKQotewotCWlubyAmPSBJTUFQX0lOTzsKLQlpZiAocC0+cGJtX0EuaW5vX2JpdG1hcCAmICgxVUwgPDwgaW5vKSkKLQkJcmV0dXJuICZwLT5wYm1fQTsKLQlpZiAocC0+cGJtX0IuaW5vX2JpdG1hcCAmICgxVUwgPDwgaW5vKSkKLQkJcmV0dXJuICZwLT5wYm1fQjsKLQotCXByaW50aygiUENJJWQ6IE5vIGlub19iaXRtYXAgZW50cnkgZm9yIGlub1sleF0sIGJpdG1hcHMgIgotCSAgICAgICAiUEJNX0FbJTAxNmx4XSBQQk1fQlslMDE2bHhdIiwKLQkgICAgICAgcC0+aW5kZXgsIGlubywKLQkgICAgICAgcC0+cGJtX0EuaW5vX2JpdG1hcCwKLQkgICAgICAgcC0+cGJtX0IuaW5vX2JpdG1hcCk7Ci0JcHJpbnRrKCJQQ0klZDogVXNpbmcgUEJNX0EsIHJlcG9ydCB0aGlzIHByb2JsZW0gaW1tZWRpYXRlbHkuXG4iLAotCSAgICAgICBwLT5pbmRleCk7Ci0KLQlyZXR1cm4gJnAtPnBibV9BOwotfQotCiAjZGVmaW5lIFNDSElaT19TVENfRVJSCTB4YjgwMFVMIC8qIC0tPiAweGJhMDAgKi8KICNkZWZpbmUgU0NISVpPX1NUQ19UQUcJMHhiYTAwVUwgLyogLS0+IDB4YmE4MCAqLwogI2RlZmluZSBTQ0hJWk9fU1RDX0xJTkUJMHhiYjAwVUwgLyogLS0+IDB4YmI4MCAqLwpAQCAtNTIyLDkgKzM4NSwxMCBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2NoaXpvX3VlX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwID0gZGV2X2lkOwotCXVuc2lnbmVkIGxvbmcgYWZzcl9yZWcgPSBwLT5wYm1fQi5jb250cm9sbGVyX3JlZ3MgKyBTQ0hJWk9fVUVfQUZTUjsKLQl1bnNpZ25lZCBsb25nIGFmYXJfcmVnID0gcC0+cGJtX0IuY29udHJvbGxlcl9yZWdzICsgU0NISVpPX1VFX0FGQVI7CisJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gZGV2X2lkOworCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwID0gcGJtLT5wYXJlbnQ7CisJdW5zaWduZWQgbG9uZyBhZnNyX3JlZyA9IHBibS0+Y29udHJvbGxlcl9yZWdzICsgU0NISVpPX1VFX0FGU1I7CisJdW5zaWduZWQgbG9uZyBhZmFyX3JlZyA9IHBibS0+Y29udHJvbGxlcl9yZWdzICsgU0NISVpPX1VFX0FGQVI7CiAJdW5zaWduZWQgbG9uZyBhZnNyLCBhZmFyLCBlcnJvcl9iaXRzOwogCWludCByZXBvcnRlZCwgbGltaXQ7CiAKQEAgLTU0OSwyOCArNDEzLDI4IEBACiAJc2NoaXpvX3dyaXRlKGFmc3JfcmVnLCBlcnJvcl9iaXRzKTsKIAogCS8qIExvZyB0aGUgZXJyb3IuICovCi0JcHJpbnRrKCJQQ0klZDogVW5jb3JyZWN0YWJsZSBFcnJvciwgcHJpbWFyeSBlcnJvciB0eXBlWyVzXVxuIiwKLQkgICAgICAgcC0+aW5kZXgsCisJcHJpbnRrKCIlczogVW5jb3JyZWN0YWJsZSBFcnJvciwgcHJpbWFyeSBlcnJvciB0eXBlWyVzXVxuIiwKKwkgICAgICAgcGJtLT5uYW1lLAogCSAgICAgICAoKChlcnJvcl9iaXRzICYgU0NISVpPX1VFQUZTUl9QUElPKSA/CiAJCSAiUElPIiA6CiAJCSAoKGVycm9yX2JpdHMgJiBTQ0hJWk9fVUVBRlNSX1BEUkQpID8KIAkJICAiRE1BIFJlYWQiIDoKIAkJICAoKGVycm9yX2JpdHMgJiBTQ0hJWk9fVUVBRlNSX1BEV1IpID8KIAkJICAgIkRNQSBXcml0ZSIgOiAiPz8/IikpKSkpOwotCXByaW50aygiUENJJWQ6IGJ5dGVtYXNrWyUwNGx4XSBxd29yZF9vZmZzZXRbJWx4XSBTQUZBUklfQUlEWyUwMmx4XVxuIiwKLQkgICAgICAgcC0+aW5kZXgsCisJcHJpbnRrKCIlczogYnl0ZW1hc2tbJTA0bHhdIHF3b3JkX29mZnNldFslbHhdIFNBRkFSSV9BSURbJTAybHhdXG4iLAorCSAgICAgICBwYm0tPm5hbWUsCiAJICAgICAgIChhZnNyICYgU0NISVpPX1VFQUZTUl9CTVNLKSA+PiAzMlVMLAogCSAgICAgICAoYWZzciAmIFNDSElaT19VRUFGU1JfUU9GRikgPj4gMzBVTCwKIAkgICAgICAgKGFmc3IgJiBTQ0hJWk9fVUVBRlNSX0FJRCkgPj4gMjRVTCk7Ci0JcHJpbnRrKCJQQ0klZDogcGFydGlhbFslZF0gb3duZWRfaW5bJWRdIG10YWdbJWx4XSBtdGFnX3N5bmRbJWx4XSBlY2Nfc3luY1slbHhdXG4iLAotCSAgICAgICBwLT5pbmRleCwKKwlwcmludGsoIiVzOiBwYXJ0aWFsWyVkXSBvd25lZF9pblslZF0gbXRhZ1slbHhdIG10YWdfc3luZFslbHhdIGVjY19zeW5jWyVseF1cbiIsCisJICAgICAgIHBibS0+bmFtZSwKIAkgICAgICAgKGFmc3IgJiBTQ0hJWk9fVUVBRlNSX1BBUlRJQUwpID8gMSA6IDAsCiAJICAgICAgIChhZnNyICYgU0NISVpPX1VFQUZTUl9PV05FRElOKSA/IDEgOiAwLAogCSAgICAgICAoYWZzciAmIFNDSElaT19VRUFGU1JfTVRBRykgPj4gMTNVTCwKIAkgICAgICAgKGFmc3IgJiBTQ0hJWk9fVUVBRlNSX01UQUdTWU5EKSA+PiAxNlVMLAogCSAgICAgICAoYWZzciAmIFNDSElaT19VRUFGU1JfRUNDU1lORCkgPj4gMFVMKTsKLQlwcmludGsoIlBDSSVkOiBVRSBBRkFSIFslMDE2bHhdXG4iLCBwLT5pbmRleCwgYWZhcik7Ci0JcHJpbnRrKCJQQ0klZDogVUUgU2Vjb25kYXJ5IGVycm9ycyBbIiwgcC0+aW5kZXgpOworCXByaW50aygiJXM6IFVFIEFGQVIgWyUwMTZseF1cbiIsIHBibS0+bmFtZSwgYWZhcik7CisJcHJpbnRrKCIlczogVUUgU2Vjb25kYXJ5IGVycm9ycyBbIiwgcGJtLT5uYW1lKTsKIAlyZXBvcnRlZCA9IDA7CiAJaWYgKGFmc3IgJiBTQ0hJWk9fVUVBRlNSX1NQSU8pIHsKIAkJcmVwb3J0ZWQrKzsKQEAgLTYxMCw5ICs0NzQsOSBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2NoaXpvX2NlX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwID0gZGV2X2lkOwotCXVuc2lnbmVkIGxvbmcgYWZzcl9yZWcgPSBwLT5wYm1fQi5jb250cm9sbGVyX3JlZ3MgKyBTQ0hJWk9fQ0VfQUZTUjsKLQl1bnNpZ25lZCBsb25nIGFmYXJfcmVnID0gcC0+cGJtX0IuY29udHJvbGxlcl9yZWdzICsgU0NISVpPX0NFX0FGQVI7CisJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gZGV2X2lkOworCXVuc2lnbmVkIGxvbmcgYWZzcl9yZWcgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNDSElaT19DRV9BRlNSOworCXVuc2lnbmVkIGxvbmcgYWZhcl9yZWcgPSBwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNDSElaT19DRV9BRkFSOwogCXVuc2lnbmVkIGxvbmcgYWZzciwgYWZhciwgZXJyb3JfYml0czsKIAlpbnQgcmVwb3J0ZWQsIGxpbWl0OwogCkBAIC02MzcsOCArNTAxLDggQEAKIAlzY2hpem9fd3JpdGUoYWZzcl9yZWcsIGVycm9yX2JpdHMpOwogCiAJLyogTG9nIHRoZSBlcnJvci4gKi8KLQlwcmludGsoIlBDSSVkOiBDb3JyZWN0YWJsZSBFcnJvciwgcHJpbWFyeSBlcnJvciB0eXBlWyVzXVxuIiwKLQkgICAgICAgcC0+aW5kZXgsCisJcHJpbnRrKCIlczogQ29ycmVjdGFibGUgRXJyb3IsIHByaW1hcnkgZXJyb3IgdHlwZVslc11cbiIsCisJICAgICAgIHBibS0+bmFtZSwKIAkgICAgICAgKCgoZXJyb3JfYml0cyAmIFNDSElaT19DRUFGU1JfUFBJTykgPwogCQkgIlBJTyIgOgogCQkgKChlcnJvcl9iaXRzICYgU0NISVpPX0NFQUZTUl9QRFJEKSA/CkBAIC02NDksMjAgKzUxMywyMCBAQAogCS8qIFhYWCBVc2Ugc3luZHJvbWUgYW5kIGFmYXIgdG8gcHJpbnQgb3V0IG1vZHVsZSBzdHJpbmcganVzdCBsaWtlCiAJICogWFhYIFVEQiBDRSB0cmFwIGhhbmRsZXIgZG9lcy4uLiAtRGF2ZU0KIAkgKi8KLQlwcmludGsoIlBDSSVkOiBieXRlbWFza1slMDRseF0gcXdvcmRfb2Zmc2V0WyVseF0gU0FGQVJJX0FJRFslMDJseF1cbiIsCi0JICAgICAgIHAtPmluZGV4LAorCXByaW50aygiJXM6IGJ5dGVtYXNrWyUwNGx4XSBxd29yZF9vZmZzZXRbJWx4XSBTQUZBUklfQUlEWyUwMmx4XVxuIiwKKwkgICAgICAgcGJtLT5uYW1lLAogCSAgICAgICAoYWZzciAmIFNDSElaT19VRUFGU1JfQk1TSykgPj4gMzJVTCwKIAkgICAgICAgKGFmc3IgJiBTQ0hJWk9fVUVBRlNSX1FPRkYpID4+IDMwVUwsCiAJICAgICAgIChhZnNyICYgU0NISVpPX1VFQUZTUl9BSUQpID4+IDI0VUwpOwotCXByaW50aygiUENJJWQ6IHBhcnRpYWxbJWRdIG93bmVkX2luWyVkXSBtdGFnWyVseF0gbXRhZ19zeW5kWyVseF0gZWNjX3N5bmNbJWx4XVxuIiwKLQkgICAgICAgcC0+aW5kZXgsCisJcHJpbnRrKCIlczogcGFydGlhbFslZF0gb3duZWRfaW5bJWRdIG10YWdbJWx4XSBtdGFnX3N5bmRbJWx4XSBlY2Nfc3luY1slbHhdXG4iLAorCSAgICAgICBwYm0tPm5hbWUsCiAJICAgICAgIChhZnNyICYgU0NISVpPX1VFQUZTUl9QQVJUSUFMKSA/IDEgOiAwLAogCSAgICAgICAoYWZzciAmIFNDSElaT19VRUFGU1JfT1dORURJTikgPyAxIDogMCwKIAkgICAgICAgKGFmc3IgJiBTQ0hJWk9fVUVBRlNSX01UQUcpID4+IDEzVUwsCiAJICAgICAgIChhZnNyICYgU0NISVpPX1VFQUZTUl9NVEFHU1lORCkgPj4gMTZVTCwKIAkgICAgICAgKGFmc3IgJiBTQ0hJWk9fVUVBRlNSX0VDQ1NZTkQpID4+IDBVTCk7Ci0JcHJpbnRrKCJQQ0klZDogQ0UgQUZBUiBbJTAxNmx4XVxuIiwgcC0+aW5kZXgsIGFmYXIpOwotCXByaW50aygiUENJJWQ6IENFIFNlY29uZGFyeSBlcnJvcnMgWyIsIHAtPmluZGV4KTsKKwlwcmludGsoIiVzOiBDRSBBRkFSIFslMDE2bHhdXG4iLCBwYm0tPm5hbWUsIGFmYXIpOworCXByaW50aygiJXM6IENFIFNlY29uZGFyeSBlcnJvcnMgWyIsIHBibS0+bmFtZSk7CiAJcmVwb3J0ZWQgPSAwOwogCWlmIChhZnNyICYgU0NISVpPX0NFQUZTUl9TUElPKSB7CiAJCXJlcG9ydGVkKys7CkBAIC04ODEsMTAgKzc0NSwxMCBAQAogCSAqLwogCWlmIChlcnJvcl9iaXRzICYgKFNDSElaT19QQ0lBRlNSX1BUQSB8IFNDSElaT19QQ0lBRlNSX1NUQSkpIHsKIAkJc2NoaXpvX2NoZWNrX2lvbW11X2Vycm9yKHAsIFBDSV9FUlIpOwotCQlwY2lfc2Nhbl9mb3JfdGFyZ2V0X2Fib3J0KHAsIHBibSwgcGJtLT5wY2lfYnVzKTsKKwkJcGNpX3NjYW5fZm9yX3RhcmdldF9hYm9ydChwYm0sIHBibS0+cGNpX2J1cyk7CiAJfQogCWlmIChlcnJvcl9iaXRzICYgKFNDSElaT19QQ0lBRlNSX1BNQSB8IFNDSElaT19QQ0lBRlNSX1NNQSkpCi0JCXBjaV9zY2FuX2Zvcl9tYXN0ZXJfYWJvcnQocCwgcGJtLCBwYm0tPnBjaV9idXMpOworCQlwY2lfc2Nhbl9mb3JfbWFzdGVyX2Fib3J0KHBibSwgcGJtLT5wY2lfYnVzKTsKIAogCS8qIEZvciBleGNlc3NpdmUgcmV0cmllcywgUFNZQ0hPL1BCTSB3aWxsIGFib3J0IHRoZSBkZXZpY2UKIAkgKiBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIHNwZWNpZmljYWxseSBjaGVjayBmb3IgZXhjZXNzaXZlCkBAIC04OTQsNyArNzU4LDcgQEAKIAkgKi8KIAogCWlmIChlcnJvcl9iaXRzICYgKFNDSElaT19QQ0lBRlNSX1BQRVJSIHwgU0NISVpPX1BDSUFGU1JfU1BFUlIpKQotCQlwY2lfc2Nhbl9mb3JfcGFyaXR5X2Vycm9yKHAsIHBibSwgcGJtLT5wY2lfYnVzKTsKKwkJcGNpX3NjYW5fZm9yX3Bhcml0eV9lcnJvcihwYm0sIHBibS0+cGNpX2J1cyk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC05NDAsMjIgKzgwNCwyMyBAQAogICovCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2NoaXpvX3NhZmFyaWVycl9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCA9IGRldl9pZDsKKwlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBkZXZfaWQ7CisJc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnAgPSBwYm0tPnBhcmVudDsKIAl1NjQgZXJybG9nOwogCi0JZXJybG9nID0gc2NoaXpvX3JlYWQocC0+cGJtX0IuY29udHJvbGxlcl9yZWdzICsgU0NISVpPX1NBRkFSSV9FUlJMT0cpOwotCXNjaGl6b193cml0ZShwLT5wYm1fQi5jb250cm9sbGVyX3JlZ3MgKyBTQ0hJWk9fU0FGQVJJX0VSUkxPRywKKwllcnJsb2cgPSBzY2hpem9fcmVhZChwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNDSElaT19TQUZBUklfRVJSTE9HKTsKKwlzY2hpem9fd3JpdGUocGJtLT5jb250cm9sbGVyX3JlZ3MgKyBTQ0hJWk9fU0FGQVJJX0VSUkxPRywKIAkJICAgICBlcnJsb2cgJiB+KFNBRkFSSV9FUlJMT0dfRVJST1VUKSk7CiAKIAlpZiAoIShlcnJsb2cgJiBCVVNfRVJST1JfVU5NQVApKSB7Ci0JCXByaW50aygiUENJJWQ6IFVuZXhwZWN0ZWQgU2FmYXJpL0pCVVMgZXJyb3IgaW50ZXJydXB0LCBlcnJsb2dbJTAxNmx4XVxuIiwKLQkJICAgICAgIHAtPmluZGV4LCBlcnJsb2cpOworCQlwcmludGsoIiVzOiBVbmV4cGVjdGVkIFNhZmFyaS9KQlVTIGVycm9yIGludGVycnVwdCwgZXJybG9nWyUwMTZseF1cbiIsCisJCSAgICAgICBwYm0tPm5hbWUsIGVycmxvZyk7CiAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAotCXByaW50aygiUENJJWQ6IFNhZmFyaS9KQlVTIGludGVycnVwdCwgVU5NQVBQRUQgZXJyb3IsIGludGVycm9nYXRpbmcgSU9NTVVzLlxuIiwKLQkgICAgICAgcC0+aW5kZXgpOworCXByaW50aygiJXM6IFNhZmFyaS9KQlVTIGludGVycnVwdCwgVU5NQVBQRUQgZXJyb3IsIGludGVycm9nYXRpbmcgSU9NTVVzLlxuIiwKKwkgICAgICAgcGJtLT5uYW1lKTsKIAlzY2hpem9fY2hlY2tfaW9tbXVfZXJyb3IocCwgU0FGQVJJX0VSUik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC05NzIsNiArODM3LDE2IEBACiAjZGVmaW5lIFNDSElaT19TQUZBUklfSVJRQ1RSTAkweDEwMDEwVUwKICNkZWZpbmUgIFNDSElaT19TQUZJUlFDVFJMX0VOCSAweDgwMDAwMDAwMDAwMDAwMDBVTAogCitzdGF0aWMgaW50IHBibV9yb3V0ZXNfdGhpc19pbm8oc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLCB1MzIgaW5vKQoreworCWlubyAmPSBJTUFQX0lOTzsKKworCWlmIChwYm0tPmlub19iaXRtYXAgJiAoMVVMIDw8IGlubykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIC8qIEhvdyB0aGUgVG9tYXRpbGxvIElSUXMgYXJlIHJvdXRlZCBhcm91bmQgaXMgcHVyZSBndWVzc3dvcmsgaGVyZS4KICAqCiAgKiBBbGwgdGhlIFRvbWF0aWxsbyBkZXZpY2VzIEkgc2VlIGluIHBydGNvbmYgZHVtcHMgc2VlbSB0byBoYXZlIG9ubHkKQEAgLTk4NiwxMSArODYxLDExIEBACiAgKiBQQ0kgYnVzIHVuaXRzIG9mIHRoZSBzYW1lIFRvbWF0aWxsby4gIEkgc3RpbGwgaGF2ZSBub3QgcmVhbGx5CiAgKiBmaWd1cmVkIHRoaXMgb3V0Li4uCiAgKi8KLXN0YXRpYyB2b2lkIHRvbWF0aWxsb19yZWdpc3Rlcl9lcnJvcl9oYW5kbGVycyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCkKK3N0YXRpYyB2b2lkIHRvbWF0aWxsb19yZWdpc3Rlcl9lcnJvcl9oYW5kbGVycyhzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCiB7Ci0Jc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtOwotCXN0cnVjdCBvZl9kZXZpY2UgKm9wOworCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwYm0tPnByb21fbm9kZSk7CiAJdTY0IHRtcCwgZXJyX21hc2ssIGVycl9ub19tYXNrOworCWludCBlcnI7CiAKIAkvKiBUb21hdGlsbG8gSVJRIHByb3BlcnR5IGxheW91dCBpczoKIAkgKiAwOiBQQ0lFUlIKQEAgLTEwMDAsNDQgKzg3NSw0MiBAQAogCSAqIDQ6IFBPV0VSIEZBSUw/CiAJICovCiAKLQlwYm0gPSBwYm1fZm9yX2lubyhwLCBTQ0hJWk9fVUVfSU5PKTsKLQlvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOwotCWlmIChvcCkKLQkJcmVxdWVzdF9pcnEob3AtPmlycXNbMV0sIHNjaGl6b191ZV9pbnRyLCBJUlFGX1NIQVJFRCwKLQkJCSAgICAiVE9NQVRJTExPX1VFIiwgcCk7CisJaWYgKHBibV9yb3V0ZXNfdGhpc19pbm8ocGJtLCBTQ0hJWk9fVUVfSU5PKSkgeworCQllcnIgPSByZXF1ZXN0X2lycShvcC0+aXJxc1sxXSwgc2NoaXpvX3VlX2ludHIsIDAsCisJCQkJICAiVE9NQVRJTExPX1VFIiwgcGJtKTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDb3VsZCBub3QgcmVnaXN0ZXIgVUUsICIKKwkJCSAgICAgICAiZXJyPSVkXG4iLCBwYm0tPm5hbWUsIGVycik7CisJfQorCWlmIChwYm1fcm91dGVzX3RoaXNfaW5vKHBibSwgU0NISVpPX0NFX0lOTykpIHsKKwkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbMl0sIHNjaGl6b19jZV9pbnRyLCAwLAorCQkJCSAgIlRPTUFUSUxMT19DRSIsIHBibSk7CisJCWlmIChlcnIpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IHJlZ2lzdGVyIENFLCAiCisJCQkgICAgICAgImVycj0lZFxuIiwgcGJtLT5uYW1lLCBlcnIpOworCX0KKwllcnIgPSAwOworCWlmIChwYm1fcm91dGVzX3RoaXNfaW5vKHBibSwgU0NISVpPX1BDSUVSUl9BX0lOTykpIHsKKwkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbMF0sIHNjaGl6b19wY2llcnJfaW50ciwgMCwKKwkJCQkgICJUT01BVElMTE9fUENJRVJSIiwgcGJtKTsKKwl9IGVsc2UgaWYgKHBibV9yb3V0ZXNfdGhpc19pbm8ocGJtLCBTQ0hJWk9fUENJRVJSX0JfSU5PKSkgeworCQllcnIgPSByZXF1ZXN0X2lycShvcC0+aXJxc1swXSwgc2NoaXpvX3BjaWVycl9pbnRyLCAwLAorCQkJCSAgIlRPTUFUSUxMT19QQ0lFUlIiLCBwYm0pOworCX0KKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IHJlZ2lzdGVyIFBDSUVSUiwgIgorCQkgICAgICAgImVycj0lZFxuIiwgcGJtLT5uYW1lLCBlcnIpOwogCi0JcGJtID0gcGJtX2Zvcl9pbm8ocCwgU0NISVpPX0NFX0lOTyk7Ci0Jb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBibS0+cHJvbV9ub2RlKTsKLQlpZiAob3ApCi0JCXJlcXVlc3RfaXJxKG9wLT5pcnFzWzJdLCBzY2hpem9fY2VfaW50ciwgSVJRRl9TSEFSRUQsCi0JCQkgICAgIlRPTUFUSUxMTyBDRSIsIHApOwotCi0JcGJtID0gcGJtX2Zvcl9pbm8ocCwgU0NISVpPX1BDSUVSUl9BX0lOTyk7Ci0Jb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBibS0+cHJvbV9ub2RlKTsKLQlpZiAob3ApCi0JCXJlcXVlc3RfaXJxKG9wLT5pcnFzWzBdLCBzY2hpem9fcGNpZXJyX2ludHIsIElSUUZfU0hBUkVELAotCQkJICAgICJUT01BVElMTE8gUENJRVJSLUEiLCBwYm0pOwotCi0KLQlwYm0gPSBwYm1fZm9yX2lubyhwLCBTQ0hJWk9fUENJRVJSX0JfSU5PKTsKLQlvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOwotCWlmIChvcCkKLQkJcmVxdWVzdF9pcnEob3AtPmlycXNbMF0sIHNjaGl6b19wY2llcnJfaW50ciwgSVJRRl9TSEFSRUQsCi0JCQkgICAgIlRPTUFUSUxMTyBQQ0lFUlItQiIsIHBibSk7Ci0KLQlwYm0gPSBwYm1fZm9yX2lubyhwLCBTQ0hJWk9fU0VSUl9JTk8pOwotCW9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwYm0tPnByb21fbm9kZSk7Ci0JaWYgKG9wKQotCQlyZXF1ZXN0X2lycShvcC0+aXJxc1szXSwgc2NoaXpvX3NhZmFyaWVycl9pbnRyLCBJUlFGX1NIQVJFRCwKLQkJCSAgICAiVE9NQVRJTExPIFNFUlIiLCBwKTsKKwlpZiAocGJtX3JvdXRlc190aGlzX2lubyhwYm0sIFNDSElaT19TRVJSX0lOTykpIHsKKwkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbM10sIHNjaGl6b19zYWZhcmllcnJfaW50ciwgMCwKKwkJCQkgICJUT01BVElMTE9fU0VSUiIsIHBibSk7CisJCWlmIChlcnIpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IHJlZ2lzdGVyIFNFUlIsICIKKwkJCSAgICAgICAiZXJyPSVkXG4iLCBwYm0tPm5hbWUsIGVycik7CisJfQogCiAJLyogRW5hYmxlIFVFIGFuZCBDRSBpbnRlcnJ1cHRzIGZvciBjb250cm9sbGVyLiAqLwotCXNjaGl6b193cml0ZShwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQ0hJWk9fRUNDX0NUUkwsCi0JCSAgICAgKFNDSElaT19FQ0NDVFJMX0VFIHwKLQkJICAgICAgU0NISVpPX0VDQ0NUUkxfVUUgfAotCQkgICAgICBTQ0hJWk9fRUNDQ1RSTF9DRSkpOwotCi0Jc2NoaXpvX3dyaXRlKHAtPnBibV9CLmNvbnRyb2xsZXJfcmVncyArIFNDSElaT19FQ0NfQ1RSTCwKKwlzY2hpem9fd3JpdGUocGJtLT5jb250cm9sbGVyX3JlZ3MgKyBTQ0hJWk9fRUNDX0NUUkwsCiAJCSAgICAgKFNDSElaT19FQ0NDVFJMX0VFIHwKIAkJICAgICAgU0NISVpPX0VDQ0NUUkxfVUUgfAogCQkgICAgICBTQ0hJWk9fRUNDQ1RSTF9DRSkpOwpAQCAtMTA1MywxNSArOTI2LDEwIEBACiAKIAllcnJfbm9fbWFzayA9IFNDSElaT19QQ0lDVFJMX0RUT19FUlI7CiAKLQl0bXAgPSBzY2hpem9fcmVhZChwLT5wYm1fQS5wYm1fcmVncyArIFNDSElaT19QQ0lfQ1RSTCk7CisJdG1wID0gc2NoaXpvX3JlYWQocGJtLT5wYm1fcmVncyArIFNDSElaT19QQ0lfQ1RSTCk7CiAJdG1wIHw9IGVycl9tYXNrOwogCXRtcCAmPSB+ZXJyX25vX21hc2s7Ci0Jc2NoaXpvX3dyaXRlKHAtPnBibV9BLnBibV9yZWdzICsgU0NISVpPX1BDSV9DVFJMLCB0bXApOwotCi0JdG1wID0gc2NoaXpvX3JlYWQocC0+cGJtX0IucGJtX3JlZ3MgKyBTQ0hJWk9fUENJX0NUUkwpOwotCXRtcCB8PSBlcnJfbWFzazsKLQl0bXAgJj0gfmVycl9ub19tYXNrOwotCXNjaGl6b193cml0ZShwLT5wYm1fQi5wYm1fcmVncyArIFNDSElaT19QQ0lfQ1RSTCwgdG1wKTsKKwlzY2hpem9fd3JpdGUocGJtLT5wYm1fcmVncyArIFNDSElaT19QQ0lfQ1RSTCwgdG1wKTsKIAogCWVycl9tYXNrID0gKFNDSElaT19QQ0lBRlNSX1BNQSB8IFNDSElaT19QQ0lBRlNSX1BUQSB8CiAJCSAgICBTQ0hJWk9fUENJQUZTUl9QUlRSWSB8IFNDSElaT19QQ0lBRlNSX1BQRVJSIHwKQEAgLTEwNzAsOCArOTM4LDcgQEAKIAkJICAgIFNDSElaT19QQ0lBRlNSX1NSVFJZIHwgU0NISVpPX1BDSUFGU1JfU1BFUlIgfAogCQkgICAgU0NISVpPX1BDSUFGU1JfU1RUTyk7CiAKLQlzY2hpem9fd3JpdGUocC0+cGJtX0EucGJtX3JlZ3MgKyBTQ0hJWk9fUENJX0FGU1IsIGVycl9tYXNrKTsKLQlzY2hpem9fd3JpdGUocC0+cGJtX0IucGJtX3JlZ3MgKyBTQ0hJWk9fUENJX0FGU1IsIGVycl9tYXNrKTsKKwlzY2hpem9fd3JpdGUocGJtLT5wYm1fcmVncyArIFNDSElaT19QQ0lfQUZTUiwgZXJyX21hc2spOwogCiAJZXJyX21hc2sgPSAoQlVTX0VSUk9SX0JBRENNRCB8IEJVU19FUlJPUl9TTk9PUF9HUiB8CiAJCSAgICBCVVNfRVJST1JfU05PT1BfUENJIHwgQlVTX0VSUk9SX1NOT09QX1JEIHwKQEAgLTEwODMsMjIgKzk1MCwxOCBAQAogCQkgICAgQlVTX0VSUk9SX0FQRVJSIHwgQlVTX0VSUk9SX1VOTUFQIHwKIAkJICAgIEJVU19FUlJPUl9CVVNFUlIgfCBCVVNfRVJST1JfVElNRU9VVCk7CiAKLQlzY2hpem9fd3JpdGUocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgU0NISVpPX1NBRkFSSV9FUlJDVFJMLAotCQkgICAgIChTQ0hJWk9fU0FGRVJSQ1RSTF9FTiB8IGVycl9tYXNrKSk7Ci0Jc2NoaXpvX3dyaXRlKHAtPnBibV9CLmNvbnRyb2xsZXJfcmVncyArIFNDSElaT19TQUZBUklfRVJSQ1RSTCwKKwlzY2hpem9fd3JpdGUocGJtLT5jb250cm9sbGVyX3JlZ3MgKyBTQ0hJWk9fU0FGQVJJX0VSUkNUUkwsCiAJCSAgICAgKFNDSElaT19TQUZFUlJDVFJMX0VOIHwgZXJyX21hc2spKTsKIAotCXNjaGl6b193cml0ZShwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQ0hJWk9fU0FGQVJJX0lSUUNUUkwsCi0JCSAgICAgKFNDSElaT19TQUZJUlFDVFJMX0VOIHwgKEJVU19FUlJPUl9VTk1BUCkpKTsKLQlzY2hpem9fd3JpdGUocC0+cGJtX0IuY29udHJvbGxlcl9yZWdzICsgU0NISVpPX1NBRkFSSV9JUlFDVFJMLAorCXNjaGl6b193cml0ZShwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNDSElaT19TQUZBUklfSVJRQ1RSTCwKIAkJICAgICAoU0NISVpPX1NBRklSUUNUUkxfRU4gfCAoQlVTX0VSUk9SX1VOTUFQKSkpOwogfQogCi1zdGF0aWMgdm9pZCBzY2hpem9fcmVnaXN0ZXJfZXJyb3JfaGFuZGxlcnMoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnApCitzdGF0aWMgdm9pZCBzY2hpem9fcmVnaXN0ZXJfZXJyb3JfaGFuZGxlcnMoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQogewotCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcDsKKwlzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOwogCXU2NCB0bXAsIGVycl9tYXNrLCBlcnJfbm9fbWFzazsKKwlpbnQgZXJyOwogCiAJLyogU2NoaXpvIElSUSBwcm9wZXJ0eSBsYXlvdXQgaXM6CiAJICogMDogUENJRVJSCkBAIC0xMTA4LDM5ICs5NzEsNDIgQEAKIAkgKiA0OiBQT1dFUiBGQUlMPwogCSAqLwogCi0JcGJtID0gcGJtX2Zvcl9pbm8ocCwgU0NISVpPX1VFX0lOTyk7Ci0Jb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBibS0+cHJvbV9ub2RlKTsKLQlpZiAob3ApCi0JCXJlcXVlc3RfaXJxKG9wLT5pcnFzWzFdLCBzY2hpem9fdWVfaW50ciwgSVJRRl9TSEFSRUQsCi0JCQkgICAgIlNDSElaT19VRSIsIHApOworCWlmIChwYm1fcm91dGVzX3RoaXNfaW5vKHBibSwgU0NISVpPX1VFX0lOTykpIHsKKwkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbMV0sIHNjaGl6b191ZV9pbnRyLCAwLAorCQkJCSAgIlNDSElaT19VRSIsIHBibSk7CisJCWlmIChlcnIpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IHJlZ2lzdGVyIFVFLCAiCisJCQkgICAgICAgImVycj0lZFxuIiwgcGJtLT5uYW1lLCBlcnIpOworCX0KKwlpZiAocGJtX3JvdXRlc190aGlzX2lubyhwYm0sIFNDSElaT19DRV9JTk8pKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5pcnFzWzJdLCBzY2hpem9fY2VfaW50ciwgMCwKKwkJCQkgICJTQ0hJWk9fQ0UiLCBwYm0pOworCQlpZiAoZXJyKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCByZWdpc3RlciBDRSwgIgorCQkJICAgICAgICJlcnI9JWRcbiIsIHBibS0+bmFtZSwgZXJyKTsKKwl9CisJZXJyID0gMDsKKwlpZiAocGJtX3JvdXRlc190aGlzX2lubyhwYm0sIFNDSElaT19QQ0lFUlJfQV9JTk8pKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5pcnFzWzBdLCBzY2hpem9fcGNpZXJyX2ludHIsIDAsCisJCQkJICAiU0NISVpPX1BDSUVSUiIsIHBibSk7CisJfSBlbHNlIGlmIChwYm1fcm91dGVzX3RoaXNfaW5vKHBibSwgU0NISVpPX1BDSUVSUl9CX0lOTykpIHsKKwkJZXJyID0gcmVxdWVzdF9pcnEob3AtPmlycXNbMF0sIHNjaGl6b19wY2llcnJfaW50ciwgMCwKKwkJCQkgICJTQ0hJWk9fUENJRVJSIiwgcGJtKTsKKwl9CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCByZWdpc3RlciBQQ0lFUlIsICIKKwkJICAgICAgICJlcnI9JWRcbiIsIHBibS0+bmFtZSwgZXJyKTsKIAotCXBibSA9IHBibV9mb3JfaW5vKHAsIFNDSElaT19DRV9JTk8pOwotCW9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwYm0tPnByb21fbm9kZSk7Ci0JaWYgKG9wKQotCQlyZXF1ZXN0X2lycShvcC0+aXJxc1syXSwgc2NoaXpvX2NlX2ludHIsIElSUUZfU0hBUkVELAotCQkJICAgICJTQ0hJWk8gQ0UiLCBwKTsKLQotCXBibSA9IHBibV9mb3JfaW5vKHAsIFNDSElaT19QQ0lFUlJfQV9JTk8pOwotCW9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwYm0tPnByb21fbm9kZSk7Ci0JaWYgKG9wKQotCQlyZXF1ZXN0X2lycShvcC0+aXJxc1swXSwgc2NoaXpvX3BjaWVycl9pbnRyLCBJUlFGX1NIQVJFRCwKLQkJCSAgICAiU0NISVpPIFBDSUVSUi1BIiwgcGJtKTsKLQotCi0JcGJtID0gcGJtX2Zvcl9pbm8ocCwgU0NISVpPX1BDSUVSUl9CX0lOTyk7Ci0Jb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBibS0+cHJvbV9ub2RlKTsKLQlpZiAob3ApCi0JCXJlcXVlc3RfaXJxKG9wLT5pcnFzWzBdLCBzY2hpem9fcGNpZXJyX2ludHIsIElSUUZfU0hBUkVELAotCQkJICAgICJTQ0hJWk8gUENJRVJSLUIiLCBwYm0pOwotCi0JcGJtID0gcGJtX2Zvcl9pbm8ocCwgU0NISVpPX1NFUlJfSU5PKTsKLQlvcCA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGJtLT5wcm9tX25vZGUpOwotCWlmIChvcCkKLQkJcmVxdWVzdF9pcnEob3AtPmlycXNbM10sIHNjaGl6b19zYWZhcmllcnJfaW50ciwgSVJRRl9TSEFSRUQsCi0JCQkgICAgIlNDSElaTyBTRVJSIiwgcCk7CisJaWYgKHBibV9yb3V0ZXNfdGhpc19pbm8ocGJtLCBTQ0hJWk9fU0VSUl9JTk8pKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKG9wLT5pcnFzWzNdLCBzY2hpem9fc2FmYXJpZXJyX2ludHIsIDAsCisJCQkJICAiU0NISVpPX1NFUlIiLCBwYm0pOworCQlpZiAoZXJyKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCByZWdpc3RlciBTRVJSLCAiCisJCQkgICAgICAgImVycj0lZFxuIiwgcGJtLT5uYW1lLCBlcnIpOworCX0KIAogCS8qIEVuYWJsZSBVRSBhbmQgQ0UgaW50ZXJydXB0cyBmb3IgY29udHJvbGxlci4gKi8KLQlzY2hpem9fd3JpdGUocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgU0NISVpPX0VDQ19DVFJMLAorCXNjaGl6b193cml0ZShwYm0tPmNvbnRyb2xsZXJfcmVncyArIFNDSElaT19FQ0NfQ1RSTCwKIAkJICAgICAoU0NISVpPX0VDQ0NUUkxfRUUgfAogCQkgICAgICBTQ0hJWk9fRUNDQ1RSTF9VRSB8CiAJCSAgICAgIFNDSElaT19FQ0NDVFJMX0NFKSk7CkBAIC0xMTU5LDI1ICsxMDI1LDEyIEBACiAJLyogRW5hYmxlIFBDSSBFcnJvciBpbnRlcnJ1cHRzIGFuZCBjbGVhciBlcnJvcgogCSAqIGJpdHMgZm9yIGVhY2ggUEJNLgogCSAqLwotCXRtcCA9IHNjaGl6b19yZWFkKHAtPnBibV9BLnBibV9yZWdzICsgU0NISVpPX1BDSV9DVFJMKTsKKwl0bXAgPSBzY2hpem9fcmVhZChwYm0tPnBibV9yZWdzICsgU0NISVpPX1BDSV9DVFJMKTsKIAl0bXAgfD0gZXJyX21hc2s7CiAJdG1wICY9IH5lcnJfbm9fbWFzazsKLQlzY2hpem9fd3JpdGUocC0+cGJtX0EucGJtX3JlZ3MgKyBTQ0hJWk9fUENJX0NUUkwsIHRtcCk7CisJc2NoaXpvX3dyaXRlKHBibS0+cGJtX3JlZ3MgKyBTQ0hJWk9fUENJX0NUUkwsIHRtcCk7CiAKLQlzY2hpem9fd3JpdGUocC0+cGJtX0EucGJtX3JlZ3MgKyBTQ0hJWk9fUENJX0FGU1IsCi0JCSAgICAgKFNDSElaT19QQ0lBRlNSX1BNQSB8IFNDSElaT19QQ0lBRlNSX1BUQSB8Ci0JCSAgICAgIFNDSElaT19QQ0lBRlNSX1BSVFJZIHwgU0NISVpPX1BDSUFGU1JfUFBFUlIgfAotCQkgICAgICBTQ0hJWk9fUENJQUZTUl9QVFRPIHwgU0NISVpPX1BDSUFGU1JfUFVOVVMgfAotCQkgICAgICBTQ0hJWk9fUENJQUZTUl9TTUEgfCBTQ0hJWk9fUENJQUZTUl9TVEEgfAotCQkgICAgICBTQ0hJWk9fUENJQUZTUl9TUlRSWSB8IFNDSElaT19QQ0lBRlNSX1NQRVJSIHwKLQkJICAgICAgU0NISVpPX1BDSUFGU1JfU1RUTyB8IFNDSElaT19QQ0lBRlNSX1NVTlVTKSk7Ci0KLQl0bXAgPSBzY2hpem9fcmVhZChwLT5wYm1fQi5wYm1fcmVncyArIFNDSElaT19QQ0lfQ1RSTCk7Ci0JdG1wIHw9IGVycl9tYXNrOwotCXRtcCAmPSB+ZXJyX25vX21hc2s7Ci0Jc2NoaXpvX3dyaXRlKHAtPnBibV9CLnBibV9yZWdzICsgU0NISVpPX1BDSV9DVFJMLCB0bXApOwotCi0Jc2NoaXpvX3dyaXRlKHAtPnBibV9CLnBibV9yZWdzICsgU0NISVpPX1BDSV9BRlNSLAorCXNjaGl6b193cml0ZShwYm0tPnBibV9yZWdzICsgU0NISVpPX1BDSV9BRlNSLAogCQkgICAgIChTQ0hJWk9fUENJQUZTUl9QTUEgfCBTQ0hJWk9fUENJQUZTUl9QVEEgfAogCQkgICAgICBTQ0hJWk9fUENJQUZTUl9QUlRSWSB8IFNDSElaT19QQ0lBRlNSX1BQRVJSIHwKIAkJICAgICAgU0NISVpPX1BDSUFGU1JfUFRUTyB8IFNDSElaT19QQ0lBRlNSX1BVTlVTIHwKQEAgLTEyMTAsMTEgKzEwNjMsOCBAQAogCQkgICAgICBCVVNfRVJST1JfQ1BVMFBTIHwgQlVTX0VSUk9SX0NQVTBQQik7CiAjZW5kaWYKIAotCXNjaGl6b193cml0ZShwLT5wYm1fQS5jb250cm9sbGVyX3JlZ3MgKyBTQ0hJWk9fU0FGQVJJX0VSUkNUUkwsCisJc2NoaXpvX3dyaXRlKHBibS0+Y29udHJvbGxlcl9yZWdzICsgU0NISVpPX1NBRkFSSV9FUlJDVFJMLAogCQkgICAgIChTQ0hJWk9fU0FGRVJSQ1RSTF9FTiB8IGVycl9tYXNrKSk7Ci0KLQlzY2hpem9fd3JpdGUocC0+cGJtX0EuY29udHJvbGxlcl9yZWdzICsgU0NISVpPX1NBRkFSSV9JUlFDVFJMLAotCQkgICAgIChTQ0hJWk9fU0FGSVJRQ1RSTF9FTiB8IChCVVNfRVJST1JfVU5NQVApKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBibV9jb25maWdfYnVzbWFzdGVyaW5nKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSkKQEAgLTEyMzQsMjcgKzEwODQsMTkgQEAKIAlwY2lfY29uZmlnX3dyaXRlOChhZGRyLCA2NCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNjaGl6b19zY2FuX2J1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCkKK3N0YXRpYyB2b2lkIHNjaGl6b19zY2FuX2J1cyhzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCiB7Ci0JcGJtX2NvbmZpZ19idXNtYXN0ZXJpbmcoJnAtPnBibV9CKTsKLQlwLT5wYm1fQi5pc182Nm1oel9jYXBhYmxlID0KLQkJKG9mX2ZpbmRfcHJvcGVydHkocC0+cGJtX0IucHJvbV9ub2RlLCAiNjZtaHotY2FwYWJsZSIsIE5VTEwpCi0JCSAhPSBOVUxMKTsKLQlwYm1fY29uZmlnX2J1c21hc3RlcmluZygmcC0+cGJtX0EpOwotCXAtPnBibV9BLmlzXzY2bWh6X2NhcGFibGUgPQotCQkob2ZfZmluZF9wcm9wZXJ0eShwLT5wYm1fQS5wcm9tX25vZGUsICI2Nm1oei1jYXBhYmxlIiwgTlVMTCkKKwlwYm1fY29uZmlnX2J1c21hc3RlcmluZyhwYm0pOworCXBibS0+aXNfNjZtaHpfY2FwYWJsZSA9CisJCShvZl9maW5kX3Byb3BlcnR5KHBibS0+cHJvbV9ub2RlLCAiNjZtaHotY2FwYWJsZSIsIE5VTEwpCiAJCSAhPSBOVUxMKTsKIAotCXAtPnBibV9CLnBjaV9idXMgPSBwY2lfc2Nhbl9vbmVfcGJtKCZwLT5wYm1fQik7Ci0JcC0+cGJtX0EucGNpX2J1cyA9IHBjaV9zY2FuX29uZV9wYm0oJnAtPnBibV9BKTsKKwlwYm0tPnBjaV9idXMgPSBwY2lfc2Nhbl9vbmVfcGJtKHBibSk7CiAKLQkvKiBBZnRlciB0aGUgUENJIGJ1cyBzY2FuIGlzIGNvbXBsZXRlLCB3ZSBjYW4gcmVnaXN0ZXIKLQkgKiB0aGUgZXJyb3IgaW50ZXJydXB0IGhhbmRsZXJzLgotCSAqLwotCWlmIChwLT5wYm1fQi5jaGlwX3R5cGUgPT0gUEJNX0NISVBfVFlQRV9UT01BVElMTE8pCi0JCXRvbWF0aWxsb19yZWdpc3Rlcl9lcnJvcl9oYW5kbGVycyhwKTsKKwlpZiAocGJtLT5jaGlwX3R5cGUgPT0gUEJNX0NISVBfVFlQRV9UT01BVElMTE8pCisJCXRvbWF0aWxsb19yZWdpc3Rlcl9lcnJvcl9oYW5kbGVycyhwYm0pOwogCWVsc2UKLQkJc2NoaXpvX3JlZ2lzdGVyX2Vycm9yX2hhbmRsZXJzKHApOworCQlzY2hpem9fcmVnaXN0ZXJfZXJyb3JfaGFuZGxlcnMocGJtKTsKIH0KIAogI2RlZmluZSBTQ0hJWk9fU1RSQlVGX0NPTlRST0wJCSgweDAyODAwVUwpCkBAIC0xNDkxLDEwICsxMzMzLDggQEAKIAkJCSAgICBpbnQgY2hpcF90eXBlKQogewogCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOwotCWNvbnN0IHVuc2lnbmVkIGludCAqYnVzcmFuZ2U7CiAJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtOwogCWNvbnN0IGNoYXIgKmNoaXBzZXRfbmFtZTsKLQljb25zdCB1MzIgKmlub19iaXRtYXA7CiAJaW50IGlzX3BibV9hOwogCiAJc3dpdGNoIChjaGlwX3R5cGUpIHsKQEAgLTE1MzEsNiArMTM3MSwxNSBAQAogCWVsc2UKIAkJcGJtID0gJnAtPnBibV9COwogCisJcGJtLT5uZXh0ID0gcGNpX3BibV9yb290OworCXBjaV9wYm1fcm9vdCA9IHBibTsKKworCXBibS0+c2Nhbl9idXMgPSBzY2hpem9fc2Nhbl9idXM7CisJcGJtLT5wY2lfb3BzID0gJnN1bjR1X3BjaV9vcHM7CisJcGJtLT5jb25maWdfc3BhY2VfcmVnX2JpdHMgPSA4OworCisJcGJtLT5pbmRleCA9IHBjaV9udW1fcGJtcysrOworCiAJcGJtLT5wb3J0aWQgPSBwb3J0aWQ7CiAJcGJtLT5wYXJlbnQgPSBwOwogCXBibS0+cHJvbV9ub2RlID0gZHA7CkBAIC0xNTU1LDEzICsxNDA0LDcgQEAKIAogCXBjaV9kZXRlcm1pbmVfbWVtX2lvX3NwYWNlKHBibSk7CiAKLQlpbm9fYml0bWFwID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiaW5vLWJpdG1hcCIsIE5VTEwpOwotCXBibS0+aW5vX2JpdG1hcCA9ICgoKHU2NClpbm9fYml0bWFwWzFdIDw8IDMyVUwpIHwKLQkJCSAgICgodTY0KWlub19iaXRtYXBbMF0gPDwgIDBVTCkpOwotCi0JYnVzcmFuZ2UgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJidXMtcmFuZ2UiLCBOVUxMKTsKLQlwYm0tPnBjaV9maXJzdF9idXNubyA9IGJ1c3JhbmdlWzBdOwotCXBibS0+cGNpX2xhc3RfYnVzbm8gPSBidXNyYW5nZVsxXTsKKwlwY2lfZ2V0X3BibV9wcm9wcyhwYm0pOwogCiAJc2NoaXpvX3BibV9pb21tdV9pbml0KHBibSk7CiAJc2NoaXpvX3BibV9zdHJidWZfaW5pdChwYm0pOwpAQCAtMTU4MCwyMyArMTQyMywxNSBAQAogc3RhdGljIHZvaWQgX19zY2hpem9faW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjaGFyICptb2RlbF9uYW1lLCBpbnQgY2hpcF90eXBlKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwOworCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKIAlzdHJ1Y3QgaW9tbXUgKmlvbW11OwogCXUzMiBwb3J0aWQ7CiAKIAlwb3J0aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJwb3J0aWQiLCAweGZmKTsKIAotCWZvciAocCA9IHBjaV9jb250cm9sbGVyX3Jvb3Q7IHA7IHAgPSBwLT5uZXh0KSB7Ci0JCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKLQotCQlpZiAocC0+cGJtX0EucHJvbV9ub2RlICYmIHAtPnBibV9CLnByb21fbm9kZSkKLQkJCWNvbnRpbnVlOwotCi0JCXBibSA9IChwLT5wYm1fQS5wcm9tX25vZGUgPwotCQkgICAgICAgJnAtPnBibV9BIDoKLQkJICAgICAgICZwLT5wYm1fQik7Ci0KKwlmb3IgKHBibSA9IHBjaV9wYm1fcm9vdDsgcGJtOyBwYm0gPSBwYm0tPm5leHQpIHsKIAkJaWYgKHBvcnRpZF9jb21wYXJlKHBibS0+cG9ydGlkLCBwb3J0aWQsIGNoaXBfdHlwZSkpIHsKLQkJCXNjaGl6b19wYm1faW5pdChwLCBkcCwgcG9ydGlkLCBjaGlwX3R5cGUpOworCQkJc2NoaXpvX3BibV9pbml0KHBibS0+cGFyZW50LCBkcCwgcG9ydGlkLCBjaGlwX3R5cGUpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTYxNywxMyArMTQ1Miw2IEBACiAKIAlwLT5wYm1fQi5pb21tdSA9IGlvbW11OwogCi0JcC0+bmV4dCA9IHBjaV9jb250cm9sbGVyX3Jvb3Q7Ci0JcGNpX2NvbnRyb2xsZXJfcm9vdCA9IHA7Ci0KLQlwLT5pbmRleCA9IHBjaV9udW1fY29udHJvbGxlcnMrKzsKLQlwLT5zY2FuX2J1cyA9IHNjaGl6b19zY2FuX2J1czsKLQlwLT5wY2lfb3BzID0gJnNjaGl6b19vcHM7Ci0KIAkvKiBMaWtlIFBTWUNITyB3ZSBoYXZlIGEgMkdCIGFsaWduZWQgYXJlYSBmb3IgbWVtb3J5IHNwYWNlLiAqLwogCXBjaV9tZW1zcGFjZV9tYXNrID0gMHg3ZmZmZmZmZlVMOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwppbmRleCAxY2NmNGM5Li42YjNmZTJjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKQEAgLTEyLDggKzEyLDggQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAKLSNpbmNsdWRlIDxhc20vcGJtLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS91cGEuaD4KQEAgLTI3LDYgKzI3LDkgQEAKIAogI2luY2x1ZGUgInBjaV9zdW40di5oIgogCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2cGNpX21ham9yID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHZwY2lfbWlub3IgPSAxOworCiAjZGVmaW5lIFBHTElTVF9ORU5UUwkoUEFHRV9TSVpFIC8gc2l6ZW9mKHU2NCkpCiAKIHN0cnVjdCBpb21tdV9iYXRjaCB7CkBAIC01OTQsMTEyICs1OTcsMTUgQEAKIAkuZG1hX3N5bmNfc2dfZm9yX2NwdQkJPSBwY2lfNHZfZG1hX3N5bmNfc2dfZm9yX2NwdSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9zdW40dl9vdXRfb2ZfcmFuZ2Uoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2aWNlLCB1bnNpZ25lZCBpbnQgZnVuYykKLXsKLQlpZiAoYnVzIDwgcGJtLT5wY2lfZmlyc3RfYnVzbm8gfHwKLQkgICAgYnVzID4gcGJtLT5wY2lfbGFzdF9idXNubykKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGNpX3N1bjR2X3JlYWRfcGNpX2NmZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzX2RldiwgdW5zaWduZWQgaW50IGRldmZuLAotCQkJCSAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBidXNfZGV2LT5zeXNkYXRhOwotCXUzMiBkZXZoYW5kbGUgPSBwYm0tPmRldmhhbmRsZTsKLQl1bnNpZ25lZCBpbnQgYnVzID0gYnVzX2Rldi0+bnVtYmVyOwotCXVuc2lnbmVkIGludCBkZXZpY2UgPSBQQ0lfU0xPVChkZXZmbik7Ci0JdW5zaWduZWQgaW50IGZ1bmMgPSBQQ0lfRlVOQyhkZXZmbik7Ci0JdW5zaWduZWQgbG9uZyByZXQ7Ci0KLQlpZiAoYnVzX2RldiA9PSBwYm0tPnBjaV9idXMgJiYgZGV2Zm4gPT0gMHgwMCkKLQkJcmV0dXJuIHBjaV9ob3N0X2JyaWRnZV9yZWFkX3BjaV9jZmcoYnVzX2RldiwgZGV2Zm4sIHdoZXJlLAotCQkJCQkJICAgIHNpemUsIHZhbHVlKTsKLQlpZiAocGNpX3N1bjR2X291dF9vZl9yYW5nZShwYm0sIGJ1cywgZGV2aWNlLCBmdW5jKSkgewotCQlyZXQgPSB+MFVMOwotCX0gZWxzZSB7Ci0JCXJldCA9IHBjaV9zdW40dl9jb25maWdfZ2V0KGRldmhhbmRsZSwKLQkJCQlIVl9QQ0lfREVWSUNFX0JVSUxEKGJ1cywgZGV2aWNlLCBmdW5jKSwKLQkJCQl3aGVyZSwgc2l6ZSk7Ci0jaWYgMAotCQlwcmludGsoInJjZmc6IFsleDoleDoleDolZF09WyVseF1cbiIsCi0JCSAgICAgICBkZXZoYW5kbGUsIEhWX1BDSV9ERVZJQ0VfQlVJTEQoYnVzLCBkZXZpY2UsIGZ1bmMpLAotCQkgICAgICAgd2hlcmUsIHNpemUsIHJldCk7Ci0jZW5kaWYKLQl9Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQkqdmFsdWUgPSByZXQgJiAweGZmOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCSp2YWx1ZSA9IHJldCAmIDB4ZmZmZjsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQkqdmFsdWUgPSByZXQgJiAweGZmZmZmZmZmOwotCQlicmVhazsKLQl9OwotCi0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IHBjaV9zdW40dl93cml0ZV9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkJICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQotewotCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9IGJ1c19kZXYtPnN5c2RhdGE7Ci0JdTMyIGRldmhhbmRsZSA9IHBibS0+ZGV2aGFuZGxlOwotCXVuc2lnbmVkIGludCBidXMgPSBidXNfZGV2LT5udW1iZXI7Ci0JdW5zaWduZWQgaW50IGRldmljZSA9IFBDSV9TTE9UKGRldmZuKTsKLQl1bnNpZ25lZCBpbnQgZnVuYyA9IFBDSV9GVU5DKGRldmZuKTsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQotCWlmIChidXNfZGV2ID09IHBibS0+cGNpX2J1cyAmJiBkZXZmbiA9PSAweDAwKQotCQlyZXR1cm4gcGNpX2hvc3RfYnJpZGdlX3dyaXRlX3BjaV9jZmcoYnVzX2RldiwgZGV2Zm4sIHdoZXJlLAotCQkJCQkJICAgICBzaXplLCB2YWx1ZSk7Ci0JaWYgKHBjaV9zdW40dl9vdXRfb2ZfcmFuZ2UocGJtLCBidXMsIGRldmljZSwgZnVuYykpIHsKLQkJLyogRG8gbm90aGluZy4gKi8KLQl9IGVsc2UgewotCQlyZXQgPSBwY2lfc3VuNHZfY29uZmlnX3B1dChkZXZoYW5kbGUsCi0JCQkJSFZfUENJX0RFVklDRV9CVUlMRChidXMsIGRldmljZSwgZnVuYyksCi0JCQkJd2hlcmUsIHNpemUsIHZhbHVlKTsKLSNpZiAwCi0JCXByaW50aygid2NmZzogWyV4OiV4OiV4OiVkXSB2WyV4XSA9PSBbJWx4XVxuIiwKLQkJICAgICAgIGRldmhhbmRsZSwgSFZfUENJX0RFVklDRV9CVUlMRChidXMsIGRldmljZSwgZnVuYyksCi0JCSAgICAgICB3aGVyZSwgc2l6ZSwgdmFsdWUsIHJldCk7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfb3BzIHBjaV9zdW40dl9vcHMgPSB7Ci0JLnJlYWQgPQkJcGNpX3N1bjR2X3JlYWRfcGNpX2NmZywKLQkud3JpdGUgPQlwY2lfc3VuNHZfd3JpdGVfcGNpX2NmZywKLX07Ci0KLQotc3RhdGljIHZvaWQgcGJtX3NjYW5fYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwLAotCQkJIHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSkKLXsKLQlwYm0tPnBjaV9idXMgPSBwY2lfc2Nhbl9vbmVfcGJtKHBibSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBjaV9zdW40dl9zY2FuX2J1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCkKK3N0YXRpYyB2b2lkIHBjaV9zdW40dl9zY2FuX2J1cyhzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCiB7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CiAKLQlpZiAoKGRwID0gcC0+cGJtX0EucHJvbV9ub2RlKSAhPSBOVUxMKSB7Ci0JCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAiNjZtaHotY2FwYWJsZSIsIE5VTEwpOwotCQlwLT5wYm1fQS5pc182Nm1oel9jYXBhYmxlID0gKHByb3AgIT0gTlVMTCk7Ci0KLQkJcGJtX3NjYW5fYnVzKHAsICZwLT5wYm1fQSk7Ci0JfQotCWlmICgoZHAgPSBwLT5wYm1fQi5wcm9tX25vZGUpICE9IE5VTEwpIHsKLQkJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICI2Nm1oei1jYXBhYmxlIiwgTlVMTCk7Ci0JCXAtPnBibV9CLmlzXzY2bWh6X2NhcGFibGUgPSAocHJvcCAhPSBOVUxMKTsKLQotCQlwYm1fc2Nhbl9idXMocCwgJnAtPnBibV9CKTsKLQl9CisJZHAgPSBwYm0tPnByb21fbm9kZTsKKwlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgIjY2bWh6LWNhcGFibGUiLCBOVUxMKTsKKwlwYm0tPmlzXzY2bWh6X2NhcGFibGUgPSAocHJvcCAhPSBOVUxMKTsKKwlwYm0tPnBjaV9idXMgPSBwY2lfc2Nhbl9vbmVfcGJtKHBibSk7CiAKIAkvKiBYWFggcmVnaXN0ZXIgZXJyb3IgaW50ZXJydXB0IGhhbmRsZXJzIFhYWCAqLwogfQpAQCAtNzM2LDkgKzY0Miw4IEBACiB7CiAJc3RydWN0IGlvbW11ICppb21tdSA9IHBibS0+aW9tbXU7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCXVuc2lnbmVkIGxvbmcgbnVtX3RzYl9lbnRyaWVzLCBzejsKKwl1bnNpZ25lZCBsb25nIG51bV90c2JfZW50cmllcywgc3osIHRzYnNpemU7CiAJdTMyIHZkbWFbMl0sIGRtYV9tYXNrLCBkbWFfb2Zmc2V0OwotCWludCB0c2JzaXplOwogCiAJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkocGJtLT5wcm9tX25vZGUsICJ2aXJ0dWFsLWRtYSIsIE5VTEwpOwogCWlmIChwcm9wKSB7CkBAIC03NTIsMzEgKzY1NywxNSBAQAogCQl2ZG1hWzFdID0gMHg4MDAwMDAwMDsKIAl9CiAKLQlkbWFfbWFzayA9IHZkbWFbMF07Ci0Jc3dpdGNoICh2ZG1hWzFdKSB7Ci0JCWNhc2UgMHgyMDAwMDAwMDoKLQkJCWRtYV9tYXNrIHw9IDB4MWZmZmZmZmY7Ci0JCQl0c2JzaXplID0gNjQ7Ci0JCQlicmVhazsKLQotCQljYXNlIDB4NDAwMDAwMDA6Ci0JCQlkbWFfbWFzayB8PSAweDNmZmZmZmZmOwotCQkJdHNic2l6ZSA9IDEyODsKLQkJCWJyZWFrOwotCi0JCWNhc2UgMHg4MDAwMDAwMDoKLQkJCWRtYV9tYXNrIHw9IDB4N2ZmZmZmZmY7Ci0JCQl0c2JzaXplID0gMjU2OwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByb21fcHJpbnRmKCJQQ0ktU1VONFY6IHN0cmFuZ2UgdmlydHVhbC1kbWEgc2l6ZS5cbiIpOwotCQkJcHJvbV9oYWx0KCk7CisJaWYgKCh2ZG1hWzBdIHwgdmRtYVsxXSkgJiB+SU9fUEFHRV9NQVNLKSB7CisJCXByb21fcHJpbnRmKCJQQ0ktU1VONFY6IHN0cmFuZ2UgdmlydHVhbC1kbWFbJTA4eDolMDh4XS5cbiIsCisJCQkgICAgdmRtYVswXSwgdmRtYVsxXSk7CisJCXByb21faGFsdCgpOwogCX07CiAKLQl0c2JzaXplICo9ICg4ICogMTAyNCk7Ci0KLQludW1fdHNiX2VudHJpZXMgPSB0c2JzaXplIC8gc2l6ZW9mKGlvcHRlX3QpOworCWRtYV9tYXNrID0gKHJvdW5kdXBfcG93X29mX3R3byh2ZG1hWzFdKSAtIDFVTCk7CisJbnVtX3RzYl9lbnRyaWVzID0gdmRtYVsxXSAvIElPX1BBR0VfU0laRTsKKwl0c2JzaXplID0gbnVtX3RzYl9lbnRyaWVzICogc2l6ZW9mKGlvcHRlX3QpOwogCiAJZG1hX29mZnNldCA9IHZkbWFbMF07CiAKQEAgLTc4Nyw3ICs2NzYsNyBAQAogCWlvbW11LT5kbWFfYWRkcl9tYXNrID0gZG1hX21hc2s7CiAKIAkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgZnJlZSBhcmVhIG1hcC4gICovCi0Jc3ogPSBudW1fdHNiX2VudHJpZXMgLyA4OworCXN6ID0gKG51bV90c2JfZW50cmllcyArIDcpIC8gODsKIAlzeiA9IChzeiArIDdVTCkgJiB+N1VMOwogCWlvbW11LT5hcmVuYS5tYXAgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlvbW11LT5hcmVuYS5tYXApIHsKQEAgLTgwMiwyMCArNjkxLDYgQEAKIAkJICAgICAgIHBibS0+bmFtZSwgc3opOwogfQogCi1zdGF0aWMgdm9pZCBwY2lfc3VuNHZfZ2V0X2J1c19yYW5nZShzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCi17Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCXVuc2lnbmVkIGludCAqYnVzcmFuZ2U7Ci0KLQlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShwYm0tPnByb21fbm9kZSwgImJ1cy1yYW5nZSIsIE5VTEwpOwotCi0JYnVzcmFuZ2UgPSBwcm9wLT52YWx1ZTsKLQotCXBibS0+cGNpX2ZpcnN0X2J1c25vID0gYnVzcmFuZ2VbMF07Ci0JcGJtLT5wY2lfbGFzdF9idXNubyA9IGJ1c3JhbmdlWzFdOwotCi19Ci0KICNpZmRlZiBDT05GSUdfUENJX01TSQogc3RydWN0IHBjaV9zdW40dl9tc2lxX2VudHJ5IHsKIAl1NjQJCXZlcnNpb25fdHlwZTsKQEAgLTg0Myw3ICs3MTgsNyBAQAogCiAJdTY0CQltc2lfYWRkcmVzczsKIAotCS8qIFRoZSBmb3JtYXQgb2YgdGhpcyB2YWx1ZSBpcyBtZXNzYWdlIHR5cGUgZGVwZW5kYW50LgorCS8qIFRoZSBmb3JtYXQgb2YgdGhpcyB2YWx1ZSBpcyBtZXNzYWdlIHR5cGUgZGVwZW5kZW50LgogCSAqIEZvciBNU0kgYml0cyAxNTowIGFyZSB0aGUgZGF0YSBmcm9tIHRoZSBNU0kgcGFja2V0LgogCSAqIEZvciBNU0ktWCBiaXRzIDMxOjAgYXJlIHRoZSBkYXRhIGZyb20gdGhlIE1TSSBwYWNrZXQuCiAJICogRm9yIE1TRywgdGhlIG1lc3NhZ2UgY29kZSBhbmQgbWVzc2FnZSByb3V0aW5nIGNvZGUgd2hlcmU6CkBAIC0xMDE5LDExNCArODk0LDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIHZvaWQgcGNpX3N1bjR2X21zaV9pbml0KHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSkKLXsKLQljb25zdCB1MzIgKnZhbDsKLQlpbnQgbGVuOwotCi0JdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KHBibS0+cHJvbV9ub2RlLCAiI21zaS1lcXMiLCAmbGVuKTsKLQlpZiAoIXZhbCB8fCBsZW4gIT0gNCkKLQkJZ290byBub19tc2k7Ci0JcGJtLT5tc2lxX251bSA9ICp2YWw7Ci0JaWYgKHBibS0+bXNpcV9udW0pIHsKLQkJY29uc3Qgc3RydWN0IG1zaXFfcHJvcCB7Ci0JCQl1MzIgZmlyc3RfbXNpcTsKLQkJCXUzMiBudW1fbXNpcTsKLQkJCXUzMiBmaXJzdF9kZXZpbm87Ci0JCX0gKm1xcDsKLQkJY29uc3Qgc3RydWN0IG1zaV9yYW5nZV9wcm9wIHsKLQkJCXUzMiBmaXJzdF9tc2k7Ci0JCQl1MzIgbnVtX21zaTsKLQkJfSAqbXJuZzsKLQkJY29uc3Qgc3RydWN0IGFkZHJfcmFuZ2VfcHJvcCB7Ci0JCQl1MzIgbXNpMzJfaGlnaDsKLQkJCXUzMiBtc2kzMl9sb3c7Ci0JCQl1MzIgbXNpMzJfbGVuOwotCQkJdTMyIG1zaTY0X2hpZ2g7Ci0JCQl1MzIgbXNpNjRfbG93OwotCQkJdTMyIG1zaTY0X2xlbjsKLQkJfSAqYXJuZzsKLQotCQl2YWwgPSBvZl9nZXRfcHJvcGVydHkocGJtLT5wcm9tX25vZGUsICJtc2ktZXEtc2l6ZSIsICZsZW4pOwotCQlpZiAoIXZhbCB8fCBsZW4gIT0gNCkKLQkJCWdvdG8gbm9fbXNpOwotCi0JCXBibS0+bXNpcV9lbnRfY291bnQgPSAqdmFsOwotCi0JCW1xcCA9IG9mX2dldF9wcm9wZXJ0eShwYm0tPnByb21fbm9kZSwKLQkJCQkgICAgICAibXNpLWVxLXRvLWRldmlubyIsICZsZW4pOwotCQlpZiAoIW1xcCB8fCBsZW4gIT0gc2l6ZW9mKHN0cnVjdCBtc2lxX3Byb3ApKQotCQkJZ290byBub19tc2k7Ci0KLQkJcGJtLT5tc2lxX2ZpcnN0ID0gbXFwLT5maXJzdF9tc2lxOwotCQlwYm0tPm1zaXFfZmlyc3RfZGV2aW5vID0gbXFwLT5maXJzdF9kZXZpbm87Ci0KLQkJdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KHBibS0+cHJvbV9ub2RlLCAiI21zaSIsICZsZW4pOwotCQlpZiAoIXZhbCB8fCBsZW4gIT0gNCkKLQkJCWdvdG8gbm9fbXNpOwotCQlwYm0tPm1zaV9udW0gPSAqdmFsOwotCi0JCW1ybmcgPSBvZl9nZXRfcHJvcGVydHkocGJtLT5wcm9tX25vZGUsICJtc2ktcmFuZ2VzIiwgJmxlbik7Ci0JCWlmICghbXJuZyB8fCBsZW4gIT0gc2l6ZW9mKHN0cnVjdCBtc2lfcmFuZ2VfcHJvcCkpCi0JCQlnb3RvIG5vX21zaTsKLQkJcGJtLT5tc2lfZmlyc3QgPSBtcm5nLT5maXJzdF9tc2k7Ci0KLQkJdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KHBibS0+cHJvbV9ub2RlLCAibXNpLWRhdGEtbWFzayIsICZsZW4pOwotCQlpZiAoIXZhbCB8fCBsZW4gIT0gNCkKLQkJCWdvdG8gbm9fbXNpOwotCQlwYm0tPm1zaV9kYXRhX21hc2sgPSAqdmFsOwotCi0JCXZhbCA9IG9mX2dldF9wcm9wZXJ0eShwYm0tPnByb21fbm9kZSwgIm1zaXgtZGF0YS13aWR0aCIsICZsZW4pOwotCQlpZiAoIXZhbCB8fCBsZW4gIT0gNCkKLQkJCWdvdG8gbm9fbXNpOwotCQlwYm0tPm1zaXhfZGF0YV93aWR0aCA9ICp2YWw7Ci0KLQkJYXJuZyA9IG9mX2dldF9wcm9wZXJ0eShwYm0tPnByb21fbm9kZSwgIm1zaS1hZGRyZXNzLXJhbmdlcyIsCi0JCQkJICAgICAgICZsZW4pOwotCQlpZiAoIWFybmcgfHwgbGVuICE9IHNpemVvZihzdHJ1Y3QgYWRkcl9yYW5nZV9wcm9wKSkKLQkJCWdvdG8gbm9fbXNpOwotCQlwYm0tPm1zaTMyX3N0YXJ0ID0gKCh1NjQpYXJuZy0+bXNpMzJfaGlnaCA8PCAzMikgfAotCQkJKHU2NCkgYXJuZy0+bXNpMzJfbG93OwotCQlwYm0tPm1zaTY0X3N0YXJ0ID0gKCh1NjQpYXJuZy0+bXNpNjRfaGlnaCA8PCAzMikgfAotCQkJKHU2NCkgYXJuZy0+bXNpNjRfbG93OwotCQlwYm0tPm1zaTMyX2xlbiA9IGFybmctPm1zaTMyX2xlbjsKLQkJcGJtLT5tc2k2NF9sZW4gPSBhcm5nLT5tc2k2NF9sZW47Ci0KLQkJaWYgKG1zaV9iaXRtYXBfYWxsb2MocGJtKSkKLQkJCWdvdG8gbm9fbXNpOwotCi0JCWlmIChtc2lfcXVldWVfYWxsb2MocGJtKSkgewotCQkJbXNpX2JpdG1hcF9mcmVlKHBibSk7Ci0JCQlnb3RvIG5vX21zaTsKLQkJfQotCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBNU0kgUXVldWUgZmlyc3RbJXVdIG51bVsldV0gY291bnRbJXVdICIKLQkJICAgICAgICJkZXZpbm9bMHgleF1cbiIsCi0JCSAgICAgICBwYm0tPm5hbWUsCi0JCSAgICAgICBwYm0tPm1zaXFfZmlyc3QsIHBibS0+bXNpcV9udW0sCi0JCSAgICAgICBwYm0tPm1zaXFfZW50X2NvdW50LAotCQkgICAgICAgcGJtLT5tc2lxX2ZpcnN0X2Rldmlubyk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBNU0kgZmlyc3RbJXVdIG51bVsldV0gbWFza1sweCV4XSAiCi0JCSAgICAgICAid2lkdGhbJXVdXG4iLAotCQkgICAgICAgcGJtLT5uYW1lLAotCQkgICAgICAgcGJtLT5tc2lfZmlyc3QsIHBibS0+bXNpX251bSwgcGJtLT5tc2lfZGF0YV9tYXNrLAotCQkgICAgICAgcGJtLT5tc2l4X2RhdGFfd2lkdGgpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogTVNJIGFkZHIzMlsweCVseDoweCV4XSAiCi0JCSAgICAgICAiYWRkcjY0WzB4JWx4OjB4JXhdXG4iLAotCQkgICAgICAgcGJtLT5uYW1lLAotCQkgICAgICAgcGJtLT5tc2kzMl9zdGFydCwgcGJtLT5tc2kzMl9sZW4sCi0JCSAgICAgICBwYm0tPm1zaTY0X3N0YXJ0LCBwYm0tPm1zaTY0X2xlbik7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBNU0kgcXVldWVzIGF0IFJBIFslcF1cbiIsCi0JCSAgICAgICBwYm0tPm5hbWUsCi0JCSAgICAgICBwYm0tPm1zaV9xdWV1ZXMpOwotCX0KLQotCXJldHVybjsKLQotbm9fbXNpOgotCXBibS0+bXNpcV9udW0gPSAwOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBNU0kgc3VwcG9ydC5cbiIsIHBibS0+bmFtZSk7Ci19CiAKIHN0YXRpYyBpbnQgYWxsb2NfbXNpKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSkKIHsKQEAgLTEyNDUsNiArMTAxMiwxMTcgQEAKIAkgKi8KIAlzdW40dl9kZXN0cm95X21zaSh2aXJ0X2lycSk7CiB9CisKK3N0YXRpYyB2b2lkIHBjaV9zdW40dl9tc2lfaW5pdChzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCit7CisJY29uc3QgdTMyICp2YWw7CisJaW50IGxlbjsKKworCXZhbCA9IG9mX2dldF9wcm9wZXJ0eShwYm0tPnByb21fbm9kZSwgIiNtc2ktZXFzIiwgJmxlbik7CisJaWYgKCF2YWwgfHwgbGVuICE9IDQpCisJCWdvdG8gbm9fbXNpOworCXBibS0+bXNpcV9udW0gPSAqdmFsOworCWlmIChwYm0tPm1zaXFfbnVtKSB7CisJCWNvbnN0IHN0cnVjdCBtc2lxX3Byb3AgeworCQkJdTMyIGZpcnN0X21zaXE7CisJCQl1MzIgbnVtX21zaXE7CisJCQl1MzIgZmlyc3RfZGV2aW5vOworCQl9ICptcXA7CisJCWNvbnN0IHN0cnVjdCBtc2lfcmFuZ2VfcHJvcCB7CisJCQl1MzIgZmlyc3RfbXNpOworCQkJdTMyIG51bV9tc2k7CisJCX0gKm1ybmc7CisJCWNvbnN0IHN0cnVjdCBhZGRyX3JhbmdlX3Byb3AgeworCQkJdTMyIG1zaTMyX2hpZ2g7CisJCQl1MzIgbXNpMzJfbG93OworCQkJdTMyIG1zaTMyX2xlbjsKKwkJCXUzMiBtc2k2NF9oaWdoOworCQkJdTMyIG1zaTY0X2xvdzsKKwkJCXUzMiBtc2k2NF9sZW47CisJCX0gKmFybmc7CisKKwkJdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KHBibS0+cHJvbV9ub2RlLCAibXNpLWVxLXNpemUiLCAmbGVuKTsKKwkJaWYgKCF2YWwgfHwgbGVuICE9IDQpCisJCQlnb3RvIG5vX21zaTsKKworCQlwYm0tPm1zaXFfZW50X2NvdW50ID0gKnZhbDsKKworCQltcXAgPSBvZl9nZXRfcHJvcGVydHkocGJtLT5wcm9tX25vZGUsCisJCQkJICAgICAgIm1zaS1lcS10by1kZXZpbm8iLCAmbGVuKTsKKwkJaWYgKCFtcXAgfHwgbGVuICE9IHNpemVvZihzdHJ1Y3QgbXNpcV9wcm9wKSkKKwkJCWdvdG8gbm9fbXNpOworCisJCXBibS0+bXNpcV9maXJzdCA9IG1xcC0+Zmlyc3RfbXNpcTsKKwkJcGJtLT5tc2lxX2ZpcnN0X2RldmlubyA9IG1xcC0+Zmlyc3RfZGV2aW5vOworCisJCXZhbCA9IG9mX2dldF9wcm9wZXJ0eShwYm0tPnByb21fbm9kZSwgIiNtc2kiLCAmbGVuKTsKKwkJaWYgKCF2YWwgfHwgbGVuICE9IDQpCisJCQlnb3RvIG5vX21zaTsKKwkJcGJtLT5tc2lfbnVtID0gKnZhbDsKKworCQltcm5nID0gb2ZfZ2V0X3Byb3BlcnR5KHBibS0+cHJvbV9ub2RlLCAibXNpLXJhbmdlcyIsICZsZW4pOworCQlpZiAoIW1ybmcgfHwgbGVuICE9IHNpemVvZihzdHJ1Y3QgbXNpX3JhbmdlX3Byb3ApKQorCQkJZ290byBub19tc2k7CisJCXBibS0+bXNpX2ZpcnN0ID0gbXJuZy0+Zmlyc3RfbXNpOworCisJCXZhbCA9IG9mX2dldF9wcm9wZXJ0eShwYm0tPnByb21fbm9kZSwgIm1zaS1kYXRhLW1hc2siLCAmbGVuKTsKKwkJaWYgKCF2YWwgfHwgbGVuICE9IDQpCisJCQlnb3RvIG5vX21zaTsKKwkJcGJtLT5tc2lfZGF0YV9tYXNrID0gKnZhbDsKKworCQl2YWwgPSBvZl9nZXRfcHJvcGVydHkocGJtLT5wcm9tX25vZGUsICJtc2l4LWRhdGEtd2lkdGgiLCAmbGVuKTsKKwkJaWYgKCF2YWwgfHwgbGVuICE9IDQpCisJCQlnb3RvIG5vX21zaTsKKwkJcGJtLT5tc2l4X2RhdGFfd2lkdGggPSAqdmFsOworCisJCWFybmcgPSBvZl9nZXRfcHJvcGVydHkocGJtLT5wcm9tX25vZGUsICJtc2ktYWRkcmVzcy1yYW5nZXMiLAorCQkJCSAgICAgICAmbGVuKTsKKwkJaWYgKCFhcm5nIHx8IGxlbiAhPSBzaXplb2Yoc3RydWN0IGFkZHJfcmFuZ2VfcHJvcCkpCisJCQlnb3RvIG5vX21zaTsKKwkJcGJtLT5tc2kzMl9zdGFydCA9ICgodTY0KWFybmctPm1zaTMyX2hpZ2ggPDwgMzIpIHwKKwkJCSh1NjQpIGFybmctPm1zaTMyX2xvdzsKKwkJcGJtLT5tc2k2NF9zdGFydCA9ICgodTY0KWFybmctPm1zaTY0X2hpZ2ggPDwgMzIpIHwKKwkJCSh1NjQpIGFybmctPm1zaTY0X2xvdzsKKwkJcGJtLT5tc2kzMl9sZW4gPSBhcm5nLT5tc2kzMl9sZW47CisJCXBibS0+bXNpNjRfbGVuID0gYXJuZy0+bXNpNjRfbGVuOworCisJCWlmIChtc2lfYml0bWFwX2FsbG9jKHBibSkpCisJCQlnb3RvIG5vX21zaTsKKworCQlpZiAobXNpX3F1ZXVlX2FsbG9jKHBibSkpIHsKKwkJCW1zaV9iaXRtYXBfZnJlZShwYm0pOworCQkJZ290byBub19tc2k7CisJCX0KKworCQlwcmludGsoS0VSTl9JTkZPICIlczogTVNJIFF1ZXVlIGZpcnN0WyV1XSBudW1bJXVdIGNvdW50WyV1XSAiCisJCSAgICAgICAiZGV2aW5vWzB4JXhdXG4iLAorCQkgICAgICAgcGJtLT5uYW1lLAorCQkgICAgICAgcGJtLT5tc2lxX2ZpcnN0LCBwYm0tPm1zaXFfbnVtLAorCQkgICAgICAgcGJtLT5tc2lxX2VudF9jb3VudCwKKwkJICAgICAgIHBibS0+bXNpcV9maXJzdF9kZXZpbm8pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogTVNJIGZpcnN0WyV1XSBudW1bJXVdIG1hc2tbMHgleF0gIgorCQkgICAgICAgIndpZHRoWyV1XVxuIiwKKwkJICAgICAgIHBibS0+bmFtZSwKKwkJICAgICAgIHBibS0+bXNpX2ZpcnN0LCBwYm0tPm1zaV9udW0sIHBibS0+bXNpX2RhdGFfbWFzaywKKwkJICAgICAgIHBibS0+bXNpeF9kYXRhX3dpZHRoKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1TSSBhZGRyMzJbMHglbHg6MHgleF0gIgorCQkgICAgICAgImFkZHI2NFsweCVseDoweCV4XVxuIiwKKwkJICAgICAgIHBibS0+bmFtZSwKKwkJICAgICAgIHBibS0+bXNpMzJfc3RhcnQsIHBibS0+bXNpMzJfbGVuLAorCQkgICAgICAgcGJtLT5tc2k2NF9zdGFydCwgcGJtLT5tc2k2NF9sZW4pOworCQlwcmludGsoS0VSTl9JTkZPICIlczogTVNJIHF1ZXVlcyBhdCBSQSBbJXBdXG4iLAorCQkgICAgICAgcGJtLT5uYW1lLAorCQkgICAgICAgcGJtLT5tc2lfcXVldWVzKTsKKwl9CisJcGJtLT5zZXR1cF9tc2lfaXJxID0gcGNpX3N1bjR2X3NldHVwX21zaV9pcnE7CisJcGJtLT50ZWFyZG93bl9tc2lfaXJxID0gcGNpX3N1bjR2X3RlYXJkb3duX21zaV9pcnE7CisKKwlyZXR1cm47CisKK25vX21zaToKKwlwYm0tPm1zaXFfbnVtID0gMDsKKwlwcmludGsoS0VSTl9JTkZPICIlczogTm8gTVNJIHN1cHBvcnQuXG4iLCBwYm0tPm5hbWUpOworfQogI2Vsc2UgLyogQ09ORklHX1BDSV9NU0kgKi8KIHN0YXRpYyB2b2lkIHBjaV9zdW40dl9tc2lfaW5pdChzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCiB7CkBAIC0xMjYwLDYgKzExMzgsMTUgQEAKIAllbHNlCiAJCXBibSA9ICZwLT5wYm1fQTsKIAorCXBibS0+bmV4dCA9IHBjaV9wYm1fcm9vdDsKKwlwY2lfcGJtX3Jvb3QgPSBwYm07CisKKwlwYm0tPnNjYW5fYnVzID0gcGNpX3N1bjR2X3NjYW5fYnVzOworCXBibS0+cGNpX29wcyA9ICZzdW40dl9wY2lfb3BzOworCXBibS0+Y29uZmlnX3NwYWNlX3JlZ19iaXRzID0gMTI7CisKKwlwYm0tPmluZGV4ID0gcGNpX251bV9wYm1zKys7CisKIAlwYm0tPnBhcmVudCA9IHA7CiAJcGJtLT5wcm9tX25vZGUgPSBkcDsKIApAQCAtMTI3MSwzNyArMTE1OCw0NCBAQAogCiAJcGNpX2RldGVybWluZV9tZW1faW9fc3BhY2UocGJtKTsKIAotCXBjaV9zdW40dl9nZXRfYnVzX3JhbmdlKHBibSk7CisJcGNpX2dldF9wYm1fcHJvcHMocGJtKTsKIAlwY2lfc3VuNHZfaW9tbXVfaW5pdChwYm0pOwogCXBjaV9zdW40dl9tc2lfaW5pdChwYm0pOwogfQogCiB2b2lkIHN1bjR2X3BjaV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKm1vZGVsX25hbWUpCiB7CisJc3RhdGljIGludCBodmFwaV9uZWdvdGlhdGVkID0gMDsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcDsKKwlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm07CiAJc3RydWN0IGlvbW11ICppb21tdTsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CiAJc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnJlZ3M7CiAJdTMyIGRldmhhbmRsZTsKIAlpbnQgaTsKIAorCWlmICghaHZhcGlfbmVnb3RpYXRlZCsrKSB7CisJCWludCBlcnIgPSBzdW40dl9odmFwaV9yZWdpc3RlcihIVl9HUlBfUENJLAorCQkJCQkgICAgICAgdnBjaV9tYWpvciwKKwkJCQkJICAgICAgICZ2cGNpX21pbm9yKTsKKworCQlpZiAoZXJyKSB7CisJCQlwcm9tX3ByaW50ZigiU1VONFZfUENJOiBDb3VsZCBub3QgcmVnaXN0ZXIgaHZhcGksICIKKwkJCQkgICAgImVycj0lZFxuIiwgZXJyKTsKKwkJCXByb21faGFsdCgpOworCQl9CisJCXByaW50aygiU1VONFZfUENJOiBSZWdpc3RlcmVkIGh2YXBpIG1ham9yWyVsdV0gbWlub3JbJWx1XVxuIiwKKwkJICAgICAgIHZwY2lfbWFqb3IsIHZwY2lfbWlub3IpOworCX0KKwogCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CiAJcmVncyA9IHByb3AtPnZhbHVlOwogCiAJZGV2aGFuZGxlID0gKHJlZ3MtPnBoeXNfYWRkciA+PiAzMlVMKSAmIDB4MGZmZmZmZmY7CiAKLQlmb3IgKHAgPSBwY2lfY29udHJvbGxlcl9yb290OyBwOyBwID0gcC0+bmV4dCkgewotCQlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm07Ci0KLQkJaWYgKHAtPnBibV9BLnByb21fbm9kZSAmJiBwLT5wYm1fQi5wcm9tX25vZGUpCi0JCQljb250aW51ZTsKLQotCQlwYm0gPSAocC0+cGJtX0EucHJvbV9ub2RlID8KLQkJICAgICAgICZwLT5wYm1fQSA6Ci0JCSAgICAgICAmcC0+cGJtX0IpOwotCisJZm9yIChwYm0gPSBwY2lfcGJtX3Jvb3Q7IHBibTsgcGJtID0gcGJtLT5uZXh0KSB7CiAJCWlmIChwYm0tPmRldmhhbmRsZSA9PSAoZGV2aGFuZGxlIF4gMHg0MCkpIHsKLQkJCXBjaV9zdW40dl9wYm1faW5pdChwLCBkcCwgZGV2aGFuZGxlKTsKKwkJCXBjaV9zdW40dl9wYm1faW5pdChwYm0tPnBhcmVudCwgZHAsIGRldmhhbmRsZSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0xMzMxLDE4ICsxMjI1LDYgQEAKIAogCXAtPnBibV9CLmlvbW11ID0gaW9tbXU7CiAKLQlwLT5uZXh0ID0gcGNpX2NvbnRyb2xsZXJfcm9vdDsKLQlwY2lfY29udHJvbGxlcl9yb290ID0gcDsKLQotCXAtPmluZGV4ID0gcGNpX251bV9jb250cm9sbGVycysrOwotCi0JcC0+c2Nhbl9idXMgPSBwY2lfc3VuNHZfc2Nhbl9idXM7Ci0jaWZkZWYgQ09ORklHX1BDSV9NU0kKLQlwLT5zZXR1cF9tc2lfaXJxID0gcGNpX3N1bjR2X3NldHVwX21zaV9pcnE7Ci0JcC0+dGVhcmRvd25fbXNpX2lycSA9IHBjaV9zdW40dl90ZWFyZG93bl9tc2lfaXJxOwotI2VuZGlmCi0JcC0+cGNpX29wcyA9ICZwY2lfc3VuNHZfb3BzOwotCiAJLyogTGlrZSBQU1lDSE8gYW5kIFNDSElaTyB3ZSBoYXZlIGEgMkdCIGFsaWduZWQgYXJlYQogCSAqIGZvciBtZW1vcnkgc3BhY2UuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Bvd2VyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Bvd2VyLmMKaW5kZXggNjk5YjI0Yi4uNWQ2YWRlYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wb3dlci5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcG93ZXIuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zc3RhdGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogCkBAIC01Myw2ICs1NCw3IEBACiAKIHZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKIHsKKwlzc3RhdGVfcG93ZXJvZmYoKTsKIAlpZiAoIXNlcmlhbF9jb25zb2xlIHx8IHNjb25zX3B3cm9mZikgewogI2lmZGVmIENPTkZJR19QQ0kKIAkJaWYgKHBvd2VyX3JlZykgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCBhMTE0MTUxLi5mNWY5N2UyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTQ2LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3N0YXRlLmg+CiAKIC8qICNkZWZpbmUgVkVSQk9TRV9TSE9XUkVHUyAqLwogCkBAIC0xMDcsNiArMTA3LDcgQEAKIAogdm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKIHsKKwlzc3RhdGVfaGFsdCgpOwogCWlmICghc2VyaWFsX2NvbnNvbGUgJiYgcHJvbV9wYWxldHRlKQogCQlwcm9tX3BhbGV0dGUgKDEpOwogCWlmIChwcm9tX2tleWJvYXJkKQpAQCAtMTE3LDYgKzExOCw3IEBACiAKIHZvaWQgbWFjaGluZV9hbHRfcG93ZXJfb2ZmKHZvaWQpCiB7CisJc3N0YXRlX3Bvd2Vyb2ZmKCk7CiAJaWYgKCFzZXJpYWxfY29uc29sZSAmJiBwcm9tX3BhbGV0dGUpCiAJCXByb21fcGFsZXR0ZSgxKTsKIAlpZiAocHJvbV9rZXlib2FyZCkKQEAgLTEyOSw2ICsxMzEsNyBAQAogewogCWNoYXIgKnA7CiAJCisJc3N0YXRlX3JlYm9vdCgpOwogCXAgPSBzdHJjaHIgKHJlYm9vdF9jb21tYW5kLCAnXG4nKTsKIAlpZiAocCkgKnAgPSAwOwogCWlmICghc2VyaWFsX2NvbnNvbGUgJiYgcHJvbV9wYWxldHRlKQpAQCAtNjc4LDcgKzY4MSw3IEBACiAgKiBOT1RFISBPbmx5IGEga2VybmVsLW9ubHkgcHJvY2VzcyhpZSB0aGUgc3dhcHBlciBvciBkaXJlY3QgZGVzY2VuZGFudHMKICAqIHdobyBoYXZlbid0IGRvbmUgYW4gImV4ZWN2ZSgpIikgc2hvdWxkIHVzZSB0aGlzOiBpdCB3aWxsIHdvcmsgd2l0aGluCiAgKiBhIHN5c3RlbSBjYWxsIGZyb20gYSAicmVhbCIgcHJvY2VzcywgYnV0IHRoZSBwcm9jZXNzIG1lbW9yeSBzcGFjZSB3aWxsCi0gKiBub3QgYmUgZnJlZSdkIHVudGlsIGJvdGggdGhlIHBhcmVudCBhbmQgdGhlIGNoaWxkIGhhdmUgZXhpdGVkLgorICogbm90IGJlIGZyZWVkIHVudGlsIGJvdGggdGhlIHBhcmVudCBhbmQgdGhlIGNoaWxkIGhhdmUgZXhpdGVkLgogICovCiBwaWRfdCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9tLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb20uYwppbmRleCBjNTRkNGQ4Li5kYWQ0YjNiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3Byb20uYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb20uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXNpLmg+CiAjaW5jbHVkZSA8YXNtL3VwYS5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWxsbm9kZXM7CiAKQEAgLTg5OSw3ICs5MDAsNyBAQAogCS8qIFRoZSBpbnRlcnJ1cHQgbWFwIHJlZ2lzdGVycyBkbyBub3QgaGF2ZSBhbiBJTk8gZmllbGQKIAkgKiBsaWtlIG90aGVyIGNoaXBzIGRvLiAgVGhleSByZXR1cm4gemVybyBpbiB0aGUgSU5PCiAJICogZmllbGQsIGFuZCB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgbnVtYmVyIGlzIGNvbnRyb2xsZWQKLQkgKiBpbiBiaXRzIDYgdGhydSA5LiAgU28gaW4gb3JkZXIgZm9yIGJ1aWxkX2lycSgpIHRvIGdldAorCSAqIGluIGJpdHMgNiB0byA5LiAgU28gaW4gb3JkZXIgZm9yIGJ1aWxkX2lycSgpIHRvIGdldAogCSAqIHRoZSBJTk8gcmlnaHQgd2UgcGFzcyBpdCBpbiBhcyBwYXJ0IG9mIHRoZSBmaXh1cAogCSAqIHdoaWNoIHdpbGwgZ2V0IGFkZGVkIHRvIHRoZSBtYXAgcmVnaXN0ZXIgemVybyB2YWx1ZQogCSAqIHJlYWQgYnkgYnVpbGRfaXJxKCkuCkBAIC0xNjM2LDEwICsxNjM3LDIxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2luaXQgYnVpbGRfdHJlZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgcGhhbmRsZSBub2RlLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKioqbmV4dHApCiB7CisJc3RydWN0IGRldmljZV9ub2RlICpyZXQgPSBOVUxMLCAqcHJldl9zaWJsaW5nID0gTlVMTDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwogCi0JZHAgPSBjcmVhdGVfbm9kZShub2RlLCBwYXJlbnQpOwotCWlmIChkcCkgeworCXdoaWxlICgxKSB7CisJCWRwID0gY3JlYXRlX25vZGUobm9kZSwgcGFyZW50KTsKKwkJaWYgKCFkcCkKKwkJCWJyZWFrOworCisJCWlmIChwcmV2X3NpYmxpbmcpCisJCQlwcmV2X3NpYmxpbmctPnNpYmxpbmcgPSBkcDsKKworCQlpZiAoIXJldCkKKwkJCXJldCA9IGRwOworCQlwcmV2X3NpYmxpbmcgPSBkcDsKKwogCQkqKCpuZXh0cCkgPSBkcDsKIAkJKm5leHRwID0gJmRwLT5hbGxuZXh0OwogCkBAIC0xNjQ4LDEwICsxNjYwLDE1NCBAQAogCiAJCWRwLT5jaGlsZCA9IGJ1aWxkX3RyZWUoZHAsIHByb21fZ2V0Y2hpbGQobm9kZSksIG5leHRwKTsKIAotCQlkcC0+c2libGluZyA9IGJ1aWxkX3RyZWUocGFyZW50LCBwcm9tX2dldHNpYmxpbmcobm9kZSksIG5leHRwKTsKKwkJbm9kZSA9IHByb21fZ2V0c2libGluZyhub2RlKTsKIAl9CiAKLQlyZXR1cm4gZHA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9taWRfcHJvcCh2b2lkKQoreworCXJldHVybiAodGxiX3R5cGUgPT0gc3BpdGZpcmUgPyAidXBhLXBvcnRpZCIgOiAicG9ydGlkIik7Cit9CisKK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X2NwdWlkKGludCBjcHVpZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOworCWNvbnN0IGNoYXIgKm1pZF9wcm9wID0gZ2V0X21pZF9wcm9wKCk7CisKKwlmb3JfZWFjaF9ub2RlX2J5X3R5cGUoZHAsICJjcHUiKSB7CisJCWludCBpZCA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgbWlkX3Byb3AsIC0xKTsKKwkJY29uc3QgY2hhciAqdGhpc19taWRfcHJvcCA9IG1pZF9wcm9wOworCisJCWlmIChpZCA8IDApIHsKKwkJCXRoaXNfbWlkX3Byb3AgPSAiY3B1aWQiOworCQkJaWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsIHRoaXNfbWlkX3Byb3AsIC0xKTsKKwkJfQorCisJCWlmIChpZCA8IDApIHsKKwkJCXByb21fcHJpbnRmKCJPRjogU2VyaW91cyBwcm9ibGVtLCBjcHUgbGFja3MgIgorCQkJCSAgICAiJXMgcHJvcGVydHkiLCB0aGlzX21pZF9wcm9wKTsKKwkJCXByb21faGFsdCgpOworCQl9CisJCWlmIChjcHVpZCA9PSBpZCkKKwkJCXJldHVybiBkcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvZl9maWxsX2luX2NwdV9kYXRhKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkcDsKKwljb25zdCBjaGFyICptaWRfcHJvcCA9IGdldF9taWRfcHJvcCgpOworCisJbmNwdXNfcHJvYmVkID0gMDsKKwlmb3JfZWFjaF9ub2RlX2J5X3R5cGUoZHAsICJjcHUiKSB7CisJCWludCBjcHVpZCA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgbWlkX3Byb3AsIC0xKTsKKwkJY29uc3QgY2hhciAqdGhpc19taWRfcHJvcCA9IG1pZF9wcm9wOworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnRpZF9wYXJlbnQ7CisJCWludCBwb3J0aWQgPSAtMTsKKworCQlwb3J0aWRfcGFyZW50ID0gTlVMTDsKKwkJaWYgKGNwdWlkIDwgMCkgeworCQkJdGhpc19taWRfcHJvcCA9ICJjcHVpZCI7CisJCQljcHVpZCA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgdGhpc19taWRfcHJvcCwgLTEpOworCQkJaWYgKGNwdWlkID49IDApIHsKKwkJCQlpbnQgbGltaXQgPSAyOworCisJCQkJcG9ydGlkX3BhcmVudCA9IGRwOworCQkJCXdoaWxlIChsaW1pdC0tKSB7CisJCQkJCXBvcnRpZF9wYXJlbnQgPSBwb3J0aWRfcGFyZW50LT5wYXJlbnQ7CisJCQkJCWlmICghcG9ydGlkX3BhcmVudCkKKwkJCQkJCWJyZWFrOworCQkJCQlwb3J0aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQocG9ydGlkX3BhcmVudCwKKwkJCQkJCQkJICAgICAgICJwb3J0aWQiLCAtMSk7CisJCQkJCWlmIChwb3J0aWQgPj0gMCkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChjcHVpZCA8IDApIHsKKwkJCXByb21fcHJpbnRmKCJPRjogU2VyaW91cyBwcm9ibGVtLCBjcHUgbGFja3MgIgorCQkJCSAgICAiJXMgcHJvcGVydHkiLCB0aGlzX21pZF9wcm9wKTsKKwkJCXByb21faGFsdCgpOworCQl9CisKKwkJbmNwdXNfcHJvYmVkKys7CisKKyNpZmRlZiBDT05GSUdfU01QCisJCWlmIChjcHVpZCA+PSBOUl9DUFVTKQorCQkJY29udGludWU7CisjZWxzZQorCQkvKiBPbiB1bmlwcm9jZXNzb3Igd2Ugb25seSB3YW50IHRoZSB2YWx1ZXMgZm9yIHRoZQorCQkgKiByZWFsIHBoeXNpY2FsIGNwdSB0aGUga2VybmVsIGJvb3RlZCBvbnRvLCBob3dldmVyCisJCSAqIGNwdV9kYXRhKCkgb25seSBoYXMgb25lIGVudHJ5IGF0IGluZGV4IDAuCisJCSAqLworCQlpZiAoY3B1aWQgIT0gcmVhbF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCWNvbnRpbnVlOworCQljcHVpZCA9IDA7CisjZW5kaWYKKworCQljcHVfZGF0YShjcHVpZCkuY2xvY2tfdGljayA9CisJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJjbG9jay1mcmVxdWVuY3kiLCAwKTsKKworCQlpZiAocG9ydGlkX3BhcmVudCkgeworCQkJY3B1X2RhdGEoY3B1aWQpLmRjYWNoZV9zaXplID0KKwkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJsMS1kY2FjaGUtc2l6ZSIsCisJCQkJCQkgICAgICAxNiAqIDEwMjQpOworCQkJY3B1X2RhdGEoY3B1aWQpLmRjYWNoZV9saW5lX3NpemUgPQorCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImwxLWRjYWNoZS1saW5lLXNpemUiLAorCQkJCQkJICAgICAgMzIpOworCQkJY3B1X2RhdGEoY3B1aWQpLmljYWNoZV9zaXplID0KKwkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJsMS1pY2FjaGUtc2l6ZSIsCisJCQkJCQkgICAgICA4ICogMTAyNCk7CisJCQljcHVfZGF0YShjcHVpZCkuaWNhY2hlX2xpbmVfc2l6ZSA9CisJCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAibDEtaWNhY2hlLWxpbmUtc2l6ZSIsCisJCQkJCQkgICAgICAzMik7CisJCQljcHVfZGF0YShjcHVpZCkuZWNhY2hlX3NpemUgPQorCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImwyLWNhY2hlLXNpemUiLCAwKTsKKwkJCWNwdV9kYXRhKGNwdWlkKS5lY2FjaGVfbGluZV9zaXplID0KKwkJCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJsMi1jYWNoZS1saW5lLXNpemUiLCAwKTsKKwkJCWlmICghY3B1X2RhdGEoY3B1aWQpLmVjYWNoZV9zaXplIHx8CisJCQkgICAgIWNwdV9kYXRhKGNwdWlkKS5lY2FjaGVfbGluZV9zaXplKSB7CisJCQkJY3B1X2RhdGEoY3B1aWQpLmVjYWNoZV9zaXplID0KKwkJCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KHBvcnRpZF9wYXJlbnQsCisJCQkJCQkJICAgICAgImwyLWNhY2hlLXNpemUiLAorCQkJCQkJCSAgICAgICg0ICogMTAyNCAqIDEwMjQpKTsKKwkJCQljcHVfZGF0YShjcHVpZCkuZWNhY2hlX2xpbmVfc2l6ZSA9CisJCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChwb3J0aWRfcGFyZW50LAorCQkJCQkJCSAgICAgICJsMi1jYWNoZS1saW5lLXNpemUiLCA2NCk7CisJCQl9CisKKwkJCWNwdV9kYXRhKGNwdWlkKS5jb3JlX2lkID0gcG9ydGlkICsgMTsKKwkJfSBlbHNlIHsKKwkJCWNwdV9kYXRhKGNwdWlkKS5kY2FjaGVfc2l6ZSA9CisJCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiZGNhY2hlLXNpemUiLCAxNiAqIDEwMjQpOworCQkJY3B1X2RhdGEoY3B1aWQpLmRjYWNoZV9saW5lX3NpemUgPQorCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImRjYWNoZS1saW5lLXNpemUiLCAzMik7CisKKwkJCWNwdV9kYXRhKGNwdWlkKS5pY2FjaGVfc2l6ZSA9CisJCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiaWNhY2hlLXNpemUiLCAxNiAqIDEwMjQpOworCQkJY3B1X2RhdGEoY3B1aWQpLmljYWNoZV9saW5lX3NpemUgPQorCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImljYWNoZS1saW5lLXNpemUiLCAzMik7CisKKwkJCWNwdV9kYXRhKGNwdWlkKS5lY2FjaGVfc2l6ZSA9CisJCQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiZWNhY2hlLXNpemUiLAorCQkJCQkJICAgICAgKDQgKiAxMDI0ICogMTAyNCkpOworCQkJY3B1X2RhdGEoY3B1aWQpLmVjYWNoZV9saW5lX3NpemUgPQorCQkJCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImVjYWNoZS1saW5lLXNpemUiLCA2NCk7CisKKwkJCWNwdV9kYXRhKGNwdWlkKS5jb3JlX2lkID0gMDsKKwkJfQorCisjaWZkZWYgQ09ORklHX1NNUAorCQljcHVfc2V0KGNwdWlkLCBjcHVfcHJlc2VudF9tYXApOworCQljcHVfc2V0KGNwdWlkLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CisjZW5kaWYKKwl9CisKKwlzbXBfZmlsbF9pbl9zaWJfY29yZV9tYXBzKCk7CiB9CiAKIHZvaWQgX19pbml0IHByb21fYnVpbGRfZGV2aWNldHJlZSh2b2lkKQpAQCAtMTY2OCw0ICsxODI0LDcgQEAKIAkJCQkgICAgICZuZXh0cCk7CiAJcHJpbnRrKCJQUk9NOiBCdWlsdCBkZXZpY2UgdHJlZSB3aXRoICV1IGJ5dGVzIG9mIG1lbW9yeS5cbiIsCiAJICAgICAgIHByb21fZWFybHlfYWxsb2NhdGVkKTsKKworCWlmICh0bGJfdHlwZSAhPSBoeXBlcnZpc29yKQorCQlvZl9maWxsX2luX2NwdV9kYXRhKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NidXMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2J1cy5jCmluZGV4IDNiMDU0MjguLjkxZjZlMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2J1cy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2J1cy5jCkBAIC0xMDAyLDI0ICsxMDAyLDI0IEBACiAJdTY0IGNvbnRyb2w7CiAKIAlpcnEgPSBzYnVzX2J1aWxkX2lycShzYnVzLCBTWVNJT19VRV9JTk8pOwotCWlmIChyZXF1ZXN0X2lycShpcnEsIHN5c2lvX3VlX2hhbmRsZXIsCi0JCQlJUlFGX1NIQVJFRCwgIlNZU0lPIFVFIiwgc2J1cykgPCAwKSB7CisJaWYgKHJlcXVlc3RfaXJxKGlycSwgc3lzaW9fdWVfaGFuZGxlciwgMCwKKwkJCSJTWVNJT19VRSIsIHNidXMpIDwgMCkgewogCQlwcm9tX3ByaW50ZigiU1lTSU9bJXhdOiBDYW5ub3QgcmVnaXN0ZXIgVUUgaW50ZXJydXB0LlxuIiwKIAkJCSAgICBzYnVzLT5wb3J0aWQpOwogCQlwcm9tX2hhbHQoKTsKIAl9CiAKIAlpcnEgPSBzYnVzX2J1aWxkX2lycShzYnVzLCBTWVNJT19DRV9JTk8pOwotCWlmIChyZXF1ZXN0X2lycShpcnEsIHN5c2lvX2NlX2hhbmRsZXIsCi0JCQlJUlFGX1NIQVJFRCwgIlNZU0lPIENFIiwgc2J1cykgPCAwKSB7CisJaWYgKHJlcXVlc3RfaXJxKGlycSwgc3lzaW9fY2VfaGFuZGxlciwgMCwKKwkJCSJTWVNJT19DRSIsIHNidXMpIDwgMCkgewogCQlwcm9tX3ByaW50ZigiU1lTSU9bJXhdOiBDYW5ub3QgcmVnaXN0ZXIgQ0UgaW50ZXJydXB0LlxuIiwKIAkJCSAgICBzYnVzLT5wb3J0aWQpOwogCQlwcm9tX2hhbHQoKTsKIAl9CiAKIAlpcnEgPSBzYnVzX2J1aWxkX2lycShzYnVzLCBTWVNJT19TQlVTRVJSX0lOTyk7Ci0JaWYgKHJlcXVlc3RfaXJxKGlycSwgc3lzaW9fc2J1c19lcnJvcl9oYW5kbGVyLAotCQkJSVJRRl9TSEFSRUQsICJTWVNJTyBTQlVTIEVycm9yIiwgc2J1cykgPCAwKSB7CisJaWYgKHJlcXVlc3RfaXJxKGlycSwgc3lzaW9fc2J1c19lcnJvcl9oYW5kbGVyLCAwLAorCQkJIlNZU0lPX1NCRVJSIiwgc2J1cykgPCAwKSB7CiAJCXByb21fcHJpbnRmKCJTWVNJT1sleF06IENhbm5vdCByZWdpc3RlciBTQlVTIEVycm9yIGludGVycnVwdC5cbiIsCiAJCQkgICAgc2J1cy0+cG9ydGlkKTsKIAkJcHJvbV9oYWx0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKaW5kZXggNDUxMDI4My4uZGU5YjRjMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYwpAQCAtNDYsMTEgKzQ2LDE3IEBACiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9uczg3MzAzLmg+CiAKICNpZmRlZiBDT05GSUdfSVBfUE5QCiAjaW5jbHVkZSA8bmV0L2lwY29uZmlnLmg+CiAjZW5kaWYKIAorLyogVXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc3NlcyB0byBOYXRTZW1pIFNVUEVSIEkvTyBjaGlwIGNvbmZpZ3VyZQorICogb3BlcmF0aW9ucyBpbiBhc20vbnM4NzMwMy5oCisgKi8KK0RFRklORV9TUElOTE9DSyhuczg3MzAzX2xvY2spOworCiBzdHJ1Y3Qgc2NyZWVuX2luZm8gc2NyZWVuX2luZm8gPSB7CiAJMCwgMCwJCQkvKiBvcmlnLXgsIG9yaWcteSAqLwogCTAsCQkJLyogdW51c2VkICovCkBAIC0yNjksNiArMjc1LDcgQEAKIAogdm9pZCBfX2luaXQgc3VuNHZfcGF0Y2godm9pZCkKIHsKKwlleHRlcm4gdm9pZCBzdW40dl9odmFwaV9pbml0KHZvaWQpOwogCXN0cnVjdCBzdW40dl8xaW5zbl9wYXRjaF9lbnRyeSAqcDE7CiAJc3RydWN0IHN1bjR2XzJpbnNuX3BhdGNoX2VudHJ5ICpwMjsKIApAQCAtMzAwLDYgKzMwNyw4IEBACiAKIAkJcDIrKzsKIAl9CisKKwlzdW40dl9odmFwaV9pbml0KCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0zNjcsOCArMzc2LDYgQEAKIAlpbml0X2N1cl9jcHVfdHJhcChjdXJyZW50X3RocmVhZF9pbmZvKCkpOwogCiAJcGFnaW5nX2luaXQoKTsKLQotCXNtcF9zZXR1cF9jcHVfcG9zc2libGVfbWFwKCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldF9wcmVmZXJyZWRfY29uc29sZSh2b2lkKQpAQCAtNDIxLDcgKzQyOCw3IEBACiB1bnNpZ25lZCBpbnQgZGNhY2hlX3Bhcml0eV90bDFfb2NjdXJyZWQ7CiB1bnNpZ25lZCBpbnQgaWNhY2hlX3Bhcml0eV90bDFfb2NjdXJyZWQ7CiAKLXN0YXRpYyBpbnQgbmNwdXNfcHJvYmVkOworaW50IG5jcHVzX3Byb2JlZDsKIAogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpfX3VudXNlZCkKIHsKQEAgLTUxMywxNCArNTIwLDYgQEAKIAogCWVyciA9IC1FTk9NRU07CiAKLQkvKiBDb3VudCB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsbHkgcHJlc2VudCBwcm9jZXNzb3JzIGluCi0JICogdGhlIG1hY2hpbmUsIGV2ZW4gb24gdW5pcHJvY2Vzc29yLCBzbyB0aGF0IC9wcm9jL2NwdWluZm8KLQkgKiBvdXRwdXQgaXMgY29uc2lzdGVudCB3aXRoIDIuNC54Ci0JICovCi0JbmNwdXNfcHJvYmVkID0gMDsKLQl3aGlsZSAoIWNwdV9maW5kX2J5X2luc3RhbmNlKG5jcHVzX3Byb2JlZCwgTlVMTCwgTlVMTCkpCi0JCW5jcHVzX3Byb2JlZCsrOwotCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc3RydWN0IGNwdSAqcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChwKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zaWduYWwuYwppbmRleCA5NmQ1NmE4Li4yMDNlODczIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2lnbmFsLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NpZ25hbDMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NpZ25hbDMyLmMKaW5kZXggYzQ1ZjIxYi4uOGMxYzEyMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zaWduYWwzMi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2lnbmFsMzIuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwppbmRleCAxZmFjMjE1Li5jNTUwYmJhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNDEsNiArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9tZGVzYy5oPgogCiBleHRlcm4gdm9pZCBjYWxpYnJhdGVfZGVsYXkodm9pZCk7CiAKQEAgLTc2LDUzICs3Niw2IEBACiAJCQkgICBpLCBjcHVfZGF0YShpKS5jbG9ja190aWNrKTsKIH0KIAotdm9pZCBfX2luaXQgc21wX3N0b3JlX2NwdV9pbmZvKGludCBpZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwotCWludCBkZWY7Ci0KLQljcHVfZGF0YShpZCkudWRlbGF5X3ZhbAkJCT0gbG9vcHNfcGVyX2ppZmZ5OwotCi0JY3B1X2ZpbmRfYnlfbWlkKGlkLCAmZHApOwotCWNwdV9kYXRhKGlkKS5jbG9ja190aWNrID0KLQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiY2xvY2stZnJlcXVlbmN5IiwgMCk7Ci0KLQlkZWYgPSAoKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8gKDggKiAxMDI0KSA6ICgxNiAqIDEwMjQpKTsKLQljcHVfZGF0YShpZCkuZGNhY2hlX3NpemUgPQotCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJkY2FjaGUtc2l6ZSIsIGRlZik7Ci0KLQlkZWYgPSAzMjsKLQljcHVfZGF0YShpZCkuZGNhY2hlX2xpbmVfc2l6ZSA9Ci0JCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImRjYWNoZS1saW5lLXNpemUiLCBkZWYpOwotCi0JZGVmID0gMTYgKiAxMDI0OwotCWNwdV9kYXRhKGlkKS5pY2FjaGVfc2l6ZSA9Ci0JCW9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImljYWNoZS1zaXplIiwgZGVmKTsKLQotCWRlZiA9IDMyOwotCWNwdV9kYXRhKGlkKS5pY2FjaGVfbGluZV9zaXplID0KLQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiaWNhY2hlLWxpbmUtc2l6ZSIsIGRlZik7Ci0KLQlkZWYgPSAoKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8KLQkgICAgICAgKDMgKiAxMDI0ICogMTAyNCkgOgotCSAgICAgICAoNCAqIDEwMjQgKiAxMDI0KSk7Ci0JY3B1X2RhdGEoaWQpLmVjYWNoZV9zaXplID0KLQkJb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiZWNhY2hlLXNpemUiLCBkZWYpOwotCi0JZGVmID0gNjQ7Ci0JY3B1X2RhdGEoaWQpLmVjYWNoZV9saW5lX3NpemUgPQotCQlvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJlY2FjaGUtbGluZS1zaXplIiwgZGVmKTsKLQotCXByaW50aygiQ1BVWyVkXTogQ2FjaGVzICIKLQkgICAgICAgIkRbc3ooJWQpOmxpbmVfc3ooJWQpXSAiCi0JICAgICAgICJJW3N6KCVkKTpsaW5lX3N6KCVkKV0gIgotCSAgICAgICAiRVtzeiglZCk6bGluZV9zeiglZCldXG4iLAotCSAgICAgICBpZCwKLQkgICAgICAgY3B1X2RhdGEoaWQpLmRjYWNoZV9zaXplLCBjcHVfZGF0YShpZCkuZGNhY2hlX2xpbmVfc2l6ZSwKLQkgICAgICAgY3B1X2RhdGEoaWQpLmljYWNoZV9zaXplLCBjcHVfZGF0YShpZCkuaWNhY2hlX2xpbmVfc2l6ZSwKLQkgICAgICAgY3B1X2RhdGEoaWQpLmVjYWNoZV9zaXplLCBjcHVfZGF0YShpZCkuZWNhY2hlX2xpbmVfc2l6ZSk7Ci19Ci0KIGV4dGVybiB2b2lkIHNldHVwX3NwYXJjNjRfdGltZXIodm9pZCk7CiAKIHN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNhbGxpbl9mbGFnID0gMDsKQEAgLTE0Niw3ICs5OSw3IEBACiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJY2FsaWJyYXRlX2RlbGF5KCk7Ci0Jc21wX3N0b3JlX2NwdV9pbmZvKGNwdWlkKTsKKwljcHVfZGF0YShjcHVpZCkudWRlbGF5X3ZhbCA9IGxvb3BzX3Blcl9qaWZmeTsKIAljYWxsaW5fZmxhZyA9IDE7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1lbWJhciAjU3luY1xuXHQiCiAJCQkgICAgICJmbHVzaCAgJSVnNiIgOiA6IDogIm1lbW9yeSIpOwpAQCAtMzQxLDkgKzI5NCw4IEBACiAKIAkJcHJvbV9zdGFydGNwdV9jcHVpZChjcHUsIGVudHJ5LCBjb29raWUpOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvZl9maW5kX25vZGVfYnlfY3B1aWQoY3B1KTsKIAotCQljcHVfZmluZF9ieV9taWQoY3B1LCAmZHApOwogCQlwcm9tX3N0YXJ0Y3B1KGRwLT5ub2RlLCBlbnRyeSwgY29va2llKTsKIAl9CiAKQEAgLTQ0OCw3ICs0MDAsNyBAQAogc3RhdGljIHZvaWQgY2hlZXRhaF94Y2FsbF9kZWxpdmVyKHU2NCBkYXRhMCwgdTY0IGRhdGExLCB1NjQgZGF0YTIsIGNwdW1hc2tfdCBtYXNrKQogewogCXU2NCBwc3RhdGUsIHZlcjsKLQlpbnQgbmFja19idXN5X2lkLCBpc19qYnVzOworCWludCBuYWNrX2J1c3lfaWQsIGlzX2pidXMsIG5lZWRfbW9yZTsKIAogCWlmIChjcHVzX2VtcHR5KG1hc2spKQogCQlyZXR1cm47CkBAIC00NjQsNiArNDE2LDcgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmRwciAlJXBzdGF0ZSwgJTAiIDogIj1yIiAocHN0YXRlKSk7CiAKIHJldHJ5OgorCW5lZWRfbW9yZSA9IDA7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIndycHIgJTAsICUxLCAlJXBzdGF0ZVxuXHQiCiAJCQkgICAgIDogOiAiciIgKHBzdGF0ZSksICJpIiAoUFNUQVRFX0lFKSk7CiAKQEAgLTQ5Miw2ICs0NDUsMTAgQEAKIAkJCQk6IC8qIG5vIG91dHB1dHMgKi8KIAkJCQk6ICJyIiAodGFyZ2V0KSwgImkiIChBU0lfSU5UUl9XKSk7CiAJCQluYWNrX2J1c3lfaWQrKzsKKwkJCWlmIChuYWNrX2J1c3lfaWQgPT0gMzIpIHsKKwkJCQluZWVkX21vcmUgPSAxOworCQkJCWJyZWFrOworCQkJfQogCQl9CiAJfQogCkBAIC01MDgsNiArNDY1LDE2IEBACiAJCQlpZiAoZGlzcGF0Y2hfc3RhdCA9PSAwVUwpIHsKIAkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3JwciAlMCwgMHgwLCAlJXBzdGF0ZSIKIAkJCQkJCSAgICAgOiA6ICJyIiAocHN0YXRlKSk7CisJCQkJaWYgKHVubGlrZWx5KG5lZWRfbW9yZSkpIHsKKwkJCQkJaW50IGksIGNudCA9IDA7CisJCQkJCWZvcl9lYWNoX2NwdV9tYXNrKGksIG1hc2spIHsKKwkJCQkJCWNwdV9jbGVhcihpLCBtYXNrKTsKKwkJCQkJCWNudCsrOworCQkJCQkJaWYgKGNudCA9PSAzMikKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlnb3RvIHJldHJ5OworCQkJCX0KIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlpZiAoIS0tc3R1Y2spCkBAIC01NDUsNiArNTEyLDggQEAKIAkJCQlpZiAoKGRpc3BhdGNoX3N0YXQgJiBjaGVja19tYXNrKSA9PSAwKQogCQkJCQljcHVfY2xlYXIoaSwgbWFzayk7CiAJCQkJdGhpc19idXN5X25hY2sgKz0gMjsKKwkJCQlpZiAodGhpc19idXN5X25hY2sgPT0gNjQpCisJCQkJCWJyZWFrOwogCQkJfQogCiAJCQlnb3RvIHJldHJ5OwpAQCAtNTYyLDYgKzUzMSw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncywgc3RhdHVzOwogCWludCBjbnQsIHJldHJpZXMsIHRoaXNfY3B1LCBwcmV2X3NlbnQsIGk7CiAKKwlpZiAoY3B1c19lbXB0eShtYXNrKSkKKwkJcmV0dXJuOworCiAJLyogV2UgaGF2ZSB0byBkbyB0aGlzIHdob2xlIHRoaW5nIHdpdGggaW50ZXJydXB0cyBmdWxseSBkaXNhYmxlZC4KIAkgKiBPdGhlcndpc2UgaWYgd2Ugc2VuZCBhbiB4Y2FsbCBmcm9tIGludGVycnVwdCBjb250ZXh0IGl0IHdpbGwKIAkgKiBjb3JydXB0IGJvdGggb3VyIG1vbmRvIGJsb2NrIGFuZCBjcHUgbGlzdCBzdGF0ZS4KQEAgLTExODksMjMgKzExNjEsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNtcF90dW5lX3NjaGVkdWxpbmcodm9pZCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwotCWludCBpbnN0YW5jZTsKLQl1bnNpZ25lZCBpbnQgZGVmLCBzbWFsbGVzdCA9IH4wVTsKKwl1bnNpZ25lZCBpbnQgc21hbGxlc3QgPSB+MFU7CisJaW50IGk7CiAKLQlkZWYgPSAoKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8KLQkgICAgICAgKDMgKiAxMDI0ICogMTAyNCkgOgotCSAgICAgICAoNCAqIDEwMjQgKiAxMDI0KSk7CisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdmFsID0gY3B1X2RhdGEoaSkuZWNhY2hlX3NpemU7CiAKLQlpbnN0YW5jZSA9IDA7Ci0Jd2hpbGUgKCFjcHVfZmluZF9ieV9pbnN0YW5jZShpbnN0YW5jZSwgJmRwLCBOVUxMKSkgewotCQl1bnNpZ25lZCBpbnQgdmFsOwotCi0JCXZhbCA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImVjYWNoZS1zaXplIiwgZGVmKTsKLQkJaWYgKHZhbCA8IHNtYWxsZXN0KQorCQlpZiAodmFsICYmIHZhbCA8IHNtYWxsZXN0KQogCQkJc21hbGxlc3QgPSB2YWw7Ci0KLQkJaW5zdGFuY2UrKzsKIAl9CiAKIAkvKiBBbnkgdmFsdWUgbGVzcyB0aGFuIDI1NksgaXMgbm9uc2Vuc2UuICAqLwpAQCAtMTIyOCw2MCArMTE5MSw0NCBAQAogCWludCBpOwogCiAJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiBtYXhfY3B1cykgewotCQlpbnQgaW5zdGFuY2UsIG1pZDsKLQotCQlpbnN0YW5jZSA9IDA7Ci0JCXdoaWxlICghY3B1X2ZpbmRfYnlfaW5zdGFuY2UoaW5zdGFuY2UsIE5VTEwsICZtaWQpKSB7Ci0JCQlpZiAobWlkICE9IGJvb3RfY3B1X2lkKSB7Ci0JCQkJY3B1X2NsZWFyKG1pZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotCQkJCWNwdV9jbGVhcihtaWQsIGNwdV9wcmVzZW50X21hcCk7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCQlpZiAoaSAhPSBib290X2NwdV9pZCkgeworCQkJCWNwdV9jbGVhcihpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CisJCQkJY3B1X2NsZWFyKGksIGNwdV9wcmVzZW50X21hcCk7CiAJCQkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPD0gbWF4X2NwdXMpCiAJCQkJCWJyZWFrOwogCQkJfQotCQkJaW5zdGFuY2UrKzsKIAkJfQogCX0KIAotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7Ci0JCQlpbnQgajsKLQotCQkJLyogWFhYIGdldCB0aGlzIG1hcHBpbmcgZnJvbSBtYWNoaW5lIGRlc2NyaXB0aW9uICovCi0JCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaikgewotCQkJCWlmICgoaiA+PiAyKSA9PSAoaSA+PiAyKSkKLQkJCQkJY3B1X3NldChqLCBjcHVfc2libGluZ19tYXBbaV0pOwotCQkJfQotCQl9IGVsc2UgewotCQkJY3B1X3NldChpLCBjcHVfc2libGluZ19tYXBbaV0pOwotCQl9Ci0JfQotCi0Jc21wX3N0b3JlX2NwdV9pbmZvKGJvb3RfY3B1X2lkKTsKKwljcHVfZGF0YShib290X2NwdV9pZCkudWRlbGF5X3ZhbCA9IGxvb3BzX3Blcl9qaWZmeTsKIAlzbXBfdHVuZV9zY2hlZHVsaW5nKCk7CiB9CiAKLS8qIFNldCB0aGlzIHVwIGVhcmx5IHNvIHRoYXQgdGhpbmdzIGxpa2UgdGhlIHNjaGVkdWxlciBjYW4gaW5pdAotICogcHJvcGVybHkuICBXZSB1c2UgdGhlIHNhbWUgY3B1IG1hc2sgZm9yIGJvdGggdGhlIHByZXNlbnQgYW5kCi0gKiBwb3NzaWJsZSBjcHUgbWFwLgotICovCi12b2lkIF9faW5pdCBzbXBfc2V0dXBfY3B1X3Bvc3NpYmxlX21hcCh2b2lkKQotewotCWludCBpbnN0YW5jZSwgbWlkOwotCi0JaW5zdGFuY2UgPSAwOwotCXdoaWxlICghY3B1X2ZpbmRfYnlfaW5zdGFuY2UoaW5zdGFuY2UsIE5VTEwsICZtaWQpKSB7Ci0JCWlmIChtaWQgPCBOUl9DUFVTKSB7Ci0JCQljcHVfc2V0KG1pZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotCQkJY3B1X3NldChtaWQsIGNwdV9wcmVzZW50X21hcCk7Ci0JCX0KLQkJaW5zdGFuY2UrKzsKLQl9Ci19Ci0KIHZvaWQgX19kZXZpbml0IHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiB7CiB9CiAKK3ZvaWQgX19kZXZpbml0IHNtcF9maWxsX2luX3NpYl9jb3JlX21hcHModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXVuc2lnbmVkIGludCBqOworCisJCWlmIChjcHVfZGF0YShpKS5jb3JlX2lkID09IDApIHsKKwkJCWNwdV9zZXQoaSwgY3B1X3NpYmxpbmdfbWFwW2ldKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGopIHsKKwkJCWlmIChjcHVfZGF0YShpKS5jb3JlX2lkID09CisJCQkgICAgY3B1X2RhdGEoaikuY29yZV9pZCkKKwkJCQljcHVfc2V0KGosIGNwdV9zaWJsaW5nX21hcFtpXSk7CisJCX0KKwl9Cit9CisKIGludCBfX2NwdWluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKIHsKIAlpbnQgcmV0ID0gc21wX2Jvb3Rfb25lX2NwdShjcHUpOwpAQCAtMTMzNSw3ICsxMjgyLDcgQEAKIEVYUE9SVF9TWU1CT0woX19wZXJfY3B1X2Jhc2UpOwogRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfc2hpZnQpOwogCi12b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCit2b2lkIF9faW5pdCByZWFsX3NldHVwX3Blcl9jcHVfYXJlYXModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGdvYWwsIHNpemUsIGk7CiAJY2hhciAqcHRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zc3RhdGUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3N0YXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2ZTc1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3N0YXRlLmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qIHNzdGF0ZS5jOiBTeXN0ZW0gc29mdCBzdGF0ZSBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3N0YXRlLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL2hlYWQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGludCBodl9zdXBwb3J0c19zb2Z0X3N0YXRlOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBraW1hZ2VfYWRkcl90b19yYShjb25zdCBjaGFyICpwKQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpIHA7CisKKwlyZXR1cm4ga2Vybl9iYXNlICsgKHZhbCAtIEtFUk5CQVNFKTsKK30KKworc3RhdGljIHZvaWQgZG9fc2V0X3NzdGF0ZSh1bnNpZ25lZCBsb25nIHN0YXRlLCBjb25zdCBjaGFyICptc2cpCit7CisJdW5zaWduZWQgbG9uZyBlcnI7CisKKwlpZiAoIWh2X3N1cHBvcnRzX3NvZnRfc3RhdGUpCisJCXJldHVybjsKKworCWVyciA9IHN1bjR2X21hY2hfc2V0X3NvZnRfc3RhdGUoc3RhdGUsIGtpbWFnZV9hZGRyX3RvX3JhKG1zZykpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1NUQVRFOiBGYWlsZWQgdG8gc2V0IHNvZnQtc3RhdGUgdG8gIgorCQkgICAgICAgInN0YXRlWyVseF0gbXNnWyVzXSwgZXJyPSVsdVxuIiwKKwkJICAgICAgIHN0YXRlLCBtc2csIGVycik7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciBib290aW5nX21zZ1szMl0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKSA9CisJIkxpbnV4IGJvb3RpbmciOworc3RhdGljIGNvbnN0IGNoYXIgcnVubmluZ19tc2dbMzJdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMzIpKSkgPQorCSJMaW51eCBydW5uaW5nIjsKK3N0YXRpYyBjb25zdCBjaGFyIGhhbHRpbmdfbXNnWzMyXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDMyKSkpID0KKwkiTGludXggaGFsdGluZyI7CitzdGF0aWMgY29uc3QgY2hhciBwb3dlcm9mZl9tc2dbMzJdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMzIpKSkgPQorCSJMaW51eCBwb3dlcmluZyBvZmYiOworc3RhdGljIGNvbnN0IGNoYXIgcmVib290aW5nX21zZ1szMl0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKSA9CisJIkxpbnV4IHJlYm9vdGluZyI7CitzdGF0aWMgY29uc3QgY2hhciBwYW5pY2luZ19tc2dbMzJdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMzIpKSkgPQorCSJMaW51eCBwYW5pY2luZyI7CisKK3ZvaWQgc3N0YXRlX2Jvb3Rpbmcodm9pZCkKK3sKKwlkb19zZXRfc3N0YXRlKEhWX1NPRlRfU1RBVEVfVFJBTlNJVElPTiwgYm9vdGluZ19tc2cpOworfQorCit2b2lkIHNzdGF0ZV9ydW5uaW5nKHZvaWQpCit7CisJZG9fc2V0X3NzdGF0ZShIVl9TT0ZUX1NUQVRFX05PUk1BTCwgcnVubmluZ19tc2cpOworfQorCit2b2lkIHNzdGF0ZV9oYWx0KHZvaWQpCit7CisJZG9fc2V0X3NzdGF0ZShIVl9TT0ZUX1NUQVRFX1RSQU5TSVRJT04sIGhhbHRpbmdfbXNnKTsKK30KKwordm9pZCBzc3RhdGVfcG93ZXJvZmYodm9pZCkKK3sKKwlkb19zZXRfc3N0YXRlKEhWX1NPRlRfU1RBVEVfVFJBTlNJVElPTiwgcG93ZXJvZmZfbXNnKTsKK30KKwordm9pZCBzc3RhdGVfcmVib290KHZvaWQpCit7CisJZG9fc2V0X3NzdGF0ZShIVl9TT0ZUX1NUQVRFX1RSQU5TSVRJT04sIHJlYm9vdGluZ19tc2cpOworfQorCitzdGF0aWMgaW50IHNzdGF0ZV9wYW5pY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKK3sKKwlkb19zZXRfc3N0YXRlKEhWX1NPRlRfU1RBVEVfVFJBTlNJVElPTiwgcGFuaWNpbmdfbXNnKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBzc3RhdGVfcGFuaWNfYmxvY2sgPSB7CisJLm5vdGlmaWVyX2NhbGwJPQlzc3RhdGVfcGFuaWNfZXZlbnQsCisJLnByaW9yaXR5CT0JSU5UX01BWCwKK307CisKK3ZvaWQgX19pbml0IHN1bjR2X3NzdGF0ZV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBtYWpvciwgbWlub3I7CisKKwltYWpvciA9IDE7CisJbWlub3IgPSAwOworCWlmIChzdW40dl9odmFwaV9yZWdpc3RlcihIVl9HUlBfU09GVF9TVEFURSwgbWFqb3IsICZtaW5vcikpCisJCXJldHVybjsKKworCWh2X3N1cHBvcnRzX3NvZnRfc3RhdGUgPSAxOworCisJcHJvbV9zdW40dl9ndWVzdF9zb2Z0X3N0YXRlKCk7CisJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCSAgICAgICAmc3N0YXRlX3BhbmljX2Jsb2NrKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdGFja3RyYWNlLmMKaW5kZXggYzRkMTVmMi4uNDdmOTJhNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTMsMjIgKzMsMTYgQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAotdm9pZCBzYXZlX3N0YWNrX3RyYWNlKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3ZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQogewogCXVuc2lnbmVkIGxvbmcga3NwLCBmcCwgdGhyZWFkX2Jhc2U7Ci0Jc3RydWN0IHRocmVhZF9pbmZvICp0cDsKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwID0gdGFza190aHJlYWRfaW5mbyhjdXJyZW50KTsKIAotCWlmICghdGFzaykKLQkJdGFzayA9IGN1cnJlbnQ7Ci0JdHAgPSB0YXNrX3RocmVhZF9pbmZvKHRhc2spOwotCWlmICh0YXNrID09IGN1cnJlbnQpIHsKLQkJZmx1c2h3X2FsbCgpOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCSJtb3YJJSVmcCwgJTAiCi0JCQk6ICI9ciIgKGtzcCkKLQkJKTsKLQl9IGVsc2UKLQkJa3NwID0gdHAtPmtzcDsKKwlmbHVzaHdfYWxsKCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJtb3YJJSVmcCwgJTAiCisJCTogIj1yIiAoa3NwKQorCSk7CiAKIAlmcCA9IGtzcCArIFNUQUNLX0JJQVM7CiAJdGhyZWFkX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgdHA7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N1bjR2X2l2ZWMuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3VuNHZfaXZlYy5TCmluZGV4IDQwNTg1NWQuLjU3NGJjMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3VuNHZfaXZlYy5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3VuNHZfaXZlYy5TCkBAIC0yMiwxMiArMjIsMTIgQEAKIAliZSxwbgkleGNjLCBzdW40dl9jcHVfbW9uZG9fcXVldWVfZW1wdHkKIAkgbm9wCiAKLQkvKiBHZXQgJnRyYXBfYmxvY2tbc21wX3Byb2Nlc3Nvcl9pZCgpXSBpbnRvICVnMy4gICovCi0JbGR4YQlbJWcwXSBBU0lfU0NSQVRDSFBBRCwgJWczCi0Jc3ViCSVnMywgVFJBUF9QRVJfQ1BVX0ZBVUxUX0lORk8sICVnMworCS8qIEdldCAmdHJhcF9ibG9ja1tzbXBfcHJvY2Vzc29yX2lkKCldIGludG8gJWc0LiAgKi8KKwlsZHhhCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzQKKwlzdWIJJWc0LCBUUkFQX1BFUl9DUFVfRkFVTFRfSU5GTywgJWc0CiAKIAkvKiBHZXQgQ1BVIG1vbmRvIHF1ZXVlIGJhc2UgcGh5cyBhZGRyZXNzIGludG8gJWc3LiAgKi8KLQlsZHgJWyVnMyArIFRSQVBfUEVSX0NQVV9DUFVfTU9ORE9fUEFdLCAlZzcKKwlsZHgJWyVnNCArIFRSQVBfUEVSX0NQVV9DUFVfTU9ORE9fUEFdLCAlZzcKIAogCS8qIE5vdyBnZXQgdGhlIGNyb3NzLWNhbGwgYXJndW1lbnRzIGFuZCBoYW5kbGVyIFBDLCBzYW1lCiAJICogbGF5b3V0IGFzIHN1bjR1OgpAQCAtNDcsOCArNDcsNyBAQAogCWFkZAklZzIsIDB4NDAgLSAweDggLSAweDgsICVnMgogCiAJLyogVXBkYXRlIHF1ZXVlIGhlYWQgcG9pbnRlci4gICovCi0Jc2V0aGkJJWhpKDgxOTIgLSAxKSwgJWc0Ci0Jb3IJJWc0LCAlbG8oODE5MiAtIDEpLCAlZzQKKwlsZHV3CVslZzQgKyBUUkFQX1BFUl9DUFVfQ1BVX01PTkRPX1FNQVNLXSwgJWc0CiAJYW5kCSVnMiwgJWc0LCAlZzIKIAogCW1vdglJTlRSUV9DUFVfTU9ORE9fSEVBRCwgJWc0CkBAIC03MSwxMiArNzAsMTIgQEAKIAliZSxwbgkleGNjLCBzdW40dl9kZXZfbW9uZG9fcXVldWVfZW1wdHkKIAkgbm9wCiAKLQkvKiBHZXQgJnRyYXBfYmxvY2tbc21wX3Byb2Nlc3Nvcl9pZCgpXSBpbnRvICVnMy4gICovCi0JbGR4YQlbJWcwXSBBU0lfU0NSQVRDSFBBRCwgJWczCi0Jc3ViCSVnMywgVFJBUF9QRVJfQ1BVX0ZBVUxUX0lORk8sICVnMworCS8qIEdldCAmdHJhcF9ibG9ja1tzbXBfcHJvY2Vzc29yX2lkKCldIGludG8gJWc0LiAgKi8KKwlsZHhhCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzQKKwlzdWIJJWc0LCBUUkFQX1BFUl9DUFVfRkFVTFRfSU5GTywgJWc0CiAKIAkvKiBHZXQgREVWIG1vbmRvIHF1ZXVlIGJhc2UgcGh5cyBhZGRyZXNzIGludG8gJWc1LiAgKi8KLQlsZHgJWyVnMyArIFRSQVBfUEVSX0NQVV9ERVZfTU9ORE9fUEFdLCAlZzUKKwlsZHgJWyVnNCArIFRSQVBfUEVSX0NQVV9ERVZfTU9ORE9fUEFdLCAlZzUKIAogCS8qIExvYWQgSVZFQyBpbnRvICVnMy4gICovCiAJbGR4YQlbJWc1ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMsICVnMwpAQCAtOTAsOCArODksNyBAQAogCSAqLwogCiAJLyogVXBkYXRlIHF1ZXVlIGhlYWQgcG9pbnRlciwgdGhpcyBmcmVlcyB1cCBzb21lIHJlZ2lzdGVycy4gICovCi0Jc2V0aGkJJWhpKDgxOTIgLSAxKSwgJWc0Ci0Jb3IJJWc0LCAlbG8oODE5MiAtIDEpLCAlZzQKKwlsZHV3CVslZzQgKyBUUkFQX1BFUl9DUFVfREVWX01PTkRPX1FNQVNLXSwgJWc0CiAJYW5kCSVnMiwgJWc0LCAlZzIKIAogCW1vdglJTlRSUV9ERVZJQ0VfTU9ORE9fSEVBRCwgJWc0CkBAIC0xNDMsNiArMTQxLDggQEAKIAlicm56LHBuCSVnMSwgc3VuNHZfcmVzX21vbmRvX3F1ZXVlX2Z1bGwKIAkgbm9wCiAKKwlsZHV3CVslZzMgKyBUUkFQX1BFUl9DUFVfUkVTVU1fUU1BU0tdLCAlZzQKKwogCS8qIFJlbWVtYmVyIHRoaXMgZW50cnkncyBvZmZzZXQgaW4gJWcxLiAgKi8KIAltb3YJJWcyLCAlZzEKIApAQCAtMTczLDggKzE3Myw2IEBACiAJYWRkCSVnMiwgMHgwOCwgJWcyCiAKIAkvKiBVcGRhdGUgcXVldWUgaGVhZCBwb2ludGVyLiAgKi8KLQlzZXRoaQklaGkoODE5MiAtIDEpLCAlZzQKLQlvcgklZzQsICVsbyg4MTkyIC0gMSksICVnNAogCWFuZAklZzIsICVnNCwgJWcyCiAKIAltb3YJSU5UUlFfUkVTVU1fTU9ORE9fSEVBRCwgJWc0CkBAIC0yNTQsNiArMjUyLDggQEAKIAlicm56LHBuCSVnMSwgc3VuNHZfbm9ucmVzX21vbmRvX3F1ZXVlX2Z1bGwKIAkgbm9wCiAKKwlsZHV3CVslZzMgKyBUUkFQX1BFUl9DUFVfTk9OUkVTVU1fUU1BU0tdLCAlZzQKKwogCS8qIFJlbWVtYmVyIHRoaXMgZW50cnkncyBvZmZzZXQgaW4gJWcxLiAgKi8KIAltb3YJJWcyLCAlZzEKIApAQCAtMjg0LDggKzI4NCw2IEBACiAJYWRkCSVnMiwgMHgwOCwgJWcyCiAKIAkvKiBVcGRhdGUgcXVldWUgaGVhZCBwb2ludGVyLiAgKi8KLQlzZXRoaQklaGkoODE5MiAtIDEpLCAlZzQKLQlvcgklZzQsICVsbyg4MTkyIC0gMSksICVnNAogCWFuZAklZzIsICVnNCwgJWcyCiAKIAltb3YJSU5UUlFfTk9OUkVTVU1fTU9ORE9fSEVBRCwgJWc0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N1bm9zX2lvY3RsMzIuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3Vub3NfaW9jdGwzMi5jCmluZGV4IGEwNWU0M2QuLjc1ZDJiYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3Vub3NfaW9jdGwzMi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3Vub3NfaW9jdGwzMi5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMuYwppbmRleCBhNTNkNGFiLi5kMTA4ZWViIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvaXBjLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMKaW5kZXggNzg3NmEwMi4uYWJkODMxMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwpAQCAtNzc1LDE1ICs3NzUsMjUgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl91dGltZXMoY2hhciBfX3VzZXIgKmZpbGVuYW1lLAogCQkJICAgICBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0dnMpCiB7Ci0Jc3RydWN0IHRpbWV2YWwga3R2c1syXTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHZbMl07CiAKIAlpZiAodHZzKSB7CisJCXN0cnVjdCB0aW1ldmFsIGt0dnNbMl07CiAJCWlmIChnZXRfdHYzMigma3R2c1swXSwgdHZzKSB8fAogCQkgICAgZ2V0X3R2MzIoJmt0dnNbMV0sIDErdHZzKSkKIAkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChrdHZzWzBdLnR2X3VzZWMgPCAwIHx8IGt0dnNbMF0udHZfdXNlYyA+PSAxMDAwMDAwIHx8CisJCSAgICBrdHZzWzFdLnR2X3VzZWMgPCAwIHx8IGt0dnNbMV0udHZfdXNlYyA+PSAxMDAwMDAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJdHZbMF0udHZfc2VjID0ga3R2c1swXS50dl9zZWM7CisJCXR2WzBdLnR2X25zZWMgPSAxMDAwICoga3R2c1swXS50dl91c2VjOworCQl0dlsxXS50dl9zZWMgPSBrdHZzWzFdLnR2X3NlYzsKKwkJdHZbMV0udHZfbnNlYyA9IDEwMDAgKiBrdHZzWzFdLnR2X3VzZWM7CiAJfQogCi0JcmV0dXJuIGRvX3V0aW1lcyhBVF9GRENXRCwgZmlsZW5hbWUsICh0dnMgPyAma3R2c1swXSA6IE5VTEwpKTsKKwlyZXR1cm4gZG9fdXRpbWVzKEFUX0ZEQ1dELCBmaWxlbmFtZSwgdHZzID8gdHYgOiBOVUxMLCAwKTsKIH0KIAogLyogVGhlc2UgYXJlIGhlcmUganVzdCBpbiBjYXNlIHNvbWUgb2xkIHNwYXJjMzIgYmluYXJ5IGNhbGxzIGl0LiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c3RibHMuUwppbmRleCA0OGMzNmZlLi44NzY1ZTMyMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKQEAgLTgxLDYgKzgxLDcgQEAKIAkud29yZCBzeXNfZmNobW9kYXQsIHN5c19mYWNjZXNzYXQsIGNvbXBhdF9zeXNfcHNlbGVjdDYsIGNvbXBhdF9zeXNfcHBvbGwsIHN5c191bnNoYXJlCiAvKjMwMCovCS53b3JkIGNvbXBhdF9zeXNfc2V0X3JvYnVzdF9saXN0LCBjb21wYXRfc3lzX2dldF9yb2J1c3RfbGlzdCwgY29tcGF0X3N5c19taWdyYXRlX3BhZ2VzLCBjb21wYXRfc3lzX21iaW5kLCBjb21wYXRfc3lzX2dldF9tZW1wb2xpY3kKIAkud29yZCBjb21wYXRfc3lzX3NldF9tZW1wb2xpY3ksIGNvbXBhdF9zeXNfa2V4ZWNfbG9hZCwgY29tcGF0X3N5c19tb3ZlX3BhZ2VzLCBzeXNfZ2V0Y3B1LCBjb21wYXRfc3lzX2Vwb2xsX3B3YWl0CisvKjMxMCovCS53b3JkIGNvbXBhdF9zeXNfdXRpbWVuc2F0LCBjb21wYXRfc3lzX3NpZ25hbGZkLCBjb21wYXRfc3lzX3RpbWVyZmQsIHN5c19ldmVudGZkCiAKICNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAKQEAgLTE1Miw2ICsxNTMsNyBAQAogCS53b3JkIHN5c19mY2htb2RhdCwgc3lzX2ZhY2Nlc3NhdCwgc3lzX3BzZWxlY3Q2LCBzeXNfcHBvbGwsIHN5c191bnNoYXJlCiAvKjMwMCovCS53b3JkIHN5c19zZXRfcm9idXN0X2xpc3QsIHN5c19nZXRfcm9idXN0X2xpc3QsIHN5c19taWdyYXRlX3BhZ2VzLCBzeXNfbWJpbmQsIHN5c19nZXRfbWVtcG9saWN5CiAJLndvcmQgc3lzX3NldF9tZW1wb2xpY3ksIHN5c19rZXhlY19sb2FkLCBzeXNfbW92ZV9wYWdlcywgc3lzX2dldGNwdSwgc3lzX2Vwb2xsX3B3YWl0CisvKjMxMCovCS53b3JkIHN5c191dGltZW5zYXQsIHN5c19zaWduYWxmZCwgc3lzX3RpbWVyZmQsIHN5c19ldmVudGZkCiAKICNpZiBkZWZpbmVkKENPTkZJR19TVU5PU19FTVVMKSB8fCBkZWZpbmVkKENPTkZJR19TT0xBUklTX0VNVUwpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19TT0xBUklTX0VNVUxfTU9EVUxFKQpAQCAtMjY5LDUgKzI3MSw3IEBACiAJLndvcmQgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cwogCS53b3JkIHN1bm9zX25vc3lzLCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMKIAkud29yZCBzdW5vc19ub3N5cworLyozMTAqLwkud29yZCBzdW5vc19ub3N5cywgc3Vub3Nfbm9zeXMsIHN1bm9zX25vc3lzCisJLndvcmQgc3Vub3Nfbm9zeXMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3RpbWUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdGltZS5jCmluZGV4IDI1OTA2M2YuLmEzMWEwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdGltZS5jCkBAIC01NSw2ICs1NSw3IEBACiB2b2lkIF9faW9tZW0gKm1zdGs0OHQwMl9yZWdzID0gTlVMTDsKICNpZmRlZiBDT05GSUdfUENJCiB1bnNpZ25lZCBsb25nIGRzMTI4N19yZWdzID0gMFVMOworc3RhdGljIHZvaWQgX19pb21lbSAqYnE0ODAyX3JlZ3M7CiAjZW5kaWYKIAogc3RhdGljIHZvaWQgX19pb21lbSAqbXN0azQ4dDA4X3JlZ3M7CkBAIC01NjUsMTIgKzU2NiwxNCBAQAogCXZvaWQgX19pb21lbSAqbXJlZ3MgPSBtc3RrNDh0MDJfcmVnczsKICNpZmRlZiBDT05GSUdfUENJCiAJdW5zaWduZWQgbG9uZyBkcmVncyA9IGRzMTI4N19yZWdzOworCXZvaWQgX19pb21lbSAqYnJlZ3MgPSBicTQ4MDJfcmVnczsKICNlbHNlCiAJdW5zaWduZWQgbG9uZyBkcmVncyA9IDBVTDsKKwl2b2lkIF9faW9tZW0gKmJyZWdzID0gMFVMOwogI2VuZGlmCiAJdTggdG1wOwogCi0JaWYgKCFtcmVncyAmJiAhZHJlZ3MpIHsKKwlpZiAoIW1yZWdzICYmICFkcmVncyAmJiAhYnJlZ3MpIHsKIAkJcHJvbV9wcmludGYoIlNvbWV0aGluZyB3cm9uZywgY2xvY2sgcmVncyBub3QgbWFwcGVkIHlldC5cbiIpOwogCQlwcm9tX2hhbHQoKTsKIAl9CQkKQEAgLTU4OSw2ICs1OTIsMzMgQEAKIAkJZGF5ID0gTVNUS19SRUdfRE9NKG1yZWdzKTsKIAkJbW9uID0gTVNUS19SRUdfTU9OVEgobXJlZ3MpOwogCQl5ZWFyID0gTVNUS19DVlRfWUVBUiggTVNUS19SRUdfWUVBUihtcmVncykgKTsKKwl9IGVsc2UgaWYgKGJyZWdzKSB7CisJCXVuc2lnbmVkIGNoYXIgdmFsID0gcmVhZGIoYnJlZ3MgKyAweDBlKTsKKwkJdW5zaWduZWQgaW50IGNlbnR1cnk7CisKKwkJLyogQlE0ODAyIFJUQyBjaGlwLiAqLworCisJCXdyaXRlYih2YWwgfCAweDA4LCBicmVncyArIDB4MGUpOworCisJCXNlYyAgPSByZWFkYihicmVncyArIDB4MDApOworCQltaW4gID0gcmVhZGIoYnJlZ3MgKyAweDAyKTsKKwkJaG91ciA9IHJlYWRiKGJyZWdzICsgMHgwNCk7CisJCWRheSAgPSByZWFkYihicmVncyArIDB4MDYpOworCQltb24gID0gcmVhZGIoYnJlZ3MgKyAweDA5KTsKKwkJeWVhciA9IHJlYWRiKGJyZWdzICsgMHgwYSk7CisJCWNlbnR1cnkgPSByZWFkYihicmVncyArIDB4MGYpOworCisJCXdyaXRlYih2YWwsIGJyZWdzICsgMHgwZSk7CisKKwkJQkNEX1RPX0JJTihzZWMpOworCQlCQ0RfVE9fQklOKG1pbik7CisJCUJDRF9UT19CSU4oaG91cik7CisJCUJDRF9UT19CSU4oZGF5KTsKKwkJQkNEX1RPX0JJTihtb24pOworCQlCQ0RfVE9fQklOKHllYXIpOworCQlCQ0RfVE9fQklOKGNlbnR1cnkpOworCisJCXllYXIgKz0gKGNlbnR1cnkgKiAxMDApOwogCX0gZWxzZSB7CiAJCS8qIERhbGxhcyAxMjg4NyBSVEMgY2hpcC4gKi8KIApAQCAtNjUwLDIyICs2ODAsMTQgQEAKIAogc3RhdGljIHUzMiBoeXBlcnZpc29yX2dldF90aW1lKHZvaWQpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBmdW5jIGFzbSgiJW81Iik7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBhcmcwIGFzbSgiJW8wIik7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBhcmcxIGFzbSgiJW8xIik7CisJdW5zaWduZWQgbG9uZyByZXQsIHRpbWU7CiAJaW50IHJldHJpZXMgPSAxMDAwMDsKIAogcmV0cnk6Ci0JZnVuYyA9IEhWX0ZBU1RfVE9EX0dFVDsKLQlhcmcwID0gMDsKLQlhcmcxID0gMDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygidGEJJTYiCi0JCQkgICAgIDogIj0mciIgKGZ1bmMpLCAiPSZyIiAoYXJnMCksICI9JnIiIChhcmcxKQotCQkJICAgICA6ICIwIiAoZnVuYyksICIxIiAoYXJnMCksICIyIiAoYXJnMSksCi0JCQkgICAgICAgImkiIChIVl9GQVNUX1RSQVApKTsKLQlpZiAoYXJnMCA9PSBIVl9FT0spCi0JCXJldHVybiBhcmcxOwotCWlmIChhcmcwID09IEhWX0VXT1VMREJMT0NLKSB7CisJcmV0ID0gc3VuNHZfdG9kX2dldCgmdGltZSk7CisJaWYgKHJldCA9PSBIVl9FT0spCisJCXJldHVybiB0aW1lOworCWlmIChyZXQgPT0gSFZfRVdPVUxEQkxPQ0spIHsKIAkJaWYgKC0tcmV0cmllcyA+IDApIHsKIAkJCXVkZWxheSgxMDApOwogCQkJZ290byByZXRyeTsKQEAgLTY3OSwyMCArNzAxLDE0IEBACiAKIHN0YXRpYyBpbnQgaHlwZXJ2aXNvcl9zZXRfdGltZSh1MzIgc2VjcykKIHsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGZ1bmMgYXNtKCIlbzUiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzAgYXNtKCIlbzAiKTsKKwl1bnNpZ25lZCBsb25nIHJldDsKIAlpbnQgcmV0cmllcyA9IDEwMDAwOwogCiByZXRyeToKLQlmdW5jID0gSFZfRkFTVF9UT0RfU0VUOwotCWFyZzAgPSBzZWNzOwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJ0YQklNCIKLQkJCSAgICAgOiAiPSZyIiAoZnVuYyksICI9JnIiIChhcmcwKQotCQkJICAgICA6ICIwIiAoZnVuYyksICIxIiAoYXJnMCksCi0JCQkgICAgICAgImkiIChIVl9GQVNUX1RSQVApKTsKLQlpZiAoYXJnMCA9PSBIVl9FT0spCisJcmV0ID0gc3VuNHZfdG9kX3NldChzZWNzKTsKKwlpZiAocmV0ID09IEhWX0VPSykKIAkJcmV0dXJuIDA7Ci0JaWYgKGFyZzAgPT0gSFZfRVdPVUxEQkxPQ0spIHsKKwlpZiAocmV0ID09IEhWX0VXT1VMREJMT0NLKSB7CiAJCWlmICgtLXJldHJpZXMgPiAwKSB7CiAJCQl1ZGVsYXkoMTAwKTsKIAkJCWdvdG8gcmV0cnk7CkBAIC03MTIsNyArNzI4LDggQEAKIAkgICAgc3RyY21wKG1vZGVsLCAibTU4MTkiKSAmJgogCSAgICBzdHJjbXAobW9kZWwsICJtNTgxOXAiKSAmJgogCSAgICBzdHJjbXAobW9kZWwsICJtNTgyMyIpICYmCi0JICAgIHN0cmNtcChtb2RlbCwgImRzMTI4NyIpKQorCSAgICBzdHJjbXAobW9kZWwsICJkczEyODciKSAmJgorCSAgICBzdHJjbXAobW9kZWwsICJicTQ4MDIiKSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKQEAgLTcyMiw5ICs3MzksMTMgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPm5vZGU7CiAJY29uc3QgY2hhciAqbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJtb2RlbCIsIE5VTEwpOworCWNvbnN0IGNoYXIgKmNvbXBhdCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImNvbXBhdGlibGUiLCBOVUxMKTsKIAl1bnNpZ25lZCBsb25nIHNpemUsIGZsYWdzOwogCXZvaWQgX19pb21lbSAqcmVnczsKIAorCWlmICghbW9kZWwpCisJCW1vZGVsID0gY29tcGF0OworCiAJaWYgKCFtb2RlbCB8fCAhY2xvY2tfbW9kZWxfbWF0Y2hlcyhtb2RlbCkpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC03NDYsNiArNzY3LDggQEAKIAkgICAgIXN0cmNtcChtb2RlbCwgIm01ODE5cCIpIHx8CiAJICAgICFzdHJjbXAobW9kZWwsICJtNTgyMyIpKSB7CiAJCWRzMTI4N19yZWdzID0gKHVuc2lnbmVkIGxvbmcpIHJlZ3M7CisJfSBlbHNlIGlmICghc3RyY21wKG1vZGVsLCAiYnE0ODAyIikpIHsKKwkJYnE0ODAyX3JlZ3MgPSByZWdzOwogCX0gZWxzZQogI2VuZGlmCiAJaWYgKG1vZGVsWzVdID09ICcwJyAmJiBtb2RlbFs2XSA9PSAnMicpIHsKQEAgLTgyNSw3ICs4NDgsNiBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3BhcmM2NF9pbml0X3RpbWVycyh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwogCXVuc2lnbmVkIGxvbmcgY2xvY2s7CiAjaWZkZWYgQ09ORklHX1NNUAogCWV4dGVybiB2b2lkIHNtcF90aWNrX2luaXQodm9pZCk7CkBAIC04NDIsMTcgKzg2NCwxNSBAQAogCQlpZiAobWFudWYgPT0gMHgxNyAmJiBpbXBsID09IDB4MTMpIHsKIAkJCS8qIEh1bW1pbmdiaXJkLCBha2EgVWx0cmEtSUllICovCiAJCQl0aWNrX29wcyA9ICZoYnRpY2tfb3BlcmF0aW9uczsKLQkJCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAic3RpY2stZnJlcXVlbmN5IiwgTlVMTCk7CisJCQljbG9jayA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgInN0aWNrLWZyZXF1ZW5jeSIsIDApOwogCQl9IGVsc2UgewogCQkJdGlja19vcHMgPSAmdGlja19vcGVyYXRpb25zOwotCQkJY3B1X2ZpbmRfYnlfaW5zdGFuY2UoMCwgJmRwLCBOVUxMKTsKLQkJCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7CisJCQljbG9jayA9IGxvY2FsX2NwdV9kYXRhKCkuY2xvY2tfdGljazsKIAkJfQogCX0gZWxzZSB7CiAJCXRpY2tfb3BzID0gJnN0aWNrX29wZXJhdGlvbnM7Ci0JCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAic3RpY2stZnJlcXVlbmN5IiwgTlVMTCk7CisJCWNsb2NrID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAic3RpY2stZnJlcXVlbmN5IiwgMCk7CiAJfQotCWNsb2NrID0gKih1bnNpZ25lZCBpbnQgKikgcHJvcC0+dmFsdWU7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJc21wX3RpY2tfaW5pdCgpOwpAQCAtOTkzLDcgKzEwMTMsNyBAQAogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShzZXZ0KTsKIH0KIAotI2RlZmluZSBTUEFSQzY0X05TRUNfUEVSX0NZQ19TSElGVAkzMlVMCisjZGVmaW5lIFNQQVJDNjRfTlNFQ19QRVJfQ1lDX1NISUZUCTEwVUwKIAogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV90aWNrID0gewogCS5yYXRpbmcJCT0gMTAwLApAQCAtMTA3MCw4ICsxMDkwLDEwIEBACiAJdm9pZCBfX2lvbWVtICptcmVncyA9IG1zdGs0OHQwMl9yZWdzOwogI2lmZGVmIENPTkZJR19QQ0kKIAl1bnNpZ25lZCBsb25nIGRyZWdzID0gZHMxMjg3X3JlZ3M7CisJdm9pZCBfX2lvbWVtICpicmVncyA9IGJxNDgwMl9yZWdzOwogI2Vsc2UKIAl1bnNpZ25lZCBsb25nIGRyZWdzID0gMFVMOworCXZvaWQgX19pb21lbSAqYnJlZ3MgPSAwVUw7CiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IHRtcDsKQEAgLTEwODAsNyArMTEwMiw3IEBACiAJICogTm90IGhhdmluZyBhIHJlZ2lzdGVyIHNldCBjYW4gbGVhZCB0byB0cm91YmxlLgogCSAqIEFsc28gc3RhcmZpcmUgZG9lc24ndCBoYXZlIGEgdG9kIGNsb2NrLgogCSAqLwotCWlmICghbXJlZ3MgJiYgIWRyZWdzKSAKKwlpZiAoIW1yZWdzICYmICFkcmVncyAmICFicmVncykKIAkJcmV0dXJuIC0xOwogCiAJaWYgKG1yZWdzKSB7CkBAIC0xMTI5LDYgKzExNTEsMzcgQEAKIAogCQkJcmV0dXJuIC0xOwogCQl9CisJfSBlbHNlIGlmIChicmVncykgeworCQlpbnQgcmV0dmFsID0gMDsKKwkJdW5zaWduZWQgY2hhciB2YWwgPSByZWFkYihicmVncyArIDB4MGUpOworCisJCS8qIEJRNDgwMiBSVEMgY2hpcC4gKi8KKworCQl3cml0ZWIodmFsIHwgMHgwOCwgYnJlZ3MgKyAweDBlKTsKKworCQljaGlwX21pbnV0ZXMgPSByZWFkYihicmVncyArIDB4MDIpOworCQlCQ0RfVE9fQklOKGNoaXBfbWludXRlcyk7CisJCXJlYWxfc2Vjb25kcyA9IG5vd3RpbWUgJSA2MDsKKwkJcmVhbF9taW51dGVzID0gbm93dGltZSAvIDYwOworCQlpZiAoKChhYnMocmVhbF9taW51dGVzIC0gY2hpcF9taW51dGVzKSArIDE1KS8zMCkgJiAxKQorCQkJcmVhbF9taW51dGVzICs9IDMwOworCQlyZWFsX21pbnV0ZXMgJT0gNjA7CisKKwkJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjaGlwX21pbnV0ZXMpIDwgMzApIHsKKwkJCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKKwkJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJCXdyaXRlYihyZWFsX3NlY29uZHMsIGJyZWdzICsgMHgwMCk7CisJCQl3cml0ZWIocmVhbF9taW51dGVzLCBicmVncyArIDB4MDIpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzZXRfcnRjX21tc3M6IGNhbid0IHVwZGF0ZSBmcm9tICVkIHRvICVkXG4iLAorCQkJICAgICAgIGNoaXBfbWludXRlcywgcmVhbF9taW51dGVzKTsKKwkJCXJldHZhbCA9IC0xOworCQl9CisKKwkJd3JpdGViKHZhbCwgYnJlZ3MgKyAweDBlKTsKKworCQlyZXR1cm4gcmV0dmFsOwogCX0gZWxzZSB7CiAJCWludCByZXR2YWwgPSAwOwogCQl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbCwgc2F2ZV9mcmVxX3NlbGVjdDsKQEAgLTEyNTksMzggKzEzMTIsMTU2IEBACiAvKiBCb3RoIFN0YXJmaXJlIGFuZCBTVU40ViBnaXZlIHVzIHNlY29uZHMgc2luY2UgSmFuIDFzdCwgMTk3MCwKICAqIGFrYSBVbml4IHRpbWUuICBTbyB3ZSBoYXZlIHRvIGNvbnZlcnQgdG8vZnJvbSBydGNfdGltZS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIG1pbmlfZ2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSkKK3N0YXRpYyB2b2lkIHN0YXJmaXJlX2dldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgc2Vjb25kczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCXNlY29uZHMgPSAwOwotCWlmICh0aGlzX2lzX3N0YXJmaXJlKQotCQlzZWNvbmRzID0gc3RhcmZpcmVfZ2V0X3RpbWUoKTsKLQllbHNlIGlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQotCQlzZWNvbmRzID0gaHlwZXJ2aXNvcl9nZXRfdGltZSgpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CisJdTMyIHNlY29uZHMgPSBzdGFyZmlyZV9nZXRfdGltZSgpOwogCiAJdG9fdG0oc2Vjb25kcywgdGltZSk7CiAJdGltZS0+dG1feWVhciAtPSAxOTAwOwogCXRpbWUtPnRtX21vbiAtPSAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBtaW5pX3NldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCitzdGF0aWMgaW50IHN0YXJmaXJlX3NldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCiB7CiAJdTMyIHNlY29uZHMgPSBta3RpbWUodGltZS0+dG1feWVhciArIDE5MDAsIHRpbWUtPnRtX21vbiArIDEsCiAJCQkgICAgIHRpbWUtPnRtX21kYXksIHRpbWUtPnRtX2hvdXIsCiAJCQkgICAgIHRpbWUtPnRtX21pbiwgdGltZS0+dG1fc2VjKTsKKworCXJldHVybiBzdGFyZmlyZV9zZXRfdGltZShzZWNvbmRzKTsKK30KKworc3RhdGljIHZvaWQgaHlwZXJ2aXNvcl9nZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lKQoreworCXUzMiBzZWNvbmRzID0gaHlwZXJ2aXNvcl9nZXRfdGltZSgpOworCisJdG9fdG0oc2Vjb25kcywgdGltZSk7CisJdGltZS0+dG1feWVhciAtPSAxOTAwOworCXRpbWUtPnRtX21vbiAtPSAxOworfQorCitzdGF0aWMgaW50IGh5cGVydmlzb3Jfc2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSkKK3sKKwl1MzIgc2Vjb25kcyA9IG1rdGltZSh0aW1lLT50bV95ZWFyICsgMTkwMCwgdGltZS0+dG1fbW9uICsgMSwKKwkJCSAgICAgdGltZS0+dG1fbWRheSwgdGltZS0+dG1faG91ciwKKwkJCSAgICAgdGltZS0+dG1fbWluLCB0aW1lLT50bV9zZWMpOworCisJcmV0dXJuIGh5cGVydmlzb3Jfc2V0X3RpbWUoc2Vjb25kcyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUENJCitzdGF0aWMgdm9pZCBicTQ4MDJfZ2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbCA9IHJlYWRiKGJxNDgwMl9yZWdzICsgMHgwZSk7CisJdW5zaWduZWQgaW50IGNlbnR1cnk7CisKKwl3cml0ZWIodmFsIHwgMHgwOCwgYnE0ODAyX3JlZ3MgKyAweDBlKTsKKworCXRpbWUtPnRtX3NlYyA9IHJlYWRiKGJxNDgwMl9yZWdzICsgMHgwMCk7CisJdGltZS0+dG1fbWluID0gcmVhZGIoYnE0ODAyX3JlZ3MgKyAweDAyKTsKKwl0aW1lLT50bV9ob3VyID0gcmVhZGIoYnE0ODAyX3JlZ3MgKyAweDA0KTsKKwl0aW1lLT50bV9tZGF5ID0gcmVhZGIoYnE0ODAyX3JlZ3MgKyAweDA2KTsKKwl0aW1lLT50bV9tb24gPSByZWFkYihicTQ4MDJfcmVncyArIDB4MDkpOworCXRpbWUtPnRtX3llYXIgPSByZWFkYihicTQ4MDJfcmVncyArIDB4MGEpOworCXRpbWUtPnRtX3dkYXkgPSByZWFkYihicTQ4MDJfcmVncyArIDB4MDgpOworCWNlbnR1cnkgPSByZWFkYihicTQ4MDJfcmVncyArIDB4MGYpOworCisJd3JpdGViKHZhbCwgYnE0ODAyX3JlZ3MgKyAweDBlKTsKKworCUJDRF9UT19CSU4odGltZS0+dG1fc2VjKTsKKwlCQ0RfVE9fQklOKHRpbWUtPnRtX21pbik7CisJQkNEX1RPX0JJTih0aW1lLT50bV9ob3VyKTsKKwlCQ0RfVE9fQklOKHRpbWUtPnRtX21kYXkpOworCUJDRF9UT19CSU4odGltZS0+dG1fbW9uKTsKKwlCQ0RfVE9fQklOKHRpbWUtPnRtX3llYXIpOworCUJDRF9UT19CSU4odGltZS0+dG1fd2RheSk7CisJQkNEX1RPX0JJTihjZW50dXJ5KTsKKworCXRpbWUtPnRtX3llYXIgKz0gKGNlbnR1cnkgKiAxMDApOworCXRpbWUtPnRtX3llYXIgLT0gMTkwMDsKKworCXRpbWUtPnRtX21vbi0tOworfQorCitzdGF0aWMgaW50IGJxNDgwMl9zZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lKQoreworCXVuc2lnbmVkIGNoYXIgdmFsID0gcmVhZGIoYnE0ODAyX3JlZ3MgKyAweDBlKTsKKwl1bnNpZ25lZCBjaGFyIHNlYywgbWluLCBocnMsIGRheSwgbW9uLCB5cnMsIGNlbnR1cnk7CisJdW5zaWduZWQgaW50IHllYXI7CisKKwl5ZWFyID0gdGltZS0+dG1feWVhciArIDE5MDA7CisJY2VudHVyeSA9IHllYXIgLyAxMDA7CisJeXJzID0geWVhciAlIDEwMDsKKworCW1vbiA9IHRpbWUtPnRtX21vbiArIDE7ICAgLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCisJZGF5ID0gdGltZS0+dG1fbWRheTsKKwlocnMgPSB0aW1lLT50bV9ob3VyOworCW1pbiA9IHRpbWUtPnRtX21pbjsKKwlzZWMgPSB0aW1lLT50bV9zZWM7CisKKwlCSU5fVE9fQkNEKHNlYyk7CisJQklOX1RPX0JDRChtaW4pOworCUJJTl9UT19CQ0QoaHJzKTsKKwlCSU5fVE9fQkNEKGRheSk7CisJQklOX1RPX0JDRChtb24pOworCUJJTl9UT19CQ0QoeXJzKTsKKwlCSU5fVE9fQkNEKGNlbnR1cnkpOworCisJd3JpdGViKHZhbCB8IDB4MDgsIGJxNDgwMl9yZWdzICsgMHgwZSk7CisKKwl3cml0ZWIoc2VjLCBicTQ4MDJfcmVncyArIDB4MDApOworCXdyaXRlYihtaW4sIGJxNDgwMl9yZWdzICsgMHgwMik7CisJd3JpdGViKGhycywgYnE0ODAyX3JlZ3MgKyAweDA0KTsKKwl3cml0ZWIoZGF5LCBicTQ4MDJfcmVncyArIDB4MDYpOworCXdyaXRlYihtb24sIGJxNDgwMl9yZWdzICsgMHgwOSk7CisJd3JpdGViKHlycywgYnE0ODAyX3JlZ3MgKyAweDBhKTsKKwl3cml0ZWIoY2VudHVyeSwgYnE0ODAyX3JlZ3MgKyAweDBmKTsKKworCXdyaXRlYih2YWwsIGJxNDgwMl9yZWdzICsgMHgwZSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKK3N0cnVjdCBtaW5pX3J0Y19vcHMgeworCXZvaWQgKCpnZXRfcnRjX3RpbWUpKHN0cnVjdCBydGNfdGltZSAqKTsKKwlpbnQgKCpzZXRfcnRjX3RpbWUpKHN0cnVjdCBydGNfdGltZSAqKTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWluaV9ydGNfb3BzIHN0YXJmaXJlX3J0Y19vcHMgPSB7CisJLmdldF9ydGNfdGltZSA9IHN0YXJmaXJlX2dldF9ydGNfdGltZSwKKwkuc2V0X3J0Y190aW1lID0gc3RhcmZpcmVfc2V0X3J0Y190aW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBtaW5pX3J0Y19vcHMgaHlwZXJ2aXNvcl9ydGNfb3BzID0geworCS5nZXRfcnRjX3RpbWUgPSBoeXBlcnZpc29yX2dldF9ydGNfdGltZSwKKwkuc2V0X3J0Y190aW1lID0gaHlwZXJ2aXNvcl9zZXRfcnRjX3RpbWUsCit9OworCisjaWZkZWYgQ09ORklHX1BDSQorc3RhdGljIHN0cnVjdCBtaW5pX3J0Y19vcHMgYnE0ODAyX3J0Y19vcHMgPSB7CisJLmdldF9ydGNfdGltZSA9IGJxNDgwMl9nZXRfcnRjX3RpbWUsCisJLnNldF9ydGNfdGltZSA9IGJxNDgwMl9zZXRfcnRjX3RpbWUsCit9OworI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KKworc3RhdGljIHN0cnVjdCBtaW5pX3J0Y19vcHMgKm1pbmlfcnRjX29wczsKKworc3RhdGljIGlubGluZSB2b2lkIG1pbmlfZ2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CisJbWluaV9ydGNfb3BzLT5nZXRfcnRjX3RpbWUodGltZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWluaV9zZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lKQorewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCWVyciA9IC1FTk9ERVY7Ci0JaWYgKHRoaXNfaXNfc3RhcmZpcmUpCi0JCWVyciA9IHN0YXJmaXJlX3NldF90aW1lKHNlY29uZHMpOwotCWVsc2UgIGlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQotCQllcnIgPSBoeXBlcnZpc29yX3NldF90aW1lKHNlY29uZHMpOworCWVyciA9IG1pbmlfcnRjX29wcy0+c2V0X3J0Y190aW1lKHRpbWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTM5MSw3ICsxNTYyLDE1IEBACiB7CiAJaW50IHJldHZhbDsKIAotCWlmICh0bGJfdHlwZSAhPSBoeXBlcnZpc29yICYmICF0aGlzX2lzX3N0YXJmaXJlKQorCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQltaW5pX3J0Y19vcHMgPSAmaHlwZXJ2aXNvcl9ydGNfb3BzOworCWVsc2UgaWYgKHRoaXNfaXNfc3RhcmZpcmUpCisJCW1pbmlfcnRjX29wcyA9ICZzdGFyZmlyZV9ydGNfb3BzOworI2lmZGVmIENPTkZJR19QQ0kKKwllbHNlIGlmIChicTQ4MDJfcmVncykKKwkJbWluaV9ydGNfb3BzID0gJmJxNDgwMl9ydGNfb3BzOworI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KKwllbHNlCiAJCXJldHVybiAtRU5PREVWOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTWluaSBSVEMgRHJpdmVyXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYwppbmRleCBhZDY3Nzg0Li4wMGE5ZTMyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCkBAIC0xNSwxMCArMTUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAKKyNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTM2LDI2ICszNywxMiBAQAogI2luY2x1ZGUgPGFzbS9wc3Jjb21wYXQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWVyLmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9oZWFkLmg+CiAjaWZkZWYgQ09ORklHX0tNT0QKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogCi1BVE9NSUNfTk9USUZJRVJfSEVBRChzcGFyYzY0ZGllX2NoYWluKTsKLQotaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQotewotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnNwYXJjNjRkaWVfY2hhaW4sIG5iKTsKLX0KLUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZGllX25vdGlmaWVyKTsKLQotaW50IHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZzcGFyYzY0ZGllX2NoYWluLCBuYik7Ci19Ci1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKTsKIAogLyogV2hlbiBhbiBpcnJlY292ZXJhYmxlIHRyYXAgb2NjdXJzIGF0IHRsID4gMCwgdGhlIHRyYXAgZW50cnkKICAqIGNvZGUgbG9ncyB0aGUgdHJhcCBzdGF0ZSByZWdpc3RlcnMgYXQgZXZlcnkgbGV2ZWwgaW4gdGhlIHRyYXAKQEAgLTgwOCw4ICs3OTUsNyBAQAogdm9pZCBfX2luaXQgY2hlZXRhaF9lY2FjaGVfZmx1c2hfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbGFyZ2VzdF9zaXplLCBzbWFsbGVzdF9saW5lc2l6ZSwgb3JkZXIsIHZlcjsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwotCWludCBpLCBpbnN0YW5jZSwgc3o7CisJaW50IGksIHN6OwogCiAJLyogU2NhbiBhbGwgY3B1IGRldmljZSB0cmVlIG5vZGVzLCBub3RlIHR3byB2YWx1ZXM6CiAJICogMSkgbGFyZ2VzdCBFLWNhY2hlIHNpemUKQEAgLTgxOCwxOCArODA0LDIwIEBACiAJbGFyZ2VzdF9zaXplID0gMFVMOwogCXNtYWxsZXN0X2xpbmVzaXplID0gfjBVTDsKIAotCWluc3RhbmNlID0gMDsKLQl3aGlsZSAoIWNwdV9maW5kX2J5X2luc3RhbmNlKGluc3RhbmNlLCAmZHAsIE5VTEwpKSB7CisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIHZhbDsKIAotCQl2YWwgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJlY2FjaGUtc2l6ZSIsCi0JCQkJCSAgICAoMiAqIDEwMjQgKiAxMDI0KSk7CisJCXZhbCA9IGNwdV9kYXRhKGkpLmVjYWNoZV9zaXplOworCQlpZiAoIXZhbCkKKwkJCWNvbnRpbnVlOworCiAJCWlmICh2YWwgPiBsYXJnZXN0X3NpemUpCiAJCQlsYXJnZXN0X3NpemUgPSB2YWw7Ci0JCXZhbCA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImVjYWNoZS1saW5lLXNpemUiLCA2NCk7CisKKwkJdmFsID0gY3B1X2RhdGEoaSkuZWNhY2hlX2xpbmVfc2l6ZTsKIAkJaWYgKHZhbCA8IHNtYWxsZXN0X2xpbmVzaXplKQogCQkJc21hbGxlc3RfbGluZXNpemUgPSB2YWw7Ci0JCWluc3RhbmNlKys7CisKIAl9CiAKIAlpZiAobGFyZ2VzdF9zaXplID09IDBVTCB8fCBzbWFsbGVzdF9saW5lc2l6ZSA9PSB+MFVMKSB7CkBAIC0yNTc3LDcgKzI1NjUsMTUgQEAKIAkgICAgKFRSQVBfUEVSX0NQVV9UU0JfSFVHRV9URU1QICE9CiAJICAgICBvZmZzZXRvZihzdHJ1Y3QgdHJhcF9wZXJfY3B1LCB0c2JfaHVnZV90ZW1wKSkgfHwKIAkgICAgKFRSQVBfUEVSX0NQVV9JUlFfV09SS0xJU1QgIT0KLQkgICAgIG9mZnNldG9mKHN0cnVjdCB0cmFwX3Blcl9jcHUsIGlycV93b3JrbGlzdCkpKQorCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHRyYXBfcGVyX2NwdSwgaXJxX3dvcmtsaXN0KSkgfHwKKwkgICAgKFRSQVBfUEVSX0NQVV9DUFVfTU9ORE9fUU1BU0sgIT0KKwkgICAgIG9mZnNldG9mKHN0cnVjdCB0cmFwX3Blcl9jcHUsIGNwdV9tb25kb19xbWFzaykpIHx8CisJICAgIChUUkFQX1BFUl9DUFVfREVWX01PTkRPX1FNQVNLICE9CisJICAgICBvZmZzZXRvZihzdHJ1Y3QgdHJhcF9wZXJfY3B1LCBkZXZfbW9uZG9fcW1hc2spKSB8fAorCSAgICAoVFJBUF9QRVJfQ1BVX1JFU1VNX1FNQVNLICE9CisJICAgICBvZmZzZXRvZihzdHJ1Y3QgdHJhcF9wZXJfY3B1LCByZXN1bV9xbWFzaykpIHx8CisJICAgIChUUkFQX1BFUl9DUFVfTk9OUkVTVU1fUU1BU0sgIT0KKwkgICAgIG9mZnNldG9mKHN0cnVjdCB0cmFwX3Blcl9jcHUsIG5vbnJlc3VtX3FtYXNrKSkpCiAJCXRyYXBfcGVyX2NwdV9vZmZzZXRzX2FyZV9ib2xpeGVkX2RhdmUoKTsKIAogCWlmICgoVFNCX0NPTkZJR19UU0IgIT0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IGJjMThkNDguLjk1M2JlODEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFsaWduZWQuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxhc20vZnB1bWFjcm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAxM2ZhMmEyLi4zYWQxMGYzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDUgKzEsNiBAQAogLyogbGQgc2NyaXB0IHRvIG1ha2UgVWx0cmFMaW51eCBrZXJuZWwgKi8KIAorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KIAogT1VUUFVUX0ZPUk1BVCgiZWxmNjQtc3BhcmMiLCAiZWxmNjQtc3BhcmMiLCAiZWxmNjQtc3BhcmMiKQpAQCAtMTQsNyArMTUsNyBAQAogICAudGV4dCAweDAwMDAwMDAwMDA0MDQwMDAgOgogICB7CiAgICAgX3RleHQgPSAuOwotICAgICooLnRleHQpCisgICAgVEVYVF9URVhUCiAgICAgU0NIRURfVEVYVAogICAgIExPQ0tfVEVYVAogICAgIEtQUk9CRVNfVEVYVApAQCAtMjMsMTEgKzI0LDExIEBACiAgIF9ldGV4dCA9IC47CiAgIFBST1ZJREUgKGV0ZXh0ID0gLik7CiAKLSAgUk9EQVRBCisgIFJPX0RBVEEoUEFHRV9TSVpFKQogCiAgIC5kYXRhICAgIDoKICAgewotICAgICooLmRhdGEpCisgICAgREFUQV9EQVRBCiAgICAgQ09OU1RSVUNUT1JTCiAgIH0KICAgLmRhdGExICAgOiB7ICooLmRhdGExKSB9CkBAIC00NCw3ICs0NSw3IEBACiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CiAKLSAgLiA9IEFMSUdOKDgxOTIpOworICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2JlZ2luID0gLjsKICAgLmluaXQudGV4dCA6IHsgCiAJX3Npbml0dGV4dCA9IC47CkBAIC04MywxNyArODQsMTcgQEAKICAgX19zdW40dl8yaW5zbl9wYXRjaF9lbmQgPSAuOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0gIC4gPSBBTElHTig4MTkyKTsgCisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICBfX2luaXRyYW1mc19zdGFydCA9IC47CiAgIC5pbml0LnJhbWZzIDogeyAqKC5pbml0LnJhbWZzKSB9CiAgIF9faW5pdHJhbWZzX2VuZCA9IC47CiAjZW5kaWYKIAotICAuID0gQUxJR04oODE5Mik7CisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICBfX3Blcl9jcHVfc3RhcnQgPSAuOwogICAuZGF0YS5wZXJjcHUgIDogeyAqKC5kYXRhLnBlcmNwdSkgfQogICBfX3Blcl9jcHVfZW5kID0gLjsKLSAgLiA9IEFMSUdOKDgxOTIpOworICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2VuZCA9IC47CiAgIF9fYnNzX3N0YXJ0ID0gLjsKICAgLnNic3MgICAgICA6IHsgKiguc2JzcykgKiguc2NvbW1vbikgfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL2ZhdWx0LmMgYi9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYwppbmRleCA1NWFlODAyLi5iNTgyMDI0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYwpAQCAtMTUsMTEgKzE1LDExIEBACiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTI5LDQwICsyOSwyNiBAQAogI2luY2x1ZGUgPGFzbS9hc2kuaD4KICNpbmNsdWRlIDxhc20vbHN1Lmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogCiAjaWZkZWYgQ09ORklHX0tQUk9CRVMKLUFUT01JQ19OT1RJRklFUl9IRUFEKG5vdGlmeV9wYWdlX2ZhdWx0X2NoYWluKTsKLQotLyogSG9vayB0byByZWdpc3RlciBmb3IgcGFnZSBmYXVsdCBub3RpZmljYXRpb25zICovCi1pbnQgcmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQorc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3Rlcigmbm90aWZ5X3BhZ2VfZmF1bHRfY2hhaW4sIG5iKTsKLX0KKwlpbnQgcmV0ID0gMDsKIAotaW50IHVucmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQotewotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3Rlcigmbm90aWZ5X3BhZ2VfZmF1bHRfY2hhaW4sIG5iKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoZW51bSBkaWVfdmFsIHZhbCwgY29uc3QgY2hhciAqc3RyLAotCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyLCBpbnQgdHJhcCwgaW50IHNpZykKLXsKLQlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsKLQkJLnJlZ3MgPSByZWdzLAotCQkuc3RyID0gc3RyLAotCQkuZXJyID0gZXJyLAotCQkudHJhcG5yID0gdHJhcCwKLQkJLnNpZ25yID0gc2lnCi0JfTsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5vdGlmeV9wYWdlX2ZhdWx0X2NoYWluLCB2YWwsICZhcmdzKTsKKwkvKiBrcHJvYmVfcnVubmluZygpIG5lZWRzIHNtcF9wcm9jZXNzb3JfaWQoKSAqLworCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLCAwKSkKKwkJCXJldCA9IDE7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJfQorCXJldHVybiByZXQ7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoZW51bSBkaWVfdmFsIHZhbCwgY29uc3QgY2hhciAqc3RyLAotCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyLCBpbnQgdHJhcCwgaW50IHNpZykKK3N0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXJldHVybiBOT1RJRllfRE9ORTsKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgogCkBAIC0xMjEsOSArMTA3LDYgQEAKIAlwcmludGsoS0VSTl9BTEVSVCAidHNrLT57bW0sYWN0aXZlX21tfS0+cGdkID0gJTAxNmx4XG4iLAogCSAgICAgICAodHNrLT5tbSA/ICh1bnNpZ25lZCBsb25nKSB0c2stPm1tLT5wZ2QgOgogCQkgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIHRzay0+YWN0aXZlX21tLT5wZ2QpKTsKLQlpZiAobm90aWZ5X2RpZShESUVfR1BGLCAiZ2VuZXJhbCBwcm90ZWN0aW9uIGZhdWx0IiwgcmVncywKLQkJICAgICAgIDAsIDAsIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQotCQlyZXR1cm47CiAJZGllX2lmX2tlcm5lbCgiT29wcyIsIHJlZ3MpOwogfQogCkBAIC0zMDAsOCArMjgzLDcgQEAKIAogCWZhdWx0X2NvZGUgPSBnZXRfdGhyZWFkX2ZhdWx0X2NvZGUoKTsKIAotCWlmIChub3RpZnlfcGFnZV9mYXVsdChESUVfUEFHRV9GQVVMVCwgInBhZ2VfZmF1bHQiLCByZWdzLAotCQkgICAgICAgZmF1bHRfY29kZSwgMCwgU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCisJaWYgKG5vdGlmeV9wYWdlX2ZhdWx0KHJlZ3MpKQogCQlyZXR1cm47CiAKIAlzaV9jb2RlID0gU0VHVl9NQVBFUlI7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvc3BhcmM2NC9tbS9odWdldGxicGFnZS5jCmluZGV4IGUyMjRhOTQuLmVhYmE5YjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9tbS9odWdldGxicGFnZS5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jIGIvYXJjaC9zcGFyYzY0L21tL2luaXQuYwppbmRleCBkNzAwNGVhLi4zMDEwMjI3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAKICNpbmNsdWRlIDxhc20vaGVhZC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTQzLDggKzQ0LDggQEAKICNpbmNsdWRlIDxhc20vdHNiLmg+CiAjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgotCi1leHRlcm4gdm9pZCBkZXZpY2Vfc2Nhbih2b2lkKTsKKyNpbmNsdWRlIDxhc20vc3N0YXRlLmg+CisjaW5jbHVkZSA8YXNtL21kZXNjLmg+CiAKICNkZWZpbmUgTUFYX1BIWVNfQUREUkVTUwkoMVVMIDw8IDQyVUwpCiAjZGVmaW5lIEtQVEVfQklUTUFQX0NIVU5LX1NaCSgyNTZVTCAqIDEwMjRVTCAqIDEwMjRVTCkKQEAgLTYwLDggKzYxLDExIEBACiB1bnNpZ25lZCBsb25nIGtwdGVfbGluZWFyX2JpdG1hcFtLUFRFX0JJVE1BUF9CWVRFUyAvIHNpemVvZih1bnNpZ25lZCBsb25nKV07CiAKICNpZm5kZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotLyogQSBzcGVjaWFsIGtlcm5lbCBUU0IgZm9yIDRNQiBhbmQgMjU2TUIgbGluZWFyIG1hcHBpbmdzLiAgKi8KLXN0cnVjdCB0c2Igc3dhcHBlcl80bV90c2JbS0VSTkVMX1RTQjRNX05FTlRSSUVTXTsKKy8qIEEgc3BlY2lhbCBrZXJuZWwgVFNCIGZvciA0TUIgYW5kIDI1Nk1CIGxpbmVhciBtYXBwaW5ncy4KKyAqIFNwYWNlIGlzIGFsbG9jYXRlZCBmb3IgdGhpcyByaWdodCBhZnRlciB0aGUgdHJhcCB0YWJsZQorICogaW4gYXJjaC9zcGFyYzY0L2tlcm5lbC9oZWFkLlMKKyAqLworZXh0ZXJuIHN0cnVjdCB0c2Igc3dhcHBlcl80bV90c2JbS0VSTkVMX1RTQjRNX05FTlRSSUVTXTsKICNlbmRpZgogCiAjZGVmaW5lIE1BWF9CQU5LUwkzMgpAQCAtMTkwLDEyICsxOTQsOSBAQAogfQogCiAjZGVmaW5lIFBHX2RjYWNoZV9kaXJ0eQkJUEdfYXJjaF8xCi0jZGVmaW5lIFBHX2RjYWNoZV9jcHVfc2hpZnQJMjRVTAotI2RlZmluZSBQR19kY2FjaGVfY3B1X21hc2sJKDI1NlVMIC0gMVVMKQotCi0jaWYgTlJfQ1BVUyA+IDI1NgotI2Vycm9yIEQtY2FjaGUgZGlydHkgdHJhY2tpbmcgYW5kIHRocmVhZF9pbmZvLT5jcHUgbmVlZCBmaXhpbmcgZm9yID4gMjU2IGNwdXMKLSNlbmRpZgorI2RlZmluZSBQR19kY2FjaGVfY3B1X3NoaWZ0CTMyVUwKKyNkZWZpbmUgUEdfZGNhY2hlX2NwdV9tYXNrCVwKKwkoKDFVTDw8aWxvZzIocm91bmR1cF9wb3dfb2ZfdHdvKE5SX0NQVVMpKSktMVVMKQogCiAjZGVmaW5lIGRjYWNoZV9kaXJ0eV9jcHUocGFnZSkgXAogCSgoKHBhZ2UpLT5mbGFncyA+PiBQR19kY2FjaGVfY3B1X3NoaWZ0KSAmIFBHX2RjYWNoZV9jcHVfbWFzaykKQEAgLTU1NywyNiArNTU4LDExIEBACiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcHRlLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG1tdSkKIHsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGZ1bmMgYXNtKCIlbzUiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzAgYXNtKCIlbzAiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzEgYXNtKCIlbzEiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzIgYXNtKCIlbzIiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzMgYXNtKCIlbzMiKTsKKwl1bnNpZ25lZCBsb25nIHJldCA9IHN1bjR2X21tdV9tYXBfcGVybV9hZGRyKHZhZGRyLCAwLCBwdGUsIG1tdSk7CiAKLQlmdW5jID0gSFZfRkFTVF9NTVVfTUFQX1BFUk1fQUREUjsKLQlhcmcwID0gdmFkZHI7Ci0JYXJnMSA9IDA7Ci0JYXJnMiA9IHB0ZTsKLQlhcmczID0gbW11OwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJ0YQkweDgwIgotCQkJICAgICA6ICI9JnIiIChmdW5jKSwgIj0mciIgKGFyZzApLAotCQkJICAgICAgICI9JnIiIChhcmcxKSwgIj0mciIgKGFyZzIpLAotCQkJICAgICAgICI9JnIiIChhcmczKQotCQkJICAgICA6ICIwIiAoZnVuYyksICIxIiAoYXJnMCksICIyIiAoYXJnMSksCi0JCQkgICAgICAgIjMiIChhcmcyKSwgIjQiIChhcmczKSk7Ci0JaWYgKGFyZzAgIT0gMCkgeworCWlmIChyZXQgIT0gMCkgewogCQlwcm9tX3ByaW50ZigiaHlwZXJ2aXNvcl90bGJfbG9ja1slbHg6JWx4OiVseDolbHhdOiAiCi0JCQkgICAgImVycm9ycyB3aXRoICVseFxuIiwgdmFkZHIsIDAsIHB0ZSwgbW11LCBhcmcwKTsKKwkJCSAgICAiZXJyb3JzIHdpdGggJWx4XG4iLCB2YWRkciwgMCwgcHRlLCBtbXUsIHJldCk7CiAJCXByb21faGFsdCgpOwogCX0KIH0KQEAgLTEwMDgsNyArOTk0LDcgQEAKIAlpZiAoaW5pdHJkX3N0YXJ0KSB7CiAJCXNpemUgPSBpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0OwogCi0JCS8qIFJlc2VydCB0aGUgaW5pdHJkIGltYWdlIGFyZWEuICovCisJCS8qIFJlc2VydmUgdGhlIGluaXRyZCBpbWFnZSBhcmVhLiAqLwogI2lmZGVmIENPTkZJR19ERUJVR19CT09UTUVNCiAJCXByb21fcHJpbnRmKCJyZXNlcnZlX2Jvb3RtZW0oaW5pdHJkKTogYmFzZVslbGx4XSBzaXplWyVseF1cbiIsCiAJCQlpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwpAQCAtMTMxMywyMCArMTI5OSwxNiBAQAogCiB2b2lkIF9fY3B1aW5pdCBzdW40dl9rdHNiX3JlZ2lzdGVyKHZvaWQpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBmdW5jIGFzbSgiJW81Iik7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBhcmcwIGFzbSgiJW8wIik7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBhcmcxIGFzbSgiJW8xIik7Ci0JdW5zaWduZWQgbG9uZyBwYTsKKwl1bnNpZ25lZCBsb25nIHBhLCByZXQ7CiAKIAlwYSA9IGtlcm5fYmFzZSArICgodW5zaWduZWQgbG9uZykma3RzYl9kZXNjclswXSAtIEtFUk5CQVNFKTsKIAotCWZ1bmMgPSBIVl9GQVNUX01NVV9UU0JfQ1RYMDsKLQlhcmcwID0gTlVNX0tUU0JfREVTQ1I7Ci0JYXJnMSA9IHBhOwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJ0YQklNiIKLQkJCSAgICAgOiAiPSZyIiAoZnVuYyksICI9JnIiIChhcmcwKSwgIj0mciIgKGFyZzEpCi0JCQkgICAgIDogIjAiIChmdW5jKSwgIjEiIChhcmcwKSwgIjIiIChhcmcxKSwKLQkJCSAgICAgICAiaSIgKEhWX0ZBU1RfVFJBUCkpOworCXJldCA9IHN1bjR2X21tdV90c2JfY3R4MChOVU1fS1RTQl9ERVNDUiwgcGEpOworCWlmIChyZXQgIT0gMCkgeworCQlwcm9tX3ByaW50ZigiaHlwZXJ2aXNvcl9tbXVfdHNiX2N0eDBbJWx4XTogIgorCQkJICAgICJlcnJvcnMgd2l0aCAlbHhcbiIsIHBhLCByZXQpOworCQlwcm9tX2hhbHQoKTsKKwl9CiB9CiAKIC8qIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMgKi8KQEAgLTEzMzQsNiArMTMxNiw5IEBACiBleHRlcm4gdm9pZCBjaGVldGFoX2VjYWNoZV9mbHVzaF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgc3VuNHZfcGF0Y2hfdGxiX2hhbmRsZXJzKHZvaWQpOwogCitleHRlcm4gdm9pZCBjcHVfcHJvYmUodm9pZCk7CitleHRlcm4gdm9pZCBjZW50cmFsX3Byb2JlKHZvaWQpOworCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3ZhbGlkX3BmbjsKIHBnZF90IHN3YXBwZXJfcGdfZGlyWzIwNDhdOwogCkBAIC0xMzQ1LDkgKzEzMzAsMjQgQEAKIAl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHBhZ2VzX2F2YWlsLCBzaGlmdCwgcGh5c19iYXNlOwogCXVuc2lnbmVkIGxvbmcgcmVhbF9lbmQsIGk7CiAKKwkvKiBUaGVzZSBidWlsZCB0aW1lIGNoZWNrZXMgbWFrZSBzdXJlIHRoYXQgdGhlIGRjYWNoZV9kaXJ0eV9jcHUoKQorCSAqIHBhZ2UtPmZsYWdzIHVzYWdlIHdpbGwgd29yay4KKwkgKgorCSAqIFdoZW4gYSBwYWdlIGdldHMgbWFya2VkIGFzIGRjYWNoZS1kaXJ0eSwgd2Ugc3RvcmUgdGhlCisJICogY3B1IG51bWJlciBzdGFydGluZyBhdCBiaXQgMzIgaW4gdGhlIHBhZ2UtPmZsYWdzLiAgQWxzbywKKwkgKiBmdW5jdGlvbnMgbGlrZSBjbGVhcl9kY2FjaGVfZGlydHlfY3B1IHVzZSB0aGUgY3B1IG1hc2sKKwkgKiBpbiAxMy1iaXQgc2lnbmVkLWltbWVkaWF0ZSBpbnN0cnVjdGlvbiBmaWVsZHMuCisJICovCisJQlVJTERfQlVHX09OKEZMQUdTX1JFU0VSVkVEICE9IDMyKTsKKwlCVUlMRF9CVUdfT04oU0VDVElPTlNfV0lEVEggKyBOT0RFU19XSURUSCArIFpPTkVTX1dJRFRIICsKKwkJICAgICBpbG9nMihyb3VuZHVwX3Bvd19vZl90d28oTlJfQ1BVUykpID4gRkxBR1NfUkVTRVJWRUQpOworCUJVSUxEX0JVR19PTihOUl9DUFVTID4gNDA5Nik7CisKIAlrZXJuX2Jhc2UgPSAocHJvbV9ib290X21hcHBpbmdfcGh5c19sb3cgPj4gMjJVTCkgPDwgMjJVTDsKIAlrZXJuX3NpemUgPSAodW5zaWduZWQgbG9uZykmX2VuZCAtICh1bnNpZ25lZCBsb25nKUtFUk5CQVNFOwogCisJc3N0YXRlX2Jvb3RpbmcoKTsKKwogCS8qIEludmFsaWRhdGUgYm90aCBrZXJuZWwgVFNCcy4gICovCiAJbWVtc2V0KHN3YXBwZXJfdHNiLCAweDQwLCBzaXplb2Yoc3dhcHBlcl90c2IpKTsKICNpZm5kZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwpAQCAtMTQxNiw4ICsxNDE2LDEzIEBACiAKIAlrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KCk7CiAKKwlyZWFsX3NldHVwX3Blcl9jcHVfYXJlYXMoKTsKKwogCXByb21fYnVpbGRfZGV2aWNldHJlZSgpOwogCisJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpCisJCXN1bjR2X21kZXNjX2luaXQoKTsKKwogCXsKIAkJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU107CiAJCXVuc2lnbmVkIGxvbmcgemhvbGVzX3NpemVbTUFYX05SX1pPTkVTXTsKQEAgLTE0MzQsNyArMTQzOSwxMCBAQAogCQkJCSAgICB6aG9sZXNfc2l6ZSk7CiAJfQogCi0JZGV2aWNlX3NjYW4oKTsKKwlwcm9tX3ByaW50ZigiQm9vdGluZyBMaW51eC4uLlxuIik7CisKKwljZW50cmFsX3Byb2JlKCk7CisJY3B1X3Byb2JlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB0YWludF9yZWFsX3BhZ2VzKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvcHJvbS9taXNjLmMgYi9hcmNoL3NwYXJjNjQvcHJvbS9taXNjLmMKaW5kZXggMGI0MjEzNy4uZjNlMGMxNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L3Byb20vbWlzYy5jCisrKyBiL2FyY2gvc3BhcmM2NC9wcm9tL21pc2MuYwpAQCAtMTUsNiArMTUsMjUgQEAKICNpbmNsdWRlIDxhc20vb3BsaWIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKK2ludCBwcm9tX3NlcnZpY2VfZXhpc3RzKGNvbnN0IGNoYXIgKnNlcnZpY2VfbmFtZSkKK3sKKwlpbnQgZXJyID0gcDEyNzVfY21kKCJ0ZXN0IiwgUDEyNzVfQVJHKDAsIFAxMjc1X0FSR19JTl9TVFJJTkcpIHwKKwkJCSAgICBQMTI3NV9JTk9VVCgxLCAxKSwgc2VydmljZV9uYW1lKTsKKworCWlmIChlcnIpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCit2b2lkIHByb21fc3VuNHZfZ3Vlc3Rfc29mdF9zdGF0ZSh2b2lkKQoreworCWNvbnN0IGNoYXIgKnN2YyA9ICJTVU5XLHNvZnQtc3RhdGUtc3VwcG9ydGVkIjsKKworCWlmICghcHJvbV9zZXJ2aWNlX2V4aXN0cyhzdmMpKQorCQlyZXR1cm47CisJcDEyNzVfY21kKHN2YywgUDEyNzVfSU5PVVQoMCwgMCkpOworfQorCiAvKiBSZXNldCBhbmQgcmVib290IHRoZSBtYWNoaW5lIHdpdGggdGhlIGNvbW1hbmQgJ2Jjb21tYW5kJy4gKi8KIHZvaWQgcHJvbV9yZWJvb3QoY29uc3QgY2hhciAqYmNvbW1hbmQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9pcGMuYyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2lwYy5jCmluZGV4IDhjZWY1ZmQuLmE1MzFhMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2lwYy5jCisrKyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2lwYy5jCkBAIC02LDcgKzYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NobS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jCmluZGV4IDU0MmM4MDguLjNiNjdkZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL21pc2MuYworKysgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNjLmMKQEAgLTYsNyArNiw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4gCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc2lnbmFsLmMgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9zaWduYWwuYwppbmRleCA3ZmEyNjM0Li5kZTEwYzk3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9zaWduYWwuYworKysgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9zaWduYWwuYwpAQCAtNSw3ICs1LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja2V0LmMgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2NrZXQuYwppbmRleCBkM2E2NmVhLi5jYzY5ODQ3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2NrZXQuYworKysgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2NrZXQuYwpAQCAtOCw3ICs4LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja3N5cy5jIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja3N5cy5jCmluZGV4IGMyODY0NDQuLmU5NGY2ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL3NvY2tzeXMuYworKysgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2Nrc3lzLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZyBiL2FyY2gvdW0vS2NvbmZpZwppbmRleCAzNTRjYzZiLi5jNTA0MzEyIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcKKysrIGIvYXJjaC91bS9LY29uZmlnCkBAIC0yNzcsNyArMjc3LDggQEAKIAogY29uZmlnIEtFUk5FTF9TVEFDS19PUkRFUgogCWludCAiS2VybmVsIHN0YWNrIHNpemUgb3JkZXIiCi0JZGVmYXVsdCAyCisJZGVmYXVsdCAxIGlmIDY0QklUCisJZGVmYXVsdCAwIGlmICE2NEJJVAogCWhlbHAKIAlUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIFVNTCBrZXJuZWwgc3RhY2tzLiAgVGhleSB3aWxsCiAJYmUgMSA8PCBvcmRlciBwYWdlcy4gIFRoZSBkZWZhdWx0IGlzIE9LIHVubGVzcyB5b3UncmUgcnVubmluZyBWYWxncmluZApAQCAtMzIwLDIxICszMjEsNyBAQAogCiBzb3VyY2UgImxpYi9LY29uZmlnIgogCi1tZW51ICJTQ1NJIHN1cHBvcnQiCi1kZXBlbmRzIG9uIEJST0tFTgotCi1jb25maWcgU0NTSQotCXRyaXN0YXRlICJTQ1NJIHN1cHBvcnQiCi0KLSMgVGhpcyBnaXZlcyB1cyBmcmVlX2RtYSwgd2hpY2ggc2NzaS5jIHdhbnRzLgotY29uZmlnIEdFTkVSSUNfSVNBX0RNQQotCWJvb2wKLQlkZXBlbmRzIG9uIFNDU0kKLQlkZWZhdWx0IHkKLQotc291cmNlICJhcmNoL3VtL0tjb25maWcuc2NzaSIKLQotZW5kbWVudQorc291cmNlICJkcml2ZXJzL3Njc2kvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21kL0tjb25maWciCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZy5zY3NpIGIvYXJjaC91bS9LY29uZmlnLnNjc2kKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyOTFjOTQuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9LY29uZmlnLnNjc2kKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi1jb21tZW50ICJTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKSIKLQlkZXBlbmRzIG9uIFNDU0kKLQotY29uZmlnIEJMS19ERVZfU0QKLQl0cmlzdGF0ZSAiU0NTSSBkaXNrIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTQ1NJCi0KLWNvbmZpZyBTRF9FWFRSQV9ERVZTCi0JaW50ICJNYXhpbXVtIG51bWJlciBvZiBTQ1NJIGRpc2tzIHRoYXQgY2FuIGJlIGxvYWRlZCBhcyBtb2R1bGVzIgotCWRlcGVuZHMgb24gQkxLX0RFVl9TRAotCWRlZmF1bHQgIjQwIgotCi1jb25maWcgQ0hSX0RFVl9TVAotCXRyaXN0YXRlICJTQ1NJIHRhcGUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNDU0kKLQotY29uZmlnIEJMS19ERVZfU1IKLQl0cmlzdGF0ZSAiU0NTSSBDRC1ST00gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNDU0kKLQotY29uZmlnIEJMS19ERVZfU1JfVkVORE9SCi0JYm9vbCAiRW5hYmxlIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zIChmb3IgU0NTSSBDRFJPTSkiCi0JZGVwZW5kcyBvbiBCTEtfREVWX1NSCi0KLWNvbmZpZyBTUl9FWFRSQV9ERVZTCi0JaW50ICJNYXhpbXVtIG51bWJlciBvZiBDRFJPTSBkZXZpY2VzIHRoYXQgY2FuIGJlIGxvYWRlZCBhcyBtb2R1bGVzIgotCWRlcGVuZHMgb24gQkxLX0RFVl9TUgotCWRlZmF1bHQgIjIiCi0KLWNvbmZpZyBDSFJfREVWX1NHCi0JdHJpc3RhdGUgIlNDU0kgZ2VuZXJpYyBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0NTSQotCi1jb21tZW50ICJTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMiCi0JZGVwZW5kcyBvbiBTQ1NJCi0KLSNpZiBbICIkQ09ORklHX0VYUEVSSU1FTlRBTCIgPSAieSIgXTsgdGhlbgotY29uZmlnIFNDU0lfREVCVUdfUVVFVUVTCi0JYm9vbCAiRW5hYmxlIGV4dHJhIGNoZWNrcyBpbiBuZXcgcXVldWVpbmcgY29kZSIKLQlkZXBlbmRzIG9uIFNDU0kKLQotI2ZpCi1jb25maWcgU0NTSV9NVUxUSV9MVU4KLQlib29sICJQcm9iZSBhbGwgTFVOcyBvbiBlYWNoIFNDU0kgZGV2aWNlIgotCWRlcGVuZHMgb24gU0NTSQotCi1jb25maWcgU0NTSV9DT05TVEFOVFMKLQlib29sICJWZXJib3NlIFNDU0kgZXJyb3IgcmVwb3J0aW5nIChrZXJuZWwgc2l6ZSArPTEySykiCi0JZGVwZW5kcyBvbiBTQ1NJCi0KLWNvbmZpZyBTQ1NJX0xPR0dJTkcKLQlib29sICJTQ1NJIGxvZ2dpbmcgZmFjaWxpdHkiCi0JZGVwZW5kcyBvbiBTQ1NJCi0KLWNvbmZpZyBTQ1NJX0RFQlVHCi0JdHJpc3RhdGUgIlNDU0kgZGVidWdnaW5nIGhvc3Qgc2ltdWxhdG9yIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gU0NTSQotCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RlZmNvbmZpZyBiL2FyY2gvdW0vZGVmY29uZmlnCmluZGV4IGY5MzhmYTguLmE1NGQwZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZGVmY29uZmlnCisrKyBiL2FyY2gvdW0vZGVmY29uZmlnCkBAIC04Niw3ICs4Niw3IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiBDT05GSUdfTkVTVF9MRVZFTD0wCiAjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19LRVJORUxfU1RBQ0tfT1JERVI9MgorQ09ORklHX0tFUk5FTF9TVEFDS19PUkRFUj0wCiBDT05GSUdfVU1MX1JFQUxfVElNRV9DTE9DSz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKaW5kZXggYmFhYzRhZC4uNzI3NzNkZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKQEAgLTMxNiwxMiArMzE2LDE0IEBACiAJfQogCWlmICghaXNfbG9jYWxfZXRoZXJfYWRkcihhZGRyKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiV2FybmluZzogYXR0ZW1wdCB0byBhc3NpZ24gYSBnbG9iYWxseSB2YWxpZCBldGhlcm5ldCBhZGRyZXNzIHRvIGEgIgotCQkgICAgICAgImRldmljZVxuIik7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIllvdSBzaG91bGQgYmV0dGVyIGVuYWJsZSB0aGUgMm5kIHJpZ2h0bW9zdCBiaXQgIgotCQkgICAgICAiaW4gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIE1BQywgaS5lLiAiCi0JCSAgICAgICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJICAgICAgYWRkclswXSB8IDB4MDIsIGFkZHJbMV0sIGFkZHJbMl0sIGFkZHJbM10sIGFkZHJbNF0sIGFkZHJbNV0pOworCQkgICAgICAgIldhcm5pbmc6IGF0dGVtcHQgdG8gYXNzaWduIGEgZ2xvYmFsbHkgdmFsaWQgZXRoZXJuZXQgIgorCQkgICAgICAgImFkZHJlc3MgdG8gYSBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJZb3Ugc2hvdWxkIGJldHRlciBlbmFibGUgdGhlIDJuZCAiCisJCSAgICAgICAicmlnaHRtb3N0IGJpdCBpbiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgTUFDLFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImkuZS4gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCSAgICAgICBhZGRyWzBdIHwgMHgwMiwgYWRkclsxXSwgYWRkclsyXSwgYWRkclszXSwgYWRkcls0XSwKKwkJICAgICAgIGFkZHJbNV0pOworCQlnb3RvIHJhbmRvbTsKIAl9CiAJcmV0dXJuOwogCkBAIC00NzgsNiArNDgwLDcgQEAKIAkJKCp0cmFuc3BvcnQtPnVzZXItPnJlbW92ZSkoJmxwLT51c2VyKTsKIG91dF91bnJlZ2lzdGVyOgogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZkZXZpY2UtPnBkZXYpOworCXJldHVybjsgLyogcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIgZnJlZXMgZGV2IGFuZCBkZXZpY2UgKi8KIG91dF9mcmVlX25ldGRldjoKIAlmcmVlX25ldGRldihkZXYpOwogb3V0X2ZyZWVfZGV2aWNlOgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3BjYXBfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3BjYXBfa2Vybi5jCmluZGV4IDk0ODg0OTMuLmMzMjk5MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9wY2FwX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvcGNhcF9rZXJuLmMKQEAgLTI5LDIxICsyOSwyNSBAQAogCXBwcmktPnByb21pc2MgPSBpbml0LT5wcm9taXNjOwogCXBwcmktPm9wdGltaXplID0gaW5pdC0+b3B0aW1pemU7CiAJcHByaS0+ZmlsdGVyID0gaW5pdC0+ZmlsdGVyOworCisJcHJpbnRrKCJwY2FwIGJhY2tlbmQsIGhvc3QgaW50ZXJmYWNlICVzXG4iLCBwcHJpLT5ob3N0X2lmKTsKIH0KIAotc3RhdGljIGludCBwY2FwX3JlYWQoaW50IGZkLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgCitzdGF0aWMgaW50IHBjYXBfcmVhZChpbnQgZmQsIHN0cnVjdCBza19idWZmICoqc2tiLAogCQkgICAgICAgc3RydWN0IHVtbF9uZXRfcHJpdmF0ZSAqbHApCiB7CiAJKnNrYiA9IGV0aGVyX2FkanVzdF9za2IoKnNrYiwgRVRIX0hFQURFUl9PVEhFUik7Ci0JaWYoKnNrYiA9PSBOVUxMKSByZXR1cm4oLUVOT01FTSk7Ci0JcmV0dXJuKHBjYXBfdXNlcl9yZWFkKGZkLCBza2JfbWFjX2hlYWRlcigqc2tiKSwKKwlpZigqc2tiID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIHBjYXBfdXNlcl9yZWFkKGZkLCBza2JfbWFjX2hlYWRlcigqc2tiKSwKIAkJCSAgICAgICgqc2tiKS0+ZGV2LT5tdHUgKyBFVEhfSEVBREVSX09USEVSLAotCQkJICAgICAgKHN0cnVjdCBwY2FwX2RhdGEgKikgJmxwLT51c2VyKSk7CisJCQkgICAgICAoc3RydWN0IHBjYXBfZGF0YSAqKSAmbHAtPnVzZXIpOwogfQogCiBzdGF0aWMgaW50IHBjYXBfd3JpdGUoaW50IGZkLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgc3RydWN0IHVtbF9uZXRfcHJpdmF0ZSAqbHApCiB7Ci0JcmV0dXJuKC1FUEVSTSk7CisJcmV0dXJuIC1FUEVSTTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfa2Vybl9pbmZvIHBjYXBfa2Vybl9pbmZvID0gewpAQCAtNjUsMTIgKzY5LDEyIEBACiAJCSAgLm9wdGltaXplIAk9IDAsCiAJCSAgLmZpbHRlciAJPSBOVUxMIH0pOwogCi0JcmVtYWluID0gc3BsaXRfaWZfc3BlYyhzdHIsICZob3N0X2lmLCAmaW5pdC0+ZmlsdGVyLCAKLQkJCSAgICAgICAmb3B0aW9uc1swXSwgJm9wdGlvbnNbMV0sIE5VTEwpOworCXJlbWFpbiA9IHNwbGl0X2lmX3NwZWMoc3RyLCAmaG9zdF9pZiwgJmluaXQtPmZpbHRlciwKKwkJCSAgICAgICAmb3B0aW9uc1swXSwgJm9wdGlvbnNbMV0sIG1hY19vdXQsIE5VTEwpOwogCWlmKHJlbWFpbiAhPSBOVUxMKXsKIAkJcHJpbnRrKEtFUk5fRVJSICJwY2FwX3NldHVwIC0gRXh0cmEgZ2FyYmFnZSBvbiAiCiAJCSAgICAgICAic3BlY2lmaWNhdGlvbiA6ICclcydcbiIsIHJlbWFpbik7Ci0JCXJldHVybigwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYoaG9zdF9pZiAhPSBOVUxMKQpAQCAtODcsMTAgKzkxLDEzIEBACiAJCQlpbml0LT5vcHRpbWl6ZSA9IDE7CiAJCWVsc2UgaWYoIXN0cmNtcChvcHRpb25zW2ldLCAibm9vcHRpbWl6ZSIpKQogCQkJaW5pdC0+b3B0aW1pemUgPSAwOwotCQllbHNlIHByaW50aygicGNhcF9zZXR1cCA6IGJhZCBvcHRpb24gLSAnJXMnXG4iLCBvcHRpb25zW2ldKTsKKwkJZWxzZSB7CisJCQlwcmludGsoInBjYXBfc2V0dXAgOiBiYWQgb3B0aW9uIC0gJyVzJ1xuIiwgb3B0aW9uc1tpXSk7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAotCXJldHVybigxKTsKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCB0cmFuc3BvcnQgcGNhcF90cmFuc3BvcnQgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvcGNhcF91c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvcGNhcF91c2VyLmMKaW5kZXggZGMwYTkwMy4uNDgzYWExNSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3BjYXBfdXNlci5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9wY2FwX3VzZXIuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgInBjYXBfdXNlci5oIgogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJ1bV9tYWxsb2MuaCIKKyNpbmNsdWRlICJrZXJuX2NvbnN0YW50cy5oIgogCiAjZGVmaW5lIE1BWF9QQUNLRVQgKEVUSF9NQVhfUEFDS0VUICsgRVRIX0hFQURFUl9PVEhFUikKIApAQCAtMjYsOCArMjcsOCBAQAogCiAJcCA9IHBjYXBfb3Blbl9saXZlKHByaS0+aG9zdF9pZiwgTUFYX1BBQ0tFVCwgcHJpLT5wcm9taXNjLCAwLCBlcnJvcnMpOwogCWlmKHAgPT0gTlVMTCl7Ci0JCXByaW50aygicGNhcF91c2VyX2luaXQgOiBwY2FwX29wZW5fbGl2ZSBmYWlsZWQgLSAnJXMnXG4iLCAKLQkJICAgICAgIGVycm9ycyk7CisJCXByaW50ayhVTV9LRVJOX0VSUiAicGNhcF91c2VyX2luaXQgOiBwY2FwX29wZW5fbGl2ZSBmYWlsZWQgLSAiCisJCSAgICAgICAiJyVzJ1xuIiwgZXJyb3JzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00OCwxMyArNDksMTMgQEAKIAlpZihwcmktPmZpbHRlciAhPSBOVUxMKXsKIAkJZXJyID0gZGV2X25ldG1hc2socHJpLT5kZXYsICZuZXRtYXNrKTsKIAkJaWYoZXJyIDwgMCl7Ci0JCQlwcmludGsoInBjYXBfb3BlbiA6IGRldl9uZXRtYXNrIGZhaWxlZFxuIik7CisJCQlwcmludGsoVU1fS0VSTl9FUlIgInBjYXBfb3BlbiA6IGRldl9uZXRtYXNrIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCiAJCXByaS0+Y29tcGlsZWQgPSB1bV9rbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnBmX3Byb2dyYW0pKTsKIAkJaWYocHJpLT5jb21waWxlZCA9PSBOVUxMKXsKLQkJCXByaW50aygicGNhcF9vcGVuIDoga21hbGxvYyBmYWlsZWRcbiIpOworCQkJcHJpbnRrKFVNX0tFUk5fRVJSICJwY2FwX29wZW4gOiBrbWFsbG9jIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCkBAIC02MiwxNSArNjMsMTUgQEAKIAkJCQkgICAoc3RydWN0IGJwZl9wcm9ncmFtICopIHByaS0+Y29tcGlsZWQsIAogCQkJCSAgIHByaS0+ZmlsdGVyLCBwcmktPm9wdGltaXplLCBuZXRtYXNrKTsKIAkJaWYoZXJyIDwgMCl7Ci0JCQlwcmludGsoInBjYXBfb3BlbiA6IHBjYXBfY29tcGlsZSBmYWlsZWQgLSAnJXMnXG4iLCAKLQkJCSAgICAgICBwY2FwX2dldGVycihwcmktPnBjYXApKTsKKwkJCXByaW50ayhVTV9LRVJOX0VSUiAicGNhcF9vcGVuIDogcGNhcF9jb21waWxlIGZhaWxlZCAtICIKKwkJCSAgICAgICAiJyVzJ1xuIiwgcGNhcF9nZXRlcnIocHJpLT5wY2FwKSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCiAJCWVyciA9IHBjYXBfc2V0ZmlsdGVyKHByaS0+cGNhcCwgcHJpLT5jb21waWxlZCk7CiAJCWlmKGVyciA8IDApewotCQkJcHJpbnRrKCJwY2FwX29wZW4gOiBwY2FwX3NldGZpbHRlciBmYWlsZWQgLSAnJXMnXG4iLCAKLQkJCSAgICAgICBwY2FwX2dldGVycihwcmktPnBjYXApKTsKKwkJCXByaW50ayhVTV9LRVJOX0VSUiAicGNhcF9vcGVuIDogcGNhcF9zZXRmaWx0ZXIgIgorCQkJICAgICAgICJmYWlsZWQgLSAnJXMnXG4iLCBwY2FwX2dldGVycihwcmktPnBjYXApKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJfQpAQCAtODUsNyArODYsOCBAQAogCWlmKHByaS0+Y29tcGlsZWQgIT0gTlVMTCkKIAkJcGNhcF9mcmVlY29kZShwcmktPmNvbXBpbGVkKTsKIAotCXBjYXBfY2xvc2UocHJpLT5wY2FwKTsKKwlpZihwcmktPnBjYXAgIT0gTlVMTCkKKwkJcGNhcF9jbG9zZShwcmktPnBjYXApOwogfQogCiBzdHJ1Y3QgcGNhcF9oYW5kbGVyX2RhdGEgewpAQCAtMTE0LDcgKzExNiw4IEBACiAKIAluID0gcGNhcF9kaXNwYXRjaChwcmktPnBjYXAsIDEsIGhhbmRsZXIsICh1X2NoYXIgKikgJmhkYXRhKTsKIAlpZihuIDwgMCl7Ci0JCXByaW50aygicGNhcF9kaXNwYXRjaCBmYWlsZWQgLSAlc1xuIiwgcGNhcF9nZXRlcnIocHJpLT5wY2FwKSk7CisJCXByaW50ayhVTV9LRVJOX0VSUiAicGNhcF9kaXNwYXRjaCBmYWlsZWQgLSAlc1xuIiwKKwkJICAgICAgIHBjYXBfZ2V0ZXJyKHByaS0+cGNhcCkpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJZWxzZSBpZihuID09IDApIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2NvbW1vbi1vZmZzZXRzLmggYi9hcmNoL3VtL2luY2x1ZGUvY29tbW9uLW9mZnNldHMuaAppbmRleCA1NTkzYTgwLi41NDFmNGE4IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvY29tbW9uLW9mZnNldHMuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvY29tbW9uLW9mZnNldHMuaApAQCAtMjgsMyArMjgsNSBAQAogCiAvKiBGb3IgY3J5cHRvIGFzc2VtYmxlciBjb2RlLiAqLwogREVGSU5FKGNyeXB0b190Zm1fY3R4X29mZnNldCwgb2Zmc2V0b2Yoc3RydWN0IGNyeXB0b190Zm0sIF9fY3J0X2N0eCkpOworCitERUZJTkUoVU1fVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaCBiL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaAppbmRleCA1MGE0OTY5Li44ZDdmN2MxIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2tlcm5fdXRpbC5oCkBAIC0xMTcsNCArMTE3LDcgQEAKIAogZXh0ZXJuIHZvaWQgY29weV9zYyh1bmlvbiB1bWxfcHRfcmVncyAqcmVncywgdm9pZCAqZnJvbSk7CiAKK3Vuc2lnbmVkIGxvbmcgdG9faXJxX3N0YWNrKGludCBzaWcsIHVuc2lnbmVkIGxvbmcgKm1hc2tfb3V0KTsKK3Vuc2lnbmVkIGxvbmcgZnJvbV9pcnFfc3RhY2soaW50IG5lc3RlZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL29zLmggYi9hcmNoL3VtL2luY2x1ZGUvb3MuaAppbmRleCA2ODhkMTgxLi40ZDlmYjI2MyAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL29zLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL29zLmgKQEAgLTI3Miw3ICsyNzIsNiBAQAogCiAvKiB1dGlsLmMgKi8KIGV4dGVybiB2b2lkIHN0YWNrX3Byb3RlY3Rpb25zKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7Ci1leHRlcm4gdm9pZCB0YXNrX3Byb3RlY3Rpb25zKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiBleHRlcm4gaW50IHJhdyhpbnQgZmQpOwogZXh0ZXJuIHZvaWQgc2V0dXBfbWFjaGluZW5hbWUoY2hhciAqbWFjaGluZV9vdXQpOwogZXh0ZXJuIHZvaWQgc2V0dXBfaG9zdGluZm8oY2hhciAqYnVmLCBpbnQgbGVuKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9hcmNoc2V0am1wLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvYXJjaHNldGptcC5oCmluZGV4IDExYmFmYWIuLjBmMzEyMDggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9hcmNoc2V0am1wLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2FyY2hzZXRqbXAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2kzODYvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmgKKyAqIGFyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9hcmNoc2V0am1wLmgKICAqLwogCiAjaWZuZGVmIF9LTElCQ19BUkNIU0VUSk1QX0gKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2FyY2hzZXRqbXAuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2FyY2hzZXRqbXAuaAppbmRleCA5YTVlMWE2Li4yYWY4ZjEyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9hcmNoc2V0am1wLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvYXJjaHNldGptcC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCisgKiBhcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9hcmNoc2V0am1wLmgKICAqLwogCiAjaWZuZGVmIF9LTElCQ19BUkNIU0VUSk1QX0gKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2tlcm5lbC1vZmZzZXRzLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9rZXJuZWwtb2Zmc2V0cy5oCmluZGV4IGEzMDcyMzcuLmM5NzhiNTggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2tlcm5lbC1vZmZzZXRzLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQva2VybmVsLW9mZnNldHMuaApAQCAtMTcsNyArMTcsMTYgQEAKICNkZWZpbmUgT0ZGU0VUKHN5bSwgc3RyLCBtZW0pIFwKIAlERUZJTkUoc3ltLCBvZmZzZXRvZihzdHJ1Y3Qgc3RyLCBtZW0pKTsKIAorI2RlZmluZSBfX05PX1NUVUJTIDEKKyN1bmRlZiBfX1NZU0NBTEwKKyN1bmRlZiBfQVNNX1g4Nl82NF9VTklTVERfSF8KKyNkZWZpbmUgX19TWVNDQUxMKG5yLCBzeW0pIFtucl0gPSAxLAorc3RhdGljIGNoYXIgc3lzY2FsbHNbXSA9IHsKKyNpbmNsdWRlIDxhc20vYXJjaC91bmlzdGQuaD4KK307CisKIHZvaWQgZm9vKHZvaWQpCiB7CiAjaW5jbHVkZSA8Y29tbW9uLW9mZnNldHMuaD4KK0RFRklORShVTV9OUl9zeXNjYWxsX21heCwgc2l6ZW9mKHN5c2NhbGxzKSAtIDEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc3lzY2FsbHMuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3N5c2NhbGxzLmgKaW5kZXggNWU4NmFhMC4uY2Y3MjI1NiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc3lzY2FsbHMuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zeXNjYWxscy5oCkBAIC05LDYgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbXNnLmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CisjaW5jbHVkZSA8a2Vybl9jb25zdGFudHMuaD4KIAogdHlwZWRlZiBsb25nIHN5c2NhbGxfaGFuZGxlcl90KHZvaWQpOwogCkBAIC0yOSw2ICszMCw2IEBACiBleHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX21vZGlmeV9sZHQ7CiBleHRlcm4gc3lzY2FsbF9oYW5kbGVyX3Qgc3lzX2FyY2hfcHJjdGw7CiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMgKF9fTlJfc3lzY2FsbF9tYXggKyAxKQorI2RlZmluZSBOUl9zeXNjYWxscyAoVU1fTlJfc3lzY2FsbF9tYXggKyAxKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUyBiL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUwppbmRleCBlMzZmOTJiLi4yNDU0Nzc0IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMKKysrIGIvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TCkBAIC02Miw3ICs2Miw3IEBACiAgIH0gPTB4OTA5MDkwOTAKICAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KICAgLnRleHQgICAgICAgICAgIDogewotICAgICooLnRleHQpCisgICAgVEVYVF9URVhUCiAgICAgU0NIRURfVEVYVAogICAgIExPQ0tfVEVYVAogICAgICooLmZpeHVwKQpAQCAtOTcsNyArOTcsMTAgQEAKICAgLmRhdGEgICAgICAgICAgIDogewogICAgIC4gPSBBTElHTihLRVJORUxfU1RBQ0tfU0laRSk7CQkvKiBpbml0X3Rhc2sgKi8KICAgICAqKC5kYXRhLmluaXRfdGFzaykKLSAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgLiA9IEFMSUdOKEtFUk5FTF9TVEFDS19TSVpFKTsKKyAgICAqKC5kYXRhLmluaXRfaXJxc3RhY2spCisgICAgREFUQV9EQVRBCisgICAgKiguZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQogICAgIFNPUlQoQ09OU1RSVUNUT1JTKQogICB9CiAgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2luaXRfdGFzay5jIGIvYXJjaC91bS9rZXJuZWwvaW5pdF90YXNrLmMKaW5kZXggY2RhOTFhYS4uZDRmMWQxYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvaW5pdF90YXNrLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvaW5pdF90YXNrLmMKQEAgLTEsNSArMSw1IEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMCBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGludGVsLmxpbnV4fS5jb20pCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAgKi8KIApAQCAtMzMsMjggKzMzLDIwIEBACiAvKgogICogSW5pdGlhbCB0aHJlYWQgc3RydWN0dXJlLgogICoKLSAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBpcyAxNjM4NC1ieXRlIGFsaWduZWQgZHVlIHRvIHRoZQorICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIGFsaWduZWQgZHVlIHRvIHRoZQogICogd2F5IHByb2Nlc3Mgc3RhY2tzIGFyZSBoYW5kbGVkLiBUaGlzIGlzIGRvbmUgYnkgaGF2aW5nIGEgc3BlY2lhbAogICogImluaXRfdGFzayIgbGlua2VyIG1hcCBlbnRyeS4uCiAgKi8KIAotdW5pb24gdGhyZWFkX3VuaW9uIGluaXRfdGhyZWFkX3VuaW9uIAotX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLmluaXRfdGFzayIpKSkgPSAKLXsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07Cit1bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24KKwlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuaW5pdF90YXNrIikpKSA9CisJCXsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07CisKK3VuaW9uIHRocmVhZF91bmlvbiBjcHUwX2lycXN0YWNrCisJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLmluaXRfaXJxc3RhY2siKSkpID0KKwkJeyBJTklUX1RIUkVBRF9JTkZPKGluaXRfdGFzaykgfTsKIAogdm9pZCB1bnByb3RlY3Rfc3RhY2sodW5zaWduZWQgbG9uZyBzdGFjaykKIHsKLQlvc19wcm90ZWN0X21lbW9yeSgodm9pZCAqKSBzdGFjaywgKDEgPDwgQ09ORklHX0tFUk5FTF9TVEFDS19PUkRFUikgKiBQQUdFX1NJWkUsCi0JCSAgICAgICAxLCAxLCAwKTsKKwlvc19wcm90ZWN0X21lbW9yeSgodm9pZCAqKSBzdGFjaywgVEhSRUFEX1NJWkUsIDEsIDEsIDApOwogfQotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvaXJxLmMgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwppbmRleCA4ZjJlZDM2Li5kYmEwNGQ4IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIENvcHlyaWdodCAoQykgMjAwMCBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAgKiBEZXJpdmVkIChpLmUuIG1vc3RseSBjb3BpZWQpIGZyb20gYXJjaC9pMzg2L2tlcm5lbC9pcnEuYzoKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJzaWdpby5oIgogI2luY2x1ZGUgInVtX21hbGxvYy5oIgogI2luY2x1ZGUgIm1pc2NfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAiYXMtbGF5b3V0LmgiCiAKIC8qCiAgKiBHZW5lcmljLCBjb250cm9sbGVyLWluZGVwZW5kZW50IGZ1bmN0aW9uczoKQEAgLTUzLDcgKzU0LDcgQEAKIAlpZiAoaSA8IE5SX0lSUVMpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKIAkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwotCQlpZiAoIWFjdGlvbikgCisJCWlmICghYWN0aW9uKQogCQkJZ290byBza2lwOwogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsaSk7CiAjaWZuZGVmIENPTkZJR19TTVAKQEAgLTQ2OCwzICs0NjksMTEzIEBACiAgb3V0OgogCXJldHVybiBlcnI7CiB9CisKKy8qCisgKiBJUlEgc3RhY2sgZW50cnkgYW5kIGV4aXQ6CisgKgorICogVW5saWtlIGkzODYsIFVNTCBkb2Vzbid0IHJlY2VpdmUgSVJRcyBvbiB0aGUgbm9ybWFsIGtlcm5lbCBzdGFjaworICogYW5kIHN3aXRjaCBvdmVyIHRvIHRoZSBJUlEgc3RhY2sgYWZ0ZXIgc29tZSBwcmVwYXJhdGlvbi4gIFdlIHVzZQorICogc2lnYWx0c3RhY2sgdG8gcmVjZWl2ZSBzaWduYWxzIG9uIGEgc2VwYXJhdGUgc3RhY2sgZnJvbSB0aGUgc3RhcnQuCisgKiBUaGVzZSB0d28gZnVuY3Rpb25zIG1ha2Ugc3VyZSB0aGUgcmVzdCBvZiB0aGUga2VybmVsIHdvbid0IGJlIHRvbworICogdXBzZXQgYnkgYmVpbmcgb24gYSBkaWZmZXJlbnQgc3RhY2suICBUaGUgSVJRIHN0YWNrIGhhcyBhCisgKiB0aHJlYWRfaW5mbyBzdHJ1Y3R1cmUgYXQgdGhlIGJvdHRvbSBzbyB0aGF0IGN1cnJlbnQgZXQgYWwgY29udGludWUKKyAqIHRvIHdvcmsuCisgKgorICogdG9faXJxX3N0YWNrIGNvcGllcyB0aGUgY3VycmVudCB0YXNrJ3MgdGhyZWFkX2luZm8gdG8gdGhlIElSUSBzdGFjaworICogdGhyZWFkX2luZm8gYW5kIHNldHMgdGhlIHRhc2tzJ3Mgc3RhY2sgdG8gcG9pbnQgdG8gdGhlIElSUSBzdGFjay4KKyAqCisgKiBmcm9tX2lycV9zdGFjayBjb3BpZXMgdGhlIHRocmVhZF9pbmZvIHN0cnVjdCBiYWNrIChmbGFncyBtYXkgaGF2ZQorICogYmVlbiBtb2RpZmllZCkgYW5kIHJlc2V0cyB0aGUgdGFzaydzIHN0YWNrIHBvaW50ZXIuCisgKgorICogVHJpY2t5IGJpdHMgLQorICoKKyAqIFdoYXQgaGFwcGVucyB3aGVuIHR3byBzaWduYWxzIHJhY2UgZWFjaCBvdGhlcj8gIFVNTCBkb2Vzbid0IGJsb2NrCisgKiBzaWduYWxzIHdpdGggc2lncHJvY21hc2ssIFNBX0RFRkVSLCBvciBzYV9tYXNrLCBzbyBhIHNlY29uZCBzaWduYWwKKyAqIGNvdWxkIGFycml2ZSB3aGlsZSBhIHByZXZpb3VzIG9uZSBpcyBzdGlsbCBzZXR0aW5nIHVwIHRoZQorICogdGhyZWFkX2luZm8uCisgKgorICogVGhlcmUgYXJlIHRocmVlIGNhc2VzIC0KKyAqICAgICBUaGUgZmlyc3QgaW50ZXJydXB0IG9uIHRoZSBzdGFjayAtIHNldHMgdXAgdGhlIHRocmVhZF9pbmZvIGFuZAorICogaGFuZGxlcyB0aGUgaW50ZXJydXB0CisgKiAgICAgQSBuZXN0ZWQgaW50ZXJydXB0IGludGVycnVwdGluZyB0aGUgY29weWluZyBvZiB0aGUgdGhyZWFkX2luZm8gLQorICogY2FuJ3QgaGFuZGxlIHRoZSBpbnRlcnJ1cHQsIGFzIHRoZSBzdGFjayBpcyBpbiBhbiB1bmtub3duIHN0YXRlCisgKiAgICAgQSBuZXN0ZWQgaW50ZXJydXB0IG5vdCBpbnRlcnJ1cHRpbmcgdGhlIGNvcHlpbmcgb2YgdGhlCisgKiB0aHJlYWRfaW5mbyAtIGRvZXNuJ3QgZG8gYW55IHNldHVwLCBqdXN0IGhhbmRsZXMgdGhlIGludGVycnVwdAorICoKKyAqIFRoZSBmaXJzdCBqb2IgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIHdlIGludGVycnVwdGVkIHN0YWNrIHNldHVwLgorICogVGhpcyBpcyBkb25lIGJ5IHhjaGdpbmcgdGhlIHNpZ25hbCBtYXNrIHdpdGggdGhyZWFkX2luZm8tPnBlbmRpbmcuCisgKiBJZiB0aGUgdmFsdWUgdGhhdCBjb21lcyBiYWNrIGlzIHplcm8sIHRoZW4gdGhlcmUgaXMgbm8gc2V0dXAgaW4KKyAqIHByb2dyZXNzLCBhbmQgdGhlIGludGVycnVwdCBjYW4gYmUgaGFuZGxlZC4gIElmIHRoZSB2YWx1ZSBpcworICogbm9uLXplcm8sIHRoZW4gdGhlcmUgaXMgc3RhY2sgc2V0dXAgaW4gcHJvZ3Jlc3MuICBJbiBvcmRlciB0byBoYXZlCisgKiB0aGUgaW50ZXJydXB0IGhhbmRsZWQsIHdlIGxlYXZlIG91ciBzaWduYWwgaW4gdGhlIG1hc2ssIGFuZCBpdCB3aWxsCisgKiBiZSBoYW5kbGVkIGJ5IHRoZSB1cHBlciBoYW5kbGVyIGFmdGVyIGl0IGhhcyBzZXQgdXAgdGhlIHN0YWNrLgorICoKKyAqIE5leHQgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIHdlIGFyZSB0aGUgb3V0ZXIgaGFuZGxlciBvciBhIG5lc3RlZAorICogb25lLiAgQXMgcGFydCBvZiBzZXR0aW5nIHVwIHRoZSBzdGFjaywgdGhyZWFkX2luZm8tPnJlYWxfdGhyZWFkIGlzCisgKiBzZXQgdG8gbm9uLU5VTEwgKGFuZCBpcyByZXNldCB0byBOVUxMIG9uIGV4aXQpLiAgVGhpcyBpcyB0aGUKKyAqIG5lc3RpbmcgaW5kaWNhdG9yLiAgSWYgaXQgaXMgbm9uLU5VTEwsIHRoZW4gdGhlIHN0YWNrIGlzIGFscmVhZHkKKyAqIHNldCB1cCBhbmQgdGhlIGhhbmRsZXIgY2FuIHJ1bi4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZW5kaW5nX21hc2s7CisKK3Vuc2lnbmVkIGxvbmcgdG9faXJxX3N0YWNrKGludCBzaWcsIHVuc2lnbmVkIGxvbmcgKm1hc2tfb3V0KQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisJdW5zaWduZWQgbG9uZyBtYXNrLCBvbGQ7CisJaW50IG5lc3RlZDsKKworCW1hc2sgPSB4Y2hnKCZwZW5kaW5nX21hc2ssIDEgPDwgc2lnKTsKKwlpZihtYXNrICE9IDApeworCQkvKiBJZiBhbnkgaW50ZXJydXB0cyBjb21lIGluIGF0IHRoaXMgcG9pbnQsIHdlIHdhbnQgdG8KKwkJICogbWFrZSBzdXJlIHRoYXQgdGhlaXIgYml0cyBhcmVuJ3QgbG9zdCBieSBvdXIKKwkJICogcHV0dGluZyBvdXIgYml0IGluLiAgU28sIHRoaXMgbG9vcCBhY2N1bXVsYXRlcyBiaXRzCisJCSAqIHVudGlsIHhjaGcgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSB0aGF0IHdlIHB1dCBpbi4KKwkJICogV2hlbiB0aGF0IGhhcHBlbnMsIHRoZXJlIHdlcmUgbm8gbmV3IGludGVycnVwdHMsCisJCSAqIGFuZCBwZW5kaW5nX21hc2sgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggaW50ZXJydXB0CisJCSAqIHRoYXQgY2FtZSBpbi4KKwkJICovCisJCW9sZCA9IDEgPDwgc2lnOworCQlkbyB7CisJCQlvbGQgfD0gbWFzazsKKwkJCW1hc2sgPSB4Y2hnKCZwZW5kaW5nX21hc2ssIG9sZCk7CisJCX0gd2hpbGUobWFzayAhPSBvbGQpOworCQlyZXR1cm4gMTsKKwl9CisKKwl0aSA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwluZXN0ZWQgPSAodGktPnJlYWxfdGhyZWFkICE9IE5VTEwpOworCWlmKCFuZXN0ZWQpeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJCXN0cnVjdCB0aHJlYWRfaW5mbyAqdHRpOworCisJCXRhc2sgPSBjcHVfdGFza3NbdGktPmNwdV0udGFzazsKKwkJdHRpID0gdGFza190aHJlYWRfaW5mbyh0YXNrKTsKKwkJKnRpID0gKnR0aTsKKwkJdGktPnJlYWxfdGhyZWFkID0gdHRpOworCQl0YXNrLT5zdGFjayA9IHRpOworCX0KKworCW1hc2sgPSB4Y2hnKCZwZW5kaW5nX21hc2ssIDApOworCSptYXNrX291dCB8PSBtYXNrIHwgbmVzdGVkOworCXJldHVybiAwOworfQorCit1bnNpZ25lZCBsb25nIGZyb21faXJxX3N0YWNrKGludCBuZXN0ZWQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSwgKnRvOworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCXRpID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCisJcGVuZGluZ19tYXNrID0gMTsKKworCXRvID0gdGktPnJlYWxfdGhyZWFkOworCWN1cnJlbnQtPnN0YWNrID0gdG87CisJdGktPnJlYWxfdGhyZWFkID0gTlVMTDsKKwkqdG8gPSAqdGk7CisKKwltYXNrID0geGNoZygmcGVuZGluZ19tYXNrLCAwKTsKKwlyZXR1cm4gbWFzayAmIH4xOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3MuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvcHJvY2Vzcy5jCmluZGV4IGVmMzZmYWMuLjJhNjlhN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvcHJvY2Vzcy5jCkBAIC0xNjMsOCArMTYzLDEyIEBACiAKIGV4dGVybiBpbnQgdXNlcnNwYWNlX3BpZFtdOwogCitleHRlcm4gY2hhciBjcHUwX2lycXN0YWNrW107CisKIGludCBzdGFydF91bWxfc2thcyh2b2lkKQogeworCXN0YWNrX3Byb3RlY3Rpb25zKCh1bnNpZ25lZCBsb25nKSAmY3B1MF9pcnFzdGFjayk7CisJc2V0X3NpZ3N0YWNrKGNwdTBfaXJxc3RhY2ssIFRIUkVBRF9TSVpFKTsKIAlpZihwcm9jX21tKQogCQl1c2Vyc3BhY2VfcGlkWzBdID0gc3RhcnRfdXNlcnNwYWNlKDApOwogCkBAIC0xNzgsMjAgKzE4MiwyMyBAQAogCiBpbnQgZXh0ZXJuYWxfcGlkX3NrYXMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotI3dhcm5pbmcgTmVlZCB0byBsb29rIHVwIHVzZXJzcGFjZV9waWQgYnkgY3B1CisJLyogRklYTUU6IE5lZWQgdG8gbG9vayB1cCB1c2Vyc3BhY2VfcGlkIGJ5IGNwdSAqLwogCXJldHVybih1c2Vyc3BhY2VfcGlkWzBdKTsKIH0KIAogaW50IHRocmVhZF9waWRfc2thcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7Ci0jd2FybmluZyBOZWVkIHRvIGxvb2sgdXAgdXNlcnNwYWNlX3BpZCBieSBjcHUKKwkvKiBGSVhNRTogTmVlZCB0byBsb29rIHVwIHVzZXJzcGFjZV9waWQgYnkgY3B1ICovCiAJcmV0dXJuKHVzZXJzcGFjZV9waWRbMF0pOwogfQogCiB2b2lkIGtpbGxfb2ZmX3Byb2Nlc3Nlc19za2FzKHZvaWQpCiB7CiAJaWYocHJvY19tbSkKLSN3YXJuaW5nIG5lZWQgdG8gbG9vcCBvdmVyIHVzZXJzcGFjZV9waWRzIGluIGtpbGxfb2ZmX3Byb2Nlc3Nlc19za2FzCisJCS8qCisJCSAqIEZJWE1FOiBuZWVkIHRvIGxvb3Agb3ZlciB1c2Vyc3BhY2VfcGlkcyBpbgorCQkgKiBraWxsX29mZl9wcm9jZXNzZXNfc2thcworCQkgKi8KIAkJb3Nfa2lsbF9wdHJhY2VkX3Byb2Nlc3ModXNlcnNwYWNlX3BpZFswXSwgMSk7CiAJZWxzZSB7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RpbWUuYyBiL2FyY2gvdW0va2VybmVsL3RpbWUuYwppbmRleCBjZDczNDlkLi4yNTljNDlkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdGltZS5jCkBAIC0xNzcsNiArMTc3LDggQEAKIAogdm9pZCB0aW1lcl9oYW5kbGVyKGludCBzaWcsIHVuaW9uIHVtbF9wdF9yZWdzICpyZWdzKQogeworCWlmKGN1cnJlbnRfdGhyZWFkLT5jcHUgPT0gMCkKKwkJdGltZXJfaXJxKHJlZ3MpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJaXJxX2VudGVyKCk7CiAJdXBkYXRlX3Byb2Nlc3NfdGltZXMoQ0hPT1NFX01PREUoCkBAIC0xODQsNiArMTg2LDQgQEAKIAkJCSAgICAgKHJlZ3MpLT5za2FzLmlzX3VzZXIpKTsKIAlpcnFfZXhpdCgpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKLQlpZihjdXJyZW50X3RocmVhZC0+Y3B1ID09IDApCi0JCXRpbWVyX2lycShyZWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3R0L2V4ZWNfa2Vybi5jIGIvYXJjaC91bS9rZXJuZWwvdHQvZXhlY19rZXJuLmMKaW5kZXggOThlMjE3NC4uNDAxMjZjYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdHQvZXhlY19rZXJuLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdHQvZXhlY19rZXJuLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAllbmFibGVfdGltZXIoKTsKIAlmcmVlX3BhZ2Uoc3RhY2spOwogCXByb3RlY3RfbWVtb3J5KHVtbF9yZXNlcnZlZCwgaGlnaF9waHlzbWVtIC0gdW1sX3Jlc2VydmVkLCAxLCAxLCAwLCAxKTsKLQl0YXNrX3Byb3RlY3Rpb25zKCh1bnNpZ25lZCBsb25nKSBjdXJyZW50X3RocmVhZCk7CisJc3RhY2tfcHJvdGVjdGlvbnMoKHVuc2lnbmVkIGxvbmcpIGN1cnJlbnRfdGhyZWFkKTsKIAlmb3JjZV9mbHVzaF9hbGwoKTsKIAl1bmJsb2NrX3NpZ25hbHMoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3R0L3Byb2Nlc3Nfa2Vybi5jIGIvYXJjaC91bS9rZXJuZWwvdHQvcHJvY2Vzc19rZXJuLmMKaW5kZXggYzYzMTMwMy4uNzQzNDdhZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdHQvcHJvY2Vzc19rZXJuLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdHQvcHJvY2Vzc19rZXJuLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCWlmKGN1cnJlbnQtPm1tICE9IGN1cnJlbnQtPnBhcmVudC0+bW0pCiAJCXByb3RlY3RfbWVtb3J5KHVtbF9yZXNlcnZlZCwgaGlnaF9waHlzbWVtIC0gdW1sX3Jlc2VydmVkLCAxLCAKIAkJCSAgICAgICAxLCAwLCAxKTsKLQl0YXNrX3Byb3RlY3Rpb25zKCh1bnNpZ25lZCBsb25nKSBjdXJyZW50X3RocmVhZCk7CisJc3RhY2tfcHJvdGVjdGlvbnMoKHVuc2lnbmVkIGxvbmcpIGN1cnJlbnRfdGhyZWFkKTsKIAogCWZyZWVfcGFnZShjdXJyZW50LT50aHJlYWQudGVtcF9zdGFjayk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3VtX2FyY2guYyBiL2FyY2gvdW0va2VybmVsL3VtX2FyY2guYwppbmRleCAxY2Y5NTRhLi5lY2M0NThmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC91bV9hcmNoLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdW1fYXJjaC5jCkBAIC00NTksNyArNDU5LDcgQEAKIAogCXVtbF9wb3N0c2V0dXAoKTsKIAotCXRhc2tfcHJvdGVjdGlvbnMoKHVuc2lnbmVkIGxvbmcpICZpbml0X3RocmVhZF9pbmZvKTsKKwlzdGFja19wcm90ZWN0aW9ucygodW5zaWduZWQgbG9uZykgJmluaXRfdGhyZWFkX2luZm8pOwogCW9zX2ZsdXNoX3N0ZG91dCgpOwogCiAJcmV0dXJuIENIT09TRV9NT0RFKHN0YXJ0X3VtbF90dCgpLCBzdGFydF91bWxfc2thcygpKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUyBiL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUwppbmRleCBmNjMwMTI3Li4zMDdiOTM3IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMKKysrIGIvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TCkBAIC0zNyw3ICszNyw3IEBACiAKICAgLnRleHQgICAgICA6CiAgIHsKLSAgICAqKC50ZXh0KQorICAgIFRFWFRfVEVYVAogICAgIFNDSEVEX1RFWFQKICAgICBMT0NLX1RFWFQKICAgICAqKC5maXh1cCkKQEAgLTU5LDcgKzU5LDkgQEAKICAgewogICAgIC4gPSBBTElHTihLRVJORUxfU1RBQ0tfU0laRSk7CQkvKiBpbml0X3Rhc2sgKi8KICAgICAqKC5kYXRhLmluaXRfdGFzaykKLSAgICAqKC5kYXRhKQorICAgIC4gPSBBTElHTihLRVJORUxfU1RBQ0tfU0laRSk7CisgICAgKiguZGF0YS5pbml0X2lycXN0YWNrKQorICAgIERBVEFfREFUQQogICAgICooLmdudS5saW5rb25jZS5kKikKICAgICBDT05TVFJVQ1RPUlMKICAgfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3Byb2Nlc3MuYwppbmRleCA5MmE3YjU5Li4yZDlkMmNhIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3Byb2Nlc3MuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3Byb2Nlc3MuYwpAQCAtMjM5LDYgKzIzOSw3IEBACiAJcmV0dXJuIG9rOwogfQogCisjaWZkZWYgVU1MX0NPTkZJR19NT0RFX1RUCiB2b2lkIGluaXRfbmV3X3RocmVhZF9zdGFjayh2b2lkICpzaWdfc3RhY2ssIHZvaWQgKCp1c3IxX2hhbmRsZXIpKGludCkpCiB7CiAJaW50IGZsYWdzID0gMCwgcGFnZXM7CkBAIC0yNjAsNiArMjYxLDcgQEAKIAkJCSAgICAgICJlcnJubyA9ICVkXG4iLCBlcnJubyk7CiAJfQogfQorI2VuZGlmCiAKIHZvaWQgaW5pdF9uZXdfdGhyZWFkX3NpZ25hbHModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc2lnbmFsLmMgYi9hcmNoL3VtL29zLUxpbnV4L3NpZ25hbC5jCmluZGV4IDQ4ZDQ5MzQuLjE4ZTVjOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zaWduYWwuYwpAQCAtNjEsMTUgKzYxLDE5IEBACiAKIHN0YXRpYyB2b2lkIHJlYWxfYWxhcm1faGFuZGxlcihpbnQgc2lnLCBzdHJ1Y3Qgc2lnY29udGV4dCAqc2MpCiB7CisJdW5pb24gdW1sX3B0X3JlZ3MgcmVnczsKKwogCWlmKHNpZyA9PSBTSUdBTFJNKQogCQlzd2l0Y2hfdGltZXJzKDApOwogCi0JQ0hPT1NFX01PREVfUFJPQyhzaWdfaGFuZGxlcl9jb21tb25fdHQsIHNpZ19oYW5kbGVyX2NvbW1vbl9za2FzLAotCQkJIHNpZywgc2MpOworCWlmKHNjICE9IE5VTEwpCisJCWNvcHlfc2MoJnJlZ3MsIHNjKTsKKwlyZWdzLnNrYXMuaXNfdXNlciA9IDA7CisJdW5ibG9ja19zaWduYWxzKCk7CisJdGltZXJfaGFuZGxlcihzaWcsICZyZWdzKTsKIAogCWlmKHNpZyA9PSBTSUdBTFJNKQogCQlzd2l0Y2hfdGltZXJzKDEpOwotCiB9CiAKIHZvaWQgYWxhcm1faGFuZGxlcihpbnQgc2lnLCBzdHJ1Y3Qgc2lnY29udGV4dCAqc2MpCkBAIC0xMTMsNiArMTE3LDQ2IEBACiAKIHZvaWQgKCpoYW5kbGVyc1tfTlNJR10pKGludCBzaWcsIHN0cnVjdCBzaWdjb250ZXh0ICpzYyk7CiAKK3ZvaWQgaGFuZGxlX3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3Qgc2lnY29udGV4dCAqc2MpCit7CisJdW5zaWduZWQgbG9uZyBwZW5kaW5nID0gMDsKKworCWRvIHsKKwkJaW50IG5lc3RlZCwgYmFpbDsKKworCQkvKgorCQkgKiBwZW5kaW5nIGNvbWVzIGJhY2sgd2l0aCBvbmUgYml0IHNldCBmb3IgZWFjaAorCQkgKiBpbnRlcnJ1cHQgdGhhdCBhcnJpdmVkIHdoaWxlIHNldHRpbmcgdXAgdGhlIHN0YWNrLAorCQkgKiBwbHVzIGEgYml0IGZvciB0aGlzIGludGVycnVwdCwgcGx1cyB0aGUgemVybyBiaXQgaXMKKwkJICogc2V0IGlmIHRoaXMgaXMgYSBuZXN0ZWQgaW50ZXJydXB0LgorCQkgKiBJZiBiYWlsIGlzIHRydWUsIHRoZW4gd2UgaW50ZXJydXB0ZWQgYW5vdGhlcgorCQkgKiBoYW5kbGVyIHNldHRpbmcgdXAgdGhlIHN0YWNrLiAgSW4gdGhpcyBjYXNlLCB3ZQorCQkgKiBoYXZlIHRvIHJldHVybiwgYW5kIHRoZSB1cHBlciBoYW5kbGVyIHdpbGwgZGVhbAorCQkgKiB3aXRoIHRoaXMgaW50ZXJydXB0LgorCQkgKi8KKwkJYmFpbCA9IHRvX2lycV9zdGFjayhzaWcsICZwZW5kaW5nKTsKKwkJaWYoYmFpbCkKKwkJCXJldHVybjsKKworCQluZXN0ZWQgPSBwZW5kaW5nICYgMTsKKwkJcGVuZGluZyAmPSB+MTsKKworCQl3aGlsZSgoc2lnID0gZmZzKHBlbmRpbmcpKSAhPSAwKXsKKwkJCXNpZy0tOworCQkJcGVuZGluZyAmPSB+KDEgPDwgc2lnKTsKKwkJCSgqaGFuZGxlcnNbc2lnXSkoc2lnLCBzYyk7CisJCX0KKworCQkvKiBBZ2FpbiwgcGVuZGluZyBjb21lcyBiYWNrIHdpdGggYSBtYXNrIG9mIHNpZ25hbHMKKwkJICogdGhhdCBhcnJpdmVkIHdoaWxlIHRlYXJpbmcgZG93biB0aGUgc3RhY2suICBJZiB0aGlzCisJCSAqIGlzIG5vbi16ZXJvLCB3ZSBqdXN0IGdvIGJhY2ssIHNldCB1cCB0aGUgc3RhY2sKKwkJICogYWdhaW4sIGFuZCBoYW5kbGUgdGhlIG5ldyBpbnRlcnJ1cHRzLgorCQkgKi8KKwkJaWYoIW5lc3RlZCkKKwkJCXBlbmRpbmcgPSBmcm9tX2lycV9zdGFjayhuZXN0ZWQpOworCX0gd2hpbGUocGVuZGluZyk7Cit9CisKIGV4dGVybiB2b2lkIGhhcmRfaGFuZGxlcihpbnQgc2lnKTsKIAogdm9pZCBzZXRfaGFuZGxlcihpbnQgc2lnLCB2b2lkICgqaGFuZGxlcikoaW50KSwgaW50IGZsYWdzLCAuLi4pCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3NrYXMvbWVtLmMgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvbWVtLmMKaW5kZXggOGU0OTBmZi4uNWM4OTQ2MyAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9za2FzL21lbS5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc2thcy9tZW0uYwpAQCAtNjgsNyArNjgsNyBAQAogCWludCBlcnIsIHBpZCA9IG1tX2lkcC0+dS5waWQ7CiAKIAlpZihwcm9jX21tKQotI3dhcm5pbmcgTmVlZCB0byBsb29rIHVwIHVzZXJzcGFjZV9waWQgYnkgY3B1CisJCS8qIEZJWE1FOiBOZWVkIHRvIGxvb2sgdXAgdXNlcnNwYWNlX3BpZCBieSBjcHUgKi8KIAkJcGlkID0gdXNlcnNwYWNlX3BpZFswXTsKIAogCW11bHRpX2NvdW50Kys7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYwppbmRleCA1YzA4OGE1Li5mOWQyZjg1IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMKQEAgLTI4OCw3ICsyODgsOCBAQAogdm9pZCB1c2Vyc3BhY2UodW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGVyciwgc3RhdHVzLCBvcCwgcGlkID0gdXNlcnNwYWNlX3BpZFswXTsKLQlpbnQgbG9jYWxfdXNpbmdfc3lzZW11OyAvKlRvIHByZXZlbnQgcmFjZXMgaWYgdXNpbmdfc3lzZW11IGNoYW5nZXMgdW5kZXIgdXMuKi8KKwkvKiBUbyBwcmV2ZW50IHJhY2VzIGlmIHVzaW5nX3N5c2VtdSBjaGFuZ2VzIHVuZGVyIHVzLiovCisJaW50IGxvY2FsX3VzaW5nX3N5c2VtdTsKIAogCXdoaWxlKDEpewogCQlyZXN0b3JlX3JlZ2lzdGVycyhwaWQsIHJlZ3MpOwpAQCAtMjk2LDcgKzI5Nyw4IEBACiAJCS8qIE5vdyB3ZSBzZXQgbG9jYWxfdXNpbmdfc3lzZW11IHRvIGJlIHVzZWQgZm9yIG9uZSBsb29wICovCiAJCWxvY2FsX3VzaW5nX3N5c2VtdSA9IGdldF91c2luZ19zeXNlbXUoKTsKIAotCQlvcCA9IFNFTEVDVF9QVFJBQ0VfT1BFUkFUSU9OKGxvY2FsX3VzaW5nX3N5c2VtdSwgc2luZ2xlc3RlcHBpbmcoTlVMTCkpOworCQlvcCA9IFNFTEVDVF9QVFJBQ0VfT1BFUkFUSU9OKGxvY2FsX3VzaW5nX3N5c2VtdSwKKwkJCQkJICAgICBzaW5nbGVzdGVwcGluZyhOVUxMKSk7CiAKIAkJZXJyID0gcHRyYWNlKG9wLCBwaWQsIDAsIDApOwogCQlpZihlcnIpCkBAIC00OTAsOCArNDkyLDggQEAKIHZvaWQgbmV3X3RocmVhZCh2b2lkICpzdGFjaywgam1wX2J1ZiAqYnVmLCB2b2lkICgqaGFuZGxlcikodm9pZCkpCiB7CiAJKCpidWYpWzBdLkpCX0lQID0gKHVuc2lnbmVkIGxvbmcpIGhhbmRsZXI7Ci0JKCpidWYpWzBdLkpCX1NQID0gKHVuc2lnbmVkIGxvbmcpIHN0YWNrICsKLQkJKFBBR0VfU0laRSA8PCBVTUxfQ09ORklHX0tFUk5FTF9TVEFDS19PUkRFUikgLSBzaXplb2Yodm9pZCAqKTsKKwkoKmJ1ZilbMF0uSkJfU1AgPSAodW5zaWduZWQgbG9uZykgc3RhY2sgKyBVTV9USFJFQURfU0laRSAtCisJCXNpemVvZih2b2lkICopOwogfQogCiAjZGVmaW5lIElOSVRfSk1QX05FV19USFJFQUQgMApAQCAtNTMzLDggKzUzNSw3IEBACiAJY2FzZSBJTklUX0pNUF9ORVdfVEhSRUFEOgogCQkoKnN3aXRjaF9idWYpWzBdLkpCX0lQID0gKHVuc2lnbmVkIGxvbmcpIG5ld190aHJlYWRfaGFuZGxlcjsKIAkJKCpzd2l0Y2hfYnVmKVswXS5KQl9TUCA9ICh1bnNpZ25lZCBsb25nKSBzdGFjayArCi0JCQkoUEFHRV9TSVpFIDw8IFVNTF9DT05GSUdfS0VSTkVMX1NUQUNLX09SREVSKSAtCi0JCQlzaXplb2Yodm9pZCAqKTsKKwkJCVVNX1RIUkVBRF9TSVpFIC0gc2l6ZW9mKHZvaWQgKik7CiAJCWJyZWFrOwogCWNhc2UgSU5JVF9KTVBfQ0FMTEJBQ0s6CiAJCSgqY2JfcHJvYykoY2JfYXJnKTsKQEAgLTU4Niw3ICs1ODcsNyBAQAogewogCWludCBlcnI7CiAKLSN3YXJuaW5nIG5lZWQgY3B1IHBpZCBpbiBzd2l0Y2hfbW1fc2thcworCS8qIEZJWE1FOiBuZWVkIGNwdSBwaWQgaW4gc3dpdGNoX21tX3NrYXMgKi8KIAlpZihwcm9jX21tKXsKIAkJZXJyID0gcHRyYWNlKFBUUkFDRV9TV0lUQ0hfTU0sIHVzZXJzcGFjZV9waWRbMF0sIDAsCiAJCQkgICAgIG1tX2lkcC0+dS5tbV9mZCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMgYi9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMKaW5kZXggNzk0NzFmOC4uM2ZjMTNmYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zdGFydF91cC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3RhcnRfdXAuYwpAQCAtMTQ0LDkgKzE0NCw3IEBACiAJCWludCBleGl0X3dpdGggPSBXRVhJVFNUQVRVUyhzdGF0dXMpOwogCQlpZiAoZXhpdF93aXRoID09IDIpCiAJCQlub25fZmF0YWwoImNoZWNrX3B0cmFjZSA6IGNoaWxkIGV4aXRlZCB3aXRoIHN0YXR1cyAyLiAiCi0JCQkJICAiU2VyaW91cyB0cm91YmxlIGhhcHBlbmluZyEgVHJ5IHVwZGF0aW5nICIKLQkJCQkgICJ5b3VyIGhvc3Qgc2thcyBwYXRjaCFcbkRpc2FibGluZyBTWVNFTVUgIgotCQkJCSAgInN1cHBvcnQuIik7CisJCQkJICAiXG5EaXNhYmxpbmcgU1lTRU1VIHN1cHBvcnQuXG4iKTsKIAkJbm9uX2ZhdGFsKCJjaGVja19wdHJhY2UgOiBjaGlsZCBleGl0ZWQgd2l0aCBleGl0Y29kZSAlZCwgd2hpbGUgIgogCQkJICAiZXhwZWN0aW5nICVkOyBzdGF0dXMgMHgleFxuIiwgZXhpdF93aXRoLAogCQkJICBleGl0Y29kZSwgc3RhdHVzKTsKQEAgLTIwOSw2ICsyMDcsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3N5c2VtdSh2b2lkKQogewogCXZvaWQgKnN0YWNrOworCXVuc2lnbmVkIGxvbmcgcmVnc1tNQVhfUkVHX05SXTsKIAlpbnQgcGlkLCBuLCBzdGF0dXMsIGNvdW50PTA7CiAKIAlub25fZmF0YWwoIkNoZWNraW5nIHN5c2NhbGwgZW11bGF0aW9uIHBhdGNoIGZvciBwdHJhY2UuLi4iKTsKQEAgLTIyNSwxMSArMjI0LDIwIEBACiAJCWZhdGFsKCJjaGVja19zeXNlbXUgOiBleHBlY3RlZCBTSUdUUkFQLCBnb3Qgc3RhdHVzID0gJWQiLAogCQkgICAgICBzdGF0dXMpOwogCi0JbiA9IHB0cmFjZShQVFJBQ0VfUE9LRVVTUiwgcGlkLCBQVF9TWVNDQUxMX1JFVF9PRkZTRVQsCi0JCSAgIG9zX2dldHBpZCgpKTsKLQlpZihuIDwgMCkKLQkJZmF0YWxfcGVycm9yKCJjaGVja19zeXNlbXUgOiBmYWlsZWQgdG8gbW9kaWZ5IHN5c3RlbSBjYWxsICIKLQkJCSAgICAgInJldHVybiIpOworCWlmKHB0cmFjZShQVFJBQ0VfR0VUUkVHUywgcGlkLCAwLCByZWdzKSA8IDApCisJCWZhdGFsX3BlcnJvcigiY2hlY2tfc3lzZW11IDogUFRSQUNFX0dFVFJFR1MgZmFpbGVkIik7CisJaWYoUFRfU1lTQ0FMTF9OUihyZWdzKSAhPSBfX05SX2dldHBpZCl7CisJCW5vbl9mYXRhbCgiY2hlY2tfc3lzZW11IGdvdCBzeXN0ZW0gY2FsbCBudW1iZXIgJWQsICIKKwkJCSAgImV4cGVjdGVkICVkLi4uIiwgUFRfU1lTQ0FMTF9OUihyZWdzKSwgX19OUl9nZXRwaWQpOworCQlnb3RvIGZhaWw7CisJfQorCisJbiA9IHB0cmFjZShQVFJBQ0VfUE9LRVVTUiwgcGlkLCBQVF9TWVNDQUxMX1JFVF9PRkZTRVQsIG9zX2dldHBpZCgpKTsKKwlpZihuIDwgMCl7CisJCW5vbl9mYXRhbCgiY2hlY2tfc3lzZW11IDogZmFpbGVkIHRvIG1vZGlmeSBzeXN0ZW0gY2FsbCAiCisJCQkgICJyZXR1cm4iKTsKKwkJZ290byBmYWlsOworCX0KIAogCWlmIChzdG9wX3B0cmFjZWRfY2hpbGQocGlkLCBzdGFjaywgMCwgMCkgPCAwKQogCQlnb3RvIGZhaWxfc3RvcHBlZDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvc2lnbmFsLmMgYi9hcmNoL3VtL29zLUxpbnV4L3N5cy1pMzg2L3NpZ25hbC5jCmluZGV4IDBkM2VhZTUuLmYzMTE2MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc3lzLWkzODYvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zeXMtaTM4Ni9zaWduYWwuYwpAQCAtMSwxNSArMSwxMyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBKZWZmIERpa2UgKGpkaWtlQGFkZHRvaXQuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2IEplZmYgRGlrZSAoamRpa2VAe2FkZHRvaXQsbGludXguaW50ZWx9LmNvbSkKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKICAqLwogCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAKLWV4dGVybiB2b2lkICgqaGFuZGxlcnNbXSkoaW50IHNpZywgc3RydWN0IHNpZ2NvbnRleHQgKnNjKTsKK2V4dGVybiB2b2lkIGhhbmRsZV9zaWduYWwoaW50IHNpZywgc3RydWN0IHNpZ2NvbnRleHQgKnNjKTsKIAogdm9pZCBoYXJkX2hhbmRsZXIoaW50IHNpZykKIHsKLQlzdHJ1Y3Qgc2lnY29udGV4dCAqc2MgPSAoc3RydWN0IHNpZ2NvbnRleHQgKikgKCZzaWcgKyAxKTsKLQotCSgqaGFuZGxlcnNbc2lnXSkoc2lnLCBzYyk7CisJaGFuZGxlX3NpZ25hbChzaWcsIChzdHJ1Y3Qgc2lnY29udGV4dCAqKSAoJnNpZyArIDEpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc3lzLXg4Nl82NC9zaWduYWwuYyBiL2FyY2gvdW0vb3MtTGludXgvc3lzLXg4Nl82NC9zaWduYWwuYwppbmRleCAzZjM2OWU1Li44MmEzODg4IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3N5cy14ODZfNjQvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9zeXMteDg2XzY0L3NpZ25hbC5jCkBAIC0xLDE2ICsxLDE2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEplZmYgRGlrZSAoamRpa2VAYWRkdG9pdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogICovCiAKICNpbmNsdWRlIDxzaWduYWwuaD4KIAotZXh0ZXJuIHZvaWQgKCpoYW5kbGVyc1tdKShpbnQgc2lnLCBzdHJ1Y3Qgc2lnY29udGV4dCAqc2MpOworZXh0ZXJuIHZvaWQgaGFuZGxlX3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3Qgc2lnY29udGV4dCAqc2MpOwogCiB2b2lkIGhhcmRfaGFuZGxlcihpbnQgc2lnKQogewogCXN0cnVjdCB1Y29udGV4dCAqdWM7CiAJYXNtKCJtb3ZxICUlcmR4LCAlMCIgOiAiPXIiICh1YykpOwogCi0JKCpoYW5kbGVyc1tzaWddKShzaWcsIChzdHJ1Y3Qgc2lnY29udGV4dCAqKSAmdWMtPnVjX21jb250ZXh0KTsKKwloYW5kbGVfc2lnbmFsKHNpZywgKHN0cnVjdCBzaWdjb250ZXh0ICopICZ1Yy0+dWNfbWNvbnRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC91dGlsLmMgYi9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYwppbmRleCBjMzA3YTg5Li43Y2JjZjQ4IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYwpAQCAtMzMsMjUgKzMzLDggQEAKIAogdm9pZCBzdGFja19wcm90ZWN0aW9ucyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JaW50IHByb3QgPSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDOwotCi0JaWYobXByb3RlY3QoKHZvaWQgKikgYWRkcmVzcywgVU1fS0VSTl9QQUdFX1NJWkUsIHByb3QpIDwgMCkKLQkJcGFuaWMoInByb3RlY3Rpbmcgc3RhY2sgZmFpbGVkLCBlcnJubyA9ICVkIiwgZXJybm8pOwotfQotCi12b2lkIHRhc2tfcHJvdGVjdGlvbnModW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXVuc2lnbmVkIGxvbmcgZ3VhcmQgPSBhZGRyZXNzICsgVU1fS0VSTl9QQUdFX1NJWkU7Ci0JdW5zaWduZWQgbG9uZyBzdGFjayA9IGd1YXJkICsgVU1fS0VSTl9QQUdFX1NJWkU7Ci0JaW50IHByb3QgPSAwLCBwYWdlczsKLQotI2lmZGVmIG5vdGRlZgotCWlmKG1wcm90ZWN0KCh2b2lkICopIHN0YWNrLCBVTV9LRVJOX1BBR0VfU0laRSwgcHJvdCkgPCAwKQotCQlwYW5pYygicHJvdGVjdGluZyBndWFyZCBwYWdlIGZhaWxlZCwgZXJybm8gPSAlZCIsIGVycm5vKTsKLSNlbmRpZgotCXBhZ2VzID0gKDEgPDwgVU1MX0NPTkZJR19LRVJORUxfU1RBQ0tfT1JERVIpIC0gMjsKLQlwcm90ID0gUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQzsKLQlpZihtcHJvdGVjdCgodm9pZCAqKSBzdGFjaywgcGFnZXMgKiBVTV9LRVJOX1BBR0VfU0laRSwgcHJvdCkgPCAwKQorCWlmKG1wcm90ZWN0KCh2b2lkICopIGFkZHJlc3MsIFVNX1RIUkVBRF9TSVpFLAorCQkgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQykgPCAwKQogCQlwYW5pYygicHJvdGVjdGluZyBzdGFjayBmYWlsZWQsIGVycm5vID0gJWQiLCBlcnJubyk7CiB9CiAKQEAgLTcyLDcgKzU1LDcgQEAKIAogCS8qIFhYWCB0Y3NldGF0dHIgY291bGQgaGF2ZSBhcHBsaWVkIG9ubHkgc29tZSBjaGFuZ2VzCiAJICogKGFuZCBjZm1ha2VyYXcoKSBpcyBhIHNldCBvZiBjaGFuZ2VzKSAqLwotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBzZXR1cF9tYWNoaW5lbmFtZShjaGFyICptYWNoaW5lX291dCkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxsX3RhYmxlLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbF90YWJsZS5jCmluZGV4IDllOWFkNzIuLjUxMzM5ODggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxsX3RhYmxlLmMKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxfdGFibGUuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxrZXJuX2NvbnN0YW50cy5oPgogCiAjZGVmaW5lIF9fTk9fU1RVQlMKIApAQCAtNDUsOCArNDYsOCBAQAogCiBleHRlcm4gdm9pZCBzeXNfbmlfc3lzY2FsbCh2b2lkKTsKIAotc3lzX2NhbGxfcHRyX3Qgc3lzX2NhbGxfdGFibGVbX19OUl9zeXNjYWxsX21heCsxXSBfX2NhY2hlbGluZV9hbGlnbmVkID0geworc3lzX2NhbGxfcHRyX3Qgc3lzX2NhbGxfdGFibGVbVU1fTlJfc3lzY2FsbF9tYXgrMV0gX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsKIAkvKiBTbWVsbHMgbGlrZSBhIGxpa2UgYSBjb21waWxlciBidWcgLS0gaXQgZG9lc24ndCB3b3JrIHdoZW4gdGhlICYgYmVsb3cgaXMgcmVtb3ZlZC4gKi8KLQlbMCAuLi4gX19OUl9zeXNjYWxsX21heF0gPSAmc3lzX25pX3N5c2NhbGwsCisJWzAgLi4uIFVNX05SX3N5c2NhbGxfbWF4XSA9ICZzeXNfbmlfc3lzY2FsbCwKICNpbmNsdWRlIDxhc20teDg2XzY0L3VuaXN0ZC5oPgogfTsKZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9LY29uZmlnIGIvYXJjaC92ODUwL0tjb25maWcKaW5kZXggNWY1NGMxMi4uYWNlNDc5YSAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL0tjb25maWcKKysrIGIvYXJjaC92ODUwL0tjb25maWcKQEAgLTI0MCwxNCArMjQwLDYgQEAKICAgIGNvbmZpZyBSRVNFVF9HVUFSRAogICAgCSAgYm9vbCAiUmVzZXQgR3VhcmQiCiAKLSAgIGNvbmZpZyBMQVJHRV9BTExPQ1MKLQkgIGJvb2wgIkFsbG93IGFsbG9jYXRpbmcgbGFyZ2UgYmxvY2tzICg+IDFNQikgb2YgbWVtb3J5IgotCSAgaGVscAotCSAgICAgQWxsb3cgdGhlIHNsYWIgbWVtb3J5IGFsbG9jYXRvciB0byBrZWVwIGNoYWlucyBmb3IgdmVyeSBsYXJnZQotCSAgICAgbWVtb3J5IHNpemVzIC0gdXB0byAzMk1CLiBZb3UgbWF5IG5lZWQgdGhpcyBpZiB5b3VyIHN5c3RlbSBoYXMKLQkgICAgIGEgbG90IG9mIFJBTSwgYW5kIHlvdSBuZWVkIHRvIGFibGUgdG8gYWxsb2NhdGUgdmVyeSBsYXJnZQotCSAgICAgY29udGlndW91cyBjaHVua3MuIElmIHVuc3VyZSwgc2F5IE4uCi0KIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC92ODUwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDI0ZjI5MTMuLmNlZTVjMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAlERUZJTkUgKFRBU0tfUFRSQUNFLCBvZmZzZXRvZiAoc3RydWN0IHRhc2tfc3RydWN0LCBwdHJhY2UpKTsKIAlERUZJTkUgKFRBU0tfQkxPQ0tFRCwgb2Zmc2V0b2YgKHN0cnVjdCB0YXNrX3N0cnVjdCwgYmxvY2tlZCkpOwogCURFRklORSAoVEFTS19USFJFQUQsIG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZCkpOwotCURFRklORSAoVEFTS19USFJFQURfSU5GTywgb2Zmc2V0b2YgKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8pKTsKKwlERUZJTkUgKFRBU0tfVEhSRUFEX0lORk8sIG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHN0YWNrKSk7CiAJREVGSU5FIChUQVNLX01NLCBvZmZzZXRvZiAoc3RydWN0IHRhc2tfc3RydWN0LCBtbSkpOwogCURFRklORSAoVEFTS19BQ1RJVkVfTU0sIG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIGFjdGl2ZV9tbSkpOwogCURFRklORSAoVEFTS19QSUQsIG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHBpZCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC92ODUwL2tlcm5lbC9lbnRyeS5TCmluZGV4IDhiYzUyMWMuLmU0MzI3YTggMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3Y4NTAva2VybmVsL2VudHJ5LlMKQEAgLTUyMyw3ICs1MjMsNyBAQAogCiAKIC8qIFRoaXMgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGEgbmV3IGNoaWxkIHRocmVhZCwgd2l0aCBhbiBhcHByb3ByaWF0ZQotICAgc3RhY2sgaW4gcGxhY2UgdGhhdCBtYWtlcyBpdCBsb29rIHRoZSB0aGUgY2hpbGQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhbgorICAgc3RhY2sgaW4gcGxhY2UgdGhhdCBtYWtlcyBpdCBsb29rIHRoYXQgdGhlIGNoaWxkIGlzIGluIHRoZSBtaWRkbGUgb2YgYW4KICAgIHN5c2NhbGwuICBUaGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGByZXR1cm5lZCB0bycgZnJvbSBzd2l0Y2hfdGhyZWFkCiAgICAoY29weV90aHJlYWQgbWFrZXMgcmV0X2Zyb21fZm9yayB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gZWFjaCBuZXcgdGhyZWFkJ3MKICAgIHNhdmVkIGNvbnRleHQpLiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC92ODUwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYzRmODQ0Yy4uZTRhNGI4ZSAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3B0cmFjZS5jIGIvYXJjaC92ODUwL2tlcm5lbC9wdHJhY2UuYwppbmRleCA2N2UwNTc1Li5hOWIwOTM0IDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvcHRyYWNlLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvdjg1MC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMTdjMmQ0My4uYmYxNjZlNyAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL3NpZ25hbC5jCkBAIC0xNyw3ICsxNyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvc3lzY2FsbHMuYyBiL2FyY2gvdjg1MC9rZXJuZWwvc3lzY2FsbHMuYwppbmRleCBkMmIxZmIxLi5mOWYwMGNjIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3N5c2NhbGxzLmMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC9zeXNjYWxscy5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9zZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tc2cuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvdjg1MC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAzNTYzMDgyLi42MTcyNTk5IDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC05Miw3ICs5Miw3IEBACiAjZGVmaW5lIFRFWFRfQ09OVEVOVFMJCQkJCQkJICAgICAgXAogCQlfdGV4dCA9IC47CQkJCQkJICAgICAgXAogCQlfX3N0ZXh0ID0gLiA7CQkJCQkJICAgICAgXAotICAgICAgICAJKigudGV4dCkJCQkJCQkgICAgICBcCisJCVRFWFRfVEVYVAkJCQkJCSAgICAgIFwKIAkJU0NIRURfVEVYVAkJCQkJCSAgICAgIFwKIAkJCSooLmV4aXQudGV4dCkJLyogMi41IGNvbnZlbnRpb24gKi8JCSAgICAgIFwKIAkJCSooLnRleHQuZXhpdCkJLyogMi40IGNvbnZlbnRpb24gKi8JCSAgICAgIFwKQEAgLTExMyw3ICsxMTMsNyBAQAogLyogS2VybmVsIGRhdGEgc2VnbWVudC4gICovCiAjZGVmaW5lIERBVEFfQ09OVEVOVFMJCQkJCQkJICAgICAgXAogCQlfX3NkYXRhID0gLiA7CQkJCQkJICAgICAgXAotICAgICAgICAJKiguZGF0YSkJCQkJCQkgICAgICBcCisJCURBVEFfREFUQQkJCQkJCSAgICAgIFwKIAkJCSooLmV4aXQuZGF0YSkJLyogMi41IGNvbnZlbnRpb24gKi8JCSAgICAgIFwKIAkJCSooLmRhdGEuZXhpdCkJLyogMi40IGNvbnZlbnRpb24gKi8JCSAgICAgIFwKIAkJLiA9IEFMSUdOICgxNikgOwkJCQkJICAgICAgXApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvS2NvbmZpZyBiL2FyY2gveDg2XzY0L0tjb25maWcKaW5kZXggMTQ1YmI4Mi4uNWNlOTQ0MyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvS2NvbmZpZworKysgYi9hcmNoL3g4Nl82NC9LY29uZmlnCkBAIC00MjgsMTIgKzQyOCwxNSBAQAogCSAgbWVtb3J5IGluIHRoZSBzdGF0aWMga2VybmVsIGNvbmZpZ3VyYXRpb24uCiAKIGNvbmZpZyBIT1RQTFVHX0NQVQotCWJvb2wgIlN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVcyAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJTdXBwb3J0IGZvciBzdXNwZW5kIG9uIFNNUCBhbmQgaG90LXBsdWdnYWJsZSBDUFVzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gU01QICYmIEhPVFBMVUcgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCQlTYXkgWSBoZXJlIHRvIGV4cGVyaW1lbnQgd2l0aCB0dXJuaW5nIENQVXMgb2ZmIGFuZCBvbi4gIENQVXMKIAkJY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjLgotCQlTYXkgTiBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIENQVSBob3RwbHVnLgorCQlUaGlzIGlzIGFsc28gcmVxdWlyZWQgZm9yIHN1c3BlbmQvaGliZXJuYXRpb24gb24gU01QIHN5c3RlbXMuCisKKwkJU2F5IE4gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBDUFUgaG90cGx1ZyBhbmQgZG9uJ3QgbmVlZCB0bworCQlzdXNwZW5kLgogCiBjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKIAlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9kZWZjb25maWcgYi9hcmNoL3g4Nl82NC9kZWZjb25maWcKaW5kZXggOTQxYTdlMy4uNDAxNzhlNSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvZGVmY29uZmlnCisrKyBiL2FyY2gveDg2XzY0L2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMS1naXQzCi0jIFR1ZSBNYXkgIDEgMDc6MzA6NDggMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIyLXJjMgorIyBNb24gTWF5IDIxIDEzOjIzOjQwIDIwMDcKICMKIENPTkZJR19YODZfNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTUzLDYgKzUzLDcgQEAKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xOAogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC03MiwxNCArNzMsMTkgQEAKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xMTgsMTEgKzEyNCwxMSBAQAogIyBDT05GSUdfWDg2X1ZTTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUs4IGlzIG5vdCBzZXQKICMgQ09ORklHX01QU0MgaXMgbm90IHNldAotQ09ORklHX01DT1JFMj15Ci0jIENPTkZJR19HRU5FUklDX0NQVSBpcyBub3Qgc2V0Ci1DT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTPTY0Ci1DT05GSUdfWDg2X0wxX0NBQ0hFX1NISUZUPTYKLUNPTkZJR19YODZfSU5URVJOT0RFX0NBQ0hFX0JZVEVTPTY0CisjIENPTkZJR19NQ09SRTIgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ1BVPXkKK0NPTkZJR19YODZfTDFfQ0FDSEVfQllURVM9MTI4CitDT05GSUdfWDg2X0wxX0NBQ0hFX1NISUZUPTcKK0NPTkZJR19YODZfSU5URVJOT0RFX0NBQ0hFX0JZVEVTPTEyOAogQ09ORklHX1g4Nl9UU0M9eQogQ09ORklHX1g4Nl9HT09EX0FQSUM9eQogIyBDT05GSUdfTUlDUk9DT0RFIGlzIG5vdCBzZXQKQEAgLTE3NCw3ICsxODAsNyBAQAogQ09ORklHX1g4Nl9NQ0VfQU1EPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAotIyBDT05GSUdfUkVMT0NBVEFCTEUgaXMgbm90IHNldAorQ09ORklHX1JFTE9DQVRBQkxFPXkKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDIwMDAwMAogQ09ORklHX1NFQ0NPTVA9eQogIyBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IgaXMgbm90IHNldApAQCAtMjQyLDcgKzI0OCw3IEBACiAjIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQotQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CiAKICMKICMgQ1BVRnJlcSBwcm9jZXNzb3IgZHJpdmVycwpAQCAtMjY2LDYgKzI3Miw3IEBACiBDT05GSUdfUENJX01NQ09ORklHPXkKIENPTkZJR19QQ0lFUE9SVEJVUz15CiBDT05GSUdfUENJRUFFUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQogQ09ORklHX1BDSV9NU0k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUX0lSUSBpcyBub3Qgc2V0CkBAIC0yNzQsMTAgKzI4MSw2IEBACiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKICMKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIwogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCiAjCkBAIC0zOTUsNyArMzk4LDkgQEAKICMKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDU4LDE0ICs0NjMsMTIgQEAKICMgTWlzYyBkZXZpY2VzCiAjCiAjIENPTkZJR19JQk1fQVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPTllfTEFQVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1RISU5LUEFEX0FDUEkgaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0JMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19JREU9eQogQ09ORklHX0JMS19ERVZfSURFPXkKIApAQCAtNDgyLDYgKzQ4NSw3IEBACiAjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQUNQST15CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKQEAgLTQ5MSw2ICs0OTUsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JREVQTlAgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFUENJPXkKICMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAorQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKQEAgLTU1Niw2ICs1NjEsNyBAQAogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KIAogIwogIyBTQ1NJIFRyYW5zcG9ydHMKQEAgLTU3OSwxNSArNTg1LDE2IEBACiBDT05GSUdfU0NTSV9BSUM3OVhYPXkKIENPTkZJR19BSUM3OVhYX0NNRFNfUEVSX0RFVklDRT0zMgogQ09ORklHX0FJQzc5WFhfUkVTRVRfREVMQVlfTVM9NDAwMAotIyBDT05GSUdfQUlDNzlYWF9FTkFCTEVfUkRfU1RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BSUM3OVhYX0RFQlVHX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQUlDNzlYWF9ERUJVR19NQVNLPTAKICMgQ09ORklHX0FJQzc5WFhfUkVHX1BSRVRUWV9QUklOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKK0NPTkZJR19NRUdBUkFJRF9ORVdHRU49eQorQ09ORklHX01FR0FSQUlEX01NPXkKK0NPTkZJR19NRUdBUkFJRF9NQUlMQk9YPXkKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorQ09ORklHX01FR0FSQUlEX1NBUz15CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldApAQCAtNjA5LDEyICs2MTYsOSBAQAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0VTUF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfQUNQST15CiBDT05GSUdfU0FUQV9BSENJPXkKIENPTkZJR19TQVRBX1NWVz15CiBDT05GSUdfQVRBX1BJSVg9eQpAQCAtNjMxLDcgKzYzNSw2IEBACiBDT05GSUdfU0FUQV9WSUE9eQogIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotQ09ORklHX1NBVEFfQUNQST15CiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKQEAgLTY4MSw2ICs2ODQsNyBAQAogIyBDT05GSUdfRE1fTUlSUk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNX1pFUk8gaXMgbm90IHNldAogIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKIAogIwogIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CkBAIC02ODgsMTMgKzY5MiwxNCBAQAogQ09ORklHX0ZVU0lPTj15CiBDT05GSUdfRlVTSU9OX1NQST15CiAjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTSU9OX1NBUz15CiBDT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4CiAjIENPTkZJR19GVVNJT05fQ1RMIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTEzOTQ9eQogCiAjCkBAIC03MDUsMTAgKzcxMCw3IEBACiAjCiAjIENvbnRyb2xsZXJzCiAjCi0KLSMKLSMgVGV4YXMgSW5zdHJ1bWVudHMgUENJTHlueCByZXF1aXJlcyBJMkMKLSMKKyMgQ09ORklHX0lFRUUxMzk0X1BDSUxZTlggaXMgbm90IHNldAogQ09ORklHX0lFRUUxMzk0X09IQ0kxMzk0PXkKIAogIwpAQCAtNzI1LDExICs3MjcsNyBAQAogIyBJMk8gZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTc0NSwxMCArNzQzLDYgQEAKICMgQVJDbmV0IGRldmljZXMKICMKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogCiAjCkBAIC03NzksOCArNzczLDcgQEAKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotQ09ORklHX0FNRDgxMTFfRVRIPXkKLSMgQ09ORklHX0FNRDgxMTFFX05BUEkgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiBDT05GSUdfQjQ0PXkKIENPTkZJR19GT1JDRURFVEg9eQpAQCAtODAyLDEwICs3OTUsNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCitDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKQEAgLTgyNCwxMCArODE0LDcgQEAKIENPTkZJR19CTlgyPXkKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCitDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKQEAgLTgzNSw2ICs4MjIsNyBAQAogIyBDT05GSUdfUzJJT19OQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTg0OCw4ICs4MzYsMTQgQEAKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCiAjCi0jIFdhbiBpbnRlcmZhY2VzCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtOTAyLDkgKzg5NiwxNyBAQAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKIENPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtOTU0LDEwICs5NTYsNiBAQAogIyBJUE1JCiAjCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKIENPTkZJR19IV19SQU5ET01fSU5URUw9eQpAQCAtOTY1LDcgKzk2Myw2IEBACiAjIENPTkZJR19IV19SQU5ET01fR0VPREUgaXMgbm90IHNldAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAogQ09ORklHX1JUQz15Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKIENPTkZJR19BR1A9eQpAQCAtOTg4LDExICs5ODUsNTggQEAKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz1tCitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9bQogCiAjCi0jIEkyQyBzdXBwb3J0CisjIEkyQyBBbGdvcml0aG1zCiAjCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCiAjIFNQSSBzdXBwb3J0CkBAIC0xMDA0LDEyICsxMDQ4LDU4IEBACiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19LOFRFTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19DT1JFVEVNUD15CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5Nz1tCisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0hEQVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVBQTEVTTUMgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwpAQCAtMTAyMCwxNyArMTExMCwyMCBAQAogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQogIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAogCiAjCkBAIC0xMDU2LDE0ICsxMTQ5LDEwIEBACiAjIE9wZW4gU291bmQgU3lzdGVtCiAjCiBDT05GSUdfU09VTkRfUFJJTUU9eQotQ09ORklHX09CU09MRVRFX09TUz15Ci0jIENPTkZJR19TT1VORF9CVDg3OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9FUzEzNzEgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0lDSD15CisjIENPTkZJR19PU1NfT0JTT0xFVEUgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EQ0xBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EUElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9PU1MgaXMgbm90IHNldAogCiAjCkBAIC0xMTQyLDM3ICsxMjMxLDEwIEBACiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HVENPIGlzIG5vdCBzZXQKLQotIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCiAjCiAjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiAKICMKQEAgLTEyMTYsMTAgKzEyNzgsNiBAQAogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNjQsMTAgKzEzMjIsNiBAQAogIwogCiAjCi0jIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKLSMKLQotIwogIyBWaXJ0dWFsaXphdGlvbgogIwogIyBDT05GSUdfS1ZNIGlzIG5vdCBzZXQKQEAgLTEzODUsNiArMTQzOSw3IEBACiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xNDY4LDEwICsxNTIzLDkgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xOAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotQ09ORklHX1RJTUVSX1NUQVRTPXkKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTQ4Nyw2ICsxNTQxLDggQEAKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CitDT05GSUdfVU5XSU5EX0lORk89eQorQ09ORklHX1NUQUNLX1VOV0lORD15CiAjIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CkBAIC0xNTEzLDkgKzE1NjksMTEgQEAKIENPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvYXVkaXQuYyBiL2FyY2gveDg2XzY0L2lhMzIvYXVkaXQuYwppbmRleCA5MmQ3ZDBjLi44ODUwZmU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL2F1ZGl0LmMKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9hdWRpdC5jCkBAIC0yMCw2ICsyMCwxMSBAQAogfjBVCiB9OwogCit1bnNpZ25lZCBpYTMyX3NpZ25hbF9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3NpZ25hbC5oPgorfjBVCit9OworCiBpbnQgaWEzMl9jbGFzc2lmeV9zeXNjYWxsKHVuc2lnbmVkIHN5c2NhbGwpCiB7CiAJc3dpdGNoKHN5c2NhbGwpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9zaWduYWwuYyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9zaWduYWwuYwppbmRleCAzNTllYWNjLi42ZWExOWMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfc2lnbmFsLmMKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX3NpZ25hbC5jCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IGM0ODA4N2QuLjIxODY4ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyZW50cnkuUwpAQCAtNzEwLDkgKzcxMCwxMyBAQAogCS5xdWFkIGNvbXBhdF9zeXNfZ2V0X3JvYnVzdF9saXN0CiAJLnF1YWQgc3lzX3NwbGljZQogCS5xdWFkIHN5c19zeW5jX2ZpbGVfcmFuZ2UKLQkucXVhZCBzeXNfdGVlCisJLnF1YWQgc3lzX3RlZQkJCS8qIDMxNSAqLwogCS5xdWFkIGNvbXBhdF9zeXNfdm1zcGxpY2UKIAkucXVhZCBjb21wYXRfc3lzX21vdmVfcGFnZXMKIAkucXVhZCBzeXNfZ2V0Y3B1CiAJLnF1YWQgc3lzX2Vwb2xsX3B3YWl0Ci1pYTMyX3N5c2NhbGxfZW5kOgkJCisJLnF1YWQgY29tcGF0X3N5c191dGltZW5zYXQJLyogMzIwICovCisJLnF1YWQgY29tcGF0X3N5c19zaWduYWxmZAorCS5xdWFkIGNvbXBhdF9zeXNfdGltZXJmZAorCS5xdWFkIHN5c19ldmVudGZkCitpYTMyX3N5c2NhbGxfZW5kOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9tbWFwMzIuYyBiL2FyY2gveDg2XzY0L2lhMzIvbW1hcDMyLmMKaW5kZXggMDc5ZjQxMy4uZTRiODRiNCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9tbWFwMzIuYworKysgYi9hcmNoL3g4Nl82NC9pYTMyL21tYXAzMi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIC8qCiAgKiBUb3Agb2YgbW1hcCBhcmVhIChqdXN0IGJlbG93IHRoZSBwcm9jZXNzIHN0YWNrKS4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCA0ZDk0YzUxLi5kZTFkZThhIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL01ha2VmaWxlCkBAIC0zMiw2ICszMiw3IEBACiBvYmotJChDT05GSUdfSU9NTVUpCQkrPSBwY2ktZ2FydC5vIGFwZXJ0dXJlLm8KIG9iai0kKENPTkZJR19DQUxHQVJZX0lPTU1VKQkrPSBwY2ktY2FsZ2FyeS5vIHRjZS5vCiBvYmotJChDT05GSUdfU1dJT1RMQikJCSs9IHBjaS1zd2lvdGxiLm8KK29iai0kKENPTkZJR19TRVJJQUxfODI1MCkJKz0gbGVnYWN5X3NlcmlhbC5vCiBvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubwogb2JqLSQoQ09ORklHX1g4Nl9QTV9USU1FUikJKz0gcG10aW1lci5vCiBvYmotJChDT05GSUdfWDg2X1ZTTVApCQkrPSB2c21wLm8KQEAgLTQ5LDYgKzUwLDcgQEAKIAogdGhlcm1fdGhyb3QteSAgICAgICAgICAgICAgICAgICArPSAuLi8uLi9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90Lm8KIGJvb3RmbGFnLXkJCQkrPSAuLi8uLi9pMzg2L2tlcm5lbC9ib290ZmxhZy5vCitsZWdhY3lfc2VyaWFsLXkJCQkrPSAuLi8uLi9pMzg2L2tlcm5lbC9sZWdhY3lfc2VyaWFsLm8KIGNwdWlkLSQoc3Vic3QgbSx5LCQoQ09ORklHX1g4Nl9DUFVJRCkpICArPSAuLi8uLi9pMzg2L2tlcm5lbC9jcHVpZC5vCiB0b3BvbG9neS15ICAgICAgICAgICAgICAgICAgICAgKz0gLi4vLi4vaTM4Ni9rZXJuZWwvdG9wb2xvZ3kubwogbWljcm9jb2RlLSQoc3Vic3QgbSx5LCQoQ09ORklHX01JQ1JPQ09ERSkpICArPSAuLi8uLi9pMzg2L2tlcm5lbC9taWNyb2NvZGUubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2FwZXJ0dXJlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvYXBlcnR1cmUuYwppbmRleCBhNTJhZjU4Li5hM2Q0NTBkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvYXBlcnR1cmUuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvYXBlcnR1cmUuYwpAQCAtODYsNyArODYsNyBAQAogCQlwcmludGsoIkFwZXJ0dXJlIHRvbyBzbWFsbCAoJWQgTUIpXG4iLCBhcGVyX3NpemU+PjIwKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmIChhcGVyX2Jhc2UgKyBhcGVyX3NpemUgPj0gMHhmZmZmZmZmZikgeyAKKwlpZiAoYXBlcl9iYXNlICsgYXBlcl9zaXplID4gMHgxMDAwMDAwMDBVTCkgewogCQlwcmludGsoIkFwZXJ0dXJlIGJleW9uZCA0R0IuIElnbm9yaW5nLlxuIik7CiAJCXJldHVybiAwOyAKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvYXBpYy5jIGIvYXJjaC94ODZfNjQva2VybmVsL2FwaWMuYwppbmRleCBkMTk4ZjdkLi4xYjBlMDdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvYXBpYy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9hcGljLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2F1ZGl0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvYXVkaXQuYwppbmRleCAyMWYzMzM4Li4wNmQzZTVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvYXVkaXQuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvYXVkaXQuYwpAQCAtMjMsNiArMjMsMjAgQEAKIH4wVQogfTsKIAorc3RhdGljIHVuc2lnbmVkIHNpZ25hbF9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3NpZ25hbC5oPgorfjBVCit9OworCitpbnQgYXVkaXRfY2xhc3NpZnlfYXJjaChpbnQgYXJjaCkKK3sKKyNpZmRlZiBDT05GSUdfSUEzMl9FTVVMQVRJT04KKwlpZiAoYXJjaCA9PSBBVURJVF9BUkNIX0kzODYpCisJCXJldHVybiAxOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKIGludCBhdWRpdF9jbGFzc2lmeV9zeXNjYWxsKGludCBhYmksIHVuc2lnbmVkIHN5c2NhbGwpCiB7CiAjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCkBAIC00OSwxNSArNjMsMTggQEAKIAlleHRlcm4gX191MzIgaWEzMl93cml0ZV9jbGFzc1tdOwogCWV4dGVybiBfX3UzMiBpYTMyX3JlYWRfY2xhc3NbXTsKIAlleHRlcm4gX191MzIgaWEzMl9jaGF0dHJfY2xhc3NbXTsKKwlleHRlcm4gX191MzIgaWEzMl9zaWduYWxfY2xhc3NbXTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19XUklURV8zMiwgaWEzMl93cml0ZV9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfUkVBRF8zMiwgaWEzMl9yZWFkX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEVfMzIsIGlhMzJfZGlyX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFJfMzIsIGlhMzJfY2hhdHRyX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19TSUdOQUxfMzIsIGlhMzJfc2lnbmFsX2NsYXNzKTsKICNlbmRpZgogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1dSSVRFLCB3cml0ZV9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfUkVBRCwgcmVhZF9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfRElSX1dSSVRFLCBkaXJfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0NIQVRUUiwgY2hhdHRyX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19TSUdOQUwsIHNpZ25hbF9jbGFzcyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9idWdzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvYnVncy5jCmluZGV4IDEyYjU4NWIuLmMzYzZiOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9idWdzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2J1Z3MuYwpAQCAtOSwxMCArOSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL210cnIuaD4KIAogdm9pZCBfX2luaXQgY2hlY2tfYnVncyh2b2lkKQogewogCWlkZW50aWZ5X2NwdSgmYm9vdF9jcHVfZGF0YSk7CisJbXRycl9icF9pbml0KCk7CiAjaWYgIWRlZmluZWQoQ09ORklHX1NNUCkKIAlwcmludGsoIkNQVTogIik7CiAJcHJpbnRfY3B1X2luZm8oJmJvb3RfY3B1X2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2NyYXNoLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvY3Jhc2guYwppbmRleCA5NWE3YTJjLi4xMzQzMmExIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvY3Jhc2guYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvY3Jhc2guYwpAQCAtMTcsMTMgKzE3LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoX2FwaWMuaD4KLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAKIC8qIFRoaXMga2VlcHMgYSB0cmFjayBvZiB3aGljaCBvbmUgaXMgY3Jhc2hpbmcgY3B1LiAqLwogc3RhdGljIGludCBjcmFzaGluZ19jcHU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggOTIyMTNkMi4uMjk2ZDJiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtOTEsOSArOTEsOSBAQAogc3RhdGljIHZvaWQgZWFybHlfc2VyaWFsX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIG4pCiB7CiAJd2hpbGUgKCpzICYmIG4tLSA+IDApIHsKLQkJZWFybHlfc2VyaWFsX3B1dGMoKnMpOwogCQlpZiAoKnMgPT0gJ1xuJykKIAkJCWVhcmx5X3NlcmlhbF9wdXRjKCdccicpOworCQllYXJseV9zZXJpYWxfcHV0Yygqcyk7CiAJCXMrKzsKIAl9CiB9CkBAIC0yNDMsMjIgKzI0MywxMiBAQAogIAkJZWFybHlfY29uc29sZSA9ICZzaW1ub3dfY29uc29sZTsKICAJCWtlZXBfZWFybHkgPSAxOwogCX0KKworCWlmIChrZWVwX2Vhcmx5KQorCQllYXJseV9jb25zb2xlLT5mbGFncyAmPSB+Q09OX0JPT1Q7CisJZWxzZQorCQllYXJseV9jb25zb2xlLT5mbGFncyB8PSBDT05fQk9PVDsKIAlyZWdpc3Rlcl9jb25zb2xlKGVhcmx5X2NvbnNvbGUpOwogCXJldHVybiAwOwogfQotCiBlYXJseV9wYXJhbSgiZWFybHlwcmludGsiLCBzZXR1cF9lYXJseV9wcmludGspOwotCi12b2lkIF9faW5pdCBkaXNhYmxlX2Vhcmx5X3ByaW50ayh2b2lkKQotewotCWlmICghZWFybHlfY29uc29sZV9pbml0aWFsaXplZCB8fCAhZWFybHlfY29uc29sZSkKLQkJcmV0dXJuOwotCWlmICgha2VlcF9lYXJseSkgewotCQlwcmludGsoImRpc2FibGluZyBlYXJseSBjb25zb2xlXG4iKTsKLQkJdW5yZWdpc3Rlcl9jb25zb2xlKGVhcmx5X2NvbnNvbGUpOwotCQllYXJseV9jb25zb2xlX2luaXRpYWxpemVkID0gMDsKLQl9IGVsc2UgewotCQlwcmludGsoImtlZXBpbmcgZWFybHkgY29uc29sZVxuIik7Ci0JfQotfQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZDY0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZDY0LmMKaW5kZXggMjEzZDkwZS4uNmMzNGJkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2hlYWQ2NC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9oZWFkNjQuYwpAQCAtNjIsMTMgKzYyLDYgQEAKIHsKIAlpbnQgaTsKIAotCS8qCi0JICogTWFrZSBzdXJlIGtlcm5lbCBpcyBhbGlnbmVkIHRvIDJNQiBhZGRyZXNzLiBDYXRjaGluZyBpdCBhdCBjb21waWxlCi0JICogdGltZSBpcyBiZXR0ZXIuIENoYW5nZSB5b3VyIGNvbmZpZyBmaWxlIGFuZCBjb21waWxlIHRoZSBrZXJuZWwKLQkgKiBmb3IgYSAyTUIgYWxpZ25lZCBhZGRyZXNzIChDT05GSUdfUEhZU0lDQUxfU1RBUlQpCi0JICovCi0JQlVJTERfQlVHX09OKENPTkZJR19QSFlTSUNBTF9TVEFSVCAmIChfX0tFUk5FTF9BTElHTiAtIDEpKTsKLQogCS8qIGNsZWFyIGJzcyBiZWZvcmUgc2V0X2ludHJfZ2F0ZSB3aXRoIGVhcmx5X2lkdF9oYW5kbGVyICovCiAJY2xlYXJfYnNzKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9pODI1OS5jIGIvYXJjaC94ODZfNjQva2VybmVsL2k4MjU5LmMKaW5kZXggNDg5NDI2Ni4uNGIzMjY2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2k4MjU5LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2k4MjU5LmMKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IDJhMmRmMTQuLmQ4YmZlMzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KQEAgLTE0MTQsNyArMTQxMyw3IEBACiAKIAkvKgogCSAqIFdlIG11c3QgYWNrbm93bGVkZ2UgdGhlIGlycSBiZWZvcmUgd2UgbW92ZSBpdCBvciB0aGUgYWNrbm93bGVkZ2Ugd2lsbAotCSAqIG5vdCBwcm9wb2dhdGUgcHJvcGVybHkuCisJICogbm90IHByb3BhZ2F0ZSBwcm9wZXJseS4KIAkgKi8KIAlhY2tfQVBJQ19pcnEoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2lvcG9ydC5jIGIvYXJjaC94ODZfNjQva2VybmVsL2lvcG9ydC5jCmluZGV4IDM4N2QzNDcuLjY1M2VmYTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9pb3BvcnQuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaW9wb3J0LmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaXJxLmMKaW5kZXggM2JjMzBkMi4uM2VhY2VhYyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pcnEuYwpAQCAtMzIsNyArMzIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc3RhY2tfb3ZlcmZsb3dfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JdTY0IGN1cmJhc2UgPSAodTY0KSBjdXJyZW50LT50aHJlYWRfaW5mbzsKKwl1NjQgY3VyYmFzZSA9ICh1NjQpdGFza19zdGFja19wYWdlKGN1cnJlbnQpOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHdhcm5lZCA9IC02MCpIWjsKIAogCWlmIChyZWdzLT5yc3AgPj0gY3VyYmFzZSAmJiByZWdzLT5yc3AgPD0gY3VyYmFzZSArIFRIUkVBRF9TSVpFICYmCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvazguYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9rOC5jCmluZGV4IGJjMTFiMzIuLjczNzdjY2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9rOC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9rOC5jCkBAIC0zOSwxMCArMzksMTAgQEAKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCiAJaWYgKG51bV9rOF9ub3J0aGJyaWRnZXMpCiAJCXJldHVybiAwOwogCi0JbnVtX2s4X25vcnRoYnJpZGdlcyA9IDA7CiAJZGV2ID0gTlVMTDsKIAl3aGlsZSAoKGRldiA9IG5leHRfazhfbm9ydGhicmlkZ2UoZGV2KSkgIT0gTlVMTCkKIAkJbnVtX2s4X25vcnRoYnJpZGdlcysrOwpAQCAtNTIsNiArNTIsMTEgQEAKIAlpZiAoIWs4X25vcnRoYnJpZGdlcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoIW51bV9rOF9ub3J0aGJyaWRnZXMpIHsKKwkJazhfbm9ydGhicmlkZ2VzWzBdID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCiAJZmx1c2hfd29yZHMgPSBrbWFsbG9jKG51bV9rOF9ub3J0aGJyaWRnZXMgKiBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmbHVzaF93b3JkcykgewogCQlrZnJlZShrOF9ub3J0aGJyaWRnZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMjA5YzhjMC4uZDRhMGQwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC0zNywxMCArMzcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiB2b2lkIGpwcm9iZV9yZXR1cm5fZW5kKHZvaWQpOwpAQCAtMjY2LDIzICsyNjYsMTQgQEAKIH0KIAogLyogQ2FsbGVkIHdpdGgga3JldHByb2JlX2xvY2sgaGVsZCAqLwotdm9pZCBfX2twcm9iZXMgYXJjaF9wcmVwYXJlX2tyZXRwcm9iZShzdHJ1Y3Qga3JldHByb2JlICpycCwKK3ZvaWQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCiAJCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyAqc2FyYSA9ICh1bnNpZ25lZCBsb25nICopcmVncy0+cnNwOwotCXN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpOwogCi0JaWYgKChyaSA9IGdldF9mcmVlX3JwX2luc3QocnApKSAhPSBOVUxMKSB7Ci0JCXJpLT5ycCA9IHJwOwotCQlyaS0+dGFzayA9IGN1cnJlbnQ7Ci0JCXJpLT5yZXRfYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgKnNhcmE7Ci0KLQkJLyogUmVwbGFjZSB0aGUgcmV0dXJuIGFkZHIgd2l0aCB0cmFtcG9saW5lIGFkZHIgKi8KLQkJKnNhcmEgPSAodW5zaWduZWQgbG9uZykgJmtyZXRwcm9iZV90cmFtcG9saW5lOwotCQlhZGRfcnBfaW5zdChyaSk7Ci0JfSBlbHNlIHsKLQkJcnAtPm5taXNzZWQrKzsKLQl9CisJcmktPnJldF9hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSAqc2FyYTsKKwkvKiBSZXBsYWNlIHRoZSByZXR1cm4gYWRkciB3aXRoIHRyYW1wb2xpbmUgYWRkciAqLworCSpzYXJhID0gKHVuc2lnbmVkIGxvbmcpICZrcmV0cHJvYmVfdHJhbXBvbGluZTsKIH0KIAogaW50IF9fa3Byb2JlcyBrcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTQ0Nyw3ICs0MzgsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0JQlVHX09OKCFvcmlnX3JldF9hZGRyZXNzIHx8IChvcmlnX3JldF9hZGRyZXNzID09IHRyYW1wb2xpbmVfYWRkcmVzcykpOworCWtyZXRwcm9iZV9hc3NlcnQocmksIG9yaWdfcmV0X2FkZHJlc3MsIHRyYW1wb2xpbmVfYWRkcmVzcyk7CiAJcmVncy0+cmlwID0gb3JpZ19yZXRfYWRkcmVzczsKIAogCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CkBAIC03NTIsMyArNzQzLDExIEBACiB7CiAJcmV0dXJuIHJlZ2lzdGVyX2twcm9iZSgmdHJhbXBvbGluZV9wKTsKIH0KKworaW50IF9fa3Byb2JlcyBhcmNoX3RyYW1wb2xpbmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJaWYgKHAtPmFkZHIgPT0gKGtwcm9iZV9vcGNvZGVfdCAqKSZrcmV0cHJvYmVfdHJhbXBvbGluZSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9sZHQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9sZHQuYwppbmRleCBkN2U1ZDBjLi5iYzlmZmQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbGR0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2xkdC5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYwppbmRleCBmYTI2NzI2Li5hMTQzNzVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL21jZS5jCkBAIC0yMCwxMCArMjAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+IAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vbWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCkBAIC03MjAsOSArNzIwLDExIEBACiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgogCQltY2VfY3JlYXRlX2RldmljZShjcHUpOwogCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQltY2VfcmVtb3ZlX2RldmljZShjcHUpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlX2FtZC5jIGIvYXJjaC94ODZfNjQva2VybmVsL21jZV9hbWQuYwppbmRleCBkMGJkNWQ2Li4wMzM1NmU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlX2FtZC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tY2VfYW1kLmMKQEAgLTY1NCw5ICs2NTQsMTEgQEAKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CiAJCXRocmVzaG9sZF9jcmVhdGVfZGV2aWNlKGNwdSk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RFQUQ6CisJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCXRocmVzaG9sZF9yZW1vdmVfZGV2aWNlKGNwdSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbXBwYXJzZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL21wcGFyc2UuYwppbmRleCBkMGRjNDg5Li42MWFlNTdlIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tcHBhcnNlLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL25taS5jIGIvYXJjaC94ODZfNjQva2VybmVsL25taS5jCmluZGV4IDZjZDJiMzAuLjkzMWM2NGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKQEAgLTIxLDExICsyMSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL25taS5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vbWNlLmg+CiAKIGludCB1bmtub3duX25taV9wYW5pYzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZ2FydC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1nYXJ0LmMKaW5kZXggMGE3NjJlMS4uYWUwOTFjZCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1nYXJ0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1nYXJ0LmMKQEAgLTIyLDEzICsyMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vc3dpb3RsYi5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vazguaD4KQEAgLTQ3Niw3ICs0NzYsNyBAQAogCWFwZXJfYmFzZSA8PD0gMjU7CiAKIAlhcGVyX3NpemUgPSAoMzIgKiAxMDI0ICogMTAyNCkgPDwgYXBlcl9vcmRlcjsgCi0JaWYgKGFwZXJfYmFzZSArIGFwZXJfc2l6ZSA+PSAweGZmZmZmZmZmIHx8ICFhcGVyX3NpemUpCisgICAgICAgaWYgKGFwZXJfYmFzZSArIGFwZXJfc2l6ZSA+IDB4MTAwMDAwMDAwVUwgfHwgIWFwZXJfc2l6ZSkKIAkJYXBlcl9iYXNlID0gMDsKIAogCSpzaXplID0gYXBlcl9zaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNGYyMTc2NS4uNTkwOTAzOSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC00Niw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3BkYS5oPgogI2luY2x1ZGUgPGFzbS9wcmN0bC5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9pYTMyLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNDMyNmE2OS4uOTQwOTExNyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3JlYm9vdC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3JlYm9vdC5jCmluZGV4IDJkNjc2OTguLjc1MDMwNjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9yZWJvb3QuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcmVib290LmMKQEAgLTcsOCArNyw5IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IGRiNTE1NzcuLmViNjUyNGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCkBAIC04OTEsOSArODkxLDcgQEAKICNpZmRlZiBDT05GSUdfWDg2X01DRQogCW1jaGVja19pbml0KGMpOwogI2VuZGlmCi0JaWYgKGMgPT0gJmJvb3RfY3B1X2RhdGEpCi0JCW10cnJfYnBfaW5pdCgpOwotCWVsc2UKKwlpZiAoYyAhPSAmYm9vdF9jcHVfZGF0YSkKIAkJbXRycl9hcF9pbml0KCk7CiAjaWZkZWYgQ09ORklHX05VTUEKIAludW1hX2FkZF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zaWduYWwuYwppbmRleCBjODE5NjI1Li4yOTBmNWQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NpZ25hbC5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zbXAuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zbXAuYwppbmRleCBiZDFkMTIzLi4yZmY0Njg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NtcC5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCA0ZDlkYWNmLi4zMmY1MDc4IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMKQEAgLTQyLDE4ICs0MiwxNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9ubWkuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IDY1YWMyYzYuLmNiOTEwOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtMjEsOCArMjEsNyBAQAogCiBzdGF0aWMgaW50IHNhdmVfc3RhY2tfc3RhY2sodm9pZCAqZGF0YSwgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlID0gKHN0cnVjdCBzdGFja190cmFjZSAqKWRhdGE7Ci0JcmV0dXJuIHRyYWNlLT5hbGxfY29udGV4dHMgPyAwIDogLTE7CisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgdm9pZCBzYXZlX3N0YWNrX2FkZHJlc3Modm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyKQpAQCAtNDYsMTEgKzQ1LDEwIEBACiAvKgogICogU2F2ZSBzdGFjay1iYWNrdHJhY2UgYWRkcmVzc2VzIGludG8gYSBzdGFja190cmFjZSBidWZmZXIuCiAgKi8KLXZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit2b2lkIHNhdmVfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKIHsKLQlkdW1wX3RyYWNlKHRhc2ssIE5VTEwsIE5VTEwsICZzYXZlX3N0YWNrX29wcywgdHJhY2UpOworCWR1bXBfdHJhY2UoY3VycmVudCwgTlVMTCwgTlVMTCwgJnNhdmVfc3RhY2tfb3BzLCB0cmFjZSk7CiAJaWYgKHRyYWNlLT5ucl9lbnRyaWVzIDwgdHJhY2UtPm1heF9lbnRyaWVzKQogCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IFVMT05HX01BWDsKIH0KIEVYUE9SVF9TWU1CT0woc2F2ZV9zdGFja190cmFjZSk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc3lzX3g4Nl82NC5jCmluZGV4IGY4OTE5MzEuLmQwNjdkOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zeXNfeDg2XzY0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3N5c194ODZfNjQuYwpAQCAtNyw3ICs3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tc2cuaD4KICNpbmNsdWRlIDxsaW51eC9zaG0uaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCmluZGV4IDA2NTJlMTcuLjRhMDg5NWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYwpAQCAtMzYzLDcgKzM2MywxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwID0gewotCXRpbWVyX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgQ1BVX01BU0tfTk9ORSwgInRpbWVyIiwgTlVMTCwgTlVMTAorCS5oYW5kbGVyCT0gdGltZXJfaW50ZXJydXB0LAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9JUlFQT0xMLAorCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCisJLm5hbWUgCQk9ICJ0aW1lciIKIH07CiAKIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdHJhcHMuYwppbmRleCBkNzZmYzMyLi5jYjI5ZmI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdHJhcHMuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Vud2luZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTM5LDcgKzQwLDYgQEAKICNpbmNsdWRlIDxhc20vZGVidWdyZWcuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+Ci0jaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgpAQCAtNzEsMjIgKzcxLDYgQEAKIGFzbWxpbmthZ2Ugdm9pZCBtYWNoaW5lX2NoZWNrKHZvaWQpOwogYXNtbGlua2FnZSB2b2lkIHNwdXJpb3VzX2ludGVycnVwdF9idWcodm9pZCk7CiAKLUFUT01JQ19OT1RJRklFUl9IRUFEKGRpZV9jaGFpbik7Ci1FWFBPUlRfU1lNQk9MKGRpZV9jaGFpbik7Ci0KLWludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQl2bWFsbG9jX3N5bmNfYWxsKCk7Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmZGllX2NoYWluLCBuYik7Ci19Ci1FWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2RpZV9ub3RpZmllcik7IC8qIHVzZWQgbW9kdWxhciBieSBrZGIgKi8KLQotaW50IHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZkaWVfY2hhaW4sIG5iKTsKLX0KLUVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIpOyAvKiB1c2VkIG1vZHVsYXIgYnkga2RiICovCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25kaXRpb25hbF9zdGkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaWYgKHJlZ3MtPmVmbGFncyAmIFg4Nl9FRkxBR1NfSUYpCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDg4Y2ZhNTAuLmRiY2NmZGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zMSw3ICszMSw3IEBACiAJKiguYm9vdHN0cmFwLnRleHQpCiAJX3N0ZXh0ID0gLjsKIAkvKiBUaGVuIHRoZSByZXN0ICovCi0JKigudGV4dCkKKwlURVhUX1RFWFQKIAlTQ0hFRF9URVhUCiAJTE9DS19URVhUCiAJS1BST0JFU19URVhUCkBAIC01NSw3ICs1NSw3IEBACiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOyAgICAgICAgLyogQWxpZ24gZGF0YSBzZWdtZW50IHRvIHBhZ2Ugc2l6ZSBib3VuZGFyeSAqLwogCQkJCS8qIERhdGEgKi8KICAgLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7Ci0JKiguZGF0YSkKKwlEQVRBX0RBVEEKIAlDT05TVFJVQ1RPUlMKIAl9IDpkYXRhCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC92c3lzY2FsbC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3ZzeXNjYWxsLmMKaW5kZXggZGMzMmNlZi4uNTc2NjBkNSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3ZzeXNjYWxsLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3ZzeXNjYWxsLmMKQEAgLTE3NSwxMCArMTc1LDEzIEBACiAgKiB1bmxpa2VseSAqLwogdGltZV90IF9fdnN5c2NhbGwoMSkgdnRpbWUodGltZV90ICp0KQogeworCXN0cnVjdCB0aW1ldmFsIHR2OwogCXRpbWVfdCByZXN1bHQ7CiAJaWYgKHVubGlrZWx5KCFfX3ZzeXNjYWxsX2d0b2RfZGF0YS5zeXNjdGxfZW5hYmxlZCkpCiAJCXJldHVybiB0aW1lX3N5c2NhbGwodCk7Ci0JcmVzdWx0ID0gX192c3lzY2FsbF9ndG9kX2RhdGEud2FsbF90aW1lX3NlYzsKKworCXZnZXR0aW1lb2ZkYXkoJnR2LCAwKTsKKwlyZXN1bHQgPSB0di50dl9zZWM7CiAJaWYgKHQpCiAJCSp0ID0gcmVzdWx0OwogCXJldHVybiByZXN1bHQ7CkBAIC0zMjcsNyArMzMwLDcgQEAKIGNwdV92c3lzY2FsbF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCiB7CiAJbG9uZyBjcHUgPSAobG9uZylhcmc7Ci0JaWYgKGFjdGlvbiA9PSBDUFVfT05MSU5FKQorCWlmIChhY3Rpb24gPT0gQ1BVX09OTElORSB8fCBhY3Rpb24gPT0gQ1BVX09OTElORV9GUk9aRU4pCiAJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGNwdV92c3lzY2FsbF9pbml0LCBOVUxMLCAwLCAxKTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9mYXVsdC5jIGIvYXJjaC94ODZfNjQvbW0vZmF1bHQuYwppbmRleCBkZTk5ZGJhLi5iZmI2MmExIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gveDg2XzY0L21tL2ZhdWx0LmMKQEAgLTE1LDIyICsxNSwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4JCS8qIEZvciB1bmJsYW5rX3NjcmVlbigpICovCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KIAogLyogUGFnZSBmYXVsdCBlcnJvciBjb2RlIGJpdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL2luaXQuYyBiL2FyY2gveDg2XzY0L21tL2luaXQuYwppbmRleCBjMDgyMjY4Li4xYWQ1MTExIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9tbS9pbml0LmMKKysrIGIvYXJjaC94ODZfNjQvbW0vaW5pdC5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAlzZXRfcHRlX3BoeXMoYWRkcmVzcywgcGh5cywgcHJvdCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSB0YWJsZV9zdGFydCwgdGFibGVfZW5kOyAKK3Vuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSB0YWJsZV9zdGFydCwgdGFibGVfZW5kOwogCiBzdGF0aWMgX19tZW1pbml0IHZvaWQgKmFsbG9jX2xvd19wYWdlKHVuc2lnbmVkIGxvbmcgKnBoeXMpCiB7IApAQCAtMjA0LDcgKzIwNCw3IEBACiB9IAogCiAvKiBNdXN0IHJ1biBiZWZvcmUgemFwX2xvd19tYXBwaW5ncyAqLwotX19pbml0IHZvaWQgKmVhcmx5X2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCitfX21lbWluaXQgdm9pZCAqZWFybHlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIHZhZGRyOwogCXBtZF90ICpwbWQsICpsYXN0X3BtZDsKQEAgLTIzMyw3ICsyMzMsNyBAQAogfQogCiAvKiBUbyBhdm9pZCB2aXJ0dWFsIGFsaWFzZXMgbGF0ZXIgKi8KLV9faW5pdCB2b2lkIGVhcmx5X2lvdW5tYXAodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQorX19tZW1pbml0IHZvaWQgZWFybHlfaW91bm1hcCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWRkcjsKIAlwbWRfdCAqcG1kOwpAQCAtNzYxLDMgKzc2MSw5IEBACiB7CiAJcmV0dXJuIChhZGRyID49IFZTWVNDQUxMX1NUQVJUKSAmJiAoYWRkciA8IFZTWVNDQUxMX0VORCk7CiB9CisKK3ZvaWQgKmFsbG9jX2Jvb3RtZW1faGlnaF9ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19hbGxvY19ib290bWVtX2NvcmUocGdkYXQtPmJkYXRhLCBzaXplLAorCQkJU01QX0NBQ0hFX0JZVEVTLCAoNFVMKjEwMjQqMTAyNCoxMDI0KSwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGIyNTZjZmIuLjY5ODA3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC03MCw3ICs3MCw3IEBACiAJREVGSU5FKFRBU0tfQUNUSVZFX01NLCBvZmZzZXRvZiAoc3RydWN0IHRhc2tfc3RydWN0LCBhY3RpdmVfbW0pKTsKIAlERUZJTkUoVEFTS19QSUQsIG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHBpZCkpOwogCURFRklORShUQVNLX1RIUkVBRCwgb2Zmc2V0b2YgKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkKSk7Ci0JREVGSU5FKFRBU0tfVEhSRUFEX0lORk8sIG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvKSk7CisJREVGSU5FKFRBU0tfVEhSRUFEX0lORk8sIG9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHN0YWNrKSk7CiAJREVGSU5FKFRBU0tfU1RSVUNUX1NJWkUsIHNpemVvZiAoc3RydWN0IHRhc2tfc3RydWN0KSk7CiAJQkxBTksoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wY2ktZG1hLmMKaW5kZXggY2E3NmYwNy4uZjUzMTlkNyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3BjaS1kbWEuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLWRtYS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFyY2gveHRlbnNhL3BjaS1kbWEuYworICogYXJjaC94dGVuc2Eva2VybmVsL3BjaS1kbWEuYwogICoKICAqIERNQSBjb2hlcmVudCBtZW1vcnkgYWxsb2NhdGlvbi4KICAqCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYwppbmRleCA3OTViZDVhLi5jZTc1OGJhIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOGI2ZDNkMC4uMTQxMDRmZiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYzZkOTg4MC4uNTgxMDc2NyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zaWduYWwuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDRmYmQ2NmEuLjRiN2I0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC04NCw3ICs4NCw4IEBACiAgIHsKICAgICAvKiBUaGUgLmhlYWQudGV4dCBzZWN0aW9uIG11c3QgYmUgdGhlIGZpcnN0IHNlY3Rpb24hICovCiAgICAgKiguaGVhZC50ZXh0KQotICAgICooLmxpdGVyYWwgLnRleHQpCisgICAgKigubGl0ZXJhbCkKKyAgICBURVhUX1RFWFQKICAgICAqKC5zcm9tLnRleHQpCiAgICAgVk1MSU5VWF9TWU1CT0woX19zY2hlZF90ZXh0X3N0YXJ0KSA9IC47CiAgICAgKiguc2NoZWQubGl0ZXJhbCAuc2NoZWQudGV4dCkKQEAgLTE0NCw3ICsxNDUsOCBAQAogICBfZmRhdGEgPSAuOwogICAuZGF0YSA6CiAgIHsKLSAgICAqKC5kYXRhKSBDT05TVFJVQ1RPUlMKKyAgICBEQVRBX0RBVEEKKyAgICBDT05TVFJVQ1RPUlMKICAgICAuID0gQUxJR04oWENIQUxfSUNBQ0hFX0xJTkVTSVpFKTsKICAgICAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQogICB9CmRpZmYgLS1naXQgYS9ibG9jay9hcy1pb3NjaGVkLmMgYi9ibG9jay9hcy1pb3NjaGVkLmMKaW5kZXggZWYxMjYyNy4uMTA5ZTkxYiAxMDA2NDQKLS0tIGEvYmxvY2svYXMtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2FzLWlvc2NoZWQuYwpAQCAtNTY5LDcgKzU2OSw3IEBACiBzdGF0aWMgaW50IGFzX2Nsb3NlX3JlcShzdHJ1Y3QgYXNfZGF0YSAqYWQsIHN0cnVjdCBhc19pb19jb250ZXh0ICphaWMsCiAJCQlzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBkZWxheTsJLyogbWlsbGlzZWNvbmRzICovCisJdW5zaWduZWQgbG9uZyBkZWxheTsJLyogamlmZmllcyAqLwogCXNlY3Rvcl90IGxhc3QgPSBhZC0+bGFzdF9zZWN0b3JbYWQtPmJhdGNoX2RhdGFfZGlyXTsKIAlzZWN0b3JfdCBuZXh0ID0gcnEtPnNlY3RvcjsKIAlzZWN0b3JfdCBkZWx0YTsgLyogYWNjZXB0YWJsZSBjbG9zZSBvZmZzZXQgKGluIHNlY3RvcnMpICovCkBAIC01NzgsMTEgKzU3OCwxMSBAQAogCWlmIChhZC0+YW50aWNfc3RhdHVzID09IEFOVElDX09GRiB8fCAhYWQtPmlvY19maW5pc2hlZCkKIAkJZGVsYXkgPSAwOwogCWVsc2UKLQkJZGVsYXkgPSAoKGppZmZpZXMgLSBhZC0+YW50aWNfc3RhcnQpICogMTAwMCkgLyBIWjsKKwkJZGVsYXkgPSBqaWZmaWVzIC0gYWQtPmFudGljX3N0YXJ0OwogCiAJaWYgKGRlbGF5ID09IDApCiAJCWRlbHRhID0gODE5MjsKLQllbHNlIGlmIChkZWxheSA8PSAyMCAmJiBkZWxheSA8PSBhZC0+YW50aWNfZXhwaXJlKQorCWVsc2UgaWYgKGRlbGF5IDw9ICgyMCAqIEhaIC8gMTAwMCkgJiYgZGVsYXkgPD0gYWQtPmFudGljX2V4cGlyZSkKIAkJZGVsdGEgPSA4MTkyIDw8IGRlbGF5OwogCWVsc2UKIAkJcmV0dXJuIDE7CkBAIC0xMzA2LDcgKzEzMDYsNyBAQAogCXN0cnVjdCBhc19kYXRhICphZCA9IGUtPmVsZXZhdG9yX2RhdGE7CiAKIAlkZWxfdGltZXJfc3luYygmYWQtPmFudGljX3RpbWVyKTsKLQlrYmxvY2tkX2ZsdXNoKCk7CisJa2Jsb2NrZF9mbHVzaF93b3JrKCZhZC0+YW50aWNfd29yayk7CiAKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmFkLT5maWZvX2xpc3RbUkVRX1NZTkNdKSk7CiAJQlVHX09OKCFsaXN0X2VtcHR5KCZhZC0+Zmlmb19saXN0W1JFUV9BU1lOQ10pKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IGI1NjY0NDQuLjg2M2E4YzAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKKysrIGIvYmxvY2svZ2VuaGQuYwpAQCAtMjEzLDYgKzIxMyw1OSBAQAogCXJldHVybiAga29iaiA/IHRvX2Rpc2soa29iaikgOiBOVUxMOwogfQogCisvKgorICogcHJpbnQgYSBmdWxsIGxpc3Qgb2YgYWxsIHBhcnRpdGlvbnMgLSBpbnRlbmRlZCBmb3IgcGxhY2VzIHdoZXJlIHRoZSByb290CisgKiBmaWxlc3lzdGVtIGNhbid0IGJlIG1vdW50ZWQgYW5kIHRodXMgdG8gZ2l2ZSB0aGUgdmljdGltIHNvbWUgaWRlYSBvZiB3aGF0CisgKiB3ZW50IHdyb25nCisgKi8KK3ZvaWQgX19pbml0IHByaW50a19hbGxfcGFydGl0aW9ucyh2b2lkKQoreworCWludCBuOworCXN0cnVjdCBnZW5kaXNrICpzZ3A7CisKKwltdXRleF9sb2NrKCZibG9ja19zdWJzeXNfbG9jayk7CisJLyogRm9yIGVhY2ggYmxvY2sgZGV2aWNlLi4uICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZ3AsICZibG9ja19zdWJzeXMubGlzdCwga29iai5lbnRyeSkgeworCQljaGFyIGJ1ZltCREVWTkFNRV9TSVpFXTsKKwkJLyoKKwkJICogRG9uJ3Qgc2hvdyBlbXB0eSBkZXZpY2VzIG9yIHRoaW5ncyB0aGF0IGhhdmUgYmVlbiBzdXJwcmVzc2VkCisJCSAqLworCQlpZiAoZ2V0X2NhcGFjaXR5KHNncCkgPT0gMCB8fAorCQkgICAgKHNncC0+ZmxhZ3MgJiBHRU5IRF9GTF9TVVBQUkVTU19QQVJUSVRJT05fSU5GTykpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBOb3RlLCB1bmxpa2UgL3Byb2MvcGFydGl0aW9ucywgSSBhbSBzaG93aW5nIHRoZSBudW1iZXJzIGluCisJCSAqIGhleCAtIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgcm9vdD0gb3B0aW9uIHRha2VzLgorCQkgKi8KKwkJcHJpbnRrKCIlMDJ4JTAyeCAlMTBsbHUgJXMiLAorCQkJc2dwLT5tYWpvciwgc2dwLT5maXJzdF9taW5vciwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZ2V0X2NhcGFjaXR5KHNncCkgPj4gMSwKKwkJCWRpc2tfbmFtZShzZ3AsIDAsIGJ1ZikpOworCQlpZiAoc2dwLT5kcml2ZXJmc19kZXYgIT0gTlVMTCAmJgorCQkgICAgc2dwLT5kcml2ZXJmc19kZXYtPmRyaXZlciAhPSBOVUxMKQorCQkJcHJpbnRrKCIgZHJpdmVyOiAlc1xuIiwKKwkJCQlzZ3AtPmRyaXZlcmZzX2Rldi0+ZHJpdmVyLT5uYW1lKTsKKwkJZWxzZQorCQkJcHJpbnRrKCIgKGRyaXZlcj8pXG4iKTsKKworCQkvKiBub3cgc2hvdyB0aGUgcGFydGl0aW9ucyAqLworCQlmb3IgKG4gPSAwOyBuIDwgc2dwLT5taW5vcnMgLSAxOyArK24pIHsKKwkJCWlmIChzZ3AtPnBhcnRbbl0gPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzZ3AtPnBhcnRbbl0tPm5yX3NlY3RzID09IDApCisJCQkJY29udGludWU7CisJCQlwcmludGsoIiAgJTAyeCUwMnggJTEwbGx1ICVzXG4iLAorCQkJCXNncC0+bWFqb3IsIG4gKyAxICsgc2dwLT5maXJzdF9taW5vciwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXNncC0+cGFydFtuXS0+bnJfc2VjdHMgPj4gMSwKKwkJCQlkaXNrX25hbWUoc2dwLCBuICsgMSwgYnVmKSk7CisJCX0gLyogcGFydGl0aW9uIHN1Ymxvb3AgKi8KKwl9IC8qIEJsb2NrIGRldmljZSBsb29wICovCisKKwltdXRleF91bmxvY2soJmJsb2NrX3N1YnN5c19sb2NrKTsKKwlyZXR1cm47Cit9CisKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogLyogaXRlcmF0b3IgKi8KIHN0YXRpYyB2b2lkICpwYXJ0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcGFydCwgbG9mZl90ICpwb3MpCkBAIC0zNzAsNyArNDIzLDEwIEBACiB7CiAJcmV0dXJuIHNwcmludGYocGFnZSwgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpZ2V0X2NhcGFjaXR5KGRpc2spKTsKIH0KLQorc3RhdGljIHNzaXplX3QgZGlza19jYXBhYmlsaXR5X3JlYWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNoYXIgKnBhZ2UpCit7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiV4XG4iLCBkaXNrLT5mbGFncyk7Cit9CiBzdGF0aWMgc3NpemVfdCBkaXNrX3N0YXRzX3JlYWQoc3RydWN0IGdlbmRpc2sgKiBkaXNrLCBjaGFyICpwYWdlKQogewogCXByZWVtcHRfZGlzYWJsZSgpOwpAQCAtNDEzLDYgKzQ2OSwxMCBAQAogCS5hdHRyID0gey5uYW1lID0gInNpemUiLCAubW9kZSA9IFNfSVJVR08gfSwKIAkuc2hvdwk9IGRpc2tfc2l6ZV9yZWFkCiB9Oworc3RhdGljIHN0cnVjdCBkaXNrX2F0dHJpYnV0ZSBkaXNrX2F0dHJfY2FwYWJpbGl0eSA9IHsKKwkuYXR0ciA9IHsubmFtZSA9ICJjYXBhYmlsaXR5IiwgLm1vZGUgPSBTX0lSVUdPIH0sCisJLnNob3cJPSBkaXNrX2NhcGFiaWxpdHlfcmVhZAorfTsKIHN0YXRpYyBzdHJ1Y3QgZGlza19hdHRyaWJ1dGUgZGlza19hdHRyX3N0YXQgPSB7CiAJLmF0dHIgPSB7Lm5hbWUgPSAic3RhdCIsIC5tb2RlID0gU19JUlVHTyB9LAogCS5zaG93CT0gZGlza19zdGF0c19yZWFkCkBAIC00NTMsNiArNTEzLDcgQEAKIAkmZGlza19hdHRyX3JlbW92YWJsZS5hdHRyLAogCSZkaXNrX2F0dHJfc2l6ZS5hdHRyLAogCSZkaXNrX2F0dHJfc3RhdC5hdHRyLAorCSZkaXNrX2F0dHJfY2FwYWJpbGl0eS5hdHRyLAogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogCSZkaXNrX2F0dHJfZmFpbC5hdHRyLAogI2VuZGlmCkBAIC02MzUsNiArNjk2LDI3IEBACiAJLnNob3cJPSBkaXNrc3RhdHNfc2hvdwogfTsKIAorc3RhdGljIHZvaWQgbWVkaWFfY2hhbmdlX25vdGlmeV90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBnZW5kaXNrICpnZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ2VuZGlzaywgYXN5bmNfbm90aWZ5KTsKKwljaGFyIGV2ZW50W10gPSAiTUVESUFfQ0hBTkdFPTEiOworCWNoYXIgKmVudnBbXSA9IHsgZXZlbnQsIE5VTEwgfTsKKworCS8qCisJICogc2V0IGVudmlyb21lbnQgdmFycyB0byBpbmRpY2F0ZSB3aGljaCBldmVudCB0aGlzIGlzIGZvcgorCSAqIHNvIHRoYXQgdXNlciBzcGFjZSB3aWxsIGtub3cgdG8gZ28gY2hlY2sgdGhlIG1lZGlhIHN0YXR1cy4KKwkgKi8KKwlrb2JqZWN0X3VldmVudF9lbnYoJmdkLT5rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7CisJcHV0X2RldmljZShnZC0+ZHJpdmVyZnNfZGV2KTsKK30KKwordm9pZCBnZW5oZF9tZWRpYV9jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCWdldF9kZXZpY2UoZGlzay0+ZHJpdmVyZnNfZGV2KTsKKwlzY2hlZHVsZV93b3JrKCZkaXNrLT5hc3luY19ub3RpZnkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ2VuaGRfbWVkaWFfY2hhbmdlX25vdGlmeSk7CisKIHN0cnVjdCBnZW5kaXNrICphbGxvY19kaXNrKGludCBtaW5vcnMpCiB7CiAJcmV0dXJuIGFsbG9jX2Rpc2tfbm9kZShtaW5vcnMsIC0xKTsKQEAgLTY2NCw2ICs3NDYsOCBAQAogCQlrb2JqX3NldF9rc2V0X3MoZGlzayxibG9ja19zdWJzeXMpOwogCQlrb2JqZWN0X2luaXQoJmRpc2stPmtvYmopOwogCQlyYW5kX2luaXRpYWxpemVfZGlzayhkaXNrKTsKKwkJSU5JVF9XT1JLKCZkaXNrLT5hc3luY19ub3RpZnksCisJCQltZWRpYV9jaGFuZ2Vfbm90aWZ5X3RocmVhZCk7CiAJfQogCXJldHVybiBkaXNrOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svbGxfcndfYmxrLmMgYi9ibG9jay9sbF9yd19ibGsuYwppbmRleCA1ODczODYxLi42YjUxNzNhIDEwMDY0NAotLS0gYS9ibG9jay9sbF9yd19ibGsuYworKysgYi9ibG9jay9sbF9yd19ibGsuYwpAQCAtMTcwNCw3ICsxNzA0LDcgQEAKICAqICAgICBvbiBhIHF1ZXVlLCBzdWNoIGFzIGNhbGxpbmcgdGhlIHVucGx1ZyBmdW5jdGlvbiBhZnRlciBhIHRpbWVvdXQuCiAgKiAgICAgQSBibG9jayBkZXZpY2UgbWF5IGNhbGwgYmxrX3N5bmNfcXVldWUgdG8gZW5zdXJlIHRoYXQgYW55CiAgKiAgICAgc3VjaCBhY3Rpdml0eSBpcyBjYW5jZWxsZWQsIHRodXMgYWxsb3dpbmcgaXQgdG8gcmVsZWFzZSByZXNvdXJjZXMKLSAqICAgICB0aGUgdGhlIGNhbGxiYWNrcyBtaWdodCB1c2UuIFRoZSBjYWxsZXIgbXVzdCBhbHJlYWR5IGhhdmUgbWFkZSBzdXJlCisgKiAgICAgdGhhdCB0aGUgY2FsbGJhY2tzIG1pZ2h0IHVzZS4gVGhlIGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBtYWRlIHN1cmUKICAqICAgICB0aGF0IGl0cyAtPm1ha2VfcmVxdWVzdF9mbiB3aWxsIG5vdCByZS1hZGQgcGx1Z2dpbmcgcHJpb3IgdG8gY2FsbGluZwogICogICAgIHRoaXMgZnVuY3Rpb24uCiAgKgpAQCAtMTcxMiw3ICsxNzEyLDYgQEAKIHZvaWQgYmxrX3N5bmNfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJZGVsX3RpbWVyX3N5bmMoJnEtPnVucGx1Z190aW1lcik7Ci0Ja2Jsb2NrZF9mbHVzaCgpOwogfQogRVhQT1JUX1NZTUJPTChibGtfc3luY19xdWV1ZSk7CiAKQEAgLTI1NTgsNiArMjU1Nyw3IEBACiAJCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXKTsKIAogCWJsa19ycV9iaW9fcHJlcChxLCBycSwgYmlvKTsKKwlibGtfcXVldWVfYm91bmNlKHEsICZycS0+YmlvKTsKIAlycS0+YnVmZmVyID0gcnEtPmRhdGEgPSBOVUxMOwogCXJldHVybiAwOwogfQpAQCAtMzExNiw3ICszMTE2LDcgQEAKICAqIGJpX3NlY3RvciBmb3IgcmVtYXBzIGFzIGl0IHNlZXMgZml0LiAgU28gdGhlIHZhbHVlcyBvZiB0aGVzZSBmaWVsZHMKICAqIHNob3VsZCBOT1QgYmUgZGVwZW5kZWQgb24gYWZ0ZXIgdGhlIGNhbGwgdG8gZ2VuZXJpY19tYWtlX3JlcXVlc3QuCiAgKi8KLXZvaWQgZ2VuZXJpY19tYWtlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKQorc3RhdGljIGlubGluZSB2b2lkIF9fZ2VuZXJpY19tYWtlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKQogewogCXJlcXVlc3RfcXVldWVfdCAqcTsKIAlzZWN0b3JfdCBtYXhzZWN0b3I7CkBAIC0zMjE1LDYgKzMyMTUsNTcgQEAKIAl9IHdoaWxlIChyZXQpOwogfQogCisvKgorICogV2Ugb25seSB3YW50IG9uZSAtPm1ha2VfcmVxdWVzdF9mbiB0byBiZSBhY3RpdmUgYXQgYSB0aW1lLAorICogZWxzZSBzdGFjayB1c2FnZSB3aXRoIHN0YWNrZWQgZGV2aWNlcyBjb3VsZCBiZSBhIHByb2JsZW0uCisgKiBTbyB1c2UgY3VycmVudC0+YmlvX3tsaXN0LHRhaWx9IHRvIGtlZXAgYSBsaXN0IG9mIHJlcXVlc3RzCisgKiBzdWJtaXRlZCBieSBhIG1ha2VfcmVxdWVzdF9mbiBmdW5jdGlvbi4KKyAqIGN1cnJlbnQtPmJpb190YWlsIGlzIGFsc28gdXNlZCBhcyBhIGZsYWcgdG8gc2F5IGlmCisgKiBnZW5lcmljX21ha2VfcmVxdWVzdCBpcyBjdXJyZW50bHkgYWN0aXZlIGluIHRoaXMgdGFzayBvciBub3QuCisgKiBJZiBpdCBpcyBOVUxMLCB0aGVuIG5vIG1ha2VfcmVxdWVzdCBpcyBhY3RpdmUuICBJZiBpdCBpcyBub24tTlVMTCwKKyAqIHRoZW4gYSBtYWtlX3JlcXVlc3QgaXMgYWN0aXZlLCBhbmQgbmV3IHJlcXVlc3RzIHNob3VsZCBiZSBhZGRlZAorICogYXQgdGhlIHRhaWwKKyAqLwordm9pZCBnZW5lcmljX21ha2VfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pCit7CisJaWYgKGN1cnJlbnQtPmJpb190YWlsKSB7CisJCS8qIG1ha2VfcmVxdWVzdCBpcyBhY3RpdmUgKi8KKwkJKihjdXJyZW50LT5iaW9fdGFpbCkgPSBiaW87CisJCWJpby0+YmlfbmV4dCA9IE5VTEw7CisJCWN1cnJlbnQtPmJpb190YWlsID0gJmJpby0+YmlfbmV4dDsKKwkJcmV0dXJuOworCX0KKwkvKiBmb2xsb3dpbmcgbG9vcCBtYXkgYmUgYSBiaXQgbm9uLW9idmlvdXMsIGFuZCBzbyBkZXNlcnZlcyBzb21lCisJICogZXhwbGFuYXRpb24uCisJICogQmVmb3JlIGVudGVyaW5nIHRoZSBsb29wLCBiaW8tPmJpX25leHQgaXMgTlVMTCAoYXMgYWxsIGNhbGxlcnMKKwkgKiBlbnN1cmUgdGhhdCkgc28gd2UgaGF2ZSBhIGxpc3Qgd2l0aCBhIHNpbmdsZSBiaW8uCisJICogV2UgcHJldGVuZCB0aGF0IHdlIGhhdmUganVzdCB0YWtlbiBpdCBvZmYgYSBsb25nZXIgbGlzdCwgc28KKwkgKiB3ZSBhc3NpZ24gYmlvX2xpc3QgdG8gdGhlIG5leHQgKHdoaWNoIGlzIE5VTEwpIGFuZCBiaW9fdGFpbAorCSAqIHRvICZiaW9fbGlzdCwgdGh1cyBpbml0aWFsaXNpbmcgdGhlIGJpb19saXN0IG9mIG5ldyBiaW9zIHRvIGJlCisJICogYWRkZWQuICBfX2dlbmVyaWNfbWFrZV9yZXF1ZXN0IG1heSBpbmRlZWQgYWRkIHNvbWUgbW9yZSBiaW9zCisJICogdGhyb3VnaCBhIHJlY3Vyc2l2ZSBjYWxsIHRvIGdlbmVyaWNfbWFrZV9yZXF1ZXN0LiAgSWYgaXQKKwkgKiBkaWQsIHdlIGZpbmQgYSBub24tTlVMTCB2YWx1ZSBpbiBiaW9fbGlzdCBhbmQgcmUtZW50ZXIgdGhlIGxvb3AKKwkgKiBmcm9tIHRoZSB0b3AuICBJbiB0aGlzIGNhc2Ugd2UgcmVhbGx5IGRpZCBqdXN0IHRha2UgdGhlIGJpbworCSAqIG9mIHRoZSB0b3Agb2YgdGhlIGxpc3QgKG5vIHByZXRlbmRpbmcpIGFuZCBzbyBmaXh1cCBiaW9fbGlzdCBhbmQKKwkgKiBiaW9fdGFpbCBvciBiaV9uZXh0LCBhbmQgY2FsbCBpbnRvIF9fZ2VuZXJpY19tYWtlX3JlcXVlc3QgYWdhaW4uCisJICoKKwkgKiBUaGUgbG9vcCB3YXMgc3RydWN0dXJlZCBsaWtlIHRoaXMgdG8gbWFrZSBvbmx5IG9uZSBjYWxsIHRvCisJICogX19nZW5lcmljX21ha2VfcmVxdWVzdCAod2hpY2ggaXMgaW1wb3J0YW50IGFzIGl0IGlzIGxhcmdlIGFuZAorCSAqIGlubGluZWQpIGFuZCB0byBrZWVwIHRoZSBzdHJ1Y3R1cmUgc2ltcGxlLgorCSAqLworCUJVR19PTihiaW8tPmJpX25leHQpOworCWRvIHsKKwkJY3VycmVudC0+YmlvX2xpc3QgPSBiaW8tPmJpX25leHQ7CisJCWlmIChiaW8tPmJpX25leHQgPT0gTlVMTCkKKwkJCWN1cnJlbnQtPmJpb190YWlsID0gJmN1cnJlbnQtPmJpb19saXN0OworCQllbHNlCisJCQliaW8tPmJpX25leHQgPSBOVUxMOworCQlfX2dlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CisJCWJpbyA9IGN1cnJlbnQtPmJpb19saXN0OworCX0gd2hpbGUgKGJpbyk7CisJY3VycmVudC0+YmlvX3RhaWwgPSBOVUxMOyAvKiBkZWFjdGl2YXRlICovCit9CisKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19tYWtlX3JlcXVlc3QpOwogCiAvKioKQEAgLTM1MDcsNyArMzU1OCw3IEBACiAJICogSWYgYSBDUFUgZ29lcyBhd2F5LCBzcGxpY2UgaXRzIGVudHJpZXMgdG8gdGhlIGN1cnJlbnQgQ1BVCiAJICogYW5kIHRyaWdnZXIgYSBydW4gb2YgdGhlIHNvZnRpcnEKIAkgKi8KLQlpZiAoYWN0aW9uID09IENQVV9ERUFEKSB7CisJaWYgKGFjdGlvbiA9PSBDUFVfREVBRCB8fCBhY3Rpb24gPT0gQ1BVX0RFQURfRlJPWkVOKSB7CiAJCWludCBjcHUgPSAodW5zaWduZWQgbG9uZykgaGNwdTsKIAogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwpAQCAtMzYzMSwxMSArMzY4MiwxMSBAQAogCiBFWFBPUlRfU1lNQk9MKGtibG9ja2Rfc2NoZWR1bGVfd29yayk7CiAKLXZvaWQga2Jsb2NrZF9mbHVzaCh2b2lkKQordm9pZCBrYmxvY2tkX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWZsdXNoX3dvcmtxdWV1ZShrYmxvY2tkX3dvcmtxdWV1ZSk7CisJY2FuY2VsX3dvcmtfc3luYyh3b3JrKTsKIH0KLUVYUE9SVF9TWU1CT0woa2Jsb2NrZF9mbHVzaCk7CitFWFBPUlRfU1lNQk9MKGtibG9ja2RfZmx1c2hfd29yayk7CiAKIGludCBfX2luaXQgYmxrX2Rldl9pbml0KHZvaWQpCiB7CkBAIC0zNzUxLDcgKzM4MDIsNiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woY3VycmVudF9pb19jb250ZXh0KTsKIAogLyoKICAqIElmIHRoZSBjdXJyZW50IHRhc2sgaGFzIG5vIElPIGNvbnRleHQgdGhlbiBjcmVhdGUgb25lIGFuZCBpbml0aWFsaXNlIGl0LgpkaWZmIC0tZ2l0IGEvY3J5cHRvL0tjb25maWcgYi9jcnlwdG8vS2NvbmZpZwppbmRleCA2MjBlMTRjLi40Y2EwYWIzIDEwMDY0NAotLS0gYS9jcnlwdG8vS2NvbmZpZworKysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtMjcxLDcgKzI3MSw3IEBACiAKIAkgIEtleXMgYXJlIGFsbG93ZWQgdG8gYmUgZnJvbSAwIHRvIDI1NiBiaXRzIGluIGxlbmd0aCwgaW4gc3RlcHMKIAkgIG9mIDggYml0cy4gIEFsc28gaW5jbHVkZXMgdGhlICdUbmVwcmVzJyBhbGdvcml0aG0sIGEgcmV2ZXJzZWQKLQkgIHZhcmlhbnQgb2YgU2VycGVudCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBrZXJuZWxpIGNvZGUuCisJICB2YXJpYW50IG9mIFNlcnBlbnQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQga2VybmVsaS5vcmcgY29kZS4KIAogCSAgU2VlIGFsc286CiAJICA8aHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfnJqYTE0L3NlcnBlbnQuaHRtbD4KZGlmZiAtLWdpdCBhL2NyeXB0by9hcGkuYyBiL2NyeXB0by9hcGkuYwppbmRleCA1NWFmOGJiLi4zMzczNGZkIDEwMDY0NAotLS0gYS9jcnlwdG8vYXBpLmMKKysrIGIvY3J5cHRvL2FwaS5jCkBAIC00OCw4ICs0OCwxMCBAQAogCiB2b2lkIGNyeXB0b19tb2RfcHV0KHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCiB7CisJc3RydWN0IG1vZHVsZSAqbW9kdWxlID0gYWxnLT5jcmFfbW9kdWxlOworCiAJY3J5cHRvX2FsZ19wdXQoYWxnKTsKLQltb2R1bGVfcHV0KGFsZy0+Y3JhX21vZHVsZSk7CisJbW9kdWxlX3B1dChtb2R1bGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX21vZF9wdXQpOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRkLmMgYi9jcnlwdG8vY3J5cHRkLmMKaW5kZXggM2ZmNGUxZi4uYWM2ZGNlMiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyeXB0ZC5jCisrKyBiL2NyeXB0by9jcnlwdGQuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJbXV0ZXhfaW5pdCgmc3RhdGUtPm11dGV4KTsKIAljcnlwdG9faW5pdF9xdWV1ZSgmc3RhdGUtPnF1ZXVlLCBDUllQVERfTUFYX1FMRU4pOwogCi0Jc3RhdGUtPnRhc2sgPSBrdGhyZWFkX2NyZWF0ZShmbiwgc3RhdGUsIG5hbWUpOworCXN0YXRlLT50YXNrID0ga3RocmVhZF9ydW4oZm4sIHN0YXRlLCBuYW1lKTsKIAlpZiAoSVNfRVJSKHN0YXRlLT50YXNrKSkKIAkJcmV0dXJuIFBUUl9FUlIoc3RhdGUtPnRhc2spOwogCkBAIC0zMTYsNiArMzE2LDggQEAKIAlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSA9IGRhdGE7CiAJaW50IHN0b3A7CiAKKwljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKKwogCWRvIHsKIAkJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsICpiYWNrbG9nOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRvbWdyLmMgYi9jcnlwdG8vY3J5cHRvbWdyLmMKaW5kZXggNjk1OGVhOC4uZTVmYjdjYyAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyeXB0b21nci5jCisrKyBiL2NyeXB0by9jcnlwdG9tZ3IuYwpAQCAtMjQsOCArMjQsNiBAQAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0cnVjdCBjcnlwdG9tZ3JfcGFyYW0gewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOwotCiAJc3RydWN0IHJ0YXR0ciAqdGJbQ1JZUFRPQV9NQVhdOwogCiAJc3RydWN0IHsKQEAgLTgxLDYgKzc5LDcgQEAKIAogc3RhdGljIGludCBjcnlwdG9tZ3Jfc2NoZWR1bGVfcHJvYmUoc3RydWN0IGNyeXB0b19sYXJ2YWwgKmxhcnZhbCkKIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKIAlzdHJ1Y3QgY3J5cHRvbWdyX3BhcmFtICpwYXJhbTsKIAljb25zdCBjaGFyICpuYW1lID0gbGFydmFsLT5hbGcuY3JhX25hbWU7CiAJY29uc3QgY2hhciAqcDsKQEAgLTEzMCw4ICsxMjksOCBAQAogCiAJbWVtY3B5KHBhcmFtLT5sYXJ2YWwubmFtZSwgbGFydmFsLT5hbGcuY3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUpOwogCi0JcGFyYW0tPnRocmVhZCA9IGt0aHJlYWRfcnVuKGNyeXB0b21ncl9wcm9iZSwgcGFyYW0sICJjcnlwdG9tZ3IiKTsKLQlpZiAoSVNfRVJSKHBhcmFtLT50aHJlYWQpKQorCXRocmVhZCA9IGt0aHJlYWRfcnVuKGNyeXB0b21ncl9wcm9iZSwgcGFyYW0sICJjcnlwdG9tZ3IiKTsKKwlpZiAoSVNfRVJSKHRocmVhZCkpCiAJCWdvdG8gZXJyX2ZyZWVfcGFyYW07CiAKIAlyZXR1cm4gTk9USUZZX1NUT1A7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGNyeXB0LmMgYi9jcnlwdG8vdGNyeXB0LmMKaW5kZXggZjBhZWQwMS4uMTFmOTM1OSAxMDA2NDQKLS0tIGEvY3J5cHRvL3RjcnlwdC5jCisrKyBiL2NyeXB0by90Y3J5cHQuYwpAQCAtNjkxLDcgKzY5MSw3IEBACiAJCQlpZiAocmV0KQogCQkJCWdvdG8gb3V0OwogCQl9Ci0JCWNyeXB0b19oYXNoX2ZpbmFsKGRlc2MsIG91dCk7CisJCXJldCA9IGNyeXB0b19oYXNoX2ZpbmFsKGRlc2MsIG91dCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCAyNmNhOTAzLi5hZGFkMmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTM2LDYgKzM2LDcgQEAKIG9iai0kKENPTkZJR19TQ1NJKQkJKz0gc2NzaS8KIG9iai0kKENPTkZJR19BVEEpCQkrPSBhdGEvCiBvYmotJChDT05GSUdfRlVTSU9OKQkJKz0gbWVzc2FnZS8KK29iai0kKENPTkZJR19GSVJFV0lSRSkJCSs9IGZpcmV3aXJlLwogb2JqLSQoQ09ORklHX0lFRUUxMzk0KQkJKz0gaWVlZTEzOTQvCiBvYmoteQkJCQkrPSBjZHJvbS8KIG9iai15CQkJCSs9IGF1eGRpc3BsYXkvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXN1c19hY3BpLmMgYi9kcml2ZXJzL2FjcGkvYXN1c19hY3BpLmMKaW5kZXggYjc3MGRlYS4uNmQ3ZDQxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYwpAQCAtMTM1Nyw3ICsxMzU3LDcgQEAKICAgICAgICAgLnVwZGF0ZV9zdGF0dXMgID0gc2V0X2JyaWdodG5lc3Nfc3RhdHVzLAogfTsKIAotc3RhdGljIHZvaWQgX19leGl0IGFzdXNfYWNwaV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBhc3VzX2FjcGlfZXhpdCh2b2lkKQogewogCWlmIChhc3VzX2JhY2tsaWdodF9kZXZpY2UpCiAJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3Rlcihhc3VzX2JhY2tsaWdodF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNtZXRob2QuYyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzbWV0aG9kLmMKaW5kZXggMTY4M2U1Yy4uMWNiZTYxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNtZXRob2QuYworKysgYi9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc21ldGhvZC5jCkBAIC0yMzEsOCArMjMxLDEwIEBACiAJCSAqIE9idGFpbiB0aGUgbWV0aG9kIG11dGV4IGlmIG5lY2Vzc2FyeS4gRG8gbm90IGFjcXVpcmUgbXV0ZXggZm9yIGEKIAkJICogcmVjdXJzaXZlIGNhbGwuCiAJCSAqLwotCQlpZiAoYWNwaV9vc19nZXRfdGhyZWFkX2lkKCkgIT0KLQkJICAgIG9ial9kZXNjLT5tZXRob2QubXV0ZXgtPm11dGV4Lm93bmVyX3RocmVhZF9pZCkgeworCQlpZiAoIXdhbGtfc3RhdGUgfHwKKwkJICAgICFvYmpfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC5vd25lcl90aHJlYWQgfHwKKwkJICAgICh3YWxrX3N0YXRlLT50aHJlYWQgIT0KKwkJICAgICBvYmpfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC5vd25lcl90aHJlYWQpKSB7CiAJCQkvKgogCQkJICogQWNxdWlyZSB0aGUgbWV0aG9kIG11dGV4LiBUaGlzIHJlbGVhc2VzIHRoZSBpbnRlcnByZXRlciBpZiB3ZQogCQkJICogYmxvY2sgKGFuZCByZWFjcXVpcmVzIGl0IGJlZm9yZSBpdCByZXR1cm5zKQpAQCAtMjQ2LDE0ICsyNDgsMTQgQEAKIAkJCX0KIAogCQkJLyogVXBkYXRlIHRoZSBtdXRleCBhbmQgd2FsayBpbmZvIGFuZCBzYXZlIHRoZSBvcmlnaW5hbCBzeW5jX2xldmVsICovCi0JCQlvYmpfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC5vd25lcl90aHJlYWRfaWQgPQotCQkJCWFjcGlfb3NfZ2V0X3RocmVhZF9pZCgpOwogCiAJCQlpZiAod2Fsa19zdGF0ZSkgewogCQkJCW9ial9kZXNjLT5tZXRob2QubXV0ZXgtPm11dGV4LgogCQkJCSAgICBvcmlnaW5hbF9zeW5jX2xldmVsID0KIAkJCQkgICAgd2Fsa19zdGF0ZS0+dGhyZWFkLT5jdXJyZW50X3N5bmNfbGV2ZWw7CiAKKwkJCQlvYmpfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC5vd25lcl90aHJlYWQgPQorCQkJCSAgICB3YWxrX3N0YXRlLT50aHJlYWQ7CiAJCQkJd2Fsa19zdGF0ZS0+dGhyZWFkLT5jdXJyZW50X3N5bmNfbGV2ZWwgPQogCQkJCSAgICBvYmpfZGVzYy0+bWV0aG9kLnN5bmNfbGV2ZWw7CiAJCQl9IGVsc2UgewpAQCAtNTY3LDcgKzU2OSw3IEBACiAKIAkJCWFjcGlfb3NfcmVsZWFzZV9tdXRleChtZXRob2RfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC4KIAkJCQkJICAgICAgb3NfbXV0ZXgpOwotCQkJbWV0aG9kX2Rlc2MtPm1ldGhvZC5tdXRleC0+bXV0ZXgub3duZXJfdGhyZWFkX2lkID0gQUNQSV9NVVRFWF9OT1RfQUNRVUlSRUQ7CisJCQltZXRob2RfZGVzYy0+bWV0aG9kLm11dGV4LT5tdXRleC5vd25lcl90aHJlYWQgPSBOVUxMOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc29wY29kZS5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHNvcGNvZGUuYwppbmRleCA2YzYxMDRhLi5mYzlkYTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc29wY29kZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzb3Bjb2RlLmMKQEAgLTg2Niw4ICs4NjYsNyBAQAogCQkgICAgKChvcC0+Y29tbW9uLnBhcmVudC0+Y29tbW9uLmFtbF9vcGNvZGUgIT0gQU1MX1BBQ0tBR0VfT1ApICYmCiAJCSAgICAgKG9wLT5jb21tb24ucGFyZW50LT5jb21tb24uYW1sX29wY29kZSAhPQogCQkgICAgICBBTUxfVkFSX1BBQ0tBR0VfT1ApCi0JCSAgICAgJiYgKG9wLT5jb21tb24ucGFyZW50LT5jb21tb24uYW1sX29wY29kZSAhPQotCQkJIEFNTF9OQU1FX09QKSkpIHsKKwkJICAgICAmJiAob3AtPmNvbW1vbi5wYXJlbnQtPmNvbW1vbi5hbWxfb3Bjb2RlICE9IEFNTF9OQU1FX09QKSkpIHsKIAkJCXdhbGtfc3RhdGUtPnJlc3VsdF9vYmogPSBvYmpfZGVzYzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2RzdXRpbHMuYwppbmRleCBlNDA3M2UwLi43MTUwM2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN1dGlscy5jCkBAIC01NTYsMTAgKzU1Niw5IEBACiAJCQkJCSAqIGluZGljYXRlIHRoaXMgdG8gdGhlIGludGVycHJldGVyLCBzZXQgdGhlCiAJCQkJCSAqIG9iamVjdCB0byB0aGUgcm9vdAogCQkJCQkgKi8KLQkJCQkJb2JqX2Rlc2MgPQotCQkJCQkgICAgQUNQSV9DQVNUX1BUUih1bmlvbgotCQkJCQkJCSAgYWNwaV9vcGVyYW5kX29iamVjdCwKLQkJCQkJCQkgIGFjcGlfZ2JsX3Jvb3Rfbm9kZSk7CisJCQkJCW9ial9kZXNjID0gQUNQSV9DQVNUX1BUUih1bmlvbgorCQkJCQkJCQkgYWNwaV9vcGVyYW5kX29iamVjdCwKKwkJCQkJCQkJIGFjcGlfZ2JsX3Jvb3Rfbm9kZSk7CiAJCQkJCXN0YXR1cyA9IEFFX09LOwogCQkJCX0gZWxzZSB7CiAJCQkJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dzdGF0ZS5jIGIvZHJpdmVycy9hY3BpL2Rpc3BhdGNoZXIvZHN3c3RhdGUuYwppbmRleCAxNmM4ZTM4Li41YWZjZGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGlzcGF0Y2hlci9kc3dzdGF0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9kaXNwYXRjaGVyL2Rzd3N0YXRlLmMKQEAgLTYzMCwxMiArNjMwLDkgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICphY3BpX2RzX2NyZWF0ZV93YWxrX3N0YXRlKGFjcGlfb3duZXJfaWQgb3duZXJfaWQsCi0JCQkJCQkgIHVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0Ci0JCQkJCQkgICpvcmlnaW4sCi0JCQkJCQkgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QKLQkJCQkJCSAgKm1ldGhvZF9kZXNjLAotCQkJCQkJICBzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUKK3N0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKmFjcGlfZHNfY3JlYXRlX3dhbGtfc3RhdGUoYWNwaV9vd25lcl9pZCBvd25lcl9pZCwgdW5pb24gYWNwaV9wYXJzZV9vYmplY3QKKwkJCQkJCSAgKm9yaWdpbiwgdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdAorCQkJCQkJICAqbWV0aG9kX2Rlc2MsIHN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZQogCQkJCQkJICAqdGhyZWFkKQogewogCXN0cnVjdCBhY3BpX3dhbGtfc3RhdGUgKndhbGtfc3RhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZWMuYyBiL2RyaXZlcnMvYWNwaS9lYy5jCmluZGV4IGUwOGNmOTguLjgyZjQ5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9lYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9lYy5jCkBAIC0xNDcsOSArMTQ3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9lY193YWl0KHN0cnVjdCBhY3BpX2VjICplYywgZW51bSBlY19ldmVudCBldmVudCwgdW5zaWduZWQgY291bnQpCitzdGF0aWMgaW50IGFjcGlfZWNfd2FpdChzdHJ1Y3QgYWNwaV9lYyAqZWMsIGVudW0gZWNfZXZlbnQgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb3VudCwgaW50IGZvcmNlX3BvbGwpCiB7Ci0JaWYgKGFjcGlfZWNfbW9kZSA9PSBFQ19QT0xMKSB7CisJaWYgKHVubGlrZWx5KGZvcmNlX3BvbGwpIHx8IGFjcGlfZWNfbW9kZSA9PSBFQ19QT0xMKSB7CiAJCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBQ1BJX0VDX0RFTEFZKTsKIAkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSkgewogCQkJaWYgKGFjcGlfZWNfY2hlY2tfc3RhdHVzKGVjLCBldmVudCwgMCkpCkBAIC0xNzMsMTQgKzE3NCwxNSBAQAogCiBzdGF0aWMgaW50IGFjcGlfZWNfdHJhbnNhY3Rpb25fdW5sb2NrZWQoc3RydWN0IGFjcGlfZWMgKmVjLCB1OCBjb21tYW5kLAogCQkJCQljb25zdCB1OCAqIHdkYXRhLCB1bnNpZ25lZCB3ZGF0YV9sZW4sCi0JCQkJCXU4ICogcmRhdGEsIHVuc2lnbmVkIHJkYXRhX2xlbikKKwkJCQkJdTggKiByZGF0YSwgdW5zaWduZWQgcmRhdGFfbGVuLAorCQkJCQlpbnQgZm9yY2VfcG9sbCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAl1bnNpZ25lZCBjb3VudCA9IGF0b21pY19yZWFkKCZlYy0+ZXZlbnRfY291bnQpOwogCWFjcGlfZWNfd3JpdGVfY21kKGVjLCBjb21tYW5kKTsKIAogCWZvciAoOyB3ZGF0YV9sZW4gPiAwOyAtLXdkYXRhX2xlbikgewotCQlyZXN1bHQgPSBhY3BpX2VjX3dhaXQoZWMsIEFDUElfRUNfRVZFTlRfSUJGXzAsIGNvdW50KTsKKwkJcmVzdWx0ID0gYWNwaV9lY193YWl0KGVjLCBBQ1BJX0VDX0VWRU5UX0lCRl8wLCBjb3VudCwgZm9yY2VfcG9sbCk7CiAJCWlmIChyZXN1bHQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKIAkJCSAgICAgICAid3JpdGVfY21kIHRpbWVvdXQsIGNvbW1hbmQgPSAlZFxuIiwgY29tbWFuZCk7CkBAIC0xOTEsNyArMTkzLDcgQEAKIAl9CiAKIAlpZiAoIXJkYXRhX2xlbikgewotCQlyZXN1bHQgPSBhY3BpX2VjX3dhaXQoZWMsIEFDUElfRUNfRVZFTlRfSUJGXzAsIGNvdW50KTsKKwkJcmVzdWx0ID0gYWNwaV9lY193YWl0KGVjLCBBQ1BJX0VDX0VWRU5UX0lCRl8wLCBjb3VudCwgZm9yY2VfcG9sbCk7CiAJCWlmIChyZXN1bHQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKIAkJCSAgICAgICAiZmluaXNoLXdyaXRlIHRpbWVvdXQsIGNvbW1hbmQgPSAlZFxuIiwgY29tbWFuZCk7CkBAIC0yMDIsNyArMjA0LDcgQEAKIAl9CiAKIAlmb3IgKDsgcmRhdGFfbGVuID4gMDsgLS1yZGF0YV9sZW4pIHsKLQkJcmVzdWx0ID0gYWNwaV9lY193YWl0KGVjLCBBQ1BJX0VDX0VWRU5UX09CRl8xLCBjb3VudCk7CisJCXJlc3VsdCA9IGFjcGlfZWNfd2FpdChlYywgQUNQSV9FQ19FVkVOVF9PQkZfMSwgY291bnQsIGZvcmNlX3BvbGwpOwogCQlpZiAocmVzdWx0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJyZWFkIHRpbWVvdXQsIGNvbW1hbmQgPSAlZFxuIiwKIAkJCSAgICAgICBjb21tYW5kKTsKQEAgLTIxNyw3ICsyMTksOCBAQAogCiBzdGF0aWMgaW50IGFjcGlfZWNfdHJhbnNhY3Rpb24oc3RydWN0IGFjcGlfZWMgKmVjLCB1OCBjb21tYW5kLAogCQkJICAgICAgIGNvbnN0IHU4ICogd2RhdGEsIHVuc2lnbmVkIHdkYXRhX2xlbiwKLQkJCSAgICAgICB1OCAqIHJkYXRhLCB1bnNpZ25lZCByZGF0YV9sZW4pCisJCQkgICAgICAgdTggKiByZGF0YSwgdW5zaWduZWQgcmRhdGFfbGVuLAorCQkJICAgICAgIGludCBmb3JjZV9wb2xsKQogewogCWludCBzdGF0dXM7CiAJdTMyIGdsazsKQEAgLTI0MCw3ICsyNDMsNyBAQAogCS8qIE1ha2Ugc3VyZSBHUEUgaXMgZW5hYmxlZCBiZWZvcmUgZG9pbmcgdHJhbnNhY3Rpb24gKi8KIAlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9OT1RfSVNSKTsKIAotCXN0YXR1cyA9IGFjcGlfZWNfd2FpdChlYywgQUNQSV9FQ19FVkVOVF9JQkZfMCwgMCk7CisJc3RhdHVzID0gYWNwaV9lY193YWl0KGVjLCBBQ1BJX0VDX0VWRU5UX0lCRl8wLCAwLCAwKTsKIAlpZiAoc3RhdHVzKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHIFBSRUZJWAogCQkgICAgICAgImlucHV0IGJ1ZmZlciBpcyBub3QgZW1wdHksIGFib3J0aW5nIHRyYW5zYWN0aW9uXG4iKTsKQEAgLTI0OSw3ICsyNTIsOCBAQAogCiAJc3RhdHVzID0gYWNwaV9lY190cmFuc2FjdGlvbl91bmxvY2tlZChlYywgY29tbWFuZCwKIAkJCQkJICAgICAgd2RhdGEsIHdkYXRhX2xlbiwKLQkJCQkJICAgICAgcmRhdGEsIHJkYXRhX2xlbik7CisJCQkJCSAgICAgIHJkYXRhLCByZGF0YV9sZW4sCisJCQkJCSAgICAgIGZvcmNlX3BvbGwpOwogCiAgICAgICBlbmQ6CiAKQEAgLTI2NywxMiArMjcxLDEyIEBACiBpbnQgYWNwaV9lY19idXJzdF9lbmFibGUoc3RydWN0IGFjcGlfZWMgKmVjKQogewogCXU4IGQ7Ci0JcmV0dXJuIGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsIEFDUElfRUNfQlVSU1RfRU5BQkxFLCBOVUxMLCAwLCAmZCwgMSk7CisJcmV0dXJuIGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsIEFDUElfRUNfQlVSU1RfRU5BQkxFLCBOVUxMLCAwLCAmZCwgMSwgMCk7CiB9CiAKIGludCBhY3BpX2VjX2J1cnN0X2Rpc2FibGUoc3RydWN0IGFjcGlfZWMgKmVjKQogewotCXJldHVybiBhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCBBQ1BJX0VDX0JVUlNUX0RJU0FCTEUsIE5VTEwsIDAsIE5VTEwsIDApOworCXJldHVybiBhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCBBQ1BJX0VDX0JVUlNUX0RJU0FCTEUsIE5VTEwsIDAsIE5VTEwsIDAsIDApOwogfQogCiBzdGF0aWMgaW50IGFjcGlfZWNfcmVhZChzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4IGFkZHJlc3MsIHU4ICogZGF0YSkKQEAgLTI4MSw3ICsyODUsNyBAQAogCXU4IGQ7CiAKIAlyZXN1bHQgPSBhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCBBQ1BJX0VDX0NPTU1BTkRfUkVBRCwKLQkJCQkgICAgICZhZGRyZXNzLCAxLCAmZCwgMSk7CisJCQkJICAgICAmYWRkcmVzcywgMSwgJmQsIDEsIDApOwogCSpkYXRhID0gZDsKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMjkwLDcgKzI5NCw3IEBACiB7CiAJdTggd2RhdGFbMl0gPSB7IGFkZHJlc3MsIGRhdGEgfTsKIAlyZXR1cm4gYWNwaV9lY190cmFuc2FjdGlvbihlYywgQUNQSV9FQ19DT01NQU5EX1dSSVRFLAotCQkJCSAgIHdkYXRhLCAyLCBOVUxMLCAwKTsKKwkJCQkgICB3ZGF0YSwgMiwgTlVMTCwgMCwgMCk7CiB9CiAKIC8qCkBAIC0zNDksMTMgKzM1MywxNSBAQAogCiBpbnQgZWNfdHJhbnNhY3Rpb24odTggY29tbWFuZCwKIAkJICAgY29uc3QgdTggKiB3ZGF0YSwgdW5zaWduZWQgd2RhdGFfbGVuLAotCQkgICB1OCAqIHJkYXRhLCB1bnNpZ25lZCByZGF0YV9sZW4pCisJCSAgIHU4ICogcmRhdGEsIHVuc2lnbmVkIHJkYXRhX2xlbiwKKwkJICAgaW50IGZvcmNlX3BvbGwpCiB7CiAJaWYgKCFmaXJzdF9lYykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gYWNwaV9lY190cmFuc2FjdGlvbihmaXJzdF9lYywgY29tbWFuZCwgd2RhdGEsCi0JCQkJICAgd2RhdGFfbGVuLCByZGF0YSwgcmRhdGFfbGVuKTsKKwkJCQkgICB3ZGF0YV9sZW4sIHJkYXRhLCByZGF0YV9sZW4sCisJCQkJICAgZm9yY2VfcG9sbCk7CiB9CiAKIEVYUE9SVF9TWU1CT0woZWNfdHJhbnNhY3Rpb24pOwpAQCAtMzc0LDcgKzM4MCw3IEBACiAJICogYml0IHRvIGJlIGNsZWFyZWQgKGFuZCB0aHVzIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQgc291cmNlKS4KIAkgKi8KIAotCXJlc3VsdCA9IGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsIEFDUElfRUNfQ09NTUFORF9RVUVSWSwgTlVMTCwgMCwgJmQsIDEpOworCXJlc3VsdCA9IGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsIEFDUElfRUNfQ09NTUFORF9RVUVSWSwgTlVMTCwgMCwgJmQsIDEsIDApOwogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CiAKQEAgLTQxMCw2ICs0MTYsNyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXU4IHZhbHVlOwogCXN0cnVjdCBhY3BpX2VjICplYyA9IGRhdGE7CisKIAlhdG9taWNfaW5jKCZlYy0+ZXZlbnRfY291bnQpOwogCiAJaWYgKGFjcGlfZWNfbW9kZSA9PSBFQ19JTlRSKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2Z3BlLmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2Z3BlLmMKaW5kZXggNjM1YmE0NC4uZTIyZjRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZncGUuYwpAQCAtMzQxLDkgKzM0MSw4IEBACiAKIAkvKiBBIE5vbi1OVUxMIGdwZV9kZXZpY2UgbWVhbnMgdGhpcyBpcyBhIEdQRSBCbG9jayBEZXZpY2UgKi8KIAotCW9ial9kZXNjID0KLQkgICAgYWNwaV9uc19nZXRfYXR0YWNoZWRfb2JqZWN0KChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKQotCQkJCQlncGVfZGV2aWNlKTsKKwlvYmpfZGVzYyA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdCgoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKikKKwkJCQkJICAgICAgIGdwZV9kZXZpY2UpOwogCWlmICghb2JqX2Rlc2MgfHwgIW9ial9kZXNjLT5kZXZpY2UuZ3BlX2Jsb2NrKSB7CiAJCXJldHVybiAoTlVMTCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZWJsay5jIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldmdwZWJsay5jCmluZGV4IGFkNWJjNzYuLjkwMmMyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZncGVibGsuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2Z3BlYmxrLmMKQEAgLTEwMzMsOCArMTAzMyw3IEBACiAKIAkJCWlmICgoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spID09CiAJCQkgICAgIEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCkKLQkJCSAgICAmJiAoZ3BlX2V2ZW50X2luZm8tPgotCQkJCWZsYWdzICYgQUNQSV9HUEVfVFlQRV9SVU5USU1FKSkgeworCQkJICAgICYmIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpKSB7CiAJCQkJZ3BlX2VuYWJsZWRfY291bnQrKzsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldm1pc2MuYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZtaXNjLmMKaW5kZXggY2FlNzg2Yy4uMjFjYjc0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldm1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2bWlzYy5jCkBAIC0xOTYsMTUgKzE5NiwxMiBAQAogCQlub3RpZnlfaW5mby0+bm90aWZ5LnZhbHVlID0gKHUxNikgbm90aWZ5X3ZhbHVlOwogCQlub3RpZnlfaW5mby0+bm90aWZ5LmhhbmRsZXJfb2JqID0gaGFuZGxlcl9vYmo7CiAKLQkJYWNwaV9leF9leGl0X2ludGVycHJldGVyKCk7Ci0KLQkJYWNwaV9ldl9ub3RpZnlfZGlzcGF0Y2gobm90aWZ5X2luZm8pOwotCi0JCXN0YXR1cyA9IGFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfb3NfZXhlY3V0ZShPU0xfTk9USUZZX0hBTkRMRVIsIGFjcGlfZXZfbm90aWZ5X2Rpc3BhdGNoLAorCQkJCSAgICBub3RpZnlfaW5mbyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJCQlhY3BpX3V0X2RlbGV0ZV9nZW5lcmljX3N0YXRlKG5vdGlmeV9pbmZvKTsKIAkJfQotCiAJfQogCiAJaWYgKCFoYW5kbGVyX29iaikgewpAQCAtMzIzLDggKzMyMCw5IEBACiAJCWFjcGlfZ2JsX2dsb2JhbF9sb2NrX2FjcXVpcmVkID0gVFJVRTsKIAkJLyogU2VuZCBhIHVuaXQgdG8gdGhlIHNlbWFwaG9yZSAqLwogCi0JCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9vc19zaWduYWxfc2VtYXBob3JlKAotCQkJYWNwaV9nYmxfZ2xvYmFsX2xvY2tfc2VtYXBob3JlLCAxKSkpIHsKKwkJaWYgKEFDUElfRkFJTFVSRQorCQkgICAgKGFjcGlfb3Nfc2lnbmFsX3NlbWFwaG9yZQorCQkgICAgIChhY3BpX2dibF9nbG9iYWxfbG9ja19zZW1hcGhvcmUsIDEpKSkgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCQkgICAgIkNvdWxkIG5vdCBzaWduYWwgR2xvYmFsIExvY2sgc2VtYXBob3JlIikpOwogCQl9CkBAIC00NTAsNyArNDQ4LDkgQEAKIAl9CiAKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJc3RhdHVzID0gYWNwaV9leF9zeXN0ZW1fd2FpdF9tdXRleChhY3BpX2dibF9nbG9iYWxfbG9ja19tdXRleCwgdGltZW91dCk7CisJCXN0YXR1cyA9CisJCSAgICBhY3BpX2V4X3N5c3RlbV93YWl0X211dGV4KGFjcGlfZ2JsX2dsb2JhbF9sb2NrX211dGV4LAorCQkJCQkgICAgICB0aW1lb3V0KTsKIAl9CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnJlZ2lvbi5jIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnJlZ2lvbi5jCmluZGV4IDk2YjBlODQuLmU5OWYwYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZyZWdpb24uYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2cmVnaW9uLmMKQEAgLTI5MSw3ICsyOTEsNiBAQAogCQkJICAgICAgIHUzMiBiaXRfd2lkdGgsIGFjcGlfaW50ZWdlciAqIHZhbHVlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlhY3BpX3N0YXR1cyBzdGF0dXMyOwogCWFjcGlfYWRyX3NwYWNlX2hhbmRsZXIgaGFuZGxlcjsKIAlhY3BpX2Fkcl9zcGFjZV9zZXR1cCByZWdpb25fc2V0dXA7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqaGFuZGxlcl9kZXNjOwpAQCAtMzQ1LDcgKzM0NCw3IEBACiAJCSAqIHNldHVwIHdpbGwgcG90ZW50aWFsbHkgZXhlY3V0ZSBjb250cm9sIG1ldGhvZHMKIAkJICogKGUuZy4sIF9SRUcgbWV0aG9kIGZvciB0aGlzIHJlZ2lvbikKIAkJICovCi0JCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOworCQlhY3BpX2V4X3JlbGlucXVpc2hfaW50ZXJwcmV0ZXIoKTsKIAogCQlzdGF0dXMgPSByZWdpb25fc2V0dXAocmVnaW9uX29iaiwgQUNQSV9SRUdJT05fQUNUSVZBVEUsCiAJCQkJICAgICAgaGFuZGxlcl9kZXNjLT5hZGRyZXNzX3NwYWNlLmNvbnRleHQsCkBAIC0zNTMsMTAgKzM1Miw3IEBACiAKIAkJLyogUmUtZW50ZXIgdGhlIGludGVycHJldGVyICovCiAKLQkJc3RhdHVzMiA9IGFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMyKSkgewotCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1czIpOwotCQl9CisJCWFjcGlfZXhfcmVhY3F1aXJlX2ludGVycHJldGVyKCk7CiAKIAkJLyogQ2hlY2sgZm9yIGZhaWx1cmUgb2YgdGhlIFJlZ2lvbiBTZXR1cCAqLwogCkBAIC00MDksNyArNDA1LDcgQEAKIAkJICogZXhpdCB0aGUgaW50ZXJwcmV0ZXIgYmVjYXVzZSB0aGUgaGFuZGxlciAqbWlnaHQqIGJsb2NrIC0tIHdlIGRvbid0CiAJCSAqIGtub3cgd2hhdCBpdCB3aWxsIGRvLCBzbyB3ZSBjYW4ndCBob2xkIHRoZSBsb2NrIG9uIHRoZSBpbnRlcHJldGVyLgogCQkgKi8KLQkJYWNwaV9leF9leGl0X2ludGVycHJldGVyKCk7CisJCWFjcGlfZXhfcmVsaW5xdWlzaF9pbnRlcnByZXRlcigpOwogCX0KIAogCS8qIENhbGwgdGhlIGhhbmRsZXIgKi8KQEAgLTQzMCwxMCArNDI2LDcgQEAKIAkJICogV2UganVzdCByZXR1cm5lZCBmcm9tIGEgbm9uLWRlZmF1bHQgaGFuZGxlciwgd2UgbXVzdCByZS1lbnRlciB0aGUKIAkJICogaW50ZXJwcmV0ZXIKIAkJICovCi0JCXN0YXR1czIgPSBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKCk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzMikpIHsKLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMyKTsKLQkJfQorCQlhY3BpX2V4X3JlYWNxdWlyZV9pbnRlcnByZXRlcigpOwogCX0KIAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnJnbmluaS5jIGIvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnJnbmluaS5jCmluZGV4IGE0ZmE3ZTYuLjQwMGQ5MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZyZ25pbmkuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2cmduaW5pLmMKQEAgLTIyOCw3ICsyMjgsOCBAQAogCiAJCQkJLyogSW5zdGFsbCBhIGhhbmRsZXIgZm9yIHRoaXMgUENJIHJvb3QgYnJpZGdlICovCiAKLQkJCQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfYWRkcmVzc19zcGFjZV9oYW5kbGVyKChhY3BpX2hhbmRsZSkgcGNpX3Jvb3Rfbm9kZSwgQUNQSV9BRFJfU1BBQ0VfUENJX0NPTkZJRywgQUNQSV9ERUZBVUxUX0hBTkRMRVIsIE5VTEwsIE5VTEwpOworCQkJCXN0YXR1cyA9CisJCQkJICAgIGFjcGlfaW5zdGFsbF9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoKGFjcGlfaGFuZGxlKSBwY2lfcm9vdF9ub2RlLCBBQ1BJX0FEUl9TUEFDRV9QQ0lfQ09ORklHLCBBQ1BJX0RFRkFVTFRfSEFORExFUiwgTlVMTCwgTlVMTCk7CiAJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJCWlmIChzdGF0dXMgPT0gQUVfU0FNRV9IQU5ETEVSKSB7CiAJCQkJCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnhmYWNlLmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZhY2UuYwppbmRleCBhMzM3OWJhLi42ZDg2NmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZhY2UuYwpAQCAtOTEsNyArOTEsNiBAQAogCiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKQogI2VuZGlmCQkJCS8qICBBQ1BJX0ZVVFVSRV9VU0FHRSAgKi8KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIKQEAgLTc2OCwxMSArNzY3LDkgQEAKIAkJcmV0dXJuIChBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQlzdGF0dXMgPSBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybiAoc3RhdHVzKTsKLQl9CisJLyogTXVzdCBsb2NrIGludGVycHJldGVyIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zICovCiAKKwlhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKCk7CiAJc3RhdHVzID0gYWNwaV9ldl9hY3F1aXJlX2dsb2JhbF9sb2NrKHRpbWVvdXQpOwogCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZldm50LmMgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2eGZldm50LmMKaW5kZXggMTcwNjVlOS4uOWNiZDM0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldnhmZXZudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZ4ZmV2bnQuYwpAQCAtNDcyLDcgKzQ3Miw2IEBACiB9CiAKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2NsZWFyX2dwZSkKLQogI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTU2OCw3ICs1NjcsNiBAQAogCiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfZ3BlX3N0YXR1cykKICNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaW5zdGFsbF9ncGVfYmxvY2sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNvbnZydC5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29udnJ0LmMKaW5kZXggZDQ3MGU4Yi4uNzlmMmMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29udnJ0LmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y29udnJ0LmMKQEAgLTUxMiw5ICs1MTIsOCBAQAogCQkgKiBDcmVhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCBhbmQgc3RyaW5nIGJ1ZmZlcgogCQkgKiAoLTEgYmVjYXVzZSBvZiBleHRyYSBzZXBhcmF0b3IgaW5jbHVkZWQgaW4gc3RyaW5nX2xlbmd0aCBmcm9tIGFib3ZlKQogCQkgKi8KLQkJcmV0dXJuX2Rlc2MgPQotCQkgICAgYWNwaV91dF9jcmVhdGVfc3RyaW5nX29iamVjdCgoYWNwaV9zaXplKQotCQkJCQkJIChzdHJpbmdfbGVuZ3RoIC0gMSkpOworCQlyZXR1cm5fZGVzYyA9IGFjcGlfdXRfY3JlYXRlX3N0cmluZ19vYmplY3QoKGFjcGlfc2l6ZSkKKwkJCQkJCQkgICAoc3RyaW5nX2xlbmd0aCAtIDEpKTsKIAkJaWYgKCFyZXR1cm5fZGVzYykgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGNyZWF0ZS5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y3JlYXRlLmMKaW5kZXggYWU5NzgxMi4uNmU5YTIzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y3JlYXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4Y3JlYXRlLmMKQEAgLTUwLDcgKzUwLDYgQEAKIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfRVhFQ1VURVIKIEFDUElfTU9EVUxFX05BTUUoImV4Y3JlYXRlIikKLQogI2lmbmRlZiBBQ1BJX05PX01FVEhPRF9FWEVDVVRJT04KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNTgzLDEwICs1ODIsNyBAQAogCSAqIEdldCB0aGUgc3luY19sZXZlbC4gSWYgbWV0aG9kIGlzIHNlcmlhbGl6ZWQsIGEgbXV0ZXggd2lsbCBiZQogCSAqIGNyZWF0ZWQgZm9yIHRoaXMgbWV0aG9kIHdoZW4gaXQgaXMgcGFyc2VkLgogCSAqLwotCWlmIChhY3BpX2dibF9hbGxfbWV0aG9kc19zZXJpYWxpemVkKSB7Ci0JCW9ial9kZXNjLT5tZXRob2Quc3luY19sZXZlbCA9IDA7Ci0JCW9ial9kZXNjLT5tZXRob2QubWV0aG9kX2ZsYWdzIHw9IEFNTF9NRVRIT0RfU0VSSUFMSVpFRDsKLQl9IGVsc2UgaWYgKG1ldGhvZF9mbGFncyAmIEFNTF9NRVRIT0RfU0VSSUFMSVpFRCkgeworCWlmIChtZXRob2RfZmxhZ3MgJiBBTUxfTUVUSE9EX1NFUklBTElaRUQpIHsKIAkJLyoKIAkJICogQUNQSSAxLjA6IHN5bmNfbGV2ZWwgPSAwCiAJCSAqIEFDUEkgMi4wOiBzeW5jX2xldmVsID0gc3luY19sZXZlbCBpbiBtZXRob2QgZGVjbGFyYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGR1bXAuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leGR1bXAuYwppbmRleCAxYTczYzE0Li41MWM5YzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4ZHVtcC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9leGR1bXBfaW5mbyBhY3BpX2V4X2R1bXBfbXV0ZXhbNV0gPSB7CiAJe0FDUElfRVhEX0lOSVQsIEFDUElfRVhEX1RBQkxFX1NJWkUoYWNwaV9leF9kdW1wX211dGV4KSwgTlVMTH0sCiAJe0FDUElfRVhEX1VJTlQ4LCBBQ1BJX0VYRF9PRkZTRVQobXV0ZXguc3luY19sZXZlbCksICJTeW5jIExldmVsIn0sCi0Je0FDUElfRVhEX1BPSU5URVIsIEFDUElfRVhEX09GRlNFVChtdXRleC5vd25lcl90aHJlYWRfaWQpLCAiT3duZXIgVGhyZWFkIn0sCisJe0FDUElfRVhEX1BPSU5URVIsIEFDUElfRVhEX09GRlNFVChtdXRleC5vd25lcl90aHJlYWQpLCAiT3duZXIgVGhyZWFkIn0sCiAJe0FDUElfRVhEX1VJTlQxNiwgQUNQSV9FWERfT0ZGU0VUKG11dGV4LmFjcXVpc2l0aW9uX2RlcHRoKSwKIAkgIkFjcXVpcmUgRGVwdGgifSwKIAl7QUNQSV9FWERfUE9JTlRFUiwgQUNQSV9FWERfT0ZGU0VUKG11dGV4Lm9zX211dGV4KSwgIk9zTXV0ZXgifQpAQCAtNDUxLDkgKzQ1MSw4IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX05BTUUoZXhfZHVtcF9vcGVyYW5kKQogCi0JICAgIGlmICghCi0JCSgoQUNQSV9MVl9FWEVDICYgYWNwaV9kYmdfbGV2ZWwpCi0JCSAmJiAoX0NPTVBPTkVOVCAmIGFjcGlfZGJnX2xheWVyKSkpIHsKKwkgICAgaWYgKCEoKEFDUElfTFZfRVhFQyAmIGFjcGlfZGJnX2xldmVsKQorCQkgICYmIChfQ09NUE9ORU5UICYgYWNwaV9kYmdfbGF5ZXIpKSkgewogCQlyZXR1cm47CiAJfQogCkBAIC04NDQsOSArODQzLDggQEAKIAlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7CiAKIAlpZiAoIWZsYWdzKSB7Ci0JCWlmICghCi0JCSAgICAoKEFDUElfTFZfT0JKRUNUUyAmIGFjcGlfZGJnX2xldmVsKQotCQkgICAgICYmIChfQ09NUE9ORU5UICYgYWNwaV9kYmdfbGF5ZXIpKSkgeworCQlpZiAoISgoQUNQSV9MVl9PQkpFQ1RTICYgYWNwaV9kYmdfbGV2ZWwpCisJCSAgICAgICYmIChfQ09NUE9ORU5UICYgYWNwaV9kYmdfbGF5ZXIpKSkgewogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTAxMSw5ICsxMDA5LDggQEAKIAl9CiAKIAlpZiAoIWZsYWdzKSB7Ci0JCWlmICghCi0JCSAgICAoKEFDUElfTFZfT0JKRUNUUyAmIGFjcGlfZGJnX2xldmVsKQotCQkgICAgICYmIChfQ09NUE9ORU5UICYgYWNwaV9kYmdfbGF5ZXIpKSkgeworCQlpZiAoISgoQUNQSV9MVl9PQkpFQ1RTICYgYWNwaV9kYmdfbGV2ZWwpCisJCSAgICAgICYmIChfQ09NUE9ORU5UICYgYWNwaV9kYmdfbGF5ZXIpKSkgewogCQkJcmV0dXJuX1ZPSUQ7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtdXRleC5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bXV0ZXguYwppbmRleCA0ZWI4ODNiLi42NzQ4ZTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtdXRleC5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG11dGV4LmMKQEAgLTY2LDkgKzY2LDEwIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhY3BpX2V4X3VubGlua19tdXRleCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYywKLQkJCSAgc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICp0aHJlYWQpCit2b2lkIGFjcGlfZXhfdW5saW5rX211dGV4KHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKQogeworCXN0cnVjdCBhY3BpX3RocmVhZF9zdGF0ZSAqdGhyZWFkID0gb2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZDsKKwogCWlmICghdGhyZWFkKSB7CiAJCXJldHVybjsKIAl9CkBAIC0xNzMsMTMgKzE3NCwxNiBAQAogCiAJLyogU3VwcG9ydCBmb3IgbXVsdGlwbGUgYWNxdWlyZXMgYnkgdGhlIG93bmluZyB0aHJlYWQgKi8KIAotCWlmIChvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkX2lkID09IGFjcGlfb3NfZ2V0X3RocmVhZF9pZCgpKSB7Ci0JCS8qCi0JCSAqIFRoZSBtdXRleCBpcyBhbHJlYWR5IG93bmVkIGJ5IHRoaXMgdGhyZWFkLCBqdXN0IGluY3JlbWVudCB0aGUKLQkJICogYWNxdWlzaXRpb24gZGVwdGgKLQkJICovCi0JCW9ial9kZXNjLT5tdXRleC5hY3F1aXNpdGlvbl9kZXB0aCsrOwotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCWlmIChvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkKSB7CisJCWlmIChvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkLT50aHJlYWRfaWQgPT0KKwkJICAgIHdhbGtfc3RhdGUtPnRocmVhZC0+dGhyZWFkX2lkKSB7CisJCQkvKgorCQkJICogVGhlIG11dGV4IGlzIGFscmVhZHkgb3duZWQgYnkgdGhpcyB0aHJlYWQsIGp1c3QgaW5jcmVtZW50IHRoZQorCQkJICogYWNxdWlzaXRpb24gZGVwdGgKKwkJCSAqLworCQkJb2JqX2Rlc2MtPm11dGV4LmFjcXVpc2l0aW9uX2RlcHRoKys7CisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCQl9CiAJfQogCiAJLyogQWNxdWlyZSB0aGUgbXV0ZXgsIHdhaXQgaWYgbmVjZXNzYXJ5LiBTcGVjaWFsIGNhc2UgZm9yIEdsb2JhbCBMb2NrICovCkBAIC0yMDIsNyArMjA2LDcgQEAKIAogCS8qIEhhdmUgdGhlIG11dGV4OiB1cGRhdGUgbXV0ZXggYW5kIHdhbGsgaW5mbyBhbmQgc2F2ZSB0aGUgc3luY19sZXZlbCAqLwogCi0Jb2JqX2Rlc2MtPm11dGV4Lm93bmVyX3RocmVhZF9pZCA9IGFjcGlfb3NfZ2V0X3RocmVhZF9pZCgpOworCW9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWQgPSB3YWxrX3N0YXRlLT50aHJlYWQ7CiAJb2JqX2Rlc2MtPm11dGV4LmFjcXVpc2l0aW9uX2RlcHRoID0gMTsKIAlvYmpfZGVzYy0+bXV0ZXgub3JpZ2luYWxfc3luY19sZXZlbCA9CiAJICAgIHdhbGtfc3RhdGUtPnRocmVhZC0+Y3VycmVudF9zeW5jX2xldmVsOwpAQCAtMjQyLDcgKzI0Niw3IEBACiAKIAkvKiBUaGUgbXV0ZXggbXVzdCBoYXZlIGJlZW4gcHJldmlvdXNseSBhY3F1aXJlZCBpbiBvcmRlciB0byByZWxlYXNlIGl0ICovCiAKLQlpZiAoIW9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWRfaWQpIHsKKwlpZiAoIW9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWQpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiQ2Fubm90IHJlbGVhc2UgTXV0ZXggWyU0LjRzXSwgbm90IGFjcXVpcmVkIiwKIAkJCSAgICBhY3BpX3V0X2dldF9ub2RlX25hbWUob2JqX2Rlc2MtPm11dGV4Lm5vZGUpKSk7CkBAIC0yNjIsMTQgKzI2NiwxNSBAQAogCSAqIFRoZSBNdXRleCBpcyBvd25lZCwgYnV0IHRoaXMgdGhyZWFkIG11c3QgYmUgdGhlIG93bmVyLgogCSAqIFNwZWNpYWwgY2FzZSBmb3IgR2xvYmFsIExvY2ssIGFueSB0aHJlYWQgY2FuIHJlbGVhc2UKIAkgKi8KLQlpZiAoKG9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWRfaWQgIT0KKwlpZiAoKG9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWQtPnRocmVhZF9pZCAhPQogCSAgICAgd2Fsa19zdGF0ZS0+dGhyZWFkLT50aHJlYWRfaWQpCiAJICAgICYmIChvYmpfZGVzYy0+bXV0ZXgub3NfbXV0ZXggIT0gYWNwaV9nYmxfZ2xvYmFsX2xvY2tfbXV0ZXgpKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkgICAgIlRocmVhZCAlbFggY2Fubm90IHJlbGVhc2UgTXV0ZXggWyU0LjRzXSBhY3F1aXJlZCBieSB0aHJlYWQgJWxYIiwKIAkJCSAgICAodW5zaWduZWQgbG9uZyl3YWxrX3N0YXRlLT50aHJlYWQtPnRocmVhZF9pZCwKIAkJCSAgICBhY3BpX3V0X2dldF9ub2RlX25hbWUob2JqX2Rlc2MtPm11dGV4Lm5vZGUpLAotCQkJICAgICh1bnNpZ25lZCBsb25nKW9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWRfaWQpKTsKKwkJCSAgICAodW5zaWduZWQgbG9uZylvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkLT4KKwkJCSAgICB0aHJlYWRfaWQpKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9OT1RfT1dORVIpOwogCX0KIApAQCAtMjk2LDcgKzMwMSw3IEBACiAKIAkvKiBVbmxpbmsgdGhlIG11dGV4IGZyb20gdGhlIG93bmVyJ3MgbGlzdCAqLwogCi0JYWNwaV9leF91bmxpbmtfbXV0ZXgob2JqX2Rlc2MsIHdhbGtfc3RhdGUtPnRocmVhZCk7CisJYWNwaV9leF91bmxpbmtfbXV0ZXgob2JqX2Rlc2MpOwogCiAJLyogUmVsZWFzZSB0aGUgbXV0ZXgsIHNwZWNpYWwgY2FzZSBmb3IgR2xvYmFsIExvY2sgKi8KIApAQCAtMzA4LDcgKzMxMyw3IEBACiAKIAkvKiBVcGRhdGUgdGhlIG11dGV4IGFuZCByZXN0b3JlIHN5bmNfbGV2ZWwgKi8KIAotCW9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWRfaWQgPSBBQ1BJX01VVEVYX05PVF9BQ1FVSVJFRDsKKwlvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkID0gTlVMTDsKIAl3YWxrX3N0YXRlLT50aHJlYWQtPmN1cnJlbnRfc3luY19sZXZlbCA9CiAJICAgIG9ial9kZXNjLT5tdXRleC5vcmlnaW5hbF9zeW5jX2xldmVsOwogCkBAIC0zNjMsNyArMzY4LDcgQEAKIAogCQkvKiBNYXJrIG11dGV4IHVub3duZWQgKi8KIAotCQlvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkX2lkID0gQUNQSV9NVVRFWF9OT1RfQUNRVUlSRUQ7CisJCW9ial9kZXNjLT5tdXRleC5vd25lcl90aHJlYWQgPSBOVUxMOwogCiAJCS8qIFVwZGF0ZSBUaHJlYWQgc3luY19sZXZlbCAoTGFzdCBtdXRleCBpcyB0aGUgaW1wb3J0YW50IG9uZSkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bmFtZXMuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG5hbWVzLmMKaW5kZXggMWVlNGZiMS4uMzA4ZWFlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bmFtZXMuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhuYW1lcy5jCkBAIC0xNzcsOCArMTc3LDcgQEAKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwgIkJ5dGVzIGZyb20gc3RyZWFtOlxuIikpOwogCi0JZm9yIChpbmRleCA9IDA7Ci0JICAgICAoaW5kZXggPCBBQ1BJX05BTUVfU0laRSkKKwlmb3IgKGluZGV4ID0gMDsgKGluZGV4IDwgQUNQSV9OQU1FX1NJWkUpCiAJICAgICAmJiAoYWNwaV91dF92YWxpZF9hY3BpX2NoYXIoKmFtbF9hZGRyZXNzLCAwKSk7IGluZGV4KyspIHsKIAkJY2hhcl9idWZbaW5kZXhdID0gKmFtbF9hZGRyZXNzKys7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwgIiVjXG4iLCBjaGFyX2J1ZltpbmRleF0pKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHByZXAuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHByZXAuYwppbmRleCBhNjY5NjYyLi5lZmU1ZDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhwcmVwLmMKKysrIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cHJlcC5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAkJCQkJICAgIG9ial9kZXNjLT5jb21tb25fZmllbGQuYml0X2xlbmd0aCwKIAkJCQkJICAgIDB4RkZGRkZGRkYKIAkJCQkJICAgIC8qIFRlbXAgdW50aWwgd2UgcGFzcyByZWdpb25fbGVuZ3RoIGFzIHBhcmFtZXRlciAqLwotCQkJCQkgICAgKTsKKwkJICAgICk7CiAJCWJpdF9sZW5ndGggPSBieXRlX2FsaWdubWVudCAqIDg7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzb3AuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHJlc29wLmMKaW5kZXggYmE3NjE4Ni4uMDlkODk3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4cmVzb3AuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhyZXNvcC5jCkBAIC0zNTQsOCArMzU0LDcgQEAKIAkJCWlmICgob3Bjb2RlID09IEFNTF9TVE9SRV9PUCkgJiYKIAkJCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoKnN0YWNrX3B0cikgPT0KIAkJCSAgICAgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKLQkJCSAgICAmJiAoKCpzdGFja19wdHIpLT5yZWZlcmVuY2Uub3Bjb2RlID09Ci0JCQkJQU1MX0lOREVYX09QKSkgeworCQkJICAgICYmICgoKnN0YWNrX3B0ciktPnJlZmVyZW5jZS5vcGNvZGUgPT0gQU1MX0lOREVYX09QKSkgewogCQkJCWdvdG8gbmV4dF9vcGVyYW5kOwogCQkJfQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhzeXN0ZW0uYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN5c3RlbS5jCmluZGV4IGIyZWRmNjIuLjk0NjBiYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN5c3RlbS5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHN5c3RlbS5jCkBAIC02Niw3ICs2Niw2IEBACiBhY3BpX3N0YXR1cyBhY3BpX2V4X3N5c3RlbV93YWl0X3NlbWFwaG9yZShhY3BpX3NlbWFwaG9yZSBzZW1hcGhvcmUsIHUxNiB0aW1lb3V0KQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlhY3BpX3N0YXR1cyBzdGF0dXMyOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShleF9zeXN0ZW1fd2FpdF9zZW1hcGhvcmUpOwogCkBAIC03OSw3ICs3OCw3IEBACiAKIAkJLyogV2UgbXVzdCB3YWl0LCBzbyB1bmxvY2sgdGhlIGludGVycHJldGVyICovCiAKLQkJYWNwaV9leF9leGl0X2ludGVycHJldGVyKCk7CisJCWFjcGlfZXhfcmVsaW5xdWlzaF9pbnRlcnByZXRlcigpOwogCiAJCXN0YXR1cyA9IGFjcGlfb3Nfd2FpdF9zZW1hcGhvcmUoc2VtYXBob3JlLCAxLCB0aW1lb3V0KTsKIApAQCAtODksMTMgKzg4LDcgQEAKIAogCQkvKiBSZWFjcXVpcmUgdGhlIGludGVycHJldGVyICovCiAKLQkJc3RhdHVzMiA9IGFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMyKSkgewotCi0JCQkvKiBSZXBvcnQgZmF0YWwgZXJyb3IsIGNvdWxkIG5vdCBhY3F1aXJlIGludGVycHJldGVyICovCi0KLQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMyKTsKLQkJfQorCQlhY3BpX2V4X3JlYWNxdWlyZV9pbnRlcnByZXRlcigpOwogCX0KIAogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwpAQCAtMTE5LDcgKzExMiw2IEBACiBhY3BpX3N0YXR1cyBhY3BpX2V4X3N5c3RlbV93YWl0X211dGV4KGFjcGlfbXV0ZXggbXV0ZXgsIHUxNiB0aW1lb3V0KQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlhY3BpX3N0YXR1cyBzdGF0dXMyOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShleF9zeXN0ZW1fd2FpdF9tdXRleCk7CiAKQEAgLTEzMiw3ICsxMjQsNyBAQAogCiAJCS8qIFdlIG11c3Qgd2FpdCwgc28gdW5sb2NrIHRoZSBpbnRlcnByZXRlciAqLwogCi0JCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOworCQlhY3BpX2V4X3JlbGlucXVpc2hfaW50ZXJwcmV0ZXIoKTsKIAogCQlzdGF0dXMgPSBhY3BpX29zX2FjcXVpcmVfbXV0ZXgobXV0ZXgsIHRpbWVvdXQpOwogCkBAIC0xNDIsMTMgKzEzNCw3IEBACiAKIAkJLyogUmVhY3F1aXJlIHRoZSBpbnRlcnByZXRlciAqLwogCi0JCXN0YXR1czIgPSBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKCk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzMikpIHsKLQotCQkJLyogUmVwb3J0IGZhdGFsIGVycm9yLCBjb3VsZCBub3QgYWNxdWlyZSBpbnRlcnByZXRlciAqLwotCi0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzMik7Ci0JCX0KKwkJYWNwaV9leF9yZWFjcXVpcmVfaW50ZXJwcmV0ZXIoKTsKIAl9CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTIwOSwyMCArMTk1LDE4IEBACiAKIGFjcGlfc3RhdHVzIGFjcGlfZXhfc3lzdGVtX2RvX3N1c3BlbmQoYWNwaV9pbnRlZ2VyIGhvd19sb25nKQogewotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQogCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKIAogCS8qIFNpbmNlIHRoaXMgdGhyZWFkIHdpbGwgc2xlZXAsIHdlIG11c3QgcmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXIgKi8KIAotCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOworCWFjcGlfZXhfcmVsaW5xdWlzaF9pbnRlcnByZXRlcigpOwogCiAJYWNwaV9vc19zbGVlcChob3dfbG9uZyk7CiAKIAkvKiBBbmQgbm93IHdlIG11c3QgZ2V0IHRoZSBpbnRlcnByZXRlciBhZ2FpbiAqLwogCi0Jc3RhdHVzID0gYWNwaV9leF9lbnRlcl9pbnRlcnByZXRlcigpOwotCXJldHVybiAoc3RhdHVzKTsKKwlhY3BpX2V4X3JlYWNxdWlyZV9pbnRlcnByZXRlcigpOworCXJldHVybiAoQUVfT0spOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4dXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leHV0aWxzLmMKaW5kZXggYWVhNDYxZi4uNmIwYWVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4dXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXh1dGlscy5jCkBAIC03NiwxNCArNzYsMTUgQEAKICAqCiAgKiBQQVJBTUVURVJTOiAgTm9uZQogICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqIFJFVFVSTjogICAgICBOb25lCiAgKgotICogREVTQ1JJUFRJT046IEVudGVyIHRoZSBpbnRlcnByZXRlciBleGVjdXRpb24gcmVnaW9uLiAgRmFpbHVyZSB0byBlbnRlcgotICogICAgICAgICAgICAgIHRoZSBpbnRlcnByZXRlciByZWdpb24gaXMgYSBmYXRhbCBzeXN0ZW0gZXJyb3IKKyAqIERFU0NSSVBUSU9OOiBFbnRlciB0aGUgaW50ZXJwcmV0ZXIgZXhlY3V0aW9uIHJlZ2lvbi4gRmFpbHVyZSB0byBlbnRlcgorICogICAgICAgICAgICAgIHRoZSBpbnRlcnByZXRlciByZWdpb24gaXMgYSBmYXRhbCBzeXN0ZW0gZXJyb3IuIFVzZWQgaW4KKyAqICAgICAgICAgICAgICBjb25qdW5jdGlvbiB3aXRoIGV4aXRfaW50ZXJwcmV0ZXIuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotYWNwaV9zdGF0dXMgYWNwaV9leF9lbnRlcl9pbnRlcnByZXRlcih2b2lkKQordm9pZCBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKHZvaWQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCkBAIC05MSwxMCArOTIsNDIgQEAKIAogCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9JTlRFUlBSRVRFUik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sICJDb3VsZCBub3QgYWNxdWlyZSBpbnRlcnByZXRlciBtdXRleCIpKTsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCSAgICAiQ291bGQgbm90IGFjcXVpcmUgQU1MIEludGVycHJldGVyIG11dGV4IikpOwogCX0KIAotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCXJldHVybl9WT0lEOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2V4X3JlYWNxdWlyZV9pbnRlcnByZXRlcgorICoKKyAqIFBBUkFNRVRFUlM6ICBOb25lCisgKgorICogUkVUVVJOOiAgICAgIE5vbmUKKyAqCisgKiBERVNDUklQVElPTjogUmVhY3F1aXJlIHRoZSBpbnRlcnByZXRlciBleGVjdXRpb24gcmVnaW9uIGZyb20gd2l0aGluIHRoZQorICogICAgICAgICAgICAgIGludGVycHJldGVyIGNvZGUuIEZhaWx1cmUgdG8gZW50ZXIgdGhlIGludGVycHJldGVyIHJlZ2lvbiBpcyBhCisgKiAgICAgICAgICAgICAgZmF0YWwgc3lzdGVtIGVycm9yLiBVc2VkIGluICBjb25qdWN0aW9uIHdpdGgKKyAqICAgICAgICAgICAgICByZWxpbnF1aXNoX2ludGVycHJldGVyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBhY3BpX2V4X3JlYWNxdWlyZV9pbnRlcnByZXRlcih2b2lkKQoreworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfcmVhY3F1aXJlX2ludGVycHJldGVyKTsKKworCS8qCisJICogSWYgdGhlIGdsb2JhbCBzZXJpYWxpemVkIGZsYWcgaXMgc2V0LCBkbyBub3QgcmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXIsCisJICogc2luY2UgaXQgd2FzIG5vdCBhY3R1YWxseSByZWxlYXNlZCBieSBhY3BpX2V4X3JlbGlucXVpc2hfaW50ZXJwcmV0ZXIuCisJICogVGhpcyBmb3JjZXMgdGhlIGludGVycHJldGVyIHRvIGJlIHNpbmdsZSB0aHJlYWRlZC4KKwkgKi8KKwlpZiAoIWFjcGlfZ2JsX2FsbF9tZXRob2RzX3NlcmlhbGl6ZWQpIHsKKwkJYWNwaV9leF9lbnRlcl9pbnRlcnByZXRlcigpOworCX0KKworCXJldHVybl9WT0lEOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTA1LDE3ICsxMzgsOSBAQAogICoKICAqIFJFVFVSTjogICAgICBOb25lCiAgKgotICogREVTQ1JJUFRJT046IEV4aXQgdGhlIGludGVycHJldGVyIGV4ZWN1dGlvbiByZWdpb24KLSAqCi0gKiBDYXNlcyB3aGVyZSB0aGUgaW50ZXJwcmV0ZXIgaXMgdW5sb2NrZWQ6Ci0gKiAgICAgIDEpIENvbXBsZXRpb24gb2YgdGhlIGV4ZWN1dGlvbiBvZiBhIGNvbnRyb2wgbWV0aG9kCi0gKiAgICAgIDIpIE1ldGhvZCBibG9ja2VkIG9uIGEgU2xlZXAoKSBBTUwgb3Bjb2RlCi0gKiAgICAgIDMpIE1ldGhvZCBibG9ja2VkIG9uIGFuIEFjcXVpcmUoKSBBTUwgb3Bjb2RlCi0gKiAgICAgIDQpIE1ldGhvZCBibG9ja2VkIG9uIGEgV2FpdCgpIEFNTCBvcGNvZGUKLSAqICAgICAgNSkgTWV0aG9kIGJsb2NrZWQgdG8gYWNxdWlyZSB0aGUgZ2xvYmFsIGxvY2sKLSAqICAgICAgNikgTWV0aG9kIGJsb2NrZWQgdG8gZXhlY3V0ZSBhIHNlcmlhbGl6ZWQgY29udHJvbCBtZXRob2QgdGhhdCBpcwotICogICAgICAgICAgYWxyZWFkeSBleGVjdXRpbmcKLSAqICAgICAgNykgQWJvdXQgdG8gaW52b2tlIGEgdXNlci1pbnN0YWxsZWQgb3ByZWdpb24gaGFuZGxlcgorICogREVTQ1JJUFRJT046IEV4aXQgdGhlIGludGVycHJldGVyIGV4ZWN1dGlvbiByZWdpb24uIFRoaXMgaXMgdGhlIHRvcCBsZXZlbAorICogICAgICAgICAgICAgIHJvdXRpbmUgdXNlZCB0byBleGl0IHRoZSBpbnRlcnByZXRlciB3aGVuIGFsbCBwcm9jZXNzaW5nIGhhcworICogICAgICAgICAgICAgIGJlZW4gY29tcGxldGVkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTEyNyw3ICsxNTIsNDYgQEAKIAogCXN0YXR1cyA9IGFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9JTlRFUlBSRVRFUik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfRVJST1IoKEFFX0lORk8sICJDb3VsZCBub3QgcmVsZWFzZSBpbnRlcnByZXRlciBtdXRleCIpKTsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCSAgICAiQ291bGQgbm90IHJlbGVhc2UgQU1MIEludGVycHJldGVyIG11dGV4IikpOworCX0KKworCXJldHVybl9WT0lEOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2V4X3JlbGlucXVpc2hfaW50ZXJwcmV0ZXIKKyAqCisgKiBQQVJBTUVURVJTOiAgTm9uZQorICoKKyAqIFJFVFVSTjogICAgICBOb25lCisgKgorICogREVTQ1JJUFRJT046IEV4aXQgdGhlIGludGVycHJldGVyIGV4ZWN1dGlvbiByZWdpb24sIGZyb20gd2l0aGluIHRoZQorICogICAgICAgICAgICAgIGludGVycHJldGVyIC0gYmVmb3JlIGF0dGVtcHRpbmcgYW4gb3BlcmF0aW9uIHRoYXQgd2lsbCBwb3NzaWJseQorICogICAgICAgICAgICAgIGJsb2NrIHRoZSBydW5uaW5nIHRocmVhZC4KKyAqCisgKiBDYXNlcyB3aGVyZSB0aGUgaW50ZXJwcmV0ZXIgaXMgdW5sb2NrZWQgaW50ZXJuYWxseQorICogICAgICAxKSBNZXRob2QgdG8gYmUgYmxvY2tlZCBvbiBhIFNsZWVwKCkgQU1MIG9wY29kZQorICogICAgICAyKSBNZXRob2QgdG8gYmUgYmxvY2tlZCBvbiBhbiBBY3F1aXJlKCkgQU1MIG9wY29kZQorICogICAgICAzKSBNZXRob2QgdG8gYmUgYmxvY2tlZCBvbiBhIFdhaXQoKSBBTUwgb3Bjb2RlCisgKiAgICAgIDQpIE1ldGhvZCB0byBiZSBibG9ja2VkIHRvIGFjcXVpcmUgdGhlIGdsb2JhbCBsb2NrCisgKiAgICAgIDUpIE1ldGhvZCB0byBiZSBibG9ja2VkIHdhaXRpbmcgdG8gZXhlY3V0ZSBhIHNlcmlhbGl6ZWQgY29udHJvbCBtZXRob2QKKyAqICAgICAgICAgIHRoYXQgaXMgY3VycmVudGx5IGV4ZWN1dGluZworICogICAgICA2KSBBYm91dCB0byBpbnZva2UgYSB1c2VyLWluc3RhbGxlZCBvcHJlZ2lvbiBoYW5kbGVyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBhY3BpX2V4X3JlbGlucXVpc2hfaW50ZXJwcmV0ZXIodm9pZCkKK3sKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV4X3JlbGlucXVpc2hfaW50ZXJwcmV0ZXIpOworCisJLyoKKwkgKiBJZiB0aGUgZ2xvYmFsIHNlcmlhbGl6ZWQgZmxhZyBpcyBzZXQsIGRvIG5vdCByZWxlYXNlIHRoZSBpbnRlcnByZXRlci4KKwkgKiBUaGlzIGZvcmNlcyB0aGUgaW50ZXJwcmV0ZXIgdG8gYmUgc2luZ2xlIHRocmVhZGVkLgorCSAqLworCWlmICghYWNwaV9nYmxfYWxsX21ldGhvZHNfc2VyaWFsaXplZCkgeworCQlhY3BpX2V4X2V4aXRfaW50ZXJwcmV0ZXIoKTsKIAl9CiAKIAlyZXR1cm5fVk9JRDsKQEAgLTE0MSw4ICsyMDUsOCBAQAogICoKICAqIFJFVFVSTjogICAgICBub25lCiAgKgotICogREVTQ1JJUFRJT046IFRydW5jYXRlIGEgbnVtYmVyIHRvIDMyLWJpdHMgaWYgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgbWV0aG9kCi0gKiAgICAgICAgICAgICAgYmVsb25ncyB0byBhIDMyLWJpdCBBQ1BJIHRhYmxlLgorICogREVTQ1JJUFRJT046IFRydW5jYXRlIGFuIEFDUEkgSW50ZWdlciB0byAzMiBiaXRzIGlmIHRoZSBleGVjdXRpb24gbW9kZSBpcworICogICAgICAgICAgICAgIDMyLWJpdCwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgcmV2aXNpb24gb2YgdGhlIERTRFQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2dsdWUuYyBiL2RyaXZlcnMvYWNwaS9nbHVlLmMKaW5kZXggNDMzNGMyMC4uNDE0MjdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2dsdWUuYworKysgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCkBAIC0yNDUsNiArMjQ1LDM1IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0NNT1MpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQ01PU19NT0RVTEUpCiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyB1MzIgcnRjX2hhbmRsZXIodm9pZCAqY29udGV4dCkKK3sKKwlhY3BpX2NsZWFyX2V2ZW50KEFDUElfRVZFTlRfUlRDKTsKKwlhY3BpX2Rpc2FibGVfZXZlbnQoQUNQSV9FVkVOVF9SVEMsIDApOworCXJldHVybiBBQ1BJX0lOVEVSUlVQVF9IQU5ETEVEOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRjX3dha2Vfc2V0dXAodm9pZCkKK3sKKwlhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1JUQywgcnRjX2hhbmRsZXIsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBydGNfd2FrZV9vbihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJYWNwaV9jbGVhcl9ldmVudChBQ1BJX0VWRU5UX1JUQyk7CisJYWNwaV9lbmFibGVfZXZlbnQoQUNQSV9FVkVOVF9SVEMsIDApOworfQorCitzdGF0aWMgdm9pZCBydGNfd2FrZV9vZmYoc3RydWN0IGRldmljZSAqZGV2KQoreworCWFjcGlfZGlzYWJsZV9ldmVudChBQ1BJX0VWRU5UX1JUQywgMCk7Cit9CisjZWxzZQorI2RlZmluZSBydGNfd2FrZV9zZXR1cCgpCWRve313aGlsZSgwKQorI2RlZmluZSBydGNfd2FrZV9vbgkJTlVMTAorI2RlZmluZSBydGNfd2FrZV9vZmYJCU5VTEwKKyNlbmRpZgorCiAvKiBFdmVyeSBBQ1BJIHBsYXRmb3JtIGhhcyBhIG1jMTQ2ODE4IGNvbXBhdGlibGUgImNtb3MgcnRjIi4gIEhlcmUgd2UgZmluZAogICogaXRzIGRldmljZSBub2RlIGFuZCBwYXNzIGV4dHJhIGNvbmZpZyBkYXRhLiAgVGhpcyBoZWxwcyBpdHMgZHJpdmVyIHVzZQogICogY2FwYWJpbGl0aWVzIHRoYXQgdGhlIG5vdy1vYnNvbGV0ZSBtYzE0NjgxOCBkaWRuJ3QgaGF2ZSwgYW5kIGluZm9ybXMgaXQKQEAgLTI4MywxMSArMzEyLDI0IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gZ2V0X3J0Y19kZXYoKTsKIAogCWlmIChkZXYpIHsKKwkJcnRjX3dha2Vfc2V0dXAoKTsKKwkJcnRjX2luZm8ud2FrZV9vbiA9IHJ0Y193YWtlX29uOworCQlydGNfaW5mby53YWtlX29mZiA9IHJ0Y193YWtlX29mZjsKKworCQkvKiB3b3JrYXJvdW5kIGJ1ZyBpbiBzb21lIEFDUEkgdGFibGVzICovCisJCWlmIChhY3BpX2dibF9GQURULm1vbnRoX2FsYXJtICYmICFhY3BpX2dibF9GQURULmRheV9hbGFybSkgeworCQkJREJHKCJib2d1cyBGQURUIG1vbnRoX2FsYXJtXG4iKTsKKwkJCWFjcGlfZ2JsX0ZBRFQubW9udGhfYWxhcm0gPSAwOworCQl9CisKIAkJcnRjX2luZm8ucnRjX2RheV9hbGFybSA9IGFjcGlfZ2JsX0ZBRFQuZGF5X2FsYXJtOwogCQlydGNfaW5mby5ydGNfbW9uX2FsYXJtID0gYWNwaV9nYmxfRkFEVC5tb250aF9hbGFybTsKIAkJcnRjX2luZm8ucnRjX2NlbnR1cnkgPSBhY3BpX2dibF9GQURULmNlbnR1cnk7CiAKLQkJLyogTk9URTogIGFjcGlfZ2JsX0ZBRFQtPnJ0Y3M0IGlzIE5PVCBjdXJyZW50bHkgdXNlZnVsICovCisJCS8qIE5PVEU6ICBTNF9SVENfV0FLRSBpcyBOT1QgY3VycmVudGx5IHVzZWZ1bCB0byBMaW51eCAqLworCQlpZiAoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9TNF9SVENfV0FLRSkKKwkJCXByaW50ayhQUkVGSVggIlJUQyBjYW4gd2FrZSBmcm9tIFM0XG4iKTsKKwogCiAJCWRldi0+cGxhdGZvcm1fZGF0YSA9ICZydGNfaW5mbzsKIApAQCAtMjk2LDcgKzMzOCw3IEBACiAKIAkJcHV0X2RldmljZShkZXYpOwogCX0gZWxzZQotCQlwcl9kZWJ1ZygiQUNQSTogUlRDIHVuYXZhaWxhYmxlP1xuIik7CisJCURCRygiUlRDIHVuYXZhaWxhYmxlP1xuIik7CiAJcmV0dXJuIDA7CiB9CiAvKiBkbyB0aGlzIGJldHdlZW4gUlRDIHN1YnN5c19pbml0Y2FsbCgpIGFuZCBydGNfY21vcyBkcml2ZXJfaW5pdGNhbGwoKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3c2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3NsZWVwLmMKaW5kZXggYzg0YjFmYS4uNzZjNTI1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3c2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdzbGVlcC5jCkBAIC0xNTIsNyArMTUyLDYgQEAKIAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IpCiAjZW5kaWYKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZV9wcmVwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZXZhbC5jIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2V2YWwuYwppbmRleCAyNmZkMGRkLi45N2IyYWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zZXZhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNldmFsLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAqIE1VVEVYOiAgICAgICBMb2NrcyBpbnRlcnByZXRlcgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX25zX2V2YWx1YXRlKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm8pCithY3BpX3N0YXR1cyBhY3BpX25zX2V2YWx1YXRlKHN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKiBpbmZvKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIApAQCAtMTU0LDExICsxNTQsNyBAQAogCQkgKiBFeGVjdXRlIHRoZSBtZXRob2QgdmlhIHRoZSBpbnRlcnByZXRlci4gVGhlIGludGVycHJldGVyIGlzIGxvY2tlZAogCQkgKiBoZXJlIGJlZm9yZSBjYWxsaW5nIGludG8gdGhlIEFNTCBwYXJzZXIKIAkJICovCi0JCXN0YXR1cyA9IGFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQkJfQotCisJCWFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKIAkJc3RhdHVzID0gYWNwaV9wc19leGVjdXRlX21ldGhvZChpbmZvKTsKIAkJYWNwaV9leF9leGl0X2ludGVycHJldGVyKCk7CiAJfSBlbHNlIHsKQEAgLTE4MiwxMCArMTc4LDcgQEAKIAkJICogcmVzb2x1dGlvbiwgd2UgbXVzdCBsb2NrIGl0IGJlY2F1c2Ugd2UgY291bGQgYWNjZXNzIGFuIG9wcmVnaW9uLgogCQkgKiBUaGUgb3ByZWdpb24gYWNjZXNzIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSBpbnRlcnByZXRlciBpcyBsb2NrZWQuCiAJCSAqLwotCQlzdGF0dXMgPSBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKCk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JCX0KKwkJYWNwaV9leF9lbnRlcl9pbnRlcnByZXRlcigpOwogCiAJCS8qIEZ1bmN0aW9uIGhhcyBhIHN0cmFuZ2UgaW50ZXJmYWNlICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNpbml0LmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zaW5pdC5jCmluZGV4IGM0YWI2MTUuLjMzZGIyMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnNpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc2luaXQuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJCQl1MzIgbGV2ZWwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipyZXR1cm5fdmFsdWUpCiB7CiAJYWNwaV9vYmplY3RfdHlwZSB0eXBlOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9pbml0X3dhbGtfaW5mbyAqaW5mbyA9CiAJICAgIChzdHJ1Y3QgYWNwaV9pbml0X3dhbGtfaW5mbyAqKWNvbnRleHQ7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGUgPQpAQCAtMjY4LDEwICsyNjgsNyBAQAogCS8qCiAJICogTXVzdCBsb2NrIHRoZSBpbnRlcnByZXRlciBiZWZvcmUgZXhlY3V0aW5nIEFNTCBjb2RlCiAJICovCi0Jc3RhdHVzID0gYWNwaV9leF9lbnRlcl9pbnRlcnByZXRlcigpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm4gKHN0YXR1cyk7Ci0JfQorCWFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKIAogCS8qCiAJICogRWFjaCBvZiB0aGVzZSB0eXBlcyBjYW4gY29udGFpbiBleGVjdXRhYmxlIEFNTCBjb2RlIHdpdGhpbiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN3YWxrLmMgYi9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zd2Fsay5jCmluZGV4IDk0ZWI4ZjMuLjI4MGI4MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN3YWxrLmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3dhbGsuYwpAQCAtNjUsMTAgKzY1LDggQEAKICAqICAgICAgICAgICAgICB3aXRoaW4gU2NvcGUgaXMgcmV0dXJuZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICphY3BpX25zX2dldF9uZXh0X25vZGUoYWNwaV9vYmplY3RfdHlwZSB0eXBlLAotCQkJCQkJICBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZQotCQkJCQkJICAqcGFyZW50X25vZGUsCi0JCQkJCQkgIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlCitzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqYWNwaV9uc19nZXRfbmV4dF9ub2RlKGFjcGlfb2JqZWN0X3R5cGUgdHlwZSwgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUKKwkJCQkJCSAgKnBhcmVudF9ub2RlLCBzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZQogCQkJCQkJICAqY2hpbGRfbm9kZSkKIHsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbmV4dF9ub2RlID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4ZmV2YWwuYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4ZmV2YWwuYwppbmRleCA4OTA0ZDBmLi5iZTRmMjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL25hbWVzcGFjZS9uc3hmZXZhbC5jCkBAIC00OCw3ICs0OCw2IEBACiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX05BTUVTUEFDRQogQUNQSV9NT0RVTEVfTkFNRSgibnN4ZmV2YWwiKQotCiAjaWZkZWYgQUNQSV9GVVRVUkVfVVNBR0UKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNzMsOCArNzIsOCBAQAogYWNwaV9zdGF0dXMKIGFjcGlfZXZhbHVhdGVfb2JqZWN0X3R5cGVkKGFjcGlfaGFuZGxlIGhhbmRsZSwKIAkJCSAgIGFjcGlfc3RyaW5nIHBhdGhuYW1lLAotCQkJICAgc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKiBleHRlcm5hbF9wYXJhbXMsCi0JCQkgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKiByZXR1cm5fYnVmZmVyLAorCQkJICAgc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKmV4dGVybmFsX3BhcmFtcywKKwkJCSAgIHN0cnVjdCBhY3BpX2J1ZmZlciAqcmV0dXJuX2J1ZmZlciwKIAkJCSAgIGFjcGlfb2JqZWN0X3R5cGUgcmV0dXJuX3R5cGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwpAQCAtMTQzLDcgKzE0Miw2IEBACiAKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZCkKICNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZXZhbHVhdGVfb2JqZWN0CkBAIC0xNzAsNyArMTY4LDYgQEAKIAkJICAgICBzdHJ1Y3QgYWNwaV9idWZmZXIgKnJldHVybl9idWZmZXIpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCWFjcGlfc3RhdHVzIHN0YXR1czI7CiAJc3RydWN0IGFjcGlfZXZhbHVhdGVfaW5mbyAqaW5mbzsKIAlhY3BpX3NpemUgYnVmZmVyX3NwYWNlX25lZWRlZDsKIAl1MzIgaTsKQEAgLTMyOSwxNCArMzI2LDEyIEBACiAJCSAqIERlbGV0ZSB0aGUgaW50ZXJuYWwgcmV0dXJuIG9iamVjdC4gTk9URTogSW50ZXJwcmV0ZXIgbXVzdCBiZQogCQkgKiBsb2NrZWQgdG8gYXZvaWQgcmFjZSBjb25kaXRpb24uCiAJCSAqLwotCQlzdGF0dXMyID0gYWNwaV9leF9lbnRlcl9pbnRlcnByZXRlcigpOwotCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1czIpKSB7CisJCWFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKIAotCQkJLyogUmVtb3ZlIG9uZSByZWZlcmVuY2Ugb24gdGhlIHJldHVybiBvYmplY3QgKHNob3VsZCBkZWxldGUgaXQpICovCisJCS8qIFJlbW92ZSBvbmUgcmVmZXJlbmNlIG9uIHRoZSByZXR1cm4gb2JqZWN0IChzaG91bGQgZGVsZXRlIGl0KSAqLwogCi0JCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UoaW5mby0+cmV0dXJuX29iamVjdCk7Ci0JCQlhY3BpX2V4X2V4aXRfaW50ZXJwcmV0ZXIoKTsKLQkJfQorCQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UoaW5mby0+cmV0dXJuX29iamVjdCk7CisJCWFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcigpOwogCX0KIAogICAgICAgY2xlYW51cDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9udW1hLmMgYi9kcml2ZXJzL2FjcGkvbnVtYS5jCmluZGV4IDhmY2Q2YTEuLjBjOWYxNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9udW1hLmMKKysrIGIvZHJpdmVycy9hY3BpL251bWEuYwpAQCAtNDAsMjYgKzQwLDI2IEBACiAjZGVmaW5lIE5JRF9JTlZBTAktMQogCiAvKiBtYXBzIHRvIGNvbnZlcnQgYmV0d2VlbiBwcm94aW1pdHkgZG9tYWluIGFuZCBsb2dpY2FsIG5vZGUgSUQgKi8KLWludCBfX2NwdWluaXRkYXRhIHB4bV90b19ub2RlX21hcFtNQVhfUFhNX0RPTUFJTlNdCitzdGF0aWMgaW50IHB4bV90b19ub2RlX21hcFtNQVhfUFhNX0RPTUFJTlNdCiAJCQkJPSB7IFswIC4uLiBNQVhfUFhNX0RPTUFJTlMgLSAxXSA9IE5JRF9JTlZBTCB9OwotaW50IF9fY3B1aW5pdGRhdGEgbm9kZV90b19weG1fbWFwW01BWF9OVU1OT0RFU10KK3N0YXRpYyBpbnQgbm9kZV90b19weG1fbWFwW01BWF9OVU1OT0RFU10KIAkJCQk9IHsgWzAgLi4uIE1BWF9OVU1OT0RFUyAtIDFdID0gUFhNX0lOVkFMIH07CiAKLWludCBfX2NwdWluaXQgcHhtX3RvX25vZGUoaW50IHB4bSkKK2ludCBweG1fdG9fbm9kZShpbnQgcHhtKQogewogCWlmIChweG0gPCAwKQogCQlyZXR1cm4gTklEX0lOVkFMOwogCXJldHVybiBweG1fdG9fbm9kZV9tYXBbcHhtXTsKIH0KIAotaW50IF9fY3B1aW5pdCBub2RlX3RvX3B4bShpbnQgbm9kZSkKK2ludCBub2RlX3RvX3B4bShpbnQgbm9kZSkKIHsKIAlpZiAobm9kZSA8IDApCiAJCXJldHVybiBQWE1fSU5WQUw7CiAJcmV0dXJuIG5vZGVfdG9fcHhtX21hcFtub2RlXTsKIH0KIAotaW50IF9fY3B1aW5pdCBhY3BpX21hcF9weG1fdG9fbm9kZShpbnQgcHhtKQoraW50IGFjcGlfbWFwX3B4bV90b19ub2RlKGludCBweG0pCiB7CiAJaW50IG5vZGUgPSBweG1fdG9fbm9kZV9tYXBbcHhtXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IDk3MWVjYTQuLjU4Y2ViMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTMwLDEwICszMCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgpAQCAtNzIsNiArNzIsMjIgQEAKIHN0YXRpYyBhY3BpX29zZF9oYW5kbGVyIGFjcGlfaXJxX2hhbmRsZXI7CiBzdGF0aWMgdm9pZCAqYWNwaV9pcnFfY29udGV4dDsKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2FjcGlkX3dxOworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprYWNwaV9ub3RpZnlfd3E7CisKKyNkZWZpbmUJT1NJX1NUUklOR19MRU5HVEhfTUFYIDY0CS8qIGFyYml0cmFyeSAqLworc3RhdGljIGNoYXIgb3NpX2FkZGl0aW9uYWxfc3RyaW5nW09TSV9TVFJJTkdfTEVOR1RIX01BWF07CisKKyNkZWZpbmUgT1NJX0xJTlVYX0VOQUJMRUQKKyNpZmRlZglPU0lfTElOVVhfRU5BQkxFRAoraW50IG9zaV9saW51eCA9IDE7CS8qIGVuYWJsZSBfT1NJKExpbnV4KSBieSBkZWZhdWx0ICovCisjZWxzZQoraW50IG9zaV9saW51eDsJCS8qIGRpc2FibGUgX09TSShMaW51eCkgYnkgZGVmYXVsdCAqLworI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19ETUkKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBkbWlfc3lzdGVtX2lkIGFjcGlfb3NsX2RtaV90YWJsZVtdOworI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhY3BpX3JlcXVlc3RfcmVnaW9uIChzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKmFkZHIsCiAJdW5zaWduZWQgaW50IGxlbmd0aCwgY2hhciAqZGVzYykKQEAgLTEyMSw4ICsxMzcsOSBAQAogfQogZGV2aWNlX2luaXRjYWxsKGFjcGlfcmVzZXJ2ZV9yZXNvdXJjZXMpOwogCi1hY3BpX3N0YXR1cyBhY3BpX29zX2luaXRpYWxpemUodm9pZCkKK2FjcGlfc3RhdHVzIF9faW5pdCBhY3BpX29zX2luaXRpYWxpemUodm9pZCkKIHsKKwlkbWlfY2hlY2tfc3lzdGVtKGFjcGlfb3NsX2RtaV90YWJsZSk7CiAJcmV0dXJuIEFFX09LOwogfQogCkBAIC0xMzgsOCArMTU1LDkgQEAKIAkJcmV0dXJuIEFFX05VTExfRU5UUlk7CiAJfQogCWthY3BpZF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrYWNwaWQiKTsKKwlrYWNwaV9ub3RpZnlfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia2FjcGlfbm90aWZ5Iik7CiAJQlVHX09OKCFrYWNwaWRfd3EpOwotCisJQlVHX09OKCFrYWNwaV9ub3RpZnlfd3EpOwogCXJldHVybiBBRV9PSzsKIH0KIApAQCAtMTUxLDYgKzE2OSw3IEBACiAJfQogCiAJZGVzdHJveV93b3JrcXVldWUoa2FjcGlkX3dxKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShrYWNwaV9ub3RpZnlfd3EpOwogCiAJcmV0dXJuIEFFX09LOwogfQpAQCAtNjA0LDYgKzYyMywyMyBAQAogc3RhdGljIHZvaWQgYWNwaV9vc19leGVjdXRlX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYWNwaV9vc19kcGMgKmRwYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWNwaV9vc19kcGMsIHdvcmspOworCWlmICghZHBjKSB7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgKE5VTEwpIGNvbnRleHRcbiIpOworCQlyZXR1cm47CisJfQorCisJZHBjLT5mdW5jdGlvbihkcGMtPmNvbnRleHQpOworCWtmcmVlKGRwYyk7CisKKwkvKiBZaWVsZCBjcHUgdG8gbm90aWZ5IHRocmVhZCAqLworCWNvbmRfcmVzY2hlZCgpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBhY3BpX29zX2V4ZWN1dGVfbm90aWZ5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYWNwaV9vc19kcGMgKmRwYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWNwaV9vc19kcGMsIHdvcmspOwogCiAJaWYgKCFkcGMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCAoTlVMTCkgY29udGV4dFxuIik7CkBAIC02MzgsMTQgKzY3NCwxMiBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXN0cnVjdCBhY3BpX29zX2RwYyAqZHBjOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRSgib3NfcXVldWVfZm9yX2V4ZWN1dGlvbiIpOwotCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAogCQkJICAiU2NoZWR1bGluZyBmdW5jdGlvbiBbJXAoJXApXSBmb3IgZGVmZXJyZWQgZXhlY3V0aW9uLlxuIiwKIAkJCSAgZnVuY3Rpb24sIGNvbnRleHQpKTsKIAogCWlmICghZnVuY3Rpb24pCi0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKIAkvKgogCSAqIEFsbG9jYXRlL2luaXRpYWxpemUgRFBDIHN0cnVjdHVyZS4gIE5vdGUgdGhhdCB0aGlzIG1lbW9yeSB3aWxsIGJlCkBAIC02NjMsMTQgKzY5NywyMSBAQAogCWRwYy0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKIAlkcGMtPmNvbnRleHQgPSBjb250ZXh0OwogCi0JSU5JVF9XT1JLKCZkcGMtPndvcmssIGFjcGlfb3NfZXhlY3V0ZV9kZWZlcnJlZCk7Ci0JaWYgKCFxdWV1ZV93b3JrKGthY3BpZF93cSwgJmRwYy0+d29yaykpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKKwlpZiAodHlwZSA9PSBPU0xfTk9USUZZX0hBTkRMRVIpIHsKKwkJSU5JVF9XT1JLKCZkcGMtPndvcmssIGFjcGlfb3NfZXhlY3V0ZV9ub3RpZnkpOworCQlpZiAoIXF1ZXVlX3dvcmsoa2FjcGlfbm90aWZ5X3dxLCAmZHBjLT53b3JrKSkgeworCQkJc3RhdHVzID0gQUVfRVJST1I7CisJCQlrZnJlZShkcGMpOworCQl9CisJfSBlbHNlIHsKKwkJSU5JVF9XT1JLKCZkcGMtPndvcmssIGFjcGlfb3NfZXhlY3V0ZV9kZWZlcnJlZCk7CisJCWlmICghcXVldWVfd29yayhrYWNwaWRfd3EsICZkcGMtPndvcmspKSB7CisJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAogCQkJCSAgIkNhbGwgdG8gcXVldWVfd29yaygpIGZhaWxlZC5cbiIpKTsKLQkJa2ZyZWUoZHBjKTsKLQkJc3RhdHVzID0gQUVfRVJST1I7CisJCQlzdGF0dXMgPSBBRV9FUlJPUjsKKwkJCWtmcmVlKGRwYyk7CisJCX0KIAl9Ci0KIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtOTM2LDIwICs5NzcsMzggQEAKIAogX19zZXR1cCgiYWNwaV9vc19uYW1lPSIsIGFjcGlfb3NfbmFtZV9zZXR1cCk7CiAKK3N0YXRpYyB2b2lkIGVuYWJsZV9vc2lfbGludXgoaW50IGVuYWJsZSkgeworCisJaWYgKG9zaV9saW51eCAhPSBlbmFibGUpCisJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICIlc2FibGVkIF9PU0koTGludXgpXG4iLAorCQkJZW5hYmxlID8gIkVuIjogIkRpcyIpOworCisJb3NpX2xpbnV4ID0gZW5hYmxlOworCXJldHVybjsKK30KKwogLyoKLSAqIF9PU0kgY29udHJvbAorICogTW9kaWZ5IHRoZSBsaXN0IG9mICJPUyBJbnRlcmZhY2VzIiByZXBvcnRlZCB0byBCSU9TIHZpYSBfT1NJCisgKgogICogZW1wdHkgc3RyaW5nIGRpc2FibGVzIF9PU0kKLSAqIFRCRCBhZGRpdGlvbmFsIHN0cmluZyBhZGRzIHRvIF9PU0kKKyAqIHN0cmluZyBzdGFydGluZyB3aXRoICchJyBkaXNhYmxlcyB0aGF0IHN0cmluZworICogb3RoZXJ3aXNlIHN0cmluZyBpcyBhZGRlZCB0byBsaXN0LCBhdWdtZW50aW5nIGJ1aWx0LWluIHN0cmluZ3MKICAqLwogc3RhdGljIGludCBfX2luaXQgYWNwaV9vc2lfc2V0dXAoY2hhciAqc3RyKQogewogCWlmIChzdHIgPT0gTlVMTCB8fCAqc3RyID09ICdcMCcpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIl9PU0kgbWV0aG9kIGRpc2FibGVkXG4iKTsKIAkJYWNwaV9nYmxfY3JlYXRlX29zaV9tZXRob2QgPSBGQUxTRTsKLQl9IGVsc2UgewotCQkvKiBUQkQgKi8KLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiX09TSSBhZGRpdGlvbmFsIHN0cmluZyBpZ25vcmVkIC0tICVzXG4iLAotCQkgICAgICAgc3RyKTsKKwl9IGVsc2UgaWYgKCpzdHIgPT0gJyEnKSB7CisJCWlmIChhY3BpX29zaV9pbnZhbGlkYXRlKCsrc3RyKSA9PSBBRV9PSykKKwkJCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJEZWxldGVkIF9PU0koJXMpXG4iLCBzdHIpOworCX0gZWxzZSBpZiAoIXN0cmNtcCgiIUxpbnV4Iiwgc3RyKSkgeworCQllbmFibGVfb3NpX2xpbnV4KDApOworCX0gZWxzZSBpZiAoIXN0cmNtcCgiTGludXgiLCBzdHIpKSB7CisJCWVuYWJsZV9vc2lfbGludXgoMSk7CisJfSBlbHNlIGlmICgqb3NpX2FkZGl0aW9uYWxfc3RyaW5nID09ICdcMCcpIHsKKwkJc3RybmNweShvc2lfYWRkaXRpb25hbF9zdHJpbmcsIHN0ciwgT1NJX1NUUklOR19MRU5HVEhfTUFYKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkFkZGVkIF9PU0koJXMpXG4iLCBzdHIpOwogCX0KIAogCXJldHVybiAxOwpAQCAtMTExOSwxMSArMTE3OCwyOCBAQAogYWNwaV9zdGF0dXMKIGFjcGlfb3NfdmFsaWRhdGVfaW50ZXJmYWNlIChjaGFyICppbnRlcmZhY2UpCiB7Ci0KLSAgICByZXR1cm4gQUVfU1VQUE9SVDsKKwlpZiAoIXN0cm5jbXAob3NpX2FkZGl0aW9uYWxfc3RyaW5nLCBpbnRlcmZhY2UsIE9TSV9TVFJJTkdfTEVOR1RIX01BWCkpCisJCXJldHVybiBBRV9PSzsKKwlpZiAoIXN0cmNtcCgiTGludXgiLCBpbnRlcmZhY2UpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCisJCQkiU3lzdGVtIEJJT1MgaXMgcmVxdWVzdGluZyBfT1NJKExpbnV4KVxuIik7CisjaWZkZWYJT1NJX0xJTlVYX0VOQUJMRUQKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKKwkJCSJQbGVhc2UgdGVzdCB3aXRoIFwiYWNwaV9vc2k9IUxpbnV4XCJcbiIKKwkJCSJQbGVhc2Ugc2VuZCBkbWlkZWNvZGUgIgorCQkJInRvIGxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnXG4iKTsKKyNlbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCisJCQkiSWYgXCJhY3BpX29zaT1MaW51eFwiIHdvcmtzIGJldHRlcixcbiIKKwkJCSJQbGVhc2Ugc2VuZCBkbWlkZWNvZGUgIgorCQkJInRvIGxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnXG4iKTsKKyNlbmRpZgorCQlpZihvc2lfbGludXgpCisJCQlyZXR1cm4gQUVfT0s7CisJfQorCXJldHVybiBBRV9TVVBQT1JUOwogfQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9vc192YWxpZGF0ZV9hZGRyZXNzCkBAIC0xMTUwLDUgKzEyMjYsNTEgQEAKICAgICByZXR1cm4gQUVfT0s7CiB9CiAKKyNpZmRlZiBDT05GSUdfRE1JCisjaWZkZWYJT1NJX0xJTlVYX0VOQUJMRUQKK3N0YXRpYyBpbnQgZG1pX29zaV9ub3RfbGludXgoc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBkZXRlY3RlZDogcmVxdWlyZXMgbm90IF9PU0koTGludXgpXG4iLCBkLT5pZGVudCk7CisJZW5hYmxlX29zaV9saW51eCgwKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW50IGRtaV9vc2lfbGludXgoc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBkZXRlY3RlZDogcmVxdWlyZXMgX09TSShMaW51eClcbiIsIGQtPmlkZW50KTsKKwllbmFibGVfb3NpX2xpbnV4KDEpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBhY3BpX29zbF9kbWlfdGFibGVbXSBfX2luaXRkYXRhID0geworI2lmZGVmCU9TSV9MSU5VWF9FTkFCTEVECisJLyoKKwkgKiBCb3hlcyB0aGF0IG5lZWQgTk9UIF9PU0koTGludXgpCisJICovCisJeworCSAuY2FsbGJhY2sgPSBkbWlfb3NpX25vdF9saW51eCwKKwkgLmlkZW50ID0gIlRvc2hpYmEgU2F0ZWxsaXRlIFAxMDAiLAorCSAubWF0Y2hlcyA9IHsKKwkJICAgICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIlRPU0hJQkEiKSwKKwkJICAgICBETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJTYXRlbGxpdGUgUDEwMCIpLAorCQkgICAgIH0sCisJIH0sCisjZWxzZQorCS8qCisJICogQm94ZXMgdGhhdCBuZWVkIF9PU0koTGludXgpCisJICovCisJeworCSAuY2FsbGJhY2sgPSBkbWlfb3NpX2xpbnV4LAorCSAuaWRlbnQgPSAiSW50ZWwgTmFwYSBDUkIiLAorCSAubWF0Y2hlcyA9IHsKKwkJICAgICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkludGVsIENvcnBvcmF0aW9uIiksCisJCSAgICAgRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTVBBRC1NU0FFIEN1c3RvbWVyIFJlZmVyZW5jZSBCb2FyZHMiKSwKKwkJICAgICB9LAorCSB9LAorI2VuZGlmCisJe30KK307CisjZW5kaWYgLyogQ09ORklHX0RNSSAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNvcGNvZGUuYyBiL2RyaXZlcnMvYWNwaS9wYXJzZXIvcHNvcGNvZGUuYwppbmRleCAxNmQ4YjZjLi45Mjk2ZTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGFyc2VyL3Bzb3Bjb2RlLmMKKysrIGIvZHJpdmVycy9hY3BpL3BhcnNlci9wc29wY29kZS5jCkBAIC0xODUsNDU5ICsxODUsNDUzIEBACiAvKiBJbmRleCAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgUGFyc2VyIEFyZ3MgICAgICAgICAgICAgICBJbnRlcnByZXRlciBBcmdzICAgICAgICAgICAgICAgIE9iamVjdFR5cGUgICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICBGbGFncyAqLwogCiAvKiAwMCAqLyBBQ1BJX09QKCJaZXJvIiwgQVJHUF9aRVJPX09QLCBBUkdJX1pFUk9fT1AsIEFDUElfVFlQRV9JTlRFR0VSLAotCQkJIEFNTF9DTEFTU19BUkdVTUVOVCwgQU1MX1RZUEVfQ09OU1RBTlQsIEFNTF9DT05TVEFOVCksCisJCSBBTUxfQ0xBU1NfQVJHVU1FTlQsIEFNTF9UWVBFX0NPTlNUQU5ULCBBTUxfQ09OU1RBTlQpLAogLyogMDEgKi8gQUNQSV9PUCgiT25lIiwgQVJHUF9PTkVfT1AsIEFSR0lfT05FX09QLCBBQ1BJX1RZUEVfSU5URUdFUiwKLQkJCSBBTUxfQ0xBU1NfQVJHVU1FTlQsIEFNTF9UWVBFX0NPTlNUQU5ULCBBTUxfQ09OU1RBTlQpLAorCQkgQU1MX0NMQVNTX0FSR1VNRU5ULCBBTUxfVFlQRV9DT05TVEFOVCwgQU1MX0NPTlNUQU5UKSwKIC8qIDAyICovIEFDUElfT1AoIkFsaWFzIiwgQVJHUF9BTElBU19PUCwgQVJHSV9BTElBU19PUCwKLQkJCSBBQ1BJX1RZUEVfTE9DQUxfQUxJQVMsIEFNTF9DTEFTU19OQU1FRF9PQkpFQ1QsCi0JCQkgQU1MX1RZUEVfTkFNRURfU0lNUExFLAotCQkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8Ci0JCQkgQU1MX05TTk9ERSB8IEFNTF9OQU1FRCksCisJCSBBQ1BJX1RZUEVfTE9DQUxfQUxJQVMsIEFNTF9DTEFTU19OQU1FRF9PQkpFQ1QsCisJCSBBTUxfVFlQRV9OQU1FRF9TSU1QTEUsCisJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNPUENPREUgfAorCQkgQU1MX05TTk9ERSB8IEFNTF9OQU1FRCksCiAvKiAwMyAqLyBBQ1BJX09QKCJOYW1lIiwgQVJHUF9OQU1FX09QLCBBUkdJX05BTUVfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX05BTUVEX09CSkVDVCwgQU1MX1RZUEVfTkFNRURfQ09NUExFWCwKLQkJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNPUENPREUgfAotCQkJIEFNTF9OU05PREUgfCBBTUxfTkFNRUQpLAorCQkgQU1MX0NMQVNTX05BTUVEX09CSkVDVCwgQU1MX1RZUEVfTkFNRURfQ09NUExFWCwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8CisJCSBBTUxfTlNOT0RFIHwgQU1MX05BTUVEKSwKIC8qIDA0ICovIEFDUElfT1AoIkJ5dGVDb25zdCIsIEFSR1BfQllURV9PUCwgQVJHSV9CWVRFX09QLAotCQkJIEFDUElfVFlQRV9JTlRFR0VSLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCi0JCQkgQU1MX1RZUEVfTElURVJBTCwgQU1MX0NPTlNUQU5UKSwKKwkJIEFDUElfVFlQRV9JTlRFR0VSLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCisJCSBBTUxfVFlQRV9MSVRFUkFMLCBBTUxfQ09OU1RBTlQpLAogLyogMDUgKi8gQUNQSV9PUCgiV29yZENvbnN0IiwgQVJHUF9XT1JEX09QLCBBUkdJX1dPUkRfT1AsCi0JCQkgQUNQSV9UWVBFX0lOVEVHRVIsIEFNTF9DTEFTU19BUkdVTUVOVCwKLQkJCSBBTUxfVFlQRV9MSVRFUkFMLCBBTUxfQ09OU1RBTlQpLAorCQkgQUNQSV9UWVBFX0lOVEVHRVIsIEFNTF9DTEFTU19BUkdVTUVOVCwKKwkJIEFNTF9UWVBFX0xJVEVSQUwsIEFNTF9DT05TVEFOVCksCiAvKiAwNiAqLyBBQ1BJX09QKCJEd29yZENvbnN0IiwgQVJHUF9EV09SRF9PUCwgQVJHSV9EV09SRF9PUCwKLQkJCSBBQ1BJX1RZUEVfSU5URUdFUiwgQU1MX0NMQVNTX0FSR1VNRU5ULAotCQkJIEFNTF9UWVBFX0xJVEVSQUwsIEFNTF9DT05TVEFOVCksCisJCSBBQ1BJX1RZUEVfSU5URUdFUiwgQU1MX0NMQVNTX0FSR1VNRU5ULAorCQkgQU1MX1RZUEVfTElURVJBTCwgQU1MX0NPTlNUQU5UKSwKIC8qIDA3ICovIEFDUElfT1AoIlN0cmluZyIsIEFSR1BfU1RSSU5HX09QLCBBUkdJX1NUUklOR19PUCwKLQkJCSBBQ1BJX1RZUEVfU1RSSU5HLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCi0JCQkgQU1MX1RZUEVfTElURVJBTCwgQU1MX0NPTlNUQU5UKSwKKwkJIEFDUElfVFlQRV9TVFJJTkcsIEFNTF9DTEFTU19BUkdVTUVOVCwKKwkJIEFNTF9UWVBFX0xJVEVSQUwsIEFNTF9DT05TVEFOVCksCiAvKiAwOCAqLyBBQ1BJX09QKCJTY29wZSIsIEFSR1BfU0NPUEVfT1AsIEFSR0lfU0NPUEVfT1AsCi0JCQkgQUNQSV9UWVBFX0xPQ0FMX1NDT1BFLCBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULAotCQkJIEFNTF9UWVBFX05BTUVEX05PX09CSiwKLQkJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNPUENPREUgfAotCQkJIEFNTF9OU05PREUgfCBBTUxfTkFNRUQpLAorCQkgQUNQSV9UWVBFX0xPQ0FMX1NDT1BFLCBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULAorCQkgQU1MX1RZUEVfTkFNRURfTk9fT0JKLAorCQkgQU1MX0hBU19BUkdTIHwgQU1MX05TT0JKRUNUIHwgQU1MX05TT1BDT0RFIHwKKwkJIEFNTF9OU05PREUgfCBBTUxfTkFNRUQpLAogLyogMDkgKi8gQUNQSV9PUCgiQnVmZmVyIiwgQVJHUF9CVUZGRVJfT1AsIEFSR0lfQlVGRkVSX09QLAotCQkJIEFDUElfVFlQRV9CVUZGRVIsIEFNTF9DTEFTU19DUkVBVEUsCi0JCQkgQU1MX1RZUEVfQ1JFQVRFX09CSkVDVCwKLQkJCSBBTUxfSEFTX0FSR1MgfCBBTUxfREVGRVIgfCBBTUxfQ09OU1RBTlQpLAorCQkgQUNQSV9UWVBFX0JVRkZFUiwgQU1MX0NMQVNTX0NSRUFURSwKKwkJIEFNTF9UWVBFX0NSRUFURV9PQkpFQ1QsCisJCSBBTUxfSEFTX0FSR1MgfCBBTUxfREVGRVIgfCBBTUxfQ09OU1RBTlQpLAogLyogMEEgKi8gQUNQSV9PUCgiUGFja2FnZSIsIEFSR1BfUEFDS0FHRV9PUCwgQVJHSV9QQUNLQUdFX09QLAotCQkJIEFDUElfVFlQRV9QQUNLQUdFLCBBTUxfQ0xBU1NfQ1JFQVRFLAotCQkJIEFNTF9UWVBFX0NSRUFURV9PQkpFQ1QsCi0JCQkgQU1MX0hBU19BUkdTIHwgQU1MX0RFRkVSIHwgQU1MX0NPTlNUQU5UKSwKKwkJIEFDUElfVFlQRV9QQUNLQUdFLCBBTUxfQ0xBU1NfQ1JFQVRFLAorCQkgQU1MX1RZUEVfQ1JFQVRFX09CSkVDVCwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9ERUZFUiB8IEFNTF9DT05TVEFOVCksCiAvKiAwQiAqLyBBQ1BJX09QKCJNZXRob2QiLCBBUkdQX01FVEhPRF9PUCwgQVJHSV9NRVRIT0RfT1AsCi0JCQkgQUNQSV9UWVBFX01FVEhPRCwgQU1MX0NMQVNTX05BTUVEX09CSkVDVCwKLQkJCSBBTUxfVFlQRV9OQU1FRF9DT01QTEVYLAotCQkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8Ci0JCQkgQU1MX05TTk9ERSB8IEFNTF9OQU1FRCB8IEFNTF9ERUZFUiksCisJCSBBQ1BJX1RZUEVfTUVUSE9ELCBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULAorCQkgQU1MX1RZUEVfTkFNRURfQ09NUExFWCwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8CisJCSBBTUxfTlNOT0RFIHwgQU1MX05BTUVEIHwgQU1MX0RFRkVSKSwKIC8qIDBDICovIEFDUElfT1AoIkxvY2FsMCIsIEFSR1BfTE9DQUwwLCBBUkdJX0xPQ0FMMCwKLQkJCSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCi0JCQkgQU1MX1RZUEVfTE9DQUxfVkFSSUFCTEUsIDApLAorCQkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSwgQU1MX0NMQVNTX0FSR1VNRU5ULAorCQkgQU1MX1RZUEVfTE9DQUxfVkFSSUFCTEUsIDApLAogLyogMEQgKi8gQUNQSV9PUCgiTG9jYWwxIiwgQVJHUF9MT0NBTDEsIEFSR0lfTE9DQUwxLAotCQkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKLQkJCSBBTUxfVFlQRV9MT0NBTF9WQVJJQUJMRSwgMCksCisJCSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCisJCSBBTUxfVFlQRV9MT0NBTF9WQVJJQUJMRSwgMCksCiAvKiAwRSAqLyBBQ1BJX09QKCJMb2NhbDIiLCBBUkdQX0xPQ0FMMiwgQVJHSV9MT0NBTDIsCi0JCQkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSwgQU1MX0NMQVNTX0FSR1VNRU5ULAotCQkJIEFNTF9UWVBFX0xPQ0FMX1ZBUklBQkxFLCAwKSwKKwkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKKwkJIEFNTF9UWVBFX0xPQ0FMX1ZBUklBQkxFLCAwKSwKIC8qIDBGICovIEFDUElfT1AoIkxvY2FsMyIsIEFSR1BfTE9DQUwzLCBBUkdJX0xPQ0FMMywKLQkJCSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCi0JCQkgQU1MX1RZUEVfTE9DQUxfVkFSSUFCTEUsIDApLAorCQkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSwgQU1MX0NMQVNTX0FSR1VNRU5ULAorCQkgQU1MX1RZUEVfTE9DQUxfVkFSSUFCTEUsIDApLAogLyogMTAgKi8gQUNQSV9PUCgiTG9jYWw0IiwgQVJHUF9MT0NBTDQsIEFSR0lfTE9DQUw0LAotCQkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKLQkJCSBBTUxfVFlQRV9MT0NBTF9WQVJJQUJMRSwgMCksCisJCSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCisJCSBBTUxfVFlQRV9MT0NBTF9WQVJJQUJMRSwgMCksCiAvKiAxMSAqLyBBQ1BJX09QKCJMb2NhbDUiLCBBUkdQX0xPQ0FMNSwgQVJHSV9MT0NBTDUsCi0JCQkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSwgQU1MX0NMQVNTX0FSR1VNRU5ULAotCQkJIEFNTF9UWVBFX0xPQ0FMX1ZBUklBQkxFLCAwKSwKKwkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKKwkJIEFNTF9UWVBFX0xPQ0FMX1ZBUklBQkxFLCAwKSwKIC8qIDEyICovIEFDUElfT1AoIkxvY2FsNiIsIEFSR1BfTE9DQUw2LCBBUkdJX0xPQ0FMNiwKLQkJCSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCi0JCQkgQU1MX1RZUEVfTE9DQUxfVkFSSUFCTEUsIDApLAorCQkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSwgQU1MX0NMQVNTX0FSR1VNRU5ULAorCQkgQU1MX1RZUEVfTE9DQUxfVkFSSUFCTEUsIDApLAogLyogMTMgKi8gQUNQSV9PUCgiTG9jYWw3IiwgQVJHUF9MT0NBTDcsIEFSR0lfTE9DQUw3LAotCQkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKLQkJCSBBTUxfVFlQRV9MT0NBTF9WQVJJQUJMRSwgMCksCisJCSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCisJCSBBTUxfVFlQRV9MT0NBTF9WQVJJQUJMRSwgMCksCiAvKiAxNCAqLyBBQ1BJX09QKCJBcmcwIiwgQVJHUF9BUkcwLCBBUkdJX0FSRzAsCi0JCQkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSwgQU1MX0NMQVNTX0FSR1VNRU5ULAotCQkJIEFNTF9UWVBFX01FVEhPRF9BUkdVTUVOVCwgMCksCisJCSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCisJCSBBTUxfVFlQRV9NRVRIT0RfQVJHVU1FTlQsIDApLAogLyogMTUgKi8gQUNQSV9PUCgiQXJnMSIsIEFSR1BfQVJHMSwgQVJHSV9BUkcxLAotCQkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKLQkJCSBBTUxfVFlQRV9NRVRIT0RfQVJHVU1FTlQsIDApLAorCQkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSwgQU1MX0NMQVNTX0FSR1VNRU5ULAorCQkgQU1MX1RZUEVfTUVUSE9EX0FSR1VNRU5ULCAwKSwKIC8qIDE2ICovIEFDUElfT1AoIkFyZzIiLCBBUkdQX0FSRzIsIEFSR0lfQVJHMiwKLQkJCSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCi0JCQkgQU1MX1RZUEVfTUVUSE9EX0FSR1VNRU5ULCAwKSwKKwkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKKwkJIEFNTF9UWVBFX01FVEhPRF9BUkdVTUVOVCwgMCksCiAvKiAxNyAqLyBBQ1BJX09QKCJBcmczIiwgQVJHUF9BUkczLCBBUkdJX0FSRzMsCi0JCQkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSwgQU1MX0NMQVNTX0FSR1VNRU5ULAotCQkJIEFNTF9UWVBFX01FVEhPRF9BUkdVTUVOVCwgMCksCisJCSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCisJCSBBTUxfVFlQRV9NRVRIT0RfQVJHVU1FTlQsIDApLAogLyogMTggKi8gQUNQSV9PUCgiQXJnNCIsIEFSR1BfQVJHNCwgQVJHSV9BUkc0LAotCQkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKLQkJCSBBTUxfVFlQRV9NRVRIT0RfQVJHVU1FTlQsIDApLAorCQkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSwgQU1MX0NMQVNTX0FSR1VNRU5ULAorCQkgQU1MX1RZUEVfTUVUSE9EX0FSR1VNRU5ULCAwKSwKIC8qIDE5ICovIEFDUElfT1AoIkFyZzUiLCBBUkdQX0FSRzUsIEFSR0lfQVJHNSwKLQkJCSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCi0JCQkgQU1MX1RZUEVfTUVUSE9EX0FSR1VNRU5ULCAwKSwKKwkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKKwkJIEFNTF9UWVBFX01FVEhPRF9BUkdVTUVOVCwgMCksCiAvKiAxQSAqLyBBQ1BJX09QKCJBcmc2IiwgQVJHUF9BUkc2LCBBUkdJX0FSRzYsCi0JCQkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSwgQU1MX0NMQVNTX0FSR1VNRU5ULAotCQkJIEFNTF9UWVBFX01FVEhPRF9BUkdVTUVOVCwgMCksCisJCSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCisJCSBBTUxfVFlQRV9NRVRIT0RfQVJHVU1FTlQsIDApLAogLyogMUIgKi8gQUNQSV9PUCgiU3RvcmUiLCBBUkdQX1NUT1JFX09QLCBBUkdJX1NUT1JFX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzFUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzFBXzFUXzFSKSwKKwkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzFUXzFSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMVRfMVIpLAogLyogMUMgKi8gQUNQSV9PUCgiUmVmT2YiLCBBUkdQX1JFRl9PRl9PUCwgQVJHSV9SRUZfT0ZfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMUFfMFRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMVIpLAorCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMUFfMFRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18xQV8wVF8xUiksCiAvKiAxRCAqLyBBQ1BJX09QKCJBZGQiLCBBUkdQX0FERF9PUCwgQVJHSV9BRERfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMkFfMVRfMVIgfCBBTUxfTUFUSCB8IEFNTF9DT05TVEFOVCksCisJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzJBXzFUXzFSIHwgQU1MX01BVEggfCBBTUxfQ09OU1RBTlQpLAogLyogMUUgKi8gQUNQSV9PUCgiQ29uY2F0ZW5hdGUiLCBBUkdQX0NPTkNBVF9PUCwgQVJHSV9DT05DQVRfT1AsCi0JCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0VYRUNVVEUsCi0JCQkgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9DT05TVEFOVCksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9DT05TVEFOVCksCiAvKiAxRiAqLyBBQ1BJX09QKCJTdWJ0cmFjdCIsIEFSR1BfU1VCVFJBQ1RfT1AsIEFSR0lfU1VCVFJBQ1RfT1AsCi0JCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0VYRUNVVEUsCi0JCQkgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9NQVRIIHwgQU1MX0NPTlNUQU5UKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAorCQkgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzJBXzFUXzFSIHwgQU1MX01BVEggfCBBTUxfQ09OU1RBTlQpLAogLyogMjAgKi8gQUNQSV9PUCgiSW5jcmVtZW50IiwgQVJHUF9JTkNSRU1FTlRfT1AsIEFSR0lfSU5DUkVNRU5UX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMUFfMFRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMVIgfCBBTUxfQ09OU1RBTlQpLAorCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0VYRUNVVEUsCisJCSBBTUxfVFlQRV9FWEVDXzFBXzBUXzFSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMVIgfCBBTUxfQ09OU1RBTlQpLAogLyogMjEgKi8gQUNQSV9PUCgiRGVjcmVtZW50IiwgQVJHUF9ERUNSRU1FTlRfT1AsIEFSR0lfREVDUkVNRU5UX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMUFfMFRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMVIgfCBBTUxfQ09OU1RBTlQpLAorCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0VYRUNVVEUsCisJCSBBTUxfVFlQRV9FWEVDXzFBXzBUXzFSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMVIgfCBBTUxfQ09OU1RBTlQpLAogLyogMjIgKi8gQUNQSV9PUCgiTXVsdGlwbHkiLCBBUkdQX01VTFRJUExZX09QLCBBUkdJX01VTFRJUExZX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMkFfMVRfMVIgfCBBTUxfTUFUSCB8IEFNTF9DT05TVEFOVCksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9NQVRIIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDIzICovIEFDUElfT1AoIkRpdmlkZSIsIEFSR1BfRElWSURFX09QLCBBUkdJX0RJVklERV9PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKLQkJCSBBTUxfVFlQRV9FWEVDXzJBXzJUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzJBXzJUXzFSIHwgQU1MX0NPTlNUQU5UKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAorCQkgQU1MX1RZUEVfRVhFQ18yQV8yVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzJBXzJUXzFSIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDI0ICovIEFDUElfT1AoIlNoaWZ0TGVmdCIsIEFSR1BfU0hJRlRfTEVGVF9PUCwgQVJHSV9TSElGVF9MRUZUX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMkFfMVRfMVIgfCBBTUxfTUFUSCB8IEFNTF9DT05TVEFOVCksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9NQVRIIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDI1ICovIEFDUElfT1AoIlNoaWZ0UmlnaHQiLCBBUkdQX1NISUZUX1JJR0hUX09QLCBBUkdJX1NISUZUX1JJR0hUX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMkFfMVRfMVIgfCBBTUxfTUFUSCB8IEFNTF9DT05TVEFOVCksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9NQVRIIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDI2ICovIEFDUElfT1AoIkFuZCIsIEFSR1BfQklUX0FORF9PUCwgQVJHSV9CSVRfQU5EX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzJBXzFUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzJBXzFUXzFSIHwgQU1MX01BVEggfCBBTUxfQ09OU1RBTlQpLAorCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9NQVRIIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDI3ICovIEFDUElfT1AoIk5BbmQiLCBBUkdQX0JJVF9OQU5EX09QLCBBUkdJX0JJVF9OQU5EX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMkFfMVRfMVIgfCBBTUxfTUFUSCB8IEFNTF9DT05TVEFOVCksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9NQVRIIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDI4ICovIEFDUElfT1AoIk9yIiwgQVJHUF9CSVRfT1JfT1AsIEFSR0lfQklUX09SX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzJBXzFUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzJBXzFUXzFSIHwgQU1MX01BVEggfCBBTUxfQ09OU1RBTlQpLAorCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9NQVRIIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDI5ICovIEFDUElfT1AoIk5PciIsIEFSR1BfQklUX05PUl9PUCwgQVJHSV9CSVRfTk9SX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzJBXzFUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzJBXzFUXzFSIHwgQU1MX01BVEggfCBBTUxfQ09OU1RBTlQpLAorCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9NQVRIIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDJBICovIEFDUElfT1AoIlhPciIsIEFSR1BfQklUX1hPUl9PUCwgQVJHSV9CSVRfWE9SX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzJBXzFUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzJBXzFUXzFSIHwgQU1MX01BVEggfCBBTUxfQ09OU1RBTlQpLAorCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMkFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9NQVRIIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDJCICovIEFDUElfT1AoIk5vdCIsIEFSR1BfQklUX05PVF9PUCwgQVJHSV9CSVRfTk9UX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzFUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzFBXzFUXzFSIHwgQU1MX0NPTlNUQU5UKSwKKwkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzFUXzFSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMVRfMVIgfCBBTUxfQ09OU1RBTlQpLAogLyogMkMgKi8gQUNQSV9PUCgiRmluZFNldExlZnRCaXQiLCBBUkdQX0ZJTkRfU0VUX0xFRlRfQklUX09QLAotCQkJIEFSR0lfRklORF9TRVRfTEVGVF9CSVRfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMUFfMVRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMVRfMVIgfCBBTUxfQ09OU1RBTlQpLAorCQkgQVJHSV9GSU5EX1NFVF9MRUZUX0JJVF9PUCwgQUNQSV9UWVBFX0FOWSwKKwkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzFUXzFSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMVRfMVIgfCBBTUxfQ09OU1RBTlQpLAogLyogMkQgKi8gQUNQSV9PUCgiRmluZFNldFJpZ2h0Qml0IiwgQVJHUF9GSU5EX1NFVF9SSUdIVF9CSVRfT1AsCi0JCQkgQVJHSV9GSU5EX1NFVF9SSUdIVF9CSVRfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMUFfMVRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMVRfMVIgfCBBTUxfQ09OU1RBTlQpLAorCQkgQVJHSV9GSU5EX1NFVF9SSUdIVF9CSVRfT1AsIEFDUElfVFlQRV9BTlksCisJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18xQV8xVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzFBXzFUXzFSIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDJFICovIEFDUElfT1AoIkRlcmVmT2YiLCBBUkdQX0RFUkVGX09GX09QLCBBUkdJX0RFUkVGX09GX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMUFfMFRfMVIsIEFNTF9GTEFHU19FWEVDXzFBXzBUXzFSKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAorCQkgQU1MX1RZUEVfRVhFQ18xQV8wVF8xUiwgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMVIpLAogLyogMkYgKi8gQUNQSV9PUCgiTm90aWZ5IiwgQVJHUF9OT1RJRllfT1AsIEFSR0lfTk9USUZZX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMkFfMFRfMFIsIEFNTF9GTEFHU19FWEVDXzJBXzBUXzBSKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAorCQkgQU1MX1RZUEVfRVhFQ18yQV8wVF8wUiwgQU1MX0ZMQUdTX0VYRUNfMkFfMFRfMFIpLAogLyogMzAgKi8gQUNQSV9PUCgiU2l6ZU9mIiwgQVJHUF9TSVpFX09GX09QLCBBUkdJX1NJWkVfT0ZfT1AsCi0JCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0VYRUNVVEUsCi0JCQkgQU1MX1RZUEVfRVhFQ18xQV8wVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18xQV8wVF8xUiB8IEFNTF9OT19PUEVSQU5EX1JFU09MVkUpLAorCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0VYRUNVVEUsCisJCSBBTUxfVFlQRV9FWEVDXzFBXzBUXzFSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMVIgfCBBTUxfTk9fT1BFUkFORF9SRVNPTFZFKSwKIC8qIDMxICovIEFDUElfT1AoIkluZGV4IiwgQVJHUF9JTkRFWF9PUCwgQVJHSV9JTkRFWF9PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiksCisJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzJBXzFUXzFSKSwKIC8qIDMyICovIEFDUElfT1AoIk1hdGNoIiwgQVJHUF9NQVRDSF9PUCwgQVJHSV9NQVRDSF9PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ182QV8wVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ182QV8wVF8xUiB8IEFNTF9DT05TVEFOVCksCisJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ182QV8wVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzZBXzBUXzFSIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDMzICovIEFDUElfT1AoIkNyZWF0ZURXb3JkRmllbGQiLCBBUkdQX0NSRUFURV9EV09SRF9GSUVMRF9PUCwKLQkJCSBBUkdJX0NSRUFURV9EV09SRF9GSUVMRF9PUCwKLQkJCSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxELCBBTUxfQ0xBU1NfQ1JFQVRFLAotCQkJIEFNTF9UWVBFX0NSRUFURV9GSUVMRCwKLQkJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNOT0RFIHwKLQkJCSBBTUxfREVGRVIgfCBBTUxfQ1JFQVRFKSwKKwkJIEFSR0lfQ1JFQVRFX0RXT1JEX0ZJRUxEX09QLAorCQkgQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCwgQU1MX0NMQVNTX0NSRUFURSwKKwkJIEFNTF9UWVBFX0NSRUFURV9GSUVMRCwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU05PREUgfAorCQkgQU1MX0RFRkVSIHwgQU1MX0NSRUFURSksCiAvKiAzNCAqLyBBQ1BJX09QKCJDcmVhdGVXb3JkRmllbGQiLCBBUkdQX0NSRUFURV9XT1JEX0ZJRUxEX09QLAotCQkJIEFSR0lfQ1JFQVRFX1dPUkRfRklFTERfT1AsCi0JCQkgQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCwgQU1MX0NMQVNTX0NSRUFURSwKLQkJCSBBTUxfVFlQRV9DUkVBVEVfRklFTEQsCi0JCQkgQU1MX0hBU19BUkdTIHwgQU1MX05TT0JKRUNUIHwgQU1MX05TTk9ERSB8Ci0JCQkgQU1MX0RFRkVSIHwgQU1MX0NSRUFURSksCisJCSBBUkdJX0NSRUFURV9XT1JEX0ZJRUxEX09QLAorCQkgQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCwgQU1MX0NMQVNTX0NSRUFURSwKKwkJIEFNTF9UWVBFX0NSRUFURV9GSUVMRCwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU05PREUgfAorCQkgQU1MX0RFRkVSIHwgQU1MX0NSRUFURSksCiAvKiAzNSAqLyBBQ1BJX09QKCJDcmVhdGVCeXRlRmllbGQiLCBBUkdQX0NSRUFURV9CWVRFX0ZJRUxEX09QLAotCQkJIEFSR0lfQ1JFQVRFX0JZVEVfRklFTERfT1AsCi0JCQkgQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCwgQU1MX0NMQVNTX0NSRUFURSwKLQkJCSBBTUxfVFlQRV9DUkVBVEVfRklFTEQsCi0JCQkgQU1MX0hBU19BUkdTIHwgQU1MX05TT0JKRUNUIHwgQU1MX05TTk9ERSB8Ci0JCQkgQU1MX0RFRkVSIHwgQU1MX0NSRUFURSksCisJCSBBUkdJX0NSRUFURV9CWVRFX0ZJRUxEX09QLAorCQkgQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCwgQU1MX0NMQVNTX0NSRUFURSwKKwkJIEFNTF9UWVBFX0NSRUFURV9GSUVMRCwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU05PREUgfAorCQkgQU1MX0RFRkVSIHwgQU1MX0NSRUFURSksCiAvKiAzNiAqLyBBQ1BJX09QKCJDcmVhdGVCaXRGaWVsZCIsIEFSR1BfQ1JFQVRFX0JJVF9GSUVMRF9PUCwKLQkJCSBBUkdJX0NSRUFURV9CSVRfRklFTERfT1AsCi0JCQkgQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCwgQU1MX0NMQVNTX0NSRUFURSwKLQkJCSBBTUxfVFlQRV9DUkVBVEVfRklFTEQsCi0JCQkgQU1MX0hBU19BUkdTIHwgQU1MX05TT0JKRUNUIHwgQU1MX05TTk9ERSB8Ci0JCQkgQU1MX0RFRkVSIHwgQU1MX0NSRUFURSksCisJCSBBUkdJX0NSRUFURV9CSVRfRklFTERfT1AsCisJCSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxELCBBTUxfQ0xBU1NfQ1JFQVRFLAorCQkgQU1MX1RZUEVfQ1JFQVRFX0ZJRUxELAorCQkgQU1MX0hBU19BUkdTIHwgQU1MX05TT0JKRUNUIHwgQU1MX05TTk9ERSB8CisJCSBBTUxfREVGRVIgfCBBTUxfQ1JFQVRFKSwKIC8qIDM3ICovIEFDUElfT1AoIk9iamVjdFR5cGUiLCBBUkdQX1RZUEVfT1AsIEFSR0lfVFlQRV9PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKLQkJCSBBTUxfVFlQRV9FWEVDXzFBXzBUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzFBXzBUXzFSIHwgQU1MX05PX09QRVJBTkRfUkVTT0xWRSksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMUFfMFRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18xQV8wVF8xUiB8IEFNTF9OT19PUEVSQU5EX1JFU09MVkUpLAogLyogMzggKi8gQUNQSV9PUCgiTEFuZCIsIEFSR1BfTEFORF9PUCwgQVJHSV9MQU5EX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzJBXzBUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzJBXzBUXzFSIHwgQU1MX0xPR0lDQUxfTlVNRVJJQyB8Ci0JCQkgQU1MX0NPTlNUQU5UKSwKKwkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzJBXzBUXzFSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMkFfMFRfMVIgfCBBTUxfTE9HSUNBTF9OVU1FUklDIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDM5ICovIEFDUElfT1AoIkxPciIsIEFSR1BfTE9SX09QLCBBUkdJX0xPUl9PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18yQV8wVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18yQV8wVF8xUiB8IEFNTF9MT0dJQ0FMX05VTUVSSUMgfAotCQkJIEFNTF9DT05TVEFOVCksCisJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18yQV8wVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzJBXzBUXzFSIHwgQU1MX0xPR0lDQUxfTlVNRVJJQyB8IEFNTF9DT05TVEFOVCksCiAvKiAzQSAqLyBBQ1BJX09QKCJMTm90IiwgQVJHUF9MTk9UX09QLCBBUkdJX0xOT1RfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMUFfMFRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMVIgfCBBTUxfQ09OU1RBTlQpLAorCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMUFfMFRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18xQV8wVF8xUiB8IEFNTF9DT05TVEFOVCksCiAvKiAzQiAqLyBBQ1BJX09QKCJMRXF1YWwiLCBBUkdQX0xFUVVBTF9PUCwgQVJHSV9MRVFVQUxfT1AsCi0JCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0VYRUNVVEUsCi0JCQkgQU1MX1RZUEVfRVhFQ18yQV8wVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18yQV8wVF8xUiB8IEFNTF9MT0dJQ0FMIHwgQU1MX0NPTlNUQU5UKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAorCQkgQU1MX1RZUEVfRVhFQ18yQV8wVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzJBXzBUXzFSIHwgQU1MX0xPR0lDQUwgfCBBTUxfQ09OU1RBTlQpLAogLyogM0MgKi8gQUNQSV9PUCgiTEdyZWF0ZXIiLCBBUkdQX0xHUkVBVEVSX09QLCBBUkdJX0xHUkVBVEVSX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMkFfMFRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMkFfMFRfMVIgfCBBTUxfTE9HSUNBTCB8IEFNTF9DT05TVEFOVCksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMkFfMFRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18yQV8wVF8xUiB8IEFNTF9MT0dJQ0FMIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDNEICovIEFDUElfT1AoIkxMZXNzIiwgQVJHUF9MTEVTU19PUCwgQVJHSV9MTEVTU19PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18yQV8wVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18yQV8wVF8xUiB8IEFNTF9MT0dJQ0FMIHwgQU1MX0NPTlNUQU5UKSwKKwkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzJBXzBUXzFSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMkFfMFRfMVIgfCBBTUxfTE9HSUNBTCB8IEFNTF9DT05TVEFOVCksCiAvKiAzRSAqLyBBQ1BJX09QKCJJZiIsIEFSR1BfSUZfT1AsIEFSR0lfSUZfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX0NPTlRST0wsIEFNTF9UWVBFX0NPTlRST0wsIEFNTF9IQVNfQVJHUyksCisJCSBBTUxfQ0xBU1NfQ09OVFJPTCwgQU1MX1RZUEVfQ09OVFJPTCwgQU1MX0hBU19BUkdTKSwKIC8qIDNGICovIEFDUElfT1AoIkVsc2UiLCBBUkdQX0VMU0VfT1AsIEFSR0lfRUxTRV9PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfQ09OVFJPTCwgQU1MX1RZUEVfQ09OVFJPTCwgQU1MX0hBU19BUkdTKSwKKwkJIEFNTF9DTEFTU19DT05UUk9MLCBBTUxfVFlQRV9DT05UUk9MLCBBTUxfSEFTX0FSR1MpLAogLyogNDAgKi8gQUNQSV9PUCgiV2hpbGUiLCBBUkdQX1dISUxFX09QLCBBUkdJX1dISUxFX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19DT05UUk9MLCBBTUxfVFlQRV9DT05UUk9MLCBBTUxfSEFTX0FSR1MpLAorCQkgQU1MX0NMQVNTX0NPTlRST0wsIEFNTF9UWVBFX0NPTlRST0wsIEFNTF9IQVNfQVJHUyksCiAvKiA0MSAqLyBBQ1BJX09QKCJOb29wIiwgQVJHUF9OT09QX09QLCBBUkdJX05PT1BfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX0NPTlRST0wsIEFNTF9UWVBFX0NPTlRST0wsIDApLAorCQkgQU1MX0NMQVNTX0NPTlRST0wsIEFNTF9UWVBFX0NPTlRST0wsIDApLAogLyogNDIgKi8gQUNQSV9PUCgiUmV0dXJuIiwgQVJHUF9SRVRVUk5fT1AsIEFSR0lfUkVUVVJOX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19DT05UUk9MLAotCQkJIEFNTF9UWVBFX0NPTlRST0wsIEFNTF9IQVNfQVJHUyksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfQ09OVFJPTCwKKwkJIEFNTF9UWVBFX0NPTlRST0wsIEFNTF9IQVNfQVJHUyksCiAvKiA0MyAqLyBBQ1BJX09QKCJCcmVhayIsIEFSR1BfQlJFQUtfT1AsIEFSR0lfQlJFQUtfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX0NPTlRST0wsIEFNTF9UWVBFX0NPTlRST0wsIDApLAorCQkgQU1MX0NMQVNTX0NPTlRST0wsIEFNTF9UWVBFX0NPTlRST0wsIDApLAogLyogNDQgKi8gQUNQSV9PUCgiQnJlYWtQb2ludCIsIEFSR1BfQlJFQUtfUE9JTlRfT1AsIEFSR0lfQlJFQUtfUE9JTlRfT1AsCi0JCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0NPTlRST0wsIEFNTF9UWVBFX0NPTlRST0wsIDApLAorCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0NPTlRST0wsIEFNTF9UWVBFX0NPTlRST0wsIDApLAogLyogNDUgKi8gQUNQSV9PUCgiT25lcyIsIEFSR1BfT05FU19PUCwgQVJHSV9PTkVTX09QLCBBQ1BJX1RZUEVfSU5URUdFUiwKLQkJCSBBTUxfQ0xBU1NfQVJHVU1FTlQsIEFNTF9UWVBFX0NPTlNUQU5ULCBBTUxfQ09OU1RBTlQpLAorCQkgQU1MX0NMQVNTX0FSR1VNRU5ULCBBTUxfVFlQRV9DT05TVEFOVCwgQU1MX0NPTlNUQU5UKSwKIAogLyogUHJlZml4ZWQgb3Bjb2RlcyAoVHdvLWJ5dGUgb3Bjb2RlcyB3aXRoIGEgcHJlZml4IG9wKSAqLwogCiAvKiA0NiAqLyBBQ1BJX09QKCJNdXRleCIsIEFSR1BfTVVURVhfT1AsIEFSR0lfTVVURVhfT1AsIEFDUElfVFlQRV9NVVRFWCwKLQkJCSBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULCBBTUxfVFlQRV9OQU1FRF9TSU1QTEUsCi0JCQkgQU1MX0hBU19BUkdTIHwgQU1MX05TT0JKRUNUIHwgQU1MX05TT1BDT0RFIHwKLQkJCSBBTUxfTlNOT0RFIHwgQU1MX05BTUVEKSwKKwkJIEFNTF9DTEFTU19OQU1FRF9PQkpFQ1QsIEFNTF9UWVBFX05BTUVEX1NJTVBMRSwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8CisJCSBBTUxfTlNOT0RFIHwgQU1MX05BTUVEKSwKIC8qIDQ3ICovIEFDUElfT1AoIkV2ZW50IiwgQVJHUF9FVkVOVF9PUCwgQVJHSV9FVkVOVF9PUCwgQUNQSV9UWVBFX0VWRU5ULAotCQkJIEFNTF9DTEFTU19OQU1FRF9PQkpFQ1QsIEFNTF9UWVBFX05BTUVEX1NJTVBMRSwKLQkJCSBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNPUENPREUgfCBBTUxfTlNOT0RFIHwgQU1MX05BTUVEKSwKKwkJIEFNTF9DTEFTU19OQU1FRF9PQkpFQ1QsIEFNTF9UWVBFX05BTUVEX1NJTVBMRSwKKwkJIEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8IEFNTF9OU05PREUgfCBBTUxfTkFNRUQpLAogLyogNDggKi8gQUNQSV9PUCgiQ29uZFJlZk9mIiwgQVJHUF9DT05EX1JFRl9PRl9PUCwgQVJHSV9DT05EX1JFRl9PRl9PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKLQkJCSBBTUxfVFlQRV9FWEVDXzFBXzFUXzFSLCBBTUxfRkxBR1NfRVhFQ18xQV8xVF8xUiksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMUFfMVRfMVIsIEFNTF9GTEFHU19FWEVDXzFBXzFUXzFSKSwKIC8qIDQ5ICovIEFDUElfT1AoIkNyZWF0ZUZpZWxkIiwgQVJHUF9DUkVBVEVfRklFTERfT1AsCi0JCQkgQVJHSV9DUkVBVEVfRklFTERfT1AsIEFDUElfVFlQRV9CVUZGRVJfRklFTEQsCi0JCQkgQU1MX0NMQVNTX0NSRUFURSwgQU1MX1RZUEVfQ1JFQVRFX0ZJRUxELAotCQkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU05PREUgfAotCQkJIEFNTF9ERUZFUiB8IEFNTF9GSUVMRCB8IEFNTF9DUkVBVEUpLAorCQkgQVJHSV9DUkVBVEVfRklFTERfT1AsIEFDUElfVFlQRV9CVUZGRVJfRklFTEQsCisJCSBBTUxfQ0xBU1NfQ1JFQVRFLCBBTUxfVFlQRV9DUkVBVEVfRklFTEQsCisJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNOT0RFIHwKKwkJIEFNTF9ERUZFUiB8IEFNTF9GSUVMRCB8IEFNTF9DUkVBVEUpLAogLyogNEEgKi8gQUNQSV9PUCgiTG9hZCIsIEFSR1BfTE9BRF9PUCwgQVJHSV9MT0FEX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzFUXzBSLAotCQkJIEFNTF9GTEFHU19FWEVDXzFBXzFUXzBSKSwKKwkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzFUXzBSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMVRfMFIpLAogLyogNEIgKi8gQUNQSV9PUCgiU3RhbGwiLCBBUkdQX1NUQUxMX09QLCBBUkdJX1NUQUxMX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzBUXzBSLAotCQkJIEFNTF9GTEFHU19FWEVDXzFBXzBUXzBSKSwKKwkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzBUXzBSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMFIpLAogLyogNEMgKi8gQUNQSV9PUCgiU2xlZXAiLCBBUkdQX1NMRUVQX09QLCBBUkdJX1NMRUVQX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzBUXzBSLAotCQkJIEFNTF9GTEFHU19FWEVDXzFBXzBUXzBSKSwKKwkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzBUXzBSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMFIpLAogLyogNEQgKi8gQUNQSV9PUCgiQWNxdWlyZSIsIEFSR1BfQUNRVUlSRV9PUCwgQVJHSV9BQ1FVSVJFX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMkFfMFRfMVIsIEFNTF9GTEFHU19FWEVDXzJBXzBUXzFSKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAorCQkgQU1MX1RZUEVfRVhFQ18yQV8wVF8xUiwgQU1MX0ZMQUdTX0VYRUNfMkFfMFRfMVIpLAogLyogNEUgKi8gQUNQSV9PUCgiU2lnbmFsIiwgQVJHUF9TSUdOQUxfT1AsIEFSR0lfU0lHTkFMX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMUFfMFRfMFIsIEFNTF9GTEFHU19FWEVDXzFBXzBUXzBSKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAorCQkgQU1MX1RZUEVfRVhFQ18xQV8wVF8wUiwgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMFIpLAogLyogNEYgKi8gQUNQSV9PUCgiV2FpdCIsIEFSR1BfV0FJVF9PUCwgQVJHSV9XQUlUX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzJBXzBUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzJBXzBUXzFSKSwKKwkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzJBXzBUXzFSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMkFfMFRfMVIpLAogLyogNTAgKi8gQUNQSV9PUCgiUmVzZXQiLCBBUkdQX1JFU0VUX09QLCBBUkdJX1JFU0VUX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzBUXzBSLAotCQkJIEFNTF9GTEFHU19FWEVDXzFBXzBUXzBSKSwKKwkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzFBXzBUXzBSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMFIpLAogLyogNTEgKi8gQUNQSV9PUCgiUmVsZWFzZSIsIEFSR1BfUkVMRUFTRV9PUCwgQVJHSV9SRUxFQVNFX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMUFfMFRfMFIsIEFNTF9GTEFHU19FWEVDXzFBXzBUXzBSKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAorCQkgQU1MX1RZUEVfRVhFQ18xQV8wVF8wUiwgQU1MX0ZMQUdTX0VYRUNfMUFfMFRfMFIpLAogLyogNTIgKi8gQUNQSV9PUCgiRnJvbUJDRCIsIEFSR1BfRlJPTV9CQ0RfT1AsIEFSR0lfRlJPTV9CQ0RfT1AsCi0JCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0VYRUNVVEUsCi0JCQkgQU1MX1RZUEVfRVhFQ18xQV8xVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18xQV8xVF8xUiB8IEFNTF9DT05TVEFOVCksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMUFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18xQV8xVF8xUiB8IEFNTF9DT05TVEFOVCksCiAvKiA1MyAqLyBBQ1BJX09QKCJUb0JDRCIsIEFSR1BfVE9fQkNEX09QLCBBUkdJX1RPX0JDRF9PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18xQV8xVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18xQV8xVF8xUiB8IEFNTF9DT05TVEFOVCksCisJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18xQV8xVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzFBXzFUXzFSIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDU0ICovIEFDUElfT1AoIlVubG9hZCIsIEFSR1BfVU5MT0FEX09QLCBBUkdJX1VOTE9BRF9PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKLQkJCSBBTUxfVFlQRV9FWEVDXzFBXzBUXzBSLCBBTUxfRkxBR1NfRVhFQ18xQV8wVF8wUiksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMUFfMFRfMFIsIEFNTF9GTEFHU19FWEVDXzFBXzBUXzBSKSwKIC8qIDU1ICovIEFDUElfT1AoIlJldmlzaW9uIiwgQVJHUF9SRVZJU0lPTl9PUCwgQVJHSV9SRVZJU0lPTl9PUCwKLQkJCSBBQ1BJX1RZUEVfSU5URUdFUiwgQU1MX0NMQVNTX0FSR1VNRU5ULAotCQkJIEFNTF9UWVBFX0NPTlNUQU5ULCAwKSwKKwkJIEFDUElfVFlQRV9JTlRFR0VSLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCisJCSBBTUxfVFlQRV9DT05TVEFOVCwgMCksCiAvKiA1NiAqLyBBQ1BJX09QKCJEZWJ1ZyIsIEFSR1BfREVCVUdfT1AsIEFSR0lfREVCVUdfT1AsCi0JCQkgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSwgQU1MX0NMQVNTX0FSR1VNRU5ULAotCQkJIEFNTF9UWVBFX0NPTlNUQU5ULCAwKSwKKwkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKKwkJIEFNTF9UWVBFX0NPTlNUQU5ULCAwKSwKIC8qIDU3ICovIEFDUElfT1AoIkZhdGFsIiwgQVJHUF9GQVRBTF9PUCwgQVJHSV9GQVRBTF9PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18zQV8wVF8wUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18zQV8wVF8wUiksCisJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18zQV8wVF8wUiwKKwkJIEFNTF9GTEFHU19FWEVDXzNBXzBUXzBSKSwKIC8qIDU4ICovIEFDUElfT1AoIk9wZXJhdGlvblJlZ2lvbiIsIEFSR1BfUkVHSU9OX09QLCBBUkdJX1JFR0lPTl9PUCwKLQkJCSBBQ1BJX1RZUEVfUkVHSU9OLCBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULAotCQkJIEFNTF9UWVBFX05BTUVEX0NPTVBMRVgsCi0JCQkgQU1MX0hBU19BUkdTIHwgQU1MX05TT0JKRUNUIHwgQU1MX05TT1BDT0RFIHwKLQkJCSBBTUxfTlNOT0RFIHwgQU1MX05BTUVEIHwgQU1MX0RFRkVSKSwKKwkJIEFDUElfVFlQRV9SRUdJT04sIEFNTF9DTEFTU19OQU1FRF9PQkpFQ1QsCisJCSBBTUxfVFlQRV9OQU1FRF9DT01QTEVYLAorCQkgQU1MX0hBU19BUkdTIHwgQU1MX05TT0JKRUNUIHwgQU1MX05TT1BDT0RFIHwKKwkJIEFNTF9OU05PREUgfCBBTUxfTkFNRUQgfCBBTUxfREVGRVIpLAogLyogNTkgKi8gQUNQSV9PUCgiRmllbGQiLCBBUkdQX0ZJRUxEX09QLCBBUkdJX0ZJRUxEX09QLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19OQU1FRF9PQkpFQ1QsIEFNTF9UWVBFX05BTUVEX0ZJRUxELAotCQkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8Ci0JCQkgQU1MX0ZJRUxEKSwKKwkJIEFNTF9DTEFTU19OQU1FRF9PQkpFQ1QsIEFNTF9UWVBFX05BTUVEX0ZJRUxELAorCQkgQU1MX0hBU19BUkdTIHwgQU1MX05TT0JKRUNUIHwgQU1MX05TT1BDT0RFIHwgQU1MX0ZJRUxEKSwKIC8qIDVBICovIEFDUElfT1AoIkRldmljZSIsIEFSR1BfREVWSUNFX09QLCBBUkdJX0RFVklDRV9PUCwKLQkJCSBBQ1BJX1RZUEVfREVWSUNFLCBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULAotCQkJIEFNTF9UWVBFX05BTUVEX05PX09CSiwKLQkJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNPUENPREUgfAotCQkJIEFNTF9OU05PREUgfCBBTUxfTkFNRUQpLAorCQkgQUNQSV9UWVBFX0RFVklDRSwgQU1MX0NMQVNTX05BTUVEX09CSkVDVCwKKwkJIEFNTF9UWVBFX05BTUVEX05PX09CSiwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8CisJCSBBTUxfTlNOT0RFIHwgQU1MX05BTUVEKSwKIC8qIDVCICovIEFDUElfT1AoIlByb2Nlc3NvciIsIEFSR1BfUFJPQ0VTU09SX09QLCBBUkdJX1BST0NFU1NPUl9PUCwKLQkJCSBBQ1BJX1RZUEVfUFJPQ0VTU09SLCBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULAotCQkJIEFNTF9UWVBFX05BTUVEX1NJTVBMRSwKLQkJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNPUENPREUgfAotCQkJIEFNTF9OU05PREUgfCBBTUxfTkFNRUQpLAorCQkgQUNQSV9UWVBFX1BST0NFU1NPUiwgQU1MX0NMQVNTX05BTUVEX09CSkVDVCwKKwkJIEFNTF9UWVBFX05BTUVEX1NJTVBMRSwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8CisJCSBBTUxfTlNOT0RFIHwgQU1MX05BTUVEKSwKIC8qIDVDICovIEFDUElfT1AoIlBvd2VyUmVzb3VyY2UiLCBBUkdQX1BPV0VSX1JFU19PUCwgQVJHSV9QT1dFUl9SRVNfT1AsCi0JCQkgQUNQSV9UWVBFX1BPV0VSLCBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULAotCQkJIEFNTF9UWVBFX05BTUVEX1NJTVBMRSwKLQkJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNPUENPREUgfAotCQkJIEFNTF9OU05PREUgfCBBTUxfTkFNRUQpLAorCQkgQUNQSV9UWVBFX1BPV0VSLCBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULAorCQkgQU1MX1RZUEVfTkFNRURfU0lNUExFLAorCQkgQU1MX0hBU19BUkdTIHwgQU1MX05TT0JKRUNUIHwgQU1MX05TT1BDT0RFIHwKKwkJIEFNTF9OU05PREUgfCBBTUxfTkFNRUQpLAogLyogNUQgKi8gQUNQSV9PUCgiVGhlcm1hbFpvbmUiLCBBUkdQX1RIRVJNQUxfWk9ORV9PUCwKLQkJCSBBUkdJX1RIRVJNQUxfWk9ORV9PUCwgQUNQSV9UWVBFX1RIRVJNQUwsCi0JCQkgQU1MX0NMQVNTX05BTUVEX09CSkVDVCwgQU1MX1RZUEVfTkFNRURfTk9fT0JKLAotCQkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8Ci0JCQkgQU1MX05TTk9ERSB8IEFNTF9OQU1FRCksCisJCSBBUkdJX1RIRVJNQUxfWk9ORV9PUCwgQUNQSV9UWVBFX1RIRVJNQUwsCisJCSBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULCBBTUxfVFlQRV9OQU1FRF9OT19PQkosCisJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNPUENPREUgfAorCQkgQU1MX05TTk9ERSB8IEFNTF9OQU1FRCksCiAvKiA1RSAqLyBBQ1BJX09QKCJJbmRleEZpZWxkIiwgQVJHUF9JTkRFWF9GSUVMRF9PUCwgQVJHSV9JTkRFWF9GSUVMRF9PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULAotCQkJIEFNTF9UWVBFX05BTUVEX0ZJRUxELAotCQkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8Ci0JCQkgQU1MX0ZJRUxEKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19OQU1FRF9PQkpFQ1QsCisJCSBBTUxfVFlQRV9OQU1FRF9GSUVMRCwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8IEFNTF9GSUVMRCksCiAvKiA1RiAqLyBBQ1BJX09QKCJCYW5rRmllbGQiLCBBUkdQX0JBTktfRklFTERfT1AsIEFSR0lfQkFOS19GSUVMRF9PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULAotCQkJIEFNTF9UWVBFX05BTUVEX0ZJRUxELAotCQkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8Ci0JCQkgQU1MX0ZJRUxEKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19OQU1FRF9PQkpFQ1QsCisJCSBBTUxfVFlQRV9OQU1FRF9GSUVMRCwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8IEFNTF9GSUVMRCksCiAKIC8qIEludGVybmFsIG9wY29kZXMgdGhhdCBtYXAgdG8gaW52YWxpZCBBTUwgb3Bjb2RlcyAqLwogCiAvKiA2MCAqLyBBQ1BJX09QKCJMTm90RXF1YWwiLCBBUkdQX0xOT1RFUVVBTF9PUCwgQVJHSV9MTk9URVFVQUxfT1AsCi0JCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0lOVEVSTkFMLAotCQkJIEFNTF9UWVBFX0JPR1VTLCBBTUxfSEFTX0FSR1MgfCBBTUxfQ09OU1RBTlQpLAorCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0lOVEVSTkFMLAorCQkgQU1MX1RZUEVfQk9HVVMsIEFNTF9IQVNfQVJHUyB8IEFNTF9DT05TVEFOVCksCiAvKiA2MSAqLyBBQ1BJX09QKCJMTGVzc0VxdWFsIiwgQVJHUF9MTEVTU0VRVUFMX09QLCBBUkdJX0xMRVNTRVFVQUxfT1AsCi0JCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0lOVEVSTkFMLAotCQkJIEFNTF9UWVBFX0JPR1VTLCBBTUxfSEFTX0FSR1MgfCBBTUxfQ09OU1RBTlQpLAorCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0lOVEVSTkFMLAorCQkgQU1MX1RZUEVfQk9HVVMsIEFNTF9IQVNfQVJHUyB8IEFNTF9DT05TVEFOVCksCiAvKiA2MiAqLyBBQ1BJX09QKCJMR3JlYXRlckVxdWFsIiwgQVJHUF9MR1JFQVRFUkVRVUFMX09QLAotCQkJIEFSR0lfTEdSRUFURVJFUVVBTF9PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfSU5URVJOQUwsIEFNTF9UWVBFX0JPR1VTLAotCQkJIEFNTF9IQVNfQVJHUyB8IEFNTF9DT05TVEFOVCksCisJCSBBUkdJX0xHUkVBVEVSRVFVQUxfT1AsIEFDUElfVFlQRV9BTlksCisJCSBBTUxfQ0xBU1NfSU5URVJOQUwsIEFNTF9UWVBFX0JPR1VTLAorCQkgQU1MX0hBU19BUkdTIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDYzICovIEFDUElfT1AoIi1OYW1lUGF0aC0iLCBBUkdQX05BTUVQQVRIX09QLCBBUkdJX05BTUVQQVRIX09QLAotCQkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKLQkJCSBBTUxfVFlQRV9MSVRFUkFMLCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNOT0RFKSwKKwkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UsIEFNTF9DTEFTU19BUkdVTUVOVCwKKwkJIEFNTF9UWVBFX0xJVEVSQUwsIEFNTF9OU09CSkVDVCB8IEFNTF9OU05PREUpLAogLyogNjQgKi8gQUNQSV9PUCgiLU1ldGhvZENhbGwtIiwgQVJHUF9NRVRIT0RDQUxMX09QLCBBUkdJX01FVEhPRENBTExfT1AsCi0JCQkgQUNQSV9UWVBFX01FVEhPRCwgQU1MX0NMQVNTX01FVEhPRF9DQUxMLAotCQkJIEFNTF9UWVBFX01FVEhPRF9DQUxMLAotCQkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU05PREUpLAorCQkgQUNQSV9UWVBFX01FVEhPRCwgQU1MX0NMQVNTX01FVEhPRF9DQUxMLAorCQkgQU1MX1RZUEVfTUVUSE9EX0NBTEwsCisJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNOT0RFKSwKIC8qIDY1ICovIEFDUElfT1AoIi1CeXRlTGlzdC0iLCBBUkdQX0JZVEVMSVNUX09QLCBBUkdJX0JZVEVMSVNUX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19BUkdVTUVOVCwKLQkJCSBBTUxfVFlQRV9MSVRFUkFMLCAwKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19BUkdVTUVOVCwKKwkJIEFNTF9UWVBFX0xJVEVSQUwsIDApLAogLyogNjYgKi8gQUNQSV9PUCgiLVJlc2VydmVkRmllbGQtIiwgQVJHUF9SRVNFUlZFREZJRUxEX09QLAotCQkJIEFSR0lfUkVTRVJWRURGSUVMRF9PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfSU5URVJOQUwsIEFNTF9UWVBFX0JPR1VTLCAwKSwKKwkJIEFSR0lfUkVTRVJWRURGSUVMRF9PUCwgQUNQSV9UWVBFX0FOWSwKKwkJIEFNTF9DTEFTU19JTlRFUk5BTCwgQU1MX1RZUEVfQk9HVVMsIDApLAogLyogNjcgKi8gQUNQSV9PUCgiLU5hbWVkRmllbGQtIiwgQVJHUF9OQU1FREZJRUxEX09QLCBBUkdJX05BTUVERklFTERfT1AsCi0JCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0lOVEVSTkFMLAotCQkJIEFNTF9UWVBFX0JPR1VTLAotCQkJIEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8IEFNTF9OU05PREUgfCBBTUxfTkFNRUQpLAorCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0lOVEVSTkFMLAorCQkgQU1MX1RZUEVfQk9HVVMsCisJCSBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNPUENPREUgfCBBTUxfTlNOT0RFIHwgQU1MX05BTUVEKSwKIC8qIDY4ICovIEFDUElfT1AoIi1BY2Nlc3NGaWVsZC0iLCBBUkdQX0FDQ0VTU0ZJRUxEX09QLAotCQkJIEFSR0lfQUNDRVNTRklFTERfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX0lOVEVSTkFMLCBBTUxfVFlQRV9CT0dVUywgMCksCisJCSBBUkdJX0FDQ0VTU0ZJRUxEX09QLCBBQ1BJX1RZUEVfQU5ZLAorCQkgQU1MX0NMQVNTX0lOVEVSTkFMLCBBTUxfVFlQRV9CT0dVUywgMCksCiAvKiA2OSAqLyBBQ1BJX09QKCItU3RhdGljU3RyaW5nIiwgQVJHUF9TVEFUSUNTVFJJTkdfT1AsCi0JCQkgQVJHSV9TVEFUSUNTVFJJTkdfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX0lOVEVSTkFMLCBBTUxfVFlQRV9CT0dVUywgMCksCisJCSBBUkdJX1NUQVRJQ1NUUklOR19PUCwgQUNQSV9UWVBFX0FOWSwKKwkJIEFNTF9DTEFTU19JTlRFUk5BTCwgQU1MX1RZUEVfQk9HVVMsIDApLAogLyogNkEgKi8gQUNQSV9PUCgiLVJldHVybiBWYWx1ZS0iLCBBUkdfTk9ORSwgQVJHX05PTkUsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX1JFVFVSTl9WQUxVRSwgQU1MX1RZUEVfUkVUVVJOLAotCQkJIEFNTF9IQVNfQVJHUyB8IEFNTF9IQVNfUkVUVkFMKSwKKwkJIEFNTF9DTEFTU19SRVRVUk5fVkFMVUUsIEFNTF9UWVBFX1JFVFVSTiwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9IQVNfUkVUVkFMKSwKIC8qIDZCICovIEFDUElfT1AoIi1VTktOT1dOX09QLSIsIEFSR19OT05FLCBBUkdfTk9ORSwgQUNQSV9UWVBFX0lOVkFMSUQsCi0JCQkgQU1MX0NMQVNTX1VOS05PV04sIEFNTF9UWVBFX0JPR1VTLCBBTUxfSEFTX0FSR1MpLAorCQkgQU1MX0NMQVNTX1VOS05PV04sIEFNTF9UWVBFX0JPR1VTLCBBTUxfSEFTX0FSR1MpLAogLyogNkMgKi8gQUNQSV9PUCgiLUFTQ0lJX09OTFktIiwgQVJHX05PTkUsIEFSR19OT05FLCBBQ1BJX1RZUEVfQU5ZLAotCQkJIEFNTF9DTEFTU19BU0NJSSwgQU1MX1RZUEVfQk9HVVMsIEFNTF9IQVNfQVJHUyksCisJCSBBTUxfQ0xBU1NfQVNDSUksIEFNTF9UWVBFX0JPR1VTLCBBTUxfSEFTX0FSR1MpLAogLyogNkQgKi8gQUNQSV9PUCgiLVBSRUZJWF9PTkxZLSIsIEFSR19OT05FLCBBUkdfTk9ORSwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfUFJFRklYLCBBTUxfVFlQRV9CT0dVUywgQU1MX0hBU19BUkdTKSwKKwkJIEFNTF9DTEFTU19QUkVGSVgsIEFNTF9UWVBFX0JPR1VTLCBBTUxfSEFTX0FSR1MpLAogCiAvKiBBQ1BJIDIuMCBvcGNvZGVzICovCiAKIC8qIDZFICovIEFDUElfT1AoIlF3b3JkQ29uc3QiLCBBUkdQX1FXT1JEX09QLCBBUkdJX1FXT1JEX09QLAotCQkJIEFDUElfVFlQRV9JTlRFR0VSLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCi0JCQkgQU1MX1RZUEVfTElURVJBTCwgQU1MX0NPTlNUQU5UKSwKKwkJIEFDUElfVFlQRV9JTlRFR0VSLCBBTUxfQ0xBU1NfQVJHVU1FTlQsCisJCSBBTUxfVFlQRV9MSVRFUkFMLCBBTUxfQ09OU1RBTlQpLAogCS8qIDZGICovIEFDUElfT1AoIlBhY2thZ2UiLCAvKiBWYXIgKi8gQVJHUF9WQVJfUEFDS0FHRV9PUCwKIAkJCSBBUkdJX1ZBUl9QQUNLQUdFX09QLCBBQ1BJX1RZUEVfUEFDS0FHRSwKIAkJCSBBTUxfQ0xBU1NfQ1JFQVRFLCBBTUxfVFlQRV9DUkVBVEVfT0JKRUNULAogCQkJIEFNTF9IQVNfQVJHUyB8IEFNTF9ERUZFUiksCiAvKiA3MCAqLyBBQ1BJX09QKCJDb25jYXRlbmF0ZVJlc1RlbXBsYXRlIiwgQVJHUF9DT05DQVRfUkVTX09QLAotCQkJIEFSR0lfQ09OQ0FUX1JFU19PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9DT05TVEFOVCksCisJCSBBUkdJX0NPTkNBVF9SRVNfT1AsIEFDUElfVFlQRV9BTlksCisJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzJBXzFUXzFSIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDcxICovIEFDUElfT1AoIk1vZCIsIEFSR1BfTU9EX09QLCBBUkdJX01PRF9PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18yQV8xVF8xUiB8IEFNTF9DT05TVEFOVCksCisJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzJBXzFUXzFSIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDcyICovIEFDUElfT1AoIkNyZWF0ZVFXb3JkRmllbGQiLCBBUkdQX0NSRUFURV9RV09SRF9GSUVMRF9PUCwKLQkJCSBBUkdJX0NSRUFURV9RV09SRF9GSUVMRF9PUCwKLQkJCSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxELCBBTUxfQ0xBU1NfQ1JFQVRFLAotCQkJIEFNTF9UWVBFX0NSRUFURV9GSUVMRCwKLQkJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNOT0RFIHwKLQkJCSBBTUxfREVGRVIgfCBBTUxfQ1JFQVRFKSwKKwkJIEFSR0lfQ1JFQVRFX1FXT1JEX0ZJRUxEX09QLAorCQkgQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCwgQU1MX0NMQVNTX0NSRUFURSwKKwkJIEFNTF9UWVBFX0NSRUFURV9GSUVMRCwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU05PREUgfAorCQkgQU1MX0RFRkVSIHwgQU1MX0NSRUFURSksCiAvKiA3MyAqLyBBQ1BJX09QKCJUb0J1ZmZlciIsIEFSR1BfVE9fQlVGRkVSX09QLCBBUkdJX1RPX0JVRkZFUl9PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKLQkJCSBBTUxfVFlQRV9FWEVDXzFBXzFUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzFBXzFUXzFSIHwgQU1MX0NPTlNUQU5UKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAorCQkgQU1MX1RZUEVfRVhFQ18xQV8xVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzFBXzFUXzFSIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDc0ICovIEFDUElfT1AoIlRvRGVjaW1hbFN0cmluZyIsIEFSR1BfVE9fREVDX1NUUl9PUCwKLQkJCSBBUkdJX1RPX0RFQ19TVFJfT1AsIEFDUElfVFlQRV9BTlksCi0JCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMUFfMVRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMVRfMVIgfCBBTUxfQ09OU1RBTlQpLAorCQkgQVJHSV9UT19ERUNfU1RSX09QLCBBQ1BJX1RZUEVfQU5ZLAorCQkgQU1MX0NMQVNTX0VYRUNVVEUsIEFNTF9UWVBFX0VYRUNfMUFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18xQV8xVF8xUiB8IEFNTF9DT05TVEFOVCksCiAvKiA3NSAqLyBBQ1BJX09QKCJUb0hleFN0cmluZyIsIEFSR1BfVE9fSEVYX1NUUl9PUCwgQVJHSV9UT19IRVhfU1RSX09QLAotCQkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAotCQkJIEFNTF9UWVBFX0VYRUNfMUFfMVRfMVIsCi0JCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMVRfMVIgfCBBTUxfQ09OU1RBTlQpLAorCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0VYRUNVVEUsCisJCSBBTUxfVFlQRV9FWEVDXzFBXzFUXzFSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMUFfMVRfMVIgfCBBTUxfQ09OU1RBTlQpLAogLyogNzYgKi8gQUNQSV9PUCgiVG9JbnRlZ2VyIiwgQVJHUF9UT19JTlRFR0VSX09QLCBBUkdJX1RPX0lOVEVHRVJfT1AsCi0JCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX0VYRUNVVEUsCi0JCQkgQU1MX1RZUEVfRVhFQ18xQV8xVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18xQV8xVF8xUiB8IEFNTF9DT05TVEFOVCksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMUFfMVRfMVIsCisJCSBBTUxfRkxBR1NfRVhFQ18xQV8xVF8xUiB8IEFNTF9DT05TVEFOVCksCiAvKiA3NyAqLyBBQ1BJX09QKCJUb1N0cmluZyIsIEFSR1BfVE9fU1RSSU5HX09QLCBBUkdJX1RPX1NUUklOR19PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKLQkJCSBBTUxfVFlQRV9FWEVDXzJBXzFUXzFSLAotCQkJIEFNTF9GTEFHU19FWEVDXzJBXzFUXzFSIHwgQU1MX0NPTlNUQU5UKSwKKwkJIEFDUElfVFlQRV9BTlksIEFNTF9DTEFTU19FWEVDVVRFLAorCQkgQU1MX1RZUEVfRVhFQ18yQV8xVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzJBXzFUXzFSIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDc4ICovIEFDUElfT1AoIkNvcHlPYmplY3QiLCBBUkdQX0NPUFlfT1AsIEFSR0lfQ09QWV9PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKLQkJCSBBTUxfVFlQRV9FWEVDXzFBXzFUXzFSLCBBTUxfRkxBR1NfRVhFQ18xQV8xVF8xUiksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfMUFfMVRfMVIsIEFNTF9GTEFHU19FWEVDXzFBXzFUXzFSKSwKIC8qIDc5ICovIEFDUElfT1AoIk1pZCIsIEFSR1BfTUlEX09QLCBBUkdJX01JRF9PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18zQV8xVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18zQV8xVF8xUiB8IEFNTF9DT05TVEFOVCksCisJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18zQV8xVF8xUiwKKwkJIEFNTF9GTEFHU19FWEVDXzNBXzFUXzFSIHwgQU1MX0NPTlNUQU5UKSwKIC8qIDdBICovIEFDUElfT1AoIkNvbnRpbnVlIiwgQVJHUF9DT05USU5VRV9PUCwgQVJHSV9DT05USU5VRV9PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfQ09OVFJPTCwgQU1MX1RZUEVfQ09OVFJPTCwgMCksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfQ09OVFJPTCwgQU1MX1RZUEVfQ09OVFJPTCwgMCksCiAvKiA3QiAqLyBBQ1BJX09QKCJMb2FkVGFibGUiLCBBUkdQX0xPQURfVEFCTEVfT1AsIEFSR0lfTE9BRF9UQUJMRV9PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKLQkJCSBBTUxfVFlQRV9FWEVDXzZBXzBUXzFSLCBBTUxfRkxBR1NfRVhFQ182QV8wVF8xUiksCisJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfRVhFQ1VURSwKKwkJIEFNTF9UWVBFX0VYRUNfNkFfMFRfMVIsIEFNTF9GTEFHU19FWEVDXzZBXzBUXzFSKSwKIC8qIDdDICovIEFDUElfT1AoIkRhdGFUYWJsZVJlZ2lvbiIsIEFSR1BfREFUQV9SRUdJT05fT1AsCi0JCQkgQVJHSV9EQVRBX1JFR0lPTl9PUCwgQUNQSV9UWVBFX1JFR0lPTiwKLQkJCSBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULCBBTUxfVFlQRV9OQU1FRF9TSU1QTEUsCi0JCQkgQU1MX0hBU19BUkdTIHwgQU1MX05TT0JKRUNUIHwgQU1MX05TT1BDT0RFIHwKLQkJCSBBTUxfTlNOT0RFIHwgQU1MX05BTUVEKSwKKwkJIEFSR0lfREFUQV9SRUdJT05fT1AsIEFDUElfVFlQRV9SRUdJT04sCisJCSBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULCBBTUxfVFlQRV9OQU1FRF9TSU1QTEUsCisJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNPUENPREUgfAorCQkgQU1MX05TTk9ERSB8IEFNTF9OQU1FRCksCiAvKiA3RCAqLyBBQ1BJX09QKCJbRXZhbFN1YlRyZWVdIiwgQVJHUF9TQ09QRV9PUCwgQVJHSV9TQ09QRV9PUCwKLQkJCSBBQ1BJX1RZUEVfQU5ZLCBBTUxfQ0xBU1NfTkFNRURfT0JKRUNULAotCQkJIEFNTF9UWVBFX05BTUVEX05PX09CSiwKLQkJCSBBTUxfSEFTX0FSR1MgfCBBTUxfTlNPQkpFQ1QgfCBBTUxfTlNPUENPREUgfAotCQkJIEFNTF9OU05PREUpLAorCQkgQUNQSV9UWVBFX0FOWSwgQU1MX0NMQVNTX05BTUVEX09CSkVDVCwKKwkJIEFNTF9UWVBFX05BTUVEX05PX09CSiwKKwkJIEFNTF9IQVNfQVJHUyB8IEFNTF9OU09CSkVDVCB8IEFNTF9OU09QQ09ERSB8IEFNTF9OU05PREUpLAogCiAvKiBBQ1BJIDMuMCBvcGNvZGVzICovCiAKIC8qIDdFICovIEFDUElfT1AoIlRpbWVyIiwgQVJHUF9USU1FUl9PUCwgQVJHSV9USU1FUl9PUCwgQUNQSV9UWVBFX0FOWSwKLQkJCSBBTUxfQ0xBU1NfRVhFQ1VURSwgQU1MX1RZUEVfRVhFQ18wQV8wVF8xUiwKLQkJCSBBTUxfRkxBR1NfRVhFQ18wQV8wVF8xUikKKwkJIEFNTF9DTEFTU19FWEVDVVRFLCBBTUxfVFlQRV9FWEVDXzBBXzBUXzFSLAorCQkgQU1MX0ZMQUdTX0VYRUNfMEFfMFRfMVIpCiAKIC8qISBbRW5kXSBubyBzb3VyY2UgY29kZSB0cmFuc2xhdGlvbiAhKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzY2FsYy5jIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NhbGMuYwppbmRleCA4YzZkM2ZkLi4wZGQyY2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzY2FsYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNjYWxjLmMKQEAgLTU2Nyw3ICs1NjcsOCBAQAogCQkJCQkJICAgICAoKnN1Yl9vYmplY3RfbGlzdCktPnN0cmluZy4KIAkJCQkJCSAgICAgbGVuZ3RoICsgMSk7CiAJCQl9IGVsc2UgewotCQkJCXRlbXBfc2l6ZV9uZWVkZWQgKz0gYWNwaV9uc19nZXRfcGF0aG5hbWVfbGVuZ3RoKCgqc3ViX29iamVjdF9saXN0KS0+cmVmZXJlbmNlLm5vZGUpOworCQkJCXRlbXBfc2l6ZV9uZWVkZWQgKz0KKwkJCQkgICAgYWNwaV9uc19nZXRfcGF0aG5hbWVfbGVuZ3RoKCgqc3ViX29iamVjdF9saXN0KS0+cmVmZXJlbmNlLm5vZGUpOwogCQkJfQogCQl9IGVsc2UgewogCQkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNjcmVhdGUuYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNjcmVhdGUuYwppbmRleCBjYzQ4YWIwLi41MGRhNDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzY3JlYXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2NyZWF0ZS5jCkBAIC0yNjcsMTYgKzI2NywxOSBAQAogCQkgKiBJZiBCSU9TIGVycm9uZW91c2x5IHJldmVyc2VkIHRoZSBfUFJUIHNvdXJjZV9uYW1lIGFuZCBzb3VyY2VfaW5kZXgsCiAJCSAqIHRoZW4gcmV2ZXJzZSB0aGVtIGJhY2suCiAJCSAqLwotCQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUgKHN1Yl9vYmplY3RfbGlzdFszXSkgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKHN1Yl9vYmplY3RfbGlzdFszXSkgIT0KKwkJICAgIEFDUElfVFlQRV9JTlRFR0VSKSB7CiAJCQlpZiAoYWNwaV9nYmxfZW5hYmxlX2ludGVycHJldGVyX3NsYWNrKSB7CiAJCQkJc291cmNlX25hbWVfaW5kZXggPSAzOwogCQkJCXNvdXJjZV9pbmRleF9pbmRleCA9IDI7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQUNQSTogSGFuZGxpbmcgR2FyYmxlZCBfUFJUIGVudHJ5XG4iKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJBQ1BJOiBIYW5kbGluZyBHYXJibGVkIF9QUlQgZW50cnlcbiIpOwogCQkJfSBlbHNlIHsKIAkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkiKFBSVFslWF0uc291cmNlX2luZGV4KSBOZWVkIEludGVnZXIsIGZvdW5kICVzIiwKLQkJCQkJaW5kZXgsCi0JCQkJCWFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoc3ViX29iamVjdF9saXN0WzNdKSkpOworCQkJCQkgICAgIihQUlRbJVhdLnNvdXJjZV9pbmRleCkgTmVlZCBJbnRlZ2VyLCBmb3VuZCAlcyIsCisJCQkJCSAgICBpbmRleCwKKwkJCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUKKwkJCQkJICAgIChzdWJfb2JqZWN0X2xpc3RbM10pKSk7CiAJCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9EQVRBKTsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2R1bXAuYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNkdW1wLmMKaW5kZXggZGUyMGE1ZC4uNDZkYTExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2R1bXAuYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzZHVtcC5jCkBAIC00Niw3ICs0Niw2IEBACiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1JFU09VUkNFUwogQUNQSV9NT0RVTEVfTkFNRSgicnNkdW1wIikKLQogI2lmIGRlZmluZWQoQUNQSV9ERUJVR19PVVRQVVQpIHx8IGRlZmluZWQoQUNQSV9ERUJVR0dFUikKIC8qIExvY2FsIHByb3RvdHlwZXMgKi8KIHN0YXRpYyB2b2lkIGFjcGlfcnNfb3V0X3N0cmluZyhjaGFyICp0aXRsZSwgY2hhciAqdmFsdWUpOwpAQCAtNDg5LDEwICs0ODgsOSBAQAogCQkJLyoKIAkJCSAqIE9wdGlvbmFsIHJlc291cmNlX3NvdXJjZSBmb3IgQWRkcmVzcyByZXNvdXJjZXMKIAkJCSAqLwotCQkJYWNwaV9yc19kdW1wX3Jlc291cmNlX3NvdXJjZShBQ1BJX0NBU1RfUFRSCi0JCQkJCQkgICAgIChzdHJ1Y3QKLQkJCQkJCSAgICAgIGFjcGlfcmVzb3VyY2Vfc291cmNlLAotCQkJCQkJICAgICAgdGFyZ2V0KSk7CisJCQlhY3BpX3JzX2R1bXBfcmVzb3VyY2Vfc291cmNlKEFDUElfQ0FTVF9QVFIoc3RydWN0CisJCQkJCQkJCSAgIGFjcGlfcmVzb3VyY2Vfc291cmNlLAorCQkJCQkJCQkgICB0YXJnZXQpKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzaW5mby5jIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2luZm8uYwppbmRleCA3ZTNjMzM1Li4yYzJhZGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzaW5mby5jCisrKyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNpbmZvLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogfTsKICNlbmRpZgogCi0jZW5kaWYJLyogQUNQSV9GVVRVUkVfVVNBR0UgKi8KKyNlbmRpZgkJCQkvKiBBQ1BJX0ZVVFVSRV9VU0FHRSAqLwogLyoKICAqIEJhc2Ugc2l6ZXMgZm9yIGV4dGVybmFsIEFNTCByZXNvdXJjZSBkZXNjcmlwdG9ycywgaW5kZXhlZCBieSBpbnRlcm5hbCB0eXBlLgogICogSW5jbHVkZXMgc2l6ZSBvZiB0aGUgZGVzY3JpcHRvciBoZWFkZXIgKDEgYnl0ZSBmb3Igc21hbGwgZGVzY3JpcHRvcnMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzbGlzdC5jIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc2xpc3QuYwppbmRleCBhOTI3NTVjLi5jYTIxZTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzbGlzdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNsaXN0LmMKQEAgLTE1MywxMCArMTUzLDkgQEAKIAogCQkvKiBQZXJmb3JtIHRoZSBjb252ZXJzaW9uICovCiAKLQkJc3RhdHVzID0gYWNwaV9yc19jb252ZXJ0X3Jlc291cmNlX3RvX2FtbChyZXNvdXJjZSwKLQkJCQkJCQkgQUNQSV9DQVNUX1BUUih1bmlvbgotCQkJCQkJCQkgICAgICAgYW1sX3Jlc291cmNlLAotCQkJCQkJCQkgICAgICAgYW1sKSwKKwkJc3RhdHVzID0gYWNwaV9yc19jb252ZXJ0X3Jlc291cmNlX3RvX2FtbChyZXNvdXJjZSwgQUNQSV9DQVNUX1BUUih1bmlvbgorCQkJCQkJCQkJCSBhbWxfcmVzb3VyY2UsCisJCQkJCQkJCQkJIGFtbCksCiAJCQkJCQkJIGFjcGlfZ2JsX3NldF9yZXNvdXJjZV9kaXNwYXRjaAogCQkJCQkJCSBbcmVzb3VyY2UtPnR5cGVdKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzbWlzYy5jIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc21pc2MuYwppbmRleCAzYjYzYjU2Li5jNzA4MWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzbWlzYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnNtaXNjLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfUkVTT1VSQ0VTCiBBQ1BJX01PRFVMRV9OQU1FKCJyc21pc2MiKQotCiAjZGVmaW5lIElOSVRfUkVTT1VSQ0VfVFlQRShpKSAgICAgICBpLT5yZXNvdXJjZV9vZmZzZXQKICNkZWZpbmUgSU5JVF9SRVNPVVJDRV9MRU5HVEgoaSkgICAgIGktPmFtbF9vZmZzZXQKICNkZWZpbmUgSU5JVF9UQUJMRV9MRU5HVEgoaSkgICAgICAgIGktPnZhbHVlCkBAIC00MjksOCArNDI4LDcgQEAKIAkJCSAqIE9wdGlvbmFsIHJlc291cmNlX3NvdXJjZSAoSW5kZXggYW5kIFN0cmluZykKIAkJCSAqLwogCQkJYW1sX2xlbmd0aCA9Ci0JCQkgICAgYWNwaV9yc19zZXRfcmVzb3VyY2Vfc291cmNlKGFtbCwKLQkJCQkJCQkoYWNwaV9yc19sZW5ndGgpCisJCQkgICAgYWNwaV9yc19zZXRfcmVzb3VyY2Vfc291cmNlKGFtbCwgKGFjcGlfcnNfbGVuZ3RoKQogCQkJCQkJCWFtbF9sZW5ndGgsIHNvdXJjZSk7CiAJCQlhY3BpX3JzX3NldF9yZXNvdXJjZV9sZW5ndGgoYW1sX2xlbmd0aCwgYW1sKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzdXRpbHMuYwppbmRleCAyNDQyYThmLi4xMWMwYmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvcmVzb3VyY2VzL3JzdXRpbHMuYwpAQCAtMzUzLDEwICszNTMsOCBAQAogCQkgKgogCQkgKiBaZXJvIHRoZSBlbnRpcmUgYXJlYSBvZiB0aGUgYnVmZmVyLgogCQkgKi8KLQkJdG90YWxfbGVuZ3RoID0KLQkJICAgICh1MzIpCi0JCSAgICBBQ1BJX1NUUkxFTihBQ1BJX0NBU1RfUFRSKGNoYXIsICZhbWxfcmVzb3VyY2Vfc291cmNlWzFdKSkgKwotCQkgICAgMTsKKwkJdG90YWxfbGVuZ3RoID0gKHUzMikKKwkJQUNQSV9TVFJMRU4oQUNQSV9DQVNUX1BUUihjaGFyLCAmYW1sX3Jlc291cmNlX3NvdXJjZVsxXSkpICsgMTsKIAkJdG90YWxfbGVuZ3RoID0gKHUzMikgQUNQSV9ST1VORF9VUF9UT19OQVRJVkVfV09SRCh0b3RhbF9sZW5ndGgpOwogCiAJCUFDUElfTUVNU0VUKHJlc291cmNlX3NvdXJjZS0+c3RyaW5nX3B0ciwgMCwgdG90YWxfbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZXMvcnN4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3hmYWNlLmMKaW5kZXggOTkxZjg5MC4uZjYzODEzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3hmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Jlc291cmNlcy9yc3hmYWNlLmMKQEAgLTIxNyw3ICsyMTcsNiBAQAogfQogCiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMpCi0KICNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0yNjEsNyArMjYwLDYgQEAKIAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3Bvc3NpYmxlX3Jlc291cmNlcykKICNlbmRpZgkJCQkvKiAgQUNQSV9GVVRVUkVfVVNBR0UgICovCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfc2V0X2N1cnJlbnRfcmVzb3VyY2VzCkBAIC00OTYsNyArNDk0LDYgQEAKICAqICAgICAgICAgICAgICBlYWNoIHJlc291cmNlIGluIHRoZSBsaXN0LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzCiBhY3BpX3dhbGtfcmVzb3VyY2VzKGFjcGlfaGFuZGxlIGRldmljZV9oYW5kbGUsCiAJCSAgICBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggZDgwZGQ4NC4uNmIzYjhhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC0zMDIsNyArMzAyLDcgQEAKIAlyZXR1cm4gOwogfQogCi1zdGF0aWMgc3RydWN0IGJ1c190eXBlIGFjcGlfYnVzX3R5cGUgPSB7CitzdHJ1Y3QgYnVzX3R5cGUgYWNwaV9idXNfdHlwZSA9IHsKIAkubmFtZQkJPSAiYWNwaSIsCiAJLnN1c3BlbmQJPSBhY3BpX2RldmljZV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gYWNwaV9kZXZpY2VfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwL21haW4uYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC9tYWluLmMKaW5kZXggZjhjNjM0MS4uYmM3ZTE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NsZWVwL21haW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAvbWFpbi5jCkBAIC0yOSw3ICsyOSw2IEBACiAJW1BNX1NVU1BFTkRfT05dID0gQUNQSV9TVEFURV9TMCwKIAlbUE1fU1VTUEVORF9TVEFOREJZXSA9IEFDUElfU1RBVEVfUzEsCiAJW1BNX1NVU1BFTkRfTUVNXSA9IEFDUElfU1RBVEVfUzMsCi0JW1BNX1NVU1BFTkRfRElTS10gPSBBQ1BJX1NUQVRFX1M0LAogCVtQTV9TVVNQRU5EX01BWF0gPSBBQ1BJX1NUQVRFX1M1CiB9OwogCkBAIC05NCwxNCArOTMsNiBAQAogCQlkb19zdXNwZW5kX2xvd2xldmVsKCk7CiAJCWJyZWFrOwogCi0JY2FzZSBQTV9TVVNQRU5EX0RJU0s6Ci0JCWlmIChhY3BpX3BtX29wcy5wbV9kaXNrX21vZGUgPT0gUE1fRElTS19QTEFURk9STSkKLQkJCXN0YXR1cyA9IGFjcGlfZW50ZXJfc2xlZXBfc3RhdGUoYWNwaV9zdGF0ZSk7Ci0JCWJyZWFrOwotCWNhc2UgUE1fU1VTUEVORF9NQVg6Ci0JCWFjcGlfcG93ZXJfb2ZmKCk7Ci0JCWJyZWFrOwotCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTU3LDEyICsxNDgsMTMgQEAKIAlzdXNwZW5kX3N0YXRlX3Qgc3RhdGVzW10gPSB7CiAJCVsxXSA9IFBNX1NVU1BFTkRfU1RBTkRCWSwKIAkJWzNdID0gUE1fU1VTUEVORF9NRU0sCi0JCVs0XSA9IFBNX1NVU1BFTkRfRElTSywKIAkJWzVdID0gUE1fU1VTUEVORF9NQVgKIAl9OwogCiAJaWYgKGFjcGlfc3RhdGUgPCA2ICYmIHN0YXRlc1thY3BpX3N0YXRlXSkKIAkJcmV0dXJuIHBtX3N1c3BlbmQoc3RhdGVzW2FjcGlfc3RhdGVdKTsKKwlpZiAoYWNwaV9zdGF0ZSA9PSA0KQorCQlyZXR1cm4gaGliZXJuYXRlKCk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTE4OSw2ICsxODEsNDkgQEAKIAkuZmluaXNoID0gYWNwaV9wbV9maW5pc2gsCiB9OwogCisjaWZkZWYgQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQKK3N0YXRpYyBpbnQgYWNwaV9oaWJlcm5hdGlvbl9wcmVwYXJlKHZvaWQpCit7CisJcmV0dXJuIGFjcGlfc2xlZXBfcHJlcGFyZShBQ1BJX1NUQVRFX1M0KTsKK30KKworc3RhdGljIGludCBhY3BpX2hpYmVybmF0aW9uX2VudGVyKHZvaWQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlBQ1BJX0ZMVVNIX0NQVV9DQUNIRSgpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2UoQUNQSV9TVEFURV9TNCk7CisJLyogVGhpcyBzaG91bGRuJ3QgcmV0dXJuLiAgSWYgaXQgcmV0dXJucywgd2UgaGF2ZSBhIHByb2JsZW0gKi8KKwlzdGF0dXMgPSBhY3BpX2VudGVyX3NsZWVwX3N0YXRlKEFDUElfU1RBVEVfUzQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiBBQ1BJX1NVQ0NFU1Moc3RhdHVzKSA/IDAgOiAtRUZBVUxUOworfQorCitzdGF0aWMgdm9pZCBhY3BpX2hpYmVybmF0aW9uX2ZpbmlzaCh2b2lkKQoreworCWFjcGlfbGVhdmVfc2xlZXBfc3RhdGUoQUNQSV9TVEFURV9TNCk7CisJYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2UoQUNQSV9TVEFURV9TNCk7CisKKwkvKiByZXNldCBmaXJtd2FyZSB3YWtpbmcgdmVjdG9yICovCisJYWNwaV9zZXRfZmlybXdhcmVfd2FraW5nX3ZlY3RvcigoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSAwKTsKKworCWlmIChpbml0XzgyNTlBX2FmdGVyX1MxKSB7CisJCXByaW50aygiQnJva2VuIHRvc2hpYmEgbGFwdG9wIC0+IGtpY2tpbmcgaW50ZXJydXB0c1xuIik7CisJCWluaXRfODI1OUEoMCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGhpYmVybmF0aW9uX29wcyBhY3BpX2hpYmVybmF0aW9uX29wcyA9IHsKKwkucHJlcGFyZSA9IGFjcGlfaGliZXJuYXRpb25fcHJlcGFyZSwKKwkuZW50ZXIgPSBhY3BpX2hpYmVybmF0aW9uX2VudGVyLAorCS5maW5pc2ggPSBhY3BpX2hpYmVybmF0aW9uX2ZpbmlzaCwKK307CisjZW5kaWYJCQkJLyogQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQgKi8KKwogLyoKICAqIFRvc2hpYmEgZmFpbHMgdG8gcHJlc2VydmUgaW50ZXJydXB0cyBvdmVyIFMxLCByZWluaXRpYWxpemF0aW9uCiAgKiBvZiA4MjU5IGlzIG5lZWRlZCBhZnRlciBTMSByZXN1bWUuCkBAIC0yMjcsMTQgKzI2MiwxNyBAQAogCQkJc2xlZXBfc3RhdGVzW2ldID0gMTsKIAkJCXByaW50aygiIFMlZCIsIGkpOwogCQl9Ci0JCWlmIChpID09IEFDUElfU1RBVEVfUzQpIHsKLQkJCWlmIChzbGVlcF9zdGF0ZXNbaV0pCi0JCQkJYWNwaV9wbV9vcHMucG1fZGlza19tb2RlID0gUE1fRElTS19QTEFURk9STTsKLQkJfQogCX0KIAlwcmludGsoIilcbiIpOwogCiAJcG1fc2V0X29wcygmYWNwaV9wbV9vcHMpOworCisjaWZkZWYgQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQKKwlpZiAoc2xlZXBfc3RhdGVzW0FDUElfU1RBVEVfUzRdKQorCQloaWJlcm5hdGlvbl9zZXRfb3BzKCZhY3BpX2hpYmVybmF0aW9uX29wcyk7CisjZWxzZQorCXNsZWVwX3N0YXRlc1tBQ1BJX1NUQVRFX1M0XSA9IDA7CisjZW5kaWYKKwogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAvcHJvYy5jIGIvZHJpdmVycy9hY3BpL3NsZWVwL3Byb2MuYwppbmRleCBkY2RlOWRkZC4uNjFmMTgyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NsZWVwL3Byb2MuYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAvcHJvYy5jCkBAIC02MCw3ICs2MCw3IEBACiAJc3RhdGUgPSBzaW1wbGVfc3RydG91bChzdHIsIE5VTEwsIDApOwogI2lmZGVmIENPTkZJR19TT0ZUV0FSRV9TVVNQRU5ECiAJaWYgKHN0YXRlID09IDQpIHsKLQkJZXJyb3IgPSBwbV9zdXNwZW5kKFBNX1NVU1BFTkRfRElTSyk7CisJCWVycm9yID0gaGliZXJuYXRlKCk7CiAJCWdvdG8gRG9uZTsKIAl9CiAjZW5kaWYKQEAgLTcwLDYgKzcwLDE0IEBACiB9CiAjZW5kaWYJCQkJLyogQ09ORklHX0FDUElfU0xFRVBfUFJPQ19TTEVFUCAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9DTU9TKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0NNT1NfTU9EVUxFKQorLyogdXNlIC9zeXMvY2xhc3MvcnRjL3J0Y1gvd2FrZWFsYXJtIGluc3RlYWQ7IGl0J3Mgbm90IEFDUEktc3BlY2lmaWMgKi8KKyNlbHNlCisjZGVmaW5lCUhBVkVfQUNQSV9MRUdBQ1lfQUxBUk0KKyNlbmRpZgorCisjaWZkZWYJSEFWRV9BQ1BJX0xFR0FDWV9BTEFSTQorCiBzdGF0aWMgaW50IGFjcGlfc3lzdGVtX2FsYXJtX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CiAJdTMyIHNlYywgbWluLCBocjsKQEAgLTM0MSw2ICszNDksNyBAQAogICAgICAgZW5kOgogCXJldHVybl9WQUxVRShyZXN1bHQgPyByZXN1bHQgOiBjb3VudCk7CiB9CisjZW5kaWYJCQkJLyogSEFWRV9BQ1BJX0xFR0FDWV9BTEFSTSAqLwogCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhY3BpX3dha2V1cF9kZXZpY2VfbGlzdDsKIGV4dGVybiBzcGlubG9ja190IGFjcGlfZGV2aWNlX2xvY2s7CkBAIC0zNzAsOCArMzc5LDggQEAKIAkJCSAgIGRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKIAkJaWYgKGxkZXYpCiAJCQlzZXFfcHJpbnRmKHNlcSwgIiVzOiVzIiwKLQkJCQlsZGV2LT5idXMgPyBsZGV2LT5idXMtPm5hbWUgOiAibm8tYnVzIiwKLQkJCQlsZGV2LT5idXNfaWQpOworCQkJCSAgIGxkZXYtPmJ1cyA/IGxkZXYtPmJ1cy0+bmFtZSA6ICJuby1idXMiLAorCQkJCSAgIGxkZXYtPmJ1c19pZCk7CiAJCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKIAkJcHV0X2RldmljZShsZGV2KTsKIApAQCAtNDY0LDYgKzQ3Myw3IEBACiB9OwogI2VuZGlmCQkJCS8qIENPTkZJR19BQ1BJX1NMRUVQX1BST0NfU0xFRVAgKi8KIAorI2lmZGVmCUhBVkVfQUNQSV9MRUdBQ1lfQUxBUk0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfc3lzdGVtX2FsYXJtX2ZvcHMgPSB7CiAJLm9wZW4gPSBhY3BpX3N5c3RlbV9hbGFybV9vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC00NzksOCArNDg5LDkgQEAKIAogCXJldHVybiBBQ1BJX0lOVEVSUlVQVF9IQU5ETEVEOwogfQorI2VuZGlmCQkJCS8qIEhBVkVfQUNQSV9MRUdBQ1lfQUxBUk0gKi8KIAotc3RhdGljIGludCBhY3BpX3NsZWVwX3Byb2NfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYWNwaV9zbGVlcF9wcm9jX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKIApAQCAtNDk2LDYgKzUwNyw3IEBACiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV9zeXN0ZW1fc2xlZXBfZm9wczsKICNlbmRpZgogCisjaWZkZWYJSEFWRV9BQ1BJX0xFR0FDWV9BTEFSTQogCS8qICdhbGFybScgW1IvV10gKi8KIAllbnRyeSA9CiAJICAgIGNyZWF0ZV9wcm9jX2VudHJ5KCJhbGFybSIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKQEAgLTUwMyw2ICs1MTUsOSBAQAogCWlmIChlbnRyeSkKIAkJZW50cnktPnByb2NfZm9wcyA9ICZhY3BpX3N5c3RlbV9hbGFybV9mb3BzOwogCisJYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9SVEMsIHJ0Y19oYW5kbGVyLCBOVUxMKTsKKyNlbmRpZgkJCQkvKiBIQVZFX0FDUElfTEVHQUNZX0FMQVJNICovCisKIAkvKiAnd2FrZXVwIGRldmljZScgW1IvV10gKi8KIAllbnRyeSA9CiAJICAgIGNyZWF0ZV9wcm9jX2VudHJ5KCJ3YWtldXAiLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCkBAIC01MTAsNyArNTI1LDYgQEAKIAlpZiAoZW50cnkpCiAJCWVudHJ5LT5wcm9jX2ZvcHMgPSAmYWNwaV9zeXN0ZW1fd2FrZXVwX2RldmljZV9mb3BzOwogCi0JYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9SVEMsIHJ0Y19oYW5kbGVyLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YmZhZHQuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJmYWR0LmMKaW5kZXggMWRiODMzZS4uMTI4NWU5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy90YmZhZHQuYworKysgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RiZmFkdC5jCkBAIC0zMzQsNyArMzM0LDggQEAKIAkJCQkgICAgIChhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrLmFkZHJlc3MgKwogCQkJCSAgICAgIHBtMV9yZWdpc3Rlcl9sZW5ndGgpKTsKIAkvKiBEb24ndCBmb3JnZXQgdG8gY29weSBzcGFjZV9pZCBvZiB0aGUgR0FTICovCi0JYWNwaV9nYmxfeHBtMWFfZW5hYmxlLnNwYWNlX2lkID0gYWNwaV9nYmxfRkFEVC54cG0xYV9ldmVudF9ibG9jay5zcGFjZV9pZDsKKwlhY3BpX2dibF94cG0xYV9lbmFibGUuc3BhY2VfaWQgPQorCSAgICBhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrLnNwYWNlX2lkOwogCiAJLyogVGhlIFBNMUIgcmVnaXN0ZXIgYmxvY2sgaXMgb3B0aW9uYWwsIGlnbm9yZSBpZiBub3QgcHJlc2VudCAqLwogCkBAIC0zNDQsNyArMzQ1LDggQEAKIAkJCQkJICAgICAoYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jay4KIAkJCQkJICAgICAgYWRkcmVzcyArIHBtMV9yZWdpc3Rlcl9sZW5ndGgpKTsKIAkJLyogRG9uJ3QgZm9yZ2V0IHRvIGNvcHkgc3BhY2VfaWQgb2YgdGhlIEdBUyAqLwotCQlhY3BpX2dibF94cG0xYl9lbmFibGUuc3BhY2VfaWQgPSBhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrLnNwYWNlX2lkOworCQlhY3BpX2dibF94cG0xYl9lbmFibGUuc3BhY2VfaWQgPQorCQkgICAgYWNwaV9nYmxfRkFEVC54cG0xYV9ldmVudF9ibG9jay5zcGFjZV9pZDsKIAogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RhYmxlcy90Ymluc3RhbC5jIGIvZHJpdmVycy9hY3BpL3RhYmxlcy90Ymluc3RhbC5jCmluZGV4IDBlN2IxMjEuLjNiYzBjNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJpbnN0YWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGFibGVzL3RiaW5zdGFsLmMKQEAgLTEyMywxNCArMTIzLDE0IEBACiAJCX0KIAl9CiAKLQkvKiBUaGUgdGFibGUgbXVzdCBiZSBlaXRoZXIgYW4gU1NEVCBvciBhIFBTRFQgKi8KKwkvKiBUaGUgdGFibGUgbXVzdCBiZSBlaXRoZXIgYW4gU1NEVCBvciBhIFBTRFQgb3IgYW4gT0VNeCAqLwogCiAJaWYgKCghQUNQSV9DT01QQVJFX05BTUUodGFibGVfZGVzYy0+cG9pbnRlci0+c2lnbmF0dXJlLCBBQ1BJX1NJR19QU0RUKSkKIAkgICAgJiYKLQkgICAgKCFBQ1BJX0NPTVBBUkVfTkFNRSh0YWJsZV9kZXNjLT5wb2ludGVyLT5zaWduYXR1cmUsIEFDUElfU0lHX1NTRFQpKSkKLQl7CisJICAgICghQUNQSV9DT01QQVJFX05BTUUodGFibGVfZGVzYy0+cG9pbnRlci0+c2lnbmF0dXJlLCBBQ1BJX1NJR19TU0RUKSkKKwkgICAgJiYgKHN0cm5jbXAodGFibGVfZGVzYy0+cG9pbnRlci0+c2lnbmF0dXJlLCAiT0VNIiwgMykpKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkgICAgIlRhYmxlIGhhcyBpbnZhbGlkIHNpZ25hdHVyZSBbJTQuNHNdLCBtdXN0IGJlIFNTRFQgb3IgUFNEVCIsCisJCQkgICAgIlRhYmxlIGhhcyBpbnZhbGlkIHNpZ25hdHVyZSBbJTQuNHNdLCBtdXN0IGJlIFNTRFQsIFBTRFQgb3IgT0VNeCIsCiAJCQkgICAgdGFibGVfZGVzYy0+cG9pbnRlci0+c2lnbmF0dXJlKSk7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfU0lHTkFUVVJFKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RieGZhY2UuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCmluZGV4IDQxN2VmNWYuLjViMzAyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCkBAIC0yMDEsNiArMjAxLDcgQEAKIAogCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfbG9hZF90YWJsZQpAQCAtMjYyLDcgKzI2Myw3IEBACiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfdGFibGVfaGVhZGVyKGNoYXIgKnNpZ25hdHVyZSwKIAkJICAgICAgYWNwaV9uYXRpdmVfdWludCBpbnN0YW5jZSwKLQkJICAgICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICpvdXRfdGFibGVfaGVhZGVyKQorCQkgICAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiBvdXRfdGFibGVfaGVhZGVyKQogewogCWFjcGlfbmF0aXZlX3VpbnQgaTsKIAlhY3BpX25hdGl2ZV91aW50IGo7CkBAIC0zMjEsNyArMzIyLDYgQEAKIAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X3RhYmxlX2hlYWRlcikKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfdW5sb2FkX3RhYmxlX2lkCkBAIC0zNDYsMTEgKzM0NiwxMSBAQAogCQkJY29udGludWU7CiAJCX0KIAkJLyoKLQkJKiBEZWxldGUgYWxsIG5hbWVzcGFjZSBvYmplY3RzIG93bmVkIGJ5IHRoaXMgdGFibGUuIE5vdGUgdGhhdCB0aGVzZQotCQkqIG9iamVjdHMgY2FuIGFwcGVhciBhbnl3aGVyZSBpbiB0aGUgbmFtZXNwYWNlIGJ5IHZpcnR1ZSBvZiB0aGUgQU1MCi0JCSogIlNjb3BlIiBvcGVyYXRvci4gVGh1cywgd2UgbmVlZCB0byB0cmFjayBvd25lcnNoaXAgYnkgYW4gSUQsIG5vdAotCQkqIHNpbXBseSBhIHBvc2l0aW9uIHdpdGhpbiB0aGUgaGllcmFyY2h5Ci0JCSovCisJCSAqIERlbGV0ZSBhbGwgbmFtZXNwYWNlIG9iamVjdHMgb3duZWQgYnkgdGhpcyB0YWJsZS4gTm90ZSB0aGF0IHRoZXNlCisJCSAqIG9iamVjdHMgY2FuIGFwcGVhciBhbnl3aGVyZSBpbiB0aGUgbmFtZXNwYWNlIGJ5IHZpcnR1ZSBvZiB0aGUgQU1MCisJCSAqICJTY29wZSIgb3BlcmF0b3IuIFRodXMsIHdlIG5lZWQgdG8gdHJhY2sgb3duZXJzaGlwIGJ5IGFuIElELCBub3QKKwkJICogc2ltcGx5IGEgcG9zaXRpb24gd2l0aGluIHRoZSBoaWVyYXJjaHkKKwkJICovCiAJCWFjcGlfdGJfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lcihpKTsKIAkJc3RhdHVzID0gYWNwaV90Yl9yZWxlYXNlX293bmVyX2lkKGkpOwogCQlhY3BpX3RiX3NldF90YWJsZV9sb2FkZWRfZmxhZyhpLCBGQUxTRSk7CkBAIC0zNzYsNyArMzc2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGFjcGlfc3RhdHVzCiBhY3BpX2dldF90YWJsZShjaGFyICpzaWduYXR1cmUsCi0JICAgICAgIGFjcGlfbmF0aXZlX3VpbnQgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKiBvdXRfdGFibGUpCisJICAgICAgIGFjcGlfbmF0aXZlX3VpbnQgaW5zdGFuY2UsIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKm91dF90YWJsZSkKIHsKIAlhY3BpX25hdGl2ZV91aW50IGk7CiAJYWNwaV9uYXRpdmVfdWludCBqOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKaW5kZXggNTg5Yjk4Yi4uMTk0ZWNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCkBAIC01OSw4ICs1OSw2IEBACiAjZGVmaW5lIEFDUElfVEhFUk1BTF9OT1RJRllfQ1JJVElDQUwJMHhGMAogI2RlZmluZSBBQ1BJX1RIRVJNQUxfTk9USUZZX0hPVAkJMHhGMQogI2RlZmluZSBBQ1BJX1RIRVJNQUxfTU9ERV9BQ1RJVkUJMHgwMAotI2RlZmluZSBBQ1BJX1RIRVJNQUxfTU9ERV9QQVNTSVZFCTB4MDEKLSNkZWZpbmUgQUNQSV9USEVSTUFMX01PREVfQ1JJVElDQUwgICAJMHhmZgogI2RlZmluZSBBQ1BJX1RIRVJNQUxfUEFUSF9QT1dFUk9GRgkiL3NiaW4vcG93ZXJvZmYiCiAKICNkZWZpbmUgQUNQSV9USEVSTUFMX01BWF9BQ1RJVkUJMTAKQEAgLTg2LDkgKzg0LDYgQEAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX3N0YXRlX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfdGVtcF9vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX3RyaXBfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgc3NpemVfdCBhY3BpX3RoZXJtYWxfd3JpdGVfdHJpcF9wb2ludHMoc3RydWN0IGZpbGUgKiwKLQkJCQkJICAgICAgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LAotCQkJCQkgICAgICBsb2ZmX3QgKik7CiBzdGF0aWMgaW50IGFjcGlfdGhlcm1hbF9jb29saW5nX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIHNzaXplX3QgYWNwaV90aGVybWFsX3dyaXRlX2Nvb2xpbmdfbW9kZShzdHJ1Y3QgZmlsZSAqLAogCQkJCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LApAQCAtMTY3LDcgKzE2Miw2IEBACiAJdW5zaWduZWQgbG9uZyB0ZW1wZXJhdHVyZTsKIAl1bnNpZ25lZCBsb25nIGxhc3RfdGVtcGVyYXR1cmU7CiAJdW5zaWduZWQgbG9uZyBwb2xsaW5nX2ZyZXF1ZW5jeTsKLQl1OCBjb29saW5nX21vZGU7CiAJdm9sYXRpbGUgdTggem9tYmllOwogCXN0cnVjdCBhY3BpX3RoZXJtYWxfZmxhZ3MgZmxhZ3M7CiAJc3RydWN0IGFjcGlfdGhlcm1hbF9zdGF0ZSBzdGF0ZTsKQEAgLTE5Myw3ICsxODcsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV90aGVybWFsX3RyaXBfZm9wcyA9IHsKIAkub3BlbiA9IGFjcGlfdGhlcm1hbF90cmlwX29wZW5fZnMsCiAJLnJlYWQgPSBzZXFfcmVhZCwKLQkud3JpdGUgPSBhY3BpX3RoZXJtYWxfd3JpdGVfdHJpcF9wb2ludHMsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKQEAgLTI5NywxMSArMjkwLDYgQEAKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiAtRU5PREVWOwogCi0JdHotPmNvb2xpbmdfbW9kZSA9IG1vZGU7Ci0KLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJDb29saW5nIG1vZGUgWyVzXVxuIiwKLQkJCSAgbW9kZSA/ICJwYXNzaXZlIiA6ICJhY3RpdmUiKSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODM5LDYgKzgyNyw3IEBACiBzdGF0aWMgaW50IGFjcGlfdGhlcm1hbF90cmlwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CiAJaW50IGkgPSAwOwogCWludCBqID0gMDsKIApAQCAtODYxLDkgKzg1MCw4IEBACiAJCQkgICB0ei0+dHJpcHMucGFzc2l2ZS50YzEsIHR6LT50cmlwcy5wYXNzaXZlLnRjMiwKIAkJCSAgIHR6LT50cmlwcy5wYXNzaXZlLnRzcCk7CiAJCWZvciAoaiA9IDA7IGogPCB0ei0+dHJpcHMucGFzc2l2ZS5kZXZpY2VzLmNvdW50OyBqKyspIHsKLQotCQkJc2VxX3ByaW50ZihzZXEsICIweCVwICIsCi0JCQkJICAgdHotPnRyaXBzLnBhc3NpdmUuZGV2aWNlcy5oYW5kbGVzW2pdKTsKKwkJCWFjcGlfYnVzX2dldF9kZXZpY2UodHotPnRyaXBzLnBhc3NpdmUuZGV2aWNlcy5oYW5kbGVzW2pdLCAmZGV2aWNlKTsKKwkJCXNlcV9wcmludGYoc2VxLCAiJTQuNHMgIiwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOwogCQl9CiAJCXNlcV9wdXRzKHNlcSwgIlxuIik7CiAJfQpAQCAtODc0LDkgKzg2MiwxMCBAQAogCQlzZXFfcHJpbnRmKHNlcSwgImFjdGl2ZVslZF06ICAgICAgICAgICAgICAgJWxkIEM6IGRldmljZXM9IiwKIAkJCSAgIGksCiAJCQkgICBLRUxWSU5fVE9fQ0VMU0lVUyh0ei0+dHJpcHMuYWN0aXZlW2ldLnRlbXBlcmF0dXJlKSk7Ci0JCWZvciAoaiA9IDA7IGogPCB0ei0+dHJpcHMuYWN0aXZlW2ldLmRldmljZXMuY291bnQ7IGorKykKLQkJCXNlcV9wcmludGYoc2VxLCAiMHglcCAiLAotCQkJCSAgIHR6LT50cmlwcy5hY3RpdmVbaV0uZGV2aWNlcy5oYW5kbGVzW2pdKTsKKwkJZm9yIChqID0gMDsgaiA8IHR6LT50cmlwcy5hY3RpdmVbaV0uZGV2aWNlcy5jb3VudDsgaisrKXsKKwkJCWFjcGlfYnVzX2dldF9kZXZpY2UodHotPnRyaXBzLmFjdGl2ZVtpXS5kZXZpY2VzLmhhbmRsZXNbal0sICZkZXZpY2UpOworCQkJc2VxX3ByaW50ZihzZXEsICIlNC40cyAiLCBhY3BpX2RldmljZV9iaWQoZGV2aWNlKSk7CisJCX0KIAkJc2VxX3B1dHMoc2VxLCAiXG4iKTsKIAl9CiAKQEAgLTg4OSw2NyArODc4LDYgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYWNwaV90aGVybWFsX3RyaXBfc2VxX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwogfQogCi1zdGF0aWMgc3NpemVfdAotYWNwaV90aGVybWFsX3dyaXRlX3RyaXBfcG9pbnRzKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAotCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKLXsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSBtLT5wcml2YXRlOwotCi0JY2hhciAqbGltaXRfc3RyaW5nOwotCWludCBudW0sIGNyaXRpY2FsLCBob3QsIHBhc3NpdmU7Ci0JaW50ICphY3RpdmU7Ci0JaW50IGkgPSAwOwotCi0KLQlsaW1pdF9zdHJpbmcgPSBremFsbG9jKEFDUElfVEhFUk1BTF9NQVhfTElNSVRfU1RSX0xFTiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsaW1pdF9zdHJpbmcpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYWN0aXZlID0ga21hbGxvYyhBQ1BJX1RIRVJNQUxfTUFYX0FDVElWRSAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFjdGl2ZSkgewotCQlrZnJlZShsaW1pdF9zdHJpbmcpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpZiAoIXR6IHx8IChjb3VudCA+IEFDUElfVEhFUk1BTF9NQVhfTElNSVRfU1RSX0xFTiAtIDEpKSB7Ci0JCWNvdW50ID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGxpbWl0X3N0cmluZywgYnVmZmVyLCBjb3VudCkpIHsKLQkJY291bnQgPSAtRUZBVUxUOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlsaW1pdF9zdHJpbmdbY291bnRdID0gJ1wwJzsKLQotCW51bSA9IHNzY2FuZihsaW1pdF9zdHJpbmcsICIlZDolZDolZDolZDolZDolZDolZDolZDolZDolZDolZDolZDolZCIsCi0JCSAgICAgJmNyaXRpY2FsLCAmaG90LCAmcGFzc2l2ZSwKLQkJICAgICAmYWN0aXZlWzBdLCAmYWN0aXZlWzFdLCAmYWN0aXZlWzJdLCAmYWN0aXZlWzNdLCAmYWN0aXZlWzRdLAotCQkgICAgICZhY3RpdmVbNV0sICZhY3RpdmVbNl0sICZhY3RpdmVbN10sICZhY3RpdmVbOF0sCi0JCSAgICAgJmFjdGl2ZVs5XSk7Ci0JaWYgKCEobnVtID49IDUgJiYgbnVtIDwgKEFDUElfVEhFUk1BTF9NQVhfQUNUSVZFICsgMykpKSB7Ci0JCWNvdW50ID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JdHotPnRyaXBzLmNyaXRpY2FsLnRlbXBlcmF0dXJlID0gQ0VMU0lVU19UT19LRUxWSU4oY3JpdGljYWwpOwotCXR6LT50cmlwcy5ob3QudGVtcGVyYXR1cmUgPSBDRUxTSVVTX1RPX0tFTFZJTihob3QpOwotCXR6LT50cmlwcy5wYXNzaXZlLnRlbXBlcmF0dXJlID0gQ0VMU0lVU19UT19LRUxWSU4ocGFzc2l2ZSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bSAtIDM7IGkrKykgewotCQlpZiAoISh0ei0+dHJpcHMuYWN0aXZlW2ldLmZsYWdzLnZhbGlkKSkKLQkJCWJyZWFrOwotCQl0ei0+dHJpcHMuYWN0aXZlW2ldLnRlbXBlcmF0dXJlID0gQ0VMU0lVU19UT19LRUxWSU4oYWN0aXZlW2ldKTsKLQl9Ci0KLSAgICAgIGVuZDoKLQlrZnJlZShhY3RpdmUpOwotCWtmcmVlKGxpbWl0X3N0cmluZyk7Ci0JcmV0dXJuIGNvdW50OwotfQotCiBzdGF0aWMgaW50IGFjcGlfdGhlcm1hbF9jb29saW5nX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSBzZXEtPnByaXZhdGU7CkBAIC05NTgsMTUgKzg4NiwxMCBAQAogCWlmICghdHopCiAJCWdvdG8gZW5kOwogCi0JaWYgKCF0ei0+ZmxhZ3MuY29vbGluZ19tb2RlKSB7CisJaWYgKCF0ei0+ZmxhZ3MuY29vbGluZ19tb2RlKQogCQlzZXFfcHV0cyhzZXEsICI8c2V0dGluZyBub3Qgc3VwcG9ydGVkPlxuIik7Ci0JfQotCi0JaWYgKHR6LT5jb29saW5nX21vZGUgPT0gQUNQSV9USEVSTUFMX01PREVfQ1JJVElDQUwpCi0JCXNlcV9wcmludGYoc2VxLCAiY29vbGluZyBtb2RlOgljcml0aWNhbFxuIik7CiAJZWxzZQotCQlzZXFfcHJpbnRmKHNlcSwgImNvb2xpbmcgbW9kZToJJXNcbiIsCi0JCQkgICB0ei0+Y29vbGluZ19tb2RlID8gInBhc3NpdmUiIDogImFjdGl2ZSIpOworCQlzZXFfcHV0cyhzZXEsICIwIC0gQWN0aXZlOyAxIC0gUGFzc2l2ZVxuIik7CiAKICAgICAgIGVuZDoKIAlyZXR1cm4gMDsKQEAgLTEyMjMsMjggKzExNDYsNiBAQAogCXJlc3VsdCA9IGFjcGlfdGhlcm1hbF9zZXRfY29vbGluZ19tb2RlKHR6LCBBQ1BJX1RIRVJNQUxfTU9ERV9BQ1RJVkUpOwogCWlmICghcmVzdWx0KQogCQl0ei0+ZmxhZ3MuY29vbGluZ19tb2RlID0gMTsKLQllbHNlIHsKLQkJLyogT2gsd2UgaGF2ZSBub3QgX1NDUCBtZXRob2QuCi0JCSAgIEdlbmVyYWxseSBzaG93IGNvb2xpbmdfbW9kZSBieSBfQUN4LCBfUFNWLHNwZWMgMTIuMiAqLwotCQl0ei0+ZmxhZ3MuY29vbGluZ19tb2RlID0gMDsKLQkJaWYgKHR6LT50cmlwcy5hY3RpdmVbMF0uZmxhZ3MudmFsaWQKLQkJICAgICYmIHR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkKSB7Ci0JCQlpZiAodHotPnRyaXBzLnBhc3NpdmUudGVtcGVyYXR1cmUgPgotCQkJICAgIHR6LT50cmlwcy5hY3RpdmVbMF0udGVtcGVyYXR1cmUpCi0JCQkJdHotPmNvb2xpbmdfbW9kZSA9IEFDUElfVEhFUk1BTF9NT0RFX0FDVElWRTsKLQkJCWVsc2UKLQkJCQl0ei0+Y29vbGluZ19tb2RlID0gQUNQSV9USEVSTUFMX01PREVfUEFTU0lWRTsKLQkJfSBlbHNlIGlmICghdHotPnRyaXBzLmFjdGl2ZVswXS5mbGFncy52YWxpZAotCQkJICAgJiYgdHotPnRyaXBzLnBhc3NpdmUuZmxhZ3MudmFsaWQpIHsKLQkJCXR6LT5jb29saW5nX21vZGUgPSBBQ1BJX1RIRVJNQUxfTU9ERV9QQVNTSVZFOwotCQl9IGVsc2UgaWYgKHR6LT50cmlwcy5hY3RpdmVbMF0uZmxhZ3MudmFsaWQKLQkJCSAgICYmICF0ei0+dHJpcHMucGFzc2l2ZS5mbGFncy52YWxpZCkgewotCQkJdHotPmNvb2xpbmdfbW9kZSA9IEFDUElfVEhFUk1BTF9NT0RFX0FDVElWRTsKLQkJfSBlbHNlIHsKLQkJCS8qIF9BQ3ggYW5kIF9QU1YgYXJlIG9wdGlvbmFsLCBidXQgX0NSVCBpcyByZXF1aXJlZCAqLwotCQkJdHotPmNvb2xpbmdfbW9kZSA9IEFDUElfVEhFUk1BTF9NT0RFX0NSSVRJQ0FMOwotCQl9Ci0JfQogCiAJLyogR2V0IGRlZmF1bHQgcG9sbGluZyBmcmVxdWVuY3kgW19UWlBdIChvcHRpb25hbCkgKi8KIAlpZiAodHpwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Rvc2hpYmFfYWNwaS5jIGIvZHJpdmVycy9hY3BpL3Rvc2hpYmFfYWNwaS5jCmluZGV4IDM5MDZkNDcuLjFjZmJlY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90b3NoaWJhX2FjcGkuYworKysgYi9kcml2ZXJzL2FjcGkvdG9zaGliYV9hY3BpLmMKQEAgLTUzOCw3ICs1MzgsNyBAQAogICAgICAgICAudXBkYXRlX3N0YXR1cyAgPSBzZXRfbGNkX3N0YXR1cywKIH07CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCB0b3NoaWJhX2FjcGlfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgdG9zaGliYV9hY3BpX2V4aXQodm9pZCkKIHsKIAlpZiAodG9zaGliYV9iYWNrbGlnaHRfZGV2aWNlKQogCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIodG9zaGliYV9iYWNrbGlnaHRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRhbGxvYy5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGFsbG9jLmMKaW5kZXggNTVhNzY0OC4uNmU1NmQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGFsbG9jLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGFsbG9jLmMKQEAgLTEwNyw3ICsxMDcsNiBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQotCiAjaWZkZWYgQUNQSV9EQkdfVFJBQ0tfQUxMT0NBVElPTlMKIAogCS8qIE1lbW9yeSBhbGxvY2F0aW9uIGxpc3RzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Y2FjaGUuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRjYWNoZS5jCmluZGV4IDg3MGY2ZWQuLjI4NWEwZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRjYWNoZS5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRjYWNoZS5jCkBAIC00NSw3ICs0NSw2IEBACiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1VUSUxJVElFUwogQUNQSV9NT0RVTEVfTkFNRSgidXRjYWNoZSIpCi0KICNpZmRlZiBBQ1BJX1VTRV9MT0NBTF9DQUNIRQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC02NCw3ICs2Myw3IEBACiBhY3BpX3N0YXR1cwogYWNwaV9vc19jcmVhdGVfY2FjaGUoY2hhciAqY2FjaGVfbmFtZSwKIAkJICAgICB1MTYgb2JqZWN0X3NpemUsCi0JCSAgICAgdTE2IG1heF9kZXB0aCwgc3RydWN0IGFjcGlfbWVtb3J5X2xpc3QgKipyZXR1cm5fY2FjaGUpCisJCSAgICAgdTE2IG1heF9kZXB0aCwgc3RydWN0IGFjcGlfbWVtb3J5X2xpc3QgKiogcmV0dXJuX2NhY2hlKQogewogCXN0cnVjdCBhY3BpX21lbW9yeV9saXN0ICpjYWNoZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGNvcHkuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRjb3B5LmMKaW5kZXggODRkNTI5ZGIuLjg3OWVhYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRjb3B5LmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGNvcHkuYwpAQCAtNjgsNiArNjgsMTAgQEAKIAkJCQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqcmV0dXJuX29iaik7CiAKIHN0YXRpYyBhY3BpX3N0YXR1cworYWNwaV91dF9jb3B5X2VwYWNrYWdlX3RvX2lwYWNrYWdlKHVuaW9uIGFjcGlfb2JqZWN0ICpleHRlcm5hbF9vYmplY3QsCisJCQkJICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICoqaW50ZXJuYWxfb2JqZWN0KTsKKworc3RhdGljIGFjcGlfc3RhdHVzCiBhY3BpX3V0X2NvcHlfc2ltcGxlX29iamVjdCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpzb3VyY2VfZGVzYywKIAkJCSAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmRlc3RfZGVzYyk7CiAKQEAgLTUxOCw3NyArNTIyLDczIEBACiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiB9CiAKLSNpZmRlZiBBQ1BJX0ZVVFVSRV9JTVBMRU1FTlRBVElPTgotLyogQ29kZSB0byBjb252ZXJ0IHBhY2thZ2VzIHRoYXQgYXJlIHBhcmFtZXRlcnMgdG8gY29udHJvbCBtZXRob2RzICovCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfdXRfY29weV9lcGFja2FnZV90b19pcGFja2FnZQogICoKLSAqIFBBUkFNRVRFUlM6ICAqaW50ZXJuYWxfb2JqZWN0ICAgLSBQb2ludGVyIHRvIHRoZSBvYmplY3Qgd2UgYXJlIHJldHVybmluZwotICogICAgICAgICAgICAgICpCdWZmZXIgICAgICAgICAgICAtIFdoZXJlIHRoZSBvYmplY3QgaXMgcmV0dXJuZWQKLSAqICAgICAgICAgICAgICAqc3BhY2VfdXNlZCAgICAgICAgLSBXaGVyZSB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QgaXMgcmV0dXJuZWQKKyAqIFBBUkFNRVRFUlM6ICBleHRlcm5hbF9vYmplY3QgICAgIC0gVGhlIGV4dGVybmFsIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQKKyAqICAgICAgICAgICAgICBpbnRlcm5hbF9vYmplY3QgICAgIC0gV2hlcmUgdGhlIGludGVybmFsIG9iamVjdCBpcyByZXR1cm5lZAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gcGxhY2UgYSBwYWNrYWdlIG9iamVjdCBpbiBhIHVzZXIKLSAqICAgICAgICAgICAgICBidWZmZXIuICBBIHBhY2thZ2Ugb2JqZWN0IGJ5IGRlZmluaXRpb24gY29udGFpbnMgb3RoZXIgb2JqZWN0cy4KLSAqCi0gKiAgICAgICAgICAgICAgVGhlIGJ1ZmZlciBpcyBhc3N1bWVkIHRvIGhhdmUgc3VmZmljaWVudCBzcGFjZSBmb3IgdGhlIG9iamVjdC4KLSAqICAgICAgICAgICAgICBUaGUgY2FsbGVyIG11c3QgaGF2ZSB2ZXJpZmllZCB0aGUgYnVmZmVyIGxlbmd0aCBuZWVkZWQgdXNpbmcgdGhlCi0gKiAgICAgICAgICAgICAgYWNwaV91dF9nZXRfb2JqZWN0X3NpemUgZnVuY3Rpb24gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqIERFU0NSSVBUSU9OOiBDb3B5IGFuIGV4dGVybmFsIHBhY2thZ2Ugb2JqZWN0IHRvIGFuIGludGVybmFsIHBhY2thZ2UuCisgKiAgICAgICAgICAgICAgSGFuZGxlcyBuZXN0ZWQgcGFja2FnZXMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX3V0X2NvcHlfZXBhY2thZ2VfdG9faXBhY2thZ2UodW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqaW50ZXJuYWxfb2JqZWN0LAotCQkJCSAgdTggKiBidWZmZXIsIHUzMiAqIHNwYWNlX3VzZWQpCithY3BpX3V0X2NvcHlfZXBhY2thZ2VfdG9faXBhY2thZ2UodW5pb24gYWNwaV9vYmplY3QgKmV4dGVybmFsX29iamVjdCwKKwkJCQkgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKippbnRlcm5hbF9vYmplY3QpCiB7Ci0JdTggKmZyZWVfc3BhY2U7Ci0JdW5pb24gYWNwaV9vYmplY3QgKmV4dGVybmFsX29iamVjdDsKLQl1MzIgbGVuZ3RoID0gMDsKLQl1MzIgdGhpc19pbmRleDsKLQl1MzIgb2JqZWN0X3NwYWNlID0gMDsKLQl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICp0aGlzX2ludGVybmFsX29iajsKLQl1bmlvbiBhY3BpX29iamVjdCAqdGhpc19leHRlcm5hbF9vYmo7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcGFja2FnZV9vYmplY3Q7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnBhY2thZ2VfZWxlbWVudHM7CisJYWNwaV9uYXRpdmVfdWludCBpOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9jb3B5X2VwYWNrYWdlX3RvX2lwYWNrYWdlKTsKIAotCS8qCi0JICogRmlyc3QgcGFja2FnZSBhdCBoZWFkIG9mIHRoZSBidWZmZXIKLQkgKi8KLQlleHRlcm5hbF9vYmplY3QgPSAodW5pb24gYWNwaV9vYmplY3QgKilidWZmZXI7CisJLyogQ3JlYXRlIHRoZSBwYWNrYWdlIG9iamVjdCAqLworCisJcGFja2FnZV9vYmplY3QgPQorCSAgICBhY3BpX3V0X2NyZWF0ZV9wYWNrYWdlX29iamVjdChleHRlcm5hbF9vYmplY3QtPnBhY2thZ2UuY291bnQpOworCWlmICghcGFja2FnZV9vYmplY3QpIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CisJfQorCisJcGFja2FnZV9lbGVtZW50cyA9IHBhY2thZ2Vfb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzOwogCiAJLyoKLQkgKiBGcmVlIHNwYWNlIGJlZ2lucyByaWdodCBhZnRlciB0aGUgZmlyc3QgcGFja2FnZQorCSAqIFJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbi4gUHJvYmFibHkgb2ssIHNpbmNlIG5lc3RlZCBleHRlcm5hbCBwYWNrYWdlcworCSAqIGFzIHBhcmFtZXRlcnMgc2hvdWxkIGJlIHZlcnkgcmFyZS4KIAkgKi8KLQlmcmVlX3NwYWNlID0gYnVmZmVyICsgc2l6ZW9mKHVuaW9uIGFjcGlfb2JqZWN0KTsKKwlmb3IgKGkgPSAwOyBpIDwgZXh0ZXJuYWxfb2JqZWN0LT5wYWNrYWdlLmNvdW50OyBpKyspIHsKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfdXRfY29weV9lb2JqZWN0X3RvX2lvYmplY3QoJmV4dGVybmFsX29iamVjdC0+cGFja2FnZS4KKwkJCQkJCSAgICBlbGVtZW50c1tpXSwKKwkJCQkJCSAgICAmcGFja2FnZV9lbGVtZW50c1tpXSk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCi0JZXh0ZXJuYWxfb2JqZWN0LT50eXBlID0gQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW50ZXJuYWxfb2JqZWN0KTsKLQlleHRlcm5hbF9vYmplY3QtPnBhY2thZ2UuY291bnQgPSBpbnRlcm5hbF9vYmplY3QtPnBhY2thZ2UuY291bnQ7Ci0JZXh0ZXJuYWxfb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopZnJlZV9zcGFjZTsKKwkJCS8qIFRydW5jYXRlIHBhY2thZ2UgYW5kIGRlbGV0ZSBpdCAqLwogCi0JLyoKLQkgKiBCdWlsZCBhbiBhcnJheSBvZiBBQ1BJX09CSkVDVFMgaW4gdGhlIGJ1ZmZlcgotCSAqIGFuZCBtb3ZlIHRoZSBmcmVlIHNwYWNlIHBhc3QgaXQKLQkgKi8KLQlmcmVlX3NwYWNlICs9Ci0JICAgIGV4dGVybmFsX29iamVjdC0+cGFja2FnZS5jb3VudCAqIHNpemVvZih1bmlvbiBhY3BpX29iamVjdCk7CisJCQlwYWNrYWdlX29iamVjdC0+cGFja2FnZS5jb3VudCA9IGk7CisJCQlwYWNrYWdlX2VsZW1lbnRzW2ldID0gTlVMTDsKKwkJCWFjcGlfdXRfcmVtb3ZlX3JlZmVyZW5jZShwYWNrYWdlX29iamVjdCk7CisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwkJfQorCX0KIAotCS8qIENhbGwgd2Fsa19wYWNrYWdlICovCi0KKwkqaW50ZXJuYWxfb2JqZWN0ID0gcGFja2FnZV9vYmplY3Q7CisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKLSNlbmRpZgkJCQkvKiBGdXR1cmUgaW1wbGVtZW50YXRpb24gKi8KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF9jb3B5X2VvYmplY3RfdG9faW9iamVjdAogICoKLSAqIFBBUkFNRVRFUlM6ICAqaW50ZXJuYWxfb2JqZWN0ICAgLSBUaGUgZXh0ZXJuYWwgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZAotICogICAgICAgICAgICAgICpidWZmZXJfcHRyICAgICAtIFdoZXJlIHRoZSBpbnRlcm5hbCBvYmplY3QgaXMgcmV0dXJuZWQKKyAqIFBBUkFNRVRFUlM6ICBleHRlcm5hbF9vYmplY3QgICAgIC0gVGhlIGV4dGVybmFsIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQKKyAqICAgICAgICAgICAgICBpbnRlcm5hbF9vYmplY3QgICAgIC0gV2hlcmUgdGhlIGludGVybmFsIG9iamVjdCBpcyByZXR1cm5lZAogICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMgICAgICAgICAgLSB0aGUgc3RhdHVzIG9mIHRoZSBjYWxsCisgKiBSRVRVUk46ICAgICAgU3RhdHVzICAgICAgICAgICAgICAtIHRoZSBzdGF0dXMgb2YgdGhlIGNhbGwKICAqCiAgKiBERVNDUklQVElPTjogQ29udmVydHMgYW4gZXh0ZXJuYWwgb2JqZWN0IHRvIGFuIGludGVybmFsIG9iamVjdC4KICAqCkBAIC02MDMsMTYgKzYwMywxMCBAQAogCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY29weV9lb2JqZWN0X3RvX2lvYmplY3QpOwogCiAJaWYgKGV4dGVybmFsX29iamVjdC0+dHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgewotCQkvKgotCQkgKiBQYWNrYWdlcyBhcyBleHRlcm5hbCBpbnB1dCB0byBjb250cm9sIG1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQsCi0JCSAqLwotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJQYWNrYWdlcyBhcyBwYXJhbWV0ZXJzIG5vdCBpbXBsZW1lbnRlZCEiKSk7Ci0KLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PVF9JTVBMRU1FTlRFRCk7Ci0JfQotCi0JZWxzZSB7CisJCXN0YXR1cyA9CisJCSAgICBhY3BpX3V0X2NvcHlfZXBhY2thZ2VfdG9faXBhY2thZ2UoZXh0ZXJuYWxfb2JqZWN0LAorCQkJCQkJICAgICAgaW50ZXJuYWxfb2JqZWN0KTsKKwl9IGVsc2UgewogCQkvKgogCQkgKiBCdWlsZCBhIHNpbXBsZSBvYmplY3QgKG5vIG5lc3RlZCBvYmplY3RzKQogCQkgKi8KQEAgLTgwMywzMSArNzk3LDE5IEBACiAJCSAqIENyZWF0ZSBhbmQgYnVpbGQgdGhlIHBhY2thZ2Ugb2JqZWN0CiAJCSAqLwogCQl0YXJnZXRfb2JqZWN0ID0KLQkJICAgIGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX1RZUEVfUEFDS0FHRSk7CisJCSAgICBhY3BpX3V0X2NyZWF0ZV9wYWNrYWdlX29iamVjdChzb3VyY2Vfb2JqZWN0LT5wYWNrYWdlLmNvdW50KTsKIAkJaWYgKCF0YXJnZXRfb2JqZWN0KSB7CiAJCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CiAJCX0KIAotCQl0YXJnZXRfb2JqZWN0LT5wYWNrYWdlLmNvdW50ID0gc291cmNlX29iamVjdC0+cGFja2FnZS5jb3VudDsKIAkJdGFyZ2V0X29iamVjdC0+Y29tbW9uLmZsYWdzID0gc291cmNlX29iamVjdC0+Y29tbW9uLmZsYWdzOwogCi0JCS8qCi0JCSAqIENyZWF0ZSB0aGUgb2JqZWN0IGFycmF5Ci0JCSAqLwotCQl0YXJnZXRfb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoKChhY3BpX3NpemUpIHNvdXJjZV9vYmplY3QtPnBhY2thZ2UuY291bnQgKyAxKSAqIHNpemVvZih2b2lkICopKTsKLQkJaWYgKCF0YXJnZXRfb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzKSB7Ci0JCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7Ci0JCQlnb3RvIGVycm9yX2V4aXQ7Ci0JCX0KKwkJLyogUGFzcyB0aGUgbmV3IHBhY2thZ2Ugb2JqZWN0IGJhY2sgdG8gdGhlIHBhY2thZ2Ugd2FsayByb3V0aW5lICovCiAKLQkJLyoKLQkJICogUGFzcyB0aGUgbmV3IHBhY2thZ2Ugb2JqZWN0IGJhY2sgdG8gdGhlIHBhY2thZ2Ugd2FsayByb3V0aW5lCi0JCSAqLwogCQlzdGF0ZS0+cGtnLnRoaXNfdGFyZ2V0X29iaiA9IHRhcmdldF9vYmplY3Q7CiAKLQkJLyoKLQkJICogU3RvcmUgdGhlIG9iamVjdCBwb2ludGVyIGluIHRoZSBwYXJlbnQgcGFja2FnZSBvYmplY3QKLQkJICovCisJCS8qIFN0b3JlIHRoZSBvYmplY3QgcG9pbnRlciBpbiB0aGUgcGFyZW50IHBhY2thZ2Ugb2JqZWN0ICovCisKIAkJKnRoaXNfdGFyZ2V0X3B0ciA9IHRhcmdldF9vYmplY3Q7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVidWcuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWJ1Zy5jCmluZGV4IDYxYWQ0ZjIuLmM3ZTEyOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWJ1Zy5jCkBAIC00NSw3ICs0NSw2IEBACiAKICNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX1VUSUxJVElFUwogQUNQSV9NT0RVTEVfTkFNRSgidXRkZWJ1ZyIpCi0KICNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAogc3RhdGljIGFjcGlfdGhyZWFkX2lkIGFjcGlfZ2JsX3ByZXZfdGhyZWFkX2lkOwogc3RhdGljIGNoYXIgKmFjcGlfZ2JsX2ZuX2VudHJ5X3N0ciA9ICItLS0tRW50cnkiOwpAQCAtMTgxLDcgKzE4MCw4IEBACiAJCWlmIChBQ1BJX0xWX1RIUkVBRFMgJiBhY3BpX2RiZ19sZXZlbCkgewogCQkJYWNwaV9vc19wcmludGYKIAkJCSAgICAoIlxuKioqKiBDb250ZXh0IFN3aXRjaCBmcm9tIFRJRCAlbFggdG8gVElEICVsWCAqKioqXG5cbiIsCi0JCQkgICAgICh1bnNpZ25lZCBsb25nKWFjcGlfZ2JsX3ByZXZfdGhyZWFkX2lkLCAodW5zaWduZWQgbG9uZyl0aHJlYWRfaWQpOworCQkJICAgICAodW5zaWduZWQgbG9uZylhY3BpX2dibF9wcmV2X3RocmVhZF9pZCwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpdGhyZWFkX2lkKTsKIAkJfQogCiAJCWFjcGlfZ2JsX3ByZXZfdGhyZWFkX2lkID0gdGhyZWFkX2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlbGV0ZS5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlbGV0ZS5jCmluZGV4IDY3M2EwY2EuLmY3NzdjZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWxldGUuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZGVsZXRlLmMKQEAgLTE3MCw2ICsxNzAsNyBAQAogCQkJYWNwaV9vc19kZWxldGVfbXV0ZXgob2JqZWN0LT5tdXRleC5vc19tdXRleCk7CiAJCQlhY3BpX2dibF9nbG9iYWxfbG9ja19tdXRleCA9IE5VTEw7CiAJCX0gZWxzZSB7CisJCQlhY3BpX2V4X3VubGlua19tdXRleChvYmplY3QpOwogCQkJYWNwaV9vc19kZWxldGVfbXV0ZXgob2JqZWN0LT5tdXRleC5vc19tdXRleCk7CiAJCX0KIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZXZhbC5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGV2YWwuYwppbmRleCAxM2Q1ODc5Li44ZWM2ZjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0ZXZhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRldmFsLmMKQEAgLTU5LDEwICs1OSw5IEBACiAvKgogICogU3RyaW5ncyBzdXBwb3J0ZWQgYnkgdGhlIF9PU0kgcHJlZGVmaW5lZCAoaW50ZXJuYWwpIG1ldGhvZC4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmFjcGlfaW50ZXJmYWNlc19zdXBwb3J0ZWRbXSA9IHsKK3N0YXRpYyBjaGFyICphY3BpX2ludGVyZmFjZXNfc3VwcG9ydGVkW10gPSB7CiAJLyogT3BlcmF0aW5nIFN5c3RlbSBWZW5kb3IgU3RyaW5ncyAqLwogCi0JIkxpbnV4IiwKIAkiV2luZG93cyAyMDAwIiwKIAkiV2luZG93cyAyMDAxIiwKIAkiV2luZG93cyAyMDAxIFNQMCIsCkBAIC0xNTgsNiArMTU3LDMxIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfb3NpX2ludmFsaWRhdGUKKyAqCisgKiBQQVJBTUVURVJTOiAgaW50ZXJmYWNlX3N0cmluZworICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogaW52YWxpZGF0ZSBzdHJpbmcgaW4gcHJlLWRlZmllbmQgX09TSSBzdHJpbmcgbGlzdAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzIGFjcGlfb3NpX2ludmFsaWRhdGUoY2hhciAqaW50ZXJmYWNlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFDUElfQVJSQVlfTEVOR1RIKGFjcGlfaW50ZXJmYWNlc19zdXBwb3J0ZWQpOyBpKyspIHsKKwkJaWYgKCFBQ1BJX1NUUkNNUChpbnRlcmZhY2UsIGFjcGlfaW50ZXJmYWNlc19zdXBwb3J0ZWRbaV0pKSB7CisJCQkqYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZFtpXSA9ICdcMCc7CisJCQlyZXR1cm4gQUVfT0s7CisJCX0KKwl9CisJcmV0dXJuIEFFX05PVF9GT1VORDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBGVU5DVElPTjogICAgYWNwaV91dF9ldmFsdWF0ZV9vYmplY3QKICAqCiAgKiBQQVJBTUVURVJTOiAgcHJlZml4X25vZGUgICAgICAgICAtIFN0YXJ0aW5nIG5vZGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRnbG9iYWwuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRnbG9iYWwuYwppbmRleCBhZjMzMzU4Li4xNjIxNjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0Z2xvYmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGdsb2JhbC5jCkBAIC01NSwxMiArNTUsMTAgQEAKICAqIFN0YXRpYyBnbG9iYWwgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24uCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogLyoKICAqIFdlIHdhbnQgdGhlIGRlYnVnIHN3aXRjaGVzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgc28gdGhleQogICogYXJlIGFscmVhZHkgc2V0IHdoZW4gdGhlIGRlYnVnZ2VyIGlzIGVudGVyZWQuCiAgKi8KLQogLyogRGVidWcgc3dpdGNoIC0gbGV2ZWwgYW5kIHRyYWNlIG1hc2sgKi8KIHUzMiBhY3BpX2RiZ19sZXZlbCA9IEFDUElfREVCVUdfREVGQVVMVDsKIApAQCAtNzM1LDUgKzczMyw1IEBACiB9CiAKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2RiZ19sZXZlbCkKLUFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2RiZ19sYXllcikKLUFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dwZV9jb3VudCkKKyAgICBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9kYmdfbGF5ZXIpCisgICAgQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ3BlX2NvdW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG1pc2MuYyBiL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRtaXNjLmMKaW5kZXggNTAxMzNmZi4uMmQxOWY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bWlzYy5jCkBAIC04MDIsOSArODAyLDggQEAKIAogCQl2YWxpZF9kaWdpdHMrKzsKIAotCQlpZiAoc2lnbl9vZjB4Ci0JCSAgICAmJiAoKHZhbGlkX2RpZ2l0cyA+IDE2KQotCQkJfHwgKCh2YWxpZF9kaWdpdHMgPiA4KSAmJiBtb2RlMzIpKSkgeworCQlpZiAoc2lnbl9vZjB4ICYmICgodmFsaWRfZGlnaXRzID4gMTYpCisJCQkJICB8fCAoKHZhbGlkX2RpZ2l0cyA+IDgpICYmIG1vZGUzMikpKSB7CiAJCQkvKgogCQkJICogVGhpcyBpcyB0b19pbnRlZ2VyIG9wZXJhdGlvbiBjYXNlLgogCQkJICogTm8gYW55IHJlc3RyaWN0aW9ucyBmb3Igc3RyaW5nLXRvLWludGVnZXIgY29udmVyc2lvbiwKQEAgLTEwNDksNiArMTA0OCw3IEBACiAJYWNwaV9vc192cHJpbnRmKGZvcm1hdCwgYXJncyk7CiAJYWNwaV9vc19wcmludGYoIiBbJVhdXG4iLCBBQ1BJX0NBX1ZFUlNJT04pOwogfQorCiBFWFBPUlRfU1lNQk9MKGFjcGlfdXRfZXhjZXB0aW9uKTsKIAogdm9pZCBBQ1BJX0lOVEVSTkFMX1ZBUl9YRkFDRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG11dGV4LmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYwppbmRleCBjYmFkMmVmLi40ODIwYmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX01VVEVYLAogCQkJICAiVGhyZWFkICVsWCBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgTXV0ZXggWyVzXVxuIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcpIHRoaXNfdGhyZWFkX2lkLAorCQkJICAodW5zaWduZWQgbG9uZyl0aGlzX3RocmVhZF9pZCwKIAkJCSAgYWNwaV91dF9nZXRfbXV0ZXhfbmFtZShtdXRleF9pZCkpKTsKIAogCXN0YXR1cyA9IGFjcGlfb3NfYWNxdWlyZV9tdXRleChhY3BpX2dibF9tdXRleF9pbmZvW211dGV4X2lkXS5tdXRleCwKQEAgLTI1Miw3ICsyNTIsNyBAQAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX01VVEVYLAogCQkJCSAgIlRocmVhZCAlbFggYWNxdWlyZWQgTXV0ZXggWyVzXVxuIiwKLQkJCQkgICh1bnNpZ25lZCBsb25nKSB0aGlzX3RocmVhZF9pZCwKKwkJCQkgICh1bnNpZ25lZCBsb25nKXRoaXNfdGhyZWFkX2lkLAogCQkJCSAgYWNwaV91dF9nZXRfbXV0ZXhfbmFtZShtdXRleF9pZCkpKTsKIAogCQlhY3BpX2dibF9tdXRleF9pbmZvW211dGV4X2lkXS51c2VfY291bnQrKzsKQEAgLTI2MCw3ICsyNjAsNyBAQAogCX0gZWxzZSB7CiAJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCiAJCQkJIlRocmVhZCAlbFggY291bGQgbm90IGFjcXVpcmUgTXV0ZXggWyVYXSIsCi0JCQkJKHVuc2lnbmVkIGxvbmcpIHRoaXNfdGhyZWFkX2lkLCBtdXRleF9pZCkpOworCQkJCSh1bnNpZ25lZCBsb25nKXRoaXNfdGhyZWFkX2lkLCBtdXRleF9pZCkpOwogCX0KIAogCXJldHVybiAoc3RhdHVzKTsKQEAgLTI4Nyw3ICsyODcsNyBAQAogCXRoaXNfdGhyZWFkX2lkID0gYWNwaV9vc19nZXRfdGhyZWFkX2lkKCk7CiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9NVVRFWCwKIAkJCSAgIlRocmVhZCAlbFggcmVsZWFzaW5nIE11dGV4IFslc11cbiIsCi0JCQkgICh1bnNpZ25lZCBsb25nKSB0aGlzX3RocmVhZF9pZCwKKwkJCSAgKHVuc2lnbmVkIGxvbmcpdGhpc190aHJlYWRfaWQsCiAJCQkgIGFjcGlfdXRfZ2V0X211dGV4X25hbWUobXV0ZXhfaWQpKSk7CiAKIAlpZiAobXV0ZXhfaWQgPiBBQ1BJX01BWF9NVVRFWCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG9iamVjdC5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG9iamVjdC5jCmluZGV4IDQ2OTYxMjQuLmRiMGI5YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRvYmplY3QuYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0b2JqZWN0LmMKQEAgLTE0Niw2ICsxNDYsNDggQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBGVU5DVElPTjogICAgYWNwaV91dF9jcmVhdGVfcGFja2FnZV9vYmplY3QKKyAqCisgKiBQQVJBTUVURVJTOiAgQ291bnQgICAgICAgICAgICAgICAtIE51bWJlciBvZiBwYWNrYWdlIGVsZW1lbnRzCisgKgorICogUkVUVVJOOiAgICAgIFBvaW50ZXIgdG8gYSBuZXcgUGFja2FnZSBvYmplY3QsIG51bGwgb24gZmFpbHVyZQorICoKKyAqIERFU0NSSVBUSU9OOiBDcmVhdGUgYSBmdWxseSBpbml0aWFsaXplZCBwYWNrYWdlIG9iamVjdAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3VuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmFjcGlfdXRfY3JlYXRlX3BhY2thZ2Vfb2JqZWN0KHUzMiBjb3VudCkKK3sKKwl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpwYWNrYWdlX2Rlc2M7CisJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqKnBhY2thZ2VfZWxlbWVudHM7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMih1dF9jcmVhdGVfcGFja2FnZV9vYmplY3QsIGNvdW50KTsKKworCS8qIENyZWF0ZSBhIG5ldyBQYWNrYWdlIG9iamVjdCAqLworCisJcGFja2FnZV9kZXNjID0gYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0KEFDUElfVFlQRV9QQUNLQUdFKTsKKwlpZiAoIXBhY2thZ2VfZGVzYykgeworCQlyZXR1cm5fUFRSKE5VTEwpOworCX0KKworCS8qCisJICogQ3JlYXRlIHRoZSBlbGVtZW50IGFycmF5LiBDb3VudCsxIGFsbG93cyB0aGUgYXJyYXkgdG8gYmUgbnVsbAorCSAqIHRlcm1pbmF0ZWQuCisJICovCisJcGFja2FnZV9lbGVtZW50cyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKChhY3BpX3NpemUpCisJCQkJCQkoY291bnQgKyAxKSAqIHNpemVvZih2b2lkICopKTsKKwlpZiAoIXBhY2thZ2VfZWxlbWVudHMpIHsKKwkJQUNQSV9GUkVFKHBhY2thZ2VfZGVzYyk7CisJCXJldHVybl9QVFIoTlVMTCk7CisJfQorCisJcGFja2FnZV9kZXNjLT5wYWNrYWdlLmNvdW50ID0gY291bnQ7CisJcGFja2FnZV9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzID0gcGFja2FnZV9lbGVtZW50czsKKwlyZXR1cm5fUFRSKHBhY2thZ2VfZGVzYyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfdXRfY3JlYXRlX2J1ZmZlcl9vYmplY3QKICAqCiAgKiBQQVJBTUVURVJTOiAgYnVmZmVyX3NpemUgICAgICAgICAgICAtIFNpemUgb2YgYnVmZmVyIHRvIGJlIGNyZWF0ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRyZXNyYy5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHJlc3JjLmMKaW5kZXggZThmZTFiYS4uY2JiZDMzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHJlc3JjLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHJlc3JjLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKIAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfVVRJTElUSUVTCiBBQ1BJX01PRFVMRV9OQU1FKCJ1dHJlc3JjIikKLQogI2lmIGRlZmluZWQoQUNQSV9ESVNBU1NFTUJMRVIpIHx8IGRlZmluZWQgKEFDUElfREVCVUdHRVIpCiAvKgogICogU3RyaW5ncyB1c2VkIHRvIGRlY29kZSByZXNvdXJjZSBkZXNjcmlwdG9ycy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXR4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHhmYWNlLmMKaW5kZXggZGUzMjc2Zi4uMmQ0OTY5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dHhmYWNlLmMKQEAgLTYxLDcgKzYxLDcgQEAKICAqICAgICAgICAgICAgICBjYWxsZWQsIHNvIGFueSBlYXJseSBpbml0aWFsaXphdGlvbiBiZWxvbmdzIGhlcmUuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzIGFjcGlfaW5pdGlhbGl6ZV9zdWJzeXN0ZW0odm9pZCkKK2FjcGlfc3RhdHVzIF9faW5pdCBhY3BpX2luaXRpYWxpemVfc3Vic3lzdGVtKHZvaWQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCkBAIC0xMDgsOCArMTA4LDYgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfaW5pdGlhbGl6ZV9zdWJzeXN0ZW0pCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZW5hYmxlX3N1YnN5c3RlbQpAQCAtMzM3LDcgKzMzNSw2IEBACiB9CiAKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX3Rlcm1pbmF0ZSkKLQogI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTQ3MCw3ICs0NjcsNiBAQAogCiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9pbnN0YWxsX2luaXRpYWxpemF0aW9uX2hhbmRsZXIpCiAjZW5kaWYJCQkJLyogIEFDUElfRlVUVVJFX1VTQUdFICAqLwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9wdXJnZV9jYWNoZWRfb2JqZWN0cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvS2NvbmZpZyBiL2RyaXZlcnMvYXRhL0tjb25maWcKaW5kZXggNDVkYmRjMS4uN2Q4OTNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvS2NvbmZpZworKysgYi9kcml2ZXJzL2F0YS9LY29uZmlnCkBAIC0yLDEzICsyLDEzIEBACiAjIFNBVEEvUEFUQSBkcml2ZXIgY29uZmlndXJhdGlvbgogIwogCi1tZW51ICJTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMiCi0KLWNvbmZpZyBBVEEKLQl0cmlzdGF0ZSAiQVRBIGRldmljZSBzdXBwb3J0IgorbWVudWNvbmZpZyBBVEEKKwl0cmlzdGF0ZSAiU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzIgorCWRlcGVuZHMgb24gSEFTX0lPTUVNCiAJZGVwZW5kcyBvbiBCTE9DSwogCWRlcGVuZHMgb24gIShNMzJSIHx8IE02OEspIHx8IEJST0tFTgogCWRlcGVuZHMgb24gIVNVTjQgfHwgQlJPS0VOCisJZGVwZW5kcyBvbiAhKFNQQVJDNjQgJiYgIVBDSSkKIAlzZWxlY3QgU0NTSQogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSB3YW50IHRvIHVzZSBhIEFUQSBoYXJkIGRpc2ssIEFUQSB0YXBlIGRyaXZlLCBBVEEgQ0QtUk9NIG9yCkBAIC0yMyw2ICsyMywxOSBAQAogICAgICAgIGJvb2wKICAgICAgICBkZWZhdWx0IG4KIAorY29uZmlnIEFUQV9BQ1BJCisJYm9vbAorCWRlcGVuZHMgb24gQUNQSSAmJiBQQ0kKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIEFUQS1yZWxhdGVkIEFDUEkgb2JqZWN0cy4KKwkgIFRoZXNlIEFDUEkgb2JqZWN0cyBhZGQgdGhlIGFiaWxpdHkgdG8gcmV0cmlldmUgdGFza2ZpbGVzCisJICBmcm9tIHRoZSBBQ1BJIEJJT1MgYW5kIHdyaXRlIHRoZW0gdG8gdGhlIGRpc2sgY29udHJvbGxlci4KKwkgIFRoZXNlIG9iamVjdHMgbWF5IGJlIHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2UsIHNlY3VyaXR5LAorCSAgcG93ZXIgbWFuYWdlbWVudCwgb3Igb3RoZXIgYXJlYXMuCisJICBZb3UgY2FuIGRpc2FibGUgdGhpcyBhdCBrZXJuZWwgYm9vdCB0aW1lIGJ5IHVzaW5nIHRoZQorCSAgb3B0aW9uIGxpYmF0YS5ub2FjcGk9MQorCiBjb25maWcgU0FUQV9BSENJCiAJdHJpc3RhdGUgIkFIQ0kgU0FUQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCkBAIC0xMjAsNyArMTMzLDcgQEAKIAlkZXBlbmRzIG9uIFBDSQogCXNlbGVjdCBQQVRBX1NJUwogCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgU2lTIFNlcmlhbCBBVEEgb24gCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIFNpUyBTZXJpYWwgQVRBIG9uCiAJICBTaVMgOTY0Lzk2NS85NjYvMTgwIGFuZCBQYXJhbGxlbCBBVEEgb24gU2lTIDE4MC4KIAkgIFRoZSBQQVRBIHN1cHBvcnQgZm9yIFNpUyAxODAgcmVxdWlyZXMgYWRkaXRpb25hbGx5IHRvCiAJICBlbmFibGUgdGhlIFBBVEFfU0lTIGRyaXZlciBpbiB0aGUgY29uZmlnLgpAQCAtMTU2LDE5ICsxNjksNiBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgSW5pdGlvIDE2MnggU2VyaWFsIEFUQS4KIAotY29uZmlnIFNBVEFfQUNQSQotCWJvb2wKLQlkZXBlbmRzIG9uIEFDUEkgJiYgUENJCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBTQVRBLXJlbGF0ZWQgQUNQSSBvYmplY3RzLgotCSAgVGhlc2UgQUNQSSBvYmplY3RzIGFkZCB0aGUgYWJpbGl0eSB0byByZXRyaWV2ZSB0YXNrZmlsZXMKLQkgIGZyb20gdGhlIEFDUEkgQklPUyBhbmQgd3JpdGUgdGhlbSB0byB0aGUgZGlzayBjb250cm9sbGVyLgotCSAgVGhlc2Ugb2JqZWN0cyBtYXkgYmUgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSwgc2VjdXJpdHksCi0JICBwb3dlciBtYW5hZ2VtZW50LCBvciBvdGhlciBhcmVhcy4KLQkgIFlvdSBjYW4gZGlzYWJsZSB0aGlzIGF0IGtlcm5lbCBib290IHRpbWUgYnkgdXNpbmcgdGhlCi0JICBvcHRpb24gbGliYXRhLm5vYWNwaT0xCi0KIGNvbmZpZyBQQVRBX0FMSQogCXRyaXN0YXRlICJBTGkgUEFUQSBzdXBwb3J0IChFeHBlcmltZW50YWwpIgogCWRlcGVuZHMgb24gUENJICYmIEVYUEVSSU1FTlRBTApAQCAtNDM1LDcgKzQzNSw3IEBACiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBETUEvUElPIHN1cHBvcnQgZm9yIHRoZSBsYXRlciBPUFRpCiAJICBjb250cm9sbGVycyBmb3VuZCBvbiBzb21lIG9sZCBtb3RoZXJib2FyZHMgYW5kIGluIHNvbWUKLQkgIGxhdG9wcworCSAgbGFwdG9wcy4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtNTg0LDYgKzU4NCw0IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWVuZGlmCi1lbmRtZW51Ci0KK2VuZGlmICMgQVRBCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9NYWtlZmlsZSBiL2RyaXZlcnMvYXRhL01ha2VmaWxlCmluZGV4IDZmNDJhMGUuLjgxNDljNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYXRhL01ha2VmaWxlCkBAIC02OSw0ICs2OSw0IEBACiBvYmotJChDT05GSUdfUEFUQV9MRUdBQ1kpCSs9IHBhdGFfbGVnYWN5Lm8KIAogbGliYXRhLW9ianMJOj0gbGliYXRhLWNvcmUubyBsaWJhdGEtc2NzaS5vIGxpYmF0YS1zZmYubyBsaWJhdGEtZWgubwotbGliYXRhLSQoQ09ORklHX1NBVEFfQUNQSSkgKz0gbGliYXRhLWFjcGkubworbGliYXRhLSQoQ09ORklHX0FUQV9BQ1BJKQkrPSBsaWJhdGEtYWNwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggMzRjNTUzNC4uN2JhZWFmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJhaGNpIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4xIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4yIgogCiAKIGVudW0gewpAQCAtMTcwLDEwICsxNzAsMTIgQEAKIAlBSENJX0ZMQUdfSUdOX0lSUV9JRl9FUlIJPSAoMSA8PCAyNSksIC8qIGlnbm9yZSBJUlFfSUZfRVJSICovCiAJQUhDSV9GTEFHX0hPTk9SX1BJCQk9ICgxIDw8IDI2KSwgLyogaG9ub3IgUE9SVFNfSU1QTCAqLwogCUFIQ0lfRkxBR19JR05fU0VSUl9JTlRFUk5BTAk9ICgxIDw8IDI3KSwgLyogaWdub3JlIFNFUlJfSU5URVJOQUwgKi8KKwlBSENJX0ZMQUdfMzJCSVRfT05MWQkJPSAoMSA8PCAyOCksIC8qIGZvcmNlIDMyYml0ICovCiAKIAlBSENJX0ZMQUdfQ09NTU9OCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19QSU9fRE1BIHwKLQkJCQkJICBBVEFfRkxBR19TS0lQX0QySF9CU1ksCisJCQkJCSAgQVRBX0ZMQUdfU0tJUF9EMkhfQlNZIHwKKwkJCQkJICBBVEFfRkxBR19BQ1BJX1NBVEEsCiB9OwogCiBzdHJ1Y3QgYWhjaV9jbWRfaGRyIHsKQEAgLTI1MCwxMCArMjUyLDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhaGNpX29wcyA9IHsKQEAgLTM1Nyw3ICszNTUsOCBAQAogCS8qIGJvYXJkX2FoY2lfc2I2MDAgKi8KIAl7CiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OIHwKLQkJCQkgIEFIQ0lfRkxBR19JR05fU0VSUl9JTlRFUk5BTCwKKwkJCQkgIEFIQ0lfRkxBR19JR05fU0VSUl9JTlRFUk5BTCB8CisJCQkJICBBSENJX0ZMQUdfMzJCSVRfT05MWSwKIAkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSAweDdmLCAvKiB1ZG1hMC02IDsgRklYTUUgKi8KIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLApAQCAtNDAwLDYgKzM5OSw3IEBACiAKIAkvKiBBVEkgKi8KIAl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzgwKSwgYm9hcmRfYWhjaV9zYjYwMCB9LCAvKiBBVEkgU0I2MDAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzkwKSwgYm9hcmRfYWhjaV9zYjYwMCB9LCAvKiBBVEkgU0I3MDAgKi8KIAogCS8qIFZJQSAqLwogCXsgUENJX1ZERVZJQ0UoVklBLCAweDMzNDkpLCBib2FyZF9haGNpX3Z0ODI1MSB9LCAvKiBWSUEgVlQ4MjUxICovCkBAIC00OTQsNiArNDk0LDEzIEBACiAJaHByaXYtPnNhdmVkX2NhcCA9IGNhcCA9IHJlYWRsKG1taW8gKyBIT1NUX0NBUCk7CiAJaHByaXYtPnNhdmVkX3BvcnRfbWFwID0gcG9ydF9tYXAgPSByZWFkbChtbWlvICsgSE9TVF9QT1JUU19JTVBMKTsKIAorCS8qIHNvbWUgY2hpcHMgbGllIGFib3V0IDY0Yml0IHN1cHBvcnQgKi8KKwlpZiAoKGNhcCAmIEhPU1RfQ0FQXzY0KSAmJiAocGktPmZsYWdzICYgQUhDSV9GTEFHXzMyQklUX09OTFkpKSB7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LAorCQkJICAgImNvbnRyb2xsZXIgY2FuJ3QgZG8gNjRiaXQgRE1BLCBmb3JjaW5nIDMyYml0XG4iKTsKKwkJY2FwICY9IH5IT1NUX0NBUF82NDsKKwl9CisKIAkvKiBmaXh1cCB6ZXJvIHBvcnRfbWFwICovCiAJaWYgKCFwb3J0X21hcCkgewogCQlwb3J0X21hcCA9ICgxIDw8IGFoY2lfbnJfcG9ydHMoaHByaXYtPmNhcCkpIC0gMTsKQEAgLTg3NCw3ICs4ODEsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFoY2lfc29mdHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3MpCitzdGF0aWMgaW50IGFoY2lfc29mdHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3MsCisJCQkgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CkBAIC05NTksMTUgKzk2NywxMyBAQAogCSAqLwogCW1zbGVlcCgxNTApOwogCi0JKmNsYXNzID0gQVRBX0RFVl9OT05FOwotCWlmIChhdGFfcG9ydF9vbmxpbmUoYXApKSB7Ci0JCWlmIChhdGFfYnVzeV9zbGVlcChhcCwgQVRBX1RNT1VUX0JPT1RfUVVJQ0ssIEFUQV9UTU9VVF9CT09UKSkgewotCQkJcmMgPSAtRUlPOwotCQkJcmVhc29uID0gImRldmljZSBub3QgcmVhZHkiOwotCQkJZ290byBmYWlsOwotCQl9Ci0JCSpjbGFzcyA9IGFoY2lfZGV2X2NsYXNzaWZ5KGFwKTsKKwlyYyA9IGF0YV93YWl0X3JlYWR5KGFwLCBkZWFkbGluZSk7CisJLyogbGluayBvY2N1cGllZCwgLUVOT0RFViB0b28gaXMgYW4gZXJyb3IgKi8KKwlpZiAocmMpIHsKKwkJcmVhc29uID0gImRldmljZSBub3QgcmVhZHkiOworCQlnb3RvIGZhaWw7CiAJfQorCSpjbGFzcyA9IGFoY2lfZGV2X2NsYXNzaWZ5KGFwKTsKIAogCURQUklOVEsoIkVYSVQsIGNsYXNzPSV1XG4iLCAqY2xhc3MpOwogCXJldHVybiAwOwpAQCAtOTc5LDcgKzk4NSw4IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGFoY2lfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3MpCitzdGF0aWMgaW50IGFoY2lfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3MsCisJCQkgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJdTggKmQyaF9maXMgPSBwcC0+cnhfZmlzICsgUlhfRklTX0QySF9SRUc7CkBAIC05OTUsNyArMTAwMiw3IEBACiAJdGYuY29tbWFuZCA9IDB4ODA7CiAJYXRhX3RmX3RvX2ZpcygmdGYsIGQyaF9maXMsIDApOwogCi0JcmMgPSBzYXRhX3N0ZF9oYXJkcmVzZXQoYXAsIGNsYXNzKTsKKwlyYyA9IHNhdGFfc3RkX2hhcmRyZXNldChhcCwgY2xhc3MsIGRlYWRsaW5lKTsKIAogCWFoY2lfc3RhcnRfZW5naW5lKGFwKTsKIApAQCAtMTAwOCw3ICsxMDE1LDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgYWhjaV92dDgyNTFfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3MpCitzdGF0aWMgaW50IGFoY2lfdnQ4MjUxX2hhcmRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAorCQkJCSB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewogCWludCByYzsKIApAQCAtMTAxNiw3ICsxMDI0LDggQEAKIAogCWFoY2lfc3RvcF9lbmdpbmUoYXApOwogCi0JcmMgPSBzYXRhX3BvcnRfaGFyZHJlc2V0KGFwLCBzYXRhX2VoY19kZWJfdGltaW5nKCZhcC0+ZWhfY29udGV4dCkpOworCXJjID0gc2F0YV9wb3J0X2hhcmRyZXNldChhcCwgc2F0YV9laGNfZGViX3RpbWluZygmYXAtPmVoX2NvbnRleHQpLAorCQkJCSBkZWFkbGluZSk7CiAKIAkvKiB2dDgyNTEgbmVlZHMgU0Vycm9yIGNsZWFyZWQgZm9yIHRoZSBwb3J0IHRvIG9wZXJhdGUgKi8KIAlhaGNpX3Njcl93cml0ZShhcCwgU0NSX0VSUk9SLCBhaGNpX3Njcl9yZWFkKGFwLCBTQ1JfRVJST1IpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCmluZGV4IDkyYTQ5MWQuLjc1NjVmMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FICJhdGFfZ2VuZXJpYyIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi4xMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi4xMiIKIAogLyoKICAqCUEgZ2VuZXJpYyBwYXJhbGxlbCBBVEEgZHJpdmVyIHVzaW5nIGxpYmF0YQpAQCAtNTQsNyArNTQsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFUQV9NQVhfREVWSUNFUzsgaSsrKSB7CiAJCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSAmYXAtPmRldmljZVtpXTsKLQkJaWYgKGF0YV9kZXZfcmVhZHkoZGV2KSkgeworCQlpZiAoYXRhX2Rldl9lbmFibGVkKGRldikpIHsKIAkJCS8qIFdlIGRvbid0IHJlYWxseSBjYXJlICovCiAJCQlkZXYtPnBpb19tb2RlID0gWEZFUl9QSU9fMDsKIAkJCWRldi0+ZG1hX21vZGUgPSBYRkVSX01XX0RNQV8wOwpAQCAtOTAsMTAgKzkwLDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBnZW5lcmljX3BvcnRfb3BzID0gewpAQCAtMTQ1LDcgKzE0MSw3IEBACiBzdGF0aWMgaW50IGF0YV9nZW5lcmljX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAl1MTYgY29tbWFuZDsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLnNodCA9ICZnZW5lcmljX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzayA9IDB4MWYsCkBAIC0xNTMsNyArMTQ5LDcgQEAKIAkJLnVkbWFfbWFzayA9IDB4M2YsCiAJCS5wb3J0X29wcyA9ICZnZW5lcmljX3BvcnRfb3BzCiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1syXSA9IHsgJmluZm8sICZpbmZvIH07CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwogCiAJLyogRG9uJ3QgdXNlIHRoZSBnZW5lcmljIGVudHJ5IHVubGVzcyBpbnN0cnVjdGVkIHRvIGRvIHNvICovCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSAxICYmIGFsbF9nZW5lcmljX2lkZSA9PSAwKQpAQCAtMTc5LDcgKzE3NSw3IEBACiAJaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQUwpCiAJICAgIAlhdGFfcGNpX2NsZWFyX3NpbXBsZXgoZGV2KTsKIAotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcG9ydF9pbmZvLCAyKTsKKwlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBwaSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGFfZ2VuZXJpY1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKaW5kZXggNTVkMzA2YS4uOWMwN2I4ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwpAQCAtMTU1LDcgKzE1NSw2IEBACiBzdGF0aWMgaW50IHBpaXhfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKIHN0YXRpYyB2b2lkIHBpaXhfcGF0YV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotc3RhdGljIHZvaWQgcGlpeF9zYXRhX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBwaWl4X3NldF9waW9tb2RlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldik7CiBzdGF0aWMgdm9pZCBwaWl4X3NldF9kbWFtb2RlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldik7CiBzdGF0aWMgdm9pZCBpY2hfc2V0X2RtYW1vZGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KTsKQEAgLTI3NSwxMCArMjc0LDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwaWl4X3BhdGFfb3BzID0gewpAQCAtMzY4LDcgKzM2Myw3IEBACiAKIAkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAogCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgkJPSBwaWl4X3NhdGFfZXJyb3JfaGFuZGxlciwKKwkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCiAKIAkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKQEAgLTU4Myw2ICs1NzgsNyBAQAogCXsgMHgyN0RGLCAweDAwMDUsIDB4MDI4MCB9LAkvKiBJQ0g3IG9uIEFjZXIgNTYwMldMTWkgKi8KIAl7IDB4MjdERiwgMHgxMDI1LCAweDAxMTAgfSwJLyogSUNINyBvbiBBY2VyIDM2ODJXTE1pICovCiAJeyAweDI3REYsIDB4MTA0MywgMHgxMjY3IH0sCS8qIElDSDcgb24gQXN1cyBXNUYgKi8KKwl7IDB4MjRDQSwgMHgxMDI1LCAweDAwNjEgfSwJLyogSUNINCBvbiBBQ0VSIEFzcGlyZSAyMDIzV0xNaSAqLwogCS8qIGVuZCBtYXJrZXIgKi8KIAl7IDAsIH0KIH07CkBAIC02MjUsMTcgKzYyMSwxOCBAQAogLyoqCiAgKglwaWl4X3BhdGFfcHJlcmVzZXQgLSBwcmVyZXNldCBmb3IgUEFUQSBob3N0IGNvbnRyb2xsZXIKICAqCUBhcDogVGFyZ2V0IHBvcnQKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCUxPQ0tJTkc6CiAgKglOb25lIChpbmhlcml0ZWQgZnJvbSBjYWxsZXIpLgogICovCi1zdGF0aWMgaW50IHBpaXhfcGF0YV9wcmVyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBwaWl4X3BhdGFfcHJlcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CiAKIAlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZwaWl4X2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCiAJCXJldHVybiAtRU5PRU5UOwotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKKwlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCwgZGVhZGxpbmUpOwogfQogCiBzdGF0aWMgdm9pZCBwaWl4X3BhdGFfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtNjQ0LDEzICs2NDEsNiBAQAogCQkJICAgYXRhX3N0ZF9wb3N0cmVzZXQpOwogfQogCi0KLXN0YXRpYyB2b2lkIHBpaXhfc2F0YV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCBhdGFfc3RkX3ByZXJlc2V0LCBhdGFfc3RkX3NvZnRyZXNldCwgTlVMTCwKLQkJCSAgIGF0YV9zdGRfcG9zdHJlc2V0KTsKLX0KLQogLyoqCiAgKglwaWl4X3NldF9waW9tb2RlIC0gSW5pdGlhbGl6ZSBob3N0IGNvbnRyb2xsZXIgUEFUQSBQSU8gdGltaW5ncwogICoJQGFwOiBQb3J0IHdob3NlIHRpbWluZ3Mgd2UgYXJlIGNvbmZpZ3VyaW5nCkBAIC0xMDM0LDcgKzEwMjQsNyBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IGF0YV9wb3J0X2luZm8gcG9ydF9pbmZvWzJdOwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGluZm9bMl0gPSB7ICZwb3J0X2luZm9bMF0sICZwb3J0X2luZm9bMV0gfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZwb3J0X2luZm9bMF0sICZwb3J0X2luZm9bMV0gfTsKIAlzdHJ1Y3QgcGlpeF9ob3N0X3ByaXYgKmhwcml2OwogCXVuc2lnbmVkIGxvbmcgcG9ydF9mbGFnczsKIApAQCAtMTA5Myw3ICsxMDgzLDcgQEAKIAkJcG9ydF9pbmZvWzFdLm13ZG1hX21hc2sgPSAwOwogCQlwb3J0X2luZm9bMV0udWRtYV9tYXNrID0gMDsKIAl9Ci0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpbmZvLCAyKTsKKwlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwcGkpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwaWl4X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCmluZGV4IDAzYTBhY2YuLjAyMjM2NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYwpAQCAtMjcwLDggKzI3MCw3IEBACiAKIC8qKgogICogZG9fZHJpdmVfZ2V0X0dURiAtIGdldCB0aGUgZHJpdmUgYm9vdHVwIGRlZmF1bHQgdGFza2ZpbGUgc2V0dGluZ3MKLSAqIEBhcDogdGhlIGF0YV9wb3J0IGZvciB0aGUgZHJpdmUKLSAqIEBpeDogdGFyZ2V0IGF0YV9kZXZpY2UgKGRyaXZlKSBpbmRleAorICogQGRldjogdGFyZ2V0IEFUQSBkZXZpY2UKICAqIEBndGZfbGVuZ3RoOiBudW1iZXIgb2YgYnl0ZXMgb2YgX0dURiBkYXRhIHJldHVybmVkIGF0IEBndGZfYWRkcmVzcwogICogQGd0Zl9hZGRyZXNzOiBidWZmZXIgY29udGFpbmluZyBfR1RGIHRhc2tmaWxlIGFycmF5cwogICoKQEAgLTI4NiwyMCArMjg1LDE5IEBACiAgKiBUaGUgcmV0dXJuZWQgQGd0Zl9sZW5ndGggYW5kIEBndGZfYWRkcmVzcyBhcmUgb25seSB2YWxpZCBpZiB0aGUKICAqIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSBpcyAwLgogICovCi1zdGF0aWMgaW50IGRvX2RyaXZlX2dldF9HVEYoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IGl4LAotCQkJdW5zaWduZWQgaW50ICpndGZfbGVuZ3RoLCB1bnNpZ25lZCBsb25nICpndGZfYWRkcmVzcywKLQkJCXVuc2lnbmVkIGxvbmcgKm9ial9sb2MpCitzdGF0aWMgaW50IGRvX2RyaXZlX2dldF9HVEYoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpndGZfbGVuZ3RoLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKmd0Zl9hZGRyZXNzLCB1bnNpZ25lZCBsb25nICpvYmpfbG9jKQogewotCWFjcGlfc3RhdHVzCQkJc3RhdHVzOwotCWFjcGlfaGFuZGxlCQkJZGV2X2hhbmRsZSA9IE5VTEw7Ci0JYWNwaV9oYW5kbGUJCQljaGFuX2hhbmRsZSwgZHJpdmVfaGFuZGxlOwotCWFjcGlfaW50ZWdlcgkJCXBjaWRldmZuID0gMDsKLQl1MzIJCQkJZGV2X2FkcjsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIJCW91dHB1dDsKLQl1bmlvbiBhY3BpX29iamVjdCAJCSpvdXRfb2JqOwotCXN0cnVjdCBkZXZpY2UJCQkqZGV2ID0gYXAtPmhvc3QtPmRldjsKLQlzdHJ1Y3QgYXRhX2RldmljZQkJKmF0YWRldiA9ICZhcC0+ZGV2aWNlW2l4XTsKLQlpbnQJCQkJZXJyID0gLUVOT0RFVjsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gZGV2LT5hcDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9oYW5kbGUgZGV2X2hhbmRsZSA9IE5VTEw7CisJYWNwaV9oYW5kbGUgY2hhbl9oYW5kbGUsIGRyaXZlX2hhbmRsZTsKKwlhY3BpX2ludGVnZXIgcGNpZGV2Zm4gPSAwOworCXUzMiBkZXZfYWRyOworCXN0cnVjdCBhY3BpX2J1ZmZlciBvdXRwdXQ7CisJdW5pb24gYWNwaV9vYmplY3QgKm91dF9vYmo7CisJc3RydWN0IGRldmljZSAqZ2RldiA9IGFwLT5ob3N0LT5kZXY7CisJaW50IGVyciA9IC1FTk9ERVY7CiAKIAkqZ3RmX2xlbmd0aCA9IDA7CiAJKmd0Zl9hZGRyZXNzID0gMFVMOwpAQCAtMzA5LDM0ICszMDcsMzQgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoYXRhX21zZ19wcm9iZShhcCkpCi0JCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9ERUJVRywgIiVzOiBFTlRFUjogcG9ydCM6ICVkXG4iLAorCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsICIlczogRU5URVI6IHBvcnQjOiAlZFxuIiwKIAkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGFwLT5wb3J0X25vKTsKIAotCWlmICghYXRhX2Rldl9lbmFibGVkKGF0YWRldikgfHwgKGFwLT5mbGFncyAmIEFUQV9GTEFHX0RJU0FCTEVEKSkgeworCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikgfHwgKGFwLT5mbGFncyAmIEFUQV9GTEFHX0RJU0FCTEVEKSkgewogCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCi0JCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsICIlczogRVJSOiAiCisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsICIlczogRVJSOiAiCiAJCQkJImF0YV9kZXZfcHJlc2VudDogJWQsIFBPUlRfRElTQUJMRUQ6ICVsdVxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGF0YV9kZXZfZW5hYmxlZChhdGFkZXYpLAorCQkJCV9fRlVOQ1RJT05fXywgYXRhX2Rldl9lbmFibGVkKGRldiksCiAJCQkJYXAtPmZsYWdzICYgQVRBX0ZMQUdfRElTQUJMRUQpOwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBEb24ndCBjb250aW51ZSBpZiBkZXZpY2UgaGFzIG5vIF9BRFIgbWV0aG9kLgogCSAqIF9HVEYgaXMgaW50ZW5kZWQgZm9yIGtub3duIG1vdGhlcmJvYXJkIGRldmljZXMuICovCi0JaWYgKCEoYXAtPmNibCA9PSBBVEFfQ0JMX1NBVEEpKSB7Ci0JCWVyciA9IHBhdGFfZ2V0X2Rldl9oYW5kbGUoZGV2LCAmZGV2X2hhbmRsZSwgJnBjaWRldmZuKTsKKwlpZiAoIShhcC0+ZmxhZ3MgJiBBVEFfRkxBR19BQ1BJX1NBVEEpKSB7CisJCWVyciA9IHBhdGFfZ2V0X2Rldl9oYW5kbGUoZ2RldiwgJmRldl9oYW5kbGUsICZwY2lkZXZmbik7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCi0JCQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0RFQlVHLAorCQkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywKIAkJCQkJIiVzOiBwYXRhX2dldF9kZXZfaGFuZGxlIGZhaWxlZCAoJWQpXG4iLAogCQkJCQlfX0ZVTkNUSU9OX18sIGVycik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7Ci0JCWVyciA9IHNhdGFfZ2V0X2Rldl9oYW5kbGUoZGV2LCAmZGV2X2hhbmRsZSwgJnBjaWRldmZuKTsKKwkJZXJyID0gc2F0YV9nZXRfZGV2X2hhbmRsZShnZGV2LCAmZGV2X2hhbmRsZSwgJnBjaWRldmZuKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKLQkJCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsCisJCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLAogCQkJCQkiJXM6IHNhdGFfZ2V0X2Rldl9oYW5kbGUgZmFpbGVkICglZFxuIiwKIAkJCQkJX19GVU5DVElPTl9fLCBlcnIpOwogCQkJZ290byBvdXQ7CkBAIC0zNDQsMTUgKzM0MiwxNSBAQAogCX0KIAogCS8qIEdldCB0aGlzIGRyaXZlJ3MgX0FEUiBpbmZvLiBpZiBub3QgYWxyZWFkeSBrbm93bi4gKi8KLQlpZiAoIWF0YWRldi0+b2JqX2hhbmRsZSkgewotCQlpZiAoIShhcC0+Y2JsID09IEFUQV9DQkxfU0FUQSkpIHsKKwlpZiAoIWRldi0+b2JqX2hhbmRsZSkgeworCQlpZiAoIShhcC0+ZmxhZ3MgJiBBVEFfRkxBR19BQ1BJX1NBVEEpKSB7CiAJCQkvKiBnZXQgY2hpbGQgb2JqZWN0cyBvZiBkZXZfaGFuZGxlID09IGNoYW5uZWwgb2JqZWN0cywKIAkgCQkgKiArIF90aGVpcl8gY2hpbGRyZW4gPT0gZHJpdmUgb2JqZWN0cyAqLwogCQkJLyogY2hhbm5lbCBpcyBhcC0+cG9ydF9ubyAqLwogCQkJY2hhbl9oYW5kbGUgPSBhY3BpX2dldF9jaGlsZChkZXZfaGFuZGxlLAogCQkJCQkJYXAtPnBvcnRfbm8pOwogCQkJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQotCQkJCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9ERUJVRywKKwkJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsCiAJCQkJCSIlczogY2hhbiBhZHI9JWQ6IGNoYW5faGFuZGxlPTB4JXBcbiIsCiAJCQkJCV9fRlVOQ1RJT05fXywgYXAtPnBvcnRfbm8sCiAJCQkJCWNoYW5faGFuZGxlKTsKQEAgLTM2MSwyNiArMzU5LDI2IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCQkvKiBUQkQ6IGNvdWxkIGFsc28gY2hlY2sgQUNQSSBvYmplY3QgVkFMSUQgYml0cyAqLwotCQkJZHJpdmVfaGFuZGxlID0gYWNwaV9nZXRfY2hpbGQoY2hhbl9oYW5kbGUsIGl4KTsKKwkJCWRyaXZlX2hhbmRsZSA9IGFjcGlfZ2V0X2NoaWxkKGNoYW5faGFuZGxlLCBkZXYtPmRldm5vKTsKIAkJCWlmICghZHJpdmVfaGFuZGxlKSB7CiAJCQkJZXJyID0gLUVOT0RFVjsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCWRldl9hZHIgPSBpeDsKLQkJCWF0YWRldi0+b2JqX2hhbmRsZSA9IGRyaXZlX2hhbmRsZTsKKwkJCWRldl9hZHIgPSBkZXYtPmRldm5vOworCQkJZGV2LT5vYmpfaGFuZGxlID0gZHJpdmVfaGFuZGxlOwogCQl9IGVsc2UgewkvKiBmb3IgU0FUQSBtb2RlICovCiAJCQlkZXZfYWRyID0gU0FUQV9BRFJfUlNWRDsKLQkJCWVyciA9IGdldF9zYXRhX2FkcihkZXYsIGRldl9oYW5kbGUsIHBjaWRldmZuLCAwLAotCQkJCQlhcCwgYXRhZGV2LCAmZGV2X2Fkcik7CisJCQllcnIgPSBnZXRfc2F0YV9hZHIoZ2RldiwgZGV2X2hhbmRsZSwgcGNpZGV2Zm4sIDAsCisJCQkJCWFwLCBkZXYsICZkZXZfYWRyKTsKIAkJfQogCQlpZiAoZXJyIDwgMCB8fCBkZXZfYWRyID09IFNBVEFfQURSX1JTVkQgfHwKLQkJICAgICFhdGFkZXYtPm9ial9oYW5kbGUpIHsKKwkJICAgICFkZXYtPm9ial9oYW5kbGUpIHsKIAkJCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKLQkJCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsCisJCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLAogCQkJCQkiJXM6IGdldF9zYXRhL3BhdGFfYWRyIGZhaWxlZDogIgogCQkJCQkiZXJyPSVkLCBkZXZfYWRyPSV1LCBvYmpfaGFuZGxlPTB4JXBcbiIsCiAJCQkJCV9fRlVOQ1RJT05fXywgZXJyLCBkZXZfYWRyLAotCQkJCQlhdGFkZXYtPm9ial9oYW5kbGUpOworCQkJCQlkZXYtPm9ial9oYW5kbGUpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC0zOTEsMTEgKzM4OSwxMSBAQAogCiAJLyogX0dURiBoYXMgbm8gaW5wdXQgcGFyYW1ldGVycyAqLwogCWVyciA9IC1FSU87Ci0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoYXRhZGV2LT5vYmpfaGFuZGxlLCAiX0dURiIsCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoZGV2LT5vYmpfaGFuZGxlLCAiX0dURiIsCiAJCQkJCU5VTEwsICZvdXRwdXQpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCi0JCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsCisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsCiAJCQkJIiVzOiBSdW4gX0dURiBlcnJvcjogc3RhdHVzID0gMHgleFxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CiAJCWdvdG8gb3V0OwpAQCAtNDAzLDcgKzQwMSw3IEBACiAKIAlpZiAoIW91dHB1dC5sZW5ndGggfHwgIW91dHB1dC5wb2ludGVyKSB7CiAJCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKLQkJCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9ERUJVRywgIiVzOiBSdW4gX0dURjogIgorCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAiJXM6IFJ1biBfR1RGOiAiCiAJCQkJImxlbmd0aCBvciBwdHIgaXMgTlVMTCAoMHglbGx4LCAweCVwKVxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvdXRwdXQubGVuZ3RoLApAQCAtNDE2LDcgKzQxNCw3IEBACiAJaWYgKG91dF9vYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgewogCQlrZnJlZShvdXRwdXQucG9pbnRlcik7CiAJCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKLQkJCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9ERUJVRywgIiVzOiBSdW4gX0dURjogIgorCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAiJXM6IFJ1biBfR1RGOiAiCiAJCQkJImVycm9yOiBleHBlY3RlZCBvYmplY3QgdHlwZSBvZiAiCiAJCQkJIiBBQ1BJX1RZUEVfQlVGRkVSLCBnb3QgMHgleFxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIG91dF9vYmotPnR5cGUpOwpAQCAtNDI3LDcgKzQyNSw3IEBACiAJaWYgKCFvdXRfb2JqLT5idWZmZXIubGVuZ3RoIHx8ICFvdXRfb2JqLT5idWZmZXIucG9pbnRlciB8fAogCSAgICBvdXRfb2JqLT5idWZmZXIubGVuZ3RoICUgUkVHU19QRVJfR1RGKSB7CiAJCWlmIChhdGFfbXNnX2RydihhcCkpCi0JCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fRVJSLAorCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0VSUiwKIAkJCQkiJXM6IHVuZXhwZWN0ZWQgR1RGIGxlbmd0aCAoJWQpIG9yIGFkZHIgKDB4JXApXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgb3V0X29iai0+YnVmZmVyLmxlbmd0aCwKIAkJCQlvdXRfb2JqLT5idWZmZXIucG9pbnRlcik7CkBAIC00MzksNyArNDM3LDcgQEAKIAkqZ3RmX2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZylvdXRfb2JqLT5idWZmZXIucG9pbnRlcjsKIAkqb2JqX2xvYyA9ICh1bnNpZ25lZCBsb25nKW91dF9vYmo7CiAJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQotCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsICIlczogcmV0dXJuaW5nICIKKwkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAiJXM6IHJldHVybmluZyAiCiAJCQkiZ3RmX2xlbmd0aD0lZCwgZ3RmX2FkZHJlc3M9MHglbHgsIG9ial9sb2M9MHglbHhcbiIsCiAJCQlfX0ZVTkNUSU9OX18sICpndGZfbGVuZ3RoLCAqZ3RmX2FkZHJlc3MsICpvYmpfbG9jKTsKIAllcnIgPSAwOwpAQCAtNDQ5LDcgKzQ0Nyw3IEBACiAKIC8qKgogICogdGFza2ZpbGVfbG9hZF9yYXcgLSBzZW5kIHRhc2tmaWxlIHJlZ2lzdGVycyB0byBob3N0IGNvbnRyb2xsZXIKLSAqIEBhcDogUG9ydCB0byB3aGljaCBvdXRwdXQgaXMgc2VudAorICogQGRldjogdGFyZ2V0IEFUQSBkZXZpY2UKICAqIEBndGY6IHJhdyBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0ICgweDFmMSAtIDB4MWY3KQogICoKICAqIE91dHB1dHMgQVRBIHRhc2tmaWxlIHRvIHN0YW5kYXJkIEFUQSBob3N0IGNvbnRyb2xsZXIgdXNpbmcgTU1JTwpAQCAtNDY2LDE1ICs0NjQsMTUgQEAKICAqIExPQ0tJTkc6IFRCRDoKICAqIEluaGVyaXRlZCBmcm9tIGNhbGxlci4KICAqLwotc3RhdGljIHZvaWQgdGFza2ZpbGVfbG9hZF9yYXcoc3RydWN0IGF0YV9wb3J0ICphcCwKLQkJCQlzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2LAotCQkJCWNvbnN0IHN0cnVjdCB0YXNrZmlsZV9hcnJheSAqZ3RmKQorc3RhdGljIHZvaWQgdGFza2ZpbGVfbG9hZF9yYXcoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB0YXNrZmlsZV9hcnJheSAqZ3RmKQogeworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBkZXYtPmFwOwogCXN0cnVjdCBhdGFfdGFza2ZpbGUgdGY7CiAJdW5zaWduZWQgaW50IGVycjsKIAogCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKLQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0RFQlVHLCAiJXM6ICgweDFmMS0xZjcpOiBoZXg6ICIKKwkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAiJXM6ICgweDFmMS0xZjcpOiBoZXg6ICIKIAkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCQkJX19GVU5DVElPTl9fLAogCQkJZ3RmLT50ZmFbMF0sIGd0Zi0+dGZhWzFdLCBndGYtPnRmYVsyXSwKQEAgLTQ4NSwxMiArNDgzLDExIEBACiAJICAgICYmIChndGYtPnRmYVs2XSA9PSAwKSkKIAkJcmV0dXJuOwogCi0JYXRhX3RmX2luaXQoYXRhZGV2LCAmdGYpOworCWF0YV90Zl9pbml0KGRldiwgJnRmKTsKIAogCS8qIGNvbnZlcnQgZ3RmIHRvIHRmICovCiAJdGYuZmxhZ3MgfD0gQVRBX1RGTEFHX0lTQUREUiB8IEFUQV9URkxBR19ERVZJQ0U7IC8qIFRCRCAqLwotCXRmLnByb3RvY29sID0gYXRhZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQVBJID8KLQkJQVRBX1BST1RfQVRBUElfTk9EQVRBIDogQVRBX1BST1RfTk9EQVRBOworCXRmLnByb3RvY29sID0gQVRBX1BST1RfTk9EQVRBOwogCXRmLmZlYXR1cmUgPSBndGYtPnRmYVswXTsJLyogMHgxZjEgKi8KIAl0Zi5uc2VjdCAgID0gZ3RmLT50ZmFbMV07CS8qIDB4MWYyICovCiAJdGYubGJhbCAgICA9IGd0Zi0+dGZhWzJdOwkvKiAweDFmMyAqLwpAQCAtNDk5LDE3ICs0OTYsMTYgQEAKIAl0Zi5kZXZpY2UgID0gZ3RmLT50ZmFbNV07CS8qIDB4MWY2ICovCiAJdGYuY29tbWFuZCA9IGd0Zi0+dGZhWzZdOwkvKiAweDFmNyAqLwogCi0JZXJyID0gYXRhX2V4ZWNfaW50ZXJuYWwoYXRhZGV2LCAmdGYsIE5VTEwsIERNQV9OT05FLCBOVUxMLCAwKTsKKwllcnIgPSBhdGFfZXhlY19pbnRlcm5hbChkZXYsICZ0ZiwgTlVMTCwgRE1BX05PTkUsIE5VTEwsIDApOwogCWlmIChlcnIgJiYgYXRhX21zZ19wcm9iZShhcCkpCi0JCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9FUlIsCisJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9FUlIsCiAJCQkiJXM6IGF0YV9leGVjX2ludGVybmFsIGZhaWxlZDogJXVcbiIsCiAJCQlfX0ZVTkNUSU9OX18sIGVycik7CiB9CiAKIC8qKgogICogZG9fZHJpdmVfc2V0X3Rhc2tmaWxlcyAtIHdyaXRlIHRoZSBkcml2ZSB0YXNrZmlsZSBzZXR0aW5ncyBmcm9tIF9HVEYKLSAqIEBhcDogdGhlIGF0YV9wb3J0IGZvciB0aGUgZHJpdmUKLSAqIEBhdGFkZXY6IHRhcmdldCBhdGFfZGV2aWNlCisgKiBAZGV2OiB0YXJnZXQgQVRBIGRldmljZQogICogQGd0Zl9sZW5ndGg6IHRvdGFsIG51bWJlciBvZiBieXRlcyBvZiBfR1RGIHRhc2tmaWxlcwogICogQGd0Zl9hZGRyZXNzOiBsb2NhdGlvbiBvZiBfR1RGIHRhc2tmaWxlIGFycmF5cwogICoKQEAgLTUxOCwzMCArNTE0LDMxIEBACiAgKiBXcml0ZSB7Z3RmX2FkZHJlc3MsIGxlbmd0aCBndGZfbGVuZ3RofSBpbiBncm91cHMgb2YKICAqIFJFR1NfUEVSX0dURiBieXRlcy4KICAqLwotc3RhdGljIGludCBkb19kcml2ZV9zZXRfdGFza2ZpbGVzKHN0cnVjdCBhdGFfcG9ydCAqYXAsCi0JCXN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYsIHVuc2lnbmVkIGludCBndGZfbGVuZ3RoLAotCQl1bnNpZ25lZCBsb25nIGd0Zl9hZGRyZXNzKQorc3RhdGljIGludCBkb19kcml2ZV9zZXRfdGFza2ZpbGVzKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCisJCQkJICB1bnNpZ25lZCBpbnQgZ3RmX2xlbmd0aCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZ3RmX2FkZHJlc3MpCiB7Ci0JaW50CQkJZXJyID0gLUVOT0RFVjsKLQlpbnQJCQlndGZfY291bnQgPSBndGZfbGVuZ3RoIC8gUkVHU19QRVJfR1RGOwotCWludAkJCWl4OworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBkZXYtPmFwOworCWludCBlcnIgPSAtRU5PREVWOworCWludCBndGZfY291bnQgPSBndGZfbGVuZ3RoIC8gUkVHU19QRVJfR1RGOworCWludCBpeDsKIAlzdHJ1Y3QgdGFza2ZpbGVfYXJyYXkJKmd0ZjsKIAogCWlmIChhdGFfbXNnX3Byb2JlKGFwKSkKLQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0RFQlVHLCAiJXM6IEVOVEVSOiBwb3J0IzogJWRcbiIsCisJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgIiVzOiBFTlRFUjogcG9ydCM6ICVkXG4iLAogCQkJICAgICAgIF9fRlVOQ1RJT05fXywgYXAtPnBvcnRfbm8pOwogCi0JaWYgKGxpYmF0YV9ub2FjcGkgfHwgIShhcC0+Y2JsID09IEFUQV9DQkxfU0FUQSkpCisJaWYgKGxpYmF0YV9ub2FjcGkgfHwgIShhcC0+ZmxhZ3MgJiBBVEFfRkxBR19BQ1BJX1NBVEEpKQogCQlyZXR1cm4gMDsKIAotCWlmICghYXRhX2Rldl9lbmFibGVkKGF0YWRldikgfHwgKGFwLT5mbGFncyAmIEFUQV9GTEFHX0RJU0FCTEVEKSkKKwlpZiAoIWF0YV9kZXZfZW5hYmxlZChkZXYpIHx8IChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCkpCiAJCWdvdG8gb3V0OwogCWlmICghZ3RmX2NvdW50KQkJLyogc2hvdWxkbid0IGJlIGhlcmUgKi8KIAkJZ290byBvdXQ7CiAKIAlpZiAoZ3RmX2xlbmd0aCAlIFJFR1NfUEVSX0dURikgewogCQlpZiAoYXRhX21zZ19kcnYoYXApKQotCQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0VSUiwKKwkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9FUlIsCiAJCQkJIiVzOiB1bmV4cGVjdGVkIEdURiBsZW5ndGggKCVkKVxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIGd0Zl9sZW5ndGgpOwogCQlnb3RvIG91dDsKQEAgLTU1Miw3ICs1NDksNyBAQAogCQkJKGd0Zl9hZGRyZXNzICsgaXggKiBSRUdTX1BFUl9HVEYpOwogCiAJCS8qIHNlbmQgYWxsIFRhc2tGaWxlIHJlZ2lzdGVycyAoMHgxZjEtMHgxZjcpICppbip0aGF0Km9yZGVyKiAqLwotCQl0YXNrZmlsZV9sb2FkX3JhdyhhcCwgYXRhZGV2LCBndGYpOworCQl0YXNrZmlsZV9sb2FkX3JhdyhkZXYsIGd0Zik7CiAJfQogCiAJZXJyID0gMDsKQEAgLTU2OCwxMSArNTY1LDExIEBACiAgKi8KIGludCBhdGFfYWNwaV9leGVjX3RmcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewotCWludAkJaXg7Ci0JaW50CQlyZXQgPTA7Ci0JdW5zaWduZWQgaW50CWd0Zl9sZW5ndGg7Ci0JdW5zaWduZWQgbG9uZwlndGZfYWRkcmVzczsKLQl1bnNpZ25lZCBsb25nCW9ial9sb2M7CisJaW50IGl4OworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBndGZfbGVuZ3RoOworCXVuc2lnbmVkIGxvbmcgZ3RmX2FkZHJlc3M7CisJdW5zaWduZWQgbG9uZyBvYmpfbG9jOwogCiAJaWYgKGxpYmF0YV9ub2FjcGkpCiAJCXJldHVybiAwOwpAQCAtNTgxLDE1ICs1NzgsMTcgQEAKIAkgKiB3ZSBzaG91bGQgbm90IHJ1biBHVEYgb24gUEFUQSBkZXZpY2VzIHNpbmNlIHNvbWUKIAkgKiBQQVRBIHJlcXVpcmUgZXhlY3V0aW9uIG9mIEdUTS9TVE0gYmVmb3JlIEdURi4KIAkgKi8KLQlpZiAoIShhcC0+Y2JsID09IEFUQV9DQkxfU0FUQSkpCisJaWYgKCEoYXAtPmZsYWdzICYgQVRBX0ZMQUdfQUNQSV9TQVRBKSkKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGl4ID0gMDsgaXggPCBBVEFfTUFYX0RFVklDRVM7IGl4KyspIHsKLQkJaWYgKCFhdGFfZGV2X2VuYWJsZWQoJmFwLT5kZXZpY2VbaXhdKSkKKwkJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9ICZhcC0+ZGV2aWNlW2l4XTsKKworCQlpZiAoIWF0YV9kZXZfZW5hYmxlZChkZXYpKQogCQkJY29udGludWU7CiAKLQkJcmV0ID0gZG9fZHJpdmVfZ2V0X0dURihhcCwgaXgsCi0JCQkJJmd0Zl9sZW5ndGgsICZndGZfYWRkcmVzcywgJm9ial9sb2MpOworCQlyZXQgPSBkb19kcml2ZV9nZXRfR1RGKGRldiwgJmd0Zl9sZW5ndGgsICZndGZfYWRkcmVzcywKKwkJCQkgICAgICAgJm9ial9sb2MpOwogCQlpZiAocmV0IDwgMCkgewogCQkJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQogCQkJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9ERUJVRywKQEAgLTU5OCw4ICs1OTcsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlyZXQgPSBkb19kcml2ZV9zZXRfdGFza2ZpbGVzKGFwLCAmYXAtPmRldmljZVtpeF0sCi0JCQkJZ3RmX2xlbmd0aCwgZ3RmX2FkZHJlc3MpOworCQlyZXQgPSBkb19kcml2ZV9zZXRfdGFza2ZpbGVzKGRldiwgZ3RmX2xlbmd0aCwgZ3RmX2FkZHJlc3MpOwogCQlrZnJlZSgodm9pZCAqKW9ial9sb2MpOwogCQlpZiAocmV0IDwgMCkgewogCQkJaWYgKGF0YV9tc2dfcHJvYmUoYXApKQpAQCAtNjE1LDggKzYxMyw3IEBACiAKIC8qKgogICogYXRhX2FjcGlfcHVzaF9pZCAtIHNlbmQgSWRlbnRpZnkgZGF0YSB0byBkcml2ZQotICogQGFwOiB0aGUgYXRhX3BvcnQgZm9yIHRoZSBkcml2ZQotICogQGl4OiBkcml2ZSBpbmRleAorICogQGRldjogdGFyZ2V0IEFUQSBkZXZpY2UKICAqCiAgKiBfU0REIEFDUEkgb2JqZWN0OiBmb3IgU0FUQSBtb2RlIG9ubHkKICAqIE11c3QgYmUgYWZ0ZXIgSWRlbnRpZnkgKFBhY2tldCkgRGV2aWNlIC0tIHVzZXMgaXRzIGRhdGEKQEAgLTYyNCw1NyArNjIxLDU3IEBACiAgKiBtZXRob2QgYW5kIGlmIGl0IGZhaWxzIGZvciB3aGF0ZXZlciByZWFzb24sIHdlIHNob3VsZCBzdGlsbAogICoganVzdCBrZWVwIGdvaW5nLgogICovCi1pbnQgYXRhX2FjcGlfcHVzaF9pZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgaXgpCitpbnQgYXRhX2FjcGlfcHVzaF9pZChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQogewotCWFjcGlfaGFuZGxlICAgICAgICAgICAgICAgICAgICAgaGFuZGxlOwotCWFjcGlfaW50ZWdlciAgICAgICAgICAgICAgICAgICAgcGNpZGV2Zm47Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnI7Ci0Jc3RydWN0IGRldmljZSAgICAgICAgICAgICAgICAgICAqZGV2ID0gYXAtPmhvc3QtPmRldjsKLQlzdHJ1Y3QgYXRhX2RldmljZSAgICAgICAgICAgICAgICphdGFkZXYgPSAmYXAtPmRldmljZVtpeF07Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfYWRyOwotCWFjcGlfc3RhdHVzICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOwotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0ICAgICAgICAgaW5wdXQ7Ci0JdW5pb24gYWNwaV9vYmplY3QgICAgICAgICAgICAgICBpbl9wYXJhbXNbMV07CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGRldi0+YXA7CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCWFjcGlfaW50ZWdlciBwY2lkZXZmbjsKKwlpbnQgZXJyOworCXN0cnVjdCBkZXZpY2UgKmdkZXYgPSBhcC0+aG9zdC0+ZGV2OworCXUzMiBkZXZfYWRyOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKwl1bmlvbiBhY3BpX29iamVjdCBpbl9wYXJhbXNbMV07CiAKIAlpZiAobGliYXRhX25vYWNwaSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoYXRhX21zZ19wcm9iZShhcCkpCi0JCWF0YV9kZXZfcHJpbnRrKGF0YWRldiwgS0VSTl9ERUJVRywgIiVzOiBpeCA9ICVkLCBwb3J0IzogJWRcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBpeCwgYXAtPnBvcnRfbm8pOworCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsICIlczogaXggPSAlZCwgcG9ydCM6ICVkXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgZGV2LT5kZXZubywgYXAtPnBvcnRfbm8pOwogCiAJLyogRG9uJ3QgY29udGludWUgaWYgbm90IGEgU0FUQSBkZXZpY2UuICovCi0JaWYgKCEoYXAtPmNibCA9PSBBVEFfQ0JMX1NBVEEpKSB7CisJaWYgKCEoYXAtPmZsYWdzICYgQVRBX0ZMQUdfQUNQSV9TQVRBKSkgewogCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCi0JCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsCisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsCiAJCQkJIiVzOiBOb3QgYSBTQVRBIGRldmljZVxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogRG9uJ3QgY29udGludWUgaWYgZGV2aWNlIGhhcyBubyBfQURSIG1ldGhvZC4KIAkgKiBfU0REIGlzIGludGVuZGVkIGZvciBrbm93biBtb3RoZXJib2FyZCBkZXZpY2VzLiAqLwotCWVyciA9IHNhdGFfZ2V0X2Rldl9oYW5kbGUoZGV2LCAmaGFuZGxlLCAmcGNpZGV2Zm4pOworCWVyciA9IHNhdGFfZ2V0X2Rldl9oYW5kbGUoZ2RldiwgJmhhbmRsZSwgJnBjaWRldmZuKTsKIAlpZiAoZXJyIDwgMCkgewogCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCi0JCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsCisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsCiAJCQkJIiVzOiBzYXRhX2dldF9kZXZfaGFuZGxlIGZhaWxlZCAoJWRcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBlcnIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBHZXQgdGhpcyBkcml2ZSdzIF9BRFIgaW5mbywgaWYgbm90IGFscmVhZHkga25vd24gKi8KLQlpZiAoIWF0YWRldi0+b2JqX2hhbmRsZSkgeworCWlmICghZGV2LT5vYmpfaGFuZGxlKSB7CiAJCWRldl9hZHIgPSBTQVRBX0FEUl9SU1ZEOwotCQllcnIgPSBnZXRfc2F0YV9hZHIoZGV2LCBoYW5kbGUsIHBjaWRldmZuLCBpeCwgYXAsIGF0YWRldiwKKwkJZXJyID0gZ2V0X3NhdGFfYWRyKGdkZXYsIGhhbmRsZSwgcGNpZGV2Zm4sIGRldi0+ZGV2bm8sIGFwLCBkZXYsCiAJCQkJCSZkZXZfYWRyKTsKIAkJaWYgKGVyciA8IDAgfHwgZGV2X2FkciA9PSBTQVRBX0FEUl9SU1ZEIHx8Ci0JCQkhYXRhZGV2LT5vYmpfaGFuZGxlKSB7CisJCQkhZGV2LT5vYmpfaGFuZGxlKSB7CiAJCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCi0JCQkJYXRhX2Rldl9wcmludGsoYXRhZGV2LCBLRVJOX0RFQlVHLAorCQkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywKIAkJCQkJIiVzOiBnZXRfc2F0YV9hZHIgZmFpbGVkOiAiCiAJCQkJCSJlcnI9JWQsIGRldl9hZHI9JXUsIG9ial9oYW5kbGU9MHglcFxuIiwKIAkJCQkJX19GVU5DVElPTl9fLCBlcnIsIGRldl9hZHIsCi0JCQkJCWF0YWRldi0+b2JqX2hhbmRsZSk7CisJCQkJCWRldi0+b2JqX2hhbmRsZSk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTY4NCwxOSArNjgxLDE5IEBACiAJaW5wdXQuY291bnQgPSAxOwogCWlucHV0LnBvaW50ZXIgPSBpbl9wYXJhbXM7CiAJaW5fcGFyYW1zWzBdLnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwotCWluX3BhcmFtc1swXS5idWZmZXIubGVuZ3RoID0gc2l6ZW9mKGF0YWRldi0+aWRbMF0pICogQVRBX0lEX1dPUkRTOwotCWluX3BhcmFtc1swXS5idWZmZXIucG9pbnRlciA9ICh1OCAqKWF0YWRldi0+aWQ7CisJaW5fcGFyYW1zWzBdLmJ1ZmZlci5sZW5ndGggPSBzaXplb2YoZGV2LT5pZFswXSkgKiBBVEFfSURfV09SRFM7CisJaW5fcGFyYW1zWzBdLmJ1ZmZlci5wb2ludGVyID0gKHU4ICopZGV2LT5pZDsKIAkvKiBPdXRwdXQgYnVmZmVyOiBfU0REIGhhcyBubyBvdXRwdXQgKi8KIAogCS8qIEl0J3MgT0sgZm9yIF9TREQgdG8gYmUgbWlzc2luZyB0b28uICovCi0Jc3dhcF9idWZfbGUxNihhdGFkZXYtPmlkLCBBVEFfSURfV09SRFMpOwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGF0YWRldi0+b2JqX2hhbmRsZSwgIl9TREQiLCAmaW5wdXQsIE5VTEwpOwotCXN3YXBfYnVmX2xlMTYoYXRhZGV2LT5pZCwgQVRBX0lEX1dPUkRTKTsKKwlzd2FwX2J1Zl9sZTE2KGRldi0+aWQsIEFUQV9JRF9XT1JEUyk7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoZGV2LT5vYmpfaGFuZGxlLCAiX1NERCIsICZpbnB1dCwgTlVMTCk7CisJc3dhcF9idWZfbGUxNihkZXYtPmlkLCBBVEFfSURfV09SRFMpOwogCiAJZXJyID0gQUNQSV9GQUlMVVJFKHN0YXR1cykgPyAtRUlPIDogMDsKIAlpZiAoZXJyIDwgMCkgewogCQlpZiAoYXRhX21zZ19wcm9iZShhcCkpCi0JCQlhdGFfZGV2X3ByaW50ayhhdGFkZXYsIEtFUk5fREVCVUcsCisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsCiAJCQkJICAgICAgICIlcyBfU0REIGVycm9yOiBzdGF0dXMgPSAweCV4XG4iLAogCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggY2E2NzQ4NC4uYWY2MjUxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC01OSw3ICs1OSw3IEBACiAKICNpbmNsdWRlICJsaWJhdGEuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4yMCIJLyogbXVzdCBiZSBleGFjdGx5IGZvdXIgY2hhcnMgKi8KKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMjEiCS8qIG11c3QgYmUgZXhhY3RseSBmb3VyIGNoYXJzICovCiAKIAogLyogZGVib3VuY2UgdGltaW5nIHBhcmFtZXRlcnMgaW4gbXNlY3MgeyBpbnRlcnZhbCwgZHVyYXRpb24sIHRpbWVvdXQgfSAqLwpAQCAtODk1LDYgKzg5NSw3IEBACiAvKioKICAqCWF0YV9zZXRfbmF0aXZlX21heF9hZGRyZXNzX2V4dAktCUxCQTQ4IG5hdGl2ZSBtYXggc2V0CiAgKglAZGV2OiBEZXZpY2UgdG8gcXVlcnkKKyAqCUBuZXdfc2VjdG9yczogbmV3IG1heCBzZWN0b3JzIHZhbHVlIHRvIHNldCBmb3IgdGhlIGRldmljZQogICoKICAqCVBlcmZvcm0gYW4gTEJBNDggc2l6ZSBzZXQgbWF4IHVwb24gdGhlIGRldmljZSBpbiBxdWVzdGlvbi4gUmV0dXJuIHRoZQogICoJYWN0dWFsIExCQTQ4IHNpemUgb3IgemVybyBpZiB0aGUgY29tbWFuZCBmYWlscy4KQEAgLTkzMiw2ICs5MzMsNyBAQAogLyoqCiAgKglhdGFfc2V0X25hdGl2ZV9tYXhfYWRkcmVzcwktCUxCQTI4IG5hdGl2ZSBtYXggc2V0CiAgKglAZGV2OiBEZXZpY2UgdG8gcXVlcnkKKyAqCUBuZXdfc2VjdG9yczogbmV3IG1heCBzZWN0b3JzIHZhbHVlIHRvIHNldCBmb3IgdGhlIGRldmljZQogICoKICAqCVBlcmZvcm0gYW4gTEJBMjggc2l6ZSBzZXQgbWF4IHVwb24gdGhlIGRldmljZSBpbiBxdWVzdGlvbi4gUmV0dXJuIHRoZQogICoJYWN0dWFsIExCQTI4IHNpemUgb3IgemVybyBpZiB0aGUgY29tbWFuZCBmYWlscy4KQEAgLTk3NSw3ICs5NzcsNyBAQAogewogCXU2NCBzZWN0b3JzID0gZGV2LT5uX3NlY3RvcnM7CiAJdTY0IGhwYV9zZWN0b3JzOwotCQorCiAJaWYgKGF0YV9pZF9oYXNfbGJhNDgoZGV2LT5pZCkpCiAJCWhwYV9zZWN0b3JzID0gYXRhX3JlYWRfbmF0aXZlX21heF9hZGRyZXNzX2V4dChkZXYpOwogCWVsc2UKQEAgLTEzMTYsNyArMTMxOCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwogCiAJRFBSSU5USygiZmx1c2ggIzFcbiIpOwotCWZsdXNoX3dvcmtxdWV1ZShhdGFfd3EpOworCWNhbmNlbF93b3JrX3N5bmMoJmFwLT5wb3J0X3Rhc2sud29yayk7IC8qIGFrcG06IHNlZW1zIHVubmVlZGVkICovCiAKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQsIGlmIGEgdGFzayBpcyBydW5uaW5nLCBpdCdzIGd1YXJhbnRlZWQgdG8gc2VlCkBAIC0xMzI3LDcgKzEzMjksNyBAQAogCQlpZiAoYXRhX21zZ19jdGwoYXApKQogCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0RFQlVHLCAiJXM6IGZsdXNoICMyXG4iLAogCQkJCQlfX0ZVTkNUSU9OX18pOwotCQlmbHVzaF93b3JrcXVldWUoYXRhX3dxKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmYXAtPnBvcnRfdGFzay53b3JrKTsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwpAQCAtMTU4Niw3ICsxNTg4LDcgQEAKICAqCUNoZWNrIGlmIHRoZSBjdXJyZW50IHNwZWVkIG9mIHRoZSBkZXZpY2UgcmVxdWlyZXMgSU9SRFkuIFVzZWQKICAqCWJ5IHZhcmlvdXMgY29udHJvbGxlcnMgZm9yIGNoaXAgY29uZmlndXJhdGlvbi4KICAqLwotIAorCiB1bnNpZ25lZCBpbnQgYXRhX3Bpb19uZWVkX2lvcmR5KGNvbnN0IHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCS8qIENvbnRyb2xsZXIgZG9lc24ndCBzdXBwb3J0ICBJT1JEWS4gUHJvYmFibHkgYSBwb2ludGxlc3MgY2hlY2sKQEAgLTE2MDksNyArMTYxMSw3IEBACiAgKglDb21wdXRlIHRoZSBoaWdoZXN0IG1vZGUgcG9zc2libGUgaWYgd2UgYXJlIG5vdCB1c2luZyBpb3JkeS4gUmV0dXJuCiAgKgktMSBpZiBubyBpb3JkeSBtb2RlIGlzIGF2YWlsYWJsZS4KICAqLwotIAorCiBzdGF0aWMgdTMyIGF0YV9waW9fbWFza19ub19pb3JkeShjb25zdCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKIAkvKiBJZiB3ZSBoYXZlIG5vIGRyaXZlIHNwZWNpZmljIHJ1bGUsIHRoZW4gUElPIDIgaXMgbm9uIElPUkRZICovCkBAIC0xNjUyLDcgKzE2NTQsNyBAQAogCXN0cnVjdCBhdGFfdGFza2ZpbGUgdGY7CiAJdW5zaWduZWQgaW50IGVycl9tYXNrID0gMDsKIAljb25zdCBjaGFyICpyZWFzb247Ci0JaW50IHRyaWVkX3NwaW51cCA9IDA7CisJaW50IG1heV9mYWxsYmFjayA9IDEsIHRyaWVkX3NwaW51cCA9IDA7CiAJaW50IHJjOwogCiAJaWYgKGF0YV9tc2dfY3RsKGFwKSkKQEAgLTE2OTYsMTEgKzE2OTgsMzEgQEAKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAKKwkJLyogRGV2aWNlIG9yIGNvbnRyb2xsZXIgbWlnaHQgaGF2ZSByZXBvcnRlZCB0aGUgd3JvbmcKKwkJICogZGV2aWNlIGNsYXNzLiAgR2l2ZSBhIHNob3QgYXQgdGhlIG90aGVyIElERU5USUZZIGlmCisJCSAqIHRoZSBjdXJyZW50IG9uZSBpcyBhYm9ydGVkIGJ5IHRoZSBkZXZpY2UuCisJCSAqLworCQlpZiAobWF5X2ZhbGxiYWNrICYmCisJCSAgICAoZXJyX21hc2sgPT0gQUNfRVJSX0RFVikgJiYgKHRmLmZlYXR1cmUgJiBBVEFfQUJPUlRFRCkpIHsKKwkJCW1heV9mYWxsYmFjayA9IDA7CisKKwkJCWlmIChjbGFzcyA9PSBBVEFfREVWX0FUQSkKKwkJCQljbGFzcyA9IEFUQV9ERVZfQVRBUEk7CisJCQllbHNlCisJCQkJY2xhc3MgPSBBVEFfREVWX0FUQTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwogCQlyYyA9IC1FSU87CiAJCXJlYXNvbiA9ICJJL08gZXJyb3IiOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCisJLyogRmFsbGluZyBiYWNrIGRvZXNuJ3QgbWFrZSBzZW5zZSBpZiBJRCBkYXRhIHdhcyByZWFkCisJICogc3VjY2Vzc2Z1bGx5IGF0IGxlYXN0IG9uY2UuCisJICovCisJbWF5X2ZhbGxiYWNrID0gMDsKKwogCXN3YXBfYnVmX2xlMTYoaWQsIEFUQV9JRF9XT1JEUyk7CiAKIAkvKiBzYW5pdHkgY2hlY2sgKi8KQEAgLTE4NDEsNyArMTg2Myw3IEBACiAJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgIiVzOiBFTlRFUlxuIiwgX19GVU5DVElPTl9fKTsKIAogCS8qIHNldCBfU0REICovCi0JcmMgPSBhdGFfYWNwaV9wdXNoX2lkKGFwLCBkZXYtPmRldm5vKTsKKwlyYyA9IGF0YV9hY3BpX3B1c2hfaWQoZGV2KTsKIAlpZiAocmMpIHsKIAkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX1dBUk5JTkcsICJmYWlsZWQgdG8gc2V0IF9TREQoJWQpXG4iLAogCQkJcmMpOwpAQCAtMTg5MSw3ICsxOTEzLDYgQEAKIAkJCXNucHJpbnRmKHJldmJ1ZiwgNywgIkFUQS0lZCIsICBhdGFfaWRfbWFqb3JfdmVyc2lvbihpZCkpOwogCiAJCWRldi0+bl9zZWN0b3JzID0gYXRhX2lkX25fc2VjdG9ycyhpZCk7Ci0JCWRldi0+bl9zZWN0b3JzX2Jvb3QgPSBkZXYtPm5fc2VjdG9yczsKIAogCQkvKiBTQ1NJIG9ubHkgdXNlcyA0LWNoYXIgcmV2aXNpb25zLCBkdW1wIGZ1bGwgOCBjaGFycyBmcm9tIEFUQSAqLwogCQlhdGFfaWRfY19zdHJpbmcoZGV2LT5pZCwgZndyZXZidWYsIEFUQV9JRF9GV19SRVYsCkBAIC0yNjQyLDcgKzI2NjMsNyBAQAogCQl0LT5hY3RpdmUgKz0gKHQtPmN5Y2xlIC0gKHQtPmFjdGl2ZSArIHQtPnJlY292ZXIpKSAvIDI7CiAJCXQtPnJlY292ZXIgPSB0LT5jeWNsZSAtIHQtPmFjdGl2ZTsKIAl9Ci0JCisKIAkvKiBJbiBhIGZldyBjYXNlcyBxdWFudGlzYXRpb24gbWF5IHByb2R1Y2UgZW5vdWdoIGVycm9ycyB0bwogCSAgIGxlYXZlIHQtPmN5Y2xlIHRvbyBsb3cgZm9yIHRoZSBzdW0gb2YgYWN0aXZlIGFuZCByZWNvdmVyeQogCSAgIGlmIHNvIHdlIG11c3QgY29ycmVjdCB0aGlzICovCkBAIC0yODU4LDcgKzI4NzksNyBAQAogCQlkZXYgPSAmYXAtPmRldmljZVtpXTsKIAogCQkvKiBkb24ndCB1cGRhdGUgc3VzcGVuZGVkIGRldmljZXMnIHhmZXIgbW9kZSAqLwotCQlpZiAoIWF0YV9kZXZfcmVhZHkoZGV2KSkKKwkJaWYgKCFhdGFfZGV2X2VuYWJsZWQoZGV2KSkKIAkJCWNvbnRpbnVlOwogCiAJCXJjID0gYXRhX2Rldl9zZXRfbW9kZShkZXYpOwpAQCAtMjg3Miw5ICsyODkzLDYgQEAKIAlpZiAodXNlZF9kbWEgJiYgKGFwLT5ob3N0LT5mbGFncyAmIEFUQV9IT1NUX1NJTVBMRVgpKQogCQlhcC0+aG9zdC0+c2ltcGxleF9jbGFpbWVkID0gYXA7CiAKLQkvKiBzdGVwNTogY2hpcCBzcGVjaWZpYyBmaW5hbGlzYXRpb24gKi8KLQlpZiAoYXAtPm9wcy0+cG9zdF9zZXRfbW9kZSkKLQkJYXAtPm9wcy0+cG9zdF9zZXRfbW9kZShhcCk7CiAgb3V0OgogCWlmIChyYykKIAkJKnJfZmFpbGVkX2RldiA9IGRldjsKQEAgLTI5NzksMjMgKzI5OTcsNzEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRhX2J1c19wb3N0X3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZtYXNrKQorLyoqCisgKglhdGFfd2FpdF9yZWFkeSAtIHNsZWVwIHVudGlsIEJTWSBjbGVhcnMsIG9yIHRpbWVvdXQKKyAqCUBhcDogcG9ydCBjb250YWluaW5nIHN0YXR1cyByZWdpc3RlciB0byBiZSBwb2xsZWQKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgorICoKKyAqCVNsZWVwIHVudGlsIEFUQSBTdGF0dXMgcmVnaXN0ZXIgYml0IEJTWSBjbGVhcnMsIG9yIHRpbWVvdXQKKyAqCW9jY3Vycy4KKyAqCisgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApLgorICoKKyAqCVJFVFVSTlM6CisgKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuCisgKi8KK2ludCBhdGFfd2FpdF9yZWFkeShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOworCWludCB3YXJuZWQgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJdTggc3RhdHVzID0gYXRhX2Noa19zdGF0dXMoYXApOworCQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CisKKwkJaWYgKCEoc3RhdHVzICYgQVRBX0JVU1kpKQorCQkJcmV0dXJuIDA7CisJCWlmICghYXRhX3BvcnRfb25saW5lKGFwKSAmJiBzdGF0dXMgPT0gMHhmZikKKwkJCXJldHVybiAtRU5PREVWOworCQlpZiAodGltZV9hZnRlcihub3csIGRlYWRsaW5lKSkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJaWYgKCF3YXJuZWQgJiYgdGltZV9hZnRlcihub3csIHN0YXJ0ICsgNSAqIEhaKSAmJgorCQkgICAgKGRlYWRsaW5lIC0gbm93ID4gMyAqIEhaKSkgeworCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsCisJCQkJInBvcnQgaXMgc2xvdyB0byByZXNwb25kLCBwbGVhc2UgYmUgcGF0aWVudCAiCisJCQkJIihTdGF0dXMgMHgleClcbiIsIHN0YXR1cyk7CisJCQl3YXJuZWQgPSAxOworCQl9CisKKwkJbXNsZWVwKDUwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXRhX2J1c19wb3N0X3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZtYXNrLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOwogCXVuc2lnbmVkIGludCBkZXYwID0gZGV2bWFzayAmICgxIDw8IDApOwogCXVuc2lnbmVkIGludCBkZXYxID0gZGV2bWFzayAmICgxIDw8IDEpOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgcmMsIHJldCA9IDA7CiAKIAkvKiBpZiBkZXZpY2UgMCB3YXMgZm91bmQgaW4gYXRhX2RldmNoaywgd2FpdCBmb3IgaXRzCiAJICogQlNZIGJpdCB0byBjbGVhcgogCSAqLwotCWlmIChkZXYwKQotCQlhdGFfYnVzeV9zbGVlcChhcCwgQVRBX1RNT1VUX0JPT1RfUVVJQ0ssIEFUQV9UTU9VVF9CT09UKTsKKwlpZiAoZGV2MCkgeworCQlyYyA9IGF0YV93YWl0X3JlYWR5KGFwLCBkZWFkbGluZSk7CisJCWlmIChyYykgeworCQkJaWYgKHJjICE9IC1FTk9ERVYpCisJCQkJcmV0dXJuIHJjOworCQkJcmV0ID0gcmM7CisJCX0KKwl9CiAKIAkvKiBpZiBkZXZpY2UgMSB3YXMgZm91bmQgaW4gYXRhX2RldmNoaywgd2FpdCBmb3IKIAkgKiByZWdpc3RlciBhY2Nlc3MsIHRoZW4gd2FpdCBmb3IgQlNZIHRvIGNsZWFyCiAJICovCi0JdGltZW91dCA9IGppZmZpZXMgKyBBVEFfVE1PVVRfQk9PVDsKIAl3aGlsZSAoZGV2MSkgewogCQl1OCBuc2VjdCwgbGJhbDsKIApAQCAtMzAwNCwxNCArMzA3MCwxOCBAQAogCQlsYmFsID0gaW9yZWFkOChpb2FkZHItPmxiYWxfYWRkcik7CiAJCWlmICgobnNlY3QgPT0gMSkgJiYgKGxiYWwgPT0gMSkpCiAJCQlicmVhazsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCWRldjEgPSAwOwotCQkJYnJlYWs7Ci0JCX0KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKQorCQkJcmV0dXJuIC1FQlVTWTsKIAkJbXNsZWVwKDUwKTsJLyogZ2l2ZSBkcml2ZSBhIGJyZWF0aGVyICovCiAJfQotCWlmIChkZXYxKQotCQlhdGFfYnVzeV9zbGVlcChhcCwgQVRBX1RNT1VUX0JPT1RfUVVJQ0ssIEFUQV9UTU9VVF9CT09UKTsKKwlpZiAoZGV2MSkgeworCQlyYyA9IGF0YV93YWl0X3JlYWR5KGFwLCBkZWFkbGluZSk7CisJCWlmIChyYykgeworCQkJaWYgKHJjICE9IC1FTk9ERVYpCisJCQkJcmV0dXJuIHJjOworCQkJcmV0ID0gcmM7CisJCX0KKwl9CiAKIAkvKiBpcyBhbGwgdGhpcyByZWFsbHkgbmVjZXNzYXJ5PyAqLwogCWFwLT5vcHMtPmRldl9zZWxlY3QoYXAsIDApOwpAQCAtMzAxOSwxMCArMzA4OSwxMiBAQAogCQlhcC0+b3BzLT5kZXZfc2VsZWN0KGFwLCAxKTsKIAlpZiAoZGV2MCkKIAkJYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgMCk7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0YV9idXNfc29mdHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGRldm1hc2spCitzdGF0aWMgaW50IGF0YV9idXNfc29mdHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZtYXNrLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewogCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7CiAKQEAgLTMwNTIsMTEgKzMxMjQsOSBAQAogCSAqIHB1bGxkb3duIHJlc2lzdG9yLgogCSAqLwogCWlmIChhdGFfY2hlY2tfc3RhdHVzKGFwKSA9PSAweEZGKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlhdGFfYnVzX3Bvc3RfcmVzZXQoYXAsIGRldm1hc2spOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGF0YV9idXNfcG9zdF9yZXNldChhcCwgZGV2bWFzaywgZGVhZGxpbmUpOwogfQogCiAvKioKQEAgLTMwODUsNiArMzE1NSw3IEBACiAJdW5zaWduZWQgaW50IHNsYXZlX3Bvc3NpYmxlID0gYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAl1OCBlcnI7CiAJdW5zaWduZWQgaW50IGRldjAsIGRldjEgPSAwLCBkZXZtYXNrID0gMDsKKwlpbnQgcmM7CiAKIAlEUFJJTlRLKCJFTlRFUiwgaG9zdCAldSwgcG9ydCAldVxuIiwgYXAtPnByaW50X2lkLCBhcC0+cG9ydF9ubyk7CiAKQEAgLTMxMDYsOSArMzE3NywxMSBAQAogCWFwLT5vcHMtPmRldl9zZWxlY3QoYXAsIDApOwogCiAJLyogaXNzdWUgYnVzIHJlc2V0ICovCi0JaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX1NSU1QpCi0JCWlmIChhdGFfYnVzX3NvZnRyZXNldChhcCwgZGV2bWFzaykpCisJaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX1NSU1QpIHsKKwkJcmMgPSBhdGFfYnVzX3NvZnRyZXNldChhcCwgZGV2bWFzaywgamlmZmllcyArIDQwICogSFopOworCQlpZiAocmMgJiYgcmMgIT0gLUVOT0RFVikKIAkJCWdvdG8gZXJyX291dDsKKwl9CiAKIAkvKgogCSAqIGRldGVybWluZSBieSBzaWduYXR1cmUgd2hldGhlciB3ZSBoYXZlIEFUQSBvciBBVEFQSSBkZXZpY2VzCkBAIC0zMTUwLDI5ICszMjIzLDM3IEBACiAgKglzYXRhX3BoeV9kZWJvdW5jZSAtIGRlYm91bmNlIFNBVEEgcGh5IHN0YXR1cwogICoJQGFwOiBBVEEgcG9ydCB0byBkZWJvdW5jZSBTQVRBIHBoeSBzdGF0dXMgZm9yCiAgKglAcGFyYW1zOiB0aW1pbmcgcGFyYW1ldGVycyB7IGludGVydmFsLCBkdXJhdGlub24sIHRpbWVvdXQgfSBpbiBtc2VjCisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCiAgKglNYWtlIHN1cmUgU1N0YXR1cyBvZiBAYXAgcmVhY2hlcyBzdGFibGUgc3RhdGUsIGRldGVybWluZWQgYnkKICAqCWhvbGRpbmcgdGhlIHNhbWUgdmFsdWUgd2hlcmUgREVUIGlzIG5vdCAxIGZvciBAZHVyYXRpb24gcG9sbGVkCiAgKglldmVyeSBAaW50ZXJ2YWwsIGJlZm9yZSBAdGltZW91dC4gIFRpbWVvdXQgY29uc3RyYWludHMgdGhlCi0gKgliZWdpbm5pbmcgb2YgdGhlIHN0YWJsZSBzdGF0ZS4gIEJlY2F1c2UsIGFmdGVyIGhvdCB1bnBsdWdnaW5nLAotICoJREVUIGdldHMgc3R1Y2sgYXQgMSBvbiBzb21lIGNvbnRyb2xsZXJzLCB0aGlzIGZ1bmN0aW9ucyB3YWl0cworICoJYmVnaW5uaW5nIG9mIHRoZSBzdGFibGUgc3RhdGUuICBCZWNhdXNlIERFVCBnZXRzIHN0dWNrIGF0IDEgb24KKyAqCXNvbWUgY29udHJvbGxlcnMgYWZ0ZXIgaG90IHVucGx1Z2dpbmcsIHRoaXMgZnVuY3Rpb25zIHdhaXRzCiAgKgl1bnRpbCB0aW1lb3V0IHRoZW4gcmV0dXJucyAwIGlmIERFVCBpcyBzdGFibGUgYXQgMS4KICAqCisgKglAdGltZW91dCBpcyBmdXJ0aGVyIGxpbWl0ZWQgYnkgQGRlYWRsaW5lLiAgVGhlIHNvb25lciBvZiB0aGUKKyAqCXR3byBpcyB1c2VkLgorICoKICAqCUxPQ0tJTkc6CiAgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkKICAqCiAgKglSRVRVUk5TOgogICoJMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS4KICAqLwotaW50IHNhdGFfcGh5X2RlYm91bmNlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnBhcmFtcykKK2ludCBzYXRhX3BoeV9kZWJvdW5jZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCB1bnNpZ25lZCBsb25nICpwYXJhbXMsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJdW5zaWduZWQgbG9uZyBpbnRlcnZhbF9tc2VjID0gcGFyYW1zWzBdOwotCXVuc2lnbmVkIGxvbmcgZHVyYXRpb24gPSBwYXJhbXNbMV0gKiBIWiAvIDEwMDA7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIHBhcmFtc1syXSAqIEhaIC8gMTAwMDsKLQl1bnNpZ25lZCBsb25nIGxhc3RfamlmZmllczsKKwl1bnNpZ25lZCBsb25nIGR1cmF0aW9uID0gbXNlY3NfdG9famlmZmllcyhwYXJhbXNbMV0pOworCXVuc2lnbmVkIGxvbmcgbGFzdF9qaWZmaWVzLCB0OwogCXUzMiBsYXN0LCBjdXI7CiAJaW50IHJjOwogCisJdCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHBhcmFtc1syXSk7CisJaWYgKHRpbWVfYmVmb3JlKHQsIGRlYWRsaW5lKSkKKwkJZGVhZGxpbmUgPSB0OworCiAJaWYgKChyYyA9IHNhdGFfc2NyX3JlYWQoYXAsIFNDUl9TVEFUVVMsICZjdXIpKSkKIAkJcmV0dXJuIHJjOwogCWN1ciAmPSAweGY7CkBAIC0zMTg4LDcgKzMyNjksNyBAQAogCiAJCS8qIERFVCBzdGFibGU/ICovCiAJCWlmIChjdXIgPT0gbGFzdCkgewotCQkJaWYgKGN1ciA9PSAxICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJaWYgKGN1ciA9PSAxICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSkKIAkJCQljb250aW51ZTsKIAkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfamlmZmllcyArIGR1cmF0aW9uKSkKIAkJCQlyZXR1cm4gMDsKQEAgLTMxOTksOCArMzI4MCw4IEBACiAJCWxhc3QgPSBjdXI7CiAJCWxhc3RfamlmZmllcyA9IGppZmZpZXM7CiAKLQkJLyogY2hlY2sgdGltZW91dCAqLwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJLyogY2hlY2sgZGVhZGxpbmUgKi8KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKQogCQkJcmV0dXJuIC1FQlVTWTsKIAl9CiB9CkBAIC0zMjA5LDYgKzMyOTAsNyBAQAogICoJc2F0YV9waHlfcmVzdW1lIC0gcmVzdW1lIFNBVEEgcGh5CiAgKglAYXA6IEFUQSBwb3J0IHRvIHJlc3VtZSBTQVRBIHBoeSBmb3IKICAqCUBwYXJhbXM6IHRpbWluZyBwYXJhbWV0ZXJzIHsgaW50ZXJ2YWwsIGR1cmF0aW5vbiwgdGltZW91dCB9IGluIG1zZWMKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCVJlc3VtZSBTQVRBIHBoeSBvZiBAYXAgYW5kIGRlYm91bmNlIGl0LgogICoKQEAgLTMyMTgsNyArMzMwMCw4IEBACiAgKglSRVRVUk5TOgogICoJMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS4KICAqLwotaW50IHNhdGFfcGh5X3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCB1bnNpZ25lZCBsb25nICpwYXJhbXMpCitpbnQgc2F0YV9waHlfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnBhcmFtcywKKwkJICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJdTMyIHNjb250cm9sOwogCWludCByYzsKQEAgLTMyMzYsNDMgKzMzMTksMTkgQEAKIAkgKi8KIAltc2xlZXAoMjAwKTsKIAotCXJldHVybiBzYXRhX3BoeV9kZWJvdW5jZShhcCwgcGFyYW1zKTsKLX0KLQotc3RhdGljIHZvaWQgYXRhX3dhaXRfc3BpbnVwKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0Jc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmYXAtPmVoX2NvbnRleHQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQsIHNlY3M7Ci0JaW50IHJjOwotCi0JLyogZmlyc3QsIGRlYm91bmNlIHBoeSBpZiBTQVRBICovCi0JaWYgKGFwLT5jYmwgPT0gQVRBX0NCTF9TQVRBKSB7Ci0JCXJjID0gc2F0YV9waHlfZGVib3VuY2UoYXAsIHNhdGFfZGViX3RpbWluZ19ob3RwbHVnKTsKLQotCQkvKiBpZiBkZWJvdW5jZWQgc3VjY2Vzc2Z1bGx5IGFuZCBvZmZsaW5lLCBubyBuZWVkIHRvIHdhaXQgKi8KLQkJaWYgKChyYyA9PSAwIHx8IHJjID09IC1FT1BOT1RTVVBQKSAmJiBhdGFfcG9ydF9vZmZsaW5lKGFwKSkKLQkJCXJldHVybjsKLQl9Ci0KLQkvKiBva2F5LCBsZXQncyBnaXZlIHRoZSBkcml2ZSB0aW1lIHRvIHNwaW4gdXAgKi8KLQllbmQgPSBlaGMtPmkuaG90cGx1Z190aW1lc3RhbXAgKyBBVEFfU1BJTlVQX1dBSVQgKiBIWiAvIDEwMDA7Ci0Jc2VjcyA9ICgoZW5kIC0gamlmZmllcykgKyBIWiAtIDEpIC8gSFo7Ci0KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBlbmQpKQotCQlyZXR1cm47Ci0KLQlpZiAoc2VjcyA+IDUpCi0JCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9JTkZPLCAid2FpdGluZyBmb3IgZGV2aWNlIHRvIHNwaW4gdXAgIgotCQkJCSIoJWx1IHNlY3MpXG4iLCBzZWNzKTsKLQotCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKGVuZCAtIGppZmZpZXMpOworCXJldHVybiBzYXRhX3BoeV9kZWJvdW5jZShhcCwgcGFyYW1zLCBkZWFkbGluZSk7CiB9CiAKIC8qKgogICoJYXRhX3N0ZF9wcmVyZXNldCAtIHByZXBhcmUgZm9yIHJlc2V0CiAgKglAYXA6IEFUQSBwb3J0IHRvIGJlIHJlc2V0CisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCi0gKglAYXAgaXMgYWJvdXQgdG8gYmUgcmVzZXQuICBJbml0aWFsaXplIGl0LgorICoJQGFwIGlzIGFib3V0IHRvIGJlIHJlc2V0LiAgSW5pdGlhbGl6ZSBpdC4gIEZhaWx1cmUgZnJvbQorICoJcHJlcmVzZXQgbWFrZXMgbGliYXRhIGFib3J0IHdob2xlIHJlc2V0IHNlcXVlbmNlIGFuZCBnaXZlIHVwCisgKgl0aGF0IHBvcnQsIHNvIHByZXJlc2V0IHNob3VsZCBiZSBiZXN0LWVmZm9ydC4gIEl0IGRvZXMgaXRzCisgKgliZXN0IHRvIHByZXBhcmUgZm9yIHJlc2V0IHNlcXVlbmNlIGJ1dCBpZiB0aGluZ3MgZ28gd3JvbmcsIGl0CisgKglzaG91bGQganVzdCB3aGluZSwgbm90IGZhaWwuCiAgKgogICoJTE9DS0lORzoKICAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKQpAQCAtMzI4MCw0MSArMzMzOSw0MSBAQAogICoJUkVUVVJOUzoKICAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KICAqLwotaW50IGF0YV9zdGRfcHJlcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK2ludCBhdGFfc3RkX3ByZXJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmYXAtPmVoX2NvbnRleHQ7CiAJY29uc3QgdW5zaWduZWQgbG9uZyAqdGltaW5nID0gc2F0YV9laGNfZGViX3RpbWluZyhlaGMpOwogCWludCByYzsKIAotCS8qIGhhbmRsZSBsaW5rIHJlc3VtZSAmIGhvdHBsdWcgc3BpbnVwICovCisJLyogaGFuZGxlIGxpbmsgcmVzdW1lICovCiAJaWYgKChlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX1JFU1VNRV9MSU5LKSAmJgogCSAgICAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfSFJTVF9UT19SRVNVTUUpKQogCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CiAKLQlpZiAoKGVoYy0+aS5mbGFncyAmIEFUQV9FSElfSE9UUExVR0dFRCkgJiYKLQkgICAgKGFwLT5mbGFncyAmIEFUQV9GTEFHX1NLSVBfRDJIX0JTWSkpCi0JCWF0YV93YWl0X3NwaW51cChhcCk7Ci0KIAkvKiBpZiB3ZSdyZSBhYm91dCB0byBkbyBoYXJkcmVzZXQsIG5vdGhpbmcgbW9yZSB0byBkbyAqLwogCWlmIChlaGMtPmkuYWN0aW9uICYgQVRBX0VIX0hBUkRSRVNFVCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBpZiBTQVRBLCByZXN1bWUgcGh5ICovCiAJaWYgKGFwLT5jYmwgPT0gQVRBX0NCTF9TQVRBKSB7Ci0JCXJjID0gc2F0YV9waHlfcmVzdW1lKGFwLCB0aW1pbmcpOwotCQlpZiAocmMgJiYgcmMgIT0gLUVPUE5PVFNVUFApIHsKLQkJCS8qIHBoeSByZXN1bWUgZmFpbGVkICovCisJCXJjID0gc2F0YV9waHlfcmVzdW1lKGFwLCB0aW1pbmcsIGRlYWRsaW5lKTsKKwkJLyogd2hpbmUgYWJvdXQgcGh5IHJlc3VtZSBmYWlsdXJlIGJ1dCBwcm9jZWVkICovCisJCWlmIChyYyAmJiByYyAhPSAtRU9QTk9UU1VQUCkKIAkJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLCAiZmFpbGVkIHRvIHJlc3VtZSAiCiAJCQkJCSJsaW5rIGZvciByZXNldCAoZXJybm89JWQpXG4iLCByYyk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KIAl9CiAKIAkvKiBXYWl0IGZvciAhQlNZIGlmIHRoZSBjb250cm9sbGVyIGNhbiB3YWl0IGZvciB0aGUgZmlyc3QgRDJICiAJICogUmVnIEZJUyBhbmQgd2UgZG9uJ3Qga25vdyB0aGF0IG5vIGRldmljZSBpcyBhdHRhY2hlZC4KIAkgKi8KLQlpZiAoIShhcC0+ZmxhZ3MgJiBBVEFfRkxBR19TS0lQX0QySF9CU1kpICYmICFhdGFfcG9ydF9vZmZsaW5lKGFwKSkKLQkJYXRhX2J1c3lfc2xlZXAoYXAsIEFUQV9UTU9VVF9CT09UX1FVSUNLLCBBVEFfVE1PVVRfQk9PVCk7CisJaWYgKCEoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0tJUF9EMkhfQlNZKSAmJiAhYXRhX3BvcnRfb2ZmbGluZShhcCkpIHsKKwkJcmMgPSBhdGFfd2FpdF9yZWFkeShhcCwgZGVhZGxpbmUpOworCQlpZiAocmMgJiYgcmMgIT0gLUVOT0RFVikgeworCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsICJkZXZpY2Ugbm90IHJlYWR5ICIKKwkJCQkJIihlcnJubz0lZCksIGZvcmNpbmcgaGFyZHJlc2V0XG4iLCByYyk7CisJCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CisJCX0KKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzMjMsNiArMzM4Miw3IEBACiAgKglhdGFfc3RkX3NvZnRyZXNldCAtIHJlc2V0IGhvc3QgcG9ydCB2aWEgQVRBIFNSU1QKICAqCUBhcDogcG9ydCB0byByZXNldAogICoJQGNsYXNzZXM6IHJlc3VsdGluZyBjbGFzc2VzIG9mIGF0dGFjaGVkIGRldmljZXMKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCVJlc2V0IGhvc3QgcG9ydCB1c2luZyBBVEEgU1JTVC4KICAqCkBAIC0zMzMyLDEwICszMzkyLDEyIEBACiAgKglSRVRVUk5TOgogICoJMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLgogICovCi1pbnQgYXRhX3N0ZF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzc2VzKQoraW50IGF0YV9zdGRfc29mdHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3NlcywKKwkJICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAl1bnNpZ25lZCBpbnQgc2xhdmVfcG9zc2libGUgPSBhcC0+ZmxhZ3MgJiBBVEFfRkxBR19TTEFWRV9QT1NTOwotCXVuc2lnbmVkIGludCBkZXZtYXNrID0gMCwgZXJyX21hc2s7CisJdW5zaWduZWQgaW50IGRldm1hc2sgPSAwOworCWludCByYzsKIAl1OCBlcnI7CiAKIAlEUFJJTlRLKCJFTlRFUlxuIik7CkBAIC0zMzU2LDExICszNDE4LDExIEBACiAKIAkvKiBpc3N1ZSBidXMgcmVzZXQgKi8KIAlEUFJJTlRLKCJhYm91dCB0byBzb2Z0cmVzZXQsIGRldm1hc2s9JXhcbiIsIGRldm1hc2spOwotCWVycl9tYXNrID0gYXRhX2J1c19zb2Z0cmVzZXQoYXAsIGRldm1hc2spOwotCWlmIChlcnJfbWFzaykgewotCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fRVJSLCAiU1JTVCBmYWlsZWQgKGVycl9tYXNrPTB4JXgpXG4iLAotCQkJCWVycl9tYXNrKTsKLQkJcmV0dXJuIC1FSU87CisJcmMgPSBhdGFfYnVzX3NvZnRyZXNldChhcCwgZGV2bWFzaywgZGVhZGxpbmUpOworCS8qIGlmIGxpbmsgaXMgb2NjdXBpZWQsIC1FTk9ERVYgdG9vIGlzIGFuIGVycm9yICovCisJaWYgKHJjICYmIChyYyAhPSAtRU5PREVWIHx8IHNhdGFfc2NyX3ZhbGlkKGFwKSkpIHsKKwkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0VSUiwgIlNSU1QgZmFpbGVkIChlcnJubz0lZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOwogCX0KIAogCS8qIGRldGVybWluZSBieSBzaWduYXR1cmUgd2hldGhlciB3ZSBoYXZlIEFUQSBvciBBVEFQSSBkZXZpY2VzICovCkBAIC0zMzc3LDYgKzM0MzksNyBAQAogICoJc2F0YV9wb3J0X2hhcmRyZXNldCAtIHJlc2V0IHBvcnQgdmlhIFNBVEEgcGh5IHJlc2V0CiAgKglAYXA6IHBvcnQgdG8gcmVzZXQKICAqCUB0aW1pbmc6IHRpbWluZyBwYXJhbWV0ZXJzIHsgaW50ZXJ2YWwsIGR1cmF0aW5vbiwgdGltZW91dCB9IGluIG1zZWMKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCVNBVEEgcGh5LXJlc2V0IGhvc3QgcG9ydCB1c2luZyBERVQgYml0cyBvZiBTQ29udHJvbCByZWdpc3Rlci4KICAqCkBAIC0zMzg2LDcgKzM0NDksOCBAQAogICoJUkVUVVJOUzoKICAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KICAqLwotaW50IHNhdGFfcG9ydF9oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3QgdW5zaWduZWQgbG9uZyAqdGltaW5nKQoraW50IHNhdGFfcG9ydF9oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3QgdW5zaWduZWQgbG9uZyAqdGltaW5nLAorCQkJdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAl1MzIgc2NvbnRyb2w7CiAJaW50IHJjOwpAQCAtMzQyNSw3ICszNDg5LDcgQEAKIAltc2xlZXAoMSk7CiAKIAkvKiBicmluZyBwaHkgYmFjayAqLwotCXJjID0gc2F0YV9waHlfcmVzdW1lKGFwLCB0aW1pbmcpOworCXJjID0gc2F0YV9waHlfcmVzdW1lKGFwLCB0aW1pbmcsIGRlYWRsaW5lKTsKICBvdXQ6CiAJRFBSSU5USygiRVhJVCwgcmM9JWRcbiIsIHJjKTsKIAlyZXR1cm4gcmM7CkBAIC0zNDM1LDYgKzM0OTksNyBAQAogICoJc2F0YV9zdGRfaGFyZHJlc2V0IC0gcmVzZXQgaG9zdCBwb3J0IHZpYSBTQVRBIHBoeSByZXNldAogICoJQGFwOiBwb3J0IHRvIHJlc2V0CiAgKglAY2xhc3M6IHJlc3VsdGluZyBjbGFzcyBvZiBhdHRhY2hlZCBkZXZpY2UKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCVNBVEEgcGh5LXJlc2V0IGhvc3QgcG9ydCB1c2luZyBERVQgYml0cyBvZiBTQ29udHJvbCByZWdpc3RlciwKICAqCXdhaXQgZm9yICFCU1kgYW5kIGNsYXNzaWZ5IHRoZSBhdHRhY2hlZCBkZXZpY2UuCkBAIC0zNDQ1LDcgKzM1MTAsOCBAQAogICoJUkVUVVJOUzoKICAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KICAqLwotaW50IHNhdGFfc3RkX2hhcmRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzKQoraW50IHNhdGFfc3RkX2hhcmRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAljb25zdCB1bnNpZ25lZCBsb25nICp0aW1pbmcgPSBzYXRhX2VoY19kZWJfdGltaW5nKCZhcC0+ZWhfY29udGV4dCk7CiAJaW50IHJjOwpAQCAtMzQ1Myw3ICszNTE5LDcgQEAKIAlEUFJJTlRLKCJFTlRFUlxuIik7CiAKIAkvKiBkbyBoYXJkcmVzZXQgKi8KLQlyYyA9IHNhdGFfcG9ydF9oYXJkcmVzZXQoYXAsIHRpbWluZyk7CisJcmMgPSBzYXRhX3BvcnRfaGFyZHJlc2V0KGFwLCB0aW1pbmcsIGRlYWRsaW5lKTsKIAlpZiAocmMpIHsKIAkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0VSUiwKIAkJCQkiQ09NUkVTRVQgZmFpbGVkIChlcnJubz0lZClcbiIsIHJjKTsKQEAgLTM0NzAsMTAgKzM1MzYsMTIgQEAKIAkvKiB3YWl0IGEgd2hpbGUgYmVmb3JlIGNoZWNraW5nIHN0YXR1cywgc2VlIFNSU1QgZm9yIG1vcmUgaW5mbyAqLwogCW1zbGVlcCgxNTApOwogCi0JaWYgKGF0YV9idXN5X3NsZWVwKGFwLCBBVEFfVE1PVVRfQk9PVF9RVUlDSywgQVRBX1RNT1VUX0JPT1QpKSB7CisJcmMgPSBhdGFfd2FpdF9yZWFkeShhcCwgZGVhZGxpbmUpOworCS8qIGxpbmsgb2NjdXBpZWQsIC1FTk9ERVYgdG9vIGlzIGFuIGVycm9yICovCisJaWYgKHJjKSB7CiAJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9FUlIsCi0JCQkJIkNPTVJFU0VUIGZhaWxlZCAoZGV2aWNlIG5vdCByZWFkeSlcbiIpOwotCQlyZXR1cm4gLUVJTzsKKwkJCQkiQ09NUkVTRVQgZmFpbGVkIChlcnJubz0lZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOwogCX0KIAogCWFwLT5vcHMtPmRldl9zZWxlY3QoYXAsIDApOwkvKiBwcm9iYWJseSB1bm5lY2Vzc2FyeSAqLwpAQCAtMzU1NCw3ICszNjIyLDYgQEAKIAljb25zdCB1MTYgKm9sZF9pZCA9IGRldi0+aWQ7CiAJdW5zaWduZWQgY2hhciBtb2RlbFsyXVtBVEFfSURfUFJPRF9MRU4gKyAxXTsKIAl1bnNpZ25lZCBjaGFyIHNlcmlhbFsyXVtBVEFfSURfU0VSTk9fTEVOICsgMV07Ci0JdTY0IG5ld19uX3NlY3RvcnM7CiAKIAlpZiAoZGV2LT5jbGFzcyAhPSBuZXdfY2xhc3MpIHsKIAkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0lORk8sICJjbGFzcyBtaXNtYXRjaCAlZCAhPSAlZFxuIiwKQEAgLTM1NjYsNyArMzYzMyw2IEBACiAJYXRhX2lkX2Nfc3RyaW5nKG5ld19pZCwgbW9kZWxbMV0sIEFUQV9JRF9QUk9ELCBzaXplb2YobW9kZWxbMV0pKTsKIAlhdGFfaWRfY19zdHJpbmcob2xkX2lkLCBzZXJpYWxbMF0sIEFUQV9JRF9TRVJOTywgc2l6ZW9mKHNlcmlhbFswXSkpOwogCWF0YV9pZF9jX3N0cmluZyhuZXdfaWQsIHNlcmlhbFsxXSwgQVRBX0lEX1NFUk5PLCBzaXplb2Yoc2VyaWFsWzFdKSk7Ci0JbmV3X25fc2VjdG9ycyA9IGF0YV9pZF9uX3NlY3RvcnMobmV3X2lkKTsKIAogCWlmIChzdHJjbXAobW9kZWxbMF0sIG1vZGVsWzFdKSkgewogCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgIm1vZGVsIG51bWJlciBtaXNtYXRjaCAiCkBAIC0zNTgwLDI1ICszNjQ2LDEyIEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBICYmIGRldi0+bl9zZWN0b3JzICE9IG5ld19uX3NlY3RvcnMpIHsKLQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0lORk8sICJuX3NlY3RvcnMgbWlzbWF0Y2ggIgotCQkJICAgICAgICIlbGx1ICE9ICVsbHVcbiIsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXYtPm5fc2VjdG9ycywKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW5ld19uX3NlY3RvcnMpOwotCQkvKiBBcmUgd2UgdGhlIGJvb3QgdGltZSBzaXplIC0gaWYgc28gd2UgYXBwZWFyIHRvIGJlIHRoZQotCQkgICBzYW1lIGRpc2sgYXQgdGhpcyBwb2ludCBhbmQgb3VyIEhQQSBnb3QgcmVhcHBsaWVkICovCi0JCWlmIChhdGFfaWdub3JlX2hwYSAmJiBkZXYtPm5fc2VjdG9yc19ib290ID09IG5ld19uX3NlY3RvcnMgCi0JCSAgICAmJiBhdGFfaWRfaHBhX2VuYWJsZWQobmV3X2lkKSkKLQkJCXJldHVybiAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlyZXR1cm4gMTsKIH0KIAogLyoqCi0gKglhdGFfZGV2X3JldmFsaWRhdGUgLSBSZXZhbGlkYXRlIEFUQSBkZXZpY2UKLSAqCUBkZXY6IGRldmljZSB0byByZXZhbGlkYXRlCisgKglhdGFfZGV2X3JlcmVhZF9pZCAtIFJlLXJlYWQgSURFTlRJRlkgZGF0YQorICoJQGFkZXY6IHRhcmdldCBBVEEgZGV2aWNlCiAgKglAcmVhZGlkX2ZsYWdzOiByZWFkIElEIGZsYWdzCiAgKgogICoJUmUtcmVhZCBJREVOVElGWSBwYWdlIGFuZCBtYWtlIHN1cmUgQGRldiBpcyBzdGlsbCBhdHRhY2hlZCB0bwpAQCAtMzYxMCwzNCArMzY2Myw2OCBAQAogICoJUkVUVVJOUzoKICAqCTAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlCiAgKi8KLWludCBhdGFfZGV2X3JldmFsaWRhdGUoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlYWRpZF9mbGFncykKK2ludCBhdGFfZGV2X3JlcmVhZF9pZChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVhZGlkX2ZsYWdzKQogewogCXVuc2lnbmVkIGludCBjbGFzcyA9IGRldi0+Y2xhc3M7CiAJdTE2ICppZCA9ICh2b2lkICopZGV2LT5hcC0+c2VjdG9yX2J1ZjsKIAlpbnQgcmM7CiAKLQlpZiAoIWF0YV9kZXZfZW5hYmxlZChkZXYpKSB7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBmYWlsOwotCX0KLQogCS8qIHJlYWQgSUQgZGF0YSAqLwogCXJjID0gYXRhX2Rldl9yZWFkX2lkKGRldiwgJmNsYXNzLCByZWFkaWRfZmxhZ3MsIGlkKTsKIAlpZiAocmMpCi0JCWdvdG8gZmFpbDsKKwkJcmV0dXJuIHJjOwogCiAJLyogaXMgdGhlIGRldmljZSBzdGlsbCB0aGVyZT8gKi8KLQlpZiAoIWF0YV9kZXZfc2FtZV9kZXZpY2UoZGV2LCBjbGFzcywgaWQpKSB7CisJaWYgKCFhdGFfZGV2X3NhbWVfZGV2aWNlKGRldiwgY2xhc3MsIGlkKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltZW1jcHkoZGV2LT5pZCwgaWQsIHNpemVvZihpZFswXSkgKiBBVEFfSURfV09SRFMpOworCXJldHVybiAwOworfQorCisvKioKKyAqCWF0YV9kZXZfcmV2YWxpZGF0ZSAtIFJldmFsaWRhdGUgQVRBIGRldmljZQorICoJQGRldjogZGV2aWNlIHRvIHJldmFsaWRhdGUKKyAqCUByZWFkaWRfZmxhZ3M6IHJlYWQgSUQgZmxhZ3MKKyAqCisgKglSZS1yZWFkIElERU5USUZZIHBhZ2UsIG1ha2Ugc3VyZSBAZGV2IGlzIHN0aWxsIGF0dGFjaGVkIHRvIHRoZQorICoJcG9ydCBhbmQgcmVjb25maWd1cmUgaXQgYWNjb3JkaW5nIHRvIHRoZSBuZXcgSURFTlRJRlkgcGFnZS4KKyAqCisgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCisgKgorICoJUkVUVVJOUzoKKyAqCTAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlCisgKi8KK2ludCBhdGFfZGV2X3JldmFsaWRhdGUoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlYWRpZF9mbGFncykKK3sKKwl1NjQgbl9zZWN0b3JzID0gZGV2LT5uX3NlY3RvcnM7CisJaW50IHJjOworCisJaWYgKCFhdGFfZGV2X2VuYWJsZWQoZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiByZS1yZWFkIElEICovCisJcmMgPSBhdGFfZGV2X3JlcmVhZF9pZChkZXYsIHJlYWRpZF9mbGFncyk7CisJaWYgKHJjKQorCQlnb3RvIGZhaWw7CisKKwkvKiBjb25maWd1cmUgZGV2aWNlIGFjY29yZGluZyB0byB0aGUgbmV3IElEICovCisJcmMgPSBhdGFfZGV2X2NvbmZpZ3VyZShkZXYpOworCWlmIChyYykKKwkJZ290byBmYWlsOworCisJLyogdmVyaWZ5IG5fc2VjdG9ycyBoYXNuJ3QgY2hhbmdlZCAqLworCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBICYmIGRldi0+bl9zZWN0b3JzICE9IG5fc2VjdG9ycykgeworCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgIm5fc2VjdG9ycyBtaXNtYXRjaCAiCisJCQkgICAgICAgIiVsbHUgIT0gJWxsdVxuIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW5fc2VjdG9ycywKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRldi0+bl9zZWN0b3JzKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JbWVtY3B5KGRldi0+aWQsIGlkLCBzaXplb2YoaWRbMF0pICogQVRBX0lEX1dPUkRTKTsKLQotCS8qIGNvbmZpZ3VyZSBkZXZpY2UgYWNjb3JkaW5nIHRvIHRoZSBuZXcgSUQgKi8KLQlyYyA9IGF0YV9kZXZfY29uZmlndXJlKGRldik7Ci0JaWYgKHJjID09IDApCi0JCXJldHVybiAwOworCXJldHVybiAwOwogCiAgZmFpbDoKIAlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fRVJSLCAicmV2YWxpZGF0aW9uIGZhaWxlZCAoZXJybm89JWQpXG4iLCByYyk7CkBAIC0zNjgxLDYgKzM3NjgsNyBAQAogCXsgIkFUQVBJIENELVJPTSBEUklWRSA0MFggTUFYSU1VTSIsTlVMTCxBVEFfSE9SS0FHRV9OT0RNQSB9LAogCXsgIl9ORUMgRFY1ODAwQSIsIAlOVUxMLAkJQVRBX0hPUktBR0VfTk9ETUEgfSwKIAl7ICJTQU1TVU5HIENELVJPTSBTTi0xMjQiLCJOMDAxIiwJQVRBX0hPUktBR0VfTk9ETUEgfSwKKwl7ICJTZWFnYXRlIFNUVDIwMDAwQSIsIE5VTEwsCQlBVEFfSE9SS0FHRV9OT0RNQSB9LAogCiAJLyogV2VpcmQgQVRBUEkgZGV2aWNlcyAqLwogCXsgIlRPUmlTQU4gRFZELVJPTSBEUkQtTjIxNiIsIE5VTEwsCUFUQV9IT1JLQUdFX01BWF9TRUNfMTI4IHwKQEAgLTM2OTUsNiArMzc4Myw3IEBACiAJeyAiRlVKSVRTVSBNSFQyMDYwQkgiLAlOVUxMLAkJQVRBX0hPUktBR0VfTk9OQ1EgfSwKIAkvKiBOQ1EgaXMgYnJva2VuICovCiAJeyAiTWF4dG9yIDZMMjUwUzAiLCAgICAgIkJBTkMxRzEwIiwgICAgIEFUQV9IT1JLQUdFX05PTkNRIH0sCisJeyAiTWF4dG9yIDZCMjAwTTAiLAkiQkFOQzFCMTAiLAlBVEFfSE9SS0FHRV9OT05DUSB9LAogCS8qIE5DUSBoYXJkIGhhbmdzIGRldmljZSB1bmRlciBoZWF2aWVyIGxvYWQsIG5lZWRzIGhhcmQgcG93ZXIgY3ljbGUgKi8KIAl7ICJNYXh0b3IgNkIyNTBTMCIsCSJCQU5DMUI3MCIsCUFUQV9IT1JLQUdFX05PTkNRIH0sCiAJLyogQmxhY2tsaXN0IGVudHJpZXMgdGFrZW4gZnJvbSBTaWxpY29uIEltYWdlIDMxMjQvMzEzMgpAQCAtNTc5MywzNyArNTg4MiwxMSBAQAogICovCiBpbnQgYXRhX2hvc3Rfc3VzcGVuZChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCWludCBpLCBqLCByYzsKKwlpbnQgcmM7CiAKIAlyYyA9IGF0YV9ob3N0X3JlcXVlc3RfcG0oaG9zdCwgbWVzZywgMCwgQVRBX0VISV9RVUlFVCwgMSk7Ci0JaWYgKHJjKQotCQlnb3RvIGZhaWw7Ci0KLQkvKiBFSCBpcyBxdWllc2NlbnQgbm93LiAgRmFpbCBpZiB3ZSBoYXZlIGFueSByZWFkeSBkZXZpY2UuCi0JICogVGhpcyBoYXBwZW5zIGlmIGhvdHBsdWcgb2NjdXJzIGJldHdlZW4gY29tcGxldGlvbiBvZiBkZXZpY2UKLQkgKiBzdXNwZW5zaW9uIGFuZCBoZXJlLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBob3N0LT5uX3BvcnRzOyBpKyspIHsKLQkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3QtPnBvcnRzW2ldOwotCi0JCWZvciAoaiA9IDA7IGogPCBBVEFfTUFYX0RFVklDRVM7IGorKykgewotCQkJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9ICZhcC0+ZGV2aWNlW2pdOwotCi0JCQlpZiAoYXRhX2Rldl9yZWFkeShkZXYpKSB7Ci0JCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsCi0JCQkJCQkic3VzcGVuZCBmYWlsZWQsIGRldmljZSAlZCAiCi0JCQkJCQkic3RpbGwgYWN0aXZlXG4iLCBkZXYtPmRldm5vKTsKLQkJCQlyYyA9IC1FQlVTWTsKLQkJCQlnb3RvIGZhaWw7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlob3N0LT5kZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gbWVzZzsKLQlyZXR1cm4gMDsKLQotIGZhaWw6Ci0JYXRhX2hvc3RfcmVzdW1lKGhvc3QpOworCWlmIChyYyA9PSAwKQorCQlob3N0LT5kZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gbWVzZzsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTU5MzIsNiArNTk5NSw3IEBACiAJaWYgKCFhcCkKIAkJcmV0dXJuIE5VTEw7CiAKKwlhcC0+cGZsYWdzIHw9IEFUQV9QRkxBR19JTklUSUFMSVpJTkc7CiAJYXAtPmxvY2sgPSAmaG9zdC0+bG9jazsKIAlhcC0+ZmxhZ3MgPSBBVEFfRkxBR19ESVNBQkxFRDsKIAlhcC0+cHJpbnRfaWQgPSAtMTsKQEAgLTYzMDAsNiArNjM2NCw3IEBACiAJCQllaGktPmFjdGlvbiB8PSBBVEFfRUhfU09GVFJFU0VUOwogCQkJZWhpLT5mbGFncyB8PSBBVEFfRUhJX05PX0FVVE9QU1kgfCBBVEFfRUhJX1FVSUVUOwogCisJCQlhcC0+cGZsYWdzICY9IH5BVEFfUEZMQUdfSU5JVElBTElaSU5HOwogCQkJYXAtPnBmbGFncyB8PSBBVEFfUEZMQUdfTE9BRElORzsKIAkJCWF0YV9wb3J0X3NjaGVkdWxlX2VoKGFwKTsKIApAQCAtNjQyNSw5ICs2NDkwLDkgQEAKIAkvKiBGbHVzaCBob3RwbHVnIHRhc2suICBUaGUgc2VxdWVuY2UgaXMgc2ltaWxhciB0bwogCSAqIGF0YV9wb3J0X2ZsdXNoX3Rhc2soKS4KIAkgKi8KLQlmbHVzaF93b3JrcXVldWUoYXRhX2F1eF93cSk7CisJY2FuY2VsX3dvcmtfc3luYygmYXAtPmhvdHBsdWdfdGFzay53b3JrKTsgLyogYWtwbTogd2h5PyAqLwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmFwLT5ob3RwbHVnX3Rhc2spOwotCWZsdXNoX3dvcmtxdWV1ZShhdGFfYXV4X3dxKTsKKwljYW5jZWxfd29ya19zeW5jKCZhcC0+aG90cGx1Z190YXNrLndvcmspOwogCiAgc2tpcF9laDoKIAkvKiByZW1vdmUgdGhlIGFzc29jaWF0ZWQgU0NTSSBob3N0ICovCkBAIC02NzkzLDYgKzY4NTgsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3JhdGVsaW1pdCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfd2FpdF9yZWdpc3Rlcik7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfYnVzeV9zbGVlcCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfd2FpdF9yZWFkeSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9xdWV1ZV90YXNrKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zY3NpX2lvY3RsKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zY3NpX3F1ZXVlY21kKTsKQEAgLTY4MjMsNiArNjg4OSw3IEBACiAjaWZkZWYgQ09ORklHX1BDSQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Rlc3RfY29uZmlnX2JpdHMpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9pbml0X25hdGl2ZV9ob3N0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9wY2lfaW5pdF9ibWRtYSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX3ByZXBhcmVfbmF0aXZlX2hvc3QpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9pbml0X29uZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX3JlbW92ZV9vbmUpOwpAQCAtNjgzNiwxMSArNjkwMyw2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX2NsZWFyX3NpbXBsZXgpOwogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAotI2lmZGVmIENPTkZJR19QTQotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSk7Ci0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9lbmdfdGltZW91dCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9zY2hlZHVsZV9laCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9hYm9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IDJiZmY5YWQuLmQ4MDcwOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC01MCwzNCArNTAsMzkgQEAKIAlBVEFfRUhfU1BETl9GQUxMQkFDS19UT19QSU8JPSAoMSA8PCAyKSwKIH07CiAKKy8qIFdhaXRpbmcgaW4gLT5wcmVyZXNldCBjYW4gbmV2ZXIgYmUgcmVsaWFibGUuICBJdCdzIHNvbWV0aW1lcyBuaWNlCisgKiB0byB3YWl0IHRoZXJlIGJ1dCBpdCBjYW4ndCBiZSBkZXBlbmRlZCB1cG9uOyBvdGhlcndpc2UsIHdlIHdvdWxkbid0CisgKiBiZSByZXNldHRpbmcuICBKdXN0IGdpdmUgaXQgZW5vdWdoIHRpbWUgZm9yIG1vc3QgZHJpdmVzIHRvIHNwaW4gdXAuCisgKi8KK2VudW0geworCUFUQV9FSF9QUkVSRVNFVF9USU1FT1VUCQk9IDEwICogSFosCit9OworCisvKiBUaGUgZm9sbG93aW5nIHRhYmxlIGRldGVybWluZXMgaG93IHdlIHNlcXVlbmNlIHJlc2V0cy4gIEVhY2ggZW50cnkKKyAqIHJlcHJlc2VudHMgdGltZW91dCBmb3IgdGhhdCB0cnkuICBUaGUgZmlyc3QgdHJ5IGNhbiBiZSBzb2Z0IG9yCisgKiBoYXJkcmVzZXQuICBBbGwgb3RoZXJzIGFyZSBoYXJkcmVzZXQgaWYgYXZhaWxhYmxlLiAgSW4gbW9zdCBjYXNlcworICogdGhlIGZpcnN0IHJlc2V0IHcvIDEwc2VjIHRpbWVvdXQgc2hvdWxkIHN1Y2NlZWQuICBGb2xsb3dpbmcgZW50cmllcworICogYXJlIG1vc3RseSBmb3IgZXJyb3IgaGFuZGxpbmcsIGhvdHBsdWcgYW5kIHJldGFyZGVkIGRldmljZXMuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGF0YV9laF9yZXNldF90aW1lb3V0c1tdID0geworCTEwICogSFosCS8qIG1vc3QgZHJpdmVzIHNwaW4gdXAgYnkgMTBzZWMgKi8KKwkxMCAqIEhaLAkvKiA+IDk5JSB3b3JraW5nIGRyaXZlcyBzcGluIHVwIGJlZm9yZSAyMHNlYyAqLworCTM1ICogSFosCS8qIGdpdmUgPiAzMCBzZWNzIG9mIGlkbGVuZXNzIGZvciByZXRhcmRlZCBkZXZpY2VzICovCisJNSAqIEhaLAkJLyogYW5kIHN3ZWV0IG9uZSBsYXN0IGNoYW5jZSAqLworCS8qID4gMSBtaW4gaGFzIGVsYXBzZWQsIGdpdmUgdXAgKi8KK307CisKIHN0YXRpYyB2b2lkIF9fYXRhX3BvcnRfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYXRhX2VoX2ZpbmlzaChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB2b2lkIGF0YV9laF9oYW5kbGVfcG9ydF9zdXNwZW5kKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYXRhX2VoX2hhbmRsZV9wb3J0X3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyBpbnQgYXRhX2VoX3N1c3BlbmQoc3RydWN0IGF0YV9wb3J0ICphcCwKLQkJCSAgc3RydWN0IGF0YV9kZXZpY2UgKipyX2ZhaWxlZF9kZXYpOwotc3RhdGljIHZvaWQgYXRhX2VoX3ByZXBfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotc3RhdGljIGludCBhdGFfZWhfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICoqcl9mYWlsZWRfZGV2KTsKICNlbHNlIC8qIENPTkZJR19QTSAqLwogc3RhdGljIHZvaWQgYXRhX2VoX2hhbmRsZV9wb3J0X3N1c3BlbmQoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsgfQogCiBzdGF0aWMgdm9pZCBhdGFfZWhfaGFuZGxlX3BvcnRfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7IH0KLQotc3RhdGljIGludCBhdGFfZWhfc3VzcGVuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnJfZmFpbGVkX2RldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYXRhX2VoX3ByZXBfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17IH0KLQotc3RhdGljIGludCBhdGFfZWhfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICoqcl9mYWlsZWRfZGV2KQotewotCXJldHVybiAwOwotfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiBzdGF0aWMgdm9pZCBhdGFfZXJpbmdfcmVjb3JkKHN0cnVjdCBhdGFfZXJpbmcgKmVyaW5nLCBpbnQgaXNfaW8sCkBAIC01NDYsNiArNTUxLDkgQEAKIHsKIAlXQVJOX09OKCFhcC0+b3BzLT5lcnJvcl9oYW5kbGVyKTsKIAorCWlmIChhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0lOSVRJQUxJWklORykKKwkJcmV0dXJuOworCiAJYXAtPnBmbGFncyB8PSBBVEFfUEZMQUdfRUhfUEVORElORzsKIAlzY3NpX3NjaGVkdWxlX2VoKGFwLT5zY3NpX2hvc3QpOwogCkBAIC0xMDAxLDcgKzEwMDksNyBAQAogCXNlbnNlX2J1ZlswXSA9IDB4NzA7CiAJc2Vuc2VfYnVmWzJdID0gcWMtPnJlc3VsdF90Zi5mZWF0dXJlID4+IDQ7CiAKLQkvKiBzb21lIGRldmljZXMgdGltZSBvdXQgaWYgZ2FyYmFnZSBsZWZ0IGluIHRmICovIAorCS8qIHNvbWUgZGV2aWNlcyB0aW1lIG91dCBpZiBnYXJiYWdlIGxlZnQgaW4gdGYgKi8KIAlhdGFfdGZfaW5pdChkZXYsICZ0Zik7CiAKIAltZW1zZXQoY2RiLCAwLCBBVEFQSV9DREJfTEVOKTsKQEAgLTE1NTgsMTQgKzE1NjYsMTQgQEAKIH0KIAogc3RhdGljIGludCBhdGFfZG9fcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgYXRhX3Jlc2V0X2ZuX3QgcmVzZXQsCi0JCQl1bnNpZ25lZCBpbnQgKmNsYXNzZXMpCisJCQl1bnNpZ25lZCBpbnQgKmNsYXNzZXMsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJaW50IGksIHJjOwogCiAJZm9yIChpID0gMDsgaSA8IEFUQV9NQVhfREVWSUNFUzsgaSsrKQogCQljbGFzc2VzW2ldID0gQVRBX0RFVl9VTktOT1dOOwogCi0JcmMgPSByZXNldChhcCwgY2xhc3Nlcyk7CisJcmMgPSByZXNldChhcCwgY2xhc3NlcywgZGVhZGxpbmUpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0xNjAzLDggKzE2MTEsOSBAQAogewogCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqZWhjID0gJmFwLT5laF9jb250ZXh0OwogCXVuc2lnbmVkIGludCAqY2xhc3NlcyA9IGVoYy0+Y2xhc3NlczsKLQlpbnQgdHJpZXMgPSBBVEFfRUhfUkVTRVRfVFJJRVM7CiAJaW50IHZlcmJvc2UgPSAhKGVoYy0+aS5mbGFncyAmIEFUQV9FSElfUVVJRVQpOworCWludCB0cnkgPSAwOworCXVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7CiAJdW5zaWduZWQgaW50IGFjdGlvbjsKIAlhdGFfcmVzZXRfZm5fdCByZXNldDsKIAlpbnQgaSwgZGlkX2ZvbGxvd3VwX3Nyc3QsIHJjOwpAQCAtMTYyNCw3ICsxNjMzLDcgQEAKIAkJZWhjLT5pLmFjdGlvbiB8PSBBVEFfRUhfSEFSRFJFU0VUOwogCiAJaWYgKHByZXJlc2V0KSB7Ci0JCXJjID0gcHJlcmVzZXQoYXApOworCQlyYyA9IHByZXJlc2V0KGFwLCBqaWZmaWVzICsgQVRBX0VIX1BSRVJFU0VUX1RJTUVPVVQpOwogCQlpZiAocmMpIHsKIAkJCWlmIChyYyA9PSAtRU5PRU5UKSB7CiAJCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0RFQlVHLApAQCAtMTY2NSw2ICsxNjc0LDggQEAKIAl9CiAKICByZXRyeToKKwlkZWFkbGluZSA9IGppZmZpZXMgKyBhdGFfZWhfcmVzZXRfdGltZW91dHNbdHJ5KytdOworCiAJLyogc2h1dCB1cCBkdXJpbmcgYm9vdCBwcm9iaW5nICovCiAJaWYgKHZlcmJvc2UpCiAJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9JTkZPLCAiJXMgcmVzZXR0aW5nIHBvcnRcbiIsCkBAIC0xNjc2LDcgKzE2ODcsNyBAQAogCWVsc2UKIAkJZWhjLT5pLmZsYWdzIHw9IEFUQV9FSElfRElEX1NPRlRSRVNFVDsKIAotCXJjID0gYXRhX2RvX3Jlc2V0KGFwLCByZXNldCwgY2xhc3Nlcyk7CisJcmMgPSBhdGFfZG9fcmVzZXQoYXAsIHJlc2V0LCBjbGFzc2VzLCBkZWFkbGluZSk7CiAKIAlkaWRfZm9sbG93dXBfc3JzdCA9IDA7CiAJaWYgKHJlc2V0ID09IGhhcmRyZXNldCAmJgpAQCAtMTY5Myw3ICsxNzA0LDcgQEAKIAkJfQogCiAJCWF0YV9laF9hYm91dF90b19kbyhhcCwgTlVMTCwgQVRBX0VIX1JFU0VUX01BU0spOwotCQlyYyA9IGF0YV9kb19yZXNldChhcCwgcmVzZXQsIGNsYXNzZXMpOworCQlyYyA9IGF0YV9kb19yZXNldChhcCwgcmVzZXQsIGNsYXNzZXMsIGRlYWRsaW5lKTsKIAogCQlpZiAocmMgPT0gMCAmJiBjbGFzc2lmeSAmJgogCQkgICAgY2xhc3Nlc1swXSA9PSBBVEFfREVWX1VOS05PV04pIHsKQEAgLTE3MDMsMjIgKzE3MTQsMjEgQEAKIAkJfQogCX0KIAotCWlmIChyYyAmJiAtLXRyaWVzKSB7Ci0JCWNvbnN0IGNoYXIgKnR5cGU7CisJaWYgKHJjICYmIHRyeSA8IEFSUkFZX1NJWkUoYXRhX2VoX3Jlc2V0X3RpbWVvdXRzKSkgeworCQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAKLQkJaWYgKHJlc2V0ID09IHNvZnRyZXNldCkgewotCQkJaWYgKGRpZF9mb2xsb3d1cF9zcnN0KQotCQkJCXR5cGUgPSAiZm9sbG93LXVwIHNvZnQiOwotCQkJZWxzZQotCQkJCXR5cGUgPSAic29mdCI7Ci0JCX0gZWxzZQotCQkJdHlwZSA9ICJoYXJkIjsKKwkJaWYgKHRpbWVfYmVmb3JlKG5vdywgZGVhZGxpbmUpKSB7CisJCQl1bnNpZ25lZCBsb25nIGRlbHRhID0gZGVhZGxpbmUgLSBqaWZmaWVzOwogCi0JCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLAotCQkJCSIlc3Jlc2V0IGZhaWxlZCwgcmV0cnlpbmcgaW4gNSBzZWNzXG4iLCB0eXBlKTsKLQkJc3NsZWVwKDUpOworCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsICJyZXNldCBmYWlsZWQgIgorCQkJCSIoZXJybm89JWQpLCByZXRyeWluZyBpbiAldSBzZWNzXG4iLAorCQkJCXJjLCAoamlmZmllc190b19tc2VjcyhkZWx0YSkgKyA5OTkpIC8gMTAwMCk7CiAKLQkJaWYgKHJlc2V0ID09IGhhcmRyZXNldCkKKwkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKGRlbHRhKTsKKwkJfQorCisJCWlmIChyZXNldCA9PSBoYXJkcmVzZXQgJiYKKwkJICAgIHRyeSA9PSBBUlJBWV9TSVpFKGF0YV9laF9yZXNldF90aW1lb3V0cykgLSAxKQogCQkJc2F0YV9kb3duX3NwZF9saW1pdChhcCk7CiAJCWlmIChoYXJkcmVzZXQpCiAJCQlyZXNldCA9IGhhcmRyZXNldDsKQEAgLTE3NjcsNyArMTc3Nyw3IEBACiAJCWlmIChlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX0RJRF9SRVNFVCkKIAkJCXJlYWRpZF9mbGFncyB8PSBBVEFfUkVBRElEX1BPU1RSRVNFVDsKIAotCQlpZiAoYWN0aW9uICYgQVRBX0VIX1JFVkFMSURBVEUgJiYgYXRhX2Rldl9yZWFkeShkZXYpKSB7CisJCWlmICgoYWN0aW9uICYgQVRBX0VIX1JFVkFMSURBVEUpICYmIGF0YV9kZXZfZW5hYmxlZChkZXYpKSB7CiAJCQlpZiAoYXRhX3BvcnRfb2ZmbGluZShhcCkpIHsKIAkJCQlyYyA9IC1FSU87CiAJCQkJZ290byBlcnI7CkBAIC0xODQ4LDE2NiArMTg1OCw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCi0vKioKLSAqCWF0YV9laF9zdXNwZW5kIC0gaGFuZGxlIHN1c3BlbmQgRUggYWN0aW9uCi0gKglAYXA6IHRhcmdldCBob3N0IHBvcnQKLSAqCUByX2ZhaWxlZF9kZXY6IHJlc3VsdCBwYXJhbWV0ZXIgdG8gaW5kaWNhdGUgZmFpbGluZyBkZXZpY2UKLSAqCi0gKglIYW5kbGUgc3VzcGVuZCBFSCBhY3Rpb24uICBEaXNrIGRldmljZXMgYXJlIHNwaW5uZWQgZG93biBhbmQKLSAqCW90aGVyIHR5cGVzIG9mIGRldmljZXMgYXJlIGp1c3QgbWFya2VkIHN1c3BlbmRlZC4gIE9uY2UKLSAqCXN1c3BlbmRlZCwgbm8gRUggYWN0aW9uIHRvIHRoZSBkZXZpY2UgaXMgYWxsb3dlZCB1bnRpbCBpdCBpcwotICoJcmVzdW1lZC4KLSAqCi0gKglMT0NLSU5HOgotICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApLgotICoKLSAqCVJFVFVSTlM6Ci0gKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UKLSAqLwotc3RhdGljIGludCBhdGFfZWhfc3VzcGVuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnJfZmFpbGVkX2RldikKLXsKLQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwotCWludCBpLCByYyA9IDA7Ci0KLQlEUFJJTlRLKCJFTlRFUlxuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRBX01BWF9ERVZJQ0VTOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJdW5zaWduZWQgaW50IGFjdGlvbiwgZXJyX21hc2s7Ci0KLQkJZGV2ID0gJmFwLT5kZXZpY2VbaV07Ci0JCWFjdGlvbiA9IGF0YV9laF9kZXZfYWN0aW9uKGRldik7Ci0KLQkJaWYgKCFhdGFfZGV2X2VuYWJsZWQoZGV2KSB8fCAhKGFjdGlvbiAmIEFUQV9FSF9TVVNQRU5EKSkKLQkJCWNvbnRpbnVlOwotCi0JCVdBUk5fT04oZGV2LT5mbGFncyAmIEFUQV9ERkxBR19TVVNQRU5ERUQpOwotCi0JCWF0YV9laF9hYm91dF90b19kbyhhcCwgZGV2LCBBVEFfRUhfU1VTUEVORCk7Ci0KLQkJaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEgJiYgIShhY3Rpb24gJiBBVEFfRUhfUE1fRlJFRVpFKSkgewotCQkJLyogZmx1c2ggY2FjaGUgKi8KLQkJCXJjID0gYXRhX2ZsdXNoX2NhY2hlKGRldik7Ci0JCQlpZiAocmMpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIHNwaW4gZG93biAqLwotCQkJZXJyX21hc2sgPSBhdGFfZG9fc2ltcGxlX2NtZChkZXYsIEFUQV9DTURfU1RBTkRCWU5PVzEpOwotCQkJaWYgKGVycl9tYXNrKSB7Ci0JCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0VSUiwgImZhaWxlZCB0byAiCi0JCQkJCSAgICAgICAic3BpbiBkb3duIChlcnJfbWFzaz0weCV4KVxuIiwKLQkJCQkJICAgICAgIGVycl9tYXNrKTsKLQkJCQlyYyA9IC1FSU87Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwotCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19TVVNQRU5ERUQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoYXAtPmxvY2ssIGZsYWdzKTsKLQotCQlhdGFfZWhfZG9uZShhcCwgZGV2LCBBVEFfRUhfU1VTUEVORCk7Ci0JfQotCi0JaWYgKHJjKQotCQkqcl9mYWlsZWRfZGV2ID0gZGV2OwotCi0JRFBSSU5USygiRVhJVFxuIik7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqCWF0YV9laF9wcmVwX3Jlc3VtZSAtIHByZXAgZm9yIHJlc3VtZSBFSCBhY3Rpb24KLSAqCUBhcDogdGFyZ2V0IGhvc3QgcG9ydAotICoKLSAqCUNsZWFyIFNVU1BFTkRFRCBpbiBwcmVwYXJhdGlvbiBmb3Igc2NoZWR1bGVkIHJlc3VtZSBhY3Rpb25zLgotICoJVGhpcyBhbGxvd3Mgb3RoZXIgcGFydHMgb2YgRUggdG8gYWNjZXNzIHRoZSBkZXZpY2VzIGJlaW5nCi0gKglyZXN1bWVkLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkuCi0gKi8KLXN0YXRpYyB2b2lkIGF0YV9laF9wcmVwX3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQotCURQUklOVEsoIkVOVEVSXG4iKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykgewotCQl1bnNpZ25lZCBpbnQgYWN0aW9uOwotCi0JCWRldiA9ICZhcC0+ZGV2aWNlW2ldOwotCQlhY3Rpb24gPSBhdGFfZWhfZGV2X2FjdGlvbihkZXYpOwotCi0JCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikgfHwgIShhY3Rpb24gJiBBVEFfRUhfUkVTVU1FKSkKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKGFwLT5sb2NrLCBmbGFncyk7Ci0JCWRldi0+ZmxhZ3MgJj0gfkFUQV9ERkxBR19TVVNQRU5ERUQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoYXAtPmxvY2ssIGZsYWdzKTsKLQl9Ci0KLQlEUFJJTlRLKCJFWElUXG4iKTsKLX0KLQotLyoqCi0gKglhdGFfZWhfcmVzdW1lIC0gaGFuZGxlIHJlc3VtZSBFSCBhY3Rpb24KLSAqCUBhcDogdGFyZ2V0IGhvc3QgcG9ydAotICoJQHJfZmFpbGVkX2RldjogcmVzdWx0IHBhcmFtZXRlciB0byBpbmRpY2F0ZSBmYWlsaW5nIGRldmljZQotICoKLSAqCUhhbmRsZSByZXN1bWUgRUggYWN0aW9uLiAgVGFyZ2V0IGRldmljZXMgYXJlIGFscmVhZHkgcmVzZXQgYW5kCi0gKglyZXZhbGlkYXRlZC4gIFNwaW5uaW5nIHVwIGlzIHRoZSBvbmx5IG9wZXJhdGlvbiBsZWZ0LgotICoKLSAqCUxPQ0tJTkc6Ci0gKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkuCi0gKgotICoJUkVUVVJOUzoKLSAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZQotICovCi1zdGF0aWMgaW50IGF0YV9laF9yZXN1bWUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKipyX2ZhaWxlZF9kZXYpCi17Ci0Jc3RydWN0IGF0YV9kZXZpY2UgKmRldjsKLQlpbnQgaSwgcmMgPSAwOwotCi0JRFBSSU5USygiRU5URVJcbiIpOwotCi0JZm9yIChpID0gMDsgaSA8IEFUQV9NQVhfREVWSUNFUzsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCBhY3Rpb24sIGVycl9tYXNrOwotCi0JCWRldiA9ICZhcC0+ZGV2aWNlW2ldOwotCQlhY3Rpb24gPSBhdGFfZWhfZGV2X2FjdGlvbihkZXYpOwotCi0JCWlmICghYXRhX2Rldl9lbmFibGVkKGRldikgfHwgIShhY3Rpb24gJiBBVEFfRUhfUkVTVU1FKSkKLQkJCWNvbnRpbnVlOwotCi0JCWF0YV9laF9hYm91dF90b19kbyhhcCwgZGV2LCBBVEFfRUhfUkVTVU1FKTsKLQotCQlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQSAmJiAhKGFjdGlvbiAmIEFUQV9FSF9QTV9GUkVFWkUpKSB7Ci0JCQllcnJfbWFzayA9IGF0YV9kb19zaW1wbGVfY21kKGRldiwKLQkJCQkJCSAgICAgQVRBX0NNRF9JRExFSU1NRURJQVRFKTsKLQkJCWlmIChlcnJfbWFzaykgewotCQkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9FUlIsICJmYWlsZWQgdG8gIgotCQkJCQkgICAgICAgInNwaW4gdXAgKGVycl9tYXNrPTB4JXgpXG4iLAotCQkJCQkgICAgICAgZXJyX21hc2spOwotCQkJCXJjID0gLUVJTzsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWF0YV9laF9kb25lKGFwLCBkZXYsIEFUQV9FSF9SRVNVTUUpOwotCX0KLQotCWlmIChyYykKLQkJKnJfZmFpbGVkX2RldiA9IGRldjsKLQotCURQUklOVEsoIkVYSVRcbiIpOwotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCiBzdGF0aWMgaW50IGF0YV9wb3J0X25yX2VuYWJsZWQoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlpbnQgaSwgY250ID0gMDsKQEAgLTIwMzMsMTcgKzE4ODMsNiBAQAogCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqZWhjID0gJmFwLT5laF9jb250ZXh0OwogCWludCBpOwogCi0JLyogc2tpcCBpZiBhbGwgcG9zc2libGUgZGV2aWNlcyBhcmUgc3VzcGVuZGVkICovCi0JZm9yIChpID0gMDsgaSA8IGF0YV9wb3J0X21heF9kZXZpY2VzKGFwKTsgaSsrKSB7Ci0JCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSAmYXAtPmRldmljZVtpXTsKLQotCQlpZiAoIShkZXYtPmZsYWdzICYgQVRBX0RGTEFHX1NVU1BFTkRFRCkpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaSA9PSBhdGFfcG9ydF9tYXhfZGV2aWNlcyhhcCkpCi0JCXJldHVybiAxOwotCiAJLyogdGhhdyBmcm96ZW4gcG9ydCwgcmVzdW1lIGxpbmsgYW5kIHJlY292ZXIgZmFpbGVkIGRldmljZXMgKi8KIAlpZiAoKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOKSB8fAogCSAgICAoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9SRVNVTUVfTElOSykgfHwgYXRhX3BvcnRfbnJfZW5hYmxlZChhcCkpCkBAIC0yMTIzLDkgKzE5NjIsNiBAQAogCWlmIChhcC0+cGZsYWdzICYgQVRBX1BGTEFHX1VOTE9BRElORykKIAkJZ290byBvdXQ7CiAKLQkvKiBwcmVwIGZvciByZXN1bWUgKi8KLQlhdGFfZWhfcHJlcF9yZXN1bWUoYXApOwotCiAJLyogc2tpcCBFSCBpZiBwb3NzaWJsZS4gKi8KIAlpZiAoYXRhX2VoX3NraXBfcmVjb3ZlcnkoYXApKQogCQllaGMtPmkuYWN0aW9uID0gMDsKQEAgLTIxNTMsMTEgKzE5ODksNiBAQAogCWlmIChyYykKIAkJZ290byBkZXZfZmFpbDsKIAotCS8qIHJlc3VtZSBkZXZpY2VzICovCi0JcmMgPSBhdGFfZWhfcmVzdW1lKGFwLCAmZGV2KTsKLQlpZiAocmMpCi0JCWdvdG8gZGV2X2ZhaWw7Ci0KIAkvKiBjb25maWd1cmUgdHJhbnNmZXIgbW9kZSBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9TRVRNT0RFKSB7CiAJCXJjID0gYXRhX3NldF9tb2RlKGFwLCAmZGV2KTsKQEAgLTIxNjYsMjUgKzE5OTcsMTYgQEAKIAkJZWhjLT5pLmZsYWdzICY9IH5BVEFfRUhJX1NFVE1PREU7CiAJfQogCi0JLyogc3VzcGVuZCBkZXZpY2VzICovCi0JcmMgPSBhdGFfZWhfc3VzcGVuZChhcCwgJmRldik7Ci0JaWYgKHJjKQotCQlnb3RvIGRldl9mYWlsOwotCiAJZ290byBvdXQ7CiAKICBkZXZfZmFpbDoKIAllaGMtPnRyaWVzW2Rldi0+ZGV2bm9dLS07CiAKIAlzd2l0Y2ggKHJjKSB7Ci0JY2FzZSAtRUlOVkFMOgotCQkvKiBlZWVrLCBzb21ldGhpbmcgd2VudCB2ZXJ5IHdyb25nLCBnaXZlIHVwICovCi0JCWVoYy0+dHJpZXNbZGV2LT5kZXZub10gPSAwOwotCQlicmVhazsKLQogCWNhc2UgLUVOT0RFVjoKIAkJLyogZGV2aWNlIG1pc3Npbmcgb3Igd3JvbmcgSURFTlRJRlkgZGF0YSwgc2NoZWR1bGUgcHJvYmluZyAqLwogCQllaGMtPmkucHJvYmVfbWFzayB8PSAoMSA8PCBkZXYtPmRldm5vKTsKKwljYXNlIC1FSU5WQUw6CiAJCS8qIGdpdmUgaXQganVzdCBvbmUgbW9yZSBjaGFuY2UgKi8KIAkJZWhjLT50cmllc1tkZXYtPmRldm5vXSA9IG1pbihlaGMtPnRyaWVzW2Rldi0+ZGV2bm9dLCAxKTsKIAljYXNlIC1FSU86CkBAIC0yMzY2LDIyICsyMTg4LDEzIEBACiAgKgogICoJUmVzdW1lIEBhcC4KICAqCi0gKglUaGlzIGZ1bmN0aW9uIGFsc28gd2FpdHMgdXB0byBvbmUgc2Vjb25kIHVudGlsIGFsbCBkZXZpY2VzCi0gKgloYW5naW5nIG9mZiB0aGlzIHBvcnQgcmVxdWVzdHMgcmVzdW1lIEVIIGFjdGlvbi4gIFRoaXMgaXMgdG8KLSAqCXByZXZlbnQgaW52b2tpbmcgRUggYW5kIHRodXMgcmVzZXQgbXVsdGlwbGUgdGltZXMgb24gcmVzdW1lLgotICoKLSAqCU9uIERQTSByZXN1bWUsIHdoZXJlIHNvbWUgb2YgZGV2aWNlcyBtaWdodCBub3QgYmUgcmVzdW1lZAotICoJdG9nZXRoZXIsIHRoaXMgbWF5IGRlbGF5IHBvcnQgcmVzdW1lIHVwdG8gb25lIHNlY29uZCwgYnV0IHN1Y2gKLSAqCURQTSByZXN1bWVzIGFyZSByYXJlIGFuZCAxIHNlYyBkZWxheSBpc24ndCB0b28gYmFkLgotICoKICAqCUxPQ0tJTkc6CiAgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkuCiAgKi8KIHN0YXRpYyB2b2lkIGF0YV9laF9oYW5kbGVfcG9ydF9yZXN1bWUoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSwgcmMgPSAwOworCWludCByYyA9IDA7CiAKIAkvKiBhcmUgd2UgcmVzdW1pbmc/ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKQEAgLTIzOTIsMzEgKzIyMDUsMTIgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwogCi0JLyogc3B1cmlvdXM/ICovCi0JaWYgKCEoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19TVVNQRU5ERUQpKQotCQlnb3RvIGRvbmU7CisJV0FSTl9PTighKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfU1VTUEVOREVEKSk7CiAKIAlpZiAoYXAtPm9wcy0+cG9ydF9yZXN1bWUpCiAJCXJjID0gYXAtPm9wcy0+cG9ydF9yZXN1bWUoYXApOwogCi0JLyogZ2l2ZSBkZXZpY2VzIHRpbWUgdG8gcmVxdWVzdCBFSCAqLwotCXRpbWVvdXQgPSBqaWZmaWVzICsgSFo7IC8qIDFzIG1heCAqLwotCXdoaWxlICgxKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykgewotCQkJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9ICZhcC0+ZGV2aWNlW2ldOwotCQkJdW5zaWduZWQgaW50IGFjdGlvbiA9IGF0YV9laF9kZXZfYWN0aW9uKGRldik7Ci0KLQkJCWlmICgoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19TVVNQRU5ERUQpICYmCi0JCQkgICAgIShhY3Rpb24gJiBBVEFfRUhfUkVTVU1FKSkKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmIChpID09IEFUQV9NQVhfREVWSUNFUyB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQotCQkJYnJlYWs7Ci0JCW1zbGVlcCgxMCk7Ci0JfQotCi0gZG9uZToKKwkvKiByZXBvcnQgcmVzdWx0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKIAlhcC0+cGZsYWdzICY9IH4oQVRBX1BGTEFHX1BNX1BFTkRJTkcgfCBBVEFfUEZMQUdfU1VTUEVOREVEKTsKIAlpZiAoYXAtPnBtX3Jlc3VsdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKaW5kZXggOWFmYmEyYi4uYjM5MDBjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC01MTAsMTMzICs1MTAsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19QTQotLyoqCi0gKglhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZCAtIHN1c3BlbmQgQVRBIGRldmljZSBhc3NvY2lhdGVkIHdpdGggc2RldgotICoJQHNkZXY6IHRoZSBTQ1NJIGRldmljZSB0byBzdXNwZW5kCi0gKglAbWVzZzogdGFyZ2V0IHBvd2VyIG1hbmFnZW1lbnQgbWVzc2FnZQotICoKLSAqCVJlcXVlc3Qgc3VzcGVuZCBFSCBhY3Rpb24gb24gdGhlIEFUQSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoCi0gKglAc2RldiBhbmQgd2FpdCBmb3IgdGhlIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4KLSAqCi0gKglMT0NLSU5HOgotICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApLgotICoKLSAqCVJFVFVSTlM6Ci0gKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuCi0gKi8KLWludCBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhdGFfc2hvc3RfdG9fcG9ydChzZGV2LT5ob3N0KTsKLQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gYXRhX3Njc2lfZmluZF9kZXYoYXAsIHNkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGFjdGlvbjsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkZXYpCi0JCWdvdG8gb3V0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKLQotCS8qIHdhaXQgZm9yIHRoZSBwcmV2aW91cyByZXN1bWUgdG8gY29tcGxldGUgKi8KLQl3aGlsZSAoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19TVVNQRU5ERUQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwotCQlhdGFfcG9ydF93YWl0X2VoKGFwKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKLQl9Ci0KLQkvKiBpZiBAc2RldiBpcyBhbHJlYWR5IGRldGFjaGVkLCBub3RoaW5nIHRvIGRvICovCi0JaWYgKHNkZXYtPnNkZXZfc3RhdGUgPT0gU0RFVl9PRkZMSU5FIHx8Ci0JICAgIHNkZXYtPnNkZXZfc3RhdGUgPT0gU0RFVl9DQU5DRUwgfHwgc2Rldi0+c2Rldl9zdGF0ZSA9PSBTREVWX0RFTCkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JLyogcmVxdWVzdCBzdXNwZW5kICovCi0JYWN0aW9uID0gQVRBX0VIX1NVU1BFTkQ7Ci0JaWYgKG1lc2cuZXZlbnQgIT0gUE1fRVZFTlRfU1VTUEVORCkKLQkJYWN0aW9uIHw9IEFUQV9FSF9QTV9GUkVFWkU7Ci0JYXAtPmVoX2luZm8uZGV2X2FjdGlvbltkZXYtPmRldm5vXSB8PSBhY3Rpb247Ci0JYXAtPmVoX2luZm8uZmxhZ3MgfD0gQVRBX0VISV9RVUlFVDsKLQlhdGFfcG9ydF9zY2hlZHVsZV9laChhcCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiB3YWl0IGZvciBFSCB0byBkbyB0aGUgam9iICovCi0JYXRhX3BvcnRfd2FpdF9laChhcCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwotCi0JLyogSWYgQHNkZXYgaXMgc3RpbGwgYXR0YWNoZWQgYnV0IHRoZSBhc3NvY2lhdGVkIEFUQSBkZXZpY2UKLQkgKiBpc24ndCBzdXNwZW5kZWQsIHRoZSBvcGVyYXRpb24gZmFpbGVkLgotCSAqLwotCWlmIChzZGV2LT5zZGV2X3N0YXRlICE9IFNERVZfT0ZGTElORSAmJgotCSAgICBzZGV2LT5zZGV2X3N0YXRlICE9IFNERVZfQ0FOQ0VMICYmIHNkZXYtPnNkZXZfc3RhdGUgIT0gU0RFVl9ERUwgJiYKLQkgICAgIShkZXYtPmZsYWdzICYgQVRBX0RGTEFHX1NVU1BFTkRFRCkpCi0JCXJjID0gLUVJTzsKLQotIG91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwotIG91dDoKLQlpZiAocmMgPT0gMCkKLQkJc2Rldi0+c2Rldl9nZW5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBtZXNnOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKglhdGFfc2NzaV9kZXZpY2VfcmVzdW1lIC0gcmVzdW1lIEFUQSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHNkZXYKLSAqCUBzZGV2OiB0aGUgU0NTSSBkZXZpY2UgdG8gcmVzdW1lCi0gKgotICoJUmVxdWVzdCByZXN1bWUgRUggYWN0aW9uIG9uIHRoZSBBVEEgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aAotICoJQHNkZXYgYW5kIHJldHVybiBpbW1lZGlhdGVseS4gIFRoaXMgZW5hYmxlcyBwYXJhbGxlbAotICoJd2FrZXVwL3NwaW51cCBvZiBkZXZpY2VzLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkuCi0gKgotICoJUkVUVVJOUzoKLSAqCTAuCi0gKi8KLWludCBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gYXRhX3Nob3N0X3RvX3BvcnQoc2Rldi0+aG9zdCk7Ci0Jc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9IGF0YV9zY3NpX2ZpbmRfZGV2KGFwLCBzZGV2KTsKLQlzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaSA9ICZhcC0+ZWhfaW5mbzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBhY3Rpb247Ci0KLQlpZiAoIWRldikKLQkJZ290byBvdXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwotCi0JLyogaWYgQHNkZXYgaXMgYWxyZWFkeSBkZXRhY2hlZCwgbm90aGluZyB0byBkbyAqLwotCWlmIChzZGV2LT5zZGV2X3N0YXRlID09IFNERVZfT0ZGTElORSB8fAotCSAgICBzZGV2LT5zZGV2X3N0YXRlID09IFNERVZfQ0FOQ0VMIHx8IHNkZXYtPnNkZXZfc3RhdGUgPT0gU0RFVl9ERUwpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCS8qIHJlcXVlc3QgcmVzdW1lICovCi0JYWN0aW9uID0gQVRBX0VIX1JFU1VNRTsKLQlpZiAoc2Rldi0+c2Rldl9nZW5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkKLQkJX19hdGFfZWhpX2hvdHBsdWdnZWQoZWhpKTsKLQllbHNlCi0JCWFjdGlvbiB8PSBBVEFfRUhfUE1fRlJFRVpFIHwgQVRBX0VIX1NPRlRSRVNFVDsKLQllaGktPmRldl9hY3Rpb25bZGV2LT5kZXZub10gfD0gYWN0aW9uOwotCi0JLyogV2UgZG9uJ3Qgd2FudCBhdXRvcHN5IGFuZCB2ZXJib3NlIEVIIG1lc3NhZ2VzLiAgRGlzYWJsZQotCSAqIHRob3NlIGlmIHdlJ3JlIHRoZSBvbmx5IGRldmljZSBvbiB0aGlzIGxpbmsuCi0JICovCi0JaWYgKGF0YV9wb3J0X21heF9kZXZpY2VzKGFwKSA9PSAxKQotCQllaGktPmZsYWdzIHw9IEFUQV9FSElfTk9fQVVUT1BTWSB8IEFUQV9FSElfUVVJRVQ7Ci0KLQlhdGFfcG9ydF9zY2hlZHVsZV9laChhcCk7Ci0KLSBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoYXAtPmxvY2ssIGZsYWdzKTsKLSBvdXQ6Ci0Jc2Rldi0+c2Rldl9nZW5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCiAvKioKICAqCWF0YV90b19zZW5zZV9lcnJvciAtIGNvbnZlcnQgQVRBIGVycm9yIHRvIFNDU0kgZXJyb3IKICAqCUBpZDogQVRBIGRldmljZSBudW1iZXIKQEAgLTkyOSw2ICs4MDIsOCBAQAogCiAJYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHNkZXYtPnJlcXVlc3RfcXVldWUsIExJQkFUQV9NQVhfUFJEKTsKIAorCXNkZXYtPm1hbmFnZV9zdGFydF9zdG9wID0gMTsKKwogCWlmIChkZXYpCiAJCWF0YV9zY3NpX2Rldl9jb25maWcoc2RldiwgZGV2KTsKIApAQCAtMTAxOCw2ICs4OTMsMjMgQEAKIAlyZXR1cm4gcXVldWVfZGVwdGg7CiB9CiAKKy8qIFhYWDogZm9yIHNwaW5kb3duIHdhcm5pbmcgKi8KK3N0YXRpYyB2b2lkIGF0YV9kZWxheWVkX2RvbmVfdGltZXJmbih1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kID0gKHZvaWQgKilhcmc7CisKKwlzY21kLT5zY3NpX2RvbmUoc2NtZCk7Cit9CisKKy8qIFhYWDogZm9yIHNwaW5kb3duIHdhcm5pbmcgKi8KK3N0YXRpYyB2b2lkIGF0YV9kZWxheWVkX2RvbmUoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisKKwlzZXR1cF90aW1lcigmdGltZXIsIGF0YV9kZWxheWVkX2RvbmVfdGltZXJmbiwgKHVuc2lnbmVkIGxvbmcpc2NtZCk7CisJbW9kX3RpbWVyKCZ0aW1lciwgamlmZmllcyArIDUgKiBIWik7Cit9CisKIC8qKgogICoJYXRhX3Njc2lfc3RhcnRfc3RvcF94bGF0IC0gVHJhbnNsYXRlIFNDU0kgU1RBUlQgU1RPUCBVTklUIGNvbW1hbmQKICAqCUBxYzogU3RvcmFnZSBmb3IgdHJhbnNsYXRlZCBBVEEgdGFza2ZpbGUKQEAgLTEwNjksOSArOTYxLDM3IEBACiAJCX0KIAogCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfVkVSSUZZOwkvKiBSRUFEIFZFUklGWSAqLwotCX0gZWxzZQorCX0gZWxzZSB7CisJCS8qIFhYWDogVGhpcyBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgd2lsbCBiZQorCQkgKiByZW1vdmVkLiAgUmVhZCBEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKwkJICogZm9yIG1vcmUgaW5mby4KKwkJICovCisJCWlmICgocWMtPmRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfU1BVTkRPV04pICYmCisJCSAgICAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9IQUxUIHx8CisJCSAgICAgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpKSB7CisJCQlzdGF0aWMgdW5zaWduZWQgbG9uZyB3YXJuZWQgPSAwOworCisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJndhcm5lZCkpIHsKKwkJCQlhdGFfZGV2X3ByaW50ayhxYy0+ZGV2LCBLRVJOX1dBUk5JTkcsCisJCQkJCSJESVNLIE1JR0hUIE5PVCBCRSBTUFVOIERPV04gUFJPUEVSTFkuICIKKwkJCQkJIlVQREFURSBTSFVURE9XTiBVVElMSVRZXG4iKTsKKwkJCQlhdGFfZGV2X3ByaW50ayhxYy0+ZGV2LCBLRVJOX1dBUk5JTkcsCisJCQkJCSJGb3IgbW9yZSBpbmZvLCB2aXNpdCAiCisJCQkJCSJodHRwOi8vbGludXgtYXRhLm9yZy9zaHV0ZG93bi5odG1sXG4iKTsKKworCQkJCS8qIC0+c2NzaV9kb25lIGlzIG5vdCB1c2VkLCB1c2UgaXQgZm9yCisJCQkJICogZGVsYXllZCBjb21wbGV0aW9uLgorCQkJCSAqLworCQkJCXNjbWQtPnNjc2lfZG9uZSA9IHFjLT5zY3NpZG9uZTsKKwkJCQlxYy0+c2NzaWRvbmUgPSBhdGFfZGVsYXllZF9kb25lOworCQkJfQorCQkJc2NtZC0+cmVzdWx0ID0gU0FNX1NUQVRfR09PRDsKKwkJCXJldHVybiAxOworCQl9CisKIAkJLyogSXNzdWUgQVRBIFNUQU5EQlkgSU1NRURJQVRFIGNvbW1hbmQgKi8KIAkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX1NUQU5EQllOT1cxOworCX0KIAogCS8qCiAJICogU3RhbmRieSBhbmQgSWRsZSBjb25kaXRpb24gdGltZXJzIGNvdWxkIGJlIGltcGxlbWVudGVkIGJ1dCB0aGF0CkBAIC0xMTMwLDE0ICsxMDUwLDE1IEBACiBzdGF0aWMgdm9pZCBzY3NpXzZfbGJhX2xlbihjb25zdCB1OCAqY2RiLCB1NjQgKnBsYmEsIHUzMiAqcGxlbikKIHsKIAl1NjQgbGJhID0gMDsKLQl1MzIgbGVuID0gMDsKKwl1MzIgbGVuOwogCiAJVlBSSU5USygic2l4LWJ5dGUgY29tbWFuZFxuIik7CiAKKwlsYmEgfD0gKCh1NjQpKGNkYlsxXSAmIDB4MWYpKSA8PCAxNjsKIAlsYmEgfD0gKCh1NjQpY2RiWzJdKSA8PCA4OwogCWxiYSB8PSAoKHU2NCljZGJbM10pOwogCi0JbGVuIHw9ICgodTMyKWNkYls0XSk7CisJbGVuID0gY2RiWzRdOwogCiAJKnBsYmEgPSBsYmE7CiAJKnBsZW4gPSBsZW47CkBAIC0xNDc0LDYgKzEzOTUsMTQgQEAKIAkJfQogCX0KIAorCS8qIFhYWDogdHJhY2sgc3BpbmRvd24gc3RhdGUgZm9yIHNwaW5kb3duIHNraXBwaW5nIGFuZCB3YXJuaW5nICovCisJaWYgKHVubGlrZWx5KHFjLT50Zi5jb21tYW5kID09IEFUQV9DTURfU1RBTkRCWSB8fAorCQkgICAgIHFjLT50Zi5jb21tYW5kID09IEFUQV9DTURfU1RBTkRCWU5PVzEpKQorCQlxYy0+ZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfU1BVTkRPV047CisJZWxzZSBpZiAobGlrZWx5KHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fSEFMVCAmJgorCQkJc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9QT1dFUl9PRkYpKQorCQlxYy0+ZGV2LT5mbGFncyAmPSB+QVRBX0RGTEFHX1NQVU5ET1dOOworCiAJaWYgKG5lZWRfc2Vuc2UgJiYgIWFwLT5vcHMtPmVycm9yX2hhbmRsZXIpCiAJCWF0YV9kdW1wX3N0YXR1cyhhcC0+cHJpbnRfaWQsICZxYy0+cmVzdWx0X3RmKTsKIApAQCAtMTU4NywxNCArMTUxNiwxNCBAQAogCiBlYXJseV9maW5pc2g6CiAgICAgICAgIGF0YV9xY19mcmVlKHFjKTsKLQlkb25lKGNtZCk7CisJcWMtPnNjc2lkb25lKGNtZCk7CiAJRFBSSU5USygiRVhJVCAtIGVhcmx5IGZpbmlzaCAoZ29vZCBvciBlcnJvcilcbiIpOwogCXJldHVybiAwOwogCiBlcnJfZGlkOgogCWF0YV9xY19mcmVlKHFjKTsKIAljbWQtPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpOwotCWRvbmUoY21kKTsKKwlxYy0+c2NzaWRvbmUoY21kKTsKIGVycl9tZW06CiAJRFBSSU5USygiRVhJVCAtIGludGVybmFsXG4iKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwppbmRleCBkMjExZGI2Li5lMzVkMTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCkBAIC01NDQsNyArNTQ0LDcgQEAKICAqCVJFVFVSTlM6CiAgKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbnQgYXRhX3BjaV9pbml0X2JtZG1hKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCkKK2ludCBhdGFfcGNpX2luaXRfYm1kbWEoc3RydWN0IGF0YV9ob3N0ICpob3N0KQogewogCXN0cnVjdCBkZXZpY2UgKmdkZXYgPSBob3N0LT5kZXY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGdkZXYpOwpAQCAtNTY2LDcgKzU2Niw3IEBACiAJfQogCWhvc3QtPmlvbWFwID0gcGNpbV9pb21hcF90YWJsZShwZGV2KTsKIAotCWZvciAoaSA9IDA7IGkgPCBob3N0LT5uX3BvcnRzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1tpXTsKIAkJdm9pZCBfX2lvbWVtICpibWRtYSA9IGhvc3QtPmlvbWFwWzRdICsgOCAqIGk7CiAKQEAgLTU4NSw1NCArNTg1LDUyIEBACiAvKioKICAqCWF0YV9wY2lfaW5pdF9uYXRpdmVfaG9zdCAtIGFjcXVpcmUgbmF0aXZlIEFUQSByZXNvdXJjZXMgYW5kIGluaXQgaG9zdAogICoJQGhvc3Q6IHRhcmdldCBBVEEgaG9zdAotICoJQHBvcnRfbWFzazogcG9ydHMgdG8gY29uc2lkZXIKICAqCi0gKglBY3F1aXJlIG5hdGl2ZSBQQ0kgQVRBIHJlc291cmNlcyBmb3IgQGhvc3QgYW5kIGluaXRpYWxpemUKLSAqCUBob3N0IGFjY29yZG9pbmdseS4KKyAqCUFjcXVpcmUgbmF0aXZlIFBDSSBBVEEgcmVzb3VyY2VzIGZvciBAaG9zdCBhbmQgaW5pdGlhbGl6ZSB0aGUKKyAqCWZpcnN0IHR3byBwb3J0cyBvZiBAaG9zdCBhY2NvcmRpbmdseS4gIFBvcnRzIG1hcmtlZCBkdW1teSBhcmUKKyAqCXNraXBwZWQgYW5kIGFsbG9jYXRpb24gZmFpbHVyZSBtYWtlcyB0aGUgcG9ydCBkdW1teS4KICAqCiAgKglMT0NLSU5HOgogICoJSW5oZXJpdGVkIGZyb20gY2FsbGluZyBsYXllciAobWF5IHNsZWVwKS4KICAqCiAgKglSRVRVUk5TOgotICoJMCBvbiBzdWNjZXNzLCAtZXJybm8gb3RoZXJ3aXNlLgorICoJMCBpZiBhdCBsZWFzdCBvbmUgcG9ydCBpcyBpbml0aWFsaXplZCwgLUVOT0RFViBpZiBubyBwb3J0IGlzCisgKglhdmFpbGFibGUuCiAgKi8KLWludCBhdGFfcGNpX2luaXRfbmF0aXZlX2hvc3Qoc3RydWN0IGF0YV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgcG9ydF9tYXNrKQoraW50IGF0YV9wY2lfaW5pdF9uYXRpdmVfaG9zdChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpCiB7CiAJc3RydWN0IGRldmljZSAqZ2RldiA9IGhvc3QtPmRldjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZ2Rldik7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCWludCBpLCByYzsKIAotCS8qIERpc2NhcmQgZGlzYWJsZWQgcG9ydHMuICBTb21lIGNvbnRyb2xsZXJzIHNob3cgdGhlaXIgdW51c2VkCi0JICogY2hhbm5lbHMgdGhpcyB3YXkuICBEaXNhYmxlZCBwb3J0cyBhcmUgbWFkZSBkdW1teS4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCWlmICgocG9ydF9tYXNrICYgKDEgPDwgaSkpICYmICFhdGFfcmVzb3VyY2VzX3ByZXNlbnQocGRldiwgaSkpIHsKLQkJCWhvc3QtPnBvcnRzW2ldLT5vcHMgPSAmYXRhX2R1bW15X3BvcnRfb3BzOwotCQkJcG9ydF9tYXNrICY9IH4oMSA8PCBpKTsKLQkJfQotCX0KLQotCWlmICghcG9ydF9tYXNrKSB7Ci0JCWRldl9wcmludGsoS0VSTl9FUlIsIGdkZXYsICJubyBhdmFpbGFibGUgcG9ydFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCS8qIHJlcXVlc3QsIGlvbWFwIEJBUnMgYW5kIGluaXQgcG9ydCBhZGRyZXNzZXMgYWNjb3JkaW5nbHkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1tpXTsKIAkJaW50IGJhc2UgPSBpICogMjsKIAkJdm9pZCBfX2lvbWVtICogY29uc3QgKmlvbWFwOwogCi0JCWlmICghKHBvcnRfbWFzayAmICgxIDw8IGkpKSkKKwkJaWYgKGF0YV9wb3J0X2lzX2R1bW15KGFwKSkKIAkJCWNvbnRpbnVlOwogCisJCS8qIERpc2NhcmQgZGlzYWJsZWQgcG9ydHMuICBTb21lIGNvbnRyb2xsZXJzIHNob3cKKwkJICogdGhlaXIgdW51c2VkIGNoYW5uZWxzIHRoaXMgd2F5LiAgRGlzYWJsZWQgcG9ydHMgYXJlCisJCSAqIG1hZGUgZHVtbXkuCisJCSAqLworCQlpZiAoIWF0YV9yZXNvdXJjZXNfcHJlc2VudChwZGV2LCBpKSkgeworCQkJYXAtPm9wcyA9ICZhdGFfZHVtbXlfcG9ydF9vcHM7CisJCQljb250aW51ZTsKKwkJfQorCiAJCXJjID0gcGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIDB4MyA8PCBiYXNlLCBEUlZfTkFNRSk7CiAJCWlmIChyYykgewotCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgZ2RldiwgImZhaWxlZCB0byByZXF1ZXN0L2lvbWFwICIKLQkJCQkgICAiQkFScyBmb3IgcG9ydCAlZCAoZXJybm89JWQpXG4iLCBpLCByYyk7CisJCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgZ2RldiwKKwkJCQkgICAiZmFpbGVkIHRvIHJlcXVlc3QvaW9tYXAgQkFScyBmb3IgcG9ydCAlZCAiCisJCQkJICAgIihlcnJubz0lZClcbiIsIGksIHJjKTsKIAkJCWlmIChyYyA9PSAtRUJVU1kpCiAJCQkJcGNpbV9waW5fZGV2aWNlKHBkZXYpOwotCQkJcmV0dXJuIHJjOworCQkJYXAtPm9wcyA9ICZhdGFfZHVtbXlfcG9ydF9vcHM7CisJCQljb250aW51ZTsKIAkJfQogCQlob3N0LT5pb21hcCA9IGlvbWFwID0gcGNpbV9pb21hcF90YWJsZShwZGV2KTsKIApAQCAtNjQxLDYgKzYzOSwxMyBAQAogCQlhcC0+aW9hZGRyLmN0bF9hZGRyID0gKHZvaWQgX19pb21lbSAqKQogCQkJKCh1bnNpZ25lZCBsb25nKWlvbWFwW2Jhc2UgKyAxXSB8IEFUQV9QQ0lfQ1RMX09GUyk7CiAJCWF0YV9zdGRfcG9ydHMoJmFwLT5pb2FkZHIpOworCisJCW1hc2sgfD0gMSA8PCBpOworCX0KKworCWlmICghbWFzaykgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBnZGV2LCAibm8gYXZhaWxhYmxlIG5hdGl2ZSBwb3J0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC02NDksOCArNjU0LDcgQEAKIC8qKgogICoJYXRhX3BjaV9wcmVwYXJlX25hdGl2ZV9ob3N0IC0gaGVscGVyIHRvIHByZXBhcmUgbmF0aXZlIFBDSSBBVEEgaG9zdAogICoJQHBkZXY6IHRhcmdldCBQQ0kgZGV2aWNlCi0gKglAcHBpOiBhcnJheSBvZiBwb3J0X2luZm8KLSAqCUBuX3BvcnRzOiBudW1iZXIgb2YgcG9ydHMgdG8gYWxsb2NhdGUKKyAqCUBwcGk6IGFycmF5IG9mIHBvcnRfaW5mbywgbXVzdCBiZSBlbm91Z2ggZm9yIHR3byBwb3J0cwogICoJQHJfaG9zdDogb3V0IGFyZ3VtZW50IGZvciB0aGUgaW5pdGlhbGl6ZWQgQVRBIGhvc3QKICAqCiAgKglIZWxwZXIgdG8gYWxsb2NhdGUgQVRBIGhvc3QgZm9yIEBwZGV2LCBhY3F1aXJlIGFsbCBuYXRpdmUgUENJCkBAIC02NjQsMTAgKzY2OCw5IEBACiAgKi8KIGludCBhdGFfcGNpX3ByZXBhcmVfbmF0aXZlX2hvc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKiBjb25zdCAqIHBwaSwKLQkJCQlpbnQgbl9wb3J0cywgc3RydWN0IGF0YV9ob3N0ICoqcl9ob3N0KQorCQkJCXN0cnVjdCBhdGFfaG9zdCAqKnJfaG9zdCkKIHsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7Ci0JdW5zaWduZWQgaW50IHBvcnRfbWFzazsKIAlpbnQgcmM7CiAKIAlpZiAoIWRldnJlc19vcGVuX2dyb3VwKCZwZGV2LT5kZXYsIE5VTEwsIEdGUF9LRVJORUwpKQpAQCAtNjgxLDExICs2ODQsNyBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JcG9ydF9tYXNrID0gQVRBX1BPUlRfUFJJTUFSWTsKLQlpZiAobl9wb3J0cyA+IDEpCi0JCXBvcnRfbWFzayB8PSBBVEFfUE9SVF9TRUNPTkRBUlk7Ci0KLQlyYyA9IGF0YV9wY2lfaW5pdF9uYXRpdmVfaG9zdChob3N0LCBwb3J0X21hc2spOworCXJjID0gYXRhX3BjaV9pbml0X25hdGl2ZV9ob3N0KGhvc3QpOwogCWlmIChyYykKIAkJZ290byBlcnJfb3V0OwogCkBAIC03NzcsOCArNzc2LDExIEBACiAJLyogaW9tYXAgY21kIGFuZCBjdGwgcG9ydHMgKi8KIAlsZWdhY3lfZHItPmNtZF9hZGRyW3BvcnRfbm9dID0gaW9wb3J0X21hcChjbWRfcG9ydCwgOCk7CiAJbGVnYWN5X2RyLT5jdGxfYWRkcltwb3J0X25vXSA9IGlvcG9ydF9tYXAoY3RsX3BvcnQsIDEpOwotCWlmICghbGVnYWN5X2RyLT5jbWRfYWRkcltwb3J0X25vXSB8fCAhbGVnYWN5X2RyLT5jdGxfYWRkcltwb3J0X25vXSkKKwlpZiAoIWxlZ2FjeV9kci0+Y21kX2FkZHJbcG9ydF9ub10gfHwgIWxlZ2FjeV9kci0+Y3RsX2FkZHJbcG9ydF9ub10pIHsKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsIGhvc3QtPmRldiwKKwkJCSAgICJmYWlsZWQgdG8gbWFwIGNtZC9jdGwgcG9ydHNcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAkvKiBpbml0IElPIGFkZHJlc3NlcyAqLwogCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBsZWdhY3lfZHItPmNtZF9hZGRyW3BvcnRfbm9dOwpAQCAtNzkyLDE5ICs3OTQsMjAgQEAKIC8qKgogICoJYXRhX2luaXRfbGVnYWN5X2hvc3QgLSBhY3F1aXJlIGxlZ2FjeSBBVEEgcmVzb3VyY2VzIGFuZCBpbml0IEFUQSBob3N0CiAgKglAaG9zdDogdGFyZ2V0IEFUQSBob3N0Ci0gKglAbGVnYWN5X21hc2s6IG91dCBwYXJhbWV0ZXIsIG1hc2sgaW5kaWNhdGluZyBwb3J0cyBpcyBpbiBsZWdhY3kgbW9kZQogICoJQHdhc19idXN5OiBvdXQgcGFyYW1ldGVyLCBpbmRpY2F0ZXMgd2hldGhlciBhbnkgcG9ydCB3YXMgYnVzeQogICoKLSAqCUFjcXVpcmUgbGVnYWN5IEFUQSByZXNvdXJjZXMgZm9yIHBvcnRzLgorICoJQWNxdWlyZSBsZWdhY3kgQVRBIHJlc291cmNlcyBmb3IgdGhlIGZpcnN0IHR3byBwb3J0cyBvZiBAaG9zdAorICoJYW5kIGluaXRpYWxpemUgaXQgYWNjb3JkaW5nbHkuICBQb3J0cyBtYXJrZWQgZHVtbXkgYXJlIHNraXBwZWQKKyAqCWFuZCByZXNvdXJjZSBhY3F1aXN0aW9uIGZhaWx1cmUgbWFrZXMgdGhlIHBvcnQgZHVtbXkuCiAgKgogICoJTE9DS0lORzoKICAqCUluaGVyaXRlZCBmcm9tIGNhbGxpbmcgbGF5ZXIgKG1heSBzbGVlcCkuCiAgKgogICoJUkVUVVJOUzoKLSAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KKyAqCTAgaWYgYXQgbGVhc3Qgb25lIHBvcnQgaXMgaW5pdGlhbGl6ZWQsIC1FTk9ERVYgaWYgbm8gcG9ydCBpcworICoJYXZhaWxhYmxlLgogICovCi1zdGF0aWMgaW50IGF0YV9pbml0X2xlZ2FjeV9ob3N0KHN0cnVjdCBhdGFfaG9zdCAqaG9zdCwKLQkJCQl1bnNpZ25lZCBpbnQgKmxlZ2FjeV9tYXNrLCBpbnQgKndhc19idXN5KQorc3RhdGljIGludCBhdGFfaW5pdF9sZWdhY3lfaG9zdChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsIGludCAqd2FzX2J1c3kpCiB7CiAJc3RydWN0IGRldmljZSAqZ2RldiA9IGhvc3QtPmRldjsKIAlzdHJ1Y3QgYXRhX2xlZ2FjeV9kZXZyZXMgKmxlZ2FjeV9kcjsKQEAgLTgyMSwyMiArODI0LDIzIEBACiAJZGV2cmVzX2FkZChnZGV2LCBsZWdhY3lfZHIpOwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQkqbGVnYWN5X21hc2sgJj0gfigxIDw8IGkpOworCQlpZiAoYXRhX3BvcnRfaXNfZHVtbXkoaG9zdC0+cG9ydHNbaV0pKQorCQkJY29udGludWU7CisKIAkJcmMgPSBhdGFfaW5pdF9sZWdhY3lfcG9ydChob3N0LT5wb3J0c1tpXSwgbGVnYWN5X2RyKTsKIAkJaWYgKHJjID09IDApCiAJCQlsZWdhY3lfZHItPm1hc2sgfD0gMSA8PCBpOwotCQllbHNlIGlmIChyYyA9PSAtRUJVU1kpCi0JCQkoKndhc19idXN5KSsrOworCQllbHNlIHsKKwkJCWlmIChyYyA9PSAtRUJVU1kpCisJCQkJKCp3YXNfYnVzeSkrKzsKKwkJCWhvc3QtPnBvcnRzW2ldLT5vcHMgPSAmYXRhX2R1bW15X3BvcnRfb3BzOworCQl9CiAJfQogCi0JaWYgKCFsZWdhY3lfZHItPm1hc2spCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQotCQlpZiAoIShsZWdhY3lfZHItPm1hc2sgJiAoMSA8PCBpKSkpCi0JCQlob3N0LT5wb3J0c1tpXS0+b3BzID0gJmF0YV9kdW1teV9wb3J0X29wczsKLQotCSpsZWdhY3lfbWFzayB8PSBsZWdhY3lfZHItPm1hc2s7CisJaWYgKCFsZWdhY3lfZHItPm1hc2spIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgZ2RldiwgIm5vIGF2YWlsYWJsZSBsZWdhY3kgcG9ydFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCWRldnJlc19yZW1vdmVfZ3JvdXAoZ2RldiwgTlVMTCk7CiAJcmV0dXJuIDA7CkBAIC04NzUsNyArODc5LDcgQEAKIAlsZWdhY3lfZHIgPSBkZXZyZXNfZmluZChob3N0LT5kZXYsIGF0YV9sZWdhY3lfcmVsZWFzZSwgTlVMTCwgTlVMTCk7CiAJQlVHX09OKCFsZWdhY3lfZHIpOwogCi0JZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGlycTsKIAogCQkvKiBGSVhNRTogQVRBXypfSVJRKCkgc2hvdWxkIHRha2UgZ2VuZXJpYyBkZXZpY2Ugbm90IHBjaV9kZXYgKi8KQEAgLTkyMyw4ICs5MjcsNyBAQAogLyoqCiAgKglhdGFfcGNpX2luaXRfb25lIC0gSW5pdGlhbGl6ZS9yZWdpc3RlciBQQ0kgSURFIGhvc3QgY29udHJvbGxlcgogICoJQHBkZXY6IENvbnRyb2xsZXIgdG8gYmUgaW5pdGlhbGl6ZWQKLSAqCUBwb3J0X2luZm86IEluZm9ybWF0aW9uIGZyb20gbG93LWxldmVsIGhvc3QgZHJpdmVyCi0gKglAbl9wb3J0czogTnVtYmVyIG9mIHBvcnRzIGF0dGFjaGVkIHRvIGhvc3QgY29udHJvbGxlcgorICoJQHBwaTogYXJyYXkgb2YgcG9ydF9pbmZvLCBtdXN0IGJlIGVub3VnaCBmb3IgdHdvIHBvcnRzCiAgKgogICoJVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGZyb20gYSBkcml2ZXIncwogICoJeHh4X2luaXRfb25lKCkgcHJvYmUgZnVuY3Rpb24gaWYgdGhlIGhhcmR3YXJlIHVzZXMgdHJhZGl0aW9uYWwKQEAgLTk0NCwyNyArOTQ3LDM1IEBACiAgKglSRVRVUk5TOgogICoJWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJuby1iYXNlZCB2YWx1ZSBvbiBlcnJvci4KICAqLwotCi1pbnQgYXRhX3BjaV9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBhdGFfcG9ydF9pbmZvICoqcG9ydF9pbmZvLAotCQkgICAgICB1bnNpZ25lZCBpbnQgbl9wb3J0cykKK2ludCBhdGFfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkgICAgIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICogY29uc3QgKiBwcGkpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcGkgPSBOVUxMOwogCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRbMl07CiAJdTggbWFzazsKLQl1bnNpZ25lZCBpbnQgbGVnYWN5X21vZGUgPSAwOwotCWludCByYzsKKwlpbnQgbGVnYWN5X21vZGUgPSAwOworCWludCBpLCByYzsKIAogCURQUklOVEsoIkVOVEVSXG4iKTsKIAorCS8qIGxvb2sgdXAgdGhlIGZpcnN0IHZhbGlkIHBvcnRfaW5mbyAqLworCWZvciAoaSA9IDA7IGkgPCAyICYmIHBwaVtpXTsgaSsrKSB7CisJCWlmIChwcGlbaV0tPnBvcnRfb3BzICE9ICZhdGFfZHVtbXlfcG9ydF9vcHMpIHsKKwkJCXBpID0gcHBpW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXBpKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCQkgICAibm8gdmFsaWQgcG9ydF9pbmZvIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmICghZGV2cmVzX29wZW5fZ3JvdXAoZGV2LCBOVUxMLCBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlCVUdfT04obl9wb3J0cyA8IDEgfHwgbl9wb3J0cyA+IDIpOwotCi0JcG9ydFswXSA9IHBvcnRfaW5mb1swXTsKLQlwb3J0WzFdID0gKG5fcG9ydHMgPiAxKSA/IHBvcnRfaW5mb1sxXSA6IE5VTEw7Ci0KIAkvKiBGSVhNRTogUmVhbGx5IGZvciBBVEEgaXQgaXNuJ3Qgc2FmZSBiZWNhdXNlIHRoZSBkZXZpY2UgbWF5IGJlCiAJICAgbXVsdGktcHVycG9zZSBhbmQgd2Ugd2FudCB0byBsZWF2ZSBpdCBhbG9uZSBpZiBpdCB3YXMgYWxyZWFkeQogCSAgIGVuYWJsZWQuIFNlY29uZGx5IGZvciBzaGFyZWQgdXNlIGFzIEFyamFuIHNheXMgd2Ugd2FudCByZWZjb3VudGluZwpAQCAtOTg0LDcgKzk5NSw3IEBACiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTEFTU19QUk9HLCAmdG1wOCk7CiAJCW1hc2sgPSAoMSA8PCAyKSB8ICgxIDw8IDApOwogCQlpZiAoKHRtcDggJiBtYXNrKSAhPSBtYXNrKQotCQkJbGVnYWN5X21vZGUgPSAoMSA8PCAzKTsKKwkJCWxlZ2FjeV9tb2RlID0gMTsKICNpZiBkZWZpbmVkKENPTkZJR19OT19BVEFfTEVHQUNZKQogCQkvKiBTb21lIHBsYXRmb3JtcyB3aXRoIFBDSSBsaW1pdHMgY2Fubm90IGFkZHJlc3MgY29tcGF0CiAJCSAgIHBvcnQgc3BhY2UuIEluIHRoYXQgY2FzZSB3ZSBwdW50IGlmIHRoZWlyIGZpcm13YXJlIGhhcwpAQCAtOTk4LDcgKzEwMDksNyBAQAogCX0KIAogCS8qIGFsbG9jIGFuZCBpbml0IGhvc3QgKi8KLQlob3N0ID0gYXRhX2hvc3RfYWxsb2NfcGluZm8oZGV2LCBwb3J0LCBuX3BvcnRzKTsKKwlob3N0ID0gYXRhX2hvc3RfYWxsb2NfcGluZm8oZGV2LCBwcGksIDIpOwogCWlmICghaG9zdCkgewogCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAogCQkJICAgImZhaWxlZCB0byBhbGxvY2F0ZSBBVEEgaG9zdFxuIik7CkBAIC0xMDA3LDE5ICsxMDE4LDEzIEBACiAJfQogCiAJaWYgKCFsZWdhY3lfbW9kZSkgewotCQl1bnNpZ25lZCBpbnQgcG9ydF9tYXNrOwotCi0JCXBvcnRfbWFzayA9IEFUQV9QT1JUX1BSSU1BUlk7Ci0JCWlmIChuX3BvcnRzID4gMSkKLQkJCXBvcnRfbWFzayB8PSBBVEFfUE9SVF9TRUNPTkRBUlk7Ci0KLQkJcmMgPSBhdGFfcGNpX2luaXRfbmF0aXZlX2hvc3QoaG9zdCwgcG9ydF9tYXNrKTsKKwkJcmMgPSBhdGFfcGNpX2luaXRfbmF0aXZlX2hvc3QoaG9zdCk7CiAJCWlmIChyYykKIAkJCWdvdG8gZXJyX291dDsKIAl9IGVsc2UgewogCQlpbnQgd2FzX2J1c3kgPSAwOwogCi0JCXJjID0gYXRhX2luaXRfbGVnYWN5X2hvc3QoaG9zdCwgJmxlZ2FjeV9tb2RlLCAmd2FzX2J1c3kpOworCQlyYyA9IGF0YV9pbml0X2xlZ2FjeV9ob3N0KGhvc3QsICZ3YXNfYnVzeSk7CiAJCWlmICh3YXNfYnVzeSkKIAkJCXBjaW1fcGluX2RldmljZShwZGV2KTsKIAkJaWYgKHJjKQpAQCAtMTA0MCw4ICsxMDQ1LDcgQEAKIAkJZ290byBlcnJfb3V0OwogCiAJaWYgKCFsZWdhY3lfbW9kZSkKLQkJcmMgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgcGRldi0+aXJxLAotCQkJCSAgICAgIHBvcnRfaW5mb1swXS0+cG9ydF9vcHMtPmlycV9oYW5kbGVyLAorCQlyYyA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBwZGV2LT5pcnEsIHBpLT5wb3J0X29wcy0+aXJxX2hhbmRsZXIsCiAJCQkJICAgICAgSVJRRl9TSEFSRUQsIERSVl9OQU1FLCBob3N0KTsKIAllbHNlIHsKIAkJaXJxX2hhbmRsZXJfdCBoYW5kbGVyWzJdID0geyBob3N0LT5vcHMtPmlycV9oYW5kbGVyLApAQCAtMTA1NSw3ICsxMDU5LDcgQEAKIAkJZ290byBlcnJfb3V0OwogCiAJLyogcmVnaXN0ZXIgKi8KLQlyYyA9IGF0YV9ob3N0X3JlZ2lzdGVyKGhvc3QsIHBvcnRfaW5mb1swXS0+c2h0KTsKKwlyYyA9IGF0YV9ob3N0X3JlZ2lzdGVyKGhvc3QsIHBpLT5zaHQpOwogCWlmIChyYykKIAkJZ290byBlcnJfb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEuaCBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCmluZGV4IDVmNGQ0MGMuLjVlMjQ2NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCkBAIC03NSw3ICs3NSw4IEBACiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9kb19zaW1wbGVfY21kKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIHU4IGNtZCk7CiBleHRlcm4gaW50IGF0YV9kZXZfcmVhZF9pZChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnBfY2xhc3MsCiAJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUxNiAqaWQpOwotZXh0ZXJuIGludCBhdGFfZGV2X3JldmFsaWRhdGUoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgYXRhX2Rldl9yZXJlYWRfaWQoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlYWRpZF9mbGFncyk7CitleHRlcm4gaW50IGF0YV9kZXZfcmV2YWxpZGF0ZShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVhZGlkX2ZsYWdzKTsKIGV4dGVybiBpbnQgYXRhX2Rldl9jb25maWd1cmUoc3RydWN0IGF0YV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHNhdGFfZG93bl9zcGRfbGltaXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gaW50IHNhdGFfc2V0X3NwZF9uZWVkZWQoc3RydWN0IGF0YV9wb3J0ICphcCk7CkBAIC05NiwxNSArOTcsMTUgQEAKIGV4dGVybiBzdHJ1Y3QgYXRhX3BvcnQgKmF0YV9wb3J0X2FsbG9jKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCk7CiAKIC8qIGxpYmF0YS1hY3BpLmMgKi8KLSNpZmRlZiBDT05GSUdfU0FUQV9BQ1BJCisjaWZkZWYgQ09ORklHX0FUQV9BQ1BJCiBleHRlcm4gaW50IGF0YV9hY3BpX2V4ZWNfdGZzKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotZXh0ZXJuIGludCBhdGFfYWNwaV9wdXNoX2lkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBpeCk7CitleHRlcm4gaW50IGF0YV9hY3BpX3B1c2hfaWQoc3RydWN0IGF0YV9kZXZpY2UgKmRldik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgYXRhX2FjcGlfZXhlY190ZnMoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbmxpbmUgaW50IGF0YV9hY3BpX3B1c2hfaWQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGl4KQorc3RhdGljIGlubGluZSBpbnQgYXRhX2FjcGlfcHVzaF9pZChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKaW5kZXggZDQwZWRlYi4uM2M1NWE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCkBAIC0yOTEsMTAgKzI5MSw2IEBACiAJLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotI2VuZGlmCiB9OwogCiAvKgpAQCAtNTIyLDE0ICs1MTgsMTQgQEAKIAogc3RhdGljIGludCBhbGlfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKIAkJLnNodCA9ICZhbGlfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLnBvcnRfb3BzID0gJmFsaV9lYXJseV9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHgyMCBhZGRlZCBETUEgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb18yMCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb18yMCA9IHsKIAkJLnNodCA9ICZhbGlfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCB8IEFUQV9GTEFHX1BJT19MQkE0OCwKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTUzNyw3ICs1MzMsNyBAQAogCQkucG9ydF9vcHMgPSAmYWxpXzIwX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweDIwIHdpdGggc3VwcG9ydCBsb2dpYyBhZGRlZCBVRE1BICovCi0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fMjBfdWRtYSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb18yMF91ZG1hID0gewogCQkuc2h0ID0gJmFsaV9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNUIHwgQVRBX0ZMQUdfUElPX0xCQTQ4LAogCQkucGlvX21hc2sgPSAweDFmLApAQCAtNTQ2LDcgKzU0Miw3IEBACiAJCS5wb3J0X29wcyA9ICZhbGlfMjBfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4QzIgYWRkcyBVRE1BNjYgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jMiA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jMiA9IHsKIAkJLnNodCA9ICZhbGlfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCB8IEFUQV9GTEFHX1BJT19MQkE0OCwKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTU1NSw3ICs1NTEsNyBAQAogCQkucG9ydF9vcHMgPSAmYWxpX2MyX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweEMzIGlzIFVETUExMDAgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jMyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jMyA9IHsKIAkJLnNodCA9ICZhbGlfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCB8IEFUQV9GTEFHX1BJT19MQkE0OCwKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTU2NCw3ICs1NjAsNyBAQAogCQkucG9ydF9vcHMgPSAmYWxpX2MyX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweEM0IGlzIFVETUExMzMgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jNCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jNCA9IHsKIAkJLnNodCA9ICZhbGlfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCB8IEFUQV9GTEFHX1BJT19MQkE0OCwKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTU3Myw3ICs1NjksNyBAQAogCQkucG9ydF9vcHMgPSAmYWxpX2MyX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweEM1IGlzIFVETUExMzMgd2l0aCBMQkE0OCBETUEgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jNSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19jNSA9IHsKIAkJLnNodCA9ICZhbGlfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTU4Miw3ICs1NzgsNyBAQAogCQkucG9ydF9vcHMgPSAmYWxpX2M1X3BvcnRfb3BzCiAJfTsKIAotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydF9pbmZvWzJdOworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgTlVMTCwgTlVMTCB9OwogCXU4IHJldiwgdG1wOwogCXN0cnVjdCBwY2lfZGV2ICppc2FfYnJpZGdlOwogCkBAIC01OTQsMTcgKzU5MCwxNyBAQAogCSAqLwogCiAJaWYgKHJldiA8IDB4MjApIHsKLQkJcG9ydF9pbmZvWzBdID0gcG9ydF9pbmZvWzFdID0gJmluZm9fZWFybHk7CisJCXBwaVswXSA9ICZpbmZvX2Vhcmx5OwogCX0gZWxzZSBpZiAocmV2IDwgMHhDMikgewotICAgICAgICAJcG9ydF9pbmZvWzBdID0gcG9ydF9pbmZvWzFdID0gJmluZm9fMjA7CisgICAgICAgIAlwcGlbMF0gPSAmaW5mb18yMDsKIAl9IGVsc2UgaWYgKHJldiA9PSAweEMyKSB7Ci0gICAgICAgIAlwb3J0X2luZm9bMF0gPSBwb3J0X2luZm9bMV0gPSAmaW5mb19jMjsKKyAgICAgICAgCXBwaVswXSA9ICZpbmZvX2MyOwogCX0gZWxzZSBpZiAocmV2ID09IDB4QzMpIHsKLSAgICAgICAgCXBvcnRfaW5mb1swXSA9IHBvcnRfaW5mb1sxXSA9ICZpbmZvX2MzOworICAgICAgICAJcHBpWzBdID0gJmluZm9fYzM7CiAJfSBlbHNlIGlmIChyZXYgPT0gMHhDNCkgewotICAgICAgICAJcG9ydF9pbmZvWzBdID0gcG9ydF9pbmZvWzFdID0gJmluZm9fYzQ7CisgICAgICAgIAlwcGlbMF0gPSAmaW5mb19jNDsKIAl9IGVsc2UKLSAgICAgICAgCXBvcnRfaW5mb1swXSA9IHBvcnRfaW5mb1sxXSA9ICZpbmZvX2M1OworICAgICAgICAJcHBpWzBdID0gJmluZm9fYzU7CiAKIAlhbGlfaW5pdF9jaGlwc2V0KHBkZXYpOwogCkBAIC02MTMsMTAgKzYwOSwxMCBAQAogCQkvKiBBcmUgd2UgcGFpcmVkIHdpdGggYSBVRE1BIGNhcGFibGUgY2hpcCAqLwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShpc2FfYnJpZGdlLCAweDVFLCAmdG1wKTsKIAkJaWYgKCh0bXAgJiAweDFFKSA9PSAweDEyKQotCSAgICAgICAgCXBvcnRfaW5mb1swXSA9IHBvcnRfaW5mb1sxXSA9ICZpbmZvXzIwX3VkbWE7CisJICAgICAgICAJcHBpWzBdID0gJmluZm9fMjBfdWRtYTsKIAkJcGNpX2Rldl9wdXQoaXNhX2JyaWRnZSk7CiAJfQotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBvcnRfaW5mbywgMik7CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbWQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKaW5kZXggNTM2ZWU4OS4uYjQzOTM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbWQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCkBAIC0xMjEsMTIgKzEyMSwxMyBAQAogLyoqCiAgKglhbWRfcHJvYmVfaW5pdAkJLQlwZXJmb3JtIHJlc2V0IGhhbmRsaW5nCiAgKglAYXA6IEFUQSBwb3J0CisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCiAgKglSZXNldCBzZXF1ZW5jZSBjaGVja2luZyBlbmFibGUgYml0cyB0byBzZWUgd2hpY2ggcG9ydHMgYXJlCiAgKglhY3RpdmUuCiAgKi8KIAotc3RhdGljIGludCBhbWRfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IGFtZF9wcmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9iaXRzIGFtZF9lbmFibGVfYml0c1tdID0gewogCQl7IDB4NDAsIDEsIDB4MDIsIDB4MDIgfSwKQEAgLTEzOCw4ICsxMzksNyBAQAogCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJmFtZF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKLQorCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwLCBkZWFkbGluZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFtZF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0yMjcsNyArMjI3LDggQEAKICAqCXNwYWNlIGZvciB1cy4KICAqLwogCi1zdGF0aWMgaW50IG52X3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKSB7CitzdGF0aWMgaW50IG52X3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQorewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgbnZfZW5hYmxlX2JpdHNbXSA9IHsKIAkJeyAweDUwLCAxLCAweDAyLCAweDAyIH0sCiAJCXsgMHg1MCwgMSwgMHgwMSwgMHgwMSB9CkBAIC0yMzgsNyArMjM5LDcgQEAKIAlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZudl9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKKwlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCwgZGVhZGxpbmUpOwogfQogCiBzdGF0aWMgdm9pZCBudl9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0zMjMsMTAgKzMyNCw2IEBACiAJLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYW1kMzNfcG9ydF9vcHMgPSB7CkBAIC01NDEsNyArNTM4LDcgQEAKIAogc3RhdGljIGludCBhbWRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb1sxMF0gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bMTBdID0gewogCQl7CS8qIDA6IEFNRCA3NDAxICovCiAJCQkuc2h0ID0gJmFtZF9zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKQEAgLTYyMyw3ICs2MjAsNyBAQAogCQkJLnBvcnRfb3BzID0gJmFtZDEwMF9wb3J0X29wcwogCQl9CiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1syXTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7IE5VTEwsIE5VTEwgfTsKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlpbnQgdHlwZSA9IGlkLT5kcml2ZXJfZGF0YTsKIAl1OCByZXY7CkBAIC02NTUsOSArNjUyLDggQEAKIAkJYXRhX3BjaV9jbGVhcl9zaW1wbGV4KHBkZXYpOwogCiAJLyogQW5kIGZpcmUgaXQgdXAgKi8KLQotCXBvcnRfaW5mb1swXSA9IHBvcnRfaW5mb1sxXSA9ICZpbmZvW3R5cGVdOwotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBvcnRfaW5mbywgMik7CisJcHBpWzBdID0gJmluZm9bdHlwZV07CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCmluZGV4IDAwZTllYzMuLjAzYjZkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9hcnRvcCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNC4yIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC40LjMiCiAKIC8qCiAgKglUaGUgQVJUT1AgaGFzIDMzIE1oeiBhbmQgIm92ZXIgY2xvY2tlZCIgdGltaW5nIHRhYmxlcy4gVW50aWwgd2UKQEAgLTM5LDcgKzM5LDcgQEAKIAogc3RhdGljIGludCBjbG9jayA9IDA7CiAKLXN0YXRpYyBpbnQgYXJ0b3A2MjEwX3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBhcnRvcDYyMTBfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCWNvbnN0IHN0cnVjdCBwY2lfYml0cyBhcnRvcF9lbmFibGVfYml0c1tdID0gewpAQCAtNDksNyArNDksOCBAQAogCiAJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmYXJ0b3BfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOworCisJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXAsIGRlYWRsaW5lKTsKIH0KIAogLyoqCkBAIC03MCwxMiArNzEsMTMgQEAKIC8qKgogICoJYXJ0b3A2MjYwX3ByZV9yZXNldAktCWNoZWNrIGZvciA0MC84MCBwaW4KICAqCUBhcDogUG9ydAorICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCiAgKgogICoJVGhlIEFSVE9QIGhhcmR3YXJlIHJlcG9ydHMgdGhlIGNhYmxlIGRldGVjdCBiaXRzIGluIHJlZ2lzdGVyIDB4NDkuCiAgKglOb3RoaW5nIGNvbXBsaWNhdGVkIG5lZWRlZCBoZXJlLgogICovCiAKLXN0YXRpYyBpbnQgYXJ0b3A2MjYwX3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBhcnRvcDYyNjBfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfYml0cyBhcnRvcF9lbmFibGVfYml0c1tdID0gewogCQl7IDB4NEFVLCAxVSwgMHgwMlVMLCAweDAyVUwgfSwJLyogcG9ydCAwICovCkBAIC04NywxNiArODksMTcgQEAKIAkvKiBPZGQgbnVtYmVyZWQgZGV2aWNlIGlkcyBhcmUgdGhlIHVuaXRzIHdpdGggZW5hYmxlIGJpdHMgKHRoZSAtUiBjYXJkcykgKi8KIAlpZiAocGRldi0+ZGV2aWNlICUgMSAmJiAhcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJmFydG9wX2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCiAJCXJldHVybiAtRU5PRU5UOwotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKKworCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwLCBkZWFkbGluZSk7CiB9CiAKIC8qKgogICoJYXJ0b3A2MjYwX2NhYmxlX2RldGVjdAktCWlkZW50aWZ5IGNhYmxlIHR5cGUKICAqCUBhcDogUG9ydAogICoKLSAqCUlkZW50aWZ5IHRoZSBjYWJsZSB0eXBlIGZvciB0aGUgQVJUT3AgaW50ZXJmYWNlIGluIHF1ZXN0aW9uCisgKglJZGVudGlmeSB0aGUgY2FibGUgdHlwZSBmb3IgdGhlIEFSVE9QIGludGVyZmFjZSBpbiBxdWVzdGlvbgogICovCi0gCisKIHN0YXRpYyBpbnQgYXJ0b3A2MjYwX2NhYmxlX2RldGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKQEAgLTQxMSw3ICs0MTQsNyBAQAogc3RhdGljIGludCBhcnRvcF9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182MjEwID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzYyMTAgPSB7CiAJCS5zaHQJCT0gJmFydG9wX3NodCwKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KQEAgLTQxOSw3ICs0MjIsNyBAQAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjIxMF9vcHMsCiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182MjZ4ID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzYyNnggPSB7CiAJCS5zaHQJCT0gJmFydG9wX3NodCwKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KQEAgLTQyNyw3ICs0MzAsNyBAQAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjI2MF9vcHMsCiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182MjZ4X2Zhc3QgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjI2eF9mYXN0ID0gewogCQkuc2h0CQk9ICZhcnRvcF9zaHQsCiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCkBAIC00MzUsMzIgKzQzOCwzMCBAQAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjI2MF9vcHMsCiAJfTsKLQlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydF9pbmZvWzJdOwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICppbmZvID0gTlVMTDsKLQlpbnQgcG9ydHMgPSAyOworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgTlVMTCwgTlVMTCB9OwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAogCQkJICAgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAogCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gMCkgewkvKiA2MjEwIHZhcmlhbnQgKi8KLQkJaW5mbyA9ICZpbmZvXzYyMTA7CisJCXBwaVswXSA9ICZpbmZvXzYyMTA7CisJCXBwaVsxXSA9ICZhdGFfZHVtbXlfcG9ydF9pbmZvOwogCQkvKiBCSU9TIG1heSBoYXZlIGxlZnQgdXMgaW4gVURNQSwgY2xlYXIgaXQgYmVmb3JlIGxpYmF0YSBwcm9iZSAqLwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1NCwgMCk7CiAJCS8qIEZvciB0aGUgbW9tZW50IChhbHNvIGxhY2tzIGRzYykgKi8KIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVJUT1AgNjIxMCByZXF1aXJlcyBzZXJpYWxpemUgZnVuY3Rpb25hbGl0eSBub3QgeWV0IHN1cHBvcnRlZCBieSBsaWJhdGEuXG4iKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2Vjb25kYXJ5IEFUQSBwb3J0cyB3aWxsIG5vdCBiZSBhY3RpdmF0ZWQuXG4iKTsKLQkJcG9ydHMgPSAxOwogCX0KIAllbHNlIGlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gMSkJLyogNjI2MCAqLwotCQlpbmZvID0gJmluZm9fNjI2eDsKKwkJcHBpWzBdID0gJmluZm9fNjI2eDsKIAllbHNlIGlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gMikJeyAvKiA2MjYwIG9yIDYyNjAgKyBmYXN0ICovCiAJCXVuc2lnbmVkIGxvbmcgaW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNCk7CiAJCXU4IHJlZzsKIAotCQlpbmZvID0gJmluZm9fNjI2eDsKKwkJcHBpWzBdID0gJmluZm9fNjI2eDsKIAkJaWYgKGluYihpbykgJiAweDEwKQotCQkJaW5mbyA9ICZpbmZvXzYyNnhfZmFzdDsKKwkJCXBwaVswXSA9ICZpbmZvXzYyNnhfZmFzdDsKIAkJLyogTWFjIHN5c3RlbXMgY29tZSB1cCB3aXRoIHNvbWUgcmVnaXN0ZXJzIG5vdCBzZXQgYXMgd2UKIAkJICAgd2lsbCBuZWVkIHRoZW0gKi8KIApAQCAtNDgxLDEwICs0ODIsOSBAQAogCiAJfQogCi0JQlVHX09OKGluZm8gPT0gTlVMTCk7CisJQlVHX09OKHBwaVswXSA9PSBOVUxMKTsKIAotCXBvcnRfaW5mb1swXSA9IHBvcnRfaW5mb1sxXSA9IGluZm87Ci0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcG9ydF9pbmZvLCBwb3J0cyk7CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFydG9wX3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCmluZGV4IDM5Yzg3MWEuLjg0NDkxNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwpAQCAtMzMsNyArMzMsNyBAQAogCUFUSUlYUF9JREVfVURNQV9NT0RFIAk9IDB4NTYKIH07CiAKLXN0YXRpYyBpbnQgYXRpaXhwX3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBhdGlpeHBfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfYml0cyBhdGlpeHBfZW5hYmxlX2JpdHNbXSA9IHsKIAkJeyAweDQ4LCAxLCAweDAxLCAweDAwIH0sCkBAIC00NCw3ICs0NCw3IEBACiAJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmYXRpaXhwX2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOworCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwLCBkZWFkbGluZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aWl4cF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0yMjksMTAgKzIyOSw2IEBACiAJLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYXRpaXhwX3BvcnRfb3BzID0gewpAQCAtMjcyLDcgKzI2OCw3IEBACiAKIHN0YXRpYyBpbnQgYXRpaXhwX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLnNodCA9ICZhdGlpeHBfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTI4MCw4ICsyNzYsOCBAQAogCQkudWRtYV9tYXNrID0gMHgzRiwKIAkJLnBvcnRfb3BzID0gJmF0aWl4cF9wb3J0X29wcwogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0gPSB7ICZpbmZvLCAmaW5mbyB9OwotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcG9ydF9pbmZvLCAyKTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwcGkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRpaXhwW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYwppbmRleCAyMTA1OTg1Li4zMWNiZjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgYXJ0dGltICsgMSwgKHQuYWN0aXZlIDw8IDQpIHwgdC5yZWNvdmVyKTsKIAl9IGVsc2UgewogCQkvKiBTYXZlIHRoZSBzaGFyZWQgdGltaW5ncyBmb3IgY2hhbm5lbCwgdGhleSB3aWxsIGJlIGxvYWRlZAotCQkgICBieSBxY19pc3N1ZV9wcm90LiBSZWxvYWRpbmcgdGhlIHNldHVwIHRpbWUgaXMgZXhwZW5zaXZlIAorCQkgICBieSBxY19pc3N1ZV9wcm90LiBSZWxvYWRpbmcgdGhlIHNldHVwIHRpbWUgaXMgZXhwZW5zaXZlCiAJCSAgIHNvIHdlIGtlZXAgYSBtZXJnZWQgb25lIGxvYWRlZCAqLwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBBUlRJTTIzLCAmcmVnKTsKIAkJcmVnICY9IDB4M0Y7CkBAIC0xODEsMTAgKzE4MSw2IEBACiAJLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgY21kNjQwX3BvcnRfb3BzID0gewpAQCAtMjM1LDcgKzIzMSw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIENNRFRJTSwgMCk7CiAJLyogNTEyIGJ5dGUgYnVyc3RzIChzZWN0b3IpICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIEJSU1QsIDB4NDApOwotCS8qIAorCS8qCiAJICogQSByZXBvcnRlciBhIGxvbmcgdGltZSBhZ28KIAkgKiBIYWQgcHJvYmxlbXMgd2l0aCB0aGUgZGF0YSBmaWZvCiAJICogU28gZG9uJ3QgcnVuIHRoZSByaXNrCkBAIC0yNTMsMTcgKzI0OSwxNiBAQAogCiBzdGF0aWMgaW50IGNtZDY0MF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuc2h0ID0gJmNtZDY0MF9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCQkucGlvX21hc2sgPSAweDFmLAogCQkucG9ydF9vcHMgPSAmY21kNjQwX3BvcnRfb3BzCiAJfTsKLQotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydF9pbmZvWzJdID0geyAmaW5mbywgJmluZm8gfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKIAljbWQ2NDBfaGFyZHdhcmVfaW5pdChwZGV2KTsKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwb3J0X2luZm8sIDIpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CiB9CiAKIHN0YXRpYyBpbnQgY21kNjQwX3JlaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwppbmRleCAzOTg5Y2M1Li4zMjBhNWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9jbWQ2NHgiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjIuMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi4zIgogCiAvKgogICogQ01ENjR4IHNwZWNpZmljIHJlZ2lzdGVycyBkZWZpbml0aW9uLgpAQCAtMjY2LDEwICsyNjYsNiBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLQkuc3VzcGVuZAkJPSBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZCwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGNtZDY0eF9wb3J0X29wcyA9IHsKQEAgLTM4MSw3ICszNzcsNyBAQAogewogCXUzMiBjbGFzc19yZXY7CiAKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gY21kX2luZm9bNl0gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGNtZF9pbmZvWzZdID0gewogCQl7CS8qIENNRCA2NDMgLSBubyBVRE1BICovCiAJCQkuc2h0ID0gJmNtZDY0eF9zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKQEAgLTQyOCwxMSArNDI0LDkgQEAKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NDhfcG9ydF9vcHMKIAkJfQogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0sICppbmZvOworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmNtZF9pbmZvW2lkLT5kcml2ZXJfZGF0YV0sIE5VTEwgfTsKIAl1OCBtcmRtb2RlOwogCi0JaW5mbyA9ICZjbWRfaW5mb1tpZC0+ZHJpdmVyX2RhdGFdOwotCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNsYXNzX3Jldik7CiAJY2xhc3NfcmV2ICY9IDB4RkY7CiAKQEAgLTQ0MiwxMCArNDM2LDEwIEBACiAJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NNRF82NDYpIHsKIAkJLyogRG9lcyBVRE1BIHdvcmsgPyAqLwogCQlpZiAoY2xhc3NfcmV2ID4gNCkKLQkJCWluZm8gPSAmY21kX2luZm9bMl07CisJCQlwcGlbMF0gPSAmY21kX2luZm9bMl07CiAJCS8qIEVhcmx5IHJldiB3aXRoIG90aGVyIHByb2JsZW1zID8gKi8KIAkJZWxzZSBpZiAoY2xhc3NfcmV2ID09IDEpCi0JCQlpbmZvID0gJmNtZF9pbmZvWzNdOworCQkJcHBpWzBdID0gJmNtZF9pbmZvWzNdOwogCX0KIAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgNjQpOwpAQCAtNDYxLDggKzQ1NSw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFVESURFVENSMCwgMHhGMCk7CiAjZW5kaWYKIAotCXBvcnRfaW5mb1swXSA9IHBvcnRfaW5mb1sxXSA9IGluZm87Ci0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcG9ydF9pbmZvLCAyKTsKKwlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwcGkpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYwppbmRleCA3OWJlZjBkLi4xYWFiZTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9jczU1MjAiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuNCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi41IgogCiBzdHJ1Y3QgcGlvX2Nsb2NrcwogewpAQCAtMTU1LDEwICsxNTUsNiBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLQkuc3VzcGVuZAkJPSBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZCwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGNzNTUyMF9wb3J0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCmluZGV4IDI5NjQyZDUuLjg0OGYwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2NzNTUzMCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNy4yIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC43LjMiCiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmNzNTUzMF9wb3J0X2Jhc2Uoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKQEAgLTE3NiwxMCArMTc2LDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBjczU1MzBfcG9ydF9vcHMgPSB7CkBAIC0zMzksNyArMzM1LDcgQEAKIAogc3RhdGljIGludCBjczU1MzBfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLnNodCA9ICZjczU1MzBfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTfEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzayA9IDB4MWYsCkBAIC0zNDgsMjMgKzM0NCwyMyBAQAogCQkucG9ydF9vcHMgPSAmY3M1NTMwX3BvcnRfb3BzCiAJfTsKIAkvKiBUaGUgZG9ja2luZyBjb25uZWN0b3IgZG9lc24ndCBkbyBVRE1BLCBhbmQgaXQgc2VlbXMgbm90IE1XRE1BICovCi0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcGFsbWF4X3NlY29uZGFyeSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19wYWxtYXhfc2Vjb25kYXJ5ID0gewogCQkuc2h0ID0gJmNzNTUzMF9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1N8QVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLnBvcnRfb3BzID0gJmNzNTUzMF9wb3J0X29wcwogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0gPSB7ICZpbmZvLCAmaW5mbyB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAogCS8qIENoaXAgaW5pdGlhbGlzYXRpb24gKi8KIAlpZiAoY3M1NTMwX2luaXRfY2hpcCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChjczU1MzBfaXNfcGFsbWF4KCkpCi0JCXBvcnRfaW5mb1sxXSA9ICZpbmZvX3BhbG1heF9zZWNvbmRhcnk7CisJCXBwaVsxXSA9ICZpbmZvX3BhbG1heF9zZWNvbmRhcnk7CiAKIAkvKiBOb3cga2ljayBvZmYgQVRBIHNldCB1cCAqLwotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBvcnRfaW5mbywgMik7CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKaW5kZXggMDhjY2NjOS4uYWEzMjU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL21zci5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJjczU1MzUiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIuMTEiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIuMTIiCiAKIC8qCiAgKglUaGUgR2VvZGUgKEFrYSBBdGhsb24gR1ggbm93KSB1c2VzIGFuIGludGVybmFsIE1TUiBiYXNlZApAQCAtNzIsNiArNzIsNyBAQAogLyoqCiAgKgljczU1MzVfY2FibGVfZGV0ZWN0CS0JZGV0ZWN0IGNhYmxlIHR5cGUKICAqCUBhcDogUG9ydCB0byBkZXRlY3Qgb24KKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCVBlcmZvcm0gY2FibGUgZGV0ZWN0aW9uIGZvciBBVEE2NiBjYXBhYmxlIGNhYmxlLiBSZXR1cm4gYSBsaWJhdGEKICAqCWNhYmxlIHR5cGUuCkBAIC0xNzIsMTAgKzE3Myw2IEBACiAJLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgY3M1NTM1X3BvcnRfb3BzID0gewpAQCAtMjI2LDcgKzIyMyw3IEBACiAKIHN0YXRpYyBpbnQgY3M1NTM1X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLnNodCA9ICZjczU1MzVfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTfEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzayA9IDB4MWYsCkBAIC0yMzQsNyArMjMxLDcgQEAKIAkJLnVkbWFfbWFzayA9IDB4MWYsCiAJCS5wb3J0X29wcyA9ICZjczU1MzVfcG9ydF9vcHMKIAl9OwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0c1sxXSA9IHsgJmluZm8gfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCAmYXRhX2R1bW15X3BvcnRfaW5mbyB9OwogCiAJdTMyIHRpbWluZ3MsIGR1bW15OwogCkBAIC0yNDYsNyArMjQzLDcgQEAKIAlyZG1zcihBVEFDX0NIMEQxX1BJTywgdGltaW5ncywgZHVtbXkpOwogCWlmIChDUzU1MzVfQkFEX1BJTyh0aW1pbmdzKSkKIAkJd3Jtc3IoQVRBQ19DSDBEMV9QSU8sIDB4RjdGNEY3RjRVTCwgMCk7Ci0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwb3J0cywgMSk7CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwcGkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3M1NTM1W10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCmluZGV4IDZlYzA0OWMuLmQ0MWE3NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3lwcmVzcy5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfY3lwcmVzcyIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMS40IgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4xLjUiCiAKIC8qIGhlcmUgYXJlIHRoZSBvZmZzZXQgZGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMgKi8KIApAQCAtMTI1LDEwICsxMjUsNiBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLQkuc3VzcGVuZAkJPSBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZCwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGN5ODJjNjkzX3BvcnRfb3BzID0gewpAQCAtMTY5LDE0ICsxNjUsMTQgQEAKIAogc3RhdGljIGludCBjeTgyYzY5M19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuc2h0ID0gJmN5ODJjNjkzX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5td2RtYV9tYXNrID0gMHgwNywKIAkJLnBvcnRfb3BzID0gJmN5ODJjNjkzX3BvcnRfb3BzCiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1sxXSA9IHsgJmluZm8gfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCAmYXRhX2R1bW15X3BvcnRfaW5mbyB9OwogCiAJLyogRGV2Zm4gMSBpcyB0aGUgQVRBIHByaW1hcnkuIFRoZSBzZWNvbmRhcnkgaXMgbWFnaWMgYW5kIG9uIGRldmZuMi4KIAkgICBGb3IgdGhlIG1vbWVudCB3ZSBkb24ndCBoYW5kbGUgdGhlIHNlY29uZGFyeS4gRklYTUUgKi8KQEAgLTE4NCw3ICsxODAsNyBAQAogCWlmIChQQ0lfRlVOQyhwZGV2LT5kZXZmbikgIT0gMSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwb3J0X2luZm8sIDEpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeTgyYzY5M1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwppbmRleCBhMzIxNjg1Li4wNzkyNDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwpAQCAtMjcsMTIgKzI3LDEzIEBACiAvKioKICAqCWVmYXJfcHJlX3Jlc2V0CS0JRW5hYmxlIGJpdHMKICAqCUBhcDogUG9ydAorICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCiAgKgogICoJUGVyZm9ybSBjYWJsZSBkZXRlY3Rpb24gZm9yIHRoZSBFRkFSIEFUQSBpbnRlcmZhY2UuIFRoaXMgaXMKICAqCWRpZmZlcmVudCB0byB0aGUgUElJWCBhcnJhbmdlbWVudAogICovCiAKLXN0YXRpYyBpbnQgZWZhcl9wcmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyBpbnQgZWZhcl9wcmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9iaXRzIGVmYXJfZW5hYmxlX2JpdHNbXSA9IHsKIAkJeyAweDQxVSwgMVUsIDB4ODBVTCwgMHg4MFVMIH0sCS8qIHBvcnQgMCAqLwpAQCAtNDMsNyArNDQsNyBAQAogCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJmVmYXJfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CisJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXAsIGRlYWRsaW5lKTsKIH0KIAogLyoqCkBAIC0yNDYsMTAgKzI0Nyw2IEBACiAJLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgZWZhcl9vcHMgPSB7CkBAIC0zMDQsNyArMzAxLDcgQEAKIHN0YXRpYyBpbnQgZWZhcl9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5zaHQJCT0gJmVmYXJfc2h0LAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwpAQCAtMzEyLDEzICszMDksMTMgQEAKIAkJLnVkbWFfbWFzayAJPSAweDBmLCAvKiBVRE1BIDY2ICovCiAJCS5wb3J0X29wcwk9ICZlZmFyX29wcywKIAl9OwotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydF9pbmZvWzJdID0geyAmaW5mbywgJmluZm8gfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCiAJCQkgICAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCi0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcG9ydF9pbmZvLCAyKTsKKwlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwcGkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZWZhcl9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYwppbmRleCA5M2NmYTZkLi4wYzljYjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKQEAgLTIyMCwzMiArMjIwLDYgQEAKIAlyZXR1cm4gQVRBX0NCTF9QQVRBODA7CiB9CiAKLXN0YXRpYyBpbnQgaHB0MzZ4X3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgaHB0MzZ4X2VuYWJsZV9iaXRzW10gPSB7Ci0JCXsgMHg1MCwgMSwgMHgwNCwgMHgwNCB9LAotCQl7IDB4NTQsIDEsIDB4MDQsIDB4MDQgfQotCX07Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwotCi0JaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmaHB0MzZ4X2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOwotfQotCi0vKioKLSAqCWhwdDM2eF9lcnJvcl9oYW5kbGVyCS0JcmVzZXQgdGhlIGhwdDM2eCBidXMKLSAqCUBhcDogQVRBIHBvcnQgdG8gcmVzZXQKLSAqCi0gKglQZXJmb3JtIHRoZSByZXNldCBoYW5kbGluZyBmb3IgdGhlIDM2Ni8zNjgKLSAqLwotCi1zdGF0aWMgdm9pZCBocHQzNnhfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgaHB0MzZ4X3ByZV9yZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsIGF0YV9zdGRfcG9zdHJlc2V0KTsKLX0KLQogLyoqCiAgKglocHQzNjZfc2V0X3Bpb21vZGUJCS0JUElPIHNldHVwCiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKQEAgLTMzMSwxMCArMzA1LDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIC8qCkBAIC0zNTUsNyArMzI1LDcgQEAKIAogCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKIAkudGhhdwkJPSBhdGFfYm1kbWFfdGhhdywKLQkuZXJyb3JfaGFuZGxlcgk9IGhwdDM2eF9lcnJvcl9oYW5kbGVyLAorCS5lcnJvcl9oYW5kbGVyCT0gYXRhX2JtZG1hX2Vycm9yX2hhbmRsZXIsCiAJLnBvc3RfaW50ZXJuYWxfY21kID0gYXRhX2JtZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAogCS5jYWJsZV9kZXRlY3QJPSBocHQzNnhfY2FibGVfZGV0ZWN0LAogCkBAIC00MjEsNyArMzkxLDcgQEAKIAogc3RhdGljIGludCBocHQzNnhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM2NiA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNjYgPSB7CiAJCS5zaHQgPSAmaHB0MzZ4X3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzayA9IDB4MWYsCkBAIC00MjksNyArMzk5LDggQEAKIAkJLnVkbWFfbWFzayA9IDB4MWYsCiAJCS5wb3J0X29wcyA9ICZocHQzNjZfcG9ydF9vcHMKIAl9OwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0gPSB7JmluZm9faHB0MzY2LCAmaW5mb19ocHQzNjZ9OworCXN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSBpbmZvX2hwdDM2NjsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKIAl1MzIgY2xhc3NfcmV2OwogCXUzMiByZWcxOwpAQCAtNDUwLDE3ICs0MjEsMTcgQEAKIAkvKiBpbmZvX2hwdDM2NiBpcyBzYWZlIGFnYWluc3QgcmUtZW50cnkgc28gd2UgY2FuIHNjcmliYmxlIG9uIGl0ICovCiAJc3dpdGNoKChyZWcxICYgMHg3MDApID4+IDgpIHsKIAkJY2FzZSA1OgotCQkJaW5mb19ocHQzNjYucHJpdmF0ZV9kYXRhID0gJmhwdDM2Nl80MDsKKwkJCWluZm8ucHJpdmF0ZV9kYXRhID0gJmhwdDM2Nl80MDsKIAkJCWJyZWFrOwogCQljYXNlIDk6Ci0JCQlpbmZvX2hwdDM2Ni5wcml2YXRlX2RhdGEgPSAmaHB0MzY2XzI1OworCQkJaW5mby5wcml2YXRlX2RhdGEgPSAmaHB0MzY2XzI1OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpbmZvX2hwdDM2Ni5wcml2YXRlX2RhdGEgPSAmaHB0MzY2XzMzOworCQkJaW5mby5wcml2YXRlX2RhdGEgPSAmaHB0MzY2XzMzOwogCQkJYnJlYWs7CiAJfQogCS8qIE5vdyBraWNrIG9mZiBBVEEgc2V0IHVwICovCi0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwb3J0X2luZm8sIDIpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcHBpKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKaW5kZXggNDFkODMxMjkuLjY0NDY3MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDM3eCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi41IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjYiCiAKIHN0cnVjdCBocHRfY2xvY2sgewogCXU4CXhmZXJfc3BlZWQ7CkBAIC0zMDcsMTEgKzMwNywxMiBAQAogLyoqCiAgKglocHQzN3hfcHJlX3Jlc2V0CS0JcmVzZXQgdGhlIGhwdDM3eCBidXMKICAqCUBhcDogQVRBIHBvcnQgdG8gcmVzZXQKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCVBlcmZvcm0gdGhlIGluaXRpYWwgcmVzZXQgaGFuZGxpbmcgZm9yIHRoZSAzNzAvMzcyIGFuZCAzNzQgZnVuYyAwCiAgKi8KIAotc3RhdGljIGludCBocHQzN3hfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IGhwdDM3eF9wcmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAl1OCBzY3IyLCBhdGE2NjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CkBAIC0zMzgsNyArMzM5LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1MCArIDQgKiBhcC0+cG9ydF9ubywgMHgzNyk7CiAJdWRlbGF5KDEwMCk7CiAKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CisJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXAsIGRlYWRsaW5lKTsKIH0KIAogLyoqCkBAIC0zNTMsNyArMzU0LDcgQEAKIAlhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIGhwdDM3eF9wcmVfcmVzZXQsIGF0YV9zdGRfc29mdHJlc2V0LCBOVUxMLCBhdGFfc3RkX3Bvc3RyZXNldCk7CiB9CiAKLXN0YXRpYyBpbnQgaHB0Mzc0X3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBocHQzNzRfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfYml0cyBocHQzN3hfZW5hYmxlX2JpdHNbXSA9IHsKIAkJeyAweDUwLCAxLCAweDA0LCAweDA0IH0sCkBAIC0zODgsNyArMzg5LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1MCArIDQgKiBhcC0+cG9ydF9ubywgMHgzNyk7CiAJdWRlbGF5KDEwMCk7CiAKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CisJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXAsIGRlYWRsaW5lKTsKIH0KIAogLyoqCkBAIC04ODYsNyArODg3LDcgQEAKIHN0YXRpYyBpbnQgaHB0Mzd4X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAkvKiBIUFQzNzAgLSBVRE1BMTAwICovCi0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MCA9IHsKIAkJLnNodCA9ICZocHQzN3hfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTfEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzayA9IDB4MWYsCkBAIC04OTUsNyArODk2LDcgQEAKIAkJLnBvcnRfb3BzID0gJmhwdDM3MF9wb3J0X29wcwogCX07CiAJLyogSFBUMzcwQSAtIFVETUExMDAgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzBhID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MGEgPSB7CiAJCS5zaHQgPSAmaHB0Mzd4X3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TU3xBVEFfRkxBR19TUlNULAogCQkucGlvX21hc2sgPSAweDFmLApAQCAtOTA0LDcgKzkwNSw3IEBACiAJCS5wb3J0X29wcyA9ICZocHQzNzBhX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzAgLSBVRE1BMTAwICovCi0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwXzMzID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MF8zMyA9IHsKIAkJLnNodCA9ICZocHQzN3hfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTfEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzayA9IDB4MWYsCkBAIC05MTMsNyArOTE0LDcgQEAKIAkJLnBvcnRfb3BzID0gJmhwdDM3MF9wb3J0X29wcwogCX07CiAJLyogSFBUMzcwQSAtIFVETUExMDAgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzBhXzMzID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MGFfMzMgPSB7CiAJCS5zaHQgPSAmaHB0Mzd4X3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TU3xBVEFfRkxBR19TUlNULAogCQkucGlvX21hc2sgPSAweDFmLApAQCAtOTIyLDcgKzkyMyw3IEBACiAJCS5wb3J0X29wcyA9ICZocHQzNzBhX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzEsIDM3MiBhbmQgZnJpZW5kcyAtIFVETUExMzMgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzIgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcyID0gewogCQkuc2h0ID0gJmhwdDM3eF9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1N8QVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTkzMCwxNyArOTMxLDggQEAKIAkJLnVkbWFfbWFzayA9IDB4N2YsCiAJCS5wb3J0X29wcyA9ICZocHQzNzJfcG9ydF9vcHMKIAl9OwotCS8qIEhQVDM3MSwgMzcyIGFuZCBmcmllbmRzIC0gVURNQTEwMCBhdCA1ME1IeiBjbG9jayAqLwotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3Ml81MCA9IHsKLQkJLnNodCA9ICZocHQzN3hfc2h0LAotCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTfEFUQV9GTEFHX1NSU1QsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4M2YsCi0JCS5wb3J0X29wcyA9ICZocHQzNzJfcG9ydF9vcHMKLQl9OwogCS8qIEhQVDM3NCAtIFVETUExMzMgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzQgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0Mzc0ID0gewogCQkuc2h0ID0gJmhwdDM3eF9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1N8QVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTk1MCwxNiArOTQyLDE3IEBACiAJfTsKIAogCXN0YXRpYyBjb25zdCBpbnQgTUh6WzRdID0geyAzMywgNDAsIDUwLCA2NiB9OwotCi0Jc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1syXTsKLQlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydDsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydDsKKwl2b2lkICpwcml2YXRlX2RhdGEgPSBOVUxMOworCXN0cnVjdCBhdGFfcG9ydF9pbmZvIHBvcnRfaW5mbzsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZwb3J0X2luZm8sIE5VTEwgfTsKIAogCXU4IGlycW1hc2s7CiAJdTMyIGNsYXNzX3JldjsKIAl1OCBtY3IxOwogCXUzMiBmcmVxOwogCWludCBwcmVmZXJfZHBsbCA9IDE7Ci0JCisKIAl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwogCiAJY29uc3Qgc3RydWN0IGhwdF9jaGlwICpjaGlwX3RhYmxlOwpAQCAtMTA1Myw3ICsxMDQ2LDcgQEAKIAkgKi8KIAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NWIsIDB4MjMpOwotCQorCiAJLyoKIAkgKiBIaWdoUG9pbnQgZG9lcyB0aGlzIGZvciBIUFQzNzJBLgogCSAqIE5PVEU6IFRoaXMgcmVnaXN0ZXIgaXMgb25seSB3cml0ZWFibGUgdmlhIEkvTyBzcGFjZS4KQEAgLTEwODYsNyArMTA3OSw3IEBACiAJICoJVHVybiB0aGUgZnJlcXVlbmN5IGNoZWNrIGludG8gYSBiYW5kIGFuZCB0aGVuIGZpbmQgYSB0aW1pbmcKIAkgKgl0YWJsZSB0byBtYXRjaCBpdC4KIAkgKi8KLQkgCisKIAljbG9ja19zbG90ID0gaHB0Mzd4X2Nsb2NrX3Nsb3QoZnJlcSwgY2hpcF90YWJsZS0+YmFzZSk7CiAJaWYgKGNoaXBfdGFibGUtPmNsb2Nrc1tjbG9ja19zbG90XSA9PSBOVUxMIHx8IHByZWZlcl9kcGxsKSB7CiAJCS8qCkBAIC0xMDk2LDE3ICsxMDg5LDIxIEBACiAJCSAqCXVzZSBhIDUwTUh6IERQTEwgYnkgY2hvaWNlCiAJCSAqLwogCQl1bnNpZ25lZCBpbnQgZl9sb3csIGZfaGlnaDsKLQkJaW50IGFkanVzdDsKLQkJCi0JCWNsb2NrX3Nsb3QgPSAyOworCQlpbnQgZHBsbCwgYWRqdXN0OworCisJCS8qIENvbXB1dGUgRFBMTCAqLworCQlkcGxsID0gMjsKIAkJaWYgKHBvcnQtPnVkbWFfbWFzayAmIDB4RTApCi0JCQljbG9ja19zbG90ID0gMzsKLQkJCi0JCWZfbG93ID0gKE1IeltjbG9ja19zbG90XSAqIGNoaXBfdGFibGUtPmJhc2UpIC8gMTkyOworCQkJZHBsbCA9IDM7CisKKwkJZl9sb3cgPSAoTUh6W2Nsb2NrX3Nsb3RdICogNDgpIC8gTUh6W2RwbGxdOwogCQlmX2hpZ2ggPSBmX2xvdyArIDI7CisJCWlmIChjbG9ja19zbG90ID4gMSkKKwkJCWZfaGlnaCArPSAyOwogCiAJCS8qIFNlbGVjdCB0aGUgRFBMTCBjbG9jay4gKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1YiwgMHgyMSk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDVDLCAoZl9oaWdoIDw8IDE2KSB8IGZfbG93KTsKIAogCQlmb3IoYWRqdXN0ID0gMDsgYWRqdXN0IDwgODsgYWRqdXN0KyspIHsKIAkJCWlmIChocHQzN3hfY2FsaWJyYXRlX2RwbGwoZGV2KSkKQEAgLTExMjIsMTQgKzExMTksMTQgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhwdDM3eDogRFBMTCBkaWQgbm90IHN0YWJpbGl6ZS5cbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQkJaWYgKGNsb2NrX3Nsb3QgPT0gMykKLQkJCXBvcnQtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopaHB0Mzd4X3RpbWluZ3NfNjY7CisJCWlmIChkcGxsID09IDMpCisJCQlwcml2YXRlX2RhdGEgPSAodm9pZCAqKWhwdDM3eF90aW1pbmdzXzY2OwogCQllbHNlCi0JCQlwb3J0LT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKWhwdDM3eF90aW1pbmdzXzUwOworCQkJcHJpdmF0ZV9kYXRhID0gKHZvaWQgKilocHQzN3hfdGltaW5nc181MDsKIAotCQlwcmludGsoS0VSTl9JTkZPICJocHQzN3g6IEJ1cyBjbG9jayAlZE1IeiwgdXNpbmcgRFBMTC5cbiIsIE1IeltjbG9ja19zbG90XSk7CisJCXByaW50ayhLRVJOX0lORk8gImhwdDM3eDogQnVzIGNsb2NrICVkTUh6LCB1c2luZyBEUExMLlxuIiwgTUh6W2RwbGxdKTsKIAl9IGVsc2UgewotCQlwb3J0LT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKWNoaXBfdGFibGUtPmNsb2Nrc1tjbG9ja19zbG90XTsKKwkJcHJpdmF0ZV9kYXRhID0gKHZvaWQgKiljaGlwX3RhYmxlLT5jbG9ja3NbY2xvY2tfc2xvdF07CiAJCS8qCiAJCSAqCVBlcmZvcm0gYSBmaW5hbCBmaXh1cC4gTm90ZSB0aGF0IHdlIHdpbGwgaGF2ZSB1c2VkIHRoZQogCQkgKglEUExMIG9uIHRoZSBIUFQzNzIgd2hpY2ggbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQpAQCAtMTE0Myw5ICsxMTQwLDExIEBACiAJCXByaW50ayhLRVJOX0lORk8gImhwdDM3eDogJXM6IEJ1cyBjbG9jayAlZE1Iei5cbiIsIGNoaXBfdGFibGUtPm5hbWUsIE1IeltjbG9ja19zbG90XSk7CiAJfQogCi0JcG9ydF9pbmZvWzBdID0gcG9ydF9pbmZvWzFdID0gcG9ydDsKIAkvKiBOb3cga2ljayBvZmYgQVRBIHNldCB1cCAqLwotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcG9ydF9pbmZvLCAyKTsKKwlwb3J0X2luZm8gPSAqcG9ydDsKKwlwb3J0X2luZm8ucHJpdmF0ZV9kYXRhID0gcHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwcGkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHB0Mzd4W10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCmluZGV4IDZhMzQ1MjEuLmU5NDc0MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCkBAIC0xNDgsMTMgKzE0OCwxNCBAQAogICoJUmVzZXQgdGhlIGhhcmR3YXJlIGFuZCBzdGF0ZSBtYWNoaW5lLAogICovCiAKLXN0YXRpYyBpbnQgaHB0M3huX3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBocHQzeG5fcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCS8qIFJlc2V0IHRoZSBzdGF0ZSBtYWNoaW5lICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NTAgKyA0ICogYXAtPnBvcnRfbm8sIDB4MzcpOwogCXVkZWxheSgxMDApOwotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKKworCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpAQCAtNDg3LDcgKzQ4OCw3IEBACiBzdGF0aWMgaW50IGhwdDN4Mm5faW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCS8qIEhQVDM3Mk4gYW5kIGZyaWVuZHMgLSBVRE1BMTMzICovCi0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5zaHQgPSAmaHB0M3gybl9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCQkucGlvX21hc2sgPSAweDFmLApAQCAtNDk1LDggKzQ5Niw4IEBACiAJCS51ZG1hX21hc2sgPSAweDdmLAogCQkucG9ydF9vcHMgPSAmaHB0M3gybl9wb3J0X29wcwogCX07Ci0Jc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1syXTsKLQlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydCA9ICZpbmZvOworCXN0cnVjdCBhdGFfcG9ydF9pbmZvIHBvcnQgPSBpbmZvOworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJnBvcnQsIE5VTEwgfTsKIAogCXU4IGlycW1hc2s7CiAJdTMyIGNsYXNzX3JldjsKQEAgLTUyMCw4ICs1MjEsOCBAQAogCQkJLyogMzcxTiBpZiByZXYgPiAxICovCiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzI6Ci0JCQkvKiAzNzJOIGlmIHJldiA+PSAxKi8KLQkJCWlmIChjbGFzc19yZXYgPT0gMCkKKwkJCS8qIDM3Mk4gaWYgcmV2ID49IDIqLworCQkJaWYgKGNsYXNzX3JldiA8IDIpCiAJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzMDI6CkBAIC01ODQsOSArNTg1LDkgQEAKIAogCS8qIFNldCBvdXIgcHJpdmF0ZSBkYXRhIHVwLiBXZSBvbmx5IG5lZWQgYSBmZXcgZmxhZ3Mgc28gd2UgdXNlCiAJICAgaXQgZGlyZWN0bHkgKi8KLQlwb3J0LT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXBvcnQucHJpdmF0ZV9kYXRhID0gTlVMTDsKIAlpZiAocGNpX21oeiA+IDYwKSB7Ci0JCXBvcnQtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopUENJNjY7CisJCXBvcnQucHJpdmF0ZV9kYXRhID0gKHZvaWQgKilQQ0k2NjsKIAkJLyoKIAkJICogT24gIEhQVDM3MU4sIGlmIEFUQSBjbG9jayBpcyA2NiBNSHogd2UgbXVzdCBzZXQgYml0IDIgaW4KIAkJICogdGhlIE1JU0MuIHJlZ2lzdGVyIHRvIHN0cmV0Y2ggdGhlIFVsdHJhRE1BIFRzcyB0aW1pbmcuCkBAIC01OTcsOCArNTk4LDcgQEAKIAl9CiAKIAkvKiBOb3cga2ljayBvZmYgQVRBIHNldCB1cCAqLwotCXBvcnRfaW5mb1swXSA9IHBvcnRfaW5mb1sxXSA9IHBvcnQ7Ci0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwb3J0X2luZm8sIDIpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcHBpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwdDN4Mm5bXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jCmluZGV4IGFjMjhlYzguLjhjZTVlMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDN4MyIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNC4yIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC40LjMiCiAKIC8qKgogICoJaHB0M3gzX3NldF9waW9tb2RlCQktCVBJTyBzZXR1cApAQCAtMTAwLDEwICsxMDAsNiBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLQkuc3VzcGVuZAkJPSBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZCwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGhwdDN4M19wb3J0X29wcyA9IHsKQEAgLTE3NSw3ICsxNzEsNyBAQAogCiBzdGF0aWMgaW50IGhwdDN4M19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5zaHQgPSAmaHB0M3gzX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TU3xBVEFfRkxBR19TUlNULAogCQkucGlvX21hc2sgPSAweDFmLApAQCAtMTgzLDExICsxNzksMTEgQEAKIAkJLnVkbWFfbWFzayA9IDB4MDcsCiAJCS5wb3J0X29wcyA9ICZocHQzeDNfcG9ydF9vcHMKIAl9OwotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydF9pbmZvWzJdID0geyAmaW5mbywgJmluZm8gfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKIAlocHQzeDNfaW5pdF9jaGlwc2V0KGRldik7CiAJLyogTm93IGtpY2sgb2ZmIEFUQSBzZXQgdXAgKi8KLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBvcnRfaW5mbywgMik7CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwcGkpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jIGIvZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYwppbmRleCBkYmM4ZWUyLi5jNzkxYTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMKQEAgLTYwLDYgKzYwLDE4IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnW1BBVEFfSUNTSURFX01BWF9TR107CiB9OwogCitzdHJ1Y3QgcGF0YV9pY3NpZGVfaW5mbyB7CisJc3RydWN0IHBhdGFfaWNzaWRlX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQJKmVjOworCXZvaWQgX19pb21lbQkJKmJhc2U7CisJdm9pZCBfX2lvbWVtCQkqaXJxYWRkcjsKKwl1bnNpZ25lZCBpbnQJCWlycW1hc2s7CisJY29uc3QgZXhwYW5zaW9uY2FyZF9vcHNfdCAqaXJxb3BzOworCXVuc2lnbmVkIGludAkJbXdkbWFfbWFzazsKKwl1bnNpZ25lZCBpbnQJCW5yX3BvcnRzOworCWNvbnN0IHN0cnVjdCBwb3J0aW5mbwkqcG9ydFsyXTsKK307CisKICNkZWZpbmUgSUNTX1RZUEVfQTNJTgkwCiAjZGVmaW5lIElDU19UWVBFX0EzVVNFUgkxCiAjZGVmaW5lIElDU19UWVBFX1Y2CTMKQEAgLTI2OSw5ICsyODEsMTAgQEAKIAlyZXR1cm4gcmVhZGIoaXJxX3BvcnQpICYgMSA/IEFUQV9ETUFfSU5UUiA6IDA7CiB9CiAKLXN0YXRpYyBpbnQgaWNzaWRlX2RtYV9pbml0KHN0cnVjdCBhdGFfcHJvYmVfZW50ICphZSwgc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYykKK3N0YXRpYyBpbnQgaWNzaWRlX2RtYV9pbml0KHN0cnVjdCBwYXRhX2ljc2lkZV9pbmZvICppbmZvKQogewotCXN0cnVjdCBwYXRhX2ljc2lkZV9zdGF0ZSAqc3RhdGUgPSBhZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwYXRhX2ljc2lkZV9zdGF0ZSAqc3RhdGUgPSBpbmZvLT5zdGF0ZTsKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gaW5mby0+ZWM7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVRBX01BWF9ERVZJQ0VTOyBpKyspIHsKQEAgLTI4MSw3ICsyOTQsNyBAQAogCiAJaWYgKGVjLT5kbWEgIT0gTk9fRE1BICYmICFyZXF1ZXN0X2RtYShlYy0+ZG1hLCBEUlZfTkFNRSkpIHsKIAkJc3RhdGUtPmRtYSA9IGVjLT5kbWE7Ci0JCWFlLT5td2RtYV9tYXNrID0gMHgwNzsJLyogTVcwLi4yICovCisJCWluZm8tPm13ZG1hX21hc2sgPSAweDA3OwkvKiBNVzAuLjIgKi8KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM3MSw2ICszODQsOCBAQAogCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKIAkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCiAKKwkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJsZV80MHdpcmUsCisKIAkuYm1kbWFfc2V0dXAJCT0gcGF0YV9pY3NpZGVfYm1kbWFfc2V0dXAsCiAJLmJtZG1hX3N0YXJ0CQk9IHBhdGFfaWNzaWRlX2JtZG1hX3N0YXJ0LAogCkBAIC0zODUsNyArNDAwLDYgQEAKIAkuZXJyb3JfaGFuZGxlcgkJPSBhdGFfYm1kbWFfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBwYXRhX2ljc2lkZV9ibWRtYV9zdG9wLAogCi0JLmlycV9oYW5kbGVyCQk9IGF0YV9pbnRlcnJ1cHQsCiAJLmlycV9jbGVhcgkJPSBhdGFfZHVtbXlfbm9yZXQsCiAJLmlycV9vbgkJCT0gYXRhX2lycV9vbiwKIAkuaXJxX2FjawkJPSBwYXRhX2ljc2lkZV9pcnFfYWNrLApAQCAtMzk2LDExICs0MTAsMTAgQEAKIAkuYm1kbWFfc3RhdHVzCQk9IHBhdGFfaWNzaWRlX2JtZG1hX3N0YXR1cywKIH07CiAKLXN0YXRpYyB2b2lkCi1wYXRhX2ljc2lkZV9hZGRfcG9ydChzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqYWUsIHZvaWQgX19pb21lbSAqYmFzZSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgcG9ydGluZm8gKmluZm8pCitzdGF0aWMgdm9pZCBfX2RldmluaXQKK3BhdGFfaWNzaWRlX3NldHVwX2lvYWRkcihzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciwgdm9pZCBfX2lvbWVtICpiYXNlLAorCQkJIGNvbnN0IHN0cnVjdCBwb3J0aW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhZS0+cG9ydFthZS0+bl9wb3J0cysrXTsKIAl2b2lkIF9faW9tZW0gKmNtZCA9IGJhc2UgKyBpbmZvLT5kYXRhb2Zmc2V0OwogCiAJaW9hZGRyLT5jbWRfYWRkcgk9IGNtZDsKQEAgLTQxOSw1OCArNDMyLDQ0IEBACiAJaW9hZGRyLT5hbHRzdGF0dXNfYWRkcgk9IGlvYWRkci0+Y3RsX2FkZHI7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1wYXRhX2ljc2lkZV9yZWdpc3Rlcl92NShzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqYWUsIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXRhX2ljc2lkZV9yZWdpc3Rlcl92NShzdHJ1Y3QgcGF0YV9pY3NpZGVfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgcGF0YV9pY3NpZGVfc3RhdGUgKnN0YXRlID0gYWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGF0YV9pY3NpZGVfc3RhdGUgKnN0YXRlID0gaW5mby0+c3RhdGU7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCi0JYmFzZSA9IGlvcmVtYXAoZWNhcmRfcmVzb3VyY2Vfc3RhcnQoZWMsIEVDQVJEX1JFU19NRU1DKSwKLQkJICAgICAgIGVjYXJkX3Jlc291cmNlX2xlbihlYywgRUNBUkRfUkVTX01FTUMpKTsKKwliYXNlID0gZWNhcmRtX2lvbWFwKGluZm8tPmVjLCBFQ0FSRF9SRVNfTUVNQywgMCwgMCk7CiAJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXN0YXRlLT5pcnFfcG9ydCA9IGJhc2U7CiAKLQllYy0+aXJxYWRkciA9IGJhc2UgKyBJQ1NfQVJDSU5fVjVfSU5UUlNUQVQ7Ci0JZWMtPmlycW1hc2sgPSAxOwotCWVjLT5pcnFfZGF0YSA9IHN0YXRlOwotCWVjLT5vcHMgPSAmcGF0YV9pY3NpZGVfb3BzX2FyY2luX3Y1OwotCi0JLyoKLQkgKiBCZSBvbiB0aGUgc2FmZSBzaWRlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzCi0JICovCi0JZWMtPm9wcy0+aXJxZGlzYWJsZShlYywgZWMtPmlycSk7Ci0KLQlwYXRhX2ljc2lkZV9hZGRfcG9ydChhZSwgYmFzZSwgJnBhdGFfaWNzaWRlX3BvcnRpbmZvX3Y1KTsKKwlpbmZvLT5iYXNlID0gYmFzZTsKKwlpbmZvLT5pcnFhZGRyID0gYmFzZSArIElDU19BUkNJTl9WNV9JTlRSU1RBVDsKKwlpbmZvLT5pcnFtYXNrID0gMTsKKwlpbmZvLT5pcnFvcHMgPSAmcGF0YV9pY3NpZGVfb3BzX2FyY2luX3Y1OworCWluZm8tPm5yX3BvcnRzID0gMTsKKwlpbmZvLT5wb3J0WzBdID0gJnBhdGFfaWNzaWRlX3BvcnRpbmZvX3Y1OwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1wYXRhX2ljc2lkZV9yZWdpc3Rlcl92NihzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqYWUsIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXRhX2ljc2lkZV9yZWdpc3Rlcl92NihzdHJ1Y3QgcGF0YV9pY3NpZGVfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgcGF0YV9pY3NpZGVfc3RhdGUgKnN0YXRlID0gYWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGF0YV9pY3NpZGVfc3RhdGUgKnN0YXRlID0gaW5mby0+c3RhdGU7CisJc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYyA9IGluZm8tPmVjOwogCXZvaWQgX19pb21lbSAqaW9jX2Jhc2UsICplYXNpX2Jhc2U7CiAJdW5zaWduZWQgaW50IHNlbCA9IDA7Ci0JaW50IHJldDsKIAotCWlvY19iYXNlID0gaW9yZW1hcChlY2FyZF9yZXNvdXJjZV9zdGFydChlYywgRUNBUkRfUkVTX0lPQ0ZBU1QpLAotCQkJICAgZWNhcmRfcmVzb3VyY2VfbGVuKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCkpOwotCWlmICghaW9jX2Jhc2UpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQorCWlvY19iYXNlID0gZWNhcmRtX2lvbWFwKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCwgMCwgMCk7CisJaWYgKCFpb2NfYmFzZSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAllYXNpX2Jhc2UgPSBpb2NfYmFzZTsKIAogCWlmIChlY2FyZF9yZXNvdXJjZV9mbGFncyhlYywgRUNBUkRfUkVTX0VBU0kpKSB7Ci0JCWVhc2lfYmFzZSA9IGlvcmVtYXAoZWNhcmRfcmVzb3VyY2Vfc3RhcnQoZWMsIEVDQVJEX1JFU19FQVNJKSwKLQkJCQkgICAgZWNhcmRfcmVzb3VyY2VfbGVuKGVjLCBFQ0FSRF9SRVNfRUFTSSkpOwotCQlpZiAoIWVhc2lfYmFzZSkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gdW5tYXBfc2xvdDsKLQkJfQorCQllYXNpX2Jhc2UgPSBlY2FyZG1faW9tYXAoZWMsIEVDQVJEX1JFU19FQVNJLCAwLCAwKTsKKwkJaWYgKCFlYXNpX2Jhc2UpCisJCQlyZXR1cm4gLUVOT01FTTsKIAogCQkvKgogCQkgKiBFbmFibGUgYWNjZXNzIHRvIHRoZSBFQVNJIHJlZ2lvbi4KQEAgLTQ4MCw0NSArNDc5LDcyIEBACiAKIAl3cml0ZWIoc2VsLCBpb2NfYmFzZSk7CiAKLQllYy0+aXJxX2RhdGEgPSBzdGF0ZTsKLQllYy0+b3BzID0gJnBhdGFfaWNzaWRlX29wc19hcmNpbl92NjsKLQogCXN0YXRlLT5pcnFfcG9ydCA9IGVhc2lfYmFzZTsKIAlzdGF0ZS0+aW9jX2Jhc2UgPSBpb2NfYmFzZTsKIAlzdGF0ZS0+cG9ydFswXS5wb3J0X3NlbCA9IHNlbDsKIAlzdGF0ZS0+cG9ydFsxXS5wb3J0X3NlbCA9IHNlbCB8IDE7CiAKIAkvKgotCSAqIEJlIG9uIHRoZSBzYWZlIHNpZGUgLSBkaXNhYmxlIGludGVycnVwdHMKLQkgKi8KLQllYy0+b3BzLT5pcnFkaXNhYmxlKGVjLCBlYy0+aXJxKTsKLQotCS8qCi0JICogRmluZCBhbmQgcmVnaXN0ZXIgdGhlIGludGVyZmFjZXMuCi0JICovCi0JcGF0YV9pY3NpZGVfYWRkX3BvcnQoYWUsIGVhc2lfYmFzZSwgJnBhdGFfaWNzaWRlX3BvcnRpbmZvX3Y2XzEpOwotCXBhdGFfaWNzaWRlX2FkZF9wb3J0KGFlLCBlYXNpX2Jhc2UsICZwYXRhX2ljc2lkZV9wb3J0aW5mb192Nl8yKTsKLQotCS8qCiAJICogRklYTUU6IHdvcmsgYXJvdW5kIGxpYmF0YSdzIGF2ZXJzaW9uIHRvIGNhbGxpbmcgcG9ydF9kaXNhYmxlLgogCSAqIFRoaXMgcGVybWFuZW50bHkgZGlzYWJsZXMgaW50ZXJydXB0cyBvbiBwb3J0IDAgLSBiYWQgbHVjayBpZgogCSAqIHlvdSBoYXZlIGEgZHJpdmUgb24gdGhhdCBwb3J0LgogCSAqLwogCXN0YXRlLT5wb3J0WzBdLmRpc2FibGVkID0gMTsKIAotCXJldHVybiBpY3NpZGVfZG1hX2luaXQoYWUsIGVjKTsKKwlpbmZvLT5iYXNlID0gZWFzaV9iYXNlOworCWluZm8tPmlycW9wcyA9ICZwYXRhX2ljc2lkZV9vcHNfYXJjaW5fdjY7CisJaW5mby0+bnJfcG9ydHMgPSAyOworCWluZm8tPnBvcnRbMF0gPSAmcGF0YV9pY3NpZGVfcG9ydGluZm9fdjZfMTsKKwlpbmZvLT5wb3J0WzFdID0gJnBhdGFfaWNzaWRlX3BvcnRpbmZvX3Y2XzI7CiAKLSB1bm1hcF9zbG90OgotCWlvdW5tYXAoaW9jX2Jhc2UpOwotIG91dDoKLQlyZXR1cm4gcmV0OworCXJldHVybiBpY3NpZGVfZG1hX2luaXQoaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhdGFfaWNzaWRlX2FkZF9wb3J0cyhzdHJ1Y3QgcGF0YV9pY3NpZGVfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gaW5mby0+ZWM7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0OworCWludCBpOworCisJaWYgKGluZm8tPmlycWFkZHIpIHsKKwkJZWMtPmlycWFkZHIgPSBpbmZvLT5pcnFhZGRyOworCQllYy0+aXJxbWFzayA9IGluZm8tPmlycW1hc2s7CisJfQorCWlmIChpbmZvLT5pcnFvcHMpCisJCWVjYXJkX3NldGlycShlYywgaW5mby0+aXJxb3BzLCBpbmZvLT5zdGF0ZSk7CisKKwkvKgorCSAqIEJlIG9uIHRoZSBzYWZlIHNpZGUgLSBkaXNhYmxlIGludGVycnVwdHMKKwkgKi8KKwllYy0+b3BzLT5pcnFkaXNhYmxlKGVjLCBlYy0+aXJxKTsKKworCWhvc3QgPSBhdGFfaG9zdF9hbGxvYygmZWMtPmRldiwgaW5mby0+bnJfcG9ydHMpOworCWlmICghaG9zdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlob3N0LT5wcml2YXRlX2RhdGEgPSBpbmZvLT5zdGF0ZTsKKwlob3N0LT5mbGFncyA9IEFUQV9IT1NUX1NJTVBMRVg7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnJfcG9ydHM7IGkrKykgeworCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdC0+cG9ydHNbaV07CisKKwkJYXAtPnBpb19tYXNrID0gMHgxZjsKKwkJYXAtPm13ZG1hX21hc2sgPSBpbmZvLT5td2RtYV9tYXNrOworCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1Q7CisJCWFwLT5vcHMgPSAmcGF0YV9pY3NpZGVfcG9ydF9vcHM7CisKKwkJcGF0YV9pY3NpZGVfc2V0dXBfaW9hZGRyKCZhcC0+aW9hZGRyLCBpbmZvLT5iYXNlLCBpbmZvLT5wb3J0W2ldKTsKKwl9CisKKwlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgZWMtPmlycSwgYXRhX2ludGVycnVwdCwgMCwKKwkJCQkgJnBhdGFfaWNzaWRlX3NodCk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBwYXRhX2ljc2lkZV9wcm9iZShzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjLCBjb25zdCBzdHJ1Y3QgZWNhcmRfaWQgKmlkKQogewogCXN0cnVjdCBwYXRhX2ljc2lkZV9zdGF0ZSAqc3RhdGU7Ci0Jc3RydWN0IGF0YV9wcm9iZV9lbnQgYWU7CisJc3RydWN0IHBhdGFfaWNzaWRlX2luZm8gaW5mbzsKIAl2b2lkIF9faW9tZW0gKmlkbWVtOwogCWludCByZXQ7CiAKQEAgLTUyNiw3ICs1NTIsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0Jc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGF0YV9pY3NpZGVfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGRldm1fa3phbGxvYygmZWMtPmRldiwgc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghc3RhdGUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byByZWxlYXNlOwpAQCAtNTM1LDggKzU2MSw3IEBACiAJc3RhdGUtPnR5cGUgPSBJQ1NfVFlQRV9OT1RZUEU7CiAJc3RhdGUtPmRtYSA9IE5PX0RNQTsKIAotCWlkbWVtID0gaW9yZW1hcChlY2FyZF9yZXNvdXJjZV9zdGFydChlYywgRUNBUkRfUkVTX0lPQ0ZBU1QpLAotCQkJZWNhcmRfcmVzb3VyY2VfbGVuKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCkpOworCWlkbWVtID0gZWNhcmRtX2lvbWFwKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCwgMCwgMCk7CiAJaWYgKGlkbWVtKSB7CiAJCXVuc2lnbmVkIGludCB0eXBlOwogCkBAIC01NDQsMjEgKzU2OSwxNCBAQAogCQl0eXBlIHw9IChyZWFkYihpZG1lbSArIElDU19JREVOVF9PRkZTRVQgKyA0KSAmIDEpIDw8IDE7CiAJCXR5cGUgfD0gKHJlYWRiKGlkbWVtICsgSUNTX0lERU5UX09GRlNFVCArIDgpICYgMSkgPDwgMjsKIAkJdHlwZSB8PSAocmVhZGIoaWRtZW0gKyBJQ1NfSURFTlRfT0ZGU0VUICsgMTIpICYgMSkgPDwgMzsKLQkJaW91bm1hcChpZG1lbSk7CisJCWVjYXJkbV9pb3VubWFwKGVjLCBpZG1lbSk7CiAKIAkJc3RhdGUtPnR5cGUgPSB0eXBlOwogCX0KIAotCW1lbXNldCgmYWUsIDAsIHNpemVvZihhZSkpOwotCUlOSVRfTElTVF9IRUFEKCZhZS5ub2RlKTsKLQlhZS5kZXYgICAgICAgICAgPSAmZWMtPmRldjsKLQlhZS5wb3J0X29wcyAgICAgPSAmcGF0YV9pY3NpZGVfcG9ydF9vcHM7Ci0JYWUuc2h0ICAgICAgICAgID0gJnBhdGFfaWNzaWRlX3NodDsKLQlhZS5waW9fbWFzayAgICAgPSAweDFmOwotCWFlLmlycSAgICAgICAgICA9IGVjLT5pcnE7Ci0JYWUucG9ydF9mbGFncyAgID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1Q7Ci0JYWUuX2hvc3RfZmxhZ3MgID0gQVRBX0hPU1RfU0lNUExFWDsKLQlhZS5wcml2YXRlX2RhdGEgPSBzdGF0ZTsKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJaW5mby5zdGF0ZSA9IHN0YXRlOworCWluZm8uZWMgPSBlYzsKIAogCXN3aXRjaCAoc3RhdGUtPnR5cGUpIHsKIAljYXNlIElDU19UWVBFX0EzSU46CkBAIC01NzIsMTEgKzU5MCwxMSBAQAogCQlicmVhazsKIAogCWNhc2UgSUNTX1RZUEVfVjU6Ci0JCXJldCA9IHBhdGFfaWNzaWRlX3JlZ2lzdGVyX3Y1KCZhZSwgZWMpOworCQlyZXQgPSBwYXRhX2ljc2lkZV9yZWdpc3Rlcl92NSgmaW5mbyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJQ1NfVFlQRV9WNjoKLQkJcmV0ID0gcGF0YV9pY3NpZGVfcmVnaXN0ZXJfdjYoJmFlLCBlYyk7CisJCXJldCA9IHBhdGFfaWNzaWRlX3JlZ2lzdGVyX3Y2KCZpbmZvKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNTg2LDEyICs2MDQsMTEgQEAKIAl9CiAKIAlpZiAocmV0ID09IDApCi0JCXJldCA9IGF0YV9kZXZpY2VfYWRkKCZhZSkgPT0gMCA/IC1FTk9ERVYgOiAwOworCQlyZXQgPSBwYXRhX2ljc2lkZV9hZGRfcG9ydHMoJmluZm8pOwogCiAJaWYgKHJldCA9PSAwKQogCQlnb3RvIG91dDsKIAotCWtmcmVlKHN0YXRlKTsKICByZWxlYXNlOgogCWVjYXJkX3JlbGVhc2VfcmVzb3VyY2VzKGVjKTsKICBvdXQ6CkBAIC02MDksOCArNjI2LDcgQEAKIAkgKiB0aGlzIHJlZ2lzdGVyIHZpYSB0aGF0IHJlZ2lvbi4KIAkgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWYgKGVjLT5vcHMpCi0JCWVjLT5vcHMtPmlycWRpc2FibGUoZWMsIGVjLT5pcnEpOworCWVjLT5vcHMtPmlycWRpc2FibGUoZWMsIGVjLT5pcnEpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCS8qCkBAIC02MzgsMTcgKzY1NCw5IEBACiAJICogZG9uJ3QgTlVMTCBvdXQgdGhlIGRydmRhdGEgLSBkZXZyZXMvbGliYXRhIHdhbnRzIGl0CiAJICogdG8gZnJlZSB0aGUgYXRhX2hvc3Qgc3RydWN0dXJlLgogCSAqLwotCWVjLT5vcHMgPSBOVUxMOwotCWVjLT5pcnFfZGF0YSA9IE5VTEw7Ci0KIAlpZiAoc3RhdGUtPmRtYSAhPSBOT19ETUEpCiAJCWZyZWVfZG1hKHN0YXRlLT5kbWEpOwotCWlmIChzdGF0ZS0+aW9jX2Jhc2UpCi0JCWlvdW5tYXAoc3RhdGUtPmlvY19iYXNlKTsKLQlpZiAoc3RhdGUtPmlvY19iYXNlICE9IHN0YXRlLT5pcnFfcG9ydCkKLQkJaW91bm1hcChzdGF0ZS0+aXJxX3BvcnQpOwogCi0Ja2ZyZWUoc3RhdGUpOwogCWVjYXJkX3JlbGVhc2VfcmVzb3VyY2VzKGVjKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9pc2FwbnAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMKaW5kZXggZDA0MmVmZC4uMWY2NDdiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9pc2FwbnAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2lzYXBucC5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfaXNhcG5wIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yLjAiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIuMSIKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgaXNhcG5wX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jCmluZGV4IDAxMTMwNmUuLjk1YjBiYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYwpAQCAtMTksMTcgKzE5LDE4IEBACiAjaW5jbHVkZSA8bGludXgvYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaXQ4MjEzIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4wLjIiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjAuMyIKIAogLyoqCiAgKglpdDgyMTNfcHJlX3Jlc2V0CS0JY2hlY2sgZm9yIDQwLzgwIHBpbgogICoJQGFwOiBQb3J0CisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCiAgKglGaWx0ZXIgb3V0IHBvcnRzIGJ5IHRoZSBlbmFibGUgYml0cyBiZWZvcmUgZG9pbmcgdGhlIG5vcm1hbCByZXNldAogICoJYW5kIHByb2JlLgogICovCiAKLXN0YXRpYyBpbnQgaXQ4MjEzX3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBpdDgyMTNfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfYml0cyBpdDgyMTNfZW5hYmxlX2JpdHNbXSA9IHsKIAkJeyAweDQxVSwgMVUsIDB4ODBVTCwgMHg4MFVMIH0sCS8qIHBvcnQgMCAqLwpAQCAtMzcsNyArMzgsOCBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZpdDgyMTNfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOworCisJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXAsIGRlYWRsaW5lKTsKIH0KIAogLyoqCkBAIC0yNTUsMTAgKzI1Nyw2IEBACiAJLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAogCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBpdDgyMTNfb3BzID0gewpAQCAtMzEzLDcgKzMxMSw3IEBACiBzdGF0aWMgaW50IGl0ODIxM19pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5zaHQJCT0gJml0ODIxM19zaHQsCiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCkBAIC0zMjEsMTQgKzMxOSwxNCBAQAogCQkudWRtYV9tYXNrIAk9IDB4MWYsIC8qIFVETUEgMTAwICovCiAJCS5wb3J0X29wcwk9ICZpdDgyMTNfb3BzLAogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0gPSB7ICZpbmZvLCAmaW5mbyB9OworCS8qIEN1cnJlbnQgSVQ4MjEzIHN0dWZmIGlzIHNpbmdsZSBwb3J0ICovCisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgJmF0YV9kdW1teV9wb3J0X2luZm8gfTsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKIAkJCSAgICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKLQkvKiBDdXJyZW50IElUODIxMyBzdHVmZiBpcyBzaW5nbGUgcG9ydCAqLwotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBvcnRfaW5mbywgMSk7CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGl0ODIxM19wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYwppbmRleCBmMWY4Y2VjLi5iMzQ1NmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXRhLWl0ODIxeC5jIAktIElUODIxeCBQQVRBIGZvciBuZXcgQVRBIGxheWVyCisgKiBwYXRhX2l0ODIxeC5jIAktIElUODIxeCBQQVRBIGZvciBuZXcgQVRBIGxheWVyCiAgKgkJCSAgKEMpIDIwMDUgUmVkIEhhdCBJbmMKICAqCQkJICBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgogICoKQEAgLTY1LDcgKzY1LDYgQEAKICAqCiAgKiAgVE9ETwogICoJLQlBVEFQSSBhbmQgb3RoZXIgc3BlZWQgZmlsdGVyaW5nCi0gKgktCUNvbW1hbmQgZmlsdGVyIGluIHNtYXJ0IG1vZGUKICAqCS0JUkFJRCBjb25maWd1cmF0aW9uIGlvY3RscwogICovCiAKQEAgLTYyMCwxMCArNjE5LDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBpdDgyMXhfc21hcnRfcG9ydF9vcHMgPSB7CkBAIC03MjIsMTQgKzcxNywxNCBAQAogewogCXU4IGNvbmY7CiAKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19zbWFydCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19zbWFydCA9IHsKIAkJLnNodCA9ICZpdDgyMXhfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LAogCQkucG9ydF9vcHMgPSAmaXQ4MjF4X3NtYXJ0X3BvcnRfb3BzCiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19wYXNzdGhydSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19wYXNzdGhydSA9IHsKIAkJLnNodCA9ICZpdDgyMXhfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTczNyw4ICs3MzIsOCBAQAogCQkudWRtYV9tYXNrID0gMHg3ZiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9wYXNzdGhydV9wb3J0X29wcwogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl07CiAKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7IE5VTEwsIE5VTEwgfTsKIAlzdGF0aWMgY2hhciAqbW9kZVsyXSA9IHsgInBhc3MgdGhyb3VnaCIsICJzbWFydCIgfTsKIAogCS8qIEZvcmNlIHRoZSBjYXJkIGludG8gYnlwYXNzIG1vZGUgaWYgc28gcmVxdWVzdGVkICovCkBAIC03NTEsMTEgKzc0NiwxMSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBjb250cm9sbGVyIGluICVzIG1vZGUuXG4iLCBtb2RlW2NvbmZdKTsKIAlpZiAoY29uZiA9PSAwKQotCQlwb3J0X2luZm9bMF0gPSBwb3J0X2luZm9bMV0gPSAmaW5mb19wYXNzdGhydTsKKwkJcHBpWzBdID0gJmluZm9fcGFzc3RocnU7CiAJZWxzZQotCQlwb3J0X2luZm9bMF0gPSBwb3J0X2luZm9bMV0gPSAmaW5mb19zbWFydDsKKwkJcHBpWzBdID0gJmluZm9fc21hcnQ7CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwb3J0X2luZm8sIDIpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jCmluZGV4IDQyMGMzNDMuLjhkMmJjMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9peHA0eHhfY2YuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaXhwNHh4X2NmIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4xLjIiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjEuMyIKIAogc3RhdGljIGludCBpeHA0eHhfc2V0X21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKiplcnJvcikKIHsKQEAgLTMxLDcgKzMxLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykgewogCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gJmFwLT5kZXZpY2VbaV07Ci0JCWlmIChhdGFfZGV2X3JlYWR5KGRldikpIHsKKwkJaWYgKGF0YV9kZXZfZW5hYmxlZChkZXYpKSB7CiAJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgImNvbmZpZ3VyZWQgZm9yIFBJTzBcbiIpOwogCQkJZGV2LT5waW9fbW9kZSA9IFhGRVJfUElPXzA7CiAJCQlkZXYtPnhmZXJfbW9kZSA9IFhGRVJfUElPXzA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2ptaWNyb24uYyBiL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jCmluZGV4IDQzNzYzYzkuLjJhZjdmZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfam1pY3JvbiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMS40IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4xLjUiCiAKIHR5cGVkZWYgZW51bSB7CiAJUE9SVF9QQVRBMCA9IDAsCkBAIC0zMCwxNiArMzAsMTcgQEAKIC8qKgogICoJam1pY3Jvbl9wcmVfcmVzZXQJLQljaGVjayBmb3IgNDAvODAgcGluCiAgKglAYXA6IFBvcnQKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCVBlcmZvcm0gdGhlIFBBVEEgcG9ydCBzZXR1cCB3ZSBuZWVkLgotCisgKgogICoJT24gdGhlIEptaWNyb24gMzYxLzM2MyB0aGVyZSBpcyBhIHNpbmdsZSBQQVRBIHBvcnQgdGhhdCBjYW4gYmUgbWFwcGVkCiAgKgllaXRoZXIgYXMgcHJpbWFyeSBvciBzZWNvbmRhcnkgKG9yIG5laXRoZXIpLiBXZSBkb24ndCBkbyBhbnkgcG9saWN5CiAgKglhbmQgc2V0dXAgaGVyZS4gV2UgYXNzdW1lIHRoYXQgaGFzIGJlZW4gZG9uZSBieSBpbml0X29uZSBhbmQgdGhlCiAgKglCSU9TLgogICovCiAKLXN0YXRpYyBpbnQgam1pY3Jvbl9wcmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyBpbnQgam1pY3Jvbl9wcmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CiAJdTMyIGNvbnRyb2w7CkBAIC0xMDIsNyArMTAzLDcgQEAKIAkJYXAtPmNibCA9IEFUQV9DQkxfU0FUQTsKIAkJYnJlYWs7CiAJfQotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKKwlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCwgZGVhZGxpbmUpOwogfQogCiAvKioKQEAgLTEzNywxMCArMTM4LDYgQEAKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS8qIFVzZSBzdGFuZGFyZCBDSFMgbWFwcGluZyBydWxlcyAqLwogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAkJPSBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZCwKLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgam1pY3Jvbl9vcHMgPSB7CkBAIC0xOTQsNyArMTkxLDcgQEAKIAogc3RhdGljIGludCBqbWljcm9uX2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuc2h0CQk9ICZqbWljcm9uX3NodCwKIAkJLmZsYWdzCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAKQEAgLTIwNCw5ICsyMDEsOSBAQAogCiAJCS5wb3J0X29wcwk9ICZqbWljcm9uX29wcywKIAl9OwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0gPSB7ICZpbmZvLCAmaW5mbyB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBvcnRfaW5mbywgMik7CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGptaWNyb25fcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKaW5kZXggNzA3MDk5Mi4uZWRmZmMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCkBAIC02NCw3ICs2NCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfbGVnYWN5IgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC41LjQiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjUuNSIKIAogI2RlZmluZSBOUl9IT1NUIDYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9tYXJ2ZWxsLmMgYi9kcml2ZXJzL2F0YS9wYXRhX21hcnZlbGwuYwppbmRleCBkOWI5NGExLi5lZGJmZTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21hcnZlbGwuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21hcnZlbGwuYwpAQCAtMjUsMTEgKzI1LDEyIEBACiAvKioKICAqCW1hcnZlbGxfcHJlX3Jlc2V0CS0JY2hlY2sgZm9yIDQwLzgwIHBpbgogICoJQGFwOiBQb3J0CisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCiAgKglQZXJmb3JtIHRoZSBQQVRBIHBvcnQgc2V0dXAgd2UgbmVlZC4KICAqLwogCi1zdGF0aWMgaW50IG1hcnZlbGxfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IG1hcnZlbGxfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXUzMiBkZXZpY2VzOwpAQCAtNTIsNyArNTMsOCBAQAogCWlmICgocGRldi0+ZGV2aWNlID09IDB4NjE0NSkgJiYgKGFwLT5wb3J0X25vID09IDApICYmCiAJICAgICghKGRldmljZXMgJiAweDEwKSkpCS8qIFBBVEEgZW5hYmxlID8gKi8KIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOworCisJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXAsIGRlYWRsaW5lKTsKIH0KIAogc3RhdGljIGludCBtYXJ2ZWxsX2NhYmxlX2RldGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtNjcsNiArNjksNyBAQAogCWNhc2UgMTogLyogTGVnYWN5IFNBVEEgcG9ydCAqLwogCQlyZXR1cm4gQVRBX0NCTF9TQVRBOwogCX0KKwogCUJVRygpOwogCXJldHVybiAwOwkvKiBPdXIgQlVHIG1hY3JvIG5lZWRzIHRoZSByaWdodCBtYXJrdXAgKi8KIH0KQEAgLTEwNCwxMCArMTA3LDYgQEAKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS8qIFVzZSBzdGFuZGFyZCBDSFMgbWFwcGluZyBydWxlcyAqLwogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbWFydmVsbF9vcHMgPSB7CkBAIC0xNjIsNyArMTYxLDcgQEAKIAogc3RhdGljIGludCBtYXJ2ZWxsX2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuc2h0CQk9ICZtYXJ2ZWxsX3NodCwKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCkBAIC0xNzIsNyArMTcxLDcgQEAKIAogCQkucG9ydF9vcHMJPSAmbWFydmVsbF9vcHMsCiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19zYXRhID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX3NhdGEgPSB7CiAJCS5zaHQJCT0gJm1hcnZlbGxfc2h0LAogCQkvKiBTbGF2ZSBwb3NzaWJsZSBhcyBpdHMgbWFnaWNhbGx5IG1hcHBlZCBub3QgcmVhbCAqLwogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCkBAIC0xODMsMTMgKzE4MiwxMiBAQAogCiAJCS5wb3J0X29wcwk9ICZtYXJ2ZWxsX29wcywKIAl9OwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0gPSB7ICZpbmZvLCAmaW5mb19zYXRhIH07Ci0JaW50IG5fcG9ydCA9IDI7CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgJmluZm9fc2F0YSB9OwogCiAJaWYgKHBkZXYtPmRldmljZSA9PSAweDYxMDEpCi0JCW5fcG9ydCA9IDE7CisJCXBwaVsxXSA9ICZhdGFfZHVtbXlfcG9ydF9pbmZvOwogCi0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcG9ydF9pbmZvLCBuX3BvcnQpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYXJ2ZWxsX3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMKaW5kZXggOTU4N2E4OS4uMzY4ZmFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMKQEAgLTI4MCwxMCArMjgwLDYgQEAKIAkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCiAJLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG1wYzUyeHhfYXRhX3BvcnRfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCmluZGV4IDk4N2M1ZmEuLjRlYTQyODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKQEAgLTQ2LDE0ICs0NiwxNSBAQAogCVNFQ09OREFSWSA9ICgxIDw8IDE0KQogfTsKIAotc3RhdGljIGludCBtcGlpeF9wcmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyBpbnQgbXBpaXhfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgbXBpaXhfZW5hYmxlX2JpdHMgPSB7IDB4NkQsIDEsIDB4ODAsIDB4ODAgfTsKIAogCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJm1waWl4X2VuYWJsZV9iaXRzKSkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOworCisJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXAsIGRlYWRsaW5lKTsKIH0KIAogLyoqCkBAIC0xNjQsMTAgKzE2NSw2IEBACiAJLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbXBpaXhfcG9ydF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25ldGNlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCmluZGV4IGRiYmE1YjcuLjgxZjU2MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCkBAIC0zNywxMCArMzcsNiBAQAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLyogVXNlIHN0YW5kYXJkIENIUyBtYXBwaW5nIHJ1bGVzICovCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBuZXRjZWxsX29wcyA9IHsKQEAgLTk2LDcgKzkyLDcgQEAKIHN0YXRpYyBpbnQgbmV0Y2VsbF9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5zaHQJCT0gJm5ldGNlbGxfc2h0LAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJCS8qIEFjdHVhbGx5IHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZXNlIGFzIHRoZQpAQCAtMTA2LDcgKzEwMiw3IEBACiAJCS51ZG1hX21hc2sgCT0gMHgzZiwgLyogVURNQSAxMzMgKi8KIAkJLnBvcnRfb3BzCT0gJm5ldGNlbGxfb3BzLAogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0gPSB7ICZpbmZvLCAmaW5mbyB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bXSA9IHsgJmluZm8sIE5VTEwgfTsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKQEAgLTExNiw3ICsxMTIsNyBAQAogCWF0YV9wY2lfY2xlYXJfc2ltcGxleChwZGV2KTsKIAogCS8qIEFuZCBsZXQgdGhlIGxpYnJhcnkgY29kZSBkbyB0aGUgd29yayAqLwotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBvcnRfaW5mbywgMik7CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcG9ydF9pbmZvKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5ldGNlbGxfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTAuYwppbmRleCAwNzhhZWRhLi5lYTcwZWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTAuYwpAQCAtMzMsMTEgKzMzLDEyIEBACiAvKioKICAqCW5zODc0MTBfcHJlX3Jlc2V0CQktCXByb2JlIGJlZ2luCiAgKglAYXA6IEFUQSBwb3J0CisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCiAgKglDaGVjayBlbmFibGVkIHBvcnRzCiAgKi8KIAotc3RhdGljIGludCBuczg3NDEwX3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBuczg3NDEwX3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9iaXRzIG5zODc0MTBfZW5hYmxlX2JpdHNbXSA9IHsKQEAgLTQ3LDcgKzQ4LDggQEAKIAogCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJm5zODc0MTBfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOworCisJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXAsIGRlYWRsaW5lKTsKIH0KIAogLyoqCkBAIC0xNTYsMTAgKzE1OCw2IEBACiAJLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnM4NzQxMF9wb3J0X29wcyA9IHsKQEAgLTE5MywxNCArMTkxLDE0IEBACiAKIHN0YXRpYyBpbnQgbnM4NzQxMF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5zaHQgPSAmbnM4NzQxMF9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCQkucGlvX21hc2sgPSAweDBGLAogCQkucG9ydF9vcHMgPSAmbnM4NzQxMF9wb3J0X29wcwogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0gPSB7JmluZm8sICZpbmZvfTsKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBvcnRfaW5mbywgMik7CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcHBpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5zODc0MTBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKaW5kZXggZGVhNDY5MC4uMjljMjNkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKQEAgLTMwLDExICszMCwxMiBAQAogLyoqCiAgKglvbGRwaWl4X3ByZV9yZXNldAkJLQlwcm9iZSBiZWdpbgogICoJQGFwOiBBVEEgcG9ydAorICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCiAgKgogICoJU2V0IHVwIGNhYmxlIHR5cGUgYW5kIHVzZSBnZW5lcmljIHByb2JlIGluaXQKICAqLwogCi1zdGF0aWMgaW50IG9sZHBpaXhfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IG9sZHBpaXhfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgb2xkcGlpeF9lbmFibGVfYml0c1tdID0gewpAQCAtNDQsNyArNDUsOCBAQAogCiAJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmb2xkcGlpeF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CisKKwlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCwgZGVhZGxpbmUpOwogfQogCiAvKioKQEAgLTIzMiwxMCArMjM0LDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBvbGRwaWl4X3BhdGFfb3BzID0gewpAQCAtMjkxLDIwICsyODksMjAgQEAKIHN0YXRpYyBpbnQgb2xkcGlpeF9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5zaHQJCT0gJm9sZHBpaXhfc2h0LAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMS0yICovCiAJCS5wb3J0X29wcwk9ICZvbGRwaWl4X3BhdGFfb3BzLAogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0gPSB7ICZpbmZvLCAmaW5mbyB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKIAkJCSAgICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwb3J0X2luZm8sIDIpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvbGRwaWl4X3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jIGIvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMKaW5kZXggMTNiNjNlMi4uMWM0NDY1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMKQEAgLTQ3LDExICs0NywxMiBAQAogLyoqCiAgKglvcHRpX3ByZV9yZXNldAkJLQlwcm9iZSBiZWdpbgogICoJQGFwOiBBVEEgcG9ydAorICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCiAgKgogICoJU2V0IHVwIGNhYmxlIHR5cGUgYW5kIHVzZSBnZW5lcmljIHByb2JlIGluaXQKICAqLwogCi1zdGF0aWMgaW50IG9wdGlfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IG9wdGlfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgb3B0aV9lbmFibGVfYml0c1tdID0gewpAQCAtNjEsNyArNjIsOCBAQAogCiAJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmb3B0aV9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CisKKwlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCwgZGVhZGxpbmUpOwogfQogCiAvKioKQEAgLTE3NywxMCArMTc5LDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBvcHRpX3BvcnRfb3BzID0gewpAQCAtMjE4LDE5ICsyMTYsMTkgQEAKIAogc3RhdGljIGludCBvcHRpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLnNodCA9ICZvcHRpX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5wb3J0X29wcyA9ICZvcHRpX3BvcnRfb3BzCiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1syXSA9IHsgJmluZm8sICZpbmZvIH07CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBvcnRfaW5mbywgMik7CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwcGkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3B0aVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpZG1hLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYwppbmRleCBiNzBlMDRjLi4zMDkzYjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYwpAQCAtNDgsMTEgKzQ4LDEyIEBACiAvKioKICAqCW9wdGlkbWFfcHJlX3Jlc2V0CQktCXByb2JlIGJlZ2luCiAgKglAYXA6IEFUQSBwb3J0CisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCiAgKglTZXQgdXAgY2FibGUgdHlwZSBhbmQgdXNlIGdlbmVyaWMgcHJvYmUgaW5pdAogICovCiAKLXN0YXRpYyBpbnQgb3B0aWRtYV9wcmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyBpbnQgb3B0aWRtYV9wcmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfYml0cyBvcHRpZG1hX2VuYWJsZV9iaXRzID0gewpAQCAtNjIsNyArNjMsNyBAQAogCWlmIChhcC0+cG9ydF9ubyAmJiAhcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJm9wdGlkbWFfZW5hYmxlX2JpdHMpKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKKwlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCwgZGVhZGxpbmUpOwogfQogCiAvKioKQEAgLTM2MiwxMCArMzYzLDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBvcHRpZG1hX3BvcnRfb3BzID0gewpAQCAtNDg1LDE0ICs0ODIsMTQgQEAKIAogc3RhdGljIGludCBvcHRpZG1hX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb184MmM3MDAgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fODJjNzAwID0gewogCQkuc2h0ID0gJm9wdGlkbWFfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LAogCQkucG9ydF9vcHMgPSAmb3B0aWRtYV9wb3J0X29wcwogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fODJjNzAwX3VkbWEgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fODJjNzAwX3VkbWEgPSB7CiAJCS5zaHQgPSAmb3B0aWRtYV9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCQkucGlvX21hc2sgPSAweDFmLApAQCAtNTAwLDggKzQ5Nyw3IEBACiAJCS51ZG1hX21hc2sgPSAweDA3LAogCQkucG9ydF9vcHMgPSAmb3B0aXBsdXNfcG9ydF9vcHMKIAl9OwotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydF9pbmZvWzJdOwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICppbmZvID0gJmluZm9fODJjNzAwOworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm9fODJjNzAwLCBOVUxMIH07CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQpAQCAtNTEzLDEwICs1MDksOSBAQAogCXBjaV9jbG9jayA9IGluYigweDFGNSkgJiAxOwkJLyogMCA9IDMzTWh6LCAxID0gMjVNaHogKi8KIAogCWlmIChvcHRpcGx1c193aXRoX3VkbWEoZGV2KSkKLQkJaW5mbyA9ICZpbmZvXzgyYzcwMF91ZG1hOworCQlwcGlbMF0gPSAmaW5mb184MmM3MDBfdWRtYTsKIAotCXBvcnRfaW5mb1swXSA9IHBvcnRfaW5mb1sxXSA9IGluZm87Ci0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwb3J0X2luZm8sIDIpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcHBpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9wdGlkbWFbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCmluZGV4IDc1ZGM4NDcuLjRkNDRjNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwpAQCAtMzU3LDYgKzM1Nyw3IEBACiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDBhLCAweDAwMDApLAkvKiBJLU8gRGF0YSBDRkEgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwMWMsIDB4MDAwMSksCS8qIE1pdHN1YmlzaGkgQ0ZBICovCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDMyLCAweDA3MDQpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDAzMiwgMHgyOTA0KSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwNDUsIDB4MDQwMSksCS8qIFNhbkRpc2sgQ0ZBICovCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDk4LCAweDAwMDApLAkvKiBUb3NoaWJhICovCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMGE0LCAweDAwMmQpLApAQCAtMzk2LDYgKzM5Nyw3IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlRPU0hJQkEiLCAiTUsyMDAxTVBMIiwgMHhiNDU4NWExYSwgMHgzNDg5ZTAwMyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMSgiVFJBTlNDRU5EICAgIDUxMk0gICAiLCAweGQwOTA5NDQzKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiVFJBTlNDRU5EIiwgIlRTMUdDRjgwIiwgMHg3MDliMWJmMSwgMHgyYTU0ZDRiMSksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlRSQU5TQ0VORCIsICJUUzJHQ0YxMjAiLCAweDcwOWIxYmYxLCAweDk2OWFhNGYyKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiVFJBTlNDRU5EIiwgIlRTNEdDRjEyMCIsIDB4NzA5YjFiZjEsIDB4ZjU0YTkxYzgpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJXSVQiLCAiSURFMTYiLCAweDI0NGU1OTk0LCAweDNlMjMyODUyKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiV0VJREEiLCAiVFdUVEkiLCAweGNjN2NmNjljLCAweDIxMmJiOTE4KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYwppbmRleCBhNjFjYmMxLi4wZDJjYzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCkBAIC0zMDEsNiArMzAxLDcgQEAKIC8qKgogICoJcGRjMjAyN3hfcHJlcmVzZXQgLSBwcmVyZXNldCBmb3IgUEFUQSBob3N0IGNvbnRyb2xsZXIKICAqCUBhcDogVGFyZ2V0IHBvcnQKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCVByb2JlaW5pdCBpbmNsdWRpbmcgY2FibGUgZGV0ZWN0aW9uLgogICoKQEAgLTMwOCwxMiArMzA5LDEyIEBACiAgKglOb25lIChpbmhlcml0ZWQgZnJvbSBjYWxsZXIpLgogICovCiAKLXN0YXRpYyBpbnQgcGRjMjAyN3hfcHJlcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyBpbnQgcGRjMjAyN3hfcHJlcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAkvKiBDaGVjayB3aGV0aGVyIHBvcnQgZW5hYmxlZCAqLwogCWlmICghcGRjMjAyN3hfcG9ydF9lbmFibGVkKGFwKSkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOworCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwLCBkZWFkbGluZSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMKaW5kZXggZWU2MzZiZS4uZWRiYWY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jCkBAIC0yNDQsMTAgKzI0NCw2IEBACiAJLnNsYXZlX2NvbmZpZ3VyZQk9IGF0YV9zY3NpX3NsYXZlX2NvbmZpZywKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGRjMjAyNHhfcG9ydF9vcHMgPSB7CkBAIC0zMjEsNyArMzE3LDcgQEAKIAogc3RhdGljIGludCBwZGMyMDJ4eF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bM10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bM10gPSB7CiAJCXsKIAkJCS5zaHQgPSAmcGRjMjAyeHhfc2h0LAogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCkBAIC0zNDgsOSArMzQ0LDcgQEAKIAkJfQogCiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1syXTsKLQotCXBvcnRfaW5mb1swXSA9IHBvcnRfaW5mb1sxXSA9ICZpbmZvW2lkLT5kcml2ZXJfZGF0YV07CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mb1tpZC0+ZHJpdmVyX2RhdGFdLCBOVUxMIH07CiAKIAlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjY1KSB7CiAJCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBkZXYtPmJ1cy0+c2VsZjsKQEAgLTM2Miw3ICszNTYsNyBAQAogCQkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcG9ydF9pbmZvLCAyKTsKKwlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBwaSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZGMyMDJ4eFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jCmluZGV4IGEwYTY1MGMuLmNiYjc4NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BsYXRmb3JtLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYXRhX3BsYXRmb3JtLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfcGxhdGZvcm0iCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjEuMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMCIKIAogc3RhdGljIGludCBwaW9fbWFzayA9IDE7CiAKQEAgLTQ4LDYgKzQ4LDggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhdGFfZHVtbXlfcmV0MChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQl7IHJldHVybiAwOyB9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBhdGFfcGxhdGZvcm1fc2h0ID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKQEAgLTkxLDcgKzkzLDcgQEAKIAkuaXJxX29uCQkJPSBhdGFfaXJxX29uLAogCS5pcnFfYWNrCQk9IGF0YV9pcnFfYWNrLAogCi0JLnBvcnRfc3RhcnQJCT0gYXRhX3BvcnRfc3RhcnQsCisJLnBvcnRfc3RhcnQJCT0gYXRhX2R1bW15X3JldDAsCiB9OwogCiBzdGF0aWMgdm9pZCBwYXRhX3BsYXRmb3JtX3NldHVwX3BvcnQoc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9xZGkuYwppbmRleCAyNzY4NWNlLi4xOTk4YzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9xZGkiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuMCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy4xIgogCiAjZGVmaW5lIE5SX0hPU1QgNAkvKiBUd28gNjU4MHMgKi8KIApAQCAtMzc1LDcgKzM3NSw3IEBACiAJCQkJcmVzID0gaW5iKHBvcnQgKyAzKTsKIAkJCQlpZiAocmVzICYgMSkgewogCQkJCQkvKiBTaW5nbGUgY2hhbm5lbCBtb2RlICovCi0JCQkJCWlmIChxZGlfaW5pdF9vbmUocG9ydCwgNjU4MCwgaWRlX3BvcnRbciAmIDB4MDFdLCBpZGVfaXJxW3IgJiAweDAxXSwgciAmIDB4MDQpKQorCQkJCQlpZiAocWRpX2luaXRfb25lKHBvcnQsIDY1ODAsIGlkZV9wb3J0W3IgJiAweDAxXSwgaWRlX2lycVtyICYgMHgwMV0sIHIgJiAweDA0KSA9PSAwKQogCQkJCQkJY3QrKzsKIAkJCQl9IGVsc2UgewogCQkJCQkvKiBEdWFsIGNoYW5uZWwgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYwppbmRleCAxYzU0NjczLi5iYTk2YjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYwpAQCAtMjAwLDEwICsyMDAsNiBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLQkuc3VzcGVuZAkJPSBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZCwKLSNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHJhZGlzeXNfcGF0YV9vcHMgPSB7CkBAIC0yNTksNyArMjU1LDcgQEAKIHN0YXRpYyBpbnQgcmFkaXN5c19pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5zaHQJCT0gJnJhZGlzeXNfc2h0LAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwpAQCAtMjY3LDEzICsyNjMsMTMgQEAKIAkJLnVkbWFfbWFzawk9IDB4MTQsIC8qIFVETUEzMy82NiBvbmx5ICovCiAJCS5wb3J0X29wcwk9ICZyYWRpc3lzX3BhdGFfb3BzLAogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0gPSB7ICZpbmZvLCAmaW5mbyB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKIAkJCSAgICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwb3J0X2luZm8sIDIpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCByYWRpc3lzX3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCmluZGV4IDg1YzQ1MjkuLmEzNDg4YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX3J6MTAwMCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMi4zIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yLjQiCiAKIAogLyoqCkBAIC00MCw3ICs0MCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVRBX01BWF9ERVZJQ0VTOyBpKyspIHsKIAkJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9ICZhcC0+ZGV2aWNlW2ldOwotCQlpZiAoYXRhX2Rldl9yZWFkeShkZXYpKSB7CisJCWlmIChhdGFfZGV2X2VuYWJsZWQoZGV2KSkgewogCQkJLyogV2UgZG9uJ3QgcmVhbGx5IGNhcmUgKi8KIAkJCWRldi0+cGlvX21vZGUgPSBYRkVSX1BJT18wOwogCQkJZGV2LT54ZmVyX21vZGUgPSBYRkVSX1BJT18wOwpAQCAtNjksMTAgKzY5LDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyByejEwMDBfcG9ydF9vcHMgPSB7CkBAIC0xMzUsMjIgKzEzMSwyMCBAQAogc3RhdGljIGludCByejEwMDBfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5zaHQgPSAmcnoxMDAwX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5wb3J0X29wcyA9ICZyejEwMDBfcG9ydF9vcHMKIAl9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCi0JaWYgKHJ6MTAwMF9maWZvX2Rpc2FibGUocGRldikgPT0gMCkgewotCQlwb3J0X2luZm9bMF0gPSAmaW5mbzsKLQkJcG9ydF9pbmZvWzFdID0gJmluZm87Ci0JCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBvcnRfaW5mbywgMik7Ci0JfQorCWlmIChyejEwMDBfZmlmb19kaXNhYmxlKHBkZXYpID09IDApCisJCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CisKIAlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIGRpc2FibGUgcmVhZC1haGVhZCBvbiBjaGlwc2V0Li5cbiIpOwogCS8qIE5vdCBzYWZlIHRvIHVzZSBzbyBza2lwICovCiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYwppbmRleCA2NmU4ZmY0Li4xMjMzMDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkic2MxMjAwIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yLjQiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIuNSIKIAogI2RlZmluZSBTQzEyMDBfUkVWX0EJMHgwMAogI2RlZmluZSBTQzEyMDBfUkVWX0IxCTB4MDEKQEAgLTE5NCwxMCArMTk0LDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzYzEyMDBfcG9ydF9vcHMgPSB7CkBAIC0yNDcsNyArMjQzLDcgQEAKIAogc3RhdGljIGludCBzYzEyMDBfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuc2h0ID0gJnNjMTIwMF9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1N8QVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTI1NSwxMCArMjUxLDEwIEBACiAJCS51ZG1hX21hc2sgPSAweDA3LAogCQkucG9ydF9vcHMgPSAmc2MxMjAwX3BvcnRfb3BzCiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1syXSA9IHsgJmluZm8sICZpbmZvIH07Ci0KIAkvKiBDYW4ndCBlbmFibGUgcG9ydCAyIHlldCwgc2VlIHRvcCBjb21tZW50cyAqLwotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcG9ydF9pbmZvLCAxKTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCAmYXRhX2R1bW15X3BvcnRfaW5mbyB9OworCisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwcGkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2MxMjAwW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zY2MuYwppbmRleCA1ZGYzNTRkLi42MTUwMmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkJInBhdGFfc2NjIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjAuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIwLjIiCiAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1NDQ19BVEEJCTB4MDFiNAogCkBAIC00ODksMjMgKzQ4OSwyNiBAQAogICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfYnVzX3Bvc3RfcmVzZXQoKS4KICAqLwogCi1zdGF0aWMgdm9pZCBzY2NfYnVzX3Bvc3RfcmVzZXQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZtYXNrKQorc3RhdGljIGludCBzY2NfYnVzX3Bvc3RfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldm1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewogCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7CiAJdW5zaWduZWQgaW50IGRldjAgPSBkZXZtYXNrICYgKDEgPDwgMCk7CiAJdW5zaWduZWQgaW50IGRldjEgPSBkZXZtYXNrICYgKDEgPDwgMSk7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCByYzsKIAogCS8qIGlmIGRldmljZSAwIHdhcyBmb3VuZCBpbiBhdGFfZGV2Y2hrLCB3YWl0IGZvciBpdHMKIAkgKiBCU1kgYml0IHRvIGNsZWFyCiAJICovCi0JaWYgKGRldjApCi0JCWF0YV9idXN5X3NsZWVwKGFwLCBBVEFfVE1PVVRfQk9PVF9RVUlDSywgQVRBX1RNT1VUX0JPT1QpOworCWlmIChkZXYwKSB7CisJCXJjID0gYXRhX3dhaXRfcmVhZHkoYXAsIGRlYWRsaW5lKTsKKwkJaWYgKHJjICYmIHJjICE9IC1FTk9ERVYpCisJCQlyZXR1cm4gcmM7CisJfQogCiAJLyogaWYgZGV2aWNlIDEgd2FzIGZvdW5kIGluIGF0YV9kZXZjaGssIHdhaXQgZm9yCiAJICogcmVnaXN0ZXIgYWNjZXNzLCB0aGVuIHdhaXQgZm9yIEJTWSB0byBjbGVhcgogCSAqLwotCXRpbWVvdXQgPSBqaWZmaWVzICsgQVRBX1RNT1VUX0JPT1Q7CiAJd2hpbGUgKGRldjEpIHsKIAkJdTggbnNlY3QsIGxiYWw7CiAKQEAgLTUxNCwxNCArNTE3LDE1IEBACiAJCWxiYWwgPSBpbl9iZTMyKGlvYWRkci0+bGJhbF9hZGRyKTsKIAkJaWYgKChuc2VjdCA9PSAxKSAmJiAobGJhbCA9PSAxKSkKIAkJCWJyZWFrOwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJZGV2MSA9IDA7Ci0JCQlicmVhazsKLQkJfQorCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkZWFkbGluZSkpCisJCQlyZXR1cm4gLUVCVVNZOwogCQltc2xlZXAoNTApOwkvKiBnaXZlIGRyaXZlIGEgYnJlYXRoZXIgKi8KIAl9Ci0JaWYgKGRldjEpCi0JCWF0YV9idXN5X3NsZWVwKGFwLCBBVEFfVE1PVVRfQk9PVF9RVUlDSywgQVRBX1RNT1VUX0JPT1QpOworCWlmIChkZXYxKSB7CisJCXJjID0gYXRhX3dhaXRfcmVhZHkoYXAsIGRlYWRsaW5lKTsKKwkJaWYgKHJjICYmIHJjICE9IC1FTk9ERVYpCisJCQlyZXR1cm4gcmM7CisJfQogCiAJLyogaXMgYWxsIHRoaXMgcmVhbGx5IG5lY2Vzc2FyeT8gKi8KIAlhcC0+b3BzLT5kZXZfc2VsZWN0KGFwLCAwKTsKQEAgLTUyOSw2ICs1MzMsOCBAQAogCQlhcC0+b3BzLT5kZXZfc2VsZWN0KGFwLCAxKTsKIAlpZiAoZGV2MCkKIAkJYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgMCk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC01MzcsOCArNTQzLDggQEAKICAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX2J1c19zb2Z0cmVzZXQoKS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHNjY19idXNfc29mdHJlc2V0IChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGV2bWFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2NjX2J1c19zb2Z0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldm1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIgPSAmYXAtPmlvYWRkcjsKIApAQCAtNTcwLDcgKzU3Niw3IEBACiAJaWYgKHNjY19jaGVja19zdGF0dXMoYXApID09IDB4RkYpCiAJCXJldHVybiAwOwogCi0Jc2NjX2J1c19wb3N0X3Jlc2V0KGFwLCBkZXZtYXNrKTsKKwlzY2NfYnVzX3Bvc3RfcmVzZXQoYXAsIGRldm1hc2ssIGRlYWRsaW5lKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTc5LDExICs1ODUsMTMgQEAKICAqCXNjY19zdGRfc29mdHJlc2V0IC0gcmVzZXQgaG9zdCBwb3J0IHZpYSBBVEEgU1JTVAogICoJQGFwOiBwb3J0IHRvIHJlc2V0CiAgKglAY2xhc3NlczogcmVzdWx0aW5nIGNsYXNzZXMgb2YgYXR0YWNoZWQgZGV2aWNlcworICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCiAgKgogICoJTm90ZTogT3JpZ2luYWwgY29kZSBpcyBhdGFfc3RkX3NvZnRyZXNldCgpLgogICovCiAKLXN0YXRpYyBpbnQgc2NjX3N0ZF9zb2Z0cmVzZXQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3NlcykKK3N0YXRpYyBpbnQgc2NjX3N0ZF9zb2Z0cmVzZXQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJdW5zaWduZWQgaW50IHNsYXZlX3Bvc3NpYmxlID0gYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAl1bnNpZ25lZCBpbnQgZGV2bWFzayA9IDAsIGVycl9tYXNrOwpAQCAtNjA3LDcgKzYxNSw3IEBACiAKIAkvKiBpc3N1ZSBidXMgcmVzZXQgKi8KIAlEUFJJTlRLKCJhYm91dCB0byBzb2Z0cmVzZXQsIGRldm1hc2s9JXhcbiIsIGRldm1hc2spOwotCWVycl9tYXNrID0gc2NjX2J1c19zb2Z0cmVzZXQoYXAsIGRldm1hc2spOworCWVycl9tYXNrID0gc2NjX2J1c19zb2Z0cmVzZXQoYXAsIGRldm1hc2ssIGRlYWRsaW5lKTsKIAlpZiAoZXJyX21hc2spIHsKIAkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0VSUiwgIlNSU1QgZmFpbGVkIChlcnJfbWFzaz0weCV4KVxuIiwKIAkJCQllcnJfbWFzayk7CkBAIC02NzYsMTAgKzY4NCwxMSBAQAogCiAJCWlmIChyZWcgJiBJTlRTVFNfQk1TSU5UKSB7CiAJCQl1bnNpZ25lZCBpbnQgY2xhc3NlczsKKwkJCXVuc2lnbmVkIGxvbmcgZGVhZGxpbmUgPSBqaWZmaWVzICsgQVRBX1RNT1VUX0JPT1Q7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSW50ZXJuYWwgQnVzIEVycm9yXG4iLCBEUlZfTkFNRSk7CiAJCQlvdXRfYmUzMihibWlkX2Jhc2UgKyBTQ0NfRE1BX0lOVFNULCBJTlRTVFNfQk1TSU5UKTsKIAkJCS8qIFRCRDogU1cgcmVzZXQgKi8KLQkJCXNjY19zdGRfc29mdHJlc2V0KGFwLCAmY2xhc3Nlcyk7CisJCQlzY2Nfc3RkX3NvZnRyZXNldChhcCwgJmNsYXNzZXMsIGRlYWRsaW5lKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTg2MiwxMiArODcxLDEzIEBACiAvKioKICAqCXNjY19wYXRhX3ByZXJlc2V0IC0gcHJlcGFyZSBmb3IgcmVzZXQKICAqCUBhcDogQVRBIHBvcnQgdG8gYmUgcmVzZXQKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICovCiAKLXN0YXRpYyBpbnQgc2NjX3BhdGFfcHJlcmVzZXQgKHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IHNjY19wYXRhX3ByZXJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJYXAtPmNibCA9IEFUQV9DQkxfUEFUQTgwOwotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKKwlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCwgZGVhZGxpbmUpOwogfQogCiAvKioKQEAgLTk4NCwxMCArOTk0LDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzY2NfcGF0YV9vcHMgPSB7CkBAIC0xMTQyLDE0ICsxMTQ4LDE0IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJdW5zaWduZWQgaW50IGJvYXJkX2lkeCA9ICh1bnNpZ25lZCBpbnQpIGVudC0+ZHJpdmVyX2RhdGE7CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmc2NjX3BvcnRfaW5mb1tib2FyZF9pZHhdLCBOVUxMIH07Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7CiAJaW50IHJjOwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAogCQkJICAgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAotCWhvc3QgPSBhdGFfcG9ydF9hbGxvY19waW5mbygmcGRldi0+ZGV2LCBwcGksIDEpOworCWhvc3QgPSBhdGFfaG9zdF9hbGxvY19waW5mbygmcGRldi0+ZGV2LCBwcGksIDEpOwogCWlmICghaG9zdCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYwppbmRleCAzOTU2ZWYyLi4xZThmNDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfc2VydmVyd29ya3MiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjQuMCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuNC4xIgogCiAjZGVmaW5lIFNWV0tTX0NTQjVfUkVWSVNJT05fTkVXCTB4OTIgLyogbWluIFBDSV9SRVZJU0lPTl9JRCBmb3IgVURNQTUgKEEyLjApICovCiAjZGVmaW5lIFNWV0tTX0NTQjZfUkVWSVNJT04JMHhhMCAvKiBtaW4gUENJX1JFVklTSU9OX0lEIGZvciBVRE1BNCAoQTEuMCkgKi8KQEAgLTEzOSwxMiArMTM5LDE0IEBACiAvKioKICAqCXNlcnZlcndvcmtzX2NhYmxlX2RldGVjdAktCWNhYmxlIGRldGVjdGlvbgogICoJQGFwOiBBVEEgcG9ydAorICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCiAgKgogICoJUGVyZm9ybSBjYWJsZSBkZXRlY3Rpb24gYWNjb3JkaW5nIHRvIHRoZSBkZXZpY2UgYW5kIHN1YnZlbmRvcgogICoJaWRlbnRpZmljYXRpb25zCiAgKi8KIAotc3RhdGljIGludCBzZXJ2ZXJ3b3Jrc19jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCkgeworc3RhdGljIGludCBzZXJ2ZXJ3b3Jrc19jYWJsZV9kZXRlY3Qoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CiAJc3RydWN0IHN2X2NhYmxlX3RhYmxlICpjYiA9IGNhYmxlX2RldGVjdDsKIApAQCAtMzEzLDEwICszMTUsNiBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLQkuc3VzcGVuZAkJPSBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZCwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNlcnZlcndvcmtzX29zYjRfcG9ydF9vcHMgPSB7CkBAIC00NzcsOCArNDc1LDcgQEAKIAogc3RhdGljIGludCBzZXJ2ZXJ3b3Jrc19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCWludCBwb3J0cyA9IDI7Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bNF0gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bNF0gPSB7CiAJCXsgLyogT1NCNCAqLwogCQkJLnNodCA9ICZzZXJ2ZXJ3b3Jrc19zaHQsCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKQEAgLTUwOSw4ICs1MDYsNyBAQAogCQkJLnBvcnRfb3BzID0gJnNlcnZlcndvcmtzX2NzYl9wb3J0X29wcwogCQl9CiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1syXTsKLQlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqZGV2aW5mbyA9ICZpbmZvW2lkLT5kcml2ZXJfZGF0YV07CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mb1tpZC0+ZHJpdmVyX2RhdGFdLCBOVUxMIH07CiAKIAkvKiBGb3JjZSBtYXN0ZXIgbGF0ZW5jeSB0aW1lciB0byA2NCBQQ0kgY2xvY2tzICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweDQwKTsKQEAgLTUxOSw3ICs1MTUsNyBAQAogCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19PU0I0SURFKSB7CiAJCS8qIFNlbGVjdCBub24gVURNQSBjYXBhYmxlIE9TQjQgaWYgd2UgY2FuJ3QgZG8gZml4dXBzICovCiAJCWlmICggc2VydmVyd29ya3NfZml4dXBfb3NiNChwZGV2KSA8IDApCi0JCQlkZXZpbmZvID0gJmluZm9bMV07CisJCQlwcGlbMF0gPSAmaW5mb1sxXTsKIAl9CiAJLyogc2V0dXAgQ1NCNS9DU0I2IDogU291dGggQnJpZGdlIGFuZCBJREUgb3B0aW9uIFJBSUQgKi8KIAllbHNlIGlmICgocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNUlERSkgfHwKQEAgLTUyOSwxMSArNTI1LDExIEBACiAJCSAvKiBJZiB0aGUgcmV0dXJuZWQgYnRyIGlzIHRoZSBuZXdlciByZXZpc2lvbiB0aGVuCiAJCSAgICBzZWxlY3QgdGhlIHJpZ2h0IGluZm8gYmxvY2sgKi8KIAkJIGlmIChzZXJ2ZXJ3b3Jrc19maXh1cF9jc2IocGRldikgPT0gMykKLQkJIAlkZXZpbmZvID0gJmluZm9bM107CisJCSAJcHBpWzBdID0gJmluZm9bM107CiAKIAkJLyogSXMgdGhpcyB0aGUgM3JkIGNoYW5uZWwgQ1NCNiBJREUgPyAqLwogCQlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERTIpCi0JCQlwb3J0cyA9IDE7CisJCQlwcGlbMV0gPSAmYXRhX2R1bW15X3BvcnRfaW5mbzsKIAl9CiAJLyogc2V0dXAgSFQxMDAwRSAqLwogCWVsc2UgaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMTAwMElERSkKQEAgLTU0Miw4ICs1MzgsNyBAQAogCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1SURFKQogCQlhdGFfcGNpX2NsZWFyX3NpbXBsZXgocGRldik7CiAKLQlwb3J0X2luZm9bMF0gPSBwb3J0X2luZm9bMV0gPSBkZXZpbmZvOwotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBvcnRfaW5mbywgcG9ydHMpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCmluZGV4IDY3NzA4MjAuLjQ0MGUyY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwpAQCAtOTQsMTEgKzk0LDEzIEBACiAvKioKICAqCXNpbDY4MF9idXNfcmVzZXQJLQlyZXNldCB0aGUgU0lMNjgwIGJ1cwogICoJQGFwOiBBVEEgcG9ydCB0byByZXNldAorICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCiAgKgogICoJUGVyZm9ybSB0aGUgU0lMNjgwIGhvdXNla2VlcGluZyB3aGVuIGRvaW5nIGFuIEFUQSBidXMgcmVzZXQKICAqLwogCi1zdGF0aWMgaW50IHNpbDY4MF9idXNfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCx1bnNpZ25lZCBpbnQgKmNsYXNzZXMpCitzdGF0aWMgaW50IHNpbDY4MF9idXNfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCx1bnNpZ25lZCBpbnQgKmNsYXNzZXMsCisJCQkgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gc2lsNjgwX3NlbHJlZyhhcCwgMCk7CkBAIC0xMDgsNyArMTEwLDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgYWRkciwgcmVzZXQgfCAweDAzKTsKIAl1ZGVsYXkoMjUpOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBhZGRyLCByZXNldCk7Ci0JcmV0dXJuIGF0YV9zdGRfc29mdHJlc2V0KGFwLCBjbGFzc2VzKTsKKwlyZXR1cm4gYXRhX3N0ZF9zb2Z0cmVzZXQoYXAsIGNsYXNzZXMsIGRlYWRsaW5lKTsKIH0KIAogc3RhdGljIHZvaWQgc2lsNjgwX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKQEAgLTIzMCwxMCArMjMyLDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzaWw2ODBfcG9ydF9vcHMgPSB7CkBAIC0zNDMsNyArMzQxLDcgQEAKIAogc3RhdGljIGludCBzaWw2ODBfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLnNodCA9ICZzaWw2ODBfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTM1MSw3ICszNDksNyBAQAogCQkudWRtYV9tYXNrID0gMHg3ZiwKIAkJLnBvcnRfb3BzID0gJnNpbDY4MF9wb3J0X29wcwogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fc2xvdyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19zbG93ID0gewogCQkuc2h0ID0gJnNpbDY4MF9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCQkucGlvX21hc2sgPSAweDFmLApAQCAtMzU5LDcgKzM1Nyw3IEBACiAJCS51ZG1hX21hc2sgPSAweDNmLAogCQkucG9ydF9vcHMgPSAmc2lsNjgwX3BvcnRfb3BzCiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1syXSA9IHsmaW5mbywgJmluZm99OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCkBAIC0zNjgsMTIgKzM2NiwxMiBAQAogCXN3aXRjaChzaWw2ODBfaW5pdF9jaGlwKHBkZXYpKQogCXsKIAkJY2FzZSAwOgotCQkJcG9ydF9pbmZvWzBdID0gcG9ydF9pbmZvWzFdID0gJmluZm9fc2xvdzsKKwkJCXBwaVswXSA9ICZpbmZvX3Nsb3c7CiAJCQlicmVhazsKIAkJY2FzZSAweDMwOgogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBvcnRfaW5mbywgMik7CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKaW5kZXggYTNmYmNlZS4uZWMzYWU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCkBAIC0zOCw4ICszOCw4IEBACiAjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjUuMSIKIAogc3RydWN0IHNpc19jaGlwc2V0IHsKLQl1MTYgZGV2aWNlOwkJCS8qIFBDSSBob3N0IElEICovCi0Jc3RydWN0IGF0YV9wb3J0X2luZm8gKmluZm87CS8qIEluZm8gYmxvY2sgKi8KKwl1MTYgZGV2aWNlOwkJCQkvKiBQQ0kgaG9zdCBJRCAqLworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICppbmZvOwkvKiBJbmZvIGJsb2NrICovCiAJLyogUHJvYmFibHkgYWRkIGZhbWlseSwgY2FibGUgZGV0ZWN0IHR5cGUgZXRjIGhlcmUgdG8gY2xlYW4KIAkgICB1cCBjb2RlIGxhdGVyICovCiB9OwpAQCAtNzMsMTQgKzczLDE0IEBACiB9CiAKIC8qKgotICoJc2lzX3BvcnRfYmFzZQkJLQlyZXR1cm4gUENJIGNvbmZpZ3VyYXRpb24gYmFzZSBmb3IgZGV2CisgKglzaXNfb2xkX3BvcnRfYmFzZQkJLQlyZXR1cm4gUENJIGNvbmZpZ3VyYXRpb24gYmFzZSBmb3IgZGV2CiAgKglAYWRldjogZGV2aWNlCiAgKgogICoJUmV0dXJucyB0aGUgYmFzZSBvZiB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGZvciB0aGlzIHBvcnQKICAqCW51bWJlci4KICAqLwogCi1zdGF0aWMgaW50IHNpc19wb3J0X2Jhc2Uoc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCitzdGF0aWMgaW50IHNpc19vbGRfcG9ydF9iYXNlKHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCXJldHVybiAgMHg0MCArICg0ICogYWRldi0+YXAtPnBvcnRfbm8pICsgICgyICogYWRldi0+ZGV2bm8pOwogfQpAQCAtODgsNiArODgsNyBAQAogLyoqCiAgKglzaXNfMTMzX2NhYmxlX2RldGVjdAktCWNoZWNrIGZvciA0MC84MCBwaW4KICAqCUBhcDogUG9ydAorICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCiAgKgogICoJUGVyZm9ybSBjYWJsZSBkZXRlY3Rpb24gZm9yIHRoZSBsYXRlciBVRE1BMTMzIGNhcGFibGUKICAqCVNpUyBjaGlwc2V0LgpAQCAtMTA4LDYgKzEwOSw3IEBACiAvKioKICAqCXNpc182Nl9jYWJsZV9kZXRlY3QJLQljaGVjayBmb3IgNDAvODAgcGluCiAgKglAYXA6IFBvcnQKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCVBlcmZvcm0gY2FibGUgZGV0ZWN0aW9uIG9uIHRoZSBVRE1BNjYsIFVETUExMDAgYW5kIGVhcmx5IFVETUExMzMKICAqCVNpUyBJREUgY29udHJvbGxlcnMuCkBAIC0xMzAsMTEgKzEzMiwxMiBAQAogLyoqCiAgKglzaXNfcHJlX3Jlc2V0CQktCXByb2JlIGJlZ2luCiAgKglAYXA6IEFUQSBwb3J0CisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCiAgKglTZXQgdXAgY2FibGUgdHlwZSBhbmQgdXNlIGdlbmVyaWMgcHJvYmUgaW5pdAogICovCiAKLXN0YXRpYyBpbnQgc2lzX3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBzaXNfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfYml0cyBzaXNfZW5hYmxlX2JpdHNbXSA9IHsKIAkJeyAweDRhVSwgMVUsIDB4MDJVTCwgMHgwMlVMIH0sCS8qIHBvcnQgMCAqLwpAQCAtMTQ1LDcgKzE0OCw4IEBACiAKIAlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZzaXNfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOworCisJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXAsIGRlYWRsaW5lKTsKIH0KIAogCkBAIC0yMDcsNyArMjExLDcgQEAKIHN0YXRpYyB2b2lkIHNpc19vbGRfc2V0X3Bpb21vZGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2CT0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKLQlpbnQgcG9ydCA9IHNpc19wb3J0X2Jhc2UoYWRldik7CisJaW50IHBvcnQgPSBzaXNfb2xkX3BvcnRfYmFzZShhZGV2KTsKIAl1OCB0MSwgdDI7CiAJaW50IHNwZWVkID0gYWRldi0+cGlvX21vZGUgLSBYRkVSX1BJT18wOwogCkBAIC0yNDQsNyArMjQ4LDcgQEAKIHN0YXRpYyB2b2lkIHNpc18xMDBfc2V0X3Bpb21vZGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2CT0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKLQlpbnQgcG9ydCA9IHNpc19wb3J0X2Jhc2UoYWRldik7CisJaW50IHBvcnQgPSBzaXNfb2xkX3BvcnRfYmFzZShhZGV2KTsKIAlpbnQgc3BlZWQgPSBhZGV2LT5waW9fbW9kZSAtIFhGRVJfUElPXzA7CiAKIAljb25zdCB1OCBhY3RyZWNbXSA9IHsgMHgwMCwgMHg2NywgMHg0NCwgMHgzMywgMHgzMSB9OwpAQCAtMzI0LDcgKzMyOCw3IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYJPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCWludCBzcGVlZCA9IGFkZXYtPmRtYV9tb2RlIC0gWEZFUl9NV19ETUFfMDsKLQlpbnQgZHJpdmVfcGNpID0gc2lzX3BvcnRfYmFzZShhZGV2KTsKKwlpbnQgZHJpdmVfcGNpID0gc2lzX29sZF9wb3J0X2Jhc2UoYWRldik7CiAJdTE2IHRpbWluZzsKIAogCWNvbnN0IHUxNiBtd2RtYV9iaXRzW10gPSB7IDB4NzA3LCAweDIwMiwgMHgyMDIgfTsKQEAgLTM2Myw3ICszNjcsNyBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2CT0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAlpbnQgc3BlZWQgPSBhZGV2LT5kbWFfbW9kZSAtIFhGRVJfTVdfRE1BXzA7Ci0JaW50IGRyaXZlX3BjaSA9IHNpc19wb3J0X2Jhc2UoYWRldik7CisJaW50IGRyaXZlX3BjaSA9IHNpc19vbGRfcG9ydF9iYXNlKGFkZXYpOwogCXUxNiB0aW1pbmc7CiAKIAljb25zdCB1MTYgbXdkbWFfYml0c1tdID0geyAweDcwNywgMHgyMDIsIDB4MjAyIH07CkBAIC0zNzQsMTIgKzM3OCwxMiBAQAogCWlmIChhZGV2LT5kbWFfbW9kZSA8IFhGRVJfVURNQV8wKSB7CiAJCS8qIGJpdHMgMy0wIGhvbGQgcmVjb3ZlcnkgdGltaW5nIGJpdHMgOC0xMCBhY3RpdmUgdGltaW5nIGFuZAogCQkgICB0aGUgaGlnZXIgYml0cyBhcmUgZGVwZW5kYW50IG9uIHRoZSBkZXZpY2UsIGJpdCAxNSB1ZG1hICovCi0JCXRpbWluZyAmPSB+IDB4ODcwRjsKKwkJdGltaW5nICY9IH4weDg3MEY7CiAJCXRpbWluZyB8PSBtd2RtYV9iaXRzW3NwZWVkXTsKIAl9IGVsc2UgewogCQkvKiBCaXQgMTUgaXMgVURNQSBvbi9vZmYsIGJpdCAxMi0xNCBhcmUgY3ljbGUgdGltZSAqLwogCQlzcGVlZCA9IGFkZXYtPmRtYV9tb2RlIC0gWEZFUl9VRE1BXzA7Ci0JCXRpbWluZyAmPSB+MHg2MDAwOworCQl0aW1pbmcgJj0gfjB4RjAwMDsKIAkJdGltaW5nIHw9IHVkbWFfYml0c1tzcGVlZF07CiAJfQogCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBkcml2ZV9wY2ksIHRpbWluZyk7CkBAIC00MDEsMjIgKzQwNSwyMiBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2CT0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAlpbnQgc3BlZWQgPSBhZGV2LT5kbWFfbW9kZSAtIFhGRVJfTVdfRE1BXzA7Ci0JaW50IGRyaXZlX3BjaSA9IHNpc19wb3J0X2Jhc2UoYWRldik7Ci0JdTE2IHRpbWluZzsKKwlpbnQgZHJpdmVfcGNpID0gc2lzX29sZF9wb3J0X2Jhc2UoYWRldik7CisJdTggdGltaW5nOwogCi0JY29uc3QgdTE2IHVkbWFfYml0c1tdICA9IHsgMHg4QjAwLCAweDg3MDAsIDB4ODUwMCwgMHg4MzAwLCAweDgyMDAsIDB4ODEwMH07CisJY29uc3QgdTggdWRtYV9iaXRzW10gID0geyAweDhCLCAweDg3LCAweDg1LCAweDgzLCAweDgyLCAweDgxfTsKIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIGRyaXZlX3BjaSwgJnRpbWluZyk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgZHJpdmVfcGNpICsgMSwgJnRpbWluZyk7CiAKIAlpZiAoYWRldi0+ZG1hX21vZGUgPCBYRkVSX1VETUFfMCkgewogCQkvKiBOT1QgU1VQUE9SVEVEIFlFVDogTkVFRCBEQVRBIFNIRUVULiBESVRUTyBJTiBPTEQgRFJJVkVSICovCiAJfSBlbHNlIHsKLQkJLyogQml0IDE1IGlzIFVETUEgb24vb2ZmLCBiaXQgMTItMTQgYXJlIGN5Y2xlIHRpbWUgKi8KKwkJLyogQml0IDcgaXMgVURNQSBvbi9vZmYsIGJpdCAwLTMgYXJlIGN5Y2xlIHRpbWUgKi8KIAkJc3BlZWQgPSBhZGV2LT5kbWFfbW9kZSAtIFhGRVJfVURNQV8wOwotCQl0aW1pbmcgJj0gfjB4MEYwMDsKKwkJdGltaW5nICY9IH4weDhGOwogCQl0aW1pbmcgfD0gdWRtYV9iaXRzW3NwZWVkXTsKIAl9Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIGRyaXZlX3BjaSwgdGltaW5nKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgZHJpdmVfcGNpICsgMSwgdGltaW5nKTsKIH0KIAogLyoqCkBAIC00MzYsMjIgKzQ0MCwyMiBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2CT0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAlpbnQgc3BlZWQgPSBhZGV2LT5kbWFfbW9kZSAtIFhGRVJfTVdfRE1BXzA7Ci0JaW50IGRyaXZlX3BjaSA9IHNpc19wb3J0X2Jhc2UoYWRldik7Ci0JdTE2IHRpbWluZzsKKwlpbnQgZHJpdmVfcGNpID0gc2lzX29sZF9wb3J0X2Jhc2UoYWRldik7CisJdTggdGltaW5nOworCS8qIExvdyA0IGJpdHMgYXJlIHRpbWluZyAqLworCXN0YXRpYyBjb25zdCB1OCB1ZG1hX2JpdHNbXSAgPSB7IDB4OEYsIDB4OEEsIDB4ODcsIDB4ODUsIDB4ODMsIDB4ODIsIDB4ODF9OwogCi0Jc3RhdGljIGNvbnN0IHUxNiB1ZG1hX2JpdHNbXSAgPSB7IDB4OEYwMCwgMHg4QTAwLCAweDg3MDAsIDB4ODUwMCwgMHg4MzAwLCAweDgyMDAsIDB4ODEwMH07Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBkcml2ZV9wY2ksICZ0aW1pbmcpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGRyaXZlX3BjaSArIDEsICZ0aW1pbmcpOwogCiAJaWYgKGFkZXYtPmRtYV9tb2RlIDwgWEZFUl9VRE1BXzApIHsKIAkJLyogTk9UIFNVUFBPUlRFRCBZRVQ6IE5FRUQgREFUQSBTSEVFVC4gRElUVE8gSU4gT0xEIERSSVZFUiAqLwogCX0gZWxzZSB7Ci0JCS8qIEJpdCAxNSBpcyBVRE1BIG9uL29mZiwgYml0IDEyLTE0IGFyZSBjeWNsZSB0aW1lICovCisJCS8qIEJpdCA3IGlzIFVETUEgb24vb2ZmLCBiaXQgMC0zIGFyZSBjeWNsZSB0aW1lICovCiAJCXNwZWVkID0gYWRldi0+ZG1hX21vZGUgLSBYRkVSX1VETUFfMDsKLQkJdGltaW5nICY9IH4weDBGMDA7CisJCXRpbWluZyAmPSB+MHg4RjsKIAkJdGltaW5nIHw9IHVkbWFfYml0c1tzcGVlZF07CiAJfQotCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBkcml2ZV9wY2ksIHRpbWluZyk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIGRyaXZlX3BjaSArIDEsIHRpbWluZyk7CiB9CiAKIC8qKgpAQCAtNTIwLDEwICs1MjQsNiBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLQkuc3VzcGVuZAkJPSBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZCwKLSNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpc18xMzNfb3BzID0gewpAQCAtNjk2LDcgKzY5Niw3IEBACiAJLnBvcnRfc3RhcnQJCT0gYXRhX3BvcnRfc3RhcnQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8gPSB7CiAJLnNodAkJPSAmc2lzX3NodCwKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCkBAIC03MDQsNyArNzA0LDcgQEAKIAkudWRtYV9tYXNrCT0gMCwKIAkucG9ydF9vcHMJPSAmc2lzX29sZF9vcHMsCiB9Owotc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMzMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8zMyA9IHsKIAkuc2h0CQk9ICZzaXNfc2h0LAogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KQEAgLTcxMiwzNSArNzEyLDM1IEBACiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwJLyogVURNQSAzMyAqLwogCS5wb3J0X29wcwk9ICZzaXNfb2xkX29wcywKIH07Ci1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm82NiA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzY2ID0gewogCS5zaHQJCT0gJnNpc19zaHQsCiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCS8qIFVETUEgNjYgKi8KIAkucG9ydF9vcHMJPSAmc2lzXzY2X29wcywKIH07Ci1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMDAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMDAgPSB7CiAJLnNodAkJPSAmc2lzX3NodCwKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkucG9ydF9vcHMJPSAmc2lzXzEwMF9vcHMsCiB9Owotc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwX2Vhcmx5ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwX2Vhcmx5ID0gewogCS5zaHQJCT0gJnNpc19zaHQsCiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJLnBvcnRfb3BzCT0gJnNpc182Nl9vcHMsCiB9Owotc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzMgPSB7Citjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzMyA9IHsKIAkuc2h0CQk9ICZzaXNfc2h0LAogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX29wcywKIH07Ci1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzNfZWFybHkgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzNfZWFybHkgPSB7CiAJLnNodAkJPSAmc2lzX3NodCwKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCkBAIC04MjMsOCArODIzLDggQEAKIHN0YXRpYyBpbnQgc2lzX2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1syXTsKLQlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydDsKKwlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwb3J0OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJnBvcnQsIE5VTEwgfTsKIAlzdHJ1Y3QgcGNpX2RldiAqaG9zdCA9IE5VTEw7CiAJc3RydWN0IHNpc19jaGlwc2V0ICpjaGlwc2V0ID0gTlVMTDsKIAlzdHJ1Y3Qgc2lzX2NoaXBzZXQgKnNldHM7CkBAIC05NjQsMTMgKzk2NCwxMiBAQAogCWlmIChjaGlwc2V0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcG9ydCA9IGNoaXBzZXQtPmluZm87Ci0JcG9ydC0+cHJpdmF0ZV9kYXRhID0gY2hpcHNldDsKKwlwb3J0ID0gKmNoaXBzZXQtPmluZm87CisJcG9ydC5wcml2YXRlX2RhdGEgPSBjaGlwc2V0OwogCiAJc2lzX2ZpeHVwKHBkZXYsIGNoaXBzZXQpOwogCi0JcG9ydF9pbmZvWzBdID0gcG9ydF9pbmZvWzFdID0gcG9ydDsKLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwb3J0X2luZm8sIDIpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXNfcGNpX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCmluZGV4IGRhOWUyMmIuLmU1YWFlYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9zbDgyYzEwNSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy4wIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjEiCiAKIGVudW0gewogCS8qCkBAIC00NCwxMSArNDQsMTIgQEAKIC8qKgogICoJc2w4MmMxMDVfcHJlX3Jlc2V0CQktCXByb2JlIGJlZ2luCiAgKglAYXA6IEFUQSBwb3J0CisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCiAgKglTZXQgdXAgY2FibGUgdHlwZSBhbmQgdXNlIGdlbmVyaWMgcHJvYmUgaW5pdAogICovCiAKLXN0YXRpYyBpbnQgc2w4MmMxMDVfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IHNsODJjMTA1X3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgc2w4MmMxMDVfZW5hYmxlX2JpdHNbXSA9IHsKIAkJeyAweDQwLCAxLCAweDAxLCAweDAxIH0sCkBAIC01OCw3ICs1OSw3IEBACiAKIAlpZiAoYXAtPnBvcnRfbm8gJiYgIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZzbDgyYzEwNV9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CisJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXAsIGRlYWRsaW5lKTsKIH0KIAogCkBAIC0zMDAsMjAgKzMwMSwyMiBAQAogCiBzdGF0aWMgaW50IHNsODJjMTA1X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19kbWEgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fZG1hID0gewogCQkuc2h0ID0gJnNsODJjMTA1X3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAJCS5waW9fbWFzayA9IDB4MWYsCiAJCS5td2RtYV9tYXNrID0gMHgwNywKIAkJLnBvcnRfb3BzID0gJnNsODJjMTA1X3BvcnRfb3BzCiAJfTsKLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKIAkJLnNodCA9ICZzbDgyYzEwNV9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAogCQkucGlvX21hc2sgPSAweDFmLAogCQkucG9ydF9vcHMgPSAmc2w4MmMxMDVfcG9ydF9vcHMKIAl9OwotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydF9pbmZvWzJdID0geyAmaW5mb19lYXJseSwgJmluZm9fZWFybHkgfTsKKwkvKiBmb3Igbm93IHVzZSBvbmx5IHRoZSBmaXJzdCBwb3J0ICovCisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mb19lYXJseSwKKwkJCQkJICAgICAgICZhdGFfZHVtbXlfcG9ydF9pbmZvIH07CiAJdTMyIHZhbDsKIAlpbnQgcmV2OwogCkBAIC0zMjMsMTcgKzMyNiwxNCBAQAogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJmRldi0+ZGV2LCAicGF0YV9zbDgyYzEwNTogVW5hYmxlIHRvIGZpbmQgYnJpZGdlLCBkaXNhYmxpbmcgRE1BLlxuIik7CiAJZWxzZSBpZiAocmV2IDw9IDUpCiAJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmZGV2LT5kZXYsICJwYXRhX3NsODJjMTA1OiBFYXJseSBicmlkZ2UgcmV2aXNpb24sIG5vIERNQSBhdmFpbGFibGUuXG4iKTsKLQllbHNlIHsKLQkJcG9ydF9pbmZvWzBdID0gJmluZm9fZG1hOwotCQlwb3J0X2luZm9bMV0gPSAmaW5mb19kbWE7Ci0JfQorCWVsc2UKKwkJcHBpWzBdID0gJmluZm9fZG1hOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgJnZhbCk7CiAJdmFsIHw9IENUUkxfUDBFTiB8IENUUkxfUDBGMTYgfCBDVFJMX1AxRjE2OwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQwLCB2YWwpOwogCi0KLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBvcnRfaW5mbywgMSk7IC8qIEZvciBub3cgKi8KKwlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShkZXYsIHBwaSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbDgyYzEwNVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwppbmRleCBlNjE4ZmZkLi5iMWQzMDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwpAQCAtNDgsMTEgKzQ4LDEyIEBACiAvKioKICAqCXRyaWZsZXhfcHJlcmVzZXQJCS0JcHJvYmUgYmVnaW4KICAqCUBhcDogQVRBIHBvcnQKKyAqCUBkZWFkbGluZTogZGVhZGxpbmUgamlmZmllcyBmb3IgdGhlIG9wZXJhdGlvbgogICoKICAqCVNldCB1cCBjYWJsZSB0eXBlIGFuZCB1c2UgZ2VuZXJpYyBwcm9iZSBpbml0CiAgKi8KIAotc3RhdGljIGludCB0cmlmbGV4X3ByZXJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IHRyaWZsZXhfcHJlcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9iaXRzIHRyaWZsZXhfZW5hYmxlX2JpdHNbXSA9IHsKIAkJeyAweDgwLCAxLCAweDAxLCAweDAxIH0sCkBAIC02Myw3ICs2NCw4IEBACiAKIAlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZ0cmlmbGV4X2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCiAJCXJldHVybiAtRU5PRU5UOwotCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKKworCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwLCBkZWFkbGluZSk7CiB9CiAKIApAQCAtMTkyLDEwICsxOTQsNiBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLQkuc3VzcGVuZAkJPSBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZCwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHRyaWZsZXhfcG9ydF9vcHMgPSB7CkBAIC0yMzUsMjAgKzIzMywyMCBAQAogCiBzdGF0aWMgaW50IHRyaWZsZXhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuc2h0ID0gJnRyaWZsZXhfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU1JTVCwKIAkJLnBpb19tYXNrID0gMHgxZiwKIAkJLm13ZG1hX21hc2sgPSAweDA3LAogCQkucG9ydF9vcHMgPSAmdHJpZmxleF9wb3J0X29wcwogCX07Ci0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl0gPSB7ICZpbmZvLCAmaW5mbyB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCi0JcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUoZGV2LCBwb3J0X2luZm8sIDIpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKGRldiwgcHBpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHRyaWZsZXhbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IDk2YjcxNzkuLmE4NDYyZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV92aWEiCiAjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuMSIKQEAgLTEyMiw2ICsxMjMsMzEgQEAKIAl7IE5VTEwgfQogfTsKIAorCisvKgorICoJQ2FibGUgc3BlY2lhbCBjYXNlcworICovCisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBjYWJsZV9kbWlfdGFibGVbXSA9IHsKKwl7CisJCS5pZGVudCA9ICJBY2VyIEZlcnJhcmkgMzQwMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBY2VyLEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkZlcnJhcmkgMzQwMCIpLAorCQl9LAorCX0sCisJeyB9Cit9OworCitzdGF0aWMgaW50IHZpYV9jYWJsZV9vdmVycmlkZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwkvKiBTeXN0ZW1zIGJ5IERNSSAqLworCWlmIChkbWlfY2hlY2tfc3lzdGVtKGNhYmxlX2RtaV90YWJsZSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisKIC8qKgogICoJdmlhX2NhYmxlX2RldGVjdAktCWNhYmxlIGRldGVjdGlvbgogICoJQGFwOiBBVEEgcG9ydApAQCAtMTM5LDYgKzE2NSw5IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXUzMiBhdGE2NjsKIAorCWlmICh2aWFfY2FibGVfb3ZlcnJpZGUocGRldikpCisJCXJldHVybiBBVEFfQ0JMX1BBVEE0MF9TSE9SVDsKKwogCS8qIEVhcmx5IGNoaXBzIGFyZSA0MCB3aXJlICovCiAJaWYgKChjb25maWctPmZsYWdzICYgVklBX1VETUEpIDwgVklBX1VETUFfNjYpCiAJCXJldHVybiBBVEFfQ0JMX1BBVEE0MDsKQEAgLTE1NCw3ICsxODMsNyBAQAogCXJldHVybiBBVEFfQ0JMX1BBVEE0MDsKIH0KIAotc3RhdGljIGludCB2aWFfcHJlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IHZpYV9wcmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAljb25zdCBzdHJ1Y3QgdmlhX2lzYV9icmlkZ2UgKmNvbmZpZyA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CiAKQEAgLTE2Nyw3ICsxOTYsOCBAQAogCQlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZ2aWFfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKIAkJCXJldHVybiAtRU5PRU5UOwogCX0KLQlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CisKKwlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCwgZGVhZGxpbmUpOwogfQogCiAKQEAgLTMwMCwxMCArMzMwLDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyB2aWFfcG9ydF9vcHMgPSB7CkBAIC00MjQsNyArNDUwLDcgQEAKIHN0YXRpYyBpbnQgdmlhX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJLyogRWFybHkgVklBIHdpdGhvdXQgVURNQSBzdXBwb3J0ICovCi0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV9td2RtYV9pbmZvID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfbXdkbWFfaW5mbyA9IHsKIAkJLnNodCA9ICZ2aWFfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU0VUWEZFUl9QT0xMSU5HLAogCQkucGlvX21hc2sgPSAweDFmLApAQCAtNDMyLDcgKzQ1OCw3IEBACiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHMKIAl9OwogCS8qIERpdHRvIHdpdGggSVJRIG1hc2tpbmcgcmVxdWlyZWQgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX213ZG1hX2luZm9fYm9ya2VkID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfbXdkbWFfaW5mb19ib3JrZWQgPSB7CiAJCS5zaHQgPSAmdmlhX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NFVFhGRVJfUE9MTElORywKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTQ0MCw3ICs0NjYsNyBAQAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzX25vaXJxLAogCX07CiAJLyogVklBIFVETUEgMzMgZGV2aWNlcyAoYW5kIGJvcmtlZCA2NikgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX3VkbWEzM19pbmZvID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfdWRtYTMzX2luZm8gPSB7CiAJCS5zaHQgPSAmdmlhX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NFVFhGRVJfUE9MTElORywKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTQ0OSw3ICs0NzUsNyBAQAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBWSUEgVURNQSA2NiBkZXZpY2VzICovCi0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hNjZfaW5mbyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX3VkbWE2Nl9pbmZvID0gewogCQkuc2h0ID0gJnZpYV9zaHQsCiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TRVRYRkVSX1BPTExJTkcsCiAJCS5waW9fbWFzayA9IDB4MWYsCkBAIC00NTgsNyArNDg0LDcgQEAKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CiAJLyogVklBIFVETUEgMTAwIGRldmljZXMgKi8KLQlzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX3VkbWExMDBfaW5mbyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX3VkbWExMDBfaW5mbyA9IHsKIAkJLnNodCA9ICZ2aWFfc2h0LAogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfU0VUWEZFUl9QT0xMSU5HLAogCQkucGlvX21hc2sgPSAweDFmLApAQCAtNDY3LDcgKzQ5Myw3IEBACiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHMKIAl9OwogCS8qIFVETUExMzMgd2l0aCBiYWQgQVNUIChBbGwgY3VycmVudCAxMzMpICovCi0Jc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMTMzX2luZm8gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMTMzX2luZm8gPSB7CiAJCS5zaHQgPSAmdmlhX3NodCwKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NFVFhGRVJfUE9MTElORywKIAkJLnBpb19tYXNrID0gMHgxZiwKQEAgLTQ3NSw3ICs1MDEsOCBAQAogCQkudWRtYV9tYXNrID0gMHg3ZiwJLyogRklYTUU6IHNob3VsZCBjaGVjayBub3J0aCBicmlkZ2UgKi8KIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07Ci0Jc3RydWN0IGF0YV9wb3J0X2luZm8gKnBvcnRfaW5mb1syXSwgKnR5cGU7CisJc3RydWN0IGF0YV9wb3J0X2luZm8gdHlwZTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZ0eXBlLCBOVUxMIH07CiAJc3RydWN0IHBjaV9kZXYgKmlzYSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IHZpYV9pc2FfYnJpZGdlICpjb25maWc7CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CkBAIC01MjAsMjUgKzU0NywyNSBAQAogCXN3aXRjaChjb25maWctPmZsYWdzICYgVklBX1VETUEpIHsKIAkJY2FzZSBWSUFfVURNQV9OT05FOgogCQkJaWYgKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfTk9fVU5NQVNLKQotCQkJCXR5cGUgPSAmdmlhX213ZG1hX2luZm9fYm9ya2VkOworCQkJCXR5cGUgPSB2aWFfbXdkbWFfaW5mb19ib3JrZWQ7CiAJCQllbHNlCi0JCQkJdHlwZSA9ICZ2aWFfbXdkbWFfaW5mbzsKKwkJCQl0eXBlID0gdmlhX213ZG1hX2luZm87CiAJCQlicmVhazsKIAkJY2FzZSBWSUFfVURNQV8zMzoKLQkJCXR5cGUgPSAmdmlhX3VkbWEzM19pbmZvOworCQkJdHlwZSA9IHZpYV91ZG1hMzNfaW5mbzsKIAkJCWJyZWFrOwogCQljYXNlIFZJQV9VRE1BXzY2OgotCQkJdHlwZSA9ICZ2aWFfdWRtYTY2X2luZm87CisJCQl0eXBlID0gdmlhX3VkbWE2Nl9pbmZvOwogCQkJLyogVGhlIDY2IE1IeiBkZXZpY2VzIHJlcXVpcmUgd2UgZW5hYmxlIHRoZSBjbG9jayAqLwogCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NTAsICZ0aW1pbmcpOwogCQkJdGltaW5nIHw9IDB4ODAwMDg7CiAJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NTAsIHRpbWluZyk7CiAJCQlicmVhazsKIAkJY2FzZSBWSUFfVURNQV8xMDA6Ci0JCQl0eXBlID0gJnZpYV91ZG1hMTAwX2luZm87CisJCQl0eXBlID0gdmlhX3VkbWExMDBfaW5mbzsKIAkJCWJyZWFrOwogCQljYXNlIFZJQV9VRE1BXzEzMzoKLQkJCXR5cGUgPSAmdmlhX3VkbWExMzNfaW5mbzsKKwkJCXR5cGUgPSB2aWFfdWRtYTEzM19pbmZvOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlXQVJOX09OKDEpOwpAQCAtNTUzLDEwICs1ODAsOSBAQAogCX0KIAogCS8qIFdlIGhhdmUgZXN0YWJsaXNoZWQgdGhlIGRldmljZSB0eXBlLCBub3cgZmlyZSBpdCB1cCAqLwotCXR5cGUtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopY29uZmlnOworCXR5cGUucHJpdmF0ZV9kYXRhID0gKHZvaWQgKiljb25maWc7CiAKLQlwb3J0X2luZm9bMF0gPSBwb3J0X2luZm9bMV0gPSB0eXBlOwotCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBvcnRfaW5mbywgMik7CisJcmV0dXJuIGF0YV9wY2lfaW5pdF9vbmUocGRldiwgcHBpKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpAQCAtNTk1LDEwICs2MjEsMTEgQEAKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdmlhW10gPSB7Ci0JeyBQQ0lfVkRFVklDRShWSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU3Nl8xKSwgfSwKLQl7IFBDSV9WREVWSUNFKFZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzEpLCB9LAotCXsgUENJX1ZERVZJQ0UoVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV82NDEwKSwgfSwKLQl7IFBDSV9WREVWSUNFKFZJQSwgUENJX0RFVklDRV9JRF9WSUFfU0FUQV9FSURFKSwgfSwKKwl7IFBDSV9WREVWSUNFKFZJQSwgMHgwNTcxKSwgfSwKKwl7IFBDSV9WREVWSUNFKFZJQSwgMHgwNTgxKSwgfSwKKwl7IFBDSV9WREVWSUNFKFZJQSwgMHgxNTcxKSwgfSwKKwl7IFBDSV9WREVWSUNFKFZJQSwgMHgzMTY0KSwgfSwKKwl7IFBDSV9WREVWSUNFKFZJQSwgMHg1MzI0KSwgfSwKIAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCmluZGV4IGNjNGFkMjcuLjgzYWJmZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfd2luYm9uZCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMC4yIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4wLjMiCiAKICNkZWZpbmUgTlJfSE9TVCA0CS8qIFR3byB3aW5ib25kIGNvbnRyb2xsZXJzLCB0d28gY2hhbm5lbHMgZWFjaCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jIGIvZHJpdmVycy9hdGEvcGRjX2FkbWEuYwppbmRleCA1MmI2OTUzLi5mMTJjMmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGRjX2FkbWEiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjA1IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4wNiIKIAogLyogbWFjcm8gdG8gY2FsY3VsYXRlIGJhc2UgYWRkcmVzcyBmb3IgQVRBIHJlZ3MgKi8KICNkZWZpbmUgQURNQV9BVEFfUkVHUyhiYXNlLHBvcnRfbm8pCSgoYmFzZSkgKyAoKHBvcnRfbm8pICogMHg0MCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMgYi9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMKaW5kZXggZjA5OWExZC4uMmQ4MGM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9pbmljMTYyeC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV9pbmljMTYyeCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMiIKIAogZW51bSB7CiAJTU1JT19CQVIJCT0gNSwKQEAgLTEzNSwxMCArMTM1LDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gaW5pY19zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLSNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IGludCBzY3JfbWFwW10gPSB7CkBAIC00MjAsNyArNDE2LDggQEAKICAqIFNSU1QgYW5kIFNDb250cm9sIGhhcmRyZXNldCBkb24ndCBnaXZlIHZhbGlkIHNpZ25hdHVyZSBvbiB0aGlzCiAgKiBjb250cm9sbGVyLiAgT25seSBjb250cm9sbGVyIHNwZWNpZmljIGhhcmRyZXNldCBtZWNoYW5pc20gd29ya3MuCiAgKi8KLXN0YXRpYyBpbnQgaW5pY19oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzcykKK3N0YXRpYyBpbnQgaW5pY19oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCSAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAl2b2lkIF9faW9tZW0gKnBvcnRfYmFzZSA9IGluaWNfcG9ydF9iYXNlKGFwKTsKIAl2b2lkIF9faW9tZW0gKmlkbWFfY3RsID0gcG9ydF9iYXNlICsgUE9SVF9JRE1BX0NUTDsKQEAgLTQzNyw3ICs0MzQsNyBAQAogCW1zbGVlcCgxKTsKIAl3cml0ZXcodmFsICYgfklETUFfQ1RMX1JTVF9BVEEsIGlkbWFfY3RsKTsKIAotCXJjID0gc2F0YV9waHlfcmVzdW1lKGFwLCB0aW1pbmcpOworCXJjID0gc2F0YV9waHlfcmVzdW1lKGFwLCB0aW1pbmcsIGRlYWRsaW5lKTsKIAlpZiAocmMpIHsKIAkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsICJmYWlsZWQgdG8gcmVzdW1lICIKIAkJCQkibGluayBhZnRlciByZXNldCAoZXJybm89JWQpXG4iLCByYyk7CkBAIC00NTEsMTAgKzQ0OCwxMiBAQAogCQkvKiB3YWl0IGEgd2hpbGUgYmVmb3JlIGNoZWNraW5nIHN0YXR1cyAqLwogCQltc2xlZXAoMTUwKTsKIAotCQlpZiAoYXRhX2J1c3lfc2xlZXAoYXAsIEFUQV9UTU9VVF9CT09UX1FVSUNLLCBBVEFfVE1PVVRfQk9PVCkpIHsKLQkJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLAotCQkJCQkiZGV2aWNlIGJ1c3kgYWZ0ZXIgaGFyZHJlc2V0XG4iKTsKLQkJCXJldHVybiAtRUlPOworCQlyYyA9IGF0YV93YWl0X3JlYWR5KGFwLCBkZWFkbGluZSk7CisJCS8qIGxpbmsgb2NjdXBpZWQsIC1FTk9ERVYgdG9vIGlzIGFuIGVycm9yICovCisJCWlmIChyYykgeworCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsICJkZXZpY2Ugbm90IHJlYWR5ICIKKwkJCQkJImFmdGVyIGhhcmRyZXNldCAoZXJybm89JWQpXG4iLCByYyk7CisJCQlyZXR1cm4gcmM7CiAJCX0KIAogCQlhdGFfdGZfcmVhZChhcCwgJnRmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCBjYjliOWFjLi5jOTU3ZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC0yMSw2ICsyMSw1MCBAQAogICoKICAqLwogCisvKgorICBzYXRhX212IFRPRE8gbGlzdDoKKworICAxKSBOZWVkcyBhIGZ1bGwgZXJyYXRhIGF1ZGl0IGZvciBhbGwgY2hpcHNldHMuICBJIGltcGxlbWVudGVkIG1vc3QKKyAgb2YgdGhlIGVycmF0YSB3b3JrYXJvdW5kcyBmb3VuZCBpbiB0aGUgTWFydmVsbCB2ZW5kb3IgZHJpdmVyLCBidXQKKyAgSSBkaXN0aW5jdGx5IHJlbWVtYmVyIGEgY291cGxlIHdvcmthcm91bmRzIChvbmUgcmVsYXRlZCB0byBQQ0ktWCkKKyAgYXJlIHN0aWxsIG5lZWRlZC4KKworICAyKSBDb252ZXJ0IHRvIExpYkFUQSBuZXcgRUguICBSZXF1aXJlZCBmb3IgaG90cGx1ZywgTkNRLCBhbmQgc2FuZQorICBwcm9iaW5nL2Vycm9yIGhhbmRsaW5nIGluIGdlbmVyYWwuICBNVVNUIEhBVkUuCisKKyAgMykgQWRkIGhvdHBsdWcgc3VwcG9ydCAoZWFzeSwgb25jZSBuZXctRUggc3VwcG9ydCBhcHBlYXJzKQorCisgIDQpIEFkZCBOQ1Egc3VwcG9ydCAoZWFzeSB0byBpbnRlcm1lZGlhdGUsIG9uY2UgbmV3LUVIIHN1cHBvcnQgYXBwZWFycykKKworICA1KSBJbnZlc3RpZ2F0ZSBwcm9ibGVtcyB3aXRoIFBDSSBNZXNzYWdlIFNpZ25hbGxlZCBJbnRlcnJ1cHRzIChNU0kpLgorCisgIDYpIEFkZCBwb3J0IG11bHRpcGxpZXIgc3VwcG9ydCAoaW50ZXJtZWRpYXRlKQorCisgIDcpIFRlc3QgYW5kIHZlcmlmeSAzLjAgR2JwcyBzdXBwb3J0CisKKyAgOCkgRGV2ZWxvcCBhIGxvdy1wb3dlci1jb25zdW1wdGlvbiBzdHJhdGVneSwgYW5kIGltcGxlbWVudCBpdC4KKworICA5KSBbRXhwZXJpbWVudCwgbG93IHByaW9yaXR5XSBTZWUgaWYgQVRBUEkgY2FuIGJlIHN1cHBvcnRlZCB1c2luZworICAidW5rbm93biBGSVMiIG9yICJ2ZW5kb3Itc3BlY2lmaWMgRklTIiBzdXBwb3J0LCBvciBzb21ldGhpbmcgY3JlYXRpdmUKKyAgbGlrZSB0aGF0LgorCisgIDEwKSBbRXhwZXJpbWVudCwgbG93IHByaW9yaXR5XSBJbnZlc3RpZ2F0ZSBpbnRlcnJ1cHQgY29hbGVzY2luZy4KKyAgUXVpdGUgb2Z0ZW4sIGVzcGVjaWFsbHkgd2l0aCBQQ0kgTWVzc2FnZSBTaWduYWxsZWQgSW50ZXJydXB0cyAoTVNJKSwKKyAgdGhlIG92ZXJoZWFkIHJlZHVjZWQgYnkgaW50ZXJydXB0IG1pdGlnYXRpb24gaXMgcXVpdGUgb2Z0ZW4gbm90CisgIHdvcnRoIHRoZSBsYXRlbmN5IGNvc3QuCisKKyAgMTEpIFtFeHBlcmltZW50LCBNYXJ2ZWxsIHZhbHVlIGFkZGVkXSBJcyBpdCBwb3NzaWJsZSB0byB1c2UgdGFyZ2V0CisgIG1vZGUgdG8gY3Jvc3MtY29ubmVjdCB0d28gTGludXggYm94ZXMgd2l0aCBNYXJ2ZWxsIGNhcmRzPyAgSWYgc28sCisgIGNyZWF0aW5nIExpYkFUQSB0YXJnZXQgbW9kZSBzdXBwb3J0IHdvdWxkIGJlIHZlcnkgaW50ZXJlc3RpbmcuCisKKyAgVGFyZ2V0IG1vZGUsIGZvciB0aG9zZSB3aXRob3V0IGRvY3MsIGlzIHRoZSBhYmlsaXR5IHRvIGRpcmVjdGx5CisgIGNvbm5lY3QgdHdvIFNBVEEgY29udHJvbGxlcnMuCisKKyAgMTMpIFZlcmlmeSB0aGF0IDcwNDIgaXMgZnVsbHkgc3VwcG9ydGVkLiAgSSBvbmx5IGhhdmUgYSA2MDQyLgorCisqLworCisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTM1LDcgKzc5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV9tdiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuOCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuODEiCiAKIGVudW0gewogCS8qIEJBUidzIGFyZSBlbnVtZXJhdGVkIGluIHRlcm1zIG9mIHBjaV9yZXNvdXJjZV9zdGFydCgpIHRlcm1zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX252LmMgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKaW5kZXggMDIxNjk3NC4uYWRmYTY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCQkJInNhdGFfbnYiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkJIjMuMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCQkiMy40IgogCiAjZGVmaW5lIE5WX0FETUFfRE1BX0JPVU5EQVJZCQkweGZmZmZmZmZmVUwKIApAQCAtMjI5LDcgKzIyOSw2IEBACiAjZGVmaW5lIE5WX0FETUFfQ0hFQ0tfSU5UUihHQ1RMLCBQT1JUKSAoKEdDVEwpICYgKCAxIDw8ICgxOSArICgxMiAqIChQT1JUKSkpKSkKIAogc3RhdGljIGludCBudl9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwotc3RhdGljIHZvaWQgbnZfcmVtb3ZlX29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBudl9wY2lfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAjZW5kaWYKQEAgLTI1Nyw2ICsyNTYsOCBAQAogc3RhdGljIGludCBudl9hZG1hX3BvcnRfc3VzcGVuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBwbV9tZXNzYWdlX3QgbWVzZyk7CiBzdGF0aWMgaW50IG52X2FkbWFfcG9ydF9yZXN1bWUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAjZW5kaWYKK3N0YXRpYyB2b2lkIG52X2FkbWFfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIHZvaWQgbnZfYWRtYV90aGF3KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgbnZfYWRtYV9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgbnZfYWRtYV9ob3N0X3N0b3Aoc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKIHN0YXRpYyB2b2lkIG52X2FkbWFfcG9zdF9pbnRlcm5hbF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CkBAIC0yODYsMTIgKzI4Nyw2IEBACiAJeyBQQ0lfVkRFVklDRShOVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2MV9TQVRBKSwgR0VORVJJQyB9LAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjFfU0FUQTIpLCBHRU5FUklDIH0sCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2MV9TQVRBMyksIEdFTkVSSUMgfSwKLQl7IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfQU5ZX0lELAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAotCQlQQ0lfQ0xBU1NfU1RPUkFHRV9JREU8PDgsIDB4ZmZmZjAwLCBHRU5FUklDIH0sCi0JeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0FOWV9JRCwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKLQkJUENJX0NMQVNTX1NUT1JBR0VfUkFJRDw8OCwgMHhmZmZmMDAsIEdFTkVSSUMgfSwKIAogCXsgfSAvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKQEAgLTMwNCw3ICsyOTksNyBAQAogCS5zdXNwZW5kCQk9IGF0YV9wY2lfZGV2aWNlX3N1c3BlbmQsCiAJLnJlc3VtZQkJCT0gbnZfcGNpX2RldmljZV9yZXN1bWUsCiAjZW5kaWYKLQkucmVtb3ZlCQkJPSBudl9yZW1vdmVfb25lLAorCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG52X3NodCA9IHsKQEAgLTMyMywxMCArMzE4LDYgQEAKIAkuc2xhdmVfY29uZmlndXJlCT0gYXRhX3Njc2lfc2xhdmVfY29uZmlnLAogCS5zbGF2ZV9kZXN0cm95CQk9IGF0YV9zY3NpX3NsYXZlX2Rlc3Ryb3ksCiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCQk9IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kLAotCS5yZXN1bWUJCQk9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG52X2FkbWFfc2h0ID0gewpAQCAtMzQ1LDEwICszMzYsNiBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBudl9hZG1hX3NsYXZlX2NvbmZpZywKIAkuc2xhdmVfZGVzdHJveQkJPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAogCS5iaW9zX3BhcmFtCQk9IGF0YV9zdGRfYmlvc19wYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAkJPSBhdGFfc2NzaV9kZXZpY2Vfc3VzcGVuZCwKLQkucmVzdW1lCQkJPSBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnZfZ2VuZXJpY19vcHMgPSB7CkBAIC00NDQsOCArNDMxLDggQEAKIAkuYm1kbWFfc3RhdHVzCQk9IGF0YV9ibWRtYV9zdGF0dXMsCiAJLnFjX3ByZXAJCT0gbnZfYWRtYV9xY19wcmVwLAogCS5xY19pc3N1ZQkJPSBudl9hZG1hX3FjX2lzc3VlLAotCS5mcmVlemUJCQk9IG52X2NrODA0X2ZyZWV6ZSwKLQkudGhhdwkJCT0gbnZfY2s4MDRfdGhhdywKKwkuZnJlZXplCQkJPSBudl9hZG1hX2ZyZWV6ZSwKKwkudGhhdwkJCT0gbnZfYWRtYV90aGF3LAogCS5lcnJvcl9oYW5kbGVyCQk9IG52X2FkbWFfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBudl9hZG1hX3Bvc3RfaW50ZXJuYWxfY21kLAogCS5kYXRhX3hmZXIJCT0gYXRhX2RhdGFfeGZlciwKQEAgLTQ2Myw3ICs0NTAsNyBAQAogCS5ob3N0X3N0b3AJCT0gbnZfYWRtYV9ob3N0X3N0b3AsCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gbnZfcG9ydF9pbmZvW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gbnZfcG9ydF9pbmZvW10gPSB7CiAJLyogZ2VuZXJpYyAqLwogCXsKIAkJLnNodAkJPSAmbnZfc2h0LApAQCAtODE2LDcgKzgwMywxNSBAQAogCQkJdTMyIGdlbl9jdGw7CiAJCQl1MzIgbm90aWZpZXIsIG5vdGlmaWVyX2Vycm9yOwogCi0JCQkvKiBpZiBpbiBBVEEgcmVnaXN0ZXIgbW9kZSwgdXNlIHN0YW5kYXJkIGF0YSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCQkJLyogaWYgQURNQSBpcyBkaXNhYmxlZCwgdXNlIHN0YW5kYXJkIGF0YSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCQkJaWYgKHBwLT5mbGFncyAmIE5WX0FETUFfQVRBUElfU0VUVVBfQ09NUExFVEUpIHsKKwkJCQl1OCBpcnFfc3RhdCA9IHJlYWRiKGhvc3QtPmlvbWFwW05WX01NSU9fQkFSXSArIE5WX0lOVF9TVEFUVVNfQ0s4MDQpCisJCQkJCT4+IChOVl9JTlRfUE9SVF9TSElGVCAqIGkpOworCQkJCWhhbmRsZWQgKz0gbnZfaG9zdF9pbnRyKGFwLCBpcnFfc3RhdCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIGlmIGluIEFUQSByZWdpc3RlciBtb2RlLCBjaGVjayBmb3Igc3RhbmRhcmQgaW50ZXJydXB0cyAqLwogCQkJaWYgKHBwLT5mbGFncyAmIE5WX0FETUFfUE9SVF9SRUdJU1RFUl9NT0RFKSB7CiAJCQkJdTggaXJxX3N0YXQgPSByZWFkYihob3N0LT5pb21hcFtOVl9NTUlPX0JBUl0gKyBOVl9JTlRfU1RBVFVTX0NLODA0KQogCQkJCQk+PiAoTlZfSU5UX1BPUlRfU0hJRlQgKiBpKTsKQEAgLTgyNiw3ICs4MjEsNiBAQAogCQkJCQkgICAgY29tbWFuZCBpcyBhY3RpdmUsIHRvIHByZXZlbnQgbG9zaW5nIGludGVycnVwdHMuICovCiAJCQkJCWlycV9zdGF0IHw9IE5WX0lOVF9ERVY7CiAJCQkJaGFuZGxlZCArPSBudl9ob3N0X2ludHIoYXAsIGlycV9zdGF0KTsKLQkJCQljb250aW51ZTsKIAkJCX0KIAogCQkJbm90aWZpZXIgPSByZWFkbChtbWlvICsgTlZfQURNQV9OT1RJRklFUik7CkBAIC05MTIsMjIgKzkwNiw3NyBAQAogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCitzdGF0aWMgdm9pZCBudl9hZG1hX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBudl9hZG1hX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqbW1pbyA9IHBwLT5jdGxfYmxvY2s7CisJdTE2IHRtcDsKKworCW52X2NrODA0X2ZyZWV6ZShhcCk7CisKKwlpZiAocHAtPmZsYWdzICYgTlZfQURNQV9BVEFQSV9TRVRVUF9DT01QTEVURSkKKwkJcmV0dXJuOworCisJLyogY2xlYXIgYW55IG91dHN0YW5kaW5nIENLODA0IG5vdGlmaWNhdGlvbnMgKi8KKwl3cml0ZWIoIE5WX0lOVF9BTEwgPDwgKGFwLT5wb3J0X25vICogTlZfSU5UX1BPUlRfU0hJRlQpLAorCQlhcC0+aG9zdC0+aW9tYXBbTlZfTU1JT19CQVJdICsgTlZfSU5UX1NUQVRVU19DSzgwNCk7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdCAqLworCXRtcCA9IHJlYWR3KG1taW8gKyBOVl9BRE1BX0NUTCk7CisJd3JpdGV3KCB0bXAgJiB+KE5WX0FETUFfQ1RMX0FJRU4gfCBOVl9BRE1BX0NUTF9IT1RQTFVHX0lFTiksCisJCW1taW8gKyBOVl9BRE1BX0NUTCk7CisJcmVhZHcoIG1taW8gKyBOVl9BRE1BX0NUTCApOwkvKiBmbHVzaCBwb3N0ZWQgd3JpdGUgKi8KK30KKworc3RhdGljIHZvaWQgbnZfYWRtYV90aGF3KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IG52X2FkbWFfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICptbWlvID0gcHAtPmN0bF9ibG9jazsKKwl1MTYgdG1wOworCisJbnZfY2s4MDRfdGhhdyhhcCk7CisKKwlpZiAocHAtPmZsYWdzICYgTlZfQURNQV9BVEFQSV9TRVRVUF9DT01QTEVURSkKKwkJcmV0dXJuOworCisJLyogRW5hYmxlIGludGVycnVwdCAqLworCXRtcCA9IHJlYWR3KG1taW8gKyBOVl9BRE1BX0NUTCk7CisJd3JpdGV3KCB0bXAgfCAoTlZfQURNQV9DVExfQUlFTiB8IE5WX0FETUFfQ1RMX0hPVFBMVUdfSUVOKSwKKwkJbW1pbyArIE5WX0FETUFfQ1RMKTsKKwlyZWFkdyggbW1pbyArIE5WX0FETUFfQ1RMICk7CS8qIGZsdXNoIHBvc3RlZCB3cml0ZSAqLworfQorCiBzdGF0aWMgdm9pZCBudl9hZG1hX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXN0cnVjdCBudl9hZG1hX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX19pb21lbSAqbW1pbyA9IHBwLT5jdGxfYmxvY2s7Ci0JdTE2IHN0YXR1cyA9IHJlYWR3KG1taW8gKyBOVl9BRE1BX1NUQVQpOwotCXUzMiBub3RpZmllciA9IHJlYWRsKG1taW8gKyBOVl9BRE1BX05PVElGSUVSKTsKLQl1MzIgbm90aWZpZXJfZXJyb3IgPSByZWFkbChtbWlvICsgTlZfQURNQV9OT1RJRklFUl9FUlJPUik7Ci0Jdm9pZCBfX2lvbWVtICpkbWFfc3RhdF9hZGRyID0gYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9TVEFUVVM7CisJdTMyIG5vdGlmaWVyX2NsZWFyc1syXTsKKworCWlmIChwcC0+ZmxhZ3MgJiBOVl9BRE1BX0FUQVBJX1NFVFVQX0NPTVBMRVRFKSB7CisJCWF0YV9ibWRtYV9pcnFfY2xlYXIoYXApOworCQlyZXR1cm47CisJfQorCisJLyogY2xlYXIgYW55IG91dHN0YW5kaW5nIENLODA0IG5vdGlmaWNhdGlvbnMgKi8KKwl3cml0ZWIoIE5WX0lOVF9BTEwgPDwgKGFwLT5wb3J0X25vICogTlZfSU5UX1BPUlRfU0hJRlQpLAorCQlhcC0+aG9zdC0+aW9tYXBbTlZfTU1JT19CQVJdICsgTlZfSU5UX1NUQVRVU19DSzgwNCk7CiAKIAkvKiBjbGVhciBBRE1BIHN0YXR1cyAqLwotCXdyaXRldyhzdGF0dXMsIG1taW8gKyBOVl9BRE1BX1NUQVQpOwotCXdyaXRlbChub3RpZmllciB8IG5vdGlmaWVyX2Vycm9yLAotCSAgICAgICBwcC0+bm90aWZpZXJfY2xlYXJfYmxvY2spOworCXdyaXRldygweGZmZmYsIG1taW8gKyBOVl9BRE1BX1NUQVQpOwogCi0JLyoqIGNsZWFyIGxlZ2FjeSBzdGF0dXMgKi8KLQlpb3dyaXRlOChpb3JlYWQ4KGRtYV9zdGF0X2FkZHIpLCBkbWFfc3RhdF9hZGRyKTsKKwkvKiBjbGVhciBub3RpZmllcnMgLSBub3RlIGJvdGggcG9ydHMgbmVlZCB0byBiZSB3cml0dGVuIHdpdGgKKwkgICBzb21ldGhpbmcgZXZlbiB0aG91Z2ggd2UgYXJlIG9ubHkgY2xlYXJpbmcgb24gb25lICovCisJaWYgKGFwLT5wb3J0X25vID09IDApIHsKKwkJbm90aWZpZXJfY2xlYXJzWzBdID0gMHhGRkZGRkZGRjsKKwkJbm90aWZpZXJfY2xlYXJzWzFdID0gMDsKKwl9IGVsc2UgeworCQlub3RpZmllcl9jbGVhcnNbMF0gPSAwOworCQlub3RpZmllcl9jbGVhcnNbMV0gPSAweEZGRkZGRkZGOworCX0KKwlwcCA9IGFwLT5ob3N0LT5wb3J0c1swXS0+cHJpdmF0ZV9kYXRhOworCXdyaXRlbChub3RpZmllcl9jbGVhcnNbMF0sIHBwLT5ub3RpZmllcl9jbGVhcl9ibG9jayk7CisJcHAgPSBhcC0+aG9zdC0+cG9ydHNbMV0tPnByaXZhdGVfZGF0YTsKKwl3cml0ZWwobm90aWZpZXJfY2xlYXJzWzFdLCBwcC0+bm90aWZpZXJfY2xlYXJfYmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBudl9hZG1hX3Bvc3RfaW50ZXJuYWxfY21kKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCkBAIC0xNDA1LDcgKzE0NTQsOCBAQAogCXdyaXRlYihtYXNrLCBtbWlvX2Jhc2UgKyBOVl9JTlRfRU5BQkxFX0NLODA0KTsKIH0KIAotc3RhdGljIGludCBudl9oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzcykKK3N0YXRpYyBpbnQgbnZfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3MsCisJCQl1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewogCXVuc2lnbmVkIGludCBkdW1teTsKIApAQCAtMTQxMyw3ICsxNDYzLDcgQEAKIAkgKiBzb21lIGNvbnRyb2xsZXJzLiAgRG9uJ3QgY2xhc3NpZnkgb24gaGFyZHJlc2V0LiAgRm9yIG1vcmUKIAkgKiBpbmZvLCBzZWUgaHR0cDovL2J1Z21lLm9zZGwub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzUyCiAJICovCi0JcmV0dXJuIHNhdGFfc3RkX2hhcmRyZXNldChhcCwgJmR1bW15KTsKKwlyZXR1cm4gc2F0YV9zdGRfaGFyZHJlc2V0KGFwLCAmZHVtbXksIGRlYWRsaW5lKTsKIH0KIAogc3RhdGljIHZvaWQgbnZfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMTQ4MCw3ICsxNTMwLDcgQEAKIHN0YXRpYyBpbnQgbnZfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uID0gMDsKLQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpWzJdOworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgTlVMTCwgTlVMTCB9OwogCXN0cnVjdCBhdGFfaG9zdCAqaG9zdDsKIAlzdHJ1Y3QgbnZfaG9zdF9wcml2ICpocHJpdjsKIAlpbnQgcmM7CkBAIC0xNTA4LDggKzE1NTgsOCBAQAogCQl0eXBlID0gQURNQTsKIAl9CiAKLQlwcGlbMF0gPSBwcGlbMV0gPSAmbnZfcG9ydF9pbmZvW3R5cGVdOwotCXJjID0gYXRhX3BjaV9wcmVwYXJlX25hdGl2ZV9ob3N0KHBkZXYsIHBwaSwgMiwgJmhvc3QpOworCXBwaVswXSA9ICZudl9wb3J0X2luZm9bdHlwZV07CisJcmMgPSBhdGFfcGNpX3ByZXBhcmVfbmF0aXZlX2hvc3QocGRldiwgcHBpLCAmaG9zdCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE1NTYsMTUgKzE2MDYsNiBAQAogCQkJCSBJUlFGX1NIQVJFRCwgcHBpWzBdLT5zaHQpOwogfQogCi1zdGF0aWMgdm9pZCBudl9yZW1vdmVfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7Ci0Jc3RydWN0IG52X2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7Ci0KLQlhdGFfcGNpX3JlbW92ZV9vbmUocGRldik7Ci0Ja2ZyZWUoaHByaXYpOwotfQotCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IG52X3BjaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYwppbmRleCBmNTY1NDliLi4yYjkyNGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgInNhdGFfcHJvbWlzZS5oIgogCiAjZGVmaW5lIERSVl9OQU1FCSJzYXRhX3Byb21pc2UiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIyLjA1IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4wNyIKIAogCiBlbnVtIHsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiAJLyogYm9hcmRfMjA1N3hfcGF0YSAqLwogCXsKLQkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TTEFWRV9QT1NTLAorCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJCSAgUERDX0ZMQUdfR0VOX0lJLAogCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLwpAQCAtNjUzLDYgKzY1Myw4IEBACiAJcWMtPmVycl9tYXNrIHw9IGFjX2Vycl9tYXNrOwogCiAJcGRjX3Jlc2V0X3BvcnQoYXApOworCisJYXRhX3BvcnRfYWJvcnQoYXApOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwZGNfaG9zdF9pbnRyKCBzdHJ1Y3QgYXRhX3BvcnQgKmFwLApAQCAtOTI0LDYgKzkyNiw3IEBACiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlpbnQgbl9wb3J0cywgaSwgcmM7CisJaW50IGlzX3NhdGFpaV90eDQ7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CkBAIC05NjIsMTAgKzk2NSwyMyBAQAogCX0KIAlob3N0LT5pb21hcCA9IHBjaW1faW9tYXBfdGFibGUocGRldik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bl9wb3J0czsgaSsrKQorCWlzX3NhdGFpaV90eDQgPSAwOworCWlmICgocGktPmZsYWdzICYgKFBEQ19GTEFHX0dFTl9JSXxQRENfRkxBR180X1BPUlRTKSkgPT0gKFBEQ19GTEFHX0dFTl9JSXxQRENfRkxBR180X1BPUlRTKSkgeworCQlpc19zYXRhaWlfdHg0ID0gMTsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsICJhcHBseWluZyBTQVRBSUkgVFg0IHBvcnQgbnVtYmVyaW5nIHdvcmthcm91bmRcbiIpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bl9wb3J0czsgaSsrKSB7CisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhdGFpaV90eDRfcG9ydF9yZW1hcFs0XSA9IHsgMywgMSwgMCwgMn07CisJCWludCBhdGFfbnI7CisKKwkJYXRhX25yID0gaTsKKwkJaWYgKGlzX3NhdGFpaV90eDQpCisJCQlhdGFfbnIgPSBzYXRhaWlfdHg0X3BvcnRfcmVtYXBbaV07CisKIAkJcGRjX2F0YV9zZXR1cF9wb3J0KGhvc3QtPnBvcnRzW2ldLAotCQkJCSAgIGJhc2UgKyAweDIwMCArIGkgKiAweDgwLAotCQkJCSAgIGJhc2UgKyAweDQwMCArIGkgKiAweDEwMCk7CisJCQkJICAgYmFzZSArIDB4MjAwICsgYXRhX25yICogMHg4MCwKKwkJCQkgICBiYXNlICsgMHg0MDAgKyBhdGFfbnIgKiAweDEwMCk7CisJfQogCiAJLyogaW5pdGlhbGl6ZSBhZGFwdGVyICovCiAJcGRjX2hvc3RfaW5pdChob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYyBiL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYwppbmRleCBmNWEwNWRlLi42Njg4Y2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3FzdG9yLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInNhdGFfcXN0b3IiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjA3IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4wOCIKIAogZW51bSB7CiAJUVNfTU1JT19CQVIJCT0gNCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCmluZGV4IDBhMWU0MTcuLmEzYjMzOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwuYwpAQCAtMTgyLDEwICsxODIsNiBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLSNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpbF9vcHMgPSB7CkBAIC0zMDksNyArMzA1LDcgQEAKIAl1MzIgdG1wLCBkZXZfbW9kZVsyXTsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmM7Ci0JCisKIAlyYyA9IGF0YV9kb19zZXRfbW9kZShhcCwgcl9mYWlsZWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCmluZGV4IGU2MjIzYmEuLjBkZGZhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV9zaWwyNCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuOCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuOSIKIAogLyoKICAqIFBvcnQgcmVxdWVzdCBibG9jayAoUFJCKSAzMiBieXRlcwpAQCAtMjM3LDcgKzIzNyw4IEBACiAJLyogaG9zdCBmbGFncyAqLwogCVNJTDI0X0NPTU1PTl9GTEFHUwk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX1BJT19ETUEgfAotCQkJCSAgQVRBX0ZMQUdfTkNRIHwgQVRBX0ZMQUdfU0tJUF9EMkhfQlNZLAorCQkJCSAgQVRBX0ZMQUdfTkNRIHwgQVRBX0ZMQUdfU0tJUF9EMkhfQlNZIHwKKwkJCQkgIEFUQV9GTEFHX0FDUElfU0FUQSwKIAlTSUwyNF9GTEFHX1BDSVhfSVJRX1dPQwk9ICgxIDw8IDI0KSwgLyogSVJRIGxvc3MgZXJyYXRhIG9uIFBDSS1YICovCiAKIAlJUlFfU1RBVF80UE9SVFMJCT0gMHhmLApAQCAtMzgwLDEwICszODEsNiBAQAogCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJCT0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCi0JLnJlc3VtZQkJCT0gYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZSwKLSNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNpbDI0X29wcyA9IHsKQEAgLTUzNCw3ICs1MzEsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNpbDI0X3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzKQorc3RhdGljIGludCBzaWwyNF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0ID0gYXAtPmlvYWRkci5jbWRfYWRkcjsKIAlzdHJ1Y3Qgc2lsMjRfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CkBAIC01NjYsNyArNTY0LDcgQEAKIAogCW1hc2sgPSAoUE9SVF9JUlFfQ09NUExFVEUgfCBQT1JUX0lSUV9FUlJPUikgPDwgUE9SVF9JUlFfUkFXX1NISUZUOwogCWlycV9zdGF0ID0gYXRhX3dhaXRfcmVnaXN0ZXIocG9ydCArIFBPUlRfSVJRX1NUQVQsIG1hc2ssIDB4MCwKLQkJCQkgICAgIDEwMCwgQVRBX1RNT1VUX0JPT1QgLyBIWiAqIDEwMDApOworCQkJCSAgICAgMTAwLCBqaWZmaWVzX3RvX21zZWNzKGRlYWRsaW5lIC0gamlmZmllcykpOwogCiAJd3JpdGVsKGlycV9zdGF0LCBwb3J0ICsgUE9SVF9JUlFfU1RBVCk7IC8qIGNsZWFyIElSUXMgKi8KIAlpcnFfc3RhdCA+Pj0gUE9SVF9JUlFfUkFXX1NISUZUOwpAQCAtNTk0LDcgKzU5Miw4IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyBpbnQgc2lsMjRfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3MpCitzdGF0aWMgaW50IHNpbDI0X2hhcmRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzLAorCQkJICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKIAl2b2lkIF9faW9tZW0gKnBvcnQgPSBhcC0+aW9hZGRyLmNtZF9hZGRyOwogCWNvbnN0IGNoYXIgKnJlYXNvbjsKQEAgLTYxNSw3ICs2MTQsNyBAQAogCS8qIFNTdGF0dXMgb3NjaWxsYXRlcyBiZXR3ZWVuIHplcm8gYW5kIHZhbGlkIHN0YXR1cyBhZnRlcgogCSAqIERFVl9SU1QsIGRlYm91bmNlIGl0LgogCSAqLwotCXJjID0gc2F0YV9waHlfZGVib3VuY2UoYXAsIHNhdGFfZGViX3RpbWluZ19sb25nKTsKKwlyYyA9IHNhdGFfcGh5X2RlYm91bmNlKGFwLCBzYXRhX2RlYl90aW1pbmdfbG9uZywgZGVhZGxpbmUpOwogCWlmIChyYykgewogCQlyZWFzb24gPSAiUEhZIGRlYm91bmNpbmcgZmFpbGVkIjsKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaXMuYwppbmRleCBkOGVlMDYyLi4yMjEwOTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJzaXMuaCIKIAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV9zaXMiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjciCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjgiCiAKIGVudW0gewogCXNpc18xODAJCQk9IDAsCkBAIC0xMjksNyArMTI5LDcgQEAKIAkucG9ydF9zdGFydAkJPSBhdGFfcG9ydF9zdGFydCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfcG9ydF9pbmZvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19wb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1ksCiAJLnBpb19tYXNrCT0gMHgxZiwKIAkubXdkbWFfbWFzawk9IDB4NywKQEAgLTI1NSw3ICsyNTUsNyBAQAogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0cnVjdCBhdGFfcG9ydF9pbmZvIHBpID0gc2lzX3BvcnRfaW5mbzsKLQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpWzJdID0geyAmcGksICZwaSB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJnBpLCAmcGkgfTsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7CiAJdTMyIGdlbmN0bCwgdmFsOwogCXU4IHBtcjsKQEAgLTMzNSw3ICszMzUsNyBAQAogCQlicmVhazsKIAl9CiAKLQlyYyA9IGF0YV9wY2lfcHJlcGFyZV9uYXRpdmVfaG9zdChwZGV2LCBwcGksIDIsICZob3N0KTsKKwlyYyA9IGF0YV9wY2lfcHJlcGFyZV9uYXRpdmVfaG9zdChwZGV2LCBwcGksICZob3N0KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zdncuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMKaW5kZXggY2MwN2FhYy4uYmNiMmNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zdncuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jCkBAIC01Myw3ICs1Myw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BQQ19PRiAqLwogCiAjZGVmaW5lIERSVl9OQU1FCSJzYXRhX3N2dyIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMiIKIAogZW51bSB7CiAJLyogYXAtPmZsYWdzIGJpdHMgKi8KQEAgLTI4OCw3ICsyODgsNyBAQAogCS8qIE1hdGNoIGl0IHRvIGEgcG9ydCBub2RlICovCiAJaW5kZXggPSAoYXAgPT0gYXAtPmhvc3QtPnBvcnRzWzBdKSA/IDAgOiAxOwogCWZvciAobnAgPSBucC0+Y2hpbGQ7IG5wICE9IE5VTEw7IG5wID0gbnAtPnNpYmxpbmcpIHsKLQkJY29uc3QgdTMyICpyZWcgPSBnZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKKwkJY29uc3QgdTMyICpyZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKIAkJaWYgKCFyZWcpCiAJCQljb250aW51ZTsKIAkJaWYgKGluZGV4ID09ICpyZWcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zeDQuYwppbmRleCAzYTRmNDQ1Li4yZDE0ZjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc3g0LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlICJzYXRhX3Byb21pc2UuaCIKIAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV9zeDQiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjEwIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4xMSIKIAogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jCmluZGV4IGY3NGUzODMuLjY4MTVkZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV91bGkuYwpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJzYXRhX3VsaSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMiIKIAogZW51bSB7CiAJdWxpXzUyODkJCT0gMCwKQEAgLTEyNSw3ICsxMjUsNyBAQAogCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAogfTsKIAotc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHVsaV9wb3J0X2luZm8gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdWxpX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkgIEFUQV9GTEFHX0lHTl9TSU1QTEVYLAogCS5waW9fbWFzayAgICAgICA9IDB4MWYsCQkvKiBwaW8wLTQgKi8KQEAgLTIwMSwxOSArMjAxLDMzIEBACiAJbl9wb3J0cyA9IDI7CiAJaWYgKGJvYXJkX2lkeCA9PSB1bGlfNTI4NykKIAkJbl9wb3J0cyA9IDQ7Ci0JcmMgPSBhdGFfcGNpX3ByZXBhcmVfbmF0aXZlX2hvc3QocGRldiwgcHBpLCBuX3BvcnRzLCAmaG9zdCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CisKKwkvKiBhbGxvY2F0ZSB0aGUgaG9zdCAqLworCWhvc3QgPSBhdGFfaG9zdF9hbGxvY19waW5mbygmcGRldi0+ZGV2LCBwcGksIG5fcG9ydHMpOworCWlmICghaG9zdCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlocHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmhwcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFocHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAJaG9zdC0+cHJpdmF0ZV9kYXRhID0gaHByaXY7CiAKKwkvKiB0aGUgZmlyc3QgdHdvIHBvcnRzIGFyZSBzdGFuZGFyZCBTRkYgKi8KKwlyYyA9IGF0YV9wY2lfaW5pdF9uYXRpdmVfaG9zdChob3N0KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gYXRhX3BjaV9pbml0X2JtZG1hKGhvc3QpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJaW9tYXAgPSBob3N0LT5pb21hcDsKIAogCXN3aXRjaCAoYm9hcmRfaWR4KSB7CiAJY2FzZSB1bGlfNTI4NzoKKwkJLyogSWYgdGhlcmUgYXJlIGZvdXIsIHRoZSBsYXN0IHR3byBsaXZlIHJpZ2h0IGFmdGVyCisJCSAqIHRoZSBzdGFuZGFyZCBTRkYgcG9ydHMuCisJCSAqLwogCQlocHJpdi0+c2NyX2NmZ19hZGRyWzBdID0gVUxJNTI4N19CQVNFOwogCQlocHJpdi0+c2NyX2NmZ19hZGRyWzFdID0gVUxJNTI4N19CQVNFICsgVUxJNTI4N19PRkZTOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jIGIvZHJpdmVycy9hdGEvc2F0YV92aWEuYwppbmRleCAxZDg1NWY1Li5lOGI5MGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV92aWEiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIyLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIyLjIiCiAKIGVudW0gYm9hcmRfaWRzX2VudW0gewogCXZ0NjQyMCwKQEAgLTg1LDYgKzg1LDkgQEAKIAl7IFBDSV9WREVWSUNFKFZJQSwgMHgwNTkxKSwgdnQ2NDIwIH0sCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4MzE0OSksIHZ0NjQyMCB9LAogCXsgUENJX1ZERVZJQ0UoVklBLCAweDMyNDkpLCB2dDY0MjEgfSwKKwl7IFBDSV9WREVWSUNFKFZJQSwgMHg1Mjg3KSwgdnQ2NDIwIH0sCisJeyBQQ0lfVkRFVklDRShWSUEsIDB4NTM3MiksIHZ0NjQyMCB9LAorCXsgUENJX1ZERVZJQ0UoVklBLCAweDczNzIpLCB2dDY0MjAgfSwKIAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKQEAgLTkzLDYgKzk2LDEwIEBACiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pZF90YWJsZQkJPSBzdmlhX3BjaV90YmwsCiAJLnByb2JlCQkJPSBzdmlhX2luaXRfb25lLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCQk9IGF0YV9wY2lfZGV2aWNlX3N1c3BlbmQsCisJLnJlc3VtZQkJCT0gYXRhX3BjaV9kZXZpY2VfcmVzdW1lLAorI2VuZGlmCiAJLnJlbW92ZQkJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAogfTsKIApAQCAtMjY4LDYgKzI3NSw3IEBACiAvKioKICAqCXZ0NjQyMF9wcmVyZXNldCAtIHByZXJlc2V0IGZvciB2dDY0MjAKICAqCUBhcDogdGFyZ2V0IEFUQSBwb3J0CisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KICAqCiAgKglTQ1IgcmVnaXN0ZXJzIG9uIHZ0NjQyMCBhcmUgcGllY2VzIG9mIHNoaXQgYW5kIG1heSBoYW5nIHRoZQogICoJd2hvbGUgbWFjaGluZSBjb21wbGV0ZWx5IGlmIGFjY2Vzc2VkIHdpdGggdGhlIHdyb25nIHRpbWluZy4KQEAgLTI4NCw3ICsyOTIsNyBAQAogICoJUkVUVVJOUzoKICAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCB2dDY0MjBfcHJlcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyBpbnQgdnQ2NDIwX3ByZXJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCiB7CiAJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmYXAtPmVoX2NvbnRleHQ7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIChIWiAqIDUpOwpAQCAtMzI5LDcgKzMzNyw3IEBACiAKICBza2lwX3NjcjoKIAkvKiB3YWl0IGZvciAhQlNZICovCi0JYXRhX2J1c3lfc2xlZXAoYXAsIEFUQV9UTU9VVF9CT09UX1FVSUNLLCBBVEFfVE1PVVRfQk9PVCk7CisJYXRhX3dhaXRfcmVhZHkoYXAsIGRlYWRsaW5lKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDA2LDcgKzQxNCw3IEBACiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCWludCByYzsKIAotCXJjID0gYXRhX3BjaV9wcmVwYXJlX25hdGl2ZV9ob3N0KHBkZXYsIHBwaSwgMiwgJmhvc3QpOworCXJjID0gYXRhX3BjaV9wcmVwYXJlX25hdGl2ZV9ob3N0KHBkZXYsIHBwaSwgJmhvc3QpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCSpyX2hvc3QgPSBob3N0OwpAQCAtNDM2LDcgKzQ0NCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXJjID0gcGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIDB4MWYsIERSVl9OQU1FKTsKKwlyYyA9IHBjaW1faW9tYXBfcmVnaW9ucyhwZGV2LCAweDNmLCBEUlZfTkFNRSk7CiAJaWYgKHJjKSB7CiAJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdC9pb21hcCAiCiAJCQkgICAiUENJIEJBUnMgKGVycm5vPSVkKVxuIiwgcmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKaW5kZXggODAxMjZmOC4uODEzMzAxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInNhdGFfdnNjIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4xIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4yIgogCiBlbnVtIHsKIAlWU0NfTU1JT19CQVIJCQk9IDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zaXMuaCBiL2RyaXZlcnMvYXRhL3Npcy5oCmluZGV4IDIzMWRhOGYuLjBmMjIwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3Npcy5oCisrKyBiL2RyaXZlcnMvYXRhL3Npcy5oCkBAIC0yLDQgKzIsNCBAQAogc3RydWN0IGF0YV9wb3J0X2luZm87CiAKIC8qIHBhdGFfc2lzLmMgKi8KLWV4dGVybiBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzMzsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzMzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL0tjb25maWcgYi9kcml2ZXJzL2F0bS9LY29uZmlnCmluZGV4IDMzNjg3NDUuLmY1YTQ3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL0tjb25maWcKKysrIGIvZHJpdmVycy9hdG0vS2NvbmZpZwpAQCAtMiwxOSArMiwyMiBAQAogIyBBVE0gZGV2aWNlIGNvbmZpZ3VyYXRpb24KICMKIAotbWVudSAiQVRNIGRyaXZlcnMiCittZW51Y29uZmlnIEFUTV9EUklWRVJTCisJYm9vbCAiQVRNIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBORVRERVZJQ0VTICYmIEFUTQorCWRlZmF1bHQgeQorCitpZiBBVE1fRFJJVkVSUwogCiBjb25maWcgQVRNX0RVTU1ZCiAJdHJpc3RhdGUgIkR1bW15IEFUTSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBBVE0KIAloZWxwCiAJICBEdW1teSBBVE0gZHJpdmVyLiBVc2VmdWwgZm9yIHByb3h5IHNpZ25hbGxpbmcsIHRlc3RpbmcsCiAJICBhbmQgZGV2ZWxvcG1lbnQuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgQVRNX1RDUAogCXRyaXN0YXRlICJBVE0gb3ZlciBUQ1AiCi0JZGVwZW5kcyBvbiBJTkVUICYmIEFUTQorCWRlcGVuZHMgb24gSU5FVAogCWhlbHAKIAkgIEFUTSBvdmVyIFRDUCBkcml2ZXIuIFVzZWZ1bCBtYWlubHkgZm9yIGRldmVsb3BtZW50IGFuZCBmb3IKIAkgIGV4cGVyaW1lbnRzLiBJZiB1bnN1cmUsIHNheSBOLgpAQCAtMzAsNyArMzMsNyBAQAogCiBjb25maWcgQVRNX0VOSQogCXRyaXN0YXRlICJFZmZpY2llbnQgTmV0d29ya3MgRU5JMTU1UCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBBVE0KKwlkZXBlbmRzIG9uIFBDSQogCS0tLWhlbHAtLS0KIAkgIERyaXZlciBmb3IgdGhlIEVmZmljaWVudCBOZXR3b3JrcyBFTkkxNTVwIHNlcmllcyBhbmQgU01DIEFUTQogCSAgUG93ZXIxNTUgMTU1IE1icHMgQVRNIGFkYXB0ZXJzLiBCb3RoLCB0aGUgdmVyc2lvbnMgd2l0aCA1MTJLQiBhbmQKQEAgLTEzOSw3ICsxNDIsNyBAQAogCiBjb25maWcgQVRNX0ZJUkVTVFJFQU0KIAl0cmlzdGF0ZSAiRnVqaXRzdSBGaXJlU3RyZWFtIChGUzUwL0ZTMTU1KSAiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgQVRNCisJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBEcml2ZXIgZm9yIHRoZSBGdWppdHN1IEZpcmVTdHJlYW0gMTU1IChNQjg2Njk3KSBhbmQKIAkgIEZpcmVTdHJlYW0gNTAgKE1CODY2OTUpIEFUTSBQQ0kgY2hpcHMuCkBAIC0xNDksNyArMTUyLDcgQEAKIAogY29uZmlnIEFUTV9aQVRNCiAJdHJpc3RhdGUgIlplaXROZXQgWk4xMjIxL1pOMTIyNSIKLQlkZXBlbmRzIG9uIFBDSSAmJiBBVE0KKwlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgIERyaXZlciBmb3IgdGhlIFplaXROZXQgWk4xMjIxIChNTUYpIGFuZCBaTjEyMjUgKFVUUC01KSAxNTUgTWJwcyBBVE0KIAkgIGFkYXB0ZXJzLgpAQCAtMTY5LDcgKzE3Miw3IEBACiAKIGNvbmZpZyBBVE1fTklDU1RBUgogCXRyaXN0YXRlICJJRFQgNzcyMDEgKE5JQ1N0QVIpIChGb3JlUnVubmVyTEUpIgotCWRlcGVuZHMgb24gUENJICYmIEFUTSAmJiAhNjRCSVQKKwlkZXBlbmRzIG9uIFBDSSAmJiAhNjRCSVQKIAloZWxwCiAJICBUaGUgTklDU3RBUiBjaGlwc2V0IGZhbWlseSBpcyB1c2VkIGluIGEgbGFyZ2UgbnVtYmVyIG9mIEFUTSBOSUNzIGZvcgogCSAgMjUgYW5kIGZvciAxNTUgTWJwcywgaW5jbHVkaW5nIElEVCBjYXJkcyBhbmQgdGhlIEZvcmUgRm9yZVJ1bm5lckxFCkBAIC0yMDIsNyArMjA1LDcgQEAKIAogY29uZmlnIEFUTV9JRFQ3NzI1MgogCXRyaXN0YXRlICJJRFQgNzcyNTIgKE5JQ1N0QVIgSUkpIgotCWRlcGVuZHMgb24gUENJICYmIEFUTQorCWRlcGVuZHMgb24gUENJCiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgSURUIDc3MjUyIEFUTSBQQ0kgY2hpcHMuCiAKQEAgLTIzNyw3ICsyNDAsNyBAQAogCiBjb25maWcgQVRNX0FNQkFTU0FET1IKIAl0cmlzdGF0ZSAiTWFkZ2UgQW1iYXNzYWRvciAoQ29sbGFnZSBQQ0kgMTU1IFNlcnZlcikiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgQVRNCisJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgQklUUkVWRVJTRQogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIEFUTWl6ZXIgYmFzZWQgQVRNIGNhcmQgcHJvZHVjZWQgYnkgTWFkZ2UKQEAgLTI2Miw3ICsyNjUsNyBAQAogCiBjb25maWcgQVRNX0hPUklaT04KIAl0cmlzdGF0ZSAiTWFkZ2UgSG9yaXpvbiBbVWx0cmFdIChDb2xsYWdlIFBDSSAyNSBhbmQgQ29sbGFnZSBQQ0kgMTU1IENsaWVudCkiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgQVRNCisJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgSG9yaXpvbiBjaGlwc2V0IEFUTSBhZGFwdGVyIGNhcmRzIG9uY2UKIAkgIHByb2R1Y2VkIGJ5IE1hZGdlIE5ldHdvcmtzIEx0ZC4gU2F5IFkgKG9yIE0gdG8gY29tcGlsZSBhcyBhIG1vZHVsZQpAQCAtMjg2LDcgKzI4OSw3IEBACiAKIGNvbmZpZyBBVE1fSUEKIAl0cmlzdGF0ZSAiSW50ZXJwaGFzZSBBVE0gUENJIHg1NzUveDUyNS94NTMxIgotCWRlcGVuZHMgb24gUENJICYmIEFUTSAmJiAhNjRCSVQKKwlkZXBlbmRzIG9uIFBDSSAmJiAhNjRCSVQKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgSW50ZXJwaGFzZSAoaSlDaGlwU0FSIGFkYXB0ZXIgY2FyZHMKIAkgIHdoaWNoIGluY2x1ZGUgYSB2YXJpZXR5IG9mIHZhcmlhbnRzIGluIHRlcm0gb2YgdGhlIHNpemUgb2YgdGhlCkBAIC0zMTksNyArMzIyLDcgQEAKIAogY29uZmlnIEFUTV9GT1JFMjAwRV9NQVlCRQogCXRyaXN0YXRlICJGT1JFIFN5c3RlbXMgMjAwRS1zZXJpZXMiCi0JZGVwZW5kcyBvbiAoUENJIHx8IFNCVVMpICYmIEFUTQorCWRlcGVuZHMgb24gUENJIHx8IFNCVVMKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgRk9SRSBTeXN0ZW1zIDIwMEUtc2VyaWVzIEFUTSBhZGFwdGVyCiAJICBjYXJkcy4gSXQgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydHMgUENBLTIwMEUgYW5kIFNCQS0yMDBFIG1vZGVscwpAQCAtNDM2LDcgKzQzOSw3IEBACiAKIGNvbmZpZyBBVE1fSEUKIAl0cmlzdGF0ZSAiRm9yZVJ1bm5lciBIRSBTZXJpZXMiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgQVRNCisJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgTWFyY29uaSBGb3JlUnVubmVyIEhFLXNlcmllcyBBVE0gYWRhcHRlcgogCSAgY2FyZHMuIEl0IHNpbXVsdGFuZW91c2x5IHN1cHBvcnRzIHRoZSAxNTUgYW5kIDYyMiB2ZXJzaW9ucy4KQEAgLTQ0OCw1ICs0NTEsNCBAQAogCSAgU3VwcG9ydCBmb3IgdGhlIFMvVU5JLVVsdHJhIGFuZCBTL1VOSS02MjIgZm91bmQgaW4gdGhlIEZvcmVSdW5uZXIKIAkgIEhFIGNhcmRzLiAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgY2FycmllciBkZXRlY3Rpb24gc29tZSBzdGF0aXN0aWNzLgogCi1lbmRtZW51Ci0KK2VuZGlmICMgQVRNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKaW5kZXggOWM2N2RmNS4uN2Y2ZDAyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCisrKyBiL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYwpAQCAtMTQ3NSw2ICsxNDc1LDcgQEAKIAlzdHJ1Y3QgRlNfQlBFTlRSWSAqcWUsICpuZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBuID0gMDsKKwl1MzIgcWVfdG1wOwogCiAJZnNfZHByaW50ayAoRlNfREVCVUdfUVVFVUUsICJUb3BwaW5nIG9mZiBxdWV1ZSBhdCAleCAoJWQtJWQvJWQpXG4iLCAKIAkJICAgIGZwLT5vZmZzZXQsIHJlYWRfZnMgKGRldiwgRlBfQ05UIChmcC0+b2Zmc2V0KSksIGZwLT5uLCAKQEAgLTE1MDIsMTAgKzE1MDMsMTYgQEAKIAkJbmUtPnNrYiA9IHNrYjsKIAkJbmUtPmZwID0gZnA7CiAKLQkJcWUgPSAoc3RydWN0IEZTX0JQRU5UUlkgKikgKHJlYWRfZnMgKGRldiwgRlBfRUEoZnAtPm9mZnNldCkpKTsKLQkJZnNfZHByaW50ayAoRlNfREVCVUdfUVVFVUUsICJsaW5rIGF0ICVwXG4iLCBxZSk7Ci0JCWlmIChxZSkgewotCQkJcWUgPSBidXNfdG9fdmlydCAoKGxvbmcpIHFlKTsKKwkJLyoKKwkJICogRklYTUU6IGZvbGxvd2luZyBjb2RlIGVuY29kZXMgYW5kIGRlY29kZXMKKwkJICogbWFjaGluZSBwb2ludGVycyAoY291bGQgYmUgNjQtYml0KSBpbnRvIGEKKwkJICogMzItYml0IHJlZ2lzdGVyLgorCQkgKi8KKworCQlxZV90bXAgPSByZWFkX2ZzIChkZXYsIEZQX0VBKGZwLT5vZmZzZXQpKTsKKwkJZnNfZHByaW50ayAoRlNfREVCVUdfUVVFVUUsICJsaW5rIGF0ICV4XG4iLCBxZV90bXApOworCQlpZiAocWVfdG1wKSB7CisJCQlxZSA9IGJ1c190b192aXJ0ICgobG9uZykgcWVfdG1wKTsKIAkJCXFlLT5uZXh0ID0gdmlydF90b19idXMobmUpOwogCQkJcWUtPmZsYWdzICY9IH5GUF9GTEFHU19FUEk7CiAJCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKaW5kZXggMDU3ZWZiYy4uMzgwMGJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYworKysgYi9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCkBAIC00Nyw3ICs0Nyw4IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtMjQzNSw3ICsyNDM2LDcgQEAKIAogCXNldF9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsKIAotCWRvd24oJmNhcmQtPm11dGV4KTsKKwltdXRleF9sb2NrKCZjYXJkLT5tdXRleCk7CiAKIAlPUFJJTlRLKCIlczogb3BlbmluZyB2cGkudmNpOiAlZC4lZFxuIiwgY2FyZC0+bmFtZSwgdnBpLCB2Y2kpOwogCkBAIC0yNDQ2LDcgKzI0NDcsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoIiVzOiBVbnN1cHBvcnRlZCBBQUw6ICVkXG4iLCBjYXJkLT5uYW1lLCB2Y2MtPnFvcy5hYWwpOwotCQl1cCgmY2FyZC0+bXV0ZXgpOworCQltdXRleF91bmxvY2soJmNhcmQtPm11dGV4KTsKIAkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAJfQogCkBAIC0yNDU1LDcgKzI0NTYsNyBAQAogCQljYXJkLT52Y3NbaW5kZXhdID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZjX21hcCksIEdGUF9LRVJORUwpOwogCQlpZiAoIWNhcmQtPnZjc1tpbmRleF0pIHsKIAkJCXByaW50aygiJXM6IGNhbid0IGFsbG9jIHZjIGluIG9wZW4oKVxuIiwgY2FyZC0+bmFtZSk7Ci0JCQl1cCgmY2FyZC0+bXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5tdXRleCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQljYXJkLT52Y3NbaW5kZXhdLT5jYXJkID0gY2FyZDsKQEAgLTI0ODQsMTQgKzI0ODUsMTQgQEAKIAlpZiAoaW51c2UpIHsKIAkJcHJpbnRrKCIlczogJXMgdmNpIGFscmVhZHkgaW4gdXNlLlxuIiwgY2FyZC0+bmFtZSwKIAkJICAgICAgIGludXNlID09IDEgPyAidHgiIDogaW51c2UgPT0gMiA/ICJyeCIgOiAidHggYW5kIHJ4Iik7Ci0JCXVwKCZjYXJkLT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmY2FyZC0+bXV0ZXgpOwogCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJfQogCiAJaWYgKHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fTk9ORSkgewogCQllcnJvciA9IGlkdDc3MjUyX2luaXRfdHgoY2FyZCwgdmMsIHZjYywgJnZjYy0+cW9zKTsKIAkJaWYgKGVycm9yKSB7Ci0JCQl1cCgmY2FyZC0+bXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5tdXRleCk7CiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAl9CkBAIC0yNDk5LDE0ICsyNTAwLDE0IEBACiAJaWYgKHZjYy0+cW9zLnJ4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fTk9ORSkgewogCQllcnJvciA9IGlkdDc3MjUyX2luaXRfcngoY2FyZCwgdmMsIHZjYywgJnZjYy0+cW9zKTsKIAkJaWYgKGVycm9yKSB7Ci0JCQl1cCgmY2FyZC0+bXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5tdXRleCk7CiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAl9CiAKIAlzZXRfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOwogCi0JdXAoJmNhcmQtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmNhcmQtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjUyMCw3ICsyNTIxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCi0JZG93bigmY2FyZC0+bXV0ZXgpOworCW11dGV4X2xvY2soJmNhcmQtPm11dGV4KTsKIAogCUlQUklOVEsoIiVzOiBpZHQ3NzI1Ml9jbG9zZTogdmMgPSAlZCAoJWQuJWQpXG4iLAogCQljYXJkLT5uYW1lLCB2Yy0+aW5kZXgsIHZjYy0+dnBpLCB2Y2MtPnZjaSk7CkBAIC0yNTkxLDcgKzI1OTIsNyBAQAogCQlmcmVlX3NjcShjYXJkLCB2Yy0+c2NxKTsKIAl9CiAKLQl1cCgmY2FyZC0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmY2FyZC0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50CkBAIC0yNjAyLDcgKzI2MDMsNyBAQAogCXN0cnVjdCB2Y19tYXAgKnZjID0gdmNjLT5kZXZfZGF0YTsKIAlpbnQgZXJyb3IgPSAwOwogCi0JZG93bigmY2FyZC0+bXV0ZXgpOworCW11dGV4X2xvY2soJmNhcmQtPm11dGV4KTsKIAogCWlmIChxb3MtPnR4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fTk9ORSkgewogCSAgICAJaWYgKCF0ZXN0X2JpdChWQ0ZfVFgsICZ2Yy0+ZmxhZ3MpKSB7CkBAIC0yNjQ4LDcgKzI2NDksNyBAQAogCXNldF9iaXQoQVRNX1ZGX0hBU1FPUywgJnZjYy0+ZmxhZ3MpOwogCiBvdXQ6Ci0JdXAoJmNhcmQtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmNhcmQtPm11dGV4KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTM3MDksNyArMzcxMCw3IEBACiAJbWVtYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpOwogCXNyYW1iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CiAKLQlpbml0X01VVEVYKCZjYXJkLT5tdXRleCk7CisJbXV0ZXhfaW5pdCgmY2FyZC0+bXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT5jbWRfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnRzdF9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuaCBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmgKaW5kZXggNTQ0YjM5Ny4uNmYyYjRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuaAorKysgYi9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5oCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNTksNyArMzU5LDcgQEAKIAl1bnNpZ25lZCBsb25nCQlzcmFtYmFzZTsJLyogU0FSJ3Mgc3JhbSAgYmFzZSBhZGRyZXNzICovCiAJdm9pZCBfX2lvbWVtCQkqZmJxWzRdOwkvKiBGQlEgZmlsbCBhZGRyZXNzZXMgKi8KIAotCXN0cnVjdCBzZW1hcGhvcmUJbXV0ZXg7CisJc3RydWN0IG11dGV4CQltdXRleDsKIAlzcGlubG9ja190CQljbWRfbG9jazsJLyogZm9yIHIvdyB1dGlsaXR5L3NyYW0gKi8KIAogCXVuc2lnbmVkIGxvbmcJCXNvZnRzdGF0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdXhkaXNwbGF5L0tjb25maWcgYi9kcml2ZXJzL2F1eGRpc3BsYXkvS2NvbmZpZwppbmRleCAwMzAwZTdmNS4uZWE0ZmUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdXhkaXNwbGF5L0tjb25maWcKKysrIGIvZHJpdmVycy9hdXhkaXNwbGF5L0tjb25maWcKQEAgLTYsNiArNiw3IEBACiAjCiAKIG1lbnUgIkF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQVJQT1JUCiAKIGNvbmZpZyBLUzAxMDgKIAl0cmlzdGF0ZSAiS1MwMTA4IExDRCBDb250cm9sbGVyIgpAQCAtNjcsNiArNjgsMTAgQEAKIAlkZXBlbmRzIG9uIFg4NgogCWRlcGVuZHMgb24gRkIKIAlkZXBlbmRzIG9uIEtTMDEwOAorCXNlbGVjdCBGQl9TWVNfRklMTFJFQ1QKKwlzZWxlY3QgRkJfU1lTX0NPUFlBUkVBCisJc2VsZWN0IEZCX1NZU19JTUFHRUJMSVQKKwlzZWxlY3QgRkJfU1lTX0ZPUFMKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgaGF2ZSBhIENyeXN0YWxmb250eiAxMjh4NjQgMi1jb2xvciBMQ0QsIGNmYWcxMjg2NGIgU2VyaWVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdXhkaXNwbGF5L2NmYWcxMjg2NGJmYi5jIGIvZHJpdmVycy9hdXhkaXNwbGF5L2NmYWcxMjg2NGJmYi5jCmluZGV4IDY2ZmFmYmIuLjMwN2MxOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXV4ZGlzcGxheS9jZmFnMTI4NjRiZmIuYworKysgYi9kcml2ZXJzL2F1eGRpc3BsYXkvY2ZhZzEyODY0YmZiLmMKQEAgLTczLDkgKzczLDExIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIGNmYWcxMjg2NGJmYl9vcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmZiX2ZpbGxyZWN0ID0gY2ZiX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYSA9IGNmYl9jb3B5YXJlYSwKLQkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKKwkuZmJfcmVhZCA9IGZiX3N5c19yZWFkLAorCS5mYl93cml0ZSA9IGZiX3N5c193cml0ZSwKKwkuZmJfZmlsbHJlY3QgPSBzeXNfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gc3lzX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSBzeXNfaW1hZ2VibGl0LAogCS5mYl9tbWFwID0gY2ZhZzEyODY0YmZiX21tYXAsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGV2cmVzLmMgYi9kcml2ZXJzL2Jhc2UvZGV2cmVzLmMKaW5kZXggZTE3N2M5NS4uZTFjMDczMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RldnJlcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9kZXZyZXMuYwpAQCAtMTAxLDE5ICsxMDEsNiBAQAogCWxpc3RfYWRkX3RhaWwoJm5vZGUtPmVudHJ5LCAmZGV2LT5kZXZyZXNfaGVhZCk7CiB9CiAKLS8qKgotICogZGV2cmVzX2FsbG9jIC0gQWxsb2NhdGUgZGV2aWNlIHJlc291cmNlIGRhdGEKLSAqIEByZWxlYXNlOiBSZWxlYXNlIGZ1bmN0aW9uIGRldnJlcyB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aAotICogQHNpemU6IEFsbG9jYXRpb24gc2l6ZQotICogQGdmcDogQWxsb2NhdGlvbiBmbGFncwotICoKLSAqIGFsbG9jYXRlIGRldnJlcyBvZiBAc2l6ZSBieXRlcy4gIFRoZSBhbGxvY2F0ZWQgYXJlYSBpcyB6ZXJvZWQsIHRoZW4KLSAqIGFzc29jaWF0ZWQgd2l0aCBAcmVsZWFzZS4gIFRoZSByZXR1cm5lZCBwb2ludGVyIGNhbiBiZSBwYXNzZWQgdG8KLSAqIG90aGVyIGRldnJlc18qKCkgZnVuY3Rpb25zLgotICoKLSAqIFJFVFVSTlM6Ci0gKiBQb2ludGVyIHRvIGFsbG9jYXRlZCBkZXZyZXMgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgotICovCiAjaWZkZWYgQ09ORklHX0RFQlVHX0RFVlJFUwogdm9pZCAqIF9fZGV2cmVzX2FsbG9jKGRyX3JlbGVhc2VfdCByZWxlYXNlLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLAogCQkgICAgICBjb25zdCBjaGFyICpuYW1lKQpAQCAtMTI4LDYgKzExNSwxOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19kZXZyZXNfYWxsb2MpOwogI2Vsc2UKKy8qKgorICogZGV2cmVzX2FsbG9jIC0gQWxsb2NhdGUgZGV2aWNlIHJlc291cmNlIGRhdGEKKyAqIEByZWxlYXNlOiBSZWxlYXNlIGZ1bmN0aW9uIGRldnJlcyB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aAorICogQHNpemU6IEFsbG9jYXRpb24gc2l6ZQorICogQGdmcDogQWxsb2NhdGlvbiBmbGFncworICoKKyAqIEFsbG9jYXRlIGRldnJlcyBvZiBAc2l6ZSBieXRlcy4gIFRoZSBhbGxvY2F0ZWQgYXJlYSBpcyB6ZXJvZWQsIHRoZW4KKyAqIGFzc29jaWF0ZWQgd2l0aCBAcmVsZWFzZS4gIFRoZSByZXR1cm5lZCBwb2ludGVyIGNhbiBiZSBwYXNzZWQgdG8KKyAqIG90aGVyIGRldnJlc18qKCkgZnVuY3Rpb25zLgorICoKKyAqIFJFVFVSTlM6CisgKiBQb2ludGVyIHRvIGFsbG9jYXRlZCBkZXZyZXMgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCiB2b2lkICogZGV2cmVzX2FsbG9jKGRyX3JlbGVhc2VfdCByZWxlYXNlLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBkZXZyZXMgKmRyOwpAQCAtNDE2LDcgKzQxNiw3IEBACiB9CiAKIC8qKgotICogZGV2cmVzX3JlbGVhc2VfYWxsIC0gUmVsZWFzZSBhbGwgcmVzb3VyY2VzCisgKiBkZXZyZXNfcmVsZWFzZV9hbGwgLSBSZWxlYXNlIGFsbCBtYW5hZ2VkIHJlc291cmNlcwogICogQGRldjogRGV2aWNlIHRvIHJlbGVhc2UgcmVzb3VyY2VzIGZvcgogICoKICAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggQGRldi4gIFRoaXMgZnVuY3Rpb24gaXMKQEAgLTYwMCw3ICs2MDAsNyBAQAogfQogCiAvKioKLSAqIGRldm1fa3phbGxvYyAtIE1hbmFnZWQga3phbGxvYworICogZGV2bV9remFsbG9jIC0gUmVzb3VyY2UtbWFuYWdlZCBremFsbG9jCiAgKiBAZGV2OiBEZXZpY2UgdG8gYWxsb2NhdGUgbWVtb3J5IGZvcgogICogQHNpemU6IEFsbG9jYXRpb24gc2l6ZQogICogQGdmcDogQWxsb2NhdGlvbiBnZnAgZmxhZ3MKQEAgLTYyOCw3ICs2MjgsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9remFsbG9jKTsKIAogLyoqCi0gKiBkZXZtX2tmcmVlIC0gTWFuYWdlZCBrZnJlZQorICogZGV2bV9rZnJlZSAtIFJlc291cmNlLW1hbmFnZWQga2ZyZWUKICAqIEBkZXY6IERldmljZSB0aGlzIG1lbW9yeSBiZWxvbmdzIHRvCiAgKiBAcDogTWVtb3J5IHRvIGZyZWUKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZG1hcG9vbC5jIGIvZHJpdmVycy9iYXNlL2RtYXBvb2wuYwppbmRleCA5NDA2MjU5Li45MTk3MGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZG1hcG9vbC5jCisrKyBiL2RyaXZlcnMvYmFzZS9kbWFwb29sLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvaXNvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIC8qCiAgKiBQb29sIGFsbG9jYXRvciAuLi4gd3JhcHMgdGhlIGRtYV9hbGxvY19jb2hlcmVudCBwYWdlIGFsbG9jYXRvciwgc28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggMTdiNWVjZS4uODY5ZmY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTE2MCw2ICsxNjAsMTEgQEAKICAqCiAgKglDcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2Ugb2JqZWN0IHdoaWNoIGNhbiBoYXZlIG90aGVyIG9iamVjdHMgYXR0YWNoZWQKICAqCXRvIGl0LCBhbmQgd2hpY2ggd2lsbCBoYXZlIGF0dGFjaGVkIG9iamVjdHMgZnJlZWQgd2hlbiBpdCBpcyByZWxlYXNlZC4KKyAqCisgKglUaGlzIGRldmljZSB3aWxsIGJlIG1hcmtlZCBhcyBub3Qgc3VwcG9ydGluZyBob3RwbHVnZ2FibGUgZHJpdmVyczsgbm8KKyAqCWRldmljZSBhZGQvcmVtb3ZlIHVldmVudHMgd2lsbCBiZSBnZW5lcmF0ZWQuICBJbiB0aGUgdW51c3VhbCBjYXNlIHRoYXQKKyAqCXRoZSBkZXZpY2UgaXNuJ3QgYmVpbmcgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFzIGEgbGVnYWN5ICJwcm9iZSB0aGUKKyAqCWhhcmR3YXJlIiBkcml2ZXIsIGluZnJhc3RydWN0dXJlIGNvZGUgc2hvdWxkIHJldmVyc2UgdGhpcyBtYXJraW5nLgogICovCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGlkKQogewpAQCAtMTcyLDYgKzE3NywxMiBAQAogCQlwYS0+cGRldi5pZCA9IGlkOwogCQlkZXZpY2VfaW5pdGlhbGl6ZSgmcGEtPnBkZXYuZGV2KTsKIAkJcGEtPnBkZXYuZGV2LnJlbGVhc2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVsZWFzZTsKKworCQkvKiBwcmV2ZW50IGhvdHBsdWcgIm1vZHByb2JlICQoTU9EQUxJQVMpIiBmcm9tIGNhdXNpbmcgdHJvdWJsZSBpbgorCQkgKiBsZWdhY3kgcHJvYmUtdGhlLWhhcmR3YXJlIGRyaXZlcnMsIHdoaWNoIGRvbid0IHByb3Blcmx5IHNwbGl0CisJCSAqIG91dCBkZXZpY2UgZW51bWVyYXRpb24gbG9naWMgZnJvbSBkcml2ZXJzLgorCQkgKi8KKwkJcGEtPnBkZXYuZGV2LnVldmVudF9zdXBwcmVzcyA9IDE7CiAJfQogCiAJcmV0dXJuIHBhID8gJnBhLT5wZGV2IDogTlVMTDsKQEAgLTM0OSw4ICszNjAsMTUgQEAKICAqCVRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHNpbXBsZSBwbGF0Zm9ybSBkZXZpY2UgdGhhdCByZXF1aXJlcyBtaW5pbWFsCiAgKglyZXNvdXJjZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIENhbm5lZCByZWxlYXNlIGZ1bmN0aW9uIGZyZWVpbmcKICAqCW1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBkZXZpY2UgYWxsb3dzIGRyaXZlcnMgdXNpbmcgc3VjaCBkZXZpY2VzCi0gKgl0byBiZSB1bmxvYWRlZCBpd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGRldmljZQorICoJdG8gYmUgdW5sb2FkZWQgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGRldmljZQogICoJdG8gYmUgZHJvcHBlZC4KKyAqCisgKglUaGlzIGludGVyZmFjZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHVzZSB3aXRoIGxlZ2FjeSBkcml2ZXJzCisgKgl3aGljaCBwcm9iZSBoYXJkd2FyZSBkaXJlY3RseS4gIEJlY2F1c2Ugc3VjaCBkcml2ZXJzIGNyZWF0ZSBzeXNmcworICoJZGV2aWNlIG5vZGVzIHRoZW1zZWx2ZXMsIHJhdGhlciB0aGFuIGxldHRpbmcgc3lzdGVtIGluZnJhc3RydWN0dXJlCisgKgloYW5kbGUgc3VjaCBkZXZpY2UgZW51bWVyYXRpb24gdGFza3MsIHRoZXkgZG9uJ3QgZnVsbHkgY29uZm9ybSB0bworICoJdGhlIExpbnV4IGRyaXZlciBtb2RlbC4gIEluIHBhcnRpY3VsYXIsIHdoZW4gc3VjaCBkcml2ZXJzIGFyZSBidWlsdAorICoJYXMgbW9kdWxlcywgdGhleSBjYW4ndCBiZSAiaG90cGx1Z2dlZCIuCiAgKi8KIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGlkLAogCQkJCQkJCXN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMgYi9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYwppbmRleCAwNjdhOWU4Li44ZDhjZGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYworKysgYi9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYwpAQCAtMTI2LDEwICsxMjYsMTMgQEAKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKIAkJcmMgPSB0b3BvbG9neV9hZGRfZGV2KGNwdSk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQl0b3BvbG9neV9yZW1vdmVfZGV2KGNwdSk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZyBiL2RyaXZlcnMvYmxvY2svS2NvbmZpZwppbmRleCAxN2VlOTdmLi5iNGM4MzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0tjb25maWcKKysrIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCkBAIC00NDQsOCArNDQ0LDYgQEAKIAkgIHRoaXMgb3B0aW9uIGlzIGRhbmdlcm91cyB1bmxlc3MgdGhlIENELVJXIG1lZGlhIGlzIGtub3duIGdvb2QsIGFzIHdlCiAJICBkb24ndCBkbyBkZWZlcnJlZCB3cml0ZSBlcnJvciBoYW5kbGluZyB5ZXQuCiAKLXNvdXJjZSAiZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWciCi0KIGNvbmZpZyBBVEFfT1ZFUl9FVEgKIAl0cmlzdGF0ZSAiQVRBIG92ZXIgRXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE5FVApAQCAtNDUzLDYgKzQ1MSw4IEBACiAJVGhpcyBkcml2ZXIgcHJvdmlkZXMgU3VwcG9ydCBmb3IgQVRBIG92ZXIgRXRoZXJuZXQgYmxvY2sKIAlkZXZpY2VzIGxpa2UgdGhlIENvcmFpZCBFdGhlckRyaXZlIChSKSBTdG9yYWdlIEJsYWRlLgogCitzb3VyY2UgImRyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnIgorCiBlbmRtZW51CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Fjc2lfc2xtLmMgYi9kcml2ZXJzL2Jsb2NrL2Fjc2lfc2xtLmMKaW5kZXggZTJlMDQzMi4uMWQ5ZDliNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hY3NpX3NsbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svYWNzaV9zbG0uYwpAQCAtNjUsNyArNjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKaW5kZXggNjVhNzI1Yy4uNWFjYzZjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwpAQCAtNDUsNiArNDUsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3NnLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KIAogI2RlZmluZSBDQ0lTU19EUklWRVJfVkVSU0lPTihtYWosbWluLHN1Ym1pbikgKChtYWo8PDE2KXwobWluPDw4KXwoc3VibWluKSkKICNkZWZpbmUgRFJJVkVSX05BTUUgIkhQIENJU1MgRHJpdmVyICh2IDMuNi4xNCkiCkBAIC0xMTUyLDYgKzExNTYsMzAgQEAKIAkJCWtmcmVlKGlvYyk7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9CisKKwkvKiBzY3NpX2NtZF9pb2N0bCBoYW5kbGVzIHRoZXNlLCBiZWxvdywgdGhvdWdoIHNvbWUgYXJlIG5vdCAqLworCS8qIHZlcnkgbWVhbmluZ2Z1bCBmb3IgY2Npc3MuICBTR19JTyBpcyB0aGUgbWFpbiBvbmUgcGVvcGxlIHdhbnQuICovCisKKwljYXNlIFNHX0dFVF9WRVJTSU9OX05VTToKKwljYXNlIFNHX1NFVF9USU1FT1VUOgorCWNhc2UgU0dfR0VUX1RJTUVPVVQ6CisJY2FzZSBTR19HRVRfUkVTRVJWRURfU0laRToKKwljYXNlIFNHX1NFVF9SRVNFUlZFRF9TSVpFOgorCWNhc2UgU0dfRU1VTEFURURfSE9TVDoKKwljYXNlIFNHX0lPOgorCWNhc2UgU0NTSV9JT0NUTF9TRU5EX0NPTU1BTkQ6CisJCXJldHVybiBzY3NpX2NtZF9pb2N0bChmaWxlcCwgZGlzaywgY21kLCBhcmdwKTsKKworCS8qIHNjc2lfY21kX2lvY3RsIHdvdWxkIG5vcm1hbGx5IGhhbmRsZSB0aGVzZSwgYmVsb3csIGJ1dCAqLworCS8qIHRoZXkgYXJlbid0IGEgZ29vZCBmaXQgZm9yIGNjaXNzLCBhcyBDRC1ST01zIGFyZSAqLworCS8qIG5vdCBzdXBwb3J0ZWQsIGFuZCB3ZSBkb24ndCBoYXZlIGFueSBidXMvdGFyZ2V0L2x1biAqLworCS8qIHdoaWNoIHdlIHByZXNlbnQgdG8gdGhlIGtlcm5lbC4gKi8KKworCWNhc2UgQ0RST01fU0VORF9QQUNLRVQ6CisJY2FzZSBDRFJPTUNMT1NFVFJBWToKKwljYXNlIENEUk9NRUpFQ1Q6CisJY2FzZSBTQ1NJX0lPQ1RMX0dFVF9JRExVTjoKKwljYXNlIFNDU0lfSU9DVExfR0VUX0JVU19OVU1CRVI6CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpAQCAtMTIzNCw3ICsxMjYyLDcgQEAKIAkJcGNpX3VubWFwX3BhZ2UoaC0+cGRldiwgdGVtcDY0LnZhbCwgY21kLT5TR1tpXS5MZW4sIGRkaXIpOwogCX0KIAotCWNvbXBsZXRlX2J1ZmZlcnMocnEtPmJpbywgcnEtPmVycm9ycyk7CisJY29tcGxldGVfYnVmZmVycyhycS0+YmlvLCAocnEtPmVycm9ycyA9PSAwKSk7CiAKIAlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7CiAJCWNvbnN0IGludCBydyA9IHJxX2RhdGFfZGlyKHJxKTsKQEAgLTEyNDgsNyArMTI3Niw3IEBACiAKIAlhZGRfZGlza19yYW5kb21uZXNzKHJxLT5ycV9kaXNrKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwotCWVuZF90aGF0X3JlcXVlc3RfbGFzdChycSwgcnEtPmVycm9ycyk7CisJZW5kX3RoYXRfcmVxdWVzdF9sYXN0KHJxLCAocnEtPmVycm9ycyA9PSAwKSk7CiAJY21kX2ZyZWUoaCwgY21kLCAxKTsKIAljY2lzc19jaGVja19xdWV1ZXMoaCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwpAQCAtMjMzNiw2ICsyMzY0LDQ0IEBACiAJc3RhcnRfaW8oaCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGV2YWx1YXRlX3RhcmdldF9zdGF0dXMoQ29tbWFuZExpc3Rfc3RydWN0ICpjbWQpCit7CisJdW5zaWduZWQgY2hhciBzZW5zZV9rZXk7CisJaW50IGVycm9yX2NvdW50ID0gMTsKKworCWlmIChjbWQtPmVycl9pbmZvLT5TY3NpU3RhdHVzICE9IDB4MDIpIHsgLyogbm90IGNoZWNrIGNvbmRpdGlvbj8gKi8KKwkJaWYgKCFibGtfcGNfcmVxdWVzdChjbWQtPnJxKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgIgorCQkJICAgICAgICJoYXMgU0NTSSBTdGF0dXMgMHgleFxuIiwKKwkJCSAgICAgICBjbWQsIGNtZC0+ZXJyX2luZm8tPlNjc2lTdGF0dXMpOworCQlyZXR1cm4gZXJyb3JfY291bnQ7CisJfQorCisJLyogY2hlY2sgdGhlIHNlbnNlIGtleSAqLworCXNlbnNlX2tleSA9IDB4ZiAmIGNtZC0+ZXJyX2luZm8tPlNlbnNlSW5mb1syXTsKKwkvKiBubyBzdGF0dXMgb3IgcmVjb3ZlcmVkIGVycm9yICovCisJaWYgKChzZW5zZV9rZXkgPT0gMHgwKSB8fCAoc2Vuc2Vfa2V5ID09IDB4MSkpCisJCWVycm9yX2NvdW50ID0gMDsKKworCWlmICghYmxrX3BjX3JlcXVlc3QoY21kLT5ycSkpIHsgLyogTm90IFNHX0lPIG9yIHNpbWlsYXI/ICovCisJCWlmIChlcnJvcl9jb3VudCAhPSAwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCBoYXMgQ0hFQ0sgQ09ORElUSU9OIgorCQkJICAgICAgICIgc2Vuc2Uga2V5ID0gMHgleFxuIiwgY21kLCBzZW5zZV9rZXkpOworCQlyZXR1cm4gZXJyb3JfY291bnQ7CisJfQorCisJLyogU0dfSU8gb3Igc2ltaWxhciwgY29weSBzZW5zZSBkYXRhIGJhY2sgKi8KKwlpZiAoY21kLT5ycS0+c2Vuc2UpIHsKKwkJaWYgKGNtZC0+cnEtPnNlbnNlX2xlbiA+IGNtZC0+ZXJyX2luZm8tPlNlbnNlTGVuKQorCQkJY21kLT5ycS0+c2Vuc2VfbGVuID0gY21kLT5lcnJfaW5mby0+U2Vuc2VMZW47CisJCW1lbWNweShjbWQtPnJxLT5zZW5zZSwgY21kLT5lcnJfaW5mby0+U2Vuc2VJbmZvLAorCQkJY21kLT5ycS0+c2Vuc2VfbGVuKTsKKwl9IGVsc2UKKwkJY21kLT5ycS0+c2Vuc2VfbGVuID0gMDsKKworCXJldHVybiBlcnJvcl9jb3VudDsKK30KKwogLyogY2hlY2tzIHRoZSBzdGF0dXMgb2YgdGhlIGpvYiBhbmQgY2FsbHMgY29tcGxldGUgYnVmZmVycyB0byBtYXJrIGFsbAogICogYnVmZmVycyBmb3IgdGhlIGNvbXBsZXRlZCBqb2IuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IG5lZWQKICAqIHRvIGhvbGQgdGhlIGhiYS9xdWV1ZSBsb2NrLgpAQCAtMjM0MywxMDkgKzI0MDksOTkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wbGV0ZV9jb21tYW5kKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmNtZCwKIAkJCQkgICAgaW50IHRpbWVvdXQpCiB7Ci0JaW50IHN0YXR1cyA9IDE7CiAJaW50IHJldHJ5X2NtZCA9IDA7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gY21kLT5ycTsKKworCXJxLT5lcnJvcnMgPSAwOwogCiAJaWYgKHRpbWVvdXQpCi0JCXN0YXR1cyA9IDA7CisJCXJxLT5lcnJvcnMgPSAxOwogCi0JaWYgKGNtZC0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMgIT0gMCkgewkvKiBhbiBlcnJvciBoYXMgb2NjdXJyZWQgKi8KLQkJc3dpdGNoIChjbWQtPmVycl9pbmZvLT5Db21tYW5kU3RhdHVzKSB7Ci0JCQl1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTsKLQkJY2FzZSBDTURfVEFSR0VUX1NUQVRVUzoKLQkJCXN0YXR1cyA9IDA7CisJaWYgKGNtZC0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMgPT0gMCkJLyogbm8gZXJyb3IgaGFzIG9jY3VycmVkICovCisJCWdvdG8gYWZ0ZXJfZXJyb3JfcHJvY2Vzc2luZzsKIAotCQkJaWYgKGNtZC0+ZXJyX2luZm8tPlNjc2lTdGF0dXMgPT0gMHgwMikgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgIgotCQkJCSAgICAgICAiaGFzIENIRUNLIENPTkRJVElPTiAiCi0JCQkJICAgICAgICIgYnl0ZSAyID0gMHgleFxuIiwgY21kLAotCQkJCSAgICAgICBjbWQtPmVycl9pbmZvLT5TZW5zZUluZm9bMl0KLQkJCQkgICAgKTsKLQkJCQkvKiBjaGVjayB0aGUgc2Vuc2Uga2V5ICovCi0JCQkJc2Vuc2Vfa2V5ID0gMHhmICYgY21kLT5lcnJfaW5mby0+U2Vuc2VJbmZvWzJdOwotCQkJCS8qIG5vIHN0YXR1cyBvciByZWNvdmVyZWQgZXJyb3IgKi8KLQkJCQlpZiAoKHNlbnNlX2tleSA9PSAweDApIHx8IChzZW5zZV9rZXkgPT0gMHgxKSkgewotCQkJCQlzdGF0dXMgPSAxOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCAiCi0JCQkJICAgICAgICJoYXMgU0NTSSBTdGF0dXMgMHgleFxuIiwKLQkJCQkgICAgICAgY21kLCBjbWQtPmVycl9pbmZvLT5TY3NpU3RhdHVzKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENNRF9EQVRBX1VOREVSUlVOOgorCXN3aXRjaCAoY21kLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cykgeworCWNhc2UgQ01EX1RBUkdFVF9TVEFUVVM6CisJCXJxLT5lcnJvcnMgPSBldmFsdWF0ZV90YXJnZXRfc3RhdHVzKGNtZCk7CisJCWJyZWFrOworCWNhc2UgQ01EX0RBVEFfVU5ERVJSVU46CisJCWlmIChibGtfZnNfcmVxdWVzdChjbWQtPnJxKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCBoYXMiCiAJCQkgICAgICAgIiBjb21wbGV0ZWQgd2l0aCBkYXRhIHVuZGVycnVuICIKIAkJCSAgICAgICAicmVwb3J0ZWRcbiIsIGNtZCk7Ci0JCQlicmVhazsKLQkJY2FzZSBDTURfREFUQV9PVkVSUlVOOgorCQkJY21kLT5ycS0+ZGF0YV9sZW4gPSBjbWQtPmVycl9pbmZvLT5SZXNpZHVhbENudDsKKwkJfQorCQlicmVhazsKKwljYXNlIENNRF9EQVRBX09WRVJSVU46CisJCWlmIChibGtfZnNfcmVxdWVzdChjbWQtPnJxKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgaGFzIgogCQkJICAgICAgICIgY29tcGxldGVkIHdpdGggZGF0YSBvdmVycnVuICIKIAkJCSAgICAgICAicmVwb3J0ZWRcbiIsIGNtZCk7Ci0JCQlicmVhazsKLQkJY2FzZSBDTURfSU5WQUxJRDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgaXMgIgotCQkJICAgICAgICJyZXBvcnRlZCBpbnZhbGlkXG4iLCBjbWQpOwotCQkJc3RhdHVzID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIENNRF9QUk9UT0NPTF9FUlI6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwIGhhcyAiCi0JCQkgICAgICAgInByb3RvY29sIGVycm9yIFxuIiwgY21kKTsKLQkJCXN0YXR1cyA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBDTURfSEFSRFdBUkVfRVJSOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCBoYWQgIgotCQkJICAgICAgICIgaGFyZHdhcmUgZXJyb3JcbiIsIGNtZCk7Ci0JCQlzdGF0dXMgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ01EX0NPTk5FQ1RJT05fTE9TVDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgaGFkICIKLQkJCSAgICAgICAiY29ubmVjdGlvbiBsb3N0XG4iLCBjbWQpOwotCQkJc3RhdHVzID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIENNRF9BQk9SVEVEOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCB3YXMgIgotCQkJICAgICAgICJhYm9ydGVkXG4iLCBjbWQpOwotCQkJc3RhdHVzID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIENNRF9BQk9SVF9GQUlMRUQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwIHJlcG9ydHMgIgotCQkJICAgICAgICJhYm9ydCBmYWlsZWRcbiIsIGNtZCk7Ci0JCQlzdGF0dXMgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ01EX1VOU09MSUNJVEVEX0FCT1JUOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogdW5zb2xpY2l0ZWQgIgotCQkJICAgICAgICJhYm9ydCAlcFxuIiwgaC0+Y3RsciwgY21kKTsKLQkJCWlmIChjbWQtPnJldHJ5X2NvdW50IDwgTUFYX0NNRF9SRVRSSUVTKSB7Ci0JCQkJcmV0cnlfY21kID0gMTsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICAgICAgICJjY2lzcyVkOiByZXRyeWluZyAlcFxuIiwgaC0+Y3RsciwgY21kKTsKLQkJCQljbWQtPnJldHJ5X2NvdW50Kys7Ci0JCQl9IGVsc2UKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICAgICAgICJjY2lzcyVkOiAlcCByZXRyaWVkIHRvbyAiCi0JCQkJICAgICAgICJtYW55IHRpbWVzXG4iLCBoLT5jdGxyLCBjbWQpOwotCQkJc3RhdHVzID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIENNRF9USU1FT1VUOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCB0aW1lZG91dFxuIiwgY21kKTsKLQkJCXN0YXR1cyA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgcmV0dXJuZWQgIgotCQkJICAgICAgICJ1bmtub3duIHN0YXR1cyAleFxuIiwgY21kLAotCQkJICAgICAgIGNtZC0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMpOwotCQkJc3RhdHVzID0gMDsKLQkJfQorCQlicmVhazsKKwljYXNlIENNRF9JTlZBTElEOgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwIGlzICIKKwkJICAgICAgICJyZXBvcnRlZCBpbnZhbGlkXG4iLCBjbWQpOworCQlycS0+ZXJyb3JzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBDTURfUFJPVE9DT0xfRVJSOgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwIGhhcyAiCisJCSAgICAgICAicHJvdG9jb2wgZXJyb3IgXG4iLCBjbWQpOworCQlycS0+ZXJyb3JzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBDTURfSEFSRFdBUkVfRVJSOgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwIGhhZCAiCisJCSAgICAgICAiIGhhcmR3YXJlIGVycm9yXG4iLCBjbWQpOworCQlycS0+ZXJyb3JzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBDTURfQ09OTkVDVElPTl9MT1NUOgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwIGhhZCAiCisJCSAgICAgICAiY29ubmVjdGlvbiBsb3N0XG4iLCBjbWQpOworCQlycS0+ZXJyb3JzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBDTURfQUJPUlRFRDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCB3YXMgIgorCQkgICAgICAgImFib3J0ZWRcbiIsIGNtZCk7CisJCXJxLT5lcnJvcnMgPSAxOworCQlicmVhazsKKwljYXNlIENNRF9BQk9SVF9GQUlMRUQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgcmVwb3J0cyAiCisJCSAgICAgICAiYWJvcnQgZmFpbGVkXG4iLCBjbWQpOworCQlycS0+ZXJyb3JzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBDTURfVU5TT0xJQ0lURURfQUJPUlQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IHVuc29saWNpdGVkICIKKwkJICAgICAgICJhYm9ydCAlcFxuIiwgaC0+Y3RsciwgY21kKTsKKwkJaWYgKGNtZC0+cmV0cnlfY291bnQgPCBNQVhfQ01EX1JFVFJJRVMpIHsKKwkJCXJldHJ5X2NtZCA9IDE7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImNjaXNzJWQ6IHJldHJ5aW5nICVwXG4iLCBoLT5jdGxyLCBjbWQpOworCQkJY21kLT5yZXRyeV9jb3VudCsrOworCQl9IGVsc2UKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiY2Npc3MlZDogJXAgcmV0cmllZCB0b28gIgorCQkJICAgICAgICJtYW55IHRpbWVzXG4iLCBoLT5jdGxyLCBjbWQpOworCQlycS0+ZXJyb3JzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBDTURfVElNRU9VVDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCB0aW1lZG91dFxuIiwgY21kKTsKKwkJcnEtPmVycm9ycyA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgcmV0dXJuZWQgIgorCQkgICAgICAgInVua25vd24gc3RhdHVzICV4XG4iLCBjbWQsCisJCSAgICAgICBjbWQtPmVycl9pbmZvLT5Db21tYW5kU3RhdHVzKTsKKwkJcnEtPmVycm9ycyA9IDE7CiAJfQorCithZnRlcl9lcnJvcl9wcm9jZXNzaW5nOgorCiAJLyogV2UgbmVlZCB0byByZXR1cm4gdGhpcyBjb21tYW5kICovCiAJaWYgKHJldHJ5X2NtZCkgewogCQlyZXNlbmRfY2Npc3NfY21kKGgsIGNtZCk7CiAJCXJldHVybjsKIAl9Ci0KKwljbWQtPnJxLT5kYXRhX2xlbiA9IDA7CiAJY21kLT5ycS0+Y29tcGxldGlvbl9kYXRhID0gY21kOwotCWNtZC0+cnEtPmVycm9ycyA9IHN0YXR1czsKIAlibGtfYWRkX3RyYWNlX3JxKGNtZC0+cnEtPnEsIGNtZC0+cnEsIEJMS19UQV9DT01QTEVURSk7CiAJYmxrX2NvbXBsZXRlX3JlcXVlc3QoY21kLT5ycSk7CiB9CkBAIC0yNTM5LDMyICsyNTk1LDQwIEBACiAjZW5kaWYJCQkJLyogQ0NJU1NfREVCVUcgKi8KIAogCWMtPkhlYWRlci5TR0xpc3QgPSBjLT5IZWFkZXIuU0dUb3RhbCA9IHNlZzsKLQlpZihoLT5jY2lzc19yZWFkID09IENDSVNTX1JFQURfMTApIHsKLQkJYy0+UmVxdWVzdC5DREJbMV0gPSAwOwotCQljLT5SZXF1ZXN0LkNEQlsyXSA9IChzdGFydF9ibGsgPj4gMjQpICYgMHhmZjsJLy9NU0IKLQkJYy0+UmVxdWVzdC5DREJbM10gPSAoc3RhcnRfYmxrID4+IDE2KSAmIDB4ZmY7Ci0JCWMtPlJlcXVlc3QuQ0RCWzRdID0gKHN0YXJ0X2JsayA+PiA4KSAmIDB4ZmY7Ci0JCWMtPlJlcXVlc3QuQ0RCWzVdID0gc3RhcnRfYmxrICYgMHhmZjsKLQkJYy0+UmVxdWVzdC5DREJbNl0gPSAwOwkvLyAoc2VjdCA+PiAyNCkgJiAweGZmOyBNU0IKLQkJYy0+UmVxdWVzdC5DREJbN10gPSAoY3JlcS0+bnJfc2VjdG9ycyA+PiA4KSAmIDB4ZmY7Ci0JCWMtPlJlcXVlc3QuQ0RCWzhdID0gY3JlcS0+bnJfc2VjdG9ycyAmIDB4ZmY7Ci0JCWMtPlJlcXVlc3QuQ0RCWzldID0gYy0+UmVxdWVzdC5DREJbMTFdID0gYy0+UmVxdWVzdC5DREJbMTJdID0gMDsKKwlpZiAobGlrZWx5KGJsa19mc19yZXF1ZXN0KGNyZXEpKSkgeworCQlpZihoLT5jY2lzc19yZWFkID09IENDSVNTX1JFQURfMTApIHsKKwkJCWMtPlJlcXVlc3QuQ0RCWzFdID0gMDsKKwkJCWMtPlJlcXVlc3QuQ0RCWzJdID0gKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmOwkvL01TQgorCQkJYy0+UmVxdWVzdC5DREJbM10gPSAoc3RhcnRfYmxrID4+IDE2KSAmIDB4ZmY7CisJCQljLT5SZXF1ZXN0LkNEQls0XSA9IChzdGFydF9ibGsgPj4gOCkgJiAweGZmOworCQkJYy0+UmVxdWVzdC5DREJbNV0gPSBzdGFydF9ibGsgJiAweGZmOworCQkJYy0+UmVxdWVzdC5DREJbNl0gPSAwOwkvLyAoc2VjdCA+PiAyNCkgJiAweGZmOyBNU0IKKwkJCWMtPlJlcXVlc3QuQ0RCWzddID0gKGNyZXEtPm5yX3NlY3RvcnMgPj4gOCkgJiAweGZmOworCQkJYy0+UmVxdWVzdC5DREJbOF0gPSBjcmVxLT5ucl9zZWN0b3JzICYgMHhmZjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzldID0gYy0+UmVxdWVzdC5DREJbMTFdID0gYy0+UmVxdWVzdC5DREJbMTJdID0gMDsKKwkJfSBlbHNlIHsKKwkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTY7CisJCQljLT5SZXF1ZXN0LkNEQlsxXT0gMDsKKwkJCWMtPlJlcXVlc3QuQ0RCWzJdPSAoc3RhcnRfYmxrID4+IDU2KSAmIDB4ZmY7CS8vTVNCCisJCQljLT5SZXF1ZXN0LkNEQlszXT0gKHN0YXJ0X2JsayA+PiA0OCkgJiAweGZmOworCQkJYy0+UmVxdWVzdC5DREJbNF09IChzdGFydF9ibGsgPj4gNDApICYgMHhmZjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzVdPSAoc3RhcnRfYmxrID4+IDMyKSAmIDB4ZmY7CisJCQljLT5SZXF1ZXN0LkNEQls2XT0gKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmOworCQkJYy0+UmVxdWVzdC5DREJbN109IChzdGFydF9ibGsgPj4gMTYpICYgMHhmZjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzhdPSAoc3RhcnRfYmxrID4+ICA4KSAmIDB4ZmY7CisJCQljLT5SZXF1ZXN0LkNEQls5XT0gc3RhcnRfYmxrICYgMHhmZjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzEwXT0gKGNyZXEtPm5yX3NlY3RvcnMgPj4gIDI0KSAmIDB4ZmY7CisJCQljLT5SZXF1ZXN0LkNEQlsxMV09IChjcmVxLT5ucl9zZWN0b3JzID4+ICAxNikgJiAweGZmOworCQkJYy0+UmVxdWVzdC5DREJbMTJdPSAoY3JlcS0+bnJfc2VjdG9ycyA+PiAgOCkgJiAweGZmOworCQkJYy0+UmVxdWVzdC5DREJbMTNdPSBjcmVxLT5ucl9zZWN0b3JzICYgMHhmZjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzE0XSA9IGMtPlJlcXVlc3QuQ0RCWzE1XSA9IDA7CisJCX0KKwl9IGVsc2UgaWYgKGJsa19wY19yZXF1ZXN0KGNyZXEpKSB7CisJCWMtPlJlcXVlc3QuQ0RCTGVuID0gY3JlcS0+Y21kX2xlbjsKKwkJbWVtY3B5KGMtPlJlcXVlc3QuQ0RCLCBjcmVxLT5jbWQsIEJMS19NQVhfQ0RCKTsKIAl9IGVsc2UgewotCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDE2OwotCQljLT5SZXF1ZXN0LkNEQlsxXT0gMDsKLQkJYy0+UmVxdWVzdC5DREJbMl09IChzdGFydF9ibGsgPj4gNTYpICYgMHhmZjsJLy9NU0IKLQkJYy0+UmVxdWVzdC5DREJbM109IChzdGFydF9ibGsgPj4gNDgpICYgMHhmZjsKLQkJYy0+UmVxdWVzdC5DREJbNF09IChzdGFydF9ibGsgPj4gNDApICYgMHhmZjsKLQkJYy0+UmVxdWVzdC5DREJbNV09IChzdGFydF9ibGsgPj4gMzIpICYgMHhmZjsKLQkJYy0+UmVxdWVzdC5DREJbNl09IChzdGFydF9ibGsgPj4gMjQpICYgMHhmZjsKLQkJYy0+UmVxdWVzdC5DREJbN109IChzdGFydF9ibGsgPj4gMTYpICYgMHhmZjsKLQkJYy0+UmVxdWVzdC5DREJbOF09IChzdGFydF9ibGsgPj4gIDgpICYgMHhmZjsKLQkJYy0+UmVxdWVzdC5DREJbOV09IHN0YXJ0X2JsayAmIDB4ZmY7Ci0JCWMtPlJlcXVlc3QuQ0RCWzEwXT0gKGNyZXEtPm5yX3NlY3RvcnMgPj4gIDI0KSAmIDB4ZmY7Ci0JCWMtPlJlcXVlc3QuQ0RCWzExXT0gKGNyZXEtPm5yX3NlY3RvcnMgPj4gIDE2KSAmIDB4ZmY7Ci0JCWMtPlJlcXVlc3QuQ0RCWzEyXT0gKGNyZXEtPm5yX3NlY3RvcnMgPj4gIDgpICYgMHhmZjsKLQkJYy0+UmVxdWVzdC5DREJbMTNdPSBjcmVxLT5ucl9zZWN0b3JzICYgMHhmZjsKLQkJYy0+UmVxdWVzdC5DREJbMTRdID0gYy0+UmVxdWVzdC5DREJbMTVdID0gMDsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogYmFkIHJlcXVlc3QgdHlwZSAlZFxuIiwgaC0+Y3RsciwgY3JlcS0+Y21kX3R5cGUpOworCQlCVUcoKTsKIAl9CiAKIAlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwpAQCAtMzQwNSwxMiArMzQ2OSwzOCBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQgY2Npc3NfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIGNjaXNzX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWN0bHJfaW5mb190ICp0bXBfcHRyOworCWludCBpOworCWNoYXIgZmx1c2hfYnVmWzRdOworCWludCByZXR1cm5fY29kZTsKKworCXRtcF9wdHIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaWYgKHRtcF9wdHIgPT0gTlVMTCkKKwkJcmV0dXJuOworCWkgPSB0bXBfcHRyLT5jdGxyOworCWlmIChoYmFbaV0gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogVHVybiBib2FyZCBpbnRlcnJ1cHRzIG9mZiAgYW5kIHNlbmQgdGhlIGZsdXNoIGNhY2hlIGNvbW1hbmQgKi8KKwkvKiBzZW5kY21kIHdpbGwgdHVybiBvZmYgaW50ZXJydXB0LCBhbmQgc2VuZCB0aGUgZmx1c2guLi4KKwkgKiBUbyB3cml0ZSBhbGwgZGF0YSBpbiB0aGUgYmF0dGVyeSBiYWNrZWQgY2FjaGUgdG8gZGlza3MgKi8KKwltZW1zZXQoZmx1c2hfYnVmLCAwLCA0KTsKKwlyZXR1cm5fY29kZSA9IHNlbmRjbWQoQ0NJU1NfQ0FDSEVfRkxVU0gsIGksIGZsdXNoX2J1ZiwgNCwgMCwgMCwgMCwgTlVMTCwKKwkJCSAgICAgIFRZUEVfQ01EKTsKKwlpZiAocmV0dXJuX2NvZGUgPT0gSU9fT0spIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ29tcGxldGVkIGZsdXNoaW5nIGNhY2hlIG9uIGNvbnRyb2xsZXIgJWRcbiIsIGkpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVycm9yIGZsdXNoaW5nIGNhY2hlIG9uIGNvbnRyb2xsZXIgJWRcbiIsIGkpOworCX0KKwlmcmVlX2lycShoYmFbaV0tPmludHJbMl0sIGhiYVtpXSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjY2lzc19yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCWN0bHJfaW5mb190ICp0bXBfcHRyOwogCWludCBpLCBqOwotCWNoYXIgZmx1c2hfYnVmWzRdOwotCWludCByZXR1cm5fY29kZTsKIAogCWlmIChwY2lfZ2V0X2RydmRhdGEocGRldikgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImNjaXNzOiBVbmFibGUgdG8gcmVtb3ZlIGRldmljZSBcbiIpOwpAQCAtMzQ0MiwxOCArMzUzMiw3IEBACiAKIAljY2lzc191bnJlZ2lzdGVyX3Njc2koaSk7CS8qIHVuaG9vayBmcm9tIFNDU0kgc3Vic3lzdGVtICovCiAKLQkvKiBUdXJuIGJvYXJkIGludGVycnVwdHMgb2ZmICBhbmQgc2VuZCB0aGUgZmx1c2ggY2FjaGUgY29tbWFuZCAqLwotCS8qIHNlbmRjbWQgd2lsbCB0dXJuIG9mZiBpbnRlcnJ1cHQsIGFuZCBzZW5kIHRoZSBmbHVzaC4uLgotCSAqIFRvIHdyaXRlIGFsbCBkYXRhIGluIHRoZSBiYXR0ZXJ5IGJhY2tlZCBjYWNoZSB0byBkaXNrcyAqLwotCW1lbXNldChmbHVzaF9idWYsIDAsIDQpOwotCXJldHVybl9jb2RlID0gc2VuZGNtZChDQ0lTU19DQUNIRV9GTFVTSCwgaSwgZmx1c2hfYnVmLCA0LCAwLCAwLCAwLCBOVUxMLAotCQkJICAgICAgVFlQRV9DTUQpOwotCWlmIChyZXR1cm5fY29kZSA9PSBJT19PSykgewotCQlwcmludGsoS0VSTl9JTkZPICJDb21wbGV0ZWQgZmx1c2hpbmcgY2FjaGUgb24gY29udHJvbGxlciAlZFxuIiwgaSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXJyb3IgZmx1c2hpbmcgY2FjaGUgb24gY29udHJvbGxlciAlZFxuIiwgaSk7Ci0JfQotCWZyZWVfaXJxKGhiYVtpXS0+aW50clsyXSwgaGJhW2ldKTsKKwljY2lzc19zaHV0ZG93bihwZGV2KTsKIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAJaWYgKGhiYVtpXS0+bXNpeF92ZWN0b3IpCkBAIC0zNDg2LDcgKzM1NjUsNyBAQAogCS5wcm9iZSA9IGNjaXNzX2luaXRfb25lLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChjY2lzc19yZW1vdmVfb25lKSwKIAkuaWRfdGFibGUgPSBjY2lzc19wY2lfZGV2aWNlX2lkLAkvKiBpZF90YWJsZSAqLwotCS5zaHV0ZG93biA9IGNjaXNzX3JlbW92ZV9vbmUsCisJLnNodXRkb3duID0gY2Npc3Nfc2h1dGRvd24sCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYwppbmRleCBiYjE1MDUxLi45MDk2MWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYwpAQCAtMzUsNyArMzUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCi0jaW5jbHVkZSA8c2NzaS9zY3NpLmg+IAogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggNTIzMWVkNy4uZmUwODgwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC02NzAsNyArNjcwLDcgQEAKIAlpZiAoZHJpdmUgPT0gY3VycmVudF9yZXFEKQogCQlkcml2ZSA9IGN1cnJlbnRfZHJpdmU7CiAJZGVsX3RpbWVyKCZmZF90aW1lb3V0KTsKLQlpZiAoZHJpdmUgPCAwIHx8IGRyaXZlID4gTl9EUklWRSkgeworCWlmIChkcml2ZSA8IDAgfHwgZHJpdmUgPj0gTl9EUklWRSkgewogCQlmZF90aW1lb3V0LmV4cGlyZXMgPSBqaWZmaWVzICsgMjBVTCAqIEhaOwogCQlkcml2ZSA9IDA7CiAJfSBlbHNlCkBAIC00MzM0LDcgKzQzMzQsMTAgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2ZsdXNoX3dvcms7CiAKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZmbG9wcHlfZGV2aWNlW2RyaXZlXS5kZXYsJmRldl9hdHRyX2Ntb3MpOworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmZsb3BweV9kZXZpY2VbZHJpdmVdLmRldiwmZGV2X2F0dHJfY21vcyk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF91bnJlZ19wbGF0Zm9ybV9kZXY7CisKIAkJLyogdG8gYmUgY2xlYW5lZCB1cC4uLiAqLwogCQlkaXNrc1tkcml2ZV0tPnByaXZhdGVfZGF0YSA9ICh2b2lkICopKGxvbmcpZHJpdmU7CiAJCWRpc2tzW2RyaXZlXS0+cXVldWUgPSBmbG9wcHlfcXVldWU7CkBAIC00MzQ1LDYgKzQzNDgsOCBAQAogCiAJcmV0dXJuIDA7CiAKK291dF91bnJlZ19wbGF0Zm9ybV9kZXY6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmZsb3BweV9kZXZpY2VbZHJpdmVdKTsKIG91dF9mbHVzaF93b3JrOgogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJaWYgKHVzYWdlX2NvdW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCAwZDRjY2Q0Li41NTI2ZWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtNzcsOSArNzcsOCBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotc3RhdGljIGludCBtYXhfbG9vcCA9IDg7Ci1zdGF0aWMgc3RydWN0IGxvb3BfZGV2aWNlICpsb29wX2RldjsKLXN0YXRpYyBzdHJ1Y3QgZ2VuZGlzayAqKmRpc2tzOworc3RhdGljIExJU1RfSEVBRChsb29wX2RldmljZXMpOworc3RhdGljIERFRklORV9NVVRFWChsb29wX2RldmljZXNfbXV0ZXgpOwogCiAvKgogICogVHJhbnNmZXIgZnVuY3Rpb25zCkBAIC0xODMsNyArMTgyLDcgQEAKIAlpZiAodW5saWtlbHkoKGxvZmZfdCl4ICE9IHNpemUpKQogCQlyZXR1cm4gLUVGQklHOwogCi0Jc2V0X2NhcGFjaXR5KGRpc2tzW2xvLT5sb19udW1iZXJdLCB4KTsKKwlzZXRfY2FwYWNpdHkobG8tPmxvX2Rpc2ssIHgpOwogCXJldHVybiAwOwkJCQkJCiB9CiAKQEAgLTI0NCwxNyArMjQzLDEzIEBACiAJCXRyYW5zZmVyX3Jlc3VsdCA9IGxvX2RvX3RyYW5zZmVyKGxvLCBXUklURSwgcGFnZSwgb2Zmc2V0LAogCQkJCWJ2ZWMtPmJ2X3BhZ2UsIGJ2X29mZnMsIHNpemUsIElWKTsKIAkJaWYgKHVubGlrZWx5KHRyYW5zZmVyX3Jlc3VsdCkpIHsKLQkJCWNoYXIgKmthZGRyOwotCiAJCQkvKgogCQkJICogVGhlIHRyYW5zZmVyIGZhaWxlZCwgYnV0IHdlIHN0aWxsIHdyaXRlIHRoZSBkYXRhIHRvCiAJCQkgKiBrZWVwIHByZXBhcmUvY29tbWl0IGNhbGxzIGJhbGFuY2VkLgogCQkJICovCiAJCQlwcmludGsoS0VSTl9FUlIgImxvb3A6IHRyYW5zZmVyIGVycm9yIGJsb2NrICVsbHVcbiIsCiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbmRleCk7Ci0JCQlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQkJCW1lbXNldChrYWRkciArIG9mZnNldCwgMCwgc2l6ZSk7Ci0JCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCBvZmZzZXQsIHNpemUsIEtNX1VTRVIwKTsKIAkJfQogCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAkJcmV0ID0gYW9wcy0+Y29tbWl0X3dyaXRlKGZpbGUsIHBhZ2UsIG9mZnNldCwKQEAgLTgxMiw3ICs4MDcsNyBAQAogCWxvLT5sb19xdWV1ZS0+cXVldWVkYXRhID0gbG87CiAJbG8tPmxvX3F1ZXVlLT51bnBsdWdfZm4gPSBsb29wX3VucGx1ZzsKIAotCXNldF9jYXBhY2l0eShkaXNrc1tsby0+bG9fbnVtYmVyXSwgc2l6ZSk7CisJc2V0X2NhcGFjaXR5KGxvLT5sb19kaXNrLCBzaXplKTsKIAliZF9zZXRfc2l6ZShiZGV2LCBzaXplIDw8IDkpOwogCiAJc2V0X2Jsb2Nrc2l6ZShiZGV2LCBsb19ibG9ja3NpemUpOwpAQCAtODMyLDcgKzgyNyw3IEBACiAJbG8tPmxvX2RldmljZSA9IE5VTEw7CiAJbG8tPmxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7CiAJbG8tPmxvX2ZsYWdzID0gMDsKLQlzZXRfY2FwYWNpdHkoZGlza3NbbG8tPmxvX251bWJlcl0sIDApOworCXNldF9jYXBhY2l0eShsby0+bG9fZGlzaywgMCk7CiAJaW52YWxpZGF0ZV9iZGV2KGJkZXYpOwogCWJkX3NldF9zaXplKGJkZXYsIDApOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKG1hcHBpbmcsIGxvLT5vbGRfZ2ZwX21hc2spOwpAQCAtOTE4LDcgKzkxMyw3IEBACiAJbWVtc2V0KGxvLT5sb19jcnlwdF9uYW1lLCAwLCBMT19OQU1FX1NJWkUpOwogCW1lbXNldChsby0+bG9fZmlsZV9uYW1lLCAwLCBMT19OQU1FX1NJWkUpOwogCWludmFsaWRhdGVfYmRldihiZGV2KTsKLQlzZXRfY2FwYWNpdHkoZGlza3NbbG8tPmxvX251bWJlcl0sIDApOworCXNldF9jYXBhY2l0eShsby0+bG9fZGlzaywgMCk7CiAJYmRfc2V0X3NpemUoYmRldiwgMCk7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2soZmlscC0+Zl9tYXBwaW5nLCBnZnApOwogCWxvLT5sb19zdGF0ZSA9IExvX3VuYm91bmQ7CkBAIC0xMzU3LDggKzEzNTIsOSBAQAogLyoKICAqIEFuZCBub3cgdGhlIG1vZHVsZXMgY29kZSBhbmQga2VybmVsIGludGVyZmFjZS4KICAqLworc3RhdGljIGludCBtYXhfbG9vcDsKIG1vZHVsZV9wYXJhbShtYXhfbG9vcCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobWF4X2xvb3AsICJNYXhpbXVtIG51bWJlciBvZiBsb29wIGRldmljZXMgKDEtMjU2KSIpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfbG9vcCwgIm9ic29sZXRlLCBsb29wIGRldmljZSBpcyBjcmVhdGVkIG9uLWRlbWFuZCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0JMT0NLREVWX01BSk9SKExPT1BfTUFKT1IpOwogCkBAIC0xMzgzLDcgKzEzNzksNyBAQAogCiAJeGZlcl9mdW5jc1tuXSA9IE5VTEw7CiAKLQlmb3IgKGxvID0gJmxvb3BfZGV2WzBdOyBsbyA8ICZsb29wX2RldlttYXhfbG9vcF07IGxvKyspIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvLCAmbG9vcF9kZXZpY2VzLCBsb19saXN0KSB7CiAJCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwogCiAJCWlmIChsby0+bG9fZW5jcnlwdGlvbiA9PSB4ZmVyKQpAQCAtMTM5OCw5MSArMTM5NCwxMDAgQEAKIEVYUE9SVF9TWU1CT0wobG9vcF9yZWdpc3Rlcl90cmFuc2Zlcik7CiBFWFBPUlRfU1lNQk9MKGxvb3BfdW5yZWdpc3Rlcl90cmFuc2Zlcik7CiAKLXN0YXRpYyBpbnQgX19pbml0IGxvb3BfaW5pdCh2b2lkKQorc3RhdGljIHN0cnVjdCBsb29wX2RldmljZSAqbG9vcF9pbml0X29uZShpbnQgaSkKIHsKLQlpbnQJaTsKKwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvOworCXN0cnVjdCBnZW5kaXNrICpkaXNrOwogCi0JaWYgKG1heF9sb29wIDwgMSB8fCBtYXhfbG9vcCA+IDI1NikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJsb29wOiBpbnZhbGlkIG1heF9sb29wIChtdXN0IGJlIGJldHdlZW4iCi0JCQkJICAgICIgMSBhbmQgMjU2KSwgdXNpbmcgZGVmYXVsdCAoOClcbiIpOwotCQltYXhfbG9vcCA9IDg7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsbywgJmxvb3BfZGV2aWNlcywgbG9fbGlzdCkgeworCQlpZiAobG8tPmxvX251bWJlciA9PSBpKQorCQkJcmV0dXJuIGxvOwogCX0KIAotCWlmIChyZWdpc3Rlcl9ibGtkZXYoTE9PUF9NQUpPUiwgImxvb3AiKSkKLQkJcmV0dXJuIC1FSU87CisJbG8gPSBremFsbG9jKHNpemVvZigqbG8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvKQorCQlnb3RvIG91dDsKIAotCWxvb3BfZGV2ID0ga21hbGxvYyhtYXhfbG9vcCAqIHNpemVvZihzdHJ1Y3QgbG9vcF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxvb3BfZGV2KQotCQlnb3RvIG91dF9tZW0xOwotCW1lbXNldChsb29wX2RldiwgMCwgbWF4X2xvb3AgKiBzaXplb2Yoc3RydWN0IGxvb3BfZGV2aWNlKSk7CisJbG8tPmxvX3F1ZXVlID0gYmxrX2FsbG9jX3F1ZXVlKEdGUF9LRVJORUwpOworCWlmICghbG8tPmxvX3F1ZXVlKQorCQlnb3RvIG91dF9mcmVlX2RldjsKIAotCWRpc2tzID0ga21hbGxvYyhtYXhfbG9vcCAqIHNpemVvZihzdHJ1Y3QgZ2VuZGlzayAqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkaXNrcykKLQkJZ290byBvdXRfbWVtMjsKKwlkaXNrID0gbG8tPmxvX2Rpc2sgPSBhbGxvY19kaXNrKDEpOworCWlmICghZGlzaykKKwkJZ290byBvdXRfZnJlZV9xdWV1ZTsKIAotCWZvciAoaSA9IDA7IGkgPCBtYXhfbG9vcDsgaSsrKSB7Ci0JCWRpc2tzW2ldID0gYWxsb2NfZGlzaygxKTsKLQkJaWYgKCFkaXNrc1tpXSkKLQkJCWdvdG8gb3V0X21lbTM7Ci0JfQorCW11dGV4X2luaXQoJmxvLT5sb19jdGxfbXV0ZXgpOworCWxvLT5sb19udW1iZXIJCT0gaTsKKwlsby0+bG9fdGhyZWFkCQk9IE5VTEw7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbG8tPmxvX2V2ZW50KTsKKwlzcGluX2xvY2tfaW5pdCgmbG8tPmxvX2xvY2spOworCWRpc2stPm1ham9yCQk9IExPT1BfTUFKT1I7CisJZGlzay0+Zmlyc3RfbWlub3IJPSBpOworCWRpc2stPmZvcHMJCT0gJmxvX2ZvcHM7CisJZGlzay0+cHJpdmF0ZV9kYXRhCT0gbG87CisJZGlzay0+cXVldWUJCT0gbG8tPmxvX3F1ZXVlOworCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAibG9vcCVkIiwgaSk7CisJYWRkX2Rpc2soZGlzayk7CisJbGlzdF9hZGRfdGFpbCgmbG8tPmxvX2xpc3QsICZsb29wX2RldmljZXMpOworCXJldHVybiBsbzsKIAotCWZvciAoaSA9IDA7IGkgPCBtYXhfbG9vcDsgaSsrKSB7Ci0JCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSAmbG9vcF9kZXZbaV07Ci0JCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGlza3NbaV07Ci0KLQkJbWVtc2V0KGxvLCAwLCBzaXplb2YoKmxvKSk7Ci0JCWxvLT5sb19xdWV1ZSA9IGJsa19hbGxvY19xdWV1ZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFsby0+bG9fcXVldWUpCi0JCQlnb3RvIG91dF9tZW00OwotCQltdXRleF9pbml0KCZsby0+bG9fY3RsX211dGV4KTsKLQkJbG8tPmxvX251bWJlciA9IGk7Ci0JCWxvLT5sb190aHJlYWQgPSBOVUxMOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsby0+bG9fZXZlbnQpOwotCQlzcGluX2xvY2tfaW5pdCgmbG8tPmxvX2xvY2spOwotCQlkaXNrLT5tYWpvciA9IExPT1BfTUFKT1I7Ci0JCWRpc2stPmZpcnN0X21pbm9yID0gaTsKLQkJZGlzay0+Zm9wcyA9ICZsb19mb3BzOwotCQlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgImxvb3AlZCIsIGkpOwotCQlkaXNrLT5wcml2YXRlX2RhdGEgPSBsbzsKLQkJZGlzay0+cXVldWUgPSBsby0+bG9fcXVldWU7Ci0JfQotCi0JLyogV2UgY2Fubm90IGZhaWwgYWZ0ZXIgd2UgY2FsbCB0aGlzLCBzbyBhbm90aGVyIGxvb3AhKi8KLQlmb3IgKGkgPSAwOyBpIDwgbWF4X2xvb3A7IGkrKykKLQkJYWRkX2Rpc2soZGlza3NbaV0pOwotCXByaW50ayhLRVJOX0lORk8gImxvb3A6IGxvYWRlZCAobWF4ICVkIGRldmljZXMpXG4iLCBtYXhfbG9vcCk7Ci0JcmV0dXJuIDA7Ci0KLW91dF9tZW00OgotCXdoaWxlIChpLS0pCi0JCWJsa19jbGVhbnVwX3F1ZXVlKGxvb3BfZGV2W2ldLmxvX3F1ZXVlKTsKLQlpID0gbWF4X2xvb3A7Ci1vdXRfbWVtMzoKLQl3aGlsZSAoaS0tKQotCQlwdXRfZGlzayhkaXNrc1tpXSk7Ci0Ja2ZyZWUoZGlza3MpOwotb3V0X21lbTI6Ci0Ja2ZyZWUobG9vcF9kZXYpOwotb3V0X21lbTE6Ci0JdW5yZWdpc3Rlcl9ibGtkZXYoTE9PUF9NQUpPUiwgImxvb3AiKTsKLQlwcmludGsoS0VSTl9FUlIgImxvb3A6IHJhbiBvdXQgb2YgbWVtb3J5XG4iKTsKLQlyZXR1cm4gLUVOT01FTTsKK291dF9mcmVlX3F1ZXVlOgorCWJsa19jbGVhbnVwX3F1ZXVlKGxvLT5sb19xdWV1ZSk7CitvdXRfZnJlZV9kZXY6CisJa2ZyZWUobG8pOworb3V0OgorCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBsb29wX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIGxvb3BfZGVsX29uZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogewotCWludCBpOworCWRlbF9nZW5kaXNrKGxvLT5sb19kaXNrKTsKKwlibGtfY2xlYW51cF9xdWV1ZShsby0+bG9fcXVldWUpOworCXB1dF9kaXNrKGxvLT5sb19kaXNrKTsKKwlsaXN0X2RlbCgmbG8tPmxvX2xpc3QpOworCWtmcmVlKGxvKTsKK30KIAotCWZvciAoaSA9IDA7IGkgPCBtYXhfbG9vcDsgaSsrKSB7Ci0JCWRlbF9nZW5kaXNrKGRpc2tzW2ldKTsKLQkJYmxrX2NsZWFudXBfcXVldWUobG9vcF9kZXZbaV0ubG9fcXVldWUpOwotCQlwdXRfZGlzayhkaXNrc1tpXSk7CitzdGF0aWMgc3RydWN0IGtvYmplY3QgKmxvb3BfcHJvYmUoZGV2X3QgZGV2LCBpbnQgKnBhcnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGxvb3BfZGV2aWNlICpsbzsKKwlzdHJ1Y3Qga29iamVjdCAqa29iajsKKworCW11dGV4X2xvY2soJmxvb3BfZGV2aWNlc19tdXRleCk7CisJbG8gPSBsb29wX2luaXRfb25lKGRldiAmIE1JTk9STUFTSyk7CisJa29iaiA9IGxvID8gZ2V0X2Rpc2sobG8tPmxvX2Rpc2spIDogRVJSX1BUUigtRU5PTUVNKTsKKwltdXRleF91bmxvY2soJmxvb3BfZGV2aWNlc19tdXRleCk7CisKKwkqcGFydCA9IDA7CisJcmV0dXJuIGtvYmo7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGxvb3BfaW5pdCh2b2lkKQoreworCWlmIChyZWdpc3Rlcl9ibGtkZXYoTE9PUF9NQUpPUiwgImxvb3AiKSkKKwkJcmV0dXJuIC1FSU87CisJYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihMT09QX01BSk9SLCAwKSwgMVVMIDw8IE1JTk9SQklUUywKKwkJCQkgIFRISVNfTU9EVUxFLCBsb29wX3Byb2JlLCBOVUxMLCBOVUxMKTsKKworCWlmIChtYXhfbG9vcCkgeworCQlwcmludGsoS0VSTl9JTkZPICJsb29wOiB0aGUgbWF4X2xvb3Agb3B0aW9uIGlzIG9ic29sZXRlICIKKwkJCQkgImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gTWFyY2ggMjAwOFxuIik7CisKIAl9CisJcHJpbnRrKEtFUk5fSU5GTyAibG9vcDogbW9kdWxlIGxvYWRlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsb29wX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCAqbmV4dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsbywgbmV4dCwgJmxvb3BfZGV2aWNlcywgbG9fbGlzdCkKKwkJbG9vcF9kZWxfb25lKGxvKTsKKworCWJsa191bnJlZ2lzdGVyX3JlZ2lvbihNS0RFVihMT09QX01BSk9SLCAwKSwgMVVMIDw8IE1JTk9SQklUUyk7CiAJaWYgKHVucmVnaXN0ZXJfYmxrZGV2KExPT1BfTUFKT1IsICJsb29wIikpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImxvb3A6IGNhbm5vdCB1bnJlZ2lzdGVyIGJsa2RldlxuIik7Ci0KLQlrZnJlZShkaXNrcyk7Ci0Ja2ZyZWUobG9vcF9kZXYpOwogfQogCiBtb2R1bGVfaW5pdChsb29wX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggMDkwNzk2Yi4uMDY5YWUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0zNjYsMjAgKzM2NiwyNSBAQAogCS5zaG93ID0gcGlkX3Nob3csCiB9OwogCi1zdGF0aWMgdm9pZCBuYmRfZG9faXQoc3RydWN0IG5iZF9kZXZpY2UgKmxvKQorc3RhdGljIGludCBuYmRfZG9faXQoc3RydWN0IG5iZF9kZXZpY2UgKmxvKQogewogCXN0cnVjdCByZXF1ZXN0ICpyZXE7CisJaW50IHJldDsKIAogCUJVR19PTihsby0+bWFnaWMgIT0gTE9fTUFHSUMpOwogCiAJbG8tPnBpZCA9IGN1cnJlbnQtPnBpZDsKLQlzeXNmc19jcmVhdGVfZmlsZSgmbG8tPmRpc2stPmtvYmosICZwaWRfYXR0ci5hdHRyKTsKKwlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZSgmbG8tPmRpc2stPmtvYmosICZwaWRfYXR0ci5hdHRyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAibmJkOiBzeXNmc19jcmVhdGVfZmlsZSBmYWlsZWQhIik7CisJCXJldHVybiByZXQ7CisJfQogCiAJd2hpbGUgKChyZXEgPSBuYmRfcmVhZF9zdGF0KGxvKSkgIT0gTlVMTCkKIAkJbmJkX2VuZF9yZXF1ZXN0KHJlcSk7CiAKIAlzeXNmc19yZW1vdmVfZmlsZSgmbG8tPmRpc2stPmtvYmosICZwaWRfYXR0ci5hdHRyKTsKLQlyZXR1cm47CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG5iZF9jbGVhcl9xdWUoc3RydWN0IG5iZF9kZXZpY2UgKmxvKQpAQCAtNTY5LDcgKzU3NCw5IEBACiAJY2FzZSBOQkRfRE9fSVQ6CiAJCWlmICghbG8tPmZpbGUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbmJkX2RvX2l0KGxvKTsKKwkJZXJyb3IgPSBuYmRfZG9faXQobG8pOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAJCS8qIG9uIHJldHVybiB0aWR5IHVwIGluIGNhc2Ugd2UgaGF2ZSBhIHNpZ25hbCAqLwogCQkvKiBGb3JjaWJseSBzaHV0ZG93biB0aGUgc29ja2V0IGNhdXNpbmcgYWxsIGxpc3RlbmVycwogCQkgKiB0byBlcnJvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9yZC5jIGIvZHJpdmVycy9ibG9jay9yZC5jCmluZGV4IDQzZDRlYmMuLmExNTEyZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3JkLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogfQogCiAvKgotICogLT53cml0ZXBhZ2UgdG8gdGhlIHRoZSBibG9ja2RldidzIG1hcHBpbmcgaGFzIHRvIHJlZGlydHkgdGhlIHBhZ2Ugc28gdGhhdCB0aGUKKyAqIC0+d3JpdGVwYWdlIHRvIHRoZSBibG9ja2RldidzIG1hcHBpbmcgaGFzIHRvIHJlZGlydHkgdGhlIHBhZ2Ugc28gdGhhdCB0aGUKICAqIFZNIGRvZXNuJ3QgZ28gYW5kIHN0ZWFsIGl0LiAgV2UgcmV0dXJuIEFPUF9XUklURVBBR0VfQUNUSVZBVEUgc28gdGhhdCB0aGUgVk0KICAqIHdvbid0IHRyeSB0byAocG9pbnRsZXNzbHkpIHdyaXRlIHRoZSBwYWdlIGFnYWluIGZvciBhIHdoaWxlLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdW1lbS5jIGIvZHJpdmVycy9ibG9jay91bWVtLmMKaW5kZXggNTg3MjAzNi4uNmY1ZDYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91bWVtLmMKKysrIGIvZHJpdmVycy9ibG9jay91bWVtLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKaW5kZXggMGY0MjAzYi4uNjA1NWI5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKQEAgLTMwNyw3ICszMDcsOSBAQAogCiAJaWYgKGh1KSB7CiAJCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gaHUtPmhkZXY7Ci0JCWhjaV91YXJ0X2Nsb3NlKGhkZXYpOworCisJCWlmIChoZGV2KQorCQkJaGNpX3VhcnRfY2xvc2UoaGRldik7CiAKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfVUFSVF9QUk9UT19TRVQsICZodS0+ZmxhZ3MpKSB7CiAJCQlodS0+cHJvdG8tPmNsb3NlKGh1KTsKQEAgLTQ3MywxMiArNDc1LDE4IEBACiAJCQl0dHktPmxvd19sYXRlbmN5ID0gMTsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gLUVCVVNZOworCQlicmVhazsKIAogCWNhc2UgSENJVUFSVEdFVFBST1RPOgogCQlpZiAodGVzdF9iaXQoSENJX1VBUlRfUFJPVE9fU0VULCAmaHUtPmZsYWdzKSkKIAkJCXJldHVybiBodS0+cHJvdG8tPmlkOwogCQlyZXR1cm4gLUVVTkFUQ0g7CiAKKwljYXNlIEhDSVVBUlRHRVRERVZJQ0U6CisJCWlmICh0ZXN0X2JpdChIQ0lfVUFSVF9QUk9UT19TRVQsICZodS0+ZmxhZ3MpKQorCQkJcmV0dXJuIGh1LT5oZGV2LT5pZDsKKwkJcmV0dXJuIC1FVU5BVENIOworCiAJZGVmYXVsdDoKIAkJZXJyID0gbl90dHlfaW9jdGwodHR5LCBmaWxlLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VhcnQuaCBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0LmgKaW5kZXggYjI1MGU2Ny4uMTA5N2NlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VhcnQuaAorKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfdWFydC5oCkBAIC0yOCw4ICsyOCw5IEBACiAjZW5kaWYKIAogLyogSW9jdGxzICovCi0jZGVmaW5lIEhDSVVBUlRTRVRQUk9UTwlfSU9XKCdVJywgMjAwLCBpbnQpCi0jZGVmaW5lIEhDSVVBUlRHRVRQUk9UTwlfSU9SKCdVJywgMjAxLCBpbnQpCisjZGVmaW5lIEhDSVVBUlRTRVRQUk9UTwkJX0lPVygnVScsIDIwMCwgaW50KQorI2RlZmluZSBIQ0lVQVJUR0VUUFJPVE8JCV9JT1IoJ1UnLCAyMDEsIGludCkKKyNkZWZpbmUgSENJVUFSVEdFVERFVklDRQlfSU9SKCdVJywgMjAyLCBpbnQpCiAKIC8qIFVBUlQgcHJvdG9jb2xzICovCiAjZGVmaW5lIEhDSV9VQVJUX01BWF9QUk9UTwk0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmMKaW5kZXggYjAyMzhiNC4uN2UwNGRkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYwpAQCAtMTE1LDExICsxMTUsMTEgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMDkpLCAuZHJpdmVyX2luZm8gPSBIQ0lfQkNNOTIwMzUgfSwKIAogCS8qIEJyb2FkY29tIEJDTTIwNDUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIxMDEpLCAuZHJpdmVyX2luZm8gPSBIQ0lfV1JPTkdfU0NPX01UVSB9LAorCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjEwMSksIC5kcml2ZXJfaW5mbyA9IEhDSV9SRVNFVCB8IEhDSV9XUk9OR19TQ09fTVRVIH0sCiAKIAkvKiBJQk0vTGVub3ZvIFRoaW5rUGFkIHdpdGggQnJvYWRjb20gY2hpcCAqLwotCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjAxZSksIC5kcml2ZXJfaW5mbyA9IEhDSV9XUk9OR19TQ09fTVRVIH0sCi0JeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMTEwKSwgLmRyaXZlcl9pbmZvID0gSENJX1dST05HX1NDT19NVFUgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMWUpLCAuZHJpdmVyX2luZm8gPSBIQ0lfUkVTRVQgfCBIQ0lfV1JPTkdfU0NPX01UVSB9LAorCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjExMCksIC5kcml2ZXJfaW5mbyA9IEhDSV9SRVNFVCB8IEhDSV9XUk9OR19TQ09fTVRVIH0sCiAKIAkvKiBUYXJndXMgQUNCMTBVUyAqLwogCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjEwMCksIC5kcml2ZXJfaW5mbyA9IEhDSV9SRVNFVCB9LApAQCAtMTI4LDE3ICsxMjgsMTcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIxMTEpLCAuZHJpdmVyX2luZm8gPSBIQ0lfUkVTRVQgfSwKIAogCS8qIEhQIGxhcHRvcCB3aXRoIEJyb2FkY29tIGNoaXAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwM2YwLCAweDE3MWQpLCAuZHJpdmVyX2luZm8gPSBIQ0lfV1JPTkdfU0NPX01UVSB9LAorCXsgVVNCX0RFVklDRSgweDAzZjAsIDB4MTcxZCksIC5kcml2ZXJfaW5mbyA9IEhDSV9SRVNFVCB8IEhDSV9XUk9OR19TQ09fTVRVIH0sCiAKIAkvKiBEZWxsIGxhcHRvcCB3aXRoIEJyb2FkY29tIGNoaXAgKi8KLQl7IFVTQl9ERVZJQ0UoMHg0MTNjLCAweDgxMjYpLCAuZHJpdmVyX2luZm8gPSBIQ0lfV1JPTkdfU0NPX01UVSB9LAorCXsgVVNCX0RFVklDRSgweDQxM2MsIDB4ODEyNiksIC5kcml2ZXJfaW5mbyA9IEhDSV9SRVNFVCB8IEhDSV9XUk9OR19TQ09fTVRVIH0sCiAKIAkvKiBNaWNyb3NvZnQgV2lyZWxlc3MgVHJhbnNjZWl2ZXIgZm9yIEJsdWV0b290aCAyLjAgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDVlLCAweDAwOWMpLCAuZHJpdmVyX2luZm8gPSBIQ0lfUkVTRVQgfSwKIAogCS8qIEtlbnNpbmd0b24gQmx1ZXRvb3RoIFVTQiBhZGFwdGVyICovCiAJeyBVU0JfREVWSUNFKDB4MDQ3ZCwgMHgxMDVkKSwgLmRyaXZlcl9pbmZvID0gSENJX1JFU0VUIH0sCi0JeyBVU0JfREVWSUNFKDB4MDQ3ZCwgMHgxMDVlKSwgLmRyaXZlcl9pbmZvID0gSENJX1dST05HX1NDT19NVFUgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDdkLCAweDEwNWUpLCAuZHJpdmVyX2luZm8gPSBIQ0lfUkVTRVQgfCBIQ0lfV1JPTkdfU0NPX01UVSB9LAogCiAJLyogSVNTQyBCbHVldG9vdGggQWRhcHRlciB2My4xICovCiAJeyBVU0JfREVWSUNFKDB4MTEzMSwgMHgxMDAxKSwgLmRyaXZlcl9pbmZvID0gSENJX1JFU0VUIH0sCkBAIC0xNDgsOCArMTQ4LDggQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNDAwLCAweDA4MGEpLCAuZHJpdmVyX2luZm8gPSBIQ0lfQlJPS0VOX0lTT0MgfSwKIAogCS8qIEJlbGtpbiBGOFQwMTIgYW5kIEY4VDAxMyBkZXZpY2VzICovCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHgwMDEyKSwgLmRyaXZlcl9pbmZvID0gSENJX1dST05HX1NDT19NVFUgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAwMTMpLCAuZHJpdmVyX2luZm8gPSBIQ0lfV1JPTkdfU0NPX01UVSB9LAorCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDAxMiksIC5kcml2ZXJfaW5mbyA9IEhDSV9SRVNFVCB8IEhDSV9XUk9OR19TQ09fTVRVIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHgwMDEzKSwgLmRyaXZlcl9pbmZvID0gSENJX1JFU0VUIHwgSENJX1dST05HX1NDT19NVFUgfSwKIAogCS8qIERpZ2lhbnN3ZXIgZGV2aWNlcyAqLwogCXsgVVNCX0RFVklDRSgweDA4ZmQsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IEhDSV9ESUdJQU5TV0VSIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IGEyNmQ5MTcuLmVmNjgzZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC02LDYgKzYsNyBAQAogCiBjb25maWcgVlQKIAlib29sICJWaXJ0dWFsIHRlcm1pbmFsIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gIVMzOTAKIAlzZWxlY3QgSU5QVVQKIAlkZWZhdWx0IHkgaWYgIVZJT0NPTlMKIAktLS1oZWxwLS0tCkBAIC04MSw2ICs4Miw3IEBACiAKIGNvbmZpZyBTRVJJQUxfTk9OU1RBTkRBUkQKIAlib29sICJOb24tc3RhbmRhcmQgc2VyaWFsIHBvcnQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhBU19JT01FTQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW55IG5vbi1zdGFuZGFyZCBzZXJpYWwgYm9hcmRzIC0tIGJvYXJkcwogCSAgd2hpY2ggYXJlbid0IHN1cHBvcnRlZCB1c2luZyB0aGUgc3RhbmRhcmQgImR1bWIiIHNlcmlhbCBkcml2ZXIuCkBAIC0xMjcsNyArMTI5LDcgQEAKIAogY29uZmlnIENZQ0xBREVTCiAJdHJpc3RhdGUgIkN5Y2xhZGVzIGFzeW5jIG11eCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJECisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgKFBDSSB8fCBJU0EpCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQ3ljbGFkZXMgWiBhbmQgWSBtdWx0aXNlcmlhbCBib2FyZHMuCiAJICBZb3Ugd291bGQgbmVlZCBzb21ldGhpbmcgbGlrZSB0aGlzIHRvIGNvbm5lY3QgbW9yZSB0aGFuIHR3byBtb2RlbXMgdG8KQEAgLTYzMSw3ICs2MzMsOCBAQAogCiBjb25maWcgSFZDX0lTRVJJRVMKIAlib29sICJpU2VyaWVzIEh5cGVydmlzb3IgVmlydHVhbCBDb25zb2xlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQUENfSVNFUklFUyAmJiAhVklPQ09OUworCWRlcGVuZHMgb24gUFBDX0lTRVJJRVMKKwlkZWZhdWx0IHkKIAlzZWxlY3QgSFZDX0RSSVZFUgogCWhlbHAKIAkgIGlTZXJpZXMgbWFjaGluZXMgc3VwcG9ydCBhIGh5cGVydmlzb3IgdmlydHVhbCBjb25zb2xlLgpAQCAtNzY0LDcgKzc2Nyw3IEBACiAKIGNvbmZpZyBSVEMKIAl0cmlzdGF0ZSAiRW5oYW5jZWQgUmVhbCBUaW1lIENsb2NrIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiAhUFBDICYmICFQQVJJU0MgJiYgIUlBNjQgJiYgIU02OEsgJiYgKCFTUEFSQyB8fCBQQ0kpICYmICFGUlYgJiYgIUFSTSAmJiAhU1VQRVJICisJZGVwZW5kcyBvbiAhUFBDICYmICFQQVJJU0MgJiYgIUlBNjQgJiYgIU02OEsgJiYgKCFTUEFSQyB8fCBQQ0kpICYmICFGUlYgJiYgIUFSTSAmJiAhU1VQRVJIICYmICFTMzkwCiAJLS0taGVscC0tLQogCSAgSWYgeW91IHNheSBZIGhlcmUgYW5kIGNyZWF0ZSBhIGNoYXJhY3RlciBzcGVjaWFsIGZpbGUgL2Rldi9ydGMgd2l0aAogCSAgbWFqb3IgbnVtYmVyIDEwIGFuZCBtaW5vciBudW1iZXIgMTM1IHVzaW5nIG1rbm9kICgibWFuIG1rbm9kIiksIHlvdQpAQCAtODEyLDcgKzgxNSw3IEBACiAKIGNvbmZpZyBHRU5fUlRDCiAJdHJpc3RhdGUgIkdlbmVyaWMgL2Rldi9ydGMgZW11bGF0aW9uIgotCWRlcGVuZHMgb24gUlRDIT15ICYmICFJQTY0ICYmICFBUk0gJiYgIU0zMlIgJiYgIVNQQVJDICYmICFGUlYKKwlkZXBlbmRzIG9uIFJUQyE9eSAmJiAhSUE2NCAmJiAhQVJNICYmICFNMzJSICYmICFTUEFSQyAmJiAhRlJWICYmICFTMzkwICYmICFTVVBFUkgKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgY3JlYXRlIGEgY2hhcmFjdGVyIHNwZWNpYWwgZmlsZSAvZGV2L3J0YyB3aXRoCiAJICBtYWpvciBudW1iZXIgMTAgYW5kIG1pbm9yIG51bWJlciAxMzUgdXNpbmcgbWtub2QgKCJtYW4gbWtub2QiKSwgeW91CkBAIC04NTcsNiArODYwLDcgQEAKIAogY29uZmlnIERUTEsKIAl0cmlzdGF0ZSAiRG91YmxlIFRhbGsgUEMgaW50ZXJuYWwgc3BlZWNoIGNhcmQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIElTQQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGlzIGZvciB0aGUgRG91YmxlVGFsayBQQywgYSBzcGVlY2ggc3ludGhlc2l6ZXIKIAkgIG1hbnVmYWN0dXJlZCBieSBSQyBTeXN0ZW1zICg8aHR0cDovL3d3dy5yY3N5cy5jb20vPikuICBJdCBpcyBhbHNvCkBAIC0xMDQyLDcgKzEwNDYsNyBAQAogCiBjb25maWcgSEFOR0NIRUNLX1RJTUVSCiAJdHJpc3RhdGUgIkhhbmdjaGVjayB0aW1lciIKLQlkZXBlbmRzIG9uIFg4NiB8fCBJQTY0IHx8IFBQQzY0CisJZGVwZW5kcyBvbiBYODYgfHwgSUE2NCB8fCBQUEM2NCB8fCBTMzkwCiAJaGVscAogCSAgVGhlIGhhbmdjaGVjay10aW1lciBtb2R1bGUgZGV0ZWN0cyB3aGVuIHRoZSBzeXN0ZW0gaGFzIGdvbmUKIAkgIG91dCB0byBsdW5jaCBwYXN0IGEgY2VydGFpbiBtYXJnaW4uICBJdCBjYW4gcmVib290IHRoZSBzeXN0ZW0KQEAgLTEwNzEsNSArMTA3NSwxMyBAQAogCSAgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL3RlbGNvX2Nsb2NrLCB3aXRoIGEgbnVtYmVyIG9mIGZpbGVzIGZvcgogCSAgY29udHJvbGxpbmcgdGhlIGJlaGF2aW9yIG9mIHRoaXMgaGFyZHdhcmUuCiAKK2NvbmZpZyBERVZQT1JUCisJYm9vbAorCWRlcGVuZHMgb24gIU02OEsKKwlkZXBlbmRzIG9uIElTQSB8fCBQQ0kKKwlkZWZhdWx0IHkKKworc291cmNlICJkcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnIgorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCmluZGV4IGM5ZjBmMjUuLjgwMWFiZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkFwZXJ0dXJlIHRvbyBzbWFsbCAoJWQgTUIpXG4iLCBzaXplPj4yMCk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoYXBlciArIHNpemUgPiAweGZmZmZmZmZmKSB7CisgICAgICAgaWYgKCh1NjQpYXBlciArIHNpemUgPiAweDEwMDAwMDAwMFVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJBcGVydHVyZSBvdXQgb2YgYm91bmRzXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9mcm9udGVuZC5jIGIvZHJpdmVycy9jaGFyL2FncC9mcm9udGVuZC5jCmluZGV4IDY3OWQ3ZjkuLmM3ZWQ2MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2Zyb250ZW5kLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hZ3BnYXJ0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSAiYWdwLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYyBiL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jCmluZGV4IDQ1YWViOTEuLmQ1MzVjNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCmluZGV4IDkxYjA2MjEuLjQyYzBhNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYwpAQCAtNjEzLDcgKzYxMyw3IEBACiAJCXVuaW5vcnRoX25vZGUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAidTMiKTsKIAl9CiAJaWYgKHVuaW5vcnRoX25vZGUpIHsKLQkJY29uc3QgaW50ICpyZXZwcm9wID0gZ2V0X3Byb3BlcnR5KHVuaW5vcnRoX25vZGUsCisJCWNvbnN0IGludCAqcmV2cHJvcCA9IG9mX2dldF9wcm9wZXJ0eSh1bmlub3J0aF9ub2RlLAogCQkJCSJkZXZpY2UtcmV2IiwgTlVMTCk7CiAJCWlmIChyZXZwcm9wICE9IE5VTEwpCiAJCQl1bmlub3J0aF9yZXYgPSAqcmV2cHJvcCAmIDB4M2Y7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCmluZGV4IGEyYmI0ZWMuLjlhYWY0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCkBAIC0zODQsOSArMzg0LDkgQEAKIAkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFLAogCQkuY2hpcHNldF9uYW1lCT0gIlZUMzMxNCIsCiAJfSwKLQkvKiBDWDcwMCAqLworCS8qIFZUMzMyNCAvIENYNzAwICovCiAJewotCQkuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX0NYNzAwLAorCQkuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1ZUMzMyNCwKIAkJLmNoaXBzZXRfbmFtZSAgID0gIkNYNzAwIiwKIAl9LAogCS8qIFZUMzMzNiAqLwpAQCAtNTQwLDcgKzU0MCw3IEBACiAJSUQoUENJX0RFVklDRV9JRF9WSUFfODNfODdYWF8xKSwKIAlJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjk2XzApLAogCUlEKFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCksCisJSUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0KSwKIAlJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMzYpLAogCUlEKFBDSV9ERVZJQ0VfSURfVklBX1A0TTg5MCksCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMgYi9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMKaW5kZXggMGUyYjcyZi4uNGVhY2VhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYwpAQCAtMTU3NCw3ICsxNTc0LDcgQEAKIAkJaWYgKHRpbWVvdXQgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBvcmlnX2ppZmZpZXMgKyB0aW1lb3V0KSkKIAkJCWJyZWFrOwogCX0KLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAjaWZkZWYgU0VSSUFMX0RFQlVHX1JTX1dBSVRfVU5USUxfU0VOVAogCXByaW50aygibHNyID0gJWQgKGppZmY9JWx1KS4uLmRvbmVcbiIsIGxzciwgamlmZmllcyk7CiAjZW5kaWYKQEAgLTE3MDAsNyArMTcwMCw3IEBACiAjZW5kaWYKIAkJc2NoZWR1bGUoKTsKIAl9Ci0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZpbmZvLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAlpZiAoZXh0cmFfY291bnQpCiAJCXN0YXRlLT5jb3VudCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2JyaXFfcGFuZWwuYyBiL2RyaXZlcnMvY2hhci9icmlxX3BhbmVsLmMKaW5kZXggYzcwZDUyYS4uZWQ1M2Y1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2JyaXFfcGFuZWwuYworKysgYi9kcml2ZXJzL2NoYXIvYnJpcV9wYW5lbC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAljb25zdCBjaGFyICptYWNoaW5lOwogCWludCBpOwogCi0JbWFjaGluZSA9IGdldF9wcm9wZXJ0eShyb290LCAibW9kZWwiLCBOVUxMKTsKKwltYWNoaW5lID0gb2ZfZ2V0X3Byb3BlcnR5KHJvb3QsICJtb2RlbCIsIE5VTEwpOwogCWlmICghbWFjaGluZSB8fCBzdHJuY21wKG1hY2hpbmUsICJUb3RhbEltcGFjdCxCUklRLTEiLCAxOCkgIT0gMCkgewogCQlvZl9ub2RlX3B1dChyb290KTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvY29uc29sZW1hcC5jIGIvZHJpdmVycy9jaGFyL2NvbnNvbGVtYXAuYwppbmRleCBiOTliNzU2Li5mZDQwYjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY29uc29sZW1hcC5jCisrKyBiL2RyaXZlcnMvY2hhci9jb25zb2xlbWFwLmMKQEAgLTYyNiwxMCArNjI2LDEwIEBACiAgIAogCS8qIE9ubHkgMTYtYml0IGNvZGVzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUgKi8KIAlpZiAodWNzID4gMHhmZmZmKQotCQl1Y3MgPSAweGZmZmQ7CQkvKiBVK0ZGRkQ6IFJFUExBQ0VNRU5UIENIQVJBQ1RFUiAqLwotCWVsc2UgaWYgKHVjcyA8IDB4MjAgfHwgdWNzID49IDB4ZmZmZSkKKwkJcmV0dXJuIC00OwkJLyogTm90IGZvdW5kICovCisJZWxzZSBpZiAodWNzIDwgMHgyMCkKIAkJcmV0dXJuIC0xOwkJLyogTm90IGEgcHJpbnRhYmxlIGNoYXJhY3RlciAqLwotCWVsc2UgaWYgKHVjcyA9PSAweGZlZmYgfHwgKHVjcyA+PSAweDIwMGEgJiYgdWNzIDw9IDB4MjAwZikpCisJZWxzZSBpZiAodWNzID09IDB4ZmVmZiB8fCAodWNzID49IDB4MjAwYiAmJiB1Y3MgPD0gMHgyMDBmKSkKIAkJcmV0dXJuIC0yOwkJCS8qIFplcm8td2lkdGggc3BhY2UgKi8KIAkvKgogCSAqIFVOSV9ESVJFQ1RfQkFTRSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIHRoZSByZWdpb24gaW4gdGhlIFVzZXIgWm9uZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2NzNTUzNV9ncGlvLmMgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwppbmRleCBjMDJkOWU5Li5mZTZkMjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYworKysgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwpAQCAtNDQsNiArNDQsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lTQSkgfSwKIAl7IH0gLyogTlVMTCBlbnRyeSAqLwogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBkaXZpbF9wY2kpOwogCiBzdGF0aWMgc3RydWN0IGNkZXYgY3M1NTM1X2dwaW9fY2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwppbmRleCAxNmRjNWQxLi5jYTM3NmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYworKysgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwpAQCAtMTAsMTUgKzEwLDE0IEBACiAgKgogICogSW5pdGlhbGx5IHdyaXR0ZW4gYnkgUmFuZG9scGggQmVudHNvbiA8YmVudHNvbkBncmllZy5zZWFzbHVnLm9yZz4uCiAgKiBNb2RpZmllZCBhbmQgbWFpbnRhaW5lZCBieSBNYXJjaW8gU2FpdG8gPG1hcmNpb0BjeWNsYWRlcy5jb20+LgotICogQ3VycmVudGx5IG1haW50YWluZWQgYnkgQ3ljbGFkZXMgdGVhbSA8YXN5bmNAY3ljbGFkZXMuY29tPi4KICAqCi0gKiBGb3IgVGVjaG5pY2FsIHN1cHBvcnQgYW5kIGluc3RhbGxhdGlvbiBwcm9ibGVtcywgcGxlYXNlIHNlbmQgZS1tYWlsCi0gKiB0byBzdXBwb3J0QGN5Y2xhZGVzLmNvbS4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgogICoKICAqIE11Y2ggb2YgdGhlIGRlc2lnbiBhbmQgc29tZSBvZiB0aGUgY29kZSBjYW1lIGZyb20gc2VyaWFsLmMKICAqIHdoaWNoIHdhcyBjb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzLiAgSXQgd2FzCiAgKiBleHRlbnNpdmVseSByZXdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbywgOC8xNi85MiAtLSA5LzE0LzkyLAogICogYW5kIHRoZW4gZml4ZWQgYXMgc3VnZ2VzdGVkIGJ5IE1pY2hhZWwgSy4gSm9obnNvbiAxMi8xMi85Mi4KKyAqIENvbnZlcnRlZCB0byBwY2kgcHJvYmluZyBhbmQgY2xlYW5lZCB1cCBieSBKaXJpIFNsYWJ5LgogICoKICAqIFRoaXMgdmVyc2lvbiBzdXBwb3J0cyBzaGFyZWQgSVJRJ3MgKG9ubHkgZm9yIFBDSSBib2FyZHMpLgogICoKQEAgLTU5MSw3ICs1OTAsNyBAQAogICoKICAqLwogCi0jZGVmaW5lIENZX1ZFUlNJT04JIjIuNCIKKyNkZWZpbmUgQ1lfVkVSU0lPTgkiMi41IgogCiAvKiBJZiB5b3UgbmVlZCB0byBpbnN0YWxsIG1vcmUgYm9hcmRzIHRoYW4gTlJfQ0FSRFMsIGNoYW5nZSB0aGUgY29uc3RhbnQKICAgIGluIHRoZSBkZWZpbml0aW9uIGJlbG93LiBObyBvdGhlciBjaGFuZ2UgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgdXAgdG8KQEAgLTYyNCwxMiArNjIzLDYgQEAKICN1bmRlZglDWV9FTkFCTEVfTU9OSVRPUklORwogI3VuZGVmCUNZX1BDSV9ERUJVRwogCi0jaWYgMAotI2RlZmluZSBQQVVTRSBfX2FzbV9fKCJub3AiKQotI2Vsc2UKLSNkZWZpbmUgUEFVU0UgZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKLQogLyoKICAqIEluY2x1ZGUgc2VjdGlvbiAKICAqLwpAQCAtNjU5LDE3ICs2NTIsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jZGVmaW5lCUNZX0xPQ0soaW5mbyxmbGFncykJCQkJCVwKLQkJZG8gewkJCQkJCVwKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmN5X2NhcmRbaW5mby0+Y2FyZF0uY2FyZF9sb2NrLCBmbGFncyk7IFwKLQkJfSB3aGlsZSAoMCkKLQotI2RlZmluZQlDWV9VTkxPQ0soaW5mbyxmbGFncykJCQkJCVwKLQkJZG8gewkJCQkJCVwKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3lfY2FyZFtpbmZvLT5jYXJkXS5jYXJkX2xvY2ssIGZsYWdzKTsgXAotCQl9IHdoaWxlICgwKQotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIApAQCAtNjgyLDEzICs2NjQsMTMgQEAKICNkZWZpbmUgSVNfQ1lDX1ooY2FyZCkgKChjYXJkKS5udW1fY2hpcHMgPT0gLTEpCiAKICNkZWZpbmUgWl9GUEdBX0NIRUNLKGNhcmQpIFwKLQkoKGN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKSBcCisJKChyZWFkbCgmKChzdHJ1Y3QgUlVOVElNRV85MDYwIF9faW9tZW0gKikgXAogCQkoKGNhcmQpLmN0bF9hZGRyKSktPmluaXRfY3RybCkgJiAoMTw8MTcpKSAhPSAwKQogCi0jZGVmaW5lIElTWkxPQURFRChjYXJkKQkoKChaT19WMT09Y3lfcmVhZGwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopIFwKKyNkZWZpbmUgSVNaTE9BREVEKGNhcmQpCSgoKFpPX1YxPT1yZWFkbCgmKChzdHJ1Y3QgUlVOVElNRV85MDYwIF9faW9tZW0gKikgXAogCQkJKChjYXJkKS5jdGxfYWRkcikpLT5tYWlsX2JveF8wKSkgfHwgXAogCQkJWl9GUEdBX0NIRUNLKGNhcmQpKSAmJiBcCi0JCQkoWkZJUk1fSUQ9PWN5X3JlYWRsKCYoKHN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKikgXAorCQkJKFpGSVJNX0lEPT1yZWFkbCgmKChzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICopIFwKIAkJCSgoY2FyZCkuYmFzZV9hZGRyK0lEX0FERFJFU1MpKS0+c2lnbmF0dXJlKSkpCiAKICNpZm5kZWYgU0VSSUFMX1hNSVRfU0laRQpAQCAtNzI1LDggKzcwNyw4IEBACiAjZGVmaW5lIE5SX0lTQV9BRERSUyBBUlJBWV9TSVpFKGN5X2lzYV9hZGRyZXNzZXMpCiAKICNpZmRlZiBNT0RVTEUKLXN0YXRpYyBsb25nIG1hZGRyW05SX0NBUkRTXSA9IHsgMCwgfTsKLXN0YXRpYyBpbnQgaXJxW05SX0NBUkRTXSA9IHsgMCwgfTsKK3N0YXRpYyBsb25nIG1hZGRyW05SX0NBUkRTXTsKK3N0YXRpYyBpbnQgaXJxW05SX0NBUkRTXTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KG1hZGRyLCBsb25nLCBOVUxMLCAwKTsKIG1vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgMCk7CkBAIC03MzksMTEgKzcyMSw2IEBACiAqLwogc3RhdGljIHN0cnVjdCBjeWNsYWRlc19jYXJkIGN5X2NhcmRbTlJfQ0FSRFNdOwogCi0vKiBUaGlzIGlzIHRoZSBwZXItY2hhbm5lbCBkYXRhIHN0cnVjdHVyZSBjb250YWluaW5nIHBvaW50ZXJzLCBmbGFncwotIGFuZCB2YXJpYWJsZXMgZm9yIHRoZSBwb3J0LiBUaGlzIGRyaXZlciBzdXBwb3J0cyBhIG1heGltdW0gb2YgTlJfUE9SVFMuCi0qLwotc3RhdGljIHN0cnVjdCBjeWNsYWRlc19wb3J0IGN5X3BvcnRbTlJfUE9SVFNdOwotCiBzdGF0aWMgaW50IGN5X25leHRfY2hhbm5lbDsJLyogbmV4dCBtaW5vciBhdmFpbGFibGUgKi8KIAogLyoKQEAgLTgyNSw5ICs4MDIsNiBAQAogCiAvKiBQQ0kgcmVsYXRlZCBkZWZpbml0aW9ucyAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY3lfcGNpX25ib2FyZDsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBjeV9pc2FfbmJvYXJkOwotc3RhdGljIHVuc2lnbmVkIHNob3J0IGN5X25ib2FyZDsKICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3lfcGNpX2Rldl9pZFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ1lDTEFERVMsIFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfTG8pIH0sCS8qIFBDSSA8IDFNYiAqLwpAQCAtODQ1LDcgKzgxOSw3IEBACiAKIHN0YXRpYyB2b2lkIGN5X3N0YXJ0KHN0cnVjdCB0dHlfc3RydWN0ICopOwogc3RhdGljIHZvaWQgc2V0X2xpbmVfY2hhcihzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKTsKLXN0YXRpYyBpbnQgY3l6X2lzc3VlX2NtZChzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqLCB1Y2xvbmcsIHVjY2hhciwgdWNsb25nKTsKK3N0YXRpYyBpbnQgY3l6X2lzc3VlX2NtZChzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqLCBfX3UzMiwgX191OCwgX191MzIpOwogI2lmZGVmIENPTkZJR19JU0EKIHN0YXRpYyB1bnNpZ25lZCBkZXRlY3RfaXNhX2lycSh2b2lkIF9faW9tZW0gKik7CiAjZW5kaWYJCQkJLyogQ09ORklHX0lTQSAqLwpAQCAtODU4LDcgKzgzMiw2IEBACiAvKiBUaGUgQ3ljbGFkZXMtWiBwb2xsaW5nIGN5Y2xlIGlzIGRlZmluZWQgYnkgdGhpcyB2YXJpYWJsZSAqLwogc3RhdGljIGxvbmcgY3l6X3BvbGxpbmdfY3ljbGUgPSBDWl9ERUZfUE9MTDsKIAotc3RhdGljIGludCBjeXpfdGltZXJvbiA9IDA7CiBzdGF0aWMgREVGSU5FX1RJTUVSKGN5el90aW1lcmxpc3QsIGN5el9wb2xsLCAwLCAwKTsKIAogI2Vsc2UJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCkBAIC04NzEsMjEgKzg0NCwxNCBAQAogewogI2lmZGVmIFNFUklBTF9QQVJBTk9JQV9DSEVDSwogCWlmICghaW5mbykgewotCQlwcmludGsoImN5YyBXYXJuaW5nOiBudWxsIGN5Y2xhZGVzX3BvcnQgZm9yICglcykgaW4gJXNcbiIsCi0JCQkJbmFtZSwgcm91dGluZSk7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgobG9uZylpbmZvIDwgKGxvbmcpKCZjeV9wb3J0WzBdKSB8fAotCQkJKGxvbmcpKCZjeV9wb3J0W05SX1BPUlRTXSkgPCAobG9uZylpbmZvKSB7Ci0JCXByaW50aygiY3ljIFdhcm5pbmc6IGN5Y2xhZGVzX3BvcnQgb3V0IG9mIHJhbmdlIGZvciAoJXMpIGluICIKLQkJCQkiJXNcbiIsIG5hbWUsIHJvdXRpbmUpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjeWMgV2FybmluZzogbnVsbCBjeWNsYWRlc19wb3J0IGZvciAoJXMpICIKKwkJCQkiaW4gJXNcbiIsIG5hbWUsIHJvdXRpbmUpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAoaW5mby0+bWFnaWMgIT0gQ1lDTEFERVNfTUFHSUMpIHsKLQkJcHJpbnRrKCJjeWMgV2FybmluZzogYmFkIG1hZ2ljIG51bWJlciBmb3Igc2VyaWFsIHN0cnVjdCAoJXMpICIKLQkJCQkiaW4gJXNcbiIsIG5hbWUsIHJvdXRpbmUpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjeWMgV2FybmluZzogYmFkIG1hZ2ljIG51bWJlciBmb3Igc2VyaWFsICIKKwkJCQkic3RydWN0ICglcykgaW4gJXNcbiIsIG5hbWUsIHJvdXRpbmUpOwogCQlyZXR1cm4gMTsKIAl9CiAjZW5kaWYKQEAgLTk0MywyMiArOTA5LDE2IEBACiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDeV9FVkVOVF9PUEVOX1dBS0VVUCwgJmluZm8tPmV2ZW50KSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOwogI2lmZGVmIENPTkZJR19DWVpfSU5UUgotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ3lfRVZFTlRfWl9SWF9GVUxMLCAmaW5mby0+ZXZlbnQpKSB7Ci0JCWlmIChjeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXS5mdW5jdGlvbiA9PSBOVUxMKSB7Ci0JCQljeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXS5leHBpcmVzID0gamlmZmllcyArIDE7Ci0JCQljeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXS5mdW5jdGlvbiA9IGN5el9yeF9yZXN0YXJ0OwotCQkJY3l6X3J4X2Z1bGxfdGltZXJbaW5mby0+bGluZV0uZGF0YSA9Ci0JCQkJCQkodW5zaWduZWQgbG9uZylpbmZvOwotCQkJYWRkX3RpbWVyKCZjeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXSk7Ci0JCX0KLQl9CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDeV9FVkVOVF9aX1JYX0ZVTEwsICZpbmZvLT5ldmVudCkgJiYKKwkJCSF0aW1lcl9wZW5kaW5nKCZjeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXSkpCisJCW1vZF90aW1lcigmY3l6X3J4X2Z1bGxfdGltZXJbaW5mby0+bGluZV0sIGppZmZpZXMgKyAxKTsKICNlbmRpZgogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ3lfRVZFTlRfREVMVEFfV0FLRVVQLCAmaW5mby0+ZXZlbnQpKQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKIAl0dHlfd2FrZXVwKHR0eSk7CiAjaWZkZWYgWl9XQUtFCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDeV9FVkVOVF9TSFVURE9XTl9XQUtFVVAsICZpbmZvLT5ldmVudCkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+c2h1dGRvd25fd2FpdCk7CisJCWNvbXBsZXRlKCZpbmZvLT5zaHV0ZG93bl93YWl0KTsKICNlbmRpZgogfSAvKiBkb19zb2Z0aW50ICovCiAKQEAgLTk3NSwxMSArOTM1LDExIEBACiAgKi8KIHN0YXRpYyBpbnQgY3l5X2lzc3VlX2NtZCh2b2lkIF9faW9tZW0gKiBiYXNlX2FkZHIsIHVfY2hhciBjbWQsIGludCBpbmRleCkKIHsKLQl2b2xhdGlsZSBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaTsKIAogCS8qIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwcmV2aW91cyBjb21tYW5kIGhhcyBjb21wbGV0ZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJaWYgKGN5X3JlYWRiKGJhc2VfYWRkciArIChDeUNDUiA8PCBpbmRleCkpID09IDApIHsKKwkJaWYgKHJlYWRiKGJhc2VfYWRkciArIChDeUNDUiA8PCBpbmRleCkpID09IDApIHsKIAkJCWJyZWFrOwogCQl9CiAJCXVkZWxheSgxMEwpOwpAQCAtMTAyMiw3ICs5ODIsNyBAQAogCiAJY3lfd3JpdGViKGFkZHJlc3MgKyAoQ3lDQVIgPDwgaW5kZXgpLCAwKTsKIAljeV93cml0ZWIoYWRkcmVzcyArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkgIGN5X3JlYWRiKGFkZHJlc3MgKyAoQ3lTUkVSIDw8IGluZGV4KSkgfCBDeVR4UmR5KTsKKwkJICByZWFkYihhZGRyZXNzICsgKEN5U1JFUiA8PCBpbmRleCkpIHwgQ3lUeFJkeSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJLyogV2FpdCAuLi4gKi8KQEAgLTEwMzIsMTEgKzk5MiwxMSBAQAogCWlycSA9IHByb2JlX2lycV9vZmYoaXJxcyk7CiAKIAkvKiBDbGVhbiB1cCAqLwotCXNhdmVfeGlyID0gKHVfY2hhcikgY3lfcmVhZGIoYWRkcmVzcyArIChDeVRJUiA8PCBpbmRleCkpOwotCXNhdmVfY2FyID0gY3lfcmVhZGIoYWRkcmVzcyArIChDeUNBUiA8PCBpbmRleCkpOworCXNhdmVfeGlyID0gKHVfY2hhcikgcmVhZGIoYWRkcmVzcyArIChDeVRJUiA8PCBpbmRleCkpOworCXNhdmVfY2FyID0gcmVhZGIoYWRkcmVzcyArIChDeUNBUiA8PCBpbmRleCkpOwogCWN5X3dyaXRlYihhZGRyZXNzICsgKEN5Q0FSIDw8IGluZGV4KSwgKHNhdmVfeGlyICYgMHgzKSk7CiAJY3lfd3JpdGViKGFkZHJlc3MgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJICBjeV9yZWFkYihhZGRyZXNzICsgKEN5U1JFUiA8PCBpbmRleCkpICYgfkN5VHhSZHkpOworCQkgIHJlYWRiKGFkZHJlc3MgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJiB+Q3lUeFJkeSk7CiAJY3lfd3JpdGViKGFkZHJlc3MgKyAoQ3lUSVIgPDwgaW5kZXgpLCAoc2F2ZV94aXIgJiAweDNmKSk7CiAJY3lfd3JpdGViKGFkZHJlc3MgKyAoQ3lDQVIgPDwgaW5kZXgpLCAoc2F2ZV9jYXIpKTsKIAljeV93cml0ZWIoYWRkcmVzcyArIChDeV9DbHJJbnRyIDw8IGluZGV4KSwgMCk7CkBAIC0xMDUxLDQ1ICsxMDExLDQzIEBACiB7CiAJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm87CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQl2b2xhdGlsZSBpbnQgY2hhcl9jb3VudDsKLQlpbnQgaSwgaiwgbGVuLCBtZG1fY2hhbmdlLCBtZG1fc3RhdHVzLCBvdXRjaDsKKwlpbnQgY2hhcl9jb3VudDsKKwlpbnQgaiwgbGVuLCBtZG1fY2hhbmdlLCBtZG1fc3RhdHVzLCBvdXRjaDsKIAlpbnQgc2F2ZV94aXIsIGNoYW5uZWwsIHNhdmVfY2FyOwogCWNoYXIgZGF0YTsKIAogCWlmIChzdGF0dXMgJiBDeVNSUmVjZWl2ZSkgewkvKiByZWNlcHRpb24gaW50ZXJydXB0ICovCiAjaWZkZWYgQ1lfREVCVUdfSU5URVJSVVBUUwotCQlwcmludGsoImN5eV9pbnRlcnJ1cHQ6IHJjdmQgaW50ciwgY2hpcCAlZFxuXHIiLCBjaGlwKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImN5eV9pbnRlcnJ1cHQ6IHJjdmQgaW50ciwgY2hpcCAlZFxuIiwgY2hpcCk7CiAjZW5kaWYKIAkJLyogZGV0ZXJtaW5lIHRoZSBjaGFubmVsICYgY2hhbmdlIHRvIHRoYXQgY29udGV4dCAqLwogCQlzcGluX2xvY2soJmNpbmZvLT5jYXJkX2xvY2spOwotCQlzYXZlX3hpciA9ICh1X2NoYXIpIGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVJJUiA8PCBpbmRleCkpOworCQlzYXZlX3hpciA9ICh1X2NoYXIpIHJlYWRiKGJhc2VfYWRkciArIChDeVJJUiA8PCBpbmRleCkpOwogCQljaGFubmVsID0gKHVfc2hvcnQpIChzYXZlX3hpciAmIEN5SVJDaGFubmVsKTsKLQkJaSA9IGNoYW5uZWwgKyBjaGlwICogNCArIGNpbmZvLT5maXJzdF9saW5lOwotCQlpbmZvID0gJmN5X3BvcnRbaV07Ci0JCWluZm8tPmxhc3RfYWN0aXZlID0gamlmZmllczsKLQkJc2F2ZV9jYXIgPSBjeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpKTsKKwkJaW5mbyA9ICZjaW5mby0+cG9ydHNbY2hhbm5lbCArIGNoaXAgKiA0XTsKKwkJc2F2ZV9jYXIgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpKTsKIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIHNhdmVfeGlyKTsKIAogCQkvKiBpZiB0aGVyZSBpcyBub3doZXJlIHRvIHB1dCB0aGUgZGF0YSwgZGlzY2FyZCBpdCAqLwotCQlpZiAoaW5mby0+dHR5ID09IDApIHsKLQkJCWogPSAoY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5UklWUiA8PCBpbmRleCkpICYKKwkJaWYgKGluZm8tPnR0eSA9PSBOVUxMKSB7CisJCQlqID0gKHJlYWRiKGJhc2VfYWRkciArIChDeVJJVlIgPDwgaW5kZXgpKSAmCiAJCQkJQ3lJVlJNYXNrKTsKIAkJCWlmIChqID09IEN5SVZSUnhFeCkgewkvKiBleGNlcHRpb24gKi8KLQkJCQlkYXRhID0gY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PCBpbmRleCkpOworCQkJCWRhdGEgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSRFNSIDw8IGluZGV4KSk7CiAJCQl9IGVsc2UgewkvKiBub3JtYWwgY2hhcmFjdGVyIHJlY2VwdGlvbiAqLwotCQkJCWNoYXJfY291bnQgPSBjeV9yZWFkYihiYXNlX2FkZHIgKworCQkJCWNoYXJfY291bnQgPSByZWFkYihiYXNlX2FkZHIgKwogCQkJCQkJKEN5UkRDUiA8PCBpbmRleCkpOwogCQkJCXdoaWxlIChjaGFyX2NvdW50LS0pIHsKLQkJCQkJZGF0YSA9IGN5X3JlYWRiKGJhc2VfYWRkciArCisJCQkJCWRhdGEgPSByZWFkYihiYXNlX2FkZHIgKwogCQkJCQkJKEN5UkRTUiA8PCBpbmRleCkpOwogCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsJLyogdGhlcmUgaXMgYW4gb3BlbiBwb3J0IGZvciB0aGlzIGRhdGEgKi8KIAkJCXR0eSA9IGluZm8tPnR0eTsKLQkJCWogPSAoY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5UklWUiA8PCBpbmRleCkpICYKKwkJCWogPSAocmVhZGIoYmFzZV9hZGRyICsgKEN5UklWUiA8PCBpbmRleCkpICYKIAkJCQkJQ3lJVlJNYXNrKTsKIAkJCWlmIChqID09IEN5SVZSUnhFeCkgewkvKiBleGNlcHRpb24gKi8KLQkJCQlkYXRhID0gY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PCBpbmRleCkpOworCQkJCWRhdGEgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSRFNSIDw8IGluZGV4KSk7CiAKIAkJCQkvKiBGb3Igc3RhdGlzdGljcyBvbmx5ICovCiAJCQkJaWYgKGRhdGEgJiBDeUJSRUFLKQpAQCAtMTEwMyw2ICsxMDYxLDcgQEAKIAogCQkJCWlmIChkYXRhICYgaW5mby0+aWdub3JlX3N0YXR1c19tYXNrKSB7CiAJCQkJCWluZm8tPmljb3VudC5yeCsrOworCQkJCQlzcGluX3VubG9jaygmY2luZm8tPmNhcmRfbG9jayk7CiAJCQkJCXJldHVybjsKIAkJCQl9CiAJCQkJaWYgKHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgMSkpIHsKQEAgLTExMTAsNyArMTA2OSw3IEBACiAJCQkJCQlpZiAoZGF0YSAmIEN5QlJFQUspIHsKIAkJCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigKIAkJCQkJCQkJdHR5LAotCQkJCQkJCQljeV9yZWFkYigKKwkJCQkJCQkJcmVhZGIoCiAJCQkJCQkJCWJhc2VfYWRkciArCiAJCQkJCQkJCShDeVJEU1IgPDwKIAkJCQkJCQkJCWluZGV4KSksCkBAIC0xMTIzLDcgKzEwODIsNyBAQAogCQkJCQkJfSBlbHNlIGlmIChkYXRhICYgQ3lGUkFNRSkgewogCQkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKAogCQkJCQkJCQl0dHksCi0JCQkJCQkJCWN5X3JlYWRiKAorCQkJCQkJCQlyZWFkYigKIAkJCQkJCQkJYmFzZV9hZGRyICsKIAkJCQkJCQkJKEN5UkRTUiA8PAogCQkJCQkJCQkJaW5kZXgpKSwKQEAgLTExMzUsNyArMTA5NCw3IEBACiAJCQkJCQkJLyogUGllY2VzIG9mIHNldmVuLi4uICovCiAJCQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoCiAJCQkJCQkJCXR0eSwKLQkJCQkJCQkJY3lfcmVhZGIoCisJCQkJCQkJCXJlYWRiKAogCQkJCQkJCQliYXNlX2FkZHIgKwogCQkJCQkJCQkoQ3lSRFNSIDw8CiAJCQkJCQkJCQlpbmRleCkpLApAQCAtMTE1NCw3ICsxMTEzLDcgQEAKIAkJCQkJCSAqLwogCQkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKAogCQkJCQkJCQl0dHksCi0JCQkJCQkJCWN5X3JlYWRiKAorCQkJCQkJCQlyZWFkYigKIAkJCQkJCQkJYmFzZV9hZGRyICsKIAkJCQkJCQkJKEN5UkRTUiA8PAogCQkJCQkJCQkJaW5kZXgpKSwKQEAgLTExODYsNyArMTE0NSw3IEBACiAJCQkJfQogCQkJfSBlbHNlIHsJLyogbm9ybWFsIGNoYXJhY3RlciByZWNlcHRpb24gKi8KIAkJCQkvKiBsb2FkICMgY2hhcnMgYXZhaWxhYmxlIGZyb20gdGhlIGNoaXAgKi8KLQkJCQljaGFyX2NvdW50ID0gY3lfcmVhZGIoYmFzZV9hZGRyICsKKwkJCQljaGFyX2NvdW50ID0gcmVhZGIoYmFzZV9hZGRyICsKIAkJCQkJCShDeVJEQ1IgPDwgaW5kZXgpKTsKIAogI2lmZGVmIENZX0VOQUJMRV9NT05JVE9SSU5HCkBAIC0xMTk4LDcgKzExNTcsNyBAQAogI2VuZGlmCiAJCQkJbGVuID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBjaGFyX2NvdW50KTsKIAkJCQl3aGlsZSAobGVuLS0pIHsKLQkJCQkJZGF0YSA9IGN5X3JlYWRiKGJhc2VfYWRkciArCisJCQkJCWRhdGEgPSByZWFkYihiYXNlX2FkZHIgKwogCQkJCQkJCShDeVJEU1IgPDwgaW5kZXgpKTsKIAkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhLAogCQkJCQkJCVRUWV9OT1JNQUwpOwpAQCAtMTIyMywyOSArMTE4MiwyNyBAQAogCQkgICBpcyBlbXB0eSwgd2Uga25vdyB3ZSBjYW4gYWx3YXlzIHN0dWZmIGEgZG96ZW4KIAkJICAgY2hhcmFjdGVycy4gKi8KICNpZmRlZiBDWV9ERUJVR19JTlRFUlJVUFRTCi0JCXByaW50aygiY3l5X2ludGVycnVwdDogeG1pdCBpbnRyLCBjaGlwICVkXG5cciIsIGNoaXApOworCQlwcmludGsoS0VSTl9ERUJVRyAiY3l5X2ludGVycnVwdDogeG1pdCBpbnRyLCBjaGlwICVkXG4iLCBjaGlwKTsKICNlbmRpZgogCiAJCS8qIGRldGVybWluZSB0aGUgY2hhbm5lbCAmIGNoYW5nZSB0byB0aGF0IGNvbnRleHQgKi8KIAkJc3Bpbl9sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKLQkJc2F2ZV94aXIgPSAodV9jaGFyKSBjeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lUSVIgPDwgaW5kZXgpKTsKKwkJc2F2ZV94aXIgPSAodV9jaGFyKSByZWFkYihiYXNlX2FkZHIgKyAoQ3lUSVIgPDwgaW5kZXgpKTsKIAkJY2hhbm5lbCA9ICh1X3Nob3J0KSAoc2F2ZV94aXIgJiBDeUlSQ2hhbm5lbCk7Ci0JCWkgPSBjaGFubmVsICsgY2hpcCAqIDQgKyBjaW5mby0+Zmlyc3RfbGluZTsKLQkJc2F2ZV9jYXIgPSBjeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpKTsKKwkJc2F2ZV9jYXIgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpKTsKIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIHNhdmVfeGlyKTsKIAogCQkvKiB2YWxpZGF0ZSB0aGUgcG9ydCMgKGFzIGNvbmZpZ3VyZWQgYW5kIG9wZW4pICovCi0JCWlmICgoaSA8IDApIHx8IChOUl9QT1JUUyA8PSBpKSkgeworCQlpZiAoY2hhbm5lbCArIGNoaXAgKiA0ID49IGNpbmZvLT5ucG9ydHMpIHsKIAkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCQkgIGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCisJCQkJICByZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJgogCQkJCSAgfkN5VHhSZHkpOwogCQkJZ290byB0eGVuZDsKIAkJfQotCQlpbmZvID0gJmN5X3BvcnRbaV07Ci0JCWluZm8tPmxhc3RfYWN0aXZlID0gamlmZmllczsKLQkJaWYgKGluZm8tPnR0eSA9PSAwKSB7CisJCWluZm8gPSAmY2luZm8tPnBvcnRzW2NoYW5uZWwgKyBjaGlwICogNF07CisJCWlmIChpbmZvLT50dHkgPT0gTlVMTCkgewogCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCSAgY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKKwkJCQkgIHJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCiAJCQkJICB+Q3lUeFJkeSk7CiAJCQlnb3RvIHR4ZG9uZTsKIAkJfQpAQCAtMTI3OCwyOSArMTIzNSwyOSBAQAogCiAJCXdoaWxlIChjaGFyX2NvdW50LS0gPiAwKSB7CiAJCQlpZiAoIWluZm8tPnhtaXRfY250KSB7Ci0JCQkJaWYgKGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCisJCQkJaWYgKHJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCiAJCQkJCQlDeVR4TXB0eSkgewogCQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkJCQljeV9yZWFkYihiYXNlX2FkZHIgKworCQkJCQkJcmVhZGIoYmFzZV9hZGRyICsKIAkJCQkJCQkoQ3lTUkVSIDw8IGluZGV4KSkgJgogCQkJCQkJfkN5VHhNcHR5KTsKIAkJCQl9IGVsc2UgewogCQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkJCQkoY3lfcmVhZGIoYmFzZV9hZGRyICsKKwkJCQkJCShyZWFkYihiYXNlX2FkZHIgKwogCQkJCQkJICAJKEN5U1JFUiA8PCBpbmRleCkpICYKIAkJCQkJCX5DeVR4UmR5KSB8IEN5VHhNcHR5KTsKIAkJCQl9CiAJCQkJZ290byB0eGRvbmU7CiAJCQl9Ci0JCQlpZiAoaW5mby0+eG1pdF9idWYgPT0gMCkgeworCQkJaWYgKGluZm8tPnhtaXRfYnVmID09IE5VTEwpIHsKIAkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSYKKwkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKIAkJCQkJfkN5VHhSZHkpOwogCQkJCWdvdG8gdHhkb25lOwogCQkJfQogCQkJaWYgKGluZm8tPnR0eS0+c3RvcHBlZCB8fCBpbmZvLT50dHktPmh3X3N0b3BwZWQpIHsKIAkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSYKKwkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKIAkJCQkJfkN5VHhSZHkpOwogCQkJCWdvdG8gdHhkb25lOwogCQkJfQpAQCAtMTMzMyw3ICsxMjkwLDYgQEAKIAkJCQkJCTApOwogCQkJCQlpbmZvLT5pY291bnQudHgrKzsKIAkJCQkJY2hhcl9jb3VudC0tOwotCQkJCX0gZWxzZSB7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0xMzUzLDE5ICsxMzA5LDE2IEBACiAKIAkJLyogZGV0ZXJtaW5lIHRoZSBjaGFubmVsICYgY2hhbmdlIHRvIHRoYXQgY29udGV4dCAqLwogCQlzcGluX2xvY2soJmNpbmZvLT5jYXJkX2xvY2spOwotCQlzYXZlX3hpciA9ICh1X2NoYXIpIGN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1JUiA8PCBpbmRleCkpOworCQlzYXZlX3hpciA9ICh1X2NoYXIpIHJlYWRiKGJhc2VfYWRkciArIChDeU1JUiA8PCBpbmRleCkpOwogCQljaGFubmVsID0gKHVfc2hvcnQpIChzYXZlX3hpciAmIEN5SVJDaGFubmVsKTsKLQkJaW5mbyA9ICZjeV9wb3J0W2NoYW5uZWwgKyBjaGlwICogNCArIGNpbmZvLT5maXJzdF9saW5lXTsKLQkJaW5mby0+bGFzdF9hY3RpdmUgPSBqaWZmaWVzOwotCQlzYXZlX2NhciA9IGN5X3JlYWRiKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCkpOworCQlpbmZvID0gJmNpbmZvLT5wb3J0c1tjaGFubmVsICsgY2hpcCAqIDRdOworCQlzYXZlX2NhciA9IHJlYWRiKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCkpOwogCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV94aXIpOwogCi0JCW1kbV9jaGFuZ2UgPSBjeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lNSVNSIDw8IGluZGV4KSk7Ci0JCW1kbV9zdGF0dXMgPSBjeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpOworCQltZG1fY2hhbmdlID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5TUlTUiA8PCBpbmRleCkpOworCQltZG1fc3RhdHVzID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKTsKIAotCQlpZiAoaW5mby0+dHR5ID09IDApIHsJLyogbm8gcGxhY2UgZm9yIGRhdGEsIGlnbm9yZSBpdCAqLwotCQkJOwotCQl9IGVsc2UgeworCQlpZiAoaW5mby0+dHR5KSB7CiAJCQlpZiAobWRtX2NoYW5nZSAmIEN5QU5ZX0RFTFRBKSB7CiAJCQkJLyogRm9yIHN0YXRpc3RpY3Mgb25seSAqLwogCQkJCWlmIChtZG1fY2hhbmdlICYgQ3lEQ0QpCkBAIC0xMzk4LDcgKzEzNTEsNyBAQAogCQkJCQkJaW5mby0+dHR5LT5od19zdG9wcGVkID0gMDsKIAkJCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKwogCQkJCQkJCShDeVNSRVIgPDwgaW5kZXgpLAotCQkJCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArCisJCQkJCQkJcmVhZGIoYmFzZV9hZGRyICsKIAkJCQkJCQkJKEN5U1JFUiA8PAogCQkJCQkJCQkJaW5kZXgpKXwKIAkJCQkJCQlDeVR4UmR5KTsKQEAgLTE0MTIsMTcgKzEzNjUsMTcgQEAKIAkJCQkJCWluZm8tPnR0eS0+aHdfc3RvcHBlZCA9IDE7CiAJCQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsKIAkJCQkJCQkoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCQkJCQljeV9yZWFkYihiYXNlX2FkZHIgKworCQkJCQkJCXJlYWRiKGJhc2VfYWRkciArCiAJCQkJCQkJCShDeVNSRVIgPDwKIAkJCQkJCQkJaW5kZXgpKSAmCiAJCQkJCQkJfkN5VHhSZHkpOwogCQkJCQl9CiAJCQkJfQogCQkJfQotCQkJaWYgKG1kbV9jaGFuZ2UgJiBDeURTUikgeworLyoJCQlpZiAobWRtX2NoYW5nZSAmIEN5RFNSKSB7CiAJCQl9CiAJCQlpZiAobWRtX2NoYW5nZSAmIEN5UkkpIHsKLQkJCX0KKwkJCX0qLwogCQl9CiAJCS8qIGVuZCBvZiBzZXJ2aWNlICovCiAJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNSVIgPDwgaW5kZXgpLCAoc2F2ZV94aXIgJiAweDNmKSk7CkBAIC0xNDM4LDE2ICsxMzkxLDE2IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgY3l5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJaW50IHN0YXR1czsKLQlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm87CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gZGV2X2lkOwogCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyLCAqY2FyZF9iYXNlX2FkZHI7CiAJaW50IGNoaXA7CiAJaW50IGluZGV4OwogCWludCB0b29fbWFueTsKIAlpbnQgaGFkX3dvcms7CiAKLQlpZiAoKGNpbmZvID0gKHN0cnVjdCBjeWNsYWRlc19jYXJkICopZGV2X2lkKSA9PSAwKSB7CisJaWYgKHVubGlrZWx5KGNpbmZvID09IE5VTEwpKSB7CiAjaWZkZWYgQ1lfREVCVUdfSU5URVJSVVBUUwotCQlwcmludGsoImN5eV9pbnRlcnJ1cHQ6IHNwdXJpb3VzIGludGVycnVwdCAlZFxuXHIiLCBpcnEpOworCQlwcmludGsoS0VSTl9ERUJVRyAiY3l5X2ludGVycnVwdDogc3B1cmlvdXMgaW50ZXJydXB0ICVkXG4iLGlycSk7CiAjZW5kaWYKIAkJcmV0dXJuIElSUV9OT05FOwkvKiBzcHVyaW91cyBpbnRlcnJ1cHQgKi8KIAl9CkBAIC0xNDU1LDYgKzE0MDgsMTAgQEAKIAljYXJkX2Jhc2VfYWRkciA9IGNpbmZvLT5iYXNlX2FkZHI7CiAJaW5kZXggPSBjaW5mby0+YnVzX2luZGV4OwogCisJLyogY2FyZCB3YXMgbm90IGluaXRpYWxpemVkIHlldCAoZS5nLiBERUJVR19TSElSUSkgKi8KKwlpZiAodW5saWtlbHkoY2FyZF9iYXNlX2FkZHIgPT0gTlVMTCkpCisJCXJldHVybiBJUlFfSEFORExFRDsKKwogCS8qIFRoaXMgbG9vcCBjaGVja3MgYWxsIGNoaXBzIGluIHRoZSBjYXJkLiAgTWFrZSBhIG5vdGUgd2hlbmV2ZXIKIAkgICBfYW55XyBjaGlwIGhhZCBzb21lIHdvcmsgdG8gZG8sIGFzIHRoaXMgaXMgY29uc2lkZXJlZCBhbgogCSAgIGluZGljYXRpb24gdGhhdCB0aGVyZSB3aWxsIGJlIG1vcmUgdG8gZG8uICBPbmx5IHdoZW4gbm8gY2hpcApAQCAtMTQ2Niw3ICsxNDIzLDcgQEAKIAkJCWJhc2VfYWRkciA9IGNpbmZvLT5iYXNlX2FkZHIgKwogCQkJCQkoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwogCQkJdG9vX21hbnkgPSAwOwotCQkJd2hpbGUgKChzdGF0dXMgPSBjeV9yZWFkYihiYXNlX2FkZHIgKworCQkJd2hpbGUgKChzdGF0dXMgPSByZWFkYihiYXNlX2FkZHIgKwogCQkJCQkJKEN5U1ZSUiA8PCBpbmRleCkpKSAhPSAweDAwKSB7CiAJCQkJaGFkX3dvcmsrKzsKIAkJCS8qIFRoZSBwdXJwb3NlIG9mIHRoZSBmb2xsb3dpbmcgdGVzdCBpcyB0byBlbnN1cmUgdGhhdApAQCAtMTQ5OCw3ICsxNDU1LDcgQEAKIAogc3RhdGljIGludAogY3l6X2ZldGNoX21zZyhzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8sCi0JCXVjbG9uZyAqIGNoYW5uZWwsIHVjY2hhciAqIGNtZCwgdWNsb25nICogcGFyYW0pCisJCV9fdTMyICogY2hhbm5lbCwgX191OCAqIGNtZCwgX191MzIgKiBwYXJhbSkKIHsKIAlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwogCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKQEAgLTE1MDksMTYgKzE0NjYsMTUgQEAKIAlpZiAoIUlTWkxPQURFRCgqY2luZm8pKSB7CiAJCXJldHVybiAtMTsKIAl9Ci0JemZ3X2N0cmwgPSBjaW5mby0+YmFzZV9hZGRyICsgKGN5X3JlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYKLQkJCTB4ZmZmZmYpOworCXpmd19jdHJsID0gY2luZm8tPmJhc2VfYWRkciArIChyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwogCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7CiAKLQlsb2NfZG9vcmJlbGwgPSBjeV9yZWFkbCgmKChzdHJ1Y3QgUlVOVElNRV85MDYwIF9faW9tZW0gKikKKwlsb2NfZG9vcmJlbGwgPSByZWFkbCgmKChzdHJ1Y3QgUlVOVElNRV85MDYwIF9faW9tZW0gKikKIAkJCQkgIChjaW5mby0+Y3RsX2FkZHIpKS0+bG9jX2Rvb3JiZWxsKTsKIAlpZiAobG9jX2Rvb3JiZWxsKSB7CiAJCSpjbWQgPSAoY2hhcikoMHhmZiAmIGxvY19kb29yYmVsbCk7Ci0JCSpjaGFubmVsID0gY3lfcmVhZGwoJmJvYXJkX2N0cmwtPmZ3Y21kX2NoYW5uZWwpOwotCQkqcGFyYW0gPSAodWNsb25nKSBjeV9yZWFkbCgmYm9hcmRfY3RybC0+ZndjbWRfcGFyYW0pOworCQkqY2hhbm5lbCA9IHJlYWRsKCZib2FyZF9jdHJsLT5md2NtZF9jaGFubmVsKTsKKwkJKnBhcmFtID0gKF9fdTMyKSByZWFkbCgmYm9hcmRfY3RybC0+ZndjbWRfcGFyYW0pOwogCQljeV93cml0ZWwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopKGNpbmZvLT5jdGxfYWRkcikpLT4KIAkJCSAgbG9jX2Rvb3JiZWxsLCAweGZmZmZmZmZmKTsKIAkJcmV0dXJuIDE7CkBAIC0xNTI4LDI4ICsxNDg0LDI3IEBACiAKIHN0YXRpYyBpbnQKIGN5el9pc3N1ZV9jbWQoc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvLAotCQl1Y2xvbmcgY2hhbm5lbCwgdWNjaGFyIGNtZCwgdWNsb25nIHBhcmFtKQorCQlfX3UzMiBjaGFubmVsLCBfX3U4IGNtZCwgX191MzIgcGFyYW0pCiB7CiAJc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKIAlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7CiAJc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKLQl1bnNpZ25lZCBsb25nIF9faW9tZW0gKnBjaV9kb29yYmVsbDsKKwlfX3UzMiBfX2lvbWVtICpwY2lfZG9vcmJlbGw7CiAJaW50IGluZGV4OwogCiAJZmlybV9pZCA9IGNpbmZvLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOwogCWlmICghSVNaTE9BREVEKCpjaW5mbykpIHsKIAkJcmV0dXJuIC0xOwogCX0KLQl6ZndfY3RybCA9IGNpbmZvLT5iYXNlX2FkZHIgKyAoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJgotCQkJMHhmZmZmZik7CisJemZ3X2N0cmwgPSBjaW5mby0+YmFzZV9hZGRyICsgKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7CiAJYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKIAogCWluZGV4ID0gMDsKIAlwY2lfZG9vcmJlbGwgPQogCSAgICAmKChzdHJ1Y3QgUlVOVElNRV85MDYwIF9faW9tZW0gKikoY2luZm8tPmN0bF9hZGRyKSktPnBjaV9kb29yYmVsbDsKLQl3aGlsZSAoKGN5X3JlYWRsKHBjaV9kb29yYmVsbCkgJiAweGZmKSAhPSAwKSB7CisJd2hpbGUgKChyZWFkbChwY2lfZG9vcmJlbGwpICYgMHhmZikgIT0gMCkgewogCQlpZiAoaW5kZXgrKyA9PSAxMDAwKSB7Ci0JCQlyZXR1cm4gKGludCkoY3lfcmVhZGwocGNpX2Rvb3JiZWxsKSAmIDB4ZmYpOworCQkJcmV0dXJuIChpbnQpKHJlYWRsKHBjaV9kb29yYmVsbCkgJiAweGZmKTsKIAkJfQogCQl1ZGVsYXkoNTBMKTsKIAl9CkBAIC0xNTYxLDM0ICsxNTE2LDMwIEBACiB9CQkJCS8qIGN5el9pc3N1ZV9jbWQgKi8KIAogc3RhdGljIHZvaWQKLWN5el9oYW5kbGVfcngoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCi0JCXZvbGF0aWxlIHN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKiBjaF9jdHJsLAotCQl2b2xhdGlsZSBzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqIGJ1Zl9jdHJsKQorY3l6X2hhbmRsZV9yeChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybCwKKwkJc3RydWN0IEJVRl9DVFJMIF9faW9tZW0gKmJ1Zl9jdHJsKQogewotCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9ICZjeV9jYXJkW2luZm8tPmNhcmRdOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9IGluZm8tPmNhcmQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKLQl2b2xhdGlsZSBpbnQgY2hhcl9jb3VudDsKKwlpbnQgY2hhcl9jb3VudDsKIAlpbnQgbGVuOwogI2lmZGVmIEJMT0NLTU9WRQotCWludCBzbWFsbF9jb3VudDsKKwl1bnNpZ25lZCBjaGFyICpidWY7CiAjZWxzZQogCWNoYXIgZGF0YTsKICNlbmRpZgotCXZvbGF0aWxlIHVjbG9uZyByeF9wdXQsIHJ4X2dldCwgbmV3X3J4X2dldCwgcnhfYnVmc2l6ZSwgcnhfYnVmYWRkcjsKKwlfX3UzMiByeF9wdXQsIHJ4X2dldCwgbmV3X3J4X2dldCwgcnhfYnVmc2l6ZSwgcnhfYnVmYWRkcjsKIAotCXJ4X2dldCA9IG5ld19yeF9nZXQgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnJ4X2dldCk7Ci0JcnhfcHV0ID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT5yeF9wdXQpOwotCXJ4X2J1ZnNpemUgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnJ4X2J1ZnNpemUpOwotCXJ4X2J1ZmFkZHIgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnJ4X2J1ZmFkZHIpOworCXJ4X2dldCA9IG5ld19yeF9nZXQgPSByZWFkbCgmYnVmX2N0cmwtPnJ4X2dldCk7CisJcnhfcHV0ID0gcmVhZGwoJmJ1Zl9jdHJsLT5yeF9wdXQpOworCXJ4X2J1ZnNpemUgPSByZWFkbCgmYnVmX2N0cmwtPnJ4X2J1ZnNpemUpOworCXJ4X2J1ZmFkZHIgPSByZWFkbCgmYnVmX2N0cmwtPnJ4X2J1ZmFkZHIpOwogCWlmIChyeF9wdXQgPj0gcnhfZ2V0KQogCQljaGFyX2NvdW50ID0gcnhfcHV0IC0gcnhfZ2V0OwogCWVsc2UKIAkJY2hhcl9jb3VudCA9IHJ4X3B1dCAtIHJ4X2dldCArIHJ4X2J1ZnNpemU7CiAKIAlpZiAoY2hhcl9jb3VudCkgewotCQlpbmZvLT5sYXN0X2FjdGl2ZSA9IGppZmZpZXM7Ci0JCWluZm8tPmppZmZpZXNbMV0gPSBqaWZmaWVzOwotCiAjaWZkZWYgQ1lfRU5BQkxFX01PTklUT1JJTkcKIAkJaW5mby0+bW9uLmludF9jb3VudCsrOwogCQlpbmZvLT5tb24uY2hhcl9jb3VudCArPSBjaGFyX2NvdW50OwpAQCAtMTU5Niw3ICsxNTQ3LDcgQEAKIAkJCWluZm8tPm1vbi5jaGFyX21heCA9IGNoYXJfY291bnQ7CiAJCWluZm8tPm1vbi5jaGFyX2xhc3QgPSBjaGFyX2NvdW50OwogI2VuZGlmCi0JCWlmICh0dHkgPT0gMCkgeworCQlpZiAodHR5ID09IE5VTEwpIHsKIAkJCS8qIGZsdXNoIHJlY2VpdmVkIGNoYXJhY3RlcnMgKi8KIAkJCW5ld19yeF9nZXQgPSAobmV3X3J4X2dldCArIGNoYXJfY291bnQpICYKIAkJCQkJKHJ4X2J1ZnNpemUgLSAxKTsKQEAgLTE2MDYsMzAgKzE1NTcsMjggQEAKIAkJLyogd2UnZCBsaWtlIHRvIHVzZSBtZW1jcHkodCwgZiwgbikgYW5kIG1lbXNldChzLCBjLCBjb3VudCkKIAkJICAgZm9yIHBlcmZvcm1hbmNlLCBidXQgYmVjYXVzZSBvZiBidWZmZXIgYm91bmRhcmllcywgdGhlcmUKIAkJICAgbWF5IGJlIHNldmVyYWwgc3RlcHMgdG8gdGhlIG9wZXJhdGlvbiAqLwotCQkJd2hpbGUgKDAgPCAoc21hbGxfY291bnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsCi0JCQkJCXJ4X2J1ZnNpemUgLSBuZXdfcnhfZ2V0LAotCQkJCQltaW5fdCh1bnNpZ25lZCBpbnQsIFRUWV9GTElQQlVGX1NJWkUgLQotCQkJCQkJdHR5LT5mbGlwLmNvdW50LCBjaGFyX2NvdW50KSkpKXsKLQkJCQltZW1jcHlfZnJvbWlvKHR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIsCi0JCQkJCShjaGFyICopKGNpbmZvLT5iYXNlX2FkZHIgKyByeF9idWZhZGRyICsKLQkJCQkJCW5ld19yeF9nZXQpLAotCQkJCQlzbWFsbF9jb3VudCk7CisJCQl3aGlsZSAoMSkgeworCQkJCWxlbiA9IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nKHR0eSwgJmJ1ZiwKKwkJCQkJCWNoYXJfY291bnQpOworCQkJCWlmICghbGVuKQorCQkJCQlicmVhazsKIAotCQkJCXR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIgKz0gc21hbGxfY291bnQ7Ci0JCQkJbWVtc2V0KHR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIsIFRUWV9OT1JNQUwsCi0JCQkJCXNtYWxsX2NvdW50KTsKLQkJCQl0dHktPmZsaXAuZmxhZ19idWZfcHRyICs9IHNtYWxsX2NvdW50OwotCQkJCW5ld19yeF9nZXQgPSAobmV3X3J4X2dldCArIHNtYWxsX2NvdW50KSAmCisJCQkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBtaW4obGVuLCBjaGFyX2NvdW50KSwKKwkJCQkJCXJ4X2J1ZnNpemUgLSBuZXdfcnhfZ2V0KTsKKworCQkJCW1lbWNweV9mcm9taW8oYnVmLCBjaW5mby0+YmFzZV9hZGRyICsKKwkJCQkJCXJ4X2J1ZmFkZHIgKyBuZXdfcnhfZ2V0LCBsZW4pOworCisJCQkJbmV3X3J4X2dldCA9IChuZXdfcnhfZ2V0ICsgbGVuKSAmCiAJCQkJCQkocnhfYnVmc2l6ZSAtIDEpOwotCQkJCWNoYXJfY291bnQgLT0gc21hbGxfY291bnQ7Ci0JCQkJaW5mby0+aWNvdW50LnJ4ICs9IHNtYWxsX2NvdW50OwotCQkJCWluZm8tPmlkbGVfc3RhdHMucmVjdl9ieXRlcyArPSBzbWFsbF9jb3VudDsKLQkJCQl0dHktPmZsaXAuY291bnQgKz0gc21hbGxfY291bnQ7CisJCQkJY2hhcl9jb3VudCAtPSBsZW47CisJCQkJaW5mby0+aWNvdW50LnJ4ICs9IGxlbjsKKwkJCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfYnl0ZXMgKz0gbGVuOwogCQkJfQogI2Vsc2UKIAkJCWxlbiA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY2hhcl9jb3VudCk7CiAJCQl3aGlsZSAobGVuLS0pIHsKLQkJCQlkYXRhID0gY3lfcmVhZGIoY2luZm8tPmJhc2VfYWRkciArIHJ4X2J1ZmFkZHIgKworCQkJCWRhdGEgPSByZWFkYihjaW5mby0+YmFzZV9hZGRyICsgcnhfYnVmYWRkciArCiAJCQkJCQluZXdfcnhfZ2V0KTsKIAkJCQluZXdfcnhfZ2V0ID0gKG5ld19yeF9nZXQgKyAxKSYgKHJ4X2J1ZnNpemUgLSAxKTsKIAkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGEsIFRUWV9OT1JNQUwpOwpAQCAtMTY0MCwxMyArMTU4OSwxMiBAQAogI2lmZGVmIENPTkZJR19DWVpfSU5UUgogCQkvKiBSZWNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoYXJzIGluIHRoZSBSWCBidWZmZXIgYW5kIGlzc3VlCiAJCSAgIGEgY21kIGluIGNhc2UgaXQncyBoaWdoZXIgdGhhbiB0aGUgUlggaGlnaCB3YXRlciBtYXJrICovCi0JCQlyeF9wdXQgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnJ4X3B1dCk7CisJCQlyeF9wdXQgPSByZWFkbCgmYnVmX2N0cmwtPnJ4X3B1dCk7CiAJCQlpZiAocnhfcHV0ID49IHJ4X2dldCkKIAkJCQljaGFyX2NvdW50ID0gcnhfcHV0IC0gcnhfZ2V0OwogCQkJZWxzZQogCQkJCWNoYXJfY291bnQgPSByeF9wdXQgLSByeF9nZXQgKyByeF9idWZzaXplOwotCQkJaWYgKGNoYXJfY291bnQgPj0gKGludCljeV9yZWFkbCgmYnVmX2N0cmwtPgotCQkJCQlyeF90aHJlc2hvbGQpKSB7CisJCQlpZiAoY2hhcl9jb3VudCA+PSAoaW50KXJlYWRsKCZidWZfY3RybC0+cnhfdGhyZXNob2xkKSkgewogCQkJCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX1pfUlhfRlVMTCk7CiAJCQl9CiAjZW5kaWYKQEAgLTE2NTksMjYgKzE2MDcsMjUgQEAKIH0KIAogc3RhdGljIHZvaWQKLWN5el9oYW5kbGVfdHgoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCi0JCXZvbGF0aWxlIHN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKiBjaF9jdHJsLAotCQl2b2xhdGlsZSBzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqIGJ1Zl9jdHJsKQorY3l6X2hhbmRsZV90eChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybCwKKwkJc3RydWN0IEJVRl9DVFJMIF9faW9tZW0gKmJ1Zl9jdHJsKQogewotCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9ICZjeV9jYXJkW2luZm8tPmNhcmRdOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9IGluZm8tPmNhcmQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKIAljaGFyIGRhdGE7Ci0Jdm9sYXRpbGUgaW50IGNoYXJfY291bnQ7CisJaW50IGNoYXJfY291bnQ7CiAjaWZkZWYgQkxPQ0tNT1ZFCiAJaW50IHNtYWxsX2NvdW50OwogI2VuZGlmCi0Jdm9sYXRpbGUgdWNsb25nIHR4X3B1dCwgdHhfZ2V0LCB0eF9idWZzaXplLCB0eF9idWZhZGRyOworCV9fdTMyIHR4X3B1dCwgdHhfZ2V0LCB0eF9idWZzaXplLCB0eF9idWZhZGRyOwogCiAJaWYgKGluZm8tPnhtaXRfY250IDw9IDApCS8qIE5vdGhpbmcgdG8gdHJhbnNtaXQgKi8KIAkJcmV0dXJuOwogCi0JdHhfZ2V0ID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT50eF9nZXQpOwotCXR4X3B1dCA9IGN5X3JlYWRsKCZidWZfY3RybC0+dHhfcHV0KTsKLQl0eF9idWZzaXplID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT50eF9idWZzaXplKTsKLQl0eF9idWZhZGRyID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT50eF9idWZhZGRyKTsKKwl0eF9nZXQgPSByZWFkbCgmYnVmX2N0cmwtPnR4X2dldCk7CisJdHhfcHV0ID0gcmVhZGwoJmJ1Zl9jdHJsLT50eF9wdXQpOworCXR4X2J1ZnNpemUgPSByZWFkbCgmYnVmX2N0cmwtPnR4X2J1ZnNpemUpOworCXR4X2J1ZmFkZHIgPSByZWFkbCgmYnVmX2N0cmwtPnR4X2J1ZmFkZHIpOwogCWlmICh0eF9wdXQgPj0gdHhfZ2V0KQogCQljaGFyX2NvdW50ID0gdHhfZ2V0IC0gdHhfcHV0IC0gMSArIHR4X2J1ZnNpemU7CiAJZWxzZQpAQCAtMTY4Niw5ICsxNjMzLDggQEAKIAogCWlmIChjaGFyX2NvdW50KSB7CiAKLQkJaWYgKHR0eSA9PSAwKSB7CisJCWlmICh0dHkgPT0gTlVMTCkKIAkJCWdvdG8genR4ZG9uZTsKLQkJfQogCiAJCWlmIChpbmZvLT54X2NoYXIpIHsJLyogc2VuZCBzcGVjaWFsIGNoYXIgKi8KIAkJCWRhdGEgPSBpbmZvLT54X2NoYXI7CkBAIC0xNjk4LDggKzE2NDQsNiBAQAogCQkJaW5mby0+eF9jaGFyID0gMDsKIAkJCWNoYXJfY291bnQtLTsKIAkJCWluZm8tPmljb3VudC50eCsrOwotCQkJaW5mby0+bGFzdF9hY3RpdmUgPSBqaWZmaWVzOwotCQkJaW5mby0+amlmZmllc1syXSA9IGppZmZpZXM7CiAJCX0KICNpZmRlZiBCTE9DS01PVkUKIAkJd2hpbGUgKDAgPCAoc21hbGxfY291bnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsCkBAIC0xNzE5LDggKzE2NjMsNiBAQAogCQkJaW5mby0+eG1pdF9jbnQgLT0gc21hbGxfY291bnQ7CiAJCQlpbmZvLT54bWl0X3RhaWwgPSAoaW5mby0+eG1pdF90YWlsICsgc21hbGxfY291bnQpICYKIAkJCQkJKFNFUklBTF9YTUlUX1NJWkUgLSAxKTsKLQkJCWluZm8tPmxhc3RfYWN0aXZlID0gamlmZmllczsKLQkJCWluZm8tPmppZmZpZXNbMl0gPSBqaWZmaWVzOwogCQl9CiAjZWxzZQogCQl3aGlsZSAoaW5mby0+eG1pdF9jbnQgJiYgY2hhcl9jb3VudCkgewpAQCAtMTczMyw4ICsxNjc1LDYgQEAKIAkJCXR4X3B1dCA9ICh0eF9wdXQgKyAxKSAmICh0eF9idWZzaXplIC0gMSk7CiAJCQljaGFyX2NvdW50LS07CiAJCQlpbmZvLT5pY291bnQudHgrKzsKLQkJCWluZm8tPmxhc3RfYWN0aXZlID0gamlmZmllczsKLQkJCWluZm8tPmppZmZpZXNbMl0gPSBqaWZmaWVzOwogCQl9CiAjZW5kaWYKIHp0eGRvbmU6CkBAIC0xNzUwLDMzICsxNjkwLDMyIEBACiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKLQlzdGF0aWMgdm9sYXRpbGUgc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKLQlzdGF0aWMgdm9sYXRpbGUgc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwotCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOwotCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOwotCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqYnVmX2N0cmw7Ci0JdWNsb25nIGNoYW5uZWw7Ci0JdWNjaGFyIGNtZDsKLQl1Y2xvbmcgcGFyYW07Ci0JdWNsb25nIGh3X3ZlciwgZndfdmVyOworCXN0YXRpYyBzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOworCXN0YXRpYyBzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7CisJc3RhdGljIHN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7CisJc3RhdGljIHN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7CisJc3RhdGljIHN0cnVjdCBCVUZfQ1RSTCBfX2lvbWVtICpidWZfY3RybDsKKwlfX3UzMiBjaGFubmVsOworCV9fdTggY21kOworCV9fdTMyIHBhcmFtOworCV9fdTMyIGh3X3ZlciwgZndfdmVyOwogCWludCBzcGVjaWFsX2NvdW50OwogCWludCBkZWx0YV9jb3VudDsKIAogCWZpcm1faWQgPSBjaW5mby0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKLQl6ZndfY3RybCA9IGNpbmZvLT5iYXNlX2FkZHIgKyAoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJgotCQkJMHhmZmZmZik7CisJemZ3X2N0cmwgPSBjaW5mby0+YmFzZV9hZGRyICsgKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7CiAJYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKLQlmd192ZXIgPSBjeV9yZWFkbCgmYm9hcmRfY3RybC0+ZndfdmVyc2lvbik7Ci0JaHdfdmVyID0gY3lfcmVhZGwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopKGNpbmZvLT5jdGxfYWRkcikpLT4KKwlmd192ZXIgPSByZWFkbCgmYm9hcmRfY3RybC0+ZndfdmVyc2lvbik7CisJaHdfdmVyID0gcmVhZGwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopKGNpbmZvLT5jdGxfYWRkcikpLT4KIAkJCW1haWxfYm94XzApOwogCiAJd2hpbGUgKGN5el9mZXRjaF9tc2coY2luZm8sICZjaGFubmVsLCAmY21kLCAmcGFyYW0pID09IDEpIHsKIAkJc3BlY2lhbF9jb3VudCA9IDA7CiAJCWRlbHRhX2NvdW50ID0gMDsKLQkJaW5mbyA9ICZjeV9wb3J0W2NoYW5uZWwgKyBjaW5mby0+Zmlyc3RfbGluZV07Ci0JCWlmICgodHR5ID0gaW5mby0+dHR5KSA9PSAwKSB7CisJCWluZm8gPSAmY2luZm8tPnBvcnRzW2NoYW5uZWxdOworCQlpZiAoKHR0eSA9IGluZm8tPnR0eSkgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwotCQl9CisKIAkJY2hfY3RybCA9ICYoemZ3X2N0cmwtPmNoX2N0cmxbY2hhbm5lbF0pOwogCQlidWZfY3RybCA9ICYoemZ3X2N0cmwtPmJ1Zl9jdHJsW2NoYW5uZWxdKTsKIApAQCAtMTgwMSw3ICsxNzQwLDcgQEAKIAkJCWRlbHRhX2NvdW50Kys7CiAJCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkgewogCQkJCWlmICgoZndfdmVyID4gMjQxID8gKCh1X2xvbmcpIHBhcmFtKSA6Ci0JCQkJCQljeV9yZWFkbCgmY2hfY3RybC0+cnNfc3RhdHVzKSkgJgorCQkJCQkJcmVhZGwoJmNoX2N0cmwtPnJzX3N0YXR1cykpICYKIAkJCQkJCUNfUlNfRENEKSB7CiAJCQkJCWN5X3NjaGVkX2V2ZW50KGluZm8sCiAJCQkJCQkgCUN5X0VWRU5UX09QRU5fV0FLRVVQKTsKQEAgLTE4MzMsOCArMTc3Miw4IEBACiAJCWNhc2UgQ19DTV9JTlRCQUNLMjoKIAkJCS8qIFJlY2VwdGlvbiBJbnRlcnJ1cHQgKi8KICNpZmRlZiBDWV9ERUJVR19JTlRFUlJVUFRTCi0JCQlwcmludGsoImN5el9pbnRlcnJ1cHQ6IHJjdmQgaW50ciwgY2FyZCAlZCwgIgotCQkJCQkicG9ydCAlbGRcblxyIiwgaW5mby0+Y2FyZCwgY2hhbm5lbCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiY3l6X2ludGVycnVwdDogcmN2ZCBpbnRyLCBjYXJkICVkLCAiCisJCQkJCSJwb3J0ICVsZFxuIiwgaW5mby0+Y2FyZCwgY2hhbm5lbCk7CiAjZW5kaWYKIAkJCWN5el9oYW5kbGVfcngoaW5mbywgY2hfY3RybCwgYnVmX2N0cmwpOwogCQkJYnJlYWs7CkBAIC0xODQzLDggKzE3ODIsOCBAQAogCQljYXNlIENfQ01fSU5UQkFDSzoKIAkJCS8qIFRyYW5zbWlzc2lvbiBJbnRlcnJ1cHQgKi8KICNpZmRlZiBDWV9ERUJVR19JTlRFUlJVUFRTCi0JCQlwcmludGsoImN5el9pbnRlcnJ1cHQ6IHhtaXQgaW50ciwgY2FyZCAlZCwgIgotCQkJCQkicG9ydCAlbGRcblxyIiwgaW5mby0+Y2FyZCwgY2hhbm5lbCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiY3l6X2ludGVycnVwdDogeG1pdCBpbnRyLCBjYXJkICVkLCAiCisJCQkJCSJwb3J0ICVsZFxuIiwgaW5mby0+Y2FyZCwgY2hhbm5lbCk7CiAjZW5kaWYKIAkJCWN5el9oYW5kbGVfdHgoaW5mbywgY2hfY3RybCwgYnVmX2N0cmwpOwogCQkJYnJlYWs7CkBAIC0xODY1LDE4ICsxODA0LDE5IEBACiAjaWZkZWYgQ09ORklHX0NZWl9JTlRSCiBzdGF0aWMgaXJxcmV0dXJuX3QgY3l6X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9IGRldl9pZDsKIAotCWlmICgoY2luZm8gPSAoc3RydWN0IGN5Y2xhZGVzX2NhcmQgKilkZXZfaWQpID09IDApIHsKKwlpZiAodW5saWtlbHkoY2luZm8gPT0gTlVMTCkpIHsKICNpZmRlZiBDWV9ERUJVR19JTlRFUlJVUFRTCi0JCXByaW50aygiY3l6X2ludGVycnVwdDogc3B1cmlvdXMgaW50ZXJydXB0ICVkXG5cciIsIGlycSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJjeXpfaW50ZXJydXB0OiBzcHVyaW91cyBpbnRlcnJ1cHQgJWRcbiIsaXJxKTsKICNlbmRpZgogCQlyZXR1cm4gSVJRX05PTkU7CS8qIHNwdXJpb3VzIGludGVycnVwdCAqLwogCX0KIAotCWlmICghSVNaTE9BREVEKCpjaW5mbykpIHsKKwlpZiAodW5saWtlbHkoIUlTWkxPQURFRCgqY2luZm8pKSkgewogI2lmZGVmIENZX0RFQlVHX0lOVEVSUlVQVFMKLQkJcHJpbnRrKCJjeXpfaW50ZXJydXB0OiBib2FyZCBub3QgeWV0IGxvYWRlZCAoSVJRJWQpLlxuXHIiLCBpcnEpOworCQlwcmludGsoS0VSTl9ERUJVRyAiY3l6X2ludGVycnVwdDogYm9hcmQgbm90IHlldCBsb2FkZWQgIgorCQkJCSIoSVJRJWQpLlxuIiwgaXJxKTsKICNlbmRpZgogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQpAQCAtMTg5MCwxOSArMTgzMCwxOCBAQAogc3RhdGljIHZvaWQgY3l6X3J4X3Jlc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKilhcmc7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQgPSBpbmZvLT5jYXJkOwogCWludCByZXR2YWw7Ci0JaW50IGNhcmQgPSBpbmZvLT5jYXJkOwotCXVjbG9uZyBjaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZSk7CisJX191MzIgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX0lOVEJBQ0syLCAwTCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOworCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2FyZCwgY2hhbm5lbCwgQ19DTV9JTlRCQUNLMiwgMEwpOwogCWlmIChyZXR2YWwgIT0gMCkgewotCQlwcmludGsoImN5YzpjeXpfcnhfcmVzdGFydCByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICJjeWM6Y3l6X3J4X3Jlc3RhcnQgcmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCiAJCQlpbmZvLT5saW5lLCByZXR2YWwpOwogCX0KLQljeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXS5mdW5jdGlvbiA9IE5VTEw7Ci0JQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIH0KIAogI2Vsc2UJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCkBAIC0xOTEyLDE0ICsxODUxLDE0IEBACiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvOwogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0Jc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBGSVJNX0lEICpmaXJtX2lkOwotCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgWkZXX0NUUkwgKnpmd19jdHJsOwotCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQk9BUkRfQ1RSTCAqYm9hcmRfY3RybDsKLQlzdGF0aWMgdm9sYXRpbGUgc3RydWN0IENIX0NUUkwgKmNoX2N0cmw7Ci0Jc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBCVUZfQ1RSTCAqYnVmX2N0cmw7CisJc3RhdGljIHN0cnVjdCBGSVJNX0lEICpmaXJtX2lkOworCXN0YXRpYyBzdHJ1Y3QgWkZXX0NUUkwgKnpmd19jdHJsOworCXN0YXRpYyBzdHJ1Y3QgQk9BUkRfQ1RSTCAqYm9hcmRfY3RybDsKKwlzdGF0aWMgc3RydWN0IENIX0NUUkwgKmNoX2N0cmw7CisJc3RhdGljIHN0cnVjdCBCVUZfQ1RSTCAqYnVmX2N0cmw7CisJdW5zaWduZWQgbG9uZyBleHBpcmVzID0gamlmZmllcyArIEhaOwogCWludCBjYXJkLCBwb3J0OwogCi0JY3l6X3RpbWVybGlzdC5leHBpcmVzID0gamlmZmllcyArIChIWik7CiAJZm9yIChjYXJkID0gMDsgY2FyZCA8IE5SX0NBUkRTOyBjYXJkKyspIHsKIAkJY2luZm8gPSAmY3lfY2FyZFtjYXJkXTsKIApAQCAtMTkzMCwxMiArMTg2OSwxMiBAQAogCiAJCWZpcm1faWQgPSBjaW5mby0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKIAkJemZ3X2N0cmwgPSBjaW5mby0+YmFzZV9hZGRyICsKLQkJCQkoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKKwkJCQkocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKIAkJYm9hcmRfY3RybCA9ICYoemZ3X2N0cmwtPmJvYXJkX2N0cmwpOwogCiAJLyogU2tpcCBmaXJzdCBwb2xsaW5nIGN5Y2xlIHRvIGF2b2lkIHJhY2luZyBjb25kaXRpb25zIHdpdGggdGhlIEZXICovCiAJCWlmICghY2luZm8tPmludHJfZW5hYmxlZCkgewotCQkJY2luZm8tPm5wb3J0cyA9IChpbnQpY3lfcmVhZGwoJmJvYXJkX2N0cmwtPm5fY2hhbm5lbCk7CisJCQljaW5mby0+bnBvcnRzID0gKGludClyZWFkbCgmYm9hcmRfY3RybC0+bl9jaGFubmVsKTsKIAkJCWNpbmZvLT5pbnRyX2VuYWJsZWQgPSAxOwogCQkJY29udGludWU7CiAJCX0KQEAgLTE5NDMsNyArMTg4Miw3IEBACiAJCWN5el9oYW5kbGVfY21kKGNpbmZvKTsKIAogCQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgY2luZm8tPm5wb3J0czsgcG9ydCsrKSB7Ci0JCQlpbmZvID0gJmN5X3BvcnRbcG9ydCArIGNpbmZvLT5maXJzdF9saW5lXTsKKwkJCWluZm8gPSAmY2luZm8tPnBvcnRzW3BvcnRdOwogCQkJdHR5ID0gaW5mby0+dHR5OwogCQkJY2hfY3RybCA9ICYoemZ3X2N0cmwtPmNoX2N0cmxbcG9ydF0pOwogCQkJYnVmX2N0cmwgPSAmKHpmd19jdHJsLT5idWZfY3RybFtwb3J0XSk7CkBAIC0xOTUzLDkgKzE4OTIsOSBAQAogCQkJY3l6X2hhbmRsZV90eChpbmZvLCBjaF9jdHJsLCBidWZfY3RybCk7CiAJCX0KIAkJLyogcG9sbCBldmVyeSAnY3l6X3BvbGxpbmdfY3ljbGUnIHBlcmlvZCAqLwotCQljeXpfdGltZXJsaXN0LmV4cGlyZXMgPSBqaWZmaWVzICsgY3l6X3BvbGxpbmdfY3ljbGU7CisJCWV4cGlyZXMgPSBqaWZmaWVzICsgY3l6X3BvbGxpbmdfY3ljbGU7CiAJfQotCWFkZF90aW1lcigmY3l6X3RpbWVybGlzdCk7CisJbW9kX3RpbWVyKCZjeXpfdGltZXJsaXN0LCBleHBpcmVzKTsKIH0JCQkJLyogY3l6X3BvbGwgKi8KIAogI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLwpAQCAtMTk2OCwyMCArMTkwNywyMSBAQAogICovCiBzdGF0aWMgaW50IHN0YXJ0dXAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8pCiB7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0dmFsID0gMDsKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2FyZCwgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAogCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSAoaW5mby0+bGluZSkgLSAoY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lKTsKKwljaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7CiAKIAlwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewogCQlmcmVlX3BhZ2UocGFnZSk7CkBAIC0yMDAxLDI0ICsxOTQxLDIyIEBACiAJZWxzZQogCQlpbmZvLT54bWl0X2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopcGFnZTsKIAotCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKIAlzZXRfbGluZV9jaGFyKGluZm8pOwogCi0JaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgeworCWlmICghSVNfQ1lDX1ooKmNhcmQpKSB7CiAJCWNoaXAgPSBjaGFubmVsID4+IDI7CiAJCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKwotCQkJCShjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CisJCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OworCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwogCiAjaWZkZWYgQ1lfREVCVUdfT1BFTgotCQlwcmludGsoImN5YyBzdGFydHVwIGNhcmQgJWQsIGNoaXAgJWQsIGNoYW5uZWwgJWQsICIKLQkJCQkiYmFzZV9hZGRyICVseFxuIiwKLQkJCQljYXJkLCBjaGlwLCBjaGFubmVsLCAobG9uZyliYXNlX2FkZHIpOwotCQkvKiovCisJCXByaW50ayhLRVJOX0RFQlVHICJjeWMgc3RhcnR1cCBjYXJkICVkLCBjaGlwICVkLCBjaGFubmVsICVkLCAiCisJCQkJImJhc2VfYWRkciAlcFxuIiwKKwkJCQljYXJkLCBjaGlwLCBjaGFubmVsLCBiYXNlX2FkZHIpOwogI2VuZGlmCi0JCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOwogCkBAIC0yMDM0LDE0ICsxOTcyLDE0IEBACiAJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCksIEN5RFRSKTsKIAogI2lmZGVmIENZX0RFQlVHX0RUUgotCQlwcmludGsoImN5YzpzdGFydHVwIHJhaXNpbmcgRFRSXG4iKTsKLQkJcHJpbnRrKCIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKLQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSksCi0JCQljeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCkpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzdGFydHVwIHJhaXNpbmcgRFRSXG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAorCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKSwKKwkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOwogI2VuZGlmCiAKIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpIHwgQ3lSeERhdGEpOworCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpIHwgQ3lSeERhdGEpOwogCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKIAogCQlpZiAoaW5mby0+dHR5KSB7CkBAIC0yMDU0LDcgKzE5OTIsNyBAQAogCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfaWRsZSA9CiAJCWluZm8tPmlkbGVfc3RhdHMueG1pdF9pZGxlID0gamlmZmllczsKIAotCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCX0gZWxzZSB7CiAJCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7CkBAIC0yMDYzLDI0ICsyMDAxLDIzIEBACiAJCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7CiAJCWludCByZXR2YWw7CiAKLQkJYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHI7CisJCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkcjsKIAogCQlmaXJtX2lkID0gYmFzZV9hZGRyICsgSURfQUREUkVTUzsKLQkJaWYgKCFJU1pMT0FERUQoY3lfY2FyZFtjYXJkXSkpIHsKKwkJaWYgKCFJU1pMT0FERUQoKmNhcmQpKSB7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCi0JCXpmd19jdHJsID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKwotCQkJCShjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOworCQl6ZndfY3RybCA9IGNhcmQtPmJhc2VfYWRkciArCisJCQkJKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7CiAJCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7CiAJCWNoX2N0cmwgPSB6ZndfY3RybC0+Y2hfY3RybDsKIAogI2lmZGVmIENZX0RFQlVHX09QRU4KLQkJcHJpbnRrKCJjeWMgc3RhcnR1cCBaIGNhcmQgJWQsIGNoYW5uZWwgJWQsIGJhc2VfYWRkciAlbHhcbiIsCi0JCQljYXJkLCBjaGFubmVsLCAobG9uZyliYXNlX2FkZHIpOwotCQkvKiovCisJCXByaW50ayhLRVJOX0RFQlVHICJjeWMgc3RhcnR1cCBaIGNhcmQgJWQsIGNoYW5uZWwgJWQsICIKKwkJCSJiYXNlX2FkZHIgJXBcbiIsIGNhcmQsIGNoYW5uZWwsIGJhc2VfYWRkcik7CiAjZW5kaWYKLQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ub3BfbW9kZSwgQ19DSF9FTkFCTEUpOwogI2lmZGVmIFpfV0FLRQpAQCAtMjEwMiwzMyArMjAzOSwzMSBAQAogI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLwogI2VuZGlmCQkJCS8qIFpfV0FLRSAqLwogCi0JCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbY2FyZF0sIGNoYW5uZWwsIENfQ01fSU9DVEwsIDBMKTsKKwkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZChjYXJkLCBjaGFubmVsLCBDX0NNX0lPQ1RMLCAwTCk7CiAJCWlmIChyZXR2YWwgIT0gMCkgewotCQkJcHJpbnRrKCJjeWM6c3RhcnR1cCgxKSByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKLQkJCQlpbmZvLT5saW5lLCByZXR2YWwpOworCQkJcHJpbnRrKEtFUk5fRVJSICJjeWM6c3RhcnR1cCgxKSByZXR2YWwgb24gdHR5QyVkIHdhcyAiCisJCQkJIiV4XG4iLCBpbmZvLT5saW5lLCByZXR2YWwpOwogCQl9CiAKIAkJLyogRmx1c2ggUlggYnVmZmVycyBiZWZvcmUgcmFpc2luZyBEVFIgYW5kIFJUUyAqLwotCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX0ZMVVNIX1JYLAotCQkJCTBMKTsKKwkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZChjYXJkLCBjaGFubmVsLCBDX0NNX0ZMVVNIX1JYLCAwTCk7CiAJCWlmIChyZXR2YWwgIT0gMCkgewotCQkJcHJpbnRrKCJjeWM6c3RhcnR1cCgyKSByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKLQkJCQlpbmZvLT5saW5lLCByZXR2YWwpOworCQkJcHJpbnRrKEtFUk5fRVJSICJjeWM6c3RhcnR1cCgyKSByZXR2YWwgb24gdHR5QyVkIHdhcyAiCisJCQkJIiV4XG4iLCBpbmZvLT5saW5lLCByZXR2YWwpOwogCQl9CiAKIAkJLyogc2V0IHRpbWVvdXQgISEhICovCiAJCS8qIHNldCBSVFMgYW5kIERUUiAhISEgKi8KIAkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wsCi0JCQljeV9yZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSB8IENfUlNfUlRTIHwKKwkJCXJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpIHwgQ19SU19SVFMgfAogCQkJQ19SU19EVFIpOwotCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2luZm8tPmNhcmRdLCBjaGFubmVsLAotCQkJCUNfQ01fSU9DVExNLCAwTCk7CisJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2FyZCwgY2hhbm5lbCwgQ19DTV9JT0NUTE0sIDBMKTsKIAkJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCQlwcmludGsoImN5YzpzdGFydHVwKDMpIHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAotCQkJCWluZm8tPmxpbmUsIHJldHZhbCk7CisJCQlwcmludGsoS0VSTl9FUlIgImN5YzpzdGFydHVwKDMpIHJldHZhbCBvbiB0dHlDJWQgd2FzICIKKwkJCQkiJXhcbiIsIGluZm8tPmxpbmUsIHJldHZhbCk7CiAJCX0KICNpZmRlZiBDWV9ERUJVR19EVFIKLQkJcHJpbnRrKCJjeWM6c3RhcnR1cCByYWlzaW5nIFogRFRSXG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzdGFydHVwIHJhaXNpbmcgWiBEVFJcbiIpOwogI2VuZGlmCiAKIAkJLyogZW5hYmxlIHNlbmQsIHJlY3YsIG1vZGVtICEhISAqLwpAQCAtMjE0NCw1MSArMjA3OSw1MCBAQAogCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfaWRsZSA9CiAJCWluZm8tPmlkbGVfc3RhdHMueG1pdF9pZGxlID0gamlmZmllczsKIAotCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAl9CiAKICNpZmRlZiBDWV9ERUJVR19PUEVOCi0JcHJpbnRrKCIgY3ljIHN0YXJ0dXAgZG9uZVxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBzdGFydHVwIGRvbmVcbiIpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiAKIGVycm91dDoKLQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXR2YWw7CiB9CQkJCS8qIHN0YXJ0dXAgKi8KIAogc3RhdGljIHZvaWQgc3RhcnRfeG1pdChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbykKIHsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotCWludCBjYXJkLCBjaGlwLCBjaGFubmVsLCBpbmRleDsKKwlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CiAKIAljYXJkID0gaW5mby0+Y2FyZDsKLQljaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZSk7Ci0JaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgeworCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKKwlpZiAoIUlTX0NZQ19aKCpjYXJkKSkgewogCQljaGlwID0gY2hhbm5lbCA+PiAyOwogCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7Ci0JCWJhc2VfYWRkciA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsKLQkJCQkoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOworCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKKwkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKIAotCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgY2hhbm5lbCk7CiAJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSB8IEN5VHhSZHkpOwotCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpIHwgQ3lUeFJkeSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX0NZWl9JTlRSCiAJCWludCByZXR2YWw7CiAKLQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0JCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbY2FyZF0sIGNoYW5uZWwsIENfQ01fSU5UQkFDSywKLQkJCQkwTCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZChjYXJkLCBjaGFubmVsLCBDX0NNX0lOVEJBQ0ssIDBMKTsKIAkJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCQlwcmludGsoImN5YzpzdGFydF94bWl0IHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAotCQkJCWluZm8tPmxpbmUsIHJldHZhbCk7CisJCQlwcmludGsoS0VSTl9FUlIgImN5YzpzdGFydF94bWl0IHJldHZhbCBvbiB0dHlDJWQgd2FzICIKKwkJCQkiJXhcbiIsIGluZm8tPmxpbmUsIHJldHZhbCk7CiAJCX0KLQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAjZWxzZQkJCQkvKiBDT05GSUdfQ1laX0lOVFIgKi8KIAkJLyogRG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBhdCB0aGlzIHRpbWUgKi8KICNlbmRpZgkJCQkvKiBDT05GSUdfQ1laX0lOVFIgKi8KQEAgLTIyMDEsMzAgKzIxMzUsMzAgQEAKICAqLwogc3RhdGljIHZvaWQgc2h1dGRvd24oc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8pCiB7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2FyZCwgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OwogCiAJaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKIAkJcmV0dXJuOwogCX0KIAogCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lOwotCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwljaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7CisJaWYgKCFJU19DWUNfWigqY2FyZCkpIHsKIAkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKIAkJY2hhbm5lbCAmPSAweDAzOwotCQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OwotCQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArCi0JCQkJKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKKwkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7CisJCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CiAKICNpZmRlZiBDWV9ERUJVR19PUEVOCi0JCXByaW50aygiY3ljIHNodXRkb3duIFkgY2FyZCAlZCwgY2hpcCAlZCwgY2hhbm5lbCAlZCwgIgotCQkJCSJiYXNlX2FkZHIgJWx4XG4iLAotCQkJCWNhcmQsIGNoaXAsIGNoYW5uZWwsIChsb25nKWJhc2VfYWRkcik7CisJCXByaW50ayhLRVJOX0RFQlVHICJjeWMgc2h1dGRvd24gWSBjYXJkICVkLCBjaGlwICVkLCAiCisJCQkJImNoYW5uZWwgJWQsIGJhc2VfYWRkciAlcFxuIiwKKwkJCQljYXJkLCBjaGlwLCBjaGFubmVsLCBiYXNlX2FkZHIpOwogI2VuZGlmCiAKLQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCQkvKiBDbGVhciBkZWx0YV9tc3Jfd2FpdCBxdWV1ZSB0byBhdm9pZCBtZW0gbGVha3MuICovCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwpAQCAtMjI0MCwxMCArMjE3NCwxMCBAQAogCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwgfkN5UlRTKTsKIAkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCksIH5DeURUUik7CiAjaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQlwcmludGsoImN5YyBzaHV0ZG93biBkcm9wcGluZyBEVFJcbiIpOwotCQkJcHJpbnRrKCIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKLQkJCQljeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAotCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBzaHV0ZG93biBkcm9wcGluZyBEVFJcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAorCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSksCisJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpKSk7CiAjZW5kaWYKIAkJfQogCQljeXlfaXNzdWVfY21kKGJhc2VfYWRkciwgQ3lDSEFOX0NUTCB8IEN5RElTX1JDVlIsIGluZGV4KTsKQEAgLTIyNTQsNyArMjE4OCw3IEBACiAJCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOwogCQl9CiAJCWluZm8tPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKLQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKIAkJc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwpAQCAtMjI2MiwyMyArMjE5NiwyMyBAQAogCQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOwogCQlpbnQgcmV0dmFsOwogCi0JCWJhc2VfYWRkciA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyOworCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHI7CiAjaWZkZWYgQ1lfREVCVUdfT1BFTgotCQlwcmludGsoImN5YyBzaHV0ZG93biBaIGNhcmQgJWQsIGNoYW5uZWwgJWQsIGJhc2VfYWRkciAlbHhcbiIsCi0JCQljYXJkLCBjaGFubmVsLCAobG9uZyliYXNlX2FkZHIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljIHNodXRkb3duIFogY2FyZCAlZCwgY2hhbm5lbCAlZCwgIgorCQkJImJhc2VfYWRkciAlcFxuIiwgY2FyZCwgY2hhbm5lbCwgYmFzZV9hZGRyKTsKICNlbmRpZgogCiAJCWZpcm1faWQgPSBiYXNlX2FkZHIgKyBJRF9BRERSRVNTOwotCQlpZiAoIUlTWkxPQURFRChjeV9jYXJkW2NhcmRdKSkgeworCQlpZiAoIUlTWkxPQURFRCgqY2FyZCkpIHsKIAkJCXJldHVybjsKIAkJfQogCi0JCXpmd19jdHJsID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKwotCQkJCShjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOworCQl6ZndfY3RybCA9IGNhcmQtPmJhc2VfYWRkciArCisJCQkJKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7CiAJCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7CiAJCWNoX2N0cmwgPSB6ZndfY3RybC0+Y2hfY3RybDsKIAotCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCiAJCWlmIChpbmZvLT54bWl0X2J1ZikgewogCQkJdW5zaWduZWQgY2hhciAqdGVtcDsKQEAgLTIyODksMTYgKzIyMjMsMTYgQEAKIAogCQlpZiAoIWluZm8tPnR0eSB8fCAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKSB7CiAJCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKLQkJCQkodWNsb25nKShjeV9yZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSYKKwkJCQkoX191MzIpKHJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpICYKIAkJCQkJfihDX1JTX1JUUyB8IENfUlNfRFRSKSkpOwotCQkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtpbmZvLT5jYXJkXSwgY2hhbm5lbCwKKwkJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoaW5mby0+Y2FyZCwgY2hhbm5lbCwKIAkJCQkJQ19DTV9JT0NUTE0sIDBMKTsKIAkJCWlmIChyZXR2YWwgIT0gMCkgewotCQkJCXByaW50aygiY3ljOnNodXRkb3duIHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAotCQkJCQlpbmZvLT5saW5lLCByZXR2YWwpOworCQkJCXByaW50ayhLRVJOX0VSUiJjeWM6c2h1dGRvd24gcmV0dmFsIG9uIHR0eUMlZCAiCisJCQkJCSJ3YXMgJXhcbiIsIGluZm8tPmxpbmUsIHJldHZhbCk7CiAJCQl9CiAjaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQlwcmludGsoImN5YzpzaHV0ZG93biBkcm9wcGluZyBaIERUUlxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOnNodXRkb3duIGRyb3BwaW5nIFogRFRSXG4iKTsKICNlbmRpZgogCQl9CiAKQEAgLTIzMDcsMTEgKzIyNDEsMTEgQEAKIAkJfQogCQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CiAKLQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfQogCiAjaWZkZWYgQ1lfREVCVUdfT1BFTgotCXByaW50aygiIGN5YyBzaHV0ZG93biBkb25lXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY3ljIHNodXRkb3duIGRvbmVcbiIpOwogI2VuZGlmCiB9CQkJCS8qIHNodXRkb3duICovCiAKQEAgLTIzMzIsNyArMjI2Niw3IEBACiAJaW50IHJldHZhbDsKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKIAotCWNpbmZvID0gJmN5X2NhcmRbaW5mby0+Y2FyZF07CisJY2luZm8gPSBpbmZvLT5jYXJkOwogCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2luZm8tPmZpcnN0X2xpbmU7CiAKIAkvKgpAQCAtMjM0MCw5ICsyMjc0LDggQEAKIAkgKiB1bnRpbCBpdCdzIGRvbmUsIGFuZCB0aGVuIHRyeSBhZ2Fpbi4KIAkgKi8KIAlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSkgewotCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSB7Ci0JCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5jbG9zZV93YWl0KTsKLQkJfQorCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaW5mby0+Y2xvc2Vfd2FpdCwKKwkJCQkhKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykpOwogCQlyZXR1cm4gKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPyAtRUFHQUlOOiAtRVJFU1RBUlRTWVM7CiAJfQogCkBAIC0yMzY1LDE3ICsyMjk4LDE2IEBACiAJcmV0dmFsID0gMDsKIAlhZGRfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7CiAjaWZkZWYgQ1lfREVCVUdfT1BFTgotCXByaW50aygiY3ljIGJsb2NrX3RpbF9yZWFkeSBiZWZvcmUgYmxvY2s6IHR0eUMlZCwgY291bnQgPSAlZFxuIiwKLQkJaW5mby0+bGluZSwgaW5mby0+Y291bnQpOwotCS8qKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiY3ljIGJsb2NrX3RpbF9yZWFkeSBiZWZvcmUgYmxvY2s6IHR0eUMlZCwgIgorCQkiY291bnQgPSAlZFxuIiwgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOwogI2VuZGlmCi0JQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpCiAJCWluZm8tPmNvdW50LS07Ci0JQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7CiAjaWZkZWYgQ1lfREVCVUdfQ09VTlQKLQlwcmludGsoImN5YyBibG9ja190aWxfcmVhZHk6ICglZCk6IGRlY3JlbWVudGluZyBjb3VudCB0byAlZFxuIiwKLQkJY3VycmVudC0+cGlkLCBpbmZvLT5jb3VudCk7CisJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBibG9ja190aWxfcmVhZHk6ICglZCk6IGRlY3JlbWVudGluZyBjb3VudCB0byAiCisJCSIlZFxuIiwgY3VycmVudC0+cGlkLCBpbmZvLT5jb3VudCk7CiAjZW5kaWYKIAlpbmZvLT5ibG9ja2VkX29wZW4rKzsKIApAQCAtMjM4Niw3ICsyMzE4LDcgQEAKIAkJYmFzZV9hZGRyID0gY2luZm8tPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CiAKIAkJd2hpbGUgKDEpIHsKLQkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJCWlmICgodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpKSB7CiAJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCiAJCQkJCSAgKHVfY2hhcikgY2hhbm5lbCk7CkBAIC0yMzk1LDE1ICsyMzI3LDE0IEBACiAJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwKIAkJCQkJICBDeURUUik7CiAjaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQkJcHJpbnRrKCJjeWM6YmxvY2tfdGlsX3JlYWR5IHJhaXNpbmcgRFRSXG4iKTsKLQkJCQlwcmludGsoIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAotCQkJCQljeV9yZWFkYihiYXNlX2FkZHIgKwotCQkJCQkJKEN5TVNWUjEgPDwgaW5kZXgpKSwKLQkJCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsKLQkJCQkJCShDeU1TVlIyIDw8IGluZGV4KSkpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6YmxvY2tfdGlsX3JlYWR5IHJhaXNpbmcgIgorCQkJCQkiRFRSXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCisJCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSksCisJCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOwogI2VuZGlmCiAJCQl9Ci0JCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwogCiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwKQEAgLTI0MTMsMjYgKzIzNDQsMjUgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwogCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCiAJCQkJICAodV9jaGFyKSBjaGFubmVsKTsKIAkJCWlmICghKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgJiYgKENfQ0xPQ0FMKHR0eSkgfHwKLQkJCQkJKGN5X3JlYWRiKGJhc2VfYWRkciArCisJCQkJCShyZWFkYihiYXNlX2FkZHIgKwogCQkJCQkJKEN5TVNWUjEgPDwgaW5kZXgpKSAmIEN5RENEKSkpIHsKLQkJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKIAkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKIAkJCQlicmVhazsKIAkJCX0KICNpZmRlZiBDWV9ERUJVR19PUEVOCi0JCQlwcmludGsoImN5YyBibG9ja190aWxfcmVhZHkgYmxvY2tpbmc6IHR0eUMlZCwgIgotCQkJCQkiY291bnQgPSAlZFxuIiwKLQkJCQkJaW5mby0+bGluZSwgaW5mby0+Y291bnQpOwotCQkJLyoqLworCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBibG9ja190aWxfcmVhZHkgYmxvY2tpbmc6ICIKKwkJCQkidHR5QyVkLCBjb3VudCA9ICVkXG4iLAorCQkJCWluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsKICNlbmRpZgogCQkJc2NoZWR1bGUoKTsKIAkJfQpAQCAtMjQ0NiwzMSArMjM3NiwzMCBAQAogCQliYXNlX2FkZHIgPSBjaW5mby0+YmFzZV9hZGRyOwogCQlmaXJtX2lkID0gYmFzZV9hZGRyICsgSURfQUREUkVTUzsKIAkJaWYgKCFJU1pMT0FERUQoKmNpbmZvKSkgewotCQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXpmd19jdHJsID0gYmFzZV9hZGRyICsgKGN5X3JlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYKLQkJCQkweGZmZmZmKTsKKwkJemZ3X2N0cmwgPSBiYXNlX2FkZHIgKyAocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikmIDB4ZmZmZmYpOwogCQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwogCQljaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7CiAKIAkJd2hpbGUgKDEpIHsKIAkJCWlmICgodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpKSB7CiAJCQkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wsCi0JCQkJCSAgY3lfcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0uCi0JCQkJCQkgICByc19jb250cm9sKSB8IChDX1JTX1JUUyB8Ci0JCQkJCQkJCSAgQ19SU19EVFIpKTsKLQkJCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2luZm8tPmNhcmRdLAotCQkJCQkJY2hhbm5lbCwgQ19DTV9JT0NUTE0sIDBMKTsKKwkJCQkJcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCkgfAorCQkJCQlDX1JTX1JUUyB8IENfUlNfRFRSKTsKKwkJCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKGNpbmZvLAorCQkJCQljaGFubmVsLCBDX0NNX0lPQ1RMTSwgMEwpOwogCQkJCWlmIChyZXR2YWwgIT0gMCkgewotCQkJCQlwcmludGsoImN5YzpibG9ja190aWxfcmVhZHkgcmV0dmFsIG9uICIKLQkJCQkJCSJ0dHlDJWQgd2FzICV4XG4iLAorCQkJCQlwcmludGsoS0VSTl9FUlIgImN5YzpibG9ja190aWxfcmVhZHkgIgorCQkJCQkJInJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAogCQkJCQkJaW5mby0+bGluZSwgcmV0dmFsKTsKIAkJCQl9CiAjaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQkJcHJpbnRrKCJjeWM6YmxvY2tfdGlsX3JlYWR5IHJhaXNpbmcgWiBEVFJcbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6YmxvY2tfdGlsX3JlYWR5IHJhaXNpbmcgIgorCQkJCQkiWiBEVFJcbiIpOwogI2VuZGlmCiAJCQl9CiAKQEAgLTI0ODIsNyArMjQxMSw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoIShpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpICYmIChDX0NMT0NBTCh0dHkpIHx8Ci0JCQkJCShjeV9yZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19zdGF0dXMpICYKKwkJCQkJKHJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX3N0YXR1cykgJgogCQkJCQkJQ19SU19EQ0QpKSkgewogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjQ5MSwyOCArMjQyMCwyNiBAQAogCQkJCWJyZWFrOwogCQkJfQogI2lmZGVmIENZX0RFQlVHX09QRU4KLQkJCXByaW50aygiY3ljIGJsb2NrX3RpbF9yZWFkeSBibG9ja2luZzogdHR5QyVkLCAiCi0JCQkJCSJjb3VudCA9ICVkXG4iLAotCQkJCQlpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7Ci0JCQkvKiovCisJCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljIGJsb2NrX3RpbF9yZWFkeSBibG9ja2luZzogIgorCQkJCSJ0dHlDJWQsIGNvdW50ID0gJWRcbiIsCisJCQkJaW5mby0+bGluZSwgaW5mby0+Y291bnQpOwogI2VuZGlmCiAJCQlzY2hlZHVsZSgpOwogCQl9CiAJfQotCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7CiAJaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKSB7CiAJCWluZm8tPmNvdW50Kys7CiAjaWZkZWYgQ1lfREVCVUdfQ09VTlQKLQkJcHJpbnRrKCJjeWM6YmxvY2tfdGlsX3JlYWR5ICglZCk6IGluY3JlbWVudGluZyBjb3VudCB0byAlZFxuIiwKLQkJCWN1cnJlbnQtPnBpZCwgaW5mby0+Y291bnQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmJsb2NrX3RpbF9yZWFkeSAoJWQpOiBpbmNyZW1lbnRpbmcgIgorCQkJImNvdW50IHRvICVkXG4iLCBjdXJyZW50LT5waWQsIGluZm8tPmNvdW50KTsKICNlbmRpZgogCX0KIAlpbmZvLT5ibG9ja2VkX29wZW4tLTsKICNpZmRlZiBDWV9ERUJVR19PUEVOCi0JcHJpbnRrKCJjeWM6YmxvY2tfdGlsX3JlYWR5IGFmdGVyIGJsb2NraW5nOiB0dHlDJWQsIGNvdW50ID0gJWRcbiIsCi0JCWluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsKLQkvKiovCisJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpibG9ja190aWxfcmVhZHkgYWZ0ZXIgYmxvY2tpbmc6IHR0eUMlZCwgIgorCQkiY291bnQgPSAlZFxuIiwgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOwogI2VuZGlmCiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTI1MjcsMTMgKzI0NTQsMjAgQEAKIHN0YXRpYyBpbnQgY3lfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKKwl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0dmFsLCBsaW5lOwogCiAJbGluZSA9IHR0eS0+aW5kZXg7CiAJaWYgKChsaW5lIDwgMCkgfHwgKE5SX1BPUlRTIDw9IGxpbmUpKSB7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpbmZvID0gJmN5X3BvcnRbbGluZV07CisJZm9yIChpID0gMDsgaSA8IE5SX0NBUkRTOyBpKyspCisJCWlmIChsaW5lIDwgY3lfY2FyZFtpXS5maXJzdF9saW5lICsgY3lfY2FyZFtpXS5ucG9ydHMgJiYKKwkJCQlsaW5lID49IGN5X2NhcmRbaV0uZmlyc3RfbGluZSkKKwkJCWJyZWFrOworCWlmIChpID49IE5SX0NBUkRTKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpbmZvID0gJmN5X2NhcmRbaV0ucG9ydHNbbGluZSAtIGN5X2NhcmRbaV0uZmlyc3RfbGluZV07CiAJaWYgKGluZm8tPmxpbmUgPCAwKSB7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTI1NDIsMjMgKzI0NzYsMjMgQEAKIAkgICB0cmVhdCBpdCBhcyBhYnNlbnQgZnJvbSB0aGUgc3lzdGVtLiAgVGhpcwogCSAgIHdpbGwgbWFrZSB0aGUgdXNlciBwYXkgYXR0ZW50aW9uLgogCSAqLwotCWlmIChJU19DWUNfWihjeV9jYXJkW2luZm8tPmNhcmRdKSkgewotCQlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8gPSAmY3lfY2FyZFtpbmZvLT5jYXJkXTsKKwlpZiAoSVNfQ1lDX1ooKmluZm8tPmNhcmQpKSB7CisJCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9IGluZm8tPmNhcmQ7CiAJCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQgPSBjaW5mby0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKIAogCQlpZiAoIUlTWkxPQURFRCgqY2luZm8pKSB7Ci0JCQlpZiAoKChaRV9WMSA9PSBjeV9yZWFkbCgKLQkJCQkJJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopCisJCQlpZiAoKChaRV9WMSA9PSByZWFkbCgmKChzdHJ1Y3QgUlVOVElNRV85MDYwIF9faW9tZW0gKikKIAkJCQkJIChjaW5mby0+Y3RsX2FkZHIpKS0+bWFpbF9ib3hfMCkpICYmCiAJCQkJCVpfRlBHQV9DSEVDSygqY2luZm8pKSAmJgotCQkJCQkoWkZJUk1fSExUID09IGN5X3JlYWRsKAorCQkJCQkoWkZJUk1fSExUID09IHJlYWRsKAogCQkJCQkJJmZpcm1faWQtPnNpZ25hdHVyZSkpKSB7Ci0JCQkJcHJpbnRrKCJjeWM6Q3ljbGFkZXMtWiBFcnJvcjogeW91IG5lZWQgYW4gIgotCQkJCQkiZXh0ZXJuYWwgcG93ZXIgc3VwcGx5IGZvciB0aGlzIG51bWJlciAiCi0JCQkJCSJvZiBwb3J0cy5cblxyRmlybXdhcmUgaGFsdGVkLlxyXG4iKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgImN5YzpDeWNsYWRlcy1aIEVycm9yOiB5b3UgIgorCQkJCQkibmVlZCBhbiBleHRlcm5hbCBwb3dlciBzdXBwbHkgZm9yICIKKwkJCQkJInRoaXMgbnVtYmVyIG9mIHBvcnRzLlxuRmlybXdhcmUgIgorCQkJCQkiaGFsdGVkLlxuIik7CiAJCQl9IGVsc2UgewotCQkJCXByaW50aygiY3ljOkN5Y2xhZGVzLVogZmlybXdhcmUgbm90IHlldCAiCi0JCQkJCSJsb2FkZWRcbiIpOworCQkJCXByaW50ayhLRVJOX0VSUiAiY3ljOkN5Y2xhZGVzLVogZmlybXdhcmUgbm90ICIKKwkJCQkJInlldCBsb2FkZWRcbiIpOwogCQkJfQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTI1NzIsMjQgKzI1MDYsMjMgQEAKIAkJCQlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOwogCiAJCQkJemZ3X2N0cmwgPSBjaW5mby0+YmFzZV9hZGRyICsKLQkJCQkJKGN5X3JlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYKLQkJCQkJCTB4ZmZmZmYpOworCQkJCQkocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJgorCQkJCQkgMHhmZmZmZik7CiAKIAkJCQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwogCiAJCQkJLyogRW5hYmxlIGludGVycnVwdHMgb24gdGhlIFBMWCBjaGlwICovCiAJCQkJY3lfd3JpdGV3KGNpbmZvLT5jdGxfYWRkciArIDB4NjgsCi0JCQkJCSAgY3lfcmVhZHcoY2luZm8tPmN0bF9hZGRyICsKLQkJCQkJCSAgIDB4NjgpIHwgMHgwOTAwKTsKKwkJCQkJcmVhZHcoY2luZm8tPmN0bF9hZGRyICsgMHg2OCkgfCAweDA5MDApOwogCQkJCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBGVyAqLwogCQkJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2luZm8sIDAsCiAJCQkJCQlDX0NNX0lSUV9FTkJMLCAwTCk7CiAJCQkJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCQkJCXByaW50aygiY3ljOklSUSBlbmFibGUgcmV0dmFsIHdhcyAleFxuIiwKLQkJCQkJCXJldHZhbCk7CisJCQkJCXByaW50ayhLRVJOX0VSUiAiY3ljOklSUSBlbmFibGUgcmV0dmFsICIKKwkJCQkJCSJ3YXMgJXhcbiIsIHJldHZhbCk7CiAJCQkJfQogCQkJCWNpbmZvLT5ucG9ydHMgPQotCQkJCQkoaW50KWN5X3JlYWRsKCZib2FyZF9jdHJsLT5uX2NoYW5uZWwpOworCQkJCQkoaW50KXJlYWRsKCZib2FyZF9jdHJsLT5uX2NoYW5uZWwpOwogCQkJCWNpbmZvLT5pbnRyX2VuYWJsZWQgPSAxOwogCQkJfQogCQl9CkBAIC0yNTk5LDcgKzI1MzIsNyBAQAogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogI2lmZGVmIENZX0RFQlVHX09USEVSCi0JcHJpbnRrKCJjeWM6Y3lfb3BlbiB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOwkvKiAqLworCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfb3BlbiB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOwogI2VuZGlmCiAJdHR5LT5kcml2ZXJfZGF0YSA9IGluZm87CiAJaW5mby0+dHR5ID0gdHR5OwpAQCAtMjYwNywxMiArMjU0MCwxMiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAjaWZkZWYgQ1lfREVCVUdfT1BFTgotCXByaW50aygiY3ljOmN5X29wZW4gdHR5QyVkLCBjb3VudCA9ICVkXG4iLCBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7Ci0JLyoqLworCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfb3BlbiB0dHlDJWQsIGNvdW50ID0gJWRcbiIsIGluZm8tPmxpbmUsCisJCQlpbmZvLT5jb3VudCk7CiAjZW5kaWYKIAlpbmZvLT5jb3VudCsrOwogI2lmZGVmIENZX0RFQlVHX0NPVU5UCi0JcHJpbnRrKCJjeWM6Y3lfb3BlbiAoJWQpOiBpbmNyZW1lbnRpbmcgY291bnQgdG8gJWRcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9vcGVuICglZCk6IGluY3JlbWVudGluZyBjb3VudCB0byAlZFxuIiwKIAkJY3VycmVudC0+cGlkLCBpbmZvLT5jb3VudCk7CiAjZW5kaWYKIApAQCAtMjYyMCw4ICsyNTUzLDggQEAKIAkgKiBJZiB0aGUgcG9ydCBpcyB0aGUgbWlkZGxlIG9mIGNsb3NpbmcsIGJhaWwgb3V0IG5vdwogCSAqLwogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IChpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpKSB7Ci0JCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpCi0JCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5jbG9zZV93YWl0KTsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGluZm8tPmNsb3NlX3dhaXQsCisJCQkJIShpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpKTsKIAkJcmV0dXJuIChpbmZvLT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8gLUVBR0FJTjogLUVSRVNUQVJUU1lTOwogCX0KIApAQCAtMjYzNiw4ICsyNTY5LDggQEAKIAlyZXR2YWwgPSBibG9ja190aWxfcmVhZHkodHR5LCBmaWxwLCBpbmZvKTsKIAlpZiAocmV0dmFsKSB7CiAjaWZkZWYgQ1lfREVCVUdfT1BFTgotCQlwcmludGsoImN5YzpjeV9vcGVuIHJldHVybmluZyBhZnRlciBibG9ja190aWxfcmVhZHkgd2l0aCAlZFxuIiwKLQkJCXJldHZhbCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfb3BlbiByZXR1cm5pbmcgYWZ0ZXIgYmxvY2tfdGlsX3JlYWR5ICIKKwkJCSJ3aXRoICVkXG4iLCByZXR2YWwpOwogI2VuZGlmCiAJCXJldHVybiByZXR2YWw7CiAJfQpAQCAtMjY0NSw4ICsyNTc4LDcgQEAKIAlpbmZvLT50aHJvdHRsZSA9IDA7CiAKICNpZmRlZiBDWV9ERUJVR19PUEVOCi0JcHJpbnRrKCIgY3ljOmN5X29wZW4gZG9uZVxuIik7Ci0JLyoqLworCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfb3BlbiBkb25lXG4iKTsKICNlbmRpZgogCXJldHVybiAwOwogfQkJCQkvKiBjeV9vcGVuICovCkBAIC0yNjU2LDkgKzI1ODgsMTAgQEAKICAqLwogc3RhdGljIHZvaWQgY3lfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KQogewotCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNhcmQsIGNoaXAsIGNoYW5uZWwsIGluZGV4OworCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKIAl1bnNpZ25lZCBsb25nIG9yaWdfamlmZmllczsKIAlpbnQgY2hhcl90aW1lOwogCkBAIC0yNjk3LDIwICsyNjMwLDE5IEBACiAJaWYgKCF0aW1lb3V0IHx8IHRpbWVvdXQgPiAyICogaW5mby0+dGltZW91dCkKIAkJdGltZW91dCA9IDIgKiBpbmZvLT50aW1lb3V0OwogI2lmZGVmIENZX0RFQlVHX1dBSVRfVU5USUxfU0VOVAotCXByaW50aygiSW4gY3lfd2FpdF91bnRpbF9zZW50KCVkKSBjaGVjaz0lbHUuLi4iLCB0aW1lb3V0LCBjaGFyX3RpbWUpOwotCXByaW50aygiamlmZj0lbHUuLi4iLCBqaWZmaWVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiSW4gY3lfd2FpdF91bnRpbF9zZW50KCVkKSBjaGVjaz0lZCwgamlmZj0lbHUuLi4iLAorCQl0aW1lb3V0LCBjaGFyX3RpbWUsIGppZmZpZXMpOwogI2VuZGlmCiAJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOwotCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwljaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGNhcmQtPmZpcnN0X2xpbmUpOworCWlmICghSVNfQ1lDX1ooKmNhcmQpKSB7CiAJCWNoaXAgPSBjaGFubmVsID4+IDI7CiAJCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0KLQkJICAgIGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKLQkJd2hpbGUgKGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmIEN5VHhSZHkpIHsKKwkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7CisJCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CisJCXdoaWxlIChyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJiBDeVR4UmR5KSB7CiAjaWZkZWYgQ1lfREVCVUdfV0FJVF9VTlRJTF9TRU5UCi0JCQlwcmludGsoIk5vdCBjbGVhbiAoamlmZj0lbHUpLi4uIiwgamlmZmllcyk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiTm90IGNsZWFuIChqaWZmPSVsdSkuLi4iLCBqaWZmaWVzKTsKICNlbmRpZgogCQkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MoY2hhcl90aW1lKSkpCiAJCQkJYnJlYWs7CkBAIC0yNzE4LDEzICsyNjUwLDExIEBACiAJCQkJCXRpbWVvdXQpKQogCQkJCWJyZWFrOwogCQl9Ci0JfSBlbHNlIHsKLQkJLyogTm90aGluZyB0byBkbyEgKi8KIAl9CiAJLyogUnVuIG9uZSBtb3JlIGNoYXIgY3ljbGUgKi8KIAltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzKGNoYXJfdGltZSAqIDUpKTsKICNpZmRlZiBDWV9ERUJVR19XQUlUX1VOVElMX1NFTlQKLQlwcmludGsoIkNsZWFuIChqaWZmPSVsdSkuLi5kb25lXG4iLCBqaWZmaWVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiQ2xlYW4gKGppZmY9JWx1KS4uLmRvbmVcbiIsIGppZmZpZXMpOwogI2VuZGlmCiB9CiAKQEAgLTI3MzMsMjUgKzI2NjMsMjkgQEAKICAqLwogc3RhdGljIHZvaWQgY3lfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAjaWZkZWYgQ1lfREVCVUdfT1RIRVIKLQlwcmludGsoImN5YzpjeV9jbG9zZSB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOworCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfY2xvc2UgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsKICNlbmRpZgogCiAJaWYgKCFpbmZvIHx8IHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9jbG9zZSIpKSB7CiAJCXJldHVybjsKIAl9CiAKLQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwljYXJkID0gaW5mby0+Y2FyZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkvKiBJZiB0aGUgVFRZIGlzIGJlaW5nIGh1bmcgdXAsIG5vdGhpbmcgdG8gZG8gKi8KIAlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkgewotCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KICNpZmRlZiBDWV9ERUJVR19PUEVOCi0JcHJpbnRrKCJjeWM6Y3lfY2xvc2UgdHR5QyVkLCBjb3VudCA9ICVkXG4iLCBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7CisJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9jbG9zZSB0dHlDJWQsIGNvdW50ID0gJWRcbiIsIGluZm8tPmxpbmUsCisJCWluZm8tPmNvdW50KTsKICNlbmRpZgogCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAoaW5mby0+Y291bnQgIT0gMSkpIHsKIAkJLyoKQEAgLTI3NjEsMjIgKzI2OTUsMjIgQEAKIAkJICogb25lLCB3ZSd2ZSBnb3QgcmVhbCBwcm9ibGVtcywgc2luY2UgaXQgbWVhbnMgdGhlCiAJCSAqIHNlcmlhbCBwb3J0IHdvbid0IGJlIHNodXRkb3duLgogCQkgKi8KLQkJcHJpbnRrKCJjeWM6Y3lfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudDsgdHR5LT5jb3VudCBpcyAxLCAiCi0JCQkiaW5mby0+Y291bnQgaXMgJWRcbiIsIGluZm8tPmNvdW50KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeWM6Y3lfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudDsgIgorCQkJInR0eS0+Y291bnQgaXMgMSwgaW5mby0+Y291bnQgaXMgJWRcbiIsIGluZm8tPmNvdW50KTsKIAkJaW5mby0+Y291bnQgPSAxOwogCX0KICNpZmRlZiBDWV9ERUJVR19DT1VOVAotCXByaW50aygiY3ljOmN5X2Nsb3NlIGF0ICglZCk6IGRlY3JlbWVudGluZyBjb3VudCB0byAlZFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAgImN5YzpjeV9jbG9zZSBhdCAoJWQpOiBkZWNyZW1lbnRpbmcgY291bnQgdG8gJWRcbiIsCiAJCWN1cnJlbnQtPnBpZCwgaW5mby0+Y291bnQgLSAxKTsKICNlbmRpZgogCWlmICgtLWluZm8tPmNvdW50IDwgMCkgewogI2lmZGVmIENZX0RFQlVHX0NPVU5UCi0JCXByaW50aygiY3ljOmN5Y19jbG9zZSBzZXR0aW5nIGNvdW50IHRvIDBcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5Y19jbG9zZSBzZXR0aW5nIGNvdW50IHRvIDBcbiIpOwogI2VuZGlmCiAJCWluZm8tPmNvdW50ID0gMDsKIAl9CiAJaWYgKGluZm8tPmNvdW50KSB7Ci0JCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CkBAIC0yNzg2LDgxICsyNzIwLDgwIEBACiAJICogdGhlIGxpbmUgZGlzY2lwbGluZSB0byBvbmx5IHByb2Nlc3MgWE9OL1hPRkYgY2hhcmFjdGVycy4KIAkgKi8KIAl0dHktPmNsb3NpbmcgPSAxOwotCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJaWYgKGluZm8tPmNsb3Npbmdfd2FpdCAhPSBDWV9DTE9TSU5HX1dBSVRfTk9ORSkgewogCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgaW5mby0+Y2xvc2luZ193YWl0KTsKIAl9Ci0JQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCi0JaWYgKCFJU19DWUNfWihjeV9jYXJkW2luZm8tPmNhcmRdKSkgewotCQlpbnQgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjeV9jYXJkW2luZm8tPmNhcmRdLmZpcnN0X2xpbmU7Ci0JCWludCBpbmRleCA9IGN5X2NhcmRbaW5mby0+Y2FyZF0uYnVzX2luZGV4OwotCQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkciA9IGN5X2NhcmRbaW5mby0+Y2FyZF0uYmFzZV9hZGRyICsKKwlpZiAoIUlTX0NZQ19aKCpjYXJkKSkgeworCQlpbnQgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOworCQlpbnQgaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7CisJCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyICsKIAkJCShjeV9jaGlwX29mZnNldFtjaGFubmVsID4+IDJdIDw8IGluZGV4KTsKIAkJLyogU3RvcCBhY2NlcHRpbmcgaW5wdXQgKi8KIAkJY2hhbm5lbCAmPSAweDAzOwogCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgKHVfY2hhcikgY2hhbm5lbCk7CiAJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCSAgY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYgfkN5UnhEYXRhKTsKKwkJCSAgcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYgfkN5UnhEYXRhKTsKIAkJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKIAkJCS8qIFdhaXRpbmcgZm9yIG9uLWJvYXJkIGJ1ZmZlcnMgdG8gYmUgZW1wdHkgYmVmb3JlIGNsb3NpbmcKIAkJCSAgIHRoZSBwb3J0ICovCi0JCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCQljeV93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT50aW1lb3V0KTsKLQkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQl9CiAJfSBlbHNlIHsKICNpZmRlZiBaX1dBS0UKIAkJLyogV2FpdGluZyBmb3Igb24tYm9hcmQgYnVmZmVycyB0byBiZSBlbXB0eSBiZWZvcmUgY2xvc2luZyB0aGUgcG9ydCAqLwotCQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkciA9IGN5X2NhcmRbaW5mby0+Y2FyZF0uYmFzZV9hZGRyOworCQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkcjsKIAkJc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZCA9IGJhc2VfYWRkciArIElEX0FERFJFU1M7CiAJCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybCA9Ci0JCSAgICBiYXNlX2FkZHIgKyAoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKKwkJICAgIGJhc2VfYWRkciArIChyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwogCQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7Ci0JCWludCBjaGFubmVsID0gaW5mby0+bGluZSAtIGN5X2NhcmRbaW5mby0+Y2FyZF0uZmlyc3RfbGluZTsKKwkJaW50IGNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAkJaW50IHJldHZhbDsKIAotCQlpZiAoY3lfcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0uZmxvd19zdGF0dXMpICE9IENfRlNfVFhJRExFKSB7Ci0JCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2luZm8tPmNhcmRdLCBjaGFubmVsLAotCQkJCQkJQ19DTV9JT0NUTFcsIDBMKTsKKwkJaWYgKHJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLmZsb3dfc3RhdHVzKSAhPSBDX0ZTX1RYSURMRSkgeworCQkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZChjYXJkLCBjaGFubmVsLCBDX0NNX0lPQ1RMVywgMEwpOwogCQkJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCQkJcHJpbnRrKCJjeWM6Y3lfY2xvc2UgcmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCi0JCQkJCWluZm8tPmxpbmUsIHJldHZhbCk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9jbG9zZSByZXR2YWwgb24gIgorCQkJCQkidHR5QyVkIHdhcyAleFxuIiwgaW5mby0+bGluZSwgcmV0dmFsKTsKIAkJCX0KLQkJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0JCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5zaHV0ZG93bl93YWl0KTsKLQkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmluZm8tPnNodXRkb3duX3dhaXQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQl9CiAjZW5kaWYKIAl9CiAKLQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCXNodXRkb3duKGluZm8pOwogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQogCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7CiAJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7Ci0JQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCiAJdHR5LT5jbG9zaW5nID0gMDsKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+dHR5ID0gTlVMTDsKIAlpZiAoaW5mby0+YmxvY2tlZF9vcGVuKSB7Ci0JCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQlpZiAoaW5mby0+Y2xvc2VfZGVsYXkpIHsKIAkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MKIAkJCQkJCShpbmZvLT5jbG9zZV9kZWxheSkpOwogCQl9CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKLQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAl9CiAJaW5mby0+ZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFIHwgQVNZTkNfQ0xPU0lORyk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5jbG9zZV93YWl0KTsKIAogI2lmZGVmIENZX0RFQlVHX09USEVSCi0JcHJpbnRrKCIgY3ljOmN5X2Nsb3NlIGRvbmVcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfY2xvc2UgZG9uZVxuIik7CiAjZW5kaWYKIAotCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiB9CQkJCS8qIGN5X2Nsb3NlICovCiAKIC8qIFRoaXMgcm91dGluZSBnZXRzIGNhbGxlZCB3aGVuIHR0eV93cml0ZSBoYXMgcHV0IHNvbWV0aGluZyBpbnRvCkBAIC0yODc4LDEyICsyODExLDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgY3lfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjLCByZXQgPSAwOwogCiAjaWZkZWYgQ1lfREVCVUdfSU8KLQlwcmludGsoImN5YzpjeV93cml0ZSB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOwkvKiAqLworCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfd3JpdGUgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsKICNlbmRpZgogCiAJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV93cml0ZSIpKSB7CkBAIC0yODkzLDcgKzI4MjYsNyBAQAogCWlmICghaW5mby0+eG1pdF9idWYpCiAJCXJldHVybiAwOwogCi0JQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCXdoaWxlICgxKSB7CiAJCWMgPSBtaW4oY291bnQsIG1pbigoaW50KShTRVJJQUxfWE1JVF9TSVpFIC0gaW5mby0+eG1pdF9jbnQgLSAxKSwKIAkJCQkgICAoaW50KShTRVJJQUxfWE1JVF9TSVpFIC0gaW5mby0+eG1pdF9oZWFkKSkpOwpAQCAtMjkwOSw3ICsyODQyLDcgQEAKIAkJY291bnQgLT0gYzsKIAkJcmV0ICs9IGM7CiAJfQotCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKIAlpbmZvLT5pZGxlX3N0YXRzLnhtaXRfYnl0ZXMgKz0gcmV0OwogCWluZm8tPmlkbGVfc3RhdHMueG1pdF9pZGxlID0gamlmZmllczsKQEAgLTI5MjksMTEgKzI4NjIsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgY3lfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKIHsKLQlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICNpZmRlZiBDWV9ERUJVR19JTwotCXByaW50aygiY3ljOmN5X3B1dF9jaGFyIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9wdXRfY2hhciB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOwogI2VuZGlmCiAKIAlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X3B1dF9jaGFyIikpCkBAIC0yOTQyLDkgKzI4NzUsOSBAQAogCWlmICghaW5mby0+eG1pdF9idWYpCiAJCXJldHVybjsKIAotCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAlpZiAoaW5mby0+eG1pdF9jbnQgPj0gKGludCkoU0VSSUFMX1hNSVRfU0laRSAtIDEpKSB7Ci0JCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yOTUzLDcgKzI4ODYsNyBAQAogCWluZm8tPnhtaXRfY250Kys7CiAJaW5mby0+aWRsZV9zdGF0cy54bWl0X2J5dGVzKys7CiAJaW5mby0+aWRsZV9zdGF0cy54bWl0X2lkbGUgPSBqaWZmaWVzOwotCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiB9CQkJCS8qIGN5X3B1dF9jaGFyICovCiAKIC8qCkBAIC0yOTYyLDEwICsyODk1LDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIGN5X2ZsdXNoX2NoYXJzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAogI2lmZGVmIENZX0RFQlVHX0lPCi0JcHJpbnRrKCJjeWM6Y3lfZmx1c2hfY2hhcnMgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsJLyogKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X2ZsdXNoX2NoYXJzIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CiAjZW5kaWYKIAogCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfZmx1c2hfY2hhcnMiKSkKQEAgLTI5ODYsMTEgKzI5MTksMTEgQEAKICAqLwogc3RhdGljIGludCBjeV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcmV0OwogCiAjaWZkZWYgQ1lfREVCVUdfSU8KLQlwcmludGsoImN5YzpjeV93cml0ZV9yb29tIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CS8qICovCisJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV93cml0ZV9yb29tIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CiAjZW5kaWYKIAogCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfd3JpdGVfcm9vbSIpKQpAQCAtMzAwMyw0NiArMjkzNiw0OSBAQAogCiBzdGF0aWMgaW50IGN5X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKLQlpbnQgY2FyZCwgY2hhbm5lbDsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IGNoYW5uZWw7CiAKIAlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X2NoYXJzX2luX2J1ZmZlciIpKQogCQlyZXR1cm4gMDsKIAogCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSAoaW5mby0+bGluZSkgLSAoY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lKTsKKwljaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGNhcmQtPmZpcnN0X2xpbmUpOwogCiAjaWZkZWYgWl9FWFRfQ0hBUlNfSU5fQlVGRkVSCiAJaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgewogI2VuZGlmCQkJCS8qIFpfRVhUX0NIQVJTX0lOX0JVRkZFUiAqLwogI2lmZGVmIENZX0RFQlVHX0lPCi0JCXByaW50aygiY3ljOmN5X2NoYXJzX2luX2J1ZmZlciB0dHlDJWQgJWRcbiIsIGluZm8tPmxpbmUsIGluZm8tPnhtaXRfY250KTsJLyogKi8KKwkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9jaGFyc19pbl9idWZmZXIgdHR5QyVkICVkXG4iLAorCQkJaW5mby0+bGluZSwgaW5mby0+eG1pdF9jbnQpOwogI2VuZGlmCiAJCXJldHVybiBpbmZvLT54bWl0X2NudDsKICNpZmRlZiBaX0VYVF9DSEFSU19JTl9CVUZGRVIKIAl9IGVsc2UgewotCQlzdGF0aWMgdm9sYXRpbGUgc3RydWN0IEZJUk1fSUQgKmZpcm1faWQ7Ci0JCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgWkZXX0NUUkwgKnpmd19jdHJsOwotCQlzdGF0aWMgdm9sYXRpbGUgc3RydWN0IENIX0NUUkwgKmNoX2N0cmw7Ci0JCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQlVGX0NUUkwgKmJ1Zl9jdHJsOworCQlzdGF0aWMgc3RydWN0IEZJUk1fSUQgKmZpcm1faWQ7CisJCXN0YXRpYyBzdHJ1Y3QgWkZXX0NUUkwgKnpmd19jdHJsOworCQlzdGF0aWMgc3RydWN0IENIX0NUUkwgKmNoX2N0cmw7CisJCXN0YXRpYyBzdHJ1Y3QgQlVGX0NUUkwgKmJ1Zl9jdHJsOwogCQlpbnQgY2hhcl9jb3VudDsKLQkJdm9sYXRpbGUgdWNsb25nIHR4X3B1dCwgdHhfZ2V0LCB0eF9idWZzaXplOworCQlfX3UzMiB0eF9wdXQsIHR4X2dldCwgdHhfYnVmc2l6ZTsKIAotCQlmaXJtX2lkID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOwotCQl6ZndfY3RybCA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsKLQkJCShjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOworCQlmaXJtX2lkID0gY2FyZC0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKKwkJemZ3X2N0cmwgPSBjYXJkLT5iYXNlX2FkZHIgKworCQkJKHJlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7CiAJCWNoX2N0cmwgPSAmKHpmd19jdHJsLT5jaF9jdHJsW2NoYW5uZWxdKTsKIAkJYnVmX2N0cmwgPSAmKHpmd19jdHJsLT5idWZfY3RybFtjaGFubmVsXSk7CiAKLQkJdHhfZ2V0ID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT50eF9nZXQpOwotCQl0eF9wdXQgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnR4X3B1dCk7Ci0JCXR4X2J1ZnNpemUgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnR4X2J1ZnNpemUpOworCQl0eF9nZXQgPSByZWFkbCgmYnVmX2N0cmwtPnR4X2dldCk7CisJCXR4X3B1dCA9IHJlYWRsKCZidWZfY3RybC0+dHhfcHV0KTsKKwkJdHhfYnVmc2l6ZSA9IHJlYWRsKCZidWZfY3RybC0+dHhfYnVmc2l6ZSk7CiAJCWlmICh0eF9wdXQgPj0gdHhfZ2V0KQogCQkJY2hhcl9jb3VudCA9IHR4X3B1dCAtIHR4X2dldDsKIAkJZWxzZQogCQkJY2hhcl9jb3VudCA9IHR4X3B1dCAtIHR4X2dldCArIHR4X2J1ZnNpemU7CiAjaWZkZWYgQ1lfREVCVUdfSU8KLQkJcHJpbnRrKCJjeWM6Y3lfY2hhcnNfaW5fYnVmZmVyIHR0eUMlZCAlZFxuIiwgaW5mby0+bGluZSwgaW5mby0+eG1pdF9jbnQgKyBjaGFyX2NvdW50KTsJLyogKi8KKwkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9jaGFyc19pbl9idWZmZXIgdHR5QyVkICVkXG4iLAorCQkJaW5mby0+bGluZSwgaW5mby0+eG1pdF9jbnQgKyBjaGFyX2NvdW50KTsKICNlbmRpZgogCQlyZXR1cm4gaW5mby0+eG1pdF9jbnQgKyBjaGFyX2NvdW50OwogCX0KQEAgLTMwNTUsMTAgKzI5OTEsMTAgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLXN0YXRpYyB2b2lkIGN5eV9iYXVkX2NhbGMoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHVjbG9uZyBiYXVkKQorc3RhdGljIHZvaWQgY3l5X2JhdWRfY2FsYyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgX191MzIgYmF1ZCkKIHsKIAlpbnQgY28sIGNvX3ZhbCwgYnByOwotCXVjbG9uZyBjeV9jbG9jayA9ICgoaW5mby0+Y2hpcF9yZXYgPj0gQ0QxNDAwX1JFVl9KKSA/IDYwMDAwMDAwIDoKKwlfX3UzMiBjeV9jbG9jayA9ICgoaW5mby0+Y2hpcF9yZXYgPj0gQ0QxNDAwX1JFVl9KKSA/IDYwMDAwMDAwIDoKIAkJCTI1MDAwMDAwKTsKIAogCWlmIChiYXVkID09IDApIHsKQEAgLTMwODYsOSArMzAyMiwxMCBAQAogICovCiBzdGF0aWMgdm9pZCBzZXRfbGluZV9jaGFyKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvKQogeworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNhcmQsIGNoaXAsIGNoYW5uZWwsIGluZGV4OworCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKIAl1bnNpZ25lZCBjZmxhZywgaWZsYWc7CiAJdW5zaWduZWQgc2hvcnQgY2hpcF9udW1iZXI7CiAJaW50IGJhdWQsIGJhdWRfcmF0ZSA9IDA7CkBAIC0zMTE4LDEyICszMDU1LDEyIEBACiAJfQogCiAJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOworCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAljaGlwX251bWJlciA9IGNoYW5uZWwgLyA0OwogCi0JaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgeworCWlmICghSVNfQ1lDX1ooKmNhcmQpKSB7CiAKLQkJaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKKwkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7CiAKIAkJLyogYmF1ZCByYXRlICovCiAJCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShpbmZvLT50dHkpOwpAQCAtMzI0MSwxMCArMzE3OCw5IEBACiAKIAkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKIAkJY2hhbm5lbCAmPSAweDAzOwotCQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArCi0JCQkoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOworCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwogCi0JCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCAodV9jaGFyKSBjaGFubmVsKTsKIAogCQkvKiB0eCBhbmQgcnggYmF1ZCByYXRlICovCkBAIC0zMjc2LDggKzMyMTIsNyBAQAogCQlpZiAoQ19DTE9DQUwoaW5mby0+dHR5KSkgewogCQkJLyogd2l0aG91dCBtb2RlbSBpbnRyICovCiAJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkJICBjeV9yZWFkYihiYXNlX2FkZHIgKwotCQkJCQkgICAoQ3lTUkVSIDw8IGluZGV4KSkgfCBDeU1kbUNoKTsKKwkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgfCBDeU1kbUNoKTsKIAkJCS8qIGFjdCBvbiAxLT4wIG1vZGVtIHRyYW5zaXRpb25zICovCiAJCQlpZiAoKGNmbGFnICYgQ1JUU0NUUykgJiYgaW5mby0+cmZsb3cpIHsKIAkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TUNPUjEgPDwgaW5kZXgpLApAQCAtMzI5MSw3ICszMjI2LDcgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIHdpdGhvdXQgbW9kZW0gaW50ciAqLwogCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCSAgY3lfcmVhZGIoYmFzZV9hZGRyICsKKwkJCQkgIHJlYWRiKGJhc2VfYWRkciArCiAJCQkJCSAgIChDeVNSRVIgPDwgaW5kZXgpKSB8IEN5TWRtQ2gpOwogCQkJLyogYWN0IG9uIDEtPjAgbW9kZW0gdHJhbnNpdGlvbnMgKi8KIAkJCWlmICgoY2ZsYWcgJiBDUlRTQ1RTKSAmJiBpbmZvLT5yZmxvdykgewpAQCAtMzMxNiwxMCArMzI1MSwxMCBAQAogCQkJCQkgIH5DeURUUik7CiAJCQl9CiAjaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQlwcmludGsoImN5YzpzZXRfbGluZV9jaGFyIGRyb3BwaW5nIERUUlxuIik7Ci0JCQlwcmludGsoIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAotCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSksCi0JCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpKSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOnNldF9saW5lX2NoYXIgZHJvcHBpbmcgRFRSXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKKwkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAorCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOwogI2VuZGlmCiAJCX0gZWxzZSB7CiAJCQlpZiAoaW5mby0+cnRzZHRyX2ludikgewpAQCAtMzMzMCwxNyArMzI2NSwxNyBAQAogCQkJCQkgIEN5RFRSKTsKIAkJCX0KICNpZmRlZiBDWV9ERUJVR19EVFIKLQkJCXByaW50aygiY3ljOnNldF9saW5lX2NoYXIgcmFpc2luZyBEVFJcbiIpOwotCQkJcHJpbnRrKCIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKLQkJCQljeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAotCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzZXRfbGluZV9jaGFyIHJhaXNpbmcgRFRSXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKKwkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAorCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOwogI2VuZGlmCiAJCX0KIAogCQlpZiAoaW5mby0+dHR5KSB7CiAJCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CiAJCX0KLQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKIAl9IGVsc2UgewogCQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwpAQCAtMzM0OCwxNiArMzI4MywxNiBAQAogCQlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOwogCQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOwogCQlzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqYnVmX2N0cmw7Ci0JCXVjbG9uZyBzd19mbG93OworCQlfX3UzMiBzd19mbG93OwogCQlpbnQgcmV0dmFsOwogCi0JCWZpcm1faWQgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0JCWlmICghSVNaTE9BREVEKGN5X2NhcmRbY2FyZF0pKSB7CisJCWZpcm1faWQgPSBjYXJkLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOworCQlpZiAoIUlTWkxPQURFRCgqY2FyZCkpIHsKIAkJCXJldHVybjsKIAkJfQogCi0JCXpmd19jdHJsID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKwotCQkJKGN5X3JlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7CisJCXpmd19jdHJsID0gY2FyZC0+YmFzZV9hZGRyICsKKwkJCShyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwogCQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwogCQljaF9jdHJsID0gJih6ZndfY3RybC0+Y2hfY3RybFtjaGFubmVsXSk7CiAJCWJ1Zl9jdHJsID0gJnpmd19jdHJsLT5idWZfY3RybFtjaGFubmVsXTsKQEAgLTM0MDgsMTAgKzMzNDMsMTAgQEAKIAkJfQogCQlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKIAkJCWN5X3dyaXRlbCgmY2hfY3RybC0+Y29tbV9kYXRhX2wsCi0JCQkJICBjeV9yZWFkbCgmY2hfY3RybC0+Y29tbV9kYXRhX2wpIHwgQ19ETF8yU1RPUCk7CisJCQkJICByZWFkbCgmY2hfY3RybC0+Y29tbV9kYXRhX2wpIHwgQ19ETF8yU1RPUCk7CiAJCX0gZWxzZSB7CiAJCQljeV93cml0ZWwoJmNoX2N0cmwtPmNvbW1fZGF0YV9sLAotCQkJCSAgY3lfcmVhZGwoJmNoX2N0cmwtPmNvbW1fZGF0YV9sKSB8IENfRExfMVNUT1ApOworCQkJCSAgcmVhZGwoJmNoX2N0cmwtPmNvbW1fZGF0YV9sKSB8IENfRExfMVNUT1ApOwogCQl9CiAJCWlmIChjZmxhZyAmIFBBUkVOQikgewogCQkJaWYgKGNmbGFnICYgUEFST0REKSB7CkBAIC0zNDI2LDEyICszMzYxLDEwIEBACiAJCS8qIENUUyBmbG93IGNvbnRyb2wgZmxhZyAqLwogCQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CiAJCQljeV93cml0ZWwoJmNoX2N0cmwtPmh3X2Zsb3csCi0JCQkJICBjeV9yZWFkbCgmY2hfY3RybC0+Ci0JCQkJCSAgIGh3X2Zsb3cpIHwgQ19SU19DVFMgfCBDX1JTX1JUUyk7CisJCQkJcmVhZGwoJmNoX2N0cmwtPmh3X2Zsb3cpIHwgQ19SU19DVFMgfCBDX1JTX1JUUyk7CiAJCX0gZWxzZSB7Ci0JCQljeV93cml0ZWwoJmNoX2N0cmwtPmh3X2Zsb3csCi0JCQkJICBjeV9yZWFkbCgmY2hfY3RybC0+Ci0JCQkJCSAgIGh3X2Zsb3cpICYgfihDX1JTX0NUUyB8IENfUlNfUlRTKSk7CisJCQljeV93cml0ZWwoJmNoX2N0cmwtPmh3X2Zsb3csIHJlYWRsKCZjaF9jdHJsLT5od19mbG93KSAmCisJCQkJCX4oQ19SU19DVFMgfCBDX1JTX1JUUykpOwogCQl9CiAJCS8qIEFzIHRoZSBIVyBmbG93IGNvbnRyb2wgaXMgZG9uZSBpbiBmaXJtd2FyZSwgdGhlIGRyaXZlcgogCQkgICBkb2Vzbid0IG5lZWQgdG8gY2FyZSBhYm91dCBpdCAqLwpAQCAtMzQ0NiwxMCArMzM3OSwxMCBAQAogCQl9CiAJCWN5X3dyaXRlbCgmY2hfY3RybC0+c3dfZmxvdywgc3dfZmxvdyk7CiAKLQkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtjYXJkXSwgY2hhbm5lbCwgQ19DTV9JT0NUTCwgMEwpOworCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKGNhcmQsIGNoYW5uZWwsIENfQ01fSU9DVEwsIDBMKTsKIAkJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCQlwcmludGsoImN5YzpzZXRfbGluZV9jaGFyIHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAotCQkJCWluZm8tPmxpbmUsIHJldHZhbCk7CisJCQlwcmludGsoS0VSTl9FUlIgImN5YzpzZXRfbGluZV9jaGFyIHJldHZhbCBvbiB0dHlDJWQgIgorCQkJCSJ3YXMgJXhcbiIsIGluZm8tPmxpbmUsIHJldHZhbCk7CiAJCX0KIAogCQkvKiBDRCBzZW5zaXRpdml0eSAqLwpAQCAtMzQ2MSwyMiArMzM5NCwyMiBAQAogCiAJCWlmIChiYXVkID09IDApIHsJLyogYmF1ZCByYXRlIGlzIHplcm8sIHR1cm4gb2ZmIGxpbmUgKi8KIAkJCWN5X3dyaXRlbCgmY2hfY3RybC0+cnNfY29udHJvbCwKLQkJCQkgIGN5X3JlYWRsKCZjaF9jdHJsLT5yc19jb250cm9sKSAmIH5DX1JTX0RUUik7CisJCQkJICByZWFkbCgmY2hfY3RybC0+cnNfY29udHJvbCkgJiB+Q19SU19EVFIpOwogI2lmZGVmIENZX0RFQlVHX0RUUgotCQkJcHJpbnRrKCJjeWM6c2V0X2xpbmVfY2hhciBkcm9wcGluZyBaIERUUlxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiY3ljOnNldF9saW5lX2NoYXIgZHJvcHBpbmcgWiBEVFJcbiIpOwogI2VuZGlmCiAJCX0gZWxzZSB7CiAJCQljeV93cml0ZWwoJmNoX2N0cmwtPnJzX2NvbnRyb2wsCi0JCQkJICBjeV9yZWFkbCgmY2hfY3RybC0+cnNfY29udHJvbCkgfCBDX1JTX0RUUik7CisJCQkJICByZWFkbCgmY2hfY3RybC0+cnNfY29udHJvbCkgfCBDX1JTX0RUUik7CiAjaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQlwcmludGsoImN5YzpzZXRfbGluZV9jaGFyIHJhaXNpbmcgWiBEVFJcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzZXRfbGluZV9jaGFyIHJhaXNpbmcgWiBEVFJcbiIpOwogI2VuZGlmCiAJCX0KIAotCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX0lPQ1RMTSwwTCk7CisJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2FyZCwgY2hhbm5lbCwgQ19DTV9JT0NUTE0sMEwpOwogCQlpZiAocmV0dmFsICE9IDApIHsKLQkJCXByaW50aygiY3ljOnNldF9saW5lX2NoYXIoMikgcmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCi0JCQkJaW5mby0+bGluZSwgcmV0dmFsKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiY3ljOnNldF9saW5lX2NoYXIoMikgcmV0dmFsIG9uIHR0eUMlZCAiCisJCQkJIndhcyAleFxuIiwgaW5mby0+bGluZSwgcmV0dmFsKTsKIAkJfQogCiAJCWlmIChpbmZvLT50dHkpIHsKQEAgLTM0OTAsMTQgKzM0MjMsMTUgQEAKIAkJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICogcmV0aW5mbykKIHsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7Ci0Jc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gJmN5X2NhcmRbaW5mby0+Y2FyZF07CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gaW5mby0+Y2FyZDsKIAogCWlmICghcmV0aW5mbykKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKIAl0bXAudHlwZSA9IGluZm8tPnR5cGU7CiAJdG1wLmxpbmUgPSBpbmZvLT5saW5lOwotCXRtcC5wb3J0ID0gaW5mby0+Y2FyZCAqIDB4MTAwICsgaW5mby0+bGluZSAtIGNpbmZvLT5maXJzdF9saW5lOworCXRtcC5wb3J0ID0gKGluZm8tPmNhcmQgLSBjeV9jYXJkKSAqIDB4MTAwICsgaW5mby0+bGluZSAtCisJCWNpbmZvLT5maXJzdF9saW5lOwogCXRtcC5pcnEgPSBjaW5mby0+aXJxOwogCXRtcC5mbGFncyA9IGluZm8tPmZsYWdzOwogCXRtcC5jbG9zZV9kZWxheSA9IGluZm8tPmNsb3NlX2RlbGF5OwpAQCAtMzU2NiwyNSArMzUwMCwyNSBAQAogICovCiBzdGF0aWMgaW50IGdldF9sc3JfaW5mbyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgdW5zaWduZWQgaW50IF9fdXNlciAqIHZhbHVlKQogewotCWludCBjYXJkLCBjaGlwLCBjaGFubmVsLCBpbmRleDsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKKwlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CiAJdW5zaWduZWQgY2hhciBzdGF0dXM7CiAJdW5zaWduZWQgaW50IHJlc3VsdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwogCiAJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOwotCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwljaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGNhcmQtPmZpcnN0X2xpbmUpOworCWlmICghSVNfQ1lDX1ooKmNhcmQpKSB7CiAJCWNoaXAgPSBjaGFubmVsID4+IDI7CiAJCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0KLQkJICAgIGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKKwkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7CisJCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CiAKLQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0JCXN0YXR1cyA9IGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwkJc3RhdHVzID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKIAkJCQkoQ3lUeFJkeSB8IEN5VHhNcHR5KTsKLQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCXJlc3VsdCA9IChzdGF0dXMgPyAwIDogVElPQ1NFUl9URU1UKTsKIAl9IGVsc2UgewogCQkvKiBOb3Qgc3VwcG9ydGVkIHlldCAqLwpAQCAtMzU5NSw4ICszNTI5LDkgQEAKIAogc3RhdGljIGludCBjeV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JaW50IGNhcmQsIGNoaXAsIGNoYW5uZWwsIGluZGV4OworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKKwlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CiAJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKQEAgLTM2MTEsMTkgKzM1NDYsMTggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAljYXJkID0gaW5mby0+Y2FyZDsKLQljaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZSk7Ci0JaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgeworCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKKwlpZiAoIUlTX0NZQ19aKCpjYXJkKSkgewogCQljaGlwID0gY2hhbm5lbCA+PiAyOwogCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7Ci0JCWJhc2VfYWRkciA9Ci0JCSAgICBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CisJCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OworCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwogCi0JCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCAodV9jaGFyKSBjaGFubmVsKTsKLQkJc3RhdHVzID0gY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKTsKLQkJc3RhdHVzIHw9IGN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSk7Ci0JCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCXN0YXR1cyA9IHJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSk7CisJCXN0YXR1cyB8PSByZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCkpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCQlpZiAoaW5mby0+cnRzZHRyX2ludikgewogCQkJcmVzdWx0ID0gKChzdGF0dXMgJiBDeVJUUykgPyBUSU9DTV9EVFIgOiAwKSB8CkBAIC0zNjM3LDE5ICszNTcxLDE0IEBACiAJCQkoKHN0YXR1cyAmIEN5RFNSKSA/IFRJT0NNX0RTUiA6IDApIHwKIAkJCSgoc3RhdHVzICYgQ3lDVFMpID8gVElPQ01fQ1RTIDogMCk7CiAJfSBlbHNlIHsKLQkJYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHI7Ci0KLQkJaWYgKGN5X2NhcmRbY2FyZF0ubnVtX2NoaXBzICE9IC0xKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWZpcm1faWQgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0JCWlmIChJU1pMT0FERUQoY3lfY2FyZFtjYXJkXSkpIHsKLQkJCXpmd19jdHJsID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKwotCQkJCShjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOworCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHI7CisJCWZpcm1faWQgPSBjYXJkLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOworCQlpZiAoSVNaTE9BREVEKCpjYXJkKSkgeworCQkJemZ3X2N0cmwgPSBjYXJkLT5iYXNlX2FkZHIgKworCQkJCShyZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwogCQkJYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKIAkJCWNoX2N0cmwgPSB6ZndfY3RybC0+Y2hfY3RybDsKLQkJCWxzdGF0dXMgPSBjeV9yZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19zdGF0dXMpOworCQkJbHN0YXR1cyA9IHJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX3N0YXR1cyk7CiAJCQlyZXN1bHQgPSAoKGxzdGF0dXMgJiBDX1JTX1JUUykgPyBUSU9DTV9SVFMgOiAwKSB8CiAJCQkJKChsc3RhdHVzICYgQ19SU19EVFIpID8gVElPQ01fRFRSIDogMCkgfAogCQkJCSgobHN0YXR1cyAmIENfUlNfRENEKSA/IFRJT0NNX0NBUiA6IDApIHwKQEAgLTM2NjksOCArMzU5OCw5IEBACiBjeV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewotCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKLQlpbnQgY2FyZCwgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOworCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7CkBAIC0zNjgzLDE2ICszNjEzLDE1IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOwotCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwljaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGNhcmQtPmZpcnN0X2xpbmUpOworCWlmICghSVNfQ1lDX1ooKmNhcmQpKSB7CiAJCWNoaXAgPSBjaGFubmVsID4+IDI7CiAJCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0KLQkJICAgIGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKKwkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7CisJCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CiAKIAkJaWYgKHNldCAmIFRJT0NNX1JUUykgewotCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKIAkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOwogCQkJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKQEAgLTM3MDIsMTAgKzM2MzEsMTAgQEAKIAkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLAogCQkJCQkgIEN5UlRTKTsKIAkJCX0KLQkJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJfQogCQlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpIHsKLQkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCiAJCQkJICAodV9jaGFyKSBjaGFubmVsKTsKIAkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7CkBAIC0zNzE1LDEwICszNjQ0LDEwIEBACiAJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwKIAkJCQkJICB+Q3lSVFMpOwogCQkJfQotCQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQl9CiAJCWlmIChzZXQgJiBUSU9DTV9EVFIpIHsKLQkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCiAJCQkJICAodV9jaGFyKSBjaGFubmVsKTsKIAkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7CkBAIC0zNzI5LDE1ICszNjU4LDE1IEBACiAJCQkJCSAgQ3lEVFIpOwogCQkJfQogI2lmZGVmIENZX0RFQlVHX0RUUgotCQkJcHJpbnRrKCJjeWM6c2V0X21vZGVtX2luZm8gcmFpc2luZyBEVFJcbiIpOwotCQkJcHJpbnRrKCIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKLQkJCQljeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAotCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpzZXRfbW9kZW1faW5mbyByYWlzaW5nIERUUlxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCisJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKSwKKwkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCkpKTsKICNlbmRpZgotCQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQl9CiAJCWlmIChjbGVhciAmIFRJT0NNX0RUUikgewotCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKIAkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOwogCQkJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKQEAgLTM3NDksNjggKzM2NzgsNjkgQEAKIAkJCX0KIAogI2lmZGVmIENZX0RFQlVHX0RUUgotCQkJcHJpbnRrKCJjeWM6c2V0X21vZGVtX2luZm8gZHJvcHBpbmcgRFRSXG4iKTsKLQkJCXByaW50aygiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCi0JCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKSwKLQkJCQljeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCkpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2V0X21vZGVtX2luZm8gZHJvcHBpbmcgRFRSXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKKwkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAorCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSkpOwogI2VuZGlmCi0JCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCX0KIAl9IGVsc2UgewotCQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkcjsKKwkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyOwogCi0JCWZpcm1faWQgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0JCWlmIChJU1pMT0FERUQoY3lfY2FyZFtjYXJkXSkpIHsKLQkJCXpmd19jdHJsID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKwotCQkJCShjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOworCQlmaXJtX2lkID0gY2FyZC0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKKwkJaWYgKElTWkxPQURFRCgqY2FyZCkpIHsKKwkJCXpmd19jdHJsID0gY2FyZC0+YmFzZV9hZGRyICsKKwkJCQkocmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKIAkJCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7CiAJCQljaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7CiAKIAkJCWlmIChzZXQgJiBUSU9DTV9SVFMpIHsKLQkJCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCQkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wsCi0JCQkJCSAgY3lfcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0uCi0JCQkJCQkgICByc19jb250cm9sKSB8IENfUlNfUlRTKTsKLQkJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJCQlyZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSB8CisJCQkJCUNfUlNfUlRTKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJCX0KIAkJCWlmIChjbGVhciAmIFRJT0NNX1JUUykgewotCQkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKLQkJCQkJICBjeV9yZWFkbCgmY2hfY3RybFtjaGFubmVsXS4KLQkJCQkJCSAgIHJzX2NvbnRyb2wpICYgfkNfUlNfUlRTKTsKLQkJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJCQlyZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSAmCisJCQkJCX5DX1JTX1JUUyk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCQl9CiAJCQlpZiAoc2V0ICYgVElPQ01fRFRSKSB7Ci0JCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQkJCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAotCQkJCQkgIGN5X3JlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLgotCQkJCQkJICAgcnNfY29udHJvbCkgfCBDX1JTX0RUUik7CisJCQkJCXJlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpIHwKKwkJCQkJQ19SU19EVFIpOwogI2lmZGVmIENZX0RFQlVHX0RUUgotCQkJCXByaW50aygiY3ljOnNldF9tb2RlbV9pbmZvIHJhaXNpbmcgWiBEVFJcbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2V0X21vZGVtX2luZm8gcmFpc2luZyAiCisJCQkJCSJaIERUUlxuIik7CiAjZW5kaWYKLQkJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQkJfQogCQkJaWYgKGNsZWFyICYgVElPQ01fRFRSKSB7Ci0JCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQkJCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAotCQkJCQkgIGN5X3JlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLgotCQkJCQkJICAgcnNfY29udHJvbCkgJiB+Q19SU19EVFIpOworCQkJCQlyZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSAmCisJCQkJCX5DX1JTX0RUUik7CiAjaWZkZWYgQ1lfREVCVUdfRFRSCi0JCQkJcHJpbnRrKCJjeWM6c2V0X21vZGVtX2luZm8gY2xlYXJpbmcgWiBEVFJcbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6c2V0X21vZGVtX2luZm8gY2xlYXJpbmcgIgorCQkJCQkiWiBEVFJcbiIpOwogI2VuZGlmCi0JCQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2luZm8tPmNhcmRdLAotCQkJCQljaGFubmVsLCBDX0NNX0lPQ1RMTSwgMEwpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CisJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2FyZCwgY2hhbm5lbCwgQ19DTV9JT0NUTE0sIDBMKTsKIAkJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCQlwcmludGsoImN5YzpzZXRfbW9kZW1faW5mbyByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKLQkJCQlpbmZvLT5saW5lLCByZXR2YWwpOworCQkJcHJpbnRrKEtFUk5fRVJSICJjeWM6c2V0X21vZGVtX2luZm8gcmV0dmFsIG9uIHR0eUMlZCAiCisJCQkJIndhcyAleFxuIiwgaW5mby0+bGluZSwgcmV0dmFsKTsKIAkJfQotCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIDA7CiB9CQkJCS8qIGN5X3Rpb2Ntc2V0ICovCkBAIC0zODIwLDE0ICszNzUwLDE3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGN5X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKLQlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X2JyZWFrIikpCiAJCXJldHVybjsKIAotCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtpbmZvLT5jYXJkXSkpIHsKKwljYXJkID0gaW5mby0+Y2FyZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwlpZiAoIUlTX0NZQ19aKCpjYXJkKSkgewogCQkvKiBMZXQgdGhlIHRyYW5zbWl0IElTUiB0YWtlIGNhcmUgb2YgdGhpcyAoc2luY2UgaXQKIAkJICAgcmVxdWlyZXMgc3R1ZmZpbmcgY2hhcmFjdGVycyBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtKS4KIAkJICovCkBAIC0zODM1LDE4ICszNzY4LDE4IEBACiAJCQlpZiAoIWluZm8tPmJyZWFrb24pIHsKIAkJCQlpbmZvLT5icmVha29uID0gMTsKIAkJCQlpZiAoIWluZm8tPnhtaXRfY250KSB7Ci0JCQkJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQkJCQlzdGFydF94bWl0KGluZm8pOwotCQkJCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmICghaW5mby0+YnJlYWtvZmYpIHsKIAkJCQlpbmZvLT5icmVha29mZiA9IDE7CiAJCQkJaWYgKCFpbmZvLT54bWl0X2NudCkgewotCQkJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJCQkJc3RhcnRfeG1pdChpbmZvKTsKLQkJCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTM4NTQsMjQgKzM3ODcsMjUgQEAKIAkJaW50IHJldHZhbDsKIAogCQlpZiAoYnJlYWtfc3RhdGUgPT0gLTEpIHsKLQkJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbaW5mby0+Y2FyZF0sCi0JCQkJaW5mby0+bGluZSAtIGN5X2NhcmRbaW5mby0+Y2FyZF0uZmlyc3RfbGluZSwKKwkJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2FyZCwKKwkJCQlpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZSwKIAkJCQlDX0NNX1NFVF9CUkVBSywgMEwpOwogCQkJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCQkJcHJpbnRrKCJjeWM6Y3lfYnJlYWsgKHNldCkgcmV0dmFsIG9uIHR0eUMlZCAiCi0JCQkJCSJ3YXMgJXhcbiIsIGluZm8tPmxpbmUsIHJldHZhbCk7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJjeWM6Y3lfYnJlYWsgKHNldCkgcmV0dmFsIG9uICIKKwkJCQkJInR0eUMlZCB3YXMgJXhcbiIsIGluZm8tPmxpbmUsIHJldHZhbCk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2luZm8tPmNhcmRdLAotCQkJCWluZm8tPmxpbmUgLSBjeV9jYXJkW2luZm8tPmNhcmRdLmZpcnN0X2xpbmUsCisJCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKGNhcmQsCisJCQkJaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmUsCiAJCQkJQ19DTV9DTFJfQlJFQUssIDBMKTsKIAkJCWlmIChyZXR2YWwgIT0gMCkgewotCQkJCXByaW50aygiY3ljOmN5X2JyZWFrIChjbHIpIHJldHZhbCBvbiB0dHlDJWQgIgotCQkJCQkid2FzICV4XG4iLCBpbmZvLT5saW5lLCByZXR2YWwpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfYnJlYWsgKGNscikgcmV0dmFsICIKKwkJCQkJIm9uIHR0eUMlZCB3YXMgJXhcbiIsIGluZm8tPmxpbmUsCisJCQkJCXJldHZhbCk7CiAJCQl9CiAJCX0KIAl9Ci0JQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIH0JCQkJLyogY3lfYnJlYWsgKi8KIAogc3RhdGljIGludApAQCAtMzg4OSwyOCArMzgyMywyNyBAQAogCiBzdGF0aWMgaW50IHNldF90aHJlc2hvbGQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNhcmQsIGNoYW5uZWwsIGNoaXAsIGluZGV4OworCWludCBjaGFubmVsLCBjaGlwLCBpbmRleDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmU7Ci0JaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgeworCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKKwlpZiAoIUlTX0NZQ19aKCpjYXJkKSkgewogCQljaGlwID0gY2hhbm5lbCA+PiAyOwogCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7CisJCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OwogCQliYXNlX2FkZHIgPQotCQkgICAgY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOworCQkgICAgY2FyZC0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKIAogCQlpbmZvLT5jb3IzICY9IH5DeVJFQ19GSUZPOwogCQlpbmZvLT5jb3IzIHw9IHZhbHVlICYgQ3lSRUNfRklGTzsKIAotCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q09SMyA8PCBpbmRleCksIGluZm8tPmNvcjMpOwogCQljeXlfaXNzdWVfY21kKGJhc2VfYWRkciwgQ3lDT1JfQ0hBTkdFIHwgQ3lDT1IzY2gsIGluZGV4KTsKLQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLQl9IGVsc2UgewotCQkvKiBOb3RoaW5nIHRvIGRvISAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIDA7CiB9CQkJCS8qIHNldF90aHJlc2hvbGQgKi8KQEAgLTM5MTgsMjUgKzM4NTEsMjMgQEAKIHN0YXRpYyBpbnQKIGdldF90aHJlc2hvbGQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHVuc2lnbmVkIGxvbmcgX191c2VyICogdmFsdWUpCiB7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0JaW50IGNhcmQsIGNoYW5uZWwsIGNoaXAsIGluZGV4OworCWludCBjaGFubmVsLCBjaGlwLCBpbmRleDsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAogCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lOwotCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwljaGFubmVsID0gaW5mby0+bGluZSAtIGNhcmQtPmZpcnN0X2xpbmU7CisJaWYgKCFJU19DWUNfWigqY2FyZCkpIHsKIAkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKIAkJY2hhbm5lbCAmPSAweDAzOwotCQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OwotCQliYXNlX2FkZHIgPQotCQkgICAgY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOworCQlpbmRleCA9IGNhcmQtPmJ1c19pbmRleDsKKwkJYmFzZV9hZGRyID0gY2FyZC0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKIAotCQl0bXAgPSBjeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lDT1IzIDw8IGluZGV4KSkgJiBDeVJFQ19GSUZPOworCQl0bXAgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lDT1IzIDw8IGluZGV4KSkgJiBDeVJFQ19GSUZPOwogCQlyZXR1cm4gcHV0X3VzZXIodG1wLCB2YWx1ZSk7Ci0JfSBlbHNlIHsKLQkJLyogTm90aGluZyB0byBkbyEgKi8KLQkJcmV0dXJuIDA7CiAJfQorCXJldHVybiAwOwogfQkJCQkvKiBnZXRfdGhyZXNob2xkICovCiAKIHN0YXRpYyBpbnQKQEAgLTM5NTQsNDkgKzM4ODUsNDUgQEAKIAogc3RhdGljIGludCBzZXRfdGltZW91dChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2FyZCwgY2hhbm5lbCwgY2hpcCwgaW5kZXg7CisJaW50IGNoYW5uZWwsIGNoaXAsIGluZGV4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAljYXJkID0gaW5mby0+Y2FyZDsKLQljaGFubmVsID0gaW5mby0+bGluZSAtIGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZTsKLQlpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7CisJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOworCWlmICghSVNfQ1lDX1ooKmNhcmQpKSB7CiAJCWNoaXAgPSBjaGFubmVsID4+IDI7CiAJCWNoYW5uZWwgJj0gMHgwMzsKLQkJaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKLQkJYmFzZV9hZGRyID0KLQkJICAgIGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKKwkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7CisJCWJhc2VfYWRkciA9IGNhcmQtPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CiAKLQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVJUUFIgPDwgaW5kZXgpLCB2YWx1ZSAmIDB4ZmYpOwotCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCS8qIE5vdGhpbmcgdG8gZG8hICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKIH0JCQkJLyogc2V0X3RpbWVvdXQgKi8KIAogc3RhdGljIGludCBnZXRfdGltZW91dChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgdW5zaWduZWQgbG9uZyBfX3VzZXIgKiB2YWx1ZSkKIHsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2FyZCwgY2hhbm5lbCwgY2hpcCwgaW5kZXg7CisJaW50IGNoYW5uZWwsIGNoaXAsIGluZGV4OwogCXVuc2lnbmVkIGxvbmcgdG1wOwogCiAJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmU7Ci0JaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgeworCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKKwlpZiAoIUlTX0NZQ19aKCpjYXJkKSkgewogCQljaGlwID0gY2hhbm5lbCA+PiAyOwogCQljaGFubmVsICY9IDB4MDM7Ci0JCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7Ci0JCWJhc2VfYWRkciA9Ci0JCSAgICBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CisJCWluZGV4ID0gY2FyZC0+YnVzX2luZGV4OworCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwogCi0JCXRtcCA9IGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVJUUFIgPDwgaW5kZXgpKTsKKwkJdG1wID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5UlRQUiA8PCBpbmRleCkpOwogCQlyZXR1cm4gcHV0X3VzZXIodG1wLCB2YWx1ZSk7Ci0JfSBlbHNlIHsKLQkJLyogTm90aGluZyB0byBkbyEgKi8KLQkJcmV0dXJuIDA7CiAJfQorCXJldHVybiAwOwogfQkJCQkvKiBnZXRfdGltZW91dCAqLwogCiBzdGF0aWMgaW50IHNldF9kZWZhdWx0X3RpbWVvdXQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpCkBAIC00MDIwLDcgKzM5NDcsNyBAQAogY3lfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGN5Y2xhZGVzX2ljb3VudCBjcHJldiwgY25vdzsJLyoga2VybmVsIGNvdW50ZXIgdGVtcHMgKi8KIAlzdHJ1Y3Qgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCBfX3VzZXIgKnBfY3VzZXI7CS8qIHVzZXIgc3BhY2UgKi8KIAlpbnQgcmV0X3ZhbCA9IDA7CkBAIC00MDMxLDcgKzM5NTgsOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogI2lmZGVmIENZX0RFQlVHX09USEVSCi0JcHJpbnRrKCJjeWM6Y3lfaW9jdGwgdHR5QyVkLCBjbWQgPSAleCBhcmcgPSAlbHhcbiIsIGluZm8tPmxpbmUsIGNtZCwgYXJnKTsJLyogKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X2lvY3RsIHR0eUMlZCwgY21kID0gJXggYXJnID0gJWx4XG4iLAorCQlpbmZvLT5saW5lLCBjbWQsIGFyZyk7CiAjZW5kaWYKIAogCXN3aXRjaCAoY21kKSB7CkBAIC00MDc2LDE0ICs0MDA0LDYgQEAKIAljYXNlIENZR0VUUlRTRFRSX0lOVjoKIAkJcmV0X3ZhbCA9IGluZm8tPnJ0c2R0cl9pbnY7CiAJCWJyZWFrOwotCWNhc2UgQ1lHRVRDQVJESU5GTzoKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmY3lfY2FyZFtpbmZvLT5jYXJkXSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBjeWNsYWRlc19jYXJkKSkpIHsKLQkJCXJldF92YWwgPSAtRUZBVUxUOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0X3ZhbCA9IDA7Ci0JCWJyZWFrOwogCWNhc2UgQ1lHRVRDRDE0MDBWRVI6CiAJCXJldF92YWwgPSBpbmZvLT5jaGlwX3JldjsKIAkJYnJlYWs7CkBAIC00MTE5LDM0ICs0MDM5LDIyIEBACiAJCSAqIENhbGxlciBzaG91bGQgdXNlIFRJT0NHSUNPVU5UIHRvIHNlZSB3aGljaCBvbmUgaXQgd2FzCiAJCSAqLwogCWNhc2UgVElPQ01JV0FJVDoKLQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJLyogbm90ZSB0aGUgY291bnRlcnMgb24gZW50cnkgKi8KLQkJY3ByZXYgPSBpbmZvLT5pY291bnQ7Ci0JCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0JCXdoaWxlICgxKSB7Ci0JCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7Ci0JCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCi0JCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQkJfQotCi0JCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQkJCWNub3cgPSBpbmZvLT5pY291bnQ7CS8qIGF0b21pYyBjb3B5ICovCi0JCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotCi0JCQlpZiAoY25vdy5ybmcgPT0gY3ByZXYucm5nICYmIGNub3cuZHNyID09IGNwcmV2LmRzciAmJgotCQkJICAgIGNub3cuZGNkID09IGNwcmV2LmRjZCAmJiBjbm93LmN0cyA9PSBjcHJldi5jdHMpIHsKLQkJCQlyZXR1cm4gLUVJTzsJLyogbm8gY2hhbmdlID0+IGVycm9yICovCi0JCQl9Ci0JCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAotCQkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHwKLQkJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAmJiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkgfHwKLQkJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNub3cuY3RzICE9IGNwcmV2LmN0cykpKSB7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9CisJCWNub3cgPSBpbmZvLT5pY291bnQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOworCQlyZXRfdmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGluZm8tPmRlbHRhX21zcl93YWl0LCAoewogCQkJY3ByZXYgPSBjbm93OwotCQl9Ci0JCS8qIE5PVFJFQUNIRUQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwkJCWNub3cgPSBpbmZvLT5pY291bnQ7CS8qIGF0b21pYyBjb3B5ICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKworCQkJKChhcmcgJiBUSU9DTV9STkcpICYmIChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAorCQkJKChhcmcgJiBUSU9DTV9EU1IpICYmIChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fAorCQkJKChhcmcgJiBUSU9DTV9DRCkgICYmIChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSB8fAorCQkJKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKTsKKwkJfSkpOworCQlicmVhazsKIAogCQkvKgogCQkgKiBHZXQgY291bnRlciBvZiBpbnB1dCBzZXJpYWwgbGluZSBpbnRlcnJ1cHRzIChEQ0QsUkksRFNSLENUUykKQEAgLTQxNTUsOSArNDA2Myw5IEBACiAJCSAqICAgICBSSSB3aGVyZSBvbmx5IDAtPjEgaXMgY291bnRlZC4KIAkJICovCiAJY2FzZSBUSU9DR0lDT1VOVDoKLQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJY25vdyA9IGluZm8tPmljb3VudDsKLQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCXBfY3VzZXIgPSBhcmdwOwogCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5jdHMsICZwX2N1c2VyLT5jdHMpOwogCQlpZiAocmV0X3ZhbCkKQEAgLTQxOTksNyArNDEwNyw3IEBACiAJfQogCiAjaWZkZWYgQ1lfREVCVUdfT1RIRVIKLQlwcmludGsoIiBjeWM6Y3lfaW9jdGwgZG9uZVxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9pb2N0bCBkb25lXG4iKTsKICNlbmRpZgogCiAJcmV0dXJuIHJldF92YWw7CkBAIC00MjEzLDEwICs0MTIxLDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIGN5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAogI2lmZGVmIENZX0RFQlVHX09USEVSCi0JcHJpbnRrKCJjeWM6Y3lfc2V0X3Rlcm1pb3MgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY3ljOmN5X3NldF90ZXJtaW9zIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CiAjZW5kaWYKIAogCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiYKQEAgLTQyNDgsOCArNDE1Niw5IEBACiAqLwogc3RhdGljIHZvaWQgY3lfc2VuZF94Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyIGNoKQogewotCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKLQlpbnQgY2FyZCwgY2hhbm5lbDsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CisJaW50IGNoYW5uZWw7CiAKIAlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X3NlbmRfeGNoYXIiKSkKIAkJcmV0dXJuOwpAQCAtNDI2MCwxNSArNDE2OSwxMyBAQAogCQljeV9zdGFydCh0dHkpOwogCiAJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmU7CisJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwogCi0JaWYgKElTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7CisJaWYgKElTX0NZQ19aKCpjYXJkKSkgewogCQlpZiAoY2ggPT0gU1RPUF9DSEFSKHR0eSkpCi0JCQljeXpfaXNzdWVfY21kKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX1NFTkRYT0ZGLAotCQkJCQkwTCk7CisJCQljeXpfaXNzdWVfY21kKGNhcmQsIGNoYW5uZWwsIENfQ01fU0VORFhPRkYsIDBMKTsKIAkJZWxzZSBpZiAoY2ggPT0gU1RBUlRfQ0hBUih0dHkpKQotCQkJY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtjYXJkXSwgY2hhbm5lbCwgQ19DTV9TRU5EWE9OLAotCQkJCQkwTCk7CisJCQljeXpfaXNzdWVfY21kKGNhcmQsIGNoYW5uZWwsIENfQ01fU0VORFhPTiwgMEwpOwogCX0KIH0KIApAQCAtNDI3OCwxNSArNDE4NSwxNiBAQAogICovCiBzdGF0aWMgdm9pZCBjeV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQlpbnQgY2FyZCwgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OwogCiAjaWZkZWYgQ1lfREVCVUdfVEhST1RUTEUKIAljaGFyIGJ1Zls2NF07CiAKLQlwcmludGsoImN5Yzp0aHJvdHRsZSAlczogJWQuLi4udHR5QyVkXG4iLCB0dHlfbmFtZSh0dHksIGJ1ZiksCisJcHJpbnRrKEtFUk5fREVCVUcgImN5Yzp0aHJvdHRsZSAlczogJWxkLi4udHR5QyVkXG4iLCB0dHlfbmFtZSh0dHksIGJ1ZiksCiAJCQl0dHktPmxkaXNjLmNoYXJzX2luX2J1ZmZlcih0dHkpLCBpbmZvLT5saW5lKTsKICNlbmRpZgogCkBAIC00Mjk3LDIyICs0MjA1LDIyIEBACiAJY2FyZCA9IGluZm8tPmNhcmQ7CiAKIAlpZiAoSV9JWE9GRih0dHkpKSB7Ci0JCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpCisJCWlmICghSVNfQ1lDX1ooKmNhcmQpKQogCQkJY3lfc2VuZF94Y2hhcih0dHksIFNUT1BfQ0hBUih0dHkpKTsKIAkJZWxzZQogCQkJaW5mby0+dGhyb3R0bGUgPSAxOwogCX0KIAogCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7Ci0JCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lOwotCQlpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7CisJCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKKwkJaWYgKCFJU19DWUNfWigqY2FyZCkpIHsKIAkJCWNoaXAgPSBjaGFubmVsID4+IDI7CiAJCQljaGFubmVsICY9IDB4MDM7Ci0JCQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OwotCQkJYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKworCQkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7CisJCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKwogCQkJCShjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CiAKLQkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCiAJCQkJICAodV9jaGFyKSBjaGFubmVsKTsKIAkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7CkBAIC00MzIyLDcgKzQyMzAsNyBAQAogCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCiAJCQkJCSAgfkN5UlRTKTsKIAkJCX0KLQkJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJfSBlbHNlIHsKIAkJCWluZm8tPnRocm90dGxlID0gMTsKIAkJfQpAQCAtNDMzNiwxNiArNDI0NCwxNyBAQAogICovCiBzdGF0aWMgdm9pZCBjeV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotCWludCBjYXJkLCBjaGlwLCBjaGFubmVsLCBpbmRleDsKKwlpbnQgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CiAKICNpZmRlZiBDWV9ERUJVR19USFJPVFRMRQogCWNoYXIgYnVmWzY0XTsKIAotCXByaW50aygiY3ljOnVudGhyb3R0bGUgJXM6ICVkLi4uLnR0eUMlZFxuIiwgdHR5X25hbWUodHR5LCBidWYpLAotCQl0dHktPmxkaXNjLmNoYXJzX2luX2J1ZmZlcih0dHkpLCBpbmZvLT5saW5lKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY3ljOnVudGhyb3R0bGUgJXM6ICVsZC4uLnR0eUMlZFxuIiwKKwkJdHR5X25hbWUodHR5LCBidWYpLCB0dHktPmxkaXNjLmNoYXJzX2luX2J1ZmZlcih0dHkpLGluZm8tPmxpbmUpOwogI2VuZGlmCiAKIAlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X3VudGhyb3R0bGUiKSkgewpAQCAtNDM2MSwxNSArNDI3MCwxNSBAQAogCiAJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKIAkJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lOwotCQlpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7CisJCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKKwkJaWYgKCFJU19DWUNfWigqY2FyZCkpIHsKIAkJCWNoaXAgPSBjaGFubmVsID4+IDI7CiAJCQljaGFubmVsICY9IDB4MDM7Ci0JCQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OwotCQkJYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKworCQkJaW5kZXggPSBjYXJkLT5idXNfaW5kZXg7CisJCQliYXNlX2FkZHIgPSBjYXJkLT5iYXNlX2FkZHIgKwogCQkJCShjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CiAKLQkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCiAJCQkJICAodV9jaGFyKSBjaGFubmVsKTsKIAkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7CkBAIC00Mzc5LDcgKzQyODgsNyBAQAogCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCiAJCQkJCSAgQ3lSVFMpOwogCQkJfQotCQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCQl9IGVsc2UgewogCQkJaW5mby0+dGhyb3R0bGUgPSAwOwogCQl9CkBAIC00MzkyLDEwMiArNDMwMSw5NiBAQAogc3RhdGljIHZvaWQgY3lfc3RvcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbzsKLQlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwogCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAjaWZkZWYgQ1lfREVCVUdfT1RIRVIKLQlwcmludGsoImN5YzpjeV9zdG9wIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CS8qICovCisJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9zdG9wIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CiAjZW5kaWYKIAogCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfc3RvcCIpKQogCQlyZXR1cm47CiAKLQljaW5mbyA9ICZjeV9jYXJkW2luZm8tPmNhcmRdOworCWNpbmZvID0gaW5mby0+Y2FyZDsKIAljaGFubmVsID0gaW5mby0+bGluZSAtIGNpbmZvLT5maXJzdF9saW5lOwogCWlmICghSVNfQ1lDX1ooKmNpbmZvKSkgewogCQlpbmRleCA9IGNpbmZvLT5idXNfaW5kZXg7CiAJCWNoaXAgPSBjaGFubmVsID4+IDI7CiAJCWNoYW5uZWwgJj0gMHgwMzsKLQkJYmFzZV9hZGRyID0gY3lfY2FyZFtpbmZvLT5jYXJkXS5iYXNlX2FkZHIgKwotCQkJKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKKwkJYmFzZV9hZGRyID0gY2luZm8tPmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CiAKLQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjaW5mby0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLAogCQkJKHVfY2hhcikoY2hhbm5lbCAmIDB4MDAwMykpOyAvKiBpbmRleCBjaGFubmVsICovCiAJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCSAgY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYgfkN5VHhSZHkpOwotCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCS8qIE5vdGhpbmcgdG8gZG8hICovCisJCQkgIHJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmIH5DeVR4UmR5KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwogCX0KIH0JCQkJLyogY3lfc3RvcCAqLwogCiBzdGF0aWMgdm9pZCBjeV9zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbzsKLQlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwogCWludCBjaGlwLCBjaGFubmVsLCBpbmRleDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAjaWZkZWYgQ1lfREVCVUdfT1RIRVIKLQlwcmludGsoImN5YzpjeV9zdGFydCB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOwkvKiAqLworCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfc3RhcnQgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsKICNlbmRpZgogCiAJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9zdGFydCIpKQogCQlyZXR1cm47CiAKLQljaW5mbyA9ICZjeV9jYXJkW2luZm8tPmNhcmRdOworCWNpbmZvID0gaW5mby0+Y2FyZDsKIAljaGFubmVsID0gaW5mby0+bGluZSAtIGNpbmZvLT5maXJzdF9saW5lOwogCWluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKIAlpZiAoIUlTX0NZQ19aKCpjaW5mbykpIHsKIAkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKIAkJY2hhbm5lbCAmPSAweDAzOwotCQliYXNlX2FkZHIgPSBjeV9jYXJkW2luZm8tPmNhcmRdLmJhc2VfYWRkciArCi0JCQkoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOworCQliYXNlX2FkZHIgPSBjaW5mby0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKIAotCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNpbmZvLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIChjaGFubmVsICYgMHgwMDAzKSk7CS8qIGluZGV4IGNoYW5uZWwgKi8KIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJICBjeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgfCBDeVR4UmR5KTsKLQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLQl9IGVsc2UgewotCQkvKiBOb3RoaW5nIHRvIGRvISAqLworCQkJICByZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgfCBDeVR4UmR5KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2luZm8tPmNhcmRfbG9jaywgZmxhZ3MpOwogCX0KIH0JCQkJLyogY3lfc3RhcnQgKi8KIAogc3RhdGljIHZvaWQgY3lfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOwotCWludCBjYXJkLCBjaGFubmVsLCByZXR2YWw7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjYXJkOworCWludCBjaGFubmVsLCByZXR2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogI2lmZGVmIENZX0RFQlVHX0lPCi0JcHJpbnRrKCJjeWM6Y3lfZmx1c2hfYnVmZmVyIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CS8qICovCisJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9mbHVzaF9idWZmZXIgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsKICNlbmRpZgogCiAJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9mbHVzaF9idWZmZXIiKSkKIAkJcmV0dXJuOwogCiAJY2FyZCA9IGluZm8tPmNhcmQ7Ci0JY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOworCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAotCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAlpbmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7Ci0JQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAotCWlmIChJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgewkvKiBJZiBpdCBpcyBhIFogY2FyZCwgZmx1c2ggdGhlIG9uLWJvYXJkCisJaWYgKElTX0NZQ19aKCpjYXJkKSkgewkvKiBJZiBpdCBpcyBhIFogY2FyZCwgZmx1c2ggdGhlIG9uLWJvYXJkCiAJCQkJCSAgIGJ1ZmZlcnMgYXMgd2VsbCAqLwotCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQkJcmV0dmFsID0KLQkJICAgIGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbY2FyZF0sIGNoYW5uZWwsIENfQ01fRkxVU0hfVFgsIDBMKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOworCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKGNhcmQsIGNoYW5uZWwsIENfQ01fRkxVU0hfVFgsIDBMKTsKIAkJaWYgKHJldHZhbCAhPSAwKSB7Ci0JCQlwcmludGsoImN5YzogZmx1c2hfYnVmZmVyIHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAotCQkJCWluZm8tPmxpbmUsIHJldHZhbCk7CisJCQlwcmludGsoS0VSTl9FUlIgImN5YzogZmx1c2hfYnVmZmVyIHJldHZhbCBvbiB0dHlDJWQgIgorCQkJCSJ3YXMgJXhcbiIsIGluZm8tPmxpbmUsIHJldHZhbCk7CiAJCX0KLQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfQogCXR0eV93YWtldXAodHR5KTsKIH0JCQkJLyogY3lfZmx1c2hfYnVmZmVyICovCkBAIC00NDk3LDEwICs0NDAwLDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIGN5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKICNpZmRlZiBDWV9ERUJVR19PVEhFUgotCXByaW50aygiY3ljOmN5X2hhbmd1cCB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOwkvKiAqLworCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfaGFuZ3VwIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CiAjZW5kaWYKIAogCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfaGFuZ3VwIikpCkBAIC00NTExLDcgKzQ0MTQsOCBAQAogCWluZm8tPmV2ZW50ID0gMDsKIAlpbmZvLT5jb3VudCA9IDA7CiAjaWZkZWYgQ1lfREVCVUdfQ09VTlQKLQlwcmludGsoImN5YzpjeV9oYW5ndXAgKCVkKTogc2V0dGluZyBjb3VudCB0byAwXG4iLCBjdXJyZW50LT5waWQpOworCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfaGFuZ3VwICglZCk6IHNldHRpbmcgY291bnQgdG8gMFxuIiwKKwkJY3VycmVudC0+cGlkKTsKICNlbmRpZgogCWluZm8tPnR0eSA9IE5VTEw7CiAJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CkBAIC00NTI2LDEwICs0NDMwLDEwNyBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorc3RhdGljIGludCBfX2RldmluaXQgY3lfaW5pdF9jYXJkKHN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbykKK3sKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKKwl1MzIgbWFpbGJveDsKKwl1bnNpZ25lZCBpbnQgbnBvcnRzOworCXVuc2lnbmVkIHNob3J0IGNoaXBfbnVtYmVyOworCWludCBpbmRleCwgcG9ydDsKKworCXNwaW5fbG9ja19pbml0KCZjaW5mby0+Y2FyZF9sb2NrKTsKKworCWlmIChJU19DWUNfWigqY2luZm8pKSB7CS8qIEN5Y2xhZGVzLVogKi8KKwkJbWFpbGJveCA9IHJlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKQorCQkJCSAgICAgY2luZm8tPmN0bF9hZGRyKS0+bWFpbF9ib3hfMCk7CisJCW5wb3J0cyA9IChtYWlsYm94ID09IFpFX1YxKSA/IFpFX1YxX05QT1JUUyA6IDg7CisJCWNpbmZvLT5pbnRyX2VuYWJsZWQgPSAwOworCQljaW5mby0+bnBvcnRzID0gMDsJLyogV2lsbCBiZSBjb3JyZWN0bHkgc2V0IGxhdGVyLCBhZnRlcgorCQkJCQkgICBaIEZXIGlzIGxvYWRlZCAqLworCX0gZWxzZSB7CisJCWluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKKwkJbnBvcnRzID0gY2luZm8tPm5wb3J0cyA9IEN5UE9SVFNfUEVSX0NISVAgKiBjaW5mby0+bnVtX2NoaXBzOworCX0KKworCWNpbmZvLT5wb3J0cyA9IGt6YWxsb2Moc2l6ZW9mKCpjaW5mby0+cG9ydHMpICogbnBvcnRzLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2luZm8tPnBvcnRzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDeWNsYWRlczogY2Fubm90IGFsbG9jYXRlIHBvcnRzXG4iKTsKKwkJY2luZm8tPm5wb3J0cyA9IDA7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAocG9ydCA9IGNpbmZvLT5maXJzdF9saW5lOyBwb3J0IDwgY2luZm8tPmZpcnN0X2xpbmUgKyBucG9ydHM7CisJCQlwb3J0KyspIHsKKwkJaW5mbyA9ICZjaW5mby0+cG9ydHNbcG9ydCAtIGNpbmZvLT5maXJzdF9saW5lXTsKKwkJaW5mby0+bWFnaWMgPSBDWUNMQURFU19NQUdJQzsKKwkJaW5mby0+Y2FyZCA9IGNpbmZvOworCQlpbmZvLT5saW5lID0gcG9ydDsKKwkJaW5mby0+ZmxhZ3MgPSBTVERfQ09NX0ZMQUdTOworCQlpbmZvLT5jbG9zaW5nX3dhaXQgPSBDTE9TSU5HX1dBSVRfREVMQVk7CisJCWluZm8tPmNsb3NlX2RlbGF5ID0gNSAqIEhaIC8gMTA7CisKKwkJSU5JVF9XT1JLKCZpbmZvLT50cXVldWUsIGRvX3NvZnRpbnQpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5vcGVuX3dhaXQpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5jbG9zZV93YWl0KTsKKwkJaW5pdF9jb21wbGV0aW9uKCZpbmZvLT5zaHV0ZG93bl93YWl0KTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCisJCWlmIChJU19DWUNfWigqY2luZm8pKSB7CisJCQlpbmZvLT50eXBlID0gUE9SVF9TVEFSVEVDSDsKKwkJCWlmIChtYWlsYm94ID09IFpPX1YxKQorCQkJCWluZm8tPnhtaXRfZmlmb19zaXplID0gQ1laX0ZJRk9fU0laRTsKKwkJCWVsc2UKKwkJCQlpbmZvLT54bWl0X2ZpZm9fc2l6ZSA9IDQgKiBDWVpfRklGT19TSVpFOworI2lmZGVmIENPTkZJR19DWVpfSU5UUgorCQkJc2V0dXBfdGltZXIoJmN5el9yeF9mdWxsX3RpbWVyW3BvcnRdLAorCQkJCWN5el9yeF9yZXN0YXJ0LCAodW5zaWduZWQgbG9uZylpbmZvKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJaW5mby0+dHlwZSA9IFBPUlRfQ0lSUlVTOworCQkJaW5mby0+eG1pdF9maWZvX3NpemUgPSBDeU1BWF9DSEFSX0ZJRk87CisJCQlpbmZvLT5jb3IxID0gQ3lQQVJJVFlfTk9ORSB8IEN5XzFfU1RPUCB8IEN5XzhfQklUUzsKKwkJCWluZm8tPmNvcjIgPSBDeUVUQzsKKwkJCWluZm8tPmNvcjMgPSAweDA4OwkvKiBfdmVyeV8gc21hbGwgcmN2IHRocmVzaG9sZCAqLworCisJCQljaGlwX251bWJlciA9IChwb3J0IC0gY2luZm8tPmZpcnN0X2xpbmUpIC8gNDsKKwkJCWlmICgoaW5mby0+Y2hpcF9yZXYgPSByZWFkYihjaW5mby0+YmFzZV9hZGRyICsKKwkJCQkgICAgICAoY3lfY2hpcF9vZmZzZXRbY2hpcF9udW1iZXJdIDw8CisJCQkJICAgICAgIGluZGV4KSArIChDeUdGUkNSIDw8IGluZGV4KSkpID49CisJCQkgICAgQ0QxNDAwX1JFVl9KKSB7CisJCQkJLyogSXQgaXMgYSBDRDE0MDAgcmV2LiBKIG9yIGxhdGVyICovCisJCQkJaW5mby0+dGJwciA9IGJhdWRfYnByXzYwWzEzXTsJLyogVHggQlBSICovCisJCQkJaW5mby0+dGNvID0gYmF1ZF9jb182MFsxM107CS8qIFR4IENPICovCisJCQkJaW5mby0+cmJwciA9IGJhdWRfYnByXzYwWzEzXTsJLyogUnggQlBSICovCisJCQkJaW5mby0+cmNvID0gYmF1ZF9jb182MFsxM107CS8qIFJ4IENPICovCisJCQkJaW5mby0+cnRzZHRyX2ludiA9IDE7CisJCQl9IGVsc2UgeworCQkJCWluZm8tPnRicHIgPSBiYXVkX2Jwcl8yNVsxM107CS8qIFR4IEJQUiAqLworCQkJCWluZm8tPnRjbyA9IGJhdWRfY29fMjVbMTNdOwkvKiBUeCBDTyAqLworCQkJCWluZm8tPnJicHIgPSBiYXVkX2Jwcl8yNVsxM107CS8qIFJ4IEJQUiAqLworCQkJCWluZm8tPnJjbyA9IGJhdWRfY29fMjVbMTNdOwkvKiBSeCBDTyAqLworCQkJCWluZm8tPnJ0c2R0cl9pbnYgPSAwOworCQkJfQorCQkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayA9IEN5VElNRU9VVCB8IEN5U1BFQ0hBUiB8CisJCQkJQ3lCUkVBSyB8IEN5UEFSSVRZIHwgQ3lGUkFNRSB8IEN5T1ZFUlJVTjsKKwkJfQorCisJfQorCisjaWZuZGVmIENPTkZJR19DWVpfSU5UUgorCWlmIChJU19DWUNfWigqY2luZm8pICYmICF0aW1lcl9wZW5kaW5nKCZjeXpfdGltZXJsaXN0KSkgeworCQltb2RfdGltZXIoJmN5el90aW1lcmxpc3QsIGppZmZpZXMgKyAxKTsKKyNpZmRlZiBDWV9QQ0lfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkN5Y2xhZGVzLVogcG9sbGluZyBpbml0aWFsaXplZFxuIik7CisjZW5kaWYKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKwogLyogaW5pdGlhbGl6ZSBjaGlwcyBvbiBDeWNsb20tWSBjYXJkIC0tIHJldHVybiBudW1iZXIgb2YgdmFsaWQKICAgIGNoaXBzICh3aGljaCBpcyBudW1iZXIgb2YgcG9ydHMvNCkgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBfX2luaXQKLWN5eV9pbml0X2NhcmQodm9pZCBfX2lvbWVtICogdHJ1ZV9iYXNlX2FkZHIsIGludCBpbmRleCkKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBfX2RldmluaXQgY3l5X2luaXRfY2FyZCh2b2lkIF9faW9tZW0gKnRydWVfYmFzZV9hZGRyLAorCQlpbnQgaW5kZXgpCiB7CiAJdW5zaWduZWQgaW50IGNoaXBfbnVtYmVyOwogCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwpAQCAtNDU0NCw3ICs0NTQ1LDcgQEAKIAkJYmFzZV9hZGRyID0KIAkJICAgIHRydWVfYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBfbnVtYmVyXSA8PCBpbmRleCk7CiAJCW1kZWxheSgxKTsKLQkJaWYgKGN5X3JlYWRiKGJhc2VfYWRkciArIChDeUNDUiA8PCBpbmRleCkpICE9IDB4MDApIHsKKwkJaWYgKHJlYWRiKGJhc2VfYWRkciArIChDeUNDUiA8PCBpbmRleCkpICE9IDB4MDApIHsKIAkJCS8qKioqKioqKioqKioqCiAJCQlwcmludGsoIiBjaGlwICMlZCBhdCAlIzZseCBpcyBuZXZlciBpZGxlIChDQ1IgIT0gMClcbiIsCiAJCQljaGlwX251bWJlciwgKHVuc2lnbmVkIGxvbmcpYmFzZV9hZGRyKTsKQEAgLTQ1NjEsNyArNDU2Miw3IEBACiAJCSAgIGNoaXAgNCBHRlJDUiByZWdpc3RlciBhcHBlYXJzIGF0IGNoaXAgMCwgdGhlcmUgaXMgbm8gY2hpcCA0CiAJCSAgIGFuZCB0aGlzIG11c3QgYmUgYSBDeWNsb20tMTZZLCBub3QgYSBDeWNsb20tMzJZZS4KIAkJICovCi0JCWlmIChjaGlwX251bWJlciA9PSA0ICYmIGN5X3JlYWRiKHRydWVfYmFzZV9hZGRyICsKKwkJaWYgKGNoaXBfbnVtYmVyID09IDQgJiYgcmVhZGIodHJ1ZV9iYXNlX2FkZHIgKwogCQkJCShjeV9jaGlwX29mZnNldFswXSA8PCBpbmRleCkgKwogCQkJCShDeUdGUkNSIDw8IGluZGV4KSkgPT0gMCkgewogCQkJcmV0dXJuIGNoaXBfbnVtYmVyOwpAQCAtNDU3MCw3ICs0NTcxLDcgQEAKIAkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNDUiA8PCBpbmRleCksIEN5Q0hJUF9SRVNFVCk7CiAJCW1kZWxheSgxKTsKIAotCQlpZiAoY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5R0ZSQ1IgPDwgaW5kZXgpKSA9PSAweDAwKSB7CisJCWlmIChyZWFkYihiYXNlX2FkZHIgKyAoQ3lHRlJDUiA8PCBpbmRleCkpID09IDB4MDApIHsKIAkJCS8qCiAJCQkgICBwcmludGsoIiBjaGlwICMlZCBhdCAlIzZseCBpcyBub3QgcmVzcG9uZGluZyAiLAogCQkJICAgY2hpcF9udW1iZXIsICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkcik7CkBAIC00NTc4LDcgKzQ1NzksNyBAQAogCQkJICovCiAJCQlyZXR1cm4gY2hpcF9udW1iZXI7CiAJCX0KLQkJaWYgKCgweGYwICYgKGN5X3JlYWRiKGJhc2VfYWRkciArIChDeUdGUkNSIDw8IGluZGV4KSkpKSAhPQorCQlpZiAoKDB4ZjAgJiAocmVhZGIoYmFzZV9hZGRyICsgKEN5R0ZSQ1IgPDwgaW5kZXgpKSkpICE9CiAJCQkJMHg0MCkgewogCQkJLyoKIAkJCXByaW50aygiIGNoaXAgIyVkIGF0ICUjNmx4IGlzIG5vdCB2YWxpZCAoR0ZSQ1IgPT0gIgpAQCAtNDU4OSw3ICs0NTkwLDcgQEAKIAkJCXJldHVybiBjaGlwX251bWJlcjsKIAkJfQogCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5R0NSIDw8IGluZGV4KSwgQ3lDSDBfU0VSSUFMKTsKLQkJaWYgKGN5X3JlYWRiKGJhc2VfYWRkciArIChDeUdGUkNSIDw8IGluZGV4KSkgPj0gQ0QxNDAwX1JFVl9KKSB7CisJCWlmIChyZWFkYihiYXNlX2FkZHIgKyAoQ3lHRlJDUiA8PCBpbmRleCkpID49IENEMTQwMF9SRVZfSikgewogCQkJLyogSXQgaXMgYSBDRDE0MDAgcmV2LiBKIG9yIGxhdGVyICovCiAJCQkvKiBJbXBvc3NpYmxlIHRvIHJlYWNoIDVtcyB3aXRoIHRoaXMgY2hpcC4KIAkJCSAgIENoYW5nZWQgdG8gMm1zIGluc3RlYWQgKGYgPSA1MDAgSHopLiAqLwpAQCAtNDYwMiw3ICs0NjAzLDcgQEAKIAkJLyoKIAkJICAgcHJpbnRrKCIgY2hpcCAjJWQgYXQgJSM2bHggaXMgcmV2IDB4JTJ4XG4iLAogCQkgICBjaGlwX251bWJlciwgKHVuc2lnbmVkIGxvbmcpYmFzZV9hZGRyLAotCQkgICBjeV9yZWFkYihiYXNlX2FkZHIrKEN5R0ZSQ1I8PGluZGV4KSkpOworCQkgICByZWFkYihiYXNlX2FkZHIrKEN5R0ZSQ1I8PGluZGV4KSkpOwogCQkgKi8KIAl9CiAJcmV0dXJuIGNoaXBfbnVtYmVyOwpAQCAtNDY0Nyw5ICs0NjQ4LDE1IEBACiAKIAkJLyogcHJvYmUgZm9yIENEMTQwMC4uLiAqLwogCQljeV9pc2FfYWRkcmVzcyA9IGlvcmVtYXAoaXNhX2FkZHJlc3MsIEN5SVNBX1l3aW4pOworCQlpZiAoY3lfaXNhX2FkZHJlc3MgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJDeWNsb20tWS9JU0E6IGNhbid0IHJlbWFwIGJhc2UgIgorCQkJCQkiYWRkcmVzc1xuIik7CisJCQljb250aW51ZTsKKwkJfQogCQljeV9pc2FfbmNoYW4gPSBDeVBPUlRTX1BFUl9DSElQICoKIAkJCWN5eV9pbml0X2NhcmQoY3lfaXNhX2FkZHJlc3MsIDApOwogCQlpZiAoY3lfaXNhX25jaGFuID09IDApIHsKKwkJCWlvdW5tYXAoY3lfaXNhX2FkZHJlc3MpOwogCQkJY29udGludWU7CiAJCX0KICNpZmRlZiBNT0RVTEUKQEAgLTQ2NjAsNDAgKzQ2NjcsNDIgQEAKIAkJCS8qIGZpbmQgb3V0IHRoZSBib2FyZCdzIGlycSBieSBwcm9iaW5nICovCiAJCQljeV9pc2FfaXJxID0gZGV0ZWN0X2lzYV9pcnEoY3lfaXNhX2FkZHJlc3MpOwogCQlpZiAoY3lfaXNhX2lycSA9PSAwKSB7Ci0JCQlwcmludGsoIkN5Y2xvbS1ZL0lTQSBmb3VuZCBhdCAweCVseCAiLAorCQkJcHJpbnRrKEtFUk5fRVJSICJDeWNsb20tWS9JU0EgZm91bmQgYXQgMHglbHgsIGJ1dCB0aGUgIgorCQkJCSJJUlEgY291bGQgbm90IGJlIGRldGVjdGVkLlxuIiwKIAkJCQkodW5zaWduZWQgbG9uZyljeV9pc2FfYWRkcmVzcyk7Ci0JCQlwcmludGsoImJ1dCB0aGUgSVJRIGNvdWxkIG5vdCBiZSBkZXRlY3RlZC5cbiIpOworCQkJaW91bm1hcChjeV9pc2FfYWRkcmVzcyk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmICgoY3lfbmV4dF9jaGFubmVsICsgY3lfaXNhX25jaGFuKSA+IE5SX1BPUlRTKSB7Ci0JCQlwcmludGsoIkN5Y2xvbS1ZL0lTQSBmb3VuZCBhdCAweCVseCAiLAorCQkJcHJpbnRrKEtFUk5fRVJSICJDeWNsb20tWS9JU0EgZm91bmQgYXQgMHglbHgsIGJ1dCBubyAiCisJCQkJIm1vcmUgY2hhbm5lbHMgYXJlIGF2YWlsYWJsZS4gQ2hhbmdlIE5SX1BPUlRTICIKKwkJCQkiaW4gY3ljbGFkZXMuYyBhbmQgcmVjb21waWxlIGtlcm5lbC5cbiIsCiAJCQkJKHVuc2lnbmVkIGxvbmcpY3lfaXNhX2FkZHJlc3MpOwotCQkJcHJpbnRrKCJidXQgbm8gbW9yZSBjaGFubmVscyBhcmUgYXZhaWxhYmxlLlxuIik7Ci0JCQlwcmludGsoIkNoYW5nZSBOUl9QT1JUUyBpbiBjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUgIgotCQkJCQkia2VybmVsLlxuIik7CisJCQlpb3VubWFwKGN5X2lzYV9hZGRyZXNzKTsKIAkJCXJldHVybiBuYm9hcmQ7CiAJCX0KIAkJLyogZmlsbCB0aGUgbmV4dCBjeV9jYXJkIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8KIAkJZm9yIChqID0gMDsgaiA8IE5SX0NBUkRTOyBqKyspIHsKLQkJCWlmIChjeV9jYXJkW2pdLmJhc2VfYWRkciA9PSAwKQorCQkJaWYgKGN5X2NhcmRbal0uYmFzZV9hZGRyID09IE5VTEwpCiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGogPT0gTlJfQ0FSRFMpIHsJLyogbm8gbW9yZSBjeV9jYXJkcyBhdmFpbGFibGUgKi8KLQkJCXByaW50aygiQ3ljbG9tLVkvSVNBIGZvdW5kIGF0IDB4JWx4ICIsCisJCQlwcmludGsoS0VSTl9FUlIgIkN5Y2xvbS1ZL0lTQSBmb3VuZCBhdCAweCVseCwgYnV0IG5vICIKKwkJCQkibW9yZSBjYXJkcyBjYW4gYmUgdXNlZC4gQ2hhbmdlIE5SX0NBUkRTIGluICIKKwkJCQkiY3ljbGFkZXMuYyBhbmQgcmVjb21waWxlIGtlcm5lbC5cbiIsCiAJCQkJKHVuc2lnbmVkIGxvbmcpY3lfaXNhX2FkZHJlc3MpOwotCQkJcHJpbnRrKCJidXQgbm8gbW9yZSBjYXJkcyBjYW4gYmUgdXNlZCAuXG4iKTsKLQkJCXByaW50aygiQ2hhbmdlIE5SX0NBUkRTIGluIGN5Y2xhZGVzLmMgYW5kIHJlY29tcGlsZSAiCi0JCQkJCSJrZXJuZWwuXG4iKTsKKwkJCWlvdW5tYXAoY3lfaXNhX2FkZHJlc3MpOwogCQkJcmV0dXJuIG5ib2FyZDsKIAkJfQogCiAJCS8qIGFsbG9jYXRlIElSUSAqLwogCQlpZiAocmVxdWVzdF9pcnEoY3lfaXNhX2lycSwgY3l5X2ludGVycnVwdCwKIAkJCQlJUlFGX0RJU0FCTEVELCAiQ3ljbG9tLVkiLCAmY3lfY2FyZFtqXSkpIHsKLQkJCXByaW50aygiQ3ljbG9tLVkvSVNBIGZvdW5kIGF0IDB4JWx4ICIsCi0JCQkJKHVuc2lnbmVkIGxvbmcpY3lfaXNhX2FkZHJlc3MpOwotCQkJcHJpbnRrKCJidXQgY291bGQgbm90IGFsbG9jYXRlIElSUSMlZC5cbiIsIGN5X2lzYV9pcnEpOworCQkJcHJpbnRrKEtFUk5fRVJSICJDeWNsb20tWS9JU0EgZm91bmQgYXQgMHglbHgsIGJ1dCAiCisJCQkJImNvdWxkIG5vdCBhbGxvY2F0ZSBJUlEjJWQuXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nKWN5X2lzYV9hZGRyZXNzLCBjeV9pc2FfaXJxKTsKKwkJCWlvdW5tYXAoY3lfaXNhX2FkZHJlc3MpOwogCQkJcmV0dXJuIG5ib2FyZDsKIAkJfQogCkBAIC00NzA0LDE1ICs0NzEzLDIzIEBACiAJCWN5X2NhcmRbal0uYnVzX2luZGV4ID0gMDsKIAkJY3lfY2FyZFtqXS5maXJzdF9saW5lID0gY3lfbmV4dF9jaGFubmVsOwogCQljeV9jYXJkW2pdLm51bV9jaGlwcyA9IGN5X2lzYV9uY2hhbiAvIDQ7CisJCWlmIChjeV9pbml0X2NhcmQoJmN5X2NhcmRbal0pKSB7CisJCQljeV9jYXJkW2pdLmJhc2VfYWRkciA9IE5VTEw7CisJCQlmcmVlX2lycShjeV9pc2FfaXJxLCAmY3lfY2FyZFtqXSk7CisJCQlpb3VubWFwKGN5X2lzYV9hZGRyZXNzKTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCW5ib2FyZCsrOwogCi0JCS8qIHByaW50IG1lc3NhZ2UgKi8KLQkJcHJpbnRrKCJDeWNsb20tWS9JU0EgIyVkOiAweCVseC0weCVseCwgSVJRJWQsICIsCisJCXByaW50ayhLRVJOX0lORk8gIkN5Y2xvbS1ZL0lTQSAjJWQ6IDB4JWx4LTB4JWx4LCBJUlElZCBmb3VuZDogIgorCQkJIiVkIGNoYW5uZWxzIHN0YXJ0aW5nIGZyb20gcG9ydCAlZFxuIiwKIAkJCWogKyAxLCAodW5zaWduZWQgbG9uZyljeV9pc2FfYWRkcmVzcywKIAkJCSh1bnNpZ25lZCBsb25nKShjeV9pc2FfYWRkcmVzcyArIChDeUlTQV9Zd2luIC0gMSkpLAotCQkJY3lfaXNhX2lycSk7Ci0JCXByaW50aygiJWQgY2hhbm5lbHMgc3RhcnRpbmcgZnJvbSBwb3J0ICVkLlxuIiwKLQkJCWN5X2lzYV9uY2hhbiwgY3lfbmV4dF9jaGFubmVsKTsKKwkJCWN5X2lzYV9pcnEsIGN5X2lzYV9uY2hhbiwgY3lfbmV4dF9jaGFubmVsKTsKKworCQlmb3IgKGogPSBjeV9uZXh0X2NoYW5uZWw7CisJCQkJaiA8IGN5X25leHRfY2hhbm5lbCArIGN5X2lzYV9uY2hhbjsgaisrKQorCQkJdHR5X3JlZ2lzdGVyX2RldmljZShjeV9zZXJpYWxfZHJpdmVyLCBqLCBOVUxMKTsKIAkJY3lfbmV4dF9jaGFubmVsICs9IGN5X2lzYV9uY2hhbjsKIAl9CiAJcmV0dXJuIG5ib2FyZDsKQEAgLTQ3MjEsNTEwICs0NzM4LDMxMCBAQAogI2VuZGlmCQkJCS8qIENPTkZJR19JU0EgKi8KIH0JCQkJLyogY3lfZGV0ZWN0X2lzYSAqLwogCi1zdGF0aWMgdm9pZCBwbHhfaW5pdCh2b2lkIF9faW9tZW0gKiBhZGRyLCB1Y2xvbmcgaW5pdGN0bCkKKyNpZmRlZiBDT05GSUdfUENJCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGx4X2luaXQodm9pZCBfX2lvbWVtICogYWRkciwgX191MzIgaW5pdGN0bCkKIHsKIAkvKiBSZXNldCBQTFggKi8KLQljeV93cml0ZWwoYWRkciArIGluaXRjdGwsIGN5X3JlYWRsKGFkZHIgKyBpbml0Y3RsKSB8IDB4NDAwMDAwMDApOworCWN5X3dyaXRlbChhZGRyICsgaW5pdGN0bCwgcmVhZGwoYWRkciArIGluaXRjdGwpIHwgMHg0MDAwMDAwMCk7CiAJdWRlbGF5KDEwMEwpOwotCWN5X3dyaXRlbChhZGRyICsgaW5pdGN0bCwgY3lfcmVhZGwoYWRkciArIGluaXRjdGwpICYgfjB4NDAwMDAwMDApOworCWN5X3dyaXRlbChhZGRyICsgaW5pdGN0bCwgcmVhZGwoYWRkciArIGluaXRjdGwpICYgfjB4NDAwMDAwMDApOwogCiAJLyogUmVsb2FkIENvbmZpZy4gUmVnaXN0ZXJzIGZyb20gRUVQUk9NICovCi0JY3lfd3JpdGVsKGFkZHIgKyBpbml0Y3RsLCBjeV9yZWFkbChhZGRyICsgaW5pdGN0bCkgfCAweDIwMDAwMDAwKTsKKwljeV93cml0ZWwoYWRkciArIGluaXRjdGwsIHJlYWRsKGFkZHIgKyBpbml0Y3RsKSB8IDB4MjAwMDAwMDApOwogCXVkZWxheSgxMDBMKTsKLQljeV93cml0ZWwoYWRkciArIGluaXRjdGwsIGN5X3JlYWRsKGFkZHIgKyBpbml0Y3RsKSAmIH4weDIwMDAwMDAwKTsKKwljeV93cml0ZWwoYWRkciArIGluaXRjdGwsIHJlYWRsKGFkZHIgKyBpbml0Y3RsKSAmIH4weDIwMDAwMDAwKTsKIH0KIAotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogY3lfZGV0ZWN0X3BjaSgpIC0gVGVzdCBQQ0kgYnVzIHByZXNlbmNlIGFuZCBDeWNsb20tWWUvUENJLgotICogc2V0cyBnbG9iYWwgdmFyaWFibGVzIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBQQ0kgYm9hcmRzIGZvdW5kLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGN5X2RldGVjdF9wY2kodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGN5X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLSNpZmRlZiBDT05GSUdfUENJCisJdm9pZCBfX2lvbWVtICphZGRyMCA9IE5VTEwsICphZGRyMiA9IE5VTEw7CisJY2hhciAqY2FyZF9uYW1lID0gTlVMTDsKKwl1MzIgbWFpbGJveDsKKwl1bnNpZ25lZCBpbnQgZGV2aWNlX2lkLCBuY2hhbiA9IDAsIGNhcmRfbm8sIGk7CisJdW5zaWduZWQgY2hhciBwbHhfdmVyOworCWludCByZXR2YWwsIGlycTsKIAotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKLQl1bnNpZ25lZCBjaGFyIGN5eV9yZXZfaWQ7Ci0JdW5zaWduZWQgY2hhciBjeV9wY2lfaXJxID0gMDsKLQl1Y2xvbmcgY3lfcGNpX3BoeXMwLCBjeV9wY2lfcGh5czI7Ci0Jdm9pZCBfX2lvbWVtICpjeV9wY2lfYWRkcjAsICpjeV9wY2lfYWRkcjI7Ci0JdW5zaWduZWQgc2hvcnQgaSwgaiwgY3lfcGNpX25jaGFuLCBwbHhfdmVyOwotCXVuc2lnbmVkIHNob3J0IGRldmljZV9pZCwgZGV2X2luZGV4ID0gMDsKLQl1Y2xvbmcgbWFpbGJveDsKLQl1Y2xvbmcgWmVJbmRleCA9IDA7Ci0Jdm9pZCBfX2lvbWVtICpaZV9hZGRyMFtOUl9DQVJEU10sICpaZV9hZGRyMltOUl9DQVJEU107Ci0JdWNsb25nIFplX3BoeXMwW05SX0NBUkRTXSwgWmVfcGh5czJbTlJfQ0FSRFNdOwotCXVuc2lnbmVkIGNoYXIgWmVfaXJxW05SX0NBUkRTXTsKLQlzdHJ1Y3QgcGNpX2RldiAqWmVfcGRldltOUl9DQVJEU107CisJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZW5hYmxlIGRldmljZVxuIik7CisJCWdvdG8gZXJyOworCX0KIAotCWZvciAoaSA9IDA7IGkgPCBOUl9DQVJEUzsgaSsrKSB7Ci0JCS8qIGxvb2sgZm9yIGEgQ3ljbGFkZXMgY2FyZCBieSB2ZW5kb3IgYW5kIGRldmljZSBpZCAqLwotCQl3aGlsZSAoKGRldmljZV9pZCA9IGN5X3BjaV9kZXZfaWRbZGV2X2luZGV4XS5kZXZpY2UpICE9IDApIHsKLQkJCWlmICgocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ1lDTEFERVMsCi0JCQkJCQkgICBkZXZpY2VfaWQsIHBkZXYpKSA9PSBOVUxMKSB7Ci0JCQkJZGV2X2luZGV4Kys7CS8qIHRyeSBuZXh0IGRldmljZSBpZCAqLwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsJLyogZm91bmQgYSBib2FyZCAqLwotCQkJfQorCS8qIHJlYWQgUENJIGNvbmZpZ3VyYXRpb24gYXJlYSAqLworCWlycSA9IHBkZXYtPmlycTsKKwlkZXZpY2VfaWQgPSBwZGV2LT5kZXZpY2UgJiB+UENJX0RFVklDRV9JRF9NQVNLOworCisjaWYgZGVmaW5lZChfX2FscGhhX18pCisJaWYgKGRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9ZX0xvKSB7CS8qIGJlbG93IDFNPyAqLworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDeWNsb20tWS9QQ0kgbm90IHN1cHBvcnRlZCBmb3IgbG93ICIKKwkJCSJhZGRyZXNzZXMgb24gQWxwaGEgc3lzdGVtcy5cbiIpOworCQlyZXR2YWwgPSAtRUlPOworCQlnb3RvIGVycl9kaXM7CisJfQorI2VuZGlmCisJaWYgKGRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9aX0xvKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkN5Y2xhZGVzLVovUENJIG5vdCBzdXBwb3J0ZWQgZm9yIGxvdyAiCisJCQkiYWRkcmVzc2VzXG4iKTsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBlcnJfZGlzOworCX0KKworCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMikgJiBJT1JFU09VUkNFX0lPKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJQQ0kgSS9PIGJpdCBpbmNvcnJlY3RseSBzZXQuIElnbm9yaW5nICIKKwkJCQkiaXQuLi5cbiIpOworCQlwZGV2LT5yZXNvdXJjZVsyXS5mbGFncyAmPSB+SU9SRVNPVVJDRV9JTzsKKwl9CisKKwlyZXR2YWwgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJjeWNsYWRlcyIpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlc2VydmUgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBlcnJfZGlzOworCX0KKworCXJldHZhbCA9IC1FSU87CisJaWYgKGRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9ZX0xvIHx8CisJCQlkZXZpY2VfaWQgPT0gUENJX0RFVklDRV9JRF9DWUNMT01fWV9IaSkgeworCQljYXJkX25hbWUgPSAiQ3ljbG9tLVkiOworCisJCWFkZHIwID0gcGNpX2lvbWFwKHBkZXYsIDAsIEN5UENJX1ljdGwpOworCQlpZiAoYWRkcjAgPT0gTlVMTCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVtYXAgY3RsIHJlZ2lvblxuIik7CisJCQlnb3RvIGVycl9yZWc7CisJCX0KKwkJYWRkcjIgPSBwY2lfaW9tYXAocGRldiwgMiwgQ3lQQ0lfWXdpbik7CisJCWlmIChhZGRyMiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZW1hcCBiYXNlIHJlZ2lvblxuIik7CisJCQlnb3RvIGVycl91bm1hcDsKIAkJfQogCi0JCWlmIChkZXZpY2VfaWQgPT0gMCkKLQkJCWJyZWFrOworCQluY2hhbiA9IEN5UE9SVFNfUEVSX0NISVAgKiBjeXlfaW5pdF9jYXJkKGFkZHIyLCAxKTsKKwkJaWYgKG5jaGFuID09IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkN5Y2xvbS1ZIFBDSSBob3N0IGNhcmQgd2l0aCBubyAiCisJCQkJCSJTZXJpYWwtTW9kdWxlc1xuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0gZWxzZSBpZiAoZGV2aWNlX2lkID09IFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1pfSGkpIHsKKwkJc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICpjdGxfYWRkcjsKIAotCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCi0JCQljb250aW51ZTsKKwkJY3RsX2FkZHIgPSBhZGRyMCA9IHBjaV9pb21hcChwZGV2LCAwLCBDeVBDSV9aY3RsKTsKKwkJaWYgKGFkZHIwID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlbWFwIGN0bCByZWdpb25cbiIpOworCQkJZ290byBlcnJfcmVnOworCQl9CiAKLQkJLyogcmVhZCBQQ0kgY29uZmlndXJhdGlvbiBhcmVhICovCi0JCWN5X3BjaV9pcnEgPSBwZGV2LT5pcnE7Ci0JCWN5X3BjaV9waHlzMCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQkJY3lfcGNpX3BoeXMyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZjeXlfcmV2X2lkKTsKKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBQTFggYmVmb3JlIHJlc2V0dGluZyBpdCAqLworCQljeV93cml0ZXcoYWRkcjAgKyAweDY4LAorCQkJcmVhZHcoYWRkcjAgKyAweDY4KSAmIH4weDA5MDApOwogCi0JCWRldmljZV9pZCAmPSB+UENJX0RFVklDRV9JRF9NQVNLOworCQlwbHhfaW5pdChhZGRyMCwgMHg2Yyk7CisJCS8qIEZvciBzb21lIHlldCB1bmtub3duIHJlYXNvbiwgb25jZSB0aGUgUExYOTA2MCByZWxvYWRzCisJCSAgIHRoZSBFRVBST00sIHRoZSBJUlEgaXMgbG9zdCBhbmQsIHRodXMsIHdlIGhhdmUgdG8KKwkJICAgcmUtd3JpdGUgaXQgdG8gdGhlIFBDSSBjb25maWcuIHJlZ2lzdGVycy4KKwkJICAgVGhpcyB3aWxsIHJlbWFpbiBoZXJlIHVudGlsIHdlIGZpbmQgYSBwZXJtYW5lbnQKKwkJICAgZml4LiAqLworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCBpcnEpOwogCi0JCWlmIChkZXZpY2VfaWQgPT0gUENJX0RFVklDRV9JRF9DWUNMT01fWV9MbyB8fAotCQkJCWRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9ZX0hpKSB7Ci0jaWZkZWYgQ1lfUENJX0RFQlVHCi0JCQlwcmludGsoIkN5Y2xvbS1ZL1BDSSAoYnVzPTB4MCV4LCBwY2lfaWQ9MHgleCwgIiwKLQkJCQlwZGV2LT5idXMtPm51bWJlciwgcGRldi0+ZGV2Zm4pOwotCQkJcHJpbnRrKCJyZXZfaWQ9JWQpIElSUSVkXG4iLAotCQkJCWN5eV9yZXZfaWQsIChpbnQpY3lfcGNpX2lycSk7Ci0JCQlwcmludGsoIkN5Y2xvbS1ZL1BDSTpmb3VuZCAgd2luYWRkcj0weCVseCAiCi0JCQkJImN0bGFkZHI9MHglbHhcbiIsCi0JCQkJKHVsb25nKWN5X3BjaV9waHlzMiwgKHVsb25nKWN5X3BjaV9waHlzMCk7Ci0jZW5kaWYKKwkJbWFpbGJveCA9ICh1MzIpcmVhZGwoJmN0bF9hZGRyLT5tYWlsX2JveF8wKTsKIAotCQkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJCQlwcmludGsoIiAgV2FybmluZzogUENJIEkvTyBiaXQgaW5jb3JyZWN0bHkgIgotCQkJCQkic2V0LiBJZ25vcmluZyBpdC4uLlxuIik7Ci0JCQkJcGRldi0+cmVzb3VyY2VbMl0uZmxhZ3MgJj0gfklPUkVTT1VSQ0VfSU87Ci0JCQl9CisJCWFkZHIyID0gcGNpX2lvbWFwKHBkZXYsIDIsIG1haWxib3ggPT0gWkVfVjEgPworCQkJCUN5UENJX1plX3dpbiA6IEN5UENJX1p3aW4pOworCQlpZiAoYWRkcjIgPT0gTlVMTCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVtYXAgYmFzZSByZWdpb25cbiIpOworCQkJZ290byBlcnJfdW5tYXA7CisJCX0KIAotCQkJLyogQWx0aG91Z2ggd2UgZG9uJ3QgdXNlIHRoaXMgSS9PIHJlZ2lvbiwgd2Ugc2hvdWxkCi0JCQkgICByZXF1ZXN0IGl0IGZyb20gdGhlIGtlcm5lbCBhbnl3YXksIHRvIGF2b2lkIHByb2JsZW1zCi0JCQkgICB3aXRoIG90aGVyIGRyaXZlcnMgYWNjZXNzaW5nIGl0LiAqLwotCQkJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgIkN5Y2xvbS1ZIikgIT0gMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiY3ljbGFkZXM6IGZhaWxlZCB0byByZXNlcnZlICIKLQkJCQkJCSJQQ0kgcmVzb3VyY2VzXG4iKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLSNpZiBkZWZpbmVkKF9fYWxwaGFfXykKLQkJCWlmIChkZXZpY2VfaWQgPT0gUENJX0RFVklDRV9JRF9DWUNMT01fWV9MbykgewkvKiBiZWxvdyAxTT8gKi8KLQkJCQlwcmludGsoIkN5Y2xvbS1ZL1BDSSAoYnVzPTB4MCV4LCBwY2lfaWQ9MHgleCwgIiwKLQkJCQkJcGRldi0+YnVzLT5udW1iZXIsIHBkZXYtPmRldmZuKTsKLQkJCQlwcmludGsoInJldl9pZD0lZCkgSVJRJWRcbiIsCi0JCQkJCWN5eV9yZXZfaWQsIChpbnQpY3lfcGNpX2lycSk7Ci0JCQkJcHJpbnRrKCJDeWNsb20tWS9QQ0k6Zm91bmQgIHdpbmFkZHI9MHglbHggIgotCQkJCQkiY3RsYWRkcj0weCVseFxuIiwKLQkJCQkJKHVsb25nKWN5X3BjaV9waHlzMiwKLQkJCQkJKHVsb25nKWN5X3BjaV9waHlzMCk7Ci0JCQkJcHJpbnRrKCJDeWNsb20tWS9QQ0kgbm90IHN1cHBvcnRlZCBmb3IgbG93ICIKLQkJCQkJImFkZHJlc3NlcyBpbiBBbHBoYSBzeXN0ZW1zLlxuIik7Ci0JCQkJaS0tOwotCQkJCWNvbnRpbnVlOwotCQkJfQotI2VuZGlmCi0JCQljeV9wY2lfYWRkcjAgPSBpb3JlbWFwKGN5X3BjaV9waHlzMCwgQ3lQQ0lfWWN0bCk7Ci0JCQljeV9wY2lfYWRkcjIgPSBpb3JlbWFwKGN5X3BjaV9waHlzMiwgQ3lQQ0lfWXdpbik7CisJCWlmIChtYWlsYm94ID09IFpFX1YxKSB7CisJCQljYXJkX25hbWUgPSAiQ3ljbGFkZXMtWmUiOworCisJCQlyZWFkbCgmY3RsX2FkZHItPm1haWxfYm94XzApOworCQkJbmNoYW4gPSBaRV9WMV9OUE9SVFM7CisJCX0gZWxzZSB7CisJCQljYXJkX25hbWUgPSAiQ3ljbGFkZXMtOFpvIjsKIAogI2lmZGVmIENZX1BDSV9ERUJVRwotCQkJcHJpbnRrKCJDeWNsb20tWS9QQ0k6IHJlbG9jYXRlIHdpbmFkZHI9MHglbHggIgotCQkJCSJjdGxhZGRyPTB4JWx4XG4iLAotCQkJCSh1X2xvbmcpY3lfcGNpX2FkZHIyLCAodV9sb25nKWN5X3BjaV9hZGRyMCk7Ci0jZW5kaWYKLQkJCWN5X3BjaV9uY2hhbiA9ICh1bnNpZ25lZCBzaG9ydCkoQ3lQT1JUU19QRVJfQ0hJUCAqCi0JCQkJCWN5eV9pbml0X2NhcmQoY3lfcGNpX2FkZHIyLCAxKSk7Ci0JCQlpZiAoY3lfcGNpX25jaGFuID09IDApIHsKLQkJCQlwcmludGsoIkN5Y2xvbS1ZIFBDSSBob3N0IGNhcmQgd2l0aCAiKTsKLQkJCQlwcmludGsoIm5vIFNlcmlhbC1Nb2R1bGVzIGF0IDB4JWx4LlxuIiwKLQkJCQkJKHVsb25nKSBjeV9wY2lfcGh5czIpOwotCQkJCWktLTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICgoY3lfbmV4dF9jaGFubmVsICsgY3lfcGNpX25jaGFuKSA+IE5SX1BPUlRTKSB7Ci0JCQkJcHJpbnRrKCJDeWNsb20tWS9QQ0kgZm91bmQgYXQgMHglbHggIiwKLQkJCQkJKHVsb25nKSBjeV9wY2lfcGh5czIpOwotCQkJCXByaW50aygiYnV0IG5vIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUuXG4iKTsKLQkJCQlwcmludGsoIkNoYW5nZSBOUl9QT1JUUyBpbiBjeWNsYWRlcy5jIGFuZCAiCi0JCQkJCQkicmVjb21waWxlIGtlcm5lbC5cbiIpOwotCQkJCXJldHVybiBpOwotCQkJfQotCQkJLyogZmlsbCB0aGUgbmV4dCBjeV9jYXJkIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8KLQkJCWZvciAoaiA9IDA7IGogPCBOUl9DQVJEUzsgaisrKSB7Ci0JCQkJaWYgKGN5X2NhcmRbal0uYmFzZV9hZGRyID09IDApCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGogPT0gTlJfQ0FSRFMpIHsJLyogbm8gbW9yZSBjeV9jYXJkcyBhdmFpbGFibGUgKi8KLQkJCQlwcmludGsoIkN5Y2xvbS1ZL1BDSSBmb3VuZCBhdCAweCVseCAiLAotCQkJCQkodWxvbmcpIGN5X3BjaV9waHlzMik7Ci0JCQkJcHJpbnRrKCJidXQgbm8gbW9yZSBjYXJkcyBjYW4gYmUgdXNlZC5cbiIpOwotCQkJCXByaW50aygiQ2hhbmdlIE5SX0NBUkRTIGluIGN5Y2xhZGVzLmMgYW5kICIKLQkJCQkJCSJyZWNvbXBpbGUga2VybmVsLlxuIik7Ci0JCQkJcmV0dXJuIGk7Ci0JCQl9Ci0KLQkJCS8qIGFsbG9jYXRlIElSUSAqLwotCQkJaWYgKHJlcXVlc3RfaXJxKGN5X3BjaV9pcnEsIGN5eV9pbnRlcnJ1cHQsCi0JCQkJCUlSUUZfU0hBUkVELCAiQ3ljbG9tLVkiLCAmY3lfY2FyZFtqXSkpIHsKLQkJCQlwcmludGsoIkN5Y2xvbS1ZL1BDSSBmb3VuZCBhdCAweCVseCAiLAotCQkJCQkodWxvbmcpIGN5X3BjaV9waHlzMik7Ci0JCQkJcHJpbnRrKCJidXQgY291bGQgbm90IGFsbG9jYXRlIElSUSVkLlxuIiwKLQkJCQkJY3lfcGNpX2lycSk7Ci0JCQkJcmV0dXJuIGk7Ci0JCQl9Ci0KLQkJCS8qIHNldCBjeV9jYXJkICovCi0JCQljeV9jYXJkW2pdLmJhc2VfcGh5cyA9ICh1bG9uZykgY3lfcGNpX3BoeXMyOwotCQkJY3lfY2FyZFtqXS5jdGxfcGh5cyA9ICh1bG9uZykgY3lfcGNpX3BoeXMwOwotCQkJY3lfY2FyZFtqXS5iYXNlX2FkZHIgPSBjeV9wY2lfYWRkcjI7Ci0JCQljeV9jYXJkW2pdLmN0bF9hZGRyID0gY3lfcGNpX2FkZHIwOwotCQkJY3lfY2FyZFtqXS5pcnEgPSAoaW50KWN5X3BjaV9pcnE7Ci0JCQljeV9jYXJkW2pdLmJ1c19pbmRleCA9IDE7Ci0JCQljeV9jYXJkW2pdLmZpcnN0X2xpbmUgPSBjeV9uZXh0X2NoYW5uZWw7Ci0JCQljeV9jYXJkW2pdLm51bV9jaGlwcyA9IGN5X3BjaV9uY2hhbiAvIDQ7Ci0JCQljeV9jYXJkW2pdLnBkZXYgPSBwZGV2OwotCi0JCQkvKiBlbmFibGUgaW50ZXJydXB0cyBpbiB0aGUgUENJIGludGVyZmFjZSAqLwotCQkJcGx4X3ZlciA9IGN5X3JlYWRiKGN5X3BjaV9hZGRyMiArIEN5UExYX1ZFUikgJiAweDBmOwotCQkJc3dpdGNoIChwbHhfdmVyKSB7Ci0JCQljYXNlIFBMWF85MDUwOgotCi0JCQkJY3lfd3JpdGViKGN5X3BjaV9hZGRyMCArIDB4NGMsIDB4NDMpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIFBMWF85MDYwOgotCQkJY2FzZSBQTFhfOTA4MDoKLQkJCWRlZmF1bHQ6CS8qIE9sZCBib2FyZHMsIHVzZSBQTFhfOTA2MCAqLwotCi0JCQkJcGx4X2luaXQoY3lfcGNpX2FkZHIwLCAweDZjKTsKLQkJCS8qIEZvciBzb21lIHlldCB1bmtub3duIHJlYXNvbiwgb25jZSB0aGUgUExYOTA2MCByZWxvYWRzCi0JCQkgICB0aGUgRUVQUk9NLCB0aGUgSVJRIGlzIGxvc3QgYW5kLCB0aHVzLCB3ZSBoYXZlIHRvCi0JCQkgICByZS13cml0ZSBpdCB0byB0aGUgUENJIGNvbmZpZy4gcmVnaXN0ZXJzLgotCQkJICAgVGhpcyB3aWxsIHJlbWFpbiBoZXJlIHVudGlsIHdlIGZpbmQgYSBwZXJtYW5lbnQKLQkJCSAgIGZpeC4gKi8KLQkJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLAotCQkJCQkJY3lfcGNpX2lycSk7Ci0KLQkJCQljeV93cml0ZXcoY3lfcGNpX2FkZHIwICsgMHg2OCwKLQkJCQkJICBjeV9yZWFkdyhjeV9wY2lfYWRkcjAgKwotCQkJCQkJICAgMHg2OCkgfCAweDA5MDApOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQkvKiBwcmludCBtZXNzYWdlICovCi0JCQlwcmludGsoIkN5Y2xvbS1ZL1BDSSAjJWQ6IDB4JWx4LTB4JWx4LCBJUlElZCwgIiwKLQkJCQlqICsgMSwgKHVsb25nKWN5X3BjaV9waHlzMiwKLQkJCQkodWxvbmcpIChjeV9wY2lfcGh5czIgKyBDeVBDSV9Zd2luIC0gMSksCi0JCQkJKGludCljeV9wY2lfaXJxKTsKLQkJCXByaW50aygiJWQgY2hhbm5lbHMgc3RhcnRpbmcgZnJvbSBwb3J0ICVkLlxuIiwKLQkJCQljeV9wY2lfbmNoYW4sIGN5X25leHRfY2hhbm5lbCk7Ci0KLQkJCWN5X25leHRfY2hhbm5lbCArPSBjeV9wY2lfbmNoYW47Ci0JCX0gZWxzZSBpZiAoZGV2aWNlX2lkID09IFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1pfTG8pIHsKLQkJCS8qIHByaW50IG1lc3NhZ2UgKi8KLQkJCXByaW50aygiQ3ljbGFkZXMtWi9QQ0kgKGJ1cz0weDAleCwgcGNpX2lkPTB4JXgsICIsCi0JCQkJcGRldi0+YnVzLT5udW1iZXIsIHBkZXYtPmRldmZuKTsKLQkJCXByaW50aygicmV2X2lkPSVkKSBJUlElZFxuIiwKLQkJCQljeXlfcmV2X2lkLCAoaW50KWN5X3BjaV9pcnEpOwotCQkJcHJpbnRrKCJDeWNsYWRlcy1aL1BDSTogZm91bmQgd2luYWRkcj0weCVseCAiCi0JCQkJImN0bGFkZHI9MHglbHhcbiIsCi0JCQkJKHVsb25nKWN5X3BjaV9waHlzMiwgKHVsb25nKWN5X3BjaV9waHlzMCk7Ci0JCQlwcmludGsoIkN5Y2xhZGVzLVovUENJIG5vdCBzdXBwb3J0ZWQgZm9yIGxvdyAiCi0JCQkJImFkZHJlc3Nlc1xuIik7Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmIChkZXZpY2VfaWQgPT0gUENJX0RFVklDRV9JRF9DWUNMT01fWl9IaSkgewotI2lmZGVmIENZX1BDSV9ERUJVRwotCQkJcHJpbnRrKCJDeWNsYWRlcy1aL1BDSSAoYnVzPTB4MCV4LCBwY2lfaWQ9MHgleCwgIiwKLQkJCQlwZGV2LT5idXMtPm51bWJlciwgcGRldi0+ZGV2Zm4pOwotCQkJcHJpbnRrKCJyZXZfaWQ9JWQpIElSUSVkXG4iLAotCQkJCWN5eV9yZXZfaWQsIChpbnQpY3lfcGNpX2lycSk7Ci0JCQlwcmludGsoIkN5Y2xhZGVzLVovUENJOiBmb3VuZCB3aW5hZGRyPTB4JWx4ICIKLQkJCQkiY3RsYWRkcj0weCVseFxuIiwKLQkJCQkodWxvbmcpIGN5X3BjaV9waHlzMiwgKHVsb25nKSBjeV9wY2lfcGh5czApOwotI2VuZGlmCi0JCQljeV9wY2lfYWRkcjAgPSBpb3JlbWFwKGN5X3BjaV9waHlzMCwgQ3lQQ0lfWmN0bCk7Ci0KLQkJCS8qIERpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgUExYIGJlZm9yZSByZXNldHRpbmcgaXQgKi8KLQkJCWN5X3dyaXRldyhjeV9wY2lfYWRkcjAgKyAweDY4LAotCQkJCWN5X3JlYWR3KGN5X3BjaV9hZGRyMCArIDB4NjgpICYgfjB4MDkwMCk7Ci0KLQkJCXBseF9pbml0KGN5X3BjaV9hZGRyMCwgMHg2Yyk7Ci0JCQkvKiBGb3Igc29tZSB5ZXQgdW5rbm93biByZWFzb24sIG9uY2UgdGhlIFBMWDkwNjAgcmVsb2FkcwotCQkJICAgdGhlIEVFUFJPTSwgdGhlIElSUSBpcyBsb3N0IGFuZCwgdGh1cywgd2UgaGF2ZSB0bwotCQkJICAgcmUtd3JpdGUgaXQgdG8gdGhlIFBDSSBjb25maWcuIHJlZ2lzdGVycy4KLQkJCSAgIFRoaXMgd2lsbCByZW1haW4gaGVyZSB1bnRpbCB3ZSBmaW5kIGEgcGVybWFuZW50Ci0JCQkgICBmaXguICovCi0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLAotCQkJCQkJY3lfcGNpX2lycSk7Ci0KLQkJCW1haWxib3ggPQotCQkJICAgICh1Y2xvbmcpY3lfcmVhZGwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopCi0JCQkJCQljeV9wY2lfYWRkcjApLT5tYWlsX2JveF8wKTsKLQotCQkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJCQlwcmludGsoIiAgV2FybmluZzogUENJIEkvTyBiaXQgaW5jb3JyZWN0bHkgIgotCQkJCQkic2V0LiBJZ25vcmluZyBpdC4uLlxuIik7Ci0JCQkJcGRldi0+cmVzb3VyY2VbMl0uZmxhZ3MgJj0gfklPUkVTT1VSQ0VfSU87Ci0JCQl9Ci0KLQkJCS8qIEFsdGhvdWdoIHdlIGRvbid0IHVzZSB0aGlzIEkvTyByZWdpb24sIHdlIHNob3VsZAotCQkJICAgcmVxdWVzdCBpdCBmcm9tIHRoZSBrZXJuZWwgYW55d2F5LCB0byBhdm9pZCBwcm9ibGVtcwotCQkJICAgd2l0aCBvdGhlciBkcml2ZXJzIGFjY2Vzc2luZyBpdC4gKi8KLQkJCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJDeWNsYWRlcy1aIikgIT0gMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiY3ljbGFkZXM6IGZhaWxlZCB0byByZXNlcnZlICIKLQkJCQkJIlBDSSByZXNvdXJjZXNcbiIpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAobWFpbGJveCA9PSBaRV9WMSkgewotCQkJCWN5X3BjaV9hZGRyMiA9IGlvcmVtYXAoY3lfcGNpX3BoeXMyLAotCQkJCQkJQ3lQQ0lfWmVfd2luKTsKLQkJCQlpZiAoWmVJbmRleCA9PSBOUl9DQVJEUykgewotCQkJCQlwcmludGsoIkN5Y2xhZGVzLVplL1BDSSBmb3VuZCBhdCAiCi0JCQkJCQkiMHglbHggYnV0IG5vIG1vcmUgY2FyZHMgY2FuICIKLQkJCQkJCSJiZSB1c2VkLlxuQ2hhbmdlIE5SX0NBUkRTIGluICIKLQkJCQkJCSJjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUgIgotCQkJCQkJImtlcm5lbC5cbiIsCi0JCQkJCQkodWxvbmcpY3lfcGNpX3BoeXMyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlaZV9waHlzMFtaZUluZGV4XSA9IGN5X3BjaV9waHlzMDsKLQkJCQkJWmVfcGh5czJbWmVJbmRleF0gPSBjeV9wY2lfcGh5czI7Ci0JCQkJCVplX2FkZHIwW1plSW5kZXhdID0gY3lfcGNpX2FkZHIwOwotCQkJCQlaZV9hZGRyMltaZUluZGV4XSA9IGN5X3BjaV9hZGRyMjsKLQkJCQkJWmVfaXJxW1plSW5kZXhdID0gY3lfcGNpX2lycTsKLQkJCQkJWmVfcGRldltaZUluZGV4XSA9IHBkZXY7Ci0JCQkJCVplSW5kZXgrKzsKLQkJCQl9Ci0JCQkJaS0tOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQljeV9wY2lfYWRkcjIgPSBpb3JlbWFwKGN5X3BjaV9waHlzMixDeVBDSV9ad2luKTsKLQkJCX0KLQotI2lmZGVmIENZX1BDSV9ERUJVRwotCQkJcHJpbnRrKCJDeWNsYWRlcy1aL1BDSTogcmVsb2NhdGUgd2luYWRkcj0weCVseCAiCi0JCQkJImN0bGFkZHI9MHglbHhcbiIsCi0JCQkJKHVsb25nKSBjeV9wY2lfYWRkcjIsICh1bG9uZykgY3lfcGNpX2FkZHIwKTsKIAkJCWlmIChtYWlsYm94ID09IFpPX1YxKSB7Ci0JCQkJY3lfd3JpdGVsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgKikKLQkJCQkJKGN5X3BjaV9hZGRyMCkpLT5sb2NfYWRkcl9iYXNlLAotCQkJCQlXSU5fQ1JFRyk7Ci0JCQkJUEFVU0U7Ci0JCQkJcHJpbnRrKCJDeWNsYWRlcy04Wm8vUENJOiBGUEdBIGlkICVseCwgdmVyICIKLQkJCQkJIiVseFxuIiwgKHVsb25nKSAoMHhmZiAmCi0JCQkJCWN5X3JlYWRsKCYoKHN0cnVjdCBDVVNUT01fUkVHICopCi0JCQkJCQkoY3lfcGNpX2FkZHIyKSktPmZwZ2FfaWQpKSwKLQkJCQkJKHVsb25nKSgweGZmICYKLQkJCQkJY3lfcmVhZGwoJigoc3RydWN0IENVU1RPTV9SRUcgKikKLQkJCQkJCShjeV9wY2lfYWRkcjIpKS0+Ci0JCQkJCQkJZnBnYV92ZXJzaW9uKSkpOwotCQkJCWN5X3dyaXRlbCgmKChzdHJ1Y3QgUlVOVElNRV85MDYwICopCi0JCQkJCShjeV9wY2lfYWRkcjApKS0+bG9jX2FkZHJfYmFzZSwKLQkJCQkJV0lOX1JBTSk7CisJCQkJY3lfd3JpdGVsKCZjdGxfYWRkci0+bG9jX2FkZHJfYmFzZSwgV0lOX0NSRUcpOworCQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJDeWNsYWRlcy04Wm8vUENJOiBGUEdBICIKKwkJCQkJImlkICVseCwgdmVyICVseFxuIiwgKHVsb25nKSgweGZmICYKKwkJCQkJcmVhZGwoJigoc3RydWN0IENVU1RPTV9SRUcgKilhZGRyMiktPgorCQkJCQkJZnBnYV9pZCkpLCAodWxvbmcpKDB4ZmYgJgorCQkJCQlyZWFkbCgmKChzdHJ1Y3QgQ1VTVE9NX1JFRyAqKWFkZHIyKS0+CisJCQkJCQlmcGdhX3ZlcnNpb24pKSk7CisJCQkJY3lfd3JpdGVsKCZjdGxfYWRkci0+bG9jX2FkZHJfYmFzZSwgV0lOX1JBTSk7CiAJCQl9IGVsc2UgewotCQkJCXByaW50aygiQ3ljbGFkZXMtWi9QQ0k6IE5ldyBDeWNsYWRlcy1aIGJvYXJkLiAgIgotCQkJCQkJIkZQR0Egbm90IGxvYWRlZFxuIik7CisJCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkN5Y2xhZGVzLVovUENJOiBOZXcgIgorCQkJCQkiQ3ljbGFkZXMtWiBib2FyZC4gIEZQR0Egbm90IGxvYWRlZFxuIik7CiAJCQl9CiAjZW5kaWYKIAkJCS8qIFRoZSBmb2xsb3dpbmcgY2xlYXJzIHRoZSBmaXJtd2FyZSBpZCB3b3JkLiAgVGhpcwogCQkJICAgZW5zdXJlcyB0aGF0IHRoZSBkcml2ZXIgd2lsbCBub3QgYXR0ZW1wdCB0byB0YWxrIHRvCiAJCQkgICB0aGUgYm9hcmQgdW50aWwgaXQgaGFzIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQuCiAJCQkgKi8KLQkJCVBBVVNFOwogCQkJaWYgKChtYWlsYm94ID09IFpPX1YxKSB8fCAobWFpbGJveCA9PSBaT19WMikpCi0JCQkJY3lfd3JpdGVsKGN5X3BjaV9hZGRyMiArIElEX0FERFJFU1MsIDBMKTsKKwkJCQljeV93cml0ZWwoYWRkcjIgKyBJRF9BRERSRVNTLCAwTCk7CiAKIAkJCS8qIFRoaXMgbXVzdCBiZSBhIEN5Y2xhZGVzLThaby9QQ0kuICBUaGUgZXh0ZW5kYWJsZQogCQkJICAgdmVyc2lvbiB3aWxsIGhhdmUgYSBkaWZmZXJlbnQgZGV2aWNlX2lkIGFuZCB3aWxsCiAJCQkgICBiZSBhbGxvY2F0ZWQgaXRzIG1heGltdW0gbnVtYmVyIG9mIHBvcnRzLiAqLwotCQkJY3lfcGNpX25jaGFuID0gODsKLQotCQkJaWYgKChjeV9uZXh0X2NoYW5uZWwgKyBjeV9wY2lfbmNoYW4pID4gTlJfUE9SVFMpIHsKLQkJCQlwcmludGsoIkN5Y2xhZGVzLThaby9QQ0kgZm91bmQgYXQgMHglbHggYnV0IgotCQkJCQkibm8gY2hhbm5lbHMgYXJlIGF2YWlsYWJsZS5cbkNoYW5nZSAiCi0JCQkJCSJOUl9QT1JUUyBpbiBjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUgIgotCQkJCQkia2VybmVsLlxuIiwgKHVsb25nKWN5X3BjaV9waHlzMik7Ci0JCQkJcmV0dXJuIGk7Ci0JCQl9Ci0KLQkJCS8qIGZpbGwgdGhlIG5leHQgY3lfY2FyZCBzdHJ1Y3R1cmUgYXZhaWxhYmxlICovCi0JCQlmb3IgKGogPSAwOyBqIDwgTlJfQ0FSRFM7IGorKykgewotCQkJCWlmIChjeV9jYXJkW2pdLmJhc2VfYWRkciA9PSAwKQotCQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChqID09IE5SX0NBUkRTKSB7CS8qIG5vIG1vcmUgY3lfY2FyZHMgYXZhaWxhYmxlICovCi0JCQkJcHJpbnRrKCJDeWNsYWRlcy04Wm8vUENJIGZvdW5kIGF0IDB4JWx4IGJ1dCIKLQkJCQkJIm5vIG1vcmUgY2FyZHMgY2FuIGJlIHVzZWQuXG5DaGFuZ2UgIgotCQkJCQkiTlJfQ0FSRFMgaW4gY3ljbGFkZXMuYyBhbmQgcmVjb21waWxlICIKLQkJCQkJImtlcm5lbC5cbiIsICh1bG9uZyljeV9wY2lfcGh5czIpOwotCQkJCXJldHVybiBpOwotCQkJfQotI2lmZGVmIENPTkZJR19DWVpfSU5UUgotCQkJLyogYWxsb2NhdGUgSVJRIG9ubHkgaWYgYm9hcmQgaGFzIGFuIElSUSAqLwotCQkJaWYgKChjeV9wY2lfaXJxICE9IDApICYmIChjeV9wY2lfaXJxICE9IDI1NSkpIHsKLQkJCQlpZiAocmVxdWVzdF9pcnEoY3lfcGNpX2lycSwgY3l6X2ludGVycnVwdCwKLQkJCQkJCUlSUUZfU0hBUkVELCAiQ3ljbGFkZXMtWiIsCi0JCQkJCQkmY3lfY2FyZFtqXSkpIHsKLQkJCQkJcHJpbnRrKCJDeWNsb20tOFpvL1BDSSBmb3VuZCBhdCAweCVseCAiCi0JCQkJCQkiYnV0IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCi0JCQkJCQkiSVJRJWQuXG4iLCAodWxvbmcpY3lfcGNpX3BoeXMyLAotCQkJCQkJY3lfcGNpX2lycSk7Ci0JCQkJCXJldHVybiBpOwotCQkJCX0KLQkJCX0KLSNlbmRpZgkJCQkvKiBDT05GSUdfQ1laX0lOVFIgKi8KLQotCQkJLyogc2V0IGN5X2NhcmQgKi8KLQkJCWN5X2NhcmRbal0uYmFzZV9waHlzID0gY3lfcGNpX3BoeXMyOwotCQkJY3lfY2FyZFtqXS5jdGxfcGh5cyA9IGN5X3BjaV9waHlzMDsKLQkJCWN5X2NhcmRbal0uYmFzZV9hZGRyID0gY3lfcGNpX2FkZHIyOwotCQkJY3lfY2FyZFtqXS5jdGxfYWRkciA9IGN5X3BjaV9hZGRyMDsKLQkJCWN5X2NhcmRbal0uaXJxID0gKGludCljeV9wY2lfaXJxOwotCQkJY3lfY2FyZFtqXS5idXNfaW5kZXggPSAxOwotCQkJY3lfY2FyZFtqXS5maXJzdF9saW5lID0gY3lfbmV4dF9jaGFubmVsOwotCQkJY3lfY2FyZFtqXS5udW1fY2hpcHMgPSAtMTsKLQkJCWN5X2NhcmRbal0ucGRldiA9IHBkZXY7Ci0KLQkJCS8qIHByaW50IG1lc3NhZ2UgKi8KLSNpZmRlZiBDT05GSUdfQ1laX0lOVFIKLQkJCS8qIGRvbid0IHJlcG9ydCBJUlEgaWYgYm9hcmQgaXMgbm8gSVJRICovCi0JCQlpZiAoKGN5X3BjaV9pcnEgIT0gMCkgJiYgKGN5X3BjaV9pcnEgIT0gMjU1KSkKLQkJCQlwcmludGsoIkN5Y2xhZGVzLThaby9QQ0kgIyVkOiAweCVseC0weCVseCwgIgotCQkJCQkiSVJRJWQsICIsIGogKyAxLCAodWxvbmcpY3lfcGNpX3BoeXMyLAotCQkJCQkodWxvbmcpIChjeV9wY2lfcGh5czIgKyBDeVBDSV9ad2luIC0gMSksCi0JCQkJCShpbnQpY3lfcGNpX2lycSk7Ci0JCQllbHNlCi0jZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCi0JCQkJcHJpbnRrKCJDeWNsYWRlcy04Wm8vUENJICMlZDogMHglbHgtMHglbHgsICIsCi0JCQkJCWogKyAxLCAodWxvbmcpY3lfcGNpX3BoeXMyLAotCQkJCQkodWxvbmcpKGN5X3BjaV9waHlzMiArIEN5UENJX1p3aW4gLSAxKSk7Ci0KLQkJCXByaW50aygiJWQgY2hhbm5lbHMgc3RhcnRpbmcgZnJvbSBwb3J0ICVkLlxuIiwKLQkJCQkJY3lfcGNpX25jaGFuLCBjeV9uZXh0X2NoYW5uZWwpOwotCQkJY3lfbmV4dF9jaGFubmVsICs9IGN5X3BjaV9uY2hhbjsKKwkJCW5jaGFuID0gODsKIAkJfQogCX0KIAotCWZvciAoOyBaZUluZGV4ICE9IDAgJiYgaSA8IE5SX0NBUkRTOyBpKyspIHsKLQkJY3lfcGNpX3BoeXMwID0gWmVfcGh5czBbMF07Ci0JCWN5X3BjaV9waHlzMiA9IFplX3BoeXMyWzBdOwotCQljeV9wY2lfYWRkcjAgPSBaZV9hZGRyMFswXTsKLQkJY3lfcGNpX2FkZHIyID0gWmVfYWRkcjJbMF07Ci0JCWN5X3BjaV9pcnEgPSBaZV9pcnFbMF07Ci0JCXBkZXYgPSBaZV9wZGV2WzBdOwotCQlmb3IgKGogPSAwOyBqIDwgWmVJbmRleCAtIDE7IGorKykgewotCQkJWmVfcGh5czBbal0gPSBaZV9waHlzMFtqICsgMV07Ci0JCQlaZV9waHlzMltqXSA9IFplX3BoeXMyW2ogKyAxXTsKLQkJCVplX2FkZHIwW2pdID0gWmVfYWRkcjBbaiArIDFdOwotCQkJWmVfYWRkcjJbal0gPSBaZV9hZGRyMltqICsgMV07Ci0JCQlaZV9pcnFbal0gPSBaZV9pcnFbaiArIDFdOwotCQkJWmVfcGRldltqXSA9IFplX3BkZXZbaiArIDFdOwotCQl9Ci0JCVplSW5kZXgtLTsKLQkJbWFpbGJveCA9ICh1Y2xvbmcpY3lfcmVhZGwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopCi0JCQkJCQljeV9wY2lfYWRkcjApLT5tYWlsX2JveF8wKTsKLSNpZmRlZiBDWV9QQ0lfREVCVUcKLQkJcHJpbnRrKCJDeWNsYWRlcy1aL1BDSTogcmVsb2NhdGUgd2luYWRkcj0weCVseCBjdGxhZGRyPTB4JWx4XG4iLAotCQkJKHVsb25nKWN5X3BjaV9hZGRyMiwgKHVsb25nKWN5X3BjaV9hZGRyMCk7Ci0JCXByaW50aygiQ3ljbGFkZXMtWi9QQ0k6IE5ldyBDeWNsYWRlcy1aIGJvYXJkLiAgRlBHQSBub3QgIgotCQkJCSJsb2FkZWRcbiIpOwotI2VuZGlmCi0JCVBBVVNFOwotCQkvKiBUaGlzIG11c3QgYmUgdGhlIG5ldyBDeWNsYWRlcy1aZS9QQ0kuICovCi0JCWN5X3BjaV9uY2hhbiA9IFpFX1YxX05QT1JUUzsKKwlpZiAoKGN5X25leHRfY2hhbm5lbCArIG5jaGFuKSA+IE5SX1BPUlRTKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkN5Y2xhZGVzLThaby9QQ0kgZm91bmQsIGJ1dCBubyAiCisJCQkiY2hhbm5lbHMgYXJlIGF2YWlsYWJsZS4gQ2hhbmdlIE5SX1BPUlRTIGluICIKKwkJCSJjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUga2VybmVsLlxuIik7CisJCWdvdG8gZXJyX3VubWFwOworCX0KKwkvKiBmaWxsIHRoZSBuZXh0IGN5X2NhcmQgc3RydWN0dXJlIGF2YWlsYWJsZSAqLworCWZvciAoY2FyZF9ubyA9IDA7IGNhcmRfbm8gPCBOUl9DQVJEUzsgY2FyZF9ubysrKSB7CisJCWlmIChjeV9jYXJkW2NhcmRfbm9dLmJhc2VfYWRkciA9PSBOVUxMKQorCQkJYnJlYWs7CisJfQorCWlmIChjYXJkX25vID09IE5SX0NBUkRTKSB7CS8qIG5vIG1vcmUgY3lfY2FyZHMgYXZhaWxhYmxlICovCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkN5Y2xhZGVzLThaby9QQ0kgZm91bmQsIGJ1dCBubyAiCisJCQkibW9yZSBjYXJkcyBjYW4gYmUgdXNlZC4gQ2hhbmdlIE5SX0NBUkRTIGluICIKKwkJCSJjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUga2VybmVsLlxuIik7CisJCWdvdG8gZXJyX3VubWFwOworCX0KIAotCQlpZiAoKGN5X25leHRfY2hhbm5lbCArIGN5X3BjaV9uY2hhbikgPiBOUl9QT1JUUykgewotCQkJcHJpbnRrKCJDeWNsYWRlcy1aZS9QQ0kgZm91bmQgYXQgMHglbHggYnV0IG5vIGNoYW5uZWxzICIKLQkJCQkiYXJlIGF2YWlsYWJsZS5cbkNoYW5nZSBOUl9QT1JUUyBpbiBjeWNsYWRlcy5jICIKLQkJCQkiYW5kIHJlY29tcGlsZSBrZXJuZWwuXG4iLAotCQkJCSh1bG9uZykgY3lfcGNpX3BoeXMyKTsKLQkJCXJldHVybiBpOworCWlmIChkZXZpY2VfaWQgPT0gUENJX0RFVklDRV9JRF9DWUNMT01fWV9MbyB8fAorCQkJZGV2aWNlX2lkID09IFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfSGkpIHsKKwkJLyogYWxsb2NhdGUgSVJRICovCisJCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgY3l5X2ludGVycnVwdCwKKwkJCQlJUlFGX1NIQVJFRCwgIkN5Y2xvbS1ZIiwgJmN5X2NhcmRbY2FyZF9ub10pOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgSVJRXG4iKTsKKwkJCWdvdG8gZXJyX3VubWFwOwogCQl9Ci0KLQkJLyogZmlsbCB0aGUgbmV4dCBjeV9jYXJkIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8KLQkJZm9yIChqID0gMDsgaiA8IE5SX0NBUkRTOyBqKyspIHsKLQkJCWlmIChjeV9jYXJkW2pdLmJhc2VfYWRkciA9PSAwKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChqID09IE5SX0NBUkRTKSB7CS8qIG5vIG1vcmUgY3lfY2FyZHMgYXZhaWxhYmxlICovCi0JCQlwcmludGsoIkN5Y2xhZGVzLVplL1BDSSBmb3VuZCBhdCAweCVseCBidXQgbm8gbW9yZSAiCi0JCQkJImNhcmRzIGNhbiBiZSB1c2VkLlxuQ2hhbmdlIE5SX0NBUkRTIGluICIKLQkJCQkiY3ljbGFkZXMuYyBhbmQgcmVjb21waWxlIGtlcm5lbC5cbiIsCi0JCQkJKHVsb25nKSBjeV9wY2lfcGh5czIpOwotCQkJcmV0dXJuIGk7Ci0JCX0KKwkJY3lfY2FyZFtjYXJkX25vXS5udW1fY2hpcHMgPSBuY2hhbiAvIDQ7CisJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfQ1laX0lOVFIKIAkJLyogYWxsb2NhdGUgSVJRIG9ubHkgaWYgYm9hcmQgaGFzIGFuIElSUSAqLwotCQlpZiAoKGN5X3BjaV9pcnEgIT0gMCkgJiYgKGN5X3BjaV9pcnEgIT0gMjU1KSkgewotCQkJaWYgKHJlcXVlc3RfaXJxKGN5X3BjaV9pcnEsIGN5el9pbnRlcnJ1cHQsCisJCWlmIChpcnEgIT0gMCAmJiBpcnEgIT0gMjU1KSB7CisJCQlyZXR2YWwgPSByZXF1ZXN0X2lycShpcnEsIGN5el9pbnRlcnJ1cHQsCiAJCQkJCUlSUUZfU0hBUkVELCAiQ3ljbGFkZXMtWiIsCi0JCQkJCSZjeV9jYXJkW2pdKSkgewotCQkJCXByaW50aygiQ3ljbG9tLVplL1BDSSBmb3VuZCBhdCAweCVseCAiLAotCQkJCQkodWxvbmcpIGN5X3BjaV9waHlzMik7Ci0JCQkJcHJpbnRrKCJidXQgY291bGQgbm90IGFsbG9jYXRlIElSUSVkLlxuIiwKLQkJCQkJY3lfcGNpX2lycSk7Ci0JCQkJcmV0dXJuIGk7CisJCQkJCSZjeV9jYXJkW2NhcmRfbm9dKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgSVJRXG4iKTsKKwkJCQlnb3RvIGVycl91bm1hcDsKIAkJCX0KIAkJfQogI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLwotCi0JCS8qIHNldCBjeV9jYXJkICovCi0JCWN5X2NhcmRbal0uYmFzZV9waHlzID0gY3lfcGNpX3BoeXMyOwotCQljeV9jYXJkW2pdLmN0bF9waHlzID0gY3lfcGNpX3BoeXMwOwotCQljeV9jYXJkW2pdLmJhc2VfYWRkciA9IGN5X3BjaV9hZGRyMjsKLQkJY3lfY2FyZFtqXS5jdGxfYWRkciA9IGN5X3BjaV9hZGRyMDsKLQkJY3lfY2FyZFtqXS5pcnEgPSAoaW50KWN5X3BjaV9pcnE7Ci0JCWN5X2NhcmRbal0uYnVzX2luZGV4ID0gMTsKLQkJY3lfY2FyZFtqXS5maXJzdF9saW5lID0gY3lfbmV4dF9jaGFubmVsOwotCQljeV9jYXJkW2pdLm51bV9jaGlwcyA9IC0xOwotCQljeV9jYXJkW2pdLnBkZXYgPSBwZGV2OwotCi0JCS8qIHByaW50IG1lc3NhZ2UgKi8KLSNpZmRlZiBDT05GSUdfQ1laX0lOVFIKLQkJLyogZG9uJ3QgcmVwb3J0IElSUSBpZiBib2FyZCBpcyBubyBJUlEgKi8KLQkJaWYgKChjeV9wY2lfaXJxICE9IDApICYmIChjeV9wY2lfaXJxICE9IDI1NSkpCi0JCQlwcmludGsoIkN5Y2xhZGVzLVplL1BDSSAjJWQ6IDB4JWx4LTB4JWx4LCBJUlElZCwgIiwKLQkJCQlqICsgMSwgKHVsb25nKSBjeV9wY2lfcGh5czIsCi0JCQkJKHVsb25nKSAoY3lfcGNpX3BoeXMyICsgQ3lQQ0lfWmVfd2luIC0gMSksCi0JCQkJKGludCljeV9wY2lfaXJxKTsKLQkJZWxzZQotI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLwotCQkJcHJpbnRrKCJDeWNsYWRlcy1aZS9QQ0kgIyVkOiAweCVseC0weCVseCwgIiwKLQkJCQlqICsgMSwgKHVsb25nKSBjeV9wY2lfcGh5czIsCi0JCQkJKHVsb25nKSAoY3lfcGNpX3BoeXMyICsgQ3lQQ0lfWmVfd2luIC0gMSkpOwotCi0JCXByaW50aygiJWQgY2hhbm5lbHMgc3RhcnRpbmcgZnJvbSBwb3J0ICVkLlxuIiwKLQkJCWN5X3BjaV9uY2hhbiwgY3lfbmV4dF9jaGFubmVsKTsKLQkJY3lfbmV4dF9jaGFubmVsICs9IGN5X3BjaV9uY2hhbjsKKwkJY3lfY2FyZFtjYXJkX25vXS5udW1fY2hpcHMgPSAtMTsKIAl9Ci0JaWYgKFplSW5kZXggIT0gMCkgewotCQlwcmludGsoIkN5Y2xhZGVzLVplL1BDSSBmb3VuZCBhdCAweCV4IGJ1dCBubyBtb3JlIGNhcmRzIGNhbiBiZSAiCi0JCQkidXNlZC5cbkNoYW5nZSBOUl9DQVJEUyBpbiBjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUgIgotCQkJImtlcm5lbC5cbiIsICh1bnNpZ25lZCBpbnQpWmVfcGh5czJbMF0pOworCisJLyogc2V0IGN5X2NhcmQgKi8KKwljeV9jYXJkW2NhcmRfbm9dLmJhc2VfYWRkciA9IGFkZHIyOworCWN5X2NhcmRbY2FyZF9ub10uY3RsX2FkZHIgPSBhZGRyMDsKKwljeV9jYXJkW2NhcmRfbm9dLmlycSA9IGlycTsKKwljeV9jYXJkW2NhcmRfbm9dLmJ1c19pbmRleCA9IDE7CisJY3lfY2FyZFtjYXJkX25vXS5maXJzdF9saW5lID0gY3lfbmV4dF9jaGFubmVsOworCXJldHZhbCA9IGN5X2luaXRfY2FyZCgmY3lfY2FyZFtjYXJkX25vXSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfbnVsbDsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCAmY3lfY2FyZFtjYXJkX25vXSk7CisKKwlpZiAoZGV2aWNlX2lkID09IFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfTG8gfHwKKwkJCWRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9ZX0hpKSB7CisJCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGluIHRoZSBQQ0kgaW50ZXJmYWNlICovCisJCXBseF92ZXIgPSByZWFkYihhZGRyMiArIEN5UExYX1ZFUikgJiAweDBmOworCQlzd2l0Y2ggKHBseF92ZXIpIHsKKwkJY2FzZSBQTFhfOTA1MDoKKworCQkJY3lfd3JpdGViKGFkZHIwICsgMHg0YywgMHg0Myk7CisJCQlicmVhazsKKworCQljYXNlIFBMWF85MDYwOgorCQljYXNlIFBMWF85MDgwOgorCQlkZWZhdWx0OgkvKiBPbGQgYm9hcmRzLCB1c2UgUExYXzkwNjAgKi8KKworCQkJcGx4X2luaXQoYWRkcjAsIDB4NmMpOworCQkvKiBGb3Igc29tZSB5ZXQgdW5rbm93biByZWFzb24sIG9uY2UgdGhlIFBMWDkwNjAgcmVsb2FkcworCQkgICB0aGUgRUVQUk9NLCB0aGUgSVJRIGlzIGxvc3QgYW5kLCB0aHVzLCB3ZSBoYXZlIHRvCisJCSAgIHJlLXdyaXRlIGl0IHRvIHRoZSBQQ0kgY29uZmlnLiByZWdpc3RlcnMuCisJCSAgIFRoaXMgd2lsbCByZW1haW4gaGVyZSB1bnRpbCB3ZSBmaW5kIGEgcGVybWFuZW50CisJCSAgIGZpeC4gKi8KKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIGlycSk7CisKKwkJCWN5X3dyaXRldyhhZGRyMCArIDB4NjgsIHJlYWR3KGFkZHIwICsgMHg2OCkgfCAweDA5MDApOworCQkJYnJlYWs7CisJCX0KIAl9Ci0JcmV0dXJuIGk7Ci0jZWxzZQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzL1BDSSAjJWQgZm91bmQ6ICVkIGNoYW5uZWxzIHN0YXJ0aW5nIGZyb20gIgorCQkicG9ydCAlZC5cbiIsIGNhcmRfbmFtZSwgY2FyZF9ubyArIDEsIG5jaGFuLCBjeV9uZXh0X2NoYW5uZWwpOworCWZvciAoaSA9IGN5X25leHRfY2hhbm5lbDsgaSA8IGN5X25leHRfY2hhbm5lbCArIG5jaGFuOyBpKyspCisJCXR0eV9yZWdpc3Rlcl9kZXZpY2UoY3lfc2VyaWFsX2RyaXZlciwgaSwgJnBkZXYtPmRldik7CisJY3lfbmV4dF9jaGFubmVsICs9IG5jaGFuOworCiAJcmV0dXJuIDA7Ci0jZW5kaWYJCQkJLyogaWZkZWYgQ09ORklHX1BDSSAqLwotfQkJCQkvKiBjeV9kZXRlY3RfcGNpICovCitlcnJfbnVsbDoKKwljeV9jYXJkW2NhcmRfbm9dLmJhc2VfYWRkciA9IE5VTEw7CisJZnJlZV9pcnEoaXJxLCAmY3lfY2FyZFtjYXJkX25vXSk7CitlcnJfdW5tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgYWRkcjApOworCWlmIChhZGRyMikKKwkJcGNpX2lvdW5tYXAocGRldiwgYWRkcjIpOworZXJyX3JlZzoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyX2RpczoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitlcnI6CisJcmV0dXJuIHJldHZhbDsKK30KIAotLyoKLSAqIFRoaXMgcm91dGluZSBwcmludHMgb3V0IHRoZSBhcHByb3ByaWF0ZSBzZXJpYWwgZHJpdmVyIHZlcnNpb24gbnVtYmVyCi0gKiBhbmQgaWRlbnRpZmllcyB3aGljaCBvcHRpb25zIHdlcmUgY29uZmlndXJlZCBpbnRvIHRoaXMgZHJpdmVyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2hvd192ZXJzaW9uKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgY3lfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlwcmludGsoIkN5Y2xhZGVzIGRyaXZlciAiIENZX1ZFUlNJT04gIlxuIik7Ci0JcHJpbnRrKCIgICAgICAgIGJ1aWx0ICVzICVzXG4iLCBfX0RBVEVfXywgX19USU1FX18pOwotfQkJCQkvKiBzaG93X3ZlcnNpb24gKi8KKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBub24tWiB3aXRoIG9sZCBQTFggKi8KKwlpZiAoIUlTX0NZQ19aKCpjaW5mbykgJiYgKHJlYWRiKGNpbmZvLT5iYXNlX2FkZHIgKyBDeVBMWF9WRVIpICYgMHgwZikgPT0KKwkJCVBMWF85MDUwKQorCQljeV93cml0ZWIoY2luZm8tPmN0bF9hZGRyICsgMHg0YywgMCk7CisJZWxzZQorI2lmbmRlZiBDT05GSUdfQ1laX0lOVFIKKwkJaWYgKCFJU19DWUNfWigqY2luZm8pKQorI2VuZGlmCisJCWN5X3dyaXRldyhjaW5mby0+Y3RsX2FkZHIgKyAweDY4LAorCQkJCXJlYWR3KGNpbmZvLT5jdGxfYWRkciArIDB4NjgpICYgfjB4MDkwMCk7CisKKwlwY2lfaW91bm1hcChwZGV2LCBjaW5mby0+YmFzZV9hZGRyKTsKKwlpZiAoY2luZm8tPmN0bF9hZGRyKQorCQlwY2lfaW91bm1hcChwZGV2LCBjaW5mby0+Y3RsX2FkZHIpOworCWlmIChjaW5mby0+aXJxCisjaWZuZGVmIENPTkZJR19DWVpfSU5UUgorCQkmJiAhSVNfQ1lDX1ooKmNpbmZvKQorI2VuZGlmIC8qIENPTkZJR19DWVpfSU5UUiAqLworCQkpCisJCWZyZWVfaXJxKGNpbmZvLT5pcnEsIGNpbmZvKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCisJY2luZm8tPmJhc2VfYWRkciA9IE5VTEw7CisJZm9yIChpID0gY2luZm8tPmZpcnN0X2xpbmU7IGkgPCBjaW5mby0+Zmlyc3RfbGluZSArCisJCQljaW5mby0+bnBvcnRzOyBpKyspCisJCXR0eV91bnJlZ2lzdGVyX2RldmljZShjeV9zZXJpYWxfZHJpdmVyLCBpKTsKKwljaW5mby0+bnBvcnRzID0gMDsKKwlrZnJlZShjaW5mby0+cG9ydHMpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY3lfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjeWNsYWRlcyIsCisJLmlkX3RhYmxlID0gY3lfcGNpX2Rldl9pZCwKKwkucHJvYmUgPSBjeV9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGN5X3BjaV9yZW1vdmUpCit9OworI2VuZGlmCiAKIHN0YXRpYyBpbnQKIGN5Y2xhZGVzX2dldF9wcm9jX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwKIAkJaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm87Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGksIGo7CiAJaW50IGxlbiA9IDA7CiAJb2ZmX3QgYmVnaW4gPSAwOwogCW9mZl90IHBvcyA9IDA7CkBAIC01MjM4LDMzICs1MDU1LDM0IEBACiAJbGVuICs9IHNpemU7CiAKIAkvKiBPdXRwdXQgb25lIGxpbmUgZm9yIGVhY2gga25vd24gcG9ydCAqLwotCWZvciAoaSA9IDA7IGkgPCBOUl9QT1JUUyAmJiBjeV9wb3J0W2ldLmxpbmUgPj0gMDsgaSsrKSB7Ci0JCWluZm8gPSAmY3lfcG9ydFtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ0FSRFM7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IGN5X2NhcmRbaV0ubnBvcnRzOyBqKyspIHsKKwkJCWluZm8gPSAmY3lfY2FyZFtpXS5wb3J0c1tqXTsKIAotCQlpZiAoaW5mby0+Y291bnQpCi0JCQlzaXplID0gc3ByaW50ZihidWYgKyBsZW4sICIlM2QgJThsdSAlMTBsdSAlOGx1ICUxMGx1ICIKLQkJCQkiJThsdSAlOWx1ICU2bGRcbiIsIGluZm8tPmxpbmUsCi0JCQkJKGN1cl9qaWZzIC0gaW5mby0+aWRsZV9zdGF0cy5pbl91c2UpIC8gSFosCi0JCQkJaW5mby0+aWRsZV9zdGF0cy54bWl0X2J5dGVzLAotCQkJCShjdXJfamlmcyAtIGluZm8tPmlkbGVfc3RhdHMueG1pdF9pZGxlKSAvIEhaLAotCQkJCWluZm8tPmlkbGVfc3RhdHMucmVjdl9ieXRlcywKLQkJCQkoY3VyX2ppZnMgLSBpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfaWRsZSkgLyBIWiwKLQkJCQlpbmZvLT5pZGxlX3N0YXRzLm92ZXJydW5zLAotCQkJCShsb25nKWluZm8tPnR0eS0+bGRpc2MubnVtKTsKLQkJZWxzZQotCQkJc2l6ZSA9IHNwcmludGYoYnVmICsgbGVuLCAiJTNkICU4bHUgJTEwbHUgJThsdSAlMTBsdSAiCi0JCQkJIiU4bHUgJTlsdSAlNmxkXG4iLAotCQkJCWluZm8tPmxpbmUsIDBMLCAwTCwgMEwsIDBMLCAwTCwgMEwsIDBMKTsKLQkJbGVuICs9IHNpemU7Ci0JCXBvcyA9IGJlZ2luICsgbGVuOworCQkJaWYgKGluZm8tPmNvdW50KQorCQkJCXNpemUgPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUzZCAlOGx1ICUxMGx1ICU4bHUgIgorCQkJCQkiJTEwbHUgJThsdSAlOWx1ICU2bGRcbiIsIGluZm8tPmxpbmUsCisJCQkJCShjdXJfamlmcyAtIGluZm8tPmlkbGVfc3RhdHMuaW5fdXNlKSAvCisJCQkJCUhaLCBpbmZvLT5pZGxlX3N0YXRzLnhtaXRfYnl0ZXMsCisJCQkJCShjdXJfamlmcyAtIGluZm8tPmlkbGVfc3RhdHMueG1pdF9pZGxlKS8KKwkJCQkJSFosIGluZm8tPmlkbGVfc3RhdHMucmVjdl9ieXRlcywKKwkJCQkJKGN1cl9qaWZzIC0gaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUpLworCQkJCQlIWiwgaW5mby0+aWRsZV9zdGF0cy5vdmVycnVucywKKwkJCQkJKGxvbmcpaW5mby0+dHR5LT5sZGlzYy5udW0pOworCQkJZWxzZQorCQkJCXNpemUgPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUzZCAlOGx1ICUxMGx1ICU4bHUgIgorCQkJCQkiJTEwbHUgJThsdSAlOWx1ICU2bGRcbiIsCisJCQkJCWluZm8tPmxpbmUsIDBMLCAwTCwgMEwsIDBMLCAwTCwgMEwsIDBMKTsKKwkJCWxlbiArPSBzaXplOworCQkJcG9zID0gYmVnaW4gKyBsZW47CiAKLQkJaWYgKHBvcyA8IG9mZnNldCkgewotCQkJbGVuID0gMDsKLQkJCWJlZ2luID0gcG9zOworCQkJaWYgKHBvcyA8IG9mZnNldCkgeworCQkJCWxlbiA9IDA7CisJCQkJYmVnaW4gPSBwb3M7CisJCQl9CisJCQlpZiAocG9zID4gb2Zmc2V0ICsgbGVuZ3RoKQorCQkJCWdvdG8gZG9uZTsKIAkJfQotCQlpZiAocG9zID4gb2Zmc2V0ICsgbGVuZ3RoKQotCQkJZ290byBkb25lOwotCX0KIAkqZW9mID0gMTsKIGRvbmU6CiAJKnN0YXJ0ID0gYnVmICsgKG9mZnNldCAtIGJlZ2luKTsJLyogU3RhcnQgb2Ygd2FudGVkIGRhdGEgKi8KQEAgLTUzMTksMTggKzUxMzcsMTUgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3lfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvOwotCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbzsKLQlpbnQgbnVtYmVyX3pfYm9hcmRzID0gMDsKLQlpbnQgYm9hcmQsIHBvcnQsIGksIGluZGV4OwotCXVuc2lnbmVkIGxvbmcgbWFpbGJveDsKLQl1bnNpZ25lZCBzaG9ydCBjaGlwX251bWJlcjsKLQlpbnQgbnBvcnRzOworCXVuc2lnbmVkIGludCBuYm9hcmRzOworCWludCByZXR2YWwgPSAtRU5PTUVNOwogCiAJY3lfc2VyaWFsX2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoTlJfUE9SVFMpOwogCWlmICghY3lfc2VyaWFsX2RyaXZlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jc2hvd192ZXJzaW9uKCk7CisJCWdvdG8gZXJyOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ3ljbGFkZXMgZHJpdmVyICIgQ1lfVkVSU0lPTiAiIChidWlsdCAlcyAlcylcbiIsCisJCQlfX0RBVEVfXywgX19USU1FX18pOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgdHR5X2RyaXZlciBzdHJ1Y3R1cmUgKi8KIApAQCAtNTM0NCwxNSArNTE1OSwxMyBAQAogCWN5X3NlcmlhbF9kcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKIAljeV9zZXJpYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9CiAJICAgIEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKLQljeV9zZXJpYWxfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVc7CisJY3lfc2VyaWFsX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKIAl0dHlfc2V0X29wZXJhdGlvbnMoY3lfc2VyaWFsX2RyaXZlciwgJmN5X29wcyk7CiAKLQlpZiAodHR5X3JlZ2lzdGVyX2RyaXZlcihjeV9zZXJpYWxfZHJpdmVyKSkKLQkJcGFuaWMoIkNvdWxkbid0IHJlZ2lzdGVyIEN5Y2xhZGVzIHNlcmlhbCBkcml2ZXJcbiIpOwotCi0JZm9yIChpID0gMDsgaSA8IE5SX0NBUkRTOyBpKyspIHsKLQkJLyogYmFzZV9hZGRyPTAgaW5kaWNhdGVzIGJvYXJkIG5vdCBmb3VuZCAqLwotCQljeV9jYXJkW2ldLmJhc2VfYWRkciA9IE5VTEw7CisJcmV0dmFsID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihjeV9zZXJpYWxfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgcmVnaXN0ZXIgQ3ljbGFkZXMgc2VyaWFsIGRyaXZlclxuIik7CisJCWdvdG8gZXJyX2ZydHR5OwogCX0KIAogCS8qIHRoZSBjb2RlIGJlbG93IGlzIHJlc3BvbnNpYmxlIHRvIGZpbmQgdGhlIGJvYXJkcy4gRWFjaCBkaWZmZXJlbnQKQEAgLTUzNjMsMjIzICs1MTc2LDY4IEBACiAJICAgdGhlIGN5X25leHRfY2hhbm5lbC4gKi8KIAogCS8qIGxvb2sgZm9yIGlzYSBib2FyZHMgKi8KLQljeV9pc2FfbmJvYXJkID0gY3lfZGV0ZWN0X2lzYSgpOworCW5ib2FyZHMgPSBjeV9kZXRlY3RfaXNhKCk7CiAKKyNpZmRlZiBDT05GSUdfUENJCiAJLyogbG9vayBmb3IgcGNpIGJvYXJkcyAqLwotCWN5X3BjaV9uYm9hcmQgPSBjeV9kZXRlY3RfcGNpKCk7Ci0KLQljeV9uYm9hcmQgPSBjeV9pc2FfbmJvYXJkICsgY3lfcGNpX25ib2FyZDsKLQotCS8qIGludmFsaWRhdGUgcmVtYWluaW5nIGN5X2NhcmQgc3RydWN0dXJlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBOUl9DQVJEUzsgaSsrKSB7Ci0JCWlmIChjeV9jYXJkW2ldLmJhc2VfYWRkciA9PSAwKSB7Ci0JCQljeV9jYXJkW2ldLmZpcnN0X2xpbmUgPSAtMTsKLQkJCWN5X2NhcmRbaV0uY3RsX2FkZHIgPSBOVUxMOwotCQkJY3lfY2FyZFtpXS5pcnEgPSAwOwotCQkJY3lfY2FyZFtpXS5idXNfaW5kZXggPSAwOwotCQkJY3lfY2FyZFtpXS5maXJzdF9saW5lID0gMDsKLQkJCWN5X2NhcmRbaV0ubnVtX2NoaXBzID0gMDsKLQkJfQotCX0KLQkvKiBpbnZhbGlkYXRlIHJlbWFpbmluZyBjeV9wb3J0IHN0cnVjdHVyZXMgKi8KLQlmb3IgKGkgPSBjeV9uZXh0X2NoYW5uZWw7IGkgPCBOUl9QT1JUUzsgaSsrKSB7Ci0JCWN5X3BvcnRbaV0ubGluZSA9IC0xOwotCQljeV9wb3J0W2ldLm1hZ2ljID0gLTE7Ci0JfQotCi0JLyogaW5pdGlhbGl6ZSBwZXItcG9ydCBkYXRhIHN0cnVjdHVyZXMgZm9yIGVhY2ggdmFsaWQgYm9hcmQgZm91bmQgKi8KLQlmb3IgKGJvYXJkID0gMDsgYm9hcmQgPCBjeV9uYm9hcmQ7IGJvYXJkKyspIHsKLQkJY2luZm8gPSAmY3lfY2FyZFtib2FyZF07Ci0JCWlmIChjaW5mby0+bnVtX2NoaXBzID09IC0xKSB7CS8qIEN5Y2xhZGVzLVogKi8KLQkJCW51bWJlcl96X2JvYXJkcysrOwotCQkJbWFpbGJveCA9IGN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKQotCQkJCQkgICAgIGN5X2NhcmRbYm9hcmRdLmN0bF9hZGRyKS0+Ci0JCQkJCSAgIG1haWxfYm94XzApOwotCQkJbnBvcnRzID0gKG1haWxib3ggPT0gWkVfVjEpID8gWkVfVjFfTlBPUlRTIDogODsKLQkJCWNpbmZvLT5pbnRyX2VuYWJsZWQgPSAwOwotCQkJY2luZm8tPm5wb3J0cyA9IDA7CS8qIFdpbGwgYmUgY29ycmVjdGx5IHNldCBsYXRlciwgYWZ0ZXIgCi0JCQkJCQkgICBaIEZXIGlzIGxvYWRlZCAqLwotCQkJc3Bpbl9sb2NrX2luaXQoJmNpbmZvLT5jYXJkX2xvY2spOwotCQkJZm9yIChwb3J0ID0gY2luZm8tPmZpcnN0X2xpbmU7Ci0JCQkgICAgIHBvcnQgPCBjaW5mby0+Zmlyc3RfbGluZSArIG5wb3J0czsgcG9ydCsrKSB7Ci0JCQkJaW5mbyA9ICZjeV9wb3J0W3BvcnRdOwotCQkJCWluZm8tPm1hZ2ljID0gQ1lDTEFERVNfTUFHSUM7Ci0JCQkJaW5mby0+dHlwZSA9IFBPUlRfU1RBUlRFQ0g7Ci0JCQkJaW5mby0+Y2FyZCA9IGJvYXJkOwotCQkJCWluZm8tPmxpbmUgPSBwb3J0OwotCQkJCWluZm8tPmNoaXBfcmV2ID0gMDsKLQkJCQlpbmZvLT5mbGFncyA9IFNURF9DT01fRkxBR1M7Ci0JCQkJaW5mby0+dHR5ID0gTlVMTDsKLQkJCQlpZiAobWFpbGJveCA9PSBaT19WMSkKLQkJCQkJaW5mby0+eG1pdF9maWZvX3NpemUgPSBDWVpfRklGT19TSVpFOwotCQkJCWVsc2UKLQkJCQkJaW5mby0+eG1pdF9maWZvX3NpemUgPQotCQkJCQkgICAgNCAqIENZWl9GSUZPX1NJWkU7Ci0JCQkJaW5mby0+Y29yMSA9IDA7Ci0JCQkJaW5mby0+Y29yMiA9IDA7Ci0JCQkJaW5mby0+Y29yMyA9IDA7Ci0JCQkJaW5mby0+Y29yNCA9IDA7Ci0JCQkJaW5mby0+Y29yNSA9IDA7Ci0JCQkJaW5mby0+dGJwciA9IDA7Ci0JCQkJaW5mby0+dGNvID0gMDsKLQkJCQlpbmZvLT5yYnByID0gMDsKLQkJCQlpbmZvLT5yY28gPSAwOwotCQkJCWluZm8tPmN1c3RvbV9kaXZpc29yID0gMDsKLQkJCQlpbmZvLT5jbG9zZV9kZWxheSA9IDUgKiBIWiAvIDEwOwotCQkJCWluZm8tPmNsb3Npbmdfd2FpdCA9IENMT1NJTkdfV0FJVF9ERUxBWTsKLQkJCQlpbmZvLT5pY291bnQuY3RzID0gaW5mby0+aWNvdW50LmRzciA9Ci0JCQkJICAgIGluZm8tPmljb3VudC5ybmcgPSBpbmZvLT5pY291bnQuZGNkID0gMDsKLQkJCQlpbmZvLT5pY291bnQucnggPSBpbmZvLT5pY291bnQudHggPSAwOwotCQkJCWluZm8tPmljb3VudC5mcmFtZSA9IGluZm8tPmljb3VudC5wYXJpdHkgPSAwOwotCQkJCWluZm8tPmljb3VudC5vdmVycnVuID0gaW5mby0+aWNvdW50LmJyayA9IDA7Ci0JCQkJaW5mby0+eF9jaGFyID0gMDsKLQkJCQlpbmZvLT5ldmVudCA9IDA7Ci0JCQkJaW5mby0+Y291bnQgPSAwOwotCQkJCWluZm8tPmJsb2NrZWRfb3BlbiA9IDA7Ci0JCQkJaW5mby0+ZGVmYXVsdF90aHJlc2hvbGQgPSAwOwotCQkJCWluZm8tPmRlZmF1bHRfdGltZW91dCA9IDA7Ci0JCQkJSU5JVF9XT1JLKCZpbmZvLT50cXVldWUsIGRvX3NvZnRpbnQpOwotCQkJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPm9wZW5fd2FpdCk7Ci0JCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Y2xvc2Vfd2FpdCk7Ci0JCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+c2h1dGRvd25fd2FpdCk7Ci0JCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwotCQkJCS8qIGluZm8tPnNlc3Npb24gKi8KLQkJCQkvKiBpbmZvLT5wZ3JwICovCi0JCQkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayA9IDA7Ci0JCQkJLyogaW5mby0+dGltZW91dCAqLwotCQkJCS8qIEJlbnRzb24ncyB2YXJzICovCi0JCQkJaW5mby0+amlmZmllc1swXSA9IDA7Ci0JCQkJaW5mby0+amlmZmllc1sxXSA9IDA7Ci0JCQkJaW5mby0+amlmZmllc1syXSA9IDA7Ci0JCQkJaW5mby0+cmZsdXNoX2NvdW50ID0gMDsKLSNpZmRlZiBDT05GSUdfQ1laX0lOVFIKLQkJCQlpbml0X3RpbWVyKCZjeXpfcnhfZnVsbF90aW1lcltwb3J0XSk7Ci0JCQkJY3l6X3J4X2Z1bGxfdGltZXJbcG9ydF0uZnVuY3Rpb24gPSBOVUxMOworCXJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmN5X3BjaV9kcml2ZXIpOworCWlmIChyZXR2YWwgJiYgIW5ib2FyZHMpCisJCWdvdG8gZXJyX3VucjsKICNlbmRpZgotCQkJfQotCQkJY29udGludWU7Ci0JCX0gZWxzZSB7CS8qIEN5Y2xvbS1ZIG9mIHNvbWUga2luZCAqLwotCQkJaW5kZXggPSBjaW5mby0+YnVzX2luZGV4OwotCQkJc3Bpbl9sb2NrX2luaXQoJmNpbmZvLT5jYXJkX2xvY2spOwotCQkJY2luZm8tPm5wb3J0cyA9IEN5UE9SVFNfUEVSX0NISVAgKiBjaW5mby0+bnVtX2NoaXBzOwotCQkJZm9yIChwb3J0ID0gY2luZm8tPmZpcnN0X2xpbmU7Ci0JCQkgICAgIHBvcnQgPCBjaW5mby0+Zmlyc3RfbGluZSArIGNpbmZvLT5ucG9ydHM7IHBvcnQrKykgewotCQkJCWluZm8gPSAmY3lfcG9ydFtwb3J0XTsKLQkJCQlpbmZvLT5tYWdpYyA9IENZQ0xBREVTX01BR0lDOwotCQkJCWluZm8tPnR5cGUgPSBQT1JUX0NJUlJVUzsKLQkJCQlpbmZvLT5jYXJkID0gYm9hcmQ7Ci0JCQkJaW5mby0+bGluZSA9IHBvcnQ7Ci0JCQkJaW5mby0+ZmxhZ3MgPSBTVERfQ09NX0ZMQUdTOwotCQkJCWluZm8tPnR0eSA9IE5VTEw7Ci0JCQkJaW5mby0+eG1pdF9maWZvX3NpemUgPSBDeU1BWF9DSEFSX0ZJRk87Ci0JCQkJaW5mby0+Y29yMSA9Ci0JCQkJICAgIEN5UEFSSVRZX05PTkUgfCBDeV8xX1NUT1AgfCBDeV84X0JJVFM7Ci0JCQkJaW5mby0+Y29yMiA9IEN5RVRDOwotCQkJCWluZm8tPmNvcjMgPSAweDA4OwkvKiBfdmVyeV8gc21hbGwgcmN2IHRocmVzaG9sZCAqLwotCQkJCWluZm8tPmNvcjQgPSAwOwotCQkJCWluZm8tPmNvcjUgPSAwOwotCQkJCWluZm8tPmN1c3RvbV9kaXZpc29yID0gMDsKLQkJCQlpbmZvLT5jbG9zZV9kZWxheSA9IDUgKiBIWiAvIDEwOwotCQkJCWluZm8tPmNsb3Npbmdfd2FpdCA9IENMT1NJTkdfV0FJVF9ERUxBWTsKLQkJCQlpbmZvLT5pY291bnQuY3RzID0gaW5mby0+aWNvdW50LmRzciA9Ci0JCQkJICAgIGluZm8tPmljb3VudC5ybmcgPSBpbmZvLT5pY291bnQuZGNkID0gMDsKLQkJCQlpbmZvLT5pY291bnQucnggPSBpbmZvLT5pY291bnQudHggPSAwOwotCQkJCWluZm8tPmljb3VudC5mcmFtZSA9IGluZm8tPmljb3VudC5wYXJpdHkgPSAwOwotCQkJCWluZm8tPmljb3VudC5vdmVycnVuID0gaW5mby0+aWNvdW50LmJyayA9IDA7Ci0JCQkJY2hpcF9udW1iZXIgPSAocG9ydCAtIGNpbmZvLT5maXJzdF9saW5lKSAvIDQ7Ci0JCQkJaWYgKChpbmZvLT5jaGlwX3JldiA9Ci0JCQkJICAgICBjeV9yZWFkYihjaW5mby0+YmFzZV9hZGRyICsKLQkJCQkJICAgICAgKGN5X2NoaXBfb2Zmc2V0W2NoaXBfbnVtYmVyXSA8PAotCQkJCQkgICAgICAgaW5kZXgpICsgKEN5R0ZSQ1IgPDwgaW5kZXgpKSkgPj0KLQkJCQkgICAgQ0QxNDAwX1JFVl9KKSB7Ci0JCQkJCS8qIEl0IGlzIGEgQ0QxNDAwIHJldi4gSiBvciBsYXRlciAqLwotCQkJCQlpbmZvLT50YnByID0gYmF1ZF9icHJfNjBbMTNdOwkvKiBUeCBCUFIgKi8KLQkJCQkJaW5mby0+dGNvID0gYmF1ZF9jb182MFsxM107CS8qIFR4IENPICovCi0JCQkJCWluZm8tPnJicHIgPSBiYXVkX2Jwcl82MFsxM107CS8qIFJ4IEJQUiAqLwotCQkJCQlpbmZvLT5yY28gPSBiYXVkX2NvXzYwWzEzXTsJLyogUnggQ08gKi8KLQkJCQkJaW5mby0+cmZsb3cgPSAwOwotCQkJCQlpbmZvLT5ydHNkdHJfaW52ID0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQlpbmZvLT50YnByID0gYmF1ZF9icHJfMjVbMTNdOwkvKiBUeCBCUFIgKi8KLQkJCQkJaW5mby0+dGNvID0gYmF1ZF9jb18yNVsxM107CS8qIFR4IENPICovCi0JCQkJCWluZm8tPnJicHIgPSBiYXVkX2Jwcl8yNVsxM107CS8qIFJ4IEJQUiAqLwotCQkJCQlpbmZvLT5yY28gPSBiYXVkX2NvXzI1WzEzXTsJLyogUnggQ08gKi8KLQkJCQkJaW5mby0+cmZsb3cgPSAwOwotCQkJCQlpbmZvLT5ydHNkdHJfaW52ID0gMDsKLQkJCQl9Ci0JCQkJaW5mby0+eF9jaGFyID0gMDsKLQkJCQlpbmZvLT5ldmVudCA9IDA7Ci0JCQkJaW5mby0+Y291bnQgPSAwOwotCQkJCWluZm8tPmJsb2NrZWRfb3BlbiA9IDA7Ci0JCQkJaW5mby0+ZGVmYXVsdF90aHJlc2hvbGQgPSAwOwotCQkJCWluZm8tPmRlZmF1bHRfdGltZW91dCA9IDA7Ci0JCQkJSU5JVF9XT1JLKCZpbmZvLT50cXVldWUsIGRvX3NvZnRpbnQpOwotCQkJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPm9wZW5fd2FpdCk7Ci0JCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Y2xvc2Vfd2FpdCk7Ci0JCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+c2h1dGRvd25fd2FpdCk7Ci0JCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwotCQkJCS8qIGluZm8tPnNlc3Npb24gKi8KLQkJCQkvKiBpbmZvLT5wZ3JwICovCi0JCQkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayA9Ci0JCQkJICAgIEN5VElNRU9VVCB8IEN5U1BFQ0hBUiB8IEN5QlJFQUsKLQkJCQkgICAgfCBDeVBBUklUWSB8IEN5RlJBTUUgfCBDeU9WRVJSVU47Ci0JCQkJLyogaW5mby0+dGltZW91dCAqLwotCQkJfQotCQl9Ci0JfQotCi0jaWZuZGVmIENPTkZJR19DWVpfSU5UUgotCWlmIChudW1iZXJfel9ib2FyZHMgJiYgIWN5el90aW1lcm9uKSB7Ci0JCWN5el90aW1lcm9uKys7Ci0JCWN5el90aW1lcmxpc3QuZXhwaXJlcyA9IGppZmZpZXMgKyAxOwotCQlhZGRfdGltZXIoJmN5el90aW1lcmxpc3QpOwotI2lmZGVmIENZX1BDSV9ERUJVRwotCQlwcmludGsoIkN5Y2xhZGVzLVogcG9sbGluZyBpbml0aWFsaXplZFxuIik7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCiAKIAlyZXR1cm4gMDsKLQorZXJyX3VucjoKKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoY3lfc2VyaWFsX2RyaXZlcik7CitlcnJfZnJ0dHk6CisJcHV0X3R0eV9kcml2ZXIoY3lfc2VyaWFsX2RyaXZlcik7CitlcnI6CisJcmV0dXJuIHJldHZhbDsKIH0JCQkJLyogY3lfaW5pdCAqLwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3lfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2FyZDsKIAlpbnQgaSwgZTE7CiAKICNpZm5kZWYgQ09ORklHX0NZWl9JTlRSCi0JaWYgKGN5el90aW1lcm9uKXsKLQkJY3l6X3RpbWVyb24gPSAwOwotCQlkZWxfdGltZXIoJmN5el90aW1lcmxpc3QpOwotCX0KKwlkZWxfdGltZXJfc3luYygmY3l6X3RpbWVybGlzdCk7CiAjZW5kaWYgLyogQ09ORklHX0NZWl9JTlRSICovCiAKIAlpZiAoKGUxID0gdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGN5X3NlcmlhbF9kcml2ZXIpKSkKLQkJcHJpbnRrKCJjeWM6IGZhaWxlZCB0byB1bnJlZ2lzdGVyIEN5Y2xhZGVzIHNlcmlhbCBkcml2ZXIoJWQpXG4iLAotCQkJZTEpOworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byB1bnJlZ2lzdGVyIEN5Y2xhZGVzIHNlcmlhbCAiCisJCQkJImRyaXZlciglZClcbiIsIGUxKTsKIAotCXB1dF90dHlfZHJpdmVyKGN5X3NlcmlhbF9kcml2ZXIpOworI2lmZGVmIENPTkZJR19QQ0kKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmN5X3BjaV9kcml2ZXIpOworI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfQ0FSRFM7IGkrKykgewotCQlpZiAoY3lfY2FyZFtpXS5iYXNlX2FkZHIpIHsKLQkJCWlvdW5tYXAoY3lfY2FyZFtpXS5iYXNlX2FkZHIpOwotCQkJaWYgKGN5X2NhcmRbaV0uY3RsX2FkZHIpCi0JCQkJaW91bm1hcChjeV9jYXJkW2ldLmN0bF9hZGRyKTsKLQkJCWlmIChjeV9jYXJkW2ldLmlycQorCQljYXJkID0gJmN5X2NhcmRbaV07CisJCWlmIChjYXJkLT5iYXNlX2FkZHIpIHsKKwkJCS8qIGNsZWFyIGludGVycnVwdCAqLworCQkJY3lfd3JpdGViKGNhcmQtPmJhc2VfYWRkciArIEN5X0NsckludHIsIDApOworCQkJaW91bm1hcChjYXJkLT5iYXNlX2FkZHIpOworCQkJaWYgKGNhcmQtPmN0bF9hZGRyKQorCQkJCWlvdW5tYXAoY2FyZC0+Y3RsX2FkZHIpOworCQkJaWYgKGNhcmQtPmlycQogI2lmbmRlZiBDT05GSUdfQ1laX0lOVFIKLQkJCQkmJiBjeV9jYXJkW2ldLm51bV9jaGlwcyAhPSAtMSAvKiBub3QgYSBaIGNhcmQgKi8KKwkJCQkmJiAhSVNfQ1lDX1ooKmNhcmQpCiAjZW5kaWYgLyogQ09ORklHX0NZWl9JTlRSICovCiAJCQkJKQotCQkJCWZyZWVfaXJxKGN5X2NhcmRbaV0uaXJxLCAmY3lfY2FyZFtpXSk7Ci0jaWZkZWYgQ09ORklHX1BDSQotCQkJaWYgKGN5X2NhcmRbaV0ucGRldikKLQkJCQlwY2lfcmVsZWFzZV9yZWdpb25zKGN5X2NhcmRbaV0ucGRldik7Ci0jZW5kaWYKKwkJCQlmcmVlX2lycShjYXJkLT5pcnEsIGNhcmQpOworCQkJZm9yIChlMSA9IGNhcmQtPmZpcnN0X2xpbmU7CisJCQkJCWUxIDwgY2FyZC0+Zmlyc3RfbGluZSArCisJCQkJCWNhcmQtPm5wb3J0czsgZTErKykKKwkJCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UoY3lfc2VyaWFsX2RyaXZlciwgZTEpOworCQkJa2ZyZWUoY2FyZC0+cG9ydHMpOwogCQl9CiAJfQorCisJcHV0X3R0eV9kcml2ZXIoY3lfc2VyaWFsX2RyaXZlcik7CiB9IC8qIGN5X2NsZWFudXBfbW9kdWxlICovCiAKIG1vZHVsZV9pbml0KGN5X2luaXQpOwogbW9kdWxlX2V4aXQoY3lfY2xlYW51cF9tb2R1bGUpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihDWV9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kaWdpLmggYi9kcml2ZXJzL2NoYXIvZGlnaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWRmMGU4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9kaWdpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKiAgICAgICAgICBEZWZpbml0aW9ucyBmb3IgRGlnaUJvYXJkIGRpdHR5KDEpIGNvbW1hbmQuICAgICAgICAgICAgICAgICAqLwotCi0jaWYgIWRlZmluZWQoVElPQ01PREcpCi0jZGVmaW5lCVRJT0NNT0RHCSgoJ2QnPDw4KSB8IDI1MCkJCS8qIGdldCBtb2RlbSBjdHJsIHN0YXRlCSovCi0jZGVmaW5lCVRJT0NNT0RTCSgoJ2QnPDw4KSB8IDI1MSkJCS8qIHNldCBtb2RlbSBjdHJsIHN0YXRlCSovCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFRJT0NNU0VUKQotI2RlZmluZQlUSU9DTVNFVAkoKCdkJzw8OCkgfCAyNTIpCQkvKiBzZXQgbW9kZW0gY3RybCBzdGF0ZQkqLwotI2RlZmluZQlUSU9DTUdFVAkoKCdkJzw8OCkgfCAyNTMpCQkvKiBzZXQgbW9kZW0gY3RybCBzdGF0ZQkqLwotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChUSU9DTUJJQykKLSNkZWZpbmUJVElPQ01CSUMJKCgnZCc8PDgpIHwgMjU0KQkJLyogc2V0IG1vZGVtIGN0cmwgc3RhdGUgKi8KLSNkZWZpbmUJVElPQ01CSVMJKCgnZCc8PDgpIHwgMjU1KQkJLyogc2V0IG1vZGVtIGN0cmwgc3RhdGUgKi8KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoVElPQ1NEVFIpCi0jZGVmaW5lCVRJT0NTRFRSCSgoJ2UnPDw4KSB8IDApCQkvKiBzZXQgRFRSCQkqLwotI2RlZmluZQlUSU9DQ0RUUgkoKCdlJzw8OCkgfCAxKQkJLyogY2xlYXIgRFRSCQkqLwotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIElvY3RsIGNvbW1hbmQgYXJndW1lbnRzIGZvciBESUdJIHBhcmFtZXRlcnMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBESUdJX0dFVEEJKCgnZSc8PDgpIHwgOTQpCQkvKiBSZWFkIHBhcmFtcwkJKi8KLQotI2RlZmluZSBESUdJX1NFVEEJKCgnZSc8PDgpIHwgOTUpCQkvKiBTZXQgcGFyYW1zCQkqLwotI2RlZmluZSBESUdJX1NFVEFXCSgoJ2UnPDw4KSB8IDk2KQkJLyogRHJhaW4gJiBzZXQgcGFyYW1zCSovCi0jZGVmaW5lIERJR0lfU0VUQUYJKCgnZSc8PDgpIHwgOTcpCQkvKiBEcmFpbiwgZmx1c2ggJiBzZXQgcGFyYW1zICovCi0KLSNkZWZpbmUJRElHSV9HRVRGTE9XCSgoJ2UnPDw4KSB8IDk5KQkJLyogR2V0IHN0YXJ0Yy9zdG9wYyBmbG93ICovCi0JCQkJCQkvKiBjb250cm9sIGNoYXJhY3RlcnMgCSAqLwotI2RlZmluZQlESUdJX1NFVEZMT1cJKCgnZSc8PDgpIHwgMTAwKQkJLyogU2V0IHN0YXJ0Yy9zdG9wYyBmbG93ICovCi0JCQkJCQkvKiBjb250cm9sIGNoYXJhY3RlcnMJICovCi0jZGVmaW5lCURJR0lfR0VUQUZMT1cJKCgnZSc8PDgpIHwgMTAxKQkJLyogR2V0IEF1eC4gc3RhcnRjL3N0b3BjICovCi0JCQkJCQkvKiBmbG93IGNvbnRyb2wgY2hhcnMgCSAqLwotI2RlZmluZQlESUdJX1NFVEFGTE9XCSgoJ2UnPDw4KSB8IDEwMikJCS8qIFNldCBBdXguIHN0YXJ0Yy9zdG9wYyAqLwotCQkJCQkJLyogZmxvdyBjb250cm9sIGNoYXJzCSAqLwotCi1zdHJ1Y3QJZGlnaWZsb3dfc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyCXN0YXJ0YzsJCQkJLyogZmxvdyBjbnRsIHN0YXJ0IGNoYXIJKi8KLQl1bnNpZ25lZCBjaGFyCXN0b3BjOwkJCQkvKiBmbG93IGNudGwgc3RvcCBjaGFyCSovCi19OwotCi10eXBlZGVmIHN0cnVjdCBkaWdpZmxvd19zdHJ1Y3QgZGlnaWZsb3dfdDsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBWYWx1ZXMgZm9yIGRpZ2lfZmxhZ3MgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBESUdJX0lYT04JMHgwMDAxCQkvKiBIYW5kbGUgSVhPTiBpbiB0aGUgRkVQCSovCi0jZGVmaW5lIERJR0lfRkFTVAkweDAwMDIJCS8qIEZhc3QgYmF1ZCByYXRlcwkJKi8KLSNkZWZpbmUgUlRTUEFDRQkJMHgwMDA0CQkvKiBSVFMgaW5wdXQgZmxvdyBjb250cm9sCSovCi0jZGVmaW5lIENUU1BBQ0UJCTB4MDAwOAkJLyogQ1RTIG91dHB1dCBmbG93IGNvbnRyb2wJKi8KLSNkZWZpbmUgRFNSUEFDRQkJMHgwMDEwCQkvKiBEU1Igb3V0cHV0IGZsb3cgY29udHJvbAkqLwotI2RlZmluZSBEQ0RQQUNFCQkweDAwMjAJCS8qIERDRCBvdXRwdXQgZmxvdyBjb250cm9sCSovCi0jZGVmaW5lIERUUlBBQ0UJCTB4MDA0MAkJLyogRFRSIGlucHV0IGZsb3cgY29udHJvbAkqLwotI2RlZmluZSBESUdJX0ZPUkNFRENECTB4MDEwMAkJLyogRm9yY2UgY2FycmllcgkJKi8KLSNkZWZpbmUJRElHSV9BTFRQSU4JMHgwMjAwCQkvKiBBbHRlcm5hdGUgUkotNDUgcGluIGNvbmZpZwkqLwotI2RlZmluZQlESUdJX0FJWE9OCTB4MDQwMAkJLyogQXV4IGZsb3cgY29udHJvbCBpbiBmZXAJKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTdHJ1Y3R1cmUgdXNlZCB3aXRoIGlvY3RsIGNvbW1hbmRzIGZvciBESUdJIHBhcmFtZXRlcnMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IGRpZ2lfc3RydWN0IHsKLQl1bnNpZ25lZCBzaG9ydAlkaWdpX2ZsYWdzOwkJLyogRmxhZ3MgKHNlZSBhYm92ZSkJKi8KLX07Ci0KLXR5cGVkZWYgc3RydWN0IGRpZ2lfc3RydWN0IGRpZ2lfdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9kcm0vS2NvbmZpZwppbmRleCBlZjgzM2ExLi4wYjdmZmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2RybS9LY29uZmlnCkBAIC02LDcgKzYsNyBAQAogIwogY29uZmlnIERSTQogCXRyaXN0YXRlICJEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXIgKFhGcmVlODYgNC4xLjAgYW5kIGhpZ2hlciBEUkkgc3VwcG9ydCkiCi0JZGVwZW5kcyBvbiAoQUdQIHx8IEFHUD1uKSAmJiBQQ0kKKwlkZXBlbmRzIG9uIChBR1AgfHwgQUdQPW4pICYmIFBDSSAmJiAhRU1VTEFURURfQ01QWENIRwogCWhlbHAKIAkgIEtlcm5lbC1sZXZlbCBzdXBwb3J0IGZvciB0aGUgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAoRFJJKQogCSAgaW50cm9kdWNlZCBpbiBYRnJlZTg2IDQuMC4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSBuZWVkIHRvIHNlbGVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9hdGlfcGNpZ2FydC5jIGIvZHJpdmVycy9jaGFyL2RybS9hdGlfcGNpZ2FydC5jCmluZGV4IGJkN2JlMDkuLjViOTFiYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vYXRpX3BjaWdhcnQuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2F0aV9wY2lnYXJ0LmMKQEAgLTMzLDU5ICszMyw0NCBAQAogCiAjaW5jbHVkZSAiZHJtUC5oIgogCi0jaWYgUEFHRV9TSVpFID09IDY1NTM2Ci0jIGRlZmluZSBBVElfUENJR0FSVF9UQUJMRV9PUkRFUgkwCi0jIGRlZmluZSBBVElfUENJR0FSVF9UQUJMRV9QQUdFUwkoMSA8PCAwKQotI2VsaWYgUEFHRV9TSVpFID09IDE2Mzg0Ci0jIGRlZmluZSBBVElfUENJR0FSVF9UQUJMRV9PUkRFUgkxCi0jIGRlZmluZSBBVElfUENJR0FSVF9UQUJMRV9QQUdFUwkoMSA8PCAxKQotI2VsaWYgUEFHRV9TSVpFID09IDgxOTIKLSMgZGVmaW5lIEFUSV9QQ0lHQVJUX1RBQkxFX09SREVSIAkyCi0jIGRlZmluZSBBVElfUENJR0FSVF9UQUJMRV9QQUdFUyAJKDEgPDwgMikKLSNlbGlmIFBBR0VfU0laRSA9PSA0MDk2Ci0jIGRlZmluZSBBVElfUENJR0FSVF9UQUJMRV9PUkRFUiAJMwotIyBkZWZpbmUgQVRJX1BDSUdBUlRfVEFCTEVfUEFHRVMgCSgxIDw8IDMpCi0jZWxzZQotIyBlcnJvciAtIFBBR0VfU0laRSBub3QgNjRLLCAxNkssIDhLIG9yIDRLCi0jZW5kaWYKLQotIyBkZWZpbmUgQVRJX01BWF9QQ0lHQVJUX1BBR0VTCQk4MTkyCS8qKjwgMzIgTUIgYXBlcnR1cmUsIDRLIHBhZ2VzICovCiAjIGRlZmluZSBBVElfUENJR0FSVF9QQUdFX1NJWkUJCTQwOTYJLyoqPCBQQ0kgR0FSVCBwYWdlIHNpemUgKi8KIAotc3RhdGljIHZvaWQgKmRybV9hdGlfYWxsb2NfcGNpZ2FydF90YWJsZSh2b2lkKQorc3RhdGljIHZvaWQgKmRybV9hdGlfYWxsb2NfcGNpZ2FydF90YWJsZShpbnQgb3JkZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCBpOwotCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlEUk1fREVCVUcoIiVzOiBhbGxvYyAlZCBvcmRlclxuIiwgX19GVU5DVElPTl9fLCBvcmRlcik7CiAKIAlhZGRyZXNzID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwKLQkJCQkgICBBVElfUENJR0FSVF9UQUJMRV9PUkRFUik7CisJCQkJICAgb3JkZXIpOwogCWlmIChhZGRyZXNzID09IDBVTCkgewogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlwYWdlID0gdmlydF90b19wYWdlKGFkZHJlc3MpOwogCi0JZm9yIChpID0gMDsgaSA8IEFUSV9QQ0lHQVJUX1RBQkxFX1BBR0VTOyBpKyssIHBhZ2UrKykKKwlmb3IgKGkgPSAwOyBpIDwgb3JkZXI7IGkrKywgcGFnZSsrKQogCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSk7CiAKIAlEUk1fREVCVUcoIiVzOiByZXR1cm5pbmcgMHglMDhseFxuIiwgX19GVU5DVElPTl9fLCBhZGRyZXNzKTsKIAlyZXR1cm4gKHZvaWQgKilhZGRyZXNzOwogfQogCi1zdGF0aWMgdm9pZCBkcm1fYXRpX2ZyZWVfcGNpZ2FydF90YWJsZSh2b2lkICphZGRyZXNzKQorc3RhdGljIHZvaWQgZHJtX2F0aV9mcmVlX3BjaWdhcnRfdGFibGUodm9pZCAqYWRkcmVzcywgaW50IG9yZGVyKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCBpOworCWludCBudW1fcGFnZXMgPSAxIDw8IG9yZGVyOwogCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlwYWdlID0gdmlydF90b19wYWdlKCh1bnNpZ25lZCBsb25nKWFkZHJlc3MpOwogCi0JZm9yIChpID0gMDsgaSA8IEFUSV9QQ0lHQVJUX1RBQkxFX1BBR0VTOyBpKyssIHBhZ2UrKykKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyssIHBhZ2UrKykKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7CiAKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFkZHJlc3MsIEFUSV9QQ0lHQVJUX1RBQkxFX09SREVSKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFkZHJlc3MsIG9yZGVyKTsKIH0KIAogaW50IGRybV9hdGlfcGNpZ2FydF9jbGVhbnVwKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvKQpAQCAtOTMsNiArNzgsOCBAQAogCWRybV9zZ19tZW1fdCAqZW50cnkgPSBkZXYtPnNnOwogCXVuc2lnbmVkIGxvbmcgcGFnZXM7CiAJaW50IGk7CisJaW50IG9yZGVyOworCWludCBudW1fcGFnZXMsIG1heF9wYWdlczsKIAogCS8qIHdlIG5lZWQgdG8gc3VwcG9ydCBsYXJnZSBtZW1vcnkgY29uZmlndXJhdGlvbnMgKi8KIAlpZiAoIWVudHJ5KSB7CkBAIC0xMDAsMTUgKzg3LDE5IEBACiAJCXJldHVybiAwOwogCX0KIAorCW9yZGVyID0gZHJtX29yZGVyKChnYXJ0X2luZm8tPnRhYmxlX3NpemUgKyAoUEFHRV9TSVpFLTEpKSAvIFBBR0VfU0laRSk7CisJbnVtX3BhZ2VzID0gMSA8PCBvcmRlcjsKKwogCWlmIChnYXJ0X2luZm8tPmJ1c19hZGRyKSB7CiAJCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4pIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCBnYXJ0X2luZm8tPmJ1c19hZGRyLAotCQkJCQkgQVRJX1BDSUdBUlRfVEFCTEVfUEFHRVMgKiBQQUdFX1NJWkUsCisJCQkJCSBudW1fcGFnZXMgKiBQQUdFX1NJWkUsCiAJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJfQogCi0JCXBhZ2VzID0gKGVudHJ5LT5wYWdlcyA8PSBBVElfTUFYX1BDSUdBUlRfUEFHRVMpCi0JCSAgICA/IGVudHJ5LT5wYWdlcyA6IEFUSV9NQVhfUENJR0FSVF9QQUdFUzsKKwkJbWF4X3BhZ2VzID0gKGdhcnRfaW5mby0+dGFibGVfc2l6ZSAvIHNpemVvZih1MzIpKTsKKwkJcGFnZXMgPSAoZW50cnktPnBhZ2VzIDw9IG1heF9wYWdlcykKKwkJICA/IGVudHJ5LT5wYWdlcyA6IG1heF9wYWdlczsKIAogCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKykgewogCQkJaWYgKCFlbnRyeS0+YnVzYWRkcltpXSkKQEAgLTEyMywxMyArMTE0LDEyIEBACiAKIAlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOCiAJICAgICYmIGdhcnRfaW5mby0+YWRkcikgewotCQlkcm1fYXRpX2ZyZWVfcGNpZ2FydF90YWJsZShnYXJ0X2luZm8tPmFkZHIpOworCQlkcm1fYXRpX2ZyZWVfcGNpZ2FydF90YWJsZShnYXJ0X2luZm8tPmFkZHIsIG9yZGVyKTsKIAkJZ2FydF9pbmZvLT5hZGRyID0gTlVMTDsKIAl9CiAKIAlyZXR1cm4gMTsKIH0KLQogRVhQT1JUX1NZTUJPTChkcm1fYXRpX3BjaWdhcnRfY2xlYW51cCk7CiAKIGludCBkcm1fYXRpX3BjaWdhcnRfaW5pdChkcm1fZGV2aWNlX3QgKmRldiwgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKmdhcnRfaW5mbykKQEAgLTEzOSw2ICsxMjksOSBAQAogCXVuc2lnbmVkIGxvbmcgcGFnZXM7CiAJdTMyICpwY2lfZ2FydCwgcGFnZV9iYXNlLCBidXNfYWRkcmVzcyA9IDA7CiAJaW50IGksIGosIHJldCA9IDA7CisJaW50IG9yZGVyOworCWludCBtYXhfcGFnZXM7CisJaW50IG51bV9wYWdlczsKIAogCWlmICghZW50cnkpIHsKIAkJRFJNX0VSUk9SKCJubyBzY2F0dGVyL2dhdGhlciBtZW1vcnkhXG4iKTsKQEAgLTE0OCw3ICsxNDEsMTAgQEAKIAlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOKSB7CiAJCURSTV9ERUJVRygiUENJOiBubyB0YWJsZSBpbiBWUkFNOiB1c2luZyBub3JtYWwgUkFNXG4iKTsKIAotCQlhZGRyZXNzID0gZHJtX2F0aV9hbGxvY19wY2lnYXJ0X3RhYmxlKCk7CisJCW9yZGVyID0gZHJtX29yZGVyKChnYXJ0X2luZm8tPnRhYmxlX3NpemUgKworCQkJCSAgIChQQUdFX1NJWkUtMSkpIC8gUEFHRV9TSVpFKTsKKwkJbnVtX3BhZ2VzID0gMSA8PCBvcmRlcjsKKwkJYWRkcmVzcyA9IGRybV9hdGlfYWxsb2NfcGNpZ2FydF90YWJsZShvcmRlcik7CiAJCWlmICghYWRkcmVzcykgewogCQkJRFJNX0VSUk9SKCJjYW5ub3QgYWxsb2NhdGUgUENJIEdBUlQgcGFnZSFcbiIpOwogCQkJZ290byBkb25lOwpAQCAtMTYwLDExICsxNTYsMTMgQEAKIAkJfQogCiAJCWJ1c19hZGRyZXNzID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCBhZGRyZXNzLAotCQkJCQkgICAgIEFUSV9QQ0lHQVJUX1RBQkxFX1BBR0VTICoKLQkJCQkJICAgICBQQUdFX1NJWkUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQkgICAgIG51bV9wYWdlcyAqIFBBR0VfU0laRSwKKwkJCQkJICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJaWYgKGJ1c19hZGRyZXNzID09IDApIHsKIAkJCURSTV9FUlJPUigidW5hYmxlIHRvIG1hcCBQQ0lHQVJUIHBhZ2VzIVxuIik7Ci0JCQlkcm1fYXRpX2ZyZWVfcGNpZ2FydF90YWJsZShhZGRyZXNzKTsKKwkJCW9yZGVyID0gZHJtX29yZGVyKChnYXJ0X2luZm8tPnRhYmxlX3NpemUgKworCQkJCQkgICAoUEFHRV9TSVpFLTEpKSAvIFBBR0VfU0laRSk7CisJCQlkcm1fYXRpX2ZyZWVfcGNpZ2FydF90YWJsZShhZGRyZXNzLCBvcmRlcik7CiAJCQlhZGRyZXNzID0gTlVMTDsKIAkJCWdvdG8gZG9uZTsKIAkJfQpAQCAtMTc3LDEwICsxNzUsMTEgQEAKIAogCXBjaV9nYXJ0ID0gKHUzMiAqKSBhZGRyZXNzOwogCi0JcGFnZXMgPSAoZW50cnktPnBhZ2VzIDw9IEFUSV9NQVhfUENJR0FSVF9QQUdFUykKLQkgICAgPyBlbnRyeS0+cGFnZXMgOiBBVElfTUFYX1BDSUdBUlRfUEFHRVM7CisJbWF4X3BhZ2VzID0gKGdhcnRfaW5mby0+dGFibGVfc2l6ZSAvIHNpemVvZih1MzIpKTsKKwlwYWdlcyA9IChlbnRyeS0+cGFnZXMgPD0gbWF4X3BhZ2VzKQorCSAgICA/IGVudHJ5LT5wYWdlcyA6IG1heF9wYWdlczsKIAotCW1lbXNldChwY2lfZ2FydCwgMCwgQVRJX01BWF9QQ0lHQVJUX1BBR0VTICogc2l6ZW9mKHUzMikpOworCW1lbXNldChwY2lfZ2FydCwgMCwgbWF4X3BhZ2VzICogc2l6ZW9mKHUzMikpOwogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKIAkJLyogd2UgbmVlZCB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb25maWd1cmF0aW9ucyAqLwpAQCAtMTk4LDEwICsxOTcsMTggQEAKIAkJcGFnZV9iYXNlID0gKHUzMikgZW50cnktPmJ1c2FkZHJbaV07CiAKIAkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyBBVElfUENJR0FSVF9QQUdFX1NJWkUpOyBqKyspIHsKLQkJCWlmIChnYXJ0X2luZm8tPmlzX3BjaWUpCisJCQlzd2l0Y2goZ2FydF9pbmZvLT5nYXJ0X3JlZ19pZikgeworCQkJY2FzZSBEUk1fQVRJX0dBUlRfSUdQOgorCQkJCSpwY2lfZ2FydCA9IGNwdV90b19sZTMyKChwYWdlX2Jhc2UpIHwgMHhjKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRFJNX0FUSV9HQVJUX1BDSUU6CiAJCQkJKnBjaV9nYXJ0ID0gY3B1X3RvX2xlMzIoKHBhZ2VfYmFzZSA+PiA4KSB8IDB4Yyk7Ci0JCQllbHNlCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJY2FzZSBEUk1fQVRJX0dBUlRfUENJOgogCQkJCSpwY2lfZ2FydCA9IGNwdV90b19sZTMyKHBhZ2VfYmFzZSk7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlwY2lfZ2FydCsrOwogCQkJcGFnZV9iYXNlICs9IEFUSV9QQ0lHQVJUX1BBR0VfU0laRTsKIAkJfQpAQCAtMjIwLDUgKzIyNyw0IEBACiAJZ2FydF9pbmZvLT5idXNfYWRkciA9IGJ1c19hZGRyZXNzOwogCXJldHVybiByZXQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZHJtX2F0aV9wY2lnYXJ0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1QLmggYi9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaAppbmRleCA4MDA0MWQ1Li5kNDk0MzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaApAQCAtNTE5LDEyICs1MTksMTcgQEAKICNkZWZpbmUgRFJNX0FUSV9HQVJUX01BSU4gMQogI2RlZmluZSBEUk1fQVRJX0dBUlRfRkIgICAyCiAKKyNkZWZpbmUgRFJNX0FUSV9HQVJUX1BDSSAxCisjZGVmaW5lIERSTV9BVElfR0FSVF9QQ0lFIDIKKyNkZWZpbmUgRFJNX0FUSV9HQVJUX0lHUCAzCisKIHR5cGVkZWYgc3RydWN0IGF0aV9wY2lnYXJ0X2luZm8gewogCWludCBnYXJ0X3RhYmxlX2xvY2F0aW9uOwotCWludCBpc19wY2llOworCWludCBnYXJ0X3JlZ19pZjsKIAl2b2lkICphZGRyOwogCWRtYV9hZGRyX3QgYnVzX2FkZHI7CiAJZHJtX2xvY2FsX21hcF90IG1hcHBpbmc7CisJaW50IHRhYmxlX3NpemU7CiB9IGRybV9hdGlfcGNpZ2FydF9pbmZvOwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZG1hLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9kbWEuYwppbmRleCA4OTJkYjcwLi4zMmVkMTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9kbWEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9kbWEuYwpAQCAtNjUsNyArNjUsNyBAQAogICogXHBhcmFtIGRldiBEUk0gZGV2aWNlLgogICoKICAqIEZyZWUgYWxsIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCBETUEgYnVmZmVycywgdGhlIGJ1ZmZlcnMgYW5kIHBhZ2VzIGxpc3RzLCBhbmQKLSAqIGZpbmFsbHkgdGhlIHRoZSBkcm1fZGV2aWNlOjpkbWEgc3RydWN0dXJlIGl0c2VsZi4KKyAqIGZpbmFsbHkgdGhlIGRybV9kZXZpY2U6OmRtYSBzdHJ1Y3R1cmUgaXRzZWxmLgogICovCiB2b2lkIGRybV9kbWFfdGFrZWRvd24oZHJtX2RldmljZV90ICogZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJhd2FibGUuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2RyYXdhYmxlLmMKaW5kZXggZGUzN2Q1Zi4uYjMzMzEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJhd2FibGUuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcmF3YWJsZS5jCkBAIC0xNzIsMzggKzE3Miw0OSBAQAogCiAJCWJpdGZpZWxkX2xlbmd0aCA9IGlkeCArIDE7CiAKLQkJaWYgKGlkeCAhPSBpZCAvICg4ICogc2l6ZW9mKCpiaXRmaWVsZCkpKQotCQkJYml0ZmllbGQgPSBkcm1fYWxsb2MoYml0ZmllbGRfbGVuZ3RoICoKLQkJCQkJICAgICBzaXplb2YoKmJpdGZpZWxkKSwgRFJNX01FTV9CVUZTKTsKKwkJYml0ZmllbGQgPSBOVUxMOwogCi0JCWlmICghYml0ZmllbGQgJiYgYml0ZmllbGRfbGVuZ3RoKSB7Ci0JCQliaXRmaWVsZCA9IGRldi0+ZHJ3X2JpdGZpZWxkOwotCQkJYml0ZmllbGRfbGVuZ3RoID0gZGV2LT5kcndfYml0ZmllbGRfbGVuZ3RoOworCQlpZiAoYml0ZmllbGRfbGVuZ3RoKSB7CisJCQlpZiAoYml0ZmllbGRfbGVuZ3RoICE9IGRldi0+ZHJ3X2JpdGZpZWxkX2xlbmd0aCkKKwkJCQliaXRmaWVsZCA9IGRybV9hbGxvYyhiaXRmaWVsZF9sZW5ndGggKgorCQkJCQkJICAgICBzaXplb2YoKmJpdGZpZWxkKSwKKwkJCQkJCSAgICAgRFJNX01FTV9CVUZTKTsKKworCQkJaWYgKCFiaXRmaWVsZCkgeworCQkJCWJpdGZpZWxkID0gZGV2LT5kcndfYml0ZmllbGQ7CisJCQkJYml0ZmllbGRfbGVuZ3RoID0gZGV2LT5kcndfYml0ZmllbGRfbGVuZ3RoOworCQkJfQogCQl9CiAJfQogCiAJaWYgKGJpdGZpZWxkICE9IGRldi0+ZHJ3X2JpdGZpZWxkKSB7CiAJCWluZm9fbGVuZ3RoID0gOCAqIHNpemVvZigqYml0ZmllbGQpICogYml0ZmllbGRfbGVuZ3RoOwogCi0JCWluZm8gPSBkcm1fYWxsb2MoaW5mb19sZW5ndGggKiBzaXplb2YoKmluZm8pLCBEUk1fTUVNX0JVRlMpOworCQlpZiAoaW5mb19sZW5ndGgpIHsKKwkJCWluZm8gPSBkcm1fYWxsb2MoaW5mb19sZW5ndGggKiBzaXplb2YoKmluZm8pLAorCQkJCQkgRFJNX01FTV9CVUZTKTsKIAotCQlpZiAoIWluZm8gJiYgaW5mb19sZW5ndGgpIHsKLQkJCWluZm8gPSBkZXYtPmRyd19pbmZvOwotCQkJaW5mb19sZW5ndGggPSBkZXYtPmRyd19pbmZvX2xlbmd0aDsKLQkJfQorCQkJaWYgKCFpbmZvKSB7CisJCQkJaW5mbyA9IGRldi0+ZHJ3X2luZm87CisJCQkJaW5mb19sZW5ndGggPSBkZXYtPmRyd19pbmZvX2xlbmd0aDsKKwkJCX0KKwkJfSBlbHNlCisJCQlpbmZvID0gTlVMTDsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5kcndfbG9jaywgaXJxZmxhZ3MpOwogCi0JCW1lbWNweShiaXRmaWVsZCwgZGV2LT5kcndfYml0ZmllbGQsIGJpdGZpZWxkX2xlbmd0aCAqCi0JCSAgICAgICBzaXplb2YoKmJpdGZpZWxkKSk7CisJCWlmIChiaXRmaWVsZCkKKwkJCW1lbWNweShiaXRmaWVsZCwgZGV2LT5kcndfYml0ZmllbGQsIGJpdGZpZWxkX2xlbmd0aCAqCisJCQkgICAgICAgc2l6ZW9mKCpiaXRmaWVsZCkpOwogCQlkcm1fZnJlZShkZXYtPmRyd19iaXRmaWVsZCwgc2l6ZW9mKCpiaXRmaWVsZCkgKgogCQkJIGRldi0+ZHJ3X2JpdGZpZWxkX2xlbmd0aCwgRFJNX01FTV9CVUZTKTsKIAkJZGV2LT5kcndfYml0ZmllbGQgPSBiaXRmaWVsZDsKIAkJZGV2LT5kcndfYml0ZmllbGRfbGVuZ3RoID0gYml0ZmllbGRfbGVuZ3RoOwogCiAJCWlmIChpbmZvICE9IGRldi0+ZHJ3X2luZm8pIHsKLQkJCW1lbWNweShpbmZvLCBkZXYtPmRyd19pbmZvLCBpbmZvX2xlbmd0aCAqCi0JCQkgICAgICAgc2l6ZW9mKCppbmZvKSk7CisJCQlpZiAoaW5mbykKKwkJCQltZW1jcHkoaW5mbywgZGV2LT5kcndfaW5mbywgaW5mb19sZW5ndGggKgorCQkJCSAgICAgICBzaXplb2YoKmluZm8pKTsKIAkJCWRybV9mcmVlKGRldi0+ZHJ3X2luZm8sIHNpemVvZigqaW5mbykgKgogCQkJCSBkZXYtPmRyd19pbmZvX2xlbmd0aCwgRFJNX01FTV9CVUZTKTsKIAkJCWRldi0+ZHJ3X2luZm8gPSBpbmZvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYwppbmRleCAyNmJlYzMwLi44ZTc3YjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYwpAQCAtMTUsOCArMTUsNiBAQAogICogI2RlZmluZSBEUklWRVJfREVTQwkJIk1hdHJveCBHMjAwL0c0MDAiCiAgKiAjZGVmaW5lIERSSVZFUl9EQVRFCQkiMjAwMDExMjciCiAgKgotICogI2RlZmluZSBEUklWRVJfSU9DVExfQ09VTlQJRFJNX0FSUkFZX1NJWkUoIG1nYV9pb2N0bHMgKQotICoKICAqICNkZWZpbmUgZHJtX3gJCW1nYV8jI3gKICAqIFxlbmRjb2RlCiAgKi8KQEAgLTEyMCw3ICsxMTgsNyBAQAogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1VQREFURV9EUkFXKV0gPSB7ZHJtX3VwZGF0ZV9kcmF3YWJsZV9pbmZvLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFl9LAogfTsKIAotI2RlZmluZSBEUklWRVJfSU9DVExfQ09VTlQJQVJSQVlfU0laRSggZHJtX2lvY3RscyApCisjZGVmaW5lIERSTV9DT1JFX0lPQ1RMX0NPVU5UCUFSUkFZX1NJWkUoIGRybV9pb2N0bHMgKQogCiAvKioKICAqIFRha2UgZG93biB0aGUgRFJNIGRldmljZS4KQEAgLTQ5NiwxMSArNDk0LDExIEBACiAJCSAgKGxvbmcpb2xkX2VuY29kZV9kZXYocHJpdi0+aGVhZC0+ZGV2aWNlKSwKIAkJICBwcml2LT5hdXRoZW50aWNhdGVkKTsKIAotCWlmICgobnIgPj0gRFJJVkVSX0lPQ1RMX0NPVU5UKSAmJgorCWlmICgobnIgPj0gRFJNX0NPUkVfSU9DVExfQ09VTlQpICYmCiAJICAgICgobnIgPCBEUk1fQ09NTUFORF9CQVNFKSB8fCAobnIgPj0gRFJNX0NPTU1BTkRfRU5EKSkpCiAJCWdvdG8gZXJyX2kxOwotCWlmICgobnIgPj0gRFJNX0NPTU1BTkRfQkFTRSkgJiYgKG5yIDwgRFJNX0NPTU1BTkRfRU5EKQotCQkgJiYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSArIGRldi0+ZHJpdmVyLT5udW1faW9jdGxzKSkKKwlpZiAoKG5yID49IERSTV9DT01NQU5EX0JBU0UpICYmIChuciA8IERSTV9DT01NQU5EX0VORCkgJiYKKwkgICAgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSArIGRldi0+ZHJpdmVyLT5udW1faW9jdGxzKSkKIAkJaW9jdGwgPSAmZGV2LT5kcml2ZXItPmlvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogCWVsc2UgaWYgKChuciA+PSBEUk1fQ09NTUFORF9FTkQpIHx8IChuciA8IERSTV9DT01NQU5EX0JBU0UpKQogCQlpb2N0bCA9ICZkcm1faW9jdGxzW25yXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX29zX2xpbnV4LmggYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9vc19saW51eC5oCmluZGV4IDI5MDhiNzIuLjBmZTdiNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX29zX2xpbnV4LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fb3NfbGludXguaApAQCAtNzAsOSArNzAsNiBAQAogCiAjZW5kaWYKIAotLyoqIFRhc2sgcXVldWUgaGFuZGxlciBhcmd1bWVudHMgKi8KLSNkZWZpbmUgRFJNX1RBU0tRVUVVRV9BUkdTCXZvaWQgKmFyZwotCiAvKiogRm9yIGRhdGEgZ29pbmcgaW50byB0aGUga2VybmVsIHRocm91Z2ggdGhlIGlvY3RsIGFyZ3VtZW50ICovCiAjZGVmaW5lIERSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChhcmcxLCBhcmcyLCBhcmczKQlcCiAJaWYgKCBjb3B5X2Zyb21fdXNlcigmYXJnMSwgYXJnMiwgYXJnMykgKQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2lpZHMuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IDAxY2Y0ODIuLjE3N2NjYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oCkBAIC0xMDIsMTIgKzEwMiwyMCBAQAogCXsweDEwMDIsIDB4NTY1MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1ODM0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMzAwfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg1ODM1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMzAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfSwgXAorCXsweDEwMDIsIDB4NTk1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKKwl7MHgxMDAyLCAweDU5NTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0MDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg1OTc0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NTk3NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MHgxMDAyLCAweDU5NjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCiAJezB4MTAwMiwgMHg1OTYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfSwgXAogCXsweDEwMDIsIDB4NTk2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKIAl7MHgxMDAyLCAweDU5NjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCiAJezB4MTAwMiwgMHg1OTY1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfSwgXAogCXsweDEwMDIsIDB4NTk2OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMH0sIFwKKwl7MHgxMDAyLCAweDVhNDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0MDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg1YTQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKKwl7MHgxMDAyLCAweDVhNjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0MDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg1YjYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWI2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDViNjMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX05FV19NRU1NQVB9LCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fdm0uYwppbmRleCAzNTU0MGNmLi5iNWM1YjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3ZtLmMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICogXHBhcmFtIGFkZHJlc3MgYWNjZXNzIGFkZHJlc3MuCiAgKiBccmV0dXJuIHBvaW50ZXIgdG8gdGhlIHBhZ2Ugc3RydWN0dXJlLgogICoKLSAqIEdldCB0aGUgdGhlIG1hcHBpbmcsIGZpbmQgdGhlIHJlYWwgcGh5c2ljYWwgcGFnZSB0byBtYXAsIGdldCB0aGUgcGFnZSwgYW5kCisgKiBHZXQgdGhlIG1hcHBpbmcsIGZpbmQgdGhlIHJlYWwgcGh5c2ljYWwgcGFnZSB0byBtYXAsIGdldCB0aGUgcGFnZSwgYW5kCiAgKiByZXR1cm4gaXQuCiAgKi8KIHN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBwYWdlICpkcm1fZG9fdm1fc2htX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pcnEuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pcnEuYwppbmRleCA3OGMxYWUyLi5iOTIwNjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2lycS5jCkBAIC01ODIsNyArNTgyLDcgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCi0JZGV2X3ByaXYtPnN3YXBzX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5zd2Fwc19sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPnZibF9zd2Fwcy5oZWFkKTsKIAlkZXZfcHJpdi0+c3dhcHNfcGVuZGluZyA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9jY2UuYyBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9jY2UuYwppbmRleCBkYjVhNjA0Li4xMDE0NjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfY2NlLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X2NjZS5jCkBAIC01NjAsOSArNTYwLDEwIEBACiAJaWYgKGRldl9wcml2LT5pc19wY2kpIHsKICNlbmRpZgogCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfdGFibGVfbG9jYXRpb24gPSBEUk1fQVRJX0dBUlRfTUFJTjsKKwkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9zaXplID0gUjEyOF9QQ0lHQVJUX1RBQkxFX1NJWkU7CiAJCWRldl9wcml2LT5nYXJ0X2luZm8uYWRkciA9IE5VTEw7CiAJCWRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHIgPSAwOwotCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmlzX3BjaWUgPSAwOworCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfcmVnX2lmID0gRFJNX0FUSV9HQVJUX1BDSTsKIAkJaWYgKCFkcm1fYXRpX3BjaWdhcnRfaW5pdChkZXYsICZkZXZfcHJpdi0+Z2FydF9pbmZvKSkgewogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBQQ0kgR0FSVCFcbiIpOwogCQkJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopZGV2X3ByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmggYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmgKaW5kZXggZjFlZmI0OS4uOTA4NjgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X2Rydi5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcnYuaApAQCAtMzgzLDYgKzM4Myw4IEBACiAKICNkZWZpbmUgUjEyOF9QRVJGT1JNQU5DRV9CT1hFUwkJMAogCisjZGVmaW5lIFIxMjhfUENJR0FSVF9UQUJMRV9TSVpFICAgICAgICAgMzI3NjgKKwogI2RlZmluZSBSMTI4X1JFQUQocmVnKQkJRFJNX1JFQUQzMiggIGRldl9wcml2LT5tbWlvLCAocmVnKSApCiAjZGVmaW5lIFIxMjhfV1JJVEUocmVnLHZhbCkJRFJNX1dSSVRFMzIoIGRldl9wcml2LT5tbWlvLCAocmVnKSwgKHZhbCkgKQogI2RlZmluZSBSMTI4X1JFQUQ4KHJlZykJCURSTV9SRUFEOCggICBkZXZfcHJpdi0+bW1pbywgKHJlZykgKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yMzAwX3JlZy5oIGIvZHJpdmVycy9jaGFyL2RybS9yMzAwX3JlZy5oCmluZGV4IGE4ODFmOTYuLmVjZGE3NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9yZWcuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfcmVnLmgKQEAgLTI5Myw3ICsyOTMsNyBAQAogIyAgICAgICBkZWZpbmUgUjMwMF9QVlNfQ05UTF8xX1BST0dSQU1fU1RBUlRfU0hJRlQgICAwCiAjICAgICAgIGRlZmluZSBSMzAwX1BWU19DTlRMXzFfUE9TX0VORF9TSElGVCAgICAgICAgIDEwCiAjICAgICAgIGRlZmluZSBSMzAwX1BWU19DTlRMXzFfUFJPR1JBTV9FTkRfU0hJRlQgICAgIDIwCi0vKiBBZGRyZXNzZXMgYXJlIHJlbGF0aXZlIHRoZSB0aGUgdmVydGV4IHByb2dyYW0gcGFyYW1ldGVycyBhcmVhLiAqLworLyogQWRkcmVzc2VzIGFyZSByZWxhdGl2ZSB0byB0aGUgdmVydGV4IHByb2dyYW0gcGFyYW1ldGVycyBhcmVhLiAqLwogI2RlZmluZSBSMzAwX1ZBUF9QVlNfQ05UTF8yICAgICAgICAgICAgICAgICAweDIyRDQKICMgICAgICAgZGVmaW5lIFIzMDBfUFZTX0NOVExfMl9QQVJBTV9PRkZTRVRfU0hJRlQgMAogIyAgICAgICBkZWZpbmUgUjMwMF9QVlNfQ05UTF8yX1BBUkFNX0NPVU5UX1NISUZUICAxNgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fY3AuYyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2NwLmMKaW5kZXggYzE4NTBlYy4uNjgzMzgzODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2NwLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fY3AuYwpAQCAtODMwLDYgKzgzMCwxNSBAQAogCXJldHVybiBSQURFT05fUkVBRChSQURFT05fUENJRV9EQVRBKTsKIH0KIAorc3RhdGljIHUzMiBSQURFT05fUkVBRF9JR1BHQVJUKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGFkZHIpCit7CisJdTMyIHJldDsKKwlSQURFT05fV1JJVEUoUkFERU9OX0lHUEdBUlRfSU5ERVgsIGFkZHIgJiAweDdmKTsKKwlyZXQgPSBSQURFT05fUkVBRChSQURFT05fSUdQR0FSVF9EQVRBKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0lHUEdBUlRfSU5ERVgsIDB4N2YpOworCXJldHVybiByZXQ7Cit9CisKICNpZiBSQURFT05fRklGT19ERUJVRwogc3RhdGljIHZvaWQgcmFkZW9uX3N0YXR1cyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2KQogewpAQCAtMTI2Nyw3ICsxMjc2LDQ0IEBACiAJfQogfQogCi0vKiBFbmFibGUgb3IgZGlzYWJsZSBQQ0ktRSBHQVJUIG9uIHRoZSBjaGlwICovCisvKiBFbmFibGUgb3IgZGlzYWJsZSBJR1AgR0FSVCBvbiB0aGUgY2hpcCAqLworc3RhdGljIHZvaWQgcmFkZW9uX3NldF9pZ3BnYXJ0KGRybV9yYWRlb25fcHJpdmF0ZV90ICogZGV2X3ByaXYsIGludCBvbikKK3sKKwl1MzIgdGVtcCwgdG1wOworCisJdG1wID0gUkFERU9OX1JFQUQoUkFERU9OX0FJQ19DTlRMKTsKKwlpZiAob24pIHsKKwkJRFJNX0RFQlVHKCJwcm9ncmFtbWluZyBpZ3BnYXJ0ICUwOFggJTA4bFggJTA4WFxuIiwKKwkJCSBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCwKKwkJCSAobG9uZylkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyLAorCQkJIGRldl9wcml2LT5nYXJ0X3NpemUpOworCisJCVJBREVPTl9XUklURV9JR1BHQVJUKFJBREVPTl9JR1BHQVJUX1VOS18xOCwgMHgxMDAwKTsKKwkJUkFERU9OX1dSSVRFX0lHUEdBUlQoUkFERU9OX0lHUEdBUlRfRU5BQkxFLCAweDEpOworCQlSQURFT05fV1JJVEVfSUdQR0FSVChSQURFT05fSUdQR0FSVF9DVFJMLCAweDQyMDQwODAwKTsKKwkJUkFERU9OX1dSSVRFX0lHUEdBUlQoUkFERU9OX0lHUEdBUlRfQkFTRV9BRERSLAorCQkJCSAgICAgZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkcik7CisKKwkJdGVtcCA9IFJBREVPTl9SRUFEX0lHUEdBUlQoZGV2X3ByaXYsIFJBREVPTl9JR1BHQVJUX1VOS18zOSk7CisJCVJBREVPTl9XUklURV9JR1BHQVJUKFJBREVPTl9JR1BHQVJUX1VOS18zOSwgdGVtcCk7CisKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9BR1BfQkFTRSwgKHVuc2lnbmVkIGludClkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJCWRldl9wcml2LT5nYXJ0X3NpemUgPSAzMioxMDI0KjEwMjQ7CisJCVJBREVPTl9XUklURShSQURFT05fTUNfQUdQX0xPQ0FUSU9OLAorCQkJICAgICAoKChkZXZfcHJpdi0+Z2FydF92bV9zdGFydCAtIDEgKworCQkJICAgICAgIGRldl9wcml2LT5nYXJ0X3NpemUpICYgMHhmZmZmMDAwMCkgfAorCQkJICAgICAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgPj4gMTYpKSk7CisKKwkJdGVtcCA9IFJBREVPTl9SRUFEX0lHUEdBUlQoZGV2X3ByaXYsIFJBREVPTl9JR1BHQVJUX0VOQUJMRSk7CisJCVJBREVPTl9XUklURV9JR1BHQVJUKFJBREVPTl9JR1BHQVJUX0VOQUJMRSwgdGVtcCk7CisKKwkJUkFERU9OX1JFQURfSUdQR0FSVChkZXZfcHJpdiwgUkFERU9OX0lHUEdBUlRfRkxVU0gpOworCQlSQURFT05fV1JJVEVfSUdQR0FSVChSQURFT05fSUdQR0FSVF9GTFVTSCwgMHgxKTsKKwkJUkFERU9OX1JFQURfSUdQR0FSVChkZXZfcHJpdiwgUkFERU9OX0lHUEdBUlRfRkxVU0gpOworCQlSQURFT05fV1JJVEVfSUdQR0FSVChSQURFT05fSUdQR0FSVF9GTFVTSCwgMHgwKTsKKyAgICAgICB9Cit9CisKIHN0YXRpYyB2b2lkIHJhZGVvbl9zZXRfcGNpZWdhcnQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwgaW50IG9uKQogewogCXUzMiB0bXAgPSBSQURFT05fUkVBRF9QQ0lFKGRldl9wcml2LCBSQURFT05fUENJRV9UWF9HQVJUX0NOVEwpOwpAQCAtMTMwMiw2ICsxMzQ4LDExIEBACiB7CiAJdTMyIHRtcDsKIAorCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQR0FSVCkgeworCQlyYWRlb25fc2V0X2lncGdhcnQoZGV2X3ByaXYsIG9uKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewogCQlyYWRlb25fc2V0X3BjaWVnYXJ0KGRldl9wcml2LCBvbik7CiAJCXJldHVybjsKQEAgLTE2MjAsMjAgKzE2NzEsMjIgQEAKICNlbmRpZgogCXsKIAkJLyogaWYgd2UgaGF2ZSBhbiBvZmZzZXQgc2V0IGZyb20gdXNlcnNwYWNlICovCi0JCWlmIChkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQpIHsKKwkJaWYgKGRldl9wcml2LT5wY2lnYXJ0X29mZnNldF9zZXQpIHsKIAkJCWRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHIgPQogCQkJICAgIGRldl9wcml2LT5wY2lnYXJ0X29mZnNldCArIGRldl9wcml2LT5mYl9sb2NhdGlvbjsKIAkJCWRldl9wcml2LT5nYXJ0X2luZm8ubWFwcGluZy5vZmZzZXQgPQogCQkJICAgIGRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHI7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcuc2l6ZSA9Ci0JCQkgICAgUkFERU9OX1BDSUdBUlRfVEFCTEVfU0laRTsKKwkJCSAgICBkZXZfcHJpdi0+Z2FydF9pbmZvLnRhYmxlX3NpemU7CiAKIAkJCWRybV9jb3JlX2lvcmVtYXAoJmRldl9wcml2LT5nYXJ0X2luZm8ubWFwcGluZywgZGV2KTsKIAkJCWRldl9wcml2LT5nYXJ0X2luZm8uYWRkciA9CiAJCQkgICAgZGV2X3ByaXYtPmdhcnRfaW5mby5tYXBwaW5nLmhhbmRsZTsKIAotCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5pc19wY2llID0KLQkJCSAgICAhIShkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSk7CisJCQlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5nYXJ0X3JlZ19pZiA9IERSTV9BVElfR0FSVF9QQ0lFOworCQkJZWxzZQorCQkJCWRldl9wcml2LT5nYXJ0X2luZm8uZ2FydF9yZWdfaWYgPSBEUk1fQVRJX0dBUlRfUENJOwogCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5nYXJ0X3RhYmxlX2xvY2F0aW9uID0KIAkJCSAgICBEUk1fQVRJX0dBUlRfRkI7CiAKQEAgLTE2NDEsNiArMTY5NCwxMCBAQAogCQkJCSAgZGV2X3ByaXYtPmdhcnRfaW5mby5hZGRyLAogCQkJCSAgZGV2X3ByaXYtPnBjaWdhcnRfb2Zmc2V0KTsKIAkJfSBlbHNlIHsKKwkJCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQR0FSVCkKKwkJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfcmVnX2lmID0gRFJNX0FUSV9HQVJUX0lHUDsKKwkJCWVsc2UKKwkJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfcmVnX2lmID0gRFJNX0FUSV9HQVJUX1BDSTsKIAkJCWRldl9wcml2LT5nYXJ0X2luZm8uZ2FydF90YWJsZV9sb2NhdGlvbiA9CiAJCQkgICAgRFJNX0FUSV9HQVJUX01BSU47CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmFkZHIgPSBOVUxMOwpAQCAtMTcxNCw3ICsxNzcxLDcgQEAKIAkJaWYgKGRldl9wcml2LT5nYXJ0X2luZm8uZ2FydF90YWJsZV9sb2NhdGlvbiA9PSBEUk1fQVRJX0dBUlRfRkIpCiAJCXsKIAkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKCZkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcsIGRldik7Ci0JCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmFkZHIgPSBOVUxMOworCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5hZGRyID0gMDsKIAkJfQogCX0KIAkvKiBvbmx5IGNsZWFyIHRvIHRoZSBzdGFydCBvZiBmbGFncyAqLwpAQCAtMjIyMiw2ICsyMjc5LDggQEAKIAlkcm1fbG9jYWxfbWFwX3QgKm1hcDsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCisJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9zaXplID0gUkFERU9OX1BDSUdBUlRfVEFCTEVfU0laRTsKKwogCXJldCA9IGRybV9hZGRtYXAoZGV2LCBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgMiksCiAJCQkgZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAyKSwgX0RSTV9SRUdJU1RFUlMsCiAJCQkgX0RSTV9SRUFEX09OTFksICZkZXZfcHJpdi0+bW1pbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcm0uaCBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2RybS5oCmluZGV4IDhkNjM1MGQuLjY2YzRiNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2RybS5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2RybS5oCkBAIC03MDcsNiArNzA3LDcgQEAKICNkZWZpbmUgUkFERU9OX1NFVFBBUkFNX1NXSVRDSF9USUxJTkcgIDIJLyogZW5hYmxlL2Rpc2FibGUgY29sb3IgdGlsaW5nICovCiAjZGVmaW5lIFJBREVPTl9TRVRQQVJBTV9QQ0lHQVJUX0xPQ0FUSU9OIDMJLyogUENJIEdhcnQgTG9jYXRpb24gKi8KICNkZWZpbmUgUkFERU9OX1NFVFBBUkFNX05FV19NRU1NQVAgNAkJLyogVXNlIG5ldyBtZW1vcnkgbWFwICovCisjZGVmaW5lIFJBREVPTl9TRVRQQVJBTV9QQ0lHQVJUX1RBQkxFX1NJWkUgNSAgICAvKiBQQ0kgR0FSVCBUYWJsZSBTaXplICovCiAKIC8qIDEuMTQ6IENsaWVudHMgY2FuIGFsbG9jYXRlL2ZyZWUgYSBzdXJmYWNlCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5oIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJ2LmgKaW5kZXggOGIxMDVmMS4uNTRmNDllZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJ2LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJ2LmgKQEAgLTk1LDkgKzk1LDExIEBACiAgKiAxLjI0LSBBZGQgZ2VuZXJhbC1wdXJwb3NlIHBhY2tldCBmb3IgbWFuaXB1bGF0aW5nIHNjcmF0Y2ggcmVnaXN0ZXJzIChyMzAwKQogICogMS4yNS0gQWRkIHN1cHBvcnQgZm9yIHIyMDAgdmVydGV4IHByb2dyYW1zIChSMjAwX0VNSVRfVkFQX1BWU19DTlRMLAogICogICAgICAgbmV3IHBhY2tldCB0eXBlKQorICogMS4yNi0gQWRkIHN1cHBvcnQgZm9yIHZhcmlhYmxlIHNpemUgUENJKEUpIGdhcnQgYXBlcnR1cmUKKyAqIDEuMjctIEFkZCBzdXBwb3J0IGZvciBJR1AgR0FSVAogICovCiAjZGVmaW5lIERSSVZFUl9NQUpPUgkJMQotI2RlZmluZSBEUklWRVJfTUlOT1IJCTI1CisjZGVmaW5lIERSSVZFUl9NSU5PUgkJMjcKICNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwJMAogCiAvKgpAQCAtMTQzLDYgKzE0NSw3IEBACiAJUkFERU9OX0lTX1BDSUUgPSAweDAwMjAwMDAwVUwsCiAJUkFERU9OX05FV19NRU1NQVAgPSAweDAwNDAwMDAwVUwsCiAJUkFERU9OX0lTX1BDSSA9IDB4MDA4MDAwMDBVTCwKKwlSQURFT05fSVNfSUdQR0FSVCA9IDB4MDEwMDAwMDBVTCwKIH07CiAKICNkZWZpbmUgR0VUX1JJTkdfSEVBRChkZXZfcHJpdikJKGRldl9wcml2LT53cml0ZWJhY2tfd29ya3MgPyBcCkBAIC0yNDAsNyArMjQzLDYgQEAKIAogCWludCBkb19ib3hlczsKIAlpbnQgcGFnZV9mbGlwcGluZzsKLQlpbnQgY3VycmVudF9wYWdlOwogCiAJdTMyIGNvbG9yX2ZtdDsKIAl1bnNpZ25lZCBpbnQgZnJvbnRfb2Zmc2V0OwpAQCAtMjgwLDYgKzI4Miw3IEBACiAJc3RydWN0IHJhZGVvbl92aXJ0X3N1cmZhY2UgdmlydF9zdXJmYWNlc1syICogUkFERU9OX01BWF9TVVJGQUNFU107CiAKIAl1bnNpZ25lZCBsb25nIHBjaWdhcnRfb2Zmc2V0OworCXVuc2lnbmVkIGludCBwY2lnYXJ0X29mZnNldF9zZXQ7CiAJZHJtX2F0aV9wY2lnYXJ0X2luZm8gZ2FydF9pbmZvOwogCiAJdTMyIHNjcmF0Y2hfYWdlc1s1XTsKQEAgLTQzMiw2ICs0MzUsMTUgQEAKICNkZWZpbmUgUkFERU9OX1BDSUVfVFhfR0FSVF9FTkRfTE8JMHgxNgogI2RlZmluZSBSQURFT05fUENJRV9UWF9HQVJUX0VORF9ISQkweDE3CiAKKyNkZWZpbmUgUkFERU9OX0lHUEdBUlRfSU5ERVggICAgICAgICAgICAweDE2OAorI2RlZmluZSBSQURFT05fSUdQR0FSVF9EQVRBICAgICAgICAgICAgIDB4MTZjCisjZGVmaW5lIFJBREVPTl9JR1BHQVJUX1VOS18xOCAgICAgICAgICAgMHgxOAorI2RlZmluZSBSQURFT05fSUdQR0FSVF9DVFJMICAgICAgICAgICAgIDB4MmIKKyNkZWZpbmUgUkFERU9OX0lHUEdBUlRfQkFTRV9BRERSICAgICAgICAweDJjCisjZGVmaW5lIFJBREVPTl9JR1BHQVJUX0ZMVVNIICAgICAgICAgICAgMHgyZQorI2RlZmluZSBSQURFT05fSUdQR0FSVF9FTkFCTEUgICAgICAgICAgIDB4MzgKKyNkZWZpbmUgUkFERU9OX0lHUEdBUlRfVU5LXzM5ICAgICAgICAgICAweDM5CisKICNkZWZpbmUgUkFERU9OX01QUF9UQl9DT05GSUcJCTB4MDFjMAogI2RlZmluZSBSQURFT05fTUVNX0NOVEwJCQkweDAxNDAKICNkZWZpbmUgUkFERU9OX01FTV9TRFJBTV9NT0RFX1JFRwkweDAxNTgKQEAgLTk2NCw2ICs5NzYsMTQgQEAKIAlSQURFT05fV1JJVEUoIFJBREVPTl9DTE9DS19DTlRMX0RBVEEsICh2YWwpICk7CQkJXAogfSB3aGlsZSAoMCkKIAorI2RlZmluZSBSQURFT05fV1JJVEVfSUdQR0FSVCggYWRkciwgdmFsICkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlSQURFT05fV1JJVEUoIFJBREVPTl9JR1BHQVJUX0lOREVYLAkJCQlcCisJCQkoKGFkZHIpICYgMHg3ZikgfCAoMSA8PCA4KSk7CQkJXAorCVJBREVPTl9XUklURSggUkFERU9OX0lHUEdBUlRfREFUQSwgKHZhbCkgKTsJCQlcCisJUkFERU9OX1dSSVRFKCBSQURFT05fSUdQR0FSVF9JTkRFWCwgMHg3ZiApOwkJCVwKK30gd2hpbGUgKDApCisKICNkZWZpbmUgUkFERU9OX1dSSVRFX1BDSUUoIGFkZHIsIHZhbCApCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCVJBREVPTl9XUklURTgoIFJBREVPTl9QQ0lFX0lOREVYLAkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fc3RhdGUuYwppbmRleCA5MzhlY2NiLi45OGM1ZjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX3N0YXRlLmMKQEAgLTc3Myw3ICs3NzMsNyBAQAogCQkgUkFERU9OX0dNQ19TUkNfREFUQVRZUEVfQ09MT1IgfAogCQkgUkFERU9OX1JPUDNfUCB8IFJBREVPTl9HTUNfQ0xSX0NNUF9DTlRMX0RJUyk7CiAKLQlpZiAoZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcgJiYgZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAxKSB7CisJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID09IDEpIHsKIAkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCk7CiAJfSBlbHNlIHsKIAkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfcGl0Y2hfb2Zmc2V0KTsKQEAgLTg2MSw3ICs4NjEsNyBAQAogCiAJZGV2X3ByaXYtPnN0YXRzLmNsZWFycysrOwogCi0JaWYgKGRldl9wcml2LT5wYWdlX2ZsaXBwaW5nICYmIGRldl9wcml2LT5jdXJyZW50X3BhZ2UgPT0gMSkgeworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSA9PSAxKSB7CiAJCXVuc2lnbmVkIGludCB0bXAgPSBmbGFnczsKIAogCQlmbGFncyAmPSB+KFJBREVPTl9GUk9OVCB8IFJBREVPTl9CQUNLKTsKQEAgLTEzODIsNyArMTM4Miw3IEBACiAJCS8qIE1ha2UgdGhpcyB3b3JrIGV2ZW4gaWYgZnJvbnQgJiBiYWNrIGFyZSBmbGlwcGVkOgogCQkgKi8KIAkJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fU1JDX1BJVENIX09GRlNFVCwgMSkpOwotCQlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAwKSB7CisJCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSA9PSAwKSB7CiAJCQlPVVRfUklORyhkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXQpOwogCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCk7CiAJCX0gZWxzZSB7CkBAIC0xNDE2LDEyICsxNDE2LDEyIEBACiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fc2FyZWFfdCAqc2FyZWEgPSAoZHJtX3NhcmVhX3QgKikgZGV2X3ByaXYtPnNhcmVhLT5oYW5kbGU7Ci0JaW50IG9mZnNldCA9IChkZXZfcHJpdi0+Y3VycmVudF9wYWdlID09IDEpCisJaW50IG9mZnNldCA9IChkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSA9PSAxKQogCSAgICA/IGRldl9wcml2LT5mcm9udF9vZmZzZXQgOiBkZXZfcHJpdi0+YmFja19vZmZzZXQ7CiAJUklOR19MT0NBTFM7Ci0JRFJNX0RFQlVHKCIlczogcGFnZT0lZCBwZkN1cnJlbnRQYWdlPSVkXG4iLAorCURSTV9ERUJVRygiJXM6IHBmQ3VycmVudFBhZ2U9JWRcbiIsCiAJCSAgX19GVU5DVElPTl9fLAotCQkgIGRldl9wcml2LT5jdXJyZW50X3BhZ2UsIGRldl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlKTsKKwkJICBkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSk7CiAKIAkvKiBEbyBzb21lIHRyaXZpYWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZy4uLgogCSAqLwpAQCAtMTQ0OSw4ICsxNDQ5LDggQEAKIAkgKiBwZXJmb3JtaW5nIHRoZSBzd2FwYnVmZmVyIGlvY3RsLgogCSAqLwogCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lKys7Ci0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UgPSBkZXZfcHJpdi0+Y3VycmVudF9wYWdlID0KLQkgICAgMSAtIGRldl9wcml2LT5jdXJyZW50X3BhZ2U7CisJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UgPQorCQkxIC0gZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2U7CiAKIAlCRUdJTl9SSU5HKDIpOwogCkBAIC0yMTUyLDI0ICsyMTUyLDEwIEBACiAJQURWQU5DRV9SSU5HKCk7CiAKIAlkZXZfcHJpdi0+cGFnZV9mbGlwcGluZyA9IDE7Ci0JZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9IDA7Ci0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UgPSBkZXZfcHJpdi0+Y3VycmVudF9wYWdlOwogCi0JcmV0dXJuIDA7Ci19CisJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlICE9IDEpCisJCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID0gMDsKIAotLyogQ2FsbGVkIHdoZW5ldmVyIGEgY2xpZW50IGRpZXMsIGZyb20gZHJtX3JlbGVhc2UuCi0gKiBOT1RFOiAgTG9jayBpc24ndCBuZWNlc3NhcmlseSBoZWxkIHdoZW4gdGhpcyBpcyBjYWxsZWQhCi0gKi8KLXN0YXRpYyBpbnQgcmFkZW9uX2RvX2NsZWFudXBfcGFnZWZsaXAoZHJtX2RldmljZV90ICogZGV2KQotewotCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JRFJNX0RFQlVHKCJcbiIpOwotCi0JaWYgKGRldl9wcml2LT5jdXJyZW50X3BhZ2UgIT0gMCkKLQkJcmFkZW9uX2NwX2Rpc3BhdGNoX2ZsaXAoZGV2KTsKLQotCWRldl9wcml2LT5wYWdlX2ZsaXBwaW5nID0gMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzE0NSwxMCArMzEzMSwxNiBAQAogCQlicmVhazsKIAljYXNlIFJBREVPTl9TRVRQQVJBTV9QQ0lHQVJUX0xPQ0FUSU9OOgogCQlkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQgPSBzcC52YWx1ZTsKKwkJZGV2X3ByaXYtPnBjaWdhcnRfb2Zmc2V0X3NldCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFVFBBUkFNX05FV19NRU1NQVA6CiAJCWRldl9wcml2LT5uZXdfbWVtbWFwID0gc3AudmFsdWU7CiAJCWJyZWFrOworCWNhc2UgUkFERU9OX1NFVFBBUkFNX1BDSUdBUlRfVEFCTEVfU0laRToKKwkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9zaXplID0gc3AudmFsdWU7CisJCWlmIChkZXZfcHJpdi0+Z2FydF9pbmZvLnRhYmxlX3NpemUgPCBSQURFT05fUENJR0FSVF9UQUJMRV9TSVpFKQorCQkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9zaXplID0gUkFERU9OX1BDSUdBUlRfVEFCTEVfU0laRTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0RFQlVHKCJJbnZhbGlkIHBhcmFtZXRlciAlZFxuIiwgc3AucGFyYW0pOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwpAQCAtMzE2OCw5ICszMTYwLDcgQEAKIHsKIAlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCQlpZiAoZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcpIHsKLQkJCXJhZGVvbl9kb19jbGVhbnVwX3BhZ2VmbGlwKGRldik7Ci0JCX0KKwkJZGV2X3ByaXYtPnBhZ2VfZmxpcHBpbmcgPSAwOwogCQlyYWRlb25fbWVtX3JlbGVhc2UoZmlscCwgZGV2X3ByaXYtPmdhcnRfaGVhcCk7CiAJCXJhZGVvbl9tZW1fcmVsZWFzZShmaWxwLCBkZXZfcHJpdi0+ZmJfaGVhcCk7CiAJCXJhZGVvbl9zdXJmYWNlc19yZWxlYXNlKGZpbHAsIGRldl9wcml2KTsKQEAgLTMxNzksNiArMzE2OSwxNCBAQAogCiB2b2lkIHJhZGVvbl9kcml2ZXJfbGFzdGNsb3NlKGRybV9kZXZpY2VfdCAqIGRldikKIHsKKwlpZiAoZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdiAmJgorCQkgICAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmQ3VycmVudFBhZ2UgIT0gMCkKKwkJCXJhZGVvbl9jcF9kaXNwYXRjaF9mbGlwKGRldik7CisJfQorCiAJcmFkZW9uX2RvX3JlbGVhc2UoZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWEuYwppbmRleCBjMDUzOWM2Li4xM2E5YzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWEuYwpAQCAtMjUyLDcgKzI1Miw3IEBACiAJCWJyZWFrOwogCWNhc2UgVklBX0RNQV9JTklUSUFMSVpFRDoKIAkJcmV0Y29kZSA9IChkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ICE9IE5VTEwpID8KLQkJICAgIDAgOiBEUk1fRVJSKEVGQVVMVCk7CisJCQkwIDogRFJNX0VSUihFRkFVTFQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXRjb2RlID0gRFJNX0VSUihFSU5WQUwpOwpAQCAtNDMyLDU2ICs0MzIsMzQgQEAKIHsKIAlpbnQgcGF1c2VkLCBjb3VudDsKIAl2b2xhdGlsZSB1aW50MzJfdCAqcGF1c2VkX2F0ID0gZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyOwotCi0JdmlhX2ZsdXNoX3dyaXRlX2NvbWJpbmUoKTsKLQl3aGlsZSAoISoodmlhX2dldF9kbWEoZGV2X3ByaXYpIC0gMSkpIDsKLQkqZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyID0gcGF1c2VfYWRkcl9sbzsKLQl2aWFfZmx1c2hfd3JpdGVfY29tYmluZSgpOwotCi0JLyoKLQkgKiBUaGUgYmVsb3cgc3RhdGVtZW50IGlzIGluc2VydGVkIHRvIHJlYWxseSBmb3JjZSB0aGUgZmx1c2guCi0JICogTm90IHN1cmUgaXQgaXMgbmVlZGVkLgotCSAqLwotCi0Jd2hpbGUgKCEqZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyKSA7Ci0JZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyID0gdmlhX2dldF9kbWEoZGV2X3ByaXYpIC0gMTsKLQl3aGlsZSAoISpkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIpIDsKKwl1aW50MzJfdCByZWFkZXIscHRyOwogCiAJcGF1c2VkID0gMDsKLQljb3VudCA9IDIwOworCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7CisJKHZvaWQpICoodm9sYXRpbGUgdWludDMyX3QgKikodmlhX2dldF9kbWEoZGV2X3ByaXYpIC0xKTsKKwkqcGF1c2VkX2F0ID0gcGF1c2VfYWRkcl9sbzsKKwl2aWFfZmx1c2hfd3JpdGVfY29tYmluZSgpOworCSh2b2lkKSAqcGF1c2VkX2F0OworCXJlYWRlciA9ICooZGV2X3ByaXYtPmh3X2FkZHJfcHRyKTsKKwlwdHIgPSAoKHZvbGF0aWxlIGNoYXIgKilwYXVzZWRfYXQgLSBkZXZfcHJpdi0+ZG1hX3B0cikgKworCQlkZXZfcHJpdi0+ZG1hX29mZnNldCArICh1aW50MzJfdCkgZGV2X3ByaXYtPmFncEFkZHIgKyA0OworCWRldl9wcml2LT5sYXN0X3BhdXNlX3B0ciA9IHZpYV9nZXRfZG1hKGRldl9wcml2KSAtIDE7CiAKLQl3aGlsZSAoIShwYXVzZWQgPSAoVklBX1JFQUQoMHg0MWMpICYgMHg4MDAwMDAwMCkpICYmIGNvdW50LS0pIDsKLQlpZiAoKGNvdW50IDw9IDgpICYmIChjb3VudCA+PSAwKSkgewotCQl1aW50MzJfdCByZ3RyLCBwdHI7Ci0JCXJndHIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cik7Ci0JCXB0ciA9ICgodm9sYXRpbGUgY2hhciAqKWRldl9wcml2LT5sYXN0X3BhdXNlX3B0ciAtCi0JCSAgICAgIGRldl9wcml2LT5kbWFfcHRyKSArIGRldl9wcml2LT5kbWFfb2Zmc2V0ICsKLQkJICAgICAgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkciArIDQgLSBDTURCVUZfQUxJR05NRU5UX1NJWkU7Ci0JCWlmIChyZ3RyIDw9IHB0cikgewotCQkJRFJNX0VSUk9SCi0JCQkgICAgKCJDb21tYW5kIHJlZ3VsYXRvclxucGF1c2VkIGF0IGNvdW50ICVkLCBhZGRyZXNzICV4LCAiCi0JCQkgICAgICJ3aGlsZSBjdXJyZW50IHBhdXNlIGFkZHJlc3MgaXMgJXguXG4iCi0JCQkgICAgICJQbGVhc2UgbWFpbCB0aGlzIG1lc3NhZ2UgdG8gIgotCQkJICAgICAiPHVuaWNocm9tZS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iLCBjb3VudCwKLQkJCSAgICAgcmd0ciwgcHRyKTsKLQkJfQorCWlmICgocHRyIC0gcmVhZGVyKSA8PSBkZXZfcHJpdi0+ZG1hX2RpZmYgKSB7CisJCWNvdW50ID0gMTAwMDAwMDA7CisJCXdoaWxlICghKHBhdXNlZCA9IChWSUFfUkVBRCgweDQxYykgJiAweDgwMDAwMDAwKSkgJiYgY291bnQtLSk7CiAJfQogCiAJaWYgKHBhdXNlZCAmJiAhbm9fcGNpX2ZpcmUpIHsKLQkJdWludDMyX3Qgcmd0ciwgcHRyOwotCQl1aW50MzJfdCBwdHJfbG93OworCQlyZWFkZXIgPSAqKGRldl9wcml2LT5od19hZGRyX3B0cik7CisJCWlmICgocHRyIC0gcmVhZGVyKSA9PSBkZXZfcHJpdi0+ZG1hX2RpZmYpIHsKIAotCQljb3VudCA9IDEwMDAwMDA7Ci0JCXdoaWxlICgoVklBX1JFQUQoVklBX1JFR19TVEFUVVMpICYgVklBX0NNRF9SR1RSX0JVU1kpCi0JCSAgICAgICAmJiBjb3VudC0tKSA7CisJCQkvKgorCQkJICogVGhlcmUgaXMgYSBjb25jZXJuIHRoYXQgdGhlc2Ugd3JpdGVzIG1heSBzdGFsbCB0aGUgUENJIGJ1cworCQkJICogaWYgdGhlIEdQVSBpcyBub3QgaWRsZS4gSG93ZXZlciwgaWRsaW5nIHRoZSBHUFUgZmlyc3QKKwkJCSAqIGRvZXNuJ3QgbWFrZSBhIGRpZmZlcmVuY2UuCisJCQkgKi8KIAotCQlyZ3RyID0gKihkZXZfcHJpdi0+aHdfYWRkcl9wdHIpOwotCQlwdHIgPSAoKHZvbGF0aWxlIGNoYXIgKilwYXVzZWRfYXQgLSBkZXZfcHJpdi0+ZG1hX3B0cikgKwotCQkgICAgZGV2X3ByaXYtPmRtYV9vZmZzZXQgKyAodWludDMyX3QpIGRldl9wcml2LT5hZ3BBZGRyICsgNDsKLQotCQlwdHJfbG93ID0gKHB0ciA+IDMgKiBDTURCVUZfQUxJR05NRU5UX1NJWkUpID8KLQkJICAgIHB0ciAtIDMgKiBDTURCVUZfQUxJR05NRU5UX1NJWkUgOiAwOwotCQlpZiAocmd0ciA8PSBwdHIgJiYgcmd0ciA+PSBwdHJfbG93KSB7CiAJCQlWSUFfV1JJVEUoVklBX1JFR19UUkFOU0VULCAoSENfUGFyYVR5cGVfUHJlQ1IgPDwgMTYpKTsKIAkJCVZJQV9XUklURShWSUFfUkVHX1RSQU5TUEFDRSwgcGF1c2VfYWRkcl9oaSk7CiAJCQlWSUFfV1JJVEUoVklBX1JFR19UUkFOU1BBQ0UsIHBhdXNlX2FkZHJfbG8pOwpAQCAtNDk0LDYgKzQ3Miw5IEBACiBzdGF0aWMgaW50IHZpYV93YWl0X2lkbGUoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAlpbnQgY291bnQgPSAxMDAwMDAwMDsKKworCXdoaWxlICghKFZJQV9SRUFEKFZJQV9SRUdfU1RBVFVTKSAmIFZJQV9WUl9RVUVVRV9CVVNZKSAmJiBjb3VudC0tKTsKKwogCXdoaWxlIChjb3VudC0tICYmIChWSUFfUkVBRChWSUFfUkVHX1NUQVRVUykgJgogCQkJICAgKFZJQV9DTURfUkdUUl9CVVNZIHwgVklBXzJEX0VOR19CVVNZIHwKIAkJCSAgICBWSUFfM0RfRU5HX0JVU1kpKSkgOwpAQCAtNTM3LDYgKzUxOCw5IEBACiAJdWludDMyX3QgZW5kX2FkZHIsIGVuZF9hZGRyX2xvOwogCXVpbnQzMl90IGNvbW1hbmQ7CiAJdWludDMyX3QgYWdwX2Jhc2U7CisJdWludDMyX3QgcHRyOworCXVpbnQzMl90IHJlYWRlcjsKKwlpbnQgY291bnQ7CiAKIAlkZXZfcHJpdi0+ZG1hX2xvdyA9IDA7CiAKQEAgLTU1NCw3ICs1MzgsNyBAQAogCQkJICAmcGF1c2VfYWRkcl9oaSwgJnBhdXNlX2FkZHJfbG8sIDEpIC0gMTsKIAogCXZpYV9mbHVzaF93cml0ZV9jb21iaW5lKCk7Ci0Jd2hpbGUgKCEqZGV2X3ByaXYtPmxhc3RfcGF1c2VfcHRyKSA7CisJKHZvaWQpICoodm9sYXRpbGUgdWludDMyX3QgKilkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHI7CiAKIAlWSUFfV1JJVEUoVklBX1JFR19UUkFOU0VULCAoSENfUGFyYVR5cGVfUHJlQ1IgPDwgMTYpKTsKIAlWSUFfV1JJVEUoVklBX1JFR19UUkFOU1BBQ0UsIGNvbW1hbmQpOwpAQCAtNTY2LDYgKzU1MCwyNCBAQAogCURSTV9XUklURU1FTU9SWUJBUlJJRVIoKTsKIAlWSUFfV1JJVEUoVklBX1JFR19UUkFOU1BBQ0UsIGNvbW1hbmQgfCBIQ19IQUdQQ01OVF9NQVNLKTsKIAlWSUFfUkVBRChWSUFfUkVHX1RSQU5TUEFDRSk7CisKKwlkZXZfcHJpdi0+ZG1hX2RpZmYgPSAwOworCisJY291bnQgPSAxMDAwMDAwMDsKKwl3aGlsZSAoIShWSUFfUkVBRCgweDQxYykgJiAweDgwMDAwMDAwKSAmJiBjb3VudC0tKTsKKworCXJlYWRlciA9ICooZGV2X3ByaXYtPmh3X2FkZHJfcHRyKTsKKwlwdHIgPSAoKHZvbGF0aWxlIGNoYXIgKilkZXZfcHJpdi0+bGFzdF9wYXVzZV9wdHIgLSBkZXZfcHJpdi0+ZG1hX3B0cikgKworCSAgICBkZXZfcHJpdi0+ZG1hX29mZnNldCArICh1aW50MzJfdCkgZGV2X3ByaXYtPmFncEFkZHIgKyA0OworCisJLyoKKwkgKiBUaGlzIGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gd2hlcmUgd2UgdGVsbCB0aGUKKwkgKiBjb21tYW5kIHJlYWRlciB0byBwYXVzZSBhbmQgd2hlcmUgaXQgYWN0dWFsbHkgcGF1c2VzLgorCSAqIFRoaXMgZGlmZmVycyBiZXR3ZWVuIGh3IGltcGxlbWVudGF0aW9uIHNvIHdlIG5lZWQgdG8KKwkgKiBkZXRlY3QgaXQuCisJICovCisKKwlkZXZfcHJpdi0+ZG1hX2RpZmYgPSBwdHIgLSByZWFkZXI7CiB9CiAKIHN0YXRpYyB2b2lkIHZpYV9wYWRfY2FjaGUoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdiwgaW50IHF3b3JkcykKQEAgLTU5Miw3ICs1OTQsNiBAQAogCXVpbnQzMl90IHBhdXNlX2FkZHJfbG8sIHBhdXNlX2FkZHJfaGk7CiAJdWludDMyX3QganVtcF9hZGRyX2xvLCBqdW1wX2FkZHJfaGk7CiAJdm9sYXRpbGUgdWludDMyX3QgKmxhc3RfcGF1c2VfcHRyOwotCXVpbnQzMl90IGRtYV9sb3dfc2F2ZTEsIGRtYV9sb3dfc2F2ZTI7CiAKIAlhZ3BfYmFzZSA9IGRldl9wcml2LT5kbWFfb2Zmc2V0ICsgKHVpbnQzMl90KSBkZXZfcHJpdi0+YWdwQWRkcjsKIAl2aWFfYWxpZ25fY21kKGRldl9wcml2LCBIQ19IQUdQQnBJRF9KVU1QLCAwLCAmanVtcF9hZGRyX2hpLApAQCAtNjE5LDMxICs2MjAsMTEgQEAKIAkJICAgICAgJnBhdXNlX2FkZHJfbG8sIDApOwogCiAJKmxhc3RfcGF1c2VfcHRyID0gcGF1c2VfYWRkcl9sbzsKLQlkbWFfbG93X3NhdmUxID0gZGV2X3ByaXYtPmRtYV9sb3c7CiAKLQkvKgotCSAqIE5vdywgc2V0IGEgdHJhcCB0aGF0IHdpbGwgcGF1c2UgdGhlIHJlZ3VsYXRvciBpZiBpdCB0cmllcyB0byByZXJ1biB0aGUgb2xkCi0JICogY29tbWFuZCBidWZmZXIuIChXaGljaCBtYXkgaGFwcGVuIGlmIHZpYV9ob29rX3NlZ21lbnQgZGV0ZWNzIGEgY29tbWFuZCByZWd1bGF0b3IgcGF1c2UKLQkgKiBhbmQgcmVpc3N1ZXMgdGhlIGp1bXAgY29tbWFuZCBvdmVyIFBDSSwgd2hpbGUgdGhlIHJlZ3VsYXRvciBoYXMgYWxyZWFkeSB0YWtlbiB0aGUganVtcAotCSAqIGFuZCBhY3R1YWxseSBwYXVzZWQgYXQgdGhlIGN1cnJlbnQgYnVmZmVyIGVuZCkuCi0JICogVGhlcmUgYXBwZWFycyB0byBiZSBubyBvdGhlciB3YXkgdG8gZGV0ZWN0IHRoaXMgY29uZGl0aW9uLCBzaW5jZSB0aGUgaHdfYWRkcl9wb2ludGVyCi0JICogZG9lcyBub3Qgc2VlbSB0byBnZXQgdXBkYXRlZCBpbW1lZGlhdGVseSB3aGVuIGEganVtcCBvY2N1cnMuCi0JICovCi0KLQlsYXN0X3BhdXNlX3B0ciA9Ci0JICAgIHZpYV9hbGlnbl9jbWQoZGV2X3ByaXYsIEhDX0hBR1BCcElEX1BBVVNFLCAwLCAmcGF1c2VfYWRkcl9oaSwKLQkJCSAgJnBhdXNlX2FkZHJfbG8sIDApIC0gMTsKLQl2aWFfYWxpZ25fY21kKGRldl9wcml2LCBIQ19IQUdQQnBJRF9QQVVTRSwgMCwgJnBhdXNlX2FkZHJfaGksCi0JCSAgICAgICZwYXVzZV9hZGRyX2xvLCAwKTsKLQkqbGFzdF9wYXVzZV9wdHIgPSBwYXVzZV9hZGRyX2xvOwotCi0JZG1hX2xvd19zYXZlMiA9IGRldl9wcml2LT5kbWFfbG93OwotCWRldl9wcml2LT5kbWFfbG93ID0gZG1hX2xvd19zYXZlMTsKLQl2aWFfaG9va19zZWdtZW50KGRldl9wcml2LCBqdW1wX2FkZHJfaGksIGp1bXBfYWRkcl9sbywgMCk7Ci0JZGV2X3ByaXYtPmRtYV9sb3cgPSBkbWFfbG93X3NhdmUyOwotCXZpYV9ob29rX3NlZ21lbnQoZGV2X3ByaXYsIHBhdXNlX2FkZHJfaGksIHBhdXNlX2FkZHJfbG8sIDApOworCXZpYV9ob29rX3NlZ21lbnQoIGRldl9wcml2LCBqdW1wX2FkZHJfaGksIGp1bXBfYWRkcl9sbywgMCk7CiB9CiAKKwogc3RhdGljIHZvaWQgdmlhX2NtZGJ1Zl9yZXdpbmQoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdikKIHsKIAl2aWFfY21kYnVmX2p1bXAoZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfZHJ2LmggYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuaAppbmRleCA4Yjg3NzhkLi5iNDZjYThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuaApAQCAtMjksMTEgKzI5LDExIEBACiAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJ2aWEiCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiVklBIFVuaWNocm9tZSAvIFBybyIKLSNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA2MTIyNyIKKyNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA3MDIwMiIKIAogI2RlZmluZSBEUklWRVJfTUFKT1IJCTIKICNkZWZpbmUgRFJJVkVSX01JTk9SCQkxMQotI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTAkwCisjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTEKIAogI2luY2x1ZGUgInZpYV92ZXJpZmllci5oIgogCkBAIC05Myw2ICs5Myw3IEBACiAJdW5zaWduZWQgbG9uZyB2cmFtX29mZnNldDsKIAl1bnNpZ25lZCBsb25nIGFncF9vZmZzZXQ7CiAJZHJtX3ZpYV9ibGl0cV90IGJsaXRfcXVldWVzW1ZJQV9OVU1fQkxJVF9FTkdJTkVTXTsKKwl1aW50MzJfdCBkbWFfZGlmZjsKIH0gZHJtX3ZpYV9wcml2YXRlX3Q7CiAKIGVudW0gdmlhX2ZhbWlseSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHMxNjIwLmMgYi9kcml2ZXJzL2NoYXIvZHMxNjIwLmMKaW5kZXggM2Q3ZWZjMi4uMzM0YWQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RzMTYyMC5jCisrKyBiL2RyaXZlcnMvY2hhci9kczE2MjAuYwpAQCAtNCw3ICs0LDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kc3A1NmsuYyBiL2RyaXZlcnMvY2hhci9kc3A1NmsuYwppbmRleCBkYjk4NGU0Li45YjgyNzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHNwNTZrLmMKKysrIGIvZHJpdmVycy9jaGFyL2RzcDU2ay5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kdGxrLmMgYi9kcml2ZXJzL2NoYXIvZHRsay5jCmluZGV4IGQ4ZGJkYjkuLmFiZGU2ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kdGxrLmMKKysrIGIvZHJpdmVycy9jaGFyL2R0bGsuYwpAQCAtNjIsNyArNjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIGZvciBfX2luaXQsIG1vZHVsZV97aW5pdCxleGl0fSAqLwogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4JCS8qIGZvciBQT0xMSU4sIGV0Yy4gKi8KICNpbmNsdWRlIDxsaW51eC9kdGxrLmg+CQkvKiBsb2NhbCBoZWFkZXIgZmlsZSBmb3IgRG91YmxlVGFsayB2YWx1ZXMgKi8KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaWZkZWYgVFJBQ0lORwogI2RlZmluZSBUUkFDRV9URVhUKHN0cikgcHJpbnRrKHN0cik7CkBAIC0zMjUsMTYgKzMyNCwyMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBkdGxrX2luaXQodm9pZCkKIHsKKwlpbnQgZXJyOworCiAJZHRsa19wb3J0X2xwYyA9IDA7CiAJZHRsa19wb3J0X3R0cyA9IDA7CiAJZHRsa19idXN5ID0gMDsKIAlkdGxrX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJkdGxrIiwgJmR0bGtfZm9wcyk7Ci0JaWYgKGR0bGtfbWFqb3IgPT0gMCkgeworCWlmIChkdGxrX21ham9yIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIkRvdWJsZVRhbGsgUEMgLSBjYW5ub3QgcmVnaXN0ZXIgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBkdGxrX21ham9yOwogCX0KLQlpZiAoZHRsa19kZXZfcHJvYmUoKSA9PSAwKQotCQlwcmludGsoIiwgTUFKT1IgJWRcbiIsIGR0bGtfbWFqb3IpOworCWVyciA9IGR0bGtfZGV2X3Byb2JlKCk7CisJaWYgKGVycikgeworCQl1bnJlZ2lzdGVyX2NocmRldihkdGxrX21ham9yLCAiZHRsayIpOworCQlyZXR1cm4gZXJyOworCX0KKwlwcmludGsoIiwgTUFKT1IgJWRcbiIsIGR0bGtfbWFqb3IpOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZHRsa19wcm9jZXNzX2xpc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZWMzMTA0X2tleWIuYyBiL2RyaXZlcnMvY2hhci9lYzMxMDRfa2V5Yi5jCmluZGV4IDc3ZjU4ZWQuLjAyMDAxMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lYzMxMDRfa2V5Yi5jCisrKyBiL2RyaXZlcnMvY2hhci9lYzMxMDRfa2V5Yi5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9rYmRfa2Vybi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlIDxhc20va2V5Ym9hcmQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lcGNhLmMgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCmluZGV4IGRlNWJlMzAuLmM2YzU2ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lcGNhLmMKKysrIGIvZHJpdmVycy9jaGFyL2VwY2EuYwpAQCAtOTQ5LDcgKzk0OSw3IEBACiAKIAl9IC8qIEVuZCBmb3JldmVyIHdoaWxlICAqLwogCi0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZjaC0+b3Blbl93YWl0LCAmd2FpdCk7CiAJaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKQogCQljaC0+Y291bnQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9nZW5ydGMuYyBiL2RyaXZlcnMvY2hhci9nZW5ydGMuYwppbmRleCAyM2IyNWFkLi45ZTFmYzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZ2VucnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jCkBAIC0xMiw3ICsxMiw3IEBACiAgKgogICoJVGhpcyBkcml2ZXIgYWxsb3dzIHVzZSBvZiB0aGUgcmVhbCB0aW1lIGNsb2NrIChidWlsdCBpbnRvCiAgKgluZWFybHkgYWxsIGNvbXB1dGVycykgZnJvbSB1c2VyIHNwYWNlLiBJdCBleHBvcnRzIHRoZSAvZGV2L3J0YwotICoJaW50ZXJmYWNlIHN1cHBvcnRpbmcgdmFyaW91cyBpb2N0bCgpIGFuZCBhbHNvIHRoZSAvcHJvYy9kZXYvcnRjCisgKglpbnRlcmZhY2Ugc3VwcG9ydGluZyB2YXJpb3VzIGlvY3RsKCkgYW5kIGFsc28gdGhlIC9wcm9jL2RyaXZlci9ydGMKICAqCXBzZXVkby1maWxlIGZvciBzdGF0dXMgaW5mb3JtYXRpb24uCiAgKgogICoJVGhlIGlvY3RscyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGludGVycnVwdCBiZWhhdmlvdXIgd2hlcmUKQEAgLTIwNyw3ICsyMDcsNyBAQAogCQkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCX0KICBvdXQ6Ci0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZnZW5fcnRjX3dhaXQsICZ3YWl0KTsKIAogCXJldHVybiByZXR2YWw7CkBAIC0zNzcsNyArMzc3LDcgQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCiAvKgotICoJSW5mbyBleHBvcnRlZCB2aWEgIi9wcm9jL3J0YyIuCisgKglJbmZvIGV4cG9ydGVkIHZpYSAiL3Byb2MvZHJpdmVyL3J0YyIuCiAgKi8KIAogc3RhdGljIGludCBnZW5fcnRjX3Byb2Nfb3V0cHV0KGNoYXIgKmJ1ZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9oYW5nY2hlY2stdGltZXIuYyBiL2RyaXZlcnMvY2hhci9oYW5nY2hlY2stdGltZXIuYwppbmRleCBhZTc2YTlmLi4wZThjZWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaGFuZ2NoZWNrLXRpbWVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2hhbmdjaGVjay10aW1lci5jCkBAIC00NCwxMiArNDQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCiAjZGVmaW5lIFZFUlNJT05fU1RSICIwLjkuMCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwppbmRleCAwZjllZDdiLi4zMjJiYzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwpAQCAtMTExLDcgKzExMSw3IEBACiAgKiBsb2NrIGhlbGQuICBJZiBzdWNjZXNzZnVsLCB0aGlzIGZ1bmN0aW9uIGluY3JlbWVudHMgdGhlIGtvYmplY3QgcmVmZXJlbmNlCiAgKiBjb3VudCBhZ2FpbnN0IHRoZSB0YXJnZXQgaHZjX3N0cnVjdCBzbyBpdCBzaG91bGQgYmUgcmVsZWFzZWQgd2hlbiBmaW5pc2hlZC4KICAqLwotc3RydWN0IGh2Y19zdHJ1Y3QgKmh2Y19nZXRfYnlfaW5kZXgoaW50IGluZGV4KQorc3RhdGljIHN0cnVjdCBodmNfc3RydWN0ICpodmNfZ2V0X2J5X2luZGV4KGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgaHZjX3N0cnVjdCAqaHA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE1MCw3ICsxNTAsOCBAQAogICogaHZjX2NvbnNvbGVfc2V0dXAoKSBmaW5kcyBhZGFwdGVycy4KICAqLwogCi12b2lkIGh2Y19jb25zb2xlX3ByaW50KHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqYiwgdW5zaWduZWQgY291bnQpCitzdGF0aWMgdm9pZCBodmNfY29uc29sZV9wcmludChzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKmIsCisJCQkgICAgICB1bnNpZ25lZCBjb3VudCkKIHsKIAljaGFyIGNbTl9PVVRCVUZdIF9fQUxJR05FRF9fOwogCXVuc2lnbmVkIGkgPSAwLCBuID0gMDsKQEAgLTIwOCw3ICsyMDksNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgY29uc29sZSBodmNfY29uX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBodmNfY29uX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiaHZjIiwKIAkud3JpdGUJCT0gaHZjX2NvbnNvbGVfcHJpbnQsCiAJLmRldmljZQkJPSBodmNfY29uc29sZV9kZXZpY2UsCkBAIC0yNzgsNyArMjc5LDYgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChodmNfaW5zdGFudGlhdGUpOwogCiAvKiBXYWtlIHRoZSBzbGVlcGluZyBraHZjZCAqLwogc3RhdGljIHZvaWQgaHZjX2tpY2sodm9pZCkKQEAgLTc5Miw3ICs3OTIsNiBAQAogCiAJcmV0dXJuIGhwOwogfQotRVhQT1JUX1NZTUJPTChodmNfYWxsb2MpOwogCiBpbnQgX19kZXZleGl0IGh2Y19yZW1vdmUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwKQogewpAQCAtODI4LDExICs4MjcsMTAgQEAKIAkJdHR5X2hhbmd1cCh0dHkpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChodmNfcmVtb3ZlKTsKIAogLyogRHJpdmVyIGluaXRpYWxpemF0aW9uLiAgRm9sbG93IGNvbnNvbGUgaW5pdGlhbGl6YXRpb24uICBUaGlzIGlzIHdoZXJlIHRoZSBUVFkKICAqIGludGVyZmFjZXMgc3RhcnQgdG8gYmVjb21lIGF2YWlsYWJsZS4gKi8KLWludCBfX2luaXQgaHZjX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGh2Y19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHR0eV9kcml2ZXIgKmRydjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pc2VyaWVzLmMgYi9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYwppbmRleCBlYzQyMGZlLi5iMzdmMWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYwpAQCAtNTc5LDcgKzU3OSw3IEBACiAJCWlmICghdnRlcm1ubykKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghZGV2aWNlX2lzX2NvbXBhdGlibGUodnR5LCAiSUJNLGlTZXJpZXMtdnR5IikpCisJCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUodnR5LCAiSUJNLGlTZXJpZXMtdnR5IikpCiAJCQljb250aW51ZTsKIAogCQlpZiAobnVtX2ZvdW5kID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jIGIvZHJpdmVycy9jaGFyL2h2Y192aW8uYwppbmRleCA5NGE1NDJlLi43OTcxMWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQlpZiAoIXZ0ZXJtbm8pCiAJCQljb250aW51ZTsKIAotCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUodnR5LCAiaHZ0ZXJtMSIpKSB7CisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZSh2dHksICJodnRlcm0xIikpIHsKIAkJCWh2Y19pbnN0YW50aWF0ZSgqdnRlcm1ubywgbnVtX2ZvdW5kLCAmaHZjX2dldF9wdXRfb3BzKTsKIAkJCSsrbnVtX2ZvdW5kOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKaW5kZXggNWYzYWNkOC4uN2NkYTA0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZwpAQCAtOTEsMyArOTEsMTcgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvbWFwLXJuZy4KIAogIAkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBIV19SQU5ET01fUEFTRU1JCisJdHJpc3RhdGUgIlBBIFNlbWkgSFcgUmFuZG9tIE51bWJlciBHZW5lcmF0b3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhXX1JBTkRPTSAmJiBQUENfUEFTRU1JCisJZGVmYXVsdCBIV19SQU5ET00KKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwtc2lkZSBzdXBwb3J0IGZvciB0aGUgUmFuZG9tIE51bWJlcgorCSAgR2VuZXJhdG9yIGhhcmR3YXJlIGZvdW5kIG9uIFBBNlQtMTY4Mk0gcHJvY2Vzc29yLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwYXNlbWktcm5nLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQppbmRleCBjNDFmYTE5Li5jOGI3MzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKQEAgLTEwLDMgKzEwLDQgQEAKIG9iai0kKENPTkZJR19IV19SQU5ET01fVklBKSArPSB2aWEtcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fSVhQNFhYKSArPSBpeHA0eHgtcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fT01BUCkgKz0gb21hcC1ybmcubworb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9QQVNFTUkpICs9IHBhc2VtaS1ybmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9pbnRlbC1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vaW50ZWwtcm5nLmMKaW5kZXggY2MxMDQ2ZS4uNGFlOTgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9pbnRlbC1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2ludGVsLXJuZy5jCkBAIC0yNCwxMCArMjQsMTEgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaHdfcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIApAQCAtMjE3LDMwICsyMTgsMTE3IEBACiAJLmRhdGFfcmVhZAk9IGludGVsX3JuZ19kYXRhX3JlYWQsCiB9OwogCitzdHJ1Y3QgaW50ZWxfcm5nX2h3IHsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXZvaWQgX19pb21lbSAqbWVtOworCXU4IGJpb3NfY250bF9vZmY7CisJdTggYmlvc19jbnRsX3ZhbDsKKwl1OCBmd2hfZGVjX2VuMV9vZmY7CisJdTggZndoX2RlY19lbjFfdmFsOworfTsKIAotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyBjaGFyIF9faW5pdGRhdGEgd2FpdGZsYWc7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBpbnRlbF9pbml0X3dhaXQodm9pZCAqdW51c2VkKQorc3RhdGljIGludCBfX2luaXQgaW50ZWxfcm5nX2h3X2luaXQodm9pZCAqX2ludGVsX3JuZ19odykKIHsKLQl3aGlsZSAod2FpdGZsYWcpCi0JCWNwdV9yZWxheCgpOworCXN0cnVjdCBpbnRlbF9ybmdfaHcgKmludGVsX3JuZ19odyA9IF9pbnRlbF9ybmdfaHc7CisJdTggbWZjLCBkdmM7CisKKwkvKiBpbnRlcnJ1cHRzIGRpc2FibGVkIGluIHN0b3BfbWFjaGluZV9ydW4gY2FsbCAqLworCisJaWYgKCEoaW50ZWxfcm5nX2h3LT5md2hfZGVjX2VuMV92YWwgJiBGV0hfRjhfRU5fTUFTSykpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShpbnRlbF9ybmdfaHctPmRldiwKKwkJICAgICAgICAgICAgICAgICAgICAgIGludGVsX3JuZ19ody0+ZndoX2RlY19lbjFfb2ZmLAorCQkgICAgICAgICAgICAgICAgICAgICAgaW50ZWxfcm5nX2h3LT5md2hfZGVjX2VuMV92YWwgfAorCQkJCSAgICAgIEZXSF9GOF9FTl9NQVNLKTsKKwlpZiAoIShpbnRlbF9ybmdfaHctPmJpb3NfY250bF92YWwgJiBCSU9TX0NOVExfV1JJVEVfRU5BQkxFX01BU0spKQorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaW50ZWxfcm5nX2h3LT5kZXYsCisJCSAgICAgICAgICAgICAgICAgICAgICBpbnRlbF9ybmdfaHctPmJpb3NfY250bF9vZmYsCisJCSAgICAgICAgICAgICAgICAgICAgICBpbnRlbF9ybmdfaHctPmJpb3NfY250bF92YWwgfAorCQkJCSAgICAgIEJJT1NfQ05UTF9XUklURV9FTkFCTEVfTUFTSyk7CisKKwl3cml0ZWIoSU5URUxfRldIX1JFU0VUX0NNRCwgaW50ZWxfcm5nX2h3LT5tZW0pOworCXdyaXRlYihJTlRFTF9GV0hfUkVBRF9JRF9DTUQsIGludGVsX3JuZ19ody0+bWVtKTsKKwltZmMgPSByZWFkYihpbnRlbF9ybmdfaHctPm1lbSArIElOVEVMX0ZXSF9NQU5VRkFDVFVSRVJfQ09ERV9BRERSRVNTKTsKKwlkdmMgPSByZWFkYihpbnRlbF9ybmdfaHctPm1lbSArIElOVEVMX0ZXSF9ERVZJQ0VfQ09ERV9BRERSRVNTKTsKKwl3cml0ZWIoSU5URUxfRldIX1JFU0VUX0NNRCwgaW50ZWxfcm5nX2h3LT5tZW0pOworCisJaWYgKCEoaW50ZWxfcm5nX2h3LT5iaW9zX2NudGxfdmFsICYKKwkgICAgICAoQklPU19DTlRMX0xPQ0tfRU5BQkxFX01BU0t8QklPU19DTlRMX1dSSVRFX0VOQUJMRV9NQVNLKSkpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShpbnRlbF9ybmdfaHctPmRldiwKKwkJCQkgICAgICBpbnRlbF9ybmdfaHctPmJpb3NfY250bF9vZmYsCisJCQkJICAgICAgaW50ZWxfcm5nX2h3LT5iaW9zX2NudGxfdmFsKTsKKwlpZiAoIShpbnRlbF9ybmdfaHctPmZ3aF9kZWNfZW4xX3ZhbCAmIEZXSF9GOF9FTl9NQVNLKSkKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGludGVsX3JuZ19ody0+ZGV2LAorCQkJCSAgICAgIGludGVsX3JuZ19ody0+ZndoX2RlY19lbjFfb2ZmLAorCQkJCSAgICAgIGludGVsX3JuZ19ody0+ZndoX2RlY19lbjFfdmFsKTsKKworCWlmIChtZmMgIT0gSU5URUxfRldIX01BTlVGQUNUVVJFUl9DT0RFIHx8CisJICAgIChkdmMgIT0gSU5URUxfRldIX0RFVklDRV9DT0RFXzhNICYmCisJICAgICBkdmMgIT0gSU5URUxfRldIX0RFVklDRV9DT0RFXzRNKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJGV0ggbm90IGRldGVjdGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgaW50ZWxfaW5pdF9od19zdHJ1Y3Qoc3RydWN0IGludGVsX3JuZ19odyAqaW50ZWxfcm5nX2h3LAorCQkJCQlzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludGVsX3JuZ19ody0+Ymlvc19jbnRsX3ZhbCA9IDB4ZmY7CisJaW50ZWxfcm5nX2h3LT5md2hfZGVjX2VuMV92YWwgPSAweGZmOworCWludGVsX3JuZ19ody0+ZGV2ID0gZGV2OworCisJLyogQ2hlY2sgZm9yIEludGVsIDgyODAyICovCisJaWYgKGRldi0+ZGV2aWNlIDwgMHgyNjQwKSB7CisJCWludGVsX3JuZ19ody0+ZndoX2RlY19lbjFfb2ZmID0gRldIX0RFQ19FTjFfUkVHX09MRDsKKwkJaW50ZWxfcm5nX2h3LT5iaW9zX2NudGxfb2ZmID0gQklPU19DTlRMX1JFR19PTEQ7CisJfSBlbHNlIHsKKwkJaW50ZWxfcm5nX2h3LT5md2hfZGVjX2VuMV9vZmYgPSBGV0hfREVDX0VOMV9SRUdfTkVXOworCQlpbnRlbF9ybmdfaHctPmJpb3NfY250bF9vZmYgPSBCSU9TX0NOVExfUkVHX05FVzsKKwl9CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGludGVsX3JuZ19ody0+ZndoX2RlY19lbjFfb2ZmLAorCQkJICAgICAmaW50ZWxfcm5nX2h3LT5md2hfZGVjX2VuMV92YWwpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgaW50ZWxfcm5nX2h3LT5iaW9zX2NudGxfb2ZmLAorCQkJICAgICAmaW50ZWxfcm5nX2h3LT5iaW9zX2NudGxfdmFsKTsKKworCWlmICgoaW50ZWxfcm5nX2h3LT5iaW9zX2NudGxfdmFsICYKKwkgICAgIChCSU9TX0NOVExfTE9DS19FTkFCTEVfTUFTS3xCSU9TX0NOVExfV1JJVEVfRU5BQkxFX01BU0spKQorCSAgICA9PSBCSU9TX0NOVExfTE9DS19FTkFCTEVfTUFTSykgeworCQlzdGF0aWMgX19pbml0ZGF0YSAvKmNvbnN0Ki8gY2hhciB3YXJuaW5nW10gPQorCQkJS0VSTl9XQVJOSU5HIFBGWCAiRmlybXdhcmUgc3BhY2UgaXMgbG9ja2VkIHJlYWQtb25seS4gIgorCQkJS0VSTl9XQVJOSU5HIFBGWCAiSWYgeW91IGNhbid0IG9yXG4gZG9uJ3Qgd2FudCB0byAiCisJCQlLRVJOX1dBUk5JTkcgUEZYICJkaXNhYmxlIHRoaXMgaW4gZmlybXdhcmUgc2V0dXAsIGFuZCAiCisJCQlLRVJOX1dBUk5JTkcgUEZYICJpZlxuIHlvdSBhcmUgY2VydGFpbiB0aGF0IHlvdXIgIgorCQkJS0VSTl9XQVJOSU5HIFBGWCAic3lzdGVtIGhhcyBhIGZ1bmN0aW9uYWxcbiBSTkcsIHRyeSIKKwkJCUtFUk5fV0FSTklORyBQRlggInVzaW5nIHRoZSAnbm9fZndoX2RldGVjdCcgb3B0aW9uLlxuIjsKKworCQlpZiAobm9fZndoX2RldGVjdCkKKwkJCXJldHVybiAtRU5PREVWOworCQlwcmludGsod2FybmluZyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaW50ZWxfcm5nX2h3LT5tZW0gPSBpb3JlbWFwX25vY2FjaGUoSU5URUxfRldIX0FERFIsIElOVEVMX0ZXSF9BRERSX0xFTik7CisJaWYgKGludGVsX3JuZ19ody0+bWVtID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKwogCiBzdGF0aWMgaW50IF9faW5pdCBtb2RfaW5pdCh2b2lkKQogewogCWludCBlcnIgPSAtRU5PREVWOwotCXVuc2lnbmVkIGk7CisJaW50IGk7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBiaW9zX2NudGxfb2ZmLCBmd2hfZGVjX2VuMV9vZmY7Ci0JdTggYmlvc19jbnRsX3ZhbCA9IDB4ZmYsIGZ3aF9kZWNfZW4xX3ZhbCA9IDB4ZmY7Ci0JdTggaHdfc3RhdHVzLCBtZmMsIGR2YzsKKwl2b2lkIF9faW9tZW0gKm1lbSA9IG1lbTsKKwl1OCBod19zdGF0dXM7CisJc3RydWN0IGludGVsX3JuZ19odyAqaW50ZWxfcm5nX2h3OwogCiAJZm9yIChpID0gMDsgIWRldiAmJiBwY2lfdGJsW2ldLnZlbmRvcjsgKytpKQotCQlkZXYgPSBwY2lfZ2V0X2RldmljZShwY2lfdGJsW2ldLnZlbmRvciwgcGNpX3RibFtpXS5kZXZpY2UsIE5VTEwpOworCQlkZXYgPSBwY2lfZ2V0X2RldmljZShwY2lfdGJsW2ldLnZlbmRvciwgcGNpX3RibFtpXS5kZXZpY2UsCisJCQkJICAgICBOVUxMKTsKIAogCWlmICghZGV2KQogCQlnb3RvIG91dDsgLyogRGV2aWNlIG5vdCBmb3VuZC4gKi8KQEAgLTI1MCwzOSArMzM4LDE4IEBACiAJCWdvdG8gZndoX2RvbmU7CiAJfQogCi0JLyogQ2hlY2sgZm9yIEludGVsIDgyODAyICovCi0JaWYgKGRldi0+ZGV2aWNlIDwgMHgyNjQwKSB7Ci0JCWZ3aF9kZWNfZW4xX29mZiA9IEZXSF9ERUNfRU4xX1JFR19PTEQ7Ci0JCWJpb3NfY250bF9vZmYgPSBCSU9TX0NOVExfUkVHX09MRDsKLQl9IGVsc2UgewotCQlmd2hfZGVjX2VuMV9vZmYgPSBGV0hfREVDX0VOMV9SRUdfTkVXOwotCQliaW9zX2NudGxfb2ZmID0gQklPU19DTlRMX1JFR19ORVc7Ci0JfQotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBmd2hfZGVjX2VuMV9vZmYsICZmd2hfZGVjX2VuMV92YWwpOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgYmlvc19jbnRsX29mZiwgJmJpb3NfY250bF92YWwpOwotCi0JaWYgKChiaW9zX2NudGxfdmFsICYKLQkgICAgIChCSU9TX0NOVExfTE9DS19FTkFCTEVfTUFTS3xCSU9TX0NOVExfV1JJVEVfRU5BQkxFX01BU0spKQotCSAgICA9PSBCSU9TX0NOVExfTE9DS19FTkFCTEVfTUFTSykgewotCQlzdGF0aWMgX19pbml0ZGF0YSAvKmNvbnN0Ki8gY2hhciB3YXJuaW5nW10gPQotCQkJS0VSTl9XQVJOSU5HIFBGWCAiRmlybXdhcmUgc3BhY2UgaXMgbG9ja2VkIHJlYWQtb25seS4gSWYgeW91IGNhbid0IG9yXG4iCi0JCQlLRVJOX1dBUk5JTkcgUEZYICJkb24ndCB3YW50IHRvIGRpc2FibGUgdGhpcyBpbiBmaXJtd2FyZSBzZXR1cCwgYW5kIGlmXG4iCi0JCQlLRVJOX1dBUk5JTkcgUEZYICJ5b3UgYXJlIGNlcnRhaW4gdGhhdCB5b3VyIHN5c3RlbSBoYXMgYSBmdW5jdGlvbmFsXG4iCi0JCQlLRVJOX1dBUk5JTkcgUEZYICJSTkcsIHRyeSB1c2luZyB0aGUgJ25vX2Z3aF9kZXRlY3QnIG9wdGlvbi5cbiI7Ci0KKwlpbnRlbF9ybmdfaHcgPSBrbWFsbG9jKHNpemVvZigqaW50ZWxfcm5nX2h3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnRlbF9ybmdfaHcpIHsKIAkJcGNpX2Rldl9wdXQoZGV2KTsKLQkJaWYgKG5vX2Z3aF9kZXRlY3QpCi0JCQlnb3RvIGZ3aF9kb25lOwotCQlwcmludGsod2FybmluZyk7Ci0JCWVyciA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CiAJfQogCi0JbWVtID0gaW9yZW1hcF9ub2NhY2hlKElOVEVMX0ZXSF9BRERSLCBJTlRFTF9GV0hfQUREUl9MRU4pOwotCWlmIChtZW0gPT0gTlVMTCkgeworCWVyciA9IGludGVsX2luaXRfaHdfc3RydWN0KGludGVsX3JuZ19odywgZGV2KTsKKwlpZiAoZXJyKSB7CiAJCXBjaV9kZXZfcHV0KGRldik7Ci0JCWVyciA9IC1FQlVTWTsKKwkJa2ZyZWUoaW50ZWxfcm5nX2h3KTsKKwkJaWYgKGVyciA9PSAtRU5PREVWKQorCQkJZ290byBmd2hfZG9uZTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yOTAsNTkgKzM1NywxOCBAQAogCSAqIFNpbmNlIHRoZSBCSU9TIGNvZGUvZGF0YSBpcyBnb2luZyB0byBkaXNhcHBlYXIgZnJvbSBpdHMgbm9ybWFsCiAJICogbG9jYXRpb24gd2l0aCB0aGUgUmVhZCBJRCBjb21tYW5kLCBhbGwgYWN0aXZpdHkgb24gdGhlIHN5c3RlbQogCSAqIG11c3QgYmUgc3RvcHBlZCB1bnRpbCB0aGUgc3RhdGUgaXMgYmFjayB0byBub3JtYWwuCisJICoKKwkgKiBVc2Ugc3RvcF9tYWNoaW5lX3J1biBiZWNhdXNlIElQSXMgY2FuIGJlIGJsb2NrZWQgYnkgZGlzYWJsaW5nCisJICogaW50ZXJydXB0cy4KIAkgKi8KLSNpZmRlZiBDT05GSUdfU01QCi0Jc2V0X21iKHdhaXRmbGFnLCAxKTsKLQlpZiAoc21wX2NhbGxfZnVuY3Rpb24oaW50ZWxfaW5pdF93YWl0LCBOVUxMLCAxLCAwKSAhPSAwKSB7Ci0JCXNldF9tYih3YWl0ZmxhZywgMCk7Ci0JCXBjaV9kZXZfcHV0KGRldik7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCBydW4gb24gYWxsIHByb2Nlc3NvcnNcbiIpOwotCQllcnIgPSAtRUFHQUlOOwotCQlnb3RvIGVycl91bm1hcDsKLQl9Ci0jZW5kaWYKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlpZiAoIShmd2hfZGVjX2VuMV92YWwgJiBGV0hfRjhfRU5fTUFTSykpCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsCi0JCSAgICAgICAgICAgICAgICAgICAgICBmd2hfZGVjX2VuMV9vZmYsCi0JCSAgICAgICAgICAgICAgICAgICAgICBmd2hfZGVjX2VuMV92YWwgfCBGV0hfRjhfRU5fTUFTSyk7Ci0JaWYgKCEoYmlvc19jbnRsX3ZhbCAmIEJJT1NfQ05UTF9XUklURV9FTkFCTEVfTUFTSykpCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsCi0JCSAgICAgICAgICAgICAgICAgICAgICBiaW9zX2NudGxfb2ZmLAotCQkgICAgICAgICAgICAgICAgICAgICAgYmlvc19jbnRsX3ZhbCB8IEJJT1NfQ05UTF9XUklURV9FTkFCTEVfTUFTSyk7Ci0KLQl3cml0ZWIoSU5URUxfRldIX1JFU0VUX0NNRCwgbWVtKTsKLQl3cml0ZWIoSU5URUxfRldIX1JFQURfSURfQ01ELCBtZW0pOwotCW1mYyA9IHJlYWRiKG1lbSArIElOVEVMX0ZXSF9NQU5VRkFDVFVSRVJfQ09ERV9BRERSRVNTKTsKLQlkdmMgPSByZWFkYihtZW0gKyBJTlRFTF9GV0hfREVWSUNFX0NPREVfQUREUkVTUyk7Ci0Jd3JpdGViKElOVEVMX0ZXSF9SRVNFVF9DTUQsIG1lbSk7Ci0KLQlpZiAoIShiaW9zX2NudGxfdmFsICYKLQkgICAgICAoQklPU19DTlRMX0xPQ0tfRU5BQkxFX01BU0t8QklPU19DTlRMX1dSSVRFX0VOQUJMRV9NQVNLKSkpCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIGJpb3NfY250bF9vZmYsIGJpb3NfY250bF92YWwpOwotCWlmICghKGZ3aF9kZWNfZW4xX3ZhbCAmIEZXSF9GOF9FTl9NQVNLKSkKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgZndoX2RlY19lbjFfb2ZmLCBmd2hfZGVjX2VuMV92YWwpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBUZWxsIG90aGVyIENQVXMgdG8gcmVzdW1lLiAqLwotCXNldF9tYih3YWl0ZmxhZywgMCk7Ci0jZW5kaWYKLQotCWlvdW5tYXAobWVtKTsKKwllcnIgPSBzdG9wX21hY2hpbmVfcnVuKGludGVsX3JuZ19od19pbml0LCBpbnRlbF9ybmdfaHcsIE5SX0NQVVMpOwogCXBjaV9kZXZfcHV0KGRldik7Ci0KLQlpZiAobWZjICE9IElOVEVMX0ZXSF9NQU5VRkFDVFVSRVJfQ09ERSB8fAotCSAgICAoZHZjICE9IElOVEVMX0ZXSF9ERVZJQ0VfQ09ERV84TSAmJgotCSAgICAgZHZjICE9IElOVEVMX0ZXSF9ERVZJQ0VfQ09ERV80TSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRldIIG5vdCBkZXRlY3RlZFxuIik7Ci0JCWVyciA9IC1FTk9ERVY7CisJaW91bm1hcChpbnRlbF9ybmdfaHctPm1lbSk7CisJa2ZyZWUoaW50ZWxfcm5nX2h3KTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dDsKLQl9CiAKIGZ3aF9kb25lOgotCiAJZXJyID0gLUVOT01FTTsKIAltZW0gPSBpb3JlbWFwKElOVEVMX1JOR19BRERSLCBJTlRFTF9STkdfQUREUl9MRU4pOwogCWlmICghbWVtKQpAQCAtMzUyLDIyICszNzgsMjEgQEAKIAkvKiBDaGVjayBmb3IgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgKi8KIAllcnIgPSAtRU5PREVWOwogCWh3X3N0YXR1cyA9IGh3c3RhdHVzX2dldChtZW0pOwotCWlmICgoaHdfc3RhdHVzICYgSU5URUxfUk5HX1BSRVNFTlQpID09IDApCi0JCWdvdG8gZXJyX3VubWFwOworCWlmICgoaHdfc3RhdHVzICYgSU5URUxfUk5HX1BSRVNFTlQpID09IDApIHsKKwkJaW91bm1hcChtZW0pOworCQlnb3RvIG91dDsKKwl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJJbnRlbCA4MjgwMiBSTkcgZGV0ZWN0ZWRcbiIpOwogCWVyciA9IGh3cm5nX3JlZ2lzdGVyKCZpbnRlbF9ybmcpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUk5HIHJlZ2lzdGVyaW5nIGZhaWxlZCAoJWQpXG4iLAogCQkgICAgICAgZXJyKTsKLQkJZ290byBlcnJfdW5tYXA7CisJCWlvdW5tYXAobWVtKTsKIAl9CiBvdXQ6CiAJcmV0dXJuIGVycjsKIAotZXJyX3VubWFwOgotCWlvdW5tYXAobWVtKTsKLQlnb3RvIG91dDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG1vZF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3Bhc2VtaS1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vcGFzZW1pLXJuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjA0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3Bhc2VtaS1ybmcuYwpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IFBBIFNlbWksIEluYworICoKKyAqIE1haW50YWluZWQgYnk6IE9sb2YgSm9oYW5zc29uIDxvbG9mQGxpeG9tLm5ldD4KKyAqCisgKiBEcml2ZXIgZm9yIHRoZSBQV1JmaWNpZW50IG9uY2hpcCBybmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaHdfcmFuZG9tLmg+CisjaW5jbHVkZSA8YXNtL29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgU0RDUk5HX0NUTF9SRUcJCQkweDAwCisjZGVmaW5lICAgU0RDUk5HX0NUTF9GVkxEX00JCTB4MDAwMGYwMDAKKyNkZWZpbmUgICBTRENSTkdfQ1RMX0ZWTERfUwkJMTIKKyNkZWZpbmUgICBTRENSTkdfQ1RMX0tTWgkJMHgwMDAwMDgwMAorI2RlZmluZSAgIFNEQ1JOR19DVExfUlNSQ19DUkcJCTB4MDAwMDAwMTAKKyNkZWZpbmUgICBTRENSTkdfQ1RMX1JTUkNfUlJHCQkweDAwMDAwMDAwCisjZGVmaW5lICAgU0RDUk5HX0NUTF9DRQkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgICBTRENSTkdfQ1RMX1JFCQkJMHgwMDAwMDAwMgorI2RlZmluZSAgIFNEQ1JOR19DVExfRFIJCQkweDAwMDAwMDAxCisjZGVmaW5lICAgU0RDUk5HX0NUTF9TRUxFQ1RfUlJHX1JORwkoU0RDUk5HX0NUTF9SRSB8IFNEQ1JOR19DVExfUlNSQ19SUkcpCisjZGVmaW5lICAgU0RDUk5HX0NUTF9TRUxFQ1RfQ1JHX1JORwkoU0RDUk5HX0NUTF9DRSB8IFNEQ1JOR19DVExfUlNSQ19DUkcpCisjZGVmaW5lIFNEQ1JOR19WQUxfUkVHCQkJMHgyMAorCisjZGVmaW5lIE1PRFVMRV9OQU1FICJwYXNlbWlfcm5nIgorCitzdGF0aWMgaW50IHBhc2VtaV9ybmdfZGF0YV9wcmVzZW50KHN0cnVjdCBod3JuZyAqcm5nKQoreworCXZvaWQgX19pb21lbSAqcm5nX3JlZ3MgPSAodm9pZCBfX2lvbWVtICopcm5nLT5wcml2OworCisJcmV0dXJuIChpbl9sZTMyKHJuZ19yZWdzICsgU0RDUk5HX0NUTF9SRUcpCisJCSYgU0RDUk5HX0NUTF9GVkxEX00pID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcGFzZW1pX3JuZ19kYXRhX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHUzMiAqZGF0YSkKK3sKKwl2b2lkIF9faW9tZW0gKnJuZ19yZWdzID0gKHZvaWQgX19pb21lbSAqKXJuZy0+cHJpdjsKKwkqZGF0YSA9IGluX2xlMzIocm5nX3JlZ3MgKyBTRENSTkdfVkFMX1JFRyk7CisJcmV0dXJuIDQ7Cit9CisKK3N0YXRpYyBpbnQgcGFzZW1pX3JuZ19pbml0KHN0cnVjdCBod3JuZyAqcm5nKQoreworCXZvaWQgX19pb21lbSAqcm5nX3JlZ3MgPSAodm9pZCBfX2lvbWVtICopcm5nLT5wcml2OworCXUzMiBjdGw7CisKKwljdGwgPSBTRENSTkdfQ1RMX0RSIHwgU0RDUk5HX0NUTF9TRUxFQ1RfUlJHX1JORyB8IFNEQ1JOR19DVExfS1NaOworCW91dF9sZTMyKHJuZ19yZWdzICsgU0RDUk5HX0NUTF9SRUcsIGN0bCk7CisJb3V0X2xlMzIocm5nX3JlZ3MgKyBTRENSTkdfQ1RMX1JFRywgY3RsICYgflNEQ1JOR19DVExfRFIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBhc2VtaV9ybmdfY2xlYW51cChzdHJ1Y3QgaHdybmcgKnJuZykKK3sKKwl2b2lkIF9faW9tZW0gKnJuZ19yZWdzID0gKHZvaWQgX19pb21lbSAqKXJuZy0+cHJpdjsKKwl1MzIgY3RsOworCisJY3RsID0gU0RDUk5HX0NUTF9SRSB8IFNEQ1JOR19DVExfQ0U7CisJb3V0X2xlMzIocm5nX3JlZ3MgKyBTRENSTkdfQ1RMX1JFRywKKwkJIGluX2xlMzIocm5nX3JlZ3MgKyBTRENSTkdfQ1RMX1JFRykgJiB+Y3RsKTsKK30KKworc3RhdGljIHN0cnVjdCBod3JuZyBwYXNlbWlfcm5nID0geworCS5uYW1lCQk9IE1PRFVMRV9OQU1FLAorCS5pbml0CQk9IHBhc2VtaV9ybmdfaW5pdCwKKwkuY2xlYW51cAk9IHBhc2VtaV9ybmdfY2xlYW51cCwKKwkuZGF0YV9wcmVzZW50CT0gcGFzZW1pX3JuZ19kYXRhX3ByZXNlbnQsCisJLmRhdGFfcmVhZAk9IHBhc2VtaV9ybmdfZGF0YV9yZWFkLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgcm5nX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXZvaWQgX19pb21lbSAqcm5nX3JlZ3M7CisJc3RydWN0IGRldmljZV9ub2RlICpybmdfbnAgPSBvZmRldi0+bm9kZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCWludCBlcnIgPSAwOworCisJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShybmdfbnAsIDAsICZyZXMpOworCWlmIChlcnIpCisJCXJldHVybiAtRU5PREVWOworCisJcm5nX3JlZ3MgPSBpb3JlbWFwKHJlcy5zdGFydCwgMHgxMDApOworCisJaWYgKCFybmdfcmVncykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYXNlbWlfcm5nLnByaXYgPSAodW5zaWduZWQgbG9uZylybmdfcmVnczsKKworCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyaW5nIFBBIFNlbWkgUk5HXG4iKTsKKworCWVyciA9IGh3cm5nX3JlZ2lzdGVyKCZwYXNlbWlfcm5nKTsKKworCWlmIChlcnIpCisJCWlvdW5tYXAocm5nX3JlZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcm5nX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCit7CisJdm9pZCBfX2lvbWVtICpybmdfcmVncyA9ICh2b2lkIF9faW9tZW0gKilwYXNlbWlfcm5nLnByaXY7CisKKwlod3JuZ191bnJlZ2lzdGVyKCZwYXNlbWlfcm5nKTsKKwlpb3VubWFwKHJuZ19yZWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBybmdfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlICAgICAgPSAiMTY4Mm0tcm5nIiwKKwl9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgcm5nX2RyaXZlciA9IHsKKwkubmFtZQkJPSAicGFzZW1pLXJuZyIsCisJLm1hdGNoX3RhYmxlCT0gcm5nX21hdGNoLAorCS5wcm9iZQkJPSBybmdfcHJvYmUsCisJLnJlbW92ZQkJPSBybmdfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcm5nX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZybmdfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHJuZ19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHJuZ19leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnJuZ19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQocm5nX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJFZ29yIE1hcnRvdmV0c2t5IDxlZ29yQHBhc2VtaS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkgvVyBSTkcgZHJpdmVyIGZvciBQQSBTZW1pIHByb2Nlc3NvciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2k4ay5jIGIvZHJpdmVycy9jaGFyL2k4ay5jCmluZGV4IDM1M2Q5ZjMuLjAyODk3MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pOGsuYworKysgYi9kcml2ZXJzL2NoYXIvaThrLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMjctcnRjLmMgYi9kcml2ZXJzL2NoYXIvaXAyNy1ydGMuYwppbmRleCBhNDhkYTAyLi45MzIyNjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXAyNy1ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvaXAyNy1ydGMuYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vbTQ4dDM1Lmg+CiAjaW5jbHVkZSA8YXNtL3NuL2lvYzMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvaXBtaS9LY29uZmlnCmluZGV4IGE2ZGNiMjkuLmI4OTRmNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvS2NvbmZpZwpAQCAtMyw2ICszLDggQEAKICMKIAogbWVudSAiSVBNSSIKKwlkZXBlbmRzIG9uIEhBU19JT01FTQorCiBjb25maWcgSVBNSV9IQU5ETEVSCiAgICAgICAgdHJpc3RhdGUgJ0lQTUkgdG9wLWxldmVsIG1lc3NhZ2UgaGFuZGxlcicKICAgICAgICBoZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IGUyMjE0NjUuLjc4ZTFiOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC05LDYgKzksNyBAQAogICogICAgICAgICBzb3VyY2VAbXZpc3RhLmNvbQogICoKICAqIENvcHlyaWdodCAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQ29weXJpZ2h0IDIwMDYgSUJNIENvcnAuLCBDaHJpc3RpYW4gS3JhZmZ0IDxrcmFmZnRAZGUuaWJtLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTY0LDYgKzY1LDExIEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIAorI2lmZGVmIENPTkZJR19QUENfT0YKKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL29mX3BsYXRmb3JtLmg+CisjZW5kaWYKKwogI2RlZmluZSBQRlggImlwbWlfc2k6ICIKIAogLyogTWVhc3VyZSB0aW1lcyBiZXR3ZWVuIGV2ZW50cyBpbiB0aGUgZHJpdmVyLiAqLwpAQCAtNzYsNiArODIsMTIgQEAKICNkZWZpbmUgU0lfU0hPUlRfVElNRU9VVF9VU0VDICAyNTAgLyogLjI1bXMgd2hlbiB0aGUgU00gcmVxdWVzdCBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB0aW1lb3V0ICovCiAKKy8qIEJpdCBmb3IgQk1DIGdsb2JhbCBlbmFibGVzLiAqLworI2RlZmluZSBJUE1JX0JNQ19SQ1ZfTVNHX0lOVFIgICAgIDB4MDEKKyNkZWZpbmUgSVBNSV9CTUNfRVZUX01TR19JTlRSICAgICAweDAyCisjZGVmaW5lIElQTUlfQk1DX0VWVF9NU0dfQlVGRiAgICAgMHgwNAorI2RlZmluZSBJUE1JX0JNQ19TWVNfTE9HICAgICAgICAgIDB4MDgKKwogZW51bSBzaV9pbnRmX3N0YXRlIHsKIAlTSV9OT1JNQUwsCiAJU0lfR0VUVElOR19GTEFHUywKQEAgLTg0LDcgKzk2LDkgQEAKIAlTSV9DTEVBUklOR19GTEFHU19USEVOX1NFVF9JUlEsCiAJU0lfR0VUVElOR19NRVNTQUdFUywKIAlTSV9FTkFCTEVfSU5URVJSVVBUUzEsCi0JU0lfRU5BQkxFX0lOVEVSUlVQVFMyCisJU0lfRU5BQkxFX0lOVEVSUlVQVFMyLAorCVNJX0RJU0FCTEVfSU5URVJSVVBUUzEsCisJU0lfRElTQUJMRV9JTlRFUlJVUFRTMgogCS8qIEZJWE1FIC0gYWRkIHdhdGNoZG9nIHN0dWZmLiAqLwogfTsKIApAQCAtMzMzLDYgKzM0NywxNyBAQAogCXNtaV9pbmZvLT5zaV9zdGF0ZSA9IFNJX0VOQUJMRV9JTlRFUlJVUFRTMTsKIH0KIAorc3RhdGljIHZvaWQgc3RhcnRfZGlzYWJsZV9pcnEoc3RydWN0IHNtaV9pbmZvICpzbWlfaW5mbykKK3sKKwl1bnNpZ25lZCBjaGFyIG1zZ1syXTsKKworCW1zZ1swXSA9IChJUE1JX05FVEZOX0FQUF9SRVFVRVNUIDw8IDIpOworCW1zZ1sxXSA9IElQTUlfR0VUX0JNQ19HTE9CQUxfRU5BQkxFU19DTUQ7CisKKwlzbWlfaW5mby0+aGFuZGxlcnMtPnN0YXJ0X3RyYW5zYWN0aW9uKHNtaV9pbmZvLT5zaV9zbSwgbXNnLCAyKTsKKwlzbWlfaW5mby0+c2lfc3RhdGUgPSBTSV9ESVNBQkxFX0lOVEVSUlVQVFMxOworfQorCiBzdGF0aWMgdm9pZCBzdGFydF9jbGVhcl9mbGFncyhzdHJ1Y3Qgc21pX2luZm8gKnNtaV9pbmZvKQogewogCXVuc2lnbmVkIGNoYXIgbXNnWzNdOwpAQCAtMzUzLDcgKzM3OCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9zaV9pcnEoc3RydWN0IHNtaV9pbmZvICpzbWlfaW5mbykKIHsKIAlpZiAoKHNtaV9pbmZvLT5pcnEpICYmICghc21pX2luZm8tPmludGVycnVwdF9kaXNhYmxlZCkpIHsKLQkJZGlzYWJsZV9pcnFfbm9zeW5jKHNtaV9pbmZvLT5pcnEpOworCQlzdGFydF9kaXNhYmxlX2lycShzbWlfaW5mbyk7CiAJCXNtaV9pbmZvLT5pbnRlcnJ1cHRfZGlzYWJsZWQgPSAxOwogCX0KIH0KQEAgLTM2MSw3ICszODYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9zaV9pcnEoc3RydWN0IHNtaV9pbmZvICpzbWlfaW5mbykKIHsKIAlpZiAoKHNtaV9pbmZvLT5pcnEpICYmIChzbWlfaW5mby0+aW50ZXJydXB0X2Rpc2FibGVkKSkgewotCQllbmFibGVfaXJxKHNtaV9pbmZvLT5pcnEpOworCQlzdGFydF9lbmFibGVfaXJxKHNtaV9pbmZvKTsKIAkJc21pX2luZm8tPmludGVycnVwdF9kaXNhYmxlZCA9IDA7CiAJfQogfQpAQCAtNTgzLDcgKzYwOCw5IEBACiAJCX0gZWxzZSB7CiAJCQltc2dbMF0gPSAoSVBNSV9ORVRGTl9BUFBfUkVRVUVTVCA8PCAyKTsKIAkJCW1zZ1sxXSA9IElQTUlfU0VUX0JNQ19HTE9CQUxfRU5BQkxFU19DTUQ7Ci0JCQltc2dbMl0gPSBtc2dbM10gfCAxOyAvKiBlbmFibGUgbXNnIHF1ZXVlIGludCAqLworCQkJbXNnWzJdID0gKG1zZ1szXSB8CisJCQkJICBJUE1JX0JNQ19SQ1ZfTVNHX0lOVFIgfAorCQkJCSAgSVBNSV9CTUNfRVZUX01TR19JTlRSKTsKIAkJCXNtaV9pbmZvLT5oYW5kbGVycy0+c3RhcnRfdHJhbnNhY3Rpb24oCiAJCQkJc21pX2luZm8tPnNpX3NtLCBtc2csIDMpOwogCQkJc21pX2luZm8tPnNpX3N0YXRlID0gU0lfRU5BQkxFX0lOVEVSUlVQVFMyOwpAQCAtNjA1LDYgKzYzMiw0NSBAQAogCQlzbWlfaW5mby0+c2lfc3RhdGUgPSBTSV9OT1JNQUw7CiAJCWJyZWFrOwogCX0KKworCWNhc2UgU0lfRElTQUJMRV9JTlRFUlJVUFRTMToKKwl7CisJCXVuc2lnbmVkIGNoYXIgbXNnWzRdOworCisJCS8qIFdlIGdvdCB0aGUgZmxhZ3MgZnJvbSB0aGUgU01JLCBub3cgaGFuZGxlIHRoZW0uICovCisJCXNtaV9pbmZvLT5oYW5kbGVycy0+Z2V0X3Jlc3VsdChzbWlfaW5mby0+c2lfc20sIG1zZywgNCk7CisJCWlmIChtc2dbMl0gIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJpcG1pX3NpOiBDb3VsZCBub3QgZGlzYWJsZSBpbnRlcnJ1cHRzIgorCQkJICAgICAgICIsIGZhaWxlZCBnZXQuXG4iKTsKKwkJCXNtaV9pbmZvLT5zaV9zdGF0ZSA9IFNJX05PUk1BTDsKKwkJfSBlbHNlIHsKKwkJCW1zZ1swXSA9IChJUE1JX05FVEZOX0FQUF9SRVFVRVNUIDw8IDIpOworCQkJbXNnWzFdID0gSVBNSV9TRVRfQk1DX0dMT0JBTF9FTkFCTEVTX0NNRDsKKwkJCW1zZ1syXSA9IChtc2dbM10gJgorCQkJCSAgfihJUE1JX0JNQ19SQ1ZfTVNHX0lOVFIgfAorCQkJCSAgICBJUE1JX0JNQ19FVlRfTVNHX0lOVFIpKTsKKwkJCXNtaV9pbmZvLT5oYW5kbGVycy0+c3RhcnRfdHJhbnNhY3Rpb24oCisJCQkJc21pX2luZm8tPnNpX3NtLCBtc2csIDMpOworCQkJc21pX2luZm8tPnNpX3N0YXRlID0gU0lfRElTQUJMRV9JTlRFUlJVUFRTMjsKKwkJfQorCQlicmVhazsKKwl9CisKKwljYXNlIFNJX0RJU0FCTEVfSU5URVJSVVBUUzI6CisJeworCQl1bnNpZ25lZCBjaGFyIG1zZ1s0XTsKKworCQkvKiBXZSBnb3QgdGhlIGZsYWdzIGZyb20gdGhlIFNNSSwgbm93IGhhbmRsZSB0aGVtLiAqLworCQlzbWlfaW5mby0+aGFuZGxlcnMtPmdldF9yZXN1bHQoc21pX2luZm8tPnNpX3NtLCBtc2csIDQpOworCQlpZiAobXNnWzJdICE9IDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiaXBtaV9zaTogQ291bGQgbm90IGRpc2FibGUgaW50ZXJydXB0cyIKKwkJCSAgICAgICAiLCBmYWlsZWQgc2V0LlxuIik7CisJCX0KKwkJc21pX2luZm8tPnNpX3N0YXRlID0gU0lfTk9STUFMOworCQlicmVhazsKKwl9CiAJfQogfQogCkBAIC04NTgsOSArOTI0LDYgQEAKIAlzdHJ1Y3QgdGltZXZhbCAgICB0OwogI2VuZGlmCiAKLQlpZiAoYXRvbWljX3JlYWQoJnNtaV9pbmZvLT5zdG9wX29wZXJhdGlvbikpCi0JCXJldHVybjsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCYoc21pX2luZm8tPnNpX2xvY2spLCBmbGFncyk7CiAjaWZkZWYgREVCVUdfVElNSU5HCiAJZG9fZ2V0dGltZW9mZGF5KCZ0KTsKQEAgLTkxNiwxNSArOTc5LDExIEBACiAJc21pX2luZm8tPmludGVycnVwdHMrKzsKIAlzcGluX3VubG9jaygmc21pX2luZm8tPmNvdW50X2xvY2spOwogCi0JaWYgKGF0b21pY19yZWFkKCZzbWlfaW5mby0+c3RvcF9vcGVyYXRpb24pKQotCQlnb3RvIG91dDsKLQogI2lmZGVmIERFQlVHX1RJTUlORwogCWRvX2dldHRpbWVvZmRheSgmdCk7CiAJcHJpbnRrKCIqKkludGVycnVwdDogJWQuJTkuOWRcbiIsIHQudHZfc2VjLCB0LnR2X3VzZWMpOwogI2VuZGlmCiAJc21pX2V2ZW50X2hhbmRsZXIoc21pX2luZm8sIDApOwotIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoc21pX2luZm8tPnNpX2xvY2spLCBmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTAwNiw2ICsxMDY1LDcgQEAKIHN0YXRpYyBpbnQgc21pX251bTsgLyogVXNlZCB0byBzZXF1ZW5jZSB0aGUgU01JcyAqLwogCiAjZGVmaW5lIERFRkFVTFRfUkVHU1BBQ0lORwkxCisjZGVmaW5lIERFRkFVTFRfUkVHU0laRQkJMQogCiBzdGF0aWMgaW50ICAgICAgICAgICBzaV90cnlkZWZhdWx0cyA9IDE7CiBzdGF0aWMgY2hhciAgICAgICAgICAqc2lfdHlwZVtTSV9NQVhfUEFSTVNdOwpAQCAtMTExMSw3ICsxMTcxLDcgQEAKIAlpZiAoaW5mby0+c2lfdHlwZSA9PSBTSV9CVCkgewogCQlydiA9IHJlcXVlc3RfaXJxKGluZm8tPmlycSwKIAkJCQkgc2lfYnRfaXJxX2hhbmRsZXIsCi0JCQkJIElSUUZfRElTQUJMRUQsCisJCQkJIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKIAkJCQkgREVWSUNFX05BTUUsCiAJCQkJIGluZm8pOwogCQlpZiAoIXJ2KQpAQCAtMTEyMSw3ICsxMTgxLDcgQEAKIAl9IGVsc2UKIAkJcnYgPSByZXF1ZXN0X2lycShpbmZvLT5pcnEsCiAJCQkJIHNpX2lycV9oYW5kbGVyLAotCQkJCSBJUlFGX0RJU0FCTEVELAorCQkJCSBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsCiAJCQkJIERFVklDRV9OQU1FLAogCQkJCSBpbmZvKTsKIAlpZiAocnYpIHsKQEAgLTE3MDEsMTUgKzE3NjEsMTEgQEAKIAlzbWlfaW5mby0+aW50ZXJydXB0cysrOwogCXNwaW5fdW5sb2NrKCZzbWlfaW5mby0+Y291bnRfbG9jayk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJnNtaV9pbmZvLT5zdG9wX29wZXJhdGlvbikpCi0JCWdvdG8gb3V0OwotCiAjaWZkZWYgREVCVUdfVElNSU5HCiAJZG9fZ2V0dGltZW9mZGF5KCZ0KTsKIAlwcmludGsoIioqQUNQSV9HUEU6ICVkLiU5LjlkXG4iLCB0LnR2X3NlYywgdC50dl91c2VjKTsKICNlbmRpZgogCXNtaV9ldmVudF9oYW5kbGVyKHNtaV9pbmZvLCAwKTsKLSBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKHNtaV9pbmZvLT5zaV9sb2NrKSwgZmxhZ3MpOwogCiAJcmV0dXJuIEFDUElfSU5URVJSVVBUX0hBTkRMRUQ7CkBAIC0xODU5LDEwICsxOTE1LDEwIEBACiAKIAlpZiAoc3BtaS0+YWRkci5zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZKSB7CiAJCWluZm8tPmlvX3NldHVwID0gbWVtX3NldHVwOwotCQlpbmZvLT5pby5hZGRyX3R5cGUgPSBJUE1JX0lPX0FERFJfU1BBQ0U7CisJCWluZm8tPmlvLmFkZHJfdHlwZSA9IElQTUlfTUVNX0FERFJfU1BBQ0U7CiAJfSBlbHNlIGlmIChzcG1pLT5hZGRyLnNwYWNlX2lkID09IEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTykgewogCQlpbmZvLT5pb19zZXR1cCA9IHBvcnRfc2V0dXA7Ci0JCWluZm8tPmlvLmFkZHJfdHlwZSA9IElQTUlfTUVNX0FERFJfU1BBQ0U7CisJCWluZm8tPmlvLmFkZHJfdHlwZSA9IElQTUlfSU9fQUREUl9TUEFDRTsKIAl9IGVsc2UgewogCQlrZnJlZShpbmZvKTsKIAkJcHJpbnRrKCJpcG1pX3NpOiBVbmtub3duIEFDUEkgSS9PIEFkZHJlc3MgdHlwZVxuIik7CkBAIC0yMTMzLDEyICsyMTg5LDE1IEBACiAJCWluZm8tPmlycV9zZXR1cCA9IHN0ZF9pcnFfc2V0dXA7CiAKIAlpbmZvLT5kZXYgPSAmcGRldi0+ZGV2OworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCXJldHVybiB0cnlfc21pX2luaXQoaW5mbyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpcG1pX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJc3RydWN0IHNtaV9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWNsZWFudXBfb25lX3NpKGluZm8pOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0yMTcyLDYgKzIyMzEsOTkgQEAKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIAorI2lmZGVmIENPTkZJR19QUENfT0YKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlwbWlfb2ZfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LAorCQkJIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBzbWlfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2U7CisJY29uc3QgaW50ICpyZWdzaXplLCAqcmVnc3BhY2luZywgKnJlZ3NoaWZ0OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm5vZGU7CisJaW50IHJldDsKKwlpbnQgcHJvcGxlbjsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgUEZYICJwcm9iaW5nIHZpYSBkZXZpY2UgdHJlZVxuIik7CisKKwlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzb3VyY2UpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCBQRlggImludmFsaWQgYWRkcmVzcyBmcm9tIE9GXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWdzaXplID0gZ2V0X3Byb3BlcnR5KG5wLCAicmVnLXNpemUiLCAmcHJvcGxlbik7CisJaWYgKHJlZ3NpemUgJiYgcHJvcGxlbiAhPSA0KSB7CisJCWRldl93YXJuKCZkZXYtPmRldiwgUEZYICJpbnZhbGlkIHJlZ3NpemUgZnJvbSBPRlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlZ3NwYWNpbmcgPSBnZXRfcHJvcGVydHkobnAsICJyZWctc3BhY2luZyIsICZwcm9wbGVuKTsKKwlpZiAocmVnc3BhY2luZyAmJiBwcm9wbGVuICE9IDQpIHsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCBQRlggImludmFsaWQgcmVnc3BhY2luZyBmcm9tIE9GXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVnc2hpZnQgPSBnZXRfcHJvcGVydHkobnAsICJyZWctc2hpZnQiLCAmcHJvcGxlbik7CisJaWYgKHJlZ3NoaWZ0ICYmIHByb3BsZW4gIT0gNCkgeworCQlkZXZfd2FybigmZGV2LT5kZXYsIFBGWCAiaW52YWxpZCByZWdzaGlmdCBmcm9tIE9GXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWluZm8pIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsCisJCQlQRlggImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIE9GIHByb2JlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5mby0+c2lfdHlwZQkJPSAoZW51bSBzaV90eXBlKSBtYXRjaC0+ZGF0YTsKKwlpbmZvLT5hZGRyX3NvdXJjZQk9ICJkZXZpY2UtdHJlZSI7CisJaW5mby0+aW9fc2V0dXAJCT0gbWVtX3NldHVwOworCWluZm8tPmlycV9zZXR1cAkJPSBzdGRfaXJxX3NldHVwOworCisJaW5mby0+aW8uYWRkcl90eXBlCT0gSVBNSV9NRU1fQUREUl9TUEFDRTsKKwlpbmZvLT5pby5hZGRyX2RhdGEJPSByZXNvdXJjZS5zdGFydDsKKworCWluZm8tPmlvLnJlZ3NpemUJPSByZWdzaXplID8gKnJlZ3NpemUgOiBERUZBVUxUX1JFR1NJWkU7CisJaW5mby0+aW8ucmVnc3BhY2luZwk9IHJlZ3NwYWNpbmcgPyAqcmVnc3BhY2luZyA6IERFRkFVTFRfUkVHU1BBQ0lORzsKKwlpbmZvLT5pby5yZWdzaGlmdAk9IHJlZ3NoaWZ0ID8gKnJlZ3NoaWZ0IDogMDsKKworCWluZm8tPmlycQkJPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkZXYtPm5vZGUsIDApOworCWluZm8tPmRldgkJPSAmZGV2LT5kZXY7CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgImFkZHIgMHglbHggcmVnc2l6ZSAlbGQgc3BhY2luZyAlbGQgaXJxICV4XG4iLAorCQlpbmZvLT5pby5hZGRyX2RhdGEsIGluZm8tPmlvLnJlZ3NpemUsIGluZm8tPmlvLnJlZ3NwYWNpbmcsCisJCWluZm8tPmlycSk7CisKKwlkZXYtPmRldi5kcml2ZXJfZGF0YSA9ICh2b2lkKikgaW5mbzsKKworCXJldHVybiB0cnlfc21pX2luaXQoaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGlwbWlfb2ZfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKmRldikKK3sKKwljbGVhbnVwX29uZV9zaShkZXYtPmRldi5kcml2ZXJfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlwbWlfbWF0Y2hbXSA9Cit7CisJeyAudHlwZSA9ICJpcG1pIiwgLmNvbXBhdGlibGUgPSAiaXBtaS1rY3MiLCAgLmRhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSBTSV9LQ1MgfSwKKwl7IC50eXBlID0gImlwbWkiLCAuY29tcGF0aWJsZSA9ICJpcG1pLXNtaWMiLCAuZGF0YSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpIFNJX1NNSUMgfSwKKwl7IC50eXBlID0gImlwbWkiLCAuY29tcGF0aWJsZSA9ICJpcG1pLWJ0IiwgICAuZGF0YSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpIFNJX0JUIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBpcG1pX29mX3BsYXRmb3JtX2RyaXZlciA9Cit7CisJLm5hbWUJCT0gImlwbWkiLAorCS5tYXRjaF90YWJsZQk9IGlwbWlfbWF0Y2gsCisJLnByb2JlCQk9IGlwbWlfb2ZfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChpcG1pX29mX3JlbW92ZSksCit9OworI2VuZGlmIC8qIENPTkZJR19QUENfT0YgKi8KKworCiBzdGF0aWMgaW50IHRyeV9nZXRfZGV2X2lkKHN0cnVjdCBzbWlfaW5mbyAqc21pX2luZm8pCiB7CiAJdW5zaWduZWQgY2hhciAgICAgICAgIG1zZ1syXTsKQEAgLTI4MDEsNiArMjk1MywxMCBAQAogCX0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BQQ19PRgorCW9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmaXBtaV9vZl9wbGF0Zm9ybV9kcml2ZXIpOworI2VuZGlmCisKIAlpZiAoc2lfdHJ5ZGVmYXVsdHMpIHsKIAkJbXV0ZXhfbG9jaygmc21pX2luZm9zX2xvY2spOwogCQlpZiAobGlzdF9lbXB0eSgmc21pX2luZm9zKSkgewpAQCAtMjgxOCw2ICsyOTc0LDEwIEBACiAjaWZkZWYgQ09ORklHX1BDSQogCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmlwbWlfcGNpX2RyaXZlcik7CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUENfT0YKKwkJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmlwbWlfb2ZfcGxhdGZvcm1fZHJpdmVyKTsKKyNlbmRpZgogCQlkcml2ZXJfdW5yZWdpc3RlcigmaXBtaV9kcml2ZXIpOwogCQlwcmludGsoImlwbWlfc2k6IFVuYWJsZSB0byBmaW5kIGFueSBTeXN0ZW0gSW50ZXJmYWNlKHMpXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yODM4LDI4ICsyOTk4LDMzIEBACiAKIAlsaXN0X2RlbCgmdG9fY2xlYW4tPmxpbmspOwogCi0JLyogVGVsbCB0aGUgdGltZXIgYW5kIGludGVycnVwdCBoYW5kbGVycyB0aGF0IHdlIGFyZSBzaHV0dGluZwotCSAgIGRvd24uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJih0b19jbGVhbi0+c2lfbG9jayksIGZsYWdzKTsKLQlzcGluX2xvY2soJih0b19jbGVhbi0+bXNnX2xvY2spKTsKLQorCS8qIFRlbGwgdGhlIGRyaXZlciB0aGF0IHdlIGFyZSBzaHV0dGluZyBkb3duLiAqLwogCWF0b21pY19pbmMoJnRvX2NsZWFuLT5zdG9wX29wZXJhdGlvbik7CiAKLQlpZiAodG9fY2xlYW4tPmlycV9jbGVhbnVwKQotCQl0b19jbGVhbi0+aXJxX2NsZWFudXAodG9fY2xlYW4pOwotCi0Jc3Bpbl91bmxvY2soJih0b19jbGVhbi0+bXNnX2xvY2spKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYodG9fY2xlYW4tPnNpX2xvY2spLCBmbGFncyk7Ci0KLQkvKiBXYWl0IHVudGlsIHdlIGtub3cgdGhhdCB3ZSBhcmUgb3V0IG9mIGFueSBpbnRlcnJ1cHQKLQkgICBoYW5kbGVycyBtaWdodCBoYXZlIGJlZW4gcnVubmluZyBiZWZvcmUgd2UgZnJlZWQgdGhlCi0JICAgaW50ZXJydXB0LiAqLwotCXN5bmNocm9uaXplX3NjaGVkKCk7Ci0KKwkvKiBNYWtlIHN1cmUgdGhlIHRpbWVyIGFuZCB0aHJlYWQgYXJlIHN0b3BwZWQgYW5kIHdpbGwgbm90IHJ1bgorCSAgIGFnYWluLiAqLwogCXdhaXRfZm9yX3RpbWVyX2FuZF90aHJlYWQodG9fY2xlYW4pOwogCi0JLyogSW50ZXJydXB0cyBhbmQgdGltZW91dHMgYXJlIHN0b3BwZWQsIG5vdyBtYWtlIHN1cmUgdGhlCi0JICAgaW50ZXJmYWNlIGlzIGluIGEgY2xlYW4gc3RhdGUuICovCisJLyogVGltZW91dHMgYXJlIHN0b3BwZWQsIG5vdyBtYWtlIHN1cmUgdGhlIGludGVycnVwdHMgYXJlIG9mZgorCSAgIGZvciB0aGUgZGV2aWNlLiAgQSBsaXR0bGUgdHJpY2t5IHdpdGggbG9ja3MgdG8gbWFrZSBzdXJlCisJICAgdGhlcmUgYXJlIG5vIHJhY2VzLiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ0b19jbGVhbi0+c2lfbG9jaywgZmxhZ3MpOworCXdoaWxlICh0b19jbGVhbi0+Y3Vycl9tc2cgfHwgKHRvX2NsZWFuLT5zaV9zdGF0ZSAhPSBTSV9OT1JNQUwpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRvX2NsZWFuLT5zaV9sb2NrLCBmbGFncyk7CisJCXBvbGwodG9fY2xlYW4pOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnRvX2NsZWFuLT5zaV9sb2NrLCBmbGFncyk7CisJfQorCWRpc2FibGVfc2lfaXJxKHRvX2NsZWFuKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0b19jbGVhbi0+c2lfbG9jaywgZmxhZ3MpOworCXdoaWxlICh0b19jbGVhbi0+Y3Vycl9tc2cgfHwgKHRvX2NsZWFuLT5zaV9zdGF0ZSAhPSBTSV9OT1JNQUwpKSB7CisJCXBvbGwodG9fY2xlYW4pOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwl9CisKKwkvKiBDbGVhbiB1cCBpbnRlcnJ1cHRzIGFuZCBtYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nIGlzIGRvbmUuICovCisJaWYgKHRvX2NsZWFuLT5pcnFfY2xlYW51cCkKKwkJdG9fY2xlYW4tPmlycV9jbGVhbnVwKHRvX2NsZWFuKTsKIAl3aGlsZSAodG9fY2xlYW4tPmN1cnJfbXNnIHx8ICh0b19jbGVhbi0+c2lfc3RhdGUgIT0gU0lfTk9STUFMKSkgewogCQlwb2xsKHRvX2NsZWFuKTsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CkBAIC0yODk4LDYgKzMwNjMsMTAgQEAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmlwbWlfcGNpX2RyaXZlcik7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUENfT0YKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmaXBtaV9vZl9wbGF0Zm9ybV9kcml2ZXIpOworI2VuZGlmCisKIAltdXRleF9sb2NrKCZzbWlfaW5mb3NfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIHRtcF9lLCAmc21pX2luZm9zLCBsaW5rKQogCQljbGVhbnVwX29uZV9zaShlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfd2F0Y2hkb2cuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfd2F0Y2hkb2cuYwppbmRleCA2YjYzNGU4Li40MWY3OGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXNpY29tLmMgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKaW5kZXggNDNhYjllZC4uNzYxZjc3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9pc2ljb20uYwpAQCAtMTM3LDExICsxMzcsMTAgQEAKICNkZWZpbmUgSW50ZXJydXB0VGhlQ2FyZChiYXNlKSBvdXR3KDAsIChiYXNlKSArIDB4YykKICNkZWZpbmUgQ2xlYXJJbnRlcnJ1cHQoYmFzZSkgaW53KChiYXNlKSArIDB4MGEpCiAKKyNkZWZpbmUgcHJfZGJnKHN0ci4uLikgcHJfZGVidWcoIklTSUNPTTogIiBzdHIpCiAjaWZkZWYgREVCVUcKLSNkZWZpbmUgcHJfZGJnKHN0ci4uLikgcHJpbnRrKEtFUk5fREVCVUcgIklTSUNPTTogIiBzdHIpCiAjZGVmaW5lIGlzaWNvbV9wYXJhbm9pYV9jaGVjayhhLCBiLCBjKSBfX2lzaWNvbV9wYXJhbm9pYV9jaGVjaygoYSksIChiKSwgKGMpKQogI2Vsc2UKLSNkZWZpbmUgcHJfZGJnKHN0ci4uLikgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBpc2ljb21fcGFyYW5vaWFfY2hlY2soYSwgYiwgYykgMAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKaW5kZXggYzA2ZTg2YS4uMWIwOTQ1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogc3RhdGljIHN0cnVjdCBrYmRfc3RydWN0ICprYmQgPSBrYmRfdGFibGU7CiAKIHN0cnVjdCB2dF9zcGF3bl9jb25zb2xlIHZ0X3NwYXduX2NvbiA9IHsKLQkubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkubG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHZ0X3NwYXduX2Nvbi5sb2NrKSwKIAkucGlkICA9IE5VTEwsCiAJLnNpZyAgPSAwLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9scC5jIGIvZHJpdmVycy9jaGFyL2xwLmMKaW5kZXggYjUxZDA4Yi4uNjIwNTFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2xwLmMKKysrIGIvZHJpdmVycy9jaGFyL2xwLmMKQEAgLTExOCw3ICsxMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0xMzksOSArMTM4LDYgQEAKIC8qIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiA4IHByaW50ZXJzLCByZW1lbWJlciB0byBpbmNyZWFzZSBMUF9OTyAqLwogI2RlZmluZSBMUF9OTyA4CiAKLS8qIFJPVU5EX1VQIG1hY3JvIGZyb20gZnMvc2VsZWN0LmMgKi8KLSNkZWZpbmUgUk9VTkRfVVAoeCx5KSAoKCh4KSsoeSktMSkvKHkpKQotCiBzdGF0aWMgc3RydWN0IGxwX3N0cnVjdCBscF90YWJsZVtMUF9OT107CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbHBfY291bnQgPSAwOwpAQCAtNjUyLDcgKzY0OCw3IEBACiAJCQkgICAgKHBhcl90aW1lb3V0LnR2X3VzZWMgPCAwKSkgewogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJdG9famlmZmllcyA9IFJPVU5EX1VQKHBhcl90aW1lb3V0LnR2X3VzZWMsIDEwMDAwMDAvSFopOworCQkJdG9famlmZmllcyA9IERJVl9ST1VORF9VUChwYXJfdGltZW91dC50dl91c2VjLCAxMDAwMDAwL0haKTsKIAkJCXRvX2ppZmZpZXMgKz0gcGFyX3RpbWVvdXQudHZfc2VjICogKGxvbmcpIEhaOwogCQkJaWYgKHRvX2ppZmZpZXMgPD0gMCkgewogCQkJCXJldHVybiAtRUlOVkFMOwpAQCAtODAzLDcgKzc5OSw3IEBACiAJaWYgKHJlc2V0KQogCQlscF9yZXNldChucik7CiAKLQljbGFzc19kZXZpY2VfY3JlYXRlKGxwX2NsYXNzLCBOVUxMLCBNS0RFVihMUF9NQUpPUiwgbnIpLCBOVUxMLAorCWNsYXNzX2RldmljZV9jcmVhdGUobHBfY2xhc3MsIE5VTEwsIE1LREVWKExQX01BSk9SLCBuciksIHBvcnQtPmRldiwKIAkJCQkibHAlZCIsIG5yKTsKIAogCXByaW50ayhLRVJOX0lORk8gImxwJWQ6IHVzaW5nICVzICglcykuXG4iLCBuciwgcG9ydC0+bmFtZSwgCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNWYwNjY5Ni4uY2M5YTlkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Jhdy5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KQEAgLTU1Miw3ICs1NTEsNyBAQAogIAlyZXR1cm4gdmlydHIgKyB3cm90ZTsKIH0KIAotI2lmIChkZWZpbmVkKENPTkZJR19JU0EpIHx8IGRlZmluZWQoQ09ORklHX1BDSSkpICYmICFkZWZpbmVkKF9fbWM2ODAwMF9fKQorI2lmZGVmIENPTkZJR19ERVZQT1JUCiBzdGF0aWMgc3NpemVfdCByZWFkX3BvcnQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZiwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKQEAgLTgzNSw3ICs4MzQsNyBAQAogCS5zcGxpY2Vfd3JpdGUJPSBzcGxpY2Vfd3JpdGVfbnVsbCwKIH07CiAKLSNpZiAoZGVmaW5lZChDT05GSUdfSVNBKSB8fCBkZWZpbmVkKENPTkZJR19QQ0kpKSAmJiAhZGVmaW5lZChfX21jNjgwMDBfXykKKyNpZmRlZiBDT05GSUdfREVWUE9SVAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9ydF9mb3BzID0gewogCS5sbHNlZWsJCT0gbWVtb3J5X2xzZWVrLAogCS5yZWFkCQk9IHJlYWRfcG9ydCwKQEAgLTkxMyw3ICs5MTIsNyBAQAogCQljYXNlIDM6CiAJCQlmaWxwLT5mX29wID0gJm51bGxfZm9wczsKIAkJCWJyZWFrOwotI2lmIChkZWZpbmVkKENPTkZJR19JU0EpIHx8IGRlZmluZWQoQ09ORklHX1BDSSkpICYmICFkZWZpbmVkKF9fbWM2ODAwMF9fKQorI2lmZGVmIENPTkZJR19ERVZQT1JUCiAJCWNhc2UgNDoKIAkJCWZpbHAtPmZfb3AgPSAmcG9ydF9mb3BzOwogCQkJYnJlYWs7CkBAIC05NjAsNyArOTU5LDcgQEAKIAl7MSwgIm1lbSIsICAgICBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAsICZtZW1fZm9wc30sCiAJezIsICJrbWVtIiwgICAgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQLCAma21lbV9mb3BzfSwKIAl7MywgIm51bGwiLCAgICBTX0lSVUdPIHwgU19JV1VHTywgICAgICAgICAgICZudWxsX2ZvcHN9LAotI2lmIChkZWZpbmVkKENPTkZJR19JU0EpIHx8IGRlZmluZWQoQ09ORklHX1BDSSkpICYmICFkZWZpbmVkKF9fbWM2ODAwMF9fKQorI2lmZGVmIENPTkZJR19ERVZQT1JUCiAJezQsICJwb3J0IiwgICAgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQLCAmcG9ydF9mb3BzfSwKICNlbmRpZgogCXs1LCAiemVybyIsICAgIFNfSVJVR08gfCBTX0lXVUdPLCAgICAgICAgICAgJnplcm9fZm9wc30sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWlzYy5jIGIvZHJpdmVycy9jaGFyL21pc2MuYwppbmRleCA3ZTk3NWY2Li40ZTZmYjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWlzYy5jCisrKyBiL2RyaXZlcnMvY2hhci9taXNjLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KQEAgLTUzLDcgKzU0LDcgQEAKICAqIEhlYWQgZW50cnkgZm9yIHRoZSBkb3VibHkgbGlua2VkIG1pc2NkZXZpY2UgbGlzdAogICovCiBzdGF0aWMgTElTVF9IRUFEKG1pc2NfbGlzdCk7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChtaXNjX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKG1pc2NfbXR4KTsKIAogLyoKICAqIEFzc2lnbmVkIG51bWJlcnMsIHVzZWQgZm9yIGR5bmFtaWMgbWlub3JzCkBAIC02OSw3ICs3MCw3IEBACiAJc3RydWN0IG1pc2NkZXZpY2UgKnA7CiAJbG9mZl90IG9mZiA9IDA7CiAKLQlkb3duKCZtaXNjX3NlbSk7CisJbXV0ZXhfbG9jaygmbWlzY19tdHgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJm1pc2NfbGlzdCwgbGlzdCkgewogCQlpZiAoKnBvcyA9PSBvZmYrKykgCiAJCQlyZXR1cm4gcDsKQEAgLTg5LDcgKzkwLDcgQEAKIAogc3RhdGljIHZvaWQgbWlzY19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQl1cCgmbWlzY19zZW0pOworCW11dGV4X3VubG9jaygmbWlzY19tdHgpOwogfQogCiBzdGF0aWMgaW50IG1pc2Nfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC0xMjksNyArMTMwLDcgQEAKIAlpbnQgZXJyID0gLUVOT0RFVjsKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpvbGRfZm9wcywgKm5ld19mb3BzID0gTlVMTDsKIAkKLQlkb3duKCZtaXNjX3NlbSk7CisJbXV0ZXhfbG9jaygmbWlzY19tdHgpOwogCQogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJm1pc2NfbGlzdCwgbGlzdCkgewogCQlpZiAoYy0+bWlub3IgPT0gbWlub3IpIHsKQEAgLTEzOSw5ICsxNDAsOSBAQAogCX0KIAkJCiAJaWYgKCFuZXdfZm9wcykgewotCQl1cCgmbWlzY19zZW0pOworCQltdXRleF91bmxvY2soJm1pc2NfbXR4KTsKIAkJcmVxdWVzdF9tb2R1bGUoImNoYXItbWFqb3ItJWQtJWQiLCBNSVNDX01BSk9SLCBtaW5vcik7Ci0JCWRvd24oJm1pc2Nfc2VtKTsKKwkJbXV0ZXhfbG9jaygmbWlzY19tdHgpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJm1pc2NfbGlzdCwgbGlzdCkgewogCQkJaWYgKGMtPm1pbm9yID09IG1pbm9yKSB7CkBAIC0xNjUsNyArMTY2LDcgQEAKIAl9CiAJZm9wc19wdXQob2xkX2ZvcHMpOwogZmFpbDoKLQl1cCgmbWlzY19zZW0pOworCW11dGV4X3VubG9jaygmbWlzY19tdHgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIwMSwxMCArMjAyLDEwIEBACiAKIAlJTklUX0xJU1RfSEVBRCgmbWlzYy0+bGlzdCk7CiAKLQlkb3duKCZtaXNjX3NlbSk7CisJbXV0ZXhfbG9jaygmbWlzY19tdHgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJm1pc2NfbGlzdCwgbGlzdCkgewogCQlpZiAoYy0+bWlub3IgPT0gbWlzYy0+bWlub3IpIHsKLQkJCXVwKCZtaXNjX3NlbSk7CisJCQltdXRleF91bmxvY2soJm1pc2NfbXR4KTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAl9CkBAIC0yMTUsNyArMjE2LDcgQEAKIAkJCWlmICggKG1pc2NfbWlub3JzW2k+PjNdICYgKDEgPDwgKGkmNykpKSA9PSAwKQogCQkJCWJyZWFrOwogCQlpZiAoaTwwKSB7Ci0JCQl1cCgmbWlzY19zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZtaXNjX210eCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCW1pc2MtPm1pbm9yID0gaTsKQEAgLTIzOCw3ICsyMzksNyBAQAogCSAqLwogCWxpc3RfYWRkKCZtaXNjLT5saXN0LCAmbWlzY19saXN0KTsKICBvdXQ6Ci0JdXAoJm1pc2Nfc2VtKTsKKwltdXRleF91bmxvY2soJm1pc2NfbXR4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNTksMTMgKzI2MCwxMyBAQAogCWlmIChsaXN0X2VtcHR5KCZtaXNjLT5saXN0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZtaXNjX3NlbSk7CisJbXV0ZXhfbG9jaygmbWlzY19tdHgpOwogCWxpc3RfZGVsKCZtaXNjLT5saXN0KTsKIAlkZXZpY2VfZGVzdHJveShtaXNjX2NsYXNzLCBNS0RFVihNSVNDX01BSk9SLCBtaXNjLT5taW5vcikpOwogCWlmIChpIDwgRFlOQU1JQ19NSU5PUlMgJiYgaT4wKSB7CiAJCW1pc2NfbWlub3JzW2k+PjNdICY9IH4oMSA8PCAobWlzYy0+bWlub3IgJiA3KSk7CiAJfQotCXVwKCZtaXNjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZtaXNjX210eCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tbXRpbWVyLmMgYi9kcml2ZXJzL2NoYXIvbW10aW1lci5jCmluZGV4IGMwOTE2MDMuLjZlNTVjZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tbXRpbWVyLmMKKysrIGIvZHJpdmVycy9jaGFyL21tdGltZXIuYwpAQCAtNzA1LDE1ICs3MDUsMTMgQEAKIAltYXhuKys7CiAKIAkvKiBBbGxvY2F0ZSBsaXN0IG9mIG5vZGUgcHRycyB0byBtbXRpbWVyX3QncyAqLwotCXRpbWVycyA9IGttYWxsb2Moc2l6ZW9mKG1tdGltZXJfdCAqKSptYXhuLCBHRlBfS0VSTkVMKTsKKwl0aW1lcnMgPSBremFsbG9jKHNpemVvZihtbXRpbWVyX3QgKikqbWF4biwgR0ZQX0tFUk5FTCk7CiAJaWYgKHRpbWVycyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZVxuIiwKIAkJCQlNTVRJTUVSX05BTUUpOwogCQlnb3RvIG91dDM7CiAJfQogCi0JbWVtc2V0KHRpbWVycywwLChzaXplb2YobW10aW1lcl90ICopKm1heG4pKTsKLQogCS8qIEFsbG9jYXRlIG1tdGltZXJfdCdzIGZvciBlYWNoIG9ubGluZSBub2RlICovCiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewogCQl0aW1lcnNbbm9kZV0gPSBrbWFsbG9jX25vZGUoc2l6ZW9mKG1tdGltZXJfdCkqTlVNX0NPTVBBUkFUT1JTLCBHRlBfS0VSTkVMLCBub2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tb3hhLmMgYi9kcml2ZXJzL2NoYXIvbW94YS5jCmluZGV4IDdkYmFlZTguLmUwZDM1YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tb3hhLmMKKysrIGIvZHJpdmVycy9jaGFyL21veGEuYwpAQCAtMTU4Miw3ICsxNTgyLDcgQEAKIAogCWlmKGNvcHlfZnJvbV91c2VyKCZkbHRtcCwgYXJncCwgc2l6ZW9mKHN0cnVjdCBkbF9zdHIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYoZGx0bXAuY2FyZG5vIDwgMCB8fCBkbHRtcC5jYXJkbm8gPj0gTUFYX0JPQVJEUykKKwlpZihkbHRtcC5jYXJkbm8gPCAwIHx8IGRsdG1wLmNhcmRubyA+PSBNQVhfQk9BUkRTIHx8IGRsdG1wLmxlbiA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoKGNtZCkKQEAgLTI1MjksNiArMjUyOSw4IEBACiAJdm9pZCBfX2lvbWVtICpiYXNlQWRkcjsKIAlpbnQgaTsKIAorCWlmKGxlbiA8IDAgfHwgbGVuID4gc2l6ZW9mKG1veGFCdWZmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYoY29weV9mcm9tX3VzZXIobW94YUJ1ZmYsIHRtcCwgbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJYmFzZUFkZHIgPSBtb3hhX2JvYXJkc1tjYXJkbm9dLmJhc2VtZW07CkBAIC0yNTc2LDcgKzI1NzgsNyBAQAogCXZvaWQgX19pb21lbSAqYmFzZUFkZHI7CiAJaW50IGk7CiAKLQlpZihsZW4gPiBzaXplb2YobW94YUJ1ZmYpKQorCWlmKGxlbiA8IDAgfHwgbGVuID4gc2l6ZW9mKG1veGFCdWZmKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYoY29weV9mcm9tX3VzZXIobW94YUJ1ZmYsIHRtcCwgbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yNTk2LDYgKzI1OTgsOCBAQAogCXZvaWQgX19pb21lbSAqYmFzZUFkZHIsICpvZnNBZGRyOwogCWludCByZXR2YWwsIHBvcnQsIGk7CiAKKwlpZihsZW4gPCAwIHx8IGxlbiA+IHNpemVvZihtb3hhQnVmZikpCisJCXJldHVybiAtRUlOVkFMOwogCWlmKGNvcHlfZnJvbV91c2VyKG1veGFCdWZmLCB0bXAsIGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCWJhc2VBZGRyID0gbW94YV9ib2FyZHNbY2FyZG5vXS5iYXNlbWVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL214c2VyLmMgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwppbmRleCA4MGEwMTE1Li41OTUzYTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXhzZXIuYworKysgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwpAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXhzZXJfbmV3LmMgYi9kcml2ZXJzL2NoYXIvbXhzZXJfbmV3LmMKaW5kZXggZjc2MDNiNi4uNmNkZTQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL214c2VyX25ldy5jCisrKyBiL2RyaXZlcnMvY2hhci9teHNlcl9uZXcuYwpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbl9yMzk2NC5jIGIvZHJpdmVycy9jaGFyL25fcjM5NjQuYwppbmRleCA2NWYyZDNhLi4xNDU1N2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbl9yMzk2NC5jCisrKyBiL2RyaXZlcnMvY2hhci9uX3IzOTY0LmMKQEAgLTEwODgsMTMgKzEwODgsMTMgQEAKIAkJCS8qIGJsb2NrIHVudGlsIHRoZXJlIGlzIGEgbWVzc2FnZTogKi8KIAkJCWFkZF93YWl0X3F1ZXVlKCZwSW5mby0+cmVhZF93YWl0LCAmd2FpdCk7CiByZXBlYXQ6Ci0JCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJCXBNc2cgPSByZW1vdmVfbXNnKHBJbmZvLCBwQ2xpZW50KTsKIAkJCWlmICghcE1zZyAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCQlzY2hlZHVsZSgpOwogCQkJCWdvdG8gcmVwZWF0OwogCQkJfQotCQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcEluZm8tPnJlYWRfd2FpdCwgJndhaXQpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9uX3R0eS5jIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKaW5kZXggNmFjM2NhNC4uMTU0ZjQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25fdHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKQEAgLTExOTEsNiArMTE5MSw3IEBACiAJCQkgICAgaXNfY3VycmVudF9wZ3JwX29ycGhhbmVkKCkpCiAJCQkJcmV0dXJuIC1FSU87CiAJCQlraWxsX3BncnAodGFza19wZ3JwKGN1cnJlbnQpLCBTSUdUVElOLCAxKTsKKwkJCXNldF90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQl9CiAJfQpAQCAtMTU0NCwyMSArMTU0NSwxOCBAQAogfQogCiBzdHJ1Y3QgdHR5X2xkaXNjIHR0eV9sZGlzY19OX1RUWSA9IHsKLQlUVFlfTERJU0NfTUFHSUMsCS8qIG1hZ2ljICovCi0JIm5fdHR5IiwJCS8qIG5hbWUgKi8KLQkwLAkJCS8qIG51bSAqLwotCTAsCQkJLyogZmxhZ3MgKi8KLQluX3R0eV9vcGVuLAkJLyogb3BlbiAqLwotCW5fdHR5X2Nsb3NlLAkJLyogY2xvc2UgKi8KLQluX3R0eV9mbHVzaF9idWZmZXIsCS8qIGZsdXNoX2J1ZmZlciAqLwotCW5fdHR5X2NoYXJzX2luX2J1ZmZlciwJLyogY2hhcnNfaW5fYnVmZmVyICovCi0JcmVhZF9jaGFuLAkJLyogcmVhZCAqLwotCXdyaXRlX2NoYW4sCQkvKiB3cml0ZSAqLwotCW5fdHR5X2lvY3RsLAkJLyogaW9jdGwgKi8KLQluX3R0eV9zZXRfdGVybWlvcywJLyogc2V0X3Rlcm1pb3MgKi8KLQlub3JtYWxfcG9sbCwJCS8qIHBvbGwgKi8KLQlOVUxMLAkJCS8qIGhhbmd1cCAqLwotCW5fdHR5X3JlY2VpdmVfYnVmLAkvKiByZWNlaXZlX2J1ZiAqLwotCW5fdHR5X3dyaXRlX3dha2V1cAkvKiB3cml0ZV93YWtldXAgKi8KKwkubWFnaWMgICAgICAgICAgID0gVFRZX0xESVNDX01BR0lDLAorCS5uYW1lICAgICAgICAgICAgPSAibl90dHkiLAorCS5vcGVuICAgICAgICAgICAgPSBuX3R0eV9vcGVuLAorCS5jbG9zZSAgICAgICAgICAgPSBuX3R0eV9jbG9zZSwKKwkuZmx1c2hfYnVmZmVyICAgID0gbl90dHlfZmx1c2hfYnVmZmVyLAorCS5jaGFyc19pbl9idWZmZXIgPSBuX3R0eV9jaGFyc19pbl9idWZmZXIsCisJLnJlYWQgICAgICAgICAgICA9IHJlYWRfY2hhbiwKKwkud3JpdGUgICAgICAgICAgID0gd3JpdGVfY2hhbiwKKwkuaW9jdGwgICAgICAgICAgID0gbl90dHlfaW9jdGwsCisJLnNldF90ZXJtaW9zICAgICA9IG5fdHR5X3NldF90ZXJtaW9zLAorCS5wb2xsICAgICAgICAgICAgPSBub3JtYWxfcG9sbCwKKwkucmVjZWl2ZV9idWYgICAgID0gbl90dHlfcmVjZWl2ZV9idWYsCisJLndyaXRlX3dha2V1cCAgICA9IG5fdHR5X3dyaXRlX3dha2V1cAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9LY29uZmlnCmluZGV4IDI3YzExNzkuLmYyNWZhY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL0tjb25maWcKQEAgLTIxLDYgKzIxLDcgQEAKIGNvbmZpZyBDQVJETUFOXzQwMDAKIAl0cmlzdGF0ZSAiT21uaWtleSBDYXJkbWFuIDQwMDAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDTUNJQQorCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBPbW5pa2V5IENhcmRtYW4gNDAwMCBQQ01DSUEgU21hcnRjYXJkCiAJICByZWFkZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwppbmRleCBlOTFiNDNhLi5mZWU1OGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdHJldi5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTE5NCw0MSArMTk1LDE3IEBACiB9CiAjZW5kaWYKIAotI2RlZmluZQliXzAwMDAJMTUKLSNkZWZpbmUJYl8wMDAxCTE0Ci0jZGVmaW5lCWJfMDAxMAkxMwotI2RlZmluZQliXzAwMTEJMTIKLSNkZWZpbmUJYl8wMTAwCTExCi0jZGVmaW5lCWJfMDEwMQkxMAotI2RlZmluZQliXzAxMTAJOQotI2RlZmluZQliXzAxMTEJOAotI2RlZmluZQliXzEwMDAJNwotI2RlZmluZQliXzEwMDEJNgotI2RlZmluZQliXzEwMTAJNQotI2RlZmluZQliXzEwMTEJNAotI2RlZmluZQliXzExMDAJMwotI2RlZmluZQliXzExMDEJMgotI2RlZmluZQliXzExMTAJMQotI2RlZmluZQliXzExMTEJMAotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpcnRhYlsxNl0gPSB7Ci0JYl8wMDAwLCBiXzEwMDAsIGJfMDEwMCwgYl8xMTAwLAotCWJfMDAxMCwgYl8xMDEwLCBiXzAxMTAsIGJfMTExMCwKLQliXzAwMDEsIGJfMTAwMSwgYl8wMTAxLCBiXzExMDEsCi0JYl8wMDExLCBiXzEwMTEsIGJfMDExMSwgYl8xMTExCi19Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGludmVydF9yZXZlcnQodW5zaWduZWQgY2hhciBjaCkKK3sKKwlyZXR1cm4gYml0cmV2OCh+Y2gpOworfQogCiBzdGF0aWMgdm9pZCBzdHJfaW52ZXJ0X3JldmVydCh1bnNpZ25lZCBjaGFyICpiLCBpbnQgbGVuKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQliW2ldID0gKGlydGFiW2JbaV0gJiAweDBmXSA8PCA0KSB8IGlydGFiW2JbaV0gPj4gNF07Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGludmVydF9yZXZlcnQodW5zaWduZWQgY2hhciBjaCkKLXsKLQlyZXR1cm4gKGlydGFiW2NoICYgMHgwZl0gPDwgNCkgfCBpcnRhYltjaCA+PiA0XTsKKwkJYltpXSA9IGludmVydF9yZXZlcnQoYltpXSk7CiB9CiAKICNkZWZpbmUJQVRSTEVOQ0soZGV2LHBvcykgXApAQCAtMTExNCw3ICsxMDkxLDcgQEAKIAkvKgogCSAqIHdhaXQgZm9yIGF0ciB0byBiZWNvbWUgdmFsaWQuCiAJICogbm90ZTogaXQgaXMgaW1wb3J0YW50IHRvIGxvY2sgdGhpcyBjb2RlLiBpZiB3ZSBkb250LCB0aGUgbW9uaXRvcgotCSAqIGNvdWxkIGJlIHJ1biBiZXR3ZWVuIHRlc3RfYml0IGFuZCB0aGUgdGhlIGNhbGwgdGhlIHNsZWVwIG9uIHRoZQorCSAqIGNvdWxkIGJlIHJ1biBiZXR3ZWVuIHRlc3RfYml0IGFuZCB0aGUgY2FsbCB0byBzbGVlcCBvbiB0aGUKIAkgKiBhdHItcXVldWUuICBpZiAqdGhlbiogdGhlIG1vbml0b3IgZGV0ZWN0cyBhdHIgdmFsaWQsIGl0IHdpbGwgd2FrZSB1cAogCSAqIGFueSBwcm9jZXNzIG9uIHRoZSBhdHItcXVldWUsICpidXQqIHNpbmNlIHdlIGhhdmUgYmVlbiBpbnRlcnJ1cHRlZCwKIAkgKiB3ZSBkbyBub3QgeWV0IHNsZWVwIG9uIHRoaXMgcXVldWUuIHRoaXMgd291bGQgcmVzdWx0IGluIGEgbWlzc2VkCkBAIC0xODgxLDggKzE4NTgsMTEgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnJlYWRxKTsKIAogCXJldCA9IGNtNDAwMF9jb25maWcobGluaywgaSk7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CisJCWRldl90YWJsZVtpXSA9IE5VTEw7CisJCWtmcmVlKGRldik7CiAJCXJldHVybiByZXQ7CisJfQogCiAJY2xhc3NfZGV2aWNlX2NyZWF0ZShjbW1fY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwgTlVMTCwKIAkJCSAgICAiY21tJWQiLCBpKTsKQEAgLTE5MDcsNyArMTg4Nyw3IEBACiAJY200MDAwX3JlbGVhc2UobGluayk7CiAKIAlkZXZfdGFibGVbZGV2bm9dID0gTlVMTDsKLSAJa2ZyZWUoZGV2KTsKKwlrZnJlZShkZXYpOwogCiAJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koY21tX2NsYXNzLCBNS0RFVihtYWpvciwgZGV2bm8pKTsKIApAQCAtMTk1NiwxMiArMTkzNiwxNCBAQAogCWlmIChtYWpvciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBNT0RVTEVfTkFNRQogCQkJIjogY291bGQgbm90IGdldCBtYWpvciBudW1iZXJcbiIpOworCQljbGFzc19kZXN0cm95KGNtbV9jbGFzcyk7CiAJCXJldHVybiBtYWpvcjsKIAl9CiAKIAlyYyA9IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJmNtNDAwMF9kcml2ZXIpOwogCWlmIChyYyA8IDApIHsKIAkJdW5yZWdpc3Rlcl9jaHJkZXYobWFqb3IsIERFVklDRV9OQU1FKTsKKwkJY2xhc3NfZGVzdHJveShjbW1fY2xhc3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYwppbmRleCBmMmU0ZWM0Li5hZjg4MTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKQEAgLTYzNiw4ICs2MzYsMTEgQEAKIAlzZXR1cF90aW1lcigmZGV2LT5wb2xsX3RpbWVyLCBjbTQwNDBfZG9fcG9sbCwgMCk7CiAKIAlyZXQgPSByZWFkZXJfY29uZmlnKGxpbmssIGkpOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlkZXZfdGFibGVbaV0gPSBOVUxMOworCQlrZnJlZShkZXYpOwogCQlyZXR1cm4gcmV0OworCX0KIAogCWNsYXNzX2RldmljZV9jcmVhdGUoY214X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgaSksIE5VTEwsCiAJCQkgICAgImNteCVkIiwgaSk7CkBAIC03MDgsMTIgKzcxMSwxNCBAQAogCWlmIChtYWpvciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBNT0RVTEVfTkFNRQogCQkJIjogY291bGQgbm90IGdldCBtYWpvciBudW1iZXJcbiIpOworCQljbGFzc19kZXN0cm95KGNteF9jbGFzcyk7CiAJCXJldHVybiBtYWpvcjsKIAl9CiAKIAlyYyA9IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnJlYWRlcl9kcml2ZXIpOwogCWlmIChyYyA8IDApIHsKIAkJdW5yZWdpc3Rlcl9jaHJkZXYobWFqb3IsIERFVklDRV9OQU1FKTsKKwkJY2xhc3NfZGVzdHJveShjbXhfY2xhc3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcHBkZXYuYyBiL2RyaXZlcnMvY2hhci9wcGRldi5jCmluZGV4IDRhYmQxZWYuLjg0YWM2NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wcGRldi5jCisrKyBiL2RyaXZlcnMvY2hhci9wcGRldi5jCkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvcHBkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTc1Miw3ICs3NTEsNyBAQAogCiBzdGF0aWMgdm9pZCBwcF9hdHRhY2goc3RydWN0IHBhcnBvcnQgKnBvcnQpCiB7Ci0JZGV2aWNlX2NyZWF0ZShwcGRldl9jbGFzcywgTlVMTCwgTUtERVYoUFBfTUFKT1IsIHBvcnQtPm51bWJlciksCisJZGV2aWNlX2NyZWF0ZShwcGRldl9jbGFzcywgcG9ydC0+ZGV2LCBNS0RFVihQUF9NQUpPUiwgcG9ydC0+bnVtYmVyKSwKIAkJCSJwYXJwb3J0JWQiLCBwb3J0LT5udW1iZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggNDZjMWI5Nzc0Li4wNDc0Y2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC03NjAsNyArNzYwLDcgQEAKIAogc3RhdGljIHZvaWQgZXh0cmFjdF9idWYoc3RydWN0IGVudHJvcHlfc3RvcmUgKnIsIF9fdTggKm91dCkKIHsKLQlpbnQgaSwgeDsKKwlpbnQgaTsKIAlfX3UzMiBkYXRhWzE2XSwgYnVmWzUgKyBTSEFfV09SS1NQQUNFX1dPUkRTXTsKIAogCXNoYV9pbml0KGJ1Zik7CkBAIC03NzIsOSArNzcyLDExIEBACiAJICogYXR0ZW1wdHMgdG8gZmluZCBwcmV2aW91cyBvdXB1dHMpLCB1bmxlc3MgdGhlIGhhc2gKIAkgKiBmdW5jdGlvbiBjYW4gYmUgaW52ZXJ0ZWQuCiAJICovCi0JZm9yIChpID0gMCwgeCA9IDA7IGkgPCByLT5wb29saW5mby0+cG9vbHdvcmRzOyBpICs9IDE2LCB4Kz0yKSB7Ci0JCXNoYV90cmFuc2Zvcm0oYnVmLCAoX191OCAqKXItPnBvb2wraSwgYnVmICsgNSk7Ci0JCWFkZF9lbnRyb3B5X3dvcmRzKHIsICZidWZbeCAlIDVdLCAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgci0+cG9vbGluZm8tPnBvb2x3b3JkczsgaSArPSAxNikgeworCQkvKiBoYXNoIGJsb2NrcyBvZiAxNiB3b3JkcyA9IDUxMiBiaXRzICovCisJCXNoYV90cmFuc2Zvcm0oYnVmLCAoX191OCAqKShyLT5wb29sICsgaSksIGJ1ZiArIDUpOworCQkvKiBmZWVkIGJhY2sgcG9ydGlvbiBvZiB0aGUgcmVzdWx0aW5nIGhhc2ggKi8KKwkJYWRkX2VudHJvcHlfd29yZHMociwgJmJ1ZltpICUgNV0sIDEpOwogCX0KIAogCS8qCkBAIC03ODIsNyArNzg0LDcgQEAKIAkgKiBwb3J0aW9uIG9mIHRoZSBwb29sIHdoaWxlIG1peGluZywgYW5kIGhhc2ggb25lCiAJICogZmluYWwgdGltZS4KIAkgKi8KLQlfX2FkZF9lbnRyb3B5X3dvcmRzKHIsICZidWZbeCAlIDVdLCAxLCBkYXRhKTsKKwlfX2FkZF9lbnRyb3B5X3dvcmRzKHIsICZidWZbaSAlIDVdLCAxLCBkYXRhKTsKIAlzaGFfdHJhbnNmb3JtKGJ1ZiwgKF9fdTggKilkYXRhLCBidWYgKyA1KTsKIAogCS8qCkBAIC0xMDE4LDM3ICsxMDIwLDQ0IEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKK3N0YXRpYyBpbnQKK3dyaXRlX3Bvb2woc3RydWN0IGVudHJvcHlfc3RvcmUgKnIsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKwlzaXplX3QgYnl0ZXM7CisJX191MzIgYnVmWzE2XTsKKwljb25zdCBjaGFyIF9fdXNlciAqcCA9IGJ1ZmZlcjsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJYnl0ZXMgPSBtaW4oY291bnQsIHNpemVvZihidWYpKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHAsIGJ5dGVzKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWNvdW50IC09IGJ5dGVzOworCQlwICs9IGJ5dGVzOworCisJCWFkZF9lbnRyb3B5X3dvcmRzKHIsIGJ1ZiwgKGJ5dGVzICsgMykgLyA0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHNzaXplX3QKIHJhbmRvbV93cml0ZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAogCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JaW50IHJldCA9IDA7Ci0Jc2l6ZV90IGJ5dGVzOwotCV9fdTMyIGJ1ZlsxNl07Ci0JY29uc3QgY2hhciBfX3VzZXIgKnAgPSBidWZmZXI7Ci0Jc2l6ZV90IGMgPSBjb3VudDsKKwlzaXplX3QgcmV0OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCi0Jd2hpbGUgKGMgPiAwKSB7Ci0JCWJ5dGVzID0gbWluKGMsIHNpemVvZihidWYpKTsKKwlyZXQgPSB3cml0ZV9wb29sKCZibG9ja2luZ19wb29sLCBidWZmZXIsIGNvdW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IHdyaXRlX3Bvb2woJm5vbmJsb2NraW5nX3Bvb2wsIGJ1ZmZlciwgY291bnQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQkJYnl0ZXMgLT0gY29weV9mcm9tX3VzZXIoJmJ1ZiwgcCwgYnl0ZXMpOwotCQlpZiAoIWJ5dGVzKSB7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJYnJlYWs7Ci0JCX0KLQkJYyAtPSBieXRlczsKLQkJcCArPSBieXRlczsKLQotCQlhZGRfZW50cm9weV93b3JkcygmaW5wdXRfcG9vbCwgYnVmLCAoYnl0ZXMgKyAzKSAvIDQpOwotCX0KLQlpZiAocCA9PSBidWZmZXIpIHsKLQkJcmV0dXJuIChzc2l6ZV90KXJldDsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQkgICAgICAgIGlub2RlLT5pX210aW1lID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JCXJldHVybiAoc3NpemVfdCkocCAtIGJ1ZmZlcik7Ci0JfQorCWlub2RlLT5pX210aW1lID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlyZXR1cm4gKHNzaXplX3QpY291bnQ7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEwODcsOCArMTA5Niw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGdldF91c2VyKHNpemUsIHArKykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dmFsID0gcmFuZG9tX3dyaXRlKGZpbGUsIChjb25zdCBjaGFyIF9fdXNlciAqKSBwLAotCQkJCSAgICAgIHNpemUsICZmaWxlLT5mX3Bvcyk7CisJCXJldHZhbCA9IHdyaXRlX3Bvb2woJmlucHV0X3Bvb2wsIChjb25zdCBjaGFyIF9fdXNlciAqKXAsCisJCQkJICAgIHNpemUpOwogCQlpZiAocmV0dmFsIDwgMCkKIAkJCXJldHVybiByZXR2YWw7CiAJCWNyZWRpdF9lbnRyb3B5X3N0b3JlKCZpbnB1dF9wb29sLCBlbnRfY291bnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKaW5kZXggMjQ1ZjAzMS4uOGNjNjBiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCkBAIC00MDIsNyArNDAyLDcgQEAKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNPTlRST0wgaW5mb3JtYXRpb246IEhvc3QgbnVtYmVyICVaZCwgbmFtZSBgYCVzJydcbiIsIEhvc3RQIC0gcC0+UklPSG9zdHMsIEhvc3RQLT5OYW1lKTsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNPTlRST0wgaW5mb3JtYXRpb246IFJ1cCBudW1iZXIgIDB4JXhcbiIsIHJ1cCk7CiAKLQkJaWYgKFJ1cCA+PSAodW5zaWduZWQgc2hvcnQpIE1BWF9SVVApIHsKKwkJaWYgKFJ1cCA8ICh1bnNpZ25lZCBzaG9ydCkgTUFYX1JVUCkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNPTlRST0wgaW5mb3JtYXRpb246IFRoaXMgaXMgdGhlIFJVUCBmb3IgUlRBIGBgJXMnJ1xuIiwgSG9zdFAtPk1hcHBpbmdbUnVwXS5OYW1lKTsKIAkJfSBlbHNlCiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiQ09OVFJPTCBpbmZvcm1hdGlvbjogVGhpcyBpcyB0aGUgUlVQIGZvciBsaW5rIGBgJWMnJyBvZiBob3N0IGBgJXMnJ1xuIiwgKCdBJyArIFJ1cCAtIE1BWF9SVVApLCBIb3N0UC0+TmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlzY29tOC5jIGIvZHJpdmVycy9jaGFyL3Jpc2NvbTguYwppbmRleCA3MDE0NTI1Li4zNDk0ZTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlzY29tOC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaXNjb204LmMKQEAgLTk4MCw3ICs5ODAsNyBAQAogCQl9CiAJCXNjaGVkdWxlKCk7CiAJfQotCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmcG9ydC0+b3Blbl93YWl0LCAmd2FpdCk7CiAJaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKQogCQlwb3J0LT5jb3VudCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JvY2tldC5jIGIvZHJpdmVycy9jaGFyL3JvY2tldC5jCmluZGV4IDc2MzU3YzguLmEzZmQ3ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yb2NrZXQuYworKysgYi9kcml2ZXJzL2NoYXIvcm9ja2V0LmMKQEAgLTY1LDEwICs2NSw2IEBACiAKIC8qKioqKiogS2VybmVsIGluY2x1ZGVzICoqKioqKi8KIAotI2lmZGVmIE1PRFZFUlNJT05TCi0jaW5jbHVkZSA8Y29uZmlnL21vZHZlcnNpb25zLmg+Ci0jZW5kaWYJCQkJCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CkBAIC04NSw2ICs4MSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgpAQCAtOTMsNyArOTAsNiBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKIC8qKioqKiogUm9ja2V0UG9ydCBpbmNsdWRlcyAqKioqKiovCkBAIC03MDIsNyArNjk4LDcgQEAKIAkJfQogCX0KIAlzcGluX2xvY2tfaW5pdCgmaW5mby0+c2xvY2spOwotCXNlbWFfaW5pdCgmaW5mby0+d3JpdGVfc2VtLCAxKTsKKwltdXRleF9pbml0KCZpbmZvLT53cml0ZV9tdHgpOwogCXJwX3RhYmxlW2xpbmVdID0gaW5mbzsKIAlpZiAocGNpX2RldikKIAkJdHR5X3JlZ2lzdGVyX2RldmljZShyb2NrZXRfZHJpdmVyLCBsaW5lLCAmcGNpX2Rldi0+ZGV2KTsKQEAgLTk0Nyw3ICs5NDMsNyBAQAogI2VuZGlmCiAJCXNjaGVkdWxlKCk7CS8qICBEb24ndCBob2xkIHNwaW5sb2NrIGhlcmUsIHdpbGwgaGFuZyBQQyAqLwogCX0KLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CkBAIC0xMDE4LDkgKzEwMTQsNiBAQAogCS8qCiAJICogSW5mby0+Y291bnQgaXMgbm93IDE7IHNvIGl0J3Mgc2FmZSB0byBzbGVlcCBub3cuCiAJICovCi0JaW5mby0+c2Vzc2lvbiA9IHByb2Nlc3Nfc2Vzc2lvbihjdXJyZW50KTsKLQlpbmZvLT5wZ3JwID0gcHJvY2Vzc19ncm91cChjdXJyZW50KTsKLQogCWlmICgoaW5mby0+ZmxhZ3MgJiBST0NLRVRfSU5JVElBTElaRUQpID09IDApIHsKIAkJY3AgPSAmaW5mby0+Y2hhbm5lbDsKIAkJc1NldFJ4VHJpZ2dlcihjcCwgVFJJR18xKTsKQEAgLTE2MDIsNyArMTU5NSw3IEBACiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwogCX0KLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAjaWZkZWYgUk9DS0VUX0RFQlVHX1dBSVRfVU5USUxfU0VOVAogCXByaW50ayhLRVJOX0lORk8gInR4Y250ID0gJWQgKGppZmY9JWx1KS4uLmRvbmVcbiIsIHR4Y250LCBqaWZmaWVzKTsKICNlbmRpZgpAQCAtMTY2MSw4ICsxNjU0LDExIEBACiAJaWYgKHJvY2tldF9wYXJhbm9pYV9jaGVjayhpbmZvLCAicnBfcHV0X2NoYXIiKSkKIAkJcmV0dXJuOwogCi0JLyogIEdyYWIgdGhlIHBvcnQgd3JpdGUgc2VtYXBob3JlLCBsb2NraW5nIG91dCBvdGhlciBwcm9jZXNzZXMgdGhhdCB0cnkgdG8gd3JpdGUgdG8gdGhpcyBwb3J0ICovCi0JZG93bigmaW5mby0+d3JpdGVfc2VtKTsKKwkvKgorCSAqIEdyYWIgdGhlIHBvcnQgd3JpdGUgbXV0ZXgsIGxvY2tpbmcgb3V0IG90aGVyIHByb2Nlc3NlcyB0aGF0IHRyeSB0bworCSAqIHdyaXRlIHRvIHRoaXMgcG9ydAorCSAqLworCW11dGV4X2xvY2soJmluZm8tPndyaXRlX210eCk7CiAKICNpZmRlZiBST0NLRVRfREVCVUdfV1JJVEUKIAlwcmludGsoS0VSTl9JTkZPICJycF9wdXRfY2hhciAlYy4uLiIsIGNoKTsKQEAgLTE2ODQsMTIgKzE2ODAsMTIgQEAKIAkJaW5mby0+eG1pdF9maWZvX3Jvb20tLTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKLQl1cCgmaW5mby0+d3JpdGVfc2VtKTsKKwltdXRleF91bmxvY2soJmluZm8tPndyaXRlX210eCk7CiB9CiAKIC8qCiAgKiAgRXhjZXB0aW9uIGhhbmRsZXIgLSB3cml0ZSByb3V0aW5lLCBjYWxsZWQgd2hlbiB1c2VyIGFwcCB3cml0ZXMgdG8gdGhlIGRldmljZS4KLSAqICBBIHBlciBwb3J0IHdyaXRlIHNlbWFwaG9yZSBpcyB1c2VkIHRvIHByb3RlY3QgZnJvbSBhbm90aGVyIHByb2Nlc3Mgd3JpdGluZyB0bworICogIEEgcGVyIHBvcnQgd3JpdGUgbXV0ZXggaXMgdXNlZCB0byBwcm90ZWN0IGZyb20gYW5vdGhlciBwcm9jZXNzIHdyaXRpbmcgdG8KICAqICB0aGlzIHBvcnQgYXQgdGhlIHNhbWUgdGltZS4gIFRoaXMgb3RoZXIgcHJvY2VzcyBjb3VsZCBiZSBydW5uaW5nIG9uIHRoZSBvdGhlciBDUFUKICAqICBvciBnZXQgY29udHJvbCBvZiB0aGUgQ1BVIGlmIHRoZSBjb3B5X2Zyb21fdXNlcigpIGJsb2NrcyBkdWUgdG8gYSBwYWdlIGZhdWx0IChzd2FwcGVkIG91dCkuIAogICogIFNwaW5sb2NrcyBwcm90ZWN0IHRoZSBpbmZvIHhtaXQgbWVtYmVycy4KQEAgLTE3MDYsNyArMTcwMiw3IEBACiAJaWYgKGNvdW50IDw9IDAgfHwgcm9ja2V0X3BhcmFub2lhX2NoZWNrKGluZm8sICJycF93cml0ZSIpKQogCQlyZXR1cm4gMDsKIAotCWRvd25faW50ZXJydXB0aWJsZSgmaW5mby0+d3JpdGVfc2VtKTsKKwltdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmluZm8tPndyaXRlX210eCk7CiAKICNpZmRlZiBST0NLRVRfREVCVUdfV1JJVEUKIAlwcmludGsoS0VSTl9JTkZPICJycF93cml0ZSAlZCBjaGFycy4uLiIsIGNvdW50KTsKQEAgLTE3NzcsNyArMTc3Myw3IEBACiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5wb2xsX3dhaXQpOwogI2VuZGlmCiAJfQotCXVwKCZpbmZvLT53cml0ZV9zZW0pOworCW11dGV4X3VubG9jaygmaW5mby0+d3JpdGVfbXR4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xODUyLDYgKzE4NDgsMTIgQEAKIAogI2lmZGVmIENPTkZJR19QQ0kKIAorc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgcm9ja2V0X3BjaV9pZHNbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SUCwgUENJX0FOWV9JRCkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcm9ja2V0X3BjaV9pZHMpOworCiAvKgogICogIENhbGxlZCB3aGVuIGEgUENJIGNhcmQgaXMgZm91bmQuICBSZXRyaWV2ZXMgYW5kIHN0b3JlcyBtb2RlbCBpbmZvcm1hdGlvbiwKICAqICBpbml0J3MgYWlvcGljIGFuZCBzZXJpYWwgcG9ydCBoYXJkd2FyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yb2NrZXRfaW50LmggYi9kcml2ZXJzL2NoYXIvcm9ja2V0X2ludC5oCmluZGV4IDNhOGJjYzguLmI0YzUzZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yb2NrZXRfaW50LmgKKysrIGIvZHJpdmVycy9jaGFyL3JvY2tldF9pbnQuaApAQCAtMTUsNiArMTUsOCBAQAogI2RlZmluZSBST0NLRVRfVFlQRV9NT0RFTUlJSQkzCiAjZGVmaW5lIFJPQ0tFVF9UWVBFX1BDMTA0ICAgICAgIDQKIAorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKQEAgLTExNTYsOCArMTE1OCw2IEBACiAJaW50IHhtaXRfaGVhZDsKIAlpbnQgeG1pdF90YWlsOwogCWludCB4bWl0X2NudDsKLQlpbnQgc2Vzc2lvbjsKLQlpbnQgcGdycDsKIAlpbnQgY2Rfc3RhdHVzOwogCWludCBpZ25vcmVfc3RhdHVzX21hc2s7CiAJaW50IHJlYWRfc3RhdHVzX21hc2s7CkBAIC0xMTcxLDcgKzExNzEsNyBAQAogCXN0cnVjdCB3YWl0X3F1ZXVlICpjbG9zZV93YWl0OwogI2VuZGlmCiAJc3BpbmxvY2tfdCBzbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHdyaXRlX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggd3JpdGVfbXR4OwogfTsKIAogI2RlZmluZSBSUE9SVF9NQUdJQyAweDUyNTAwMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3J0Yy5jIGIvZHJpdmVycy9jaGFyL3J0Yy5jCmluZGV4IGM3ZGFjOWIuLjIwMzgwYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvcnRjLmMKQEAgLTM4OCw3ICszODgsNyBAQAogCWlmICghcmV0dmFsKQogCQlyZXR2YWwgPSBjb3VudDsKICBvdXQ6Ci0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZydGNfd2FpdCwgJndhaXQpOwogCiAJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zZWxlY3Rpb24uYyBiL2RyaXZlcnMvY2hhci9zZWxlY3Rpb24uYwppbmRleCA3NGNmZjgzLi5hNjlmMDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc2VsZWN0aW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3NlbGVjdGlvbi5jCkBAIC0yOTksNyArMjk5LDcgQEAKIAkJcGFzdGVkICs9IGNvdW50OwogCX0KIAlyZW1vdmVfd2FpdF9xdWV1ZSgmdmMtPnBhc3RlX3dhaXQsICZ3YWl0KTsKLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKIAl0dHlfbGRpc2NfZGVyZWYobGQpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jIGIvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCmluZGV4IDVmZDMxNGEuLmM1ODViNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYworKysgYi9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKQEAgLTE4OTIsNyArMTg5Miw3IEBACiAjZW5kaWYKIAkJICAgIHNjaGVkdWxlKCk7CiAJfQotCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7CiAJaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKSB7CiAJCWluZm8tPmNvdW50Kys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc25zY19ldmVudC5jIGIvZHJpdmVycy9jaGFyL3Nuc2NfZXZlbnQuYwppbmRleCAyZjU2ZThjLi4xYjc1YjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc25zY19ldmVudC5jCisrKyBiL2RyaXZlcnMvY2hhci9zbnNjX2V2ZW50LmMKQEAgLTIwMyw4ICsyMDMsNiBAQAogCWNsYXNzID0gKGNvZGUgJiBFVl9DTEFTU19NQVNLKTsKIAogCWlmIChjbGFzcyA9PSBFVl9DTEFTU19QV1JEX05PVElGWSB8fCBjb2RlID09IEVOVl9QV1JETl9QRU5EKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQogCQlpZiAoc25zY19zaHV0dGluZ19kb3duKQogCQkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCmluZGV4IGNlNGRiNmYuLmYwMmEwNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCkBAIC00MDEwLDggKzQwMTAsMTMgQEAKIAlmb3IgKCBpPTA7IGk8aW5mby0+bnVtX3R4X2hvbGRpbmdfYnVmZmVyczsgKytpKSB7CiAJCWluZm8tPnR4X2hvbGRpbmdfYnVmZmVyc1tpXS5idWZmZXIgPQogCQkJa21hbGxvYyhpbmZvLT5tYXhfZnJhbWVfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICggaW5mby0+dHhfaG9sZGluZ19idWZmZXJzW2ldLmJ1ZmZlciA9PSBOVUxMICkKKwkJaWYgKGluZm8tPnR4X2hvbGRpbmdfYnVmZmVyc1tpXS5idWZmZXIgPT0gTlVMTCkgeworCQkJZm9yICgtLWk7IGkgPj0gMDsgaS0tKSB7CisJCQkJa2ZyZWUoaW5mby0+dHhfaG9sZGluZ19idWZmZXJzW2ldLmJ1ZmZlcik7CisJCQkJaW5mby0+dHhfaG9sZGluZ19idWZmZXJzW2ldLmJ1ZmZlciA9IE5VTEw7CisJCQl9CiAJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwppbmRleCAwYTM2N2NkLi4wMmI0OWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwpAQCAtMTE3MSw2ICsxMTcxLDExMiBAQAogfQogCiAvKgorICogc3VwcG9ydCBmb3IgMzIgYml0IGlvY3RsIGNhbGxzIG9uIDY0IGJpdCBzeXN0ZW1zCisgKi8KKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgbG9uZyBnZXRfcGFyYW1zMzIoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbywgc3RydWN0IE1HU0xfUEFSQU1TMzIgX191c2VyICp1c2VyX3BhcmFtcykKK3sKKwlzdHJ1Y3QgTUdTTF9QQVJBTVMzMiB0bXBfcGFyYW1zOworCisJREJHSU5GTygoIiVzIGdldF9wYXJhbXMzMlxuIiwgaW5mby0+ZGV2aWNlX25hbWUpKTsKKwl0bXBfcGFyYW1zLm1vZGUgICAgICAgICAgICA9IChjb21wYXRfdWxvbmdfdClpbmZvLT5wYXJhbXMubW9kZTsKKwl0bXBfcGFyYW1zLmxvb3BiYWNrICAgICAgICA9IGluZm8tPnBhcmFtcy5sb29wYmFjazsKKwl0bXBfcGFyYW1zLmZsYWdzICAgICAgICAgICA9IGluZm8tPnBhcmFtcy5mbGFnczsKKwl0bXBfcGFyYW1zLmVuY29kaW5nICAgICAgICA9IGluZm8tPnBhcmFtcy5lbmNvZGluZzsKKwl0bXBfcGFyYW1zLmNsb2NrX3NwZWVkICAgICA9IChjb21wYXRfdWxvbmdfdClpbmZvLT5wYXJhbXMuY2xvY2tfc3BlZWQ7CisJdG1wX3BhcmFtcy5hZGRyX2ZpbHRlciAgICAgPSBpbmZvLT5wYXJhbXMuYWRkcl9maWx0ZXI7CisJdG1wX3BhcmFtcy5jcmNfdHlwZSAgICAgICAgPSBpbmZvLT5wYXJhbXMuY3JjX3R5cGU7CisJdG1wX3BhcmFtcy5wcmVhbWJsZV9sZW5ndGggPSBpbmZvLT5wYXJhbXMucHJlYW1ibGVfbGVuZ3RoOworCXRtcF9wYXJhbXMucHJlYW1ibGUgICAgICAgID0gaW5mby0+cGFyYW1zLnByZWFtYmxlOworCXRtcF9wYXJhbXMuZGF0YV9yYXRlICAgICAgID0gKGNvbXBhdF91bG9uZ190KWluZm8tPnBhcmFtcy5kYXRhX3JhdGU7CisJdG1wX3BhcmFtcy5kYXRhX2JpdHMgICAgICAgPSBpbmZvLT5wYXJhbXMuZGF0YV9iaXRzOworCXRtcF9wYXJhbXMuc3RvcF9iaXRzICAgICAgID0gaW5mby0+cGFyYW1zLnN0b3BfYml0czsKKwl0bXBfcGFyYW1zLnBhcml0eSAgICAgICAgICA9IGluZm8tPnBhcmFtcy5wYXJpdHk7CisJaWYgKGNvcHlfdG9fdXNlcih1c2VyX3BhcmFtcywgJnRtcF9wYXJhbXMsIHNpemVvZihzdHJ1Y3QgTUdTTF9QQVJBTVMzMikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgc2V0X3BhcmFtczMyKHN0cnVjdCBzbGd0X2luZm8gKmluZm8sIHN0cnVjdCBNR1NMX1BBUkFNUzMyIF9fdXNlciAqbmV3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgTUdTTF9QQVJBTVMzMiB0bXBfcGFyYW1zOworCisJREJHSU5GTygoIiVzIHNldF9wYXJhbXMzMlxuIiwgaW5mby0+ZGV2aWNlX25hbWUpKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoJnRtcF9wYXJhbXMsIG5ld19wYXJhbXMsIHNpemVvZihzdHJ1Y3QgTUdTTF9QQVJBTVMzMikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJaW5mby0+cGFyYW1zLm1vZGUgICAgICAgICAgICA9IHRtcF9wYXJhbXMubW9kZTsKKwlpbmZvLT5wYXJhbXMubG9vcGJhY2sgICAgICAgID0gdG1wX3BhcmFtcy5sb29wYmFjazsKKwlpbmZvLT5wYXJhbXMuZmxhZ3MgICAgICAgICAgID0gdG1wX3BhcmFtcy5mbGFnczsKKwlpbmZvLT5wYXJhbXMuZW5jb2RpbmcgICAgICAgID0gdG1wX3BhcmFtcy5lbmNvZGluZzsKKwlpbmZvLT5wYXJhbXMuY2xvY2tfc3BlZWQgICAgID0gdG1wX3BhcmFtcy5jbG9ja19zcGVlZDsKKwlpbmZvLT5wYXJhbXMuYWRkcl9maWx0ZXIgICAgID0gdG1wX3BhcmFtcy5hZGRyX2ZpbHRlcjsKKwlpbmZvLT5wYXJhbXMuY3JjX3R5cGUgICAgICAgID0gdG1wX3BhcmFtcy5jcmNfdHlwZTsKKwlpbmZvLT5wYXJhbXMucHJlYW1ibGVfbGVuZ3RoID0gdG1wX3BhcmFtcy5wcmVhbWJsZV9sZW5ndGg7CisJaW5mby0+cGFyYW1zLnByZWFtYmxlICAgICAgICA9IHRtcF9wYXJhbXMucHJlYW1ibGU7CisJaW5mby0+cGFyYW1zLmRhdGFfcmF0ZSAgICAgICA9IHRtcF9wYXJhbXMuZGF0YV9yYXRlOworCWluZm8tPnBhcmFtcy5kYXRhX2JpdHMgICAgICAgPSB0bXBfcGFyYW1zLmRhdGFfYml0czsKKwlpbmZvLT5wYXJhbXMuc3RvcF9iaXRzICAgICAgID0gdG1wX3BhcmFtcy5zdG9wX2JpdHM7CisJaW5mby0+cGFyYW1zLnBhcml0eSAgICAgICAgICA9IHRtcF9wYXJhbXMucGFyaXR5OworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKworIAljaGFuZ2VfcGFyYW1zKGluZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIHNsZ3RfY29tcGF0X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzbGd0X2luZm8gKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCWludCByYyA9IC1FTk9JT0NUTENNRDsKKworCWlmIChzYW5pdHlfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY29tcGF0X2lvY3RsIikpCisJCXJldHVybiAtRU5PREVWOworCURCR0lORk8oKCIlcyBjb21wYXRfaW9jdGwoKSBjbWQ9JTA4WFxuIiwgaW5mby0+ZGV2aWNlX25hbWUsIGNtZCkpOworCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgTUdTTF9JT0NTUEFSQU1TMzI6CisJCXJjID0gc2V0X3BhcmFtczMyKGluZm8sIGNvbXBhdF9wdHIoYXJnKSk7CisJCWJyZWFrOworCisJY2FzZSBNR1NMX0lPQ0dQQVJBTVMzMjoKKwkJcmMgPSBnZXRfcGFyYW1zMzIoaW5mbywgY29tcGF0X3B0cihhcmcpKTsKKwkJYnJlYWs7CisKKwljYXNlIE1HU0xfSU9DR1BBUkFNUzoKKwljYXNlIE1HU0xfSU9DU1BBUkFNUzoKKwljYXNlIE1HU0xfSU9DR1RYSURMRToKKwljYXNlIE1HU0xfSU9DR1NUQVRTOgorCWNhc2UgTUdTTF9JT0NXQUlURVZFTlQ6CisJY2FzZSBNR1NMX0lPQ0dJRjoKKwljYXNlIE1HU0xfSU9DU0dQSU86CisJY2FzZSBNR1NMX0lPQ0dHUElPOgorCWNhc2UgTUdTTF9JT0NXQUlUR1BJTzoKKwljYXNlIFRJT0NHSUNPVU5UOgorCQlyYyA9IGlvY3RsKHR0eSwgZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykoY29tcGF0X3B0cihhcmcpKSk7CisJCWJyZWFrOworCisJY2FzZSBNR1NMX0lPQ1NUWElETEU6CisJY2FzZSBNR1NMX0lPQ1RYRU5BQkxFOgorCWNhc2UgTUdTTF9JT0NSWEVOQUJMRToKKwljYXNlIE1HU0xfSU9DVFhBQk9SVDoKKwljYXNlIFRJT0NNSVdBSVQ6CisJY2FzZSBNR1NMX0lPQ1NJRjoKKwkJcmMgPSBpb2N0bCh0dHksIGZpbGUsIGNtZCwgYXJnKTsKKwkJYnJlYWs7CisJfQorCisJREJHSU5GTygoIiVzIGNvbXBhdF9pb2N0bCgpIGNtZD0lMDhYIHJjPSVkXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSwgY21kLCByYykpOworCXJldHVybiByYzsKK30KKyNlbHNlCisjZGVmaW5lIHNsZ3RfY29tcGF0X2lvY3RsIE5VTEwKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfQ09NUEFUICovCisKKy8qCiAgKiBwcm9jIGZzIHN1cHBvcnQKICAqLwogc3RhdGljIGlubGluZSBpbnQgbGluZV9pbmZvKGNoYXIgKmJ1Ziwgc3RydWN0IHNsZ3RfaW5mbyAqaW5mbykKQEAgLTM0MTUsNiArMzUyMSw5IEBACiAJCQl9CiAJCX0KIAl9CisKKwlmb3IgKGk9MDsgaSA8IHBvcnRfY291bnQ7ICsraSkKKwkJdHR5X3JlZ2lzdGVyX2RldmljZShzZXJpYWxfZHJpdmVyLCBwb3J0X2FycmF5W2ldLT5saW5lLCAmKHBvcnRfYXJyYXlbaV0tPnBkZXYtPmRldikpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LApAQCAtMzQ0Myw2ICszNTUyLDcgQEAKIAkuY2hhcnNfaW5fYnVmZmVyID0gY2hhcnNfaW5fYnVmZmVyLAogCS5mbHVzaF9idWZmZXIgPSBmbHVzaF9idWZmZXIsCiAJLmlvY3RsID0gaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9IHNsZ3RfY29tcGF0X2lvY3RsLAogCS50aHJvdHRsZSA9IHRocm90dGxlLAogCS51bnRocm90dGxlID0gdW50aHJvdHRsZSwKIAkuc2VuZF94Y2hhciA9IHNlbmRfeGNoYXIsCkBAIC0zNDY2LDYgKzM1NzYsOCBAQAogCXByaW50aygidW5sb2FkICVzICVzXG4iLCBkcml2ZXJfbmFtZSwgZHJpdmVyX3ZlcnNpb24pOwogCiAJaWYgKHNlcmlhbF9kcml2ZXIpIHsKKwkJZm9yIChpbmZvPXNsZ3RfZGV2aWNlX2xpc3QgOyBpbmZvICE9IE5VTEwgOyBpbmZvPWluZm8tPm5leHRfZGV2aWNlKQorCQkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKHNlcmlhbF9kcml2ZXIsIGluZm8tPmxpbmUpOwogCQlpZiAoKHJjID0gdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHNlcmlhbF9kcml2ZXIpKSkKIAkJCURCR0VSUigoInR0eV91bnJlZ2lzdGVyX2RyaXZlciBlcnJvcj0lZFxuIiwgcmMpKTsKIAkJcHV0X3R0eV9kcml2ZXIoc2VyaWFsX2RyaXZlcik7CkBAIC0zNTA2LDIzICszNjE4LDEwIEBACiAKICAJcHJpbnRrKCIlcyAlc1xuIiwgZHJpdmVyX25hbWUsIGRyaXZlcl92ZXJzaW9uKTsKIAotCXNsZ3RfZGV2aWNlX2NvdW50ID0gMDsKLQlpZiAoKHJjID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGNpX2RyaXZlcikpIDwgMCkgewotCQlwcmludGsoIiVzIHBjaV9yZWdpc3Rlcl9kcml2ZXIgZXJyb3I9JWRcbiIsIGRyaXZlcl9uYW1lLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0JcGNpX3JlZ2lzdGVyZWQgPSAxOwotCi0JaWYgKCFzbGd0X2RldmljZV9saXN0KSB7Ci0JCXByaW50aygiJXMgbm8gZGV2aWNlcyBmb3VuZFxuIixkcml2ZXJfbmFtZSk7Ci0JCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGNpX2RyaXZlcik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCXNlcmlhbF9kcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKE1BWF9ERVZJQ0VTKTsKIAlpZiAoIXNlcmlhbF9kcml2ZXIpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOworCQlwcmludGsoIiVzIGNhbid0IGFsbG9jYXRlIHR0eSBkcml2ZXJcbiIsIGRyaXZlcl9uYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgdHR5X2RyaXZlciBzdHJ1Y3R1cmUgKi8KQEAgLTM1MzksNyArMzYzOCw3IEBACiAJCUI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKIAlzZXJpYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwOwogCXNlcmlhbF9kcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7Ci0Jc2VyaWFsX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOworCXNlcmlhbF9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfRFlOQU1JQ19ERVY7CiAJdHR5X3NldF9vcGVyYXRpb25zKHNlcmlhbF9kcml2ZXIsICZvcHMpOwogCWlmICgocmMgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKHNlcmlhbF9kcml2ZXIpKSA8IDApIHsKIAkJREJHRVJSKCgiJXMgY2FuJ3QgcmVnaXN0ZXIgc2VyaWFsIGRyaXZlclxuIiwgZHJpdmVyX25hbWUpKTsKQEAgLTM1NTIsNiArMzY1MSwxNiBAQAogCQlkcml2ZXJfbmFtZSwgZHJpdmVyX3ZlcnNpb24sCiAJCXNlcmlhbF9kcml2ZXItPm1ham9yKTsKIAorCXNsZ3RfZGV2aWNlX2NvdW50ID0gMDsKKwlpZiAoKHJjID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGNpX2RyaXZlcikpIDwgMCkgeworCQlwcmludGsoIiVzIHBjaV9yZWdpc3Rlcl9kcml2ZXIgZXJyb3I9JWRcbiIsIGRyaXZlcl9uYW1lLCByYyk7CisJCWdvdG8gZXJyb3I7CisJfQorCXBjaV9yZWdpc3RlcmVkID0gMTsKKworCWlmICghc2xndF9kZXZpY2VfbGlzdCkKKwkJcHJpbnRrKCIlcyBubyBkZXZpY2VzIGZvdW5kXG4iLGRyaXZlcl9uYW1lKTsKKwogCXJldHVybiAwOwogCiBlcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeXNycS5jIGIvZHJpdmVycy9jaGFyL3N5c3JxLmMKaW5kZXggMWQ4YzRhZTYuLjM5Y2MzMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rYmRfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdGlwYXIuYyBiL2RyaXZlcnMvY2hhci90aXBhci5jCmluZGV4IDQ3ZmIyMGYuLjM1YjQwYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90aXBhci5jCisrKyBiL2RyaXZlcnMvY2hhci90aXBhci5jCkBAIC00NDIsNyArNDQyLDcgQEAKIAl9CiAKIAljbGFzc19kZXZpY2VfY3JlYXRlKHRpcGFyX2NsYXNzLCBOVUxMLCBNS0RFVihUSVBBUl9NQUpPUiwKLQkJCVRJUEFSX01JTk9SICsgbnIpLCBOVUxMLCAicGFyJWQiLCBucik7CisJCQlUSVBBUl9NSU5PUiArIG5yKSwgcG9ydC0+ZGV2LCAicGFyJWQiLCBucik7CiAKIAkvKiBEaXNwbGF5IGluZm9ybWF0aW9ucyAqLwogCXByX2luZm8oInRpcGFyJWQ6IHVzaW5nICVzICglcylcbiIsIG5yLCBwb3J0LT5uYW1lLCAocG9ydC0+aXJxID09CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvdHBtL0tjb25maWcKaW5kZXggZmUwMGM3ZC4uZGM0ZTFmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci90cG0vS2NvbmZpZwpAQCAtMyw2ICszLDcgQEAKICMKIAogbWVudSAiVFBNIGRldmljZXMiCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0KIAogY29uZmlnIFRDR19UUE0KIAl0cmlzdGF0ZSAiVFBNIEhhcmR3YXJlIFN1cHBvcnQiCkBAIC0zMyw3ICszNCw3IEBACiAJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgVFBNIEludGVyZmFjZSIKIAlkZXBlbmRzIG9uIFRDR19UUE0gJiYgUE5QQUNQSQogCS0tLWhlbHAtLS0KLQkgIElmIHlvdSBoYXZlIGEgVFBNIHNlY3VyaXR5IGNoaXAgZnJvbSBOYXRpb25hbCBTZW1pY29uZHV0b3IgCisJICBJZiB5b3UgaGF2ZSBhIFRQTSBzZWN1cml0eSBjaGlwIGZyb20gTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciAKIAkgIHNheSBZZXMgYW5kIGl0IHdpbGwgYmUgYWNjZXNzaWJsZSBmcm9tIHdpdGhpbiBMaW51eC4gIFRvIAogCSAgY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTsgdGhlIG1vZHVsZSAKIAkgIHdpbGwgYmUgY2FsbGVkIHRwbV9uc2MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwppbmRleCBlNWEyNTRhLi45YmI1NDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKQEAgLTI0LDcgKzI0LDkgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKwogI2luY2x1ZGUgInRwbS5oIgogCiBlbnVtIHRwbV9jb25zdCB7CkBAIC0zMjgsMTAgKzMzMCwxMCBAQAogewogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdHBtX2NoaXAsIHdvcmspOwogCi0JZG93bigmY2hpcC0+YnVmZmVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5idWZmZXJfbXV0ZXgpOwogCWF0b21pY19zZXQoJmNoaXAtPmRhdGFfcGVuZGluZywgMCk7CiAJbWVtc2V0KGNoaXAtPmRhdGFfYnVmZmVyLCAwLCBUUE1fQlVGU0laRSk7Ci0JdXAoJmNoaXAtPmJ1ZmZlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5idWZmZXJfbXV0ZXgpOwogfQogCiAvKgpAQCAtMzgwLDcgKzM4Miw3IEBACiAJCXJldHVybiAtRTJCSUc7CiAJfQogCi0JZG93bigmY2hpcC0+dHBtX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT50cG1fbXV0ZXgpOwogCiAJaWYgKChyYyA9IGNoaXAtPnZlbmRvci5zZW5kKGNoaXAsICh1OCAqKSBidWYsIGNvdW50KSkgPCAwKSB7CiAJCWRldl9lcnIoY2hpcC0+ZGV2LApAQCAtNDE5LDcgKzQyMSw3IEBACiAJCWRldl9lcnIoY2hpcC0+ZGV2LAogCQkJInRwbV90cmFuc21pdDogdHBtX3JlY3Y6IGVycm9yICV6ZFxuIiwgcmMpOwogb3V0OgotCXVwKCZjaGlwLT50cG1fbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+dHBtX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTk0MiwxMiArOTQ0LDEyIEBACiB7CiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAlzcGluX2xvY2soJmRyaXZlcl9sb2NrKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWNoaXAtPm51bV9vcGVucy0tOwogCWRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmMoJmNoaXAtPnVzZXJfcmVhZF90aW1lcik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAlhdG9taWNfc2V0KCZjaGlwLT5kYXRhX3BlbmRpbmcsIDApOworCWNoaXAtPm51bV9vcGVucy0tOwogCXB1dF9kZXZpY2UoY2hpcC0+ZGV2KTsKIAlrZnJlZShjaGlwLT5kYXRhX2J1ZmZlcik7CiAJc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKQEAgLTk2NiwxNCArOTY4LDE0IEBACiAJd2hpbGUgKGF0b21pY19yZWFkKCZjaGlwLT5kYXRhX3BlbmRpbmcpICE9IDApCiAJCW1zbGVlcChUUE1fVElNRU9VVCk7CiAKLQlkb3duKCZjaGlwLT5idWZmZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPmJ1ZmZlcl9tdXRleCk7CiAKIAlpZiAoaW5fc2l6ZSA+IFRQTV9CVUZTSVpFKQogCQlpbl9zaXplID0gVFBNX0JVRlNJWkU7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIKIAkgICAgKGNoaXAtPmRhdGFfYnVmZmVyLCAodm9pZCBfX3VzZXIgKikgYnVmLCBpbl9zaXplKSkgewotCQl1cCgmY2hpcC0+YnVmZmVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5idWZmZXJfbXV0ZXgpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKQEAgLTk4MSw3ICs5ODMsNyBAQAogCW91dF9zaXplID0gdHBtX3RyYW5zbWl0KGNoaXAsIGNoaXAtPmRhdGFfYnVmZmVyLCBUUE1fQlVGU0laRSk7CiAKIAlhdG9taWNfc2V0KCZjaGlwLT5kYXRhX3BlbmRpbmcsIG91dF9zaXplKTsKLQl1cCgmY2hpcC0+YnVmZmVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPmJ1ZmZlcl9tdXRleCk7CiAKIAkvKiBTZXQgYSB0aW1lb3V0IGJ5IHdoaWNoIHRoZSByZWFkZXIgbXVzdCBjb21lIGNsYWltIHRoZSByZXN1bHQgKi8KIAltb2RfdGltZXIoJmNoaXAtPnVzZXJfcmVhZF90aW1lciwgamlmZmllcyArICg2MCAqIEhaKSk7CkBAIC0xMDA0LDEwICsxMDA2LDEwIEBACiAJCWlmIChzaXplIDwgcmV0X3NpemUpCiAJCQlyZXRfc2l6ZSA9IHNpemU7CiAKLQkJZG93bigmY2hpcC0+YnVmZmVyX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmY2hpcC0+YnVmZmVyX211dGV4KTsKIAkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGNoaXAtPmRhdGFfYnVmZmVyLCByZXRfc2l6ZSkpCiAJCQlyZXRfc2l6ZSA9IC1FRkFVTFQ7Ci0JCXVwKCZjaGlwLT5idWZmZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNoaXAtPmJ1ZmZlcl9tdXRleCk7CiAJfQogCiAJcmV0dXJuIHJldF9zaXplOwpAQCAtMTA5NywxMSArMTA5OSwxNiBAQAogCiAJLyogRHJpdmVyIHNwZWNpZmljIHBlci1kZXZpY2UgZGF0YSAqLwogCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWRldm5hbWUgPSBrbWFsbG9jKERFVk5BTUVfU0laRSwgR0ZQX0tFUk5FTCk7CiAKLQlpbml0X01VVEVYKCZjaGlwLT5idWZmZXJfbXV0ZXgpOwotCWluaXRfTVVURVgoJmNoaXAtPnRwbV9tdXRleCk7CisJaWYgKGNoaXAgPT0gTlVMTCB8fCBkZXZuYW1lID09IE5VTEwpIHsKKwkJa2ZyZWUoY2hpcCk7CisJCWtmcmVlKGRldm5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltdXRleF9pbml0KCZjaGlwLT5idWZmZXJfbXV0ZXgpOworCW11dGV4X2luaXQoJmNoaXAtPnRwbV9tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNoaXAtPmxpc3QpOwogCiAJSU5JVF9XT1JLKCZjaGlwLT53b3JrLCB0aW1lb3V0X3dvcmspOwpAQCAtMTEyNCw3ICsxMTMxLDYgQEAKIAogCXNldF9iaXQoY2hpcC0+ZGV2X251bSwgZGV2X21hc2spOwogCi0JZGV2bmFtZSA9IGttYWxsb2MoREVWTkFNRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlzY25wcmludGYoZGV2bmFtZSwgREVWTkFNRV9TSVpFLCAiJXMlZCIsICJ0cG0iLCBjaGlwLT5kZXZfbnVtKTsKIAljaGlwLT52ZW5kb3IubWlzY2Rldi5uYW1lID0gZGV2bmFtZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaCBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKaW5kZXggOWYyNzNmMC4uYjJlMmIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaAorKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC05NCwxMSArOTUsMTEgQEAKIAkvKiBEYXRhIHBhc3NlZCB0byBhbmQgZnJvbSB0aGUgdHBtIHZpYSB0aGUgcmVhZC93cml0ZSBjYWxscyAqLwogCXU4ICpkYXRhX2J1ZmZlcjsKIAlhdG9taWNfdCBkYXRhX3BlbmRpbmc7Ci0Jc3RydWN0IHNlbWFwaG9yZSBidWZmZXJfbXV0ZXg7CisJc3RydWN0IG11dGV4IGJ1ZmZlcl9tdXRleDsKIAogCXN0cnVjdCB0aW1lcl9saXN0IHVzZXJfcmVhZF90aW1lcjsJLyogdXNlciBuZWVkcyB0byBjbGFpbSByZXN1bHQgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHRwbV9tdXRleDsJLyogdHBtIGlzIHByb2Nlc3NpbmcgKi8KKwlzdHJ1Y3QgbXV0ZXggdHBtX211dGV4OwkvKiB0cG0gaXMgcHJvY2Vzc2luZyAqLwogCiAJc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgdmVuZG9yOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5oIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuaAppbmRleCAzYzg1MjAwLi45MzYzYmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5oCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmgKQEAgLTIzLDYgKzIzLDkgQEAKICAqLwogCiAjaWZkZWYgQ09ORklHX1BQQzY0CisKKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorCiAjZGVmaW5lIGF0bWVsX2dldGIoY2hpcCwgb2Zmc2V0KSByZWFkYihjaGlwLT52ZW5kb3ItPmlvYmFzZSArIG9mZnNldCk7CiAjZGVmaW5lIGF0bWVsX3B1dGIodmFsLCBjaGlwLCBvZmZzZXQpIHdyaXRlYih2YWwsIGNoaXAtPnZlbmRvci0+aW9iYXNlICsgb2Zmc2V0KQogI2RlZmluZSBhdG1lbF9yZXF1ZXN0X3JlZ2lvbiByZXF1ZXN0X21lbV9yZWdpb24KQEAgLTQ3LDEyICs1MCwxMiBAQAogCWlmICghZG4pCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKCFkZXZpY2VfaXNfY29tcGF0aWJsZShkbiwgIkFUOTdTQzMyMDEiKSkgeworCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZG4sICJBVDk3U0MzMjAxIikpIHsKIAkJb2Zfbm9kZV9wdXQoZG4pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlyZWcgPSBnZXRfcHJvcGVydHkoZG4sICJyZWciLCAmcmVnbGVuKTsKKwlyZWcgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJyZWciLCAmcmVnbGVuKTsKIAluYWRkcmMgPSBvZl9uX2FkZHJfY2VsbHMoZG4pOwogCW5zaXplYyA9IG9mX25fc2l6ZV9jZWxscyhkbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2luZmluZW9uLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pbmZpbmVvbi5jCmluZGV4IDEzNTNiNWEuLjk2NzAwMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2luZmluZW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1faW5maW5lb24uYwpAQCAtMzAsMTIgKzMwLDYwIEBACiAjZGVmaW5lCVRQTV9NQVhfVFJJRVMJCTUwMDAKICNkZWZpbmUJVFBNX0lORklORU9OX0RFVl9WRU5fVkFMVUUJMHgxNUQxCiAKLS8qIFRoZXNlIHZhbHVlcyB3aWxsIGJlIGZpbGxlZCBhZnRlciBQblAtY2FsbCAqLwotc3RhdGljIGludCBUUE1fSU5GX0RBVEE7Ci1zdGF0aWMgaW50IFRQTV9JTkZfQUREUjsKLXN0YXRpYyBpbnQgVFBNX0lORl9CQVNFOwotc3RhdGljIGludCBUUE1fSU5GX0FERFJfTEVOOwotc3RhdGljIGludCBUUE1fSU5GX1BPUlRfTEVOOworI2RlZmluZSBUUE1fSU5GX0lPX1BPUlQJCTB4MAorI2RlZmluZSBUUE1fSU5GX0lPX01FTQkJMHgxCisKKyNkZWZpbmUgVFBNX0lORl9BRERSCQkweDAKKyNkZWZpbmUgVFBNX0lORl9EQVRBCQkweDEKKworc3RydWN0IHRwbV9pbmZfZGV2IHsKKwlpbnQgaW90eXBlOworCisJdm9pZCBfX2lvbWVtICptZW1fYmFzZTsJCS8qIE1NSU8gaW9yZW1hcCdkIGFkZHIgKi8KKwl1bnNpZ25lZCBsb25nIG1hcF9iYXNlOwkJLyogcGh5cyBNTUlPIGJhc2UgKi8KKwl1bnNpZ25lZCBsb25nIG1hcF9zaXplOwkJLyogTU1JTyByZWdpb24gc2l6ZSAqLworCXVuc2lnbmVkIGludCBpbmRleF9vZmY7CQkvKiBpbmRleCByZWdpc3RlciBvZmZzZXQgKi8KKworCXVuc2lnbmVkIGludCBkYXRhX3JlZ3M7CQkvKiBEYXRhIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGludCBkYXRhX3NpemU7CisKKwl1bnNpZ25lZCBpbnQgY29uZmlnX3BvcnQ7CS8qIElPIFBvcnQgY29uZmlnIGluZGV4IHJlZyAqLworCXVuc2lnbmVkIGludCBjb25maWdfc2l6ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHBtX2luZl9kZXYgdHBtX2RldjsKKworc3RhdGljIGlubGluZSB2b2lkIHRwbV9kYXRhX291dCh1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGNoYXIgb2Zmc2V0KQoreworCWlmICh0cG1fZGV2LmlvdHlwZSA9PSBUUE1fSU5GX0lPX1BPUlQpCisJCW91dGIoZGF0YSwgdHBtX2Rldi5kYXRhX3JlZ3MgKyBvZmZzZXQpOworCWVsc2UKKwkJd3JpdGViKGRhdGEsIHRwbV9kZXYubWVtX2Jhc2UgKyB0cG1fZGV2LmRhdGFfcmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciB0cG1fZGF0YV9pbih1bnNpZ25lZCBjaGFyIG9mZnNldCkKK3sKKwlpZiAodHBtX2Rldi5pb3R5cGUgPT0gVFBNX0lORl9JT19QT1JUKQorCQlyZXR1cm4gaW5iKHRwbV9kZXYuZGF0YV9yZWdzICsgb2Zmc2V0KTsKKwllbHNlCisJCXJldHVybiByZWFkYih0cG1fZGV2Lm1lbV9iYXNlICsgdHBtX2Rldi5kYXRhX3JlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHBtX2NvbmZpZ19vdXQodW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBjaGFyIG9mZnNldCkKK3sKKwlpZiAodHBtX2Rldi5pb3R5cGUgPT0gVFBNX0lORl9JT19QT1JUKQorCQlvdXRiKGRhdGEsIHRwbV9kZXYuY29uZmlnX3BvcnQgKyBvZmZzZXQpOworCWVsc2UKKwkJd3JpdGViKGRhdGEsIHRwbV9kZXYubWVtX2Jhc2UgKyB0cG1fZGV2LmluZGV4X29mZiArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciB0cG1fY29uZmlnX2luKHVuc2lnbmVkIGNoYXIgb2Zmc2V0KQoreworCWlmICh0cG1fZGV2LmlvdHlwZSA9PSBUUE1fSU5GX0lPX1BPUlQpCisJCXJldHVybiBpbmIodHBtX2Rldi5jb25maWdfcG9ydCArIG9mZnNldCk7CisJZWxzZQorCQlyZXR1cm4gcmVhZGIodHBtX2Rldi5tZW1fYmFzZSArIHRwbV9kZXYuaW5kZXhfb2ZmICsgb2Zmc2V0KTsKK30KIAogLyogVFBNIGhlYWRlciBkZWZpbml0aW9ucyAqLwogZW51bSBpbmZpbmVvbl90cG1faGVhZGVyIHsKQEAgLTEwNSw3ICsxNTMsNyBAQAogCiAJaWYgKGNsZWFyX3dyZmlmbykgewogCQlmb3IgKGkgPSAwOyBpIDwgNDA5NjsgaSsrKSB7Ci0JCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBXUkZJRk8pOworCQkJc3RhdHVzID0gdHBtX2RhdGFfaW4oV1JGSUZPKTsKIAkJCWlmIChzdGF0dXMgPT0gMHhmZikgewogCQkJCWlmIChjaGVjayA9PSA1KQogCQkJCQlicmVhazsKQEAgLTEyNSw4ICsxNzMsOCBAQAogCSAqLwogCWkgPSAwOwogCWRvIHsKLQkJc3RhdHVzID0gaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgUkRGSUZPKTsKLQkJc3RhdHVzID0gaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgU1RBVCk7CisJCXN0YXR1cyA9IHRwbV9kYXRhX2luKFJERklGTyk7CisJCXN0YXR1cyA9IHRwbV9kYXRhX2luKFNUQVQpOwogCQlpKys7CiAJCWlmIChpID09IFRQTV9NQVhfVFJJRVMpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTEzOSw3ICsxODcsNyBAQAogCWludCBzdGF0dXM7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IFRQTV9NQVhfVFJJRVM7IGkrKykgewotCQlzdGF0dXMgPSBpbmIoY2hpcC0+dmVuZG9yLmJhc2UgKyBTVEFUKTsKKwkJc3RhdHVzID0gdHBtX2RhdGFfaW4oU1RBVCk7CiAJCS8qIGNoZWNrIHRoZSBzdGF0dXMtcmVnaXN0ZXIgaWYgd2FpdF9mb3JfYml0IGlzIHNldCAqLwogCQlpZiAoc3RhdHVzICYgMSA8PCB3YWl0X2Zvcl9iaXQpCiAJCQlicmVhazsKQEAgLTE1OCw3ICsyMDYsNyBAQAogc3RhdGljIHZvaWQgd2FpdF9hbmRfc2VuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IHNlbmRieXRlKQogewogCXdhaXQoY2hpcCwgU1RBVF9YRkUpOwotCW91dGIoc2VuZGJ5dGUsIGNoaXAtPnZlbmRvci5iYXNlICsgV1JGSUZPKTsKKwl0cG1fZGF0YV9vdXQoc2VuZGJ5dGUsIFdSRklGTyk7CiB9CiAKICAgICAvKiBOb3RlOiBXVFggbWVhbnMgV2FpdGluZy1UaW1lLUV4dGVuc2lvbi4gV2hlbmV2ZXIgdGhlIFRQTSBuZWVkcyBtb3JlCkBAIC0yMDUsNyArMjUzLDcgQEAKIAkJcmV0ID0gd2FpdChjaGlwLCBTVEFUX1JEQSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gLUVJTzsKLQkJYnVmW2ldID0gaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgUkRGSUZPKTsKKwkJYnVmW2ldID0gdHBtX2RhdGFfaW4oUkRGSUZPKTsKIAl9CiAKIAlpZiAoYnVmWzBdICE9IFRQTV9WTF9WRVIpIHsKQEAgLTIyMCw3ICsyNjgsNyBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJCXdhaXQoY2hpcCwgU1RBVF9SREEpOwotCQkJYnVmW2ldID0gaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgUkRGSUZPKTsKKwkJCWJ1ZltpXSA9IHRwbV9kYXRhX2luKFJERklGTyk7CiAJCX0KIAogCQlpZiAoKHNpemUgPT0gMHg2RDAwKSAmJiAoYnVmWzFdID09IDB4ODApKSB7CkBAIC0yNjksNyArMzE3LDcgQEAKIAl1OCBjb3VudF9oaWdoLCBjb3VudF9sb3csIGNvdW50XzQsIGNvdW50XzMsIGNvdW50XzIsIGNvdW50XzE7CiAKIAkvKiBEaXNhYmxpbmcgUmVzZXQsIExQIGFuZCBJUlFDICovCi0Jb3V0YihSRVNFVF9MUF9JUlFDX0RJU0FCTEUsIGNoaXAtPnZlbmRvci5iYXNlICsgQ01EKTsKKwl0cG1fZGF0YV9vdXQoUkVTRVRfTFBfSVJRQ19ESVNBQkxFLCBDTUQpOwogCiAJcmV0ID0gZW1wdHlfZmlmbyhjaGlwLCAxKTsKIAlpZiAocmV0KSB7CkBAIC0zMjAsNyArMzY4LDcgQEAKIAogc3RhdGljIHU4IHRwbV9pbmZfc3RhdHVzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQlyZXR1cm4gaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgU1RBVCk7CisJcmV0dXJuIHRwbV9kYXRhX2luKFNUQVQpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIocHViZWssIFNfSVJVR08sIHRwbV9zaG93X3B1YmVrLCBOVUxMKTsKQEAgLTM4MSw1MSArNDI5LDg4IEBACiAJLyogcmVhZCBJTy1wb3J0cyB0aHJvdWdoIFBuUCAqLwogCWlmIChwbnBfcG9ydF92YWxpZChkZXYsIDApICYmIHBucF9wb3J0X3ZhbGlkKGRldiwgMSkgJiYKIAkgICAgIShwbnBfcG9ydF9mbGFncyhkZXYsIDApICYgSU9SRVNPVVJDRV9ESVNBQkxFRCkpIHsKLQkJVFBNX0lORl9BRERSID0gcG5wX3BvcnRfc3RhcnQoZGV2LCAwKTsKLQkJVFBNX0lORl9BRERSX0xFTiA9IHBucF9wb3J0X2xlbihkZXYsIDApOwotCQlUUE1fSU5GX0RBVEEgPSAoVFBNX0lORl9BRERSICsgMSk7Ci0JCVRQTV9JTkZfQkFTRSA9IHBucF9wb3J0X3N0YXJ0KGRldiwgMSk7Ci0JCVRQTV9JTkZfUE9SVF9MRU4gPSBwbnBfcG9ydF9sZW4oZGV2LCAxKTsKLQkJaWYgKChUUE1fSU5GX1BPUlRfTEVOIDwgNCkgfHwgKFRQTV9JTkZfQUREUl9MRU4gPCAyKSkgeworCisJICAgIAl0cG1fZGV2LmlvdHlwZSA9IFRQTV9JTkZfSU9fUE9SVDsKKworCQl0cG1fZGV2LmNvbmZpZ19wb3J0ID0gcG5wX3BvcnRfc3RhcnQoZGV2LCAwKTsKKwkJdHBtX2Rldi5jb25maWdfc2l6ZSA9IHBucF9wb3J0X2xlbihkZXYsIDApOworCQl0cG1fZGV2LmRhdGFfcmVncyA9IHBucF9wb3J0X3N0YXJ0KGRldiwgMSk7CisJCXRwbV9kZXYuZGF0YV9zaXplID0gcG5wX3BvcnRfbGVuKGRldiwgMSk7CisJCWlmICgodHBtX2Rldi5kYXRhX3NpemUgPCA0KSB8fCAodHBtX2Rldi5jb25maWdfc2l6ZSA8IDIpKSB7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycl9sYXN0OwogCQl9CiAJCWRldl9pbmZvKCZkZXYtPmRldiwgIkZvdW5kICVzIHdpdGggSUQgJXNcbiIsCiAJCQkgZGV2LT5uYW1lLCBkZXZfaWQtPmlkKTsKLQkJaWYgKCEoKFRQTV9JTkZfQkFTRSA+PiA4KSAmIDB4ZmYpKSB7CisJCWlmICghKCh0cG1fZGV2LmRhdGFfcmVncyA+PiA4KSAmIDB4ZmYpKSB7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycl9sYXN0OwogCQl9CiAJCS8qIHB1Ymxpc2ggbXkgYmFzZSBhZGRyZXNzIGFuZCByZXF1ZXN0IHJlZ2lvbiAqLwotCQlpZiAocmVxdWVzdF9yZWdpb24KLQkJICAgIChUUE1fSU5GX0JBU0UsIFRQTV9JTkZfUE9SVF9MRU4sICJ0cG1faW5maW5lb24wIikgPT0gTlVMTCkgeworCQlpZiAocmVxdWVzdF9yZWdpb24odHBtX2Rldi5kYXRhX3JlZ3MsIHRwbV9kZXYuZGF0YV9zaXplLAorCQkJCSAgICJ0cG1faW5maW5lb24wIikgPT0gTlVMTCkgewogCQkJcmMgPSAtRUlOVkFMOwogCQkJZ290byBlcnJfbGFzdDsKIAkJfQotCQlpZiAocmVxdWVzdF9yZWdpb24KLQkJICAgIChUUE1fSU5GX0FERFIsIFRQTV9JTkZfQUREUl9MRU4sICJ0cG1faW5maW5lb24wIikgPT0gTlVMTCkgeworCQlpZiAocmVxdWVzdF9yZWdpb24odHBtX2Rldi5jb25maWdfcG9ydCwgdHBtX2Rldi5jb25maWdfc2l6ZSwKKwkJCQkgICAidHBtX2luZmluZW9uMCIpID09IE5VTEwpIHsKKwkJCXJlbGVhc2VfcmVnaW9uKHRwbV9kZXYuZGF0YV9yZWdzLCB0cG1fZGV2LmRhdGFfc2l6ZSk7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycl9sYXN0OwogCQl9CisJfSBlbHNlIGlmIChwbnBfbWVtX3ZhbGlkKGRldiwgMCkgJiYKKwkgICAgICAgICAgICEocG5wX21lbV9mbGFncyhkZXYsIDApICYgSU9SRVNPVVJDRV9ESVNBQkxFRCkpIHsKKworCSAgICAJdHBtX2Rldi5pb3R5cGUgPSBUUE1fSU5GX0lPX01FTTsKKworCQl0cG1fZGV2Lm1hcF9iYXNlID0gcG5wX21lbV9zdGFydChkZXYsIDApOworCQl0cG1fZGV2Lm1hcF9zaXplID0gcG5wX21lbV9sZW4oZGV2LCAwKTsKKworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJGb3VuZCAlcyB3aXRoIElEICVzXG4iLAorCQkJIGRldi0+bmFtZSwgZGV2X2lkLT5pZCk7CisKKwkJLyogcHVibGlzaCBteSBiYXNlIGFkZHJlc3MgYW5kIHJlcXVlc3QgcmVnaW9uICovCisJCWlmIChyZXF1ZXN0X21lbV9yZWdpb24odHBtX2Rldi5tYXBfYmFzZSwgdHBtX2Rldi5tYXBfc2l6ZSwKKwkJCQkgICAgICAgInRwbV9pbmZpbmVvbjAiKSA9PSBOVUxMKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIGVycl9sYXN0OworCQl9CisKKwkJdHBtX2Rldi5tZW1fYmFzZSA9IGlvcmVtYXAodHBtX2Rldi5tYXBfYmFzZSwgdHBtX2Rldi5tYXBfc2l6ZSk7CisJCWlmICh0cG1fZGV2Lm1lbV9iYXNlID09IE5VTEwpIHsKKwkJCXJlbGVhc2VfbWVtX3JlZ2lvbih0cG1fZGV2Lm1hcF9iYXNlLCB0cG1fZGV2Lm1hcF9zaXplKTsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyX2xhc3Q7CisJCX0KKworCQkvKgorCQkgKiBUaGUgb25seSBrbm93biBNTUlPIGJhc2VkIEluZmluZW9uIFRQTSBzeXN0ZW0gcHJvdmlkZXMKKwkJICogYSBzaW5nbGUgbGFyZ2UgbWVtIHJlZ2lvbiB3aXRoIHRoZSBkZXZpY2UgY29uZmlnCisJCSAqIHJlZ2lzdGVycyBhdCB0aGUgZGVmYXVsdCBUUE1fQUREUi4gIFRoZSBkYXRhIHJlZ2lzdGVycworCQkgKiBzZWVtIGxpa2UgdGhleSBjb3VsZCBiZSBwbGFjZWQgYW55d2hlcmUgd2l0aGluIHRoZSBNTUlPCisJCSAqIHJlZ2lvbiwgYnV0IGxldHMganVzdCBwdXQgdGhlbSBhdCB6ZXJvIG9mZnNldC4KKwkJICovCisJCXRwbV9kZXYuaW5kZXhfb2ZmID0gVFBNX0FERFI7CisJCXRwbV9kZXYuZGF0YV9yZWdzID0gMHgwOwogCX0gZWxzZSB7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBlcnJfbGFzdDsKIAl9CiAKIAkvKiBxdWVyeSBjaGlwIGZvciBpdHMgdmVuZG9yLCBpdHMgdmVyc2lvbiBudW1iZXIgYS5zLm8uICovCi0Jb3V0YihFTkFCTEVfUkVHSVNURVJfUEFJUiwgVFBNX0lORl9BRERSKTsKLQlvdXRiKElEVkVOTCwgVFBNX0lORl9BRERSKTsKLQl2ZW5kb3JpZFsxXSA9IGluYihUUE1fSU5GX0RBVEEpOwotCW91dGIoSURWRU5ILCBUUE1fSU5GX0FERFIpOwotCXZlbmRvcmlkWzBdID0gaW5iKFRQTV9JTkZfREFUQSk7Ci0Jb3V0YihJRFBETCwgVFBNX0lORl9BRERSKTsKLQlwcm9kdWN0aWRbMV0gPSBpbmIoVFBNX0lORl9EQVRBKTsKLQlvdXRiKElEUERILCBUUE1fSU5GX0FERFIpOwotCXByb2R1Y3RpZFswXSA9IGluYihUUE1fSU5GX0RBVEEpOwotCW91dGIoQ0hJUF9JRDEsIFRQTV9JTkZfQUREUik7Ci0JdmVyc2lvblsxXSA9IGluYihUUE1fSU5GX0RBVEEpOwotCW91dGIoQ0hJUF9JRDIsIFRQTV9JTkZfQUREUik7Ci0JdmVyc2lvblswXSA9IGluYihUUE1fSU5GX0RBVEEpOworCXRwbV9jb25maWdfb3V0KEVOQUJMRV9SRUdJU1RFUl9QQUlSLCBUUE1fSU5GX0FERFIpOworCXRwbV9jb25maWdfb3V0KElEVkVOTCwgVFBNX0lORl9BRERSKTsKKwl2ZW5kb3JpZFsxXSA9IHRwbV9jb25maWdfaW4oVFBNX0lORl9EQVRBKTsKKwl0cG1fY29uZmlnX291dChJRFZFTkgsIFRQTV9JTkZfQUREUik7CisJdmVuZG9yaWRbMF0gPSB0cG1fY29uZmlnX2luKFRQTV9JTkZfREFUQSk7CisJdHBtX2NvbmZpZ19vdXQoSURQREwsIFRQTV9JTkZfQUREUik7CisJcHJvZHVjdGlkWzFdID0gdHBtX2NvbmZpZ19pbihUUE1fSU5GX0RBVEEpOworCXRwbV9jb25maWdfb3V0KElEUERILCBUUE1fSU5GX0FERFIpOworCXByb2R1Y3RpZFswXSA9IHRwbV9jb25maWdfaW4oVFBNX0lORl9EQVRBKTsKKwl0cG1fY29uZmlnX291dChDSElQX0lEMSwgVFBNX0lORl9BRERSKTsKKwl2ZXJzaW9uWzFdID0gdHBtX2NvbmZpZ19pbihUUE1fSU5GX0RBVEEpOworCXRwbV9jb25maWdfb3V0KENISVBfSUQyLCBUUE1fSU5GX0FERFIpOworCXZlcnNpb25bMF0gPSB0cG1fY29uZmlnX2luKFRQTV9JTkZfREFUQSk7CiAKIAlzd2l0Y2ggKChwcm9kdWN0aWRbMF0gPDwgOCkgfCBwcm9kdWN0aWRbMV0pIHsKIAljYXNlIDY6CkBAIC00NDIsNTEgKzUyNyw1NCBAQAogCWlmICgodmVuZG9yaWRbMF0gPDwgOCB8IHZlbmRvcmlkWzFdKSA9PSAoVFBNX0lORklORU9OX0RFVl9WRU5fVkFMVUUpKSB7CiAKIAkJLyogY29uZmlndXJlIFRQTSB3aXRoIElPLXBvcnRzICovCi0JCW91dGIoSU9MSU1ILCBUUE1fSU5GX0FERFIpOwotCQlvdXRiKCgoVFBNX0lORl9CQVNFID4+IDgpICYgMHhmZiksIFRQTV9JTkZfREFUQSk7Ci0JCW91dGIoSU9MSU1MLCBUUE1fSU5GX0FERFIpOwotCQlvdXRiKChUUE1fSU5GX0JBU0UgJiAweGZmKSwgVFBNX0lORl9EQVRBKTsKKwkJdHBtX2NvbmZpZ19vdXQoSU9MSU1ILCBUUE1fSU5GX0FERFIpOworCQl0cG1fY29uZmlnX291dCgodHBtX2Rldi5kYXRhX3JlZ3MgPj4gOCkgJiAweGZmLCBUUE1fSU5GX0RBVEEpOworCQl0cG1fY29uZmlnX291dChJT0xJTUwsIFRQTV9JTkZfQUREUik7CisJCXRwbV9jb25maWdfb3V0KCh0cG1fZGV2LmRhdGFfcmVncyAmIDB4ZmYpLCBUUE1fSU5GX0RBVEEpOwogCiAJCS8qIGNvbnRyb2wgaWYgSU8tcG9ydHMgYXJlIHNldCBjb3JyZWN0bHkgKi8KLQkJb3V0YihJT0xJTUgsIFRQTV9JTkZfQUREUik7Ci0JCWlvaCA9IGluYihUUE1fSU5GX0RBVEEpOwotCQlvdXRiKElPTElNTCwgVFBNX0lORl9BRERSKTsKLQkJaW9sID0gaW5iKFRQTV9JTkZfREFUQSk7CisJCXRwbV9jb25maWdfb3V0KElPTElNSCwgVFBNX0lORl9BRERSKTsKKwkJaW9oID0gdHBtX2NvbmZpZ19pbihUUE1fSU5GX0RBVEEpOworCQl0cG1fY29uZmlnX291dChJT0xJTUwsIFRQTV9JTkZfQUREUik7CisJCWlvbCA9IHRwbV9jb25maWdfaW4oVFBNX0lORl9EQVRBKTsKIAotCQlpZiAoKGlvaCA8PCA4IHwgaW9sKSAhPSBUUE1fSU5GX0JBU0UpIHsKKwkJaWYgKChpb2ggPDwgOCB8IGlvbCkgIT0gdHBtX2Rldi5kYXRhX3JlZ3MpIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LAotCQkJCSJDb3VsZCBub3Qgc2V0IElPLXBvcnRzIHRvIDB4JXhcbiIsCi0JCQkJVFBNX0lORl9CQVNFKTsKKwkJCQkiQ291bGQgbm90IHNldCBJTy1kYXRhIHJlZ2lzdGVycyB0byAweCV4XG4iLAorCQkJCXRwbV9kZXYuZGF0YV9yZWdzKTsKIAkJCXJjID0gLUVJTzsKIAkJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCQl9CiAKIAkJLyogYWN0aXZhdGUgcmVnaXN0ZXIgKi8KLQkJb3V0YihUUE1fREFSLCBUUE1fSU5GX0FERFIpOwotCQlvdXRiKDB4MDEsIFRQTV9JTkZfREFUQSk7Ci0JCW91dGIoRElTQUJMRV9SRUdJU1RFUl9QQUlSLCBUUE1fSU5GX0FERFIpOworCQl0cG1fY29uZmlnX291dChUUE1fREFSLCBUUE1fSU5GX0FERFIpOworCQl0cG1fY29uZmlnX291dCgweDAxLCBUUE1fSU5GX0RBVEEpOworCQl0cG1fY29uZmlnX291dChESVNBQkxFX1JFR0lTVEVSX1BBSVIsIFRQTV9JTkZfQUREUik7CiAKIAkJLyogZGlzYWJsZSBSRVNFVCwgTFAgYW5kIElSUUMgKi8KLQkJb3V0YihSRVNFVF9MUF9JUlFDX0RJU0FCTEUsIFRQTV9JTkZfQkFTRSArIENNRCk7CisJCXRwbV9kYXRhX291dChSRVNFVF9MUF9JUlFDX0RJU0FCTEUsIENNRCk7CiAKIAkJLyogRmluYWxseSwgd2UncmUgZG9uZSwgcHJpbnQgc29tZSBpbmZvcyAqLwogCQlkZXZfaW5mbygmZGV2LT5kZXYsICJUUE0gZm91bmQ6ICIKLQkJCSAiY29uZmlnIGJhc2UgMHgleCwgIgotCQkJICJpbyBiYXNlIDB4JXgsICIKKwkJCSAiY29uZmlnIGJhc2UgMHglbHgsICIKKwkJCSAiZGF0YSBiYXNlIDB4JWx4LCAiCiAJCQkgImNoaXAgdmVyc2lvbiAweCUwMnglMDJ4LCAiCiAJCQkgInZlbmRvciBpZCAweCV4JXggKEluZmluZW9uKSwgIgogCQkJICJwcm9kdWN0IGlkIDB4JTAyeCUwMngiCiAJCQkgIiVzXG4iLAotCQkJIFRQTV9JTkZfQUREUiwKLQkJCSBUUE1fSU5GX0JBU0UsCisJCQkgdHBtX2Rldi5pb3R5cGUgPT0gVFBNX0lORl9JT19QT1JUID8KKwkJCQl0cG1fZGV2LmNvbmZpZ19wb3J0IDoKKwkJCQl0cG1fZGV2Lm1hcF9iYXNlICsgdHBtX2Rldi5pbmRleF9vZmYsCisJCQkgdHBtX2Rldi5pb3R5cGUgPT0gVFBNX0lORl9JT19QT1JUID8KKwkJCQl0cG1fZGV2LmRhdGFfcmVncyA6CisJCQkJdHBtX2Rldi5tYXBfYmFzZSArIHRwbV9kZXYuZGF0YV9yZWdzLAogCQkJIHZlcnNpb25bMF0sIHZlcnNpb25bMV0sCiAJCQkgdmVuZG9yaWRbMF0sIHZlbmRvcmlkWzFdLAogCQkJIHByb2R1Y3RpZFswXSwgcHJvZHVjdGlkWzFdLCBjaGlwbmFtZSk7CiAKLQkJaWYgKCEoY2hpcCA9IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZSgmZGV2LT5kZXYsICZ0cG1faW5mKSkpIHsKKwkJaWYgKCEoY2hpcCA9IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZSgmZGV2LT5kZXYsICZ0cG1faW5mKSkpCiAJCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKLQkJfQotCQljaGlwLT52ZW5kb3IuYmFzZSA9IFRQTV9JTkZfQkFTRTsKKwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewogCQlyYyA9IC1FTk9ERVY7CkBAIC00OTQsOCArNTgyLDEzIEBACiAJfQogCiBlcnJfcmVsZWFzZV9yZWdpb246Ci0JcmVsZWFzZV9yZWdpb24oVFBNX0lORl9CQVNFLCBUUE1fSU5GX1BPUlRfTEVOKTsKLQlyZWxlYXNlX3JlZ2lvbihUUE1fSU5GX0FERFIsIFRQTV9JTkZfQUREUl9MRU4pOworCWlmICh0cG1fZGV2LmlvdHlwZSA9PSBUUE1fSU5GX0lPX1BPUlQpIHsKKwkJcmVsZWFzZV9yZWdpb24odHBtX2Rldi5kYXRhX3JlZ3MsIHRwbV9kZXYuZGF0YV9zaXplKTsKKwkJcmVsZWFzZV9yZWdpb24odHBtX2Rldi5jb25maWdfcG9ydCwgdHBtX2Rldi5jb25maWdfc2l6ZSk7CisJfSBlbHNlIHsKKwkJaW91bm1hcCh0cG1fZGV2Lm1lbV9iYXNlKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHRwbV9kZXYubWFwX2Jhc2UsIHRwbV9kZXYubWFwX3NpemUpOworCX0KIAogZXJyX2xhc3Q6CiAJcmV0dXJuIHJjOwpAQCAtNTA2LDggKzU5OSwxNCBAQAogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IHBucF9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGNoaXApIHsKLQkJcmVsZWFzZV9yZWdpb24oVFBNX0lORl9CQVNFLCBUUE1fSU5GX1BPUlRfTEVOKTsKLQkJcmVsZWFzZV9yZWdpb24oVFBNX0lORl9BRERSLCBUUE1fSU5GX0FERFJfTEVOKTsKKwkJaWYgKHRwbV9kZXYuaW90eXBlID09IFRQTV9JTkZfSU9fUE9SVCkgeworCQkJcmVsZWFzZV9yZWdpb24odHBtX2Rldi5kYXRhX3JlZ3MsIHRwbV9kZXYuZGF0YV9zaXplKTsKKwkJCXJlbGVhc2VfcmVnaW9uKHRwbV9kZXYuY29uZmlnX3BvcnQsCisJCQkJICAgICAgIHRwbV9kZXYuY29uZmlnX3NpemUpOworCQl9IGVsc2UgeworCQkJaW91bm1hcCh0cG1fZGV2Lm1lbV9iYXNlKTsKKwkJCXJlbGVhc2VfbWVtX3JlZ2lvbih0cG1fZGV2Lm1hcF9iYXNlLCB0cG1fZGV2Lm1hcF9zaXplKTsKKwkJfQogCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7CiAJfQogfQpAQCAtNTM5LDUgKzYzOCw1IEBACiAKIE1PRFVMRV9BVVRIT1IoIk1hcmNlbCBTZWxob3JzdCA8c2VsaG9yc3RAY3J5cHRvLnJ1Yi5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBJbmZpbmVvbiBUUE0gU0xEIDk2MzAgVFQgMS4xIC8gU0xCIDk2MzUgVFQgMS4yIik7Ci1NT0RVTEVfVkVSU0lPTigiMS44Iik7CitNT0RVTEVfVkVSU0lPTigiMS45Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggMzg5ZGEzNi4uMzc1MmVkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMTQxLDggKzE0MSw2IEBACiBzdGF0aWMgaW50IHB0bXhfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiAjZW5kaWYKIAotZXh0ZXJuIHZvaWQgZGlzYWJsZV9lYXJseV9wcmludGsodm9pZCk7Ci0KIHN0YXRpYyB2b2lkIGluaXRpYWxpemVfdHR5X3N0cnVjdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAogc3RhdGljIHNzaXplX3QgdHR5X3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CkBAIC0xNTMsMTAgKzE1MSwxNiBAQAogc3RhdGljIGludCB0dHlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiBpbnQgdHR5X2lvY3RsKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBsb25nIHR0eV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCXVuc2lnbmVkIGxvbmcgYXJnKTsKKyNlbHNlCisjZGVmaW5lIHR0eV9jb21wYXRfaW9jdGwgTlVMTAorI2VuZGlmCiBzdGF0aWMgaW50IHR0eV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsIGludCBvbik7CiBzdGF0aWMgdm9pZCByZWxlYXNlX3R0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgaWR4KTsKLXN0YXRpYyBzdHJ1Y3QgcGlkICpfX3Byb2Nfc2V0X3R0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKLQkJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIF9fcHJvY19zZXRfdHR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIHByb2Nfc2V0X3R0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKIC8qKgogICoJYWxsb2NfdHR5X3N0cnVjdAktCWFsbG9jYXRlIGEgdHR5IG9iamVjdApAQCAtMzY1LDYgKzM2OSwyOSBAQAogfQogCiAvKioKKyAqCXR0eV9idWZmZXJfZmx1c2gJCS0JZmx1c2ggZnVsbCB0dHkgYnVmZmVycworICoJQHR0eTogdHR5IHRvIGZsdXNoCisgKgorICoJZmx1c2ggYWxsIHRoZSBidWZmZXJzIGNvbnRhaW5pbmcgcmVjZWl2ZSBkYXRhCisgKgorICoJTG9ja2luZzogbm9uZQorICovCisKK3N0YXRpYyB2b2lkIHR0eV9idWZmZXJfZmx1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGhlYWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CisJd2hpbGUoKHRoZWFkID0gdHR5LT5idWYuaGVhZCkgIT0gTlVMTCkgeworCQl0dHktPmJ1Zi5oZWFkID0gdGhlYWQtPm5leHQ7CisJCXR0eV9idWZmZXJfZnJlZSh0dHksIHRoZWFkKTsKKwl9CisJdHR5LT5idWYudGFpbCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOworfQorCisvKioKICAqCXR0eV9idWZmZXJfZmluZAkJLQlmaW5kIGEgZnJlZSB0dHkgYnVmZmVyCiAgKglAdHR5OiB0dHkgb3duaW5nIHRoZSBidWZmZXIKICAqCUBzaXplOiBjaGFyYWN0ZXJzIHdhbnRlZApAQCAtOTM2LDEzICs5NjMsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCi0JICoJTm8gbW9yZSBpbnB1dCBwbGVhc2UsIHdlIGFyZSBzd2l0Y2hpbmcuIFRoZSBuZXcgbGRpc2MKLQkgKgl3aWxsIHVwZGF0ZSB0aGlzIHZhbHVlIGluIHRoZSBsZGlzYyBvcGVuIGZ1bmN0aW9uCi0JICovCi0KLQl0dHktPnJlY2VpdmVfcm9vbSA9IDA7Ci0KLQkvKgogCSAqCVByb2JsZW06IFdoYXQgZG8gd2UgZG8gaWYgdGhpcyBibG9ja3MgPwogCSAqLwogCkBAIC05NTMsNiArOTczLDEzIEBACiAJCXJldHVybiAwOwogCX0KIAorCS8qCisJICoJTm8gbW9yZSBpbnB1dCBwbGVhc2UsIHdlIGFyZSBzd2l0Y2hpbmcuIFRoZSBuZXcgbGRpc2MKKwkgKgl3aWxsIHVwZGF0ZSB0aGlzIHZhbHVlIGluIHRoZSBsZGlzYyBvcGVuIGZ1bmN0aW9uCisJICovCisKKwl0dHktPnJlY2VpdmVfcm9vbSA9IDA7CisKIAlvX2xkaXNjID0gdHR5LT5sZGlzYzsKIAlvX3R0eSA9IHR0eS0+bGluazsKIApAQCAtMTEyMSw3ICsxMTQ4LDggQEAKIAkJcmV0dXJuIDA7CiAJaWYgKGlzX2N1cnJlbnRfcGdycF9vcnBoYW5lZCgpKQogCQlyZXR1cm4gLUVJTzsKLQkodm9pZCkga2lsbF9wZ3JwKHRhc2tfcGdycChjdXJyZW50KSwgU0lHVFRPVSwgMSk7CisJa2lsbF9wZ3JwKHRhc2tfcGdycChjdXJyZW50KSwgU0lHVFRPVSwgMSk7CisJc2V0X3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKTsKIAlyZXR1cm4gLUVSRVNUQVJUU1lTOwogfQogCkBAIC0xMTQ1LDggKzExNzMsOCBAQAogCXJldHVybiBQT0xMSU4gfCBQT0xMT1VUIHwgUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUkROT1JNIHwgUE9MTFdSTk9STTsKIH0KIAotc3RhdGljIGludCBodW5nX3VwX3R0eV9pb2N0bChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlLAotCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGh1bmdfdXBfdHR5X2lvY3RsKHN0cnVjdCBmaWxlICogZmlsZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXJldHVybiBjbWQgPT0gVElPQ1NQR1JQID8gLUVOT1RUWSA6IC1FSU87CiB9CkBAIC0xMTU3LDYgKzExODUsNyBAQAogCS53cml0ZQkJPSB0dHlfd3JpdGUsCiAJLnBvbGwJCT0gdHR5X3BvbGwsCiAJLmlvY3RsCQk9IHR0eV9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0gdHR5X2NvbXBhdF9pb2N0bCwKIAkub3BlbgkJPSB0dHlfb3BlbiwKIAkucmVsZWFzZQk9IHR0eV9yZWxlYXNlLAogCS5mYXN5bmMJCT0gdHR5X2Zhc3luYywKQEAgLTExNjksNiArMTE5OCw3IEBACiAJLndyaXRlCQk9IHR0eV93cml0ZSwKIAkucG9sbAkJPSB0dHlfcG9sbCwKIAkuaW9jdGwJCT0gdHR5X2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSB0dHlfY29tcGF0X2lvY3RsLAogCS5vcGVuCQk9IHB0bXhfb3BlbiwKIAkucmVsZWFzZQk9IHR0eV9yZWxlYXNlLAogCS5mYXN5bmMJCT0gdHR5X2Zhc3luYywKQEAgLTExODEsNiArMTIxMSw3IEBACiAJLndyaXRlCQk9IHJlZGlyZWN0ZWRfdHR5X3dyaXRlLAogCS5wb2xsCQk9IHR0eV9wb2xsLAogCS5pb2N0bAkJPSB0dHlfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHR0eV9jb21wYXRfaW9jdGwsCiAJLm9wZW4JCT0gdHR5X29wZW4sCiAJLnJlbGVhc2UJPSB0dHlfcmVsZWFzZSwKIAkuZmFzeW5jCQk9IHR0eV9mYXN5bmMsCkBAIC0xMTkxLDcgKzEyMjIsOCBAQAogCS5yZWFkCQk9IGh1bmdfdXBfdHR5X3JlYWQsCiAJLndyaXRlCQk9IGh1bmdfdXBfdHR5X3dyaXRlLAogCS5wb2xsCQk9IGh1bmdfdXBfdHR5X3BvbGwsCi0JLmlvY3RsCQk9IGh1bmdfdXBfdHR5X2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGh1bmdfdXBfdHR5X2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSBodW5nX3VwX3R0eV9pb2N0bCwKIAkucmVsZWFzZQk9IHR0eV9yZWxlYXNlLAogfTsKIApAQCAtMTI0MCw2ICsxMjcyLDcgQEAKIAkJCWxkLT5mbHVzaF9idWZmZXIodHR5KTsKIAkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAl9CisJdHR5X2J1ZmZlcl9mbHVzaCh0dHkpOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTCh0dHlfbGRpc2NfZmx1c2gpOwpAQCAtMTUzNCwxMCArMTU2Nyw5IEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JdHR5X3BncnAgPSBjdXJyZW50LT5zaWduYWwtPnR0eV9vbGRfcGdycDsKKwlwdXRfcGlkKGN1cnJlbnQtPnNpZ25hbC0+dHR5X29sZF9wZ3JwKTsKIAljdXJyZW50LT5zaWduYWwtPnR0eV9vbGRfcGdycCA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlwdXRfcGlkKHR0eV9wZ3JwKTsKIAogCW11dGV4X2xvY2soJnR0eV9tdXRleCk7CiAJLyogSXQgaXMgcG9zc2libGUgdGhhdCBkb190dHlfaGFuZ3VwIGhhcyBmcmVlJ2QgdGhpcyB0dHkgKi8KQEAgLTE1NjIsMTMgKzE1OTQsMjUgQEAKIAl1bmxvY2tfa2VybmVsKCk7CiB9CiAKKy8qKgorICoKKyAqCW5vX3R0eQktIEVuc3VyZSB0aGUgY3VycmVudCBwcm9jZXNzIGRvZXMgbm90IGhhdmUgYSBjb250cm9sbGluZyB0dHkKKyAqLwordm9pZCBub190dHkodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJaWYgKHRzay0+c2lnbmFsLT5sZWFkZXIpCisJCWRpc2Fzc29jaWF0ZV9jdHR5KDApOworCXByb2NfY2xlYXJfdHR5KHRzayk7Cit9CisKIAogLyoqCi0gKglzdG9wX3R0eQktCXByb3BvZ2F0ZSBmbG93IGNvbnRyb2wKKyAqCXN0b3BfdHR5CS0JcHJvcGFnYXRlIGZsb3cgY29udHJvbAogICoJQHR0eTogdHR5IHRvIHN0b3AKICAqCiAgKglQZXJmb3JtIGZsb3cgY29udHJvbCB0byB0aGUgZHJpdmVyLiBGb3IgUFRZL1RUWSBwYWlycyB3ZQotICoJbXVzdCBhbHNvIHByb3BvZ2F0ZSB0aGUgVElPQ0tQS1Qgc3RhdHVzLiBNYXkgYmUgY2FsbGVkCisgKgltdXN0IGFsc28gcHJvcGFnYXRlIHRoZSBUSU9DS1BLVCBzdGF0dXMuIE1heSBiZSBjYWxsZWQKICAqCW9uIGFuIGFscmVhZHkgc3RvcHBlZCBkZXZpY2UgYW5kIHdpbGwgbm90IHJlLWNhbGwgdGhlIGRyaXZlcgogICoJbWV0aG9kLgogICoKQEAgLTE1OTgsMTEgKzE2NDIsMTEgQEAKIEVYUE9SVF9TWU1CT0woc3RvcF90dHkpOwogCiAvKioKLSAqCXN0YXJ0X3R0eQktCXByb3BvZ2F0ZSBmbG93IGNvbnRyb2wKKyAqCXN0YXJ0X3R0eQktCXByb3BhZ2F0ZSBmbG93IGNvbnRyb2wKICAqCUB0dHk6IHR0eSB0byBzdGFydAogICoKICAqCVN0YXJ0IGEgdHR5IHRoYXQgaGFzIGJlZW4gc3RvcHBlZCBpZiBhdCBhbGwgcG9zc2libGUuIFBlcmZvcm0KLSAqCWFueSBuZWNjZXNzYXJ5IHdha2V1cHMgYW5kIHByb3BvZ2F0ZSB0aGUgVElPQ1BLVCBzdGF0dXMuIElmIHRoaXMKKyAqCWFueSBuZWNjZXNzYXJ5IHdha2V1cHMgYW5kIHByb3BhZ2F0ZSB0aGUgVElPQ1BLVCBzdGF0dXMuIElmIHRoaXMKICAqCWlzIHRoZSB0dHkgd2FzIHByZXZpb3VzIHN0b3BwZWQgYW5kIGlzIGJlaW5nIHN0YXJ0ZWQgdGhlbiB0aGUKICAqCWRyaXZlciBzdGFydCBtZXRob2QgaXMgaW52b2tlZCBhbmQgdGhlIGxpbmUgZGlzY2lwbGluZSB3b2tlbi4KICAqCkBAIC0yNTA4LDcgKzI1NTIsNiBAQAogCWludCBpbmRleDsKIAlkZXZfdCBkZXZpY2UgPSBpbm9kZS0+aV9yZGV2OwogCXVuc2lnbmVkIHNob3J0IHNhdmVkX2ZsYWdzID0gZmlscC0+Zl9mbGFnczsKLQlzdHJ1Y3QgcGlkICpvbGRfcGdycDsKIAogCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbHApOwogCQpAQCAtMjYwMiwxNyArMjY0NSwxNSBAQAogCQlnb3RvIHJldHJ5X29wZW47CiAJfQogCi0Jb2xkX3BncnAgPSBOVUxMOwogCW11dGV4X2xvY2soJnR0eV9tdXRleCk7CiAJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJaWYgKCFub2N0dHkgJiYKIAkgICAgY3VycmVudC0+c2lnbmFsLT5sZWFkZXIgJiYKIAkgICAgIWN1cnJlbnQtPnNpZ25hbC0+dHR5ICYmCiAJICAgIHR0eS0+c2Vzc2lvbiA9PSBOVUxMKQotCQlvbGRfcGdycCA9IF9fcHJvY19zZXRfdHR5KGN1cnJlbnQsIHR0eSk7CisJCV9fcHJvY19zZXRfdHR5KGN1cnJlbnQsIHR0eSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAltdXRleF91bmxvY2soJnR0eV9tdXRleCk7Ci0JcHV0X3BpZChvbGRfcGdycCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyODcsOSArMzMyOCw3IEBACiAJCWNhc2UgVElPQ05PVFRZOgogCQkJaWYgKGN1cnJlbnQtPnNpZ25hbC0+dHR5ICE9IHR0eSkKIAkJCQlyZXR1cm4gLUVOT1RUWTsKLQkJCWlmIChjdXJyZW50LT5zaWduYWwtPmxlYWRlcikKLQkJCQlkaXNhc3NvY2lhdGVfY3R0eSgwKTsKLQkJCXByb2NfY2xlYXJfdHR5KGN1cnJlbnQpOworCQkJbm9fdHR5KCk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBUSU9DU0NUVFk6CiAJCQlyZXR1cm4gdGlvY3NjdHR5KHR0eSwgYXJnKTsKQEAgLTMzMzYsNiArMzM3NSwxNSBAQAogCQljYXNlIFRJT0NNQklDOgogCQljYXNlIFRJT0NNQklTOgogCQkJcmV0dXJuIHR0eV90aW9jbXNldCh0dHksIGZpbGUsIGNtZCwgcCk7CisJCWNhc2UgVENGTFNIOgorCQkJc3dpdGNoIChhcmcpIHsKKwkJCWNhc2UgVENJRkxVU0g6CisJCQljYXNlIFRDSU9GTFVTSDoKKwkJCQkvKiBmbHVzaCB0dHkgYnVmZmVyIGFuZCBhbGxvdyBsZGlzYyB0byBwcm9jZXNzIGlvY3RsICovCisJCQkJdHR5X2J1ZmZlcl9mbHVzaCh0dHkpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CiAJfQogCWlmICh0dHktPmRyaXZlci0+aW9jdGwpIHsKIAkJcmV0dmFsID0gKHR0eS0+ZHJpdmVyLT5pb2N0bCkodHR5LCBmaWxlLCBjbWQsIGFyZyk7CkBAIC0zMzUzLDYgKzM0MDEsMzIgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGxvbmcgdHR5X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CisJaW50IHJldHZhbCA9IC1FTk9JT0NUTENNRDsKKworCWlmICh0dHlfcGFyYW5vaWFfY2hlY2sodHR5LCBpbm9kZSwgInR0eV9pb2N0bCIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0dHktPmRyaXZlci0+Y29tcGF0X2lvY3RsKSB7CisJCXJldHZhbCA9ICh0dHktPmRyaXZlci0+Y29tcGF0X2lvY3RsKSh0dHksIGZpbGUsIGNtZCwgYXJnKTsKKwkJaWYgKHJldHZhbCAhPSAtRU5PSU9DVExDTUQpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7CisJaWYgKGxkLT5jb21wYXRfaW9jdGwpCisJCXJldHZhbCA9IGxkLT5jb21wYXRfaW9jdGwodHR5LCBmaWxlLCBjbWQsIGFyZyk7CisJdHR5X2xkaXNjX2RlcmVmKGxkKTsKKworCXJldHVybiByZXR2YWw7Cit9CisjZW5kaWYKIAogLyoKICAqIFRoaXMgaW1wbGVtZW50cyB0aGUgIlNlY3VyZSBBdHRlbnRpb24gS2V5IiAtLS0gIHRoZSBpZGVhIGlzIHRvCkBAIC0zNjg1LDYgKzM3NTksNyBAQAogCWRyaXZlci0+d3JpdGVfcm9vbSA9IG9wLT53cml0ZV9yb29tOwogCWRyaXZlci0+Y2hhcnNfaW5fYnVmZmVyID0gb3AtPmNoYXJzX2luX2J1ZmZlcjsKIAlkcml2ZXItPmlvY3RsID0gb3AtPmlvY3RsOworCWRyaXZlci0+Y29tcGF0X2lvY3RsID0gb3AtPmNvbXBhdF9pb2N0bDsKIAlkcml2ZXItPnNldF90ZXJtaW9zID0gb3AtPnNldF90ZXJtaW9zOwogCWRyaXZlci0+dGhyb3R0bGUgPSBvcC0+dGhyb3R0bGU7CiAJZHJpdmVyLT51bnRocm90dGxlID0gb3AtPnVudGhyb3R0bGU7CkBAIC0zNzY2LDcgKzM4NDEsOSBAQAogCWlmICghZHJpdmVyLT5wdXRfY2hhcikKIAkJZHJpdmVyLT5wdXRfY2hhciA9IHR0eV9kZWZhdWx0X3B1dF9jaGFyOwogCQorCW11dGV4X2xvY2soJnR0eV9tdXRleCk7CiAJbGlzdF9hZGQoJmRyaXZlci0+dHR5X2RyaXZlcnMsICZ0dHlfZHJpdmVycyk7CisJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogCQogCWlmICggIShkcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVikgKSB7CiAJCWZvcihpID0gMDsgaSA8IGRyaXZlci0+bnVtOyBpKyspCkBAIC0zNzkyLDggKzM4NjksOSBAQAogCiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKGRyaXZlci0+bWFqb3IsIGRyaXZlci0+bWlub3Jfc3RhcnQpLAogCQkJCWRyaXZlci0+bnVtKTsKLQorCW11dGV4X2xvY2soJnR0eV9tdXRleCk7CiAJbGlzdF9kZWwoJmRyaXZlci0+dHR5X2RyaXZlcnMpOworCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAogCS8qCiAJICogRnJlZSB0aGUgdGVybWlvcyBhbmQgdGVybWlvc19sb2NrZWQgc3RydWN0dXJlcyBiZWNhdXNlCkBAIC0zODM4LDkgKzM5MTYsOCBAQAogfQogRVhQT1JUX1NZTUJPTChwcm9jX2NsZWFyX3R0eSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGlkICpfX3Byb2Nfc2V0X3R0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3N0YXRpYyB2b2lkIF9fcHJvY19zZXRfdHR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBwaWQgKm9sZF9wZ3JwOwogCWlmICh0dHkpIHsKIAkJLyogV2Ugc2hvdWxkIG5vdCBoYXZlIGEgc2Vzc2lvbiBvciBwZ3JwIHRvIGhlcmUgYnV0Li4uLiAqLwogCQlwdXRfcGlkKHR0eS0+c2Vzc2lvbik7CkBAIC0zODQ4LDIxICszOTI1LDE2IEBACiAJCXR0eS0+c2Vzc2lvbiA9IGdldF9waWQodGFza19zZXNzaW9uKHRzaykpOwogCQl0dHktPnBncnAgPSBnZXRfcGlkKHRhc2tfcGdycCh0c2spKTsKIAl9Ci0Jb2xkX3BncnAgPSB0c2stPnNpZ25hbC0+dHR5X29sZF9wZ3JwOworCXB1dF9waWQodHNrLT5zaWduYWwtPnR0eV9vbGRfcGdycCk7CiAJdHNrLT5zaWduYWwtPnR0eSA9IHR0eTsKIAl0c2stPnNpZ25hbC0+dHR5X29sZF9wZ3JwID0gTlVMTDsKLQlyZXR1cm4gb2xkX3BncnA7CiB9CiAKLXZvaWQgcHJvY19zZXRfdHR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIHZvaWQgcHJvY19zZXRfdHR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBwaWQgKm9sZF9wZ3JwOwotCiAJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlvbGRfcGdycCA9IF9fcHJvY19zZXRfdHR5KHRzaywgdHR5KTsKKwlfX3Byb2Nfc2V0X3R0eSh0c2ssIHR0eSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JcHV0X3BpZChvbGRfcGdycCk7CiB9CiAKIHN0cnVjdCB0dHlfc3RydWN0ICpnZXRfY3VycmVudF90dHkodm9pZCkKQEAgLTM4OTcsOSArMzk2OSw2IEBACiAJICogc2V0IHVwIHRoZSBjb25zb2xlIGRldmljZSBzbyB0aGF0IGxhdGVyIGJvb3Qgc2VxdWVuY2VzIGNhbiAKIAkgKiBpbmZvcm0gYWJvdXQgcHJvYmxlbXMgZXRjLi4KIAkgKi8KLSNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLCi0JZGlzYWJsZV9lYXJseV9wcmludGsoKTsKLSNlbmRpZgogCWNhbGwgPSBfX2Nvbl9pbml0Y2FsbF9zdGFydDsKIAl3aGlsZSAoY2FsbCA8IF9fY29uX2luaXRjYWxsX2VuZCkgewogCQkoKmNhbGwpKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMgYi9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKaW5kZXggNzkxOTMwMy4uODNhZWVkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCisrKyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwpAQCAtMjgsMTIgKzI4LDEzIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvc2VsZWN0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2JkX2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KQEAgLTcwLDExICs3MSwxMSBAQAogewogCWludCBzaXplOwogCi0JZG93bigmY29uX2J1Zl9zZW0pOworCW11dGV4X2xvY2soJmNvbl9idWZfbXR4KTsKIAlzaXplID0gdmNzX3NpemUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJc3dpdGNoIChvcmlnKSB7CiAJCWRlZmF1bHQ6Ci0JCQl1cCgmY29uX2J1Zl9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZjb25fYnVmX210eCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJY2FzZSAyOgogCQkJb2Zmc2V0ICs9IHNpemU7CkBAIC04NSwxMSArODYsMTEgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBzaXplKSB7Ci0JCXVwKCZjb25fYnVmX3NlbSk7CisJCW11dGV4X3VubG9jaygmY29uX2J1Zl9tdHgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7Ci0JdXAoJmNvbl9idWZfc2VtKTsKKwltdXRleF91bmxvY2soJmNvbl9idWZfbXR4KTsKIAlyZXR1cm4gZmlsZS0+Zl9wb3M7CiB9CiAKQEAgLTEwNiw3ICsxMDcsNyBAQAogCXVuc2lnbmVkIHNob3J0ICpvcmcgPSBOVUxMOwogCXNzaXplX3QgcmV0OwogCi0JZG93bigmY29uX2J1Zl9zZW0pOworCW11dGV4X2xvY2soJmNvbl9idWZfbXR4KTsKIAogCXBvcyA9ICpwcG9zOwogCkBAIC0yNjMsNyArMjY0LDcgQEAKIAkJcmV0ID0gcmVhZDsKIHVubG9ja19vdXQ6CiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCXVwKCZjb25fYnVmX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjb25fYnVmX210eCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjgwLDcgKzI4MSw3IEBACiAJdTE2ICpvcmcwID0gTlVMTCwgKm9yZyA9IE5VTEw7CiAJc2l6ZV90IHJldDsKIAotCWRvd24oJmNvbl9idWZfc2VtKTsKKwltdXRleF9sb2NrKCZjb25fYnVmX210eCk7CiAKIAlwb3MgPSAqcHBvczsKIApAQCAtNDUwLDcgKzQ1MSw3IEBACiB1bmxvY2tfb3V0OgogCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAotCXVwKCZjb25fYnVmX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjb25fYnVmX210eCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0LmMgYi9kcml2ZXJzL2NoYXIvdnQuYwppbmRleCAxYmJiNDViLi5iYmQ5ZmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnQuYworKysgYi9kcml2ZXJzL2NoYXIvdnQuYwpAQCAtODYsNiArODYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9zZWxlY3Rpb24uaD4KICNpbmNsdWRlIDxsaW51eC90aW9jbC5oPgpAQCAtMTU3LDYgKzE1OCw4IEBACiBzdGF0aWMgdm9pZCBzZXRfcGFsZXR0ZShzdHJ1Y3QgdmNfZGF0YSAqdmMpOwogCiBzdGF0aWMgaW50IHByaW50YWJsZTsJCS8qIElzIGNvbnNvbGUgcmVhZHkgZm9yIHByaW50aW5nPyAqLworc3RhdGljIGludCBkZWZhdWx0X3V0Zjg7Cittb2R1bGVfcGFyYW0oZGVmYXVsdF91dGY4LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIAogLyoKICAqIGlnbm9yZV9wb2tlOiBkb24ndCB1bmJsYW5rIHRoZSBzY3JlZW4gd2hlbiB0aGluZ3MgYXJlIHR5cGVkLiAgVGhpcyBpcwpAQCAtMzQ4LDEwICszNTEsMTIgQEAKIAogLyogU3RydWN0dXJlIG9mIGF0dHJpYnV0ZXMgaXMgaGFyZHdhcmUtZGVwZW5kZW50ICovCiAKLXN0YXRpYyB1OCBidWlsZF9hdHRyKHN0cnVjdCB2Y19kYXRhICp2YywgdTggX2NvbG9yLCB1OCBfaW50ZW5zaXR5LCB1OCBfYmxpbmssIHU4IF91bmRlcmxpbmUsIHU4IF9yZXZlcnNlKQorc3RhdGljIHU4IGJ1aWxkX2F0dHIoc3RydWN0IHZjX2RhdGEgKnZjLCB1OCBfY29sb3IsIHU4IF9pbnRlbnNpdHksIHU4IF9ibGluaywKKyAgICB1OCBfdW5kZXJsaW5lLCB1OCBfcmV2ZXJzZSwgdTggX2l0YWxpYykKIHsKIAlpZiAodmMtPnZjX3N3LT5jb25fYnVpbGRfYXR0cikKLQkJcmV0dXJuIHZjLT52Y19zdy0+Y29uX2J1aWxkX2F0dHIodmMsIF9jb2xvciwgX2ludGVuc2l0eSwgX2JsaW5rLCBfdW5kZXJsaW5lLCBfcmV2ZXJzZSk7CisJCXJldHVybiB2Yy0+dmNfc3ctPmNvbl9idWlsZF9hdHRyKHZjLCBfY29sb3IsIF9pbnRlbnNpdHksCisJCSAgICAgICBfYmxpbmssIF91bmRlcmxpbmUsIF9yZXZlcnNlLCBfaXRhbGljKTsKIAogI2lmbmRlZiBWVF9CVUZfVlJBTV9PTkxZCiAvKgpAQCAtMzY4LDEwICszNzMsMTMgQEAKIAl1OCBhID0gdmMtPnZjX2NvbG9yOwogCWlmICghdmMtPnZjX2Nhbl9kb19jb2xvcikKIAkJcmV0dXJuIF9pbnRlbnNpdHkgfAorCQkgICAgICAgKF9pdGFsaWMgPyAyIDogMCkgfAogCQkgICAgICAgKF91bmRlcmxpbmUgPyA0IDogMCkgfAogCQkgICAgICAgKF9yZXZlcnNlID8gOCA6IDApIHwKIAkJICAgICAgIChfYmxpbmsgPyAweDgwIDogMCk7Ci0JaWYgKF91bmRlcmxpbmUpCisJaWYgKF9pdGFsaWMpCisJCWEgPSAoYSAmIDB4RjApIHwgdmMtPnZjX2l0Y29sb3I7CisJZWxzZSBpZiAoX3VuZGVybGluZSkKIAkJYSA9IChhICYgMHhmMCkgfCB2Yy0+dmNfdWxjb2xvcjsKIAllbHNlIGlmIChfaW50ZW5zaXR5ID09IDApCiAJCWEgPSAoYSAmIDB4ZjApIHwgdmMtPnZjX3VsY29sb3I7CkBAIC0zOTIsOCArNDAwLDEwIEBACiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9hdHRyKHN0cnVjdCB2Y19kYXRhICp2YykKIHsKLQl2Yy0+dmNfYXR0ciA9IGJ1aWxkX2F0dHIodmMsIHZjLT52Y19jb2xvciwgdmMtPnZjX2ludGVuc2l0eSwgdmMtPnZjX2JsaW5rLCB2Yy0+dmNfdW5kZXJsaW5lLCB2Yy0+dmNfcmV2ZXJzZSBeIHZjLT52Y19kZWNzY25tKTsKLQl2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciA9IChidWlsZF9hdHRyKHZjLCB2Yy0+dmNfY29sb3IsIDEsIHZjLT52Y19ibGluaywgMCwgdmMtPnZjX2RlY3Njbm0pIDw8IDgpIHwgJyAnOworCXZjLT52Y19hdHRyID0gYnVpbGRfYXR0cih2YywgdmMtPnZjX2NvbG9yLCB2Yy0+dmNfaW50ZW5zaXR5LAorCSAgICAgICAgICAgICAgdmMtPnZjX2JsaW5rLCB2Yy0+dmNfdW5kZXJsaW5lLAorCSAgICAgICAgICAgICAgdmMtPnZjX3JldmVyc2UgXiB2Yy0+dmNfZGVjc2NubSwgdmMtPnZjX2l0YWxpYyk7CisJdmMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIgPSAoYnVpbGRfYXR0cih2YywgdmMtPnZjX2NvbG9yLCAxLCB2Yy0+dmNfYmxpbmssIDAsIHZjLT52Y19kZWNzY25tLCAwKSA8PCA4KSB8ICcgJzsKIH0KIAogLyogTm90ZTogaW52ZXJ0aW5nIHRoZSBzY3JlZW4gdHdpY2Ugc2hvdWxkIHJldmVydCB0byB0aGUgb3JpZ2luYWwgc3RhdGUgKi8KQEAgLTkzNCw2ICs5NDQsMTAgQEAKIGludCBkZWZhdWx0X2JsdVtdID0gezB4MDAsMHgwMCwweDAwLDB4MDAsMHhhYSwweGFhLDB4YWEsMHhhYSwKICAgICAweDU1LDB4NTUsMHg1NSwweDU1LDB4ZmYsMHhmZiwweGZmLDB4ZmZ9OwogCittb2R1bGVfcGFyYW1fYXJyYXkoZGVmYXVsdF9yZWQsIGludCwgTlVMTCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtX2FycmF5KGRlZmF1bHRfZ3JuLCBpbnQsIE5VTEwsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbV9hcnJheShkZWZhdWx0X2JsdSwgaW50LCBOVUxMLCBTX0lSVUdPIHwgU19JV1VTUik7CisKIC8qCiAgKiBnb3RveHkoKSBtdXN0IHZlcmlmeSBhbGwgYm91bmRhcmllcywgYmVjYXVzZSB0aGUgYXJndW1lbnRzCiAgKiBtaWdodCBhbHNvIGJlIG5lZ2F0aXZlLiBJZiB0aGUgZ2l2ZW4gcG9zaXRpb24gaXMgb3V0IG9mCkBAIC0xMTMyLDYgKzExNDYsNyBAQAogc3RhdGljIHZvaWQgZGVmYXVsdF9hdHRyKHN0cnVjdCB2Y19kYXRhICp2YykKIHsKIAl2Yy0+dmNfaW50ZW5zaXR5ID0gMTsKKwl2Yy0+dmNfaXRhbGljID0gMDsKIAl2Yy0+dmNfdW5kZXJsaW5lID0gMDsKIAl2Yy0+dmNfcmV2ZXJzZSA9IDA7CiAJdmMtPnZjX2JsaW5rID0gMDsKQEAgLTExNTQsNiArMTE2OSw5IEBACiAJCQljYXNlIDI6CiAJCQkJdmMtPnZjX2ludGVuc2l0eSA9IDA7CiAJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJdmMtPnZjX2l0YWxpYyA9IDE7CisJCQkJYnJlYWs7CiAJCQljYXNlIDQ6CiAJCQkJdmMtPnZjX3VuZGVybGluZSA9IDE7CiAJCQkJYnJlYWs7CkBAIC0xMTk0LDYgKzEyMTIsOSBAQAogCQkJY2FzZSAyMjoKIAkJCQl2Yy0+dmNfaW50ZW5zaXR5ID0gMTsKIAkJCQlicmVhazsKKwkJCWNhc2UgMjM6CisJCQkJdmMtPnZjX2l0YWxpYyA9IDA7CisJCQkJYnJlYWs7CiAJCQljYXNlIDI0OgogCQkJCXZjLT52Y191bmRlcmxpbmUgPSAwOwogCQkJCWJyZWFrOwpAQCAtMTQ1NCw2ICsxNDc1LDcgQEAKIAl2Yy0+dmNfc2F2ZWRfeAkJPSB2Yy0+dmNfeDsKIAl2Yy0+dmNfc2F2ZWRfeQkJPSB2Yy0+dmNfeTsKIAl2Yy0+dmNfc19pbnRlbnNpdHkJPSB2Yy0+dmNfaW50ZW5zaXR5OworCXZjLT52Y19zX2l0YWxpYyAgICAgICAgID0gdmMtPnZjX2l0YWxpYzsKIAl2Yy0+dmNfc191bmRlcmxpbmUJPSB2Yy0+dmNfdW5kZXJsaW5lOwogCXZjLT52Y19zX2JsaW5rCQk9IHZjLT52Y19ibGluazsKIAl2Yy0+dmNfc19yZXZlcnNlCT0gdmMtPnZjX3JldmVyc2U7CkBAIC0xNDY4LDYgKzE0OTAsNyBAQAogewogCWdvdG94eSh2YywgdmMtPnZjX3NhdmVkX3gsIHZjLT52Y19zYXZlZF95KTsKIAl2Yy0+dmNfaW50ZW5zaXR5CT0gdmMtPnZjX3NfaW50ZW5zaXR5OworCXZjLT52Y19pdGFsaWMJCT0gdmMtPnZjX3NfaXRhbGljOwogCXZjLT52Y191bmRlcmxpbmUJPSB2Yy0+dmNfc191bmRlcmxpbmU7CiAJdmMtPnZjX2JsaW5rCQk9IHZjLT52Y19zX2JsaW5rOwogCXZjLT52Y19yZXZlcnNlCQk9IHZjLT52Y19zX3JldmVyc2U7CkBAIC0xNDk3LDcgKzE1MjAsNyBAQAogCXZjLT52Y19jaGFyc2V0CQk9IDA7CiAJdmMtPnZjX25lZWRfd3JhcAk9IDA7CiAJdmMtPnZjX3JlcG9ydF9tb3VzZQk9IDA7Ci0JdmMtPnZjX3V0ZgkJPSAwOworCXZjLT52Y191dGYgICAgICAgICAgICAgID0gZGVmYXVsdF91dGY4OwogCXZjLT52Y191dGZfY291bnQJPSAwOwogCiAJdmMtPnZjX2Rpc3BfY3RybAk9IDA7CkBAIC0xOTMwLDcgKzE5NTMsNDcgQEAKICAqIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBpcyBhdmFpbGFibGUuCiAgKi8KIGNoYXIgY29uX2J1ZltDT05fQlVGX1NJWkVdOwotREVDTEFSRV9NVVRFWChjb25fYnVmX3NlbSk7CitERUZJTkVfTVVURVgoY29uX2J1Zl9tdHgpOworCisvKiBpc19kb3VibGVfd2lkdGgoKSBpcyBiYXNlZCBvbiB0aGUgd2N3aWR0aCgpIGltcGxlbWVudGF0aW9uIGJ5CisgKiBNYXJrdXMgS3VobiAtLSAyMDAzLTA1LTIwIChVbmljb2RlIDQuMCkKKyAqIExhdGVzdCB2ZXJzaW9uOiBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3djd2lkdGguYworICovCitzdHJ1Y3QgaW50ZXJ2YWwgeworCXVpbnQzMl90IGZpcnN0OworCXVpbnQzMl90IGxhc3Q7Cit9OworCitzdGF0aWMgaW50IGJpc2VhcmNoKHVpbnQzMl90IHVjcywgY29uc3Qgc3RydWN0IGludGVydmFsICp0YWJsZSwgaW50IG1heCkKK3sKKwlpbnQgbWluID0gMDsKKwlpbnQgbWlkOworCisJaWYgKHVjcyA8IHRhYmxlWzBdLmZpcnN0IHx8IHVjcyA+IHRhYmxlW21heF0ubGFzdCkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKG1heCA+PSBtaW4pIHsKKwkJbWlkID0gKG1pbiArIG1heCkgLyAyOworCQlpZiAodWNzID4gdGFibGVbbWlkXS5sYXN0KQorCQkJbWluID0gbWlkICsgMTsKKwkJZWxzZSBpZiAodWNzIDwgdGFibGVbbWlkXS5maXJzdCkKKwkJCW1heCA9IG1pZCAtIDE7CisJCWVsc2UKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19kb3VibGVfd2lkdGgodWludDMyX3QgdWNzKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZXJ2YWwgZG91YmxlX3dpZHRoW10gPSB7CisJCXsgMHgxMTAwLCAweDExNUYgfSwgeyAweDIzMjksIDB4MjMyQSB9LCB7IDB4MkU4MCwgMHgzMDNFIH0sCisJCXsgMHgzMDQwLCAweEE0Q0YgfSwgeyAweEFDMDAsIDB4RDdBMyB9LCB7IDB4RjkwMCwgMHhGQUZGIH0sCisJCXsgMHhGRTMwLCAweEZFNkYgfSwgeyAweEZGMDAsIDB4RkY2MCB9LCB7IDB4RkZFMCwgMHhGRkU2IH0sCisJCXsgMHgyMDAwMCwgMHgyRkZGRCB9LCB7IDB4MzAwMDAsIDB4M0ZGRkQgfQorCX07CisJcmV0dXJuIGJpc2VhcmNoKHVjcywgZG91YmxlX3dpZHRoLAorCQlzaXplb2YoZG91YmxlX3dpZHRoKSAvIHNpemVvZigqZG91YmxlX3dpZHRoKSAtIDEpOworfQogCiAvKiBhY3F1aXJlcyBjb25zb2xlX3NlbSAqLwogc3RhdGljIGludCBkb19jb25fd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCkBAIC0xOTQ4LDYgKzIwMTEsMTAgQEAKIAl1bnNpZ25lZCBpbnQgY3VycmNvbnM7CiAJdW5zaWduZWQgbG9uZyBkcmF3X2Zyb20gPSAwLCBkcmF3X3RvID0gMDsKIAlzdHJ1Y3QgdmNfZGF0YSAqdmM7CisJdW5zaWduZWQgY2hhciB2Y19hdHRyOworCXVpbnQ4X3QgcmVzY2FuOworCXVpbnQ4X3QgaW52ZXJzZTsKKwl1aW50OF90IHdpZHRoOwogCXUxNiBoaW1hc2ssIGNoYXJtYXNrOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm9yaWdfYnVmID0gTlVMTDsKIAlpbnQgb3JpZ19jb3VudDsKQEAgLTE5ODMsNyArMjA1MCw3IEBACiAKIAkvKiBBdCB0aGlzIHBvaW50ICdidWYnIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBrZXJuZWwgYnVmZmVyCiAJICogYW5kIHRoZXJlZm9yZSBubyBhY2Nlc3MgdG8gdXNlcnNwYWNlIChhbmQgdGhlcmVmb3JlIHNsZWVwaW5nKQotCSAqIHdpbGwgYmUgbmVlZGVkLiAgVGhlIGNvbl9idWZfc2VtIHNlcmlhbGl6ZXMgYWxsIHR0eSBiYXNlZAorCSAqIHdpbGwgYmUgbmVlZGVkLiAgVGhlIGNvbl9idWZfbXR4IHNlcmlhbGl6ZXMgYWxsIHR0eSBiYXNlZAogCSAqIGNvbnNvbGUgcmVuZGVyaW5nIGFuZCB2Y3Mgd3JpdGUvcmVhZCBvcGVyYXRpb25zLiAgV2UgaG9sZAogCSAqIHRoZSBjb25zb2xlIHNwaW5sb2NrIGR1cmluZyB0aGUgZW50aXJlIHdyaXRlLgogCSAqLwpAQCAtMjAxMCw1MyArMjA3Nyw4NiBAQAogCQlidWYrKzsKIAkJbisrOwogCQljb3VudC0tOworCQlyZXNjYW4gPSAwOworCQlpbnZlcnNlID0gMDsKKwkJd2lkdGggPSAxOwogCiAJCS8qIERvIG5vIHRyYW5zbGF0aW9uIGF0IGFsbCBpbiBjb250cm9sIHN0YXRlcyAqLwogCQlpZiAodmMtPnZjX3N0YXRlICE9IEVTbm9ybWFsKSB7CiAJCQl0YyA9IGM7CiAJCX0gZWxzZSBpZiAodmMtPnZjX3V0ZiAmJiAhdmMtPnZjX2Rpc3BfY3RybCkgewotCQkgICAgLyogQ29tYmluZSBVVEYtOCBpbnRvIFVuaWNvZGUgKi8KLQkJICAgIC8qIE1hbGZvcm1lZCBzZXF1ZW5jZXMgYXMgc2VxdWVuY2VzIG9mIHJlcGxhY2VtZW50IGdseXBocyAqLworCQkgICAgLyogQ29tYmluZSBVVEYtOCBpbnRvIFVuaWNvZGUgaW4gdmNfdXRmX2NoYXIuCisJCSAgICAgKiB2Y191dGZfY291bnQgaXMgdGhlIG51bWJlciBvZiBjb250aW51YXRpb24gYnl0ZXMgc3RpbGwKKwkJICAgICAqIGV4cGVjdGVkIHRvIGFycml2ZS4KKwkJICAgICAqIHZjX25wYXIgaXMgdGhlIG51bWJlciBvZiBjb250aW51YXRpb24gYnl0ZXMgYXJyaXZlZCBzbworCQkgICAgICogZmFyCisJCSAgICAgKi8KIHJlc2Nhbl9sYXN0X2J5dGU6Ci0JCSAgICBpZihjID4gMHg3ZikgeworCQkgICAgaWYgKChjICYgMHhjMCkgPT0gMHg4MCkgeworCQkJLyogQ29udGludWF0aW9uIGJ5dGUgcmVjZWl2ZWQgKi8KKwkJCXN0YXRpYyBjb25zdCB1aW50MzJfdCB1dGY4X2xlbmd0aF9jaGFuZ2VzW10gPSB7IDB4MDAwMDAwN2YsIDB4MDAwMDA3ZmYsIDB4MDAwMGZmZmYsIDB4MDAxZmZmZmYsIDB4MDNmZmZmZmYsIDB4N2ZmZmZmZmYgfTsKIAkJCWlmICh2Yy0+dmNfdXRmX2NvdW50KSB7Ci0JCQkgICAgICAgaWYgKChjICYgMHhjMCkgPT0gMHg4MCkgewotCQkJCSAgICAgICB2Yy0+dmNfdXRmX2NoYXIgPSAodmMtPnZjX3V0Zl9jaGFyIDw8IDYpIHwgKGMgJiAweDNmKTsKLSAgICAgICAJCQkJICAgICAgIGlmICgtLXZjLT52Y191dGZfY291bnQpIHsKLQkJCQkJICAgICAgIHZjLT52Y19ucGFyKys7Ci0JCQkJICAgCSAgICAgICBjb250aW51ZTsKLSAgICAgICAJCQkJICAgICAgIH0KLQkJCQkgICAgICAgdGMgPSBjID0gdmMtPnZjX3V0Zl9jaGFyOwotCQkJICAgICAgIH0gZWxzZQotCQkJCSAgICAgICBnb3RvIHJlcGxhY2VtZW50X2dseXBoOwotCQkJfSBlbHNlIHsKLQkJCQl2Yy0+dmNfbnBhciA9IDA7Ci0JCQkJaWYgKChjICYgMHhlMCkgPT0gMHhjMCkgewotCQkJCSAgICB2Yy0+dmNfdXRmX2NvdW50ID0gMTsKLQkJCQkgICAgdmMtPnZjX3V0Zl9jaGFyID0gKGMgJiAweDFmKTsKLQkJCQl9IGVsc2UgaWYgKChjICYgMHhmMCkgPT0gMHhlMCkgewotCQkJCSAgICB2Yy0+dmNfdXRmX2NvdW50ID0gMjsKLQkJCQkgICAgdmMtPnZjX3V0Zl9jaGFyID0gKGMgJiAweDBmKTsKLQkJCQl9IGVsc2UgaWYgKChjICYgMHhmOCkgPT0gMHhmMCkgewotCQkJCSAgICB2Yy0+dmNfdXRmX2NvdW50ID0gMzsKLQkJCQkgICAgdmMtPnZjX3V0Zl9jaGFyID0gKGMgJiAweDA3KTsKLQkJCQl9IGVsc2UgaWYgKChjICYgMHhmYykgPT0gMHhmOCkgewotCQkJCSAgICB2Yy0+dmNfdXRmX2NvdW50ID0gNDsKLQkJCQkgICAgdmMtPnZjX3V0Zl9jaGFyID0gKGMgJiAweDAzKTsKLQkJCQl9IGVsc2UgaWYgKChjICYgMHhmZSkgPT0gMHhmYykgewotCQkJCSAgICB2Yy0+dmNfdXRmX2NvdW50ID0gNTsKLQkJCQkgICAgdmMtPnZjX3V0Zl9jaGFyID0gKGMgJiAweDAxKTsKLQkJCQl9IGVsc2UKLQkgICAgCQkJICAgIGdvdG8gcmVwbGFjZW1lbnRfZ2x5cGg7CisJCQkgICAgdmMtPnZjX3V0Zl9jaGFyID0gKHZjLT52Y191dGZfY2hhciA8PCA2KSB8IChjICYgMHgzZik7CisJCQkgICAgdmMtPnZjX25wYXIrKzsKKwkJCSAgICBpZiAoLS12Yy0+dmNfdXRmX2NvdW50KSB7CisJCQkJLyogU3RpbGwgbmVlZCBzb21lIGJ5dGVzICovCiAJCQkJY29udGludWU7Ci0JCQkgICAgICB9CisJCQkgICAgfQorCQkJICAgIC8qIEdvdCBhIHdob2xlIGNoYXJhY3RlciAqLworCQkJICAgIGMgPSB2Yy0+dmNfdXRmX2NoYXI7CisJCQkgICAgLyogUmVqZWN0IG92ZXJsb25nIHNlcXVlbmNlcyAqLworCQkJICAgIGlmIChjIDw9IHV0ZjhfbGVuZ3RoX2NoYW5nZXNbdmMtPnZjX25wYXIgLSAxXSB8fAorCQkJCQljID4gdXRmOF9sZW5ndGhfY2hhbmdlc1t2Yy0+dmNfbnBhcl0pCisJCQkJYyA9IDB4ZmZmZDsKKwkJCX0gZWxzZSB7CisJCQkgICAgLyogVW5leHBlY3RlZCBjb250aW51YXRpb24gYnl0ZSAqLworCQkJICAgIHZjLT52Y191dGZfY291bnQgPSAwOworCQkJICAgIGMgPSAweGZmZmQ7CisJCQl9CiAJCSAgICB9IGVsc2UgewotCQkgICAgICBpZiAodmMtPnZjX3V0Zl9jb3VudCkKLQkgIAkJICAgICAgZ290byByZXBsYWNlbWVudF9nbHlwaDsKLQkJICAgICAgdGMgPSBjOworCQkJLyogU2luZ2xlIEFTQ0lJIGJ5dGUgb3IgZmlyc3QgYnl0ZSBvZiBhIHNlcXVlbmNlIHJlY2VpdmVkICovCisJCQlpZiAodmMtPnZjX3V0Zl9jb3VudCkgeworCQkJICAgIC8qIENvbnRpbnVhdGlvbiBieXRlIGV4cGVjdGVkICovCisJCQkgICAgcmVzY2FuID0gMTsKKwkJCSAgICB2Yy0+dmNfdXRmX2NvdW50ID0gMDsKKwkJCSAgICBjID0gMHhmZmZkOworCQkJfSBlbHNlIGlmIChjID4gMHg3ZikgeworCQkJICAgIC8qIEZpcnN0IGJ5dGUgb2YgYSBtdWx0aWJ5dGUgc2VxdWVuY2UgcmVjZWl2ZWQgKi8KKwkJCSAgICB2Yy0+dmNfbnBhciA9IDA7CisJCQkgICAgaWYgKChjICYgMHhlMCkgPT0gMHhjMCkgeworCQkJCXZjLT52Y191dGZfY291bnQgPSAxOworCQkJCXZjLT52Y191dGZfY2hhciA9IChjICYgMHgxZik7CisJCQkgICAgfSBlbHNlIGlmICgoYyAmIDB4ZjApID09IDB4ZTApIHsKKwkJCQl2Yy0+dmNfdXRmX2NvdW50ID0gMjsKKwkJCQl2Yy0+dmNfdXRmX2NoYXIgPSAoYyAmIDB4MGYpOworCQkJICAgIH0gZWxzZSBpZiAoKGMgJiAweGY4KSA9PSAweGYwKSB7CisJCQkJdmMtPnZjX3V0Zl9jb3VudCA9IDM7CisJCQkJdmMtPnZjX3V0Zl9jaGFyID0gKGMgJiAweDA3KTsKKwkJCSAgICB9IGVsc2UgaWYgKChjICYgMHhmYykgPT0gMHhmOCkgeworCQkJCXZjLT52Y191dGZfY291bnQgPSA0OworCQkJCXZjLT52Y191dGZfY2hhciA9IChjICYgMHgwMyk7CisJCQkgICAgfSBlbHNlIGlmICgoYyAmIDB4ZmUpID09IDB4ZmMpIHsKKwkJCQl2Yy0+dmNfdXRmX2NvdW50ID0gNTsKKwkJCQl2Yy0+dmNfdXRmX2NoYXIgPSAoYyAmIDB4MDEpOworCQkJICAgIH0gZWxzZSB7CisJCQkJLyogMjU0IGFuZCAyNTUgYXJlIGludmFsaWQgKi8KKwkJCQljID0gMHhmZmZkOworCQkJICAgIH0KKwkJCSAgICBpZiAodmMtPnZjX3V0Zl9jb3VudCkgeworCQkJCS8qIFN0aWxsIG5lZWQgc29tZSBieXRlcyAqLworCQkJCWNvbnRpbnVlOworCQkJICAgIH0KKwkJCX0KKwkJCS8qIE5vdGhpbmcgdG8gZG8gaWYgYW4gQVNDSUkgYnl0ZSB3YXMgcmVjZWl2ZWQgKi8KIAkJICAgIH0KKwkJICAgIC8qIEVuZCBvZiBVVEYtOCBkZWNvZGluZy4gKi8KKwkJICAgIC8qIGMgaXMgdGhlIHJlY2VpdmVkIGNoYXJhY3Rlciwgb3IgVStGRkZEIGZvciBpbnZhbGlkIHNlcXVlbmNlcy4gKi8KKwkJICAgIC8qIFJlcGxhY2UgaW52YWxpZCBVbmljb2RlIGNvZGUgcG9pbnRzIHdpdGggVStGRkZEIHRvbyAqLworCQkgICAgaWYgKChjID49IDB4ZDgwMCAmJiBjIDw9IDB4ZGZmZikgfHwgYyA9PSAweGZmZmUgfHwgYyA9PSAweGZmZmYpCisJCQljID0gMHhmZmZkOworCQkgICAgdGMgPSBjOwogCQl9IGVsc2UgewkvKiBubyB1dGYgb3IgYWx0ZXJuYXRlIGNoYXJzZXQgbW9kZSAqLwotCQkgIHRjID0gdmMtPnZjX3RyYW5zbGF0ZVt2Yy0+dmNfdG9nZ2xlX21ldGEgPyAoYyB8IDB4ODApIDogY107CisJCSAgICB0YyA9IHZjLT52Y190cmFuc2xhdGVbdmMtPnZjX3RvZ2dsZV9tZXRhID8gKGMgfCAweDgwKSA6IGNdOwogCQl9CiAKICAgICAgICAgICAgICAgICAvKiBJZiB0aGUgb3JpZ2luYWwgY29kZSB3YXMgYSBjb250cm9sIGNoYXJhY3RlciB3ZQpAQCAtMjA3Niw1NiArMjE3Niw4MCBAQAogCQkJJiYgKGMgIT0gMTI4KzI3KTsKIAogCQlpZiAodmMtPnZjX3N0YXRlID09IEVTbm9ybWFsICYmIG9rKSB7CisJCQlpZiAodmMtPnZjX3V0ZiAmJiAhdmMtPnZjX2Rpc3BfY3RybCkgeworCQkJCWlmIChpc19kb3VibGVfd2lkdGgoYykpCisJCQkJCXdpZHRoID0gMjsKKwkJCX0KIAkJCS8qIE5vdyB0cnkgdG8gZmluZCBvdXQgaG93IHRvIGRpc3BsYXkgaXQgKi8KIAkJCXRjID0gY29udl91bmlfdG9fcGModmMsIHRjKTsKIAkJCWlmICh0YyAmIH5jaGFybWFzaykgewotCQkJCWlmICggdGMgPT0gLTQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGdvdCAtNCAobm90IGZvdW5kKSB0aGVuIHNlZSBpZiB3ZSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKFUrRkZGRCkgKi8KLXJlcGxhY2VtZW50X2dseXBoOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJdGMgPSBjb252X3VuaV90b19wYyh2YywgMHhmZmZkKTsKLQkJCQkJaWYgKCEodGMgJiB+Y2hhcm1hc2spKQotCQkJCQkJZ290byBkaXNwbGF5X2dseXBoOwotICAgICAgICAgICAgICAgICAgICAgICAgCX0gZWxzZSBpZiAoIHRjICE9IC0zICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWNvbnRpbnVlOyAvKiBub3RoaW5nIHRvIGRpc3BsYXkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gaGFzaCB0YWJsZSBvciBubyByZXBsYWNlbWVudCAtLQotCQkJCSAqIGhvcGUgZm9yIHRoZSBiZXN0ICovCi0JCQkJaWYgKCBjICYgfmNoYXJtYXNrICkKLQkJCQkJdGMgPSAnPyc7Ci0JCQkJZWxzZQotCQkJCQl0YyA9IGM7CisJCQkJaWYgKHRjID09IC0xIHx8IHRjID09IC0yKSB7CisJCQkJICAgIGNvbnRpbnVlOyAvKiBub3RoaW5nIHRvIGRpc3BsYXkgKi8KKwkJCQl9CisJCQkJLyogR2x5cGggbm90IGZvdW5kICovCisJCQkJaWYgKCEodmMtPnZjX3V0ZiAmJiAhdmMtPnZjX2Rpc3BfY3RybCkgJiYgIShjICYgfmNoYXJtYXNrKSkgeworCQkJCSAgICAvKiBJbiBsZWdhY3kgbW9kZSB1c2UgdGhlIGdseXBoIHdlIGdldCBieSBhIDE6MSBtYXBwaW5nLgorCQkJCSAgICAgICBUaGlzIHdvdWxkIG1ha2UgYWJzb2x1dGVseSBubyBzZW5zZSB3aXRoIFVuaWNvZGUgaW4gbWluZC4gKi8KKwkJCQkgICAgdGMgPSBjOworCQkJCX0gZWxzZSB7CisJCQkJICAgIC8qIERpc3BsYXkgVStGRkZELiBJZiBpdCdzIG5vdCBmb3VuZCwgZGlzcGxheSBhbiBpbnZlcnNlIHF1ZXN0aW9uIG1hcmsuICovCisJCQkJICAgIHRjID0gY29udl91bmlfdG9fcGModmMsIDB4ZmZmZCk7CisJCQkJICAgIGlmICh0YyA8IDApIHsKKwkJCQkJaW52ZXJzZSA9IDE7CisJCQkJCXRjID0gY29udl91bmlfdG9fcGModmMsICc/Jyk7CisJCQkJCWlmICh0YyA8IDApIHRjID0gJz8nOworCQkJCSAgICB9CisJCQkJfQogCQkJfQogCi1kaXNwbGF5X2dseXBoOgotCQkJaWYgKHZjLT52Y19uZWVkX3dyYXAgfHwgdmMtPnZjX2RlY2ltKQotCQkJCUZMVVNICi0JCQlpZiAodmMtPnZjX25lZWRfd3JhcCkgewotCQkJCWNyKHZjKTsKLQkJCQlsZih2Yyk7Ci0JCQl9Ci0JCQlpZiAodmMtPnZjX2RlY2ltKQotCQkJCWluc2VydF9jaGFyKHZjLCAxKTsKLQkJCXNjcl93cml0ZXcoaGltYXNrID8KLQkJCQkgICAgICgodmMtPnZjX2F0dHIgPDwgOCkgJiB+aGltYXNrKSArICgodGMgJiAweDEwMCkgPyBoaW1hc2sgOiAwKSArICh0YyAmIDB4ZmYpIDoKLQkJCQkgICAgICh2Yy0+dmNfYXR0ciA8PCA4KSArIHRjLAotCQkJCSAgICh1MTYgKikgdmMtPnZjX3Bvcyk7Ci0JCQlpZiAoRE9fVVBEQVRFKHZjKSAmJiBkcmF3X3ggPCAwKSB7Ci0JCQkJZHJhd194ID0gdmMtPnZjX3g7Ci0JCQkJZHJhd19mcm9tID0gdmMtPnZjX3BvczsKLQkJCX0KLQkJCWlmICh2Yy0+dmNfeCA9PSB2Yy0+dmNfY29scyAtIDEpIHsKLQkJCQl2Yy0+dmNfbmVlZF93cmFwID0gdmMtPnZjX2RlY2F3bTsKLQkJCQlkcmF3X3RvID0gdmMtPnZjX3BvcyArIDI7CisJCQlpZiAoIWludmVyc2UpIHsKKwkJCQl2Y19hdHRyID0gdmMtPnZjX2F0dHI7CiAJCQl9IGVsc2UgewotCQkJCXZjLT52Y194Kys7Ci0JCQkJZHJhd190byA9ICh2Yy0+dmNfcG9zICs9IDIpOwotCQkJfQotCQkJaWYgKHZjLT52Y191dGZfY291bnQpIHsKLQkJCQlpZiAodmMtPnZjX25wYXIpIHsKLQkJCQkJdmMtPnZjX25wYXItLTsKLQkJCQkJZ290byBkaXNwbGF5X2dseXBoOworCQkJCS8qIGludmVydCB2Y19hdHRyICovCisJCQkJaWYgKCF2Yy0+dmNfY2FuX2RvX2NvbG9yKSB7CisJCQkJCXZjX2F0dHIgPSAodmMtPnZjX2F0dHIpIF4gMHgwODsKKwkJCQl9IGVsc2UgaWYgKHZjLT52Y19oaV9mb250X21hc2sgPT0gMHgxMDApIHsKKwkJCQkJdmNfYXR0ciA9ICgodmMtPnZjX2F0dHIpICYgMHgxMSkgfCAoKCh2Yy0+dmNfYXR0cikgJiAweGUwKSA+PiA0KSB8ICgoKHZjLT52Y19hdHRyKSAmIDB4MGUpIDw8IDQpOworCQkJCX0gZWxzZSB7CisJCQkJCXZjX2F0dHIgPSAoKHZjLT52Y19hdHRyKSAmIDB4ODgpIHwgKCgodmMtPnZjX2F0dHIpICYgMHg3MCkgPj4gNCkgfCAoKCh2Yy0+dmNfYXR0cikgJiAweDA3KSA8PCA0KTsKIAkJCQl9Ci0JCQkJdmMtPnZjX3V0Zl9jb3VudCA9IDA7CisJCQl9CisKKwkJCXdoaWxlICgxKSB7CisJCQkJaWYgKHZjLT52Y19uZWVkX3dyYXAgfHwgdmMtPnZjX2RlY2ltKQorCQkJCQlGTFVTSAorCQkJCWlmICh2Yy0+dmNfbmVlZF93cmFwKSB7CisJCQkJCWNyKHZjKTsKKwkJCQkJbGYodmMpOworCQkJCX0KKwkJCQlpZiAodmMtPnZjX2RlY2ltKQorCQkJCQlpbnNlcnRfY2hhcih2YywgMSk7CisJCQkJc2NyX3dyaXRldyhoaW1hc2sgPworCQkJCQkgICAgICgodmNfYXR0ciA8PCA4KSAmIH5oaW1hc2spICsgKCh0YyAmIDB4MTAwKSA/IGhpbWFzayA6IDApICsgKHRjICYgMHhmZikgOgorCQkJCQkgICAgICh2Y19hdHRyIDw8IDgpICsgdGMsCisJCQkJCSAgICh1MTYgKikgdmMtPnZjX3Bvcyk7CisJCQkJaWYgKERPX1VQREFURSh2YykgJiYgZHJhd194IDwgMCkgeworCQkJCQlkcmF3X3ggPSB2Yy0+dmNfeDsKKwkJCQkJZHJhd19mcm9tID0gdmMtPnZjX3BvczsKKwkJCQl9CisJCQkJaWYgKHZjLT52Y194ID09IHZjLT52Y19jb2xzIC0gMSkgeworCQkJCQl2Yy0+dmNfbmVlZF93cmFwID0gdmMtPnZjX2RlY2F3bTsKKwkJCQkJZHJhd190byA9IHZjLT52Y19wb3MgKyAyOworCQkJCX0gZWxzZSB7CisJCQkJCXZjLT52Y194Kys7CisJCQkJCWRyYXdfdG8gPSAodmMtPnZjX3BvcyArPSAyKTsKKwkJCQl9CisKKwkJCQlpZiAoIS0td2lkdGgpIGJyZWFrOworCisJCQkJdGMgPSBjb252X3VuaV90b19wYyh2YywgJyAnKTsgLyogQSBzcGFjZSBpcyBwcmludGVkIGluIHRoZSBzZWNvbmQgY29sdW1uICovCisJCQkJaWYgKHRjIDwgMCkgdGMgPSAnICc7CisJCQl9CisKKwkJCWlmIChyZXNjYW4pIHsKKwkJCQlyZXNjYW4gPSAwOworCQkJCWludmVyc2UgPSAwOworCQkJCXdpZHRoID0gMTsKIAkJCQljID0gb3JpZzsKIAkJCQlnb3RvIHJlc2Nhbl9sYXN0X2J5dGU7CiAJCQl9CkBAIC0yNTgxLDYgKzI3MDUsMTEgQEAKIAltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiB9CiAKK3N0YXRpYyBpbnQgZGVmYXVsdF9pdGFsaWNfY29sb3IgICAgPSAyOyAvLyBncmVlbiAoQVNDSUkpCitzdGF0aWMgaW50IGRlZmF1bHRfdW5kZXJsaW5lX2NvbG9yID0gMzsgLy8gY3lhbiAoQVNDSUkpCittb2R1bGVfcGFyYW1fbmFtZWQoaXRhbGljLCBkZWZhdWx0X2l0YWxpY19jb2xvciwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW1fbmFtZWQodW5kZXJsaW5lLCBkZWZhdWx0X3VuZGVybGluZV9jb2xvciwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CisKIHN0YXRpYyB2b2lkIHZjX2luaXQoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgcm93cywKIAkJICAgIHVuc2lnbmVkIGludCBjb2xzLCBpbnQgZG9fY2xlYXIpCiB7CkBAIC0yNjAwLDcgKzI3MjksOCBAQAogCQl2Yy0+dmNfcGFsZXR0ZVtrKytdID0gZGVmYXVsdF9ibHVbal0gOwogCX0KIAl2Yy0+dmNfZGVmX2NvbG9yICAgICAgID0gMHgwNzsgICAvKiB3aGl0ZSAqLwotCXZjLT52Y191bGNvbG9yCQk9IDB4MGY7ICAgLyogYm9sZCB3aGl0ZSAqLworCXZjLT52Y191bGNvbG9yICAgICAgICAgPSBkZWZhdWx0X3VuZGVybGluZV9jb2xvcjsKKwl2Yy0+dmNfaXRjb2xvciAgICAgICAgID0gZGVmYXVsdF9pdGFsaWNfY29sb3I7CiAJdmMtPnZjX2hhbGZjb2xvciAgICAgICA9IDB4MDg7ICAgLyogZ3JleSAqLwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZjLT5wYXN0ZV93YWl0KTsKIAlyZXNldF90ZXJtaW5hbCh2YywgZG9fY2xlYXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwppbmRleCBjOWYyZGQ2Li5jNmY2ZjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYworKysgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIAkJc2NoZWR1bGUoKTsKIAl9CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnZ0X2FjdGl2YXRlX3F1ZXVlLCAmd2FpdCk7Ci0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKaW5kZXggNjAxOThhNy4uNTNmNTUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKQEAgLTIsOSArMiw3IEBACiAjIFdhdGNoZG9nIGRldmljZSBjb25maWd1cmF0aW9uCiAjCiAKLW1lbnUgIldhdGNoZG9nIENhcmRzIgotCi1jb25maWcgV0FUQ0hET0cKK21lbnVjb25maWcgV0FUQ0hET0cKIAlib29sICJXYXRjaGRvZyBUaW1lciBTdXBwb3J0IgogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSBzYXkgWSBoZXJlIChhbmQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9ucykgYW5kIGNyZWF0ZSBhCkBAIC0yOCw5ICsyNiwxMCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitpZiBXQVRDSERPRworCiBjb25maWcgV0FUQ0hET0dfTk9XQVlPVVQKIAlib29sICJEaXNhYmxlIHdhdGNoZG9nIHNodXRkb3duIG9uIGNsb3NlIgotCWRlcGVuZHMgb24gV0FUQ0hET0cKIAloZWxwCiAJICBUaGUgZGVmYXVsdCB3YXRjaGRvZyBiZWhhdmlvdXIgKHdoaWNoIHlvdSBnZXQgaWYgeW91IHNheSBOIGhlcmUpIGlzCiAJICB0byBzdG9wIHRoZSB0aW1lciBpZiB0aGUgcHJvY2VzcyBtYW5hZ2luZyBpdCBjbG9zZXMgdGhlIGZpbGUKQEAgLTQzLDEzICs0MiwxMSBAQAogIwogCiBjb21tZW50ICJXYXRjaGRvZyBEZXZpY2UgRHJpdmVycyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HCiAKICMgQXJjaGl0ZWN0dXJlIEluZGVwZW5kZW50CiAKIGNvbmZpZyBTT0ZUX1dBVENIRE9HCiAJdHJpc3RhdGUgIlNvZnR3YXJlIHdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cKIAloZWxwCiAJICBBIHNvZnR3YXJlIG1vbml0b3Jpbmcgd2F0Y2hkb2cuIFRoaXMgd2lsbCBmYWlsIHRvIHJlYm9vdCB5b3VyIHN5c3RlbQogCSAgZnJvbSBzb21lIHNpdHVhdGlvbnMgdGhhdCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgd2lsbCByZWNvdmVyCkBAIC02MiwxNCArNTksMTQgQEAKIAogY29uZmlnIEFUOTFSTTkyMDBfV0FUQ0hET0cKIAl0cmlzdGF0ZSAiQVQ5MVJNOTIwMCB3YXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIEFSQ0hfQVQ5MVJNOTIwMAorCWRlcGVuZHMgb24gQVJDSF9BVDkxUk05MjAwCiAJaGVscAogCSAgV2F0Y2hkb2cgdGltZXIgZW1iZWRkZWQgaW50byBBVDkxUk05MjAwIGNoaXBzLiBUaGlzIHdpbGwgcmVib290IHlvdXIKIAkgIHN5c3RlbSB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuCiAKIGNvbmZpZyAyMTI4NV9XQVRDSERPRwogCXRyaXN0YXRlICJEQzIxMjg1IHdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgRk9PVEJSSURHRQorCWRlcGVuZHMgb24gRk9PVEJSSURHRQogCWhlbHAKIAkgIFRoZSBJbnRlbCBGb290YnJpZGdlIGNoaXAgY29udGFpbnMgYSBidWlsdC1pbiB3YXRjaGRvZyBjaXJjdWl0LiBTYXkgWQogCSAgaGVyZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhpcy4gQWx0ZXJuYXRpdmVseSBzYXkgTSB0byBjb21waWxlIHRoZQpAQCAtODMsNyArODAsNyBAQAogCiBjb25maWcgOTc3X1dBVENIRE9HCiAJdHJpc3RhdGUgIk5ldFdpbmRlciBXQjgzQzk3NyB3YXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIEZPT1RCUklER0UgJiYgQVJDSF9ORVRXSU5ERVIKKwlkZXBlbmRzIG9uIEZPT1RCUklER0UgJiYgQVJDSF9ORVRXSU5ERVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFdCOTc3IHdhdGNoZG9nIGluY2x1ZGVkIGluCiAJICBOZXRXaW5kZXIgbWFjaGluZXMuIEFsdGVybmF0aXZlbHkgc2F5IE0gdG8gY29tcGlsZSB0aGUgZHJpdmVyIGFzCkBAIC05Myw3ICs5MCw3IEBACiAKIGNvbmZpZyBJWFAyMDAwX1dBVENIRE9HCiAJdHJpc3RhdGUgIklYUDIwMDAgV2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBBUkNIX0lYUDIwMDAKKwlkZXBlbmRzIG9uIEFSQ0hfSVhQMjAwMAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgd2F0Y2hkb2cgdGltZXIKIAkgIGluIHRoZSBJbnRlbCBJWFAyMDAwKDI0MDAsIDI4MDAsIDI4NTApIG5ldHdvcmsgcHJvY2Vzc29ycy4KQEAgLTEwNCw3ICsxMDEsNyBAQAogCiBjb25maWcgSVhQNFhYX1dBVENIRE9HCiAJdHJpc3RhdGUgIklYUDR4eCBXYXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIEFSQ0hfSVhQNFhYCisJZGVwZW5kcyBvbiBBUkNIX0lYUDRYWAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgd2F0Y2hkb2cgdGltZXIKIAkgIGluIHRoZSBJbnRlbCBJWFA0eHggbmV0d29yayBwcm9jZXNzb3JzLiBUaGlzIGRyaXZlciBjYW4KQEAgLTExOCw5ICsxMTUsMTYgQEAKIAogCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCiAKK2NvbmZpZyBLUzg2OTVfV0FUQ0hET0cKKwl0cmlzdGF0ZSAiS1M4Njk1IHdhdGNoZG9nIgorCWRlcGVuZHMgb24gQVJDSF9LUzg2OTUKKwloZWxwCisJICBXYXRjaGRvZyB0aW1lciBlbWJlZGRlZCBpbnRvIEtTODY5NSBwcm9jZXNzb3IuIFRoaXMgd2lsbCByZWJvb3QgeW91cgorCSAgc3lzdGVtIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC4KKwogY29uZmlnIFMzQzI0MTBfV0FUQ0hET0cKIAl0cmlzdGF0ZSAiUzNDMjQxMCBXYXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIEFSQ0hfUzNDMjQxMAorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCiAJaGVscAogCSAgV2F0Y2hkb2cgdGltZXIgYmxvY2sgaW4gdGhlIFNhbXN1bmcgUzNDMjQxMCBjaGlwcy4gVGhpcyB3aWxsCiAJICByZWJvb3QgdGhlIHN5c3RlbSB3aGVuIHRoZSB0aW1lciBleHBpcmVzIHdpdGggdGhlIHdhdGNoZG9nCkBAIC0xMzYsNyArMTQwLDcgQEAKIAogY29uZmlnIFNBMTEwMF9XQVRDSERPRwogCXRyaXN0YXRlICJTQTExMDAvUFhBMnh4IHdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgKCBBUkNIX1NBMTEwMCB8fCBBUkNIX1BYQSApCisJZGVwZW5kcyBvbiBBUkNIX1NBMTEwMCB8fCBBUkNIX1BYQQogCWhlbHAKIAkgIFdhdGNoZG9nIHRpbWVyIGVtYmVkZGVkIGludG8gU0ExMXgwIGFuZCBQWEEyeHggY2hpcHMuIFRoaXMgd2lsbAogCSAgcmVib290IHlvdXIgc3lzdGVtIHdoZW4gdGltZW91dCBpcyByZWFjaGVkLgpAQCAtMTQ4LDcgKzE1Miw3IEBACiAKIGNvbmZpZyBNUENPUkVfV0FUQ0hET0cKIAl0cmlzdGF0ZSAiTVBjb3JlIHdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgQVJNX01QQ09SRV9QTEFURk9STSAmJiBMT0NBTF9USU1FUlMKKwlkZXBlbmRzIG9uIEFSTV9NUENPUkVfUExBVEZPUk0gJiYgTE9DQUxfVElNRVJTCiAJaGVscAogCSAgV2F0Y2hkb2cgdGltZXIgZW1iZWRkZWQgaW50byB0aGUgTVBjb3JlIHN5c3RlbS4KIApAQCAtMTU3LDcgKzE2MSw3IEBACiAKIGNvbmZpZyBFUDkzWFhfV0FUQ0hET0cKIAl0cmlzdGF0ZSAiRVA5M3h4IFdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgQVJDSF9FUDkzWFgKKwlkZXBlbmRzIG9uIEFSQ0hfRVA5M1hYCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSB3YXRjaGRvZyB0aW1lcgogCSAgZW1iZWRkZWQgaW4gdGhlIENpcnJ1cyBMb2dpYyBFUDkzeHggZmFtaWx5IG9mIGRldmljZXMuCkBAIC0xNjcsMTQgKzE3MSwxNCBAQAogCiBjb25maWcgT01BUF9XQVRDSERPRwogCXRyaXN0YXRlICJPTUFQIFdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgKEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMjRYWCkKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMjRYWAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFRJIE9NQVAxNjEwL09NQVAxNzEwL09NQVAyNDIwIHdhdGNoZG9nLiAgU2F5ICdZJyBoZXJlIHRvCiAJICBlbmFibGUgdGhlIE9NQVAxNjEwL09NQVAxNzEwIHdhdGNoZG9nIHRpbWVyLgogCiBjb25maWcgUE5YNDAwOF9XQVRDSERPRwogCXRyaXN0YXRlICJQTlg0MDA4IFdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgQVJDSF9QTlg0MDA4CisJZGVwZW5kcyBvbiBBUkNIX1BOWDQwMDgKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIHdhdGNoZG9nIHRpbWVyCiAJICBpbiB0aGUgUE5YNDAwOCBwcm9jZXNzb3IuCkBAIC0xODcsNyArMTkxLDcgQEAKIAogY29uZmlnIEFDUVVJUkVfV0RUCiAJdHJpc3RhdGUgIkFjcXVpcmUgU0JDIFdhdGNoZG9nIFRpbWVyIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CisJZGVwZW5kcyBvbiBYODYKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyBvbiBTaW5nbGUgQm9hcmQKIAkgIENvbXB1dGVycyBwcm9kdWNlZCBieSBBY3F1aXJlIEluYyAoYW5kIG90aGVycykuIFRoaXMgd2F0Y2hkb2cKQEAgLTIwMSw3ICsyMDUsNyBAQAogCiBjb25maWcgQURWQU5URUNIX1dEVAogCXRyaXN0YXRlICJBZHZhbnRlY2ggU0JDIFdhdGNoZG9nIFRpbWVyIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CisJZGVwZW5kcyBvbiBYODYKIAloZWxwCiAJICBJZiB5b3UgYXJlIGNvbmZpZ3VyaW5nIGEgTGludXgga2VybmVsIGZvciB0aGUgQWR2YW50ZWNoIHNpbmdsZS1ib2FyZAogCSAgY29tcHV0ZXIsIHNheSBgWScgaGVyZSB0byBzdXBwb3J0IGl0cyBidWlsdC1pbiB3YXRjaGRvZyB0aW1lcgpAQCAtMjEwLDcgKzIxNCw3IEBACiAKIGNvbmZpZyBBTElNMTUzNV9XRFQKIAl0cmlzdGF0ZSAiQUxpIE0xNTM1IFBNVSBXYXRjaGRvZyBUaW1lciIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFg4NiAmJiBQQ0kKKwlkZXBlbmRzIG9uIFg4NiAmJiBQQ0kKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyBvbiB0aGUgQUxpIE0xNTM1IFBNVS4KIApAQCAtMjIxLDcgKzIyNSw3IEBACiAKIGNvbmZpZyBBTElNNzEwMV9XRFQKIAl0cmlzdGF0ZSAiQUxpIE03MTAxIFBNVSBDb21wdXRlciBXYXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFg4NiAmJiBQQ0kKKwlkZXBlbmRzIG9uIFg4NiAmJiBQQ0kKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyBvbiB0aGUgQUxpIE03MTAxIFBNVQogCSAgYXMgdXNlZCBpbiB0aGUgeDg2IENvYmFsdCBzZXJ2ZXJzLgpAQCAtMjMzLDcgKzIzNyw3IEBACiAKIGNvbmZpZyBTQzUyMF9XRFQKIAl0cmlzdGF0ZSAiQU1EIEVsYW4gU0M1MjAgcHJvY2Vzc29yIFdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CisJZGVwZW5kcyBvbiBYODYKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyBidWlsdCBpbiB0byB0aGUKIAkgIEFNRCAiRWxhbiIgU0M1MjAgbWljcm9jb21wdXRlciBjb21tb25seSB1c2VkIGluIGVtYmVkZGVkIHN5c3RlbXMuCkBAIC0yNDYsNyArMjUwLDcgQEAKIAogY29uZmlnIEVVUk9URUNIX1dEVAogCXRyaXN0YXRlICJFdXJvdGVjaCBDUFUtMTIyMC8xNDEwIFdhdGNoZG9nIFRpbWVyIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CisJZGVwZW5kcyBvbiBYODYKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIHdhdGNoZG9nIHRpbWVyIG9uIHRoZSBFdXJvdGVjaCBDUFUtMTIyMCBhbmQKIAkgIENQVS0xNDEwIGNhcmRzLiAgVGhlc2UgYXJlIFBDLzEwNCBTQkNzLiBTcGVjIHNoZWV0cyBhbmQgcHJvZHVjdApAQCAtMjU0LDcgKzI1OCw3IEBACiAKIGNvbmZpZyBJQjcwMF9XRFQKIAl0cmlzdGF0ZSAiSUI3MDAgU0JDIFdhdGNoZG9nIFRpbWVyIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CisJZGVwZW5kcyBvbiBYODYKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyBvbiB0aGUgSUI3MDAgU2luZ2xlCiAJICBCb2FyZCBDb21wdXRlciBwcm9kdWNlZCBieSBUTUMgVGVjaG5vbG9neSAod3d3LnRtYy11ay5jb20pLiBUaGlzIHdhdGNoZG9nCkBAIC0yNzAsNyArMjc0LDcgQEAKIAogY29uZmlnIElCTUFTUgogCXRyaXN0YXRlICJJQk0gQXV0b21hdGljIFNlcnZlciBSZXN0YXJ0IgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CisJZGVwZW5kcyBvbiBYODYKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBJQk0gQXV0b21hdGljIFNlcnZlciBSZXN0YXJ0IHdhdGNoZG9nCiAJICB0aW1lciBidWlsdC1pbiBpbnRvIHNvbWUgZVNlcnZlciB4U2VyaWVzIG1hY2hpbmVzLgpAQCAtMjgwLDcgKzI4NCw3IEBACiAKIGNvbmZpZyBXQUZFUl9XRFQKIAl0cmlzdGF0ZSAiSUNQIFdhZmVyIDU4MjMgU2luZ2xlIEJvYXJkIENvbXB1dGVyIFdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CisJZGVwZW5kcyBvbiBYODYKIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgb24gdGhlIElDUCBXYWZlciA1ODIzCiAJICBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIgKGFuZCBwcm9iYWJseSBvdGhlciBzaW1pbGFyIG1vZGVscykuCkBAIC0yOTAsNyArMjk0LDcgQEAKIAogY29uZmlnIEk2MzAwRVNCX1dEVAogCXRyaXN0YXRlICJJbnRlbCA2MzAwRVNCIFRpbWVyL1dhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2ICYmIFBDSQorCWRlcGVuZHMgb24gWDg2ICYmIFBDSQogCS0tLWhlbHAtLS0KIAkgIEhhcmR3YXJlIGRyaXZlciBmb3IgdGhlIHdhdGNoZG9nIHRpbWVyIGJ1aWx0IGludG8gdGhlIEludGVsCiAJICA2MzAwRVNCIGNvbnRyb2xsZXIgaHViLgpAQCAtMjk4LDMxICszMDIsOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaTYzMDBlc2IuCiAKLWNvbmZpZyBJOFhYX1RDTwotCXRyaXN0YXRlICJJbnRlbCBpOHh4IFRDTyBUaW1lci9XYXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIChYODYgfHwgSUE2NCkgJiYgUENJCi0JZGVmYXVsdCBuCi0JLS0taGVscC0tLQotCSAgSGFyZHdhcmUgZHJpdmVyIGZvciB0aGUgVENPIHRpbWVyIGJ1aWx0IGludG8gdGhlIEludGVsIDgyODAxCi0JICBJL08gQ29udHJvbGxlciBIdWIgZmFtaWx5LiAgVGhlIFRDTyAoVG90YWwgQ29zdCBvZiBPd25lcnNoaXApCi0JICB0aW1lciBpcyBhIHdhdGNoZG9nIHRpbWVyIHRoYXQgd2lsbCByZWJvb3QgdGhlIG1hY2hpbmUgYWZ0ZXIKLQkgIGl0cyBzZWNvbmQgZXhwaXJhdGlvbi4gVGhlIGV4cGlyYXRpb24gdGltZSBjYW4gYmUgY29uZmlndXJlZAotCSAgd2l0aCB0aGUgImhlYXJ0YmVhdCIgcGFyYW1ldGVyLgotCi0JICBPbiBzb21lIG1vdGhlcmJvYXJkcyB0aGUgZHJpdmVyIG1heSBmYWlsIHRvIHJlc2V0IHRoZSBjaGlwc2V0J3MKLQkgIE5PX1JFQk9PVCBmbGFnIHdoaWNoIHByZXZlbnRzIHRoZSB3YXRjaGRvZyBmcm9tIHJlYm9vdGluZyB0aGUKLQkgIG1hY2hpbmUuIElmIHRoaXMgaXMgdGhlIGNhc2UgeW91IHdpbGwgZ2V0IGEga2VybmVsIG1lc3NhZ2UgbGlrZQotCSAgImZhaWxlZCB0byByZXNldCBOT19SRUJPT1QgZmxhZywgcmVib290IGRpc2FibGVkIGJ5IGhhcmR3YXJlIi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaTh4eF90Y28uCi0KLQkgIE5vdGU6IFRoaXMgZHJpdmVyIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUuIFBsZWFzZQotCSAgdXNlIHRoZSBJbnRlbCBUQ08gVGltZXIvV2F0Y2hkb2cgZHJpdmVyLgotCiBjb25maWcgSVRDT19XRFQKIAl0cmlzdGF0ZSAiSW50ZWwgVENPIFRpbWVyL1dhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgKFg4NiB8fCBJQTY0KSAmJiBQQ0kKKwlkZXBlbmRzIG9uIChYODYgfHwgSUE2NCkgJiYgUENJCiAJLS0taGVscC0tLQogCSAgSGFyZHdhcmUgZHJpdmVyIGZvciB0aGUgaW50ZWwgVENPIHRpbWVyIGJhc2VkIHdhdGNoZG9nIGRldmljZXMuCiAJICBUaGVzZSBkcml2ZXJzIGFyZSBpbmNsdWRlZCBpbiB0aGUgSW50ZWwgODI4MDEgSS9PIENvbnRyb2xsZXIKQEAgLTM1MSw3ICszMzMsNyBAQAogCiBjb25maWcgU0MxMjAwX1dEVAogCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODczMDcvUEM5NzMwNyAoYWxhIFNDMTIwMCkgV2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKKwlkZXBlbmRzIG9uIFg4NgogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzMwNy9QQzk3MzA3IGhhcmR3YXJlCiAJICB3YXRjaGRvZyBjYXJkcyBhcyBmb3VuZCBvbiB0aGUgU0MxMjAwLiBUaGlzIHdhdGNoZG9nIGlzIG1haW5seSB1c2VkCkBAIC0zNjUsNyArMzQ3LDcgQEAKIAogY29uZmlnIFNDeDIwMF9XRFQKIAl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBTQ3gyMDAgV2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBTQ3gyMDAgJiYgUENJCisJZGVwZW5kcyBvbiBTQ3gyMDAgJiYgUENJCiAJaGVscAogCSAgRW5hYmxlIHRoZSBidWlsdC1pbiB3YXRjaGRvZyB0aW1lciBzdXBwb3J0IG9uIHRoZSBOYXRpb25hbAogCSAgU2VtaWNvbmR1Y3RvciBTQ3gyMDAgcHJvY2Vzc29ycy4KQEAgLTM3NCw3ICszNTYsNyBAQAogCiBjb25maWcgUEM4NzQxM19XRFQKIAl0cmlzdGF0ZSAiTlMgUEM4NzQxMyB3YXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFg4NgorCWRlcGVuZHMgb24gWDg2CiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgb24gdGhlIFBDODc0MTMgY2hpcHNldAogCSAgVGhpcyB3YXRjaGRvZyBzaW1wbHkgd2F0Y2hlcyB5b3VyIGtlcm5lbCB0byBtYWtlIHN1cmUgaXQgZG9lc24ndApAQCAtMzg4LDcgKzM3MCw3IEBACiAgCiBjb25maWcgNjBYWF9XRFQKIAl0cmlzdGF0ZSAiU0JDLTYwWFggV2F0Y2hkb2cgVGltZXIiCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKKwlkZXBlbmRzIG9uIFg4NgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGNhbiBiZSB1c2VkIHdpdGggdGhlIHdhdGNoZG9nIHRpbWVyIGZvdW5kIG9uIHNvbWUKIAkgIHNpbmdsZSBib2FyZCBjb21wdXRlcnMsIG5hbWVseSB0aGUgNjAxMCBQSUkgYmFzZWQgY29tcHV0ZXIuCkBAIC00MDIsNyArMzg0LDcgQEAKIAogY29uZmlnIFNCQzgzNjBfV0RUCiAJdHJpc3RhdGUgIlNCQzgzNjAgV2F0Y2hkb2cgVGltZXIiCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKKwlkZXBlbmRzIG9uIFg4NgogCS0tLWhlbHAtLS0KIAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgb24gdGhlIFNCQzgzNjAgU2luZ2xlCkBAIC00MTUsNyArMzk3LDcgQEAKIAogY29uZmlnIENQVTVfV0RUCiAJdHJpc3RhdGUgIlNNQSBDUFU1IFdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CisJZGVwZW5kcyBvbiBYODYKIAktLS1oZWxwLS0tCiAJICBUQkQuCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKQEAgLTQyMyw3ICs0MDUsNyBAQAogCiBjb25maWcgU01TQzM3Qjc4N19XRFQKIAl0cmlzdGF0ZSAiV2luYm9uZCBTTXNDMzdCNzg3IFdhdGNoZG9nIFRpbWVyIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgWDg2CisJZGVwZW5kcyBvbiBYODYKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyBjb21wb25lbnQgb24gdGhlCiAJICBXaW5ib25kIFNNc0MzN0I3ODcgY2hpcHNldCBhcyB1c2VkIG9uIHRoZSBOZXRSdW5uZXIgTWFpbmJvYXJkCkBAIC00NDMsNyArNDI1LDcgQEAKIAogY29uZmlnIFc4MzYyN0hGX1dEVAogCXRyaXN0YXRlICJXODM2MjdIRiBXYXRjaGRvZyBUaW1lciIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFg4NgorCWRlcGVuZHMgb24gWDg2CiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgb24gdGhlIFc4MzYyN0hGIGNoaXBzZXQKIAkgIGFzIHVzZWQgaW4gQWR2YW50ZWNoIFBDLTk1NzggYW5kIFR5YW4gUzI3MjEtNTMzIG1vdGhlcmJvYXJkcwpAQCAtNDU4LDcgKzQ0MCw3IEBACiAKIGNvbmZpZyBXODM2OTdIRl9XRFQKIAl0cmlzdGF0ZSAiVzgzNjk3SEYvVzgzNjk3SEcgV2F0Y2hkb2cgVGltZXIiCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKKwlkZXBlbmRzIG9uIFg4NgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIG9uIHRoZSBXODM2OTdIRi9IRwogCSAgY2hpcHNldCBhcyB1c2VkIGluIERlZGlib3gvVklBIG1vdGhlcmJvYXJkcyAoYW5kIGxpa2VseSBvdGhlcnMpLgpAQCAtNDczLDcgKzQ1NSw3IEBACiAKIGNvbmZpZyBXODM4NzdGX1dEVAogCXRyaXN0YXRlICJXODM4NzdGIChFTUFDUykgV2F0Y2hkb2cgVGltZXIiCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKKwlkZXBlbmRzIG9uIFg4NgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIG9uIHRoZSBXODM4NzdGIGNoaXBzZXQKIAkgIGFzIHVzZWQgaW4gRU1BQ1MgUEMtMTA0IG1vdGhlcmJvYXJkcyAoYW5kIGxpa2VseSBvdGhlcnMpLiAgVGhpcwpAQCAtNDg4LDcgKzQ3MCw3IEBACiAKIGNvbmZpZyBXODM5NzdGX1dEVAogCXRyaXN0YXRlICJXODM5NzdGIChQQ00tNTMzNSkgV2F0Y2hkb2cgVGltZXIiCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBYODYKKwlkZXBlbmRzIG9uIFg4NgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIG9uIHRoZSBXODM5NzdGIEkvTyBjaGlwCiAJICBhcyB1c2VkIGluIEFBRU9OJ3MgUENNLTUzMzUgU0JDIChhbmQgbGlrZWx5IG90aGVycykuICBUaGlzCkBAIC01MDEsNyArNDgzLDcgQEAKIAogY29uZmlnIE1BQ0haX1dEVAogCXRyaXN0YXRlICJaRiBNYWNoWiBXYXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFg4NgorCWRlcGVuZHMgb24gWDg2CiAJLS0taGVscC0tLQogCSAgSWYgeW91IGFyZSB1c2luZyBhIFpGIE1pY3JvIE1hY2haIHByb2Nlc3Nvciwgc2F5IFkgaGVyZSwgb3RoZXJ3aXNlCiAJICBOLiAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgd2F0Y2hkb2cgdGltZXIgYnVpbHQtaW4gb24gdGhhdApAQCAtNTE0LDcgKzQ5Niw3IEBACiAKIGNvbmZpZyBTQkNfRVBYX0MzX1dBVENIRE9HCiAJdHJpc3RhdGUgIldpbnN5c3RlbXMgU0JDIEVQWC1DMyB3YXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFg4NgorCWRlcGVuZHMgb24gWDg2CiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgYnVpbHQtaW4gd2F0Y2hkb2cgdGltZXIgb24gdGhlIEVQWC1DMwogCSAgU2luZ2xlLWJvYXJkIGNvbXB1dGVyIG1hZGUgYnkgV2luc3lzdGVtcywgSW5jLgpAQCAtNTM3LDE5ICs1MTksMTkgQEAKIAogY29uZmlnIDh4eF9XRFQKIAl0cmlzdGF0ZSAiTVBDOHh4IFdhdGNoZG9nIFRpbWVyIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgOHh4CisJZGVwZW5kcyBvbiA4eHgKIAogY29uZmlnIDgzeHhfV0RUCiAJdHJpc3RhdGUgIk1QQzgzeHggV2F0Y2hkb2cgVGltZXIiCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBQUENfODN4eAorCWRlcGVuZHMgb24gUFBDXzgzeHgKIAogY29uZmlnIE1WNjRYNjBfV0RUCiAJdHJpc3RhdGUgIk1WNjRYNjAgKE1hcnZlbGwgRGlzY292ZXJ5KSBXYXRjaGRvZyBUaW1lciIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIE1WNjRYNjAKKwlkZXBlbmRzIG9uIE1WNjRYNjAKIAogY29uZmlnIEJPT0tFX1dEVAogCWJvb2wgIlBvd2VyUEMgQm9vay1FIFdhdGNoZG9nIFRpbWVyIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgKEJPT0tFIHx8IDR4eCkKKwlkZXBlbmRzIG9uIEJPT0tFIHx8IDR4eAogCS0tLWhlbHAtLS0KIAkgIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy1hcGkudHh0IGZvcgogCSAgbW9yZSBpbmZvcm1hdGlvbi4KQEAgLTU1OCw3ICs1NDAsNyBAQAogCiBjb25maWcgV0FUQ0hET0dfUlRBUwogCXRyaXN0YXRlICJSVEFTIHdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgUFBDX1JUQVMKKwlkZXBlbmRzIG9uIFBQQ19SVEFTCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWRkcyB3YXRjaGRvZyBzdXBwb3J0IGZvciB0aGUgUlRBUyB3YXRjaGRvZy4KIApAQCAtNTY5LDE2ICs1NTEsMjMgQEAKIAogY29uZmlnIElORFlET0cKIAl0cmlzdGF0ZSAiSW5keS9JMiBIYXJkd2FyZSBXYXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFNHSV9JUDIyCisJZGVwZW5kcyBvbiBTR0lfSVAyMgogCWhlbHAKIAkgIEhhcmR3YXJlIGRyaXZlciBmb3IgdGhlIEluZHkncy9JMidzIHdhdGNoZG9nLiBUaGlzIGlzIGEKIAkgIHdhdGNoZG9nIHRpbWVyIHRoYXQgd2lsbCByZWJvb3QgdGhlIG1hY2hpbmUgYWZ0ZXIgYSA2MCBzZWNvbmQKIAkgIHRpbWVyIGV4cGlyZWQgYW5kIG5vIHByb2Nlc3MgaGFzIHdyaXR0ZW4gdG8gL2Rldi93YXRjaGRvZyBkdXJpbmcKIAkgIHRoYXQgdGltZS4KIAorY29uZmlnIFdEVF9NVFgxCisJdHJpc3RhdGUgIk1UWC0xIEhhcmR3YXJlIFdhdGNoZG9nIgorCWRlcGVuZHMgb24gTUlQU19NVFgxCisJaGVscAorCSAgSGFyZHdhcmUgZHJpdmVyIGZvciB0aGUgTVRYLTEgYm9hcmRzLiBUaGlzIGlzIGEgd2F0Y2hkb2cgdGltZXIgdGhhdAorCSAgd2lsbCByZWJvb3QgdGhlIG1hY2hpbmUgYWZ0ZXIgYSAxMDAgc2Vjb25kcyB0aW1lciBleHBpcmVkLgorCiBjb25maWcgV0RUX1JNOUtfR1BJCiAJdHJpc3RhdGUgIlJNOTAwMC9HUEkgaGFyZHdhcmUgd2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBDUFVfUk05MDAwCisJZGVwZW5kcyBvbiBDUFVfUk05MDAwCiAJaGVscAogCSAgV2F0Y2hkb2cgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEdQSSBoYXJkd2FyZSBmb3VuZCBvbgogCSAgUE1DLVNpZXJyYSBSTTl4eHggQ1BVcy4KQEAgLTU5MCw3ICs1NzksNyBAQAogCiBjb25maWcgWlZNX1dBVENIRE9HCiAJdHJpc3RhdGUgInovVk0gV2F0Y2hkb2cgVGltZXIiCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBTMzkwCisJZGVwZW5kcyBvbiBTMzkwCiAJaGVscAogCSAgSUJNIHMvMzkwIGFuZCB6U2VyaWVzIG1hY2hpbmVzIHJ1bm5pbmcgdW5kZXIgei9WTSA1LjEgb3IgbGF0ZXIKIAkgIHByb3ZpZGUgYSB2aXJ0dWFsIHdhdGNoZG9nIHRpbWVyIHRvIHRoZWlyIGd1ZXN0IHRoYXQgY2F1c2UgYQpAQCAtNjA0LDcgKzU5Myw3IEBACiAKIGNvbmZpZyBTSF9XRFQKIAl0cmlzdGF0ZSAiU3VwZXJIIFdhdGNoZG9nIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgU1VQRVJICisJZGVwZW5kcyBvbiBTVVBFUkgKIAloZWxwCiAJICBUaGlzIGRyaXZlciBhZGRzIHdhdGNoZG9nIHN1cHBvcnQgZm9yIHRoZSBpbnRlZ3JhdGVkIHdhdGNoZG9nIGluIHRoZQogCSAgU3VwZXJIIHByb2Nlc3NvcnMuIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBwcm9jZXNzb3JzIGFuZCB3aXNoCkBAIC02MzEsNyArNjIwLDcgQEAKIAogY29uZmlnIFdBVENIRE9HX0NQMVhYWAogCXRyaXN0YXRlICJDUDFYWFggSGFyZHdhcmUgV2F0Y2hkb2cgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFNQQVJDNjQgJiYgUENJCisJZGVwZW5kcyBvbiBTUEFSQzY0ICYmIFBDSQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVycyBwcmVzZW50IG9uCiAJICBTdW4gTWljcm9zeXN0ZW1zIENvbXBhY3RQQ0kgbW9kZWxzIENQMTQwMCBhbmQgQ1AxNTAwLgpAQCAtNjQ1LDcgKzYzNCw3IEBACiAKIGNvbmZpZyBXQVRDSERPR19SSU8KIAl0cmlzdGF0ZSAiUklPIEhhcmR3YXJlIFdhdGNoZG9nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBTUEFSQzY0ICYmIFBDSQorCWRlcGVuZHMgb24gU1BBUkM2NCAmJiBQQ0kKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIGNhcGFiaWxpdHkgb24gU3VuIFJJTwogCSAgbWFjaGluZXMuICBUaGUgd2F0Y2hkb2cgdGltZW91dCBwZXJpb2QgaXMgbm9ybWFsbHkgb25lIG1pbnV0ZSBidXQKQEAgLTY1NiwxMSArNjQ1LDExIEBACiAjCiAKIGNvbW1lbnQgIklTQS1iYXNlZCBXYXRjaGRvZyBDYXJkcyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIElTQQorCWRlcGVuZHMgb24gSVNBCiAKIGNvbmZpZyBQQ1dBVENIRE9HCiAJdHJpc3RhdGUgIkJlcmtzaGlyZSBQcm9kdWN0cyBJU0EtUEMgV2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBXQVRDSERPRyAmJiBJU0EKKwlkZXBlbmRzIG9uIElTQQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEJlcmtzaGlyZSBQcm9kdWN0cyBJU0EtUEMgV2F0Y2hkb2cgY2FyZC4KIAkgIFRoaXMgY2FyZCBzaW1wbHkgd2F0Y2hlcyB5b3VyIGtlcm5lbCB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCBmcmVlemUsCkBAIC02NzYsNyArNjY1LDcgQEAKIAogY29uZmlnIE1JWENPTVdECiAJdHJpc3RhdGUgIk1peGNvbSBXYXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIElTQQorCWRlcGVuZHMgb24gSVNBCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIE1peGNvbSBoYXJkd2FyZSB3YXRjaGRvZyBjYXJkcy4gIFRoaXMKIAkgIHdhdGNoZG9nIHNpbXBseSB3YXRjaGVzIHlvdXIga2VybmVsIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGZyZWV6ZSwKQEAgLTY5MCw3ICs2NzksNyBAQAogCiBjb25maWcgV0RUCiAJdHJpc3RhdGUgIldEVCBXYXRjaGRvZyB0aW1lciIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIElTQQorCWRlcGVuZHMgb24gSVNBCiAJLS0taGVscC0tLQogCSAgSWYgeW91IGhhdmUgYSBXRFQ1MDBQIG9yIFdEVDUwMVAgd2F0Y2hkb2cgYm9hcmQsIHNheSBZIGhlcmUsCiAJICBvdGhlcndpc2UgTi4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIHByb2JlIGZvciB0aGlzIGJvYXJkLCB3aGljaCBtZWFucwpAQCAtNzIwLDExICs3MDksMTEgQEAKICMKIAogY29tbWVudCAiUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgUENJCisJZGVwZW5kcyBvbiBQQ0kKIAogY29uZmlnIFBDSVBDV0FUQ0hET0cKIAl0cmlzdGF0ZSAiQmVya3NoaXJlIFByb2R1Y3RzIFBDSS1QQyBXYXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFBDSQorCWRlcGVuZHMgb24gUENJCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgQmVya3NoaXJlIFByb2R1Y3RzIFBDSS1QQyBXYXRjaGRvZyBjYXJkLgogCSAgVGhpcyBjYXJkIHNpbXBseSB3YXRjaGVzIHlvdXIga2VybmVsIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGZyZWV6ZSwKQEAgLTczOSw3ICs3MjgsNyBAQAogCiBjb25maWcgV0RUUENJCiAJdHJpc3RhdGUgIlBDSS1XRFQ1MDAvNTAxIFdhdGNoZG9nIHRpbWVyIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgUENJCisJZGVwZW5kcyBvbiBQQ0kKIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgaGF2ZSBhIFBDSS1XRFQ1MDAvNTAxIHdhdGNoZG9nIGJvYXJkLCBzYXkgWSBoZXJlLCBvdGhlcndpc2UgTi4KIApAQCAtNzY2LDExICs3NTUsMTEgQEAKICMKIAogY29tbWVudCAiVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzIgotCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgVVNCCisJZGVwZW5kcyBvbiBVU0IKIAogY29uZmlnIFVTQlBDV0FUQ0hET0cKIAl0cmlzdGF0ZSAiQmVya3NoaXJlIFByb2R1Y3RzIFVTQi1QQyBXYXRjaGRvZyIKLQlkZXBlbmRzIG9uIFdBVENIRE9HICYmIFVTQgorCWRlcGVuZHMgb24gVVNCCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgQmVya3NoaXJlIFByb2R1Y3RzIFVTQi1QQyBXYXRjaGRvZyBjYXJkLgogCSAgVGhpcyBjYXJkIHNpbXBseSB3YXRjaGVzIHlvdXIga2VybmVsIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGZyZWV6ZSwKQEAgLTc4Myw0ICs3NzIsNCBAQAogCiAJICBNb3N0IHBlb3BsZSB3aWxsIHNheSBOLgogCi1lbmRtZW51CitlbmRpZiAjIFdBVENIRE9HCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggMmNkOGZmOC4uZDkwZjY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9NYWtlZmlsZQpAQCAtMjksNiArMjksNyBAQAogb2JqLSQoQ09ORklHXzk3N19XQVRDSERPRykgKz0gd2R0OTc3Lm8KIG9iai0kKENPTkZJR19JWFAyMDAwX1dBVENIRE9HKSArPSBpeHAyMDAwX3dkdC5vCiBvYmotJChDT05GSUdfSVhQNFhYX1dBVENIRE9HKSArPSBpeHA0eHhfd2R0Lm8KK29iai0kKENPTkZJR19LUzg2OTVfV0FUQ0hET0cpICs9IGtzODY5NV93ZHQubwogb2JqLSQoQ09ORklHX1MzQzI0MTBfV0FUQ0hET0cpICs9IHMzYzI0MTBfd2R0Lm8KIG9iai0kKENPTkZJR19TQTExMDBfV0FUQ0hET0cpICs9IHNhMTEwMF93ZHQubwogb2JqLSQoQ09ORklHX01QQ09SRV9XQVRDSERPRykgKz0gbXBjb3JlX3dkdC5vCkBAIC00Niw3ICs0Nyw2IEBACiBvYmotJChDT05GSUdfSUJNQVNSKSArPSBpYm1hc3Iubwogb2JqLSQoQ09ORklHX1dBRkVSX1dEVCkgKz0gd2FmZXI1ODIzd2R0Lm8KIG9iai0kKENPTkZJR19JNjMwMEVTQl9XRFQpICs9IGk2MzAwZXNiLm8KLW9iai0kKENPTkZJR19JOFhYX1RDTykgKz0gaTh4eF90Y28ubwogb2JqLSQoQ09ORklHX0lUQ09fV0RUKSArPSBpVENPX3dkdC5vIGlUQ09fdmVuZG9yX3N1cHBvcnQubwogb2JqLSQoQ09ORklHX1NDMTIwMF9XRFQpICs9IHNjMTIwMHdkdC5vCiBvYmotJChDT05GSUdfU0N4MjAwX1dEVCkgKz0gc2N4MjAwX3dkdC5vCkBAIC03Myw2ICs3Myw3IEBACiAKICMgTUlQUyBBcmNoaXRlY3R1cmUKIG9iai0kKENPTkZJR19JTkRZRE9HKSArPSBpbmR5ZG9nLm8KK29iai0kKENPTkZJR19XRFRfTVRYMSkJKz0gbXR4LTFfd2R0Lm8KIG9iai0kKENPTkZJR19XRFRfUk05S19HUEkpICs9IHJtOWtfd2R0Lm8KIAogIyBTMzkwIEFyY2hpdGVjdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2Jvb2tlX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2Jvb2tlX3dkdC5jCmluZGV4IDBlMjNmMjkuLjBmNWM3N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9ib29rZV93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYm9va2Vfd2R0LmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotLyogSWYgdGhlIGtlcm5lbCBwYXJhbWV0ZXIgd2R0X2VuYWJsZT0xLCB0aGUgd2F0Y2hkb2cgd2lsbCBiZSBlbmFibGVkIGF0IGJvb3QuCisvKiBJZiB0aGUga2VybmVsIHBhcmFtZXRlciB3ZHQ9MSwgdGhlIHdhdGNoZG9nIHdpbGwgYmUgZW5hYmxlZCBhdCBib290LgogICogQWxzbywgdGhlIHdkdF9wZXJpb2Qgc2V0cyB0aGUgd2F0Y2hkb2cgdGltZXIgcGVyaW9kIHRpbWVvdXQuCiAgKiBGb3IgRTUwMCBjcHVzIHRoZSB3ZHRfcGVyaW9kIHNldHMgd2hpY2ggYml0IGNoYW5naW5nIGZyb20gMC0+MSB3aWxsCiAgKiB0cmlnZ2VyIGEgd2F0Y2hvZyB0aW1lb3V0LiBUaGlzIHdhdGNoZG9nIHRpbWVvdXQgd2lsbCBvY2N1ciAzIHRpbWVzLCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9jcHU1d2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvY3B1NXdkdC5jCmluZGV4IGJjZDdlMzYuLmQwZDQ1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9jcHU1d2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2NwdTV3ZHQuYwpAQCAtMjIwLDE3ICsyMjAsMTcgQEAKIAlpZiAoIHZlcmJvc2UgKQogCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInBvcnQ9MHgleCwgdmVyYm9zZT0laVxuIiwgcG9ydCwgdmVyYm9zZSk7CiAKLQlpZiAoIChlcnIgPSBtaXNjX3JlZ2lzdGVyKCZjcHU1d2R0X21pc2MpKSA8IDAgKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIm1pc2NfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKLQkJZ290byBub19taXNjOwotCX0KLQogCWlmICggIXJlcXVlc3RfcmVnaW9uKHBvcnQsIENQVTVXRFRfRVhURU5ULCBQRlgpICkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJyZXF1ZXN0X3JlZ2lvbiBmYWlsZWRcbiIpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gbm9fcG9ydDsKIAl9CiAKKwlpZiAoIChlcnIgPSBtaXNjX3JlZ2lzdGVyKCZjcHU1d2R0X21pc2MpKSA8IDAgKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIm1pc2NfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBub19taXNjOworCX0KKwogCS8qIHdhdGNoZG9nIHJlYm9vdD8gKi8KIAl2YWwgPSBpbmIocG9ydCArIENQVTVXRFRfU1RBVFVTX1JFRyk7CiAJdmFsID0gKHZhbCA+PiAyKSAmIDE7CkBAIC0yNTAsOSArMjUwLDkgQEAKIAogCXJldHVybiAwOwogCi1ub19wb3J0OgotCW1pc2NfZGVyZWdpc3RlcigmY3B1NXdkdF9taXNjKTsKIG5vX21pc2M6CisJcmVsZWFzZV9yZWdpb24ocG9ydCwgQ1BVNVdEVF9FWFRFTlQpOworbm9fcG9ydDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9ldXJvdGVjaHdkdC5jCmluZGV4IGY3MDM4N2YuLmIwNzAzMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9ldXJvdGVjaHdkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9ldXJvdGVjaHdkdC5jCkBAIC00MTMsMTcgKzQxMywxMCBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZldXJ3ZHRfbWlzY2Rldik7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgImV1cndkdDogY2FuJ3QgbWlzY19yZWdpc3RlciBvbiBtaW5vcj0lZFxuIiwKLQkJV0FUQ0hET0dfTUlOT1IpOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGV1cndkdF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJldXJ3ZHQiLCBOVUxMKTsKIAlpZihyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJldXJ3ZHQ6IElSUSAlZCBpcyBub3QgZnJlZS5cbiIsIGlycSk7Ci0JCWdvdG8gb3V0bWlzYzsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgImV1cndkdCIpKSB7CkBAIC00MzgsNiArNDMxLDEzIEBACiAJCWdvdG8gb3V0cmVnOwogCX0KIAorCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmV1cndkdF9taXNjZGV2KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiZXVyd2R0OiBjYW4ndCBtaXNjX3JlZ2lzdGVyIG9uIG1pbm9yPSVkXG4iLAorCQlXQVRDSERPR19NSU5PUik7CisJCWdvdG8gb3V0cmVib290OworCX0KKwogCWV1cndkdF91bmxvY2tfY2hpcCgpOwogCiAJcmV0ID0gMDsKQEAgLTQ0OCwxNCArNDQ4LDE0IEBACiBvdXQ6CiAJcmV0dXJuIHJldDsKIAorb3V0cmVib290OgorCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZldXJ3ZHRfbm90aWZpZXIpOworCiBvdXRyZWc6CiAJcmVsZWFzZV9yZWdpb24oaW8sIDIpOwogCiBvdXRpcnE6CiAJZnJlZV9pcnEoaXJxLCBOVUxMKTsKLQotb3V0bWlzYzoKLQltaXNjX2RlcmVnaXN0ZXIoJmV1cndkdF9taXNjZGV2KTsKIAlnb3RvIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k4eHhfdGNvLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTh4eF90Y28uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYyZWY0OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTh4eF90Y28uYworKysgL2Rldi9udWxsCkBAIC0xLDU3MSArMCwwIEBACi0vKgotICoJaTh4eF90Y286CVRDTyB0aW1lciBkcml2ZXIgZm9yIGk4eHggY2hpcHNldHMKLSAqCi0gKgkoYykgQ29weXJpZ2h0IDIwMDAga2VybmVsIGNvbmNlcHRzIDxuaWxzQGtlcm5lbGNvbmNlcHRzLmRlPiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCQkJCWh0dHA6Ly93d3cua2VybmVsY29uY2VwdHMuZGUKLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCU5laXRoZXIga2VybmVsIGNvbmNlcHRzIG5vciBOaWxzIEZhZXJiZXIgYWRtaXQgbGlhYmlsaXR5IG5vciBwcm92aWRlCi0gKgl3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQKLSAqCSJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KLSAqCi0gKgkoYykgQ29weXJpZ2h0IDIwMDAJa2VybmVsIGNvbmNlcHRzIDxuaWxzQGtlcm5lbGNvbmNlcHRzLmRlPgotICoJCQkJZGV2ZWxvcGVkIGZvcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKZW50cm8gQUcsIEhhYXIvTXVuaWNoIChHZXJtYW55KQotICoKLSAqCVRDTyB0aW1lciBkcml2ZXIgZm9yIGk4eHggY2hpcHNldHMKLSAqCWJhc2VkIG9uIHNvZnRkb2cuYyBieSBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgotICoKLSAqCVRoZSBUQ08gdGltZXIgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGZvbGxvd2luZyBJL08gY29udHJvbGxlciBodWJzOgotICoJKFNlZSB0aGUgaW50ZWwgZG9jdW1lbnRhdGlvbiBvbiBodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS4pCi0gKgk4MjgwMUFBICAoSUNIKSAgICA6IGRvY3VtZW50IG51bWJlciAyOTA2NTUtMDAzLCAyOTA2NzctMDE0LAotICoJODI4MDFBQiAgKElDSE8pICAgOiBkb2N1bWVudCBudW1iZXIgMjkwNjU1LTAwMywgMjkwNjc3LTAxNCwKLSAqCTgyODAxQkEgIChJQ0gyKSAgIDogZG9jdW1lbnQgbnVtYmVyIDI5MDY4Ny0wMDIsIDI5ODI0Mi0wMjcsCi0gKgk4MjgwMUJBTSAoSUNIMi1NKSA6IGRvY3VtZW50IG51bWJlciAyOTA2ODctMDAyLCAyOTgyNDItMDI3LAotICoJODI4MDFDQSAgKElDSDMtUykgOiBkb2N1bWVudCBudW1iZXIgMjkwNzMzLTAwMywgMjkwNzM5LTAxMywKLSAqCTgyODAxQ0FNIChJQ0gzLU0pIDogZG9jdW1lbnQgbnVtYmVyIDI5MDcxNi0wMDEsIDI5MDcxOC0wMDcsCi0gKgk4MjgwMURCICAoSUNINCkgICA6IGRvY3VtZW50IG51bWJlciAyOTA3NDQtMDAxLCAyOTA3NDUtMDIwLAotICoJODI4MDFEQk0gKElDSDQtTSkgOiBkb2N1bWVudCBudW1iZXIgMjUyMzM3LTAwMSwgMjUyNjYzLTAwNSwKLSAqCTgyODAxRSAgIChDLUlDSCkgIDogZG9jdW1lbnQgbnVtYmVyIDI3MzU5OS0wMDEsIDI3MzY0NS0wMDIsCi0gKgk4MjgwMUVCICAoSUNINSkgICA6IGRvY3VtZW50IG51bWJlciAyNTI1MTYtMDAxLCAyNTI1MTctMDAzLAotICoJODI4MDFFUiAgKElDSDVSKSAgOiBkb2N1bWVudCBudW1iZXIgMjUyNTE2LTAwMSwgMjUyNTE3LTAwMywKLSAqCi0gKiAgMjAwMDA3MTAgTmlscyBGYWVyYmVyCi0gKglJbml0aWFsIFZlcnNpb24gMC4wMQotICogIDIwMDAwNzI4IE5pbHMgRmFlcmJlcgotICoJMC4wMiBGaXggZm9yIFNNSV9FTi0+VENPX0VOIGJpdCwgc29tZSBjbGVhbnVwcwotICogIDIwMDExMjE0IE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KLSAqCTAuMDMgQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLSAqCSAgICAgRGlkbid0IGFkZCB0aW1lb3V0IG9wdGlvbiBhcyBpODEwX21hcmdpbiBhbHJlYWR5IGV4aXN0cy4KLSAqICAyMDAyMDIyNCBKb2VsIEJlY2tlciwgV2ltIFZhbiBTZWJyb2VjawotICoJMC4wNCBTdXBwb3J0IGZvciA4MjgwMUNBKE0pIGNoaXBzZXQsIHRpbWVyIG1hcmdpbiBuZWVkcyB0byBiZSA+IDMsCi0gKgkgICAgIGFkZCBzdXBwb3J0IGZvciBXRElPQ19TRVRUSU1FT1VUIGFuZCBXRElPQ19HRVRUSU1FT1VULgotICogIDIwMDIwNDEyIFJvYiBSYWRleiA8cm9iQG9zaW52ZXN0b3IuY29tPiwgV2ltIFZhbiBTZWJyb2VjawotICoJMC4wNSBGaXggcG9zc2libGUgdGltZXJfYWxpdmUgcmFjZSwgYWRkIGV4cGVjdCBjbG9zZSBzdXBwb3J0LAotICoJICAgICBjbGVhbiB1cCBpb2N0bHMgKFdESU9DX0dFVFNUQVRVUywgV0RJT0NfR0VUQk9PVFNUQVRVUyBhbmQKLSAqCSAgICAgV0RJT0NfU0VUT1BUSU9OUyksIG1hZGUgaTgxMHRjb19nZXRkZXZpY2UgX19pbml0LAotICoJICAgICByZW1vdmVkIGJvb3Rfc3RhdHVzLCByZW1vdmVkIHRjb190aW1lcl9yZWFkLAotICoJICAgICBhZGRlZCBzdXBwb3J0IGZvciA4MjgwMURCIGFuZCA4MjgwMUUgY2hpcHNldCwKLSAqCSAgICAgYWRkZWQgc3VwcG9ydCBmb3IgODI4MDFFQiBhbmQgODI4MEVSIGNoaXBzZXQsCi0gKgkgICAgIGdlbmVyYWwgY2xlYW51cC4KLSAqICAyMDAzMDkyMSBXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPgotICoJMC4wNiBjaGFuZ2UgaTgxMF9tYXJnaW4gdG8gaGVhcnRiZWF0LCB1c2UgbW9kdWxlX3BhcmFtLAotICoJICAgICBhZGRlZCBub3RpZnkgc3lzdGVtIHN1cHBvcnQsIHJlbmFtZWQgbW9kdWxlIHRvIGk4eHhfdGNvLgotICogIDIwMDUwMTI4IFdpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+Ci0gKgkwLjA3IEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBJQ0g0LU0sIElDSDYsIElDSDZSLCBJQ0g2LU0sIElDSDZXIGFuZCBJQ0g2UlcKLSAqCSAgICAgY2hpcHNldHMuIEFsc28gYWRkZWQgc3VwcG9ydCBmb3IgdGhlICJ1bmRvY3VtZW50ZWQiIElDSDcgY2hpcHNldC4KLSAqICAyMDA1MDgwNyBXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPgotICoJMC4wOCBNYWtlIHN1cmUgdGhhdCB0aGUgd2F0Y2hkb2cgaXMgb25seSAiYXJtZWQiIHdoZW4gc3RhcnRlZC4KLSAqCSAgICAgKEtlcm5lbCBCdWcgNDI1MSkKLSAqICAyMDA2MDQxNiBXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPgotICoJMC4wOSBSZW1vdmUgc3VwcG9ydCBmb3IgdGhlIElDSDYsIElDSDZSLCBJQ0g2LU0sIElDSDZXIGFuZCBJQ0g2UlcgYW5kCi0gKgkgICAgIElDSDcgY2hpcHNldHMuIChTZWUgS2VybmVsIEJ1ZyA2MDMxIC0gb3RoZXIgY29kZSB3aWxsIHN1cHBvcnQgdGhlc2UKLSAqCSAgICAgY2hpcHNldHMpCi0gKi8KLQotLyoKLSAqCUluY2x1ZGVzLCBkZWZpbmVzLCB2YXJpYWJsZXMsIG1vZHVsZSBwYXJhbWV0ZXJzLCAuLi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgotI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSAiaTh4eF90Y28uaCIKLQotLyogTW9kdWxlIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIFRDT19WRVJTSU9OICIwLjA5IgotI2RlZmluZSBUQ09fTU9EVUxFX05BTUUgImk4eHggVENPIHRpbWVyIgotI2RlZmluZSBUQ09fRFJJVkVSX05BTUUgICBUQ09fTU9EVUxFX05BTUUgIiwgdiIgVENPX1ZFUlNJT04KLSNkZWZpbmUgUEZYIFRDT19NT0RVTEVfTkFNRSAiOiAiCi0KLS8qIGludGVybmFsIHZhcmlhYmxlcyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBBQ1BJQkFTRTsKLXN0YXRpYyBzcGlubG9ja190IHRjb19sb2NrOwkvKiBHdWFyZHMgdGhlIGhhcmR3YXJlICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9hbGl2ZTsKLXN0YXRpYyBjaGFyIHRjb19leHBlY3RfY2xvc2U7Ci1zdGF0aWMgc3RydWN0IHBjaV9kZXYgKmk4eHhfdGNvX3BjaTsKLQotLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDMwCS8qIDMwIHNlYyBkZWZhdWx0IGhlYXJ0YmVhdCAoMjxoZWFydGJlYXQ8MzkpICovCi1zdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsgIC8qIGluIHNlY29uZHMgKi8KLW1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMjxoZWFydGJlYXQ8MzksIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOwotCi1zdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7Ci1tb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwotCi0vKgotICogU29tZSBUQ08gc3BlY2lmaWMgZnVuY3Rpb25zCi0gKi8KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHNlY29uZHNfdG9fdGlja3MoaW50IHNlY29uZHMpCi17Ci0JLyogdGhlIGludGVybmFsIHRpbWVyIGlzIHN0b3JlZCBhcyB0aWNrcyB3aGljaCBkZWNyZW1lbnQKLQkgKiBldmVyeSAwLjYgc2Vjb25kcyAqLwotCXJldHVybiAoc2Vjb25kcyAqIDEwKSAvIDY7Ci19Ci0KLXN0YXRpYyBpbnQgdGNvX3RpbWVyX3N0YXJ0ICh2b2lkKQotewotCXVuc2lnbmVkIGNoYXIgdmFsOwotCi0Jc3Bpbl9sb2NrKCZ0Y29fbG9jayk7Ci0KLQkvKiBkaXNhYmxlIGNoaXBzZXQncyBOT19SRUJPT1QgYml0ICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUgKGk4eHhfdGNvX3BjaSwgMHhkNCwgJnZhbCk7Ci0JdmFsICY9IDB4ZmQ7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlIChpOHh4X3Rjb19wY2ksIDB4ZDQsIHZhbCk7Ci0KLQkvKiBCaXQgMTE6IFRDTyBUaW1lciBIYWx0IC0+IDAgPSBUaGUgVENPIHRpbWVyIGlzIGVuYWJsZWQgdG8gY291bnQgKi8KLQl2YWwgPSBpbmIgKFRDTzFfQ05UICsgMSk7Ci0JdmFsICY9IDB4Zjc7Ci0Jb3V0YiAodmFsLCBUQ08xX0NOVCArIDEpOwotCXZhbCA9IGluYiAoVENPMV9DTlQgKyAxKTsKLQotCXNwaW5fdW5sb2NrKCZ0Y29fbG9jayk7Ci0KLQlpZiAodmFsICYgMHgwOCkKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRjb190aW1lcl9zdG9wICh2b2lkKQotewotCXVuc2lnbmVkIGNoYXIgdmFsLCB2YWwxOwotCi0Jc3Bpbl9sb2NrKCZ0Y29fbG9jayk7Ci0JLyogQml0IDExOiBUQ08gVGltZXIgSGFsdCAtPiAxID0gVGhlIFRDTyB0aW1lciBpcyBkaXNhYmxlZCAqLwotCXZhbCA9IGluYiAoVENPMV9DTlQgKyAxKTsKLQl2YWwgfD0gMHgwODsKLQlvdXRiICh2YWwsIFRDTzFfQ05UICsgMSk7Ci0JdmFsID0gaW5iIChUQ08xX0NOVCArIDEpOwotCi0JLyogU2V0IHRoZSBOT19SRUJPT1QgYml0IHRvIHByZXZlbnQgbGF0ZXIgcmVib290cywganVzdCBmb3Igc3VyZSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlIChpOHh4X3Rjb19wY2ksIDB4ZDQsICZ2YWwxKTsKLQl2YWwxIHw9IDB4MDI7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlIChpOHh4X3Rjb19wY2ksIDB4ZDQsIHZhbDEpOwotCi0Jc3Bpbl91bmxvY2soJnRjb19sb2NrKTsKLQotCWlmICgodmFsICYgMHgwOCkgPT0gMCkKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRjb190aW1lcl9rZWVwYWxpdmUgKHZvaWQpCi17Ci0Jc3Bpbl9sb2NrKCZ0Y29fbG9jayk7Ci0JLyogUmVsb2FkIHRoZSB0aW1lciBieSB3cml0aW5nIHRvIHRoZSBUQ08gVGltZXIgUmVsb2FkIHJlZ2lzdGVyICovCi0Jb3V0YiAoMHgwMSwgVENPMV9STEQpOwotCXNwaW5fdW5sb2NrKCZ0Y29fbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdGNvX3RpbWVyX3NldF9oZWFydGJlYXQgKGludCB0KQotewotCXVuc2lnbmVkIGNoYXIgdmFsOwotCXVuc2lnbmVkIGNoYXIgdG1ydmFsOwotCi0JdG1ydmFsID0gc2Vjb25kc190b190aWNrcyh0KTsKLQkvKiBmcm9tIHRoZSBzcGVjczogKi8KLQkvKiAiVmFsdWVzIG9mIDBoLTNoIGFyZSBpZ25vcmVkIGFuZCBzaG91bGQgbm90IGJlIGF0dGVtcHRlZCIgKi8KLQlpZiAodG1ydmFsID4gMHgzZiB8fCB0bXJ2YWwgPCAweDA0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFdyaXRlIG5ldyBoZWFydGJlYXQgdG8gd2F0Y2hkb2cgKi8KLQlzcGluX2xvY2soJnRjb19sb2NrKTsKLQl2YWwgPSBpbmIgKFRDTzFfVE1SKTsKLQl2YWwgJj0gMHhjMDsKLQl2YWwgfD0gdG1ydmFsOwotCW91dGIgKHZhbCwgVENPMV9UTVIpOwotCXZhbCA9IGluYiAoVENPMV9UTVIpOwotCXNwaW5fdW5sb2NrKCZ0Y29fbG9jayk7Ci0KLQlpZiAoKHZhbCAmIDB4M2YpICE9IHRtcnZhbCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQloZWFydGJlYXQgPSB0OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRjb190aW1lcl9nZXRfdGltZWxlZnQgKGludCAqdGltZV9sZWZ0KQotewotCXVuc2lnbmVkIGNoYXIgdmFsOwotCi0Jc3Bpbl9sb2NrKCZ0Y29fbG9jayk7Ci0KLQkvKiByZWFkIHRoZSBUQ08gVGltZXIgKi8KLQl2YWwgPSBpbmIgKFRDTzFfUkxEKTsKLQl2YWwgJj0gMHgzZjsKLQotCXNwaW5fdW5sb2NrKCZ0Y29fbG9jayk7Ci0KLQkqdGltZV9sZWZ0ID0gKGludCkoKHZhbCAqIDYpIC8gMTApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKgkvZGV2L3dhdGNoZG9nIGhhbmRsaW5nCi0gKi8KLQotc3RhdGljIGludCBpOHh4X3Rjb19vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQkvKiAvZGV2L3dhdGNoZG9nIGNhbiBvbmx5IGJlIG9wZW5lZCBvbmNlICovCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJnRpbWVyX2FsaXZlKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qCi0JICogICAgICBSZWxvYWQgYW5kIGFjdGl2YXRlIHRpbWVyCi0JICovCi0JdGNvX3RpbWVyX2tlZXBhbGl2ZSAoKTsKLQl0Y29fdGltZXJfc3RhcnQgKCk7Ci0JcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwotfQotCi1zdGF0aWMgaW50IGk4eHhfdGNvX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCS8qCi0JICogICAgICBTaHV0IG9mZiB0aGUgdGltZXIuCi0JICovCi0JaWYgKHRjb19leHBlY3RfY2xvc2UgPT0gNDIpIHsKLQkJdGNvX3RpbWVyX3N0b3AgKCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOwotCQl0Y29fdGltZXJfa2VlcGFsaXZlICgpOwotCX0KLQljbGVhcl9iaXQoMCwgJnRpbWVyX2FsaXZlKTsKLQl0Y29fZXhwZWN0X2Nsb3NlID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgaTh4eF90Y29fd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKLQkJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqIHBwb3MpCi17Ci0JLyogU2VlIGlmIHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICdWJyBhbmQgcmVsb2FkIHRoZSB0aW1lciAqLwotCWlmIChsZW4pIHsKLQkJaWYgKCFub3dheW91dCkgewotCQkJc2l6ZV90IGk7Ci0KLQkJCS8qIG5vdGU6IGp1c3QgaW4gY2FzZSBzb21lb25lIHdyb3RlIHRoZSBtYWdpYyBjaGFyYWN0ZXIKLQkJCSAqIGZpdmUgbW9udGhzIGFnby4uLiAqLwotCQkJdGNvX2V4cGVjdF9jbG9zZSA9IDA7Ci0KLQkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUgbWFnaWMgY2hhcmFjdGVyICovCi0JCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7Ci0JCQkJY2hhciBjOwotCQkJCWlmKGdldF91c2VyKGMsIGRhdGEraSkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCWlmIChjID09ICdWJykKLQkJCQkJdGNvX2V4cGVjdF9jbG9zZSA9IDQyOwotCQkJfQotCQl9Ci0KLQkJLyogc29tZW9uZSB3cm90ZSB0byB1cywgd2Ugc2hvdWxkIHJlbG9hZCB0aGUgdGltZXIgKi8KLQkJdGNvX3RpbWVyX2tlZXBhbGl2ZSAoKTsKLQl9Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludCBpOHh4X3Rjb19pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCBuZXdfb3B0aW9ucywgcmV0dmFsID0gLUVJTlZBTDsKLQlpbnQgbmV3X2hlYXJ0YmVhdDsKLQlpbnQgdGltZV9sZWZ0OwotCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCWludCBfX3VzZXIgKnAgPSBhcmdwOwotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKLQkJLm9wdGlvbnMgPQkJV0RJT0ZfU0VUVElNRU9VVCB8Ci0JCQkJCVdESU9GX0tFRVBBTElWRVBJTkcgfAotCQkJCQlXRElPRl9NQUdJQ0NMT1NFLAotCQkuZmlybXdhcmVfdmVyc2lvbiA9CTAsCi0JCS5pZGVudGl0eSA9CQlUQ09fTU9EVUxFX05BTUUsCi0JfTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKLQkJCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmlkZW50LAotCQkJCXNpemVvZiAoaWRlbnQpKSA/IC1FRkFVTFQgOiAwOwotCi0JCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgotCQljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6Ci0JCQlyZXR1cm4gcHV0X3VzZXIgKDAsIHApOwotCi0JCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgotCQkJdGNvX3RpbWVyX2tlZXBhbGl2ZSAoKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgV0RJT0NfU0VUT1BUSU9OUzoKLQkJewotCQkJaWYgKGdldF91c2VyIChuZXdfb3B0aW9ucywgcCkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJCWlmIChuZXdfb3B0aW9ucyAmIFdESU9TX0RJU0FCTEVDQVJEKSB7Ci0JCQkJdGNvX3RpbWVyX3N0b3AgKCk7Ci0JCQkJcmV0dmFsID0gMDsKLQkJCX0KLQotCQkJaWYgKG5ld19vcHRpb25zICYgV0RJT1NfRU5BQkxFQ0FSRCkgewotCQkJCXRjb190aW1lcl9rZWVwYWxpdmUgKCk7Ci0JCQkJdGNvX3RpbWVyX3N0YXJ0ICgpOwotCQkJCXJldHZhbCA9IDA7Ci0JCQl9Ci0KLQkJCXJldHVybiByZXR2YWw7Ci0JCX0KLQotCQljYXNlIFdESU9DX1NFVFRJTUVPVVQ6Ci0JCXsKLQkJCWlmIChnZXRfdXNlcihuZXdfaGVhcnRiZWF0LCBwKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkJaWYgKHRjb190aW1lcl9zZXRfaGVhcnRiZWF0KG5ld19oZWFydGJlYXQpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQl0Y29fdGltZXJfa2VlcGFsaXZlICgpOwotCQkJLyogRmFsbCAqLwotCQl9Ci0KLQkJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgotCQkJcmV0dXJuIHB1dF91c2VyKGhlYXJ0YmVhdCwgcCk7Ci0KLQkJY2FzZSBXRElPQ19HRVRUSU1FTEVGVDoKLQkJewotCQkJaWYgKHRjb190aW1lcl9nZXRfdGltZWxlZnQoJnRpbWVfbGVmdCkpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCXJldHVybiBwdXRfdXNlcih0aW1lX2xlZnQsIHApOwotCQl9Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PVFRZOwotCX0KLX0KLQotLyoKLSAqCU5vdGlmeSBzeXN0ZW0KLSAqLwotCi1zdGF0aWMgaW50IGk4eHhfdGNvX25vdGlmeV9zeXMgKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCi17Ci0JaWYgKGNvZGU9PVNZU19ET1dOIHx8IGNvZGU9PVNZU19IQUxUKSB7Ci0JCS8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KLQkJdGNvX3RpbWVyX3N0b3AgKCk7Ci0JfQotCi0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCi0vKgotICoJS2VybmVsIEludGVyZmFjZXMKLSAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpOHh4X3Rjb19mb3BzID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5sbHNlZWsgPQlub19sbHNlZWssCi0JLndyaXRlID0JaTh4eF90Y29fd3JpdGUsCi0JLmlvY3RsID0JaTh4eF90Y29faW9jdGwsCi0JLm9wZW4gPQkJaTh4eF90Y29fb3BlbiwKLQkucmVsZWFzZSA9CWk4eHhfdGNvX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgaTh4eF90Y29fbWlzY2RldiA9IHsKLQkubWlub3IgPQlXQVRDSERPR19NSU5PUiwKLQkubmFtZSA9CQkid2F0Y2hkb2ciLAotCS5mb3BzID0JCSZpOHh4X3Rjb19mb3BzLAotfTsKLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpOHh4X3Rjb19ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9CWk4eHhfdGNvX25vdGlmeV9zeXMsCi19OwotCi0vKgotICogRGF0YSBmb3IgUENJIGRyaXZlciBpbnRlcmZhY2UKLSAqCi0gKiBUaGlzIGRhdGEgb25seSBleGlzdHMgZm9yIGV4cG9ydGluZyB0aGUgc3VwcG9ydGVkCi0gKiBQQ0kgaWRzIHZpYSBNT0RVTEVfREVWSUNFX1RBQkxFLiAgV2UgZG8gbm90IGFjdHVhbGx5Ci0gKiByZWdpc3RlciBhIHBjaV9kcml2ZXIsIGJlY2F1c2Ugc29tZW9uZSBlbHNlIG1pZ2h0IG9uZSBkYXkKLSAqIHdhbnQgdG8gcmVnaXN0ZXIgYW5vdGhlciBkcml2ZXIgb24gdGhlIHNhbWUgUENJIGlkLgotICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaTh4eF90Y29fcGNpX3RibFtdID0gewotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMCkgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzApIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV8wKSB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMTApIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8wKSB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTIpIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8wKSB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTIpIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFXzApIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8wKSB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl8xKSB9LAotCXsgfSwJCQkvKiBFbmQgb2YgbGlzdCAqLwotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgaTh4eF90Y29fcGNpX3RibCk7Ci0KLS8qCi0gKglJbml0ICYgZXhpdCByb3V0aW5lcwotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIF9faW5pdCBpOHh4X3Rjb19nZXRkZXZpY2UgKHZvaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7Ci0JdTggdmFsMSwgdmFsMjsKLQl1MTYgYmFkcjsKLQkvKgotCSAqICAgICAgRmluZCB0aGUgUENJIGRldmljZQotCSAqLwotCi0JZm9yX2VhY2hfcGNpX2RldihkZXYpCi0JCWlmIChwY2lfbWF0Y2hfaWQoaTh4eF90Y29fcGNpX3RibCwgZGV2KSkgewotCQkJaTh4eF90Y29fcGNpID0gZGV2OwotCQkJYnJlYWs7Ci0JCX0KLQotCWlmIChpOHh4X3Rjb19wY2kpIHsKLQkJLyoKLQkJICogICAgICBGaW5kIHRoZSBBQ1BJIGJhc2UgSS9PIGFkZHJlc3Mgd2hpY2ggaXMgdGhlIGJhc2UKLQkJICogICAgICBmb3IgdGhlIFRDTyByZWdpc3RlcnMgKFRDT0JBU0U9QUNQSUJBU0UgKyAweDYwKQotCQkgKiAgICAgIEFDUElCQVNFIGlzIGJpdHMgWzE1OjddIGZyb20gMHg0MC0weDQzCi0JCSAqLwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZSAoaTh4eF90Y29fcGNpLCAweDQwLCAmdmFsMSk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlIChpOHh4X3Rjb19wY2ksIDB4NDEsICZ2YWwyKTsKLQkJYmFkciA9ICgodmFsMiA8PCAxKSB8ICh2YWwxID4+IDcpKSA8PCA3OwotCQlBQ1BJQkFTRSA9IGJhZHI7Ci0JCS8qIFNvbWV0aGluZydzIHdyb25nIGhlcmUsIEFDUElCQVNFIGhhcyB0byBiZSBzZXQgKi8KLQkJaWYgKGJhZHIgPT0gMHgwMDAxIHx8IGJhZHIgPT0gMHgwMDAwKSB7Ci0JCQlwcmludGsgKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIGdldCBUQ09CQVNFIGFkZHJlc3NcbiIpOwotCQkJcGNpX2Rldl9wdXQoaTh4eF90Y29fcGNpKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyogQ2hlY2sgY2hpcHNldCdzIE5PX1JFQk9PVCBiaXQgKi8KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUgKGk4eHhfdGNvX3BjaSwgMHhkNCwgJnZhbDEpOwotCQlpZiAodmFsMSAmIDB4MDIpIHsKLQkJCXZhbDEgJj0gMHhmZDsKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZSAoaTh4eF90Y29fcGNpLCAweGQ0LCB2YWwxKTsKLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlIChpOHh4X3Rjb19wY2ksIDB4ZDQsICZ2YWwxKTsKLQkJCWlmICh2YWwxICYgMHgwMikgewotCQkJCXByaW50ayAoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVzZXQgTk9fUkVCT09UIGZsYWcsIHJlYm9vdCBkaXNhYmxlZCBieSBoYXJkd2FyZVxuIik7Ci0JCQkJcGNpX2Rldl9wdXQoaTh4eF90Y29fcGNpKTsKLQkJCQlyZXR1cm4gMDsJLyogQ2Fubm90IHJlc2V0IE5PX1JFQk9PVCBiaXQgKi8KLQkJCX0KLQkJfQotCQkvKiBEaXNhYmxlIHJlYm9vdHMgdW50aWxsIHRoZSB3YXRjaGRvZyBzdGFydHMgKi8KLQkJdmFsMSB8PSAweDAyOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUgKGk4eHhfdGNvX3BjaSwgMHhkNCwgdmFsMSk7Ci0KLQkJLyogU2V0IHRoZSBUQ09fRU4gYml0IGluIFNNSV9FTiByZWdpc3RlciAqLwotCQlpZiAoIXJlcXVlc3RfcmVnaW9uIChTTUlfRU4gKyAxLCAxLCAiaTh4eCBUQ08iKSkgewotCQkJcHJpbnRrIChLRVJOX0VSUiBQRlggIkkvTyBhZGRyZXNzIDB4JTA0eCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJCQlTTUlfRU4gKyAxKTsKLQkJCXBjaV9kZXZfcHV0KGk4eHhfdGNvX3BjaSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQl2YWwxID0gaW5iIChTTUlfRU4gKyAxKTsKLQkJdmFsMSAmPSAweGRmOwotCQlvdXRiICh2YWwxLCBTTUlfRU4gKyAxKTsKLQkJcmVsZWFzZV9yZWdpb24gKFNNSV9FTiArIDEsIDEpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHdhdGNoZG9nX2luaXQgKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXNwaW5fbG9ja19pbml0KCZ0Y29fbG9jayk7Ci0KLQkvKiBDaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgaXMgdGhlcmUgKi8KLQlpZiAoIWk4eHhfdGNvX2dldGRldmljZSAoKSB8fCBpOHh4X3Rjb19wY2kgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uIChUQ09CQVNFLCAweDEwLCAiaTh4eCBUQ08iKSkgewotCQlwcmludGsgKEtFUk5fRVJSIFBGWCAiSS9PIGFkZHJlc3MgMHglMDR4IGFscmVhZHkgaW4gdXNlXG4iLAotCQkJVENPQkFTRSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIENsZWFyIG91dCB0aGUgKHByb2JhYmx5IG9sZCkgc3RhdHVzICovCi0Jb3V0YiAoMCwgVENPMV9TVFMpOwotCW91dGIgKDMsIFRDTzJfU1RTKTsKLQotCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLwotCWlmICh0Y29fdGltZXJfc2V0X2hlYXJ0YmVhdCAoaGVhcnRiZWF0KSkgewotCQloZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7Ci0JCXRjb190aW1lcl9zZXRfaGVhcnRiZWF0IChoZWFydGJlYXQpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMjxoZWFydGJlYXQ8MzksIHVzaW5nICVkXG4iLAotCQkJaGVhcnRiZWF0KTsKLQl9Ci0KLQlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmk4eHhfdGNvX25vdGlmaWVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwKLQkJCXJldCk7Ci0JCWdvdG8gdW5yZWdfcmVnaW9uOwotCX0KLQotCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmk4eHhfdGNvX21pc2NkZXYpOwotCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKLQkJCVdBVENIRE9HX01JTk9SLCByZXQpOwotCQlnb3RvIHVucmVnX25vdGlmaWVyOwotCX0KLQotCXRjb190aW1lcl9zdG9wICgpOwotCi0JcHJpbnRrIChLRVJOX0lORk8gUEZYICJpbml0aWFsaXplZCAoMHglMDR4KS4gaGVhcnRiZWF0PSVkIHNlYyAobm93YXlvdXQ9JWQpXG4iLAotCQlUQ09CQVNFLCBoZWFydGJlYXQsIG5vd2F5b3V0KTsKLQotCXJldHVybiAwOwotCi11bnJlZ19ub3RpZmllcjoKLQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmaTh4eF90Y29fbm90aWZpZXIpOwotdW5yZWdfcmVnaW9uOgotCXJlbGVhc2VfcmVnaW9uIChUQ09CQVNFLCAweDEwKTsKLW91dDoKLQlwY2lfZGV2X3B1dChpOHh4X3Rjb19wY2kpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB3YXRjaGRvZ19jbGVhbnVwICh2b2lkKQotewotCS8qIFN0b3AgdGhlIHRpbWVyIGJlZm9yZSB3ZSBsZWF2ZSAqLwotCWlmICghbm93YXlvdXQpCi0JCXRjb190aW1lcl9zdG9wICgpOwotCi0JLyogRGVyZWdpc3RlciAqLwotCW1pc2NfZGVyZWdpc3RlciAoJmk4eHhfdGNvX21pc2NkZXYpOwotCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZpOHh4X3Rjb19ub3RpZmllcik7Ci0JcmVsZWFzZV9yZWdpb24gKFRDT0JBU0UsIDB4MTApOwotCi0JcGNpX2Rldl9wdXQoaTh4eF90Y29fcGNpKTsKLX0KLQotbW9kdWxlX2luaXQod2F0Y2hkb2dfaW5pdCk7Ci1tb2R1bGVfZXhpdCh3YXRjaGRvZ19jbGVhbnVwKTsKLQotTU9EVUxFX0FVVEhPUigiTmlscyBGYWVyYmVyIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlRDTyB0aW1lciBkcml2ZXIgZm9yIGk4eHggY2hpcHNldHMiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pOHh4X3Rjby5oIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k4eHhfdGNvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMTRlYjguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k4eHhfdGNvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICoJaTh4eF90Y286CVRDTyB0aW1lciBkcml2ZXIgZm9yIGk4eHggY2hpcHNldHMKLSAqCi0gKgkoYykgQ29weXJpZ2h0IDIwMDAga2VybmVsIGNvbmNlcHRzIDxuaWxzQGtlcm5lbGNvbmNlcHRzLmRlPiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCQkJCWh0dHA6Ly93d3cua2VybmVsY29uY2VwdHMuZGUKLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCU5laXRoZXIga2VybmVsIGNvbmNlcHRzIG5vciBOaWxzIEZhZXJiZXIgYWRtaXQgbGlhYmlsaXR5IG5vciBwcm92aWRlCi0gKgl3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQKLSAqCSJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KLSAqCi0gKgkoYykgQ29weXJpZ2h0IDIwMDAJa2VybmVsIGNvbmNlcHRzIDxuaWxzQGtlcm5lbGNvbmNlcHRzLmRlPgotICoJCQkJZGV2ZWxvcGVkIGZvcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKZW50cm8gQUcsIEhhYXIvTXVuaWNoIChHZXJtYW55KQotICoKLSAqCVRDTyB0aW1lciBkcml2ZXIgZm9yIGk4eHggY2hpcHNldHMKLSAqCWJhc2VkIG9uIHNvZnRkb2cuYyBieSBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgotICoKLSAqCUZvciBoaXN0b3J5IGFuZCB0aGUgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgSS9PIENvbnRyb2xsZXIgSHViJ3MKLSAqCXNlZSBpOHh4X3Rjby5jCi0gKi8KLQotCi0vKgotICogU29tZSBhZGRyZXNzIGRlZmluaXRpb25zIGZvciB0aGUgVENPCi0gKi8KLQotI2RlZmluZQlUQ09CQVNFCQlBQ1BJQkFTRSArIDB4NjAJLyogVENPIGJhc2UgYWRkcmVzcwkJKi8KLSNkZWZpbmUgVENPMV9STEQJVENPQkFTRSArIDB4MDAJLyogVENPIFRpbWVyIFJlbG9hZCBhbmQgQ3VycmVudCBWYWx1ZSAqLwotI2RlZmluZSBUQ08xX1RNUglUQ09CQVNFICsgMHgwMQkvKiBUQ08gVGltZXIgSW5pdGlhbCBWYWx1ZQkqLwotI2RlZmluZQlUQ08xX0RBVF9JTglUQ09CQVNFICsgMHgwMgkvKiBUQ08gRGF0YSBJbiBSZWdpc3RlcgkJKi8KLSNkZWZpbmUJVENPMV9EQVRfT1VUCVRDT0JBU0UgKyAweDAzCS8qIFRDTyBEYXRhIE91dCBSZWdpc3RlcgkqLwotI2RlZmluZQlUQ08xX1NUUwlUQ09CQVNFICsgMHgwNAkvKiBUQ08xIFN0YXR1cyBSZWdpc3RlcgkJKi8KLSNkZWZpbmUJVENPMl9TVFMJVENPQkFTRSArIDB4MDYJLyogVENPMiBTdGF0dXMgUmVnaXN0ZXIJCSovCi0jZGVmaW5lIFRDTzFfQ05UCVRDT0JBU0UgKyAweDA4CS8qIFRDTzEgQ29udHJvbCBSZWdpc3RlcgkqLwotI2RlZmluZSBUQ08yX0NOVAlUQ09CQVNFICsgMHgwYQkvKiBUQ08yIENvbnRyb2wgUmVnaXN0ZXIJKi8KLQotI2RlZmluZQlTTUlfRU4JCUFDUElCQVNFICsgMHgzMAkvKiBTTUkgQ29udHJvbCBhbmQgRW5hYmxlIFJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaVRDT193ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pVENPX3dkdC5jCmluZGV4IDNjOTY4NGMuLmVhYzRmOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pVENPX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pVENPX3dkdC5jCkBAIC01NzEsNyArNTcxLDcgQEAKIAkgKiAgICAgIEFDUElCQVNFIGlzIGJpdHMgWzE1OjddIGZyb20gMHg0MC0weDQzCiAJICovCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsICZiYXNlX2FkZHJlc3MpOwotCWJhc2VfYWRkcmVzcyAmPSAweDAwMDA3ZjgwOworCWJhc2VfYWRkcmVzcyAmPSAweDAwMDBmZjgwOwogCWlmIChiYXNlX2FkZHJlc3MgPT0gMHgwMDAwMDAwMCkgewogCQkvKiBTb21ldGhpbmcncyB3cm9uZyBoZXJlLCBBQ1BJQkFTRSBoYXMgdG8gYmUgc2V0ICovCiAJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byBnZXQgVENPQkFTRSBhZGRyZXNzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pYm1hc3IuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pYm1hc3IuYwppbmRleCA4MTk1ZjUwLi45NDE1NWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaWJtYXNyLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2libWFzci5jCkBAIC0zNjcsMTggKzM2NywxNyBAQAogCWlmICghYXNyX3R5cGUpCiAJCXJldHVybiAtRU5PREVWOwogCisJcmMgPSBhc3JfZ2V0X2Jhc2VfYWRkcmVzcygpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJcmMgPSBtaXNjX3JlZ2lzdGVyKCZhc3JfbWlzY2Rldik7CiAJaWYgKHJjIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihhc3JfYmFzZSwgYXNyX2xlbmd0aCk7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZWdpc3RlciBtaXNjIGRldmljZVxuIik7CiAJCXJldHVybiByYzsKIAl9CiAKLQlyYyA9IGFzcl9nZXRfYmFzZV9hZGRyZXNzKCk7Ci0JaWYgKHJjKSB7Ci0JCW1pc2NfZGVyZWdpc3RlcigmYXNyX21pc2NkZXYpOwotCQlyZXR1cm4gcmM7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9peHAyMDAwX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2l4cDIwMDBfd2R0LmMKaW5kZXggZmQ5NTVkYi4uZGM3NTQ4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2l4cDIwMDBfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2l4cDIwMDBfd2R0LmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogbW9kdWxlX2luaXQoaXhwMjAwMF93ZHRfaW5pdCk7CiBtb2R1bGVfZXhpdChpeHAyMDAwX3dkdF9leGl0KTsKIAotTU9EVUxFX0FVVEhPUigiRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldCI+KTsKK01PRFVMRV9BVVRIT1IoIkRlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklYUDIwMDAgTmV0d29yayBQcm9jZXNzb3IgV2F0Y2hkb2ciKTsKIAogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9rczg2OTVfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cva3M4Njk1X3dkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNTBmYjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cva3M4Njk1X3dkdC5jCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogV2F0Y2hkb2cgZHJpdmVyIGZvciBLZW5kaW4vTWljcmVsIEtTODY5NS4KKyAqCisgKiAoQykgMjAwNyBBbmRyZXcgVmljdG9yCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy10aW1lci5oPgorCisKKyNkZWZpbmUgV0RUX0RFRkFVTFRfVElNRQk1CS8qIHNlY29uZHMgKi8KKyNkZWZpbmUgV0RUX01BWF9USU1FCQkxNzEJLyogc2Vjb25kcyAqLworCitzdGF0aWMgaW50IHdkdF90aW1lID0gV0RUX0RFRkFVTFRfVElNRTsKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKKworbW9kdWxlX3BhcmFtKHdkdF90aW1lLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh3ZHRfdGltZSwgIldhdGNoZG9nIHRpbWUgaW4gc2Vjb25kcy4gKGRlZmF1bHQ9Il9fTU9EVUxFX1NUUklORyhXRFRfREVGQVVMVF9USU1FKSAiKSIpOworCisjaWZkZWYgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCittb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworI2VuZGlmCisKKworc3RhdGljIHVuc2lnbmVkIGxvbmcga3M4Njk1d2R0X2J1c3k7CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKworLyoKKyAqIERpc2FibGUgdGhlIHdhdGNoZG9nLgorICovCitzdGF0aWMgdm9pZCBpbmxpbmUga3M4Njk1X3dkdF9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0bWNvbjsKKworCS8qIGRpc2FibGUgdGltZXIwICovCisJdG1jb24gPSBfX3Jhd19yZWFkbChLUzg2OTVfVE1SX1ZBICsgS1M4Njk1X1RNQ09OKTsKKwlfX3Jhd193cml0ZWwodG1jb24gJiB+VE1DT05fVDBFTiwgS1M4Njk1X1RNUl9WQSArIEtTODY5NV9UTUNPTik7Cit9CisKKy8qCisgKiBFbmFibGUgYW5kIHJlc2V0IHRoZSB3YXRjaGRvZy4KKyAqLworc3RhdGljIHZvaWQgaW5saW5lIGtzODY5NV93ZHRfc3RhcnQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtY29uOworCXVuc2lnbmVkIGxvbmcgdHZhbCA9IHdkdF90aW1lICogQ0xPQ0tfVElDS19SQVRFOworCisJLyogZGlzYWJsZSB0aW1lcjAgKi8KKwl0bWNvbiA9IF9fcmF3X3JlYWRsKEtTODY5NV9UTVJfVkEgKyBLUzg2OTVfVE1DT04pOworCV9fcmF3X3dyaXRlbCh0bWNvbiAmIH5UTUNPTl9UMEVOLCBLUzg2OTVfVE1SX1ZBICsgS1M4Njk1X1RNQ09OKTsKKworCS8qIHByb2dyYW0gdGltZXIwICovCisJX19yYXdfd3JpdGVsKHR2YWwgfCBUMFRDX1dBVENIRE9HLCBLUzg2OTVfVE1SX1ZBICsgS1M4Njk1X1QwVEMpOworCisJLyogcmUtZW5hYmxlIHRpbWVyMCAqLworCXRtY29uID0gX19yYXdfcmVhZGwoS1M4Njk1X1RNUl9WQSArIEtTODY5NV9UTUNPTik7CisJX19yYXdfd3JpdGVsKHRtY29uIHwgVE1DT05fVDBFTiwgS1M4Njk1X1RNUl9WQSArIEtTODY5NV9UTUNPTik7Cit9CisKKy8qCisgKiBSZWxvYWQgdGhlIHdhdGNoZG9nIHRpbWVyLiAgKGllLCBwYXQgdGhlIHdhdGNoZG9nKQorICovCitzdGF0aWMgdm9pZCBpbmxpbmUga3M4Njk1X3dkdF9yZWxvYWQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtY29uOworCisJLyogZGlzYWJsZSwgdGhlbiByZS1lbmFibGUgdGltZXIwICovCisJdG1jb24gPSBfX3Jhd19yZWFkbChLUzg2OTVfVE1SX1ZBICsgS1M4Njk1X1RNQ09OKTsKKwlfX3Jhd193cml0ZWwodG1jb24gJiB+VE1DT05fVDBFTiwgS1M4Njk1X1RNUl9WQSArIEtTODY5NV9UTUNPTik7CisJX19yYXdfd3JpdGVsKHRtY29uIHwgVE1DT05fVDBFTiwgS1M4Njk1X1RNUl9WQSArIEtTODY5NV9UTUNPTik7Cit9CisKKy8qCisgKiBDaGFuZ2UgdGhlIHdhdGNoZG9nIHRpbWUgaW50ZXJ2YWwuCisgKi8KK3N0YXRpYyBpbnQga3M4Njk1X3dkdF9zZXR0aW1lb3V0KGludCBuZXdfdGltZSkKK3sKKwkvKgorCSAqIEFsbCBjb3VudGluZyBvY2N1cnMgYXQgU0xPV19DTE9DSyAvIDEyOCA9IDAuMjU2IEh6CisJICoKKwkgKiBTaW5jZSBXRFYgaXMgYSAxNi1iaXQgY291bnRlciwgdGhlIG1heGltdW0gcGVyaW9kIGlzCisJICogNjU1MzYgLyAwLjI1NiA9IDI1NiBzZWNvbmRzLgorCSAqLworCWlmICgobmV3X3RpbWUgPD0gMCkgfHwgKG5ld190aW1lID4gV0RUX01BWF9USU1FKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZXQgbmV3IHdhdGNoZG9nIHRpbWUuIEl0IHdpbGwgYmUgdXNlZCB3aGVuIGtzODY5NV93ZHRfc3RhcnQoKSBpcyBjYWxsZWQuICovCisJd2R0X3RpbWUgPSBuZXdfdGltZTsKKwlyZXR1cm4gMDsKK30KKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworCisvKgorICogV2F0Y2hkb2cgZGV2aWNlIGlzIG9wZW5lZCwgYW5kIHdhdGNoZG9nIHN0YXJ0cyBydW5uaW5nLgorICovCitzdGF0aWMgaW50IGtzODY5NV93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAma3M4Njk1d2R0X2J1c3kpKQorCQlyZXR1cm4gLUVCVVNZOworCisJa3M4Njk1X3dkdF9zdGFydCgpOworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKK30KKworLyoKKyAqIENsb3NlIHRoZSB3YXRjaGRvZyBkZXZpY2UuCisgKiBJZiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgTk9UIGRlZmluZWQgdGhlbiB0aGUgd2F0Y2hkb2cgaXMgYWxzbworICogIGRpc2FibGVkLgorICovCitzdGF0aWMgaW50IGtzODY5NV93ZHRfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKCFub3dheW91dCkKKwkJa3M4Njk1X3dkdF9zdG9wKCk7CS8qIERpc2FibGUgdGhlIHdhdGNoZG9nIHdoZW4gZmlsZSBpcyBjbG9zZWQgKi8KKworCWNsZWFyX2JpdCgwLCAma3M4Njk1d2R0X2J1c3kpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8ga3M4Njk1X3dkdF9pbmZvID0geworCS5pZGVudGl0eQk9ICJrczg2OTUgd2F0Y2hkb2ciLAorCS5vcHRpb25zCT0gV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcsCit9OworCisvKgorICogSGFuZGxlIGNvbW1hbmRzIGZyb20gdXNlci1zcGFjZS4KKyAqLworc3RhdGljIGludCBrczg2OTVfd2R0X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlpbnQgX191c2VyICpwID0gYXJncDsKKwlpbnQgbmV3X3ZhbHVlOworCisJc3dpdGNoKGNtZCkgeworCQljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJCWtzODY5NV93ZHRfcmVsb2FkKCk7CS8qIHBhdCB0aGUgd2F0Y2hkb2cgKi8KKwkJCXJldHVybiAwOworCisJCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKKwkJCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmtzODY5NV93ZHRfaW5mbywgc2l6ZW9mKGtzODY5NV93ZHRfaW5mbykpID8gLUVGQVVMVCA6IDA7CisKKwkJY2FzZSBXRElPQ19TRVRUSU1FT1VUOgorCQkJaWYgKGdldF91c2VyKG5ld192YWx1ZSwgcCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWlmIChrczg2OTVfd2R0X3NldHRpbWVvdXQobmV3X3ZhbHVlKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJLyogRW5hYmxlIG5ldyB0aW1lIHZhbHVlICovCisJCQlrczg2OTVfd2R0X3N0YXJ0KCk7CisKKwkJCS8qIFJldHVybiBjdXJyZW50IHZhbHVlICovCisJCQlyZXR1cm4gcHV0X3VzZXIod2R0X3RpbWUsIHApOworCisJCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJCXJldHVybiBwdXRfdXNlcih3ZHRfdGltZSwgcCk7CisKKwkJY2FzZSBXRElPQ19HRVRTVEFUVVM6CisJCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJCXJldHVybiBwdXRfdXNlcigwLCBwKTsKKworCQljYXNlIFdESU9DX1NFVE9QVElPTlM6CisJCQlpZiAoZ2V0X3VzZXIobmV3X3ZhbHVlLCBwKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJaWYgKG5ld192YWx1ZSAmIFdESU9TX0RJU0FCTEVDQVJEKQorCQkJCWtzODY5NV93ZHRfc3RvcCgpOworCQkJaWYgKG5ld192YWx1ZSAmIFdESU9TX0VOQUJMRUNBUkQpCisJCQkJa3M4Njk1X3dkdF9zdGFydCgpOworCQkJcmV0dXJuIDA7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PVFRZOworCX0KK30KKworLyoKKyAqIFBhdCB0aGUgd2F0Y2hkb2cgd2hlbmV2ZXIgZGV2aWNlIGlzIHdyaXR0ZW4gdG8uCisgKi8KK3N0YXRpYyBzc2l6ZV90IGtzODY5NV93ZHRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwlrczg2OTVfd2R0X3JlbG9hZCgpOwkJLyogcGF0IHRoZSB3YXRjaGRvZyAqLworCXJldHVybiBsZW47Cit9CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga3M4Njk1d2R0X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS5pb2N0bAkJPSBrczg2OTVfd2R0X2lvY3RsLAorCS5vcGVuCQk9IGtzODY5NV93ZHRfb3BlbiwKKwkucmVsZWFzZQk9IGtzODY5NV93ZHRfY2xvc2UsCisJLndyaXRlCQk9IGtzODY5NV93ZHRfd3JpdGUsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Uga3M4Njk1d2R0X21pc2NkZXYgPSB7CisJLm1pbm9yCQk9IFdBVENIRE9HX01JTk9SLAorCS5uYW1lCQk9ICJ3YXRjaGRvZyIsCisJLmZvcHMJCT0gJmtzODY5NXdkdF9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQga3M4Njk1d2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJlczsKKworCWlmIChrczg2OTV3ZHRfbWlzY2Rldi5wYXJlbnQpCisJCXJldHVybiAtRUJVU1k7CisJa3M4Njk1d2R0X21pc2NkZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKworCXJlcyA9IG1pc2NfcmVnaXN0ZXIoJmtzODY5NXdkdF9taXNjZGV2KTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJcHJpbnRrKCJLUzg2OTUgV2F0Y2hkb2cgVGltZXIgZW5hYmxlZCAoJWQgc2Vjb25kcyVzKVxuIiwgd2R0X3RpbWUsIG5vd2F5b3V0ID8gIiwgbm93YXlvdXQiIDogIiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBrczg2OTV3ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJlczsKKworCXJlcyA9IG1pc2NfZGVyZWdpc3Rlcigma3M4Njk1d2R0X21pc2NkZXYpOworCWlmICghcmVzKQorCQlrczg2OTV3ZHRfbWlzY2Rldi5wYXJlbnQgPSBOVUxMOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQga3M4Njk1d2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJa3M4Njk1X3dkdF9zdG9wKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBrczg2OTV3ZHRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlrczg2OTVfd2R0X3N0b3AoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrczg2OTV3ZHRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaWYgKGtzODY5NXdkdF9idXN5KQorCQlrczg2OTVfd2R0X3N0YXJ0KCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIGtzODY5NXdkdF9zdXNwZW5kIE5VTEwKKyNkZWZpbmUga3M4Njk1d2R0X3Jlc3VtZQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIga3M4Njk1d2R0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0ga3M4Njk1d2R0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3Aoa3M4Njk1d2R0X3JlbW92ZSksCisJLnNodXRkb3duCT0ga3M4Njk1d2R0X3NodXRkb3duLAorCS5zdXNwZW5kCT0ga3M4Njk1d2R0X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBrczg2OTV3ZHRfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJrczg2OTVfd2R0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGtzODY5NV93ZHRfaW5pdCh2b2lkKQoreworCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gcmFuZ2U7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCWlmIChrczg2OTVfd2R0X3NldHRpbWVvdXQod2R0X3RpbWUpKSB7CisJCWtzODY5NV93ZHRfc2V0dGltZW91dChXRFRfREVGQVVMVF9USU1FKTsKKwkJcHJfaW5mbygia3M4Njk1X3dkdDogd2R0X3RpbWUgdmFsdWUgbXVzdCBiZSAxIDw9IHdkdF90aW1lIDw9ICVpLCB1c2luZyAlZFxuIiwgd2R0X3RpbWUsIFdEVF9NQVhfVElNRSk7CisJfQorCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigma3M4Njk1d2R0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrczg2OTVfd2R0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigma3M4Njk1d2R0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGtzODY5NV93ZHRfaW5pdCk7Cittb2R1bGVfZXhpdChrczg2OTVfd2R0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbmRyZXcgVmljdG9yIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldhdGNoZG9nIGRyaXZlciBmb3IgS1M4Njk1Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbWFjaHp3ZC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21hY2h6d2QuYwppbmRleCA3NmM3ZmEzLi5hMGQyNzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbWFjaHp3ZC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tYWNoendkLmMKQEAgLTQ0MCwxMyArNDQwLDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmemZfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnpmX3BvcnRfbG9jayk7CiAKLQlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ6Zl9taXNjZGV2KTsKLQlpZiAocmV0KXsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBtaXNjX3JlZ2lzdGVyIG9uIG1pbm9yPSVkXG4iLAotCQkJCQkJCVdBVENIRE9HX01JTk9SKTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJaWYoIXJlcXVlc3RfcmVnaW9uKFpGX0lPQkFTRSwgMywgIk1hY2haIFpGTCBXRFQiKSl7CiAJCXByaW50ayhLRVJOX0VSUiAiY2Fubm90IHJlc2VydmUgSS9PIHBvcnRzIGF0ICVkXG4iLAogCQkJCQkJCVpGX0lPQkFTRSk7CkBAIC00NjEsMTYgKzQ1NCwyMyBAQAogCQlnb3RvIG5vX3JlYm9vdDsKIAl9CiAKKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ6Zl9taXNjZGV2KTsKKwlpZiAocmV0KXsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBtaXNjX3JlZ2lzdGVyIG9uIG1pbm9yPSVkXG4iLAorCQkJCQkJCVdBVENIRE9HX01JTk9SKTsKKwkJZ290byBub19taXNjOworCX0KKwogCXpmX3NldF9zdGF0dXMoMCk7CiAJemZfc2V0X2NvbnRyb2woMCk7CiAKIAlyZXR1cm4gMDsKIAorbm9fbWlzYzoKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmemZfbm90aWZpZXIpOwogbm9fcmVib290OgogCXJlbGVhc2VfcmVnaW9uKFpGX0lPQkFTRSwgMyk7CiBub19yZWdpb246Ci0JbWlzY19kZXJlZ2lzdGVyKCZ6Zl9taXNjZGV2KTsKLW91dDoKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXR4LTFfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5YWI0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdHgtMV93ZHQuYwpAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqICAgICAgRHJpdmVyIGZvciB0aGUgTVRYLTEgV2F0Y2hkb2cuCisgKgorICogICAgICAoQykgQ29weXJpZ2h0IDIwMDUgNEcgU3lzdGVtcyA8aW5mb0A0Zy1zeXN0ZW1zLmJpej4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuNGctc3lzdGVtcy5iaXoKKyAqCisgKiAJKEMpIENvcHlyaWdodCAyMDA3IE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgIE5laXRoZXIgTWljaGFlbCBTdGlja2VsIG5vciA0RyBTeXN0ZW1zIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZQorICogICAgICB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQKKyAqICAgICAgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqICAgICAgKGMpIENvcHlyaWdodCAyMDA1ICAgIDRHIFN5c3RlbXMgPGluZm9ANGctc3lzdGVtcy5iaXo+CisgKgorICogICAgICBSZWxlYXNlIDAuMDEuCisgKiAgICAgIEF1dGhvcjogTWljaGFlbCBTdGlja2VsICBtaWNoYWVsLnN0aWNrZWxANGctc3lzdGVtcy5iaXoKKyAqCisgKiAgICAgIFJlbGVhc2UgMC4wMi4KKyAqCUF1dGhvcjogRmxvcmlhbiBGYWluZWxsaSBmbG9yaWFuQG9wZW53cnQub3JnCisgKgkJdXNlIHRoZSBMaW51eCB3YXRjaGRvZy90aW1lciBBUElzCisgKgorICogICAgICBUaGUgV2F0Y2hkb2cgaXMgY29uZmlndXJlZCB0byByZXNldCB0aGUgTVRYLTEKKyAqICAgICAgaWYgaXQgaXMgbm90IHRyaWdnZXJlZCBmb3IgMTAwIHNlY29uZHMuCisgKiAgICAgIEl0IHNob3VsZCBub3QgYmUgdHJpZ2dlcmVkIG1vcmUgb2Z0ZW4gdGhhbiAxLjYgc2Vjb25kcy4KKyAqCisgKiAgICAgIEEgdGltZXIgdHJpZ2dlcnMgdGhlIHdhdGNoZG9nIGV2ZXJ5IDUgc2Vjb25kcywgdW50aWwKKyAqICAgICAgaXQgaXMgb3BlbmVkIGZvciB0aGUgZmlyc3QgdGltZS4gQWZ0ZXIgdGhlIGZpcnN0IG9wZW4KKyAqICAgICAgaXQgTVVTVCBiZSB0cmlnZ2VyZWQgZXZlcnkgMi4uOTUgc2Vjb25kcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisKKyNkZWZpbmUgTVRYMV9XRFRfSU5URVJWQUwJKDUgKiBIWikKKworc3RhdGljIGludCB0aWNrcyA9IDEwMCAqIEhaOworCitzdGF0aWMgc3RydWN0IHsKKwlzdHJ1Y3QgY29tcGxldGlvbiBzdG9wOworCXZvbGF0aWxlIGludCBydW5uaW5nOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXZvbGF0aWxlIGludCBxdWV1ZTsKKwlpbnQgZGVmYXVsdF90aWNrczsKKwl1bnNpZ25lZCBsb25nIGludXNlOworfSBtdHgxX3dkdF9kZXZpY2U7CisKK3N0YXRpYyB2b2lkIG10eDFfd2R0X3RyaWdnZXIodW5zaWduZWQgbG9uZyB1bnVzZWQpCit7CisJdTMyIHRtcDsKKworCWlmIChtdHgxX3dkdF9kZXZpY2UucnVubmluZykKKwkJdGlja3MtLTsKKwkvKgorCSAqIHRvZ2dsZSBHUElPMl8xNQorCSAqLworCXRtcCA9IGF1X3JlYWRsKEdQSU8yX0RJUik7CisJdG1wID0gKHRtcCAmIH4oMTw8MTUpKSB8ICgofnRtcCkgJiAoMTw8MTUpKTsKKwlhdV93cml0ZWwgKHRtcCwgR1BJTzJfRElSKTsKKworCWlmIChtdHgxX3dkdF9kZXZpY2UucXVldWUgJiYgdGlja3MpCisJCW1vZF90aW1lcigmbXR4MV93ZHRfZGV2aWNlLnRpbWVyLCBqaWZmaWVzICsgTVRYMV9XRFRfSU5URVJWQUwpOworCWVsc2UgeworCQljb21wbGV0ZSgmbXR4MV93ZHRfZGV2aWNlLnN0b3ApOworCX0KK30KKworc3RhdGljIHZvaWQgbXR4MV93ZHRfcmVzZXQodm9pZCkKK3sKKwl0aWNrcyA9IG10eDFfd2R0X2RldmljZS5kZWZhdWx0X3RpY2tzOworfQorCisKK3N0YXRpYyB2b2lkIG10eDFfd2R0X3N0YXJ0KHZvaWQpCit7CisJaWYgKCFtdHgxX3dkdF9kZXZpY2UucXVldWUpIHsKKwkJbXR4MV93ZHRfZGV2aWNlLnF1ZXVlID0gMTsKKwkJYXVfd3JpdGVsIChhdV9yZWFkbChHUElPMl9ESVIpIHwgKHUzMikoMTw8MTUpLCBHUElPMl9ESVIpOworCQltb2RfdGltZXIoJm10eDFfd2R0X2RldmljZS50aW1lciwgamlmZmllcyArIE1UWDFfV0RUX0lOVEVSVkFMKTsKKwl9CisJbXR4MV93ZHRfZGV2aWNlLnJ1bm5pbmcrKzsKK30KKworc3RhdGljIGludCBtdHgxX3dkdF9zdG9wKHZvaWQpCit7CisJaWYgKG10eDFfd2R0X2RldmljZS5xdWV1ZSkgeworCQltdHgxX3dkdF9kZXZpY2UucXVldWUgPSAwOworCQlhdV93cml0ZWwgKGF1X3JlYWRsKEdQSU8yX0RJUikgJiB+KCh1MzIpKDE8PDE1KSksIEdQSU8yX0RJUik7CisJfQorCisJdGlja3MgPSBtdHgxX3dkdF9kZXZpY2UuZGVmYXVsdF90aWNrczsKKworCXJldHVybiAwOworfQorCisvKiBGaWxlc3lzdGVtIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgaW50IG10eDFfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJm10eDFfd2R0X2RldmljZS5pbnVzZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKKworc3RhdGljIGludCBtdHgxX3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWNsZWFyX2JpdCgwLCAmbXR4MV93ZHRfZGV2aWNlLmludXNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdHgxX3dkdF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJdW5zaWduZWQgaW50IHZhbHVlOworCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9CisJeworCQkub3B0aW9ucyA9IFdESU9GX0NBUkRSRVNFVCwKKwkJLmlkZW50aXR5ID0gIk1UWC0xIFdEVCIsCisJfTsKKworCXN3aXRjaChjbWQpIHsKKwkJY2FzZSBXRElPQ19LRUVQQUxJVkU6CisJCQltdHgxX3dkdF9yZXNldCgpOworCQkJYnJlYWs7CisJCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCQkJaWYgKCBjb3B5X3RvX3VzZXIoYXJncCwgJnZhbHVlLCBzaXplb2YoaW50KSkgKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJYnJlYWs7CisJCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKKwkJCWlmICggY29weV90b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSkgKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJYnJlYWs7CisJCWNhc2UgV0RJT0NfU0VUT1BUSU9OUzoKKwkJCWlmICggY29weV9mcm9tX3VzZXIoJnZhbHVlLCBhcmdwLCBzaXplb2YoaW50KSkgKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJc3dpdGNoKHZhbHVlKSB7CisJCQkJY2FzZSBXRElPU19FTkFCTEVDQVJEOgorCQkJCQltdHgxX3dkdF9zdGFydCgpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFdESU9TX0RJU0FCTEVDQVJEOgorCQkJCQlyZXR1cm4gbXR4MV93ZHRfc3RvcCgpOworCQkJCWRlZmF1bHQ6CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHNzaXplX3QgbXR4MV93ZHRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIC1FSU87CisKKwltdHgxX3dkdF9yZXNldCgpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXR4MV93ZHRfZm9wcyA9IHsKKwkub3duZXIgCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS5pb2N0bAkJPSBtdHgxX3dkdF9pb2N0bCwKKwkub3BlbiAJCT0gbXR4MV93ZHRfb3BlbiwKKwkud3JpdGUgCQk9IG10eDFfd2R0X3dyaXRlLAorCS5yZWxlYXNlIAk9IG10eDFfd2R0X3JlbGVhc2UKK307CisKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG10eDFfd2R0X21pc2MgPSB7CisJLm1pbm9yIAk9IFdBVENIRE9HX01JTk9SLAorCS5uYW1lIAk9ICJ3YXRjaGRvZyIsCisJLmZvcHMgCT0gJm10eDFfd2R0X2ZvcHMKK307CisKKworc3RhdGljIGludCBfX2luaXQgbXR4MV93ZHRfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoKHJldCA9IG1pc2NfcmVnaXN0ZXIoJm10eDFfd2R0X21pc2MpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIgbXR4LTFfd2R0IDogZmFpbGVkIHRvIHJlZ2lzdGVyXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpbml0X2NvbXBsZXRpb24oJm10eDFfd2R0X2RldmljZS5zdG9wKTsKKwltdHgxX3dkdF9kZXZpY2UucXVldWUgPSAwOworCisJY2xlYXJfYml0KDAsICZtdHgxX3dkdF9kZXZpY2UuaW51c2UpOworCisJc2V0dXBfdGltZXIoJm10eDFfd2R0X2RldmljZS50aW1lciwgbXR4MV93ZHRfdHJpZ2dlciwgMEwpOworCisJbXR4MV93ZHRfZGV2aWNlLmRlZmF1bHRfdGlja3MgPSB0aWNrczsKKworCW10eDFfd2R0X3N0YXJ0KCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJNVFgtMSBXYXRjaGRvZyBkcml2ZXJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdHgxX3dkdF9leGl0KHZvaWQpCit7CisJaWYgKG10eDFfd2R0X2RldmljZS5xdWV1ZSkgeworCQltdHgxX3dkdF9kZXZpY2UucXVldWUgPSAwOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtdHgxX3dkdF9kZXZpY2Uuc3RvcCk7CisJfQorCW1pc2NfZGVyZWdpc3RlcigmbXR4MV93ZHRfbWlzYyk7Cit9CisKK21vZHVsZV9pbml0KG10eDFfd2R0X2luaXQpOworbW9kdWxlX2V4aXQobXR4MV93ZHRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgU3RpY2tlbCwgRmxvcmlhbiBGYWluZWxsaSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBNVFgtMSB3YXRjaGRvZyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL29tYXBfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuYwppbmRleCA4NDA3NGE2Li5iMzZmYThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2QuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkLmMKaW5kZXggNmU4YjU3MC4uN2I0MTQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2QuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZC5jCkBAIC01OSwxMCArNTksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CS8qIEZvciBqaWZmaWVzIHN0dWZmICovCiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgkvKiBGb3IgTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpICovCiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4JLyogRm9yIHRoZSB3YXRjaGRvZyBzcGVjaWZpYyBpdGVtcyAqLwotI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CS8qIEZvciBub3RpZmllciBzdXBwb3J0ICovCi0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CS8qIEZvciByZWJvb3Rfbm90aWZpZXIgc3R1ZmYgKi8KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4JLyogRm9yIGtlcm5lbF9wb3dlcl9vZmYoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEZvciBfX2luaXQvX19leGl0Ly4uLiAqLwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CQkvKiBGb3IgZmlsZSBvcGVyYXRpb25zICovCisjaW5jbHVkZSA8bGludXgvaXNhLmg+CQkvKiBGb3IgaXNhIGRldmljZXMgKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogRm9yIGlvLXBvcnQgYWNjZXNzICovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JLyogRm9yIHNwaW5fbG9jay9zcGluX3VubG9jay8uLi4gKi8KIApAQCAtNzAsOCArNzAsOCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogRm9yIGluYi9vdXRiLy4uLiAqLwogCiAvKiBNb2R1bGUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgV0FUQ0hET0dfVkVSU0lPTiAiMS4xOCIKLSNkZWZpbmUgV0FUQ0hET0dfREFURSAiMjEgSmFuIDIwMDciCisjZGVmaW5lIFdBVENIRE9HX1ZFUlNJT04gIjEuMjAiCisjZGVmaW5lIFdBVENIRE9HX0RBVEUgIjE4IEZlYiAyMDA3IgogI2RlZmluZSBXQVRDSERPR19EUklWRVJfTkFNRSAiSVNBLVBDIFdhdGNoZG9nIgogI2RlZmluZSBXQVRDSERPR19OQU1FICJwY3dkIgogI2RlZmluZSBQRlggV0FUQ0hET0dfTkFNRSAiOiAiCkBAIC04OSw2ICs4OSwxNSBAQAogI2RlZmluZQlQQ1dEX1JFVklTSU9OX0MJCTIKIAogLyoKKyAqIFRoZXNlIGFyZSB0aGUgYXV0by1wcm9iZSBhZGRyZXNzZXMgYXZhaWxhYmxlLgorICoKKyAqIFJldmlzaW9uIEEgb25seSB1c2VzIHBvcnRzIDB4MjcwIGFuZCAweDM3MC4gIFJldmlzaW9uIEMgaW50cm9kdWNlZCAweDM1MC4KKyAqIFJldmlzaW9uIEEgaGFzIGFuIGFkZHJlc3MgcmFuZ2Ugb2YgMiBhZGRyZXNzZXMsIHdoaWxlIFJldmlzaW9uIEMgaGFzIDQuCisgKi8KKyNkZWZpbmUgUENXRF9JU0FfTlJfQ0FSRFMJMworc3RhdGljIGludCBwY3dkX2lvcG9ydHNbXSA9IHsgMHgyNzAsIDB4MzUwLCAweDM3MCwgMHgwMDAgfTsKKworLyoKICAqIFRoZXNlIGFyZSB0aGUgZGVmaW5lcyB0aGF0IGRlc2NyaWJlIHRoZSBjb250cm9sIHN0YXR1cyBiaXRzIGZvciB0aGUKICAqIFBDSS1QQyBXYXRjaGRvZyBjYXJkLgogKi8KQEAgLTQ4NSw3ICs0OTQsNyBAQAogCQlpZiAoY29udHJvbF9zdGF0dXMgJiBXRF9UMTEwKSB7CiAJCQkqc3RhdHVzIHw9IFdESU9GX09WRVJIRUFUOwogCQkJaWYgKHRlbXBfcGFuaWMpIHsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlRlbXBlcmF0dXJlIG92ZXJoZWF0IHRyaXAhXG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiVGVtcGVyYXR1cmUgb3ZlcmhlYXQgdHJpcCFcbiIpOwogCQkJCWtlcm5lbF9wb3dlcl9vZmYoKTsKIAkJCQkvKiBvciBzaG91bGQgd2UganVzdCBkbyBhOiBwYW5pYyhQRlggIlRlbXBlcmF0dXJlIG92ZXJoZWF0IHRyaXAhXG4iKTsgKi8KIAkJCX0KQEAgLTQ5Nyw3ICs1MDYsNyBAQAogCQlpZiAoY29udHJvbF9zdGF0dXMgJiBXRF9SRVZDX1RUUlApIHsKIAkJCSpzdGF0dXMgfD0gV0RJT0ZfT1ZFUkhFQVQ7CiAJCQlpZiAodGVtcF9wYW5pYykgewotCQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVGVtcGVyYXR1cmUgb3ZlcmhlYXQgdHJpcCFcbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJUZW1wZXJhdHVyZSBvdmVyaGVhdCB0cmlwIVxuIik7CiAJCQkJa2VybmVsX3Bvd2VyX29mZigpOwogCQkJCS8qIG9yIHNob3VsZCB3ZSBqdXN0IGRvIGE6IHBhbmljKFBGWCAiVGVtcGVyYXR1cmUgb3ZlcmhlYXQgdHJpcCFcbiIpOyAqLwogCQkJfQpAQCAtNzM0LDIwICs3NDMsNiBAQAogfQogCiAvKgotICoJTm90aWZ5IHN5c3RlbQotICovCi0KLXN0YXRpYyBpbnQgcGN3ZF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCi17Ci0JaWYgKGNvZGU9PVNZU19ET1dOIHx8IGNvZGU9PVNZU19IQUxUKSB7Ci0JCS8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KLQkJcGN3ZF9zdG9wKCk7Ci0JfQotCi0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCi0vKgogICoJS2VybmVsIEludGVyZmFjZXMKICAqLwogCkBAIC03ODAsMTAgKzc3NSw2IEBACiAJLmZvcHMgPQkJJnBjd2RfdGVtcF9mb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwY3dkX25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsID0JcGN3ZF9ub3RpZnlfc3lzLAotfTsKLQogLyoKICAqCUluaXQgJiBleGl0IHJvdXRpbmVzCiAgKi8KQEAgLTgwMywxMCArNzk0LDY3IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHBjd2F0Y2hkb2dfaW5pdChpbnQgYmFzZV9hZGRyKQorLyoKKyAqICBUaGUgSVNBIGNhcmRzIGhhdmUgYSBoZWFydGJlYXQgYml0IGluIG9uZSBvZiB0aGUgcmVnaXN0ZXJzLCB3aGljaAorICogIHJlZ2lzdGVyIGlzIGNhcmQgZGVwZW5kZW50LiAgVGhlIGhlYXJ0YmVhdCBiaXQgaXMgbW9uaXRvcmVkLCBhbmQgaWYKKyAqICBmb3VuZCwgaXMgY29uc2lkZXJlZCBwcm9vZiB0aGF0IGEgQmVya3NoaXJlIGNhcmQgaGFzIGJlZW4gZm91bmQuCisgKiAgVGhlIGluaXRpYWwgcmF0ZSBpcyBvbmNlIHBlciBzZWNvbmQgYXQgYm9hcmQgc3RhcnQgdXAsIHRoZW4gdHdpY2UKKyAqICBwZXIgc2Vjb25kIGZvciBub3JtYWwgb3BlcmF0aW9uLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwY3dkX2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlpbnQgYmFzZV9hZGRyPXBjd2RfaW9wb3J0c1tpZF07CisJaW50IHBvcnQwLCBsYXN0X3BvcnQwOwkvKiBSZWcgMCwgaW4gY2FzZSBpdCdzIFJFViBBICovCisJaW50IHBvcnQxLCBsYXN0X3BvcnQxOwkvKiBSZWdpc3RlciAxIGZvciBSRVYgQyBjYXJkcyAqLworCWludCBpOworCWludCByZXR2YWw7CisKKwlpZiAoZGVidWcgPj0gREVCVUcpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicGN3ZF9pc2FfbWF0Y2ggaWQ9JWRcbiIsCisJCQlpZCk7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uIChiYXNlX2FkZHIsIDQsICJQQ1dEIikpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBvcnQgMHglMDR4IHVuYXZhaWxhYmxlXG4iLCBiYXNlX2FkZHIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR2YWwgPSAwOworCisJcG9ydDAgPSBpbmJfcChiYXNlX2FkZHIpOwkvKiBGb3IgUkVWIEEgYm9hcmRzICovCisJcG9ydDEgPSBpbmJfcChiYXNlX2FkZHIgKyAxKTsJLyogRm9yIFJFViBDIGJvYXJkcyAqLworCWlmIChwb3J0MCAhPSAweGZmIHx8IHBvcnQxICE9IDB4ZmYpIHsKKwkJLyogTm90IGFuICdmZicgZnJvbSBhIGZsb2F0aW5nIGJ1cywgc28gbXVzdCBiZSBhIGNhcmQhICovCisJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKworCQkJbXNsZWVwKDUwMCk7CisKKwkJCWxhc3RfcG9ydDAgPSBwb3J0MDsKKwkJCWxhc3RfcG9ydDEgPSBwb3J0MTsKKworCQkJcG9ydDAgPSBpbmJfcChiYXNlX2FkZHIpOworCQkJcG9ydDEgPSBpbmJfcChiYXNlX2FkZHIgKyAxKTsKKworCQkJLyogSGFzIGVpdGhlciBoZWFyYmVhdCBiaXQgY2hhbmdlZD8gICovCisJCQlpZiAoKHBvcnQwIF4gbGFzdF9wb3J0MCkgJiBXRF9IUlRCVCB8fAorCQkJICAgIChwb3J0MSBeIGxhc3RfcG9ydDEpICYgV0RfUkVWQ19IUkJUKSB7CisJCQkJcmV0dmFsID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZWxlYXNlX3JlZ2lvbiAoYmFzZV9hZGRyLCA0KTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBjd2RfaXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKQogewogCWludCByZXQ7CiAKKwlpZiAoZGVidWcgPj0gREVCVUcpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicGN3ZF9pc2FfcHJvYmUgaWQ9JWRcbiIsCisJCQlpZCk7CisKIAljYXJkc19mb3VuZCsrOwogCWlmIChjYXJkc19mb3VuZCA9PSAxKQogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAidiVzIEtlbiBIb2xsaXMgKGtlbmppQGJpdGdhdGUuY29tKVxuIiwgV0RfVkVSKTsKQEAgLTgxNiwxMSArODY0LDEzIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmIChiYXNlX2FkZHIgPT0gMHgwMDAwKSB7CisJaWYgKHBjd2RfaW9wb3J0c1tpZF0gPT0gMHgwMDAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIEkvTy1BZGRyZXNzIGZvciBjYXJkIGRldGVjdGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXBjd2RfcHJpdmF0ZS5pb19hZGRyID0gYmFzZV9hZGRyOworCXBjd2RfcHJpdmF0ZS5pb19hZGRyID0gcGN3ZF9pb3BvcnRzW2lkXTsKKworCXNwaW5fbG9ja19pbml0KCZwY3dkX3ByaXZhdGUuaW9fbG9jayk7CiAKIAkvKiBDaGVjayBjYXJkJ3MgcmV2aXNpb24gKi8KIAlwY3dkX3ByaXZhdGUucmV2aXNpb24gPSBnZXRfcmV2aXNpb24oKTsKQEAgLTgyOCw4ICs4NzgsOCBAQAogCWlmICghcmVxdWVzdF9yZWdpb24ocGN3ZF9wcml2YXRlLmlvX2FkZHIsIChwY3dkX3ByaXZhdGUucmV2aXNpb24gPT0gUENXRF9SRVZJU0lPTl9BKSA/IDIgOiA0LCAiUENXRCIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkkvTyBhZGRyZXNzIDB4JTA0eCBhbHJlYWR5IGluIHVzZVxuIiwKIAkJCXBjd2RfcHJpdmF0ZS5pb19hZGRyKTsKLQkJcGN3ZF9wcml2YXRlLmlvX2FkZHIgPSAweDAwMDA7Ci0JCXJldHVybiAtRUlPOworCQlyZXQ9LUVJTzsKKwkJZ290byBlcnJvcl9yZXF1ZXN0X3JlZ2lvbjsKIAl9CiAKIAkvKiBJbml0aWFsIHZhcmlhYmxlcyAqLwpAQCAtODY1LDI0ICs5MTUsMTIgQEAKIAkJCVdBVENIRE9HX0hFQVJUQkVBVCk7CiAJfQogCi0JcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZwY3dkX25vdGlmaWVyKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCi0JCQlyZXQpOwotCQlyZWxlYXNlX3JlZ2lvbihwY3dkX3ByaXZhdGUuaW9fYWRkciwgKHBjd2RfcHJpdmF0ZS5yZXZpc2lvbiA9PSBQQ1dEX1JFVklTSU9OX0EpID8gMiA6IDQpOwotCQlwY3dkX3ByaXZhdGUuaW9fYWRkciA9IDB4MDAwMDsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KIAlpZiAocGN3ZF9wcml2YXRlLnN1cHBvcnRzX3RlbXApIHsKIAkJcmV0ID0gbWlzY19yZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKIAkJaWYgKHJldCkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQkJVEVNUF9NSU5PUiwgcmV0KTsKLQkJCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZwY3dkX25vdGlmaWVyKTsKLQkJCXJlbGVhc2VfcmVnaW9uKHBjd2RfcHJpdmF0ZS5pb19hZGRyLCAocGN3ZF9wcml2YXRlLnJldmlzaW9uID09IFBDV0RfUkVWSVNJT05fQSkgPyAyIDogNCk7Ci0JCQlwY3dkX3ByaXZhdGUuaW9fYWRkciA9IDB4MDAwMDsKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycm9yX21pc2NfcmVnaXN0ZXJfdGVtcDsKIAkJfQogCX0KIApAQCAtODkwLDIyICs5MjgsMzQgQEAKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7Ci0JCWlmIChwY3dkX3ByaXZhdGUuc3VwcG9ydHNfdGVtcCkKLQkJCW1pc2NfZGVyZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKLQkJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnBjd2Rfbm90aWZpZXIpOwotCQlyZWxlYXNlX3JlZ2lvbihwY3dkX3ByaXZhdGUuaW9fYWRkciwgKHBjd2RfcHJpdmF0ZS5yZXZpc2lvbiA9PSBQQ1dEX1JFVklTSU9OX0EpID8gMiA6IDQpOwotCQlwY3dkX3ByaXZhdGUuaW9fYWRkciA9IDB4MDAwMDsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJvcl9taXNjX3JlZ2lzdGVyX3dhdGNoZG9nOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gUEZYICJpbml0aWFsaXplZC4gaGVhcnRiZWF0PSVkIHNlYyAobm93YXlvdXQ9JWQpXG4iLAogCQloZWFydGJlYXQsIG5vd2F5b3V0KTsKIAogCXJldHVybiAwOworCitlcnJvcl9taXNjX3JlZ2lzdGVyX3dhdGNoZG9nOgorCWlmIChwY3dkX3ByaXZhdGUuc3VwcG9ydHNfdGVtcCkKKwkJbWlzY19kZXJlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOworZXJyb3JfbWlzY19yZWdpc3Rlcl90ZW1wOgorCXJlbGVhc2VfcmVnaW9uKHBjd2RfcHJpdmF0ZS5pb19hZGRyLCAocGN3ZF9wcml2YXRlLnJldmlzaW9uID09IFBDV0RfUkVWSVNJT05fQSkgPyAyIDogNCk7CitlcnJvcl9yZXF1ZXN0X3JlZ2lvbjoKKwlwY3dkX3ByaXZhdGUuaW9fYWRkciA9IDB4MDAwMDsKKwljYXJkc19mb3VuZC0tOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBwY3dhdGNoZG9nX2V4aXQodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IHBjd2RfaXNhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKIHsKKwlpZiAoZGVidWcgPj0gREVCVUcpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicGN3ZF9pc2FfcmVtb3ZlIGlkPSVkXG4iLAorCQkJaWQpOworCisJaWYgKCFwY3dkX3ByaXZhdGUuaW9fYWRkcikKKwkJcmV0dXJuIDE7CisKIAkvKiAgRGlzYWJsZSB0aGUgYm9hcmQgICovCiAJaWYgKCFub3dheW91dCkKIAkJcGN3ZF9zdG9wKCk7CkBAIC05MTQsMTAyICs5NjQsNTAgQEAKIAltaXNjX2RlcmVnaXN0ZXIoJnBjd2RfbWlzY2Rldik7CiAJaWYgKHBjd2RfcHJpdmF0ZS5zdXBwb3J0c190ZW1wKQogCQltaXNjX2RlcmVnaXN0ZXIoJnRlbXBfbWlzY2Rldik7Ci0JdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnBjd2Rfbm90aWZpZXIpOwogCXJlbGVhc2VfcmVnaW9uKHBjd2RfcHJpdmF0ZS5pb19hZGRyLCAocGN3ZF9wcml2YXRlLnJldmlzaW9uID09IFBDV0RfUkVWSVNJT05fQSkgPyAyIDogNCk7CiAJcGN3ZF9wcml2YXRlLmlvX2FkZHIgPSAweDAwMDA7CiAJY2FyZHNfZm91bmQtLTsKLX0KLQotLyoKLSAqICBUaGUgSVNBIGNhcmRzIGhhdmUgYSBoZWFydGJlYXQgYml0IGluIG9uZSBvZiB0aGUgcmVnaXN0ZXJzLCB3aGljaAotICogIHJlZ2lzdGVyIGlzIGNhcmQgZGVwZW5kZW50LiAgVGhlIGhlYXJ0YmVhdCBiaXQgaXMgbW9uaXRvcmVkLCBhbmQgaWYKLSAqICBmb3VuZCwgaXMgY29uc2lkZXJlZCBwcm9vZiB0aGF0IGEgQmVya3NoaXJlIGNhcmQgaGFzIGJlZW4gZm91bmQuCi0gKiAgVGhlIGluaXRpYWwgcmF0ZSBpcyBvbmNlIHBlciBzZWNvbmQgYXQgYm9hcmQgc3RhcnQgdXAsIHRoZW4gdHdpY2UKLSAqICBwZXIgc2Vjb25kIGZvciBub3JtYWwgb3BlcmF0aW9uLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBwY3dkX2NoZWNrY2FyZChpbnQgYmFzZV9hZGRyKQotewotCWludCBwb3J0MCwgbGFzdF9wb3J0MDsJLyogUmVnIDAsIGluIGNhc2UgaXQncyBSRVYgQSAqLwotCWludCBwb3J0MSwgbGFzdF9wb3J0MTsJLyogUmVnaXN0ZXIgMSBmb3IgUkVWIEMgY2FyZHMgKi8KLQlpbnQgaTsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbiAoYmFzZV9hZGRyLCA0LCAiUENXRCIpKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiUG9ydCAweCUwNHggdW5hdmFpbGFibGVcbiIsIGJhc2VfYWRkcik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHZhbCA9IDA7Ci0KLQlwb3J0MCA9IGluYl9wKGJhc2VfYWRkcik7CS8qIEZvciBSRVYgQSBib2FyZHMgKi8KLQlwb3J0MSA9IGluYl9wKGJhc2VfYWRkciArIDEpOwkvKiBGb3IgUkVWIEMgYm9hcmRzICovCi0JaWYgKHBvcnQwICE9IDB4ZmYgfHwgcG9ydDEgIT0gMHhmZikgewotCQkvKiBOb3QgYW4gJ2ZmJyBmcm9tIGEgZmxvYXRpbmcgYnVzLCBzbyBtdXN0IGJlIGEgY2FyZCEgKi8KLQkJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewotCi0JCQltc2xlZXAoNTAwKTsKLQotCQkJbGFzdF9wb3J0MCA9IHBvcnQwOwotCQkJbGFzdF9wb3J0MSA9IHBvcnQxOwotCi0JCQlwb3J0MCA9IGluYl9wKGJhc2VfYWRkcik7Ci0JCQlwb3J0MSA9IGluYl9wKGJhc2VfYWRkciArIDEpOwotCi0JCQkvKiBIYXMgZWl0aGVyIGhlYXJiZWF0IGJpdCBjaGFuZ2VkPyAgKi8KLQkJCWlmICgocG9ydDAgXiBsYXN0X3BvcnQwKSAmIFdEX0hSVEJUIHx8Ci0JCQkgICAgKHBvcnQxIF4gbGFzdF9wb3J0MSkgJiBXRF9SRVZDX0hSQlQpIHsKLQkJCQlyZXR2YWwgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCXJlbGVhc2VfcmVnaW9uIChiYXNlX2FkZHIsIDQpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgYXV0by1wcm9iZSBhZGRyZXNzZXMgYXZhaWxhYmxlLgotICoKLSAqIFJldmlzaW9uIEEgb25seSB1c2VzIHBvcnRzIDB4MjcwIGFuZCAweDM3MC4gIFJldmlzaW9uIEMgaW50cm9kdWNlZCAweDM1MC4KLSAqIFJldmlzaW9uIEEgaGFzIGFuIGFkZHJlc3MgcmFuZ2Ugb2YgMiBhZGRyZXNzZXMsIHdoaWxlIFJldmlzaW9uIEMgaGFzIDQuCi0gKi8KLXN0YXRpYyBpbnQgcGN3ZF9pb3BvcnRzW10gPSB7IDB4MjcwLCAweDM1MCwgMHgzNzAsIDB4MDAwIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBjd2RfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlpbnQgaSwgZm91bmQgPSAwOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnBjd2RfcHJpdmF0ZS5pb19sb2NrKTsKLQotCWZvciAoaSA9IDA7IHBjd2RfaW9wb3J0c1tpXSAhPSAwOyBpKyspIHsKLQkJaWYgKHBjd2RfY2hlY2tjYXJkKHBjd2RfaW9wb3J0c1tpXSkpIHsKLQkJCWlmICghKHBjd2F0Y2hkb2dfaW5pdChwY3dkX2lvcG9ydHNbaV0pKSkKLQkJCQlmb3VuZCsrOwotCQl9Ci0JfQotCi0JaWYgKCFmb3VuZCkgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIk5vIGNhcmQgZGV0ZWN0ZWQsIG9yIHBvcnQgbm90IGF2YWlsYWJsZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBwY3dkX2lzYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlpZiAoZGVidWcgPj0gREVCVUcpCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicGN3ZF9pc2Ffc2h1dGRvd24gaWQ9JWRcbiIsCisJCQlpZCk7CisKKwlwY3dkX3N0b3AoKTsKK30KKworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHBjd2RfaXNhX2RyaXZlciA9IHsKKwkubWF0Y2gJCT0gcGN3ZF9pc2FfbWF0Y2gsCisJLnByb2JlCQk9IHBjd2RfaXNhX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocGN3ZF9pc2FfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBwY3dkX2lzYV9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gV0FUQ0hET0dfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGN3ZF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBpc2FfcmVnaXN0ZXJfZHJpdmVyKCZwY3dkX2lzYV9kcml2ZXIsIFBDV0RfSVNBX05SX0NBUkRTKTsKK30KKwogc3RhdGljIHZvaWQgX19leGl0IHBjd2RfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlpZiAocGN3ZF9wcml2YXRlLmlvX2FkZHIpCi0JCXBjd2F0Y2hkb2dfZXhpdCgpOwotCisJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZwY3dkX2lzYV9kcml2ZXIpOwogCXByaW50ayhLRVJOX0lORk8gUEZYICJXYXRjaGRvZyBNb2R1bGUgVW5sb2FkZWQuXG4iKTsKIH0KIAogbW9kdWxlX2luaXQocGN3ZF9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChwY3dkX2NsZWFudXBfbW9kdWxlKTsKIAotTU9EVUxFX0FVVEhPUigiS2VuIEhvbGxpcyA8a2VuamlAYml0Z2F0ZS5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJLZW4gSG9sbGlzIDxrZW5qaUBiaXRnYXRlLmNvbT4sIFdpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkJlcmtzaGlyZSBJU0EtUEMgV2F0Y2hkb2cgZHJpdmVyIik7CitNT0RVTEVfVkVSU0lPTihXQVRDSERPR19WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFRFTVBfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYwppbmRleCAzMTAzN2Y5Li4xZTdhNjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJYXRvbWljX3QJCWNtZF9yZWNlaXZlZDsJCS8qIHRydWUgaWYgd2UgcmVjZWl2ZWQgYSByZXBvcnQgYWZ0ZXIgYSBjb21tYW5kICovCiAKIAlpbnQJCQlleGlzdHM7CQkJLyogV2V0aGVyIG9yIG5vdCB0aGUgZGV2aWNlIGV4aXN0cyAqLwotCXN0cnVjdCBzZW1hcGhvcmUJc2VtOwkJCS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0IG11dGV4CQltdHg7CQkJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KIH07CiBzdGF0aWMgc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkX2RldmljZTsKIApAQCAtNjM1LDcgKzYzNSw3IEBACiAKIAl1c2JfcGN3ZF9kZXZpY2UgPSB1c2JfcGN3ZDsKIAotCWluaXRfTVVURVggKCZ1c2JfcGN3ZC0+c2VtKTsKKwltdXRleF9pbml0KCZ1c2JfcGN3ZC0+bXR4KTsKIAl1c2JfcGN3ZC0+dWRldiA9IHVkZXY7CiAJdXNiX3Bjd2QtPmludGVyZmFjZSA9IGludGVyZmFjZTsKIAl1c2JfcGN3ZC0+aW50ZXJmYWNlX251bWJlciA9IGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKQEAgLTc2Myw3ICs3NjMsNyBAQAogCXVzYl9wY3dkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50ZXJmYWNlKTsKIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIE5VTEwpOwogCi0JZG93biAoJnVzYl9wY3dkLT5zZW0pOworCW11dGV4X2xvY2soJnVzYl9wY3dkLT5tdHgpOwogCiAJLyogU3RvcCB0aGUgdGltZXIgYmVmb3JlIHdlIGxlYXZlICovCiAJaWYgKCFub3dheW91dCkKQEAgLTc3Nyw3ICs3NzcsNyBAQAogCW1pc2NfZGVyZWdpc3RlcigmdXNiX3Bjd2RfdGVtcGVyYXR1cmVfbWlzY2Rldik7CiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnVzYl9wY3dkX25vdGlmaWVyKTsKIAotCXVwICgmdXNiX3Bjd2QtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZ1c2JfcGN3ZC0+bXR4KTsKIAogCS8qIERlbGV0ZSB0aGUgVVNCIFBDV0QgZGV2aWNlICovCiAJdXNiX3Bjd2RfZGVsZXRlKHVzYl9wY3dkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zM2MyNDEwX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKaW5kZXggZGZmNmNiNS4uMjBmYTI5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKQEAgLTM3OSwxNCArMzc5LDE0IEBACiAKIAlEQkcoInByb2JlOiBtYXBwZWQgd2R0X2Jhc2U9JXBcbiIsIHdkdF9iYXNlKTsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7Ci0JaWYgKHJlcyA9PSBOVUxMKSB7CisJd2R0X2lycSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHdkdF9pcnEgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZmFpbGVkIHRvIGdldCBpcnEgcmVzb3VyY2VcbiIpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIGVycl9tYXA7CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9pcnEocmVzLT5zdGFydCwgczNjMjQxMHdkdF9pcnEsIDAsIHBkZXYtPm5hbWUsIHBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKHdkdF9pcnEtPnN0YXJ0LCBzM2MyNDEwd2R0X2lycSwgMCwgcGRldi0+bmFtZSwgcGRldik7CiAJaWYgKHJldCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJmYWlsZWQgdG8gaW5zdGFsbCBpcnEgKCVkKVxuIiwgcmV0KTsKIAkJZ290byBlcnJfbWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NiYzgzNjAuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYmM4MzYwLmMKaW5kZXggNjdhZTQyNi4uMjg1ZDg1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NiYzgzNjAuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2JjODM2MC5jCkBAIC0zMzMsMTggKzMzMywxNyBAQAogCWludCByZXM7CiAJdW5zaWduZWQgbG9uZyBpbnQgbXNlY29uZHMgPSA2MDAwMDsKIAotCXNwaW5fbG9ja19pbml0KCZzYmM4MzYwX2xvY2spOwotCXJlcyA9IG1pc2NfcmVnaXN0ZXIoJnNiYzgzNjBfbWlzY2Rldik7Ci0JaWYgKHJlcykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVnaXN0ZXIgbWlzYyBkZXZpY2VcbiIpOwotCQlnb3RvIG91dF9ub21pc2M7CisJaWYgKHRpbWVvdXQgPCAwIHx8IHRpbWVvdXQgPiA2MykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJJbnZhbGlkIHRpbWVvdXQgaW5kZXggKG11c3QgYmUgMC02MykuXG4iKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihTQkM4MzYwX0VOQUJMRSwgMSwgIlNCQzgzNjAiKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJFTkFCTEUgbWV0aG9kIEkvTyAlWCBpcyBub3QgYXZhaWxhYmxlLlxuIiwKIAkJICAgICAgIFNCQzgzNjBfRU5BQkxFKTsKIAkJcmVzID0gLUVJTzsKLQkJZ290byBvdXRfbm9lbmFibGVyZWc7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKFNCQzgzNjBfQkFTRVRJTUUsIDEsICJTQkM4MzYwIikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWApAQCAtMzYwLDEwICszNTksMTEgQEAKIAkJZ290byBvdXRfbm9yZWJvb3Q7CiAJfQogCi0JaWYgKHRpbWVvdXQgPCAwIHx8IHRpbWVvdXQgPiA2MykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJJbnZhbGlkIHRpbWVvdXQgaW5kZXggKG11c3QgYmUgMC02MykuXG4iKTsKLQkJcmVzID0gLUVJTlZBTDsKLQkJZ290byBvdXRfbm9yZWJvb3Q7CisJc3Bpbl9sb2NrX2luaXQoJnNiYzgzNjBfbG9jayk7CisJcmVzID0gbWlzY19yZWdpc3Rlcigmc2JjODM2MF9taXNjZGV2KTsKKwlpZiAocmVzKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZWdpc3RlciBtaXNjIGRldmljZVxuIik7CisJCWdvdG8gb3V0X25vbWlzYzsKIAl9CiAKIAl3ZF9tYXJnaW4gPSB3ZF90aW1lc1t0aW1lb3V0XVswXTsKQEAgLTM4MywxMyArMzgzLDEzIEBACiAKIAlyZXR1cm4gMDsKIAotICAgICAgb3V0X25vcmVib290OgotCXJlbGVhc2VfcmVnaW9uKFNCQzgzNjBfRU5BQkxFLCAxKTsKLQlyZWxlYXNlX3JlZ2lvbihTQkM4MzYwX0JBU0VUSU1FLCAxKTsKLSAgICAgIG91dF9ub2VuYWJsZXJlZzoKLSAgICAgIG91dF9ub2Jhc2V0aW1lcmVnOgotCW1pc2NfZGVyZWdpc3Rlcigmc2JjODM2MF9taXNjZGV2KTsKICAgICAgIG91dF9ub21pc2M6CisJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnNiYzgzNjBfbm90aWZpZXIpOworICAgICAgb3V0X25vcmVib290OgorCXJlbGVhc2VfcmVnaW9uKFNCQzgzNjBfQkFTRVRJTUUsIDEpOworICAgICAgb3V0X25vYmFzZXRpbWVyZWc6CisJcmVsZWFzZV9yZWdpb24oU0JDODM2MF9FTkFCTEUsIDEpOworICAgICAgb3V0OgogCXJldHVybiByZXM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ODM2MjdoZl93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ODM2MjdoZl93ZHQuYwppbmRleCAzMzdlZTQyLi5iNDZlN2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzNjI3aGZfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3c4MzYyN2hmX3dkdC5jCkBAIC0xLDUgKzEsOCBAQAogLyoKLSAqCXc4MzYyN2hmIFdEVCBkcml2ZXIKKyAqCXc4MzYyN2hmL3RoZiBXRFQgZHJpdmVyCisgKgorICoJKGMpIENvcHlyaWdodCAyMDA3IFZsYWQgRHJ1a2tlciA8dmxhZEBzdG9yZXdpei5jb20+CisgKgkJYWRkZWQgc3VwcG9ydCBmb3IgVzgzNjI3VEhGLgogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwMyBQ4WRyYWlnIEJyYWR5IDxQQGRyYWlnQnJhZHkuY29tPgogICoKQEAgLTM5LDcgKzQyLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2RlZmluZSBXQVRDSERPR19OQU1FICJ3ODM2MjdoZiBXRFQiCisjZGVmaW5lIFdBVENIRE9HX05BTUUgInc4MzYyN2hmL3RoZiBXRFQiCiAjZGVmaW5lIFBGWCBXQVRDSERPR19OQU1FICI6ICIKICNkZWZpbmUgV0FUQ0hET0dfVElNRU9VVCA2MAkJLyogNjAgc2VjIGRlZmF1bHQgdGltZW91dCAqLwogCkBAIC01MCw3ICs1Myw3IEBACiAvKiBZb3UgbXVzdCBzZXQgdGhpcyAtIHRoZXJlIGlzIG5vIHNhbmUgd2F5IHRvIHByb2JlIGZvciB0aGlzIGJvYXJkLiAqLwogc3RhdGljIGludCB3ZHRfaW8gPSAweDJFOwogbW9kdWxlX3BhcmFtKHdkdF9pbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mod2R0X2lvLCAidzgzNjI3aGYgV0RUIGlvIHBvcnQgKGRlZmF1bHQgMHgyRSkiKTsKK01PRFVMRV9QQVJNX0RFU0Mod2R0X2lvLCAidzgzNjI3aGYvdGhmIFdEVCBpbyBwb3J0IChkZWZhdWx0IDB4MkUpIik7CiAKIHN0YXRpYyBpbnQgdGltZW91dCA9IFdBVENIRE9HX1RJTUVPVVQ7CS8qIGluIHNlY29uZHMgKi8KIG1vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDApOwpAQCAtNzEsOSArNzQsMTkgQEAKIHN0YXRpYyB2b2lkCiB3ODM2MjdoZl9zZWxlY3Rfd2RfcmVnaXN0ZXIodm9pZCkKIHsKKwl1bnNpZ25lZCBjaGFyIGM7CiAJb3V0Yl9wKDB4ODcsIFdEVF9FRkVSKTsgLyogRW50ZXIgZXh0ZW5kZWQgZnVuY3Rpb24gbW9kZSAqLwogCW91dGJfcCgweDg3LCBXRFRfRUZFUik7IC8qIEFnYWluIGFjY29yZGluZyB0byBtYW51YWwgKi8KIAorCW91dGIoMHgyMCwgV0RUX0VGRVIpOyAJLyogY2hlY2sgY2hpcCB2ZXJzaW9uCSovCisJYyA9IGluYihXRFRfRUZEUik7CisJaWYgKGMgPT0gMHg4MikgewkvKiBXODM2MjdUSEYgCQkqLworCQlvdXRiX3AoMHgyYiwgV0RUX0VGRVIpOyAvKiBzZWxlY3QgR1BJTzMgKi8KKwkJYyA9ICgoaW5iX3AoV0RUX0VGRFIpICYgMHhmNykgfCAweDA0KTsgLyogc2VsZWN0IFdEVDAgKi8KKwkJb3V0Yl9wKDB4MmIsIFdEVF9FRkVSKTsKKwkJb3V0Yl9wKGMsIFdEVF9FRkRSKTsJLyogc2V0IEdQSU8zIHRvIFdEVDAgKi8KKwl9CisKIAlvdXRiX3AoMHgwNywgV0RUX0VGRVIpOyAvKiBwb2ludCB0byBsb2dpY2FsIGRldmljZSBudW1iZXIgcmVnICovCiAJb3V0Yl9wKDB4MDgsIFdEVF9FRkRSKTsgLyogc2VsZWN0IGxvZ2ljYWwgZGV2aWNlIDggKEdQSU8yKSAqLwogCW91dGJfcCgweDMwLCBXRFRfRUZFUik7IC8qIHNlbGVjdCBDUjMwICovCkBAIC0zMTEsNyArMzI0LDcgQEAKIAogCXNwaW5fbG9ja19pbml0KCZpb19sb2NrKTsKIAotCXByaW50ayhLRVJOX0lORk8gIldEVCBkcml2ZXIgZm9yIHRoZSBXaW5ib25kKFRNKSBXODM2MjdIRiBTdXBlciBJL08gY2hpcCBpbml0aWFsaXNpbmcuXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJXRFQgZHJpdmVyIGZvciB0aGUgV2luYm9uZChUTSkgVzgzNjI3SEYvVEhGIFN1cGVyIEkvTyBjaGlwIGluaXRpYWxpc2luZy5cbiIpOwogCiAJaWYgKHdkdF9zZXRfaGVhcnRiZWF0KHRpbWVvdXQpKSB7CiAJCXdkdF9zZXRfaGVhcnRiZWF0KFdBVENIRE9HX1RJTUVPVVQpOwpAQCAtMzY3LDUgKzM4MCw1IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlDhZHJhaWcgQnJhZHkgPFBAZHJhaWdCcmFkeS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oInc4MzYyN2hmIFdEVCBkcml2ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigidzgzNjI3aGYvdGhmIFdEVCBkcml2ZXIiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IDg5M2RiYWYuLmViMzdmYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMTY4NSw5ICsxNjg1LDExIEBACiAJaWYgKHN5c19kZXYpIHsKIAkJc3dpdGNoIChhY3Rpb24pIHsKIAkJY2FzZSBDUFVfT05MSU5FOgorCQljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgogCQkJY3B1ZnJlcV9hZGRfZGV2KHN5c19kZXYpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKIAkJCWlmICh1bmxpa2VseShsb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpKSkKIAkJCQlCVUcoKTsKIApAQCAtMTY5OSw2ICsxNzAxLDcgQEAKIAkJCV9fY3B1ZnJlcV9yZW1vdmVfZGV2KHN5c19kZXYpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCQljYXNlIENQVV9ET1dOX0ZBSUxFRF9GUk9aRU46CiAJCQljcHVmcmVxX2FkZF9kZXYoc3lzX2Rldik7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKaW5kZXggOGQwNTNmNS4uODUzMmJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCkBAIC00NzAsNyArNDcwLDcgQEAKIAlkYnNfaW5mby0+ZW5hYmxlID0gMTsKIAlvbmRlbWFuZF9wb3dlcnNhdmVfYmlhc19pbml0KCk7CiAJZGJzX2luZm8tPnNhbXBsZV90eXBlID0gREJTX05PUk1BTF9TQU1QTEU7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmRic19pbmZvLT53b3JrLCBkb19kYnNfdGltZXIpOworCUlOSVRfREVMQVlFRF9XT1JLX0RFRkVSUkFCTEUoJmRic19pbmZvLT53b3JrLCBkb19kYnNfdGltZXIpOwogCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihkYnNfaW5mby0+Y3B1LCBrb25kZW1hbmRfd3EsICZkYnNfaW5mby0+d29yaywKIAkgICAgICAgICAgICAgICAgICAgICAgZGVsYXkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKaW5kZXggZDFjN2NhYy4uZDJmMGNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCkBAIC0zMTMsOSArMzEzLDExIEBACiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgogCQljcHVmcmVxX3VwZGF0ZV9wb2xpY3koY3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfREVBRDoKKwljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAkJY3B1ZnJlcV9zdGF0c19mcmVlX3RhYmxlKGNwdSk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL0tjb25maWcgYi9kcml2ZXJzL2NyeXB0by9LY29uZmlnCmluZGV4IGYyMWZlNjYuLmJiOTBjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKKysrIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwpAQCAtMSwxMCArMSwxMCBAQAogbWVudSAiSGFyZHdhcmUgY3J5cHRvIGRldmljZXMiCiAKIGNvbmZpZyBDUllQVE9fREVWX1BBRExPQ0sKLQlib29sICJTdXBwb3J0IGZvciBWSUEgUGFkTG9jayBBQ0UiCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFZJQSBQYWRMb2NrIEFDRSIKIAlkZXBlbmRzIG9uIFg4Nl8zMgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCi0JZGVmYXVsdCB5CisJZGVmYXVsdCBtCiAJaGVscAogCSAgU29tZSBWSUEgcHJvY2Vzc29ycyBjb21lIHdpdGggYW4gaW50ZWdyYXRlZCBjcnlwdG8gZW5naW5lCiAJICAoc28gY2FsbGVkIFZJQSBQYWRMb2NrIEFDRSwgQWR2YW5jZWQgQ3J5cHRvZ3JhcGh5IEVuZ2luZSkKQEAgLTUxLDkgKzUxLDMxIEBACiAJZGVmYXVsdCBtCiAJaGVscAogCSAgU2F5ICdZJyBoZXJlIHRvIHVzZSB0aGUgQU1EIEdlb2RlIExYIHByb2Nlc3NvciBvbi1ib2FyZCBBRVMKLQkgIGVuZ2luZSBmb3IgdGhlIENyeXB0b0FQSSBBRVMgYWxvZ3JpdGhtLgorCSAgZW5naW5lIGZvciB0aGUgQ3J5cHRvQVBJIEFFUyBhbGdvcml0aG0uCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGdlb2RlLWFlcy4KIAorY29uZmlnIFpDUllQVAorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBQQ0ktYXR0YWNoZWQgY3J5cHRvZ3JhcGhpYyBhZGFwdGVycyIKKwlkZXBlbmRzIG9uIFMzOTAKKwlzZWxlY3QgWkNSWVBUX01PTk9MSVRISUMgaWYgWkNSWVBUPSJ5IgorCWRlZmF1bHQgIm0iCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBhIFBDSS1hdHRhY2hlZCBjcnlwdG9ncmFwaGljCisJICBhZGFwdGVyIGxpa2U6CisJICArIFBDSSBDcnlwdG9ncmFwaGljIEFjY2VsZXJhdG9yIChQQ0lDQSkKKwkgICsgUENJIENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgKFBDSUNDKQorCSAgKyBQQ0ktWCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChQQ0lYQ0MpCisJICArIENyeXB0byBFeHByZXNzMiBDb3Byb2Nlc3NvciAoQ0VYMkMpCisJICArIENyeXB0byBFeHByZXNzMiBBY2NlbGVyYXRvciAoQ0VYMkEpCisKK2NvbmZpZyBaQ1JZUFRfTU9OT0xJVEhJQworCWJvb2wgIk1vbm9saXRoaWMgemNyeXB0IG1vZHVsZSIKKwlkZXBlbmRzIG9uIFpDUllQVD0ibSIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSBtb2R1bGUgejkwY3J5cHQua28KKwkgIHRoYXQgY29udGFpbnMgYWxsIHBhcnRzIG9mIHRoZSBjcnlwdG8gZGV2aWNlIGRyaXZlciAoYXAgYnVzLAorCSAgcmVxdWVzdCByb3V0ZXIgYW5kIGFsbCB0aGUgY2FyZCBkcml2ZXJzKS4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vZ2VvZGUtYWVzLmMgYi9kcml2ZXJzL2NyeXB0by9nZW9kZS1hZXMuYwppbmRleCA2ZDM4NDBlLi42YTg2OTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9nZW9kZS1hZXMuYworKysgYi9kcml2ZXJzL2NyeXB0by9nZW9kZS1hZXMuYwpAQCAtMTAyLDEwICsxMDIsMTUgQEAKIAl1MzIgZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCi0JaWYgKG9wLT5sZW4gPT0gMCB8fCBvcC0+c3JjID09IG9wLT5kc3QpCisJaWYgKG9wLT5sZW4gPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAob3AtPmZsYWdzICYgQUVTX0ZMQUdTX0NPSEVSRU5UKQorCS8qIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGlzIHRoZSBzYW1lLCB0aGVuCisJICogd2UgbmVlZCB0byB0dXJuIG9uIHRoZSBjb2hlcmVudCBmbGFncywgb3RoZXJ3aXNlCisJICogd2UgZG9uJ3QgbmVlZCB0byB3b3JyeQorCSAqLworCisJaWYgKG9wLT5zcmMgPT0gb3AtPmRzdCkKIAkJZmxhZ3MgfD0gKEFFU19DVFJMX0RDQSB8IEFFU19DVFJMX1NDQSk7CiAKIAlpZiAob3AtPmRpciA9PSBBRVNfRElSX0VOQ1JZUFQpCkBAIC0xMjAsNyArMTI1LDcgQEAKIAkJX3dyaXRlZmllbGQoQUVTX1dSSVRFSVYwX1JFRywgb3AtPml2KTsKIAl9CiAKLQlpZiAob3AtPmZsYWdzICYgQUVTX0ZMQUdTX1VTUktFWSkgeworCWlmICghKG9wLT5mbGFncyAmIEFFU19GTEFHU19ISURERU5LRVkpKSB7CiAJCWZsYWdzIHw9IEFFU19DVFJMX1dSS0VZOwogCQlfd3JpdGVmaWVsZChBRVNfV1JJVEVLRVkwX1JFRywgb3AtPmtleSk7CiAJfQpAQCAtMjg5LDYgKzI5NCw3IEBACiAJCQkuc2V0a2V5CQkJPQlnZW9kZV9zZXRrZXksCiAJCQkuZW5jcnlwdAkJPQlnZW9kZV9jYmNfZW5jcnlwdCwKIAkJCS5kZWNyeXB0CQk9CWdlb2RlX2NiY19kZWNyeXB0LAorCQkJLml2c2l6ZQkJCT0JQUVTX0lWX0xFTkdUSCwKIAkJfQogCX0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9nZW9kZS1hZXMuaCBiL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5oCmluZGV4IDgwMDNhMzYuLmY0Nzk2ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5oCisrKyBiL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5oCkBAIC0yMCw4ICsyMCw3IEBACiAjZGVmaW5lIEFFU19ESVJfREVDUllQVCAwCiAjZGVmaW5lIEFFU19ESVJfRU5DUllQVCAxCiAKLSNkZWZpbmUgQUVTX0ZMQUdTX1VTUktFWSAgICgxIDw8IDApCi0jZGVmaW5lIEFFU19GTEFHU19DT0hFUkVOVCAoMSA8PCAxKQorI2RlZmluZSBBRVNfRkxBR1NfSElEREVOS0VZICgxIDw8IDApCiAKIHN0cnVjdCBnZW9kZV9hZXNfb3AgewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCAzMGQwMjFkLi43MmJlNmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAjCiAKIG1lbnUgIkRNQSBFbmdpbmUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFTMzkwCiAKIGNvbmZpZyBETUFfRU5HSU5FCiAJYm9vbCAiU3VwcG9ydCBmb3IgRE1BIGVuZ2luZXMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvS2NvbmZpZyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCmluZGV4IDRmMDg5ODQuLjgwN2M0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCkBAIC03LDYgKzcsNyBAQAogIwogCiBtZW51ICdFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCknCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0KIAogY29uZmlnIEVEQUMKIAl0cmlzdGF0ZSAiRURBQyBjb3JlIHN5c3RlbSBlcnJvciByZXBvcnRpbmcgKEVYUEVSSU1FTlRBTCkiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTgyODc1cF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTgyODc1cF9lZGFjLmMKaW5kZXggMTYxZmUwOS4uMjgwMGIzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k4Mjg3NXBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pODI4NzVwX2VkYWMuYwpAQCAtMjYxLDEwICsyNjEsNiBAQAogCWk4Mjg3NXBfcHJvY2Vzc19lcnJvcl9pbmZvKG1jaSwgJmluZm8sIDEpOwogfQogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLWV4dGVybiBpbnQgcGNpX3Byb2NfYXR0YWNoX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqKTsKLSNlbmRpZgotCiAvKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIDEgb24gZmFpbHVyZS4gKi8KIHN0YXRpYyBpbnQgaTgyODc1cF9zZXR1cF9vdmVyZmxfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlzdHJ1Y3QgcGNpX2RldiAqKm92cmZsX3BkZXYsIHZvaWQgX19pb21lbSAqKm92cmZsX3dpbmRvdykKQEAgLTI4NywxNyArMjgzLDEyIEBACiAKIAkJaWYgKGRldiA9PSBOVUxMKQogCQkJcmV0dXJuIDE7CisKKyAgICAgICAgCXBjaV9idXNfYWRkX2RldmljZShkZXYpOwogCX0KIAogCSpvdnJmbF9wZGV2ID0gZGV2OwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlpZiAoKGRldi0+cHJvY2VudCA9PSBOVUxMKSAmJiBwY2lfcHJvY19hdHRhY2hfZGV2aWNlKGRldikpIHsKLQkJaTgyODc1cF9wcmludGsoS0VSTl9FUlIsICIlcygpOiBGYWlsZWQgdG8gYXR0YWNoIG92ZXJmbG93ICIKLQkJCSAgICAgICAiZGV2aWNlXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAxOwotCX0KLSNlbmRpZiAgLyogQ09ORklHX1BST0NfRlMgKi8KIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkgewogCQlpODI4NzVwX3ByaW50ayhLRVJOX0VSUiwgIiVzKCk6IEZhaWxlZCB0byBlbmFibGUgb3ZlcmZsb3cgIgogCQkJICAgICAgICJkZXZpY2VcbiIsIF9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWlzYS92aXJ0dWFsX3Jvb3QuYyBiL2RyaXZlcnMvZWlzYS92aXJ0dWFsX3Jvb3QuYwppbmRleCA5YjRmY2FjLi4zMDc0ODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Vpc2EvdmlydHVhbF9yb290LmMKKysrIGIvZHJpdmVycy9laXNhL3ZpcnR1YWxfcm9vdC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJLyogbm90aGluZyByZWFsbHkgdG8gZG8gaGVyZSAqLwogfQogCi1zdGF0aWMgaW50IHZpcnR1YWxfZWlzYV9yb290X2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB2aXJ0dWFsX2Vpc2Ffcm9vdF9pbml0ICh2b2lkKQogewogCWludCByOwogCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9LY29uZmlnIGIvZHJpdmVycy9maXJld2lyZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NmRhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcKQEAgLTAsMCArMSw2MSBAQAorIyAtKi0gc2hlbGwtc2NyaXB0IC0qLQorCitjb21tZW50ICJBbiBhbHRlcm5hdGl2ZSBGaXJlV2lyZSBzdGFjayBpcyBhdmFpbGFibGUgd2l0aCBFWFBFUklNRU5UQUw9eSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTD1uCisKK2NvbmZpZyBGSVJFV0lSRQorCXRyaXN0YXRlICJJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0IChKVUpVIGFsdGVybmF0aXZlIHN0YWNrLCBleHBlcmltZW50YWwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJc2VsZWN0IENSQ19JVFVfVAorCWhlbHAKKwkgIElFRUUgMTM5NCBkZXNjcmliZXMgYSBoaWdoIHBlcmZvcm1hbmNlIHNlcmlhbCBidXMsIHdoaWNoIGlzIGFsc28KKwkgIGtub3duIGFzIEZpcmVXaXJlKHRtKSBvciBpLkxpbmsodG0pIGFuZCBpcyB1c2VkIGZvciBjb25uZWN0aW5nIGFsbAorCSAgc29ydHMgb2YgZGV2aWNlcyAobW9zdCBub3RhYmx5IGRpZ2l0YWwgdmlkZW8gY2FtZXJhcykgdG8geW91cgorCSAgY29tcHV0ZXIuCisKKwkgIElmIHlvdSBoYXZlIEZpcmVXaXJlIGhhcmR3YXJlIGFuZCB3YW50IHRvIHVzZSBpdCwgc2F5IFkgaGVyZS4gIFRoaXMKKwkgIGlzIHRoZSBjb3JlIHN1cHBvcnQgb25seSwgeW91IHdpbGwgYWxzbyBuZWVkIHRvIHNlbGVjdCBhIGRyaXZlciBmb3IKKwkgIHlvdXIgSUVFRSAxMzk0IGFkYXB0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGZpcmV3aXJlLWNvcmUuCisKKwkgIFRoaXMgaXMgdGhlICJKVUpVIiBGaXJlV2lyZSBzdGFjaywgYW4gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24KKwkgIGRlc2lnbmVkIGZvciByb2J1c3RuZXNzIGFuZCBzaW1wbGljaXR5LiAgWW91IGNhbiBidWlsZCBlaXRoZXIgdGhpcworCSAgc3RhY2ssIG9yIHRoZSBjbGFzc2ljIHN0YWNrICh0aGUgaWVlZTEzOTQgZHJpdmVyLCBvaGNpMTM5NCBldGMuKQorCSAgb3IgYm90aC4KKworY29uZmlnIEZJUkVXSVJFX09IQ0kKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgT0hDSSBGaXJlV2lyZSBob3N0IGNvbnRyb2xsZXJzIgorCWRlcGVuZHMgb24gUENJICYmIEZJUkVXSVJFCisJaGVscAorCSAgRW5hYmxlIHRoaXMgZHJpdmVyIGlmIHlvdSBoYXZlIGEgRmlyZVdpcmUgY29udHJvbGxlciBiYXNlZAorCSAgb24gdGhlIE9IQ0kgc3BlY2lmaWNhdGlvbi4gIEZvciBhbGwgcHJhY3RpY2FsIHB1cnBvc2VzLCB0aGlzCisJICBpcyB0aGUgb25seSBjaGlwc2V0IGluIHVzZSwgc28gc2F5IFkgaGVyZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogIFRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGZpcmV3aXJlLW9oY2kuCisKKwkgIElmIHlvdSBhbHNvIGJ1aWxkIG9oY2kxMzk0IG9mIHRoZSBjbGFzc2ljIElFRUUgMTM5NCBkcml2ZXIgc3RhY2ssCisJICBibGFja2xpc3QgZWl0aGVyIG9oY2kxMzk0IG9yIGZpcmV3aXJlLW9oY2kgdG8gbGV0IGhvdHBsdWcgbG9hZCB0aGUKKwkgIGRlc2lyZWQgZHJpdmVyLgorCitjb25maWcgRklSRVdJUkVfU0JQMgorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBzdG9yYWdlIGRldmljZXMgKFNCUC0yIHByb3RvY29sIGRyaXZlcikiCisJZGVwZW5kcyBvbiBGSVJFV0lSRSAmJiBTQ1NJCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB5b3UgdG8gdXNlIFNCUC0yIGRldmljZXMgY29ubmVjdGVkIHRvIGEKKwkgIEZpcmVXaXJlIGJ1cy4gIFNCUC0yIGRldmljZXMgaW5jbHVkZSBzdG9yYWdlIGRldmljZXMgbGlrZQorCSAgaGFyZGRpc2tzIGFuZCBEVkQgZHJpdmVzLCBhbHNvIHNvbWUgb3RoZXIgRmlyZVdpcmUgZGV2aWNlcworCSAgbGlrZSBzY2FubmVycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogIFRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGZpcmV3aXJlLXNicDIuCisKKwkgIFlvdSBzaG91bGQgYWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgZGlza3MsIENELVJPTXMsIGV0Yy4gaW4gdGhlIFNDU0kKKwkgIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi4KKworCSAgSWYgeW91IGFsc28gYnVpbGQgc2JwMiBvZiB0aGUgY2xhc3NpYyBJRUVFIDEzOTQgZHJpdmVyIHN0YWNrLAorCSAgYmxhY2tsaXN0IGVpdGhlciBzYnAyIG9yIGZpcmV3aXJlLXNicDIgdG8gbGV0IGhvdHBsdWcgbG9hZCB0aGUKKwkgIGRlc2lyZWQgZHJpdmVyLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL01ha2VmaWxlIGIvZHJpdmVycy9maXJld2lyZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2MzMWU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJld2lyZS9NYWtlZmlsZQpAQCAtMCwwICsxLDEyIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgTGludXggSUVFRSAxMzk0IGltcGxlbWVudGF0aW9uCisjCisKK2ZpcmV3aXJlLWNvcmUteSArPSBmdy1jYXJkLm8gZnctdG9wb2xvZ3kubyBmdy10cmFuc2FjdGlvbi5vIGZ3LWlzby5vIFwKKyAgICAgICAgICAgICAgICAgICBmdy1kZXZpY2UubyBmdy1jZGV2Lm8KK2ZpcmV3aXJlLW9oY2kteSArPSBmdy1vaGNpLm8KK2ZpcmV3aXJlLXNicDIteSArPSBmdy1zYnAyLm8KKworb2JqLSQoQ09ORklHX0ZJUkVXSVJFKSArPSBmaXJld2lyZS1jb3JlLm8KK29iai0kKENPTkZJR19GSVJFV0lSRV9PSENJKSArPSBmaXJld2lyZS1vaGNpLm8KK29iai0kKENPTkZJR19GSVJFV0lSRV9TQlAyKSArPSBmaXJld2lyZS1zYnAyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1jYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWViMWVkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCkBAIC0wLDAgKzEsNTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgIEtyaXN0aWFuIEhvZWdzYmVyZyA8a3JoQGJpdHBsYW5ldC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYy1pdHUtdC5oPgorI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiZnctdG9wb2xvZ3kuaCIKKyNpbmNsdWRlICJmdy1kZXZpY2UuaCIKKworaW50IGZ3X2NvbXB1dGVfYmxvY2tfY3JjKHUzMiAqYmxvY2spCit7CisJX19iZTMyIGJlMzJfYmxvY2tbMjU2XTsKKwlpbnQgaSwgbGVuZ3RoOworCisJbGVuZ3RoID0gKCpibG9jayA+PiAxNikgJiAweGZmOworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKwkJYmUzMl9ibG9ja1tpXSA9IGNwdV90b19iZTMyKGJsb2NrW2kgKyAxXSk7CisJKmJsb2NrIHw9IGNyY19pdHVfdCgwLCAodTggKikgYmUzMl9ibG9jaywgbGVuZ3RoICogNCk7CisKKwlyZXR1cm4gbGVuZ3RoOworfQorCitzdGF0aWMgREVGSU5FX01VVEVYKGNhcmRfbXV0ZXgpOworc3RhdGljIExJU1RfSEVBRChjYXJkX2xpc3QpOworCitzdGF0aWMgTElTVF9IRUFEKGRlc2NyaXB0b3JfbGlzdCk7CitzdGF0aWMgaW50IGRlc2NyaXB0b3JfY291bnQ7CisKKyNkZWZpbmUgQklCX0NSQyh2KQkJKCh2KSA8PCAgMCkKKyNkZWZpbmUgQklCX0NSQ19MRU5HVEgodikJKCh2KSA8PCAxNikKKyNkZWZpbmUgQklCX0lORk9fTEVOR1RIKHYpCSgodikgPDwgMjQpCisKKyNkZWZpbmUgQklCX0xJTktfU1BFRUQodikJKCh2KSA8PCAgMCkKKyNkZWZpbmUgQklCX0dFTkVSQVRJT04odikJKCh2KSA8PCAgNCkKKyNkZWZpbmUgQklCX01BWF9ST00odikJCSgodikgPDwgIDgpCisjZGVmaW5lIEJJQl9NQVhfUkVDRUlWRSh2KQkoKHYpIDw8IDEyKQorI2RlZmluZSBCSUJfQ1lDX0NMS19BQ0ModikJKCh2KSA8PCAxNikKKyNkZWZpbmUgQklCX1BNQwkJCSgoMSkgPDwgMjcpCisjZGVmaW5lIEJJQl9CTUMJCQkoKDEpIDw8IDI4KQorI2RlZmluZSBCSUJfSVNDCQkJKCgxKSA8PCAyOSkKKyNkZWZpbmUgQklCX0NNQwkJCSgoMSkgPDwgMzApCisjZGVmaW5lIEJJQl9JTUMJCQkoKDEpIDw8IDMxKQorCitzdGF0aWMgdTMyICoKK2dlbmVyYXRlX2NvbmZpZ19yb20oc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHNpemVfdCAqY29uZmlnX3JvbV9sZW5ndGgpCit7CisJc3RydWN0IGZ3X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RhdGljIHUzMiBjb25maWdfcm9tWzI1Nl07CisJaW50IGksIGosIGxlbmd0aDsKKworCS8qCisJICogSW5pdGlhbGl6ZSBjb250ZW50cyBvZiBjb25maWcgcm9tIGJ1ZmZlci4gIE9uIHRoZSBPSENJCisJICogY29udHJvbGxlciwgYmxvY2sgcmVhZHMgdG8gdGhlIGNvbmZpZyByb20gYWNjZXNzZXMgdGhlIGhvc3QKKwkgKiBtZW1vcnksIGJ1dCBxdWFkbGV0IHJlYWQgYWNjZXNzIHRoZSBoYXJkd2FyZSBidXMgaW5mbyBibG9jaworCSAqIHJlZ2lzdGVycy4gIFRoYXQncyBqdXN0IGNyYWNrLCBidXQgaXQgbWVhbnMgd2Ugc2hvdWxkIG1ha2UKKwkgKiBzdXJlIHRoZSBjb250ZW50cyBvZiBidXMgaW5mbyBibG9jayBpbiBob3N0IG1lbW9yeSBtYXRoY2VzCisJICogdGhlIHZlcnNpb24gc3RvcmVkIGluIHRoZSBPSENJIHJlZ2lzdGVycy4KKwkgKi8KKworCW1lbXNldChjb25maWdfcm9tLCAwLCBzaXplb2YoY29uZmlnX3JvbSkpOworCWNvbmZpZ19yb21bMF0gPSBCSUJfQ1JDX0xFTkdUSCg0KSB8IEJJQl9JTkZPX0xFTkdUSCg0KSB8IEJJQl9DUkMoMCk7CisJY29uZmlnX3JvbVsxXSA9IDB4MzEzMzM5MzQ7CisKKwljb25maWdfcm9tWzJdID0KKwkJQklCX0xJTktfU1BFRUQoY2FyZC0+bGlua19zcGVlZCkgfAorCQlCSUJfR0VORVJBVElPTihjYXJkLT5jb25maWdfcm9tX2dlbmVyYXRpb24rKyAlIDE0ICsgMikgfAorCQlCSUJfTUFYX1JPTSgyKSB8CisJCUJJQl9NQVhfUkVDRUlWRShjYXJkLT5tYXhfcmVjZWl2ZSkgfAorCQlCSUJfQk1DIHwgQklCX0lTQyB8IEJJQl9DTUMgfCBCSUJfSU1DOworCWNvbmZpZ19yb21bM10gPSBjYXJkLT5ndWlkID4+IDMyOworCWNvbmZpZ19yb21bNF0gPSBjYXJkLT5ndWlkOworCisJLyogR2VuZXJhdGUgcm9vdCBkaXJlY3RvcnkuICovCisJaSA9IDU7CisJY29uZmlnX3JvbVtpKytdID0gMDsKKwljb25maWdfcm9tW2krK10gPSAweDBjMDA4M2MwOyAvKiBub2RlIGNhcGFiaWxpdGllcyAqLworCWogPSBpICsgZGVzY3JpcHRvcl9jb3VudDsKKworCS8qIEdlbmVyYXRlIHJvb3QgZGlyZWN0b3J5IGVudHJpZXMgZm9yIGRlc2NyaXB0b3JzLiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkgKGRlc2MsICZkZXNjcmlwdG9yX2xpc3QsIGxpbmspIHsKKwkJaWYgKGRlc2MtPmltbWVkaWF0ZSA+IDApCisJCQljb25maWdfcm9tW2krK10gPSBkZXNjLT5pbW1lZGlhdGU7CisJCWNvbmZpZ19yb21baV0gPSBkZXNjLT5rZXkgfCAoaiAtIGkpOworCQlpKys7CisJCWogKz0gZGVzYy0+bGVuZ3RoOworCX0KKworCS8qIFVwZGF0ZSByb290IGRpcmVjdG9yeSBsZW5ndGguICovCisJY29uZmlnX3JvbVs1XSA9IChpIC0gNSAtIDEpIDw8IDE2OworCisJLyogRW5kIG9mIHJvb3QgZGlyZWN0b3J5LCBub3cgY29weSBpbiBkZXNjcmlwdG9ycy4gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChkZXNjLCAmZGVzY3JpcHRvcl9saXN0LCBsaW5rKSB7CisJCW1lbWNweSgmY29uZmlnX3JvbVtpXSwgZGVzYy0+ZGF0YSwgZGVzYy0+bGVuZ3RoICogNCk7CisJCWkgKz0gZGVzYy0+bGVuZ3RoOworCX0KKworCS8qIENhbGN1bGF0ZSBDUkNzIGZvciBhbGwgYmxvY2tzIGluIHRoZSBjb25maWcgcm9tLiAgVGhpcworCSAqIGFzc3VtZXMgdGhhdCBDUkMgbGVuZ3RoIGFuZCBpbmZvIGxlbmd0aCBhcmUgaWRlbnRpY2FsIGZvcgorCSAqIHRoZSBidXMgaW5mbyBibG9jaywgd2hpY2ggaXMgYWx3YXlzIHRoZSBjYXNlIGZvciB0aGlzCisJICogaW1wbGVtZW50YXRpb24uICovCisJZm9yIChpID0gMDsgaSA8IGo7IGkgKz0gbGVuZ3RoICsgMSkKKwkJbGVuZ3RoID0gZndfY29tcHV0ZV9ibG9ja19jcmMoY29uZmlnX3JvbSArIGkpOworCisJKmNvbmZpZ19yb21fbGVuZ3RoID0gajsKKworCXJldHVybiBjb25maWdfcm9tOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX2NvbmZpZ19yb21zKHZvaWQpCit7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQ7CisJdTMyICpjb25maWdfcm9tOworCXNpemVfdCBsZW5ndGg7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChjYXJkLCAmY2FyZF9saXN0LCBsaW5rKSB7CisJCWNvbmZpZ19yb20gPSBnZW5lcmF0ZV9jb25maWdfcm9tKGNhcmQsICZsZW5ndGgpOworCQljYXJkLT5kcml2ZXItPnNldF9jb25maWdfcm9tKGNhcmQsIGNvbmZpZ19yb20sIGxlbmd0aCk7CisJfQorfQorCitpbnQKK2Z3X2NvcmVfYWRkX2Rlc2NyaXB0b3Ioc3RydWN0IGZ3X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc2l6ZV90IGk7CisKKwkvKgorCSAqIENoZWNrIGRlc2NyaXB0b3IgaXMgdmFsaWQ7IHRoZSBsZW5ndGggb2YgYWxsIGJsb2NrcyBpbiB0aGUKKwkgKiBkZXNjcmlwdG9yIGhhcyB0byBhZGQgdXAgdG8gZXhhY3RseSB0aGUgbGVuZ3RoIG9mIHRoZQorCSAqIGJsb2NrLgorCSAqLworCWkgPSAwOworCXdoaWxlIChpIDwgZGVzYy0+bGVuZ3RoKQorCQlpICs9IChkZXNjLT5kYXRhW2ldID4+IDE2KSArIDE7CisKKwlpZiAoaSAhPSBkZXNjLT5sZW5ndGgpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY2FyZF9tdXRleCk7CisKKwlsaXN0X2FkZF90YWlsKCZkZXNjLT5saW5rLCAmZGVzY3JpcHRvcl9saXN0KTsKKwlkZXNjcmlwdG9yX2NvdW50Kys7CisJaWYgKGRlc2MtPmltbWVkaWF0ZSA+IDApCisJCWRlc2NyaXB0b3JfY291bnQrKzsKKwl1cGRhdGVfY29uZmlnX3JvbXMoKTsKKworCW11dGV4X3VubG9jaygmY2FyZF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZndfY29yZV9hZGRfZGVzY3JpcHRvcik7CisKK3ZvaWQKK2Z3X2NvcmVfcmVtb3ZlX2Rlc2NyaXB0b3Ioc3RydWN0IGZ3X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJbXV0ZXhfbG9jaygmY2FyZF9tdXRleCk7CisKKwlsaXN0X2RlbCgmZGVzYy0+bGluayk7CisJZGVzY3JpcHRvcl9jb3VudC0tOworCWlmIChkZXNjLT5pbW1lZGlhdGUgPiAwKQorCQlkZXNjcmlwdG9yX2NvdW50LS07CisJdXBkYXRlX2NvbmZpZ19yb21zKCk7CisKKwltdXRleF91bmxvY2soJmNhcmRfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChmd19jb3JlX3JlbW92ZV9kZXNjcmlwdG9yKTsKKworc3RhdGljIGNvbnN0IGNoYXIgZ2FwX2NvdW50X3RhYmxlW10gPSB7CisJNjMsIDUsIDcsIDgsIDEwLCAxMywgMTYsIDE4LCAyMSwgMjQsIDI2LCAyOSwgMzIsIDM1LCAzNywgNDAKK307CisKK3N0cnVjdCBibV9kYXRhIHsKKwlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gdDsKKwlzdHJ1Y3QgeworCQlfX2JlMzIgYXJnOworCQlfX2JlMzIgZGF0YTsKKwl9IGxvY2s7CisJdTMyIG9sZDsKKwlpbnQgcmNvZGU7CisJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKK307CisKK3N0YXRpYyB2b2lkCitjb21wbGV0ZV9ibV9sb2NrKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCisJCSB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBibV9kYXRhICpibWQgPSBkYXRhOworCisJaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFKQorCQlibWQtPm9sZCA9IGJlMzJfdG9fY3B1KCooX19iZTMyICopIHBheWxvYWQpOworCWJtZC0+cmNvZGUgPSByY29kZTsKKwljb21wbGV0ZSgmYm1kLT5kb25lKTsKK30KKworc3RhdGljIHZvaWQKK2Z3X2NhcmRfYm1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ3X2NhcmQsIHdvcmsud29yayk7CisJc3RydWN0IGZ3X2RldmljZSAqcm9vdDsKKwlzdHJ1Y3QgYm1fZGF0YSBibWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcm9vdF9pZCwgbmV3X3Jvb3RfaWQsIGlybV9pZCwgZ2FwX2NvdW50LCBnZW5lcmF0aW9uLCBncmFjZTsKKwlpbnQgZG9fcmVzZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKworCWdlbmVyYXRpb24gPSBjYXJkLT5nZW5lcmF0aW9uOworCXJvb3QgPSBjYXJkLT5yb290X25vZGUtPmRhdGE7CisJcm9vdF9pZCA9IGNhcmQtPnJvb3Rfbm9kZS0+bm9kZV9pZDsKKwlncmFjZSA9IHRpbWVfYWZ0ZXIoamlmZmllcywgY2FyZC0+cmVzZXRfamlmZmllcyArIERJVl9ST1VORF9VUChIWiwgMTApKTsKKworCWlmIChjYXJkLT5ibV9nZW5lcmF0aW9uICsgMSA9PSBnZW5lcmF0aW9uIHx8CisJICAgIChjYXJkLT5ibV9nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24gJiYgZ3JhY2UpKSB7CisJCS8qCisJCSAqIFRoaXMgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdobyBpcyBJUk0gYW5kCisJCSAqIHRoZW4gdHJ5IHRvIGJlY29tZSBidXMgbWFuYWdlci4gIElmIHRoZSBJUk0gaXMgbm90CisJCSAqIHdlbGwgZGVmaW5lZCAoZS5nLiBkb2VzIG5vdCBoYXZlIGFuIGFjdGl2ZSBsaW5rCisJCSAqIGxheWVyIG9yIGRvZXMgbm90IHJlc3BvbmRzIHRvIG91ciBsb2NrIHJlcXVlc3QsIHdlCisJCSAqIHdpbGwgaGF2ZSB0byBkbyBhIGxpdHRsZSB2aWdpbGFudGUgYnVzIG1hbmFnZW1lbnQuCisJCSAqIEluIHRoYXQgY2FzZSwgd2UgZG8gYSBnb3RvIGludG8gdGhlIGdhcCBjb3VudCBsb2dpYworCQkgKiBzbyB0aGF0IHdoZW4gd2UgZG8gdGhlIHJlc2V0LCB3ZSBzdGlsbCBvcHRpbWl6ZSB0aGUKKwkJICogZ2FwIGNvdW50LiAgVGhhdCBjb3VsZCB3ZWxsIHNhdmUgYSByZXNldCBpbiB0aGUKKwkJICogbmV4dCBnZW5lcmF0aW9uLgorCQkgKi8KKworCQlpcm1faWQgPSBjYXJkLT5pcm1fbm9kZS0+bm9kZV9pZDsKKwkJaWYgKCFjYXJkLT5pcm1fbm9kZS0+bGlua19vbikgeworCQkJbmV3X3Jvb3RfaWQgPSBjYXJkLT5sb2NhbF9ub2RlLT5ub2RlX2lkOworCQkJZndfbm90aWZ5KCJJUk0gaGFzIGxpbmsgb2ZmLCBtYWtpbmcgbG9jYWwgbm9kZSAoJTAyeCkgcm9vdC5cbiIsCisJCQkJICBuZXdfcm9vdF9pZCk7CisJCQlnb3RvIHBpY2tfbWU7CisJCX0KKworCQlibWQubG9jay5hcmcgPSBjcHVfdG9fYmUzMigweDNmKTsKKwkJYm1kLmxvY2suZGF0YSA9IGNwdV90b19iZTMyKGNhcmQtPmxvY2FsX25vZGUtPm5vZGVfaWQpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKworCQlpbml0X2NvbXBsZXRpb24oJmJtZC5kb25lKTsKKwkJZndfc2VuZF9yZXF1ZXN0KGNhcmQsICZibWQudCwgVENPREVfTE9DS19DT01QQVJFX1NXQVAsCisJCQkJaXJtX2lkLCBnZW5lcmF0aW9uLAorCQkJCVNDT0RFXzEwMCwgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQlVTX01BTkFHRVJfSUQsCisJCQkJJmJtZC5sb2NrLCBzaXplb2YoYm1kLmxvY2spLAorCQkJCWNvbXBsZXRlX2JtX2xvY2ssICZibWQpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZibWQuZG9uZSk7CisKKwkJaWYgKGJtZC5yY29kZSA9PSBSQ09ERV9HRU5FUkFUSU9OKSB7CisJCQkvKgorCQkJICogQW5vdGhlciBidXMgcmVzZXQgaGFwcGVuZWQuIEp1c3QgcmV0dXJuLAorCQkJICogdGhlIEJNIHdvcmsgaGFzIGJlZW4gcmVzY2hlZHVsZWQuCisJCQkgKi8KKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChibWQucmNvZGUgPT0gUkNPREVfQ09NUExFVEUgJiYgYm1kLm9sZCAhPSAweDNmKQorCQkJLyogU29tZWJvZHkgZWxzZSBpcyBCTSwgbGV0IHRoZW0gZG8gdGhlIHdvcmsuICovCisJCQlyZXR1cm47CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGJtZC5yY29kZSAhPSBSQ09ERV9DT01QTEVURSkgeworCQkJLyoKKwkJCSAqIFRoZSBsb2NrIHJlcXVlc3QgZmFpbGVkLCBtYXliZSB0aGUgSVJNCisJCQkgKiBpc24ndCByZWFsbHkgSVJNIGNhcGFibGUgYWZ0ZXIgYWxsLiBMZXQncworCQkJICogZG8gYSBidXMgcmVzZXQgYW5kIHBpY2sgdGhlIGxvY2FsIG5vZGUgYXMKKwkJCSAqIHJvb3QsIGFuZCB0aHVzLCBJUk0uCisJCQkgKi8KKwkJCW5ld19yb290X2lkID0gY2FyZC0+bG9jYWxfbm9kZS0+bm9kZV9pZDsKKwkJCWZ3X25vdGlmeSgiQk0gbG9jayBmYWlsZWQsIG1ha2luZyBsb2NhbCBub2RlICglMDJ4KSByb290LlxuIiwKKwkJCQkgIG5ld19yb290X2lkKTsKKwkJCWdvdG8gcGlja19tZTsKKwkJfQorCX0gZWxzZSBpZiAoY2FyZC0+Ym1fZ2VuZXJhdGlvbiAhPSBnZW5lcmF0aW9uKSB7CisJCS8qCisJCSAqIE9LLCB3ZSB3ZXJlbid0IEJNIGluIHRoZSBsYXN0IGdlbmVyYXRpb24sIGFuZCBpdCdzCisJCSAqIGxlc3MgdGhhbiAxMDBtcyBzaW5jZSBsYXN0IGJ1cyByZXNldC4gUmVzY2hlZHVsZQorCQkgKiB0aGlzIHRhc2sgMTAwbXMgZnJvbSBub3cuCisJCSAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2FyZC0+d29yaywgRElWX1JPVU5EX1VQKEhaLCAxMCkpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXZSdyZSBidXMgbWFuYWdlciBmb3IgdGhpcyBnZW5lcmF0aW9uLCBzbyBuZXh0IHN0ZXAgaXMgdG8KKwkgKiBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBhY3RpdmUgY3ljbGUgbWFzdGVyIGFuZCBkbyBnYXAgY291bnQKKwkgKiBvcHRpbWl6YXRpb24uCisJICovCisJY2FyZC0+Ym1fZ2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CisKKwlpZiAocm9vdCA9PSBOVUxMKSB7CisJCS8qCisJCSAqIEVpdGhlciBsaW5rX29uIGlzIGZhbHNlLCBvciB3ZSBmYWlsZWQgdG8gcmVhZCB0aGUKKwkJICogY29uZmlnIHJvbS4gIEluIGVpdGhlciBjYXNlLCBwaWNrIGFub3RoZXIgcm9vdC4KKwkJICovCisJCW5ld19yb290X2lkID0gY2FyZC0+bG9jYWxfbm9kZS0+bm9kZV9pZDsKKwl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZyb290LT5zdGF0ZSkgIT0gRldfREVWSUNFX1JVTk5JTkcpIHsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZW4ndCBwcm9iZWQgdGhpcyBkZXZpY2UgeWV0LCBiYWlsIG91dCBub3cKKwkJICogYW5kIGxldCdzIHRyeSBhZ2FpbiBvbmNlIHRoYXQncyBkb25lLgorCQkgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfSBlbHNlIGlmIChyb290LT5jb25maWdfcm9tWzJdICYgQklCX0NNQykgeworCQkvKgorCQkgKiBGSVhNRTogSSBzdXBwb3NlIHdlIHNob3VsZCBzZXQgdGhlIGNtc3RyIGJpdCBpbiB0aGUKKwkJICogU1RBVEVfQ0xFQVIgcmVnaXN0ZXIgb2YgdGhpcyBub2RlLCBhcyBkZXNjcmliZWQgaW4KKwkJICogMTM5NC0xOTk1LCA4LjQuMi42LiAgQWxzbywgc2VuZCBvdXQgYSBmb3JjZSByb290CisJCSAqIHBhY2tldCBmb3IgdGhpcyBub2RlLgorCQkgKi8KKwkJbmV3X3Jvb3RfaWQgPSByb290X2lkOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEN1cnJlbnQgcm9vdCBoYXMgYW4gYWN0aXZlIGxpbmsgbGF5ZXIgYW5kIHdlCisJCSAqIHN1Y2Nlc3NmdWxseSByZWFkIHRoZSBjb25maWcgcm9tLCBidXQgaXQncyBub3QKKwkJICogY3ljbGUgbWFzdGVyIGNhcGFibGUuCisJCSAqLworCQluZXdfcm9vdF9pZCA9IGNhcmQtPmxvY2FsX25vZGUtPm5vZGVfaWQ7CisJfQorCisgcGlja19tZToKKwkvKiBOb3cgZmlndXJlIG91dCB3aGF0IGdhcCBjb3VudCB0byBzZXQuICovCisJaWYgKGNhcmQtPnRvcG9sb2d5X3R5cGUgPT0gRldfVE9QT0xPR1lfQSAmJgorCSAgICBjYXJkLT5yb290X25vZGUtPm1heF9ob3BzIDwgQVJSQVlfU0laRShnYXBfY291bnRfdGFibGUpKQorCQlnYXBfY291bnQgPSBnYXBfY291bnRfdGFibGVbY2FyZC0+cm9vdF9ub2RlLT5tYXhfaG9wc107CisJZWxzZQorCQlnYXBfY291bnQgPSA2MzsKKworCS8qCisJICogRmluYWxseSwgZmlndXJlIG91dCBpZiB3ZSBzaG91bGQgZG8gYSByZXNldCBvciBub3QuICBJZiB3ZSd2ZQorCSAqIGRvbmUgbGVzcyB0aGF0IDUgcmVzZXRzIHdpdGggdGhlIHNhbWUgcGh5c2ljYWwgdG9wb2xvZ3kgYW5kIHdlCisJICogaGF2ZSBlaXRoZXIgYSBuZXcgcm9vdCBvciBhIG5ldyBnYXAgY291bnQgc2V0dGluZywgbGV0J3MgZG8gaXQuCisJICovCisKKwlpZiAoY2FyZC0+Ym1fcmV0cmllcysrIDwgNSAmJgorCSAgICAoY2FyZC0+Z2FwX2NvdW50ICE9IGdhcF9jb3VudCB8fCBuZXdfcm9vdF9pZCAhPSByb290X2lkKSkKKwkJZG9fcmVzZXQgPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCisJaWYgKGRvX3Jlc2V0KSB7CisJCWZ3X25vdGlmeSgicGh5IGNvbmZpZzogY2FyZCAlZCwgbmV3IHJvb3Q9JXgsIGdhcF9jb3VudD0lZFxuIiwKKwkJCSAgY2FyZC0+aW5kZXgsIG5ld19yb290X2lkLCBnYXBfY291bnQpOworCQlmd19zZW5kX3BoeV9jb25maWcoY2FyZCwgbmV3X3Jvb3RfaWQsIGdlbmVyYXRpb24sIGdhcF9jb3VudCk7CisJCWZ3X2NvcmVfaW5pdGlhdGVfYnVzX3Jlc2V0KGNhcmQsIDEpOworCX0KK30KKworc3RhdGljIHZvaWQKK2ZsdXNoX3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgZndfY2FyZCAqKWRhdGE7CisKKwlmd19mbHVzaF90cmFuc2FjdGlvbnMoY2FyZCk7Cit9CisKK3ZvaWQKK2Z3X2NhcmRfaW5pdGlhbGl6ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgY29uc3Qgc3RydWN0IGZ3X2NhcmRfZHJpdmVyICpkcml2ZXIsCisJCSAgIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKKwlzdGF0aWMgYXRvbWljX3QgaW5kZXggPSBBVE9NSUNfSU5JVCgtMSk7CisKKwlrcmVmX2luaXQoJmNhcmQtPmtyZWYpOworCWNhcmQtPmluZGV4ID0gYXRvbWljX2luY19yZXR1cm4oJmluZGV4KTsKKwljYXJkLT5kcml2ZXIgPSBkcml2ZXI7CisJY2FyZC0+ZGV2aWNlID0gZGV2aWNlOworCWNhcmQtPmN1cnJlbnRfdGxhYmVsID0gMDsKKwljYXJkLT50bGFiZWxfbWFzayA9IDA7CisJY2FyZC0+Y29sb3IgPSAwOworCisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPnRyYW5zYWN0aW9uX2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5sb2NrKTsKKwlzZXR1cF90aW1lcigmY2FyZC0+Zmx1c2hfdGltZXIsCisJCSAgICBmbHVzaF90aW1lcl9jYWxsYmFjaywgKHVuc2lnbmVkIGxvbmcpY2FyZCk7CisKKwljYXJkLT5sb2NhbF9ub2RlID0gTlVMTDsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZjYXJkLT53b3JrLCBmd19jYXJkX2JtX3dvcmspOworfQorRVhQT1JUX1NZTUJPTChmd19jYXJkX2luaXRpYWxpemUpOworCitpbnQKK2Z3X2NhcmRfYWRkKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCSAgICB1MzIgbWF4X3JlY2VpdmUsIHUzMiBsaW5rX3NwZWVkLCB1NjQgZ3VpZCkKK3sKKwl1MzIgKmNvbmZpZ19yb207CisJc2l6ZV90IGxlbmd0aDsKKworCWNhcmQtPm1heF9yZWNlaXZlID0gbWF4X3JlY2VpdmU7CisJY2FyZC0+bGlua19zcGVlZCA9IGxpbmtfc3BlZWQ7CisJY2FyZC0+Z3VpZCA9IGd1aWQ7CisKKwkvKgorCSAqIFRoZSBzdWJzeXN0ZW0gZ3JhYnMgYSByZWZlcmVuY2Ugd2hlbiB0aGUgY2FyZCBpcyBhZGRlZCBhbmQKKwkgKiBkcm9wcyBpdCB3aGVuIHRoZSBkcml2ZXIgY2FsbHMgZndfY29yZV9yZW1vdmVfY2FyZC4KKwkgKi8KKwlmd19jYXJkX2dldChjYXJkKTsKKworCW11dGV4X2xvY2soJmNhcmRfbXV0ZXgpOworCWNvbmZpZ19yb20gPSBnZW5lcmF0ZV9jb25maWdfcm9tKGNhcmQsICZsZW5ndGgpOworCWxpc3RfYWRkX3RhaWwoJmNhcmQtPmxpbmssICZjYXJkX2xpc3QpOworCW11dGV4X3VubG9jaygmY2FyZF9tdXRleCk7CisKKwlyZXR1cm4gY2FyZC0+ZHJpdmVyLT5lbmFibGUoY2FyZCwgY29uZmlnX3JvbSwgbGVuZ3RoKTsKK30KK0VYUE9SVF9TWU1CT0woZndfY2FyZF9hZGQpOworCisKKy8qCisgKiBUaGUgbmV4dCBmZXcgZnVuY3Rpb25zIGltcGxlbWVudHMgYSBkdW1teSBkcml2ZXIgdGhhdCB1c2Ugb25jZSBhCisgKiBjYXJkIGRyaXZlciBzaHV0cyBkb3duIGFuIGZ3X2NhcmQuICBUaGlzIGFsbG93cyB0aGUgZHJpdmVyIHRvCisgKiBjbGVhbmx5IHVubG9hZCwgYXMgYWxsIElPIHRvIHRoZSBjYXJkIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgZHVtbXkKKyAqIGRyaXZlciBpbnN0ZWFkIG9mIGNhbGxpbmcgaW50byB0aGUgKHBvc3NpYmx5KSB1bmxvYWRlZCBtb2R1bGUuICBUaGUKKyAqIGR1bW15IGRyaXZlciBqdXN0IGZhaWxzIGFsbCBJTy4KKyAqLworCitzdGF0aWMgaW50CitkdW1teV9lbmFibGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHUzMiAqY29uZmlnX3JvbSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlCVUcoKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQKK2R1bW15X3VwZGF0ZV9waHlfcmVnKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgYWRkcmVzcywKKwkJICAgICBpbnQgY2xlYXJfYml0cywgaW50IHNldF9iaXRzKQoreworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50CitkdW1teV9zZXRfY29uZmlnX3JvbShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJICAgICB1MzIgKmNvbmZpZ19yb20sIHNpemVfdCBsZW5ndGgpCit7CisJLyoKKwkgKiBXZSB0YWtlIHRoZSBjYXJkIG91dCBvZiBjYXJkX2xpc3QgYmVmb3JlIHNldHRpbmcgdGhlIGR1bW15CisJICogZHJpdmVyLCBzbyB0aGlzIHNob3VsZCBuZXZlciBnZXQgY2FsbGVkLgorCSAqLworCUJVRygpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQKK2R1bW15X3NlbmRfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQoreworCXBhY2tldC0+Y2FsbGJhY2socGFja2V0LCBjYXJkLCAtRU5PREVWKTsKK30KKworc3RhdGljIHZvaWQKK2R1bW15X3NlbmRfcmVzcG9uc2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3sKKwlwYWNrZXQtPmNhbGxiYWNrKHBhY2tldCwgY2FyZCwgLUVOT0RFVik7Cit9CisKK3N0YXRpYyBpbnQKK2R1bW15X2NhbmNlbF9wYWNrZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3sKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludAorZHVtbXlfZW5hYmxlX3BoeXNfZG1hKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkgICAgICBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24pCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZndfY2FyZF9kcml2ZXIgZHVtbXlfZHJpdmVyID0geworCS5uYW1lICAgICAgICAgICAgPSAiZHVtbXkiLAorCS5lbmFibGUgICAgICAgICAgPSBkdW1teV9lbmFibGUsCisJLnVwZGF0ZV9waHlfcmVnICA9IGR1bW15X3VwZGF0ZV9waHlfcmVnLAorCS5zZXRfY29uZmlnX3JvbSAgPSBkdW1teV9zZXRfY29uZmlnX3JvbSwKKwkuc2VuZF9yZXF1ZXN0ICAgID0gZHVtbXlfc2VuZF9yZXF1ZXN0LAorCS5jYW5jZWxfcGFja2V0ICAgPSBkdW1teV9jYW5jZWxfcGFja2V0LAorCS5zZW5kX3Jlc3BvbnNlICAgPSBkdW1teV9zZW5kX3Jlc3BvbnNlLAorCS5lbmFibGVfcGh5c19kbWEgPSBkdW1teV9lbmFibGVfcGh5c19kbWEsCit9OworCit2b2lkCitmd19jb3JlX3JlbW92ZV9jYXJkKHN0cnVjdCBmd19jYXJkICpjYXJkKQoreworCWNhcmQtPmRyaXZlci0+dXBkYXRlX3BoeV9yZWcoY2FyZCwgNCwKKwkJCQkgICAgIFBIWV9MSU5LX0FDVElWRSB8IFBIWV9DT05URU5ERVIsIDApOworCWZ3X2NvcmVfaW5pdGlhdGVfYnVzX3Jlc2V0KGNhcmQsIDEpOworCisJbXV0ZXhfbG9jaygmY2FyZF9tdXRleCk7CisJbGlzdF9kZWwoJmNhcmQtPmxpbmspOworCW11dGV4X3VubG9jaygmY2FyZF9tdXRleCk7CisKKwkvKiBTZXQgdXAgdGhlIGR1bW15IGRyaXZlci4gKi8KKwljYXJkLT5kcml2ZXIgPSAmZHVtbXlfZHJpdmVyOworCisJZndfZmx1c2hfdHJhbnNhY3Rpb25zKGNhcmQpOworCisJZndfZGVzdHJveV9ub2RlcyhjYXJkKTsKKworCWZ3X2NhcmRfcHV0KGNhcmQpOworfQorRVhQT1JUX1NZTUJPTChmd19jb3JlX3JlbW92ZV9jYXJkKTsKKworc3RydWN0IGZ3X2NhcmQgKgorZndfY2FyZF9nZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCit7CisJa3JlZl9nZXQoJmNhcmQtPmtyZWYpOworCisJcmV0dXJuIGNhcmQ7Cit9CitFWFBPUlRfU1lNQk9MKGZ3X2NhcmRfZ2V0KTsKKworc3RhdGljIHZvaWQKK3JlbGVhc2VfY2FyZChzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZndfY2FyZCwga3JlZik7CisKKwlrZnJlZShjYXJkKTsKK30KKworLyoKKyAqIEFuIGFzc3VtcHRpb24gZm9yIGZ3X2NhcmRfcHV0KCkgaXMgdGhhdCB0aGUgY2FyZCBkcml2ZXIgYWxsb2NhdGVzCisgKiB0aGUgZndfY2FyZCBzdHJ1Y3Qgd2l0aCBrYWxsb2MgYW5kIHRoYXQgaXQgaGFzIGJlZW4gc2h1dCBkb3duCisgKiBiZWZvcmUgdGhlIGxhc3QgcmVmIGlzIGRyb3BwZWQuCisgKi8KK3ZvaWQKK2Z3X2NhcmRfcHV0KHN0cnVjdCBmd19jYXJkICpjYXJkKQoreworCWtyZWZfcHV0KCZjYXJkLT5rcmVmLCByZWxlYXNlX2NhcmQpOworfQorRVhQT1JUX1NZTUJPTChmd19jYXJkX3B1dCk7CisKK2ludAorZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzaG9ydF9yZXNldCkKK3sKKwlpbnQgcmVnID0gc2hvcnRfcmVzZXQgPyA1IDogMTsKKwlpbnQgYml0ID0gc2hvcnRfcmVzZXQgPyBQSFlfQlVTX1NIT1JUX1JFU0VUIDogUEhZX0JVU19SRVNFVDsKKworCXJldHVybiBjYXJkLT5kcml2ZXItPnVwZGF0ZV9waHlfcmVnKGNhcmQsIHJlZywgMCwgYml0KTsKK30KK0VYUE9SVF9TWU1CT0woZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDQwMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMKQEAgLTAsMCArMSw5NzYgQEAKKy8qCisgKiBDaGFyIGRldmljZSBmb3IgZGV2aWNlIHJhdyBhY2Nlc3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyAgS3Jpc3RpYW4gSG9lZ3NiZXJnIDxrcmhAYml0cGxhbmV0Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jZGV2Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJmdy10cmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgImZ3LXRvcG9sb2d5LmgiCisjaW5jbHVkZSAiZnctZGV2aWNlLmgiCisKK3N0cnVjdCBjbGllbnQ7CitzdHJ1Y3QgY2xpZW50X3Jlc291cmNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcik7CisJdTMyIGhhbmRsZTsKK307CisKKy8qCisgKiBkZXF1ZXVlX2V2ZW50KCkganVzdCBrZnJlZSgpJ3MgdGhlIGV2ZW50LCBzbyB0aGUgZXZlbnQgaGFzIHRvIGJlCisgKiB0aGUgZmlyc3QgZmllbGQgaW4gdGhlIHN0cnVjdC4KKyAqLworCitzdHJ1Y3QgZXZlbnQgeworCXN0cnVjdCB7IHZvaWQgKmRhdGE7IHNpemVfdCBzaXplOyB9IHZbMl07CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworfTsKKworc3RydWN0IGJ1c19yZXNldCB7CisJc3RydWN0IGV2ZW50IGV2ZW50OworCXN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCByZXNldDsKK307CisKK3N0cnVjdCByZXNwb25zZSB7CisJc3RydWN0IGV2ZW50IGV2ZW50OworCXN0cnVjdCBmd190cmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXNwb25zZSByZXNwb25zZTsKK307CisKK3N0cnVjdCBpc29faW50ZXJydXB0IHsKKwlzdHJ1Y3QgZXZlbnQgZXZlbnQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCBpbnRlcnJ1cHQ7Cit9OworCitzdHJ1Y3QgY2xpZW50IHsKKwl1MzIgdmVyc2lvbjsKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2U7CisJc3BpbmxvY2tfdCBsb2NrOworCXUzMiByZXNvdXJjZV9oYW5kbGU7CisJc3RydWN0IGxpc3RfaGVhZCByZXNvdXJjZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXU2NCBidXNfcmVzZXRfY2xvc3VyZTsKKworCXN0cnVjdCBmd19pc29fY29udGV4dCAqaXNvX2NvbnRleHQ7CisJdTY0IGlzb19jbG9zdXJlOworCXN0cnVjdCBmd19pc29fYnVmZmVyIGJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHZtX3N0YXJ0OworCisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqCit1NjRfdG9fdXB0cihfX3U2NCB2YWx1ZSkKK3sKKwlyZXR1cm4gKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgX191NjQKK3VwdHJfdG9fdTY0KHZvaWQgX191c2VyICpwdHIpCit7CisJcmV0dXJuIChfX3U2NCkodW5zaWduZWQgbG9uZylwdHI7Cit9CisKK3N0YXRpYyBpbnQgZndfZGV2aWNlX29wX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBjbGllbnQgKmNsaWVudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2aWNlID0gZndfZGV2aWNlX2Zyb21fZGV2dChpbm9kZS0+aV9yZGV2KTsKKwlpZiAoZGV2aWNlID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbGllbnQtPmRldmljZSA9IGZ3X2RldmljZV9nZXQoZGV2aWNlKTsKKwlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5ldmVudF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5yZXNvdXJjZV9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmY2xpZW50LT5sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjbGllbnQtPndhaXQpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2xpZW50OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+bGluaywgJmRldmljZS0+Y2xpZW50X2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHF1ZXVlX2V2ZW50KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgc3RydWN0IGV2ZW50ICpldmVudCwKKwkJCXZvaWQgKmRhdGEwLCBzaXplX3Qgc2l6ZTAsIHZvaWQgKmRhdGExLCBzaXplX3Qgc2l6ZTEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWV2ZW50LT52WzBdLmRhdGEgPSBkYXRhMDsKKwlldmVudC0+dlswXS5zaXplID0gc2l6ZTA7CisJZXZlbnQtPnZbMV0uZGF0YSA9IGRhdGExOworCWV2ZW50LT52WzFdLnNpemUgPSBzaXplMTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5saW5rLCAmY2xpZW50LT5ldmVudF9saXN0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNsaWVudC0+d2FpdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludAorZGVxdWV1ZV9ldmVudChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBldmVudCAqZXZlbnQ7CisJc2l6ZV90IHNpemUsIHRvdGFsOworCWludCBpLCByZXR2YWw7CisKKwlyZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2xpZW50LT53YWl0LAorCQkJCQkgICFsaXN0X2VtcHR5KCZjbGllbnQtPmV2ZW50X2xpc3QpIHx8CisJCQkJCSAgZndfZGV2aWNlX2lzX3NodXRkb3duKGNsaWVudC0+ZGV2aWNlKSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAobGlzdF9lbXB0eSgmY2xpZW50LT5ldmVudF9saXN0KSAmJgorCQkgICAgICAgZndfZGV2aWNlX2lzX3NodXRkb3duKGNsaWVudC0+ZGV2aWNlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7CisJZXZlbnQgPSBjb250YWluZXJfb2YoY2xpZW50LT5ldmVudF9saXN0Lm5leHQsIHN0cnVjdCBldmVudCwgbGluayk7CisJbGlzdF9kZWwoJmV2ZW50LT5saW5rKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKKworCXRvdGFsID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShldmVudC0+dikgJiYgdG90YWwgPCBjb3VudDsgaSsrKSB7CisJCXNpemUgPSBtaW4oZXZlbnQtPnZbaV0uc2l6ZSwgY291bnQgLSB0b3RhbCk7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyICsgdG90YWwsIGV2ZW50LT52W2ldLmRhdGEsIHNpemUpKSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJdG90YWwgKz0gc2l6ZTsKKwl9CisJcmV0dmFsID0gdG90YWw7CisKKyBvdXQ6CisJa2ZyZWUoZXZlbnQpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNzaXplX3QKK2Z3X2RldmljZV9vcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkgIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCit7CisJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGRlcXVldWVfZXZlbnQoY2xpZW50LCBidWZmZXIsIGNvdW50KTsKK30KKworc3RhdGljIHZvaWQKK2ZpbGxfYnVzX3Jlc2V0X2V2ZW50KHN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCAqZXZlbnQsCisJCSAgICAgc3RydWN0IGNsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQ7CisKKwlldmVudC0+Y2xvc3VyZQkgICAgID0gY2xpZW50LT5idXNfcmVzZXRfY2xvc3VyZTsKKwlldmVudC0+dHlwZSAgICAgICAgICA9IEZXX0NERVZfRVZFTlRfQlVTX1JFU0VUOworCWV2ZW50LT5ub2RlX2lkICAgICAgID0gY2xpZW50LT5kZXZpY2UtPm5vZGVfaWQ7CisJZXZlbnQtPmxvY2FsX25vZGVfaWQgPSBjYXJkLT5sb2NhbF9ub2RlLT5ub2RlX2lkOworCWV2ZW50LT5ibV9ub2RlX2lkICAgID0gMDsgLyogRklYTUU6IFdlIGRvbid0IHRyYWNrIHRoZSBCTS4gKi8KKwlldmVudC0+aXJtX25vZGVfaWQgICA9IGNhcmQtPmlybV9ub2RlLT5ub2RlX2lkOworCWV2ZW50LT5yb290X25vZGVfaWQgID0gY2FyZC0+cm9vdF9ub2RlLT5ub2RlX2lkOworCWV2ZW50LT5nZW5lcmF0aW9uICAgID0gY2FyZC0+Z2VuZXJhdGlvbjsKK30KKworc3RhdGljIHZvaWQKK2Zvcl9lYWNoX2NsaWVudChzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsCisJCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGNsaWVudCAqY2xpZW50KSkKK3sKKwlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGRldmljZS0+Y2FyZDsKKwlzdHJ1Y3QgY2xpZW50ICpjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmZGV2aWNlLT5jbGllbnRfbGlzdCwgbGluaykKKwkJY2FsbGJhY2soYyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitxdWV1ZV9idXNfcmVzZXRfZXZlbnQoc3RydWN0IGNsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBidXNfcmVzZXQgKmJ1c19yZXNldDsKKworCWJ1c19yZXNldCA9IGt6YWxsb2Moc2l6ZW9mKCpidXNfcmVzZXQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoYnVzX3Jlc2V0ID09IE5VTEwpIHsKKwkJZndfbm90aWZ5KCJPdXQgb2YgbWVtb3J5IHdoZW4gYWxsb2NhdGluZyBidXMgcmVzZXQgZXZlbnRcbiIpOworCQlyZXR1cm47CisJfQorCisJZmlsbF9idXNfcmVzZXRfZXZlbnQoJmJ1c19yZXNldC0+cmVzZXQsIGNsaWVudCk7CisKKwlxdWV1ZV9ldmVudChjbGllbnQsICZidXNfcmVzZXQtPmV2ZW50LAorCQkgICAgJmJ1c19yZXNldC0+cmVzZXQsIHNpemVvZihidXNfcmVzZXQtPnJlc2V0KSwgTlVMTCwgMCk7Cit9CisKK3ZvaWQgZndfZGV2aWNlX2NkZXZfdXBkYXRlKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSkKK3sKKwlmb3JfZWFjaF9jbGllbnQoZGV2aWNlLCBxdWV1ZV9idXNfcmVzZXRfZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCB3YWtlX3VwX2NsaWVudChzdHJ1Y3QgY2xpZW50ICpjbGllbnQpCit7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjbGllbnQtPndhaXQpOworfQorCit2b2lkIGZ3X2RldmljZV9jZGV2X3JlbW92ZShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpCit7CisJZm9yX2VhY2hfY2xpZW50KGRldmljZSwgd2FrZV91cF9jbGllbnQpOworfQorCitzdGF0aWMgaW50IGlvY3RsX2dldF9pbmZvKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X2dldF9pbmZvICpnZXRfaW5mbyA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQgYnVzX3Jlc2V0OworCisJY2xpZW50LT52ZXJzaW9uID0gZ2V0X2luZm8tPnZlcnNpb247CisJZ2V0X2luZm8tPnZlcnNpb24gPSBGV19DREVWX1ZFUlNJT047CisKKwlpZiAoZ2V0X2luZm8tPnJvbSAhPSAwKSB7CisJCXZvaWQgX191c2VyICp1cHRyID0gdTY0X3RvX3VwdHIoZ2V0X2luZm8tPnJvbSk7CisJCXNpemVfdCB3YW50ID0gZ2V0X2luZm8tPnJvbV9sZW5ndGg7CisJCXNpemVfdCBoYXZlID0gY2xpZW50LT5kZXZpY2UtPmNvbmZpZ19yb21fbGVuZ3RoICogNDsKKworCQlpZiAoY29weV90b191c2VyKHVwdHIsIGNsaWVudC0+ZGV2aWNlLT5jb25maWdfcm9tLAorCQkJCSBtaW4od2FudCwgaGF2ZSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWdldF9pbmZvLT5yb21fbGVuZ3RoID0gY2xpZW50LT5kZXZpY2UtPmNvbmZpZ19yb21fbGVuZ3RoICogNDsKKworCWNsaWVudC0+YnVzX3Jlc2V0X2Nsb3N1cmUgPSBnZXRfaW5mby0+YnVzX3Jlc2V0X2Nsb3N1cmU7CisJaWYgKGdldF9pbmZvLT5idXNfcmVzZXQgIT0gMCkgeworCQl2b2lkIF9fdXNlciAqdXB0ciA9IHU2NF90b191cHRyKGdldF9pbmZvLT5idXNfcmVzZXQpOworCisJCWZpbGxfYnVzX3Jlc2V0X2V2ZW50KCZidXNfcmVzZXQsIGNsaWVudCk7CisJCWlmIChjb3B5X3RvX3VzZXIodXB0ciwgJmJ1c19yZXNldCwgc2l6ZW9mKGJ1c19yZXNldCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJZ2V0X2luZm8tPmNhcmQgPSBjbGllbnQtPmRldmljZS0+Y2FyZC0+aW5kZXg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2FkZF9jbGllbnRfcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnJlc291cmNlLT5saW5rLCAmY2xpZW50LT5yZXNvdXJjZV9saXN0KTsKKwlyZXNvdXJjZS0+aGFuZGxlID0gY2xpZW50LT5yZXNvdXJjZV9oYW5kbGUrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludAorcmVsZWFzZV9jbGllbnRfcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1MzIgaGFuZGxlLAorCQkJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqKnJlc291cmNlKQoreworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHIsICZjbGllbnQtPnJlc291cmNlX2xpc3QsIGxpbmspIHsKKwkJaWYgKHItPmhhbmRsZSA9PSBoYW5kbGUpIHsKKwkJCWxpc3RfZGVsKCZyLT5saW5rKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOworCisJaWYgKCZyLT5saW5rID09ICZjbGllbnQtPnJlc291cmNlX2xpc3QpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJlc291cmNlKQorCQkqcmVzb3VyY2UgPSByOworCWVsc2UKKwkJci0+cmVsZWFzZShjbGllbnQsIHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlX3RyYW5zYWN0aW9uKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2UpCit7CisJc3RydWN0IHJlc3BvbnNlICpyZXNwb25zZSA9CisJCWNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IHJlc3BvbnNlLCByZXNvdXJjZSk7CisKKwlmd19jYW5jZWxfdHJhbnNhY3Rpb24oY2xpZW50LT5kZXZpY2UtPmNhcmQsICZyZXNwb25zZS0+dHJhbnNhY3Rpb24pOworfQorCitzdGF0aWMgdm9pZAorY29tcGxldGVfdHJhbnNhY3Rpb24oc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKKwkJICAgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZXNwb25zZSAqcmVzcG9uc2UgPSBkYXRhOworCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IHJlc3BvbnNlLT5jbGllbnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChsZW5ndGggPCByZXNwb25zZS0+cmVzcG9uc2UubGVuZ3RoKQorCQlyZXNwb25zZS0+cmVzcG9uc2UubGVuZ3RoID0gbGVuZ3RoOworCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSkKKwkJbWVtY3B5KHJlc3BvbnNlLT5yZXNwb25zZS5kYXRhLCBwYXlsb2FkLAorCQkgICAgICAgcmVzcG9uc2UtPnJlc3BvbnNlLmxlbmd0aCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJnJlc3BvbnNlLT5yZXNvdXJjZS5saW5rKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKKworCXJlc3BvbnNlLT5yZXNwb25zZS50eXBlICAgPSBGV19DREVWX0VWRU5UX1JFU1BPTlNFOworCXJlc3BvbnNlLT5yZXNwb25zZS5yY29kZSAgPSByY29kZTsKKwlxdWV1ZV9ldmVudChjbGllbnQsICZyZXNwb25zZS0+ZXZlbnQsCisJCSAgICAmcmVzcG9uc2UtPnJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UtPnJlc3BvbnNlKSwKKwkJICAgIHJlc3BvbnNlLT5yZXNwb25zZS5kYXRhLCByZXNwb25zZS0+cmVzcG9uc2UubGVuZ3RoKTsKK30KKworc3RhdGljIGludCBpb2N0bF9zZW5kX3JlcXVlc3Qoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gY2xpZW50LT5kZXZpY2U7CisJc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0ICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCByZXNwb25zZSAqcmVzcG9uc2U7CisKKwkvKiBXaGF0IGlzIHRoZSBiaWdnZXN0IHNpemUgd2UnbGwgYWNjZXB0LCByZWFsbHk/ICovCisJaWYgKHJlcXVlc3QtPmxlbmd0aCA+IDQwOTYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzcG9uc2UgPSBrbWFsbG9jKHNpemVvZigqcmVzcG9uc2UpICsgcmVxdWVzdC0+bGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzcG9uc2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXNwb25zZS0+Y2xpZW50ID0gY2xpZW50OworCXJlc3BvbnNlLT5yZXNwb25zZS5sZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7CisJcmVzcG9uc2UtPnJlc3BvbnNlLmNsb3N1cmUgPSByZXF1ZXN0LT5jbG9zdXJlOworCisJaWYgKHJlcXVlc3QtPmRhdGEgJiYKKwkgICAgY29weV9mcm9tX3VzZXIocmVzcG9uc2UtPnJlc3BvbnNlLmRhdGEsCisJCQkgICB1NjRfdG9fdXB0cihyZXF1ZXN0LT5kYXRhKSwgcmVxdWVzdC0+bGVuZ3RoKSkgeworCQlrZnJlZShyZXNwb25zZSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJlc3BvbnNlLT5yZXNvdXJjZS5yZWxlYXNlID0gcmVsZWFzZV90cmFuc2FjdGlvbjsKKwlhZGRfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgJnJlc3BvbnNlLT5yZXNvdXJjZSk7CisKKwlmd19zZW5kX3JlcXVlc3QoZGV2aWNlLT5jYXJkLCAmcmVzcG9uc2UtPnRyYW5zYWN0aW9uLAorCQkJcmVxdWVzdC0+dGNvZGUgJiAweDFmLAorCQkJZGV2aWNlLT5ub2RlLT5ub2RlX2lkLAorCQkJcmVxdWVzdC0+Z2VuZXJhdGlvbiwKKwkJCWRldmljZS0+bm9kZS0+bWF4X3NwZWVkLAorCQkJcmVxdWVzdC0+b2Zmc2V0LAorCQkJcmVzcG9uc2UtPnJlc3BvbnNlLmRhdGEsIHJlcXVlc3QtPmxlbmd0aCwKKwkJCWNvbXBsZXRlX3RyYW5zYWN0aW9uLCByZXNwb25zZSk7CisKKwlpZiAocmVxdWVzdC0+ZGF0YSkKKwkJcmV0dXJuIHNpemVvZihyZXF1ZXN0KSArIHJlcXVlc3QtPmxlbmd0aDsKKwllbHNlCisJCXJldHVybiBzaXplb2YocmVxdWVzdCk7Cit9CisKK3N0cnVjdCBhZGRyZXNzX2hhbmRsZXIgeworCXN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgaGFuZGxlcjsKKwlfX3U2NCBjbG9zdXJlOworCXN0cnVjdCBjbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlIHJlc291cmNlOworfTsKKworc3RydWN0IHJlcXVlc3QgeworCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OworCXZvaWQgKmRhdGE7CisJc2l6ZV90IGxlbmd0aDsKKwlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlIHJlc291cmNlOworfTsKKworc3RydWN0IHJlcXVlc3RfZXZlbnQgeworCXN0cnVjdCBldmVudCBldmVudDsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXF1ZXN0IHJlcXVlc3Q7Cit9OworCitzdGF0aWMgdm9pZAorcmVsZWFzZV9yZXF1ZXN0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2UpCit7CisJc3RydWN0IHJlcXVlc3QgKnJlcXVlc3QgPQorCQljb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCByZXF1ZXN0LCByZXNvdXJjZSk7CisKKwlmd19zZW5kX3Jlc3BvbnNlKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCByZXF1ZXN0LT5yZXF1ZXN0LAorCQkJIFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsKKwlrZnJlZShyZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqciwKKwkgICAgICAgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsCisJICAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCisJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJICAgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCit7CisJc3RydWN0IGFkZHJlc3NfaGFuZGxlciAqaGFuZGxlciA9IGNhbGxiYWNrX2RhdGE7CisJc3RydWN0IHJlcXVlc3QgKnJlcXVlc3Q7CisJc3RydWN0IHJlcXVlc3RfZXZlbnQgKmU7CisJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gaGFuZGxlci0+Y2xpZW50OworCisJcmVxdWVzdCA9IGttYWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSwgR0ZQX0FUT01JQyk7CisJZSA9IGttYWxsb2Moc2l6ZW9mKCplKSwgR0ZQX0FUT01JQyk7CisJaWYgKHJlcXVlc3QgPT0gTlVMTCB8fCBlID09IE5VTEwpIHsKKwkJa2ZyZWUocmVxdWVzdCk7CisJCWtmcmVlKGUpOworCQlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHIsIFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCXJlcXVlc3QtPnJlcXVlc3QgPSByOworCXJlcXVlc3QtPmRhdGEgICAgPSBwYXlsb2FkOworCXJlcXVlc3QtPmxlbmd0aCAgPSBsZW5ndGg7CisKKwlyZXF1ZXN0LT5yZXNvdXJjZS5yZWxlYXNlID0gcmVsZWFzZV9yZXF1ZXN0OworCWFkZF9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCAmcmVxdWVzdC0+cmVzb3VyY2UpOworCisJZS0+cmVxdWVzdC50eXBlICAgID0gRldfQ0RFVl9FVkVOVF9SRVFVRVNUOworCWUtPnJlcXVlc3QudGNvZGUgICA9IHRjb2RlOworCWUtPnJlcXVlc3Qub2Zmc2V0ICA9IG9mZnNldDsKKwllLT5yZXF1ZXN0Lmxlbmd0aCAgPSBsZW5ndGg7CisJZS0+cmVxdWVzdC5oYW5kbGUgID0gcmVxdWVzdC0+cmVzb3VyY2UuaGFuZGxlOworCWUtPnJlcXVlc3QuY2xvc3VyZSA9IGhhbmRsZXItPmNsb3N1cmU7CisKKwlxdWV1ZV9ldmVudChjbGllbnQsICZlLT5ldmVudCwKKwkJICAgICZlLT5yZXF1ZXN0LCBzaXplb2YoZS0+cmVxdWVzdCksIHBheWxvYWQsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwlzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyID0KKwkJY29udGFpbmVyX29mKHJlc291cmNlLCBzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyLCByZXNvdXJjZSk7CisKKwlmd19jb3JlX3JlbW92ZV9hZGRyZXNzX2hhbmRsZXIoJmhhbmRsZXItPmhhbmRsZXIpOworCWtmcmVlKGhhbmRsZXIpOworfQorCitzdGF0aWMgaW50IGlvY3RsX2FsbG9jYXRlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X2FsbG9jYXRlICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCBhZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXI7CisJc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIHJlZ2lvbjsKKworCWhhbmRsZXIgPSBrbWFsbG9jKHNpemVvZigqaGFuZGxlciksIEdGUF9LRVJORUwpOworCWlmIChoYW5kbGVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVnaW9uLnN0YXJ0ID0gcmVxdWVzdC0+b2Zmc2V0OworCXJlZ2lvbi5lbmQgPSByZXF1ZXN0LT5vZmZzZXQgKyByZXF1ZXN0LT5sZW5ndGg7CisJaGFuZGxlci0+aGFuZGxlci5sZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7CisJaGFuZGxlci0+aGFuZGxlci5hZGRyZXNzX2NhbGxiYWNrID0gaGFuZGxlX3JlcXVlc3Q7CisJaGFuZGxlci0+aGFuZGxlci5jYWxsYmFja19kYXRhID0gaGFuZGxlcjsKKwloYW5kbGVyLT5jbG9zdXJlID0gcmVxdWVzdC0+Y2xvc3VyZTsKKwloYW5kbGVyLT5jbGllbnQgPSBjbGllbnQ7CisKKwlpZiAoZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZoYW5kbGVyLT5oYW5kbGVyLCAmcmVnaW9uKSA8IDApIHsKKwkJa2ZyZWUoaGFuZGxlcik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaGFuZGxlci0+cmVzb3VyY2UucmVsZWFzZSA9IHJlbGVhc2VfYWRkcmVzc19oYW5kbGVyOworCWFkZF9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCAmaGFuZGxlci0+cmVzb3VyY2UpOworCXJlcXVlc3QtPmhhbmRsZSA9IGhhbmRsZXItPnJlc291cmNlLmhhbmRsZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlvY3RsX2RlYWxsb2NhdGUoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGZ3X2NkZXZfZGVhbGxvY2F0ZSAqcmVxdWVzdCA9IGJ1ZmZlcjsKKworCXJldHVybiByZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QtPmhhbmRsZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgaW9jdGxfc2VuZF9yZXNwb25zZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZndfY2Rldl9zZW5kX3Jlc3BvbnNlICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlOworCXN0cnVjdCByZXF1ZXN0ICpyOworCisJaWYgKHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdC0+aGFuZGxlLCAmcmVzb3VyY2UpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IHJlcXVlc3QsIHJlc291cmNlKTsKKwlpZiAocmVxdWVzdC0+bGVuZ3RoIDwgci0+bGVuZ3RoKQorCQlyLT5sZW5ndGggPSByZXF1ZXN0LT5sZW5ndGg7CisJaWYgKGNvcHlfZnJvbV91c2VyKHItPmRhdGEsIHU2NF90b191cHRyKHJlcXVlc3QtPmRhdGEpLCByLT5sZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZ3X3NlbmRfcmVzcG9uc2UoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHItPnJlcXVlc3QsIHJlcXVlc3QtPnJjb2RlKTsKKwlrZnJlZShyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlvY3RsX2luaXRpYXRlX2J1c19yZXNldChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZndfY2Rldl9pbml0aWF0ZV9idXNfcmVzZXQgKnJlcXVlc3QgPSBidWZmZXI7CisJaW50IHNob3J0X3Jlc2V0OworCisJc2hvcnRfcmVzZXQgPSAocmVxdWVzdC0+dHlwZSA9PSBGV19DREVWX1NIT1JUX1JFU0VUKTsKKworCXJldHVybiBmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldChjbGllbnQtPmRldmljZS0+Y2FyZCwgc2hvcnRfcmVzZXQpOworfQorCitzdHJ1Y3QgZGVzY3JpcHRvciB7CisJc3RydWN0IGZ3X2Rlc2NyaXB0b3IgZDsKKwlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlIHJlc291cmNlOworCXUzMiBkYXRhWzBdOworfTsKKworc3RhdGljIHZvaWQgcmVsZWFzZV9kZXNjcmlwdG9yKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJCSAgICAgICBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKK3sKKwlzdHJ1Y3QgZGVzY3JpcHRvciAqZGVzY3JpcHRvciA9CisJCWNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IGRlc2NyaXB0b3IsIHJlc291cmNlKTsKKworCWZ3X2NvcmVfcmVtb3ZlX2Rlc2NyaXB0b3IoJmRlc2NyaXB0b3ItPmQpOworCWtmcmVlKGRlc2NyaXB0b3IpOworfQorCitzdGF0aWMgaW50IGlvY3RsX2FkZF9kZXNjcmlwdG9yKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X2FkZF9kZXNjcmlwdG9yICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCBkZXNjcmlwdG9yICpkZXNjcmlwdG9yOworCWludCByZXR2YWw7CisKKwlpZiAocmVxdWVzdC0+bGVuZ3RoID4gMjU2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRlc2NyaXB0b3IgPQorCQlrbWFsbG9jKHNpemVvZigqZGVzY3JpcHRvcikgKyByZXF1ZXN0LT5sZW5ndGggKiA0LCBHRlBfS0VSTkVMKTsKKwlpZiAoZGVzY3JpcHRvciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihkZXNjcmlwdG9yLT5kYXRhLAorCQkJICAgdTY0X3RvX3VwdHIocmVxdWVzdC0+ZGF0YSksIHJlcXVlc3QtPmxlbmd0aCAqIDQpKSB7CisJCWtmcmVlKGRlc2NyaXB0b3IpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlkZXNjcmlwdG9yLT5kLmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKKwlkZXNjcmlwdG9yLT5kLmltbWVkaWF0ZSA9IHJlcXVlc3QtPmltbWVkaWF0ZTsKKwlkZXNjcmlwdG9yLT5kLmtleSA9IHJlcXVlc3QtPmtleTsKKwlkZXNjcmlwdG9yLT5kLmRhdGEgPSBkZXNjcmlwdG9yLT5kYXRhOworCisJcmV0dmFsID0gZndfY29yZV9hZGRfZGVzY3JpcHRvcigmZGVzY3JpcHRvci0+ZCk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJa2ZyZWUoZGVzY3JpcHRvcik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJZGVzY3JpcHRvci0+cmVzb3VyY2UucmVsZWFzZSA9IHJlbGVhc2VfZGVzY3JpcHRvcjsKKwlhZGRfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgJmRlc2NyaXB0b3ItPnJlc291cmNlKTsKKwlyZXF1ZXN0LT5oYW5kbGUgPSBkZXNjcmlwdG9yLT5yZXNvdXJjZS5oYW5kbGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpb2N0bF9yZW1vdmVfZGVzY3JpcHRvcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZndfY2Rldl9yZW1vdmVfZGVzY3JpcHRvciAqcmVxdWVzdCA9IGJ1ZmZlcjsKKworCXJldHVybiByZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QtPmhhbmRsZSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkCitpc29fY2FsbGJhY2soc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjb250ZXh0LCB1MzIgY3ljbGUsCisJICAgICBzaXplX3QgaGVhZGVyX2xlbmd0aCwgdm9pZCAqaGVhZGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGRhdGE7CisJc3RydWN0IGlzb19pbnRlcnJ1cHQgKmludGVycnVwdDsKKworCWludGVycnVwdCA9IGt6YWxsb2Moc2l6ZW9mKCppbnRlcnJ1cHQpICsgaGVhZGVyX2xlbmd0aCwgR0ZQX0FUT01JQyk7CisJaWYgKGludGVycnVwdCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpbnRlcnJ1cHQtPmludGVycnVwdC50eXBlICAgICAgPSBGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQ7CisJaW50ZXJydXB0LT5pbnRlcnJ1cHQuY2xvc3VyZSAgID0gY2xpZW50LT5pc29fY2xvc3VyZTsKKwlpbnRlcnJ1cHQtPmludGVycnVwdC5jeWNsZSAgICAgPSBjeWNsZTsKKwlpbnRlcnJ1cHQtPmludGVycnVwdC5oZWFkZXJfbGVuZ3RoID0gaGVhZGVyX2xlbmd0aDsKKwltZW1jcHkoaW50ZXJydXB0LT5pbnRlcnJ1cHQuaGVhZGVyLCBoZWFkZXIsIGhlYWRlcl9sZW5ndGgpOworCXF1ZXVlX2V2ZW50KGNsaWVudCwgJmludGVycnVwdC0+ZXZlbnQsCisJCSAgICAmaW50ZXJydXB0LT5pbnRlcnJ1cHQsCisJCSAgICBzaXplb2YoaW50ZXJydXB0LT5pbnRlcnJ1cHQpICsgaGVhZGVyX2xlbmd0aCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaW9jdGxfY3JlYXRlX2lzb19jb250ZXh0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dCAqcmVxdWVzdCA9IGJ1ZmZlcjsKKworCWlmIChyZXF1ZXN0LT5jaGFubmVsID4gNjMpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChyZXF1ZXN0LT50eXBlKSB7CisJY2FzZSBGV19JU09fQ09OVEVYVF9SRUNFSVZFOgorCQlpZiAocmVxdWVzdC0+aGVhZGVyX3NpemUgPCA0IHx8IChyZXF1ZXN0LT5oZWFkZXJfc2l6ZSAmIDMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYnJlYWs7CisKKwljYXNlIEZXX0lTT19DT05URVhUX1RSQU5TTUlUOgorCQlpZiAocmVxdWVzdC0+c3BlZWQgPiBTQ09ERV8zMjAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljbGllbnQtPmlzb19jbG9zdXJlID0gcmVxdWVzdC0+Y2xvc3VyZTsKKwljbGllbnQtPmlzb19jb250ZXh0ID0gZndfaXNvX2NvbnRleHRfY3JlYXRlKGNsaWVudC0+ZGV2aWNlLT5jYXJkLAorCQkJCQkJICAgIHJlcXVlc3QtPnR5cGUsCisJCQkJCQkgICAgcmVxdWVzdC0+Y2hhbm5lbCwKKwkJCQkJCSAgICByZXF1ZXN0LT5zcGVlZCwKKwkJCQkJCSAgICByZXF1ZXN0LT5oZWFkZXJfc2l6ZSwKKwkJCQkJCSAgICBpc29fY2FsbGJhY2ssIGNsaWVudCk7CisJaWYgKElTX0VSUihjbGllbnQtPmlzb19jb250ZXh0KSkKKwkJcmV0dXJuIFBUUl9FUlIoY2xpZW50LT5pc29fY29udGV4dCk7CisKKwkvKiBXZSBvbmx5IHN1cHBvcnQgb25lIGNvbnRleHQgYXQgdGhpcyB0aW1lLiAqLworCXJlcXVlc3QtPmhhbmRsZSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyogTWFjcm9zIGZvciBkZWNvZGluZyB0aGUgaXNvIHBhY2tldCBjb250cm9sIGhlYWRlci4gKi8KKyNkZWZpbmUgR0VUX1BBWUxPQURfTEVOR1RIKHYpCSgodikgJiAweGZmZmYpCisjZGVmaW5lIEdFVF9JTlRFUlJVUFQodikJKCgodikgPj4gMTYpICYgMHgwMSkKKyNkZWZpbmUgR0VUX1NLSVAodikJCSgoKHYpID4+IDE3KSAmIDB4MDEpCisjZGVmaW5lIEdFVF9UQUcodikJCSgoKHYpID4+IDE4KSAmIDB4MDIpCisjZGVmaW5lIEdFVF9TWSh2KQkJKCgodikgPj4gMjApICYgMHgwNCkKKyNkZWZpbmUgR0VUX0hFQURFUl9MRU5HVEgodikJKCgodikgPj4gMjQpICYgMHhmZikKKworc3RhdGljIGludCBpb2N0bF9xdWV1ZV9pc28oc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGZ3X2NkZXZfcXVldWVfaXNvICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCBmd19jZGV2X2lzb19wYWNrZXQgX191c2VyICpwLCAqZW5kLCAqbmV4dDsKKwlzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCA9IGNsaWVudC0+aXNvX2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBwYXlsb2FkLCBidWZmZXJfZW5kLCBoZWFkZXJfbGVuZ3RoOworCXUzMiBjb250cm9sOworCWludCBjb3VudDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZndfaXNvX3BhY2tldCBwYWNrZXQ7CisJCXU4IGhlYWRlclsyNTZdOworCX0gdTsKKworCWlmIChjdHggPT0gTlVMTCB8fCByZXF1ZXN0LT5oYW5kbGUgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIHBhc3NlcyBhIG5vbi1OVUxMIGRhdGEgcG9pbnRlciwgaGFzIG1tYXAoKSdlZAorCSAqIHRoZSBpc28gYnVmZmVyLCBhbmQgdGhlIHBvaW50ZXIgcG9pbnRzIGluc2lkZSB0aGUgYnVmZmVyLAorCSAqIHdlIHNldHVwIHRoZSBwYXlsb2FkIHBvaW50ZXJzIGFjY29yZGluZ2x5LiAgT3RoZXJ3aXNlIHdlCisJICogc2V0IHRoZW0gYm90aCB0byAwLCB3aGljaCB3aWxsIHN0aWxsIGxldCBwYWNrZXRzIHdpdGgKKwkgKiBwYXlsb2FkX2xlbmd0aCA9PSAwIHRocm91Z2guICBJbiBvdGhlciB3b3JkcywgaWYgbm8gcGFja2V0cworCSAqIHVzZSB0aGUgaW5kaXJlY3QgcGF5bG9hZCwgdGhlIGlzbyBidWZmZXIgbmVlZCBub3QgYmUgbWFwcGVkCisJICogYW5kIHRoZSByZXF1ZXN0LT5kYXRhIHBvaW50ZXIgaXMgaWdub3JlZC4KKwkgKi8KKworCXBheWxvYWQgPSAodW5zaWduZWQgbG9uZylyZXF1ZXN0LT5kYXRhIC0gY2xpZW50LT52bV9zdGFydDsKKwlidWZmZXJfZW5kID0gY2xpZW50LT5idWZmZXIucGFnZV9jb3VudCA8PCBQQUdFX1NISUZUOworCWlmIChyZXF1ZXN0LT5kYXRhID09IDAgfHwgY2xpZW50LT5idWZmZXIucGFnZXMgPT0gTlVMTCB8fAorCSAgICBwYXlsb2FkID49IGJ1ZmZlcl9lbmQpIHsKKwkJcGF5bG9hZCA9IDA7CisJCWJ1ZmZlcl9lbmQgPSAwOworCX0KKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCByZXF1ZXN0LT5wYWNrZXRzLCByZXF1ZXN0LT5zaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlwID0gKHN0cnVjdCBmd19jZGV2X2lzb19wYWNrZXQgX191c2VyICopdTY0X3RvX3VwdHIocmVxdWVzdC0+cGFja2V0cyk7CisJZW5kID0gKHZvaWQgX191c2VyICopcCArIHJlcXVlc3QtPnNpemU7CisJY291bnQgPSAwOworCXdoaWxlIChwIDwgZW5kKSB7CisJCWlmIChnZXRfdXNlcihjb250cm9sLCAmcC0+Y29udHJvbCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJdS5wYWNrZXQucGF5bG9hZF9sZW5ndGggPSBHRVRfUEFZTE9BRF9MRU5HVEgoY29udHJvbCk7CisJCXUucGFja2V0LmludGVycnVwdCA9IEdFVF9JTlRFUlJVUFQoY29udHJvbCk7CisJCXUucGFja2V0LnNraXAgPSBHRVRfU0tJUChjb250cm9sKTsKKwkJdS5wYWNrZXQudGFnID0gR0VUX1RBRyhjb250cm9sKTsKKwkJdS5wYWNrZXQuc3kgPSBHRVRfU1koY29udHJvbCk7CisJCXUucGFja2V0LmhlYWRlcl9sZW5ndGggPSBHRVRfSEVBREVSX0xFTkdUSChjb250cm9sKTsKKworCQlpZiAoY3R4LT50eXBlID09IEZXX0lTT19DT05URVhUX1RSQU5TTUlUKSB7CisJCQloZWFkZXJfbGVuZ3RoID0gdS5wYWNrZXQuaGVhZGVyX2xlbmd0aDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBXZSByZXF1aXJlIHRoYXQgaGVhZGVyX2xlbmd0aCBpcyBhIG11bHRpcGxlIG9mCisJCQkgKiB0aGUgZml4ZWQgaGVhZGVyIHNpemUsIGN0eC0+aGVhZGVyX3NpemUuCisJCQkgKi8KKwkJCWlmIChjdHgtPmhlYWRlcl9zaXplID09IDApIHsKKwkJCQlpZiAodS5wYWNrZXQuaGVhZGVyX2xlbmd0aCA+IDApCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJfSBlbHNlIGlmICh1LnBhY2tldC5oZWFkZXJfbGVuZ3RoICUgY3R4LT5oZWFkZXJfc2l6ZSAhPSAwKSB7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQloZWFkZXJfbGVuZ3RoID0gMDsKKwkJfQorCisJCW5leHQgPSAoc3RydWN0IGZ3X2NkZXZfaXNvX3BhY2tldCBfX3VzZXIgKikKKwkJCSZwLT5oZWFkZXJbaGVhZGVyX2xlbmd0aCAvIDRdOworCQlpZiAobmV4dCA+IGVuZCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoX19jb3B5X2Zyb21fdXNlcgorCQkgICAgKHUucGFja2V0LmhlYWRlciwgcC0+aGVhZGVyLCBoZWFkZXJfbGVuZ3RoKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodS5wYWNrZXQuc2tpcCAmJiBjdHgtPnR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQgJiYKKwkJICAgIHUucGFja2V0LmhlYWRlcl9sZW5ndGggKyB1LnBhY2tldC5wYXlsb2FkX2xlbmd0aCA+IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHBheWxvYWQgKyB1LnBhY2tldC5wYXlsb2FkX2xlbmd0aCA+IGJ1ZmZlcl9lbmQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoZndfaXNvX2NvbnRleHRfcXVldWUoY3R4LCAmdS5wYWNrZXQsCisJCQkJCSAmY2xpZW50LT5idWZmZXIsIHBheWxvYWQpKQorCQkJYnJlYWs7CisKKwkJcCA9IG5leHQ7CisJCXBheWxvYWQgKz0gdS5wYWNrZXQucGF5bG9hZF9sZW5ndGg7CisJCWNvdW50Kys7CisJfQorCisJcmVxdWVzdC0+c2l6ZSAgICAtPSB1cHRyX3RvX3U2NChwKSAtIHJlcXVlc3QtPnBhY2tldHM7CisJcmVxdWVzdC0+cGFja2V0cyAgPSB1cHRyX3RvX3U2NChwKTsKKwlyZXF1ZXN0LT5kYXRhICAgICA9IGNsaWVudC0+dm1fc3RhcnQgKyBwYXlsb2FkOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGlvY3RsX3N0YXJ0X2lzbyhzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZndfY2Rldl9zdGFydF9pc28gKnJlcXVlc3QgPSBidWZmZXI7CisKKwlpZiAocmVxdWVzdC0+aGFuZGxlICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjbGllbnQtPmlzb19jb250ZXh0LT50eXBlID09IEZXX0lTT19DT05URVhUX1JFQ0VJVkUpIHsKKwkJaWYgKHJlcXVlc3QtPnRhZ3MgPT0gMCB8fCByZXF1ZXN0LT50YWdzID4gMTUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAocmVxdWVzdC0+c3luYyA+IDE1KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGZ3X2lzb19jb250ZXh0X3N0YXJ0KGNsaWVudC0+aXNvX2NvbnRleHQsIHJlcXVlc3QtPmN5Y2xlLAorCQkJCSAgICByZXF1ZXN0LT5zeW5jLCByZXF1ZXN0LT50YWdzKTsKK30KKworc3RhdGljIGludCBpb2N0bF9zdG9wX2lzbyhzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZndfY2Rldl9zdG9wX2lzbyAqcmVxdWVzdCA9IGJ1ZmZlcjsKKworCWlmIChyZXF1ZXN0LT5oYW5kbGUgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gZndfaXNvX2NvbnRleHRfc3RvcChjbGllbnQtPmlzb19jb250ZXh0KTsKK30KKworc3RhdGljIGludCAoKiBjb25zdCBpb2N0bF9oYW5kbGVyc1tdKShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikgPSB7CisJaW9jdGxfZ2V0X2luZm8sCisJaW9jdGxfc2VuZF9yZXF1ZXN0LAorCWlvY3RsX2FsbG9jYXRlLAorCWlvY3RsX2RlYWxsb2NhdGUsCisJaW9jdGxfc2VuZF9yZXNwb25zZSwKKwlpb2N0bF9pbml0aWF0ZV9idXNfcmVzZXQsCisJaW9jdGxfYWRkX2Rlc2NyaXB0b3IsCisJaW9jdGxfcmVtb3ZlX2Rlc2NyaXB0b3IsCisJaW9jdGxfY3JlYXRlX2lzb19jb250ZXh0LAorCWlvY3RsX3F1ZXVlX2lzbywKKwlpb2N0bF9zdGFydF9pc28sCisJaW9jdGxfc3RvcF9pc28sCit9OworCitzdGF0aWMgaW50CitkaXNwYXRjaF9pb2N0bChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCit7CisJY2hhciBidWZmZXJbMjU2XTsKKwlpbnQgcmV0dmFsOworCisJaWYgKF9JT0NfVFlQRShjbWQpICE9ICcjJyB8fAorCSAgICBfSU9DX05SKGNtZCkgPj0gQVJSQVlfU0laRShpb2N0bF9oYW5kbGVycykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKF9JT0NfRElSKGNtZCkgJiBfSU9DX1dSSVRFKSB7CisJCWlmIChfSU9DX1NJWkUoY21kKSA+IHNpemVvZihidWZmZXIpIHx8CisJCSAgICBjb3B5X2Zyb21fdXNlcihidWZmZXIsIGFyZywgX0lPQ19TSVpFKGNtZCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dmFsID0gaW9jdGxfaGFuZGxlcnNbX0lPQ19OUihjbWQpXShjbGllbnQsIGJ1ZmZlcik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoX0lPQ19ESVIoY21kKSAmIF9JT0NfUkVBRCkgeworCQlpZiAoX0lPQ19TSVpFKGNtZCkgPiBzaXplb2YoYnVmZmVyKSB8fAorCQkgICAgY29weV90b191c2VyKGFyZywgYnVmZmVyLCBfSU9DX1NJWkUoY21kKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcKK2Z3X2RldmljZV9vcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGRpc3BhdGNoX2lvY3RsKGNsaWVudCwgY21kLCAodm9pZCBfX3VzZXIgKikgYXJnKTsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBsb25nCitmd19kZXZpY2Vfb3BfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gZGlzcGF0Y2hfaW9jdGwoY2xpZW50LCBjbWQsIGNvbXBhdF9wdHIoYXJnKSk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBmd19kZXZpY2Vfb3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IHBhZ2VfY291bnQsIHJldHZhbDsKKworCS8qIEZJWE1FOiBXZSBjb3VsZCBzdXBwb3J0IG11bHRpcGxlIGJ1ZmZlcnMsIGJ1dCB3ZSBkb24ndC4gKi8KKwlpZiAoY2xpZW50LT5idWZmZXIucGFnZXMgIT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2bWEtPnZtX3N0YXJ0ICYgflBBR0VfTUFTSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbGllbnQtPnZtX3N0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwlzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCXBhZ2VfY291bnQgPSBzaXplID4+IFBBR0VfU0hJRlQ7CisJaWYgKHNpemUgJiB+UEFHRV9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCisJCWRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CisJZWxzZQorCQlkaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CisKKwlyZXR2YWwgPSBmd19pc29fYnVmZmVyX2luaXQoJmNsaWVudC0+YnVmZmVyLCBjbGllbnQtPmRldmljZS0+Y2FyZCwKKwkJCQkgICAgcGFnZV9jb3VudCwgZGlyZWN0aW9uKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IGZ3X2lzb19idWZmZXJfbWFwKCZjbGllbnQtPmJ1ZmZlciwgdm1hKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZndfaXNvX2J1ZmZlcl9kZXN0cm95KCZjbGllbnQtPmJ1ZmZlciwgY2xpZW50LT5kZXZpY2UtPmNhcmQpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBmd19kZXZpY2Vfb3BfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGV2ZW50ICplLCAqbmV4dF9lOworCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnIsICpuZXh0X3I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChjbGllbnQtPmJ1ZmZlci5wYWdlcykKKwkJZndfaXNvX2J1ZmZlcl9kZXN0cm95KCZjbGllbnQtPmJ1ZmZlciwgY2xpZW50LT5kZXZpY2UtPmNhcmQpOworCisJaWYgKGNsaWVudC0+aXNvX2NvbnRleHQpCisJCWZ3X2lzb19jb250ZXh0X2Rlc3Ryb3koY2xpZW50LT5pc29fY29udGV4dCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUociwgbmV4dF9yLCAmY2xpZW50LT5yZXNvdXJjZV9saXN0LCBsaW5rKQorCQlyLT5yZWxlYXNlKGNsaWVudCwgcik7CisKKwkvKgorCSAqIEZJWE1FOiBXZSBzaG91bGQgd2FpdCBmb3IgdGhlIGFzeW5jIHRhc2tsZXRzIHRvIHN0b3AKKwkgKiBydW5uaW5nIGJlZm9yZSBmcmVlaW5nIHRoZSBtZW1vcnkuCisJICovCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbmV4dF9lLCAmY2xpZW50LT5ldmVudF9saXN0LCBsaW5rKQorCQlrZnJlZShlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmRldmljZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZjbGllbnQtPmxpbmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+ZGV2aWNlLT5jYXJkLT5sb2NrLCBmbGFncyk7CisKKwlmd19kZXZpY2VfcHV0KGNsaWVudC0+ZGV2aWNlKTsKKwlrZnJlZShjbGllbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZndfZGV2aWNlX29wX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiBwdCkKK3sKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJcG9sbF93YWl0KGZpbGUsICZjbGllbnQtPndhaXQsIHB0KTsKKworCWlmIChmd19kZXZpY2VfaXNfc2h1dGRvd24oY2xpZW50LT5kZXZpY2UpKQorCQltYXNrIHw9IFBPTExIVVAgfCBQT0xMRVJSOworCWlmICghbGlzdF9lbXB0eSgmY2xpZW50LT5ldmVudF9saXN0KSkKKwkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJcmV0dXJuIG1hc2s7Cit9CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZndfZGV2aWNlX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZndfZGV2aWNlX29wX29wZW4sCisJLnJlYWQJCT0gZndfZGV2aWNlX29wX3JlYWQsCisJLnVubG9ja2VkX2lvY3RsCT0gZndfZGV2aWNlX29wX2lvY3RsLAorCS5wb2xsCQk9IGZ3X2RldmljZV9vcF9wb2xsLAorCS5yZWxlYXNlCT0gZndfZGV2aWNlX29wX3JlbGVhc2UsCisJLm1tYXAJCT0gZndfZGV2aWNlX29wX21tYXAsCisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bAk9IGZ3X2RldmljZV9vcF9jb21wYXRfaW9jdGwsCisjZW5kaWYKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWNlNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYwpAQCAtMCwwICsxLDgxMyBAQAorLyoKKyAqIERldmljZSBwcm9iaW5nIGFuZCBzeXNmcyBjb2RlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2ICBLcmlzdGlhbiBIb2Vnc2JlcmcgPGtyaEBiaXRwbGFuZXQubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJmdy10b3BvbG9neS5oIgorI2luY2x1ZGUgImZ3LWRldmljZS5oIgorCit2b2lkIGZ3X2Nzcl9pdGVyYXRvcl9pbml0KHN0cnVjdCBmd19jc3JfaXRlcmF0b3IgKmNpLCB1MzIgKiBwKQoreworCWNpLT5wID0gcCArIDE7CisJY2ktPmVuZCA9IGNpLT5wICsgKHBbMF0gPj4gMTYpOworfQorRVhQT1JUX1NZTUJPTChmd19jc3JfaXRlcmF0b3JfaW5pdCk7CisKK2ludCBmd19jc3JfaXRlcmF0b3JfbmV4dChzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yICpjaSwgaW50ICprZXksIGludCAqdmFsdWUpCit7CisJKmtleSA9ICpjaS0+cCA+PiAyNDsKKwkqdmFsdWUgPSAqY2ktPnAgJiAweGZmZmZmZjsKKworCXJldHVybiBjaS0+cCsrIDwgY2ktPmVuZDsKK30KK0VYUE9SVF9TWU1CT0woZndfY3NyX2l0ZXJhdG9yX25leHQpOworCitzdGF0aWMgaW50IGlzX2Z3X3VuaXQoc3RydWN0IGRldmljZSAqZGV2KTsKKworc3RhdGljIGludCBtYXRjaF91bml0X2RpcmVjdG9yeSh1MzIgKiBkaXJlY3RvcnksIGNvbnN0IHN0cnVjdCBmd19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CisJaW50IGtleSwgdmFsdWUsIG1hdGNoOworCisJbWF0Y2ggPSAwOworCWZ3X2Nzcl9pdGVyYXRvcl9pbml0KCZjaSwgZGlyZWN0b3J5KTsKKwl3aGlsZSAoZndfY3NyX2l0ZXJhdG9yX25leHQoJmNpLCAma2V5LCAmdmFsdWUpKSB7CisJCWlmIChrZXkgPT0gQ1NSX1ZFTkRPUiAmJiB2YWx1ZSA9PSBpZC0+dmVuZG9yKQorCQkJbWF0Y2ggfD0gRldfTUFUQ0hfVkVORE9SOworCQlpZiAoa2V5ID09IENTUl9NT0RFTCAmJiB2YWx1ZSA9PSBpZC0+bW9kZWwpCisJCQltYXRjaCB8PSBGV19NQVRDSF9NT0RFTDsKKwkJaWYgKGtleSA9PSBDU1JfU1BFQ0lGSUVSX0lEICYmIHZhbHVlID09IGlkLT5zcGVjaWZpZXJfaWQpCisJCQltYXRjaCB8PSBGV19NQVRDSF9TUEVDSUZJRVJfSUQ7CisJCWlmIChrZXkgPT0gQ1NSX1ZFUlNJT04gJiYgdmFsdWUgPT0gaWQtPnZlcnNpb24pCisJCQltYXRjaCB8PSBGV19NQVRDSF9WRVJTSU9OOworCX0KKworCXJldHVybiAobWF0Y2ggJiBpZC0+bWF0Y2hfZmxhZ3MpID09IGlkLT5tYXRjaF9mbGFnczsKK30KKworc3RhdGljIGludCBmd191bml0X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IGZ3X3VuaXQoZGV2KTsKKwlzdHJ1Y3QgZndfZHJpdmVyICpkcml2ZXIgPSBmd19kcml2ZXIoZHJ2KTsKKwlpbnQgaTsKKworCS8qIFdlIG9ubHkgYWxsb3cgYmluZGluZyB0byBmd191bml0cy4gKi8KKwlpZiAoIWlzX2Z3X3VuaXQoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBkcml2ZXItPmlkX3RhYmxlW2ldLm1hdGNoX2ZsYWdzICE9IDA7IGkrKykgeworCQlpZiAobWF0Y2hfdW5pdF9kaXJlY3RvcnkodW5pdC0+ZGlyZWN0b3J5LCAmZHJpdmVyLT5pZF90YWJsZVtpXSkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfbW9kYWxpYXMoc3RydWN0IGZ3X3VuaXQgKnVuaXQsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKQoreworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZSh1bml0LT5kZXZpY2UucGFyZW50KTsKKwlzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yIGNpOworCisJaW50IGtleSwgdmFsdWU7CisJaW50IHZlbmRvciA9IDA7CisJaW50IG1vZGVsID0gMDsKKwlpbnQgc3BlY2lmaWVyX2lkID0gMDsKKwlpbnQgdmVyc2lvbiA9IDA7CisKKwlmd19jc3JfaXRlcmF0b3JfaW5pdCgmY2ksICZkZXZpY2UtPmNvbmZpZ19yb21bNV0pOworCXdoaWxlIChmd19jc3JfaXRlcmF0b3JfbmV4dCgmY2ksICZrZXksICZ2YWx1ZSkpIHsKKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSBDU1JfVkVORE9SOgorCQkJdmVuZG9yID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBDU1JfTU9ERUw6CisJCQltb2RlbCA9IHZhbHVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlmd19jc3JfaXRlcmF0b3JfaW5pdCgmY2ksIHVuaXQtPmRpcmVjdG9yeSk7CisJd2hpbGUgKGZ3X2Nzcl9pdGVyYXRvcl9uZXh0KCZjaSwgJmtleSwgJnZhbHVlKSkgeworCQlzd2l0Y2ggKGtleSkgeworCQljYXNlIENTUl9TUEVDSUZJRVJfSUQ6CisJCQlzcGVjaWZpZXJfaWQgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIENTUl9WRVJTSU9OOgorCQkJdmVyc2lvbiA9IHZhbHVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gc25wcmludGYoYnVmZmVyLCBidWZmZXJfc2l6ZSwKKwkJCSJpZWVlMTM5NDp2ZW4lMDhYbW8lMDhYc3AlMDhYdmVyJTA4WCIsCisJCQl2ZW5kb3IsIG1vZGVsLCBzcGVjaWZpZXJfaWQsIHZlcnNpb24pOworfQorCitzdGF0aWMgaW50Citmd191bml0X3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLCBpbnQgbnVtX2VudnAsCisJICAgICAgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKQoreworCXN0cnVjdCBmd191bml0ICp1bml0ID0gZndfdW5pdChkZXYpOworCWNoYXIgbW9kYWxpYXNbNjRdOworCWludCBsZW5ndGggPSAwOworCWludCBpID0gMDsKKworCWdldF9tb2RhbGlhcyh1bml0LCBtb2RhbGlhcywgc2l6ZW9mKG1vZGFsaWFzKSk7CisKKwlpZiAoYWRkX3VldmVudF92YXIoZW52cCwgbnVtX2VudnAsICZpLAorCQkJICAgYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwKKwkJCSAgICJNT0RBTElBUz0lcyIsIG1vZGFsaWFzKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllbnZwW2ldID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYnVzX3R5cGUgZndfYnVzX3R5cGUgPSB7CisJLm5hbWUgPSAiZmlyZXdpcmUiLAorCS5tYXRjaCA9IGZ3X3VuaXRfbWF0Y2gsCit9OworRVhQT1JUX1NZTUJPTChmd19idXNfdHlwZSk7CisKK3N0cnVjdCBmd19kZXZpY2UgKmZ3X2RldmljZV9nZXQoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKQoreworCWdldF9kZXZpY2UoJmRldmljZS0+ZGV2aWNlKTsKKworCXJldHVybiBkZXZpY2U7Cit9CisKK3ZvaWQgZndfZGV2aWNlX3B1dChzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpCit7CisJcHV0X2RldmljZSgmZGV2aWNlLT5kZXZpY2UpOworfQorCitzdGF0aWMgdm9pZCBmd19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogVGFrZSB0aGUgY2FyZCBsb2NrIHNvIHdlIGRvbid0IHNldCB0aGlzIHRvIE5VTEwgd2hpbGUgYQorCSAqIEZXX05PREVfVVBEQVRFRCBjYWxsYmFjayBpcyBiZWluZyBoYW5kbGVkLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2UtPmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlkZXZpY2UtPm5vZGUtPmRhdGEgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOworCisJZndfbm9kZV9wdXQoZGV2aWNlLT5ub2RlKTsKKwlmd19jYXJkX3B1dChkZXZpY2UtPmNhcmQpOworCWtmcmVlKGRldmljZS0+Y29uZmlnX3JvbSk7CisJa2ZyZWUoZGV2aWNlKTsKK30KKworaW50IGZ3X2RldmljZV9lbmFibGVfcGh5c19kbWEoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKQoreworCXJldHVybiBkZXZpY2UtPmNhcmQtPmRyaXZlci0+ZW5hYmxlX3BoeXNfZG1hKGRldmljZS0+Y2FyZCwKKwkJCQkJCSAgICAgZGV2aWNlLT5ub2RlX2lkLAorCQkJCQkJICAgICBkZXZpY2UtPmdlbmVyYXRpb24pOworfQorRVhQT1JUX1NZTUJPTChmd19kZXZpY2VfZW5hYmxlX3BoeXNfZG1hKTsKKworc3RydWN0IGNvbmZpZ19yb21fYXR0cmlidXRlIHsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyOworCXUzMiBrZXk7Cit9OworCitzdGF0aWMgc3NpemVfdAorc2hvd19pbW1lZGlhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUgKmF0dHIgPQorCQljb250YWluZXJfb2YoZGF0dHIsIHN0cnVjdCBjb25maWdfcm9tX2F0dHJpYnV0ZSwgYXR0cik7CisJc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciBjaTsKKwl1MzIgKmRpcjsKKwlpbnQga2V5LCB2YWx1ZTsKKworCWlmIChpc19md191bml0KGRldikpCisJCWRpciA9IGZ3X3VuaXQoZGV2KS0+ZGlyZWN0b3J5OworCWVsc2UKKwkJZGlyID0gZndfZGV2aWNlKGRldiktPmNvbmZpZ19yb20gKyA1OworCisJZndfY3NyX2l0ZXJhdG9yX2luaXQoJmNpLCBkaXIpOworCXdoaWxlIChmd19jc3JfaXRlcmF0b3JfbmV4dCgmY2ksICZrZXksICZ2YWx1ZSkpCisJCWlmIChhdHRyLT5rZXkgPT0ga2V5KQorCQkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgYnVmID8gUEFHRV9TSVpFIDogMCwKKwkJCQkJIjB4JTA2eFxuIiwgdmFsdWUpOworCisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKKyNkZWZpbmUgSU1NRURJQVRFX0FUVFIobmFtZSwga2V5KQkJCQlcCisJeyBfX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19pbW1lZGlhdGUsIE5VTEwpLCBrZXkgfQorCitzdGF0aWMgc3NpemVfdAorc2hvd190ZXh0X2xlYWYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUgKmF0dHIgPQorCQljb250YWluZXJfb2YoZGF0dHIsIHN0cnVjdCBjb25maWdfcm9tX2F0dHJpYnV0ZSwgYXR0cik7CisJc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciBjaTsKKwl1MzIgKmRpciwgKmJsb2NrID0gTlVMTCwgKnAsICplbmQ7CisJaW50IGxlbmd0aCwga2V5LCB2YWx1ZSwgbGFzdF9rZXkgPSAwOworCWNoYXIgKmI7CisKKwlpZiAoaXNfZndfdW5pdChkZXYpKQorCQlkaXIgPSBmd191bml0KGRldiktPmRpcmVjdG9yeTsKKwllbHNlCisJCWRpciA9IGZ3X2RldmljZShkZXYpLT5jb25maWdfcm9tICsgNTsKKworCWZ3X2Nzcl9pdGVyYXRvcl9pbml0KCZjaSwgZGlyKTsKKwl3aGlsZSAoZndfY3NyX2l0ZXJhdG9yX25leHQoJmNpLCAma2V5LCAmdmFsdWUpKSB7CisJCWlmIChhdHRyLT5rZXkgPT0gbGFzdF9rZXkgJiYKKwkJICAgIGtleSA9PSAoQ1NSX0RFU0NSSVBUT1IgfCBDU1JfTEVBRikpCisJCQlibG9jayA9IGNpLnAgLSAxICsgdmFsdWU7CisJCWxhc3Rfa2V5ID0ga2V5OworCX0KKworCWlmIChibG9jayA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWxlbmd0aCA9IG1pbihibG9ja1swXSA+PiAxNiwgMjU2VSk7CisJaWYgKGxlbmd0aCA8IDMpCisJCXJldHVybiAtRU5PRU5UOworCisJaWYgKGJsb2NrWzFdICE9IDAgfHwgYmxvY2tbMl0gIT0gMCkKKwkJLyogVW5rbm93biBlbmNvZGluZy4gKi8KKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybiBsZW5ndGggKiA0OworCisJYiA9IGJ1ZjsKKwllbmQgPSAmYmxvY2tbbGVuZ3RoICsgMV07CisJZm9yIChwID0gJmJsb2NrWzNdOyBwIDwgZW5kOyBwKyssIGIgKz0gNCkKKwkJKiAodTMyICopIGIgPSAoX19mb3JjZSB1MzIpIF9fY3B1X3RvX2JlMzIoKnApOworCisJLyogU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgYWRkIG5ld2xpbmUuICovCisJd2hpbGUgKGItLSwgKGlzc3BhY2UoKmIpIHx8ICpiID09ICdcMCcpICYmIGIgPiBidWYpOworCXN0cmNweShiICsgMSwgIlxuIik7CisKKwlyZXR1cm4gYiArIDIgLSBidWY7Cit9CisKKyNkZWZpbmUgVEVYVF9MRUFGX0FUVFIobmFtZSwga2V5KQkJCQlcCisJeyBfX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd190ZXh0X2xlYWYsIE5VTEwpLCBrZXkgfQorCitzdGF0aWMgc3RydWN0IGNvbmZpZ19yb21fYXR0cmlidXRlIGNvbmZpZ19yb21fYXR0cmlidXRlc1tdID0geworCUlNTUVESUFURV9BVFRSKHZlbmRvciwgQ1NSX1ZFTkRPUiksCisJSU1NRURJQVRFX0FUVFIoaGFyZHdhcmVfdmVyc2lvbiwgQ1NSX0hBUkRXQVJFX1ZFUlNJT04pLAorCUlNTUVESUFURV9BVFRSKHNwZWNpZmllcl9pZCwgQ1NSX1NQRUNJRklFUl9JRCksCisJSU1NRURJQVRFX0FUVFIodmVyc2lvbiwgQ1NSX1ZFUlNJT04pLAorCUlNTUVESUFURV9BVFRSKG1vZGVsLCBDU1JfTU9ERUwpLAorCVRFWFRfTEVBRl9BVFRSKHZlbmRvcl9uYW1lLCBDU1JfVkVORE9SKSwKKwlURVhUX0xFQUZfQVRUUihtb2RlbF9uYW1lLCBDU1JfTU9ERUwpLAorCVRFWFRfTEVBRl9BVFRSKGhhcmR3YXJlX3ZlcnNpb25fbmFtZSwgQ1NSX0hBUkRXQVJFX1ZFUlNJT04pLAorfTsKKworc3RhdGljIHZvaWQKK2luaXRfZndfYXR0cmlidXRlX2dyb3VwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRycywKKwkJCXN0cnVjdCBmd19hdHRyaWJ1dGVfZ3JvdXAgKmdyb3VwKQoreworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyOworCWludCBpLCBqOworCisJZm9yIChqID0gMDsgYXR0cnNbal0uYXR0ci5uYW1lICE9IE5VTEw7IGorKykKKwkJZ3JvdXAtPmF0dHJzW2pdID0gJmF0dHJzW2pdLmF0dHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb25maWdfcm9tX2F0dHJpYnV0ZXMpOyBpKyspIHsKKwkJYXR0ciA9ICZjb25maWdfcm9tX2F0dHJpYnV0ZXNbaV0uYXR0cjsKKwkJaWYgKGF0dHItPnNob3coZGV2LCBhdHRyLCBOVUxMKSA8IDApCisJCQljb250aW51ZTsKKwkJZ3JvdXAtPmF0dHJzW2orK10gPSAmYXR0ci0+YXR0cjsKKwl9CisKKwlCVUdfT04oaiA+PSBBUlJBWV9TSVpFKGdyb3VwLT5hdHRycykpOworCWdyb3VwLT5hdHRyc1tqKytdID0gTlVMTDsKKwlncm91cC0+Z3JvdXBzWzBdID0gJmdyb3VwLT5ncm91cDsKKwlncm91cC0+Z3JvdXBzWzFdID0gTlVMTDsKKwlncm91cC0+Z3JvdXAuYXR0cnMgPSBncm91cC0+YXR0cnM7CisJZGV2LT5ncm91cHMgPSBncm91cC0+Z3JvdXBzOworfQorCitzdGF0aWMgc3NpemVfdAorbW9kYWxpYXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IGZ3X3VuaXQoZGV2KTsKKwlpbnQgbGVuZ3RoOworCisJbGVuZ3RoID0gZ2V0X21vZGFsaWFzKHVuaXQsIGJ1ZiwgUEFHRV9TSVpFKTsKKwlzdHJjcHkoYnVmICsgbGVuZ3RoLCAiXG4iKTsKKworCXJldHVybiBsZW5ndGggKyAxOworfQorCitzdGF0aWMgc3NpemVfdAorcm9tX2luZGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShkZXYtPnBhcmVudCk7CisJc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBmd191bml0KGRldik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCShpbnQpKHVuaXQtPmRpcmVjdG9yeSAtIGRldmljZS0+Y29uZmlnX3JvbSkpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZndfdW5pdF9hdHRyaWJ1dGVzW10gPSB7CisJX19BVFRSX1JPKG1vZGFsaWFzKSwKKwlfX0FUVFJfUk8ocm9tX2luZGV4KSwKKwlfX0FUVFJfTlVMTCwKK307CisKK3N0YXRpYyBzc2l6ZV90Citjb25maWdfcm9tX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShkZXYpOworCisJbWVtY3B5KGJ1ZiwgZGV2aWNlLT5jb25maWdfcm9tLCBkZXZpY2UtPmNvbmZpZ19yb21fbGVuZ3RoICogNCk7CisKKwlyZXR1cm4gZGV2aWNlLT5jb25maWdfcm9tX2xlbmd0aCAqIDQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitndWlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShkZXYpOworCXU2NCBndWlkOworCisJZ3VpZCA9ICgodTY0KWRldmljZS0+Y29uZmlnX3JvbVszXSA8PCAzMikgfCBkZXZpY2UtPmNvbmZpZ19yb21bNF07CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwMTZsbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWd1aWQpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZndfZGV2aWNlX2F0dHJpYnV0ZXNbXSA9IHsKKwlfX0FUVFJfUk8oY29uZmlnX3JvbSksCisJX19BVFRSX1JPKGd1aWQpLAorCV9fQVRUUl9OVUxMLAorfTsKKworc3RydWN0IHJlYWRfcXVhZGxldF9jYWxsYmFja19kYXRhIHsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworCWludCByY29kZTsKKwl1MzIgZGF0YTsKK307CisKK3N0YXRpYyB2b2lkCitjb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAorCQkgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJlYWRfcXVhZGxldF9jYWxsYmFja19kYXRhICpjYWxsYmFja19kYXRhID0gZGF0YTsKKworCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSkKKwkJY2FsbGJhY2tfZGF0YS0+ZGF0YSA9IGJlMzJfdG9fY3B1KCooX19iZTMyICopcGF5bG9hZCk7CisJY2FsbGJhY2tfZGF0YS0+cmNvZGUgPSByY29kZTsKKwljb21wbGV0ZSgmY2FsbGJhY2tfZGF0YS0+ZG9uZSk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9yb20oc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLCBpbnQgaW5kZXgsIHUzMiAqIGRhdGEpCit7CisJc3RydWN0IHJlYWRfcXVhZGxldF9jYWxsYmFja19kYXRhIGNhbGxiYWNrX2RhdGE7CisJc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHQ7CisJdTY0IG9mZnNldDsKKworCWluaXRfY29tcGxldGlvbigmY2FsbGJhY2tfZGF0YS5kb25lKTsKKworCW9mZnNldCA9IDB4ZmZmZmYwMDAwNDAwVUxMICsgaW5kZXggKiA0OworCWZ3X3NlbmRfcmVxdWVzdChkZXZpY2UtPmNhcmQsICZ0LCBUQ09ERV9SRUFEX1FVQURMRVRfUkVRVUVTVCwKKwkJCWRldmljZS0+bm9kZV9pZCwKKwkJCWRldmljZS0+Z2VuZXJhdGlvbiwgU0NPREVfMTAwLAorCQkJb2Zmc2V0LCBOVUxMLCA0LCBjb21wbGV0ZV90cmFuc2FjdGlvbiwgJmNhbGxiYWNrX2RhdGEpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmY2FsbGJhY2tfZGF0YS5kb25lKTsKKworCSpkYXRhID0gY2FsbGJhY2tfZGF0YS5kYXRhOworCisJcmV0dXJuIGNhbGxiYWNrX2RhdGEucmNvZGU7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9idXNfaW5mb19ibG9jayhzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpCit7CisJc3RhdGljIHUzMiByb21bMjU2XTsKKwl1MzIgc3RhY2tbMTZdLCBzcCwga2V5OworCWludCBpLCBlbmQsIGxlbmd0aDsKKworCS8qIEZpcnN0IHJlYWQgdGhlIGJ1cyBpbmZvIGJsb2NrLiAqLworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJaWYgKHJlYWRfcm9tKGRldmljZSwgaSwgJnJvbVtpXSkgIT0gUkNPREVfQ09NUExFVEUpCisJCQlyZXR1cm4gLTE7CisJCS8qCisJCSAqIEFzIHBlciBJRUVFMTIxMiA3LjIsIGR1cmluZyBwb3dlci11cCwgZGV2aWNlcyBjYW4KKwkJICogcmVwbHkgd2l0aCBhIDAgZm9yIHRoZSBmaXJzdCBxdWFkbGV0IG9mIHRoZSBjb25maWcKKwkJICogcm9tIHRvIGluZGljYXRlIHRoYXQgdGhleSBhcmUgYm9vdGluZyAoZm9yIGV4YW1wbGUsCisJCSAqIGlmIHRoZSBmaXJtd2FyZSBpcyBvbiB0aGUgZGlzayBvZiBhIGV4dGVybmFsCisJCSAqIGhhcmRkaXNrKS4gIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGZhaWwsIGFuZCB0aGUKKwkJICogcmV0cnkgbWVjaGFuaXNtIHdpbGwgdHJ5IGFnYWluIGxhdGVyLgorCQkgKi8KKwkJaWYgKGkgPT0gMCAmJiByb21baV0gPT0gMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIE5vdyBwYXJzZSB0aGUgY29uZmlnIHJvbS4gIFRoZSBjb25maWcgcm9tIGlzIGEgcmVjdXJzaXZlCisJICogZGlyZWN0b3J5IHN0cnVjdHVyZSBzbyB3ZSBwYXJzZSBpdCB1c2luZyBhIHN0YWNrIG9mCisJICogcmVmZXJlbmNlcyB0byB0aGUgYmxvY2tzIHRoYXQgbWFrZSB1cCB0aGUgc3RydWN0dXJlLiAgV2UKKwkgKiBwdXNoIGEgcmVmZXJlbmNlIHRvIHRoZSByb290IGRpcmVjdG9yeSBvbiB0aGUgc3RhY2sgdG8KKwkgKiBzdGFydCB0aGluZ3Mgb2ZmLgorCSAqLworCWxlbmd0aCA9IGk7CisJc3AgPSAwOworCXN0YWNrW3NwKytdID0gMHhjMDAwMDAwNTsKKwl3aGlsZSAoc3AgPiAwKSB7CisJCS8qCisJCSAqIFBvcCB0aGUgbmV4dCBibG9jayByZWZlcmVuY2Ugb2YgdGhlIHN0YWNrLiAgVGhlCisJCSAqIGxvd2VyIDI0IGJpdHMgaXMgdGhlIG9mZnNldCBpbnRvIHRoZSBjb25maWcgcm9tLAorCQkgKiB0aGUgdXBwZXIgOCBiaXRzIGFyZSB0aGUgdHlwZSBvZiB0aGUgcmVmZXJlbmNlIHRoZQorCQkgKiBibG9jay4KKwkJICovCisJCWtleSA9IHN0YWNrWy0tc3BdOworCQlpID0ga2V5ICYgMHhmZmZmZmY7CisJCWlmIChpID49IEFSUkFZX1NJWkUocm9tKSkKKwkJCS8qCisJCQkgKiBUaGUgcmVmZXJlbmNlIHBvaW50cyBvdXRzaWRlIHRoZSBzdGFuZGFyZAorCQkJICogY29uZmlnIHJvbSBhcmVhLCBzb21ldGhpbmcncyBmaXNoeS4KKwkJCSAqLworCQkJcmV0dXJuIC0xOworCisJCS8qIFJlYWQgaGVhZGVyIHF1YWRsZXQgZm9yIHRoZSBibG9jayB0byBnZXQgdGhlIGxlbmd0aC4gKi8KKwkJaWYgKHJlYWRfcm9tKGRldmljZSwgaSwgJnJvbVtpXSkgIT0gUkNPREVfQ09NUExFVEUpCisJCQlyZXR1cm4gLTE7CisJCWVuZCA9IGkgKyAocm9tW2ldID4+IDE2KSArIDE7CisJCWkrKzsKKwkJaWYgKGVuZCA+IEFSUkFZX1NJWkUocm9tKSkKKwkJCS8qCisJCQkgKiBUaGlzIGJsb2NrIGV4dGVuZHMgb3V0c2lkZSBzdGFuZGFyZCBjb25maWcKKwkJCSAqIGFyZWEgKGFuZCB0aGUgYXJyYXkgd2UncmUgcmVhZGluZyBpdAorCQkJICogaW50bykuICBUaGF0J3MgYnJva2VuLCBzbyBpZ25vcmUgdGhpcworCQkJICogZGV2aWNlLgorCQkJICovCisJCQlyZXR1cm4gLTE7CisKKwkJLyoKKwkJICogTm93IHJlYWQgaW4gdGhlIGJsb2NrLiAgSWYgdGhpcyBpcyBhIGRpcmVjdG9yeQorCQkgKiBibG9jaywgY2hlY2sgdGhlIGVudHJpZXMgYXMgd2UgcmVhZCB0aGVtIHRvIHNlZSBpZgorCQkgKiBpdCByZWZlcmVuY2VzIGFub3RoZXIgYmxvY2ssIGFuZCBwdXNoIGl0IGluIHRoYXQgY2FzZS4KKwkJICovCisJCXdoaWxlIChpIDwgZW5kKSB7CisJCQlpZiAocmVhZF9yb20oZGV2aWNlLCBpLCAmcm9tW2ldKSAhPSBSQ09ERV9DT01QTEVURSkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoKGtleSA+PiAzMCkgPT0gMyAmJiAocm9tW2ldID4+IDMwKSA+IDEgJiYKKwkJCSAgICBzcCA8IEFSUkFZX1NJWkUoc3RhY2spKQorCQkJCXN0YWNrW3NwKytdID0gaSArIHJvbVtpXTsKKwkJCWkrKzsKKwkJfQorCQlpZiAobGVuZ3RoIDwgaSkKKwkJCWxlbmd0aCA9IGk7CisJfQorCisJZGV2aWNlLT5jb25maWdfcm9tID0ga21hbGxvYyhsZW5ndGggKiA0LCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2aWNlLT5jb25maWdfcm9tID09IE5VTEwpCisJCXJldHVybiAtMTsKKwltZW1jcHkoZGV2aWNlLT5jb25maWdfcm9tLCByb20sIGxlbmd0aCAqIDQpOworCWRldmljZS0+Y29uZmlnX3JvbV9sZW5ndGggPSBsZW5ndGg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZndfdW5pdF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IGZ3X3VuaXQoZGV2KTsKKworCWtmcmVlKHVuaXQpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGZ3X3VuaXRfdHlwZSA9IHsKKwkudWV2ZW50CQk9IGZ3X3VuaXRfdWV2ZW50LAorCS5yZWxlYXNlCT0gZndfdW5pdF9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBpc19md191bml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT50eXBlID09ICZmd191bml0X3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV91bml0cyhzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciBjaTsKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdDsKKwlpbnQga2V5LCB2YWx1ZSwgaTsKKworCWkgPSAwOworCWZ3X2Nzcl9pdGVyYXRvcl9pbml0KCZjaSwgJmRldmljZS0+Y29uZmlnX3JvbVs1XSk7CisJd2hpbGUgKGZ3X2Nzcl9pdGVyYXRvcl9uZXh0KCZjaSwgJmtleSwgJnZhbHVlKSkgeworCQlpZiAoa2V5ICE9IChDU1JfVU5JVCB8IENTUl9ESVJFQ1RPUlkpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSB1bml0IGRpcmVjdG9yeSBhbmQgdHJ5IHRvCisJCSAqIG1hdGNoIHRoZSBkcml2ZXJzIGlkX3RhYmxlcyBhZ2FpbnN0IGl0LgorCQkgKi8KKwkJdW5pdCA9IGt6YWxsb2Moc2l6ZW9mKCp1bml0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICh1bml0ID09IE5VTEwpIHsKKwkJCWZ3X2Vycm9yKCJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB1bml0XG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdW5pdC0+ZGlyZWN0b3J5ID0gY2kucCArIHZhbHVlIC0gMTsKKwkJdW5pdC0+ZGV2aWNlLmJ1cyA9ICZmd19idXNfdHlwZTsKKwkJdW5pdC0+ZGV2aWNlLnR5cGUgPSAmZndfdW5pdF90eXBlOworCQl1bml0LT5kZXZpY2UucGFyZW50ID0gJmRldmljZS0+ZGV2aWNlOworCQlzbnByaW50Zih1bml0LT5kZXZpY2UuYnVzX2lkLCBzaXplb2YodW5pdC0+ZGV2aWNlLmJ1c19pZCksCisJCQkgIiVzLiVkIiwgZGV2aWNlLT5kZXZpY2UuYnVzX2lkLCBpKyspOworCisJCWluaXRfZndfYXR0cmlidXRlX2dyb3VwKCZ1bml0LT5kZXZpY2UsCisJCQkJCWZ3X3VuaXRfYXR0cmlidXRlcywKKwkJCQkJJnVuaXQtPmF0dHJpYnV0ZV9ncm91cCk7CisJCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnVuaXQtPmRldmljZSkgPCAwKQorCQkJZ290byBza2lwX3VuaXQ7CisKKwkJY29udGludWU7CisKKwlza2lwX3VuaXQ6CisJCWtmcmVlKHVuaXQpOworCX0KK30KKworc3RhdGljIGludCBzaHV0ZG93bl91bml0KHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqZGF0YSkKK3sKKwlkZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBERUNMQVJFX1JXU0VNKGlkcl9yd3NlbSk7CitzdGF0aWMgREVGSU5FX0lEUihmd19kZXZpY2VfaWRyKTsKK2ludCBmd19jZGV2X21ham9yOworCitzdHJ1Y3QgZndfZGV2aWNlICpmd19kZXZpY2VfZnJvbV9kZXZ0KGRldl90IGRldnQpCit7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlOworCisJZG93bl9yZWFkKCZpZHJfcndzZW0pOworCWRldmljZSA9IGlkcl9maW5kKCZmd19kZXZpY2VfaWRyLCBNSU5PUihkZXZ0KSk7CisJdXBfcmVhZCgmaWRyX3J3c2VtKTsKKworCXJldHVybiBkZXZpY2U7Cit9CisKK3N0YXRpYyB2b2lkIGZ3X2RldmljZV9zaHV0ZG93bihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmd19kZXZpY2UsIHdvcmsud29yayk7CisJaW50IG1pbm9yID0gTUlOT1IoZGV2aWNlLT5kZXZpY2UuZGV2dCk7CisKKwlkb3duX3dyaXRlKCZpZHJfcndzZW0pOworCWlkcl9yZW1vdmUoJmZ3X2RldmljZV9pZHIsIG1pbm9yKTsKKwl1cF93cml0ZSgmaWRyX3J3c2VtKTsKKworCWZ3X2RldmljZV9jZGV2X3JlbW92ZShkZXZpY2UpOworCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2aWNlLT5kZXZpY2UsIE5VTEwsIHNodXRkb3duX3VuaXQpOworCWRldmljZV91bnJlZ2lzdGVyKCZkZXZpY2UtPmRldmljZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgZndfZGV2aWNlX3R5cGUgPSB7CisJLnJlbGVhc2UJPSBmd19kZXZpY2VfcmVsZWFzZSwKK307CisKKy8qCisgKiBUaGVzZSBkZWZpbmVzIGNvbnRyb2wgdGhlIHJldHJ5IGJlaGF2aW9yIGZvciByZWFkaW5nIHRoZSBjb25maWcKKyAqIHJvbS4gIEl0IHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgdG8gdHdlYWsgdGhlc2U7IGlmIHRoZSBkZXZpY2UKKyAqIGRvZXNuJ3QgcmVzcG9uZCB0byBhIGNvbmZpZyByb20gcmVhZCB3aXRoaW4gMTAgc2Vjb25kcywgaXQncyBub3QKKyAqIGdvaW5nIHRvIHJlc3BvbmQgYXQgYWxsLiAgQXMgZm9yIHRoZSBpbml0aWFsIGRlbGF5LCBhIGxvdCBvZgorICogZGV2aWNlcyB3aWxsIGJlIGFibGUgdG8gcmVzcG9uZCB3aXRoaW4gaGFsZiBhIHNlY29uZCBhZnRlciBidXMKKyAqIHJlc2V0LiAgT24gdGhlIG90aGVyIGhhbmQsIGl0J3Mgbm90IHJlYWxseSB3b3J0aCBiZWluZyBtb3JlCisgKiBhZ2dyZXNzaXZlIHRoYW4gdGhhdCwgc2luY2UgaXQgc2NhbGVzIHByZXR0eSB3ZWxsOyBpZiAxMCBkZXZpY2VzCisgKiBhcmUgcGx1Z2dlZCBpbiwgdGhleSdyZSBhbGwgZ2V0dGluZyByZWFkIHdpdGhpbiBvbmUgc2Vjb25kLgorICovCisKKyNkZWZpbmUgTUFYX1JFVFJJRVMJMTAKKyNkZWZpbmUgUkVUUllfREVMQVkJKDMgKiBIWikKKyNkZWZpbmUgSU5JVElBTF9ERUxBWQkoSFogLyAyKQorCitzdGF0aWMgdm9pZCBmd19kZXZpY2VfaW5pdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmd19kZXZpY2UsIHdvcmsud29yayk7CisJaW50IG1pbm9yLCBlcnI7CisKKwkvKgorCSAqIEFsbCBmYWlsdXJlIHBhdGhzIGhlcmUgc2V0IG5vZGUtPmRhdGEgdG8gTlVMTCwgc28gdGhhdCB3ZQorCSAqIGRvbid0IHRyeSB0byBkbyBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoKSBvbiBhIGtmcmVlKCknZAorCSAqIGRldmljZS4KKwkgKi8KKworCWlmIChyZWFkX2J1c19pbmZvX2Jsb2NrKGRldmljZSkgPCAwKSB7CisJCWlmIChkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcyA8IE1BWF9SRVRSSUVTKSB7CisJCQlkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcysrOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssIFJFVFJZX0RFTEFZKTsKKwkJfSBlbHNlIHsKKwkJCWZ3X25vdGlmeSgiZ2l2aW5nIHVwIG9uIGNvbmZpZyByb20gZm9yIG5vZGUgaWQgJXhcbiIsCisJCQkJICBkZXZpY2UtPm5vZGVfaWQpOworCQkJaWYgKGRldmljZS0+bm9kZSA9PSBkZXZpY2UtPmNhcmQtPnJvb3Rfbm9kZSkKKwkJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+Y2FyZC0+d29yaywgMCk7CisJCQlmd19kZXZpY2VfcmVsZWFzZSgmZGV2aWNlLT5kZXZpY2UpOworCQl9CisJCXJldHVybjsKKwl9CisKKwllcnIgPSAtRU5PTUVNOworCWRvd25fd3JpdGUoJmlkcl9yd3NlbSk7CisJaWYgKGlkcl9wcmVfZ2V0KCZmd19kZXZpY2VfaWRyLCBHRlBfS0VSTkVMKSkKKwkJZXJyID0gaWRyX2dldF9uZXcoJmZ3X2RldmljZV9pZHIsIGRldmljZSwgJm1pbm9yKTsKKwl1cF93cml0ZSgmaWRyX3J3c2VtKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKKworCWRldmljZS0+ZGV2aWNlLmJ1cyA9ICZmd19idXNfdHlwZTsKKwlkZXZpY2UtPmRldmljZS50eXBlID0gJmZ3X2RldmljZV90eXBlOworCWRldmljZS0+ZGV2aWNlLnBhcmVudCA9IGRldmljZS0+Y2FyZC0+ZGV2aWNlOworCWRldmljZS0+ZGV2aWNlLmRldnQgPSBNS0RFVihmd19jZGV2X21ham9yLCBtaW5vcik7CisJc25wcmludGYoZGV2aWNlLT5kZXZpY2UuYnVzX2lkLCBzaXplb2YoZGV2aWNlLT5kZXZpY2UuYnVzX2lkKSwKKwkJICJmdyVkIiwgbWlub3IpOworCisJaW5pdF9md19hdHRyaWJ1dGVfZ3JvdXAoJmRldmljZS0+ZGV2aWNlLAorCQkJCWZ3X2RldmljZV9hdHRyaWJ1dGVzLAorCQkJCSZkZXZpY2UtPmF0dHJpYnV0ZV9ncm91cCk7CisJaWYgKGRldmljZV9hZGQoJmRldmljZS0+ZGV2aWNlKSkgeworCQlmd19lcnJvcigiRmFpbGVkIHRvIGFkZCBkZXZpY2UuXG4iKTsKKwkJZ290byBlcnJvcl93aXRoX2NkZXY7CisJfQorCisJY3JlYXRlX3VuaXRzKGRldmljZSk7CisKKwkvKgorCSAqIFRyYW5zaXRpb24gdGhlIGRldmljZSB0byBydW5uaW5nIHN0YXRlLiAgSWYgaXQgZ290IHB1bGxlZAorCSAqIG91dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdlIGRpZCB0aGUgaW50aWFsaXphdGlvbiB3b3JrLCB3ZQorCSAqIGhhdmUgdG8gc2h1dCBkb3duIHRoZSBkZXZpY2UgYWdhaW4gaGVyZS4gIE5vcm1hbGx5LCB0aG91Z2gsCisJICogZndfbm9kZV9ldmVudCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBzaHV0dGluZyBpdCBkb3duIHdoZW4KKwkgKiBuZWNlc3NhcnkuICBXZSBoYXZlIHRvIHVzZSB0aGUgYXRvbWljIGNtcHhjaGcgaGVyZSB0byBhdm9pZAorCSAqIHJhY2luZyB3aXRoIHRoZSBGV19OT0RFX0RFU1RST1lFRCBjYXNlIGluCisJICogZndfbm9kZV9ldmVudCgpLgorCSAqLworCWlmIChhdG9taWNfY21weGNoZygmZGV2aWNlLT5zdGF0ZSwKKwkJICAgIEZXX0RFVklDRV9JTklUSUFMSVpJTkcsCisJCSAgICBGV19ERVZJQ0VfUlVOTklORykgPT0gRldfREVWSUNFX1NIVVRET1dOKQorCQlmd19kZXZpY2Vfc2h1dGRvd24oJmRldmljZS0+d29yay53b3JrKTsKKwllbHNlCisJCWZ3X25vdGlmeSgiY3JlYXRlZCBuZXcgZncgZGV2aWNlICVzICglZCBjb25maWcgcm9tIHJldHJpZXMpXG4iLAorCQkJICBkZXZpY2UtPmRldmljZS5idXNfaWQsIGRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzKTsKKworCS8qCisJICogUmVzY2hlZHVsZSB0aGUgSVJNIHdvcmsgaWYgd2UganVzdCBmaW5pc2hlZCByZWFkaW5nIHRoZQorCSAqIHJvb3Qgbm9kZSBjb25maWcgcm9tLiAgSWYgdGhpcyByYWNlcyB3aXRoIGEgYnVzIHJlc2V0IHdlCisJICoganVzdCBlbmQgdXAgcnVubmluZyB0aGUgSVJNIHdvcmsgYSBjb3VwbGUgb2YgZXh0cmEgdGltZXMgLQorCSAqIHByZXR0eSBoYXJtbGVzcy4KKwkgKi8KKwlpZiAoZGV2aWNlLT5ub2RlID09IGRldmljZS0+Y2FyZC0+cm9vdF9ub2RlKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+Y2FyZC0+d29yaywgMCk7CisKKwlyZXR1cm47CisKKyBlcnJvcl93aXRoX2NkZXY6CisJZG93bl93cml0ZSgmaWRyX3J3c2VtKTsKKwlpZHJfcmVtb3ZlKCZmd19kZXZpY2VfaWRyLCBtaW5vcik7CisJdXBfd3JpdGUoJmlkcl9yd3NlbSk7CisgZXJyb3I6CisJcHV0X2RldmljZSgmZGV2aWNlLT5kZXZpY2UpOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV91bml0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IGZ3X3VuaXQoZGV2KTsKKwlzdHJ1Y3QgZndfZHJpdmVyICpkcml2ZXIgPSAoc3RydWN0IGZ3X2RyaXZlciAqKWRldi0+ZHJpdmVyOworCisJaWYgKGlzX2Z3X3VuaXQoZGV2KSAmJiBkcml2ZXIgIT0gTlVMTCAmJiBkcml2ZXItPnVwZGF0ZSAhPSBOVUxMKSB7CisJCWRvd24oJmRldi0+c2VtKTsKKwkJZHJpdmVyLT51cGRhdGUodW5pdCk7CisJCXVwKCZkZXYtPnNlbSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZ3X2RldmljZV91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZndfZGV2aWNlLCB3b3JrLndvcmspOworCisJZndfZGV2aWNlX2NkZXZfdXBkYXRlKGRldmljZSk7CisJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZkZXZpY2UtPmRldmljZSwgTlVMTCwgdXBkYXRlX3VuaXQpOworfQorCit2b2lkIGZ3X25vZGVfZXZlbnQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19ub2RlICpub2RlLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRldfTk9ERV9DUkVBVEVEOgorCWNhc2UgRldfTk9ERV9MSU5LX09OOgorCQlpZiAoIW5vZGUtPmxpbmtfb24pCisJCQlicmVhazsKKworCQlkZXZpY2UgPSBremFsbG9jKHNpemVvZigqZGV2aWNlKSwgR0ZQX0FUT01JQyk7CisJCWlmIChkZXZpY2UgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIERvIG1pbmltYWwgaW50aWFsaXphdGlvbiBvZiB0aGUgZGV2aWNlIGhlcmUsIHRoZQorCQkgKiByZXN0IHdpbGwgaGFwcGVuIGluIGZ3X2RldmljZV9pbml0KCkuICBXZSBuZWVkIHRoZQorCQkgKiBjYXJkIGFuZCBub2RlIHNvIHdlIGNhbiByZWFkIHRoZSBjb25maWcgcm9tIGFuZCB3ZQorCQkgKiBuZWVkIHRvIGRvIGRldmljZV9pbml0aWFsaXplKCkgbm93IHNvCisJCSAqIGRldmljZV9mb3JfZWFjaF9jaGlsZCgpIGluIEZXX05PREVfVVBEQVRFRCBpcworCQkgKiBkb2Vzbid0IGZyZWFrIG91dC4KKwkJICovCisJCWRldmljZV9pbml0aWFsaXplKCZkZXZpY2UtPmRldmljZSk7CisJCWF0b21pY19zZXQoJmRldmljZS0+c3RhdGUsIEZXX0RFVklDRV9JTklUSUFMSVpJTkcpOworCQlkZXZpY2UtPmNhcmQgPSBmd19jYXJkX2dldChjYXJkKTsKKwkJZGV2aWNlLT5ub2RlID0gZndfbm9kZV9nZXQobm9kZSk7CisJCWRldmljZS0+bm9kZV9pZCA9IG5vZGUtPm5vZGVfaWQ7CisJCWRldmljZS0+Z2VuZXJhdGlvbiA9IGNhcmQtPmdlbmVyYXRpb247CisJCUlOSVRfTElTVF9IRUFEKCZkZXZpY2UtPmNsaWVudF9saXN0KTsKKworCQkvKgorCQkgKiBTZXQgdGhlIG5vZGUgZGF0YSB0byBwb2ludCBiYWNrIHRvIHRoaXMgZGV2aWNlIHNvCisJCSAqIEZXX05PREVfVVBEQVRFRCBjYWxsYmFja3MgY2FuIHVwZGF0ZSB0aGUgbm9kZV9pZAorCQkgKiBhbmQgZ2VuZXJhdGlvbiBmb3IgdGhlIGRldmljZS4KKwkJICovCisJCW5vZGUtPmRhdGEgPSBkZXZpY2U7CisKKwkJLyoKKwkJICogTWFueSBkZXZpY2VzIGFyZSBzbG93IHRvIHJlc3BvbmQgYWZ0ZXIgYnVzIHJlc2V0cywKKwkJICogZXNwZWNpYWxseSBpZiB0aGV5IGFyZSBidXMgcG93ZXJlZCBhbmQgZ28gdGhyb3VnaAorCQkgKiBwb3dlci11cCBhZnRlciBnZXR0aW5nIHBsdWdnZWQgaW4uICBXZSBzY2hlZHVsZSB0aGUKKwkJICogZmlyc3QgY29uZmlnIHJvbSBzY2FuIGhhbGYgYSBzZWNvbmQgYWZ0ZXIgYnVzIHJlc2V0LgorCQkgKi8KKwkJSU5JVF9ERUxBWUVEX1dPUksoJmRldmljZS0+d29yaywgZndfZGV2aWNlX2luaXQpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+d29yaywgSU5JVElBTF9ERUxBWSk7CisJCWJyZWFrOworCisJY2FzZSBGV19OT0RFX1VQREFURUQ6CisJCWlmICghbm9kZS0+bGlua19vbiB8fCBub2RlLT5kYXRhID09IE5VTEwpCisJCQlicmVhazsKKworCQlkZXZpY2UgPSBub2RlLT5kYXRhOworCQlkZXZpY2UtPm5vZGVfaWQgPSBub2RlLT5ub2RlX2lkOworCQlkZXZpY2UtPmdlbmVyYXRpb24gPSBjYXJkLT5nZW5lcmF0aW9uOworCQlpZiAoYXRvbWljX3JlYWQoJmRldmljZS0+c3RhdGUpID09IEZXX0RFVklDRV9SVU5OSU5HKSB7CisJCQlQUkVQQVJFX0RFTEFZRURfV09SSygmZGV2aWNlLT53b3JrLCBmd19kZXZpY2VfdXBkYXRlKTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrLCAwKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRldfTk9ERV9ERVNUUk9ZRUQ6CisJY2FzZSBGV19OT0RFX0xJTktfT0ZGOgorCQlpZiAoIW5vZGUtPmRhdGEpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBEZXN0cm95IHRoZSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlLiAgVGhlcmUKKwkJICogYXJlIHR3byBjYXNlcyBoZXJlOiBlaXRoZXIgdGhlIGRldmljZSBpcyBmdWxseQorCQkgKiBpbml0aWFsaXplZCAoRldfREVWSUNFX1JVTk5JTkcpIG9yIHdlJ3JlIGluIHRoZQorCQkgKiBwcm9jZXNzIG9mIHJlYWRpbmcgaXRzIGNvbmZpZyByb20KKwkJICogKEZXX0RFVklDRV9JTklUSUFMSVpJTkcpLiAgSWYgaXQgaXMgZnVsbHkKKwkJICogaW5pdGlhbGl6ZWQgd2UgY2FuIHJldXNlIGRldmljZS0+d29yayB0byBzY2hlZHVsZSBhCisJCSAqIGZ1bGwgZndfZGV2aWNlX3NodXRkb3duKCkuICBJZiBub3QsIHRoZXJlJ3Mgd29yaworCQkgKiBzY2hlZHVsZWQgdG8gcmVhZCBpdCdzIGNvbmZpZyByb20sIGFuZCB3ZSBqdXN0IHB1dAorCQkgKiB0aGUgZGV2aWNlIGluIHNodXRkb3duIHN0YXRlIHRvIGhhdmUgdGhhdCBjb2RlIGZhaWwKKwkJICogdG8gY3JlYXRlIHRoZSBkZXZpY2UuCisJCSAqLworCQlkZXZpY2UgPSBub2RlLT5kYXRhOworCQlpZiAoYXRvbWljX3hjaGcoJmRldmljZS0+c3RhdGUsCisJCQkJRldfREVWSUNFX1NIVVRET1dOKSA9PSBGV19ERVZJQ0VfUlVOTklORykgeworCQkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmRldmljZS0+d29yaywgZndfZGV2aWNlX3NodXRkb3duKTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrLCAwKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5oIGIvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjE3MjNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuaApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2ICBLcmlzdGlhbiBIb2Vnc2JlcmcgPGtyaEBiaXRwbGFuZXQubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX2Z3X2RldmljZV9oCisjZGVmaW5lIF9fZndfZGV2aWNlX2gKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworZW51bSBmd19kZXZpY2Vfc3RhdGUgeworCUZXX0RFVklDRV9JTklUSUFMSVpJTkcsCisJRldfREVWSUNFX1JVTk5JTkcsCisJRldfREVWSUNFX1NIVVRET1dOLAorfTsKKworc3RydWN0IGZ3X2F0dHJpYnV0ZV9ncm91cCB7CisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JvdXBzWzJdOworCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZ3JvdXA7CisJc3RydWN0IGF0dHJpYnV0ZSAqYXR0cnNbMTFdOworfTsKKworc3RydWN0IGZ3X2RldmljZSB7CisJYXRvbWljX3Qgc3RhdGU7CisJc3RydWN0IGZ3X25vZGUgKm5vZGU7CisJaW50IG5vZGVfaWQ7CisJaW50IGdlbmVyYXRpb247CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQ7CisJc3RydWN0IGRldmljZSBkZXZpY2U7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7CisJdTMyICpjb25maWdfcm9tOworCXNpemVfdCBjb25maWdfcm9tX2xlbmd0aDsKKwlpbnQgY29uZmlnX3JvbV9yZXRyaWVzOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwlzdHJ1Y3QgZndfYXR0cmlidXRlX2dyb3VwIGF0dHJpYnV0ZV9ncm91cDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZ3X2RldmljZSAqCitmd19kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZndfZGV2aWNlLCBkZXZpY2UpOworfQorCitzdGF0aWMgaW5saW5lIGludAorZndfZGV2aWNlX2lzX3NodXRkb3duKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSkKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmRldmljZS0+c3RhdGUpID09IEZXX0RFVklDRV9TSFVURE9XTjsKK30KKworc3RydWN0IGZ3X2RldmljZSAqZndfZGV2aWNlX2dldChzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpOwordm9pZCBmd19kZXZpY2VfcHV0KHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSk7CitpbnQgZndfZGV2aWNlX2VuYWJsZV9waHlzX2RtYShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpOworCit2b2lkIGZ3X2RldmljZV9jZGV2X3VwZGF0ZShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpOwordm9pZCBmd19kZXZpY2VfY2Rldl9yZW1vdmUoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKTsKKworc3RydWN0IGZ3X2RldmljZSAqZndfZGV2aWNlX2Zyb21fZGV2dChkZXZfdCBkZXZ0KTsKK2V4dGVybiBpbnQgZndfY2Rldl9tYWpvcjsKKworc3RydWN0IGZ3X3VuaXQgeworCXN0cnVjdCBkZXZpY2UgZGV2aWNlOworCXUzMiAqZGlyZWN0b3J5OworCXN0cnVjdCBmd19hdHRyaWJ1dGVfZ3JvdXAgYXR0cmlidXRlX2dyb3VwOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfdW5pdCAqCitmd191bml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGZ3X3VuaXQsIGRldmljZSk7Cit9CisKKyNkZWZpbmUgQ1NSX09GRlNFVAkweDQwCisjZGVmaW5lIENTUl9MRUFGCTB4ODAKKyNkZWZpbmUgQ1NSX0RJUkVDVE9SWQkweGMwCisKKyNkZWZpbmUgQ1NSX0RFU0NSSVBUT1IJCTB4MDEKKyNkZWZpbmUgQ1NSX1ZFTkRPUgkJMHgwMworI2RlZmluZSBDU1JfSEFSRFdBUkVfVkVSU0lPTgkweDA0CisjZGVmaW5lIENTUl9OT0RFX0NBUEFCSUxJVElFUwkweDBjCisjZGVmaW5lIENTUl9VTklUCQkweDExCisjZGVmaW5lIENTUl9TUEVDSUZJRVJfSUQJMHgxMgorI2RlZmluZSBDU1JfVkVSU0lPTgkJMHgxMworI2RlZmluZSBDU1JfREVQRU5ERU5UX0lORk8JMHgxNAorI2RlZmluZSBDU1JfTU9ERUwJCTB4MTcKKyNkZWZpbmUgQ1NSX0lOU1RBTkNFCQkweDE4CisjZGVmaW5lIENTUl9ESVJFQ1RPUllfSUQJMHgyMAorCisjZGVmaW5lIFNCUDJfQ09NTUFORF9TRVRfU1BFQ0lGSUVSCTB4MzgKKyNkZWZpbmUgU0JQMl9DT01NQU5EX1NFVAkJMHgzOQorI2RlZmluZSBTQlAyX0NPTU1BTkRfU0VUX1JFVklTSU9OCTB4M2IKKyNkZWZpbmUgU0JQMl9GSVJNV0FSRV9SRVZJU0lPTgkJMHgzYworCitzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yIHsKKwl1MzIgKnA7CisJdTMyICplbmQ7Cit9OworCit2b2lkIGZ3X2Nzcl9pdGVyYXRvcl9pbml0KHN0cnVjdCBmd19jc3JfaXRlcmF0b3IgKmNpLCB1MzIgKnApOworaW50IGZ3X2Nzcl9pdGVyYXRvcl9uZXh0KHN0cnVjdCBmd19jc3JfaXRlcmF0b3IgKmNpLAorCQkJIGludCAqa2V5LCBpbnQgKnZhbHVlKTsKKworI2RlZmluZSBGV19NQVRDSF9WRU5ET1IJCTB4MDAwMQorI2RlZmluZSBGV19NQVRDSF9NT0RFTAkJMHgwMDAyCisjZGVmaW5lIEZXX01BVENIX1NQRUNJRklFUl9JRAkweDAwMDQKKyNkZWZpbmUgRldfTUFUQ0hfVkVSU0lPTgkweDAwMDgKKworc3RydWN0IGZ3X2RldmljZV9pZCB7CisJdTMyIG1hdGNoX2ZsYWdzOworCXUzMiB2ZW5kb3I7CisJdTMyIG1vZGVsOworCXUzMiBzcGVjaWZpZXJfaWQ7CisJdTMyIHZlcnNpb247CisJdm9pZCAqZHJpdmVyX2RhdGE7Cit9OworCitzdHJ1Y3QgZndfZHJpdmVyIHsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7CisJLyogQ2FsbGVkIHdoZW4gdGhlIHBhcmVudCBkZXZpY2Ugc2l0cyB0aHJvdWdoIGEgYnVzIHJlc2V0LiAqLworCXZvaWQgKCp1cGRhdGUpIChzdHJ1Y3QgZndfdW5pdCAqdW5pdCk7CisJY29uc3Qgc3RydWN0IGZ3X2RldmljZV9pZCAqaWRfdGFibGU7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmd19kcml2ZXIgKgorZndfZHJpdmVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkcnYsIHN0cnVjdCBmd19kcml2ZXIsIGRyaXZlcik7Cit9CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ3X2RldmljZV9vcHM7CisKKyNlbmRpZiAvKiBfX2Z3X2RldmljZV9oICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWlzby5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1pc28uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjY0MGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1pc28uYwpAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIElzb2Nocm9ub3VzIElPIGZ1bmN0aW9uYWxpdHkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgS3Jpc3RpYW4gSG9lZ3NiZXJnIDxrcmhAYml0cGxhbmV0Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJmdy10b3BvbG9neS5oIgorI2luY2x1ZGUgImZ3LWRldmljZS5oIgorCitpbnQKK2Z3X2lzb19idWZmZXJfaW5pdChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJICAgaW50IHBhZ2VfY291bnQsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlpbnQgaSwgaiwgcmV0dmFsID0gLUVOT01FTTsKKwlkbWFfYWRkcl90IGFkZHJlc3M7CisKKwlidWZmZXItPnBhZ2VfY291bnQgPSBwYWdlX2NvdW50OworCWJ1ZmZlci0+ZGlyZWN0aW9uID0gZGlyZWN0aW9uOworCisJYnVmZmVyLT5wYWdlcyA9IGttYWxsb2MocGFnZV9jb3VudCAqIHNpemVvZihidWZmZXItPnBhZ2VzWzBdKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoYnVmZmVyLT5wYWdlcyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCWZvciAoaSA9IDA7IGkgPCBidWZmZXItPnBhZ2VfY291bnQ7IGkrKykgeworCQlidWZmZXItPnBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyk7CisJCWlmIChidWZmZXItPnBhZ2VzW2ldID09IE5VTEwpCisJCQlnb3RvIG91dF9wYWdlczsKKworCQlhZGRyZXNzID0gZG1hX21hcF9wYWdlKGNhcmQtPmRldmljZSwgYnVmZmVyLT5wYWdlc1tpXSwKKwkJCQkgICAgICAgMCwgUEFHRV9TSVpFLCBkaXJlY3Rpb24pOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoYWRkcmVzcykpIHsKKwkJCV9fZnJlZV9wYWdlKGJ1ZmZlci0+cGFnZXNbaV0pOworCQkJZ290byBvdXRfcGFnZXM7CisJCX0KKwkJc2V0X3BhZ2VfcHJpdmF0ZShidWZmZXItPnBhZ2VzW2ldLCBhZGRyZXNzKTsKKwl9CisKKwlyZXR1cm4gMDsKKworIG91dF9wYWdlczoKKwlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisJCWFkZHJlc3MgPSBwYWdlX3ByaXZhdGUoYnVmZmVyLT5wYWdlc1tqXSk7CisJCWRtYV91bm1hcF9wYWdlKGNhcmQtPmRldmljZSwgYWRkcmVzcywKKwkJCSAgICAgICBQQUdFX1NJWkUsIERNQV9UT19ERVZJQ0UpOworCQlfX2ZyZWVfcGFnZShidWZmZXItPnBhZ2VzW2pdKTsKKwl9CisJa2ZyZWUoYnVmZmVyLT5wYWdlcyk7Cisgb3V0OgorCWJ1ZmZlci0+cGFnZXMgPSBOVUxMOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBmd19pc29fYnVmZmVyX21hcChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwl1bnNpZ25lZCBsb25nIHVhZGRyOworCWludCBpLCByZXR2YWw7CisKKwl1YWRkciA9IHZtYS0+dm1fc3RhcnQ7CisJZm9yIChpID0gMDsgaSA8IGJ1ZmZlci0+cGFnZV9jb3VudDsgaSsrKSB7CisJCXJldHZhbCA9IHZtX2luc2VydF9wYWdlKHZtYSwgdWFkZHIsIGJ1ZmZlci0+cGFnZXNbaV0pOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJdWFkZHIgKz0gUEFHRV9TSVpFOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGZ3X2lzb19idWZmZXJfZGVzdHJveShzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAorCQkJICAgc3RydWN0IGZ3X2NhcmQgKmNhcmQpCit7CisJaW50IGk7CisJZG1hX2FkZHJfdCBhZGRyZXNzOworCisJZm9yIChpID0gMDsgaSA8IGJ1ZmZlci0+cGFnZV9jb3VudDsgaSsrKSB7CisJCWFkZHJlc3MgPSBwYWdlX3ByaXZhdGUoYnVmZmVyLT5wYWdlc1tpXSk7CisJCWRtYV91bm1hcF9wYWdlKGNhcmQtPmRldmljZSwgYWRkcmVzcywKKwkJCSAgICAgICBQQUdFX1NJWkUsIERNQV9UT19ERVZJQ0UpOworCQlfX2ZyZWVfcGFnZShidWZmZXItPnBhZ2VzW2ldKTsKKwl9CisKKwlrZnJlZShidWZmZXItPnBhZ2VzKTsKKwlidWZmZXItPnBhZ2VzID0gTlVMTDsKK30KKworc3RydWN0IGZ3X2lzb19jb250ZXh0ICoKK2Z3X2lzb19jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHR5cGUsCisJCSAgICAgIGludCBjaGFubmVsLCBpbnQgc3BlZWQsIHNpemVfdCBoZWFkZXJfc2l6ZSwKKwkJICAgICAgZndfaXNvX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpCit7CisJc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHg7CisKKwljdHggPSBjYXJkLT5kcml2ZXItPmFsbG9jYXRlX2lzb19jb250ZXh0KGNhcmQsIHR5cGUsIGhlYWRlcl9zaXplKTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBjdHg7CisKKwljdHgtPmNhcmQgPSBjYXJkOworCWN0eC0+dHlwZSA9IHR5cGU7CisJY3R4LT5jaGFubmVsID0gY2hhbm5lbDsKKwljdHgtPnNwZWVkID0gc3BlZWQ7CisJY3R4LT5oZWFkZXJfc2l6ZSA9IGhlYWRlcl9zaXplOworCWN0eC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwljdHgtPmNhbGxiYWNrX2RhdGEgPSBjYWxsYmFja19kYXRhOworCisJcmV0dXJuIGN0eDsKK30KK0VYUE9SVF9TWU1CT0woZndfaXNvX2NvbnRleHRfY3JlYXRlKTsKKwordm9pZCBmd19pc29fY29udGV4dF9kZXN0cm95KHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY3R4LT5jYXJkOworCisJY2FyZC0+ZHJpdmVyLT5mcmVlX2lzb19jb250ZXh0KGN0eCk7Cit9CitFWFBPUlRfU1lNQk9MKGZ3X2lzb19jb250ZXh0X2Rlc3Ryb3kpOworCitpbnQKK2Z3X2lzb19jb250ZXh0X3N0YXJ0KHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LCBpbnQgY3ljbGUsIGludCBzeW5jLCBpbnQgdGFncykKK3sKKwlyZXR1cm4gY3R4LT5jYXJkLT5kcml2ZXItPnN0YXJ0X2lzbyhjdHgsIGN5Y2xlLCBzeW5jLCB0YWdzKTsKK30KK0VYUE9SVF9TWU1CT0woZndfaXNvX2NvbnRleHRfc3RhcnQpOworCitpbnQKK2Z3X2lzb19jb250ZXh0X3F1ZXVlKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAorCQkgICAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCSAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJICAgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCit7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBjdHgtPmNhcmQ7CisKKwlyZXR1cm4gY2FyZC0+ZHJpdmVyLT5xdWV1ZV9pc28oY3R4LCBwYWNrZXQsIGJ1ZmZlciwgcGF5bG9hZCk7Cit9CitFWFBPUlRfU1lNQk9MKGZ3X2lzb19jb250ZXh0X3F1ZXVlKTsKKworaW50Citmd19pc29fY29udGV4dF9zdG9wKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KQoreworCXJldHVybiBjdHgtPmNhcmQtPmRyaXZlci0+c3RvcF9pc28oY3R4KTsKK30KK0VYUE9SVF9TWU1CT0woZndfaXNvX2NvbnRleHRfc3RvcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LW9oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMDhiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LW9oY2kuYwpAQCAtMCwwICsxLDIwMDQgQEAKKy8qCisgKiBEcml2ZXIgZm9yIE9IQ0kgMTM5NCBjb250cm9sbGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IEtyaXN0aWFuIEhvZWdzYmVyZyA8a3JoQGJpdHBsYW5ldC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJmdy1vaGNpLmgiCisKKyNkZWZpbmUgREVTQ1JJUFRPUl9PVVRQVVRfTU9SRQkJMAorI2RlZmluZSBERVNDUklQVE9SX09VVFBVVF9MQVNUCQkoMSA8PCAxMikKKyNkZWZpbmUgREVTQ1JJUFRPUl9JTlBVVF9NT1JFCQkoMiA8PCAxMikKKyNkZWZpbmUgREVTQ1JJUFRPUl9JTlBVVF9MQVNUCQkoMyA8PCAxMikKKyNkZWZpbmUgREVTQ1JJUFRPUl9TVEFUVVMJCSgxIDw8IDExKQorI2RlZmluZSBERVNDUklQVE9SX0tFWV9JTU1FRElBVEUJKDIgPDwgOCkKKyNkZWZpbmUgREVTQ1JJUFRPUl9QSU5HCQkJKDEgPDwgNykKKyNkZWZpbmUgREVTQ1JJUFRPUl9ZWQkJCSgxIDw8IDYpCisjZGVmaW5lIERFU0NSSVBUT1JfTk9fSVJRCQkoMCA8PCA0KQorI2RlZmluZSBERVNDUklQVE9SX0lSUV9FUlJPUgkJKDEgPDwgNCkKKyNkZWZpbmUgREVTQ1JJUFRPUl9JUlFfQUxXQVlTCQkoMyA8PCA0KQorI2RlZmluZSBERVNDUklQVE9SX0JSQU5DSF9BTFdBWVMJKDMgPDwgMikKKyNkZWZpbmUgREVTQ1JJUFRPUl9XQUlUCQkJKDMgPDwgMCkKKworc3RydWN0IGRlc2NyaXB0b3IgeworCV9fbGUxNiByZXFfY291bnQ7CisJX19sZTE2IGNvbnRyb2w7CisJX19sZTMyIGRhdGFfYWRkcmVzczsKKwlfX2xlMzIgYnJhbmNoX2FkZHJlc3M7CisJX19sZTE2IHJlc19jb3VudDsKKwlfX2xlMTYgdHJhbnNmZXJfc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpOworCitzdHJ1Y3QgZGJfZGVzY3JpcHRvciB7CisJX19sZTE2IGZpcnN0X3NpemU7CisJX19sZTE2IGNvbnRyb2w7CisJX19sZTE2IHNlY29uZF9yZXFfY291bnQ7CisJX19sZTE2IGZpcnN0X3JlcV9jb3VudDsKKwlfX2xlMzIgYnJhbmNoX2FkZHJlc3M7CisJX19sZTE2IHNlY29uZF9yZXNfY291bnQ7CisJX19sZTE2IGZpcnN0X3Jlc19jb3VudDsKKwlfX2xlMzIgcmVzZXJ2ZWQwOworCV9fbGUzMiBmaXJzdF9idWZmZXI7CisJX19sZTMyIHNlY29uZF9idWZmZXI7CisJX19sZTMyIHJlc2VydmVkMTsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKTsKKworI2RlZmluZSBDT05UUk9MX1NFVChyZWdzKQkocmVncykKKyNkZWZpbmUgQ09OVFJPTF9DTEVBUihyZWdzKQkoKHJlZ3MpICsgNCkKKyNkZWZpbmUgQ09NTUFORF9QVFIocmVncykJKChyZWdzKSArIDEyKQorI2RlZmluZSBDT05URVhUX01BVENIKHJlZ3MpCSgocmVncykgKyAxNikKKworc3RydWN0IGFyX2J1ZmZlciB7CisJc3RydWN0IGRlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKwlzdHJ1Y3QgYXJfYnVmZmVyICpuZXh0OworCV9fbGUzMiBkYXRhWzBdOworfTsKKworc3RydWN0IGFyX2NvbnRleHQgeworCXN0cnVjdCBmd19vaGNpICpvaGNpOworCXN0cnVjdCBhcl9idWZmZXIgKmN1cnJlbnRfYnVmZmVyOworCXN0cnVjdCBhcl9idWZmZXIgKmxhc3RfYnVmZmVyOworCXZvaWQgKnBvaW50ZXI7CisJdTMyIHJlZ3M7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7Cit9OworCitzdHJ1Y3QgY29udGV4dDsKKwordHlwZWRlZiBpbnQgKCpkZXNjcmlwdG9yX2NhbGxiYWNrX3QpKHN0cnVjdCBjb250ZXh0ICpjdHgsCisJCQkJICAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqZCwKKwkJCQkgICAgIHN0cnVjdCBkZXNjcmlwdG9yICpsYXN0KTsKK3N0cnVjdCBjb250ZXh0IHsKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaTsKKwl1MzIgcmVnczsKKworCXN0cnVjdCBkZXNjcmlwdG9yICpidWZmZXI7CisJZG1hX2FkZHJfdCBidWZmZXJfYnVzOworCXNpemVfdCBidWZmZXJfc2l6ZTsKKwlzdHJ1Y3QgZGVzY3JpcHRvciAqaGVhZF9kZXNjcmlwdG9yOworCXN0cnVjdCBkZXNjcmlwdG9yICp0YWlsX2Rlc2NyaXB0b3I7CisJc3RydWN0IGRlc2NyaXB0b3IgKnRhaWxfZGVzY3JpcHRvcl9sYXN0OworCXN0cnVjdCBkZXNjcmlwdG9yICpwcmV2X2Rlc2NyaXB0b3I7CisKKwlkZXNjcmlwdG9yX2NhbGxiYWNrX3QgY2FsbGJhY2s7CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKK307CisKKyNkZWZpbmUgSVRfSEVBREVSX1NZKHYpICAgICAgICAgICgodikgPDwgIDApCisjZGVmaW5lIElUX0hFQURFUl9UQ09ERSh2KSAgICAgICAoKHYpIDw8ICA0KQorI2RlZmluZSBJVF9IRUFERVJfQ0hBTk5FTCh2KSAgICAgKCh2KSA8PCAgOCkKKyNkZWZpbmUgSVRfSEVBREVSX1RBRyh2KSAgICAgICAgICgodikgPDwgMTQpCisjZGVmaW5lIElUX0hFQURFUl9TUEVFRCh2KSAgICAgICAoKHYpIDw8IDE2KQorI2RlZmluZSBJVF9IRUFERVJfREFUQV9MRU5HVEgodikgKCh2KSA8PCAxNikKKworc3RydWN0IGlzb19jb250ZXh0IHsKKwlzdHJ1Y3QgZndfaXNvX2NvbnRleHQgYmFzZTsKKwlzdHJ1Y3QgY29udGV4dCBjb250ZXh0OworCXZvaWQgKmhlYWRlcjsKKwlzaXplX3QgaGVhZGVyX2xlbmd0aDsKK307CisKKyNkZWZpbmUgQ09ORklHX1JPTV9TSVpFIDEwMjQKKworc3RydWN0IGZ3X29oY2kgeworCXN0cnVjdCBmd19jYXJkIGNhcmQ7CisKKwl1MzIgdmVyc2lvbjsKKwlfX2lvbWVtIGNoYXIgKnJlZ2lzdGVyczsKKwlkbWFfYWRkcl90IHNlbGZfaWRfYnVzOworCV9fbGUzMiAqc2VsZl9pZF9jcHU7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGJ1c19yZXNldF90YXNrbGV0OworCWludCBub2RlX2lkOworCWludCBnZW5lcmF0aW9uOworCWludCByZXF1ZXN0X2dlbmVyYXRpb247CisJdTMyIGJ1c19zZWNvbmRzOworCisJLyoKKwkgKiBTcGlubG9jayBmb3IgYWNjZXNzaW5nIGZ3X29oY2kgZGF0YS4gIE5ldmVyIGNhbGwgb3V0IG9mCisJICogdGhpcyBkcml2ZXIgd2l0aCB0aGlzIGxvY2sgaGVsZC4KKwkgKi8KKwlzcGlubG9ja190IGxvY2s7CisJdTMyIHNlbGZfaWRfYnVmZmVyWzUxMl07CisKKwkvKiBDb25maWcgcm9tIGJ1ZmZlcnMgKi8KKwlfX2JlMzIgKmNvbmZpZ19yb207CisJZG1hX2FkZHJfdCBjb25maWdfcm9tX2J1czsKKwlfX2JlMzIgKm5leHRfY29uZmlnX3JvbTsKKwlkbWFfYWRkcl90IG5leHRfY29uZmlnX3JvbV9idXM7CisJdTMyIG5leHRfaGVhZGVyOworCisJc3RydWN0IGFyX2NvbnRleHQgYXJfcmVxdWVzdF9jdHg7CisJc3RydWN0IGFyX2NvbnRleHQgYXJfcmVzcG9uc2VfY3R4OworCXN0cnVjdCBjb250ZXh0IGF0X3JlcXVlc3RfY3R4OworCXN0cnVjdCBjb250ZXh0IGF0X3Jlc3BvbnNlX2N0eDsKKworCXUzMiBpdF9jb250ZXh0X21hc2s7CisJc3RydWN0IGlzb19jb250ZXh0ICppdF9jb250ZXh0X2xpc3Q7CisJdTMyIGlyX2NvbnRleHRfbWFzazsKKwlzdHJ1Y3QgaXNvX2NvbnRleHQgKmlyX2NvbnRleHRfbGlzdDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZ3X29oY2kgKmZ3X29oY2koc3RydWN0IGZ3X2NhcmQgKmNhcmQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjYXJkLCBzdHJ1Y3QgZndfb2hjaSwgY2FyZCk7Cit9CisKKyNkZWZpbmUgSVRfQ09OVEVYVF9DWUNMRV9NQVRDSF9FTkFCTEUJMHg4MDAwMDAwMAorI2RlZmluZSBJUl9DT05URVhUX0JVRkZFUl9GSUxMCQkweDgwMDAwMDAwCisjZGVmaW5lIElSX0NPTlRFWFRfSVNPQ0hfSEVBREVSCQkweDQwMDAwMDAwCisjZGVmaW5lIElSX0NPTlRFWFRfQ1lDTEVfTUFUQ0hfRU5BQkxFCTB4MjAwMDAwMDAKKyNkZWZpbmUgSVJfQ09OVEVYVF9NVUxUSV9DSEFOTkVMX01PREUJMHgxMDAwMDAwMAorI2RlZmluZSBJUl9DT05URVhUX0RVQUxfQlVGRkVSX01PREUJMHgwODAwMDAwMAorCisjZGVmaW5lIENPTlRFWFRfUlVOCTB4ODAwMAorI2RlZmluZSBDT05URVhUX1dBS0UJMHgxMDAwCisjZGVmaW5lIENPTlRFWFRfREVBRAkweDA4MDAKKyNkZWZpbmUgQ09OVEVYVF9BQ1RJVkUJMHgwNDAwCisKKyNkZWZpbmUgT0hDSTEzOTRfTUFYX0FUX1JFUV9SRVRSSUVTCTB4MgorI2RlZmluZSBPSENJMTM5NF9NQVhfQVRfUkVTUF9SRVRSSUVTCTB4MgorI2RlZmluZSBPSENJMTM5NF9NQVhfUEhZU19SRVNQX1JFVFJJRVMJMHg4CisKKyNkZWZpbmUgRldfT0hDSV9NQUpPUgkJCTI0MAorI2RlZmluZSBPSENJMTM5NF9SRUdJU1RFUl9TSVpFCQkweDgwMAorI2RlZmluZSBPSENJX0xPT1BfQ09VTlQJCQk1MDAKKyNkZWZpbmUgT0hDSTEzOTRfUENJX0hDSV9Db250cm9sCTB4NDAKKyNkZWZpbmUgU0VMRl9JRF9CVUZfU0laRQkJMHg4MDAKKyNkZWZpbmUgT0hDSV9UQ09ERV9QSFlfUEFDS0VUCQkweDBlCisjZGVmaW5lIE9IQ0lfVkVSU0lPTl8xXzEJCTB4MDEwMDEwCisjZGVmaW5lIElTT19CVUZGRVJfU0laRQkJCSg2NCAqIDEwMjQpCisjZGVmaW5lIEFUX0JVRkZFUl9TSVpFCQkJNDA5NgorCitzdGF0aWMgY2hhciBvaGNpX2RyaXZlcl9uYW1lW10gPSBLQlVJTERfTU9ETkFNRTsKKworc3RhdGljIGlubGluZSB2b2lkIHJlZ193cml0ZShjb25zdCBzdHJ1Y3QgZndfb2hjaSAqb2hjaSwgaW50IG9mZnNldCwgdTMyIGRhdGEpCit7CisJd3JpdGVsKGRhdGEsIG9oY2ktPnJlZ2lzdGVycyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHJlZ19yZWFkKGNvbnN0IHN0cnVjdCBmd19vaGNpICpvaGNpLCBpbnQgb2Zmc2V0KQoreworCXJldHVybiByZWFkbChvaGNpLT5yZWdpc3RlcnMgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfd3JpdGVzKGNvbnN0IHN0cnVjdCBmd19vaGNpICpvaGNpKQoreworCS8qIERvIGEgZHVtbXkgcmVhZCB0byBmbHVzaCB3cml0ZXMuICovCisJcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfVmVyc2lvbik7Cit9CisKK3N0YXRpYyBpbnQKK29oY2lfdXBkYXRlX3BoeV9yZWcoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBhZGRyLAorCQkgICAgaW50IGNsZWFyX2JpdHMsIGludCBzZXRfYml0cykKK3sKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koY2FyZCk7CisJdTMyIHZhbCwgb2xkOworCisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X1BoeUNvbnRyb2wsIE9IQ0kxMzk0X1BoeUNvbnRyb2xfUmVhZChhZGRyKSk7CisJbXNsZWVwKDIpOworCXZhbCA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X1BoeUNvbnRyb2wpOworCWlmICgodmFsICYgT0hDSTEzOTRfUGh5Q29udHJvbF9SZWFkRG9uZSkgPT0gMCkgeworCQlmd19lcnJvcigiZmFpbGVkIHRvIHNldCBwaHkgcmVnIGJpdHMuXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlvbGQgPSBPSENJMTM5NF9QaHlDb250cm9sX1JlYWREYXRhKHZhbCk7CisJb2xkID0gKG9sZCAmIH5jbGVhcl9iaXRzKSB8IHNldF9iaXRzOworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9QaHlDb250cm9sLAorCQkgIE9IQ0kxMzk0X1BoeUNvbnRyb2xfV3JpdGUoYWRkciwgb2xkKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcl9jb250ZXh0X2FkZF9wYWdlKHN0cnVjdCBhcl9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY3R4LT5vaGNpLT5jYXJkLmRldmljZTsKKwlzdHJ1Y3QgYXJfYnVmZmVyICphYjsKKwlkbWFfYWRkcl90IGFiX2J1czsKKwlzaXplX3Qgb2Zmc2V0OworCisJYWIgPSAoc3RydWN0IGFyX2J1ZmZlciAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0FUT01JQyk7CisJaWYgKGFiID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJYWJfYnVzID0gZG1hX21hcF9zaW5nbGUoZGV2LCBhYiwgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGFiX2J1cykpIHsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBhYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldCgmYWItPmRlc2NyaXB0b3IsIDAsIHNpemVvZihhYi0+ZGVzY3JpcHRvcikpOworCWFiLT5kZXNjcmlwdG9yLmNvbnRyb2wgICAgICAgID0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9JTlBVVF9NT1JFIHwKKwkJCQkJCSAgICBERVNDUklQVE9SX1NUQVRVUyB8CisJCQkJCQkgICAgREVTQ1JJUFRPUl9CUkFOQ0hfQUxXQVlTKTsKKwlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgYXJfYnVmZmVyLCBkYXRhKTsKKwlhYi0+ZGVzY3JpcHRvci5yZXFfY291bnQgICAgICA9IGNwdV90b19sZTE2KFBBR0VfU0laRSAtIG9mZnNldCk7CisJYWItPmRlc2NyaXB0b3IuZGF0YV9hZGRyZXNzICAgPSBjcHVfdG9fbGUzMihhYl9idXMgKyBvZmZzZXQpOworCWFiLT5kZXNjcmlwdG9yLnJlc19jb3VudCAgICAgID0gY3B1X3RvX2xlMTYoUEFHRV9TSVpFIC0gb2Zmc2V0KTsKKwlhYi0+ZGVzY3JpcHRvci5icmFuY2hfYWRkcmVzcyA9IDA7CisKKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGFiX2J1cywgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CisKKwljdHgtPmxhc3RfYnVmZmVyLT5kZXNjcmlwdG9yLmJyYW5jaF9hZGRyZXNzID0gY3B1X3RvX2xlMzIoYWJfYnVzIHwgMSk7CisJY3R4LT5sYXN0X2J1ZmZlci0+bmV4dCA9IGFiOworCWN0eC0+bGFzdF9idWZmZXIgPSBhYjsKKworCXJlZ193cml0ZShjdHgtPm9oY2ksIENPTlRST0xfU0VUKGN0eC0+cmVncyksIENPTlRFWFRfV0FLRSk7CisJZmx1c2hfd3JpdGVzKGN0eC0+b2hjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fbGUzMiAqaGFuZGxlX2FyX3BhY2tldChzdHJ1Y3QgYXJfY29udGV4dCAqY3R4LCBfX2xlMzIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGN0eC0+b2hjaTsKKwlzdHJ1Y3QgZndfcGFja2V0IHA7CisJdTMyIHN0YXR1cywgbGVuZ3RoLCB0Y29kZTsKKworCXAuaGVhZGVyWzBdID0gbGUzMl90b19jcHUoYnVmZmVyWzBdKTsKKwlwLmhlYWRlclsxXSA9IGxlMzJfdG9fY3B1KGJ1ZmZlclsxXSk7CisJcC5oZWFkZXJbMl0gPSBsZTMyX3RvX2NwdShidWZmZXJbMl0pOworCisJdGNvZGUgPSAocC5oZWFkZXJbMF0gPj4gNCkgJiAweDBmOworCXN3aXRjaCAodGNvZGUpIHsKKwljYXNlIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVDoKKwljYXNlIFRDT0RFX1JFQURfUVVBRExFVF9SRVNQT05TRToKKwkJcC5oZWFkZXJbM10gPSAoX19mb3JjZSBfX3UzMikgYnVmZmVyWzNdOworCQlwLmhlYWRlcl9sZW5ndGggPSAxNjsKKwkJcC5wYXlsb2FkX2xlbmd0aCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBUQ09ERV9SRUFEX0JMT0NLX1JFUVVFU1QgOgorCQlwLmhlYWRlclszXSA9IGxlMzJfdG9fY3B1KGJ1ZmZlclszXSk7CisJCXAuaGVhZGVyX2xlbmd0aCA9IDE2OworCQlwLnBheWxvYWRfbGVuZ3RoID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1Q6CisJY2FzZSBUQ09ERV9SRUFEX0JMT0NLX1JFU1BPTlNFOgorCWNhc2UgVENPREVfTE9DS19SRVFVRVNUOgorCWNhc2UgVENPREVfTE9DS19SRVNQT05TRToKKwkJcC5oZWFkZXJbM10gPSBsZTMyX3RvX2NwdShidWZmZXJbM10pOworCQlwLmhlYWRlcl9sZW5ndGggPSAxNjsKKwkJcC5wYXlsb2FkX2xlbmd0aCA9IHAuaGVhZGVyWzNdID4+IDE2OworCQlicmVhazsKKworCWNhc2UgVENPREVfV1JJVEVfUkVTUE9OU0U6CisJY2FzZSBUQ09ERV9SRUFEX1FVQURMRVRfUkVRVUVTVDoKKwljYXNlIE9IQ0lfVENPREVfUEhZX1BBQ0tFVDoKKwkJcC5oZWFkZXJfbGVuZ3RoID0gMTI7CisJCXAucGF5bG9hZF9sZW5ndGggPSAwOworCQlicmVhazsKKwl9CisKKwlwLnBheWxvYWQgPSAodm9pZCAqKSBidWZmZXIgKyBwLmhlYWRlcl9sZW5ndGg7CisKKwkvKiBGSVhNRTogV2hhdCB0byBkbyBhYm91dCBldnRfKiBlcnJvcnM/ICovCisJbGVuZ3RoID0gKHAuaGVhZGVyX2xlbmd0aCArIHAucGF5bG9hZF9sZW5ndGggKyAzKSAvIDQ7CisJc3RhdHVzID0gbGUzMl90b19jcHUoYnVmZmVyW2xlbmd0aF0pOworCisJcC5hY2sgICAgICAgID0gKChzdGF0dXMgPj4gMTYpICYgMHgxZikgLSAxNjsKKwlwLnNwZWVkICAgICAgPSAoc3RhdHVzID4+IDIxKSAmIDB4NzsKKwlwLnRpbWVzdGFtcCAgPSBzdGF0dXMgJiAweGZmZmY7CisJcC5nZW5lcmF0aW9uID0gb2hjaS0+cmVxdWVzdF9nZW5lcmF0aW9uOworCisJLyoKKwkgKiBUaGUgT0hDSSBidXMgcmVzZXQgaGFuZGxlciBzeW50aGVzaXplcyBhIHBoeSBwYWNrZXQgd2l0aAorCSAqIHRoZSBuZXcgZ2VuZXJhdGlvbiBudW1iZXIgd2hlbiBhIGJ1cyByZXNldCBoYXBwZW5zIChzZWUKKwkgKiBzZWN0aW9uIDguNC4yLjMpLiAgVGhpcyBoZWxwcyB1cyBkZXRlcm1pbmUgd2hlbiBhIHJlcXVlc3QKKwkgKiB3YXMgcmVjZWl2ZWQgYW5kIG1ha2Ugc3VyZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBpbiB0aGUgc2FtZQorCSAqIGdlbmVyYXRpb24uICBXZSBvbmx5IG5lZWQgdGhpcyBmb3IgcmVxdWVzdHM7IGZvciByZXNwb25zZXMKKwkgKiB3ZSB1c2UgdGhlIHVuaXF1ZSB0bGFiZWwgZm9yIGZpbmRpbmcgdGhlIG1hdGNoaW5nCisJICogcmVxdWVzdC4KKwkgKi8KKworCWlmIChwLmFjayArIDE2ID09IDB4MDkpCisJCW9oY2ktPnJlcXVlc3RfZ2VuZXJhdGlvbiA9IChidWZmZXJbMl0gPj4gMTYpICYgMHhmZjsKKwllbHNlIGlmIChjdHggPT0gJm9oY2ktPmFyX3JlcXVlc3RfY3R4KQorCQlmd19jb3JlX2hhbmRsZV9yZXF1ZXN0KCZvaGNpLT5jYXJkLCAmcCk7CisJZWxzZQorCQlmd19jb3JlX2hhbmRsZV9yZXNwb25zZSgmb2hjaS0+Y2FyZCwgJnApOworCisJcmV0dXJuIGJ1ZmZlciArIGxlbmd0aCArIDE7Cit9CisKK3N0YXRpYyB2b2lkIGFyX2NvbnRleHRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGFyX2NvbnRleHQgKmN0eCA9IChzdHJ1Y3QgYXJfY29udGV4dCAqKWRhdGE7CisJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBjdHgtPm9oY2k7CisJc3RydWN0IGFyX2J1ZmZlciAqYWI7CisJc3RydWN0IGRlc2NyaXB0b3IgKmQ7CisJdm9pZCAqYnVmZmVyLCAqZW5kOworCisJYWIgPSBjdHgtPmN1cnJlbnRfYnVmZmVyOworCWQgPSAmYWItPmRlc2NyaXB0b3I7CisKKwlpZiAoZC0+cmVzX2NvdW50ID09IDApIHsKKwkJc2l6ZV90IHNpemUsIHJlc3QsIG9mZnNldDsKKworCQkvKgorCQkgKiBUaGlzIGRlc2NyaXB0b3IgaXMgZmluaXNoZWQgYW5kIHdlIG1heSBoYXZlIGEKKwkJICogcGFja2V0IHNwbGl0IGFjcm9zcyB0aGlzIGFuZCB0aGUgbmV4dCBidWZmZXIuIFdlCisJCSAqIHJldXNlIHRoZSBwYWdlIGZvciByZWFzc2VtYmxpbmcgdGhlIHNwbGl0IHBhY2tldC4KKwkJICovCisKKwkJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGFyX2J1ZmZlciwgZGF0YSk7CisJCWRtYV91bm1hcF9zaW5nbGUob2hjaS0+Y2FyZC5kZXZpY2UsCisJCQkJIGFiLT5kZXNjcmlwdG9yLmRhdGFfYWRkcmVzcyAtIG9mZnNldCwKKwkJCQkgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CisKKwkJYnVmZmVyID0gYWI7CisJCWFiID0gYWItPm5leHQ7CisJCWQgPSAmYWItPmRlc2NyaXB0b3I7CisJCXNpemUgPSBidWZmZXIgKyBQQUdFX1NJWkUgLSBjdHgtPnBvaW50ZXI7CisJCXJlc3QgPSBsZTE2X3RvX2NwdShkLT5yZXFfY291bnQpIC0gbGUxNl90b19jcHUoZC0+cmVzX2NvdW50KTsKKwkJbWVtbW92ZShidWZmZXIsIGN0eC0+cG9pbnRlciwgc2l6ZSk7CisJCW1lbWNweShidWZmZXIgKyBzaXplLCBhYi0+ZGF0YSwgcmVzdCk7CisJCWN0eC0+Y3VycmVudF9idWZmZXIgPSBhYjsKKwkJY3R4LT5wb2ludGVyID0gKHZvaWQgKikgYWItPmRhdGEgKyByZXN0OworCQllbmQgPSBidWZmZXIgKyBzaXplICsgcmVzdDsKKworCQl3aGlsZSAoYnVmZmVyIDwgZW5kKQorCQkJYnVmZmVyID0gaGFuZGxlX2FyX3BhY2tldChjdHgsIGJ1ZmZlcik7CisKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlcik7CisJCWFyX2NvbnRleHRfYWRkX3BhZ2UoY3R4KTsKKwl9IGVsc2UgeworCQlidWZmZXIgPSBjdHgtPnBvaW50ZXI7CisJCWN0eC0+cG9pbnRlciA9IGVuZCA9CisJCQkodm9pZCAqKSBhYiArIFBBR0VfU0laRSAtIGxlMTZfdG9fY3B1KGQtPnJlc19jb3VudCk7CisKKwkJd2hpbGUgKGJ1ZmZlciA8IGVuZCkKKwkJCWJ1ZmZlciA9IGhhbmRsZV9hcl9wYWNrZXQoY3R4LCBidWZmZXIpOworCX0KK30KKworc3RhdGljIGludAorYXJfY29udGV4dF9pbml0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLCB1MzIgcmVncykKK3sKKwlzdHJ1Y3QgYXJfYnVmZmVyIGFiOworCisJY3R4LT5yZWdzICAgICAgICA9IHJlZ3M7CisJY3R4LT5vaGNpICAgICAgICA9IG9oY2k7CisJY3R4LT5sYXN0X2J1ZmZlciA9ICZhYjsKKwl0YXNrbGV0X2luaXQoJmN0eC0+dGFza2xldCwgYXJfY29udGV4dF90YXNrbGV0LCAodW5zaWduZWQgbG9uZyljdHgpOworCisJYXJfY29udGV4dF9hZGRfcGFnZShjdHgpOworCWFyX2NvbnRleHRfYWRkX3BhZ2UoY3R4KTsKKwljdHgtPmN1cnJlbnRfYnVmZmVyID0gYWIubmV4dDsKKwljdHgtPnBvaW50ZXIgPSBjdHgtPmN1cnJlbnRfYnVmZmVyLT5kYXRhOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFyX2NvbnRleHRfcnVuKHN0cnVjdCBhcl9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IGFyX2J1ZmZlciAqYWIgPSBjdHgtPmN1cnJlbnRfYnVmZmVyOworCWRtYV9hZGRyX3QgYWJfYnVzOworCXNpemVfdCBvZmZzZXQ7CisKKwlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgYXJfYnVmZmVyLCBkYXRhKTsKKwlhYl9idXMgPSBhYi0+ZGVzY3JpcHRvci5kYXRhX2FkZHJlc3MgLSBvZmZzZXQ7CisKKwlyZWdfd3JpdGUoY3R4LT5vaGNpLCBDT01NQU5EX1BUUihjdHgtPnJlZ3MpLCBhYl9idXMgfCAxKTsKKwlyZWdfd3JpdGUoY3R4LT5vaGNpLCBDT05UUk9MX1NFVChjdHgtPnJlZ3MpLCBDT05URVhUX1JVTik7CisJZmx1c2hfd3JpdGVzKGN0eC0+b2hjaSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnRleHRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGNvbnRleHQgKmN0eCA9IChzdHJ1Y3QgY29udGV4dCAqKSBkYXRhOworCXN0cnVjdCBmd19vaGNpICpvaGNpID0gY3R4LT5vaGNpOworCXN0cnVjdCBkZXNjcmlwdG9yICpkLCAqbGFzdDsKKwl1MzIgYWRkcmVzczsKKwlpbnQgejsKKworCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KG9oY2ktPmNhcmQuZGV2aWNlLCBjdHgtPmJ1ZmZlcl9idXMsCisJCQkJY3R4LT5idWZmZXJfc2l6ZSwgRE1BX1RPX0RFVklDRSk7CisKKwlkICAgID0gY3R4LT50YWlsX2Rlc2NyaXB0b3I7CisJbGFzdCA9IGN0eC0+dGFpbF9kZXNjcmlwdG9yX2xhc3Q7CisKKwl3aGlsZSAobGFzdC0+YnJhbmNoX2FkZHJlc3MgIT0gMCkgeworCQlhZGRyZXNzID0gbGUzMl90b19jcHUobGFzdC0+YnJhbmNoX2FkZHJlc3MpOworCQl6ID0gYWRkcmVzcyAmIDB4ZjsKKwkJZCA9IGN0eC0+YnVmZmVyICsgKGFkZHJlc3MgLSBjdHgtPmJ1ZmZlcl9idXMpIC8gc2l6ZW9mKCpkKTsKKwkJbGFzdCA9ICh6ID09IDIpID8gZCA6IGQgKyB6IC0gMTsKKworCQlpZiAoIWN0eC0+Y2FsbGJhY2soY3R4LCBkLCBsYXN0KSkKKwkJCWJyZWFrOworCisJCWN0eC0+dGFpbF9kZXNjcmlwdG9yICAgICAgPSBkOworCQljdHgtPnRhaWxfZGVzY3JpcHRvcl9sYXN0ID0gbGFzdDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2NvbnRleHRfaW5pdChzdHJ1Y3QgY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfb2hjaSAqb2hjaSwKKwkgICAgIHNpemVfdCBidWZmZXJfc2l6ZSwgdTMyIHJlZ3MsCisJICAgICBkZXNjcmlwdG9yX2NhbGxiYWNrX3QgY2FsbGJhY2spCit7CisJY3R4LT5vaGNpID0gb2hjaTsKKwljdHgtPnJlZ3MgPSByZWdzOworCWN0eC0+YnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZTsKKwljdHgtPmJ1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChjdHgtPmJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRhc2tsZXRfaW5pdCgmY3R4LT50YXNrbGV0LCBjb250ZXh0X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWN0eCk7CisJY3R4LT5jYWxsYmFjayA9IGNhbGxiYWNrOworCisJY3R4LT5idWZmZXJfYnVzID0KKwkJZG1hX21hcF9zaW5nbGUob2hjaS0+Y2FyZC5kZXZpY2UsIGN0eC0+YnVmZmVyLAorCQkJICAgICAgIGJ1ZmZlcl9zaXplLCBETUFfVE9fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoY3R4LT5idWZmZXJfYnVzKSkgeworCQlrZnJlZShjdHgtPmJ1ZmZlcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWN0eC0+aGVhZF9kZXNjcmlwdG9yICAgICAgPSBjdHgtPmJ1ZmZlcjsKKwljdHgtPnByZXZfZGVzY3JpcHRvciAgICAgID0gY3R4LT5idWZmZXI7CisJY3R4LT50YWlsX2Rlc2NyaXB0b3IgICAgICA9IGN0eC0+YnVmZmVyOworCWN0eC0+dGFpbF9kZXNjcmlwdG9yX2xhc3QgPSBjdHgtPmJ1ZmZlcjsKKworCS8qCisJICogV2UgcHV0IGEgZHVtbXkgZGVzY3JpcHRvciBpbiB0aGUgYnVmZmVyIHRoYXQgaGFzIGEgTlVMTAorCSAqIGJyYW5jaCBhZGRyZXNzIGFuZCBsb29rcyBsaWtlIGl0J3MgYmVlbiBzZW50LiAgVGhhdCB3YXkgd2UKKwkgKiBoYXZlIGEgZGVzY3JpcHRvciB0byBhcHBlbmQgRE1BIHByb2dyYW1zIHRvLiAgQWxzbywgdGhlCisJICogcmluZyBidWZmZXIgaW52YXJpYW50IGlzIHRoYXQgaXQgYWx3YXlzIGhhcyBhdCBsZWFzdCBvbmUKKwkgKiBlbGVtZW50IHNvIHRoYXQgaGVhZCA9PSB0YWlsIG1lYW5zIGJ1ZmZlciBmdWxsLgorCSAqLworCisJbWVtc2V0KGN0eC0+aGVhZF9kZXNjcmlwdG9yLCAwLCBzaXplb2YoKmN0eC0+aGVhZF9kZXNjcmlwdG9yKSk7CisJY3R4LT5oZWFkX2Rlc2NyaXB0b3ItPmNvbnRyb2wgPSBjcHVfdG9fbGUxNihERVNDUklQVE9SX09VVFBVVF9MQVNUKTsKKwljdHgtPmhlYWRfZGVzY3JpcHRvci0+dHJhbnNmZXJfc3RhdHVzID0gY3B1X3RvX2xlMTYoMHg4MDExKTsKKwljdHgtPmhlYWRfZGVzY3JpcHRvcisrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjb250ZXh0X3JlbGVhc2Uoc3RydWN0IGNvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9ICZjdHgtPm9oY2ktPmNhcmQ7CisKKwlkbWFfdW5tYXBfc2luZ2xlKGNhcmQtPmRldmljZSwgY3R4LT5idWZmZXJfYnVzLAorCQkJIGN0eC0+YnVmZmVyX3NpemUsIERNQV9UT19ERVZJQ0UpOworCWtmcmVlKGN0eC0+YnVmZmVyKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXNjcmlwdG9yICoKK2NvbnRleHRfZ2V0X2Rlc2NyaXB0b3JzKHN0cnVjdCBjb250ZXh0ICpjdHgsIGludCB6LCBkbWFfYWRkcl90ICpkX2J1cykKK3sKKwlzdHJ1Y3QgZGVzY3JpcHRvciAqZCwgKnRhaWwsICplbmQ7CisKKwlkID0gY3R4LT5oZWFkX2Rlc2NyaXB0b3I7CisJdGFpbCA9IGN0eC0+dGFpbF9kZXNjcmlwdG9yOworCWVuZCA9IGN0eC0+YnVmZmVyICsgY3R4LT5idWZmZXJfc2l6ZSAvIHNpemVvZigqZCk7CisKKwlpZiAoZCArIHogPD0gdGFpbCkgeworCQlnb3RvIGhhc19zcGFjZTsKKwl9IGVsc2UgaWYgKGQgPiB0YWlsICYmIGQgKyB6IDw9IGVuZCkgeworCQlnb3RvIGhhc19zcGFjZTsKKwl9IGVsc2UgaWYgKGQgPiB0YWlsICYmIGN0eC0+YnVmZmVyICsgeiA8PSB0YWlsKSB7CisJCWQgPSBjdHgtPmJ1ZmZlcjsKKwkJZ290byBoYXNfc3BhY2U7CisJfQorCisJcmV0dXJuIE5VTEw7CisKKyBoYXNfc3BhY2U6CisJbWVtc2V0KGQsIDAsIHogKiBzaXplb2YoKmQpKTsKKwkqZF9idXMgPSBjdHgtPmJ1ZmZlcl9idXMgKyAoZCAtIGN0eC0+YnVmZmVyKSAqIHNpemVvZigqZCk7CisKKwlyZXR1cm4gZDsKK30KKworc3RhdGljIHZvaWQgY29udGV4dF9ydW4oc3RydWN0IGNvbnRleHQgKmN0eCwgdTMyIGV4dHJhKQoreworCXN0cnVjdCBmd19vaGNpICpvaGNpID0gY3R4LT5vaGNpOworCisJcmVnX3dyaXRlKG9oY2ksIENPTU1BTkRfUFRSKGN0eC0+cmVncyksCisJCSAgbGUzMl90b19jcHUoY3R4LT50YWlsX2Rlc2NyaXB0b3JfbGFzdC0+YnJhbmNoX2FkZHJlc3MpKTsKKwlyZWdfd3JpdGUob2hjaSwgQ09OVFJPTF9DTEVBUihjdHgtPnJlZ3MpLCB+MCk7CisJcmVnX3dyaXRlKG9oY2ksIENPTlRST0xfU0VUKGN0eC0+cmVncyksIENPTlRFWFRfUlVOIHwgZXh0cmEpOworCWZsdXNoX3dyaXRlcyhvaGNpKTsKK30KKworc3RhdGljIHZvaWQgY29udGV4dF9hcHBlbmQoc3RydWN0IGNvbnRleHQgKmN0eCwKKwkJCSAgIHN0cnVjdCBkZXNjcmlwdG9yICpkLCBpbnQgeiwgaW50IGV4dHJhKQoreworCWRtYV9hZGRyX3QgZF9idXM7CisKKwlkX2J1cyA9IGN0eC0+YnVmZmVyX2J1cyArIChkIC0gY3R4LT5idWZmZXIpICogc2l6ZW9mKCpkKTsKKworCWN0eC0+aGVhZF9kZXNjcmlwdG9yID0gZCArIHogKyBleHRyYTsKKwljdHgtPnByZXZfZGVzY3JpcHRvci0+YnJhbmNoX2FkZHJlc3MgPSBjcHVfdG9fbGUzMihkX2J1cyB8IHopOworCWN0eC0+cHJldl9kZXNjcmlwdG9yID0geiA9PSAyID8gZCA6IGQgKyB6IC0gMTsKKworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGN0eC0+b2hjaS0+Y2FyZC5kZXZpY2UsIGN0eC0+YnVmZmVyX2J1cywKKwkJCQkgICBjdHgtPmJ1ZmZlcl9zaXplLCBETUFfVE9fREVWSUNFKTsKKworCXJlZ193cml0ZShjdHgtPm9oY2ksIENPTlRST0xfU0VUKGN0eC0+cmVncyksIENPTlRFWFRfV0FLRSk7CisJZmx1c2hfd3JpdGVzKGN0eC0+b2hjaSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnRleHRfc3RvcChzdHJ1Y3QgY29udGV4dCAqY3R4KQoreworCXUzMiByZWc7CisJaW50IGk7CisKKwlyZWdfd3JpdGUoY3R4LT5vaGNpLCBDT05UUk9MX0NMRUFSKGN0eC0+cmVncyksIENPTlRFWFRfUlVOKTsKKwlmbHVzaF93cml0ZXMoY3R4LT5vaGNpKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXJlZyA9IHJlZ19yZWFkKGN0eC0+b2hjaSwgQ09OVFJPTF9TRVQoY3R4LT5yZWdzKSk7CisJCWlmICgocmVnICYgQ09OVEVYVF9BQ1RJVkUpID09IDApCisJCQlicmVhazsKKworCQlmd19ub3RpZnkoImNvbnRleHRfc3RvcDogc3RpbGwgYWN0aXZlICgweCUwOHgpXG4iLCByZWcpOworCQltc2xlZXAoMSk7CisJfQorfQorCitzdHJ1Y3QgZHJpdmVyX2RhdGEgeworCXN0cnVjdCBmd19wYWNrZXQgKnBhY2tldDsKK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFwcHBlbmRzIGEgcGFja2V0IHRvIHRoZSBETUEgcXVldWUgZm9yIHRyYW5zbWlzc2lvbi4KKyAqIE11c3QgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIHRoZSBvY2hpLT5sb2NrIGhlbGQgdG8gZW5zdXJlIHByb3BlcgorICogZ2VuZXJhdGlvbiBoYW5kbGluZyBhbmQgbG9ja2luZyBhcm91bmQgcGFja2V0IHF1ZXVlIG1hbmlwdWxhdGlvbi4KKyAqLworc3RhdGljIGludAorYXRfY29udGV4dF9xdWV1ZV9wYWNrZXQoc3RydWN0IGNvbnRleHQgKmN0eCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQoreworCXN0cnVjdCBmd19vaGNpICpvaGNpID0gY3R4LT5vaGNpOworCWRtYV9hZGRyX3QgZF9idXMsIHBheWxvYWRfYnVzOworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJpdmVyX2RhdGE7CisJc3RydWN0IGRlc2NyaXB0b3IgKmQsICpsYXN0OworCV9fbGUzMiAqaGVhZGVyOworCWludCB6LCB0Y29kZTsKKwl1MzIgcmVnOworCisJZCA9IGNvbnRleHRfZ2V0X2Rlc2NyaXB0b3JzKGN0eCwgNCwgJmRfYnVzKTsKKwlpZiAoZCA9PSBOVUxMKSB7CisJCXBhY2tldC0+YWNrID0gUkNPREVfU0VORF9FUlJPUjsKKwkJcmV0dXJuIC0xOworCX0KKworCWRbMF0uY29udHJvbCAgID0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9LRVlfSU1NRURJQVRFKTsKKwlkWzBdLnJlc19jb3VudCA9IGNwdV90b19sZTE2KHBhY2tldC0+dGltZXN0YW1wKTsKKworCS8qCisJICogVGhlIERNQSBmb3JtYXQgZm9yIGFzeW5jcm9ub3VzIGxpbmsgcGFja2V0cyBpcyBkaWZmZXJlbnQKKwkgKiBmcm9tIHRoZSBJRUVFMTM5NCBsYXlvdXQsIHNvIHNoaWZ0IHRoZSBmaWVsZHMgYXJvdW5kCisJICogYWNjb3JkaW5nbHkuICBJZiBoZWFkZXJfbGVuZ3RoIGlzIDgsIGl0J3MgYSBQSFkgcGFja2V0LCB0bworCSAqIHdoaWNoIHdlIG5lZWQgdG8gcHJlcGVuZCBhbiBleHRyYSBxdWFkbGV0LgorCSAqLworCisJaGVhZGVyID0gKF9fbGUzMiAqKSAmZFsxXTsKKwlpZiAocGFja2V0LT5oZWFkZXJfbGVuZ3RoID4gOCkgeworCQloZWFkZXJbMF0gPSBjcHVfdG9fbGUzMigocGFja2V0LT5oZWFkZXJbMF0gJiAweGZmZmYpIHwKKwkJCQkJKHBhY2tldC0+c3BlZWQgPDwgMTYpKTsKKwkJaGVhZGVyWzFdID0gY3B1X3RvX2xlMzIoKHBhY2tldC0+aGVhZGVyWzFdICYgMHhmZmZmKSB8CisJCQkJCShwYWNrZXQtPmhlYWRlclswXSAmIDB4ZmZmZjAwMDApKTsKKwkJaGVhZGVyWzJdID0gY3B1X3RvX2xlMzIocGFja2V0LT5oZWFkZXJbMl0pOworCisJCXRjb2RlID0gKHBhY2tldC0+aGVhZGVyWzBdID4+IDQpICYgMHgwZjsKKwkJaWYgKFRDT0RFX0lTX0JMT0NLX1BBQ0tFVCh0Y29kZSkpCisJCQloZWFkZXJbM10gPSBjcHVfdG9fbGUzMihwYWNrZXQtPmhlYWRlclszXSk7CisJCWVsc2UKKwkJCWhlYWRlclszXSA9IChfX2ZvcmNlIF9fbGUzMikgcGFja2V0LT5oZWFkZXJbM107CisKKwkJZFswXS5yZXFfY291bnQgPSBjcHVfdG9fbGUxNihwYWNrZXQtPmhlYWRlcl9sZW5ndGgpOworCX0gZWxzZSB7CisJCWhlYWRlclswXSA9IGNwdV90b19sZTMyKChPSENJMTM5NF9waHlfdGNvZGUgPDwgNCkgfAorCQkJCQkocGFja2V0LT5zcGVlZCA8PCAxNikpOworCQloZWFkZXJbMV0gPSBjcHVfdG9fbGUzMihwYWNrZXQtPmhlYWRlclswXSk7CisJCWhlYWRlclsyXSA9IGNwdV90b19sZTMyKHBhY2tldC0+aGVhZGVyWzFdKTsKKwkJZFswXS5yZXFfY291bnQgPSBjcHVfdG9fbGUxNigxMik7CisJfQorCisJZHJpdmVyX2RhdGEgPSAoc3RydWN0IGRyaXZlcl9kYXRhICopICZkWzNdOworCWRyaXZlcl9kYXRhLT5wYWNrZXQgPSBwYWNrZXQ7CisJcGFja2V0LT5kcml2ZXJfZGF0YSA9IGRyaXZlcl9kYXRhOworCQorCWlmIChwYWNrZXQtPnBheWxvYWRfbGVuZ3RoID4gMCkgeworCQlwYXlsb2FkX2J1cyA9CisJCQlkbWFfbWFwX3NpbmdsZShvaGNpLT5jYXJkLmRldmljZSwgcGFja2V0LT5wYXlsb2FkLAorCQkJCSAgICAgICBwYWNrZXQtPnBheWxvYWRfbGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBheWxvYWRfYnVzKSkgeworCQkJcGFja2V0LT5hY2sgPSBSQ09ERV9TRU5EX0VSUk9SOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJZFsyXS5yZXFfY291bnQgICAgPSBjcHVfdG9fbGUxNihwYWNrZXQtPnBheWxvYWRfbGVuZ3RoKTsKKwkJZFsyXS5kYXRhX2FkZHJlc3MgPSBjcHVfdG9fbGUzMihwYXlsb2FkX2J1cyk7CisJCWxhc3QgPSAmZFsyXTsKKwkJeiA9IDM7CisJfSBlbHNlIHsKKwkJbGFzdCA9ICZkWzBdOworCQl6ID0gMjsKKwl9CisKKwlsYXN0LT5jb250cm9sIHw9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfT1VUUFVUX0xBU1QgfAorCQkJCSAgICAgREVTQ1JJUFRPUl9JUlFfQUxXQVlTIHwKKwkJCQkgICAgIERFU0NSSVBUT1JfQlJBTkNIX0FMV0FZUyk7CisKKwkvKiBGSVhNRTogRG9jdW1lbnQgaG93IHRoZSBsb2NraW5nIHdvcmtzLiAqLworCWlmIChvaGNpLT5nZW5lcmF0aW9uICE9IHBhY2tldC0+Z2VuZXJhdGlvbikgeworCQlwYWNrZXQtPmFjayA9IFJDT0RFX0dFTkVSQVRJT047CisJCXJldHVybiAtMTsKKwl9CisKKwljb250ZXh0X2FwcGVuZChjdHgsIGQsIHosIDQgLSB6KTsKKworCS8qIElmIHRoZSBjb250ZXh0IGlzbid0IGFscmVhZHkgcnVubmluZywgc3RhcnQgaXQgdXAuICovCisJcmVnID0gcmVnX3JlYWQoY3R4LT5vaGNpLCBDT05UUk9MX1NFVChjdHgtPnJlZ3MpKTsKKwlpZiAoKHJlZyAmIENPTlRFWFRfUlVOKSA9PSAwKQorCQljb250ZXh0X3J1bihjdHgsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2F0X3BhY2tldChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKKwkJCSAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqZCwKKwkJCSAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqbGFzdCkKK3sKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRyaXZlcl9kYXRhOworCXN0cnVjdCBmd19wYWNrZXQgKnBhY2tldDsKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGNvbnRleHQtPm9oY2k7CisJZG1hX2FkZHJfdCBwYXlsb2FkX2J1czsKKwlpbnQgZXZ0OworCisJaWYgKGxhc3QtPnRyYW5zZmVyX3N0YXR1cyA9PSAwKQorCQkvKiBUaGlzIGRlc2NyaXB0b3IgaXNuJ3QgZG9uZSB5ZXQsIHN0b3AgaXRlcmF0aW9uLiAqLworCQlyZXR1cm4gMDsKKworCWRyaXZlcl9kYXRhID0gKHN0cnVjdCBkcml2ZXJfZGF0YSAqKSAmZFszXTsKKwlwYWNrZXQgPSBkcml2ZXJfZGF0YS0+cGFja2V0OworCWlmIChwYWNrZXQgPT0gTlVMTCkKKwkJLyogVGhpcyBwYWNrZXQgd2FzIGNhbmNlbGxlZCwganVzdCBjb250aW51ZS4gKi8KKwkJcmV0dXJuIDE7CisKKwlwYXlsb2FkX2J1cyA9IGxlMzJfdG9fY3B1KGxhc3QtPmRhdGFfYWRkcmVzcyk7CisJaWYgKHBheWxvYWRfYnVzICE9IDApCisJCWRtYV91bm1hcF9zaW5nbGUob2hjaS0+Y2FyZC5kZXZpY2UsIHBheWxvYWRfYnVzLAorCQkJCSBwYWNrZXQtPnBheWxvYWRfbGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKKworCWV2dCA9IGxlMTZfdG9fY3B1KGxhc3QtPnRyYW5zZmVyX3N0YXR1cykgJiAweDFmOworCXBhY2tldC0+dGltZXN0YW1wID0gbGUxNl90b19jcHUobGFzdC0+cmVzX2NvdW50KTsKKworCXN3aXRjaCAoZXZ0KSB7CisJY2FzZSBPSENJMTM5NF9ldnRfdGltZW91dDoKKwkJLyogQXN5bmMgcmVzcG9uc2UgdHJhbnNtaXQgdGltZWQgb3V0LiAqLworCQlwYWNrZXQtPmFjayA9IFJDT0RFX0NBTkNFTExFRDsKKwkJYnJlYWs7CisKKwljYXNlIE9IQ0kxMzk0X2V2dF9mbHVzaGVkOgorCQkvKgorCQkgKiBUaGUgcGFja2V0IHdhcyBmbHVzaGVkIHNob3VsZCBnaXZlIHNhbWUgZXJyb3IgYXMKKwkJICogd2hlbiB3ZSB0cnkgdG8gdXNlIGEgc3RhbGUgZ2VuZXJhdGlvbiBjb3VudC4KKwkJICovCisJCXBhY2tldC0+YWNrID0gUkNPREVfR0VORVJBVElPTjsKKwkJYnJlYWs7CisKKwljYXNlIE9IQ0kxMzk0X2V2dF9taXNzaW5nX2FjazoKKwkJLyoKKwkJICogVXNpbmcgYSB2YWxpZCAoY3VycmVudCkgZ2VuZXJhdGlvbiBjb3VudCwgYnV0IHRoZQorCQkgKiBub2RlIGlzIG5vdCBvbiB0aGUgYnVzIG9yIG5vdCBzZW5kaW5nIGFja3MuCisJCSAqLworCQlwYWNrZXQtPmFjayA9IFJDT0RFX05PX0FDSzsKKwkJYnJlYWs7CisKKwljYXNlIEFDS19DT01QTEVURSArIDB4MTA6CisJY2FzZSBBQ0tfUEVORElORyArIDB4MTA6CisJY2FzZSBBQ0tfQlVTWV9YICsgMHgxMDoKKwljYXNlIEFDS19CVVNZX0EgKyAweDEwOgorCWNhc2UgQUNLX0JVU1lfQiArIDB4MTA6CisJY2FzZSBBQ0tfREFUQV9FUlJPUiArIDB4MTA6CisJY2FzZSBBQ0tfVFlQRV9FUlJPUiArIDB4MTA6CisJCXBhY2tldC0+YWNrID0gZXZ0IC0gMHgxMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwYWNrZXQtPmFjayA9IFJDT0RFX1NFTkRfRVJST1I7CisJCWJyZWFrOworCX0KKworCXBhY2tldC0+Y2FsbGJhY2socGFja2V0LCAmb2hjaS0+Y2FyZCwgcGFja2V0LT5hY2spOworCisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgSEVBREVSX0dFVF9ERVNUSU5BVElPTihxKQkoKChxKSA+PiAxNikgJiAweGZmZmYpCisjZGVmaW5lIEhFQURFUl9HRVRfVENPREUocSkJCSgoKHEpID4+IDQpICYgMHgwZikKKyNkZWZpbmUgSEVBREVSX0dFVF9PRkZTRVRfSElHSChxKQkoKChxKSA+PiAwKSAmIDB4ZmZmZikKKyNkZWZpbmUgSEVBREVSX0dFVF9EQVRBX0xFTkdUSChxKQkoKChxKSA+PiAxNikgJiAweGZmZmYpCisjZGVmaW5lIEhFQURFUl9HRVRfRVhURU5ERURfVENPREUocSkJKCgocSkgPj4gMCkgJiAweGZmZmYpCisKK3N0YXRpYyB2b2lkCitoYW5kbGVfbG9jYWxfcm9tKHN0cnVjdCBmd19vaGNpICpvaGNpLCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsIHUzMiBjc3IpCit7CisJc3RydWN0IGZ3X3BhY2tldCByZXNwb25zZTsKKwlpbnQgdGNvZGUsIGxlbmd0aCwgaTsKKworCXRjb2RlID0gSEVBREVSX0dFVF9UQ09ERShwYWNrZXQtPmhlYWRlclswXSk7CisJaWYgKFRDT0RFX0lTX0JMT0NLX1BBQ0tFVCh0Y29kZSkpCisJCWxlbmd0aCA9IEhFQURFUl9HRVRfREFUQV9MRU5HVEgocGFja2V0LT5oZWFkZXJbM10pOworCWVsc2UKKwkJbGVuZ3RoID0gNDsKKworCWkgPSBjc3IgLSBDU1JfQ09ORklHX1JPTTsKKwlpZiAoaSArIGxlbmd0aCA+IENPTkZJR19ST01fU0laRSkgeworCQlmd19maWxsX3Jlc3BvbnNlKCZyZXNwb25zZSwgcGFja2V0LT5oZWFkZXIsCisJCQkJIFJDT0RFX0FERFJFU1NfRVJST1IsIE5VTEwsIDApOworCX0gZWxzZSBpZiAoIVRDT0RFX0lTX1JFQURfUkVRVUVTVCh0Y29kZSkpIHsKKwkJZndfZmlsbF9yZXNwb25zZSgmcmVzcG9uc2UsIHBhY2tldC0+aGVhZGVyLAorCQkJCSBSQ09ERV9UWVBFX0VSUk9SLCBOVUxMLCAwKTsKKwl9IGVsc2UgeworCQlmd19maWxsX3Jlc3BvbnNlKCZyZXNwb25zZSwgcGFja2V0LT5oZWFkZXIsIFJDT0RFX0NPTVBMRVRFLAorCQkJCSAodm9pZCAqKSBvaGNpLT5jb25maWdfcm9tICsgaSwgbGVuZ3RoKTsKKwl9CisKKwlmd19jb3JlX2hhbmRsZV9yZXNwb25zZSgmb2hjaS0+Y2FyZCwgJnJlc3BvbnNlKTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9sb2NhbF9sb2NrKHN0cnVjdCBmd19vaGNpICpvaGNpLCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsIHUzMiBjc3IpCit7CisJc3RydWN0IGZ3X3BhY2tldCByZXNwb25zZTsKKwlpbnQgdGNvZGUsIGxlbmd0aCwgZXh0X3Rjb2RlLCBzZWw7CisJX19iZTMyICpwYXlsb2FkLCBsb2NrX29sZDsKKwl1MzIgbG9ja19hcmcsIGxvY2tfZGF0YTsKKworCXRjb2RlID0gSEVBREVSX0dFVF9UQ09ERShwYWNrZXQtPmhlYWRlclswXSk7CisJbGVuZ3RoID0gSEVBREVSX0dFVF9EQVRBX0xFTkdUSChwYWNrZXQtPmhlYWRlclszXSk7CisJcGF5bG9hZCA9IHBhY2tldC0+cGF5bG9hZDsKKwlleHRfdGNvZGUgPSBIRUFERVJfR0VUX0VYVEVOREVEX1RDT0RFKHBhY2tldC0+aGVhZGVyWzNdKTsKKworCWlmICh0Y29kZSA9PSBUQ09ERV9MT0NLX1JFUVVFU1QgJiYKKwkgICAgZXh0X3Rjb2RlID09IEVYVENPREVfQ09NUEFSRV9TV0FQICYmIGxlbmd0aCA9PSA4KSB7CisJCWxvY2tfYXJnID0gYmUzMl90b19jcHUocGF5bG9hZFswXSk7CisJCWxvY2tfZGF0YSA9IGJlMzJfdG9fY3B1KHBheWxvYWRbMV0pOworCX0gZWxzZSBpZiAodGNvZGUgPT0gVENPREVfUkVBRF9RVUFETEVUX1JFUVVFU1QpIHsKKwkJbG9ja19hcmcgPSAwOworCQlsb2NrX2RhdGEgPSAwOworCX0gZWxzZSB7CisJCWZ3X2ZpbGxfcmVzcG9uc2UoJnJlc3BvbnNlLCBwYWNrZXQtPmhlYWRlciwKKwkJCQkgUkNPREVfVFlQRV9FUlJPUiwgTlVMTCwgMCk7CisJCWdvdG8gb3V0OworCX0KKworCXNlbCA9IChjc3IgLSBDU1JfQlVTX01BTkFHRVJfSUQpIC8gNDsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfQ1NSRGF0YSwgbG9ja19kYXRhKTsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfQ1NSQ29tcGFyZURhdGEsIGxvY2tfYXJnKTsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfQ1NSQ29udHJvbCwgc2VsKTsKKworCWlmIChyZWdfcmVhZChvaGNpLCBPSENJMTM5NF9DU1JDb250cm9sKSAmIDB4ODAwMDAwMDApCisJCWxvY2tfb2xkID0gY3B1X3RvX2JlMzIocmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfQ1NSRGF0YSkpOworCWVsc2UKKwkJZndfbm90aWZ5KCJzd2FwIG5vdCBkb25lIHlldFxuIik7CisKKwlmd19maWxsX3Jlc3BvbnNlKCZyZXNwb25zZSwgcGFja2V0LT5oZWFkZXIsCisJCQkgUkNPREVfQ09NUExFVEUsICZsb2NrX29sZCwgc2l6ZW9mKGxvY2tfb2xkKSk7Cisgb3V0OgorCWZ3X2NvcmVfaGFuZGxlX3Jlc3BvbnNlKCZvaGNpLT5jYXJkLCAmcmVzcG9uc2UpOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX2xvY2FsX3JlcXVlc3Qoc3RydWN0IGNvbnRleHQgKmN0eCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQoreworCXU2NCBvZmZzZXQ7CisJdTMyIGNzcjsKKworCWlmIChjdHggPT0gJmN0eC0+b2hjaS0+YXRfcmVxdWVzdF9jdHgpIHsKKwkJcGFja2V0LT5hY2sgPSBBQ0tfUEVORElORzsKKwkJcGFja2V0LT5jYWxsYmFjayhwYWNrZXQsICZjdHgtPm9oY2ktPmNhcmQsIHBhY2tldC0+YWNrKTsKKwl9CisKKwlvZmZzZXQgPQorCQkoKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJIEhFQURFUl9HRVRfT0ZGU0VUX0hJR0gocGFja2V0LT5oZWFkZXJbMV0pIDw8IDMyKSB8CisJCXBhY2tldC0+aGVhZGVyWzJdOworCWNzciA9IG9mZnNldCAtIENTUl9SRUdJU1RFUl9CQVNFOworCisJLyogSGFuZGxlIGNvbmZpZyByb20gcmVhZHMuICovCisJaWYgKGNzciA+PSBDU1JfQ09ORklHX1JPTSAmJiBjc3IgPCBDU1JfQ09ORklHX1JPTV9FTkQpCisJCWhhbmRsZV9sb2NhbF9yb20oY3R4LT5vaGNpLCBwYWNrZXQsIGNzcik7CisJZWxzZSBzd2l0Y2ggKGNzcikgeworCWNhc2UgQ1NSX0JVU19NQU5BR0VSX0lEOgorCWNhc2UgQ1NSX0JBTkRXSURUSF9BVkFJTEFCTEU6CisJY2FzZSBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0hJOgorCWNhc2UgQ1NSX0NIQU5ORUxTX0FWQUlMQUJMRV9MTzoKKwkJaGFuZGxlX2xvY2FsX2xvY2soY3R4LT5vaGNpLCBwYWNrZXQsIGNzcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChjdHggPT0gJmN0eC0+b2hjaS0+YXRfcmVxdWVzdF9jdHgpCisJCQlmd19jb3JlX2hhbmRsZV9yZXF1ZXN0KCZjdHgtPm9oY2ktPmNhcmQsIHBhY2tldCk7CisJCWVsc2UKKwkJCWZ3X2NvcmVfaGFuZGxlX3Jlc3BvbnNlKCZjdHgtPm9oY2ktPmNhcmQsIHBhY2tldCk7CisJCWJyZWFrOworCX0KKworCWlmIChjdHggPT0gJmN0eC0+b2hjaS0+YXRfcmVzcG9uc2VfY3R4KSB7CisJCXBhY2tldC0+YWNrID0gQUNLX0NPTVBMRVRFOworCQlwYWNrZXQtPmNhbGxiYWNrKHBhY2tldCwgJmN0eC0+b2hjaS0+Y2FyZCwgcGFja2V0LT5hY2spOworCX0KK30KKworc3RhdGljIHZvaWQKK2F0X2NvbnRleHRfdHJhbnNtaXQoc3RydWN0IGNvbnRleHQgKmN0eCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCWlmIChIRUFERVJfR0VUX0RFU1RJTkFUSU9OKHBhY2tldC0+aGVhZGVyWzBdKSA9PSBjdHgtPm9oY2ktPm5vZGVfaWQgJiYKKwkgICAgY3R4LT5vaGNpLT5nZW5lcmF0aW9uID09IHBhY2tldC0+Z2VuZXJhdGlvbikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPm9oY2ktPmxvY2ssIGZsYWdzKTsKKwkJaGFuZGxlX2xvY2FsX3JlcXVlc3QoY3R4LCBwYWNrZXQpOworCQlyZXR1cm47CisJfQorCisJcmV0dmFsID0gYXRfY29udGV4dF9xdWV1ZV9wYWNrZXQoY3R4LCBwYWNrZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+b2hjaS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHJldHZhbCA8IDApCisJCXBhY2tldC0+Y2FsbGJhY2socGFja2V0LCAmY3R4LT5vaGNpLT5jYXJkLCBwYWNrZXQtPmFjayk7CisJCit9CisKK3N0YXRpYyB2b2lkIGJ1c19yZXNldF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IChzdHJ1Y3QgZndfb2hjaSAqKWRhdGE7CisJaW50IHNlbGZfaWRfY291bnQsIGksIGosIHJlZzsKKwlpbnQgZ2VuZXJhdGlvbiwgbmV3X2dlbmVyYXRpb247CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJlZyA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X05vZGVJRCk7CisJaWYgKCEocmVnICYgT0hDSTEzOTRfTm9kZUlEX2lkVmFsaWQpKSB7CisJCWZ3X2Vycm9yKCJub2RlIElEIG5vdCB2YWxpZCwgbmV3IGJ1cyByZXNldCBpbiBwcm9ncmVzc1xuIik7CisJCXJldHVybjsKKwl9CisJb2hjaS0+bm9kZV9pZCA9IHJlZyAmIDB4ZmZmZjsKKworCS8qCisJICogVGhlIGNvdW50IGluIHRoZSBTZWxmSURDb3VudCByZWdpc3RlciBpcyB0aGUgbnVtYmVyIG9mCisJICogYnl0ZXMgaW4gdGhlIHNlbGYgSUQgcmVjZWl2ZSBidWZmZXIuICBTaW5jZSB3ZSBhbHNvIHJlY2VpdmUKKwkgKiB0aGUgaW52ZXJ0ZWQgcXVhZGxldHMgYW5kIGEgaGVhZGVyIHF1YWRsZXQsIHdlIHNoaWZ0IG9uZQorCSAqIGJpdCBleHRyYSB0byBnZXQgdGhlIGFjdHVhbCBudW1iZXIgb2Ygc2VsZiBJRHMuCisJICovCisKKwlzZWxmX2lkX2NvdW50ID0gKHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X1NlbGZJRENvdW50KSA+PiAzKSAmIDB4M2ZmOworCWdlbmVyYXRpb24gPSAobGUzMl90b19jcHUob2hjaS0+c2VsZl9pZF9jcHVbMF0pID4+IDE2KSAmIDB4ZmY7CisKKwlmb3IgKGkgPSAxLCBqID0gMDsgaiA8IHNlbGZfaWRfY291bnQ7IGkgKz0gMiwgaisrKSB7CisJCWlmIChvaGNpLT5zZWxmX2lkX2NwdVtpXSAhPSB+b2hjaS0+c2VsZl9pZF9jcHVbaSArIDFdKQorCQkJZndfZXJyb3IoImluY29uc2lzdGVudCBzZWxmIElEc1xuIik7CisJCW9oY2ktPnNlbGZfaWRfYnVmZmVyW2pdID0gbGUzMl90b19jcHUob2hjaS0+c2VsZl9pZF9jcHVbaV0pOworCX0KKworCS8qCisJICogQ2hlY2sgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSBzZWxmIElEcyB3ZSBqdXN0IHJlYWQuICBUaGUKKwkgKiBwcm9ibGVtIHdlIGZhY2UgaXMgdGhhdCBhIG5ldyBidXMgcmVzZXQgY2FuIHN0YXJ0IHdoaWxlIHdlCisJICogcmVhZCBvdXQgdGhlIHNlbGYgSURzIGZyb20gdGhlIERNQSBidWZmZXIuIElmIHRoaXMgaGFwcGVucywKKwkgKiB0aGUgRE1BIGJ1ZmZlciB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggbmV3IHNlbGYgSURzIGFuZCB3ZQorCSAqIHdpbGwgcmVhZCBvdXQgaW5jb25zaXN0ZW50IGRhdGEuICBUaGUgT0hDSSBzcGVjaWZpY2F0aW9uCisJICogKHNlY3Rpb24gMTEuMikgcmVjb21tZW5kcyBhIHRlY2huaXF1ZSBzaW1pbGFyIHRvCisJICogbGludXgvc2VxbG9jay5oLCB3aGVyZSB3ZSByZW1lbWJlciB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUKKwkgKiBzZWxmIElEcyBpbiB0aGUgYnVmZmVyIGJlZm9yZSByZWFkaW5nIHRoZW0gb3V0IGFuZCBjb21wYXJlCisJICogaXQgdG8gdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiBhZnRlciByZWFkaW5nIHRoZW0gb3V0LiAgSWYKKwkgKiB0aGUgdHdvIGdlbmVyYXRpb25zIG1hdGNoIHdlIGtub3cgd2UgaGF2ZSBhIGNvbnNpc3RlbnQgc2V0CisJICogb2Ygc2VsZiBJRHMuCisJICovCisKKwluZXdfZ2VuZXJhdGlvbiA9IChyZWdfcmVhZChvaGNpLCBPSENJMTM5NF9TZWxmSURDb3VudCkgPj4gMTYpICYgMHhmZjsKKwlpZiAobmV3X2dlbmVyYXRpb24gIT0gZ2VuZXJhdGlvbikgeworCQlmd19ub3RpZnkoInJlY3Vyc2l2ZSBidXMgcmVzZXQgZGV0ZWN0ZWQsICIKKwkJCSAgImRpc2NhcmRpbmcgc2VsZiBpZHNcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogRklYTUU6IERvY3VtZW50IGhvdyB0aGUgbG9ja2luZyB3b3Jrcy4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJb2hjaS0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CisJY29udGV4dF9zdG9wKCZvaGNpLT5hdF9yZXF1ZXN0X2N0eCk7CisJY29udGV4dF9zdG9wKCZvaGNpLT5hdF9yZXNwb25zZV9jdHgpOworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JbnRFdmVudENsZWFyLCBPSENJMTM5NF9idXNSZXNldCk7CisKKwkvKgorCSAqIFRoaXMgbmV4dCBiaXQgaXMgdW5yZWxhdGVkIHRvIHRoZSBBVCBjb250ZXh0IHN0dWZmIGJ1dCB3ZQorCSAqIGhhdmUgdG8gZG8gaXQgdW5kZXIgdGhlIHNwaW5sb2NrIGFsc28uICBJZiBhIG5ldyBjb25maWcgcm9tCisJICogd2FzIHNldCB1cCBiZWZvcmUgdGhpcyByZXNldCwgdGhlIG9sZCBvbmUgaXMgbm93IG5vIGxvbmdlcgorCSAqIGluIHVzZSBhbmQgd2UgY2FuIGZyZWUgaXQuIFVwZGF0ZSB0aGUgY29uZmlnIHJvbSBwb2ludGVycworCSAqIHRvIHBvaW50IHRvIHRoZSBjdXJyZW50IGNvbmZpZyByb20gYW5kIGNsZWFyIHRoZQorCSAqIG5leHRfY29uZmlnX3JvbSBwb2ludGVyIHNvIGEgbmV3IHVkcGF0ZSBjYW4gdGFrZSBwbGFjZS4KKwkgKi8KKworCWlmIChvaGNpLT5uZXh0X2NvbmZpZ19yb20gIT0gTlVMTCkgeworCQlkbWFfZnJlZV9jb2hlcmVudChvaGNpLT5jYXJkLmRldmljZSwgQ09ORklHX1JPTV9TSVpFLAorCQkJCSAgb2hjaS0+Y29uZmlnX3JvbSwgb2hjaS0+Y29uZmlnX3JvbV9idXMpOworCQlvaGNpLT5jb25maWdfcm9tICAgICAgPSBvaGNpLT5uZXh0X2NvbmZpZ19yb207CisJCW9oY2ktPmNvbmZpZ19yb21fYnVzICA9IG9oY2ktPm5leHRfY29uZmlnX3JvbV9idXM7CisJCW9oY2ktPm5leHRfY29uZmlnX3JvbSA9IE5VTEw7CisKKwkJLyoKKwkJICogUmVzdG9yZSBjb25maWdfcm9tIGltYWdlIGFuZCBtYW51YWxseSB1cGRhdGUKKwkJICogY29uZmlnX3JvbSByZWdpc3RlcnMuICBXcml0aW5nIHRoZSBoZWFkZXIgcXVhZGxldAorCQkgKiB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGNvbmZpZyByb20gaXMgcmVhZHksIHNvIHdlCisJCSAqIGRvIHRoYXQgbGFzdC4KKwkJICovCisJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9CdXNPcHRpb25zLAorCQkJICBiZTMyX3RvX2NwdShvaGNpLT5jb25maWdfcm9tWzJdKSk7CisJCW9oY2ktPmNvbmZpZ19yb21bMF0gPSBjcHVfdG9fYmUzMihvaGNpLT5uZXh0X2hlYWRlcik7CisJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Db25maWdST01oZHIsIG9oY2ktPm5leHRfaGVhZGVyKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKwlmd19jb3JlX2hhbmRsZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIG9oY2ktPm5vZGVfaWQsIGdlbmVyYXRpb24sCisJCQkJIHNlbGZfaWRfY291bnQsIG9oY2ktPnNlbGZfaWRfYnVmZmVyKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGlycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBkYXRhOworCXUzMiBldmVudCwgaXNvX2V2ZW50LCBjeWNsZV90aW1lOworCWludCBpOworCisJZXZlbnQgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9JbnRFdmVudENsZWFyKTsKKworCWlmICghZXZlbnQpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JbnRFdmVudENsZWFyLCBldmVudCk7CisKKwlpZiAoZXZlbnQgJiBPSENJMTM5NF9zZWxmSURDb21wbGV0ZSkKKwkJdGFza2xldF9zY2hlZHVsZSgmb2hjaS0+YnVzX3Jlc2V0X3Rhc2tsZXQpOworCisJaWYgKGV2ZW50ICYgT0hDSTEzOTRfUlFQa3QpCisJCXRhc2tsZXRfc2NoZWR1bGUoJm9oY2ktPmFyX3JlcXVlc3RfY3R4LnRhc2tsZXQpOworCisJaWYgKGV2ZW50ICYgT0hDSTEzOTRfUlNQa3QpCisJCXRhc2tsZXRfc2NoZWR1bGUoJm9oY2ktPmFyX3Jlc3BvbnNlX2N0eC50YXNrbGV0KTsKKworCWlmIChldmVudCAmIE9IQ0kxMzk0X3JlcVR4Q29tcGxldGUpCisJCXRhc2tsZXRfc2NoZWR1bGUoJm9oY2ktPmF0X3JlcXVlc3RfY3R4LnRhc2tsZXQpOworCisJaWYgKGV2ZW50ICYgT0hDSTEzOTRfcmVzcFR4Q29tcGxldGUpCisJCXRhc2tsZXRfc2NoZWR1bGUoJm9oY2ktPmF0X3Jlc3BvbnNlX2N0eC50YXNrbGV0KTsKKworCWlzb19ldmVudCA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRFdmVudENsZWFyKTsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSXNvUmVjdkludEV2ZW50Q2xlYXIsIGlzb19ldmVudCk7CisKKwl3aGlsZSAoaXNvX2V2ZW50KSB7CisJCWkgPSBmZnMoaXNvX2V2ZW50KSAtIDE7CisJCXRhc2tsZXRfc2NoZWR1bGUoJm9oY2ktPmlyX2NvbnRleHRfbGlzdFtpXS5jb250ZXh0LnRhc2tsZXQpOworCQlpc29fZXZlbnQgJj0gfigxIDw8IGkpOworCX0KKworCWlzb19ldmVudCA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRFdmVudENsZWFyKTsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSXNvWG1pdEludEV2ZW50Q2xlYXIsIGlzb19ldmVudCk7CisKKwl3aGlsZSAoaXNvX2V2ZW50KSB7CisJCWkgPSBmZnMoaXNvX2V2ZW50KSAtIDE7CisJCXRhc2tsZXRfc2NoZWR1bGUoJm9oY2ktPml0X2NvbnRleHRfbGlzdFtpXS5jb250ZXh0LnRhc2tsZXQpOworCQlpc29fZXZlbnQgJj0gfigxIDw8IGkpOworCX0KKworCWlmIChldmVudCAmIE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzKSB7CisJCWN5Y2xlX3RpbWUgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29jaHJvbm91c0N5Y2xlVGltZXIpOworCQlpZiAoKGN5Y2xlX3RpbWUgJiAweDgwMDAwMDAwKSA9PSAwKQorCQkJb2hjaS0+YnVzX3NlY29uZHMrKzsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdHdhcmVfcmVzZXQoc3RydWN0IGZ3X29oY2kgKm9oY2kpCit7CisJaW50IGk7CisKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSENDb250cm9sU2V0LCBPSENJMTM5NF9IQ0NvbnRyb2xfc29mdFJlc2V0KTsKKworCWZvciAoaSA9IDA7IGkgPCBPSENJX0xPT1BfQ09VTlQ7IGkrKykgeworCQlpZiAoKHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0hDQ29udHJvbFNldCkgJgorCQkgICAgIE9IQ0kxMzk0X0hDQ29udHJvbF9zb2Z0UmVzZXQpID09IDApCisJCQlyZXR1cm4gMDsKKwkJbXNsZWVwKDEpOworCX0KKworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9lbmFibGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHUzMiAqY29uZmlnX3JvbSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koY2FyZCk7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoY2FyZC0+ZGV2aWNlKTsKKworCWlmIChzb2Z0d2FyZV9yZXNldChvaGNpKSkgeworCQlmd19lcnJvcigiRmFpbGVkIHRvIHJlc2V0IG9oY2kgY2FyZC5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qCisJICogTm93IGVuYWJsZSBMUFMsIHdoaWNoIHdlIG5lZWQgaW4gb3JkZXIgdG8gc3RhcnQgYWNjZXNzaW5nCisJICogbW9zdCBvZiB0aGUgcmVnaXN0ZXJzLiAgSW4gZmFjdCwgb24gc29tZSBjYXJkcyAoQUxJIE01MjUxKSwKKwkgKiBhY2Nlc3NpbmcgcmVnaXN0ZXJzIGluIHRoZSBTQ2xrIGRvbWFpbiB3aXRob3V0IExQUyBlbmFibGVkCisJICogd2lsbCBsb2NrIHVwIHRoZSBtYWNoaW5lLiAgV2FpdCA1MG1zZWMgdG8gbWFrZSBzdXJlIHdlIGhhdmUKKwkgKiBmdWxsIGxpbmsgZW5hYmxlZC4KKwkgKi8KKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSENDb250cm9sU2V0LAorCQkgIE9IQ0kxMzk0X0hDQ29udHJvbF9MUFMgfAorCQkgIE9IQ0kxMzk0X0hDQ29udHJvbF9wb3N0ZWRXcml0ZUVuYWJsZSk7CisJZmx1c2hfd3JpdGVzKG9oY2kpOworCW1zbGVlcCg1MCk7CisKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSENDb250cm9sQ2xlYXIsCisJCSAgT0hDSTEzOTRfSENDb250cm9sX25vQnl0ZVN3YXBEYXRhKTsKKworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9MaW5rQ29udHJvbFNldCwKKwkJICBPSENJMTM5NF9MaW5rQ29udHJvbF9yY3ZTZWxmSUQgfAorCQkgIE9IQ0kxMzk0X0xpbmtDb250cm9sX2N5Y2xlVGltZXJFbmFibGUgfAorCQkgIE9IQ0kxMzk0X0xpbmtDb250cm9sX2N5Y2xlTWFzdGVyKTsKKworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9BVFJldHJpZXMsCisJCSAgT0hDSTEzOTRfTUFYX0FUX1JFUV9SRVRSSUVTIHwKKwkJICAoT0hDSTEzOTRfTUFYX0FUX1JFU1BfUkVUUklFUyA8PCA0KSB8CisJCSAgKE9IQ0kxMzk0X01BWF9QSFlTX1JFU1BfUkVUUklFUyA8PCA4KSk7CisKKwlhcl9jb250ZXh0X3J1bigmb2hjaS0+YXJfcmVxdWVzdF9jdHgpOworCWFyX2NvbnRleHRfcnVuKCZvaGNpLT5hcl9yZXNwb25zZV9jdHgpOworCisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X1NlbGZJREJ1ZmZlciwgb2hjaS0+c2VsZl9pZF9idXMpOworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9QaHlVcHBlckJvdW5kLCAweDAwMDEwMDAwKTsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50RXZlbnRDbGVhciwgfjApOworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JbnRNYXNrQ2xlYXIsIH4wKTsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50TWFza1NldCwKKwkJICBPSENJMTM5NF9zZWxmSURDb21wbGV0ZSB8CisJCSAgT0hDSTEzOTRfUlFQa3QgfCBPSENJMTM5NF9SU1BrdCB8CisJCSAgT0hDSTEzOTRfcmVxVHhDb21wbGV0ZSB8IE9IQ0kxMzk0X3Jlc3BUeENvbXBsZXRlIHwKKwkJICBPSENJMTM5NF9pc29jaFJ4IHwgT0hDSTEzOTRfaXNvY2hUeCB8CisJCSAgT0hDSTEzOTRfbWFzdGVySW50RW5hYmxlIHwKKwkJICBPSENJMTM5NF9jeWNsZTY0U2Vjb25kcyk7CisKKwkvKiBBY3RpdmF0ZSBsaW5rX29uIGJpdCBhbmQgY29udGVuZGVyIGJpdCBpbiBvdXIgc2VsZiBJRCBwYWNrZXRzLiovCisJaWYgKG9oY2lfdXBkYXRlX3BoeV9yZWcoY2FyZCwgNCwgMCwKKwkJCQlQSFlfTElOS19BQ1RJVkUgfCBQSFlfQ09OVEVOREVSKSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyoKKwkgKiBXaGVuIHRoZSBsaW5rIGlzIG5vdCB5ZXQgZW5hYmxlZCwgdGhlIGF0b21pYyBjb25maWcgcm9tCisJICogdXBkYXRlIG1lY2hhbmlzbSBkZXNjcmliZWQgYmVsb3cgaW4gb2hjaV9zZXRfY29uZmlnX3JvbSgpCisJICogaXMgbm90IGFjdGl2ZS4gIFdlIGhhdmUgdG8gdXBkYXRlIENvbmZpZ1JvbUhlYWRlciBhbmQKKwkgKiBCdXNPcHRpb25zIG1hbnVhbGx5LCBhbmQgdGhlIHdyaXRlIHRvIENvbmZpZ1JPTW1hcCB0YWtlcworCSAqIGVmZmVjdCBpbW1lZGlhdGVseS4gIFdlIHRpZSB0aGlzIHRvIHRoZSBlbmFibGluZyBvZiB0aGUKKwkgKiBsaW5rLCBzbyB3ZSBoYXZlIGEgdmFsaWQgY29uZmlnIHJvbSBiZWZvcmUgZW5hYmxpbmcgLSB0aGUKKwkgKiBPSENJIHJlcXVpcmVzIHRoYXQgQ29uZmlnUk9NaGRyIGFuZCBCdXNPcHRpb25zIGhhdmUgdmFsaWQKKwkgKiB2YWx1ZXMgYmVmb3JlIGVuYWJsaW5nLgorCSAqCisJICogSG93ZXZlciwgd2hlbiB0aGUgQ29uZmlnUk9NbWFwIGlzIHdyaXR0ZW4sIHNvbWUgY29udHJvbGxlcnMKKwkgKiBhbHdheXMgcmVhZCBiYWNrIHF1YWRsZXRzIDAgYW5kIDIgZnJvbSB0aGUgY29uZmlnIHJvbSB0bworCSAqIHRoZSBDb25maWdSb21IZWFkZXIgYW5kIEJ1c09wdGlvbnMgcmVnaXN0ZXJzIG9uIGJ1cyByZXNldC4KKwkgKiBUaGV5IHNob3VsZG4ndCBkbyB0aGF0IGluIHRoaXMgaW5pdGlhbCBjYXNlIHdoZXJlIHRoZSBsaW5rCisJICogaXNuJ3QgZW5hYmxlZC4gIFRoaXMgbWVhbnMgd2UgaGF2ZSB0byB1c2UgdGhlIHNhbWUKKwkgKiB3b3JrYXJvdW5kIGhlcmUsIHNldHRpbmcgdGhlIGJ1cyBoZWFkZXIgdG8gMCBhbmQgdGhlbiB3cml0ZQorCSAqIHRoZSByaWdodCB2YWx1ZXMgaW4gdGhlIGJ1cyByZXNldCB0YXNrbGV0LgorCSAqLworCisJb2hjaS0+bmV4dF9jb25maWdfcm9tID0KKwkJZG1hX2FsbG9jX2NvaGVyZW50KG9oY2ktPmNhcmQuZGV2aWNlLCBDT05GSUdfUk9NX1NJWkUsCisJCQkJICAgJm9oY2ktPm5leHRfY29uZmlnX3JvbV9idXMsIEdGUF9LRVJORUwpOworCWlmIChvaGNpLT5uZXh0X2NvbmZpZ19yb20gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQob2hjaS0+bmV4dF9jb25maWdfcm9tLCAwLCBDT05GSUdfUk9NX1NJWkUpOworCWZ3X21lbWNweV90b19iZTMyKG9oY2ktPm5leHRfY29uZmlnX3JvbSwgY29uZmlnX3JvbSwgbGVuZ3RoICogNCk7CisKKwlvaGNpLT5uZXh0X2hlYWRlciA9IGNvbmZpZ19yb21bMF07CisJb2hjaS0+bmV4dF9jb25maWdfcm9tWzBdID0gMDsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfQ29uZmlnUk9NaGRyLCAwKTsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfQnVzT3B0aW9ucywgY29uZmlnX3JvbVsyXSk7CisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0NvbmZpZ1JPTW1hcCwgb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyk7CisKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfQXNSZXFGaWx0ZXJIaVNldCwgMHg4MDAwMDAwMCk7CisKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGlycV9oYW5kbGVyLAorCQkJSVJRRl9TSEFSRUQsIG9oY2lfZHJpdmVyX25hbWUsIG9oY2kpKSB7CisJCWZ3X2Vycm9yKCJGYWlsZWQgdG8gYWxsb2NhdGUgc2hhcmVkIGludGVycnVwdCAlZC5cbiIsCisJCQkgZGV2LT5pcnEpOworCQlkbWFfZnJlZV9jb2hlcmVudChvaGNpLT5jYXJkLmRldmljZSwgQ09ORklHX1JPTV9TSVpFLAorCQkJCSAgb2hjaS0+Y29uZmlnX3JvbSwgb2hjaS0+Y29uZmlnX3JvbV9idXMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSENDb250cm9sU2V0LAorCQkgIE9IQ0kxMzk0X0hDQ29udHJvbF9saW5rRW5hYmxlIHwKKwkJICBPSENJMTM5NF9IQ0NvbnRyb2xfQklCaW1hZ2VWYWxpZCk7CisJZmx1c2hfd3JpdGVzKG9oY2kpOworCisJLyoKKwkgKiBXZSBhcmUgcmVhZHkgdG8gZ28sIGluaXRpYXRlIGJ1cyByZXNldCB0byBmaW5pc2ggdGhlCisJICogaW5pdGlhbGl6YXRpb24uCisJICovCisKKwlmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldCgmb2hjaS0+Y2FyZCwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorb2hjaV9zZXRfY29uZmlnX3JvbShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgdTMyICpjb25maWdfcm9tLCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBmd19vaGNpICpvaGNpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IDA7CisJX19iZTMyICpuZXh0X2NvbmZpZ19yb207CisJZG1hX2FkZHJfdCBuZXh0X2NvbmZpZ19yb21fYnVzOworCisJb2hjaSA9IGZ3X29oY2koY2FyZCk7CisKKwkvKgorCSAqIFdoZW4gdGhlIE9IQ0kgY29udHJvbGxlciBpcyBlbmFibGVkLCB0aGUgY29uZmlnIHJvbSB1cGRhdGUKKwkgKiBtZWNoYW5pc20gaXMgYSBiaXQgdHJpY2t5LCBidXQgZWFzeSBlbm91Z2ggdG8gdXNlLiAgU2VlCisJICogc2VjdGlvbiA1LjUuNiBpbiB0aGUgT0hDSSBzcGVjaWZpY2F0aW9uLgorCSAqCisJICogVGhlIE9IQ0kgY29udHJvbGxlciBjYWNoZXMgdGhlIG5ldyBjb25maWcgcm9tIGFkZHJlc3MgaW4gYQorCSAqIHNoYWRvdyByZWdpc3RlciAoQ29uZmlnUk9NbWFwTmV4dCkgYW5kIG5lZWRzIGEgYnVzIHJlc2V0CisJICogZm9yIHRoZSBjaGFuZ2VzIHRvIHRha2UgcGxhY2UuICBXaGVuIHRoZSBidXMgcmVzZXQgaXMKKwkgKiBkZXRlY3RlZCwgdGhlIGNvbnRyb2xsZXIgbG9hZHMgdGhlIG5ldyB2YWx1ZXMgZm9yIHRoZQorCSAqIENvbmZpZ1JvbUhlYWRlciBhbmQgQnVzT3B0aW9ucyByZWdpc3RlcnMgZnJvbSB0aGUgc3BlY2lmaWVkCisJICogY29uZmlnIHJvbSBhbmQgbG9hZHMgQ29uZmlnUk9NbWFwIGZyb20gdGhlIENvbmZpZ1JPTW1hcE5leHQKKwkgKiBzaGFkb3cgcmVnaXN0ZXIuIEFsbCBhdXRvbWF0aWNhbGx5IGFuZCBhdG9taWNhbGx5LgorCSAqCisJICogTm93LCB0aGVyZSdzIGEgdHdpc3QgdG8gdGhpcyBzdG9yeS4gIFRoZSBhdXRvbWF0aWMgbG9hZCBvZgorCSAqIENvbmZpZ1JvbUhlYWRlciBhbmQgQnVzT3B0aW9ucyBkb2Vzbid0IGhvbm9yIHRoZQorCSAqIG5vQnl0ZVN3YXBEYXRhIGJpdCwgc28gd2l0aCBhIGJlMzIgY29uZmlnIHJvbSwgdGhlCisJICogY29udHJvbGxlciB3aWxsIGxvYWQgYmUzMiB2YWx1ZXMgaW4gdG8gdGhlc2UgcmVnaXN0ZXJzCisJICogZHVyaW5nIHRoZSBhdG9taWMgdXBkYXRlLCBldmVuIG9uIGxpdHRlIGVuZGlhbgorCSAqIGFyY2hpdGVjdHVyZXMuICBUaGUgd29ya2Fyb3VuZCB3ZSB1c2UgaXMgdG8gcHV0IGEgMCBpbiB0aGUKKwkgKiBoZWFkZXIgcXVhZGxldDsgMCBpcyBlbmRpYW4gYWdub3N0aWMgYW5kIG1lYW5zIHRoYXQgdGhlCisJICogY29uZmlnIHJvbSBpc24ndCByZWFkeSB5ZXQuICBJbiB0aGUgYnVzIHJlc2V0IHRhc2tsZXQgd2UKKwkgKiB0aGVuIHNldCB1cCB0aGUgcmVhbCB2YWx1ZXMgZm9yIHRoZSB0d28gcmVnaXN0ZXJzLgorCSAqCisJICogV2UgdXNlIG9oY2ktPmxvY2sgdG8gYXZvaWQgcmFjaW5nIHdpdGggdGhlIGNvZGUgdGhhdCBzZXRzCisJICogb2hjaS0+bmV4dF9jb25maWdfcm9tIHRvIE5VTEwgKHNlZSBidXNfcmVzZXRfdGFza2xldCkuCisJICovCisKKwluZXh0X2NvbmZpZ19yb20gPQorCQlkbWFfYWxsb2NfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKKwkJCQkgICAmbmV4dF9jb25maWdfcm9tX2J1cywgR0ZQX0tFUk5FTCk7CisJaWYgKG5leHRfY29uZmlnX3JvbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKwlpZiAob2hjaS0+bmV4dF9jb25maWdfcm9tID09IE5VTEwpIHsKKwkJb2hjaS0+bmV4dF9jb25maWdfcm9tID0gbmV4dF9jb25maWdfcm9tOworCQlvaGNpLT5uZXh0X2NvbmZpZ19yb21fYnVzID0gbmV4dF9jb25maWdfcm9tX2J1czsKKworCQltZW1zZXQob2hjaS0+bmV4dF9jb25maWdfcm9tLCAwLCBDT05GSUdfUk9NX1NJWkUpOworCQlmd19tZW1jcHlfdG9fYmUzMihvaGNpLT5uZXh0X2NvbmZpZ19yb20sIGNvbmZpZ19yb20sCisJCQkJICBsZW5ndGggKiA0KTsKKworCQlvaGNpLT5uZXh0X2hlYWRlciA9IGNvbmZpZ19yb21bMF07CisJCW9oY2ktPm5leHRfY29uZmlnX3JvbVswXSA9IDA7CisKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0NvbmZpZ1JPTW1hcCwKKwkJCSAgb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyk7CisJfSBlbHNlIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKKwkJCQkgIG5leHRfY29uZmlnX3JvbSwgbmV4dF9jb25maWdfcm9tX2J1cyk7CisJCXJldHZhbCA9IC1FQlVTWTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIE5vdyBpbml0aWF0ZSBhIGJ1cyByZXNldCB0byBoYXZlIHRoZSBjaGFuZ2VzIHRha2UKKwkgKiBlZmZlY3QuIFdlIGNsZWFuIHVwIHRoZSBvbGQgY29uZmlnIHJvbSBtZW1vcnkgYW5kIERNQQorCSAqIG1hcHBpbmdzIGluIHRoZSBidXMgcmVzZXQgdGFza2xldCwgc2luY2UgdGhlIE9IQ0kKKwkgKiBjb250cm9sbGVyIGNvdWxkIG5lZWQgdG8gYWNjZXNzIGl0IGJlZm9yZSB0aGUgYnVzIHJlc2V0CisJICogdGFrZXMgZWZmZWN0LgorCSAqLworCWlmIChyZXR2YWwgPT0gMCkKKwkJZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIDEpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgb2hjaV9zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3sKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koY2FyZCk7CisKKwlhdF9jb250ZXh0X3RyYW5zbWl0KCZvaGNpLT5hdF9yZXF1ZXN0X2N0eCwgcGFja2V0KTsKK30KKworc3RhdGljIHZvaWQgb2hjaV9zZW5kX3Jlc3BvbnNlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCit7CisJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBmd19vaGNpKGNhcmQpOworCisJYXRfY29udGV4dF90cmFuc21pdCgmb2hjaS0+YXRfcmVzcG9uc2VfY3R4LCBwYWNrZXQpOworfQorCitzdGF0aWMgaW50IG9oY2lfY2FuY2VsX3BhY2tldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQoreworCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKKwlzdHJ1Y3QgY29udGV4dCAqY3R4ID0gJm9oY2ktPmF0X3JlcXVlc3RfY3R4OworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJpdmVyX2RhdGEgPSBwYWNrZXQtPmRyaXZlcl9kYXRhOworCWludCByZXR2YWwgPSAtRU5PRU5UOworCisJdGFza2xldF9kaXNhYmxlKCZjdHgtPnRhc2tsZXQpOworCisJaWYgKHBhY2tldC0+YWNrICE9IDApCisJCWdvdG8gb3V0OworCisJZHJpdmVyX2RhdGEtPnBhY2tldCA9IE5VTEw7CisJcGFja2V0LT5hY2sgPSBSQ09ERV9DQU5DRUxMRUQ7CisJcGFja2V0LT5jYWxsYmFjayhwYWNrZXQsICZvaGNpLT5jYXJkLCBwYWNrZXQtPmFjayk7CisJcmV0dmFsID0gMDsKKworIG91dDoKKwl0YXNrbGV0X2VuYWJsZSgmY3R4LT50YXNrbGV0KTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK29oY2lfZW5hYmxlX3BoeXNfZG1hKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24pCit7CisJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBmd19vaGNpKGNhcmQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG4sIHJldHZhbCA9IDA7CisKKwkvKgorCSAqIEZJWE1FOiAgTWFrZSBzdXJlIHRoaXMgYml0bWFzayBpcyBjbGVhcmVkIHdoZW4gd2UgY2xlYXIgdGhlIGJ1c1Jlc2V0CisJICogaW50ZXJydXB0IGJpdC4gIENsZWFyIHBoeXNSZXFSZXNvdXJjZUFsbEJ1c2VzIG9uIGJ1cyByZXNldC4KKwkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKwlpZiAob2hjaS0+Z2VuZXJhdGlvbiAhPSBnZW5lcmF0aW9uKSB7CisJCXJldHZhbCA9IC1FU1RBTEU7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogTm90ZSwgaWYgdGhlIG5vZGUgSUQgY29udGFpbnMgYSBub24tbG9jYWwgYnVzIElELCBwaHlzaWNhbCBETUEgaXMKKwkgKiBlbmFibGVkIGZvciBfYWxsXyBub2RlcyBvbiByZW1vdGUgYnVzZXMuCisJICovCisKKwluID0gKG5vZGVfaWQgJiAweGZmYzApID09IExPQ0FMX0JVUyA/IG5vZGVfaWQgJiAweDNmIDogNjM7CisJaWYgKG4gPCAzMikKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X1BoeVJlcUZpbHRlckxvU2V0LCAxIDw8IG4pOworCWVsc2UKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X1BoeVJlcUZpbHRlckhpU2V0LCAxIDw8IChuIC0gMzIpKTsKKworCWZsdXNoX3dyaXRlcyhvaGNpKTsKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB1NjQKK29oY2lfZ2V0X2J1c190aW1lKHN0cnVjdCBmd19jYXJkICpjYXJkKQoreworCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKKwl1MzIgY3ljbGVfdGltZTsKKwl1NjQgYnVzX3RpbWU7CisKKwljeWNsZV90aW1lID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvY2hyb25vdXNDeWNsZVRpbWVyKTsKKwlidXNfdGltZSA9ICgodTY0KSBvaGNpLT5idXNfc2Vjb25kcyA8PCAzMikgfCBjeWNsZV90aW1lOworCisJcmV0dXJuIGJ1c190aW1lOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9pcl9kdWFsYnVmZmVyX3BhY2tldChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKKwkJCQkgICAgICAgc3RydWN0IGRlc2NyaXB0b3IgKmQsCisJCQkJICAgICAgIHN0cnVjdCBkZXNjcmlwdG9yICpsYXN0KQoreworCXN0cnVjdCBpc29fY29udGV4dCAqY3R4ID0KKwkJY29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBpc29fY29udGV4dCwgY29udGV4dCk7CisJc3RydWN0IGRiX2Rlc2NyaXB0b3IgKmRiID0gKHN0cnVjdCBkYl9kZXNjcmlwdG9yICopIGQ7CisJX19sZTMyICppcl9oZWFkZXI7CisJc2l6ZV90IGhlYWRlcl9sZW5ndGg7CisJdm9pZCAqcCwgKmVuZDsKKwlpbnQgaTsKKworCWlmIChkYi0+Zmlyc3RfcmVzX2NvdW50ID4gMCAmJiBkYi0+c2Vjb25kX3Jlc19jb3VudCA+IDApCisJCS8qIFRoaXMgZGVzY3JpcHRvciBpc24ndCBkb25lIHlldCwgc3RvcCBpdGVyYXRpb24uICovCisJCXJldHVybiAwOworCisJaGVhZGVyX2xlbmd0aCA9IGxlMTZfdG9fY3B1KGRiLT5maXJzdF9yZXFfY291bnQpIC0KKwkJbGUxNl90b19jcHUoZGItPmZpcnN0X3Jlc19jb3VudCk7CisKKwlpID0gY3R4LT5oZWFkZXJfbGVuZ3RoOworCXAgPSBkYiArIDE7CisJZW5kID0gcCArIGhlYWRlcl9sZW5ndGg7CisJd2hpbGUgKHAgPCBlbmQgJiYgaSArIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSA8PSBQQUdFX1NJWkUpIHsKKwkJLyoKKwkJICogVGhlIGlzbyBoZWFkZXIgaXMgYnl0ZXN3YXBwZWQgdG8gbGl0dGxlIGVuZGlhbiBieQorCQkgKiB0aGUgY29udHJvbGxlciwgYnV0IHRoZSByZW1haW5pbmcgaGVhZGVyIHF1YWRsZXRzCisJCSAqIGFyZSBiaWcgZW5kaWFuLiAgV2Ugd2FudCB0byBwcmVzZW50IGFsbCB0aGUgaGVhZGVycworCQkgKiBhcyBiaWcgZW5kaWFuLCBzbyB3ZSBoYXZlIHRvIHN3YXAgdGhlIGZpcnN0CisJCSAqIHF1YWRsZXQuCisJCSAqLworCQkqKHUzMiAqKSAoY3R4LT5oZWFkZXIgKyBpKSA9IF9fc3dhYjMyKCoodTMyICopIChwICsgNCkpOworCQltZW1jcHkoY3R4LT5oZWFkZXIgKyBpICsgNCwgcCArIDgsIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSAtIDQpOworCQlpICs9IGN0eC0+YmFzZS5oZWFkZXJfc2l6ZTsKKwkJcCArPSBjdHgtPmJhc2UuaGVhZGVyX3NpemUgKyA0OworCX0KKworCWN0eC0+aGVhZGVyX2xlbmd0aCA9IGk7CisKKwlpZiAobGUxNl90b19jcHUoZGItPmNvbnRyb2wpICYgREVTQ1JJUFRPUl9JUlFfQUxXQVlTKSB7CisJCWlyX2hlYWRlciA9IChfX2xlMzIgKikgKGRiICsgMSk7CisJCWN0eC0+YmFzZS5jYWxsYmFjaygmY3R4LT5iYXNlLAorCQkJCSAgIGxlMzJfdG9fY3B1KGlyX2hlYWRlclswXSkgJiAweGZmZmYsCisJCQkJICAgY3R4LT5oZWFkZXJfbGVuZ3RoLCBjdHgtPmhlYWRlciwKKwkJCQkgICBjdHgtPmJhc2UuY2FsbGJhY2tfZGF0YSk7CisJCWN0eC0+aGVhZGVyX2xlbmd0aCA9IDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2l0X3BhY2tldChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKKwkJCSAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqZCwKKwkJCSAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqbGFzdCkKK3sKKwlzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCA9CisJCWNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgaXNvX2NvbnRleHQsIGNvbnRleHQpOworCisJaWYgKGxhc3QtPnRyYW5zZmVyX3N0YXR1cyA9PSAwKQorCQkvKiBUaGlzIGRlc2NyaXB0b3IgaXNuJ3QgZG9uZSB5ZXQsIHN0b3AgaXRlcmF0aW9uLiAqLworCQlyZXR1cm4gMDsKKworCWlmIChsZTE2X3RvX2NwdShsYXN0LT5jb250cm9sKSAmIERFU0NSSVBUT1JfSVJRX0FMV0FZUykKKwkJY3R4LT5iYXNlLmNhbGxiYWNrKCZjdHgtPmJhc2UsIGxlMTZfdG9fY3B1KGxhc3QtPnJlc19jb3VudCksCisJCQkJICAgMCwgTlVMTCwgY3R4LT5iYXNlLmNhbGxiYWNrX2RhdGEpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKgorb2hjaV9hbGxvY2F0ZV9pc29fY29udGV4dChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHR5cGUsIHNpemVfdCBoZWFkZXJfc2l6ZSkKK3sKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koY2FyZCk7CisJc3RydWN0IGlzb19jb250ZXh0ICpjdHgsICpsaXN0OworCWRlc2NyaXB0b3JfY2FsbGJhY2tfdCBjYWxsYmFjazsKKwl1MzIgKm1hc2ssIHJlZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaW5kZXgsIHJldHZhbCA9IC1FTk9NRU07CisKKwlpZiAodHlwZSA9PSBGV19JU09fQ09OVEVYVF9UUkFOU01JVCkgeworCQltYXNrID0gJm9oY2ktPml0X2NvbnRleHRfbWFzazsKKwkJbGlzdCA9IG9oY2ktPml0X2NvbnRleHRfbGlzdDsKKwkJY2FsbGJhY2sgPSBoYW5kbGVfaXRfcGFja2V0OworCX0gZWxzZSB7CisJCW1hc2sgPSAmb2hjaS0+aXJfY29udGV4dF9tYXNrOworCQlsaXN0ID0gb2hjaS0+aXJfY29udGV4dF9saXN0OworCQljYWxsYmFjayA9IGhhbmRsZV9pcl9kdWFsYnVmZmVyX3BhY2tldDsKKwl9CisKKwkvKiBGSVhNRTogV2UgbmVlZCBhIGZhbGxiYWNrIGZvciBwcmUgMS4xIE9IQ0kuICovCisJaWYgKGNhbGxiYWNrID09IGhhbmRsZV9pcl9kdWFsYnVmZmVyX3BhY2tldCAmJgorCSAgICBvaGNpLT52ZXJzaW9uIDwgT0hDSV9WRVJTSU9OXzFfMSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2hjaS0+bG9jaywgZmxhZ3MpOworCWluZGV4ID0gZmZzKCptYXNrKSAtIDE7CisJaWYgKGluZGV4ID49IDApCisJCSptYXNrICY9IH4oMSA8PCBpbmRleCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJaWYgKGluZGV4IDwgMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKworCWlmICh0eXBlID09IEZXX0lTT19DT05URVhUX1RSQU5TTUlUKQorCQlyZWdzID0gT0hDSTEzOTRfSXNvWG1pdENvbnRleHRCYXNlKGluZGV4KTsKKwllbHNlCisJCXJlZ3MgPSBPSENJMTM5NF9Jc29SY3ZDb250ZXh0QmFzZShpbmRleCk7CisKKwljdHggPSAmbGlzdFtpbmRleF07CisJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKKwljdHgtPmhlYWRlcl9sZW5ndGggPSAwOworCWN0eC0+aGVhZGVyID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmIChjdHgtPmhlYWRlciA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJldHZhbCA9IGNvbnRleHRfaW5pdCgmY3R4LT5jb250ZXh0LCBvaGNpLCBJU09fQlVGRkVSX1NJWkUsCisJCQkgICAgICByZWdzLCBjYWxsYmFjayk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gb3V0X3dpdGhfaGVhZGVyOworCisJcmV0dXJuICZjdHgtPmJhc2U7CisKKyBvdXRfd2l0aF9oZWFkZXI6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWN0eC0+aGVhZGVyKTsKKyBvdXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwkqbWFzayB8PSAxIDw8IGluZGV4OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBFUlJfUFRSKHJldHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9zdGFydF9pc28oc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAorCQkJICBzMzIgY3ljbGUsIHUzMiBzeW5jLCB1MzIgdGFncykKK3sKKwlzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgaXNvX2NvbnRleHQsIGJhc2UpOworCXN0cnVjdCBmd19vaGNpICpvaGNpID0gY3R4LT5jb250ZXh0Lm9oY2k7CisJdTMyIGNvbnRyb2wsIG1hdGNoOworCWludCBpbmRleDsKKworCWlmIChjdHgtPmJhc2UudHlwZSA9PSBGV19JU09fQ09OVEVYVF9UUkFOU01JVCkgeworCQlpbmRleCA9IGN0eCAtIG9oY2ktPml0X2NvbnRleHRfbGlzdDsKKwkJbWF0Y2ggPSAwOworCQlpZiAoY3ljbGUgPj0gMCkKKwkJCW1hdGNoID0gSVRfQ09OVEVYVF9DWUNMRV9NQVRDSF9FTkFCTEUgfAorCQkJCShjeWNsZSAmIDB4N2ZmZikgPDwgMTY7CisKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRFdmVudENsZWFyLCAxIDw8IGluZGV4KTsKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrU2V0LCAxIDw8IGluZGV4KTsKKwkJY29udGV4dF9ydW4oJmN0eC0+Y29udGV4dCwgbWF0Y2gpOworCX0gZWxzZSB7CisJCWluZGV4ID0gY3R4IC0gb2hjaS0+aXJfY29udGV4dF9saXN0OworCQljb250cm9sID0gSVJfQ09OVEVYVF9EVUFMX0JVRkZFUl9NT0RFIHwgSVJfQ09OVEVYVF9JU09DSF9IRUFERVI7CisJCW1hdGNoID0gKHRhZ3MgPDwgMjgpIHwgKHN5bmMgPDwgOCkgfCBjdHgtPmJhc2UuY2hhbm5lbDsKKwkJaWYgKGN5Y2xlID49IDApIHsKKwkJCW1hdGNoIHw9IChjeWNsZSAmIDB4MDdmZmYpIDw8IDEyOworCQkJY29udHJvbCB8PSBJUl9DT05URVhUX0NZQ0xFX01BVENIX0VOQUJMRTsKKwkJfQorCisJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50RXZlbnRDbGVhciwgMSA8PCBpbmRleCk7CisJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50TWFza1NldCwgMSA8PCBpbmRleCk7CisJCXJlZ193cml0ZShvaGNpLCBDT05URVhUX01BVENIKGN0eC0+Y29udGV4dC5yZWdzKSwgbWF0Y2gpOworCQljb250ZXh0X3J1bigmY3R4LT5jb250ZXh0LCBjb250cm9sKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvaGNpX3N0b3BfaXNvKHN0cnVjdCBmd19pc29fY29udGV4dCAqYmFzZSkKK3sKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koYmFzZS0+Y2FyZCk7CisJc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKKwlpbnQgaW5kZXg7CisKKwlpZiAoY3R4LT5iYXNlLnR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQpIHsKKwkJaW5kZXggPSBjdHggLSBvaGNpLT5pdF9jb250ZXh0X2xpc3Q7CisJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza0NsZWFyLCAxIDw8IGluZGV4KTsKKwl9IGVsc2UgeworCQlpbmRleCA9IGN0eCAtIG9oY2ktPmlyX2NvbnRleHRfbGlzdDsKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRNYXNrQ2xlYXIsIDEgPDwgaW5kZXgpOworCX0KKwlmbHVzaF93cml0ZXMob2hjaSk7CisJY29udGV4dF9zdG9wKCZjdHgtPmNvbnRleHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9oY2lfZnJlZV9pc29fY29udGV4dChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UpCit7CisJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBmd19vaGNpKGJhc2UtPmNhcmQpOworCXN0cnVjdCBpc29fY29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCBpc29fY29udGV4dCwgYmFzZSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaW5kZXg7CisKKwlvaGNpX3N0b3BfaXNvKGJhc2UpOworCWNvbnRleHRfcmVsZWFzZSgmY3R4LT5jb250ZXh0KTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY3R4LT5oZWFkZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCWlmIChjdHgtPmJhc2UudHlwZSA9PSBGV19JU09fQ09OVEVYVF9UUkFOU01JVCkgeworCQlpbmRleCA9IGN0eCAtIG9oY2ktPml0X2NvbnRleHRfbGlzdDsKKwkJb2hjaS0+aXRfY29udGV4dF9tYXNrIHw9IDEgPDwgaW5kZXg7CisJfSBlbHNlIHsKKwkJaW5kZXggPSBjdHggLSBvaGNpLT5pcl9jb250ZXh0X2xpc3Q7CisJCW9oY2ktPmlyX2NvbnRleHRfbWFzayB8PSAxIDw8IGluZGV4OworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludAorb2hjaV9xdWV1ZV9pc29fdHJhbnNtaXQoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAorCQkJc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKKwkJCXN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCisJCQl1bnNpZ25lZCBsb25nIHBheWxvYWQpCit7CisJc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKKwlzdHJ1Y3QgZGVzY3JpcHRvciAqZCwgKmxhc3QsICpwZDsKKwlzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcDsKKwlfX2xlMzIgKmhlYWRlcjsKKwlkbWFfYWRkcl90IGRfYnVzLCBwYWdlX2J1czsKKwl1MzIgeiwgaGVhZGVyX3osIHBheWxvYWRfeiwgaXJxOworCXUzMiBwYXlsb2FkX2luZGV4LCBwYXlsb2FkX2VuZF9pbmRleCwgbmV4dF9wYWdlX2luZGV4OworCWludCBwYWdlLCBlbmRfcGFnZSwgaSwgbGVuZ3RoLCBvZmZzZXQ7CisKKwkvKgorCSAqIEZJWE1FOiBDeWNsZSBsb3N0IGJlaGF2aW9yIHNob3VsZCBiZSBjb25maWd1cmFibGU6IGxvc2UKKwkgKiBwYWNrZXQsIHJldHJhbnNtaXQgb3IgdGVybWluYXRlLi4KKwkgKi8KKworCXAgPSBwYWNrZXQ7CisJcGF5bG9hZF9pbmRleCA9IHBheWxvYWQ7CisKKwlpZiAocC0+c2tpcCkKKwkJeiA9IDE7CisJZWxzZQorCQl6ID0gMjsKKwlpZiAocC0+aGVhZGVyX2xlbmd0aCA+IDApCisJCXorKzsKKworCS8qIERldGVybWluZSB0aGUgZmlyc3QgcGFnZSB0aGUgcGF5bG9hZCBpc24ndCBjb250YWluZWQgaW4uICovCisJZW5kX3BhZ2UgPSBQQUdFX0FMSUdOKHBheWxvYWRfaW5kZXggKyBwLT5wYXlsb2FkX2xlbmd0aCkgPj4gUEFHRV9TSElGVDsKKwlpZiAocC0+cGF5bG9hZF9sZW5ndGggPiAwKQorCQlwYXlsb2FkX3ogPSBlbmRfcGFnZSAtIChwYXlsb2FkX2luZGV4ID4+IFBBR0VfU0hJRlQpOworCWVsc2UKKwkJcGF5bG9hZF96ID0gMDsKKworCXogKz0gcGF5bG9hZF96OworCisJLyogR2V0IGhlYWRlciBzaXplIGluIG51bWJlciBvZiBkZXNjcmlwdG9ycy4gKi8KKwloZWFkZXJfeiA9IERJVl9ST1VORF9VUChwLT5oZWFkZXJfbGVuZ3RoLCBzaXplb2YoKmQpKTsKKworCWQgPSBjb250ZXh0X2dldF9kZXNjcmlwdG9ycygmY3R4LT5jb250ZXh0LCB6ICsgaGVhZGVyX3osICZkX2J1cyk7CisJaWYgKGQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIXAtPnNraXApIHsKKwkJZFswXS5jb250cm9sICAgPSBjcHVfdG9fbGUxNihERVNDUklQVE9SX0tFWV9JTU1FRElBVEUpOworCQlkWzBdLnJlcV9jb3VudCA9IGNwdV90b19sZTE2KDgpOworCisJCWhlYWRlciA9IChfX2xlMzIgKikgJmRbMV07CisJCWhlYWRlclswXSA9IGNwdV90b19sZTMyKElUX0hFQURFUl9TWShwLT5zeSkgfAorCQkJCQlJVF9IRUFERVJfVEFHKHAtPnRhZykgfAorCQkJCQlJVF9IRUFERVJfVENPREUoVENPREVfU1RSRUFNX0RBVEEpIHwKKwkJCQkJSVRfSEVBREVSX0NIQU5ORUwoY3R4LT5iYXNlLmNoYW5uZWwpIHwKKwkJCQkJSVRfSEVBREVSX1NQRUVEKGN0eC0+YmFzZS5zcGVlZCkpOworCQloZWFkZXJbMV0gPQorCQkJY3B1X3RvX2xlMzIoSVRfSEVBREVSX0RBVEFfTEVOR1RIKHAtPmhlYWRlcl9sZW5ndGggKworCQkJCQkJCSAgcC0+cGF5bG9hZF9sZW5ndGgpKTsKKwl9CisKKwlpZiAocC0+aGVhZGVyX2xlbmd0aCA+IDApIHsKKwkJZFsyXS5yZXFfY291bnQgICAgPSBjcHVfdG9fbGUxNihwLT5oZWFkZXJfbGVuZ3RoKTsKKwkJZFsyXS5kYXRhX2FkZHJlc3MgPSBjcHVfdG9fbGUzMihkX2J1cyArIHogKiBzaXplb2YoKmQpKTsKKwkJbWVtY3B5KCZkW3pdLCBwLT5oZWFkZXIsIHAtPmhlYWRlcl9sZW5ndGgpOworCX0KKworCXBkID0gZCArIHogLSBwYXlsb2FkX3o7CisJcGF5bG9hZF9lbmRfaW5kZXggPSBwYXlsb2FkX2luZGV4ICsgcC0+cGF5bG9hZF9sZW5ndGg7CisJZm9yIChpID0gMDsgaSA8IHBheWxvYWRfejsgaSsrKSB7CisJCXBhZ2UgICAgICAgICAgICAgICA9IHBheWxvYWRfaW5kZXggPj4gUEFHRV9TSElGVDsKKwkJb2Zmc2V0ICAgICAgICAgICAgID0gcGF5bG9hZF9pbmRleCAmIH5QQUdFX01BU0s7CisJCW5leHRfcGFnZV9pbmRleCAgICA9IChwYWdlICsgMSkgPDwgUEFHRV9TSElGVDsKKwkJbGVuZ3RoICAgICAgICAgICAgID0KKwkJCW1pbihuZXh0X3BhZ2VfaW5kZXgsIHBheWxvYWRfZW5kX2luZGV4KSAtIHBheWxvYWRfaW5kZXg7CisJCXBkW2ldLnJlcV9jb3VudCAgICA9IGNwdV90b19sZTE2KGxlbmd0aCk7CisKKwkJcGFnZV9idXMgPSBwYWdlX3ByaXZhdGUoYnVmZmVyLT5wYWdlc1twYWdlXSk7CisJCXBkW2ldLmRhdGFfYWRkcmVzcyA9IGNwdV90b19sZTMyKHBhZ2VfYnVzICsgb2Zmc2V0KTsKKworCQlwYXlsb2FkX2luZGV4ICs9IGxlbmd0aDsKKwl9CisKKwlpZiAocC0+aW50ZXJydXB0KQorCQlpcnEgPSBERVNDUklQVE9SX0lSUV9BTFdBWVM7CisJZWxzZQorCQlpcnEgPSBERVNDUklQVE9SX05PX0lSUTsKKworCWxhc3QgPSB6ID09IDIgPyBkIDogZCArIHogLSAxOworCWxhc3QtPmNvbnRyb2wgfD0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9PVVRQVVRfTEFTVCB8CisJCQkJICAgICBERVNDUklQVE9SX1NUQVRVUyB8CisJCQkJICAgICBERVNDUklQVE9SX0JSQU5DSF9BTFdBWVMgfAorCQkJCSAgICAgaXJxKTsKKworCWNvbnRleHRfYXBwZW5kKCZjdHgtPmNvbnRleHQsIGQsIHosIGhlYWRlcl96KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX2R1YWxidWZmZXIoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAorCQkJCSAgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKKwkJCQkgIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCisJCQkJICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCit7CisJc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKKwlzdHJ1Y3QgZGJfZGVzY3JpcHRvciAqZGIgPSBOVUxMOworCXN0cnVjdCBkZXNjcmlwdG9yICpkOworCXN0cnVjdCBmd19pc29fcGFja2V0ICpwOworCWRtYV9hZGRyX3QgZF9idXMsIHBhZ2VfYnVzOworCXUzMiB6LCBoZWFkZXJfeiwgbGVuZ3RoLCByZXN0OworCWludCBwYWdlLCBvZmZzZXQsIHBhY2tldF9jb3VudCwgaGVhZGVyX3NpemU7CisKKwkvKgorCSAqIEZJWE1FOiBDeWNsZSBsb3N0IGJlaGF2aW9yIHNob3VsZCBiZSBjb25maWd1cmFibGU6IGxvc2UKKwkgKiBwYWNrZXQsIHJldHJhbnNtaXQgb3IgdGVybWluYXRlLi4KKwkgKi8KKworCWlmIChwYWNrZXQtPnNraXApIHsKKwkJZCA9IGNvbnRleHRfZ2V0X2Rlc2NyaXB0b3JzKCZjdHgtPmNvbnRleHQsIDIsICZkX2J1cyk7CisJCWlmIChkID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlkYiA9IChzdHJ1Y3QgZGJfZGVzY3JpcHRvciAqKSBkOworCQlkYi0+Y29udHJvbCA9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfU1RBVFVTIHwKKwkJCQkJICBERVNDUklQVE9SX0JSQU5DSF9BTFdBWVMgfAorCQkJCQkgIERFU0NSSVBUT1JfV0FJVCk7CisJCWRiLT5maXJzdF9zaXplID0gY3B1X3RvX2xlMTYoY3R4LT5iYXNlLmhlYWRlcl9zaXplICsgNCk7CisJCWNvbnRleHRfYXBwZW5kKCZjdHgtPmNvbnRleHQsIGQsIDIsIDApOworCX0KKworCXAgPSBwYWNrZXQ7CisJeiA9IDI7CisKKwkvKgorCSAqIFRoZSBPSENJIGNvbnRyb2xsZXIgcHV0cyB0aGUgc3RhdHVzIHdvcmQgaW4gdGhlIGhlYWRlcgorCSAqIGJ1ZmZlciB0b28sIHNvIHdlIG5lZWQgNCBleHRyYSBieXRlcyBwZXIgcGFja2V0LgorCSAqLworCXBhY2tldF9jb3VudCA9IHAtPmhlYWRlcl9sZW5ndGggLyBjdHgtPmJhc2UuaGVhZGVyX3NpemU7CisJaGVhZGVyX3NpemUgPSBwYWNrZXRfY291bnQgKiAoY3R4LT5iYXNlLmhlYWRlcl9zaXplICsgNCk7CisKKwkvKiBHZXQgaGVhZGVyIHNpemUgaW4gbnVtYmVyIG9mIGRlc2NyaXB0b3JzLiAqLworCWhlYWRlcl96ID0gRElWX1JPVU5EX1VQKGhlYWRlcl9zaXplLCBzaXplb2YoKmQpKTsKKwlwYWdlICAgICA9IHBheWxvYWQgPj4gUEFHRV9TSElGVDsKKwlvZmZzZXQgICA9IHBheWxvYWQgJiB+UEFHRV9NQVNLOworCXJlc3QgICAgID0gcC0+cGF5bG9hZF9sZW5ndGg7CisKKwkvKiBGSVhNRTogT0hDSSAxLjAgZG9lc24ndCBzdXBwb3J0IGR1YWwgYnVmZmVyIHJlY2VpdmUgKi8KKwkvKiBGSVhNRTogbWFrZSBwYWNrZXQtcGVyLWJ1ZmZlci9kdWFsLWJ1ZmZlciBhIGNvbnRleHQgb3B0aW9uICovCisJd2hpbGUgKHJlc3QgPiAwKSB7CisJCWQgPSBjb250ZXh0X2dldF9kZXNjcmlwdG9ycygmY3R4LT5jb250ZXh0LAorCQkJCQkgICAgeiArIGhlYWRlcl96LCAmZF9idXMpOworCQlpZiAoZCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZGIgPSAoc3RydWN0IGRiX2Rlc2NyaXB0b3IgKikgZDsKKwkJZGItPmNvbnRyb2wgPSBjcHVfdG9fbGUxNihERVNDUklQVE9SX1NUQVRVUyB8CisJCQkJCSAgREVTQ1JJUFRPUl9CUkFOQ0hfQUxXQVlTKTsKKwkJZGItPmZpcnN0X3NpemUgPSBjcHVfdG9fbGUxNihjdHgtPmJhc2UuaGVhZGVyX3NpemUgKyA0KTsKKwkJZGItPmZpcnN0X3JlcV9jb3VudCA9IGNwdV90b19sZTE2KGhlYWRlcl9zaXplKTsKKwkJZGItPmZpcnN0X3Jlc19jb3VudCA9IGRiLT5maXJzdF9yZXFfY291bnQ7CisJCWRiLT5maXJzdF9idWZmZXIgPSBjcHVfdG9fbGUzMihkX2J1cyArIHNpemVvZigqZGIpKTsKKworCQlpZiAob2Zmc2V0ICsgcmVzdCA8IFBBR0VfU0laRSkKKwkJCWxlbmd0aCA9IHJlc3Q7CisJCWVsc2UKKwkJCWxlbmd0aCA9IFBBR0VfU0laRSAtIG9mZnNldDsKKworCQlkYi0+c2Vjb25kX3JlcV9jb3VudCA9IGNwdV90b19sZTE2KGxlbmd0aCk7CisJCWRiLT5zZWNvbmRfcmVzX2NvdW50ID0gZGItPnNlY29uZF9yZXFfY291bnQ7CisJCXBhZ2VfYnVzID0gcGFnZV9wcml2YXRlKGJ1ZmZlci0+cGFnZXNbcGFnZV0pOworCQlkYi0+c2Vjb25kX2J1ZmZlciA9IGNwdV90b19sZTMyKHBhZ2VfYnVzICsgb2Zmc2V0KTsKKworCQlpZiAocC0+aW50ZXJydXB0ICYmIGxlbmd0aCA9PSByZXN0KQorCQkJZGItPmNvbnRyb2wgfD0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9JUlFfQUxXQVlTKTsKKworCQljb250ZXh0X2FwcGVuZCgmY3R4LT5jb250ZXh0LCBkLCB6LCBoZWFkZXJfeik7CisJCW9mZnNldCA9IChvZmZzZXQgKyBsZW5ndGgpICYgflBBR0VfTUFTSzsKKwkJcmVzdCAtPSBsZW5ndGg7CisJCXBhZ2UrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorb2hjaV9xdWV1ZV9pc28oc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAorCSAgICAgICBzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAorCSAgICAgICBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAorCSAgICAgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCit7CisJc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKKworCWlmIChiYXNlLT50eXBlID09IEZXX0lTT19DT05URVhUX1RSQU5TTUlUKQorCQlyZXR1cm4gb2hjaV9xdWV1ZV9pc29fdHJhbnNtaXQoYmFzZSwgcGFja2V0LCBidWZmZXIsIHBheWxvYWQpOworCWVsc2UgaWYgKGN0eC0+Y29udGV4dC5vaGNpLT52ZXJzaW9uID49IE9IQ0lfVkVSU0lPTl8xXzEpCisJCXJldHVybiBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX2R1YWxidWZmZXIoYmFzZSwgcGFja2V0LAorCQkJCQkJCSBidWZmZXIsIHBheWxvYWQpOworCWVsc2UKKwkJLyogRklYTUU6IEltcGxlbWVudCBmYWxsYmFjayBmb3IgT0hDSSAxLjAgY29udHJvbGxlcnMuICovCisJCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X2NhcmRfZHJpdmVyIG9oY2lfZHJpdmVyID0geworCS5uYW1lCQkJPSBvaGNpX2RyaXZlcl9uYW1lLAorCS5lbmFibGUJCQk9IG9oY2lfZW5hYmxlLAorCS51cGRhdGVfcGh5X3JlZwkJPSBvaGNpX3VwZGF0ZV9waHlfcmVnLAorCS5zZXRfY29uZmlnX3JvbQkJPSBvaGNpX3NldF9jb25maWdfcm9tLAorCS5zZW5kX3JlcXVlc3QJCT0gb2hjaV9zZW5kX3JlcXVlc3QsCisJLnNlbmRfcmVzcG9uc2UJCT0gb2hjaV9zZW5kX3Jlc3BvbnNlLAorCS5jYW5jZWxfcGFja2V0CQk9IG9oY2lfY2FuY2VsX3BhY2tldCwKKwkuZW5hYmxlX3BoeXNfZG1hCT0gb2hjaV9lbmFibGVfcGh5c19kbWEsCisJLmdldF9idXNfdGltZQkJPSBvaGNpX2dldF9idXNfdGltZSwKKworCS5hbGxvY2F0ZV9pc29fY29udGV4dAk9IG9oY2lfYWxsb2NhdGVfaXNvX2NvbnRleHQsCisJLmZyZWVfaXNvX2NvbnRleHQJPSBvaGNpX2ZyZWVfaXNvX2NvbnRleHQsCisJLnF1ZXVlX2lzbwkJPSBvaGNpX3F1ZXVlX2lzbywKKwkuc3RhcnRfaXNvCQk9IG9oY2lfc3RhcnRfaXNvLAorCS5zdG9wX2lzbwkJPSBvaGNpX3N0b3BfaXNvLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQKK3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0cnVjdCBmd19vaGNpICpvaGNpOworCXUzMiBidXNfb3B0aW9ucywgbWF4X3JlY2VpdmUsIGxpbmtfc3BlZWQ7CisJdTY0IGd1aWQ7CisJaW50IGVycjsKKwlzaXplX3Qgc2l6ZTsKKworCW9oY2kgPSBremFsbG9jKHNpemVvZigqb2hjaSksIEdGUF9LRVJORUwpOworCWlmIChvaGNpID09IE5VTEwpIHsKKwkJZndfZXJyb3IoIkNvdWxkIG5vdCBtYWxsb2MgZndfb2hjaSBkYXRhLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZ3X2NhcmRfaW5pdGlhbGl6ZSgmb2hjaS0+Y2FyZCwgJm9oY2lfZHJpdmVyLCAmZGV2LT5kZXYpOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWZ3X2Vycm9yKCJGYWlsZWQgdG8gZW5hYmxlIE9IQ0kgaGFyZHdhcmUuXG4iKTsKKwkJZ290byBmYWlsX3B1dF9jYXJkOworCX0KKworCXBjaV9zZXRfbWFzdGVyKGRldik7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIE9IQ0kxMzk0X1BDSV9IQ0lfQ29udHJvbCwgMCk7CisJcGNpX3NldF9kcnZkYXRhKGRldiwgb2hjaSk7CisKKwlzcGluX2xvY2tfaW5pdCgmb2hjaS0+bG9jayk7CisKKwl0YXNrbGV0X2luaXQoJm9oY2ktPmJ1c19yZXNldF90YXNrbGV0LAorCQkgICAgIGJ1c19yZXNldF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylvaGNpKTsKKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihkZXYsIDAsIG9oY2lfZHJpdmVyX25hbWUpOworCWlmIChlcnIpIHsKKwkJZndfZXJyb3IoIk1NSU8gcmVzb3VyY2UgdW5hdmFpbGFibGVcbiIpOworCQlnb3RvIGZhaWxfZGlzYWJsZTsKKwl9CisKKwlvaGNpLT5yZWdpc3RlcnMgPSBwY2lfaW9tYXAoZGV2LCAwLCBPSENJMTM5NF9SRUdJU1RFUl9TSVpFKTsKKwlpZiAob2hjaS0+cmVnaXN0ZXJzID09IE5VTEwpIHsKKwkJZndfZXJyb3IoIkZhaWxlZCB0byByZW1hcCByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZmFpbF9pb21lbTsKKwl9CisKKwlhcl9jb250ZXh0X2luaXQoJm9oY2ktPmFyX3JlcXVlc3RfY3R4LCBvaGNpLAorCQkJT0hDSTEzOTRfQXNSZXFSY3ZDb250ZXh0Q29udHJvbFNldCk7CisKKwlhcl9jb250ZXh0X2luaXQoJm9oY2ktPmFyX3Jlc3BvbnNlX2N0eCwgb2hjaSwKKwkJCU9IQ0kxMzk0X0FzUnNwUmN2Q29udGV4dENvbnRyb2xTZXQpOworCisJY29udGV4dF9pbml0KCZvaGNpLT5hdF9yZXF1ZXN0X2N0eCwgb2hjaSwgQVRfQlVGRkVSX1NJWkUsCisJCSAgICAgT0hDSTEzOTRfQXNSZXFUckNvbnRleHRDb250cm9sU2V0LCBoYW5kbGVfYXRfcGFja2V0KTsKKworCWNvbnRleHRfaW5pdCgmb2hjaS0+YXRfcmVzcG9uc2VfY3R4LCBvaGNpLCBBVF9CVUZGRVJfU0laRSwKKwkJICAgICBPSENJMTM5NF9Bc1JzcFRyQ29udGV4dENvbnRyb2xTZXQsIGhhbmRsZV9hdF9wYWNrZXQpOworCisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRNYXNrU2V0LCB+MCk7CisJb2hjaS0+aXRfY29udGV4dF9tYXNrID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvUmVjdkludE1hc2tTZXQpOworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50TWFza0NsZWFyLCB+MCk7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNvX2NvbnRleHQpICogaHdlaWdodDMyKG9oY2ktPml0X2NvbnRleHRfbWFzayk7CisJb2hjaS0+aXRfY29udGV4dF9saXN0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza1NldCwgfjApOworCW9oY2ktPmlyX2NvbnRleHRfbWFzayA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrU2V0KTsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSXNvWG1pdEludE1hc2tDbGVhciwgfjApOworCXNpemUgPSBzaXplb2Yoc3RydWN0IGlzb19jb250ZXh0KSAqIGh3ZWlnaHQzMihvaGNpLT5pcl9jb250ZXh0X21hc2spOworCW9oY2ktPmlyX2NvbnRleHRfbGlzdCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAob2hjaS0+aXRfY29udGV4dF9saXN0ID09IE5VTEwgfHwgb2hjaS0+aXJfY29udGV4dF9saXN0ID09IE5VTEwpIHsKKwkJZndfZXJyb3IoIk91dCBvZiBtZW1vcnkgZm9yIGl0L2lyIGNvbnRleHRzLlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9yZWdpc3RlcnM7CisJfQorCisJLyogc2VsZi1pZCBkbWEgYnVmZmVyIGFsbG9jYXRpb24gKi8KKwlvaGNpLT5zZWxmX2lkX2NwdSA9IGRtYV9hbGxvY19jb2hlcmVudChvaGNpLT5jYXJkLmRldmljZSwKKwkJCQkJICAgICAgIFNFTEZfSURfQlVGX1NJWkUsCisJCQkJCSAgICAgICAmb2hjaS0+c2VsZl9pZF9idXMsCisJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAob2hjaS0+c2VsZl9pZF9jcHUgPT0gTlVMTCkgeworCQlmd19lcnJvcigiT3V0IG9mIG1lbW9yeSBmb3Igc2VsZiBJRCBidWZmZXIuXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsX3JlZ2lzdGVyczsKKwl9CisKKwlidXNfb3B0aW9ucyA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0J1c09wdGlvbnMpOworCW1heF9yZWNlaXZlID0gKGJ1c19vcHRpb25zID4+IDEyKSAmIDB4ZjsKKwlsaW5rX3NwZWVkID0gYnVzX29wdGlvbnMgJiAweDc7CisJZ3VpZCA9ICgodTY0KSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9HVUlESGkpIDw8IDMyKSB8CisJCXJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0dVSURMbyk7CisKKwllcnIgPSBmd19jYXJkX2FkZCgmb2hjaS0+Y2FyZCwgbWF4X3JlY2VpdmUsIGxpbmtfc3BlZWQsIGd1aWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxfc2VsZl9pZDsKKworCW9oY2ktPnZlcnNpb24gPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9WZXJzaW9uKSAmIDB4MDBmZjAwZmY7CisJZndfbm90aWZ5KCJBZGRlZCBmdy1vaGNpIGRldmljZSAlcywgT0hDSSB2ZXJzaW9uICV4LiV4XG4iLAorCQkgIGRldi0+ZGV2LmJ1c19pZCwgb2hjaS0+dmVyc2lvbiA+PiAxNiwgb2hjaS0+dmVyc2lvbiAmIDB4ZmYpOworCisJcmV0dXJuIDA7CisKKyBmYWlsX3NlbGZfaWQ6CisJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIFNFTEZfSURfQlVGX1NJWkUsCisJCQkgIG9oY2ktPnNlbGZfaWRfY3B1LCBvaGNpLT5zZWxmX2lkX2J1cyk7CisgZmFpbF9yZWdpc3RlcnM6CisJa2ZyZWUob2hjaS0+aXRfY29udGV4dF9saXN0KTsKKwlrZnJlZShvaGNpLT5pcl9jb250ZXh0X2xpc3QpOworCXBjaV9pb3VubWFwKGRldiwgb2hjaS0+cmVnaXN0ZXJzKTsKKyBmYWlsX2lvbWVtOgorCXBjaV9yZWxlYXNlX3JlZ2lvbihkZXYsIDApOworIGZhaWxfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKyBmYWlsX3B1dF9jYXJkOgorCWZ3X2NhcmRfcHV0KCZvaGNpLT5jYXJkKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaTsKKworCW9oY2kgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50TWFza0NsZWFyLCB+MCk7CisJZmx1c2hfd3JpdGVzKG9oY2kpOworCWZ3X2NvcmVfcmVtb3ZlX2NhcmQoJm9oY2ktPmNhcmQpOworCisJLyoKKwkgKiBGSVhNRTogRmFpbCBhbGwgcGVuZGluZyBwYWNrZXRzIGhlcmUsIG5vdyB0aGF0IHRoZSB1cHBlcgorCSAqIGxheWVycyBjYW4ndCBxdWV1ZSBhbnkgbW9yZS4KKwkgKi8KKworCXNvZnR3YXJlX3Jlc2V0KG9oY2kpOworCWZyZWVfaXJxKGRldi0+aXJxLCBvaGNpKTsKKwlkbWFfZnJlZV9jb2hlcmVudChvaGNpLT5jYXJkLmRldmljZSwgU0VMRl9JRF9CVUZfU0laRSwKKwkJCSAgb2hjaS0+c2VsZl9pZF9jcHUsIG9oY2ktPnNlbGZfaWRfYnVzKTsKKwlrZnJlZShvaGNpLT5pdF9jb250ZXh0X2xpc3QpOworCWtmcmVlKG9oY2ktPmlyX2NvbnRleHRfbGlzdCk7CisJcGNpX2lvdW5tYXAoZGV2LCBvaGNpLT5yZWdpc3RlcnMpOworCXBjaV9yZWxlYXNlX3JlZ2lvbihkZXYsIDApOworCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCWZ3X2NhcmRfcHV0KCZvaGNpLT5jYXJkKTsKKworCWZ3X25vdGlmeSgiUmVtb3ZlZCBmdy1vaGNpIGRldmljZS5cbiIpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IGVycjsKKworCXNvZnR3YXJlX3Jlc2V0KG9oY2kpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgb2hjaSk7CisJZXJyID0gcGNpX3NhdmVfc3RhdGUocGRldik7CisJaWYgKGVycikgeworCQlmd19lcnJvcigicGNpX3NhdmVfc3RhdGUgZmFpbGVkIHdpdGggJWQiLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwllcnIgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwlpZiAoZXJyKSB7CisJCWZ3X2Vycm9yKCJwY2lfc2V0X3Bvd2VyX3N0YXRlIGZhaWxlZCB3aXRoICVkIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBmd19vaGNpICpvaGNpID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBlcnI7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlmd19lcnJvcigicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIHdpdGggJWQiLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBvaGNpX2VuYWJsZSgmb2hjaS0+Y2FyZCwgb2hjaS0+Y29uZmlnX3JvbSwgQ09ORklHX1JPTV9TSVpFKTsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX3RhYmxlW10gPSB7CisJeyBQQ0lfREVWSUNFX0NMQVNTKFBDSV9DTEFTU19TRVJJQUxfRklSRVdJUkVfT0hDSSwgfjApIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGZ3X29oY2lfcGNpX2RyaXZlciA9IHsKKwkubmFtZQkJPSBvaGNpX2RyaXZlcl9uYW1lLAorCS5pZF90YWJsZQk9IHBjaV90YWJsZSwKKwkucHJvYmUJCT0gcGNpX3Byb2JlLAorCS5yZW1vdmUJCT0gcGNpX3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkucmVzdW1lCQk9IHBjaV9yZXN1bWUsCisJLnN1c3BlbmQJPSBwY2lfc3VzcGVuZCwKKyNlbmRpZgorfTsKKworTU9EVUxFX0FVVEhPUigiS3Jpc3RpYW4gSG9lZ3NiZXJnIDxrcmhAYml0cGxhbmV0Lm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBQQ0kgT0hDSSBJRUVFMTM5NCBjb250cm9sbGVycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBQcm92aWRlIGEgbW9kdWxlIGFsaWFzIHNvIHJvb3Qtb24tc2JwMiBpbml0cmRzIGRvbid0IGJyZWFrLiAqLworI2lmbmRlZiBDT05GSUdfSUVFRTEzOTRfT0hDSTEzOTRfTU9EVUxFCitNT0RVTEVfQUxJQVMoIm9oY2kxMzk0Iik7CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgZndfb2hjaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmZ3X29oY2lfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmd19vaGNpX2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmZ3X29oY2lfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGZ3X29oY2lfaW5pdCk7Cittb2R1bGVfZXhpdChmd19vaGNpX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1vaGNpLmggYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LW9oY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTE1NzA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1vaGNpLmgKQEAgLTAsMCArMSwxNTMgQEAKKyNpZm5kZWYgX19md19vaGNpX2gKKyNkZWZpbmUgX19md19vaGNpX2gKKworLyogT0hDSSByZWdpc3RlciBtYXAgKi8KKworI2RlZmluZSBPSENJMTM5NF9WZXJzaW9uICAgICAgICAgICAgICAgICAgICAgIDB4MDAwCisjZGVmaW5lIE9IQ0kxMzk0X0dVSURfUk9NICAgICAgICAgICAgICAgICAgICAgMHgwMDQKKyNkZWZpbmUgT0hDSTEzOTRfQVRSZXRyaWVzICAgICAgICAgICAgICAgICAgICAweDAwOAorI2RlZmluZSBPSENJMTM5NF9DU1JEYXRhICAgICAgICAgICAgICAgICAgICAgIDB4MDBDCisjZGVmaW5lIE9IQ0kxMzk0X0NTUkNvbXBhcmVEYXRhICAgICAgICAgICAgICAgMHgwMTAKKyNkZWZpbmUgT0hDSTEzOTRfQ1NSQ29udHJvbCAgICAgICAgICAgICAgICAgICAweDAxNAorI2RlZmluZSBPSENJMTM5NF9Db25maWdST01oZHIgICAgICAgICAgICAgICAgIDB4MDE4CisjZGVmaW5lIE9IQ0kxMzk0X0J1c0lEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUMKKyNkZWZpbmUgT0hDSTEzOTRfQnVzT3B0aW9ucyAgICAgICAgICAgICAgICAgICAweDAyMAorI2RlZmluZSBPSENJMTM5NF9HVUlESGkgICAgICAgICAgICAgICAgICAgICAgIDB4MDI0CisjZGVmaW5lIE9IQ0kxMzk0X0dVSURMbyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjgKKyNkZWZpbmUgT0hDSTEzOTRfQ29uZmlnUk9NbWFwICAgICAgICAgICAgICAgICAweDAzNAorI2RlZmluZSBPSENJMTM5NF9Qb3N0ZWRXcml0ZUFkZHJlc3NMbyAgICAgICAgIDB4MDM4CisjZGVmaW5lIE9IQ0kxMzk0X1Bvc3RlZFdyaXRlQWRkcmVzc0hpICAgICAgICAgMHgwM0MKKyNkZWZpbmUgT0hDSTEzOTRfVmVuZG9ySUQgICAgICAgICAgICAgICAgICAgICAweDA0MAorI2RlZmluZSBPSENJMTM5NF9IQ0NvbnRyb2xTZXQgICAgICAgICAgICAgICAgIDB4MDUwCisjZGVmaW5lIE9IQ0kxMzk0X0hDQ29udHJvbENsZWFyICAgICAgICAgICAgICAgMHgwNTQKKyNkZWZpbmUgIE9IQ0kxMzk0X0hDQ29udHJvbF9CSUJpbWFnZVZhbGlkCTB4ODAwMDAwMDAKKyNkZWZpbmUgIE9IQ0kxMzk0X0hDQ29udHJvbF9ub0J5dGVTd2FwRGF0YQkweDQwMDAwMDAwCisjZGVmaW5lICBPSENJMTM5NF9IQ0NvbnRyb2xfcHJvZ3JhbVBoeUVuYWJsZQkweDAwODAwMDAwCisjZGVmaW5lICBPSENJMTM5NF9IQ0NvbnRyb2xfYVBoeUVuaGFuY2VFbmFibGUJMHgwMDQwMDAwMAorI2RlZmluZSAgT0hDSTEzOTRfSENDb250cm9sX0xQUwkJCTB4MDAwODAwMDAKKyNkZWZpbmUgIE9IQ0kxMzk0X0hDQ29udHJvbF9wb3N0ZWRXcml0ZUVuYWJsZQkweDAwMDQwMDAwCisjZGVmaW5lICBPSENJMTM5NF9IQ0NvbnRyb2xfbGlua0VuYWJsZQkJMHgwMDAyMDAwMAorI2RlZmluZSAgT0hDSTEzOTRfSENDb250cm9sX3NvZnRSZXNldAkJMHgwMDAxMDAwMAorI2RlZmluZSBPSENJMTM5NF9TZWxmSURCdWZmZXIgICAgICAgICAgICAgICAgIDB4MDY0CisjZGVmaW5lIE9IQ0kxMzk0X1NlbGZJRENvdW50ICAgICAgICAgICAgICAgICAgMHgwNjgKKyNkZWZpbmUgT0hDSTEzOTRfSVJNdWx0aUNoYW5NYXNrSGlTZXQgICAgICAgICAweDA3MAorI2RlZmluZSBPSENJMTM5NF9JUk11bHRpQ2hhbk1hc2tIaUNsZWFyICAgICAgIDB4MDc0CisjZGVmaW5lIE9IQ0kxMzk0X0lSTXVsdGlDaGFuTWFza0xvU2V0ICAgICAgICAgMHgwNzgKKyNkZWZpbmUgT0hDSTEzOTRfSVJNdWx0aUNoYW5NYXNrTG9DbGVhciAgICAgICAweDA3QworI2RlZmluZSBPSENJMTM5NF9JbnRFdmVudFNldCAgICAgICAgICAgICAgICAgIDB4MDgwCisjZGVmaW5lIE9IQ0kxMzk0X0ludEV2ZW50Q2xlYXIgICAgICAgICAgICAgICAgMHgwODQKKyNkZWZpbmUgT0hDSTEzOTRfSW50TWFza1NldCAgICAgICAgICAgICAgICAgICAweDA4OAorI2RlZmluZSBPSENJMTM5NF9JbnRNYXNrQ2xlYXIgICAgICAgICAgICAgICAgIDB4MDhDCisjZGVmaW5lIE9IQ0kxMzk0X0lzb1htaXRJbnRFdmVudFNldCAgICAgICAgICAgMHgwOTAKKyNkZWZpbmUgT0hDSTEzOTRfSXNvWG1pdEludEV2ZW50Q2xlYXIgICAgICAgICAweDA5NAorI2RlZmluZSBPSENJMTM5NF9Jc29YbWl0SW50TWFza1NldCAgICAgICAgICAgIDB4MDk4CisjZGVmaW5lIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrQ2xlYXIgICAgICAgICAgMHgwOUMKKyNkZWZpbmUgT0hDSTEzOTRfSXNvUmVjdkludEV2ZW50U2V0ICAgICAgICAgICAweDBBMAorI2RlZmluZSBPSENJMTM5NF9Jc29SZWN2SW50RXZlbnRDbGVhciAgICAgICAgIDB4MEE0CisjZGVmaW5lIE9IQ0kxMzk0X0lzb1JlY3ZJbnRNYXNrU2V0ICAgICAgICAgICAgMHgwQTgKKyNkZWZpbmUgT0hDSTEzOTRfSXNvUmVjdkludE1hc2tDbGVhciAgICAgICAgICAweDBBQworI2RlZmluZSBPSENJMTM5NF9Jbml0aWFsQmFuZHdpZHRoQXZhaWxhYmxlICAgIDB4MEIwCisjZGVmaW5lIE9IQ0kxMzk0X0luaXRpYWxDaGFubmVsc0F2YWlsYWJsZUhpICAgMHgwQjQKKyNkZWZpbmUgT0hDSTEzOTRfSW5pdGlhbENoYW5uZWxzQXZhaWxhYmxlTG8gICAweDBCOAorI2RlZmluZSBPSENJMTM5NF9GYWlybmVzc0NvbnRyb2wgICAgICAgICAgICAgIDB4MERDCisjZGVmaW5lIE9IQ0kxMzk0X0xpbmtDb250cm9sU2V0ICAgICAgICAgICAgICAgMHgwRTAKKyNkZWZpbmUgT0hDSTEzOTRfTGlua0NvbnRyb2xDbGVhciAgICAgICAgICAgICAweDBFNAorI2RlZmluZSAgIE9IQ0kxMzk0X0xpbmtDb250cm9sX3JjdlNlbGZJRAkoMSA8PCA5KQorI2RlZmluZSAgIE9IQ0kxMzk0X0xpbmtDb250cm9sX3JjdlBoeVBrdAkoMSA8PCAxMCkKKyNkZWZpbmUgICBPSENJMTM5NF9MaW5rQ29udHJvbF9jeWNsZVRpbWVyRW5hYmxlCSgxIDw8IDIwKQorI2RlZmluZSAgIE9IQ0kxMzk0X0xpbmtDb250cm9sX2N5Y2xlTWFzdGVyCSgxIDw8IDIxKQorI2RlZmluZSAgIE9IQ0kxMzk0X0xpbmtDb250cm9sX2N5Y2xlU291cmNlCSgxIDw8IDIyKQorI2RlZmluZSBPSENJMTM5NF9Ob2RlSUQgICAgICAgICAgICAgICAgICAgICAgIDB4MEU4CisjZGVmaW5lICAgT0hDSTEzOTRfTm9kZUlEX2lkVmFsaWQgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBPSENJMTM5NF9QaHlDb250cm9sICAgICAgICAgICAgICAgICAgIDB4MEVDCisjZGVmaW5lICAgT0hDSTEzOTRfUGh5Q29udHJvbF9SZWFkKGFkZHIpCSgoKGFkZHIpIDw8IDgpIHwgMHgwMDAwODAwMCkKKyNkZWZpbmUgICBPSENJMTM5NF9QaHlDb250cm9sX1JlYWREb25lCQkweDgwMDAwMDAwCisjZGVmaW5lICAgT0hDSTEzOTRfUGh5Q29udHJvbF9SZWFkRGF0YShyKQkoKChyKSAmIDB4MDBmZjAwMDApID4+IDE2KQorI2RlZmluZSAgIE9IQ0kxMzk0X1BoeUNvbnRyb2xfV3JpdGUoYWRkciwgZGF0YSkJKCgoYWRkcikgPDwgOCkgfCAoZGF0YSkgfCAweDAwMDA0MDAwKQorI2RlZmluZSAgIE9IQ0kxMzk0X1BoeUNvbnRyb2xfV3JpdGVEb25lCQkweDAwMDA0MDAwCisjZGVmaW5lIE9IQ0kxMzk0X0lzb2Nocm9ub3VzQ3ljbGVUaW1lciAgICAgICAgMHgwRjAKKyNkZWZpbmUgT0hDSTEzOTRfQXNSZXFGaWx0ZXJIaVNldCAgICAgICAgICAgICAweDEwMAorI2RlZmluZSBPSENJMTM5NF9Bc1JlcUZpbHRlckhpQ2xlYXIgICAgICAgICAgIDB4MTA0CisjZGVmaW5lIE9IQ0kxMzk0X0FzUmVxRmlsdGVyTG9TZXQgICAgICAgICAgICAgMHgxMDgKKyNkZWZpbmUgT0hDSTEzOTRfQXNSZXFGaWx0ZXJMb0NsZWFyICAgICAgICAgICAweDEwQworI2RlZmluZSBPSENJMTM5NF9QaHlSZXFGaWx0ZXJIaVNldCAgICAgICAgICAgIDB4MTEwCisjZGVmaW5lIE9IQ0kxMzk0X1BoeVJlcUZpbHRlckhpQ2xlYXIgICAgICAgICAgMHgxMTQKKyNkZWZpbmUgT0hDSTEzOTRfUGh5UmVxRmlsdGVyTG9TZXQgICAgICAgICAgICAweDExOAorI2RlZmluZSBPSENJMTM5NF9QaHlSZXFGaWx0ZXJMb0NsZWFyICAgICAgICAgIDB4MTFDCisjZGVmaW5lIE9IQ0kxMzk0X1BoeVVwcGVyQm91bmQgICAgICAgICAgICAgICAgMHgxMjAKKworI2RlZmluZSBPSENJMTM5NF9Bc1JlcVRyQ29udGV4dEJhc2UgICAgICAgICAgIDB4MTgwCisjZGVmaW5lIE9IQ0kxMzk0X0FzUmVxVHJDb250ZXh0Q29udHJvbFNldCAgICAgMHgxODAKKyNkZWZpbmUgT0hDSTEzOTRfQXNSZXFUckNvbnRleHRDb250cm9sQ2xlYXIgICAweDE4NAorI2RlZmluZSBPSENJMTM5NF9Bc1JlcVRyQ29tbWFuZFB0ciAgICAgICAgICAgIDB4MThDCisKKyNkZWZpbmUgT0hDSTEzOTRfQXNSc3BUckNvbnRleHRCYXNlICAgICAgICAgICAweDFBMAorI2RlZmluZSBPSENJMTM5NF9Bc1JzcFRyQ29udGV4dENvbnRyb2xTZXQgICAgIDB4MUEwCisjZGVmaW5lIE9IQ0kxMzk0X0FzUnNwVHJDb250ZXh0Q29udHJvbENsZWFyICAgMHgxQTQKKyNkZWZpbmUgT0hDSTEzOTRfQXNSc3BUckNvbW1hbmRQdHIgICAgICAgICAgICAweDFBQworCisjZGVmaW5lIE9IQ0kxMzk0X0FzUmVxUmN2Q29udGV4dEJhc2UgICAgICAgICAgMHgxQzAKKyNkZWZpbmUgT0hDSTEzOTRfQXNSZXFSY3ZDb250ZXh0Q29udHJvbFNldCAgICAweDFDMAorI2RlZmluZSBPSENJMTM5NF9Bc1JlcVJjdkNvbnRleHRDb250cm9sQ2xlYXIgIDB4MUM0CisjZGVmaW5lIE9IQ0kxMzk0X0FzUmVxUmN2Q29tbWFuZFB0ciAgICAgICAgICAgMHgxQ0MKKworI2RlZmluZSBPSENJMTM5NF9Bc1JzcFJjdkNvbnRleHRCYXNlICAgICAgICAgIDB4MUUwCisjZGVmaW5lIE9IQ0kxMzk0X0FzUnNwUmN2Q29udGV4dENvbnRyb2xTZXQgICAgMHgxRTAKKyNkZWZpbmUgT0hDSTEzOTRfQXNSc3BSY3ZDb250ZXh0Q29udHJvbENsZWFyICAweDFFNAorI2RlZmluZSBPSENJMTM5NF9Bc1JzcFJjdkNvbW1hbmRQdHIgICAgICAgICAgIDB4MUVDCisKKy8qIElzb2Nocm9ub3VzIHRyYW5zbWl0IHJlZ2lzdGVycyAqLworI2RlZmluZSBPSENJMTM5NF9Jc29YbWl0Q29udGV4dEJhc2UobikgICAgICAgICAgICgweDIwMCArIDE2ICogKG4pKQorI2RlZmluZSBPSENJMTM5NF9Jc29YbWl0Q29udGV4dENvbnRyb2xTZXQobikgICAgICgweDIwMCArIDE2ICogKG4pKQorI2RlZmluZSBPSENJMTM5NF9Jc29YbWl0Q29udGV4dENvbnRyb2xDbGVhcihuKSAgICgweDIwNCArIDE2ICogKG4pKQorI2RlZmluZSBPSENJMTM5NF9Jc29YbWl0Q29tbWFuZFB0cihuKSAgICAgICAgICAgICgweDIwQyArIDE2ICogKG4pKQorCisvKiBJc29jaHJvbm91cyByZWNlaXZlIHJlZ2lzdGVycyAqLworI2RlZmluZSBPSENJMTM5NF9Jc29SY3ZDb250ZXh0QmFzZShuKSAgICAgICAgICgweDQwMCArIDMyICogKG4pKQorI2RlZmluZSBPSENJMTM5NF9Jc29SY3ZDb250ZXh0Q29udHJvbFNldChuKSAgICgweDQwMCArIDMyICogKG4pKQorI2RlZmluZSBPSENJMTM5NF9Jc29SY3ZDb250ZXh0Q29udHJvbENsZWFyKG4pICgweDQwNCArIDMyICogKG4pKQorI2RlZmluZSBPSENJMTM5NF9Jc29SY3ZDb21tYW5kUHRyKG4pICAgICAgICAgICgweDQwQyArIDMyICogKG4pKQorI2RlZmluZSBPSENJMTM5NF9Jc29SY3ZDb250ZXh0TWF0Y2gobikgICAgICAgICgweDQxMCArIDMyICogKG4pKQorCisvKiBJbnRlcnJ1cHRzIE1hc2svRXZlbnRzICovCisjZGVmaW5lIE9IQ0kxMzk0X3JlcVR4Q29tcGxldGUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgT0hDSTEzOTRfcmVzcFR4Q29tcGxldGUJCTB4MDAwMDAwMDIKKyNkZWZpbmUgT0hDSTEzOTRfQVJSUQkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgT0hDSTEzOTRfQVJSUwkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgT0hDSTEzOTRfUlFQa3QJCQkweDAwMDAwMDEwCisjZGVmaW5lIE9IQ0kxMzk0X1JTUGt0CQkJMHgwMDAwMDAyMAorI2RlZmluZSBPSENJMTM5NF9pc29jaFR4CQkweDAwMDAwMDQwCisjZGVmaW5lIE9IQ0kxMzk0X2lzb2NoUngJCTB4MDAwMDAwODAKKyNkZWZpbmUgT0hDSTEzOTRfcG9zdGVkV3JpdGVFcnIJCTB4MDAwMDAxMDAKKyNkZWZpbmUgT0hDSTEzOTRfbG9ja1Jlc3BFcnIJCTB4MDAwMDAyMDAKKyNkZWZpbmUgT0hDSTEzOTRfc2VsZklEQ29tcGxldGUJCTB4MDAwMTAwMDAKKyNkZWZpbmUgT0hDSTEzOTRfYnVzUmVzZXQJCTB4MDAwMjAwMDAKKyNkZWZpbmUgT0hDSTEzOTRfcGh5CQkJMHgwMDA4MDAwMAorI2RlZmluZSBPSENJMTM5NF9jeWNsZVN5bmNoCQkweDAwMTAwMDAwCisjZGVmaW5lIE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzCQkweDAwMjAwMDAwCisjZGVmaW5lIE9IQ0kxMzk0X2N5Y2xlTG9zdAkJMHgwMDQwMDAwMAorI2RlZmluZSBPSENJMTM5NF9jeWNsZUluY29uc2lzdGVudAkweDAwODAwMDAwCisjZGVmaW5lIE9IQ0kxMzk0X3VucmVjb3ZlcmFibGVFcnJvcgkweDAxMDAwMDAwCisjZGVmaW5lIE9IQ0kxMzk0X2N5Y2xlVG9vTG9uZwkJMHgwMjAwMDAwMAorI2RlZmluZSBPSENJMTM5NF9waHlSZWdSY3ZkCQkweDA0MDAwMDAwCisjZGVmaW5lIE9IQ0kxMzk0X21hc3RlckludEVuYWJsZQkweDgwMDAwMDAwCisKKyNkZWZpbmUgT0hDSTEzOTRfZXZ0X25vX3N0YXR1cwkJMHgwCisjZGVmaW5lIE9IQ0kxMzk0X2V2dF9sb25nX3BhY2tldAkweDIKKyNkZWZpbmUgT0hDSTEzOTRfZXZ0X21pc3NpbmdfYWNrCTB4MworI2RlZmluZSBPSENJMTM5NF9ldnRfdW5kZXJydW4JCTB4NAorI2RlZmluZSBPSENJMTM5NF9ldnRfb3ZlcnJ1bgkJMHg1CisjZGVmaW5lIE9IQ0kxMzk0X2V2dF9kZXNjcmlwdG9yX3JlYWQJMHg2CisjZGVmaW5lIE9IQ0kxMzk0X2V2dF9kYXRhX3JlYWQJCTB4NworI2RlZmluZSBPSENJMTM5NF9ldnRfZGF0YV93cml0ZQkJMHg4CisjZGVmaW5lIE9IQ0kxMzk0X2V2dF9idXNfcmVzZXQJCTB4OQorI2RlZmluZSBPSENJMTM5NF9ldnRfdGltZW91dAkJMHhhCisjZGVmaW5lIE9IQ0kxMzk0X2V2dF90Y29kZV9lcnIJCTB4YgorI2RlZmluZSBPSENJMTM5NF9ldnRfcmVzZXJ2ZWRfYgkJMHhjCisjZGVmaW5lIE9IQ0kxMzk0X2V2dF9yZXNlcnZlZF9jCQkweGQKKyNkZWZpbmUgT0hDSTEzOTRfZXZ0X3Vua25vd24JCTB4ZQorI2RlZmluZSBPSENJMTM5NF9ldnRfZmx1c2hlZAkJMHhmCisKKyNkZWZpbmUgT0hDSTEzOTRfcGh5X3Rjb2RlCQkweGUKKworI2VuZGlmIC8qIF9fZndfb2hjaV9oICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctc2JwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OGQzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYwpAQCAtMCwwICsxLDEyMDAgQEAKKy8qCisgKiBTQlAyIGRyaXZlciAoU0NTSSBvdmVyIElFRUUxMzk0KQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3ICBLcmlzdGlhbiBIb2Vnc2JlcmcgPGtyaEBiaXRwbGFuZXQubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoKKyAqIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgb2YgdGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIG9sZCBzdG9yYWdlIGRyaXZlciwKKyAqIGRyaXZlcnMvaWVlZTEzOTQvc2JwMi5jLCBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkKKyAqICAgICBKYW1lcyBHb29kd2luIDxqYW1lc2dAZmlsYW5ldC5jb20+CisgKiB3aXRoIGxhdGVyIGNvbnRyaWJ1dGlvbnMgYW5kIG9uZ29pbmcgbWFpbnRlbmFuY2UgZnJvbQorICogICAgIEJlbiBDb2xsaW5zIDxiY29sbGluc0BkZWJpYW4ub3JnPiwKKyAqICAgICBTdGVmYW4gUmljaHRlciA8c3RlZmFuckBzNXI2LmluLWJlcmxpbi5kZT4KKyAqIGFuZCBtYW55IG90aGVycy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKworI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiZnctdG9wb2xvZ3kuaCIKKyNpbmNsdWRlICJmdy1kZXZpY2UuaCIKKworLyogSSBkb24ndCBrbm93IHdoeSB0aGUgU0NTSSBzdGFjayBkb2Vzbid0IGRlZmluZSBzb21ldGhpbmcgbGlrZSB0aGlzLi4uICovCit0eXBlZGVmIHZvaWQgKCpzY3NpX2RvbmVfZm5fdCkoc3RydWN0IHNjc2lfY21uZCAqKTsKKworc3RhdGljIGNvbnN0IGNoYXIgc2JwMl9kcml2ZXJfbmFtZVtdID0gInNicDIiOworCitzdHJ1Y3Qgc2JwMl9kZXZpY2UgeworCXN0cnVjdCBrcmVmIGtyZWY7CisJc3RydWN0IGZ3X3VuaXQgKnVuaXQ7CisJc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciBhZGRyZXNzX2hhbmRsZXI7CisJc3RydWN0IGxpc3RfaGVhZCBvcmJfbGlzdDsKKwl1NjQgbWFuYWdlbWVudF9hZ2VudF9hZGRyZXNzOworCXU2NCBjb21tYW5kX2Jsb2NrX2FnZW50X2FkZHJlc3M7CisJdTMyIHdvcmthcm91bmRzOworCWludCBsb2dpbl9pZDsKKworCS8qCisJICogV2UgY2FjaGUgdGhlc2UgYWRkcmVzc2VzIGFuZCBvbmx5IHVwZGF0ZSB0aGVtIG9uY2Ugd2UndmUKKwkgKiBsb2dnZWQgaW4gb3IgcmVjb25uZWN0ZWQgdG8gdGhlIHNicDIgZGV2aWNlLiAgVGhhdCB3YXksIGFueQorCSAqIElPIHRvIHRoZSBkZXZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGZhaWwgYW5kIGdldCByZXRyaWVkIGlmCisJICogaXQgaGFwcGVucyBpbiBhIHdpbmRvdyB3aGVyZSB0aGUgZGV2aWNlIGlzIG5vdCByZWFkeSB0bworCSAqIGhhbmRsZSBpdCAoZS5nLiBhZnRlciBhIGJ1cyByZXNldCBidXQgYmVmb3JlIHdlIHJlY29ubmVjdCkuCisJICovCisJaW50IG5vZGVfaWQ7CisJaW50IGFkZHJlc3NfaGlnaDsKKwlpbnQgZ2VuZXJhdGlvbjsKKworCWludCByZXRyaWVzOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKK307CisKKyNkZWZpbmUgU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgJMHhmMDAwCisjZGVmaW5lIFNCUDJfTUFYX1NFQ1RPUlMJCTI1NQkvKiBNYXggc2VjdG9ycyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgU0JQMl9PUkJfVElNRU9VVAkJMjAwMAkvKiBUaW1lb3V0IGluIG1zICovCisKKyNkZWZpbmUgU0JQMl9PUkJfTlVMTAkJCTB4ODAwMDAwMDAKKworI2RlZmluZSBTQlAyX0RJUkVDVElPTl9UT19NRURJQQkJMHgwCisjZGVmaW5lIFNCUDJfRElSRUNUSU9OX0ZST01fTUVESUEJMHgxCisKKy8qIFVuaXQgZGlyZWN0b3J5IGtleXMgKi8KKyNkZWZpbmUgU0JQMl9DT01NQU5EX1NFVF9TUEVDSUZJRVIJMHgzOAorI2RlZmluZSBTQlAyX0NPTU1BTkRfU0VUCQkweDM5CisjZGVmaW5lIFNCUDJfQ09NTUFORF9TRVRfUkVWSVNJT04JMHgzYgorI2RlZmluZSBTQlAyX0ZJUk1XQVJFX1JFVklTSU9OCQkweDNjCisKKy8qIEZsYWdzIGZvciBkZXRlY3RlZCBvZGRpdGllcyBhbmQgYnJva2VuZXNzICovCisjZGVmaW5lIFNCUDJfV09SS0FST1VORF8xMjhLX01BWF9UUkFOUwkweDEKKyNkZWZpbmUgU0JQMl9XT1JLQVJPVU5EX0lOUVVJUllfMzYJMHgyCisjZGVmaW5lIFNCUDJfV09SS0FST1VORF9NT0RFX1NFTlNFXzgJMHg0CisjZGVmaW5lIFNCUDJfV09SS0FST1VORF9GSVhfQ0FQQUNJVFkJMHg4CisjZGVmaW5lIFNCUDJfV09SS0FST1VORF9PVkVSUklERQkweDEwMAorCisvKiBNYW5hZ2VtZW50IG9yYiBvcGNvZGVzICovCisjZGVmaW5lIFNCUDJfTE9HSU5fUkVRVUVTVAkJMHgwCisjZGVmaW5lIFNCUDJfUVVFUllfTE9HSU5TX1JFUVVFU1QJMHgxCisjZGVmaW5lIFNCUDJfUkVDT05ORUNUX1JFUVVFU1QJCTB4MworI2RlZmluZSBTQlAyX1NFVF9QQVNTV09SRF9SRVFVRVNUCTB4NAorI2RlZmluZSBTQlAyX0xPR09VVF9SRVFVRVNUCQkweDcKKyNkZWZpbmUgU0JQMl9BQk9SVF9UQVNLX1JFUVVFU1QJCTB4YgorI2RlZmluZSBTQlAyX0FCT1JUX1RBU0tfU0VUCQkweGMKKyNkZWZpbmUgU0JQMl9MT0dJQ0FMX1VOSVRfUkVTRVQJCTB4ZQorI2RlZmluZSBTQlAyX1RBUkdFVF9SRVNFVF9SRVFVRVNUCTB4ZgorCisvKiBPZmZzZXRzIGZvciBjb21tYW5kIGJsb2NrIGFnZW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBTQlAyX0FHRU5UX1NUQVRFCQkweDAwCisjZGVmaW5lIFNCUDJfQUdFTlRfUkVTRVQJCTB4MDQKKyNkZWZpbmUgU0JQMl9PUkJfUE9JTlRFUgkJMHgwOAorI2RlZmluZSBTQlAyX0RPT1JCRUxMCQkJMHgxMAorI2RlZmluZSBTQlAyX1VOU09MSUNJVEVEX1NUQVRVU19FTkFCTEUJMHgxNAorCisvKiBTdGF0dXMgd3JpdGUgcmVzcG9uc2UgY29kZXMgKi8KKyNkZWZpbmUgU0JQMl9TVEFUVVNfUkVRVUVTVF9DT01QTEVURQkweDAKKyNkZWZpbmUgU0JQMl9TVEFUVVNfVFJBTlNQT1JUX0ZBSUxVUkUJMHgxCisjZGVmaW5lIFNCUDJfU1RBVFVTX0lMTEVHQUxfUkVRVUVTVAkweDIKKyNkZWZpbmUgU0JQMl9TVEFUVVNfVkVORE9SX0RFUEVOREVOVAkweDMKKworI2RlZmluZSBTVEFUVVNfR0VUX09SQl9ISUdIKHYpCQkoKHYpLnN0YXR1cyAmIDB4ZmZmZikKKyNkZWZpbmUgU1RBVFVTX0dFVF9TQlBfU1RBVFVTKHYpCSgoKHYpLnN0YXR1cyA+PiAxNikgJiAweGZmKQorI2RlZmluZSBTVEFUVVNfR0VUX0xFTih2KQkJKCgodikuc3RhdHVzID4+IDI0KSAmIDB4MDcpCisjZGVmaW5lIFNUQVRVU19HRVRfREVBRCh2KQkJKCgodikuc3RhdHVzID4+IDI3KSAmIDB4MDEpCisjZGVmaW5lIFNUQVRVU19HRVRfUkVTUE9OU0UodikJCSgoKHYpLnN0YXR1cyA+PiAyOCkgJiAweDAzKQorI2RlZmluZSBTVEFUVVNfR0VUX1NPVVJDRSh2KQkJKCgodikuc3RhdHVzID4+IDMwKSAmIDB4MDMpCisjZGVmaW5lIFNUQVRVU19HRVRfT1JCX0xPVyh2KQkJKCh2KS5vcmJfbG93KQorI2RlZmluZSBTVEFUVVNfR0VUX0RBVEEodikJCSgodikuZGF0YSkKKworc3RydWN0IHNicDJfc3RhdHVzIHsKKwl1MzIgc3RhdHVzOworCXUzMiBvcmJfbG93OworCXU4IGRhdGFbMjRdOworfTsKKworc3RydWN0IHNicDJfcG9pbnRlciB7CisJdTMyIGhpZ2g7CisJdTMyIGxvdzsKK307CisKK3N0cnVjdCBzYnAyX29yYiB7CisJc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHQ7CisJZG1hX2FkZHJfdCByZXF1ZXN0X2J1czsKKwlpbnQgcmNvZGU7CisJc3RydWN0IHNicDJfcG9pbnRlciBwb2ludGVyOworCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IHNicDJfb3JiICogb3JiLCBzdHJ1Y3Qgc2JwMl9zdGF0dXMgKiBzdGF0dXMpOworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKK307CisKKyNkZWZpbmUgTUFOQUdFTUVOVF9PUkJfTFVOKHYpCQkJKCh2KSkKKyNkZWZpbmUgTUFOQUdFTUVOVF9PUkJfRlVOQ1RJT04odikJCSgodikgPDwgMTYpCisjZGVmaW5lIE1BTkFHRU1FTlRfT1JCX1JFQ09OTkVDVCh2KQkJKCh2KSA8PCAyMCkKKyNkZWZpbmUgTUFOQUdFTUVOVF9PUkJfRVhDTFVTSVZFCQkoKDEpIDw8IDI4KQorI2RlZmluZSBNQU5BR0VNRU5UX09SQl9SRVFVRVNUX0ZPUk1BVCh2KQkoKHYpIDw8IDI5KQorI2RlZmluZSBNQU5BR0VNRU5UX09SQl9OT1RJRlkJCQkoKDEpIDw8IDMxKQorCisjZGVmaW5lIE1BTkFHRU1FTlRfT1JCX1JFU1BPTlNFX0xFTkdUSCh2KQkoKHYpKQorI2RlZmluZSBNQU5BR0VNRU5UX09SQl9QQVNTV09SRF9MRU5HVEgodikJKCh2KSA8PCAxNikKKworc3RydWN0IHNicDJfbWFuYWdlbWVudF9vcmIgeworCXN0cnVjdCBzYnAyX29yYiBiYXNlOworCXN0cnVjdCB7CisJCXN0cnVjdCBzYnAyX3BvaW50ZXIgcGFzc3dvcmQ7CisJCXN0cnVjdCBzYnAyX3BvaW50ZXIgcmVzcG9uc2U7CisJCXUzMiBtaXNjOworCQl1MzIgbGVuZ3RoOworCQlzdHJ1Y3Qgc2JwMl9wb2ludGVyIHN0YXR1c19maWZvOworCX0gcmVxdWVzdDsKKwlfX2JlMzIgcmVzcG9uc2VbNF07CisJZG1hX2FkZHJfdCByZXNwb25zZV9idXM7CisJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKKwlzdHJ1Y3Qgc2JwMl9zdGF0dXMgc3RhdHVzOworfTsKKworI2RlZmluZSBMT0dJTl9SRVNQT05TRV9HRVRfTE9HSU5fSUQodikJKCh2KS5taXNjICYgMHhmZmZmKQorI2RlZmluZSBMT0dJTl9SRVNQT05TRV9HRVRfTEVOR1RIKHYpCSgoKHYpLm1pc2MgPj4gMTYpICYgMHhmZmZmKQorCitzdHJ1Y3Qgc2JwMl9sb2dpbl9yZXNwb25zZSB7CisJdTMyIG1pc2M7CisJc3RydWN0IHNicDJfcG9pbnRlciBjb21tYW5kX2Jsb2NrX2FnZW50OworCXUzMiByZWNvbm5lY3RfaG9sZDsKK307CisjZGVmaW5lIENPTU1BTkRfT1JCX0RBVEFfU0laRSh2KQkoKHYpKQorI2RlZmluZSBDT01NQU5EX09SQl9QQUdFX1NJWkUodikJKCh2KSA8PCAxNikKKyNkZWZpbmUgQ09NTUFORF9PUkJfUEFHRV9UQUJMRV9QUkVTRU5UCSgoMSkgPDwgMTkpCisjZGVmaW5lIENPTU1BTkRfT1JCX01BWF9QQVlMT0FEKHYpCSgodikgPDwgMjApCisjZGVmaW5lIENPTU1BTkRfT1JCX1NQRUVEKHYpCQkoKHYpIDw8IDI0KQorI2RlZmluZSBDT01NQU5EX09SQl9ESVJFQ1RJT04odikJKCh2KSA8PCAyNykKKyNkZWZpbmUgQ09NTUFORF9PUkJfUkVRVUVTVF9GT1JNQVQodikJKCh2KSA8PCAyOSkKKyNkZWZpbmUgQ09NTUFORF9PUkJfTk9USUZZCQkoKDEpIDw8IDMxKQorCitzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiB7CisJc3RydWN0IHNicDJfb3JiIGJhc2U7CisJc3RydWN0IHsKKwkJc3RydWN0IHNicDJfcG9pbnRlciBuZXh0OworCQlzdHJ1Y3Qgc2JwMl9wb2ludGVyIGRhdGFfZGVzY3JpcHRvcjsKKwkJdTMyIG1pc2M7CisJCXU4IGNvbW1hbmRfYmxvY2tbMTJdOworCX0gcmVxdWVzdDsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CisJc2NzaV9kb25lX2ZuX3QgZG9uZTsKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdDsKKworCXN0cnVjdCBzYnAyX3BvaW50ZXIgcGFnZV90YWJsZVtTR19BTExdOworCWRtYV9hZGRyX3QgcGFnZV90YWJsZV9idXM7CisJZG1hX2FkZHJfdCByZXF1ZXN0X2J1ZmZlcl9idXM7Cit9OworCisvKgorICogTGlzdCBvZiBkZXZpY2VzIHdpdGgga25vd24gYnVncy4KKyAqCisgKiBUaGUgZmlybXdhcmVfcmV2aXNpb24gZmllbGQsIG1hc2tlZCB3aXRoIDB4ZmZmZjAwLCBpcyB0aGUgYmVzdAorICogaW5kaWNhdG9yIGZvciB0aGUgdHlwZSBvZiBicmlkZ2UgY2hpcCBvZiBhIGRldmljZS4gIEl0IHlpZWxkcyBhIGZldworICogZmFsc2UgcG9zaXRpdmVzIGJ1dCB0aGlzIGRpZCBub3QgYnJlYWsgY29ycmVjdGx5IGJlaGF2aW5nIGRldmljZXMKKyAqIHNvIGZhci4gIFdlIHVzZSB+MCBhcyBhIHdpbGRjYXJkLCBzaW5jZSB0aGUgMjQgYml0IHZhbHVlcyB3ZSBnZXQKKyAqIGZyb20gdGhlIGNvbmZpZyByb20gY2FuIG5ldmVyIG1hdGNoIHRoYXQuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXUzMiBmaXJtd2FyZV9yZXZpc2lvbjsKKwl1MzIgbW9kZWw7CisJdW5zaWduZWQgd29ya2Fyb3VuZHM7Cit9IHNicDJfd29ya2Fyb3VuZHNfdGFibGVbXSA9IHsKKwkvKiBEVmlDTyBNb21vYmF5IENYLTEgd2l0aCBUU0I0MkFBOSBicmlkZ2UgKi8geworCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweDAwMjgwMCwKKwkJLm1vZGVsCQkJPSAweDAwMTAxMCwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9JTlFVSVJZXzM2IHwKKwkJCQkJICBTQlAyX1dPUktBUk9VTkRfTU9ERV9TRU5TRV84LAorCX0sCisJLyogSW5pdGlvIGJyaWRnZXMsIGFjdHVhbGx5IG9ubHkgbmVlZGVkIGZvciBzb21lIG9sZGVyIG9uZXMgKi8geworCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweDAwMDIwMCwKKwkJLm1vZGVsCQkJPSB+MCwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF9JTlFVSVJZXzM2LAorCX0sCisJLyogU3ltYmlvcyBicmlkZ2UgKi8geworCQkuZmlybXdhcmVfcmV2aXNpb24JPSAweGEwYjgwMCwKKwkJLm1vZGVsCQkJPSB+MCwKKwkJLndvcmthcm91bmRzCQk9IFNCUDJfV09SS0FST1VORF8xMjhLX01BWF9UUkFOUywKKwl9LAorCisJLyoKKwkgKiBUaGVyZSBhcmUgaVBvZHMgKDJuZCBnZW4sIDNyZCBnZW4pIHdpdGggbW9kZWxfaWQgPT0gMCwgYnV0CisJICogdGhlc2UgaVBvZHMgZG8gbm90IGZlYXR1cmUgdGhlIHJlYWRfY2FwYWNpdHkgYnVnIGFjY29yZGluZworCSAqIHRvIG9uZSByZXBvcnQuICBSZWFkX2NhcGFjaXR5IGJlaGF2aW91ciBhcyB3ZWxsIGFzIG1vZGVsX2lkCisJICogY291bGQgY2hhbmdlIGR1ZSB0byBBcHBsZS1zdXBwbGllZCBmaXJtd2FyZSB1cGRhdGVzIHRob3VnaC4KKwkgKi8KKworCS8qIGlQb2QgNHRoIGdlbmVyYXRpb24uICovIHsKKwkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwYTI3MDAsCisJCS5tb2RlbAkJCT0gMHgwMDAwMjEsCisJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfRklYX0NBUEFDSVRZLAorCX0sCisJLyogaVBvZCBtaW5pICovIHsKKwkJLmZpcm13YXJlX3JldmlzaW9uCT0gMHgwYTI3MDAsCisJCS5tb2RlbAkJCT0gMHgwMDAwMjMsCisJCS53b3JrYXJvdW5kcwkJPSBTQlAyX1dPUktBUk9VTkRfRklYX0NBUEFDSVRZLAorCX0sCisJLyogaVBvZCBQaG90byAqLyB7CisJCS5maXJtd2FyZV9yZXZpc2lvbgk9IDB4MGEyNzAwLAorCQkubW9kZWwJCQk9IDB4MDAwMDdlLAorCQkud29ya2Fyb3VuZHMJCT0gU0JQMl9XT1JLQVJPVU5EX0ZJWF9DQVBBQ0lUWSwKKwl9Cit9OworCitzdGF0aWMgdm9pZAorc2JwMl9zdGF0dXNfd3JpdGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAorCQkgIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLAorCQkgIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCisJCSAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQoreworCXN0cnVjdCBzYnAyX2RldmljZSAqc2QgPSBjYWxsYmFja19kYXRhOworCXN0cnVjdCBzYnAyX29yYiAqb3JiOworCXN0cnVjdCBzYnAyX3N0YXR1cyBzdGF0dXM7CisJc2l6ZV90IGhlYWRlcl9zaXplOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodGNvZGUgIT0gVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVCB8fAorCSAgICBsZW5ndGggPT0gMCB8fCBsZW5ndGggPiBzaXplb2Yoc3RhdHVzKSkgeworCQlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX1RZUEVfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJaGVhZGVyX3NpemUgPSBtaW4obGVuZ3RoLCAyICogc2l6ZW9mKHUzMikpOworCWZ3X21lbWNweV9mcm9tX2JlMzIoJnN0YXR1cywgcGF5bG9hZCwgaGVhZGVyX3NpemUpOworCWlmIChsZW5ndGggPiBoZWFkZXJfc2l6ZSkKKwkJbWVtY3B5KHN0YXR1cy5kYXRhLCBwYXlsb2FkICsgOCwgbGVuZ3RoIC0gaGVhZGVyX3NpemUpOworCWlmIChTVEFUVVNfR0VUX1NPVVJDRShzdGF0dXMpID09IDIgfHwgU1RBVFVTX0dFVF9TT1VSQ0Uoc3RhdHVzKSA9PSAzKSB7CisJCWZ3X25vdGlmeSgibm9uLW9yYiByZWxhdGVkIHN0YXR1cyB3cml0ZSwgbm90IGhhbmRsZWRcbiIpOworCQlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX0NPTVBMRVRFKTsKKwkJcmV0dXJuOworCX0KKworCS8qIExvb2t1cCB0aGUgb3JiIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBzdGF0dXMgd3JpdGUuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9yYiwgJnNkLT5vcmJfbGlzdCwgbGluaykgeworCQlpZiAoU1RBVFVTX0dFVF9PUkJfSElHSChzdGF0dXMpID09IDAgJiYKKwkJICAgIFNUQVRVU19HRVRfT1JCX0xPVyhzdGF0dXMpID09IG9yYi0+cmVxdWVzdF9idXMgJiYKKwkJICAgIG9yYi0+cmNvZGUgPT0gUkNPREVfQ09NUExFVEUpIHsKKwkJCWxpc3RfZGVsKCZvcmItPmxpbmspOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCisJaWYgKCZvcmItPmxpbmsgIT0gJnNkLT5vcmJfbGlzdCkKKwkJb3JiLT5jYWxsYmFjayhvcmIsICZzdGF0dXMpOworCWVsc2UKKwkJZndfZXJyb3IoInN0YXR1cyB3cml0ZSBmb3IgdW5rbm93biBvcmJcbiIpOworCisJZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9DT01QTEVURSk7Cit9CisKK3N0YXRpYyB2b2lkCitjb21wbGV0ZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAorCQkgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNicDJfb3JiICpvcmIgPSBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlvcmItPnJjb2RlID0gcmNvZGU7CisJaWYgKHJjb2RlICE9IFJDT0RFX0NPTVBMRVRFKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCWxpc3RfZGVsKCZvcmItPmxpbmspOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCW9yYi0+Y2FsbGJhY2sob3JiLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzYnAyX3NlbmRfb3JiKHN0cnVjdCBzYnAyX29yYiAqb3JiLCBzdHJ1Y3QgZndfdW5pdCAqdW5pdCwKKwkgICAgICBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIHU2NCBvZmZzZXQpCit7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKHVuaXQtPmRldmljZS5wYXJlbnQpOworCXN0cnVjdCBzYnAyX2RldmljZSAqc2QgPSB1bml0LT5kZXZpY2UuZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW9yYi0+cG9pbnRlci5oaWdoID0gMDsKKwlvcmItPnBvaW50ZXIubG93ID0gb3JiLT5yZXF1ZXN0X2J1czsKKwlmd19tZW1jcHlfdG9fYmUzMigmb3JiLT5wb2ludGVyLCAmb3JiLT5wb2ludGVyLCBzaXplb2Yob3JiLT5wb2ludGVyKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlLT5jYXJkLT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmb3JiLT5saW5rLCAmc2QtPm9yYl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2UtPmNhcmQtPmxvY2ssIGZsYWdzKTsKKworCWZ3X3NlbmRfcmVxdWVzdChkZXZpY2UtPmNhcmQsICZvcmItPnQsIFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1QsCisJCQlub2RlX2lkLCBnZW5lcmF0aW9uLAorCQkJZGV2aWNlLT5ub2RlLT5tYXhfc3BlZWQsIG9mZnNldCwKKwkJCSZvcmItPnBvaW50ZXIsIHNpemVvZihvcmItPnBvaW50ZXIpLAorCQkJY29tcGxldGVfdHJhbnNhY3Rpb24sIG9yYik7Cit9CisKK3N0YXRpYyBpbnQgc2JwMl9jYW5jZWxfb3JicyhzdHJ1Y3QgZndfdW5pdCAqdW5pdCkKK3sKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UodW5pdC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IHNicDJfZGV2aWNlICpzZCA9IHVuaXQtPmRldmljZS5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc2JwMl9vcmIgKm9yYiwgKm5leHQ7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IC1FTk9FTlQ7CisKKwlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOworCWxpc3Rfc3BsaWNlX2luaXQoJnNkLT5vcmJfbGlzdCwgJmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9yYiwgbmV4dCwgJmxpc3QsIGxpbmspIHsKKwkJcmV0dmFsID0gMDsKKwkJaWYgKGZ3X2NhbmNlbF90cmFuc2FjdGlvbihkZXZpY2UtPmNhcmQsICZvcmItPnQpID09IDApCisJCQljb250aW51ZTsKKworCQlvcmItPnJjb2RlID0gUkNPREVfQ0FOQ0VMTEVEOworCQlvcmItPmNhbGxiYWNrKG9yYiwgTlVMTCk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQKK2NvbXBsZXRlX21hbmFnZW1lbnRfb3JiKHN0cnVjdCBzYnAyX29yYiAqYmFzZV9vcmIsIHN0cnVjdCBzYnAyX3N0YXR1cyAqc3RhdHVzKQoreworCXN0cnVjdCBzYnAyX21hbmFnZW1lbnRfb3JiICpvcmIgPQorCSAgICAoc3RydWN0IHNicDJfbWFuYWdlbWVudF9vcmIgKiliYXNlX29yYjsKKworCWlmIChzdGF0dXMpCisJCW1lbWNweSgmb3JiLT5zdGF0dXMsIHN0YXR1cywgc2l6ZW9mKCpzdGF0dXMpKTsKKwljb21wbGV0ZSgmb3JiLT5kb25lKTsKK30KKworc3RhdGljIGludAorc2JwMl9zZW5kX21hbmFnZW1lbnRfb3JiKHN0cnVjdCBmd191bml0ICp1bml0LCBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sCisJCQkgaW50IGZ1bmN0aW9uLCBpbnQgbHVuLCB2b2lkICpyZXNwb25zZSkKK3sKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UodW5pdC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IHNicDJfZGV2aWNlICpzZCA9IHVuaXQtPmRldmljZS5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc2JwMl9tYW5hZ2VtZW50X29yYiAqb3JiOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCisJb3JiID0ga3phbGxvYyhzaXplb2YoKm9yYiksIEdGUF9BVE9NSUMpOworCWlmIChvcmIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIFRoZSBzYnAyIGRldmljZSBpcyBnb2luZyB0byBzZW5kIGEgYmxvY2sgcmVhZCByZXF1ZXN0IHRvCisJICogcmVhZCBvdXQgdGhlIHJlcXVlc3QgZnJvbSBob3N0IG1lbW9yeSwgc28gbWFwIGl0IGZvciBkbWEuCisJICovCisJb3JiLT5iYXNlLnJlcXVlc3RfYnVzID0KKwkJZG1hX21hcF9zaW5nbGUoZGV2aWNlLT5jYXJkLT5kZXZpY2UsICZvcmItPnJlcXVlc3QsCisJCQkgICAgICAgc2l6ZW9mKG9yYi0+cmVxdWVzdCksIERNQV9UT19ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcihvcmItPmJhc2UucmVxdWVzdF9idXMpKQorCQlnb3RvIG91dDsKKworCW9yYi0+cmVzcG9uc2VfYnVzID0KKwkJZG1hX21hcF9zaW5nbGUoZGV2aWNlLT5jYXJkLT5kZXZpY2UsICZvcmItPnJlc3BvbnNlLAorCQkJICAgICAgIHNpemVvZihvcmItPnJlc3BvbnNlKSwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3Iob3JiLT5yZXNwb25zZV9idXMpKQorCQlnb3RvIG91dDsKKworCW9yYi0+cmVxdWVzdC5yZXNwb25zZS5oaWdoICAgID0gMDsKKwlvcmItPnJlcXVlc3QucmVzcG9uc2UubG93ICAgICA9IG9yYi0+cmVzcG9uc2VfYnVzOworCisJb3JiLT5yZXF1ZXN0Lm1pc2MgPQorCQlNQU5BR0VNRU5UX09SQl9OT1RJRlkgfAorCQlNQU5BR0VNRU5UX09SQl9GVU5DVElPTihmdW5jdGlvbikgfAorCQlNQU5BR0VNRU5UX09SQl9MVU4obHVuKTsKKwlvcmItPnJlcXVlc3QubGVuZ3RoID0KKwkJTUFOQUdFTUVOVF9PUkJfUkVTUE9OU0VfTEVOR1RIKHNpemVvZihvcmItPnJlc3BvbnNlKSk7CisKKwlvcmItPnJlcXVlc3Quc3RhdHVzX2ZpZm8uaGlnaCA9IHNkLT5hZGRyZXNzX2hhbmRsZXIub2Zmc2V0ID4+IDMyOworCW9yYi0+cmVxdWVzdC5zdGF0dXNfZmlmby5sb3cgID0gc2QtPmFkZHJlc3NfaGFuZGxlci5vZmZzZXQ7CisKKwkvKgorCSAqIEZJWE1FOiBZZWFoLCBvayB0aGlzIGlzbid0IGVsZWdhbnQsIHdlIGhhcmR3aXJlIGV4Y2x1c2l2ZQorCSAqIGxvZ2luIGFuZCAxIHNlY29uZCByZWNvbm5lY3QgdGltZS4gIFRoZSByZWNvbm5lY3Qgc2V0dGluZworCSAqIGlzIHByb2JhYmx5IGZpbmUsIGJ1dCB0aGUgZXhjbHVzaXZlIGxvZ2luIHNob3VsZCBiZSBhbiBvcHRpb24uCisJICovCisJaWYgKGZ1bmN0aW9uID09IFNCUDJfTE9HSU5fUkVRVUVTVCkgeworCQlvcmItPnJlcXVlc3QubWlzYyB8PQorCQkJTUFOQUdFTUVOVF9PUkJfRVhDTFVTSVZFIHwKKwkJCU1BTkFHRU1FTlRfT1JCX1JFQ09OTkVDVCgwKTsKKwl9CisKKwlmd19tZW1jcHlfdG9fYmUzMigmb3JiLT5yZXF1ZXN0LCAmb3JiLT5yZXF1ZXN0LCBzaXplb2Yob3JiLT5yZXF1ZXN0KSk7CisKKwlpbml0X2NvbXBsZXRpb24oJm9yYi0+ZG9uZSk7CisJb3JiLT5iYXNlLmNhbGxiYWNrID0gY29tcGxldGVfbWFuYWdlbWVudF9vcmI7CisKKwlzYnAyX3NlbmRfb3JiKCZvcmItPmJhc2UsIHVuaXQsCisJCSAgICAgIG5vZGVfaWQsIGdlbmVyYXRpb24sIHNkLT5tYW5hZ2VtZW50X2FnZW50X2FkZHJlc3MpOworCisJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZvcmItPmRvbmUsCisJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoU0JQMl9PUkJfVElNRU9VVCkpOworCisJcmV0dmFsID0gLUVJTzsKKwlpZiAoc2JwMl9jYW5jZWxfb3Jicyh1bml0KSA9PSAwKSB7CisJCWZ3X2Vycm9yKCJvcmIgcmVwbHkgdGltZWQgb3V0LCByY29kZT0weCUwMnhcbiIsCisJCQkgb3JiLT5iYXNlLnJjb2RlKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG9yYi0+YmFzZS5yY29kZSAhPSBSQ09ERV9DT01QTEVURSkgeworCQlmd19lcnJvcigibWFuYWdlbWVudCB3cml0ZSBmYWlsZWQsIHJjb2RlIDB4JTAyeFxuIiwKKwkJCSBvcmItPmJhc2UucmNvZGUpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoU1RBVFVTX0dFVF9SRVNQT05TRShvcmItPnN0YXR1cykgIT0gMCB8fAorCSAgICBTVEFUVVNfR0VUX1NCUF9TVEFUVVMob3JiLT5zdGF0dXMpICE9IDApIHsKKwkJZndfZXJyb3IoImVycm9yIHN0YXR1czogJWQ6JWRcbiIsCisJCQkgU1RBVFVTX0dFVF9SRVNQT05TRShvcmItPnN0YXR1cyksCisJCQkgU1RBVFVTX0dFVF9TQlBfU1RBVFVTKG9yYi0+c3RhdHVzKSk7CisJCWdvdG8gb3V0OworCX0KKworCXJldHZhbCA9IDA7Cisgb3V0OgorCWRtYV91bm1hcF9zaW5nbGUoZGV2aWNlLT5jYXJkLT5kZXZpY2UsIG9yYi0+YmFzZS5yZXF1ZXN0X2J1cywKKwkJCSBzaXplb2Yob3JiLT5yZXF1ZXN0KSwgRE1BX1RPX0RFVklDRSk7CisJZG1hX3VubWFwX3NpbmdsZShkZXZpY2UtPmNhcmQtPmRldmljZSwgb3JiLT5yZXNwb25zZV9idXMsCisJCQkgc2l6ZW9mKG9yYi0+cmVzcG9uc2UpLCBETUFfRlJPTV9ERVZJQ0UpOworCisJaWYgKHJlc3BvbnNlKQorCQlmd19tZW1jcHlfZnJvbV9iZTMyKHJlc3BvbnNlLAorCQkJCSAgICBvcmItPnJlc3BvbnNlLCBzaXplb2Yob3JiLT5yZXNwb25zZSkpOworCWtmcmVlKG9yYik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZAorY29tcGxldGVfYWdlbnRfcmVzZXRfd3JpdGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKKwkJCSAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0ID0gZGF0YTsKKworCWtmcmVlKHQpOworfQorCitzdGF0aWMgaW50IHNicDJfYWdlbnRfcmVzZXQoc3RydWN0IGZ3X3VuaXQgKnVuaXQpCit7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKHVuaXQtPmRldmljZS5wYXJlbnQpOworCXN0cnVjdCBzYnAyX2RldmljZSAqc2QgPSB1bml0LT5kZXZpY2UuZHJpdmVyX2RhdGE7CisJc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0OworCXN0YXRpYyB1MzIgemVybzsKKworCXQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9BVE9NSUMpOworCWlmICh0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZndfc2VuZF9yZXF1ZXN0KGRldmljZS0+Y2FyZCwgdCwgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNULAorCQkJc2QtPm5vZGVfaWQsIHNkLT5nZW5lcmF0aW9uLCBTQ09ERV80MDAsCisJCQlzZC0+Y29tbWFuZF9ibG9ja19hZ2VudF9hZGRyZXNzICsgU0JQMl9BR0VOVF9SRVNFVCwKKwkJCSZ6ZXJvLCBzaXplb2YoemVybyksIGNvbXBsZXRlX2FnZW50X3Jlc2V0X3dyaXRlLCB0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzYnAyX3JlY29ubmVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc2NzaV9kcml2ZXJfdGVtcGxhdGU7CisKK3N0YXRpYyB2b2lkCityZWxlYXNlX3NicDJfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBzYnAyX2RldmljZSAqc2QgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHNicDJfZGV2aWNlLCBrcmVmKTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0KKwkJY29udGFpbmVyX29mKCh2b2lkICopc2QsIHN0cnVjdCBTY3NpX0hvc3QsIGhvc3RkYXRhWzBdKTsKKworCXNicDJfc2VuZF9tYW5hZ2VtZW50X29yYihzZC0+dW5pdCwgc2QtPm5vZGVfaWQsIHNkLT5nZW5lcmF0aW9uLAorCQkJCSBTQlAyX0xPR09VVF9SRVFVRVNULCBzZC0+bG9naW5faWQsIE5VTEwpOworCisJc2NzaV9yZW1vdmVfaG9zdChob3N0KTsKKwlmd19jb3JlX3JlbW92ZV9hZGRyZXNzX2hhbmRsZXIoJnNkLT5hZGRyZXNzX2hhbmRsZXIpOworCWZ3X25vdGlmeSgicmVtb3ZlZCBzYnAyIHVuaXQgJXNcbiIsIHNkLT51bml0LT5kZXZpY2UuYnVzX2lkKTsKKwlwdXRfZGV2aWNlKCZzZC0+dW5pdC0+ZGV2aWNlKTsKKwlzY3NpX2hvc3RfcHV0KGhvc3QpOworfQorCitzdGF0aWMgdm9pZCBzYnAyX2xvZ2luKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2JwMl9kZXZpY2UgKnNkID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzYnAyX2RldmljZSwgd29yay53b3JrKTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0KKwkJY29udGFpbmVyX29mKCh2b2lkICopc2QsIHN0cnVjdCBTY3NpX0hvc3QsIGhvc3RkYXRhWzBdKTsKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IHNkLT51bml0OworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZSh1bml0LT5kZXZpY2UucGFyZW50KTsKKwlzdHJ1Y3Qgc2JwMl9sb2dpbl9yZXNwb25zZSByZXNwb25zZTsKKwlpbnQgZ2VuZXJhdGlvbiwgbm9kZV9pZCwgbG9jYWxfbm9kZV9pZCwgbHVuLCByZXR2YWw7CisKKwkvKiBGSVhNRTogTWFrZSB0aGlzIHdvcmsgZm9yIG11bHRpLWx1biBkZXZpY2VzLiAqLworCWx1biA9IDA7CisKKwlnZW5lcmF0aW9uICAgID0gZGV2aWNlLT5jYXJkLT5nZW5lcmF0aW9uOworCW5vZGVfaWQgICAgICAgPSBkZXZpY2UtPm5vZGUtPm5vZGVfaWQ7CisJbG9jYWxfbm9kZV9pZCA9IGRldmljZS0+Y2FyZC0+bG9jYWxfbm9kZS0+bm9kZV9pZDsKKworCWlmIChzYnAyX3NlbmRfbWFuYWdlbWVudF9vcmIodW5pdCwgbm9kZV9pZCwgZ2VuZXJhdGlvbiwKKwkJCQkgICAgIFNCUDJfTE9HSU5fUkVRVUVTVCwgbHVuLCAmcmVzcG9uc2UpIDwgMCkgeworCQlpZiAoc2QtPnJldHJpZXMrKyA8IDUpIHsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc2QtPndvcmssIERJVl9ST1VORF9VUChIWiwgNSkpOworCQl9IGVsc2UgeworCQkJZndfZXJyb3IoImZhaWxlZCB0byBsb2dpbiB0byAlc1xuIiwKKwkJCQkgdW5pdC0+ZGV2aWNlLmJ1c19pZCk7CisJCQlrcmVmX3B1dCgmc2QtPmtyZWYsIHJlbGVhc2Vfc2JwMl9kZXZpY2UpOworCQl9CisJCXJldHVybjsKKwl9CisKKwlzZC0+Z2VuZXJhdGlvbiAgID0gZ2VuZXJhdGlvbjsKKwlzZC0+bm9kZV9pZCAgICAgID0gbm9kZV9pZDsKKwlzZC0+YWRkcmVzc19oaWdoID0gbG9jYWxfbm9kZV9pZCA8PCAxNjsKKworCS8qIEdldCBjb21tYW5kIGJsb2NrIGFnZW50IG9mZnNldCBhbmQgbG9naW4gaWQuICovCisJc2QtPmNvbW1hbmRfYmxvY2tfYWdlbnRfYWRkcmVzcyA9CisJCSgodTY0KSAocmVzcG9uc2UuY29tbWFuZF9ibG9ja19hZ2VudC5oaWdoICYgMHhmZmZmKSA8PCAzMikgfAorCQlyZXNwb25zZS5jb21tYW5kX2Jsb2NrX2FnZW50LmxvdzsKKwlzZC0+bG9naW5faWQgPSBMT0dJTl9SRVNQT05TRV9HRVRfTE9HSU5fSUQocmVzcG9uc2UpOworCisJZndfbm90aWZ5KCJsb2dnZWQgaW4gdG8gc2JwMiB1bml0ICVzICglZCByZXRyaWVzKVxuIiwKKwkJICB1bml0LT5kZXZpY2UuYnVzX2lkLCBzZC0+cmV0cmllcyk7CisJZndfbm90aWZ5KCIgLSBtYW5hZ2VtZW50X2FnZW50X2FkZHJlc3M6ICAgIDB4JTAxMmxseFxuIiwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKSBzZC0+bWFuYWdlbWVudF9hZ2VudF9hZGRyZXNzKTsKKwlmd19ub3RpZnkoIiAtIGNvbW1hbmRfYmxvY2tfYWdlbnRfYWRkcmVzczogMHglMDEybGx4XG4iLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNkLT5jb21tYW5kX2Jsb2NrX2FnZW50X2FkZHJlc3MpOworCWZ3X25vdGlmeSgiIC0gc3RhdHVzIHdyaXRlIGFkZHJlc3M6ICAgICAgICAweCUwMTJsbHhcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2QtPmFkZHJlc3NfaGFuZGxlci5vZmZzZXQpOworCisjaWYgMAorCS8qIEZJWE1FOiBUaGUgbGludXgxMzk0IHNicDIgZG9lcyB0aGlzIGxhc3Qgc3RlcC4gKi8KKwlzYnAyX3NldF9idXN5X3RpbWVvdXQoc2NzaV9pZCk7CisjZW5kaWYKKworCVBSRVBBUkVfREVMQVlFRF9XT1JLKCZzZC0+d29yaywgc2JwMl9yZWNvbm5lY3QpOworCXNicDJfYWdlbnRfcmVzZXQodW5pdCk7CisKKwkvKiBGSVhNRTogTG9vcCBvdmVyIGx1bnMgaGVyZS4gKi8KKwlsdW4gPSAwOworCXJldHZhbCA9IHNjc2lfYWRkX2RldmljZShob3N0LCAwLCAwLCBsdW4pOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXNicDJfc2VuZF9tYW5hZ2VtZW50X29yYih1bml0LCBzZC0+bm9kZV9pZCwgc2QtPmdlbmVyYXRpb24sCisJCQkJCSBTQlAyX0xPR09VVF9SRVFVRVNULCBzZC0+bG9naW5faWQsCisJCQkJCSBOVUxMKTsKKwkJLyoKKwkJICogU2V0IHRoaXMgYmFjayB0byBzYnAyX2xvZ2luIHNvIHdlIGZhbGwgYmFjayBhbmQKKwkJICogcmV0cnkgbG9naW4gb24gYnVzIHJlc2V0LgorCQkgKi8KKwkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJnNkLT53b3JrLCBzYnAyX2xvZ2luKTsKKwl9CisJa3JlZl9wdXQoJnNkLT5rcmVmLCByZWxlYXNlX3NicDJfZGV2aWNlKTsKK30KKworc3RhdGljIGludCBzYnAyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IGZ3X3VuaXQoZGV2KTsKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UodW5pdC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IHNicDJfZGV2aWNlICpzZDsKKwlzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yIGNpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJaW50IGksIGtleSwgdmFsdWUsIGVycjsKKwl1MzIgbW9kZWwsIGZpcm13YXJlX3JldmlzaW9uOworCisJZXJyID0gLUVOT01FTTsKKwlob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZzY3NpX2RyaXZlcl90ZW1wbGF0ZSwgc2l6ZW9mKCpzZCkpOworCWlmIChob3N0ID09IE5VTEwpCisJCWdvdG8gZmFpbDsKKworCXNkID0gKHN0cnVjdCBzYnAyX2RldmljZSAqKSBob3N0LT5ob3N0ZGF0YTsKKwl1bml0LT5kZXZpY2UuZHJpdmVyX2RhdGEgPSBzZDsKKwlzZC0+dW5pdCA9IHVuaXQ7CisJSU5JVF9MSVNUX0hFQUQoJnNkLT5vcmJfbGlzdCk7CisJa3JlZl9pbml0KCZzZC0+a3JlZik7CisKKwlzZC0+YWRkcmVzc19oYW5kbGVyLmxlbmd0aCA9IDB4MTAwOworCXNkLT5hZGRyZXNzX2hhbmRsZXIuYWRkcmVzc19jYWxsYmFjayA9IHNicDJfc3RhdHVzX3dyaXRlOworCXNkLT5hZGRyZXNzX2hhbmRsZXIuY2FsbGJhY2tfZGF0YSA9IHNkOworCisJZXJyID0gZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZzZC0+YWRkcmVzc19oYW5kbGVyLAorCQkJCQkgICZmd19oaWdoX21lbW9yeV9yZWdpb24pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxfaG9zdDsKKworCWVyciA9IGZ3X2RldmljZV9lbmFibGVfcGh5c19kbWEoZGV2aWNlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsX2FkZHJlc3NfaGFuZGxlcjsKKworCWVyciA9IHNjc2lfYWRkX2hvc3QoaG9zdCwgJnVuaXQtPmRldmljZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZmFpbF9hZGRyZXNzX2hhbmRsZXI7CisKKwkvKgorCSAqIFNjYW4gdW5pdCBkaXJlY3RvcnkgdG8gZ2V0IG1hbmFnZW1lbnQgYWdlbnQgYWRkcmVzcywKKwkgKiBmaXJtd2FyZSByZXZpc29uIGFuZCBtb2RlbC4gIEluaXRpYWxpemUgZmlybXdhcmVfcmV2aXNpb24KKwkgKiBhbmQgbW9kZWwgdG8gdmFsdWVzIHRoYXQgd29udCBtYXRjaCBhbnl0aGluZyBpbiBvdXIgdGFibGUuCisJICovCisJZmlybXdhcmVfcmV2aXNpb24gPSAweGZmMDAwMDAwOworCW1vZGVsID0gMHhmZjAwMDAwMDsKKwlmd19jc3JfaXRlcmF0b3JfaW5pdCgmY2ksIHVuaXQtPmRpcmVjdG9yeSk7CisJd2hpbGUgKGZ3X2Nzcl9pdGVyYXRvcl9uZXh0KCZjaSwgJmtleSwgJnZhbHVlKSkgeworCQlzd2l0Y2ggKGtleSkgeworCQljYXNlIENTUl9ERVBFTkRFTlRfSU5GTyB8IENTUl9PRkZTRVQ6CisJCQlzZC0+bWFuYWdlbWVudF9hZ2VudF9hZGRyZXNzID0KKwkJCQkweGZmZmZmMDAwMDAwMFVMTCArIDQgKiB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIFNCUDJfRklSTVdBUkVfUkVWSVNJT046CisJCQlmaXJtd2FyZV9yZXZpc2lvbiA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgQ1NSX01PREVMOgorCQkJbW9kZWwgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2JwMl93b3JrYXJvdW5kc190YWJsZSk7IGkrKykgeworCQlpZiAoc2JwMl93b3JrYXJvdW5kc190YWJsZVtpXS5maXJtd2FyZV9yZXZpc2lvbiAhPQorCQkgICAgKGZpcm13YXJlX3JldmlzaW9uICYgMHhmZmZmZmYwMCkpCisJCQljb250aW51ZTsKKwkJaWYgKHNicDJfd29ya2Fyb3VuZHNfdGFibGVbaV0ubW9kZWwgIT0gbW9kZWwgJiYKKwkJICAgIHNicDJfd29ya2Fyb3VuZHNfdGFibGVbaV0ubW9kZWwgIT0gfjApCisJCQljb250aW51ZTsKKwkJc2QtPndvcmthcm91bmRzIHw9IHNicDJfd29ya2Fyb3VuZHNfdGFibGVbaV0ud29ya2Fyb3VuZHM7CisJCWJyZWFrOworCX0KKworCWlmIChzZC0+d29ya2Fyb3VuZHMpCisJCWZ3X25vdGlmeSgiV29ya2Fyb3VuZHMgZm9yIG5vZGUgJXM6IDB4JXggIgorCQkJICAiKGZpcm13YXJlX3JldmlzaW9uIDB4JTA2eCwgbW9kZWxfaWQgMHglMDZ4KVxuIiwKKwkJCSAgdW5pdC0+ZGV2aWNlLmJ1c19pZCwKKwkJCSAgc2QtPndvcmthcm91bmRzLCBmaXJtd2FyZV9yZXZpc2lvbiwgbW9kZWwpOworCisJZ2V0X2RldmljZSgmdW5pdC0+ZGV2aWNlKTsKKworCS8qCisJICogV2Ugc2NoZWR1bGUgd29yayB0byBkbyB0aGUgbG9naW4gc28gd2UgY2FuIGVhc2lseQorCSAqIHJlc2NoZWR1bGUgcmV0cmllcy4gQWx3YXlzIGdldCB0aGUgcmVmIGJlZm9yZSBzY2hlZHVsaW5nCisJICogd29yay4KKwkgKi8KKwlJTklUX0RFTEFZRURfV09SSygmc2QtPndvcmssIHNicDJfbG9naW4pOworCWlmIChzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnNkLT53b3JrLCAwKSkKKwkJa3JlZl9nZXQoJnNkLT5rcmVmKTsKKworCXJldHVybiAwOworCisgZmFpbF9hZGRyZXNzX2hhbmRsZXI6CisJZndfY29yZV9yZW1vdmVfYWRkcmVzc19oYW5kbGVyKCZzZC0+YWRkcmVzc19oYW5kbGVyKTsKKyBmYWlsX2hvc3Q6CisJc2NzaV9ob3N0X3B1dChob3N0KTsKKyBmYWlsOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2JwMl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBmd191bml0ICp1bml0ID0gZndfdW5pdChkZXYpOworCXN0cnVjdCBzYnAyX2RldmljZSAqc2QgPSB1bml0LT5kZXZpY2UuZHJpdmVyX2RhdGE7CisKKwlrcmVmX3B1dCgmc2QtPmtyZWYsIHJlbGVhc2Vfc2JwMl9kZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNicDJfcmVjb25uZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2JwMl9kZXZpY2UgKnNkID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzYnAyX2RldmljZSwgd29yay53b3JrKTsKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IHNkLT51bml0OworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZSh1bml0LT5kZXZpY2UucGFyZW50KTsKKwlpbnQgZ2VuZXJhdGlvbiwgbm9kZV9pZCwgbG9jYWxfbm9kZV9pZDsKKworCWdlbmVyYXRpb24gICAgPSBkZXZpY2UtPmNhcmQtPmdlbmVyYXRpb247CisJbm9kZV9pZCAgICAgICA9IGRldmljZS0+bm9kZS0+bm9kZV9pZDsKKwlsb2NhbF9ub2RlX2lkID0gZGV2aWNlLT5jYXJkLT5sb2NhbF9ub2RlLT5ub2RlX2lkOworCisJaWYgKHNicDJfc2VuZF9tYW5hZ2VtZW50X29yYih1bml0LCBub2RlX2lkLCBnZW5lcmF0aW9uLAorCQkJCSAgICAgU0JQMl9SRUNPTk5FQ1RfUkVRVUVTVCwKKwkJCQkgICAgIHNkLT5sb2dpbl9pZCwgTlVMTCkgPCAwKSB7CisJCWlmIChzZC0+cmV0cmllcysrID49IDUpIHsKKwkJCWZ3X2Vycm9yKCJmYWlsZWQgdG8gcmVjb25uZWN0IHRvICVzXG4iLAorCQkJCSB1bml0LT5kZXZpY2UuYnVzX2lkKTsKKwkJCS8qIEZhbGwgYmFjayBhbmQgdHJ5IHRvIGxvZyBpbiBhZ2Fpbi4gKi8KKwkJCXNkLT5yZXRyaWVzID0gMDsKKwkJCVBSRVBBUkVfREVMQVlFRF9XT1JLKCZzZC0+d29yaywgc2JwMl9sb2dpbik7CisJCX0KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzZC0+d29yaywgRElWX1JPVU5EX1VQKEhaLCA1KSk7CisJCXJldHVybjsKKwl9CisKKwlzZC0+Z2VuZXJhdGlvbiAgID0gZ2VuZXJhdGlvbjsKKwlzZC0+bm9kZV9pZCAgICAgID0gbm9kZV9pZDsKKwlzZC0+YWRkcmVzc19oaWdoID0gbG9jYWxfbm9kZV9pZCA8PCAxNjsKKworCWZ3X25vdGlmeSgicmVjb25uZWN0ZWQgdG8gdW5pdCAlcyAoJWQgcmV0cmllcylcbiIsCisJCSAgdW5pdC0+ZGV2aWNlLmJ1c19pZCwgc2QtPnJldHJpZXMpOworCXNicDJfYWdlbnRfcmVzZXQodW5pdCk7CisJc2JwMl9jYW5jZWxfb3Jicyh1bml0KTsKKwlrcmVmX3B1dCgmc2QtPmtyZWYsIHJlbGVhc2Vfc2JwMl9kZXZpY2UpOworfQorCitzdGF0aWMgdm9pZCBzYnAyX3VwZGF0ZShzdHJ1Y3QgZndfdW5pdCAqdW5pdCkKK3sKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UodW5pdC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IHNicDJfZGV2aWNlICpzZCA9IHVuaXQtPmRldmljZS5kcml2ZXJfZGF0YTsKKworCXNkLT5yZXRyaWVzID0gMDsKKwlmd19kZXZpY2VfZW5hYmxlX3BoeXNfZG1hKGRldmljZSk7CisJaWYgKHNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc2QtPndvcmssIDApKQorCQlrcmVmX2dldCgmc2QtPmtyZWYpOworfQorCisjZGVmaW5lIFNCUDJfVU5JVF9TUEVDX0lEX0VOVFJZCTB4MDAwMDYwOWUKKyNkZWZpbmUgU0JQMl9TV19WRVJTSU9OX0VOVFJZCTB4MDAwMTA0ODMKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmd19kZXZpY2VfaWQgc2JwMl9pZF90YWJsZVtdID0geworCXsKKwkJLm1hdGNoX2ZsYWdzICA9IEZXX01BVENIX1NQRUNJRklFUl9JRCB8IEZXX01BVENIX1ZFUlNJT04sCisJCS5zcGVjaWZpZXJfaWQgPSBTQlAyX1VOSVRfU1BFQ19JRF9FTlRSWSwKKwkJLnZlcnNpb24gICAgICA9IFNCUDJfU1dfVkVSU0lPTl9FTlRSWSwKKwl9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBmd19kcml2ZXIgc2JwMl9kcml2ZXIgPSB7CisJLmRyaXZlciAgID0geworCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJCS5uYW1lICAgPSBzYnAyX2RyaXZlcl9uYW1lLAorCQkuYnVzICAgID0gJmZ3X2J1c190eXBlLAorCQkucHJvYmUgID0gc2JwMl9wcm9iZSwKKwkJLnJlbW92ZSA9IHNicDJfcmVtb3ZlLAorCX0sCisJLnVwZGF0ZSAgID0gc2JwMl91cGRhdGUsCisJLmlkX3RhYmxlID0gc2JwMl9pZF90YWJsZSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3NicDJfc3RhdHVzX3RvX3NlbnNlX2RhdGEodTggKnNicDJfc3RhdHVzLCB1OCAqc2Vuc2VfZGF0YSkKK3sKKwlpbnQgc2FtX3N0YXR1czsKKworCXNlbnNlX2RhdGFbMF0gPSAweDcwOworCXNlbnNlX2RhdGFbMV0gPSAweDA7CisJc2Vuc2VfZGF0YVsyXSA9IHNicDJfc3RhdHVzWzFdOworCXNlbnNlX2RhdGFbM10gPSBzYnAyX3N0YXR1c1s0XTsKKwlzZW5zZV9kYXRhWzRdID0gc2JwMl9zdGF0dXNbNV07CisJc2Vuc2VfZGF0YVs1XSA9IHNicDJfc3RhdHVzWzZdOworCXNlbnNlX2RhdGFbNl0gPSBzYnAyX3N0YXR1c1s3XTsKKwlzZW5zZV9kYXRhWzddID0gMTA7CisJc2Vuc2VfZGF0YVs4XSA9IHNicDJfc3RhdHVzWzhdOworCXNlbnNlX2RhdGFbOV0gPSBzYnAyX3N0YXR1c1s5XTsKKwlzZW5zZV9kYXRhWzEwXSA9IHNicDJfc3RhdHVzWzEwXTsKKwlzZW5zZV9kYXRhWzExXSA9IHNicDJfc3RhdHVzWzExXTsKKwlzZW5zZV9kYXRhWzEyXSA9IHNicDJfc3RhdHVzWzJdOworCXNlbnNlX2RhdGFbMTNdID0gc2JwMl9zdGF0dXNbM107CisJc2Vuc2VfZGF0YVsxNF0gPSBzYnAyX3N0YXR1c1sxMl07CisJc2Vuc2VfZGF0YVsxNV0gPSBzYnAyX3N0YXR1c1sxM107CisKKwlzYW1fc3RhdHVzID0gc2JwMl9zdGF0dXNbMF0gJiAweDNmOworCisJc3dpdGNoIChzYW1fc3RhdHVzKSB7CisJY2FzZSBTQU1fU1RBVF9HT09EOgorCWNhc2UgU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOgorCWNhc2UgU0FNX1NUQVRfQ09ORElUSU9OX01FVDoKKwljYXNlIFNBTV9TVEFUX0JVU1k6CisJY2FzZSBTQU1fU1RBVF9SRVNFUlZBVElPTl9DT05GTElDVDoKKwljYXNlIFNBTV9TVEFUX0NPTU1BTkRfVEVSTUlOQVRFRDoKKwkJcmV0dXJuIERJRF9PSyA8PCAxNiB8IHNhbV9zdGF0dXM7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gRElEX0VSUk9SIDw8IDE2OworCX0KK30KKworc3RhdGljIHZvaWQKK2NvbXBsZXRlX2NvbW1hbmRfb3JiKHN0cnVjdCBzYnAyX29yYiAqYmFzZV9vcmIsIHN0cnVjdCBzYnAyX3N0YXR1cyAqc3RhdHVzKQoreworCXN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiICpvcmIgPSAoc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKiliYXNlX29yYjsKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IG9yYi0+dW5pdDsKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UodW5pdC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgcmVzdWx0OworCisJaWYgKHN0YXR1cyAhPSBOVUxMKSB7CisJCWlmIChTVEFUVVNfR0VUX0RFQUQoKnN0YXR1cykpCisJCQlzYnAyX2FnZW50X3Jlc2V0KHVuaXQpOworCisJCXN3aXRjaCAoU1RBVFVTX0dFVF9SRVNQT05TRSgqc3RhdHVzKSkgeworCQljYXNlIFNCUDJfU1RBVFVTX1JFUVVFU1RfQ09NUExFVEU6CisJCQlyZXN1bHQgPSBESURfT0sgPDwgMTY7CisJCQlicmVhazsKKwkJY2FzZSBTQlAyX1NUQVRVU19UUkFOU1BPUlRfRkFJTFVSRToKKwkJCXJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJCWJyZWFrOworCQljYXNlIFNCUDJfU1RBVFVTX0lMTEVHQUxfUkVRVUVTVDoKKwkJY2FzZSBTQlAyX1NUQVRVU19WRU5ET1JfREVQRU5ERU5UOgorCQlkZWZhdWx0OgorCQkJcmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmVzdWx0ID09IERJRF9PSyA8PCAxNiAmJiBTVEFUVVNfR0VUX0xFTigqc3RhdHVzKSA+IDEpCisJCQlyZXN1bHQgPSBzYnAyX3N0YXR1c190b19zZW5zZV9kYXRhKFNUQVRVU19HRVRfREFUQSgqc3RhdHVzKSwKKwkJCQkJCQkgICBvcmItPmNtZC0+c2Vuc2VfYnVmZmVyKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJZiB0aGUgb3JiIGNvbXBsZXRlcyB3aXRoIHN0YXR1cyA9PSBOVUxMLCBzb21ldGhpbmcKKwkJICogd2VudCB3cm9uZywgdHlwaWNhbGx5IGEgYnVzIHJlc2V0IGhhcHBlbmVkIG1pZC1vcmIKKwkJICogb3Igd2hlbiBzZW5kaW5nIHRoZSB3cml0ZSAobGVzcyBsaWtlbHkpLgorCQkgKi8KKwkJcmVzdWx0ID0gRElEX0JVU19CVVNZIDw8IDE2OworCX0KKworCWRtYV91bm1hcF9zaW5nbGUoZGV2aWNlLT5jYXJkLT5kZXZpY2UsIG9yYi0+YmFzZS5yZXF1ZXN0X2J1cywKKwkJCSBzaXplb2Yob3JiLT5yZXF1ZXN0KSwgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAob3JiLT5jbWQtPnVzZV9zZyA+IDApIHsKKwkJc2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopb3JiLT5jbWQtPnJlcXVlc3RfYnVmZmVyOworCQlkbWFfdW5tYXBfc2coZGV2aWNlLT5jYXJkLT5kZXZpY2UsIHNnLCBvcmItPmNtZC0+dXNlX3NnLAorCQkJICAgICBvcmItPmNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCX0KKworCWlmIChvcmItPnBhZ2VfdGFibGVfYnVzICE9IDApCisJCWRtYV91bm1hcF9zaW5nbGUoZGV2aWNlLT5jYXJkLT5kZXZpY2UsIG9yYi0+cGFnZV90YWJsZV9idXMsCisJCQkJIHNpemVvZihvcmItPnBhZ2VfdGFibGVfYnVzKSwgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAob3JiLT5yZXF1ZXN0X2J1ZmZlcl9idXMgIT0gMCkKKwkJZG1hX3VubWFwX3NpbmdsZShkZXZpY2UtPmNhcmQtPmRldmljZSwgb3JiLT5yZXF1ZXN0X2J1ZmZlcl9idXMsCisJCQkJIHNpemVvZihvcmItPnJlcXVlc3RfYnVmZmVyX2J1cyksCisJCQkJIERNQV9GUk9NX0RFVklDRSk7CisKKwlvcmItPmNtZC0+cmVzdWx0ID0gcmVzdWx0OworCW9yYi0+ZG9uZShvcmItPmNtZCk7CisJa2ZyZWUob3JiKTsKK30KKworc3RhdGljIGludCBzYnAyX2NvbW1hbmRfb3JiX21hcF9zY2F0dGVybGlzdChzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiAqb3JiKQoreworCXN0cnVjdCBzYnAyX2RldmljZSAqc2QgPQorCQkoc3RydWN0IHNicDJfZGV2aWNlICopb3JiLT5jbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBzZC0+dW5pdDsKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UodW5pdC0+ZGV2aWNlLnBhcmVudCk7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgc2dfbGVuLCBsLCBpLCBqLCBjb3VudDsKKwlzaXplX3Qgc2l6ZTsKKwlkbWFfYWRkcl90IHNnX2FkZHI7CisKKwlzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilvcmItPmNtZC0+cmVxdWVzdF9idWZmZXI7CisJY291bnQgPSBkbWFfbWFwX3NnKGRldmljZS0+Y2FyZC0+ZGV2aWNlLCBzZywgb3JiLT5jbWQtPnVzZV9zZywKKwkJCSAgIG9yYi0+Y21kLT5zY19kYXRhX2RpcmVjdGlvbik7CisJaWYgKGNvdW50ID09IDApCisJCWdvdG8gZmFpbDsKKworCS8qCisJICogSGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlcmUgaXMgb25seSBvbmUgZWxlbWVudCBpbgorCSAqIHRoZSBzY2F0dGVyIGxpc3QgYnkgY29udmVydGluZyBpdCB0byBhbiBpbW1lZGlhdGUgYmxvY2sKKwkgKiByZXF1ZXN0LiBUaGlzIGlzIGFsc28gYSB3b3JrYXJvdW5kIGZvciBicm9rZW4gZGV2aWNlcyBzdWNoCisJICogYXMgdGhlIHNlY29uZCBnZW5lcmF0aW9uIGlQb2Qgd2hpY2ggZG9lc24ndCBzdXBwb3J0IHBhZ2UKKwkgKiB0YWJsZXMuCisJICovCisJaWYgKGNvdW50ID09IDEgJiYgc2dfZG1hX2xlbihzZykgPCBTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSCkgeworCQlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmhpZ2ggPSBzZC0+YWRkcmVzc19oaWdoOworCQlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmxvdyAgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCW9yYi0+cmVxdWVzdC5taXNjIHw9CisJCQlDT01NQU5EX09SQl9EQVRBX1NJWkUoc2dfZG1hX2xlbihzZykpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIENvbnZlcnQgdGhlIHNjYXR0ZXJsaXN0IHRvIGFuIHNicDIgcGFnZSB0YWJsZS4gIElmIGFueQorCSAqIHNjYXR0ZXJsaXN0IGVudHJpZXMgYXJlIHRvbyBiaWcgZm9yIHNicDIsIHdlIHNwbGl0IHRoZW0gYXMgd2UKKwkgKiBnby4gIEV2ZW4gaWYgd2UgYXNrIHRoZSBibG9jayBJL08gbGF5ZXIgdG8gbm90IGdpdmUgdXMgc2cKKwkgKiBlbGVtZW50cyBsYXJnZXIgdGhhbiA2NTUzNSBieXRlcywgc29tZSBJT01NVXMgbWF5IG1lcmdlIHNnIGVsZW1lbnRzCisJICogZHVyaW5nIERNQSBtYXBwaW5nLCBhbmQgTGludXggY3VycmVudGx5IGRvZXNuJ3QgcHJldmVudCB0aGlzLgorCSAqLworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnICsgaSk7CisJCXNnX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyArIGkpOworCQl3aGlsZSAoc2dfbGVuKSB7CisJCQlsID0gbWluKHNnX2xlbiwgU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgpOworCQkJb3JiLT5wYWdlX3RhYmxlW2pdLmxvdyA9IHNnX2FkZHI7CisJCQlvcmItPnBhZ2VfdGFibGVbal0uaGlnaCA9IChsIDw8IDE2KTsKKwkJCXNnX2FkZHIgKz0gbDsKKwkJCXNnX2xlbiAtPSBsOworCQkJaisrOworCQl9CisJfQorCisJc2l6ZSA9IHNpemVvZihvcmItPnBhZ2VfdGFibGVbMF0pICogajsKKworCS8qCisJICogVGhlIGRhdGFfZGVzY3JpcHRvciBwb2ludGVyIGlzIHRoZSBvbmUgY2FzZSB3aGVyZSB3ZSBuZWVkCisJICogdG8gZmlsbCBpbiB0aGUgbm9kZSBJRCBwYXJ0IG9mIHRoZSBhZGRyZXNzLiAgQWxsIG90aGVyCisJICogcG9pbnRlcnMgYXNzdW1lIHRoYXQgdGhlIGRhdGEgcmVmZXJlbmNlZCByZXNpZGUgb24gdGhlCisJICogaW5pdGlhdG9yIChpLmUuIHVzKSwgYnV0IGRhdGFfZGVzY3JpcHRvciBjYW4gcmVmZXIgdG8gZGF0YQorCSAqIG9uIG90aGVyIG5vZGVzIHNvIHdlIG5lZWQgdG8gcHV0IG91ciBJRCBpbiBkZXNjcmlwdG9yLmhpZ2guCisJICovCisKKwlvcmItPnBhZ2VfdGFibGVfYnVzID0KKwkJZG1hX21hcF9zaW5nbGUoZGV2aWNlLT5jYXJkLT5kZXZpY2UsIG9yYi0+cGFnZV90YWJsZSwKKwkJCSAgICAgICBzaXplLCBETUFfVE9fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3Iob3JiLT5wYWdlX3RhYmxlX2J1cykpCisJCWdvdG8gZmFpbF9wYWdlX3RhYmxlOworCW9yYi0+cmVxdWVzdC5kYXRhX2Rlc2NyaXB0b3IuaGlnaCA9IHNkLT5hZGRyZXNzX2hpZ2g7CisJb3JiLT5yZXF1ZXN0LmRhdGFfZGVzY3JpcHRvci5sb3cgID0gb3JiLT5wYWdlX3RhYmxlX2J1czsKKwlvcmItPnJlcXVlc3QubWlzYyB8PQorCQlDT01NQU5EX09SQl9QQUdFX1RBQkxFX1BSRVNFTlQgfAorCQlDT01NQU5EX09SQl9EQVRBX1NJWkUoaik7CisKKwlmd19tZW1jcHlfdG9fYmUzMihvcmItPnBhZ2VfdGFibGUsIG9yYi0+cGFnZV90YWJsZSwgc2l6ZSk7CisKKwlyZXR1cm4gMDsKKworIGZhaWxfcGFnZV90YWJsZToKKwlkbWFfdW5tYXBfc2coZGV2aWNlLT5jYXJkLT5kZXZpY2UsIHNnLCBvcmItPmNtZC0+dXNlX3NnLAorCQkgICAgIG9yYi0+Y21kLT5zY19kYXRhX2RpcmVjdGlvbik7CisgZmFpbDoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyogU0NTSSBzdGFjayBpbnRlZ3JhdGlvbiAqLworCitzdGF0aWMgaW50IHNicDJfc2NzaV9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBzY3NpX2RvbmVfZm5fdCBkb25lKQoreworCXN0cnVjdCBzYnAyX2RldmljZSAqc2QgPQorCQkoc3RydWN0IHNicDJfZGV2aWNlICopY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBmd191bml0ICp1bml0ID0gc2QtPnVuaXQ7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKHVuaXQtPmRldmljZS5wYXJlbnQpOworCXN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiICpvcmI7CisKKwkvKgorCSAqIEJpZGlyZWN0aW9uYWwgY29tbWFuZHMgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIGFuZCB1bmtub3duCisJICogdHJhbnNmZXIgZGlyZWN0aW9uIG5vdCBoYW5kbGVkLgorCSAqLworCWlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMKSB7CisJCWZ3X2Vycm9yKCJDYW5ub3QgaGFuZGxlIERNQV9CSURJUkVDVElPTkFMIC0gcmVqZWN0aW5nIGNvbW1hbmQiKTsKKwkJY21kLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCWRvbmUoY21kKTsKKwkJcmV0dXJuIDA7CisJfQorCisJb3JiID0ga3phbGxvYyhzaXplb2YoKm9yYiksIEdGUF9BVE9NSUMpOworCWlmIChvcmIgPT0gTlVMTCkgeworCQlmd19ub3RpZnkoImZhaWxlZCB0byBhbGxvYyBvcmJcbiIpOworCQlnb3RvIGZhaWxfYWxsb2M7CisJfQorCisJLyogSW5pdGlhbGl6ZSByY29kZSB0byBzb21ldGhpbmcgbm90IFJDT0RFX0NPTVBMRVRFLiAqLworCW9yYi0+YmFzZS5yY29kZSA9IC0xOworCW9yYi0+YmFzZS5yZXF1ZXN0X2J1cyA9CisJCWRtYV9tYXBfc2luZ2xlKGRldmljZS0+Y2FyZC0+ZGV2aWNlLCAmb3JiLT5yZXF1ZXN0LAorCQkJICAgICAgIHNpemVvZihvcmItPnJlcXVlc3QpLCBETUFfVE9fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3Iob3JiLT5iYXNlLnJlcXVlc3RfYnVzKSkKKwkJZ290byBmYWlsX21hcHBpbmc7CisKKwlvcmItPnVuaXQgPSB1bml0OworCW9yYi0+ZG9uZSA9IGRvbmU7CisJb3JiLT5jbWQgID0gY21kOworCisJb3JiLT5yZXF1ZXN0Lm5leHQuaGlnaCAgID0gU0JQMl9PUkJfTlVMTDsKKwlvcmItPnJlcXVlc3QubmV4dC5sb3cgICAgPSAweDA7CisJLyoKKwkgKiBBdCBzcGVlZCAxMDAgd2UgY2FuIGRvIDUxMiBieXRlcyBwZXIgcGFja2V0LCBhdCBzcGVlZCAyMDAsCisJICogMTAyNCBieXRlcyBwZXIgcGFja2V0IGV0Yy4gIFRoZSBTQlAtMiBtYXhfcGF5bG9hZCBmaWVsZAorCSAqIHNwZWNpZmllcyB0aGUgbWF4IHBheWxvYWQgc2l6ZSBhcyAyIF4gKG1heF9wYXlsb2FkICsgMiksIHNvCisJICogaWYgd2Ugc2V0IHRoaXMgdG8gbWF4X3NwZWVkICsgNywgd2UgZ2V0IHRoZSByaWdodCB2YWx1ZS4KKwkgKi8KKwlvcmItPnJlcXVlc3QubWlzYyA9CisJCUNPTU1BTkRfT1JCX01BWF9QQVlMT0FEKGRldmljZS0+bm9kZS0+bWF4X3NwZWVkICsgNykgfAorCQlDT01NQU5EX09SQl9TUEVFRChkZXZpY2UtPm5vZGUtPm1heF9zcGVlZCkgfAorCQlDT01NQU5EX09SQl9OT1RJRlk7CisKKwlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCW9yYi0+cmVxdWVzdC5taXNjIHw9CisJCQlDT01NQU5EX09SQl9ESVJFQ1RJT04oU0JQMl9ESVJFQ1RJT05fRlJPTV9NRURJQSk7CisJZWxzZSBpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQlvcmItPnJlcXVlc3QubWlzYyB8PQorCQkJQ09NTUFORF9PUkJfRElSRUNUSU9OKFNCUDJfRElSRUNUSU9OX1RPX01FRElBKTsKKworCWlmIChjbWQtPnVzZV9zZyAmJiBzYnAyX2NvbW1hbmRfb3JiX21hcF9zY2F0dGVybGlzdChvcmIpIDwgMCkKKwkJZ290byBmYWlsX21hcF9wYXlsb2FkOworCisJZndfbWVtY3B5X3RvX2JlMzIoJm9yYi0+cmVxdWVzdCwgJm9yYi0+cmVxdWVzdCwgc2l6ZW9mKG9yYi0+cmVxdWVzdCkpOworCisJbWVtc2V0KG9yYi0+cmVxdWVzdC5jb21tYW5kX2Jsb2NrLAorCSAgICAgICAwLCBzaXplb2Yob3JiLT5yZXF1ZXN0LmNvbW1hbmRfYmxvY2spKTsKKwltZW1jcHkob3JiLT5yZXF1ZXN0LmNvbW1hbmRfYmxvY2ssIGNtZC0+Y21uZCwgQ09NTUFORF9TSVpFKCpjbWQtPmNtbmQpKTsKKworCW9yYi0+YmFzZS5jYWxsYmFjayA9IGNvbXBsZXRlX2NvbW1hbmRfb3JiOworCisJc2JwMl9zZW5kX29yYigmb3JiLT5iYXNlLCB1bml0LCBzZC0+bm9kZV9pZCwgc2QtPmdlbmVyYXRpb24sCisJCSAgICAgIHNkLT5jb21tYW5kX2Jsb2NrX2FnZW50X2FkZHJlc3MgKyBTQlAyX09SQl9QT0lOVEVSKTsKKworCXJldHVybiAwOworCisgZmFpbF9tYXBfcGF5bG9hZDoKKwlkbWFfdW5tYXBfc2luZ2xlKGRldmljZS0+Y2FyZC0+ZGV2aWNlLCBvcmItPmJhc2UucmVxdWVzdF9idXMsCisJCQkgc2l6ZW9mKG9yYi0+cmVxdWVzdCksIERNQV9UT19ERVZJQ0UpOworIGZhaWxfbWFwcGluZzoKKwlrZnJlZShvcmIpOworIGZhaWxfYWxsb2M6CisJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Cit9CisKK3N0YXRpYyBpbnQgc2JwMl9zY3NpX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc2JwMl9kZXZpY2UgKnNkID0gKHN0cnVjdCBzYnAyX2RldmljZSAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhOworCisJc2Rldi0+YWxsb3dfcmVzdGFydCA9IDE7CisKKwlpZiAoc2QtPndvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EX0lOUVVJUllfMzYpCisJCXNkZXYtPmlucXVpcnlfbGVuID0gMzY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2JwMl9zY3NpX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNicDJfZGV2aWNlICpzZCA9IChzdHJ1Y3Qgc2JwMl9kZXZpY2UgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IHNkLT51bml0OworCisJc2Rldi0+dXNlXzEwX2Zvcl9ydyA9IDE7CisKKwlpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX1JPTSkKKwkJc2Rldi0+dXNlXzEwX2Zvcl9tcyA9IDE7CisJaWYgKHNkZXYtPnR5cGUgPT0gVFlQRV9ESVNLICYmCisJICAgIHNkLT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF9NT0RFX1NFTlNFXzgpCisJCXNkZXYtPnNraXBfbXNfcGFnZV84ID0gMTsKKwlpZiAoc2QtPndvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EX0ZJWF9DQVBBQ0lUWSkgeworCQlmd19ub3RpZnkoInNldHRpbmcgZml4X2NhcGFjaXR5IGZvciAlc1xuIiwgdW5pdC0+ZGV2aWNlLmJ1c19pZCk7CisJCXNkZXYtPmZpeF9jYXBhY2l0eSA9IDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgYnkgc2NzaSBzdGFjayB3aGVuIHNvbWV0aGluZyBoYXMgcmVhbGx5IGdvbmUgd3JvbmcuICBVc3VhbGx5CisgKiBjYWxsZWQgd2hlbiBhIGNvbW1hbmQgaGFzIHRpbWVkLW91dCBmb3Igc29tZSByZWFzb24uCisgKi8KK3N0YXRpYyBpbnQgc2JwMl9zY3NpX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc2JwMl9kZXZpY2UgKnNkID0KKwkJKHN0cnVjdCBzYnAyX2RldmljZSAqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IHNkLT51bml0OworCisJZndfbm90aWZ5KCJzYnAyX3Njc2lfYWJvcnRcbiIpOworCXNicDJfYWdlbnRfcmVzZXQodW5pdCk7CisJc2JwMl9jYW5jZWxfb3Jicyh1bml0KTsKKworCXJldHVybiBTVUNDRVNTOworfQorCisvKgorICogRm9ybWF0IG9mIC9zeXMvYnVzL3Njc2kvZGV2aWNlcy8uLi4vaWVlZTEzOTRfaWQ6CisgKiB1NjQgRVVJLTY0IDogdTI0IGRpcmVjdG9yeV9JRCA6IHUxNiBMVU4gIChhbGwgcHJpbnRlZCBpbiBoZXhhZGVjaW1hbCkKKyAqCisgKiBUaGlzIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRhcmdldCBwb3J0IGlkZW50aWZpZXIgYW5kIGxvZ2ljYWwgdW5pdAorICogaWRlbnRpZmllciBhcyBwZXIgU0FNLTIuLi5TQU0tNCBhbm5leCBBLgorICovCitzdGF0aWMgc3NpemVfdAorc2JwMl9zeXNmc19pZWVlMTM5NF9pZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJc3RydWN0IHNicDJfZGV2aWNlICpzZDsKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdDsKKwlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2U7CisJdTMyIGRpcmVjdG9yeV9pZDsKKwlzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yIGNpOworCWludCBrZXksIHZhbHVlLCBsdW47CisKKwlpZiAoIXNkZXYpCisJCXJldHVybiAwOworCXNkID0gKHN0cnVjdCBzYnAyX2RldmljZSAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhOworCXVuaXQgPSBzZC0+dW5pdDsKKwlkZXZpY2UgPSBmd19kZXZpY2UodW5pdC0+ZGV2aWNlLnBhcmVudCk7CisKKwkvKiBpbXBsaWNpdCBkaXJlY3RvcnkgSUQgKi8KKwlkaXJlY3RvcnlfaWQgPSAoKHVuaXQtPmRpcmVjdG9yeSAtIGRldmljZS0+Y29uZmlnX3JvbSkgKiA0CisJCQkrIENTUl9DT05GSUdfUk9NKSAmIDB4ZmZmZmZmOworCisJLyogZXhwbGljaXQgZGlyZWN0b3J5IElELCBvdmVycmlkZXMgaW1wbGljaXQgSUQgaWYgcHJlc2VudCAqLworCWZ3X2Nzcl9pdGVyYXRvcl9pbml0KCZjaSwgdW5pdC0+ZGlyZWN0b3J5KTsKKwl3aGlsZSAoZndfY3NyX2l0ZXJhdG9yX25leHQoJmNpLCAma2V5LCAmdmFsdWUpKQorCQlpZiAoa2V5ID09IENTUl9ESVJFQ1RPUllfSUQpIHsKKwkJCWRpcmVjdG9yeV9pZCA9IHZhbHVlOworCQkJYnJlYWs7CisJCX0KKworCS8qIEZJWE1FOiBNYWtlIHRoaXMgd29yayBmb3IgbXVsdGktbHVuIGRldmljZXMuICovCisJbHVuID0gMDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwOHglMDh4OiUwNng6JTA0eFxuIiwKKwkJCWRldmljZS0+Y29uZmlnX3JvbVszXSwgZGV2aWNlLT5jb25maWdfcm9tWzRdLAorCQkJZGlyZWN0b3J5X2lkLCBsdW4pOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoaWVlZTEzOTRfaWQsIFNfSVJVR08sIHNicDJfc3lzZnNfaWVlZTEzOTRfaWRfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqc2JwMl9zY3NpX3N5c2ZzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2llZWUxMzk0X2lkLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNjc2lfZHJpdmVyX3RlbXBsYXRlID0geworCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiU0JQLTIgSUVFRS0xMzk0IiwKKwkucHJvY19uYW1lCQk9IChjaGFyICopc2JwMl9kcml2ZXJfbmFtZSwKKwkucXVldWVjb21tYW5kCQk9IHNicDJfc2NzaV9xdWV1ZWNvbW1hbmQsCisJLnNsYXZlX2FsbG9jCQk9IHNicDJfc2NzaV9zbGF2ZV9hbGxvYywKKwkuc2xhdmVfY29uZmlndXJlCT0gc2JwMl9zY3NpX3NsYXZlX2NvbmZpZ3VyZSwKKwkuZWhfYWJvcnRfaGFuZGxlcgk9IHNicDJfc2NzaV9hYm9ydCwKKwkudGhpc19pZAkJPSAtMSwKKwkuc2dfdGFibGVzaXplCQk9IFNHX0FMTCwKKwkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCisJLmNtZF9wZXJfbHVuCQk9IDEsCisJLmNhbl9xdWV1ZQkJPSAxLAorCS5zZGV2X2F0dHJzCQk9IHNicDJfc2NzaV9zeXNmc19hdHRycywKK307CisKK01PRFVMRV9BVVRIT1IoIktyaXN0aWFuIEhvZWdzYmVyZyA8a3JoQGJpdHBsYW5ldC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNDU0kgb3ZlciBJRUVFMTM5NCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFVklDRV9UQUJMRShpZWVlMTM5NCwgc2JwMl9pZF90YWJsZSk7CisKKy8qIFByb3ZpZGUgYSBtb2R1bGUgYWxpYXMgc28gcm9vdC1vbi1zYnAyIGluaXRyZHMgZG9uJ3QgYnJlYWsuICovCisjaWZuZGVmIENPTkZJR19JRUVFMTM5NF9TQlAyX01PRFVMRQorTU9EVUxFX0FMSUFTKCJzYnAyIik7CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgc2JwMl9pbml0KHZvaWQpCit7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2JwMl9kcml2ZXIuZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNicDJfY2xlYW51cCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZzYnAyX2RyaXZlci5kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzYnAyX2luaXQpOworbW9kdWxlX2V4aXQoc2JwMl9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWViYjhhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5jCkBAIC0wLDAgKzEsNTM3IEBACisvKgorICogSW5jcmVtZW50YWwgYnVzIHNjYW4sIGJhc2VkIG9uIGJ1cyB0b3BvbG9neQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEtyaXN0aWFuIEhvZWdzYmVyZyA8a3JoQGJpdHBsYW5ldC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJmdy10b3BvbG9neS5oIgorCisjZGVmaW5lIFNFTEZfSURfUEhZX0lEKHEpCQkoKChxKSA+PiAyNCkgJiAweDNmKQorI2RlZmluZSBTRUxGX0lEX0VYVEVOREVEKHEpCQkoKChxKSA+PiAyMykgJiAweDAxKQorI2RlZmluZSBTRUxGX0lEX0xJTktfT04ocSkJCSgoKHEpID4+IDIyKSAmIDB4MDEpCisjZGVmaW5lIFNFTEZfSURfR0FQX0NPVU5UKHEpCQkoKChxKSA+PiAxNikgJiAweDNmKQorI2RlZmluZSBTRUxGX0lEX1BIWV9TUEVFRChxKQkJKCgocSkgPj4gMTQpICYgMHgwMykKKyNkZWZpbmUgU0VMRl9JRF9DT05URU5ERVIocSkJCSgoKHEpID4+IDExKSAmIDB4MDEpCisjZGVmaW5lIFNFTEZfSURfUEhZX0lOSVRJQVRPUihxKQkoKChxKSA+PiAgMSkgJiAweDAxKQorI2RlZmluZSBTRUxGX0lEX01PUkVfUEFDS0VUUyhxKQkJKCgocSkgPj4gIDApICYgMHgwMSkKKworI2RlZmluZSBTRUxGX0lEX0VYVF9TRVFVRU5DRShxKQkJKCgocSkgPj4gMjApICYgMHgwNykKKworc3RhdGljIHUzMiAqY291bnRfcG9ydHModTMyICpzaWQsIGludCAqdG90YWxfcG9ydF9jb3VudCwgaW50ICpjaGlsZF9wb3J0X2NvdW50KQoreworCXUzMiBxOworCWludCBwb3J0X3R5cGUsIHNoaWZ0LCBzZXE7CisKKwkqdG90YWxfcG9ydF9jb3VudCA9IDA7CisJKmNoaWxkX3BvcnRfY291bnQgPSAwOworCisJc2hpZnQgPSA2OworCXEgPSAqc2lkOworCXNlcSA9IDA7CisKKwl3aGlsZSAoMSkgeworCQlwb3J0X3R5cGUgPSAocSA+PiBzaGlmdCkgJiAweDAzOworCQlzd2l0Y2ggKHBvcnRfdHlwZSkgeworCQljYXNlIFNFTEZJRF9QT1JUX0NISUxEOgorCQkJKCpjaGlsZF9wb3J0X2NvdW50KSsrOworCQljYXNlIFNFTEZJRF9QT1JUX1BBUkVOVDoKKwkJY2FzZSBTRUxGSURfUE9SVF9OQ09OTjoKKwkJCSgqdG90YWxfcG9ydF9jb3VudCkrKzsKKwkJY2FzZSBTRUxGSURfUE9SVF9OT05FOgorCQkJYnJlYWs7CisJCX0KKworCQlzaGlmdCAtPSAyOworCQlpZiAoc2hpZnQgPT0gMCkgeworCQkJaWYgKCFTRUxGX0lEX01PUkVfUEFDS0VUUyhxKSkKKwkJCQlyZXR1cm4gc2lkICsgMTsKKworCQkJc2hpZnQgPSAxNjsKKwkJCXNpZCsrOworCQkJcSA9ICpzaWQ7CisKKwkJCS8qCisJCQkgKiBDaGVjayB0aGF0IHRoZSBleHRyYSBwYWNrZXRzIGFjdHVhbGx5IGFyZQorCQkJICogZXh0ZW5kZWQgc2VsZiBJRCBwYWNrZXRzIGFuZCB0aGF0IHRoZQorCQkJICogc2VxdWVuY2UgbnVtYmVycyBpbiB0aGUgZXh0ZW5kZWQgc2VsZiBJRAorCQkJICogcGFja2V0cyBpbmNyZWFzZSBhcyBleHBlY3RlZC4KKwkJCSAqLworCisJCQlpZiAoIVNFTEZfSURfRVhURU5ERUQocSkgfHwKKwkJCSAgICBzZXEgIT0gU0VMRl9JRF9FWFRfU0VRVUVOQ0UocSkpCisJCQkJcmV0dXJuIE5VTEw7CisKKwkJCXNlcSsrOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGdldF9wb3J0X3R5cGUodTMyICpzaWQsIGludCBwb3J0X2luZGV4KQoreworCWludCBpbmRleCwgc2hpZnQ7CisKKwlpbmRleCA9IChwb3J0X2luZGV4ICsgNSkgLyA4OworCXNoaWZ0ID0gMTYgLSAoKHBvcnRfaW5kZXggKyA1KSAmIDcpICogMjsKKwlyZXR1cm4gKHNpZFtpbmRleF0gPj4gc2hpZnQpICYgMHgwMzsKK30KKworc3RhdGljIHN0cnVjdCBmd19ub2RlICpmd19ub2RlX2NyZWF0ZSh1MzIgc2lkLCBpbnQgcG9ydF9jb3VudCwgaW50IGNvbG9yKQoreworCXN0cnVjdCBmd19ub2RlICpub2RlOworCisJbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKCpub2RlKSArIHBvcnRfY291bnQgKiBzaXplb2Yobm9kZS0+cG9ydHNbMF0pLAorCQkgICAgICAgR0ZQX0FUT01JQyk7CisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlub2RlLT5jb2xvciA9IGNvbG9yOworCW5vZGUtPm5vZGVfaWQgPSBMT0NBTF9CVVMgfCBTRUxGX0lEX1BIWV9JRChzaWQpOworCW5vZGUtPmxpbmtfb24gPSBTRUxGX0lEX0xJTktfT04oc2lkKTsKKwlub2RlLT5waHlfc3BlZWQgPSBTRUxGX0lEX1BIWV9TUEVFRChzaWQpOworCW5vZGUtPnBvcnRfY291bnQgPSBwb3J0X2NvdW50OworCisJYXRvbWljX3NldCgmbm9kZS0+cmVmX2NvdW50LCAxKTsKKwlJTklUX0xJU1RfSEVBRCgmbm9kZS0+bGluayk7CisKKwlyZXR1cm4gbm9kZTsKK30KKworLyoKKyAqIENvbXB1dGUgdGhlIG1heGltdW0gaG9wIGNvdW50IGZvciB0aGlzIG5vZGUgYW5kIGl0J3MgY2hpbGRyZW4uICBUaGUKKyAqIG1heGltdW0gaG9wIGNvdW50IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBiZXR3ZWVuIGFueQorICogdHdvIG5vZGVzIGluIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCB0aGlzIG5vZGUuICBXZSBuZWVkIHRoaXMgZm9yCisgKiBzZXR0aW5nIHRoZSBnYXAgY291bnQuICBBcyB3ZSBidWlsZCB0aGUgdHJlZSBib3R0b20gdXAgaW4KKyAqIGJ1aWxkX3RyZWUoKSBiZWxvdywgdGhpcyBpcyBmYWlybHkgZWFzeSB0byBkbzogZm9yIGVhY2ggbm9kZSB3ZQorICogbWFpbnRhaW4gdGhlIG1heCBob3AgY291bnQgYW5kIHRoZSBtYXggZGVwdGgsIGllIHRoZSBudW1iZXIgb2YgaG9wcworICogdG8gdGhlIGZ1cnRoZXN0IGxlYWYuICBDb21wdXRpbmcgdGhlIG1heCBob3AgY291bnQgYnJlYWtzIGRvd24gaW50bworICogdHdvIGNhc2VzOiBlaXRoZXIgdGhlIHBhdGggZ29lcyB0aHJvdWdoIHRoaXMgbm9kZSwgaW4gd2hpY2ggY2FzZQorICogdGhlIGhvcCBjb3VudCBpcyB0aGUgc3VtIG9mIHRoZSB0d28gYmlnZ2VzdCBjaGlsZCBkZXB0aHMgcGx1cyAyLgorICogT3IgaXQgY291bGQgYmUgdGhlIGNhc2UgdGhhdCB0aGUgbWF4IGhvcCBwYXRoIGlzIGVudGlyZWx5CisgKiBjb250YWludGVkIGluIGEgY2hpbGQgdHJlZSwgaW4gd2hpY2ggY2FzZSB0aGUgbWF4IGhvcCBjb3VudCBpcyBqdXN0CisgKiB0aGUgbWF4IGhvcCBjb3VudCBvZiB0aGlzIGNoaWxkLgorICovCitzdGF0aWMgdm9pZCB1cGRhdGVfaG9wX2NvdW50KHN0cnVjdCBmd19ub2RlICpub2RlKQoreworCWludCBkZXB0aHNbMl0gPSB7IC0xLCAtMSB9OworCWludCBtYXhfY2hpbGRfaG9wcyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+cG9ydF9jb3VudDsgaSsrKSB7CisJCWlmIChub2RlLT5wb3J0c1tpXS5ub2RlID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAobm9kZS0+cG9ydHNbaV0ubm9kZS0+bWF4X2hvcHMgPiBtYXhfY2hpbGRfaG9wcykKKwkJCW1heF9jaGlsZF9ob3BzID0gbm9kZS0+cG9ydHNbaV0ubm9kZS0+bWF4X2hvcHM7CisKKwkJaWYgKG5vZGUtPnBvcnRzW2ldLm5vZGUtPm1heF9kZXB0aCA+IGRlcHRoc1swXSkgeworCQkJZGVwdGhzWzFdID0gZGVwdGhzWzBdOworCQkJZGVwdGhzWzBdID0gbm9kZS0+cG9ydHNbaV0ubm9kZS0+bWF4X2RlcHRoOworCQl9IGVsc2UgaWYgKG5vZGUtPnBvcnRzW2ldLm5vZGUtPm1heF9kZXB0aCA+IGRlcHRoc1sxXSkKKwkJCWRlcHRoc1sxXSA9IG5vZGUtPnBvcnRzW2ldLm5vZGUtPm1heF9kZXB0aDsKKwl9CisKKwlub2RlLT5tYXhfZGVwdGggPSBkZXB0aHNbMF0gKyAxOworCW5vZGUtPm1heF9ob3BzID0gbWF4KG1heF9jaGlsZF9ob3BzLCBkZXB0aHNbMF0gKyBkZXB0aHNbMV0gKyAyKTsKK30KKworCisvKioKKyAqIGJ1aWxkX3RyZWUgLSBCdWlsZCB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdG9wb2xvZ3kKKyAqIEBzZWxmX2lkczogYXJyYXkgb2Ygc2VsZiBJRHMgdG8gY3JlYXRlIHRoZSB0cmVlIGZyb20KKyAqIEBzZWxmX2lkX2NvdW50OiB0aGUgbGVuZ3RoIG9mIHRoZSBzZWxmX2lkcyBhcnJheQorICogQGxvY2FsX2lkOiB0aGUgbm9kZSBJRCBvZiB0aGUgbG9jYWwgbm9kZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gYnVpbGRzIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0b3BvbG9neSBnaXZlbgorICogYnkgdGhlIHNlbGYgSURzIGZyb20gdGhlIGxhdGVzdCBidXMgcmVzZXQuICBEdXJpbmcgdGhlIGNvbnN0cnVjdGlvbgorICogb2YgdGhlIHRyZWUsIHRoZSBmdW5jdGlvbiBjaGVja3MgdGhhdCB0aGUgc2VsZiBJRHMgYXJlIHZhbGlkIGFuZAorICogaW50ZXJuYWxseSBjb25zaXN0ZW50LiAgT24gc3VjY2Nlc3MgdGhpcyBmdW50aW9ucyByZXR1cm5zIHRoZQorICogZndfbm9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2NhbCBjYXJkIG90aGVyd2lzZSBOVUxMLgorICovCitzdGF0aWMgc3RydWN0IGZ3X25vZGUgKmJ1aWxkX3RyZWUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkJICB1MzIgKnNpZCwgaW50IHNlbGZfaWRfY291bnQpCit7CisJc3RydWN0IGZ3X25vZGUgKm5vZGUsICpjaGlsZCwgKmxvY2FsX25vZGUsICppcm1fbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0YWNrLCAqaDsKKwl1MzIgKm5leHRfc2lkLCAqZW5kLCBxOworCWludCBpLCBwb3J0X2NvdW50LCBjaGlsZF9wb3J0X2NvdW50LCBwaHlfaWQsIHBhcmVudF9jb3VudCwgc3RhY2tfZGVwdGg7CisJaW50IGdhcF9jb3VudCwgdG9wb2xvZ3lfdHlwZTsKKworCWxvY2FsX25vZGUgPSBOVUxMOworCW5vZGUgPSBOVUxMOworCUlOSVRfTElTVF9IRUFEKCZzdGFjayk7CisJc3RhY2tfZGVwdGggPSAwOworCWVuZCA9IHNpZCArIHNlbGZfaWRfY291bnQ7CisJcGh5X2lkID0gMDsKKwlpcm1fbm9kZSA9IE5VTEw7CisJZ2FwX2NvdW50ID0gU0VMRl9JRF9HQVBfQ09VTlQoKnNpZCk7CisJdG9wb2xvZ3lfdHlwZSA9IDA7CisKKwl3aGlsZSAoc2lkIDwgZW5kKSB7CisJCW5leHRfc2lkID0gY291bnRfcG9ydHMoc2lkLCAmcG9ydF9jb3VudCwgJmNoaWxkX3BvcnRfY291bnQpOworCisJCWlmIChuZXh0X3NpZCA9PSBOVUxMKSB7CisJCQlmd19lcnJvcigiSW5jb25zaXN0ZW50IGV4dGVuZGVkIHNlbGYgSURzLlxuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCXEgPSAqc2lkOworCQlpZiAocGh5X2lkICE9IFNFTEZfSURfUEhZX0lEKHEpKSB7CisJCQlmd19lcnJvcigiUEhZIElEIG1pc21hdGNoIGluIHNlbGYgSUQ6ICVkICE9ICVkLlxuIiwKKwkJCQkgcGh5X2lkLCBTRUxGX0lEX1BIWV9JRChxKSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWlmIChjaGlsZF9wb3J0X2NvdW50ID4gc3RhY2tfZGVwdGgpIHsKKwkJCWZ3X2Vycm9yKCJUb3BvbG9neSBzdGFjayB1bmRlcmZsb3dcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkvKgorCQkgKiBTZWVrIGJhY2sgZnJvbSB0aGUgdG9wIG9mIG91ciBzdGFjayB0byBmaW5kIHRoZQorCQkgKiBzdGFydCBvZiB0aGUgY2hpbGQgbm9kZXMgZm9yIHRoaXMgbm9kZS4KKwkJICovCisJCWZvciAoaSA9IDAsIGggPSAmc3RhY2s7IGkgPCBjaGlsZF9wb3J0X2NvdW50OyBpKyspCisJCQloID0gaC0+cHJldjsKKwkJY2hpbGQgPSBmd19ub2RlKGgpOworCisJCW5vZGUgPSBmd19ub2RlX2NyZWF0ZShxLCBwb3J0X2NvdW50LCBjYXJkLT5jb2xvcik7CisJCWlmIChub2RlID09IE5VTEwpIHsKKwkJCWZ3X2Vycm9yKCJPdXQgb2YgbWVtb3J5IHdoaWxlIGJ1aWxkaW5nIHRvcG9sb2d5LiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpZiAocGh5X2lkID09IChjYXJkLT5ub2RlX2lkICYgMHgzZikpCisJCQlsb2NhbF9ub2RlID0gbm9kZTsKKworCQlpZiAoU0VMRl9JRF9DT05URU5ERVIocSkpCisJCQlpcm1fbm9kZSA9IG5vZGU7CisKKwkJaWYgKG5vZGUtPnBoeV9zcGVlZCA9PSBTQ09ERV9CRVRBKQorCQkJdG9wb2xvZ3lfdHlwZSB8PSBGV19UT1BPTE9HWV9COworCQllbHNlCisJCQl0b3BvbG9neV90eXBlIHw9IEZXX1RPUE9MT0dZX0E7CisKKwkJcGFyZW50X2NvdW50ID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgcG9ydF9jb3VudDsgaSsrKSB7CisJCQlzd2l0Y2ggKGdldF9wb3J0X3R5cGUoc2lkLCBpKSkgeworCQkJY2FzZSBTRUxGSURfUE9SVF9QQVJFTlQ6CisJCQkJLyoKKwkJCQkgKiBXaG8ncyB5b3VyIGRhZGR5PyAgV2UgZG9udCBrbm93IHRoZQorCQkJCSAqIHBhcmVudCBub2RlIGF0IHRoaXMgdGltZSwgc28gd2UKKwkJCQkgKiB0ZW1wb3JhcmlseSBhYnVzZSBub2RlLT5jb2xvciBmb3IKKwkJCQkgKiByZW1lbWJlcmluZyB0aGUgZW50cnkgaW4gdGhlCisJCQkJICogbm9kZS0+cG9ydHMgYXJyYXkgd2hlcmUgdGhlIHBhcmVudAorCQkJCSAqIG5vZGUgc2hvdWxkIGJlLiAgTGF0ZXIsIHdoZW4gd2UKKwkJCQkgKiBoYW5kbGUgdGhlIHBhcmVudCBub2RlLCB3ZSBmaXggdXAKKwkJCQkgKiB0aGUgcmVmZXJlbmNlLgorCQkJCSAqLworCQkJCXBhcmVudF9jb3VudCsrOworCQkJCW5vZGUtPmNvbG9yID0gaTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBTRUxGSURfUE9SVF9DSElMRDoKKwkJCQlub2RlLT5wb3J0c1tpXS5ub2RlID0gY2hpbGQ7CisJCQkJLyoKKwkJCQkgKiBGaXggdXAgcGFyZW50IHJlZmVyZW5jZSBmb3IgdGhpcworCQkJCSAqIGNoaWxkIG5vZGUuCisJCQkJICovCisJCQkJY2hpbGQtPnBvcnRzW2NoaWxkLT5jb2xvcl0ubm9kZSA9IG5vZGU7CisJCQkJY2hpbGQtPmNvbG9yID0gY2FyZC0+Y29sb3I7CisJCQkJY2hpbGQgPSBmd19ub2RlKGNoaWxkLT5saW5rLm5leHQpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgdGhhdCB0aGUgbm9kZSByZXBvcnRzIGV4YWN0bHkgb25lIHBhcmVudAorCQkgKiBwb3J0LCBleGNlcHQgZm9yIHRoZSByb290LCB3aGljaCBvZiBjb3Vyc2Ugc2hvdWxkCisJCSAqIGhhdmUgbm8gcGFyZW50cy4KKwkJICovCisJCWlmICgobmV4dF9zaWQgPT0gZW5kICYmIHBhcmVudF9jb3VudCAhPSAwKSB8fAorCQkgICAgKG5leHRfc2lkIDwgZW5kICYmIHBhcmVudF9jb3VudCAhPSAxKSkgeworCQkJZndfZXJyb3IoIlBhcmVudCBwb3J0IGluY29uc2lzdGVuY3kgZm9yIG5vZGUgJWQ6ICIKKwkJCQkgInBhcmVudF9jb3VudD0lZFxuIiwgcGh5X2lkLCBwYXJlbnRfY291bnQpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkvKiBQb3AgdGhlIGNoaWxkIG5vZGVzIG9mZiB0aGUgc3RhY2sgYW5kIHB1c2ggdGhlIG5ldyBub2RlLiAqLworCQlfX2xpc3RfZGVsKGgtPnByZXYsICZzdGFjayk7CisJCWxpc3RfYWRkX3RhaWwoJm5vZGUtPmxpbmssICZzdGFjayk7CisJCXN0YWNrX2RlcHRoICs9IDEgLSBjaGlsZF9wb3J0X2NvdW50OworCisJCS8qCisJCSAqIElmIGFsbCBQSFlzIGRvZXMgbm90IHJlcG9ydCB0aGUgc2FtZSBnYXAgY291bnQKKwkJICogc2V0dGluZywgd2UgZmFsbCBiYWNrIHRvIDYzIHdoaWNoIHdpbGwgZm9yY2UgYSBnYXAKKwkJICogY291bnQgcmVjb25maWd1cmF0aW9uIGFuZCBhIHJlc2V0LgorCQkgKi8KKwkJaWYgKFNFTEZfSURfR0FQX0NPVU5UKHEpICE9IGdhcF9jb3VudCkKKwkJCWdhcF9jb3VudCA9IDYzOworCisJCXVwZGF0ZV9ob3BfY291bnQobm9kZSk7CisKKwkJc2lkID0gbmV4dF9zaWQ7CisJCXBoeV9pZCsrOworCX0KKworCWNhcmQtPnJvb3Rfbm9kZSA9IG5vZGU7CisJY2FyZC0+aXJtX25vZGUgPSBpcm1fbm9kZTsKKwljYXJkLT5nYXBfY291bnQgPSBnYXBfY291bnQ7CisJY2FyZC0+dG9wb2xvZ3lfdHlwZSA9IHRvcG9sb2d5X3R5cGU7CisKKwlyZXR1cm4gbG9jYWxfbm9kZTsKK30KKwordHlwZWRlZiB2b2lkICgqZndfbm9kZV9jYWxsYmFja190KShzdHJ1Y3QgZndfY2FyZCAqIGNhcmQsCisJCQkJICAgc3RydWN0IGZ3X25vZGUgKiBub2RlLAorCQkJCSAgIHN0cnVjdCBmd19ub2RlICogcGFyZW50KTsKKworc3RhdGljIHZvaWQKK2Zvcl9lYWNoX2Z3X25vZGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19ub2RlICpyb290LAorCQkgZndfbm9kZV9jYWxsYmFja190IGNhbGxiYWNrKQoreworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZndfbm9kZSAqbm9kZSwgKm5leHQsICpjaGlsZCwgKnBhcmVudDsKKwlpbnQgaTsKKworCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKKworCWZ3X25vZGVfZ2V0KHJvb3QpOworCWxpc3RfYWRkX3RhaWwoJnJvb3QtPmxpbmssICZsaXN0KTsKKwlwYXJlbnQgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmxpc3QsIGxpbmspIHsKKwkJbm9kZS0+Y29sb3IgPSBjYXJkLT5jb2xvcjsKKworCQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+cG9ydF9jb3VudDsgaSsrKSB7CisJCQljaGlsZCA9IG5vZGUtPnBvcnRzW2ldLm5vZGU7CisJCQlpZiAoIWNoaWxkKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNoaWxkLT5jb2xvciA9PSBjYXJkLT5jb2xvcikKKwkJCQlwYXJlbnQgPSBjaGlsZDsKKwkJCWVsc2UgeworCQkJCWZ3X25vZGVfZ2V0KGNoaWxkKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZjaGlsZC0+bGluaywgJmxpc3QpOworCQkJfQorCQl9CisKKwkJY2FsbGJhY2soY2FyZCwgbm9kZSwgcGFyZW50KTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbmV4dCwgJmxpc3QsIGxpbmspCisJCWZ3X25vZGVfcHV0KG5vZGUpOworfQorCitzdGF0aWMgdm9pZAorcmVwb3J0X2xvc3Rfbm9kZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJIHN0cnVjdCBmd19ub2RlICpub2RlLCBzdHJ1Y3QgZndfbm9kZSAqcGFyZW50KQoreworCWZ3X25vZGVfZXZlbnQoY2FyZCwgbm9kZSwgRldfTk9ERV9ERVNUUk9ZRUQpOworCWZ3X25vZGVfcHV0KG5vZGUpOworfQorCitzdGF0aWMgdm9pZAorcmVwb3J0X2ZvdW5kX25vZGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCSAgc3RydWN0IGZ3X25vZGUgKm5vZGUsIHN0cnVjdCBmd19ub2RlICpwYXJlbnQpCit7CisJaW50IGJfcGF0aCA9IChub2RlLT5waHlfc3BlZWQgPT0gU0NPREVfQkVUQSk7CisKKwlpZiAocGFyZW50ICE9IE5VTEwpIHsKKwkJLyogbWluKCkgbWFjcm8gZG9lc24ndCB3b3JrIGhlcmUgd2l0aCBnY2MgMy40ICovCisJCW5vZGUtPm1heF9zcGVlZCA9IHBhcmVudC0+bWF4X3NwZWVkIDwgbm9kZS0+cGh5X3NwZWVkID8KKwkJCQkJcGFyZW50LT5tYXhfc3BlZWQgOiBub2RlLT5waHlfc3BlZWQ7CisJCW5vZGUtPmJfcGF0aCA9IHBhcmVudC0+Yl9wYXRoICYmIGJfcGF0aDsKKwl9IGVsc2UgeworCQlub2RlLT5tYXhfc3BlZWQgPSBub2RlLT5waHlfc3BlZWQ7CisJCW5vZGUtPmJfcGF0aCA9IGJfcGF0aDsKKwl9CisKKwlmd19ub2RlX2V2ZW50KGNhcmQsIG5vZGUsIEZXX05PREVfQ1JFQVRFRCk7Cit9CisKK3ZvaWQgZndfZGVzdHJveV9ub2RlcyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwljYXJkLT5jb2xvcisrOworCWlmIChjYXJkLT5sb2NhbF9ub2RlICE9IE5VTEwpCisJCWZvcl9lYWNoX2Z3X25vZGUoY2FyZCwgY2FyZC0+bG9jYWxfbm9kZSwgcmVwb3J0X2xvc3Rfbm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtb3ZlX3RyZWUoc3RydWN0IGZ3X25vZGUgKm5vZGUwLCBzdHJ1Y3QgZndfbm9kZSAqbm9kZTEsIGludCBwb3J0KQoreworCXN0cnVjdCBmd19ub2RlICp0cmVlOworCWludCBpOworCisJdHJlZSA9IG5vZGUxLT5wb3J0c1twb3J0XS5ub2RlOworCW5vZGUwLT5wb3J0c1twb3J0XS5ub2RlID0gdHJlZTsKKwlmb3IgKGkgPSAwOyBpIDwgdHJlZS0+cG9ydF9jb3VudDsgaSsrKSB7CisJCWlmICh0cmVlLT5wb3J0c1tpXS5ub2RlID09IG5vZGUxKSB7CisJCQl0cmVlLT5wb3J0c1tpXS5ub2RlID0gbm9kZTA7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoqCisgKiB1cGRhdGVfdHJlZSAtIGNvbXBhcmUgdGhlIG9sZCB0b3BvbG9neSB0cmVlIGZvciBjYXJkIHdpdGggdGhlIG5ldworICogb25lIHNwZWNpZmllZCBieSByb290LiAgUXVldWUgdGhlIG5vZGVzIGFuZCBtYXJrIHRoZW0gYXMgZWl0aGVyCisgKiBmb3VuZCwgbG9zdCBvciB1cGRhdGVkLiAgVXBkYXRlIHRoZSBub2RlcyBpbiB0aGUgY2FyZCB0b3BvbG9neSB0cmVlCisgKiBhcyB3ZSBnby4KKyAqLworc3RhdGljIHZvaWQKK3VwZGF0ZV90cmVlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfbm9kZSAqcm9vdCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3QwLCBsaXN0MTsKKwlzdHJ1Y3QgZndfbm9kZSAqbm9kZTAsICpub2RlMTsKKwlpbnQgaSwgZXZlbnQ7CisKKwlJTklUX0xJU1RfSEVBRCgmbGlzdDApOworCWxpc3RfYWRkX3RhaWwoJmNhcmQtPmxvY2FsX25vZGUtPmxpbmssICZsaXN0MCk7CisJSU5JVF9MSVNUX0hFQUQoJmxpc3QxKTsKKwlsaXN0X2FkZF90YWlsKCZyb290LT5saW5rLCAmbGlzdDEpOworCisJbm9kZTAgPSBmd19ub2RlKGxpc3QwLm5leHQpOworCW5vZGUxID0gZndfbm9kZShsaXN0MS5uZXh0KTsKKworCXdoaWxlICgmbm9kZTAtPmxpbmsgIT0gJmxpc3QwKSB7CisKKwkJLyogYXNzZXJ0KG5vZGUwLT5wb3J0X2NvdW50ID09IG5vZGUxLT5wb3J0X2NvdW50KTsgKi8KKwkJaWYgKG5vZGUwLT5saW5rX29uICYmICFub2RlMS0+bGlua19vbikKKwkJCWV2ZW50ID0gRldfTk9ERV9MSU5LX09GRjsKKwkJZWxzZSBpZiAoIW5vZGUwLT5saW5rX29uICYmIG5vZGUxLT5saW5rX29uKQorCQkJZXZlbnQgPSBGV19OT0RFX0xJTktfT047CisJCWVsc2UKKwkJCWV2ZW50ID0gRldfTk9ERV9VUERBVEVEOworCisJCW5vZGUwLT5ub2RlX2lkID0gbm9kZTEtPm5vZGVfaWQ7CisJCW5vZGUwLT5jb2xvciA9IGNhcmQtPmNvbG9yOworCQlub2RlMC0+bGlua19vbiA9IG5vZGUxLT5saW5rX29uOworCQlub2RlMC0+aW5pdGlhdGVkX3Jlc2V0ID0gbm9kZTEtPmluaXRpYXRlZF9yZXNldDsKKwkJbm9kZTAtPm1heF9ob3BzID0gbm9kZTEtPm1heF9ob3BzOworCQlub2RlMS0+Y29sb3IgPSBjYXJkLT5jb2xvcjsKKwkJZndfbm9kZV9ldmVudChjYXJkLCBub2RlMCwgZXZlbnQpOworCisJCWlmIChjYXJkLT5yb290X25vZGUgPT0gbm9kZTEpCisJCQljYXJkLT5yb290X25vZGUgPSBub2RlMDsKKwkJaWYgKGNhcmQtPmlybV9ub2RlID09IG5vZGUxKQorCQkJY2FyZC0+aXJtX25vZGUgPSBub2RlMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgbm9kZTAtPnBvcnRfY291bnQ7IGkrKykgeworCQkJaWYgKG5vZGUwLT5wb3J0c1tpXS5ub2RlICYmIG5vZGUxLT5wb3J0c1tpXS5ub2RlKSB7CisJCQkJLyoKKwkJCQkgKiBUaGlzIHBvcnQgZGlkbid0IGNoYW5nZSwgcXVldWUgdGhlCisJCQkJICogY29ubmVjdGVkIG5vZGUgZm9yIGZ1cnRoZXIKKwkJCQkgKiBpbnZlc3RpZ2F0aW9uLgorCQkJCSAqLworCQkJCWlmIChub2RlMC0+cG9ydHNbaV0ubm9kZS0+Y29sb3IgPT0gY2FyZC0+Y29sb3IpCisJCQkJCWNvbnRpbnVlOworCQkJCWxpc3RfYWRkX3RhaWwoJm5vZGUwLT5wb3J0c1tpXS5ub2RlLT5saW5rLAorCQkJCQkgICAgICAmbGlzdDApOworCQkJCWxpc3RfYWRkX3RhaWwoJm5vZGUxLT5wb3J0c1tpXS5ub2RlLT5saW5rLAorCQkJCQkgICAgICAmbGlzdDEpOworCQkJfSBlbHNlIGlmIChub2RlMC0+cG9ydHNbaV0ubm9kZSkgeworCQkJCS8qCisJCQkJICogVGhlIG5vZGVzIGNvbm5lY3RlZCBoZXJlIHdlcmUKKwkJCQkgKiB1bnBsdWdnZWQ7IHVucmVmIHRoZSBsb3N0IG5vZGVzIGFuZAorCQkJCSAqIHF1ZXVlIEZXX05PREVfTE9TVCBjYWxsYmFja3MgZm9yCisJCQkJICogdGhlbS4KKwkJCQkgKi8KKworCQkJCWZvcl9lYWNoX2Z3X25vZGUoY2FyZCwgbm9kZTAtPnBvcnRzW2ldLm5vZGUsCisJCQkJCQkgcmVwb3J0X2xvc3Rfbm9kZSk7CisJCQkJbm9kZTAtPnBvcnRzW2ldLm5vZGUgPSBOVUxMOworCQkJfSBlbHNlIGlmIChub2RlMS0+cG9ydHNbaV0ubm9kZSkgeworCQkJCS8qCisJCQkJICogT25lIG9yIG1vcmUgbm9kZSB3ZXJlIGNvbm5lY3RlZCB0bworCQkJCSAqIHRoaXMgcG9ydC4gTW92ZSB0aGUgbmV3IG5vZGVzIGludG8KKwkJCQkgKiB0aGUgdHJlZSBhbmQgcXVldWUgRldfTk9ERV9DUkVBVEVECisJCQkJICogY2FsbGJhY2tzIGZvciB0aGVtLgorCQkJCSAqLworCQkJCW1vdmVfdHJlZShub2RlMCwgbm9kZTEsIGkpOworCQkJCWZvcl9lYWNoX2Z3X25vZGUoY2FyZCwgbm9kZTAtPnBvcnRzW2ldLm5vZGUsCisJCQkJCQkgcmVwb3J0X2ZvdW5kX25vZGUpOworCQkJfQorCQl9CisKKwkJbm9kZTAgPSBmd19ub2RlKG5vZGUwLT5saW5rLm5leHQpOworCQlub2RlMSA9IGZ3X25vZGUobm9kZTEtPmxpbmsubmV4dCk7CisJfQorfQorCitzdGF0aWMgdm9pZAordXBkYXRlX3RvcG9sb2d5X21hcChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgdTMyICpzZWxmX2lkcywgaW50IHNlbGZfaWRfY291bnQpCit7CisJaW50IG5vZGVfY291bnQ7CisKKwljYXJkLT50b3BvbG9neV9tYXBbMV0rKzsKKwlub2RlX2NvdW50ID0gKGNhcmQtPnJvb3Rfbm9kZS0+bm9kZV9pZCAmIDB4M2YpICsgMTsKKwljYXJkLT50b3BvbG9neV9tYXBbMl0gPSAobm9kZV9jb3VudCA8PCAxNikgfCBzZWxmX2lkX2NvdW50OworCWNhcmQtPnRvcG9sb2d5X21hcFswXSA9IChzZWxmX2lkX2NvdW50ICsgMikgPDwgMTY7CisJbWVtY3B5KCZjYXJkLT50b3BvbG9neV9tYXBbM10sIHNlbGZfaWRzLCBzZWxmX2lkX2NvdW50ICogNCk7CisJZndfY29tcHV0ZV9ibG9ja19jcmMoY2FyZC0+dG9wb2xvZ3lfbWFwKTsKK30KKwordm9pZAorZndfY29yZV9oYW5kbGVfYnVzX3Jlc2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwKKwkJCSBpbnQgc2VsZl9pZF9jb3VudCwgdTMyICogc2VsZl9pZHMpCit7CisJc3RydWN0IGZ3X25vZGUgKmxvY2FsX25vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWZ3X2ZsdXNoX3RyYW5zYWN0aW9ucyhjYXJkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIElmIHRoZSBuZXcgdG9wb2xvZ3kgaGFzIGEgZGlmZmVyZW50IHNlbGZfaWRfY291bnQgdGhlIHRvcG9sb2d5CisJICogY2hhbmdlZCwgZWl0aGVyIG5vZGVzIHdlcmUgYWRkZWQgb3IgcmVtb3ZlZC4gSW4gdGhhdCBjYXNlIHdlCisJICogcmVzZXQgdGhlIElSTSByZXNldCBjb3VudGVyLgorCSAqLworCWlmIChjYXJkLT5zZWxmX2lkX2NvdW50ICE9IHNlbGZfaWRfY291bnQpCisJCWNhcmQtPmJtX3JldHJpZXMgPSAwOworCisJY2FyZC0+bm9kZV9pZCA9IG5vZGVfaWQ7CisJY2FyZC0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CisJY2FyZC0+cmVzZXRfamlmZmllcyA9IGppZmZpZXM7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjYXJkLT53b3JrLCAwKTsKKworCWxvY2FsX25vZGUgPSBidWlsZF90cmVlKGNhcmQsIHNlbGZfaWRzLCBzZWxmX2lkX2NvdW50KTsKKworCXVwZGF0ZV90b3BvbG9neV9tYXAoY2FyZCwgc2VsZl9pZHMsIHNlbGZfaWRfY291bnQpOworCisJY2FyZC0+Y29sb3IrKzsKKworCWlmIChsb2NhbF9ub2RlID09IE5VTEwpIHsKKwkJZndfZXJyb3IoInRvcG9sb2d5IGJ1aWxkIGZhaWxlZFxuIik7CisJCS8qIEZJWE1FOiBXZSBuZWVkIHRvIGlzc3VlIGEgYnVzIHJlc2V0IGluIHRoaXMgY2FzZS4gKi8KKwl9IGVsc2UgaWYgKGNhcmQtPmxvY2FsX25vZGUgPT0gTlVMTCkgeworCQljYXJkLT5sb2NhbF9ub2RlID0gbG9jYWxfbm9kZTsKKwkJZm9yX2VhY2hfZndfbm9kZShjYXJkLCBsb2NhbF9ub2RlLCByZXBvcnRfZm91bmRfbm9kZSk7CisJfSBlbHNlIHsKKwkJdXBkYXRlX3RyZWUoY2FyZCwgbG9jYWxfbm9kZSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChmd19jb3JlX2hhbmRsZV9idXNfcmVzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5oIGIvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2M2I2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IEtyaXN0aWFuIEhvZWdzYmVyZyA8a3JoQGJpdHBsYW5ldC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fZndfdG9wb2xvZ3lfaAorI2RlZmluZSBfX2Z3X3RvcG9sb2d5X2gKKworZW51bSB7CisJRldfVE9QT0xPR1lfQSA9CQkweDAxLAorCUZXX1RPUE9MT0dZX0IgPQkJMHgwMiwKKwlGV19UT1BPTE9HWV9NSVhFRCA9CTB4MDMsCit9OworCitlbnVtIHsKKwlGV19OT0RFX0NSRUFURUQgPSAgIDB4MDAsCisJRldfTk9ERV9VUERBVEVEID0gICAweDAxLAorCUZXX05PREVfREVTVFJPWUVEID0gMHgwMiwKKwlGV19OT0RFX0xJTktfT04gPSAgIDB4MDMsCisJRldfTk9ERV9MSU5LX09GRiA9ICAweDA0LAorfTsKKworc3RydWN0IGZ3X3BvcnQgeworCXN0cnVjdCBmd19ub2RlICpub2RlOworCXVuc2lnbmVkIHNwZWVkIDogMzsgLyogUzEwMCwgUzIwMCwgLi4uIFMzMjAwICovCit9OworCitzdHJ1Y3QgZndfbm9kZSB7CisJdTE2IG5vZGVfaWQ7CisJdTggY29sb3I7CisJdTggcG9ydF9jb3VudDsKKwl1bnNpZ25lZCBsaW5rX29uIDogMTsKKwl1bnNpZ25lZCBpbml0aWF0ZWRfcmVzZXQgOiAxOworCXVuc2lnbmVkIGJfcGF0aCA6IDE7CisJdTggcGh5X3NwZWVkIDogMzsgLyogQXMgaW4gdGhlIHNlbGYgSUQgcGFja2V0LiAqLworCXU4IG1heF9zcGVlZCA6IDU7IC8qIE1pbmltdW0gb2YgYWxsIHBoeS1zcGVlZHMgYW5kIHBvcnQgc3BlZWRzIG9uCisJCQkgICAqIHRoZSBwYXRoIGZyb20gdGhlIGxvY2FsIG5vZGUgdG8gdGhpcyBub2RlLiAqLworCXU4IG1heF9kZXB0aCA6IDQ7IC8qIE1heGltdW0gZGVwdGggdG8gYW55IGxlYWYgbm9kZSAqLworCXU4IG1heF9ob3BzIDogNDsgIC8qIE1heCBob3BzIGluIHRoaXMgc3ViIHRyZWUgKi8KKwlhdG9taWNfdCByZWZfY291bnQ7CisKKwkvKiBGb3Igc2VyaWFsaXppbmcgbm9kZSB0b3BvbG9neSBpbnRvIGEgbGlzdC4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisKKwkvKiBVcHBlciBsYXllciBzcGVjaWZpYyBkYXRhLiAqLworCXZvaWQgKmRhdGE7CisKKwlzdHJ1Y3QgZndfcG9ydCBwb3J0c1swXTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZ3X25vZGUgKgorZndfbm9kZShzdHJ1Y3QgbGlzdF9oZWFkICpsKQoreworCXJldHVybiBsaXN0X2VudHJ5KGwsIHN0cnVjdCBmd19ub2RlLCBsaW5rKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfbm9kZSAqCitmd19ub2RlX2dldChzdHJ1Y3QgZndfbm9kZSAqbm9kZSkKK3sKKwlhdG9taWNfaW5jKCZub2RlLT5yZWZfY291bnQpOworCisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZndfbm9kZV9wdXQoc3RydWN0IGZ3X25vZGUgKm5vZGUpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm5vZGUtPnJlZl9jb3VudCkpCisJCWtmcmVlKG5vZGUpOworfQorCit2b2lkCitmd19kZXN0cm95X25vZGVzKHN0cnVjdCBmd19jYXJkICpjYXJkKTsKKworaW50Citmd19jb21wdXRlX2Jsb2NrX2NyYyh1MzIgKmJsb2NrKTsKKworCisjZW5kaWYgLyogX19md190b3BvbG9neV9oICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkMDEyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYwpAQCAtMCwwICsxLDkxMCBAQAorLyoKKyAqIENvcmUgSUVFRTEzOTQgdHJhbnNhY3Rpb24gbG9naWMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBLcmlzdGlhbiBIb2Vnc2JlcmcgPGtyaEBiaXRwbGFuZXQubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJmdy10b3BvbG9neS5oIgorI2luY2x1ZGUgImZ3LWRldmljZS5oIgorCisjZGVmaW5lIEhFQURFUl9QUkkocHJpKQkJCSgocHJpKSA8PCAwKQorI2RlZmluZSBIRUFERVJfVENPREUodGNvZGUpCQkoKHRjb2RlKSA8PCA0KQorI2RlZmluZSBIRUFERVJfUkVUUlkocmV0cnkpCQkoKHJldHJ5KSA8PCA4KQorI2RlZmluZSBIRUFERVJfVExBQkVMKHRsYWJlbCkJCSgodGxhYmVsKSA8PCAxMCkKKyNkZWZpbmUgSEVBREVSX0RFU1RJTkFUSU9OKGRlc3RpbmF0aW9uKQkoKGRlc3RpbmF0aW9uKSA8PCAxNikKKyNkZWZpbmUgSEVBREVSX1NPVVJDRShzb3VyY2UpCQkoKHNvdXJjZSkgPDwgMTYpCisjZGVmaW5lIEhFQURFUl9SQ09ERShyY29kZSkJCSgocmNvZGUpIDw8IDEyKQorI2RlZmluZSBIRUFERVJfT0ZGU0VUX0hJR0gob2Zmc2V0X2hpZ2gpCSgob2Zmc2V0X2hpZ2gpIDw8IDApCisjZGVmaW5lIEhFQURFUl9EQVRBX0xFTkdUSChsZW5ndGgpCSgobGVuZ3RoKSA8PCAxNikKKyNkZWZpbmUgSEVBREVSX0VYVEVOREVEX1RDT0RFKHRjb2RlKQkoKHRjb2RlKSA8PCAwKQorCisjZGVmaW5lIEhFQURFUl9HRVRfVENPREUocSkJCSgoKHEpID4+IDQpICYgMHgwZikKKyNkZWZpbmUgSEVBREVSX0dFVF9UTEFCRUwocSkJCSgoKHEpID4+IDEwKSAmIDB4M2YpCisjZGVmaW5lIEhFQURFUl9HRVRfUkNPREUocSkJCSgoKHEpID4+IDEyKSAmIDB4MGYpCisjZGVmaW5lIEhFQURFUl9HRVRfREVTVElOQVRJT04ocSkJKCgocSkgPj4gMTYpICYgMHhmZmZmKQorI2RlZmluZSBIRUFERVJfR0VUX1NPVVJDRShxKQkJKCgocSkgPj4gMTYpICYgMHhmZmZmKQorI2RlZmluZSBIRUFERVJfR0VUX09GRlNFVF9ISUdIKHEpCSgoKHEpID4+IDApICYgMHhmZmZmKQorI2RlZmluZSBIRUFERVJfR0VUX0RBVEFfTEVOR1RIKHEpCSgoKHEpID4+IDE2KSAmIDB4ZmZmZikKKyNkZWZpbmUgSEVBREVSX0dFVF9FWFRFTkRFRF9UQ09ERShxKQkoKChxKSA+PiAwKSAmIDB4ZmZmZikKKworI2RlZmluZSBQSFlfQ09ORklHX0dBUF9DT1VOVChnYXBfY291bnQpCSgoKGdhcF9jb3VudCkgPDwgMTYpIHwgKDEgPDwgMjIpKQorI2RlZmluZSBQSFlfQ09ORklHX1JPT1RfSUQobm9kZV9pZCkJKCgoKG5vZGVfaWQpICYgMHgzZikgPDwgMjQpIHwgKDEgPDwgMjMpKQorI2RlZmluZSBQSFlfSURFTlRJRklFUihpZCkJCSgoaWQpIDw8IDMwKQorCitzdGF0aWMgaW50CitjbG9zZV90cmFuc2FjdGlvbihzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCisJCSAgdTMyICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBmd190cmFuc2FjdGlvbiAqdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZjYXJkLT50cmFuc2FjdGlvbl9saXN0LCBsaW5rKSB7CisJCWlmICh0ID09IHRyYW5zYWN0aW9uKSB7CisJCQlsaXN0X2RlbCgmdC0+bGluayk7CisJCQljYXJkLT50bGFiZWxfbWFzayAmPSB+KDEgPDwgdC0+dGxhYmVsKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKworCWlmICgmdC0+bGluayAhPSAmY2FyZC0+dHJhbnNhY3Rpb25fbGlzdCkgeworCQl0LT5jYWxsYmFjayhjYXJkLCByY29kZSwgcGF5bG9hZCwgbGVuZ3RoLCB0LT5jYWxsYmFja19kYXRhKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKKy8qCisgKiBPbmx5IHZhbGlkIGZvciB0cmFuc2FjdGlvbnMgdGhhdCBhcmUgcG90ZW50aWFsbHkgcGVuZGluZyAoaWUgaGF2ZQorICogYmVlbiBzZW50KS4KKyAqLworaW50Citmd19jYW5jZWxfdHJhbnNhY3Rpb24oc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCSAgICAgIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24pCit7CisJLyoKKwkgKiBDYW5jZWwgdGhlIHBhY2tldCB0cmFuc21pc3Npb24gaWYgaXQncyBzdGlsbCBxdWV1ZWQuICBUaGF0CisJICogd2lsbCBjYWxsIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGNhbGxiYWNrIHdoaWNoIGNhbmNlbHMKKwkgKiB0aGUgdHJhbnNhY3Rpb24uCisJICovCisKKwlpZiAoY2FyZC0+ZHJpdmVyLT5jYW5jZWxfcGFja2V0KGNhcmQsICZ0cmFuc2FjdGlvbi0+cGFja2V0KSA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIHJlcXVlc3QgcGFja2V0IGhhcyBhbHJlYWR5IGJlZW4gc2VudCwgd2UgbmVlZCB0byBzZWUKKwkgKiBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgc3RpbGwgcGVuZGluZyBhbmQgcmVtb3ZlIGl0IGluIHRoYXQgY2FzZS4KKwkgKi8KKworCXJldHVybiBjbG9zZV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgY2FyZCwgUkNPREVfQ0FOQ0VMTEVELCBOVUxMLCAwKTsKK30KK0VYUE9SVF9TWU1CT0woZndfY2FuY2VsX3RyYW5zYWN0aW9uKTsKKworc3RhdGljIHZvaWQKK3RyYW5zbWl0X2NvbXBsZXRlX2NhbGxiYWNrKHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwKKwkJCSAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBmd190cmFuc2FjdGlvbiAqdCA9CisJICAgIGNvbnRhaW5lcl9vZihwYWNrZXQsIHN0cnVjdCBmd190cmFuc2FjdGlvbiwgcGFja2V0KTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBBQ0tfQ09NUExFVEU6CisJCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIFJDT0RFX0NPTVBMRVRFLCBOVUxMLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0tfUEVORElORzoKKwkJdC0+dGltZXN0YW1wID0gcGFja2V0LT50aW1lc3RhbXA7CisJCWJyZWFrOworCWNhc2UgQUNLX0JVU1lfWDoKKwljYXNlIEFDS19CVVNZX0E6CisJY2FzZSBBQ0tfQlVTWV9COgorCQljbG9zZV90cmFuc2FjdGlvbih0LCBjYXJkLCBSQ09ERV9CVVNZLCBOVUxMLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBBQ0tfREFUQV9FUlJPUjoKKwkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgUkNPREVfREFUQV9FUlJPUiwgTlVMTCwgMCk7CisJCWJyZWFrOworCWNhc2UgQUNLX1RZUEVfRVJST1I6CisJCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIFJDT0RFX1RZUEVfRVJST1IsIE5VTEwsIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKgorCQkgKiBJbiB0aGlzIGNhc2UgdGhlIGFjayBpcyByZWFsbHkgYSBqdWp1IHNwZWNpZmljCisJCSAqIHJjb2RlLCBzbyBqdXN0IGZvcndhcmQgdGhhdCB0byB0aGUgY2FsbGJhY2suCisJCSAqLworCQljbG9zZV90cmFuc2FjdGlvbih0LCBjYXJkLCBzdGF0dXMsIE5VTEwsIDApOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitmd19maWxsX3JlcXVlc3Qoc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0LCBpbnQgdGNvZGUsIGludCB0bGFiZWwsCisJCWludCBub2RlX2lkLCBpbnQgc291cmNlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAorCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKQoreworCWludCBleHRfdGNvZGU7CisKKwlpZiAodGNvZGUgPiAweDEwKSB7CisJCWV4dF90Y29kZSA9IHRjb2RlIC0gMHgxMDsKKwkJdGNvZGUgPSBUQ09ERV9MT0NLX1JFUVVFU1Q7CisJfSBlbHNlCisJCWV4dF90Y29kZSA9IDA7CisKKwlwYWNrZXQtPmhlYWRlclswXSA9CisJCUhFQURFUl9SRVRSWShSRVRSWV9YKSB8CisJCUhFQURFUl9UTEFCRUwodGxhYmVsKSB8CisJCUhFQURFUl9UQ09ERSh0Y29kZSkgfAorCQlIRUFERVJfREVTVElOQVRJT04obm9kZV9pZCk7CisJcGFja2V0LT5oZWFkZXJbMV0gPQorCQlIRUFERVJfT0ZGU0VUX0hJR0gob2Zmc2V0ID4+IDMyKSB8IEhFQURFUl9TT1VSQ0Uoc291cmNlX2lkKTsKKwlwYWNrZXQtPmhlYWRlclsyXSA9CisJCW9mZnNldDsKKworCXN3aXRjaCAodGNvZGUpIHsKKwljYXNlIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVDoKKwkJcGFja2V0LT5oZWFkZXJbM10gPSAqKHUzMiAqKXBheWxvYWQ7CisJCXBhY2tldC0+aGVhZGVyX2xlbmd0aCA9IDE2OworCQlwYWNrZXQtPnBheWxvYWRfbGVuZ3RoID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFRDT0RFX0xPQ0tfUkVRVUVTVDoKKwljYXNlIFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1Q6CisJCXBhY2tldC0+aGVhZGVyWzNdID0KKwkJCUhFQURFUl9EQVRBX0xFTkdUSChsZW5ndGgpIHwKKwkJCUhFQURFUl9FWFRFTkRFRF9UQ09ERShleHRfdGNvZGUpOworCQlwYWNrZXQtPmhlYWRlcl9sZW5ndGggPSAxNjsKKwkJcGFja2V0LT5wYXlsb2FkID0gcGF5bG9hZDsKKwkJcGFja2V0LT5wYXlsb2FkX2xlbmd0aCA9IGxlbmd0aDsKKwkJYnJlYWs7CisKKwljYXNlIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNUOgorCQlwYWNrZXQtPmhlYWRlcl9sZW5ndGggPSAxMjsKKwkJcGFja2V0LT5wYXlsb2FkX2xlbmd0aCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBUQ09ERV9SRUFEX0JMT0NLX1JFUVVFU1Q6CisJCXBhY2tldC0+aGVhZGVyWzNdID0KKwkJCUhFQURFUl9EQVRBX0xFTkdUSChsZW5ndGgpIHwKKwkJCUhFQURFUl9FWFRFTkRFRF9UQ09ERShleHRfdGNvZGUpOworCQlwYWNrZXQtPmhlYWRlcl9sZW5ndGggPSAxNjsKKwkJcGFja2V0LT5wYXlsb2FkX2xlbmd0aCA9IDA7CisJCWJyZWFrOworCX0KKworCXBhY2tldC0+c3BlZWQgPSBzcGVlZDsKKwlwYWNrZXQtPmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOworCXBhY2tldC0+YWNrID0gMDsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGxvdy1sZXZlbCBhY2Nlc3MgdG8gdGhlIElFRUUxMzk0IHRyYW5zYWN0aW9uCisgKiBsb2dpYy4gIE1vc3QgQyBwcm9ncmFtcyB3b3VsZCB1c2UgZWl0aGVyIGZ3X3JlYWQoKSwgZndfd3JpdGUoKSBvcgorICogZndfbG9jaygpIGluc3RlYWQgLSB0aG9zZSBmdW5jdGlvbiBhcmUgY29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yCisgKiB0aGlzIGZ1bmN0aW9uLiAgVGhlIGZ3X3NlbmRfcmVxdWVzdCgpIGZ1bmN0aW9uIGlzIHByaW1hcmlseQorICogcHJvdmlkZWQgYXMgYSBmbGV4aWJsZSwgb25lLXN0b3AgZW50cnkgcG9pbnQgZm9yIGxhbmd1YWdlcyBiaW5kaW5ncworICogYW5kIHByb3RvY29sIGJpbmRpbmdzLgorICoKKyAqIEZJWE1FOiBEb2N1bWVudCB0aGlzIGZ1bmN0aW9uIGZ1cnRoZXIsIGluIHBhcnRpY3VsYXIgdGhlIHBvc3NpYmxlCisgKiB2YWx1ZXMgZm9yIHJjb2RlIGluIHRoZSBjYWxsYmFjay4gIEluIHNob3J0LCB3ZSBtYXAgQUNLX0NPTVBMRVRFIHRvCisgKiBSQ09ERV9DT01QTEVURSwgaW50ZXJuYWwgZXJyb3JzIHNldCBlcnJubyBhbmQgc2V0IHJjb2RlIHRvCisgKiBSQ09ERV9TRU5EX0VSUk9SICh3aGljaCBpcyBvdXQgb2YgcmFuZ2UgZm9yIHN0YW5kYXJkIGllZWUxMzk0CisgKiByY29kZXMpLiAgQWxsIG90aGVyIHJjb2RlcyBhcmUgZm9yd2FyZGVkIHVuY2hhbmdlZC4gIEZvciBhbGwKKyAqIGVycm9ycywgcGF5bG9hZCBpcyBOVUxMLCBsZW5ndGggaXMgMC4KKyAqCisgKiBDYW4gbm90IGV4cGVjdCB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgZnVuY3Rpb24KKyAqIHJldHVybnMsIHRob3VnaCB0aGlzIGRvZXMgaGFwcGVuIGluIHNvbWUgY2FzZXMgKEFDS19DT01QTEVURSBhbmQKKyAqIGVycm9ycykuCisgKgorICogVGhlIHBheWxvYWQgaXMgb25seSB1c2VkIGZvciB3cml0ZSByZXF1ZXN0cyBhbmQgbXVzdCBub3QgYmUgZnJlZWQKKyAqIHVudGlsIHRoZSBjYWxsYmFjayBoYXMgYmVlbiBjYWxsZWQuCisgKgorICogQHBhcmFtIGNhcmQgdGhlIGNhcmQgZnJvbSB3aGljaCB0byBzZW5kIHRoZSByZXF1ZXN0CisgKiBAcGFyYW0gdGNvZGUgdGhlIHRjb2RlIGZvciB0aGlzIHRyYW5zYWN0aW9uLiAgRG8gbm90IHVzZQorICogICBUQ09ERV9MT0NLX1JFUVVFU1QgZGlyZWN0bHksIGluc3RlZCB1c2UgVENPREVfTE9DS19NQVNLX1NXQVAKKyAqICAgZXRjLiB0byBzcGVjaWZ5IHRjb2RlIGFuZCBleHRfdGNvZGUuCisgKiBAcGFyYW0gbm9kZV9pZCB0aGUgZGVzdGluYXRpb24gbm9kZSBJRCAoYnVzIElEIGFuZCBQSFkgSUQgY29uY2F0ZW5hdGVkKQorICogQHBhcmFtIGdlbmVyYXRpb24gdGhlIGdlbmVyYXRpb24gZm9yIHdoaWNoIG5vZGVfaWQgaXMgdmFsaWQKKyAqIEBwYXJhbSBzcGVlZCB0aGUgc3BlZWQgdG8gdXNlIGZvciBzZW5kaW5nIHRoZSByZXF1ZXN0CisgKiBAcGFyYW0gb2Zmc2V0IHRoZSA0OCBiaXQgb2Zmc2V0IG9uIHRoZSBkZXN0aW5hdGlvbiBub2RlCisgKiBAcGFyYW0gcGF5bG9hZCB0aGUgZGF0YSBwYXlsb2FkIGZvciB0aGUgcmVxdWVzdCBzdWJhY3Rpb24KKyAqIEBwYXJhbSBsZW5ndGggdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byByZWFkCisgKiBAcGFyYW0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZAorICogQHBhcmFtIGNhbGxiYWNrX2RhdGEgcG9pbnRlciB0byBhcmJpdHJhcnkgZGF0YSwgd2hpY2ggd2lsbCBiZQorICogICBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrCisgKi8KK3ZvaWQKK2Z3X3NlbmRfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0LAorCQlpbnQgdGNvZGUsIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAorCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAorCQl2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLAorCQlmd190cmFuc2FjdGlvbl9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHRsYWJlbCwgc291cmNlOworCisJLyoKKwkgKiBCdW1wIHRoZSBmbHVzaCB0aW1lciB1cCAxMDBtcyBmaXJzdCBvZiBhbGwgc28gd2UKKwkgKiBkb24ndCByYWNlIHdpdGggYSBmbHVzaCB0aW1lciBjYWxsYmFjay4KKwkgKi8KKworCW1vZF90aW1lcigmY2FyZC0+Zmx1c2hfdGltZXIsIGppZmZpZXMgKyBESVZfUk9VTkRfVVAoSFosIDEwKSk7CisKKwkvKgorCSAqIEFsbG9jYXRlIHRsYWJlbCBmcm9tIHRoZSBiaXRtYXAgYW5kIHB1dCB0aGUgdHJhbnNhY3Rpb24gb24KKwkgKiB0aGUgbGlzdCB3aGlsZSBob2xkaW5nIHRoZSBjYXJkIHNwaW5sb2NrLgorCSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKworCXNvdXJjZSA9IGNhcmQtPm5vZGVfaWQ7CisJdGxhYmVsID0gY2FyZC0+Y3VycmVudF90bGFiZWw7CisJaWYgKGNhcmQtPnRsYWJlbF9tYXNrICYgKDEgPDwgdGxhYmVsKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCWNhbGxiYWNrKGNhcmQsIFJDT0RFX1NFTkRfRVJST1IsIE5VTEwsIDAsIGNhbGxiYWNrX2RhdGEpOworCQlyZXR1cm47CisJfQorCisJY2FyZC0+Y3VycmVudF90bGFiZWwgPSAoY2FyZC0+Y3VycmVudF90bGFiZWwgKyAxKSAmIDB4MWY7CisJY2FyZC0+dGxhYmVsX21hc2sgfD0gKDEgPDwgdGxhYmVsKTsKKworCWxpc3RfYWRkX3RhaWwoJnQtPmxpbmssICZjYXJkLT50cmFuc2FjdGlvbl9saXN0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKworCS8qIEluaXRpYWxpemUgcmVzdCBvZiB0cmFuc2FjdGlvbiwgZmlsbCBvdXQgcGFja2V0IGFuZCBzZW5kIGl0LiAqLworCXQtPm5vZGVfaWQgPSBub2RlX2lkOworCXQtPnRsYWJlbCA9IHRsYWJlbDsKKwl0LT5jYWxsYmFjayA9IGNhbGxiYWNrOworCXQtPmNhbGxiYWNrX2RhdGEgPSBjYWxsYmFja19kYXRhOworCisJZndfZmlsbF9yZXF1ZXN0KCZ0LT5wYWNrZXQsIHRjb2RlLCB0LT50bGFiZWwsCisJCQlub2RlX2lkLCBzb3VyY2UsIGdlbmVyYXRpb24sCisJCQlzcGVlZCwgb2Zmc2V0LCBwYXlsb2FkLCBsZW5ndGgpOworCXQtPnBhY2tldC5jYWxsYmFjayA9IHRyYW5zbWl0X2NvbXBsZXRlX2NhbGxiYWNrOworCisJY2FyZC0+ZHJpdmVyLT5zZW5kX3JlcXVlc3QoY2FyZCwgJnQtPnBhY2tldCk7Cit9CitFWFBPUlRfU1lNQk9MKGZ3X3NlbmRfcmVxdWVzdCk7CisKK3N0YXRpYyB2b2lkCit0cmFuc21pdF9waHlfcGFja2V0X2NhbGxiYWNrKHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwKKwkJCSAgICAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzdGF0dXMpCit7CisJa2ZyZWUocGFja2V0KTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9waHlfcGFja2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCB1MzIgZGF0YSwgaW50IGdlbmVyYXRpb24pCit7CisJc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0OworCisJcGFja2V0ID0ga3phbGxvYyhzaXplb2YoKnBhY2tldCksIEdGUF9BVE9NSUMpOworCWlmIChwYWNrZXQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcGFja2V0LT5oZWFkZXJbMF0gPSBkYXRhOworCXBhY2tldC0+aGVhZGVyWzFdID0gfmRhdGE7CisJcGFja2V0LT5oZWFkZXJfbGVuZ3RoID0gODsKKwlwYWNrZXQtPnBheWxvYWRfbGVuZ3RoID0gMDsKKwlwYWNrZXQtPnNwZWVkID0gU0NPREVfMTAwOworCXBhY2tldC0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CisJcGFja2V0LT5jYWxsYmFjayA9IHRyYW5zbWl0X3BoeV9wYWNrZXRfY2FsbGJhY2s7CisKKwljYXJkLT5kcml2ZXItPnNlbmRfcmVxdWVzdChjYXJkLCBwYWNrZXQpOworfQorCit2b2lkIGZ3X3NlbmRfcGh5X2NvbmZpZyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCWludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IGdhcF9jb3VudCkKK3sKKwl1MzIgcTsKKworCXEgPSBQSFlfSURFTlRJRklFUihQSFlfUEFDS0VUX0NPTkZJRykgfAorCQlQSFlfQ09ORklHX1JPT1RfSUQobm9kZV9pZCkgfAorCQlQSFlfQ09ORklHX0dBUF9DT1VOVChnYXBfY291bnQpOworCisJc2VuZF9waHlfcGFja2V0KGNhcmQsIHEsIGdlbmVyYXRpb24pOworfQorCit2b2lkIGZ3X2ZsdXNoX3RyYW5zYWN0aW9ucyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQsICpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJSU5JVF9MSVNUX0hFQUQoJmxpc3QpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJbGlzdF9zcGxpY2VfaW5pdCgmY2FyZC0+dHJhbnNhY3Rpb25fbGlzdCwgJmxpc3QpOworCWNhcmQtPnRsYWJlbF9tYXNrID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodCwgbmV4dCwgJmxpc3QsIGxpbmspIHsKKwkJY2FyZC0+ZHJpdmVyLT5jYW5jZWxfcGFja2V0KGNhcmQsICZ0LT5wYWNrZXQpOworCisJCS8qCisJCSAqIEF0IHRoaXMgcG9pbnQgY2FuY2VsX3BhY2tldCB3aWxsIG5ldmVyIGNhbGwgdGhlCisJCSAqIHRyYW5zYWN0aW9uIGNhbGxiYWNrLCBzaW5jZSB3ZSBqdXN0IHRvb2sgYWxsIHRoZQorCQkgKiB0cmFuc2FjdGlvbnMgb3V0IG9mIHRoZSBsaXN0LiAgU28gZG8gaXQgaGVyZS4KKwkJICovCisJCXQtPmNhbGxiYWNrKGNhcmQsIFJDT0RFX0NBTkNFTExFRCwgTlVMTCwgMCwgdC0+Y2FsbGJhY2tfZGF0YSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqCitsb29rdXBfb3ZlcmxhcHBpbmdfYWRkcmVzc19oYW5kbGVyKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShoYW5kbGVyLCBsaXN0LCBsaW5rKSB7CisJCWlmIChoYW5kbGVyLT5vZmZzZXQgPCBvZmZzZXQgKyBsZW5ndGggJiYKKwkJICAgIG9mZnNldCA8IGhhbmRsZXItPm9mZnNldCArIGhhbmRsZXItPmxlbmd0aCkKKwkJCXJldHVybiBoYW5kbGVyOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqCitsb29rdXBfZW5jbG9zaW5nX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsIGxpc3QsIGxpbmspIHsKKwkJaWYgKGhhbmRsZXItPm9mZnNldCA8PSBvZmZzZXQgJiYKKwkJICAgIG9mZnNldCArIGxlbmd0aCA8PSBoYW5kbGVyLT5vZmZzZXQgKyBoYW5kbGVyLT5sZW5ndGgpCisJCQlyZXR1cm4gaGFuZGxlcjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIERFRklORV9TUElOTE9DSyhhZGRyZXNzX2hhbmRsZXJfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKGFkZHJlc3NfaGFuZGxlcl9saXN0KTsKKworY29uc3Qgc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIGZ3X2xvd19tZW1vcnlfcmVnaW9uID0KKwl7IC5zdGFydCA9IDB4MDAwMDAwMDAwMDAwVUxMLCAuZW5kID0gMHgwMDAxMDAwMDAwMDBVTEwsICB9OworY29uc3Qgc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIGZ3X2hpZ2hfbWVtb3J5X3JlZ2lvbiA9CisJeyAuc3RhcnQgPSAweDAwMDEwMDAwMDAwMFVMTCwgLmVuZCA9IDB4ZmZmZmUwMDAwMDAwVUxMLCAgfTsKK2NvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiBmd19wcml2YXRlX3JlZ2lvbiA9CisJeyAuc3RhcnQgPSAweGZmZmZlMDAwMDAwMFVMTCwgLmVuZCA9IDB4ZmZmZmYwMDAwMDAwVUxMLCAgfTsKK2NvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiBmd19jc3JfcmVnaW9uID0KKwl7IC5zdGFydCA9IDB4ZmZmZmYwMDAwMDAwVUxMLCAuZW5kID0gMHhmZmZmZjAwMDA4MDBVTEwsICB9OworY29uc3Qgc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIGZ3X3VuaXRfc3BhY2VfcmVnaW9uID0KKwl7IC5zdGFydCA9IDB4ZmZmZmYwMDAwOTAwVUxMLCAuZW5kID0gMHgxMDAwMDAwMDAwMDAwVUxMLCB9OworRVhQT1JUX1NZTUJPTChmd19sb3dfbWVtb3J5X3JlZ2lvbik7CitFWFBPUlRfU1lNQk9MKGZ3X2hpZ2hfbWVtb3J5X3JlZ2lvbik7CitFWFBPUlRfU1lNQk9MKGZ3X3ByaXZhdGVfcmVnaW9uKTsKK0VYUE9SVF9TWU1CT0woZndfY3NyX3JlZ2lvbik7CitFWFBPUlRfU1lNQk9MKGZ3X3VuaXRfc3BhY2VfcmVnaW9uKTsKKworLyoqCisgKiBBbGxvY2F0ZSBhIHJhbmdlIG9mIGFkZHJlc3NlcyBpbiB0aGUgbm9kZSBzcGFjZSBvZiB0aGUgT0hDSQorICogY29udHJvbGxlci4gIFdoZW4gYSByZXF1ZXN0IGlzIHJlY2VpdmVkIHRoYXQgZmFsbHMgd2l0aGluIHRoZQorICogc3BlY2lmaWVkIGFkZHJlc3MgcmFuZ2UsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgaXMgaW52b2tlZC4gIFRoZQorICogcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGdpdmUgdGhlIGRldGFpbHMgb2YgdGhlCisgKiBwYXJ0aWN1bGFyIHJlcXVlc3QKKyAqLworaW50Citmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlciwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gKnJlZ2lvbikKK3sKKwlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpvdGhlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUJVU1k7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRkcmVzc19oYW5kbGVyX2xvY2ssIGZsYWdzKTsKKworCWhhbmRsZXItPm9mZnNldCA9IHJlZ2lvbi0+c3RhcnQ7CisJd2hpbGUgKGhhbmRsZXItPm9mZnNldCArIGhhbmRsZXItPmxlbmd0aCA8PSByZWdpb24tPmVuZCkgeworCQlvdGhlciA9CisJCSAgICBsb29rdXBfb3ZlcmxhcHBpbmdfYWRkcmVzc19oYW5kbGVyKCZhZGRyZXNzX2hhbmRsZXJfbGlzdCwKKwkJCQkJCSAgICAgICBoYW5kbGVyLT5vZmZzZXQsCisJCQkJCQkgICAgICAgaGFuZGxlci0+bGVuZ3RoKTsKKwkJaWYgKG90aGVyICE9IE5VTEwpIHsKKwkJCWhhbmRsZXItPm9mZnNldCArPSBvdGhlci0+bGVuZ3RoOworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmaGFuZGxlci0+bGluaywgJmFkZHJlc3NfaGFuZGxlcl9saXN0KTsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkZHJlc3NfaGFuZGxlcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIpOworCisvKioKKyAqIERlYWxsb2NhdGUgYSByYW5nZSBvZiBhZGRyZXNzZXMgYWxsb2NhdGVkIHdpdGggZndfYWxsb2NhdGUuICBUaGlzCisgKiB3aWxsIGNhbGwgdGhlIGFzc29jaWF0ZWQgY2FsbGJhY2sgb25lIGxhc3QgdGltZSB3aXRoIGEgdGhlIHNwZWNpYWwKKyAqIHRjb2RlIFRDT0RFX0RFQUxMT0NBVEUsIHRvIGxldCB0aGUgY2xpZW50IGRlc3Ryb3kgdGhlIHJlZ2lzdGVyZWQKKyAqIGNhbGxiYWNrIGRhdGEuICBGb3IgY29udmVuaWVuY2UsIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXJzIG9mZnNldCBhbmQKKyAqIGxlbmd0aCBhcmUgc2V0IHRvIHRoZSBzdGFydCBhbmQgdGhlIGxlbmd0aCByZXNwZWN0aXZlbHkgZm9yIHRoZQorICogZGVhbGxvY2F0ZWQgcmVnaW9uLCBwYXlsb2FkIGlzIHNldCB0byBOVUxMLgorICovCit2b2lkIGZ3X2NvcmVfcmVtb3ZlX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRkcmVzc19oYW5kbGVyX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmaGFuZGxlci0+bGluayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRkcmVzc19oYW5kbGVyX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woZndfY29yZV9yZW1vdmVfYWRkcmVzc19oYW5kbGVyKTsKKworc3RydWN0IGZ3X3JlcXVlc3QgeworCXN0cnVjdCBmd19wYWNrZXQgcmVzcG9uc2U7CisJdTMyIHJlcXVlc3RfaGVhZGVyWzRdOworCWludCBhY2s7CisJdTMyIGxlbmd0aDsKKwl1MzIgZGF0YVswXTsKK307CisKK3N0YXRpYyB2b2lkCitmcmVlX3Jlc3BvbnNlX2NhbGxiYWNrKHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwKKwkJICAgICAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OworCisJcmVxdWVzdCA9IGNvbnRhaW5lcl9vZihwYWNrZXQsIHN0cnVjdCBmd19yZXF1ZXN0LCByZXNwb25zZSk7CisJa2ZyZWUocmVxdWVzdCk7Cit9CisKK3ZvaWQKK2Z3X2ZpbGxfcmVzcG9uc2Uoc3RydWN0IGZ3X3BhY2tldCAqcmVzcG9uc2UsIHUzMiAqcmVxdWVzdF9oZWFkZXIsCisJCSBpbnQgcmNvZGUsIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgpCit7CisJaW50IHRjb2RlLCB0bGFiZWwsIGV4dGVuZGVkX3Rjb2RlLCBzb3VyY2UsIGRlc3RpbmF0aW9uOworCisJdGNvZGUgICAgICAgICAgPSBIRUFERVJfR0VUX1RDT0RFKHJlcXVlc3RfaGVhZGVyWzBdKTsKKwl0bGFiZWwgICAgICAgICA9IEhFQURFUl9HRVRfVExBQkVMKHJlcXVlc3RfaGVhZGVyWzBdKTsKKwlzb3VyY2UgICAgICAgICA9IEhFQURFUl9HRVRfREVTVElOQVRJT04ocmVxdWVzdF9oZWFkZXJbMF0pOworCWRlc3RpbmF0aW9uICAgID0gSEVBREVSX0dFVF9TT1VSQ0UocmVxdWVzdF9oZWFkZXJbMV0pOworCWV4dGVuZGVkX3Rjb2RlID0gSEVBREVSX0dFVF9FWFRFTkRFRF9UQ09ERShyZXF1ZXN0X2hlYWRlclszXSk7CisKKwlyZXNwb25zZS0+aGVhZGVyWzBdID0KKwkJSEVBREVSX1JFVFJZKFJFVFJZXzEpIHwKKwkJSEVBREVSX1RMQUJFTCh0bGFiZWwpIHwKKwkJSEVBREVSX0RFU1RJTkFUSU9OKGRlc3RpbmF0aW9uKTsKKwlyZXNwb25zZS0+aGVhZGVyWzFdID0KKwkJSEVBREVSX1NPVVJDRShzb3VyY2UpIHwKKwkJSEVBREVSX1JDT0RFKHJjb2RlKTsKKwlyZXNwb25zZS0+aGVhZGVyWzJdID0gMDsKKworCXN3aXRjaCAodGNvZGUpIHsKKwljYXNlIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVDoKKwljYXNlIFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1Q6CisJCXJlc3BvbnNlLT5oZWFkZXJbMF0gfD0gSEVBREVSX1RDT0RFKFRDT0RFX1dSSVRFX1JFU1BPTlNFKTsKKwkJcmVzcG9uc2UtPmhlYWRlcl9sZW5ndGggPSAxMjsKKwkJcmVzcG9uc2UtPnBheWxvYWRfbGVuZ3RoID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNUOgorCQlyZXNwb25zZS0+aGVhZGVyWzBdIHw9CisJCQlIRUFERVJfVENPREUoVENPREVfUkVBRF9RVUFETEVUX1JFU1BPTlNFKTsKKwkJaWYgKHBheWxvYWQgIT0gTlVMTCkKKwkJCXJlc3BvbnNlLT5oZWFkZXJbM10gPSAqKHUzMiAqKXBheWxvYWQ7CisJCWVsc2UKKwkJCXJlc3BvbnNlLT5oZWFkZXJbM10gPSAwOworCQlyZXNwb25zZS0+aGVhZGVyX2xlbmd0aCA9IDE2OworCQlyZXNwb25zZS0+cGF5bG9hZF9sZW5ndGggPSAwOworCQlicmVhazsKKworCWNhc2UgVENPREVfUkVBRF9CTE9DS19SRVFVRVNUOgorCWNhc2UgVENPREVfTE9DS19SRVFVRVNUOgorCQlyZXNwb25zZS0+aGVhZGVyWzBdIHw9IEhFQURFUl9UQ09ERSh0Y29kZSArIDIpOworCQlyZXNwb25zZS0+aGVhZGVyWzNdID0KKwkJCUhFQURFUl9EQVRBX0xFTkdUSChsZW5ndGgpIHwKKwkJCUhFQURFUl9FWFRFTkRFRF9UQ09ERShleHRlbmRlZF90Y29kZSk7CisJCXJlc3BvbnNlLT5oZWFkZXJfbGVuZ3RoID0gMTY7CisJCXJlc3BvbnNlLT5wYXlsb2FkID0gcGF5bG9hZDsKKwkJcmVzcG9uc2UtPnBheWxvYWRfbGVuZ3RoID0gbGVuZ3RoOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm47CisJfQorfQorRVhQT1JUX1NZTUJPTChmd19maWxsX3Jlc3BvbnNlKTsKKworc3RhdGljIHN0cnVjdCBmd19yZXF1ZXN0ICoKK2FsbG9jYXRlX3JlcXVlc3Qoc3RydWN0IGZ3X3BhY2tldCAqcCkKK3sKKwlzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdDsKKwl1MzIgKmRhdGEsIGxlbmd0aDsKKwlpbnQgcmVxdWVzdF90Y29kZSwgdDsKKworCXJlcXVlc3RfdGNvZGUgPSBIRUFERVJfR0VUX1RDT0RFKHAtPmhlYWRlclswXSk7CisJc3dpdGNoIChyZXF1ZXN0X3Rjb2RlKSB7CisJY2FzZSBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1Q6CisJCWRhdGEgPSAmcC0+aGVhZGVyWzNdOworCQlsZW5ndGggPSA0OworCQlicmVhazsKKworCWNhc2UgVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVDoKKwljYXNlIFRDT0RFX0xPQ0tfUkVRVUVTVDoKKwkJZGF0YSA9IHAtPnBheWxvYWQ7CisJCWxlbmd0aCA9IEhFQURFUl9HRVRfREFUQV9MRU5HVEgocC0+aGVhZGVyWzNdKTsKKwkJYnJlYWs7CisKKwljYXNlIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNUOgorCQlkYXRhID0gTlVMTDsKKwkJbGVuZ3RoID0gNDsKKwkJYnJlYWs7CisKKwljYXNlIFRDT0RFX1JFQURfQkxPQ0tfUkVRVUVTVDoKKwkJZGF0YSA9IE5VTEw7CisJCWxlbmd0aCA9IEhFQURFUl9HRVRfREFUQV9MRU5HVEgocC0+aGVhZGVyWzNdKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmVxdWVzdCA9IGttYWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSArIGxlbmd0aCwgR0ZQX0FUT01JQyk7CisJaWYgKHJlcXVlc3QgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwl0ID0gKHAtPnRpbWVzdGFtcCAmIDB4MWZmZikgKyA0MDAwOworCWlmICh0ID49IDgwMDApCisJCXQgPSAocC0+dGltZXN0YW1wICYgfjB4MWZmZikgKyAweDIwMDAgKyB0IC0gODAwMDsKKwllbHNlCisJCXQgPSAocC0+dGltZXN0YW1wICYgfjB4MWZmZikgKyB0OworCisJcmVxdWVzdC0+cmVzcG9uc2Uuc3BlZWQgPSBwLT5zcGVlZDsKKwlyZXF1ZXN0LT5yZXNwb25zZS50aW1lc3RhbXAgPSB0OworCXJlcXVlc3QtPnJlc3BvbnNlLmdlbmVyYXRpb24gPSBwLT5nZW5lcmF0aW9uOworCXJlcXVlc3QtPnJlc3BvbnNlLmFjayA9IDA7CisJcmVxdWVzdC0+cmVzcG9uc2UuY2FsbGJhY2sgPSBmcmVlX3Jlc3BvbnNlX2NhbGxiYWNrOworCXJlcXVlc3QtPmFjayA9IHAtPmFjazsKKwlyZXF1ZXN0LT5sZW5ndGggPSBsZW5ndGg7CisJaWYgKGRhdGEpCisJCW1lbWNweShyZXF1ZXN0LT5kYXRhLCBkYXRhLCBsZW5ndGgpOworCisJbWVtY3B5KHJlcXVlc3QtPnJlcXVlc3RfaGVhZGVyLCBwLT5oZWFkZXIsIHNpemVvZihwLT5oZWFkZXIpKTsKKworCXJldHVybiByZXF1ZXN0OworfQorCit2b2lkCitmd19zZW5kX3Jlc3BvbnNlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwgaW50IHJjb2RlKQoreworCS8qCisJICogQnJvYWRjYXN0IHBhY2tldHMgYXJlIHJlcG9ydGVkIGFzIEFDS19DT01QTEVURSwgc28gdGhpcworCSAqIGNoZWNrIGlzIHN1ZmZpY2llbnQgdG8gZW5zdXJlIHdlIGRvbid0IHNlbmQgcmVzcG9uc2UgdG8KKwkgKiBicm9hZGNhc3QgcGFja2V0cyBvciBwb3N0ZWQgd3JpdGVzLgorCSAqLworCWlmIChyZXF1ZXN0LT5hY2sgIT0gQUNLX1BFTkRJTkcpCisJCXJldHVybjsKKworCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSkKKwkJZndfZmlsbF9yZXNwb25zZSgmcmVxdWVzdC0+cmVzcG9uc2UsIHJlcXVlc3QtPnJlcXVlc3RfaGVhZGVyLAorCQkJCSByY29kZSwgcmVxdWVzdC0+ZGF0YSwgcmVxdWVzdC0+bGVuZ3RoKTsKKwllbHNlCisJCWZ3X2ZpbGxfcmVzcG9uc2UoJnJlcXVlc3QtPnJlc3BvbnNlLCByZXF1ZXN0LT5yZXF1ZXN0X2hlYWRlciwKKwkJCQkgcmNvZGUsIE5VTEwsIDApOworCisJY2FyZC0+ZHJpdmVyLT5zZW5kX3Jlc3BvbnNlKGNhcmQsICZyZXF1ZXN0LT5yZXNwb25zZSk7Cit9CitFWFBPUlRfU1lNQk9MKGZ3X3NlbmRfcmVzcG9uc2UpOworCit2b2lkCitmd19jb3JlX2hhbmRsZV9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwKQoreworCXN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXI7CisJc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3Q7CisJdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0Y29kZSwgZGVzdGluYXRpb24sIHNvdXJjZTsKKworCWlmIChwLT5wYXlsb2FkX2xlbmd0aCA+IDIwNDgpIHsKKwkJLyogRklYTUU6IHNlbmQgZXJyb3IgcmVzcG9uc2UuICovCisJCXJldHVybjsKKwl9CisKKwlpZiAocC0+YWNrICE9IEFDS19QRU5ESU5HICYmIHAtPmFjayAhPSBBQ0tfQ09NUExFVEUpCisJCXJldHVybjsKKworCXJlcXVlc3QgPSBhbGxvY2F0ZV9yZXF1ZXN0KHApOworCWlmIChyZXF1ZXN0ID09IE5VTEwpIHsKKwkJLyogRklYTUU6IHNlbmQgc3RhdGljYWxseSBhbGxvY2F0ZWQgYnVzeSBwYWNrZXQuICovCisJCXJldHVybjsKKwl9CisKKwlvZmZzZXQgICAgICA9CisJCSgodW5zaWduZWQgbG9uZyBsb25nKQorCQkgSEVBREVSX0dFVF9PRkZTRVRfSElHSChwLT5oZWFkZXJbMV0pIDw8IDMyKSB8IHAtPmhlYWRlclsyXTsKKwl0Y29kZSAgICAgICA9IEhFQURFUl9HRVRfVENPREUocC0+aGVhZGVyWzBdKTsKKwlkZXN0aW5hdGlvbiA9IEhFQURFUl9HRVRfREVTVElOQVRJT04ocC0+aGVhZGVyWzBdKTsKKwlzb3VyY2UgICAgICA9IEhFQURFUl9HRVRfU09VUkNFKHAtPmhlYWRlclswXSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRkcmVzc19oYW5kbGVyX2xvY2ssIGZsYWdzKTsKKwloYW5kbGVyID0gbG9va3VwX2VuY2xvc2luZ19hZGRyZXNzX2hhbmRsZXIoJmFkZHJlc3NfaGFuZGxlcl9saXN0LAorCQkJCQkJICAgb2Zmc2V0LCByZXF1ZXN0LT5sZW5ndGgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkZHJlc3NfaGFuZGxlcl9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIEZJWE1FOiBsb29rdXAgdGhlIGZ3X25vZGUgY29ycmVzcG9uZGluZyB0byB0aGUgc2VuZGVyIG9mCisJICogdGhpcyByZXF1ZXN0IGFuZCBwYXNzIHRoYXQgdG8gdGhlIGFkZHJlc3MgaGFuZGxlciBpbnN0ZWFkCisJICogb2YgdGhlIG5vZGUgSUQuICBXZSBtYXkgYWxzbyB3YW50IHRvIG1vdmUgdGhlIGFkZHJlc3MKKwkgKiBhbGxvY2F0aW9ucyB0byBmd19ub2RlIHNvIHdlIG9ubHkgZG8gdGhpcyBjYWxsYmFjayBpZiB0aGUKKwkgKiB1cHBlciBsYXllcnMgcmVnaXN0ZXJlZCBpdCBmb3IgdGhpcyBub2RlLgorCSAqLworCisJaWYgKGhhbmRsZXIgPT0gTlVMTCkKKwkJZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9BRERSRVNTX0VSUk9SKTsKKwllbHNlCisJCWhhbmRsZXItPmFkZHJlc3NfY2FsbGJhY2soY2FyZCwgcmVxdWVzdCwKKwkJCQkJICB0Y29kZSwgZGVzdGluYXRpb24sIHNvdXJjZSwKKwkJCQkJICBwLT5nZW5lcmF0aW9uLCBwLT5zcGVlZCwgb2Zmc2V0LAorCQkJCQkgIHJlcXVlc3QtPmRhdGEsIHJlcXVlc3QtPmxlbmd0aCwKKwkJCQkJICBoYW5kbGVyLT5jYWxsYmFja19kYXRhKTsKK30KK0VYUE9SVF9TWU1CT0woZndfY29yZV9oYW5kbGVfcmVxdWVzdCk7CisKK3ZvaWQKK2Z3X2NvcmVfaGFuZGxlX3Jlc3BvbnNlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwKQoreworCXN0cnVjdCBmd190cmFuc2FjdGlvbiAqdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiAqZGF0YTsKKwlzaXplX3QgZGF0YV9sZW5ndGg7CisJaW50IHRjb2RlLCB0bGFiZWwsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHJjb2RlOworCisJdGNvZGUgICAgICAgPSBIRUFERVJfR0VUX1RDT0RFKHAtPmhlYWRlclswXSk7CisJdGxhYmVsICAgICAgPSBIRUFERVJfR0VUX1RMQUJFTChwLT5oZWFkZXJbMF0pOworCWRlc3RpbmF0aW9uID0gSEVBREVSX0dFVF9ERVNUSU5BVElPTihwLT5oZWFkZXJbMF0pOworCXNvdXJjZSAgICAgID0gSEVBREVSX0dFVF9TT1VSQ0UocC0+aGVhZGVyWzFdKTsKKwlyY29kZSAgICAgICA9IEhFQURFUl9HRVRfUkNPREUocC0+aGVhZGVyWzFdKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmY2FyZC0+dHJhbnNhY3Rpb25fbGlzdCwgbGluaykgeworCQlpZiAodC0+bm9kZV9pZCA9PSBzb3VyY2UgJiYgdC0+dGxhYmVsID09IHRsYWJlbCkgeworCQkJbGlzdF9kZWwoJnQtPmxpbmspOworCQkJY2FyZC0+dGxhYmVsX21hc2sgJj0gfigxIDw8IHQtPnRsYWJlbCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoJnQtPmxpbmsgPT0gJmNhcmQtPnRyYW5zYWN0aW9uX2xpc3QpIHsKKwkJZndfbm90aWZ5KCJVbnNvbGljaXRlZCByZXNwb25zZSAoc291cmNlICV4LCB0bGFiZWwgJXgpXG4iLAorCQkJICBzb3VyY2UsIHRsYWJlbCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEZJWE1FOiBzYW5pdHkgY2hlY2sgcGFja2V0LCBpcyBsZW5ndGggY29ycmVjdCwgZG9lcyB0Y29kZXMKKwkgKiBhbmQgYWRkcmVzc2VzIG1hdGNoLgorCSAqLworCisJc3dpdGNoICh0Y29kZSkgeworCWNhc2UgVENPREVfUkVBRF9RVUFETEVUX1JFU1BPTlNFOgorCQlkYXRhID0gKHUzMiAqKSAmcC0+aGVhZGVyWzNdOworCQlkYXRhX2xlbmd0aCA9IDQ7CisJCWJyZWFrOworCisJY2FzZSBUQ09ERV9XUklURV9SRVNQT05TRToKKwkJZGF0YSA9IE5VTEw7CisJCWRhdGFfbGVuZ3RoID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFRDT0RFX1JFQURfQkxPQ0tfUkVTUE9OU0U6CisJY2FzZSBUQ09ERV9MT0NLX1JFU1BPTlNFOgorCQlkYXRhID0gcC0+cGF5bG9hZDsKKwkJZGF0YV9sZW5ndGggPSBIRUFERVJfR0VUX0RBVEFfTEVOR1RIKHAtPmhlYWRlclszXSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiwgdGhpcyBpcyBqdXN0IHRvIHNodXQgdXAgZ2NjLiAqLworCQlkYXRhID0gTlVMTDsKKwkJZGF0YV9sZW5ndGggPSAwOworCQlicmVhazsKKwl9CisKKwl0LT5jYWxsYmFjayhjYXJkLCByY29kZSwgZGF0YSwgZGF0YV9sZW5ndGgsIHQtPmNhbGxiYWNrX2RhdGEpOworfQorRVhQT1JUX1NZTUJPTChmd19jb3JlX2hhbmRsZV9yZXNwb25zZSk7CisKK2NvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiB0b3BvbG9neV9tYXBfcmVnaW9uID0KKwl7IC5zdGFydCA9IDB4ZmZmZmYwMDAxMDAwdWxsLCAuZW5kID0gMHhmZmZmZjAwMDE0MDB1bGwsIH07CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfdG9wb2xvZ3lfbWFwKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKKwkJICAgIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLAorCQkgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKKwkJICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCSAgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQoreworCWludCBpLCBzdGFydCwgZW5kOworCXUzMiAqbWFwOworCisJaWYgKCFUQ09ERV9JU19SRUFEX1JFUVVFU1QodGNvZGUpKSB7CisJCWZ3X3NlbmRfcmVzcG9uc2UoY2FyZCwgcmVxdWVzdCwgUkNPREVfVFlQRV9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKG9mZnNldCAmIDMpID4gMCB8fCAobGVuZ3RoICYgMykgPiAwKSB7CisJCWZ3X3NlbmRfcmVzcG9uc2UoY2FyZCwgcmVxdWVzdCwgUkNPREVfQUREUkVTU19FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwlzdGFydCA9IChvZmZzZXQgLSB0b3BvbG9neV9tYXBfcmVnaW9uLnN0YXJ0KSAvIDQ7CisJZW5kID0gc3RhcnQgKyBsZW5ndGggLyA0OworCW1hcCA9IHBheWxvYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoIC8gNDsgaSsrKQorCQltYXBbaV0gPSBjcHVfdG9fYmUzMihjYXJkLT50b3BvbG9neV9tYXBbc3RhcnQgKyBpXSk7CisKKwlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX0NPTVBMRVRFKTsKK30KKworc3RhdGljIHN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgdG9wb2xvZ3lfbWFwID0geworCS5sZW5ndGgJCQk9IDB4MjAwLAorCS5hZGRyZXNzX2NhbGxiYWNrCT0gaGFuZGxlX3RvcG9sb2d5X21hcCwKK307CisKK2NvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiByZWdpc3RlcnNfcmVnaW9uID0KKwl7IC5zdGFydCA9IDB4ZmZmZmYwMDAwMDAwdWxsLCAuZW5kID0gMHhmZmZmZjAwMDA0MDB1bGwsIH07CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfcmVnaXN0ZXJzKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKKwkJIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLAorCQkgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKKwkJIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCisJCSB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQoreworCWludCByZWcgPSBvZmZzZXQgLSBDU1JfUkVHSVNURVJfQkFTRTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYnVzX3RpbWU7CisJX19iZTMyICpkYXRhID0gcGF5bG9hZDsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBDU1JfQ1lDTEVfVElNRToKKwljYXNlIENTUl9CVVNfVElNRToKKwkJaWYgKCFUQ09ERV9JU19SRUFEX1JFUVVFU1QodGNvZGUpIHx8IGxlbmd0aCAhPSA0KSB7CisJCQlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX1RZUEVfRVJST1IpOworCQkJYnJlYWs7CisJCX0KKworCQlidXNfdGltZSA9IGNhcmQtPmRyaXZlci0+Z2V0X2J1c190aW1lKGNhcmQpOworCQlpZiAocmVnID09IENTUl9DWUNMRV9USU1FKQorCQkJKmRhdGEgPSBjcHVfdG9fYmUzMihidXNfdGltZSk7CisJCWVsc2UKKwkJCSpkYXRhID0gY3B1X3RvX2JlMzIoYnVzX3RpbWUgPj4gMjUpOworCQlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX0NPTVBMRVRFKTsKKwkJYnJlYWs7CisKKwljYXNlIENTUl9CVVNfTUFOQUdFUl9JRDoKKwljYXNlIENTUl9CQU5EV0lEVEhfQVZBSUxBQkxFOgorCWNhc2UgQ1NSX0NIQU5ORUxTX0FWQUlMQUJMRV9ISToKKwljYXNlIENTUl9DSEFOTkVMU19BVkFJTEFCTEVfTE86CisJCS8qCisJCSAqIEZJWE1FOiB0aGVzZSBhcmUgaGFuZGxlZCBieSB0aGUgT0hDSSBoYXJkd2FyZSBhbmQKKwkJICogdGhlIHN0YWNrIG5ldmVyIHNlZXMgdGhlc2UgcmVxdWVzdC4gSWYgd2UgYWRkCisJCSAqIHN1cHBvcnQgZm9yIGEgbmV3IHR5cGUgb2YgY29udHJvbGxlciB0aGF0IGRvZXNuJ3QKKwkJICogaGFuZGxlIHRoaXMgaW4gaGFyZHdhcmUgd2UgbmVlZCB0byBkZWFsIHdpdGggdGhlc2UKKwkJICogdHJhbnNhY3Rpb25zLgorCQkgKi8KKwkJQlVHKCk7CisJCWJyZWFrOworCisJY2FzZSBDU1JfQlVTWV9USU1FT1VUOgorCQkvKiBGSVhNRTogSW1wbGVtZW50IHRoaXMuICovCisJZGVmYXVsdDoKKwkJZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9BRERSRVNTX0VSUk9SKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciByZWdpc3RlcnMgPSB7CisJLmxlbmd0aAkJCT0gMHg0MDAsCisJLmFkZHJlc3NfY2FsbGJhY2sJPSBoYW5kbGVfcmVnaXN0ZXJzLAorfTsKKworTU9EVUxFX0FVVEhPUigiS3Jpc3RpYW4gSG9lZ3NiZXJnIDxrcmhAYml0cGxhbmV0Lm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29yZSBJRUVFMTM5NCB0cmFuc2FjdGlvbiBsb2dpYyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgY29uc3QgdTMyIHZlbmRvcl90ZXh0dWFsX2Rlc2NyaXB0b3JbXSA9IHsKKwkvKiB0ZXh0dWFsIGRlc2NyaXB0b3IgbGVhZiAoKSAqLworCTB4MDAwNjAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4NGM2OTZlNzUsCQkvKiBMIGkgbiB1ICovCisJMHg3ODIwNDY2OSwJCS8qIHggICBGIGkgKi8KKwkweDcyNjU3NzY5LAkJLyogciBlIHcgaSAqLworCTB4NzI2NTAwMDAsCQkvKiByIGUgICAgICovCit9OworCitzdGF0aWMgY29uc3QgdTMyIG1vZGVsX3RleHR1YWxfZGVzY3JpcHRvcltdID0geworCS8qIG1vZGVsIGRlc2NyaXB0b3IgbGVhZiAoKSAqLworCTB4MDAwMzAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4NGE3NTZhNzUsCQkvKiBKIHUgaiB1ICovCit9OworCitzdGF0aWMgc3RydWN0IGZ3X2Rlc2NyaXB0b3IgdmVuZG9yX2lkX2Rlc2NyaXB0b3IgPSB7CisJLmxlbmd0aCA9IEFSUkFZX1NJWkUodmVuZG9yX3RleHR1YWxfZGVzY3JpcHRvciksCisJLmltbWVkaWF0ZSA9IDB4MDNkMDBkMWUsCisJLmtleSA9IDB4ODEwMDAwMDAsCisJLmRhdGEgPSB2ZW5kb3JfdGV4dHVhbF9kZXNjcmlwdG9yLAorfTsKKworc3RhdGljIHN0cnVjdCBmd19kZXNjcmlwdG9yIG1vZGVsX2lkX2Rlc2NyaXB0b3IgPSB7CisJLmxlbmd0aCA9IEFSUkFZX1NJWkUobW9kZWxfdGV4dHVhbF9kZXNjcmlwdG9yKSwKKwkuaW1tZWRpYXRlID0gMHgxNzAwMDAwMSwKKwkua2V5ID0gMHg4MTAwMDAwMCwKKwkuZGF0YSA9IG1vZGVsX3RleHR1YWxfZGVzY3JpcHRvciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGZ3X2NvcmVfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBidXNfcmVnaXN0ZXIoJmZ3X2J1c190eXBlKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWZ3X2NkZXZfbWFqb3IgPSByZWdpc3Rlcl9jaHJkZXYoMCwgImZpcmV3aXJlIiwgJmZ3X2RldmljZV9vcHMpOworCWlmIChmd19jZGV2X21ham9yIDwgMCkgeworCQlidXNfdW5yZWdpc3RlcigmZndfYnVzX3R5cGUpOworCQlyZXR1cm4gZndfY2Rldl9tYWpvcjsKKwl9CisKKwlyZXR2YWwgPSBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoJnRvcG9sb2d5X21hcCwKKwkJCQkJICAgICAmdG9wb2xvZ3lfbWFwX3JlZ2lvbik7CisJQlVHX09OKHJldHZhbCA8IDApOworCisJcmV0dmFsID0gZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZyZWdpc3RlcnMsCisJCQkJCSAgICAgJnJlZ2lzdGVyc19yZWdpb24pOworCUJVR19PTihyZXR2YWwgPCAwKTsKKworCS8qIEFkZCB0aGUgdmVuZG9yIHRleHR1YWwgZGVzY3JpcHRvci4gKi8KKwlyZXR2YWwgPSBmd19jb3JlX2FkZF9kZXNjcmlwdG9yKCZ2ZW5kb3JfaWRfZGVzY3JpcHRvcik7CisJQlVHX09OKHJldHZhbCA8IDApOworCXJldHZhbCA9IGZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3IoJm1vZGVsX2lkX2Rlc2NyaXB0b3IpOworCUJVR19PTihyZXR2YWwgPCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZndfY29yZV9jbGVhbnVwKHZvaWQpCit7CisJdW5yZWdpc3Rlcl9jaHJkZXYoZndfY2Rldl9tYWpvciwgImZpcmV3aXJlIik7CisJYnVzX3VucmVnaXN0ZXIoJmZ3X2J1c190eXBlKTsKK30KKworbW9kdWxlX2luaXQoZndfY29yZV9pbml0KTsKK21vZHVsZV9leGl0KGZ3X2NvcmVfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmggYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkYzNiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uaApAQCAtMCwwICsxLDQ1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IEtyaXN0aWFuIEhvZWdzYmVyZyA8a3JoQGJpdHBsYW5ldC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fZndfdHJhbnNhY3Rpb25faAorI2RlZmluZSBfX2Z3X3RyYW5zYWN0aW9uX2gKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jb25zdGFudHMuaD4KKworI2RlZmluZSBUQ09ERV9JU19SRUFEX1JFUVVFU1QodGNvZGUpCSgoKHRjb2RlKSAmIH4xKSA9PSA0KQorI2RlZmluZSBUQ09ERV9JU19CTE9DS19QQUNLRVQodGNvZGUpCSgoKHRjb2RlKSAmICAxKSAhPSAwKQorI2RlZmluZSBUQ09ERV9JU19SRVFVRVNUKHRjb2RlKQkJKCgodGNvZGUpICYgIDIpID09IDApCisjZGVmaW5lIFRDT0RFX0lTX1JFU1BPTlNFKHRjb2RlKQkoKCh0Y29kZSkgJiAgMikgIT0gMCkKKyNkZWZpbmUgVENPREVfSEFTX1JFUVVFU1RfREFUQSh0Y29kZSkJKCgodGNvZGUpICYgMTIpICE9IDQpCisjZGVmaW5lIFRDT0RFX0hBU19SRVNQT05TRV9EQVRBKHRjb2RlKQkoKCh0Y29kZSkgJiAxMikgIT0gMCkKKworI2RlZmluZSBMT0NBTF9CVVMgMHhmZmMwCisKKyNkZWZpbmUgU0VMRklEX1BPUlRfQ0hJTEQJMHgzCisjZGVmaW5lIFNFTEZJRF9QT1JUX1BBUkVOVAkweDIKKyNkZWZpbmUgU0VMRklEX1BPUlRfTkNPTk4JMHgxCisjZGVmaW5lIFNFTEZJRF9QT1JUX05PTkUJMHgwCisKKyNkZWZpbmUgUEhZX1BBQ0tFVF9DT05GSUcJMHgwCisjZGVmaW5lIFBIWV9QQUNLRVRfTElOS19PTgkweDEKKyNkZWZpbmUgUEhZX1BBQ0tFVF9TRUxGX0lECTB4MgorCisvKiBCaXQgZmllbGRzIF93aXRoaW5fIHRoZSBQSFkgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBQSFlfTElOS19BQ1RJVkUJCTB4ODAKKyNkZWZpbmUgUEhZX0NPTlRFTkRFUgkJMHg0MAorI2RlZmluZSBQSFlfQlVTX1JFU0VUCQkweDQwCisjZGVmaW5lIFBIWV9CVVNfU0hPUlRfUkVTRVQJMHg0MAorCisjZGVmaW5lIENTUl9SRUdJU1RFUl9CQVNFCQkweGZmZmZmMDAwMDAwMFVMTAorCisvKiByZWdpc3RlciBvZmZzZXRzIHJlbGF0aXZlIHRvIENTUl9SRUdJU1RFUl9CQVNFICovCisjZGVmaW5lIENTUl9TVEFURV9DTEVBUgkJCTB4MAorI2RlZmluZSBDU1JfU1RBVEVfU0VUCQkJMHg0CisjZGVmaW5lIENTUl9OT0RFX0lEUwkJCTB4OAorI2RlZmluZSBDU1JfUkVTRVRfU1RBUlQJCQkweGMKKyNkZWZpbmUgQ1NSX1NQTElUX1RJTUVPVVRfSEkJCTB4MTgKKyNkZWZpbmUgQ1NSX1NQTElUX1RJTUVPVVRfTE8JCTB4MWMKKyNkZWZpbmUgQ1NSX0NZQ0xFX1RJTUUJCQkweDIwMAorI2RlZmluZSBDU1JfQlVTX1RJTUUJCQkweDIwNAorI2RlZmluZSBDU1JfQlVTWV9USU1FT1VUCQkweDIxMAorI2RlZmluZSBDU1JfQlVTX01BTkFHRVJfSUQJCTB4MjFjCisjZGVmaW5lIENTUl9CQU5EV0lEVEhfQVZBSUxBQkxFCQkweDIyMAorI2RlZmluZSBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFCQkweDIyNAorI2RlZmluZSBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0hJCTB4MjI0CisjZGVmaW5lIENTUl9DSEFOTkVMU19BVkFJTEFCTEVfTE8JMHgyMjgKKyNkZWZpbmUgQ1NSX0JST0FEQ0FTVF9DSEFOTkVMCQkweDIzNAorI2RlZmluZSBDU1JfQ09ORklHX1JPTQkJCTB4NDAwCisjZGVmaW5lIENTUl9DT05GSUdfUk9NX0VORAkJMHg4MDAKKyNkZWZpbmUgQ1NSX0ZDUF9DT01NQU5ECQkJMHhCMDAKKyNkZWZpbmUgQ1NSX0ZDUF9SRVNQT05TRQkJMHhEMDAKKyNkZWZpbmUgQ1NSX0ZDUF9FTkQJCQkweEYwMAorI2RlZmluZSBDU1JfVE9QT0xPR1lfTUFQCQkweDEwMDAKKyNkZWZpbmUgQ1NSX1RPUE9MT0dZX01BUF9FTkQJCTB4MTQwMAorI2RlZmluZSBDU1JfU1BFRURfTUFQCQkJMHgyMDAwCisjZGVmaW5lIENTUl9TUEVFRF9NQVBfRU5ECQkweDMwMDAKKworI2RlZmluZSBmd19ub3RpZnkocywgYXJncy4uLikgcHJpbnRrKEtFUk5fTk9USUNFIEtCVUlMRF9NT0ROQU1FICI6ICIgcywgIyMgYXJncykKKyNkZWZpbmUgZndfZXJyb3IocywgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6ICIgcywgIyMgYXJncykKKyNkZWZpbmUgZndfZGVidWcocywgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUgIjogIiBzLCAjIyBhcmdzKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2Z3X21lbWNweV9mcm9tX2JlMzIodm9pZCAqX2RzdCwgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpCit7CisJdTMyICpkc3QgPSBfZHN0OworCXUzMiAqc3JjID0gX3NyYzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gNDsgaSsrKQorCQlkc3RbaV0gPSBjcHVfdG9fYmUzMihzcmNbaV0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2Z3X21lbWNweV90b19iZTMyKHZvaWQgKl9kc3QsIHZvaWQgKl9zcmMsIHNpemVfdCBzaXplKQoreworCWZ3X21lbWNweV9mcm9tX2JlMzIoX2RzdCwgX3NyYywgc2l6ZSk7Cit9CisKK3N0cnVjdCBmd19jYXJkOworc3RydWN0IGZ3X3BhY2tldDsKK3N0cnVjdCBmd19ub2RlOworc3RydWN0IGZ3X3JlcXVlc3Q7CisKK3N0cnVjdCBmd19kZXNjcmlwdG9yIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJc2l6ZV90IGxlbmd0aDsKKwl1MzIgaW1tZWRpYXRlOworCXUzMiBrZXk7CisJY29uc3QgdTMyICpkYXRhOworfTsKKworaW50IGZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3Ioc3RydWN0IGZ3X2Rlc2NyaXB0b3IgKmRlc2MpOwordm9pZCBmd19jb3JlX3JlbW92ZV9kZXNjcmlwdG9yKHN0cnVjdCBmd19kZXNjcmlwdG9yICpkZXNjKTsKKwordHlwZWRlZiB2b2lkICgqZndfcGFja2V0X2NhbGxiYWNrX3QpKHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwKKwkJCQkgICAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKTsKKwordHlwZWRlZiB2b2lkICgqZndfdHJhbnNhY3Rpb25fY2FsbGJhY2tfdCkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSwKKwkJCQkJICB2b2lkICpkYXRhLAorCQkJCQkgIHNpemVfdCBsZW5ndGgsCisJCQkJCSAgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CisKK3R5cGVkZWYgdm9pZCAoKmZ3X2FkZHJlc3NfY2FsbGJhY2tfdCkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkJICAgICAgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCisJCQkJICAgICAgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsCisJCQkJICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAorCQkJCSAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgsCisJCQkJICAgICAgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CisKK3R5cGVkZWYgdm9pZCAoKmZ3X2J1c19yZXNldF9jYWxsYmFja190KShzdHJ1Y3QgZndfY2FyZCAqaGFuZGxlLAorCQkJCQlpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sCisJCQkJCXUzMiAqc2VsZl9pZHMsCisJCQkJCWludCBzZWxmX2lkX2NvdW50LAorCQkJCQl2b2lkICpjYWxsYmFja19kYXRhKTsKKworc3RydWN0IGZ3X3BhY2tldCB7CisJaW50IHNwZWVkOworCWludCBnZW5lcmF0aW9uOworCXUzMiBoZWFkZXJbNF07CisJc2l6ZV90IGhlYWRlcl9sZW5ndGg7CisJdm9pZCAqcGF5bG9hZDsKKwlzaXplX3QgcGF5bG9hZF9sZW5ndGg7CisJdTMyIHRpbWVzdGFtcDsKKworCS8qCisJICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBoYXMKKwkgKiBjb21wbGV0ZWQ7IGZvciBzdWNjZXNzZnVsIHRyYW5zbWlzc2lvbiwgdGhlIHN0YXR1cyBjb2RlIGlzCisJICogdGhlIGFjayByZWNlaXZlZCBmcm9tIHRoZSBkZXN0aW5hdGlvbiwgb3RoZXJ3aXNlIGl0J3MgYQorCSAqIG5lZ2F0aXZlIGVycm5vOiBFTk9NRU0sIEVTVEFMRSwgRVRJTUVET1VULCBFTk9ERVYsIEVJTy4KKwkgKiBUaGUgY2FsbGJhY2sgY2FuIGJlIGNhbGxlZCBmcm9tIHRhc2tsZXQgY29udGV4dCBhbmQgdGh1cworCSAqIG11c3QgbmV2ZXIgYmxvY2suCisJICovCisJZndfcGFja2V0X2NhbGxiYWNrX3QgY2FsbGJhY2s7CisJaW50IGFjazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJdm9pZCAqZHJpdmVyX2RhdGE7Cit9OworCitzdHJ1Y3QgZndfdHJhbnNhY3Rpb24geworCWludCBub2RlX2lkOyAvKiBUaGUgZ2VuZXJhdGlvbiBpcyBpbXBsaWVkOyBpdCBpcyBhbHdheXMgdGhlIGN1cnJlbnQuICovCisJaW50IHRsYWJlbDsKKwlpbnQgdGltZXN0YW1wOworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKworCXN0cnVjdCBmd19wYWNrZXQgcGFja2V0OworCisJLyoKKwkgKiBUaGUgZGF0YSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZQorCSAqIGNhbGxiYWNrLgorCSAqLworCWZ3X3RyYW5zYWN0aW9uX2NhbGxiYWNrX3QgY2FsbGJhY2s7CisJdm9pZCAqY2FsbGJhY2tfZGF0YTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZ3X3BhY2tldCAqCitmd19wYWNrZXQoc3RydWN0IGxpc3RfaGVhZCAqbCkKK3sKKwlyZXR1cm4gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgZndfcGFja2V0LCBsaW5rKTsKK30KKworc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciB7CisJdTY0IG9mZnNldDsKKwlzaXplX3QgbGVuZ3RoOworCWZ3X2FkZHJlc3NfY2FsbGJhY2tfdCBhZGRyZXNzX2NhbGxiYWNrOworCXZvaWQgKmNhbGxiYWNrX2RhdGE7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworfTsKKworCitzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24geworCXU2NCBzdGFydDsKKwl1NjQgZW5kOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiBmd19sb3dfbWVtb3J5X3JlZ2lvbjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gZndfaGlnaF9tZW1vcnlfcmVnaW9uOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiBmd19wcml2YXRlX3JlZ2lvbjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gZndfY3NyX3JlZ2lvbjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gZndfdW5pdF9zcGFjZV9yZWdpb247CisKK2ludCBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlciwKKwkJCQljb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gKnJlZ2lvbik7Cit2b2lkIGZ3X2NvcmVfcmVtb3ZlX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyKTsKK3ZvaWQgZndfZmlsbF9yZXNwb25zZShzdHJ1Y3QgZndfcGFja2V0ICpyZXNwb25zZSwgdTMyICpyZXF1ZXN0X2hlYWRlciwKKwkJICAgICAgaW50IHJjb2RlLCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKTsKK3ZvaWQgZndfc2VuZF9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJICAgICAgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsIGludCByY29kZSk7CisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgZndfYnVzX3R5cGU7CisKK3N0cnVjdCBmd19jYXJkIHsKKwljb25zdCBzdHJ1Y3QgZndfY2FyZF9kcml2ZXIgKmRyaXZlcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IGtyZWYga3JlZjsKKworCWludCBub2RlX2lkOworCWludCBnZW5lcmF0aW9uOworCS8qIFRoaXMgaXMgdGhlIGdlbmVyYXRpb24gdXNlZCBmb3IgdGltZXN0YW1waW5nIGluY29taW5nIHJlcXVlc3RzLiAqLworCWludCByZXF1ZXN0X2dlbmVyYXRpb247CisJaW50IGN1cnJlbnRfdGxhYmVsLCB0bGFiZWxfbWFzazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRyYW5zYWN0aW9uX2xpc3Q7CisJc3RydWN0IHRpbWVyX2xpc3QgZmx1c2hfdGltZXI7CisJdW5zaWduZWQgbG9uZyByZXNldF9qaWZmaWVzOworCisJdW5zaWduZWQgbG9uZyBsb25nIGd1aWQ7CisJaW50IG1heF9yZWNlaXZlOworCWludCBsaW5rX3NwZWVkOworCWludCBjb25maWdfcm9tX2dlbmVyYXRpb247CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gc3RvcmUgdXAgdG8gNCBzZWxmIElEIGZvciBhIG1heGltdW0gb2YgNjMKKwkgKiBkZXZpY2VzIHBsdXMgMyB3b3JkcyBmb3IgdGhlIHRvcG9sb2d5IG1hcCBoZWFkZXIuCisJICovCisJaW50IHNlbGZfaWRfY291bnQ7CisJdTMyIHRvcG9sb2d5X21hcFsyNTIgKyAzXTsKKworCXNwaW5sb2NrX3QgbG9jazsgLyogVGFrZSB0aGlzIGxvY2sgd2hlbiBoYW5kbGluZyB0aGUgbGlzdHMgaW4KKwkJCSAgKiB0aGlzIHN0cnVjdC4gKi8KKwlzdHJ1Y3QgZndfbm9kZSAqbG9jYWxfbm9kZTsKKwlzdHJ1Y3QgZndfbm9kZSAqcm9vdF9ub2RlOworCXN0cnVjdCBmd19ub2RlICppcm1fbm9kZTsKKwlpbnQgY29sb3I7CisJaW50IGdhcF9jb3VudDsKKwlpbnQgdG9wb2xvZ3lfdHlwZTsKKworCWludCBpbmRleDsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKworCS8qIFdvcmsgc3RydWN0IGZvciBCTSBkdXRpZXMuICovCisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCWludCBibV9yZXRyaWVzOworCWludCBibV9nZW5lcmF0aW9uOworfTsKKworc3RydWN0IGZ3X2NhcmQgKmZ3X2NhcmRfZ2V0KHN0cnVjdCBmd19jYXJkICpjYXJkKTsKK3ZvaWQgZndfY2FyZF9wdXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpOworCisvKgorICogVGhlIGlzbyBwYWNrZXQgZm9ybWF0IGFsbG93cyBmb3IgYW4gaW1tZWRpYXRlIGhlYWRlci9wYXlsb2FkIHBhcnQKKyAqIHN0b3JlZCBpbiAnaGVhZGVyJyBpbW1lZGlhdGVseSBhZnRlciB0aGUgcGFja2V0IGluZm8gcGx1cyBhbgorICogaW5kaXJlY3QgcGF5bG9hZCBwYXJ0IHRoYXQgaXMgcG9pbnRlciB0byBieSB0aGUgJ3BheWxvYWQnIGZpZWxkLgorICogQXBwbGljYXRpb25zIGNhbiB1c2Ugb25lIG9yIHRoZSBvdGhlciBvciBib3RoIHRvIGltcGxlbWVudCBzaW1wbGUKKyAqIGxvdy1iYW5kd2lkdGggc3RyZWFtaW5nIChlLmcuIGF1ZGlvKSBvciBtb3JlIGFkdmFuY2VkCisgKiBzY2F0dGVyLWdhdGhlciBzdHJlYW1pbmcgKGUuZy4gYXNzZW1ibGluZyB2aWRlbyBmcmFtZSBhdXRvbWF0aWNhbGx5KS4KKyAqLworCitzdHJ1Y3QgZndfaXNvX3BhY2tldCB7CisJdTE2IHBheWxvYWRfbGVuZ3RoOwkvKiBMZW5ndGggb2YgaW5kaXJlY3QgcGF5bG9hZC4gKi8KKwl1MzIgaW50ZXJydXB0IDogMTsJLyogR2VuZXJhdGUgaW50ZXJydXB0IG9uIHRoaXMgcGFja2V0ICovCisJdTMyIHNraXAgOiAxOwkJLyogU2V0IHRvIG5vdCBzZW5kIHBhY2tldCBhdCBhbGwuICovCisJdTMyIHRhZyA6IDI7CisJdTMyIHN5IDogNDsKKwl1MzIgaGVhZGVyX2xlbmd0aCA6IDg7CS8qIExlbmd0aCBvZiBpbW1lZGlhdGUgaGVhZGVyLiAqLworCXUzMiBoZWFkZXJbMF07Cit9OworCisjZGVmaW5lIEZXX0lTT19DT05URVhUX1RSQU5TTUlUCTAKKyNkZWZpbmUgRldfSVNPX0NPTlRFWFRfUkVDRUlWRQkxCisKKyNkZWZpbmUgRldfSVNPX0NPTlRFWFRfTUFUQ0hfVEFHMAkgMQorI2RlZmluZSBGV19JU09fQ09OVEVYVF9NQVRDSF9UQUcxCSAyCisjZGVmaW5lIEZXX0lTT19DT05URVhUX01BVENIX1RBRzIJIDQKKyNkZWZpbmUgRldfSVNPX0NPTlRFWFRfTUFUQ0hfVEFHMwkgOAorI2RlZmluZSBGV19JU09fQ09OVEVYVF9NQVRDSF9BTExfVEFHUwkxNQorCitzdHJ1Y3QgZndfaXNvX2NvbnRleHQ7CisKK3R5cGVkZWYgdm9pZCAoKmZ3X2lzb19jYWxsYmFja190KShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmNvbnRleHQsCisJCQkJICB1MzIgY3ljbGUsCisJCQkJICBzaXplX3QgaGVhZGVyX2xlbmd0aCwKKwkJCQkgIHZvaWQgKmhlYWRlciwKKwkJCQkgIHZvaWQgKmRhdGEpOworCisvKgorICogQW4gaXNvIGJ1ZmZlciBpcyBqdXN0IGEgc2V0IG9mIHBhZ2VzIG1hcHBlZCBmb3IgRE1BIGluIHRoZQorICogc3BlY2lmaWVkIGRpcmVjdGlvbi4gIFNpbmNlIHRoZSBwYWdlcyBhcmUgdG8gYmUgdXNlZCBmb3IgRE1BLCB0aGV5CisgKiBhcmUgbm90IG1hcHBlZCBpbnRvIHRoZSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLiAgV2Ugc3RvcmUgdGhlCisgKiBETUEgYWRkcmVzcyBpbiB0aGUgcGFnZSBwcml2YXRlLiBUaGUgaGVscGVyIGZ1bmN0aW9uCisgKiBmd19pc29fYnVmZmVyX21hcCgpIHdpbGwgbWFwIHRoZSBwYWdlcyBpbnRvIGEgZ2l2ZW4gdm1hLgorICovCisKK3N0cnVjdCBmd19pc29fYnVmZmVyIHsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlpbnQgcGFnZV9jb3VudDsKK307CisKK3N0cnVjdCBmd19pc29fY29udGV4dCB7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQ7CisJaW50IHR5cGU7CisJaW50IGNoYW5uZWw7CisJaW50IHNwZWVkOworCXNpemVfdCBoZWFkZXJfc2l6ZTsKKwlmd19pc29fY2FsbGJhY2tfdCBjYWxsYmFjazsKKwl2b2lkICpjYWxsYmFja19kYXRhOworfTsKKworaW50Citmd19pc29fYnVmZmVyX2luaXQoc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJICAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCSAgIGludCBwYWdlX2NvdW50LAorCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworaW50Citmd19pc29fYnVmZmVyX21hcChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cit2b2lkCitmd19pc29fYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgc3RydWN0IGZ3X2NhcmQgKmNhcmQpOworCitzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKgorZndfaXNvX2NvbnRleHRfY3JlYXRlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdHlwZSwKKwkJICAgICAgaW50IGNoYW5uZWwsIGludCBzcGVlZCwgc2l6ZV90IGhlYWRlcl9zaXplLAorCQkgICAgICBmd19pc29fY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CisKK3ZvaWQKK2Z3X2lzb19jb250ZXh0X2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpOworCitpbnQKK2Z3X2lzb19jb250ZXh0X3F1ZXVlKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAorCQkgICAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCSAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJICAgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpOworCitpbnQKK2Z3X2lzb19jb250ZXh0X3N0YXJ0KHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAorCQkgICAgIGludCBjeWNsZSwgaW50IHN5bmMsIGludCB0YWdzKTsKKworaW50Citmd19pc29fY29udGV4dF9zdG9wKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKKworc3RydWN0IGZ3X2NhcmRfZHJpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCisJLyoKKwkgKiBFbmFibGUgdGhlIGdpdmVuIGNhcmQgd2l0aCB0aGUgZ2l2ZW4gaW5pdGlhbCBjb25maWcgcm9tLgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gYWN0aXZhdGUgdGhlIGNhcmQsIGFuZCBlaXRoZXIKKwkgKiBlbmFibGUgdGhlIFBIWSBvciBzZXQgdGhlIGxpbmtfb24gYml0IGFuZCBpbml0aWF0ZSBhIGJ1cworCSAqIHJlc2V0LgorCSAqLworCWludCAoKmVuYWJsZSkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHUzMiAqY29uZmlnX3JvbSwgc2l6ZV90IGxlbmd0aCk7CisKKwlpbnQgKCp1cGRhdGVfcGh5X3JlZykoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBhZGRyZXNzLAorCQkJICAgICAgaW50IGNsZWFyX2JpdHMsIGludCBzZXRfYml0cyk7CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgY29uZmlnIHJvbSBmb3IgYW4gZW5hYmxlZCBjYXJkLiAgVGhpcyBmdW5jdGlvbgorCSAqIHNob3VsZCBjaGFuZ2UgdGhlIGNvbmZpZyByb20gdGhhdCBpcyBwcmVzZW50ZWQgb24gdGhlIGJ1cworCSAqIGFuIGluaXRpYXRlIGEgYnVzIHJlc2V0LgorCSAqLworCWludCAoKnNldF9jb25maWdfcm9tKShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCSAgICAgIHUzMiAqY29uZmlnX3JvbSwgc2l6ZV90IGxlbmd0aCk7CisKKwl2b2lkICgqc2VuZF9yZXF1ZXN0KShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KTsKKwl2b2lkICgqc2VuZF9yZXNwb25zZSkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCk7CisJLyogQ2FsbGluZyBjYW5jZWwgaXMgdmFsaWQgb25jZSBhIHBhY2tldCBoYXMgYmVlbiBzdWJtaXR0ZWQuICovCisJaW50ICgqY2FuY2VsX3BhY2tldCkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCk7CisKKwkvKgorCSAqIEFsbG93IHRoZSBzcGVjaWZpZWQgbm9kZSBJRCB0byBkbyBkaXJlY3QgRE1BIG91dCBhbmQgaW4gb2YKKwkgKiBob3N0IG1lbW9yeS4gIFRoZSBjYXJkIHdpbGwgZGlzYWJsZSB0aGlzIGZvciBhbGwgbm9kZSB3aGVuCisJICogYSBidXMgcmVzZXQgaGFwcGVucywgc28gZHJpdmVyIG5lZWQgdG8gcmVlbmFibGUgdGhpcyBhZnRlcgorCSAqIGJ1cyByZXNldC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PREVWIGlmIHRoZSBjYXJkCisJICogZG9lc24ndCBzdXBwb3J0IHRoaXMsIC1FU1RBTEUgaWYgdGhlIGdlbmVyYXRpb24gZG9lc24ndAorCSAqIG1hdGNoLgorCSAqLworCWludCAoKmVuYWJsZV9waHlzX2RtYSkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkgICAgICAgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uKTsKKworCXU2NCAoKmdldF9idXNfdGltZSkoc3RydWN0IGZ3X2NhcmQgKmNhcmQpOworCisJc3RydWN0IGZ3X2lzb19jb250ZXh0ICoKKwkoKmFsbG9jYXRlX2lzb19jb250ZXh0KShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCQlpbnQgdHlwZSwgc2l6ZV90IGhlYWRlcl9zaXplKTsKKwl2b2lkICgqZnJlZV9pc29fY29udGV4dCkoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpOworCisJaW50ICgqc3RhcnRfaXNvKShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKKwkJCSBzMzIgY3ljbGUsIHUzMiBzeW5jLCB1MzIgdGFncyk7CisKKwlpbnQgKCpxdWV1ZV9pc28pKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAorCQkJIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCQkgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJCSB1bnNpZ25lZCBsb25nIHBheWxvYWQpOworCisJaW50ICgqc3RvcF9pc28pKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKK307CisKK2ludAorZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzaG9ydF9yZXNldCk7CisKK3ZvaWQKK2Z3X3NlbmRfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0LAorCQlpbnQgdGNvZGUsIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAorCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAorCQl2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoLAorCQlmd190cmFuc2FjdGlvbl9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKTsKKworaW50IGZ3X2NhbmNlbF90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCSAgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbik7CisKK3ZvaWQgZndfZmx1c2hfdHJhbnNhY3Rpb25zKHN0cnVjdCBmd19jYXJkICpjYXJkKTsKKwordm9pZCBmd19zZW5kX3BoeV9jb25maWcoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQlpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIGludCBnYXBfY291bnQpOworCisvKgorICogQ2FsbGVkIGJ5IHRoZSB0b3BvbG9neSBjb2RlIHRvIGluZm9ybSB0aGUgZGV2aWNlIGNvZGUgb2Ygbm9kZQorICogYWN0aXZpdHk7IGZvdW5kLCBsb3N0LCBvciB1cGRhdGVkIG5vZGVzLgorICovCit2b2lkCitmd19ub2RlX2V2ZW50KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfbm9kZSAqbm9kZSwgaW50IGV2ZW50KTsKKworLyogQVBJIHVzZWQgYnkgY2FyZCBsZXZlbCBkcml2ZXJzICovCisKK3ZvaWQKK2Z3X2NhcmRfaW5pdGlhbGl6ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgY29uc3Qgc3RydWN0IGZ3X2NhcmRfZHJpdmVyICpkcml2ZXIsCisJCSAgIHN0cnVjdCBkZXZpY2UgKmRldmljZSk7CitpbnQKK2Z3X2NhcmRfYWRkKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCSAgICB1MzIgbWF4X3JlY2VpdmUsIHUzMiBsaW5rX3NwZWVkLCB1NjQgZ3VpZCk7CisKK3ZvaWQKK2Z3X2NvcmVfcmVtb3ZlX2NhcmQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpOworCit2b2lkCitmd19jb3JlX2hhbmRsZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uLAorCQkJIGludCBzZWxmX2lkX2NvdW50LCB1MzIgKnNlbGZfaWRzKTsKK3ZvaWQKK2Z3X2NvcmVfaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnJlcXVlc3QpOworCit2b2lkCitmd19jb3JlX2hhbmRsZV9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KTsKKworI2VuZGlmIC8qIF9fZndfdHJhbnNhY3Rpb25faCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggNjJlMjFjYy4uNmVjMDRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCmluZGV4IGExOWI2NWUuLjdmODE3ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCkBAIC0yNDAsMTEgKzI0MCw5NCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgaW50IG1hdGNoX3NjYW5jb2RlKGludCBjb2RlLCBpbnQgc2NhbmNvZGUpCit7CisJaWYgKHNjYW5jb2RlID09IDApCisJCXJldHVybiAxOworCXJldHVybiAoKGNvZGUgJiAoSElEX1VTQUdFX1BBR0UgfCBISURfVVNBR0UpKSA9PSBzY2FuY29kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hdGNoX2tleWNvZGUoaW50IGNvZGUsIGludCBrZXljb2RlKQoreworCWlmIChrZXljb2RlID09IDApCisJCXJldHVybiAxOworCXJldHVybiAoY29kZSA9PSBrZXljb2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBoaWRfdXNhZ2UgKmhpZGlucHV0X2ZpbmRfa2V5KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsCisJCWludCBzY2FuY29kZSwgaW50IGtleWNvZGUpCit7CisJaW50IGksIGosIGs7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZTsKKworCWZvciAoayA9IEhJRF9JTlBVVF9SRVBPUlQ7IGsgPD0gSElEX09VVFBVVF9SRVBPUlQ7IGsrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJmhpZC0+cmVwb3J0X2VudW1ba10ucmVwb3J0X2xpc3QsIGxpc3QpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCByZXBvcnQtPm1heGZpZWxkOyBpKyspIHsKKwkJCQlmb3IgKCBqID0gMDsgaiA8IHJlcG9ydC0+ZmllbGRbaV0tPm1heHVzYWdlOyBqKyspIHsKKwkJCQkJdXNhZ2UgPSByZXBvcnQtPmZpZWxkW2ldLT51c2FnZSArIGo7CisJCQkJCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgJiYKKwkJCQkJCW1hdGNoX3NjYW5jb2RlKHVzYWdlLT5oaWQsIHNjYW5jb2RlKSAmJgorCQkJCQkJbWF0Y2hfa2V5Y29kZSh1c2FnZS0+Y29kZSwga2V5Y29kZSkpCisJCQkJCQlyZXR1cm4gdXNhZ2U7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGhpZGlucHV0X2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsCisJCQkJaW50ICprZXljb2RlKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2U7CisJCisJdXNhZ2UgPSBoaWRpbnB1dF9maW5kX2tleShoaWQsIHNjYW5jb2RlLCAwKTsKKwlpZiAodXNhZ2UpIHsKKwkJKmtleWNvZGUgPSB1c2FnZS0+Y29kZTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGhpZGlucHV0X3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsCisJCQkJaW50IGtleWNvZGUpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZTsKKwlpbnQgb2xkX2tleWNvZGU7CisJCisJaWYgKGtleWNvZGUgPCAwIHx8IGtleWNvZGUgPiBLRVlfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkKKwl1c2FnZSA9IGhpZGlucHV0X2ZpbmRfa2V5KGhpZCwgc2NhbmNvZGUsIDApOworCWlmICh1c2FnZSkgeworCQlvbGRfa2V5Y29kZSA9IHVzYWdlLT5jb2RlOworCQl1c2FnZS0+Y29kZSA9IGtleWNvZGU7CisJCQorCQljbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKKwkJc2V0X2JpdCh1c2FnZS0+Y29kZSwgZGV2LT5rZXliaXQpOworI2lmZGVmIENPTkZJR19ISURfREVCVUcKKwkJcHJpbnRrIChLRVJOX0RFQlVHICJBc3NpZ25lZCBrZXljb2RlICVkIHRvIEhJRCB1c2FnZSBjb2RlICV4XG4iLCBrZXljb2RlLCBzY2FuY29kZSk7CisjZW5kaWYKKwkJLyogU2V0IHRoZSBrZXliaXQgZm9yIHRoZSBvbGQga2V5Y29kZSBpZiB0aGUgb2xkIGtleWNvZGUgaXMgdXNlZAorCQkgKiBieSBhbm90aGVyIGtleSAqLworCQlpZiAoaGlkaW5wdXRfZmluZF9rZXkgKGhpZCwgMCwgb2xkX2tleWNvZGUpKQorCQkJc2V0X2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQkKKwkJcmV0dXJuIDA7CisJfQorCQorCXJldHVybiAtRUlOVkFMOworfQorCisKIHN0YXRpYyB2b2lkIGhpZGlucHV0X2NvbmZpZ3VyZV91c2FnZShzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCiAJCQkJICAgICBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGhpZGlucHV0LT5pbnB1dDsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlID0gaW5wdXQtPnByaXZhdGU7CisJc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKIAlpbnQgbWF4ID0gMCwgY29kZTsKIAl1bnNpZ25lZCBsb25nICpiaXQgPSBOVUxMOwogCkBAIC01NTMsNiArNjM2LDcgQEAKIAkJCQljYXNlIDB4MTAxNTogbWFwX2tleV9jbGVhcihLRVlfUkVDT1JEKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgxMDE2OiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZRVIpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDEwMTc6IG1hcF9rZXlfY2xlYXIoS0VZX0VKRUNUQ0QpOwlicmVhazsKKwkJCQljYXNlIDB4MTAxODogbWFwX2tleV9jbGVhcihLRVlfTUVESUEpOyAgICAgICAgICBicmVhazsKIAkJCQljYXNlIDB4MTAxOTogbWFwX2tleV9jbGVhcihLRVlfUFJPRzEpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDEwMWE6IG1hcF9rZXlfY2xlYXIoS0VZX1BST0cyKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgxMDFiOiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9HMyk7CQlicmVhazsKQEAgLTU2MCw5ICs2NDQsMTIgQEAKIAkJCQljYXNlIDB4MTAyMDogbWFwX2tleV9jbGVhcihLRVlfWk9PTU9VVCk7CWJyZWFrOwogCQkJCWNhc2UgMHgxMDIxOiBtYXBfa2V5X2NsZWFyKEtFWV9aT09NUkVTRVQpOwlicmVhazsKIAkJCQljYXNlIDB4MTAyMzogbWFwX2tleV9jbGVhcihLRVlfQ0xPU0UpOwkJYnJlYWs7CisJCQkJY2FzZSAweDEwMjc6IG1hcF9rZXlfY2xlYXIoS0VZX01FTlUpOyAgICAgICAgICAgYnJlYWs7CiAJCQkJLyogdGhpcyBvbmUgaXMgbWFya2VkIGFzICdSb3RhdGUnICovCiAJCQkJY2FzZSAweDEwMjg6IG1hcF9rZXlfY2xlYXIoS0VZX0FOR0xFKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgxMDI5OiBtYXBfa2V5X2NsZWFyKEtFWV9TSFVGRkxFKTsJYnJlYWs7CisJCQkJY2FzZSAweDEwMmE6IG1hcF9rZXlfY2xlYXIoS0VZX0JBQ0spOyAgICAgICAgICAgYnJlYWs7CisJCQkJY2FzZSAweDEwMmI6IG1hcF9rZXlfY2xlYXIoS0VZX0NZQ0xFV0lORE9XUyk7ICAgYnJlYWs7CiAJCQkJY2FzZSAweDEwNDE6IG1hcF9rZXlfY2xlYXIoS0VZX0JBVFRFUlkpOwlicmVhazsKIAkJCQljYXNlIDB4MTA0MjogbWFwX2tleV9jbGVhcihLRVlfV09SRFBST0NFU1NPUik7CWJyZWFrOwogCQkJCWNhc2UgMHgxMDQzOiBtYXBfa2V5X2NsZWFyKEtFWV9TUFJFQURTSEVFVCk7CWJyZWFrOwpAQCAtODU1LDEzICs5NDIsMTUgQEAKIAogc3RhdGljIGludCBoaWRpbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCiAJcmV0dXJuIGhpZC0+aGlkX29wZW4oaGlkKTsKIH0KIAogc3RhdGljIHZvaWQgaGlkaW5wdXRfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewotCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKIAloaWQtPmhpZF9jbG9zZShoaWQpOwogfQogCkBAIC05MDksMTAgKzk5OCwxMiBAQAogCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQogCi0JCQkJaW5wdXRfZGV2LT5wcml2YXRlID0gaGlkOworCQkJCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2RldiwgaGlkKTsKIAkJCQlpbnB1dF9kZXYtPmV2ZW50ID0gaGlkLT5oaWRpbnB1dF9pbnB1dF9ldmVudDsKIAkJCQlpbnB1dF9kZXYtPm9wZW4gPSBoaWRpbnB1dF9vcGVuOwogCQkJCWlucHV0X2Rldi0+Y2xvc2UgPSBoaWRpbnB1dF9jbG9zZTsKKwkJCQlpbnB1dF9kZXYtPnNldGtleWNvZGUgPSBoaWRpbnB1dF9zZXRrZXljb2RlOworCQkJCWlucHV0X2Rldi0+Z2V0a2V5Y29kZSA9IGhpZGlucHV0X2dldGtleWNvZGU7CiAKIAkJCQlpbnB1dF9kZXYtPm5hbWUgPSBoaWQtPm5hbWU7CiAJCQkJaW5wdXRfZGV2LT5waHlzID0gaGlkLT5waHlzOwpAQCAtOTIxLDcgKzEwMTIsNyBAQAogCQkJCWlucHV0X2Rldi0+aWQudmVuZG9yICA9IGhpZC0+dmVuZG9yOwogCQkJCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGhpZC0+cHJvZHVjdDsKIAkJCQlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSBoaWQtPnZlcnNpb247Ci0JCQkJaW5wdXRfZGV2LT5jZGV2LmRldiA9IGhpZC0+ZGV2OworCQkJCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9IGhpZC0+ZGV2OwogCQkJCWhpZGlucHV0LT5pbnB1dCA9IGlucHV0X2RldjsKIAkJCQlsaXN0X2FkZF90YWlsKCZoaWRpbnB1dC0+bGlzdCwgJmhpZC0+aW5wdXRzKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWcKaW5kZXggN2M4N2JkYy4uMWI0YjU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWcKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWcKQEAgLTI1LDEyICsyNSwxMiBAQAogCWRlcGVuZHMgb24gVVNCX0hJRCAmJiBJTlBVVD1uCiAKIGNvbmZpZyBVU0JfSElESU5QVVRfUE9XRVJCT09LCi0JYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIGlCb29rL1Bvd2VyQm9vayBzcGVjaWFsIGtleXMiCisJYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIGlCb29rL1Bvd2VyQm9vay9NYWNCb29rL01hY0Jvb2tQcm8gc3BlY2lhbCBrZXlzIgogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gVVNCX0hJRAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIHNwZWNpYWwga2V5cyAoRm4sIE51bWxvY2spIG9uCi0JICBBcHBsZSBpQm9va3MgYW5kIFBvd2VyQm9va3MuCisJICBBcHBsZSBpQm9va3MsIFBvd2VyQm9va3MsIE1hY0Jvb2tzIGFuZCBNYWNCb29rIFByb3MuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKaW5kZXggOTFkNjEwMy4uZDkxYjlkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCiBzdGF0aWMgaW50IHVzYl9oaWRpbnB1dF9pbnB1dF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQogewotCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGhpZF9maWVsZCAqZmllbGQ7CiAJaW50IG9mZnNldDsKIApAQCAtNjI2LDE0ICs2MjYsMTAgQEAKIHsKIAlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAotCWlmICh1c2JoaWQtPmluYnVmKQotCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCB1c2JoaWQtPmJ1ZnNpemUsIHVzYmhpZC0+aW5idWYsIHVzYmhpZC0+aW5idWZfZG1hKTsKLQlpZiAodXNiaGlkLT5vdXRidWYpCi0JCXVzYl9idWZmZXJfZnJlZShkZXYsIHVzYmhpZC0+YnVmc2l6ZSwgdXNiaGlkLT5vdXRidWYsIHVzYmhpZC0+b3V0YnVmX2RtYSk7Ci0JaWYgKHVzYmhpZC0+Y3IpCi0JCXVzYl9idWZmZXJfZnJlZShkZXYsIHNpemVvZigqKHVzYmhpZC0+Y3IpKSwgdXNiaGlkLT5jciwgdXNiaGlkLT5jcl9kbWEpOwotCWlmICh1c2JoaWQtPmN0cmxidWYpCi0JCXVzYl9idWZmZXJfZnJlZShkZXYsIHVzYmhpZC0+YnVmc2l6ZSwgdXNiaGlkLT5jdHJsYnVmLCB1c2JoaWQtPmN0cmxidWZfZG1hKTsKKwl1c2JfYnVmZmVyX2ZyZWUoZGV2LCB1c2JoaWQtPmJ1ZnNpemUsIHVzYmhpZC0+aW5idWYsIHVzYmhpZC0+aW5idWZfZG1hKTsKKwl1c2JfYnVmZmVyX2ZyZWUoZGV2LCB1c2JoaWQtPmJ1ZnNpemUsIHVzYmhpZC0+b3V0YnVmLCB1c2JoaWQtPm91dGJ1Zl9kbWEpOworCXVzYl9idWZmZXJfZnJlZShkZXYsIHNpemVvZigqKHVzYmhpZC0+Y3IpKSwgdXNiaGlkLT5jciwgdXNiaGlkLT5jcl9kbWEpOworCXVzYl9idWZmZXJfZnJlZShkZXYsIHVzYmhpZC0+YnVmc2l6ZSwgdXNiaGlkLT5jdHJsYnVmLCB1c2JoaWQtPmN0cmxidWZfZG1hKTsKIH0KIAogLyoKQEAgLTY5Miw2ICs2ODgsMzAgQEAKIAl9CiB9CiAKKy8qCisgKiBTb21lIFVTQiBiYXJjb2RlIHJlYWRlcnMgZnJvbSBjeXByZXNzIGhhdmUgdXNhZ2UgbWluIGFuZCB1c2FnZSBtYXggaW4KKyAqIHRoZSB3cm9uZyBvcmRlcgorICovCitzdGF0aWMgdm9pZCBoaWRfZml4dXBfY3lwcmVzc19kZXNjcmlwdG9yKHVuc2lnbmVkIGNoYXIgKnJkZXNjLCBpbnQgcnNpemUpCit7CisJc2hvcnQgZml4ZWQgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHJzaXplIC0gNDsgaSsrKSB7CisJCWlmIChyZGVzY1tpXSA9PSAweDI5ICYmIHJkZXNjIFtpKzJdID09IDB4MTkpIHsKKwkJCXVuc2lnbmVkIGNoYXIgdG1wOworCisJCQlyZGVzY1tpXSA9IDB4MTk7IHJkZXNjW2krMl0gPSAweDI5OworCQkJdG1wID0gcmRlc2NbaSszXTsKKwkJCXJkZXNjW2krM10gPSByZGVzY1tpKzFdOworCQkJcmRlc2NbaSsxXSA9IHRtcDsKKwkJfQorCX0KKworCWlmIChmaXhlZCkKKwkJaW5mbygiRml4aW5nIHVwIEN5cHJlc3MgcmVwb3J0IGRlc2NyaXB0b3IiKTsKK30KKwogc3RhdGljIHN0cnVjdCBoaWRfZGV2aWNlICp1c2JfaGlkX2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKQEAgLTc1OCw2ICs3NzgsOSBAQAogCWlmIChxdWlya3MgJiBISURfUVVJUktfTE9HSVRFQ0hfREVTQ1JJUFRPUikKIAkJaGlkX2ZpeHVwX2xvZ2l0ZWNoX2Rlc2NyaXB0b3IocmRlc2MsIHJzaXplKTsKIAorCWlmIChxdWlya3MgJiBISURfUVVJUktfU1dBUFBFRF9NSU5fTUFYKQorCQloaWRfZml4dXBfY3lwcmVzc19kZXNjcmlwdG9yKHJkZXNjLCByc2l6ZSk7CisKICNpZmRlZiBDT05GSUdfSElEX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogcmVwb3J0IGRlc2NyaXB0b3IgKHNpemUgJXUsIHJlYWQgJWQpID0gIiwgcnNpemUsIG4pOwogCWZvciAobiA9IDA7IG4gPCByc2l6ZTsgbisrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1sZ2ZmLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWxnZmYuYwppbmRleCA5MmQyNTUzLi5jNWNkNDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWxnZmYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWxnZmYuYwpAQCAtNjAsNyArNjAsNyBAQAogCiBzdGF0aWMgaW50IGhpZF9sZ2ZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCiB7Ci0Jc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9ICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOwogCWludCB4LCB5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1wbGZmLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXBsZmYuYwppbmRleCA3NmQyZTZlLi5kNmE4ZjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXBsZmYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXBsZmYuYwpAQCAtMzcsNyArMzcsNyBAQAogc3RhdGljIGludCBoaWRfcGxmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCiB7Ci0Jc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgcGxmZl9kZXZpY2UgKnBsZmYgPSBkYXRhOwogCWludCBsZWZ0LCByaWdodDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKaW5kZXggMTdhODc1NS4uZjZjNDE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCkBAIC05Miw2ICs5Miw4IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19NT1VTRQkweDAwMDEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9DWVBSRVNTX0hJRENPTQkweDU1MDAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9DWVBSRVNTX1VMVFJBTU9VU0UJMHg3NDE3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzEJMHhkZTYxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzIJMHhkZTY0CiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9ERUxMCQkweDQxM2MKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9ERUxMX1c3NjU4CTB4MjAwNQpAQCAtMTkzLDYgKzE5NSw3IEBACiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSAkJMHgwNDZkCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIJMHhjMTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0hFRUwJMHhjMjk0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUzUxMF9SRUNFSVZFUgkweGM1MGMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIJMHhjNTE3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSCTB4YzUxMwpAQCAtNDIyLDYgKzQyNSw3IEBACiAJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl8yUE9SVEtWTSwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTSwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTUMsIEhJRF9RVUlSS19OT0dFVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSEVFTCwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1NVTiwgVVNCX0RFVklDRV9JRF9SQVJJVEFOX0tWTV9ET05HTEUsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9UVVJCT1gsIFVTQl9ERVZJQ0VfSURfVFVSQk9YX0tFWUJPQVJELCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEX0RVQUxfVVNCX0pPWVBBRCwgSElEX1FVSVJLX05PR0VUIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCkBAIC00NDUsNiArNDQ5LDkgQEAKIAogCXsgVVNCX1ZFTkRPUl9JRF9ERUxMLCBVU0JfREVWSUNFX0lEX0RFTExfVzc2NTgsIEhJRF9RVUlSS19SRVNFVF9MRURTIH0sCiAKKwl7IFVTQl9WRU5ET1JfSURfQ1lQUkVTUywgVVNCX0RFVklDRV9JRF9DWVBSRVNTX0JBUkNPREVfMSwgSElEX1FVSVJLX1NXQVBQRURfTUlOX01BWCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8yLCBISURfUVVJUktfU1dBUFBFRF9NSU5fTUFYIH0sCisKIAl7IDAsIDAgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC10bWZmLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXRtZmYuYwppbmRleCBhYjY3MzMxLi5hYjViYTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXRtZmYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXRtZmYuYwpAQCAtNTksNyArNTksNyBAQAogCiBzdGF0aWMgaW50IGhpZF90bWZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCiB7Ci0Jc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdG1mZl9kZXZpY2UgKnRtZmYgPSBkYXRhOwogCWludCBsZWZ0LCByaWdodDsJLyogUnVtYmxpbmcgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC16cGZmLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXpwZmYuYwppbmRleCA3YmQ4MjM4Li5hN2ZiZmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXpwZmYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXpwZmYuYwpAQCAtMzcsNyArMzcsNyBAQAogc3RhdGljIGludCBoaWRfenBmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCiB7Ci0Jc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgenBmZl9kZXZpY2UgKnpwZmYgPSBkYXRhOwogCWludCBsZWZ0LCByaWdodDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCmluZGV4IGE4YjNkNjYuLjQ4OGQ2MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKQEAgLTUxLDYgKzUxLDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXNwaW5sb2NrX3QgbGlzdF9sb2NrOwogfTsKIAogc3RydWN0IGhpZGRldl9saXN0IHsKQEAgLTE2MSw3ICsxNjIsOSBAQAogewogCXN0cnVjdCBoaWRkZXYgKmhpZGRldiA9IGhpZC0+aGlkZGV2OwogCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhpZGRldi0+bGlzdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsaXN0LCAmaGlkZGV2LT5saXN0LCBub2RlKSB7CiAJCWlmICh1cmVmLT5maWVsZF9pbmRleCAhPSBISURfRklFTERfSU5ERVhfTk9ORSB8fAogCQkgICAgKGxpc3QtPmZsYWdzICYgSElEREVWX0ZMQUdfUkVQT1JUKSAhPSAwKSB7CkBAIC0xNzEsNiArMTc0LDcgQEAKIAkJCWtpbGxfZmFzeW5jKCZsaXN0LT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAkJfQogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWRkZXYtPmxpc3RfbG9jaywgZmxhZ3MpOwogCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZoaWRkZXYtPndhaXQpOwogfQpAQCAtMjM1LDkgKzIzOSwxMyBAQAogc3RhdGljIGludCBoaWRkZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogewogCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaGlkZGV2X2Zhc3luYygtMSwgZmlsZSwgMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGlzdC0+aGlkZGV2LT5saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmbGlzdC0+bm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+aGlkZGV2LT5saXN0X2xvY2ssIGZsYWdzKTsKIAogCWlmICghLS1saXN0LT5oaWRkZXYtPm9wZW4pIHsKIAkJaWYgKGxpc3QtPmhpZGRldi0+ZXhpc3QpCkBAIC0yNTcsNiArMjY1LDcgQEAKIHN0YXRpYyBpbnQgaGlkZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpbnQgaSA9IGltaW5vcihpbm9kZSkgLSBISURERVZfTUlOT1JfQkFTRTsKIApAQCAtMjY3LDcgKzI3NiwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWxpc3QtPmhpZGRldiA9IGhpZGRldl90YWJsZVtpXTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaXN0LT5oaWRkZXYtPmxpc3RfbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJmxpc3QtPm5vZGUsICZoaWRkZXZfdGFibGVbaV0tPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmhpZGRldi0+bGlzdF9sb2NrLCBmbGFncyk7CisKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBsaXN0OwogCiAJaWYgKCFsaXN0LT5oaWRkZXYtPm9wZW4rKykKQEAgLTc3Myw2ICs3ODYsNyBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaGlkZGV2LT53YWl0KTsKIAlJTklUX0xJU1RfSEVBRCgmaGlkZGV2LT5saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmaGlkZGV2LT5saXN0X2xvY2spOwogCWhpZGRldi0+aGlkID0gaGlkOwogCWhpZGRldi0+ZXhpc3QgPSAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvdXNia2JkLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvdXNia2JkLmMKaW5kZXggNjVhYTEyZS4uMTMwOTc4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmtiZC5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JrYmQuYwpAQCAtMTMzLDEyICsxMzMsMTEgQEAKIHN0YXRpYyBpbnQgdXNiX2tiZF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLAogCQkJIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7Ci0Jc3RydWN0IHVzYl9rYmQgKmtiZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdXNiX2tiZCAqa2JkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICh0eXBlICE9IEVWX0xFRCkKIAkJcmV0dXJuIC0xOwogCi0KIAlrYmQtPm5ld2xlZHMgPSAoISF0ZXN0X2JpdChMRURfS0FOQSwgICAgZGV2LT5sZWQpIDw8IDMpIHwgKCEhdGVzdF9iaXQoTEVEX0NPTVBPU0UsIGRldi0+bGVkKSA8PCAzKSB8CiAJCSAgICAgICAoISF0ZXN0X2JpdChMRURfU0NST0xMTCwgZGV2LT5sZWQpIDw8IDIpIHwgKCEhdGVzdF9iaXQoTEVEX0NBUFNMLCAgIGRldi0+bGVkKSA8PCAxKSB8CiAJCSAgICAgICAoISF0ZXN0X2JpdChMRURfTlVNTCwgICAgZGV2LT5sZWQpKTsKQEAgLTE3NSw3ICsxNzQsNyBAQAogCiBzdGF0aWMgaW50IHVzYl9rYmRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9rYmQgKmtiZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdXNiX2tiZCAqa2JkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWtiZC0+aXJxLT5kZXYgPSBrYmQtPnVzYmRldjsKIAlpZiAodXNiX3N1Ym1pdF91cmIoa2JkLT5pcnEsIEdGUF9LRVJORUwpKQpAQCAtMTg2LDcgKzE4NSw3IEBACiAKIHN0YXRpYyB2b2lkIHVzYl9rYmRfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewotCXN0cnVjdCB1c2Jfa2JkICprYmQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IHVzYl9rYmQgKmtiZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAKIAl1c2Jfa2lsbF91cmIoa2JkLT5pcnEpOwogfQpAQCAtMjExLDEyICsyMTAsOSBAQAogewogCXVzYl9mcmVlX3VyYihrYmQtPmlycSk7CiAJdXNiX2ZyZWVfdXJiKGtiZC0+bGVkKTsKLQlpZiAoa2JkLT5uZXcpCi0JCXVzYl9idWZmZXJfZnJlZShkZXYsIDgsIGtiZC0+bmV3LCBrYmQtPm5ld19kbWEpOwotCWlmIChrYmQtPmNyKQotCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIGtiZC0+Y3IsIGtiZC0+Y3JfZG1hKTsKLQlpZiAoa2JkLT5sZWRzKQotCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCAxLCBrYmQtPmxlZHMsIGtiZC0+bGVkc19kbWEpOworCXVzYl9idWZmZXJfZnJlZShkZXYsIDgsIGtiZC0+bmV3LCBrYmQtPm5ld19kbWEpOworCXVzYl9idWZmZXJfZnJlZShkZXYsIHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwga2JkLT5jciwga2JkLT5jcl9kbWEpOworCXVzYl9idWZmZXJfZnJlZShkZXYsIDEsIGtiZC0+bGVkcywga2JkLT5sZWRzX2RtYSk7CiB9CiAKIHN0YXRpYyBpbnQgdXNiX2tiZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCkBAIC0yNzQsOCArMjcwLDkgQEAKIAlpbnB1dF9kZXYtPm5hbWUgPSBrYmQtPm5hbWU7CiAJaW5wdXRfZGV2LT5waHlzID0ga2JkLT5waHlzOwogCXVzYl90b19pbnB1dF9pZChkZXYsICZpbnB1dF9kZXYtPmlkKTsKLQlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gJmlmYWNlLT5kZXY7Ci0JaW5wdXRfZGV2LT5wcml2YXRlID0ga2JkOworCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZpZmFjZS0+ZGV2OworCisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBrYmQpOwogCiAJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0xFRCkgfCBCSVQoRVZfUkVQKTsKIAlpbnB1dF9kZXYtPmxlZGJpdFswXSA9IEJJVChMRURfTlVNTCkgfCBCSVQoTEVEX0NBUFNMKSB8IEJJVChMRURfU0NST0xMTCkgfCBCSVQoTEVEX0NPTVBPU0UpIHwgQklUKExFRF9LQU5BKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2Jtb3VzZS5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKaW5kZXggNTczNzc2ZC4uNTM0NWM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAogc3RhdGljIGludCB1c2JfbW91c2Vfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9tb3VzZSAqbW91c2UgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IHVzYl9tb3VzZSAqbW91c2UgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJbW91c2UtPmlycS0+ZGV2ID0gbW91c2UtPnVzYmRldjsKIAlpZiAodXNiX3N1Ym1pdF91cmIobW91c2UtPmlycSwgR0ZQX0tFUk5FTCkpCkBAIC0xMDcsNyArMTA3LDcgQEAKIAogc3RhdGljIHZvaWQgdXNiX21vdXNlX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX21vdXNlICptb3VzZSA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdXNiX21vdXNlICptb3VzZSA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAKIAl1c2Jfa2lsbF91cmIobW91c2UtPmlycSk7CiB9CkBAIC0xNzEsNyArMTcxLDcgQEAKIAlpbnB1dF9kZXYtPm5hbWUgPSBtb3VzZS0+bmFtZTsKIAlpbnB1dF9kZXYtPnBoeXMgPSBtb3VzZS0+cGh5czsKIAl1c2JfdG9faW5wdXRfaWQoZGV2LCAmaW5wdXRfZGV2LT5pZCk7Ci0JaW5wdXRfZGV2LT5jZGV2LmRldiA9ICZpbnRmLT5kZXY7CisJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmludGYtPmRldjsKIAogCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpOwogCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX01PVVNFKV0gPSBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9SSUdIVCkgfCBCSVQoQlROX01JRERMRSk7CkBAIC0xNzksNyArMTc5LDggQEAKIAlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9NT1VTRSldIHw9IEJJVChCVE5fU0lERSkgfCBCSVQoQlROX0VYVFJBKTsKIAlpbnB1dF9kZXYtPnJlbGJpdFswXSB8PSBCSVQoUkVMX1dIRUVMKTsKIAotCWlucHV0X2Rldi0+cHJpdmF0ZSA9IG1vdXNlOworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2RldiwgbW91c2UpOworCiAJaW5wdXRfZGV2LT5vcGVuID0gdXNiX21vdXNlX29wZW47CiAJaW5wdXRfZGV2LT5jbG9zZSA9IHVzYl9tb3VzZV9jbG9zZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IDZkMTA1YTEuLjEzZWVhNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTIsMTAgKzIsOSBAQAogIyBIYXJkd2FyZSBtb25pdG9yaW5nIGNoaXAgZHJpdmVycyBjb25maWd1cmF0aW9uCiAjCiAKLW1lbnUgIkhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydCIKLQotY29uZmlnIEhXTU9OCittZW51Y29uZmlnIEhXTU9OCiAJdHJpc3RhdGUgIkhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhBU19JT01FTQogCWRlZmF1bHQgeQogCWhlbHAKIAkgIEhhcmR3YXJlIG1vbml0b3JpbmcgZGV2aWNlcyBsZXQgeW91IG1vbml0b3IgdGhlIGhhcmR3YXJlIGhlYWx0aApAQCAtMjMsMTMgKzIyLDE1IEBACiAJICBUaGlzIHN1cHBvcnQgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaHdtb24uCiAKK2lmIEhXTU9OCisKIGNvbmZpZyBIV01PTl9WSUQKIAl0cmlzdGF0ZQogCWRlZmF1bHQgbgogCiBjb25maWcgU0VOU09SU19BQklUVUdVUlUKIAl0cmlzdGF0ZSAiQWJpdCB1R3VydSIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBBYml0IHVHdXJ1IGNoaXBzCiAJICBzZW5zb3IgcGFydC4gVGhlIHZvbHRhZ2UgYW5kIGZyZXF1ZW5jeSBjb250cm9sIHBhcnRzIG9mIHRoZSBBYml0CkBAIC0zOSw5ICs0MCwxOSBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYWJpdHVndXJ1LgogCitjb25maWcgU0VOU09SU19BRDc0MTgKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQUQ3NDE2LCBBRDc0MTcgYW5kIEFENzQxOCIKKwlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzCisJICBBRDc0MTYsIEFENzQxNyBhbmQgQUQ3NDE4IHRlbXBlcmF0dXJlIG1vbml0b3JpbmcgY2hpcHMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgYWQ3NDE4LgorCiBjb25maWcgU0VOU09SU19BRE0xMDIxCiAJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFETTEwMjEgYW5kIGNvbXBhdGlibGVzIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgQURNMTAyMQogCSAgYW5kIEFETTEwMjMgc2Vuc29yIGNoaXBzIGFuZCBjbG9uZXM6IE1heGltIE1BWDE2MTcgYW5kIE1BWDE2MTdBLApAQCAtNTMsNyArNjQsNyBAQAogCiBjb25maWcgU0VOU09SU19BRE0xMDI1CiAJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFETTEwMjUgYW5kIGNvbXBhdGlibGVzIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAlzZWxlY3QgSFdNT05fVklECiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEFETTEwMjUKQEAgLTY0LDcgKzc1LDcgQEAKIAogY29uZmlnIFNFTlNPUlNfQURNMTAyNgogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRE0xMDI2IGFuZCBjb21wYXRpYmxlcyIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgSFdNT05fVklECiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEFETTEwMjYKQEAgLTc1LDcgKzg2LDcgQEAKIAogY29uZmlnIFNFTlNPUlNfQURNMTAyOQogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRE0xMDI5IgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSTJDICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBBRE0xMDI5CiAJICBzZW5zb3IgY2hpcC4KQEAgLTg2LDcgKzk3LDcgQEAKIAogY29uZmlnIFNFTlNPUlNfQURNMTAzMQogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRE0xMDMxIGFuZCBjb21wYXRpYmxlcyIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgQURNMTAzMQogCSAgYW5kIEFETTEwMzAgc2Vuc29yIGNoaXBzLgpAQCAtOTYsNyArMTA3LDcgQEAKIAogY29uZmlnIFNFTlNPUlNfQURNOTI0MAogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRE05MjQwIGFuZCBjb21wYXRpYmxlcyIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgSFdNT05fVklECiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEFETTkyNDAsCkBAIC0xMDcsNyArMTE4LDcgQEAKIAogY29uZmlnIFNFTlNPUlNfSzhURU1QCiAJdHJpc3RhdGUgIkFNRCBBdGhsb242NC9GWCBvciBPcHRlcm9uIHRlbXBlcmF0dXJlIHNlbnNvciIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIFg4NiAmJiBQQ0kgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBYODYgJiYgUENJICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgdGVtcGVyYXR1cmUKIAkgIHNlbnNvcihzKSBpbnNpZGUgeW91ciBDUFUuIFN1cHBvcnRlZCBpcyB3aG9sZSBBTUQgSzgKQEAgLTExOSw3ICsxMzAsNyBAQAogCiBjb25maWcgU0VOU09SU19BTVMKIAl0cmlzdGF0ZSAiQXBwbGUgTW90aW9uIFNlbnNvciBkcml2ZXIiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBQUENfUE1BQyAmJiAhUFBDNjQgJiYgSU5QVVQgJiYgKChBREJfUE1VICYmIEkyQyA9IHkpIHx8IChBREJfUE1VICYmICFJMkMpIHx8IEkyQykgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBQUENfUE1BQyAmJiAhUFBDNjQgJiYgSU5QVVQgJiYgKChBREJfUE1VICYmIEkyQyA9IHkpIHx8IChBREJfUE1VICYmICFJMkMpIHx8IEkyQykgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdGhlIG1vdGlvbiBzZW5zb3IgaW5jbHVkZWQgaW4gUG93ZXJCb29rcy4gSW5jbHVkZXMKIAkgIGltcGxlbWVudGF0aW9ucyBmb3IgUE1VIGFuZCBJMkMuCkBAIC0xNDQsNyArMTU1LDcgQEAKIAogY29uZmlnIFNFTlNPUlNfQVNCMTAwCiAJdHJpc3RhdGUgIkFzdXMgQVNCMTAwIEJhY2giCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEhXTU9OX1ZJRAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgQVNCMTAwIEJhY2ggc2Vuc29yCkBAIC0xNTUsNyArMTY2LDcgQEAKIAogY29uZmlnIFNFTlNPUlNfQVRYUDEKIAl0cmlzdGF0ZSAiQXR0YW5zaWMgQVRYUDEgVklEIGNvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEhXTU9OX1ZJRAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgQXR0YW5zaWMgQVRYUDEgVklECkBAIC0xNjksNyArMTgwLDcgQEAKIAogY29uZmlnIFNFTlNPUlNfRFMxNjIxCiAJdHJpc3RhdGUgIkRhbGxhcyBTZW1pY29uZHVjdG9yIERTMTYyMSBhbmQgRFMxNjI1IgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgRGFsbGFzIFNlbWljb25kdWN0b3IKIAkgIERTMTYyMSBhbmQgRFMxNjI1IHNlbnNvciBjaGlwcy4KQEAgLTE3OSw3ICsxOTAsNyBAQAogCiBjb25maWcgU0VOU09SU19GNzE4MDVGCiAJdHJpc3RhdGUgIkZpbnRlayBGNzE4MDVGL0ZHIGFuZCBGNzE4NzJGL0ZHIgotCWRlcGVuZHMgb24gSFdNT04gJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgaGFyZHdhcmUgbW9uaXRvcmluZwogCSAgZmVhdHVyZXMgb2YgdGhlIEZpbnRlayBGNzE4MDVGL0ZHIGFuZCBGNzE4NzJGL0ZHIFN1cGVyLUkvTwpAQCAtMTkwLDcgKzIwMSw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX0ZTQ0hFUgogCXRyaXN0YXRlICJGU0MgSGVybWVzIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgRnVqaXRzdSBTaWVtZW5zCiAJICBDb21wdXRlcnMgSGVybWVzIHNlbnNvciBjaGlwcy4KQEAgLTIwMCw3ICsyMTEsNyBAQAogCiBjb25maWcgU0VOU09SU19GU0NQT1MKIAl0cmlzdGF0ZSAiRlNDIFBvc2VpZG9uIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgRnVqaXRzdSBTaWVtZW5zCiAJICBDb21wdXRlcnMgUG9zZWlkb24gc2Vuc29yIGNoaXBzLgpAQCAtMjEwLDcgKzIyMSw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX0dMNTE4U00KIAl0cmlzdGF0ZSAiR2VuZXN5cyBMb2dpYyBHTDUxOFNNIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgR2VuZXN5cyBMb2dpYyBHTDUxOFNNCiAJICBzZW5zb3IgY2hpcHMuCkBAIC0yMjAsNyArMjMxLDcgQEAKIAogY29uZmlnIFNFTlNPUlNfR0w1MjBTTQogCXRyaXN0YXRlICJHZW5lc3lzIExvZ2ljIEdMNTIwU00iCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMKKwlkZXBlbmRzIG9uIEkyQwogCXNlbGVjdCBIV01PTl9WSUQKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgR2VuZXN5cyBMb2dpYyBHTDUyMFNNCkBAIC0yMjksOSArMjQwLDE3IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBnbDUyMHNtLgogCitjb25maWcgU0VOU09SU19DT1JFVEVNUAorCXRyaXN0YXRlICJJbnRlbCBDb3JlICgyKSBEdW8vU29sbyB0ZW1wZXJhdHVyZSBzZW5zb3IiCisJZGVwZW5kcyBvbiBYODYgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSB0ZW1wZXJhdHVyZQorCSAgc2Vuc29yIGluc2lkZSB5b3VyIENQVS4gU3VwcG9ydGVkIGFsbCBhcmUgYWxsIGtub3duIHZhcmlhbnRzCisJICBvZiBJbnRlbCBDb3JlIGZhbWlseS4KKwogY29uZmlnIFNFTlNPUlNfSVQ4NwogCXRyaXN0YXRlICJJVEUgSVQ4N3h4IGFuZCBjb21wYXRpYmxlcyIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQworCWRlcGVuZHMgb24gSTJDCiAJc2VsZWN0IEkyQ19JU0EKIAlzZWxlY3QgSFdNT05fVklECiAJaGVscApAQCAtMjQzLDcgKzI2Miw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX0xNNjMKIAl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTYzIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIE5hdGlvbmFsIFNlbWljb25kdWN0b3IKIAkgIExNNjMgcmVtb3RlIGRpb2RlIGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29yIHdpdGggaW50ZWdyYXRlZCBmYW4KQEAgLTI1NSw3ICsyNzQsNyBAQAogCiBjb25maWcgU0VOU09SU19MTTcwCiAJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE03MCIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIFNQSV9NQVNURVIgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvcgogCSAgTE03MCBkaWdpdGFsIHRlbXBlcmF0dXJlIHNlbnNvciBjaGlwLgpAQCAtMjY1LDcgKzI4NCw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX0xNNzUKIAl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTc1IGFuZCBjb21wYXRpYmxlcyIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQworCWRlcGVuZHMgb24gSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE03NQogCSAgc2Vuc29yIGNoaXBzIGFuZCBjbG9uZXM6IERhbGxhcyBTZW1pY29uZHVjdG9yIERTNzUgYW5kIERTMTc3NSAoaW4KQEAgLTI4MCw3ICsyOTksNyBAQAogCiBjb25maWcgU0VOU09SU19MTTc3CiAJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE03NyIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQworCWRlcGVuZHMgb24gSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE03NwogCSAgc2Vuc29yIGNoaXBzLgpAQCAtMjkwLDggKzMwOSw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX0xNNzgKIAl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTc4IGFuZCBjb21wYXRpYmxlcyIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQwotCXNlbGVjdCBJMkNfSVNBCisJZGVwZW5kcyBvbiBJMkMKIAlzZWxlY3QgSFdNT05fVklECiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE03OCwKQEAgLTMwMiw3ICszMjAsNyBAQAogCiBjb25maWcgU0VOU09SU19MTTgwCiAJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE04MCIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvcgogCSAgTE04MCBzZW5zb3IgY2hpcHMuCkBAIC0zMTIsNyArMzMwLDcgQEAKIAogY29uZmlnIFNFTlNPUlNfTE04MwogCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODMgYW5kIGNvbXBhdGlibGVzIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvcgogCSAgTE04MiBhbmQgTE04MyBzZW5zb3IgY2hpcHMuCkBAIC0zMjIsNyArMzQwLDcgQEAKIAogY29uZmlnIFNFTlNPUlNfTE04NQogCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODUgYW5kIGNvbXBhdGlibGVzIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSTJDICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBIV01PTl9WSUQKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTg1CkBAIC0zMzMsNyArMzUxLDcgQEAKIAogY29uZmlnIFNFTlNPUlNfTE04NwogCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODciCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMKKwlkZXBlbmRzIG9uIEkyQwogCXNlbGVjdCBIV01PTl9WSUQKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTg3CkBAIC0zNDQsNyArMzYyLDcgQEAKIAogY29uZmlnIFNFTlNPUlNfTE05MAogCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTAgYW5kIGNvbXBhdGlibGVzIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTkwLAogCSAgTE04NiwgTE04OSBhbmQgTE05OSwgQW5hbG9nIERldmljZXMgQURNMTAzMiBhbmQgTWF4aW0gTUFYNjY1NyBhbmQKQEAgLTM1OCw3ICszNzYsNyBAQAogCiBjb25maWcgU0VOU09SU19MTTkyCiAJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05MiBhbmQgY29tcGF0aWJsZXMiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMKKwlkZXBlbmRzIG9uIEkyQwogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTIKIAkgIGFuZCBNYXhpbSBNQVg2NjM1IHNlbnNvciBjaGlwcy4KQEAgLTM2OCwxNiArMzg2LDI2IEBACiAKIGNvbmZpZyBTRU5TT1JTX01BWDE2MTkKIAl0cmlzdGF0ZSAiTWF4aW0gTUFYMTYxOSBzZW5zb3IgY2hpcCIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQworCWRlcGVuZHMgb24gSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE1BWDE2MTkgc2Vuc29yIGNoaXAuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIG1heDE2MTkuCiAKK2NvbmZpZyBTRU5TT1JTX01BWDY2NTAKKwl0cmlzdGF0ZSAiTWF4aW0gTUFYNjY1MCBzZW5zb3IgY2hpcCIKKwlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIE1BWDY2NTAgLyBNQVg2NjUxCisJICBzZW5zb3IgY2hpcHMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIG1heDY2NTAuCisKIGNvbmZpZyBTRU5TT1JTX1BDODczNjAKIAl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQQzg3MzYwIGZhbWlseSIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgSTJDX0lTQQogCXNlbGVjdCBIV01PTl9WSUQKIAloZWxwCkBAIC0zOTIsNyArNDIwLDcgQEAKIAogY29uZmlnIFNFTlNPUlNfUEM4NzQyNwogCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODc0MjciCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIG1vbml0b3JpbmcKIAkgIGZ1bmN0aW9ucyBvZiB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQQzg3NDI3IFN1cGVyLUkvTyBjaGlwLgpAQCAtNDA1LDcgKzQzMyw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX1NJUzU1OTUKIAl0cmlzdGF0ZSAiU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgQ29ycC4gU2lTNTU5NSIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBQQ0kgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBJMkMgJiYgUENJICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBJMkNfSVNBCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBpbnRlZ3JhdGVkIHNlbnNvcnMgaW4KQEAgLTQxNiwyOCArNDQ0LDI4IEBACiAKIGNvbmZpZyBTRU5TT1JTX1NNU0M0N00xCiAJdHJpc3RhdGUgIlNNU0MgTFBDNDdNMTB4IGFuZCBjb21wYXRpYmxlcyIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQwotCXNlbGVjdCBJMkNfSVNBCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBpbnRlZ3JhdGVkIGZhbgogCSAgbW9uaXRvcmluZyBhbmQgY29udHJvbCBjYXBhYmlsaXRpZXMgb2YgdGhlIFNNU0MgTFBDNDdCMjd4LAogCSAgTFBDNDdNMTB4LCBMUEM0N00xMTIsIExQQzQ3TTEzeCwgTFBDNDdNMTR4LCBMUEM0N00xNXgsCi0JICBMUEM0N00xOTIgYW5kIExQQzQ3TTk5NyBjaGlwcy4KKwkgIExQQzQ3TTE5MiwgTFBDNDdNMjkyIGFuZCBMUEM0N005OTcgY2hpcHMuCiAKLQkgIFRoZSB0ZW1wZXJhdHVyZSBhbmQgdm9sdGFnZSBzZW5zb3IgZmVhdHVyZXMgb2YgdGhlIExQQzQ3TTE5MgotCSAgYW5kIExQQzQ3TTk5NyBhcmUgc3VwcG9ydGVkIGJ5IGFub3RoZXIgZHJpdmVyLCBzZWxlY3QgYWxzbwotCSAgIlNNU0MgTFBDNDdNMTkyIGFuZCBjb21wYXRpYmxlcyIgYmVsb3cgZm9yIHRob3NlLgorCSAgVGhlIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlIHNlbnNvciBmZWF0dXJlcyBvZiB0aGUgTFBDNDdNMTV4LAorCSAgTFBDNDdNMTkyLCBMUEM0N00yOTIgYW5kIExQQzQ3TTk5NyBhcmUgc3VwcG9ydGVkIGJ5IGFub3RoZXIKKwkgIGRyaXZlciwgc2VsZWN0IGFsc28gIlNNU0MgTFBDNDdNMTkyIGFuZCBjb21wYXRpYmxlcyIgYmVsb3cgZm9yCisJICB0aG9zZS4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc21zYzQ3bTEuCiAKIGNvbmZpZyBTRU5TT1JTX1NNU0M0N00xOTIKIAl0cmlzdGF0ZSAiU01TQyBMUEM0N00xOTIgYW5kIGNvbXBhdGlibGVzIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSTJDICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBIV01PTl9WSUQKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIHRlbXBlcmF0dXJlIGFuZAotCSAgdm9sdGFnZSBzZW5zb3JzIG9mIHRoZSBTTVNDIExQQzQ3TTE5MiBhbmQgTFBDNDdNOTk3IGNoaXBzLgorCSAgdm9sdGFnZSBzZW5zb3JzIG9mIHRoZSBTTVNDIExQQzQ3TTE5MiwgTFBDNDdNMTV4LCBMUEM0N00yOTIKKwkgIGFuZCBMUEM0N005OTcgY2hpcHMuCiAKIAkgIFRoZSBmYW4gbW9uaXRvcmluZyBhbmQgY29udHJvbCBjYXBhYmlsaXRpZXMgb2YgdGhlc2UgY2hpcHMKIAkgIGFyZSBzdXBwb3J0ZWQgYnkgYW5vdGhlciBkcml2ZXIsIHNlbGVjdApAQCAtNDQ5LDggKzQ3Nyw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX1NNU0M0N0IzOTcKIAl0cmlzdGF0ZSAiU01TQyBMUEM0N0IzOTctTkMiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IEkyQ19JU0EKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgU01TQyBMUEM0N0IzOTctTkMKIAkgIHNlbnNvciBjaGlwLgpAQCAtNDYwLDcgKzQ4Nyw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX1ZJQTY4NkEKIAl0cmlzdGF0ZSAiVklBNjg2QSIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBQQ0kKKwlkZXBlbmRzIG9uIEkyQyAmJiBQQ0kKIAlzZWxlY3QgSTJDX0lTQQogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgaW50ZWdyYXRlZCBzZW5zb3JzIGluCkBAIC00NzEsNyArNDk4LDcgQEAKIAogY29uZmlnIFNFTlNPUlNfVlQxMjExCiAJdHJpc3RhdGUgIlZJQSBWVDEyMTEiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBIV01PTl9WSUQKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHRoZW4geW91IGdldCBzdXBwb3J0IGZvciBoYXJkd2FyZSBtb25pdG9yaW5nCkBAIC00ODIsNyArNTA5LDcgQEAKIAogY29uZmlnIFNFTlNPUlNfVlQ4MjMxCiAJdHJpc3RhdGUgIlZJQSBWVDgyMzEiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgUENJICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSTJDICYmIFBDSSAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgSFdNT05fVklECiAJc2VsZWN0IEkyQ19JU0EKIAloZWxwCkBAIC00OTQsOCArNTIxLDcgQEAKIAogY29uZmlnIFNFTlNPUlNfVzgzNzgxRAogCXRyaXN0YXRlICJXaW5ib25kIFc4Mzc4MUQsIFc4Mzc4MkQsIFc4Mzc4M1MsIFc4MzYyN0hGLCBBc3VzIEFTOTkxMjdGIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCi0Jc2VsZWN0IEkyQ19JU0EKKwlkZXBlbmRzIG9uIEkyQwogCXNlbGVjdCBIV01PTl9WSUQKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFdpbmJvbmQgVzgzNzh4IHNlcmllcwpAQCAtNTA3LDcgKzUzMyw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX1c4Mzc5MUQKIAl0cmlzdGF0ZSAiV2luYm9uZCBXODM3OTFEIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSTJDICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBIV01PTl9WSUQKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFdpbmJvbmQgVzgzNzkxRCBjaGlwLgpAQCAtNTE3LDcgKzU0Myw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX1c4Mzc5MkQKIAl0cmlzdGF0ZSAiV2luYm9uZCBXODM3OTJEIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSTJDICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgV2luYm9uZCBXODM3OTJEIGNoaXAuCiAKQEAgLTUyNiw3ICs1NTIsNyBAQAogCiBjb25maWcgU0VOU09SU19XODM3OTMKIAl0cmlzdGF0ZSAiV2luYm9uZCBXODM3OTMiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEhXTU9OX1ZJRAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgV2luYm9uZCBXODM3OTMKQEAgLTUzNyw3ICs1NjMsNyBAQAogCiBjb25maWcgU0VOU09SU19XODNMNzg1VFMKIAl0cmlzdGF0ZSAiV2luYm9uZCBXODNMNzg1VFMtUyIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFdpbmJvbmQgVzgzTDc4NVRTLVMKIAkgIHNlbnNvciBjaGlwLCB3aGljaCBpcyB1c2VkIG9uIHRoZSBBc3VzIEE3TjhYLCBhbW9uZyBvdGhlcgpAQCAtNTQ4LDggKzU3NCw2IEBACiAKIGNvbmZpZyBTRU5TT1JTX1c4MzYyN0hGCiAJdHJpc3RhdGUgIldpbmJvbmQgVzgzNjI3SEYsIFc4MzYyN1RIRiwgVzgzNjM3SEYsIFc4MzY4N1RIRiwgVzgzNjk3SEYiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMKLQlzZWxlY3QgSTJDX0lTQQogCXNlbGVjdCBIV01PTl9WSUQKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFdpbmJvbmQgVzgzNlg3IHNlcmllcwpAQCAtNTYxLDcgKzU4NSw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX1c4MzYyN0VIRgogCXRyaXN0YXRlICJXaW5ib25kIFc4MzYyN0VIRiIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgSTJDX0lTQQogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUKQEAgLTU3Nyw3ICs2MDEsNyBAQAogCiBjb25maWcgU0VOU09SU19IREFQUwogCXRyaXN0YXRlICJJQk0gSGFyZCBEcml2ZSBBY3RpdmUgUHJvdGVjdGlvbiBTeXN0ZW0gKGhkYXBzKSIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIElOUFVUICYmIFg4NgorCWRlcGVuZHMgb24gSU5QVVQgJiYgWDg2CiAJZGVmYXVsdCBuCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIElCTSBIYXJkIERyaXZlIEFjdGl2ZSBQcm90ZWN0aW9uCkBAIC01OTQsOSArNjE4LDMyIEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIGFwcGxpY2FibGUgbGFwdG9wIGFuZCB3YW50IHRvIGV4cGVyaWVuY2UKIAkgIHRoZSBhd2Vzb21lIHBvd2VyIG9mIGhkYXBzLgogCitjb25maWcgU0VOU09SU19BUFBMRVNNQworCXRyaXN0YXRlICJBcHBsZSBTTUMgKE1vdGlvbiBzZW5zb3IsIGxpZ2h0IHNlbnNvciwga2V5Ym9hcmQgYmFja2xpZ2h0KSIKKwlkZXBlbmRzIG9uIElOUFVUICYmIFg4NgorCXNlbGVjdCBORVdfTEVEUworCXNlbGVjdCBMRURTX0NMQVNTCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIEFwcGxlIFN5c3RlbSBNYW5hZ2VtZW50CisJICBDb250cm9sbGVyLCB3aGljaCBwcm92aWRlcyBhbiBhY2NlbGVyb21ldGVyIChBcHBsZSBTdWRkZW4gTW90aW9uCisJICBTZW5zb3IpLCBsaWdodCBzZW5zb3JzLCB0ZW1wZXJhdHVyZSBzZW5zb3JzLCBrZXlib2FyZCBiYWNrbGlnaHQKKwkgIGNvbnRyb2wgYW5kIGZhbiBjb250cm9sLgorCisJICBPbmx5IEludGVsLWJhc2VkIEFwcGxlJ3MgY29tcHV0ZXJzIGFyZSBzdXBwb3J0ZWQgKE1hY0Jvb2sgUHJvLAorCSAgTWFjQm9vaywgTWFjTWluaSkuCisKKwkgIERhdGEgZnJvbSB0aGUgZGlmZmVyZW50IHNlbnNvcnMsIGtleWJvYXJkIGJhY2tsaWdodCBjb250cm9sIGFuZCBmYW4KKwkgIGNvbnRyb2wgYXJlIGFjY2Vzc2libGUgdmlhIHN5c2ZzLgorCisJICBUaGlzIGRyaXZlciBhbHNvIHByb3ZpZGVzIGFuIGFic29sdXRlIGlucHV0IGNsYXNzIGRldmljZSwgYWxsb3dpbmcKKwkgIHRoZSBsYXB0b3AgdG8gYWN0IGFzIGEgcGluYmFsbCBtYWNoaW5lLWVzcXVlIGpveXN0aWNrLgorCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIGFwcGxpY2FibGUgbGFwdG9wIGFuZCB3YW50IHRvIGV4cGVyaWVuY2UKKwkgIHRoZSBhd2Vzb21lIHBvd2VyIG9mIGFwcGxlc21jLgorCiBjb25maWcgSFdNT05fREVCVUdfQ0hJUAogCWJvb2wgIkhhcmR3YXJlIE1vbml0b3JpbmcgQ2hpcCBkZWJ1Z2dpbmcgbWVzc2FnZXMiCi0JZGVwZW5kcyBvbiBIV01PTgogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIEkyQyBjaGlwIGRyaXZlcnMgdG8gcHJvZHVjZSBhIGJ1bmNoIG9mCkBAIC02MDQsNCArNjUxLDQgQEAKIAkgIGEgcHJvYmxlbSB3aXRoIEkyQyBzdXBwb3J0IGFuZCB3YW50IHRvIHNlZSBtb3JlIG9mIHdoYXQgaXMgZ29pbmcKIAkgIG9uLgogCi1lbmRtZW51CitlbmRpZiAjIEhXTU9OCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQppbmRleCA0MTY1YzI3Li5jZmFmMzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKQEAgLTE0LDE0ICsxNCwxNyBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfVzgzNzkxRCkJKz0gdzgzNzkxZC5vCiAKIG9iai0kKENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSkJKz0gYWJpdHVndXJ1Lm8KK29iai0kKENPTkZJR19TRU5TT1JTX0FENzQxOCkJKz0gYWQ3NDE4Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FETTEwMjEpCSs9IGFkbTEwMjEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQURNMTAyNSkJKz0gYWRtMTAyNS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRE0xMDI2KQkrPSBhZG0xMDI2Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FETTEwMjkpCSs9IGFkbTEwMjkubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQURNMTAzMSkJKz0gYWRtMTAzMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRE05MjQwKQkrPSBhZG05MjQwLm8KK29iai0kKENPTkZJR19TRU5TT1JTX0FQUExFU01DKQkrPSBhcHBsZXNtYy5vCiBvYmotJChDT05GSUdfU0VOU09SU19BTVMpCSs9IGFtcy8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FUWFAxKQkrPSBhdHhwMS5vCitvYmotJChDT05GSUdfU0VOU09SU19DT1JFVEVNUCkJKz0gY29yZXRlbXAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfRFMxNjIxKQkrPSBkczE2MjEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfRjcxODA1RikJKz0gZjcxODA1Zi5vCiBvYmotJChDT05GSUdfU0VOU09SU19GU0NIRVIpCSs9IGZzY2hlci5vCkBAIC00Myw2ICs0Niw3IEBACiBvYmotJChDT05GSUdfU0VOU09SU19MTTkwKQkrPSBsbTkwLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0xNOTIpCSs9IGxtOTIubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTUFYMTYxOSkJKz0gbWF4MTYxOS5vCitvYmotJChDT05GSUdfU0VOU09SU19NQVg2NjUwKQkrPSBtYXg2NjUwLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BDODczNjApCSs9IHBjODczNjAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfUEM4NzQyNykJKz0gcGM4NzQyNy5vCiBvYmotJChDT05GSUdfU0VOU09SU19TSVM1NTk1KQkrPSBzaXM1NTk1Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWQ3NDE4LmMgYi9kcml2ZXJzL2h3bW9uL2FkNzQxOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGI2MjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2FkNzQxOC5jCkBAIC0wLDAgKzEsMzczIEBACisvKgorICogQW4gaHdtb24gZHJpdmVyIGZvciB0aGUgQW5hbG9nIERldmljZXMgQUQ3NDE2LzE3LzE4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMDcgVG93ZXIgVGVjaG5vbG9naWVzCisgKgorICogQXV0aG9yOiBBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4KKyAqCisgKiBCYXNlZCBvbiBsbTc1LmMKKyAqIENvcHlyaWdodCAoQykgMTk5OC05OSBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAtIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJsbTc1LmgiCisKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMyIKKworLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjgsIEkyQ19DTElFTlRfRU5EIH07CisvKiBJbnNtb2QgcGFyYW1ldGVycyAqLworSTJDX0NMSUVOVF9JTlNNT0RfMyhhZDc0MTYsIGFkNzQxNywgYWQ3NDE4KTsKKworLyogQUQ3NDE4IHJlZ2lzdGVycyAqLworI2RlZmluZSBBRDc0MThfUkVHX1RFTVBfSU4JMHgwMAorI2RlZmluZSBBRDc0MThfUkVHX0NPTkYJCTB4MDEKKyNkZWZpbmUgQUQ3NDE4X1JFR19URU1QX0hZU1QJMHgwMgorI2RlZmluZSBBRDc0MThfUkVHX1RFTVBfT1MJMHgwMworI2RlZmluZSBBRDc0MThfUkVHX0FEQwkJMHgwNAorI2RlZmluZSBBRDc0MThfUkVHX0NPTkYyCTB4MDUKKworI2RlZmluZSBBRDc0MThfUkVHX0FEQ19DSCh4KQkoKHgpIDw8IDUpCisjZGVmaW5lIEFENzQxOF9DSF9URU1QCQlBRDc0MThfUkVHX0FEQ19DSCgwKQorCitzdGF0aWMgY29uc3QgdTggQUQ3NDE4X1JFR19URU1QW10gPSB7IEFENzQxOF9SRUdfVEVNUF9JTiwKKwkJCQkJQUQ3NDE4X1JFR19URU1QX0hZU1QsCisJCQkJCUFENzQxOF9SRUdfVEVNUF9PUyB9OworCitzdHJ1Y3QgYWQ3NDE4X2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50CWNsaWVudDsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlCSpjbGFzc19kZXY7CisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cAlhdHRyczsKKwllbnVtIGNoaXBzCQl0eXBlOworCXN0cnVjdCBtdXRleAkJbG9jazsKKwlpbnQJCQlhZGNfbWF4OwkvKiBudW1iZXIgb2YgQURDIGNoYW5uZWxzICovCisJY2hhcgkJCXZhbGlkOworCXVuc2lnbmVkIGxvbmcJCWxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLworCXMxNgkJCXRlbXBbM107CS8qIFJlZ2lzdGVyIHZhbHVlcyAqLworCXUxNgkJCWluWzRdOworfTsKKworc3RhdGljIGludCBhZDc0MThfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgYWQ3NDE4X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCk7CitzdGF0aWMgaW50IGFkNzQxOF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWQ3NDE4X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJhZDc0MTgiLAorCX0sCisJLmF0dGFjaF9hZGFwdGVyCT0gYWQ3NDE4X2F0dGFjaF9hZGFwdGVyLAorCS5kZXRhY2hfY2xpZW50CT0gYWQ3NDE4X2RldGFjaF9jbGllbnQsCit9OworCisvKiBBbGwgcmVnaXN0ZXJzIGFyZSB3b3JkLXNpemVkLCBleGNlcHQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4KKyAqIEFENzQxOCB1c2VzIGEgaGlnaC1ieXRlIGZpcnN0IGNvbnZlbnRpb24uIERvIE5PVCB1c2UgdGhvc2UgZnVuY3Rpb25zIHRvCisgKiBhY2Nlc3MgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIENPTkYgYW5kIENPTkYyLCBhcyB0aGV5IGFyZSBieXRlLXNpemVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBhZDc0MThfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCit7CisJcmV0dXJuIHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCByZWcpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWQ3NDE4X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTE2IHZhbHVlKQoreworCXJldHVybiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgcmVnLCBzd2FiMTYodmFsdWUpKTsKK30KKworc3RhdGljIHZvaWQgYWQ3NDE4X2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkNzQxOF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpbnQgcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQUQ3NDE4X1JFR19DT05GKTsKKwlpZiAocmVnIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImNhbm5vdCByZWFkIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJcbiIpOworCX0gZWxzZSB7CisJCWRldl9pbmZvKCZjbGllbnQtPmRldiwgImNvbmZpZ3VyaW5nIGZvciBtb2RlIDFcbiIpOworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQUQ3NDE4X1JFR19DT05GLCByZWcgJiAweGZlKTsKKworCQlpZiAoZGF0YS0+dHlwZSA9PSBhZDc0MTcgfHwgZGF0YS0+dHlwZSA9PSBhZDc0MTgpCisJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCUFENzQxOF9SRUdfQ09ORjIsIDB4MDApOworCX0KK30KKworc3RhdGljIHN0cnVjdCBhZDc0MThfZGF0YSAqYWQ3NDE4X3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFkNzQxOF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICsgSFogLyAyKQorCQl8fCAhZGF0YS0+dmFsaWQpIHsKKwkJdTggY2ZnOworCQlpbnQgaSwgY2g7CisKKwkJLyogcmVhZCBjb25maWcgcmVnaXN0ZXIgYW5kIGNsZWFyIGNoYW5uZWwgYml0cyAqLworCQljZmcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRDc0MThfUkVHX0NPTkYpOworCQljZmcgJj0gMHgxRjsKKworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQUQ3NDE4X1JFR19DT05GLAorCQkJCQkJY2ZnIHwgQUQ3NDE4X0NIX1RFTVApOworCQl1ZGVsYXkoMzApOworCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCWRhdGEtPnRlbXBbaV0gPSBhZDc0MThfcmVhZChjbGllbnQsIEFENzQxOF9SRUdfVEVNUFtpXSk7CisJCX0KKworCQlmb3IgKGkgPSAwLCBjaCA9IDQ7IGkgPCBkYXRhLT5hZGNfbWF4OyBpKyssIGNoLS0pIHsKKwkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQlBRDc0MThfUkVHX0NPTkYsCisJCQkJCWNmZyB8IEFENzQxOF9SRUdfQURDX0NIKGNoKSk7CisKKwkJCXVkZWxheSgxNSk7CisJCQlkYXRhLT5pbltkYXRhLT5hZGNfbWF4IC0gMSAtIGldID0KKwkJCQlhZDc0MThfcmVhZChjbGllbnQsIEFENzQxOF9SRUdfQURDKTsKKwkJfQorCisJCS8qIHJlc3RvcmUgb2xkIGNvbmZpZ3VyYXRpb24gdmFsdWUgKi8KKwkJYWQ3NDE4X3dyaXRlKGNsaWVudCwgQUQ3NDE4X1JFR19DT05GLCBjZmcpOworCisJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJCWRhdGEtPnZhbGlkID0gMTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgYWQ3NDE4X2RhdGEgKmRhdGEgPSBhZDc0MThfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQlMTTc1X1RFTVBfRlJPTV9SRUcoZGF0YS0+dGVtcFthdHRyLT5pbmRleF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19hZGMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGFkNzQxOF9kYXRhICpkYXRhID0gYWQ3NDE4X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQkoKGRhdGEtPmluW2F0dHItPmluZGV4XSA+PiA2KSAqIDI1MDAgKyA1MTIpIC8gMTAyNCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYWQ3NDE4X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlkYXRhLT50ZW1wW2F0dHItPmluZGV4XSA9IExNNzVfVEVNUF9UT19SRUcodGVtcCk7CisJYWQ3NDE4X3dyaXRlKGNsaWVudCwgQUQ3NDE4X1JFR19URU1QW2F0dHItPmluZGV4XSwgZGF0YS0+dGVtcFthdHRyLT5pbmRleF0pOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXhfaHlzdCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQkJc2hvd190ZW1wLCBzZXRfdGVtcCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQkJc2hvd190ZW1wLCBzZXRfdGVtcCwgMik7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2FkYywgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMl9pbnB1dCwgU19JUlVHTywgc2hvd19hZGMsIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjNfaW5wdXQsIFNfSVJVR08sIHNob3dfYWRjLCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW40X2lucHV0LCBTX0lSVUdPLCBzaG93X2FkYywgTlVMTCwgMyk7CisKK3N0YXRpYyBpbnQgYWQ3NDE4X2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoIShhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19IV01PTikpCisJCXJldHVybiAwOworCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgYWQ3NDE4X2RldGVjdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDc0MTZfYXR0cmlidXRlc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ3NDE3X2F0dHJpYnV0ZXNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ3NDE4X2F0dHJpYnV0ZXNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGFkNzQxOF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgYWQ3NDE4X2RhdGEgKmRhdGE7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8CisJCQkJCUkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpCisJCWdvdG8gZXhpdDsKKworCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWQ3NDE4X2RhdGEpLCBHRlBfS0VSTkVMKSkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCWNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CisJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+ZHJpdmVyID0gJmFkNzQxOF9kcml2ZXI7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCisJLyogQUQ3NDE4IGhhcyBhIGN1cmlvdXMgYmVoYXZpb3VyIG9uIHJlZ2lzdGVycyA2IGFuZCA3LiBUaGV5CisJICogYm90aCBhbHdheXMgcmVhZCAweEMwNzEgYW5kIGFyZSBub3QgZG9jdW1lbnRlZCBvbiB0aGUgZGF0YXNoZWV0LgorCSAqIFdlIHVzZSB0aGVtIHRvIGRldGVjdCB0aGUgY2hpcC4KKwkgKi8KKwlpZiAoa2luZCA8PSAwKSB7CisJCWludCByZWcsIHJlZzYsIHJlZzc7CisKKwkJLyogdGhlIEFENzQxNiBsaWVzIHdpdGhpbiB0aGlzIGFkZHJlc3MgcmFuZ2UsIGJ1dCBJIGhhdmUKKwkJICogbm8gbWVhbnMgdG8gY2hlY2suCisJCSAqLworCQlpZiAoYWRkcmVzcyA+PSAweDQ4ICYmIGFkZHJlc3MgPD0gMHg0ZikgeworCQkJLyogWFhYIGFkZCB0ZXN0cyBmb3IgQUQ3NDE2IGhlcmUgKi8KKwkJCS8qIGRhdGEtPnR5cGUgPSBhZDc0MTY7ICovCisJCX0KKwkJLyogaGVyZSB3ZSBtaWdodCBoYXZlIEFENzQxNyBvciBBRDc0MTggKi8KKwkJZWxzZSBpZiAoYWRkcmVzcyA+PSAweDI4ICYmIGFkZHJlc3MgPD0gMHgyZikgeworCQkJcmVnNiA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIDB4MDYpOworCQkJcmVnNyA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIDB4MDcpOworCisJCQlpZiAoYWRkcmVzcyA9PSAweDI4ICYmIHJlZzYgPT0gMHhDMDcxICYmIHJlZzcgPT0gMHhDMDcxKQorCQkJCWRhdGEtPnR5cGUgPSBhZDc0MTg7CisKKwkJCS8qIFhYWCBhZGQgdGVzdHMgZm9yIEFENzQxNyBoZXJlICovCisKKworCQkJLyogYm90aCBBRDc0MTcgYW5kIEFENzQxOCBoYXZlIGJpdHMgMC01IG9mCisJCQkgKiB0aGUgQ09ORjIgcmVnaXN0ZXIgYXQgMAorCQkJICovCisJCQlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJCUFENzQxOF9SRUdfQ09ORjIpOworCQkJaWYgKHJlZyAmIDB4M0YpCisJCQkJZGF0YS0+dHlwZSA9IGFueV9jaGlwOyAvKiBkZXRlY3Rpb24gZmFpbGVkICovCisJCX0KKwl9IGVsc2UgeworCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJkZXRlY3Rpb24gZm9yY2VkXG4iKTsKKwl9CisKKwlpZiAoa2luZCA+IDApCisJCWRhdGEtPnR5cGUgPSBraW5kOworCWVsc2UgaWYgKGtpbmQgPCAwICYmIGRhdGEtPnR5cGUgPT0gYW55X2NoaXApIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBleGl0X2ZyZWU7CisJfQorCisJc3dpdGNoIChkYXRhLT50eXBlKSB7CisJY2FzZSBhbnlfY2hpcDoKKwljYXNlIGFkNzQxNjoKKwkJZGF0YS0+YWRjX21heCA9IDA7CisJCWRhdGEtPmF0dHJzLmF0dHJzID0gYWQ3NDE2X2F0dHJpYnV0ZXM7CisJCXN0cmxjcHkoY2xpZW50LT5uYW1lLCAiYWQ3NDE2IiwgSTJDX05BTUVfU0laRSk7CisJCWJyZWFrOworCisJY2FzZSBhZDc0MTc6CisJCWRhdGEtPmFkY19tYXggPSA0OworCQlkYXRhLT5hdHRycy5hdHRycyA9IGFkNzQxN19hdHRyaWJ1dGVzOworCQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgImFkNzQxNyIsIEkyQ19OQU1FX1NJWkUpOworCQlicmVhazsKKworCWNhc2UgYWQ3NDE4OgorCQlkYXRhLT5hZGNfbWF4ID0gMTsKKwkJZGF0YS0+YXR0cnMuYXR0cnMgPSBhZDc0MThfYXR0cmlidXRlczsKKwkJc3RybGNweShjbGllbnQtPm5hbWUsICJhZDc0MTgiLCBJMkNfTkFNRV9TSVpFKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpKSkKKwkJZ290byBleGl0X2ZyZWU7CisKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICIlcyBjaGlwIGZvdW5kXG4iLCBjbGllbnQtPm5hbWUpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgQUQ3NDE4IGNoaXAgKi8KKwlhZDc0MThfaW5pdF9jbGllbnQoY2xpZW50KTsKKworCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZkYXRhLT5hdHRycykpKQorCQlnb3RvIGV4aXRfZGV0YWNoOworCisJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9yZW1vdmU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmZGF0YS0+YXR0cnMpOworZXhpdF9kZXRhY2g6CisJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKK2V4aXRfZnJlZToKKwlrZnJlZShkYXRhKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhZDc0MThfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBhZDc0MThfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmZGF0YS0+YXR0cnMpOworCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFkNzQxOF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZhZDc0MThfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFkNzQxOF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmFkNzQxOF9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUQ3NDE2LzE3LzE4IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworCittb2R1bGVfaW5pdChhZDc0MThfaW5pdCk7Cittb2R1bGVfZXhpdChhZDc0MThfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYwppbmRleCBmNWViYWQ1Li42ZGI5NzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCWNvbnN0IHUzMiAqcHJvcDsKIAogCS8qIEdldCBvcmllbnRhdGlvbiAqLwotCXByb3AgPSBnZXRfcHJvcGVydHkoYW1zX2luZm8ub2Zfbm9kZSwgIm9yaWVudGF0aW9uIiwgTlVMTCk7CisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShhbXNfaW5mby5vZl9ub2RlLCAib3JpZW50YXRpb24iLCBOVUxMKTsKIAlpZiAoIXByb3ApCiAJCXJldHVybiAtRU5PREVWOwogCWFtc19pbmZvLm9yaWVudDEgPSAqcHJvcDsKQEAgLTIwOCwyMCArMjA4LDE3IEBACiAKICNpZmRlZiBDT05GSUdfU0VOU09SU19BTVNfSTJDCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiYWNjZWxlcm9tZXRlciIpOwotCWlmIChucCAmJiBkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgIkFBUEwsYWNjZWxlcm9tZXRlcl8xIikpCisJaWYgKG5wICYmIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiQUFQTCxhY2NlbGVyb21ldGVyXzEiKSkKIAkJLyogRm91bmQgSTJDIG1vdGlvbiBzZW5zb3IgKi8KIAkJcmV0dXJuIGFtc19pMmNfaW5pdChucCk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TRU5TT1JTX0FNU19QTVUKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJzbXMiKTsKLQlpZiAobnAgJiYgZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJzbXMiKSkKKwlpZiAobnAgJiYgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJzbXMiKSkKIAkJLyogRm91bmQgUE1VIG1vdGlvbiBzZW5zb3IgKi8KIAkJcmV0dXJuIGFtc19wbXVfaW5pdChucCk7CiAjZW5kaWYKLQotCXByaW50ayhLRVJOX0VSUiAiYW1zOiBObyBtb3Rpb24gc2Vuc29yIGZvdW5kLlxuIik7Ci0KIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCmluZGV4IDQ4NWQzMzMuLjk1Nzc2MDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCkBAIC04NSwxNyArODUsMTcgQEAKIHN0YXRpYyBpbnQgYW1zX2kyY19jbWQoZW51bSBhbXNfaTJjX2NtZCBjbWQpCiB7CiAJczMyIHJlc3VsdDsKLQlpbnQgcmVtYWluaW5nID0gSFogLyAyMDsKKwlpbnQgY291bnQgPSAzOwogCiAJYW1zX2kyY193cml0ZShBTVNfQ09NTUFORCwgY21kKTsKLQltZGVsYXkoNSk7CisJbXNsZWVwKDUpOwogCi0Jd2hpbGUgKHJlbWFpbmluZykgeworCXdoaWxlIChjb3VudC0tKSB7CiAJCXJlc3VsdCA9IGFtc19pMmNfcmVhZChBTVNfQ09NTUFORCk7CiAJCWlmIChyZXN1bHQgPT0gMCB8fCByZXN1bHQgJiAweDgwKQogCQkJcmV0dXJuIDA7CiAKLQkJcmVtYWluaW5nID0gc2NoZWR1bGVfdGltZW91dChyZW1haW5pbmcpOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWiAvIDIwKTsKIAl9CiAKIAlyZXR1cm4gLTE7CkBAIC0yNzYsNyArMjc2LDcgQEAKIAlhbXNfaW5mby5idXN0eXBlID0gQlVTX0kyQzsKIAogCS8qIGxvb2sgZm9yIGJ1cyBlaXRoZXIgdXNpbmcgInJlZyIgb3IgYnkgcGF0aCAqLwotCXByb3AgPSBnZXRfcHJvcGVydHkoYW1zX2luZm8ub2Zfbm9kZSwgInJlZyIsIE5VTEwpOworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoYW1zX2luZm8ub2Zfbm9kZSwgInJlZyIsIE5VTEwpOwogCWlmICghcHJvcCkgewogCQlyZXN1bHQgPSAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pbnB1dC5jCmluZGV4IDE4MjEwMTYuLmNhNzA5NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pbnB1dC5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pbnB1dC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJYW1zX2luZm8uaWRldi0+aWQudmVuZG9yID0gMDsKIAlhbXNfaW5mby5pZGV2LT5vcGVuID0gYW1zX2lucHV0X29wZW47CiAJYW1zX2luZm8uaWRldi0+Y2xvc2UgPSBhbXNfaW5wdXRfY2xvc2U7Ci0JYW1zX2luZm8uaWRldi0+Y2Rldi5kZXYgPSAmYW1zX2luZm8ub2ZfZGV2LT5kZXY7CisJYW1zX2luZm8uaWRldi0+ZGV2LnBhcmVudCA9ICZhbXNfaW5mby5vZl9kZXYtPmRldjsKIAogCWlucHV0X3NldF9hYnNfcGFyYW1zKGFtc19pbmZvLmlkZXYsIEFCU19YLCAtNTAsIDUwLCAzLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhhbXNfaW5mby5pZGV2LCBBQlNfWSwgLTUwLCA1MCwgMywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKaW5kZXggMWIwMWMyMS4uOTQ2M2U5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJYW1zX2luZm8uYnVzdHlwZSA9IEJVU19IT1NUOwogCiAJLyogR2V0IFBNVSBjb21tYW5kLCBzaG91bGQgYmUgMHg0ZSwgYnV0IHdlIGNhbiBuZXZlciBrbm93ICovCi0JcHJvcCA9IGdldF9wcm9wZXJ0eShhbXNfaW5mby5vZl9ub2RlLCAicmVnIiwgTlVMTCk7CisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShhbXNfaW5mby5vZl9ub2RlLCAicmVnIiwgTlVMTCk7CiAJaWYgKCFwcm9wKSB7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZXhpdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYyBiL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDEyODFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCkBAIC0wLDAgKzEsMTM1NSBAQAorLyoKKyAqIGRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYyAtIGRyaXZlciBmb3IgQXBwbGUncyBTTUMgKGFjY2VsZXJvbWV0ZXIsIHRlbXBlcmF0dXJlCisgKiBzZW5zb3JzLCBmYW4gY29udHJvbCwga2V5Ym9hcmQgYmFja2xpZ2h0IGNvbnRyb2wpIHVzZWQgaW4gSW50ZWwtYmFzZWQgQXBwbGUKKyAqIGNvbXB1dGVycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmljb2xhcyBCb2ljaGF0IDxuaWNvbGFzQGJvaWNoYXQuY2g+CisgKgorICogQmFzZWQgb24gaGRhcHMuYyBkcml2ZXI6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUm9iZXJ0IExvdmUgPHJtbEBub3ZlbGwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEplc3BlciBKdWhsIDxqZXNwZXIuanVobEBnbWFpbC5jb20+CisgKgorICogRmFuIGNvbnRyb2wgYmFzZWQgb24gc21jRmFuQ29udHJvbDoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBIZW5kcmlrIEhvbHRtYW5uIDxob2x0bWFubkBtYWMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworLyogZGF0YSBwb3J0IHVzZWQgYnkgQXBwbGUgU01DICovCisjZGVmaW5lIEFQUExFU01DX0RBVEFfUE9SVAkweDMwMAorLyogY29tbWFuZC9zdGF0dXMgcG9ydCB1c2VkIGJ5IEFwcGxlIFNNQyAqLworI2RlZmluZSBBUFBMRVNNQ19DTURfUE9SVAkweDMwNAorCisjZGVmaW5lIEFQUExFU01DX05SX1BPUlRTCTMyIC8qIDB4MzAwLTB4MzFmICovCisKKyNkZWZpbmUgQVBQTEVTTUNfTUFYX0RBVEFfTEVOR1RIIDMyCisKKyNkZWZpbmUgQVBQTEVTTUNfU1RBVFVTX01BU0sJMHgwZgorI2RlZmluZSBBUFBMRVNNQ19SRUFEX0NNRAkweDEwCisjZGVmaW5lIEFQUExFU01DX1dSSVRFX0NNRAkweDExCisjZGVmaW5lIEFQUExFU01DX0dFVF9LRVlfQllfSU5ERVhfQ01ECTB4MTIKKyNkZWZpbmUgQVBQTEVTTUNfR0VUX0tFWV9UWVBFX0NNRAkweDEzCisKKyNkZWZpbmUgS0VZX0NPVU5UX0tFWQkJIiNLRVkiIC8qIHItbyB1aTMyICovCisKKyNkZWZpbmUgTElHSFRfU0VOU09SX0xFRlRfS0VZCSJBTFYwIiAvKiByLW8ge2FsdiAoNiBieXRlcykgKi8KKyNkZWZpbmUgTElHSFRfU0VOU09SX1JJR0hUX0tFWQkiQUxWMSIgLyogci1vIHthbHYgKDYgYnl0ZXMpICovCisjZGVmaW5lIEJBQ0tMSUdIVF9LRVkgCQkiTEtTQiIgLyogdy1vIHtsa2IgKDIgYnl0ZXMpICovCisKKyNkZWZpbmUgQ0xBTVNIRUxMX0tFWSAJCSJNU0xEIiAvKiByLW8gdWk4ICh1bnVzZWQpICovCisKKyNkZWZpbmUgTU9USU9OX1NFTlNPUl9YX0tFWQkiTU9fWCIgLyogci1vIHNwNzggKDIgYnl0ZXMpICovCisjZGVmaW5lIE1PVElPTl9TRU5TT1JfWV9LRVkJIk1PX1kiIC8qIHItbyBzcDc4ICgyIGJ5dGVzKSAqLworI2RlZmluZSBNT1RJT05fU0VOU09SX1pfS0VZCSJNT19aIiAvKiByLW8gc3A3OCAoMiBieXRlcykgKi8KKyNkZWZpbmUgTU9USU9OX1NFTlNPUl9LRVkJIk1PQ04iIC8qIHIvdyB1aTE2ICovCisKKyNkZWZpbmUgRkFOU19DT1VOVAkJIkZOdW0iIC8qIHItbyB1aTggKi8KKyNkZWZpbmUgRkFOU19NQU5VQUwJCSJGUyEgIiAvKiByLXcgdWkxNiAqLworI2RlZmluZSBGQU5fQUNUVUFMX1NQRUVECSJGMEFjIiAvKiByLW8gZnBlMiAoMiBieXRlcykgKi8KKyNkZWZpbmUgRkFOX01JTl9TUEVFRAkJIkYwTW4iIC8qIHItbyBmcGUyICgyIGJ5dGVzKSAqLworI2RlZmluZSBGQU5fTUFYX1NQRUVECQkiRjBNeCIgLyogci1vIGZwZTIgKDIgYnl0ZXMpICovCisjZGVmaW5lIEZBTl9TQUZFX1NQRUVECQkiRjBTZiIgLyogci1vIGZwZTIgKDIgYnl0ZXMpICovCisjZGVmaW5lIEZBTl9UQVJHRVRfU1BFRUQJIkYwVGciIC8qIHItdyBmcGUyICgyIGJ5dGVzKSAqLworI2RlZmluZSBGQU5fUE9TSVRJT04JCSJGMElEIiAvKiByLW8gY2hhclsxNl0gKi8KKworLyoKKyAqIFRlbXBlcmF0dXJlIHNlbnNvcnMga2V5cyAoc3A3OCAtIDIgYnl0ZXMpLgorICogRmlyc3Qgc2V0IGZvciBNYWNib29rKFBybyksIHNlY29uZCBmb3IgTWFjbWluaS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIqIHRlbXBlcmF0dXJlX3NlbnNvcnNfc2V0c1tdWzEzXSA9IHsKKwl7ICJUQTBQIiwgIlRCMFQiLCAiVEMwRCIsICJUQzBQIiwgIlRHMEgiLCAiVEcwUCIsICJURzBUIiwgIlRoMEgiLAorCSAgIlRoMUgiLCAiVG0wUCIsICJUczBQIiwgIlRzMVAiLCBOVUxMIH0sCisJeyAiVEMwRCIsICJUQzBQIiwgTlVMTCB9Cit9OworCisvKiBMaXN0IG9mIGtleXMgdXNlZCB0byByZWFkL3dyaXRlIGZhbiBzcGVlZHMgKi8KK3N0YXRpYyBjb25zdCBjaGFyKiBmYW5fc3BlZWRfa2V5c1tdID0geworCUZBTl9BQ1RVQUxfU1BFRUQsCisJRkFOX01JTl9TUEVFRCwKKwlGQU5fTUFYX1NQRUVELAorCUZBTl9TQUZFX1NQRUVELAorCUZBTl9UQVJHRVRfU1BFRUQKK307CisKKyNkZWZpbmUgSU5JVF9USU1FT1VUX01TRUNTCTUwMDAJLyogd2FpdCB1cCB0byA1cyBmb3IgZGV2aWNlIGluaXQgLi4uICovCisjZGVmaW5lIElOSVRfV0FJVF9NU0VDUwkJNTAJLyogLi4uIGluIDUwbXMgaW5jcmVtZW50cyAqLworCisjZGVmaW5lIEFQUExFU01DX1BPTExfUEVSSU9ECShIWi8yMCkJLyogcG9sbCBmb3IgaW5wdXQgZXZlcnkgMS8yMHMgKi8KKyNkZWZpbmUgQVBQTEVTTUNfSU5QVVRfRlVaWgk0CS8qIGlucHV0IGV2ZW50IHRocmVzaG9sZCAqLworI2RlZmluZSBBUFBMRVNNQ19JTlBVVF9GTEFUCTQKKworI2RlZmluZSBTRU5TT1JfWCAwCisjZGVmaW5lIFNFTlNPUl9ZIDEKKyNkZWZpbmUgU0VOU09SX1ogMgorCisvKiBTdHJ1Y3R1cmUgdG8gYmUgcGFzc2VkIHRvIERNSV9NQVRDSCBmdW5jdGlvbiAqLworc3RydWN0IGRtaV9tYXRjaF9kYXRhIHsKKy8qIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgY29tcHV0ZXIgaGFzIGFuIGFjY2VsZXJvbWV0ZXIuICovCisJaW50IGFjY2VsZXJvbWV0ZXI7CisvKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbXB1dGVyIGhhcyBsaWdodCBzZW5zb3JzIGFuZCBrZXlib2FyZCBiYWNrbGlnaHQuICovCisJaW50IGxpZ2h0OworLyogSW5kaWNhdGVzIHdoaWNoIHRlbXBlcmF0dXJlIHNlbnNvcnMgc2V0IHRvIHVzZS4gKi8KKwlpbnQgdGVtcGVyYXR1cmVfc2V0OworfTsKKworc3RhdGljIGNvbnN0IGludCBkZWJ1ZzsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Oworc3RhdGljIHMxNiByZXN0X3g7CitzdGF0aWMgczE2IHJlc3RfeTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBhcHBsZXNtY190aW1lcjsKK3N0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2ICphcHBsZXNtY19pZGV2Oworc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2UgKmh3bW9uX2NsYXNzX2RldjsKKworLyogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb21wdXRlciBoYXMgYW4gYWNjZWxlcm9tZXRlci4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXBwbGVzbWNfYWNjZWxlcm9tZXRlcjsKKworLyogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb21wdXRlciBoYXMgbGlnaHQgc2Vuc29ycyBhbmQga2V5Ym9hcmQgYmFja2xpZ2h0LiAqLworc3RhdGljIHVuc2lnbmVkIGludCBhcHBsZXNtY19saWdodDsKKworLyogSW5kaWNhdGVzIHdoaWNoIHRlbXBlcmF0dXJlIHNlbnNvcnMgc2V0IHRvIHVzZS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXBwbGVzbWNfdGVtcGVyYXR1cmVfc2V0OworCitzdGF0aWMgc3RydWN0IG11dGV4IGFwcGxlc21jX2xvY2s7CisKKy8qCisgKiBMYXN0IGluZGV4IHdyaXR0ZW4gdG8ga2V5X2F0X2luZGV4IHN5c2ZzIGZpbGUsIGFuZCB2YWx1ZSB0byB1c2UgZm9yIGFsbCBvdGhlcgorICoga2V5X2F0X2luZGV4Xyogc3lzZnMgZmlsZXMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQga2V5X2F0X2luZGV4OworCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmFwcGxlc21jX2xlZF93cTsKKworLyoKKyAqIF9fd2FpdF9zdGF0dXMgLSBXYWl0IHVwIHRvIDJtcyBmb3IgdGhlIHN0YXR1cyBwb3J0IHRvIGdldCBhIGNlcnRhaW4gdmFsdWUKKyAqIChtYXNrZWQgd2l0aCAweDBmKSwgcmV0dXJuaW5nIHplcm8gaWYgdGhlIHZhbHVlIGlzIG9idGFpbmVkLiAgQ2FsbGVycyBtdXN0CisgKiBob2xkIGFwcGxlc21jX2xvY2suCisgKi8KK3N0YXRpYyBpbnQgX193YWl0X3N0YXR1cyh1OCB2YWwpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwl2YWwgPSB2YWwgJiBBUFBMRVNNQ19TVEFUVVNfTUFTSzsKKworCWZvciAoaSA9IDA7IGkgPCAyMDA7IGkrKykgeworCQlpZiAoKGluYihBUFBMRVNNQ19DTURfUE9SVCkgJiBBUFBMRVNNQ19TVEFUVVNfTUFTSykgPT0gdmFsKSB7CisJCQlpZiAoZGVidWcpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkJCSJXYWl0ZWQgJWQgdXMgZm9yIHN0YXR1cyAleFxuIiwKKwkJCQkJCWkqMTAsIHZhbCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQl1ZGVsYXkoMTApOworCX0KKworCXByaW50ayhLRVJOX1dBUk5JTkcgImFwcGxlc21jOiB3YWl0IHN0YXR1cyBmYWlsZWQ6ICV4ICE9ICV4XG4iLAorCQkJCQkJdmFsLCBpbmIoQVBQTEVTTUNfQ01EX1BPUlQpKTsKKworCXJldHVybiAtRUlPOworfQorCisvKgorICogYXBwbGVzbWNfcmVhZF9rZXkgLSByZWFkcyBsZW4gYnl0ZXMgZnJvbSBhIGdpdmVuIGtleSwgYW5kIHB1dCB0aGVtIGluIGJ1ZmZlci4KKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3Igb24gZmFpbHVyZS4gQ2FsbGVycyBtdXN0CisgKiBob2xkIGFwcGxlc21jX2xvY2suCisgKi8KK3N0YXRpYyBpbnQgYXBwbGVzbWNfcmVhZF9rZXkoY29uc3QgY2hhcioga2V5LCB1OCogYnVmZmVyLCB1OCBsZW4pCit7CisJaW50IGk7CisKKwlpZiAobGVuID4gQVBQTEVTTUNfTUFYX0RBVEFfTEVOR1RIKSB7CisJCXByaW50ayhLRVJOX0VSUgkiYXBwbGVzbWNfcmVhZF9rZXk6IGNhbm5vdCByZWFkIG1vcmUgdGhhbiAiCisJCQkJCSIlZCBieXRlc1xuIiwgQVBQTEVTTUNfTUFYX0RBVEFfTEVOR1RIKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJb3V0YihBUFBMRVNNQ19SRUFEX0NNRCwgQVBQTEVTTUNfQ01EX1BPUlQpOworCWlmIChfX3dhaXRfc3RhdHVzKDB4MGMpKQorCQlyZXR1cm4gLUVJTzsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJb3V0YihrZXlbaV0sIEFQUExFU01DX0RBVEFfUE9SVCk7CisJCWlmIChfX3dhaXRfc3RhdHVzKDB4MDQpKQorCQkJcmV0dXJuIC1FSU87CisJfQorCWlmIChkZWJ1ZykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIjwlcyIsIGtleSk7CisKKwlvdXRiKGxlbiwgQVBQTEVTTUNfREFUQV9QT1JUKTsKKwlpZiAoZGVidWcpCisJCXByaW50ayhLRVJOX0RFQlVHICI+JXgiLCBsZW4pOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChfX3dhaXRfc3RhdHVzKDB4MDUpKQorCQkJcmV0dXJuIC1FSU87CisJCWJ1ZmZlcltpXSA9IGluYihBUFBMRVNNQ19EQVRBX1BPUlQpOworCQlpZiAoZGVidWcpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiPCV4IiwgYnVmZmVyW2ldKTsKKwl9CisJaWYgKGRlYnVnKQorCQlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorICogYXBwbGVzbWNfd3JpdGVfa2V5IC0gd3JpdGVzIGxlbiBieXRlcyBmcm9tIGJ1ZmZlciB0byBhIGdpdmVuIGtleS4KKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3Igb24gZmFpbHVyZS4gQ2FsbGVycyBtdXN0CisgKiBob2xkIGFwcGxlc21jX2xvY2suCisgKi8KK3N0YXRpYyBpbnQgYXBwbGVzbWNfd3JpdGVfa2V5KGNvbnN0IGNoYXIqIGtleSwgdTgqIGJ1ZmZlciwgdTggbGVuKQoreworCWludCBpOworCisJaWYgKGxlbiA+IEFQUExFU01DX01BWF9EQVRBX0xFTkdUSCkgeworCQlwcmludGsoS0VSTl9FUlIJImFwcGxlc21jX3dyaXRlX2tleTogY2Fubm90IHdyaXRlIG1vcmUgdGhhbiAiCisJCQkJCSIlZCBieXRlc1xuIiwgQVBQTEVTTUNfTUFYX0RBVEFfTEVOR1RIKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJb3V0YihBUFBMRVNNQ19XUklURV9DTUQsIEFQUExFU01DX0NNRF9QT1JUKTsKKwlpZiAoX193YWl0X3N0YXR1cygweDBjKSkKKwkJcmV0dXJuIC1FSU87CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCW91dGIoa2V5W2ldLCBBUFBMRVNNQ19EQVRBX1BPUlQpOworCQlpZiAoX193YWl0X3N0YXR1cygweDA0KSkKKwkJCXJldHVybiAtRUlPOworCX0KKworCW91dGIobGVuLCBBUFBMRVNNQ19EQVRBX1BPUlQpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChfX3dhaXRfc3RhdHVzKDB4MDQpKQorCQkJcmV0dXJuIC1FSU87CisJCW91dGIoYnVmZmVyW2ldLCBBUFBMRVNNQ19EQVRBX1BPUlQpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogYXBwbGVzbWNfZ2V0X2tleV9hdF9pbmRleCAtIGdldCBrZXkgYXQgaW5kZXgsIGFuZCBwdXQgdGhlIHJlc3VsdCBpbiBrZXkKKyAqIChjaGFyWzZdKS4gUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBvbiBmYWlsdXJlLiBDYWxsZXJzCisgKiBtdXN0IGhvbGQgYXBwbGVzbWNfbG9jay4KKyAqLworc3RhdGljIGludCBhcHBsZXNtY19nZXRfa2V5X2F0X2luZGV4KGludCBpbmRleCwgY2hhcioga2V5KQoreworCWludCBpOworCXU4IHJlYWRrZXlbNF07CisJcmVhZGtleVswXSA9IGluZGV4ID4+IDI0OworCXJlYWRrZXlbMV0gPSBpbmRleCA+PiAxNjsKKwlyZWFka2V5WzJdID0gaW5kZXggPj4gODsKKwlyZWFka2V5WzNdID0gaW5kZXg7CisKKwlvdXRiKEFQUExFU01DX0dFVF9LRVlfQllfSU5ERVhfQ01ELCBBUFBMRVNNQ19DTURfUE9SVCk7CisJaWYgKF9fd2FpdF9zdGF0dXMoMHgwYykpCisJCXJldHVybiAtRUlPOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlvdXRiKHJlYWRrZXlbaV0sIEFQUExFU01DX0RBVEFfUE9SVCk7CisJCWlmIChfX3dhaXRfc3RhdHVzKDB4MDQpKQorCQkJcmV0dXJuIC1FSU87CisJfQorCisJb3V0Yig0LCBBUFBMRVNNQ19EQVRBX1BPUlQpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAoX193YWl0X3N0YXR1cygweDA1KSkKKwkJCXJldHVybiAtRUlPOworCQlrZXlbaV0gPSBpbmIoQVBQTEVTTUNfREFUQV9QT1JUKTsKKwl9CisJa2V5WzRdID0gMDsKKworCXJldHVybiAwOworfQorCisvKgorICogYXBwbGVzbWNfZ2V0X2tleV90eXBlIC0gZ2V0IGtleSB0eXBlLCBhbmQgcHV0IHRoZSByZXN1bHQgaW4gdHlwZSAoY2hhcls2XSkuCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIG9uIGZhaWx1cmUuIENhbGxlcnMgbXVzdAorICogaG9sZCBhcHBsZXNtY19sb2NrLgorICovCitzdGF0aWMgaW50IGFwcGxlc21jX2dldF9rZXlfdHlwZShjaGFyKiBrZXksIGNoYXIqIHR5cGUpCit7CisJaW50IGk7CisKKwlvdXRiKEFQUExFU01DX0dFVF9LRVlfVFlQRV9DTUQsIEFQUExFU01DX0NNRF9QT1JUKTsKKwlpZiAoX193YWl0X3N0YXR1cygweDBjKSkKKwkJcmV0dXJuIC1FSU87CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCW91dGIoa2V5W2ldLCBBUFBMRVNNQ19EQVRBX1BPUlQpOworCQlpZiAoX193YWl0X3N0YXR1cygweDA0KSkKKwkJCXJldHVybiAtRUlPOworCX0KKworCW91dGIoNSwgQVBQTEVTTUNfREFUQV9QT1JUKTsKKworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJaWYgKF9fd2FpdF9zdGF0dXMoMHgwNSkpCisJCQlyZXR1cm4gLUVJTzsKKwkJdHlwZVtpXSA9IGluYihBUFBMRVNNQ19EQVRBX1BPUlQpOworCX0KKwl0eXBlWzVdID0gMDsKKworCXJldHVybiAwOworfQorCisvKgorICogYXBwbGVzbWNfcmVhZF9tb3Rpb25fc2Vuc29yIC0gUmVhZCBtb3Rpb24gc2Vuc29yIChYLCBZIG9yIFopLiBDYWxsZXJzIG11c3QKKyAqIGhvbGQgYXBwbGVzbWNfbG9jay4KKyAqLworc3RhdGljIGludCBhcHBsZXNtY19yZWFkX21vdGlvbl9zZW5zb3IoaW50IGluZGV4LCBzMTYqIHZhbHVlKQoreworCXU4IGJ1ZmZlclsyXTsKKwlpbnQgcmV0OworCisJc3dpdGNoIChpbmRleCkgeworCWNhc2UgU0VOU09SX1g6CisJCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KE1PVElPTl9TRU5TT1JfWF9LRVksIGJ1ZmZlciwgMik7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1k6CisJCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KE1PVElPTl9TRU5TT1JfWV9LRVksIGJ1ZmZlciwgMik7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1o6CisJCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KE1PVElPTl9TRU5TT1JfWl9LRVksIGJ1ZmZlciwgMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJKnZhbHVlID0gKChzMTYpYnVmZmVyWzBdIDw8IDgpIHwgYnVmZmVyWzFdOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGFwcGxlc21jX2RldmljZV9pbml0IC0gaW5pdGlhbGl6ZSB0aGUgYWNjZWxlcm9tZXRlci4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzCisgKiBhbmQgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLiAgQ2FuIHNsZWVwLgorICovCitzdGF0aWMgaW50IGFwcGxlc21jX2RldmljZV9pbml0KHZvaWQpCit7CisJaW50IHRvdGFsLCByZXQgPSAtRU5YSU87CisJdTggYnVmZmVyWzJdOworCisJaWYgKCFhcHBsZXNtY19hY2NlbGVyb21ldGVyKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJmFwcGxlc21jX2xvY2spOworCisJZm9yICh0b3RhbCA9IElOSVRfVElNRU9VVF9NU0VDUzsgdG90YWwgPiAwOyB0b3RhbCAtPSBJTklUX1dBSVRfTVNFQ1MpIHsKKwkJaWYgKGRlYnVnKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgImFwcGxlc21jIHRyeSAlZFxuIiwgdG90YWwpOworCQlpZiAoIWFwcGxlc21jX3JlYWRfa2V5KE1PVElPTl9TRU5TT1JfS0VZLCBidWZmZXIsIDIpICYmCisJCQkJKGJ1ZmZlclswXSAhPSAweDAwIHx8IGJ1ZmZlclsxXSAhPSAweDAwKSkgeworCQkJaWYgKHRvdGFsID09IElOSVRfVElNRU9VVF9NU0VDUykgeworCQkJCXByaW50ayhLRVJOX0RFQlVHICJhcHBsZXNtYzogZGV2aWNlIGhhcyIKKwkJCQkJCSIgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIgorCQkJCQkJIiAoMHglMDJ4LCAweCUwMngpLlxuIiwKKwkJCQkJCWJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgImFwcGxlc21jOiBkZXZpY2UiCisJCQkJCQkiIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCIKKwkJCQkJCSIgKDB4JTAyeCwgMHglMDJ4KS5cbiIsCisJCQkJCQlidWZmZXJbMF0sIGJ1ZmZlclsxXSk7CisJCQl9CisJCQlyZXQgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKwkJYnVmZmVyWzBdID0gMHhlMDsKKwkJYnVmZmVyWzFdID0gMHgwMDsKKwkJYXBwbGVzbWNfd3JpdGVfa2V5KE1PVElPTl9TRU5TT1JfS0VZLCBidWZmZXIsIDIpOworCQltc2xlZXAoSU5JVF9XQUlUX01TRUNTKTsKKwl9CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJhcHBsZXNtYzogZmFpbGVkIHRvIGluaXQgdGhlIGRldmljZVxuIik7CisKK291dDoKKwltdXRleF91bmxvY2soJmFwcGxlc21jX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBhcHBsZXNtY19nZXRfZmFuX2NvdW50IC0gZ2V0IHRoZSBudW1iZXIgb2YgZmFucy4gQ2FsbGVycyBtdXN0IE5PVCBob2xkCisgKiBhcHBsZXNtY19sb2NrLgorICovCitzdGF0aWMgaW50IGFwcGxlc21jX2dldF9mYW5fY291bnQodm9pZCkKK3sKKwlpbnQgcmV0OworCXU4IGJ1ZmZlclsxXTsKKworCW11dGV4X2xvY2soJmFwcGxlc21jX2xvY2spOworCisJcmV0ID0gYXBwbGVzbWNfcmVhZF9rZXkoRkFOU19DT1VOVCwgYnVmZmVyLCAxKTsKKworCW11dGV4X3VubG9jaygmYXBwbGVzbWNfbG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwllbHNlCisJCXJldHVybiBidWZmZXJbMF07Cit9CisKKy8qIERldmljZSBtb2RlbCBzdHVmZiAqLworc3RhdGljIGludCBhcHBsZXNtY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGFwcGxlc21jX2RldmljZV9pbml0KCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50ayhLRVJOX0lORk8gImFwcGxlc21jOiBkZXZpY2Ugc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwbGVzbWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gYXBwbGVzbWNfZGV2aWNlX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXBwbGVzbWNfZHJpdmVyID0geworCS5wcm9iZSA9IGFwcGxlc21jX3Byb2JlLAorCS5yZXN1bWUgPSBhcHBsZXNtY19yZXN1bWUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAiYXBwbGVzbWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworLyoKKyAqIGFwcGxlc21jX2NhbGlicmF0ZSAtIFNldCBvdXIgInJlc3RpbmciIHZhbHVlcy4gIENhbGxlcnMgbXVzdAorICogaG9sZCBhcHBsZXNtY19sb2NrLgorICovCitzdGF0aWMgdm9pZCBhcHBsZXNtY19jYWxpYnJhdGUodm9pZCkKK3sKKwlhcHBsZXNtY19yZWFkX21vdGlvbl9zZW5zb3IoU0VOU09SX1gsICZyZXN0X3gpOworCWFwcGxlc21jX3JlYWRfbW90aW9uX3NlbnNvcihTRU5TT1JfWSwgJnJlc3RfeSk7CisJcmVzdF94ID0gLXJlc3RfeDsKK30KKworc3RhdGljIGludCBhcHBsZXNtY19pZGV2X29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCWFkZF90aW1lcigmYXBwbGVzbWNfdGltZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGxlc21jX2lkZXZfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCWRlbF90aW1lcl9zeW5jKCZhcHBsZXNtY190aW1lcik7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGxlc21jX2lkZXZfcG9sbCh1bnNpZ25lZCBsb25nIHVudXNlZCkKK3sKKwlzMTYgeCwgeTsKKworCS8qIENhbm5vdCBzbGVlcC4gIFRyeSBub25ibG9ja2luZ2x5LiAgSWYgd2UgZmFpbCwgdHJ5IGFnYWluIGxhdGVyLiAqLworCWlmICghbXV0ZXhfdHJ5bG9jaygmYXBwbGVzbWNfbG9jaykpIHsKKwkJbW9kX3RpbWVyKCZhcHBsZXNtY190aW1lciwgamlmZmllcyArIEFQUExFU01DX1BPTExfUEVSSU9EKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChhcHBsZXNtY19yZWFkX21vdGlvbl9zZW5zb3IoU0VOU09SX1gsICZ4KSkKKwkJZ290byBvdXQ7CisJaWYgKGFwcGxlc21jX3JlYWRfbW90aW9uX3NlbnNvcihTRU5TT1JfWSwgJnkpKQorCQlnb3RvIG91dDsKKworCXggPSAteDsKKwlpbnB1dF9yZXBvcnRfYWJzKGFwcGxlc21jX2lkZXYsIEFCU19YLCB4IC0gcmVzdF94KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGFwcGxlc21jX2lkZXYsIEFCU19ZLCB5IC0gcmVzdF95KTsKKwlpbnB1dF9zeW5jKGFwcGxlc21jX2lkZXYpOworCitvdXQ6CisJbW9kX3RpbWVyKCZhcHBsZXNtY190aW1lciwgamlmZmllcyArIEFQUExFU01DX1BPTExfUEVSSU9EKTsKKworCW11dGV4X3VubG9jaygmYXBwbGVzbWNfbG9jayk7Cit9CisKKy8qIFN5c2ZzIEZpbGVzICovCisKK3N0YXRpYyBzc2l6ZV90IGFwcGxlc21jX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJhcHBsZXNtY1xuIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFwcGxlc21jX3Bvc2l0aW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJaW50IHJldDsKKwlzMTYgeCwgeSwgejsKKworCW11dGV4X2xvY2soJmFwcGxlc21jX2xvY2spOworCisJcmV0ID0gYXBwbGVzbWNfcmVhZF9tb3Rpb25fc2Vuc29yKFNFTlNPUl9YLCAmeCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJcmV0ID0gYXBwbGVzbWNfcmVhZF9tb3Rpb25fc2Vuc29yKFNFTlNPUl9ZLCAmeSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJcmV0ID0gYXBwbGVzbWNfcmVhZF9tb3Rpb25fc2Vuc29yKFNFTlNPUl9aLCAmeik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKK291dDoKKwltdXRleF91bmxvY2soJmFwcGxlc21jX2xvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIoJWQsJWQsJWQpXG4iLCB4LCB5LCB6KTsKK30KKworc3RhdGljIHNzaXplX3QgYXBwbGVzbWNfbGlnaHRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnN5c2ZzYnVmKQoreworCWludCByZXQ7CisJdTggbGVmdCA9IDAsIHJpZ2h0ID0gMDsKKwl1OCBidWZmZXJbNl07CisKKwltdXRleF9sb2NrKCZhcHBsZXNtY19sb2NrKTsKKworCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KExJR0hUX1NFTlNPUl9MRUZUX0tFWSwgYnVmZmVyLCA2KTsKKwlsZWZ0ID0gYnVmZmVyWzJdOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KExJR0hUX1NFTlNPUl9SSUdIVF9LRVksIGJ1ZmZlciwgNik7CisJcmlnaHQgPSBidWZmZXJbMl07CisKK291dDoKKwltdXRleF91bmxvY2soJmFwcGxlc21jX2xvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gc25wcmludGYoc3lzZnNidWYsIFBBR0VfU0laRSwgIiglZCwlZClcbiIsIGxlZnQsIHJpZ2h0KTsKK30KKworLyogRGlzcGxheXMgZGVncmVlIENlbHNpdXMgKiAxMDAwICovCitzdGF0aWMgc3NpemVfdCBhcHBsZXNtY19zaG93X3RlbXBlcmF0dXJlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpzeXNmc2J1ZikKK3sKKwlpbnQgcmV0OworCXU4IGJ1ZmZlclsyXTsKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJY29uc3QgY2hhcioga2V5ID0KKwkJdGVtcGVyYXR1cmVfc2Vuc29yc19zZXRzW2FwcGxlc21jX3RlbXBlcmF0dXJlX3NldF1bYXR0ci0+aW5kZXhdOworCisJbXV0ZXhfbG9jaygmYXBwbGVzbWNfbG9jayk7CisKKwlyZXQgPSBhcHBsZXNtY19yZWFkX2tleShrZXksIGJ1ZmZlciwgMik7CisJdGVtcCA9IGJ1ZmZlclswXSoxMDAwOworCXRlbXAgKz0gKGJ1ZmZlclsxXSA+PiA2KSAqIDI1MDsKKworCW11dGV4X3VubG9jaygmYXBwbGVzbWNfbG9jayk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIHNucHJpbnRmKHN5c2ZzYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgdGVtcCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFwcGxlc21jX3Nob3dfZmFuX3NwZWVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqc3lzZnNidWYpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgc3BlZWQgPSAwOworCWNoYXIgbmV3a2V5WzVdOworCXU4IGJ1ZmZlclsyXTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHIgPQorCQkJCQkJdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisKKwluZXdrZXlbMF0gPSBmYW5fc3BlZWRfa2V5c1tzZW5zb3JfYXR0ci0+bnJdWzBdOworCW5ld2tleVsxXSA9ICcwJyArIHNlbnNvcl9hdHRyLT5pbmRleDsKKwluZXdrZXlbMl0gPSBmYW5fc3BlZWRfa2V5c1tzZW5zb3JfYXR0ci0+bnJdWzJdOworCW5ld2tleVszXSA9IGZhbl9zcGVlZF9rZXlzW3NlbnNvcl9hdHRyLT5ucl1bM107CisJbmV3a2V5WzRdID0gMDsKKworCW11dGV4X2xvY2soJmFwcGxlc21jX2xvY2spOworCisJcmV0ID0gYXBwbGVzbWNfcmVhZF9rZXkobmV3a2V5LCBidWZmZXIsIDIpOworCXNwZWVkID0gKChidWZmZXJbMF0gPDwgOCB8IGJ1ZmZlclsxXSkgPj4gMik7CisKKwltdXRleF91bmxvY2soJmFwcGxlc21jX2xvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gc25wcmludGYoc3lzZnNidWYsIFBBR0VfU0laRSwgIiV1XG4iLCBzcGVlZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFwcGxlc21jX3N0b3JlX2Zhbl9zcGVlZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpzeXNmc2J1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCByZXQ7CisJdTMyIHNwZWVkOworCWNoYXIgbmV3a2V5WzVdOworCXU4IGJ1ZmZlclsyXTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHIgPQorCQkJCQkJdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisKKwlzcGVlZCA9IHNpbXBsZV9zdHJ0b3VsKHN5c2ZzYnVmLCBOVUxMLCAxMCk7CisKKwlpZiAoc3BlZWQgPiAweDQwMDApIC8qIEJpZ2dlciB0aGFuIGEgMTQtYml0IHZhbHVlICovCisJCXJldHVybiAtRUlOVkFMOworCisJbmV3a2V5WzBdID0gZmFuX3NwZWVkX2tleXNbc2Vuc29yX2F0dHItPm5yXVswXTsKKwluZXdrZXlbMV0gPSAnMCcgKyBzZW5zb3JfYXR0ci0+aW5kZXg7CisJbmV3a2V5WzJdID0gZmFuX3NwZWVkX2tleXNbc2Vuc29yX2F0dHItPm5yXVsyXTsKKwluZXdrZXlbM10gPSBmYW5fc3BlZWRfa2V5c1tzZW5zb3JfYXR0ci0+bnJdWzNdOworCW5ld2tleVs0XSA9IDA7CisKKwltdXRleF9sb2NrKCZhcHBsZXNtY19sb2NrKTsKKworCWJ1ZmZlclswXSA9IChzcGVlZCA+PiA2KSAmIDB4ZmY7CisJYnVmZmVyWzFdID0gKHNwZWVkIDw8IDIpICYgMHhmZjsKKwlyZXQgPSBhcHBsZXNtY193cml0ZV9rZXkobmV3a2V5LCBidWZmZXIsIDIpOworCisJbXV0ZXhfdW5sb2NrKCZhcHBsZXNtY19sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhcHBsZXNtY19zaG93X2Zhbl9tYW51YWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKnN5c2ZzYnVmKQoreworCWludCByZXQ7CisJdTE2IG1hbnVhbCA9IDA7CisJdTggYnVmZmVyWzJdOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKworCW11dGV4X2xvY2soJmFwcGxlc21jX2xvY2spOworCisJcmV0ID0gYXBwbGVzbWNfcmVhZF9rZXkoRkFOU19NQU5VQUwsIGJ1ZmZlciwgMik7CisJbWFudWFsID0gKChidWZmZXJbMF0gPDwgOCB8IGJ1ZmZlclsxXSkgPj4gYXR0ci0+aW5kZXgpICYgMHgwMTsKKworCW11dGV4X3VubG9jaygmYXBwbGVzbWNfbG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwllbHNlCisJCXJldHVybiBzbnByaW50ZihzeXNmc2J1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIG1hbnVhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFwcGxlc21jX3N0b3JlX2Zhbl9tYW51YWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkJCSBjb25zdCBjaGFyICpzeXNmc2J1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCByZXQ7CisJdTggYnVmZmVyWzJdOworCXUzMiBpbnB1dDsKKwl1MTYgdmFsOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKworCWlucHV0ID0gc2ltcGxlX3N0cnRvdWwoc3lzZnNidWYsIE5VTEwsIDEwKTsKKworCW11dGV4X2xvY2soJmFwcGxlc21jX2xvY2spOworCisJcmV0ID0gYXBwbGVzbWNfcmVhZF9rZXkoRkFOU19NQU5VQUwsIGJ1ZmZlciwgMik7CisJdmFsID0gKGJ1ZmZlclswXSA8PCA4IHwgYnVmZmVyWzFdKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWlmIChpbnB1dCkKKwkJdmFsID0gdmFsIHwgKDB4MDEgPDwgYXR0ci0+aW5kZXgpOworCWVsc2UKKwkJdmFsID0gdmFsICYgfigweDAxIDw8IGF0dHItPmluZGV4KTsKKworCWJ1ZmZlclswXSA9ICh2YWwgPj4gOCkgJiAweEZGOworCWJ1ZmZlclsxXSA9IHZhbCAmIDB4RkY7CisKKwlyZXQgPSBhcHBsZXNtY193cml0ZV9rZXkoRkFOU19NQU5VQUwsIGJ1ZmZlciwgMik7CisKK291dDoKKwltdXRleF91bmxvY2soJmFwcGxlc21jX2xvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFwcGxlc21jX3Nob3dfZmFuX3Bvc2l0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqc3lzZnNidWYpCit7CisJaW50IHJldDsKKwljaGFyIG5ld2tleVs1XTsKKwl1OCBidWZmZXJbMTddOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0ciA9CisJCQkJCQl0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKworCW5ld2tleVswXSA9IEZBTl9QT1NJVElPTlswXTsKKwluZXdrZXlbMV0gPSAnMCcgKyBzZW5zb3JfYXR0ci0+aW5kZXg7CisJbmV3a2V5WzJdID0gRkFOX1BPU0lUSU9OWzJdOworCW5ld2tleVszXSA9IEZBTl9QT1NJVElPTlszXTsKKwluZXdrZXlbNF0gPSAwOworCisJbXV0ZXhfbG9jaygmYXBwbGVzbWNfbG9jayk7CisKKwlyZXQgPSBhcHBsZXNtY19yZWFkX2tleShuZXdrZXksIGJ1ZmZlciwgMTYpOworCWJ1ZmZlclsxNl0gPSAwOworCisJbXV0ZXhfdW5sb2NrKCZhcHBsZXNtY19sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIHNucHJpbnRmKHN5c2ZzYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgYnVmZmVyKzQpOworfQorCitzdGF0aWMgc3NpemVfdCBhcHBsZXNtY19jYWxpYnJhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnN5c2ZzYnVmKQoreworCXJldHVybiBzbnByaW50ZihzeXNmc2J1ZiwgUEFHRV9TSVpFLCAiKCVkLCVkKVxuIiwgcmVzdF94LCByZXN0X3kpOworfQorCitzdGF0aWMgc3NpemVfdCBhcHBsZXNtY19jYWxpYnJhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpzeXNmc2J1Ziwgc2l6ZV90IGNvdW50KQoreworCW11dGV4X2xvY2soJmFwcGxlc21jX2xvY2spOworCWFwcGxlc21jX2NhbGlicmF0ZSgpOworCW11dGV4X3VubG9jaygmYXBwbGVzbWNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIFN0b3JlIHRoZSBuZXh0IGJhY2tsaWdodCB2YWx1ZSB0byBiZSB3cml0dGVuIGJ5IHRoZSB3b3JrICovCitzdGF0aWMgdW5zaWduZWQgaW50IGJhY2tsaWdodF92YWx1ZTsKKworc3RhdGljIHZvaWQgYXBwbGVzbWNfYmFja2xpZ2h0X3NldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJdTggYnVmZmVyWzJdOworCisJbXV0ZXhfbG9jaygmYXBwbGVzbWNfbG9jayk7CisJYnVmZmVyWzBdID0gYmFja2xpZ2h0X3ZhbHVlOworCWJ1ZmZlclsxXSA9IDB4MDA7CisJYXBwbGVzbWNfd3JpdGVfa2V5KEJBQ0tMSUdIVF9LRVksIGJ1ZmZlciwgMik7CisJbXV0ZXhfdW5sb2NrKCZhcHBsZXNtY19sb2NrKTsKK30KK3N0YXRpYyBERUNMQVJFX1dPUksoYmFja2xpZ2h0X3dvcmssICZhcHBsZXNtY19iYWNrbGlnaHRfc2V0KTsKKworc3RhdGljIHZvaWQgYXBwbGVzbWNfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJCQllbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCWludCByZXQ7CisKKwliYWNrbGlnaHRfdmFsdWUgPSB2YWx1ZTsKKwlyZXQgPSBxdWV1ZV93b3JrKGFwcGxlc21jX2xlZF93cSwgJmJhY2tsaWdodF93b3JrKTsKKworCWlmIChkZWJ1ZyAmJiAoIXJldCkpCisJCXByaW50ayhLRVJOX0RFQlVHICJhcHBsZXNtYzogd29yayB3YXMgYWxyZWFkeSBvbiB0aGUgcXVldWUuXG4iKTsKK30KKworc3RhdGljIHNzaXplX3QgYXBwbGVzbWNfa2V5X2NvdW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpzeXNmc2J1ZikKK3sKKwlpbnQgcmV0OworCXU4IGJ1ZmZlcls0XTsKKwl1MzIgY291bnQ7CisKKwltdXRleF9sb2NrKCZhcHBsZXNtY19sb2NrKTsKKworCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KEtFWV9DT1VOVF9LRVksIGJ1ZmZlciwgNCk7CisJY291bnQgPSAoKHUzMilidWZmZXJbMF08PDI0KSArICgodTMyKWJ1ZmZlclsxXTw8MTYpICsKKwkJCQkJCSgodTMyKWJ1ZmZlclsyXTw8OCkgKyBidWZmZXJbM107CisKKwltdXRleF91bmxvY2soJmFwcGxlc21jX2xvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gc25wcmludGYoc3lzZnNidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBjb3VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFwcGxlc21jX2tleV9hdF9pbmRleF9yZWFkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpzeXNmc2J1ZikKK3sKKwljaGFyIGtleVs1XTsKKwljaGFyIGluZm9bNl07CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmFwcGxlc21jX2xvY2spOworCisJcmV0ID0gYXBwbGVzbWNfZ2V0X2tleV9hdF9pbmRleChrZXlfYXRfaW5kZXgsIGtleSk7CisKKwlpZiAocmV0IHx8ICFrZXlbMF0pIHsKKwkJbXV0ZXhfdW5sb2NrKCZhcHBsZXNtY19sb2NrKTsKKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBhcHBsZXNtY19nZXRfa2V5X3R5cGUoa2V5LCBpbmZvKTsKKworCWlmIChyZXQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZhcHBsZXNtY19sb2NrKTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogaW5mb1swXSBtYXhpbXVtIHZhbHVlIChBUFBMRVNNQ19NQVhfREFUQV9MRU5HVEgpIGlzIG11Y2ggbG93ZXIgdGhhbgorCSAqIFBBR0VfU0laRSwgc28gd2UgZG9uJ3QgbmVlZCBhbnkgY2hlY2tzIGJlZm9yZSB3cml0aW5nIHRvIHN5c2ZzYnVmLgorCSAqLworCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KGtleSwgc3lzZnNidWYsIGluZm9bMF0pOworCisJbXV0ZXhfdW5sb2NrKCZhcHBsZXNtY19sb2NrKTsKKworCWlmICghcmV0KSB7CisJCXJldHVybiBpbmZvWzBdOworCX0KKwllbHNlIHsKKwkJcmV0dXJuIHJldDsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFwcGxlc21jX2tleV9hdF9pbmRleF9kYXRhX2xlbmd0aF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqc3lzZnNidWYpCit7CisJY2hhciBrZXlbNV07CisJY2hhciBpbmZvWzZdOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZhcHBsZXNtY19sb2NrKTsKKworCXJldCA9IGFwcGxlc21jX2dldF9rZXlfYXRfaW5kZXgoa2V5X2F0X2luZGV4LCBrZXkpOworCisJaWYgKHJldCB8fCAha2V5WzBdKSB7CisJCW11dGV4X3VubG9jaygmYXBwbGVzbWNfbG9jayk7CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gYXBwbGVzbWNfZ2V0X2tleV90eXBlKGtleSwgaW5mbyk7CisKKwltdXRleF91bmxvY2soJmFwcGxlc21jX2xvY2spOworCisJaWYgKCFyZXQpCisJCXJldHVybiBzbnByaW50ZihzeXNmc2J1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGluZm9bMF0pOworCWVsc2UKKwkJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgYXBwbGVzbWNfa2V5X2F0X2luZGV4X3R5cGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnN5c2ZzYnVmKQoreworCWNoYXIga2V5WzVdOworCWNoYXIgaW5mb1s2XTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmYXBwbGVzbWNfbG9jayk7CisKKwlyZXQgPSBhcHBsZXNtY19nZXRfa2V5X2F0X2luZGV4KGtleV9hdF9pbmRleCwga2V5KTsKKworCWlmIChyZXQgfHwgIWtleVswXSkgeworCQltdXRleF91bmxvY2soJmFwcGxlc21jX2xvY2spOworCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGFwcGxlc21jX2dldF9rZXlfdHlwZShrZXksIGluZm8pOworCisJbXV0ZXhfdW5sb2NrKCZhcHBsZXNtY19sb2NrKTsKKworCWlmICghcmV0KQorCQlyZXR1cm4gc25wcmludGYoc3lzZnNidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBpbmZvKzEpOworCWVsc2UKKwkJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgYXBwbGVzbWNfa2V5X2F0X2luZGV4X25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnN5c2ZzYnVmKQoreworCWNoYXIga2V5WzVdOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZhcHBsZXNtY19sb2NrKTsKKworCXJldCA9IGFwcGxlc21jX2dldF9rZXlfYXRfaW5kZXgoa2V5X2F0X2luZGV4LCBrZXkpOworCisJbXV0ZXhfdW5sb2NrKCZhcHBsZXNtY19sb2NrKTsKKworCWlmICghcmV0ICYmIGtleVswXSkKKwkJcmV0dXJuIHNucHJpbnRmKHN5c2ZzYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwga2V5KTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3NpemVfdCBhcHBsZXNtY19rZXlfYXRfaW5kZXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnN5c2ZzYnVmKQoreworCXJldHVybiBzbnByaW50ZihzeXNmc2J1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGtleV9hdF9pbmRleCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFwcGxlc21jX2tleV9hdF9pbmRleF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKnN5c2ZzYnVmLCBzaXplX3QgY291bnQpCit7CisJbXV0ZXhfbG9jaygmYXBwbGVzbWNfbG9jayk7CisKKwlrZXlfYXRfaW5kZXggPSBzaW1wbGVfc3RydG91bChzeXNmc2J1ZiwgTlVMTCwgMTApOworCisJbXV0ZXhfdW5sb2NrKCZhcHBsZXNtY19sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgYXBwbGVzbWNfYmFja2xpZ2h0ID0geworCS5uYW1lCQkJPSAic21jOmtiZF9iYWNrbGlnaHQiLAorCS5kZWZhdWx0X3RyaWdnZXIJPSAibmFuZC1kaXNrIiwKKwkuYnJpZ2h0bmVzc19zZXQJCT0gYXBwbGVzbWNfYnJpZ2h0bmVzc19zZXQsCit9OworCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgMDQ0NCwgYXBwbGVzbWNfbmFtZV9zaG93LCBOVUxMKTsKKworc3RhdGljIERFVklDRV9BVFRSKHBvc2l0aW9uLCAwNDQ0LCBhcHBsZXNtY19wb3NpdGlvbl9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjYWxpYnJhdGUsIDA2NDQsCisJCQlhcHBsZXNtY19jYWxpYnJhdGVfc2hvdywgYXBwbGVzbWNfY2FsaWJyYXRlX3N0b3JlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFjY2VsZXJvbWV0ZXJfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9wb3NpdGlvbi5hdHRyLAorCSZkZXZfYXR0cl9jYWxpYnJhdGUuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhY2NlbGVyb21ldGVyX2F0dHJpYnV0ZXNfZ3JvdXAgPQorCXsgLmF0dHJzID0gYWNjZWxlcm9tZXRlcl9hdHRyaWJ1dGVzIH07CisKK3N0YXRpYyBERVZJQ0VfQVRUUihsaWdodCwgMDQ0NCwgYXBwbGVzbWNfbGlnaHRfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBERVZJQ0VfQVRUUihrZXlfY291bnQsIDA0NDQsIGFwcGxlc21jX2tleV9jb3VudF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihrZXlfYXRfaW5kZXgsIDA2NDQsCisJCWFwcGxlc21jX2tleV9hdF9pbmRleF9zaG93LCBhcHBsZXNtY19rZXlfYXRfaW5kZXhfc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKGtleV9hdF9pbmRleF9uYW1lLCAwNDQ0LAorCQkJCQlhcHBsZXNtY19rZXlfYXRfaW5kZXhfbmFtZV9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihrZXlfYXRfaW5kZXhfdHlwZSwgMDQ0NCwKKwkJCQkJYXBwbGVzbWNfa2V5X2F0X2luZGV4X3R5cGVfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoa2V5X2F0X2luZGV4X2RhdGFfbGVuZ3RoLCAwNDQ0LAorCQkJCWFwcGxlc21jX2tleV9hdF9pbmRleF9kYXRhX2xlbmd0aF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihrZXlfYXRfaW5kZXhfZGF0YSwgMDQ0NCwKKwkJCQlhcHBsZXNtY19rZXlfYXRfaW5kZXhfcmVhZF9zaG93LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmtleV9lbnVtZXJhdGlvbl9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2tleV9jb3VudC5hdHRyLAorCSZkZXZfYXR0cl9rZXlfYXRfaW5kZXguYXR0ciwKKwkmZGV2X2F0dHJfa2V5X2F0X2luZGV4X25hbWUuYXR0ciwKKwkmZGV2X2F0dHJfa2V5X2F0X2luZGV4X3R5cGUuYXR0ciwKKwkmZGV2X2F0dHJfa2V5X2F0X2luZGV4X2RhdGFfbGVuZ3RoLmF0dHIsCisJJmRldl9hdHRyX2tleV9hdF9pbmRleF9kYXRhLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAga2V5X2VudW1lcmF0aW9uX2dyb3VwID0KKwl7IC5hdHRycyA9IGtleV9lbnVtZXJhdGlvbl9hdHRyaWJ1dGVzIH07CisKKy8qCisgKiBNYWNybyBkZWZpbmluZyBTRU5TT1JfREVWSUNFX0FUVFIgZm9yIGEgZmFuIHN5c2ZzIGVudHJpZXMuCisgKiAgLSBzaG93IGFjdHVhbCBzcGVlZAorICogIC0gc2hvdy9zdG9yZSBtaW5pbXVtIHNwZWVkCisgKiAgLSBzaG93IG1heGltdW0gc3BlZWQKKyAqICAtIHNob3cgc2FmZSBzcGVlZAorICogIC0gc2hvdy9zdG9yZSB0YXJnZXQgc3BlZWQKKyAqICAtIHNob3cvc3RvcmUgbWFudWFsIG1vZGUKKyAqLworI2RlZmluZSBzeXNmc19mYW5fc3BlZWRzX29mZnNldChvZmZzZXQpIFwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihmYW4jI29mZnNldCMjX2lucHV0LCBTX0lSVUdPLCBcCisJCQlhcHBsZXNtY19zaG93X2Zhbl9zcGVlZCwgTlVMTCwgMCwgb2Zmc2V0LTEpOyBcCitcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoZmFuIyNvZmZzZXQjI19taW4sIFNfSVJVR08gfCBTX0lXVVNSLCBcCisJYXBwbGVzbWNfc2hvd19mYW5fc3BlZWQsIGFwcGxlc21jX3N0b3JlX2Zhbl9zcGVlZCwgMSwgb2Zmc2V0LTEpOyBcCitcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoZmFuIyNvZmZzZXQjI19tYXgsIFNfSVJVR08sIFwKKwkJCWFwcGxlc21jX3Nob3dfZmFuX3NwZWVkLCBOVUxMLCAyLCBvZmZzZXQtMSk7IFwKK1wKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihmYW4jI29mZnNldCMjX3NhZmUsIFNfSVJVR08sIFwKKwkJCWFwcGxlc21jX3Nob3dfZmFuX3NwZWVkLCBOVUxMLCAzLCBvZmZzZXQtMSk7IFwKK1wKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihmYW4jI29mZnNldCMjX291dHB1dCwgU19JUlVHTyB8IFNfSVdVU1IsIFwKKwlhcHBsZXNtY19zaG93X2Zhbl9zcGVlZCwgYXBwbGVzbWNfc3RvcmVfZmFuX3NwZWVkLCA0LCBvZmZzZXQtMSk7IFwKK1wKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19tYW51YWwsIFNfSVJVR08gfCBTX0lXVVNSLCBcCisJYXBwbGVzbWNfc2hvd19mYW5fbWFudWFsLCBhcHBsZXNtY19zdG9yZV9mYW5fbWFudWFsLCBvZmZzZXQtMSk7IFwKK1wKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19sYWJlbCwgU19JUlVHTywgXAorCWFwcGxlc21jX3Nob3dfZmFuX3Bvc2l0aW9uLCBOVUxMLCBvZmZzZXQtMSk7IFwKK1wKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmYW4jI29mZnNldCMjX2F0dHJpYnV0ZXNbXSA9IHsgXAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19pbnB1dC5kZXZfYXR0ci5hdHRyLCBcCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4jI29mZnNldCMjX21pbi5kZXZfYXR0ci5hdHRyLCBcCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4jI29mZnNldCMjX21heC5kZXZfYXR0ci5hdHRyLCBcCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4jI29mZnNldCMjX3NhZmUuZGV2X2F0dHIuYXR0ciwgXAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19vdXRwdXQuZGV2X2F0dHIuYXR0ciwgXAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19tYW51YWwuZGV2X2F0dHIuYXR0ciwgXAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19sYWJlbC5kZXZfYXR0ci5hdHRyLCBcCisJTlVMTCBcCit9OworCisvKgorICogQ3JlYXRlIHRoZSBuZWVkZWQgZnVuY3Rpb25zIGZvciBlYWNoIGZhbiB1c2luZyB0aGUgbWFjcm8gZGVmaW5lZCBhYm92ZQorICogKDIgZmFucyBhcmUgc3VwcG9ydGVkKQorICovCitzeXNmc19mYW5fc3BlZWRzX29mZnNldCgxKTsKK3N5c2ZzX2Zhbl9zcGVlZHNfb2Zmc2V0KDIpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBmYW5fYXR0cmlidXRlX2dyb3Vwc1tdID0geworCXsgLmF0dHJzID0gZmFuMV9hdHRyaWJ1dGVzIH0sCisJeyAuYXR0cnMgPSBmYW4yX2F0dHJpYnV0ZXMgfQorfTsKKworLyoKKyAqIFRlbXBlcmF0dXJlIHNlbnNvcnMgc3lzZnMgZW50cmllcy4KKyAqLworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywKKwkJCQkJYXBwbGVzbWNfc2hvd190ZW1wZXJhdHVyZSwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2lucHV0LCBTX0lSVUdPLAorCQkJCQlhcHBsZXNtY19zaG93X3RlbXBlcmF0dXJlLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sCisJCQkJCWFwcGxlc21jX3Nob3dfdGVtcGVyYXR1cmUsIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNF9pbnB1dCwgU19JUlVHTywKKwkJCQkJYXBwbGVzbWNfc2hvd190ZW1wZXJhdHVyZSwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA1X2lucHV0LCBTX0lSVUdPLAorCQkJCQlhcHBsZXNtY19zaG93X3RlbXBlcmF0dXJlLCBOVUxMLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDZfaW5wdXQsIFNfSVJVR08sCisJCQkJCWFwcGxlc21jX3Nob3dfdGVtcGVyYXR1cmUsIE5VTEwsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wN19pbnB1dCwgU19JUlVHTywKKwkJCQkJYXBwbGVzbWNfc2hvd190ZW1wZXJhdHVyZSwgTlVMTCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA4X2lucHV0LCBTX0lSVUdPLAorCQkJCQlhcHBsZXNtY19zaG93X3RlbXBlcmF0dXJlLCBOVUxMLCA3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDlfaW5wdXQsIFNfSVJVR08sCisJCQkJCWFwcGxlc21jX3Nob3dfdGVtcGVyYXR1cmUsIE5VTEwsIDgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMTBfaW5wdXQsIFNfSVJVR08sCisJCQkJCWFwcGxlc21jX3Nob3dfdGVtcGVyYXR1cmUsIE5VTEwsIDkpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMTFfaW5wdXQsIFNfSVJVR08sCisJCQkJCWFwcGxlc21jX3Nob3dfdGVtcGVyYXR1cmUsIE5VTEwsIDEwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDEyX2lucHV0LCBTX0lSVUdPLAorCQkJCQlhcHBsZXNtY19zaG93X3RlbXBlcmF0dXJlLCBOVUxMLCAxMSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0ZW1wZXJhdHVyZV9hdHRyaWJ1dGVzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA2X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wN19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDhfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA5X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMTBfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDEyX2lucHV0LmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdGVtcGVyYXR1cmVfYXR0cmlidXRlc19ncm91cCA9CisJeyAuYXR0cnMgPSB0ZW1wZXJhdHVyZV9hdHRyaWJ1dGVzIH07CisKKy8qIE1vZHVsZSBzdHVmZiAqLworCisvKgorICogYXBwbGVzbWNfZG1pX21hdGNoIC0gZm91bmQgYSBtYXRjaC4gIHJldHVybiBvbmUsIHNob3J0LWNpcmN1aXRpbmcgdGhlIGh1bnQuCisgKi8KK3N0YXRpYyBpbnQgYXBwbGVzbWNfZG1pX21hdGNoKHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IGRtaV9tYXRjaF9kYXRhKiBkbWlfZGF0YSA9IGlkLT5kcml2ZXJfZGF0YTsKKwlwcmludGsoS0VSTl9JTkZPICJhcHBsZXNtYzogJXMgZGV0ZWN0ZWQ6XG4iLCBpZC0+aWRlbnQpOworCWFwcGxlc21jX2FjY2VsZXJvbWV0ZXIgPSBkbWlfZGF0YS0+YWNjZWxlcm9tZXRlcjsKKwlwcmludGsoS0VSTl9JTkZPICJhcHBsZXNtYzogIC0gTW9kZWwgJXMgYWNjZWxlcm9tZXRlclxuIiwKKwkJCQlhcHBsZXNtY19hY2NlbGVyb21ldGVyID8gIndpdGgiIDogIndpdGhvdXQiKTsKKwlhcHBsZXNtY19saWdodCA9IGRtaV9kYXRhLT5saWdodDsKKwlwcmludGsoS0VSTl9JTkZPICJhcHBsZXNtYzogIC0gTW9kZWwgJXMgbGlnaHQgc2Vuc29ycyBhbmQgYmFja2xpZ2h0XG4iLAorCQkJCQlhcHBsZXNtY19saWdodCA/ICJ3aXRoIiA6ICJ3aXRob3V0Iik7CisKKwlhcHBsZXNtY190ZW1wZXJhdHVyZV9zZXQgPSAgZG1pX2RhdGEtPnRlbXBlcmF0dXJlX3NldDsKKwl3aGlsZSAodGVtcGVyYXR1cmVfc2Vuc29yc19zZXRzW2FwcGxlc21jX3RlbXBlcmF0dXJlX3NldF1baV0gIT0gTlVMTCkKKwkJaSsrOworCXByaW50ayhLRVJOX0lORk8gImFwcGxlc21jOiAgLSBNb2RlbCB3aXRoICVkIHRlbXBlcmF0dXJlIHNlbnNvcnNcbiIsIGkpOworCXJldHVybiAxOworfQorCisvKiBDcmVhdGUgYWNjZWxlcm9tZXRlciByZXNzb3VyY2VzICovCitzdGF0aWMgaW50IGFwcGxlc21jX2NyZWF0ZV9hY2NlbGVyb21ldGVyKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosCisJCQkJCSZhY2NlbGVyb21ldGVyX2F0dHJpYnV0ZXNfZ3JvdXApOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJYXBwbGVzbWNfaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghYXBwbGVzbWNfaWRldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9zeXNmczsKKwl9CisKKwkvKiBpbml0aWFsIGNhbGlicmF0ZSBmb3IgdGhlIGlucHV0IGRldmljZSAqLworCWFwcGxlc21jX2NhbGlicmF0ZSgpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgaW5wdXQgY2xhc3MgKi8KKwlhcHBsZXNtY19pZGV2LT5uYW1lID0gImFwcGxlc21jIjsKKwlhcHBsZXNtY19pZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJYXBwbGVzbWNfaWRldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJYXBwbGVzbWNfaWRldi0+ZXZiaXRbMF0gPSBCSVQoRVZfQUJTKTsKKwlhcHBsZXNtY19pZGV2LT5vcGVuID0gYXBwbGVzbWNfaWRldl9vcGVuOworCWFwcGxlc21jX2lkZXYtPmNsb3NlID0gYXBwbGVzbWNfaWRldl9jbG9zZTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhhcHBsZXNtY19pZGV2LCBBQlNfWCwKKwkJCS0yNTYsIDI1NiwgQVBQTEVTTUNfSU5QVVRfRlVaWiwgQVBQTEVTTUNfSU5QVVRfRkxBVCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoYXBwbGVzbWNfaWRldiwgQUJTX1ksCisJCQktMjU2LCAyNTYsIEFQUExFU01DX0lOUFVUX0ZVWlosIEFQUExFU01DX0lOUFVUX0ZMQVQpOworCisJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGFwcGxlc21jX2lkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2lkZXY7CisKKwkvKiBzdGFydCB1cCBvdXIgdGltZXIgZm9yIHRoZSBpbnB1dCBkZXZpY2UgKi8KKwlpbml0X3RpbWVyKCZhcHBsZXNtY190aW1lcik7CisJYXBwbGVzbWNfdGltZXIuZnVuY3Rpb24gPSBhcHBsZXNtY19pZGV2X3BvbGw7CisJYXBwbGVzbWNfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBBUFBMRVNNQ19QT0xMX1BFUklPRDsKKworCXJldHVybiAwOworCitvdXRfaWRldjoKKwlpbnB1dF9mcmVlX2RldmljZShhcHBsZXNtY19pZGV2KTsKKworb3V0X3N5c2ZzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZhY2NlbGVyb21ldGVyX2F0dHJpYnV0ZXNfZ3JvdXApOworCitvdXQ6CisJcHJpbnRrKEtFUk5fV0FSTklORyAiYXBwbGVzbWM6IGRyaXZlciBpbml0IGZhaWxlZCAocmV0PSVkKSFcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyogUmVsZWFzZSBhbGwgcmVzc291cmNlcyB1c2VkIGJ5IHRoZSBhY2NlbGVyb21ldGVyICovCitzdGF0aWMgdm9pZCBhcHBsZXNtY19yZWxlYXNlX2FjY2VsZXJvbWV0ZXIodm9pZCkKK3sKKwlkZWxfdGltZXJfc3luYygmYXBwbGVzbWNfdGltZXIpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGFwcGxlc21jX2lkZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZhY2NlbGVyb21ldGVyX2F0dHJpYnV0ZXNfZ3JvdXApOworfQorCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3QgZG1pX21hdGNoX2RhdGEgYXBwbGVzbWNfZG1pX2RhdGFbXSA9IHsKKy8qIE1hY0Jvb2sgUHJvOiBhY2NlbGVyb21ldGVyLCBiYWNrbGlnaHQgYW5kIHRlbXBlcmF0dXJlIHNldCAwICovCisJeyAuYWNjZWxlcm9tZXRlciA9IDEsIC5saWdodCA9IDEsIC50ZW1wZXJhdHVyZV9zZXQgPSAwIH0sCisvKiBNYWNCb29rOiBhY2NlbGVyb21ldGVyIGFuZCB0ZW1wZXJhdHVyZSBzZXQgMCAqLworCXsgLmFjY2VsZXJvbWV0ZXIgPSAxLCAubGlnaHQgPSAwLCAudGVtcGVyYXR1cmVfc2V0ID0gMCB9LAorLyogTWFjQm9vazogdGVtcGVyYXR1cmUgc2V0IDEgKi8KKwl7IC5hY2NlbGVyb21ldGVyID0gMCwgLmxpZ2h0ID0gMCwgLnRlbXBlcmF0dXJlX3NldCA9IDEgfQorfTsKKworLyogTm90ZSB0aGF0IERNSV9NQVRDSCguLi4sIk1hY0Jvb2siKSB3aWxsIG1hdGNoICJNYWNCb29rUHJvMSwxIi4KKyAqIFNvIHdlIG5lZWQgdG8gcHV0ICJBcHBsZSBNYWNCb29rIFBybyIgYmVmb3JlICJBcHBsZSBNYWNCb29rIi4gKi8KK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGFwcGxlc21jX3doaXRlbGlzdFtdID0geworCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayBQcm8iLCB7CisJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rUHJvIikgfSwKKwkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVswXX0sCisJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIiwgeworCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCisJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjQm9vayIpIH0sCisJCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbMV19LAorCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjbWluaSIsIHsKKwkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAorCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY21pbmkiKSB9LAorCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzJdfSwKKwl7IC5pZGVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIGludCBfX2luaXQgYXBwbGVzbWNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50IGNvdW50OworCWludCBpOworCisJbXV0ZXhfaW5pdCgmYXBwbGVzbWNfbG9jayk7CisKKwlpZiAoIWRtaV9jaGVja19zeXN0ZW0oYXBwbGVzbWNfd2hpdGVsaXN0KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhcHBsZXNtYzogc3VwcG9ydGVkIGxhcHRvcCBub3QgZm91bmQhXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihBUFBMRVNNQ19EQVRBX1BPUlQsIEFQUExFU01DX05SX1BPUlRTLAorCQkJCQkJCQkiYXBwbGVzbWMiKSkgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXBwbGVzbWNfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZWdpb247CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiYXBwbGVzbWMiLCBBUFBMRVNNQ19EQVRBX1BPUlQsCisJCQkJCSAgICAgICBOVUxMLCAwKTsKKwlpZiAoSVNfRVJSKHBkZXYpKSB7CisJCXJldCA9IFBUUl9FUlIocGRldik7CisJCWdvdG8gb3V0X2RyaXZlcjsKKwl9CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LmtvYmosICZkZXZfYXR0cl9uYW1lLmF0dHIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2RldmljZTsKKworCS8qIENyZWF0ZSBrZXkgZW51bWVyYXRpb24gc3lzZnMgZmlsZXMgKi8KKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAma2V5X2VudW1lcmF0aW9uX2dyb3VwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9uYW1lOworCisJLyogY3JlYXRlIGZhbiBmaWxlcyAqLworCWNvdW50ID0gYXBwbGVzbWNfZ2V0X2Zhbl9jb3VudCgpOworCWlmIChjb3VudCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhcHBsZXNtYzogQ2Fubm90IGdldCB0aGUgbnVtYmVyIG9mIGZhbnMuXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJhcHBsZXNtYzogJWQgZmFucyBmb3VuZC5cbiIsIGNvdW50KTsKKworCQlzd2l0Y2ggKGNvdW50KSB7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhcHBsZXNtYzogTW9yZSB0aGFuIDIgZmFucyBmb3VuZCwiCisJCQkJCSIgYnV0IGF0IG1vc3QgMiBmYW5zIGFyZSBzdXBwb3J0ZWQiCisJCQkJCQkiIGJ5IHRoZSBkcml2ZXIuXG4iKTsKKwkJY2FzZSAyOgorCQkJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwKKwkJCQkJCSAmZmFuX2F0dHJpYnV0ZV9ncm91cHNbMV0pOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dF9rZXlfZW51bWVyYXRpb247CisJCWNhc2UgMToKKwkJCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosCisJCQkJCQkgJmZhbl9hdHRyaWJ1dGVfZ3JvdXBzWzBdKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXRfZmFuXzE7CisJCWNhc2UgMDoKKwkJCTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7CisJICAgICB0ZW1wZXJhdHVyZV9zZW5zb3JzX3NldHNbYXBwbGVzbWNfdGVtcGVyYXR1cmVfc2V0XVtpXSAhPSBOVUxMOworCSAgICAgaSsrKSB7CisJCWlmICh0ZW1wZXJhdHVyZV9hdHRyaWJ1dGVzW2ldID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiYXBwbGVzbWM6IE1vcmUgdGVtcGVyYXR1cmUgc2Vuc29ycyAiCisJCQkJImluIHRlbXBlcmF0dXJlX3NlbnNvcnNfc2V0cyAoYXQgbGVhc3QgJWkpIgorCQkJCSJ0aGFuIGF2YWlsYWJsZSBzeXNmcyBmaWxlcyBpbiAiCisJCQkJInRlbXBlcmF0dXJlX2F0dHJpYnV0ZXMgKCVpKSwgcGxlYXNlIHJlcG9ydCAiCisJCQkJInRoaXMgYnVnLlxuIiwgaSwgaS0xKTsKKwkJCWdvdG8gb3V0X3RlbXBlcmF0dXJlOworCQl9CisJCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYua29iaiwKKwkJCQkJCXRlbXBlcmF0dXJlX2F0dHJpYnV0ZXNbaV0pOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfdGVtcGVyYXR1cmU7CisJfQorCisJaWYgKGFwcGxlc21jX2FjY2VsZXJvbWV0ZXIpIHsKKwkJcmV0ID0gYXBwbGVzbWNfY3JlYXRlX2FjY2VsZXJvbWV0ZXIoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X3RlbXBlcmF0dXJlOworCX0KKworCWlmIChhcHBsZXNtY19saWdodCkgeworCQkvKiBBZGQgbGlnaHQgc2Vuc29yIGZpbGUgKi8KKwkJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCAmZGV2X2F0dHJfbGlnaHQuYXR0cik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9hY2NlbGVyb21ldGVyOworCisJCS8qIENyZWF0ZSB0aGUgd29ya3F1ZXVlICovCisJCWFwcGxlc21jX2xlZF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJhcHBsZXNtYy1sZWQiKTsKKwkJaWYgKCFhcHBsZXNtY19sZWRfd3EpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9saWdodF9zeXNmczsKKwkJfQorCisJCS8qIHJlZ2lzdGVyIGFzIGEgbGVkIGRldmljZSAqLworCQlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJmFwcGxlc21jX2JhY2tsaWdodCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfbGlnaHRfd3E7CisJfQorCisJaHdtb25fY2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOworCWlmIChJU19FUlIoaHdtb25fY2xhc3NfZGV2KSkgeworCQlyZXQgPSBQVFJfRVJSKGh3bW9uX2NsYXNzX2Rldik7CisJCWdvdG8gb3V0X2xpZ2h0X2xlZGNsYXNzOworCX0KKworCXByaW50ayhLRVJOX0lORk8gImFwcGxlc21jOiBkcml2ZXIgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiIpOworCisJcmV0dXJuIDA7CisKK291dF9saWdodF9sZWRjbGFzczoKKwlpZiAoYXBwbGVzbWNfbGlnaHQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZhcHBsZXNtY19iYWNrbGlnaHQpOworb3V0X2xpZ2h0X3dxOgorCWlmIChhcHBsZXNtY19saWdodCkKKwkJZGVzdHJveV93b3JrcXVldWUoYXBwbGVzbWNfbGVkX3dxKTsKK291dF9saWdodF9zeXNmczoKKwlpZiAoYXBwbGVzbWNfbGlnaHQpCisJCXN5c2ZzX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYua29iaiwgJmRldl9hdHRyX2xpZ2h0LmF0dHIpOworb3V0X2FjY2VsZXJvbWV0ZXI6CisJaWYgKGFwcGxlc21jX2FjY2VsZXJvbWV0ZXIpCisJCWFwcGxlc21jX3JlbGVhc2VfYWNjZWxlcm9tZXRlcigpOworb3V0X3RlbXBlcmF0dXJlOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ0ZW1wZXJhdHVyZV9hdHRyaWJ1dGVzX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZmFuX2F0dHJpYnV0ZV9ncm91cHNbMF0pOworb3V0X2Zhbl8xOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZmYW5fYXR0cmlidXRlX2dyb3Vwc1sxXSk7CitvdXRfa2V5X2VudW1lcmF0aW9uOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZrZXlfZW51bWVyYXRpb25fZ3JvdXApOworb3V0X25hbWU6CisJc3lzZnNfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCAmZGV2X2F0dHJfbmFtZS5hdHRyKTsKK291dF9kZXZpY2U6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CitvdXRfZHJpdmVyOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhcHBsZXNtY19kcml2ZXIpOworb3V0X3JlZ2lvbjoKKwlyZWxlYXNlX3JlZ2lvbihBUFBMRVNNQ19EQVRBX1BPUlQsIEFQUExFU01DX05SX1BPUlRTKTsKK291dDoKKwlwcmludGsoS0VSTl9XQVJOSU5HICJhcHBsZXNtYzogZHJpdmVyIGluaXQgZmFpbGVkIChyZXQ9JWQpIVxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXBwbGVzbWNfZXhpdCh2b2lkKQoreworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uX2NsYXNzX2Rldik7CisJaWYgKGFwcGxlc21jX2xpZ2h0KSB7CisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZhcHBsZXNtY19iYWNrbGlnaHQpOworCQlkZXN0cm95X3dvcmtxdWV1ZShhcHBsZXNtY19sZWRfd3EpOworCQlzeXNmc19yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LmtvYmosICZkZXZfYXR0cl9saWdodC5hdHRyKTsKKwl9CisJaWYgKGFwcGxlc21jX2FjY2VsZXJvbWV0ZXIpCisJCWFwcGxlc21jX3JlbGVhc2VfYWNjZWxlcm9tZXRlcigpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ0ZW1wZXJhdHVyZV9hdHRyaWJ1dGVzX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZmFuX2F0dHJpYnV0ZV9ncm91cHNbMF0pOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZmYW5fYXR0cmlidXRlX2dyb3Vwc1sxXSk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmtleV9lbnVtZXJhdGlvbl9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCAmZGV2X2F0dHJfbmFtZS5hdHRyKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXBwbGVzbWNfZHJpdmVyKTsKKwlyZWxlYXNlX3JlZ2lvbihBUFBMRVNNQ19EQVRBX1BPUlQsIEFQUExFU01DX05SX1BPUlRTKTsKKworCXByaW50ayhLRVJOX0lORk8gImFwcGxlc21jOiBkcml2ZXIgdW5sb2FkZWQuXG4iKTsKK30KKworbW9kdWxlX2luaXQoYXBwbGVzbWNfaW5pdCk7Cittb2R1bGVfZXhpdChhcHBsZXNtY19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTmljb2xhcyBCb2ljaGF0Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFwcGxlIFNNQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9jb3JldGVtcC5jIGIvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMjgzODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgKiBjb3JldGVtcC5jIC0gTGludXgga2VybmVsIG1vZHVsZSBmb3IgaGFyZHdhcmUgbW9uaXRvcmluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgorICoKKyAqIEluc3BpcmVkIGZyb20gbWFueSBod21vbiBkcml2ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNkZWZpbmUgRFJWTkFNRQkiY29yZXRlbXAiCisKK3R5cGVkZWYgZW51bSB7IFNIT1dfVEVNUCwgU0hPV19USk1BWCwgU0hPV19MQUJFTCwgU0hPV19OQU1FIH0gU0hPVzsKKworLyoKKyAqIEZ1bmN0aW9ucyBkZWNsYXJhdGlvbgorICovCisKK3N0YXRpYyBzdHJ1Y3QgY29yZXRlbXBfZGF0YSAqY29yZXRlbXBfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCitzdHJ1Y3QgY29yZXRlbXBfZGF0YSB7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKKwljb25zdCBjaGFyICpuYW1lOworCXUzMiBpZDsKKwljaGFyIHZhbGlkOwkJLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBpbiBqaWZmaWVzICovCisJaW50IHRlbXA7CisJaW50IHRqbWF4OworCXU4IGFsYXJtOworfTsKKworc3RhdGljIHN0cnVjdCBjb3JldGVtcF9kYXRhICpjb3JldGVtcF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKy8qCisgKiBTeXNmcyBzdHVmZgorICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGNvcmV0ZW1wX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhdHRyLT5pbmRleCA9PSBTSE9XX05BTUUpCisJCXJldCA9IHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOworCWVsc2UJLyogc2hvdyBsYWJlbCAqLworCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIkNvcmUgJWRcbiIsIGRhdGEtPmlkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY29yZXRlbXBfZGF0YSAqZGF0YSA9IGNvcmV0ZW1wX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwkvKiByZWFkIHRoZSBPdXQtb2Ytc3BlYyBsb2csIG5ldmVyIGNsZWFyICovCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPmFsYXJtKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgY29yZXRlbXBfZGF0YSAqZGF0YSA9IGNvcmV0ZW1wX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgZXJyOworCisJaWYgKGF0dHItPmluZGV4ID09IFNIT1dfVEVNUCkKKwkJZXJyID0gZGF0YS0+dmFsaWQgPyBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50ZW1wKSA6IC1FQUdBSU47CisJZWxzZQorCQllcnIgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50am1heCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsCisJCQkgIFNIT1dfVEVNUCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwKKwkJCSAgU0hPV19USk1BWCk7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2xhYmVsLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwsIFNIT1dfTEFCRUwpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwsIFNIT1dfTkFNRSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjb3JldGVtcF9hdHRyaWJ1dGVzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9sYWJlbC5kZXZfYXR0ci5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9jcml0X2FsYXJtLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNvcmV0ZW1wX2dyb3VwID0geworCS5hdHRycyA9IGNvcmV0ZW1wX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IGNvcmV0ZW1wX2RhdGEgKmNvcmV0ZW1wX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBjb3JldGVtcF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlpZiAoIWRhdGEtPnZhbGlkIHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFopKSB7CisJCXUzMiBlYXgsIGVkeDsKKworCQlkYXRhLT52YWxpZCA9IDA7CisJCXJkbXNyX29uX2NwdShkYXRhLT5pZCwgTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCAmZWF4LCAmZWR4KTsKKwkJZGF0YS0+YWxhcm0gPSAoZWF4ID4+IDUpICYgMTsKKwkJLyogdXBkYXRlIG9ubHkgaWYgZGF0YSBoYXMgYmVlbiB2YWxpZCAqLworCQlpZiAoZWF4ICYgMHg4MDAwMDAwMCkgeworCQkJZGF0YS0+dGVtcCA9IGRhdGEtPnRqbWF4IC0gKCgoZWF4ID4+IDE2KQorCQkJCQkJCSYgMHg3ZikgKiAxMDAwKTsKKwkJCWRhdGEtPnZhbGlkID0gMTsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoZGV2LCAiVGVtcGVyYXR1cmUgZGF0YSBpbnZhbGlkICgweCV4KVxuIiwgZWF4KTsKKwkJfQorCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjb3JldGVtcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjb3JldGVtcF9kYXRhICpkYXRhOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICYoY3B1X2RhdGEpW3BkZXYtPmlkXTsKKwlpbnQgZXJyOworCXUzMiBlYXgsIGVkeDsKKworCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29yZXRlbXBfZGF0YSksIEdGUF9LRVJORUwpKSkgeworCQllcnIgPSAtRU5PTUVNOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJZ290byBleGl0OworCX0KKworCWRhdGEtPmlkID0gcGRldi0+aWQ7CisJZGF0YS0+bmFtZSA9ICJjb3JldGVtcCI7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOworCS8qIFRqbWF4IGRlZmF1bHQgaXMgMTAwIGRlZ3JlZXMgQyAqLworCWRhdGEtPnRqbWF4ID0gMTAwMDAwOworCisJLyogdGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBUSEVSTV9TVEFUVVMgTVNSICovCisJZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUoZGF0YS0+aWQsIE1TUl9JQTMyX1RIRVJNX1NUQVRVUywgJmVheCwgJmVkeCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiVW5hYmxlIHRvIGFjY2VzcyBUSEVSTV9TVEFUVVMgTVNSLCBnaXZpbmcgdXBcbiIpOworCQlnb3RvIGV4aXRfZnJlZTsKKwl9CisKKwkvKiBDaGVjayBpZiB3ZSBoYXZlIHByb2JsZW0gd2l0aCBlcnJhdGEgQUUxOCBvZiBDb3JlIHByb2Nlc3NvcnM6CisJICAgUmVhZGluZ3MgbWlnaHQgc3RvcCB1cGRhdGUgd2hlbiBwcm9jZXNzb3IgdmlzaXRlZCB0b28gZGVlcCBzbGVlcCwKKwkgICBmaXhlZCBmb3Igc3RlcHBpbmcgRDAgKDZFQykuCisJKi8KKworCWlmICgoYy0+eDg2X21vZGVsID09IDB4ZSkgJiYgKGMtPng4Nl9tYXNrIDwgMHhjKSkgeworCQkvKiBjaGVjayBmb3IgbWljcm9jb2RlIHVwZGF0ZSAqLworCQlyZG1zcl9vbl9jcHUoZGF0YS0+aWQsIE1TUl9JQTMyX1VDT0RFX1JFViwgJmVheCwgJmVkeCk7CisJCWlmIChlZHggPCAweDM5KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIkVycmF0YSBBRTE4IG5vdCBmaXhlZCwgdXBkYXRlIEJJT1Mgb3IgIgorCQkJCSJtaWNyb2NvZGUgb2YgdGhlIENQVSFcbiIpOworCQkJZ290byBleGl0X2ZyZWU7CisJCX0KKwl9CisKKwkvKiBTb21lIHByb2Nlc3NvcnMgaGF2ZSBUam1heCA4NSBmb2xsb3dpbmcgbWFnaWMgc2hvdWxkIGRldGVjdCBpdAorCSAgIEludGVsIHdvbid0IGRpc2Nsb3NlIHRoZSBpbmZvcm1hdGlvbiB3aXRob3V0IHNpZ25lZCBOREEsIGJ1dAorCSAgIGluZGl2aWR1YWxzIGNhbm5vdCBzaWduIGl0LiBDYXRjaChlZCkgMjIuCisJKi8KKworCWlmICgoKGMtPng4Nl9tb2RlbCA9PSAweGYpICYmIChjLT54ODZfbWFzayA+IDMpKSB8fAorCQkoYy0+eDg2X21vZGVsID09IDB4ZSkpICB7CisJCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGRhdGEtPmlkLCAweGVlLCAmZWF4LCAmZWR4KTsKKwkJaWYgKGVycikgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCQkgIlVuYWJsZSB0byBhY2Nlc3MgTVNSIDB4RUUsIFRqbWF4IGxlZnQgYXQgJWQgIgorCQkJCSAiZGVncmVlcyBDXG4iLCBkYXRhLT50am1heC8xMDAwKTsKKwkJfSBlbHNlIGlmIChlYXggJiAweDQwMDAwMDAwKSB7CisJCQlkYXRhLT50am1heCA9IDg1MDAwOworCQl9CisJfQorCisJLyogSW50ZWwgc2F5cyB0aGF0IGFib3ZlIHNob3VsZCBub3Qgd29yayBmb3IgZGVza3RvcCBDb3JlMiBwcm9jZXNzb3JzLAorCSAgIGJ1dCBpdCBzZWVtcyB0byB3b3JrLiBUaGVyZSBpcyBubyBvdGhlciB3YXkgaG93IGdldCB0aGUgYWJzb2x1dGUKKwkgICByZWFkaW5ncy4gV2FybiB0aGUgdXNlciBhYm91dCB0aGlzLiBGaXJzdCBjaGVjayBpZiBhcmUgZGVza3RvcCwKKwkgICBiaXQgNTAgb2YgTVNSX0lBMzJfUExBVEZPUk1fSUQgc2hvdWxkIGJlIDAuCisJKi8KKworCXJkbXNyX3NhZmVfb25fY3B1KGRhdGEtPmlkLCBNU1JfSUEzMl9QTEFURk9STV9JRCwgJmVheCwgJmVkeCk7CisKKwlpZiAoKGMtPng4Nl9tb2RlbCA9PSAweGYpICYmICghKGVkeCAmIDB4MDAwNDAwMDApKSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiVXNpbmcgdW5kb2N1bWVudGVkIGZlYXR1cmVzLCBhYnNvbHV0ZSAiCisJCQkgInRlbXBlcmF0dXJlIG1pZ2h0IGJlIHdyb25nIVxuIik7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CisKKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZjb3JldGVtcF9ncm91cCkpKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDbGFzcyByZWdpc3RyYXRpb24gZmFpbGVkICglZClcbiIsCisJCQllcnIpOworCQlnb3RvIGV4aXRfY2xhc3M7CisJfQorCisJcmV0dXJuIDA7CisKK2V4aXRfY2xhc3M6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmNvcmV0ZW1wX2dyb3VwKTsKK2V4aXRfZnJlZToKKwlrZnJlZShkYXRhKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgY29yZXRlbXBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGNvcmV0ZW1wX2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmNvcmV0ZW1wX2dyb3VwKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY29yZXRlbXBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9IERSVk5BTUUsCisJfSwKKwkucHJvYmUgPSBjb3JldGVtcF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoY29yZXRlbXBfcmVtb3ZlKSwKK307CisKK3N0cnVjdCBwZGV2X2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwl1bnNpZ25lZCBpbnQgY3B1OworfTsKKworc3RhdGljIExJU1RfSEVBRChwZGV2X2xpc3QpOworc3RhdGljIERFRklORV9NVVRFWChwZGV2X2xpc3RfbXV0ZXgpOworCitzdGF0aWMgaW50IF9fY3B1aW5pdCBjb3JldGVtcF9kZXZpY2VfYWRkKHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBwZGV2X2VudHJ5ICpwZGV2X2VudHJ5OworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZOQU1FLCBjcHUpOworCWlmICghcGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcGRldl9lbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZGV2X2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGV2X2VudHJ5KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsCisJCSAgICAgICBlcnIpOworCQlnb3RvIGV4aXRfZGV2aWNlX2ZyZWU7CisJfQorCisJcGRldl9lbnRyeS0+cGRldiA9IHBkZXY7CisJcGRldl9lbnRyeS0+Y3B1ID0gY3B1OworCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmcGRldl9lbnRyeS0+bGlzdCwgJnBkZXZfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworCisJcmV0dXJuIDA7CisKK2V4aXRfZGV2aWNlX2ZyZWU6CisJa2ZyZWUocGRldl9lbnRyeSk7CitleGl0X2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQordm9pZCBjb3JldGVtcF9kZXZpY2VfcmVtb3ZlKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IHBkZXZfZW50cnkgKnAsICpuOworCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwZGV2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHAtPmNwdSA9PSBjcHUpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHAtPnBkZXYpOworCQkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQkJa2ZyZWUocCk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IGNvcmV0ZW1wX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKKwkJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKSBoY3B1OworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKKwkJY29yZXRlbXBfZGV2aWNlX2FkZChjcHUpOworCQlicmVhazsKKwljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgorCQljb3JldGVtcF9kZXZpY2VfcmVtb3ZlKGNwdSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgY29yZXRlbXBfY3B1X25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gY29yZXRlbXBfY3B1X2NhbGxiYWNrLAorfTsKKyNlbmRpZgkJCQkvKiAhQ09ORklHX0hPVFBMVUdfQ1BVICovCisKK3N0YXRpYyBpbnQgX19pbml0IGNvcmV0ZW1wX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgZXJyID0gLUVOT0RFVjsKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqcCwgKm47CisKKwkvKiBxdWljayBjaGVjayBpZiB3ZSBydW4gSW50ZWwgKi8KKwlpZiAoY3B1X2RhdGFbMF0ueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKQorCQlnb3RvIGV4aXQ7CisKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNvcmV0ZW1wX2RyaXZlcik7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICYoY3B1X2RhdGEpW2ldOworCisJCS8qIGNoZWNrIGlmIGZhbWlseSA2LCBtb2RlbHMgZSwgZiAqLworCQlpZiAoKGMtPmNwdWlkX2xldmVsIDwgMCkgfHwgKGMtPng4NiAhPSAweDYpIHx8CisJCSAgICAhKChjLT54ODZfbW9kZWwgPT0gMHhlKSB8fCAoYy0+eDg2X21vZGVsID09IDB4ZikpKSB7CisKKwkJCS8qIHN1cHBvcnRlZCBDUFUgbm90IGZvdW5kLCBidXQgcmVwb3J0IHRoZSB1bmtub3duCisJCQkgICBmYW1pbHkgNiBDUFUgKi8KKwkJCWlmICgoYy0+eDg2ID09IDB4NikgJiYgKGMtPng4Nl9tb2RlbCA+IDB4ZikpCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZOQU1FICI6IFVua25vd24gQ1BVICIKKwkJCQkJIm1vZGVsICV4XG4iLCBjLT54ODZfbW9kZWwpOworCQkJY29udGludWU7CisJCX0KKworCQllcnIgPSBjb3JldGVtcF9kZXZpY2VfYWRkKGkpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X2RldmljZXNfdW5yZWc7CisJfQorCWlmIChsaXN0X2VtcHR5KCZwZGV2X2xpc3QpKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdF9kcml2ZXJfdW5yZWc7CisJfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZjb3JldGVtcF9jcHVfbm90aWZpZXIpOworI2VuZGlmCisJcmV0dXJuIDA7CisKK2V4aXRfZGV2aWNlc191bnJlZzoKKwltdXRleF9sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmcGRldl9saXN0LCBsaXN0KSB7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHAtPnBkZXYpOworCQlsaXN0X2RlbCgmcC0+bGlzdCk7CisJCWtmcmVlKHApOworCX0KKwltdXRleF91bmxvY2soJnBkZXZfbGlzdF9tdXRleCk7CitleGl0X2RyaXZlcl91bnJlZzoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29yZXRlbXBfZHJpdmVyKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNvcmV0ZW1wX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqcCwgKm47CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJdW5yZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmNvcmV0ZW1wX2NwdV9ub3RpZmllcik7CisjZW5kaWYKKwltdXRleF9sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmcGRldl9saXN0LCBsaXN0KSB7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHAtPnBkZXYpOworCQlsaXN0X2RlbCgmcC0+bGlzdCk7CisJCWtmcmVlKHApOworCX0KKwltdXRleF91bmxvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNvcmV0ZW1wX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIlJ1ZG9sZiBNYXJlayA8ci5tYXJla0Bhc3NlbWJsZXIuY3o+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIENvcmUgdGVtcGVyYXR1cmUgbW9uaXRvciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChjb3JldGVtcF9pbml0KQorbW9kdWxlX2V4aXQoY29yZXRlbXBfZXhpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMgYi9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jCmluZGV4IGM4NDljMGMuLmQ1YWM0MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMKKysrIGIvZHJpdmVycy9od21vbi9kczE2MjEuYwpAQCAtNTMsOCArNTMsOCBAQAogCiAvKiBUaGUgRFMxNjIxIHJlZ2lzdGVycyAqLwogI2RlZmluZSBEUzE2MjFfUkVHX1RFTVAJCQkweEFBIC8qIHdvcmQsIFJPICovCi0jZGVmaW5lIERTMTYyMV9SRUdfVEVNUF9NSU4JCTB4QTEgLyogd29yZCwgUlcgKi8KLSNkZWZpbmUgRFMxNjIxX1JFR19URU1QX01BWAkJMHhBMiAvKiB3b3JkLCBSVyAqLworI2RlZmluZSBEUzE2MjFfUkVHX1RFTVBfTUlOCQkweEEyIC8qIHdvcmQsIFJXICovCisjZGVmaW5lIERTMTYyMV9SRUdfVEVNUF9NQVgJCTB4QTEgLyogd29yZCwgUlcgKi8KICNkZWZpbmUgRFMxNjIxX1JFR19DT05GCQkJMHhBQyAvKiBieXRlLCBSVyAqLwogI2RlZmluZSBEUzE2MjFfQ09NX1NUQVJUCQkweEVFIC8qIG5vIGRhdGEgKi8KICNkZWZpbmUgRFMxNjIxX0NPTV9TVE9QCQkJMHgyMiAvKiBubyBkYXRhICovCkBAIC0zMjgsOSArMzI4LDkgQEAKIAogCQkvKiByZXNldCBhbGFybXMgaWYgbmVjZXNzYXJ5ICovCiAJCW5ld19jb25mID0gZGF0YS0+Y29uZjsKLQkJaWYgKGRhdGEtPnRlbXAgPCBkYXRhLT50ZW1wX21pbikKKwkJaWYgKGRhdGEtPnRlbXAgPiBkYXRhLT50ZW1wX21pbikKIAkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9MT1c7Ci0JCWlmIChkYXRhLT50ZW1wID4gZGF0YS0+dGVtcF9tYXgpCisJCWlmIChkYXRhLT50ZW1wIDwgZGF0YS0+dGVtcF9tYXgpCiAJCQluZXdfY29uZiAmPSB+RFMxNjIxX0FMQVJNX1RFTVBfSElHSDsKIAkJaWYgKGRhdGEtPmNvbmYgIT0gbmV3X2NvbmYpCiAJCQlkczE2MjFfd3JpdGVfdmFsdWUoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYyBiL2RyaXZlcnMvaHdtb24vZjcxODA1Zi5jCmluZGV4IDdjMjk3MzQuLmNkYmUzMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZjcxODA1Zi5jCisrKyBiL2RyaXZlcnMvaHdtb24vZjcxODA1Zi5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKQEAgLTExNDAsNiArMTE0MSwxMyBAQAogCX0KIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQgKyBBRERSX1JFR19PRkZTRVQsIDIsIERSVk5BTUUpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgcmVnaW9uIDB4JWx4LTB4JWx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpKHJlcy0+c3RhcnQgKyBBRERSX1JFR19PRkZTRVQpLAorCQkJKHVuc2lnbmVkIGxvbmcpKHJlcy0+c3RhcnQgKyBBRERSX1JFR19PRkZTRVQgKyAxKSk7CisJCWdvdG8gZXhpdF9mcmVlOworCX0KIAlkYXRhLT5hZGRyID0gcmVzLT5zdGFydDsKIAlkYXRhLT5uYW1lID0gbmFtZXNbc2lvX2RhdGEtPmtpbmRdOwogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTExNjUsNyArMTE3Myw3IEBACiAKIAkvKiBSZWdpc3RlciBzeXNmcyBpbnRlcmZhY2UgZmlsZXMgKi8KIAlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZmNzE4MDVmX2dyb3VwKSkpCi0JCWdvdG8gZXhpdF9mcmVlOworCQlnb3RvIGV4aXRfcmVsZWFzZV9yZWdpb247CiAJaWYgKGRhdGEtPmhhc19pbiAmICgxIDw8IDQpKSB7IC8qIGluNCAqLwogCQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosCiAJCQkJCSAgICAgICZmNzE4MDVmX2dyb3VwX29wdGluWzBdKSkpCkBAIC0xMjE5LDYgKzEyMjcsOCBAQAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZmNzE4MDVmX2dyb3VwX29wdGluW2ldKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZjcxODA1Zl9ncm91cF9wd21fZnJlcSk7CitleGl0X3JlbGVhc2VfcmVnaW9uOgorCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQgKyBBRERSX1JFR19PRkZTRVQsIDIpOwogZXhpdF9mcmVlOgogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGRhdGEpOwpAQCAtMTIyOSw2ICsxMjM5LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGY3MTgwNWZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCBpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CkBAIC0xMjM5LDYgKzEyNTAsOSBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZmNzE4MDVmX2dyb3VwX3B3bV9mcmVxKTsKIAlrZnJlZShkYXRhKTsKIAorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0ICsgQUREUl9SRUdfT0ZGU0VULCAyKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMgYi9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKaW5kZXggYmY3NTllYS4uZTBjZjVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9oZGFwcy5jCisrKyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwpAQCAtMzAsMTAgKzMwLDEyIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgSERBUFNfTE9XX1BPUlQJCTB4MTYwMAkvKiBmaXJzdCBwb3J0IHVzZWQgYnkgaGRhcHMgKi8KQEAgLTcxLDEwICs3MywxMCBAQAogc3RhdGljIGludCByZXN0X3g7CiBzdGF0aWMgaW50IHJlc3RfeTsKIAotc3RhdGljIERFQ0xBUkVfTVVURVgoaGRhcHNfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoaGRhcHNfbXR4KTsKIAogLyoKLSAqIF9fZ2V0X2xhdGNoIC0gR2V0IHRoZSB2YWx1ZSBmcm9tIGEgZ2l2ZW4gcG9ydC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KKyAqIF9fZ2V0X2xhdGNoIC0gR2V0IHRoZSB2YWx1ZSBmcm9tIGEgZ2l2ZW4gcG9ydC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX210eC4KICAqLwogc3RhdGljIGlubGluZSB1OCBfX2dldF9sYXRjaCh1MTYgcG9ydCkKIHsKQEAgLTgzLDcgKzg1LDcgQEAKIAogLyoKICAqIF9fY2hlY2tfbGF0Y2ggLSBDaGVjayBhIHBvcnQgbGF0Y2ggZm9yIGEgZ2l2ZW4gdmFsdWUuICBSZXR1cm5zIHplcm8gaWYgdGhlCi0gKiBwb3J0IGNvbnRhaW5zIHRoZSBnaXZlbiB2YWx1ZS4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KKyAqIHBvcnQgY29udGFpbnMgdGhlIGdpdmVuIHZhbHVlLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfbXR4LgogICovCiBzdGF0aWMgaW5saW5lIGludCBfX2NoZWNrX2xhdGNoKHUxNiBwb3J0LCB1OCB2YWwpCiB7CkBAIC05NCw3ICs5Niw3IEBACiAKIC8qCiAgKiBfX3dhaXRfbGF0Y2ggLSBXYWl0IHVwIHRvIDEwMHVzIGZvciBhIHBvcnQgbGF0Y2ggdG8gZ2V0IGEgY2VydGFpbiB2YWx1ZSwKLSAqIHJldHVybmluZyB6ZXJvIGlmIHRoZSB2YWx1ZSBpcyBvYnRhaW5lZC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KKyAqIHJldHVybmluZyB6ZXJvIGlmIHRoZSB2YWx1ZSBpcyBvYnRhaW5lZC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX210eC4KICAqLwogc3RhdGljIGludCBfX3dhaXRfbGF0Y2godTE2IHBvcnQsIHU4IHZhbCkKIHsKQEAgLTExMSw3ICsxMTMsNyBAQAogCiAvKgogICogX19kZXZpY2VfcmVmcmVzaCAtIHJlcXVlc3QgYSByZWZyZXNoIGZyb20gdGhlIGFjY2VsZXJvbWV0ZXIuICBEb2VzIG5vdCB3YWl0Ci0gKiBmb3IgcmVmcmVzaCB0byBjb21wbGV0ZS4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KKyAqIGZvciByZWZyZXNoIHRvIGNvbXBsZXRlLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfbXR4LgogICovCiBzdGF0aWMgdm9pZCBfX2RldmljZV9yZWZyZXNoKHZvaWQpCiB7CkBAIC0xMjUsNyArMTI3LDcgQEAKIC8qCiAgKiBfX2RldmljZV9yZWZyZXNoX3N5bmMgLSByZXF1ZXN0IGEgc3luY2hyb25vdXMgcmVmcmVzaCBmcm9tIHRoZQogICogYWNjZWxlcm9tZXRlci4gIFdlIHdhaXQgZm9yIHRoZSByZWZyZXNoIHRvIGNvbXBsZXRlLiAgUmV0dXJucyB6ZXJvIGlmCi0gKiBzdWNjZXNzZnVsIGFuZCBub256ZXJvIG9uIGVycm9yLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgorICogc3VjY2Vzc2Z1bCBhbmQgbm9uemVybyBvbiBlcnJvci4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX210eC4KICAqLwogc3RhdGljIGludCBfX2RldmljZV9yZWZyZXNoX3N5bmModm9pZCkKIHsKQEAgLTEzNSw3ICsxMzcsNyBAQAogCiAvKgogICogX19kZXZpY2VfY29tcGxldGUgLSBpbmRpY2F0ZSB0byB0aGUgYWNjZWxlcm9tZXRlciB0aGF0IHdlIGFyZSBkb25lIHJlYWRpbmcKLSAqIGRhdGEsIGFuZCB0aGVuIGluaXRpYXRlIGFuIGFzeW5jIHJlZnJlc2guICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCisgKiBkYXRhLCBhbmQgdGhlbiBpbml0aWF0ZSBhbiBhc3luYyByZWZyZXNoLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfbXR4LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZpY2VfY29tcGxldGUodm9pZCkKIHsKQEAgLTE1Myw3ICsxNTUsNyBAQAogewogCWludCByZXQ7CiAKLQlkb3duKCZoZGFwc19zZW0pOworCW11dGV4X2xvY2soJmhkYXBzX210eCk7CiAKIAkvKiBkbyBhIHN5bmMgcmVmcmVzaCAtLSB3ZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB3ZSByZWFkIGZyZXNoIGRhdGEgKi8KIAlyZXQgPSBfX2RldmljZV9yZWZyZXNoX3N5bmMoKTsKQEAgLTE2NCw3ICsxNjYsNyBAQAogCV9fZGV2aWNlX2NvbXBsZXRlKCk7CiAKIG91dDoKLQl1cCgmaGRhcHNfc2VtKTsKKwltdXRleF91bmxvY2soJmhkYXBzX210eCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTk5LDkgKzIwMSw5IEBACiB7CiAJaW50IHJldDsKIAotCWRvd24oJmhkYXBzX3NlbSk7CisJbXV0ZXhfbG9jaygmaGRhcHNfbXR4KTsKIAlyZXQgPSBfX2hkYXBzX3JlYWRfcGFpcihwb3J0MSwgcG9ydDIsIHZhbDEsIHZhbDIpOwotCXVwKCZoZGFwc19zZW0pOworCW11dGV4X3VubG9jaygmaGRhcHNfbXR4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMTQsNyArMjE2LDcgQEAKIHsKIAlpbnQgdG90YWwsIHJldCA9IC1FTlhJTzsKIAotCWRvd24oJmhkYXBzX3NlbSk7CisJbXV0ZXhfbG9jaygmaGRhcHNfbXR4KTsKIAogCW91dGIoMHgxMywgMHgxNjEwKTsKIAlvdXRiKDB4MDEsIDB4MTYxZik7CkBAIC0yODAsNyArMjgyLDcgQEAKIAl9CiAKIG91dDoKLQl1cCgmaGRhcHNfc2VtKTsKKwltdXRleF91bmxvY2soJmhkYXBzX210eCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzE0LDcgKzMxNiw3IEBACiB9OwogCiAvKgotICogaGRhcHNfY2FsaWJyYXRlIC0gU2V0IG91ciAicmVzdGluZyIgdmFsdWVzLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgorICogaGRhcHNfY2FsaWJyYXRlIC0gU2V0IG91ciAicmVzdGluZyIgdmFsdWVzLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfbXR4LgogICovCiBzdGF0aWMgdm9pZCBoZGFwc19jYWxpYnJhdGUodm9pZCkKIHsKQEAgLTMyNiw3ICszMjgsNyBAQAogCWludCB4LCB5OwogCiAJLyogQ2Fubm90IHNsZWVwLiAgVHJ5IG5vbmJsb2NraW5nbHkuICBJZiB3ZSBmYWlsLCB0cnkgYWdhaW4gbGF0ZXIuICovCi0JaWYgKGRvd25fdHJ5bG9jaygmaGRhcHNfc2VtKSkgeworCWlmIChtdXRleF90cnlsb2NrKCZoZGFwc19tdHgpKSB7CiAJCW1vZF90aW1lcigmaGRhcHNfdGltZXIsamlmZmllcyArIEhEQVBTX1BPTExfUEVSSU9EKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM0MSw3ICszNDMsNyBAQAogCW1vZF90aW1lcigmaGRhcHNfdGltZXIsIGppZmZpZXMgKyBIREFQU19QT0xMX1BFUklPRCk7CiAKIG91dDoKLQl1cCgmaGRhcHNfc2VtKTsKKwltdXRleF91bmxvY2soJmhkYXBzX210eCk7CiB9CiAKIApAQCAtNDIxLDkgKzQyMyw5IEBACiAJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWRvd24oJmhkYXBzX3NlbSk7CisJbXV0ZXhfbG9jaygmaGRhcHNfbXR4KTsKIAloZGFwc19jYWxpYnJhdGUoKTsKLQl1cCgmaGRhcHNfc2VtKTsKKwltdXRleF91bmxvY2soJmhkYXBzX210eCk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC01NzIsNyArNTc0LDcgQEAKIAogCS8qIGluaXRpYWxpemUgdGhlIGlucHV0IGNsYXNzICovCiAJaGRhcHNfaWRldi0+bmFtZSA9ICJoZGFwcyI7Ci0JaGRhcHNfaWRldi0+Y2Rldi5kZXYgPSAmcGRldi0+ZGV2OworCWhkYXBzX2lkZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCWhkYXBzX2lkZXYtPmV2Yml0WzBdID0gQklUKEVWX0FCUyk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGRhcHNfaWRldiwgQUJTX1gsCiAJCQktMjU2LCAyNTYsIEhEQVBTX0lOUFVUX0ZVWlosIEhEQVBTX0lOUFVUX0ZMQVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9od21vbi12aWQuYyBiL2RyaXZlcnMvaHdtb24vaHdtb24tdmlkLmMKaW5kZXggYjgwZjZlZC4uZjE3ZTc3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9od21vbi12aWQuYworKysgYi9kcml2ZXJzL2h3bW9uL2h3bW9uLXZpZC5jCkBAIC0xMzIsNyArMTMyLDkgQEAKIAkJdmFsICY9IDB4N2Y7CiAJCXJldHVybih2YWwgPiAweDc3ID8gMCA6ICgxNTAwMDAwIC0gKHZhbCAqIDEyNTAwKSArIDUwMCkgLyAxMDAwKTsKIAlkZWZhdWx0OgkJLyogcmVwb3J0IDAgZm9yIHVua25vd24gKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiaHdtb24tdmlkOiByZXF1ZXN0ZWQgdW5rbm93biBWUk0gdmVyc2lvblxuIik7CisJCWlmICh2cm0pCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJod21vbi12aWQ6IFJlcXVlc3RlZCB1bnN1cHBvcnRlZCAiCisJCQkgICAgICAgIlZSTSB2ZXJzaW9uICgldSlcbiIsICh1bnNpZ25lZCBpbnQpdnJtKTsKIAkJcmV0dXJuIDA7CiAJfQogfQpAQCAtMTY2LDE2ICsxNjgsMTYgQEAKIAl7WDg2X1ZFTkRPUl9JTlRFTCwgMHg2LCAweEUsIEFOWSwgMTR9LAkJLyogSW50ZWwgQ29yZSAoNjUgbm0pICovCiAJe1g4Nl9WRU5ET1JfSU5URUwsIDB4NiwgMHhGLCBBTlksIDExMH0sCQkvKiBJbnRlbCBDb25yb2UgKi8KIAl7WDg2X1ZFTkRPUl9JTlRFTCwgMHg2LCBBTlksIEFOWSwgODJ9LAkJLyogYW55IFA2ICovCi0Je1g4Nl9WRU5ET1JfSU5URUwsIDB4NywgQU5ZLCBBTlksIDB9LAkJLyogSXRhbml1bSAqLwogCXtYODZfVkVORE9SX0lOVEVMLCAweEYsIDB4MCwgQU5ZLCA5MH0sCQkvKiBQNCAqLwogCXtYODZfVkVORE9SX0lOVEVMLCAweEYsIDB4MSwgQU5ZLCA5MH0sCQkvKiBQNCBXaWxsYW1ldHRlICovCiAJe1g4Nl9WRU5ET1JfSU5URUwsIDB4RiwgMHgyLCBBTlksIDkwfSwJCS8qIFA0IE5vcnRod29vZCAqLwogCXtYODZfVkVORE9SX0lOVEVMLCAweEYsIEFOWSwgQU5ZLCAxMDB9LAkJLyogUHJlc2NvdHQgYW5kIGFib3ZlIGFzc3VtZSBWUkQgMTAgKi8KLQl7WDg2X1ZFTkRPUl9JTlRFTCwgMHgxMCwgQU5ZLCBBTlksIDB9LAkJLyogSXRhbml1bSAyICovCiAJe1g4Nl9WRU5ET1JfQ0VOVEFVUiwgMHg2LCAweDcsIEFOWSwgODV9LAkvKiBFZGVuIEVTUC9FenJhICovCiAJe1g4Nl9WRU5ET1JfQ0VOVEFVUiwgMHg2LCAweDgsIDB4NywgODV9LAkvKiBFenJhIFQgKi8KIAl7WDg2X1ZFTkRPUl9DRU5UQVVSLCAweDYsIDB4OSwgMHg3LCA4NX0sCS8qIE5lbWlhaCAqLwotCXtYODZfVkVORE9SX0NFTlRBVVIsIDB4NiwgMHg5LCBBTlksIDE3fSwJLyogQzMtTSAqLworCXtYODZfVkVORE9SX0NFTlRBVVIsIDB4NiwgMHg5LCBBTlksIDE3fSwJLyogQzMtTSwgRWRlbi1OICovCisJe1g4Nl9WRU5ET1JfQ0VOVEFVUiwgMHg2LCAweEEsIDB4NywgMH0sCQkvKiBObyBpbmZvcm1hdGlvbiAqLworCXtYODZfVkVORE9SX0NFTlRBVVIsIDB4NiwgMHhBLCBBTlksIDEzfSwJLyogQzcsIEVzdGhlciAqLwogCXtYODZfVkVORE9SX1VOS05PV04sIEFOWSwgQU5ZLCBBTlksIDB9CQkvKiBzdG9wIGhlcmUgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG03NS5jIGIvZHJpdmVycy9od21vbi9sbTc1LmMKaW5kZXggN2M2NWI4Yi4uYTQwMTY2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTc1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTc1LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSAibG03NS5oIgpAQCAtMzksMTAgKzQwLDEyIEBACiAvKiBNYW55IExNNzUgY29uc3RhbnRzIHNwZWNpZmllZCBiZWxvdyAqLwogCiAvKiBUaGUgTE03NSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgTE03NV9SRUdfVEVNUAkJMHgwMAogI2RlZmluZSBMTTc1X1JFR19DT05GCQkweDAxCi0jZGVmaW5lIExNNzVfUkVHX1RFTVBfSFlTVAkweDAyCi0jZGVmaW5lIExNNzVfUkVHX1RFTVBfT1MJMHgwMworc3RhdGljIGNvbnN0IHU4IExNNzVfUkVHX1RFTVBbM10gPSB7CisJMHgwMCwJCS8qIGlucHV0ICovCisJMHgwMywJCS8qIG1heCAqLworCTB4MDIsCQkvKiBoeXN0ICovCit9OwogCiAvKiBFYWNoIGNsaWVudCBoYXMgdGhpcyBhZGRpdGlvbmFsIGRhdGEgKi8KIHN0cnVjdCBsbTc1X2RhdGEgewpAQCAtNTEsOSArNTQsMTAgQEAKIAlzdHJ1Y3QgbXV0ZXgJCXVwZGF0ZV9sb2NrOwogCWNoYXIJCQl2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcJCWxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwotCXUxNgkJCXRlbXBfaW5wdXQ7CS8qIFJlZ2lzdGVyIHZhbHVlcyAqLwotCXUxNgkJCXRlbXBfbWF4OwotCXUxNgkJCXRlbXBfaHlzdDsKKwl1MTYJCQl0ZW1wWzNdOwkvKiBSZWdpc3RlciB2YWx1ZXMsCisJCQkJCQkgICAwID0gaW5wdXQKKwkJCQkJCSAgIDEgPSBtYXgKKwkJCQkJCSAgIDIgPSBoeXN0ICovCiB9OwogCiBzdGF0aWMgaW50IGxtNzVfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKQEAgLTc1LDM1ICs3OSwzNiBAQAogCS5kZXRhY2hfY2xpZW50CT0gbG03NV9kZXRhY2hfY2xpZW50LAogfTsKIAotI2RlZmluZSBzaG93KHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgbG03NV9kYXRhICpkYXRhID0gbG03NV91cGRhdGVfZGV2aWNlKGRldik7CQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIExNNzVfVEVNUF9GUk9NX1JFRyhkYXRhLT52YWx1ZSkpOwlcCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CisJc3RydWN0IGxtNzVfZGF0YSAqZGF0YSA9IGxtNzVfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQkgICAgICAgTE03NV9URU1QX0ZST01fUkVHKGRhdGEtPnRlbXBbYXR0ci0+aW5kZXhdKSk7CiB9Ci1zaG93KHRlbXBfbWF4KTsKLXNob3codGVtcF9oeXN0KTsKLXNob3codGVtcF9pbnB1dCk7CiAKLSNkZWZpbmUgc2V0KHZhbHVlLCByZWcpCVwKLXN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQlcCi0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsJCVwKLQlzdHJ1Y3QgbG03NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CVwKLQlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJXAotCQkJCQkJCQlcCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwkJCQlcCi0JZGF0YS0+dmFsdWUgPSBMTTc1X1RFTVBfVE9fUkVHKHRlbXApOwkJCVwKLQlsbTc1X3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVnLCBkYXRhLT52YWx1ZSk7CQlcCi0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCQlcCi0JcmV0dXJuIGNvdW50OwkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBsbTc1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsKKwl1bnNpZ25lZCBsb25nIHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT50ZW1wW25yXSA9IExNNzVfVEVNUF9UT19SRUcodGVtcCk7CisJbG03NV93cml0ZV92YWx1ZShjbGllbnQsIExNNzVfUkVHX1RFTVBbbnJdLCBkYXRhLT50ZW1wW25yXSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OwogfQotc2V0KHRlbXBfbWF4LCBMTTc1X1JFR19URU1QX09TKTsKLXNldCh0ZW1wX2h5c3QsIExNNzVfUkVHX1RFTVBfSFlTVCk7CiAKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4LCBzZXRfdGVtcF9tYXgpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX21heF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX2h5c3QsIHNldF90ZW1wX2h5c3QpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXBfaW5wdXQsIE5VTEwpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190ZW1wLCBzZXRfdGVtcCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfdGVtcCwgc2V0X3RlbXAsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAwKTsKIAogc3RhdGljIGludCBsbTc1X2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTExMyw5ICsxMTgsOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG03NV9hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAxX21heC5hdHRyLAotCSZkZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKIAogCU5VTEwKIH07CkBAIC0yODMsMTEgKzI4OCwxMiBAQAogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFogKyBIWiAvIDIpCiAJICAgIHx8ICFkYXRhLT52YWxpZCkgeworCQlpbnQgaTsKIAkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJTdGFydGluZyBsbTc1IHVwZGF0ZVxuIik7CiAKLQkJZGF0YS0+dGVtcF9pbnB1dCA9IGxtNzVfcmVhZF92YWx1ZShjbGllbnQsIExNNzVfUkVHX1RFTVApOwotCQlkYXRhLT50ZW1wX21heCA9IGxtNzVfcmVhZF92YWx1ZShjbGllbnQsIExNNzVfUkVHX1RFTVBfT1MpOwotCQlkYXRhLT50ZW1wX2h5c3QgPSBsbTc1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTc1X1JFR19URU1QX0hZU1QpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT50ZW1wKTsgaSsrKQorCQkJZGF0YS0+dGVtcFtpXSA9IGxtNzVfcmVhZF92YWx1ZShjbGllbnQsCisJCQkJCQkJTE03NV9SRUdfVEVNUFtpXSk7CiAJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtNzguYyBiL2RyaXZlcnMvaHdtb24vbG03OC5jCmluZGV4IDg4Njc4NmMuLjlmYjU3MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG03OC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG03OC5jCkBAIC0yLDYgKzIsNyBAQAogICAgIGxtNzguYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCiAgICAgICAgICAgICAgbW9uaXRvcmluZwogICAgIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OSAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAKKyAgICBDb3B5cmlnaHQgKGMpIDIwMDcgICAgICAgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjMsMTMgKzI0LDE4IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtaXNhLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKKy8qIElTQSBkZXZpY2UsIGlmIGZvdW5kICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsCiAJCQkJCTB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsIDB4MjksCkBAIC0xMjEsMTIgKzEyNyw4IEBACiAgICBhIGJpdCAtIGV4Y2VwdCBpZiB0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lIFNNQnVzLiBHcm9hbi4gTm8gc29sdXRpb24KICAgIGZvciB0aGlzIHlldC4gKi8KIAotLyogVGhpcyBtb2R1bGUgbWF5IHNlZW0gb3Zlcmx5IGxvbmcgYW5kIGNvbXBsaWNhdGVkLiBJbiBmYWN0LCBpdCBpcyBub3Qgc28KLSAgIGJhZC4gUXVpdGUgYSBsb3Qgb2YgYm9va2tlZXBpbmcgaXMgZG9uZS4gQSByZWFsIGRyaXZlciBjYW4gb2Z0ZW4gY3V0Ci0gICBzb21lIGNvcm5lcnMuICovCi0KLS8qIEZvciBlYWNoIHJlZ2lzdGVyZWQgY2hpcCwgd2UgbmVlZCB0byBrZWVwIHNvbWUgZGF0YSBpbiBtZW1vcnkuCi0gICBUaGUgc3RydWN0dXJlIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4gKi8KKy8qIEZvciBJU0EgY2hpcHMsIHdlIGFidXNlIHRoZSBpMmNfY2xpZW50IGFkZHIgYW5kIG5hbWUgZmllbGRzLiBXZSBhbHNvIHVzZQorICAgdGhlIGRyaXZlciBmaWVsZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSTJDIGFuZCBJU0EgY2hpcHMuICovCiBzdHJ1Y3QgbG03OF9kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwpAQCAtMTUyLDE0ICsxNTQsMTYgQEAKIAogCiBzdGF0aWMgaW50IGxtNzhfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgbG03OF9pc2FfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKIHN0YXRpYyBpbnQgbG03OF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpOwogc3RhdGljIGludCBsbTc4X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiAKLXN0YXRpYyBpbnQgbG03OF9yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZyk7Ci1zdGF0aWMgaW50IGxtNzhfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBsbTc4X2lzYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBpbnQgX19kZXZleGl0IGxtNzhfaXNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKworc3RhdGljIGludCBsbTc4X3JlYWRfdmFsdWUoc3RydWN0IGxtNzhfZGF0YSAqZGF0YSwgdTggcmVnKTsKK3N0YXRpYyBpbnQgbG03OF93cml0ZV92YWx1ZShzdHJ1Y3QgbG03OF9kYXRhICpkYXRhLCB1OCByZWcsIHU4IHZhbHVlKTsKIHN0YXRpYyBzdHJ1Y3QgbG03OF9kYXRhICpsbTc4X3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGxtNzhfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitzdGF0aWMgdm9pZCBsbTc4X2luaXRfZGV2aWNlKHN0cnVjdCBsbTc4X2RhdGEgKmRhdGEpOwogCiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsbTc4X2RyaXZlciA9IHsKQEAgLTE3MSw5NSArMTc1LDc4IEBACiAJLmRldGFjaF9jbGllbnQJPSBsbTc4X2RldGFjaF9jbGllbnQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG03OF9pc2FfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbG03OF9pc2FfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubmFtZQk9ICJsbTc4LWlzYSIsCisJCS5uYW1lCT0gImxtNzgiLAogCX0sCi0JLmF0dGFjaF9hZGFwdGVyCT0gbG03OF9pc2FfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQJPSBsbTc4X2RldGFjaF9jbGllbnQsCisJLnByb2JlCQk9IGxtNzhfaXNhX3Byb2JlLAorCS5yZW1vdmUJCT0gbG03OF9pc2FfcmVtb3ZlLAogfTsKIAogCiAvKiA3IFZvbHRhZ2VzICovCi1zdGF0aWMgc3NpemVfdCBzaG93X2luKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCitzdGF0aWMgc3NpemVfdCBzaG93X2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQkgICAgICAgY2hhciAqYnVmKQogeworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CiAJc3RydWN0IGxtNzhfZGF0YSAqZGF0YSA9IGxtNzhfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBJTl9GUk9NX1JFRyhkYXRhLT5pbltucl0pKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgSU5fRlJPTV9SRUcoZGF0YS0+aW5bYXR0ci0+aW5kZXhdKSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfaW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCitzdGF0aWMgc3NpemVfdCBzaG93X2luX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKKwkJCSAgIGNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEpOwogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBsbTc4X3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgSU5fRlJPTV9SRUcoZGF0YS0+aW5fbWluW25yXSkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBJTl9GUk9NX1JFRyhkYXRhLT5pbl9taW5bYXR0ci0+aW5kZXhdKSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfaW5fbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCitzdGF0aWMgc3NpemVfdCBzaG93X2luX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKKwkJCSAgIGNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEpOwogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBsbTc4X3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgSU5fRlJPTV9SRUcoZGF0YS0+aW5fbWF4W25yXSkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBJTl9GUk9NX1JFRyhkYXRhLT5pbl9tYXhbYXR0ci0+aW5kZXhdKSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNldF9pbl9taW4oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBjb3VudCwgaW50IG5yKQorc3RhdGljIHNzaXplX3Qgc2V0X2luX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKKwkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKKwlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9taW5bbnJdID0gSU5fVE9fUkVHKHZhbCk7Ci0JbG03OF93cml0ZV92YWx1ZShjbGllbnQsIExNNzhfUkVHX0lOX01JTihuciksIGRhdGEtPmluX21pbltucl0pOworCWxtNzhfd3JpdGVfdmFsdWUoZGF0YSwgTE03OF9SRUdfSU5fTUlOKG5yKSwgZGF0YS0+aW5fbWluW25yXSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBzZXRfaW5fbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgY291bnQsIGludCBucikKK3N0YXRpYyBzc2l6ZV90IHNldF9pbl9tYXgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGxtNzhfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CisJc3RydWN0IGxtNzhfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5fbWF4W25yXSA9IElOX1RPX1JFRyh2YWwpOwotCWxtNzhfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTc4X1JFR19JTl9NQVgobnIpLCBkYXRhLT5pbl9tYXhbbnJdKTsKKwlsbTc4X3dyaXRlX3ZhbHVlKGRhdGEsIExNNzhfUkVHX0lOX01BWChuciksIGRhdGEtPmluX21heFtucl0pOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIAkKICNkZWZpbmUgc2hvd19pbl9vZmZzZXQob2Zmc2V0KQkJCQkJXAotc3RhdGljIHNzaXplX3QJCQkJCQkJXAotCXNob3dfaW4jI29mZnNldCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJXAotCXJldHVybiBzaG93X2luKGRldiwgYnVmLCBvZmZzZXQpOwkJCVwKLX0JCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUihpbiMjb2Zmc2V0IyNfaW5wdXQsIFNfSVJVR08sIAkJXAotCQlzaG93X2luIyNvZmZzZXQsIE5VTEwpOwkJCQlcCi1zdGF0aWMgc3NpemVfdAkJCQkJCQlcCi0Jc2hvd19pbiMjb2Zmc2V0IyNfbWluIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpICAgXAotewkJCQkJCQkJXAotCXJldHVybiBzaG93X2luX21pbihkZXYsIGJ1Ziwgb2Zmc2V0KTsJCQlcCi19CQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdAkJCQkJCQlcCi0Jc2hvd19pbiMjb2Zmc2V0IyNfbWF4IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpICAgXAotewkJCQkJCQkJXAotCXJldHVybiBzaG93X2luX21heChkZXYsIGJ1Ziwgb2Zmc2V0KTsJCQlcCi19CQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfaW4jI29mZnNldCMjX21pbiAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJCQlcCi17CQkJCQkJCQlcCi0JcmV0dXJuIHNldF9pbl9taW4oZGV2LCBidWYsIGNvdW50LCBvZmZzZXQpOwkJXAotfQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0X2luIyNvZmZzZXQjI19tYXggKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQkJXAotewkJCQkJCQkJXAotCXJldHVybiBzZXRfaW5fbWF4KGRldiwgYnVmLCBjb3VudCwgb2Zmc2V0KTsJCVwKLX0JCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUihpbiMjb2Zmc2V0IyNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwJCVwKLQkJc2hvd19pbiMjb2Zmc2V0IyNfbWluLCBzZXRfaW4jI29mZnNldCMjX21pbik7CVwKLXN0YXRpYyBERVZJQ0VfQVRUUihpbiMjb2Zmc2V0IyNfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwJCVwKLQkJc2hvd19pbiMjb2Zmc2V0IyNfbWF4LCBzZXRfaW4jI29mZnNldCMjX21heCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluIyNvZmZzZXQjI19pbnB1dCwgU19JUlVHTywJCVwKKwkJc2hvd19pbiwgTlVMTCwgb2Zmc2V0KTsJCQkJXAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbiMjb2Zmc2V0IyNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwJXAorCQlzaG93X2luX21pbiwgc2V0X2luX21pbiwgb2Zmc2V0KTsJCVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4jI29mZnNldCMjX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCVwKKwkJc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIG9mZnNldCk7CiAKIHNob3dfaW5fb2Zmc2V0KDApOwogc2hvd19pbl9vZmZzZXQoMSk7CkBAIC0yNzAsNDYgKzI1Nyw0OSBAQAogc2hvd19pbl9vZmZzZXQoNik7CiAKIC8qIFRlbXBlcmF0dXJlICovCi1zdGF0aWMgc3NpemVfdCBzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQkJIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gbG03OF91cGRhdGVfZGV2aWNlKGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVBfRlJPTV9SRUcoZGF0YS0+dGVtcCkpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfb3ZlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfb3ZlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gbG03OF91cGRhdGVfZGV2aWNlKGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVBfRlJPTV9SRUcoZGF0YS0+dGVtcF9vdmVyKSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNldF90ZW1wX292ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBzZXRfdGVtcF9vdmVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfb3ZlciA9IFRFTVBfVE9fUkVHKHZhbCk7Ci0JbG03OF93cml0ZV92YWx1ZShjbGllbnQsIExNNzhfUkVHX1RFTVBfT1ZFUiwgZGF0YS0+dGVtcF9vdmVyKTsKKwlsbTc4X3dyaXRlX3ZhbHVlKGRhdGEsIExNNzhfUkVHX1RFTVBfT1ZFUiwgZGF0YS0+dGVtcF9vdmVyKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQkJICAgICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBsbTc4X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUF9GUk9NX1JFRyhkYXRhLT50ZW1wX2h5c3QpKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2V0X3RlbXBfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wX2h5c3Qoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGxtNzhfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9oeXN0ID0gVEVNUF9UT19SRUcodmFsKTsKLQlsbTc4X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE03OF9SRUdfVEVNUF9IWVNULCBkYXRhLT50ZW1wX2h5c3QpOworCWxtNzhfd3JpdGVfdmFsdWUoZGF0YSwgTE03OF9SRUdfVEVNUF9IWVNULCBkYXRhLT50ZW1wX2h5c3QpOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTMyMSw0OSArMzExLDU5IEBACiAJCXNob3dfdGVtcF9oeXN0LCBzZXRfdGVtcF9oeXN0KTsKIAogLyogMyBGYW5zICovCi1zdGF0aWMgc3NpemVfdCBzaG93X2ZhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQorc3RhdGljIHNzaXplX3Qgc2hvd19mYW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJCQljaGFyICpidWYpCiB7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gbG03OF91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIEZBTl9GUk9NX1JFRyhkYXRhLT5mYW5bbnJdLAogCQlESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKSApOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2Zhbl9taW4oc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBucikKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKKwkJCSAgICBjaGFyICpidWYpCiB7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gbG03OF91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAJcmV0dXJuIHNwcmludGYoYnVmLCIlZFxuIiwgRkFOX0ZST01fUkVHKGRhdGEtPmZhbl9taW5bbnJdLAogCQlESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKSApOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZXRfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGNvdW50LCBpbnQgbnIpCitzdGF0aWMgc3NpemVfdCBzZXRfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGxtNzhfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CisJc3RydWN0IGxtNzhfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBuciA9IGF0dHItPmluZGV4OwogCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+ZmFuX21pbltucl0gPSBGQU5fVE9fUkVHKHZhbCwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7Ci0JbG03OF93cml0ZV92YWx1ZShjbGllbnQsIExNNzhfUkVHX0ZBTl9NSU4obnIpLCBkYXRhLT5mYW5fbWluW25yXSk7CisJbG03OF93cml0ZV92YWx1ZShkYXRhLCBMTTc4X1JFR19GQU5fTUlOKG5yKSwgZGF0YS0+ZmFuX21pbltucl0pOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCitzdGF0aWMgc3NpemVfdCBzaG93X2Zhbl9kaXYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJCQkgICAgY2hhciAqYnVmKQogeworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CiAJc3RydWN0IGxtNzhfZGF0YSAqZGF0YSA9IGxtNzhfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pICk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4XSkpOwogfQogCiAvKiBOb3RlOiB3ZSBzYXZlIGFuZCByZXN0b3JlIHRoZSBmYW4gbWluaW11bSBoZXJlLCBiZWNhdXNlIGl0cyB2YWx1ZSBpcwogICAgZGV0ZXJtaW5lZCBpbiBwYXJ0IGJ5IHRoZSBmYW4gZGl2aXNvci4gIFRoaXMgZm9sbG93cyB0aGUgcHJpbmNpcGxlIG9mCiAgICBsZWFzdCBzdXJwcmlzZTsgdGhlIHVzZXIgZG9lc24ndCBleHBlY3QgdGhlIGZhbiBtaW5pbXVtIHRvIGNoYW5nZSBqdXN0CiAgICBiZWNhdXNlIHRoZSBkaXZpc29yIGNoYW5nZWQuICovCi1zdGF0aWMgc3NpemVfdCBzZXRfZmFuX2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKLQlzaXplX3QgY291bnQsIGludCBucikKK3N0YXRpYyBzc2l6ZV90IHNldF9mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKKwlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAl1bnNpZ25lZCBsb25nIG1pbjsKIAl1OCByZWc7CkBAIC0zNzgsMTMgKzM3OCwxMyBAQAogCWNhc2UgNDogZGF0YS0+ZmFuX2Rpdltucl0gPSAyOyBicmVhazsKIAljYXNlIDg6IGRhdGEtPmZhbl9kaXZbbnJdID0gMzsgYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYW5fZGl2IHZhbHVlICVsZCBub3QgIgorCQlkZXZfZXJyKGRldiwgImZhbl9kaXYgdmFsdWUgJWxkIG5vdCAiCiAJCQkic3VwcG9ydGVkLiBDaG9vc2Ugb25lIG9mIDEsIDIsIDQgb3IgOCFcbiIsIHZhbCk7CiAJCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZWcgPSBsbTc4X3JlYWRfdmFsdWUoY2xpZW50LCBMTTc4X1JFR19WSURfRkFORElWKTsKKwlyZWcgPSBsbTc4X3JlYWRfdmFsdWUoZGF0YSwgTE03OF9SRUdfVklEX0ZBTkRJVik7CiAJc3dpdGNoIChucikgewogCWNhc2UgMDoKIAkJcmVnID0gKHJlZyAmIDB4Y2YpIHwgKGRhdGEtPmZhbl9kaXZbbnJdIDw8IDQpOwpAQCAtMzkzLDYzICszOTMsMzYgQEAKIAkJcmVnID0gKHJlZyAmIDB4M2YpIHwgKGRhdGEtPmZhbl9kaXZbbnJdIDw8IDYpOwogCQlicmVhazsKIAl9Ci0JbG03OF93cml0ZV92YWx1ZShjbGllbnQsIExNNzhfUkVHX1ZJRF9GQU5ESVYsIHJlZyk7CisJbG03OF93cml0ZV92YWx1ZShkYXRhLCBMTTc4X1JFR19WSURfRkFORElWLCByZWcpOwogCiAJZGF0YS0+ZmFuX21pbltucl0gPQogCQlGQU5fVE9fUkVHKG1pbiwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7Ci0JbG03OF93cml0ZV92YWx1ZShjbGllbnQsIExNNzhfUkVHX0ZBTl9NSU4obnIpLCBkYXRhLT5mYW5fbWluW25yXSk7CisJbG03OF93cml0ZV92YWx1ZShkYXRhLCBMTTc4X1JFR19GQU5fTUlOKG5yKSwgZGF0YS0+ZmFuX21pbltucl0pOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQogCi0jZGVmaW5lIHNob3dfZmFuX29mZnNldChvZmZzZXQpCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fIyNvZmZzZXQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gc2hvd19mYW4oZGV2LCBidWYsIG9mZnNldCAtIDEpOwkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fIyNvZmZzZXQjI19taW4gKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgIFwKLXsJCQkJCQkJCQlcCi0JcmV0dXJuIHNob3dfZmFuX21pbihkZXYsIGJ1Ziwgb2Zmc2V0IC0gMSk7CQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfZmFuXyMjb2Zmc2V0IyNfZGl2IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpICBcCi17CQkJCQkJCQkJXAotCXJldHVybiBzaG93X2Zhbl9kaXYoZGV2LCBidWYsIG9mZnNldCAtIDEpOwkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfZmFuXyMjb2Zmc2V0IyNfbWluIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJXAotCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJCQkJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gc2V0X2Zhbl9taW4oZGV2LCBidWYsIGNvdW50LCBvZmZzZXQgLSAxKTsJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19pbnB1dCwgU19JUlVHTywgc2hvd19mYW5fIyNvZmZzZXQsIE5VTEwpO1wKLXN0YXRpYyBERVZJQ0VfQVRUUihmYW4jI29mZnNldCMjX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCi0JCXNob3dfZmFuXyMjb2Zmc2V0IyNfbWluLCBzZXRfZmFuXyMjb2Zmc2V0IyNfbWluKTsKLQotc3RhdGljIHNzaXplX3Qgc2V0X2Zhbl8xX2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBjb3VudCkKLXsKLQlyZXR1cm4gc2V0X2Zhbl9kaXYoZGV2LCBidWYsIGNvdW50LCAwKSA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9mYW5fMl9kaXYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgY291bnQpCi17Ci0JcmV0dXJuIHNldF9mYW5fZGl2KGRldiwgYnVmLCBjb3VudCwgMSkgOwotfQorI2RlZmluZSBzaG93X2Zhbl9vZmZzZXQob2Zmc2V0KQkJCQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbiMjb2Zmc2V0IyNfaW5wdXQsIFNfSVJVR08sCQlcCisJCXNob3dfZmFuLCBOVUxMLCBvZmZzZXQgLSAxKTsJCQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbiMjb2Zmc2V0IyNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwJXAorCQlzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCBvZmZzZXQgLSAxKTsKIAogc2hvd19mYW5fb2Zmc2V0KDEpOwogc2hvd19mYW5fb2Zmc2V0KDIpOwogc2hvd19mYW5fb2Zmc2V0KDMpOwogCiAvKiBGYW4gMyBkaXZpc29yIGlzIGxvY2tlZCBpbiBIL1cgKi8KLXN0YXRpYyBERVZJQ0VfQVRUUihmYW4xX2RpdiwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCXNob3dfZmFuXzFfZGl2LCBzZXRfZmFuXzFfZGl2KTsKLXN0YXRpYyBERVZJQ0VfQVRUUihmYW4yX2RpdiwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCXNob3dfZmFuXzJfZGl2LCBzZXRfZmFuXzJfZGl2KTsKLXN0YXRpYyBERVZJQ0VfQVRUUihmYW4zX2RpdiwgU19JUlVHTywgc2hvd19mYW5fM19kaXYsIE5VTEwpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2RpdiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCXNob3dfZmFuX2Rpdiwgc2V0X2Zhbl9kaXYsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4yX2RpdiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCXNob3dfZmFuX2Rpdiwgc2V0X2Zhbl9kaXYsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4zX2RpdiwgU19JUlVHTywgc2hvd19mYW5fZGl2LCBOVUxMLCAyKTsKIAogLyogVklEICovCi1zdGF0aWMgc3NpemVfdCBzaG93X3ZpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3ZpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKKwkJCWNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gbG03OF91cGRhdGVfZGV2aWNlKGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZpZF9mcm9tX3JlZyhkYXRhLT52aWQsIDgyKSk7CkBAIC00NTcsNyArNDMwLDggQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihjcHUwX3ZpZCwgU19JUlVHTywgc2hvd192aWQsIE5VTEwpOwogCiAvKiBBbGFybXMgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm1zKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm1zKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQkJICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBsbTc4X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+YWxhcm1zKTsKQEAgLTQ3NSw0NSArNDQ5LDQwIEBACiAJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBsbTc4X2RldGVjdCk7CiB9CiAKLXN0YXRpYyBpbnQgbG03OF9pc2FfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiBsbTc4X2RldGVjdChhZGFwdGVyLCBpc2FfYWRkcmVzcywgLTEpOwotfQotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG03OF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX2luMF9pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl9pbjBfbWluLmF0dHIsCi0JJmRldl9hdHRyX2luMF9tYXguYXR0ciwKLQkmZGV2X2F0dHJfaW4xX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX2luMV9taW4uYXR0ciwKLQkmZGV2X2F0dHJfaW4xX21heC5hdHRyLAotCSZkZXZfYXR0cl9pbjJfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfaW4yX21pbi5hdHRyLAotCSZkZXZfYXR0cl9pbjJfbWF4LmF0dHIsCi0JJmRldl9hdHRyX2luM19pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl9pbjNfbWluLmF0dHIsCi0JJmRldl9hdHRyX2luM19tYXguYXR0ciwKLQkmZGV2X2F0dHJfaW40X2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX2luNF9taW4uYXR0ciwKLQkmZGV2X2F0dHJfaW40X21heC5hdHRyLAotCSZkZXZfYXR0cl9pbjVfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfaW41X21pbi5hdHRyLAotCSZkZXZfYXR0cl9pbjVfbWF4LmF0dHIsCi0JJmRldl9hdHRyX2luNl9pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl9pbjZfbWluLmF0dHIsCi0JJmRldl9hdHRyX2luNl9tYXguYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW40X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjVfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X21heC5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAogCSZkZXZfYXR0cl90ZW1wMV9tYXguYXR0ciwKIAkmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuYXR0ciwKLQkmZGV2X2F0dHJfZmFuMV9pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl9mYW4xX21pbi5hdHRyLAotCSZkZXZfYXR0cl9mYW4xX2Rpdi5hdHRyLAotCSZkZXZfYXR0cl9mYW4yX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX2ZhbjJfbWluLmF0dHIsCi0JJmRldl9hdHRyX2ZhbjJfZGl2LmF0dHIsCi0JJmRldl9hdHRyX2ZhbjNfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfZmFuM19taW4uYXR0ciwKLQkmZGV2X2F0dHJfZmFuM19kaXYuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2Rpdi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19kaXYuZGV2X2F0dHIuYXR0ciwKIAkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCiAJJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCiAKQEAgLTUyNCw2ICs0OTMsMTcgQEAKIAkuYXR0cnMgPSBsbTc4X2F0dHJpYnV0ZXMsCiB9OwogCisvKiBJMkMgZGV2aWNlcyBnZXQgdGhpcyBuYW1lIGF0dHJpYnV0ZSBhdXRvbWF0aWNhbGx5LCBidXQgZm9yIElTQSBkZXZpY2VzCisgICB3ZSBtdXN0IGNyZWF0ZSBpdCBieSBvdXJzZWx2ZXMuICovCitzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxtNzhfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPmNsaWVudC5uYW1lKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpOworCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpMmNfcHJvYmUgKi8KIHN0YXRpYyBpbnQgbG03OF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCiB7CkBAIC01MzEsNTQgKzUxMSwxMCBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50OwogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGE7CiAJY29uc3QgY2hhciAqY2xpZW50X25hbWUgPSAiIjsKLQlpbnQgaXNfaXNhID0gaTJjX2lzX2lzYV9hZGFwdGVyKGFkYXB0ZXIpOwogCi0JaWYgKCFpc19pc2EgJiYKLQkgICAgIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKIAkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBFUlJPUjA7Ci0JfQotCi0JLyogUmVzZXJ2ZSB0aGUgSVNBIHJlZ2lvbiAqLwotCWlmIChpc19pc2EpCi0JCWlmICghcmVxdWVzdF9yZWdpb24oYWRkcmVzcywgTE03OF9FWFRFTlQsCi0JCQkJICAgIGxtNzhfaXNhX2RyaXZlci5kcml2ZXIubmFtZSkpIHsKLQkJCWVyciA9IC1FQlVTWTsKLQkJCWdvdG8gRVJST1IwOwotCQl9Ci0KLQkvKiBQcm9iZSB3aGV0aGVyIHRoZXJlIGlzIGFueXRoaW5nIGF2YWlsYWJsZSBvbiB0aGlzIGFkZHJlc3MuIEFscmVhZHkKLQkgICBkb25lIGZvciBTTUJ1cyBjbGllbnRzICovCi0JaWYgKGtpbmQgPCAwKSB7Ci0JCWlmIChpc19pc2EpIHsKLQotI2RlZmluZSBSRUFMTFlfU0xPV19JTwotCQkJLyogV2UgbmVlZCB0aGUgdGltZW91dHMgZm9yIGF0IGxlYXN0IHNvbWUgTE03OC1saWtlCi0JCQkgICBjaGlwcy4gQnV0IG9ubHkgaWYgd2UgcmVhZCAndW5kZWZpbmVkJyByZWdpc3RlcnMuICovCi0JCQlpID0gaW5iX3AoYWRkcmVzcyArIDEpOwotCQkJaWYgKGluYl9wKGFkZHJlc3MgKyAyKSAhPSBpKSB7Ci0JCQkJZXJyID0gLUVOT0RFVjsKLQkJCQlnb3RvIEVSUk9SMTsKLQkJCX0KLQkJCWlmIChpbmJfcChhZGRyZXNzICsgMykgIT0gaSkgewotCQkJCWVyciA9IC1FTk9ERVY7Ci0JCQkJZ290byBFUlJPUjE7Ci0JCQl9Ci0JCQlpZiAoaW5iX3AoYWRkcmVzcyArIDcpICE9IGkpIHsKLQkJCQllcnIgPSAtRU5PREVWOwotCQkJCWdvdG8gRVJST1IxOwotCQkJfQotI3VuZGVmIFJFQUxMWV9TTE9XX0lPCi0KLQkJCS8qIExldCdzIGp1c3QgaG9wZSBub3RoaW5nIGJyZWFrcyBoZXJlICovCi0JCQlpID0gaW5iX3AoYWRkcmVzcyArIDUpICYgMHg3ZjsKLQkJCW91dGJfcCh+aSAmIDB4N2YsIGFkZHJlc3MgKyA1KTsKLQkJCWlmICgoaW5iX3AoYWRkcmVzcyArIDUpICYgMHg3ZikgIT0gKH5pICYgMHg3ZikpIHsKLQkJCQlvdXRiX3AoaSwgYWRkcmVzcyArIDUpOwotCQkJCWVyciA9IC1FTk9ERVY7Ci0JCQkJZ290byBFUlJPUjE7Ci0JCQl9Ci0JCX0KKwkJZ290byBFUlJPUjE7CiAJfQogCiAJLyogT0suIEZvciBub3csIHdlIHByZXN1bWUgd2UgaGF2ZSBhIHZhbGlkIGNsaWVudC4gV2Ugbm93IGNyZWF0ZSB0aGUKQEAgLTU5MSwyMiArNTI3LDE5IEBACiAJfQogCiAJbmV3X2NsaWVudCA9ICZkYXRhLT5jbGllbnQ7Ci0JaWYgKGlzX2lzYSkKLQkJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7CiAJaTJjX3NldF9jbGllbnRkYXRhKG5ld19jbGllbnQsIGRhdGEpOwogCW5ld19jbGllbnQtPmFkZHIgPSBhZGRyZXNzOwogCW5ld19jbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCW5ld19jbGllbnQtPmRyaXZlciA9IGlzX2lzYSA/ICZsbTc4X2lzYV9kcml2ZXIgOiAmbG03OF9kcml2ZXI7Ci0JbmV3X2NsaWVudC0+ZmxhZ3MgPSAwOworCW5ld19jbGllbnQtPmRyaXZlciA9ICZsbTc4X2RyaXZlcjsKIAogCS8qIE5vdywgd2UgZG8gdGhlIHJlbWFpbmluZyBkZXRlY3Rpb24uICovCiAJaWYgKGtpbmQgPCAwKSB7Ci0JCWlmIChsbTc4X3JlYWRfdmFsdWUobmV3X2NsaWVudCwgTE03OF9SRUdfQ09ORklHKSAmIDB4ODApIHsKKwkJaWYgKGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19DT05GSUcpICYgMHg4MCkgewogCQkJZXJyID0gLUVOT0RFVjsKIAkJCWdvdG8gRVJST1IyOwogCQl9Ci0JCWlmICghaXNfaXNhICYmIChsbTc4X3JlYWRfdmFsdWUoCi0JCQkJbmV3X2NsaWVudCwgTE03OF9SRUdfSTJDX0FERFIpICE9IGFkZHJlc3MpKSB7CisJCWlmIChsbTc4X3JlYWRfdmFsdWUoZGF0YSwgTE03OF9SRUdfSTJDX0FERFIpICE9CisJCSAgICBhZGRyZXNzKSB7CiAJCQllcnIgPSAtRU5PREVWOwogCQkJZ290byBFUlJPUjI7CiAJCX0KQEAgLTYxNCw3ICs1NDcsNyBAQAogCiAJLyogRGV0ZXJtaW5lIHRoZSBjaGlwIHR5cGUuICovCiAJaWYgKGtpbmQgPD0gMCkgewotCQlpID0gbG03OF9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIExNNzhfUkVHX0NISVBJRCk7CisJCWkgPSBsbTc4X3JlYWRfdmFsdWUoZGF0YSwgTE03OF9SRUdfQ0hJUElEKTsKIAkJaWYgKGkgPT0gMHgwMCB8fCBpID09IDB4MjAJLyogTE03OCAqLwogCQkgfHwgaSA9PSAweDQwKQkJCS8qIExNNzgtSiAqLwogCQkJa2luZCA9IGxtNzg7CkBAIC02NDEsMjEgKzU3NCwxMiBAQAogCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgY2xpZW50X25hbWUsIEkyQ19OQU1FX1NJWkUpOwogCWRhdGEtPnR5cGUgPSBraW5kOwogCi0JZGF0YS0+dmFsaWQgPSAwOwotCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQogCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKIAkJZ290byBFUlJPUjI7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBMTTc4IGNoaXAgKi8KLQlsbTc4X2luaXRfY2xpZW50KG5ld19jbGllbnQpOwotCi0JLyogQSBmZXcgdmFycyBuZWVkIHRvIGJlIGZpbGxlZCB1cG9uIHN0YXJ0dXAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCWRhdGEtPmZhbl9taW5baV0gPSBsbTc4X3JlYWRfdmFsdWUobmV3X2NsaWVudCwKLQkJCQkJTE03OF9SRUdfRkFOX01JTihpKSk7Ci0JfQorCWxtNzhfaW5pdF9kZXZpY2UoZGF0YSk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwogCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApKSkKQEAgLTY3Niw5ICs2MDAsNiBAQAogRVJST1IyOgogCWtmcmVlKGRhdGEpOwogRVJST1IxOgotCWlmIChpc19pc2EpCi0JCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsIExNNzhfRVhURU5UKTsKLUVSUk9SMDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02OTMsOSArNjE0LDc3IEBACiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKIAotCWlmKGkyY19pc19pc2FfY2xpZW50KGNsaWVudCkpCi0JCXJlbGVhc2VfcmVnaW9uKGNsaWVudC0+YWRkciwgTE03OF9FWFRFTlQpOworCWtmcmVlKGRhdGEpOwogCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGxtNzhfaXNhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKiBSZXNlcnZlIHRoZSBJU0EgcmVnaW9uICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCwgTE03OF9FWFRFTlQsICJsbTc4IikpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbTc4X2RhdGEpLCBHRlBfS0VSTkVMKSkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0X3JlbGVhc2VfcmVnaW9uOworCX0KKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKwlkYXRhLT5jbGllbnQuYWRkciA9IHJlcy0+c3RhcnQ7CisJaTJjX3NldF9jbGllbnRkYXRhKCZkYXRhLT5jbGllbnQsIGRhdGEpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOworCisJaWYgKGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19DSElQSUQpICYgMHg4MCkgeworCQlkYXRhLT50eXBlID0gbG03OTsKKwkJbmFtZSA9ICJsbTc5IjsKKwl9IGVsc2UgeworCQlkYXRhLT50eXBlID0gbG03ODsKKwkJbmFtZSA9ICJsbTc4IjsKKwl9CisJc3RybGNweShkYXRhLT5jbGllbnQubmFtZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBMTTc4IGNoaXAgKi8KKwlsbTc4X2luaXRfZGV2aWNlKGRhdGEpOworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZsbTc4X2dyb3VwKSkKKwkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSkpKQorCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCisJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOworCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisJfQorCisJcmV0dXJuIDA7CisKKyBleGl0X3JlbW92ZV9maWxlczoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmbG03OF9ncm91cCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKKwlrZnJlZShkYXRhKTsKKyBleGl0X3JlbGVhc2VfcmVnaW9uOgorCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIExNNzhfRVhURU5UKTsKKyBleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGxtNzhfaXNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJcmVsZWFzZV9yZWdpb24oZGF0YS0+Y2xpZW50LmFkZHIsIExNNzhfRVhURU5UKTsKIAlrZnJlZShkYXRhKTsKIAogCXJldHVybiAwOwpAQCAtNzA2LDExICs2OTUsMTIgQEAKICAgIHNlcGFyYXRlbHkuCiAgICBXZSBpZ25vcmUgdGhlIExNNzggQlVTWSBmbGFnIGF0IHRoaXMgbW9tZW50IC0gaXQgY291bGQgbGVhZCB0byBkZWFkbG9ja3MsCiAgICB3b3VsZCBzbG93IGRvd24gdGhlIExNNzggYWNjZXNzIGFuZCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4gICovCi1zdGF0aWMgaW50IGxtNzhfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCitzdGF0aWMgaW50IGxtNzhfcmVhZF92YWx1ZShzdHJ1Y3QgbG03OF9kYXRhICpkYXRhLCB1OCByZWcpCiB7Ci0JaW50IHJlczsKLQlpZiAoaTJjX2lzX2lzYV9jbGllbnQoY2xpZW50KSkgewotCQlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CisKKwlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7IC8qIElTQSBkZXZpY2UgKi8KKwkJaW50IHJlczsKIAkJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAJCW91dGJfcChyZWcsIGNsaWVudC0+YWRkciArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKIAkJcmVzID0gaW5iX3AoY2xpZW50LT5hZGRyICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOwpAQCAtNzI3LDEwICs3MTcsMTEgQEAKICAgIHdvdWxkIHNsb3cgZG93biB0aGUgTE03OCBhY2Nlc3MgYW5kIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LiAKICAgIFRoZXJlIGFyZSBzb21lIHVnbHkgdHlwZWNhc3RzIGhlcmUsIGJ1dCB0aGUgZ29vZCBuZXcgaXMgLSB0aGV5IHNob3VsZAogICAgbm93aGVyZSBlbHNlIGJlIG5lY2Vzc2FyeSEgKi8KLXN0YXRpYyBpbnQgbG03OF93cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGludCBsbTc4X3dyaXRlX3ZhbHVlKHN0cnVjdCBsbTc4X2RhdGEgKmRhdGEsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0JaWYgKGkyY19pc19pc2FfY2xpZW50KGNsaWVudCkpIHsKLQkJc3RydWN0IGxtNzhfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCisJaWYgKCFjbGllbnQtPmRyaXZlcikgeyAvKiBJU0EgZGV2aWNlICovCiAJCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCQlvdXRiX3AocmVnLCBjbGllbnQtPmFkZHIgKyBMTTc4X0FERFJfUkVHX09GRlNFVCk7CiAJCW91dGJfcCh2YWx1ZSwgY2xpZW50LT5hZGRyICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOwpAQCAtNzQwLDIwICs3MzEsMjkgQEAKIAkJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIHZvaWQgbG03OF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIHZvaWQgbG03OF9pbml0X2RldmljZShzdHJ1Y3QgbG03OF9kYXRhICpkYXRhKQogewotCXU4IGNvbmZpZyA9IGxtNzhfcmVhZF92YWx1ZShjbGllbnQsIExNNzhfUkVHX0NPTkZJRyk7CisJdTggY29uZmlnOworCWludCBpOwogCiAJLyogU3RhcnQgbW9uaXRvcmluZyAqLwotCWlmICghKGNvbmZpZyAmIDB4MDEpKQotCQlsbTc4X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE03OF9SRUdfQ09ORklHLAorCWNvbmZpZyA9IGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19DT05GSUcpOworCWlmICgoY29uZmlnICYgMHgwOSkgIT0gMHgwMSkKKwkJbG03OF93cml0ZV92YWx1ZShkYXRhLCBMTTc4X1JFR19DT05GSUcsCiAJCQkJIChjb25maWcgJiAweGY3KSB8IDB4MDEpOworCisJLyogQSBmZXcgdmFycyBuZWVkIHRvIGJlIGZpbGxlZCB1cG9uIHN0YXJ0dXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWRhdGEtPmZhbl9taW5baV0gPSBsbTc4X3JlYWRfdmFsdWUoZGF0YSwKKwkJCQkJTE03OF9SRUdfRkFOX01JTihpKSk7CisJfQorCisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogfQogCiBzdGF0aWMgc3RydWN0IGxtNzhfZGF0YSAqbG03OF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CkBAIC03NjEsMzkgKzc2MSwzOSBAQAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICsgSFogLyAyKQogCSAgICB8fCAhZGF0YS0+dmFsaWQpIHsKIAotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlN0YXJ0aW5nIGxtNzggdXBkYXRlXG4iKTsKKwkJZGV2X2RiZyhkZXYsICJTdGFydGluZyBsbTc4IHVwZGF0ZVxuIik7CiAKIAkJZm9yIChpID0gMDsgaSA8PSA2OyBpKyspIHsKIAkJCWRhdGEtPmluW2ldID0KLQkJCSAgICBsbTc4X3JlYWRfdmFsdWUoY2xpZW50LCBMTTc4X1JFR19JTihpKSk7CisJCQkgICAgbG03OF9yZWFkX3ZhbHVlKGRhdGEsIExNNzhfUkVHX0lOKGkpKTsKIAkJCWRhdGEtPmluX21pbltpXSA9Ci0JCQkgICAgbG03OF9yZWFkX3ZhbHVlKGNsaWVudCwgTE03OF9SRUdfSU5fTUlOKGkpKTsKKwkJCSAgICBsbTc4X3JlYWRfdmFsdWUoZGF0YSwgTE03OF9SRUdfSU5fTUlOKGkpKTsKIAkJCWRhdGEtPmluX21heFtpXSA9Ci0JCQkgICAgbG03OF9yZWFkX3ZhbHVlKGNsaWVudCwgTE03OF9SRUdfSU5fTUFYKGkpKTsKKwkJCSAgICBsbTc4X3JlYWRfdmFsdWUoZGF0YSwgTE03OF9SRUdfSU5fTUFYKGkpKTsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAJCQlkYXRhLT5mYW5baV0gPQotCQkJICAgIGxtNzhfcmVhZF92YWx1ZShjbGllbnQsIExNNzhfUkVHX0ZBTihpKSk7CisJCQkgICAgbG03OF9yZWFkX3ZhbHVlKGRhdGEsIExNNzhfUkVHX0ZBTihpKSk7CiAJCQlkYXRhLT5mYW5fbWluW2ldID0KLQkJCSAgICBsbTc4X3JlYWRfdmFsdWUoY2xpZW50LCBMTTc4X1JFR19GQU5fTUlOKGkpKTsKKwkJCSAgICBsbTc4X3JlYWRfdmFsdWUoZGF0YSwgTE03OF9SRUdfRkFOX01JTihpKSk7CiAJCX0KLQkJZGF0YS0+dGVtcCA9IGxtNzhfcmVhZF92YWx1ZShjbGllbnQsIExNNzhfUkVHX1RFTVApOworCQlkYXRhLT50ZW1wID0gbG03OF9yZWFkX3ZhbHVlKGRhdGEsIExNNzhfUkVHX1RFTVApOwogCQlkYXRhLT50ZW1wX292ZXIgPQotCQkgICAgbG03OF9yZWFkX3ZhbHVlKGNsaWVudCwgTE03OF9SRUdfVEVNUF9PVkVSKTsKKwkJICAgIGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19URU1QX09WRVIpOwogCQlkYXRhLT50ZW1wX2h5c3QgPQotCQkgICAgbG03OF9yZWFkX3ZhbHVlKGNsaWVudCwgTE03OF9SRUdfVEVNUF9IWVNUKTsKLQkJaSA9IGxtNzhfcmVhZF92YWx1ZShjbGllbnQsIExNNzhfUkVHX1ZJRF9GQU5ESVYpOworCQkgICAgbG03OF9yZWFkX3ZhbHVlKGRhdGEsIExNNzhfUkVHX1RFTVBfSFlTVCk7CisJCWkgPSBsbTc4X3JlYWRfdmFsdWUoZGF0YSwgTE03OF9SRUdfVklEX0ZBTkRJVik7CiAJCWRhdGEtPnZpZCA9IGkgJiAweDBmOwogCQlpZiAoZGF0YS0+dHlwZSA9PSBsbTc5KQogCQkJZGF0YS0+dmlkIHw9Ci0JCQkgICAgKGxtNzhfcmVhZF92YWx1ZShjbGllbnQsIExNNzhfUkVHX0NISVBJRCkgJgorCQkJICAgIChsbTc4X3JlYWRfdmFsdWUoZGF0YSwgTE03OF9SRUdfQ0hJUElEKSAmCiAJCQkgICAgIDB4MDEpIDw8IDQ7CiAJCWVsc2UKIAkJCWRhdGEtPnZpZCB8PSAweDEwOwogCQlkYXRhLT5mYW5fZGl2WzBdID0gKGkgPj4gNCkgJiAweDAzOwogCQlkYXRhLT5mYW5fZGl2WzFdID0gaSA+PiA2OwotCQlkYXRhLT5hbGFybXMgPSBsbTc4X3JlYWRfdmFsdWUoY2xpZW50LCBMTTc4X1JFR19BTEFSTTEpICsKLQkJICAgIChsbTc4X3JlYWRfdmFsdWUoY2xpZW50LCBMTTc4X1JFR19BTEFSTTIpIDw8IDgpOworCQlkYXRhLT5hbGFybXMgPSBsbTc4X3JlYWRfdmFsdWUoZGF0YSwgTE03OF9SRUdfQUxBUk0xKSArCisJCSAgICAobG03OF9yZWFkX3ZhbHVlKGRhdGEsIExNNzhfUkVHX0FMQVJNMikgPDwgOCk7CiAJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CiAJCWRhdGEtPnZhbGlkID0gMTsKIApAQCAtODA1LDI2ICs4MDUsMTU0IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKKy8qIHJldHVybiAxIGlmIGEgc3VwcG9ydGVkIGNoaXAgaXMgZm91bmQsIDAgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IF9faW5pdCBsbTc4X2lzYV9mb3VuZCh1bnNpZ25lZCBzaG9ydCBhZGRyZXNzKQoreworCWludCB2YWwsIHNhdmUsIGZvdW5kID0gMDsKKworCWlmICghcmVxdWVzdF9yZWdpb24oYWRkcmVzcywgTE03OF9FWFRFTlQsICJsbTc4IikpCisJCXJldHVybiAwOworCisjZGVmaW5lIFJFQUxMWV9TTE9XX0lPCisJLyogV2UgbmVlZCB0aGUgdGltZW91dHMgZm9yIGF0IGxlYXN0IHNvbWUgTE03OC1saWtlCisJICAgY2hpcHMuIEJ1dCBvbmx5IGlmIHdlIHJlYWQgJ3VuZGVmaW5lZCcgcmVnaXN0ZXJzLiAqLworCXZhbCA9IGluYl9wKGFkZHJlc3MgKyAxKTsKKwlpZiAoaW5iX3AoYWRkcmVzcyArIDIpICE9IHZhbAorCSB8fCBpbmJfcChhZGRyZXNzICsgMykgIT0gdmFsCisJIHx8IGluYl9wKGFkZHJlc3MgKyA3KSAhPSB2YWwpCisJCWdvdG8gcmVsZWFzZTsKKyN1bmRlZiBSRUFMTFlfU0xPV19JTworCisJLyogV2Ugc2hvdWxkIGJlIGFibGUgdG8gY2hhbmdlIHRoZSA3IExTQiBvZiB0aGUgYWRkcmVzcyBwb3J0LiBUaGUKKwkgICBNU0IgKGJ1c3kgZmxhZykgc2hvdWxkIGJlIGNsZWFyIGluaXRpYWxseSwgc2V0IGFmdGVyIHRoZSB3cml0ZS4gKi8KKwlzYXZlID0gaW5iX3AoYWRkcmVzcyArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKKwlpZiAoc2F2ZSAmIDB4ODApCisJCWdvdG8gcmVsZWFzZTsKKwl2YWwgPSB+c2F2ZSAmIDB4N2Y7CisJb3V0Yl9wKHZhbCwgYWRkcmVzcyArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKKwlpZiAoaW5iX3AoYWRkcmVzcyArIExNNzhfQUREUl9SRUdfT0ZGU0VUKSAhPSAodmFsIHwgMHg4MCkpIHsKKwkJb3V0Yl9wKHNhdmUsIGFkZHJlc3MgKyBMTTc4X0FERFJfUkVHX09GRlNFVCk7CisJCWdvdG8gcmVsZWFzZTsKKwl9CisKKwkvKiBXZSBmb3VuZCBhIGRldmljZSwgbm93IHNlZSBpZiBpdCBjb3VsZCBiZSBhbiBMTTc4ICovCisJb3V0Yl9wKExNNzhfUkVHX0NPTkZJRywgYWRkcmVzcyArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKKwl2YWwgPSBpbmJfcChhZGRyZXNzICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOworCWlmICh2YWwgJiAweDgwKQorCQlnb3RvIHJlbGVhc2U7CisJb3V0Yl9wKExNNzhfUkVHX0kyQ19BRERSLCBhZGRyZXNzICsgTE03OF9BRERSX1JFR19PRkZTRVQpOworCXZhbCA9IGluYl9wKGFkZHJlc3MgKyBMTTc4X0RBVEFfUkVHX09GRlNFVCk7CisJaWYgKHZhbCA8IDB4MDMgfHwgdmFsID4gMHg3NykJLyogTm90IGEgdmFsaWQgSTJDIGFkZHJlc3MgKi8KKwkJZ290byByZWxlYXNlOworCisJLyogVGhlIGJ1c3kgZmxhZyBzaG91bGQgYmUgY2xlYXIgYWdhaW4gKi8KKwlpZiAoaW5iX3AoYWRkcmVzcyArIExNNzhfQUREUl9SRUdfT0ZGU0VUKSAmIDB4ODApCisJCWdvdG8gcmVsZWFzZTsKKworCS8qIEV4cGxpY2l0bHkgcHJldmVudCB0aGUgbWlzZGV0ZWN0aW9uIG9mIFdpbmJvbmQgY2hpcHMgKi8KKwlvdXRiX3AoMHg0ZiwgYWRkcmVzcyArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKKwl2YWwgPSBpbmJfcChhZGRyZXNzICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOworCWlmICh2YWwgPT0gMHhhMyB8fCB2YWwgPT0gMHg1YykKKwkJZ290byByZWxlYXNlOworCisJLyogRXhwbGljaXRseSBwcmV2ZW50IHRoZSBtaXNkZXRlY3Rpb24gb2YgSVRFIGNoaXBzICovCisJb3V0Yl9wKDB4NTgsIGFkZHJlc3MgKyBMTTc4X0FERFJfUkVHX09GRlNFVCk7CisJdmFsID0gaW5iX3AoYWRkcmVzcyArIExNNzhfREFUQV9SRUdfT0ZGU0VUKTsKKwlpZiAodmFsID09IDB4OTApCisJCWdvdG8gcmVsZWFzZTsKKworCS8qIERldGVybWluZSB0aGUgY2hpcCB0eXBlICovCisJb3V0Yl9wKExNNzhfUkVHX0NISVBJRCwgYWRkcmVzcyArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKKwl2YWwgPSBpbmJfcChhZGRyZXNzICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOworCWlmICh2YWwgPT0gMHgwMAkJCS8qIExNNzggKi8KKwkgfHwgdmFsID09IDB4NDAJCQkvKiBMTTc4LUogKi8KKwkgfHwgKHZhbCAmIDB4ZmUpID09IDB4YzApCS8qIExNNzkgKi8KKwkJZm91bmQgPSAxOworCisJaWYgKGZvdW5kKQorCQlwcl9pbmZvKCJsbTc4OiBGb3VuZCBhbiAlcyBjaGlwIGF0ICUjeFxuIiwKKwkJCXZhbCAmIDB4ODAgPyAiTE03OSIgOiAiTE03OCIsIChpbnQpYWRkcmVzcyk7CisKKyByZWxlYXNlOgorCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsIExNNzhfRVhURU5UKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGxtNzhfaXNhX2RldmljZV9hZGQodW5zaWduZWQgc2hvcnQgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzID0geworCQkuc3RhcnQJPSBhZGRyZXNzLAorCQkuZW5kCT0gYWRkcmVzcyArIExNNzhfRVhURU5ULAorCQkubmFtZQk9ICJsbTc4IiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwl9OworCWludCBlcnI7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJsbTc4IiwgYWRkcmVzcyk7CisJaWYgKCFwZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCXByaW50ayhLRVJOX0VSUiAibG03ODogRGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyZXMsIDEpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJsbTc4OiBEZXZpY2UgcmVzb3VyY2UgYWRkaXRpb24gZmFpbGVkICIKKwkJICAgICAgICIoJWQpXG4iLCBlcnIpOworCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKKwl9CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJsbTc4OiBEZXZpY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsCisJCSAgICAgICBlcnIpOworCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKKwl9CisKKwlyZXR1cm4gMDsKKworIGV4aXRfZGV2aWNlX3B1dDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworIGV4aXQ6CisJcGRldiA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBfX2luaXQgc21fbG03OF9pbml0KHZvaWQpCiB7CiAJaW50IHJlczsKIAogCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZsbTc4X2RyaXZlcik7CiAJaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwkJZ290byBleGl0OwogCi0JLyogRG9uJ3QgZXhpdCBpZiB0aGlzIG9uZSBmYWlscywgd2Ugc3RpbGwgd2FudCB0aGUgSTJDIHZhcmlhbnRzCi0JICAgdG8gd29yayEgKi8KLQlpZiAoaTJjX2lzYV9hZGRfZHJpdmVyKCZsbTc4X2lzYV9kcml2ZXIpKQotCQlpc2FfYWRkcmVzcyA9IDA7CisJaWYgKGxtNzhfaXNhX2ZvdW5kKGlzYV9hZGRyZXNzKSkgeworCQlyZXMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmxtNzhfaXNhX2RyaXZlcik7CisJCWlmIChyZXMpCisJCQlnb3RvIGV4aXRfdW5yZWdfaTJjX2RyaXZlcjsKKworCQkvKiBTZXRzIGdsb2JhbCBwZGV2IGFzIGEgc2lkZSBlZmZlY3QgKi8KKwkJcmVzID0gbG03OF9pc2FfZGV2aWNlX2FkZChpc2FfYWRkcmVzcyk7CisJCWlmIChyZXMpCisJCQlnb3RvIGV4aXRfdW5yZWdfaXNhX2RyaXZlcjsKKwl9CiAKIAlyZXR1cm4gMDsKKworIGV4aXRfdW5yZWdfaXNhX2RyaXZlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbG03OF9pc2FfZHJpdmVyKTsKKyBleGl0X3VucmVnX2kyY19kcml2ZXI6CisJaTJjX2RlbF9kcml2ZXIoJmxtNzhfZHJpdmVyKTsKKyBleGl0OgorCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbV9sbTc4X2V4aXQodm9pZCkKIHsKLQlpZiAoaXNhX2FkZHJlc3MpCi0JCWkyY19pc2FfZGVsX2RyaXZlcigmbG03OF9pc2FfZHJpdmVyKTsKKwlpZiAocGRldikgeworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmxtNzhfaXNhX2RyaXZlcik7CisJfQogCWkyY19kZWxfZHJpdmVyKCZsbTc4X2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04Ny5jIGIvZHJpdmVycy9od21vbi9sbTg3LmMKaW5kZXggM2NlODI1NC4uOTg4YWUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg3LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg3LmMKQEAgLTc0Nyw2ICs3NDcsNyBAQAogCX0KIAogCWlmICghKGRhdGEtPmNoYW5uZWwgJiBDSEFOX05PX1ZJRCkpIHsKKwkJZGF0YS0+dnJtID0gdmlkX3doaWNoX3ZybSgpOwogCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAogCQkJCQkmZGV2X2F0dHJfY3B1MF92aWQpKQogCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LApAQCAtNzc5LDcgKzc4MCw2IEBACiAJdTggY29uZmlnOwogCiAJZGF0YS0+Y2hhbm5lbCA9IGxtODdfcmVhZF92YWx1ZShjbGllbnQsIExNODdfUkVHX0NIQU5ORUxfTU9ERSk7Ci0JZGF0YS0+dnJtID0gdmlkX3doaWNoX3ZybSgpOwogCiAJY29uZmlnID0gbG04N19yZWFkX3ZhbHVlKGNsaWVudCwgTE04N19SRUdfQ09ORklHKTsKIAlpZiAoIShjb25maWcgJiAweDAxKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9tYXg2NjUwLmMgYi9kcml2ZXJzL2h3bW9uL21heDY2NTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDE1NjY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9tYXg2NjUwLmMKQEAgLTAsMCArMSw2OTMgQEAKKy8qCisgKiBtYXg2NjUwLmMgLSBQYXJ0IG9mIGxtX3NlbnNvcnMsIExpbnV4IGtlcm5lbCBtb2R1bGVzIGZvciBoYXJkd2FyZQorICogICAgICAgICAgICAgbW9uaXRvcmluZy4KKyAqCisgKiAoQykgMjAwNyBieSBIYW5zIEouIEtvY2ggPGhqa0BsaW51dHJvbml4LmRlPgorICoKKyAqIGJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieSBKb2huIE1vcnJpcyA8am9obi5tb3JyaXNAc3BpcmVudGNvbS5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgU3BpcmVudCBDb21tdW5pY2F0aW9ucworICogYW5kIENsYXVzIEdpbmRoYXJ0IDxjbGF1cy5naW5kaGFydEBrb250cm9uLmNvbT4KKyAqCisgKiBUaGlzIG1vZHVsZSBoYXMgb25seSBiZWVuIHRlc3RlZCB3aXRoIHRoZSBNQVg2NjUwIGNoaXAuIEl0IHNob3VsZAorICogYWxzbyB3b3JrIHdpdGggdGhlIE1BWDY2NTEuIEl0IGRvZXMgbm90IGRpc3Rpbmd1aXNoIG1heDY2NTAgYW5kIG1heDY2NTEKKyAqIGNoaXBzLgorICoKKyAqIFRoYSBkYXRhc2hlZXQgd2FzIGxhc3Qgc2VlbiBhdDoKKyAqCisgKiAgICAgICAgaHR0cDovL3BkZnNlcnYubWF4aW0taWMuY29tL2VuL2RzL01BWDY2NTAtTUFYNjY1MS5wZGYKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisvKgorICogQWRkcmVzc2VzIHRvIHNjYW4uIFRoZXJlIGFyZSBmb3VyIGRpc2pvaW50IHBvc3NpYmlsaXRpZXMsIGJ5IHBpbiBjb25maWcuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsweDFiLCAweDFmLCAweDQ4LCAweDRiLCBJMkNfQ0xJRU5UX0VORH07CisKKy8qCisgKiBJbnNtb2QgcGFyYW1ldGVycworICovCisKKy8qIGZhbl92b2x0YWdlOiA1PTVWIGZhbiwgMTI9MTJWIGZhbiwgMD1kb24ndCBjaGFuZ2UgKi8KK3N0YXRpYyBpbnQgZmFuX3ZvbHRhZ2U7CisvKiBwcmVzY2FsZXI6IFBvc3NpYmxlIHZhbHVlcyBhcmUgMSwgMiwgNCwgOCwgMTYgb3IgMCBmb3IgZG9uJ3QgY2hhbmdlICovCitzdGF0aWMgaW50IHByZXNjYWxlcjsKKy8qIGNsb2NrOiBUaGUgY2xvY2sgZnJlcXVlbmN5IG9mIHRoZSBjaGlwIHRoZSBkcml2ZXIgc2hvdWxkIGFzc3VtZSAqLworc3RhdGljIGludCBjbG9jayA9IDI1NDAwMDsKKworbW9kdWxlX3BhcmFtKGZhbl92b2x0YWdlLCBpbnQsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKHByZXNjYWxlciwgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShjbG9jaywgaW50LCBTX0lSVUdPKTsKKworSTJDX0NMSUVOVF9JTlNNT0RfMShtYXg2NjUwKTsKKworLyoKKyAqIE1BWCA2NjUwLzY2NTEgcmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBNQVg2NjUwX1JFR19TUEVFRAkweDAwCisjZGVmaW5lIE1BWDY2NTBfUkVHX0NPTkZJRwkweDAyCisjZGVmaW5lIE1BWDY2NTBfUkVHX0dQSU9fREVGCTB4MDQKKyNkZWZpbmUgTUFYNjY1MF9SRUdfREFDCQkweDA2CisjZGVmaW5lIE1BWDY2NTBfUkVHX0FMQVJNX0VOCTB4MDgKKyNkZWZpbmUgTUFYNjY1MF9SRUdfQUxBUk0JMHgwQQorI2RlZmluZSBNQVg2NjUwX1JFR19UQUNIMAkweDBDCisjZGVmaW5lIE1BWDY2NTBfUkVHX1RBQ0gxCTB4MEUKKyNkZWZpbmUgTUFYNjY1MF9SRUdfVEFDSDIJMHgxMAorI2RlZmluZSBNQVg2NjUwX1JFR19UQUNIMwkweDEyCisjZGVmaW5lIE1BWDY2NTBfUkVHX0dQSU9fU1RBVAkweDE0CisjZGVmaW5lIE1BWDY2NTBfUkVHX0NPVU5UCTB4MTYKKworLyoKKyAqIENvbmZpZyByZWdpc3RlciBiaXRzCisgKi8KKworI2RlZmluZSBNQVg2NjUwX0NGR19WMTIJCQkweDA4CisjZGVmaW5lIE1BWDY2NTBfQ0ZHX1BSRVNDQUxFUl9NQVNLCTB4MDcKKyNkZWZpbmUgTUFYNjY1MF9DRkdfUFJFU0NBTEVSXzIJCTB4MDEKKyNkZWZpbmUgTUFYNjY1MF9DRkdfUFJFU0NBTEVSXzQJCTB4MDIKKyNkZWZpbmUgTUFYNjY1MF9DRkdfUFJFU0NBTEVSXzgJCTB4MDMKKyNkZWZpbmUgTUFYNjY1MF9DRkdfUFJFU0NBTEVSXzE2CTB4MDQKKyNkZWZpbmUgTUFYNjY1MF9DRkdfTU9ERV9NQVNLCQkweDMwCisjZGVmaW5lIE1BWDY2NTBfQ0ZHX01PREVfT04JCTB4MDAKKyNkZWZpbmUgTUFYNjY1MF9DRkdfTU9ERV9PRkYJCTB4MTAKKyNkZWZpbmUgTUFYNjY1MF9DRkdfTU9ERV9DTE9TRURfTE9PUAkweDIwCisjZGVmaW5lIE1BWDY2NTBfQ0ZHX01PREVfT1BFTl9MT09QCTB4MzAKKyNkZWZpbmUgTUFYNjY1MF9DT1VOVF9NQVNLCQkweDAzCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIG9mIHRoZSBGQU4tUlBNICovCisjZGVmaW5lIEZBTl9SUE1fTUlOIDI0MAorI2RlZmluZSBGQU5fUlBNX01BWCAzMDAwMAorCisjZGVmaW5lIERJVl9GUk9NX1JFRyhyZWcpICgxIDw8IChyZWcgJiA3KSkKKworc3RhdGljIGludCBtYXg2NjUwX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IG1heDY2NTBfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKTsKK3N0YXRpYyBpbnQgbWF4NjY1MF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBpbnQgbWF4NjY1MF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworc3RhdGljIHN0cnVjdCBtYXg2NjUwX2RhdGEgKm1heDY2NTBfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisvKgorICogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykKKyAqLworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWF4NjY1MF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibWF4NjY1MCIsCisJfSwKKwkuYXR0YWNoX2FkYXB0ZXIJPSBtYXg2NjUwX2F0dGFjaF9hZGFwdGVyLAorCS5kZXRhY2hfY2xpZW50CT0gbWF4NjY1MF9kZXRhY2hfY2xpZW50LAorfTsKKworLyoKKyAqIENsaWVudCBkYXRhIChlYWNoIGNsaWVudCBnZXRzIGl0cyBvd24pCisgKi8KKworc3RydWN0IG1heDY2NTBfZGF0YQoreworCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOworCWNoYXIgdmFsaWQ7IC8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogaW4gamlmZmllcyAqLworCisJLyogcmVnaXN0ZXIgdmFsdWVzICovCisJdTggc3BlZWQ7CisJdTggY29uZmlnOworCXU4IHRhY2hbNF07CisJdTggY291bnQ7CisJdTggZGFjOworfTsKKworc3RhdGljIHNzaXplX3QgZ2V0X2ZhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkgICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgbWF4NjY1MF9kYXRhICpkYXRhID0gbWF4NjY1MF91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IHJwbTsKKworCS8qCisJKiBDYWxjdWxhdGlvbiBkZXRhaWxzOgorCSoKKwkqIEVhY2ggdGFjaG9tZXRlciBjb3VudHMgb3ZlciBhbiBpbnRlcnZhbCBnaXZlbiBieSB0aGUgImNvdW50IgorCSogcmVnaXN0ZXIgKDAuMjUsIDAuNSwgMSBvciAyIHNlY29uZHMpLiBUaGlzIG1vZHVsZSBhc3N1bWVzCisJKiB0aGF0IHRoZSBmYW5zIHByb2R1Y2UgdHdvIHB1bHNlcyBwZXIgcmV2b2x1dGlvbiAodGhpcyBzZWVtcworCSogdG8gYmUgdGhlIG1vc3QgY29tbW9uKS4KKwkqLworCisJcnBtID0gKChkYXRhLT50YWNoW2F0dHItPmluZGV4XSAqIDEyMCkgLyBESVZfRlJPTV9SRUcoZGF0YS0+Y291bnQpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcnBtKTsKK30KKworLyoKKyAqIFNldCB0aGUgZmFuIHNwZWVkIHRvIHRoZSBzcGVjaWZpZWQgUlBNIChvciByZWFkIGJhY2sgdGhlIFJQTSBzZXR0aW5nKS4KKyAqIFRoaXMgd29ya3MgaW4gY2xvc2VkIGxvb3AgbW9kZSBvbmx5LiBVc2UgcHdtMSBmb3Igb3BlbiBsb29wIHNwZWVkIHNldHRpbmcuCisgKgorICogVGhlIE1BWDY2NTAvMSB3aWxsIGF1dG9tYXRpY2FsbHkgY29udHJvbCBmYW4gc3BlZWQgd2hlbiBpbiBjbG9zZWQgbG9vcAorICogbW9kZS4KKyAqCisgKiBBc3N1bXB0aW9uczoKKyAqCisgKiAxKSBUaGUgTUFYNjY1MC8xIGludGVybmFsIDI1NGtIeiBjbG9jayBmcmVxdWVuY3kgaXMgc2V0IGNvcnJlY3RseS4gVXNlCisgKiAgICB0aGUgY2xvY2sgbW9kdWxlIHBhcmFtZXRlciBpZiB5b3UgbmVlZCB0byBmaW5lIHR1bmUgdGhpcy4KKyAqCisgKiAyKSBUaGUgcHJlc2NhbGVyIChsb3cgdGhyZWUgYml0cyBvZiB0aGUgY29uZmlnIHJlZ2lzdGVyKSBoYXMgYWxyZWFkeQorICogICAgYmVlbiBzZXQgdG8gYW4gYXBwcm9wcmlhdGUgdmFsdWUuIFVzZSB0aGUgcHJlc2NhbGVyIG1vZHVsZSBwYXJhbWV0ZXIKKyAqICAgIGlmIHlvdXIgQklPUyBkb2Vzbid0IGluaXRpYWxpemUgdGhlIGNoaXAgcHJvcGVybHkuCisgKgorICogVGhlIHJlbGV2YW50IGVxdWF0aW9ucyBhcmUgZ2l2ZW4gb24gcGFnZXMgMjEgYW5kIDIyIG9mIHRoZSBkYXRhc2hlZXQuCisgKgorICogRnJvbSB0aGUgZGF0YXNoZWV0LCB0aGUgcmVsZXZhbnQgZXF1YXRpb24gd2hlbiBpbiByZWd1bGF0aW9uIGlzOgorICoKKyAqICAgIFtmQ0xLIC8gKDEyOCB4IChLVEFDSCArIDEpKV0gPSAyIHggRmFuU3BlZWQgLyBLU0NBTEUKKyAqCisgKiB3aGVyZToKKyAqCisgKiAgICBmQ0xLIGlzIHRoZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSAoZWl0aGVyIHRoZSAyNTRrSHogaW50ZXJuYWwKKyAqICAgICAgICAgb3NjaWxsYXRvciBvciB0aGUgZXh0ZXJuYWxseSBhcHBsaWVkIGNsb2NrKQorICoKKyAqICAgIEtUQUNIIGlzIHRoZSB2YWx1ZSBpbiB0aGUgc3BlZWQgcmVnaXN0ZXIKKyAqCisgKiAgICBGYW5TcGVlZCBpcyB0aGUgc3BlZWQgb2YgdGhlIGZhbiBpbiBycHMKKyAqCisgKiAgICBLU0NBTEUgaXMgdGhlIHByZXNjYWxlciB2YWx1ZSAoMSwgMiwgNCwgOCwgb3IgMTYpCisgKgorICogV2hlbiByZWFkaW5nLCB3ZSBuZWVkIHRvIHNvbHZlIGZvciBGYW5TcGVlZC4gV2hlbiB3cml0aW5nLCB3ZSBuZWVkIHRvCisgKiBzb2x2ZSBmb3IgS1RBQ0guCisgKgorICogTm90ZTogdGhpcyB0YWNob21ldGVyIGlzIGNvbXBsZXRlbHkgc2VwYXJhdGUgZnJvbSB0aGUgdGFjaG9tZXRlcnMKKyAqIHVzZWQgdG8gbWVhc3VyZSB0aGUgZmFuIHNwZWVkcy4gT25seSBvbmUgZmFuJ3Mgc3BlZWQgKGZhbjEpIGlzCisgKiBjb250cm9sbGVkLgorICovCisKK3N0YXRpYyBzc2l6ZV90IGdldF90YXJnZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IG1heDY2NTBfZGF0YSAqZGF0YSA9IG1heDY2NTBfdXBkYXRlX2RldmljZShkZXYpOworCWludCBrc2NhbGUsIGt0YWNoLCBycG07CisKKwkvKgorCSogVXNlIHRoZSBkYXRhc2hlZXQgZXF1YXRpb246CisJKgorCSogICAgRmFuU3BlZWQgPSBLU0NBTEUgeCBmQ0xLIC8gWzI1NiB4IChLVEFDSCArIDEpXQorCSoKKwkqIHRoZW4gbXVsdGlwbHkgYnkgNjAgdG8gZ2l2ZSBycG0uCisJKi8KKworCWtzY2FsZSA9IERJVl9GUk9NX1JFRyhkYXRhLT5jb25maWcpOworCWt0YWNoID0gZGF0YS0+c3BlZWQ7CisJcnBtID0gNjAgKiBrc2NhbGUgKiBjbG9jayAvICgyNTYgKiAoa3RhY2ggKyAxKSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJwbSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF90YXJnZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBtYXg2NjUwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcnBtID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJaW50IGtzY2FsZSwga3RhY2g7CisKKwlycG0gPSBTRU5TT1JTX0xJTUlUKHJwbSwgRkFOX1JQTV9NSU4sIEZBTl9SUE1fTUFYKTsKKworCS8qCisJKiBEaXZpZGUgdGhlIHJlcXVpcmVkIHNwZWVkIGJ5IDYwIHRvIGdldCBmcm9tIHJwbSB0byBycHMsIHRoZW4KKwkqIHVzZSB0aGUgZGF0YXNoZWV0IGVxdWF0aW9uOgorCSoKKwkqICAgICBLVEFDSCA9IFsoZkNMSyB4IEtTQ0FMRSkgLyAoMjU2IHggRmFuU3BlZWQpXSAtIDEKKwkqLworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJa3NjYWxlID0gRElWX0ZST01fUkVHKGRhdGEtPmNvbmZpZyk7CisJa3RhY2ggPSAoKGNsb2NrICoga3NjYWxlKSAvICgyNTYgKiBycG0gLyA2MCkpIC0gMTsKKwlpZiAoa3RhY2ggPCAwKQorCQlrdGFjaCA9IDA7CisJaWYgKGt0YWNoID4gMjU1KQorCQlrdGFjaCA9IDI1NTsKKwlkYXRhLT5zcGVlZCA9IGt0YWNoOworCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NTBfUkVHX1NQRUVELCBkYXRhLT5zcGVlZCk7CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIEdldC9zZXQgdGhlIGZhbiBzcGVlZCBpbiBvcGVuIGxvb3AgbW9kZSB1c2luZyBwd20xIHN5c2ZzIGZpbGUuCisgKiBTcGVlZCBpcyBnaXZlbiBhcyBhIHJlbGF0aXZlIHZhbHVlIGZyb20gMCB0byAyNTUsIHdoZXJlIDI1NSBpcyBtYXhpbXVtCisgKiBzcGVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgZG9uZSBieSB3cml0aW5nIGRpcmVjdGx5IHRvIHRoZSBjaGlwJ3MgREFDLAorICogaXQgd29uJ3QgY2hhbmdlIHRoZSBjbG9zZWQgbG9vcCBzcGVlZCBzZXQgYnkgZmFuMV90YXJnZXQuCisgKiBBbHNvIG5vdGUgdGhhdCBkdWUgdG8gcm91bmRpbmcgZXJyb3JzIGl0IGlzIHBvc3NpYmxlIHRoYXQgeW91IGRvbid0IHJlYWQKKyAqIGJhY2sgZXhhY3RseSB0aGUgdmFsdWUgeW91IGhhdmUgc2V0LgorICovCisKK3N0YXRpYyBzc2l6ZV90IGdldF9wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlpbnQgcHdtOworCXN0cnVjdCBtYXg2NjUwX2RhdGEgKmRhdGEgPSBtYXg2NjUwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCS8qIFVzZWZ1bCByYW5nZSBmb3IgZGFjIGlzIDAtMTgwIGZvciAxMlYgZmFucyBhbmQgMC03NiBmb3IgNVYgZmFucy4KKwkgICBMb3dlciBEQUMgdmFsdWVzIG1lYW4gaGlnaGVyIHNwZWVkcy4gKi8KKwlpZiAoZGF0YS0+Y29uZmlnICYgTUFYNjY1MF9DRkdfVjEyKQorCQlwd20gPSAyNTUgLSAoMjU1ICogKGludClkYXRhLT5kYWMpLzE4MDsKKwllbHNlCisJCXB3bSA9IDI1NSAtICgyNTUgKiAoaW50KWRhdGEtPmRhYykvNzY7CisKKwlpZiAocHdtIDwgMCkKKwkJcHdtID0gMDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwd20pOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBtYXg2NjUwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcHdtID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisKKwlwd20gPSBTRU5TT1JTX0xJTUlUKHB3bSwgMCwgMjU1KTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWlmIChkYXRhLT5jb25maWcgJiBNQVg2NjUwX0NGR19WMTIpCisJCWRhdGEtPmRhYyA9IDE4MCAtICgxODAgKiBwd20pLzI1NTsKKwllbHNlCisJCWRhdGEtPmRhYyA9IDc2IC0gKDc2ICogcHdtKS8yNTU7CisKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTUFYNjY1MF9SRUdfREFDLCBkYXRhLT5kYWMpOworCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBHZXQvU2V0IGNvbnRyb2xsZXIgbW9kZToKKyAqIFBvc3NpYmxlIHZhbHVlczoKKyAqIDAgPSBGYW4gYWx3YXlzIG9uCisgKiAxID0gT3BlbiBsb29wLCBWb2x0YWdlIGlzIHNldCBhY2NvcmRpbmcgdG8gc3BlZWQsIG5vdCByZWd1bGF0ZWQuCisgKiAyID0gQ2xvc2VkIGxvb3AsIFJQTSBmb3IgYWxsIGZhbnMgcmVndWxhdGVkIGJ5IGZhbjEgdGFjaG9tZXRlcgorICovCisKK3N0YXRpYyBzc2l6ZV90IGdldF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBtYXg2NjUwX2RhdGEgKmRhdGEgPSBtYXg2NjUwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgbW9kZSA9IChkYXRhLT5jb25maWcgJiBNQVg2NjUwX0NGR19NT0RFX01BU0spID4+IDQ7CisJaW50IHN5c2ZzX21vZGVzWzRdID0gezAsIDEsIDIsIDF9OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHN5c2ZzX21vZGVzW21vZGVdKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBtYXg2NjUwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbW9kZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCWludCBtYXg2NjUwX21vZGVzWzNdID0gezAsIDMsIDJ9OworCisJaWYgKChtb2RlIDwgMCl8fChtb2RlID4gMikpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiaWxsZWdhbCB2YWx1ZSBmb3IgcHdtMV9lbmFibGUgKCVkKVxuIiwgbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWRhdGEtPmNvbmZpZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NTBfUkVHX0NPTkZJRyk7CisJZGF0YS0+Y29uZmlnID0gKGRhdGEtPmNvbmZpZyAmIH5NQVg2NjUwX0NGR19NT0RFX01BU0spCisJCSAgICAgICB8IChtYXg2NjUwX21vZGVzW21vZGVdIDw8IDQpOworCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NTBfUkVHX0NPTkZJRywgZGF0YS0+Y29uZmlnKTsKKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogUmVhZC93cml0ZSBmdW5jdGlvbnMgZm9yIGZhbjFfZGl2IHN5c2ZzIGZpbGUuIFRoZSBNQVg2NjUwIGhhcyBubyBzdWNoCisgKiBkaXZpZGVyLiBXZSBoYW5kbGUgdGhpcyBieSBjb252ZXJ0aW5nIGJldHdlZW4gZGl2aWRlciBhbmQgY291bnR0aW1lOgorICoKKyAqIChjb3VudHRpbWUgPT0gaykgPD09PiAoZGl2aWRlciA9PSAyXmspLCBrID0gMCwgMSwgMiwgb3IgMworICoKKyAqIExvd2VyIHZhbHVlcyBvZiBrIGFsbG93IHRvIGNvbm5lY3QgYSBmYXN0ZXIgZmFuIHdpdGhvdXQgdGhlIHJpc2sgb2YKKyAqIGNvdW50ZXIgb3ZlcmZsb3cuIFRoZSBwcmljZSBpcyBsb3dlciByZXNvbHV0aW9uLiBZb3UgY2FuIGFsc28gc2V0IGNvdW50dGltZQorICogdXNpbmcgdGhlIG1vZHVsZSBwYXJhbWV0ZXIuIE5vdGUgdGhhdCB0aGUgbW9kdWxlIHBhcmFtZXRlciAicHJlc2NhbGVyIiBhbHNvCisgKiBpbmZsdWVuY2VzIHRoZSBiZWhhdmlvdXIuIFVuZm9ydHVuYXRlbHksIHRoZXJlJ3Mgbm8gc3lzZnMgYXR0cmlidXRlCisgKiBkZWZpbmVkIGZvciB0aGF0LiBTZWUgdGhlIGRhdGEgc2hlZXQgZm9yIGRldGFpbHMuCisgKi8KKworc3RhdGljIHNzaXplX3QgZ2V0X2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkgICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBtYXg2NjUwX2RhdGEgKmRhdGEgPSBtYXg2NjUwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBESVZfRlJPTV9SRUcoZGF0YS0+Y291bnQpKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbWF4NjY1MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGRpdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXN3aXRjaCAoZGl2KSB7CisJY2FzZSAxOgorCQlkYXRhLT5jb3VudCA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGF0YS0+Y291bnQgPSAxOworCQlicmVhazsKKwljYXNlIDQ6CisJCWRhdGEtPmNvdW50ID0gMjsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlkYXRhLT5jb3VudCA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJImlsbGVnYWwgdmFsdWUgZm9yIGZhbiBkaXZpZGVyICglZClcbiIsIGRpdik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBNQVg2NjUwX1JFR19DT1VOVCwgZGF0YS0+Y291bnQpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfaW5wdXQsIFNfSVJVR08sIGdldF9mYW4sIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4yX2lucHV0LCBTX0lSVUdPLCBnZXRfZmFuLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgZ2V0X2ZhbiwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjRfaW5wdXQsIFNfSVJVR08sIGdldF9mYW4sIE5VTEwsIDMpOworc3RhdGljIERFVklDRV9BVFRSKGZhbjFfdGFyZ2V0LCBTX0lXVVNSIHwgU19JUlVHTywgZ2V0X3RhcmdldCwgc2V0X3RhcmdldCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZmFuMV9kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLCBnZXRfZGl2LCBzZXRfZGl2KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwd20xX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sIGdldF9lbmFibGUsIHNldF9lbmFibGUpOworc3RhdGljIERFVklDRV9BVFRSKHB3bTEsIFNfSVdVU1IgfCBTX0lSVUdPLCBnZXRfcHdtLCBzZXRfcHdtKTsKKworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWF4NjY1MF9hdHRyc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuNF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX3RhcmdldC5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX2Rpdi5hdHRyLAorCSZkZXZfYXR0cl9wd20xX2VuYWJsZS5hdHRyLAorCSZkZXZfYXR0cl9wd20xLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWF4NjY1MF9hdHRyX2dycCA9IHsKKwkuYXR0cnMgPSBtYXg2NjUwX2F0dHJzLAorfTsKKworLyoKKyAqIFJlYWwgY29kZQorICovCisKK3N0YXRpYyBpbnQgbWF4NjY1MF9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfSFdNT04pKSB7CisJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwKKwkJCSJGQVRBTDogbWF4NjY1MF9hdHRhY2hfYWRhcHRlciBjbGFzcyBIV01PTiBub3Qgc2V0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBtYXg2NjUwX2RldGVjdCk7Cit9CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGRvZXMgbW9yZSB0aGFuIGp1c3QgZGV0ZWN0aW9uLiBJZiBkZXRlY3Rpb24KKyAqIHN1Y2NlZWRzLCBpdCBhbHNvIHJlZ2lzdGVycyB0aGUgbmV3IGNoaXAuCisgKi8KKworc3RhdGljIGludCBtYXg2NjUwX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBtYXg2NjUwX2RhdGEgKmRhdGE7CisJaW50IGVyciA9IC1FTk9ERVY7CisKKwlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJtYXg2NjUwX2RldGVjdCBjYWxsZWQsIGtpbmQgPSAlZFxuIiwga2luZCk7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKKwkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAibWF4NjY1MDogSTJDIGJ1cyBkb2Vzbid0IHN1cHBvcnQgIgorCQkJCQkiYnl0ZSByZWFkIG1vZGUsIHNraXBwaW5nLlxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWF4NjY1MF9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIm1heDY2NTA6IG91dCBvZiBtZW1vcnkuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwljbGllbnQtPmFkZHIgPSBhZGRyZXNzOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5kcml2ZXIgPSAmbWF4NjY1MF9kcml2ZXI7CisKKwkvKgorCSAqIE5vdyB3ZSBkbyB0aGUgcmVtYWluaW5nIGRldGVjdGlvbi4gQSBuZWdhdGl2ZSBraW5kIG1lYW5zIHRoYXQKKwkgKiB0aGUgZHJpdmVyIHdhcyBsb2FkZWQgd2l0aCBubyBmb3JjZSBwYXJhbWV0ZXIgKGRlZmF1bHQpLCBzbyB3ZQorCSAqIG11c3QgYm90aCBkZXRlY3QgYW5kIGlkZW50aWZ5IHRoZSBjaGlwIChhY3R1YWxseSB0aGVyZSBpcyBvbmx5CisJICogb25lIHBvc3NpYmxlIGtpbmQgb2YgY2hpcCBmb3Igbm93LCBtYXg2NjUwKS4gQSB6ZXJvIGtpbmQgbWVhbnMgdGhhdAorCSAqIHRoZSBkcml2ZXIgd2FzIGxvYWRlZCB3aXRoIHRoZSBmb3JjZSBwYXJhbWV0ZXIsIHRoZSBkZXRlY3Rpb24KKwkgKiBzdGVwIHNoYWxsIGJlIHNraXBwZWQuIEEgcG9zaXRpdmUga2luZCBtZWFucyB0aGF0IHRoZSBkcml2ZXIKKwkgKiB3YXMgbG9hZGVkIHdpdGggdGhlIGZvcmNlIHBhcmFtZXRlciBhbmQgYSBnaXZlbiBraW5kIG9mIGNoaXAgaXMKKwkgKiByZXF1ZXN0ZWQsIHNvIGJvdGggdGhlIGRldGVjdGlvbiBhbmQgdGhlIGlkZW50aWZpY2F0aW9uIHN0ZXBzCisJICogYXJlIHNraXBwZWQuCisJICoKKwkgKiBDdXJyZW50bHkgSSBjYW4gZmluZCBubyB3YXkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIE1BWDY2NTAgYW5kCisJICogYSBNQVg2NjUxLiBUaGlzIGRyaXZlciBoYXMgb25seSBiZWVuIHRyaWVkIG9uIHRoZSBmb3JtZXIuCisJICovCisKKwlpZiAoKGtpbmQgPCAwKSAmJgorCSAgICggIChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVg2NjUwX1JFR19DT05GSUcpICYgMHhDMCkKKwkgICAgfHwoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUFYNjY1MF9SRUdfR1BJT19TVEFUKSAmIDB4RTApCisJICAgIHx8KGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NTBfUkVHX0FMQVJNX0VOKSAmIDB4RTApCisJICAgIHx8KGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NTBfUkVHX0FMQVJNKSAmIDB4RTApCisJICAgIHx8KGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NTBfUkVHX0NPVU5UKSAmIDB4RkMpKSkgeworCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsCisJCQkibWF4NjY1MDogZGV0ZWN0aW9uIGZhaWxlZCBhdCAweCUwMnguXG4iLCBhZGRyZXNzKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LCAibWF4NjY1MDogY2hpcCBmb3VuZCBhdCAweCUwMnguXG4iLCBhZGRyZXNzKTsKKworCXN0cmxjcHkoY2xpZW50LT5uYW1lLCAibWF4NjY1MCIsIEkyQ19OQU1FX1NJWkUpOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAibWF4NjY1MDogZmFpbGVkIHRvIGF0dGFjaCBjbGllbnQuXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIG1heDY2NTAgY2hpcAorCSAqLworCWlmIChtYXg2NjUwX2luaXRfY2xpZW50KGNsaWVudCkpCisJCWdvdG8gZXJyX2RldGFjaDsKKworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJm1heDY2NTBfYXR0cl9ncnApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2RldGFjaDsKKworCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOworCWlmICghSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpCisJCXJldHVybiAwOworCisJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOworCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZXJyb3IgcmVnaXN0ZXJpbmcgaHdtb24gZGV2aWNlLlxuIik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbWF4NjY1MF9hdHRyX2dycCk7CitlcnJfZGV0YWNoOgorCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CitlcnJfZnJlZToKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1heDY2NTBfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtYXg2NjUwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgZXJyOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbWF4NjY1MF9hdHRyX2dycCk7CisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKKwllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmICghZXJyKQorCQlrZnJlZShkYXRhKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1heDY2NTBfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbWF4NjY1MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGNvbmZpZzsKKwlpbnQgZXJyID0gLUVJTzsKKworCWNvbmZpZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NTBfUkVHX0NPTkZJRyk7CisKKwlpZiAoY29uZmlnIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkVycm9yIHJlYWRpbmcgY29uZmlnLCBhYm9ydGluZy5cbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXN3aXRjaCAoZmFuX3ZvbHRhZ2UpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWNvbmZpZyAmPSB+TUFYNjY1MF9DRkdfVjEyOworCQkJYnJlYWs7CisJCWNhc2UgMTI6CisJCQljb25maWcgfD0gTUFYNjY1MF9DRkdfVjEyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkiaWxsZWdhbCB2YWx1ZSBmb3IgZmFuX3ZvbHRhZ2UgKCVkKVxuIiwKKwkJCQlmYW5fdm9sdGFnZSk7CisJfQorCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiRmFuIHZvbHRhZ2UgaXMgc2V0IHRvICVkVi5cbiIsCisJCSAoY29uZmlnICYgTUFYNjY1MF9DRkdfVjEyKSA/IDEyIDogNSk7CisKKwlzd2l0Y2ggKHByZXNjYWxlcikgeworCQljYXNlIDA6CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJY29uZmlnICY9IH5NQVg2NjUwX0NGR19QUkVTQ0FMRVJfTUFTSzsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQljb25maWcgPSAoY29uZmlnICYgfk1BWDY2NTBfQ0ZHX1BSRVNDQUxFUl9NQVNLKQorCQkJCSB8IE1BWDY2NTBfQ0ZHX1BSRVNDQUxFUl8yOworCQkJYnJlYWs7CisJCWNhc2UgIDQ6CisJCQljb25maWcgPSAoY29uZmlnICYgfk1BWDY2NTBfQ0ZHX1BSRVNDQUxFUl9NQVNLKQorCQkJCSB8IE1BWDY2NTBfQ0ZHX1BSRVNDQUxFUl80OworCQkJYnJlYWs7CisJCWNhc2UgIDg6CisJCQljb25maWcgPSAoY29uZmlnICYgfk1BWDY2NTBfQ0ZHX1BSRVNDQUxFUl9NQVNLKQorCQkJCSB8IE1BWDY2NTBfQ0ZHX1BSRVNDQUxFUl84OworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQljb25maWcgPSAoY29uZmlnICYgfk1BWDY2NTBfQ0ZHX1BSRVNDQUxFUl9NQVNLKQorCQkJCSB8IE1BWDY2NTBfQ0ZHX1BSRVNDQUxFUl8xNjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkJImlsbGVnYWwgdmFsdWUgZm9yIHByZXNjYWxlciAoJWQpXG4iLAorCQkJCXByZXNjYWxlcik7CisJfQorCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiUHJlc2NhbGVyIGlzIHNldCB0byAlZC5cbiIsCisJCSAxIDw8IChjb25maWcgJiBNQVg2NjUwX0NGR19QUkVTQ0FMRVJfTUFTSykpOworCisJLyogSWYgbW9kZSBpcyBzZXQgdG8gImZ1bGwgb2ZmIiwgd2UgY2hhbmdlIGl0IHRvICJvcGVuIGxvb3AiIGFuZAorCSAqIHNldCBEQUMgdG8gMjU1LCB3aGljaCBoYXMgdGhlIHNhbWUgZWZmZWN0LiBXZSBkbyB0aGlzIGJlY2F1c2UKKwkgKiB0aGVyZSdzIG5vICJmdWxsIG9mZiIgbW9kZSBkZWZpbmVkIGluIGh3bW9uIHNwZWNpZmNhdGlvbnMuCisJICovCisKKwlpZiAoKGNvbmZpZyAmIE1BWDY2NTBfQ0ZHX01PREVfTUFTSykgPT0gTUFYNjY1MF9DRkdfTU9ERV9PRkYpIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJDaGFuZ2UgbW9kZSB0byBvcGVuIGxvb3AsIGZ1bGwgb2ZmLlxuIik7CisJCWNvbmZpZyA9IChjb25maWcgJiB+TUFYNjY1MF9DRkdfTU9ERV9NQVNLKQorCQkJIHwgTUFYNjY1MF9DRkdfTU9ERV9PUEVOX0xPT1A7CisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTUFYNjY1MF9SRUdfREFDLCAyNTUpKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkRBQyB3cml0ZSBlcnJvciwgYWJvcnRpbmcuXG4iKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NTBfUkVHX0NPTkZJRywgY29uZmlnKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNvbmZpZyB3cml0ZSBlcnJvciwgYWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlkYXRhLT5jb25maWcgPSBjb25maWc7CisJZGF0YS0+Y291bnQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVg2NjUwX1JFR19DT1VOVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHU4IHRhY2hfcmVnW10gPSB7CisJTUFYNjY1MF9SRUdfVEFDSDAsCisJTUFYNjY1MF9SRUdfVEFDSDEsCisJTUFYNjY1MF9SRUdfVEFDSDIsCisJTUFYNjY1MF9SRUdfVEFDSDMsCit9OworCitzdGF0aWMgc3RydWN0IG1heDY2NTBfZGF0YSAqbWF4NjY1MF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBtYXg2NjUwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaKSB8fCAhZGF0YS0+dmFsaWQpIHsKKwkJZGF0YS0+c3BlZWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJICAgICAgIE1BWDY2NTBfUkVHX1NQRUVEKTsKKwkJZGF0YS0+Y29uZmlnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCQlNQVg2NjUwX1JFR19DT05GSUcpOworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlkYXRhLT50YWNoW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCQkJIHRhY2hfcmVnW2ldKTsKKwkJfQorCQlkYXRhLT5jb3VudCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkJTUFYNjY1MF9SRUdfQ09VTlQpOworCQlkYXRhLT5kYWMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVg2NjUwX1JFR19EQUMpOworCisJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJCWRhdGEtPnZhbGlkID0gMTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzZW5zb3JzX21heDY2NTBfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmbWF4NjY1MF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2Vuc29yc19tYXg2NjUwX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmbWF4NjY1MF9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJIYW5zIEouIEtvY2giKTsKK01PRFVMRV9ERVNDUklQVElPTigiTUFYNjY1MCBzZW5zb3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHNlbnNvcnNfbWF4NjY1MF9pbml0KTsKK21vZHVsZV9leGl0KHNlbnNvcnNfbWF4NjY1MF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcGM4NzQyNy5jIGIvZHJpdmVycy9od21vbi9wYzg3NDI3LmMKaW5kZXggYWZmYTIxYS4uMjkzNTRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9wYzg3NDI3LmMKKysrIGIvZHJpdmVycy9od21vbi9wYzg3NDI3LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwpAQCAtNDI5LDYgKzQzMCwxMiBAQAogCS8qIFRoaXMgd2lsbCBuZWVkIHRvIGJlIHJldmlzaXRlZCB3aGVuIHdlIGFkZCBzdXBwb3J0IGZvcgogCSAgIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlIG1vbml0b3JpbmcuICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgRFJWTkFNRSkpIHsKKwkJZXJyID0gLUVCVVNZOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCByZWdpb24gMHglbHgtMHglbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZylyZXMtPnN0YXJ0LCAodW5zaWduZWQgbG9uZylyZXMtPmVuZCk7CisJCWdvdG8gZXhpdF9rZnJlZTsKKwl9CiAJZGF0YS0+YWRkcmVzc1swXSA9IHJlcy0+c3RhcnQ7CiAKIAltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKQEAgLTQzOCw3ICs0NDUsNyBAQAogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KIAlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSkpKQotCQlnb3RvIGV4aXRfa2ZyZWU7CisJCWdvdG8gZXhpdF9yZWxlYXNlX3JlZ2lvbjsKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmICghKGRhdGEtPmZhbl9lbmFibGVkICYgKDEgPDwgaSkpKQogCQkJY29udGludWU7CkBAIC00NjIsNiArNDY5LDggQEAKIAkJCWNvbnRpbnVlOwogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmcGM4NzQyN19ncm91cF9mYW5baV0pOwogCX0KK2V4aXRfcmVsZWFzZV9yZWdpb246CisJcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiBleGl0X2tmcmVlOgogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGRhdGEpOwpAQCAtNDcyLDYgKzQ4MSw3IEBACiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBwYzg3NDI3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBwYzg3NDI3X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgaTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpAQCAtNDg0LDYgKzQ5NCw5IEBACiAJfQogCWtmcmVlKGRhdGEpOwogCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc21zYzQ3YjM5Ny5jIGIvZHJpdmVycy9od21vbi9zbXNjNDdiMzk3LmMKaW5kZXggNzJiMGUyZC4uOTQzYWJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zbXNjNDdiMzk3LmMKKysrIGIvZHJpdmVycy9od21vbi9zbXNjNDdiMzk3LmMKQEAgLTMwLDE2ICszMCwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWlzYS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotLyogQWRkcmVzcyBpcyBhdXRvZGV0ZWN0ZWQsIHRoZXJlIGlzIG5vIGRlZmF1bHQgdmFsdWUgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBhZGRyZXNzOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKyNkZWZpbmUgRFJWTkFNRSAic21zYzQ3YjM5NyIKIAogLyogU3VwZXItSS8wIHJlZ2lzdGVycyBhbmQgY29tbWFuZHMgKi8KIApAQCAtOTEsNyArOTIsOCBAQAogI2RlZmluZSBTTVNDNDdCMzk3X1JFR19GQU5fTVNCKG5yKSAoMHgyOSArIDIgKiAobnIpKQogCiBzdHJ1Y3Qgc21zYzQ3YjM5N19kYXRhIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CisJdW5zaWduZWQgc2hvcnQgYWRkcjsKKwljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIApAQCAtMTA0LDQ1ICsxMDYsNDMgQEAKIAl1OCB0ZW1wWzRdOwogfTsKIAotc3RhdGljIGludCBzbXNjNDdiMzk3X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIGludCBzbXNjNDdiMzk3X3JlYWRfdmFsdWUoc3RydWN0IHNtc2M0N2IzOTdfZGF0YSogZGF0YSwgdTggcmVnKQogewotCXN0cnVjdCBzbXNjNDdiMzk3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgcmVzOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0Jb3V0YihyZWcsIGNsaWVudC0+YWRkcik7Ci0JcmVzID0gaW5iX3AoY2xpZW50LT5hZGRyICsgMSk7CisJb3V0YihyZWcsIGRhdGEtPmFkZHIpOworCXJlcyA9IGluYl9wKGRhdGEtPmFkZHIgKyAxKTsKIAltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc21zYzQ3YjM5N19kYXRhICpzbXNjNDdiMzk3X3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBzbXNjNDdiMzk3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc21zYzQ3YjM5N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWikgfHwgIWRhdGEtPnZhbGlkKSB7Ci0JCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAic3RhcnRpbmcgZGV2aWNlIHVwZGF0ZS4uLlxuIik7CisJCWRldl9kYmcoZGV2LCAic3RhcnRpbmcgZGV2aWNlIHVwZGF0ZS4uLlxuIik7CiAKIAkJLyogNCB0ZW1wZXJhdHVyZSBpbnB1dHMsIDQgZmFuIGlucHV0cyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQlkYXRhLT50ZW1wW2ldID0gc21zYzQ3YjM5N19yZWFkX3ZhbHVlKGNsaWVudCwKKwkJCWRhdGEtPnRlbXBbaV0gPSBzbXNjNDdiMzk3X3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJU01TQzQ3QjM5N19SRUdfVEVNUChpKSk7CiAKIAkJCS8qIG11c3QgcmVhZCBMU0IgZmlyc3QgKi8KLQkJCWRhdGEtPmZhbltpXSAgPSBzbXNjNDdiMzk3X3JlYWRfdmFsdWUoY2xpZW50LAorCQkJZGF0YS0+ZmFuW2ldICA9IHNtc2M0N2IzOTdfcmVhZF92YWx1ZShkYXRhLAogCQkJCQlTTVNDNDdCMzk3X1JFR19GQU5fTFNCKGkpKTsKLQkJCWRhdGEtPmZhbltpXSB8PSBzbXNjNDdiMzk3X3JlYWRfdmFsdWUoY2xpZW50LAorCQkJZGF0YS0+ZmFuW2ldIHw9IHNtc2M0N2IzOTdfcmVhZF92YWx1ZShkYXRhLAogCQkJCQlTTVNDNDdCMzk3X1JFR19GQU5fTVNCKGkpKSA8PCA4OwogCQl9CiAKIAkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKIAkJZGF0YS0+dmFsaWQgPSAxOwogCi0JCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiLi4uIGRldmljZSB1cGRhdGUgY29tcGxldGVcbiIpOworCQlkZXZfZGJnKGRldiwgIi4uLiBkZXZpY2UgdXBkYXRlIGNvbXBsZXRlXG4iKTsKIAl9CiAKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTE1NywyNCArMTU3LDE4IEBACiAJcmV0dXJuIChzOClyZWcgKiAxMDAwOwogfQogCi0vKiAwIDw9IG5yIDw9IDMgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQorc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAqZGV2YXR0ciwgY2hhciAqYnVmKQogeworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3Qgc21zYzQ3YjM5N19kYXRhICpkYXRhID0gc21zYzQ3YjM5N191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXBfZnJvbV9yZWcoZGF0YS0+dGVtcFtucl0pKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcF9mcm9tX3JlZyhkYXRhLT50ZW1wW2F0dHItPmluZGV4XSkpOwogfQogCi0jZGVmaW5lIHN5c2ZzX3RlbXAobnVtKSBcCi1zdGF0aWMgc3NpemVfdCBzaG93X3RlbXAjI251bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X3RlbXAoZGV2LCBidWYsIG51bS0xKTsgXAotfSBcCi1zdGF0aWMgREVWSUNFX0FUVFIodGVtcCMjbnVtIyNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCMjbnVtLCBOVUxMKQotCi1zeXNmc190ZW1wKDEpOwotc3lzZnNfdGVtcCgyKTsKLXN5c2ZzX3RlbXAoMyk7Ci1zeXNmc190ZW1wKDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNF9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAzKTsKIAogLyogRkFOOiAxIFJQTS9iaXQKICAgIFJFRzogY291bnQgb2YgOTBrSHogcHVsc2VzIC8gcmV2b2x1dGlvbiAqLwpAQCAtMTgzLDM1ICsxNzcsMzcgQEAKIAlyZXR1cm4gOTAwMDAgKiA2MCAvIHJlZzsKIH0KIAotLyogMCA8PSBuciA8PSAzICovCi1zdGF0aWMgc3NpemVfdCBzaG93X2ZhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQorc3RhdGljIHNzaXplX3Qgc2hvd19mYW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKLSAgICAgICAgc3RydWN0IHNtc2M0N2IzOTdfZGF0YSAqZGF0YSA9IHNtc2M0N2IzOTdfdXBkYXRlX2RldmljZShkZXYpOwotICAgICAgICByZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZmFuX2Zyb21fcmVnKGRhdGEtPmZhbltucl0pKTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IHNtc2M0N2IzOTdfZGF0YSAqZGF0YSA9IHNtc2M0N2IzOTdfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBmYW5fZnJvbV9yZWcoZGF0YS0+ZmFuW2F0dHItPmluZGV4XSkpOwogfQorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW40X2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMyk7CiAKLSNkZWZpbmUgc3lzZnNfZmFuKG51bSkgXAotc3RhdGljIHNzaXplX3Qgc2hvd19mYW4jI251bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X2ZhbihkZXYsIGJ1ZiwgbnVtLTEpOyBcCi19IFwKLXN0YXRpYyBERVZJQ0VfQVRUUihmYW4jI251bSMjX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiMjbnVtLCBOVUxMKQotCi1zeXNmc19mYW4oMSk7Ci1zeXNmc19mYW4oMik7Ci1zeXNmc19mYW4oMyk7Ci1zeXNmc19mYW4oNCk7CitzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNtc2M0N2IzOTdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5uYW1lKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc21zYzQ3YjM5N19hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAyX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAzX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX3RlbXA0X2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX2ZhbjFfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfZmFuMl9pbnB1dC5hdHRyLAotCSZkZXZfYXR0cl9mYW4zX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX2ZhbjRfaW5wdXQuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW40X2lucHV0LmRldl9hdHRyLmF0dHIsCiAKKwkmZGV2X2F0dHJfbmFtZS5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTIxOSw0NCArMjE1LDQ0IEBACiAJLmF0dHJzID0gc21zYzQ3YjM5N19hdHRyaWJ1dGVzLAogfTsKIAotc3RhdGljIGludCBzbXNjNDdiMzk3X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNtc2M0N2IzOTdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNtc2M0N2IzOTdfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7CisJc3RydWN0IHNtc2M0N2IzOTdfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZzbXNjNDdiMzk3X2dyb3VwKTsKLQotCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCi0JCXJldHVybiBlcnI7Ci0KLQlyZWxlYXNlX3JlZ2lvbihjbGllbnQtPmFkZHIsIFNNU0NfRVhURU5UKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmc21zYzQ3YjM5N19ncm91cCk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIFNNU0NfRVhURU5UKTsKIAlrZnJlZShkYXRhKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtc2M0N2IzOTdfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNtc2M0N2IzOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzbXNjNDdiMzk3X2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNtc2M0N2IzOTdfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubmFtZQk9ICJzbXNjNDdiMzk3IiwKKwkJLm5hbWUJPSBEUlZOQU1FLAogCX0sCi0JLmF0dGFjaF9hZGFwdGVyCT0gc21zYzQ3YjM5N19kZXRlY3QsCi0JLmRldGFjaF9jbGllbnQJPSBzbXNjNDdiMzk3X2RldGFjaF9jbGllbnQsCisJLnByb2JlCQk9IHNtc2M0N2IzOTdfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbXNjNDdiMzk3X3JlbW92ZSksCiB9OwogCi1zdGF0aWMgaW50IHNtc2M0N2IzOTdfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNtc2M0N2IzOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBzbXNjNDdiMzk3X2RhdGEgKmRhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MsIFNNU0NfRVhURU5ULAorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQsIFNNU0NfRVhURU5ULAogCQkJICAgIHNtc2M0N2IzOTdfZHJpdmVyLmRyaXZlci5uYW1lKSkgewotCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJSZWdpb24gMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsCi0JCQlhZGRyZXNzKTsKKwkJZGV2X2VycihkZXYsICJSZWdpb24gMHglbHgtMHglbHggYWxyZWFkeSBpbiB1c2UhXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpcmVzLT5zdGFydCwKKwkJCSh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQgKyBTTVNDX0VYVEVOVCAtIDEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMjY1LDI1ICsyNjEsMTYgQEAKIAkJZ290byBlcnJvcl9yZWxlYXNlOwogCX0KIAotCW5ld19jbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKLQluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwlkYXRhLT5hZGRyID0gcmVzLT5zdGFydDsKKwlkYXRhLT5uYW1lID0gInNtc2M0N2IzOTciOwogCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwotCW5ld19jbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCW5ld19jbGllbnQtPmRyaXZlciA9ICZzbXNjNDdiMzk3X2RyaXZlcjsKLQluZXdfY2xpZW50LT5mbGFncyA9IDA7Ci0KLQlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsICJzbXNjNDdiMzk3IiwgSTJDX05BTUVfU0laRSk7Ci0KIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CiAKLQlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmc21zYzQ3YjM5N19ncm91cCkpKQogCQlnb3RvIGVycm9yX2ZyZWU7CiAKLQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZzbXNjNDdiMzk3X2dyb3VwKSkpCi0JCWdvdG8gZXJyb3JfZGV0YWNoOwotCi0JZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOworCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihkZXYpOwogCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7CiAJCWdvdG8gZXJyb3JfcmVtb3ZlOwpAQCAtMjkyLDEzICsyNzksNTAgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3JfcmVtb3ZlOgotCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZzbXNjNDdiMzk3X2dyb3VwKTsKLWVycm9yX2RldGFjaDoKLQlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnNtc2M0N2IzOTdfZ3JvdXApOwogZXJyb3JfZnJlZToKIAlrZnJlZShkYXRhKTsKIGVycm9yX3JlbGVhc2U6Ci0JcmVsZWFzZV9yZWdpb24oYWRkcmVzcywgU01TQ19FWFRFTlQpOworCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIFNNU0NfRVhURU5UKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzbXNjNDdiMzk3X2RldmljZV9hZGQodW5zaWduZWQgc2hvcnQgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzID0geworCQkuc3RhcnQJPSBhZGRyZXNzLAorCQkuZW5kCT0gYWRkcmVzcyArIFNNU0NfRVhURU5UIC0gMSwKKwkJLm5hbWUJPSBEUlZOQU1FLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX07CisJaW50IGVycjsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoRFJWTkFNRSwgYWRkcmVzcyk7CisJaWYgKCFwZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmcmVzLCAxKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSByZXNvdXJjZSBhZGRpdGlvbiBmYWlsZWQgIgorCQkgICAgICAgIiglZClcbiIsIGVycik7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsCisJCSAgICAgICBlcnIpOworCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9kZXZpY2VfcHV0OgorCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMyMCw3ICszNDQsNyBAQAogCSphZGRyID0gKHN1cGVyaW9faW5iKFNVUEVSSU9fUkVHX0JBU0VfTVNCKSA8PCA4KQogCQkgfCAgc3VwZXJpb19pbmIoU1VQRVJJT19SRUdfQkFTRV9MU0IpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAic21zYzQ3YjM5NzogZm91bmQgU01TQyAlcyAiCisJcHJpbnRrKEtFUk5fSU5GTyBEUlZOQU1FICI6IGZvdW5kIFNNU0MgJXMgIgogCQkiKGJhc2UgYWRkcmVzcyAweCUwNHgsIHJldmlzaW9uICV1KVxuIiwKIAkJaWQgPT0gMHg4MSA/ICJTQ0g1MzA3LU5TIiA6ICJMUEM0N0IzOTctTkMiLCAqYWRkciwgcmV2KTsKIApAQCAtMzMwLDE3ICszNTQsMzMgQEAKIAogc3RhdGljIGludCBfX2luaXQgc21zYzQ3YjM5N19pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgc2hvcnQgYWRkcmVzczsKIAlpbnQgcmV0OwogCiAJaWYgKChyZXQgPSBzbXNjNDdiMzk3X2ZpbmQoJmFkZHJlc3MpKSkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiBpMmNfaXNhX2FkZF9kcml2ZXIoJnNtc2M0N2IzOTdfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNtc2M0N2IzOTdfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGV4aXQ7CisKKwkvKiBTZXRzIGdsb2JhbCBwZGV2IGFzIGEgc2lkZSBlZmZlY3QgKi8KKwlyZXQgPSBzbXNjNDdiMzk3X2RldmljZV9hZGQoYWRkcmVzcyk7CisJaWYgKHJldCkKKwkJZ290byBleGl0X2RyaXZlcjsKKworCXJldHVybiAwOworCitleGl0X2RyaXZlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21zYzQ3YjM5N19kcml2ZXIpOworZXhpdDoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc21zYzQ3YjM5N19leGl0KHZvaWQpCiB7Ci0JaTJjX2lzYV9kZWxfZHJpdmVyKCZzbXNjNDdiMzk3X2RyaXZlcik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNtc2M0N2IzOTdfZHJpdmVyKTsKIH0KIAogTU9EVUxFX0FVVEhPUigiTWFyayBNLiBIb2ZmbWFuIDxtaG9mZm1hbkBsaWdodGxpbmsuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9zbXNjNDdtMS5jIGIvZHJpdmVycy9od21vbi9zbXNjNDdtMS5jCmluZGV4IGJlYjg4MWMuLjFlMjFjOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vc21zYzQ3bTEuYworKysgYi9kcml2ZXJzL2h3bW9uL3Ntc2M0N20xLmMKQEAgLTMsMTAgKzMsMTEgQEAKICAgICAgICAgICAgICAgICAgZm9yIGhhcmR3YXJlIG1vbml0b3JpbmcKIAogICAgIFN1cHBvcnRzIHRoZSBTTVNDIExQQzQ3QjI3eCwgTFBDNDdNMTB4LCBMUEM0N00xMTIsIExQQzQ3TTEzeCwKLSAgICBMUEM0N00xNHgsIExQQzQ3TTE1eCwgTFBDNDdNMTkyIGFuZCBMUEM0N005OTcgU3VwZXItSS9PIGNoaXBzLgorICAgIExQQzQ3TTE0eCwgTFBDNDdNMTV4LCBMUEM0N00xOTIsIExQQzQ3TTI5MiBhbmQgTFBDNDdNOTk3CisgICAgU3VwZXItSS9PIGNoaXBzLgogCiAgICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgICAgUG9ydGVkIHRvIExpbnV4IDIuNiBieSBHYWJyaWVsZSBHb3JsYSA8Z29ybGlrQHlhaG9vLmNvbT4KICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBKZWFuIERlbHZhcmUKIApAQCAtMjksMTcgKzMwLDE5IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtaXNhLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLS8qIEFkZHJlc3MgaXMgYXV0b2RldGVjdGVkLCB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgYWRkcmVzczsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisjZGVmaW5lIERSVk5BTUUgInNtc2M0N20xIgorZW51bSBjaGlwcyB7IHNtc2M0N20xLCBzbXNjNDdtMiB9OwogCiAvKiBTdXBlci1JLzAgcmVnaXN0ZXJzIGFuZCBjb21tYW5kcyAqLwogCkBAIC04NywxMCArOTAsMTggQEAKICNkZWZpbmUgU01TQzQ3TTFfUkVHX0FMQVJNCQkweDA0CiAjZGVmaW5lIFNNU0M0N00xX1JFR19UUElOKG5yKQkJKDB4MzQgLSAobnIpKQogI2RlZmluZSBTTVNDNDdNMV9SRUdfUFBJTihucikJCSgweDM2IC0gKG5yKSkKLSNkZWZpbmUgU01TQzQ3TTFfUkVHX1BXTShucikJCSgweDU2ICsgKG5yKSkKICNkZWZpbmUgU01TQzQ3TTFfUkVHX0ZBTkRJVgkJMHg1OAotI2RlZmluZSBTTVNDNDdNMV9SRUdfRkFOKG5yKQkJKDB4NTkgKyAobnIpKQotI2RlZmluZSBTTVNDNDdNMV9SRUdfRkFOX1BSRUxPQUQobnIpCSgweDVCICsgKG5yKSkKKworc3RhdGljIGNvbnN0IHU4IFNNU0M0N00xX1JFR19GQU5bM10JCT0geyAweDU5LCAweDVhLCAweDZiIH07CitzdGF0aWMgY29uc3QgdTggU01TQzQ3TTFfUkVHX0ZBTl9QUkVMT0FEWzNdCT0geyAweDViLCAweDVjLCAweDZjIH07CitzdGF0aWMgY29uc3QgdTggU01TQzQ3TTFfUkVHX1BXTVszXQkJPSB7IDB4NTYsIDB4NTcsIDB4NjkgfTsKKworI2RlZmluZSBTTVNDNDdNMl9SRUdfQUxBUk02CQkweDA5CisjZGVmaW5lIFNNU0M0N00yX1JFR19UUElOMQkJMHgzOAorI2RlZmluZSBTTVNDNDdNMl9SRUdfVFBJTjIJCTB4MzcKKyNkZWZpbmUgU01TQzQ3TTJfUkVHX1RQSU4zCQkweDJkCisjZGVmaW5lIFNNU0M0N00yX1JFR19QUElOMwkJMHgyYworI2RlZmluZSBTTVNDNDdNMl9SRUdfRkFORElWMwkJMHg2YQogCiAjZGVmaW5lIE1JTl9GUk9NX1JFRyhyZWcsZGl2KQkJKChyZWcpPj0xOTIgPyAwIDogXAogCQkJCQkgOTgzMDQwLygoMTkyLShyZWcpKSooZGl2KSkpCkBAIC0xMDIsNDUgKzExMyw1NyBAQAogI2RlZmluZSBQV01fVE9fUkVHKHJlZykJCQkoKChyZWcpID4+IDEpICYgMHg3RSkKIAogc3RydWN0IHNtc2M0N20xX2RhdGEgewotCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKKwl1bnNpZ25lZCBzaG9ydCBhZGRyOworCWNvbnN0IGNoYXIgKm5hbWU7CisJZW51bSBjaGlwcyB0eXBlOwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsKIAogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwogCi0JdTggZmFuWzJdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KLQl1OCBmYW5fcHJlbG9hZFsyXTsJLyogUmVnaXN0ZXIgdmFsdWUgKi8KLQl1OCBmYW5fZGl2WzJdOwkJLyogUmVnaXN0ZXIgZW5jb2RpbmcsIHNoaWZ0ZWQgcmlnaHQgKi8KKwl1OCBmYW5bM107CQkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXU4IGZhbl9wcmVsb2FkWzNdOwkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXU4IGZhbl9kaXZbM107CQkvKiBSZWdpc3RlciBlbmNvZGluZywgc2hpZnRlZCByaWdodCAqLwogCXU4IGFsYXJtczsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nICovCi0JdTggcHdtWzJdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKGJpdCA3IGlzIGVuYWJsZSkgKi8KKwl1OCBwd21bM107CQkvKiBSZWdpc3RlciB2YWx1ZSAoYml0IDAgaXMgZGlzYWJsZSkgKi8KK307CisKK3N0cnVjdCBzbXNjNDdtMV9zaW9fZGF0YSB7CisJZW51bSBjaGlwcyB0eXBlOwogfTsKIAogCi1zdGF0aWMgaW50IHNtc2M0N20xX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBzbXNjNDdtMV9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotCi1zdGF0aWMgaW50IHNtc2M0N20xX3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKTsKLXN0YXRpYyB2b2lkIHNtc2M0N20xX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpOwotCitzdGF0aWMgaW50IHNtc2M0N20xX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIGludCBzbXNjNDdtMV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiBzdGF0aWMgc3RydWN0IHNtc2M0N20xX2RhdGEgKnNtc2M0N20xX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAogCQlpbnQgaW5pdCk7CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNtc2M0N20xX3JlYWRfdmFsdWUoc3RydWN0IHNtc2M0N20xX2RhdGEgKmRhdGEsIHU4IHJlZykKK3sKKwlyZXR1cm4gaW5iX3AoZGF0YS0+YWRkciArIHJlZyk7Cit9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzbXNjNDdtMV9kcml2ZXIgPSB7CitzdGF0aWMgaW5saW5lIHZvaWQgc21zYzQ3bTFfd3JpdGVfdmFsdWUoc3RydWN0IHNtc2M0N20xX2RhdGEgKmRhdGEsIHU4IHJlZywKKwkJdTggdmFsdWUpCit7CisJb3V0Yl9wKHZhbHVlLCBkYXRhLT5hZGRyICsgcmVnKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc21zYzQ3bTFfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubmFtZQk9ICJzbXNjNDdtMSIsCisJCS5uYW1lCT0gRFJWTkFNRSwKIAl9LAotCS5hdHRhY2hfYWRhcHRlcgk9IHNtc2M0N20xX2RldGVjdCwKLQkuZGV0YWNoX2NsaWVudAk9IHNtc2M0N20xX2RldGFjaF9jbGllbnQsCisJLnByb2JlCQk9IHNtc2M0N20xX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc21zYzQ3bTFfcmVtb3ZlKSwKIH07CiAKLS8qIG5yIGlzIDAgb3IgMSBpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGJlbG93ICovCi0KLXN0YXRpYyBzc2l6ZV90IGdldF9mYW4oc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBucikKK3N0YXRpYyBzc2l6ZV90IGdldF9mYW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkgICAgICAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IHNtc2M0N20xX2RhdGEgKmRhdGEgPSBzbXNjNDdtMV91cGRhdGVfZGV2aWNlKGRldiwgMCk7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAJLyogVGhpcyBjaGlwIChzdHVwaWRseSkgc3RvcHMgbW9uaXRvcmluZyBmYW4gc3BlZWQgaWYgUFdNIGlzCiAJICAgZW5hYmxlZCBhbmQgZHV0eSBjeWNsZSBpcyAwJS4gVGhpcyBpcyBmaW5lIGlmIHRoZSBtb25pdG9yaW5nCiAJICAgYW5kIGNvbnRyb2wgY29uY2VybiB0aGUgc2FtZSBmYW4sIGJ1dCB0cm91Ymxlc29tZSBpZiB0aGV5IGFyZQpAQCAtMTUyLDQzICsxNzUsNTQgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcnBtKTsKIH0KIAotc3RhdGljIHNzaXplX3QgZ2V0X2Zhbl9taW4oc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBucikKK3N0YXRpYyBzc2l6ZV90IGdldF9mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAgICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBzbXNjNDdtMV9kYXRhICpkYXRhID0gc21zYzQ3bTFfdXBkYXRlX2RldmljZShkZXYsIDApOworCWludCBuciA9IGF0dHItPmluZGV4OwogCWludCBycG0gPSBNSU5fRlJPTV9SRUcoZGF0YS0+ZmFuX3ByZWxvYWRbbnJdLAogCQkJICAgICAgIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBycG0pOwogfQogCi1zdGF0aWMgc3NpemVfdCBnZXRfZmFuX2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQorc3RhdGljIHNzaXplX3QgZ2V0X2Zhbl9kaXYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJICAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IHNtc2M0N20xX2RhdGEgKmRhdGEgPSBzbXNjNDdtMV91cGRhdGVfZGV2aWNlKGRldiwgMCk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0pKTsKIH0KIAotc3RhdGljIHNzaXplX3QgZ2V0X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQorc3RhdGljIHNzaXplX3QgZ2V0X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCSAgICAgICAqZGV2YXR0ciwgY2hhciAqYnVmKQogeworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqZGF0YSA9IHNtc2M0N20xX3VwZGF0ZV9kZXZpY2UoZGV2LCAwKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgUFdNX0ZST01fUkVHKGRhdGEtPnB3bVtucl0pKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgUFdNX0ZST01fUkVHKGRhdGEtPnB3bVthdHRyLT5pbmRleF0pKTsKIH0KIAotc3RhdGljIHNzaXplX3QgZ2V0X3B3bV9lbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQorc3RhdGljIHNzaXplX3QgZ2V0X3B3bV9lbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBzbXNjNDdtMV9kYXRhICpkYXRhID0gc21zYzQ3bTFfdXBkYXRlX2RldmljZShkZXYsIDApOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBQV01fRU5fRlJPTV9SRUcoZGF0YS0+cHdtW25yXSkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBQV01fRU5fRlJPTV9SRUcoZGF0YS0+cHdtW2F0dHItPmluZGV4XSkpOwogfQogCi1zdGF0aWMgc3NpemVfdCBnZXRfYWxhcm1zKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGdldF9hbGFybXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJICAqZGV2YXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzbXNjNDdtMV9kYXRhICpkYXRhID0gc21zYzQ3bTFfdXBkYXRlX2RldmljZShkZXYsIDApOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5hbGFybXMpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZXRfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGNvdW50LCBpbnQgbnIpCitzdGF0aWMgc3NpemVfdCBzZXRfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICAqZGV2YXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBuciA9IGF0dHItPmluZGV4OwogCWxvbmcgcnBtZGl2LCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwpAQCAtMjAwLDcgKzIzNCw3IEBACiAJfQogCiAJZGF0YS0+ZmFuX3ByZWxvYWRbbnJdID0gMTkyIC0gKCg5ODMwNDAgKyBycG1kaXYgLyAyKSAvIHJwbWRpdik7Ci0Jc21zYzQ3bTFfd3JpdGVfdmFsdWUoY2xpZW50LCBTTVNDNDdNMV9SRUdfRkFOX1BSRUxPQUQobnIpLAorCXNtc2M0N20xX3dyaXRlX3ZhbHVlKGRhdGEsIFNNU0M0N00xX1JFR19GQU5fUFJFTE9BRFtucl0sCiAJCQkgICAgIGRhdGEtPmZhbl9wcmVsb2FkW25yXSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKQEAgLTIxMSwxMiArMjQ1LDEyIEBACiAgICBkZXRlcm1pbmVkIGluIHBhcnQgYnkgdGhlIGZhbiBjbG9jayBkaXZpZGVyLiAgVGhpcyBmb2xsb3dzIHRoZSBwcmluY2lwbGUKICAgIG9mIGxlYXN0IHN1cnByaXNlOyB0aGUgdXNlciBkb2Vzbid0IGV4cGVjdCB0aGUgZmFuIG1pbmltdW0gdG8gY2hhbmdlIGp1c3QKICAgIGJlY2F1c2UgdGhlIGRpdmlkZXIgY2hhbmdlZC4gKi8KLXN0YXRpYyBzc2l6ZV90IHNldF9mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgY291bnQsIGludCBucikKK3N0YXRpYyBzc2l6ZV90IHNldF9mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAgICpkZXZhdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBzbXNjNDdtMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IHNtc2M0N20xX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAlsb25nIG5ld19kaXYgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApLCB0bXA7CiAJdTggb2xkX2RpdiA9IERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSk7CiAKQEAgLTIzNCwyNyArMjY4LDM4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXRtcCA9IHNtc2M0N20xX3JlYWRfdmFsdWUoY2xpZW50LCBTTVNDNDdNMV9SRUdfRkFORElWKSAmIDB4MEY7Ci0JdG1wIHw9IChkYXRhLT5mYW5fZGl2WzBdIDw8IDQpIHwgKGRhdGEtPmZhbl9kaXZbMV0gPDwgNik7Ci0Jc21zYzQ3bTFfd3JpdGVfdmFsdWUoY2xpZW50LCBTTVNDNDdNMV9SRUdfRkFORElWLCB0bXApOworCXN3aXRjaCAobnIpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQl0bXAgPSBzbXNjNDdtMV9yZWFkX3ZhbHVlKGRhdGEsIFNNU0M0N00xX1JFR19GQU5ESVYpCisJCSAgICAgICYgfigweDAzIDw8ICg0ICsgMiAqIG5yKSk7CisJCXRtcCB8PSBkYXRhLT5mYW5fZGl2W25yXSA8PCAoNCArIDIgKiBucik7CisJCXNtc2M0N20xX3dyaXRlX3ZhbHVlKGRhdGEsIFNNU0M0N00xX1JFR19GQU5ESVYsIHRtcCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdG1wID0gc21zYzQ3bTFfcmVhZF92YWx1ZShkYXRhLCBTTVNDNDdNMl9SRUdfRkFORElWMykgJiAweENGOworCQl0bXAgfD0gZGF0YS0+ZmFuX2RpdlsyXSA8PCA0OworCQlzbXNjNDdtMV93cml0ZV92YWx1ZShkYXRhLCBTTVNDNDdNMl9SRUdfRkFORElWMywgdG1wKTsKKwkJYnJlYWs7CisJfQogCiAJLyogUHJlc2VydmUgZmFuIG1pbiAqLwogCXRtcCA9IDE5MiAtIChvbGRfZGl2ICogKDE5MiAtIGRhdGEtPmZhbl9wcmVsb2FkW25yXSkKIAkJICAgICArIG5ld19kaXYgLyAyKSAvIG5ld19kaXY7CiAJZGF0YS0+ZmFuX3ByZWxvYWRbbnJdID0gU0VOU09SU19MSU1JVCh0bXAsIDAsIDE5MSk7Ci0Jc21zYzQ3bTFfd3JpdGVfdmFsdWUoY2xpZW50LCBTTVNDNDdNMV9SRUdfRkFOX1BSRUxPQUQobnIpLAorCXNtc2M0N20xX3dyaXRlX3ZhbHVlKGRhdGEsIFNNU0M0N00xX1JFR19GQU5fUFJFTE9BRFtucl0sCiAJCQkgICAgIGRhdGEtPmZhbl9wcmVsb2FkW25yXSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNldF9wd20oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBjb3VudCwgaW50IG5yKQorc3RhdGljIHNzaXplX3Qgc2V0X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCSAgICAgICAqZGV2YXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBzbXNjNDdtMV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCiAJaWYgKHZhbCA8IDAgfHwgdmFsID4gMjU1KQpAQCAtMjYzLDE5ICszMDgsMTkgQEAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+cHdtW25yXSAmPSAweDgxOyAvKiBQcmVzZXJ2ZSBhZGRpdGlvbmFsIGJpdHMgKi8KIAlkYXRhLT5wd21bbnJdIHw9IFBXTV9UT19SRUcodmFsKTsKLQlzbXNjNDdtMV93cml0ZV92YWx1ZShjbGllbnQsIFNNU0M0N00xX1JFR19QV00obnIpLAorCXNtc2M0N20xX3dyaXRlX3ZhbHVlKGRhdGEsIFNNU0M0N00xX1JFR19QV01bbnJdLAogCQkJICAgICBkYXRhLT5wd21bbnJdKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9lbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGNvdW50LCBpbnQgbnIpCitzdGF0aWMgc3NpemVfdCBzZXRfcHdtX2VuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAgKmRldmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IHNtc2M0N20xX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQorCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBuciA9IGF0dHItPmluZGV4OwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAkKIAlpZiAodmFsICE9IDAgJiYgdmFsICE9IDEpCkBAIC0yODQsNyArMzI5LDcgQEAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+cHdtW25yXSAmPSAweEZFOyAvKiBwcmVzZXJ2ZSB0aGUgb3RoZXIgYml0cyAqLwogCWRhdGEtPnB3bVtucl0gfD0gIXZhbDsKLQlzbXNjNDdtMV93cml0ZV92YWx1ZShjbGllbnQsIFNNU0M0N00xX1JFR19QV00obnIpLAorCXNtc2M0N20xX3dyaXRlX3ZhbHVlKGRhdGEsIFNNU0M0N00xX1JFR19QV01bbnJdLAogCQkJICAgICBkYXRhLT5wd21bbnJdKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIApAQCAtMjkyLDc5ICszMzcsNTUgQEAKIH0KIAogI2RlZmluZSBmYW5fcHJlc2VudChvZmZzZXQpCQkJCQkJXAotc3RhdGljIHNzaXplX3QgZ2V0X2ZhbiMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXJldHVybiBnZXRfZmFuKGRldiwgYnVmLCBvZmZzZXQgLSAxKTsJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IGdldF9mYW4jI29mZnNldCMjX21pbiAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCi17CQkJCQkJCQkJXAotCXJldHVybiBnZXRfZmFuX21pbihkZXYsIGJ1Ziwgb2Zmc2V0IC0gMSk7CQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF9mYW4jI29mZnNldCMjX21pbiAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCVwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQkJCVwKLXsJCQkJCQkJCQlcCi0JcmV0dXJuIHNldF9mYW5fbWluKGRldiwgYnVmLCBjb3VudCwgb2Zmc2V0IC0gMSk7CQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3QgZ2V0X2ZhbiMjb2Zmc2V0IyNfZGl2IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKLXsJCQkJCQkJCQlcCi0JcmV0dXJuIGdldF9mYW5fZGl2KGRldiwgYnVmLCBvZmZzZXQgLSAxKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0X2ZhbiMjb2Zmc2V0IyNfZGl2IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJXAotCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJCQkJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gc2V0X2Zhbl9kaXYoZGV2LCBidWYsIGNvdW50LCBvZmZzZXQgLSAxKTsJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBnZXRfcHdtIyNvZmZzZXQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJCVwKLXsJCQkJCQkJCQlcCi0JcmV0dXJuIGdldF9wd20oZGV2LCBidWYsIG9mZnNldCAtIDEpOwkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0X3B3bSMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJCVwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQkJCVwKLXsJCQkJCQkJCQlcCi0JcmV0dXJuIHNldF9wd20oZGV2LCBidWYsIGNvdW50LCBvZmZzZXQgLSAxKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3QgZ2V0X3B3bSMjb2Zmc2V0IyNfZW4gKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gZ2V0X3B3bV9lbihkZXYsIGJ1Ziwgb2Zmc2V0IC0gMSk7CQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF9wd20jI29mZnNldCMjX2VuIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJXAotCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJCQkJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gc2V0X3B3bV9lbihkZXYsIGJ1ZiwgY291bnQsIG9mZnNldCAtIDEpOwkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19pbnB1dCwgU19JUlVHTywgZ2V0X2ZhbiMjb2Zmc2V0LAlcCi0JCU5VTEwpOwkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19taW4sIFNfSVJVR08gfCBTX0lXVVNSLAkJXAotCQlnZXRfZmFuIyNvZmZzZXQjI19taW4sIHNldF9mYW4jI29mZnNldCMjX21pbik7CQlcCi1zdGF0aWMgREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19kaXYsIFNfSVJVR08gfCBTX0lXVVNSLAkJXAotCQlnZXRfZmFuIyNvZmZzZXQjI19kaXYsIHNldF9mYW4jI29mZnNldCMjX2Rpdik7CQlcCi1zdGF0aWMgREVWSUNFX0FUVFIocHdtIyNvZmZzZXQsIFNfSVJVR08gfCBTX0lXVVNSLAkJCVwKLQkJZ2V0X3B3bSMjb2Zmc2V0LCBzZXRfcHdtIyNvZmZzZXQpOwkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUihwd20jI29mZnNldCMjX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCi0JCWdldF9wd20jI29mZnNldCMjX2VuLCBzZXRfcHdtIyNvZmZzZXQjI19lbik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbiMjb2Zmc2V0IyNfaW5wdXQsIFNfSVJVR08sIGdldF9mYW4sCVwKKwkJTlVMTCwgb2Zmc2V0IC0gMSk7CQkJCQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbiMjb2Zmc2V0IyNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwJCVwKKwkJZ2V0X2Zhbl9taW4sIHNldF9mYW5fbWluLCBvZmZzZXQgLSAxKTsJCQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbiMjb2Zmc2V0IyNfZGl2LCBTX0lSVUdPIHwgU19JV1VTUiwJCVwKKwkJZ2V0X2Zhbl9kaXYsIHNldF9mYW5fZGl2LCBvZmZzZXQgLSAxKTsJCQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0LCBTX0lSVUdPIHwgU19JV1VTUiwJCVwKKwkJZ2V0X3B3bSwgc2V0X3B3bSwgb2Zmc2V0IC0gMSk7CQkJCVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtIyNvZmZzZXQjI19lbmFibGUsIFNfSVJVR08gfCBTX0lXVVNSLAlcCisJCWdldF9wd21fZW4sIHNldF9wd21fZW4sIG9mZnNldCAtIDEpCiAKIGZhbl9wcmVzZW50KDEpOwogZmFuX3ByZXNlbnQoMik7CitmYW5fcHJlc2VudCgzKTsKIAogc3RhdGljIERFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgZ2V0X2FsYXJtcywgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOworfQorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CisKIC8qIEFsbW9zdCBhbGwgc3lzZnMgZmlsZXMgbWF5IG9yIG1heSBub3QgYmUgY3JlYXRlZCBkZXBlbmRpbmcgb24gdGhlIGNoaXAKICAgIHNldHVwIHNvIHdlIGNyZWF0ZSB0aGVtIGluZGl2aWR1YWxseS4gSXQgaXMgc3RpbGwgY29udmVuaWVudCB0byBkZWZpbmUgYQogICAgZ3JvdXAgdG8gcmVtb3ZlIHRoZW0gYWxsIGF0IG9uY2UuICovCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc21zYzQ3bTFfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl9mYW4xX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX2ZhbjFfbWluLmF0dHIsCi0JJmRldl9hdHRyX2ZhbjFfZGl2LmF0dHIsCi0JJmRldl9hdHRyX2ZhbjJfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfZmFuMl9taW4uYXR0ciwKLQkmZGV2X2F0dHJfZmFuMl9kaXYuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2Rpdi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19kaXYuZGV2X2F0dHIuYXR0ciwKIAotCSZkZXZfYXR0cl9wd20xLmF0dHIsCi0JJmRldl9hdHRyX3B3bTFfZW5hYmxlLmF0dHIsCi0JJmRldl9hdHRyX3B3bTIuYXR0ciwKLQkmZGV2X2F0dHJfcHdtMl9lbmFibGUuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTEuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfZW5hYmxlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMy5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19lbmFibGUuZGV2X2F0dHIuYXR0ciwKIAogCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKKwkmZGV2X2F0dHJfbmFtZS5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTM3Miw3ICszOTMsOCBAQAogCS5hdHRycyA9IHNtc2M0N20xX2F0dHJpYnV0ZXMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzbXNjNDdtMV9maW5kKHVuc2lnbmVkIHNob3J0ICphZGRyKQorc3RhdGljIGludCBfX2luaXQgc21zYzQ3bTFfZmluZCh1bnNpZ25lZCBzaG9ydCAqYWRkciwKKwkJCQlzdHJ1Y3Qgc21zYzQ3bTFfc2lvX2RhdGEgKnNpb19kYXRhKQogewogCXU4IHZhbDsKIApAQCAtMzg2LDE4ICs0MDgsMzIgQEAKIAkgKiBjYW4gZG8gbXVjaCBtb3JlIGJlc2lkZXMgKGRldmljZSBpZCAweDYwKS4KIAkgKiBUaGUgTFBDNDdNOTk3IGlzIHVuZG9jdW1lbnRlZCwgYnV0IHNlZW1zIHRvIGJlIGNvbXBhdGlibGUgd2l0aAogCSAqIHRoZSBMUEM0N00xOTIsIGFuZCBoYXMgdGhlIHNhbWUgZGV2aWNlIGlkLgorCSAqIFRoZSBMUEM0N00yOTIgKGRldmljZSBpZCAweDZCKSBpcyBzb21ld2hhdCBjb21wYXRpYmxlLCBidXQgaXQKKwkgKiBzdXBwb3J0cyBhIDNyZCBmYW4sIGFuZCB0aGUgcGluIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGFyZQorCSAqIHVuZm9ydHVuYXRlbHkgZGlmZmVyZW50LgogCSAqLwotCWlmICh2YWwgPT0gMHg1MSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAic21zYzQ3bTE6IEZvdW5kIFNNU0MgTFBDNDdCMjd4XG4iKTsKLQllbHNlIGlmICh2YWwgPT0gMHg1OSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAic21zYzQ3bTE6IEZvdW5kIFNNU0MgIgotCQkgICAgICAgIkxQQzQ3TTEweC9MUEM0N00xMTIvTFBDNDdNMTN4XG4iKTsKLQllbHNlIGlmICh2YWwgPT0gMHg1RikKLQkJcHJpbnRrKEtFUk5fSU5GTyAic21zYzQ3bTE6IEZvdW5kIFNNU0MgTFBDNDdNMTR4XG4iKTsKLQllbHNlIGlmICh2YWwgPT0gMHg2MCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAic21zYzQ3bTE6IEZvdW5kIFNNU0MgIgotCQkgICAgICAgIkxQQzQ3TTE1eC9MUEM0N00xOTIvTFBDNDdNOTk3XG4iKTsKLQllbHNlIHsKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMHg1MToKKwkJcHJfaW5mbyhEUlZOQU1FICI6IEZvdW5kIFNNU0MgTFBDNDdCMjd4XG4iKTsKKwkJc2lvX2RhdGEtPnR5cGUgPSBzbXNjNDdtMTsKKwkJYnJlYWs7CisJY2FzZSAweDU5OgorCQlwcl9pbmZvKERSVk5BTUUgIjogRm91bmQgU01TQyBMUEM0N00xMHgvTFBDNDdNMTEyL0xQQzQ3TTEzeFxuIik7CisJCXNpb19kYXRhLT50eXBlID0gc21zYzQ3bTE7CisJCWJyZWFrOworCWNhc2UgMHg1RjoKKwkJcHJfaW5mbyhEUlZOQU1FICI6IEZvdW5kIFNNU0MgTFBDNDdNMTR4XG4iKTsKKwkJc2lvX2RhdGEtPnR5cGUgPSBzbXNjNDdtMTsKKwkJYnJlYWs7CisJY2FzZSAweDYwOgorCQlwcl9pbmZvKERSVk5BTUUgIjogRm91bmQgU01TQyBMUEM0N00xNXgvTFBDNDdNMTkyL0xQQzQ3TTk5N1xuIik7CisJCXNpb19kYXRhLT50eXBlID0gc21zYzQ3bTE7CisJCWJyZWFrOworCWNhc2UgMHg2QjoKKwkJcHJfaW5mbyhEUlZOQU1FICI6IEZvdW5kIFNNU0MgTFBDNDdNMjkyXG4iKTsKKwkJc2lvX2RhdGEtPnR5cGUgPSBzbXNjNDdtMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJc3VwZXJpb19leGl0KCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTQwNyw3ICs0NDMsNyBAQAogCSAgICAgIHwgIHN1cGVyaW9faW5iKFNVUEVSSU9fUkVHX0JBU0UgKyAxKTsKIAl2YWwgPSBzdXBlcmlvX2luYihTVVBFUklPX1JFR19BQ1QpOwogCWlmICgqYWRkciA9PSAwIHx8ICh2YWwgJiAweDAxKSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gInNtc2M0N20xOiBEZXZpY2UgaXMgZGlzYWJsZWQsIHdpbGwgbm90IHVzZVxuIik7CisJCXByX2luZm8oRFJWTkFNRSAiOiBEZXZpY2UgaXMgZGlzYWJsZWQsIHdpbGwgbm90IHVzZVxuIik7CiAJCXN1cGVyaW9fZXhpdCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00MTYsMTUgKzQ1MiwyNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtc2M0N20xX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbXNjNDdtMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHNtc2M0N20xX3Npb19kYXRhICpzaW9fZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgZXJyID0gMDsKLQlpbnQgZmFuMSwgZmFuMiwgcHdtMSwgcHdtMjsKKwlpbnQgZmFuMSwgZmFuMiwgZmFuMywgcHdtMSwgcHdtMiwgcHdtMzsKIAotCWlmICghcmVxdWVzdF9yZWdpb24oYWRkcmVzcywgU01TQ19FWFRFTlQsIHNtc2M0N20xX2RyaXZlci5kcml2ZXIubmFtZSkpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiUmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLCBhZGRyZXNzKTsKKwlzdGF0aWMgY29uc3QgY2hhciAqbmFtZXNbXSA9IHsKKwkJInNtc2M0N20xIiwKKwkJInNtc2M0N20yIiwKKwl9OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCwgU01TQ19FWFRFTlQsIERSVk5BTUUpKSB7CisJCWRldl9lcnIoZGV2LCAiUmVnaW9uIDB4JWx4LTB4JWx4IGFscmVhZHkgaW4gdXNlIVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQsCisJCQkodW5zaWduZWQgbG9uZylyZXMtPmVuZCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC00MzMsOTMgKzQ3OSwxMTQgQEAKIAkJZ290byBlcnJvcl9yZWxlYXNlOwogCX0KIAotCW5ld19jbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKLQluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKLQluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQluZXdfY2xpZW50LT5kcml2ZXIgPSAmc21zYzQ3bTFfZHJpdmVyOwotCW5ld19jbGllbnQtPmZsYWdzID0gMDsKLQotCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgInNtc2M0N20xIiwgSTJDX05BTUVfU0laRSk7CisJZGF0YS0+YWRkciA9IHJlcy0+c3RhcnQ7CisJZGF0YS0+dHlwZSA9IHNpb19kYXRhLT50eXBlOworCWRhdGEtPm5hbWUgPSBuYW1lc1tzaW9fZGF0YS0+dHlwZV07CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwogCiAJLyogSWYgbm8gZnVuY3Rpb24gaXMgcHJvcGVybHkgY29uZmlndXJlZCwgdGhlcmUncyBubyBwb2ludCBpbgogCSAgIGFjdHVhbGx5IHJlZ2lzdGVyaW5nIHRoZSBjaGlwLiAqLwotCWZhbjEgPSAoc21zYzQ3bTFfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBTTVNDNDdNMV9SRUdfVFBJTigwKSkgJiAweDA1KQotCSAgICAgICA9PSAweDA1OwotCWZhbjIgPSAoc21zYzQ3bTFfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBTTVNDNDdNMV9SRUdfVFBJTigxKSkgJiAweDA1KQotCSAgICAgICA9PSAweDA1OwotCXB3bTEgPSAoc21zYzQ3bTFfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBTTVNDNDdNMV9SRUdfUFBJTigwKSkgJiAweDA1KQorCXB3bTEgPSAoc21zYzQ3bTFfcmVhZF92YWx1ZShkYXRhLCBTTVNDNDdNMV9SRUdfUFBJTigwKSkgJiAweDA1KQogCSAgICAgICA9PSAweDA0OwotCXB3bTIgPSAoc21zYzQ3bTFfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBTTVNDNDdNMV9SRUdfUFBJTigxKSkgJiAweDA1KQorCXB3bTIgPSAoc21zYzQ3bTFfcmVhZF92YWx1ZShkYXRhLCBTTVNDNDdNMV9SRUdfUFBJTigxKSkgJiAweDA1KQogCSAgICAgICA9PSAweDA0OwotCWlmICghKGZhbjEgfHwgZmFuMiB8fCBwd20xIHx8IHB3bTIpKSB7Ci0JCWRldl93YXJuKCZhZGFwdGVyLT5kZXYsICJEZXZpY2UgYXQgMHgleCBpcyBub3QgY29uZmlndXJlZCwgIgotCQkJICJ3aWxsIG5vdCB1c2VcbiIsIG5ld19jbGllbnQtPmFkZHIpOworCWlmIChkYXRhLT50eXBlID09IHNtc2M0N20yKSB7CisJCWZhbjEgPSAoc21zYzQ3bTFfcmVhZF92YWx1ZShkYXRhLCBTTVNDNDdNMl9SRUdfVFBJTjEpCisJCQkmIDB4MGQpID09IDB4MDk7CisJCWZhbjIgPSAoc21zYzQ3bTFfcmVhZF92YWx1ZShkYXRhLCBTTVNDNDdNMl9SRUdfVFBJTjIpCisJCQkmIDB4MGQpID09IDB4MDk7CisJCWZhbjMgPSAoc21zYzQ3bTFfcmVhZF92YWx1ZShkYXRhLCBTTVNDNDdNMl9SRUdfVFBJTjMpCisJCQkmIDB4MGQpID09IDB4MGQ7CisJCXB3bTMgPSAoc21zYzQ3bTFfcmVhZF92YWx1ZShkYXRhLCBTTVNDNDdNMl9SRUdfUFBJTjMpCisJCQkmIDB4MGQpID09IDB4MDg7CisJfSBlbHNlIHsKKwkJZmFuMSA9IChzbXNjNDdtMV9yZWFkX3ZhbHVlKGRhdGEsIFNNU0M0N00xX1JFR19UUElOKDApKQorCQkJJiAweDA1KSA9PSAweDA1OworCQlmYW4yID0gKHNtc2M0N20xX3JlYWRfdmFsdWUoZGF0YSwgU01TQzQ3TTFfUkVHX1RQSU4oMSkpCisJCQkmIDB4MDUpID09IDB4MDU7CisJCWZhbjMgPSAwOworCQlwd20zID0gMDsKKwl9CisJaWYgKCEoZmFuMSB8fCBmYW4yIHx8IGZhbjMgfHwgcHdtMSB8fCBwd20yIHx8IHB3bTMpKSB7CisJCWRldl93YXJuKGRldiwgIkRldmljZSBub3QgY29uZmlndXJlZCwgd2lsbCBub3QgdXNlXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcl9mcmVlOwogCX0KIAotCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQotCQlnb3RvIGVycm9yX2ZyZWU7Ci0KIAkvKiBTb21lIHZhbHVlcyAoZmFuIG1pbiwgY2xvY2sgZGl2aWRlcnMsIHB3bSByZWdpc3RlcnMpIG1heSBiZQogCSAgIG5lZWRlZCBiZWZvcmUgYW55IHVwZGF0ZSBpcyB0cmlnZ2VyZWQsIHNvIHdlIGJldHRlciByZWFkIHRoZW0KIAkgICBhdCBsZWFzdCBvbmNlIGhlcmUuIFdlIGRvbid0IHVzdWFsbHkgZG8gaXQgdGhhdCB3YXksIGJ1dCBpbgogCSAgIHRoaXMgcGFydGljdWxhciBjYXNlLCBtYW51YWxseSByZWFkaW5nIDUgcmVnaXN0ZXJzIG91dCBvZiA4CiAJICAgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgYW5kIHdlJ3JlIGJldHRlciB1c2luZyB0aGUgZXhpc3RpbmcKIAkgICBmdW5jdGlvbi4gKi8KLQlzbXNjNDdtMV91cGRhdGVfZGV2aWNlKCZuZXdfY2xpZW50LT5kZXYsIDEpOworCXNtc2M0N20xX3VwZGF0ZV9kZXZpY2UoZGV2LCAxKTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCiAJaWYgKGZhbjEpIHsKLQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJICAgICAgJmRldl9hdHRyX2ZhbjFfaW5wdXQpKQotCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkgICAgICAmZGV2X2F0dHJfZmFuMV9taW4pKQotCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkgICAgICAmZGV2X2F0dHJfZmFuMV9kaXYpKSkKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0cikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9kaXYuZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXJyb3JfcmVtb3ZlX2ZpbGVzOwogCX0gZWxzZQotCQlkZXZfZGJnKCZuZXdfY2xpZW50LT5kZXYsICJGYW4gMSBub3QgZW5hYmxlZCBieSBoYXJkd2FyZSwgIgotCQkJInNraXBwaW5nXG4iKTsKKwkJZGV2X2RiZyhkZXYsICJGYW4gMSBub3QgZW5hYmxlZCBieSBoYXJkd2FyZSwgc2tpcHBpbmdcbiIpOwogCiAJaWYgKGZhbjIpIHsKLQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJICAgICAgJmRldl9hdHRyX2ZhbjJfaW5wdXQpKQotCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkgICAgICAmZGV2X2F0dHJfZmFuMl9taW4pKQotCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkgICAgICAmZGV2X2F0dHJfZmFuMl9kaXYpKSkKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0cikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfbWluLmRldl9hdHRyKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9kaXYuZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXJyb3JfcmVtb3ZlX2ZpbGVzOwogCX0gZWxzZQotCQlkZXZfZGJnKCZuZXdfY2xpZW50LT5kZXYsICJGYW4gMiBub3QgZW5hYmxlZCBieSBoYXJkd2FyZSwgIgotCQkJInNraXBwaW5nXG4iKTsKKwkJZGV2X2RiZyhkZXYsICJGYW4gMiBub3QgZW5hYmxlZCBieSBoYXJkd2FyZSwgc2tpcHBpbmdcbiIpOworCisJaWYgKGZhbjMpIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19pbnB1dC5kZXZfYXR0cikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfbWluLmRldl9hdHRyKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19kaXYuZGV2X2F0dHIpKSkKKwkJCWdvdG8gZXJyb3JfcmVtb3ZlX2ZpbGVzOworCX0gZWxzZQorCQlkZXZfZGJnKGRldiwgIkZhbiAzIG5vdCBlbmFibGVkIGJ5IGhhcmR3YXJlLCBza2lwcGluZ1xuIik7CiAKIAlpZiAocHdtMSkgewotCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkgICAgICAmZGV2X2F0dHJfcHdtMSkpCi0JCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSAgICAgICZkZXZfYXR0cl9wd20xX2VuYWJsZSkpKQorCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNlbnNvcl9kZXZfYXR0cl9wd20xLmRldl9hdHRyKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9lbmFibGUuZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXJyb3JfcmVtb3ZlX2ZpbGVzOwogCX0gZWxzZQotCQlkZXZfZGJnKCZuZXdfY2xpZW50LT5kZXYsICJQV00gMSBub3QgZW5hYmxlZCBieSBoYXJkd2FyZSwgIgotCQkJInNraXBwaW5nXG4iKTsKLQlpZiAocHdtMikgewotCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkgICAgICAmZGV2X2F0dHJfcHdtMikpCi0JCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSAgICAgICZkZXZfYXR0cl9wd20yX2VuYWJsZSkpKQotCQkJZ290byBlcnJvcl9yZW1vdmVfZmlsZXM7Ci0JfSBlbHNlCi0JCWRldl9kYmcoJm5ld19jbGllbnQtPmRldiwgIlBXTSAyIG5vdCBlbmFibGVkIGJ5IGhhcmR3YXJlLCAiCi0JCQkic2tpcHBpbmdcbiIpOworCQlkZXZfZGJnKGRldiwgIlBXTSAxIG5vdCBlbmFibGVkIGJ5IGhhcmR3YXJlLCBza2lwcGluZ1xuIik7CiAKLQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKSkpCisJaWYgKHB3bTIpIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfcHdtMi5kZXZfYXR0cikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfZW5hYmxlLmRldl9hdHRyKSkpCisJCQlnb3RvIGVycm9yX3JlbW92ZV9maWxlczsKKwl9IGVsc2UKKwkJZGV2X2RiZyhkZXYsICJQV00gMiBub3QgZW5hYmxlZCBieSBoYXJkd2FyZSwgc2tpcHBpbmdcbiIpOworCisJaWYgKHB3bTMpIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfcHdtMy5kZXZfYXR0cikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfZW5hYmxlLmRldl9hdHRyKSkpCisJCQlnb3RvIGVycm9yX3JlbW92ZV9maWxlczsKKwl9IGVsc2UKKwkJZGV2X2RiZyhkZXYsICJQV00gMyBub3QgZW5hYmxlZCBieSBoYXJkd2FyZSwgc2tpcHBpbmdcbiIpOworCisJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYWxhcm1zKSkpCiAJCWdvdG8gZXJyb3JfcmVtb3ZlX2ZpbGVzOwogCi0JZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOworCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihkZXYpOwogCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7CiAJCWdvdG8gZXJyb3JfcmVtb3ZlX2ZpbGVzOwpAQCAtNTI4LDc4ICs1OTUsNzEgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3JfcmVtb3ZlX2ZpbGVzOgotCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZzbXNjNDdtMV9ncm91cCk7Ci0JaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZzbXNjNDdtMV9ncm91cCk7CiBlcnJvcl9mcmVlOgogCWtmcmVlKGRhdGEpOwogZXJyb3JfcmVsZWFzZToKLQlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzLCBTTVNDX0VYVEVOVCk7CisJcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgU01TQ19FWFRFTlQpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc21zYzQ3bTFfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBfX2RldmV4aXQgc21zYzQ3bTFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNtc2M0N20xX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOworCXN0cnVjdCBzbXNjNDdtMV9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnNtc2M0N20xX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmc21zYzQ3bTFfZ3JvdXApOwogCi0JaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKLQkJcmV0dXJuIGVycjsKLQotCXJlbGVhc2VfcmVnaW9uKGNsaWVudC0+YWRkciwgU01TQ19FWFRFTlQpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0LCBTTVNDX0VYVEVOVCk7CiAJa2ZyZWUoZGF0YSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbXNjNDdtMV9yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKLXsKLQlpbnQgcmVzOwotCi0JbXV0ZXhfbG9jaygmKChzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqKSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSktPmxvY2spOwotCXJlcyA9IGluYl9wKGNsaWVudC0+YWRkciArIHJlZyk7Ci0JbXV0ZXhfdW5sb2NrKCYoKHN0cnVjdCBzbXNjNDdtMV9kYXRhICopIGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKS0+bG9jayk7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQgc21zYzQ3bTFfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKLXsKLQltdXRleF9sb2NrKCYoKHN0cnVjdCBzbXNjNDdtMV9kYXRhICopIGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKS0+bG9jayk7Ci0Jb3V0Yl9wKHZhbHVlLCBjbGllbnQtPmFkZHIgKyByZWcpOwotCW11dGV4X3VubG9jaygmKChzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqKSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSktPmxvY2spOwotfQotCiBzdGF0aWMgc3RydWN0IHNtc2M0N20xX2RhdGEgKnNtc2M0N20xX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAogCQlpbnQgaW5pdCkKIHsKLSAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzbXNjNDdtMV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikgfHwgaW5pdCkgewotCQlpbnQgaTsKKwkJaW50IGksIGZhbl9ucjsKKwkJZmFuX25yID0gZGF0YS0+dHlwZSA9PSBzbXNjNDdtMiA/IDMgOiAyOwogCi0JCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJCWRhdGEtPmZhbltpXSA9IHNtc2M0N20xX3JlYWRfdmFsdWUoY2xpZW50LAotCQkJCSAgICAgICBTTVNDNDdNMV9SRUdfRkFOKGkpKTsKLQkJCWRhdGEtPmZhbl9wcmVsb2FkW2ldID0gc21zYzQ3bTFfcmVhZF92YWx1ZShjbGllbnQsCi0JCQkJCSAgICAgICBTTVNDNDdNMV9SRUdfRkFOX1BSRUxPQUQoaSkpOwotCQkJZGF0YS0+cHdtW2ldID0gc21zYzQ3bTFfcmVhZF92YWx1ZShjbGllbnQsCi0JCQkJICAgICAgIFNNU0M0N00xX1JFR19QV00oaSkpOworCQlmb3IgKGkgPSAwOyBpIDwgZmFuX25yOyBpKyspIHsKKwkJCWRhdGEtPmZhbltpXSA9IHNtc2M0N20xX3JlYWRfdmFsdWUoZGF0YSwKKwkJCQkgICAgICAgU01TQzQ3TTFfUkVHX0ZBTltpXSk7CisJCQlkYXRhLT5mYW5fcHJlbG9hZFtpXSA9IHNtc2M0N20xX3JlYWRfdmFsdWUoZGF0YSwKKwkJCQkJICAgICAgIFNNU0M0N00xX1JFR19GQU5fUFJFTE9BRFtpXSk7CisJCQlkYXRhLT5wd21baV0gPSBzbXNjNDdtMV9yZWFkX3ZhbHVlKGRhdGEsCisJCQkJICAgICAgIFNNU0M0N00xX1JFR19QV01baV0pOwogCQl9CiAKLQkJaSA9IHNtc2M0N20xX3JlYWRfdmFsdWUoY2xpZW50LCBTTVNDNDdNMV9SRUdfRkFORElWKTsKKwkJaSA9IHNtc2M0N20xX3JlYWRfdmFsdWUoZGF0YSwgU01TQzQ3TTFfUkVHX0ZBTkRJVik7CiAJCWRhdGEtPmZhbl9kaXZbMF0gPSAoaSA+PiA0KSAmIDB4MDM7CiAJCWRhdGEtPmZhbl9kaXZbMV0gPSBpID4+IDY7CiAKLQkJZGF0YS0+YWxhcm1zID0gc21zYzQ3bTFfcmVhZF92YWx1ZShjbGllbnQsCisJCWRhdGEtPmFsYXJtcyA9IHNtc2M0N20xX3JlYWRfdmFsdWUoZGF0YSwKIAkJCSAgICAgICBTTVNDNDdNMV9SRUdfQUxBUk0pID4+IDY7CiAJCS8qIENsZWFyIGFsYXJtcyBpZiBuZWVkZWQgKi8KIAkJaWYgKGRhdGEtPmFsYXJtcykKLQkJCXNtc2M0N20xX3dyaXRlX3ZhbHVlKGNsaWVudCwgU01TQzQ3TTFfUkVHX0FMQVJNLCAweEMwKTsKKwkJCXNtc2M0N20xX3dyaXRlX3ZhbHVlKGRhdGEsIFNNU0M0N00xX1JFR19BTEFSTSwgMHhDMCk7CisKKwkJaWYgKGZhbl9uciA+PSAzKSB7CisJCQlkYXRhLT5mYW5fZGl2WzJdID0gKHNtc2M0N20xX3JlYWRfdmFsdWUoZGF0YSwKKwkJCQkJICAgIFNNU0M0N00yX1JFR19GQU5ESVYzKSA+PiA0KSAmIDB4MDM7CisJCQlkYXRhLT5hbGFybXMgfD0gKHNtc2M0N20xX3JlYWRfdmFsdWUoZGF0YSwKKwkJCQkJIFNNU0M0N00yX1JFR19BTEFSTTYpICYgMHg0MCkgPj4gNDsKKwkJCS8qIENsZWFyIGFsYXJtIGlmIG5lZWRlZCAqLworCQkJaWYgKGRhdGEtPmFsYXJtcyAmIDB4MDQpCisJCQkJc21zYzQ3bTFfd3JpdGVfdmFsdWUoZGF0YSwKKwkJCQkJCSAgICAgU01TQzQ3TTJfUkVHX0FMQVJNNiwKKwkJCQkJCSAgICAgMHg0MCk7CisJCX0KIAogCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOwogCX0KQEAgLTYwOCwxOCArNjY4LDg2IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHNtX3Ntc2M0N20xX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNtc2M0N20xX2RldmljZV9hZGQodW5zaWduZWQgc2hvcnQgYWRkcmVzcywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc21zYzQ3bTFfc2lvX2RhdGEgKnNpb19kYXRhKQogewotCWlmIChzbXNjNDdtMV9maW5kKCZhZGRyZXNzKSkgewotCQlyZXR1cm4gLUVOT0RFVjsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzID0geworCQkuc3RhcnQJPSBhZGRyZXNzLAorCQkuZW5kCT0gYWRkcmVzcyArIFNNU0NfRVhURU5UIC0gMSwKKwkJLm5hbWUJPSBEUlZOQU1FLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX07CisJaW50IGVycjsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoRFJWTkFNRSwgYWRkcmVzcyk7CisJaWYgKCFwZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXhpdDsKIAl9CiAKLQlyZXR1cm4gaTJjX2lzYV9hZGRfZHJpdmVyKCZzbXNjNDdtMV9kcml2ZXIpOworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyZXMsIDEpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogRGV2aWNlIHJlc291cmNlIGFkZGl0aW9uIGZhaWxlZCAiCisJCSAgICAgICAiKCVkKVxuIiwgZXJyKTsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CisJfQorCisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc21zYzQ3bTFfc2lvX2RhdGEpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogUGxhdGZvcm0gZGF0YSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKwltZW1jcHkocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIHNpb19kYXRhLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHNtc2M0N20xX3Npb19kYXRhKSk7CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogRGV2aWNlIGFkZGl0aW9uIGZhaWxlZCAoJWQpXG4iLAorCQkgICAgICAgZXJyKTsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2V4aXRfZGV2aWNlX3B1dDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzbV9zbXNjNDdtMV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBzaG9ydCBhZGRyZXNzOworCXN0cnVjdCBzbXNjNDdtMV9zaW9fZGF0YSBzaW9fZGF0YTsKKworCWlmIChzbXNjNDdtMV9maW5kKCZhZGRyZXNzLCAmc2lvX2RhdGEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc21zYzQ3bTFfZHJpdmVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBTZXRzIGdsb2JhbCBwZGV2IGFzIGEgc2lkZSBlZmZlY3QgKi8KKwllcnIgPSBzbXNjNDdtMV9kZXZpY2VfYWRkKGFkZHJlc3MsICZzaW9fZGF0YSk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2RyaXZlcjsKKworCXJldHVybiAwOworCitleGl0X2RyaXZlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21zYzQ3bTFfZHJpdmVyKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNtX3Ntc2M0N20xX2V4aXQodm9pZCkKIHsKLQlpMmNfaXNhX2RlbF9kcml2ZXIoJnNtc2M0N20xX2RyaXZlcik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNtc2M0N20xX2RyaXZlcik7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIk1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc21zYzQ3bTE5Mi5jIGIvZHJpdmVycy9od21vbi9zbXNjNDdtMTkyLmMKaW5kZXggYTY4MzNmNC4uYTAxMmYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zbXNjNDdtMTkyLmMKKysrIGIvZHJpdmVycy9od21vbi9zbXNjNDdtMTkyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIHNtc2M0N20xOTIuYyAtIFN1cHBvcnQgZm9yIGhhcmR3YXJlIG1vbml0b3JpbmcgYmxvY2sgb2YKLSAgICAgICAgICAgICAgICAgICBTTVNDIExQQzQ3TTE5MiBhbmQgTFBDNDdNOTk3IFN1cGVyIEkvTyBjaGlwcworICAgICAgICAgICAgICAgICAgIFNNU0MgTFBDNDdNMTkyIGFuZCBjb21wYXRpYmxlIFN1cGVyIEkvTyBjaGlwcwogCiAgICAgQ29weXJpZ2h0IChDKSAyMDA2ICBIYXJ0bXV0IFJpY2sgPGxpbnV4QHJpY2suY2xhcmFuZXQuZGU+CiAKQEAgLTUxOCw3ICs1MTgsNyBAQAogCQkgJiYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJU01TQzQ3TTE5Ml9SRUdfVklENCkgJiAweGZlKSA9PSAweDgwKSB7CiAJCQlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LAotCQkJCSAiZm91bmQgU01TQzQ3TTE5MiBvciBTTVNDNDdNOTk3LCAiCisJCQkJICJmb3VuZCBTTVNDNDdNMTkyIG9yIGNvbXBhdGlibGUsICIKIAkJCQkgInZlcnNpb24gMiwgc3RlcHBpbmcgQSVkXG4iLCB2ZXJzaW9uICYgMHgwZik7CiAJCX0gZWxzZSB7CiAJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Z0MTIxMS5jIGIvZHJpdmVycy9od21vbi92dDEyMTEuYwppbmRleCA4OWMyM2Q2Li45ZjNlMzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3Z0MTIxMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdnQxMjExLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgaW50IHVjaF9jb25maWcgPSAtMTsKQEAgLTExMzAsNiArMTEzMSwxMiBAQAogCX0KIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsIERSVk5BTUUpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCByZWdpb24gMHglbHgtMHglbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZylyZXMtPnN0YXJ0LCAodW5zaWduZWQgbG9uZylyZXMtPmVuZCk7CisJCWdvdG8gRVhJVF9LRlJFRTsKKwl9CiAJZGF0YS0+YWRkciA9IHJlcy0+c3RhcnQ7CiAJZGF0YS0+bmFtZSA9IERSVk5BTUU7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwpAQCAtMTE5Nyw2ICsxMjA0LDggQEAKIAlkZXZfZXJyKGRldiwgIlN5c2ZzIGludGVyZmFjZSBjcmVhdGlvbiBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKIEVYSVRfREVWX1JFTU9WRV9TSUxFTlQ6CiAJdnQxMjExX3JlbW92ZV9zeXNmcyhwZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKK0VYSVRfS0ZSRUU6CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJa2ZyZWUoZGF0YSk7CiBFWElUOgpAQCAtMTIwNiwxMiArMTIxNSwxNiBAQAogc3RhdGljIGludCBfX2RldmV4aXQgdnQxMjExX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB2dDEyMTFfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKIAl2dDEyMTFfcmVtb3ZlX3N5c2ZzKHBkZXYpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGRhdGEpOwogCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNjI3aGYuYyBiL2RyaXZlcnMvaHdtb24vdzgzNjI3aGYuYwppbmRleCBkN2UyNDA2Li4xMmNiNDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4MzYyN2hmLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM2MjdoZi5jCkBAIC01LDYgKzUsNyBAQAogICAgIFBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sCiAgICAgYW5kIE1hcmsgU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KICAgICBQb3J0ZWQgdG8gMi42IGJ5IEJlcm5oYXJkIEMuIFNjaHJlbmsgPGNsZW15QGNsZW15Lm9yZz4KKyAgICBDb3B5cmlnaHQgKGMpIDIwMDcgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDIsMTUgKzQzLDIwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWlzYS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tdmlkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJsbTc1LmgiCiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisjZGVmaW5lIERSVk5BTUUgInc4MzYyN2hmIgorZW51bSBjaGlwcyB7IHc4MzYyN2hmLCB3ODM2Mjd0aGYsIHc4MzY5N2hmLCB3ODM2MzdoZiwgdzgzNjg3dGhmIH07CisKIHN0YXRpYyB1MTYgZm9yY2VfYWRkcjsKIG1vZHVsZV9wYXJhbShmb3JjZV9hZGRyLCB1c2hvcnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9hZGRyLApAQCAtNjAsMTIgKzY2LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZm9yY2VfaTJjLAogCQkgIkluaXRpYWxpemUgdGhlIGkyYyBhZGRyZXNzIG9mIHRoZSBzZW5zb3JzIik7CiAKLS8qIFRoZSBhY3R1YWwgSVNBIGFkZHJlc3MgaXMgcmVhZCBmcm9tIFN1cGVyLUkvTyBjb25maWd1cmF0aW9uIHNwYWNlICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgYWRkcmVzczsKLQotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLWVudW0gY2hpcHMgeyBhbnlfY2hpcCwgdzgzNjI3aGYsIHc4MzYyN3RoZiwgdzgzNjk3aGYsIHc4MzYzN2hmLCB3ODM2ODd0aGYgfTsKLQogc3RhdGljIGludCByZXNldDsKIG1vZHVsZV9wYXJhbShyZXNldCwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJlc2V0LCAiU2V0IHRvIG9uZSB0byByZXNldCBjaGlwIG9uIGxvYWQiKTsKQEAgLTE1Niw5ICsxNTYsOSBAQAogI2RlZmluZSBXSU5CX1JFR0lPTl9PRkZTRVQJNQogI2RlZmluZSBXSU5CX1JFR0lPTl9TSVpFCTIKIAotLyogV2hlcmUgYXJlIHRoZSBzZW5zb3JzIGFkZHJlc3MvZGF0YSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gdGhlIGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBXODM3ODFEX0FERFJfUkVHX09GRlNFVCA1Ci0jZGVmaW5lIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUIDYKKy8qIFdoZXJlIGFyZSB0aGUgc2Vuc29ycyBhZGRyZXNzL2RhdGEgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIHRoZSByZWdpb24gb2Zmc2V0ICovCisjZGVmaW5lIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUIDAKKyNkZWZpbmUgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQgMQogCiAvKiBUaGUgVzgzNzgxRCByZWdpc3RlcnMgKi8KIC8qIFRoZSBXODM3ODJEIHJlZ2lzdGVycyBmb3IgbnI9Nyw4IGFyZSBpbiBiYW5rIDUgKi8KQEAgLTI4OSw3ICsyODksOCBAQAogLyogRm9yIGVhY2ggcmVnaXN0ZXJlZCBjaGlwLCB3ZSBuZWVkIHRvIGtlZXAgc29tZSBkYXRhIGluIG1lbW9yeS4KICAgIFRoZSBzdHJ1Y3R1cmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAqLwogc3RydWN0IHc4MzYyN2hmX2RhdGEgewotCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKKwl1bnNpZ25lZCBzaG9ydCBhZGRyOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwogCXN0cnVjdCBtdXRleCBsb2NrOwogCWVudW0gY2hpcHMgdHlwZTsKQEAgLTI5OCw5ICsyOTksNiBAQAogCWNoYXIgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwogCi0Jc3RydWN0IGkyY19jbGllbnQgKmxtNzU7CS8qIGZvciBzZWNvbmRhcnkgSTJDIGFkZHJlc3NlcyAqLwotCS8qIHBvaW50ZXIgdG8gYXJyYXkgb2YgMiBzdWJjbGllbnRzICovCi0KIAl1OCBpbls5XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggaW5fbWF4WzldOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCBpbl9taW5bOV07CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwpAQCAtMzI3LDIyICszMjUsMjYgQEAKIAl1OCB2cm1fb3Z0OwkJLyogUmVnaXN0ZXIgdmFsdWUsIDYyN1RIRi82MzdIRi82ODdUSEYgb25seSAqLwogfTsKIAorc3RydWN0IHc4MzYyN2hmX3Npb19kYXRhIHsKKwllbnVtIGNoaXBzIHR5cGU7Cit9OwogCi1zdGF0aWMgaW50IHc4MzYyN2hmX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCB3ODM2MjdoZl9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCi1zdGF0aWMgaW50IHc4MzYyN2hmX3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZyk7Ci1zdGF0aWMgaW50IHc4MzYyN2hmX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcsIHUxNiB2YWx1ZSk7CitzdGF0aWMgaW50IHc4MzYyN2hmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIGludCB3ODM2MjdoZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisKK3N0YXRpYyBpbnQgdzgzNjI3aGZfcmVhZF92YWx1ZShzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSwgdTE2IHJlZyk7CitzdGF0aWMgaW50IHc4MzYyN2hmX3dyaXRlX3ZhbHVlKHN0cnVjdCB3ODM2MjdoZl9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpOwogc3RhdGljIHN0cnVjdCB3ODM2MjdoZl9kYXRhICp3ODM2MjdoZl91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCB3ODM2MjdoZl9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyB2b2lkIHc4MzYyN2hmX2luaXRfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdzgzNjI3aGZfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdzgzNjI3aGZfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubmFtZQk9ICJ3ODM2MjdoZiIsCisJCS5uYW1lCT0gRFJWTkFNRSwKIAl9LAotCS5hdHRhY2hfYWRhcHRlcgk9IHc4MzYyN2hmX2RldGVjdCwKLQkuZGV0YWNoX2NsaWVudAk9IHc4MzYyN2hmX2RldGFjaF9jbGllbnQsCisJLnByb2JlCQk9IHc4MzYyN2hmX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodzgzNjI3aGZfcmVtb3ZlKSwKIH07CiAKIC8qIGZvbGxvd2luZyBhcmUgdGhlIHN5c2ZzIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwpAQCAtMzYwLDE1ICszNjIsMTQgQEAKIHN0YXRpYyBzc2l6ZV90IFwKIHN0b3JlX2luXyMjcmVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBpbnQgbnIpIFwKIHsgXAotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7IFwKLQlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOyBcCisJc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsgXAogCXUzMiB2YWw7IFwKIAkgXAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOyBcCiAJIFwKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKIAlkYXRhLT5pbl8jI3JlZ1tucl0gPSBJTl9UT19SRUcodmFsKTsgXAotCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfSU5fIyNSRUcobnIpLCBcCisJdzgzNjI3aGZfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfSU5fIyNSRUcobnIpLCBcCiAJCQkgICAgZGF0YS0+aW5fIyNyZWdbbnJdKTsgXAogCSBcCiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKQEAgLTQ1Miw4ICs0NTMsNyBAQAogc3RhdGljIHNzaXplX3Qgc3RvcmVfcmVnc19pbl9taW4wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB3ODM2MjdoZl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdTMyIHZhbDsKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwpAQCAtNDcyLDcgKzQ3Miw3IEBACiAJCS8qIHVzZSBWUk04IChzdGFuZGFyZCkgY2FsY3VsYXRpb24gKi8KIAkJZGF0YS0+aW5fbWluWzBdID0gSU5fVE9fUkVHKHZhbCk7CiAKLQl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0lOX01JTigwKSwgZGF0YS0+aW5fbWluWzBdKTsKKwl3ODM2MjdoZl93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19JTl9NSU4oMCksIGRhdGEtPmluX21pblswXSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNDgwLDggKzQ4MCw3IEBACiBzdGF0aWMgc3NpemVfdCBzdG9yZV9yZWdzX2luX21heDAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCB3ODM2MjdoZl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1MzIgdmFsOwogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CkBAIC01MDAsNyArNDk5LDcgQEAKIAkJLyogdXNlIFZSTTggKHN0YW5kYXJkKSBjYWxjdWxhdGlvbiAqLwogCQlkYXRhLT5pbl9tYXhbMF0gPSBJTl9UT19SRUcodmFsKTsKIAotCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfSU5fTUFYKDApLCBkYXRhLT5pbl9tYXhbMF0pOworCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0lOX01BWCgwKSwgZGF0YS0+aW5fbWF4WzBdKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC01MjUsOCArNTI0LDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBzdG9yZV9mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGludCBucikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCB3ODM2MjdoZl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1MzIgdmFsOwogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CkBAIC01MzQsNyArNTMyLDcgQEAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+ZmFuX21pbltuciAtIDFdID0KIAkgICAgRkFOX1RPX1JFRyh2YWwsIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yIC0gMV0pKTsKLQl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0ZBTl9NSU4obnIpLAorCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0ZBTl9NSU4obnIpLAogCQkJICAgIGRhdGEtPmZhbl9taW5bbnIgLSAxXSk7CiAKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTU4Nyw4ICs1ODUsNyBAQAogc3RhdGljIHNzaXplX3QgXAogc3RvcmVfdGVtcF8jI3JlZyAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgaW50IG5yKSBcCiB7IFwKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOyBcCi0Jc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAorCXN0cnVjdCB3ODM2MjdoZl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7IFwKIAl1MzIgdmFsOyBcCiAJIFwKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsgXApAQCAtNTk3LDExICs1OTQsMTEgQEAKIAkgXAogCWlmIChuciA+PSAyKSB7CS8qIFRFTVAyIGFuZCBURU1QMyAqLyBcCiAJCWRhdGEtPnRlbXBfIyNyZWcjI19hZGRbbnItMl0gPSBMTTc1X1RFTVBfVE9fUkVHKHZhbCk7IFwKLQkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19URU1QXyMjUkVHKG5yKSwgXAorCQl3ODM2MjdoZl93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19URU1QXyMjUkVHKG5yKSwgXAogCQkJCWRhdGEtPnRlbXBfIyNyZWcjI19hZGRbbnItMl0pOyBcCiAJfSBlbHNlIHsJLyogVEVNUDEgKi8gXAogCQlkYXRhLT50ZW1wXyMjcmVnID0gVEVNUF9UT19SRUcodmFsKTsgXAotCQl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1RFTVBfIyNSRUcobnIpLCBcCisJCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1RFTVBfIyNSRUcobnIpLCBcCiAJCQlkYXRhLT50ZW1wXyMjcmVnKTsgXAogCX0gXAogCSBcCkBAIC02NTksOCArNjU2LDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBzdG9yZV92cm1fcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXUzMiB2YWw7CiAKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKQEAgLTY5NSw4ICs2OTEsNyBAQAogc3RvcmVfYmVlcF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKIAkgICAgICAgaW50IHVwZGF0ZV9tYXNrKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXUzMiB2YWwsIHZhbDI7CiAKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKQEAgLTcwNSwxOCArNzAwLDE4IEBACiAKIAlpZiAodXBkYXRlX21hc2sgPT0gQkVFUF9NQVNLKSB7CS8qIFdlIGFyZSBzdG9yaW5nIGJlZXBfbWFzayAqLwogCQlkYXRhLT5iZWVwX21hc2sgPSBCRUVQX01BU0tfVE9fUkVHKHZhbCk7Ci0JCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMSwKKwkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMSwKIAkJCQkgICAgZGF0YS0+YmVlcF9tYXNrICYgMHhmZik7Ci0JCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMywKKwkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMywKIAkJCQkgICAgKChkYXRhLT5iZWVwX21hc2spID4+IDE2KSAmIDB4ZmYpOwogCQl2YWwyID0gKGRhdGEtPmJlZXBfbWFzayA+PiA4KSAmIDB4N2Y7CiAJfSBlbHNlIHsJCS8qIFdlIGFyZSBzdG9yaW5nIGJlZXBfZW5hYmxlICovCiAJCXZhbDIgPQotCQkgICAgdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIpICYgMHg3ZjsKKwkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMikgJiAweDdmOwogCQlkYXRhLT5iZWVwX2VuYWJsZSA9IEJFRVBfRU5BQkxFX1RPX1JFRyh2YWwpOwogCX0KIAotCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMiwKKwl3ODM2MjdoZl93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0lOVFMyLAogCQkJICAgIHZhbDIgfCBkYXRhLT5iZWVwX2VuYWJsZSA8PCA3KTsKIAogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwpAQCAtNzU0LDggKzc0OSw3IEBACiBzdGF0aWMgc3NpemVfdAogc3RvcmVfZmFuX2Rpdl9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgaW50IG5yKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcgbWluOwogCXU4IHJlZzsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwpAQCAtNzY4LDE5ICs3NjIsMTkgQEAKIAogCWRhdGEtPmZhbl9kaXZbbnJdID0gRElWX1RPX1JFRyh2YWwpOwogCi0JcmVnID0gKHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBucj09MiA/IFc4Mzc4MURfUkVHX1BJTiA6IFc4Mzc4MURfUkVHX1ZJRF9GQU5ESVYpCisJcmVnID0gKHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgbnI9PTIgPyBXODM3ODFEX1JFR19QSU4gOiBXODM3ODFEX1JFR19WSURfRkFORElWKQogCSAgICAgICAmIChucj09MCA/IDB4Y2YgOiAweDNmKSkKIAkgICAgfCAoKGRhdGEtPmZhbl9kaXZbbnJdICYgMHgwMykgPDwgKG5yPT0wID8gNCA6IDYpKTsKLQl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIG5yPT0yID8gVzgzNzgxRF9SRUdfUElOIDogVzgzNzgxRF9SRUdfVklEX0ZBTkRJViwgcmVnKTsKKwl3ODM2MjdoZl93cml0ZV92YWx1ZShkYXRhLCBucj09MiA/IFc4Mzc4MURfUkVHX1BJTiA6IFc4Mzc4MURfUkVHX1ZJRF9GQU5ESVYsIHJlZyk7CiAKLQlyZWcgPSAodzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1ZCQVQpCisJcmVnID0gKHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfVkJBVCkKIAkgICAgICAgJiB+KDEgPDwgKDUgKyBucikpKQogCSAgICB8ICgoZGF0YS0+ZmFuX2Rpdltucl0gJiAweDA0KSA8PCAoMyArIG5yKSk7Ci0JdzgzNjI3aGZfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19WQkFULCByZWcpOworCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1ZCQVQsIHJlZyk7CiAKIAkvKiBSZXN0b3JlIGZhbl9taW4gKi8KIAlkYXRhLT5mYW5fbWluW25yXSA9IEZBTl9UT19SRUcobWluLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKTsKLQl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0ZBTl9NSU4obnIrMSksIGRhdGEtPmZhbl9taW5bbnJdKTsKKwl3ODM2MjdoZl93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19GQU5fTUlOKG5yKzEpLCBkYXRhLT5mYW5fbWluW25yXSk7CiAKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CkBAIC04MTQsOCArODA4LDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBzdG9yZV9wd21fcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGludCBucikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCB3ODM2MjdoZl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1MzIgdmFsOwogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CkBAIC04MjUsMTQgKzgxOCwxNCBAQAogCWlmIChkYXRhLT50eXBlID09IHc4MzYyN3RoZikgewogCQkvKiBiaXRzIDAtMyBhcmUgcmVzZXJ2ZWQgIGluIDYyN1RIRiAqLwogCQlkYXRhLT5wd21bbnIgLSAxXSA9IFBXTV9UT19SRUcodmFsKSAmIDB4ZjA7Ci0JCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGNsaWVudCwKKwkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoZGF0YSwKIAkJCQkgICAgIFc4MzZYN0hGX1JFR19QV00oZGF0YS0+dHlwZSwgbnIpLAogCQkJCSAgICAgZGF0YS0+cHdtW25yIC0gMV0gfAotCQkJCSAgICAgKHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LAorCQkJCSAgICAgKHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkgICAgIFc4MzZYN0hGX1JFR19QV00oZGF0YS0+dHlwZSwgbnIpKSAmIDB4MGYpKTsKIAl9IGVsc2UgewogCQlkYXRhLT5wd21bbnIgLSAxXSA9IFBXTV9UT19SRUcodmFsKTsKLQkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoY2xpZW50LAorCQl3ODM2MjdoZl93cml0ZV92YWx1ZShkYXRhLAogCQkJCSAgICAgVzgzNlg3SEZfUkVHX1BXTShkYXRhLT50eXBlLCBuciksCiAJCQkJICAgICBkYXRhLT5wd21bbnIgLSAxXSk7CiAJfQpAQCAtODY4LDggKzg2MSw3IEBACiBzdGF0aWMgc3NpemVfdAogc3RvcmVfc2Vuc29yX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBpbnQgbnIpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB3ODM2MjdoZl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdTMyIHZhbCwgdG1wOwogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CkBAIC04NzgsMzEgKzg3MCwzMSBAQAogCiAJc3dpdGNoICh2YWwpIHsKIAljYXNlIDE6CQkvKiBQSUkvQ2VsZXJvbiBkaW9kZSAqLwotCQl0bXAgPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfU0NGRzEpOwotCQl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcxLAorCQl0bXAgPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1NDRkcxKTsKKwkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfU0NGRzEsCiAJCQkJICAgIHRtcCB8IEJJVF9TQ0ZHMVtuciAtIDFdKTsKLQkJdG1wID0gdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcyKTsKLQkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19TQ0ZHMiwKKwkJdG1wID0gdzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19TQ0ZHMik7CisJCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1NDRkcyLAogCQkJCSAgICB0bXAgfCBCSVRfU0NGRzJbbnIgLSAxXSk7CiAJCWRhdGEtPnNlbnNbbnIgLSAxXSA9IHZhbDsKIAkJYnJlYWs7CiAJY2FzZSAyOgkJLyogMzkwNCAqLwotCQl0bXAgPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfU0NGRzEpOwotCQl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcxLAorCQl0bXAgPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1NDRkcxKTsKKwkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfU0NGRzEsCiAJCQkJICAgIHRtcCB8IEJJVF9TQ0ZHMVtuciAtIDFdKTsKLQkJdG1wID0gdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcyKTsKLQkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19TQ0ZHMiwKKwkJdG1wID0gdzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19TQ0ZHMik7CisJCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1NDRkcyLAogCQkJCSAgICB0bXAgJiB+QklUX1NDRkcyW25yIC0gMV0pOwogCQlkYXRhLT5zZW5zW25yIC0gMV0gPSB2YWw7CiAJCWJyZWFrOwogCWNhc2UgVzgzNzgxRF9ERUZBVUxUX0JFVEE6CS8qIHRoZXJtaXN0b3IgKi8KLQkJdG1wID0gdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcxKTsKLQkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19TQ0ZHMSwKKwkJdG1wID0gdzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19TQ0ZHMSk7CisJCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1NDRkcxLAogCQkJCSAgICB0bXAgJiB+QklUX1NDRkcxW25yIC0gMV0pOwogCQlkYXRhLT5zZW5zW25yIC0gMV0gPSB2YWw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQlkZXZfZXJyKGRldiwKIAkJICAgICAgICJJbnZhbGlkIHNlbnNvciB0eXBlICVsZDsgbXVzdCBiZSAxLCAyLCBvciAlZFxuIiwKIAkJICAgICAgIChsb25nKSB2YWwsIFc4Mzc4MURfREVGQVVMVF9CRVRBKTsKIAkJYnJlYWs7CkBAIC05MjksMzUgKzkyMSw4NyBAQAogc3lzZnNfc2Vuc29yKDIpOwogc3lzZnNfc2Vuc29yKDMpOwogCi1zdGF0aWMgaW50IF9faW5pdCB3ODM2MjdoZl9maW5kKGludCBzaW9hZGRyLCB1bnNpZ25lZCBzaG9ydCAqYWRkcikKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOworfQorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHc4MzYyN2hmX2ZpbmQoaW50IHNpb2FkZHIsIHVuc2lnbmVkIHNob3J0ICphZGRyLAorCQkJCXN0cnVjdCB3ODM2MjdoZl9zaW9fZGF0YSAqc2lvX2RhdGEpCit7CisJaW50IGVyciA9IC1FTk9ERVY7CiAJdTE2IHZhbDsKIAorCXN0YXRpYyBjb25zdCBfX2luaXRkYXRhIGNoYXIgKm5hbWVzW10gPSB7CisJCSJXODM2MjdIRiIsCisJCSJXODM2MjdUSEYiLAorCQkiVzgzNjk3SEYiLAorCQkiVzgzNjM3SEYiLAorCQkiVzgzNjg3VEhGIiwKKwl9OworCiAJUkVHID0gc2lvYWRkcjsKIAlWQUwgPSBzaW9hZGRyICsgMTsKIAogCXN1cGVyaW9fZW50ZXIoKTsKIAl2YWw9IHN1cGVyaW9faW5iKERFVklEKTsKLQlpZih2YWwgIT0gVzYyN19ERVZJRCAmJgotCSAgIHZhbCAhPSBXNjI3VEhGX0RFVklEICYmCi0JICAgdmFsICE9IFc2OTdfREVWSUQgJiYKLQkgICB2YWwgIT0gVzYzN19ERVZJRCAmJgotCSAgIHZhbCAhPSBXNjg3VEhGX0RFVklEKSB7Ci0JCXN1cGVyaW9fZXhpdCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgVzYyN19ERVZJRDoKKwkJc2lvX2RhdGEtPnR5cGUgPSB3ODM2MjdoZjsKKwkJYnJlYWs7CisJY2FzZSBXNjI3VEhGX0RFVklEOgorCQlzaW9fZGF0YS0+dHlwZSA9IHc4MzYyN3RoZjsKKwkJYnJlYWs7CisJY2FzZSBXNjk3X0RFVklEOgorCQlzaW9fZGF0YS0+dHlwZSA9IHc4MzY5N2hmOworCQlicmVhazsKKwljYXNlIFc2MzdfREVWSUQ6CisJCXNpb19kYXRhLT50eXBlID0gdzgzNjM3aGY7CisJCWJyZWFrOworCWNhc2UgVzY4N1RIRl9ERVZJRDoKKwkJc2lvX2RhdGEtPnR5cGUgPSB3ODM2ODd0aGY7CisJCWJyZWFrOworCWNhc2UgMHhmZjoJLyogTm8gZGV2aWNlIGF0IGFsbCAqLworCQlnb3RvIGV4aXQ7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoRFJWTkFNRSAiOiBVbnN1cHBvcnRlZCBjaGlwIChERVZJRD0weCUwMngpXG4iLCB2YWwpOworCQlnb3RvIGV4aXQ7CiAJfQogCiAJc3VwZXJpb19zZWxlY3QoVzgzNjI3SEZfTERfSFdNKTsKKwlmb3JjZV9hZGRyICY9IFdJTkJfQUxJR05NRU5UOworCWlmIChmb3JjZV9hZGRyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWTkFNRSAiOiBGb3JjaW5nIGFkZHJlc3MgMHgleFxuIiwKKwkJICAgICAgIGZvcmNlX2FkZHIpOworCQlzdXBlcmlvX291dGIoV0lOQl9CQVNFX1JFRywgZm9yY2VfYWRkciA+PiA4KTsKKwkJc3VwZXJpb19vdXRiKFdJTkJfQkFTRV9SRUcgKyAxLCBmb3JjZV9hZGRyICYgMHhmZik7CisJfQogCXZhbCA9IChzdXBlcmlvX2luYihXSU5CX0JBU0VfUkVHKSA8PCA4KSB8CiAJICAgICAgIHN1cGVyaW9faW5iKFdJTkJfQkFTRV9SRUcgKyAxKTsKIAkqYWRkciA9IHZhbCAmIFdJTkJfQUxJR05NRU5UOwotCWlmICgqYWRkciA9PSAwICYmIGZvcmNlX2FkZHIgPT0gMCkgewotCQlzdXBlcmlvX2V4aXQoKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCphZGRyID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZOQU1FICI6IEJhc2UgYWRkcmVzcyBub3Qgc2V0LCAiCisJCSAgICAgICAic2tpcHBpbmdcbiIpOworCQlnb3RvIGV4aXQ7CiAJfQogCisJdmFsID0gc3VwZXJpb19pbmIoV0lOQl9BQ1RfUkVHKTsKKwlpZiAoISh2YWwgJiAweDAxKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVk5BTUUgIjogRW5hYmxpbmcgSFdNIGxvZ2ljYWwgZGV2aWNlXG4iKTsKKwkJc3VwZXJpb19vdXRiKFdJTkJfQUNUX1JFRywgdmFsIHwgMHgwMSk7CisJfQorCisJZXJyID0gMDsKKwlwcl9pbmZvKERSVk5BTUUgIjogRm91bmQgJXMgY2hpcCBhdCAlI3hcbiIsCisJCW5hbWVzW3Npb19kYXRhLT50eXBlXSwgKmFkZHIpOworCisgZXhpdDoKIAlzdXBlcmlvX2V4aXQoKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdzgzNjI3aGZfYXR0cmlidXRlc1tdID0gewpAQCAtMTAwMyw2ICsxMDQ3LDcgQEAKIAkmZGV2X2F0dHJfcHdtMS5hdHRyLAogCSZkZXZfYXR0cl9wd20yLmF0dHIsCiAKKwkmZGV2X2F0dHJfbmFtZS5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTEwMzksMTYxICsxMDg0LDkyIEBACiAJLmF0dHJzID0gdzgzNjI3aGZfYXR0cmlidXRlc19vcHQsCiB9OwogCi1zdGF0aWMgaW50IHc4MzYyN2hmX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3ODM2MjdoZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWludCB2YWwsIGtpbmQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgdzgzNjI3aGZfc2lvX2RhdGEgKnNpb19kYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB3ODM2MjdoZl9kYXRhICpkYXRhOwotCWludCBlcnIgPSAwOwotCWNvbnN0IGNoYXIgKmNsaWVudF9uYW1lID0gIiI7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGVycjsKIAotCWlmKGZvcmNlX2FkZHIpCi0JCWFkZHJlc3MgPSBmb3JjZV9hZGRyICYgV0lOQl9BTElHTk1FTlQ7CisJc3RhdGljIGNvbnN0IGNoYXIgKm5hbWVzW10gPSB7CisJCSJ3ODM2MjdoZiIsCisJCSJ3ODM2Mjd0aGYiLAorCQkidzgzNjk3aGYiLAorCQkidzgzNjM3aGYiLAorCQkidzgzNjg3dGhmIiwKKwl9OwogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzICsgV0lOQl9SRUdJT05fT0ZGU0VULCBXSU5CX1JFR0lPTl9TSVpFLAotCSAgICAgICAgICAgICAgICAgICAgdzgzNjI3aGZfZHJpdmVyLmRyaXZlci5uYW1lKSkgeworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQsIFdJTkJfUkVHSU9OX1NJWkUsIERSVk5BTUUpKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgcmVnaW9uIDB4JWx4LTB4JWx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpcmVzLT5zdGFydCwKKwkJCSh1bnNpZ25lZCBsb25nKShyZXMtPnN0YXJ0ICsgV0lOQl9SRUdJT05fU0laRSAtIDEpKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIEVSUk9SMDsKIAl9CiAKLQlpZihmb3JjZV9hZGRyKSB7Ci0JCXByaW50aygidzgzNjI3aGYubzogZm9yY2luZyBJU0EgYWRkcmVzcyAweCUwNFhcbiIsIGFkZHJlc3MpOwotCQlzdXBlcmlvX2VudGVyKCk7Ci0JCXN1cGVyaW9fc2VsZWN0KFc4MzYyN0hGX0xEX0hXTSk7Ci0JCXN1cGVyaW9fb3V0YihXSU5CX0JBU0VfUkVHLCBhZGRyZXNzID4+IDgpOwotCQlzdXBlcmlvX291dGIoV0lOQl9CQVNFX1JFRysxLCBhZGRyZXNzICYgMHhmZik7Ci0JCXN1cGVyaW9fZXhpdCgpOwotCX0KLQotCXN1cGVyaW9fZW50ZXIoKTsKLQl2YWw9IHN1cGVyaW9faW5iKERFVklEKTsKLQlpZih2YWwgPT0gVzYyN19ERVZJRCkKLQkJa2luZCA9IHc4MzYyN2hmOwotCWVsc2UgaWYodmFsID09IFc2OTdfREVWSUQpCi0JCWtpbmQgPSB3ODM2OTdoZjsKLQllbHNlIGlmKHZhbCA9PSBXNjI3VEhGX0RFVklEKQotCQlraW5kID0gdzgzNjI3dGhmOwotCWVsc2UgaWYodmFsID09IFc2MzdfREVWSUQpCi0JCWtpbmQgPSB3ODM2MzdoZjsKLQllbHNlIGlmICh2YWwgPT0gVzY4N1RIRl9ERVZJRCkKLQkJa2luZCA9IHc4MzY4N3RoZjsKLQllbHNlIHsKLQkJZGV2X2luZm8oJmFkYXB0ZXItPmRldiwKLQkJCSAiVW5zdXBwb3J0ZWQgY2hpcCAoZGV2X2lkPTB4JTAyWCkuXG4iLCB2YWwpOwotCQlnb3RvIEVSUk9SMTsKLQl9Ci0KLQlzdXBlcmlvX3NlbGVjdChXODM2MjdIRl9MRF9IV00pOwotCWlmKCh2YWwgPSAweDAxICYgc3VwZXJpb19pbmIoV0lOQl9BQ1RfUkVHKSkgPT0gMCkKLQkJc3VwZXJpb19vdXRiKFdJTkJfQUNUX1JFRywgMSk7Ci0Jc3VwZXJpb19leGl0KCk7Ci0KLQkvKiBPSy4gRm9yIG5vdywgd2UgcHJlc3VtZSB3ZSBoYXZlIGEgdmFsaWQgY2xpZW50LiBXZSBub3cgY3JlYXRlIHRoZQotCSAgIGNsaWVudCBzdHJ1Y3R1cmUsIGV2ZW4gdGhvdWdoIHdlIGNhbm5vdCBmaWxsIGl0IGNvbXBsZXRlbHkgeWV0LgotCSAgIEJ1dCBpdCBhbGxvd3MgdXMgdG8gYWNjZXNzIHc4MzYyN2hmX3tyZWFkLHdyaXRlfV92YWx1ZS4gKi8KLQogCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdzgzNjI3aGZfZGF0YSksIEdGUF9LRVJORUwpKSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIEVSUk9SMTsKIAl9Ci0KLQluZXdfY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEobmV3X2NsaWVudCwgZGF0YSk7Ci0JbmV3X2NsaWVudC0+YWRkciA9IGFkZHJlc3M7CisJZGF0YS0+YWRkciA9IHJlcy0+c3RhcnQ7CisJZGF0YS0+dHlwZSA9IHNpb19kYXRhLT50eXBlOworCWRhdGEtPm5hbWUgPSBuYW1lc1tzaW9fZGF0YS0+dHlwZV07CiAJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7Ci0JbmV3X2NsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JbmV3X2NsaWVudC0+ZHJpdmVyID0gJnc4MzYyN2hmX2RyaXZlcjsKLQluZXdfY2xpZW50LT5mbGFncyA9IDA7Ci0KLQotCWlmIChraW5kID09IHc4MzYyN2hmKSB7Ci0JCWNsaWVudF9uYW1lID0gInc4MzYyN2hmIjsKLQl9IGVsc2UgaWYgKGtpbmQgPT0gdzgzNjI3dGhmKSB7Ci0JCWNsaWVudF9uYW1lID0gInc4MzYyN3RoZiI7Ci0JfSBlbHNlIGlmIChraW5kID09IHc4MzY5N2hmKSB7Ci0JCWNsaWVudF9uYW1lID0gInc4MzY5N2hmIjsKLQl9IGVsc2UgaWYgKGtpbmQgPT0gdzgzNjM3aGYpIHsKLQkJY2xpZW50X25hbWUgPSAidzgzNjM3aGYiOwotCX0gZWxzZSBpZiAoa2luZCA9PSB3ODM2ODd0aGYpIHsKLQkJY2xpZW50X25hbWUgPSAidzgzNjg3dGhmIjsKLQl9Ci0KLQkvKiBGaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyBhbmQgcHV0IGludG8gdGhlIGdsb2JhbCBsaXN0ICovCi0Jc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCBjbGllbnRfbmFtZSwgSTJDX05BTUVfU0laRSk7Ci0JZGF0YS0+dHlwZSA9IGtpbmQ7Ci0JZGF0YS0+dmFsaWQgPSAwOwogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KLQlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKLQkJZ290byBFUlJPUjI7Ci0KLQlkYXRhLT5sbTc1ID0gTlVMTDsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNoaXAgKi8KLQl3ODM2MjdoZl9pbml0X2NsaWVudChuZXdfY2xpZW50KTsKKwl3ODM2MjdoZl9pbml0X2RldmljZShwZGV2KTsKIAogCS8qIEEgZmV3IHZhcnMgbmVlZCB0byBiZSBmaWxsZWQgdXBvbiBzdGFydHVwICovCi0JZGF0YS0+ZmFuX21pblswXSA9IHc4MzYyN2hmX3JlYWRfdmFsdWUobmV3X2NsaWVudCwgVzgzNzgxRF9SRUdfRkFOX01JTigxKSk7Ci0JZGF0YS0+ZmFuX21pblsxXSA9IHc4MzYyN2hmX3JlYWRfdmFsdWUobmV3X2NsaWVudCwgVzgzNzgxRF9SRUdfRkFOX01JTigyKSk7Ci0JZGF0YS0+ZmFuX21pblsyXSA9IHc4MzYyN2hmX3JlYWRfdmFsdWUobmV3X2NsaWVudCwgVzgzNzgxRF9SRUdfRkFOX01JTigzKSk7CisJZGF0YS0+ZmFuX21pblswXSA9IHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfRkFOX01JTigxKSk7CisJZGF0YS0+ZmFuX21pblsxXSA9IHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfRkFOX01JTigyKSk7CisJZGF0YS0+ZmFuX21pblsyXSA9IHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfRkFOX01JTigzKSk7CiAKIAkvKiBSZWdpc3RlciBjb21tb24gZGV2aWNlIGF0dHJpYnV0ZXMgKi8KLQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZ3ODM2MjdoZl9ncm91cCkpKQorCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM2MjdoZl9ncm91cCkpKQogCQlnb3RvIEVSUk9SMzsKIAogCS8qIFJlZ2lzdGVyIGNoaXAtc3BlY2lmaWMgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KLQlpZiAoa2luZCA9PSB3ODM2MjdoZiB8fCBraW5kID09IHc4MzY5N2hmKQotCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkmZGV2X2F0dHJfaW41X2lucHV0KSkKLQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJJmRldl9hdHRyX2luNV9taW4pKQotCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkmZGV2X2F0dHJfaW41X21heCkpCi0JCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSZkZXZfYXR0cl9pbjZfaW5wdXQpKQotCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkmZGV2X2F0dHJfaW42X21pbikpCi0JCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSZkZXZfYXR0cl9pbjZfbWF4KSkpCisJaWYgKGRhdGEtPnR5cGUgPT0gdzgzNjI3aGYgfHwgZGF0YS0+dHlwZSA9PSB3ODM2OTdoZikKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW41X2lucHV0KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW41X21pbikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2luNV9tYXgpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjZfaW5wdXQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjZfbWluKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW42X21heCkpKQogCQkJZ290byBFUlJPUjQ7CiAKLQlpZiAoa2luZCAhPSB3ODM2OTdoZikKLQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJJmRldl9hdHRyX2luMV9pbnB1dCkpCi0JCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSZkZXZfYXR0cl9pbjFfbWluKSkKLQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJJmRldl9hdHRyX2luMV9tYXgpKQotCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkmZGV2X2F0dHJfZmFuM19pbnB1dCkpCi0JCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSZkZXZfYXR0cl9mYW4zX21pbikpCi0JCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSZkZXZfYXR0cl9mYW4zX2RpdikpCi0JCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSZkZXZfYXR0cl90ZW1wM19pbnB1dCkpCi0JCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSZkZXZfYXR0cl90ZW1wM19tYXgpKQotCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkmZGV2X2F0dHJfdGVtcDNfbWF4X2h5c3QpKQotCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkmZGV2X2F0dHJfdGVtcDNfdHlwZSkpKQorCWlmIChkYXRhLT50eXBlICE9IHc4MzY5N2hmKQorCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjFfaW5wdXQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjFfbWluKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW4xX21heCkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2ZhbjNfaW5wdXQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9mYW4zX21pbikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2ZhbjNfZGl2KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdGVtcDNfaW5wdXQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90ZW1wM19tYXgpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90ZW1wM19tYXhfaHlzdCkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RlbXAzX3R5cGUpKSkKIAkJCWdvdG8gRVJST1I0OwogCi0JaWYgKGtpbmQgIT0gdzgzNjk3aGYgJiYgZGF0YS0+dmlkICE9IDB4ZmYpCi0JCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSZkZXZfYXR0cl9jcHUwX3ZpZCkpCi0JCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSZkZXZfYXR0cl92cm0pKSkKKwlpZiAoZGF0YS0+dHlwZSAhPSB3ODM2OTdoZiAmJiBkYXRhLT52aWQgIT0gMHhmZikgeworCQkvKiBDb252ZXJ0IFZJRCB0byB2b2x0YWdlIGJhc2VkIG9uIFZSTSAqLworCQlkYXRhLT52cm0gPSB2aWRfd2hpY2hfdnJtKCk7CisKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY3B1MF92aWQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92cm0pKSkKKwkJCWdvdG8gRVJST1I0OworCX0KKworCWlmIChkYXRhLT50eXBlID09IHc4MzYyN3RoZiB8fCBkYXRhLT50eXBlID09IHc4MzYzN2hmCisJIHx8IGRhdGEtPnR5cGUgPT0gdzgzNjg3dGhmKQorCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wd20zKSkpCiAJCQlnb3RvIEVSUk9SNDsKIAotCWlmIChraW5kID09IHc4MzYyN3RoZiB8fCBraW5kID09IHc4MzYzN2hmIHx8IGtpbmQgPT0gdzgzNjg3dGhmKQotCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkmZGV2X2F0dHJfcHdtMykpKQotCQkJZ290byBFUlJPUjQ7Ci0KLQlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CisJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKGRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKIAkJZ290byBFUlJPUjQ7CkBAIC0xMjAyLDQ3ICsxMTc4LDM3IEBACiAJcmV0dXJuIDA7CiAKICAgICAgIEVSUk9SNDoKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmdzgzNjI3aGZfZ3JvdXApOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZ3ODM2MjdoZl9ncm91cF9vcHQpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmdzgzNjI3aGZfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmdzgzNjI3aGZfZ3JvdXBfb3B0KTsKICAgICAgIEVSUk9SMzoKLQlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKLSAgICAgIEVSUk9SMjoKIAlrZnJlZShkYXRhKTsKICAgICAgIEVSUk9SMToKLQlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzICsgV0lOQl9SRUdJT05fT0ZGU0VULCBXSU5CX1JFR0lPTl9TSVpFKTsKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0LCBXSU5CX1JFR0lPTl9TSVpFKTsKICAgICAgIEVSUk9SMDoKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHc4MzYyN2hmX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IHc4MzYyN2hmX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCB3ODM2MjdoZl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKIAotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnc4MzYyN2hmX2dyb3VwKTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ3ODM2MjdoZl9ncm91cF9vcHQpOwotCi0JaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKLQkJcmV0dXJuIGVycjsKLQotCXJlbGVhc2VfcmVnaW9uKGNsaWVudC0+YWRkciArIFdJTkJfUkVHSU9OX09GRlNFVCwgV0lOQl9SRUdJT05fU0laRSk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4MzYyN2hmX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNjI3aGZfZ3JvdXBfb3B0KTsKIAlrZnJlZShkYXRhKTsKIAorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0LCBXSU5CX1JFR0lPTl9TSVpFKTsKKwogCXJldHVybiAwOwogfQogCiAKLS8qCi0gICBJU0EgYWNjZXNzIG11c3QgYWx3YXlzIGJlIGxvY2tlZCBleHBsaWNpdGx5IQotICAgV2UgaWdub3JlIHRoZSBXODM3ODFEIEJVU1kgZmxhZyBhdCB0aGlzIG1vbWVudCAtIGl0IGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzLAotICAgd291bGQgc2xvdyBkb3duIHRoZSBXODM3ODFEIGFjY2VzcyBhbmQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuCi0gICBUaGVyZSBhcmUgc29tZSB1Z2x5IHR5cGVjYXN0cyBoZXJlLCBidXQgdGhlIGdvb2QgbmV3cyBpcyAtIHRoZXkgc2hvdWxkCi0gICBub3doZXJlIGVsc2UgYmUgbmVjZXNzYXJ5ISAqLwotc3RhdGljIGludCB3ODM2MjdoZl9yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcpCitzdGF0aWMgaW50IHc4MzYyN2hmX3JlYWRfdmFsdWUoc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEsIHUxNiByZWcpCiB7Ci0Jc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgcmVzLCB3b3JkX3NpemVkOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CkBAIC0xMjUzLDI5ICsxMjE5LDI5IEBACiAJCSAgIHx8ICgocmVnICYgMHgwMGZmKSA9PSAweDU1KSk7CiAJaWYgKHJlZyAmIDB4ZmYwMCkgewogCQlvdXRiX3AoVzgzNzgxRF9SRUdfQkFOSywKLQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJICAgICAgIGRhdGEtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CiAJCW91dGJfcChyZWcgPj4gOCwKLQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwkJICAgICAgIGRhdGEtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CiAJfQotCW91dGJfcChyZWcgJiAweGZmLCBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7Ci0JcmVzID0gaW5iX3AoY2xpZW50LT5hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCW91dGJfcChyZWcgJiAweGZmLCBkYXRhLT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCXJlcyA9IGluYl9wKGRhdGEtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CiAJaWYgKHdvcmRfc2l6ZWQpIHsKIAkJb3V0Yl9wKChyZWcgJiAweGZmKSArIDEsCi0JCSAgICAgICBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJCSAgICAgICBkYXRhLT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwogCQlyZXMgPQotCQkgICAgKHJlcyA8PCA4KSArIGluYl9wKGNsaWVudC0+YWRkciArCisJCSAgICAocmVzIDw8IDgpICsgaW5iX3AoZGF0YS0+YWRkciArCiAJCQkJICAgICAgIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKIAl9CiAJaWYgKHJlZyAmIDB4ZmYwMCkgewogCQlvdXRiX3AoVzgzNzgxRF9SRUdfQkFOSywKLQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJb3V0Yl9wKDAsIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwkJICAgICAgIGRhdGEtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJCW91dGJfcCgwLCBkYXRhLT5hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOwogCX0KIAltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBpbnQgdzgzNjI3dGhmX3JlYWRfZ3BpbzUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHc4MzYyN3RoZl9yZWFkX2dwaW81KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJlcyA9IDB4ZmYsIHNlbDsKIApAQCAtMTI4NCw3ICsxMjUwLDcgQEAKIAogCS8qIE1ha2Ugc3VyZSB0aGVzZSBHUElPIHBpbnMgYXJlIGVuYWJsZWQgKi8KIAlpZiAoIShzdXBlcmlvX2luYihXODM2MjdUSEZfR1BJTzVfRU4pICYgKDE8PDMpKSkgewotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkdQSU81IGRpc2FibGVkLCBubyBWSUQgZnVuY3Rpb25cbiIpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJHUElPNSBkaXNhYmxlZCwgbm8gVklEIGZ1bmN0aW9uXG4iKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTI5MiwxMiArMTI1OCwxMiBAQAogCSAgIFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgZml2ZSAoVlJNIDkpLCBhbmQgcG9zc2libHkgNiAoVlJNIDEwKSAqLwogCXNlbCA9IHN1cGVyaW9faW5iKFc4MzYyN1RIRl9HUElPNV9JT1NSKSAmIDB4M2Y7CiAJaWYgKChzZWwgJiAweDFmKSAhPSAweDFmKSB7Ci0JCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiR1BJTzUgbm90IGNvbmZpZ3VyZWQgZm9yIFZJRCAiCisJCWRldl9kYmcoJnBkZXYtPmRldiwgIkdQSU81IG5vdCBjb25maWd1cmVkIGZvciBWSUQgIgogCQkJImZ1bmN0aW9uXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAotCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIlJlYWRpbmcgVklEIGZyb20gR1BJTzVcbiIpOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJSZWFkaW5nIFZJRCBmcm9tIEdQSU81XG4iKTsKIAlyZXMgPSBzdXBlcmlvX2luYihXODM2MjdUSEZfR1BJTzVfRFIpICYgc2VsOwogCiBleGl0OgpAQCAtMTMwNSw3ICsxMjcxLDcgQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW50IHc4MzY4N3RoZl9yZWFkX3ZpZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBfX2RldmluaXQgdzgzNjg3dGhmX3JlYWRfdmlkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJlcyA9IDB4ZmY7CiAKQEAgLTEzMTQsMTMgKzEyODAsMTMgQEAKIAogCS8qIE1ha2Ugc3VyZSB0aGVzZSBHUElPIHBpbnMgYXJlIGVuYWJsZWQgKi8KIAlpZiAoIShzdXBlcmlvX2luYihXODM2ODdUSEZfVklEX0VOKSAmICgxIDw8IDIpKSkgewotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlZJRCBkaXNhYmxlZCwgbm8gVklEIGZ1bmN0aW9uXG4iKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiVklEIGRpc2FibGVkLCBubyBWSUQgZnVuY3Rpb25cbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJLyogTWFrZSBzdXJlIHRoZSBwaW5zIGFyZSBjb25maWd1cmVkIGZvciBpbnB1dCAqLwogCWlmICghKHN1cGVyaW9faW5iKFc4MzY4N1RIRl9WSURfQ0ZHKSAmICgxIDw8IDQpKSkgewotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlZJRCBjb25maWd1cmVkIGFzIG91dHB1dCwgIgorCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJWSUQgY29uZmlndXJlZCBhcyBvdXRwdXQsICIKIAkJCSJubyBWSUQgZnVuY3Rpb25cbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMTMzMiw5ICsxMjk4LDggQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW50IHc4MzYyN2hmX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcsIHUxNiB2YWx1ZSkKK3N0YXRpYyBpbnQgdzgzNjI3aGZfd3JpdGVfdmFsdWUoc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEsIHUxNiByZWcsIHUxNiB2YWx1ZSkKIHsKLQlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB3b3JkX3NpemVkOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CkBAIC0xMzQ0LDMzICsxMzA5LDMzIEBACiAJCSAgIHx8ICgocmVnICYgMHgwMGZmKSA9PSAweDU1KSk7CiAJaWYgKHJlZyAmIDB4ZmYwMCkgewogCQlvdXRiX3AoVzgzNzgxRF9SRUdfQkFOSywKLQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJICAgICAgIGRhdGEtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CiAJCW91dGJfcChyZWcgPj4gOCwKLQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwkJICAgICAgIGRhdGEtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CiAJfQotCW91dGJfcChyZWcgJiAweGZmLCBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJb3V0Yl9wKHJlZyAmIDB4ZmYsIGRhdGEtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CiAJaWYgKHdvcmRfc2l6ZWQpIHsKIAkJb3V0Yl9wKHZhbHVlID4+IDgsCi0JCSAgICAgICBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJCSAgICAgICBkYXRhLT5hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOwogCQlvdXRiX3AoKHJlZyAmIDB4ZmYpICsgMSwKLQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJICAgICAgIGRhdGEtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CiAJfQogCW91dGJfcCh2YWx1ZSAmIDB4ZmYsCi0JICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwkgICAgICAgZGF0YS0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKIAlpZiAocmVnICYgMHhmZjAwKSB7CiAJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAotCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQlvdXRiX3AoMCwgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCQkgICAgICAgZGF0YS0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKDAsIGRhdGEtPmFkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CiAJfQogCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHc4MzYyN2hmX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdzgzNjI3aGZfaW5pdF9kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB3ODM2MjdoZl9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJaW50IGk7Ci0JaW50IHR5cGUgPSBkYXRhLT50eXBlOworCWVudW0gY2hpcHMgdHlwZSA9IGRhdGEtPnR5cGU7CiAJdTggdG1wOwogCiAJaWYgKHJlc2V0KSB7CkBAIC0xMzc5LDU3ICsxMzQ0LDUzIEBACiAJCSAgIHNwZWVkLi4uKSBzbyBpdCBpcyBub3cgb3B0aW9uYWwuIEl0IG1pZ2h0IGV2ZW4gZ28gYXdheSBpZgogCQkgICBub2JvZHkgcmVwb3J0cyBpdCBhcyBiZWluZyB1c2VmdWwsIGFzIEkgc2VlIHZlcnkgbGl0dGxlCiAJCSAgIHJlYXNvbiB3aHkgdGhpcyB3b3VsZCBiZSBuZWVkZWQgYXQgYWxsLiAqLwotCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJJZiByZXNldD0xIHNvbHZlZCBhIHByb2JsZW0geW91IHdlcmUgIgorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSWYgcmVzZXQ9MSBzb2x2ZWQgYSBwcm9ibGVtIHlvdSB3ZXJlICIKIAkJCSAiaGF2aW5nLCBwbGVhc2UgcmVwb3J0IVxuIik7CiAKIAkJLyogc2F2ZSB0aGlzIHJlZ2lzdGVyICovCi0JCWkgPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9DT05GSUcpOworCQlpID0gdzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0NPTkZJRyk7CiAJCS8qIFJlc2V0IGFsbCBleGNlcHQgV2F0Y2hkb2cgdmFsdWVzIGFuZCBsYXN0IGNvbnZlcnNpb24gdmFsdWVzCiAJCSAgIFRoaXMgc2V0cyBmYW4tZGl2cyB0byAyLCBhbW9uZyBvdGhlcnMgKi8KLQkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19DT05GSUcsIDB4ODApOworCQl3ODM2MjdoZl93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19DT05GSUcsIDB4ODApOwogCQkvKiBSZXN0b3JlIHRoZSByZWdpc3RlciBhbmQgZGlzYWJsZSBwb3dlci1vbiBhYm5vcm1hbCBiZWVwLgogCQkgICBUaGlzIHNhdmVzIEZBTiAxLzIvMyBpbnB1dC9vdXRwdXQgdmFsdWVzIHNldCBieSBCSU9TLiAqLwotCQl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JFRVBfQ09ORklHLCBpIHwgMHg4MCk7CisJCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfQ09ORklHLCBpIHwgMHg4MCk7CiAJCS8qIERpc2FibGUgbWFzdGVyIGJlZXAtZW5hYmxlIChyZXNldCB0dXJucyBpdCBvbikuCiAJCSAgIEluZGl2aWR1YWwgYmVlcHMgc2hvdWxkIGJlIHJlc2V0IHRvIG9mZiBidXQgZm9yIHNvbWUgcmVhc29uCiAJCSAgIGRpc2FibGluZyB0aGlzIGJpdCBoZWxwcyBzb21lIHBlb3BsZSBub3QgZ2V0IGJlZXBlZCAqLwotCQl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIsIDApOworCQl3ODM2MjdoZl93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0lOVFMyLCAwKTsKIAl9CiAKIAkvKiBNaW5pbWl6ZSBjb25mbGljdHMgd2l0aCBvdGhlciB3aW5ib25kIGkyYy1vbmx5IGNsaWVudHMuLi4gICovCiAJLyogZGlzYWJsZSBpMmMgc3ViY2xpZW50cy4uLiBob3cgdG8gZGlzYWJsZSBtYWluIGkyYyBjbGllbnQ/PyAqLwogCS8qIGZvcmNlIGkyYyBhZGRyZXNzIHRvIHJlbGF0aXZlbHkgdW5jb21tb24gYWRkcmVzcyAqLwotCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfSTJDX1NVQkFERFIsIDB4ODkpOwotCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfSTJDX0FERFIsIGZvcmNlX2kyYyk7CisJdzgzNjI3aGZfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfSTJDX1NVQkFERFIsIDB4ODkpOworCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0kyQ19BRERSLCBmb3JjZV9pMmMpOwogCiAJLyogUmVhZCBWSUQgb25seSBvbmNlICovCi0JaWYgKHc4MzYyN2hmID09IGRhdGEtPnR5cGUgfHwgdzgzNjM3aGYgPT0gZGF0YS0+dHlwZSkgewotCQlpbnQgbG8gPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfVklEX0ZBTkRJVik7Ci0JCWludCBoaSA9IHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19DSElQSUQpOworCWlmICh0eXBlID09IHc4MzYyN2hmIHx8IHR5cGUgPT0gdzgzNjM3aGYpIHsKKwkJaW50IGxvID0gdzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19WSURfRkFORElWKTsKKwkJaW50IGhpID0gdzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19DSElQSUQpOwogCQlkYXRhLT52aWQgPSAobG8gJiAweDBmKSB8ICgoaGkgJiAweDAxKSA8PCA0KTsKLQl9IGVsc2UgaWYgKHc4MzYyN3RoZiA9PSBkYXRhLT50eXBlKSB7Ci0JCWRhdGEtPnZpZCA9IHc4MzYyN3RoZl9yZWFkX2dwaW81KGNsaWVudCk7Ci0JfSBlbHNlIGlmICh3ODM2ODd0aGYgPT0gZGF0YS0+dHlwZSkgewotCQlkYXRhLT52aWQgPSB3ODM2ODd0aGZfcmVhZF92aWQoY2xpZW50KTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gdzgzNjI3dGhmKSB7CisJCWRhdGEtPnZpZCA9IHc4MzYyN3RoZl9yZWFkX2dwaW81KHBkZXYpOworCX0gZWxzZSBpZiAodHlwZSA9PSB3ODM2ODd0aGYpIHsKKwkJZGF0YS0+dmlkID0gdzgzNjg3dGhmX3JlYWRfdmlkKHBkZXYpOwogCX0KIAogCS8qIFJlYWQgVlJNICYgT1ZUIENvbmZpZyBvbmx5IG9uY2UgKi8KLQlpZiAodzgzNjI3dGhmID09IGRhdGEtPnR5cGUgfHwgdzgzNjM3aGYgPT0gZGF0YS0+dHlwZQotCSB8fCB3ODM2ODd0aGYgPT0gZGF0YS0+dHlwZSkgeworCWlmICh0eXBlID09IHc4MzYyN3RoZiB8fCB0eXBlID09IHc4MzYzN2hmIHx8IHR5cGUgPT0gdzgzNjg3dGhmKSB7CiAJCWRhdGEtPnZybV9vdnQgPSAKLQkJCXc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM2MjdUSEZfUkVHX1ZSTV9PVlRfQ0ZHKTsKKwkJCXc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNjI3VEhGX1JFR19WUk1fT1ZUX0NGRyk7CiAJfQogCi0JLyogQ29udmVydCBWSUQgdG8gdm9sdGFnZSBiYXNlZCBvbiBWUk0gKi8KLQlkYXRhLT52cm0gPSB2aWRfd2hpY2hfdnJtKCk7Ci0KLQl0bXAgPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfU0NGRzEpOworCXRtcCA9IHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfU0NGRzEpOwogCWZvciAoaSA9IDE7IGkgPD0gMzsgaSsrKSB7CiAJCWlmICghKHRtcCAmIEJJVF9TQ0ZHMVtpIC0gMV0pKSB7CiAJCQlkYXRhLT5zZW5zW2kgLSAxXSA9IFc4Mzc4MURfREVGQVVMVF9CRVRBOwogCQl9IGVsc2UgewogCQkJaWYgKHc4MzYyN2hmX3JlYWRfdmFsdWUKLQkJCSAgICAoY2xpZW50LAorCQkJICAgIChkYXRhLAogCQkJICAgICBXODM3ODFEX1JFR19TQ0ZHMikgJiBCSVRfU0NGRzJbaSAtIDFdKQogCQkJCWRhdGEtPnNlbnNbaSAtIDFdID0gMTsKIAkJCWVsc2UKQEAgLTE0NDEsMzggKzE0MDIsMzcgQEAKIAogCWlmKGluaXQpIHsKIAkJLyogRW5hYmxlIHRlbXAyICovCi0JCXRtcCA9IHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19URU1QMl9DT05GSUcpOworCQl0bXAgPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1RFTVAyX0NPTkZJRyk7CiAJCWlmICh0bXAgJiAweDAxKSB7Ci0JCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJFbmFibGluZyB0ZW1wMiwgcmVhZGluZ3MgIgorCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkVuYWJsaW5nIHRlbXAyLCByZWFkaW5ncyAiCiAJCQkJICJtaWdodCBub3QgbWFrZSBzZW5zZVxuIik7Ci0JCQl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1RFTVAyX0NPTkZJRywKKwkJCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1RFTVAyX0NPTkZJRywKIAkJCQl0bXAgJiAweGZlKTsKIAkJfQogCiAJCS8qIEVuYWJsZSB0ZW1wMyAqLwogCQlpZiAodHlwZSAhPSB3ODM2OTdoZikgewotCQkJdG1wID0gdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsCisJCQl0bXAgPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJVzgzNzgxRF9SRUdfVEVNUDNfQ09ORklHKTsKIAkJCWlmICh0bXAgJiAweDAxKSB7Ci0JCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiRW5hYmxpbmcgdGVtcDMsICIKKwkJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiRW5hYmxpbmcgdGVtcDMsICIKIAkJCQkJICJyZWFkaW5ncyBtaWdodCBub3QgbWFrZSBzZW5zZVxuIik7Ci0JCQkJdzgzNjI3aGZfd3JpdGVfdmFsdWUoY2xpZW50LAorCQkJCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsCiAJCQkJCVc4Mzc4MURfUkVHX1RFTVAzX0NPTkZJRywgdG1wICYgMHhmZSk7CiAJCQl9CiAJCX0KIAl9CiAKIAkvKiBTdGFydCBtb25pdG9yaW5nICovCi0JdzgzNjI3aGZfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19DT05GSUcsCi0JCQkgICAgKHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LAorCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0NPTkZJRywKKwkJCSAgICAodzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLAogCQkJCQkJVzgzNzgxRF9SRUdfQ09ORklHKSAmIDB4ZjcpCiAJCQkgICAgfCAweDAxKTsKIH0KIAogc3RhdGljIHN0cnVjdCB3ODM2MjdoZl9kYXRhICp3ODM2MjdoZl91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCB3ODM2MjdoZl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHc4MzYyN2hmX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgaTsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTE0ODYsMjMgKzE0NDYsMjMgQEAKIAkJCSAgICAmJiAoaSA9PSA1IHx8IGkgPT0gNikpKQogCQkJCWNvbnRpbnVlOwogCQkJZGF0YS0+aW5baV0gPQotCQkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19JTihpKSk7CisJCQkgICAgdzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19JTihpKSk7CiAJCQlkYXRhLT5pbl9taW5baV0gPQotCQkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LAorCQkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJICAgICAgIFc4Mzc4MURfUkVHX0lOX01JTihpKSk7CiAJCQlkYXRhLT5pbl9tYXhbaV0gPQotCQkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LAorCQkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJICAgICAgIFc4Mzc4MURfUkVHX0lOX01BWChpKSk7CiAJCX0KIAkJZm9yIChpID0gMTsgaSA8PSAzOyBpKyspIHsKIAkJCWRhdGEtPmZhbltpIC0gMV0gPQotCQkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19GQU4oaSkpOworCQkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfRkFOKGkpKTsKIAkJCWRhdGEtPmZhbl9taW5baSAtIDFdID0KLQkJCSAgICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGNsaWVudCwKKwkJCSAgICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJCSAgICAgICBXODM3ODFEX1JFR19GQU5fTUlOKGkpKTsKIAkJfQogCQlmb3IgKGkgPSAxOyBpIDw9IDM7IGkrKykgewotCQkJdTggdG1wID0gdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsCisJCQl1OCB0bXAgPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJVzgzNlg3SEZfUkVHX1BXTShkYXRhLT50eXBlLCBpKSk7CiAgCQkJLyogYml0cyAwLTMgYXJlIHJlc2VydmVkICBpbiA2MjdUSEYgKi8KICAJCQlpZiAoZGF0YS0+dHlwZSA9PSB3ODM2Mjd0aGYpCkBAIC0xNTEzLDQ3ICsxNDczLDQ3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAotCQlkYXRhLT50ZW1wID0gdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1RFTVAoMSkpOworCQlkYXRhLT50ZW1wID0gdzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19URU1QKDEpKTsKIAkJZGF0YS0+dGVtcF9tYXggPQotCQkgICAgdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1RFTVBfT1ZFUigxKSk7CisJCSAgICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1RFTVBfT1ZFUigxKSk7CiAJCWRhdGEtPnRlbXBfbWF4X2h5c3QgPQotCQkgICAgdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1RFTVBfSFlTVCgxKSk7CisJCSAgICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1RFTVBfSFlTVCgxKSk7CiAJCWRhdGEtPnRlbXBfYWRkWzBdID0KLQkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19URU1QKDIpKTsKKwkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfVEVNUCgyKSk7CiAJCWRhdGEtPnRlbXBfbWF4X2FkZFswXSA9Ci0JCSAgICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfVEVNUF9PVkVSKDIpKTsKKwkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfVEVNUF9PVkVSKDIpKTsKIAkJZGF0YS0+dGVtcF9tYXhfaHlzdF9hZGRbMF0gPQotCQkgICAgdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1RFTVBfSFlTVCgyKSk7CisJCSAgICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1RFTVBfSFlTVCgyKSk7CiAJCWlmIChkYXRhLT50eXBlICE9IHc4MzY5N2hmKSB7CiAJCQlkYXRhLT50ZW1wX2FkZFsxXSA9Ci0JCQkgIHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19URU1QKDMpKTsKKwkJCSAgdzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19URU1QKDMpKTsKIAkJCWRhdGEtPnRlbXBfbWF4X2FkZFsxXSA9Ci0JCQkgIHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19URU1QX09WRVIoMykpOworCQkJICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1RFTVBfT1ZFUigzKSk7CiAJCQlkYXRhLT50ZW1wX21heF9oeXN0X2FkZFsxXSA9Ci0JCQkgIHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19URU1QX0hZU1QoMykpOworCQkJICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1RFTVBfSFlTVCgzKSk7CiAJCX0KIAotCQlpID0gdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1ZJRF9GQU5ESVYpOworCQlpID0gdzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19WSURfRkFORElWKTsKIAkJZGF0YS0+ZmFuX2RpdlswXSA9IChpID4+IDQpICYgMHgwMzsKIAkJZGF0YS0+ZmFuX2RpdlsxXSA9IChpID4+IDYpICYgMHgwMzsKIAkJaWYgKGRhdGEtPnR5cGUgIT0gdzgzNjk3aGYpIHsKLQkJCWRhdGEtPmZhbl9kaXZbMl0gPSAodzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsCisJCQlkYXRhLT5mYW5fZGl2WzJdID0gKHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJICAgICAgIFc4Mzc4MURfUkVHX1BJTikgPj4gNikgJiAweDAzOwogCQl9Ci0JCWkgPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfVkJBVCk7CisJCWkgPSB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1ZCQVQpOwogCQlkYXRhLT5mYW5fZGl2WzBdIHw9IChpID4+IDMpICYgMHgwNDsKIAkJZGF0YS0+ZmFuX2RpdlsxXSB8PSAoaSA+PiA0KSAmIDB4MDQ7CiAJCWlmIChkYXRhLT50eXBlICE9IHc4MzY5N2hmKQogCQkJZGF0YS0+ZmFuX2RpdlsyXSB8PSAoaSA+PiA1KSAmIDB4MDQ7CiAJCWRhdGEtPmFsYXJtcyA9Ci0JCSAgICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQUxBUk0xKSB8Ci0JCSAgICAodzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0FMQVJNMikgPDwgOCkgfAotCQkgICAgKHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19BTEFSTTMpIDw8IDE2KTsKLQkJaSA9IHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19CRUVQX0lOVFMyKTsKKwkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQUxBUk0xKSB8CisJCSAgICAodzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19BTEFSTTIpIDw8IDgpIHwKKwkJICAgICh3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0FMQVJNMykgPDwgMTYpOworCQlpID0gdzgzNjI3aGZfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0lOVFMyKTsKIAkJZGF0YS0+YmVlcF9lbmFibGUgPSBpID4+IDc7CiAJCWRhdGEtPmJlZXBfbWFzayA9ICgoaSAmIDB4N2YpIDw8IDgpIHwKLQkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19CRUVQX0lOVFMxKSB8Ci0JCSAgICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMykgPDwgMTY7CisJCSAgICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzEpIHwKKwkJICAgIHc4MzYyN2hmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMykgPDwgMTY7CiAJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CkBAIC0xNTYzLDE5ICsxNTIzLDg3IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHNlbnNvcnNfdzgzNjI3aGZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdzgzNjI3aGZfZGV2aWNlX2FkZCh1bnNpZ25lZCBzaG9ydCBhZGRyZXNzLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCB3ODM2MjdoZl9zaW9fZGF0YSAqc2lvX2RhdGEpCiB7Ci0JaWYgKHc4MzYyN2hmX2ZpbmQoMHgyZSwgJmFkZHJlc3MpCi0JICYmIHc4MzYyN2hmX2ZpbmQoMHg0ZSwgJmFkZHJlc3MpKSB7Ci0JCXJldHVybiAtRU5PREVWOworCXN0cnVjdCByZXNvdXJjZSByZXMgPSB7CisJCS5zdGFydAk9IGFkZHJlc3MgKyBXSU5CX1JFR0lPTl9PRkZTRVQsCisJCS5lbmQJPSBhZGRyZXNzICsgV0lOQl9SRUdJT05fT0ZGU0VUICsgV0lOQl9SRUdJT05fU0laRSAtIDEsCisJCS5uYW1lCT0gRFJWTkFNRSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwl9OworCWludCBlcnI7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVk5BTUUsIGFkZHJlc3MpOworCWlmICghcGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGV4aXQ7CiAJfQogCi0JcmV0dXJuIGkyY19pc2FfYWRkX2RyaXZlcigmdzgzNjI3aGZfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmcmVzLCAxKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSByZXNvdXJjZSBhZGRpdGlvbiBmYWlsZWQgIgorCQkgICAgICAgIiglZClcbiIsIGVycik7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKworCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHc4MzYyN2hmX3Npb19kYXRhKSwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IFBsYXRmb3JtIGRhdGEgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKKwl9CisJbWVtY3B5KHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhLCBzaW9fZGF0YSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB3ODM2MjdoZl9zaW9fZGF0YSkpOworCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwKKwkJICAgICAgIGVycik7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKworCXJldHVybiAwOworCitleGl0X2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2luaXQgc2Vuc29yc193ODM2MjdoZl9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBzaG9ydCBhZGRyZXNzOworCXN0cnVjdCB3ODM2MjdoZl9zaW9fZGF0YSBzaW9fZGF0YTsKKworCWlmICh3ODM2MjdoZl9maW5kKDB4MmUsICZhZGRyZXNzLCAmc2lvX2RhdGEpCisJICYmIHc4MzYyN2hmX2ZpbmQoMHg0ZSwgJmFkZHJlc3MsICZzaW9fZGF0YSkpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3ODM2MjdoZl9kcml2ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCS8qIFNldHMgZ2xvYmFsIHBkZXYgYXMgYSBzaWRlIGVmZmVjdCAqLworCWVyciA9IHc4MzYyN2hmX2RldmljZV9hZGQoYWRkcmVzcywgJnNpb19kYXRhKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZHJpdmVyOworCisJcmV0dXJuIDA7CisKK2V4aXRfZHJpdmVyOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3ODM2MjdoZl9kcml2ZXIpOworZXhpdDoKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2Vuc29yc193ODM2MjdoZl9leGl0KHZvaWQpCiB7Ci0JaTJjX2lzYV9kZWxfZHJpdmVyKCZ3ODM2MjdoZl9kcml2ZXIpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3ODM2MjdoZl9kcml2ZXIpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCmluZGV4IGE0N2RhM2UuLmY4NWI0OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCkBAIC0yLDggKzIsOSBAQAogICAgIHc4Mzc4MWQuYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCiAgICAgICAgICAgICAgICAgbW9uaXRvcmluZwogICAgIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDEgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sCi0gICAgUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwKLSAgICBhbmQgTWFyayBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIE1hcmsgU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KKyAgICBDb3B5cmlnaHQgKGMpIDIwMDcgICAgICAgICBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM4LDE1ICszOSwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWlzYS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tdmlkLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAibG03NS5oIgogCisvKiBJU0EgZGV2aWNlLCBpZiBmb3VuZCAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LAogCQkJCQkweDI2LCAweDI3LCAweDI4LCAweDI5LCAweDJhLCAweDJiLApAQCAtNzUsOCArODEsOCBAQAogI2RlZmluZSBXODM3ODFEX0FERFJfUkVHX09GRlNFVAkJNQogI2RlZmluZSBXODM3ODFEX0RBVEFfUkVHX09GRlNFVAkJNgogCi0vKiBUaGUgVzgzNzgxRCByZWdpc3RlcnMgKi8KLS8qIFRoZSBXODM3ODJEIHJlZ2lzdGVycyBmb3IgbnI9Nyw4IGFyZSBpbiBiYW5rIDUgKi8KKy8qIFRoZSBkZXZpY2UgcmVnaXN0ZXJzICovCisvKiBpbiBuciBmcm9tIDAgdG8gOCAqLwogI2RlZmluZSBXODM3ODFEX1JFR19JTl9NQVgobnIpCQkoKG5yIDwgNykgPyAoMHgyYiArIChucikgKiAyKSA6IFwKIAkJCQkJCSAgICAoMHg1NTQgKyAoKChucikgLSA3KSAqIDIpKSkKICNkZWZpbmUgVzgzNzgxRF9SRUdfSU5fTUlOKG5yKQkJKChuciA8IDcpID8gKDB4MmMgKyAobnIpICogMikgOiBcCkBAIC04NCwxMiArOTAsMTQgQEAKICNkZWZpbmUgVzgzNzgxRF9SRUdfSU4obnIpCQkoKG5yIDwgNykgPyAoMHgyMCArIChucikpIDogXAogCQkJCQkJICAgICgweDU1MCArIChucikgLSA3KSkKIAotI2RlZmluZSBXODM3ODFEX1JFR19GQU5fTUlOKG5yKQkJKDB4M2EgKyAobnIpKQotI2RlZmluZSBXODM3ODFEX1JFR19GQU4obnIpCQkoMHgyNyArIChucikpCisvKiBmYW4gbnIgZnJvbSAwIHRvIDIgKi8KKyNkZWZpbmUgVzgzNzgxRF9SRUdfRkFOX01JTihucikJCSgweDNiICsgKG5yKSkKKyNkZWZpbmUgVzgzNzgxRF9SRUdfRkFOKG5yKQkJKDB4MjggKyAobnIpKQogCiAjZGVmaW5lIFc4Mzc4MURfUkVHX0JBTksJCTB4NEUKICNkZWZpbmUgVzgzNzgxRF9SRUdfVEVNUDJfQ09ORklHCTB4MTUyCiAjZGVmaW5lIFc4Mzc4MURfUkVHX1RFTVAzX0NPTkZJRwkweDI1MgorLyogdGVtcCBuciBmcm9tIDEgdG8gMyAqLwogI2RlZmluZSBXODM3ODFEX1JFR19URU1QKG5yKQkJKChuciA9PSAzKSA/ICgweDAyNTApIDogXAogCQkJCQkoKG5yID09IDIpID8gKDB4MDE1MCkgOiBcCiAJCQkJCQkgICAgICgweDI3KSkpCkBAIC0xMjcsMTkgKzEzNSw5IEBACiAjZGVmaW5lIFc4Mzc4MURfUkVHX1ZCQVQJCTB4NUQKIAogLyogUFdNIDc4MkQgKDEtNCkgYW5kIDc4M1MgKDEtMikgb25seSAqLwotI2RlZmluZSBXODM3ODFEX1JFR19QV00xCQkweDVCCS8qIDc4MmQgYW5kIDc4M3MvNjI3aGYgZGF0YXNoZWV0cyBkaXNhZ3JlZSAqLwotCQkJCQkJLyogb24gd2hpY2ggaXMgd2hpY2g7ICovCi0jZGVmaW5lIFc4Mzc4MURfUkVHX1BXTTIJCTB4NUEJLyogV2UgZm9sbG93IHRoZSA3ODJkIGNvbnZlbnRpb24gaGVyZSwgKi8KLQkJCQkJCS8qIEhvd2V2ZXIgNzgyZCBpcyBwcm9iYWJseSB3cm9uZy4gKi8KLSNkZWZpbmUgVzgzNzgxRF9SRUdfUFdNMwkJMHg1RQotI2RlZmluZSBXODM3ODFEX1JFR19QV000CQkweDVGCitzdGF0aWMgY29uc3QgdTggVzgzNzgxRF9SRUdfUFdNW10gPSB7IDB4NUIsIDB4NUEsIDB4NUUsIDB4NUYgfTsKICNkZWZpbmUgVzgzNzgxRF9SRUdfUFdNQ0xLMTIJCTB4NUMKICNkZWZpbmUgVzgzNzgxRF9SRUdfUFdNQ0xLMzQJCTB4NDVDCi1zdGF0aWMgY29uc3QgdTggcmVncHdtW10gPSB7IFc4Mzc4MURfUkVHX1BXTTEsIFc4Mzc4MURfUkVHX1BXTTIsCi0JVzgzNzgxRF9SRUdfUFdNMywgVzgzNzgxRF9SRUdfUFdNNAotfTsKLQotI2RlZmluZSBXODM3ODFEX1JFR19QV00obnIpCQkocmVncHdtWyhucikgLSAxXSkKIAogI2RlZmluZSBXODM3ODFEX1JFR19JMkNfQUREUgkJMHg0OAogI2RlZmluZSBXODM3ODFEX1JFR19JMkNfU1VCQUREUgkJMHg0QQpAQCAtMTU5LDEyICsxNTcsOSBAQAogI2RlZmluZSBXODM3ODFEX1JFR19SVF9JRFgJCTB4NTAKICNkZWZpbmUgVzgzNzgxRF9SRUdfUlRfVkFMCQkweDUxCiAKLS8qIENvbnZlcnNpb25zLiBSb3VuZGluZyBhbmQgbGltaXQgY2hlY2tpbmcgaXMgb25seSBkb25lIG9uIHRoZSBUT19SRUcKLSAgIHZhcmlhbnRzLiBOb3RlIHRoYXQgeW91IHNob3VsZCBiZSBhIGJpdCBjYXJlZnVsIHdpdGggd2hpY2ggYXJndW1lbnRzCi0gICB0aGVzZSBtYWNyb3MgYXJlIGNhbGxlZDogYXJndW1lbnRzIG1heSBiZSBldmFsdWF0ZWQgbW9yZSB0aGFuIG9uY2UuCi0gICBGaXhpbmcgdGhpcyBpcyBqdXN0IG5vdCB3b3J0aCBpdC4gKi8KLSNkZWZpbmUgSU5fVE9fUkVHKHZhbCkJCQkoU0VOU09SU19MSU1JVCgoKCh2YWwpICogMTAgKyA4KS8xNiksMCwyNTUpKQotI2RlZmluZSBJTl9GUk9NX1JFRyh2YWwpCQkoKCh2YWwpICogMTYpIC8gMTApCisvKiBDb252ZXJzaW9ucyAqLworI2RlZmluZSBJTl9UT19SRUcodmFsKQkJCVNFTlNPUlNfTElNSVQoKCh2YWwpICsgOCkgLyAxNiwgMCwgMjU1KQorI2RlZmluZSBJTl9GUk9NX1JFRyh2YWwpCQkoKHZhbCkgKiAxNikKIAogc3RhdGljIGlubGluZSB1OAogRkFOX1RPX1JFRyhsb25nIHJwbSwgaW50IGRpdikKQEAgLTE3NSwyNCArMTcwLDI0IEBACiAJcmV0dXJuIFNFTlNPUlNfTElNSVQoKDEzNTAwMDAgKyBycG0gKiBkaXYgLyAyKSAvIChycG0gKiBkaXYpLCAxLCAyNTQpOwogfQogCi0jZGVmaW5lIEZBTl9GUk9NX1JFRyh2YWwsZGl2KQkJKCh2YWwpID09IDAgICA/IC0xIDogXAotCQkJCQkoKHZhbCkgPT0gMjU1ID8gMCA6IFwKLQkJCQkJCQkxMzUwMDAwIC8gKCh2YWwpICogKGRpdikpKSkKK3N0YXRpYyBpbmxpbmUgbG9uZworRkFOX0ZST01fUkVHKHU4IHZhbCwgaW50IGRpdikKK3sKKwlpZiAodmFsID09IDApCisJCXJldHVybiAtMTsKKwlpZiAodmFsID09IDI1NSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDEzNTAwMDAgLyAodmFsICogZGl2KTsKK30KIAotI2RlZmluZSBURU1QX1RPX1JFRyh2YWwpCQkoU0VOU09SU19MSU1JVCgoKHZhbCkgPCAwID8gKHZhbCkrMHgxMDAqMTAwMCBcCi0JCQkJCQk6ICh2YWwpKSAvIDEwMDAsIDAsIDB4ZmYpKQotI2RlZmluZSBURU1QX0ZST01fUkVHKHZhbCkJCSgoKHZhbCkgJiAweDgwID8gKHZhbCktMHgxMDAgOiAodmFsKSkgKiAxMDAwKQorI2RlZmluZSBURU1QX1RPX1JFRyh2YWwpCQlTRU5TT1JTX0xJTUlUKCh2YWwpIC8gMTAwMCwgLTEyNywgMTI4KQorI2RlZmluZSBURU1QX0ZST01fUkVHKHZhbCkJCSgodmFsKSAqIDEwMDApCiAKLSNkZWZpbmUgUFdNX0ZST01fUkVHKHZhbCkJCSh2YWwpCi0jZGVmaW5lIFBXTV9UT19SRUcodmFsKQkJCShTRU5TT1JTX0xJTUlUKCh2YWwpLDAsMjU1KSkKICNkZWZpbmUgQkVFUF9NQVNLX0ZST01fUkVHKHZhbCx0eXBlKQkoKHR5cGUpID09IGFzOTkxMjdmID8gXAogCQkJCQkgKHZhbCkgXiAweDdmZmYgOiAodmFsKSkKICNkZWZpbmUgQkVFUF9NQVNLX1RPX1JFRyh2YWwsdHlwZSkJKCh0eXBlKSA9PSBhczk5MTI3ZiA/IFwKIAkJCQkJICh+KHZhbCkpICYgMHg3ZmZmIDogKHZhbCkgJiAweGZmZmZmZikKIAotI2RlZmluZSBCRUVQX0VOQUJMRV9UT19SRUcodmFsKQkJKCh2YWwpID8gMSA6IDApCi0jZGVmaW5lIEJFRVBfRU5BQkxFX0ZST01fUkVHKHZhbCkJKCh2YWwpID8gMSA6IDApCi0KICNkZWZpbmUgRElWX0ZST01fUkVHKHZhbCkJCSgxIDw8ICh2YWwpKQogCiBzdGF0aWMgaW5saW5lIHU4CkBAIC0yMDcsNyArMjAyLDcgQEAKIAkJCWJyZWFrOwogCQl2YWwgPj49IDE7CiAJfQotCXJldHVybiAoKHU4KSBpKTsKKwlyZXR1cm4gaTsKIH0KIAogLyogVGhlcmUgYXJlIHNvbWUgY29tcGxpY2F0aW9ucyBpbiBhIG1vZHVsZSBsaWtlIHRoaXMuIEZpcnN0IG9mZiwgVzgzNzgxRCBjaGlwcwpAQCAtMjIxLDggKzIxNiw4IEBACiAgICBhIGJpdCAtIGV4Y2VwdCBpZiB0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lIFNNQnVzLiBHcm9hbi4gTm8gc29sdXRpb24KICAgIGZvciB0aGlzIHlldC4gKi8KIAotLyogRm9yIGVhY2ggcmVnaXN0ZXJlZCBjaGlwLCB3ZSBuZWVkIHRvIGtlZXAgc29tZSBkYXRhIGluIG1lbW9yeS4KLSAgIFRoZSBzdHJ1Y3R1cmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAqLworLyogRm9yIElTQSBjaGlwcywgd2UgYWJ1c2UgdGhlIGkyY19jbGllbnQgYWRkciBhbmQgbmFtZSBmaWVsZHMuIFdlIGFsc28gdXNlCisgICB0aGUgZHJpdmVyIGZpZWxkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBJMkMgYW5kIElTQSBjaGlwcy4gKi8KIHN0cnVjdCB3ODM3ODFkX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CkBAIC0yNDEsOSArMjM2LDkgQEAKIAl1OCBpbl9taW5bOV07CQkvKiBSZWdpc3RlciB2YWx1ZSAtIDggJiA5IGZvciA3ODJEIG9ubHkgKi8KIAl1OCBmYW5bM107CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwogCXU4IGZhbl9taW5bM107CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwotCXU4IHRlbXA7Ci0JdTggdGVtcF9tYXg7CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwotCXU4IHRlbXBfbWF4X2h5c3Q7CS8qIFJlZ2lzdGVyIHZhbHVlICovCisJczggdGVtcDsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCisJczggdGVtcF9tYXg7CQkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXM4IHRlbXBfbWF4X2h5c3Q7CS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTE2IHRlbXBfYWRkWzJdOwkvKiBSZWdpc3RlciB2YWx1ZSAqLwogCXUxNiB0ZW1wX21heF9hZGRbMl07CS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTE2IHRlbXBfbWF4X2h5c3RfYWRkWzJdOwkvKiBSZWdpc3RlciB2YWx1ZSAqLwpAQCAtMjUzLDcgKzI0OCw3IEBACiAJdTMyIGJlZXBfbWFzazsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwogCXU4IGJlZXBfZW5hYmxlOwkJLyogQm9vbGVhbiAqLwogCXU4IHB3bVs0XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCi0JdTggcHdtZW5hYmxlWzRdOwkvKiBCb29sZWFuICovCisJdTggcHdtMl9lbmFibGU7CQkvKiBCb29sZWFuICovCiAJdTE2IHNlbnNbM107CQkvKiA3ODJELzc4M1Mgb25seS4KIAkJCQkgICAxID0gcGVudGl1bSBkaW9kZTsgMiA9IDM5MDQgZGlvZGU7CiAJCQkJICAgMzAwMC01MDAwID0gdGhlcm1pc3RvciBiZXRhLgpAQCAtMjYzLDE0ICsyNTgsMTYgQEAKIH07CiAKIHN0YXRpYyBpbnQgdzgzNzgxZF9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCB3ODM3ODFkX2lzYV9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwogc3RhdGljIGludCB3ODM3ODFkX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCk7CiBzdGF0aWMgaW50IHc4Mzc4MWRfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAotc3RhdGljIGludCB3ODM3ODFkX3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZyk7Ci1zdGF0aWMgaW50IHc4Mzc4MWRfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZywgdTE2IHZhbHVlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IHc4Mzc4MWRfaXNhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIGludCBfX2RldmV4aXQgdzgzNzgxZF9pc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworCitzdGF0aWMgaW50IHc4Mzc4MWRfcmVhZF92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnKTsKK3N0YXRpYyBpbnQgdzgzNzgxZF93cml0ZV92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpOwogc3RhdGljIHN0cnVjdCB3ODM3ODFkX2RhdGEgKnc4Mzc4MWRfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgdzgzNzgxZF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyB2b2lkIHc4Mzc4MWRfaW5pdF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHc4Mzc4MWRfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CkBAIC0yODEsMzkgKzI3OCw0NCBAQAogCS5kZXRhY2hfY2xpZW50ID0gdzgzNzgxZF9kZXRhY2hfY2xpZW50LAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHc4Mzc4MWRfaXNhX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHc4Mzc4MWRfaXNhX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkJLm5hbWUgPSAidzgzNzgxZC1pc2EiLAorCQkubmFtZSA9ICJ3ODM3ODFkIiwKIAl9LAotCS5hdHRhY2hfYWRhcHRlciA9IHc4Mzc4MWRfaXNhX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gdzgzNzgxZF9kZXRhY2hfY2xpZW50LAorCS5wcm9iZSA9IHc4Mzc4MWRfaXNhX3Byb2JlLAorCS5yZW1vdmUgPSB3ODM3ODFkX2lzYV9yZW1vdmUsCiB9OwogCiAKIC8qIGZvbGxvd2luZyBhcmUgdGhlIHN5c2ZzIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBzaG93X2luX3JlZyhyZWcpIFwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyNyZWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNyZWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLCBcCisJCWNoYXIgKmJ1ZikgXAogeyBcCisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsgXAogCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSB3ODM3ODFkX3VwZGF0ZV9kZXZpY2UoZGV2KTsgXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwiJWxkXG4iLCAobG9uZylJTl9GUk9NX1JFRyhkYXRhLT5yZWdbbnJdICogMTApKTsgXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgXAorCQkgICAgICAgKGxvbmcpSU5fRlJPTV9SRUcoZGF0YS0+cmVnW2F0dHItPmluZGV4XSkpOyBcCiB9CiBzaG93X2luX3JlZyhpbik7CiBzaG93X2luX3JlZyhpbl9taW4pOwogc2hvd19pbl9yZWcoaW5fbWF4KTsKIAogI2RlZmluZSBzdG9yZV9pbl9yZWcoUkVHLCByZWcpIFwKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2luXyMjcmVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBpbnQgbnIpIFwKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2luXyMjcmVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIFwKKwkJKmRhLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAogeyBcCi0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsgXAotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAorCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7IFwKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7IFwKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsgXAogCXUzMiB2YWw7IFwKIAkgXAotCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApIC8gMTA7IFwKKwl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsgXAogCSBcCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJZGF0YS0+aW5fIyNyZWdbbnJdID0gSU5fVE9fUkVHKHZhbCk7IFwKLQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfSU5fIyNSRUcobnIpLCBkYXRhLT5pbl8jI3JlZ1tucl0pOyBcCisJdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19JTl8jI1JFRyhuciksIGRhdGEtPmluXyMjcmVnW25yXSk7IFwKIAkgXAogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJcmV0dXJuIGNvdW50OyBcCkBAIC0zMjEsMjkgKzMyMywxMyBAQAogc3RvcmVfaW5fcmVnKE1JTiwgbWluKTsKIHN0b3JlX2luX3JlZyhNQVgsIG1heCk7CiAKLSNkZWZpbmUgc3lzZnNfaW5fb2Zmc2V0KG9mZnNldCkgXAotc3RhdGljIHNzaXplX3QgXAotc2hvd19yZWdzX2luXyMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotICAgICAgICByZXR1cm4gc2hvd19pbihkZXYsIGJ1Ziwgb2Zmc2V0KTsgXAotfSBcCi1zdGF0aWMgREVWSUNFX0FUVFIoaW4jI29mZnNldCMjX2lucHV0LCBTX0lSVUdPLCBzaG93X3JlZ3NfaW5fIyNvZmZzZXQsIE5VTEwpOwotCi0jZGVmaW5lIHN5c2ZzX2luX3JlZ19vZmZzZXQocmVnLCBvZmZzZXQpIFwKLXN0YXRpYyBzc2l6ZV90IHNob3dfcmVnc19pbl8jI3JlZyMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X2luXyMjcmVnIChkZXYsIGJ1Ziwgb2Zmc2V0KTsgXAotfSBcCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9yZWdzX2luXyMjcmVnIyNvZmZzZXQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCi17IFwKLQlyZXR1cm4gc3RvcmVfaW5fIyNyZWcgKGRldiwgYnVmLCBjb3VudCwgb2Zmc2V0KTsgXAotfSBcCi1zdGF0aWMgREVWSUNFX0FUVFIoaW4jI29mZnNldCMjXyMjcmVnLCBTX0lSVUdPfCBTX0lXVVNSLCBzaG93X3JlZ3NfaW5fIyNyZWcjI29mZnNldCwgc3RvcmVfcmVnc19pbl8jI3JlZyMjb2Zmc2V0KTsKLQogI2RlZmluZSBzeXNmc19pbl9vZmZzZXRzKG9mZnNldCkgXAotc3lzZnNfaW5fb2Zmc2V0KG9mZnNldCk7IFwKLXN5c2ZzX2luX3JlZ19vZmZzZXQobWluLCBvZmZzZXQpOyBcCi1zeXNmc19pbl9yZWdfb2Zmc2V0KG1heCwgb2Zmc2V0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4jI29mZnNldCMjX2lucHV0LCBTX0lSVUdPLCBcCisJCXNob3dfaW4sIE5VTEwsIG9mZnNldCk7IFwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4jI29mZnNldCMjX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIFwKKwkJc2hvd19pbl9taW4sIHN0b3JlX2luX21pbiwgb2Zmc2V0KTsgXAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbiMjb2Zmc2V0IyNfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgXAorCQlzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCBvZmZzZXQpCiAKIHN5c2ZzX2luX29mZnNldHMoMCk7CiBzeXNmc19pbl9vZmZzZXRzKDEpOwpAQCAtMzU2LDYzICszNDIsNTYgQEAKIHN5c2ZzX2luX29mZnNldHMoOCk7CiAKICNkZWZpbmUgc2hvd19mYW5fcmVnKHJlZykgXAotc3RhdGljIHNzaXplX3Qgc2hvd18jI3JlZyAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBucikgXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI3JlZyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsIFwKKwkJY2hhciAqYnVmKSBcCiB7IFwKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEpOyBcCiAJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IHc4Mzc4MWRfdXBkYXRlX2RldmljZShkZXYpOyBcCiAJcmV0dXJuIHNwcmludGYoYnVmLCIlbGRcbiIsIFwKLQkJRkFOX0ZST01fUkVHKGRhdGEtPnJlZ1tuci0xXSwgKGxvbmcpRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnItMV0pKSk7IFwKKwkJRkFOX0ZST01fUkVHKGRhdGEtPnJlZ1thdHRyLT5pbmRleF0sIFwKKwkJCURJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4XSkpKTsgXAogfQogc2hvd19mYW5fcmVnKGZhbik7CiBzaG93X2Zhbl9yZWcoZmFuX21pbik7CiAKIHN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGludCBucikKK3N0b3JlX2Zhbl9taW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CisJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBuciA9IGF0dHItPmluZGV4OwogCXUzMiB2YWw7CiAKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5mYW5fbWluW25yIC0gMV0gPQotCSAgICBGQU5fVE9fUkVHKHZhbCwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnIgLSAxXSkpOwotCXc4Mzc4MWRfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19GQU5fTUlOKG5yKSwKLQkJCSAgICBkYXRhLT5mYW5fbWluW25yIC0gMV0pOworCWRhdGEtPmZhbl9taW5bbnJdID0KKwkgICAgRkFOX1RPX1JFRyh2YWwsIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpOworCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfRkFOX01JTihuciksCisJCQkgICAgZGF0YS0+ZmFuX21pbltucl0pOwogCiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCi0jZGVmaW5lIHN5c2ZzX2Zhbl9vZmZzZXQob2Zmc2V0KSBcCi1zdGF0aWMgc3NpemVfdCBzaG93X3JlZ3NfZmFuXyMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X2ZhbihkZXYsIGJ1Ziwgb2Zmc2V0KTsgXAotfSBcCi1zdGF0aWMgREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19pbnB1dCwgU19JUlVHTywgc2hvd19yZWdzX2Zhbl8jI29mZnNldCwgTlVMTCk7Ci0KLSNkZWZpbmUgc3lzZnNfZmFuX21pbl9vZmZzZXQob2Zmc2V0KSBcCi1zdGF0aWMgc3NpemVfdCBzaG93X3JlZ3NfZmFuX21pbiMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X2Zhbl9taW4oZGV2LCBidWYsIG9mZnNldCk7IFwKLX0gXAotc3RhdGljIHNzaXplX3Qgc3RvcmVfcmVnc19mYW5fbWluIyNvZmZzZXQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCi17IFwKLQlyZXR1cm4gc3RvcmVfZmFuX21pbihkZXYsIGJ1ZiwgY291bnQsIG9mZnNldCk7IFwKLX0gXAotc3RhdGljIERFVklDRV9BVFRSKGZhbiMjb2Zmc2V0IyNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19yZWdzX2Zhbl9taW4jI29mZnNldCwgc3RvcmVfcmVnc19mYW5fbWluIyNvZmZzZXQpOwotCi1zeXNmc19mYW5fb2Zmc2V0KDEpOwotc3lzZnNfZmFuX21pbl9vZmZzZXQoMSk7Ci1zeXNmc19mYW5fb2Zmc2V0KDIpOwotc3lzZnNfZmFuX21pbl9vZmZzZXQoMik7Ci1zeXNmc19mYW5fb2Zmc2V0KDMpOwotc3lzZnNfZmFuX21pbl9vZmZzZXQoMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQlzaG93X2Zhbl9taW4sIHN0b3JlX2Zhbl9taW4sIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4zX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCXNob3dfZmFuX21pbiwgc3RvcmVfZmFuX21pbiwgMik7CiAKICNkZWZpbmUgc2hvd190ZW1wX3JlZyhyZWcpIFwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyNyZWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNyZWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLCBcCisJCWNoYXIgKmJ1ZikgXAogeyBcCisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsgXAogCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSB3ODM3ODFkX3VwZGF0ZV9kZXZpY2UoZGV2KTsgXAorCWludCBuciA9IGF0dHItPmluZGV4OyBcCiAJaWYgKG5yID49IDIpIHsJLyogVEVNUDIgYW5kIFRFTVAzICovIFwKIAkJcmV0dXJuIHNwcmludGYoYnVmLCIlZFxuIiwgXAogCQkJTE03NV9URU1QX0ZST01fUkVHKGRhdGEtPnJlZyMjX2FkZFtuci0yXSkpOyBcCkBAIC00MjUsMTAgKzQwNCwxMiBAQAogc2hvd190ZW1wX3JlZyh0ZW1wX21heF9oeXN0KTsKIAogI2RlZmluZSBzdG9yZV90ZW1wX3JlZyhSRUcsIHJlZykgXAotc3RhdGljIHNzaXplX3Qgc3RvcmVfdGVtcF8jI3JlZyAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgaW50IG5yKSBcCitzdGF0aWMgc3NpemVfdCBzdG9yZV90ZW1wXyMjcmVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAogeyBcCi0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsgXAotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAorCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7IFwKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7IFwKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsgXAogCXMzMiB2YWw7IFwKIAkgXAogCXZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7IFwKQEAgLTQzNywxMSArNDE4LDExIEBACiAJIFwKIAlpZiAobnIgPj0gMikgewkvKiBURU1QMiBhbmQgVEVNUDMgKi8gXAogCQlkYXRhLT50ZW1wXyMjcmVnIyNfYWRkW25yLTJdID0gTE03NV9URU1QX1RPX1JFRyh2YWwpOyBcCi0JCXc4Mzc4MWRfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19URU1QXyMjUkVHKG5yKSwgXAorCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1RFTVBfIyNSRUcobnIpLCBcCiAJCQkJZGF0YS0+dGVtcF8jI3JlZyMjX2FkZFtuci0yXSk7IFwKIAl9IGVsc2UgewkvKiBURU1QMSAqLyBcCiAJCWRhdGEtPnRlbXBfIyNyZWcgPSBURU1QX1RPX1JFRyh2YWwpOyBcCi0JCXc4Mzc4MWRfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19URU1QXyMjUkVHKG5yKSwgXAorCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1RFTVBfIyNSRUcobnIpLCBcCiAJCQlkYXRhLT50ZW1wXyMjcmVnKTsgXAogCX0gXAogCSBcCkBAIC00NTEsMjkgKzQzMiwxMyBAQAogc3RvcmVfdGVtcF9yZWcoT1ZFUiwgbWF4KTsKIHN0b3JlX3RlbXBfcmVnKEhZU1QsIG1heF9oeXN0KTsKIAotI2RlZmluZSBzeXNmc190ZW1wX29mZnNldChvZmZzZXQpIFwKLXN0YXRpYyBzc2l6ZV90IFwKLXNob3dfcmVnc190ZW1wXyMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X3RlbXAoZGV2LCBidWYsIG9mZnNldCk7IFwKLX0gXAotc3RhdGljIERFVklDRV9BVFRSKHRlbXAjI29mZnNldCMjX2lucHV0LCBTX0lSVUdPLCBzaG93X3JlZ3NfdGVtcF8jI29mZnNldCwgTlVMTCk7Ci0KLSNkZWZpbmUgc3lzZnNfdGVtcF9yZWdfb2Zmc2V0KHJlZywgb2Zmc2V0KSBcCi1zdGF0aWMgc3NpemVfdCBzaG93X3JlZ3NfdGVtcF8jI3JlZyMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X3RlbXBfIyNyZWcgKGRldiwgYnVmLCBvZmZzZXQpOyBcCi19IFwKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3JlZ3NfdGVtcF8jI3JlZyMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAoteyBcCi0JcmV0dXJuIHN0b3JlX3RlbXBfIyNyZWcgKGRldiwgYnVmLCBjb3VudCwgb2Zmc2V0KTsgXAotfSBcCi1zdGF0aWMgREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfIyNyZWcsIFNfSVJVR098IFNfSVdVU1IsIHNob3dfcmVnc190ZW1wXyMjcmVnIyNvZmZzZXQsIHN0b3JlX3JlZ3NfdGVtcF8jI3JlZyMjb2Zmc2V0KTsKLQogI2RlZmluZSBzeXNmc190ZW1wX29mZnNldHMob2Zmc2V0KSBcCi1zeXNmc190ZW1wX29mZnNldChvZmZzZXQpOyBcCi1zeXNmc190ZW1wX3JlZ19vZmZzZXQobWF4LCBvZmZzZXQpOyBcCi1zeXNmc190ZW1wX3JlZ19vZmZzZXQobWF4X2h5c3QsIG9mZnNldCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAjI29mZnNldCMjX2lucHV0LCBTX0lSVUdPLCBcCisJCXNob3dfdGVtcCwgTlVMTCwgb2Zmc2V0KTsgXAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wIyNvZmZzZXQjI19tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBcCisJCXNob3dfdGVtcF9tYXgsIHN0b3JlX3RlbXBfbWF4LCBvZmZzZXQpOyBcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAjI29mZnNldCMjX21heF9oeXN0LCBTX0lSVUdPIHwgU19JV1VTUiwgXAorCQlzaG93X3RlbXBfbWF4X2h5c3QsIHN0b3JlX3RlbXBfbWF4X2h5c3QsIG9mZnNldCk7CiAKIHN5c2ZzX3RlbXBfb2Zmc2V0cygxKTsKIHN5c2ZzX3RlbXBfb2Zmc2V0cygyKTsKQEAgLTQ5OCw4ICs0NjMsNyBAQAogc3RhdGljIHNzaXplX3QKIHN0b3JlX3ZybV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXUzMiB2YWw7CiAKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKQEAgLTUyOCw2OCArNDkyLDY3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2JlZXBfZW5hYmxlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IHc4Mzc4MWRfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwKLQkJICAgICAgIChsb25nKUJFRVBfRU5BQkxFX0ZST01fUkVHKGRhdGEtPmJlZXBfZW5hYmxlKSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCAobG9uZylkYXRhLT5iZWVwX2VuYWJsZSk7CiB9CiAKLSNkZWZpbmUgQkVFUF9FTkFCTEUJCQkwCS8qIFN0b3JlIGJlZXBfZW5hYmxlICovCi0jZGVmaW5lIEJFRVBfTUFTSwkJCTEJLyogU3RvcmUgYmVlcF9tYXNrICovCi0KIHN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9iZWVwX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCSAgICAgICBpbnQgdXBkYXRlX21hc2spCitzdG9yZV9iZWVwX21hc2soc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdTMyIHZhbCwgdmFsMjsKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTMyIHZhbDsKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCi0JaWYgKHVwZGF0ZV9tYXNrID09IEJFRVBfTUFTSykgewkvKiBXZSBhcmUgc3RvcmluZyBiZWVwX21hc2sgKi8KLQkJZGF0YS0+YmVlcF9tYXNrID0gQkVFUF9NQVNLX1RPX1JFRyh2YWwsIGRhdGEtPnR5cGUpOwotCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMSwKLQkJCQkgICAgZGF0YS0+YmVlcF9tYXNrICYgMHhmZik7Ci0KLQkJaWYgKChkYXRhLT50eXBlICE9IHc4Mzc4MWQpICYmIChkYXRhLT50eXBlICE9IGFzOTkxMjdmKSkgewotCQkJdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzMsCi0JCQkJCSAgICAoKGRhdGEtPmJlZXBfbWFzaykgPj4gMTYpICYgMHhmZik7Ci0JCX0KLQotCQl2YWwyID0gKGRhdGEtPmJlZXBfbWFzayA+PiA4KSAmIDB4N2Y7Ci0JfSBlbHNlIHsJCS8qIFdlIGFyZSBzdG9yaW5nIGJlZXBfZW5hYmxlICovCi0JCXZhbDIgPSB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19CRUVQX0lOVFMyKSAmIDB4N2Y7Ci0JCWRhdGEtPmJlZXBfZW5hYmxlID0gQkVFUF9FTkFCTEVfVE9fUkVHKHZhbCk7CisJZGF0YS0+YmVlcF9tYXNrID0gQkVFUF9NQVNLX1RPX1JFRyh2YWwsIGRhdGEtPnR5cGUpOworCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMSwKKwkJCSAgICBkYXRhLT5iZWVwX21hc2sgJiAweGZmKTsKKwl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIsCisJCQkgICAgKChkYXRhLT5iZWVwX21hc2sgPj4gOCkgJiAweDdmKQorCQkJICAgIHwgZGF0YS0+YmVlcF9lbmFibGUgPDwgNyk7CisJaWYgKGRhdGEtPnR5cGUgIT0gdzgzNzgxZCAmJiBkYXRhLT50eXBlICE9IGFzOTkxMjdmKSB7CisJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMywKKwkJCQkgICAgKChkYXRhLT5iZWVwX21hc2spID4+IDE2KSAmIDB4ZmYpOwogCX0KLQotCXc4Mzc4MWRfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19CRUVQX0lOVFMyLAotCQkJICAgIHZhbDIgfCBkYXRhLT5iZWVwX2VuYWJsZSA8PCA3KTsKLQogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCiAJcmV0dXJuIGNvdW50OwogfQogCi0jZGVmaW5lIHN5c2ZzX2JlZXAoUkVHLCByZWcpIFwKLXN0YXRpYyBzc2l6ZV90IHNob3dfcmVnc19iZWVwXyMjcmVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X2JlZXBfIyNyZWcoZGV2LCBhdHRyLCBidWYpOyBcCi19IFwKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3JlZ3NfYmVlcF8jI3JlZyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKLXsgXAotCXJldHVybiBzdG9yZV9iZWVwX3JlZyhkZXYsIGJ1ZiwgY291bnQsIEJFRVBfIyNSRUcpOyBcCi19IFwKLXN0YXRpYyBERVZJQ0VfQVRUUihiZWVwXyMjcmVnLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19yZWdzX2JlZXBfIyNyZWcsIHN0b3JlX3JlZ3NfYmVlcF8jI3JlZyk7CitzdGF0aWMgc3NpemVfdAorc3RvcmVfYmVlcF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUzMiB2YWw7CiAKLXN5c2ZzX2JlZXAoRU5BQkxFLCBlbmFibGUpOwotc3lzZnNfYmVlcChNQVNLLCBtYXNrKTsKKwl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwlpZiAodmFsICE9IDAgJiYgdmFsICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPmJlZXBfZW5hYmxlID0gdmFsOworCXZhbCA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0lOVFMyKSAmIDB4N2Y7CisJdmFsIHw9IGRhdGEtPmJlZXBfZW5hYmxlIDw8IDc7CisJdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0lOVFMyLCB2YWwpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoYmVlcF9tYXNrLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJc2hvd19iZWVwX21hc2ssIHN0b3JlX2JlZXBfbWFzayk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmVlcF9lbmFibGUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQlzaG93X2JlZXBfZW5hYmxlLCBzdG9yZV9iZWVwX2VuYWJsZSk7CiAKIHN0YXRpYyBzc2l6ZV90Ci1zaG93X2Zhbl9kaXZfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCitzaG93X2Zhbl9kaXYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsIGNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEpOwogCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSB3ODM3ODFkX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsCi0JCSAgICAgICAobG9uZykgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnIgLSAxXSkpOworCQkgICAgICAgKGxvbmcpIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4XSkpOwogfQogCiAvKiBOb3RlOiB3ZSBzYXZlIGFuZCByZXN0b3JlIHRoZSBmYW4gbWluaW11bSBoZXJlLCBiZWNhdXNlIGl0cyB2YWx1ZSBpcwpAQCAtNTk3LDExICs1NjAsMTMgQEAKICAgIGxlYXN0IHN1cnByaXNlOyB0aGUgdXNlciBkb2Vzbid0IGV4cGVjdCB0aGUgZmFuIG1pbmltdW0gdG8gY2hhbmdlIGp1c3QKICAgIGJlY2F1c2UgdGhlIGRpdmlzb3IgY2hhbmdlZC4gKi8KIHN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9mYW5fZGl2X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBpbnQgbnIpCitzdG9yZV9mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEpOworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIG1pbjsKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAl1OCByZWc7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIApAQCAtNjEzLDc3ICs1NzgsNzIgQEAKIAogCWRhdGEtPmZhbl9kaXZbbnJdID0gRElWX1RPX1JFRyh2YWwsIGRhdGEtPnR5cGUpOwogCi0JcmVnID0gKHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIG5yPT0yID8gVzgzNzgxRF9SRUdfUElOIDogVzgzNzgxRF9SRUdfVklEX0ZBTkRJVikKKwlyZWcgPSAodzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIG5yPT0yID8gVzgzNzgxRF9SRUdfUElOIDogVzgzNzgxRF9SRUdfVklEX0ZBTkRJVikKIAkgICAgICAgJiAobnI9PTAgPyAweGNmIDogMHgzZikpCiAJICAgIHwgKChkYXRhLT5mYW5fZGl2W25yXSAmIDB4MDMpIDw8IChucj09MCA/IDQgOiA2KSk7Ci0JdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIG5yPT0yID8gVzgzNzgxRF9SRUdfUElOIDogVzgzNzgxRF9SRUdfVklEX0ZBTkRJViwgcmVnKTsKKwl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIG5yPT0yID8gVzgzNzgxRF9SRUdfUElOIDogVzgzNzgxRF9SRUdfVklEX0ZBTkRJViwgcmVnKTsKIAogCS8qIHc4Mzc4MWQgYW5kIGFzOTkxMjdmIGRvbid0IGhhdmUgZXh0ZW5kZWQgZGl2aXNvciBiaXRzICovCiAJaWYgKGRhdGEtPnR5cGUgIT0gdzgzNzgxZCAmJiBkYXRhLT50eXBlICE9IGFzOTkxMjdmKSB7Ci0JCXJlZyA9ICh3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19WQkFUKQorCQlyZWcgPSAodzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1ZCQVQpCiAJCSAgICAgICAmIH4oMSA8PCAoNSArIG5yKSkpCiAJCSAgICB8ICgoZGF0YS0+ZmFuX2Rpdltucl0gJiAweDA0KSA8PCAoMyArIG5yKSk7Ci0JCXc4Mzc4MWRfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19WQkFULCByZWcpOworCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1ZCQVQsIHJlZyk7CiAJfQogCiAJLyogUmVzdG9yZSBmYW5fbWluICovCiAJZGF0YS0+ZmFuX21pbltucl0gPSBGQU5fVE9fUkVHKG1pbiwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7Ci0JdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0ZBTl9NSU4obnIrMSksIGRhdGEtPmZhbl9taW5bbnJdKTsKKwl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0ZBTl9NSU4obnIpLCBkYXRhLT5mYW5fbWluW25yXSk7CiAKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKLSNkZWZpbmUgc3lzZnNfZmFuX2RpdihvZmZzZXQpIFwKLXN0YXRpYyBzc2l6ZV90IHNob3dfcmVnc19mYW5fZGl2XyMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X2Zhbl9kaXZfcmVnKGRldiwgYnVmLCBvZmZzZXQpOyBcCi19IFwKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3JlZ3NfZmFuX2Rpdl8jI29mZnNldCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKLXsgXAotCXJldHVybiBzdG9yZV9mYW5fZGl2X3JlZyhkZXYsIGJ1ZiwgY291bnQsIG9mZnNldCAtIDEpOyBcCi19IFwKLXN0YXRpYyBERVZJQ0VfQVRUUihmYW4jI29mZnNldCMjX2RpdiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcmVnc19mYW5fZGl2XyMjb2Zmc2V0LCBzdG9yZV9yZWdzX2Zhbl9kaXZfIyNvZmZzZXQpOwotCi1zeXNmc19mYW5fZGl2KDEpOwotc3lzZnNfZmFuX2RpdigyKTsKLXN5c2ZzX2Zhbl9kaXYoMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfZGl2LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9kaXYsIFNfSVJVR08gfCBTX0lXVVNSLAorCQlzaG93X2Zhbl9kaXYsIHN0b3JlX2Zhbl9kaXYsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4zX2RpdiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCXNob3dfZmFuX2Rpdiwgc3RvcmVfZmFuX2RpdiwgMik7CiAKIHN0YXRpYyBzc2l6ZV90Ci1zaG93X3B3bV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBucikKK3Nob3dfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLCBjaGFyICpidWYpCiB7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKIAlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gdzgzNzgxZF91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCAobG9uZykgUFdNX0ZST01fUkVHKGRhdGEtPnB3bVtuciAtIDFdKSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpZGF0YS0+cHdtW2F0dHItPmluZGV4XSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1zaG93X3B3bWVuYWJsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBucikKK3Nob3dfcHdtMl9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gdzgzNzgxZF91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCAobG9uZykgZGF0YS0+cHdtZW5hYmxlW25yIC0gMV0pOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoaW50KWRhdGEtPnB3bTJfZW5hYmxlKTsKIH0KIAogc3RhdGljIHNzaXplX3QKLXN0b3JlX3B3bV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgaW50IG5yKQorc3RvcmVfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLCBjb25zdCBjaGFyICpidWYsCisJCXNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEpOworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAl1MzIgdmFsOwogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+cHdtW25yIC0gMV0gPSBQV01fVE9fUkVHKHZhbCk7Ci0JdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1BXTShuciksIGRhdGEtPnB3bVtuciAtIDFdKTsKKwlkYXRhLT5wd21bbnJdID0gU0VOU09SU19MSU1JVCh2YWwsIDAsIDI1NSk7CisJdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19QV01bbnJdLCBkYXRhLT5wd21bbnJdKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9wd21lbmFibGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGludCBucikKK3N0b3JlX3B3bTJfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdTMyIHZhbCwgcmVnOwogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CkBAIC02OTMsMTUgKzY1MywxNSBAQAogCXN3aXRjaCAodmFsKSB7CiAJY2FzZSAwOgogCWNhc2UgMToKLQkJcmVnID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfUFdNQ0xLMTIpOwotCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfUFdNQ0xLMTIsCisJCXJlZyA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19QV01DTEsxMik7CisJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfUFdNQ0xLMTIsCiAJCQkJICAgIChyZWcgJiAweGY3KSB8ICh2YWwgPDwgMykpOwogCi0JCXJlZyA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JFRVBfQ09ORklHKTsKLQkJdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JFRVBfQ09ORklHLAorCQlyZWcgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9DT05GSUcpOworCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfQ09ORklHLAogCQkJCSAgICAocmVnICYgMHhlZikgfCAoIXZhbCA8PCA0KSk7CiAKLQkJZGF0YS0+cHdtZW5hYmxlW25yIC0gMV0gPSB2YWw7CisJCWRhdGEtPnB3bTJfZW5hYmxlID0gdmFsOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC03MTMsNTAgKzY3MywyOSBAQAogCXJldHVybiBjb3VudDsKIH0KIAotI2RlZmluZSBzeXNmc19wd20ob2Zmc2V0KSBcCi1zdGF0aWMgc3NpemVfdCBzaG93X3JlZ3NfcHdtXyMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X3B3bV9yZWcoZGV2LCBidWYsIG9mZnNldCk7IFwKLX0gXAotc3RhdGljIHNzaXplX3Qgc3RvcmVfcmVnc19wd21fIyNvZmZzZXQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKLXsgXAotCXJldHVybiBzdG9yZV9wd21fcmVnKGRldiwgYnVmLCBjb3VudCwgb2Zmc2V0KTsgXAotfSBcCi1zdGF0aWMgREVWSUNFX0FUVFIocHdtIyNvZmZzZXQsIFNfSVJVR08gfCBTX0lXVVNSLCBcCi0JCXNob3dfcmVnc19wd21fIyNvZmZzZXQsIHN0b3JlX3JlZ3NfcHdtXyMjb2Zmc2V0KTsKLQotI2RlZmluZSBzeXNmc19wd21lbmFibGUob2Zmc2V0KSBcCi1zdGF0aWMgc3NpemVfdCBzaG93X3JlZ3NfcHdtZW5hYmxlXyMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X3B3bWVuYWJsZV9yZWcoZGV2LCBidWYsIG9mZnNldCk7IFwKLX0gXAotc3RhdGljIHNzaXplX3Qgc3RvcmVfcmVnc19wd21lbmFibGVfIyNvZmZzZXQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKLXsgXAotCXJldHVybiBzdG9yZV9wd21lbmFibGVfcmVnKGRldiwgYnVmLCBjb3VudCwgb2Zmc2V0KTsgXAotfSBcCi1zdGF0aWMgREVWSUNFX0FUVFIocHdtIyNvZmZzZXQjI19lbmFibGUsIFNfSVJVR08gfCBTX0lXVVNSLCBcCi0JCXNob3dfcmVnc19wd21lbmFibGVfIyNvZmZzZXQsIHN0b3JlX3JlZ3NfcHdtZW5hYmxlXyMjb2Zmc2V0KTsKLQotc3lzZnNfcHdtKDEpOwotc3lzZnNfcHdtKDIpOwotc3lzZnNfcHdtZW5hYmxlKDIpOwkJLyogb25seSBQV00yIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkICovCi1zeXNmc19wd20oMyk7Ci1zeXNmc19wd20oNCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTEsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bSwgc3RvcmVfcHdtLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLCBzdG9yZV9wd20sIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd20sIHN0b3JlX3B3bSwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bSwgc3RvcmVfcHdtLCAzKTsKKy8qIG9ubHkgUFdNMiBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCAqLworc3RhdGljIERFVklDRV9BVFRSKHB3bTJfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJc2hvd19wd20yX2VuYWJsZSwgc3RvcmVfcHdtMl9lbmFibGUpOwogCiBzdGF0aWMgc3NpemVfdAotc2hvd19zZW5zb3JfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCitzaG93X3NlbnNvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwgY2hhciAqYnVmKQogeworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CiAJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IHc4Mzc4MWRfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgKGxvbmcpIGRhdGEtPnNlbnNbbnIgLSAxXSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpZGF0YS0+c2Vuc1thdHRyLT5pbmRleF0pOwogfQogCiBzdGF0aWMgc3NpemVfdAotc3RvcmVfc2Vuc29yX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBpbnQgbnIpCitzdG9yZV9zZW5zb3Ioc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CisJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBuciA9IGF0dHItPmluZGV4OwogCXUzMiB2YWwsIHRtcDsKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwpAQCAtNzY1LDI4ICs3MDQsMjggQEAKIAogCXN3aXRjaCAodmFsKSB7CiAJY2FzZSAxOgkJLyogUElJL0NlbGVyb24gZGlvZGUgKi8KLQkJdG1wID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfU0NGRzEpOwotCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfU0NGRzEsCi0JCQkJICAgIHRtcCB8IEJJVF9TQ0ZHMVtuciAtIDFdKTsKLQkJdG1wID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfU0NGRzIpOwotCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfU0NGRzIsCi0JCQkJICAgIHRtcCB8IEJJVF9TQ0ZHMltuciAtIDFdKTsKLQkJZGF0YS0+c2Vuc1tuciAtIDFdID0gdmFsOworCQl0bXAgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfU0NGRzEpOworCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1NDRkcxLAorCQkJCSAgICB0bXAgfCBCSVRfU0NGRzFbbnJdKTsKKwkJdG1wID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1NDRkcyKTsKKwkJdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19TQ0ZHMiwKKwkJCQkgICAgdG1wIHwgQklUX1NDRkcyW25yXSk7CisJCWRhdGEtPnNlbnNbbnJdID0gdmFsOwogCQlicmVhazsKIAljYXNlIDI6CQkvKiAzOTA0ICovCi0JCXRtcCA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcxKTsKLQkJdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcxLAotCQkJCSAgICB0bXAgfCBCSVRfU0NGRzFbbnIgLSAxXSk7Ci0JCXRtcCA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcyKTsKLQkJdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcyLAotCQkJCSAgICB0bXAgJiB+QklUX1NDRkcyW25yIC0gMV0pOwotCQlkYXRhLT5zZW5zW25yIC0gMV0gPSB2YWw7CisJCXRtcCA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19TQ0ZHMSk7CisJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfU0NGRzEsCisJCQkJICAgIHRtcCB8IEJJVF9TQ0ZHMVtucl0pOworCQl0bXAgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfU0NGRzIpOworCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1NDRkcyLAorCQkJCSAgICB0bXAgJiB+QklUX1NDRkcyW25yXSk7CisJCWRhdGEtPnNlbnNbbnJdID0gdmFsOwogCQlicmVhazsKIAljYXNlIFc4Mzc4MURfREVGQVVMVF9CRVRBOgkvKiB0aGVybWlzdG9yICovCi0JCXRtcCA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcxKTsKLQkJdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcxLAotCQkJCSAgICB0bXAgJiB+QklUX1NDRkcxW25yIC0gMV0pOwotCQlkYXRhLT5zZW5zW25yIC0gMV0gPSB2YWw7CisJCXRtcCA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19TQ0ZHMSk7CisJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfU0NGRzEsCisJCQkJICAgIHRtcCAmIH5CSVRfU0NGRzFbbnJdKTsKKwkJZGF0YS0+c2Vuc1tucl0gPSB2YWw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBzZW5zb3IgdHlwZSAlbGQ7IG11c3QgYmUgMSwgMiwgb3IgJWRcbiIsCkBAIC03OTgsMjAgKzczNywyMiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotI2RlZmluZSBzeXNmc19zZW5zb3Iob2Zmc2V0KSBcCi1zdGF0aWMgc3NpemVfdCBzaG93X3JlZ3Nfc2Vuc29yXyMjb2Zmc2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKLXsgXAotICAgIHJldHVybiBzaG93X3NlbnNvcl9yZWcoZGV2LCBidWYsIG9mZnNldCk7IFwKLX0gXAotc3RhdGljIHNzaXplX3Qgc3RvcmVfcmVnc19zZW5zb3JfIyNvZmZzZXQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCi17IFwKLSAgICByZXR1cm4gc3RvcmVfc2Vuc29yX3JlZyhkZXYsIGJ1ZiwgY291bnQsIG9mZnNldCk7IFwKLX0gXAotc3RhdGljIERFVklDRV9BVFRSKHRlbXAjI29mZnNldCMjX3R5cGUsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3JlZ3Nfc2Vuc29yXyMjb2Zmc2V0LCBzdG9yZV9yZWdzX3NlbnNvcl8jI29mZnNldCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX3R5cGUsIFNfSVJVR08gfCBTX0lXVVNSLAorCXNob3dfc2Vuc29yLCBzdG9yZV9zZW5zb3IsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl90eXBlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwlzaG93X3NlbnNvciwgc3RvcmVfc2Vuc29yLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfdHlwZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJc2hvd19zZW5zb3IsIHN0b3JlX3NlbnNvciwgMCk7CiAKLXN5c2ZzX3NlbnNvcigxKTsKLXN5c2ZzX3NlbnNvcigyKTsKLXN5c2ZzX3NlbnNvcigzKTsKKy8qIEkyQyBkZXZpY2VzIGdldCB0aGlzIG5hbWUgYXR0cmlidXRlIGF1dG9tYXRpY2FsbHksIGJ1dCBmb3IgSVNBIGRldmljZXMKKyAgIHdlIG11c3QgY3JlYXRlIGl0IGJ5IG91cnNlbHZlcy4gKi8KK3N0YXRpYyBzc2l6ZV90CitzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+Y2xpZW50Lm5hbWUpOworfQorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW46CiAgICAgICogdzgzNzgxZF9kcml2ZXIgaXMgaW5zZXJ0ZWQgKHdoZW4gdGhpcyBtb2R1bGUgaXMgbG9hZGVkKSwgZm9yIGVhY2gKQEAgLTgyNSwxMiArNzY2LDYgQEAKIAlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIHc4Mzc4MWRfZGV0ZWN0KTsKIH0KIAotc3RhdGljIGludAotdzgzNzgxZF9pc2FfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiB3ODM3ODFkX2RldGVjdChhZGFwdGVyLCBpc2FfYWRkcmVzcywgLTEpOwotfQotCiAvKiBBc3N1bWVzIHRoYXQgYWRhcHRlciBpcyBvZiBJMkMsIG5vdCBJU0EgdmFyaWV0eS4KICAqIE9USEVSV0lTRSBET04nVCBDQUxMIFRISVMKICAqLwpAQCAtODYyLDEyICs3OTcsMTIgQEAKIAkJCQlnb3RvIEVSUk9SX1NDXzE7CiAJCQl9CiAJCX0KLQkJdzgzNzgxZF93cml0ZV92YWx1ZShuZXdfY2xpZW50LCBXODM3ODFEX1JFR19JMkNfU1VCQUREUiwKKwkJdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19JMkNfU1VCQUREUiwKIAkJCQkoZm9yY2Vfc3ViY2xpZW50c1syXSAmIDB4MDcpIHwKIAkJCQkoKGZvcmNlX3N1YmNsaWVudHNbM10gJiAweDA3KSA8PCA0KSk7CiAJCWRhdGEtPmxtNzVbMF0tPmFkZHIgPSBmb3JjZV9zdWJjbGllbnRzWzJdOwogCX0gZWxzZSB7Ci0JCXZhbDEgPSB3ODM3ODFkX3JlYWRfdmFsdWUobmV3X2NsaWVudCwgVzgzNzgxRF9SRUdfSTJDX1NVQkFERFIpOworCQl2YWwxID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0kyQ19TVUJBRERSKTsKIAkJZGF0YS0+bG03NVswXS0+YWRkciA9IDB4NDggKyAodmFsMSAmIDB4MDcpOwogCX0KIApAQCAtOTM3LDIwICs4NzIsMjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0jZGVmaW5lIElOX1VOSVRfQVRUUlMoWCkJCQlcCi0JJmRldl9hdHRyX2luIyNYIyNfaW5wdXQuYXR0ciwJCVwKLQkmZGV2X2F0dHJfaW4jI1gjI19taW4uYXR0ciwJCVwKLQkmZGV2X2F0dHJfaW4jI1gjI19tYXguYXR0cgorI2RlZmluZSBJTl9VTklUX0FUVFJTKFgpCQkJCQlcCisJJnNlbnNvcl9kZXZfYXR0cl9pbiMjWCMjX2lucHV0LmRldl9hdHRyLmF0dHIsCQlcCisJJnNlbnNvcl9kZXZfYXR0cl9pbiMjWCMjX21pbi5kZXZfYXR0ci5hdHRyLAkJXAorCSZzZW5zb3JfZGV2X2F0dHJfaW4jI1gjI19tYXguZGV2X2F0dHIuYXR0cgogCi0jZGVmaW5lIEZBTl9VTklUX0FUVFJTKFgpCQkJXAotCSZkZXZfYXR0cl9mYW4jI1gjI19pbnB1dC5hdHRyLAkJXAotCSZkZXZfYXR0cl9mYW4jI1gjI19taW4uYXR0ciwJCVwKLQkmZGV2X2F0dHJfZmFuIyNYIyNfZGl2LmF0dHIKKyNkZWZpbmUgRkFOX1VOSVRfQVRUUlMoWCkJCQkJCVwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbiMjWCMjX2lucHV0LmRldl9hdHRyLmF0dHIsCQlcCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4jI1gjI19taW4uZGV2X2F0dHIuYXR0ciwJCVwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbiMjWCMjX2Rpdi5kZXZfYXR0ci5hdHRyCiAKLSNkZWZpbmUgVEVNUF9VTklUX0FUVFJTKFgpCQkJXAotCSZkZXZfYXR0cl90ZW1wIyNYIyNfaW5wdXQuYXR0ciwJCVwKLQkmZGV2X2F0dHJfdGVtcCMjWCMjX21heC5hdHRyLAkJXAotCSZkZXZfYXR0cl90ZW1wIyNYIyNfbWF4X2h5c3QuYXR0cgorI2RlZmluZSBURU1QX1VOSVRfQVRUUlMoWCkJCQkJCVwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAjI1gjI19pbnB1dC5kZXZfYXR0ci5hdHRyLAkJXAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcCMjWCMjX21heC5kZXZfYXR0ci5hdHRyLAkJXAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcCMjWCMjX21heF9oeXN0LmRldl9hdHRyLmF0dHIKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUqIHc4Mzc4MWRfYXR0cmlidXRlc1tdID0gewogCUlOX1VOSVRfQVRUUlMoMCksCkBAIC05ODAsOTEgKzkxNSwxMTUgQEAKIAlJTl9VTklUX0FUVFJTKDcpLAogCUlOX1VOSVRfQVRUUlMoOCksCiAJVEVNUF9VTklUX0FUVFJTKDMpLAotCSZkZXZfYXR0cl9wd20xLmF0dHIsCi0JJmRldl9hdHRyX3B3bTIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTEuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTIuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTQuZGV2X2F0dHIuYXR0ciwKIAkmZGV2X2F0dHJfcHdtMl9lbmFibGUuYXR0ciwKLQkmZGV2X2F0dHJfcHdtMy5hdHRyLAotCSZkZXZfYXR0cl9wd200LmF0dHIsCi0JJmRldl9hdHRyX3RlbXAxX3R5cGUuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDJfdHlwZS5hdHRyLAotCSZkZXZfYXR0cl90ZW1wM190eXBlLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV90eXBlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl90eXBlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM190eXBlLmRldl9hdHRyLmF0dHIsCiAJTlVMTAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHc4Mzc4MWRfZ3JvdXBfb3B0ID0gewogCS5hdHRycyA9IHc4Mzc4MWRfYXR0cmlidXRlc19vcHQsCiB9OwogCisvKiBObyBjbGVhbiB1cCBpcyBkb25lIG9uIGVycm9yLCBpdCdzIHVwIHRvIHRoZSBjYWxsZXIgKi8KK3N0YXRpYyBpbnQKK3c4Mzc4MWRfY3JlYXRlX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGtpbmQsIGludCBpc19pc2EpCit7CisJaW50IGVycjsKKworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3ODFkX2dyb3VwKSkpCisJCXJldHVybiBlcnI7CisKKwlpZiAoa2luZCAhPSB3ODM3ODNzKSB7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX2luMV9pbnB1dC5kZXZfYXR0cikpCisJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX2luMV9taW4uZGV2X2F0dHIpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNlbnNvcl9kZXZfYXR0cl9pbjFfbWF4LmRldl9hdHRyKSkpCisJCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoa2luZCAhPSBhczk5MTI3ZiAmJiBraW5kICE9IHc4Mzc4MWQgJiYga2luZCAhPSB3ODM3ODNzKSB7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX2luN19pbnB1dC5kZXZfYXR0cikpCisJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX2luN19taW4uZGV2X2F0dHIpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNlbnNvcl9kZXZfYXR0cl9pbjdfbWF4LmRldl9hdHRyKSkKKwkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfaW44X2lucHV0LmRldl9hdHRyKSkKKwkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfaW44X21pbi5kZXZfYXR0cikpCisJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX2luOF9tYXguZGV2X2F0dHIpKSkKKwkJCXJldHVybiBlcnI7CisJfQorCWlmIChraW5kICE9IHc4Mzc4M3MpIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXguZGV2X2F0dHIpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXhfaHlzdC5kZXZfYXR0cikpKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoa2luZCAhPSB3ODM3ODFkICYmIGtpbmQgIT0gYXM5OTEyN2YpIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0cikpCisJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX3B3bTIuZGV2X2F0dHIpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wd20yX2VuYWJsZSkpKQorCQkJcmV0dXJuIGVycjsKKwl9CisJaWYgKGtpbmQgPT0gdzgzNzgyZCAmJiAhaXNfaXNhKSB7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNlbnNvcl9kZXZfYXR0cl9wd200LmRldl9hdHRyKSkpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChraW5kICE9IGFzOTkxMjdmICYmIGtpbmQgIT0gdzgzNzgxZCkgeworCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV90eXBlLmRldl9hdHRyKSkKKwkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfdHlwZS5kZXZfYXR0cikpKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKGtpbmQgIT0gdzgzNzgzcykgeworCQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX3R5cGUuZGV2X2F0dHIpKSkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKGlzX2lzYSkgeworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogdzgzNzgxZF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCiB7Ci0JaW50IGkgPSAwLCB2YWwxID0gMCwgdmFsMjsKKwlpbnQgdmFsMSA9IDAsIHZhbDI7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YTsKIAlpbnQgZXJyOwogCWNvbnN0IGNoYXIgKmNsaWVudF9uYW1lID0gIiI7Ci0JaW50IGlzX2lzYSA9IGkyY19pc19pc2FfYWRhcHRlcihhZGFwdGVyKTsKIAllbnVtIHZlbmRvciB7IHdpbmJvbmQsIGFzdXMgfSB2ZW5kaWQ7CiAKLQlpZiAoIWlzX2lzYQotCSAgICAmJiAhaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgeworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIEVSUk9SMDsKLQl9Ci0KLQkvKiBQcmV2ZW50IHVzZXJzIGZyb20gZm9yY2luZyBhIGtpbmQgZm9yIGEgYnVzIGl0IGlzbid0IHN1cHBvc2VkCi0JICAgdG8gcG9zc2libHkgYmUgb24gKi8KLQlpZiAoaXNfaXNhICYmIChraW5kID09IGFzOTkxMjdmIHx8IGtpbmQgPT0gdzgzNzgzcykpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LAotCQkJIkNhbm5vdCBmb3JjZSBJMkMtb25seSBjaGlwIGZvciBJU0EgYWRkcmVzcyAweCUwMnguXG4iLAotCQkJYWRkcmVzcyk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gRVJST1IwOwotCX0KLQkKLQlpZiAoaXNfaXNhKQotCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MsIFc4Mzc4MURfRVhURU5ULAotCQkJCSAgICB3ODM3ODFkX2lzYV9kcml2ZXIuZHJpdmVyLm5hbWUpKSB7Ci0JCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJSZXF1ZXN0IG9mIHJlZ2lvbiAiCi0JCQkJIjB4JXgtMHgleCBmb3IgdzgzNzgxZCBmYWlsZWRcbiIsIGFkZHJlc3MsCi0JCQkJYWRkcmVzcyArIFc4Mzc4MURfRVhURU5UIC0gMSk7Ci0JCQllcnIgPSAtRUJVU1k7Ci0JCQlnb3RvIEVSUk9SMDsKLQkJfQotCi0JLyogUHJvYmUgd2hldGhlciB0aGVyZSBpcyBhbnl0aGluZyBhdmFpbGFibGUgb24gdGhpcyBhZGRyZXNzLiBBbHJlYWR5Ci0JICAgZG9uZSBmb3IgU01CdXMgY2xpZW50cyAqLwotCWlmIChraW5kIDwgMCkgewotCQlpZiAoaXNfaXNhKSB7Ci0KLSNkZWZpbmUgUkVBTExZX1NMT1dfSU8KLQkJCS8qIFdlIG5lZWQgdGhlIHRpbWVvdXRzIGZvciBhdCBsZWFzdCBzb21lIExNNzgtbGlrZQotCQkJICAgY2hpcHMuIEJ1dCBvbmx5IGlmIHdlIHJlYWQgJ3VuZGVmaW5lZCcgcmVnaXN0ZXJzLiAqLwotCQkJaSA9IGluYl9wKGFkZHJlc3MgKyAxKTsKLQkJCWlmIChpbmJfcChhZGRyZXNzICsgMikgIT0gaQotCQkJIHx8IGluYl9wKGFkZHJlc3MgKyAzKSAhPSBpCi0JCQkgfHwgaW5iX3AoYWRkcmVzcyArIDcpICE9IGkpIHsKLQkJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJEZXRlY3Rpb24gb2YgdzgzNzgxZCAiCi0JCQkJCSJjaGlwIGZhaWxlZCBhdCBzdGVwIDFcbiIpOwotCQkJCWVyciA9IC1FTk9ERVY7Ci0JCQkJZ290byBFUlJPUjE7Ci0JCQl9Ci0jdW5kZWYgUkVBTExZX1NMT1dfSU8KLQotCQkJLyogTGV0J3MganVzdCBob3BlIG5vdGhpbmcgYnJlYWtzIGhlcmUgKi8KLQkJCWkgPSBpbmJfcChhZGRyZXNzICsgNSkgJiAweDdmOwotCQkJb3V0Yl9wKH5pICYgMHg3ZiwgYWRkcmVzcyArIDUpOwotCQkJdmFsMiA9IGluYl9wKGFkZHJlc3MgKyA1KSAmIDB4N2Y7Ci0JCQlpZiAodmFsMiAhPSAofmkgJiAweDdmKSkgewotCQkJCW91dGJfcChpLCBhZGRyZXNzICsgNSk7Ci0JCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0aW9uIG9mIHc4Mzc4MWQgIgotCQkJCQkiY2hpcCBmYWlsZWQgYXQgc3RlcCAyICgweCV4ICE9ICIKLQkJCQkJIjB4JXggYXQgMHgleClcbiIsIHZhbDIsIH5pICYgMHg3ZiwKLQkJCQkJYWRkcmVzcyArIDUpOwotCQkJCWVyciA9IC1FTk9ERVY7Ci0JCQkJZ290byBFUlJPUjE7Ci0JCQl9Ci0JCX0KKwkJZ290byBFUlJPUjE7CiAJfQogCiAJLyogT0suIEZvciBub3csIHdlIHByZXN1bWUgd2UgaGF2ZSBhIHZhbGlkIGNsaWVudC4gV2Ugbm93IGNyZWF0ZSB0aGUKQEAgLTEwODEsOCArMTA0MCw3IEBACiAJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKIAltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKIAljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gaXNfaXNhID8gJnc4Mzc4MWRfaXNhX2RyaXZlciA6ICZ3ODM3ODFkX2RyaXZlcjsKLQljbGllbnQtPmZsYWdzID0gMDsKKwljbGllbnQtPmRyaXZlciA9ICZ3ODM3ODFkX2RyaXZlcjsKIAlkZXYgPSAmY2xpZW50LT5kZXY7CiAKIAkvKiBOb3csIHdlIGRvIHRoZSByZW1haW5pbmcgZGV0ZWN0aW9uLiAqLwpAQCAtMTA5MiwxNCArMTA1MCwxNCBAQAogCSAgIGZvcmNlXyo9Li4uIHBhcmFtZXRlciwgYW5kIHRoZSBXaW5ib25kIHdpbGwgYmUgcmVzZXQgdG8gdGhlIHJpZ2h0CiAJICAgYmFuay4gKi8KIAlpZiAoa2luZCA8IDApIHsKLQkJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0NPTkZJRykgJiAweDgwKSB7CisJCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQ09ORklHKSAmIDB4ODApIHsKIAkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkRldGVjdGlvbiBvZiB3ODM3ODFkIGNoaXAgIgogCQkJCSJmYWlsZWQgYXQgc3RlcCAzXG4iKTsKIAkJCWVyciA9IC1FTk9ERVY7CiAJCQlnb3RvIEVSUk9SMjsKIAkJfQotCQl2YWwxID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSyk7Ci0JCXZhbDIgPSB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19DSElQTUFOKTsKKwkJdmFsMSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CQU5LKTsKKwkJdmFsMiA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19DSElQTUFOKTsKIAkJLyogQ2hlY2sgZm9yIFdpbmJvbmQgb3IgQXN1cyBJRCBpZiBpbiBiYW5rIDAgKi8KIAkJaWYgKCghKHZhbDEgJiAweDA3KSkgJiYKIAkJICAgICgoKCEodmFsMSAmIDB4ODApKSAmJiAodmFsMiAhPSAweGEzKSAmJiAodmFsMiAhPSAweGMzKSkKQEAgLTExMTEsMTAgKzEwNjksMTAgQEAKIAkJfQogCQkvKiBJZiBXaW5ib25kIFNNQnVzLCBjaGVjayBhZGRyZXNzIGF0IDB4NDguCiAJCSAgIEFzdXMgZG9lc24ndCBzdXBwb3J0LCBleGNlcHQgZm9yIGFzOTkxMjdmIHJldi4yICovCi0JCWlmICgoIWlzX2lzYSkgJiYgKCgoISh2YWwxICYgMHg4MCkpICYmICh2YWwyID09IDB4YTMpKSB8fAotCQkJCSAgKCh2YWwxICYgMHg4MCkgJiYgKHZhbDIgPT0gMHg1YykpKSkgeworCQlpZiAoKCEodmFsMSAmIDB4ODApICYmICh2YWwyID09IDB4YTMpKSB8fAorCQkgICAgKCh2YWwxICYgMHg4MCkgJiYgKHZhbDIgPT0gMHg1YykpKSB7CiAJCQlpZiAodzgzNzgxZF9yZWFkX3ZhbHVlCi0JCQkgICAgKGNsaWVudCwgVzgzNzgxRF9SRUdfSTJDX0FERFIpICE9IGFkZHJlc3MpIHsKKwkJCSAgICAoZGF0YSwgVzgzNzgxRF9SRUdfSTJDX0FERFIpICE9IGFkZHJlc3MpIHsKIAkJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJEZXRlY3Rpb24gb2YgdzgzNzgxZCAiCiAJCQkJCSJjaGlwIGZhaWxlZCBhdCBzdGVwIDVcbiIpOwogCQkJCWVyciA9IC1FTk9ERVY7CkBAIC0xMTI1LDE0ICsxMDgzLDE0IEBACiAKIAkvKiBXZSBoYXZlIGVpdGhlciBoYWQgYSBmb3JjZSBwYXJhbWV0ZXIsIG9yIHdlIGhhdmUgYWxyZWFkeSBkZXRlY3RlZCB0aGUKIAkgICBXaW5ib25kLiBQdXQgaXQgbm93IGludG8gYmFuayAwIGFuZCBWZW5kb3IgSUQgSGlnaCBCeXRlICovCi0JdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssCi0JCQkgICAgKHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkspCisJdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CQU5LLAorCQkJICAgICh3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkFOSykKIAkJCSAgICAgJiAweDc4KSB8IDB4ODApOwogCiAJLyogRGV0ZXJtaW5lIHRoZSBjaGlwIHR5cGUuICovCiAJaWYgKGtpbmQgPD0gMCkgewogCQkvKiBnZXQgdmVuZG9yIElEICovCi0JCXZhbDIgPSB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19DSElQTUFOKTsKKwkJdmFsMiA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19DSElQTUFOKTsKIAkJaWYgKHZhbDIgPT0gMHg1YykKIAkJCXZlbmRpZCA9IHdpbmJvbmQ7CiAJCWVsc2UgaWYgKHZhbDIgPT0gMHgxMikKQEAgLTExNDQsMTcgKzExMDIsMTYgQEAKIAkJCWdvdG8gRVJST1IyOwogCQl9CiAKLQkJdmFsMSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1dDSElQSUQpOworCQl2YWwxID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1dDSElQSUQpOwogCQlpZiAoKHZhbDEgPT0gMHgxMCB8fCB2YWwxID09IDB4MTEpICYmIHZlbmRpZCA9PSB3aW5ib25kKQogCQkJa2luZCA9IHc4Mzc4MWQ7CiAJCWVsc2UgaWYgKHZhbDEgPT0gMHgzMCAmJiB2ZW5kaWQgPT0gd2luYm9uZCkKIAkJCWtpbmQgPSB3ODM3ODJkOwotCQllbHNlIGlmICh2YWwxID09IDB4NDAgJiYgdmVuZGlkID09IHdpbmJvbmQgJiYgIWlzX2lzYQotCQkJCSYmIGFkZHJlc3MgPT0gMHgyZCkKKwkJZWxzZSBpZiAodmFsMSA9PSAweDQwICYmIHZlbmRpZCA9PSB3aW5ib25kICYmIGFkZHJlc3MgPT0gMHgyZCkKIAkJCWtpbmQgPSB3ODM3ODNzOwogCQllbHNlIGlmICh2YWwxID09IDB4MjEgJiYgdmVuZGlkID09IHdpbmJvbmQpCiAJCQlraW5kID0gdzgzNjI3aGY7Ci0JCWVsc2UgaWYgKHZhbDEgPT0gMHgzMSAmJiAhaXNfaXNhICYmIGFkZHJlc3MgPj0gMHgyOCkKKwkJZWxzZSBpZiAodmFsMSA9PSAweDMxICYmIGFkZHJlc3MgPj0gMHgyOCkKIAkJCWtpbmQgPSBhczk5MTI3ZjsKIAkJZWxzZSB7CiAJCQlpZiAoa2luZCA9PSAwKQpAQCAtMTE4Miw4NiArMTEzOSwyMyBAQAogCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBjbGllbnRfbmFtZSwgSTJDX05BTUVfU0laRSk7CiAJZGF0YS0+dHlwZSA9IGtpbmQ7CiAKLQlkYXRhLT52YWxpZCA9IDA7Ci0JbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwotCiAJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCWdvdG8gRVJST1IyOwogCiAJLyogYXR0YWNoIHNlY29uZGFyeSBpMmMgbG03NS1saWtlIGNsaWVudHMgKi8KLQlpZiAoIWlzX2lzYSkgewotCQlpZiAoKGVyciA9IHc4Mzc4MWRfZGV0ZWN0X3N1YmNsaWVudHMoYWRhcHRlciwgYWRkcmVzcywKLQkJCQlraW5kLCBjbGllbnQpKSkKLQkJCWdvdG8gRVJST1IzOwotCX0gZWxzZSB7Ci0JCWRhdGEtPmxtNzVbMF0gPSBOVUxMOwotCQlkYXRhLT5sbTc1WzFdID0gTlVMTDsKLQl9CisJaWYgKChlcnIgPSB3ODM3ODFkX2RldGVjdF9zdWJjbGllbnRzKGFkYXB0ZXIsIGFkZHJlc3MsCisJCQlraW5kLCBjbGllbnQpKSkKKwkJZ290byBFUlJPUjM7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjaGlwICovCi0JdzgzNzgxZF9pbml0X2NsaWVudChjbGllbnQpOwotCi0JLyogQSBmZXcgdmFycyBuZWVkIHRvIGJlIGZpbGxlZCB1cG9uIHN0YXJ0dXAgKi8KLQlmb3IgKGkgPSAxOyBpIDw9IDM7IGkrKykgewotCQlkYXRhLT5mYW5fbWluW2kgLSAxXSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsCi0JCQkJCVc4Mzc4MURfUkVHX0ZBTl9NSU4oaSkpOwotCX0KLQlpZiAoa2luZCAhPSB3ODM3ODFkICYmIGtpbmQgIT0gYXM5OTEyN2YpCi0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQlkYXRhLT5wd21lbmFibGVbaV0gPSAxOworCXc4Mzc4MWRfaW5pdF9kZXZpY2UoZGV2KTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnc4Mzc4MWRfZ3JvdXApKSkKKwllcnIgPSB3ODM3ODFkX2NyZWF0ZV9maWxlcyhkZXYsIGtpbmQsIDApOworCWlmIChlcnIpCiAJCWdvdG8gRVJST1I0OwogCi0JaWYgKGtpbmQgIT0gdzgzNzgzcykgewotCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjFfaW5wdXQpKQotCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjFfbWluKSkKLQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW4xX21heCkpKQotCQkJZ290byBFUlJPUjQ7Ci0JfQotCWlmIChraW5kICE9IGFzOTkxMjdmICYmIGtpbmQgIT0gdzgzNzgxZCAmJiBraW5kICE9IHc4Mzc4M3MpIHsKLQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW43X2lucHV0KSkKLQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW43X21pbikpCi0JCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2luN19tYXgpKQotCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjhfaW5wdXQpKQotCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjhfbWluKSkKLQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW44X21heCkpKQotCQkJZ290byBFUlJPUjQ7Ci0JfQotCWlmIChraW5kICE9IHc4Mzc4M3MpIHsKLQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdGVtcDNfaW5wdXQpKQotCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90ZW1wM19tYXgpKQotCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkJCQkgJmRldl9hdHRyX3RlbXAzX21heF9oeXN0KSkpCi0JCQlnb3RvIEVSUk9SNDsKLQl9Ci0KLQlpZiAoa2luZCAhPSB3ODM3ODFkICYmIGtpbmQgIT0gYXM5OTEyN2YpIHsKLQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHdtMSkpCi0JCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3B3bTIpKQotCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wd20yX2VuYWJsZSkpKQotCQkJZ290byBFUlJPUjQ7Ci0JfQotCWlmIChraW5kID09IHc4Mzc4MmQgJiYgIWlzX2lzYSkgewotCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wd20zKSkKLQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHdtNCkpKQotCQkJZ290byBFUlJPUjQ7Ci0JfQotCi0JaWYgKGtpbmQgIT0gYXM5OTEyN2YgJiYga2luZCAhPSB3ODM3ODFkKSB7Ci0JCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RlbXAxX3R5cGUpKQotCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkJCQkgJmRldl9hdHRyX3RlbXAyX3R5cGUpKSkKLQkJCWdvdG8gRVJST1I0OwotCQlpZiAoa2luZCAhPSB3ODM3ODNzKSB7Ci0JCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkJCQkgICAgICAmZGV2X2F0dHJfdGVtcDNfdHlwZSkpKQotCQkJCWdvdG8gRVJST1I0OwotCQl9Ci0JfQotCiAJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKGRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKQEAgLTEyODcsOSArMTE4MSw2IEBACiBFUlJPUjI6CiAJa2ZyZWUoZGF0YSk7CiBFUlJPUjE6Ci0JaWYgKGlzX2lzYSkKLQkJcmVsZWFzZV9yZWdpb24oYWRkcmVzcywgVzgzNzgxRF9FWFRFTlQpOwotRVJST1IwOgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEzMDUsOCArMTE5Niw2IEBACiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXApOwogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7CiAJfQotCWlmIChpMmNfaXNfaXNhX2NsaWVudChjbGllbnQpKQotCQlyZWxlYXNlX3JlZ2lvbihjbGllbnQtPmFkZHIsIFc4Mzc4MURfRVhURU5UKTsKIAogCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCXJldHVybiBlcnI7CkBAIC0xMzIyLDYgKzEyMTEsODggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX2RldmluaXQKK3c4Mzc4MWRfaXNhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGVyciwgcmVnOworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIFJlc2VydmUgdGhlIElTQSByZWdpb24gKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihyZXMtPnN0YXJ0LCBXODM3ODFEX0VYVEVOVCwgInc4Mzc4MWQiKSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHc4Mzc4MWRfZGF0YSksIEdGUF9LRVJORUwpKSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXRfcmVsZWFzZV9yZWdpb247CisJfQorCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCWRhdGEtPmNsaWVudC5hZGRyID0gcmVzLT5zdGFydDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoJmRhdGEtPmNsaWVudCwgZGF0YSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CisKKwlyZWcgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfV0NISVBJRCk7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIDB4MjE6CisJCWRhdGEtPnR5cGUgPSB3ODM2MjdoZjsKKwkJbmFtZSA9ICJ3ODM2MjdoZiI7CisJCWJyZWFrOworCWNhc2UgMHgzMDoKKwkJZGF0YS0+dHlwZSA9IHc4Mzc4MmQ7CisJCW5hbWUgPSAidzgzNzgyZCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRhdGEtPnR5cGUgPSB3ODM3ODFkOworCQluYW1lID0gInc4Mzc4MWQiOworCX0KKwlzdHJsY3B5KGRhdGEtPmNsaWVudC5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKKworCS8qIEluaXRpYWxpemUgdGhlIFc4Mzc4MUQgY2hpcCAqLworCXc4Mzc4MWRfaW5pdF9kZXZpY2UoJnBkZXYtPmRldik7CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWVyciA9IHc4Mzc4MWRfY3JlYXRlX2ZpbGVzKCZwZGV2LT5kZXYsIGRhdGEtPnR5cGUsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisKKwlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKwl9CisKKwlyZXR1cm4gMDsKKworIGV4aXRfcmVtb3ZlX2ZpbGVzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cF9vcHQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJa2ZyZWUoZGF0YSk7CisgZXhpdF9yZWxlYXNlX3JlZ2lvbjoKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0LCBXODM3ODFEX0VYVEVOVCk7CisgZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdAordzgzNzgxZF9pc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXBfb3B0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOworCXJlbGVhc2VfcmVnaW9uKGRhdGEtPmNsaWVudC5hZGRyLCBXODM3ODFEX0VYVEVOVCk7CisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogVGhlIFNNQnVzIGxvY2tzIGl0c2VsZiwgdXN1YWxseSwgYnV0IG5vdGhpbmcgbWF5IGFjY2VzcyB0aGUgV2luYm9uZCBiZXR3ZWVuCiAgICBiYW5rIHN3aXRjaGVzLiBJU0EgYWNjZXNzIG11c3QgYWx3YXlzIGJlIGxvY2tlZCBleHBsaWNpdGx5ISAKICAgIFdlIGlnbm9yZSB0aGUgVzgzNzgxRCBCVVNZIGZsYWcgYXQgdGhpcyBtb21lbnQgLSBpdCBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrcywKQEAgLTEzMjksMTQgKzEzMDAsMTQgQEAKICAgIFRoZXJlIGFyZSBzb21lIHVnbHkgdHlwZWNhc3RzIGhlcmUsIGJ1dCB0aGUgZ29vZCBuZXdzIGlzIC0gdGhleSBzaG91bGQKICAgIG5vd2hlcmUgZWxzZSBiZSBuZWNlc3NhcnkhICovCiBzdGF0aWMgaW50Ci13ODM3ODFkX3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZykKK3c4Mzc4MWRfcmVhZF92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnKQogewotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKIAlpbnQgcmVzLCB3b3JkX3NpemVkLCBiYW5rOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbDsKIAogCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCWlmIChpMmNfaXNfaXNhX2NsaWVudChjbGllbnQpKSB7CisJaWYgKCFjbGllbnQtPmRyaXZlcikgeyAvKiBJU0EgZGV2aWNlICovCiAJCXdvcmRfc2l6ZWQgPSAoKChyZWcgJiAweGZmMDApID09IDB4MTAwKQogCQkJICAgICAgfHwgKChyZWcgJiAweGZmMDApID09IDB4MjAwKSkKIAkJICAgICYmICgoKHJlZyAmIDB4MDBmZikgPT0gMHg1MCkKQEAgLTEzOTgsMTQgKzEzNjksMTQgQEAKIH0KIAogc3RhdGljIGludAotdzgzNzgxZF93cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgcmVnLCB1MTYgdmFsdWUpCit3ODM3ODFkX3dyaXRlX3ZhbHVlKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcsIHUxNiB2YWx1ZSkKIHsKLQlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CiAJaW50IHdvcmRfc2l6ZWQsIGJhbms7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JaWYgKGkyY19pc19pc2FfY2xpZW50KGNsaWVudCkpIHsKKwlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7IC8qIElTQSBkZXZpY2UgKi8KIAkJd29yZF9zaXplZCA9ICgoKHJlZyAmIDB4ZmYwMCkgPT0gMHgxMDApCiAJCQkgICAgICB8fCAoKHJlZyAmIDB4ZmYwMCkgPT0gMHgyMDApKQogCQkgICAgJiYgKCgocmVnICYgMHgwMGZmKSA9PSAweDUzKQpAQCAtMTQ2MiwxMyArMTQzMywxOCBAQAogfQogCiBzdGF0aWMgdm9pZAotdzgzNzgxZF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQordzgzNzgxZF9pbml0X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgaSwgcDsKIAlpbnQgdHlwZSA9IGRhdGEtPnR5cGU7CiAJdTggdG1wOwogCisJaWYgKHR5cGUgPT0gdzgzNjI3aGYpCisJCWRldl9pbmZvKGRldiwgIlRoZSBXODM2MjdIRiBjaGlwIGlzIGJldHRlciBzdXBwb3J0ZWQgYnkgdGhlICIKKwkJCSAidzgzNjI3aGYgZHJpdmVyLCBzdXBwb3J0IHdpbGwgYmUgZHJvcHBlZCBmcm9tIHRoZSAiCisJCQkgInc4Mzc4MWQgZHJpdmVyIHNvb25cbiIpOworCiAJaWYgKHJlc2V0ICYmIHR5cGUgIT0gYXM5OTEyN2YpIHsgLyogdGhpcyByZXNldHMgcmVnaXN0ZXJzIHdlIGRvbid0IGhhdmUKIAkJCQkJICAgZG9jdW1lbnRhdGlvbiBmb3Igb24gdGhlIGFzOTkxMjdmICovCiAJCS8qIFJlc2V0dGluZyB0aGUgY2hpcCBoYXMgYmVlbiB0aGUgZGVmYXVsdCBmb3IgYSBsb25nIHRpbWUsCkBAIC0xNDc3LDQyICsxNDUzLDQyIEBACiAJCSAgIEl0IG1pZ2h0IGV2ZW4gZ28gYXdheSBpZiBub2JvZHkgcmVwb3J0cyBpdCBhcyBiZWluZyB1c2VmdWwsCiAJCSAgIGFzIEkgc2VlIHZlcnkgbGl0dGxlIHJlYXNvbiB3aHkgdGhpcyB3b3VsZCBiZSBuZWVkZWQgYXQKIAkJICAgYWxsLiAqLwotCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJJZiByZXNldD0xIHNvbHZlZCBhIHByb2JsZW0geW91IHdlcmUgIgorCQlkZXZfaW5mbyhkZXYsICJJZiByZXNldD0xIHNvbHZlZCBhIHByb2JsZW0geW91IHdlcmUgIgogCQkJICJoYXZpbmcsIHBsZWFzZSByZXBvcnQhXG4iKTsKIAogCQkvKiBzYXZlIHRoZXNlIHJlZ2lzdGVycyAqLwotCQlpID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9DT05GSUcpOwotCQlwID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfUFdNQ0xLMTIpOworCQlpID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfQ09ORklHKTsKKwkJcCA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19QV01DTEsxMik7CiAJCS8qIFJlc2V0IGFsbCBleGNlcHQgV2F0Y2hkb2cgdmFsdWVzIGFuZCBsYXN0IGNvbnZlcnNpb24gdmFsdWVzCiAJCSAgIFRoaXMgc2V0cyBmYW4tZGl2cyB0byAyLCBhbW9uZyBvdGhlcnMgKi8KLQkJdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0NPTkZJRywgMHg4MCk7CisJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQ09ORklHLCAweDgwKTsKIAkJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGFuZCBkaXNhYmxlIHBvd2VyLW9uIGFibm9ybWFsIGJlZXAuCiAJCSAgIFRoaXMgc2F2ZXMgRkFOIDEvMi8zIGlucHV0L291dHB1dCB2YWx1ZXMgc2V0IGJ5IEJJT1MuICovCi0JCXc4Mzc4MWRfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19CRUVQX0NPTkZJRywgaSB8IDB4ODApOwotCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfUFdNQ0xLMTIsIHApOworCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0JFRVBfQ09ORklHLCBpIHwgMHg4MCk7CisJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfUFdNQ0xLMTIsIHApOwogCQkvKiBEaXNhYmxlIG1hc3RlciBiZWVwLWVuYWJsZSAocmVzZXQgdHVybnMgaXQgb24pLgogCQkgICBJbmRpdmlkdWFsIGJlZXBfbWFzayBzaG91bGQgYmUgcmVzZXQgdG8gb2ZmIGJ1dCBmb3Igc29tZSByZWFzb24KIAkJICAgZGlzYWJsaW5nIHRoaXMgYml0IGhlbHBzIHNvbWUgcGVvcGxlIG5vdCBnZXQgYmVlcGVkICovCi0JCXc4Mzc4MWRfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19CRUVQX0lOVFMyLCAwKTsKKwkJdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0lOVFMyLCAwKTsKIAl9CiAKIAkvKiBEaXNhYmxlIHBvd2VyLW9uIGFibm9ybWFsIGJlZXAsIGFzIGFkdmlzZWQgYnkgdGhlIGRhdGFzaGVldC4KIAkgICBBbHJlYWR5IGRvbmUgaWYgcmVzZXQ9MS4gKi8KIAlpZiAoaW5pdCAmJiAhcmVzZXQgJiYgdHlwZSAhPSBhczk5MTI3ZikgewotCQlpID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9DT05GSUcpOwotCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9DT05GSUcsIGkgfCAweDgwKTsKKwkJaSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0NPTkZJRyk7CisJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9DT05GSUcsIGkgfCAweDgwKTsKIAl9CiAKIAlkYXRhLT52cm0gPSB2aWRfd2hpY2hfdnJtKCk7CiAKIAlpZiAoKHR5cGUgIT0gdzgzNzgxZCkgJiYgKHR5cGUgIT0gYXM5OTEyN2YpKSB7Ci0JCXRtcCA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1NDRkcxKTsKKwkJdG1wID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1NDRkcxKTsKIAkJZm9yIChpID0gMTsgaSA8PSAzOyBpKyspIHsKIAkJCWlmICghKHRtcCAmIEJJVF9TQ0ZHMVtpIC0gMV0pKSB7CiAJCQkJZGF0YS0+c2Vuc1tpIC0gMV0gPSBXODM3ODFEX0RFRkFVTFRfQkVUQTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZQotCQkJCSAgICAoY2xpZW50LAorCQkJCSAgICAoZGF0YSwKIAkJCQkgICAgIFc4Mzc4MURfUkVHX1NDRkcyKSAmIEJJVF9TQ0ZHMltpIC0gMV0pCiAJCQkJCWRhdGEtPnNlbnNbaSAtIDFdID0gMTsKIAkJCQllbHNlCkBAIC0xNTI1LDM4ICsxNTAxLDQ2IEBACiAKIAlpZiAoaW5pdCAmJiB0eXBlICE9IGFzOTkxMjdmKSB7CiAJCS8qIEVuYWJsZSB0ZW1wMiAqLwotCQl0bXAgPSB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19URU1QMl9DT05GSUcpOworCQl0bXAgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfVEVNUDJfQ09ORklHKTsKIAkJaWYgKHRtcCAmIDB4MDEpIHsKLQkJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIkVuYWJsaW5nIHRlbXAyLCByZWFkaW5ncyAiCisJCQlkZXZfd2FybihkZXYsICJFbmFibGluZyB0ZW1wMiwgcmVhZGluZ3MgIgogCQkJCSAibWlnaHQgbm90IG1ha2Ugc2Vuc2VcbiIpOwotCQkJdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1RFTVAyX0NPTkZJRywKKwkJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfVEVNUDJfQ09ORklHLAogCQkJCXRtcCAmIDB4ZmUpOwogCQl9CiAKIAkJLyogRW5hYmxlIHRlbXAzICovCiAJCWlmICh0eXBlICE9IHc4Mzc4M3MpIHsKLQkJCXRtcCA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsCisJCQl0bXAgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQlXODM3ODFEX1JFR19URU1QM19DT05GSUcpOwogCQkJaWYgKHRtcCAmIDB4MDEpIHsKLQkJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJFbmFibGluZyB0ZW1wMywgIgorCQkJCWRldl93YXJuKGRldiwgIkVuYWJsaW5nIHRlbXAzLCAiCiAJCQkJCSAicmVhZGluZ3MgbWlnaHQgbm90IG1ha2Ugc2Vuc2VcbiIpOwotCQkJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoY2xpZW50LAorCQkJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwKIAkJCQkJVzgzNzgxRF9SRUdfVEVNUDNfQ09ORklHLCB0bXAgJiAweGZlKTsKIAkJCX0KIAkJfQogCX0KIAogCS8qIFN0YXJ0IG1vbml0b3JpbmcgKi8KLQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQ09ORklHLAotCQkJICAgICh3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LAorCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQ09ORklHLAorCQkJICAgICh3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJCVc4Mzc4MURfUkVHX0NPTkZJRykgJiAweGY3KQogCQkJICAgIHwgMHgwMSk7CisKKwkvKiBBIGZldyB2YXJzIG5lZWQgdG8gYmUgZmlsbGVkIHVwb24gc3RhcnR1cCAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJZGF0YS0+ZmFuX21pbltpXSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLAorCQkJCQlXODM3ODFEX1JFR19GQU5fTUlOKGkpKTsKKwl9CisKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdzgzNzgxZF9kYXRhICp3ODM3ODFkX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKIAlpbnQgaTsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTE1NjksOTggKzE1NTMsOTcgQEAKIAkJCWlmIChkYXRhLT50eXBlID09IHc4Mzc4M3MgJiYgaSA9PSAxKQogCQkJCWNvbnRpbnVlOwkvKiA3ODNTIGhhcyBubyBpbjEgKi8KIAkJCWRhdGEtPmluW2ldID0KLQkJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19JTihpKSk7CisJCQkgICAgdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0lOKGkpKTsKIAkJCWRhdGEtPmluX21pbltpXSA9Ci0JCQkgICAgdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfSU5fTUlOKGkpKTsKKwkJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfSU5fTUlOKGkpKTsKIAkJCWRhdGEtPmluX21heFtpXSA9Ci0JCQkgICAgdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfSU5fTUFYKGkpKTsKKwkJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfSU5fTUFYKGkpKTsKIAkJCWlmICgoZGF0YS0+dHlwZSAhPSB3ODM3ODJkKQogCQkJICAgICYmIChkYXRhLT50eXBlICE9IHc4MzYyN2hmKSAmJiAoaSA9PSA2KSkKIAkJCQlicmVhazsKIAkJfQotCQlmb3IgKGkgPSAxOyBpIDw9IDM7IGkrKykgewotCQkJZGF0YS0+ZmFuW2kgLSAxXSA9Ci0JCQkgICAgdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfRkFOKGkpKTsKLQkJCWRhdGEtPmZhbl9taW5baSAtIDFdID0KLQkJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19GQU5fTUlOKGkpKTsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJZGF0YS0+ZmFuW2ldID0KKwkJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfRkFOKGkpKTsKKwkJCWRhdGEtPmZhbl9taW5baV0gPQorCQkJICAgIHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19GQU5fTUlOKGkpKTsKIAkJfQogCQlpZiAoZGF0YS0+dHlwZSAhPSB3ODM3ODFkICYmIGRhdGEtPnR5cGUgIT0gYXM5OTEyN2YpIHsKLQkJCWZvciAoaSA9IDE7IGkgPD0gNDsgaSsrKSB7Ci0JCQkJZGF0YS0+cHdtW2kgLSAxXSA9Ci0JCQkJICAgIHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsCi0JCQkJCQkgICAgICAgVzgzNzgxRF9SRUdfUFdNKGkpKTsKLQkJCQlpZiAoKGRhdGEtPnR5cGUgIT0gdzgzNzgyZAotCQkJCSAgICAgfHwgaTJjX2lzX2lzYV9jbGllbnQoY2xpZW50KSkKLQkJCQkgICAgJiYgaSA9PSAyKQorCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCWRhdGEtPnB3bVtpXSA9CisJCQkJICAgIHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLAorCQkJCQkJICAgICAgIFc4Mzc4MURfUkVHX1BXTVtpXSk7CisJCQkJaWYgKChkYXRhLT50eXBlICE9IHc4Mzc4MmQgfHwgIWNsaWVudC0+ZHJpdmVyKQorCQkJCSAgICAmJiBpID09IDEpCiAJCQkJCWJyZWFrOwogCQkJfQogCQkJLyogT25seSBQV00yIGNhbiBiZSBkaXNhYmxlZCAqLwotCQkJZGF0YS0+cHdtZW5hYmxlWzFdID0gKHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsCisJCQlkYXRhLT5wd20yX2VuYWJsZSA9ICh3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJICAgICAgVzgzNzgxRF9SRUdfUFdNQ0xLMTIpICYgMHgwOCkgPj4gMzsKIAkJfQogCi0JCWRhdGEtPnRlbXAgPSB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19URU1QKDEpKTsKKwkJZGF0YS0+dGVtcCA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19URU1QKDEpKTsKIAkJZGF0YS0+dGVtcF9tYXggPQotCQkgICAgdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfVEVNUF9PVkVSKDEpKTsKKwkJICAgIHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19URU1QX09WRVIoMSkpOwogCQlkYXRhLT50ZW1wX21heF9oeXN0ID0KLQkJICAgIHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1RFTVBfSFlTVCgxKSk7CisJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfVEVNUF9IWVNUKDEpKTsKIAkJZGF0YS0+dGVtcF9hZGRbMF0gPQotCQkgICAgdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfVEVNUCgyKSk7CisJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfVEVNUCgyKSk7CiAJCWRhdGEtPnRlbXBfbWF4X2FkZFswXSA9Ci0JCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19URU1QX09WRVIoMikpOworCQkgICAgdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1RFTVBfT1ZFUigyKSk7CiAJCWRhdGEtPnRlbXBfbWF4X2h5c3RfYWRkWzBdID0KLQkJICAgIHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1RFTVBfSFlTVCgyKSk7CisJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfVEVNUF9IWVNUKDIpKTsKIAkJaWYgKGRhdGEtPnR5cGUgIT0gdzgzNzgzcykgewogCQkJZGF0YS0+dGVtcF9hZGRbMV0gPQotCQkJICAgIHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1RFTVAoMykpOworCQkJICAgIHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19URU1QKDMpKTsKIAkJCWRhdGEtPnRlbXBfbWF4X2FkZFsxXSA9Ci0JCQkgICAgdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwKKwkJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJICAgICAgIFc4Mzc4MURfUkVHX1RFTVBfT1ZFUigzKSk7CiAJCQlkYXRhLT50ZW1wX21heF9oeXN0X2FkZFsxXSA9Ci0JCQkgICAgdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwKKwkJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJICAgICAgIFc4Mzc4MURfUkVHX1RFTVBfSFlTVCgzKSk7CiAJCX0KLQkJaSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1ZJRF9GQU5ESVYpOworCQlpID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1ZJRF9GQU5ESVYpOwogCQlkYXRhLT52aWQgPSBpICYgMHgwZjsKLQkJZGF0YS0+dmlkIHw9ICh3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LAorCQlkYXRhLT52aWQgfD0gKHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLAogCQkJCQlXODM3ODFEX1JFR19DSElQSUQpICYgMHgwMSkgPDwgNDsKIAkJZGF0YS0+ZmFuX2RpdlswXSA9IChpID4+IDQpICYgMHgwMzsKIAkJZGF0YS0+ZmFuX2RpdlsxXSA9IChpID4+IDYpICYgMHgwMzsKLQkJZGF0YS0+ZmFuX2RpdlsyXSA9ICh3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LAorCQlkYXRhLT5mYW5fZGl2WzJdID0gKHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLAogCQkJCQlXODM3ODFEX1JFR19QSU4pID4+IDYpICYgMHgwMzsKIAkJaWYgKChkYXRhLT50eXBlICE9IHc4Mzc4MWQpICYmIChkYXRhLT50eXBlICE9IGFzOTkxMjdmKSkgewotCQkJaSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1ZCQVQpOworCQkJaSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19WQkFUKTsKIAkJCWRhdGEtPmZhbl9kaXZbMF0gfD0gKGkgPj4gMykgJiAweDA0OwogCQkJZGF0YS0+ZmFuX2RpdlsxXSB8PSAoaSA+PiA0KSAmIDB4MDQ7CiAJCQlkYXRhLT5mYW5fZGl2WzJdIHw9IChpID4+IDUpICYgMHgwNDsKIAkJfQogCQlpZiAoKGRhdGEtPnR5cGUgPT0gdzgzNzgyZCkgfHwgKGRhdGEtPnR5cGUgPT0gdzgzNjI3aGYpKSB7Ci0JCQlkYXRhLT5hbGFybXMgPSB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LAorCQkJZGF0YS0+YWxhcm1zID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJCQlXODM3ODJEX1JFR19BTEFSTTEpCi0JCQkJICAgICB8ICh3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LAorCQkJCSAgICAgfCAodzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJCQlXODM3ODJEX1JFR19BTEFSTTIpIDw8IDgpCi0JCQkJICAgICB8ICh3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LAorCQkJCSAgICAgfCAodzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJCQlXODM3ODJEX1JFR19BTEFSTTMpIDw8IDE2KTsKIAkJfSBlbHNlIGlmIChkYXRhLT50eXBlID09IHc4Mzc4M3MpIHsKLQkJCWRhdGEtPmFsYXJtcyA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsCisJCQlkYXRhLT5hbGFybXMgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJCVc4Mzc4MkRfUkVHX0FMQVJNMSkKLQkJCQkgICAgIHwgKHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsCisJCQkJICAgICB8ICh3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJCVc4Mzc4MkRfUkVHX0FMQVJNMikgPDwgOCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBObyByZWFsLXRpbWUgc3RhdHVzIHJlZ2lzdGVycywgZmFsbCBiYWNrIHRvCiAJCQkgICBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLwotCQkJZGF0YS0+YWxhcm1zID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwKKwkJCWRhdGEtPmFsYXJtcyA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLAogCQkJCQkJVzgzNzgxRF9SRUdfQUxBUk0xKQotCQkJCSAgICAgfCAodzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwKKwkJCQkgICAgIHwgKHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLAogCQkJCQkJVzgzNzgxRF9SRUdfQUxBUk0yKSA8PCA4KTsKIAkJfQotCQlpID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMik7CisJCWkgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMik7CiAJCWRhdGEtPmJlZXBfZW5hYmxlID0gaSA+PiA3OwogCQlkYXRhLT5iZWVwX21hc2sgPSAoKGkgJiAweDdmKSA8PCA4KSArCi0JCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19CRUVQX0lOVFMxKTsKKwkJICAgIHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0lOVFMxKTsKIAkJaWYgKChkYXRhLT50eXBlICE9IHc4Mzc4MWQpICYmIChkYXRhLT50eXBlICE9IGFzOTkxMjdmKSkgewogCQkJZGF0YS0+YmVlcF9tYXNrIHw9Ci0JCQkgICAgdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwKKwkJCSAgICB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJICAgICAgIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzMpIDw8IDE2OwogCQl9CiAJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CkBAIC0xNjcyLDYgKzE2NTUsMTMzIEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKKy8qIHJldHVybiAxIGlmIGEgc3VwcG9ydGVkIGNoaXAgaXMgZm91bmQsIDAgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IF9faW5pdAordzgzNzgxZF9pc2FfZm91bmQodW5zaWduZWQgc2hvcnQgYWRkcmVzcykKK3sKKwlpbnQgdmFsLCBzYXZlLCBmb3VuZCA9IDA7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MsIFc4Mzc4MURfRVhURU5ULCAidzgzNzgxZCIpKQorCQlyZXR1cm4gMDsKKworI2RlZmluZSBSRUFMTFlfU0xPV19JTworCS8qIFdlIG5lZWQgdGhlIHRpbWVvdXRzIGZvciBhdCBsZWFzdCBzb21lIFc4Mzc4MUQtbGlrZQorCSAgIGNoaXBzLiBCdXQgb25seSBpZiB3ZSByZWFkICd1bmRlZmluZWQnIHJlZ2lzdGVycy4gKi8KKwl2YWwgPSBpbmJfcChhZGRyZXNzICsgMSk7CisJaWYgKGluYl9wKGFkZHJlc3MgKyAyKSAhPSB2YWwKKwkgfHwgaW5iX3AoYWRkcmVzcyArIDMpICE9IHZhbAorCSB8fCBpbmJfcChhZGRyZXNzICsgNykgIT0gdmFsKSB7CisJCXByX2RlYnVnKCJ3ODM3ODFkOiBEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgMVxuIik7CisJCWdvdG8gcmVsZWFzZTsKKwl9CisjdW5kZWYgUkVBTExZX1NMT1dfSU8KKworCS8qIFdlIHNob3VsZCBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgNyBMU0Igb2YgdGhlIGFkZHJlc3MgcG9ydC4gVGhlCisJICAgTVNCIChidXN5IGZsYWcpIHNob3VsZCBiZSBjbGVhciBpbml0aWFsbHksIHNldCBhZnRlciB0aGUgd3JpdGUuICovCisJc2F2ZSA9IGluYl9wKGFkZHJlc3MgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJaWYgKHNhdmUgJiAweDgwKSB7CisJCXByX2RlYnVnKCJ3ODM3ODFkOiBEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgMlxuIik7CisJCWdvdG8gcmVsZWFzZTsKKwl9CisJdmFsID0gfnNhdmUgJiAweDdmOworCW91dGJfcCh2YWwsIGFkZHJlc3MgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJaWYgKGluYl9wKGFkZHJlc3MgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCkgIT0gKHZhbCB8IDB4ODApKSB7CisJCW91dGJfcChzYXZlLCBhZGRyZXNzICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCQlwcl9kZWJ1ZygidzgzNzgxZDogRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwIDNcbiIpOworCQlnb3RvIHJlbGVhc2U7CisJfQorCisJLyogV2UgZm91bmQgYSBkZXZpY2UsIG5vdyBzZWUgaWYgaXQgY291bGQgYmUgYSBXODM3ODFEICovCisJb3V0Yl9wKFc4Mzc4MURfUkVHX0NPTkZJRywgYWRkcmVzcyArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwl2YWwgPSBpbmJfcChhZGRyZXNzICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCWlmICh2YWwgJiAweDgwKSB7CisJCXByX2RlYnVnKCJ3ODM3ODFkOiBEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgNFxuIik7CisJCWdvdG8gcmVsZWFzZTsKKwl9CisJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssIGFkZHJlc3MgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJc2F2ZSA9IGluYl9wKGFkZHJlc3MgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJb3V0Yl9wKFc4Mzc4MURfUkVHX0NISVBNQU4sIGFkZHJlc3MgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJdmFsID0gaW5iX3AoYWRkcmVzcyArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwlpZiAoKCEoc2F2ZSAmIDB4ODApICYmICh2YWwgIT0gMHhhMykpCisJIHx8ICgoc2F2ZSAmIDB4ODApICYmICh2YWwgIT0gMHg1YykpKSB7CisJCXByX2RlYnVnKCJ3ODM3ODFkOiBEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgNVxuIik7CisJCWdvdG8gcmVsZWFzZTsKKwl9CisJb3V0Yl9wKFc4Mzc4MURfUkVHX0kyQ19BRERSLCBhZGRyZXNzICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCXZhbCA9IGluYl9wKGFkZHJlc3MgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJaWYgKHZhbCA8IDB4MDMgfHwgdmFsID4gMHg3NykgewkvKiBOb3QgYSB2YWxpZCBJMkMgYWRkcmVzcyAqLworCQlwcl9kZWJ1ZygidzgzNzgxZDogRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwIDZcbiIpOworCQlnb3RvIHJlbGVhc2U7CisJfQorCisJLyogVGhlIGJ1c3kgZmxhZyBzaG91bGQgYmUgY2xlYXIgYWdhaW4gKi8KKwlpZiAoaW5iX3AoYWRkcmVzcyArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKSAmIDB4ODApIHsKKwkJcHJfZGVidWcoInc4Mzc4MWQ6IERldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCA3XG4iKTsKKwkJZ290byByZWxlYXNlOworCX0KKworCS8qIERldGVybWluZSB0aGUgY2hpcCB0eXBlICovCisJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssIGFkZHJlc3MgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJc2F2ZSA9IGluYl9wKGFkZHJlc3MgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJb3V0Yl9wKHNhdmUgJiAweGY4LCBhZGRyZXNzICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCW91dGJfcChXODM3ODFEX1JFR19XQ0hJUElELCBhZGRyZXNzICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCXZhbCA9IGluYl9wKGFkZHJlc3MgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJaWYgKCh2YWwgJiAweGZlKSA9PSAweDEwCS8qIFc4Mzc4MUQgKi8KKwkgfHwgdmFsID09IDB4MzAJCQkvKiBXODM3ODJEICovCisJIHx8IHZhbCA9PSAweDIxKQkJLyogVzgzNjI3SEYgKi8KKwkJZm91bmQgPSAxOworCisJaWYgKGZvdW5kKQorCQlwcl9pbmZvKCJ3ODM3ODFkOiBGb3VuZCBhICVzIGNoaXAgYXQgJSN4XG4iLAorCQkJdmFsID09IDB4MjEgPyAiVzgzNjI3SEYiIDoKKwkJCXZhbCA9PSAweDMwID8gIlc4Mzc4MkQiIDogIlc4Mzc4MUQiLCAoaW50KWFkZHJlc3MpOworCisgcmVsZWFzZToKKwlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzLCBXODM3ODFEX0VYVEVOVCk7CisJcmV0dXJuIGZvdW5kOworfQorCitzdGF0aWMgaW50IF9faW5pdAordzgzNzgxZF9pc2FfZGV2aWNlX2FkZCh1bnNpZ25lZCBzaG9ydCBhZGRyZXNzKQoreworCXN0cnVjdCByZXNvdXJjZSByZXMgPSB7CisJCS5zdGFydAk9IGFkZHJlc3MsCisJCS5lbmQJPSBhZGRyZXNzICsgVzgzNzgxRF9FWFRFTlQsCisJCS5uYW1lCT0gInc4Mzc4MWQiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX07CisJaW50IGVycjsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInc4Mzc4MWQiLCBhZGRyZXNzKTsKKwlpZiAoIXBkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3ODM3ODFkOiBEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgJnJlcywgMSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInc4Mzc4MWQ6IERldmljZSByZXNvdXJjZSBhZGRpdGlvbiBmYWlsZWQgIgorCQkgICAgICAgIiglZClcbiIsIGVycik7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInc4Mzc4MWQ6IERldmljZSBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwKKwkJICAgICAgIGVycik7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKworCXJldHVybiAwOworCisgZXhpdF9kZXZpY2VfcHV0OgorCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisgZXhpdDoKKwlwZGV2ID0gTlVMTDsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IF9faW5pdAogc2Vuc29yc193ODM3ODFkX2luaXQodm9pZCkKIHsKQEAgLTE2NzksMjEgKzE3ODksMzYgQEAKIAogCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZ3ODM3ODFkX2RyaXZlcik7CiAJaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwkJZ290byBleGl0OwogCi0JLyogRG9uJ3QgZXhpdCBpZiB0aGlzIG9uZSBmYWlscywgd2Ugc3RpbGwgd2FudCB0aGUgSTJDIHZhcmlhbnRzCi0JICAgdG8gd29yayEgKi8KLQlpZiAoaTJjX2lzYV9hZGRfZHJpdmVyKCZ3ODM3ODFkX2lzYV9kcml2ZXIpKQotCQlpc2FfYWRkcmVzcyA9IDA7CisJaWYgKHc4Mzc4MWRfaXNhX2ZvdW5kKGlzYV9hZGRyZXNzKSkgeworCQlyZXMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnc4Mzc4MWRfaXNhX2RyaXZlcik7CisJCWlmIChyZXMpCisJCQlnb3RvIGV4aXRfdW5yZWdfaTJjX2RyaXZlcjsKKworCQkvKiBTZXRzIGdsb2JhbCBwZGV2IGFzIGEgc2lkZSBlZmZlY3QgKi8KKwkJcmVzID0gdzgzNzgxZF9pc2FfZGV2aWNlX2FkZChpc2FfYWRkcmVzcyk7CisJCWlmIChyZXMpCisJCQlnb3RvIGV4aXRfdW5yZWdfaXNhX2RyaXZlcjsKKwl9CiAKIAlyZXR1cm4gMDsKKworIGV4aXRfdW5yZWdfaXNhX2RyaXZlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdzgzNzgxZF9pc2FfZHJpdmVyKTsKKyBleGl0X3VucmVnX2kyY19kcml2ZXI6CisJaTJjX2RlbF9kcml2ZXIoJnc4Mzc4MWRfZHJpdmVyKTsKKyBleGl0OgorCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdAogc2Vuc29yc193ODM3ODFkX2V4aXQodm9pZCkKIHsKLQlpZiAoaXNhX2FkZHJlc3MpCi0JCWkyY19pc2FfZGVsX2RyaXZlcigmdzgzNzgxZF9pc2FfZHJpdmVyKTsKKwlpZiAocGRldikgeworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnc4Mzc4MWRfaXNhX2RyaXZlcik7CisJfQogCWkyY19kZWxfZHJpdmVyKCZ3ODM3ODFkX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL0tjb25maWcgYi9kcml2ZXJzL2kyYy9LY29uZmlnCmluZGV4IDQzNGE2MWIuLjk2ODY3MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvS2NvbmZpZwpAQCAtNCw2ICs0LDcgQEAKIAogbWVudWNvbmZpZyBJMkMKIAl0cmlzdGF0ZSAiSTJDIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0KIAktLS1oZWxwLS0tCiAJICBJMkMgKHByb25vdW5jZTogSS1zcXVhcmUtQykgaXMgYSBzbG93IHNlcmlhbCBidXMgcHJvdG9jb2wgdXNlZCBpbgogCSAgbWFueSBtaWNybyBjb250cm9sbGVyIGFwcGxpY2F0aW9ucyBhbmQgZGV2ZWxvcGVkIGJ5IFBoaWxpcHMuICBTTUJ1cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYXQ5MS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hdDkxLmMKaW5kZXggZjM1MTU2Yy4uOWM4YjZkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hdDkxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hdDkxLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTIyNiwxMyArMjI3LDE0IEBACiAJYWRhcHRlci0+YWxnbyA9ICZhdDkxX2FsZ29yaXRobTsKIAlhZGFwdGVyLT5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKIAlhZGFwdGVyLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwkvKiBhZGFwdGVyLT5pZCA9PSAwIC4uLiBvbmx5IG9uZSBUV0kgY29udHJvbGxlciBmb3Igbm93ICovCiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhZGFwdGVyKTsKIAogCWNsa19lbmFibGUodHdpX2Nsayk7CQkvKiBlbmFibGUgcGVyaXBoZXJhbCBjbG9jayAqLwogCWF0OTFfdHdpX2h3aW5pdCgpOwkJLyogaW5pdGlhbGl6ZSBUV0kgY29udHJvbGxlciAqLwogCi0JcmMgPSBpMmNfYWRkX2FkYXB0ZXIoYWRhcHRlcik7CisJcmMgPSBpMmNfYWRkX251bWJlcmVkX2FkYXB0ZXIoYWRhcHRlcik7CiAJaWYgKHJjKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkFkYXB0ZXIgJXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIiwKIAkJCQlhZGFwdGVyLT5uYW1lKTsKQEAgLTI5NSw2ICsyOTcsOSBAQAogI2RlZmluZSBhdDkxX2kyY19yZXN1bWUJCU5VTEwKICNlbmRpZgogCisvKiB3b3JrIHdpdGggIm1vZHByb2JlIGF0OTFfaTJjIiBmcm9tIGhvdHBsdWdnaW5nIG9yIGNvbGRwbHVnZ2luZyAqLworTU9EVUxFX0FMSUFTKCJhdDkxX2kyYyIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdDkxX2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGF0OTFfaTJjX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYXQ5MV9pMmNfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKaW5kZXggOGM5NTM3MC4uMDM5YTA3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKQEAgLTE3NSw2ICsxNzUsNyBAQAogCX0KIAlhZGFwdGVyLT5hbGdvX2RhdGEuZGF0YSA9IHBvcnQ7CiAJYWRhcHRlci0+YWRhcHRlci5hbGdvX2RhdGEgPSAmYWRhcHRlci0+YWxnb19kYXRhOworCWFkYXB0ZXItPmFkYXB0ZXIuZGV2LnBhcmVudCA9IHBvcnQtPnBoeXNwb3J0LT5kZXY7CiAKIAlpZiAocGFycG9ydF9jbGFpbV9vcl9ibG9jayhhZGFwdGVyLT5wZGV2KSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpMmMtcGFycG9ydDogQ291bGQgbm90IGNsYWltIHBhcmFsbGVsIHBvcnRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKaW5kZXggODczNTQ0YS4uMjhlN2I5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCkBAIC01NDgsNyArNTQ4LDcgQEAKIAkgKi8KIAlpY3IgPSByZWFkbChfSUNSKGkyYykpOwogCWljciAmPSB+KElDUl9TVE9QIHwgSUNSX0FDS05BSyk7Ci0Jd3JpdGVsKGljciwgX0lSQyhpMmMpKTsKKwl3cml0ZWwoaWNyLCBfSUNSKGkyYykpOwogfQogCiAvKgpAQCAtODM3LDIwICs4MzcsMTAgQEAKIAkuZnVuY3Rpb25hbGl0eQk9IGkyY19weGFfZnVuY3Rpb25hbGl0eSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHhhX2kyYyBpMmNfcHhhID0gewotCS5sb2NrCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoaTJjX3B4YS5sb2NrKSwKLQkuYWRhcAk9IHsKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkuYWxnbwkJPSAmaTJjX3B4YV9hbGdvcml0aG0sCi0JCS5uYW1lCQk9ICJweGEyeHgtaTJjLjAiLAotCQkucmV0cmllcwk9IDUsCi0JfSwKLX07Ci0KICNkZWZpbmUgcmVzX2xlbihyKQkJKChyKS0+ZW5kIC0gKHIpLT5zdGFydCArIDEpCiBzdGF0aWMgaW50IGkyY19weGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBweGFfaTJjICppMmMgPSAmaTJjX3B4YTsKKwlzdHJ1Y3QgcHhhX2kyYyAqaTJjOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCByZXQ7CkBAIC04NjQsMTUgKzg1NCwyMCBAQAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19sZW4ocmVzKSwgcmVzLT5uYW1lKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpMmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHhhX2kyYyksIEdGUF9LRVJORUwpOworCWkyYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBweGFfaTJjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpMmMpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlbWFsbG9jOwogCX0KIAotCW1lbWNweShpMmMsICZpMmNfcHhhLCBzaXplb2Yoc3RydWN0IHB4YV9pMmMpKTsKKwlpMmMtPmFkYXAub3duZXIgICA9IFRISVNfTU9EVUxFOworCWkyYy0+YWRhcC5hbGdvICAgID0gJmkyY19weGFfYWxnb3JpdGhtOworCWkyYy0+YWRhcC5yZXRyaWVzID0gNTsKKworCXNwaW5fbG9ja19pbml0KCZpMmMtPmxvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmkyYy0+d2FpdCk7Ci0JaTJjLT5hZGFwLm5hbWVbc3RybGVuKGkyYy0+YWRhcC5uYW1lKSAtIDFdID0gJzAnICsgZGV2LT5pZCAlIDEwOworCisJc3ByaW50ZihpMmMtPmFkYXAubmFtZSwgInB4YV9pMmMtaTJjLiV1IiwgZGV2LT5pZCk7CiAKIAlpMmMtPnJlZ19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNfbGVuKHJlcykpOwogCWlmICghaTJjLT5yZWdfYmFzZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwppbmRleCBlNjhhOTZmLi5lNDU0MGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwpAQCAtODMwLDcgKzgzMCw4IEBACiAKIAlpMmMtPmlycSA9IHJlczsKIAkJCi0JZGV2X2RiZygmcGRldi0+ZGV2LCAiaXJxIHJlc291cmNlICVwICglbGQpXG4iLCByZXMsIHJlcy0+c3RhcnQpOworCWRldl9kYmcoJnBkZXYtPmRldiwgImlycSByZXNvdXJjZSAlcCAoJWx1KVxuIiwgcmVzLAorCQkodW5zaWduZWQgbG9uZylyZXMtPnN0YXJ0KTsKIAogCXJldCA9IGkyY19hZGRfYWRhcHRlcigmaTJjLT5hZGFwKTsKIAlpZiAocmV0IDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10aW55LXVzYi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10aW55LXVzYi5jCmluZGV4IDkwNzk5OTAuLmNiOWFiZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGlueS11c2IuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRpbnktdXNiLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCWRldi0+YWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKIAlkZXYtPmFkYXB0ZXIuYWxnbyA9ICZ1c2JfYWxnb3JpdGhtOwogCWRldi0+YWRhcHRlci5hbGdvX2RhdGEgPSBkZXY7Ci0Jc25wcmludGYoZGV2LT5hZGFwdGVyLm5hbWUsIEkyQ19OQU1FX1NJWkUsCisJc25wcmludGYoZGV2LT5hZGFwdGVyLm5hbWUsIHNpemVvZihkZXYtPmFkYXB0ZXIubmFtZSksCiAJCSAiaTJjLXRpbnktdXNiIGF0IGJ1cyAlMDNkIGRldmljZSAlMDNkIiwKIAkJIGRldi0+dXNiX2Rldi0+YnVzLT5idXNudW0sIGRldi0+dXNiX2Rldi0+ZGV2bnVtKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMKaW5kZXggMGRiNTZlNy4uMGQ2YmQ0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL3RwczY1MDEwLmMKaW5kZXggN2VkOTJkYy4uM2MzZjJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy90cHM2NTAxMC5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIAkJCSAqIGFsc28gbmVlZHMgdG8gZ2V0IGVycm9yIGhhbmRsaW5nIGFuZCBwcm9iYWJseQogCQkJICogYW4gI2lmZGVmIENPTkZJR19TT0ZUV0FSRV9TVVNQRU5ECiAJCQkgKi8KLQkJCXBtX3N1c3BlbmQoUE1fU1VTUEVORF9ESVNLKTsKKwkJCWhpYmVybmF0ZSgpOwogI2VuZGlmCiAJCQlwb2xsID0gMTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggNjRmOGU1Ni4uNDM1OTI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC02OTcsOSArNjk3LDEwIEBACiAJaWYgKGNsaWVudC0+ZHJpdmVyKQogCQljbGllbnQtPmRldi5kcml2ZXIgPSAmY2xpZW50LT5kcml2ZXItPmRyaXZlcjsKIAotCWlmIChjbGllbnQtPmRyaXZlciAmJiAhaXNfbmV3c3R5bGVfZHJpdmVyKGNsaWVudC0+ZHJpdmVyKSkKKwlpZiAoY2xpZW50LT5kcml2ZXIgJiYgIWlzX25ld3N0eWxlX2RyaXZlcihjbGllbnQtPmRyaXZlcikpIHsKIAkJY2xpZW50LT5kZXYucmVsZWFzZSA9IGkyY19jbGllbnRfcmVsZWFzZTsKLQllbHNlCisJCWNsaWVudC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDE7CisJfSBlbHNlCiAJCWNsaWVudC0+ZGV2LnJlbGVhc2UgPSBpMmNfY2xpZW50X2Rldl9yZWxlYXNlOwogCiAJc25wcmludGYoJmNsaWVudC0+ZGV2LmJ1c19pZFswXSwgc2l6ZW9mKGNsaWVudC0+ZGV2LmJ1c19pZCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtZGV2LmMgYi9kcml2ZXJzL2kyYy9pMmMtZGV2LmMKaW5kZXggY2I0ZmE5Yi4uZTdhNzA5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWRldi5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1kZXYuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IDViZGY2NGIuLmIxYTliODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtNCwxMiArNCwxMCBAQAogIyBBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgogIwogCi1pZiBCTE9DSwotCi1tZW51ICJBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0IgotCi1jb25maWcgSURFCittZW51Y29uZmlnIElERQogCXRyaXN0YXRlICJBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQkxPQ0sKKwlkZXBlbmRzIG9uIEhBU19JT01FTQogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3VyIGtlcm5lbCB3aWxsIGJlIGFibGUgdG8gbWFuYWdlIGxvdyBjb3N0IG1hc3MKIAkgIHN0b3JhZ2UgdW5pdHMgc3VjaCBhcyBBVEEvKEUpSURFIGFuZCBBVEFQSSB1bml0cy4gVGhlIG1vc3QgY29tbW9uCkBAIC0yOTEsNiArMjg5LDE3IEBACiAKIAkgIElmIHlvdSBhcmUgdW5zdXJlLCBzYXkgTiBoZXJlLgogCitjb25maWcgSURFX1BST0NfRlMKKwlib29sICJsZWdhY3kgL3Byb2MvaWRlLyBzdXBwb3J0IgorCWRlcGVuZHMgb24gSURFICYmIFBST0NfRlMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSB2YXJpb3VzIGZpbGVzIGluCisJICAvcHJvYy9pZGUuICBJbiBMaW51eCAyLjYgdGhpcyBoYXMgYmVlbiBzdXBlcnNlZGVkIGJ5CisJICBmaWxlcyBpbiBzeXNmcyBidXQgbWFueSBsZWdhY3kgYXBwbGljYXRpb25zIHJlbHkgb24gdGhpcy4KKworCSAgSWYgdW5zdXJlIHNheSBZLgorCiBjb21tZW50ICJJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzIgogCiBjb25maWcgSURFX0dFTkVSSUMKQEAgLTM2MCw2ICszNjksOSBAQAogCSAgSXQgaXMgc2FmZSB0byBzYXkgWSB0byB0aGlzIHF1ZXN0aW9uLCBpbiBtb3N0IGNhc2VzLgogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIElERVBDSV9QQ0lCVVNfT1JERVIKKwlkZWZfYm9vbCBQQ0kgJiYgQkxLX0RFVl9JREU9eSAmJiBCTEtfREVWX0lERVBDSQorCiBjb25maWcgQkxLX0RFVl9PRkZCT0FSRAogCWJvb2wgIkJvb3Qgb2ZmLWJvYXJkIGNoaXBzZXRzIGZpcnN0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgQkxLX0RFVl9JREVQQ0kKQEAgLTEwODQsOCArMTA5Niw0IEBACiBjb25maWcgQkxLX0RFVl9IRAogCWRlZl9ib29sIEJMS19ERVZfSERfSURFIHx8IEJMS19ERVZfSERfT05MWQogCi1lbmRpZgotCi1lbmRtZW51Ci0KLWVuZGlmCitlbmRpZiAjIElERQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvTWFrZWZpbGUgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQppbmRleCBkOWYwMjllLi43NWRjNjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQpAQCAtMjAsNyArMjAsNyBAQAogIyBDb3JlIElERSBjb2RlIC0gbXVzdCBjb21lIGJlZm9yZSBsZWdhY3kKIGlkZS1jb3JlLSQoQ09ORklHX0JMS19ERVZfSURFUENJKQkrPSBzZXR1cC1wY2kubwogaWRlLWNvcmUtJChDT05GSUdfQkxLX0RFVl9JREVETUEpCSs9IGlkZS1kbWEubwotaWRlLWNvcmUtJChDT05GSUdfUFJPQ19GUykJCSs9IGlkZS1wcm9jLm8KK2lkZS1jb3JlLSQoQ09ORklHX0lERV9QUk9DX0ZTKQkJKz0gaWRlLXByb2MubwogaWRlLWNvcmUtJChDT05GSUdfQkxLX0RFVl9JREVQTlApCSs9IGlkZS1wbnAubwogaWRlLWNvcmUtJChDT05GSUdfQkxLX0RFVl9JREVBQ1BJKQkrPSBpZGUtYWNwaS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FybS9iYXN0LWlkZS5jIGIvZHJpdmVycy9pZGUvYXJtL2Jhc3QtaWRlLmMKaW5kZXggOWQ0NzRlNS4uZjc0NDlkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXJtL2Jhc3QtaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXJtL2Jhc3QtaWRlLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAlody5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID0gYXV4ICsgKDYgKiAweDIwKTsKIAlody5pcnEgPSBpcnE7CiAKLQlpZGVfcmVnaXN0ZXJfaHcoJmh3LCBod2lmKTsKKwlpZGVfcmVnaXN0ZXJfaHcoJmh3LCAwLCBod2lmKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jIGIvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jCmluZGV4IGUyOTUzZmMuLjY2ZjgyNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FybS9pY3NpZGUuYworKysgYi9kcml2ZXJzL2lkZS9hcm0vaWNzaWRlLmMKQEAgLTM0Miw3ICszNDIsNyBAQAogCSAqIEVuYWJsZSBETUEgb24gYW55IGRyaXZlIHRoYXQgaGFzIG11bHRpd29yZCBETUEKIAkgKi8KIAlpZiAoaWQtPmZpZWxkX3ZhbGlkICYgMikgewotCQl4ZmVyX21vZGUgPSBpZGVfZG1hX3NwZWVkKGRyaXZlLCAwKTsKKwkJeGZlcl9tb2RlID0gaWRlX21heF9kbWFfbW9kZShkcml2ZSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTY1LDggKzU2NSw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZjsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAKLQliYXNlID0gaW9yZW1hcChlY2FyZF9yZXNvdXJjZV9zdGFydChlYywgRUNBUkRfUkVTX01FTUMpLAotCQkgICAgICAgZWNhcmRfcmVzb3VyY2VfbGVuKGVjLCBFQ0FSRF9SRVNfTUVNQykpOworCWJhc2UgPSBlY2FyZG1faW9tYXAoZWMsIEVDQVJEX1JFU19NRU1DLCAwLCAwKTsKIAlpZiAoIWJhc2UpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01NzQsOCArNTczLDggQEAKIAogCWVjLT5pcnFhZGRyICA9IGJhc2UgKyBJQ1NfQVJDSU5fVjVfSU5UUlNUQVQ7CiAJZWMtPmlycW1hc2sgID0gMTsKLQllYy0+aXJxX2RhdGEgPSBzdGF0ZTsKLQllYy0+b3BzICAgICAgPSAmaWNzaWRlX29wc19hcmNpbl92NTsKKworCWVjYXJkX3NldGlycShlYywgJmljc2lkZV9vcHNfYXJjaW5fdjUsIHN0YXRlKTsKIAogCS8qCiAJICogQmUgb24gdGhlIHNhZmUgc2lkZSAtIGRpc2FibGUgaW50ZXJydXB0cwpAQCAtNTgzLDE1ICs1ODIsMTQgQEAKIAlpY3NpZGVfaXJxZGlzYWJsZV9hcmNpbl92NShlYywgMCk7CiAKIAlod2lmID0gaWNzaWRlX3NldHVwKGJhc2UsICZpY3NpZGVfY2FyZGluZm9fdjUsIGVjKTsKLQlpZiAoIWh3aWYpIHsKLQkJaW91bm1hcChiYXNlKTsKKwlpZiAoIWh3aWYpCiAJCXJldHVybiAtRU5PREVWOwotCX0KIAogCXN0YXRlLT5od2lmWzBdID0gaHdpZjsKIAogCXByb2JlX2h3aWZfaW5pdChod2lmKTsKLQljcmVhdGVfcHJvY19pZGVfaW50ZXJmYWNlcygpOworCisJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChod2lmKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjA0LDggKzYwMiw3IEBACiAJdW5zaWduZWQgaW50IHNlbCA9IDA7CiAJaW50IHJldDsKIAotCWlvY19iYXNlID0gaW9yZW1hcChlY2FyZF9yZXNvdXJjZV9zdGFydChlYywgRUNBUkRfUkVTX0lPQ0ZBU1QpLAotCQkJICAgZWNhcmRfcmVzb3VyY2VfbGVuKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCkpOworCWlvY19iYXNlID0gZWNhcmRtX2lvbWFwKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCwgMCwgMCk7CiAJaWYgKCFpb2NfYmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTYxNCwxMSArNjExLDEwIEBACiAJZWFzaV9iYXNlID0gaW9jX2Jhc2U7CiAKIAlpZiAoZWNhcmRfcmVzb3VyY2VfZmxhZ3MoZWMsIEVDQVJEX1JFU19FQVNJKSkgewotCQllYXNpX2Jhc2UgPSBpb3JlbWFwKGVjYXJkX3Jlc291cmNlX3N0YXJ0KGVjLCBFQ0FSRF9SRVNfRUFTSSksCi0JCQkJICAgIGVjYXJkX3Jlc291cmNlX2xlbihlYywgRUNBUkRfUkVTX0VBU0kpKTsKKwkJZWFzaV9iYXNlID0gZWNhcmRtX2lvbWFwKGVjLCBFQ0FSRF9SRVNfRUFTSSwgMCwgMCk7CiAJCWlmICghZWFzaV9iYXNlKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byB1bm1hcF9zbG90OworCQkJZ290byBvdXQ7CiAJCX0KIAogCQkvKgpAQCAtNjI5LDggKzYyNSw3IEBACiAKIAl3cml0ZWIoc2VsLCBpb2NfYmFzZSk7CiAKLQllYy0+aXJxX2RhdGEgICAgICA9IHN0YXRlOwotCWVjLT5vcHMgICAgICAgICAgID0gJmljc2lkZV9vcHNfYXJjaW5fdjY7CisJZWNhcmRfc2V0aXJxKGVjLCAmaWNzaWRlX29wc19hcmNpbl92Niwgc3RhdGUpOwogCiAJc3RhdGUtPmlycV9wb3J0ICAgPSBlYXNpX2Jhc2U7CiAJc3RhdGUtPmlvY19iYXNlICAgPSBpb2NfYmFzZTsKQEAgLTY0OCw3ICs2NDMsNyBAQAogCiAJaWYgKCFod2lmIHx8ICFtYXRlKSB7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gdW5tYXBfcG9ydDsKKwkJZ290byBvdXQ7CiAJfQogCiAJc3RhdGUtPmh3aWZbMF0gICAgPSBod2lmOwpAQCAtNjc5LDE1ICs2NzQsMTIgQEAKIAogCXByb2JlX2h3aWZfaW5pdChod2lmKTsKIAlwcm9iZV9od2lmX2luaXQobWF0ZSk7Ci0JY3JlYXRlX3Byb2NfaWRlX2ludGVyZmFjZXMoKTsKKworCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChtYXRlKTsKIAogCXJldHVybiAwOwogCi0gdW5tYXBfcG9ydDoKLQlpZiAoZWFzaV9iYXNlICE9IGlvY19iYXNlKQotCQlpb3VubWFwKGVhc2lfYmFzZSk7Ci0gdW5tYXBfc2xvdDoKLQlpb3VubWFwKGlvY19iYXNlKTsKICBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTcxMyw4ICs3MDUsNyBAQAogCXN0YXRlLT50eXBlCT0gSUNTX1RZUEVfTk9UWVBFOwogCXN0YXRlLT5kZXYJPSAmZWMtPmRldjsKIAotCWlkbWVtID0gaW9yZW1hcChlY2FyZF9yZXNvdXJjZV9zdGFydChlYywgRUNBUkRfUkVTX0lPQ0ZBU1QpLAotCQkJZWNhcmRfcmVzb3VyY2VfbGVuKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCkpOworCWlkbWVtID0gZWNhcmRtX2lvbWFwKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCwgMCwgMCk7CiAJaWYgKGlkbWVtKSB7CiAJCXVuc2lnbmVkIGludCB0eXBlOwogCkBAIC03MjIsNyArNzEzLDcgQEAKIAkJdHlwZSB8PSAocmVhZGIoaWRtZW0gKyBJQ1NfSURFTlRfT0ZGU0VUICsgNCkgJiAxKSA8PCAxOwogCQl0eXBlIHw9IChyZWFkYihpZG1lbSArIElDU19JREVOVF9PRkZTRVQgKyA4KSAmIDEpIDw8IDI7CiAJCXR5cGUgfD0gKHJlYWRiKGlkbWVtICsgSUNTX0lERU5UX09GRlNFVCArIDEyKSAmIDEpIDw8IDM7Ci0JCWlvdW5tYXAoaWRtZW0pOworCQllY2FyZG1faW91bm1hcChlYywgaWRtZW0pOwogCiAJCXN0YXRlLT50eXBlID0gdHlwZTsKIAl9CkBAIC03OTAsMTMgKzc4MSw2IEBACiAJfQogCiAJZWNhcmRfc2V0X2RydmRhdGEoZWMsIE5VTEwpOwotCWVjLT5vcHMgPSBOVUxMOwotCWVjLT5pcnFfZGF0YSA9IE5VTEw7Ci0KLQlpZiAoc3RhdGUtPmlvY19iYXNlKQotCQlpb3VubWFwKHN0YXRlLT5pb2NfYmFzZSk7Ci0JaWYgKHN0YXRlLT5pb2NfYmFzZSAhPSBzdGF0ZS0+aXJxX3BvcnQpCi0JCWlvdW5tYXAoc3RhdGUtPmlycV9wb3J0KTsKIAogCWtmcmVlKHN0YXRlKTsKIAllY2FyZF9yZWxlYXNlX3Jlc291cmNlcyhlYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hcm0vaWRlX2FybS5jIGIvZHJpdmVycy9pZGUvYXJtL2lkZV9hcm0uYwppbmRleCAyMzQ4OGM0Li5hM2Q2NzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vaWRlX2FybS5jCisrKyBiL2RyaXZlcnMvaWRlL2FybS9pZGVfYXJtLmMKQEAgLTM4LDYgKzM4LDYgQEAKIAkJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CiAJCWlkZV9zdGRfaW5pdF9wb3J0cygmaHcsIElERV9BUk1fSU8sIElERV9BUk1fSU8gKyAweDIwNik7CiAJCWh3LmlycSA9IElERV9BUk1fSVJROwotCQlpZGVfcmVnaXN0ZXJfaHcoJmh3LCBOVUxMKTsKKwkJaWRlX3JlZ2lzdGVyX2h3KCZodywgMSwgTlVMTCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL3JhcGlkZS5jIGIvZHJpdmVycy9pZGUvYXJtL3JhcGlkZS5jCmluZGV4IDljNmM0OWYuLjgzODExYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FybS9yYXBpZGUuYworKysgYi9kcml2ZXJzL2lkZS9hcm0vcmFwaWRlLmMKQEAgLTYzLDggKzYzLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCWJhc2UgPSBpb3JlbWFwKGVjYXJkX3Jlc291cmNlX3N0YXJ0KGVjLCBFQ0FSRF9SRVNfTUVNQyksCi0JCSAgICAgICBlY2FyZF9yZXNvdXJjZV9sZW4oZWMsIEVDQVJEX1JFU19NRU1DKSk7CisJYmFzZSA9IGVjYXJkbV9pb21hcChlYywgRUNBUkRfUkVTX01FTUMsIDAsIDApOwogCWlmICghYmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIHJlbGVhc2U7CkBAIC03NiwxMiArNzUsMTEgQEAKIAkJaHdpZi0+Z2VuZGV2LnBhcmVudCA9ICZlYy0+ZGV2OwogCQlod2lmLT5ub3Byb2JlID0gMDsKIAkJcHJvYmVfaHdpZl9pbml0KGh3aWYpOwotCQljcmVhdGVfcHJvY19pZGVfaW50ZXJmYWNlcygpOworCQlpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KGh3aWYpOwogCQllY2FyZF9zZXRfZHJ2ZGF0YShlYywgaHdpZik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlvdW5tYXAoYmFzZSk7CiAgcmVsZWFzZToKIAllY2FyZF9yZWxlYXNlX3Jlc291cmNlcyhlYyk7CiAgb3V0OgpAQCAtOTYsNyArOTQsNiBAQAogCiAJLyogdGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgKi8KIAlpZGVfdW5yZWdpc3Rlcihod2lmIC0gaWRlX2h3aWZzKTsKLQlpb3VubWFwKGh3aWYtPmh3aWZfZGF0YSk7CiAJZWNhcmRfcmVsZWFzZV9yZXNvdXJjZXMoZWMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jcmlzL2lkZS1jcmlzLmMgYi9kcml2ZXJzL2lkZS9jcmlzL2lkZS1jcmlzLmMKaW5kZXggNWU4ZWZjOC4uY2EwMzQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY3Jpcy9pZGUtY3Jpcy5jCisrKyBiL2RyaXZlcnMvaWRlL2NyaXMvaWRlLWNyaXMuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAJCSAgICAgICAgICAgICAgICBpZGVfb2Zmc2V0cywKIAkJICAgICAgICAgICAgICAgIDAsIDAsIGNyaXNfaWRlX2Fja19pbnRyLAogCQkgICAgICAgICAgICAgICAgaWRlX2RlZmF1bHRfaXJxKDApKTsKLQkJaWRlX3JlZ2lzdGVyX2h3KCZodywgJmh3aWYpOworCQlpZGVfcmVnaXN0ZXJfaHcoJmh3LCAxLCAmaHdpZik7CiAJCWh3aWYtPm1taW8gPSAxOwogCQlod2lmLT5jaGlwc2V0ID0gaWRlX2V0cmF4MTAwOwogCQlod2lmLT50dW5lcHJvYyA9ICZ0dW5lX2NyaXNfaWRlOwpAQCAtMTAwMiwxOCArMTAwMiw2IEBACiAJcmV0dXJuIDE7CS8qIGxldCB0aGUgUElPIHJvdXRpbmVzIGhhbmRsZSB0aGlzIHdlaXJkbmVzcyAqLwogfQogCi1zdGF0aWMgaW50IGNyaXNfY29uZmlnX2RyaXZlX2Zvcl9kbWEgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQl1OCBzcGVlZCA9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIDEpOwotCi0JaWYgKCFzcGVlZCkKLQkJcmV0dXJuIDA7Ci0KLQlzcGVlZF9jcmlzX2lkZShkcml2ZSwgc3BlZWQpOwotCi0JcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKLX0KLQogLyoKICAqIGNyaXNfZG1hX2ludHIoKSBpcyB0aGUgaGFuZGxlciBmb3IgZGlzayByZWFkL3dyaXRlIERNQSBpbnRlcnJ1cHRzCiAgKi8KQEAgLTEwNDMsNyArMTAzMSw3IEBACiAKIHN0YXRpYyBpbnQgY3Jpc19kbWFfY2hlY2soaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgY3Jpc19jb25maWdfZHJpdmVfZm9yX2RtYShkcml2ZSkpCisJaWYgKGlkZV90dW5lX2RtYShkcml2ZSkpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaDgzMDAvaWRlLWg4MzAwLmMgYi9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYwppbmRleCA4ODc1MGEzLi42ZDI2YWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYworKysgYi9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJaHdfc2V0dXAoJmh3KTsKIAogCS8qIHJlZ2lzdGVyIGlmICovCi0JaWR4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgJmh3aWYpOworCWlkeCA9IGlkZV9yZWdpc3Rlcl9odygmaHcsIDEsICZod2lmKTsKIAlpZiAoaWR4ID09IC0xKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWRlLWg4MzAwOiBJREUgSS9GIHJlZ2lzdGVyIGZhaWxlZFxuIik7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggNjM4YmVjZC4uMjUyYWI4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTMwNTksMTAgKzMwNTksMTQgQEAKIAlyZXR1cm4gbnNsb3RzOwogfQogCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiBzdGF0aWMgdm9pZCBpZGVfY2Ryb21fYWRkX3NldHRpbmdzKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJkc2Nfb3ZlcmxhcCIsCQlTRVRUSU5HX1JXLCAtMSwgLTEsIFRZUEVfQllURSwgMCwgMSwgMSwJMSwgJmRyaXZlLT5kc2Nfb3ZlcmxhcCwgTlVMTCk7CisJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLCAiZHNjX292ZXJsYXAiLCBTRVRUSU5HX1JXLCBUWVBFX0JZVEUsIDAsIDEsIDEsIDEsICZkcml2ZS0+ZHNjX292ZXJsYXAsIE5VTEwpOwogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfY2Ryb21fYWRkX3NldHRpbmdzKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KKyNlbmRpZgogCiAvKgogICogc3RhbmRhcmQgcHJlcF9ycV9mbiB0aGF0IGJ1aWxkcyAxMCBieXRlIGNtZHMKQEAgLTMyNzQsNyArMzI3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwogc3RhdGljCiBzZWN0b3JfdCBpZGVfY2Ryb21fY2FwYWNpdHkgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKQEAgLTMyOTEsNyArMzI5NSw3IEBACiB7CiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKLQlpZGVfdW5yZWdpc3Rlcl9zdWJkcml2ZXIoZHJpdmUsIGluZm8tPmRyaXZlcik7CisJaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGluZm8tPmRyaXZlcik7CiAKIAlkZWxfZ2VuZGlzayhpbmZvLT5kaXNrKTsKIApAQCAtMzMyMSw3ICszMzI1LDcgQEAKIAogc3RhdGljIGludCBpZGVfY2RfcHJvYmUoaWRlX2RyaXZlX3QgKik7CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwogc3RhdGljIGludCBwcm9jX2lkZWNkX3JlYWRfY2FwYWNpdHkKIAkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7CkBAIC0zMzM2LDggKzMzNDAsNiBAQAogCXsgImNhcGFjaXR5IiwgU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZWNkX3JlYWRfY2FwYWNpdHksIE5VTEwgfSwKIAl7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfQogfTsKLSNlbHNlCi0jIGRlZmluZSBpZGVjZF9wcm9jCU5VTEwKICNlbmRpZgogCiBzdGF0aWMgaWRlX2RyaXZlcl90IGlkZV9jZHJvbV9kcml2ZXIgPSB7CkBAIC0zMzU1LDcgKzMzNTcsOSBAQAogCS5lbmRfcmVxdWVzdAkJPSBpZGVfZW5kX3JlcXVlc3QsCiAJLmVycm9yCQkJPSBfX2lkZV9lcnJvciwKIAkuYWJvcnQJCQk9IF9faWRlX2Fib3J0LAorI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwogCS5wcm9jCQkJPSBpZGVjZF9wcm9jLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IGlkZWNkX29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKQEAgLTM1MTcsNyArMzUyMSw3IEBACiAKIAlpZGVfaW5pdF9kaXNrKGcsIGRyaXZlKTsKIAotCWlkZV9yZWdpc3Rlcl9zdWJkcml2ZXIoZHJpdmUsICZpZGVfY2Ryb21fZHJpdmVyKTsKKwlpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsICZpZGVfY2Ryb21fZHJpdmVyKTsKIAogCWtyZWZfaW5pdCgmaW5mby0+a3JlZik7CiAKQEAgLTM1MzQsNyArMzUzOCw3IEBACiAJZy0+ZmxhZ3MgPSBHRU5IRF9GTF9DRCB8IEdFTkhEX0ZMX1JFTU9WQUJMRTsKIAlpZiAoaWRlX2Nkcm9tX3NldHVwKGRyaXZlKSkgewogCQlzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmRldmluZm8gPSAmaW5mby0+ZGV2aW5mbzsKLQkJaWRlX3VucmVnaXN0ZXJfc3ViZHJpdmVyKGRyaXZlLCAmaWRlX2Nkcm9tX2RyaXZlcik7CisJCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCAmaWRlX2Nkcm9tX2RyaXZlcik7CiAJCWtmcmVlKGluZm8tPmJ1ZmZlcik7CiAJCWtmcmVlKGluZm8tPnRvYyk7CiAJCWtmcmVlKGluZm8tPmNoYW5nZXJfaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwppbmRleCAzN2FhNmRkLi43ZmZmNzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKQEAgLTU1OSw4ICs1NTksNyBAQAogCXJldHVybiBkcml2ZS0+Y2FwYWNpdHk2NCAtIGRyaXZlLT5zZWN0MDsKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0KKyNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKIHN0YXRpYyBpbnQgc21hcnRfZW5hYmxlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfdGFza190IGFyZ3M7CkBAIC02NzgsMTIgKzY3Nyw3IEBACiAJeyAic21hcnRfdGhyZXNob2xkcyIsCVNfSUZSRUd8U19JUlVTUiwJcHJvY19pZGVkaXNrX3JlYWRfc21hcnRfdGhyZXNob2xkcywJTlVMTCB9LAogCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9CiB9OwotCi0jZWxzZQotCi0jZGVmaW5lCWlkZWRpc2tfcHJvYwlOVUxMCi0KLSNlbmRpZgkvKiBDT05GSUdfUFJPQ19GUyAqLworI2VuZGlmCS8qIENPTkZJR19JREVfUFJPQ19GUyAqLwogCiBzdGF0aWMgdm9pZCBpZGVkaXNrX3ByZXBhcmVfZmx1c2gocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CkBAIC03MzcsNiArNzMxLDkgQEAKIHsKIAlzdHJ1Y3QgcmVxdWVzdCBycTsKIAorCWlmIChhcmcgPCAwIHx8IGFyZyA+IGRyaXZlLT5pZC0+bWF4X211bHRzZWN0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChkcml2ZS0+c3BlY2lhbC5iLnNldF9tdWx0bW9kZSkKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZGVfaW5pdF9kcml2ZV9jbWQgKCZycSk7CkBAIC03NDksNiArNzQ2LDkgQEAKIAogc3RhdGljIGludCBzZXRfbm93ZXJyKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKIHsKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChpZGVfc3Bpbl93YWl0X2h3Z3JvdXAoZHJpdmUpKQogCQlyZXR1cm4gLUVCVVNZOwogCWRyaXZlLT5ub3dlcnIgPSBhcmc7CkBAIC04MDAsNiArODAwLDkgQEAKIAlpZGVfdGFza190IGFyZ3M7CiAJaW50IGVyciA9IDE7CiAKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChpZGVfaWRfaGFzX2ZsdXNoX2NhY2hlKGRyaXZlLT5pZCkpIHsKIAkJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwogCQlhcmdzLnRmUmVnaXN0ZXJbSURFX0ZFQVRVUkVfT0ZGU0VUXQk9IChhcmcpID8KQEAgLTgzNSw2ICs4MzgsOSBAQAogewogCWlkZV90YXNrX3QgYXJnczsKIAorCWlmIChhcmcgPCAwIHx8IGFyZyA+IDI1NCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CiAJYXJncy50ZlJlZ2lzdGVyW0lERV9GRUFUVVJFX09GRlNFVF0JPSAoYXJnKSA/IFNFVEZFQVRVUkVTX0VOX0FBTSA6CiAJCQkJCQkJICBTRVRGRUFUVVJFU19ESVNfQUFNOwpAQCAtODU1LDYgKzg2MSw5IEBACiAgKi8KIHN0YXRpYyBpbnQgc2V0X2xiYV9hZGRyZXNzaW5nKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKIHsKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWRyaXZlLT5hZGRyZXNzaW5nID0gIDA7CiAKIAlpZiAoSFdJRihkcml2ZSktPm5vX2xiYTQ4KQpAQCAtODY2LDIzICs4NzUsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwogc3RhdGljIHZvaWQgaWRlZGlza19hZGRfc2V0dGluZ3MoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCBoZF9kcml2ZWlkICppZCA9IGRyaXZlLT5pZDsKIAotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImJpb3NfY3lsIiwJCVNFVFRJTkdfUlcsCQkJCQktMSwJCQktMSwJCQlUWVBFX0lOVCwJMCwJNjU1MzUsCQkJCTEsCTEsCSZkcml2ZS0+Ymlvc19jeWwsCQlOVUxMKTsKLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJiaW9zX2hlYWQiLAkJU0VUVElOR19SVywJCQkJCS0xLAkJCS0xLAkJCVRZUEVfQllURSwJMCwJMjU1LAkJCQkxLAkxLAkmZHJpdmUtPmJpb3NfaGVhZCwJCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImJpb3Nfc2VjdCIsCQlTRVRUSU5HX1JXLAkJCQkJLTEsCQkJLTEsCQkJVFlQRV9CWVRFLAkwLAk2MywJCQkJMSwJMSwJJmRyaXZlLT5iaW9zX3NlY3QsCQlOVUxMKTsKLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJhZGRyZXNzIiwJCVNFVFRJTkdfUlcsCQkJCQlIRElPX0dFVF9BRERSRVNTLAlIRElPX1NFVF9BRERSRVNTLAlUWVBFX0lOVEEsCTAsCTIsCQkJCTEsCTEsCSZkcml2ZS0+YWRkcmVzc2luZywJc2V0X2xiYV9hZGRyZXNzaW5nKTsKLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJic3dhcCIsCQlTRVRUSU5HX1JFQUQsCQkJCQktMSwJCQktMSwJCQlUWVBFX0JZVEUsCTAsCTEsCQkJCTEsCTEsCSZkcml2ZS0+YnN3YXAsCQkJTlVMTCk7Ci0JaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkibXVsdGNvdW50IiwJCWlkID8gU0VUVElOR19SVyA6IFNFVFRJTkdfUkVBRCwJCQlIRElPX0dFVF9NVUxUQ09VTlQsCUhESU9fU0VUX01VTFRDT1VOVCwJVFlQRV9CWVRFLAkwLAlpZCA/IGlkLT5tYXhfbXVsdHNlY3QgOiAwLAkxLAkxLAkmZHJpdmUtPm11bHRfY291bnQsCQlzZXRfbXVsdGNvdW50KTsKLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJub3dlcnIiLAkJU0VUVElOR19SVywJCQkJCUhESU9fR0VUX05PV0VSUiwJSERJT19TRVRfTk9XRVJSLAlUWVBFX0JZVEUsCTAsCTEsCQkJCTEsCTEsCSZkcml2ZS0+bm93ZXJyLAkJCXNldF9ub3dlcnIpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImx1biIsCQkJU0VUVElOR19SVywJCQkJCS0xLAkJCS0xLAkJCVRZUEVfSU5ULAkwLAk3LAkJCQkxLAkxLAkmZHJpdmUtPmx1biwJCQlOVUxMKTsKLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJ3Y2FjaGUiLAkJU0VUVElOR19SVywJCQkJCUhESU9fR0VUX1dDQUNIRSwJSERJT19TRVRfV0NBQ0hFLAlUWVBFX0JZVEUsCTAsCTEsCQkJCTEsCTEsCSZkcml2ZS0+d2NhY2hlLAkJCXdyaXRlX2NhY2hlKTsKLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJhY291c3RpYyIsCQlTRVRUSU5HX1JXLAkJCQkJSERJT19HRVRfQUNPVVNUSUMsCUhESU9fU0VUX0FDT1VTVElDLAlUWVBFX0JZVEUsCTAsCTI1NCwJCQkJMSwJMSwJJmRyaXZlLT5hY291c3RpYywJCXNldF9hY291c3RpYyk7Ci0gCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImZhaWx1cmVzIiwJCVNFVFRJTkdfUlcsCQkJCQktMSwJCQktMSwJCQlUWVBFX0lOVCwJMCwJNjU1MzUsCQkJCTEsCTEsCSZkcml2ZS0+ZmFpbHVyZXMsCQlOVUxMKTsKLSAJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkibWF4X2ZhaWx1cmVzIiwJCVNFVFRJTkdfUlcsCQkJCQktMSwJCQktMSwJCQlUWVBFX0lOVCwJMCwJNjU1MzUsCQkJCTEsCTEsCSZkcml2ZS0+bWF4X2ZhaWx1cmVzLAkJTlVMTCk7CisJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkiYmlvc19jeWwiLAlTRVRUSU5HX1JXLAlUWVBFX0lOVCwJMCwJNjU1MzUsCQkJMSwJMSwJJmRyaXZlLT5iaW9zX2N5bCwJTlVMTCk7CisJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkiYmlvc19oZWFkIiwJU0VUVElOR19SVywJVFlQRV9CWVRFLAkwLAkyNTUsCQkJMSwJMSwJJmRyaXZlLT5iaW9zX2hlYWQsCU5VTEwpOworCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImJpb3Nfc2VjdCIsCVNFVFRJTkdfUlcsCVRZUEVfQllURSwJMCwJNjMsCQkJMSwJMSwJJmRyaXZlLT5iaW9zX3NlY3QsCU5VTEwpOworCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImFkZHJlc3MiLAlTRVRUSU5HX1JXLAlUWVBFX0JZVEUsCTAsCTIsCQkJMSwJMSwJJmRyaXZlLT5hZGRyZXNzaW5nLAlzZXRfbGJhX2FkZHJlc3NpbmcpOworCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImJzd2FwIiwJU0VUVElOR19SRUFELAlUWVBFX0JZVEUsCTAsCTEsCQkJMSwJMSwJJmRyaXZlLT5ic3dhcCwJCU5VTEwpOworCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJIm11bHRjb3VudCIsCVNFVFRJTkdfUlcsCVRZUEVfQllURSwJMCwJaWQtPm1heF9tdWx0c2VjdCwJMSwJMSwJJmRyaXZlLT5tdWx0X2NvdW50LAlzZXRfbXVsdGNvdW50KTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJub3dlcnIiLAlTRVRUSU5HX1JXLAlUWVBFX0JZVEUsCTAsCTEsCQkJMSwJMSwJJmRyaXZlLT5ub3dlcnIsCQlzZXRfbm93ZXJyKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJsdW4iLAkJU0VUVElOR19SVywJVFlQRV9JTlQsCTAsCTcsCQkJMSwJMSwJJmRyaXZlLT5sdW4sCQlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJ3Y2FjaGUiLAlTRVRUSU5HX1JXLAlUWVBFX0JZVEUsCTAsCTEsCQkJMSwJMSwJJmRyaXZlLT53Y2FjaGUsCQl3cml0ZV9jYWNoZSk7CisJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkiYWNvdXN0aWMiLAlTRVRUSU5HX1JXLAlUWVBFX0JZVEUsCTAsCTI1NCwJCQkxLAkxLAkmZHJpdmUtPmFjb3VzdGljLAlzZXRfYWNvdXN0aWMpOworIAlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJmYWlsdXJlcyIsCVNFVFRJTkdfUlcsCVRZUEVfSU5ULAkwLAk2NTUzNSwJCQkxLAkxLAkmZHJpdmUtPmZhaWx1cmVzLAlOVUxMKTsKKyAJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkibWF4X2ZhaWx1cmVzIiwJU0VUVElOR19SVywJVFlQRV9JTlQsCTAsCTY1NTM1LAkJCTEsCTEsCSZkcml2ZS0+bWF4X2ZhaWx1cmVzLAlOVUxMKTsKIH0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlZGlza19hZGRfc2V0dGluZ3MoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGlkZWRpc2tfc2V0dXAgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKQEAgLTEwMDEsNyArMTAxNCw3IEBACiAJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZyA9IGlka3AtPmRpc2s7CiAKLQlpZGVfdW5yZWdpc3Rlcl9zdWJkcml2ZXIoZHJpdmUsIGlka3AtPmRyaXZlcik7CisJaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGlka3AtPmRyaXZlcik7CiAKIAlkZWxfZ2VuZGlzayhnKTsKIApAQCAtMTA2Niw3ICsxMDc5LDkgQEAKIAkuZW5kX3JlcXVlc3QJCT0gaWRlX2VuZF9yZXF1ZXN0LAogCS5lcnJvcgkJCT0gX19pZGVfZXJyb3IsCiAJLmFib3J0CQkJPSBfX2lkZV9hYm9ydCwKKyNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKIAkucHJvYwkJCT0gaWRlZGlza19wcm9jLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IGlkZWRpc2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTExNDAsOSArMTE1NSw0OSBAQAogc3RhdGljIGludCBpZGVkaXNrX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKIAlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rpc2tfZyhiZGV2LT5iZF9kaXNrKTsKLQlyZXR1cm4gZ2VuZXJpY19pZGVfaW9jdGwoaWRrcC0+ZHJpdmUsIGZpbGUsIGJkZXYsIGNtZCwgYXJnKTsKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKKwlpbnQgZXJyLCAoKnNldGZ1bmMpKGlkZV9kcml2ZV90ICosIGludCk7CisJdTggKnZhbDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBIRElPX0dFVF9BRERSRVNTOgkgdmFsID0gJmRyaXZlLT5hZGRyZXNzaW5nOwlnb3RvIHJlYWRfdmFsOworCWNhc2UgSERJT19HRVRfTVVMVENPVU5UOiB2YWwgPSAmZHJpdmUtPm11bHRfY291bnQ7CWdvdG8gcmVhZF92YWw7CisJY2FzZSBIRElPX0dFVF9OT1dFUlI6CSB2YWwgPSAmZHJpdmUtPm5vd2VycjsJCWdvdG8gcmVhZF92YWw7CisJY2FzZSBIRElPX0dFVF9XQ0FDSEU6CSB2YWwgPSAmZHJpdmUtPndjYWNoZTsJCWdvdG8gcmVhZF92YWw7CisJY2FzZSBIRElPX0dFVF9BQ09VU1RJQzoJIHZhbCA9ICZkcml2ZS0+YWNvdXN0aWM7CWdvdG8gcmVhZF92YWw7CisJY2FzZSBIRElPX1NFVF9BRERSRVNTOgkgc2V0ZnVuYyA9IHNldF9sYmFfYWRkcmVzc2luZzsJZ290byBzZXRfdmFsOworCWNhc2UgSERJT19TRVRfTVVMVENPVU5UOiBzZXRmdW5jID0gc2V0X211bHRjb3VudDsJZ290byBzZXRfdmFsOworCWNhc2UgSERJT19TRVRfTk9XRVJSOgkgc2V0ZnVuYyA9IHNldF9ub3dlcnI7CQlnb3RvIHNldF92YWw7CisJY2FzZSBIRElPX1NFVF9XQ0FDSEU6CSBzZXRmdW5jID0gd3JpdGVfY2FjaGU7CQlnb3RvIHNldF92YWw7CisJY2FzZSBIRElPX1NFVF9BQ09VU1RJQzoJIHNldGZ1bmMgPSBzZXRfYWNvdXN0aWM7CWdvdG8gc2V0X3ZhbDsKKwl9CisKKwlyZXR1cm4gZ2VuZXJpY19pZGVfaW9jdGwoZHJpdmUsIGZpbGUsIGJkZXYsIGNtZCwgYXJnKTsKKworcmVhZF92YWw6CisJZG93bigmaWRlX3NldHRpbmdfc2VtKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwllcnIgPSAqdmFsOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJdXAoJmlkZV9zZXR0aW5nX3NlbSk7CisJcmV0dXJuIGVyciA+PSAwID8gcHV0X3VzZXIoZXJyLCAobG9uZyBfX3VzZXIgKilhcmcpIDogZXJyOworCitzZXRfdmFsOgorCWlmIChiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKQorCQllcnIgPSAtRUlOVkFMOworCWVsc2UgeworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQllcnIgPSAtRUFDQ0VTOworCQllbHNlIHsKKwkJCWRvd24oJmlkZV9zZXR0aW5nX3NlbSk7CisJCQllcnIgPSBzZXRmdW5jKGRyaXZlLCBhcmcpOworCQkJdXAoJmlkZV9zZXR0aW5nX3NlbSk7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBpZGVkaXNrX21lZGlhX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2spCkBAIC0xMjAyLDcgKzEyNTcsNyBAQAogCiAJaWRlX2luaXRfZGlzayhnLCBkcml2ZSk7CiAKLQlpZGVfcmVnaXN0ZXJfc3ViZHJpdmVyKGRyaXZlLCAmaWRlZGlza19kcml2ZXIpOworCWlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihkcml2ZSwgJmlkZWRpc2tfZHJpdmVyKTsKIAogCWtyZWZfaW5pdCgmaWRrcC0+a3JlZik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwppbmRleCBmZDIxMzA4Li5lYWQxNDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCkBAIC0xMTksMTUgKzExOSwxNyBAQAogCXsgIkhJVEFDSEkgQ0RSLTgzMzUiCSwJIkFMTCIJCX0sCiAJeyAiSElUQUNISSBDRFItODQzNSIJLAkiQUxMIgkJfSwKIAl7ICJUb3NoaWJhIENELVJPTSBYTS02MjAyQiIJLAkiQUxMIgkJfSwKKwl7ICJUT1NISUJBIENELVJPTSBYTS0xNzAyQkMiLAkiQUxMIgkJfSwKIAl7ICJDRC01MzJFLUEiCQksCSJBTEwiCQl9LAogCXsgIkUtSURFIENELVJPTSBDUi04NDAiLAkiQUxMIgkJfSwKIAl7ICJDRC1ST00gRHJpdmUvRjVBIiwJIkFMTCIJCX0sCiAJeyAiV1BJIENERC04MjAiLAkJIkFMTCIJCX0sCiAJeyAiU0FNU1VORyBDRC1ST00gU0MtMTQ4QyIsCSJBTEwiCQl9LAogCXsgIlNBTVNVTkcgQ0QtUk9NIFNDIiwJIkFMTCIJCX0sCi0JeyAiU2FuRGlzayBTRFAzQi02NCIJLAkiQUxMIgkJfSwKIAl7ICJBVEFQSSBDRC1ST00gRFJJVkUgNDBYIE1BWElNVU0iLAkiQUxMIgkJfSwKIAl7ICJfTkVDIERWNTgwMEEiLCAgICAgICAgICAgICAgICJBTEwiICAgICAgICAgICB9LCAgCisJeyAiU0FNU1VORyBDRC1ST00gU04tMTI0IiwJIk4wMDEiIH0sCisJeyAiU2VhZ2F0ZSBTVFQyMDAwMEEiLAkJIkFMTCIgfSwKIAl7IE5VTEwJCQksCU5VTEwJCX0KIAogfTsKQEAgLTY3MCw0MCArNjcyLDEwNSBAQAogCiBFWFBPUlRfU1lNQk9MKF9faWRlX2RtYV9nb29kX2RyaXZlKTsKIAotaW50IGlkZV91c2VfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBjb25zdCB1OCB4ZmVyX21vZGVfYmFzZXNbXSA9IHsKKwlYRkVSX1VETUFfMCwKKwlYRkVSX01XX0RNQV8wLAorCVhGRVJfU1dfRE1BXzAsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGlkZV9nZXRfbW9kZV9tYXNrKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggYmFzZSkKIHsKIAlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQgPSBkcml2ZS0+aWQ7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAotCWlmICgoaWQtPmNhcGFiaWxpdHkgJiAxKSA9PSAwIHx8IGRyaXZlLT5hdXRvZG1hID09IDApCisJc3dpdGNoKGJhc2UpIHsKKwljYXNlIFhGRVJfVURNQV8wOgorCQlpZiAoKGlkLT5maWVsZF92YWxpZCAmIDQpID09IDApCisJCQlicmVhazsKKworCQltYXNrID0gaWQtPmRtYV91bHRyYSAmIGh3aWYtPnVsdHJhX21hc2s7CisKKwkJaWYgKGh3aWYtPnVkbWFfZmlsdGVyKQorCQkJbWFzayAmPSBod2lmLT51ZG1hX2ZpbHRlcihkcml2ZSk7CisKKwkJaWYgKChtYXNrICYgMHg3OCkgJiYgKGVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkgPT0gMCkpCisJCQltYXNrICY9IDB4MDc7CisJCWJyZWFrOworCWNhc2UgWEZFUl9NV19ETUFfMDoKKwkJaWYgKGlkLT5maWVsZF92YWxpZCAmIDIpCisJCQltYXNrID0gaWQtPmRtYV9td29yZCAmIGh3aWYtPm13ZG1hX21hc2s7CisJCWJyZWFrOworCWNhc2UgWEZFUl9TV19ETUFfMDoKKwkJaWYgKGlkLT5maWVsZF92YWxpZCAmIDIpCisJCQltYXNrID0gaWQtPmRtYV8xd29yZCAmIGh3aWYtPnN3ZG1hX21hc2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbWFzazsKK30KKworLyoqCisgKglpZGVfbWF4X2RtYV9tb2RlCS0JY29tcHV0ZSBETUEgc3BlZWQKKyAqCUBkcml2ZTogSURFIGRldmljZQorICoKKyAqCUNoZWNrcyB0aGUgZHJpdmUgY2FwYWJpbGl0aWVzIGFuZCByZXR1cm5zIHRoZSBzcGVlZCB0byB1c2UKKyAqCWZvciB0aGUgRE1BIHRyYW5zZmVyLiAgUmV0dXJucyAwIGlmIHRoZSBkcml2ZSBpcyBpbmNhcGFibGUKKyAqCW9mIERNQSB0cmFuc2ZlcnMuCisgKi8KKwordTggaWRlX21heF9kbWFfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXVuc2lnbmVkIGludCBtYXNrOworCWludCB4LCBpOworCXU4IG1vZGUgPSAwOworCisJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayAmJiBod2lmLT5hdGFwaV9kbWEgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4ZmVyX21vZGVfYmFzZXMpOyBpKyspIHsKKwkJbWFzayA9IGlkZV9nZXRfbW9kZV9tYXNrKGRyaXZlLCB4ZmVyX21vZGVfYmFzZXNbaV0pOworCQl4ID0gZmxzKG1hc2spIC0gMTsKKwkJaWYgKHggPj0gMCkgeworCQkJbW9kZSA9IHhmZXJfbW9kZV9iYXNlc1tpXSArIHg7CisJCQlicmVhazsKKwkJfQorCX0KKworCXByaW50ayhLRVJOX0RFQlVHICIlczogc2VsZWN0ZWQgbW9kZSAweCV4XG4iLCBkcml2ZS0+bmFtZSwgbW9kZSk7CisKKwlyZXR1cm4gbW9kZTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaWRlX21heF9kbWFfbW9kZSk7CisKK2ludCBpZGVfdHVuZV9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXU4IHNwZWVkOworCisJaWYgKChkcml2ZS0+aWQtPmNhcGFiaWxpdHkgJiAxKSA9PSAwIHx8IGRyaXZlLT5hdXRvZG1hID09IDApCiAJCXJldHVybiAwOwogCiAJLyogY29uc3VsdCB0aGUgbGlzdCBvZiBrbm93biAiYmFkIiBkcml2ZXMgKi8KIAlpZiAoX19pZGVfZG1hX2JhZF9kcml2ZShkcml2ZSkpCiAJCXJldHVybiAwOwogCi0JLyogY2FwYWJsZSBvZiBVbHRyYURNQSBtb2RlcyAqLwotCWlmIChpZC0+ZmllbGRfdmFsaWQgJiA0KSB7Ci0JCWlmIChod2lmLT51bHRyYV9tYXNrICYgaWQtPmRtYV91bHRyYSkKLQkJCXJldHVybiAxOwotCX0KKwlzcGVlZCA9IGlkZV9tYXhfZG1hX21vZGUoZHJpdmUpOwogCi0JLyogY2FwYWJsZSBvZiByZWd1bGFyIERNQSBtb2RlcyAqLwotCWlmIChpZC0+ZmllbGRfdmFsaWQgJiAyKSB7Ci0JCWlmIChod2lmLT5td2RtYV9tYXNrICYgaWQtPmRtYV9td29yZCkKLQkJCXJldHVybiAxOwotCQlpZiAoaHdpZi0+c3dkbWFfbWFzayAmIGlkLT5kbWFfMXdvcmQpCi0JCQlyZXR1cm4gMTsKLQl9CisJaWYgKCFzcGVlZCkKKwkJcmV0dXJuIDA7CiAKLQkvKiBjb25zdWx0IHRoZSBsaXN0IG9mIGtub3duICJnb29kIiBkcml2ZXMgKi8KLQlpZiAoX19pZGVfZG1hX2dvb2RfZHJpdmUoZHJpdmUpICYmIGlkLT5laWRlX2RtYV90aW1lIDwgMTUwKQotCQlyZXR1cm4gMTsKKwlpZiAoZHJpdmUtPmh3aWYtPnNwZWVkcHJvYyhkcml2ZSwgc3BlZWQpKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChpZGVfdXNlX2RtYSk7CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfdHVuZV9kbWEpOwogCiB2b2lkIGlkZV9kbWFfdmVyYm9zZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggNTdjZDIxYy4uZjQyOWJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtMTgxMSwxOCArMTgxMSwyMiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiBzdGF0aWMgdm9pZCBpZGVmbG9wcHlfYWRkX3NldHRpbmdzKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAogLyoKLSAqCQkJZHJpdmUJc2V0dGluZyBuYW1lCXJlYWQvd3JpdGUJaW9jdGwJaW9jdGwJCWRhdGEgdHlwZQltaW4JbWF4CW11bF9mYWN0b3IJZGl2X2ZhY3RvcglkYXRhIHBvaW50ZXIJCXNldCBmdW5jdGlvbgorICoJCQlkcml2ZQlzZXR0aW5nIG5hbWUJcmVhZC93cml0ZQlkYXRhIHR5cGUJbWluCW1heAltdWxfZmFjdG9yCWRpdl9mYWN0b3IJZGF0YSBwb2ludGVyCQlzZXQgZnVuY3Rpb24KICAqLwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImJpb3NfY3lsIiwJCVNFVFRJTkdfUlcsCQkJCQktMSwJCQktMSwJCQlUWVBFX0lOVCwJMCwJMTAyMywJCQkJMSwJMSwJJmRyaXZlLT5iaW9zX2N5bCwJCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImJpb3NfaGVhZCIsCQlTRVRUSU5HX1JXLAkJCQkJLTEsCQkJLTEsCQkJVFlQRV9CWVRFLAkwLAkyNTUsCQkJCTEsCTEsCSZkcml2ZS0+Ymlvc19oZWFkLAkJTlVMTCk7Ci0JaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkiYmlvc19zZWN0IiwJCVNFVFRJTkdfUlcsCQkJCQktMSwJCQktMSwJCQlUWVBFX0JZVEUsCTAsCTYzLAkJCQkxLAkxLAkmZHJpdmUtPmJpb3Nfc2VjdCwJCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJInRpY2tzIiwJCVNFVFRJTkdfUlcsCQkJCQktMSwJCQktMSwJCQlUWVBFX0JZVEUsCTAsCTI1NSwJCQkJMSwJMSwJJmZsb3BweS0+dGlja3MsCQlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJiaW9zX2N5bCIsCVNFVFRJTkdfUlcsCVRZUEVfSU5ULAkwLAkxMDIzLAkJMSwJCTEsCSZkcml2ZS0+Ymlvc19jeWwsCU5VTEwpOworCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImJpb3NfaGVhZCIsCVNFVFRJTkdfUlcsCVRZUEVfQllURSwJMCwJMjU1LAkJMSwJCTEsCSZkcml2ZS0+Ymlvc19oZWFkLAlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJiaW9zX3NlY3QiLAlTRVRUSU5HX1JXLAlUWVBFX0JZVEUsCTAsCTYzLAkJMSwJCTEsCSZkcml2ZS0+Ymlvc19zZWN0LAlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJ0aWNrcyIsCVNFVFRJTkdfUlcsCVRZUEVfQllURSwJMCwJMjU1LAkJMSwJCTEsCSZmbG9wcHktPnRpY2tzLAkJTlVMTCk7CiB9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGlkZWZsb3BweV9hZGRfc2V0dGluZ3MoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQorI2VuZGlmCiAKIC8qCiAgKglEcml2ZXIgaW5pdGlhbGl6YXRpb24uCkBAIC0xODczLDcgKzE4NzcsNyBAQAogCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBnZW5kaXNrICpnID0gZmxvcHB5LT5kaXNrOwogCi0JaWRlX3VucmVnaXN0ZXJfc3ViZHJpdmVyKGRyaXZlLCBmbG9wcHktPmRyaXZlcik7CisJaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGZsb3BweS0+ZHJpdmVyKTsKIAogCWRlbF9nZW5kaXNrKGcpOwogCkBAIC0xODkyLDggKzE4OTYsNyBAQAogCWtmcmVlKGZsb3BweSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiBzdGF0aWMgaW50IHByb2NfaWRlZmxvcHB5X3JlYWRfY2FwYWNpdHkKIAkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7CkBAIC0xOTA5LDEyICsxOTEyLDcgQEAKIAl7ICJnZW9tZXRyeSIsCVNfSUZSRUd8U19JUlVHTywJcHJvY19pZGVfcmVhZF9nZW9tZXRyeSwJTlVMTCB9LAogCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9CiB9OwotCi0jZWxzZQotCi0jZGVmaW5lCWlkZWZsb3BweV9wcm9jCU5VTEwKLQotI2VuZGlmCS8qIENPTkZJR19QUk9DX0ZTICovCisjZW5kaWYJLyogQ09ORklHX0lERV9QUk9DX0ZTICovCiAKIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9wcm9iZShpZGVfZHJpdmVfdCAqKTsKIApAQCAtMTkzMyw3ICsxOTMxLDkgQEAKIAkuZW5kX3JlcXVlc3QJCT0gaWRlZmxvcHB5X2RvX2VuZF9yZXF1ZXN0LAogCS5lcnJvcgkJCT0gX19pZGVfZXJyb3IsCiAJLmFib3J0CQkJPSBfX2lkZV9hYm9ydCwKKyNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKIAkucHJvYwkJCT0gaWRlZmxvcHB5X3Byb2MsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgaWRlZmxvcHB5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCkBAIC0yMTU5LDcgKzIxNTksNyBAQAogCiAJaWRlX2luaXRfZGlzayhnLCBkcml2ZSk7CiAKLQlpZGVfcmVnaXN0ZXJfc3ViZHJpdmVyKGRyaXZlLCAmaWRlZmxvcHB5X2RyaXZlcik7CisJaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCAmaWRlZmxvcHB5X2RyaXZlcik7CiAKIAlrcmVmX2luaXQoJmZsb3BweS0+a3JlZik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMgYi9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jCmluZGV4IDk5ZmQ1NjEuLjBmNzJiOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYwpAQCAtMjIsOCArMjIsNiBAQAogCWlmIChpZGVfaHdpZnNbMF0uaW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSkKIAkJaWRlX3JlbGVhc2VfbG9jaygpOwkvKiBmb3IgYXRhcmkgb25seSAqLwogCi0JY3JlYXRlX3Byb2NfaWRlX2ludGVyZmFjZXMoKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8uYyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCmluZGV4IDg2NzAxMTIuLmJmZThmMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCkBAIC0xNzIsMTUgKzE3Miw2IEBACiAKIAltZW1zZXQoYXJncywgMCwgc2l6ZW9mKCphcmdzKSk7CiAKLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKSB7Ci0JCS8qCi0JCSAqIHNraXAgaWRlZGlza19wbV9yZXN0b3JlX3BpbyBhbmQgaWRlZGlza19wbV9pZGxlIGZvciBBVEFQSQotCQkgKiBkZXZpY2VzCi0JCSAqLwotCQlpZiAocG0tPnBtX3N0ZXAgPT0gaWRlZGlza19wbV9yZXN0b3JlX3BpbykKLQkJCXBtLT5wbV9zdGVwID0gaWRlX3BtX3Jlc3RvcmVfZG1hOwotCX0KLQogCXN3aXRjaCAocG0tPnBtX3N0ZXApIHsKIAljYXNlIGlkZV9wbV9mbHVzaF9jYWNoZToJLyogU3VzcGVuZCBzdGVwIDEgKGZsdXNoIGNhY2hlKSAqLwogCQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQpAQCAtMjA3LDcgKzE5OCwxMyBAQAogCWNhc2UgaWRlZGlza19wbV9yZXN0b3JlX3BpbzoJLyogUmVzdW1lIHN0ZXAgMSAocmVzdG9yZSBQSU8pICovCiAJCWlmIChkcml2ZS0+aHdpZi0+dHVuZXByb2MgIT0gTlVMTCkKIAkJCWRyaXZlLT5od2lmLT50dW5lcHJvYyhkcml2ZSwgMjU1KTsKLQkJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxLCAwLCAwKTsKKwkJLyoKKwkJICogc2tpcCBpZGVkaXNrX3BtX2lkbGUgZm9yIEFUQVBJIGRldmljZXMKKwkJICovCisJCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spCisJCQlwbS0+cG1fc3RlcCA9IGlkZV9wbV9yZXN0b3JlX2RtYTsKKwkJZWxzZQorCQkJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxLCAwLCAwKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCiAJY2FzZSBpZGVkaXNrX3BtX2lkbGU6CQkvKiBSZXN1bWUgc3RlcCAyIChpZGxlKSAqLwpAQCAtMjI2LDYgKzIyMyw3IEBACiAJCQlicmVhazsKIAkJaWYgKGRyaXZlLT5od2lmLT5pZGVfZG1hX2NoZWNrID09IE5VTEwpCiAJCQlicmVhazsKKwkJZHJpdmUtPmh3aWYtPmRtYV9vZmZfcXVpZXRseShkcml2ZSk7CiAJCWlkZV9zZXRfZG1hKGRyaXZlKTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKaW5kZXggM2NhYTE3Ni4uZjBiZTVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCkBAIC01NzEsNTEgKzU3MSw1NCBAQAogICovCiB1OCBlaWdodHlfbmludHlfdGhyZWUgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZihIV0lGKGRyaXZlKS0+dWRtYV9mb3VyID09IDApCi0JCXJldHVybiAwOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQgPSBkcml2ZS0+aWQ7CisKKwlpZiAoaHdpZi0+dWRtYV9mb3VyID09IDApCisJCWdvdG8gbm9fODB3OwogCiAJLyogQ2hlY2sgZm9yIFNBVEEgYnV0IG9ubHkgaWYgd2UgYXJlIEFUQTUgb3IgaGlnaGVyICovCi0JaWYgKGRyaXZlLT5pZC0+aHdfY29uZmlnID09IDAgJiYgKGRyaXZlLT5pZC0+bWFqb3JfcmV2X251bSAmIDB4N0ZFMCkpCisJaWYgKGlkLT5od19jb25maWcgPT0gMCAmJiAoaWQtPm1ham9yX3Jldl9udW0gJiAweDdGRTApKQogCQlyZXR1cm4gMTsKLQlpZiAoIShkcml2ZS0+aWQtPmh3X2NvbmZpZyAmIDB4NjAwMCkpCi0JCXJldHVybiAwOwotI2lmbmRlZiBDT05GSUdfSURFRE1BX0lWQgotCWlmKCEoZHJpdmUtPmlkLT5od19jb25maWcgJiAweDQwMDApKQotCQlyZXR1cm4gMDsKLSNlbmRpZiAvKiBDT05GSUdfSURFRE1BX0lWQiAqLworCiAJLyoKIAkgKiBGSVhNRToKIAkgKiAtIGNoYW5nZSBtYXN0ZXIvc2xhdmUgSURFTlRJRlkgb3JkZXIKIAkgKiAtIGZvcmNlIGJpdDEzICg4MGMgY2FibGUgcHJlc2VudCkgY2hlY2sKIAkgKiAgICh1bmxlc3MgdGhlIHNsYXZlIGRldmljZSBpcyBwcmUtQVRBMykKIAkgKi8KLQlyZXR1cm4gMTsKLX0KKyNpZm5kZWYgQ09ORklHX0lERURNQV9JVkIKKwlpZiAoaWQtPmh3X2NvbmZpZyAmIDB4NDAwMCkKKyNlbHNlCisJaWYgKGlkLT5od19jb25maWcgJiAweDYwMDApCisjZW5kaWYKKwkJcmV0dXJuIDE7CiAKLUVYUE9SVF9TWU1CT0woZWlnaHR5X25pbnR5X3RocmVlKTsKK25vXzgwdzoKKwlpZiAoZHJpdmUtPnVkbWEzM193YXJuZWQgPT0gMSkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMgc2lkZSA4MC13aXJlIGNhYmxlIGRldGVjdGlvbiBmYWlsZWQsICIKKwkJCSAgICAibGltaXRpbmcgbWF4IHNwZWVkIHRvIFVETUEzM1xuIiwKKwkJCSAgICBkcml2ZS0+bmFtZSwgaHdpZi0+dWRtYV9mb3VyID8gImRyaXZlIiA6ICJob3N0Iik7CisKKwlkcml2ZS0+dWRtYTMzX3dhcm5lZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KIAogaW50IGlkZV9hdGE2Nl9jaGVjayAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICphcmdzKQogewogCWlmICgoYXJncy0+dGZSZWdpc3RlcltJREVfQ09NTUFORF9PRkZTRVRdID09IFdJTl9TRVRGRUFUVVJFUykgJiYKIAkgICAgKGFyZ3MtPnRmUmVnaXN0ZXJbSURFX1NFQ1RPUl9PRkZTRVRdID4gWEZFUl9VRE1BXzIpICYmCiAJICAgIChhcmdzLT50ZlJlZ2lzdGVyW0lERV9GRUFUVVJFX09GRlNFVF0gPT0gU0VURkVBVFVSRVNfWEZFUikpIHsKLSNpZm5kZWYgQ09ORklHX0lERURNQV9JVkIKLQkJaWYgKChkcml2ZS0+aWQtPmh3X2NvbmZpZyAmIDB4NjAwMCkgPT0gMCkgewotI2Vsc2UgLyogIUNPTkZJR19JREVETUFfSVZCICovCi0JCWlmICgoKGRyaXZlLT5pZC0+aHdfY29uZmlnICYgMHgyMDAwKSA9PSAwKSB8fAotCQkgICAgKChkcml2ZS0+aWQtPmh3X2NvbmZpZyAmIDB4NDAwMCkgPT0gMCkpIHsKLSNlbmRpZiAvKiBDT05GSUdfSURFRE1BX0lWQiAqLwotCQkJcHJpbnRrKCIlczogU3BlZWQgd2FybmluZ3MgVURNQSAzLzQvNSBpcyBub3QgIgotCQkJCSJmdW5jdGlvbmFsLlxuIiwgZHJpdmUtPm5hbWUpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJaWYgKCFIV0lGKGRyaXZlKS0+dWRtYV9mb3VyKSB7Ci0JCQlwcmludGsoIiVzOiBTcGVlZCB3YXJuaW5ncyBVRE1BIDMvNC81IGlzIG5vdCAiCi0JCQkJImZ1bmN0aW9uYWwuXG4iLAotCQkJCUhXSUYoZHJpdmUpLT5uYW1lKTsKKwkJaWYgKGVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkgPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVETUEgc3BlZWRzID5VRE1BMzMgY2Fubm90ICIKKwkJCQkJICAgICJiZSBzZXRcbiIsIGRyaXZlLT5uYW1lKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwppbmRleCA2ODcxOTMxLi4wNzRiYjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCkBAIC02OSwxMjMgKzY5LDQxIEBACiBFWFBPUlRfU1lNQk9MKGlkZV94ZmVyX3ZlcmJvc2UpOwogCiAvKioKLSAqCWlkZV9kbWFfc3BlZWQJLQljb21wdXRlIERNQSBzcGVlZAotICoJQGRyaXZlOiBkcml2ZQotICoJQG1vZGU6CW1vZGVzIGF2YWlsYWJsZQotICoKLSAqCUNoZWNrcyB0aGUgZHJpdmUgY2FwYWJpbGl0aWVzIGFuZCByZXR1cm5zIHRoZSBzcGVlZCB0byB1c2UKLSAqCWZvciB0aGUgRE1BIHRyYW5zZmVyLiAgUmV0dXJucyAwIGlmIHRoZSBkcml2ZSBpcyBpbmNhcGFibGUKLSAqCW9mIERNQSB0cmFuc2ZlcnMuCi0gKi8KLSAKLXU4IGlkZV9kbWFfc3BlZWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBtb2RlKQotewotCXN0cnVjdCBoZF9kcml2ZWlkICppZCAgID0gZHJpdmUtPmlkOwotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQl1OCB1bHRyYV9tYXNrLCBtd2RtYV9tYXNrLCBzd2RtYV9tYXNrOwotCXU4IHNwZWVkID0gMDsKLQotCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2sgJiYgaHdpZi0+YXRhcGlfZG1hID09IDApCi0JCXJldHVybiAwOwotCi0JLyogQ2FwYWJsZSBvZiBVbHRyYURNQSBtb2Rlcz8gKi8KLQl1bHRyYV9tYXNrID0gaWQtPmRtYV91bHRyYSAmIGh3aWYtPnVsdHJhX21hc2s7Ci0KLQlpZiAoIShpZC0+ZmllbGRfdmFsaWQgJiA0KSkKLQkJbW9kZSA9IDA7CS8qIGZhbGxiYWNrIHRvIE1XL1NXIERNQSBpZiBubyBVbHRyYURNQSAqLwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSA0OgotCQlpZiAodWx0cmFfbWFzayAmIDB4NDApIHsKLQkJCXNwZWVkID0gWEZFUl9VRE1BXzY7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgMzoKLQkJaWYgKHVsdHJhX21hc2sgJiAweDIwKSB7Ci0JCQlzcGVlZCA9IFhGRVJfVURNQV81OwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIDI6Ci0JCWlmICh1bHRyYV9tYXNrICYgMHgxMCkgewotCQkJc3BlZWQgPSBYRkVSX1VETUFfNDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICh1bHRyYV9tYXNrICYgMHgwOCkgewotCQkJc3BlZWQgPSBYRkVSX1VETUFfMzsKLQkJCWJyZWFrOwotCQl9Ci0JY2FzZSAxOgotCQlpZiAodWx0cmFfbWFzayAmIDB4MDQpIHsKLQkJCXNwZWVkID0gWEZFUl9VRE1BXzI7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAodWx0cmFfbWFzayAmIDB4MDIpIHsKLQkJCXNwZWVkID0gWEZFUl9VRE1BXzE7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAodWx0cmFfbWFzayAmIDB4MDEpIHsKLQkJCXNwZWVkID0gWEZFUl9VRE1BXzA7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgMDoKLQkJbXdkbWFfbWFzayA9IGlkLT5kbWFfbXdvcmQgJiBod2lmLT5td2RtYV9tYXNrOwotCi0JCWlmIChtd2RtYV9tYXNrICYgMHgwNCkgewotCQkJc3BlZWQgPSBYRkVSX01XX0RNQV8yOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG13ZG1hX21hc2sgJiAweDAyKSB7Ci0JCQlzcGVlZCA9IFhGRVJfTVdfRE1BXzE7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAobXdkbWFfbWFzayAmIDB4MDEpIHsKLQkJCXNwZWVkID0gWEZFUl9NV19ETUFfMDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc3dkbWFfbWFzayA9IGlkLT5kbWFfMXdvcmQgJiBod2lmLT5zd2RtYV9tYXNrOwotCi0JCWlmIChzd2RtYV9tYXNrICYgMHgwNCkgewotCQkJc3BlZWQgPSBYRkVSX1NXX0RNQV8yOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN3ZG1hX21hc2sgJiAweDAyKSB7Ci0JCQlzcGVlZCA9IFhGRVJfU1dfRE1BXzE7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3dkbWFfbWFzayAmIDB4MDEpIHsKLQkJCXNwZWVkID0gWEZFUl9TV19ETUFfMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHNwZWVkOwotfQotRVhQT1JUX1NZTUJPTChpZGVfZG1hX3NwZWVkKTsKLQotCi0vKioKLSAqCWlkZV9yYXRlX2ZpbHRlcgkJLQlyZXR1cm4gYmVzdCBzcGVlZCBmb3IgbW9kZQotICoJQG1vZGU6IG1vZGVzIGF2YWlsYWJsZQorICoJaWRlX3JhdGVfZmlsdGVyCQktCWZpbHRlciB0cmFuc2ZlciBtb2RlCisgKglAZHJpdmU6IElERSBkZXZpY2UKICAqCUBzcGVlZDogZGVzaXJlZCBzcGVlZAogICoKLSAqCUdpdmVuIHRoZSBhdmFpbGFibGUgRE1BL1VETUEgbW9kZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqCUdpdmVuIHRoZSBhdmFpbGFibGUgdHJhbnNmZXIgbW9kZXMgdGhpcyBmdW5jdGlvbiByZXR1cm5zCiAgKgl0aGUgYmVzdCBhdmFpbGFibGUgc3BlZWQgYXQgb3IgYmVsb3cgdGhlIHNwZWVkIHJlcXVlc3RlZC4KKyAqCisgKglGSVhNRTogZmlsdGVyIGFsc28gUElPL1NXRE1BL01XRE1BIG1vZGVzCiAgKi8KIAotdTggaWRlX3JhdGVfZmlsdGVyICh1OCBtb2RlLCB1OCBzcGVlZCkgCit1OCBpZGVfcmF0ZV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkKIHsKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUEKLQlzdGF0aWMgdTggc3BlZWRfbWF4W10gPSB7Ci0JCVhGRVJfTVdfRE1BXzIsIFhGRVJfVURNQV8yLCBYRkVSX1VETUFfNCwKLQkJWEZFUl9VRE1BXzUsIFhGRVJfVURNQV82Ci0JfTsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggbWFzayA9IGh3aWYtPnVsdHJhX21hc2ssIG1vZGUgPSBYRkVSX01XX0RNQV8yOworCisJaWYgKGh3aWYtPnVkbWFfZmlsdGVyKQorCQltYXNrID0gaHdpZi0+dWRtYV9maWx0ZXIoZHJpdmUpOworCisJLyoKKwkgKiBUT0RPOiBzcGVlZCA+IFhGRVJfVURNQV8yIGV4dHJhIGNoZWNrIGlzIG5lZWRlZCB0byBhdm9pZCBmYWxzZQorCSAqIGNhYmxlIHdhcm5pbmcgZnJvbSBlaWdodHlfbmludHlfdGhyZWUoKSwgbW92aW5nIGlkZV9yYXRlX2ZpbHRlcigpCisJICogY2FsbHMgZnJvbSAtPnNwZWVkcHJvYyB0byBjb3JlIGNvZGUgd2lsbCBtYWtlIHRoaXMgaGFjayBnbyBhd2F5CisJICovCisJaWYgKHNwZWVkID4gWEZFUl9VRE1BXzIpIHsKKwkJaWYgKChtYXNrICYgMHg3OCkgJiYgKGVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkgPT0gMCkpCisJCQltYXNrICY9IDB4MDc7CisJfQorCisJaWYgKG1hc2spCisJCW1vZGUgPSBmbHMobWFzaykgLSAxICsgWEZFUl9VRE1BXzA7CiAKIC8vCXByaW50aygiJXM6IG1vZGUgMHglMDJ4LCBzcGVlZCAweCUwMnhcbiIsIF9fRlVOQ1RJT05fXywgbW9kZSwgc3BlZWQpOwogCi0JLyogU28gdGhhdCB3ZSByZW1lbWJlciB0byB1cGRhdGUgdGhpcyBpZiBuZXcgbW9kZXMgYXBwZWFyICovCi0JQlVHX09OKG1vZGUgPiA0KTsKLQlyZXR1cm4gbWluKHNwZWVkLCBzcGVlZF9tYXhbbW9kZV0pOworCXJldHVybiBtaW4oc3BlZWQsIG1vZGUpOwogI2Vsc2UgLyogIUNPTkZJR19CTEtfREVWX0lERURNQSAqLwogCXJldHVybiBtaW4oc3BlZWQsICh1OClYRkVSX1BJT180KTsKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUEgKi8KQEAgLTE5MywxOCArMTExLDYgQEAKIAogRVhQT1JUX1NZTUJPTChpZGVfcmF0ZV9maWx0ZXIpOwogCi1pbnQgaWRlX2RtYV9lbmFibGUgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0Jc3RydWN0IGhkX2RyaXZlaWQgKmlkCT0gZHJpdmUtPmlkOwotCi0JcmV0dXJuICgoaW50KQkoKCgoaWQtPmRtYV91bHRyYSA+PiA4KSAmIGh3aWYtPnVsdHJhX21hc2spIHx8Ci0JCQkgICgoaWQtPmRtYV9td29yZCA+PiA4KSAmIGh3aWYtPm13ZG1hX21hc2spIHx8Ci0JCQkgICgoaWQtPmRtYV8xd29yZCA+PiA4KSAmIGh3aWYtPnN3ZG1hX21hc2spKSA/IDEgOiAwKSk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woaWRlX2RtYV9lbmFibGUpOwotCiBpbnQgaWRlX3VzZV9mYXN0X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IGhkX2RyaXZlaWQgKmlkID0gZHJpdmUtPmlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBucC5jIGIvZHJpdmVycy9pZGUvaWRlLXBucC5jCmluZGV4IDk4NDEwY2EuLjJiODAwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wbnAuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcG5wLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAlody5pcnEgPSBwbnBfaXJxKGRldiwgMCk7CiAJaHcuZG1hID0gTk9fRE1BOwogCi0JaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAmaHdpZik7CisJaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAxLCAmaHdpZik7CiAKIAlpZiAoaW5kZXggIT0gLTEpIHsKIAkgICAgCXByaW50ayhLRVJOX0lORk8gImlkZSVkOiBnZW5lcmljIFBuUCBJREUgaW50ZXJmYWNlXG4iLCBpbmRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IDhmMTVjMjMuLjNjZWJlZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC0xNDI3LDYgKzE0MjcsOSBAQAogCQkJCX0KIAkJfQogCX0KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNQVhfSFdJRlM7ICsraW5kZXgpCisJCWlmIChwcm9iZVtpbmRleF0pCisJCQlpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KCZpZGVfaHdpZnNbaW5kZXhdKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKaW5kZXggYTllMGIzMC4uZWE5NGM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCkBAIC0zLDYgKzMsOCBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OAlNYXJrIExvcmQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMJCVJlZCBIYXQgPGFsYW5AcmVkaGF0LmNvbT4KKyAqCisgKiAgU29tZSBjb2RlIHdhcyBtb3ZlZCBoZXJlIGZyb20gaWRlLmMsIHNlZSBpdCBmb3Igb3JpZ2luYWwgY29weXJpZ2h0cy4KICAqLwogCiAvKgpAQCAtMzcsNiArMzksOCBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfaWRlX3Jvb3Q7CisKIHN0YXRpYyBpbnQgcHJvY19pZGVfcmVhZF9pbW9kZWwKIAkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7CkBAIC02Myw2ICs2Nyw4IEBACiAJCWNhc2UgaWRlXzRkcml2ZXM6CW5hbWUgPSAiNGRyaXZlcyI7CWJyZWFrOwogCQljYXNlIGlkZV9wbWFjOgkJbmFtZSA9ICJtYWMtaW8iOwlicmVhazsKIAkJY2FzZSBpZGVfYXUxeHh4OgluYW1lID0gImF1MXh4eCI7CWJyZWFrOworCQljYXNlIGlkZV9ldHJheDEwMDoJbmFtZSA9ICJldHJheDEwMCI7CWJyZWFrOworCQljYXNlIGlkZV9hY29ybjoJCW5hbWUgPSAiYWNvcm4iOwkJYnJlYWs7CiAJCWRlZmF1bHQ6CQluYW1lID0gIih1bmtub3duKSI7CWJyZWFrOwogCX0KIAlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlc1xuIiwgbmFtZSk7CkBAIC0xMjEsNiArMTI3LDI2NSBAQAogCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2Usc3RhcnQsb2ZmLGNvdW50LGVvZixsZW4pOwogfQogCisvKioKKyAqCV9faWRlX2FkZF9zZXR0aW5nCS0JYWRkIGFuIGlkZSBzZXR0aW5nIG9wdGlvbgorICoJQGRyaXZlOiBkcml2ZSB0byB1c2UKKyAqCUBuYW1lOiBzZXR0aW5nIG5hbWUKKyAqCUBydzogdHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgcmVhZCB3cml0ZQorICoJQGRhdGFfdHlwZTogdHlwZSBvZiBkYXRhCisgKglAbWluOiByYW5nZSBtaW5pbXVtCisgKglAbWF4OiByYW5nZSBtYXhpbXVtCisgKglAbXVsX2ZhY3RvcjogbXVsdGlwbGljYXRpb24gc2NhbGUKKyAqCUBkaXZfZmFjdG9yOiBkaXZpc29uIHNjYWxlCisgKglAZGF0YTogcHJpdmF0ZSBkYXRhIGZpZWxkCisgKglAc2V0OiBzZXR0aW5nCisgKglAYXV0b19yZW1vdmU6IHNldHRpbmcgYXV0byByZW1vdmFsIGZsYWcKKyAqCisgKglSZW1vdmVzIHRoZSBzZXR0aW5nIG5hbWVkIGZyb20gdGhlIGRldmljZSBpZiBpdCBpcyBwcmVzZW50LgorICoJVGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBzZXR0aW5nc19sb2NrIHRvIHByb3RlY3QgYWdhaW5zdAorICoJcGFyYWxsZWwgY2hhbmdlcy4gVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBJUlEKKyAqCWNvbnRleHQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuCisgKgorICoJQlVHUzogVGhpcyBjb2RlIGlzIHNlcmlvdXNseSBvdmVyLWVuZ2luZWVyZWQuIFRoZXJlIGlzIGFsc28KKyAqCW1hZ2ljIGFib3V0IGhvdyB0aGUgZHJpdmVyIHNwZWNpZmljIGZlYXR1cmVzIGFyZSBzZXR1cC4gSWYKKyAqCWEgZHJpdmVyIGlzIGF0dGFjaGVkIHdlIGFzc3VtZSB0aGUgZHJpdmVyIHNldHRpbmdzIGFyZSBhdXRvCisgKglyZW1vdmUuCisgKi8KKworc3RhdGljIGludCBfX2lkZV9hZGRfc2V0dGluZyhpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBydywgaW50IGRhdGFfdHlwZSwgaW50IG1pbiwgaW50IG1heCwgaW50IG11bF9mYWN0b3IsIGludCBkaXZfZmFjdG9yLCB2b2lkICpkYXRhLCBpZGVfcHJvY3NldF90ICpzZXQsIGludCBhdXRvX3JlbW92ZSkKK3sKKwlpZGVfc2V0dGluZ3NfdCAqKnAgPSAoaWRlX3NldHRpbmdzX3QgKiopICZkcml2ZS0+c2V0dGluZ3MsICpzZXR0aW5nID0gTlVMTDsKKworCWRvd24oJmlkZV9zZXR0aW5nX3NlbSk7CisJd2hpbGUgKCgqcCkgJiYgc3RyY21wKCgqcCktPm5hbWUsIG5hbWUpIDwgMCkKKwkJcCA9ICYoKCpwKS0+bmV4dCk7CisJaWYgKChzZXR0aW5nID0ga3phbGxvYyhzaXplb2YoKnNldHRpbmcpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJZ290byBhYm9ydDsKKwlpZiAoKHNldHRpbmctPm5hbWUgPSBrbWFsbG9jKHN0cmxlbihuYW1lKSArIDEsIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQlnb3RvIGFib3J0OworCXN0cmNweShzZXR0aW5nLT5uYW1lLCBuYW1lKTsKKwlzZXR0aW5nLT5ydyA9IHJ3OworCXNldHRpbmctPmRhdGFfdHlwZSA9IGRhdGFfdHlwZTsKKwlzZXR0aW5nLT5taW4gPSBtaW47CisJc2V0dGluZy0+bWF4ID0gbWF4OworCXNldHRpbmctPm11bF9mYWN0b3IgPSBtdWxfZmFjdG9yOworCXNldHRpbmctPmRpdl9mYWN0b3IgPSBkaXZfZmFjdG9yOworCXNldHRpbmctPmRhdGEgPSBkYXRhOworCXNldHRpbmctPnNldCA9IHNldDsKKworCXNldHRpbmctPm5leHQgPSAqcDsKKwlpZiAoYXV0b19yZW1vdmUpCisJCXNldHRpbmctPmF1dG9fcmVtb3ZlID0gMTsKKwkqcCA9IHNldHRpbmc7CisJdXAoJmlkZV9zZXR0aW5nX3NlbSk7CisJcmV0dXJuIDA7CithYm9ydDoKKwl1cCgmaWRlX3NldHRpbmdfc2VtKTsKKwlrZnJlZShzZXR0aW5nKTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBpZGVfYWRkX3NldHRpbmcoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgcncsIGludCBkYXRhX3R5cGUsIGludCBtaW4sIGludCBtYXgsIGludCBtdWxfZmFjdG9yLCBpbnQgZGl2X2ZhY3Rvciwgdm9pZCAqZGF0YSwgaWRlX3Byb2NzZXRfdCAqc2V0KQoreworCXJldHVybiBfX2lkZV9hZGRfc2V0dGluZyhkcml2ZSwgbmFtZSwgcncsIGRhdGFfdHlwZSwgbWluLCBtYXgsIG11bF9mYWN0b3IsIGRpdl9mYWN0b3IsIGRhdGEsIHNldCwgMSk7Cit9CisKK0VYUE9SVF9TWU1CT0woaWRlX2FkZF9zZXR0aW5nKTsKKworLyoqCisgKglfX2lkZV9yZW1vdmVfc2V0dGluZwktCXJlbW92ZSBhbiBpZGUgc2V0dGluZyBvcHRpb24KKyAqCUBkcml2ZTogZHJpdmUgdG8gdXNlCisgKglAbmFtZTogc2V0dGluZyBuYW1lCisgKgorICoJUmVtb3ZlcyB0aGUgc2V0dGluZyBuYW1lZCBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgcHJlc2VudC4KKyAqCVRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBzZXR0aW5nIHNlbWFwaG9yZS4KKyAqLworCitzdGF0aWMgdm9pZCBfX2lkZV9yZW1vdmVfc2V0dGluZyAoaWRlX2RyaXZlX3QgKmRyaXZlLCBjaGFyICpuYW1lKQoreworCWlkZV9zZXR0aW5nc190ICoqcCwgKnNldHRpbmc7CisKKwlwID0gKGlkZV9zZXR0aW5nc190ICoqKSAmZHJpdmUtPnNldHRpbmdzOworCisJd2hpbGUgKCgqcCkgJiYgc3RyY21wKCgqcCktPm5hbWUsIG5hbWUpKQorCQlwID0gJigoKnApLT5uZXh0KTsKKwlpZiAoKHNldHRpbmcgPSAoKnApKSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkoKnApID0gc2V0dGluZy0+bmV4dDsKKworCWtmcmVlKHNldHRpbmctPm5hbWUpOworCWtmcmVlKHNldHRpbmcpOworfQorCisvKioKKyAqCWF1dG9fcmVtb3ZlX3NldHRpbmdzCS0JcmVtb3ZlIGRyaXZlciBzcGVjaWZpYyBzZXR0aW5ncworICoJQGRyaXZlOiBkcml2ZQorICoKKyAqCUF1dG9tYXRpY2FsbHkgcmVtb3ZlIGFsbCB0aGUgZHJpdmVyIHNwZWNpZmljIHNldHRpbmdzIGZvciB0aGlzCisgKglkcml2ZS4gVGhpcyBmdW5jdGlvbiBtYXkgbm90IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LiBUaGUKKyAqCWNhbGxlciBtdXN0IGhvbGQgaWRlX3NldHRpbmdfc2VtLgorICovCisKK3N0YXRpYyB2b2lkIGF1dG9fcmVtb3ZlX3NldHRpbmdzIChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX3NldHRpbmdzX3QgKnNldHRpbmc7CityZXBlYXQ6CisJc2V0dGluZyA9IGRyaXZlLT5zZXR0aW5nczsKKwl3aGlsZSAoc2V0dGluZykgeworCQlpZiAoc2V0dGluZy0+YXV0b19yZW1vdmUpIHsKKwkJCV9faWRlX3JlbW92ZV9zZXR0aW5nKGRyaXZlLCBzZXR0aW5nLT5uYW1lKTsKKwkJCWdvdG8gcmVwZWF0OworCQl9CisJCXNldHRpbmcgPSBzZXR0aW5nLT5uZXh0OworCX0KK30KKworLyoqCisgKglpZGVfZmluZF9zZXR0aW5nX2J5X25hbWUJLQlmaW5kIGEgZHJpdmUgc3BlY2lmaWMgc2V0dGluZworICoJQGRyaXZlOiBkcml2ZSB0byBzY2FuCisgKglAbmFtZTogc2V0dGluZyBuYW1lCisgKgorICoJU2NhbidzIHRoZSBkZXZpY2Ugc2V0dGluZyB0YWJsZSBmb3IgYSBtYXRjaGluZyBlbnRyeSBhbmQgcmV0dXJucworICoJdGhpcyBvciBOVUxMIGlmIG5vIGVudHJ5IGlzIGZvdW5kLiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUKKyAqCXNldHRpbmcgc2VtYXBob3JlCisgKi8KKworc3RhdGljIGlkZV9zZXR0aW5nc190ICppZGVfZmluZF9zZXR0aW5nX2J5X25hbWUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjaGFyICpuYW1lKQoreworCWlkZV9zZXR0aW5nc190ICpzZXR0aW5nID0gZHJpdmUtPnNldHRpbmdzOworCisJd2hpbGUgKHNldHRpbmcpIHsKKwkJaWYgKHN0cmNtcChzZXR0aW5nLT5uYW1lLCBuYW1lKSA9PSAwKQorCQkJYnJlYWs7CisJCXNldHRpbmcgPSBzZXR0aW5nLT5uZXh0OworCX0KKwlyZXR1cm4gc2V0dGluZzsKK30KKworLyoqCisgKglpZGVfcmVhZF9zZXR0aW5nCS0JcmVhZCBhbiBJREUgc2V0dGluZworICoJQGRyaXZlOiBkcml2ZSB0byByZWFkIGZyb20KKyAqCUBzZXR0aW5nOiBkcml2ZSBzZXR0aW5nCisgKgorICoJUmVhZCBhIGRyaXZlIHNldHRpbmcgYW5kIHJldHVybiB0aGUgdmFsdWUuIFRoZSBjYWxsZXIKKyAqCW11c3QgaG9sZCB0aGUgaWRlX3NldHRpbmdfc2VtIHdoZW4gbWFraW5nIHRoaXMgY2FsbC4KKyAqCisgKglCVUdTOiB0aGUgZGF0YSByZXR1cm4gYW5kIGVycm9yIGFyZSB0aGUgc2FtZSByZXR1cm4gdmFsdWUKKyAqCXNvIGFuIGVycm9yIC1FSU5WQUwgYW5kIHRydWUgcmV0dXJuIG9mIHRoZSBzYW1lIHZhbHVlIGNhbm5vdAorICoJYmUgdG9sZCBhcGFydAorICovCisKK3N0YXRpYyBpbnQgaWRlX3JlYWRfc2V0dGluZyhpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9zZXR0aW5nc190ICpzZXR0aW5nKQoreworCWludAkJdmFsID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJaWYgKChzZXR0aW5nLT5ydyAmIFNFVFRJTkdfUkVBRCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CisJCXN3aXRjaChzZXR0aW5nLT5kYXRhX3R5cGUpIHsKKwkJCWNhc2UgVFlQRV9CWVRFOgorCQkJCXZhbCA9ICooKHU4ICopIHNldHRpbmctPmRhdGEpOworCQkJCWJyZWFrOworCQkJY2FzZSBUWVBFX1NIT1JUOgorCQkJCXZhbCA9ICooKHUxNiAqKSBzZXR0aW5nLT5kYXRhKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVFlQRV9JTlQ6CisJCQkJdmFsID0gKigodTMyICopIHNldHRpbmctPmRhdGEpOworCQkJCWJyZWFrOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiB2YWw7Cit9CisKKy8qKgorICoJaWRlX3dyaXRlX3NldHRpbmcJLQlyZWFkIGFuIElERSBzZXR0aW5nCisgKglAZHJpdmU6IGRyaXZlIHRvIHJlYWQgZnJvbQorICoJQHNldHRpbmc6IGRyaXZlIHNldHRpbmcKKyAqCUB2YWw6IHZhbHVlCisgKgorICoJV3JpdGUgYSBkcml2ZSBzZXR0aW5nIGlmIGl0IGlzIHBvc3NpYmxlLiBUaGUgY2FsbGVyCisgKgltdXN0IGhvbGQgdGhlIGlkZV9zZXR0aW5nX3NlbSB3aGVuIG1ha2luZyB0aGlzIGNhbGwuCisgKgorICoJQlVHUzogdGhlIGRhdGEgcmV0dXJuIGFuZCBlcnJvciBhcmUgdGhlIHNhbWUgcmV0dXJuIHZhbHVlCisgKglzbyBhbiBlcnJvciAtRUlOVkFMIGFuZCB0cnVlIHJldHVybiBvZiB0aGUgc2FtZSB2YWx1ZSBjYW5ub3QKKyAqCWJlIHRvbGQgYXBhcnQKKyAqCisgKglGSVhNRTogIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgdG8gZW5xdWV1ZSBhIHNwZWNpYWwgcmVxdWVzdAorICoJdG8gdGhlIGRyaXZlciB0byBjaGFuZ2Ugc2V0dGluZ3MsIGFuZCB0aGVuIHdhaXQgb24gYSBzZW1hIGZvciBjb21wbGV0aW9uLgorICoJVGhlIGN1cnJlbnQgc2NoZW1lIG9mIHBvbGxpbmcgaXMga2x1ZGd5LCB0aG91Z2ggc2FmZSBlbm91Z2guCisgKi8KKworc3RhdGljIGludCBpZGVfd3JpdGVfc2V0dGluZyhpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9zZXR0aW5nc190ICpzZXR0aW5nLCBpbnQgdmFsKQoreworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisJaWYgKHNldHRpbmctPnNldCkKKwkJcmV0dXJuIHNldHRpbmctPnNldChkcml2ZSwgdmFsKTsKKwlpZiAoIShzZXR0aW5nLT5ydyAmIFNFVFRJTkdfV1JJVEUpKQorCQlyZXR1cm4gLUVQRVJNOworCWlmICh2YWwgPCBzZXR0aW5nLT5taW4gfHwgdmFsID4gc2V0dGluZy0+bWF4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaWRlX3NwaW5fd2FpdF9od2dyb3VwKGRyaXZlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKwlzd2l0Y2ggKHNldHRpbmctPmRhdGFfdHlwZSkgeworCQljYXNlIFRZUEVfQllURToKKwkJCSooKHU4ICopIHNldHRpbmctPmRhdGEpID0gdmFsOworCQkJYnJlYWs7CisJCWNhc2UgVFlQRV9TSE9SVDoKKwkJCSooKHUxNiAqKSBzZXR0aW5nLT5kYXRhKSA9IHZhbDsKKwkJCWJyZWFrOworCQljYXNlIFRZUEVfSU5UOgorCQkJKigodTMyICopIHNldHRpbmctPmRhdGEpID0gdmFsOworCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmaWRlX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF94ZmVyX3JhdGUgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKK3sKKwlpbnQgZXJyOworCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gNzApCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gaWRlX3dhaXRfY21kKGRyaXZlLAorCQkJV0lOX1NFVEZFQVRVUkVTLCAodTgpIGFyZywKKwkJCVNFVEZFQVRVUkVTX1hGRVIsIDAsIE5VTEwpOworCisJaWYgKCFlcnIgJiYgYXJnKSB7CisJCWlkZV9zZXRfeGZlcl9yYXRlKGRyaXZlLCAodTgpIGFyZyk7CisJCWlkZV9kcml2ZWlkX3VwZGF0ZShkcml2ZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICoJaWRlX2FkZF9nZW5lcmljX3NldHRpbmdzCS0JZ2VuZXJpYyBpZGUgc2V0dGluZ3MKKyAqCUBkcml2ZTogZHJpdmUgYmVpbmcgY29uZmlndXJlZAorICoKKyAqCUFkZCB0aGUgZ2VuZXJpYyBwYXJ0cyBvZiB0aGUgc3lzdGVtIHNldHRpbmdzIHRvIHRoZSAvcHJvYyBmaWxlcy4KKyAqCVRoZSBjYWxsZXIgbXVzdCBub3QgYmUgaG9sZGluZyB0aGUgaWRlX3NldHRpbmdfc2VtLgorICovCisKK3ZvaWQgaWRlX2FkZF9nZW5lcmljX3NldHRpbmdzIChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisvKgorICoJCQkgIGRyaXZlCQlzZXR0aW5nIG5hbWUJCXJlYWQvd3JpdGUgYWNjZXNzCQkJCWRhdGEgdHlwZQltaW4JbWF4CQkJCW11bF9mYWN0b3IJZGl2X2ZhY3RvcglkYXRhIHBvaW50ZXIJCQlzZXQgZnVuY3Rpb24KKyAqLworCV9faWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkiaW9fMzJiaXQiLAkJZHJpdmUtPm5vX2lvXzMyYml0ID8gU0VUVElOR19SRUFEIDogU0VUVElOR19SVywJVFlQRV9CWVRFLAkwLAkxICsgKFNVUFBPUlRfVkxCX1NZTkMgPDwgMSksCTEsCQkxLAkJJmRyaXZlLT5pb18zMmJpdCwJCXNldF9pb18zMmJpdCwJMCk7CisJX19pZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJrZWVwc2V0dGluZ3MiLAkJU0VUVElOR19SVywJCQkJCVRZUEVfQllURSwJMCwJMSwJCQkJMSwJCTEsCQkmZHJpdmUtPmtlZXBfc2V0dGluZ3MsCQlOVUxMLAkJMCk7CisJX19pZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJuaWNlMSIsCQlTRVRUSU5HX1JXLAkJCQkJVFlQRV9CWVRFLAkwLAkxLAkJCQkxLAkJMSwJCSZkcml2ZS0+bmljZTEsCQkJTlVMTCwJCTApOworCV9faWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkicGlvX21vZGUiLAkJU0VUVElOR19XUklURSwJCQkJCVRZUEVfQllURSwJMCwJMjU1LAkJCQkxLAkJMSwJCU5VTEwsCQkJCXNldF9waW9fbW9kZSwJMCk7CisJX19pZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJ1bm1hc2tpcnEiLAkJZHJpdmUtPm5vX3VubWFzayA/IFNFVFRJTkdfUkVBRCA6IFNFVFRJTkdfUlcsCVRZUEVfQllURSwJMCwJMSwJCQkJMSwJCTEsCQkmZHJpdmUtPnVubWFzaywJCQlOVUxMLAkJMCk7CisJX19pZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJ1c2luZ19kbWEiLAkJU0VUVElOR19SVywJCQkJCVRZUEVfQllURSwJMCwJMSwJCQkJMSwJCTEsCQkmZHJpdmUtPnVzaW5nX2RtYSwJCXNldF91c2luZ19kbWEsCTApOworCV9faWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkiaW5pdF9zcGVlZCIsCQlTRVRUSU5HX1JXLAkJCQkJVFlQRV9CWVRFLAkwLAk3MCwJCQkJMSwJCTEsCQkmZHJpdmUtPmluaXRfc3BlZWQsCQlOVUxMLAkJMCk7CisJX19pZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJjdXJyZW50X3NwZWVkIiwJU0VUVElOR19SVywJCQkJCVRZUEVfQllURSwJMCwJNzAsCQkJCTEsCQkxLAkJJmRyaXZlLT5jdXJyZW50X3NwZWVkLAkJc2V0X3hmZXJfcmF0ZSwJMCk7CisJX19pZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJudW1iZXIiLAkJU0VUVElOR19SVywJCQkJCVRZUEVfQllURSwJMCwJMywJCQkJMSwJCTEsCQkmZHJpdmUtPmRuLAkJCU5VTEwsCQkwKTsKK30KKwogc3RhdGljIHZvaWQgcHJvY19pZGVfc2V0dGluZ3Nfd2Fybih2b2lkKQogewogCXN0YXRpYyBpbnQgd2FybmVkID0gMDsKQEAgLTM5OSw3ICs2NjQsNyBAQAogCXsgTlVMTCwJMCwgTlVMTCwgTlVMTCB9CiB9OwogCi12b2lkIGlkZV9hZGRfcHJvY19lbnRyaWVzKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyLCBpZGVfcHJvY19lbnRyeV90ICpwLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgaWRlX2FkZF9wcm9jX2VudHJpZXMoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkaXIsIGlkZV9wcm9jX2VudHJ5X3QgKnAsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CiAKQEAgLTQxNSw3ICs2ODAsNyBAQAogCX0KIH0KIAotdm9pZCBpZGVfcmVtb3ZlX3Byb2NfZW50cmllcyhzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRpciwgaWRlX3Byb2NfZW50cnlfdCAqcCkKK3N0YXRpYyB2b2lkIGlkZV9yZW1vdmVfcHJvY19lbnRyaWVzKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyLCBpZGVfcHJvY19lbnRyeV90ICpwKQogewogCWlmICghZGlyIHx8ICFwKQogCQlyZXR1cm47CkBAIC00MjUsNiArNjkwLDUxIEBACiAJfQogfQogCit2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9kcml2ZXJfdCAqZHJpdmVyKQoreworCWlkZV9hZGRfcHJvY19lbnRyaWVzKGRyaXZlLT5wcm9jLCBkcml2ZXItPnByb2MsIGRyaXZlKTsKK30KKworRVhQT1JUX1NZTUJPTChpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIpOworCisvKioKKyAqCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyCS0JcmVtb3ZlIGRyaXZlciBzcGVjaWZpYyBkYXRhCisgKglAZHJpdmU6IGRyaXZlCisgKglAZHJpdmVyOiBkcml2ZXIKKyAqCisgKglDbGVhbiB1cCB0aGUgZHJpdmVyIHNwZWNpZmljIC9wcm9jIGZpbGVzIGFuZCBJREUgc2V0dGluZ3MKKyAqCWZvciBhIGdpdmVuIGRyaXZlLgorICoKKyAqCVRha2VzIGlkZV9zZXR0aW5nX3NlbSBhbmQgaWRlX2xvY2suCisgKglDYWxsZXIgbXVzdCBob2xkIG5vbmUgb2YgdGhlIGxvY2tzLgorICovCisKK3ZvaWQgaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfZHJpdmVyX3QgKmRyaXZlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWRlX3JlbW92ZV9wcm9jX2VudHJpZXMoZHJpdmUtPnByb2MsIGRyaXZlci0+cHJvYyk7CisKKwlkb3duKCZpZGVfc2V0dGluZ19zZW0pOworCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCS8qCisJICogaWRlX3NldHRpbmdfc2VtIHByb3RlY3RzIHRoZSBzZXR0aW5ncyBsaXN0CisJICogaWRlX2xvY2sgcHJvdGVjdHMgdGhlIHVzZSBvZiBzZXR0aW5ncworCSAqCisJICogc28gd2UgbmVlZCB0byBob2xkIGJvdGgsIGlkZV9zZXR0aW5nc19zZW0gYmVjYXVzZSB3ZSB3YW50IHRvCisJICogbW9kaWZ5IHRoZSBzZXR0aW5ncyBsaXN0LCBhbmQgaWRlX2xvY2sgYmVjYXVzZSB3ZSBjYW5ub3QgdGFrZQorCSAqIGEgc2V0dGluZyBvdXQgdGhhdCBpcyBiZWluZyB1c2VkLgorCSAqCisJICogT1RPSCBib3RoIGlkZV97cmVhZCx3cml0ZX1fc2V0dGluZyBhcmUgb25seSBldmVyIHVzZWQgdW5kZXIKKwkgKiBpZGVfc2V0dGluZ19zZW0uCisJICovCisJYXV0b19yZW1vdmVfc2V0dGluZ3MoZHJpdmUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJdXAoJmlkZV9zZXR0aW5nX3NlbSk7Cit9CisKK0VYUE9SVF9TWU1CT0woaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIpOworCiBzdGF0aWMgdm9pZCBjcmVhdGVfcHJvY19pZGVfZHJpdmVzKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJaW50CWQ7CkBAIC00NzcsMjYgKzc4NywyNCBAQAogCXsgTlVMTCwJMCwgTlVMTCwgTlVMTCB9CiB9OwogCi12b2lkIGNyZWF0ZV9wcm9jX2lkZV9pbnRlcmZhY2VzKHZvaWQpCit2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlpbnQJaDsKKwlpZiAoIWh3aWYtPnByZXNlbnQpCisJCXJldHVybjsKIAotCWZvciAoaCA9IDA7IGggPCBNQVhfSFdJRlM7IGgrKykgewotCQlpZGVfaHdpZl90ICpod2lmID0gJmlkZV9od2lmc1toXTsKKwlpZiAoIWh3aWYtPnByb2MpIHsKKwkJaHdpZi0+cHJvYyA9IHByb2NfbWtkaXIoaHdpZi0+bmFtZSwgcHJvY19pZGVfcm9vdCk7CiAKLQkJaWYgKCFod2lmLT5wcmVzZW50KQotCQkJY29udGludWU7Ci0JCWlmICghaHdpZi0+cHJvYykgewotCQkJaHdpZi0+cHJvYyA9IHByb2NfbWtkaXIoaHdpZi0+bmFtZSwgcHJvY19pZGVfcm9vdCk7Ci0JCQlpZiAoIWh3aWYtPnByb2MpCi0JCQkJcmV0dXJuOwotCQkJaWRlX2FkZF9wcm9jX2VudHJpZXMoaHdpZi0+cHJvYywgaHdpZl9lbnRyaWVzLCBod2lmKTsKLQkJfQotCQljcmVhdGVfcHJvY19pZGVfZHJpdmVzKGh3aWYpOworCQlpZiAoIWh3aWYtPnByb2MpCisJCQlyZXR1cm47CisKKwkJaWRlX2FkZF9wcm9jX2VudHJpZXMoaHdpZi0+cHJvYywgaHdpZl9lbnRyaWVzLCBod2lmKTsKIAl9CisKKwljcmVhdGVfcHJvY19pZGVfZHJpdmVzKGh3aWYpOwogfQogCi1FWFBPUlRfU1lNQk9MKGNyZWF0ZV9wcm9jX2lkZV9pbnRlcmZhY2VzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQpOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCiB2b2lkIGlkZV9wY2lfY3JlYXRlX2hvc3RfcHJvYyhjb25zdCBjaGFyICpuYW1lLCBnZXRfaW5mb190ICpnZXRfaW5mbykKQEAgLTUwNyw3ICs4MTUsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3BjaV9jcmVhdGVfaG9zdF9wcm9jKTsKICNlbmRpZgogCi12b2lkIGRlc3Ryb3lfcHJvY19pZGVfaW50ZXJmYWNlKGlkZV9od2lmX3QgKmh3aWYpCit2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICpod2lmKQogewogCWlmIChod2lmLT5wcm9jKSB7CiAJCWRlc3Ryb3lfcHJvY19pZGVfZHJpdmVzKGh3aWYpOwpAQCAtNTU0LDExICs4NjIsMTEgQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCisJcHJvY19pZGVfcm9vdCA9IHByb2NfbWtkaXIoImlkZSIsIE5VTEwpOworCiAJaWYgKCFwcm9jX2lkZV9yb290KQogCQlyZXR1cm47CiAKLQljcmVhdGVfcHJvY19pZGVfaW50ZXJmYWNlcygpOwotCiAJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHJpdmVycyIsIDAsIHByb2NfaWRlX3Jvb3QpOwogCWlmIChlbnRyeSkKIAkJZW50cnktPnByb2NfZm9wcyA9ICZpZGVfZHJpdmVyc19vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKaW5kZXggNGU1OTIzOS4uZTgyYmZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCkBAIC00NTYxLDI4ICs0NTYxLDMzIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiaWRlLXRhcGU6IEFkanVzdGVkIGJsb2NrIHNpemUgLSAlZFxuIiwgdGFwZS0+dGFwZV9ibG9ja19zaXplKTsKICNlbmRpZiAvKiBJREVUQVBFX0RFQlVHX0lORk8gKi8KIH0KKworI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwogc3RhdGljIHZvaWQgaWRldGFwZV9hZGRfc2V0dGluZ3MgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAogLyoKLSAqCQkJZHJpdmUJc2V0dGluZyBuYW1lCXJlYWQvd3JpdGUJaW9jdGwJaW9jdGwJCWRhdGEgdHlwZQltaW4JCQltYXgJCQltdWxfZmFjdG9yCQkJZGl2X2ZhY3RvcgkJCWRhdGEgcG9pbnRlcgkJCQlzZXQgZnVuY3Rpb24KKyAqCQkJZHJpdmUJc2V0dGluZyBuYW1lCQlyZWFkL3dyaXRlCWRhdGEgdHlwZQltaW4JCQltYXgJCQltdWxfZmFjdG9yCQkJZGl2X2ZhY3RvcglkYXRhIHBvaW50ZXIJCQkJc2V0IGZ1bmN0aW9uCiAgKi8KLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJidWZmZXIiLAlTRVRUSU5HX1JFQUQsCS0xLAktMSwJCVRZUEVfU0hPUlQsCTAsCQkJMHhmZmZmLAkJCTEsCQkJCTIsCQkJCSZ0YXBlLT5jYXBhYmlsaXRpZXMuYnVmZmVyX3NpemUsCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJInBpcGVsaW5lX21pbiIsCVNFVFRJTkdfUlcsCS0xLAktMSwJCVRZUEVfSU5ULAkxLAkJCTB4ZmZmZiwJCQl0YXBlLT5zdGFnZV9zaXplIC8gMTAyNCwJMSwJCQkJJnRhcGUtPm1pbl9waXBlbGluZSwJCQlOVUxMKTsKLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJwaXBlbGluZSIsCVNFVFRJTkdfUlcsCS0xLAktMSwJCVRZUEVfSU5ULAkxLAkJCTB4ZmZmZiwJCQl0YXBlLT5zdGFnZV9zaXplIC8gMTAyNCwJMSwJCQkJJnRhcGUtPm1heF9zdGFnZXMsCQkJTlVMTCk7Ci0JaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkicGlwZWxpbmVfbWF4IiwJU0VUVElOR19SVywJLTEsCS0xLAkJVFlQRV9JTlQsCTEsCQkJMHhmZmZmLAkJCXRhcGUtPnN0YWdlX3NpemUgLyAxMDI0LAkxLAkJCQkmdGFwZS0+bWF4X3BpcGVsaW5lLAkJCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJInBpcGVsaW5lX3VzZWQiLFNFVFRJTkdfUkVBRCwJLTEsCS0xLAkJVFlQRV9JTlQsCTAsCQkJMHhmZmZmLAkJCXRhcGUtPnN0YWdlX3NpemUgLyAxMDI0LAkxLAkJCQkmdGFwZS0+bnJfc3RhZ2VzLAkJCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJInBpcGVsaW5lX3BlbmRpbmciLFNFVFRJTkdfUkVBRCwtMSwJLTEsCQlUWVBFX0lOVCwJMCwJCQkweGZmZmYsCQkJdGFwZS0+c3RhZ2Vfc2l6ZSAvIDEwMjQsCTEsCQkJCSZ0YXBlLT5ucl9wZW5kaW5nX3N0YWdlcywJCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJInNwZWVkIiwJU0VUVElOR19SRUFELAktMSwJLTEsCQlUWVBFX1NIT1JULAkwLAkJCTB4ZmZmZiwJCQkxLAkJCQkxLAkJCQkmdGFwZS0+Y2FwYWJpbGl0aWVzLnNwZWVkLAkJTlVMTCk7Ci0JaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkic3RhZ2UiLAlTRVRUSU5HX1JFQUQsCS0xLAktMSwJCVRZUEVfSU5ULAkwLAkJCTB4ZmZmZiwJCQkxLAkJCQkxMDI0LAkJCQkmdGFwZS0+c3RhZ2Vfc2l6ZSwJCQlOVUxMKTsKLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJ0ZHNjIiwJCVNFVFRJTkdfUlcsCS0xLAktMSwJCVRZUEVfSU5ULAlJREVUQVBFX0RTQ19SV19NSU4sCUlERVRBUEVfRFNDX1JXX01BWCwJMTAwMCwJCQkJSFosCQkJCSZ0YXBlLT5iZXN0X2RzY19yd19mcmVxdWVuY3ksCQlOVUxMKTsKLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJkc2Nfb3ZlcmxhcCIsCVNFVFRJTkdfUlcsCS0xLAktMSwJCVRZUEVfQllURSwJMCwJCQkxLAkJCTEsCQkJCTEsCQkJCSZkcml2ZS0+ZHNjX292ZXJsYXAsCQkJTlVMTCk7Ci0JaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkicGlwZWxpbmVfaGVhZF9zcGVlZF9jIixTRVRUSU5HX1JFQUQsCS0xLAktMSwJVFlQRV9JTlQsCTAsCQkJMHhmZmZmLAkJCTEsCQkJCTEsCQkJCSZ0YXBlLT5jb250cm9sbGVkX3BpcGVsaW5lX2hlYWRfc3BlZWQsCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJInBpcGVsaW5lX2hlYWRfc3BlZWRfdSIsU0VUVElOR19SRUFELAktMSwJLTEsCVRZUEVfSU5ULAkwLAkJCTB4ZmZmZiwJCQkxLAkJCQkxLAkJCQkmdGFwZS0+dW5jb250cm9sbGVkX3BpcGVsaW5lX2hlYWRfc3BlZWQsCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImF2Z19zcGVlZCIsCVNFVFRJTkdfUkVBRCwJLTEsCS0xLAkJVFlQRV9JTlQsCTAsCQkJMHhmZmZmLAkJCTEsCQkJCTEsCQkJCSZ0YXBlLT5hdmdfc3BlZWQsCQlOVUxMKTsKLQlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJkZWJ1Z19sZXZlbCIsU0VUVElOR19SVywJLTEsCS0xLAkJVFlQRV9JTlQsCTAsCQkJMHhmZmZmLAkJCTEsCQkJCTEsCQkJCSZ0YXBlLT5kZWJ1Z19sZXZlbCwJCU5VTEwpOworCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImJ1ZmZlciIsCQlTRVRUSU5HX1JFQUQsCVRZUEVfU0hPUlQsCTAsCQkJMHhmZmZmLAkJCTEsCQkJCTIsCQkmdGFwZS0+Y2FwYWJpbGl0aWVzLmJ1ZmZlcl9zaXplLAlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJwaXBlbGluZV9taW4iLAkJU0VUVElOR19SVywJVFlQRV9JTlQsCTEsCQkJMHhmZmZmLAkJCXRhcGUtPnN0YWdlX3NpemUgLyAxMDI0LAkxLAkJJnRhcGUtPm1pbl9waXBlbGluZSwJCQlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJwaXBlbGluZSIsCQlTRVRUSU5HX1JXLAlUWVBFX0lOVCwJMSwJCQkweGZmZmYsCQkJdGFwZS0+c3RhZ2Vfc2l6ZSAvIDEwMjQsCTEsCQkmdGFwZS0+bWF4X3N0YWdlcywJCQlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJwaXBlbGluZV9tYXgiLAkJU0VUVElOR19SVywJVFlQRV9JTlQsCTEsCQkJMHhmZmZmLAkJCXRhcGUtPnN0YWdlX3NpemUgLyAxMDI0LAkxLAkJJnRhcGUtPm1heF9waXBlbGluZSwJCQlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJwaXBlbGluZV91c2VkIiwJU0VUVElOR19SRUFELAlUWVBFX0lOVCwJMCwJCQkweGZmZmYsCQkJdGFwZS0+c3RhZ2Vfc2l6ZSAvIDEwMjQsCTEsCQkmdGFwZS0+bnJfc3RhZ2VzLAkJCU5VTEwpOworCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJInBpcGVsaW5lX3BlbmRpbmciLAlTRVRUSU5HX1JFQUQsCVRZUEVfSU5ULAkwLAkJCTB4ZmZmZiwJCQl0YXBlLT5zdGFnZV9zaXplIC8gMTAyNCwJMSwJCSZ0YXBlLT5ucl9wZW5kaW5nX3N0YWdlcywJCU5VTEwpOworCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJInNwZWVkIiwJCVNFVFRJTkdfUkVBRCwJVFlQRV9TSE9SVCwJMCwJCQkweGZmZmYsCQkJMSwJCQkJMSwJCSZ0YXBlLT5jYXBhYmlsaXRpZXMuc3BlZWQsCQlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJzdGFnZSIsCQlTRVRUSU5HX1JFQUQsCVRZUEVfSU5ULAkwLAkJCTB4ZmZmZiwJCQkxLAkJCQkxMDI0LAkJJnRhcGUtPnN0YWdlX3NpemUsCQkJTlVMTCk7CisJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkidGRzYyIsCQkJU0VUVElOR19SVywJVFlQRV9JTlQsCUlERVRBUEVfRFNDX1JXX01JTiwJSURFVEFQRV9EU0NfUldfTUFYLAkxMDAwLAkJCQlIWiwJCSZ0YXBlLT5iZXN0X2RzY19yd19mcmVxdWVuY3ksCQlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJkc2Nfb3ZlcmxhcCIsCQlTRVRUSU5HX1JXLAlUWVBFX0JZVEUsCTAsCQkJMSwJCQkxLAkJCQkxLAkJJmRyaXZlLT5kc2Nfb3ZlcmxhcCwJCQlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJwaXBlbGluZV9oZWFkX3NwZWVkX2MiLFNFVFRJTkdfUkVBRCwJVFlQRV9JTlQsCTAsCQkJMHhmZmZmLAkJCTEsCQkJCTEsCQkmdGFwZS0+Y29udHJvbGxlZF9waXBlbGluZV9oZWFkX3NwZWVkLAlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJwaXBlbGluZV9oZWFkX3NwZWVkX3UiLFNFVFRJTkdfUkVBRCwJVFlQRV9JTlQsCTAsCQkJMHhmZmZmLAkJCTEsCQkJCTEsCQkmdGFwZS0+dW5jb250cm9sbGVkX3BpcGVsaW5lX2hlYWRfc3BlZWQsTlVMTCk7CisJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkiYXZnX3NwZWVkIiwJCVNFVFRJTkdfUkVBRCwJVFlQRV9JTlQsCTAsCQkJMHhmZmZmLAkJCTEsCQkJCTEsCQkmdGFwZS0+YXZnX3NwZWVkLAkJCU5VTEwpOworCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImRlYnVnX2xldmVsIiwJCVNFVFRJTkdfUlcsCVRZUEVfSU5ULAkwLAkJCTB4ZmZmZiwJCQkxLAkJCQkxLAkJJnRhcGUtPmRlYnVnX2xldmVsLAkJCU5VTEwpOwogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGV0YXBlX2FkZF9zZXR0aW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUpIHsgOyB9CisjZW5kaWYKIAogLyoKICAqCWlkZV9zZXR1cCBpcyBjYWxsZWQgdG86CkBAIC00NzAzLDcgKzQ3MDgsNyBAQAogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCi0JaWRlX3VucmVnaXN0ZXJfc3ViZHJpdmVyKGRyaXZlLCB0YXBlLT5kcml2ZXIpOworCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCB0YXBlLT5kcml2ZXIpOwogCiAJaWRlX3VucmVnaXN0ZXJfcmVnaW9uKHRhcGUtPmRpc2spOwogCkBAIC00NzMwLDggKzQ3MzUsNyBAQAogCWtmcmVlKHRhcGUpOwogfQogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQorI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwogc3RhdGljIGludCBwcm9jX2lkZXRhcGVfcmVhZF9uYW1lCiAJKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewpAQCAtNDc0OSwxMSArNDc1Myw2IEBACiAJeyAibmFtZSIsCVNfSUZSRUd8U19JUlVHTywJcHJvY19pZGV0YXBlX3JlYWRfbmFtZSwJTlVMTCB9LAogCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9CiB9OwotCi0jZWxzZQotCi0jZGVmaW5lCWlkZXRhcGVfcHJvYwlOVUxMCi0KICNlbmRpZgogCiBzdGF0aWMgaW50IGlkZV90YXBlX3Byb2JlKGlkZV9kcml2ZV90ICopOwpAQCAtNDc3Myw3ICs0NzcyLDkgQEAKIAkuZW5kX3JlcXVlc3QJCT0gaWRldGFwZV9lbmRfcmVxdWVzdCwKIAkuZXJyb3IJCQk9IF9faWRlX2Vycm9yLAogCS5hYm9ydAkJCT0gX19pZGVfYWJvcnQsCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAJLnByb2MJCQk9IGlkZXRhcGVfcHJvYywKKyNlbmRpZgogfTsKIAogLyoKQEAgLTQ4NjQsNyArNDg2NSw3IEBACiAKIAlpZGVfaW5pdF9kaXNrKGcsIGRyaXZlKTsKIAotCWlkZV9yZWdpc3Rlcl9zdWJkcml2ZXIoZHJpdmUsICZpZGV0YXBlX2RyaXZlcik7CisJaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCAmaWRldGFwZV9kcml2ZXIpOwogCiAJa3JlZl9pbml0KCZ0YXBlLT5rcmVmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLmMgYi9kcml2ZXJzL2lkZS9pZGUuYwppbmRleCBhZTViZjJiLi42MDAyNzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUuYwpAQCAtMTY4LDEyICsxNjgsMTEgQEAKIAogc3RhdGljIGludCBpZGVidXNfcGFyYW1ldGVyOwkvKiBob2xkcyB0aGUgImlkZWJ1cz0iIHBhcmFtZXRlciAqLwogc3RhdGljIGludCBzeXN0ZW1fYnVzX3NwZWVkOwkvKiBob2xkcyB3aGF0IHdlIHRoaW5rIGlzIFZFU0EvUENJIGJ1cyBzcGVlZCAqLwotc3RhdGljIGludCBpbml0aWFsaXppbmc7CS8qIHNldCB3aGlsZSBpbml0aWFsaXppbmcgYnVpbHQtaW4gZHJpdmVycyAqLwogCiBERUNMQVJFX01VVEVYKGlkZV9jZmdfc2VtKTsKICBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU1BJTkxPQ0soaWRlX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCisjaWZkZWYgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIKIHN0YXRpYyBpbnQgaWRlX3NjYW5fZGlyZWN0aW9uOyAvKiBUSElTIHdhcyBmb3JtZXJseSAyLjIueCBwY2k9cmV2ZXJzZSAqLwogI2VuZGlmCiAKQEAgLTIxNiw5ICsyMTUsNiBAQAogCWh3aWYtPmJ1c19zdGF0ZQk9IEJVU1NUQVRFX09OOwogCiAJaHdpZi0+YXRhcGlfZG1hID0gMDsJCS8qIGRpc2FibGUgYWxsIGF0YXBpIGRtYSAqLyAKLQlod2lmLT51bHRyYV9tYXNrID0gMHg4MDsJLyogZGlzYWJsZSBhbGwgdWx0cmEgKi8KLQlod2lmLT5td2RtYV9tYXNrID0gMHg4MDsJLyogZGlzYWJsZSBhbGwgbXdkbWEgKi8KLQlod2lmLT5zd2RtYV9tYXNrID0gMHg4MDsJLyogZGlzYWJsZSBhbGwgc3dkbWEgKi8KIAogCWluaXRfY29tcGxldGlvbigmaHdpZi0+Z2VuZGV2X3JlbF9jb21wKTsKIApAQCAtMzA1LDkgKzMwMSw3IEBACiAjZW5kaWYKIAl9CiAjaWZkZWYgQ09ORklHX0lERV9BUk0KLQlpbml0aWFsaXppbmcgPSAxOwogCWlkZV9hcm1faW5pdCgpOwotCWluaXRpYWxpemluZyA9IDA7CiAjZW5kaWYKIH0KIApAQCAtMzUzLDEwICszNDcsNiBAQAogCXJldHVybiBzeXN0ZW1fYnVzX3NwZWVkOwogfQogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19pZGVfcm9vdDsKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlKiBod2lmX3JlcXVlc3RfcmVnaW9uKGlkZV9od2lmX3QgKmh3aWYsCiAJCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW0pCiB7CkBAIC00ODAsNiArNDcwLDcgQEAKIAogCWh3aWYtPnR1bmVwcm9jCQkJPSB0bXBfaHdpZi0+dHVuZXByb2M7CiAJaHdpZi0+c3BlZWRwcm9jCQkJPSB0bXBfaHdpZi0+c3BlZWRwcm9jOworCWh3aWYtPnVkbWFfZmlsdGVyCQk9IHRtcF9od2lmLT51ZG1hX2ZpbHRlcjsKIAlod2lmLT5zZWxlY3Rwcm9jCQk9IHRtcF9od2lmLT5zZWxlY3Rwcm9jOwogCWh3aWYtPnJlc2V0X3BvbGwJCT0gdG1wX2h3aWYtPnJlc2V0X3BvbGw7CiAJaHdpZi0+cHJlX3Jlc2V0CQkJPSB0bXBfaHdpZi0+cHJlX3Jlc2V0OwpAQCAtNTk5LDcgKzU5MCw3IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmlkZV9sb2NrKTsKIAotCWRlc3Ryb3lfcHJvY19pZGVfaW50ZXJmYWNlKGh3aWYpOworCWlkZV9wcm9jX3VucmVnaXN0ZXJfcG9ydChod2lmKTsKIAogCWh3Z3JvdXAgPSBod2lmLT5od2dyb3VwOwogCS8qCkBAIC03NTEsNiArNzQyLDcgQEAKIC8qKgogICoJaWRlX3JlZ2lzdGVyX2h3X3dpdGhfZml4dXAJLQlyZWdpc3RlciBJREUgaW50ZXJmYWNlCiAgKglAaHc6IGhhcmR3YXJlIHJlZ2lzdGVycworICoJQGluaXRpYWxpemluZzogc2V0IHdoaWxlIGluaXRpYWxpemluZyBidWlsdC1pbiBkcml2ZXJzCiAgKglAaHdpZnA6IHBvaW50ZXIgdG8gcmV0dXJuZWQgaHdpZgogICoJQGZpeHVwOiBmaXh1cCBmdW5jdGlvbgogICoKQEAgLTc2MCw3ICs3NTIsOSBAQAogICoJUmV0dXJucyAtMSBvbiBlcnJvci4KICAqLwogCi1pbnQgaWRlX3JlZ2lzdGVyX2h3X3dpdGhfZml4dXAoaHdfcmVnc190ICpodywgaWRlX2h3aWZfdCAqKmh3aWZwLCB2b2lkKCpmaXh1cCkoaWRlX2h3aWZfdCAqaHdpZikpCitpbnQgaWRlX3JlZ2lzdGVyX2h3X3dpdGhfZml4dXAoaHdfcmVnc190ICpodywgaW50IGluaXRpYWxpemluZywKKwkJCSAgICAgICBpZGVfaHdpZl90ICoqaHdpZnAsCisJCQkgICAgICAgdm9pZCgqZml4dXApKGlkZV9od2lmX3QgKmh3aWYpKQogewogCWludCBpbmRleCwgcmV0cnkgPSAxOwogCWlkZV9od2lmX3QgKmh3aWY7CkBAIC04MDEsNyArNzk1LDcgQEAKIAogCWlmICghaW5pdGlhbGl6aW5nKSB7CiAJCXByb2JlX2h3aWZfaW5pdF93aXRoX2ZpeHVwKGh3aWYsIGZpeHVwKTsKLQkJY3JlYXRlX3Byb2NfaWRlX2ludGVyZmFjZXMoKTsKKwkJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChod2lmKTsKIAl9CiAKIAlpZiAoaHdpZnApCkBAIC04MTIsOSArODA2LDkgQEAKIAogRVhQT1JUX1NZTUJPTChpZGVfcmVnaXN0ZXJfaHdfd2l0aF9maXh1cCk7CiAKLWludCBpZGVfcmVnaXN0ZXJfaHcoaHdfcmVnc190ICpodywgaWRlX2h3aWZfdCAqKmh3aWZwKQoraW50IGlkZV9yZWdpc3Rlcl9odyhod19yZWdzX3QgKmh3LCBpbnQgaW5pdGlhbGl6aW5nLCBpZGVfaHdpZl90ICoqaHdpZnApCiB7Ci0JcmV0dXJuIGlkZV9yZWdpc3Rlcl9od193aXRoX2ZpeHVwKGh3LCBod2lmcCwgTlVMTCk7CisJcmV0dXJuIGlkZV9yZWdpc3Rlcl9od193aXRoX2ZpeHVwKGh3LCBpbml0aWFsaXppbmcsIGh3aWZwLCBOVUxMKTsKIH0KIAogRVhQT1JUX1NZTUJPTChpZGVfcmVnaXN0ZXJfaHcpOwpAQCAtODI1LDIwNSArODE5LDcgQEAKIAogREVDTEFSRV9NVVRFWChpZGVfc2V0dGluZ19zZW0pOwogCi0vKioKLSAqCV9faWRlX2FkZF9zZXR0aW5nCS0JYWRkIGFuIGlkZSBzZXR0aW5nIG9wdGlvbgotICoJQGRyaXZlOiBkcml2ZSB0byB1c2UKLSAqCUBuYW1lOiBzZXR0aW5nIG5hbWUKLSAqCUBydzogdHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgcmVhZCB3cml0ZQotICoJQHJlYWRfaW9jdGw6IGZ1bmN0aW9uIHRvIGNhbGwgb24gcmVhZAotICoJQHdyaXRlX2lvY3RsOiBmdW5jdGlvbiB0byBjYWxsIG9uIHdyaXRlCi0gKglAZGF0YV90eXBlOiB0eXBlIG9mIGRhdGEKLSAqCUBtaW46IHJhbmdlIG1pbmltdW0KLSAqCUBtYXg6IHJhbmdlIG1heGltdW0KLSAqCUBtdWxfZmFjdG9yOiBtdWx0aXBsaWNhdGlvbiBzY2FsZQotICoJQGRpdl9mYWN0b3I6IGRpdmlzb24gc2NhbGUKLSAqCUBkYXRhOiBwcml2YXRlIGRhdGEgZmllbGQKLSAqCUBzZXQ6IHNldHRpbmcKLSAqCUBhdXRvX3JlbW92ZTogc2V0dGluZyBhdXRvIHJlbW92YWwgZmxhZwotICoKLSAqCVJlbW92ZXMgdGhlIHNldHRpbmcgbmFtZWQgZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIHByZXNlbnQuCi0gKglUaGUgZnVuY3Rpb24gdGFrZXMgdGhlIHNldHRpbmdzX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IAotICoJcGFyYWxsZWwgY2hhbmdlcy4gVGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBJUlEKLSAqCWNvbnRleHQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuCi0gKgotICoJQlVHUzogVGhpcyBjb2RlIGlzIHNlcmlvdXNseSBvdmVyLWVuZ2luZWVyZWQuIFRoZXJlIGlzIGFsc28KLSAqCW1hZ2ljIGFib3V0IGhvdyB0aGUgZHJpdmVyIHNwZWNpZmljIGZlYXR1cmVzIGFyZSBzZXR1cC4gSWYKLSAqCWEgZHJpdmVyIGlzIGF0dGFjaGVkIHdlIGFzc3VtZSB0aGUgZHJpdmVyIHNldHRpbmdzIGFyZSBhdXRvCi0gKglyZW1vdmUuCi0gKi8KLQotc3RhdGljIGludCBfX2lkZV9hZGRfc2V0dGluZyhpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBydywgaW50IHJlYWRfaW9jdGwsIGludCB3cml0ZV9pb2N0bCwgaW50IGRhdGFfdHlwZSwgaW50IG1pbiwgaW50IG1heCwgaW50IG11bF9mYWN0b3IsIGludCBkaXZfZmFjdG9yLCB2b2lkICpkYXRhLCBpZGVfcHJvY3NldF90ICpzZXQsIGludCBhdXRvX3JlbW92ZSkKLXsKLQlpZGVfc2V0dGluZ3NfdCAqKnAgPSAoaWRlX3NldHRpbmdzX3QgKiopICZkcml2ZS0+c2V0dGluZ3MsICpzZXR0aW5nID0gTlVMTDsKLQotCWRvd24oJmlkZV9zZXR0aW5nX3NlbSk7Ci0Jd2hpbGUgKCgqcCkgJiYgc3RyY21wKCgqcCktPm5hbWUsIG5hbWUpIDwgMCkKLQkJcCA9ICYoKCpwKS0+bmV4dCk7Ci0JaWYgKChzZXR0aW5nID0ga3phbGxvYyhzaXplb2YoKnNldHRpbmcpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKLQkJZ290byBhYm9ydDsKLQlpZiAoKHNldHRpbmctPm5hbWUgPSBrbWFsbG9jKHN0cmxlbihuYW1lKSArIDEsIEdGUF9LRVJORUwpKSA9PSBOVUxMKQotCQlnb3RvIGFib3J0OwotCXN0cmNweShzZXR0aW5nLT5uYW1lLCBuYW1lKTsKLQlzZXR0aW5nLT5ydyA9IHJ3OwotCXNldHRpbmctPnJlYWRfaW9jdGwgPSByZWFkX2lvY3RsOwotCXNldHRpbmctPndyaXRlX2lvY3RsID0gd3JpdGVfaW9jdGw7Ci0Jc2V0dGluZy0+ZGF0YV90eXBlID0gZGF0YV90eXBlOwotCXNldHRpbmctPm1pbiA9IG1pbjsKLQlzZXR0aW5nLT5tYXggPSBtYXg7Ci0Jc2V0dGluZy0+bXVsX2ZhY3RvciA9IG11bF9mYWN0b3I7Ci0Jc2V0dGluZy0+ZGl2X2ZhY3RvciA9IGRpdl9mYWN0b3I7Ci0Jc2V0dGluZy0+ZGF0YSA9IGRhdGE7Ci0Jc2V0dGluZy0+c2V0ID0gc2V0OwotCQotCXNldHRpbmctPm5leHQgPSAqcDsKLQlpZiAoYXV0b19yZW1vdmUpCi0JCXNldHRpbmctPmF1dG9fcmVtb3ZlID0gMTsKLQkqcCA9IHNldHRpbmc7Ci0JdXAoJmlkZV9zZXR0aW5nX3NlbSk7Ci0JcmV0dXJuIDA7Ci1hYm9ydDoKLQl1cCgmaWRlX3NldHRpbmdfc2VtKTsKLQlrZnJlZShzZXR0aW5nKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLWludCBpZGVfYWRkX3NldHRpbmcoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgcncsIGludCByZWFkX2lvY3RsLCBpbnQgd3JpdGVfaW9jdGwsIGludCBkYXRhX3R5cGUsIGludCBtaW4sIGludCBtYXgsIGludCBtdWxfZmFjdG9yLCBpbnQgZGl2X2ZhY3Rvciwgdm9pZCAqZGF0YSwgaWRlX3Byb2NzZXRfdCAqc2V0KQotewotCXJldHVybiBfX2lkZV9hZGRfc2V0dGluZyhkcml2ZSwgbmFtZSwgcncsIHJlYWRfaW9jdGwsIHdyaXRlX2lvY3RsLCBkYXRhX3R5cGUsIG1pbiwgbWF4LCBtdWxfZmFjdG9yLCBkaXZfZmFjdG9yLCBkYXRhLCBzZXQsIDEpOwotfQotCi1FWFBPUlRfU1lNQk9MKGlkZV9hZGRfc2V0dGluZyk7Ci0KLS8qKgotICoJX19pZGVfcmVtb3ZlX3NldHRpbmcJLQlyZW1vdmUgYW4gaWRlIHNldHRpbmcgb3B0aW9uCi0gKglAZHJpdmU6IGRyaXZlIHRvIHVzZQotICoJQG5hbWU6IHNldHRpbmcgbmFtZQotICoKLSAqCVJlbW92ZXMgdGhlIHNldHRpbmcgbmFtZWQgZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIHByZXNlbnQuCi0gKglUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgc2V0dGluZyBzZW1hcGhvcmUuCi0gKi8KLSAKLXN0YXRpYyB2b2lkIF9faWRlX3JlbW92ZV9zZXR0aW5nIChpZGVfZHJpdmVfdCAqZHJpdmUsIGNoYXIgKm5hbWUpCi17Ci0JaWRlX3NldHRpbmdzX3QgKipwLCAqc2V0dGluZzsKLQotCXAgPSAoaWRlX3NldHRpbmdzX3QgKiopICZkcml2ZS0+c2V0dGluZ3M7Ci0KLQl3aGlsZSAoKCpwKSAmJiBzdHJjbXAoKCpwKS0+bmFtZSwgbmFtZSkpCi0JCXAgPSAmKCgqcCktPm5leHQpOwotCWlmICgoc2V0dGluZyA9ICgqcCkpID09IE5VTEwpCi0JCXJldHVybjsKLQotCSgqcCkgPSBzZXR0aW5nLT5uZXh0OwotCQotCWtmcmVlKHNldHRpbmctPm5hbWUpOwotCWtmcmVlKHNldHRpbmcpOwotfQotCi0vKioKLSAqCWlkZV9maW5kX3NldHRpbmdfYnlfaW9jdGwJLQlmaW5kIGEgZHJpdmUgc3BlY2lmaWMgaW9jdGwKLSAqCUBkcml2ZTogZHJpdmUgdG8gc2NhbgotICoJQGNtZDogaW9jdGwgY29tbWFuZCB0byBoYW5kbGUKLSAqCi0gKglTY2FuJ3MgdGhlIGRldmljZSBzZXR0aW5nIHRhYmxlIGZvciBhIG1hdGNoaW5nIGVudHJ5IGFuZCByZXR1cm5zCi0gKgl0aGlzIG9yIE5VTEwgaWYgbm8gZW50cnkgaXMgZm91bmQuIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZQotICoJc2V0dGluZyBzZW1hcGhvcmUKLSAqLwotIAotc3RhdGljIGlkZV9zZXR0aW5nc190ICppZGVfZmluZF9zZXR0aW5nX2J5X2lvY3RsIChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBjbWQpCi17Ci0JaWRlX3NldHRpbmdzX3QgKnNldHRpbmcgPSBkcml2ZS0+c2V0dGluZ3M7Ci0KLQl3aGlsZSAoc2V0dGluZykgewotCQlpZiAoc2V0dGluZy0+cmVhZF9pb2N0bCA9PSBjbWQgfHwgc2V0dGluZy0+d3JpdGVfaW9jdGwgPT0gY21kKQotCQkJYnJlYWs7Ci0JCXNldHRpbmcgPSBzZXR0aW5nLT5uZXh0OwotCX0KLQkKLQlyZXR1cm4gc2V0dGluZzsKLX0KLQotLyoqCi0gKglpZGVfZmluZF9zZXR0aW5nX2J5X25hbWUJLQlmaW5kIGEgZHJpdmUgc3BlY2lmaWMgc2V0dGluZwotICoJQGRyaXZlOiBkcml2ZSB0byBzY2FuCi0gKglAbmFtZTogc2V0dGluZyBuYW1lCi0gKgotICoJU2NhbidzIHRoZSBkZXZpY2Ugc2V0dGluZyB0YWJsZSBmb3IgYSBtYXRjaGluZyBlbnRyeSBhbmQgcmV0dXJucwotICoJdGhpcyBvciBOVUxMIGlmIG5vIGVudHJ5IGlzIGZvdW5kLiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUKLSAqCXNldHRpbmcgc2VtYXBob3JlCi0gKi8KLSAKLWlkZV9zZXR0aW5nc190ICppZGVfZmluZF9zZXR0aW5nX2J5X25hbWUgKGlkZV9kcml2ZV90ICpkcml2ZSwgY2hhciAqbmFtZSkKLXsKLQlpZGVfc2V0dGluZ3NfdCAqc2V0dGluZyA9IGRyaXZlLT5zZXR0aW5nczsKLQotCXdoaWxlIChzZXR0aW5nKSB7Ci0JCWlmIChzdHJjbXAoc2V0dGluZy0+bmFtZSwgbmFtZSkgPT0gMCkKLQkJCWJyZWFrOwotCQlzZXR0aW5nID0gc2V0dGluZy0+bmV4dDsKLQl9Ci0JcmV0dXJuIHNldHRpbmc7Ci19Ci0KLS8qKgotICoJYXV0b19yZW1vdmVfc2V0dGluZ3MJLQlyZW1vdmUgZHJpdmVyIHNwZWNpZmljIHNldHRpbmdzCi0gKglAZHJpdmU6IGRyaXZlCi0gKgotICoJQXV0b21hdGljYWxseSByZW1vdmUgYWxsIHRoZSBkcml2ZXIgc3BlY2lmaWMgc2V0dGluZ3MgZm9yIHRoaXMKLSAqCWRyaXZlLiBUaGlzIGZ1bmN0aW9uIG1heSBub3QgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQuIFRoZQotICoJY2FsbGVyIG11c3QgaG9sZCBpZGVfc2V0dGluZ19zZW0uCi0gKi8KLSAKLXN0YXRpYyB2b2lkIGF1dG9fcmVtb3ZlX3NldHRpbmdzIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX3NldHRpbmdzX3QgKnNldHRpbmc7Ci1yZXBlYXQ6Ci0Jc2V0dGluZyA9IGRyaXZlLT5zZXR0aW5nczsKLQl3aGlsZSAoc2V0dGluZykgewotCQlpZiAoc2V0dGluZy0+YXV0b19yZW1vdmUpIHsKLQkJCV9faWRlX3JlbW92ZV9zZXR0aW5nKGRyaXZlLCBzZXR0aW5nLT5uYW1lKTsKLQkJCWdvdG8gcmVwZWF0OwotCQl9Ci0JCXNldHRpbmcgPSBzZXR0aW5nLT5uZXh0OwotCX0KLX0KLQotLyoqCi0gKglpZGVfcmVhZF9zZXR0aW5nCS0JcmVhZCBhbiBJREUgc2V0dGluZwotICoJQGRyaXZlOiBkcml2ZSB0byByZWFkIGZyb20KLSAqCUBzZXR0aW5nOiBkcml2ZSBzZXR0aW5nCi0gKgotICoJUmVhZCBhIGRyaXZlIHNldHRpbmcgYW5kIHJldHVybiB0aGUgdmFsdWUuIFRoZSBjYWxsZXIKLSAqCW11c3QgaG9sZCB0aGUgaWRlX3NldHRpbmdfc2VtIHdoZW4gbWFraW5nIHRoaXMgY2FsbC4KLSAqCi0gKglCVUdTOiB0aGUgZGF0YSByZXR1cm4gYW5kIGVycm9yIGFyZSB0aGUgc2FtZSByZXR1cm4gdmFsdWUKLSAqCXNvIGFuIGVycm9yIC1FSU5WQUwgYW5kIHRydWUgcmV0dXJuIG9mIHRoZSBzYW1lIHZhbHVlIGNhbm5vdAotICoJYmUgdG9sZCBhcGFydAotICovCi0gCi1pbnQgaWRlX3JlYWRfc2V0dGluZyAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfc2V0dGluZ3NfdCAqc2V0dGluZykKLXsKLQlpbnQJCXZhbCA9IC1FSU5WQUw7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQotCWlmICgoc2V0dGluZy0+cncgJiBTRVRUSU5HX1JFQUQpKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwotCQlzd2l0Y2goc2V0dGluZy0+ZGF0YV90eXBlKSB7Ci0JCQljYXNlIFRZUEVfQllURToKLQkJCQl2YWwgPSAqKCh1OCAqKSBzZXR0aW5nLT5kYXRhKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgVFlQRV9TSE9SVDoKLQkJCQl2YWwgPSAqKCh1MTYgKikgc2V0dGluZy0+ZGF0YSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFRZUEVfSU5UOgotCQkJY2FzZSBUWVBFX0lOVEE6Ci0JCQkJdmFsID0gKigodTMyICopIHNldHRpbmctPmRhdGEpOwotCQkJCWJyZWFrOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JfQotCXJldHVybiB2YWw7Ci19CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0dGluZ19zZW0pOwogCiAvKioKICAqCWlkZV9zcGluX3dhaXRfaHdncm91cAktCXdhaXQgZm9yIGdyb3VwCkBAIC0xMDU4LDYxICs4NTQsMTQgQEAKIAogRVhQT1JUX1NZTUJPTChpZGVfc3Bpbl93YWl0X2h3Z3JvdXApOwogCi0vKioKLSAqCWlkZV93cml0ZV9zZXR0aW5nCS0JcmVhZCBhbiBJREUgc2V0dGluZwotICoJQGRyaXZlOiBkcml2ZSB0byByZWFkIGZyb20KLSAqCUBzZXR0aW5nOiBkcml2ZSBzZXR0aW5nCi0gKglAdmFsOiB2YWx1ZQotICoKLSAqCVdyaXRlIGEgZHJpdmUgc2V0dGluZyBpZiBpdCBpcyBwb3NzaWJsZS4gVGhlIGNhbGxlcgotICoJbXVzdCBob2xkIHRoZSBpZGVfc2V0dGluZ19zZW0gd2hlbiBtYWtpbmcgdGhpcyBjYWxsLgotICoKLSAqCUJVR1M6IHRoZSBkYXRhIHJldHVybiBhbmQgZXJyb3IgYXJlIHRoZSBzYW1lIHJldHVybiB2YWx1ZQotICoJc28gYW4gZXJyb3IgLUVJTlZBTCBhbmQgdHJ1ZSByZXR1cm4gb2YgdGhlIHNhbWUgdmFsdWUgY2Fubm90Ci0gKgliZSB0b2xkIGFwYXJ0Ci0gKgotICoJRklYTUU6ICBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGVucXVldWUgYSBzcGVjaWFsIHJlcXVlc3QKLSAqCXRvIHRoZSBkcml2ZXIgdG8gY2hhbmdlIHNldHRpbmdzLCBhbmQgdGhlbiB3YWl0IG9uIGEgc2VtYSBmb3IgY29tcGxldGlvbi4KLSAqCVRoZSBjdXJyZW50IHNjaGVtZSBvZiBwb2xsaW5nIGlzIGtsdWRneSwgdGhvdWdoIHNhZmUgZW5vdWdoLgotICovCi0KLWludCBpZGVfd3JpdGVfc2V0dGluZyAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfc2V0dGluZ3NfdCAqc2V0dGluZywgaW50IHZhbCkKK2ludCBzZXRfaW9fMzJiaXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQogewotCWludCBpOwotCXUzMiAqcDsKLQotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FQUNDRVM7Ci0JaWYgKCEoc2V0dGluZy0+cncgJiBTRVRUSU5HX1dSSVRFKSkKKwlpZiAoZHJpdmUtPm5vX2lvXzMyYml0KQogCQlyZXR1cm4gLUVQRVJNOwotCWlmICh2YWwgPCBzZXR0aW5nLT5taW4gfHwgdmFsID4gc2V0dGluZy0+bWF4KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoc2V0dGluZy0+c2V0KQotCQlyZXR1cm4gc2V0dGluZy0+c2V0KGRyaXZlLCB2YWwpOwotCWlmIChpZGVfc3Bpbl93YWl0X2h3Z3JvdXAoZHJpdmUpKQotCQlyZXR1cm4gLUVCVVNZOwotCXN3aXRjaCAoc2V0dGluZy0+ZGF0YV90eXBlKSB7Ci0JCWNhc2UgVFlQRV9CWVRFOgotCQkJKigodTggKikgc2V0dGluZy0+ZGF0YSkgPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBUWVBFX1NIT1JUOgotCQkJKigodTE2ICopIHNldHRpbmctPmRhdGEpID0gdmFsOwotCQkJYnJlYWs7Ci0JCWNhc2UgVFlQRV9JTlQ6Ci0JCQkqKCh1MzIgKikgc2V0dGluZy0+ZGF0YSkgPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBUWVBFX0lOVEE6Ci0JCQlwID0gKHUzMiAqKSBzZXR0aW5nLT5kYXRhOwotCQkJZm9yIChpID0gMDsgaSA8IDEgPDwgUEFSVE5fQklUUzsgaSsrLCBwKyspCi0JCQkJKnAgPSB2YWw7Ci0JCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7Ci0JcmV0dXJuIDA7Ci19CiAKLXN0YXRpYyBpbnQgc2V0X2lvXzMyYml0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxICsgKFNVUFBPUlRfVkxCX1NZTkMgPDwgMSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJZHJpdmUtPmlvXzMyYml0ID0gYXJnOwogI2lmZGVmIENPTkZJR19CTEtfREVWX0RUQzIyNzgKIAlpZiAoSFdJRihkcml2ZSktPmNoaXBzZXQgPT0gaWRlX2R0YzIyNzgpCkBAIC0xMTIxLDEyICs4NzAsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXRfdXNpbmdfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCitzdGF0aWMgaW50IHNldF9rc2V0dGluZ3MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlkZV9zcGluX3dhaXRfaHdncm91cChkcml2ZSkpCisJCXJldHVybiAtRUJVU1k7CisJZHJpdmUtPmtlZXBfc2V0dGluZ3MgPSBhcmc7CisJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNldF91c2luZ19kbWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQogewogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlpbnQgZXJyID0gLUVQRVJNOwogCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoIWRyaXZlLT5pZCB8fCAhKGRyaXZlLT5pZC0+Y2FwYWJpbGl0eSAmIDEpKQogCQlnb3RvIG91dDsKIApAQCAtMTE0NSw2ICs5MTAsNyBAQAogCWVyciA9IDA7CiAKIAlpZiAoYXJnKSB7CisJCWh3aWYtPmRtYV9vZmZfcXVpZXRseShkcml2ZSk7CiAJCWlmIChpZGVfc2V0X2RtYShkcml2ZSkgfHwgaHdpZi0+aWRlX2RtYV9vbihkcml2ZSkpCiAJCQllcnIgPSAtRUlPOwogCX0gZWxzZQpAQCAtMTE1OSwxNCArOTI1LDIwIEBACiBvdXQ6CiAJcmV0dXJuIGVycjsKICNlbHNlCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlyZXR1cm4gLUVQRVJNOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgc2V0X3Bpb19tb2RlIChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCitpbnQgc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKIHsKIAlzdHJ1Y3QgcmVxdWVzdCBycTsKIAorCWlmIChhcmcgPCAwIHx8IGFyZyA+IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoIUhXSUYoZHJpdmUpLT50dW5lcHJvYykKIAkJcmV0dXJuIC1FTk9TWVM7CiAJaWYgKGRyaXZlLT5zcGVjaWFsLmIuc2V0X3R1bmUpCkBAIC0xMTc4LDQyICs5NTAsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXRfeGZlcl9yYXRlIChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCitzdGF0aWMgaW50IHNldF91bm1hc2tpcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQogewotCWludCBlcnIgPSBpZGVfd2FpdF9jbWQoZHJpdmUsCi0JCQlXSU5fU0VURkVBVFVSRVMsICh1OCkgYXJnLAotCQkJU0VURkVBVFVSRVNfWEZFUiwgMCwgTlVMTCk7CisJaWYgKGRyaXZlLT5ub191bm1hc2spCisJCXJldHVybiAtRVBFUk07CiAKLQlpZiAoIWVyciAmJiBhcmcpIHsKLQkJaWRlX3NldF94ZmVyX3JhdGUoZHJpdmUsICh1OCkgYXJnKTsKLQkJaWRlX2RyaXZlaWRfdXBkYXRlKGRyaXZlKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotLyoqCi0gKglpZGVfYWRkX2dlbmVyaWNfc2V0dGluZ3MJLQlnZW5lcmljIGlkZSBzZXR0aW5ncwotICoJQGRyaXZlOiBkcml2ZSBiZWluZyBjb25maWd1cmVkCi0gKgotICoJQWRkIHRoZSBnZW5lcmljIHBhcnRzIG9mIHRoZSBzeXN0ZW0gc2V0dGluZ3MgdG8gdGhlIC9wcm9jIGZpbGVzIGFuZAotICoJaW9jdGxzIGZvciB0aGlzIElERSBkZXZpY2UuIFRoZSBjYWxsZXIgbXVzdCBub3QgYmUgaG9sZGluZyB0aGUKLSAqCWlkZV9zZXR0aW5nX3NlbS4KLSAqLworCWlmIChpZGVfc3Bpbl93YWl0X2h3Z3JvdXAoZHJpdmUpKQorCQlyZXR1cm4gLUVCVVNZOworCWRyaXZlLT51bm1hc2sgPSBhcmc7CisJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CiAKLXZvaWQgaWRlX2FkZF9nZW5lcmljX3NldHRpbmdzIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0vKgotICoJCQkgIGRyaXZlCQlzZXR0aW5nIG5hbWUJCXJlYWQvd3JpdGUgYWNjZXNzCQkJCXJlYWQgaW9jdGwJCXdyaXRlIGlvY3RsCQlkYXRhIHR5cGUJbWluCW1heAkJCQltdWxfZmFjdG9yCWRpdl9mYWN0b3IJZGF0YSBwb2ludGVyCQkJc2V0IGZ1bmN0aW9uCi0gKi8KLQlfX2lkZV9hZGRfc2V0dGluZyhkcml2ZSwJImlvXzMyYml0IiwJCWRyaXZlLT5ub19pb18zMmJpdCA/IFNFVFRJTkdfUkVBRCA6IFNFVFRJTkdfUlcsCUhESU9fR0VUXzMyQklULAkJSERJT19TRVRfMzJCSVQsCQlUWVBFX0JZVEUsCTAsCTEgKyAoU1VQUE9SVF9WTEJfU1lOQyA8PCAxKSwJMSwJCTEsCQkmZHJpdmUtPmlvXzMyYml0LAkJc2V0X2lvXzMyYml0LAkwKTsKLQlfX2lkZV9hZGRfc2V0dGluZyhkcml2ZSwJImtlZXBzZXR0aW5ncyIsCQlTRVRUSU5HX1JXLAkJCQkJSERJT19HRVRfS0VFUFNFVFRJTkdTLAlIRElPX1NFVF9LRUVQU0VUVElOR1MsCVRZUEVfQllURSwJMCwJMSwJCQkJMSwJCTEsCQkmZHJpdmUtPmtlZXBfc2V0dGluZ3MsCQlOVUxMLAkJMCk7Ci0JX19pZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJuaWNlMSIsCQlTRVRUSU5HX1JXLAkJCQkJLTEsCQkJLTEsCQkJVFlQRV9CWVRFLAkwLAkxLAkJCQkxLAkJMSwJCSZkcml2ZS0+bmljZTEsCQkJTlVMTCwJCTApOwotCV9faWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkicGlvX21vZGUiLAkJU0VUVElOR19XUklURSwJCQkJCS0xLAkJCUhESU9fU0VUX1BJT19NT0RFLAlUWVBFX0JZVEUsCTAsCTI1NSwJCQkJMSwJCTEsCQlOVUxMLAkJCQlzZXRfcGlvX21vZGUsCTApOwotCV9faWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkidW5tYXNraXJxIiwJCWRyaXZlLT5ub191bm1hc2sgPyBTRVRUSU5HX1JFQUQgOiBTRVRUSU5HX1JXLAlIRElPX0dFVF9VTk1BU0tJTlRSLAlIRElPX1NFVF9VTk1BU0tJTlRSLAlUWVBFX0JZVEUsCTAsCTEsCQkJCTEsCQkxLAkJJmRyaXZlLT51bm1hc2ssCQkJTlVMTCwJCTApOwotCV9faWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkidXNpbmdfZG1hIiwJCVNFVFRJTkdfUlcsCQkJCQlIRElPX0dFVF9ETUEsCQlIRElPX1NFVF9ETUEsCQlUWVBFX0JZVEUsCTAsCTEsCQkJCTEsCQkxLAkJJmRyaXZlLT51c2luZ19kbWEsCQlzZXRfdXNpbmdfZG1hLAkwKTsKLQlfX2lkZV9hZGRfc2V0dGluZyhkcml2ZSwJImluaXRfc3BlZWQiLAkJU0VUVElOR19SVywJCQkJCS0xLAkJCS0xLAkJCVRZUEVfQllURSwJMCwJNzAsCQkJCTEsCQkxLAkJJmRyaXZlLT5pbml0X3NwZWVkLAkJTlVMTCwJCTApOwotCV9faWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkiY3VycmVudF9zcGVlZCIsCVNFVFRJTkdfUlcsCQkJCQktMSwJCQktMSwJCQlUWVBFX0JZVEUsCTAsCTcwLAkJCQkxLAkJMSwJCSZkcml2ZS0+Y3VycmVudF9zcGVlZCwJCXNldF94ZmVyX3JhdGUsCTApOwotCV9faWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkibnVtYmVyIiwJCVNFVFRJTkdfUlcsCQkJCQktMSwJCQktMSwJCQlUWVBFX0JZVEUsCTAsCTMsCQkJCTEsCQkxLAkJJmRyaXZlLT5kbiwJCQlOVUxMLAkJMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTI4NSwyNyArMTAzNSwyMyBAQAogaW50IGdlbmVyaWNfaWRlX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlpZGVfc2V0dGluZ3NfdCAqc2V0dGluZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWlkZV9kcml2ZXJfdCAqZHJ2OwotCWludCBlcnIgPSAwOwogCXZvaWQgX191c2VyICpwID0gKHZvaWQgX191c2VyICopYXJnOworCWludCBlcnIgPSAwLCAoKnNldGZ1bmMpKGlkZV9kcml2ZV90ICosIGludCk7CisJdTggKnZhbDsKIAotCWRvd24oJmlkZV9zZXR0aW5nX3NlbSk7Ci0JaWYgKChzZXR0aW5nID0gaWRlX2ZpbmRfc2V0dGluZ19ieV9pb2N0bChkcml2ZSwgY21kKSkgIT0gTlVMTCkgewotCQlpZiAoY21kID09IHNldHRpbmctPnJlYWRfaW9jdGwpIHsKLQkJCWVyciA9IGlkZV9yZWFkX3NldHRpbmcoZHJpdmUsIHNldHRpbmcpOwotCQkJdXAoJmlkZV9zZXR0aW5nX3NlbSk7Ci0JCQlyZXR1cm4gZXJyID49IDAgPyBwdXRfdXNlcihlcnIsIChsb25nIF9fdXNlciAqKWFyZykgOiBlcnI7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJZWxzZQotCQkJCWVyciA9IGlkZV93cml0ZV9zZXR0aW5nKGRyaXZlLCBzZXR0aW5nLCBhcmcpOwotCQkJdXAoJmlkZV9zZXR0aW5nX3NlbSk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEhESU9fR0VUXzMyQklUOgkgICAgdmFsID0gJmRyaXZlLT5pb18zMmJpdDsJIGdvdG8gcmVhZF92YWw7CisJY2FzZSBIRElPX0dFVF9LRUVQU0VUVElOR1M6IHZhbCA9ICZkcml2ZS0+a2VlcF9zZXR0aW5nczsgZ290byByZWFkX3ZhbDsKKwljYXNlIEhESU9fR0VUX1VOTUFTS0lOVFI6ICAgdmFsID0gJmRyaXZlLT51bm1hc2s7CSBnb3RvIHJlYWRfdmFsOworCWNhc2UgSERJT19HRVRfRE1BOgkgICAgdmFsID0gJmRyaXZlLT51c2luZ19kbWE7CSBnb3RvIHJlYWRfdmFsOworCWNhc2UgSERJT19TRVRfMzJCSVQ6CSAgICBzZXRmdW5jID0gc2V0X2lvXzMyYml0OwkgZ290byBzZXRfdmFsOworCWNhc2UgSERJT19TRVRfS0VFUFNFVFRJTkdTOiBzZXRmdW5jID0gc2V0X2tzZXR0aW5nczsJIGdvdG8gc2V0X3ZhbDsKKwljYXNlIEhESU9fU0VUX1BJT19NT0RFOgkgICAgc2V0ZnVuYyA9IHNldF9waW9fbW9kZTsJIGdvdG8gc2V0X3ZhbDsKKwljYXNlIEhESU9fU0VUX1VOTUFTS0lOVFI6ICAgc2V0ZnVuYyA9IHNldF91bm1hc2tpcnE7CSBnb3RvIHNldF92YWw7CisJY2FzZSBIRElPX1NFVF9ETUE6CSAgICBzZXRmdW5jID0gc2V0X3VzaW5nX2RtYTsJIGdvdG8gc2V0X3ZhbDsKIAl9Ci0JdXAoJmlkZV9zZXR0aW5nX3NlbSk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCQljYXNlIEhESU9fT0JTT0xFVEVfSURFTlRJVFk6CkBAIC0xMzU5LDcgKzExMDUsNyBAQAogCQkJaWRlX2luaXRfaHdpZl9wb3J0cygmaHcsICh1bnNpZ25lZCBsb25nKSBhcmdzWzBdLAogCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpIGFyZ3NbMV0sIE5VTEwpOwogCQkJaHcuaXJxID0gYXJnc1syXTsKLQkJCWlmIChpZGVfcmVnaXN0ZXJfaHcoJmh3LCBOVUxMKSA9PSAtMSkKKwkJCWlmIChpZGVfcmVnaXN0ZXJfaHcoJmh3LCAwLCBOVUxMKSA9PSAtMSkKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xNDM0LDYgKzExODAsMjggQEAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KKworcmVhZF92YWw6CisJZG93bigmaWRlX3NldHRpbmdfc2VtKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwllcnIgPSAqdmFsOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJdXAoJmlkZV9zZXR0aW5nX3NlbSk7CisJcmV0dXJuIGVyciA+PSAwID8gcHV0X3VzZXIoZXJyLCAobG9uZyBfX3VzZXIgKilhcmcpIDogZXJyOworCitzZXRfdmFsOgorCWlmIChiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKQorCQllcnIgPSAtRUlOVkFMOworCWVsc2UgeworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQllcnIgPSAtRUFDQ0VTOworCQllbHNlIHsKKwkJCWRvd24oJmlkZV9zZXR0aW5nX3NlbSk7CisJCQllcnIgPSBzZXRmdW5jKGRyaXZlLCBhcmcpOworCQkJdXAoJmlkZV9zZXR0aW5nX3NlbSk7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKIH0KIAogRVhQT1JUX1NZTUJPTChnZW5lcmljX2lkZV9pb2N0bCk7CkBAIC0xNTY2LDEzICsxMzM0LDEzIEBACiAJCXJldHVybiAxOwogCX0KIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERVBDSQorI2lmZGVmIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSCiAJaWYgKCFzdHJjbXAocywgImlkZT1yZXZlcnNlIikpIHsKIAkJaWRlX3NjYW5fZGlyZWN0aW9uID0gMTsKIAkJcHJpbnRrKCIgOiBFbmFibGVkIHN1cHBvcnQgZm9yIElERSBpbnZlcnNlIHNjYW4gb3JkZXIuXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERVBDSSAqLworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCiAJaWYgKCFzdHJjbXAocywgImlkZT1ub2FjcGkiKSkgewpAQCAtMTgzMiw5ICsxNjAwLDkgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IHByb2JlX2Zvcl9od2lmcyAodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKKyNpZmRlZiBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUgogCWlkZV9zY2FuX3BjaWJ1cyhpZGVfc2Nhbl9kaXJlY3Rpb24pOwotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERVBDSSAqLworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRVRSQVhfSURFCiAJewpAQCAtMTg5Miw1NCArMTY2MCw2IEBACiAjZW5kaWYKIH0KIAotdm9pZCBpZGVfcmVnaXN0ZXJfc3ViZHJpdmVyKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2RyaXZlcl90ICpkcml2ZXIpCi17Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlpZGVfYWRkX3Byb2NfZW50cmllcyhkcml2ZS0+cHJvYywgZHJpdmVyLT5wcm9jLCBkcml2ZSk7Ci0jZW5kaWYKLX0KLQotRVhQT1JUX1NZTUJPTChpZGVfcmVnaXN0ZXJfc3ViZHJpdmVyKTsKLQotLyoqCi0gKglpZGVfdW5yZWdpc3Rlcl9zdWJkcml2ZXIJLQlkaXNjb25uZWN0IGRyaXZlIGZyb20gZHJpdmVyCi0gKglAZHJpdmU6IGRyaXZlIHRvIHVucGx1ZwotICoJQGRyaXZlcjogZHJpdmVyCi0gKgotICoJRGlzY29ubmVjdCBhIGRyaXZlIGZyb20gdGhlIGRyaXZlciBpdCB3YXMgYXR0YWNoZWQgdG8gYW5kIHRoZW4KLSAqCWNsZWFuIHVwIHRoZSB2YXJpb3VzIHByb2MgZmlsZXMgYW5kIG90aGVyIG9iamVjdHMgYXR0YWNoZWQgdG8gaXQuCi0gKgotICoJVGFrZXMgaWRlX3NldHRpbmdfc2VtIGFuZCBpZGVfbG9jay4KLSAqCUNhbGxlciBtdXN0IGhvbGQgbm9uZSBvZiB0aGUgbG9ja3MuCi0gKi8KLQotdm9pZCBpZGVfdW5yZWdpc3Rlcl9zdWJkcml2ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfZHJpdmVyX3QgKmRyaXZlcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JaWRlX3JlbW92ZV9wcm9jX2VudHJpZXMoZHJpdmUtPnByb2MsIGRyaXZlci0+cHJvYyk7Ci0jZW5kaWYKLQlkb3duKCZpZGVfc2V0dGluZ19zZW0pOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwotCS8qCi0JICogaWRlX3NldHRpbmdfc2VtIHByb3RlY3RzIHRoZSBzZXR0aW5ncyBsaXN0Ci0JICogaWRlX2xvY2sgcHJvdGVjdHMgdGhlIHVzZSBvZiBzZXR0aW5ncwotCSAqCi0JICogc28gd2UgbmVlZCB0byBob2xkIGJvdGgsIGlkZV9zZXR0aW5nc19zZW0gYmVjYXVzZSB3ZSB3YW50IHRvCi0JICogbW9kaWZ5IHRoZSBzZXR0aW5ncyBsaXN0LCBhbmQgaWRlX2xvY2sgYmVjYXVzZSB3ZSBjYW5ub3QgdGFrZQotCSAqIGEgc2V0dGluZyBvdXQgdGhhdCBpcyBiZWluZyB1c2VkLgotCSAqCi0JICogT1RPSCBib3RoIGlkZV97cmVhZCx3cml0ZX1fc2V0dGluZyBhcmUgb25seSBldmVyIHVzZWQgdW5kZXIKLQkgKiBpZGVfc2V0dGluZ19zZW0uCi0JICovCi0JYXV0b19yZW1vdmVfc2V0dGluZ3MoZHJpdmUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JdXAoJmlkZV9zZXR0aW5nX3NlbSk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woaWRlX3VucmVnaXN0ZXJfc3ViZHJpdmVyKTsKLQogLyoKICAqIFByb2JlIG1vZHVsZQogICovCkBAIC0yMDcxLDkgKzE3OTEsNyBAQAogCiAJaW5pdF9pZGVfZGF0YSgpOwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlwcm9jX2lkZV9yb290ID0gcHJvY19ta2RpcigiaWRlIiwgTlVMTCk7Ci0jZW5kaWYKKwlwcm9jX2lkZV9jcmVhdGUoKTsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0FMSTE0WFgKIAlpZiAocHJvYmVfYWxpMTR4eCkKQEAgLTIwOTYsMTQgKzE4MTQsOSBAQAogCQkodm9pZClxZDY1eHhfaW5pdCgpOwogI2VuZGlmCiAKLQlpbml0aWFsaXppbmcgPSAxOwogCS8qIFByb2JlIGZvciBzcGVjaWFsIFBDSSBhbmQgb3RoZXIgImtub3duIiBpbnRlcmZhY2UgY2hpcHNldHMuICovCiAJcHJvYmVfZm9yX2h3aWZzKCk7Ci0JaW5pdGlhbGl6aW5nID0gMDsKIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcHJvY19pZGVfY3JlYXRlKCk7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE0Myw5ICsxODU2LDcgQEAKIAlwbnBpZGVfZXhpdCgpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXByb2NfaWRlX2Rlc3Ryb3koKTsKLSNlbmRpZgogCiAJYnVzX3VucmVnaXN0ZXIoJmlkZV9idXNfdHlwZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvYWxpMTR4eC5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2FsaTE0eHguYwppbmRleCA5MTk2MWFhLi5kZjE3ZWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvYWxpMTR4eC5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9hbGkxNHh4LmMKQEAgLTIyMyw3ICsyMjMsOCBAQAogCXByb2JlX2h3aWZfaW5pdChod2lmKTsKIAlwcm9iZV9od2lmX2luaXQobWF0ZSk7CiAKLQljcmVhdGVfcHJvY19pZGVfaW50ZXJmYWNlcygpOworCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChtYXRlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2J1ZGRoYS5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2J1ZGRoYS5jCmluZGV4IDFlZDIyNGEuLjEwMWFlZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9idWRkaGEuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvYnVkZGhhLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCQkJCQkJSVJRX0FNSUdBX1BPUlRTKTsKIAkJCX0JCiAJCQkKLQkJCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgJmh3aWYpOworCQkJaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAxLCAmaHdpZik7CiAJCQlpZiAoaW5kZXggIT0gLTEpIHsKIAkJCQlod2lmLT5tbWlvID0gMTsKIAkJCQlwcmludGsoImlkZSVkOiAiLCBpbmRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvZHRjMjI3OC5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2R0YzIyNzguYwppbmRleCAwMjE5ZmZhLi4zNmEzZjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvZHRjMjI3OC5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9kdGMyMjc4LmMKQEAgLTEzOCw3ICsxMzgsOCBAQAogCXByb2JlX2h3aWZfaW5pdChod2lmKTsKIAlwcm9iZV9od2lmX2luaXQobWF0ZSk7CiAKLQljcmVhdGVfcHJvY19pZGVfaW50ZXJmYWNlcygpOworCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChtYXRlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2ZhbGNvbmlkZS5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2ZhbGNvbmlkZS5jCmluZGV4IGE5ZjJjZDUuLmUxZTlkOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9mYWxjb25pZGUuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvZmFsY29uaWRlLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAkJCTAsIDAsIE5VTEwsCiAvLwkJCWZhbGNvbmlkZV9pb3BzLAogCQkJSVJRX01GUF9JREUpOwotCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgTlVMTCk7CisJaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAxLCBOVUxMKTsKIAogCWlmIChpbmRleCAhPSAtMSkKIAkgICAgcHJpbnRrKCJpZGUlZDogRmFsY29uIElERSBpbnRlcmZhY2VcbiIsIGluZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9nYXlsZS5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMKaW5kZXggZGNmYWRiYi4uMDgzMGEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogLy8JCQkmZ2F5bGVfaW9wcywKIAkJCUlSUV9BTUlHQV9QT1JUUyk7CiAKLQlpbmRleCA9IGlkZV9yZWdpc3Rlcl9odygmaHcsICZod2lmKTsKKwlpbmRleCA9IGlkZV9yZWdpc3Rlcl9odygmaHcsIDEsICZod2lmKTsKIAlpZiAoaW5kZXggIT0gLTEpIHsKIAkgICAgaHdpZi0+bW1pbyA9IDE7CiAJICAgIHN3aXRjaCAoaSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2h0NjU2MGIuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9odDY1NjBiLmMKaW5kZXggYTI4MzI2NC4uYzhmMzUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2h0NjU2MGIuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaHQ2NTYwYi5jCkBAIC0zNTcsNyArMzU3LDggQEAKIAlwcm9iZV9od2lmX2luaXQoaHdpZik7CiAJcHJvYmVfaHdpZl9pbml0KG1hdGUpOwogCi0JY3JlYXRlX3Byb2NfaWRlX2ludGVyZmFjZXMoKTsKKwlpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KGh3aWYpOworCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQobWF0ZSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCmluZGV4IGM2NTIyYTYuLjJmMzk3N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogICAgIGh3LmlycSA9IGlycTsKICAgICBody5jaGlwc2V0ID0gaWRlX3BjaTsKICAgICBody5kZXYgPSAmaGFuZGxlLT5kZXY7Ci0gICAgcmV0dXJuIGlkZV9yZWdpc3Rlcl9od193aXRoX2ZpeHVwKCZodywgTlVMTCwgaWRlX3VuZGVjb2RlZF9zbGF2ZSk7CisgICAgcmV0dXJuIGlkZV9yZWdpc3Rlcl9od193aXRoX2ZpeHVwKCZodywgMCwgTlVMTCwgaWRlX3VuZGVjb2RlZF9zbGF2ZSk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L21hY2lkZS5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L21hY2lkZS5jCmluZGV4IDRjMDA3OWEuLmMyMTFmYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9tYWNpZGUuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvbWFjaWRlLmMKQEAgLTEwMiwyMSArMTAyLDIxIEBACiAJCQkJMCwgMCwgbWFjaWRlX2Fja19pbnRyLAogLy8JCQkJcXVhZHJhX2lkZV9pb3BzLAogCQkJCUlSUV9OVUJVU19GKTsKLQkJaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAmaHdpZik7CisJCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgMSwgJmh3aWYpOwogCQlicmVhazsKIAljYXNlIE1BQ19JREVfUEI6CiAJCWlkZV9zZXR1cF9wb3J0cygmaHcsIElERV9CQVNFLCBtYWNpZGVfb2Zmc2V0cywKIAkJCQkwLCAwLCBtYWNpZGVfYWNrX2ludHIsCiAvLwkJCQltYWNpZGVfcGJfaW9wcywKIAkJCQlJUlFfTlVCVVNfQyk7Ci0JCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgJmh3aWYpOworCQlpbmRleCA9IGlkZV9yZWdpc3Rlcl9odygmaHcsIDEsICZod2lmKTsKIAkJYnJlYWs7CiAJY2FzZSBNQUNfSURFX0JBQk9PTjoKIAkJaWRlX3NldHVwX3BvcnRzKCZodywgQkFCT09OX0JBU0UsIG1hY2lkZV9vZmZzZXRzLAogCQkJCTAsIDAsIE5VTEwsCiAvLwkJCQltYWNpZGVfYmFib29uX2lvcHMsCiAJCQkJSVJRX0JBQk9PTl8xKTsKLQkJaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAmaHdpZik7CisJCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgMSwgJmh3aWYpOwogCQlpZiAoaW5kZXggPT0gLTEpIGJyZWFrOwogCQlpZiAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX1BCMTkwKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9xNDBpZGUuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9xNDBpZGUuYwppbmRleCA3NGYwODEyLi5lNjI4YTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvcTQwaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L3E0MGlkZS5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJCTAsIE5VTEwsCiAvLwkJCW02OGtpZGVfaW9wcywKIAkJCXE0MGlkZV9kZWZhdWx0X2lycShwY2lkZV9iYXNlc1tpXSkpOwotCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgJmh3aWYpOworCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgMSwgJmh3aWYpOwogCS8vICoqRklYTUUqKgogCWlmIChpbmRleCAhPSAtMSkKIAkJaHdpZi0+bW1pbyA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmMKaW5kZXggMmZiOGY1MC4uZDE0MTRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L3FkNjV4eC5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9xZDY1eHguYwpAQCAtNDI3LDcgKzQyNyw3IEBACiAJCXFkX3NldHVwKGh3aWYsIGJhc2UsIGNvbmZpZywgUUQ2NTAwX0RFRl9EQVRBLCBRRDY1MDBfREVGX0RBVEEsCiAJCQkgJnFkNjUwMF90dW5lX2RyaXZlKTsKIAotCQljcmVhdGVfcHJvY19pZGVfaW50ZXJmYWNlcygpOworCQlpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KGh3aWYpOwogCiAJCXJldHVybiAxOwogCX0KQEAgLTQ1OSw3ICs0NTksNyBAQAogCQkJCSAmcWQ2NTgwX3R1bmVfZHJpdmUpOwogCQkJcWRfd3JpdGVfcmVnKFFEX0RFRl9DT05UUixRRF9DT05UUk9MX1BPUlQpOwogCi0JCQljcmVhdGVfcHJvY19pZGVfaW50ZXJmYWNlcygpOworCQkJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChod2lmKTsKIAogCQkJcmV0dXJuIDE7CiAJCX0gZWxzZSB7CkBAIC00NzksNyArNDc5LDggQEAKIAkJCQkgJnFkNjU4MF90dW5lX2RyaXZlKTsKIAkJCXFkX3dyaXRlX3JlZyhRRF9ERUZfQ09OVFIsUURfQ09OVFJPTF9QT1JUKTsKIAotCQkJY3JlYXRlX3Byb2NfaWRlX2ludGVyZmFjZXMoKTsKKwkJCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisJCQlpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KG1hdGUpOwogCiAJCQlyZXR1cm4gMDsgLyogbm8gb3RoZXIgcWQ2NXh4IHBvc3NpYmxlICovCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS91bWM4NjcyLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvdW1jODY3Mi5jCmluZGV4IGNhNzk3NDQuLmRkYzQwM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS91bWM4NjcyLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L3VtYzg2NzIuYwpAQCAtMTYwLDcgKzE2MCw4IEBACiAJcHJvYmVfaHdpZl9pbml0KGh3aWYpOwogCXByb2JlX2h3aWZfaW5pdChtYXRlKTsKIAotCWNyZWF0ZV9wcm9jX2lkZV9pbnRlcmZhY2VzKCk7CisJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChod2lmKTsKKwlpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KG1hdGUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYyBiL2RyaXZlcnMvaWRlL21pcHMvYXUxeHh4LWlkZS5jCmluZGV4IGQ1NGQ5ZmUuLmNhOTVlOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL21pcHMvYXUxeHh4LWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL21pcHMvYXUxeHh4LWlkZS5jCkBAIC03NjAsNiArNzYwLDkgQEAKICNlbmRpZgogCiAJcHJvYmVfaHdpZl9pbml0KGh3aWYpOworCisJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChod2lmKTsKKwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGh3aWYpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQXUxeHh4IElERShidWlsdGluKSBjb25maWd1cmVkIGZvciAlc1xuIiwgbW9kZSApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbWlwcy9zd2FybS5jIGIvZHJpdmVycy9pZGUvbWlwcy9zd2FybS5jCmluZGV4IDgxZmEwNjguLjZlOTM1ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL21pcHMvc3dhcm0uYworKysgYi9kcml2ZXJzL2lkZS9taXBzL3N3YXJtLmMKQEAgLTEyOSw2ICsxMjksOSBAQAogCWh3aWYtPmlycSA9IGh3aWYtPmh3LmlycTsKIAogCXByb2JlX2h3aWZfaW5pdChod2lmKTsKKworCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBod2lmKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYyBiL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMKaW5kZXggNzNiZGY2NC4uYjE3M2JjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jCkBAIC04NywzOCArODcsMTIgQEAKIAlyZXR1cm4gY2hpcHNldF90YWJsZS0+dWx0cmFfc2V0dGluZ3M7CiB9CiAKLXN0YXRpYyB1OCBhZWM2Mnh4X3JhdGVtYXNrIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXU4IG1vZGU7Ci0KLQlzd2l0Y2goaHdpZi0+cGNpX2Rldi0+ZGV2aWNlKSB7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjU6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjVSOgotCQkJbW9kZSA9IChpbmIoaHdpZi0+Y2hhbm5lbCA/Ci0JCQkJICAgIGh3aWYtPm1hdGUtPmRtYV9zdGF0dXMgOgotCQkJCSAgICBod2lmLT5kbWFfc3RhdHVzKSAmIDB4MTApID8gNCA6IDM7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MDoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MFI6Ci0JCQltb2RlID0gMjsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODUwVUY6Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoIWVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkpCi0JCW1vZGUgPSBtaW4obW9kZSwgKHU4KTEpOwotCXJldHVybiBtb2RlOwotfQotCiBzdGF0aWMgaW50IGFlYzYyMTBfdHVuZV9jaGlwc2V0IChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHhmZXJzcGVlZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IGh3aWYtPnBjaV9kZXY7CiAJdTE2IGRfY29uZgkJPSAwOwotCXU4IHNwZWVkCT0gaWRlX3JhdGVfZmlsdGVyKGFlYzYyeHhfcmF0ZW1hc2soZHJpdmUpLCB4ZmVyc3BlZWQpOworCXU4IHNwZWVkCQk9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgeGZlcnNwZWVkKTsKIAl1OCB1bHRyYSA9IDAsIHVsdHJhX2NvbmYgPSAwOwogCXU4IHRtcDAgPSAwLCB0bXAxID0gMCwgdG1wMiA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE0NSw3ICsxMTksNyBAQAogewogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gaHdpZi0+cGNpX2RldjsKLQl1OCBzcGVlZAk9IGlkZV9yYXRlX2ZpbHRlcihhZWM2Mnh4X3JhdGVtYXNrKGRyaXZlKSwgeGZlcnNwZWVkKTsKKwl1OCBzcGVlZAk9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgeGZlcnNwZWVkKTsKIAl1OCB1bml0CQk9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOwogCXU4IHRtcDEgPSAwLCB0bXAyID0gMDsKIAl1OCB1bHRyYSA9IDAsIGRyaXZlX2NvbmYgPSAwLCB1bHRyYV9jb25mID0gMDsKQEAgLTE4MSwxNyArMTU1LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgY29uZmlnX2NoaXBzZXRfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXU4IHNwZWVkID0gaWRlX2RtYV9zcGVlZChkcml2ZSwgYWVjNjJ4eF9yYXRlbWFzayhkcml2ZSkpOwkKLQotCWlmICghKHNwZWVkKSkKLQkJcmV0dXJuIDA7Ci0KLQkodm9pZCkgYWVjNjJ4eF90dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKTsKLQlyZXR1cm4gaWRlX2RtYV9lbmFibGUoZHJpdmUpOwotfQotCiBzdGF0aWMgdm9pZCBhZWM2Mnh4X3R1bmVfZHJpdmUgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcGlvKQogewogCXBpbyA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgcGlvLCA0LCBOVUxMKTsKQEAgLTIwMCw3ICsxNjMsNyBAQAogCiBzdGF0aWMgaW50IGFlYzYyeHhfY29uZmlnX2RyaXZlX3hmZXJfcmF0ZSAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSkpCisJaWYgKGlkZV90dW5lX2RtYShkcml2ZSkpCiAJCXJldHVybiAwOwogCiAJaWYgKGlkZV91c2VfZmFzdF9waW8oZHJpdmUpKQpAQCAtMjYxLDExICsyMjQsMTMgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9hZWM2Mnh4KGlkZV9od2lmX3QgKmh3aWYpCiB7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGh3aWYtPnBjaV9kZXY7CisKIAlod2lmLT5hdXRvZG1hID0gMDsKIAlod2lmLT50dW5lcHJvYyA9ICZhZWM2Mnh4X3R1bmVfZHJpdmU7CiAJaHdpZi0+c3BlZWRwcm9jID0gJmFlYzYyeHhfdHVuZV9jaGlwc2V0OwogCi0JaWYgKGh3aWYtPnBjaV9kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg1MFVGKQorCWlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg1MFVGKQogCQlod2lmLT5zZXJpYWxpemVkID0gaHdpZi0+Y2hhbm5lbDsKIAogCWlmIChod2lmLT5tYXRlKQpAQCAtMjc3LDcgKzI0MiwxNSBAQAogCQlyZXR1cm47CiAJfQogCi0JaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7CisJaHdpZi0+dWx0cmFfbWFzayA9IGh3aWYtPmNkcy0+dWRtYV9tYXNrOworCisJLyogYXRwODY1IGFuZCBhdHA4NjVyICovCisJaWYgKGh3aWYtPnVsdHJhX21hc2sgPT0gMHgzZikgeworCQkvKiBjaGVjayBiaXQgMHgxMCBvZiBETUEgc3RhdHVzIHJlZ2lzdGVyICovCisJCWlmIChpbmIocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCkgKyAyKSAmIDB4MTApCisgCQkJaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7IC8qIHVkbWEwLTYgKi8KKwl9CisKIAlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKIAogCWh3aWYtPmlkZV9kbWFfY2hlY2sJPSAmYWVjNjJ4eF9jb25maWdfZHJpdmVfeGZlcl9yYXRlOwpAQCAtMzQ0LDYgKzMxNyw3IEBACiAJCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NGEsMHgwMiwweDAyfSwgezB4NGEsMHgwNCwweDA0fX0sCiAJCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKKwkJLnVkbWFfbWFzawk9IDB4MDcsIC8qIHVkbWEwLTIgKi8KIAl9LHsJLyogMSAqLwogCQkubmFtZQkJPSAiQUVDNjI2MCIsCiAJCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9hZWM2Mnh4LApAQCAtMzUzLDYgKzMyNyw3IEBACiAJCS5jaGFubmVscwk9IDIsCiAJCS5hdXRvZG1hCT0gTk9BVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCisJCS51ZG1hX21hc2sJPSAweDFmLCAvKiB1ZG1hMC00ICovCiAJfSx7CS8qIDIgKi8KIAkJLm5hbWUJCT0gIkFFQzYyNjBSIiwKIAkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX2FlYzYyeHgsCkBAIC0zNjMsNiArMzM4LDcgQEAKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuZW5hYmxlYml0cwk9IHt7MHg0YSwweDAyLDB4MDJ9LCB7MHg0YSwweDA0LDB4MDR9fSwKIAkJLmJvb3RhYmxlCT0gTkVWRVJfQk9BUkQsCisJCS51ZG1hX21hc2sJPSAweDFmLCAvKiB1ZG1hMC00ICovCiAJfSx7CS8qIDMgKi8KIAkJLm5hbWUJCT0gIkFFQzZYODAiLAogCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfYWVjNng4MCwKQEAgLTM3Miw2ICszNDgsNyBAQAogCQkuY2hhbm5lbHMJPSAyLAogCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKKwkJLnVkbWFfbWFzawk9IDB4M2YsIC8qIHVkbWEwLTUgKi8KIAl9LHsJLyogNCAqLwogCQkubmFtZQkJPSAiQUVDNlg4MFIiLAogCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfYWVjNng4MCwKQEAgLTM4Miw2ICszNTksNyBAQAogCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDRhLDB4MDIsMHgwMn0sIHsweDRhLDB4MDQsMHgwNH19LAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCisJCS51ZG1hX21hc2sJPSAweDNmLCAvKiB1ZG1hMC01ICovCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwppbmRleCA5NDZhMTI3Li4yNzUyNWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwpAQCAtNTAsNyArNTAsNyBAQAogc3RhdGljIHU4IGNoaXBfaXNfMTU0M2NfZTsKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqaXNhX2RldjsKIAotI2lmIGRlZmluZWQoRElTUExBWV9BTElfVElNSU5HUykgJiYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykKKyNpZiBkZWZpbmVkKERJU1BMQVlfQUxJX1RJTUlOR1MpICYmIGRlZmluZWQoQ09ORklHX0lERV9QUk9DX0ZTKQogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAKQEAgLTI3OCw3ICsyNzgsNyBAQAogCiAJcmV0dXJuIHAtYnVmZmVyOyAvKiA9PiBtdXN0IGJlIGxlc3MgdGhhbiA0ayEgKi8KIH0KLSNlbmRpZiAgLyogZGVmaW5lZChESVNQTEFZX0FMSV9USU1JTkdTKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKSAqLworI2VuZGlmICAvKiBkZWZpbmVkKERJU1BMQVlfQUxJX1RJTUlOR1MpICYmIGRlZmluZWQoQ09ORklHX0lERV9QUk9DX0ZTKSAqLwogCiAvKioKICAqCWFsaTE1eDNfdHVuZV9waW8JLQlzZXQgdXAgY2hpcHNldCBmb3IgUElPIG1vZGUKQEAgLTM3OCw3NCArMzc4LDMxIEBACiB9CiAKIC8qKgotICoJYWxpMTV4M19jYW5fdWx0cmEJLQljaGVjayBmb3IgdWx0cmEgRE1BIHN1cHBvcnQKLSAqCUBkcml2ZTogZHJpdmUgdG8gZG8gdGhlIGNoZWNrCisgKglhbGlfdWRtYV9maWx0ZXIJCS0JY29tcHV0ZSBVRE1BIG1hc2sKKyAqCUBkcml2ZTogSURFIGRldmljZQogICoKLSAqCUNoZWNrIHRoZSBkcml2ZSBhbmQgY29udHJvbGxlciByZXZpc2lvbnMuIFJldHVybiAwIGlmIFVETUEgaXMKLSAqCW5vdCBhdmFpbGFibGUsIG9yIDEgaWYgVURNQSBjYW4gYmUgdXNlZC4gVGhlIGFjdHVhbCBydWxlcyBmb3IKLSAqCXRoZSBBTGkgYXJlCisgKglSZXR1cm4gYXZhaWxhYmxlIFVETUEgbW9kZXMuCisgKgorICoJVGhlIGFjdHVhbCBydWxlcyBmb3IgdGhlIEFMaSBhcmU6CiAgKgkJTm8gVURNQSBvbiByZXZpc2lvbnMgPD0gMHgyMAogICoJCURpc2sgb25seSBmb3IgcmV2aXNpb25zIDwgMHhDMgogICoJCU5vdCBXREMgZHJpdmVzIGZvciByZXZpc2lvbnMgPCAweEMyCiAgKgogICoJRklYTUU6IFdEQyBpZmRlZiBuZWVkcyB0byBkaWUKICAqLwotIAotc3RhdGljIHU4IGFsaTE1eDNfY2FuX3VsdHJhIChpZGVfZHJpdmVfdCAqZHJpdmUpCisKK3N0YXRpYyB1OCBhbGlfdWRtYV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlKQogeworCWlmIChtNTIyOV9yZXZpc2lvbiA+IDB4MjAgJiYgbTUyMjlfcmV2aXNpb24gPCAweEMyKSB7CisJCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spCisJCQlyZXR1cm4gMDsKICNpZm5kZWYgQ09ORklHX1dEQ19BTEkxNVgzCi0Jc3RydWN0IGhkX2RyaXZlaWQgKmlkCT0gZHJpdmUtPmlkOwotI2VuZGlmIC8qIENPTkZJR19XRENfQUxJMTVYMyAqLwotCi0JaWYgKG01MjI5X3JldmlzaW9uIDw9IDB4MjApIHsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmICgobTUyMjlfcmV2aXNpb24gPCAweEMyKSAmJgotI2lmbmRlZiBDT05GSUdfV0RDX0FMSTE1WDMKLQkJICAgKChjaGlwX2lzXzE1NDNjX2UgJiYgc3Ryc3RyKGlkLT5tb2RlbCwgIldEQyAiKSkgfHwKLQkJICAgIChkcml2ZS0+bWVkaWEhPWlkZV9kaXNrKSkpIHsKLSNlbHNlIC8qIENPTkZJR19XRENfQUxJMTVYMyAqLwotCQkgICAoZHJpdmUtPm1lZGlhIT1pZGVfZGlzaykpIHsKLSNlbmRpZiAvKiBDT05GSUdfV0RDX0FMSTE1WDMgKi8KLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIDE7Ci0JfQotfQotCi0vKioKLSAqCWFsaTE1eDNfcmF0ZW1hc2sJLQlnZW5lcmF0ZSBETUEgbW9kZSBsaXN0Ci0gKglAZHJpdmU6IGRyaXZlIHRvIGNvbXB1dGUgYWdhaW5zdAotICoKLSAqCUdlbmVyYXRlIGEgbGlzdCBvZiB0aGUgYXZhaWxhYmxlIERNQSBtb2RlcyBmb3IgdGhlIGRyaXZlLiAKLSAqCUZJWE1FOiB0aGlzIGZ1bmN0aW9uIGNvbnRhaW5zIGxvdHMgb2YgYm9ndXMgbWFza2luZyB3ZSBjYW4gZHVtcAotICoKLSAqCVJldHVybiB0aGUgaGlnaGVzdCBhdmFpbGFibGUgbW9kZSAoVURNQTMzLCBVRE1BNjYsIFVETUExMDAsLi4pCi0gKi8KLSAKLXN0YXRpYyB1OCBhbGkxNXgzX3JhdGVtYXNrIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JdTggbW9kZSA9IDAsIGNhbl91bHRyYQk9IGFsaTE1eDNfY2FuX3VsdHJhKGRyaXZlKTsKLQotCWlmIChtNTIyOV9yZXZpc2lvbiA+IDB4QzQgJiYgY2FuX3VsdHJhKSB7Ci0JCW1vZGUgPSA0OwotCX0gZWxzZSBpZiAobTUyMjlfcmV2aXNpb24gPT0gMHhDNCAmJiBjYW5fdWx0cmEpIHsKLQkJbW9kZSA9IDM7Ci0JfSBlbHNlIGlmIChtNTIyOV9yZXZpc2lvbiA+PSAweEMyICYmIGNhbl91bHRyYSkgewotCQltb2RlID0gMjsKLQl9IGVsc2UgaWYgKGNhbl91bHRyYSkgewotCQlyZXR1cm4gMTsKLQl9IGVsc2UgewotCQlyZXR1cm4gMDsKKwkJaWYgKGNoaXBfaXNfMTU0M2NfZSAmJiBzdHJzdHIoZHJpdmUtPmlkLT5tb2RlbCwgIldEQyAiKSkKKwkJCXJldHVybiAwOworI2VuZGlmCiAJfQogCi0JLyoKLQkgKglJZiB0aGUgZHJpdmUgc2VlcyBubyBzdWl0YWJsZSBjYWJsZSB0aGVuIFVETUEgMzMKLQkgKglpcyB0aGUgaGlnaGVzdCBwZXJtaXR0ZWQgbW9kZQotCSAqLwotCSAKLQlpZiAoIWVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkpCi0JCW1vZGUgPSBtaW4obW9kZSwgKHU4KTEpOwotCXJldHVybiBtb2RlOworCXJldHVybiBkcml2ZS0+aHdpZi0+dWx0cmFfbWFzazsKIH0KIAogLyoqCkBAIC00NjEsNyArNDE4LDcgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IGh3aWYtPnBjaV9kZXY7Ci0JdTggc3BlZWQJCT0gaWRlX3JhdGVfZmlsdGVyKGFsaTE1eDNfcmF0ZW1hc2soZHJpdmUpLCB4ZmVyc3BlZWQpOworCXU4IHNwZWVkCQk9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgeGZlcnNwZWVkKTsKIAl1OCBzcGVlZDEJCT0gc3BlZWQ7CiAJdTggdW5pdAkJCT0gKGRyaXZlLT5zZWxlY3QuYi51bml0ICYgMHgwMSk7CiAJdTggdG1wYnl0ZQkJPSAweDAwOwpAQCAtNDk4LDI4ICs0NTUsNiBAQAogCXJldHVybiAoaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgc3BlZWQpKTsKIH0KIAotCi0vKioKLSAqCWNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEJLQlzZXQgdXAgRE1BIG1vZGUKLSAqCUBkcml2ZTogZHJpdmUgdG8gY29uZmlndXJlIGZvcgotICoKLSAqCVBsYWNlIGEgZHJpdmUgaW50byBETUEgbW9kZSBhbmQgdHVuZSB0aGUgY2hpcHNldCBmb3IKLSAqCXRoZSBzZWxlY3RlZCBzcGVlZC4KLSAqCi0gKglSZXR1cm5zIHRydWUgaWYgRE1BIG1vZGUgY2FuIGJlIHVzZWQKLSAqLwotIAotc3RhdGljIGludCBjb25maWdfY2hpcHNldF9mb3JfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JdTggc3BlZWQgPSBpZGVfZG1hX3NwZWVkKGRyaXZlLCBhbGkxNXgzX3JhdGVtYXNrKGRyaXZlKSk7Ci0KLQlpZiAoIShzcGVlZCkpCi0JCXJldHVybiAwOwotCi0JKHZvaWQpIGFsaTE1eDNfdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCk7Ci0JcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKLX0KLQogLyoqCiAgKglhbGkxNXgzX2NvbmZpZ19kcml2ZV9mb3JfZG1hCS0JY29uZmlndXJlIGZvciBETUEKICAqCUBkcml2ZTogZHJpdmUgdG8gY29uZmlndXJlCkBAIC01MzAsNDggKzQ2NSwxNCBAQAogCiBzdGF0aWMgaW50IGFsaTE1eDNfY29uZmlnX2RyaXZlX2Zvcl9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7Ci0KLQlpZiAoKG01MjI5X3JldmlzaW9uPD0weDIwKSAmJiAoZHJpdmUtPm1lZGlhIT1pZGVfZGlzaykpCi0JCWdvdG8gYXRhX3BpbzsKLQogCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKIAotCWlmICgoaWQgIT0gTlVMTCkgJiYgKChpZC0+Y2FwYWJpbGl0eSAmIDEpICE9IDApICYmIGRyaXZlLT5hdXRvZG1hKSB7Ci0JCS8qIENvbnN1bHQgdGhlIGxpc3Qgb2Yga25vd24gImJhZCIgZHJpdmVzICovCi0JCWlmIChfX2lkZV9kbWFfYmFkX2RyaXZlKGRyaXZlKSkKLQkJCWdvdG8gYXRhX3BpbzsKLQkJaWYgKChpZC0+ZmllbGRfdmFsaWQgJiA0KSAmJiAobTUyMjlfcmV2aXNpb24gPj0gMHhDMikpIHsKLQkJCWlmIChpZC0+ZG1hX3VsdHJhICYgaHdpZi0+dWx0cmFfbWFzaykgewotCQkJCS8qIEZvcmNlIGlmIENhcGFibGUgVWx0cmFETUEgKi8KLQkJCQlpbnQgZG1hID0gY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSk7Ci0JCQkJaWYgKChpZC0+ZmllbGRfdmFsaWQgJiAyKSAmJiAhZG1hKQotCQkJCQlnb3RvIHRyeV9kbWFfbW9kZXM7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoaWQtPmZpZWxkX3ZhbGlkICYgMikgewotdHJ5X2RtYV9tb2RlczoKLQkJCWlmICgoaWQtPmRtYV9td29yZCAmIGh3aWYtPm13ZG1hX21hc2spIHx8Ci0JCQkgICAgKGlkLT5kbWFfMXdvcmQgJiBod2lmLT5zd2RtYV9tYXNrKSkgewotCQkJCS8qIEZvcmNlIGlmIENhcGFibGUgcmVndWxhciBETUEgbW9kZXMgKi8KLQkJCQlpZiAoIWNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQotCQkJCQlnb3RvIGF0YV9waW87Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoX19pZGVfZG1hX2dvb2RfZHJpdmUoZHJpdmUpICYmCi0JCQkgICAoaWQtPmVpZGVfZG1hX3RpbWUgPCAxNTApKSB7Ci0JCQkvKiBDb25zdWx0IHRoZSBsaXN0IG9mIGtub3duICJnb29kIiBkcml2ZXMgKi8KLQkJCWlmICghY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSkpCi0JCQkJZ290byBhdGFfcGlvOwotCQl9IGVsc2UgewotCQkJZ290byBhdGFfcGlvOwotCQl9Ci0JfSBlbHNlIHsKLWF0YV9waW86Ci0JCWh3aWYtPnR1bmVwcm9jKGRyaXZlLCAyNTUpOwotCQlyZXR1cm4gLTE7Ci0JfQorCWlmIChpZGVfdHVuZV9kbWEoZHJpdmUpKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOworCWFsaTE1eDNfdHVuZV9kcml2ZShkcml2ZSwgMjU1KTsKKworCXJldHVybiAtMTsKIH0KIAogLyoqCkBAIC02MDksMTMgKzUxMCwxMyBAQAogCiAJaXNhX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTE1MzMsIE5VTEwpOwogCi0jaWYgZGVmaW5lZChESVNQTEFZX0FMSV9USU1JTkdTKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorI2lmIGRlZmluZWQoRElTUExBWV9BTElfVElNSU5HUykgJiYgZGVmaW5lZChDT05GSUdfSURFX1BST0NfRlMpCiAJaWYgKCFhbGlfcHJvYykgewogCQlhbGlfcHJvYyA9IDE7CiAJCWJtaWRlX2RldiA9IGRldjsKIAkJaWRlX3BjaV9jcmVhdGVfaG9zdF9wcm9jKCJhbGkiLCBhbGlfZ2V0X2luZm8pOwogCX0KLSNlbmRpZiAgLyogZGVmaW5lZChESVNQTEFZX0FMSV9USU1JTkdTKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKSAqLworI2VuZGlmICAvKiBkZWZpbmVkKERJU1BMQVlfQUxJX1RJTUlOR1MpICYmIGRlZmluZWQoQ09ORklHX0lERV9QUk9DX0ZTKSAqLwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC03NzEsNiArNjcyLDcgQEAKIAlod2lmLT5hdXRvZG1hID0gMDsKIAlod2lmLT50dW5lcHJvYyA9ICZhbGkxNXgzX3R1bmVfZHJpdmU7CiAJaHdpZi0+c3BlZWRwcm9jID0gJmFsaTE1eDNfdHVuZV9jaGlwc2V0OworCWh3aWYtPnVkbWFfZmlsdGVyID0gJmFsaV91ZG1hX2ZpbHRlcjsKIAogCS8qIGRvbid0IHVzZSBMQkE0OCBETUEgb24gQUxpIGRldmljZXMgYmVmb3JlIHJldiAweEM1ICovCiAJaHdpZi0+bm9fbGJhNDhfZG1hID0gKG01MjI5X3JldmlzaW9uIDw9IDB4QzQpID8gMSA6IDA7CkBAIC03ODEsMTAgKzY4MywyMCBAQAogCQlyZXR1cm47CiAJfQogCi0JaHdpZi0+YXRhcGlfZG1hID0gMTsKLQogCWlmIChtNTIyOV9yZXZpc2lvbiA+IDB4MjApCi0JCWh3aWYtPnVsdHJhX21hc2sgPSAweDdmOworCQlod2lmLT5hdGFwaV9kbWEgPSAxOworCisJaWYgKG01MjI5X3JldmlzaW9uIDw9IDB4MjApCisJCWh3aWYtPnVsdHJhX21hc2sgPSAweDAwOyAvKiBubyB1ZG1hICovCisJZWxzZSBpZiAobTUyMjlfcmV2aXNpb24gPCAweEMyKQorCQlod2lmLT51bHRyYV9tYXNrID0gMHgwNzsgLyogdWRtYTAtMiAqLworCWVsc2UgaWYgKG01MjI5X3JldmlzaW9uID09IDB4QzIgfHwgbTUyMjlfcmV2aXNpb24gPT0gMHhDMykKKwkJaHdpZi0+dWx0cmFfbWFzayA9IDB4MWY7IC8qIHVkbWEwLTQgKi8KKwllbHNlIGlmIChtNTIyOV9yZXZpc2lvbiA9PSAweEM0KQorCQlod2lmLT51bHRyYV9tYXNrID0gMHgzZjsgLyogdWRtYTAtNSAqLworCWVsc2UKKwkJaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7IC8qIHVkbWEwLTYgKi8KKwogCWh3aWYtPm13ZG1hX21hc2sgPSAweDA3OwogCWh3aWYtPnN3ZG1hX21hc2sgPSAweDA3OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jIGIvZHJpdmVycy9pZGUvcGNpL2FtZDc0eHguYwppbmRleCA3OTg5YmRkLi5iZWNiMWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMKQEAgLTkyLDcgKzkyLDcgQEAKICAqIEFNRCAvcHJvYyBlbnRyeS4KICAqLwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKIAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC00MDIsMTQgKzQwMiwxNCBAQAogICogUmVnaXN0ZXIgL3Byb2MvaWRlL2FtZDc0eHggZW50cnkKICAqLwogCi0jaWYgZGVmaW5lZChESVNQTEFZX0FNRF9USU1JTkdTKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorI2lmIGRlZmluZWQoRElTUExBWV9BTURfVElNSU5HUykgJiYgZGVmaW5lZChDT05GSUdfSURFX1BST0NfRlMpCiAgICAgICAgIGlmICghYW1kNzR4eF9wcm9jKSB7CiAgICAgICAgICAgICAgICAgYW1kX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKICAgICAgICAgICAgICAgICBibWlkZV9kZXYgPSBkZXY7CiAJCWlkZV9wY2lfY3JlYXRlX2hvc3RfcHJvYygiYW1kNzR4eCIsIGFtZDc0eHhfZ2V0X2luZm8pOwogICAgICAgICAgICAgICAgIGFtZDc0eHhfcHJvYyA9IDE7CiAgICAgICAgIH0KLSNlbmRpZiAvKiBESVNQTEFZX0FNRF9USU1JTkdTICYmIENPTkZJR19QUk9DX0ZTICovCisjZW5kaWYgLyogRElTUExBWV9BTURfVElNSU5HUyAmJiBDT05GSUdfSURFX1BST0NfRlMgKi8KIAogCXJldHVybiBkZXYtPmlycTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYyBiL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYwppbmRleCAyZDQ4YWYzLi44YWIzM2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jCkBAIC00OSwyMiArNDksNiBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhhdGlpeHBfbG9jayk7CiAKIC8qKgotICoJYXRpaXhwX3JhdGVtYXNrCQktCWNvbXB1dGUgcmF0ZSBtYXNrIGZvciBBVElJWFAgSURFCi0gKglAZHJpdmU6IElERSBkcml2ZSB0byBjb21wdXRlIGZvcgotICoKLSAqCVJldHVybnMgdGhlIGF2YWlsYWJsZSBtb2RlcyBmb3IgdGhlIEFUSUlYUCBJREUgY29udHJvbGxlci4KLSAqLwotCi1zdGF0aWMgdTggYXRpaXhwX3JhdGVtYXNrKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQl1OCBtb2RlID0gMzsKLQotCWlmICghZWlnaHR5X25pbnR5X3RocmVlKGRyaXZlKSkKLQkJbW9kZSA9IG1pbihtb2RlLCAodTgpMSk7Ci0JcmV0dXJuIG1vZGU7Ci19Ci0KLS8qKgogICoJYXRpaXhwX2RtYV8yX3BpbwkJLQlyZXR1cm4gdGhlIFBJTyBtb2RlIG1hdGNoaW5nIERNQQogICoJQHhmZXJfcmF0ZTogdHJhbnNmZXIgc3BlZWQKICAqCkBAIC0xODksNyArMTczLDcgQEAKIAl1MTYgdG1wMTY7CiAJdTggc3BlZWQsIHBpbzsKIAotCXNwZWVkID0gaWRlX3JhdGVfZmlsdGVyKGF0aWl4cF9yYXRlbWFzayhkcml2ZSksIHhmZXJzcGVlZCk7CisJc3BlZWQgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHhmZXJzcGVlZCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXRpaXhwX2xvY2ssIGZsYWdzKTsKIApAQCAtMjIzLDI2ICsyMDcsNiBAQAogfQogCiAvKioKLSAqCWF0aWl4cF9jb25maWdfZHJpdmVfZm9yX2RtYQktCWNvbmZpZ3VyZSBkcml2ZSBmb3IgRE1BCi0gKglAZHJpdmU6IElERSBkcml2ZSB0byBjb25maWd1cmUKLSAqCi0gKglTZXQgdXAgYSBBVElJWFAgaW50ZXJmYWNlIGNoYW5uZWwgZm9yIHRoZSBiZXN0IGF2YWlsYWJsZSBzcGVlZC4KLSAqCVdlIHByZWZlciBVRE1BIGlmIGl0IGlzIGF2YWlsYWJsZSBhbmQgdGhlbiBNV0RNQS4gSWYgRE1BIGlzCi0gKglub3QgYXZhaWxhYmxlIHdlIHN3aXRjaCB0byBQSU8gYW5kIHJldHVybiAwLgotICovCi0KLXN0YXRpYyBpbnQgYXRpaXhwX2NvbmZpZ19kcml2ZV9mb3JfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQl1OCBzcGVlZCA9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIGF0aWl4cF9yYXRlbWFzayhkcml2ZSkpOwotCi0JaWYgKCFzcGVlZCkKLQkJcmV0dXJuIDA7Ci0KLQkodm9pZCkgYXRpaXhwX3NwZWVkcHJvYyhkcml2ZSwgc3BlZWQpOwotCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7Ci19Ci0KLS8qKgogICoJYXRpaXhwX2RtYV9jaGVjawktCXNldCB1cCBhbiBJREUgZGV2aWNlCiAgKglAZHJpdmU6IElERSBkcml2ZSB0byBjb25maWd1cmUKICAqCkBAIC0yNTYsNyArMjIwLDcgQEAKIAogCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKIAotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgYXRpaXhwX2NvbmZpZ19kcml2ZV9mb3JfZG1hKGRyaXZlKSkKKwlpZiAoaWRlX3R1bmVfZG1hKGRyaXZlKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWRlX3VzZV9mYXN0X3Bpbyhkcml2ZSkpIHsKQEAgLTM1Myw2ICszMTcsNyBAQAogCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDMwMF9JREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9JREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9JREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDF9LAorCXsgUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9JREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDF9LAogCXsgMCwgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRpaXhwX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jIGIvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jCmluZGV4IDc3ZjUxYWIuLjdjNTdkYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMKQEAgLTc0LDcgKzc0LDcgQEAKICNkZWZpbmUgVURJREVUQ1IxCTB4N0IKICNkZWZpbmUgRFRQUjEJCTB4N0MKIAotI2lmIGRlZmluZWQoRElTUExBWV9DTUQ2NFhfVElNSU5HUykgJiYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykKKyNpZiBkZWZpbmVkKERJU1BMQVlfQ01ENjRYX1RJTUlOR1MpICYmIGRlZmluZWQoQ09ORklHX0lERV9QUk9DX0ZTKQogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAKQEAgLTE2NSw3ICsxNjUsNyBAQAogCXJldHVybiBwLWJ1ZmZlcjsJLyogPT4gbXVzdCBiZSBsZXNzIHRoYW4gNGshICovCiB9CiAKLSNlbmRpZgkvKiBkZWZpbmVkKERJU1BMQVlfQ01ENjRYX1RJTUlOR1MpICYmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpICovCisjZW5kaWYJLyogZGVmaW5lZChESVNQTEFZX0NNRDY0WF9USU1JTkdTKSAmJiBkZWZpbmVkKENPTkZJR19JREVfUFJPQ19GUykgKi8KIAogc3RhdGljIHU4IHF1YW50aXplX3RpbWluZyhpbnQgdGltaW5nLCBpbnQgcXVhbnQpCiB7CkBAIC0yOTIsNTUgKzI5Miw2IEBACiAJKHZvaWQpIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOwogfQogCi1zdGF0aWMgdTggY21kNjR4X3JhdGVtYXNrIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldgk9IEhXSUYoZHJpdmUpLT5wY2lfZGV2OwotCXU4IG1vZGUgPSAwOwotCi0Jc3dpdGNoKGRldi0+ZGV2aWNlKSB7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9DTURfNjQ5OgotCQkJbW9kZSA9IDM7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0NNRF82NDg6Ci0JCQltb2RlID0gMjsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfQ01EXzY0MzoKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgUENJX0RFVklDRV9JRF9DTURfNjQ2OgotCQl7Ci0JCQl1bnNpZ25lZCBpbnQgY2xhc3NfcmV2CT0gMDsKLQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsCi0JCQkJUENJX0NMQVNTX1JFVklTSU9OLCAmY2xhc3NfcmV2KTsKLQkJCWNsYXNzX3JldiAmPSAweGZmOwotCQkvKgotCQkgKiBVbHRyYURNQSBvbmx5IHN1cHBvcnRlZCBvbiBQQ0k2NDZVIGFuZCBQQ0k2NDZVMiwgd2hpY2gKLQkJICogY29ycmVzcG9uZCB0byByZXZpc2lvbnMgMHgwMywgMHgwNSBhbmQgMHgwNyByZXNwZWN0aXZlbHkuCi0JCSAqIEFjdHVhbGx5LCBhbHRob3VnaCB0aGUgQ01EIHRlY2ggc3VwcG9ydCBwZW9wbGUgd29uJ3QKLQkJICogdGVsbCBtZSB0aGUgZGV0YWlscywgdGhlIDB4MDMgcmV2aXNpb24gY2Fubm90IHN1cHBvcnQKLQkJICogVURNQSBjb3JyZWN0bHkgd2l0aG91dCBoYXJkd2FyZSBtb2RpZmljYXRpb25zLCBhbmQgZXZlbgotCQkgKiB0aGVuIGl0IG9ubHkgd29ya3Mgd2l0aCBRdWFudHVtIGRpc2tzIGR1ZSB0byBzb21lCi0JCSAqIGhvbGQgdGltZSBhc3N1bXB0aW9ucyBpbiB0aGUgNjQ2VSBwYXJ0IHdoaWNoIGFyZSBmaXhlZAotCQkgKiBpbiB0aGUgNjQ2VTIuCi0JCSAqCi0JCSAqIFNvIHdlIG9ubHkgZG8gVWx0cmFETUEgb24gcmV2aXNpb24gMHgwNSBhbmQgMHgwNyBjaGlwc2V0cy4KLQkJICovCi0JCQlzd2l0Y2goY2xhc3NfcmV2KSB7Ci0JCQkJY2FzZSAweDA3OgotCQkJCWNhc2UgMHgwNToKLQkJCQkJcmV0dXJuIDE7Ci0JCQkJY2FzZSAweDAzOgotCQkJCWNhc2UgMHgwMToKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQotCX0KLQlpZiAoIWVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkpCi0JCW1vZGUgPSBtaW4obW9kZSwgKHU4KTEpOwotCXJldHVybiBtb2RlOwotfQotCiBzdGF0aWMgaW50IGNtZDY0eF90dW5lX2NoaXBzZXQgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwpAQCAtMzQ4LDcgKzI5OSw3IEBACiAJdTggdW5pdAkJCT0gZHJpdmUtPmRuICYgMHgwMTsKIAl1OCByZWdVID0gMCwgcGNpVQk9IGh3aWYtPmNoYW5uZWwgPyBVRElERVRDUjEgOiBVRElERVRDUjA7CiAKLQlzcGVlZCA9IGlkZV9yYXRlX2ZpbHRlcihjbWQ2NHhfcmF0ZW1hc2soZHJpdmUpLCBzcGVlZCk7CisJc3BlZWQgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHNwZWVkKTsKIAogCWlmIChzcGVlZCA+PSBYRkVSX1NXX0RNQV8wKSB7CiAJCSh2b2lkKSBwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIHBjaVUsICZyZWdVKTsKQEAgLTQwMSwyMiArMzUyLDkgQEAKIAlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgc3BlZWQpOwogfQogCi1zdGF0aWMgaW50IGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQl1OCBzcGVlZAk9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIGNtZDY0eF9yYXRlbWFzayhkcml2ZSkpOwotCi0JaWYgKCFzcGVlZCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY21kNjR4X3R1bmVfY2hpcHNldChkcml2ZSwgc3BlZWQpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7Ci19Ci0KIHN0YXRpYyBpbnQgY21kNjR4X2NvbmZpZ19kcml2ZV9mb3JfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwlpZiAoaWRlX3R1bmVfZG1hKGRyaXZlKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWRlX3VzZV9mYXN0X3Bpbyhkcml2ZSkpCkBAIC01OTcsNyArNTM1LDcgQEAKIAkodm9pZCkgcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgVURJREVUQ1IwLCAweGYwKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDICovCiAKLSNpZiBkZWZpbmVkKERJU1BMQVlfQ01ENjRYX1RJTUlOR1MpICYmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCisjaWYgZGVmaW5lZChESVNQTEFZX0NNRDY0WF9USU1JTkdTKSAmJiBkZWZpbmVkKENPTkZJR19JREVfUFJPQ19GUykKIAogCWNtZF9kZXZzW25fY21kX2RldnMrK10gPSBkZXY7CiAKQEAgLTYwNSw3ICs1NDMsNyBAQAogCQljbWQ2NHhfcHJvYyA9IDE7CiAJCWlkZV9wY2lfY3JlYXRlX2hvc3RfcHJvYygiY21kNjR4IiwgY21kNjR4X2dldF9pbmZvKTsKIAl9Ci0jZW5kaWYgLyogRElTUExBWV9DTUQ2NFhfVElNSU5HUyAmJiBDT05GSUdfUFJPQ19GUyAqLworI2VuZGlmIC8qIERJU1BMQVlfQ01ENjRYX1RJTUlOR1MgJiYgQ09ORklHX0lERV9QUk9DX0ZTICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY0NCwxNSArNTgyLDI0IEBACiAKIAlod2lmLT5hdGFwaV9kbWEgPSAxOwogCi0JaHdpZi0+dWx0cmFfbWFzayA9IDB4M2Y7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7CisJaHdpZi0+dWx0cmFfbWFzayA9IGh3aWYtPmNkcy0+dWRtYV9tYXNrOwogCi0JaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ01EXzY0MykKLQkJaHdpZi0+dWx0cmFfbWFzayA9IDB4ODA7Ci0JaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ01EXzY0NikKLQkJaHdpZi0+dWx0cmFfbWFzayA9IChjbGFzc19yZXYgPiAweDA0KSA/IDB4MDcgOiAweDgwOwotCWlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NNRF82NDgpCi0JCWh3aWYtPnVsdHJhX21hc2sgPSAweDFmOworCS8qCisJICogVWx0cmFETUEgb25seSBzdXBwb3J0ZWQgb24gUENJNjQ2VSBhbmQgUENJNjQ2VTIsIHdoaWNoCisJICogY29ycmVzcG9uZCB0byByZXZpc2lvbnMgMHgwMywgMHgwNSBhbmQgMHgwNyByZXNwZWN0aXZlbHkuCisJICogQWN0dWFsbHksIGFsdGhvdWdoIHRoZSBDTUQgdGVjaCBzdXBwb3J0IHBlb3BsZSB3b24ndAorCSAqIHRlbGwgbWUgdGhlIGRldGFpbHMsIHRoZSAweDAzIHJldmlzaW9uIGNhbm5vdCBzdXBwb3J0CisJICogVURNQSBjb3JyZWN0bHkgd2l0aG91dCBoYXJkd2FyZSBtb2RpZmljYXRpb25zLCBhbmQgZXZlbgorCSAqIHRoZW4gaXQgb25seSB3b3JrcyB3aXRoIFF1YW50dW0gZGlza3MgZHVlIHRvIHNvbWUKKwkgKiBob2xkIHRpbWUgYXNzdW1wdGlvbnMgaW4gdGhlIDY0NlUgcGFydCB3aGljaCBhcmUgZml4ZWQKKwkgKiBpbiB0aGUgNjQ2VTIuCisJICoKKwkgKiBTbyB3ZSBvbmx5IGRvIFVsdHJhRE1BIG9uIHJldmlzaW9uIDB4MDUgYW5kIDB4MDcgY2hpcHNldHMuCisJICovCisJaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ01EXzY0NiAmJiBjbGFzc19yZXYgPCA1KQorCQlod2lmLT51bHRyYV9tYXNrID0gMHgwMDsKKworCWh3aWYtPm13ZG1hX21hc2sgPSAweDA3OwogCiAJaHdpZi0+aWRlX2RtYV9jaGVjayA9ICZjbWQ2NHhfY29uZmlnX2RyaXZlX2Zvcl9kbWE7CiAJaWYgKCEoaHdpZi0+dWRtYV9mb3VyKSkKQEAgLTcxNiw2ICs2NjMsNyBAQAogCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDAwLDB4MDAsMHgwMH0sIHsweDUxLDB4MDgsMHgwOH19LAogCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKwkJLnVkbWFfbWFzawk9IDB4MDAsIC8qIG5vIHVkbWEgKi8KIAl9LHsJLyogMSAqLwogCQkubmFtZQkJPSAiQ01ENjQ2IiwKIAkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX2NtZDY0NiwKQEAgLTcyNSw2ICs2NzMsNyBAQAogCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDUxLDB4MDQsMHgwNH0sIHsweDUxLDB4MDgsMHgwOH19LAogCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKwkJLnVkbWFfbWFzawk9IDB4MDcsIC8qIHVkbWEwLTIgKi8KIAl9LHsJLyogMiAqLwogCQkubmFtZQkJPSAiQ01ENjQ4IiwKIAkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX2NtZDY0eCwKQEAgLTczNCw2ICs2ODMsNyBAQAogCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDUxLDB4MDQsMHgwNH0sIHsweDUxLDB4MDgsMHgwOH19LAogCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKwkJLnVkbWFfbWFzawk9IDB4MWYsIC8qIHVkbWEwLTQgKi8KIAl9LHsJLyogMyAqLwogCQkubmFtZQkJPSAiQ01ENjQ5IiwKIAkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX2NtZDY0eCwKQEAgLTc0Myw2ICs2OTMsNyBAQAogCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDUxLDB4MDQsMHgwNH0sIHsweDUxLDB4MDgsMHgwOH19LAogCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKwkJLnVkbWFfbWFzawk9IDB4M2YsIC8qIHVkbWEwLTUgKi8KIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMKaW5kZXggNDAwODU5YS4uM2I4OGEzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MjAuYwpAQCAtMjEzLDYgKzIxMyw3IEBACiAgCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjczU1MjBfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogeworCWlkZV9od2lmX3QgKmh3aWYgPSBOVUxMLCAqbWF0ZSA9IE5VTEw7CiAJYXRhX2luZGV4X3QgaW5kZXg7CiAJaWRlX3BjaV9kZXZpY2VfdCAqZCA9ICZjeXJpeF9jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdOwogCkBAIC0yMzksMTAgKzI0MCwyMSBAQAogCiAJaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsIDE0LCAmaW5kZXgpOwogCi0JaWYoKGluZGV4LmIubG93ICYgMHhmMCkgIT0gMHhmMCkKLQkJcHJvYmVfaHdpZl9pbml0KCZpZGVfaHdpZnNbaW5kZXguYi5sb3ddKTsKLQlpZigoaW5kZXguYi5oaWdoICYgMHhmMCkgIT0gMHhmMCkKLQkJcHJvYmVfaHdpZl9pbml0KCZpZGVfaHdpZnNbaW5kZXguYi5oaWdoXSk7CisJaWYgKChpbmRleC5iLmxvdyAmIDB4ZjApICE9IDB4ZjApCisJCWh3aWYgPSAmaWRlX2h3aWZzW2luZGV4LmIubG93XTsKKwlpZiAoKGluZGV4LmIuaGlnaCAmIDB4ZjApICE9IDB4ZjApCisJCW1hdGUgPSAmaWRlX2h3aWZzW2luZGV4LmIuaGlnaF07CisKKwlpZiAoaHdpZikKKwkJcHJvYmVfaHdpZl9pbml0KGh3aWYpOworCWlmIChtYXRlKQorCQlwcm9iZV9od2lmX2luaXQobWF0ZSk7CisKKwlpZiAoaHdpZikKKwkJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChod2lmKTsKKwlpZiAobWF0ZSkKKwkJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChtYXRlKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTMwLmMgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTMwLmMKaW5kZXggYjJkN2MxMy4uMWVlYzFmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MzAuYwpAQCAtMSwxMCArMSwxMCBAQAogLyoKLSAqIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9jczU1MzAuYwkJVmVyc2lvbiAwLjcJU2VwdCAxMCwgMjAwMgorICogbGludXgvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jCQlWZXJzaW9uIDAuNzMJTWFyIDEwIDIwMDcKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAJCQlBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgotICogRGl0dG8gb2YgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDAwCQkJTWFyayBMb3JkIDxtbG9yZEBwb2JveC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcJCQlCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CisgKgogICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKgogICogRGV2ZWxvcG1lbnQgb2YgdGhpcyBjaGlwc2V0IGRyaXZlciB3YXMgZnVuZGVkCkBAIC02Miw2ICs2MiwxNCBAQAogI2RlZmluZSBDUzU1MzBfQkFEX1BJTyh0aW1pbmdzKSAoKCh0aW1pbmdzKSZ+MHg4MDAwMDAwMCk9PTB4MDAwMGUxMzIpCiAjZGVmaW5lIENTNTUzMF9CQVNFUkVHKGh3aWYpCSgoKGh3aWYpLT5kbWFfYmFzZSAmIH4weGYpICsgKChod2lmKS0+Y2hhbm5lbCA/IDB4MzAgOiAweDIwKSkKIAorc3RhdGljIHZvaWQgY3M1NTMwX3R1bmVwaW8oaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBwaW8pCit7CisJdW5zaWduZWQgbG9uZyBiYXNlcmVnID0gQ1M1NTMwX0JBU0VSRUcoZHJpdmUtPmh3aWYpOworCXVuc2lnbmVkIGludCBmb3JtYXQgPSAoaW5sKGJhc2VyZWcgKyA0KSA+PiAzMSkgJiAxOworCisJb3V0bChjczU1MzBfcGlvX3RpbWluZ3NbZm9ybWF0XVtwaW9dLCBiYXNlcmVnICsgKChkcml2ZS0+ZG4gJiAxKTw8MykpOworfQorCiAvKioKICAqCWNzNTUzMF90dW5lcHJvYwkJLQlzZWxlY3Qvc2V0IFBJTyBtb2RlcwogICoKQEAgLTc0LDk4ICs4Miw3OCBAQAogCiBzdGF0aWMgdm9pZCBjczU1MzBfdHVuZXByb2MgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcGlvKQkvKiBwaW89MjU1IG1lYW5zICJhdXRvdHVuZSIgKi8KIHsKLQlpZGVfaHdpZl90CSpod2lmID0gSFdJRihkcml2ZSk7Ci0JdW5zaWduZWQgaW50CWZvcm1hdDsKLQl1bnNpZ25lZCBsb25nIGJhc2VyZWcgPSBDUzU1MzBfQkFTRVJFRyhod2lmKTsKLQlzdGF0aWMgdTgJbW9kZXNbNV0gPSB7IFhGRVJfUElPXzAsIFhGRVJfUElPXzEsIFhGRVJfUElPXzIsIFhGRVJfUElPXzMsIFhGRVJfUElPXzR9OwotCiAJcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCBwaW8sIDQsIE5VTEwpOwotCWlmICghY3M1NTMwX3NldF94ZmVyX21vZGUoZHJpdmUsIG1vZGVzW3Bpb10pKSB7Ci0JCWZvcm1hdCA9IChpbmwoYmFzZXJlZyArIDQpID4+IDMxKSAmIDE7Ci0JCW91dGwoY3M1NTMwX3Bpb190aW1pbmdzW2Zvcm1hdF1bcGlvXSwKLQkJCWJhc2VyZWcrKGRyaXZlLT5zZWxlY3QuYi51bml0PDwzKSk7Ci0JfQorCisJaWYgKGNzNTUzMF9zZXRfeGZlcl9tb2RlKGRyaXZlLCBYRkVSX1BJT18wICsgcGlvKSA9PSAwKQorCQljczU1MzBfdHVuZXBpbyhkcml2ZSwgcGlvKTsKIH0KIAogLyoqCi0gKgljczU1MzBfY29uZmlnX2RtYQktCXNlbGVjdC9zZXQgRE1BIGFuZCBVRE1BIG1vZGVzCisgKgljczU1MzBfdWRtYV9maWx0ZXIJLQlVRE1BIGZpbHRlcgorICoJQGRyaXZlOiBkcml2ZQorICoKKyAqCWNzNTUzMF91ZG1hX2ZpbHRlcigpIGRvZXMgVURNQSBtYXNrIGZpbHRlcmluZyBmb3IgdGhlIGdpdmVuIGRyaXZlCisgKgl0YWtpbmcgaW50byB0aGUgY29uc2lkZXJhdGlvbiBjYXBhYmlsaXRpZXMgb2YgdGhlIG1hdGUgZGV2aWNlLgorICoKKyAqCVRoZSBDUzU1MzAgc3BlY2lmaWVzIHRoYXQgdHdvIGRyaXZlcyBzaGFyaW5nIGEgY2FibGUgY2Fubm90IG1peAorICoJVURNQS9NRE1BLiAgSXQgaGFzIHRvIGJlIG9uZSBvciB0aGUgb3RoZXIsIGZvciB0aGUgcGFpciwgdGhvdWdoCisgKglkaWZmZXJlbnQgdGltaW5ncyBjYW4gc3RpbGwgYmUgY2hvc2VuIGZvciBlYWNoIGRyaXZlLiAgV2UgY291bGQKKyAqCXNldCB0aGUgYXBwcm9wcmlhdGUgdGltaW5nIGJpdHMgb24gdGhlIGZseSwgYnV0IHRoYXQgbWlnaHQgYmUKKyAqCWEgYml0IGNvbmZ1c2luZy4gIFNvLCBmb3Igbm93IHdlIHN0YXRpY2FsbHkgaGFuZGxlIHRoaXMgcmVxdWlyZW1lbnQKKyAqCWJ5IGxvb2tpbmcgYXQgb3VyIG1hdGUgZHJpdmUgdG8gc2VlIHdoYXQgaXQgaXMgY2FwYWJsZSBvZiwgYmVmb3JlCisgKgljaG9vc2luZyBhIG1vZGUgZm9yIG91ciBvd24gZHJpdmUuCisgKgorICoJTm90ZTogVGhpcyByZWxpZXMgb24gdGhlIGZhY3Qgd2UgbmV2ZXIgZmFpbCBmcm9tIFVETUEgdG8gTVdETUEyCisgKglidXQgaW5zdGVhZCBkcm9wIHRvIFBJTy4KKyAqLworCitzdGF0aWMgdTggY3M1NTMwX3VkbWFfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJaWRlX2RyaXZlX3QgKm1hdGUgPSAmaHdpZi0+ZHJpdmVzWyhkcml2ZS0+ZG4gJiAxKSBeIDFdOworCXN0cnVjdCBoZF9kcml2ZWlkICptYXRlaWQgPSBtYXRlLT5pZDsKKwl1OCBtYXNrID0gaHdpZi0+dWx0cmFfbWFzazsKKworCWlmIChtYXRlLT5wcmVzZW50ID09IDApCisJCWdvdG8gb3V0OworCisJaWYgKChtYXRlaWQtPmNhcGFiaWxpdHkgJiAxKSAmJiBfX2lkZV9kbWFfYmFkX2RyaXZlKG1hdGUpID09IDApIHsKKwkJaWYgKChtYXRlaWQtPmZpZWxkX3ZhbGlkICYgNCkgJiYgKG1hdGVpZC0+ZG1hX3VsdHJhICYgNykpCisJCQlnb3RvIG91dDsKKwkJaWYgKChtYXRlaWQtPmZpZWxkX3ZhbGlkICYgMikgJiYgKG1hdGVpZC0+ZG1hX213b3JkICYgNykpCisJCQltYXNrID0gMDsKKwl9CitvdXQ6CisJcmV0dXJuIG1hc2s7Cit9CisKKy8qKgorICoJY3M1NTMwX2NvbmZpZ19kbWEJLQlzZXQgRE1BL1VETUEgbW9kZQogICoJQGRyaXZlOiBkcml2ZSB0byB0dW5lCiAgKgotICoJY3M1NTMwX2NvbmZpZ19kbWEoKSBoYW5kbGVzIHNlbGVjdGlvbi9zZXR0aW5nIG9mIERNQS9VRE1BIG1vZGVzCi0gKglmb3IgYm90aCB0aGUgY2hpcHNldCBhbmQgZHJpdmUuIFRoZSBDUzU1MzAgaGFzIGxpbWl0YXRpb25zIGFib3V0Ci0gKgltaXhpbmcgRE1BL1VETUEgb24gdGhlIHNhbWUgY2FibGUuCisgKgljczU1MzBfY29uZmlnX2RtYSgpIGhhbmRsZXMgc2V0dGluZyBvZiBETUEvVURNQSBtb2RlCisgKglmb3IgYm90aCB0aGUgY2hpcHNldCBhbmQgZHJpdmUuCiAgKi8KLSAKLXN0YXRpYyBpbnQgY3M1NTMwX2NvbmZpZ19kbWEgKGlkZV9kcml2ZV90ICpkcml2ZSkKKworc3RhdGljIGludCBjczU1MzBfY29uZmlnX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaW50CQkJdWRtYV9vayA9IDEsIG1vZGUgPSAwOwotCWlkZV9od2lmX3QJCSpod2lmID0gSFdJRihkcml2ZSk7Ci0JaW50CQkJdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0OwotCWlkZV9kcml2ZV90CQkqbWF0ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF4xXTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZAkqaWQgPSBkcml2ZS0+aWQ7Ci0JdW5zaWduZWQgaW50CQlyZWcsIHRpbWluZ3MgPSAwOwotCXVuc2lnbmVkIGxvbmcJCWJhc2VyZWc7CisJaWYgKGlkZV90dW5lX2RtYShkcml2ZSkpCisJCXJldHVybiAwOwogCi0JLyoKLQkgKiBEZWZhdWx0IHRvIERNQS1vZmYgaW4gY2FzZSB3ZSBydW4gaW50byB0cm91YmxlIGhlcmUuCi0JICovCi0JaHdpZi0+ZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKwlyZXR1cm4gMTsKK30KIAotCS8qCi0JICogVGhlIENTNTUzMCBzcGVjaWZpZXMgdGhhdCB0d28gZHJpdmVzIHNoYXJpbmcgYSBjYWJsZSBjYW5ub3QKLQkgKiBtaXggVURNQS9NRE1BLiAgSXQgaGFzIHRvIGJlIG9uZSBvciB0aGUgb3RoZXIsIGZvciB0aGUgcGFpciwKLQkgKiB0aG91Z2ggZGlmZmVyZW50IHRpbWluZ3MgY2FuIHN0aWxsIGJlIGNob3NlbiBmb3IgZWFjaCBkcml2ZS4KLQkgKiBXZSBjb3VsZCBzZXQgdGhlIGFwcHJvcHJpYXRlIHRpbWluZyBiaXRzIG9uIHRoZSBmbHksCi0JICogYnV0IHRoYXQgbWlnaHQgYmUgYSBiaXQgY29uZnVzaW5nLiAgU28sIGZvciBub3cgd2Ugc3RhdGljYWxseQotCSAqIGhhbmRsZSB0aGlzIHJlcXVpcmVtZW50IGJ5IGxvb2tpbmcgYXQgb3VyIG1hdGUgZHJpdmUgdG8gc2VlCi0JICogd2hhdCBpdCBpcyBjYXBhYmxlIG9mLCBiZWZvcmUgY2hvb3NpbmcgYSBtb2RlIGZvciBvdXIgb3duIGRyaXZlLgotCSAqCi0JICogTm90ZTogVGhpcyByZWxpZXMgb24gdGhlIGZhY3Qgd2UgbmV2ZXIgZmFpbCBmcm9tIFVETUEgdG8gTVdETUFfMgotCSAqIGJ1dCBpbnN0ZWFkIGRyb3AgdG8gUElPCi0JICovCi0JaWYgKG1hdGUtPnByZXNlbnQpIHsKLQkJc3RydWN0IGhkX2RyaXZlaWQgKm1hdGVpZCA9IG1hdGUtPmlkOwotCQlpZiAobWF0ZWlkICYmIChtYXRlaWQtPmNhcGFiaWxpdHkgJiAxKSAmJgotCQkgICAgIV9faWRlX2RtYV9iYWRfZHJpdmUobWF0ZSkpIHsKLQkJCWlmICgobWF0ZWlkLT5maWVsZF92YWxpZCAmIDQpICYmCi0JCQkgICAgKG1hdGVpZC0+ZG1hX3VsdHJhICYgNykpCi0JCQkJdWRtYV9vayA9IDE7Ci0JCQllbHNlIGlmICgobWF0ZWlkLT5maWVsZF92YWxpZCAmIDIpICYmCi0JCQkJIChtYXRlaWQtPmRtYV9td29yZCAmIDcpKQotCQkJCXVkbWFfb2sgPSAwOwotCQkJZWxzZQotCQkJCXVkbWFfb2sgPSAxOwotCQl9Ci0JfQorc3RhdGljIGludCBjczU1MzBfdHVuZV9jaGlwc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgdTggbW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2VyZWc7CisJdW5zaWduZWQgaW50IHJlZywgdGltaW5ncyA9IDA7CiAKLQkvKgotCSAqIE5vdyBzZWUgd2hhdCB0aGUgY3VycmVudCBkcml2ZSBpcyBjYXBhYmxlIG9mLAotCSAqIHNlbGVjdGluZyBVRE1BIG9ubHkgaWYgdGhlIG1hdGUgc2FpZCBpdCB3YXMgb2suCi0JICovCi0JaWYgKGlkICYmIChpZC0+Y2FwYWJpbGl0eSAmIDEpICYmIGRyaXZlLT5hdXRvZG1hICYmCi0JICAgICFfX2lkZV9kbWFfYmFkX2RyaXZlKGRyaXZlKSkgewotCQlpZiAodWRtYV9vayAmJiAoaWQtPmZpZWxkX3ZhbGlkICYgNCkgJiYgKGlkLT5kbWFfdWx0cmEgJiA3KSkgewotCQkJaWYgICAgICAoaWQtPmRtYV91bHRyYSAmIDQpCi0JCQkJbW9kZSA9IFhGRVJfVURNQV8yOwotCQkJZWxzZSBpZiAoaWQtPmRtYV91bHRyYSAmIDIpCi0JCQkJbW9kZSA9IFhGRVJfVURNQV8xOwotCQkJZWxzZSBpZiAoaWQtPmRtYV91bHRyYSAmIDEpCi0JCQkJbW9kZSA9IFhGRVJfVURNQV8wOwotCQl9Ci0JCWlmICghbW9kZSAmJiAoaWQtPmZpZWxkX3ZhbGlkICYgMikgJiYgKGlkLT5kbWFfbXdvcmQgJiA3KSkgewotCQkJaWYgICAgICAoaWQtPmRtYV9td29yZCAmIDQpCi0JCQkJbW9kZSA9IFhGRVJfTVdfRE1BXzI7Ci0JCQllbHNlIGlmIChpZC0+ZG1hX213b3JkICYgMikKLQkJCQltb2RlID0gWEZFUl9NV19ETUFfMTsKLQkJCWVsc2UgaWYgKGlkLT5kbWFfbXdvcmQgJiAxKQotCQkJCW1vZGUgPSBYRkVSX01XX0RNQV8wOwotCQl9Ci0JfQorCW1vZGUgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIG1vZGUpOwogCiAJLyoKIAkgKiBUZWxsIHRoZSBkcml2ZSB0byBzd2l0Y2ggdG8gdGhlIG5ldyBtb2RlOyBhYm9ydCBvbiBmYWlsdXJlLgogCSAqLwotCWlmICghbW9kZSB8fCBjczU1MzBfc2V0X3hmZXJfbW9kZShkcml2ZSwgbW9kZSkpCisJaWYgKGNzNTUzMF9zZXRfeGZlcl9tb2RlKGRyaXZlLCBtb2RlKSkKIAkJcmV0dXJuIDE7CS8qIGZhaWx1cmUgKi8KIAogCS8qCkBAIC0xNzgsMTQgKzE2NiwyMSBAQAogCQljYXNlIFhGRVJfTVdfRE1BXzA6CXRpbWluZ3MgPSAweDAwMDc3NzcxOyBicmVhazsKIAkJY2FzZSBYRkVSX01XX0RNQV8xOgl0aW1pbmdzID0gMHgwMDAxMjEyMTsgYnJlYWs7CiAJCWNhc2UgWEZFUl9NV19ETUFfMjoJdGltaW5ncyA9IDB4MDAwMDIwMjA7IGJyZWFrOworCQljYXNlIFhGRVJfUElPXzQ6CisJCWNhc2UgWEZFUl9QSU9fMzoKKwkJY2FzZSBYRkVSX1BJT18yOgorCQljYXNlIFhGRVJfUElPXzE6CisJCWNhc2UgWEZFUl9QSU9fMDoKKwkJCWNzNTUzMF90dW5lcGlvKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCQlyZXR1cm4gMDsKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwogCQkJYnJlYWs7CiAJfQotCWJhc2VyZWcgPSBDUzU1MzBfQkFTRVJFRyhod2lmKTsKKwliYXNlcmVnID0gQ1M1NTMwX0JBU0VSRUcoZHJpdmUtPmh3aWYpOwogCXJlZyA9IGlubChiYXNlcmVnICsgNCk7CQkJLyogZ2V0IGRyaXZlMCBjb25maWcgcmVnaXN0ZXIgKi8KIAl0aW1pbmdzIHw9IHJlZyAmIDB4ODAwMDAwMDA7CQkvKiBwcmVzZXJ2ZSBQSU8gZm9ybWF0IGJpdCAqLwotCWlmICh1bml0ID09IDApIHsJCQkvKiBhcmUgd2UgY29uZmlndXJpbmcgZHJpdmUwPyAqLworCWlmICgoZHJpdmUtPiBkbiAmIDEpID09IDApIHsJCS8qIGFyZSB3ZSBjb25maWd1cmluZyBkcml2ZTA/ICovCiAJCW91dGwodGltaW5ncywgYmFzZXJlZyArIDQpOwkvKiB3cml0ZSBkcml2ZTAgY29uZmlnIHJlZ2lzdGVyICovCiAJfSBlbHNlIHsKIAkJaWYgKHRpbWluZ3MgJiAweDAwMTAwMDAwKQpAQCAtMzExLDYgKzMwNiw4IEBACiAJCWh3aWYtPnNlcmlhbGl6ZWQgPSBod2lmLT5tYXRlLT5zZXJpYWxpemVkID0gMTsKIAogCWh3aWYtPnR1bmVwcm9jID0gJmNzNTUzMF90dW5lcHJvYzsKKwlod2lmLT5zcGVlZHByb2MgPSAmY3M1NTMwX3R1bmVfY2hpcHNldDsKKwogCWJhc2VyZWcgPSBDUzU1MzBfQkFTRVJFRyhod2lmKTsKIAlkMF90aW1pbmdzID0gaW5sKGJhc2VyZWcgKyAwKTsKIAlpZiAoQ1M1NTMwX0JBRF9QSU8oZDBfdGltaW5ncykpIHsKQEAgLTMzMiw2ICszMjksNyBAQAogCWh3aWYtPnVsdHJhX21hc2sgPSAweDA3OwogCWh3aWYtPm13ZG1hX21hc2sgPSAweDA3OwogCisJaHdpZi0+dWRtYV9maWx0ZXIgPSBjczU1MzBfdWRtYV9maWx0ZXI7CiAJaHdpZi0+aWRlX2RtYV9jaGVjayA9ICZjczU1MzBfY29uZmlnX2RtYTsKIAlpZiAoIW5vYXV0b2RtYSkKIAkJaHdpZi0+YXV0b2RtYSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMKaW5kZXggNDVmNDNlZi4uNDE5MjVjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MzUuYwpAQCAtMTI3LDIwICsxMjcsNiBAQAogCX0KIH0KIAotc3RhdGljIHU4IGNzNTUzNV9yYXRlbWFzayhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JLyogZWlnaHR5OTMgd2lsbCByZXR1cm4gMSBpZiBpdCdzIDgwY29yZSBhbmQgY2FwYWJsZSBvZgotCWV4Y2VlZGluZyB1ZG1hMiwgMCBvdGhlcndpc2UuIHdlIG5lZWQgcmF0ZW1hc2sgdG8gc2V0Ci0JdGhlIG1heCBzcGVlZCBhbmQgaWYgd2UgY2FuID4gdWRtYTIgdGhlbiB3ZSByZXR1cm4gMgotCXdoaWNoIHNlbGVjdHMgc3BlZWRfbWF4IGFzIHVkbWE0IHdoaWNoIGlzIHRoZSA1NTM1J3MgbWF4Ci0Jc3BlZWQsIGFuZCAxIHNlbGVjdHMgdWRtYTIgd2hpY2ggaXMgdGhlIG1heCBmb3IgNDBjICovCi0JaWYgKCFlaWdodHlfbmludHlfdGhyZWUoZHJpdmUpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAyOwotfQotCi0KIC8qKioqCiAgKgljczU1MzVfc2V0X2RyaXZlICAgICAgICAgLSAgICAgQ29uZmlndXJlIHRoZSBkcml2ZSB0byB0aGUgbmV3IHNwZWVkCiAgKglAZHJpdmU6IERyaXZlIHRvIHNldCB1cApAQCAtMTUxLDcgKzEzNyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgY3M1NTM1X3NldF9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNwZWVkKQogewotCXNwZWVkID0gaWRlX3JhdGVfZmlsdGVyKGNzNTUzNV9yYXRlbWFzayhkcml2ZSksIHNwZWVkKTsKKwlzcGVlZCA9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgc3BlZWQpOwogCWlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIHNwZWVkKTsKIAljczU1MzVfc2V0X3NwZWVkKGRyaXZlLCBzcGVlZCk7CiAKQEAgLTE3OCwyOCArMTY0LDEzIEBACiAJY3M1NTM1X3NldF9zcGVlZChkcml2ZSwgeGZlcnNwZWVkKTsKIH0KIAotc3RhdGljIGludCBjczU1MzVfY29uZmlnX2RyaXZlX2Zvcl9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXU4IHNwZWVkOwotCi0Jc3BlZWQgPSBpZGVfZG1hX3NwZWVkKGRyaXZlLCBjczU1MzVfcmF0ZW1hc2soZHJpdmUpKTsKLQotCS8qIElmIG5vIERNQSBzcGVlZCB3YXMgYXZhaWxhYmxlIHRoZW4gbGV0IGRtYV9jaGVjayBoaXQgcGlvICovCi0JaWYgKCFzcGVlZCkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQljczU1MzVfc2V0X2RyaXZlKGRyaXZlLCBzcGVlZCk7Ci0JcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKLX0KLQogc3RhdGljIGludCBjczU1MzVfZG1hX2NoZWNrKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAl1OCBzcGVlZDsKIAogCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKIAotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgY3M1NTM1X2NvbmZpZ19kcml2ZV9mb3JfZG1hKGRyaXZlKSkKKwlpZiAoaWRlX3R1bmVfZG1hKGRyaXZlKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWRlX3VzZV9mYXN0X3Bpbyhkcml2ZSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYyBiL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYwppbmRleCBkZDdlYzM3Li40NmY0YTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvZGVsa2luX2NiLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2RlbGtpbl9jYi5jCkBAIC04MCw3ICs4MCw3IEBACiAJaHcuaXJxID0gZGV2LT5pcnE7CiAJaHcuY2hpcHNldCA9IGlkZV9wY2k7CQkvKiB0aGlzIGVuYWJsZXMgSVJRIHNoYXJpbmcgKi8KIAotCXJjID0gaWRlX3JlZ2lzdGVyX2h3X3dpdGhfZml4dXAoJmh3LCAmaHdpZiwgaWRlX3VuZGVjb2RlZF9zbGF2ZSk7CisJcmMgPSBpZGVfcmVnaXN0ZXJfaHdfd2l0aF9maXh1cCgmaHcsIDAsICZod2lmLCBpZGVfdW5kZWNvZGVkX3NsYXZlKTsKIAlpZiAocmMgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZGVsa2luX2NiOiBpZGVfcmVnaXN0ZXJfaHcgZmFpbGVkICglZClcbiIsIHJjKTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMKaW5kZXggOTI0ZWFhMy4uMmMyNGMzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYwpAQCAtNDMsMTUgKzQzLDEwIEBACiAKICNkZWZpbmUgSFBUMzQzX0RFQlVHX0RSSVZFX0lORk8JCTAKIAotc3RhdGljIHU4IGhwdDM0eF9yYXRlbWFzayAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXJldHVybiAxOwotfQotCiBzdGF0aWMgaW50IGhwdDM0eF90dW5lX2NoaXBzZXQgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggeGZlcnNwZWVkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSBIV0lGKGRyaXZlKS0+cGNpX2RldjsKLQl1OCBzcGVlZAk9IGlkZV9yYXRlX2ZpbHRlcihocHQzNHhfcmF0ZW1hc2soZHJpdmUpLCB4ZmVyc3BlZWQpOworCXU4IHNwZWVkID0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCB4ZmVyc3BlZWQpOwogCXUzMiByZWcxPSAwLCB0bXAxID0gMCwgcmVnMiA9IDAsIHRtcDIgPSAwOwogCXU4CQkJaGlfc3BlZWQsIGxvX3NwZWVkOwogCkBAIC04OSwyOSArODQsMTEgQEAKIAkodm9pZCkgaHB0MzR4X3R1bmVfY2hpcHNldChkcml2ZSwgKFhGRVJfUElPXzAgKyBwaW8pKTsKIH0KIAotLyoKLSAqIFRoaXMgYWxsb3dzIHRoZSBjb25maWd1cmF0aW9uIG9mIGlkZV9wY2kgY2hpcHNldCByZWdpc3RlcnMKLSAqIGZvciBjYXJkcyB0aGF0IGxlYXJuIGFib3V0IHRoZSBkcml2ZSdzIFVETUEsIERNQSwgUElPIGNhcGFiaWxpdGllcwotICogYWZ0ZXIgdGhlIGRyaXZlIGlzIHJlcG9ydGVkIGJ5IHRoZSBPUy4gIEluaXRpYWxseSBmb3IgZGVzaWduZWQgZm9yCi0gKiBIUFQzNDMgVURNQSBjaGlwc2V0IGJ5IEhpZ2hQb2ludHxUcmlvbmVzIFRlY2hub2xvZ2llcywgSW5jLgotICovCi0KLXN0YXRpYyBpbnQgY29uZmlnX2NoaXBzZXRfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXU4IHNwZWVkID0gaWRlX2RtYV9zcGVlZChkcml2ZSwgaHB0MzR4X3JhdGVtYXNrKGRyaXZlKSk7Ci0KLQlpZiAoIShzcGVlZCkpCi0JCXJldHVybiAwOwotCi0JKHZvaWQpIGhwdDM0eF90dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKTsKLQlyZXR1cm4gaWRlX2RtYV9lbmFibGUoZHJpdmUpOwotfQotCiBzdGF0aWMgaW50IGhwdDM0eF9jb25maWdfZHJpdmVfeGZlcl9yYXRlIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJZHJpdmUtPmluaXRfc3BlZWQgPSAwOwogCi0JaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwlpZiAoaWRlX3R1bmVfZG1hKGRyaXZlKSkKICNpZm5kZWYgQ09ORklHX0hQVDM0WF9BVVRPRE1BCiAJCXJldHVybiAtMTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKaW5kZXggY2Y5ZDM0NC4uZmNiYzU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYwpAQCAtNTE0LDQzICs1MTQsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHU4IGhwdDN4eF9yYXRlbWFzayhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0Jc3RydWN0IGhwdF9pbmZvICppbmZvCT0gcGNpX2dldF9kcnZkYXRhKEhXSUYoZHJpdmUpLT5wY2lfZGV2KTsKLQl1OCBtb2RlCQkJPSBpbmZvLT5tYXhfbW9kZTsKLQotCWlmICghZWlnaHR5X25pbnR5X3RocmVlKGRyaXZlKSAmJiBtb2RlKQotCQltb2RlID0gbWluKG1vZGUsICh1OCkxKTsKLQlyZXR1cm4gbW9kZTsKLX0KLQogLyoKICAqCU5vdGUgZm9yIHRoZSBmdXR1cmU7IHRoZSBTQVRBIGhwdDM3eCB3ZSBtdXN0IHNldAogICoJZWl0aGVyIFBJTyBvciBVRE1BIG1vZGVzIDAsNCw1CiAgKi8KLSAKLXN0YXRpYyB1OCBocHQzeHhfcmF0ZWZpbHRlcihpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNwZWVkKQorCitzdGF0aWMgdTggaHB0M3h4X3VkbWFfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBwY2lfZ2V0X2RydmRhdGEoSFdJRihkcml2ZSktPnBjaV9kZXYpOwogCXU4IGNoaXBfdHlwZQkJPSBpbmZvLT5jaGlwX3R5cGU7Ci0JdTggbW9kZQkJCT0gaHB0M3h4X3JhdGVtYXNrKGRyaXZlKTsKLQotCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spCi0JCXJldHVybiBtaW4oc3BlZWQsICh1OClYRkVSX1BJT180KTsKKwl1OCBtb2RlCQkJPSBpbmZvLT5tYXhfbW9kZTsKKwl1OCBtYXNrOwogCiAJc3dpdGNoIChtb2RlKSB7CiAJCWNhc2UgMHgwNDoKLQkJCXNwZWVkID0gbWluX3QodTgsIHNwZWVkLCBYRkVSX1VETUFfNik7CisJCQltYXNrID0gMHg3ZjsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDM6Ci0JCQlzcGVlZCA9IG1pbl90KHU4LCBzcGVlZCwgWEZFUl9VRE1BXzUpOworCQkJbWFzayA9IDB4M2Y7CiAJCQlpZiAoY2hpcF90eXBlID49IEhQVDM3NCkKIAkJCQlicmVhazsKIAkJCWlmICghY2hlY2tfaW5fZHJpdmVfbGlzdChkcml2ZSwgYmFkX2F0YTEwMF81KSkKIAkJCQlnb3RvIGNoZWNrX2JhZF9hdGEzMzsKIAkJCS8qIGZhbGwgdGhydSAqLwogCQljYXNlIDB4MDI6Ci0JCQlzcGVlZCA9IG1pbl90KHU4LCBzcGVlZCwgWEZFUl9VRE1BXzQpOworCQkJbWFzayA9IDB4MWY7CiAKIAkJCS8qCiAJCQkgKiBDSEVDSyBNRSwgRG9lcyB0aGlzIG5lZWQgdG8gYmUgY2hhbmdlZCB0byBIUFQzNzQgPz8KQEAgLTU2MSwxMyArNTQ5LDEzIEBACiAJCQkgICAgIWNoZWNrX2luX2RyaXZlX2xpc3QoZHJpdmUsIGJhZF9hdGE2Nl80KSkKIAkJCQlnb3RvIGNoZWNrX2JhZF9hdGEzMzsKIAotCQkJc3BlZWQgPSBtaW5fdCh1OCwgc3BlZWQsIFhGRVJfVURNQV8zKTsKKwkJCW1hc2sgPSAweDBmOwogCQkJaWYgKEhQVDM2Nl9BTExPV19BVEE2Nl8zICYmCiAJCQkgICAgIWNoZWNrX2luX2RyaXZlX2xpc3QoZHJpdmUsIGJhZF9hdGE2Nl8zKSkKIAkJCQlnb3RvIGNoZWNrX2JhZF9hdGEzMzsKIAkJCS8qIGZhbGwgdGhydSAqLwogCQljYXNlIDB4MDE6Ci0JCQlzcGVlZCA9IG1pbl90KHU4LCBzcGVlZCwgWEZFUl9VRE1BXzIpOworCQkJbWFzayA9IDB4MDc7CiAKIAkJY2hlY2tfYmFkX2F0YTMzOgogCQkJaWYgKGNoaXBfdHlwZSA+PSBIUFQzNzBBKQpAQCAtNTc3LDEwICs1NjUsMTAgQEAKIAkJCS8qIGZhbGwgdGhydSAqLwogCQljYXNlIDB4MDA6CiAJCWRlZmF1bHQ6Ci0JCQlzcGVlZCA9IG1pbl90KHU4LCBzcGVlZCwgWEZFUl9NV19ETUFfMik7CisJCQltYXNrID0gMHgwMDsKIAkJCWJyZWFrOwogCX0KLQlyZXR1cm4gc3BlZWQ7CisJcmV0dXJuIG1hc2s7CiB9CiAKIHN0YXRpYyB1MzIgZ2V0X3NwZWVkX3NldHRpbmcodTggc3BlZWQsIHN0cnVjdCBocHRfaW5mbyAqaW5mbykKQEAgLTYwOCwxMiArNTk2LDE5IEBACiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCXN0cnVjdCBwY2lfZGV2ICAqZGV2CT0gaHdpZi0+cGNpX2RldjsKIAlzdHJ1Y3QgaHB0X2luZm8JKmluZm8JPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQl1OCAgc3BlZWQJCT0gaHB0M3h4X3JhdGVmaWx0ZXIoZHJpdmUsIHhmZXJzcGVlZCk7CisJdTggIHNwZWVkCQk9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgeGZlcnNwZWVkKTsKIAl1OCAgaXRyX2FkZHIJCT0gZHJpdmUtPmRuID8gMHg0NCA6IDB4NDA7Ci0JdTMyIGl0cl9tYXNrCQk9IHNwZWVkIDwgWEZFUl9NV19ETUFfMCA/IDB4MzAwNzAwMDAgOgotCQkJCSAoc3BlZWQgPCBYRkVSX1VETUFfMCAgID8gMHhjMDA3MDAwMCA6IDB4YzAzODAwZmYpOwotCXUzMiBuZXdfaXRyCQk9IGdldF9zcGVlZF9zZXR0aW5nKHNwZWVkLCBpbmZvKTsKIAl1MzIgb2xkX2l0cgkJPSAwOworCXUzMiBpdHJfbWFzaywgbmV3X2l0cjsKKworCS8qIFRPRE86IG1vdmUgdGhpcyB0byBpZGVfcmF0ZV9maWx0ZXIoKSBbIGNoZWNrIC0+YXRhcGlfZG1hIF0gKi8KKwlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQorCQlzcGVlZCA9IG1pbl90KHU4LCBzcGVlZCwgWEZFUl9QSU9fNCk7CisKKwlpdHJfbWFzayA9IHNwZWVkIDwgWEZFUl9NV19ETUFfMCA/IDB4MzAwNzAwMDAgOgorCQkgIChzcGVlZCA8IFhGRVJfVURNQV8wICAgPyAweGMwMDcwMDAwIDogMHhjMDM4MDBmZik7CisKKwluZXdfaXRyID0gZ2V0X3NwZWVkX3NldHRpbmcoc3BlZWQsIGluZm8pOwogCiAJLyoKIAkgKiBEaXNhYmxlIG9uLWNoaXAgUElPIEZJRk8vYnVmZmVyIChhbmQgUElPIE1TVCBtb2RlIGFzIHdlbGwpCkBAIC02MzMsMTIgKzYyOCwxOSBAQAogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgcGNpX2RldiAgKmRldgk9IGh3aWYtPnBjaV9kZXY7CiAJc3RydWN0IGhwdF9pbmZvCSppbmZvCT0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0JdTggIHNwZWVkCQk9IGhwdDN4eF9yYXRlZmlsdGVyKGRyaXZlLCB4ZmVyc3BlZWQpOworCXU4ICBzcGVlZAkJPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHhmZXJzcGVlZCk7CiAJdTggIGl0cl9hZGRyCQk9IDB4NDAgKyAoZHJpdmUtPmRuICogNCk7Ci0JdTMyIGl0cl9tYXNrCQk9IHNwZWVkIDwgWEZFUl9NV19ETUFfMCA/IDB4MzAzYzAwMDAgOgotCQkJCSAoc3BlZWQgPCBYRkVSX1VETUFfMCAgID8gMHhjMDNjMDAwMCA6IDB4YzFjMDAxZmYpOwotCXUzMiBuZXdfaXRyCQk9IGdldF9zcGVlZF9zZXR0aW5nKHNwZWVkLCBpbmZvKTsKIAl1MzIgb2xkX2l0cgkJPSAwOworCXUzMiBpdHJfbWFzaywgbmV3X2l0cjsKKworCS8qIFRPRE86IG1vdmUgdGhpcyB0byBpZGVfcmF0ZV9maWx0ZXIoKSBbIGNoZWNrIC0+YXRhcGlfZG1hIF0gKi8KKwlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQorCQlzcGVlZCA9IG1pbl90KHU4LCBzcGVlZCwgWEZFUl9QSU9fNCk7CisKKwlpdHJfbWFzayA9IHNwZWVkIDwgWEZFUl9NV19ETUFfMCA/IDB4MzAzYzAwMDAgOgorCQkgIChzcGVlZCA8IFhGRVJfVURNQV8wICAgPyAweGMwM2MwMDAwIDogMHhjMWMwMDFmZik7CisKKwluZXdfaXRyID0gZ2V0X3NwZWVkX3NldHRpbmcoc3BlZWQsIGluZm8pOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgaXRyX2FkZHIsICZvbGRfaXRyKTsKIAluZXdfaXRyID0gKG5ld19pdHIgJiB+aXRyX21hc2spIHwgKG9sZF9pdHIgJiBpdHJfbWFzayk7CkBAIC02NjcsMjQgKzY2OSw2IEBACiAJKHZvaWQpIGhwdDN4eF90dW5lX2NoaXBzZXQgKGRyaXZlLCBYRkVSX1BJT18wICsgcGlvKTsKIH0KIAotLyoKLSAqIFRoaXMgYWxsb3dzIHRoZSBjb25maWd1cmF0aW9uIG9mIGlkZV9wY2kgY2hpcHNldCByZWdpc3RlcnMKLSAqIGZvciBjYXJkcyB0aGF0IGxlYXJuIGFib3V0IHRoZSBkcml2ZSdzIFVETUEsIERNQSwgUElPIGNhcGFiaWxpdGllcwotICogYWZ0ZXIgdGhlIGRyaXZlIGlzIHJlcG9ydGVkIGJ5IHRoZSBPUy4gIEluaXRpYWxseSBkZXNpZ25lZCBmb3IKLSAqIEhQVDM2NiBVRE1BIGNoaXBzZXQgYnkgSGlnaFBvaW50fFRyaW9uZXMgVGVjaG5vbG9naWVzLCBJbmMuCi0gKgotICovCi1zdGF0aWMgaW50IGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXU4IHNwZWVkID0gaWRlX2RtYV9zcGVlZChkcml2ZSwgaHB0M3h4X3JhdGVtYXNrKGRyaXZlKSk7Ci0KLQlpZiAoIXNwZWVkKQotCQlyZXR1cm4gMDsKLQotCSh2b2lkKSBocHQzeHhfdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCk7Ci0JcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKLX0KLQogc3RhdGljIGludCBocHQzeHhfcXVpcmtwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7CkBAIC03MzksNyArNzIzLDcgQEAKIHsKIAlkcml2ZS0+aW5pdF9zcGVlZCA9IDA7CiAKLQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQorCWlmIChpZGVfdHVuZV9kbWEoZHJpdmUpKQogCQlyZXR1cm4gMDsKIAogCWlmIChpZGVfdXNlX2Zhc3RfcGlvKGRyaXZlKSkKQEAgLTEyNzEsNiArMTI1NSw3IEBACiAJaHdpZi0+aW50cnByb2MJCQk9ICZocHQzeHhfaW50cnByb2M7CiAJaHdpZi0+bWFza3Byb2MJCQk9ICZocHQzeHhfbWFza3Byb2M7CiAJaHdpZi0+YnVzcHJvYwkJCT0gJmhwdDN4eF9idXNwcm9jOworCWh3aWYtPnVkbWFfZmlsdGVyCQk9ICZocHQzeHhfdWRtYV9maWx0ZXI7CiAKIAkvKgogCSAqIEhQVDN4eE4gY2hpcHMgaGF2ZSBzb21lIGNvbXBsaWNhdGlvbnM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaXQ4MjEzLmMgYi9kcml2ZXJzL2lkZS9wY2kvaXQ4MjEzLmMKaW5kZXggNDI0ZjAwYi4uYzA0YTAyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2l0ODIxMy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9pdDgyMTMuYwpAQCAtMTcsMjIgKzE3LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0vKgotICoJaXQ4MjEzX3JhdGVtYXNrCS0JQ29tcHV0ZSBhdmFpbGFibGUgbW9kZXMKLSAqCUBkcml2ZTogSURFIGRyaXZlCi0gKgotICoJQ29tcHV0ZSB0aGUgYXZhaWxhYmxlIHNwZWVkcyBmb3IgdGhlIGRldmljZXMgb24gdGhlIGludGVyZmFjZS4gVGhpcwotICoJaXMgYWxsIG1vZGVzIHRvIEFUQTEzMyBjbGlwcGVkIGJ5IGRyaXZlIGNhYmxlIHNldHVwLgotICovCi0KLXN0YXRpYyB1OCBpdDgyMTNfcmF0ZW1hc2sgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQl1OCBtb2RlCT0gNDsKLQlpZiAoIWVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkpCi0JCW1vZGUgPSBtaW5fdCh1OCwgbW9kZSwgMSk7Ci0JcmV0dXJuIG1vZGU7Ci19Ci0KIC8qKgogICoJaXQ4MjEzX2RtYV8yX3BpbwkJLQlyZXR1cm4gdGhlIFBJTyBtb2RlIG1hdGNoaW5nIERNQQogICoJQHhmZXJfcmF0ZTogdHJhbnNmZXIgc3BlZWQKQEAgLTE0NSw3ICsxMjksNyBAQAogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gaHdpZi0+cGNpX2RldjsKIAl1OCBtYXNsYXZlCQk9IDB4NDA7Ci0JdTggc3BlZWQJCT0gaWRlX3JhdGVfZmlsdGVyKGl0ODIxM19yYXRlbWFzayhkcml2ZSksIHhmZXJzcGVlZCk7CisJdTggc3BlZWQJCT0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCB4ZmVyc3BlZWQpOwogCWludCBhX3NwZWVkCQk9IDMgPDwgKGRyaXZlLT5kbiAqIDQpOwogCWludCB1X2ZsYWcJCT0gMSA8PCBkcml2ZS0+ZG47CiAJaW50IHZfZmxhZwkJPSAweDAxIDw8IGRyaXZlLT5kbjsKQEAgLTIxMywyNSArMTk3LDYgQEAKIAlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgc3BlZWQpOwogfQogCi0vKgotICoJY29uZmlnX2NoaXBzZXRfZm9yX2RtYQktCWNvbmZpZ3VyZSBmb3IgRE1BCi0gKglAZHJpdmU6IGRyaXZlIHRvIGNvbmZpZ3VyZQotICoKLSAqCUNhbGxlZCBieSB0aGUgSURFIGxheWVyIHdoZW4gaXQgd2FudHMgdGhlIHRpbWluZ3Mgc2V0IHVwLgotICovCi0KLXN0YXRpYyBpbnQgY29uZmlnX2NoaXBzZXRfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXU4IHNwZWVkID0gaWRlX2RtYV9zcGVlZChkcml2ZSwgaXQ4MjEzX3JhdGVtYXNrKGRyaXZlKSk7Ci0KLQlpZiAoIXNwZWVkKQotCQlyZXR1cm4gMDsKLQotCWl0ODIxM190dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKTsKLQotCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7Ci19Ci0KIC8qKgogICoJaXQ4MjEzX2NvbmZpZ3VyZV9kcml2ZV9mb3JfZG1hCS0Jc2V0IHVwIGZvciBETUEgdHJhbnNmZXJzCiAgKglAZHJpdmU6IGRyaXZlIHdlIGFyZSBnb2luZyB0byBzZXQgdXAKQEAgLTI0Niw3ICsyMTEsNyBAQAogewogCXU4IHBpbzsKIAotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSkpCisJaWYgKGlkZV90dW5lX2RtYShkcml2ZSkpCiAJCXJldHVybiAwOwogCiAJcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDQsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jIGIvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jCmluZGV4IDRlMTI1NDguLjVmYWFmZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9pdDgyMXguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaXQ4MjF4LmMKQEAgLTIyOSwyMiArMjI5LDYgQEAKIH0KIAogLyoqCi0gKglpdDgyMXhfcmF0ZW1hc2sJLQlDb21wdXRlIGF2YWlsYWJsZSBtb2RlcwotICoJQGRyaXZlOiBJREUgZHJpdmUKLSAqCi0gKglDb21wdXRlIHRoZSBhdmFpbGFibGUgc3BlZWRzIGZvciB0aGUgZGV2aWNlcyBvbiB0aGUgaW50ZXJmYWNlLiBUaGlzCi0gKglpcyBhbGwgbW9kZXMgdG8gQVRBMTMzIGNsaXBwZWQgYnkgZHJpdmUgY2FibGUgc2V0dXAuCi0gKi8KLQotc3RhdGljIHU4IGl0ODIxeF9yYXRlbWFzayAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXU4IG1vZGUJPSA0OwotCWlmICghZWlnaHR5X25pbnR5X3RocmVlKGRyaXZlKSkKLQkJbW9kZSA9IG1pbihtb2RlLCAodTgpMSk7Ci0JcmV0dXJuIG1vZGU7Ci19Ci0KLS8qKgogICoJaXQ4MjF4X3R1bmVwaW8JLQl0dW5lIGEgZHJpdmUKICAqCUBkcml2ZTogZHJpdmUgdG8gdHVuZQogICoJQHBpbzogdGhlIGRlc2lyZWQgUElPIG1vZGUKQEAgLTQzOCw3ICs0MjIsNyBAQAogCiAJaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpdDgyMXhfZGV2ICppdGRldiA9IGlkZV9nZXRfaHdpZmRhdGEoaHdpZik7Ci0JdTggc3BlZWQJCT0gaWRlX3JhdGVfZmlsdGVyKGl0ODIxeF9yYXRlbWFzayhkcml2ZSksIHhmZXJzcGVlZCk7CisJdTggc3BlZWQJCT0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCB4ZmVyc3BlZWQpOwogCiAJc3dpdGNoIChzcGVlZCkgewogCWNhc2UgWEZFUl9QSU9fNDoKQEAgLTQ4MCwyNSArNDY0LDYgQEAKIH0KIAogLyoqCi0gKgljb25maWdfY2hpcHNldF9mb3JfZG1hCS0JY29uZmlndXJlIGZvciBETUEKLSAqCUBkcml2ZTogZHJpdmUgdG8gY29uZmlndXJlCi0gKgotICoJQ2FsbGVkIGJ5IHRoZSBJREUgbGF5ZXIgd2hlbiBpdCB3YW50cyB0aGUgdGltaW5ncyBzZXQgdXAuCi0gKi8KLQotc3RhdGljIGludCBjb25maWdfY2hpcHNldF9mb3JfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JdTggc3BlZWQJPSBpZGVfZG1hX3NwZWVkKGRyaXZlLCBpdDgyMXhfcmF0ZW1hc2soZHJpdmUpKTsKLQotCWlmIChzcGVlZCA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWl0ODIxeF90dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKTsKLQotCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7Ci19Ci0KLS8qKgogICoJaXQ4MjF4X2NvbmZpZ3VyZV9kcml2ZV9mb3JfZG1hCS0Jc2V0IHVwIGZvciBETUEgdHJhbnNmZXJzCiAgKglAZHJpdmU6IGRyaXZlIHdlIGFyZSBnb2luZyB0byBzZXQgdXAKICAqCkBAIC01MTAsNyArNDc1LDcgQEAKIAogc3RhdGljIGludCBpdDgyMXhfY29uZmlnX2RyaXZlX2Zvcl9kbWEgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQorCWlmIChpZGVfdHVuZV9kbWEoZHJpdmUpKQogCQlyZXR1cm4gMDsKIAogCWl0ODIxeF90dW5lcHJvYyhkcml2ZSwgMjU1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9qbWljcm9uLmMgYi9kcml2ZXJzL2lkZS9wY2kvam1pY3Jvbi5jCmluZGV4IGJlNGZjOTYuLjc2ZWQyNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9qbWljcm9uLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2ptaWNyb24uYwpAQCAtMjIsMjIgKzIyLDYgQEAKIH0gcG9ydF90eXBlOwogCiAvKioKLSAqCWptaWNyb25fcmF0ZW1hc2sJLQlDb21wdXRlIGF2YWlsYWJsZSBtb2RlcwotICoJQGRyaXZlOiBJREUgZHJpdmUKLSAqCi0gKglDb21wdXRlIHRoZSBhdmFpbGFibGUgc3BlZWRzIGZvciB0aGUgZGV2aWNlcyBvbiB0aGUgaW50ZXJmYWNlLiBUaGlzCi0gKglpcyBhbGwgbW9kZXMgdG8gQVRBMTMzIGNsaXBwZWQgYnkgZHJpdmUgY2FibGUgc2V0dXAuCi0gKi8KLQotc3RhdGljIHU4IGptaWNyb25fcmF0ZW1hc2soaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXU4IG1vZGUJPSA0OwotCWlmICghZWlnaHR5X25pbnR5X3RocmVlKGRyaXZlKSkKLQkJbW9kZSA9IG1pbihtb2RlLCAodTgpMSk7Ci0JcmV0dXJuIG1vZGU7Ci19Ci0KLS8qKgogICoJYXRhNjZfam1pY3JvbgkJLQlDYWJsZSBjaGVjawogICoJQGh3aWY6IElERSBwb3J0CiAgKgpAQCAtMTI5LDMyICsxMTMsMTIgQEAKIAogc3RhdGljIGludCBqbWljcm9uX3R1bmVfY2hpcHNldCAoaWRlX2RyaXZlX3QgKmRyaXZlLCBieXRlIHhmZXJzcGVlZCkKIHsKLQotCXU4IHNwZWVkCQk9IGlkZV9yYXRlX2ZpbHRlcihqbWljcm9uX3JhdGVtYXNrKGRyaXZlKSwgeGZlcnNwZWVkKTsKKwl1OCBzcGVlZCA9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgeGZlcnNwZWVkKTsKIAogCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBzcGVlZCk7CiB9CiAKIC8qKgotICoJY29uZmlnX2NoaXBzZXRfZm9yX2RtYQktCWNvbmZpZ3VyZSBmb3IgRE1BCi0gKglAZHJpdmU6IGRyaXZlIHRvIGNvbmZpZ3VyZQotICoKLSAqCUFzIHRoZSBKTWljcm9uIHNub29wcyBmb3IgdGltaW5ncyBhbGwgd2UgYWN0dWFsbHkgbmVlZCB0byBkbyBpcwotICoJbWFrZSBzdXJlIHdlIGRvbid0IHNldCBhbiBpbnZhbGlkIG1vZGUuCi0gKi8KLQotc3RhdGljIGludCBjb25maWdfY2hpcHNldF9mb3JfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JdTggc3BlZWQJPSBpZGVfZG1hX3NwZWVkKGRyaXZlLCBqbWljcm9uX3JhdGVtYXNrKGRyaXZlKSk7Ci0KLQlpZiAoIXNwZWVkKQotCQlyZXR1cm4gMDsKLQotCWptaWNyb25fdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCk7Ci0JcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKLX0KLQotLyoqCiAgKglqbWljcm9uX2NvbmZpZ3VyZV9kcml2ZV9mb3JfZG1hCS0Jc2V0IHVwIGZvciBETUEgdHJhbnNmZXJzCiAgKglAZHJpdmU6IGRyaXZlIHdlIGFyZSBnb2luZyB0byBzZXQgdXAKICAqCkBAIC0xNjQsNyArMTI4LDcgQEAKIAogc3RhdGljIGludCBqbWljcm9uX2NvbmZpZ19kcml2ZV9mb3JfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwlpZiAoaWRlX3R1bmVfZG1hKGRyaXZlKSkKIAkJcmV0dXJuIDA7CiAKIAljb25maWdfam1pY3Jvbl9jaGlwc2V0X2Zvcl9waW8oZHJpdmUsIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jCmluZGV4IDJkYTVjYmIuLmNjMGJmZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9uZXcuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfbmV3LmMKQEAgLTM3LDggKzM3LDYgQEAKICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgogI2VuZGlmCiAKLSNkZWZpbmUgUERDMjAyX0RFQlVHX0NBQkxFCTAKLQogI3VuZGVmIERFQlVHCiAKICNpZmRlZiBERUJVRwpAQCAtODIsMTYgKzgwLDYgQEAKIAlyZXR1cm4gbW9kZTsKIH0KIAotc3RhdGljIHU4IHBkY25ld19yYXRlbWFzayhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JdTggbW9kZSA9IG1heF9kbWFfcmF0ZShIV0lGKGRyaXZlKS0+cGNpX2Rldik7Ci0KLQlpZiAoIWVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkpCi0JCW1vZGUgPSBtaW5fdCh1OCwgbW9kZSwgMSk7Ci0KLQlyZXR1cm4JbW9kZTsKLX0KLQogLyoqCiAgKiBnZXRfaW5kZXhlZF9yZWcgLSBHZXQgaW5kZXhlZCByZWdpc3RlcgogICogQGh3aWY6IGZvciB0aGUgcG9ydCBhZGRyZXNzCkBAIC0xNjQsNyArMTUyLDcgQEAKIAl1OCBhZGoJCQk9IChkcml2ZS0+ZG4gJiAxKSA/IDB4MDggOiAweDAwOwogCWludAkJCWVycjsKIAotCXNwZWVkID0gaWRlX3JhdGVfZmlsdGVyKHBkY25ld19yYXRlbWFzayhkcml2ZSksIHNwZWVkKTsKKwlzcGVlZCA9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgc3BlZWQpOwogCiAJLyoKIAkgKiBJc3N1ZSBTRVRGRUFUVVJFU19YRkVSIHRvIHRoZSBkcml2ZSBmaXJzdC4gUERDMjAyeHggaGFyZHdhcmUgd2lsbApAQCAtMjQwLDQ3ICsyMjgsMTEgQEAKIAlyZXR1cm4gZ2V0X2luZGV4ZWRfcmVnKGh3aWYsIDB4MGIpICYgMHgwNDsKIH0KIAotc3RhdGljIGludCBjb25maWdfY2hpcHNldF9mb3JfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXU4IHVsdHJhXzY2CQk9IChpZC0+ZG1hX3VsdHJhICYgMHgwMDc4KSA/IDEgOiAwOwotCXU4IGNhYmxlCQk9IHBkY25ld19jYWJsZV9kZXRlY3QoaHdpZik7Ci0JdTggc3BlZWQ7Ci0KLQlpZiAodWx0cmFfNjYgJiYgY2FibGUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogJXMgY2hhbm5lbCAiCi0JCSAgICAgICAicmVxdWlyZXMgYW4gODAtcGluIGNhYmxlIGZvciBvcGVyYXRpb24uXG4iLAotCQkgICAgICAgaHdpZi0+Y2hhbm5lbCA/ICJTZWNvbmRhcnkiIDogIlByaW1hcnkiKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgcmVkdWNlZCB0byBVbHRyYTMzIG1vZGUuXG4iLCBkcml2ZS0+bmFtZSk7Ci0JfQotCi0JaWYgKGlkLT5jYXBhYmlsaXR5ICYgNCkgewotCQkvKgotCQkgKiBTZXQgSU9SRFlfRU4gJiBQUkVGRVRDSF9FTiAodGhpcyBzZWVtcyB0byBoYXZlCi0JCSAqIE5PIHJlYWwgZWZmZWN0IHNpbmNlIHRoaXMgcmVnaXN0ZXIgaXMgcmVsb2FkZWQKLQkJICogYnkgaGFyZHdhcmUgd2hlbiB0aGUgdHJhbnNmZXIgbW9kZSBpcyBzZWxlY3RlZCkKLQkJICovCi0JCXU4IHRtcCwgYWRqID0gKGRyaXZlLT5kbiAmIDEpID8gMHgwOCA6IDB4MDA7Ci0KLQkJdG1wID0gZ2V0X2luZGV4ZWRfcmVnKGh3aWYsIDB4MTMgKyBhZGopOwotCQlzZXRfaW5kZXhlZF9yZWcoaHdpZiwgMHgxMyArIGFkaiwgdG1wIHwgMHgwMyk7Ci0JfQotCi0Jc3BlZWQgPSBpZGVfZG1hX3NwZWVkKGRyaXZlLCBwZGNuZXdfcmF0ZW1hc2soZHJpdmUpKTsKLQotCWlmICghc3BlZWQpCi0JCXJldHVybiAwOwotCi0JKHZvaWQpIGh3aWYtPnNwZWVkcHJvYyhkcml2ZSwgc3BlZWQpOwotCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7Ci19Ci0KIHN0YXRpYyBpbnQgcGRjbmV3X2NvbmZpZ19kcml2ZV94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKIAotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSkpCisJaWYgKGlkZV90dW5lX2RtYShkcml2ZSkpCiAJCXJldHVybiAwOwogCiAJaWYgKGlkZV91c2VfZmFzdF9waW8oZHJpdmUpKQpAQCAtMzk1LDcgKzM0Nyw3IEBACiAJdW5zaWduZWQgaW50IGNsYXNzX3JldiA9IDA7CiAJdTggY29uZjsKIAotCWlmIChucCA9PSBOVUxMIHx8ICFkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImtpd2ktcm9vdCIpKQorCWlmIChucCA9PSBOVUxMIHx8ICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImtpd2ktcm9vdCIpKQogCQlyZXR1cm47CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmY2xhc3NfcmV2KTsKQEAgLTU0Myw3ICs0OTUsOCBAQAogCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IGh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7CiAKIAlod2lmLT5hdGFwaV9kbWEgID0gMTsKLQlod2lmLT51bHRyYV9tYXNrID0gMHg3ZjsKKworCWh3aWYtPnVsdHJhX21hc2sgPSBod2lmLT5jZHMtPnVkbWFfbWFzazsKIAlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKIAogCWh3aWYtPmVycl9zdG9wc19maWZvID0gMTsKQEAgLTU1NiwxMSArNTA5LDYgQEAKIAlpZiAoIW5vYXV0b2RtYSkKIAkJaHdpZi0+YXV0b2RtYSA9IDE7CiAJaHdpZi0+ZHJpdmVzWzBdLmF1dG9kbWEgPSBod2lmLT5kcml2ZXNbMV0uYXV0b2RtYSA9IGh3aWYtPmF1dG9kbWE7Ci0KLSNpZiBQREMyMDJfREVCVUdfQ0FCTEUKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVzLXBpbiBjYWJsZVxuIiwKLQkJaHdpZi0+bmFtZSwgaHdpZi0+dWRtYV9mb3VyID8gIjgwIiA6ICI0MCIpOwotI2VuZGlmIC8qIFBEQzIwMl9ERUJVR19DQUJMRSAqLwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3NldHVwX3BkY25ldyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQpAQCAtNjE5LDYgKzU2Nyw3IEBACiAJCS5jaGFubmVscwk9IDIsCiAJCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAorCQkudWRtYV9tYXNrCT0gMHgzZiwgLyogdWRtYTAtNSAqLwogCX0sewkvKiAxICovCiAJCS5uYW1lCQk9ICJQREMyMDI2OSIsCiAJCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9wZGNuZXcsCkBAIC02MjcsNiArNTc2LDcgQEAKIAkJLmNoYW5uZWxzCT0gMiwKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCisJCS51ZG1hX21hc2sJPSAweDdmLCAvKiB1ZG1hMC02Ki8KIAl9LHsJLyogMiAqLwogCQkubmFtZQkJPSAiUERDMjAyNzAiLAogCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfcGRjMjAyNzAsCkBAIC02MzUsNiArNTg1LDcgQEAKIAkJLmNoYW5uZWxzCT0gMiwKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCisJCS51ZG1hX21hc2sJPSAweDNmLCAvKiB1ZG1hMC01ICovCiAJfSx7CS8qIDMgKi8KIAkJLm5hbWUJCT0gIlBEQzIwMjcxIiwKIAkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3BkY25ldywKQEAgLTY0Myw2ICs1OTQsNyBAQAogCQkuY2hhbm5lbHMJPSAyLAogCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKKwkJLnVkbWFfbWFzawk9IDB4N2YsIC8qIHVkbWEwLTYqLwogCX0sewkvKiA0ICovCiAJCS5uYW1lCQk9ICJQREMyMDI3NSIsCiAJCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9wZGNuZXcsCkBAIC02NTEsNiArNjAzLDcgQEAKIAkJLmNoYW5uZWxzCT0gMiwKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCisJCS51ZG1hX21hc2sJPSAweDdmLCAvKiB1ZG1hMC02Ki8KIAl9LHsJLyogNSAqLwogCQkubmFtZQkJPSAiUERDMjAyNzYiLAogCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfcGRjMjAyNzYsCkBAIC02NTksNiArNjEyLDcgQEAKIAkJLmNoYW5uZWxzCT0gMiwKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCisJCS51ZG1hX21hc2sJPSAweDdmLCAvKiB1ZG1hMC02Ki8KIAl9LHsJLyogNiAqLwogCQkubmFtZQkJPSAiUERDMjAyNzciLAogCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfcGRjbmV3LApAQCAtNjY3LDYgKzYyMSw3IEBACiAJCS5jaGFubmVscwk9IDIsCiAJCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAorCQkudWRtYV9tYXNrCT0gMHg3ZiwgLyogdWRtYTAtNiovCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCmluZGV4IGE3YTYzOWYuLjIzODQ0NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKQEAgLTEsOCArMSw5IEBACiAvKgotICogIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYwlWZXJzaW9uIDAuMzYJU2VwdCAxMSwgMjAwMgorICogIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYwlWZXJzaW9uIDAuNTAJTWFyIDMsIDIwMDcKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDIJCUFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcJCU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcJCQlCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CiAgKgogICogIFByb21pc2UgVWx0cmEzMyBjYXJkcyB3aXRoIEJJT1MgdjEuMjAgdGhyb3VnaCAxLjI4IHdpbGwgbmVlZCB0aGlzCiAgKiAgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgY2FyZCBpbnN0YWxsZWQuCkBAIC00Niw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jZGVmaW5lIFBEQzIwMl9ERUJVR19DQUJMRQkJMAogI2RlZmluZSBQREMyMDJYWF9ERUJVR19EUklWRV9JTkZPCTAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnBkY19xdWlya19kcml2ZXNbXSA9IHsKQEAgLTYxLDEyMiArNjEsMzQgQEAKIAlOVUxMCiB9OwogCi0vKiBBIFJlZ2lzdGVyICovCi0jZGVmaW5lCVNZTkNfRVJSRFlfRU4JMHhDMAotCi0jZGVmaW5lCVNZTkNfSU4JCTB4ODAJLyogY29udHJvbCBiaXQsIGRpZmZlcmVudCBmb3IgbWFzdGVyIHZzLiBzbGF2ZSBkcml2ZXMgKi8KLSNkZWZpbmUJRVJSRFlfRU4JMHg0MAkvKiBjb250cm9sIGJpdCwgZGlmZmVyZW50IGZvciBtYXN0ZXIgdnMuIHNsYXZlIGRyaXZlcyAqLwotI2RlZmluZQlJT1JEWV9FTgkweDIwCS8qIFBJTzogSU9SRUFEWSAqLwotI2RlZmluZQlQUkVGRVRDSF9FTgkweDEwCS8qIFBJTzogUFJFRkVUQ0ggKi8KLQotI2RlZmluZQlQQTMJCTB4MDgJLyogUElPIkEiIHRpbWluZyAqLwotI2RlZmluZQlQQTIJCTB4MDQJLyogUElPIkEiIHRpbWluZyAqLwotI2RlZmluZQlQQTEJCTB4MDIJLyogUElPIkEiIHRpbWluZyAqLwotI2RlZmluZQlQQTAJCTB4MDEJLyogUElPIkEiIHRpbWluZyAqLwotCi0vKiBCIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUJTUIyCQkweDgwCS8qIERNQSJCIiB0aW1pbmcgKi8KLSNkZWZpbmUJTUIxCQkweDQwCS8qIERNQSJCIiB0aW1pbmcgKi8KLSNkZWZpbmUJTUIwCQkweDIwCS8qIERNQSJCIiB0aW1pbmcgKi8KLQotI2RlZmluZQlQQjQJCTB4MTAJLyogUElPX0ZPUkNFIDE6MCAqLwotCi0jZGVmaW5lCVBCMwkJMHgwOAkvKiBQSU8iQiIgdGltaW5nICovCS8qIFBJTyBmbG93IENvbnRyb2wgbW9kZSAqLwotI2RlZmluZQlQQjIJCTB4MDQJLyogUElPIkIiIHRpbWluZyAqLwkvKiBQSU8gNCAqLwotI2RlZmluZQlQQjEJCTB4MDIJLyogUElPIkIiIHRpbWluZyAqLwkvKiBQSU8gMyBoYWxmICovCi0jZGVmaW5lCVBCMAkJMHgwMQkvKiBQSU8iQiIgdGltaW5nICovCS8qIFBJTyAzIG90aGVyIGhhbGYgKi8KLQotLyogQyBSZWdpc3RlciAqLwotI2RlZmluZQlJT1JEWXBfTk9fU1BFRUQJMHg0RgotI2RlZmluZQlTUEVFRF9ESVMJMHgwRgotCi0jZGVmaW5lCURNQVJRcAkJMHg4MAotI2RlZmluZQlJT1JEWXAJCTB4NDAKLSNkZWZpbmUJRE1BUl9FTgkJMHgyMAotI2RlZmluZQlETUFXX0VOCQkweDEwCi0KLSNkZWZpbmUJTUMzCQkweDA4CS8qIERNQSJDIiB0aW1pbmcgKi8KLSNkZWZpbmUJTUMyCQkweDA0CS8qIERNQSJDIiB0aW1pbmcgKi8KLSNkZWZpbmUJTUMxCQkweDAyCS8qIERNQSJDIiB0aW1pbmcgKi8KLSNkZWZpbmUJTUMwCQkweDAxCS8qIERNQSJDIiB0aW1pbmcgKi8KLQotc3RhdGljIHU4IHBkYzIwMnh4X3JhdGVtYXNrIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JdTggbW9kZTsKLQotCXN3aXRjaChIV0lGKGRyaXZlKS0+cGNpX2Rldi0+ZGV2aWNlKSB7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjY3OgotCQljYXNlIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI2NToKLQkJCW1vZGUgPSAzOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjYzOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI2MjoKLQkJCW1vZGUgPSAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjQ2OgotCQkJcmV0dXJuIDE7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKCFlaWdodHlfbmludHlfdGhyZWUoZHJpdmUpKQotCQltb2RlID0gbWluKG1vZGUsICh1OCkxKTsKLQlyZXR1cm4gbW9kZTsKLX0KK3N0YXRpYyB2b2lkIHBkY19vbGRfZGlzYWJsZV82Nk1Iel9jbG9jayhpZGVfaHdpZl90ICopOwogCiBzdGF0aWMgaW50IHBkYzIwMnh4X3R1bmVfY2hpcHNldCAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCB4ZmVyc3BlZWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSBod2lmLT5wY2lfZGV2OwogCXU4IGRyaXZlX3BjaQkJPSAweDYwICsgKGRyaXZlLT5kbiA8PCAyKTsKLQl1OCBzcGVlZAk9IGlkZV9yYXRlX2ZpbHRlcihwZGMyMDJ4eF9yYXRlbWFzayhkcml2ZSksIHhmZXJzcGVlZCk7CisJdTggc3BlZWQJCT0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCB4ZmVyc3BlZWQpOwogCi0JdTMyCQkJZHJpdmVfY29uZjsKLQl1OAkJCUFQLCBCUCwgQ1AsIERQOworCXU4CQkJQVAgPSAwLCBCUCA9IDAsIENQID0gMDsKIAl1OAkJCVRBID0gMCwgVEIgPSAwLCBUQyA9IDA7CiAKLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrICYmCi0JCWRyaXZlLT5tZWRpYSAhPSBpZGVfY2Ryb20gJiYgc3BlZWQgPCBYRkVSX1NXX0RNQV8wKQotCQlyZXR1cm4gLTE7Ci0KKyNpZiBQREMyMDJYWF9ERUJVR19EUklWRV9JTkZPCisJdTMyCQkJZHJpdmVfY29uZiA9IDA7CiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgZHJpdmVfcGNpLCAmZHJpdmVfY29uZik7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAoZHJpdmVfcGNpKSwgJkFQKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpfDB4MDEsICZCUCk7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAoZHJpdmVfcGNpKXwweDAyLCAmQ1ApOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMywgJkRQKTsKKyNlbmRpZgogCi0JaWYgKHNwZWVkIDwgWEZFUl9TV19ETUFfMCkgewotCQlpZiAoKEFQICYgMHgwRikgfHwgKEJQICYgMHgwNykpIHsKLQkJCS8qIGNsZWFyIFBJTyBtb2RlcyBvZiBsb3dlciA4NDIxIGJpdHMgb2YgQSBSZWdpc3RlciAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSksIEFQICZ+MHgwRik7Ci0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpLCAmQVApOworCS8qCisJICogVE9ETzogZG8gdGhpcyBvbmNlIHBlciBjaGFubmVsCisJICovCisJaWYgKGRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI0NikKKwkJcGRjX29sZF9kaXNhYmxlXzY2TUh6X2Nsb2NrKGh3aWYpOwogCi0JCQkvKiBjbGVhciBQSU8gbW9kZXMgb2YgbG93ZXIgNDIxIGJpdHMgb2YgQiBSZWdpc3RlciAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMSwgQlAgJn4weDA3KTsKLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMSwgJkJQKTsKLQotCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAoZHJpdmVfcGNpKSwgJkFQKTsKLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMSwgJkJQKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICgoQlAgJiAweEYwKSAmJiAoQ1AgJiAweDBGKSkgewotCQkJLyogY2xlYXIgRE1BIG1vZGVzIG9mIHVwcGVyIDg0MiBiaXRzIG9mIEIgUmVnaXN0ZXIgKi8KLQkJCS8qIGNsZWFyIFBJTyBmb3JjZWQgbW9kZSB1cHBlciAxIGJpdCBvZiBCIFJlZ2lzdGVyICovCi0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAoZHJpdmVfcGNpKXwweDAxLCBCUCAmfjB4RjApOwotCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAoZHJpdmVfcGNpKXwweDAxLCAmQlApOwotCi0JCQkvKiBjbGVhciBETUEgbW9kZXMgb2YgbG93ZXIgODQyMSBiaXRzIG9mIEMgUmVnaXN0ZXIgKi8KLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpfDB4MDIsIENQICZ+MHgwRik7Ci0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpfDB4MDIsICZDUCk7Ci0JCX0KLQl9Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpLCAmQVApOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMSwgJkJQKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpfDB4MDIsICZDUCk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBkcml2ZV9wY2ksICAgICAmQVApOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVfcGNpICsgMSwgJkJQKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGRyaXZlX3BjaSArIDIsICZDUCk7CiAKIAlzd2l0Y2goc3BlZWQpIHsKLQkJY2FzZSBYRkVSX1VETUFfNjoJc3BlZWQgPSBYRkVSX1VETUFfNTsKIAkJY2FzZSBYRkVSX1VETUFfNToKIAkJY2FzZSBYRkVSX1VETUFfNDoJVEIgPSAweDIwOyBUQyA9IDB4MDE7IGJyZWFrOwogCQljYXNlIFhGRVJfVURNQV8yOglUQiA9IDB4MjA7IFRDID0gMHgwMTsgYnJlYWs7CkBAIC0xODUsNyArOTcsNyBAQAogCQljYXNlIFhGRVJfVURNQV8wOgogCQljYXNlIFhGRVJfTVdfRE1BXzI6CVRCID0gMHg2MDsgVEMgPSAweDAzOyBicmVhazsKIAkJY2FzZSBYRkVSX01XX0RNQV8xOglUQiA9IDB4NjA7IFRDID0gMHgwNDsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9NV19ETUFfMDoKKwkJY2FzZSBYRkVSX01XX0RNQV8wOglUQiA9IDB4RTA7IFRDID0gMHgwRjsgYnJlYWs7CiAJCWNhc2UgWEZFUl9TV19ETUFfMjoJVEIgPSAweDYwOyBUQyA9IDB4MDU7IGJyZWFrOwogCQljYXNlIFhGRVJfU1dfRE1BXzE6CVRCID0gMHg4MDsgVEMgPSAweDA2OyBicmVhazsKIAkJY2FzZSBYRkVSX1NXX0RNQV8wOglUQiA9IDB4QzA7IFRDID0gMHgwQjsgYnJlYWs7CkBAIC0xOTgsMjUgKzExMCwzOSBAQAogCX0KIAogCWlmIChzcGVlZCA8IFhGRVJfU1dfRE1BXzApIHsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSksIEFQfFRBKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMSwgQlB8VEIpOworCQkvKgorCQkgKiBwcmVzZXJ2ZSBTWU5DX0lOVCAvIEVSRERZX0VOIGJpdHMgd2hpbGUgY2xlYXJpbmcKKwkJICogUHJlZmV0Y2hfRU4gLyBJT1JEWV9FTiAvIFBBWzM6MF0gYml0cyBvZiByZWdpc3RlciBBCisJCSAqLworCQlBUCAmPSB+MHgzZjsKKwkJaWYgKGRyaXZlLT5pZC0+Y2FwYWJpbGl0eSAmIDQpCisJCQlBUCB8PSAweDIwOwkvKiBzZXQgSU9SRFlfRU4gYml0ICovCisJCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCisJCQlBUCB8PSAweDEwOwkvKiBzZXQgUHJlZmV0Y2hfRU4gYml0ICovCisJCS8qIGNsZWFyIFBCWzQ6MF0gYml0cyBvZiByZWdpc3RlciBCICovCisJCUJQICY9IH4weDFmOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBkcml2ZV9wY2ksICAgICBBUCB8IFRBKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVfcGNpICsgMSwgQlAgfCBUQik7CiAJfSBlbHNlIHsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSl8MHgwMSwgQlB8VEIpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAoZHJpdmVfcGNpKXwweDAyLCBDUHxUQyk7CisJCS8qIGNsZWFyIE1CWzI6MF0gYml0cyBvZiByZWdpc3RlciBCICovCisJCUJQICY9IH4weGUwOworCQkvKiBjbGVhciBNQ1szOjBdIGJpdHMgb2YgcmVnaXN0ZXIgQyAqLworCQlDUCAmPSB+MHgwZjsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVfcGNpICsgMSwgQlAgfCBUQik7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIGRyaXZlX3BjaSArIDIsIENQIHwgVEMpOwogCX0KIAogI2lmIFBEQzIwMlhYX0RFQlVHX0RSSVZFX0lORk8KIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVzIGRyaXZlJWQgMHglMDh4ICIsCiAJCWRyaXZlLT5uYW1lLCBpZGVfeGZlcl92ZXJib3NlKHNwZWVkKSwKIAkJZHJpdmUtPmRuLCBkcml2ZV9jb25mKTsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgZHJpdmVfcGNpLCAmZHJpdmVfY29uZik7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgZHJpdmVfcGNpLCAmZHJpdmVfY29uZik7CiAJcHJpbnRrKCIweCUwOHhcbiIsIGRyaXZlX2NvbmYpOwotI2VuZGlmIC8qIFBEQzIwMlhYX0RFQlVHX0RSSVZFX0lORk8gKi8KKyNlbmRpZgogCi0JcmV0dXJuIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBzcGVlZCkpOworCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBzcGVlZCk7CiB9CiAKLQogc3RhdGljIHZvaWQgcGRjMjAyeHhfdHVuZV9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHBpbykKIHsKIAlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIHBpbywgNCwgTlVMTCk7CkBAIC0yMzQsNiArMTYwLDggQEAKICAqIFNldCB0aGUgY29udHJvbCByZWdpc3RlciB0byB1c2UgdGhlIDY2TUh6IHN5c3RlbQogICogY2xvY2sgZm9yIFVETUEgMy80LzUgbW9kZSBvcGVyYXRpb24gd2hlbiBuZWNlc3NhcnkuCiAgKgorICogRklYTUU6IHRoaXMgcmVnaXN0ZXIgaXMgc2hhcmVkIGJ5IGJvdGggY2hhbm5lbHMsIHNvbWUgbG9ja2luZyBpcyBuZWVkZWQKKyAqCiAgKiBJdCBtYXkgYWxzbyBiZSBwb3NzaWJsZSB0byBsZWF2ZSB0aGUgNjZNSHogY2xvY2sgb24KICAqIGFuZCByZWFkanVzdCB0aGUgdGltaW5nIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTI1Myw3OCArMTgxLDExIEBACiAJb3V0YihjbG9jayAmIH4oaHdpZi0+Y2hhbm5lbCA/IDB4MDggOiAweDAyKSwgY2xvY2tfcmVnKTsKIH0KIAotc3RhdGljIGludCBjb25maWdfY2hpcHNldF9mb3JfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0Jc3RydWN0IGhkX2RyaXZlaWQgKmlkCT0gZHJpdmUtPmlkOwotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gaHdpZi0+cGNpX2RldjsKLQl1MzIgZHJpdmVfY29uZgkJPSAwOwotCXU4IGRyaXZlX3BjaQkJPSAweDYwICsgKGRyaXZlLT5kbiA8PCAyKTsKLQl1OCB0ZXN0MSA9IDAsIHRlc3QyID0gMCwgc3BlZWQgPSAtMTsKLQl1OCBBUCA9IDAsIGNhYmxlID0gMDsKLQotCXU4IHVsdHJhXzY2CQk9ICgoaWQtPmRtYV91bHRyYSAmIDB4MDAxMCkgfHwKLQkJCQkgICAoaWQtPmRtYV91bHRyYSAmIDB4MDAwOCkpID8gMSA6IDA7Ci0KLQlpZiAoZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjQ2KQotCQljYWJsZSA9IHBkYzIwMnh4X29sZF9jYWJsZV9kZXRlY3QoaHdpZik7Ci0JZWxzZQotCQl1bHRyYV82NiA9IDA7Ci0KLQlpZiAodWx0cmFfNjYgJiYgY2FibGUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogJXMgY2hhbm5lbCByZXF1aXJlcyBhbiA4MC1waW4gY2FibGUgZm9yIG9wZXJhdGlvbi5cbiIsIGh3aWYtPmNoYW5uZWwgPyAiU2Vjb25kYXJ5IjoiUHJpbWFyeSIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyByZWR1Y2VkIHRvIFVsdHJhMzMgbW9kZS5cbiIsIGRyaXZlLT5uYW1lKTsKLQl9Ci0KLQlpZiAoZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjQ2KQotCQlwZGNfb2xkX2Rpc2FibGVfNjZNSHpfY2xvY2soZHJpdmUtPmh3aWYpOwotCi0JZHJpdmVfcGNpID0gMHg2MCArIChkcml2ZS0+ZG4gPDwgMik7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgZHJpdmVfcGNpLCAmZHJpdmVfY29uZik7Ci0JaWYgKChkcml2ZV9jb25mICE9IDB4MDA0ZmYzMDQpICYmIChkcml2ZV9jb25mICE9IDB4MDA0ZmYzYzQpKQotCQlnb3RvIGNoaXBzZXRfaXNfc2V0OwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBkcml2ZV9wY2ksICZ0ZXN0MSk7Ci0JaWYgKCEodGVzdDEgJiBTWU5DX0VSUkRZX0VOKSkgewotCQlpZiAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxKSB7Ci0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGRyaXZlX3BjaSAtIDQsICZ0ZXN0Mik7Ci0JCQlpZiAoKHRlc3QyICYgU1lOQ19FUlJEWV9FTikgJiYKLQkJCSAgICAhKHRlc3QxICYgU1lOQ19FUlJEWV9FTikpIHsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBkcml2ZV9wY2ksCi0JCQkJCXRlc3QxfFNZTkNfRVJSRFlfRU4pOwotCQkJfQotCQl9IGVsc2UgewotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVfcGNpLAotCQkJCXRlc3QxfFNZTkNfRVJSRFlfRU4pOwotCQl9Ci0JfQotCi1jaGlwc2V0X2lzX3NldDoKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSksICZBUCk7Ci0JaWYgKGlkLT5jYXBhYmlsaXR5ICYgNCkgLyogSU9SRFlfRU4gKi8KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgKGRyaXZlX3BjaSksIEFQfElPUkRZX0VOKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpLCAmQVApOwotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCS8qIFBSRUZFVENIX0VOICovCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIChkcml2ZV9wY2kpLCBBUHxQUkVGRVRDSF9FTik7Ci0KLQlzcGVlZCA9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIHBkYzIwMnh4X3JhdGVtYXNrKGRyaXZlKSk7Ci0KLQlpZiAoIShzcGVlZCkpIHsKLQkJLyogcmVzdG9yZSBvcmlnaW5hbCBwY2ktY29uZmlnIHNwYWNlICovCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBkcml2ZV9wY2ksIGRyaXZlX2NvbmYpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkodm9pZCkgaHdpZi0+c3BlZWRwcm9jKGRyaXZlLCBzcGVlZCk7Ci0JcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKLX0KLQogc3RhdGljIGludCBwZGMyMDJ4eF9jb25maWdfZHJpdmVfeGZlcl9yYXRlIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJZHJpdmUtPmluaXRfc3BlZWQgPSAwOwogCi0JaWYgKGlkZV91c2VfZG1hKGRyaXZlKSAmJiBjb25maWdfY2hpcHNldF9mb3JfZG1hKGRyaXZlKSkKKwlpZiAoaWRlX3R1bmVfZG1hKGRyaXZlKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWRlX3VzZV9mYXN0X3Bpbyhkcml2ZSkpCkBAIC00NzgsNyArMzM5LDcgQEAKIAogCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IGh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7CiAKLQlod2lmLT51bHRyYV9tYXNrID0gMHgzZjsKKwlod2lmLT51bHRyYV9tYXNrID0gaHdpZi0+Y2RzLT51ZG1hX21hc2s7CiAJaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7CiAJaHdpZi0+c3dkbWFfbWFzayA9IDB4MDc7CiAJaHdpZi0+YXRhcGlfZG1hID0gMTsKQEAgLTUwMCwxMCArMzYxLDYgQEAKIAlpZiAoIW5vYXV0b2RtYSkKIAkJaHdpZi0+YXV0b2RtYSA9IDE7CiAJaHdpZi0+ZHJpdmVzWzBdLmF1dG9kbWEgPSBod2lmLT5kcml2ZXNbMV0uYXV0b2RtYSA9IGh3aWYtPmF1dG9kbWE7Ci0jaWYgUERDMjAyX0RFQlVHX0NBQkxFCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlcy1waW4gY2FibGVcbiIsCi0JCWh3aWYtPm5hbWUsIGh3aWYtPnVkbWFfZm91ciA/ICI4MCIgOiAiNDAiKTsKLSNlbmRpZiAvKiBQREMyMDJfREVCVUdfQ0FCTEUgKi8JCiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2RtYV9wZGMyMDJ4eChpZGVfaHdpZl90ICpod2lmLCB1bnNpZ25lZCBsb25nIGRtYWJhc2UpCkBAIC01ODcsNiArNDQ0LDcgQEAKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCiAJCS5leHRyYQkJPSAxNiwKKwkJLnVkbWFfbWFzawk9IDB4MDcsIC8qIHVkbWEwLTIgKi8KIAl9LHsJLyogMSAqLwogCQkubmFtZQkJPSAiUERDMjAyNjIiLAogCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfcGRjMjAyYXRhNCwKQEAgLTU5Nyw2ICs0NTUsNyBAQAogCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKIAkJLmV4dHJhCQk9IDQ4LAorCQkudWRtYV9tYXNrCT0gMHgxZiwgLyogdWRtYTAtNCAqLwogCX0sewkvKiAyICovCiAJCS5uYW1lCQk9ICJQREMyMDI2MyIsCiAJCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9wZGMyMDJhdGE0LApAQCAtNjA3LDYgKzQ2Niw3IEBACiAJCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCQkuZXh0cmEJCT0gNDgsCisJCS51ZG1hX21hc2sJPSAweDFmLCAvKiB1ZG1hMC00ICovCiAJfSx7CS8qIDMgKi8KIAkJLm5hbWUJCT0gIlBEQzIwMjY1IiwKIAkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3BkYzIwMjY1LApAQCAtNjE3LDYgKzQ3Nyw3IEBACiAJCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCQkuZXh0cmEJCT0gNDgsCisJCS51ZG1hX21hc2sJPSAweDNmLCAvKiB1ZG1hMC01ICovCiAJfSx7CS8qIDQgKi8KIAkJLm5hbWUJCT0gIlBEQzIwMjY3IiwKIAkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3BkYzIwMnh4LApAQCAtNjI3LDYgKzQ4OCw3IEBACiAJCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCQkuZXh0cmEJCT0gNDgsCisJCS51ZG1hX21hc2sJPSAweDNmLCAvKiB1ZG1hMC01ICovCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BpaXguYyBiL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMKaW5kZXggMDYxZDMwMC4uOGIyMTlkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3BpaXguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jCkBAIC0xMDYsNjggKzEwNiw2IEBACiBzdGF0aWMgaW50IG5vX3BpaXhfZG1hOwogCiAvKioKLSAqCXBpaXhfcmF0ZW1hc2sJCS0JY29tcHV0ZSByYXRlIG1hc2sgZm9yIFBJSVggSURFCi0gKglAZHJpdmU6IElERSBkcml2ZSB0byBjb21wdXRlIGZvcgotICoKLSAqCVJldHVybnMgdGhlIGF2YWlsYWJsZSBtb2RlcyBmb3IgdGhlIFBJSVggSURFIGNvbnRyb2xsZXIuCi0gKi8KLSAKLXN0YXRpYyB1OCBwaWl4X3JhdGVtYXNrIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldgk9IEhXSUYoZHJpdmUpLT5wY2lfZGV2OwotCXU4IG1vZGU7Ci0KLQlzd2l0Y2goZGV2LT5kZXZpY2UpIHsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMToKLQkJCW1vZGUgPSAzOwotCQkJYnJlYWs7Ci0JCS8qIFVETUEgMTAwIGNhcGFibGUgKi8KLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfODoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfOToKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTA6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzExOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFXzExOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMDoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTE6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzExOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzI6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzE5OgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18yMToKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMTg6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzY6Ci0JCQltb2RlID0gMzsKLQkJCWJyZWFrOwotCQkvKiBVRE1BIDY2IGNhcGFibGUgKi8KLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMToKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcyRkJfMToKLQkJCW1vZGUgPSAyOwotCQkJYnJlYWs7Ci0JCS8qIFVETUEgMzMgY2FwYWJsZSAqLwotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQjoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTVhfMToKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDUxTlg6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzE6Ci0JCQlyZXR1cm4gMTsKLQkJLyogTm9uIFVETUEgY2FwYWJsZSAoTVdETUEyKSAqLwotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFTQl8xOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFGQl8xOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFGQl8wOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFNWDoKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCX0KLQkKLQkvKgotCSAqCUlmIHdlIGFyZSBVRE1BNjYgY2FwYWJsZSBmYWxsIGJhY2sgdG8gVURNQTMzIAotCSAqCWlmIHRoZSBkcml2ZSBjYW5ub3Qgc2VlIGFuIDgwcGluIGNhYmxlLgotCSAqLwotCWlmICghZWlnaHR5X25pbnR5X3RocmVlKGRyaXZlKSkKLQkJbW9kZSA9IG1pbl90KHU4LCBtb2RlLCAxKTsKLQlyZXR1cm4gbW9kZTsKLX0KLQotLyoqCiAgKglwaWl4X2RtYV8yX3BpbwkJLQlyZXR1cm4gdGhlIFBJTyBtb2RlIG1hdGNoaW5nIERNQQogICoJQHhmZXJfcmF0ZTogdHJhbnNmZXIgc3BlZWQKICAqCkBAIC0zMDEsNyArMjM5LDcgQEAKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IGh3aWYtPnBjaV9kZXY7CiAJdTggbWFzbGF2ZQkJPSBod2lmLT5jaGFubmVsID8gMHg0MiA6IDB4NDA7Ci0JdTggc3BlZWQJCT0gaWRlX3JhdGVfZmlsdGVyKHBpaXhfcmF0ZW1hc2soZHJpdmUpLCB4ZmVyc3BlZWQpOworCXU4IHNwZWVkCQk9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgeGZlcnNwZWVkKTsKIAlpbnQgYV9zcGVlZAkJPSAzIDw8IChkcml2ZS0+ZG4gKiA0KTsKIAlpbnQgdV9mbGFnCQk9IDEgPDwgZHJpdmUtPmRuOwogCWludCB2X2ZsYWcJCT0gMHgwMSA8PCBkcml2ZS0+ZG47CkBAIC0zNjYsMzAgKzMwNCw2IEBACiB9CiAKIC8qKgotICoJcGlpeF9jb25maWdfZHJpdmVfZm9yX2RtYQktCWNvbmZpZ3VyZSBkcml2ZSBmb3IgRE1BCi0gKglAZHJpdmU6IElERSBkcml2ZSB0byBjb25maWd1cmUKLSAqCi0gKglTZXQgdXAgYSBQSUlYIGludGVyZmFjZSBjaGFubmVsIGZvciB0aGUgYmVzdCBhdmFpbGFibGUgc3BlZWQuCi0gKglXZSBwcmVmZXIgVURNQSBpZiBpdCBpcyBhdmFpbGFibGUgYW5kIHRoZW4gTVdETUEuICBJZiBETUEgaXMKLSAqCW5vdCBhdmFpbGFibGUgd2Ugc3dpdGNoIHRvIFBJTyBhbmQgcmV0dXJuIDAuCi0gKi8KLSAKLXN0YXRpYyBpbnQgcGlpeF9jb25maWdfZHJpdmVfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXU4IHNwZWVkID0gaWRlX2RtYV9zcGVlZChkcml2ZSwgcGlpeF9yYXRlbWFzayhkcml2ZSkpOwotCi0JLyoKLQkgKiBJZiBubyBETUEgc3BlZWQgd2FzIGF2YWlsYWJsZSBvciB0aGUgY2hpcHNldCBoYXMgRE1BIGJ1Z3MKLQkgKiB0aGVuIGRpc2FibGUgRE1BIGFuZCB1c2UgUElPCi0JICovCi0JaWYgKCFzcGVlZCkKLQkJcmV0dXJuIDA7Ci0KLQkodm9pZCkgcGlpeF90dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKTsKLQlyZXR1cm4gaWRlX2RtYV9lbmFibGUoZHJpdmUpOwotfQotCi0vKioKICAqCXBpaXhfY29uZmlnX2RyaXZlX3hmZXJfcmF0ZQktCXNldCB1cCBhbiBJREUgZGV2aWNlCiAgKglAZHJpdmU6IElERSBkcml2ZSB0byBjb25maWd1cmUKICAqCkBAIC00MDEsNyArMzE1LDcgQEAKIHsKIAlkcml2ZS0+aW5pdF9zcGVlZCA9IDA7CiAKLQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIHBpaXhfY29uZmlnX2RyaXZlX2Zvcl9kbWEoZHJpdmUpKQorCWlmIChpZGVfdHVuZV9kbWEoZHJpdmUpKQogCQlyZXR1cm4gMDsKIAogCWlmIChpZGVfdXNlX2Zhc3RfcGlvKGRyaXZlKSkKQEAgLTUyNCwyNiArNDM4LDE0IEBACiAJCWh3aWYtPmlkZV9kbWFfY2xlYXJfaXJxID0gJnBpaXhfZG1hX2NsZWFyX2lycTsKIAogCWh3aWYtPmF0YXBpX2RtYSA9IDE7Ci0JaHdpZi0+dWx0cmFfbWFzayA9IDB4M2Y7CisKKwlod2lmLT51bHRyYV9tYXNrID0gaHdpZi0+Y2RzLT51ZG1hX21hc2s7CiAJaHdpZi0+bXdkbWFfbWFzayA9IDB4MDY7CiAJaHdpZi0+c3dkbWFfbWFzayA9IDB4MDQ7CiAKLQlzd2l0Y2goaHdpZi0+cGNpX2Rldi0+ZGV2aWNlKSB7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUZCXzA6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUZCXzE6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MVNCXzE6Ci0JCQlod2lmLT51bHRyYV9tYXNrID0gMHg4MDsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQjoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTVhfMToKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDUxTlg6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzE6Ci0JCQlod2lmLT51bHRyYV9tYXNrID0gMHgwNzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWYgKCFod2lmLT51ZG1hX2ZvdXIpCi0JCQkJaHdpZi0+dWRtYV9mb3VyID0gcGlpeF9jYWJsZV9kZXRlY3QoaHdpZik7Ci0JCQlicmVhazsKKwlpZiAoaHdpZi0+dWx0cmFfbWFzayAmIDB4NzgpIHsKKwkJaWYgKCFod2lmLT51ZG1hX2ZvdXIpCisJCQlod2lmLT51ZG1hX2ZvdXIgPSBwaWl4X2NhYmxlX2RldGVjdChod2lmKTsKIAl9CiAKIAlpZiAobm9fcGlpeF9kbWEpCkBAIC01NTcsNyArNDU5LDcgQEAKIAlod2lmLT5kcml2ZXNbMF0uYXV0b2RtYSA9IGh3aWYtPmF1dG9kbWE7CiB9CiAKLSNkZWZpbmUgREVDTEFSRV9QSUlYX0RFVihuYW1lX3N0cikgXAorI2RlZmluZSBERUNMQVJFX1BJSVhfREVWKG5hbWVfc3RyLCB1ZG1hKSBcCiAJewkJCQkJCVwKIAkJLm5hbWUJCT0gbmFtZV9zdHIsCQlcCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfcGlpeCwJXApAQCAtNTY2LDExICs0NjgsMTIgQEAKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAkJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg0MSwweDgwLDB4ODB9LCB7MHg0MywweDgwLDB4ODB9fSwgXAogCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwJCVwKKwkJLnVkbWFfbWFzawk9IHVkbWEsCQkJXAogCX0KIAogc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgcGlpeF9wY2lfaW5mb1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLyogIDAgKi8gREVDTEFSRV9QSUlYX0RFVigiUElJWGEiKSwKLQkvKiAgMSAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYYiIpLAorCS8qICAwICovIERFQ0xBUkVfUElJWF9ERVYoIlBJSVhhIiwgMHgwMCksCS8qIG5vIHVkbWEgKi8KKwkvKiAgMSAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYYiIsIDB4MDApLAkvKiBubyB1ZG1hICovCiAKIAkvKiAgMiAqLwogCXsJLyoKQEAgLTU4NywyOCArNDkwLDI4IEBACiAJCS5mbGFncwkJPSBJREVQQ0lfRkxBR19JU0FfUE9SVFMKIAl9LAogCi0JLyogIDMgKi8gREVDTEFSRV9QSUlYX0RFVigiUElJWDMiKSwKLQkvKiAgNCAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYNCIpLAotCS8qICA1ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDAiKSwKLQkvKiAgNiAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYNCIpLAotCS8qICA3ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSCIpLAotCS8qICA4ICovIERFQ0xBUkVfUElJWF9ERVYoIlBJSVg0IiksCi0JLyogIDkgKi8gREVDTEFSRV9QSUlYX0RFVigiUElJWDQiKSwKLQkvKiAxMCAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0gyIiksCi0JLyogMTEgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNIMk0iKSwKLQkvKiAxMiAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0gzTSIpLAotCS8qIDEzICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDMiKSwKLQkvKiAxNCAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0g0IiksCi0JLyogMTUgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNINSIpLAotCS8qIDE2ICovIERFQ0xBUkVfUElJWF9ERVYoIkMtSUNIIiksCi0JLyogMTcgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNINCIpLAotCS8qIDE4ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDUtU0FUQSIpLAotCS8qIDE5ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDUiKSwKLQkvKiAyMCAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0g2IiksCi0JLyogMjEgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNINyIpLAotCS8qIDIyICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDQiKSwKLQkvKiAyMyAqLyBERUNMQVJFX1BJSVhfREVWKCJFU0IyIiksCi0JLyogMjQgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNIOE0iKSwKKwkvKiAgMyAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYMyIsIDB4MDApLAkvKiBubyB1ZG1hICovCisJLyogIDQgKi8gREVDTEFSRV9QSUlYX0RFVigiUElJWDQiLCAweDA3KSwJLyogdWRtYTAtMiAqLworCS8qICA1ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDAiLCAgMHgwNyksCS8qIHVkbWEwLTIgKi8KKwkvKiAgNiAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYNCIsIDB4MDcpLAkvKiB1ZG1hMC0yICovCisJLyogIDcgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNIIiwgICAweDFmKSwJLyogdWRtYTAtNCAqLworCS8qICA4ICovIERFQ0xBUkVfUElJWF9ERVYoIlBJSVg0IiwgMHgxZiksCS8qIHVkbWEwLTQgKi8KKwkvKiAgOSAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYNCIsIDB4MDcpLAkvKiB1ZG1hMC0yICovCisJLyogMTAgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNIMiIsICAweDNmKSwJLyogdWRtYTAtNSAqLworCS8qIDExICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDJNIiwgMHgzZiksCS8qIHVkbWEwLTUgKi8KKwkvKiAxMiAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0gzTSIsIDB4M2YpLAkvKiB1ZG1hMC01ICovCisJLyogMTMgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNIMyIsICAweDNmKSwJLyogdWRtYTAtNSAqLworCS8qIDE0ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDQiLCAgMHgzZiksCS8qIHVkbWEwLTUgKi8KKwkvKiAxNSAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0g1IiwgIDB4M2YpLAkvKiB1ZG1hMC01ICovCisJLyogMTYgKi8gREVDTEFSRV9QSUlYX0RFVigiQy1JQ0giLCAweDNmKSwJLyogdWRtYTAtNSAqLworCS8qIDE3ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDQiLCAgMHgzZiksCS8qIHVkbWEwLTUgKi8KKwkvKiAxOCAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0g1LVNBVEEiLCAweDNmKSwJLyogdWRtYTAtNSAqLworCS8qIDE5ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDUiLCAgMHgzZiksCS8qIHVkbWEwLTUgKi8KKwkvKiAyMCAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0g2IiwgIDB4M2YpLAkvKiB1ZG1hMC01ICovCisJLyogMjEgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNINyIsICAweDNmKSwJLyogdWRtYTAtNSAqLworCS8qIDIyICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDQiLCAgMHgzZiksCS8qIHVkbWEwLTUgKi8KKwkvKiAyMyAqLyBERUNMQVJFX1BJSVhfREVWKCJFU0IyIiwgIDB4M2YpLAkvKiB1ZG1hMC01ICovCisJLyogMjQgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNIOE0iLCAweDNmKSwJLyogdWRtYTAtNSAqLwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMKaW5kZXggYjVhZTBjNS4uNTIzMzYzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NjMTIwMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zYzEyMDAuYwpAQCAtMSw3ICsxLDkgQEAKIC8qCi0gKiBsaW51eC9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMJCVZlcnNpb24gMC45MQkyOC1KYW4tMjAwMworICogbGludXgvZHJpdmVycy9pZGUvcGNpL3NjMTIwMC5jCQlWZXJzaW9uIDAuOTQJTWFyIDEwIDIwMDcKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMgkJTWFyayBMb3JkIDxtbG9yZEBwb2JveC5jb20+CisgKiBDb3B5cmlnaHQgKEMpICAgICAgMjAwNwkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICoKICAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICoKICAqIERldmVsb3BtZW50IG9mIHRoaXMgY2hpcHNldCBkcml2ZXIgd2FzIGZ1bmRlZApAQCAtOTMsNjQgKzk1LDUwIEBACiAgKi8KIC8vI2RlZmluZSBTQzEyMDBfQkFEX1BJTyh0aW1pbmdzKSAoKCh0aW1pbmdzKSZ+MHg4MDAwMDAwMCk9PTB4MDAwMDkxNzIpCiAKLXN0YXRpYyBpbnQgc2MxMjAwX2F1dG9zZWxlY3RfZG1hX21vZGUgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIHNjMTIwMF90dW5lcGlvKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcGlvKQogewotCWludAkJCXVkbWFfb2sgPSAxLCBtb2RlID0gMDsKLQlpZGVfaHdpZl90CQkqaHdpZiA9IEhXSUYoZHJpdmUpOwotCWludAkJCXVuaXQgPSBkcml2ZS0+c2VsZWN0LmIudW5pdDsKLQlpZGVfZHJpdmVfdAkJKm1hdGUgPSAmaHdpZi0+ZHJpdmVzW3VuaXReMV07Ci0Jc3RydWN0IGhkX2RyaXZlaWQJKmlkID0gZHJpdmUtPmlkOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGh3aWYtPnBjaV9kZXY7CisJdW5zaWduZWQgaW50IGJhc2VyZWcgPSBod2lmLT5jaGFubmVsID8gMHg1MCA6IDB4NDAsIGZvcm1hdCA9IDA7CiAKLQkvKgotCSAqIFRoZSBTQzEyMDAgc3BlY2lmaWVzIHRoYXQgdHdvIGRyaXZlcyBzaGFyaW5nIGEgY2FibGUgY2Fubm90Ci0JICogbWl4IFVETUEvTURNQS4gIEl0IGhhcyB0byBiZSBvbmUgb3IgdGhlIG90aGVyLCBmb3IgdGhlIHBhaXIsCi0JICogdGhvdWdoIGRpZmZlcmVudCB0aW1pbmdzIGNhbiBzdGlsbCBiZSBjaG9zZW4gZm9yIGVhY2ggZHJpdmUuCi0JICogV2UgY291bGQgc2V0IHRoZSBhcHByb3ByaWF0ZSB0aW1pbmcgYml0cyBvbiB0aGUgZmx5LAotCSAqIGJ1dCB0aGF0IG1pZ2h0IGJlIGEgYml0IGNvbmZ1c2luZy4gIFNvLCBmb3Igbm93IHdlIHN0YXRpY2FsbHkKLQkgKiBoYW5kbGUgdGhpcyByZXF1aXJlbWVudCBieSBsb29raW5nIGF0IG91ciBtYXRlIGRyaXZlIHRvIHNlZQotCSAqIHdoYXQgaXQgaXMgY2FwYWJsZSBvZiwgYmVmb3JlIGNob29zaW5nIGEgbW9kZSBmb3Igb3VyIG93biBkcml2ZS4KLQkgKi8KLQlpZiAobWF0ZS0+cHJlc2VudCkgewotCQlzdHJ1Y3QgaGRfZHJpdmVpZCAqbWF0ZWlkID0gbWF0ZS0+aWQ7Ci0JCWlmIChtYXRlaWQgJiYgKG1hdGVpZC0+Y2FwYWJpbGl0eSAmIDEpICYmICFfX2lkZV9kbWFfYmFkX2RyaXZlKG1hdGUpKSB7Ci0JCQlpZiAoKG1hdGVpZC0+ZmllbGRfdmFsaWQgJiA0KSAmJiAobWF0ZWlkLT5kbWFfdWx0cmEgJiA3KSkKLQkJCQl1ZG1hX29rID0gMTsKLQkJCWVsc2UgaWYgKChtYXRlaWQtPmZpZWxkX3ZhbGlkICYgMikgJiYgKG1hdGVpZC0+ZG1hX213b3JkICYgNykpCi0JCQkJdWRtYV9vayA9IDA7Ci0JCQllbHNlCi0JCQkJdWRtYV9vayA9IDE7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBOb3cgc2VlIHdoYXQgdGhlIGN1cnJlbnQgZHJpdmUgaXMgY2FwYWJsZSBvZiwKLQkgKiBzZWxlY3RpbmcgVURNQSBvbmx5IGlmIHRoZSBtYXRlIHNhaWQgaXQgd2FzIG9rLgotCSAqLwotCWlmIChpZCAmJiAoaWQtPmNhcGFiaWxpdHkgJiAxKSAmJiBod2lmLT5hdXRvZG1hICYmICFfX2lkZV9kbWFfYmFkX2RyaXZlKGRyaXZlKSkgewotCQlpZiAodWRtYV9vayAmJiAoaWQtPmZpZWxkX3ZhbGlkICYgNCkgJiYgKGlkLT5kbWFfdWx0cmEgJiA3KSkgewotCQkJaWYgICAgICAoaWQtPmRtYV91bHRyYSAmIDQpCi0JCQkJbW9kZSA9IFhGRVJfVURNQV8yOwotCQkJZWxzZSBpZiAoaWQtPmRtYV91bHRyYSAmIDIpCi0JCQkJbW9kZSA9IFhGRVJfVURNQV8xOwotCQkJZWxzZSBpZiAoaWQtPmRtYV91bHRyYSAmIDEpCi0JCQkJbW9kZSA9IFhGRVJfVURNQV8wOwotCQl9Ci0JCWlmICghbW9kZSAmJiAoaWQtPmZpZWxkX3ZhbGlkICYgMikgJiYgKGlkLT5kbWFfbXdvcmQgJiA3KSkgewotCQkJaWYgICAgICAoaWQtPmRtYV9td29yZCAmIDQpCi0JCQkJbW9kZSA9IFhGRVJfTVdfRE1BXzI7Ci0JCQllbHNlIGlmIChpZC0+ZG1hX213b3JkICYgMikKLQkJCQltb2RlID0gWEZFUl9NV19ETUFfMTsKLQkJCWVsc2UgaWYgKGlkLT5kbWFfbXdvcmQgJiAxKQotCQkJCW1vZGUgPSBYRkVSX01XX0RNQV8wOwotCQl9Ci0JfQotCXJldHVybiBtb2RlOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBiYXNlcmVnICsgNCwgJmZvcm1hdCk7CisJZm9ybWF0ID0gKGZvcm1hdCA+PiAzMSkgJiAxOworCWlmIChmb3JtYXQpCisJCWZvcm1hdCArPSBzYzEyMDBfZ2V0X3BjaV9jbG9jaygpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYmFzZXJlZyArICgoZHJpdmUtPmRuICYgMSkgPDwgMyksCisJCQkgICAgICAgc2MxMjAwX3Bpb190aW1pbmdzW2Zvcm1hdF1bcGlvXSk7CiB9CiAKIC8qCi0gKiBzYzEyMDBfY29uZmlnX2RtYTIoKSBoYW5kbGVzIHNlbGVjdGlvbi9zZXR0aW5nIG9mIERNQS9VRE1BIG1vZGVzCi0gKiBmb3IgYm90aCB0aGUgY2hpcHNldCBhbmQgZHJpdmUuCisgKglUaGUgU0MxMjAwIHNwZWNpZmllcyB0aGF0IHR3byBkcml2ZXMgc2hhcmluZyBhIGNhYmxlIGNhbm5vdCBtaXgKKyAqCVVETUEvTURNQS4gIEl0IGhhcyB0byBiZSBvbmUgb3IgdGhlIG90aGVyLCBmb3IgdGhlIHBhaXIsIHRob3VnaAorICoJZGlmZmVyZW50IHRpbWluZ3MgY2FuIHN0aWxsIGJlIGNob3NlbiBmb3IgZWFjaCBkcml2ZS4gIFdlIGNvdWxkCisgKglzZXQgdGhlIGFwcHJvcHJpYXRlIHRpbWluZyBiaXRzIG9uIHRoZSBmbHksIGJ1dCB0aGF0IG1pZ2h0IGJlCisgKglhIGJpdCBjb25mdXNpbmcuICBTbywgZm9yIG5vdyB3ZSBzdGF0aWNhbGx5IGhhbmRsZSB0aGlzIHJlcXVpcmVtZW50CisgKglieSBsb29raW5nIGF0IG91ciBtYXRlIGRyaXZlIHRvIHNlZSB3aGF0IGl0IGlzIGNhcGFibGUgb2YsIGJlZm9yZQorICoJY2hvb3NpbmcgYSBtb2RlIGZvciBvdXIgb3duIGRyaXZlLgogICovCi1zdGF0aWMgaW50IHNjMTIwMF9jb25maWdfZG1hMiAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbW9kZSkKK3N0YXRpYyB1OCBzYzEyMDBfdWRtYV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlpZGVfZHJpdmVfdCAqbWF0ZSA9ICZod2lmLT5kcml2ZXNbKGRyaXZlLT5kbiAmIDEpIF4gMV07CisJc3RydWN0IGhkX2RyaXZlaWQgKm1hdGVpZCA9IG1hdGUtPmlkOworCXU4IG1hc2sgPSBod2lmLT51bHRyYV9tYXNrOworCisJaWYgKG1hdGUtPnByZXNlbnQgPT0gMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoKG1hdGVpZC0+Y2FwYWJpbGl0eSAmIDEpICYmIF9faWRlX2RtYV9iYWRfZHJpdmUobWF0ZSkgPT0gMCkgeworCQlpZiAoKG1hdGVpZC0+ZmllbGRfdmFsaWQgJiA0KSAmJiAobWF0ZWlkLT5kbWFfdWx0cmEgJiA3KSkKKwkJCWdvdG8gb3V0OworCQlpZiAoKG1hdGVpZC0+ZmllbGRfdmFsaWQgJiAyKSAmJiAobWF0ZWlkLT5kbWFfbXdvcmQgJiA3KSkKKwkJCW1hc2sgPSAwOworCX0KK291dDoKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGludCBzYzEyMDBfdHVuZV9jaGlwc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgdTggbW9kZSkKIHsKIAlpZGVfaHdpZl90CQkqaHdpZiA9IEhXSUYoZHJpdmUpOwogCWludAkJCXVuaXQgPSBkcml2ZS0+c2VsZWN0LmIudW5pdDsKQEAgLTE1OCwyMCArMTQ2LDI2IEBACiAJdW5zaWduZWQgc2hvcnQJCXBjaV9jbG9jazsKIAl1bnNpZ25lZCBpbnQJCWJhc2VyZWcgPSBod2lmLT5jaGFubmVsID8gMHg1MCA6IDB4NDA7CiAKLQkvKgotCSAqIERlZmF1bHQgdG8gRE1BLW9mZiBpbiBjYXNlIHdlIHJ1biBpbnRvIHRyb3VibGUgaGVyZS4KLQkgKi8KLQlod2lmLT5kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwkvKiB0dXJuIG9mZiBETUEgd2hpbGUgd2UgZmlkZGxlICovCi0Jb3V0YihpbmIoaHdpZi0+ZG1hX2Jhc2UrMikmfih1bml0PzB4NDA6MHgyMCksIGh3aWYtPmRtYV9iYXNlKzIpOyAvKiBjbGVhciBETUFfY2FwYWJsZSBiaXQgKi8KKwltb2RlID0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCBtb2RlKTsKIAogCS8qCiAJICogVGVsbCB0aGUgZHJpdmUgdG8gc3dpdGNoIHRvIHRoZSBuZXcgbW9kZTsgYWJvcnQgb24gZmFpbHVyZS4KIAkgKi8KLQlpZiAoIW1vZGUgfHwgc2MxMjAwX3NldF94ZmVyX21vZGUoZHJpdmUsIG1vZGUpKSB7CisJaWYgKHNjMTIwMF9zZXRfeGZlcl9tb2RlKGRyaXZlLCBtb2RlKSkgewogCQlwcmludGsoIlNDMTIwMDogc2V0IHhmZXIgbW9kZSBmYWlsdXJlXG4iKTsKIAkJcmV0dXJuIDE7CS8qIGZhaWx1cmUgKi8KIAl9CiAKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFhGRVJfUElPXzQ6CisJY2FzZSBYRkVSX1BJT18zOgorCWNhc2UgWEZFUl9QSU9fMjoKKwljYXNlIFhGRVJfUElPXzE6CisJY2FzZSBYRkVSX1BJT18wOgorCQlzYzEyMDBfdHVuZXBpbyhkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOworCQlyZXR1cm4gMDsKKwl9CisKIAlwY2lfY2xvY2sgPSBzYzEyMDBfZ2V0X3BjaV9jbG9jaygpOwogCiAJLyoKQEAgLTIyNCwxMSArMjE4LDkgQEAKIAkJCQljYXNlIFBDSV9DTEtfNjY6CXRpbWluZ3MgPSAweDAwMDE1MTUxOwlicmVhazsKIAkJCX0KIAkJCWJyZWFrOwotCX0KLQotCWlmICh0aW1pbmdzID09IDApIHsKLQkJcHJpbnRrKCIlczogc2MxMjAwX2NvbmZpZ19kbWE6IGh1aD8gbW9kZT0lMDJ4IGNsaz0leCBcbiIsIGRyaXZlLT5uYW1lLCBtb2RlLCBwY2lfY2xvY2spOwotCQlyZXR1cm4gMTsJLyogZmFpbHVyZSAqLworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCQlicmVhazsKIAl9CiAKIAlpZiAodW5pdCA9PSAwKSB7CQkJLyogYXJlIHdlIGNvbmZpZ3VyaW5nIGRyaXZlMD8gKi8KQEAgLTIzOSw4ICsyMzEsNiBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGh3aWYtPnBjaV9kZXYsIGJhc2VyZWcrMTIsIHRpbWluZ3MpOwogCX0KIAotCW91dGIoaW5iKGh3aWYtPmRtYV9iYXNlKzIpfCh1bml0PzB4NDA6MHgyMCksIGh3aWYtPmRtYV9iYXNlKzIpOwkvKiBzZXQgRE1BX2NhcGFibGUgYml0ICovCi0KIAlyZXR1cm4gMDsJLyogc3VjY2VzcyAqLwogfQogCkBAIC0yNTAsNyArMjQwLDEwIEBACiAgKi8KIHN0YXRpYyBpbnQgc2MxMjAwX2NvbmZpZ19kbWEgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlyZXR1cm4gc2MxMjAwX2NvbmZpZ19kbWEyKGRyaXZlLCBzYzEyMDBfYXV0b3NlbGVjdF9kbWFfbW9kZShkcml2ZSkpOworCWlmIChpZGVfdHVuZV9kbWEoZHJpdmUpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOwogfQogCiAKQEAgLTI5MCwxMCArMjgzLDExIEBACiBzdGF0aWMgdm9pZCBzYzEyMDBfdHVuZXByb2MgKGlkZV9kcml2ZV90ICpkcml2ZSwgYnl0ZSBwaW8pCS8qIG1vZGU9MjU1IG1lYW5zICJhdXRvdHVuZSIgKi8KIHsKIAlpZGVfaHdpZl90CSpod2lmID0gSFdJRihkcml2ZSk7Ci0JdW5zaWduZWQgaW50CWZvcm1hdDsKLQlzdGF0aWMgYnl0ZQltb2Rlc1s1XSA9IHtYRkVSX1BJT18wLCBYRkVSX1BJT18xLCBYRkVSX1BJT18yLCBYRkVSX1BJT18zLCBYRkVSX1BJT180fTsKIAlpbnQJCW1vZGUgPSAtMTsKIAorCS8qCisJICogYmFkIGFidXNlIG9mIC0+dHVuZXByb2MgaW50ZXJmYWNlCisJICovCiAJc3dpdGNoIChwaW8pIHsKIAkJY2FzZSAyMDA6IG1vZGUgPSBYRkVSX1VETUFfMDsJYnJlYWs7CiAJCWNhc2UgMjAxOiBtb2RlID0gWEZFUl9VRE1BXzE7CWJyZWFrOwpAQCAtMzA0LDIwICsyOTgsMTcgQEAKIAl9CiAJaWYgKG1vZGUgIT0gLTEpIHsKIAkJcHJpbnRrKCJTQzEyMDA6ICVzOiBjaGFuZ2luZyAoVSlETUEgbW9kZVxuIiwgZHJpdmUtPm5hbWUpOwotCQkodm9pZClzYzEyMDBfY29uZmlnX2RtYTIoZHJpdmUsIG1vZGUpOworCQlod2lmLT5kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOworCQlpZiAoc2MxMjAwX3R1bmVfY2hpcHNldChkcml2ZSwgbW9kZSkgPT0gMCkKKwkJCWh3aWYtPmRtYV9ob3N0X29uKGRyaXZlKTsKIAkJcmV0dXJuOwogCX0KIAogCXBpbyA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgcGlvLCA0LCBOVUxMKTsKIAlwcmludGsoIlNDMTIwMDogJXM6IHNldHRpbmcgUElPIG1vZGUlZFxuIiwgZHJpdmUtPm5hbWUsIHBpbyk7Ci0JaWYgKCFzYzEyMDBfc2V0X3hmZXJfbW9kZShkcml2ZSwgbW9kZXNbcGlvXSkpIHsKLQkJdW5zaWduZWQgaW50IGJhc2VyZWcgPSBod2lmLT5jaGFubmVsID8gMHg1MCA6IDB4NDA7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAoaHdpZi0+cGNpX2RldiwgYmFzZXJlZys0LCAmZm9ybWF0KTsKLQkJZm9ybWF0ID0gKGZvcm1hdCA+PiAzMSkgJiAxOwotCQlpZiAoZm9ybWF0KQotCQkJZm9ybWF0ICs9IHNjMTIwMF9nZXRfcGNpX2Nsb2NrKCk7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoaHdpZi0+cGNpX2RldiwgYmFzZXJlZyArIChkcml2ZS0+c2VsZWN0LmIudW5pdCA8PCAzKSwgc2MxMjAwX3Bpb190aW1pbmdzW2Zvcm1hdF1bcGlvXSk7Ci0gCX0KKworCWlmIChzYzEyMDBfc2V0X3hmZXJfbW9kZShkcml2ZSwgWEZFUl9QSU9fMCArIHBpbykgPT0gMCkKKwkJc2MxMjAwX3R1bmVwaW8oZHJpdmUsIHBpbyk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTQzOCwxMiArNDI5LDEyIEBACiAJCWZvciAoZCA9IDA7IGQgPCBNQVhfRFJJVkVTOyArK2QpIHsKIAkJCWlkZV9kcml2ZV90ICpkcml2ZSA9ICYoaHdpZi0+ZHJpdmVzW2RdKTsKIAkJCWlmIChkcml2ZS0+cHJlc2VudCAmJiAhX19pZGVfZG1hX2JhZF9kcml2ZShkcml2ZSkpIHsKLQkJCQlpbnQgd2FzX3VzaW5nX2RtYSA9IGRyaXZlLT51c2luZ19kbWE7CisJCQkJaW50IGVuYWJsZV9kbWEgPSBkcml2ZS0+dXNpbmdfZG1hOwogCQkJCWh3aWYtPmRtYV9vZmZfcXVpZXRseShkcml2ZSk7Ci0JCQkJc2MxMjAwX2NvbmZpZ19kbWEoZHJpdmUpOwotCQkJCWlmICghd2FzX3VzaW5nX2RtYSAmJiBkcml2ZS0+dXNpbmdfZG1hKSB7Ci0JCQkJCWh3aWYtPmRtYV9vZmZfcXVpZXRseShkcml2ZSk7Ci0JCQkJfQorCQkJCWlmIChzYzEyMDBfY29uZmlnX2RtYShkcml2ZSkpCisJCQkJCWVuYWJsZV9kbWEgPSAwOworCQkJCWlmIChlbmFibGVfZG1hKQorCQkJCQlod2lmLT5kbWFfaG9zdF9vbihkcml2ZSk7CiAJCQl9CiAJCX0KIAl9CkBAIC00NjEsMTEgKzQ1MiwxMyBAQAogCQlod2lmLT5zZXJpYWxpemVkID0gaHdpZi0+bWF0ZS0+c2VyaWFsaXplZCA9IDE7CiAJaHdpZi0+YXV0b2RtYSA9IDA7CiAJaWYgKGh3aWYtPmRtYV9iYXNlKSB7CisJCWh3aWYtPnVkbWFfZmlsdGVyID0gc2MxMjAwX3VkbWFfZmlsdGVyOwogCQlod2lmLT5pZGVfZG1hX2NoZWNrID0gJnNjMTIwMF9jb25maWdfZG1hOwogCQlod2lmLT5pZGVfZG1hX2VuZCAgID0gJnNjMTIwMF9pZGVfZG1hX2VuZDsKICAgICAgICAgCWlmICghbm9hdXRvZG1hKQogICAgICAgICAgICAgICAgIAlod2lmLT5hdXRvZG1hID0gMTsKIAkJaHdpZi0+dHVuZXByb2MgPSAmc2MxMjAwX3R1bmVwcm9jOworCQlod2lmLT5zcGVlZHByb2MgPSAmc2MxMjAwX3R1bmVfY2hpcHNldDsKIAl9CiAgICAgICAgIGh3aWYtPmF0YXBpX2RtYSA9IDE7CiAgICAgICAgIGh3aWYtPnVsdHJhX21hc2sgPSAweDA3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NjY19wYXRhLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYwppbmRleCBmODRiZjc5Li41NWJjMGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYwpAQCAtMTkwLDIzICsxOTAsNiBAQAogfQogCiAvKioKLSAqCXNjY19yYXRlbWFzawktCUNvbXB1dGUgYXZhaWxhYmxlIG1vZGVzCi0gKglAZHJpdmU6IElERSBkcml2ZQotICoKLSAqCUNvbXB1dGUgdGhlIGF2YWlsYWJsZSBzcGVlZHMgZm9yIHRoZSBkZXZpY2VzIG9uIHRoZSBpbnRlcmZhY2UuCi0gKglFbmZvcmNlIFVETUEzMyBhcyBhIGxpbWl0IGlmIHRoZXJlIGlzIG5vIDgwcGluIGNhYmxlIHByZXNlbnQuCi0gKi8KLQotc3RhdGljIHU4IHNjY19yYXRlbWFzayhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JdTggbW9kZSA9IDQ7Ci0KLQlpZiAoIWVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkpCi0JCW1vZGUgPSBtaW4obW9kZSwgKHU4KTEpOwotCXJldHVybiBtb2RlOwotfQotCi0vKioKICAqCXNjY190dW5lcHJvYwktCXR1bmUgYSBkcml2ZSBQSU8gbW9kZQogICoJQGRyaXZlOiBkcml2ZSB0byB0dW5lCiAgKglAbW9kZV93YW50ZWQ6IHRoZSB0YXJnZXQgb3BlcmF0aW5nIG1vZGUKQEAgLTI3Myw3ICsyNTYsNyBAQAogc3RhdGljIGludCBzY2NfdHVuZV9jaGlwc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgYnl0ZSB4ZmVyc3BlZWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCXU4IHNwZWVkID0gaWRlX3JhdGVfZmlsdGVyKHNjY19yYXRlbWFzayhkcml2ZSksIHhmZXJzcGVlZCk7CisJdTggc3BlZWQgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHhmZXJzcGVlZCk7CiAJc3RydWN0IHNjY19wb3J0cyAqcG9ydHMgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwogCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2UgPSBwb3J0cy0+Y3RsOwogCXVuc2lnbmVkIGxvbmcgY2NrY3RybF9wb3J0ID0gY3RsX2Jhc2UgKyAweGZmMDsKQEAgLTMzOSwyNiArMzIyLDYgQEAKIH0KIAogLyoqCi0gKglzY2NfY29uZmlnX2NoaXBzZXRfZm9yX2RtYQktCWNvbmZpZ3VyZSBmb3IgRE1BCi0gKglAZHJpdmU6IGRyaXZlIHRvIGNvbmZpZ3VyZQotICoKLSAqCUNhbGxlZCBieSBzY2NfY29uZmlnX2RyaXZlX2Zvcl9kbWEoKS4KLSAqLwotCi1zdGF0aWMgaW50IHNjY19jb25maWdfY2hpcHNldF9mb3JfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQl1OCBzcGVlZCA9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIHNjY19yYXRlbWFzayhkcml2ZSkpOwotCi0JaWYgKCFzcGVlZCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc2NjX3R1bmVfY2hpcHNldChkcml2ZSwgc3BlZWQpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7Ci19Ci0KLS8qKgogICoJc2NjX2NvbmZpZ3VyZV9kcml2ZV9mb3JfZG1hCS0Jc2V0IHVwIGZvciBETUEgdHJhbnNmZXJzCiAgKglAZHJpdmU6IGRyaXZlIHdlIGFyZSBnb2luZyB0byBzZXQgdXAKICAqCkBAIC0zNzEsNyArMzM0LDcgQEAKIAogc3RhdGljIGludCBzY2NfY29uZmlnX2RyaXZlX2Zvcl9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgc2NjX2NvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQorCWlmIChpZGVfdHVuZV9kbWEoZHJpdmUpKQogCQlyZXR1cm4gMDsKIAogCWlmIChpZGVfdXNlX2Zhc3RfcGlvKGRyaXZlKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jIGIvZHJpdmVycy9pZGUvcGNpL3NlcnZlcndvcmtzLmMKaW5kZXggZGJjZDM3YS4uNDdiY2Q5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NlcnZlcndvcmtzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NlcnZlcndvcmtzLmMKQEAgLTEsOSArMSwxMCBAQAogLyoKLSAqIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCQlWZXJzaW9uIDAuOAkgMjUgRWJyIDIwMDMKKyAqIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCQlWZXJzaW9uIDAuOQlNYXIgNCAyMDA3CiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgTWljaGVsIEF1YnJ5CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBBbmRyemVqIEtyenlzenRvZm93aWN6CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAgICAgIDIwMDcgQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICogUG9ydGlvbnMgY29weXJpZ2h0IChjKSAyMDAxIFN1biBNaWNyb3N5c3RlbXMKICAqCiAgKgpAQCAtNjUsMTYgKzY2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1OCBzdndrc19yYXRlbWFzayAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHU4IHN2d2tzX3VkbWFfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ICAgICA9IEhXSUYoZHJpdmUpLT5wY2lfZGV2OwotCXU4IG1vZGUgPSAwOworCXU4IG1hc2sgPSAwOwogCiAJaWYgKCFzdndrc19yZXZpc2lvbikKIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZzdndrc19yZXZpc2lvbik7CiAKIAlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IVDEwMDBJREUpCi0JCXJldHVybiAyOworCQlyZXR1cm4gMHgxZjsKIAlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19PU0I0SURFKSB7CiAJCXUzMiByZWcgPSAwOwogCQlpZiAoaXNhX2RldikKQEAgLTg2LDI1ICs4NywzMSBAQAogCQlpZihkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCiAJCQlyZXR1cm4gMDsKIAkJLyogQ2hlY2sgdGhlIE9TQjQgRE1BMzMgZW5hYmxlIGJpdCAqLwotCQlyZXR1cm4gKChyZWcgJiAweDAwMDA0MDAwKSA9PSAweDAwMDA0MDAwKSA/IDEgOiAwOworCQlyZXR1cm4gKChyZWcgJiAweDAwMDA0MDAwKSA9PSAweDAwMDA0MDAwKSA/IDB4MDcgOiAwOwogCX0gZWxzZSBpZiAoc3Z3a3NfcmV2aXNpb24gPCBTVldLU19DU0I1X1JFVklTSU9OX05FVykgewotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDB4MDc7CiAJfSBlbHNlIGlmIChzdndrc19yZXZpc2lvbiA+PSBTVldLU19DU0I1X1JFVklTSU9OX05FVykgewotCQl1OCBidHIgPSAwOworCQl1OCBidHIgPSAwLCBtb2RlOwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NUEsICZidHIpOwogCQltb2RlID0gYnRyICYgMHgzOwotCQlpZiAoIWVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkpCi0JCQltb2RlID0gbWluKG1vZGUsICh1OCkxKTsKKwogCQkvKiBJZiBzb21lb25lIGRlY2lkZXMgdG8gZG8gVURNQTEzMyBvbiBDU0I1IHRoZSBzYW1lCiAJCSAgIGlzc3VlIHdpbGwgYml0ZSBzbyBiZSBpbmNsdXNpdmUgKi8KIAkJaWYgKG1vZGUgPiAyICYmIGNoZWNrX2luX2RyaXZlX2xpc3RzKGRyaXZlLCBzdndrc19iYWRfYXRhMTAwKSkKIAkJCW1vZGUgPSAyOworCisJCXN3aXRjaChtb2RlKSB7CisJCWNhc2UgMjoJIG1hc2sgPSAweDFmOyBicmVhazsKKwkJY2FzZSAxOgkgbWFzayA9IDB4MDc7IGJyZWFrOworCQlkZWZhdWx0OiBtYXNrID0gMHgwMDsgYnJlYWs7CisJCX0KIAl9CiAJaWYgKCgoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2SURFKSB8fAogCSAgICAgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERTIpKSAmJgogCSAgICAoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKSkKLQkJbW9kZSA9IDI7Ci0JcmV0dXJuIG1vZGU7CisJCW1hc2sgPSAweDFmOworCisJcmV0dXJuIG1hc2s7CiB9CiAKIHN0YXRpYyB1OCBzdndrc19jc2JfY2hlY2sgKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0xMzAsMTkgKzEzNywxNCBAQAogCiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSBod2lmLT5wY2lfZGV2OwotCXU4IHNwZWVkOwotCXU4IHBpbwkJCT0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDUsIE5VTEwpOworCXU4IHNwZWVkCQk9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgeGZlcnNwZWVkKTsKKwl1OCBwaW8JCQk9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgMjU1LCA0LCBOVUxMKTsKIAl1OCB1bml0CQkJPSAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxKTsKIAl1OCBjc2I1CQkJPSBzdndrc19jc2JfY2hlY2soZGV2KTsKIAl1OCB1bHRyYV9lbmFibGUJCT0gMCwgdWx0cmFfdGltaW5nID0gMDsKIAl1OCBkbWFfdGltaW5nCQk9IDAsIHBpb190aW1pbmcgPSAwOwogCXUxNiBjc2I1X3BpbwkJPSAwOwogCi0JaWYgKHhmZXJzcGVlZCA9PSAyNTUpCS8qIFBJTyBhdXRvLXR1bmluZyAqLwotCQlzcGVlZCA9IFhGRVJfUElPXzAgKyBwaW87Ci0JZWxzZQotCQlzcGVlZCA9IGlkZV9yYXRlX2ZpbHRlcihzdndrc19yYXRlbWFzayhkcml2ZSksIHhmZXJzcGVlZCk7Ci0KIAkvKiBJZiB3ZSBhcmUgYWJvdXQgdG8gcHV0IGEgZGlzayBpbnRvIFVETUEgbW9kZSB3ZSBzY3Jld2VkIHVwLgogCSAgIE91ciBjb2RlIGFzc3VtZXMgd2UgbmV2ZXIgX2V2ZXJfIGRvIHRoaXMgb24gYW4gT1NCNCAqLwogCSAgIApAQCAtMTU2LDYgKzE1OCwxMiBAQAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgMHg0QSwgJmNzYjVfcGlvKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTQsICZ1bHRyYV9lbmFibGUpOwogCisJLyogSWYgd2UgYXJlIGluIFJBSUQgbW9kZSAoZWcgQU1JIE1lZ2FJREUpIHRoZW4gd2UgY2FuJ3QgaXQKKwkgICB0dXJucyBvdXQgdHJ1c3QgdGhlIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gKi8KKworCWlmICgoZGV2LT5jbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUpCisJCWdvdG8gb2VtX3NldHVwX2ZhaWxlZDsKKwogCS8qIFBlciBTcGVjaWZpZWQgRGVzaWduIGJ5IE9FTSwgYW5kIEFTSUMgQXJjaGl0ZWN0ICovCiAJaWYgKChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUpIHx8CiAJICAgIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUyKSkgewpAQCAtMTcxLDcgKzE3OSw3IEBACiAJCQkJICAgKChkbWFfc3RhdCYoMTw8KDUrdW5pdCkpKT09KDE8PCg1K3VuaXQpKSkpIHsKIAkJCQl1OCBkbWFzcGVlZCA9IGRtYV90aW1pbmc7CiAKLQkJCQlkbWFfdGltaW5nICY9IH4weEZGOworCQkJCWRtYV90aW1pbmcgJj0gfjB4RkZVOwogCQkJCWlmICgoZG1hc3BlZWQgJiAweDIwKSA9PSAweDIwKQogCQkJCQlkbWFzcGVlZCA9IFhGRVJfTVdfRE1BXzI7CiAJCQkJZWxzZSBpZiAoKGRtYXNwZWVkICYgMHgyMSkgPT0gMHgyMSkKQEAgLTE4NSw3ICsxOTMsNyBAQAogCQkJfSBlbHNlIGlmIChwaW9fdGltaW5nKSB7CiAJCQkJdTggcGlvc3BlZWQgPSBwaW9fdGltaW5nOwogCi0JCQkJcGlvX3RpbWluZyAmPSB+MHhGRjsKKwkJCQlwaW9fdGltaW5nICY9IH4weEZGVTsKIAkJCQlpZiAoKHBpb3NwZWVkICYgMHgyMCkgPT0gMHgyMCkKIAkJCQkJcGlvc3BlZWQgPSBYRkVSX1BJT180OwogCQkJCWVsc2UgaWYgKChwaW9zcGVlZCAmIDB4MjIpID09IDB4MjIpCkBAIC0yMDYsOCArMjE0LDggQEAKIAogb2VtX3NldHVwX2ZhaWxlZDoKIAotCXBpb190aW1pbmcJJj0gfjB4RkY7Ci0JZG1hX3RpbWluZwkmPSB+MHhGRjsKKwlwaW9fdGltaW5nCSY9IH4weEZGVTsKKwlkbWFfdGltaW5nCSY9IH4weEZGVTsKIAl1bHRyYV90aW1pbmcJJj0gfigweDBGIDw8ICg0KnVuaXQpKTsKIAl1bHRyYV9lbmFibGUJJj0gfigweDAxIDw8IGRyaXZlLT5kbik7CiAJY3NiNV9waW8JJj0gfigweDBGIDw8ICg0KmRyaXZlLT5kbikpOwpAQCAtMjI1LDYgKzIzMyw5IEBACiAJCWNhc2UgWEZFUl9NV19ETUFfMjoKIAkJY2FzZSBYRkVSX01XX0RNQV8xOgogCQljYXNlIFhGRVJfTVdfRE1BXzA6CisJCQkvKgorCQkJICogVE9ETzogYWx3YXlzIHNldHVwIFBJTyBtb2RlIHNvIHRoaXMgd29uJ3QgYmUgbmVlZGVkCisJCQkgKi8KIAkJCXBpb190aW1pbmcgfD0gcGlvX21vZGVzW3Bpb107CiAJCQljc2I1X3BpbyAgIHw9IChwaW8gPDwgKDQqZHJpdmUtPmRuKSk7CiAJCQlkbWFfdGltaW5nIHw9IGRtYV9tb2Rlc1tzcGVlZCAtIFhGRVJfTVdfRE1BXzBdOwpAQCAtMjM2LDYgKzI0Nyw5IEBACiAJCWNhc2UgWEZFUl9VRE1BXzI6CiAJCWNhc2UgWEZFUl9VRE1BXzE6CiAJCWNhc2UgWEZFUl9VRE1BXzA6CisJCQkvKgorCQkJICogVE9ETzogYWx3YXlzIHNldHVwIFBJTyBtb2RlIHNvIHRoaXMgd29uJ3QgYmUgbmVlZGVkCisJCQkgKi8KIAkJCXBpb190aW1pbmcgICB8PSBwaW9fbW9kZXNbcGlvXTsKIAkJCWNzYjVfcGlvICAgICB8PSAocGlvIDw8ICg0KmRyaXZlLT5kbikpOwogCQkJZG1hX3RpbWluZyAgIHw9IGRtYV9tb2Rlc1syXTsKQEAgLTI1Niw3MiArMjcwLDIxIEBACiAJcmV0dXJuIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBzcGVlZCkpOwogfQogCi1zdGF0aWMgdm9pZCBjb25maWdfY2hpcHNldF9mb3JfcGlvIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JdTE2IGVpZGVfcGlvX3RpbWluZ1s2XSA9IHs5NjAsIDQ4MCwgMjQwLCAxODAsIDEyMCwgOTB9OwotCXUxNiB4ZmVyX3BpbyA9IGRyaXZlLT5pZC0+ZWlkZV9waW9fbW9kZXM7Ci0JdTggdGltaW5nLCBzcGVlZCwgcGlvOwotCi0JcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDUsIE5VTEwpOwotCi0JaWYgKHhmZXJfcGlvID4gNCkKLQkJeGZlcl9waW8gPSAwOwotCi0JaWYgKGRyaXZlLT5pZC0+ZWlkZV9waW9faW9yZHkgPiAwKQotCQlmb3IgKHhmZXJfcGlvID0gNTsKLQkJCXhmZXJfcGlvPjAgJiYKLQkJCWRyaXZlLT5pZC0+ZWlkZV9waW9faW9yZHk+ZWlkZV9waW9fdGltaW5nW3hmZXJfcGlvXTsKLQkJCXhmZXJfcGlvLS0pOwotCWVsc2UKLQkJeGZlcl9waW8gPSAoZHJpdmUtPmlkLT5laWRlX3Bpb19tb2RlcyAmIDQpID8gMHgwNSA6Ci0JCQkgICAoZHJpdmUtPmlkLT5laWRlX3Bpb19tb2RlcyAmIDIpID8gMHgwNCA6Ci0JCQkgICAoZHJpdmUtPmlkLT5laWRlX3Bpb19tb2RlcyAmIDEpID8gMHgwMyA6Ci0JCQkgICAoZHJpdmUtPmlkLT50UElPICYgMikgPyAweDAyIDoKLQkJCSAgIChkcml2ZS0+aWQtPnRQSU8gJiAxKSA/IDB4MDEgOiB4ZmVyX3BpbzsKLQotCXRpbWluZyA9ICh4ZmVyX3BpbyA+PSBwaW8pID8geGZlcl9waW8gOiBwaW87Ci0KLQlzd2l0Y2godGltaW5nKSB7Ci0JCWNhc2UgNDogc3BlZWQgPSBYRkVSX1BJT180O2JyZWFrOwotCQljYXNlIDM6IHNwZWVkID0gWEZFUl9QSU9fMzticmVhazsKLQkJY2FzZSAyOiBzcGVlZCA9IFhGRVJfUElPXzI7YnJlYWs7Ci0JCWNhc2UgMTogc3BlZWQgPSBYRkVSX1BJT18xO2JyZWFrOwotCQlkZWZhdWx0OgotCQkJc3BlZWQgPSAoIWRyaXZlLT5pZC0+dFBJTykgPyBYRkVSX1BJT18wIDogWEZFUl9QSU9fU0xPVzsKLQkJCWJyZWFrOwotCX0KLQkodm9pZCkgc3Z3a3NfdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCk7Ci0JZHJpdmUtPmN1cnJlbnRfc3BlZWQgPSBzcGVlZDsKLX0KLQogc3RhdGljIHZvaWQgc3Z3a3NfdHVuZV9kcml2ZSAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBwaW8pCiB7Ci0JaWYocGlvID09IDI1NSkKLQkJKHZvaWQpIHN2d2tzX3R1bmVfY2hpcHNldChkcml2ZSwgMjU1KTsKLQllbHNlCi0JCSh2b2lkKSBzdndrc190dW5lX2NoaXBzZXQoZHJpdmUsIChYRkVSX1BJT18wICsgcGlvKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY29uZmlnX2NoaXBzZXRfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXU4IHNwZWVkID0gaWRlX2RtYV9zcGVlZChkcml2ZSwgc3Z3a3NfcmF0ZW1hc2soZHJpdmUpKTsKLQotCWlmICghKHNwZWVkKSkKLQkJc3BlZWQgPSBYRkVSX1BJT18wICsgaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDUsIE5VTEwpOwotCi0JKHZvaWQpIHN2d2tzX3R1bmVfY2hpcHNldChkcml2ZSwgc3BlZWQpOwotCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7CisJcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCBwaW8sIDQsIE5VTEwpOworCSh2b2lkKXN2d2tzX3R1bmVfY2hpcHNldChkcml2ZSwgWEZFUl9QSU9fMCArIHBpbyk7CiB9CiAKIHN0YXRpYyBpbnQgc3Z3a3NfY29uZmlnX2RyaXZlX3hmZXJfcmF0ZSAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKIAotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSkpCisJaWYgKGlkZV90dW5lX2RtYShkcml2ZSkpCiAJCXJldHVybiAwOwogCiAJaWYgKGlkZV91c2VfZmFzdF9waW8oZHJpdmUpKQotCQljb25maWdfY2hpcHNldF9mb3JfcGlvKGRyaXZlKTsKKwkJc3Z3a3NfdHVuZV9kcml2ZShkcml2ZSwgMjU1KTsKIAogCXJldHVybiAtMTsKIH0KQEAgLTUwMCw2ICs0NjMsNyBAQAogCiAJaHdpZi0+dHVuZXByb2MgPSAmc3Z3a3NfdHVuZV9kcml2ZTsKIAlod2lmLT5zcGVlZHByb2MgPSAmc3Z3a3NfdHVuZV9jaGlwc2V0OworCWh3aWYtPnVkbWFfZmlsdGVyID0gJnN2d2tzX3VkbWFfZmlsdGVyOwogCiAJaHdpZi0+YXRhcGlfZG1hID0gMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKaW5kZXggZmQwOWIyOS4uZDMxODVlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCkBAIC02OTIsNyArNjkyLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAkvKiBDcmVhdGUgL3Byb2MvaWRlIGVudHJpZXMgKi8KLQljcmVhdGVfcHJvY19pZGVfaW50ZXJmYWNlcygpOworCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCmluZGV4IGMwMTg4ZGUuLjFhNDQ0NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYwpAQCAtMTIyLDQ1ICsxMjIsNDEgQEAKIH0KIAogLyoqCi0gKglzaWltYWdlX3JhdGVtYXNrCS0JQ29tcHV0ZSBhdmFpbGFibGUgbW9kZXMKLSAqCUBkcml2ZTogSURFIGRyaXZlCisgKglzaWxfdWRtYV9maWx0ZXIJCS0JY29tcHV0ZSBVRE1BIG1hc2sKKyAqCUBkcml2ZTogSURFIGRldmljZQogICoKLSAqCUNvbXB1dGUgdGhlIGF2YWlsYWJsZSBzcGVlZHMgZm9yIHRoZSBkZXZpY2VzIG9uIHRoZSBpbnRlcmZhY2UuCisgKglDb21wdXRlIHRoZSBhdmFpbGFibGUgVURNQSBzcGVlZHMgZm9yIHRoZSBkZXZpY2Ugb24gdGhlIGludGVyZmFjZS4KKyAqCiAgKglGb3IgdGhlIENNRDY4MCB0aGlzIGRlcGVuZHMgb24gdGhlIGNsb2NraW5nIG1vZGUgKHNjc2MpLCBmb3IgdGhlCi0gKglTSTMzMTIgU0FUQSBjb250cm9sbGVyIGxpZmUgaXMgYSBiaXQgc2ltcGxlci4gRW5mb3JjZSBVRE1BMzMKLSAqCWFzIGEgbGltaXQgaWYgdGhlcmUgaXMgbm8gODBwaW4gY2FibGUgcHJlc2VudC4KKyAqCVNJMzExMiBTQVRBIGNvbnRyb2xsZXIgbGlmZSBpcyBhIGJpdCBzaW1wbGVyLgogICovCi0gCi1zdGF0aWMgYnl0ZSBzaWltYWdlX3JhdGVtYXNrIChpZGVfZHJpdmVfdCAqZHJpdmUpCisKK3N0YXRpYyB1OCBzaWxfdWRtYV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQl1OCBtb2RlCT0gMCwgc2NzYyA9IDA7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXVuc2lnbmVkIGxvbmcgYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBod2lmLT5od2lmX2RhdGE7CisJdTggbWFzayA9IDAsIHNjc2MgPSAwOwogCiAJaWYgKGh3aWYtPm1taW8pCiAJCXNjc2MgPSBod2lmLT5JTkIoYmFzZSArIDB4NEEpOwogCWVsc2UKIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUoaHdpZi0+cGNpX2RldiwgMHg4QSwgJnNjc2MpOwogCi0JaWYoaXNfc2F0YShod2lmKSkKLQl7Ci0JCWlmKHN0cnN0cihkcml2ZS0+aWQtPm1vZGVsLCAiTWF4dG9yIikpCi0JCQlyZXR1cm4gMzsKLQkJcmV0dXJuIDQ7CisJaWYgKGlzX3NhdGEoaHdpZikpIHsKKwkJbWFzayA9IHN0cnN0cihkcml2ZS0+aWQtPm1vZGVsLCAiTWF4dG9yIikgPyAweDNmIDogMHg3ZjsKKwkJZ290byBvdXQ7CiAJfQotCQorCiAJaWYgKChzY3NjICYgMHgzMCkgPT0gMHgxMCkJLyogMTMzICovCi0JCW1vZGUgPSA0OworCQltYXNrID0gMHg3ZjsKIAllbHNlIGlmICgoc2NzYyAmIDB4MzApID09IDB4MjApCS8qIDJ4UENJICovCi0JCW1vZGUgPSA0OworCQltYXNrID0gMHg3ZjsKIAllbHNlIGlmICgoc2NzYyAmIDB4MzApID09IDB4MDApCS8qIDEwMCAqLwotCQltb2RlID0gMzsKKwkJbWFzayA9IDB4M2Y7CiAJZWxzZSAJLyogRGlzYWJsZWQgPyAqLwogCQlCVUcoKTsKLQotCWlmICghZWlnaHR5X25pbnR5X3RocmVlKGRyaXZlKSkKLQkJbW9kZSA9IG1pbihtb2RlLCAodTgpMSk7Ci0JcmV0dXJuIG1vZGU7CitvdXQ6CisJcmV0dXJuIG1hc2s7CiB9CiAKIC8qKgpAQCAtMzA2LDcgKzMwMiw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCXUxNiB1bHRyYSA9IDAsIG11bHRpCT0gMDsKIAl1OCBtb2RlID0gMCwgdW5pdAk9IGRyaXZlLT5zZWxlY3QuYi51bml0OwotCXU4IHNwZWVkCQk9IGlkZV9yYXRlX2ZpbHRlcihzaWltYWdlX3JhdGVtYXNrKGRyaXZlKSwgeGZlcnNwZWVkKTsKKwl1OCBzcGVlZAkJPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHhmZXJzcGVlZCk7CiAJdW5zaWduZWQgbG9uZyBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aHdpZl9kYXRhOwogCXU4IHNjc2MgPSAwLCBhZGRyX21hc2sJPSAoKGh3aWYtPmNoYW5uZWwpID8KIAkJCQkgICAgKChod2lmLT5tbWlvKSA/IDB4RjQgOiAweDg0KSA6CkBAIC0zNzksMjggKzM3NSw2IEBACiB9CiAKIC8qKgotICoJY29uZmlnX2NoaXBzZXRfZm9yX2RtYQktCWNvbmZpZ3VyZSBmb3IgRE1BCi0gKglAZHJpdmU6IGRyaXZlIHRvIGNvbmZpZ3VyZQotICoKLSAqCUNhbGxlZCBieSB0aGUgSURFIGxheWVyIHdoZW4gaXQgd2FudHMgdGhlIHRpbWluZ3Mgc2V0IHVwLgotICoJRm9yIHRoZSBDTUQ2ODAgd2UgYWxzbyBuZWVkIHRvIHNldCB1cCB0aGUgUElPIHRpbWluZ3MgYW5kCi0gKgllbmFibGUgRE1BLgotICovCi0gCi1zdGF0aWMgaW50IGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQl1OCBzcGVlZAk9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIHNpaW1hZ2VfcmF0ZW1hc2soZHJpdmUpKTsKLQotCWlmICghc3BlZWQpCi0JCXJldHVybiAwOwotCi0JaWYgKHNpaW1hZ2VfdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKLX0KLQotLyoqCiAgKglzaWltYWdlX2NvbmZpZ3VyZV9kcml2ZV9mb3JfZG1hCS0Jc2V0IHVwIGZvciBETUEgdHJhbnNmZXJzCiAgKglAZHJpdmU6IGRyaXZlIHdlIGFyZSBnb2luZyB0byBzZXQgdXAKICAqCkBAIC00MTIsNyArMzg2LDcgQEAKICAKIHN0YXRpYyBpbnQgc2lpbWFnZV9jb25maWdfZHJpdmVfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSkpCisJaWYgKGlkZV90dW5lX2RtYShkcml2ZSkpCiAJCXJldHVybiAwOwogCiAJaWYgKGlkZV91c2VfZmFzdF9waW8oZHJpdmUpKQpAQCAtODMxLDcgKzgwNSw3IEBACiAKIAkvKgogCSAqCU5vdyBzZXQgdXAgdGhlIGh3LiBXZSBoYXZlIHRvIGRvIHRoaXMgb3Vyc2VsdmVzIGFzCi0JICoJdGhlIE1NSU8gbGF5b3V0IGlzbnQgdGhlIHNhbWUgYXMgdGhlIHRoZSBzdGFuZGFyZCBwb3J0CisJICoJdGhlIE1NSU8gbGF5b3V0IGlzbnQgdGhlIHNhbWUgYXMgdGhlIHN0YW5kYXJkIHBvcnQKIAkgKgliYXNlZCBJL08KIAkgKi8KIApAQCAtOTg5LDYgKzk2Myw3IEBACiAJaHdpZi0+dHVuZXByb2MJPSAmc2lpbWFnZV90dW5lcHJvYzsKIAlod2lmLT5yZXNldF9wb2xsID0gJnNpaW1hZ2VfcmVzZXRfcG9sbDsKIAlod2lmLT5wcmVfcmVzZXQgPSAmc2lpbWFnZV9wcmVfcmVzZXQ7CisJaHdpZi0+dWRtYV9maWx0ZXIgPSAmc2lsX3VkbWFfZmlsdGVyOwogCiAJaWYoaXNfc2F0YShod2lmKSkgewogCQlzdGF0aWMgaW50IGZpcnN0ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jCmluZGV4IDJiYTA2NjkuLmJiNmNjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYwpAQCAtMSw5ICsxLDExIEBACiAvKgotICogbGludXgvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYwlWZXJzaW9uIDAuMTZhYyt2cAlKdW4gMTgsIDIwMDMKKyAqIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMJVmVyc2lvbiAwLjIwCU1hciA0LCAyMDA3CiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwMgkJTGlvbmVsIEJvdXRvbiA8TGlvbmVsLkJvdXRvbkBpbmV0Ni5mcj4sIE1haW50YWluZXIKICAqIENvcHlyaWdodCAoQykgMjAwMwkJVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqIENvcHlyaWdodCAoQykgMjAwNwkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICoKICAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICoKICAqCkBAIC0xOTEsNyArMTkzLDcgQEAKIAkiQVRBIDEzMyAoMXN0IGdlbikiLCAiQVRBIDEzMyAoMm5kIGdlbikiCiB9OwogCi0jaWYgZGVmaW5lZChESVNQTEFZX1NJU19USU1JTkdTKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorI2lmIGRlZmluZWQoRElTUExBWV9TSVNfVElNSU5HUykgJiYgZGVmaW5lZChDT05GSUdfSURFX1BST0NfRlMpCiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIApAQCAtNDI2LDE3ICs0MjgsNyBAQAogCiAJcmV0dXJuIGxlbiA+IGNvdW50ID8gY291bnQgOiBsZW47CiB9Ci0jZW5kaWYgLyogZGVmaW5lZChESVNQTEFZX1NJU19USU1JTkdTKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKSAqLwotCi1zdGF0aWMgdTggc2lzNTUxM19yYXRlbWFzayAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXU4IHJhdGVzW10gPSB7IDAsIDAsIDEsIDIsIDMsIDMsIDQsIDQgfTsKLQl1OCBtb2RlID0gcmF0ZXNbY2hpcHNldF9mYW1pbHldOwotCi0JaWYgKCFlaWdodHlfbmludHlfdGhyZWUoZHJpdmUpKQotCQltb2RlID0gbWluKG1vZGUsICh1OCkxKTsKLQlyZXR1cm4gbW9kZTsKLX0KKyNlbmRpZiAvKiBkZWZpbmVkKERJU1BMQVlfU0lTX1RJTUlOR1MpICYmIGRlZmluZWQoQ09ORklHX0lERV9QUk9DX0ZTKSAqLwogCiAvKgogICogQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKQEAgLTQ1OCwzNiArNDUwLDE1IEBACiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NGIsIHJlZzRiaHxyd19wcmVmZXRjaCk7CiB9CiAKLQogLyogU2V0IHBlci1kcml2ZSBhY3RpdmUgYW5kIHJlY292ZXJ5IHRpbWUgKi8KIHN0YXRpYyB2b2lkIGNvbmZpZ19hcnRfcndwX3BpbyAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBwaW8pCiB7CiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSBod2lmLT5wY2lfZGV2OwogCi0JdTgJCQl0aW1pbmcsIGRyaXZlX3BjaSwgdGVzdDEsIHRlc3QyOwotCi0JdTE2IGVpZGVfcGlvX3RpbWluZ1s2XSA9IHs2MDAsIDM5MCwgMjQwLCAxODAsIDEyMCwgOTB9OwotCXUxNiB4ZmVyX3BpbyA9IGRyaXZlLT5pZC0+ZWlkZV9waW9fbW9kZXM7CisJdTggZHJpdmVfcGNpLCB0ZXN0MSwgdGVzdDI7CiAKIAljb25maWdfZHJpdmVfYXJ0X3J3cChkcml2ZSk7Ci0JcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIHBpbywgTlVMTCk7Ci0KLQlpZiAoeGZlcl9waW8+IDQpCi0JCXhmZXJfcGlvID0gMDsKLQotCWlmIChkcml2ZS0+aWQtPmVpZGVfcGlvX2lvcmR5ID4gMCkgewotCQlmb3IgKHhmZXJfcGlvID0gNTsKLQkJCSh4ZmVyX3BpbyA+IDApICYmCi0JCQkoZHJpdmUtPmlkLT5laWRlX3Bpb19pb3JkeSA+IGVpZGVfcGlvX3RpbWluZ1t4ZmVyX3Bpb10pOwotCQkJeGZlcl9waW8tLSk7Ci0JfSBlbHNlIHsKLQkJeGZlcl9waW8gPSAoZHJpdmUtPmlkLT5laWRlX3Bpb19tb2RlcyAmIDQpID8gMHgwNSA6Ci0JCQkgICAoZHJpdmUtPmlkLT5laWRlX3Bpb19tb2RlcyAmIDIpID8gMHgwNCA6Ci0JCQkgICAoZHJpdmUtPmlkLT5laWRlX3Bpb19tb2RlcyAmIDEpID8gMHgwMyA6IHhmZXJfcGlvOwotCX0KLQotCXRpbWluZyA9ICh4ZmVyX3BpbyA+PSBwaW8pID8geGZlcl9waW8gOiBwaW87CiAKIAkvKiBJbiBwcmUgQVRBXzEzMyBjYXNlLCBkcml2ZXMgc2l0IGF0IDB4NDAgKyA0KmRyaXZlLT5kbiAqLwogCWRyaXZlX3BjaSA9IDB4NDA7CkBAIC01MTAsMTcgKzQ4MSwxOCBAQAogCQl0ZXN0MSAmPSB+MHgwRjsKIAkJdGVzdDIgJj0gfjB4MDc7CiAKLQkJc3dpdGNoKHRpbWluZykgeworCQlzd2l0Y2gocGlvKSB7CiAJCQljYXNlIDQ6CQl0ZXN0MSB8PSAweDAxOyB0ZXN0MiB8PSAweDAzOyBicmVhazsKIAkJCWNhc2UgMzoJCXRlc3QxIHw9IDB4MDM7IHRlc3QyIHw9IDB4MDM7IGJyZWFrOwogCQkJY2FzZSAyOgkJdGVzdDEgfD0gMHgwNDsgdGVzdDIgfD0gMHgwNDsgYnJlYWs7CiAJCQljYXNlIDE6CQl0ZXN0MSB8PSAweDA3OyB0ZXN0MiB8PSAweDA2OyBicmVhazsKKwkJCWNhc2UgMDoJCS8qIFBJTzA6IHJlZ2lzdGVyIHNldHRpbmcgPT0gWDAwMCAqLwogCQkJZGVmYXVsdDoJYnJlYWs7CiAJCX0KIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVfcGNpLCB0ZXN0MSk7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIGRyaXZlX3BjaSsxLCB0ZXN0Mik7CiAJfSBlbHNlIGlmIChjaGlwc2V0X2ZhbWlseSA8IEFUQV8xMzMpIHsKLQkJc3dpdGNoKHRpbWluZykgeyAvKgkJYWN0aXZlICByZWNvdmVyeQorCQlzd2l0Y2gocGlvKSB7IC8qCQlhY3RpdmUgIHJlY292ZXJ5CiAJCQkJCQkgIHYgICAgIHYgKi8KIAkJCWNhc2UgNDoJCXRlc3QxID0gMHgzMHwweDAxOyBicmVhazsKIAkJCWNhc2UgMzoJCXRlc3QxID0gMHgzMHwweDAzOyBicmVhazsKQEAgLTUzNSwyNCArNTA3LDI4IEBACiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIGRyaXZlX3BjaSwgJnRlc3QzKTsKIAkJdGVzdDMgJj0gMHhjMGMwMGZmZjsKIAkJaWYgKHRlc3QzICYgMHgwOCkgewotCQkJdGVzdDMgfD0gKHVuc2lnbmVkIGxvbmcpaW5pX3RpbWVfdmFsdWVbQVRBXzEzM11bdGltaW5nXSA8PCAxMjsKLQkJCXRlc3QzIHw9ICh1bnNpZ25lZCBsb25nKWFjdF90aW1lX3ZhbHVlW0FUQV8xMzNdW3RpbWluZ10gPDwgMTY7Ci0JCQl0ZXN0MyB8PSAodW5zaWduZWQgbG9uZylyY29fdGltZV92YWx1ZVtBVEFfMTMzXVt0aW1pbmddIDw8IDI0OworCQkJdGVzdDMgfD0gaW5pX3RpbWVfdmFsdWVbQVRBXzEzM11bcGlvXSA8PCAxMjsKKwkJCXRlc3QzIHw9IGFjdF90aW1lX3ZhbHVlW0FUQV8xMzNdW3Bpb10gPDwgMTY7CisJCQl0ZXN0MyB8PSByY29fdGltZV92YWx1ZVtBVEFfMTMzXVtwaW9dIDw8IDI0OwogCQl9IGVsc2UgewotCQkJdGVzdDMgfD0gKHVuc2lnbmVkIGxvbmcpaW5pX3RpbWVfdmFsdWVbQVRBXzEwMF1bdGltaW5nXSA8PCAxMjsKLQkJCXRlc3QzIHw9ICh1bnNpZ25lZCBsb25nKWFjdF90aW1lX3ZhbHVlW0FUQV8xMDBdW3RpbWluZ10gPDwgMTY7Ci0JCQl0ZXN0MyB8PSAodW5zaWduZWQgbG9uZylyY29fdGltZV92YWx1ZVtBVEFfMTAwXVt0aW1pbmddIDw8IDI0OworCQkJdGVzdDMgfD0gaW5pX3RpbWVfdmFsdWVbQVRBXzEwMF1bcGlvXSA8PCAxMjsKKwkJCXRlc3QzIHw9IGFjdF90aW1lX3ZhbHVlW0FUQV8xMDBdW3Bpb10gPDwgMTY7CisJCQl0ZXN0MyB8PSByY29fdGltZV92YWx1ZVtBVEFfMTAwXVtwaW9dIDw8IDI0OwogCQl9CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBkcml2ZV9wY2ksIHRlc3QzKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgY29uZmlnX2NoaXBzZXRfZm9yX3BpbyAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBwaW8pCitzdGF0aWMgaW50IHNpczU1MTNfdHVuZV9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHBpbykKIHsKLQlpZiAocGlvID09IDI1NSkKLQkJcGlvID0gaWRlX2ZpbmRfYmVzdF9tb2RlKGRyaXZlLCBYRkVSX1BJTyB8IFhGRVJfRVBJTykgLSBYRkVSX1BJT18wOworCXBpbyA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgcGlvLCA0LCBOVUxMKTsKIAljb25maWdfYXJ0X3J3cF9waW8oZHJpdmUsIHBpbyk7Ci0JcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIFhGRVJfUElPXzAgKyBtaW5fdCh1OCwgcGlvLCA0KSk7CisJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOworfQorCitzdGF0aWMgdm9pZCBzaXM1NTEzX3R1bmVwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcGlvKQoreworCSh2b2lkKXNpczU1MTNfdHVuZV9kcml2ZShkcml2ZSwgcGlvKTsKIH0KIAogc3RhdGljIGludCBzaXM1NTEzX3R1bmVfY2hpcHNldCAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCB4ZmVyc3BlZWQpCkBAIC01NjMsNyArNTM5LDcgQEAKIAl1OCBkcml2ZV9wY2ksIHJlZywgc3BlZWQ7CiAJdTMyIHJlZ2R3OwogCi0Jc3BlZWQgPSBpZGVfcmF0ZV9maWx0ZXIoc2lzNTUxM19yYXRlbWFzayhkcml2ZSksIHhmZXJzcGVlZCk7CisJc3BlZWQgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHhmZXJzcGVlZCk7CiAKIAkvKiBTZWUgY29uZmlnX2FydF9yd3BfcGlvIGZvciBkcml2ZSBwY2kgY29uZmlnIHJlZ2lzdGVycyAqLwogCWRyaXZlX3BjaSA9IDB4NDA7CkBAIC02MzIsNTIgKzYwOCwzNCBAQAogCQljYXNlIFhGRVJfU1dfRE1BXzE6CiAJCWNhc2UgWEZFUl9TV19ETUFfMDoKIAkJCWJyZWFrOwotCQljYXNlIFhGRVJfUElPXzQ6IHJldHVybigoaW50KSBjb25maWdfY2hpcHNldF9mb3JfcGlvKGRyaXZlLCA0KSk7Ci0JCWNhc2UgWEZFUl9QSU9fMzogcmV0dXJuKChpbnQpIGNvbmZpZ19jaGlwc2V0X2Zvcl9waW8oZHJpdmUsIDMpKTsKLQkJY2FzZSBYRkVSX1BJT18yOiByZXR1cm4oKGludCkgY29uZmlnX2NoaXBzZXRfZm9yX3Bpbyhkcml2ZSwgMikpOwotCQljYXNlIFhGRVJfUElPXzE6IHJldHVybigoaW50KSBjb25maWdfY2hpcHNldF9mb3JfcGlvKGRyaXZlLCAxKSk7CisJCWNhc2UgWEZFUl9QSU9fNDoKKwkJY2FzZSBYRkVSX1BJT18zOgorCQljYXNlIFhGRVJfUElPXzI6CisJCWNhc2UgWEZFUl9QSU9fMToKIAkJY2FzZSBYRkVSX1BJT18wOgotCQlkZWZhdWx0OgkgcmV0dXJuKChpbnQpIGNvbmZpZ19jaGlwc2V0X2Zvcl9waW8oZHJpdmUsIDApKTsJCisJCQlyZXR1cm4gc2lzNTUxM190dW5lX2RyaXZlKGRyaXZlLCBzcGVlZCAtIFhGRVJfUElPXzApOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gKChpbnQpIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIHNwZWVkKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNpczU1MTNfdHVuZV9kcml2ZSAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBwaW8pCi17Ci0JKHZvaWQpIGNvbmZpZ19jaGlwc2V0X2Zvcl9waW8oZHJpdmUsIHBpbyk7Ci19Ci0KLS8qCi0gKiAoKGlkLT5od19jb25maWcgJiAweDQwMDB8MHgyMDAwKSAmJiAoSFdJRihkcml2ZSktPnVkbWFfZm91cikpCi0gKi8KLXN0YXRpYyBpbnQgY29uZmlnX2NoaXBzZXRfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXU4IHNwZWVkCT0gaWRlX2RtYV9zcGVlZChkcml2ZSwgc2lzNTUxM19yYXRlbWFzayhkcml2ZSkpOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoIlNJUzU1MTM6IGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEsIGRyaXZlICVkLCB1bHRyYSAleFxuIiwKLQkgICAgICAgZHJpdmUtPmRuLCBkcml2ZS0+aWQtPmRtYV91bHRyYSk7Ci0jZW5kaWYKLQotCWlmICghKHNwZWVkKSkKLQkJcmV0dXJuIDA7Ci0KLQlzaXM1NTEzX3R1bmVfY2hpcHNldChkcml2ZSwgc3BlZWQpOwotCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7CisJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIHNwZWVkKTsKIH0KIAogc3RhdGljIGludCBzaXM1NTEzX2NvbmZpZ194ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWNvbmZpZ19hcnRfcndwX3Bpbyhkcml2ZSwgNSk7CisJLyoKKwkgKiBUT0RPOiBhbHdheXMgc2V0IFBJTyBtb2RlIGFuZCByZW1vdmUgdGhpcworCSAqLworCXNpczU1MTNfdHVuZXByb2MoZHJpdmUsIDI1NSk7CiAKIAlkcml2ZS0+aW5pdF9zcGVlZCA9IDA7CiAKLQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoZHJpdmUpKQorCWlmIChpZGVfdHVuZV9kbWEoZHJpdmUpKQogCQlyZXR1cm4gMDsKIAogCWlmIChpZGVfdXNlX2Zhc3RfcGlvKGRyaXZlKSkKLQkJc2lzNTUxM190dW5lX2RyaXZlKGRyaXZlLCA1KTsKKwkJc2lzNTUxM190dW5lcHJvYyhkcml2ZSwgMjU1KTsKIAogCXJldHVybiAtMTsKIH0KQEAgLTgyNiw3ICs3ODQsNyBAQAogCQkJCWJyZWFrOwogCQl9CiAKLSNpZiBkZWZpbmVkKERJU1BMQVlfU0lTX1RJTUlOR1MpICYmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCisjaWYgZGVmaW5lZChESVNQTEFZX1NJU19USU1JTkdTKSAmJiBkZWZpbmVkKENPTkZJR19JREVfUFJPQ19GUykKIAkJaWYgKCFzaXNfcHJvYykgewogCQkJc2lzX3Byb2MgPSAxOwogCQkJYm1pZGVfZGV2ID0gZGV2OwpAQCAtODU4LDEyICs4MTYsMTQgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9zaXM1NTEzIChpZGVfaHdpZl90ICpod2lmKQogeworCXU4IHVkbWFfcmF0ZXNbXSA9IHsgMHgwMCwgMHgwMCwgMHgwNywgMHgxZiwgMHgzZiwgMHgzZiwgMHg3ZiwgMHg3ZiB9OworCiAJaHdpZi0+YXV0b2RtYSA9IDA7CiAKIAlpZiAoIWh3aWYtPmlycSkKIAkJaHdpZi0+aXJxID0gaHdpZi0+Y2hhbm5lbCA/IDE1IDogMTQ7CiAKLQlod2lmLT50dW5lcHJvYyA9ICZzaXM1NTEzX3R1bmVfZHJpdmU7CisJaHdpZi0+dHVuZXByb2MgPSAmc2lzNTUxM190dW5lcHJvYzsKIAlod2lmLT5zcGVlZHByb2MgPSAmc2lzNTUxM190dW5lX2NoaXBzZXQ7CiAKIAlpZiAoIShod2lmLT5kbWFfYmFzZSkpIHsKQEAgLTg3Myw3ICs4MzMsOCBAQAogCX0KIAogCWh3aWYtPmF0YXBpX2RtYSA9IDE7Ci0JaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7CisKKwlod2lmLT51bHRyYV9tYXNrID0gdWRtYV9yYXRlc1tjaGlwc2V0X2ZhbWlseV07CiAJaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7CiAJaHdpZi0+c3dkbWFfbWFzayA9IDB4MDc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zbDgyYzEwNS5jIGIvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKaW5kZXggZmUzYjRiOS4uN2MzODNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKQEAgLTgyLDcgKzgyLDE0IEBACiAKIAlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIHBpbywgNSwgJnApOwogCi0JZHJpdmUtPmRyaXZlX2RhdGEgPSBkcnZfY3RybCA9IGdldF9waW9fdGltaW5ncygmcCk7CisJZHJ2X2N0cmwgPSBnZXRfcGlvX3RpbWluZ3MoJnApOworCisJLyoKKwkgKiBTdG9yZSB0aGUgUElPIHRpbWluZ3Mgc28gdGhhdCB3ZSBjYW4gcmVzdG9yZSB0aGVtCisJICogaW4gY2FzZSBETUEgd2lsbCBiZSB0dXJuZWQgb2ZmLi4uCisJICovCisJZHJpdmUtPmRyaXZlX2RhdGEgJj0gMHhmZmZmMDAwMDsKKwlkcml2ZS0+ZHJpdmVfZGF0YSB8PSBkcnZfY3RybDsKIAogCWlmICghZHJpdmUtPnVzaW5nX2RtYSkgewogCQkvKgpAQCAtMTAwLDE3ICsxMDcsNTUgQEAKIH0KIAogLyoKLSAqIENvbmZpZ3VyZSB0aGUgZHJpdmUgZm9yIERNQS4KLSAqIFdlJ2xsIHByb2dyYW0gdGhlIGNoaXBzZXQgb25seSB3aGVuIERNQSBpcyBhY3R1YWxseSB0dXJuZWQgb24uCisgKiBDb25maWd1cmUgdGhlIGRyaXZlIGFuZCBjaGlwc2V0IGZvciBhIG5ldyB0cmFuc2ZlciBzcGVlZC4KICAqLwotc3RhdGljIGludCBjb25maWdfZm9yX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IHNsODJjMTA1X3R1bmVfY2hpcHNldChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNwZWVkKQogewotCURCRygoImNvbmZpZ19mb3JfZG1hKGRyaXZlOiVzKVxuIiwgZHJpdmUtPm5hbWUpKTsKKwlzdGF0aWMgdTE2IG13ZG1hX3RpbWluZ3NbXSA9IHsweDA3MDcsIDB4MDIwMSwgMHgwMjAwfTsKKwl1MTYgZHJ2X2N0cmw7CiAKLQlpZiAoaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgWEZFUl9NV19ETUFfMikgIT0gMCkKLQkJcmV0dXJuIDA7CisgCURCRygoInNsODJjMTA1X3R1bmVfY2hpcHNldChkcml2ZTolcywgc3BlZWQ6JXMpXG4iLAorCSAgICAgZHJpdmUtPm5hbWUsIGlkZV94ZmVyX3ZlcmJvc2Uoc3BlZWQpKSk7CiAKLQlyZXR1cm4gaWRlX2RtYV9lbmFibGUoZHJpdmUpOworCXNwZWVkID0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCBzcGVlZCk7CisKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBYRkVSX01XX0RNQV8yOgorCWNhc2UgWEZFUl9NV19ETUFfMToKKwljYXNlIFhGRVJfTVdfRE1BXzA6CisJCWRydl9jdHJsID0gbXdkbWFfdGltaW5nc1tzcGVlZCAtIFhGRVJfTVdfRE1BXzBdOworCisJCS8qCisJCSAqIFN0b3JlIHRoZSBETUEgdGltaW5ncyBzbyB0aGF0IHdlIGNhbiBhY3R1YWxseSBwcm9ncmFtCisJCSAqIHRoZW0gd2hlbiBETUEgd2lsbCBiZSB0dXJuZWQgb24uLi4KKwkJICovCisJCWRyaXZlLT5kcml2ZV9kYXRhICY9IDB4MDAwMGZmZmY7CisJCWRyaXZlLT5kcml2ZV9kYXRhIHw9ICh1bnNpZ25lZCBsb25nKWRydl9jdHJsIDw8IDE2OworCisJCS8qCisJCSAqIElmIHdlIGFyZSBhbHJlYWR5IHVzaW5nIERNQSwgd2UganVzdCByZXByb2dyYW0KKwkJICogdGhlIGRyaXZlIGNvbnRyb2wgcmVnaXN0ZXIuCisJCSAqLworCQlpZiAoZHJpdmUtPnVzaW5nX2RtYSkgeworCQkJc3RydWN0IHBjaV9kZXYgKmRldgk9IEhXSUYoZHJpdmUpLT5wY2lfZGV2OworCQkJaW50IHJlZyAJCT0gMHg0NCArIGRyaXZlLT5kbiAqIDQ7CisKKwkJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHJlZywgZHJ2X2N0cmwpOworCQl9CisJCWJyZWFrOworCWNhc2UgWEZFUl9QSU9fNToKKwljYXNlIFhGRVJfUElPXzQ6CisJY2FzZSBYRkVSX1BJT18zOgorCWNhc2UgWEZFUl9QSU9fMjoKKwljYXNlIFhGRVJfUElPXzE6CisJY2FzZSBYRkVSX1BJT18wOgorCQkodm9pZCkgc2w4MmMxMDVfdHVuZV9waW8oZHJpdmUsIHNwZWVkIC0gWEZFUl9QSU9fMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgc3BlZWQpOwogfQogCiAvKgpAQCAtMTIwLDcgKzE2NSw3IEBACiB7CiAJREJHKCgic2w4MmMxMDVfaWRlX2RtYV9jaGVjayhkcml2ZTolcylcbiIsIGRyaXZlLT5uYW1lKSk7CiAKLQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIGNvbmZpZ19mb3JfZG1hKGRyaXZlKSkKKwlpZiAoaWRlX3R1bmVfZG1hKGRyaXZlKSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gLTE7CkBAIC0yMTksNyArMjY0LDcgQEAKIAogCXJjID0gX19pZGVfZG1hX29uKGRyaXZlKTsKIAlpZiAocmMgPT0gMCkgewotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCByZWcsIDB4MDIwMCk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHJlZywgZHJpdmUtPmRyaXZlX2RhdGEgPj4gMTYpOwogCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBETUEgZW5hYmxlZFxuIiwgZHJpdmUtPm5hbWUpOwogCX0KQEAgLTMwNCw3ICszNDksNyBAQAogCS8qCiAJICogVGhlIGJyaWRnZSBzaG91bGQgYmUgcGFydCBvZiB0aGUgc2FtZSBkZXZpY2UsIGJ1dCBmdW5jdGlvbiAwLgogCSAqLwotCWJyaWRnZSA9IHBjaV9maW5kX3Nsb3QoZGV2LT5idXMtPm51bWJlciwKKwlicmlkZ2UgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdChkZXYtPmJ1cy0+bnVtYmVyLAogCQkJICAgICAgIFBDSV9ERVZGTihQQ0lfU0xPVChkZXYtPmRldmZuKSwgMCkpOwogCWlmICghYnJpZGdlKQogCQlyZXR1cm4gLTE7CkBAIC0zMTQsMTMgKzM1OSwxNSBAQAogCSAqLwogCWlmIChicmlkZ2UtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX1dJTkJPTkQgfHwKIAkgICAgYnJpZGdlLT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9XSU5CT05EXzgzQzU1MyB8fAotCSAgICBicmlkZ2UtPmNsYXNzID4+IDggIT0gUENJX0NMQVNTX0JSSURHRV9JU0EpCisJICAgIGJyaWRnZS0+Y2xhc3MgPj4gOCAhPSBQQ0lfQ0xBU1NfQlJJREdFX0lTQSkgeworCSAgICAJcGNpX2Rldl9wdXQoYnJpZGdlKTsKIAkJcmV0dXJuIC0xOwotCisJfQogCS8qCiAJICogV2UgbmVlZCB0byBmaW5kIGZ1bmN0aW9uIDAncyByZXZpc2lvbiwgbm90IGZ1bmN0aW9uIDEKIAkgKi8KIAlwY2lfcmVhZF9jb25maWdfYnl0ZShicmlkZ2UsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7CisJcGNpX2Rldl9wdXQoYnJpZGdlKTsKIAogCXJldHVybiByZXY7CiB9CkBAIC0zNTcsNiArNDA0LDcgQEAKIAlEQkcoKCJpbml0X2h3aWZfc2w4MmMxMDUoaHdpZjogaWRlJWQpXG4iLCBod2lmLT5pbmRleCkpOwogCiAJaHdpZi0+dHVuZXByb2MJCT0gJnNsODJjMTA1X3R1bmVfZHJpdmU7CisJaHdpZi0+c3BlZWRwcm9jIAk9ICZzbDgyYzEwNV90dW5lX2NoaXBzZXQ7CiAJaHdpZi0+c2VsZWN0cHJvYwk9ICZzbDgyYzEwNV9zZWxlY3Rwcm9jOwogCWh3aWYtPnJlc2V0cHJvYyAJPSAmc2w4MmMxMDVfcmVzZXRwcm9jOwogCkBAIC0zODgsNyArNDM2LDcgQEAKIAl9CiAKIAlod2lmLT5hdGFwaV9kbWEgID0gMTsKLQlod2lmLT5td2RtYV9tYXNrID0gMHgwNDsKKwlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKIAogCWh3aWYtPmlkZV9kbWFfY2hlY2sJCT0gJnNsODJjMTA1X2lkZV9kbWFfY2hlY2s7CiAJaHdpZi0+aWRlX2RtYV9vbgkJPSAmc2w4MmMxMDVfaWRlX2RtYV9vbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zbGM5MGU2Ni5jIGIvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMKaW5kZXggODUyY2NiMy4uYzQwZjI5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMKQEAgLTIxLDE1ICsyMSw2IEBACiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIHU4IHNsYzkwZTY2X3JhdGVtYXNrIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JdTggbW9kZQk9IDI7Ci0KLQlpZiAoIWVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkpCi0JCW1vZGUgPSBtaW5fdCh1OCwgbW9kZSwgMSk7Ci0JcmV0dXJuIG1vZGU7Ci19Ci0KIHN0YXRpYyB1OCBzbGM5MGU2Nl9kbWFfMl9waW8gKHU4IHhmZXJfcmF0ZSkgewogCXN3aXRjaCh4ZmVyX3JhdGUpIHsKIAkJY2FzZSBYRkVSX1VETUFfNDoKQEAgLTEyMiw3ICsxMTMsNyBAQAogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gaHdpZi0+cGNpX2RldjsKIAl1OCBtYXNsYXZlCQk9IGh3aWYtPmNoYW5uZWwgPyAweDQyIDogMHg0MDsKLQl1OCBzcGVlZAk9IGlkZV9yYXRlX2ZpbHRlcihzbGM5MGU2Nl9yYXRlbWFzayhkcml2ZSksIHhmZXJzcGVlZCk7CisJdTggc3BlZWQJCT0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCB4ZmVyc3BlZWQpOwogCWludCBzaXRyZSA9IDAsIGFfc3BlZWQJPSA3IDw8IChkcml2ZS0+ZG4gKiA0KTsKIAlpbnQgdV9zcGVlZCA9IDAsIHVfZmxhZyA9IDEgPDwgZHJpdmUtPmRuOwogCXUxNgkJCXJlZzQwNDIsIHJlZzQ0LCByZWc0OCwgcmVnNGE7CkBAIC0xNjksMjIgKzE2MCwxMSBAQAogCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBzcGVlZCk7CiB9CiAKLXN0YXRpYyBpbnQgc2xjOTBlNjZfY29uZmlnX2RyaXZlX2Zvcl9kbWEgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQl1OCBzcGVlZCA9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIHNsYzkwZTY2X3JhdGVtYXNrKGRyaXZlKSk7Ci0KLQlpZiAoIXNwZWVkKQotCQlyZXR1cm4gMDsKLQotCSh2b2lkKSBzbGM5MGU2Nl90dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKTsKLQlyZXR1cm4gaWRlX2RtYV9lbmFibGUoZHJpdmUpOwotfQotCiBzdGF0aWMgaW50IHNsYzkwZTY2X2NvbmZpZ19kcml2ZV94ZmVyX3JhdGUgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlkcml2ZS0+aW5pdF9zcGVlZCA9IDA7CiAKLQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIHNsYzkwZTY2X2NvbmZpZ19kcml2ZV9mb3JfZG1hKGRyaXZlKSkKKwlpZiAoaWRlX3R1bmVfZG1hKGRyaXZlKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWRlX3VzZV9mYXN0X3Bpbyhkcml2ZSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdGM4NmMwMDEuYyBiL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCmluZGV4IDBiNmQ4MWQuLmNlZTYxOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCkBAIC0xMywxOCArMTMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KIAotc3RhdGljIGlubGluZSB1OCB0Yzg2YzAwMV9yYXRlbWFzayhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JcmV0dXJuIGVpZ2h0eV9uaW50eV90aHJlZShkcml2ZSkgPyAyIDogMTsKLX0KLQogc3RhdGljIGludCB0Yzg2YzAwMV90dW5lX2NoaXBzZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CiAJdW5zaWduZWQgbG9uZyBzY3JfcG9ydAk9IGh3aWYtPmNvbmZpZ19kYXRhICsgKGRyaXZlLT5kbiA/IDB4MDIgOiAweDAwKTsKIAl1MTYgbW9kZSwgc2NyCQk9IGh3aWYtPklOVyhzY3JfcG9ydCk7CiAKLQlzcGVlZCA9IGlkZV9yYXRlX2ZpbHRlcih0Yzg2YzAwMV9yYXRlbWFzayhkcml2ZSksIHNwZWVkKTsKKwlzcGVlZCA9IGlkZV9yYXRlX2ZpbHRlcihkcml2ZSwgc3BlZWQpOwogCiAJc3dpdGNoIChzcGVlZCkgewogCQljYXNlIFhGRVJfVURNQV80Ogltb2RlID0gMHgwMGMwOyBicmVhazsKQEAgLTE3MiwyMCArMTY3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb25maWdfY2hpcHNldF9mb3JfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQl1OCBzcGVlZCA9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIHRjODZjMDAxX3JhdGVtYXNrKGRyaXZlKSk7Ci0KLQlpZiAoIXNwZWVkKQotCQlyZXR1cm4gMDsKLQotCSh2b2lkKSB0Yzg2YzAwMV90dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKTsKLQlyZXR1cm4gaWRlX2RtYV9lbmFibGUoZHJpdmUpOwotfQotCiBzdGF0aWMgaW50IHRjODZjMDAxX2NvbmZpZ19kcml2ZV94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgY29uZmlnX2NoaXBzZXRfZm9yX2RtYShkcml2ZSkpCisJaWYgKGlkZV90dW5lX2RtYShkcml2ZSkpCiAJCXJldHVybiAwOwogCiAJaWYgKGlkZV91c2VfZmFzdF9waW8oZHJpdmUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3RyaWZsZXguYyBiL2RyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMKaW5kZXggNWUwNjE3OS4uMzVlOGM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3RyaWZsZXguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvdHJpZmxleC5jCkBAIC00OCw3ICs0OCw3IEBACiAJdTE2IHRpbWluZyA9IDA7CiAJdTMyIHRyaWZsZXhfdGltaW5ncyA9IDA7CiAJdTggdW5pdCA9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOwotCXU4IHNwZWVkID0gaWRlX3JhdGVfZmlsdGVyKDAsIHhmZXJzcGVlZCk7CisJdTggc3BlZWQgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHhmZXJzcGVlZCk7CiAJCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgY2hhbm5lbF9vZmZzZXQsICZ0cmlmbGV4X3RpbWluZ3MpOwogCQpAQCAtMTAwLDIwICsxMDAsOSBAQAogCSh2b2lkKSB0cmlmbGV4X3R1bmVfY2hpcHNldChkcml2ZSwgKFhGRVJfUElPXzAgKyB1c2VfcGlvKSk7CiB9CiAKLXN0YXRpYyBpbnQgdHJpZmxleF9jb25maWdfZHJpdmVfZm9yX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaW50IHNwZWVkID0gaWRlX2RtYV9zcGVlZChkcml2ZSwgMCk7IC8qIE5vIHVsdHJhIHNwZWVkcyAqLwotCi0JaWYgKCFzcGVlZCkKLQkJcmV0dXJuIDA7Ci0KLQkodm9pZCkgdHJpZmxleF90dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKTsKLQkgcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKLX0KLQogc3RhdGljIGludCB0cmlmbGV4X2NvbmZpZ19kcml2ZV94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgdHJpZmxleF9jb25maWdfZHJpdmVfZm9yX2RtYShkcml2ZSkpCisJaWYgKGlkZV90dW5lX2RtYShkcml2ZSkpCiAJCXJldHVybiAwOwogCiAJdHJpZmxleF90dW5lX2RyaXZlKGRyaXZlLCAyNTUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcHBjL3BtYWMuYyBiL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKaW5kZXggMDcxYTAzMC4uNDVmYzM2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcHBjL3BtYWMuYworKysgYi9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCkBAIC0xMTU3LDMyICsxMTU3LDMyIEBACiAKIAlwbWlmLT5jYWJsZV84MCA9IDA7CiAJcG1pZi0+YnJva2VuX2RtYSA9IHBtaWYtPmJyb2tlbl9kbWFfd2FybiA9IDA7Ci0JaWYgKGRldmljZV9pc19jb21wYXRpYmxlKG5wLCAic2hhc3RhLWF0YSIpKQorCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInNoYXN0YS1hdGEiKSkKIAkJcG1pZi0+a2luZCA9IGNvbnRyb2xsZXJfc2hfYXRhNjsKLQllbHNlIGlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImthdWFpLWF0YSIpKQorCWVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAia2F1YWktYXRhIikpCiAJCXBtaWYtPmtpbmQgPSBjb250cm9sbGVyX3VuX2F0YTY7Ci0JZWxzZSBpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJLMi1VQVRBIikpCisJZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJLMi1VQVRBIikpCiAJCXBtaWYtPmtpbmQgPSBjb250cm9sbGVyX2syX2F0YTY7Ci0JZWxzZSBpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJrZXlsYXJnby1hdGEiKSkgeworCWVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAia2V5bGFyZ28tYXRhIikpIHsKIAkJaWYgKHN0cmNtcChucC0+bmFtZSwgImF0YS00IikgPT0gMCkKIAkJCXBtaWYtPmtpbmQgPSBjb250cm9sbGVyX2tsX2F0YTQ7CiAJCWVsc2UKIAkJCXBtaWYtPmtpbmQgPSBjb250cm9sbGVyX2tsX2F0YTM7Ci0JfSBlbHNlIGlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImhlYXRocm93LWF0YSIpKQorCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJoZWF0aHJvdy1hdGEiKSkKIAkJcG1pZi0+a2luZCA9IGNvbnRyb2xsZXJfaGVhdGhyb3c7CiAJZWxzZSB7CiAJCXBtaWYtPmtpbmQgPSBjb250cm9sbGVyX29oYXJlOwogCQlwbWlmLT5icm9rZW5fZG1hID0gMTsKIAl9CiAKLQliaWRwID0gZ2V0X3Byb3BlcnR5KG5wLCAiQUFQTCxidXMtaWQiLCBOVUxMKTsKKwliaWRwID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiQUFQTCxidXMtaWQiLCBOVUxMKTsKIAlwbWlmLT5hYXBsX2J1c19pZCA9ICBiaWRwID8gKmJpZHAgOiAwOwogCiAJLyogR2V0IGNhYmxlIHR5cGUgZnJvbSBkZXZpY2UtdHJlZSAqLwogCWlmIChwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfa2xfYXRhNCB8fCBwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfdW5fYXRhNgogCSAgICB8fCBwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfazJfYXRhNgogCSAgICB8fCBwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfc2hfYXRhNikgewotCQljb25zdCBjaGFyKiBjYWJsZSA9IGdldF9wcm9wZXJ0eShucCwgImNhYmxlLXR5cGUiLCBOVUxMKTsKKwkJY29uc3QgY2hhciogY2FibGUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjYWJsZS10eXBlIiwgTlVMTCk7CiAJCWlmIChjYWJsZSAmJiAhc3RybmNtcChjYWJsZSwgIjgwLSIsIDMpKQogCQkJcG1pZi0+Y2FibGVfODAgPSAxOwogCX0KQEAgLTExOTAsOCArMTE5MCw4IEBACiAJICogdGhleSBoYXZlIGEgODAgY29uZHVjdG9yIGNhYmxlLCB0aGlzIHNlZW0gdG8gYmUgYWx3YXlzIHRoZSBjYXNlIHVubGVzcwogCSAqIHRoZSB1c2VyIG11Y2tlZCBhcm91bmQKIAkgKi8KLQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJLMi1VQVRBIikgfHwKLQkgICAgZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJzaGFzdGEtYXRhIikpCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiSzItVUFUQSIpIHx8CisJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAic2hhc3RhLWF0YSIpKQogCQlwbWlmLT5jYWJsZV84MCA9IDE7CiAKIAkvKiBPbiBLYXVhaS10eXBlIGNvbnRyb2xsZXJzLCB3ZSBtYWtlIHN1cmUgdGhlIEZDUiBpcyBjb3JyZWN0ICovCkBAIC0xMjc2LDYgKzEyNzYsOCBAQAogCS8qIFdlIHByb2JlIHRoZSBod2lmIG5vdyAqLwogCXByb2JlX2h3aWZfaW5pdChod2lmKTsKIAorCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwppbmRleCAxMThmYjMyLi42NzAzNWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYworKysgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwpAQCAtNzAyLDYgKzcwMiw3IEBACiAKIGludCBpZGVfc2V0dXBfcGNpX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQogeworCWlkZV9od2lmX3QgKmh3aWYgPSBOVUxMLCAqbWF0ZSA9IE5VTEw7CiAJYXRhX2luZGV4X3QgaW5kZXhfbGlzdDsKIAlpbnQgcmV0OwogCkBAIC03MTAsMTEgKzcxMSwxOSBAQAogCQlnb3RvIG91dDsKIAogCWlmICgoaW5kZXhfbGlzdC5iLmxvdyAmIDB4ZjApICE9IDB4ZjApCi0JCXByb2JlX2h3aWZfaW5pdF93aXRoX2ZpeHVwKCZpZGVfaHdpZnNbaW5kZXhfbGlzdC5iLmxvd10sIGQtPmZpeHVwKTsKKwkJaHdpZiA9ICZpZGVfaHdpZnNbaW5kZXhfbGlzdC5iLmxvd107CiAJaWYgKChpbmRleF9saXN0LmIuaGlnaCAmIDB4ZjApICE9IDB4ZjApCi0JCXByb2JlX2h3aWZfaW5pdF93aXRoX2ZpeHVwKCZpZGVfaHdpZnNbaW5kZXhfbGlzdC5iLmhpZ2hdLCBkLT5maXh1cCk7CisJCW1hdGUgPSAmaWRlX2h3aWZzW2luZGV4X2xpc3QuYi5oaWdoXTsKIAotCWNyZWF0ZV9wcm9jX2lkZV9pbnRlcmZhY2VzKCk7CisJaWYgKGh3aWYpCisJCXByb2JlX2h3aWZfaW5pdF93aXRoX2ZpeHVwKGh3aWYsIGQtPmZpeHVwKTsKKwlpZiAobWF0ZSkKKwkJcHJvYmVfaHdpZl9pbml0X3dpdGhfZml4dXAobWF0ZSwgZC0+Zml4dXApOworCisJaWYgKGh3aWYpCisJCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisJaWYgKG1hdGUpCisJCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQobWF0ZSk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTc0OCwxMyArNzU3LDIyIEBACiAJCX0KIAl9CiAKLQljcmVhdGVfcHJvY19pZGVfaW50ZXJmYWNlcygpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJdTggaWR4WzJdID0geyBpbmRleF9saXN0W2ldLmIubG93LCBpbmRleF9saXN0W2ldLmIuaGlnaCB9OworCQlpbnQgajsKKworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQlpZiAoKGlkeFtqXSAmIDB4ZjApICE9IDB4ZjApCisJCQkJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChpZGVfaHdpZnMgKyBpZHhbal0pOworCQl9CisJfQogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXR1cF9wY2lfZGV2aWNlcyk7CiAKKyNpZmRlZiBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUgogLyoKICAqCU1vZHVsZSBpbnRlcmZhY2VzCiAgKi8KQEAgLTg2MSwzICs4NzksNCBAQAogCQlfX3BjaV9yZWdpc3Rlcl9kcml2ZXIoZCwgZC0+ZHJpdmVyLm93bmVyLCBkLT5kcml2ZXIubW9kX25hbWUpOwogCX0KIH0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnIGIvZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnCmluZGV4IDYxZDc4MDkuLjgwMTJiM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvS2NvbmZpZworKysgYi9kcml2ZXJzL2llZWUxMzk0L0tjb25maWcKQEAgLTEsNCArMSw3IEBACiBtZW51ICJJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJIHx8IEJST0tFTgorCitzb3VyY2UgImRyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZyIKIAogY29uZmlnIElFRUUxMzk0CiAJdHJpc3RhdGUgIklFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYwppbmRleCAwMjZlMzhmLi4yMDgxNDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKQEAgLTk0LDcgKzk0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwppbmRleCAyMjk2ZDQzLi41ZjAyNmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CkBAIC0yMzUsNiArMjM2LDkgQEAKIC8qIFRoaXMgaXMgY2FsbGVkIGFmdGVyIGFuICJpZmRvd24iICovCiBzdGF0aWMgaW50IGV0aGVyMTM5NF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJLyogZmx1c2ggcHJpdi0+d2FrZSAqLworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcmV0dXJuIDA7CiB9CkBAIC01MzEsNiArNTM1LDM3IEBACiB9CiAKIC8qCisgKiBXYWtlIHRoZSBxdWV1ZSB1cCBhZnRlciBjb21tb25seSBlbmNvdW50ZXJlZCB0cmFuc21pdCBmYWlsdXJlIGNvbmRpdGlvbnMgYXJlCisgKiBob3BlZnVsbHkgb3Zlci4gIEN1cnJlbnRseSBvbmx5IHRsYWJlbCBleGhhdXN0aW9uIGlzIGFjY291bnRlZCBmb3IuCisgKi8KK3N0YXRpYyB2b2lkIGV0aGVyMTM5NF93YWtlX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZXRoMTM5NF9wcml2ICpwcml2OworCXN0cnVjdCBocHNiX3BhY2tldCAqcGFja2V0OworCisJcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZXRoMTM5NF9wcml2LCB3YWtlKTsKKwlwYWNrZXQgPSBocHNiX2FsbG9jX3BhY2tldCgwKTsKKworCS8qIFRoaXMgaXMgcmVhbGx5IGJhZCwgYnV0IHVuamFtIHRoZSBxdWV1ZSBhbnl3YXkuICovCisJaWYgKCFwYWNrZXQpCisJCWdvdG8gb3V0OworCisJcGFja2V0LT5ob3N0ID0gcHJpdi0+aG9zdDsKKwlwYWNrZXQtPm5vZGVfaWQgPSBwcml2LT53YWtlX25vZGU7CisJLyoKKwkgKiBBIHRyYW5zYWN0aW9uIGxhYmVsIGlzIGFsbCB3ZSByZWFsbHkgd2FudC4gIElmIHdlIGdldCBvbmUsIGl0IGFsbW9zdAorCSAqIGFsd2F5cyBtZWFucyB3ZSBjYW4gZ2V0IGEgbG90IG1vcmUgYmVjYXVzZSB0aGUgaWVlZTEzOTQgY29yZSByZWN5Y2xlZAorCSAqIGEgd2hvbGUgYmF0Y2ggb2YgdGxhYmVscywgYXQgbGFzdC4KKwkgKi8KKwlpZiAoaHBzYl9nZXRfdGxhYmVsKHBhY2tldCkgPT0gMCkKKwkJaHBzYl9mcmVlX3RsYWJlbChwYWNrZXQpOworCisJaHBzYl9mcmVlX3BhY2tldChwYWNrZXQpOworb3V0OgorCW5ldGlmX3dha2VfcXVldWUocHJpdi0+d2FrZV9kZXYpOworfQorCisvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZXZlcnkgdGltZSBhIGNhcmQgaXMgZm91bmQuIEl0IGlzIGdlbmVyYWxseSBjYWxsZWQKICAqIHdoZW4gdGhlIG1vZHVsZSBpcyBpbnN0YWxsZWQuIFRoaXMgaXMgd2hlcmUgd2UgYWRkIGFsbCBvZiBvdXIgZXRoZXJuZXQKICAqIGRldmljZXMuIE9uZSBmb3IgZWFjaCBob3N0LgpAQCAtNTY0LDE2ICs1OTksMTcgQEAKIAl9CiAKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0jaWYgMAotCS8qIEZJWE1FIC0gSXMgdGhpcyB0aGUgY29ycmVjdCBwYXJlbnQgZGV2aWNlIGFueXdheT8gKi8KLQlTRVRfTkVUREVWX0RFVihkZXYsICZob3N0LT5kZXZpY2UpOwotI2VuZGlmCisKKwkvKiBUaGlzIHVzZWQgdG8gYmUgJmhvc3QtPmRldmljZSBpbiBMaW51eCAyLjYuMjAgYW5kIGJlZm9yZS4gKi8KKwlTRVRfTkVUREVWX0RFVihkZXYsIGhvc3QtPmRldmljZS5wYXJlbnQpOwogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmlwX25vZGVfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCXByaXYtPmhvc3QgPSBob3N0OwogCXByaXYtPmxvY2FsX2ZpZm8gPSBmaWZvX2FkZHI7CisJSU5JVF9XT1JLKCZwcml2LT53YWtlLCBldGhlcjEzOTRfd2FrZV9xdWV1ZSk7CisJcHJpdi0+d2FrZV9kZXYgPSBkZXY7CiAKIAloaSA9IGhwc2JfY3JlYXRlX2hvc3RpbmZvKCZldGgxMzk0X2hpZ2hsZXZlbCwgaG9zdCwgc2l6ZW9mKCpoaSkpOwogCWlmIChoaSA9PSBOVUxMKSB7CkBAIC0xMzkwLDIyICsxNDI2LDE3IEBACiAJCQkJICAgICAgIHU2NCBhZGRyLCB2b2lkICpkYXRhLCBpbnQgdHhfbGVuKQogewogCXAtPm5vZGVfaWQgPSBub2RlOwotCXAtPmRhdGEgPSBOVUxMOworCisJaWYgKGhwc2JfZ2V0X3RsYWJlbChwKSkKKwkJcmV0dXJuIC1FQUdBSU47CiAKIAlwLT50Y29kZSA9IFRDT0RFX1dSSVRFQjsKLQlwLT5oZWFkZXJbMV0gPSBob3N0LT5ub2RlX2lkIDw8IDE2IHwgYWRkciA+PiAzMjsKLQlwLT5oZWFkZXJbMl0gPSBhZGRyICYgMHhmZmZmZmZmZjsKLQogCXAtPmhlYWRlcl9zaXplID0gMTY7CiAJcC0+ZXhwZWN0X3Jlc3BvbnNlID0gMTsKLQotCWlmIChocHNiX2dldF90bGFiZWwocCkpIHsKLQkJRVRIMTM5NF9QUklOVF9HKEtFUk5fRVJSLCAiT3V0IG9mIHRsYWJlbHNcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQogCXAtPmhlYWRlclswXSA9CiAJCXAtPm5vZGVfaWQgPDwgMTYgfCBwLT50bGFiZWwgPDwgMTAgfCAxIDw8IDggfCBUQ09ERV9XUklURUIgPDwgNDsKLQorCXAtPmhlYWRlclsxXSA9IGhvc3QtPm5vZGVfaWQgPDwgMTYgfCBhZGRyID4+IDMyOworCXAtPmhlYWRlclsyXSA9IGFkZHIgJiAweGZmZmZmZmZmOwogCXAtPmhlYWRlclszXSA9IHR4X2xlbiA8PCAxNjsKIAlwLT5kYXRhX3NpemUgPSAodHhfbGVuICsgMykgJiB+MzsKIAlwLT5kYXRhID0gZGF0YTsKQEAgLTE0NTEsNyArMTQ4Miw3IEBACiAKIAlwYWNrZXQgPSBldGhlcjEzOTRfYWxsb2NfY29tbW9uX3BhY2tldChwcml2LT5ob3N0KTsKIAlpZiAoIXBhY2tldCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChwdGFzay0+dHhfdHlwZSA9PSBFVEgxMzk0X0dBU1ApIHsKIAkJaW50IGxlbmd0aCA9IHR4X2xlbiArIDIgKiBzaXplb2YocXVhZGxldF90KTsKQEAgLTE0NjIsNyArMTQ5Myw3IEBACiAJCQkJCSAgICAgICBwdGFzay0+YWRkciwgcHRhc2stPnNrYi0+ZGF0YSwKIAkJCQkJICAgICAgIHR4X2xlbikpIHsKIAkJaHBzYl9mcmVlX3BhY2tldChwYWNrZXQpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCXB0YXNrLT5wYWNrZXQgPSBwYWNrZXQ7CkBAIC0xNDcxLDcgKzE1MDIsNyBAQAogCiAJaWYgKGhwc2Jfc2VuZF9wYWNrZXQocGFja2V0KSA8IDApIHsKIAkJZXRoZXIxMzk0X2ZyZWVfcGFja2V0KHBhY2tldCk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNTE0LDEzICsxNTQ1LDE4IEBACiAKIAlwdGFzay0+b3V0c3RhbmRpbmdfcGt0cy0tOwogCWlmIChwdGFzay0+b3V0c3RhbmRpbmdfcGt0cyA+IDAgJiYgIWZhaWwpIHsKLQkJaW50IHR4X2xlbjsKKwkJaW50IHR4X2xlbiwgZXJyOwogCiAJCS8qIEFkZCB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIgdG8gdGhlIGZyYWdtZW50ICovCiAJCXR4X2xlbiA9IGV0aGVyMTM5NF9lbmNhcHN1bGF0ZShwdGFzay0+c2tiLCBwdGFzay0+bWF4X3BheWxvYWQsCiAJCQkJCSAgICAgICAmcHRhc2stPmhkcik7Ci0JCWlmIChldGhlcjEzOTRfc2VuZF9wYWNrZXQocHRhc2ssIHR4X2xlbikpCisJCWVyciA9IGV0aGVyMTM5NF9zZW5kX3BhY2tldChwdGFzaywgdHhfbGVuKTsKKwkJaWYgKGVycikgeworCQkJaWYgKGVyciA9PSAtRUFHQUlOKQorCQkJCUVUSDEzOTRfUFJJTlRfRyhLRVJOX0VSUiwgIk91dCBvZiB0bGFiZWxzXG4iKTsKKwogCQkJZXRoZXIxMzk0X2RnX2NvbXBsZXRlKHB0YXNrLCAxKTsKKwkJfQogCX0gZWxzZSB7CiAJCWV0aGVyMTM5NF9kZ19jb21wbGV0ZShwdGFzaywgZmFpbCk7CiAJfQpAQCAtMTYzMywxMCArMTY2OSwxOCBAQAogCS8qIEFkZCB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIgdG8gdGhlIGZyYWdtZW50ICovCiAJdHhfbGVuID0gZXRoZXIxMzk0X2VuY2Fwc3VsYXRlKHNrYiwgbWF4X3BheWxvYWQsICZwdGFzay0+aGRyKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlpZiAoZXRoZXIxMzk0X3NlbmRfcGFja2V0KHB0YXNrLCB0eF9sZW4pKQotCQlnb3RvIGZhaWw7CisJaWYgKGV0aGVyMTM5NF9zZW5kX3BhY2tldChwdGFzaywgdHhfbGVuKSkgeworCQlpZiAoZGVzdF9ub2RlID09IChMT0NBTF9CVVMgfCBBTExfTk9ERVMpKQorCQkJZ290byBmYWlsOwogCi0JbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQkvKiBNb3N0IGZhaWx1cmVzIG9mIGV0aGVyMTM5NF9zZW5kX3BhY2tldCBhcmUgcmVjb3ZlcmFibGUuICovCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJcHJpdi0+d2FrZV9ub2RlID0gZGVzdF9ub2RlOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53YWtlKTsKKwkJa21lbV9jYWNoZV9mcmVlKHBhY2tldF90YXNrX2NhY2hlLCBwdGFzayk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogZmFpbDoKIAlpZiAocHRhc2spCkBAIC0xNjUwLDkgKzE2OTQsNiBAQAogCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQogCS8qCiAJICogRklYTUU6IEFjY29yZGluZyB0byBhIHBhdGNoIGZyb20gMjAwMy0wMi0yNiwgInJldHVybmluZyBub24temVybwogCSAqIGNhdXNlcyBzZXJpb3VzIHByb2JsZW1zIiBoZXJlLCBhbGxlZ2VkbHkuICBCZWZvcmUgdGhhdCBwYXRjaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5oIGIvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmgKaW5kZXggYTM0MzllZS4uNGYzZTJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmgKQEAgLTY2LDYgKzY2LDEwIEBACiAJaW50IGJjX2RnbDsJCQkvKiBPdXRnb2luZyBicm9hZGNhc3QgZGF0YWdyYW0gbGFiZWwgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGlwX25vZGVfbGlzdDsJLyogTGlzdCBvZiBJUCBjYXBhYmxlIG5vZGVzCSAqLwogCXN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWRfbGlzdFtBTExfTk9ERVNdOyAvKiBDYWNoZWQgdW5pdCBkaXIgbGlzdCAqLworCisJc3RydWN0IHdvcmtfc3RydWN0IHdha2U7CS8qIFdha2UgdXAgYWZ0ZXIgeG1pdCBmYWlsdXJlCSAqLworCXN0cnVjdCBuZXRfZGV2aWNlICp3YWtlX2RldjsJLyogU3R1cGlkIGJhY2tsaW5rIGZvciAud2FrZQkgKi8KKwlub2RlaWRfdCB3YWtlX25vZGU7CQkvKiBEZXN0aW5hdGlvbiBvZiBmYWlsZWQgeG1pdAkgKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYwppbmRleCA2YTFhMDU3Li44MWIzODY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYwpAQCAtOTc2LDcgKzk3Niw4IEBACiAKIAl1ZC0+bmUgPSBuZTsKIAl1ZC0+aWdub3JlX2RyaXZlciA9IGlnbm9yZV9kcml2ZXJzOwotCXVkLT5hZGRyZXNzID0gdWRfa3YtPm9mZnNldCArIENTUjEyMTJfQ09ORklHX1JPTV9TUEFDRV9CQVNFOworCXVkLT5hZGRyZXNzID0gdWRfa3YtPm9mZnNldCArIENTUjEyMTJfUkVHSVNURVJfU1BBQ0VfQkFTRTsKKwl1ZC0+ZGlyZWN0b3J5X2lkID0gdWQtPmFkZHJlc3MgJiAweGZmZmZmZjsKIAl1ZC0+dWRfa3YgPSB1ZF9rdjsKIAl1ZC0+aWQgPSAoKmlkKSsrOwogCkBAIC0xMDg1LDYgKzEwODYsMTAgQEAKIAogCQkJYnJlYWs7CiAKKwkJY2FzZSBDU1IxMjEyX0tWX0lEX0RJUkVDVE9SWV9JRDoKKwkJCXVkLT5kaXJlY3RvcnlfaWQgPSBrdi0+dmFsdWUuaW1tZWRpYXRlOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC0xNzAyLDcgKzE3MDcsNyBAQAogCQkJZ2VuZXJhdGlvbiA9IGdldF9ocHNiX2dlbmVyYXRpb24oaG9zdCk7CiAKIAkJCS8qIElmIHdlIGdldCBhIHJlc2V0IGJlZm9yZSB3ZSBhcmUgZG9uZSB3YWl0aW5nLCB0aGVuCi0JCQkgKiBzdGFydCB0aGUgdGhlIHdhaXRpbmcgb3ZlciBhZ2FpbiAqLworCQkJICogc3RhcnQgdGhlIHdhaXRpbmcgb3ZlciBhZ2FpbiAqLwogCQkJaWYgKGdlbmVyYXRpb24gIT0gZykKIAkJCQlnID0gZ2VuZXJhdGlvbiwgaSA9IDA7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oIGIvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmgKaW5kZXggZTdhYzY4My4uNDUzMGIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmgKQEAgLTc1LDYgKzc1LDcgQEAKIAlzdHJ1Y3QgY3NyMTIxMl9rZXl2YWwgKm1vZGVsX25hbWVfa3Y7CiAJcXVhZGxldF90IHNwZWNpZmllcl9pZDsKIAlxdWFkbGV0X3QgdmVyc2lvbjsKKwlxdWFkbGV0X3QgZGlyZWN0b3J5X2lkOwogCiAJdW5zaWduZWQgaW50IGlkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCmluZGV4IGM2YWVmZDkuLmYxZDA1ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CkBAIC05MzcsNiArOTM2LDcgQEAKIAlzdHJ1Y3QgaHBzYl9wYWNrZXQgKnBhY2tldDsKIAlpbnQgaGVhZGVyX2xlbmd0aCA9IHJlcS0+cmVxLm1pc2MgJiAweGZmZmY7CiAJaW50IGV4cGVjdF9yZXNwb25zZSA9IHJlcS0+cmVxLm1pc2MgPj4gMTY7CisJc2l6ZV90IGRhdGFfc2l6ZTsKIAogCWlmIChoZWFkZXJfbGVuZ3RoID4gcmVxLT5yZXEubGVuZ3RoIHx8IGhlYWRlcl9sZW5ndGggPCAxMiB8fAogCSAgICBoZWFkZXJfbGVuZ3RoID4gRklFTERfU0laRU9GKHN0cnVjdCBocHNiX3BhY2tldCwgaGVhZGVyKSkgewpAQCAtOTQ2LDcgKzk0Niw4IEBACiAJCXJldHVybiBzaXplb2Yoc3RydWN0IHJhdzEzOTRfcmVxdWVzdCk7CiAJfQogCi0JcGFja2V0ID0gaHBzYl9hbGxvY19wYWNrZXQocmVxLT5yZXEubGVuZ3RoIC0gaGVhZGVyX2xlbmd0aCk7CisJZGF0YV9zaXplID0gcmVxLT5yZXEubGVuZ3RoIC0gaGVhZGVyX2xlbmd0aDsKKwlwYWNrZXQgPSBocHNiX2FsbG9jX3BhY2tldChkYXRhX3NpemUpOwogCXJlcS0+cGFja2V0ID0gcGFja2V0OwogCWlmICghcGFja2V0KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTk2MSw3ICs5NjIsNyBAQAogCiAJaWYgKGNvcHlfZnJvbV91c2VyCiAJICAgIChwYWNrZXQtPmRhdGEsIGludDJwdHIocmVxLT5yZXEuc2VuZGIpICsgaGVhZGVyX2xlbmd0aCwKLQkgICAgIHBhY2tldC0+ZGF0YV9zaXplKSkgeworCSAgICAgZGF0YV9zaXplKSkgewogCQlyZXEtPnJlcS5lcnJvciA9IFJBVzEzOTRfRVJST1JfTUVNRkFVTFQ7CiAJCXJlcS0+cmVxLmxlbmd0aCA9IDA7CiAJCXF1ZXVlX2NvbXBsZXRlX3JlcShyZXEpOwpAQCAtOTc1LDcgKzk3Niw3IEBACiAJcGFja2V0LT5ob3N0ID0gZmktPmhvc3Q7CiAJcGFja2V0LT5leHBlY3RfcmVzcG9uc2UgPSBleHBlY3RfcmVzcG9uc2U7CiAJcGFja2V0LT5oZWFkZXJfc2l6ZSA9IGhlYWRlcl9sZW5ndGg7Ci0JcGFja2V0LT5kYXRhX3NpemUgPSByZXEtPnJlcS5sZW5ndGggLSBoZWFkZXJfbGVuZ3RoOworCXBhY2tldC0+ZGF0YV9zaXplID0gZGF0YV9zaXplOwogCiAJcmVxLT5yZXEubGVuZ3RoID0gMDsKIAlocHNiX3NldF9wYWNrZXRfY29tcGxldGVfdGFzayhwYWNrZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCmluZGV4IDRjYjZmYTIuLjNmODczY2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgpAQCAtMTkzLDYgKzE5NCwyNyBAQAogCSIsIG92ZXJyaWRlIGludGVybmFsIGJsYWNrbGlzdCA9ICIgX19zdHJpbmdpZnkoU0JQMl9XT1JLQVJPVU5EX09WRVJSSURFKQogCSIsIG9yIGEgY29tYmluYXRpb24pIik7CiAKKy8qCisgKiBUaGlzIGluZmx1ZW5jZXMgdGhlIGZvcm1hdCBvZiB0aGUgc3lzZnMgYXR0cmlidXRlCisgKiAvc3lzL2J1cy9zY3NpL2RldmljZXMvLi4uL2llZWUxMzk0X2lkLgorICoKKyAqIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyBsaWtlIGluIG9sZGVyIGtlcm5lbHM6ICAlMDE2THg6JWQ6JWQKKyAqIEl0IGNvbnRhaW5zIHRoZSB0YXJnZXQncyBFVUktNjQsIGEgbnVtYmVyIGdpdmVuIHRvIHRoZSBsb2dpY2FsIHVuaXQgYnkKKyAqIHRoZSBpZWVlMTM5NCBkcml2ZXIncyBub2RlbWdyIChzdGFydGluZyBhdCAwKSwgYW5kIHRoZSBMVU4uCisgKgorICogVGhlIGxvbmcgZm9ybWF0IGlzOiAgJTAxNkx4OiUwNng6JTA0eAorICogSXQgY29udGFpbnMgdGhlIHRhcmdldCdzIEVVSS02NCwgdGhlIHVuaXQgZGlyZWN0b3J5J3MgZGlyZWN0b3J5X0lEIGFzIHBlcgorICogSUVFRSAxMjEyIGNsYXVzZSA3LjcuMTksIGFuZCB0aGUgTFVOLiAgVGhpcyBmb3JtYXQgY29tZXMgY2xvc2VzdCB0byB0aGUKKyAqIGZvcm1hdCBvZiBTQlAoLTMpIHRhcmdldCBwb3J0IGFuZCBsb2dpY2FsIHVuaXQgaWRlbnRpZmllciBhcyBwZXIgU0FNIChTQ1NJCisgKiBBcmNoaXRlY3R1cmUgTW9kZWwpIHJldi4yIHRvIDQgYW5uZXggQS4gIFRoZXJlZm9yZSBhbmQgYmVjYXVzZSBpdCBpcworICogaW5kZXBlbmRlbnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpZWVlMTM5NCBub2RlbWdyLCB0aGUgbG9uZ2VyIGZvcm1hdAorICogaXMgcmVjb21tZW5kZWQgZm9yIGZ1dHVyZSB1c2UuCisgKi8KK3N0YXRpYyBpbnQgc2JwMl9sb25nX3N5c2ZzX2llZWUxMzk0X2lkOworbW9kdWxlX3BhcmFtX25hbWVkKGxvbmdfaWVlZTEzOTRfaWQsIHNicDJfbG9uZ19zeXNmc19pZWVlMTM5NF9pZCwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGxvbmdfaWVlZTEzOTRfaWQsICI4KzMrMiBieXRlcyBmb3JtYXQgb2YgaWVlZTEzOTRfaWQgaW4gc3lzZnMgIgorCQkgIihkZWZhdWx0ID0gYmFja3dhcmRzLWNvbXBhdGlibGUgPSBOLCBTQU0tY29uZm9ybWluZyA9IFkpIik7CisKIAogI2RlZmluZSBTQlAyX0lORk8oZm10LCBhcmdzLi4uKQlIUFNCX0lORk8oInNicDI6ICJmbXQsICMjIGFyZ3MpCiAjZGVmaW5lIFNCUDJfRVJSKGZtdCwgYXJncy4uLikJSFBTQl9FUlIoInNicDI6ICJmbXQsICMjIGFyZ3MpCkBAIC0yMDk5LDggKzIxMjEsMTQgQEAKIAlpZiAoIShsdSA9IChzdHJ1Y3Qgc2JwMl9sdSAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhWzBdKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlMDE2THg6JWQ6JWRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbHUtPm5lLT5ndWlkLAotCQkgICAgICAgbHUtPnVkLT5pZCwgT1JCX1NFVF9MVU4obHUtPmx1bikpOworCWlmIChzYnAyX2xvbmdfc3lzZnNfaWVlZTEzOTRfaWQpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwMTZMeDolMDZ4OiUwNHhcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylsdS0+bmUtPmd1aWQsCisJCQkJbHUtPnVkLT5kaXJlY3RvcnlfaWQsIE9SQl9TRVRfTFVOKGx1LT5sdW4pKTsKKwllbHNlCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwMTZMeDolZDolZFxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWx1LT5uZS0+Z3VpZCwKKwkJCQlsdS0+dWQtPmlkLCBPUkJfU0VUX0xVTihsdS0+bHVuKSk7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIkJlbiBDb2xsaW5zIDxiY29sbGluc0BkZWJpYW4ub3JnPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKaW5kZXggOTVjYTI2ZC4uODdlYmQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnCmluZGV4IDY2YjM2ZGUuLjk5NGRlY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnCkBAIC0xLDQgKzEsNSBAQAogbWVudSAiSW5maW5pQmFuZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gSEFTX0lPTUVNCiAKIGNvbmZpZyBJTkZJTklCQU5ECiAJZGVwZW5kcyBvbiBQQ0kgfHwgQlJPS0VOCkBAIC0yOSw2ICszMCwxMSBAQAogCSAgbGliaWJ2ZXJicywgbGliaWJjbSBhbmQgYSBoYXJkd2FyZSBkcml2ZXIgbGlicmFyeSBmcm9tCiAJICA8aHR0cDovL3d3dy5vcGVuaWIub3JnPi4KIAorY29uZmlnIElORklOSUJBTkRfVVNFUl9NRU0KKwlib29sCisJZGVwZW5kcyBvbiBJTkZJTklCQU5EX1VTRVJfQUNDRVNTICE9IG4KKwlkZWZhdWx0IHkKKwogY29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOUwogCWJvb2wKIAlkZXBlbmRzIG9uIElORklOSUJBTkQgJiYgSU5FVApAQCAtNDAsNiArNDYsOCBAQAogc291cmNlICJkcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5maW5pYmFuZC9NYWtlZmlsZQppbmRleCBkYTIwNjZjLi43NWYzMjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL01ha2VmaWxlCkBAIC00LDYgKzQsNyBAQAogb2JqLSQoQ09ORklHX0lORklOSUJBTkRfRUhDQSkJCSs9IGh3L2VoY2EvCiBvYmotJChDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMCkJKz0gaHcvYW1zbzExMDAvCiBvYmotJChDT05GSUdfSU5GSU5JQkFORF9DWEdCMykJCSs9IGh3L2N4Z2IzLworb2JqLSQoQ09ORklHX01MWDRfSU5GSU5JQkFORCkJCSs9IGh3L21seDQvCiBvYmotJChDT05GSUdfSU5GSU5JQkFORF9JUE9JQikJCSs9IHVscC9pcG9pYi8KIG9iai0kKENPTkZJR19JTkZJTklCQU5EX1NSUCkJCSs9IHVscC9zcnAvCiBvYmotJChDT05GSUdfSU5GSU5JQkFORF9JU0VSKQkJKz0gdWxwL2lzZXIvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCmluZGV4IDE4OWU1ZDQuLmNiMWFiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCkBAIC05LDYgKzksNyBAQAogCiBpYl9jb3JlLXkgOj0JCQlwYWNrZXIubyB1ZF9oZWFkZXIubyB2ZXJicy5vIHN5c2ZzLm8gXAogCQkJCWRldmljZS5vIGZtcl9wb29sLm8gY2FjaGUubworaWJfY29yZS0kKENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUVNKSArPSB1bWVtLm8KIAogaWJfbWFkLXkgOj0JCQltYWQubyBzbWkubyBhZ2VudC5vIG1hZF9ybXBwLm8KIApAQCAtMjgsNSArMjksNCBAQAogCiBpYl91Y20teSA6PQkJCXVjbS5vCiAKLWliX3V2ZXJicy15IDo9CQkJdXZlcmJzX21haW4ubyB1dmVyYnNfY21kLm8gdXZlcmJzX21lbS5vIFwKLQkJCQl1dmVyYnNfbWFyc2hhbGwubworaWJfdXZlcmJzLXkgOj0JCQl1dmVyYnNfbWFpbi5vIHV2ZXJic19jbWQubyB1dmVyYnNfbWFyc2hhbGwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2FjaGUuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NhY2hlLmMKaW5kZXggNTU4YzlhMC4uZTg1ZjcwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2FjaGUuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jYWNoZS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlIDxyZG1hL2liX2NhY2hlLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IGVmZjU5MWQuLjQwYzAwNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtMzA2LDcgKzMwNiw5IEBACiAJZG8gewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY20ubG9jaywgZmxhZ3MpOwogCQlyZXQgPSBpZHJfZ2V0X25ld19hYm92ZSgmY20ubG9jYWxfaWRfdGFibGUsIGNtX2lkX3ByaXYsCi0JCQkJCW5leHRfaWQrKywgJmlkKTsKKwkJCQkJbmV4dF9pZCwgJmlkKTsKKwkJaWYgKCFyZXQpCisJCQluZXh0X2lkID0gKCh1bnNpZ25lZCkgaWQgKyAxKSAmIE1BWF9JRF9NQVNLOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbS5sb2NrLCBmbGFncyk7CiAJfSB3aGlsZSggKHJldCA9PSAtRUFHQUlOKSAmJiBpZHJfcHJlX2dldCgmY20ubG9jYWxfaWRfdGFibGUsIEdGUF9LRVJORUwpICk7CiAKQEAgLTEyOTUsMjYgKzEyOTcsMjkgQEAKIAogCXJlcV9tc2cgPSAoc3RydWN0IGNtX3JlcV9tc2cgKil3b3JrLT5tYWRfcmVjdl93Yy0+cmVjdl9idWYubWFkOwogCi0JLyogQ2hlY2sgZm9yIGR1cGxpY2F0ZSBSRVEgYW5kIHN0YWxlIGNvbm5lY3Rpb25zLiAqLworCS8qIENoZWNrIGZvciBwb3NzaWJsZSBkdXBsaWNhdGUgUkVRLiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbS5sb2NrLCBmbGFncyk7CiAJdGltZXdhaXRfaW5mbyA9IGNtX2luc2VydF9yZW1vdGVfaWQoY21faWRfcHJpdi0+dGltZXdhaXRfaW5mbyk7Ci0JaWYgKCF0aW1ld2FpdF9pbmZvKQotCQl0aW1ld2FpdF9pbmZvID0gY21faW5zZXJ0X3JlbW90ZV9xcG4oY21faWRfcHJpdi0+dGltZXdhaXRfaW5mbyk7Ci0KIAlpZiAodGltZXdhaXRfaW5mbykgewogCQljdXJfY21faWRfcHJpdiA9IGNtX2dldF9pZCh0aW1ld2FpdF9pbmZvLT53b3JrLmxvY2FsX2lkLAogCQkJCQkgICB0aW1ld2FpdF9pbmZvLT53b3JrLnJlbW90ZV9pZCk7Ci0JCWNtX2NsZWFudXBfdGltZXdhaXQoY21faWRfcHJpdi0+dGltZXdhaXRfaW5mbyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtLmxvY2ssIGZsYWdzKTsKIAkJaWYgKGN1cl9jbV9pZF9wcml2KSB7CiAJCQljbV9kdXBfcmVxX2hhbmRsZXIod29yaywgY3VyX2NtX2lkX3ByaXYpOwogCQkJY21fZGVyZWZfaWQoY3VyX2NtX2lkX3ByaXYpOwotCQl9IGVsc2UKLQkJCWNtX2lzc3VlX3Jlaih3b3JrLT5wb3J0LCB3b3JrLT5tYWRfcmVjdl93YywKLQkJCQkgICAgIElCX0NNX1JFSl9TVEFMRV9DT05OLCBDTV9NU0dfUkVTUE9OU0VfUkVRLAotCQkJCSAgICAgTlVMTCwgMCk7Ci0JCWxpc3Rlbl9jbV9pZF9wcml2ID0gTlVMTDsKLQkJZ290byBvdXQ7CisJCX0KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogQ2hlY2sgZm9yIHN0YWxlIGNvbm5lY3Rpb25zLiAqLworCXRpbWV3YWl0X2luZm8gPSBjbV9pbnNlcnRfcmVtb3RlX3FwbihjbV9pZF9wcml2LT50aW1ld2FpdF9pbmZvKTsKKwlpZiAodGltZXdhaXRfaW5mbykgeworCQljbV9jbGVhbnVwX3RpbWV3YWl0KGNtX2lkX3ByaXYtPnRpbWV3YWl0X2luZm8pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbS5sb2NrLCBmbGFncyk7CisJCWNtX2lzc3VlX3Jlaih3b3JrLT5wb3J0LCB3b3JrLT5tYWRfcmVjdl93YywKKwkJCSAgICAgSUJfQ01fUkVKX1NUQUxFX0NPTk4sIENNX01TR19SRVNQT05TRV9SRVEsCisJCQkgICAgIE5VTEwsIDApOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAkvKiBGaW5kIG1hdGNoaW5nIGxpc3RlbiByZXF1ZXN0LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwppbmRleCBmZGU5MmNlLi4yZWI1MmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwpAQCAtMzQ2LDEyICszNDYsMzMgQEAKIAkJY29tcGxldGUoJmlkX3ByaXYtPmNvbXApOwogfQogCi1zdGF0aWMgdm9pZCBjbWFfcmVsZWFzZV9yZW1vdmUoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3N0YXRpYyBpbnQgY21hX2Rpc2FibGVfcmVtb3ZlKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsCisJCQkgICAgICBlbnVtIGNtYV9zdGF0ZSBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChpZF9wcml2LT5zdGF0ZSA9PSBzdGF0ZSkgeworCQlhdG9taWNfaW5jKCZpZF9wcml2LT5kZXZfcmVtb3ZlKTsKKwkJcmV0ID0gMDsKKwl9IGVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZF9wcml2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY21hX2VuYWJsZV9yZW1vdmUoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaWRfcHJpdi0+ZGV2X3JlbW92ZSkpCiAJCXdha2VfdXAoJmlkX3ByaXYtPndhaXRfcmVtb3ZlKTsKIH0KIAorc3RhdGljIGludCBjbWFfaGFzX2NtX2RldihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCXJldHVybiAoaWRfcHJpdi0+aWQuZGV2aWNlICYmIGlkX3ByaXYtPmNtX2lkLmliKTsKK30KKwogc3RydWN0IHJkbWFfY21faWQgKnJkbWFfY3JlYXRlX2lkKHJkbWFfY21fZXZlbnRfaGFuZGxlciBldmVudF9oYW5kbGVyLAogCQkJCSAgdm9pZCAqY29udGV4dCwgZW51bSByZG1hX3BvcnRfc3BhY2UgcHMpCiB7CkBAIC04ODQsOSArOTA1LDggQEAKIAlzdHJ1Y3QgcmRtYV9jbV9ldmVudCBldmVudDsKIAlpbnQgcmV0ID0gMDsKIAotCWF0b21pY19pbmMoJmlkX3ByaXYtPmRldl9yZW1vdmUpOwotCWlmICghY21hX2NvbXAoaWRfcHJpdiwgQ01BX0NPTk5FQ1QpKQotCQlnb3RvIG91dDsKKwlpZiAoY21hX2Rpc2FibGVfcmVtb3ZlKGlkX3ByaXYsIENNQV9DT05ORUNUKSkKKwkJcmV0dXJuIDA7CiAKIAltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YgZXZlbnQpOwogCXN3aXRjaCAoaWJfZXZlbnQtPmV2ZW50KSB7CkBAIC05NDIsMTIgKzk2MiwxMiBAQAogCQkvKiBEZXN0cm95IHRoZSBDTSBJRCBieSByZXR1cm5pbmcgYSBub24temVybyB2YWx1ZS4gKi8KIAkJaWRfcHJpdi0+Y21faWQuaWIgPSBOVUxMOwogCQljbWFfZXhjaChpZF9wcml2LCBDTUFfREVTVFJPWUlORyk7Ci0JCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKwkJY21hX2VuYWJsZV9yZW1vdmUoaWRfcHJpdik7CiAJCXJkbWFfZGVzdHJveV9pZCgmaWRfcHJpdi0+aWQpOwogCQlyZXR1cm4gcmV0OwogCX0KIG91dDoKLQljbWFfcmVsZWFzZV9yZW1vdmUoaWRfcHJpdik7CisJY21hX2VuYWJsZV9yZW1vdmUoaWRfcHJpdik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA1NywxMSArMTA3Nyw4IEBACiAJaW50IG9mZnNldCwgcmV0OwogCiAJbGlzdGVuX2lkID0gY21faWQtPmNvbnRleHQ7Ci0JYXRvbWljX2luYygmbGlzdGVuX2lkLT5kZXZfcmVtb3ZlKTsKLQlpZiAoIWNtYV9jb21wKGxpc3Rlbl9pZCwgQ01BX0xJU1RFTikpIHsKLQkJcmV0ID0gLUVDT05OQUJPUlRFRDsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChjbWFfZGlzYWJsZV9yZW1vdmUobGlzdGVuX2lkLCBDTUFfTElTVEVOKSkKKwkJcmV0dXJuIC1FQ09OTkFCT1JURUQ7CiAKIAltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YgZXZlbnQpOwogCW9mZnNldCA9IGNtYV91c2VyX2RhdGFfb2Zmc2V0KGxpc3Rlbl9pZC0+aWQucHMpOwpAQCAtMTEwMSwxMSArMTExOCwxMSBAQAogCiByZWxlYXNlX2Nvbm5faWQ6CiAJY21hX2V4Y2goY29ubl9pZCwgQ01BX0RFU1RST1lJTkcpOwotCWNtYV9yZWxlYXNlX3JlbW92ZShjb25uX2lkKTsKKwljbWFfZW5hYmxlX3JlbW92ZShjb25uX2lkKTsKIAlyZG1hX2Rlc3Ryb3lfaWQoJmNvbm5faWQtPmlkKTsKIAogb3V0OgotCWNtYV9yZWxlYXNlX3JlbW92ZShsaXN0ZW5faWQpOworCWNtYV9lbmFibGVfcmVtb3ZlKGxpc3Rlbl9pZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTE3MSw5ICsxMTg4LDEwIEBACiAJc3RydWN0IHNvY2thZGRyX2luICpzaW47CiAJaW50IHJldCA9IDA7CiAKLQltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YgZXZlbnQpOwotCWF0b21pY19pbmMoJmlkX3ByaXYtPmRldl9yZW1vdmUpOworCWlmIChjbWFfZGlzYWJsZV9yZW1vdmUoaWRfcHJpdiwgQ01BX0NPTk5FQ1QpKQorCQlyZXR1cm4gMDsKIAorCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZiBldmVudCk7CiAJc3dpdGNoIChpd19ldmVudC0+ZXZlbnQpIHsKIAljYXNlIElXX0NNX0VWRU5UX0NMT1NFOgogCQlldmVudC5ldmVudCA9IFJETUFfQ01fRVZFTlRfRElTQ09OTkVDVEVEOwpAQCAtMTIxNCwxMiArMTIzMiwxMiBAQAogCQkvKiBEZXN0cm95IHRoZSBDTSBJRCBieSByZXR1cm5pbmcgYSBub24temVybyB2YWx1ZS4gKi8KIAkJaWRfcHJpdi0+Y21faWQuaXcgPSBOVUxMOwogCQljbWFfZXhjaChpZF9wcml2LCBDTUFfREVTVFJPWUlORyk7Ci0JCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKwkJY21hX2VuYWJsZV9yZW1vdmUoaWRfcHJpdik7CiAJCXJkbWFfZGVzdHJveV9pZCgmaWRfcHJpdi0+aWQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKwljbWFfZW5hYmxlX3JlbW92ZShpZF9wcml2KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjM0LDExICsxMjUyLDggQEAKIAlpbnQgcmV0OwogCiAJbGlzdGVuX2lkID0gY21faWQtPmNvbnRleHQ7Ci0JYXRvbWljX2luYygmbGlzdGVuX2lkLT5kZXZfcmVtb3ZlKTsKLQlpZiAoIWNtYV9jb21wKGxpc3Rlbl9pZCwgQ01BX0xJU1RFTikpIHsKLQkJcmV0ID0gLUVDT05OQUJPUlRFRDsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChjbWFfZGlzYWJsZV9yZW1vdmUobGlzdGVuX2lkLCBDTUFfTElTVEVOKSkKKwkJcmV0dXJuIC1FQ09OTkFCT1JURUQ7CiAKIAkvKiBDcmVhdGUgYSBuZXcgUkRNQSBpZCBmb3IgdGhlIG5ldyBJVyBDTSBJRCAqLwogCW5ld19jbV9pZCA9IHJkbWFfY3JlYXRlX2lkKGxpc3Rlbl9pZC0+aWQuZXZlbnRfaGFuZGxlciwKQEAgLTEyNTUsMTMgKzEyNzAsMTMgQEAKIAlkZXYgPSBpcF9kZXZfZmluZChpd19ldmVudC0+bG9jYWxfYWRkci5zaW5fYWRkci5zX2FkZHIpOwogCWlmICghZGV2KSB7CiAJCXJldCA9IC1FQUREUk5PVEFWQUlMOwotCQljbWFfcmVsZWFzZV9yZW1vdmUoY29ubl9pZCk7CisJCWNtYV9lbmFibGVfcmVtb3ZlKGNvbm5faWQpOwogCQlyZG1hX2Rlc3Ryb3lfaWQobmV3X2NtX2lkKTsKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IHJkbWFfY29weV9hZGRyKCZjb25uX2lkLT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyLCBkZXYsIE5VTEwpOwogCWlmIChyZXQpIHsKLQkJY21hX3JlbGVhc2VfcmVtb3ZlKGNvbm5faWQpOworCQljbWFfZW5hYmxlX3JlbW92ZShjb25uX2lkKTsKIAkJcmRtYV9kZXN0cm95X2lkKG5ld19jbV9pZCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEyNzAsNyArMTI4NSw3IEBACiAJcmV0ID0gY21hX2FjcXVpcmVfZGV2KGNvbm5faWQpOwogCW11dGV4X3VubG9jaygmbG9jayk7CiAJaWYgKHJldCkgewotCQljbWFfcmVsZWFzZV9yZW1vdmUoY29ubl9pZCk7CisJCWNtYV9lbmFibGVfcmVtb3ZlKGNvbm5faWQpOwogCQlyZG1hX2Rlc3Ryb3lfaWQobmV3X2NtX2lkKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTI5MywxNCArMTMwOCwxNCBAQAogCQkvKiBVc2VyIHdhbnRzIHRvIGRlc3Ryb3kgdGhlIENNIElEICovCiAJCWNvbm5faWQtPmNtX2lkLml3ID0gTlVMTDsKIAkJY21hX2V4Y2goY29ubl9pZCwgQ01BX0RFU1RST1lJTkcpOwotCQljbWFfcmVsZWFzZV9yZW1vdmUoY29ubl9pZCk7CisJCWNtYV9lbmFibGVfcmVtb3ZlKGNvbm5faWQpOwogCQlyZG1hX2Rlc3Ryb3lfaWQoJmNvbm5faWQtPmlkKTsKIAl9CiAKIG91dDoKIAlpZiAoZGV2KQogCQlkZXZfcHV0KGRldik7Ci0JY21hX3JlbGVhc2VfcmVtb3ZlKGxpc3Rlbl9pZCk7CisJY21hX2VuYWJsZV9yZW1vdmUobGlzdGVuX2lkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTE5LDcgKzE1MzQsNyBAQAogCQlkZXN0cm95ID0gMTsKIAl9CiBvdXQ6Ci0JY21hX3JlbGVhc2VfcmVtb3ZlKGlkX3ByaXYpOworCWNtYV9lbmFibGVfcmVtb3ZlKGlkX3ByaXYpOwogCWNtYV9kZXJlZl9pZChpZF9wcml2KTsKIAlpZiAoZGVzdHJveSkKIAkJcmRtYV9kZXN0cm95X2lkKCZpZF9wcml2LT5pZCk7CkBAIC0xNzExLDEzICsxNzI2LDEzIEBACiAKIAlpZiAoaWRfcHJpdi0+aWQuZXZlbnRfaGFuZGxlcigmaWRfcHJpdi0+aWQsICZldmVudCkpIHsKIAkJY21hX2V4Y2goaWRfcHJpdiwgQ01BX0RFU1RST1lJTkcpOwotCQljbWFfcmVsZWFzZV9yZW1vdmUoaWRfcHJpdik7CisJCWNtYV9lbmFibGVfcmVtb3ZlKGlkX3ByaXYpOwogCQljbWFfZGVyZWZfaWQoaWRfcHJpdik7CiAJCXJkbWFfZGVzdHJveV9pZCgmaWRfcHJpdi0+aWQpOwogCQlyZXR1cm47CiAJfQogb3V0OgotCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKwljbWFfZW5hYmxlX3JlbW92ZShpZF9wcml2KTsKIAljbWFfZGVyZWZfaWQoaWRfcHJpdik7CiB9CiAKQEAgLTIwNDIsMTEgKzIwNTcsMTAgQEAKIAlzdHJ1Y3QgaWJfY21fc2lkcl9yZXBfZXZlbnRfcGFyYW0gKnJlcCA9ICZpYl9ldmVudC0+cGFyYW0uc2lkcl9yZXBfcmN2ZDsKIAlpbnQgcmV0ID0gMDsKIAotCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZiBldmVudCk7Ci0JYXRvbWljX2luYygmaWRfcHJpdi0+ZGV2X3JlbW92ZSk7Ci0JaWYgKCFjbWFfY29tcChpZF9wcml2LCBDTUFfQ09OTkVDVCkpCi0JCWdvdG8gb3V0OworCWlmIChjbWFfZGlzYWJsZV9yZW1vdmUoaWRfcHJpdiwgQ01BX0NPTk5FQ1QpKQorCQlyZXR1cm4gMDsKIAorCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZiBldmVudCk7CiAJc3dpdGNoIChpYl9ldmVudC0+ZXZlbnQpIHsKIAljYXNlIElCX0NNX1NJRFJfUkVRX0VSUk9SOgogCQlldmVudC5ldmVudCA9IFJETUFfQ01fRVZFTlRfVU5SRUFDSEFCTEU7CkBAIC0yMDg0LDEyICsyMDk4LDEyIEBACiAJCS8qIERlc3Ryb3kgdGhlIENNIElEIGJ5IHJldHVybmluZyBhIG5vbi16ZXJvIHZhbHVlLiAqLwogCQlpZF9wcml2LT5jbV9pZC5pYiA9IE5VTEw7CiAJCWNtYV9leGNoKGlkX3ByaXYsIENNQV9ERVNUUk9ZSU5HKTsKLQkJY21hX3JlbGVhc2VfcmVtb3ZlKGlkX3ByaXYpOworCQljbWFfZW5hYmxlX3JlbW92ZShpZF9wcml2KTsKIAkJcmRtYV9kZXN0cm95X2lkKCZpZF9wcml2LT5pZCk7CiAJCXJldHVybiByZXQ7CiAJfQogb3V0OgotCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKwljbWFfZW5hYmxlX3JlbW92ZShpZF9wcml2KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDEzLDcgKzI0MjcsNyBAQAogCWludCByZXQ7CiAKIAlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7Ci0JaWYgKCFjbWFfY29tcChpZF9wcml2LCBDTUFfQ09OTkVDVCkpCisJaWYgKCFjbWFfaGFzX2NtX2RldihpZF9wcml2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkgewpAQCAtMjQzNSw3ICsyNDQ5LDcgQEAKIAlpbnQgcmV0OwogCiAJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOwotCWlmICghY21hX2NvbXAoaWRfcHJpdiwgQ01BX0NPTk5FQ1QpKQorCWlmICghY21hX2hhc19jbV9kZXYoaWRfcHJpdikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpKSB7CkBAIC0yNDY2LDggKzI0ODAsNyBAQAogCWludCByZXQ7CiAKIAlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7Ci0JaWYgKCFjbWFfY29tcChpZF9wcml2LCBDTUFfQ09OTkVDVCkgJiYKLQkgICAgIWNtYV9jb21wKGlkX3ByaXYsIENNQV9ESVNDT05ORUNUKSkKKwlpZiAoIWNtYV9oYXNfY21fZGV2KGlkX3ByaXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoaWQtPmRldmljZS0+bm9kZV90eXBlKSkgewpAQCAtMjQ5OSwxMCArMjUxMiw5IEBACiAJaW50IHJldDsKIAogCWlkX3ByaXYgPSBtYy0+aWRfcHJpdjsKLQlhdG9taWNfaW5jKCZpZF9wcml2LT5kZXZfcmVtb3ZlKTsKLQlpZiAoIWNtYV9jb21wKGlkX3ByaXYsIENNQV9BRERSX0JPVU5EKSAmJgotCSAgICAhY21hX2NvbXAoaWRfcHJpdiwgQ01BX0FERFJfUkVTT0xWRUQpKQotCQlnb3RvIG91dDsKKwlpZiAoY21hX2Rpc2FibGVfcmVtb3ZlKGlkX3ByaXYsIENNQV9BRERSX0JPVU5EKSAmJgorCSAgICBjbWFfZGlzYWJsZV9yZW1vdmUoaWRfcHJpdiwgQ01BX0FERFJfUkVTT0xWRUQpKQorCQlyZXR1cm4gMDsKIAogCWlmICghc3RhdHVzICYmIGlkX3ByaXYtPmlkLnFwKQogCQlzdGF0dXMgPSBpYl9hdHRhY2hfbWNhc3QoaWRfcHJpdi0+aWQucXAsICZtdWx0aWNhc3QtPnJlYy5tZ2lkLApAQCAtMjUyNCwxMiArMjUzNiwxMiBAQAogCXJldCA9IGlkX3ByaXYtPmlkLmV2ZW50X2hhbmRsZXIoJmlkX3ByaXYtPmlkLCAmZXZlbnQpOwogCWlmIChyZXQpIHsKIAkJY21hX2V4Y2goaWRfcHJpdiwgQ01BX0RFU1RST1lJTkcpOwotCQljbWFfcmVsZWFzZV9yZW1vdmUoaWRfcHJpdik7CisJCWNtYV9lbmFibGVfcmVtb3ZlKGlkX3ByaXYpOwogCQlyZG1hX2Rlc3Ryb3lfaWQoJmlkX3ByaXYtPmlkKTsKIAkJcmV0dXJuIDA7CiAJfQotb3V0OgotCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKworCWNtYV9lbmFibGVfcmVtb3ZlKGlkX3ByaXYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCmluZGV4IDdmYWJiNDIuLjNhZGExN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSAiY29yZV9wcml2LmgiCiAKQEAgLTE0OSw2ICsxNTAsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzdGFydF9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKK3sKKwlyZXR1cm4gKGRldmljZS0+bm9kZV90eXBlID09IFJETUFfTk9ERV9JQl9TV0lUQ0gpID8gMCA6IDE7Cit9CisKKworc3RhdGljIGludCBlbmRfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJcmV0dXJuIChkZXZpY2UtPm5vZGVfdHlwZSA9PSBSRE1BX05PREVfSUJfU1dJVENIKSA/CisJCTAgOiBkZXZpY2UtPnBoeXNfcG9ydF9jbnQ7Cit9CisKIC8qKgogICogaWJfYWxsb2NfZGV2aWNlIC0gYWxsb2NhdGUgYW4gSUIgZGV2aWNlIHN0cnVjdAogICogQHNpemU6c2l6ZSBvZiBzdHJ1Y3R1cmUgdG8gYWxsb2NhdGUKQEAgLTIwOCw2ICsyMjEsNDUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCByZWFkX3BvcnRfdGFibGVfbGVuZ3RocyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGliX3BvcnRfYXR0ciAqdHByb3BzID0gTlVMTDsKKwlpbnQgbnVtX3BvcnRzLCByZXQgPSAtRU5PTUVNOworCXU4IHBvcnRfaW5kZXg7CisKKwl0cHJvcHMgPSBrbWFsbG9jKHNpemVvZiAqdHByb3BzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRwcm9wcykKKwkJZ290byBvdXQ7CisKKwludW1fcG9ydHMgPSBlbmRfcG9ydChkZXZpY2UpIC0gc3RhcnRfcG9ydChkZXZpY2UpICsgMTsKKworCWRldmljZS0+cGtleV90YmxfbGVuID0ga21hbGxvYyhzaXplb2YgKmRldmljZS0+cGtleV90YmxfbGVuICogbnVtX3BvcnRzLAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlkZXZpY2UtPmdpZF90YmxfbGVuID0ga21hbGxvYyhzaXplb2YgKmRldmljZS0+Z2lkX3RibF9sZW4gKiBudW1fcG9ydHMsCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZpY2UtPnBrZXlfdGJsX2xlbiB8fCAhZGV2aWNlLT5naWRfdGJsX2xlbikKKwkJZ290byBlcnI7CisKKwlmb3IgKHBvcnRfaW5kZXggPSAwOyBwb3J0X2luZGV4IDwgbnVtX3BvcnRzOyArK3BvcnRfaW5kZXgpIHsKKwkJcmV0ID0gaWJfcXVlcnlfcG9ydChkZXZpY2UsIHBvcnRfaW5kZXggKyBzdGFydF9wb3J0KGRldmljZSksCisJCQkJCXRwcm9wcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwkJZGV2aWNlLT5wa2V5X3RibF9sZW5bcG9ydF9pbmRleF0gPSB0cHJvcHMtPnBrZXlfdGJsX2xlbjsKKwkJZGV2aWNlLT5naWRfdGJsX2xlbltwb3J0X2luZGV4XSAgPSB0cHJvcHMtPmdpZF90YmxfbGVuOworCX0KKworCXJldCA9IDA7CisJZ290byBvdXQ7CisKK2VycjoKKwlrZnJlZShkZXZpY2UtPmdpZF90YmxfbGVuKTsKKwlrZnJlZShkZXZpY2UtPnBrZXlfdGJsX2xlbik7CitvdXQ6CisJa2ZyZWUodHByb3BzKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKioKICAqIGliX3JlZ2lzdGVyX2RldmljZSAtIFJlZ2lzdGVyIGFuIElCIGRldmljZSB3aXRoIElCIGNvcmUKICAqIEBkZXZpY2U6RGV2aWNlIHRvIHJlZ2lzdGVyCkBAIC0yMzksMTAgKzI5MSwxOSBAQAogCXNwaW5fbG9ja19pbml0KCZkZXZpY2UtPmV2ZW50X2hhbmRsZXJfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldmljZS0+Y2xpZW50X2RhdGFfbG9jayk7CiAKKwlyZXQgPSByZWFkX3BvcnRfdGFibGVfbGVuZ3RocyhkZXZpY2UpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ291bGRuJ3QgY3JlYXRlIHRhYmxlIGxlbmd0aHMgY2FjaGUgZm9yIGRldmljZSAlc1xuIiwKKwkJICAgICAgIGRldmljZS0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwogCXJldCA9IGliX2RldmljZV9yZWdpc3Rlcl9zeXNmcyhkZXZpY2UpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ291bGRuJ3QgcmVnaXN0ZXIgZGV2aWNlICVzIHdpdGggZHJpdmVyIG1vZGVsXG4iLAogCQkgICAgICAgZGV2aWNlLT5uYW1lKTsKKwkJa2ZyZWUoZGV2aWNlLT5naWRfdGJsX2xlbik7CisJCWtmcmVlKGRldmljZS0+cGtleV90YmxfbGVuKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yODQsNiArMzQ1LDkgQEAKIAogCWxpc3RfZGVsKCZkZXZpY2UtPmNvcmVfbGlzdCk7CiAKKwlrZnJlZShkZXZpY2UtPmdpZF90YmxfbGVuKTsKKwlrZnJlZShkZXZpY2UtPnBrZXlfdGJsX2xlbik7CisKIAltdXRleF91bmxvY2soJmRldmljZV9tdXRleCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlLT5jbGllbnRfZGF0YV9sb2NrLCBmbGFncyk7CkBAIC01MDYsMTAgKzU3MCw3IEBACiAJCSAgdTggcG9ydF9udW0sCiAJCSAgc3RydWN0IGliX3BvcnRfYXR0ciAqcG9ydF9hdHRyKQogewotCWlmIChkZXZpY2UtPm5vZGVfdHlwZSA9PSBSRE1BX05PREVfSUJfU1dJVENIKSB7Ci0JCWlmIChwb3J0X251bSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSBpZiAocG9ydF9udW0gPCAxIHx8IHBvcnRfbnVtID4gZGV2aWNlLT5waHlzX3BvcnRfY250KQorCWlmIChwb3J0X251bSA8IHN0YXJ0X3BvcnQoZGV2aWNlKSB8fCBwb3J0X251bSA+IGVuZF9wb3J0KGRldmljZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIGRldmljZS0+cXVlcnlfcG9ydChkZXZpY2UsIHBvcnRfbnVtLCBwb3J0X2F0dHIpOwpAQCAtNTgxLDEwICs2NDIsNyBAQAogCQkgICB1OCBwb3J0X251bSwgaW50IHBvcnRfbW9kaWZ5X21hc2ssCiAJCSAgIHN0cnVjdCBpYl9wb3J0X21vZGlmeSAqcG9ydF9tb2RpZnkpCiB7Ci0JaWYgKGRldmljZS0+bm9kZV90eXBlID09IFJETUFfTk9ERV9JQl9TV0lUQ0gpIHsKLQkJaWYgKHBvcnRfbnVtKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChwb3J0X251bSA8IDEgfHwgcG9ydF9udW0gPiBkZXZpY2UtPnBoeXNfcG9ydF9jbnQpCisJaWYgKHBvcnRfbnVtIDwgc3RhcnRfcG9ydChkZXZpY2UpIHx8IHBvcnRfbnVtID4gZW5kX3BvcnQoZGV2aWNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gZGV2aWNlLT5tb2RpZnlfcG9ydChkZXZpY2UsIHBvcnRfbnVtLCBwb3J0X21vZGlmeV9tYXNrLApAQCAtNTkyLDYgKzY1MCw2OCBAQAogfQogRVhQT1JUX1NZTUJPTChpYl9tb2RpZnlfcG9ydCk7CiAKKy8qKgorICogaWJfZmluZF9naWQgLSBSZXR1cm5zIHRoZSBwb3J0IG51bWJlciBhbmQgR0lEIHRhYmxlIGluZGV4IHdoZXJlCisgKiAgIGEgc3BlY2lmaWVkIEdJRCB2YWx1ZSBvY2N1cnMuCisgKiBAZGV2aWNlOiBUaGUgZGV2aWNlIHRvIHF1ZXJ5LgorICogQGdpZDogVGhlIEdJRCB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICogQHBvcnRfbnVtOiBUaGUgcG9ydCBudW1iZXIgb2YgdGhlIGRldmljZSB3aGVyZSB0aGUgR0lEIHZhbHVlIHdhcyBmb3VuZC4KKyAqIEBpbmRleDogVGhlIGluZGV4IGludG8gdGhlIEdJRCB0YWJsZSB3aGVyZSB0aGUgR0lEIHdhcyBmb3VuZC4gIFRoaXMKKyAqICAgcGFyYW1ldGVyIG1heSBiZSBOVUxMLgorICovCitpbnQgaWJfZmluZF9naWQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1bmlvbiBpYl9naWQgKmdpZCwKKwkJdTggKnBvcnRfbnVtLCB1MTYgKmluZGV4KQoreworCXVuaW9uIGliX2dpZCB0bXBfZ2lkOworCWludCByZXQsIHBvcnQsIGk7CisKKwlmb3IgKHBvcnQgPSBzdGFydF9wb3J0KGRldmljZSk7IHBvcnQgPD0gZW5kX3BvcnQoZGV2aWNlKTsgKytwb3J0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBkZXZpY2UtPmdpZF90YmxfbGVuW3BvcnQgLSBzdGFydF9wb3J0KGRldmljZSldOyArK2kpIHsKKwkJCXJldCA9IGliX3F1ZXJ5X2dpZChkZXZpY2UsIHBvcnQsIGksICZ0bXBfZ2lkKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCWlmICghbWVtY21wKCZ0bXBfZ2lkLCBnaWQsIHNpemVvZiAqZ2lkKSkgeworCQkJCSpwb3J0X251bSA9IHBvcnQ7CisJCQkJaWYgKGluZGV4KQorCQkJCQkqaW5kZXggPSBpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CitFWFBPUlRfU1lNQk9MKGliX2ZpbmRfZ2lkKTsKKworLyoqCisgKiBpYl9maW5kX3BrZXkgLSBSZXR1cm5zIHRoZSBQS2V5IHRhYmxlIGluZGV4IHdoZXJlIGEgc3BlY2lmaWVkCisgKiAgIFBLZXkgdmFsdWUgb2NjdXJzLgorICogQGRldmljZTogVGhlIGRldmljZSB0byBxdWVyeS4KKyAqIEBwb3J0X251bTogVGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBkZXZpY2UgdG8gc2VhcmNoIGZvciB0aGUgUEtleS4KKyAqIEBwa2V5OiBUaGUgUEtleSB2YWx1ZSB0byBzZWFyY2ggZm9yLgorICogQGluZGV4OiBUaGUgaW5kZXggaW50byB0aGUgUEtleSB0YWJsZSB3aGVyZSB0aGUgUEtleSB3YXMgZm91bmQuCisgKi8KK2ludCBpYl9maW5kX3BrZXkoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAorCQkgdTggcG9ydF9udW0sIHUxNiBwa2V5LCB1MTYgKmluZGV4KQoreworCWludCByZXQsIGk7CisJdTE2IHRtcF9wa2V5OworCisJZm9yIChpID0gMDsgaSA8IGRldmljZS0+cGtleV90YmxfbGVuW3BvcnRfbnVtIC0gc3RhcnRfcG9ydChkZXZpY2UpXTsgKytpKSB7CisJCXJldCA9IGliX3F1ZXJ5X3BrZXkoZGV2aWNlLCBwb3J0X251bSwgaSwgJnRtcF9wa2V5KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKHBrZXkgPT0gdG1wX3BrZXkpIHsKKwkJCSppbmRleCA9IGk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtRU5PRU5UOworfQorRVhQT1JUX1NZTUJPTChpYl9maW5kX3BrZXkpOworCiBzdGF0aWMgaW50IF9faW5pdCBpYl9jb3JlX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtNjEzLDYgKzczMyw4IEBACiB7CiAJaWJfY2FjaGVfY2xlYW51cCgpOwogCWliX3N5c2ZzX2NsZWFudXAoKTsKKwkvKiBNYWtlIHN1cmUgdGhhdCBhbnkgcGVuZGluZyB1bWVtIGFjY291bnRpbmcgd29yayBpcyBkb25lLiAqLworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiB9CiAKIG1vZHVsZV9pbml0KGliX2NvcmVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhZWM1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYwpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKiAkSWQ6IHV2ZXJic19tZW0uYyAyNzQzIDIwMDUtMDYtMjggMjI6Mjc6NTlaIHJvbGFuZCAkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSAidXZlcmJzLmgiCisKK3N0YXRpYyB2b2lkIF9faWJfdW1lbV9yZWxlYXNlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0sIGludCBkaXJ0eSkKK3sKKwlzdHJ1Y3QgaWJfdW1lbV9jaHVuayAqY2h1bmssICp0bXA7CisJaW50IGk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2h1bmssIHRtcCwgJnVtZW0tPmNodW5rX2xpc3QsIGxpc3QpIHsKKwkJaWJfZG1hX3VubWFwX3NnKGRldiwgY2h1bmstPnBhZ2VfbGlzdCwKKwkJCQljaHVuay0+bmVudHMsIERNQV9CSURJUkVDVElPTkFMKTsKKwkJZm9yIChpID0gMDsgaSA8IGNodW5rLT5uZW50czsgKytpKSB7CisJCQlpZiAodW1lbS0+d3JpdGFibGUgJiYgZGlydHkpCisJCQkJc2V0X3BhZ2VfZGlydHlfbG9jayhjaHVuay0+cGFnZV9saXN0W2ldLnBhZ2UpOworCQkJcHV0X3BhZ2UoY2h1bmstPnBhZ2VfbGlzdFtpXS5wYWdlKTsKKwkJfQorCisJCWtmcmVlKGNodW5rKTsKKwl9Cit9CisKKy8qKgorICogaWJfdW1lbV9nZXQgLSBQaW4gYW5kIERNQSBtYXAgdXNlcnNwYWNlIG1lbW9yeS4KKyAqIEBjb250ZXh0OiB1c2Vyc3BhY2UgY29udGV4dCB0byBwaW4gbWVtb3J5IGZvcgorICogQGFkZHI6IHVzZXJzcGFjZSB2aXJ0dWFsIGFkZHJlc3MgdG8gc3RhcnQgYXQKKyAqIEBzaXplOiBsZW5ndGggb2YgcmVnaW9uIHRvIHBpbgorICogQGFjY2VzczogSUJfQUNDRVNTX3h4eCBmbGFncyBmb3IgbWVtb3J5IGJlaW5nIHBpbm5lZAorICovCitzdHJ1Y3QgaWJfdW1lbSAqaWJfdW1lbV9nZXQoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgc2l6ZV90IHNpemUsIGludCBhY2Nlc3MpCit7CisJc3RydWN0IGliX3VtZW0gKnVtZW07CisJc3RydWN0IHBhZ2UgKipwYWdlX2xpc3Q7CisJc3RydWN0IGliX3VtZW1fY2h1bmsgKmNodW5rOworCXVuc2lnbmVkIGxvbmcgbG9ja2VkOworCXVuc2lnbmVkIGxvbmcgbG9ja19saW1pdDsKKwl1bnNpZ25lZCBsb25nIGN1cl9iYXNlOworCXVuc2lnbmVkIGxvbmcgbnBhZ2VzOworCWludCByZXQ7CisJaW50IG9mZjsKKwlpbnQgaTsKKworCWlmICghY2FuX2RvX21sb2NrKCkpCisJCXJldHVybiBFUlJfUFRSKC1FUEVSTSk7CisKKwl1bWVtID0ga21hbGxvYyhzaXplb2YgKnVtZW0sIEdGUF9LRVJORUwpOworCWlmICghdW1lbSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl1bWVtLT5jb250ZXh0ICAgPSBjb250ZXh0OworCXVtZW0tPmxlbmd0aCAgICA9IHNpemU7CisJdW1lbS0+b2Zmc2V0ICAgID0gYWRkciAmIH5QQUdFX01BU0s7CisJdW1lbS0+cGFnZV9zaXplID0gUEFHRV9TSVpFOworCS8qCisJICogV2UgYXNrIGZvciB3cml0YWJsZSBtZW1vcnkgaWYgYW55IGFjY2VzcyBmbGFncyBvdGhlciB0aGFuCisJICogInJlbW90ZSByZWFkIiBhcmUgc2V0LiAgIkxvY2FsIHdyaXRlIiBhbmQgInJlbW90ZSB3cml0ZSIKKwkgKiBvYnZpb3VzbHkgcmVxdWlyZSB3cml0ZSBhY2Nlc3MuICAiUmVtb3RlIGF0b21pYyIgY2FuIGRvCisJICogdGhpbmdzIGxpa2UgZmV0Y2ggYW5kIGFkZCwgd2hpY2ggd2lsbCBtb2RpZnkgbWVtb3J5LCBhbmQKKwkgKiAiTVcgYmluZCIgY2FuIGNoYW5nZSBwZXJtaXNzaW9ucyBieSBiaW5kaW5nIGEgd2luZG93LgorCSAqLworCXVtZW0tPndyaXRhYmxlICA9ICEhKGFjY2VzcyAmIH5JQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOworCisJSU5JVF9MSVNUX0hFQUQoJnVtZW0tPmNodW5rX2xpc3QpOworCisJcGFnZV9saXN0ID0gKHN0cnVjdCBwYWdlICoqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlX2xpc3QpIHsKKwkJa2ZyZWUodW1lbSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCW5wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSArIHVtZW0tPm9mZnNldCkgPj4gUEFHRV9TSElGVDsKKworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlsb2NrZWQgICAgID0gbnBhZ2VzICsgY3VycmVudC0+bW0tPmxvY2tlZF92bTsKKwlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1ciA+PiBQQUdFX1NISUZUOworCisJaWYgKChsb2NrZWQgPiBsb2NrX2xpbWl0KSAmJiAhY2FwYWJsZShDQVBfSVBDX0xPQ0spKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWN1cl9iYXNlID0gYWRkciAmIFBBR0VfTUFTSzsKKworCXdoaWxlIChucGFnZXMpIHsKKwkJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIGN1cl9iYXNlLAorCQkJCSAgICAgbWluX3QoaW50LCBucGFnZXMsCisJCQkJCSAgIFBBR0VfU0laRSAvIHNpemVvZiAoc3RydWN0IHBhZ2UgKikpLAorCQkJCSAgICAgMSwgIXVtZW0tPndyaXRhYmxlLCBwYWdlX2xpc3QsIE5VTEwpOworCisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJY3VyX2Jhc2UgKz0gcmV0ICogUEFHRV9TSVpFOworCQlucGFnZXMgICAtPSByZXQ7CisKKwkJb2ZmID0gMDsKKworCQl3aGlsZSAocmV0KSB7CisJCQljaHVuayA9IGttYWxsb2Moc2l6ZW9mICpjaHVuayArIHNpemVvZiAoc3RydWN0IHNjYXR0ZXJsaXN0KSAqCisJCQkJCW1pbl90KGludCwgcmV0LCBJQl9VTUVNX01BWF9QQUdFX0NIVU5LKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWNodW5rKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJY2h1bmstPm5lbnRzID0gbWluX3QoaW50LCByZXQsIElCX1VNRU1fTUFYX1BBR0VfQ0hVTkspOworCQkJZm9yIChpID0gMDsgaSA8IGNodW5rLT5uZW50czsgKytpKSB7CisJCQkJY2h1bmstPnBhZ2VfbGlzdFtpXS5wYWdlICAgPSBwYWdlX2xpc3RbaSArIG9mZl07CisJCQkJY2h1bmstPnBhZ2VfbGlzdFtpXS5vZmZzZXQgPSAwOworCQkJCWNodW5rLT5wYWdlX2xpc3RbaV0ubGVuZ3RoID0gUEFHRV9TSVpFOworCQkJfQorCisJCQljaHVuay0+bm1hcCA9IGliX2RtYV9tYXBfc2coY29udGV4dC0+ZGV2aWNlLAorCQkJCQkJICAgICZjaHVuay0+cGFnZV9saXN0WzBdLAorCQkJCQkJICAgIGNodW5rLT5uZW50cywKKwkJCQkJCSAgICBETUFfQklESVJFQ1RJT05BTCk7CisJCQlpZiAoY2h1bmstPm5tYXAgPD0gMCkgeworCQkJCWZvciAoaSA9IDA7IGkgPCBjaHVuay0+bmVudHM7ICsraSkKKwkJCQkJcHV0X3BhZ2UoY2h1bmstPnBhZ2VfbGlzdFtpXS5wYWdlKTsKKwkJCQlrZnJlZShjaHVuayk7CisKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlyZXQgLT0gY2h1bmstPm5lbnRzOworCQkJb2ZmICs9IGNodW5rLT5uZW50czsKKwkJCWxpc3RfYWRkX3RhaWwoJmNodW5rLT5saXN0LCAmdW1lbS0+Y2h1bmtfbGlzdCk7CisJCX0KKworCQlyZXQgPSAwOworCX0KKworb3V0OgorCWlmIChyZXQgPCAwKSB7CisJCV9faWJfdW1lbV9yZWxlYXNlKGNvbnRleHQtPmRldmljZSwgdW1lbSwgMCk7CisJCWtmcmVlKHVtZW0pOworCX0gZWxzZQorCQljdXJyZW50LT5tbS0+bG9ja2VkX3ZtID0gbG9ja2VkOworCisJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlX2xpc3QpOworCisJcmV0dXJuIHJldCA8IDAgPyBFUlJfUFRSKHJldCkgOiB1bWVtOworfQorRVhQT1JUX1NZTUJPTChpYl91bWVtX2dldCk7CisKK3N0YXRpYyB2b2lkIGliX3VtZW1fYWNjb3VudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGliX3VtZW0gKnVtZW0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGliX3VtZW0sIHdvcmspOworCisJZG93bl93cml0ZSgmdW1lbS0+bW0tPm1tYXBfc2VtKTsKKwl1bWVtLT5tbS0+bG9ja2VkX3ZtIC09IHVtZW0tPmRpZmY7CisJdXBfd3JpdGUoJnVtZW0tPm1tLT5tbWFwX3NlbSk7CisJbW1wdXQodW1lbS0+bW0pOworCWtmcmVlKHVtZW0pOworfQorCisvKioKKyAqIGliX3VtZW1fcmVsZWFzZSAtIHJlbGVhc2UgbWVtb3J5IHBpbm5lZCB3aXRoIGliX3VtZW1fZ2V0CisgKiBAdW1lbTogdW1lbSBzdHJ1Y3QgdG8gcmVsZWFzZQorICovCit2b2lkIGliX3VtZW1fcmVsZWFzZShzdHJ1Y3QgaWJfdW1lbSAqdW1lbSkKK3sKKwlzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQgPSB1bWVtLT5jb250ZXh0OworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXVuc2lnbmVkIGxvbmcgZGlmZjsKKworCV9faWJfdW1lbV9yZWxlYXNlKHVtZW0tPmNvbnRleHQtPmRldmljZSwgdW1lbSwgMSk7CisKKwltbSA9IGdldF90YXNrX21tKGN1cnJlbnQpOworCWlmICghbW0pIHsKKwkJa2ZyZWUodW1lbSk7CisJCXJldHVybjsKKwl9CisKKwlkaWZmID0gUEFHRV9BTElHTih1bWVtLT5sZW5ndGggKyB1bWVtLT5vZmZzZXQpID4+IFBBR0VfU0hJRlQ7CisKKwkvKgorCSAqIFdlIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgbW0ncyBtbWFwX3NlbSBhbHJlYWR5IGhlbGQuICBUaGlzCisJICogY2FuIGhhcHBlbiB3aGVuIGEgdXNlcnNwYWNlIG11bm1hcCgpIGlzIHRoZSBjYWxsIHRoYXQgZHJvcHMKKwkgKiB0aGUgbGFzdCByZWZlcmVuY2UgdG8gb3VyIGZpbGUgYW5kIGNhbGxzIG91ciByZWxlYXNlCisJICogbWV0aG9kLiAgSWYgdGhlcmUgYXJlIG1lbW9yeSByZWdpb25zIHRvIGRlc3Ryb3ksIHdlJ2xsIGVuZAorCSAqIHVwIGhlcmUgYW5kIG5vdCBiZSBhYmxlIHRvIHRha2UgdGhlIG1tYXBfc2VtLiAgSW4gdGhhdCBjYXNlCisJICogd2UgZGVmZXIgdGhlIHZtX2xvY2tlZCBhY2NvdW50aW5nIHRvIHRoZSBzeXN0ZW0gd29ya3F1ZXVlLgorCSAqLworCWlmIChjb250ZXh0LT5jbG9zaW5nICYmICFkb3duX3dyaXRlX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpIHsKKwkJSU5JVF9XT1JLKCZ1bWVtLT53b3JrLCBpYl91bWVtX2FjY291bnQpOworCQl1bWVtLT5tbSAgID0gbW07CisJCXVtZW0tPmRpZmYgPSBkaWZmOworCisJCXNjaGVkdWxlX3dvcmsoJnVtZW0tPndvcmspOworCQlyZXR1cm47CisJfSBlbHNlCisJCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisKKwljdXJyZW50LT5tbS0+bG9ja2VkX3ZtIC09IGRpZmY7CisJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJbW1wdXQobW0pOworCWtmcmVlKHVtZW0pOworfQorRVhQT1JUX1NZTUJPTChpYl91bWVtX3JlbGVhc2UpOworCitpbnQgaWJfdW1lbV9wYWdlX2NvdW50KHN0cnVjdCBpYl91bWVtICp1bWVtKQoreworCXN0cnVjdCBpYl91bWVtX2NodW5rICpjaHVuazsKKwlpbnQgc2hpZnQ7CisJaW50IGk7CisJaW50IG47CisKKwlzaGlmdCA9IGlsb2cyKHVtZW0tPnBhZ2Vfc2l6ZSk7CisKKwluID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmdW1lbS0+Y2h1bmtfbGlzdCwgbGlzdCkKKwkJZm9yIChpID0gMDsgaSA8IGNodW5rLT5ubWFwOyArK2kpCisJCQluICs9IHNnX2RtYV9sZW4oJmNodW5rLT5wYWdlX2xpc3RbaV0pID4+IHNoaWZ0OworCisJcmV0dXJuIG47Cit9CitFWFBPUlRfU1lNQk9MKGliX3VtZW1fcGFnZV9jb3VudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oCmluZGV4IDEwMmE1OWMuLmMzMzU0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogCiAjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgorI2luY2x1ZGUgPHJkbWEvaWJfdW1lbS5oPgogI2luY2x1ZGUgPHJkbWEvaWJfdXNlcl92ZXJicy5oPgogCiAvKgpAQCAtMTYzLDExICsxNjQsNiBAQAogdm9pZCBpYl91dmVyYnNfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnRfaGFuZGxlciAqaGFuZGxlciwKIAkJCSAgICAgc3RydWN0IGliX2V2ZW50ICpldmVudCk7CiAKLWludCBpYl91bWVtX2dldChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl91bWVtICptZW0sCi0JCXZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBpbnQgd3JpdGUpOwotdm9pZCBpYl91bWVtX3JlbGVhc2Uoc3RydWN0IGliX2RldmljZSAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSk7Ci12b2lkIGliX3VtZW1fcmVsZWFzZV9vbl9jbG9zZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtKTsKLQogI2RlZmluZSBJQl9VVkVSQlNfREVDTEFSRV9DTUQobmFtZSkJCQkJCVwKIAlzc2l6ZV90IGliX3V2ZXJic18jI25hbWUoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAkJXAogCQkJCSBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgaW5fbGVuLAlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKaW5kZXggYmFiNjY3Ni4uMDFkNzAwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYsIDIwMDcgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgUGF0aFNjYWxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA2IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjk1LDYgKzI5NSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnVjb250ZXh0LT5xcF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmdWNvbnRleHQtPnNycV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmdWNvbnRleHQtPmFoX2xpc3QpOworCXVjb250ZXh0LT5jbG9zaW5nID0gMDsKIAogCXJlc3AubnVtX2NvbXBfdmVjdG9ycyA9IGZpbGUtPmRldmljZS0+bnVtX2NvbXBfdmVjdG9yczsKIApAQCAtNTczLDcgKzU3NCw3IEBACiAJc3RydWN0IGliX3V2ZXJic19yZWdfbXIgICAgICBjbWQ7CiAJc3RydWN0IGliX3V2ZXJic19yZWdfbXJfcmVzcCByZXNwOwogCXN0cnVjdCBpYl91ZGF0YSAgICAgICAgICAgICAgdWRhdGE7Ci0Jc3RydWN0IGliX3VtZW1fb2JqZWN0ICAgICAgICpvYmo7CisJc3RydWN0IGliX3VvYmplY3QgICAgICAgICAgICp1b2JqOwogCXN0cnVjdCBpYl9wZCAgICAgICAgICAgICAgICAqcGQ7CiAJc3RydWN0IGliX21yICAgICAgICAgICAgICAgICptcjsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKQEAgLTU5OSwzNSArNjAwLDIxIEBACiAJICAgICEoY21kLmFjY2Vzc19mbGFncyAmIElCX0FDQ0VTU19MT0NBTF9XUklURSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jb2JqID0ga21hbGxvYyhzaXplb2YgKm9iaiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFvYmopCisJdW9iaiA9IGttYWxsb2Moc2l6ZW9mICp1b2JqLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVvYmopCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaW5pdF91b2JqKCZvYmotPnVvYmplY3QsIDAsIGZpbGUtPnVjb250ZXh0LCAmbXJfbG9ja19rZXkpOwotCWRvd25fd3JpdGUoJm9iai0+dW9iamVjdC5tdXRleCk7Ci0KLQkvKgotCSAqIFdlIGFzayBmb3Igd3JpdGFibGUgbWVtb3J5IGlmIGFueSBhY2Nlc3MgZmxhZ3Mgb3RoZXIgdGhhbgotCSAqICJyZW1vdGUgcmVhZCIgYXJlIHNldC4gICJMb2NhbCB3cml0ZSIgYW5kICJyZW1vdGUgd3JpdGUiCi0JICogb2J2aW91c2x5IHJlcXVpcmUgd3JpdGUgYWNjZXNzLiAgIlJlbW90ZSBhdG9taWMiIGNhbiBkbwotCSAqIHRoaW5ncyBsaWtlIGZldGNoIGFuZCBhZGQsIHdoaWNoIHdpbGwgbW9kaWZ5IG1lbW9yeSwgYW5kCi0JICogIk1XIGJpbmQiIGNhbiBjaGFuZ2UgcGVybWlzc2lvbnMgYnkgYmluZGluZyBhIHdpbmRvdy4KLQkgKi8KLQlyZXQgPSBpYl91bWVtX2dldChmaWxlLT5kZXZpY2UtPmliX2RldiwgJm9iai0+dW1lbSwKLQkJCSAgKHZvaWQgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5zdGFydCwgY21kLmxlbmd0aCwKLQkJCSAgISEoY21kLmFjY2Vzc19mbGFncyAmIH5JQl9BQ0NFU1NfUkVNT1RFX1JFQUQpKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9mcmVlOwotCi0Jb2JqLT51bWVtLnZpcnRfYmFzZSA9IGNtZC5oY2FfdmE7CisJaW5pdF91b2JqKHVvYmosIDAsIGZpbGUtPnVjb250ZXh0LCAmbXJfbG9ja19rZXkpOworCWRvd25fd3JpdGUoJnVvYmotPm11dGV4KTsKIAogCXBkID0gaWRyX3JlYWRfcGQoY21kLnBkX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOwogCWlmICghcGQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfcmVsZWFzZTsKKwkJZ290byBlcnJfZnJlZTsKIAl9CiAKLQltciA9IHBkLT5kZXZpY2UtPnJlZ191c2VyX21yKHBkLCAmb2JqLT51bWVtLCBjbWQuYWNjZXNzX2ZsYWdzLCAmdWRhdGEpOworCW1yID0gcGQtPmRldmljZS0+cmVnX3VzZXJfbXIocGQsIGNtZC5zdGFydCwgY21kLmxlbmd0aCwgY21kLmhjYV92YSwKKwkJCQkgICAgIGNtZC5hY2Nlc3NfZmxhZ3MsICZ1ZGF0YSk7CiAJaWYgKElTX0VSUihtcikpIHsKIAkJcmV0ID0gUFRSX0VSUihtcik7CiAJCWdvdG8gZXJyX3B1dDsKQEAgLTYzNSwxOSArNjIyLDE5IEBACiAKIAltci0+ZGV2aWNlICA9IHBkLT5kZXZpY2U7CiAJbXItPnBkICAgICAgPSBwZDsKLQltci0+dW9iamVjdCA9ICZvYmotPnVvYmplY3Q7CisJbXItPnVvYmplY3QgPSB1b2JqOwogCWF0b21pY19pbmMoJnBkLT51c2VjbnQpOwogCWF0b21pY19zZXQoJm1yLT51c2VjbnQsIDApOwogCi0Jb2JqLT51b2JqZWN0Lm9iamVjdCA9IG1yOwotCXJldCA9IGlkcl9hZGRfdW9iaigmaWJfdXZlcmJzX21yX2lkciwgJm9iai0+dW9iamVjdCk7CisJdW9iai0+b2JqZWN0ID0gbXI7CisJcmV0ID0gaWRyX2FkZF91b2JqKCZpYl91dmVyYnNfbXJfaWRyLCB1b2JqKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl91bnJlZzsKIAogCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOwogCXJlc3AubGtleSAgICAgID0gbXItPmxrZXk7CiAJcmVzcC5ya2V5ICAgICAgPSBtci0+cmtleTsKLQlyZXNwLm1yX2hhbmRsZSA9IG9iai0+dW9iamVjdC5pZDsKKwlyZXNwLm1yX2hhbmRsZSA9IHVvYmotPmlkOwogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CkBAIC02NTgsMTcgKzY0NSwxNyBAQAogCXB1dF9wZF9yZWFkKHBkKTsKIAogCW11dGV4X2xvY2soJmZpbGUtPm11dGV4KTsKLQlsaXN0X2FkZF90YWlsKCZvYmotPnVvYmplY3QubGlzdCwgJmZpbGUtPnVjb250ZXh0LT5tcl9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZ1b2JqLT5saXN0LCAmZmlsZS0+dWNvbnRleHQtPm1yX2xpc3QpOwogCW11dGV4X3VubG9jaygmZmlsZS0+bXV0ZXgpOwogCi0Jb2JqLT51b2JqZWN0LmxpdmUgPSAxOworCXVvYmotPmxpdmUgPSAxOwogCi0JdXBfd3JpdGUoJm9iai0+dW9iamVjdC5tdXRleCk7CisJdXBfd3JpdGUoJnVvYmotPm11dGV4KTsKIAogCXJldHVybiBpbl9sZW47CiAKIGVycl9jb3B5OgotCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX21yX2lkciwgJm9iai0+dW9iamVjdCk7CisJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfbXJfaWRyLCB1b2JqKTsKIAogZXJyX3VucmVnOgogCWliX2RlcmVnX21yKG1yKTsKQEAgLTY3NiwxMSArNjYzLDggQEAKIGVycl9wdXQ6CiAJcHV0X3BkX3JlYWQocGQpOwogCi1lcnJfcmVsZWFzZToKLQlpYl91bWVtX3JlbGVhc2UoZmlsZS0+ZGV2aWNlLT5pYl9kZXYsICZvYmotPnVtZW0pOwotCiBlcnJfZnJlZToKLQlwdXRfdW9ial93cml0ZSgmb2JqLT51b2JqZWN0KTsKKwlwdXRfdW9ial93cml0ZSh1b2JqKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02OTEsNyArNjc1LDYgQEAKIAlzdHJ1Y3QgaWJfdXZlcmJzX2RlcmVnX21yIGNtZDsKIAlzdHJ1Y3QgaWJfbXIgICAgICAgICAgICAgKm1yOwogCXN0cnVjdCBpYl91b2JqZWN0CSAqdW9iajsKLQlzdHJ1Y3QgaWJfdW1lbV9vYmplY3QgICAgKm1lbW9iajsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKQEAgLTcwMSw4ICs2ODQsNyBAQAogCWlmICghdW9iaikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1vYmogPSBjb250YWluZXJfb2YodW9iaiwgc3RydWN0IGliX3VtZW1fb2JqZWN0LCB1b2JqZWN0KTsKLQltciAgICAgPSB1b2JqLT5vYmplY3Q7CisJbXIgPSB1b2JqLT5vYmplY3Q7CiAKIAlyZXQgPSBpYl9kZXJlZ19tcihtcik7CiAJaWYgKCFyZXQpCkBAIC03MTksOCArNzAxLDYgQEAKIAlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZmaWxlLT5tdXRleCk7CiAKLQlpYl91bWVtX3JlbGVhc2UoZmlsZS0+ZGV2aWNlLT5pYl9kZXYsICZtZW1vYmotPnVtZW0pOwotCiAJcHV0X3VvYmoodW9iaik7CiAKIAlyZXR1cm4gaW5fbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKaW5kZXggZDQ0ZTU0Ny4uMTRkN2NjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCkBAIC0xODMsNiArMTgzLDggQEAKIAlpZiAoIWNvbnRleHQpCiAJCXJldHVybiAwOwogCisJY29udGV4dC0+Y2xvc2luZyA9IDE7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW9iaiwgdG1wLCAmY29udGV4dC0+YWhfbGlzdCwgbGlzdCkgewogCQlzdHJ1Y3QgaWJfYWggKmFoID0gdW9iai0+b2JqZWN0OwogCkBAIC0yMzAsMTYgKzIzMiwxMCBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVvYmosIHRtcCwgJmNvbnRleHQtPm1yX2xpc3QsIGxpc3QpIHsKIAkJc3RydWN0IGliX21yICptciA9IHVvYmotPm9iamVjdDsKLQkJc3RydWN0IGliX2RldmljZSAqbXJkZXYgPSBtci0+ZGV2aWNlOwotCQlzdHJ1Y3QgaWJfdW1lbV9vYmplY3QgKm1lbW9iajsKIAogCQlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19tcl9pZHIsIHVvYmopOwogCQlpYl9kZXJlZ19tcihtcik7Ci0KLQkJbWVtb2JqID0gY29udGFpbmVyX29mKHVvYmosIHN0cnVjdCBpYl91bWVtX29iamVjdCwgdW9iamVjdCk7Ci0JCWliX3VtZW1fcmVsZWFzZV9vbl9jbG9zZShtcmRldiwgJm1lbW9iai0+dW1lbSk7Ci0KLQkJa2ZyZWUobWVtb2JqKTsKKwkJa2ZyZWUodW9iaik7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVvYmosIHRtcCwgJmNvbnRleHQtPnBkX2xpc3QsIGxpc3QpIHsKQEAgLTkwNiw3ICs5MDIsNiBAQAogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmdXZlcmJzX2V2ZW50X2ZzKTsKIAljbGFzc19kZXN0cm95KHV2ZXJic19jbGFzcyk7CiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKElCX1VWRVJCU19CQVNFX0RFViwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCWlkcl9kZXN0cm95KCZpYl91dmVyYnNfcGRfaWRyKTsKIAlpZHJfZGVzdHJveSgmaWJfdXZlcmJzX21yX2lkcik7CiAJaWRyX2Rlc3Ryb3koJmliX3V2ZXJic19td19pZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21lbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21lbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTVmZTk1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tZW0uYworKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA1IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwotICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCi0gKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKLSAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6Ci0gKgotICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKLSAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKLSAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgICAgIGRpc2NsYWltZXIuCi0gKgotICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLSAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KLSAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSAqIFNPRlRXQVJFLgotICoKLSAqICRJZDogdXZlcmJzX21lbS5jIDI3NDMgMjAwNS0wNi0yOCAyMjoyNzo1OVogcm9sYW5kICQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotCi0jaW5jbHVkZSAidXZlcmJzLmgiCi0KLXN0cnVjdCBpYl91bWVtX2FjY291bnRfd29yayB7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3RydWN0IG1tX3N0cnVjdCAgKm1tOwotCXVuc2lnbmVkIGxvbmcgICAgICBkaWZmOwotfTsKLQotCi1zdGF0aWMgdm9pZCBfX2liX3VtZW1fcmVsZWFzZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtLCBpbnQgZGlydHkpCi17Ci0Jc3RydWN0IGliX3VtZW1fY2h1bmsgKmNodW5rLCAqdG1wOwotCWludCBpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNodW5rLCB0bXAsICZ1bWVtLT5jaHVua19saXN0LCBsaXN0KSB7Ci0JCWliX2RtYV91bm1hcF9zZyhkZXYsIGNodW5rLT5wYWdlX2xpc3QsCi0JCQkJY2h1bmstPm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBjaHVuay0+bmVudHM7ICsraSkgewotCQkJaWYgKHVtZW0tPndyaXRhYmxlICYmIGRpcnR5KQotCQkJCXNldF9wYWdlX2RpcnR5X2xvY2soY2h1bmstPnBhZ2VfbGlzdFtpXS5wYWdlKTsKLQkJCXB1dF9wYWdlKGNodW5rLT5wYWdlX2xpc3RbaV0ucGFnZSk7Ci0JCX0KLQotCQlrZnJlZShjaHVuayk7Ci0JfQotfQotCi1pbnQgaWJfdW1lbV9nZXQoc3RydWN0IGliX2RldmljZSAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqbWVtLAotCQl2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHdyaXRlKQotewotCXN0cnVjdCBwYWdlICoqcGFnZV9saXN0OwotCXN0cnVjdCBpYl91bWVtX2NodW5rICpjaHVuazsKLQl1bnNpZ25lZCBsb25nIGxvY2tlZDsKLQl1bnNpZ25lZCBsb25nIGxvY2tfbGltaXQ7Ci0JdW5zaWduZWQgbG9uZyBjdXJfYmFzZTsKLQl1bnNpZ25lZCBsb25nIG5wYWdlczsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgb2ZmOwotCWludCBpOwotCi0JaWYgKCFjYW5fZG9fbWxvY2soKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXBhZ2VfbGlzdCA9IChzdHJ1Y3QgcGFnZSAqKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwotCWlmICghcGFnZV9saXN0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbS0+dXNlcl9iYXNlID0gKHVuc2lnbmVkIGxvbmcpIGFkZHI7Ci0JbWVtLT5sZW5ndGggICAgPSBzaXplOwotCW1lbS0+b2Zmc2V0ICAgID0gKHVuc2lnbmVkIGxvbmcpIGFkZHIgJiB+UEFHRV9NQVNLOwotCW1lbS0+cGFnZV9zaXplID0gUEFHRV9TSVpFOwotCW1lbS0+d3JpdGFibGUgID0gd3JpdGU7Ci0KLQlJTklUX0xJU1RfSEVBRCgmbWVtLT5jaHVua19saXN0KTsKLQotCW5wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSArIG1lbS0+b2Zmc2V0KSA+PiBQQUdFX1NISUZUOwotCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQotCWxvY2tlZCAgICAgPSBucGFnZXMgKyBjdXJyZW50LT5tbS0+bG9ja2VkX3ZtOwotCWxvY2tfbGltaXQgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyID4+IFBBR0VfU0hJRlQ7Ci0KLQlpZiAoKGxvY2tlZCA+IGxvY2tfbGltaXQpICYmICFjYXBhYmxlKENBUF9JUENfTE9DSykpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JY3VyX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgYWRkciAmIFBBR0VfTUFTSzsKLQotCXdoaWxlIChucGFnZXMpIHsKLQkJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIGN1cl9iYXNlLAotCQkJCSAgICAgbWluX3QoaW50LCBucGFnZXMsCi0JCQkJCSAgIFBBR0VfU0laRSAvIHNpemVvZiAoc3RydWN0IHBhZ2UgKikpLAotCQkJCSAgICAgMSwgIXdyaXRlLCBwYWdlX2xpc3QsIE5VTEwpOwotCi0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJY3VyX2Jhc2UgKz0gcmV0ICogUEFHRV9TSVpFOwotCQlucGFnZXMgICAtPSByZXQ7Ci0KLQkJb2ZmID0gMDsKLQotCQl3aGlsZSAocmV0KSB7Ci0JCQljaHVuayA9IGttYWxsb2Moc2l6ZW9mICpjaHVuayArIHNpemVvZiAoc3RydWN0IHNjYXR0ZXJsaXN0KSAqCi0JCQkJCW1pbl90KGludCwgcmV0LCBJQl9VTUVNX01BWF9QQUdFX0NIVU5LKSwKLQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWNodW5rKSB7Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQotCQkJY2h1bmstPm5lbnRzID0gbWluX3QoaW50LCByZXQsIElCX1VNRU1fTUFYX1BBR0VfQ0hVTkspOwotCQkJZm9yIChpID0gMDsgaSA8IGNodW5rLT5uZW50czsgKytpKSB7Ci0JCQkJY2h1bmstPnBhZ2VfbGlzdFtpXS5wYWdlICAgPSBwYWdlX2xpc3RbaSArIG9mZl07Ci0JCQkJY2h1bmstPnBhZ2VfbGlzdFtpXS5vZmZzZXQgPSAwOwotCQkJCWNodW5rLT5wYWdlX2xpc3RbaV0ubGVuZ3RoID0gUEFHRV9TSVpFOwotCQkJfQotCi0JCQljaHVuay0+bm1hcCA9IGliX2RtYV9tYXBfc2coZGV2LAotCQkJCQkJICAgICZjaHVuay0+cGFnZV9saXN0WzBdLAotCQkJCQkJICAgIGNodW5rLT5uZW50cywKLQkJCQkJCSAgICBETUFfQklESVJFQ1RJT05BTCk7Ci0JCQlpZiAoY2h1bmstPm5tYXAgPD0gMCkgewotCQkJCWZvciAoaSA9IDA7IGkgPCBjaHVuay0+bmVudHM7ICsraSkKLQkJCQkJcHV0X3BhZ2UoY2h1bmstPnBhZ2VfbGlzdFtpXS5wYWdlKTsKLQkJCQlrZnJlZShjaHVuayk7Ci0KLQkJCQlyZXQgPSAtRU5PTUVNOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQlyZXQgLT0gY2h1bmstPm5lbnRzOwotCQkJb2ZmICs9IGNodW5rLT5uZW50czsKLQkJCWxpc3RfYWRkX3RhaWwoJmNodW5rLT5saXN0LCAmbWVtLT5jaHVua19saXN0KTsKLQkJfQotCi0JCXJldCA9IDA7Ci0JfQotCi1vdXQ6Ci0JaWYgKHJldCA8IDApCi0JCV9faWJfdW1lbV9yZWxlYXNlKGRldiwgbWVtLCAwKTsKLQllbHNlCi0JCWN1cnJlbnQtPm1tLT5sb2NrZWRfdm0gPSBsb2NrZWQ7Ci0KLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2VfbGlzdCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGliX3VtZW1fcmVsZWFzZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtKQotewotCV9faWJfdW1lbV9yZWxlYXNlKGRldiwgdW1lbSwgMSk7Ci0KLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCWN1cnJlbnQtPm1tLT5sb2NrZWRfdm0gLT0KLQkJUEFHRV9BTElHTih1bWVtLT5sZW5ndGggKyB1bWVtLT5vZmZzZXQpID4+IFBBR0VfU0hJRlQ7Ci0JdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGliX3VtZW1fYWNjb3VudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKQotewotCXN0cnVjdCBpYl91bWVtX2FjY291bnRfd29yayAqd29yayA9Ci0JCWNvbnRhaW5lcl9vZihfd29yaywgc3RydWN0IGliX3VtZW1fYWNjb3VudF93b3JrLCB3b3JrKTsKLQotCWRvd25fd3JpdGUoJndvcmstPm1tLT5tbWFwX3NlbSk7Ci0Jd29yay0+bW0tPmxvY2tlZF92bSAtPSB3b3JrLT5kaWZmOwotCXVwX3dyaXRlKCZ3b3JrLT5tbS0+bW1hcF9zZW0pOwotCW1tcHV0KHdvcmstPm1tKTsKLQlrZnJlZSh3b3JrKTsKLX0KLQotdm9pZCBpYl91bWVtX3JlbGVhc2Vfb25fY2xvc2Uoc3RydWN0IGliX2RldmljZSAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSkKLXsKLQlzdHJ1Y3QgaWJfdW1lbV9hY2NvdW50X3dvcmsgKndvcms7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0KLQlfX2liX3VtZW1fcmVsZWFzZShkZXYsIHVtZW0sIDEpOwotCi0JbW0gPSBnZXRfdGFza19tbShjdXJyZW50KTsKLQlpZiAoIW1tKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFdlIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgbW0ncyBtbWFwX3NlbSBhbHJlYWR5IGhlbGQuICBUaGlzCi0JICogY2FuIGhhcHBlbiB3aGVuIGEgdXNlcnNwYWNlIG11bm1hcCgpIGlzIHRoZSBjYWxsIHRoYXQgZHJvcHMKLQkgKiB0aGUgbGFzdCByZWZlcmVuY2UgdG8gb3VyIGZpbGUgYW5kIGNhbGxzIG91ciByZWxlYXNlCi0JICogbWV0aG9kLiAgSWYgdGhlcmUgYXJlIG1lbW9yeSByZWdpb25zIHRvIGRlc3Ryb3ksIHdlJ2xsIGVuZAotCSAqIHVwIGhlcmUgYW5kIG5vdCBiZSBhYmxlIHRvIHRha2UgdGhlIG1tYXBfc2VtLiAgVGhlcmVmb3JlIHdlCi0JICogZGVmZXIgdGhlIHZtX2xvY2tlZCBhY2NvdW50aW5nIHRvIHRoZSBzeXN0ZW0gd29ya3F1ZXVlLgotCSAqLwotCi0Jd29yayA9IGttYWxsb2Moc2l6ZW9mICp3b3JrLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdvcmspIHsKLQkJbW1wdXQobW0pOwotCQlyZXR1cm47Ci0JfQotCi0JSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBpYl91bWVtX2FjY291bnQpOwotCXdvcmstPm1tICAgPSBtbTsKLQl3b3JrLT5kaWZmID0gUEFHRV9BTElHTih1bWVtLT5sZW5ndGggKyB1bWVtLT5vZmZzZXQpID4+IFBBR0VfU0hJRlQ7Ci0KLQlzY2hlZHVsZV93b3JrKCZ3b3JrLT53b3JrKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKaW5kZXggMTA5MTY2Mi4uOTk3Y2YxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICNpbmNsdWRlIDxyZG1hL2liX3NtaS5oPgorI2luY2x1ZGUgPHJkbWEvaWJfdW1lbS5oPgogI2luY2x1ZGUgPHJkbWEvaWJfdXNlcl92ZXJicy5oPgogI2luY2x1ZGUgImMyLmgiCiAjaW5jbHVkZSAiYzJfcHJvdmlkZXIuaCIKQEAgLTM5Niw2ICszOTcsNyBAQAogCX0KIAogCW1yLT5wZCA9IHRvX2MycGQoaWJfcGQpOworCW1yLT51bWVtID0gTlVMTDsKIAlwcl9kZWJ1ZygiJXMgLSBwYWdlIHNoaWZ0ICVkLCBwYmxfZGVwdGggJWQsIHRvdGFsX2xlbiAldSwgIgogCQkiKmlvdmFfc3RhcnQgJWxseCwgZmlyc3QgcGEgJWxseCwgbGFzdCBwYSAlbGx4XG4iLAogCQlfX0ZVTkNUSU9OX18sIHBhZ2Vfc2hpZnQsIHBibF9kZXB0aCwgdG90YWxfbGVuLApAQCAtNDI4LDggKzQzMCw4IEBACiAJcmV0dXJuIGMyX3JlZ19waHlzX21yKHBkLCAmYmwsIDEsIGFjYywgJmt2YSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmMyX3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICpyZWdpb24sCi0JCQkJICAgIGludCBhY2MsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCitzdGF0aWMgc3RydWN0IGliX21yICpjMl9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLCB1NjQgc3RhcnQsIHU2NCBsZW5ndGgsCisJCQkJICAgIHU2NCB2aXJ0LCBpbnQgYWNjLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogewogCXU2NCAqcGFnZXM7CiAJdTY0IGt2YSA9IDA7CkBAIC00NDEsMTUgKzQ0MywyMyBAQAogCXN0cnVjdCBjMl9tciAqYzJtcjsKIAogCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7Ci0Jc2hpZnQgPSBmZnMocmVnaW9uLT5wYWdlX3NpemUpIC0gMTsKIAogCWMybXIgPSBrbWFsbG9jKHNpemVvZigqYzJtciksIEdGUF9LRVJORUwpOwogCWlmICghYzJtcikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJYzJtci0+cGQgPSBjMnBkOwogCisJYzJtci0+dW1lbSA9IGliX3VtZW1fZ2V0KHBkLT51b2JqZWN0LT5jb250ZXh0LCBzdGFydCwgbGVuZ3RoLCBhY2MpOworCWlmIChJU19FUlIoYzJtci0+dW1lbSkpIHsKKwkJZXJyID0gUFRSX0VSUihjMm1yLT51bWVtKTsKKwkJa2ZyZWUoYzJtcik7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCisJc2hpZnQgPSBmZnMoYzJtci0+dW1lbS0+cGFnZV9zaXplKSAtIDE7CisKIAluID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmcmVnaW9uLT5jaHVua19saXN0LCBsaXN0KQorCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZjMm1yLT51bWVtLT5jaHVua19saXN0LCBsaXN0KQogCQluICs9IGNodW5rLT5uZW50czsKIAogCXBhZ2VzID0ga21hbGxvYyhuICogc2l6ZW9mKHU2NCksIEdGUF9LRVJORUwpOwpAQCAtNDU5LDM1ICs0NjksMzQgQEAKIAl9CiAKIAlpID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmcmVnaW9uLT5jaHVua19saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJmMybXItPnVtZW0tPmNodW5rX2xpc3QsIGxpc3QpIHsKIAkJZm9yIChqID0gMDsgaiA8IGNodW5rLT5ubWFwOyArK2opIHsKIAkJCWxlbiA9IHNnX2RtYV9sZW4oJmNodW5rLT5wYWdlX2xpc3Rbal0pID4+IHNoaWZ0OwogCQkJZm9yIChrID0gMDsgayA8IGxlbjsgKytrKSB7CiAJCQkJcGFnZXNbaSsrXSA9CiAJCQkJCXNnX2RtYV9hZGRyZXNzKCZjaHVuay0+cGFnZV9saXN0W2pdKSArCi0JCQkJCShyZWdpb24tPnBhZ2Vfc2l6ZSAqIGspOworCQkJCQkoYzJtci0+dW1lbS0+cGFnZV9zaXplICogayk7CiAJCQl9CiAJCX0KIAl9CiAKLQlrdmEgPSAodTY0KXJlZ2lvbi0+dmlydF9iYXNlOworCWt2YSA9IHZpcnQ7CiAgIAllcnIgPSBjMl9uc21yX3JlZ2lzdGVyX3BoeXNfa2Vybih0b19jMmRldihwZC0+ZGV2aWNlKSwKIAkJCQkJIHBhZ2VzLAotIAkJCQkJIHJlZ2lvbi0+cGFnZV9zaXplLAorCQkJCQkgYzJtci0+dW1lbS0+cGFnZV9zaXplLAogCQkJCQkgaSwKLQkJCQkJIHJlZ2lvbi0+bGVuZ3RoLAotCQkJCQkgcmVnaW9uLT5vZmZzZXQsCisJCQkJCSBsZW5ndGgsCisJCQkJCSBjMm1yLT51bWVtLT5vZmZzZXQsCiAJCQkJCSAma3ZhLAogCQkJCQkgYzJfY29udmVydF9hY2Nlc3MoYWNjKSwKIAkJCQkJIGMybXIpOwogCWtmcmVlKHBhZ2VzKTsKLQlpZiAoZXJyKSB7Ci0JCWtmcmVlKGMybXIpOwotCQlyZXR1cm4gRVJSX1BUUihlcnIpOwotCX0KKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKIAlyZXR1cm4gJmMybXItPmlibXI7CiAKIGVycjoKKwlpYl91bWVtX3JlbGVhc2UoYzJtci0+dW1lbSk7CiAJa2ZyZWUoYzJtcik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KQEAgLTUwMiw4ICs1MTEsMTEgQEAKIAllcnIgPSBjMl9zdGFnX2RlYWxsb2ModG9fYzJkZXYoaWJfbXItPmRldmljZSksIGliX21yLT5sa2V5KTsKIAlpZiAoZXJyKQogCQlwcl9kZWJ1ZygiYzJfc3RhZ19kZWFsbG9jIGZhaWxlZDogJWRcbiIsIGVycik7Ci0JZWxzZQorCWVsc2UgeworCQlpZiAobXItPnVtZW0pCisJCQlpYl91bWVtX3JlbGVhc2UobXItPnVtZW0pOwogCQlrZnJlZShtcik7CisJfQogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmgKaW5kZXggZmM5MDYyMi4uMTA3NmRmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmgKQEAgLTczLDYgKzczLDcgQEAKIHN0cnVjdCBjMl9tciB7CiAJc3RydWN0IGliX21yIGlibXI7CiAJc3RydWN0IGMyX3BkICpwZDsKKwlzdHJ1Y3QgaWJfdW1lbSAqdW1lbTsKIH07CiAKIHN0cnVjdCBjMl9hdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jCmluZGV4IGE4OTE0OTMuLmU3YzJjMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPHJkbWEvaXdfY20uaD4KICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9zbWkuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3VtZW0uaD4KICNpbmNsdWRlIDxyZG1hL2liX3VzZXJfdmVyYnMuaD4KIAogI2luY2x1ZGUgImN4aW9faGFsLmgiCkBAIC00NDMsNiArNDQ0LDggQEAKIAlyZW1vdmVfaGFuZGxlKHJocCwgJnJocC0+bW1pZHIsIG1taWQpOwogCWlmIChtaHAtPmt2YSkKIAkJa2ZyZWUoKHZvaWQgKikgKHVuc2lnbmVkIGxvbmcpIG1ocC0+a3ZhKTsKKwlpZiAobWhwLT51bWVtKQorCQlpYl91bWVtX3JlbGVhc2UobWhwLT51bWVtKTsKIAlQREJHKCIlcyBtbWlkIDB4JXggcHRyICVwXG4iLCBfX0ZVTkNUSU9OX18sIG1taWQsIG1ocCk7CiAJa2ZyZWUobWhwKTsKIAlyZXR1cm4gMDsKQEAgLTU3Nyw4ICs1ODAsOCBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgaWJfbXIgKml3Y2hfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnJlZ2lvbiwKLQkJCQkgICAgICBpbnQgYWNjLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQorc3RhdGljIHN0cnVjdCBpYl9tciAqaXdjaF9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLCB1NjQgc3RhcnQsIHU2NCBsZW5ndGgsCisJCQkJICAgICAgdTY0IHZpcnQsIGludCBhY2MsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCiB7CiAJX19iZTY0ICpwYWdlczsKIAlpbnQgc2hpZnQsIG4sIGxlbjsKQEAgLTU5MSw3ICs1OTQsNiBAQAogCXN0cnVjdCBpd2NoX3JlZ191c2VyX21yX3Jlc3AgdXJlc3A7CiAKIAlQREJHKCIlcyBpYl9wZCAlcFxuIiwgX19GVU5DVElPTl9fLCBwZCk7Ci0Jc2hpZnQgPSBmZnMocmVnaW9uLT5wYWdlX3NpemUpIC0gMTsKIAogCXBocCA9IHRvX2l3Y2hfcGQocGQpOwogCXJocCA9IHBocC0+cmhwOwpAQCAtNTk5LDggKzYwMSwxNyBAQAogCWlmICghbWhwKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAorCW1ocC0+dW1lbSA9IGliX3VtZW1fZ2V0KHBkLT51b2JqZWN0LT5jb250ZXh0LCBzdGFydCwgbGVuZ3RoLCBhY2MpOworCWlmIChJU19FUlIobWhwLT51bWVtKSkgeworCQllcnIgPSBQVFJfRVJSKG1ocC0+dW1lbSk7CisJCWtmcmVlKG1ocCk7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCisJc2hpZnQgPSBmZnMobWhwLT51bWVtLT5wYWdlX3NpemUpIC0gMTsKKwogCW4gPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZyZWdpb24tPmNodW5rX2xpc3QsIGxpc3QpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJm1ocC0+dW1lbS0+Y2h1bmtfbGlzdCwgbGlzdCkKIAkJbiArPSBjaHVuay0+bmVudHM7CiAKIAlwYWdlcyA9IGttYWxsb2MobiAqIHNpemVvZih1NjQpLCBHRlBfS0VSTkVMKTsKQEAgLTYxMSwxMyArNjIyLDEzIEBACiAKIAlpID0gbiA9IDA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmcmVnaW9uLT5jaHVua19saXN0LCBsaXN0KQorCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZtaHAtPnVtZW0tPmNodW5rX2xpc3QsIGxpc3QpCiAJCWZvciAoaiA9IDA7IGogPCBjaHVuay0+bm1hcDsgKytqKSB7CiAJCQlsZW4gPSBzZ19kbWFfbGVuKCZjaHVuay0+cGFnZV9saXN0W2pdKSA+PiBzaGlmdDsKIAkJCWZvciAoayA9IDA7IGsgPCBsZW47ICsraykgewogCQkJCXBhZ2VzW2krK10gPSBjcHVfdG9fYmU2NChzZ19kbWFfYWRkcmVzcygKIAkJCQkJJmNodW5rLT5wYWdlX2xpc3Rbal0pICsKLQkJCQkJcmVnaW9uLT5wYWdlX3NpemUgKiBrKTsKKwkJCQkJbWhwLT51bWVtLT5wYWdlX3NpemUgKiBrKTsKIAkJCX0KIAkJfQogCkBAIC02MjUsOSArNjM2LDkgQEAKIAltaHAtPmF0dHIucGRpZCA9IHBocC0+cGRpZDsKIAltaHAtPmF0dHIuemJ2YSA9IDA7CiAJbWhwLT5hdHRyLnBlcm1zID0gaXdjaF9pYl90b190cHRfYWNjZXNzKGFjYyk7Ci0JbWhwLT5hdHRyLnZhX2ZibyA9IHJlZ2lvbi0+dmlydF9iYXNlOworCW1ocC0+YXR0ci52YV9mYm8gPSB2aXJ0OwogCW1ocC0+YXR0ci5wYWdlX3NpemUgPSBzaGlmdCAtIDEyOwotCW1ocC0+YXR0ci5sZW4gPSAodTMyKSByZWdpb24tPmxlbmd0aDsKKwltaHAtPmF0dHIubGVuID0gKHUzMikgbGVuZ3RoOwogCW1ocC0+YXR0ci5wYmxfc2l6ZSA9IGk7CiAJZXJyID0gaXdjaF9yZWdpc3Rlcl9tZW0ocmhwLCBwaHAsIG1ocCwgc2hpZnQsIHBhZ2VzKTsKIAlrZnJlZShwYWdlcyk7CkBAIC02NTAsNiArNjYxLDcgQEAKIAlyZXR1cm4gJm1ocC0+aWJtcjsKIAogZXJyOgorCWliX3VtZW1fcmVsZWFzZShtaHAtPnVtZW0pOwogCWtmcmVlKG1ocCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5oCmluZGV4IDkzYmNjNTYuLjQ4ODMzZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuaApAQCAtNzMsNiArNzMsNyBAQAogCiBzdHJ1Y3QgaXdjaF9tciB7CiAJc3RydWN0IGliX21yIGlibXI7CisJc3RydWN0IGliX3VtZW0gKnVtZW07CiAJc3RydWN0IGl3Y2hfZGV2ICpyaHA7CiAJdTY0IGt2YTsKIAlzdHJ1Y3QgdHB0X2F0dHJpYnV0ZXMgYXR0cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfY2xhc3Nlcy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmgKaW5kZXggMTBmYjhmYi4uMWQyODZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmgKQEAgLTE3Niw2ICsxNzYsNyBAQAogCQlzdHJ1Y3QgaWJfbXIgaWJfbXI7CS8qIG11c3QgYWx3YXlzIGJlIGZpcnN0IGluIGVoY2FfbXIgKi8KIAkJc3RydWN0IGliX2ZtciBpYl9mbXI7CS8qIG11c3QgYWx3YXlzIGJlIGZpcnN0IGluIGVoY2FfbXIgKi8KIAl9IGliOworCXN0cnVjdCBpYl91bWVtICp1bWVtOwogCXNwaW5sb2NrX3QgbXJsb2NrOwogCiAJZW51bSBlaGNhX21yX2ZsYWcgZmxhZ3M7CkBAIC0yNzYsNiArMjc3LDcgQEAKIAogZXh0ZXJuIHNwaW5sb2NrX3QgZWhjYV9xcF9pZHJfbG9jazsKIGV4dGVybiBzcGlubG9ja190IGVoY2FfY3FfaWRyX2xvY2s7CitleHRlcm4gc3BpbmxvY2tfdCBoY2FsbF9sb2NrOwogZXh0ZXJuIHN0cnVjdCBpZHIgZWhjYV9xcF9pZHI7CiBleHRlcm4gc3RydWN0IGlkciBlaGNhX2NxX2lkcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmMKaW5kZXggZjI4NGJlMS4uMTAwMzI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5jCkBAIC01MTcsMTIgKzUxNywxMSBAQAogCQkJZWxzZSB7CiAJCQkJc3RydWN0IGVoY2FfY3EgKmNxID0gZXEtPmVxZV9jYWNoZVtpXS5jcTsKIAkJCQljb21wX2V2ZW50X2NhbGxiYWNrKGNxKTsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjYV9jcV9pZHJfbG9jaywgZmxhZ3MpOworCQkJCXNwaW5fbG9jaygmZWhjYV9jcV9pZHJfbG9jayk7CiAJCQkJY3EtPm5yX2V2ZW50cy0tOwogCQkJCWlmICghY3EtPm5yX2V2ZW50cykKIAkJCQkJd2FrZV91cCgmY3EtPndhaXRfY29tcGxldGlvbik7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9jcV9pZHJfbG9jaywKLQkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJc3Bpbl91bmxvY2soJmVoY2FfY3FfaWRyX2xvY2spOwogCQkJfQogCQl9IGVsc2UgewogCQkJZWhjYV9kYmcoJnNoY2EtPmliX2RldmljZSwgIkdvdCBub24gY29tcGxldGlvbiBldmVudCIpOwpAQCAtNzExLDYgKzcxMCw3IEBACiAJCWt0aHJlYWRfc3RvcCh0YXNrKTsKIH0KIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogc3RhdGljIHZvaWQgdGFrZV9vdmVyX3dvcmsoc3RydWN0IGVoY2FfY29tcF9wb29sICpwb29sLAogCQkJICAgaW50IGNwdSkKIHsKQEAgLTczNSw3ICs3MzUsNiBAQAogCiB9CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyBpbnQgY29tcF9wb29sX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sCiAJCQkgICAgICB2b2lkICpoY3B1KQpAQCAtNzQ1LDYgKzc0NCw3IEBACiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CiAJCWVoY2FfZ2VuX2RiZygiQ1BVOiAleCAoQ1BVX1BSRVBBUkUpIiwgY3B1KTsKIAkJaWYoIWNyZWF0ZV9jb21wX3Rhc2socG9vbCwgY3B1KSkgewogCQkJZWhjYV9nZW5fZXJyKCJDYW4ndCBjcmVhdGUgY29tcF90YXNrIGZvciBjcHU6ICV4IiwgY3B1KTsKQEAgLTc1MiwyNCArNzUyLDI5IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CisJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgogCQllaGNhX2dlbl9kYmcoIkNQVTogJXggKENQVV9DQU5DRUxFRCkiLCBjcHUpOwogCQljY3QgPSBwZXJfY3B1X3B0cihwb29sLT5jcHVfY29tcF90YXNrcywgY3B1KTsKIAkJa3RocmVhZF9iaW5kKGNjdC0+dGFzaywgYW55X29ubGluZV9jcHUoY3B1X29ubGluZV9tYXApKTsKIAkJZGVzdHJveV9jb21wX3Rhc2socG9vbCwgY3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CiAJCWVoY2FfZ2VuX2RiZygiQ1BVOiAleCAoQ1BVX09OTElORSkiLCBjcHUpOwogCQljY3QgPSBwZXJfY3B1X3B0cihwb29sLT5jcHVfY29tcF90YXNrcywgY3B1KTsKIAkJa3RocmVhZF9iaW5kKGNjdC0+dGFzaywgY3B1KTsKIAkJd2FrZV91cF9wcm9jZXNzKGNjdC0+dGFzayk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgogCQllaGNhX2dlbl9kYmcoIkNQVTogJXggKENQVV9ET1dOX1BSRVBBUkUpIiwgY3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CisJY2FzZSBDUFVfRE9XTl9GQUlMRURfRlJPWkVOOgogCQllaGNhX2dlbl9kYmcoIkNQVTogJXggKENQVV9ET1dOX0ZBSUxFRCkiLCBjcHUpOwogCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQllaGNhX2dlbl9kYmcoIkNQVTogJXggKENQVV9ERUFEKSIsIGNwdSk7CiAJCWRlc3Ryb3lfY29tcF90YXNrKHBvb2wsIGNwdSk7CiAJCXRha2Vfb3Zlcl93b3JrKHBvb2wsIGNwdSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2l2ZXJicy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pdmVyYnMuaAppbmRleCBlMTRiMDI5Li4zN2U3ZmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2l2ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXZlcmJzLmgKQEAgLTc4LDggKzc4LDcgQEAKIAkJCSAgICAgICBpbnQgbnVtX3BoeXNfYnVmLAogCQkJICAgICAgIGludCBtcl9hY2Nlc3NfZmxhZ3MsIHU2NCAqaW92YV9zdGFydCk7CiAKLXN0cnVjdCBpYl9tciAqZWhjYV9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLAotCQkJICAgICAgIHN0cnVjdCBpYl91bWVtICpyZWdpb24sCitzdHJ1Y3QgaWJfbXIgKmVoY2FfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICpwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLCB1NjQgdmlydCwKIAkJCSAgICAgICBpbnQgbXJfYWNjZXNzX2ZsYWdzLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKIAogaW50IGVoY2FfcmVyZWdfcGh5c19tcihzdHJ1Y3QgaWJfbXIgKm1yLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYwppbmRleCAyZDM3MDU0Li5jM2Y5OWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYwpAQCAtNTIsNyArNTIsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX0FVVEhPUigiQ2hyaXN0b3BoIFJhaXNjaCA8cmFpc2NoQGRlLmlibS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklCTSBlU2VydmVyIEhDQSBJbmZpbmlCYW5kIERldmljZSBEcml2ZXIiKTsKLU1PRFVMRV9WRVJTSU9OKCJTVk5FSENBXzAwMjIiKTsKK01PRFVMRV9WRVJTSU9OKCJTVk5FSENBXzAwMjMiKTsKIAogaW50IGVoY2Ffb3Blbl9hcXAxICAgICA9IDA7CiBpbnQgZWhjYV9kZWJ1Z19sZXZlbCAgID0gMDsKQEAgLTYyLDcgKzYyLDcgQEAKIGludCBlaGNhX3BvcnRfYWN0X3RpbWUgPSAzMDsKIGludCBlaGNhX3BvbGxfYWxsX2VxcyAgPSAxOwogaW50IGVoY2Ffc3RhdGljX3JhdGUgICA9IC0xOwotaW50IGVoY2Ffc2NhbGluZ19jb2RlICA9IDE7CitpbnQgZWhjYV9zY2FsaW5nX2NvZGUgID0gMDsKIAogbW9kdWxlX3BhcmFtX25hbWVkKG9wZW5fYXFwMSwgICAgIGVoY2Ffb3Blbl9hcXAxLCAgICAgaW50LCAwKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19sZXZlbCwgICBlaGNhX2RlYnVnX2xldmVsLCAgIGludCwgMCk7CkBAIC05OCw2ICs5OCw3IEBACiAKIHNwaW5sb2NrX3QgZWhjYV9xcF9pZHJfbG9jazsKIHNwaW5sb2NrX3QgZWhjYV9jcV9pZHJfbG9jazsKK3NwaW5sb2NrX3QgaGNhbGxfbG9jazsKIERFRklORV9JRFIoZWhjYV9xcF9pZHIpOwogREVGSU5FX0lEUihlaGNhX2NxX2lkcik7CiAKQEAgLTQ1MywxNSArNDU0LDE0IEBACiBEUklWRVJfQVRUUihkZWJ1Z19sZXZlbCwgU19JUlVTUiB8IFNfSVdVU1IsCiAJICAgIGVoY2Ffc2hvd19kZWJ1Z19sZXZlbCwgZWhjYV9zdG9yZV9kZWJ1Z19sZXZlbCk7CiAKLXZvaWQgZWhjYV9jcmVhdGVfZHJpdmVyX3N5c2ZzKHN0cnVjdCBpYm1lYnVzX2RyaXZlciAqZHJ2KQotewotCWRyaXZlcl9jcmVhdGVfZmlsZSgmZHJ2LT5kcml2ZXIsICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7Ci19CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZWhjYV9kcnZfYXR0cnNbXSA9IHsKKwkmZHJpdmVyX2F0dHJfZGVidWdfbGV2ZWwuYXR0ciwKKwlOVUxMCit9OwogCi12b2lkIGVoY2FfcmVtb3ZlX2RyaXZlcl9zeXNmcyhzdHJ1Y3QgaWJtZWJ1c19kcml2ZXIgKmRydikKLXsKLQlkcml2ZXJfcmVtb3ZlX2ZpbGUoJmRydi0+ZHJpdmVyLCAmZHJpdmVyX2F0dHJfZGVidWdfbGV2ZWwpOwotfQorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZWhjYV9kcnZfYXR0cl9ncnAgPSB7CisJLmF0dHJzID0gZWhjYV9kcnZfYXR0cnMKK307CiAKICNkZWZpbmUgRUhDQV9SRVNPVVJDRV9BVFRSKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHN0YXRpYyBzc2l6ZV90ICBlaGNhX3Nob3dfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTUyMyw0NCArNTIzLDI4IEBACiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoYWRhcHRlcl9oYW5kbGUsIFNfSVJVR08sIGVoY2Ffc2hvd19hZGFwdGVyX2hhbmRsZSwgTlVMTCk7CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICplaGNhX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9hZGFwdGVyX2hhbmRsZS5hdHRyLAorCSZkZXZfYXR0cl9udW1fcG9ydHMuYXR0ciwKKwkmZGV2X2F0dHJfaHdfdmVyLmF0dHIsCisJJmRldl9hdHRyX21heF9lcS5hdHRyLAorCSZkZXZfYXR0cl9jdXJfZXEuYXR0ciwKKwkmZGV2X2F0dHJfbWF4X2NxLmF0dHIsCisJJmRldl9hdHRyX2N1cl9jcS5hdHRyLAorCSZkZXZfYXR0cl9tYXhfcXAuYXR0ciwKKwkmZGV2X2F0dHJfY3VyX3FwLmF0dHIsCisJJmRldl9hdHRyX21heF9tci5hdHRyLAorCSZkZXZfYXR0cl9jdXJfbXIuYXR0ciwKKwkmZGV2X2F0dHJfbWF4X213LmF0dHIsCisJJmRldl9hdHRyX2N1cl9tdy5hdHRyLAorCSZkZXZfYXR0cl9tYXhfcGQuYXR0ciwKKwkmZGV2X2F0dHJfbWF4X2FoLmF0dHIsCisJTlVMTAorfTsKIAotdm9pZCBlaGNhX2NyZWF0ZV9kZXZpY2Vfc3lzZnMoc3RydWN0IGlibWVidXNfZGV2ICpkZXYpCi17Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2FkYXB0ZXJfaGFuZGxlKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbnVtX3BvcnRzKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfaHdfdmVyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X2VxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfY3VyX2VxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X2NxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfY3VyX2NxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X3FwKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfY3VyX3FwKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X21yKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfY3VyX21yKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X213KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfY3VyX213KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X3BkKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X2FoKTsKLX0KLQotdm9pZCBlaGNhX3JlbW92ZV9kZXZpY2Vfc3lzZnMoc3RydWN0IGlibWVidXNfZGV2ICpkZXYpCi17Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2FkYXB0ZXJfaGFuZGxlKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbnVtX3BvcnRzKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfaHdfdmVyKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X2VxKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfY3VyX2VxKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X2NxKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfY3VyX2NxKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X3FwKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfY3VyX3FwKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X21yKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfY3VyX21yKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X213KTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfY3VyX213KTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X3BkKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+b2ZkZXYuZGV2LCAmZGV2X2F0dHJfbWF4X2FoKTsKLX0KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGVoY2FfZGV2X2F0dHJfZ3JwID0geworCS5hdHRycyA9IGVoY2FfZGV2X2F0dHJzCit9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBlaGNhX3Byb2JlKHN0cnVjdCBpYm1lYnVzX2RldiAqZGV2LAogCQkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkKQpAQCAtNTcwLDcgKzU1NCw3IEBACiAJc3RydWN0IGliX3BkICppYnBkOwogCWludCByZXQ7CiAKLQloYW5kbGUgPSBnZXRfcHJvcGVydHkoZGV2LT5vZmRldi5ub2RlLCAiaWJtLGhjYS1oYW5kbGUiLCBOVUxMKTsKKwloYW5kbGUgPSBvZl9nZXRfcHJvcGVydHkoZGV2LT5vZmRldi5ub2RlLCAiaWJtLGhjYS1oYW5kbGUiLCBOVUxMKTsKIAlpZiAoIWhhbmRsZSkgewogCQllaGNhX2dlbl9lcnIoIkNhbm5vdCBnZXQgZUhDQSBoYW5kbGUgZm9yIGFkYXB0ZXI6ICVzLiIsCiAJCQkgICAgIGRldi0+b2ZkZXYubm9kZS0+ZnVsbF9uYW1lKTsKQEAgLTY2OCw3ICs2NTIsMTAgQEAKIAkJfQogCX0KIAotCWVoY2FfY3JlYXRlX2RldmljZV9zeXNmcyhkZXYpOworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5vZmRldi5kZXYua29iaiwgJmVoY2FfZGV2X2F0dHJfZ3JwKTsKKwlpZiAocmV0KSAvKiBvbmx5IGNvbXBsYWluOyB3ZSBjYW4gbGl2ZSB3aXRob3V0IGF0dHJpYnV0ZXMgKi8KKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwKKwkJCSAiQ2Fubm90IGNyZWF0ZSBkZXZpY2UgYXR0cmlidXRlcyAgcmV0PSVkIiwgcmV0KTsKIAogCXNwaW5fbG9jaygmc2hjYV9saXN0X2xvY2spOwogCWxpc3RfYWRkKCZzaGNhLT5zaGNhX2xpc3QsICZzaGNhX2xpc3QpOwpAQCAtNzIwLDcgKzcwNyw3IEBACiAJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9IGRldi0+b2ZkZXYuZGV2LmRyaXZlcl9kYXRhOwogCWludCByZXQ7CiAKLQllaGNhX3JlbW92ZV9kZXZpY2Vfc3lzZnMoZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+b2ZkZXYuZGV2LmtvYmosICZlaGNhX2Rldl9hdHRyX2dycCk7CiAKIAlpZiAoZWhjYV9vcGVuX2FxcDEgPT0gMSkgewogCQlpbnQgaTsKQEAgLTgxMiwxMSArNzk5LDEyIEBACiAJaW50IHJldDsKIAogCXByaW50ayhLRVJOX0lORk8gImVIQ0EgSW5maW5pYmFuZCBEZXZpY2UgRHJpdmVyICIKLQkgICAgICAgIihSZWwuOiBTVk5FSENBXzAwMjIpXG4iKTsKKwkgICAgICAgIihSZWwuOiBTVk5FSENBXzAwMjMpXG4iKTsKIAlpZHJfaW5pdCgmZWhjYV9xcF9pZHIpOwogCWlkcl9pbml0KCZlaGNhX2NxX2lkcik7CiAJc3Bpbl9sb2NrX2luaXQoJmVoY2FfcXBfaWRyX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZlaGNhX2NxX2lkcl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaGNhbGxfbG9jayk7CiAKIAlJTklUX0xJU1RfSEVBRCgmc2hjYV9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmc2hjYV9saXN0X2xvY2spOwpAQCAtODM4LDcgKzgyNiw5IEBACiAJCWdvdG8gbW9kdWxlX2luaXQyOwogCX0KIAotCWVoY2FfY3JlYXRlX2RyaXZlcl9zeXNmcygmZWhjYV9kcml2ZXIpOworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZWhjYV9kcml2ZXIuZHJpdmVyLmtvYmosICZlaGNhX2Rydl9hdHRyX2dycCk7CisJaWYgKHJldCkgLyogb25seSBjb21wbGFpbjsgd2UgY2FuIGxpdmUgd2l0aG91dCBhdHRyaWJ1dGVzICovCisJCWVoY2FfZ2VuX2VycigiQ2Fubm90IGNyZWF0ZSBkcml2ZXIgYXR0cmlidXRlcyAgcmV0PSVkIiwgcmV0KTsKIAogCWlmIChlaGNhX3BvbGxfYWxsX2VxcyAhPSAxKSB7CiAJCWVoY2FfZ2VuX2VycigiV0FSTklORyEhISIpOwpAQCAtODY1LDcgKzg1NSw3IEBACiAJaWYgKGVoY2FfcG9sbF9hbGxfZXFzID09IDEpCiAJCWRlbF90aW1lcl9zeW5jKCZwb2xsX2Vxc190aW1lcik7CiAKLQllaGNhX3JlbW92ZV9kcml2ZXJfc3lzZnMoJmVoY2FfZHJpdmVyKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmVoY2FfZHJpdmVyLmRyaXZlci5rb2JqLCAmZWhjYV9kcnZfYXR0cl9ncnApOwogCWlibWVidXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmVoY2FfZHJpdmVyKTsKIAogCWVoY2FfZGVzdHJveV9zbGFiX2NhY2hlcygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tcm13LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuYwppbmRleCBkMjJhYjU2Li5hZGQ3OWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuYwpAQCAtMzksNiArMzksOCBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgPHJkbWEvaWJfdW1lbS5oPgorCiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KIAogI2luY2x1ZGUgImVoY2FfaXZlcmJzLmgiCkBAIC0yMzgsMTAgKzI0MCw4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0cnVjdCBpYl9tciAqZWhjYV9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLAotCQkJICAgICAgIHN0cnVjdCBpYl91bWVtICpyZWdpb24sCi0JCQkgICAgICAgaW50IG1yX2FjY2Vzc19mbGFncywKLQkJCSAgICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQorc3RydWN0IGliX21yICplaGNhX3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqcGQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCwgdTY0IHZpcnQsCisJCQkgICAgICAgaW50IG1yX2FjY2Vzc19mbGFncywgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKIHsKIAlzdHJ1Y3QgaWJfbXIgKmliX21yOwogCXN0cnVjdCBlaGNhX21yICplX21yOwpAQCAtMjU3LDExICsyNTcsNyBAQAogCQllaGNhX2dlbl9lcnIoImJhZCBwZD0lcCIsIHBkKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CiAJfQotCWlmICghcmVnaW9uKSB7Ci0JCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJiYWQgaW5wdXQgdmFsdWVzOiByZWdpb249JXAiLCByZWdpb24pOwotCQlpYl9tciA9IEVSUl9QVFIoLUVJTlZBTCk7Ci0JCWdvdG8gcmVnX3VzZXJfbXJfZXhpdDA7Ci0JfQorCiAJaWYgKCgobXJfYWNjZXNzX2ZsYWdzICYgSUJfQUNDRVNTX1JFTU9URV9XUklURSkgJiYKIAkgICAgICEobXJfYWNjZXNzX2ZsYWdzICYgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKSkgfHwKIAkgICAgKChtcl9hY2Nlc3NfZmxhZ3MgJiBJQl9BQ0NFU1NfUkVNT1RFX0FUT01JQykgJiYKQEAgLTI3NSwxNyArMjcxLDEwIEBACiAJCWliX21yID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJZ290byByZWdfdXNlcl9tcl9leGl0MDsKIAl9Ci0JaWYgKHJlZ2lvbi0+cGFnZV9zaXplICE9IFBBR0VfU0laRSkgewotCQllaGNhX2VycihwZC0+ZGV2aWNlLCAicGFnZSBzaXplIG5vdCBzdXBwb3J0ZWQsICIKLQkJCSAicmVnaW9uLT5wYWdlX3NpemU9JXgiLCByZWdpb24tPnBhZ2Vfc2l6ZSk7Ci0JCWliX21yID0gRVJSX1BUUigtRUlOVkFMKTsKLQkJZ290byByZWdfdXNlcl9tcl9leGl0MDsKLQl9CiAKLQlpZiAoKHJlZ2lvbi0+bGVuZ3RoID09IDApIHx8Ci0JICAgICgocmVnaW9uLT52aXJ0X2Jhc2UgKyByZWdpb24tPmxlbmd0aCkgPCByZWdpb24tPnZpcnRfYmFzZSkpIHsKKwlpZiAobGVuZ3RoID09IDAgfHwgdmlydCArIGxlbmd0aCA8IHZpcnQpIHsKIAkJZWhjYV9lcnIocGQtPmRldmljZSwgImJhZCBpbnB1dCB2YWx1ZXM6IGxlbmd0aD0lbHggIgotCQkJICJ2aXJ0X2Jhc2U9JWx4IiwgcmVnaW9uLT5sZW5ndGgsIHJlZ2lvbi0+dmlydF9iYXNlKTsKKwkJCSAidmlydF9iYXNlPSVseCIsIGxlbmd0aCwgdmlydCk7CiAJCWliX21yID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJZ290byByZWdfdXNlcl9tcl9leGl0MDsKIAl9CkBAIC0yOTcsNDAgKzI4Niw1NSBAQAogCQlnb3RvIHJlZ191c2VyX21yX2V4aXQwOwogCX0KIAorCWVfbXItPnVtZW0gPSBpYl91bWVtX2dldChwZC0+dW9iamVjdC0+Y29udGV4dCwgc3RhcnQsIGxlbmd0aCwKKwkJCQkgbXJfYWNjZXNzX2ZsYWdzKTsKKwlpZiAoSVNfRVJSKGVfbXItPnVtZW0pKSB7CisJCWliX21yID0gKHZvaWQgKikgZV9tci0+dW1lbTsKKwkJZ290byByZWdfdXNlcl9tcl9leGl0MTsKKwl9CisKKwlpZiAoZV9tci0+dW1lbS0+cGFnZV9zaXplICE9IFBBR0VfU0laRSkgeworCQllaGNhX2VycihwZC0+ZGV2aWNlLCAicGFnZSBzaXplIG5vdCBzdXBwb3J0ZWQsICIKKwkJCSAiZV9tci0+dW1lbS0+cGFnZV9zaXplPSV4IiwgZV9tci0+dW1lbS0+cGFnZV9zaXplKTsKKwkJaWJfbXIgPSBFUlJfUFRSKC1FSU5WQUwpOworCQlnb3RvIHJlZ191c2VyX21yX2V4aXQyOworCX0KKwogCS8qIGRldGVybWluZSBudW1iZXIgb2YgTVIgcGFnZXMgKi8KLQludW1fcGFnZXNfbXIgPSAoKChyZWdpb24tPnZpcnRfYmFzZSAlIFBBR0VfU0laRSkgKyByZWdpb24tPmxlbmd0aCArCi0JCQkgUEFHRV9TSVpFIC0gMSkgLyBQQUdFX1NJWkUpOwotCW51bV9wYWdlc180ayA9ICgoKHJlZ2lvbi0+dmlydF9iYXNlICUgRUhDQV9QQUdFU0laRSkgKyByZWdpb24tPmxlbmd0aCArCi0JCQkgRUhDQV9QQUdFU0laRSAtIDEpIC8gRUhDQV9QQUdFU0laRSk7CisJbnVtX3BhZ2VzX21yID0gKCgodmlydCAlIFBBR0VfU0laRSkgKyBsZW5ndGggKyBQQUdFX1NJWkUgLSAxKSAvCisJCQlQQUdFX1NJWkUpOworCW51bV9wYWdlc180ayA9ICgoKHZpcnQgJSBFSENBX1BBR0VTSVpFKSArIGxlbmd0aCArIEVIQ0FfUEFHRVNJWkUgLSAxKSAvCisJCQlFSENBX1BBR0VTSVpFKTsKIAogCS8qIHJlZ2lzdGVyIE1SIG9uIEhDQSAqLwogCXBnaW5mby50eXBlICAgICAgID0gRUhDQV9NUl9QR0lfVVNFUjsKIAlwZ2luZm8ubnVtX3BhZ2VzICA9IG51bV9wYWdlc19tcjsKIAlwZ2luZm8ubnVtXzRrICAgICA9IG51bV9wYWdlc180azsKLQlwZ2luZm8ucmVnaW9uICAgICA9IHJlZ2lvbjsKLQlwZ2luZm8ubmV4dF80awkgID0gcmVnaW9uLT5vZmZzZXQgLyBFSENBX1BBR0VTSVpFOworCXBnaW5mby5yZWdpb24gICAgID0gZV9tci0+dW1lbTsKKwlwZ2luZm8ubmV4dF80awkgID0gZV9tci0+dW1lbS0+b2Zmc2V0IC8gRUhDQV9QQUdFU0laRTsKIAlwZ2luZm8ubmV4dF9jaHVuayA9IGxpc3RfcHJlcGFyZV9lbnRyeShwZ2luZm8ubmV4dF9jaHVuaywKLQkJCQkJICAgICAgICgmcmVnaW9uLT5jaHVua19saXN0KSwKKwkJCQkJICAgICAgICgmZV9tci0+dW1lbS0+Y2h1bmtfbGlzdCksCiAJCQkJCSAgICAgICBsaXN0KTsKIAotCXJldCA9IGVoY2FfcmVnX21yKHNoY2EsIGVfbXIsICh1NjQqKXJlZ2lvbi0+dmlydF9iYXNlLAotCQkJICByZWdpb24tPmxlbmd0aCwgbXJfYWNjZXNzX2ZsYWdzLCBlX3BkLCAmcGdpbmZvLAotCQkJICAmZV9tci0+aWIuaWJfbXIubGtleSwgJmVfbXItPmliLmliX21yLnJrZXkpOworCXJldCA9IGVoY2FfcmVnX21yKHNoY2EsIGVfbXIsICh1NjQqKSB2aXJ0LCBsZW5ndGgsIG1yX2FjY2Vzc19mbGFncywgZV9wZCwKKwkJCSAgJnBnaW5mbywgJmVfbXItPmliLmliX21yLmxrZXksICZlX21yLT5pYi5pYl9tci5ya2V5KTsKIAlpZiAocmV0KSB7CiAJCWliX21yID0gRVJSX1BUUihyZXQpOwotCQlnb3RvIHJlZ191c2VyX21yX2V4aXQxOworCQlnb3RvIHJlZ191c2VyX21yX2V4aXQyOwogCX0KIAogCS8qIHN1Y2Nlc3NmdWwgcmVnaXN0cmF0aW9uIG9mIGFsbCBwYWdlcyAqLwogCXJldHVybiAmZV9tci0+aWIuaWJfbXI7CiAKK3JlZ191c2VyX21yX2V4aXQyOgorCWliX3VtZW1fcmVsZWFzZShlX21yLT51bWVtKTsKIHJlZ191c2VyX21yX2V4aXQxOgogCWVoY2FfbXJfZGVsZXRlKGVfbXIpOwogcmVnX3VzZXJfbXJfZXhpdDA6CiAJaWYgKElTX0VSUihpYl9tcikpCi0JCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJyYz0lbHggcGQ9JXAgcmVnaW9uPSVwIG1yX2FjY2Vzc19mbGFncz0leCIKKwkJZWhjYV9lcnIocGQtPmRldmljZSwgInJjPSVseCBwZD0lcCBtcl9hY2Nlc3NfZmxhZ3M9JXgiCiAJCQkgIiB1ZGF0YT0lcCIsCi0JCQkgUFRSX0VSUihpYl9tciksIHBkLCByZWdpb24sIG1yX2FjY2Vzc19mbGFncywgdWRhdGEpOworCQkJIFBUUl9FUlIoaWJfbXIpLCBwZCwgbXJfYWNjZXNzX2ZsYWdzLCB1ZGF0YSk7CiAJcmV0dXJuIGliX21yOwogfSAvKiBlbmQgZWhjYV9yZWdfdXNlcl9tcigpICovCiAKQEAgLTU5Niw2ICs2MDAsOSBAQAogCQlnb3RvIGRlcmVnX21yX2V4aXQwOwogCX0KIAorCWlmIChlX21yLT51bWVtKQorCQlpYl91bWVtX3JlbGVhc2UoZV9tci0+dW1lbSk7CisKIAkvKiBzdWNjZXNzZnVsIGRlcmVnaXN0cmF0aW9uICovCiAJZWhjYV9tcl9kZWxldGUoZV9tcik7CiAKQEAgLTIwNDMsMTMgKzIwNTAsMTAgQEAKIAlzd2l0Y2ggKGhpcHpfcmMpIHsKIAljYXNlIEhfU1VDQ0VTUzoJICAgICAgICAgICAgIC8qIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiAqLwogCQlyZXR1cm4gMDsKLQljYXNlIEhfQURBUFRFUl9QQVJNOiAgICAgICAgIC8qIGludmFsaWQgYWRhcHRlciBoYW5kbGUgKi8KLQljYXNlIEhfUlRfUEFSTTogICAgICAgICAgICAgIC8qIGludmFsaWQgcmVzb3VyY2UgdHlwZSAqLwogCWNhc2UgSF9OT1RfRU5PVUdIX1JFU09VUkNFUzogLyogaW5zdWZmaWNpZW50IHJlc291cmNlcyAqLwotCWNhc2UgSF9NTEVOR1RIX1BBUk06ICAgICAgICAgLyogaW52YWxpZCBtZW1vcnkgbGVuZ3RoICovCi0JY2FzZSBIX01FTV9BQ0NFU1NfUEFSTTogICAgICAvKiBpbnZhbGlkIGFjY2VzcyBjb250cm9scyAqLwogCWNhc2UgSF9DT05TVFJBSU5FRDogICAgICAgICAgLyogcmVzb3VyY2UgY29uc3RyYWludCAqLwotCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIEhfTk9fTUVNOgorCQlyZXR1cm4gLUVOT01FTTsKIAljYXNlIEhfQlVTWTogICAgICAgICAgICAgICAgIC8qIGxvbmcgYnVzeSAqLwogCQlyZXR1cm4gLUVCVVNZOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3FwLmMKaW5kZXggZGYwNTE2Zi4uYjViYzc4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYwpAQCAtNTIzLDYgKzUyMyw4IEBACiAJCWdvdG8gY3JlYXRlX3FwX2V4aXQxOwogCX0KIAorCW15X3FwLT5pYl9xcC5xcF9udW0gPSBteV9xcC0+cmVhbF9xcF9udW07CisKIAlzd2l0Y2ggKGluaXRfYXR0ci0+cXBfdHlwZSkgewogCWNhc2UgSUJfUVBUX1JDOgogCSAgICAgICAgaWYgKGlzZGFxcCA9PSAwKSB7CkBAIC01NjgsNyArNTcwLDcgQEAKIAkJCXBhcm1zLmFjdF9ucl9yZWN2X3dxZXMgPSBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl93cjsKIAkJCXBhcm1zLmFjdF9ucl9zZW5kX3NnZXMgPSBpbml0X2F0dHItPmNhcC5tYXhfc2VuZF9zZ2U7CiAJCQlwYXJtcy5hY3RfbnJfcmVjdl9zZ2VzID0gaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlOwotCQkJbXlfcXAtPnJlYWxfcXBfbnVtID0KKwkJCW15X3FwLT5pYl9xcC5xcF9udW0gPQogCQkJCShpbml0X2F0dHItPnFwX3R5cGUgPT0gSUJfUVBUX1NNSSkgPyAwIDogMTsKIAkJfQogCkBAIC01OTUsNyArNTk3LDYgQEAKIAlteV9xcC0+aWJfcXAucmVjdl9jcSA9IGluaXRfYXR0ci0+cmVjdl9jcTsKIAlteV9xcC0+aWJfcXAuc2VuZF9jcSA9IGluaXRfYXR0ci0+c2VuZF9jcTsKIAotCW15X3FwLT5pYl9xcC5xcF9udW0gPSBteV9xcC0+cmVhbF9xcF9udW07CiAJbXlfcXAtPmliX3FwLnFwX3R5cGUgPSBpbml0X2F0dHItPnFwX3R5cGU7CiAKIAlteV9xcC0+cXBfdHlwZSA9IGluaXRfYXR0ci0+cXBfdHlwZTsKQEAgLTk2OCwxNyArOTY5LDIxIEBACiAJCQkoKGVoY2FfbXVsdCAtIDEpIC8gYWhfbXVsdCkgOiAwOwogCQllbHNlCiAJCQltcXBjYi0+bWF4X3N0YXRpY19yYXRlID0gMDsKLQogCQl1cGRhdGVfbWFzayB8PSBFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX01BWF9TVEFUSUNfUkFURSwgMSk7CiAKIAkJLyoKKwkJICogQWx3YXlzIHN1cHBseSB0aGUgR1JIIGZsYWcsIGV2ZW4gaWYgaXQncyB6ZXJvLCB0byBnaXZlIHRoZQorCQkgKiBoeXBlcnZpc29yIGEgY2xlYXIgInllcyIgb3IgIm5vIiBpbnN0ZWFkIG9mIGEgInBlcmhhcHMiCisJCSAqLworCQl1cGRhdGVfbWFzayB8PSBFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX1NFTkRfR1JIX0ZMQUcsIDEpOworCisJCS8qCiAJCSAqIG9ubHkgaWYgR1JIIGlzIFRSVUUgd2UgbWlnaHQgY29uc2lkZXIgU09VUkNFX0dJRF9JRFgKIAkJICogYW5kIERFU1RfR0lEIG90aGVyd2lzZSBwaHlwZSB3aWxsIHJldHVybiBIX0FUVFJfUEFSTSEhIQogCQkgKi8KIAkJaWYgKGF0dHItPmFoX2F0dHIuYWhfZmxhZ3MgPT0gSUJfQUhfR1JIKSB7Ci0JCQltcXBjYi0+c2VuZF9ncmhfZmxhZyA9IDEgPDwgMzE7Ci0JCQl1cGRhdGVfbWFzayB8PQotCQkJCUVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfU0VORF9HUkhfRkxBRywgMSk7CisJCQltcXBjYi0+c2VuZF9ncmhfZmxhZyA9IDE7CisKIAkJCW1xcGNiLT5zb3VyY2VfZ2lkX2lkeCA9IGF0dHItPmFoX2F0dHIuZ3JoLnNnaWRfaW5kZXg7CiAJCQl1cGRhdGVfbWFzayB8PQogCQkJCUVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfU09VUkNFX0dJRF9JRFgsIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGNwX2lmLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfaWYuYwppbmRleCBiNTY0ZmNkLi41NzY2YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfaWYuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfaWYuYwpAQCAtMTU0LDcgKzE1NCw4IEBACiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzkpCiB7CiAJbG9uZyByZXQ7Ci0JaW50IGksIHNsZWVwX21zZWNzOworCWludCBpLCBzbGVlcF9tc2VjcywgbG9ja19pc19zZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAllaGNhX2dlbl9kYmcoIm9wY29kZT0lbHggYXJnMT0lbHggYXJnMj0lbHggYXJnMz0lbHggYXJnND0lbHggIgogCQkgICAgICJhcmc1PSVseCBhcmc2PSVseCBhcmc3PSVseCBhcmc4PSVseCBhcmc5PSVseCIsCkBAIC0xNjIsMTAgKzE2MywxOCBAQAogCQkgICAgIGFyZzgsIGFyZzkpOwogCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlpZiAoKG9wY29kZSA9PSBIX0FMTE9DX1JFU09VUkNFKSAmJiAoYXJnMiA9PSA1KSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmhjYWxsX2xvY2ssIGZsYWdzKTsKKwkJCWxvY2tfaXNfc2V0ID0gMTsKKwkJfQorCiAJCXJldCA9IHBscGFyX2hjYWxsOShvcGNvZGUsIG91dHMsCiAJCQkJICAgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwKIAkJCQkgICBhcmc2LCBhcmc3LCBhcmc4LCBhcmc5KTsKIAorCQlpZiAobG9ja19pc19zZXQpCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoY2FsbF9sb2NrLCBmbGFncyk7CisKIAkJaWYgKEhfSVNfTE9OR19CVVNZKHJldCkpIHsKIAkJCXNsZWVwX21zZWNzID0gZ2V0X2xvbmdidXN5X21zZWNzKHJldCk7CiAJCQltc2xlZXBfaW50ZXJydXB0aWJsZShzbGVlcF9tc2Vjcyk7CkBAIC0xOTMsMTEgKzIwMiwxMSBAQAogCQkJICAgICBvcGNvZGUsIHJldCwgb3V0c1swXSwgb3V0c1sxXSwgb3V0c1syXSwgb3V0c1szXSwKIAkJCSAgICAgb3V0c1s0XSwgb3V0c1s1XSwgb3V0c1s2XSwgb3V0c1s3XSwgb3V0c1s4XSk7CiAJCXJldHVybiByZXQ7Ci0KIAl9CiAKIAlyZXR1cm4gSF9CVVNZOwogfQorCiB1NjQgaGlwel9oX2FsbG9jX3Jlc291cmNlX2VxKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCiAJCQkgICAgIHN0cnVjdCBlaGNhX3BmZXEgKnBmZXEsCiAJCQkgICAgIGNvbnN0IHUzMiBuZXFfY29udHJvbCwKQEAgLTMyMiw3ICszMzEsNyBAQAogCQkJCTApOwogCXFwLT5pcHpfcXBfaGFuZGxlLmhhbmRsZSA9IG91dHNbMF07CiAJcXAtPnJlYWxfcXBfbnVtID0gKHUzMilvdXRzWzFdOwotCXBhcm1zLT5hY3RfbnJfc2VuZF9zZ2VzID0KKwlwYXJtcy0+YWN0X25yX3NlbmRfd3FlcyA9CiAJCSh1MTYpRUhDQV9CTUFTS19HRVQoSF9BTExfUkVTX1FQX0FDVF9PVVRTVF9TRU5EX1dSLCBvdXRzWzJdKTsKIAlwYXJtcy0+YWN0X25yX3JlY3Zfd3FlcyA9CiAJCSh1MTYpRUhDQV9CTUFTS19HRVQoSF9BTExfUkVTX1FQX0FDVF9PVVRTVF9SRUNWX1dSLCBvdXRzWzJdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9mcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMKaW5kZXggMDM2ZWQxZS4uZWJkNWM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMKQEAgLTUyMyw3ICs1MjMsNyBAQAogCWludCByZXQ7CiAKIAlzdGF0aWMgc3RydWN0IHRyZWVfZGVzY3IgZmlsZXNbXSA9IHsKLQkJWzFdID0geyJhdG9taWNfc3RhdHMiLCAmYXRvbWljX3N0YXRzX29wcywgU19JUlVHT30sCisJCVsyXSA9IHsiYXRvbWljX3N0YXRzIiwgJmF0b21pY19zdGF0c19vcHMsIFNfSVJVR099LAogCQl7IiJ9LAogCX07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjEyMC5jCmluZGV4IDFiOWMzMDguLjRlMmUzZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTIwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMjAuYwpAQCAtNzQ3LDcgKzc0Nyw2IEBACiAKIHN0YXRpYyBpbnQgaXBhdGhfcGVfaW50Y29uZmlnKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKLQl1NjQgdmFsOwogCXUzMiBjaGlwcmV2OwogCiAJLyoKQEAgLTc2MCw5ICs3NTksOSBAQAogCWlmICgoY2hpcHJldiAmIElORklOSVBBVEhfUl9DSElQUkVWTUlOT1JfTUFTSykgPiAxKSB7CiAJCS8qIFJldjIrIHJlcG9ydHMgZXh0cmEgZXJyb3JzIHZpYSBpbnRlcm5hbCBHUElPIHBpbnMgKi8KIAkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0dQSU9fRVJSSU5UUlM7Ci0JCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzayk7Ci0JCXZhbCB8PSBJUEFUSF9HUElPX0VSUklOVFJfTUFTSzsKLQkJaXBhdGhfd3JpdGVfa3JlZyggZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19tYXNrLCB2YWwpOworCQlkZC0+aXBhdGhfZ3Bpb19tYXNrIHw9IElQQVRIX0dQSU9fRVJSSU5UUl9NQVNLOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzaywKKwkJCQkgZGQtPmlwYXRoX2dwaW9fbWFzayk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKaW5kZXggNDVkMDMzMS4uYTkwZDNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCkBAIC0xMDU2LDcgKzEwNTYsNyBAQAogCQkJZ3Bpb3N0YXR1cyAmPSB+KDEgPDwgSVBBVEhfR1BJT19QT1JUMF9CSVQpOwogCQkJY2hrMHJjdiA9IDE7CiAJCX0KLQkJaWYgKHVubGlrZWx5KGdwaW9zdGF0dXMpKSB7CisJCWlmIChncGlvc3RhdHVzKSB7CiAJCQkvKgogCQkJICogU29tZSB1bmV4cGVjdGVkIGJpdHMgcmVtYWluLiBJZiB0aGV5IGNvdWxkIGhhdmUKIAkJCSAqIGNhdXNlZCB0aGUgaW50ZXJydXB0LCBjb21wbGFpbiBhbmQgY2xlYXIuCkBAIC0xMDY1LDkgKzEwNjUsOCBAQAogCQkJICogR1BJTyBpbnRlcnJ1cHRzLCBwb3NzaWJseSBvbiBhICJ0aHJlZSBzdHJpa2VzIgogCQkJICogYmFzaXMuCiAJCQkgKi8KLQkJCXUzMiBtYXNrOwotCQkJbWFzayA9IGlwYXRoX3JlYWRfa3JlZzMyKAotCQkJCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzayk7CisJCQljb25zdCB1MzIgbWFzayA9ICh1MzIpIGRkLT5pcGF0aF9ncGlvX21hc2s7CisKIAkJCWlmIChtYXNrICYgZ3Bpb3N0YXR1cykgewogCQkJCWlwYXRoX2RiZygiVW5leHBlY3RlZCBHUElPIElSUSBiaXRzICV4XG4iLAogCQkJCSAgZ3Bpb3N0YXR1cyAmIG1hc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oCmluZGV4IGU5MDBjMjUuLjEyMTk0ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXJuZWwuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2VybmVsLmgKQEAgLTM5Nyw2ICszOTcsOCBAQAogCXVuc2lnbmVkIGxvbmcgaXBhdGhfcGlvYXZhaWxzaGFkb3dbOF07CiAJLyogc2hhZG93IG9mIGtyX2dwaW9fb3V0LCBmb3Igcm13IG9wcyAqLwogCXU2NCBpcGF0aF9ncGlvX291dDsKKwkvKiBzaGFkb3cgdGhlIGdwaW8gbWFzayByZWdpc3RlciAqLworCXU2NCBpcGF0aF9ncGlvX21hc2s7CiAJLyoga3JfcmV2aXNpb24gc2hhZG93ICovCiAJdTY0IGlwYXRoX3JldmlzaW9uOwogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCmluZGV4IDMxZTcwNzMuLmJkZWVmOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCkBAIC0zMSw2ICszMSw3IEBACiAgKiBTT0ZUV0FSRS4KICAqLwogCisjaW5jbHVkZSA8cmRtYS9pYl91bWVtLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9wYWNrLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9zbWkuaD4KIApAQCAtMTQ3LDYgKzE0OCw3IEBACiAJbXItPm1yLm9mZnNldCA9IDA7CiAJbXItPm1yLmFjY2Vzc19mbGFncyA9IGFjYzsKIAltci0+bXIubWF4X3NlZ3MgPSBudW1fcGh5c19idWY7CisJbXItPnVtZW0gPSBOVUxMOwogCiAJbSA9IDA7CiAJbiA9IDA7CkBAIC0xNzAsNDYgKzE3Miw1NiBAQAogLyoqCiAgKiBpcGF0aF9yZWdfdXNlcl9tciAtIHJlZ2lzdGVyIGEgdXNlcnNwYWNlIG1lbW9yeSByZWdpb24KICAqIEBwZDogcHJvdGVjdGlvbiBkb21haW4gZm9yIHRoaXMgbWVtb3J5IHJlZ2lvbgotICogQHJlZ2lvbjogdGhlIHVzZXIgbWVtb3J5IHJlZ2lvbgorICogQHN0YXJ0OiBzdGFydGluZyB1c2Vyc3BhY2UgYWRkcmVzcworICogQGxlbmd0aDogbGVuZ3RoIG9mIHJlZ2lvbiB0byByZWdpc3RlcgorICogQHZpcnRfYWRkcjogdmlydHVhbCBhZGRyZXNzIHRvIHVzZSAoZnJvbSBIQ0EncyBwb2ludCBvZiB2aWV3KQogICogQG1yX2FjY2Vzc19mbGFnczogYWNjZXNzIGZsYWdzIGZvciB0aGlzIG1lbW9yeSByZWdpb24KICAqIEB1ZGF0YTogdW51c2VkIGJ5IHRoZSBJbmZpbmlQYXRoIGRyaXZlcgogICoKICAqIFJldHVybnMgdGhlIG1lbW9yeSByZWdpb24gb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHJldHVybnMgYW4gZXJybm8uCiAgKi8KLXN0cnVjdCBpYl9tciAqaXBhdGhfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnJlZ2lvbiwKLQkJCQlpbnQgbXJfYWNjZXNzX2ZsYWdzLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQorc3RydWN0IGliX21yICppcGF0aF9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLCB1NjQgc3RhcnQsIHU2NCBsZW5ndGgsCisJCQkJdTY0IHZpcnRfYWRkciwgaW50IG1yX2FjY2Vzc19mbGFncywKKwkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogewogCXN0cnVjdCBpcGF0aF9tciAqbXI7CisJc3RydWN0IGliX3VtZW0gKnVtZW07CiAJc3RydWN0IGliX3VtZW1fY2h1bmsgKmNodW5rOwogCWludCBuLCBtLCBpOwogCXN0cnVjdCBpYl9tciAqcmV0OwogCi0JaWYgKHJlZ2lvbi0+bGVuZ3RoID09IDApIHsKKwlpZiAobGVuZ3RoID09IDApIHsKIAkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJZ290byBiYWlsOwogCX0KIAorCXVtZW0gPSBpYl91bWVtX2dldChwZC0+dW9iamVjdC0+Y29udGV4dCwgc3RhcnQsIGxlbmd0aCwgbXJfYWNjZXNzX2ZsYWdzKTsKKwlpZiAoSVNfRVJSKHVtZW0pKQorCQlyZXR1cm4gKHZvaWQgKikgdW1lbTsKKwogCW4gPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZyZWdpb24tPmNodW5rX2xpc3QsIGxpc3QpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJnVtZW0tPmNodW5rX2xpc3QsIGxpc3QpCiAJCW4gKz0gY2h1bmstPm5lbnRzOwogCiAJbXIgPSBhbGxvY19tcihuLCAmdG9faWRldihwZC0+ZGV2aWNlKS0+bGtfdGFibGUpOwogCWlmICghbXIpIHsKIAkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJaWJfdW1lbV9yZWxlYXNlKHVtZW0pOwogCQlnb3RvIGJhaWw7CiAJfQogCiAJbXItPm1yLnBkID0gcGQ7Ci0JbXItPm1yLnVzZXJfYmFzZSA9IHJlZ2lvbi0+dXNlcl9iYXNlOwotCW1yLT5tci5pb3ZhID0gcmVnaW9uLT52aXJ0X2Jhc2U7Ci0JbXItPm1yLmxlbmd0aCA9IHJlZ2lvbi0+bGVuZ3RoOwotCW1yLT5tci5vZmZzZXQgPSByZWdpb24tPm9mZnNldDsKKwltci0+bXIudXNlcl9iYXNlID0gc3RhcnQ7CisJbXItPm1yLmlvdmEgPSB2aXJ0X2FkZHI7CisJbXItPm1yLmxlbmd0aCA9IGxlbmd0aDsKKwltci0+bXIub2Zmc2V0ID0gdW1lbS0+b2Zmc2V0OwogCW1yLT5tci5hY2Nlc3NfZmxhZ3MgPSBtcl9hY2Nlc3NfZmxhZ3M7CiAJbXItPm1yLm1heF9zZWdzID0gbjsKKwltci0+dW1lbSA9IHVtZW07CiAKIAltID0gMDsKIAluID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmcmVnaW9uLT5jaHVua19saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJnVtZW0tPmNodW5rX2xpc3QsIGxpc3QpIHsKIAkJZm9yIChpID0gMDsgaSA8IGNodW5rLT5uZW50czsgaSsrKSB7CiAJCQl2b2lkICp2YWRkcjsKIApAQCAtMjE5LDcgKzIzMSw3IEBACiAJCQkJZ290byBiYWlsOwogCQkJfQogCQkJbXItPm1yLm1hcFttXS0+c2Vnc1tuXS52YWRkciA9IHZhZGRyOwotCQkJbXItPm1yLm1hcFttXS0+c2Vnc1tuXS5sZW5ndGggPSByZWdpb24tPnBhZ2Vfc2l6ZTsKKwkJCW1yLT5tci5tYXBbbV0tPnNlZ3Nbbl0ubGVuZ3RoID0gdW1lbS0+cGFnZV9zaXplOwogCQkJbisrOwogCQkJaWYgKG4gPT0gSVBBVEhfU0VHU1opIHsKIAkJCQltKys7CkBAIC0yNTMsNiArMjY1LDEwIEBACiAJCWktLTsKIAkJa2ZyZWUobXItPm1yLm1hcFtpXSk7CiAJfQorCisJaWYgKG1yLT51bWVtKQorCQlpYl91bWVtX3JlbGVhc2UobXItPnVtZW0pOworCiAJa2ZyZWUobXIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwppbmRleCAxMjkzM2U3Li5iYjcwODQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwpAQCAtMTM4NywxMyArMTM4NywxMiBAQAogCSAqIHByb2Nlc3NpbmcuCiAJICovCiAJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikgewotCQl1NjQgdmFsOwogCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2RlYnVncG9ydHNlbGVjdCwKIAkJCQkgMHgyMDc0MDc2NTQyMzEwVUxMKTsKIAkJLyogRW5hYmxlIEdQSU8gYml0IDIgaW50ZXJydXB0ICovCi0JCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzayk7Ci0JCXZhbCB8PSAodTY0KSAoMSA8PCBJUEFUSF9HUElPX1BPUlQwX0JJVCk7Ci0JCWlwYXRoX3dyaXRlX2tyZWcoIGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzaywgdmFsKTsKKwkJZGQtPmlwYXRoX2dwaW9fbWFzayB8PSAodTY0KSAoMSA8PCBJUEFUSF9HUElPX1BPUlQwX0JJVCk7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19tYXNrLAorCQkJCSBkZC0+aXBhdGhfZ3Bpb19tYXNrKTsKIAl9CiAKIAlpbml0X3RpbWVyKCZkZC0+dmVyYnNfdGltZXIpOwpAQCAtMTQxMiw4ICsxNDExLDkgQEAKICAgICAgICAgICAgICAgICB1NjQgdmFsOwogICAgICAgICAgICAgICAgIC8qIERpc2FibGUgR1BJTyBiaXQgMiBpbnRlcnJ1cHQgKi8KICAgICAgICAgICAgICAgICB2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX21hc2spOwotICAgICAgICAgICAgICAgIHZhbCAmPSB+KCh1NjQpICgxIDw8IElQQVRIX0dQSU9fUE9SVDBfQklUKSk7Ci0gICAgICAgICAgICAgICAgaXBhdGhfd3JpdGVfa3JlZyggZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19tYXNrLCB2YWwpOworCQlkZC0+aXBhdGhfZ3Bpb19tYXNrICY9IH4oKHU2NCkgKDEgPDwgSVBBVEhfR1BJT19QT1JUMF9CSVQpKTsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX21hc2ssCisJCQkJIGRkLT5pcGF0aF9ncGlvX21hc2spOwogCQkvKgogCQkgKiBXZSBtaWdodCB3YW50IHRvIHVuZG8gY2hhbmdlcyB0byBkZWJ1Z3BvcnRzZWxlY3QsCiAJCSAqIGJ1dCBob3c/CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCmluZGV4IDcwNjRmYzIuLjA4OGI4MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCkBAIC0yNTEsNiArMjUxLDcgQEAKIC8qIE1lbW9yeSByZWdpb24gKi8KIHN0cnVjdCBpcGF0aF9tciB7CiAJc3RydWN0IGliX21yIGlibXI7CisJc3RydWN0IGliX3VtZW0gKnVtZW07CiAJc3RydWN0IGlwYXRoX21yZWdpb24gbXI7CS8qIG11c3QgYmUgbGFzdCAqLwogfTsKIApAQCAtNzUxLDggKzc1Miw4IEBACiAJCQkJc3RydWN0IGliX3BoeXNfYnVmICpidWZmZXJfbGlzdCwKIAkJCQlpbnQgbnVtX3BoeXNfYnVmLCBpbnQgYWNjLCB1NjQgKmlvdmFfc3RhcnQpOwogCi1zdHJ1Y3QgaWJfbXIgKmlwYXRoX3JlZ191c2VyX21yKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICpyZWdpb24sCi0JCQkJaW50IG1yX2FjY2Vzc19mbGFncywKK3N0cnVjdCBpYl9tciAqaXBhdGhfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICpwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLAorCQkJCXU2NCB2aXJ0X2FkZHIsIGludCBtcl9hY2Nlc3NfZmxhZ3MsCiAJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CiAKIGludCBpcGF0aF9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnNfbWNhc3QuYwppbmRleCAwODVlMjhiLi5kZDY5MWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnNfbWNhc3QuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnNfbWNhc3QuYwpAQCAtMTY1LDEwICsxNjUsOSBAQAogewogCXN0cnVjdCByYl9ub2RlICoqbiA9ICZtY2FzdF90cmVlLnJiX25vZGU7CiAJc3RydWN0IHJiX25vZGUgKnBuID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWNhc3RfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJm1jYXN0X2xvY2spOwogCiAJd2hpbGUgKCpuKSB7CiAJCXN0cnVjdCBpcGF0aF9tY2FzdCAqdG1jYXN0OwpAQCAtMjI4LDcgKzIyNyw3IEBACiAJcmV0ID0gMDsKIAogYmFpbDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2FzdF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZtY2FzdF9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yODksMTcgKzI4OCwxNiBAQAogCXN0cnVjdCBpcGF0aF9tY2FzdCAqbWNhc3QgPSBOVUxMOwogCXN0cnVjdCBpcGF0aF9tY2FzdF9xcCAqcCwgKnRtcDsKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBsYXN0ID0gMDsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZtY2FzdF9sb2NrKTsKIAogCS8qIEZpbmQgdGhlIEdJRCBpbiB0aGUgbWNhc3QgdGFibGUuICovCiAJbiA9IG1jYXN0X3RyZWUucmJfbm9kZTsKIAl3aGlsZSAoMSkgewogCQlpZiAobiA9PSBOVUxMKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2FzdF9sb2NrLCBmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnEoJm1jYXN0X2xvY2spOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gYmFpbDsKIAkJfQpAQCAtMzM0LDcgKzMzMiw3IEBACiAJCWJyZWFrOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jYXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJm1jYXN0X2xvY2spOwogCiAJaWYgKHApIHsKIAkJLyoKQEAgLTM0OCw5ICszNDYsOSBAQAogCQlhdG9taWNfZGVjKCZtY2FzdC0+cmVmY291bnQpOwogCQl3YWl0X2V2ZW50KG1jYXN0LT53YWl0LCAhYXRvbWljX3JlYWQoJm1jYXN0LT5yZWZjb3VudCkpOwogCQlpcGF0aF9tY2FzdF9mcmVlKG1jYXN0KTsKLQkJc3Bpbl9sb2NrKCZkZXYtPm5fbWNhc3RfZ3Jwc19sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5uX21jYXN0X2dycHNfbG9jayk7CiAJCWRldi0+bl9tY2FzdF9ncnBzX2FsbG9jYXRlZC0tOwotCQlzcGluX3VubG9jaygmZGV2LT5uX21jYXN0X2dycHNfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5uX21jYXN0X2dycHNfbG9jayk7CiAJfQogCiAJcmV0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTEyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorY29uZmlnIE1MWDRfSU5GSU5JQkFORAorCXRyaXN0YXRlICJNZWxsYW5veCBDb25uZWN0WCBIQ0Egc3VwcG9ydCIKKwlkZXBlbmRzIG9uIElORklOSUJBTkQKKwlzZWxlY3QgTUxYNF9DT1JFCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgbG93LWxldmVsIEluZmluaUJhbmQgc3VwcG9ydCBmb3IKKwkgIE1lbGxhbm94IENvbm5lY3RYIFBDSSBFeHByZXNzIGhvc3QgY2hhbm5lbCBhZGFwdGVycyAoSENBcykuCisJICBUaGlzIGlzIHJlcXVpcmVkIHRvIHVzZSBJbmZpbmlCYW5kIHByb3RvY29scyBzdWNoIGFzCisJICBJUC1vdmVyLUlCIG9yIFNSUCB3aXRoIHRoZXNlIGRldmljZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZjA5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK29iai0kKENPTkZJR19NTFg0X0lORklOSUJBTkQpCSs9IG1seDRfaWIubworCittbHg0X2liLXkgOj0JYWgubyBjcS5vIGRvb3JiZWxsLm8gbWFkLm8gbWFpbi5vIG1yLm8gcXAubyBzcnEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvYWguYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2FoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc1YWM5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2FoLmMKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgIm1seDRfaWIuaCIKKworc3RydWN0IGliX2FoICptbHg0X2liX2NyZWF0ZV9haChzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0cikKK3sKKwlzdHJ1Y3QgbWx4NF9kZXYgKmRldiA9IHRvX21kZXYocGQtPmRldmljZSktPmRldjsKKwlzdHJ1Y3QgbWx4NF9pYl9haCAqYWg7CisKKwlhaCA9IGttYWxsb2Moc2l6ZW9mICphaCwgR0ZQX0FUT01JQyk7CisJaWYgKCFhaCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltZW1zZXQoJmFoLT5hdiwgMCwgc2l6ZW9mIGFoLT5hdik7CisKKwlhaC0+YXYucG9ydF9wZCA9IGNwdV90b19iZTMyKHRvX21wZChwZCktPnBkbiB8IChhaF9hdHRyLT5wb3J0X251bSA8PCAyNCkpOworCWFoLT5hdi5nX3NsaWQgID0gYWhfYXR0ci0+c3JjX3BhdGhfYml0czsKKwlhaC0+YXYuZGxpZCAgICA9IGNwdV90b19iZTE2KGFoX2F0dHItPmRsaWQpOworCWlmIChhaF9hdHRyLT5zdGF0aWNfcmF0ZSkgeworCQlhaC0+YXYuc3RhdF9yYXRlID0gYWhfYXR0ci0+c3RhdGljX3JhdGUgKyBNTFg0X1NUQVRfUkFURV9PRkZTRVQ7CisJCXdoaWxlIChhaC0+YXYuc3RhdF9yYXRlID4gSUJfUkFURV8yXzVfR0JQUyArIE1MWDRfU1RBVF9SQVRFX09GRlNFVCAmJgorCQkgICAgICAgISgxIDw8IGFoLT5hdi5zdGF0X3JhdGUgJiBkZXYtPmNhcHMuc3RhdF9yYXRlX3N1cHBvcnQpKQorCQkJLS1haC0+YXYuc3RhdF9yYXRlOworCX0KKwlhaC0+YXYuc2xfdGNsYXNzX2Zsb3dsYWJlbCA9IGNwdV90b19iZTMyKGFoX2F0dHItPnNsIDw8IDI4KTsKKwlpZiAoYWhfYXR0ci0+YWhfZmxhZ3MgJiBJQl9BSF9HUkgpIHsKKwkJYWgtPmF2Lmdfc2xpZCAgIHw9IDB4ODA7CisJCWFoLT5hdi5naWRfaW5kZXggPSBhaF9hdHRyLT5ncmguc2dpZF9pbmRleDsKKwkJYWgtPmF2LmhvcF9saW1pdCA9IGFoX2F0dHItPmdyaC5ob3BfbGltaXQ7CisJCWFoLT5hdi5zbF90Y2xhc3NfZmxvd2xhYmVsIHw9CisJCQljcHVfdG9fYmUzMigoYWhfYXR0ci0+Z3JoLnRyYWZmaWNfY2xhc3MgPDwgMjApIHwKKwkJCQkgICAgYWhfYXR0ci0+Z3JoLmZsb3dfbGFiZWwpOworCQltZW1jcHkoYWgtPmF2LmRnaWQsIGFoX2F0dHItPmdyaC5kZ2lkLnJhdywgMTYpOworCX0KKworCXJldHVybiAmYWgtPmliYWg7Cit9CisKK2ludCBtbHg0X2liX3F1ZXJ5X2FoKHN0cnVjdCBpYl9haCAqaWJhaCwgc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpCit7CisJc3RydWN0IG1seDRfaWJfYWggKmFoID0gdG9fbWFoKGliYWgpOworCisJbWVtc2V0KGFoX2F0dHIsIDAsIHNpemVvZiAqYWhfYXR0cik7CisJYWhfYXR0ci0+ZGxpZAkgICAgICAgPSBiZTE2X3RvX2NwdShhaC0+YXYuZGxpZCk7CisJYWhfYXR0ci0+c2wJICAgICAgID0gYmUzMl90b19jcHUoYWgtPmF2LnNsX3RjbGFzc19mbG93bGFiZWwpID4+IDI4OworCWFoX2F0dHItPnBvcnRfbnVtICAgICAgPSBiZTMyX3RvX2NwdShhaC0+YXYucG9ydF9wZCkgPj4gMjQ7CisJaWYgKGFoLT5hdi5zdGF0X3JhdGUpCisJCWFoX2F0dHItPnN0YXRpY19yYXRlID0gYWgtPmF2LnN0YXRfcmF0ZSAtIE1MWDRfU1RBVF9SQVRFX09GRlNFVDsKKwlhaF9hdHRyLT5zcmNfcGF0aF9iaXRzID0gYWgtPmF2Lmdfc2xpZCAmIDB4N0Y7CisKKwlpZiAobWx4NF9pYl9haF9ncmhfcHJlc2VudChhaCkpIHsKKwkJYWhfYXR0ci0+YWhfZmxhZ3MgPSBJQl9BSF9HUkg7CisKKwkJYWhfYXR0ci0+Z3JoLnRyYWZmaWNfY2xhc3MgPQorCQkJYmUzMl90b19jcHUoYWgtPmF2LnNsX3RjbGFzc19mbG93bGFiZWwpID4+IDIwOworCQlhaF9hdHRyLT5ncmguZmxvd19sYWJlbCA9CisJCQliZTMyX3RvX2NwdShhaC0+YXYuc2xfdGNsYXNzX2Zsb3dsYWJlbCkgJiAweGZmZmZmOworCQlhaF9hdHRyLT5ncmguaG9wX2xpbWl0ICA9IGFoLT5hdi5ob3BfbGltaXQ7CisJCWFoX2F0dHItPmdyaC5zZ2lkX2luZGV4ID0gYWgtPmF2LmdpZF9pbmRleDsKKwkJbWVtY3B5KGFoX2F0dHItPmdyaC5kZ2lkLnJhdywgYWgtPmF2LmRnaWQsIDE2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1seDRfaWJfZGVzdHJveV9haChzdHJ1Y3QgaWJfYWggKmFoKQoreworCWtmcmVlKHRvX21haChhaCkpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2NxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhMjkwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2NxLmMKQEAgLTAsMCArMSw1MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21seDQvY3EuaD4KKyNpbmNsdWRlIDxsaW51eC9tbHg0L3FwLmg+CisKKyNpbmNsdWRlICJtbHg0X2liLmgiCisjaW5jbHVkZSAidXNlci5oIgorCitzdGF0aWMgdm9pZCBtbHg0X2liX2NxX2NvbXAoc3RydWN0IG1seDRfY3EgKmNxKQoreworCXN0cnVjdCBpYl9jcSAqaWJjcSA9ICZ0b19taWJjcShjcSktPmliY3E7CisJaWJjcS0+Y29tcF9oYW5kbGVyKGliY3EsIGliY3EtPmNxX2NvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2liX2NxX2V2ZW50KHN0cnVjdCBtbHg0X2NxICpjcSwgZW51bSBtbHg0X2V2ZW50IHR5cGUpCit7CisJc3RydWN0IGliX2V2ZW50IGV2ZW50OworCXN0cnVjdCBpYl9jcSAqaWJjcTsKKworCWlmICh0eXBlICE9IE1MWDRfRVZFTlRfVFlQRV9DUV9FUlJPUikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtbHg0X2liOiBVbmV4cGVjdGVkIGV2ZW50IHR5cGUgJWQgIgorCQkgICAgICAgIm9uIENRICUwNnhcbiIsIHR5cGUsIGNxLT5jcW4pOworCQlyZXR1cm47CisJfQorCisJaWJjcSA9ICZ0b19taWJjcShjcSktPmliY3E7CisJaWYgKGliY3EtPmV2ZW50X2hhbmRsZXIpIHsKKwkJZXZlbnQuZGV2aWNlICAgICA9IGliY3EtPmRldmljZTsKKwkJZXZlbnQuZXZlbnQgICAgICA9IElCX0VWRU5UX0NRX0VSUjsKKwkJZXZlbnQuZWxlbWVudC5jcSA9IGliY3E7CisJCWliY3EtPmV2ZW50X2hhbmRsZXIoJmV2ZW50LCBpYmNxLT5jcV9jb250ZXh0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkICpnZXRfY3FlX2Zyb21fYnVmKHN0cnVjdCBtbHg0X2liX2NxX2J1ZiAqYnVmLCBpbnQgbikKK3sKKwlpbnQgb2Zmc2V0ID0gbiAqIHNpemVvZiAoc3RydWN0IG1seDRfY3FlKTsKKworCWlmIChidWYtPmJ1Zi5uYnVmcyA9PSAxKQorCQlyZXR1cm4gYnVmLT5idWYudS5kaXJlY3QuYnVmICsgb2Zmc2V0OworCWVsc2UKKwkJcmV0dXJuIGJ1Zi0+YnVmLnUucGFnZV9saXN0W29mZnNldCA+PiBQQUdFX1NISUZUXS5idWYgKworCQkJKG9mZnNldCAmIChQQUdFX1NJWkUgLSAxKSk7Cit9CisKK3N0YXRpYyB2b2lkICpnZXRfY3FlKHN0cnVjdCBtbHg0X2liX2NxICpjcSwgaW50IG4pCit7CisJcmV0dXJuIGdldF9jcWVfZnJvbV9idWYoJmNxLT5idWYsIG4pOworfQorCitzdGF0aWMgdm9pZCAqZ2V0X3N3X2NxZShzdHJ1Y3QgbWx4NF9pYl9jcSAqY3EsIGludCBuKQoreworCXN0cnVjdCBtbHg0X2NxZSAqY3FlID0gZ2V0X2NxZShjcSwgbiAmIGNxLT5pYmNxLmNxZSk7CisKKwlyZXR1cm4gKCEhKGNxZS0+b3duZXJfc3Jfb3Bjb2RlICYgTUxYNF9DUUVfT1dORVJfTUFTSykgXgorCQkhIShuICYgKGNxLT5pYmNxLmNxZSArIDEpKSkgPyBOVUxMIDogY3FlOworfQorCitzdGF0aWMgc3RydWN0IG1seDRfY3FlICpuZXh0X2NxZV9zdyhzdHJ1Y3QgbWx4NF9pYl9jcSAqY3EpCit7CisJcmV0dXJuIGdldF9zd19jcWUoY3EsIGNxLT5tY3EuY29uc19pbmRleCk7Cit9CisKK3N0cnVjdCBpYl9jcSAqbWx4NF9pYl9jcmVhdGVfY3Eoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGludCBlbnRyaWVzLCBpbnQgdmVjdG9yLAorCQkJCXN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwKKwkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCBtbHg0X2liX2RldiAqZGV2ID0gdG9fbWRldihpYmRldik7CisJc3RydWN0IG1seDRfaWJfY3EgKmNxOworCXN0cnVjdCBtbHg0X3VhciAqdWFyOworCWludCBidWZfc2l6ZTsKKwlpbnQgZXJyOworCisJaWYgKGVudHJpZXMgPCAxIHx8IGVudHJpZXMgPiBkZXYtPmRldi0+Y2Fwcy5tYXhfY3FlcykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwljcSA9IGttYWxsb2Moc2l6ZW9mICpjcSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwllbnRyaWVzICAgICAgPSByb3VuZHVwX3Bvd19vZl90d28oZW50cmllcyArIDEpOworCWNxLT5pYmNxLmNxZSA9IGVudHJpZXMgLSAxOworCWJ1Zl9zaXplICAgICA9IGVudHJpZXMgKiBzaXplb2YgKHN0cnVjdCBtbHg0X2NxZSk7CisJc3Bpbl9sb2NrX2luaXQoJmNxLT5sb2NrKTsKKworCWlmIChjb250ZXh0KSB7CisJCXN0cnVjdCBtbHg0X2liX2NyZWF0ZV9jcSB1Y21kOworCisJCWlmIChpYl9jb3B5X2Zyb21fdWRhdGEoJnVjbWQsIHVkYXRhLCBzaXplb2YgdWNtZCkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIGVycl9jcTsKKwkJfQorCisJCWNxLT51bWVtID0gaWJfdW1lbV9nZXQoY29udGV4dCwgdWNtZC5idWZfYWRkciwgYnVmX3NpemUsCisJCQkJICAgICAgIElCX0FDQ0VTU19MT0NBTF9XUklURSk7CisJCWlmIChJU19FUlIoY3EtPnVtZW0pKSB7CisJCQllcnIgPSBQVFJfRVJSKGNxLT51bWVtKTsKKwkJCWdvdG8gZXJyX2NxOworCQl9CisKKwkJZXJyID0gbWx4NF9tdHRfaW5pdChkZXYtPmRldiwgaWJfdW1lbV9wYWdlX2NvdW50KGNxLT51bWVtKSwKKwkJCQkgICAgaWxvZzIoY3EtPnVtZW0tPnBhZ2Vfc2l6ZSksICZjcS0+YnVmLm10dCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9idWY7CisKKwkJZXJyID0gbWx4NF9pYl91bWVtX3dyaXRlX210dChkZXYsICZjcS0+YnVmLm10dCwgY3EtPnVtZW0pOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfbXR0OworCisJCWVyciA9IG1seDRfaWJfZGJfbWFwX3VzZXIodG9fbXVjb250ZXh0KGNvbnRleHQpLCB1Y21kLmRiX2FkZHIsCisJCQkJCSAgJmNxLT5kYik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9tdHQ7CisKKwkJdWFyID0gJnRvX211Y29udGV4dChjb250ZXh0KS0+dWFyOworCX0gZWxzZSB7CisJCWVyciA9IG1seDRfaWJfZGJfYWxsb2MoZGV2LCAmY3EtPmRiLCAxKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX2NxOworCisJCWNxLT5tY3Euc2V0X2NpX2RiICA9IGNxLT5kYi5kYjsKKwkJY3EtPm1jcS5hcm1fZGIgICAgID0gY3EtPmRiLmRiICsgMTsKKwkJKmNxLT5tY3Euc2V0X2NpX2RiID0gMDsKKwkJKmNxLT5tY3EuYXJtX2RiICAgID0gMDsKKworCQlpZiAobWx4NF9idWZfYWxsb2MoZGV2LT5kZXYsIGJ1Zl9zaXplLCBQQUdFX1NJWkUgKiAyLCAmY3EtPmJ1Zi5idWYpKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfZGI7CisJCX0KKworCQllcnIgPSBtbHg0X210dF9pbml0KGRldi0+ZGV2LCBjcS0+YnVmLmJ1Zi5ucGFnZXMsIGNxLT5idWYuYnVmLnBhZ2Vfc2hpZnQsCisJCQkJICAgICZjcS0+YnVmLm10dCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9idWY7CisKKwkJZXJyID0gbWx4NF9idWZfd3JpdGVfbXR0KGRldi0+ZGV2LCAmY3EtPmJ1Zi5tdHQsICZjcS0+YnVmLmJ1Zik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9tdHQ7CisKKwkJdWFyID0gJmRldi0+cHJpdl91YXI7CisJfQorCisJZXJyID0gbWx4NF9jcV9hbGxvYyhkZXYtPmRldiwgZW50cmllcywgJmNxLT5idWYubXR0LCB1YXIsCisJCQkgICAgY3EtPmRiLmRtYSwgJmNxLT5tY3EpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2RibWFwOworCisJY3EtPm1jcS5jb21wICA9IG1seDRfaWJfY3FfY29tcDsKKwljcS0+bWNxLmV2ZW50ID0gbWx4NF9pYl9jcV9ldmVudDsKKworCWlmIChjb250ZXh0KQorCQlpZiAoaWJfY29weV90b191ZGF0YSh1ZGF0YSwgJmNxLT5tY3EuY3FuLCBzaXplb2YgKF9fdTMyKSkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIGVycl9kYm1hcDsKKwkJfQorCisJcmV0dXJuICZjcS0+aWJjcTsKKworZXJyX2RibWFwOgorCWlmIChjb250ZXh0KQorCQltbHg0X2liX2RiX3VubWFwX3VzZXIodG9fbXVjb250ZXh0KGNvbnRleHQpLCAmY3EtPmRiKTsKKworZXJyX210dDoKKwltbHg0X210dF9jbGVhbnVwKGRldi0+ZGV2LCAmY3EtPmJ1Zi5tdHQpOworCitlcnJfYnVmOgorCWlmIChjb250ZXh0KQorCQlpYl91bWVtX3JlbGVhc2UoY3EtPnVtZW0pOworCWVsc2UKKwkJbWx4NF9idWZfZnJlZShkZXYtPmRldiwgZW50cmllcyAqIHNpemVvZiAoc3RydWN0IG1seDRfY3FlKSwKKwkJCSAgICAgICZjcS0+YnVmLmJ1Zik7CisKK2Vycl9kYjoKKwlpZiAoIWNvbnRleHQpCisJCW1seDRfaWJfZGJfZnJlZShkZXYsICZjcS0+ZGIpOworCitlcnJfY3E6CisJa2ZyZWUoY3EpOworCisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworaW50IG1seDRfaWJfZGVzdHJveV9jcShzdHJ1Y3QgaWJfY3EgKmNxKQoreworCXN0cnVjdCBtbHg0X2liX2RldiAqZGV2ID0gdG9fbWRldihjcS0+ZGV2aWNlKTsKKwlzdHJ1Y3QgbWx4NF9pYl9jcSAqbWNxID0gdG9fbWNxKGNxKTsKKworCW1seDRfY3FfZnJlZShkZXYtPmRldiwgJm1jcS0+bWNxKTsKKwltbHg0X210dF9jbGVhbnVwKGRldi0+ZGV2LCAmbWNxLT5idWYubXR0KTsKKworCWlmIChjcS0+dW9iamVjdCkgeworCQltbHg0X2liX2RiX3VubWFwX3VzZXIodG9fbXVjb250ZXh0KGNxLT51b2JqZWN0LT5jb250ZXh0KSwgJm1jcS0+ZGIpOworCQlpYl91bWVtX3JlbGVhc2UobWNxLT51bWVtKTsKKwl9IGVsc2UgeworCQltbHg0X2J1Zl9mcmVlKGRldi0+ZGV2LCAoY3EtPmNxZSArIDEpICogc2l6ZW9mIChzdHJ1Y3QgbWx4NF9jcWUpLAorCQkJICAgICAgJm1jcS0+YnVmLmJ1Zik7CisJCW1seDRfaWJfZGJfZnJlZShkZXYsICZtY3EtPmRiKTsKKwl9CisKKwlrZnJlZShtY3EpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfY3FlKHZvaWQgKmNxZSkKK3sKKwlfX2JlMzIgKmJ1ZiA9IGNxZTsKKworCXByaW50ayhLRVJOX0RFQlVHICJDUUUgY29udGVudHMgJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAorCSAgICAgICBiZTMyX3RvX2NwdShidWZbMF0pLCBiZTMyX3RvX2NwdShidWZbMV0pLCBiZTMyX3RvX2NwdShidWZbMl0pLAorCSAgICAgICBiZTMyX3RvX2NwdShidWZbM10pLCBiZTMyX3RvX2NwdShidWZbNF0pLCBiZTMyX3RvX2NwdShidWZbNV0pLAorCSAgICAgICBiZTMyX3RvX2NwdShidWZbNl0pLCBiZTMyX3RvX2NwdShidWZbN10pKTsKK30KKworc3RhdGljIHZvaWQgbWx4NF9pYl9oYW5kbGVfZXJyb3JfY3FlKHN0cnVjdCBtbHg0X2Vycl9jcWUgKmNxZSwKKwkJCQkgICAgIHN0cnVjdCBpYl93YyAqd2MpCit7CisJaWYgKGNxZS0+c3luZHJvbWUgPT0gTUxYNF9DUUVfU1lORFJPTUVfTE9DQUxfUVBfT1BfRVJSKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJsb2NhbCBRUCBvcGVyYXRpb24gZXJyICIKKwkJICAgICAgICIoUVBOICUwNngsIFdRRSBpbmRleCAleCwgdmVuZG9yIHN5bmRyb21lICUwMngsICIKKwkJICAgICAgICJvcGNvZGUgPSAlMDJ4KVxuIiwKKwkJICAgICAgIGJlMzJfdG9fY3B1KGNxZS0+bXlfcXBuKSwgYmUxNl90b19jcHUoY3FlLT53cWVfaW5kZXgpLAorCQkgICAgICAgY3FlLT52ZW5kb3JfZXJyX3N5bmRyb21lLAorCQkgICAgICAgY3FlLT5vd25lcl9zcl9vcGNvZGUgJiB+TUxYNF9DUUVfT1dORVJfTUFTSyk7CisJCWR1bXBfY3FlKGNxZSk7CisJfQorCisJc3dpdGNoIChjcWUtPnN5bmRyb21lKSB7CisJY2FzZSBNTFg0X0NRRV9TWU5EUk9NRV9MT0NBTF9MRU5HVEhfRVJSOgorCQl3Yy0+c3RhdHVzID0gSUJfV0NfTE9DX0xFTl9FUlI7CisJCWJyZWFrOworCWNhc2UgTUxYNF9DUUVfU1lORFJPTUVfTE9DQUxfUVBfT1BfRVJSOgorCQl3Yy0+c3RhdHVzID0gSUJfV0NfTE9DX1FQX09QX0VSUjsKKwkJYnJlYWs7CisJY2FzZSBNTFg0X0NRRV9TWU5EUk9NRV9MT0NBTF9QUk9UX0VSUjoKKwkJd2MtPnN0YXR1cyA9IElCX1dDX0xPQ19QUk9UX0VSUjsKKwkJYnJlYWs7CisJY2FzZSBNTFg0X0NRRV9TWU5EUk9NRV9XUl9GTFVTSF9FUlI6CisJCXdjLT5zdGF0dXMgPSBJQl9XQ19XUl9GTFVTSF9FUlI7CisJCWJyZWFrOworCWNhc2UgTUxYNF9DUUVfU1lORFJPTUVfTVdfQklORF9FUlI6CisJCXdjLT5zdGF0dXMgPSBJQl9XQ19NV19CSU5EX0VSUjsKKwkJYnJlYWs7CisJY2FzZSBNTFg0X0NRRV9TWU5EUk9NRV9CQURfUkVTUF9FUlI6CisJCXdjLT5zdGF0dXMgPSBJQl9XQ19CQURfUkVTUF9FUlI7CisJCWJyZWFrOworCWNhc2UgTUxYNF9DUUVfU1lORFJPTUVfTE9DQUxfQUNDRVNTX0VSUjoKKwkJd2MtPnN0YXR1cyA9IElCX1dDX0xPQ19BQ0NFU1NfRVJSOworCQlicmVhazsKKwljYXNlIE1MWDRfQ1FFX1NZTkRST01FX1JFTU9URV9JTlZBTF9SRVFfRVJSOgorCQl3Yy0+c3RhdHVzID0gSUJfV0NfUkVNX0lOVl9SRVFfRVJSOworCQlicmVhazsKKwljYXNlIE1MWDRfQ1FFX1NZTkRST01FX1JFTU9URV9BQ0NFU1NfRVJSOgorCQl3Yy0+c3RhdHVzID0gSUJfV0NfUkVNX0FDQ0VTU19FUlI7CisJCWJyZWFrOworCWNhc2UgTUxYNF9DUUVfU1lORFJPTUVfUkVNT1RFX09QX0VSUjoKKwkJd2MtPnN0YXR1cyA9IElCX1dDX1JFTV9PUF9FUlI7CisJCWJyZWFrOworCWNhc2UgTUxYNF9DUUVfU1lORFJPTUVfVFJBTlNQT1JUX1JFVFJZX0VYQ19FUlI6CisJCXdjLT5zdGF0dXMgPSBJQl9XQ19SRVRSWV9FWENfRVJSOworCQlicmVhazsKKwljYXNlIE1MWDRfQ1FFX1NZTkRST01FX1JOUl9SRVRSWV9FWENfRVJSOgorCQl3Yy0+c3RhdHVzID0gSUJfV0NfUk5SX1JFVFJZX0VYQ19FUlI7CisJCWJyZWFrOworCWNhc2UgTUxYNF9DUUVfU1lORFJPTUVfUkVNT1RFX0FCT1JURURfRVJSOgorCQl3Yy0+c3RhdHVzID0gSUJfV0NfUkVNX0FCT1JUX0VSUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd2MtPnN0YXR1cyA9IElCX1dDX0dFTkVSQUxfRVJSOworCQlicmVhazsKKwl9CisKKwl3Yy0+dmVuZG9yX2VyciA9IGNxZS0+dmVuZG9yX2Vycl9zeW5kcm9tZTsKK30KKworc3RhdGljIGludCBtbHg0X2liX3BvbGxfb25lKHN0cnVjdCBtbHg0X2liX2NxICpjcSwKKwkJCSAgICBzdHJ1Y3QgbWx4NF9pYl9xcCAqKmN1cl9xcCwKKwkJCSAgICBzdHJ1Y3QgaWJfd2MgKndjKQoreworCXN0cnVjdCBtbHg0X2NxZSAqY3FlOworCXN0cnVjdCBtbHg0X3FwICptcXA7CisJc3RydWN0IG1seDRfaWJfd3EgKndxOworCXN0cnVjdCBtbHg0X2liX3NycSAqc3JxOworCWludCBpc19zZW5kOworCWludCBpc19lcnJvcjsKKwl1MTYgd3FlX2N0cjsKKworCWNxZSA9IG5leHRfY3FlX3N3KGNxKTsKKwlpZiAoIWNxZSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkrK2NxLT5tY3EuY29uc19pbmRleDsKKworCS8qCisJICogTWFrZSBzdXJlIHdlIHJlYWQgQ1EgZW50cnkgY29udGVudHMgYWZ0ZXIgd2UndmUgY2hlY2tlZCB0aGUKKwkgKiBvd25lcnNoaXAgYml0LgorCSAqLworCXJtYigpOworCisJaXNfc2VuZCAgPSBjcWUtPm93bmVyX3NyX29wY29kZSAmIE1MWDRfQ1FFX0lTX1NFTkRfTUFTSzsKKwlpc19lcnJvciA9IChjcWUtPm93bmVyX3NyX29wY29kZSAmIE1MWDRfQ1FFX09QQ09ERV9NQVNLKSA9PQorCQlNTFg0X0NRRV9PUENPREVfRVJST1I7CisKKwlpZiAoISpjdXJfcXAgfHwKKwkgICAgKGJlMzJfdG9fY3B1KGNxZS0+bXlfcXBuKSAmIDB4ZmZmZmZmKSAhPSAoKmN1cl9xcCktPm1xcC5xcG4pIHsKKwkJLyoKKwkJICogV2UgZG8gbm90IGhhdmUgdG8gdGFrZSB0aGUgUVAgdGFibGUgbG9jayBoZXJlLAorCQkgKiBiZWNhdXNlIENRcyB3aWxsIGJlIGxvY2tlZCB3aGlsZSBRUHMgYXJlIHJlbW92ZWQKKwkJICogZnJvbSB0aGUgdGFibGUuCisJCSAqLworCQltcXAgPSBfX21seDRfcXBfbG9va3VwKHRvX21kZXYoY3EtPmliY3EuZGV2aWNlKS0+ZGV2LAorCQkJCSAgICAgICBiZTMyX3RvX2NwdShjcWUtPm15X3FwbikpOworCQlpZiAodW5saWtlbHkoIW1xcCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNRICUwNnggd2l0aCBlbnRyeSBmb3IgdW5rbm93biBRUE4gJTA2eFxuIiwKKwkJCSAgICAgICBjcS0+bWNxLmNxbiwgYmUzMl90b19jcHUoY3FlLT5teV9xcG4pICYgMHhmZmZmZmYpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQkqY3VyX3FwID0gdG9fbWlicXAobXFwKTsKKwl9CisKKwl3Yy0+cXAgPSAmKCpjdXJfcXApLT5pYnFwOworCisJaWYgKGlzX3NlbmQpIHsKKwkJd3EgPSAmKCpjdXJfcXApLT5zcTsKKwkJd3FlX2N0ciA9IGJlMTZfdG9fY3B1KGNxZS0+d3FlX2luZGV4KTsKKwkJd3EtPnRhaWwgKz0gd3FlX2N0ciAtICh1MTYpIHdxLT50YWlsOworCQl3Yy0+d3JfaWQgPSB3cS0+d3JpZFt3cS0+dGFpbCAmICh3cS0+bWF4IC0gMSldOworCQkrK3dxLT50YWlsOworCX0gZWxzZSBpZiAoKCpjdXJfcXApLT5pYnFwLnNycSkgeworCQlzcnEgPSB0b19tc3JxKCgqY3VyX3FwKS0+aWJxcC5zcnEpOworCQl3cWVfY3RyID0gYmUxNl90b19jcHUoY3FlLT53cWVfaW5kZXgpOworCQl3Yy0+d3JfaWQgPSBzcnEtPndyaWRbd3FlX2N0cl07CisJCW1seDRfaWJfZnJlZV9zcnFfd3FlKHNycSwgd3FlX2N0cik7CisJfSBlbHNlIHsKKwkJd3EJICA9ICYoKmN1cl9xcCktPnJxOworCQl3Yy0+d3JfaWQgPSB3cS0+d3JpZFt3cS0+dGFpbCAmICh3cS0+bWF4IC0gMSldOworCQkrK3dxLT50YWlsOworCX0KKworCWlmICh1bmxpa2VseShpc19lcnJvcikpIHsKKwkJbWx4NF9pYl9oYW5kbGVfZXJyb3JfY3FlKChzdHJ1Y3QgbWx4NF9lcnJfY3FlICopIGNxZSwgd2MpOworCQlyZXR1cm4gMDsKKwl9CisKKwl3Yy0+c3RhdHVzID0gSUJfV0NfU1VDQ0VTUzsKKworCWlmIChpc19zZW5kKSB7CisJCXdjLT53Y19mbGFncyA9IDA7CisJCXN3aXRjaCAoY3FlLT5vd25lcl9zcl9vcGNvZGUgJiBNTFg0X0NRRV9PUENPREVfTUFTSykgeworCQljYXNlIE1MWDRfT1BDT0RFX1JETUFfV1JJVEVfSU1NOgorCQkJd2MtPndjX2ZsYWdzIHw9IElCX1dDX1dJVEhfSU1NOworCQljYXNlIE1MWDRfT1BDT0RFX1JETUFfV1JJVEU6CisJCQl3Yy0+b3Bjb2RlICAgID0gSUJfV0NfUkRNQV9XUklURTsKKwkJCWJyZWFrOworCQljYXNlIE1MWDRfT1BDT0RFX1NFTkRfSU1NOgorCQkJd2MtPndjX2ZsYWdzIHw9IElCX1dDX1dJVEhfSU1NOworCQljYXNlIE1MWDRfT1BDT0RFX1NFTkQ6CisJCQl3Yy0+b3Bjb2RlICAgID0gSUJfV0NfU0VORDsKKwkJCWJyZWFrOworCQljYXNlIE1MWDRfT1BDT0RFX1JETUFfUkVBRDoKKwkJCXdjLT5vcGNvZGUgICAgPSBJQl9XQ19TRU5EOworCQkJd2MtPmJ5dGVfbGVuICA9IGJlMzJfdG9fY3B1KGNxZS0+Ynl0ZV9jbnQpOworCQkJYnJlYWs7CisJCWNhc2UgTUxYNF9PUENPREVfQVRPTUlDX0NTOgorCQkJd2MtPm9wY29kZSAgICA9IElCX1dDX0NPTVBfU1dBUDsKKwkJCXdjLT5ieXRlX2xlbiAgPSA4OworCQkJYnJlYWs7CisJCWNhc2UgTUxYNF9PUENPREVfQVRPTUlDX0ZBOgorCQkJd2MtPm9wY29kZSAgICA9IElCX1dDX0ZFVENIX0FERDsKKwkJCXdjLT5ieXRlX2xlbiAgPSA4OworCQkJYnJlYWs7CisJCWNhc2UgTUxYNF9PUENPREVfQklORF9NVzoKKwkJCXdjLT5vcGNvZGUgICAgPSBJQl9XQ19CSU5EX01XOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQl3Yy0+Ynl0ZV9sZW4gPSBiZTMyX3RvX2NwdShjcWUtPmJ5dGVfY250KTsKKworCQlzd2l0Y2ggKGNxZS0+b3duZXJfc3Jfb3Bjb2RlICYgTUxYNF9DUUVfT1BDT0RFX01BU0spIHsKKwkJY2FzZSBNTFg0X1JFQ1ZfT1BDT0RFX1JETUFfV1JJVEVfSU1NOgorCQkJd2MtPm9wY29kZSAgID0gSUJfV0NfUkVDVl9SRE1BX1dJVEhfSU1NOworCQkJd2MtPndjX2ZsYWdzID0gSUJfV0NfV0lUSF9JTU07CisJCQl3Yy0+aW1tX2RhdGEgPSBjcWUtPmltbWVkX3Jzc19pbnZhbGlkOworCQkJYnJlYWs7CisJCWNhc2UgTUxYNF9SRUNWX09QQ09ERV9TRU5EOgorCQkJd2MtPm9wY29kZSAgID0gSUJfV0NfUkVDVjsKKwkJCXdjLT53Y19mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBNTFg0X1JFQ1ZfT1BDT0RFX1NFTkRfSU1NOgorCQkJd2MtPm9wY29kZSAgID0gSUJfV0NfUkVDVjsKKwkJCXdjLT53Y19mbGFncyA9IElCX1dDX1dJVEhfSU1NOworCQkJd2MtPmltbV9kYXRhID0gY3FlLT5pbW1lZF9yc3NfaW52YWxpZDsKKwkJCWJyZWFrOworCQl9CisKKwkJd2MtPnNsaWQJICAgPSBiZTE2X3RvX2NwdShjcWUtPnJsaWQpOworCQl3Yy0+c2wJCSAgID0gY3FlLT5zbCA+PiA0OworCQl3Yy0+c3JjX3FwCSAgID0gYmUzMl90b19jcHUoY3FlLT5nX21scGF0aF9ycXBuKSAmIDB4ZmZmZmZmOworCQl3Yy0+ZGxpZF9wYXRoX2JpdHMgPSAoYmUzMl90b19jcHUoY3FlLT5nX21scGF0aF9ycXBuKSA+PiAyNCkgJiAweDdmOworCQl3Yy0+d2NfZmxhZ3MgICAgICB8PSBiZTMyX3RvX2NwdShjcWUtPmdfbWxwYXRoX3JxcG4pICYgMHg4MDAwMDAwMCA/CisJCQlJQl9XQ19HUkggOiAwOworCQl3Yy0+cGtleV9pbmRleCAgICAgPSBiZTMyX3RvX2NwdShjcWUtPmltbWVkX3Jzc19pbnZhbGlkKSA+PiAxNjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1seDRfaWJfcG9sbF9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGludCBudW1fZW50cmllcywgc3RydWN0IGliX3djICp3YykKK3sKKwlzdHJ1Y3QgbWx4NF9pYl9jcSAqY3EgPSB0b19tY3EoaWJjcSk7CisJc3RydWN0IG1seDRfaWJfcXAgKmN1cl9xcCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbnBvbGxlZDsKKwlpbnQgZXJyID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcS0+bG9jaywgZmxhZ3MpOworCisJZm9yIChucG9sbGVkID0gMDsgbnBvbGxlZCA8IG51bV9lbnRyaWVzOyArK25wb2xsZWQpIHsKKwkJZXJyID0gbWx4NF9pYl9wb2xsX29uZShjcSwgJmN1cl9xcCwgd2MgKyBucG9sbGVkKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0KKworCWlmIChucG9sbGVkKQorCQltbHg0X2NxX3NldF9jaSgmY3EtPm1jcSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcS0+bG9jaywgZmxhZ3MpOworCisJaWYgKGVyciA9PSAwIHx8IGVyciA9PSAtRUFHQUlOKQorCQlyZXR1cm4gbnBvbGxlZDsKKwllbHNlCisJCXJldHVybiBlcnI7Cit9CisKK2ludCBtbHg0X2liX2FybV9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGVudW0gaWJfY3Ffbm90aWZ5X2ZsYWdzIGZsYWdzKQoreworCW1seDRfY3FfYXJtKCZ0b19tY3EoaWJjcSktPm1jcSwKKwkJICAgIChmbGFncyAmIElCX0NRX1NPTElDSVRFRF9NQVNLKSA9PSBJQl9DUV9TT0xJQ0lURUQgPworCQkgICAgTUxYNF9DUV9EQl9SRVFfTk9UX1NPTCA6IE1MWDRfQ1FfREJfUkVRX05PVCwKKwkJICAgIHRvX21kZXYoaWJjcS0+ZGV2aWNlKS0+dWFyX21hcCwKKwkJICAgIE1MWDRfR0VUX0RPT1JCRUxMX0xPQ0soJnRvX21kZXYoaWJjcS0+ZGV2aWNlKS0+dWFyX2xvY2spKTsKKworCXJldHVybiAwOworfQorCit2b2lkIF9fbWx4NF9pYl9jcV9jbGVhbihzdHJ1Y3QgbWx4NF9pYl9jcSAqY3EsIHUzMiBxcG4sIHN0cnVjdCBtbHg0X2liX3NycSAqc3JxKQoreworCXUzMiBwcm9kX2luZGV4OworCWludCBuZnJlZWQgPSAwOworCXN0cnVjdCBtbHg0X2NxZSAqY3FlOworCisJLyoKKwkgKiBGaXJzdCB3ZSBuZWVkIHRvIGZpbmQgdGhlIGN1cnJlbnQgcHJvZHVjZXIgaW5kZXgsIHNvIHdlCisJICoga25vdyB3aGVyZSB0byBzdGFydCBjbGVhbmluZyBmcm9tLiAgSXQgZG9lc24ndCBtYXR0ZXIgaWYgSFcKKwkgKiBhZGRzIG5ldyBlbnRyaWVzIGFmdGVyIHRoaXMgbG9vcCAtLSB0aGUgUVAgd2UncmUgd29ycmllZAorCSAqIGFib3V0IGlzIGFscmVhZHkgaW4gUkVTRVQsIHNvIHRoZSBuZXcgZW50cmllcyB3b24ndCBjb21lCisJICogZnJvbSBvdXIgUVAgYW5kIHRoZXJlZm9yZSBkb24ndCBuZWVkIHRvIGJlIGNoZWNrZWQuCisJICovCisJZm9yIChwcm9kX2luZGV4ID0gY3EtPm1jcS5jb25zX2luZGV4OyBnZXRfc3dfY3FlKGNxLCBwcm9kX2luZGV4KTsgKytwcm9kX2luZGV4KQorCQlpZiAocHJvZF9pbmRleCA9PSBjcS0+bWNxLmNvbnNfaW5kZXggKyBjcS0+aWJjcS5jcWUpCisJCQlicmVhazsKKworCS8qCisJICogTm93IHN3ZWVwIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBDUSwgcmVtb3ZpbmcgQ1EgZW50cmllcworCSAqIHRoYXQgbWF0Y2ggb3VyIFFQIGJ5IGNvcHlpbmcgb2xkZXIgZW50cmllcyBvbiB0b3Agb2YgdGhlbS4KKwkgKi8KKwl3aGlsZSAoKGludCkgLS1wcm9kX2luZGV4IC0gKGludCkgY3EtPm1jcS5jb25zX2luZGV4ID49IDApIHsKKwkJY3FlID0gZ2V0X2NxZShjcSwgcHJvZF9pbmRleCAmIGNxLT5pYmNxLmNxZSk7CisJCWlmICgoYmUzMl90b19jcHUoY3FlLT5teV9xcG4pICYgMHhmZmZmZmYpID09IHFwbikgeworCQkJaWYgKHNycSAmJiAhKGNxZS0+b3duZXJfc3Jfb3Bjb2RlICYgTUxYNF9DUUVfSVNfU0VORF9NQVNLKSkKKwkJCQltbHg0X2liX2ZyZWVfc3JxX3dxZShzcnEsIGJlMTZfdG9fY3B1KGNxZS0+d3FlX2luZGV4KSk7CisJCQkrK25mcmVlZDsKKwkJfSBlbHNlIGlmIChuZnJlZWQpCisJCQltZW1jcHkoZ2V0X2NxZShjcSwgKHByb2RfaW5kZXggKyBuZnJlZWQpICYgY3EtPmliY3EuY3FlKSwKKwkJCSAgICAgICBjcWUsIHNpemVvZiAqY3FlKTsKKwl9CisKKwlpZiAobmZyZWVkKSB7CisJCWNxLT5tY3EuY29uc19pbmRleCArPSBuZnJlZWQ7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB1cGRhdGUgb2YgYnVmZmVyIGNvbnRlbnRzIGlzIGRvbmUgYmVmb3JlCisJCSAqIHVwZGF0aW5nIGNvbnN1bWVyIGluZGV4LgorCQkgKi8KKwkJd21iKCk7CisJCW1seDRfY3Ffc2V0X2NpKCZjcS0+bWNxKTsKKwl9Cit9CisKK3ZvaWQgbWx4NF9pYl9jcV9jbGVhbihzdHJ1Y3QgbWx4NF9pYl9jcSAqY3EsIHUzMiBxcG4sIHN0cnVjdCBtbHg0X2liX3NycSAqc3JxKQoreworCXNwaW5fbG9ja19pcnEoJmNxLT5sb2NrKTsKKwlfX21seDRfaWJfY3FfY2xlYW4oY3EsIHFwbiwgc3JxKTsKKwlzcGluX3VubG9ja19pcnEoJmNxLT5sb2NrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2Rvb3JiZWxsLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9kb29yYmVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzYwODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9kb29yYmVsbC5jCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJtbHg0X2liLmgiCisKK3N0cnVjdCBtbHg0X2liX2RiX3BnZGlyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJREVDTEFSRV9CSVRNQVAob3JkZXIwLCBNTFg0X0lCX0RCX1BFUl9QQUdFKTsKKwlERUNMQVJFX0JJVE1BUChvcmRlcjEsIE1MWDRfSUJfREJfUEVSX1BBR0UgLyAyKTsKKwl1bnNpZ25lZCBsb25nCSAgICAgICAqYml0c1syXTsKKwlfX2JlMzIJCSAgICAgICAqZGJfcGFnZTsKKwlkbWFfYWRkcl90CQlkYl9kbWE7Cit9OworCitzdGF0aWMgc3RydWN0IG1seDRfaWJfZGJfcGdkaXIgKm1seDRfaWJfYWxsb2NfZGJfcGdkaXIoc3RydWN0IG1seDRfaWJfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfaWJfZGJfcGdkaXIgKnBnZGlyOworCisJcGdkaXIgPSBremFsbG9jKHNpemVvZiAqcGdkaXIsIEdGUF9LRVJORUwpOworCWlmICghcGdkaXIpCisJCXJldHVybiBOVUxMOworCisJYml0bWFwX2ZpbGwocGdkaXItPm9yZGVyMSwgTUxYNF9JQl9EQl9QRVJfUEFHRSAvIDIpOworCXBnZGlyLT5iaXRzWzBdID0gcGdkaXItPm9yZGVyMDsKKwlwZ2Rpci0+Yml0c1sxXSA9IHBnZGlyLT5vcmRlcjE7CisJcGdkaXItPmRiX3BhZ2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5pYl9kZXYuZG1hX2RldmljZSwKKwkJCQkJICAgIFBBR0VfU0laRSwgJnBnZGlyLT5kYl9kbWEsCisJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBnZGlyLT5kYl9wYWdlKSB7CisJCWtmcmVlKHBnZGlyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHBnZGlyOworfQorCitzdGF0aWMgaW50IG1seDRfaWJfYWxsb2NfZGJfZnJvbV9wZ2RpcihzdHJ1Y3QgbWx4NF9pYl9kYl9wZ2RpciAqcGdkaXIsCisJCQkJICAgICAgIHN0cnVjdCBtbHg0X2liX2RiICpkYiwgaW50IG9yZGVyKQoreworCWludCBvOworCWludCBpOworCisJZm9yIChvID0gb3JkZXI7IG8gPD0gMTsgKytvKSB7CisJCWkgPSBmaW5kX2ZpcnN0X2JpdChwZ2Rpci0+Yml0c1tvXSwgTUxYNF9JQl9EQl9QRVJfUEFHRSA+PiBvKTsKKwkJaWYgKGkgPCBNTFg0X0lCX0RCX1BFUl9QQUdFID4+IG8pCisJCQlnb3RvIGZvdW5kOworCX0KKworCXJldHVybiAtRU5PTUVNOworCitmb3VuZDoKKwljbGVhcl9iaXQoaSwgcGdkaXItPmJpdHNbb10pOworCisJaSA8PD0gbzsKKworCWlmIChvID4gb3JkZXIpCisJCXNldF9iaXQoaSBeIDEsIHBnZGlyLT5iaXRzW29yZGVyXSk7CisKKwlkYi0+dS5wZ2RpciA9IHBnZGlyOworCWRiLT5pbmRleCAgID0gaTsKKwlkYi0+ZGIgICAgICA9IHBnZGlyLT5kYl9wYWdlICsgZGItPmluZGV4OworCWRiLT5kbWEgICAgID0gcGdkaXItPmRiX2RtYSAgKyBkYi0+aW5kZXggKiA0OworCWRiLT5vcmRlciAgID0gb3JkZXI7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1seDRfaWJfZGJfYWxsb2Moc3RydWN0IG1seDRfaWJfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2liX2RiICpkYiwgaW50IG9yZGVyKQoreworCXN0cnVjdCBtbHg0X2liX2RiX3BnZGlyICpwZ2RpcjsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+cGdkaXJfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwZ2RpciwgJmRldi0+cGdkaXJfbGlzdCwgbGlzdCkKKwkJaWYgKCFtbHg0X2liX2FsbG9jX2RiX2Zyb21fcGdkaXIocGdkaXIsIGRiLCBvcmRlcikpCisJCQlnb3RvIG91dDsKKworCXBnZGlyID0gbWx4NF9pYl9hbGxvY19kYl9wZ2RpcihkZXYpOworCWlmICghcGdkaXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbGlzdF9hZGQoJnBnZGlyLT5saXN0LCAmZGV2LT5wZ2Rpcl9saXN0KTsKKworCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGZhaWwgLS0gd2UganVzdCBhbGxvY2F0ZWQgYW4gZW1wdHkgcGFnZTogKi8KKwlXQVJOX09OKG1seDRfaWJfYWxsb2NfZGJfZnJvbV9wZ2RpcihwZ2RpciwgZGIsIG9yZGVyKSk7CisKK291dDoKKwltdXRleF91bmxvY2soJmRldi0+cGdkaXJfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBtbHg0X2liX2RiX2ZyZWUoc3RydWN0IG1seDRfaWJfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2liX2RiICpkYikKK3sKKwlpbnQgbzsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJmRldi0+cGdkaXJfbXV0ZXgpOworCisJbyA9IGRiLT5vcmRlcjsKKwlpID0gZGItPmluZGV4OworCisJaWYgKGRiLT5vcmRlciA9PSAwICYmIHRlc3RfYml0KGkgXiAxLCBkYi0+dS5wZ2Rpci0+b3JkZXIwKSkgeworCQljbGVhcl9iaXQoaSBeIDEsIGRiLT51LnBnZGlyLT5vcmRlcjApOworCQkrK287CisJfQorCisJaSA+Pj0gbzsKKwlzZXRfYml0KGksIGRiLT51LnBnZGlyLT5iaXRzW29dKTsKKworCWlmIChiaXRtYXBfZnVsbChkYi0+dS5wZ2Rpci0+b3JkZXIxLCBNTFg0X0lCX0RCX1BFUl9QQUdFIC8gMikpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5pYl9kZXYuZG1hX2RldmljZSwgUEFHRV9TSVpFLAorCQkJCSAgZGItPnUucGdkaXItPmRiX3BhZ2UsIGRiLT51LnBnZGlyLT5kYl9kbWEpOworCQlsaXN0X2RlbCgmZGItPnUucGdkaXItPmxpc3QpOworCQlrZnJlZShkYi0+dS5wZ2Rpcik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnBnZGlyX211dGV4KTsKK30KKworc3RydWN0IG1seDRfaWJfdXNlcl9kYl9wYWdlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGliX3VtZW0JICAgICAgICp1bWVtOworCXVuc2lnbmVkIGxvbmcJCXVzZXJfdmlydDsKKwlpbnQJCQlyZWZjbnQ7Cit9OworCitpbnQgbWx4NF9pYl9kYl9tYXBfdXNlcihzdHJ1Y3QgbWx4NF9pYl91Y29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgbG9uZyB2aXJ0LAorCQkJc3RydWN0IG1seDRfaWJfZGIgKmRiKQoreworCXN0cnVjdCBtbHg0X2liX3VzZXJfZGJfcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgaWJfdW1lbV9jaHVuayAqY2h1bms7CisJaW50IGVyciA9IDA7CisKKwltdXRleF9sb2NrKCZjb250ZXh0LT5kYl9wYWdlX211dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJmNvbnRleHQtPmRiX3BhZ2VfbGlzdCwgbGlzdCkKKwkJaWYgKHBhZ2UtPnVzZXJfdmlydCA9PSAodmlydCAmIFBBR0VfTUFTSykpCisJCQlnb3RvIGZvdW5kOworCisJcGFnZSA9IGttYWxsb2Moc2l6ZW9mICpwYWdlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2UpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcGFnZS0+dXNlcl92aXJ0ID0gKHZpcnQgJiBQQUdFX01BU0spOworCXBhZ2UtPnJlZmNudCAgICA9IDA7CisJcGFnZS0+dW1lbSAgICAgID0gaWJfdW1lbV9nZXQoJmNvbnRleHQtPmlidWNvbnRleHQsIHZpcnQgJiBQQUdFX01BU0ssCisJCQkJICAgICAgUEFHRV9TSVpFLCAwKTsKKwlpZiAoSVNfRVJSKHBhZ2UtPnVtZW0pKSB7CisJCWVyciA9IFBUUl9FUlIocGFnZS0+dW1lbSk7CisJCWtmcmVlKHBhZ2UpOworCQlnb3RvIG91dDsKKwl9CisKKwlsaXN0X2FkZCgmcGFnZS0+bGlzdCwgJmNvbnRleHQtPmRiX3BhZ2VfbGlzdCk7CisKK2ZvdW5kOgorCWNodW5rID0gbGlzdF9lbnRyeShwYWdlLT51bWVtLT5jaHVua19saXN0Lm5leHQsIHN0cnVjdCBpYl91bWVtX2NodW5rLCBsaXN0KTsKKwlkYi0+ZG1hCQk9IHNnX2RtYV9hZGRyZXNzKGNodW5rLT5wYWdlX2xpc3QpICsgKHZpcnQgJiB+UEFHRV9NQVNLKTsKKwlkYi0+dS51c2VyX3BhZ2UgPSBwYWdlOworCSsrcGFnZS0+cmVmY250OworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5kYl9wYWdlX211dGV4KTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgbWx4NF9pYl9kYl91bm1hcF91c2VyKHN0cnVjdCBtbHg0X2liX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgbWx4NF9pYl9kYiAqZGIpCit7CisJbXV0ZXhfbG9jaygmY29udGV4dC0+ZGJfcGFnZV9tdXRleCk7CisKKwlpZiAoIS0tZGItPnUudXNlcl9wYWdlLT5yZWZjbnQpIHsKKwkJbGlzdF9kZWwoJmRiLT51LnVzZXJfcGFnZS0+bGlzdCk7CisJCWliX3VtZW1fcmVsZWFzZShkYi0+dS51c2VyX3BhZ2UtPnVtZW0pOworCQlrZnJlZShkYi0+dS51c2VyX3BhZ2UpOworCX0KKworCW11dGV4X3VubG9jaygmY29udGV4dC0+ZGJfcGFnZV9tdXRleCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzA5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYwpAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8cmRtYS9pYl9tYWQuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3NtaS5oPgorCisjaW5jbHVkZSA8bGludXgvbWx4NC9jbWQuaD4KKworI2luY2x1ZGUgIm1seDRfaWIuaCIKKworZW51bSB7CisJTUxYNF9JQl9WRU5ET1JfQ0xBU1MxID0gMHg5LAorCU1MWDRfSUJfVkVORE9SX0NMQVNTMiA9IDB4YQorfTsKKworaW50IG1seDRfTUFEX0lGQyhzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiwgaW50IGlnbm9yZV9ta2V5LCBpbnQgaWdub3JlX2JrZXksCisJCSBpbnQgcG9ydCwgc3RydWN0IGliX3djICppbl93Yywgc3RydWN0IGliX2dyaCAqaW5fZ3JoLAorCQkgdm9pZCAqaW5fbWFkLCB2b2lkICpyZXNwb25zZV9tYWQpCit7CisJc3RydWN0IG1seDRfY21kX21haWxib3ggKmlubWFpbGJveCwgKm91dG1haWxib3g7CisJdm9pZCAqaW5ib3g7CisJaW50IGVycjsKKwl1MzIgaW5fbW9kaWZpZXIgPSBwb3J0OworCXU4IG9wX21vZGlmaWVyID0gMDsKKworCWlubWFpbGJveCA9IG1seDRfYWxsb2NfY21kX21haWxib3goZGV2LT5kZXYpOworCWlmIChJU19FUlIoaW5tYWlsYm94KSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5tYWlsYm94KTsKKwlpbmJveCA9IGlubWFpbGJveC0+YnVmOworCisJb3V0bWFpbGJveCA9IG1seDRfYWxsb2NfY21kX21haWxib3goZGV2LT5kZXYpOworCWlmIChJU19FUlIob3V0bWFpbGJveCkpIHsKKwkJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldi0+ZGV2LCBpbm1haWxib3gpOworCQlyZXR1cm4gUFRSX0VSUihvdXRtYWlsYm94KTsKKwl9CisKKwltZW1jcHkoaW5ib3gsIGluX21hZCwgMjU2KTsKKworCS8qCisJICogS2V5IGNoZWNrIHRyYXBzIGNhbid0IGJlIGdlbmVyYXRlZCB1bmxlc3Mgd2UgaGF2ZSBpbl93YyB0bworCSAqIHRlbGwgdXMgd2hlcmUgdG8gc2VuZCB0aGUgdHJhcC4KKwkgKi8KKwlpZiAoaWdub3JlX21rZXkgfHwgIWluX3djKQorCQlvcF9tb2RpZmllciB8PSAweDE7CisJaWYgKGlnbm9yZV9ia2V5IHx8ICFpbl93YykKKwkJb3BfbW9kaWZpZXIgfD0gMHgyOworCisJaWYgKGluX3djKSB7CisJCXN0cnVjdCB7CisJCQlfX2JlMzIJCW15X3FwbjsKKwkJCXUzMgkJcmVzZXJ2ZWQxOworCQkJX19iZTMyCQlycXBuOworCQkJdTgJCXNsOworCQkJdTgJCWdfcGF0aDsKKwkJCXUxNgkJcmVzZXJ2ZWQyWzJdOworCQkJX19iZTE2CQlwa2V5OworCQkJdTMyCQlyZXNlcnZlZDNbMTFdOworCQkJdTgJCWdyaFs0MF07CisJCX0gKmV4dF9pbmZvOworCisJCW1lbXNldChpbmJveCArIDI1NiwgMCwgMjU2KTsKKwkJZXh0X2luZm8gPSBpbmJveCArIDI1NjsKKworCQlleHRfaW5mby0+bXlfcXBuID0gY3B1X3RvX2JlMzIoaW5fd2MtPnFwLT5xcF9udW0pOworCQlleHRfaW5mby0+cnFwbiAgID0gY3B1X3RvX2JlMzIoaW5fd2MtPnNyY19xcCk7CisJCWV4dF9pbmZvLT5zbCAgICAgPSBpbl93Yy0+c2wgPDwgNDsKKwkJZXh0X2luZm8tPmdfcGF0aCA9IGluX3djLT5kbGlkX3BhdGhfYml0cyB8CisJCQkoaW5fd2MtPndjX2ZsYWdzICYgSUJfV0NfR1JIID8gMHg4MCA6IDApOworCQlleHRfaW5mby0+cGtleSAgID0gY3B1X3RvX2JlMTYoaW5fd2MtPnBrZXlfaW5kZXgpOworCisJCWlmIChpbl9ncmgpCisJCQltZW1jcHkoZXh0X2luZm8tPmdyaCwgaW5fZ3JoLCA0MCk7CisKKwkJb3BfbW9kaWZpZXIgfD0gMHg0OworCisJCWluX21vZGlmaWVyIHw9IGluX3djLT5zbGlkIDw8IDE2OworCX0KKworCWVyciA9IG1seDRfY21kX2JveChkZXYtPmRldiwgaW5tYWlsYm94LT5kbWEsIG91dG1haWxib3gtPmRtYSwKKwkJCSAgIGluX21vZGlmaWVyLCBvcF9tb2RpZmllciwKKwkJCSAgIE1MWDRfQ01EX01BRF9JRkMsIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQyk7CisKKwlpZiAoIWVycik7CisJCW1lbWNweShyZXNwb25zZV9tYWQsIG91dG1haWxib3gtPmJ1ZiwgMjU2KTsKKworCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYtPmRldiwgaW5tYWlsYm94KTsKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LT5kZXYsIG91dG1haWxib3gpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3NtX2FoKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCB1OCBwb3J0X251bSwgdTE2IGxpZCwgdTggc2wpCit7CisJc3RydWN0IGliX2FoICpuZXdfYWg7CisJc3RydWN0IGliX2FoX2F0dHIgYWhfYXR0cjsKKworCWlmICghZGV2LT5zZW5kX2FnZW50W3BvcnRfbnVtIC0gMV1bMF0pCisJCXJldHVybjsKKworCW1lbXNldCgmYWhfYXR0ciwgMCwgc2l6ZW9mIGFoX2F0dHIpOworCWFoX2F0dHIuZGxpZCAgICAgPSBsaWQ7CisJYWhfYXR0ci5zbCAgICAgICA9IHNsOworCWFoX2F0dHIucG9ydF9udW0gPSBwb3J0X251bTsKKworCW5ld19haCA9IGliX2NyZWF0ZV9haChkZXYtPnNlbmRfYWdlbnRbcG9ydF9udW0gLSAxXVswXS0+cXAtPnBkLAorCQkJICAgICAgJmFoX2F0dHIpOworCWlmIChJU19FUlIobmV3X2FoKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZkZXYtPnNtX2xvY2spOworCWlmIChkZXYtPnNtX2FoW3BvcnRfbnVtIC0gMV0pCisJCWliX2Rlc3Ryb3lfYWgoZGV2LT5zbV9haFtwb3J0X251bSAtIDFdKTsKKwlkZXYtPnNtX2FoW3BvcnRfbnVtIC0gMV0gPSBuZXdfYWg7CisJc3Bpbl91bmxvY2soJmRldi0+c21fbG9jayk7Cit9CisKKy8qCisgKiBTbm9vcCBTTSBNQURzIGZvciBwb3J0IGluZm8gYW5kIFBfS2V5IHRhYmxlIHNldHMsIHNvIHdlIGNhbgorICogc3ludGhlc2l6ZSBMSUQgY2hhbmdlIGFuZCBQX0tleSBjaGFuZ2UgZXZlbnRzLgorICovCitzdGF0aWMgdm9pZCBzbXBfc25vb3Aoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnRfbnVtLCBzdHJ1Y3QgaWJfbWFkICptYWQpCit7CisJc3RydWN0IGliX2V2ZW50IGV2ZW50OworCisJaWYgKChtYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fTElEX1JPVVRFRCB8fAorCSAgICAgbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSAmJgorCSAgICBtYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1NFVCkgeworCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUE9SVF9JTkZPKSB7CisJCQlzdHJ1Y3QgaWJfcG9ydF9pbmZvICpwaW5mbyA9CisJCQkJKHN0cnVjdCBpYl9wb3J0X2luZm8gKikgKChzdHJ1Y3QgaWJfc21wICopIG1hZCktPmRhdGE7CisKKwkJCXVwZGF0ZV9zbV9haCh0b19tZGV2KGliZGV2KSwgcG9ydF9udW0sCisJCQkJICAgICBiZTE2X3RvX2NwdShwaW5mby0+c21fbGlkKSwKKwkJCQkgICAgIHBpbmZvLT5uZWlnaGJvcm10dV9tYXN0ZXJzbXNsICYgMHhmKTsKKworCQkJZXZlbnQuZGV2aWNlCSAgICAgICA9IGliZGV2OworCQkJZXZlbnQuZWxlbWVudC5wb3J0X251bSA9IHBvcnRfbnVtOworCisJCQlpZihwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApCisJCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9DTElFTlRfUkVSRUdJU1RFUjsKKwkJCWVsc2UKKwkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CisKKwkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCX0KKworCQlpZiAobWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUEtFWV9UQUJMRSkgeworCQkJZXZlbnQuZGV2aWNlCSAgICAgICA9IGliZGV2OworCQkJZXZlbnQuZXZlbnQJICAgICAgID0gSUJfRVZFTlRfUEtFWV9DSEFOR0U7CisJCQlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gcG9ydF9udW07CisJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBub2RlX2Rlc2Nfb3ZlcnJpZGUoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpYl9tYWQgKm1hZCkKK3sKKwlpZiAoKG1hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9MSURfUk9VVEVEIHx8CisJICAgICBtYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fRElSRUNURURfUk9VVEUpICYmCisJICAgIG1hZC0+bWFkX2hkci5tZXRob2QgPT0gSUJfTUdNVF9NRVRIT0RfR0VUX1JFU1AgJiYKKwkgICAgbWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfTk9ERV9ERVNDKSB7CisJCXNwaW5fbG9jaygmdG9fbWRldihkZXYpLT5zbV9sb2NrKTsKKwkJbWVtY3B5KCgoc3RydWN0IGliX3NtcCAqKSBtYWQpLT5kYXRhLCBkZXYtPm5vZGVfZGVzYywgNjQpOworCQlzcGluX3VubG9jaygmdG9fbWRldihkZXYpLT5zbV9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZvcndhcmRfdHJhcChzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiwgdTggcG9ydF9udW0sIHN0cnVjdCBpYl9tYWQgKm1hZCkKK3sKKwlpbnQgcXBuID0gbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgIT0gSUJfTUdNVF9DTEFTU19TVUJOX0xJRF9ST1VURUQ7CisJc3RydWN0IGliX21hZF9zZW5kX2J1ZiAqc2VuZF9idWY7CisJc3RydWN0IGliX21hZF9hZ2VudCAqYWdlbnQgPSBkZXYtPnNlbmRfYWdlbnRbcG9ydF9udW0gLSAxXVtxcG5dOworCWludCByZXQ7CisKKwlpZiAoYWdlbnQpIHsKKwkJc2VuZF9idWYgPSBpYl9jcmVhdGVfc2VuZF9tYWQoYWdlbnQsIHFwbiwgMCwgMCwgSUJfTUdNVF9NQURfSERSLAorCQkJCQkgICAgICBJQl9NR01UX01BRF9EQVRBLCBHRlBfQVRPTUlDKTsKKwkJLyoKKwkJICogV2UgcmVseSBoZXJlIG9uIHRoZSBmYWN0IHRoYXQgTUxYIFFQcyBkb24ndCB1c2UgdGhlCisJCSAqIGFkZHJlc3MgaGFuZGxlIGFmdGVyIHRoZSBzZW5kIGlzIHBvc3RlZCAodGhpcyBpcworCQkgKiB3cm9uZyBmb2xsb3dpbmcgdGhlIElCIHNwZWMgc3RyaWN0bHksIGJ1dCB3ZSBrbm93CisJCSAqIGl0J3MgT0sgZm9yIG91ciBkZXZpY2VzKS4KKwkJICovCisJCXNwaW5fbG9jaygmZGV2LT5zbV9sb2NrKTsKKwkJbWVtY3B5KHNlbmRfYnVmLT5tYWQsIG1hZCwgc2l6ZW9mICptYWQpOworCQlpZiAoKHNlbmRfYnVmLT5haCA9IGRldi0+c21fYWhbcG9ydF9udW0gLSAxXSkpCisJCQlyZXQgPSBpYl9wb3N0X3NlbmRfbWFkKHNlbmRfYnVmLCBOVUxMKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJc3Bpbl91bmxvY2soJmRldi0+c21fbG9jayk7CisKKwkJaWYgKHJldCkKKwkJCWliX2ZyZWVfc2VuZF9tYWQoc2VuZF9idWYpOworCX0KK30KKworaW50IG1seDRfaWJfcHJvY2Vzc19tYWQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGludCBtYWRfZmxhZ3MsCXU4IHBvcnRfbnVtLAorCQkJc3RydWN0IGliX3djICppbl93Yywgc3RydWN0IGliX2dyaCAqaW5fZ3JoLAorCQkJc3RydWN0IGliX21hZCAqaW5fbWFkLCBzdHJ1Y3QgaWJfbWFkICpvdXRfbWFkKQoreworCXUxNiBzbGlkOworCWludCBlcnI7CisKKwlzbGlkID0gaW5fd2MgPyBpbl93Yy0+c2xpZCA6IGJlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKKworCWlmIChpbl9tYWQtPm1hZF9oZHIubWV0aG9kID09IElCX01HTVRfTUVUSE9EX1RSQVAgJiYgc2xpZCA9PSAwKSB7CisJCWZvcndhcmRfdHJhcCh0b19tZGV2KGliZGV2KSwgcG9ydF9udW0sIGluX21hZCk7CisJCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1MgfCBJQl9NQURfUkVTVUxUX0NPTlNVTUVEOworCX0KKworCWlmIChpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fTElEX1JPVVRFRCB8fAorCSAgICBpbl9tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fRElSRUNURURfUk9VVEUpIHsKKwkJaWYgKGluX21hZC0+bWFkX2hkci5tZXRob2QgICAhPSBJQl9NR01UX01FVEhPRF9HRVQgJiYKKwkJICAgIGluX21hZC0+bWFkX2hkci5tZXRob2QgICAhPSBJQl9NR01UX01FVEhPRF9TRVQgJiYKKwkJICAgIGluX21hZC0+bWFkX2hkci5tZXRob2QgICAhPSBJQl9NR01UX01FVEhPRF9UUkFQX1JFUFJFU1MpCisJCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOworCisJCS8qCisJCSAqIERvbid0IHByb2Nlc3MgU01JbmZvIHF1ZXJpZXMgb3IgdmVuZG9yLXNwZWNpZmljCisJCSAqIE1BRHMgLS0gdGhlIFNNQSBjYW4ndCBoYW5kbGUgdGhlbS4KKwkJICovCisJCWlmIChpbl9tYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9TTV9JTkZPIHx8CisJCSAgICAoKGluX21hZC0+bWFkX2hkci5hdHRyX2lkICYgSUJfU01QX0FUVFJfVkVORE9SX01BU0spID09CisJCSAgICAgSUJfU01QX0FUVFJfVkVORE9SX01BU0spKQorCQkJcmV0dXJuIElCX01BRF9SRVNVTFRfU1VDQ0VTUzsKKwl9IGVsc2UgaWYgKGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfUEVSRl9NR01UIHx8CisJCSAgIGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IE1MWDRfSUJfVkVORE9SX0NMQVNTMSAgIHx8CisJCSAgIGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IE1MWDRfSUJfVkVORE9SX0NMQVNTMikgeworCQlpZiAoaW5fbWFkLT5tYWRfaGRyLm1ldGhvZCAgIT0gSUJfTUdNVF9NRVRIT0RfR0VUICYmCisJCSAgICBpbl9tYWQtPm1hZF9oZHIubWV0aG9kICAhPSBJQl9NR01UX01FVEhPRF9TRVQpCisJCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOworCX0gZWxzZQorCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOworCisJZXJyID0gbWx4NF9NQURfSUZDKHRvX21kZXYoaWJkZXYpLAorCQkJICAgbWFkX2ZsYWdzICYgSUJfTUFEX0lHTk9SRV9NS0VZLAorCQkJICAgbWFkX2ZsYWdzICYgSUJfTUFEX0lHTk9SRV9CS0VZLAorCQkJICAgcG9ydF9udW0sIGluX3djLCBpbl9ncmgsIGluX21hZCwgb3V0X21hZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIElCX01BRF9SRVNVTFRfRkFJTFVSRTsKKworCWlmICghb3V0X21hZC0+bWFkX2hkci5zdGF0dXMpIHsKKwkJc21wX3Nub29wKGliZGV2LCBwb3J0X251bSwgaW5fbWFkKTsKKwkJbm9kZV9kZXNjX292ZXJyaWRlKGliZGV2LCBvdXRfbWFkKTsKKwl9CisKKwkvKiBzZXQgcmV0dXJuIGJpdCBpbiBzdGF0dXMgb2YgZGlyZWN0ZWQgcm91dGUgcmVzcG9uc2VzICovCisJaWYgKGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9ESVJFQ1RFRF9ST1VURSkKKwkJb3V0X21hZC0+bWFkX2hkci5zdGF0dXMgfD0gY3B1X3RvX2JlMTYoMSA8PCAxNSk7CisKKwlpZiAoaW5fbWFkLT5tYWRfaGRyLm1ldGhvZCA9PSBJQl9NR01UX01FVEhPRF9UUkFQX1JFUFJFU1MpCisJCS8qIG5vIHJlc3BvbnNlIGZvciB0cmFwIHJlcHJlc3MgKi8KKwkJcmV0dXJuIElCX01BRF9SRVNVTFRfU1VDQ0VTUyB8IElCX01BRF9SRVNVTFRfQ09OU1VNRUQ7CisKKwlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTIHwgSUJfTUFEX1JFU1VMVF9SRVBMWTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9oYW5kbGVyKHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LAorCQkJIHN0cnVjdCBpYl9tYWRfc2VuZF93YyAqbWFkX3NlbmRfd2MpCit7CisJaWJfZnJlZV9zZW5kX21hZChtYWRfc2VuZF93Yy0+c2VuZF9idWYpOworfQorCitpbnQgbWx4NF9pYl9tYWRfaW5pdChzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaWJfbWFkX2FnZW50ICphZ2VudDsKKwlpbnQgcCwgcTsKKwlpbnQgcmV0OworCisJZm9yIChwID0gMDsgcCA8IGRldi0+ZGV2LT5jYXBzLm51bV9wb3J0czsgKytwKQorCQlmb3IgKHEgPSAwOyBxIDw9IDE7ICsrcSkgeworCQkJYWdlbnQgPSBpYl9yZWdpc3Rlcl9tYWRfYWdlbnQoJmRldi0+aWJfZGV2LCBwICsgMSwKKwkJCQkJCSAgICAgIHEgPyBJQl9RUFRfR1NJIDogSUJfUVBUX1NNSSwKKwkJCQkJCSAgICAgIE5VTEwsIDAsIHNlbmRfaGFuZGxlciwKKwkJCQkJCSAgICAgIE5VTEwsIE5VTEwpOworCQkJaWYgKElTX0VSUihhZ2VudCkpIHsKKwkJCQlyZXQgPSBQVFJfRVJSKGFnZW50KTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCWRldi0+c2VuZF9hZ2VudFtwXVtxXSA9IGFnZW50OworCQl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWZvciAocCA9IDA7IHAgPCBkZXYtPmRldi0+Y2Fwcy5udW1fcG9ydHM7ICsrcCkKKwkJZm9yIChxID0gMDsgcSA8PSAxOyArK3EpCisJCQlpZiAoZGV2LT5zZW5kX2FnZW50W3BdW3FdKQorCQkJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGRldi0+c2VuZF9hZ2VudFtwXVtxXSk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG1seDRfaWJfbWFkX2NsZWFudXAoc3RydWN0IG1seDRfaWJfZGV2ICpkZXYpCit7CisJc3RydWN0IGliX21hZF9hZ2VudCAqYWdlbnQ7CisJaW50IHAsIHE7CisKKwlmb3IgKHAgPSAwOyBwIDwgZGV2LT5kZXYtPmNhcHMubnVtX3BvcnRzOyArK3ApIHsKKwkJZm9yIChxID0gMDsgcSA8PSAxOyArK3EpIHsKKwkJCWFnZW50ID0gZGV2LT5zZW5kX2FnZW50W3BdW3FdOworCQkJZGV2LT5zZW5kX2FnZW50W3BdW3FdID0gTlVMTDsKKwkJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGFnZW50KTsKKwkJfQorCisJCWlmIChkZXYtPnNtX2FoW3BdKQorCQkJaWJfZGVzdHJveV9haChkZXYtPnNtX2FoW3BdKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyZjNhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYwpAQCAtMCwwICsxLDY1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlIDxyZG1hL2liX3NtaS5oPgorI2luY2x1ZGUgPHJkbWEvaWJfdXNlcl92ZXJicy5oPgorCisjaW5jbHVkZSA8bGludXgvbWx4NC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbHg0L2NtZC5oPgorCisjaW5jbHVkZSAibWx4NF9pYi5oIgorI2luY2x1ZGUgInVzZXIuaCIKKworI2RlZmluZSBEUlZfTkFNRQkibWx4NF9pYiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMDEiCisjZGVmaW5lIERSVl9SRUxEQVRFCSJNYXkgMSwgMjAwNiIKKworTU9EVUxFX0FVVEhPUigiUm9sYW5kIERyZWllciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWxsYW5veCBDb25uZWN0WCBIQ0EgSW5maW5pQmFuZCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKKworc3RhdGljIGNvbnN0IGNoYXIgbWx4NF9pYl92ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CisJRFJWX05BTUUgIjogTWVsbGFub3ggQ29ubmVjdFggSW5maW5pQmFuZCBkcml2ZXIgdiIKKwlEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpXG4iOworCitzdGF0aWMgdm9pZCBpbml0X3F1ZXJ5X21hZChzdHJ1Y3QgaWJfc21wICptYWQpCit7CisJbWFkLT5iYXNlX3ZlcnNpb24gID0gMTsKKwltYWQtPm1nbXRfY2xhc3MgICAgPSBJQl9NR01UX0NMQVNTX1NVQk5fTElEX1JPVVRFRDsKKwltYWQtPmNsYXNzX3ZlcnNpb24gPSAxOworCW1hZC0+bWV0aG9kCSAgID0gSUJfTUdNVF9NRVRIT0RfR0VUOworfQorCitzdGF0aWMgaW50IG1seDRfaWJfcXVlcnlfZGV2aWNlKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAorCQkJCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqcHJvcHMpCit7CisJc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPSB0b19tZGV2KGliZGV2KTsKKwlzdHJ1Y3QgaWJfc21wICppbl9tYWQgID0gTlVMTDsKKwlzdHJ1Y3QgaWJfc21wICpvdXRfbWFkID0gTlVMTDsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCWluX21hZCAgPSBremFsbG9jKHNpemVvZiAqaW5fbWFkLCBHRlBfS0VSTkVMKTsKKwlvdXRfbWFkID0ga21hbGxvYyhzaXplb2YgKm91dF9tYWQsIEdGUF9LRVJORUwpOworCWlmICghaW5fbWFkIHx8ICFvdXRfbWFkKQorCQlnb3RvIG91dDsKKworCWluaXRfcXVlcnlfbWFkKGluX21hZCk7CisJaW5fbWFkLT5hdHRyX2lkID0gSUJfU01QX0FUVFJfTk9ERV9JTkZPOworCisJZXJyID0gbWx4NF9NQURfSUZDKHRvX21kZXYoaWJkZXYpLCAxLCAxLCAxLCBOVUxMLCBOVUxMLCBpbl9tYWQsIG91dF9tYWQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJbWVtc2V0KHByb3BzLCAwLCBzaXplb2YgKnByb3BzKTsKKworCXByb3BzLT5md192ZXIgPSBkZXYtPmRldi0+Y2Fwcy5md192ZXI7CisJcHJvcHMtPmRldmljZV9jYXBfZmxhZ3MgICAgPSBJQl9ERVZJQ0VfQ0hBTkdFX1BIWV9QT1JUIHwKKwkJSUJfREVWSUNFX1BPUlRfQUNUSVZFX0VWRU5UCQl8CisJCUlCX0RFVklDRV9TWVNfSU1BR0VfR1VJRAkJfAorCQlJQl9ERVZJQ0VfUkNfUk5SX05BS19HRU47CisJaWYgKGRldi0+ZGV2LT5jYXBzLmZsYWdzICYgTUxYNF9ERVZfQ0FQX0ZMQUdfQkFEX1BLRVlfQ05UUikKKwkJcHJvcHMtPmRldmljZV9jYXBfZmxhZ3MgfD0gSUJfREVWSUNFX0JBRF9QS0VZX0NOVFI7CisJaWYgKGRldi0+ZGV2LT5jYXBzLmZsYWdzICYgTUxYNF9ERVZfQ0FQX0ZMQUdfQkFEX1FLRVlfQ05UUikKKwkJcHJvcHMtPmRldmljZV9jYXBfZmxhZ3MgfD0gSUJfREVWSUNFX0JBRF9RS0VZX0NOVFI7CisJaWYgKGRldi0+ZGV2LT5jYXBzLmZsYWdzICYgTUxYNF9ERVZfQ0FQX0ZMQUdfQVBNKQorCQlwcm9wcy0+ZGV2aWNlX2NhcF9mbGFncyB8PSBJQl9ERVZJQ0VfQVVUT19QQVRIX01JRzsKKwlpZiAoZGV2LT5kZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19VRF9BVl9QT1JUKQorCQlwcm9wcy0+ZGV2aWNlX2NhcF9mbGFncyB8PSBJQl9ERVZJQ0VfVURfQVZfUE9SVF9FTkZPUkNFOworCisJcHJvcHMtPnZlbmRvcl9pZAkgICA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopIChvdXRfbWFkLT5kYXRhICsgMzYpKSAmCisJCTB4ZmZmZmZmOworCXByb3BzLT52ZW5kb3JfcGFydF9pZAkgICA9IGJlMTZfdG9fY3B1cCgoX19iZTE2ICopIChvdXRfbWFkLT5kYXRhICsgMzApKTsKKwlwcm9wcy0+aHdfdmVyCQkgICA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopIChvdXRfbWFkLT5kYXRhICsgMzIpKTsKKwltZW1jcHkoJnByb3BzLT5zeXNfaW1hZ2VfZ3VpZCwgb3V0X21hZC0+ZGF0YSArCTQsIDgpOworCisJcHJvcHMtPm1heF9tcl9zaXplCSAgID0gfjB1bGw7CisJcHJvcHMtPnBhZ2Vfc2l6ZV9jYXAJICAgPSBkZXYtPmRldi0+Y2Fwcy5wYWdlX3NpemVfY2FwOworCXByb3BzLT5tYXhfcXAJCSAgID0gZGV2LT5kZXYtPmNhcHMubnVtX3FwcyAtIGRldi0+ZGV2LT5jYXBzLnJlc2VydmVkX3FwczsKKwlwcm9wcy0+bWF4X3FwX3dyCSAgID0gZGV2LT5kZXYtPmNhcHMubWF4X3dxZXM7CisJcHJvcHMtPm1heF9zZ2UJCSAgID0gbWluKGRldi0+ZGV2LT5jYXBzLm1heF9zcV9zZywKKwkJCQkJIGRldi0+ZGV2LT5jYXBzLm1heF9ycV9zZyk7CisJcHJvcHMtPm1heF9jcQkJICAgPSBkZXYtPmRldi0+Y2Fwcy5udW1fY3FzIC0gZGV2LT5kZXYtPmNhcHMucmVzZXJ2ZWRfY3FzOworCXByb3BzLT5tYXhfY3FlCQkgICA9IGRldi0+ZGV2LT5jYXBzLm1heF9jcWVzOworCXByb3BzLT5tYXhfbXIJCSAgID0gZGV2LT5kZXYtPmNhcHMubnVtX21wdHMgLSBkZXYtPmRldi0+Y2Fwcy5yZXNlcnZlZF9tcndzOworCXByb3BzLT5tYXhfcGQJCSAgID0gZGV2LT5kZXYtPmNhcHMubnVtX3BkcyAtIGRldi0+ZGV2LT5jYXBzLnJlc2VydmVkX3BkczsKKwlwcm9wcy0+bWF4X3FwX3JkX2F0b20JICAgPSBkZXYtPmRldi0+Y2Fwcy5tYXhfcXBfZGVzdF9yZG1hOworCXByb3BzLT5tYXhfcXBfaW5pdF9yZF9hdG9tID0gZGV2LT5kZXYtPmNhcHMubWF4X3FwX2luaXRfcmRtYTsKKwlwcm9wcy0+bWF4X3Jlc19yZF9hdG9tCSAgID0gcHJvcHMtPm1heF9xcF9yZF9hdG9tICogcHJvcHMtPm1heF9xcDsKKwlwcm9wcy0+bWF4X3NycQkJICAgPSBkZXYtPmRldi0+Y2Fwcy5udW1fc3JxcyAtIGRldi0+ZGV2LT5jYXBzLnJlc2VydmVkX3NycXM7CisJcHJvcHMtPm1heF9zcnFfd3IJICAgPSBkZXYtPmRldi0+Y2Fwcy5tYXhfc3JxX3dxZXM7CisJcHJvcHMtPm1heF9zcnFfc2dlCSAgID0gZGV2LT5kZXYtPmNhcHMubWF4X3NycV9zZ2U7CisJcHJvcHMtPmxvY2FsX2NhX2Fja19kZWxheSAgPSBkZXYtPmRldi0+Y2Fwcy5sb2NhbF9jYV9hY2tfZGVsYXk7CisJcHJvcHMtPmF0b21pY19jYXAJICAgPSBkZXYtPmRldi0+Y2Fwcy5mbGFncyAmIE1MWDRfREVWX0NBUF9GTEFHX0FUT01JQyA/CisJCUlCX0FUT01JQ19IQ0EgOiBJQl9BVE9NSUNfTk9ORTsKKwlwcm9wcy0+bWF4X3BrZXlzCSAgID0gZGV2LT5kZXYtPmNhcHMucGtleV90YWJsZV9sZW47CisJcHJvcHMtPm1heF9tY2FzdF9ncnAJICAgPSBkZXYtPmRldi0+Y2Fwcy5udW1fbWdtcyArIGRldi0+ZGV2LT5jYXBzLm51bV9hbWdtczsKKwlwcm9wcy0+bWF4X21jYXN0X3FwX2F0dGFjaCA9IGRldi0+ZGV2LT5jYXBzLm51bV9xcF9wZXJfbWdtOworCXByb3BzLT5tYXhfdG90YWxfbWNhc3RfcXBfYXR0YWNoID0gcHJvcHMtPm1heF9tY2FzdF9xcF9hdHRhY2ggKgorCQkJCQkgICBwcm9wcy0+bWF4X21jYXN0X2dycDsKKwlwcm9wcy0+bWF4X21hcF9wZXJfZm1yID0gKDEgPDwgKDMyIC0gaWxvZzIoZGV2LT5kZXYtPmNhcHMubnVtX21wdHMpKSkgLSAxOworCitvdXQ6CisJa2ZyZWUoaW5fbWFkKTsKKwlrZnJlZShvdXRfbWFkKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9pYl9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0LAorCQkJICAgICAgc3RydWN0IGliX3BvcnRfYXR0ciAqcHJvcHMpCit7CisJc3RydWN0IGliX3NtcCAqaW5fbWFkICA9IE5VTEw7CisJc3RydWN0IGliX3NtcCAqb3V0X21hZCA9IE5VTEw7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlpbl9tYWQgID0ga3phbGxvYyhzaXplb2YgKmluX21hZCwgR0ZQX0tFUk5FTCk7CisJb3V0X21hZCA9IGttYWxsb2Moc2l6ZW9mICpvdXRfbWFkLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluX21hZCB8fCAhb3V0X21hZCkKKwkJZ290byBvdXQ7CisKKwltZW1zZXQocHJvcHMsIDAsIHNpemVvZiAqcHJvcHMpOworCisJaW5pdF9xdWVyeV9tYWQoaW5fbWFkKTsKKwlpbl9tYWQtPmF0dHJfaWQgID0gSUJfU01QX0FUVFJfUE9SVF9JTkZPOworCWluX21hZC0+YXR0cl9tb2QgPSBjcHVfdG9fYmUzMihwb3J0KTsKKworCWVyciA9IG1seDRfTUFEX0lGQyh0b19tZGV2KGliZGV2KSwgMSwgMSwgcG9ydCwgTlVMTCwgTlVMTCwgaW5fbWFkLCBvdXRfbWFkKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXByb3BzLT5saWQJCT0gYmUxNl90b19jcHVwKChfX2JlMTYgKikgKG91dF9tYWQtPmRhdGEgKyAxNikpOworCXByb3BzLT5sbWMJCT0gb3V0X21hZC0+ZGF0YVszNF0gJiAweDc7CisJcHJvcHMtPnNtX2xpZAkJPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSAob3V0X21hZC0+ZGF0YSArIDE4KSk7CisJcHJvcHMtPnNtX3NsCQk9IG91dF9tYWQtPmRhdGFbMzZdICYgMHhmOworCXByb3BzLT5zdGF0ZQkJPSBvdXRfbWFkLT5kYXRhWzMyXSAmIDB4ZjsKKwlwcm9wcy0+cGh5c19zdGF0ZQk9IG91dF9tYWQtPmRhdGFbMzNdID4+IDQ7CisJcHJvcHMtPnBvcnRfY2FwX2ZsYWdzCT0gYmUzMl90b19jcHVwKChfX2JlMzIgKikgKG91dF9tYWQtPmRhdGEgKyAyMCkpOworCXByb3BzLT5naWRfdGJsX2xlbgk9IHRvX21kZXYoaWJkZXYpLT5kZXYtPmNhcHMuZ2lkX3RhYmxlX2xlbjsKKwlwcm9wcy0+bWF4X21zZ19zegk9IDB4ODAwMDAwMDA7CisJcHJvcHMtPnBrZXlfdGJsX2xlbgk9IHRvX21kZXYoaWJkZXYpLT5kZXYtPmNhcHMucGtleV90YWJsZV9sZW47CisJcHJvcHMtPmJhZF9wa2V5X2NudHIJPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSAob3V0X21hZC0+ZGF0YSArIDQ2KSk7CisJcHJvcHMtPnFrZXlfdmlvbF9jbnRyCT0gYmUxNl90b19jcHVwKChfX2JlMTYgKikgKG91dF9tYWQtPmRhdGEgKyA0OCkpOworCXByb3BzLT5hY3RpdmVfd2lkdGgJPSBvdXRfbWFkLT5kYXRhWzMxXSAmIDB4ZjsKKwlwcm9wcy0+YWN0aXZlX3NwZWVkCT0gb3V0X21hZC0+ZGF0YVszNV0gPj4gNDsKKwlwcm9wcy0+bWF4X210dQkJPSBvdXRfbWFkLT5kYXRhWzQxXSAmIDB4ZjsKKwlwcm9wcy0+YWN0aXZlX210dQk9IG91dF9tYWQtPmRhdGFbMzZdID4+IDQ7CisJcHJvcHMtPnN1Ym5ldF90aW1lb3V0CT0gb3V0X21hZC0+ZGF0YVs1MV0gJiAweDFmOworCXByb3BzLT5tYXhfdmxfbnVtCT0gb3V0X21hZC0+ZGF0YVszN10gPj4gNDsKKwlwcm9wcy0+aW5pdF90eXBlX3JlcGx5CT0gb3V0X21hZC0+ZGF0YVs0MV0gPj4gNDsKKworb3V0OgorCWtmcmVlKGluX21hZCk7CisJa2ZyZWUob3V0X21hZCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1seDRfaWJfcXVlcnlfZ2lkKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0LCBpbnQgaW5kZXgsCisJCQkgICAgIHVuaW9uIGliX2dpZCAqZ2lkKQoreworCXN0cnVjdCBpYl9zbXAgKmluX21hZCAgPSBOVUxMOworCXN0cnVjdCBpYl9zbXAgKm91dF9tYWQgPSBOVUxMOworCWludCBlcnIgPSAtRU5PTUVNOworCisJaW5fbWFkICA9IGt6YWxsb2Moc2l6ZW9mICppbl9tYWQsIEdGUF9LRVJORUwpOworCW91dF9tYWQgPSBrbWFsbG9jKHNpemVvZiAqb3V0X21hZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbl9tYWQgfHwgIW91dF9tYWQpCisJCWdvdG8gb3V0OworCisJaW5pdF9xdWVyeV9tYWQoaW5fbWFkKTsKKwlpbl9tYWQtPmF0dHJfaWQgID0gSUJfU01QX0FUVFJfUE9SVF9JTkZPOworCWluX21hZC0+YXR0cl9tb2QgPSBjcHVfdG9fYmUzMihwb3J0KTsKKworCWVyciA9IG1seDRfTUFEX0lGQyh0b19tZGV2KGliZGV2KSwgMSwgMSwgcG9ydCwgTlVMTCwgTlVMTCwgaW5fbWFkLCBvdXRfbWFkKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCW1lbWNweShnaWQtPnJhdywgb3V0X21hZC0+ZGF0YSArIDgsIDgpOworCisJaW5pdF9xdWVyeV9tYWQoaW5fbWFkKTsKKwlpbl9tYWQtPmF0dHJfaWQgID0gSUJfU01QX0FUVFJfR1VJRF9JTkZPOworCWluX21hZC0+YXR0cl9tb2QgPSBjcHVfdG9fYmUzMihpbmRleCAvIDgpOworCisJZXJyID0gbWx4NF9NQURfSUZDKHRvX21kZXYoaWJkZXYpLCAxLCAxLCBwb3J0LCBOVUxMLCBOVUxMLCBpbl9tYWQsIG91dF9tYWQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJbWVtY3B5KGdpZC0+cmF3ICsgOCwgb3V0X21hZC0+ZGF0YSArIChpbmRleCAlIDgpICogOCwgOCk7CisKK291dDoKKwlrZnJlZShpbl9tYWQpOworCWtmcmVlKG91dF9tYWQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9pYl9xdWVyeV9wa2V5KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0LCB1MTYgaW5kZXgsCisJCQkgICAgICB1MTYgKnBrZXkpCit7CisJc3RydWN0IGliX3NtcCAqaW5fbWFkICA9IE5VTEw7CisJc3RydWN0IGliX3NtcCAqb3V0X21hZCA9IE5VTEw7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlpbl9tYWQgID0ga3phbGxvYyhzaXplb2YgKmluX21hZCwgR0ZQX0tFUk5FTCk7CisJb3V0X21hZCA9IGttYWxsb2Moc2l6ZW9mICpvdXRfbWFkLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluX21hZCB8fCAhb3V0X21hZCkKKwkJZ290byBvdXQ7CisKKwlpbml0X3F1ZXJ5X21hZChpbl9tYWQpOworCWluX21hZC0+YXR0cl9pZCAgPSBJQl9TTVBfQVRUUl9QS0VZX1RBQkxFOworCWluX21hZC0+YXR0cl9tb2QgPSBjcHVfdG9fYmUzMihpbmRleCAvIDMyKTsKKworCWVyciA9IG1seDRfTUFEX0lGQyh0b19tZGV2KGliZGV2KSwgMSwgMSwgcG9ydCwgTlVMTCwgTlVMTCwgaW5fbWFkLCBvdXRfbWFkKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCSpwa2V5ID0gYmUxNl90b19jcHUoKChfX2JlMTYgKikgb3V0X21hZC0+ZGF0YSlbaW5kZXggJSAzMl0pOworCitvdXQ6CisJa2ZyZWUoaW5fbWFkKTsKKwlrZnJlZShvdXRfbWFkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1seDRfaWJfbW9kaWZ5X2RldmljZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgaW50IG1hc2ssCisJCQkJIHN0cnVjdCBpYl9kZXZpY2VfbW9kaWZ5ICpwcm9wcykKK3sKKwlpZiAobWFzayAmIH5JQl9ERVZJQ0VfTU9ESUZZX05PREVfREVTQykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKG1hc2sgJiBJQl9ERVZJQ0VfTU9ESUZZX05PREVfREVTQykgeworCQlzcGluX2xvY2soJnRvX21kZXYoaWJkZXYpLT5zbV9sb2NrKTsKKwkJbWVtY3B5KGliZGV2LT5ub2RlX2Rlc2MsIHByb3BzLT5ub2RlX2Rlc2MsIDY0KTsKKwkJc3Bpbl91bmxvY2soJnRvX21kZXYoaWJkZXYpLT5zbV9sb2NrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbHg0X1NFVF9QT1JUKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCB1OCBwb3J0LCBpbnQgcmVzZXRfcWtleV92aW9scywKKwkJCSB1MzIgY2FwX21hc2spCit7CisJc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CisJaW50IGVycjsKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKG1haWxib3gpKQorCQlyZXR1cm4gUFRSX0VSUihtYWlsYm94KTsKKworCW1lbXNldChtYWlsYm94LT5idWYsIDAsIDI1Nik7CisJKih1OCAqKSBtYWlsYm94LT5idWYJICAgICA9ICEhcmVzZXRfcWtleV92aW9scyA8PCA2OworCSgoX19iZTMyICopIG1haWxib3gtPmJ1ZilbMl0gPSBjcHVfdG9fYmUzMihjYXBfbWFzayk7CisKKwllcnIgPSBtbHg0X2NtZChkZXYtPmRldiwgbWFpbGJveC0+ZG1hLCBwb3J0LCAwLCBNTFg0X0NNRF9TRVRfUE9SVCwKKwkJICAgICAgIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQik7CisKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LT5kZXYsIG1haWxib3gpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9pYl9tb2RpZnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCwgaW50IG1hc2ssCisJCQkgICAgICAgc3RydWN0IGliX3BvcnRfbW9kaWZ5ICpwcm9wcykKK3sKKwlzdHJ1Y3QgaWJfcG9ydF9hdHRyIGF0dHI7CisJdTMyIGNhcF9tYXNrOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZ0b19tZGV2KGliZGV2KS0+Y2FwX21hc2tfbXV0ZXgpOworCisJZXJyID0gbWx4NF9pYl9xdWVyeV9wb3J0KGliZGV2LCBwb3J0LCAmYXR0cik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwljYXBfbWFzayA9IChhdHRyLnBvcnRfY2FwX2ZsYWdzIHwgcHJvcHMtPnNldF9wb3J0X2NhcF9tYXNrKSAmCisJCX5wcm9wcy0+Y2xyX3BvcnRfY2FwX21hc2s7CisKKwllcnIgPSBtbHg0X1NFVF9QT1JUKHRvX21kZXYoaWJkZXYpLCBwb3J0LAorCQkJICAgICEhKG1hc2sgJiBJQl9QT1JUX1JFU0VUX1FLRVlfQ05UUiksCisJCQkgICAgY2FwX21hc2spOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ0b19tZGV2KGliZGV2KS0+Y2FwX21hc2tfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWJfdWNvbnRleHQgKm1seDRfaWJfYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCQkJCQkgIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPSB0b19tZGV2KGliZGV2KTsKKwlzdHJ1Y3QgbWx4NF9pYl91Y29udGV4dCAqY29udGV4dDsKKwlzdHJ1Y3QgbWx4NF9pYl9hbGxvY191Y29udGV4dF9yZXNwIHJlc3A7CisJaW50IGVycjsKKworCXJlc3AucXBfdGFiX3NpemUgICAgICA9IGRldi0+ZGV2LT5jYXBzLm51bV9xcHM7CisJcmVzcC5iZl9yZWdfc2l6ZSAgICAgID0gZGV2LT5kZXYtPmNhcHMuYmZfcmVnX3NpemU7CisJcmVzcC5iZl9yZWdzX3Blcl9wYWdlID0gZGV2LT5kZXYtPmNhcHMuYmZfcmVnc19wZXJfcGFnZTsKKworCWNvbnRleHQgPSBrbWFsbG9jKHNpemVvZiAqY29udGV4dCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb250ZXh0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWVyciA9IG1seDRfdWFyX2FsbG9jKHRvX21kZXYoaWJkZXYpLT5kZXYsICZjb250ZXh0LT51YXIpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUoY29udGV4dCk7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmNvbnRleHQtPmRiX3BhZ2VfbGlzdCk7CisJbXV0ZXhfaW5pdCgmY29udGV4dC0+ZGJfcGFnZV9tdXRleCk7CisKKwllcnIgPSBpYl9jb3B5X3RvX3VkYXRhKHVkYXRhLCAmcmVzcCwgc2l6ZW9mIHJlc3ApOworCWlmIChlcnIpIHsKKwkJbWx4NF91YXJfZnJlZSh0b19tZGV2KGliZGV2KS0+ZGV2LCAmY29udGV4dC0+dWFyKTsKKwkJa2ZyZWUoY29udGV4dCk7CisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCX0KKworCXJldHVybiAmY29udGV4dC0+aWJ1Y29udGV4dDsKK30KKworc3RhdGljIGludCBtbHg0X2liX2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYmNvbnRleHQpCit7CisJc3RydWN0IG1seDRfaWJfdWNvbnRleHQgKmNvbnRleHQgPSB0b19tdWNvbnRleHQoaWJjb250ZXh0KTsKKworCW1seDRfdWFyX2ZyZWUodG9fbWRldihpYmNvbnRleHQtPmRldmljZSktPmRldiwgJmNvbnRleHQtPnVhcik7CisJa2ZyZWUoY29udGV4dCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbHg0X2liX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiA9IHRvX21kZXYoY29udGV4dC0+ZGV2aWNlKTsKKworCWlmICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgIT0gUEFHRV9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2bWEtPnZtX3Bnb2ZmID09IDApIHsKKwkJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKKworCQlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKKwkJCQkgICAgICAgdG9fbXVjb250ZXh0KGNvbnRleHQpLT51YXIucGZuLAorCQkJCSAgICAgICBQQUdFX1NJWkUsIHZtYS0+dm1fcGFnZV9wcm90KSkKKwkJCXJldHVybiAtRUFHQUlOOworCX0gZWxzZSBpZiAodm1hLT52bV9wZ29mZiA9PSAxICYmIGRldi0+ZGV2LT5jYXBzLmJmX3JlZ19zaXplICE9IDApIHsKKwkJLyogRklYTUUgd2FudCBwZ3Byb3Rfd3JpdGVjb21iaW5lKCkgZm9yIEJsdWVGbGFtZSBwYWdlcyAqLworCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOworCisJCWlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAorCQkJCSAgICAgICB0b19tdWNvbnRleHQoY29udGV4dCktPnVhci5wZm4gKworCQkJCSAgICAgICBkZXYtPmRldi0+Y2Fwcy5udW1fdWFycywKKwkJCQkgICAgICAgUEFHRV9TSVpFLCB2bWEtPnZtX3BhZ2VfcHJvdCkpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpYl9wZCAqbWx4NF9pYl9hbGxvY19wZChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCisJCQkJICAgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgbWx4NF9pYl9wZCAqcGQ7CisJaW50IGVycjsKKworCXBkID0ga21hbGxvYyhzaXplb2YgKnBkLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWVyciA9IG1seDRfcGRfYWxsb2ModG9fbWRldihpYmRldiktPmRldiwgJnBkLT5wZG4pOworCWlmIChlcnIpIHsKKwkJa2ZyZWUocGQpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCWlmIChjb250ZXh0KQorCQlpZiAoaWJfY29weV90b191ZGF0YSh1ZGF0YSwgJnBkLT5wZG4sIHNpemVvZiAoX191MzIpKSkgeworCQkJbWx4NF9wZF9mcmVlKHRvX21kZXYoaWJkZXYpLT5kZXYsIHBkLT5wZG4pOworCQkJa2ZyZWUocGQpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CisJCX0KKworCXJldHVybiAmcGQtPmlicGQ7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9pYl9kZWFsbG9jX3BkKHN0cnVjdCBpYl9wZCAqcGQpCit7CisJbWx4NF9wZF9mcmVlKHRvX21kZXYocGQtPmRldmljZSktPmRldiwgdG9fbXBkKHBkKS0+cGRuKTsKKwlrZnJlZShwZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbHg0X2liX21jZ19hdHRhY2goc3RydWN0IGliX3FwICppYnFwLCB1bmlvbiBpYl9naWQgKmdpZCwgdTE2IGxpZCkKK3sKKwlyZXR1cm4gbWx4NF9tdWx0aWNhc3RfYXR0YWNoKHRvX21kZXYoaWJxcC0+ZGV2aWNlKS0+ZGV2LAorCQkJCSAgICAgJnRvX21xcChpYnFwKS0+bXFwLCBnaWQtPnJhdyk7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9pYl9tY2dfZGV0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpCit7CisJcmV0dXJuIG1seDRfbXVsdGljYXN0X2RldGFjaCh0b19tZGV2KGlicXAtPmRldmljZSktPmRldiwKKwkJCQkgICAgICZ0b19tcXAoaWJxcCktPm1xcCwgZ2lkLT5yYXcpOworfQorCitzdGF0aWMgaW50IGluaXRfbm9kZV9kYXRhKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2KQoreworCXN0cnVjdCBpYl9zbXAgKmluX21hZCAgPSBOVUxMOworCXN0cnVjdCBpYl9zbXAgKm91dF9tYWQgPSBOVUxMOworCWludCBlcnIgPSAtRU5PTUVNOworCisJaW5fbWFkICA9IGt6YWxsb2Moc2l6ZW9mICppbl9tYWQsIEdGUF9LRVJORUwpOworCW91dF9tYWQgPSBrbWFsbG9jKHNpemVvZiAqb3V0X21hZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbl9tYWQgfHwgIW91dF9tYWQpCisJCWdvdG8gb3V0OworCisJaW5pdF9xdWVyeV9tYWQoaW5fbWFkKTsKKwlpbl9tYWQtPmF0dHJfaWQgPSBJQl9TTVBfQVRUUl9OT0RFX0RFU0M7CisKKwllcnIgPSBtbHg0X01BRF9JRkMoZGV2LCAxLCAxLCAxLCBOVUxMLCBOVUxMLCBpbl9tYWQsIG91dF9tYWQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJbWVtY3B5KGRldi0+aWJfZGV2Lm5vZGVfZGVzYywgb3V0X21hZC0+ZGF0YSwgNjQpOworCisJaW5fbWFkLT5hdHRyX2lkID0gSUJfU01QX0FUVFJfTk9ERV9JTkZPOworCisJZXJyID0gbWx4NF9NQURfSUZDKGRldiwgMSwgMSwgMSwgTlVMTCwgTlVMTCwgaW5fbWFkLCBvdXRfbWFkKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCW1lbWNweSgmZGV2LT5pYl9kZXYubm9kZV9ndWlkLCBvdXRfbWFkLT5kYXRhICsgMTIsIDgpOworCitvdXQ6CisJa2ZyZWUoaW5fbWFkKTsKKwlrZnJlZShvdXRfbWFkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCAqbWx4NF9pYl9hZGQoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfaWJfZGV2ICppYmRldjsKKworCWliZGV2ID0gKHN0cnVjdCBtbHg0X2liX2RldiAqKSBpYl9hbGxvY19kZXZpY2Uoc2l6ZW9mICppYmRldik7CisJaWYgKCFpYmRldikgeworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIkRldmljZSBzdHJ1Y3QgYWxsb2MgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKG1seDRfcGRfYWxsb2MoZGV2LCAmaWJkZXYtPnByaXZfcGRuKSkKKwkJZ290byBlcnJfZGVhbGxvYzsKKworCWlmIChtbHg0X3Vhcl9hbGxvYyhkZXYsICZpYmRldi0+cHJpdl91YXIpKQorCQlnb3RvIGVycl9wZDsKKworCWliZGV2LT51YXJfbWFwID0gaW9yZW1hcChpYmRldi0+cHJpdl91YXIucGZuIDw8IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CisJaWYgKCFpYmRldi0+dWFyX21hcCkKKwkJZ290byBlcnJfdWFyOworCU1MWDRfSU5JVF9ET09SQkVMTF9MT0NLKCZpYmRldi0+dWFyX2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJmliZGV2LT5wZ2Rpcl9saXN0KTsKKwltdXRleF9pbml0KCZpYmRldi0+cGdkaXJfbXV0ZXgpOworCisJaWJkZXYtPmRldiA9IGRldjsKKworCXN0cmxjcHkoaWJkZXYtPmliX2Rldi5uYW1lLCAibWx4NF8lZCIsIElCX0RFVklDRV9OQU1FX01BWCk7CisJaWJkZXYtPmliX2Rldi5vd25lcgkJPSBUSElTX01PRFVMRTsKKwlpYmRldi0+aWJfZGV2Lm5vZGVfdHlwZQkJPSBSRE1BX05PREVfSUJfQ0E7CisJaWJkZXYtPmliX2Rldi5waHlzX3BvcnRfY250CT0gZGV2LT5jYXBzLm51bV9wb3J0czsKKwlpYmRldi0+aWJfZGV2Lm51bV9jb21wX3ZlY3RvcnMJPSAxOworCWliZGV2LT5pYl9kZXYuZG1hX2RldmljZQk9ICZkZXYtPnBkZXYtPmRldjsKKworCWliZGV2LT5pYl9kZXYudXZlcmJzX2FiaV92ZXIJPSBNTFg0X0lCX1VWRVJCU19BQklfVkVSU0lPTjsKKwlpYmRldi0+aWJfZGV2LnV2ZXJic19jbWRfbWFzawk9CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0dFVF9DT05URVhUKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9ERVZJQ0UpCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUE9SVCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQUxMT0NfUEQpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFQUxMT0NfUEQpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1JFR19NUikJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfREVSRUdfTVIpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DT01QX0NIQU5ORUwpCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX0NRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX0NRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfUVApCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9RUCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9RUCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQVRUQUNIX01DQVNUKQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFVEFDSF9NQ0FTVCkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfU1JRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfU1JRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX1NSUSk7CisKKwlpYmRldi0+aWJfZGV2LnF1ZXJ5X2RldmljZQk9IG1seDRfaWJfcXVlcnlfZGV2aWNlOworCWliZGV2LT5pYl9kZXYucXVlcnlfcG9ydAk9IG1seDRfaWJfcXVlcnlfcG9ydDsKKwlpYmRldi0+aWJfZGV2LnF1ZXJ5X2dpZAkJPSBtbHg0X2liX3F1ZXJ5X2dpZDsKKwlpYmRldi0+aWJfZGV2LnF1ZXJ5X3BrZXkJPSBtbHg0X2liX3F1ZXJ5X3BrZXk7CisJaWJkZXYtPmliX2Rldi5tb2RpZnlfZGV2aWNlCT0gbWx4NF9pYl9tb2RpZnlfZGV2aWNlOworCWliZGV2LT5pYl9kZXYubW9kaWZ5X3BvcnQJPSBtbHg0X2liX21vZGlmeV9wb3J0OworCWliZGV2LT5pYl9kZXYuYWxsb2NfdWNvbnRleHQJPSBtbHg0X2liX2FsbG9jX3Vjb250ZXh0OworCWliZGV2LT5pYl9kZXYuZGVhbGxvY191Y29udGV4dAk9IG1seDRfaWJfZGVhbGxvY191Y29udGV4dDsKKwlpYmRldi0+aWJfZGV2Lm1tYXAJCT0gbWx4NF9pYl9tbWFwOworCWliZGV2LT5pYl9kZXYuYWxsb2NfcGQJCT0gbWx4NF9pYl9hbGxvY19wZDsKKwlpYmRldi0+aWJfZGV2LmRlYWxsb2NfcGQJPSBtbHg0X2liX2RlYWxsb2NfcGQ7CisJaWJkZXYtPmliX2Rldi5jcmVhdGVfYWgJCT0gbWx4NF9pYl9jcmVhdGVfYWg7CisJaWJkZXYtPmliX2Rldi5xdWVyeV9haAkJPSBtbHg0X2liX3F1ZXJ5X2FoOworCWliZGV2LT5pYl9kZXYuZGVzdHJveV9haAk9IG1seDRfaWJfZGVzdHJveV9haDsKKwlpYmRldi0+aWJfZGV2LmNyZWF0ZV9zcnEJPSBtbHg0X2liX2NyZWF0ZV9zcnE7CisJaWJkZXYtPmliX2Rldi5tb2RpZnlfc3JxCT0gbWx4NF9pYl9tb2RpZnlfc3JxOworCWliZGV2LT5pYl9kZXYuZGVzdHJveV9zcnEJPSBtbHg0X2liX2Rlc3Ryb3lfc3JxOworCWliZGV2LT5pYl9kZXYucG9zdF9zcnFfcmVjdgk9IG1seDRfaWJfcG9zdF9zcnFfcmVjdjsKKwlpYmRldi0+aWJfZGV2LmNyZWF0ZV9xcAkJPSBtbHg0X2liX2NyZWF0ZV9xcDsKKwlpYmRldi0+aWJfZGV2Lm1vZGlmeV9xcAkJPSBtbHg0X2liX21vZGlmeV9xcDsKKwlpYmRldi0+aWJfZGV2LmRlc3Ryb3lfcXAJPSBtbHg0X2liX2Rlc3Ryb3lfcXA7CisJaWJkZXYtPmliX2Rldi5wb3N0X3NlbmQJCT0gbWx4NF9pYl9wb3N0X3NlbmQ7CisJaWJkZXYtPmliX2Rldi5wb3N0X3JlY3YJCT0gbWx4NF9pYl9wb3N0X3JlY3Y7CisJaWJkZXYtPmliX2Rldi5jcmVhdGVfY3EJCT0gbWx4NF9pYl9jcmVhdGVfY3E7CisJaWJkZXYtPmliX2Rldi5kZXN0cm95X2NxCT0gbWx4NF9pYl9kZXN0cm95X2NxOworCWliZGV2LT5pYl9kZXYucG9sbF9jcQkJPSBtbHg0X2liX3BvbGxfY3E7CisJaWJkZXYtPmliX2Rldi5yZXFfbm90aWZ5X2NxCT0gbWx4NF9pYl9hcm1fY3E7CisJaWJkZXYtPmliX2Rldi5nZXRfZG1hX21yCT0gbWx4NF9pYl9nZXRfZG1hX21yOworCWliZGV2LT5pYl9kZXYucmVnX3VzZXJfbXIJPSBtbHg0X2liX3JlZ191c2VyX21yOworCWliZGV2LT5pYl9kZXYuZGVyZWdfbXIJCT0gbWx4NF9pYl9kZXJlZ19tcjsKKwlpYmRldi0+aWJfZGV2LmF0dGFjaF9tY2FzdAk9IG1seDRfaWJfbWNnX2F0dGFjaDsKKwlpYmRldi0+aWJfZGV2LmRldGFjaF9tY2FzdAk9IG1seDRfaWJfbWNnX2RldGFjaDsKKwlpYmRldi0+aWJfZGV2LnByb2Nlc3NfbWFkCT0gbWx4NF9pYl9wcm9jZXNzX21hZDsKKworCWlmIChpbml0X25vZGVfZGF0YShpYmRldikpCisJCWdvdG8gZXJyX21hcDsKKworCXNwaW5fbG9ja19pbml0KCZpYmRldi0+c21fbG9jayk7CisJbXV0ZXhfaW5pdCgmaWJkZXYtPmNhcF9tYXNrX211dGV4KTsKKworCWlmIChpYl9yZWdpc3Rlcl9kZXZpY2UoJmliZGV2LT5pYl9kZXYpKQorCQlnb3RvIGVycl9tYXA7CisKKwlpZiAobWx4NF9pYl9tYWRfaW5pdChpYmRldikpCisJCWdvdG8gZXJyX3JlZzsKKworCXJldHVybiBpYmRldjsKKworZXJyX3JlZzoKKwlpYl91bnJlZ2lzdGVyX2RldmljZSgmaWJkZXYtPmliX2Rldik7CisKK2Vycl9tYXA6CisJaW91bm1hcChpYmRldi0+dWFyX21hcCk7CisKK2Vycl91YXI6CisJbWx4NF91YXJfZnJlZShkZXYsICZpYmRldi0+cHJpdl91YXIpOworCitlcnJfcGQ6CisJbWx4NF9wZF9mcmVlKGRldiwgaWJkZXYtPnByaXZfcGRuKTsKKworZXJyX2RlYWxsb2M6CisJaWJfZGVhbGxvY19kZXZpY2UoJmliZGV2LT5pYl9kZXYpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIG1seDRfaWJfcmVtb3ZlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB2b2lkICppYmRldl9wdHIpCit7CisJc3RydWN0IG1seDRfaWJfZGV2ICppYmRldiA9IGliZGV2X3B0cjsKKwlpbnQgcDsKKworCWZvciAocCA9IDE7IHAgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgKytwKQorCQltbHg0X0NMT1NFX1BPUlQoZGV2LCBwKTsKKworCW1seDRfaWJfbWFkX2NsZWFudXAoaWJkZXYpOworCWliX3VucmVnaXN0ZXJfZGV2aWNlKCZpYmRldi0+aWJfZGV2KTsKKwlpb3VubWFwKGliZGV2LT51YXJfbWFwKTsKKwltbHg0X3Vhcl9mcmVlKGRldiwgJmliZGV2LT5wcml2X3Vhcik7CisJbWx4NF9wZF9mcmVlKGRldiwgaWJkZXYtPnByaXZfcGRuKTsKKwlpYl9kZWFsbG9jX2RldmljZSgmaWJkZXYtPmliX2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIG1seDRfaWJfZXZlbnQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHZvaWQgKmliZGV2X3B0ciwKKwkJCSAgZW51bSBtbHg0X2Rldl9ldmVudCBldmVudCwgaW50IHN1YnR5cGUsCisJCQkgIGludCBwb3J0KQoreworCXN0cnVjdCBpYl9ldmVudCBpYmV2OworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTUxYNF9FVkVOVF9UWVBFX1BPUlRfQ0hBTkdFOgorCQlpYmV2LmV2ZW50ID0gc3VidHlwZSA9PSBNTFg0X1BPUlRfQ0hBTkdFX1NVQlRZUEVfQUNUSVZFID8KKwkJCUlCX0VWRU5UX1BPUlRfQUNUSVZFIDogSUJfRVZFTlRfUE9SVF9FUlI7CisJCWJyZWFrOworCisJY2FzZSBNTFg0X0VWRU5UX1RZUEVfTE9DQUxfQ0FUQVNfRVJST1I6CisJCWliZXYuZXZlbnQgPSBJQl9FVkVOVF9ERVZJQ0VfRkFUQUw7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCWliZXYuZGV2aWNlCSAgICAgID0gaWJkZXZfcHRyOworCWliZXYuZWxlbWVudC5wb3J0X251bSA9IHBvcnQ7CisKKwlpYl9kaXNwYXRjaF9ldmVudCgmaWJldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWx4NF9pbnRlcmZhY2UgbWx4NF9pYl9pbnRlcmZhY2UgPSB7CisJLmFkZAk9IG1seDRfaWJfYWRkLAorCS5yZW1vdmUJPSBtbHg0X2liX3JlbW92ZSwKKwkuZXZlbnQJPSBtbHg0X2liX2V2ZW50Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBtbHg0X2liX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gbWx4NF9yZWdpc3Rlcl9pbnRlcmZhY2UoJm1seDRfaWJfaW50ZXJmYWNlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1seDRfaWJfY2xlYW51cCh2b2lkKQoreworCW1seDRfdW5yZWdpc3Rlcl9pbnRlcmZhY2UoJm1seDRfaWJfaW50ZXJmYWNlKTsKK30KKworbW9kdWxlX2luaXQobWx4NF9pYl9pbml0KTsKK21vZHVsZV9leGl0KG1seDRfaWJfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tbHg0X2liLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tbHg0X2liLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkYWM3MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21seDRfaWIuaApAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgTUxYNF9JQl9ICisjZGVmaW5lIE1MWDRfSUJfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CisjaW5jbHVkZSA8cmRtYS9pYl91bWVtLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbHg0L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21seDQvZG9vcmJlbGwuaD4KKworZW51bSB7CisJTUxYNF9JQl9EQl9QRVJfUEFHRQk9IFBBR0VfU0laRSAvIDQKK307CisKK3N0cnVjdCBtbHg0X2liX2RiX3BnZGlyOworc3RydWN0IG1seDRfaWJfdXNlcl9kYl9wYWdlOworCitzdHJ1Y3QgbWx4NF9pYl9kYiB7CisJX19iZTMyCQkgICAgICAgKmRiOworCXVuaW9uIHsKKwkJc3RydWN0IG1seDRfaWJfZGJfcGdkaXIJICAgICAgICpwZ2RpcjsKKwkJc3RydWN0IG1seDRfaWJfdXNlcl9kYl9wYWdlICAgICp1c2VyX3BhZ2U7CisJfQkJCXU7CisJZG1hX2FkZHJfdAkJZG1hOworCWludAkJCWluZGV4OworCWludAkJCW9yZGVyOworfTsKKworc3RydWN0IG1seDRfaWJfdWNvbnRleHQgeworCXN0cnVjdCBpYl91Y29udGV4dAlpYnVjb250ZXh0OworCXN0cnVjdCBtbHg0X3VhcgkJdWFyOworCXN0cnVjdCBsaXN0X2hlYWQJZGJfcGFnZV9saXN0OworCXN0cnVjdCBtdXRleAkJZGJfcGFnZV9tdXRleDsKK307CisKK3N0cnVjdCBtbHg0X2liX3BkIHsKKwlzdHJ1Y3QgaWJfcGQJCWlicGQ7CisJdTMyCQkJcGRuOworfTsKKworc3RydWN0IG1seDRfaWJfY3FfYnVmIHsKKwlzdHJ1Y3QgbWx4NF9idWYJCWJ1ZjsKKwlzdHJ1Y3QgbWx4NF9tdHQJCW10dDsKK307CisKK3N0cnVjdCBtbHg0X2liX2NxIHsKKwlzdHJ1Y3QgaWJfY3EJCWliY3E7CisJc3RydWN0IG1seDRfY3EJCW1jcTsKKwlzdHJ1Y3QgbWx4NF9pYl9jcV9idWYJYnVmOworCXN0cnVjdCBtbHg0X2liX2RiCWRiOworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGliX3VtZW0JICAgICAgICp1bWVtOworfTsKKworc3RydWN0IG1seDRfaWJfbXIgeworCXN0cnVjdCBpYl9tcgkJaWJtcjsKKwlzdHJ1Y3QgbWx4NF9tcgkJbW1yOworCXN0cnVjdCBpYl91bWVtCSAgICAgICAqdW1lbTsKK307CisKK3N0cnVjdCBtbHg0X2liX3dxIHsKKwl1NjQJCSAgICAgICAqd3JpZDsKKwlzcGlubG9ja190CQlsb2NrOworCWludAkJCW1heDsKKwlpbnQJCQltYXhfZ3M7CisJaW50CQkJb2Zmc2V0OworCWludAkJCXdxZV9zaGlmdDsKKwl1bnNpZ25lZAkJaGVhZDsKKwl1bnNpZ25lZAkJdGFpbDsKK307CisKK3N0cnVjdCBtbHg0X2liX3FwIHsKKwlzdHJ1Y3QgaWJfcXAJCWlicXA7CisJc3RydWN0IG1seDRfcXAJCW1xcDsKKwlzdHJ1Y3QgbWx4NF9idWYJCWJ1ZjsKKworCXN0cnVjdCBtbHg0X2liX2RiCWRiOworCXN0cnVjdCBtbHg0X2liX3dxCXJxOworCisJdTMyCQkJZG9vcmJlbGxfcXBuOworCV9fYmUzMgkJCXNxX3NpZ25hbF9iaXRzOworCXN0cnVjdCBtbHg0X2liX3dxCXNxOworCisJc3RydWN0IGliX3VtZW0JICAgICAgICp1bWVtOworCXN0cnVjdCBtbHg0X210dAkJbXR0OworCWludAkJCWJ1Zl9zaXplOworCXN0cnVjdCBtdXRleAkJbXV0ZXg7CisJdTgJCQlwb3J0OworCXU4CQkJYWx0X3BvcnQ7CisJdTgJCQlhdG9taWNfcmRfZW47CisJdTgJCQlyZXNwX2RlcHRoOworCXU4CQkJc3RhdGU7Cit9OworCitzdHJ1Y3QgbWx4NF9pYl9zcnEgeworCXN0cnVjdCBpYl9zcnEJCWlic3JxOworCXN0cnVjdCBtbHg0X3NycQkJbXNycTsKKwlzdHJ1Y3QgbWx4NF9idWYJCWJ1ZjsKKwlzdHJ1Y3QgbWx4NF9pYl9kYglkYjsKKwl1NjQJCSAgICAgICAqd3JpZDsKKwlzcGlubG9ja190CQlsb2NrOworCWludAkJCWhlYWQ7CisJaW50CQkJdGFpbDsKKwl1MTYJCQl3cWVfY3RyOworCXN0cnVjdCBpYl91bWVtCSAgICAgICAqdW1lbTsKKwlzdHJ1Y3QgbWx4NF9tdHQJCW10dDsKKwlzdHJ1Y3QgbXV0ZXgJCW11dGV4OworfTsKKworc3RydWN0IG1seDRfaWJfYWggeworCXN0cnVjdCBpYl9haAkJaWJhaDsKKwlzdHJ1Y3QgbWx4NF9hdgkJYXY7Cit9OworCitzdHJ1Y3QgbWx4NF9pYl9kZXYgeworCXN0cnVjdCBpYl9kZXZpY2UJaWJfZGV2OworCXN0cnVjdCBtbHg0X2RldgkgICAgICAgKmRldjsKKwl2b2lkIF9faW9tZW0JICAgICAgICp1YXJfbWFwOworCisJc3RydWN0IGxpc3RfaGVhZAlwZ2Rpcl9saXN0OworCXN0cnVjdCBtdXRleAkJcGdkaXJfbXV0ZXg7CisKKwlzdHJ1Y3QgbWx4NF91YXIJCXByaXZfdWFyOworCXUzMgkJCXByaXZfcGRuOworCU1MWDRfREVDTEFSRV9ET09SQkVMTF9MT0NLKHVhcl9sb2NrKTsKKworCXN0cnVjdCBpYl9tYWRfYWdlbnQgICAgKnNlbmRfYWdlbnRbTUxYNF9NQVhfUE9SVFNdWzJdOworCXN0cnVjdCBpYl9haAkgICAgICAgKnNtX2FoW01MWDRfTUFYX1BPUlRTXTsKKwlzcGlubG9ja190CQlzbV9sb2NrOworCisJc3RydWN0IG11dGV4CQljYXBfbWFza19tdXRleDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1seDRfaWJfZGV2ICp0b19tZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJkZXYsIHN0cnVjdCBtbHg0X2liX2RldiwgaWJfZGV2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWx4NF9pYl91Y29udGV4dCAqdG9fbXVjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1Y29udGV4dCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlidWNvbnRleHQsIHN0cnVjdCBtbHg0X2liX3Vjb250ZXh0LCBpYnVjb250ZXh0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWx4NF9pYl9wZCAqdG9fbXBkKHN0cnVjdCBpYl9wZCAqaWJwZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlicGQsIHN0cnVjdCBtbHg0X2liX3BkLCBpYnBkKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWx4NF9pYl9jcSAqdG9fbWNxKHN0cnVjdCBpYl9jcSAqaWJjcSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGliY3EsIHN0cnVjdCBtbHg0X2liX2NxLCBpYmNxKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWx4NF9pYl9jcSAqdG9fbWliY3Eoc3RydWN0IG1seDRfY3EgKm1jcSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKG1jcSwgc3RydWN0IG1seDRfaWJfY3EsIG1jcSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1seDRfaWJfbXIgKnRvX21tcihzdHJ1Y3QgaWJfbXIgKmlibXIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYm1yLCBzdHJ1Y3QgbWx4NF9pYl9tciwgaWJtcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1seDRfaWJfcXAgKnRvX21xcChzdHJ1Y3QgaWJfcXAgKmlicXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYnFwLCBzdHJ1Y3QgbWx4NF9pYl9xcCwgaWJxcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1seDRfaWJfcXAgKnRvX21pYnFwKHN0cnVjdCBtbHg0X3FwICptcXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihtcXAsIHN0cnVjdCBtbHg0X2liX3FwLCBtcXApOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtbHg0X2liX3NycSAqdG9fbXNycShzdHJ1Y3QgaWJfc3JxICppYnNycSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlic3JxLCBzdHJ1Y3QgbWx4NF9pYl9zcnEsIGlic3JxKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWx4NF9pYl9zcnEgKnRvX21pYnNycShzdHJ1Y3QgbWx4NF9zcnEgKm1zcnEpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihtc3JxLCBzdHJ1Y3QgbWx4NF9pYl9zcnEsIG1zcnEpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtbHg0X2liX2FoICp0b19tYWgoc3RydWN0IGliX2FoICppYmFoKQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJhaCwgc3RydWN0IG1seDRfaWJfYWgsIGliYWgpOworfQorCitpbnQgbWx4NF9pYl9kYl9hbGxvYyhzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiwgc3RydWN0IG1seDRfaWJfZGIgKmRiLCBpbnQgb3JkZXIpOwordm9pZCBtbHg0X2liX2RiX2ZyZWUoc3RydWN0IG1seDRfaWJfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2liX2RiICpkYik7CitpbnQgbWx4NF9pYl9kYl9tYXBfdXNlcihzdHJ1Y3QgbWx4NF9pYl91Y29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgbG9uZyB2aXJ0LAorCQkJc3RydWN0IG1seDRfaWJfZGIgKmRiKTsKK3ZvaWQgbWx4NF9pYl9kYl91bm1hcF91c2VyKHN0cnVjdCBtbHg0X2liX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgbWx4NF9pYl9kYiAqZGIpOworCitzdHJ1Y3QgaWJfbXIgKm1seDRfaWJfZ2V0X2RtYV9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBpbnQgYWNjKTsKK2ludCBtbHg0X2liX3VtZW1fd3JpdGVfbXR0KHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9tdHQgKm10dCwKKwkJCSAgIHN0cnVjdCBpYl91bWVtICp1bWVtKTsKK3N0cnVjdCBpYl9tciAqbWx4NF9pYl9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLCB1NjQgc3RhcnQsIHU2NCBsZW5ndGgsCisJCQkJICB1NjQgdmlydF9hZGRyLCBpbnQgYWNjZXNzX2ZsYWdzLAorCQkJCSAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CitpbnQgbWx4NF9pYl9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKm1yKTsKKworc3RydWN0IGliX2NxICptbHg0X2liX2NyZWF0ZV9jcShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgaW50IGVudHJpZXMsIGludCB2ZWN0b3IsCisJCQkJc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LAorCQkJCXN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOworaW50IG1seDRfaWJfZGVzdHJveV9jcShzdHJ1Y3QgaWJfY3EgKmNxKTsKK2ludCBtbHg0X2liX3BvbGxfY3Eoc3RydWN0IGliX2NxICppYmNxLCBpbnQgbnVtX2VudHJpZXMsIHN0cnVjdCBpYl93YyAqd2MpOworaW50IG1seDRfaWJfYXJtX2NxKHN0cnVjdCBpYl9jcSAqY3EsIGVudW0gaWJfY3Ffbm90aWZ5X2ZsYWdzIGZsYWdzKTsKK3ZvaWQgX19tbHg0X2liX2NxX2NsZWFuKHN0cnVjdCBtbHg0X2liX2NxICpjcSwgdTMyIHFwbiwgc3RydWN0IG1seDRfaWJfc3JxICpzcnEpOwordm9pZCBtbHg0X2liX2NxX2NsZWFuKHN0cnVjdCBtbHg0X2liX2NxICpjcSwgdTMyIHFwbiwgc3RydWN0IG1seDRfaWJfc3JxICpzcnEpOworCitzdHJ1Y3QgaWJfYWggKm1seDRfaWJfY3JlYXRlX2FoKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyKTsKK2ludCBtbHg0X2liX3F1ZXJ5X2FoKHN0cnVjdCBpYl9haCAqaWJhaCwgc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpOworaW50IG1seDRfaWJfZGVzdHJveV9haChzdHJ1Y3QgaWJfYWggKmFoKTsKKworc3RydWN0IGliX3NycSAqbWx4NF9pYl9jcmVhdGVfc3JxKHN0cnVjdCBpYl9wZCAqcGQsCisJCQkJICBzdHJ1Y3QgaWJfc3JxX2luaXRfYXR0ciAqaW5pdF9hdHRyLAorCQkJCSAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CitpbnQgbWx4NF9pYl9tb2RpZnlfc3JxKHN0cnVjdCBpYl9zcnEgKmlic3JxLCBzdHJ1Y3QgaWJfc3JxX2F0dHIgKmF0dHIsCisJCSAgICAgICBlbnVtIGliX3NycV9hdHRyX21hc2sgYXR0cl9tYXNrLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKK2ludCBtbHg0X2liX2Rlc3Ryb3lfc3JxKHN0cnVjdCBpYl9zcnEgKnNycSk7Cit2b2lkIG1seDRfaWJfZnJlZV9zcnFfd3FlKHN0cnVjdCBtbHg0X2liX3NycSAqc3JxLCBpbnQgd3FlX2luZGV4KTsKK2ludCBtbHg0X2liX3Bvc3Rfc3JxX3JlY3Yoc3RydWN0IGliX3NycSAqaWJzcnEsIHN0cnVjdCBpYl9yZWN2X3dyICp3ciwKKwkJCSAgc3RydWN0IGliX3JlY3Zfd3IgKipiYWRfd3IpOworCitzdHJ1Y3QgaWJfcXAgKm1seDRfaWJfY3JlYXRlX3FwKHN0cnVjdCBpYl9wZCAqcGQsCisJCQkJc3RydWN0IGliX3FwX2luaXRfYXR0ciAqaW5pdF9hdHRyLAorCQkJCXN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOworaW50IG1seDRfaWJfZGVzdHJveV9xcChzdHJ1Y3QgaWJfcXAgKnFwKTsKK2ludCBtbHg0X2liX21vZGlmeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLAorCQkgICAgICBpbnQgYXR0cl9tYXNrLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKK2ludCBtbHg0X2liX3Bvc3Rfc2VuZChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9zZW5kX3dyICp3ciwKKwkJICAgICAgc3RydWN0IGliX3NlbmRfd3IgKipiYWRfd3IpOworaW50IG1seDRfaWJfcG9zdF9yZWN2KHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3JlY3Zfd3IgKndyLAorCQkgICAgICBzdHJ1Y3QgaWJfcmVjdl93ciAqKmJhZF93cik7CisKK2ludCBtbHg0X01BRF9JRkMoc3RydWN0IG1seDRfaWJfZGV2ICpkZXYsIGludCBpZ25vcmVfbWtleSwgaW50IGlnbm9yZV9ia2V5LAorCQkgaW50IHBvcnQsIHN0cnVjdCBpYl93YyAqaW5fd2MsIHN0cnVjdCBpYl9ncmggKmluX2dyaCwKKwkJIHZvaWQgKmluX21hZCwgdm9pZCAqcmVzcG9uc2VfbWFkKTsKK2ludCBtbHg0X2liX3Byb2Nlc3NfbWFkKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBpbnQgbWFkX2ZsYWdzLAl1OCBwb3J0X251bSwKKwkJCXN0cnVjdCBpYl93YyAqaW5fd2MsIHN0cnVjdCBpYl9ncmggKmluX2dyaCwKKwkJCXN0cnVjdCBpYl9tYWQgKmluX21hZCwgc3RydWN0IGliX21hZCAqb3V0X21hZCk7CitpbnQgbWx4NF9pYl9tYWRfaW5pdChzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldik7Cit2b2lkIG1seDRfaWJfbWFkX2NsZWFudXAoc3RydWN0IG1seDRfaWJfZGV2ICpkZXYpOworCitzdGF0aWMgaW5saW5lIGludCBtbHg0X2liX2FoX2dyaF9wcmVzZW50KHN0cnVjdCBtbHg0X2liX2FoICphaCkKK3sKKwlyZXR1cm4gISEoYWgtPmF2Lmdfc2xpZCAmIDB4ODApOworfQorCisjZW5kaWYgLyogTUxYNF9JQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWFlOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbXIuYwpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAibWx4NF9pYi5oIgorCitzdGF0aWMgdTMyIGNvbnZlcnRfYWNjZXNzKGludCBhY2MpCit7CisJcmV0dXJuIChhY2MgJiBJQl9BQ0NFU1NfUkVNT1RFX0FUT01JQyA/IE1MWDRfUEVSTV9BVE9NSUMgICAgICAgOiAwKSB8CisJICAgICAgIChhY2MgJiBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFICA/IE1MWDRfUEVSTV9SRU1PVEVfV1JJVEUgOiAwKSB8CisJICAgICAgIChhY2MgJiBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQgICA/IE1MWDRfUEVSTV9SRU1PVEVfUkVBRCAgOiAwKSB8CisJICAgICAgIChhY2MgJiBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgICA/IE1MWDRfUEVSTV9MT0NBTF9XUklURSAgOiAwKSB8CisJICAgICAgIE1MWDRfUEVSTV9MT0NBTF9SRUFEOworfQorCitzdHJ1Y3QgaWJfbXIgKm1seDRfaWJfZ2V0X2RtYV9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBpbnQgYWNjKQoreworCXN0cnVjdCBtbHg0X2liX21yICptcjsKKwlpbnQgZXJyOworCisJbXIgPSBrbWFsbG9jKHNpemVvZiAqbXIsIEdGUF9LRVJORUwpOworCWlmICghbXIpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZXJyID0gbWx4NF9tcl9hbGxvYyh0b19tZGV2KHBkLT5kZXZpY2UpLT5kZXYsIHRvX21wZChwZCktPnBkbiwgMCwKKwkJCSAgICB+MHVsbCwgY29udmVydF9hY2Nlc3MoYWNjKSwgMCwgMCwgJm1yLT5tbXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwllcnIgPSBtbHg0X21yX2VuYWJsZSh0b19tZGV2KHBkLT5kZXZpY2UpLT5kZXYsICZtci0+bW1yKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9tcjsKKworCW1yLT5pYm1yLnJrZXkgPSBtci0+aWJtci5sa2V5ID0gbXItPm1tci5rZXk7CisJbXItPnVtZW0gPSBOVUxMOworCisJcmV0dXJuICZtci0+aWJtcjsKKworZXJyX21yOgorCW1seDRfbXJfZnJlZSh0b19tZGV2KHBkLT5kZXZpY2UpLT5kZXYsICZtci0+bW1yKTsKKworZXJyX2ZyZWU6CisJa2ZyZWUobXIpOworCisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworaW50IG1seDRfaWJfdW1lbV93cml0ZV9tdHQoc3RydWN0IG1seDRfaWJfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X210dCAqbXR0LAorCQkJICAgc3RydWN0IGliX3VtZW0gKnVtZW0pCit7CisJdTY0ICpwYWdlczsKKwlzdHJ1Y3QgaWJfdW1lbV9jaHVuayAqY2h1bms7CisJaW50IGksIGosIGs7CisJaW50IG47CisJaW50IGxlbjsKKwlpbnQgZXJyID0gMDsKKworCXBhZ2VzID0gKHU2NCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpID0gbiA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmdW1lbS0+Y2h1bmtfbGlzdCwgbGlzdCkKKwkJZm9yIChqID0gMDsgaiA8IGNodW5rLT5ubWFwOyArK2opIHsKKwkJCWxlbiA9IHNnX2RtYV9sZW4oJmNodW5rLT5wYWdlX2xpc3Rbal0pID4+IG10dC0+cGFnZV9zaGlmdDsKKwkJCWZvciAoayA9IDA7IGsgPCBsZW47ICsraykgeworCQkJCXBhZ2VzW2krK10gPSBzZ19kbWFfYWRkcmVzcygmY2h1bmstPnBhZ2VfbGlzdFtqXSkgKworCQkJCQl1bWVtLT5wYWdlX3NpemUgKiBrOworCQkJCS8qCisJCQkJICogQmUgZnJpZW5kbHkgdG8gV1JJVEVfTVRUIGZpcm13YXJlCisJCQkJICogY29tbWFuZCwgYW5kIHBhc3MgaXQgY2h1bmtzIG9mCisJCQkJICogYXBwcm9wcmlhdGUgc2l6ZS4KKwkJCQkgKi8KKwkJCQlpZiAoaSA9PSBQQUdFX1NJWkUgLyBzaXplb2YgKHU2NCkgLSAyKSB7CisJCQkJCWVyciA9IG1seDRfd3JpdGVfbXR0KGRldi0+ZGV2LCBtdHQsIG4sCisJCQkJCQkJICAgICBpLCBwYWdlcyk7CisJCQkJCWlmIChlcnIpCisJCQkJCQlnb3RvIG91dDsKKwkJCQkJbiArPSBpOworCQkJCQlpID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKworCWlmIChpKQorCQllcnIgPSBtbHg0X3dyaXRlX210dChkZXYtPmRldiwgbXR0LCBuLCBpLCBwYWdlcyk7CisKK291dDoKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2VzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdHJ1Y3QgaWJfbXIgKm1seDRfaWJfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICpwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLAorCQkJCSAgdTY0IHZpcnRfYWRkciwgaW50IGFjY2Vzc19mbGFncywKKwkJCQkgIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPSB0b19tZGV2KHBkLT5kZXZpY2UpOworCXN0cnVjdCBtbHg0X2liX21yICptcjsKKwlpbnQgc2hpZnQ7CisJaW50IGVycjsKKwlpbnQgbjsKKworCW1yID0ga21hbGxvYyhzaXplb2YgKm1yLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1yKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW1yLT51bWVtID0gaWJfdW1lbV9nZXQocGQtPnVvYmplY3QtPmNvbnRleHQsIHN0YXJ0LCBsZW5ndGgsIGFjY2Vzc19mbGFncyk7CisJaWYgKElTX0VSUihtci0+dW1lbSkpIHsKKwkJZXJyID0gUFRSX0VSUihtci0+dW1lbSk7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJbiA9IGliX3VtZW1fcGFnZV9jb3VudChtci0+dW1lbSk7CisJc2hpZnQgPSBpbG9nMihtci0+dW1lbS0+cGFnZV9zaXplKTsKKworCWVyciA9IG1seDRfbXJfYWxsb2MoZGV2LT5kZXYsIHRvX21wZChwZCktPnBkbiwgdmlydF9hZGRyLCBsZW5ndGgsCisJCQkgICAgY29udmVydF9hY2Nlc3MoYWNjZXNzX2ZsYWdzKSwgbiwgc2hpZnQsICZtci0+bW1yKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl91bWVtOworCisJZXJyID0gbWx4NF9pYl91bWVtX3dyaXRlX210dChkZXYsICZtci0+bW1yLm10dCwgbXItPnVtZW0pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX21yOworCisJZXJyID0gbWx4NF9tcl9lbmFibGUoZGV2LT5kZXYsICZtci0+bW1yKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9tcjsKKworCW1yLT5pYm1yLnJrZXkgPSBtci0+aWJtci5sa2V5ID0gbXItPm1tci5rZXk7CisKKwlyZXR1cm4gJm1yLT5pYm1yOworCitlcnJfbXI6CisJbWx4NF9tcl9mcmVlKHRvX21kZXYocGQtPmRldmljZSktPmRldiwgJm1yLT5tbXIpOworCitlcnJfdW1lbToKKwlpYl91bWVtX3JlbGVhc2UobXItPnVtZW0pOworCitlcnJfZnJlZToKKwlrZnJlZShtcik7CisKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitpbnQgbWx4NF9pYl9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIpCit7CisJc3RydWN0IG1seDRfaWJfbXIgKm1yID0gdG9fbW1yKGlibXIpOworCisJbWx4NF9tcl9mcmVlKHRvX21kZXYoaWJtci0+ZGV2aWNlKS0+ZGV2LCAmbXItPm1tcik7CisJaWYgKG1yLT51bWVtKQorCQlpYl91bWVtX3JlbGVhc2UobXItPnVtZW0pOworCWtmcmVlKG1yKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxMzdkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKQEAgLTAsMCArMSwxMzg2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxyZG1hL2liX2NhY2hlLmg+CisjaW5jbHVkZSA8cmRtYS9pYl9wYWNrLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbHg0L3FwLmg+CisKKyNpbmNsdWRlICJtbHg0X2liLmgiCisjaW5jbHVkZSAidXNlci5oIgorCitlbnVtIHsKKwlNTFg0X0lCX0FDS19SRVFfRlJFUQk9IDgsCit9OworCitlbnVtIHsKKwlNTFg0X0lCX0RFRkFVTFRfU0NIRURfUVVFVUUJPSAweDgzLAorCU1MWDRfSUJfREVGQVVMVF9RUDBfU0NIRURfUVVFVUUJPSAweDNmCit9OworCitlbnVtIHsKKwkvKgorCSAqIExhcmdlc3QgcG9zc2libGUgVUQgaGVhZGVyOiBzZW5kIHdpdGggR1JIIGFuZCBpbW1lZGlhdGUgZGF0YS4KKwkgKi8KKwlNTFg0X0lCX1VEX0hFQURFUl9TSVpFCQk9IDcyCit9OworCitzdHJ1Y3QgbWx4NF9pYl9zcXAgeworCXN0cnVjdCBtbHg0X2liX3FwCXFwOworCWludAkJCXBrZXlfaW5kZXg7CisJdTMyCQkJcWtleTsKKwl1MzIJCQlzZW5kX3BzbjsKKwlzdHJ1Y3QgaWJfdWRfaGVhZGVyCXVkX2hlYWRlcjsKKwl1OAkJCWhlYWRlcl9idWZbTUxYNF9JQl9VRF9IRUFERVJfU0laRV07Cit9OworCitzdGF0aWMgY29uc3QgX19iZTMyIG1seDRfaWJfb3Bjb2RlW10gPSB7CisJW0lCX1dSX1NFTkRdCQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkQpLAorCVtJQl9XUl9TRU5EX1dJVEhfSU1NXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkRfSU1NKSwKKwlbSUJfV1JfUkRNQV9XUklURV0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFKSwKKwlbSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTV0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfV1JJVEVfSU1NKSwKKwlbSUJfV1JfUkRNQV9SRUFEXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX1JETUFfUkVBRCksCisJW0lCX1dSX0FUT01JQ19DTVBfQU5EX1NXUF0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0FUT01JQ19DUyksCisJW0lCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREXQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfQVRPTUlDX0ZBKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWx4NF9pYl9zcXAgKnRvX21zcXAoc3RydWN0IG1seDRfaWJfcXAgKm1xcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKG1xcCwgc3RydWN0IG1seDRfaWJfc3FwLCBxcCk7Cit9CisKK3N0YXRpYyBpbnQgaXNfc3FwKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pYl9xcCAqcXApCit7CisJcmV0dXJuIHFwLT5tcXAucXBuID49IGRldi0+ZGV2LT5jYXBzLnNxcF9zdGFydCAmJgorCQlxcC0+bXFwLnFwbiA8PSBkZXYtPmRldi0+Y2Fwcy5zcXBfc3RhcnQgKyAzOworfQorCitzdGF0aWMgaW50IGlzX3FwMChzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiwgc3RydWN0IG1seDRfaWJfcXAgKnFwKQoreworCXJldHVybiBxcC0+bXFwLnFwbiA+PSBkZXYtPmRldi0+Y2Fwcy5zcXBfc3RhcnQgJiYKKwkJcXAtPm1xcC5xcG4gPD0gZGV2LT5kZXYtPmNhcHMuc3FwX3N0YXJ0ICsgMTsKK30KKworc3RhdGljIHZvaWQgKmdldF93cWUoc3RydWN0IG1seDRfaWJfcXAgKnFwLCBpbnQgb2Zmc2V0KQoreworCWlmIChxcC0+YnVmLm5idWZzID09IDEpCisJCXJldHVybiBxcC0+YnVmLnUuZGlyZWN0LmJ1ZiArIG9mZnNldDsKKwllbHNlCisJCXJldHVybiBxcC0+YnVmLnUucGFnZV9saXN0W29mZnNldCA+PiBQQUdFX1NISUZUXS5idWYgKworCQkJKG9mZnNldCAmIChQQUdFX1NJWkUgLSAxKSk7Cit9CisKK3N0YXRpYyB2b2lkICpnZXRfcmVjdl93cWUoc3RydWN0IG1seDRfaWJfcXAgKnFwLCBpbnQgbikKK3sKKwlyZXR1cm4gZ2V0X3dxZShxcCwgcXAtPnJxLm9mZnNldCArIChuIDw8IHFwLT5ycS53cWVfc2hpZnQpKTsKK30KKworc3RhdGljIHZvaWQgKmdldF9zZW5kX3dxZShzdHJ1Y3QgbWx4NF9pYl9xcCAqcXAsIGludCBuKQoreworCXJldHVybiBnZXRfd3FlKHFwLCBxcC0+c3Eub2Zmc2V0ICsgKG4gPDwgcXAtPnNxLndxZV9zaGlmdCkpOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2liX3FwX2V2ZW50KHN0cnVjdCBtbHg0X3FwICpxcCwgZW51bSBtbHg0X2V2ZW50IHR5cGUpCit7CisJc3RydWN0IGliX2V2ZW50IGV2ZW50OworCXN0cnVjdCBpYl9xcCAqaWJxcCA9ICZ0b19taWJxcChxcCktPmlicXA7CisKKwlpZiAodHlwZSA9PSBNTFg0X0VWRU5UX1RZUEVfUEFUSF9NSUcpCisJCXRvX21pYnFwKHFwKS0+cG9ydCA9IHRvX21pYnFwKHFwKS0+YWx0X3BvcnQ7CisKKwlpZiAoaWJxcC0+ZXZlbnRfaGFuZGxlcikgeworCQlldmVudC5kZXZpY2UgICAgID0gaWJxcC0+ZGV2aWNlOworCQlldmVudC5lbGVtZW50LnFwID0gaWJxcDsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX1BBVEhfTUlHOgorCQkJZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9QQVRIX01JRzsKKwkJCWJyZWFrOworCQljYXNlIE1MWDRfRVZFTlRfVFlQRV9DT01NX0VTVDoKKwkJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfQ09NTV9FU1Q7CisJCQlicmVhazsKKwkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfU1FfRFJBSU5FRDoKKwkJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfU1FfRFJBSU5FRDsKKwkJCWJyZWFrOworCQljYXNlIE1MWDRfRVZFTlRfVFlQRV9TUlFfUVBfTEFTVF9XUUU6CisJCQlldmVudC5ldmVudCA9IElCX0VWRU5UX1FQX0xBU1RfV1FFX1JFQUNIRUQ7CisJCQlicmVhazsKKwkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfV1FfQ0FUQVNfRVJST1I6CisJCQlldmVudC5ldmVudCA9IElCX0VWRU5UX1FQX0ZBVEFMOworCQkJYnJlYWs7CisJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX1BBVEhfTUlHX0ZBSUxFRDoKKwkJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUEFUSF9NSUdfRVJSOworCQkJYnJlYWs7CisJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX1dRX0lOVkFMX1JFUV9FUlJPUjoKKwkJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUVBfUkVRX0VSUjsKKwkJCWJyZWFrOworCQljYXNlIE1MWDRfRVZFTlRfVFlQRV9XUV9BQ0NFU1NfRVJST1I6CisJCQlldmVudC5ldmVudCA9IElCX0VWRU5UX1FQX0FDQ0VTU19FUlI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1seDRfaWI6IFVuZXhwZWN0ZWQgZXZlbnQgdHlwZSAlZCAiCisJCQkgICAgICAgIm9uIFFQICUwNnhcbiIsIHR5cGUsIHFwLT5xcG4pOworCQkJcmV0dXJuOworCQl9CisKKwkJaWJxcC0+ZXZlbnRfaGFuZGxlcigmZXZlbnQsIGlicXAtPnFwX2NvbnRleHQpOworCX0KK30KKworc3RhdGljIGludCBzZW5kX3dxZV9vdmVyaGVhZChlbnVtIGliX3FwX3R5cGUgdHlwZSkKK3sKKwkvKgorCSAqIFVEIFdRRXMgbXVzdCBoYXZlIGEgZGF0YWdyYW0gc2VnbWVudC4KKwkgKiBSQyBhbmQgVUMgV1FFcyBtaWdodCBoYXZlIGEgcmVtb3RlIGFkZHJlc3Mgc2VnbWVudC4KKwkgKiBNTFggV1FFcyBuZWVkIHR3byBleHRyYSBpbmxpbmUgZGF0YSBzZWdtZW50cyAoZm9yIHRoZSBVRAorCSAqIGhlYWRlciBhbmQgc3BhY2UgZm9yIHRoZSBJQ1JDKS4KKwkgKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElCX1FQVF9VRDoKKwkJcmV0dXJuIHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2N0cmxfc2VnKSArCisJCQlzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhZ3JhbV9zZWcpOworCWNhc2UgSUJfUVBUX1VDOgorCQlyZXR1cm4gc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfY3RybF9zZWcpICsKKwkJCXNpemVvZiAoc3RydWN0IG1seDRfd3FlX3JhZGRyX3NlZyk7CisJY2FzZSBJQl9RUFRfUkM6CisJCXJldHVybiBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9jdHJsX3NlZykgKworCQkJc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfYXRvbWljX3NlZykgKworCQkJc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfcmFkZHJfc2VnKTsKKwljYXNlIElCX1FQVF9TTUk6CisJY2FzZSBJQl9RUFRfR1NJOgorCQlyZXR1cm4gc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfY3RybF9zZWcpICsKKwkJCUFMSUdOKE1MWDRfSUJfVURfSEVBREVSX1NJWkUgKworCQkJICAgICAgc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfaW5saW5lX3NlZyksCisJCQkgICAgICBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhX3NlZykpICsKKwkJCUFMSUdOKDQgKworCQkJICAgICAgc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfaW5saW5lX3NlZyksCisJCQkgICAgICBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhX3NlZykpOworCWRlZmF1bHQ6CisJCXJldHVybiBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9jdHJsX3NlZyk7CisJfQorfQorCitzdGF0aWMgaW50IHNldF9ycV9zaXplKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBzdHJ1Y3QgaWJfcXBfY2FwICpjYXAsCisJCSAgICAgICBzdHJ1Y3QgbWx4NF9pYl9xcCAqcXApCit7CisJLyogU2FuaXR5IGNoZWNrIFJRIHNpemUgYmVmb3JlIHByb2NlZWRpbmcgKi8KKwlpZiAoY2FwLT5tYXhfcmVjdl93ciAgPiBkZXYtPmRldi0+Y2Fwcy5tYXhfd3FlcyAgfHwKKwkgICAgY2FwLT5tYXhfcmVjdl9zZ2UgPiBkZXYtPmRldi0+Y2Fwcy5tYXhfcnFfc2cpCisJCXJldHVybiAtRUlOVkFMOworCisJcXAtPnJxLm1heCA9IGNhcC0+bWF4X3JlY3Zfd3IgPyByb3VuZHVwX3Bvd19vZl90d28oY2FwLT5tYXhfcmVjdl93cikgOiAwOworCisJcXAtPnJxLndxZV9zaGlmdCA9IGlsb2cyKHJvdW5kdXBfcG93X29mX3R3byhjYXAtPm1heF9yZWN2X3NnZSAqCisJCQkJCQkgICAgc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcpKSk7CisJcXAtPnJxLm1heF9ncyAgICA9ICgxIDw8IHFwLT5ycS53cWVfc2hpZnQpIC8gc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcpOworCisJY2FwLT5tYXhfcmVjdl93ciAgPSBxcC0+cnEubWF4OworCWNhcC0+bWF4X3JlY3Zfc2dlID0gcXAtPnJxLm1heF9nczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9rZXJuZWxfc3Ffc2l6ZShzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiwgc3RydWN0IGliX3FwX2NhcCAqY2FwLAorCQkJICAgICAgZW51bSBpYl9xcF90eXBlIHR5cGUsIHN0cnVjdCBtbHg0X2liX3FwICpxcCkKK3sKKwkvKiBTYW5pdHkgY2hlY2sgU1Egc2l6ZSBiZWZvcmUgcHJvY2VlZGluZyAqLworCWlmIChjYXAtPm1heF9zZW5kX3dyCSA+IGRldi0+ZGV2LT5jYXBzLm1heF93cWVzICB8fAorCSAgICBjYXAtPm1heF9zZW5kX3NnZQkgPiBkZXYtPmRldi0+Y2Fwcy5tYXhfc3Ffc2cgfHwKKwkgICAgY2FwLT5tYXhfaW5saW5lX2RhdGEgKyBzZW5kX3dxZV9vdmVyaGVhZCh0eXBlKSArCisJICAgIHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2lubGluZV9zZWcpID4gZGV2LT5kZXYtPmNhcHMubWF4X3NxX2Rlc2Nfc3opCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBGb3IgTUxYIHRyYW5zcG9ydCB3ZSBuZWVkIDIgZXh0cmEgUy9HIGVudHJpZXM6CisJICogb25lIGZvciB0aGUgaGVhZGVyIGFuZCBvbmUgZm9yIHRoZSBjaGVja3N1bSBhdCB0aGUgZW5kCisJICovCisJaWYgKCh0eXBlID09IElCX1FQVF9TTUkgfHwgdHlwZSA9PSBJQl9RUFRfR1NJKSAmJgorCSAgICBjYXAtPm1heF9zZW5kX3NnZSArIDIgPiBkZXYtPmRldi0+Y2Fwcy5tYXhfc3Ffc2cpCisJCXJldHVybiAtRUlOVkFMOworCisJcXAtPnNxLm1heCA9IGNhcC0+bWF4X3NlbmRfd3IgPyByb3VuZHVwX3Bvd19vZl90d28oY2FwLT5tYXhfc2VuZF93cikgOiAxOworCisJcXAtPnNxLndxZV9zaGlmdCA9IGlsb2cyKHJvdW5kdXBfcG93X29mX3R3byhtYXgoY2FwLT5tYXhfc2VuZF9zZ2UgKgorCQkJCQkJCXNpemVvZiAoc3RydWN0IG1seDRfd3FlX2RhdGFfc2VnKSwKKwkJCQkJCQljYXAtPm1heF9pbmxpbmVfZGF0YSArCisJCQkJCQkJc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfaW5saW5lX3NlZykpICsKKwkJCQkJCSAgICBzZW5kX3dxZV9vdmVyaGVhZCh0eXBlKSkpOworCXFwLT5zcS5tYXhfZ3MgICAgPSAoKDEgPDwgcXAtPnNxLndxZV9zaGlmdCkgLSBzZW5kX3dxZV9vdmVyaGVhZCh0eXBlKSkgLworCQlzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhX3NlZyk7CisKKwlxcC0+YnVmX3NpemUgPSAocXAtPnJxLm1heCA8PCBxcC0+cnEud3FlX3NoaWZ0KSArCisJCShxcC0+c3EubWF4IDw8IHFwLT5zcS53cWVfc2hpZnQpOworCWlmIChxcC0+cnEud3FlX3NoaWZ0ID4gcXAtPnNxLndxZV9zaGlmdCkgeworCQlxcC0+cnEub2Zmc2V0ID0gMDsKKwkJcXAtPnNxLm9mZnNldCA9IHFwLT5ycS5tYXggPDwgcXAtPnJxLndxZV9zaGlmdDsKKwl9IGVsc2UgeworCQlxcC0+cnEub2Zmc2V0ID0gcXAtPnNxLm1heCA8PCBxcC0+c3Eud3FlX3NoaWZ0OworCQlxcC0+c3Eub2Zmc2V0ID0gMDsKKwl9CisKKwljYXAtPm1heF9zZW5kX3dyICAgICA9IHFwLT5zcS5tYXg7CisJY2FwLT5tYXhfc2VuZF9zZ2UgICAgPSBxcC0+c3EubWF4X2dzOworCWNhcC0+bWF4X2lubGluZV9kYXRhID0gKDEgPDwgcXAtPnNxLndxZV9zaGlmdCkgLSBzZW5kX3dxZV9vdmVyaGVhZCh0eXBlKSAtCisJCXNpemVvZiAoc3RydWN0IG1seDRfd3FlX2lubGluZV9zZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3VzZXJfc3Ffc2l6ZShzdHJ1Y3QgbWx4NF9pYl9xcCAqcXAsCisJCQkgICAgc3RydWN0IG1seDRfaWJfY3JlYXRlX3FwICp1Y21kKQoreworCXFwLT5zcS5tYXggICAgICAgPSAxIDw8IHVjbWQtPmxvZ19zcV9iYl9jb3VudDsKKwlxcC0+c3Eud3FlX3NoaWZ0ID0gdWNtZC0+bG9nX3NxX3N0cmlkZTsKKworCXFwLT5idWZfc2l6ZSA9IChxcC0+cnEubWF4IDw8IHFwLT5ycS53cWVfc2hpZnQpICsKKwkJKHFwLT5zcS5tYXggPDwgcXAtPnNxLndxZV9zaGlmdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcmVhdGVfcXBfY29tbW9uKHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBzdHJ1Y3QgaWJfcGQgKnBkLAorCQkJICAgIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKmluaXRfYXR0ciwKKwkJCSAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhLCBpbnQgc3Fwbiwgc3RydWN0IG1seDRfaWJfcXAgKnFwKQoreworCWludCBlcnI7CisKKwltdXRleF9pbml0KCZxcC0+bXV0ZXgpOworCXNwaW5fbG9ja19pbml0KCZxcC0+c3EubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnFwLT5ycS5sb2NrKTsKKworCXFwLT5zdGF0ZQkgPSBJQl9RUFNfUkVTRVQ7CisJcXAtPmF0b21pY19yZF9lbiA9IDA7CisJcXAtPnJlc3BfZGVwdGggICA9IDA7CisKKwlxcC0+cnEuaGVhZAkgICAgPSAwOworCXFwLT5ycS50YWlsCSAgICA9IDA7CisJcXAtPnNxLmhlYWQJICAgID0gMDsKKwlxcC0+c3EudGFpbAkgICAgPSAwOworCisJZXJyID0gc2V0X3JxX3NpemUoZGV2LCAmaW5pdF9hdHRyLT5jYXAsIHFwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKworCWlmIChwZC0+dW9iamVjdCkgeworCQlzdHJ1Y3QgbWx4NF9pYl9jcmVhdGVfcXAgdWNtZDsKKworCQlpZiAoaWJfY29weV9mcm9tX3VkYXRhKCZ1Y21kLCB1ZGF0YSwgc2l6ZW9mIHVjbWQpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBlcnI7CisJCX0KKworCQllcnIgPSBzZXRfdXNlcl9zcV9zaXplKHFwLCAmdWNtZCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycjsKKworCQlxcC0+dW1lbSA9IGliX3VtZW1fZ2V0KHBkLT51b2JqZWN0LT5jb250ZXh0LCB1Y21kLmJ1Zl9hZGRyLAorCQkJCSAgICAgICBxcC0+YnVmX3NpemUsIDApOworCQlpZiAoSVNfRVJSKHFwLT51bWVtKSkgeworCQkJZXJyID0gUFRSX0VSUihxcC0+dW1lbSk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWVyciA9IG1seDRfbXR0X2luaXQoZGV2LT5kZXYsIGliX3VtZW1fcGFnZV9jb3VudChxcC0+dW1lbSksCisJCQkJICAgIGlsb2cyKHFwLT51bWVtLT5wYWdlX3NpemUpLCAmcXAtPm10dCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9idWY7CisKKwkJZXJyID0gbWx4NF9pYl91bWVtX3dyaXRlX210dChkZXYsICZxcC0+bXR0LCBxcC0+dW1lbSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9tdHQ7CisKKwkJaWYgKCFpbml0X2F0dHItPnNycSkgeworCQkJZXJyID0gbWx4NF9pYl9kYl9tYXBfdXNlcih0b19tdWNvbnRleHQocGQtPnVvYmplY3QtPmNvbnRleHQpLAorCQkJCQkJICB1Y21kLmRiX2FkZHIsICZxcC0+ZGIpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycl9tdHQ7CisJCX0KKwl9IGVsc2UgeworCQllcnIgPSBzZXRfa2VybmVsX3NxX3NpemUoZGV2LCAmaW5pdF9hdHRyLT5jYXAsIGluaXRfYXR0ci0+cXBfdHlwZSwgcXApOworCQlpZiAoZXJyKQorCQkJZ290byBlcnI7CisKKwkJaWYgKCFpbml0X2F0dHItPnNycSkgeworCQkJZXJyID0gbWx4NF9pYl9kYl9hbGxvYyhkZXYsICZxcC0+ZGIsIDApOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycjsKKworCQkJKnFwLT5kYi5kYiA9IDA7CisJCX0KKworCQlpZiAobWx4NF9idWZfYWxsb2MoZGV2LT5kZXYsIHFwLT5idWZfc2l6ZSwgUEFHRV9TSVpFICogMiwgJnFwLT5idWYpKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfZGI7CisJCX0KKworCQllcnIgPSBtbHg0X210dF9pbml0KGRldi0+ZGV2LCBxcC0+YnVmLm5wYWdlcywgcXAtPmJ1Zi5wYWdlX3NoaWZ0LAorCQkJCSAgICAmcXAtPm10dCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9idWY7CisKKwkJZXJyID0gbWx4NF9idWZfd3JpdGVfbXR0KGRldi0+ZGV2LCAmcXAtPm10dCwgJnFwLT5idWYpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfbXR0OworCisJCXFwLT5zcS53cmlkICA9IGttYWxsb2MocXAtPnNxLm1heCAqIHNpemVvZiAodTY0KSwgR0ZQX0tFUk5FTCk7CisJCXFwLT5ycS53cmlkICA9IGttYWxsb2MocXAtPnJxLm1heCAqIHNpemVvZiAodTY0KSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFxcC0+c3Eud3JpZCB8fCAhcXAtPnJxLndyaWQpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl93cmlkOworCQl9CisKKwkJLyogV2UgZG9uJ3Qgc3VwcG9ydCBpbmxpbmUgc2VuZHMgZm9yIGtlcm5lbCBRUHMgKHlldCkgKi8KKwkJaW5pdF9hdHRyLT5jYXAubWF4X2lubGluZV9kYXRhID0gMDsKKwl9CisKKwllcnIgPSBtbHg0X3FwX2FsbG9jKGRldi0+ZGV2LCBzcXBuLCAmcXAtPm1xcCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfd3JpZDsKKworCS8qCisJICogSGFyZHdhcmUgd2FudHMgUVBOIHdyaXR0ZW4gaW4gYmlnLWVuZGlhbiBvcmRlciAoYWZ0ZXIKKwkgKiBzaGlmdGluZykgZm9yIHNlbmQgZG9vcmJlbGwuICBQcmVjb21wdXRlIHRoaXMgdmFsdWUgdG8gc2F2ZQorCSAqIGEgbGl0dGxlIGJpdCB3aGVuIHBvc3Rpbmcgc2VuZHMuCisJICovCisJcXAtPmRvb3JiZWxsX3FwbiA9IHN3YWIzMihxcC0+bXFwLnFwbiA8PCA4KTsKKworCWlmIChpbml0X2F0dHItPnNxX3NpZ190eXBlID09IElCX1NJR05BTF9BTExfV1IpCisJCXFwLT5zcV9zaWduYWxfYml0cyA9IGNwdV90b19iZTMyKE1MWDRfV1FFX0NUUkxfQ1FfVVBEQVRFKTsKKwllbHNlCisJCXFwLT5zcV9zaWduYWxfYml0cyA9IDA7CisKKwlxcC0+bXFwLmV2ZW50ID0gbWx4NF9pYl9xcF9ldmVudDsKKworCXJldHVybiAwOworCitlcnJfd3JpZDoKKwlpZiAocGQtPnVvYmplY3QgJiYgIWluaXRfYXR0ci0+c3JxKQorCQltbHg0X2liX2RiX3VubWFwX3VzZXIodG9fbXVjb250ZXh0KHBkLT51b2JqZWN0LT5jb250ZXh0KSwgJnFwLT5kYik7CisJZWxzZSB7CisJCWtmcmVlKHFwLT5zcS53cmlkKTsKKwkJa2ZyZWUocXAtPnJxLndyaWQpOworCX0KKworZXJyX210dDoKKwltbHg0X210dF9jbGVhbnVwKGRldi0+ZGV2LCAmcXAtPm10dCk7CisKK2Vycl9idWY6CisJaWYgKHBkLT51b2JqZWN0KQorCQlpYl91bWVtX3JlbGVhc2UocXAtPnVtZW0pOworCWVsc2UKKwkJbWx4NF9idWZfZnJlZShkZXYtPmRldiwgcXAtPmJ1Zl9zaXplLCAmcXAtPmJ1Zik7CisKK2Vycl9kYjoKKwlpZiAoIXBkLT51b2JqZWN0ICYmICFpbml0X2F0dHItPnNycSkKKwkJbWx4NF9pYl9kYl9mcmVlKGRldiwgJnFwLT5kYik7CisKK2VycjoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgZW51bSBtbHg0X3FwX3N0YXRlIHRvX21seDRfc3RhdGUoZW51bSBpYl9xcF9zdGF0ZSBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBJQl9RUFNfUkVTRVQ6CXJldHVybiBNTFg0X1FQX1NUQVRFX1JTVDsKKwljYXNlIElCX1FQU19JTklUOglyZXR1cm4gTUxYNF9RUF9TVEFURV9JTklUOworCWNhc2UgSUJfUVBTX1JUUjoJcmV0dXJuIE1MWDRfUVBfU1RBVEVfUlRSOworCWNhc2UgSUJfUVBTX1JUUzoJcmV0dXJuIE1MWDRfUVBfU1RBVEVfUlRTOworCWNhc2UgSUJfUVBTX1NRRDoJcmV0dXJuIE1MWDRfUVBfU1RBVEVfU1FEOworCWNhc2UgSUJfUVBTX1NRRToJcmV0dXJuIE1MWDRfUVBfU1RBVEVfU1FFUjsKKwljYXNlIElCX1FQU19FUlI6CXJldHVybiBNTFg0X1FQX1NUQVRFX0VSUjsKKwlkZWZhdWx0OgkJcmV0dXJuIC0xOworCX0KK30KKworc3RhdGljIHZvaWQgbWx4NF9pYl9sb2NrX2NxcyhzdHJ1Y3QgbWx4NF9pYl9jcSAqc2VuZF9jcSwgc3RydWN0IG1seDRfaWJfY3EgKnJlY3ZfY3EpCit7CisJaWYgKHNlbmRfY3EgPT0gcmVjdl9jcSkKKwkJc3Bpbl9sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7CisJZWxzZSBpZiAoc2VuZF9jcS0+bWNxLmNxbiA8IHJlY3ZfY3EtPm1jcS5jcW4pIHsKKwkJc3Bpbl9sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7CisJCXNwaW5fbG9ja19uZXN0ZWQoJnJlY3ZfY3EtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfaXJxKCZyZWN2X2NxLT5sb2NrKTsKKwkJc3Bpbl9sb2NrX25lc3RlZCgmc2VuZF9jcS0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCX0KK30KKworc3RhdGljIHZvaWQgbWx4NF9pYl91bmxvY2tfY3FzKHN0cnVjdCBtbHg0X2liX2NxICpzZW5kX2NxLCBzdHJ1Y3QgbWx4NF9pYl9jcSAqcmVjdl9jcSkKK3sKKwlpZiAoc2VuZF9jcSA9PSByZWN2X2NxKQorCQlzcGluX3VubG9ja19pcnEoJnNlbmRfY3EtPmxvY2spOworCWVsc2UgaWYgKHNlbmRfY3EtPm1jcS5jcW4gPCByZWN2X2NxLT5tY3EuY3FuKSB7CisJCXNwaW5fdW5sb2NrKCZyZWN2X2NxLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZzZW5kX2NxLT5sb2NrKTsKKwl9IGVsc2UgeworCQlzcGluX3VubG9jaygmc2VuZF9jcS0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmcmVjdl9jcS0+bG9jayk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X3FwX2NvbW1vbihzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiwgc3RydWN0IG1seDRfaWJfcXAgKnFwLAorCQkJICAgICAgaW50IGlzX3VzZXIpCit7CisJc3RydWN0IG1seDRfaWJfY3EgKnNlbmRfY3EsICpyZWN2X2NxOworCisJaWYgKHFwLT5zdGF0ZSAhPSBJQl9RUFNfUkVTRVQpCisJCWlmIChtbHg0X3FwX21vZGlmeShkZXYtPmRldiwgTlVMTCwgdG9fbWx4NF9zdGF0ZShxcC0+c3RhdGUpLAorCQkJCSAgIE1MWDRfUVBfU1RBVEVfUlNULCBOVUxMLCAwLCAwLCAmcXAtPm1xcCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtbHg0X2liOiBtb2RpZnkgUVAgJTA2eCB0byBSRVNFVCBmYWlsZWQuXG4iLAorCQkJICAgICAgIHFwLT5tcXAucXBuKTsKKworCXNlbmRfY3EgPSB0b19tY3EocXAtPmlicXAuc2VuZF9jcSk7CisJcmVjdl9jcSA9IHRvX21jcShxcC0+aWJxcC5yZWN2X2NxKTsKKworCW1seDRfaWJfbG9ja19jcXMoc2VuZF9jcSwgcmVjdl9jcSk7CisKKwlpZiAoIWlzX3VzZXIpIHsKKwkJX19tbHg0X2liX2NxX2NsZWFuKHJlY3ZfY3EsIHFwLT5tcXAucXBuLAorCQkJCSBxcC0+aWJxcC5zcnEgPyB0b19tc3JxKHFwLT5pYnFwLnNycSk6IE5VTEwpOworCQlpZiAoc2VuZF9jcSAhPSByZWN2X2NxKQorCQkJX19tbHg0X2liX2NxX2NsZWFuKHNlbmRfY3EsIHFwLT5tcXAucXBuLCBOVUxMKTsKKwl9CisKKwltbHg0X3FwX3JlbW92ZShkZXYtPmRldiwgJnFwLT5tcXApOworCisJbWx4NF9pYl91bmxvY2tfY3FzKHNlbmRfY3EsIHJlY3ZfY3EpOworCisJbWx4NF9xcF9mcmVlKGRldi0+ZGV2LCAmcXAtPm1xcCk7CisJbWx4NF9tdHRfY2xlYW51cChkZXYtPmRldiwgJnFwLT5tdHQpOworCisJaWYgKGlzX3VzZXIpIHsKKwkJaWYgKCFxcC0+aWJxcC5zcnEpCisJCQltbHg0X2liX2RiX3VubWFwX3VzZXIodG9fbXVjb250ZXh0KHFwLT5pYnFwLnVvYmplY3QtPmNvbnRleHQpLAorCQkJCQkgICAgICAmcXAtPmRiKTsKKwkJaWJfdW1lbV9yZWxlYXNlKHFwLT51bWVtKTsKKwl9IGVsc2UgeworCQlrZnJlZShxcC0+c3Eud3JpZCk7CisJCWtmcmVlKHFwLT5ycS53cmlkKTsKKwkJbWx4NF9idWZfZnJlZShkZXYtPmRldiwgcXAtPmJ1Zl9zaXplLCAmcXAtPmJ1Zik7CisJCWlmICghcXAtPmlicXAuc3JxKQorCQkJbWx4NF9pYl9kYl9mcmVlKGRldiwgJnFwLT5kYik7CisJfQorfQorCitzdHJ1Y3QgaWJfcXAgKm1seDRfaWJfY3JlYXRlX3FwKHN0cnVjdCBpYl9wZCAqcGQsCisJCQkJc3RydWN0IGliX3FwX2luaXRfYXR0ciAqaW5pdF9hdHRyLAorCQkJCXN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPSB0b19tZGV2KHBkLT5kZXZpY2UpOworCXN0cnVjdCBtbHg0X2liX3NxcCAqc3FwOworCXN0cnVjdCBtbHg0X2liX3FwICpxcDsKKwlpbnQgZXJyOworCisJc3dpdGNoIChpbml0X2F0dHItPnFwX3R5cGUpIHsKKwljYXNlIElCX1FQVF9SQzoKKwljYXNlIElCX1FQVF9VQzoKKwljYXNlIElCX1FQVF9VRDoKKwl7CisJCXFwID0ga21hbGxvYyhzaXplb2YgKnFwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFxcCkKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJCWVyciA9IGNyZWF0ZV9xcF9jb21tb24oZGV2LCBwZCwgaW5pdF9hdHRyLCB1ZGF0YSwgMCwgcXApOworCQlpZiAoZXJyKSB7CisJCQlrZnJlZShxcCk7CisJCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCQl9CisKKwkJcXAtPmlicXAucXBfbnVtID0gcXAtPm1xcC5xcG47CisKKwkJYnJlYWs7CisJfQorCWNhc2UgSUJfUVBUX1NNSToKKwljYXNlIElCX1FQVF9HU0k6CisJeworCQkvKiBVc2Vyc3BhY2UgaXMgbm90IGFsbG93ZWQgdG8gY3JlYXRlIHNwZWNpYWwgUVBzOiAqLworCQlpZiAocGQtPnVvYmplY3QpCisJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCQlzcXAgPSBrbWFsbG9jKHNpemVvZiAqc3FwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzcXApCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCQlxcCA9ICZzcXAtPnFwOworCisJCWVyciA9IGNyZWF0ZV9xcF9jb21tb24oZGV2LCBwZCwgaW5pdF9hdHRyLCB1ZGF0YSwKKwkJCQkgICAgICAgZGV2LT5kZXYtPmNhcHMuc3FwX3N0YXJ0ICsKKwkJCQkgICAgICAgKGluaXRfYXR0ci0+cXBfdHlwZSA9PSBJQl9RUFRfU01JID8gMCA6IDIpICsKKwkJCQkgICAgICAgaW5pdF9hdHRyLT5wb3J0X251bSAtIDEsCisJCQkJICAgICAgIHFwKTsKKwkJaWYgKGVycikgeworCQkJa2ZyZWUoc3FwKTsKKwkJCXJldHVybiBFUlJfUFRSKGVycik7CisJCX0KKworCQlxcC0+cG9ydAk9IGluaXRfYXR0ci0+cG9ydF9udW07CisJCXFwLT5pYnFwLnFwX251bSA9IGluaXRfYXR0ci0+cXBfdHlwZSA9PSBJQl9RUFRfU01JID8gMCA6IDE7CisKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCS8qIERvbid0IHN1cHBvcnQgcmF3IFFQcyAqLworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlyZXR1cm4gJnFwLT5pYnFwOworfQorCitpbnQgbWx4NF9pYl9kZXN0cm95X3FwKHN0cnVjdCBpYl9xcCAqcXApCit7CisJc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPSB0b19tZGV2KHFwLT5kZXZpY2UpOworCXN0cnVjdCBtbHg0X2liX3FwICptcXAgPSB0b19tcXAocXApOworCisJaWYgKGlzX3FwMChkZXYsIG1xcCkpCisJCW1seDRfQ0xPU0VfUE9SVChkZXYtPmRldiwgbXFwLT5wb3J0KTsKKworCWRlc3Ryb3lfcXBfY29tbW9uKGRldiwgbXFwLCAhIXFwLT5wZC0+dW9iamVjdCk7CisKKwlpZiAoaXNfc3FwKGRldiwgbXFwKSkKKwkJa2ZyZWUodG9fbXNxcChtcXApKTsKKwllbHNlCisJCWtmcmVlKG1xcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW5pdF9wb3J0KHN0cnVjdCBtbHg0X2liX2RldiAqZGV2LCBpbnQgcG9ydCkKK3sKKwlzdHJ1Y3QgbWx4NF9pbml0X3BvcnRfcGFyYW0gcGFyYW07CisJaW50IGVycjsKKworCW1lbXNldCgmcGFyYW0sIDAsIHNpemVvZiBwYXJhbSk7CisKKwlwYXJhbS5wb3J0X3dpZHRoX2NhcCA9IGRldi0+ZGV2LT5jYXBzLnBvcnRfd2lkdGhfY2FwOworCXBhcmFtLnZsX2NhcAkgICAgID0gZGV2LT5kZXYtPmNhcHMudmxfY2FwOworCXBhcmFtLm10dQkgICAgID0gaWJfbXR1X2VudW1fdG9faW50KGRldi0+ZGV2LT5jYXBzLm10dV9jYXApOworCXBhcmFtLm1heF9naWQJICAgICA9IGRldi0+ZGV2LT5jYXBzLmdpZF90YWJsZV9sZW47CisJcGFyYW0ubWF4X3BrZXkJICAgICA9IGRldi0+ZGV2LT5jYXBzLnBrZXlfdGFibGVfbGVuOworCisJZXJyID0gbWx4NF9JTklUX1BPUlQoZGV2LT5kZXYsICZwYXJhbSwgcG9ydCk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU5JVF9QT1JUIGZhaWxlZCwgcmV0dXJuIGNvZGUgJWQuXG4iLCBlcnIpOworfQorCitzdGF0aWMgaW50IHRvX21seDRfc3QoZW51bSBpYl9xcF90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBJQl9RUFRfUkM6CQlyZXR1cm4gTUxYNF9RUF9TVF9SQzsKKwljYXNlIElCX1FQVF9VQzoJCXJldHVybiBNTFg0X1FQX1NUX1VDOworCWNhc2UgSUJfUVBUX1VEOgkJcmV0dXJuIE1MWDRfUVBfU1RfVUQ7CisJY2FzZSBJQl9RUFRfU01JOgorCWNhc2UgSUJfUVBUX0dTSToJcmV0dXJuIE1MWDRfUVBfU1RfTUxYOworCWRlZmF1bHQ6CQlyZXR1cm4gLTE7CisJfQorfQorCitzdGF0aWMgX19iZTMyIHRvX21seDRfYWNjZXNzX2ZsYWdzKHN0cnVjdCBtbHg0X2liX3FwICpxcCwgY29uc3Qgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsCisJCQkJICAgaW50IGF0dHJfbWFzaykKK3sKKwl1OCBkZXN0X3JkX2F0b21pYzsKKwl1MzIgYWNjZXNzX2ZsYWdzOworCXUzMiBod19hY2Nlc3NfZmxhZ3MgPSAwOworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX01BWF9ERVNUX1JEX0FUT01JQykKKwkJZGVzdF9yZF9hdG9taWMgPSBhdHRyLT5tYXhfZGVzdF9yZF9hdG9taWM7CisJZWxzZQorCQlkZXN0X3JkX2F0b21pYyA9IHFwLT5yZXNwX2RlcHRoOworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX0FDQ0VTU19GTEFHUykKKwkJYWNjZXNzX2ZsYWdzID0gYXR0ci0+cXBfYWNjZXNzX2ZsYWdzOworCWVsc2UKKwkJYWNjZXNzX2ZsYWdzID0gcXAtPmF0b21pY19yZF9lbjsKKworCWlmICghZGVzdF9yZF9hdG9taWMpCisJCWFjY2Vzc19mbGFncyAmPSBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOworCisJaWYgKGFjY2Vzc19mbGFncyAmIElCX0FDQ0VTU19SRU1PVEVfUkVBRCkKKwkJaHdfYWNjZXNzX2ZsYWdzIHw9IE1MWDRfUVBfQklUX1JSRTsKKwlpZiAoYWNjZXNzX2ZsYWdzICYgSUJfQUNDRVNTX1JFTU9URV9BVE9NSUMpCisJCWh3X2FjY2Vzc19mbGFncyB8PSBNTFg0X1FQX0JJVF9SQUU7CisJaWYgKGFjY2Vzc19mbGFncyAmIElCX0FDQ0VTU19SRU1PVEVfV1JJVEUpCisJCWh3X2FjY2Vzc19mbGFncyB8PSBNTFg0X1FQX0JJVF9SV0U7CisKKwlyZXR1cm4gY3B1X3RvX2JlMzIoaHdfYWNjZXNzX2ZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc3RvcmVfc3FwX2F0dHJzKHN0cnVjdCBtbHg0X2liX3NxcCAqc3FwLCBjb25zdCBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0ciwKKwkJCSAgICBpbnQgYXR0cl9tYXNrKQoreworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QS0VZX0lOREVYKQorCQlzcXAtPnBrZXlfaW5kZXggPSBhdHRyLT5wa2V5X2luZGV4OworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9RS0VZKQorCQlzcXAtPnFrZXkgPSBhdHRyLT5xa2V5OworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9TUV9QU04pCisJCXNxcC0+c2VuZF9wc24gPSBhdHRyLT5zcV9wc247Cit9CisKK3N0YXRpYyB2b2lkIG1seDRfc2V0X3NjaGVkKHN0cnVjdCBtbHg0X3FwX3BhdGggKnBhdGgsIHU4IHBvcnQpCit7CisJcGF0aC0+c2NoZWRfcXVldWUgPSAocGF0aC0+c2NoZWRfcXVldWUgJiAweGJmKSB8ICgocG9ydCAtIDEpIDw8IDYpOworfQorCitzdGF0aWMgaW50IG1seDRfc2V0X3BhdGgoc3RydWN0IG1seDRfaWJfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBpYl9haF9hdHRyICphaCwKKwkJCSBzdHJ1Y3QgbWx4NF9xcF9wYXRoICpwYXRoLCB1OCBwb3J0KQoreworCXBhdGgtPmdyaF9teWxtYyAgICAgPSBhaC0+c3JjX3BhdGhfYml0cyAmIDB4N2Y7CisJcGF0aC0+cmxpZAkgICAgPSBjcHVfdG9fYmUxNihhaC0+ZGxpZCk7CisJaWYgKGFoLT5zdGF0aWNfcmF0ZSkgeworCQlwYXRoLT5zdGF0aWNfcmF0ZSA9IGFoLT5zdGF0aWNfcmF0ZSArIE1MWDRfU1RBVF9SQVRFX09GRlNFVDsKKwkJd2hpbGUgKHBhdGgtPnN0YXRpY19yYXRlID4gSUJfUkFURV8yXzVfR0JQUyArIE1MWDRfU1RBVF9SQVRFX09GRlNFVCAmJgorCQkgICAgICAgISgxIDw8IHBhdGgtPnN0YXRpY19yYXRlICYgZGV2LT5kZXYtPmNhcHMuc3RhdF9yYXRlX3N1cHBvcnQpKQorCQkJLS1wYXRoLT5zdGF0aWNfcmF0ZTsKKwl9IGVsc2UKKwkJcGF0aC0+c3RhdGljX3JhdGUgPSAwOworCXBhdGgtPmNvdW50ZXJfaW5kZXggPSAweGZmOworCisJaWYgKGFoLT5haF9mbGFncyAmIElCX0FIX0dSSCkgeworCQlpZiAoYWgtPmdyaC5zZ2lkX2luZGV4ID49IGRldi0+ZGV2LT5jYXBzLmdpZF90YWJsZV9sZW4pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic2dpZF9pbmRleCAoJXUpIHRvbyBsYXJnZS4gbWF4IGlzICVkXG4iLAorCQkJICAgICAgIGFoLT5ncmguc2dpZF9pbmRleCwgZGV2LT5kZXYtPmNhcHMuZ2lkX3RhYmxlX2xlbiAtIDEpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJcGF0aC0+Z3JoX215bG1jIHw9IDEgPDwgNzsKKwkJcGF0aC0+bWdpZF9pbmRleCA9IGFoLT5ncmguc2dpZF9pbmRleDsKKwkJcGF0aC0+aG9wX2xpbWl0ICA9IGFoLT5ncmguaG9wX2xpbWl0OworCQlwYXRoLT50Y2xhc3NfZmxvd2xhYmVsID0KKwkJCWNwdV90b19iZTMyKChhaC0+Z3JoLnRyYWZmaWNfY2xhc3MgPDwgMjApIHwKKwkJCQkgICAgKGFoLT5ncmguZmxvd19sYWJlbCkpOworCQltZW1jcHkocGF0aC0+cmdpZCwgYWgtPmdyaC5kZ2lkLnJhdywgMTYpOworCX0KKworCXBhdGgtPnNjaGVkX3F1ZXVlID0gTUxYNF9JQl9ERUZBVUxUX1NDSEVEX1FVRVVFIHwKKwkJKChwb3J0IC0gMSkgPDwgNikgfCAoKGFoLT5zbCAmIDB4ZikgPDwgMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX21seDRfaWJfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0ciwgaW50IGF0dHJfbWFzaywKKwkJCSAgICAgICBlbnVtIGliX3FwX3N0YXRlIGN1cl9zdGF0ZSwgZW51bSBpYl9xcF9zdGF0ZSBuZXdfc3RhdGUpCit7CisJc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPSB0b19tZGV2KGlicXAtPmRldmljZSk7CisJc3RydWN0IG1seDRfaWJfcXAgKnFwID0gdG9fbXFwKGlicXApOworCXN0cnVjdCBtbHg0X3FwX2NvbnRleHQgKmNvbnRleHQ7CisJZW51bSBtbHg0X3FwX29wdHBhciBvcHRwYXIgPSAwOworCWludCBzcWRfZXZlbnQ7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwljb250ZXh0ID0ga3phbGxvYyhzaXplb2YgKmNvbnRleHQsIEdGUF9LRVJORUwpOworCWlmICghY29udGV4dCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb250ZXh0LT5mbGFncyA9IGNwdV90b19iZTMyKCh0b19tbHg0X3N0YXRlKG5ld19zdGF0ZSkgPDwgMjgpIHwKKwkJCQkgICAgICh0b19tbHg0X3N0KGlicXAtPnFwX3R5cGUpIDw8IDE2KSk7CisJY29udGV4dC0+ZmxhZ3MgICAgIHw9IGNwdV90b19iZTMyKDEgPDwgOCk7IC8qIERFPyAqLworCisJaWYgKCEoYXR0cl9tYXNrICYgSUJfUVBfUEFUSF9NSUdfU1RBVEUpKQorCQljb250ZXh0LT5mbGFncyB8PSBjcHVfdG9fYmUzMihNTFg0X1FQX1BNX01JR1JBVEVEIDw8IDExKTsKKwllbHNlIHsKKwkJb3B0cGFyIHw9IE1MWDRfUVBfT1BUUEFSX1BNX1NUQVRFOworCQlzd2l0Y2ggKGF0dHItPnBhdGhfbWlnX3N0YXRlKSB7CisJCWNhc2UgSUJfTUlHX01JR1JBVEVEOgorCQkJY29udGV4dC0+ZmxhZ3MgfD0gY3B1X3RvX2JlMzIoTUxYNF9RUF9QTV9NSUdSQVRFRCA8PCAxMSk7CisJCQlicmVhazsKKwkJY2FzZSBJQl9NSUdfUkVBUk06CisJCQljb250ZXh0LT5mbGFncyB8PSBjcHVfdG9fYmUzMihNTFg0X1FQX1BNX1JFQVJNIDw8IDExKTsKKwkJCWJyZWFrOworCQljYXNlIElCX01JR19BUk1FRDoKKwkJCWNvbnRleHQtPmZsYWdzIHw9IGNwdV90b19iZTMyKE1MWDRfUVBfUE1fQVJNRUQgPDwgMTEpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaWJxcC0+cXBfdHlwZSA9PSBJQl9RUFRfR1NJIHx8IGlicXAtPnFwX3R5cGUgPT0gSUJfUVBUX1NNSSB8fAorCSAgICBpYnFwLT5xcF90eXBlID09IElCX1FQVF9VRCkKKwkJY29udGV4dC0+bXR1X21zZ21heCA9IChJQl9NVFVfNDA5NiA8PCA1KSB8IDExOworCWVsc2UgaWYgKGF0dHJfbWFzayAmIElCX1FQX1BBVEhfTVRVKSB7CisJCWlmIChhdHRyLT5wYXRoX210dSA8IElCX01UVV8yNTYgfHwgYXR0ci0+cGF0aF9tdHUgPiBJQl9NVFVfNDA5NikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJwYXRoIE1UVSAoJXUpIGlzIGludmFsaWRcbiIsCisJCQkgICAgICAgYXR0ci0+cGF0aF9tdHUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY29udGV4dC0+bXR1X21zZ21heCA9IChhdHRyLT5wYXRoX210dSA8PCA1KSB8IDMxOworCX0KKworCWlmIChxcC0+cnEubWF4KQorCQljb250ZXh0LT5ycV9zaXplX3N0cmlkZSA9IGlsb2cyKHFwLT5ycS5tYXgpIDw8IDM7CisJY29udGV4dC0+cnFfc2l6ZV9zdHJpZGUgfD0gcXAtPnJxLndxZV9zaGlmdCAtIDQ7CisKKwlpZiAocXAtPnNxLm1heCkKKwkJY29udGV4dC0+c3Ffc2l6ZV9zdHJpZGUgPSBpbG9nMihxcC0+c3EubWF4KSA8PCAzOworCWNvbnRleHQtPnNxX3NpemVfc3RyaWRlIHw9IHFwLT5zcS53cWVfc2hpZnQgLSA0OworCisJaWYgKHFwLT5pYnFwLnVvYmplY3QpCisJCWNvbnRleHQtPnVzcl9wYWdlID0gY3B1X3RvX2JlMzIodG9fbXVjb250ZXh0KGlicXAtPnVvYmplY3QtPmNvbnRleHQpLT51YXIuaW5kZXgpOworCWVsc2UKKwkJY29udGV4dC0+dXNyX3BhZ2UgPSBjcHVfdG9fYmUzMihkZXYtPnByaXZfdWFyLmluZGV4KTsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9ERVNUX1FQTikKKwkJY29udGV4dC0+cmVtb3RlX3FwbiA9IGNwdV90b19iZTMyKGF0dHItPmRlc3RfcXBfbnVtKTsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QT1JUKSB7CisJCWlmIChjdXJfc3RhdGUgPT0gSUJfUVBTX1NRRCAmJiBuZXdfc3RhdGUgPT0gSUJfUVBTX1NRRCAmJgorCQkgICAgIShhdHRyX21hc2sgJiBJQl9RUF9BVikpIHsKKwkJCW1seDRfc2V0X3NjaGVkKCZjb250ZXh0LT5wcmlfcGF0aCwgYXR0ci0+cG9ydF9udW0pOworCQkJb3B0cGFyIHw9IE1MWDRfUVBfT1BUUEFSX1NDSEVEX1FVRVVFOworCQl9CisJfQorCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1BLRVlfSU5ERVgpIHsKKwkJY29udGV4dC0+cHJpX3BhdGgucGtleV9pbmRleCA9IGF0dHItPnBrZXlfaW5kZXg7CisJCW9wdHBhciB8PSBNTFg0X1FQX09QVFBBUl9QS0VZX0lOREVYOworCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9STlJfUkVUUlkpIHsKKwkJY29udGV4dC0+cGFyYW1zMSB8PSBjcHVfdG9fYmUzMihhdHRyLT5ybnJfcmV0cnkgPDwgMTMpOworCQlvcHRwYXIgfD0gTUxYNF9RUF9PUFRQQVJfUk5SX1JFVFJZOworCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9BVikgeworCQlpZiAobWx4NF9zZXRfcGF0aChkZXYsICZhdHRyLT5haF9hdHRyLCAmY29udGV4dC0+cHJpX3BhdGgsCisJCQkJICBhdHRyX21hc2sgJiBJQl9RUF9QT1JUID8gYXR0ci0+cG9ydF9udW0gOiBxcC0+cG9ydCkpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW9wdHBhciB8PSAoTUxYNF9RUF9PUFRQQVJfUFJJTUFSWV9BRERSX1BBVEggfAorCQkJICAgTUxYNF9RUF9PUFRQQVJfU0NIRURfUVVFVUUpOworCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9USU1FT1VUKSB7CisJCWNvbnRleHQtPnByaV9wYXRoLmFja3RvID0gYXR0ci0+dGltZW91dCA8PCAzOworCQlvcHRwYXIgfD0gTUxYNF9RUF9PUFRQQVJfQUNLX1RJTUVPVVQ7CisJfQorCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX0FMVF9QQVRIKSB7CisJCWlmIChhdHRyLT5hbHRfcGtleV9pbmRleCA+PSBkZXYtPmRldi0+Y2Fwcy5wa2V5X3RhYmxlX2xlbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChhdHRyLT5hbHRfcG9ydF9udW0gPT0gMCB8fAorCQkgICAgYXR0ci0+YWx0X3BvcnRfbnVtID4gZGV2LT5kZXYtPmNhcHMubnVtX3BvcnRzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKG1seDRfc2V0X3BhdGgoZGV2LCAmYXR0ci0+YWx0X2FoX2F0dHIsICZjb250ZXh0LT5hbHRfcGF0aCwKKwkJCQkgIGF0dHItPmFsdF9wb3J0X251bSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQljb250ZXh0LT5hbHRfcGF0aC5wa2V5X2luZGV4ID0gYXR0ci0+YWx0X3BrZXlfaW5kZXg7CisJCWNvbnRleHQtPmFsdF9wYXRoLmFja3RvID0gYXR0ci0+YWx0X3RpbWVvdXQgPDwgMzsKKwkJb3B0cGFyIHw9IE1MWDRfUVBfT1BUUEFSX0FMVF9BRERSX1BBVEg7CisJfQorCisJY29udGV4dC0+cGQJICAgID0gY3B1X3RvX2JlMzIodG9fbXBkKGlicXAtPnBkKS0+cGRuKTsKKwljb250ZXh0LT5wYXJhbXMxICAgID0gY3B1X3RvX2JlMzIoTUxYNF9JQl9BQ0tfUkVRX0ZSRVEgPDwgMjgpOworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9SRVRSWV9DTlQpIHsKKwkJY29udGV4dC0+cGFyYW1zMSB8PSBjcHVfdG9fYmUzMihhdHRyLT5yZXRyeV9jbnQgPDwgMTYpOworCQlvcHRwYXIgfD0gTUxYNF9RUF9PUFRQQVJfUkVUUllfQ09VTlQ7CisJfQorCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX01BWF9RUF9SRF9BVE9NSUMpIHsKKwkJaWYgKGF0dHItPm1heF9yZF9hdG9taWMpCisJCQljb250ZXh0LT5wYXJhbXMxIHw9CisJCQkJY3B1X3RvX2JlMzIoZmxzKGF0dHItPm1heF9yZF9hdG9taWMgLSAxKSA8PCAyMSk7CisJCW9wdHBhciB8PSBNTFg0X1FQX09QVFBBUl9TUkFfTUFYOworCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9TUV9QU04pCisJCWNvbnRleHQtPm5leHRfc2VuZF9wc24gPSBjcHVfdG9fYmUzMihhdHRyLT5zcV9wc24pOworCisJY29udGV4dC0+Y3FuX3NlbmQgPSBjcHVfdG9fYmUzMih0b19tY3EoaWJxcC0+c2VuZF9jcSktPm1jcS5jcW4pOworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX01BWF9ERVNUX1JEX0FUT01JQykgeworCQlpZiAoYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljKQorCQkJY29udGV4dC0+cGFyYW1zMiB8PQorCQkJCWNwdV90b19iZTMyKGZscyhhdHRyLT5tYXhfZGVzdF9yZF9hdG9taWMgLSAxKSA8PCAyMSk7CisJCW9wdHBhciB8PSBNTFg0X1FQX09QVFBBUl9SUkFfTUFYOworCX0KKworCWlmIChhdHRyX21hc2sgJiAoSUJfUVBfQUNDRVNTX0ZMQUdTIHwgSUJfUVBfTUFYX0RFU1RfUkRfQVRPTUlDKSkgeworCQljb250ZXh0LT5wYXJhbXMyIHw9IHRvX21seDRfYWNjZXNzX2ZsYWdzKHFwLCBhdHRyLCBhdHRyX21hc2spOworCQlvcHRwYXIgfD0gTUxYNF9RUF9PUFRQQVJfUldFIHwgTUxYNF9RUF9PUFRQQVJfUlJFIHwgTUxYNF9RUF9PUFRQQVJfUkFFOworCX0KKworCWlmIChpYnFwLT5zcnEpCisJCWNvbnRleHQtPnBhcmFtczIgfD0gY3B1X3RvX2JlMzIoTUxYNF9RUF9CSVRfUklDKTsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9NSU5fUk5SX1RJTUVSKSB7CisJCWNvbnRleHQtPnJucl9uZXh0cmVjdnBzbiB8PSBjcHVfdG9fYmUzMihhdHRyLT5taW5fcm5yX3RpbWVyIDw8IDI0KTsKKwkJb3B0cGFyIHw9IE1MWDRfUVBfT1BUUEFSX1JOUl9USU1FT1VUOworCX0KKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUlFfUFNOKQorCQljb250ZXh0LT5ybnJfbmV4dHJlY3Zwc24gfD0gY3B1X3RvX2JlMzIoYXR0ci0+cnFfcHNuKTsKKworCWNvbnRleHQtPmNxbl9yZWN2ID0gY3B1X3RvX2JlMzIodG9fbWNxKGlicXAtPnJlY3ZfY3EpLT5tY3EuY3FuKTsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9RS0VZKSB7CisJCWNvbnRleHQtPnFrZXkgPSBjcHVfdG9fYmUzMihhdHRyLT5xa2V5KTsKKwkJb3B0cGFyIHw9IE1MWDRfUVBfT1BUUEFSX1FfS0VZOworCX0KKworCWlmIChpYnFwLT5zcnEpCisJCWNvbnRleHQtPnNycW4gPSBjcHVfdG9fYmUzMigxIDw8IDI0IHwgdG9fbXNycShpYnFwLT5zcnEpLT5tc3JxLnNycW4pOworCisJaWYgKCFpYnFwLT5zcnEgJiYgY3VyX3N0YXRlID09IElCX1FQU19SRVNFVCAmJiBuZXdfc3RhdGUgPT0gSUJfUVBTX0lOSVQpCisJCWNvbnRleHQtPmRiX3JlY19hZGRyID0gY3B1X3RvX2JlNjQocXAtPmRiLmRtYSk7CisKKwlpZiAoY3VyX3N0YXRlID09IElCX1FQU19JTklUICYmCisJICAgIG5ld19zdGF0ZSA9PSBJQl9RUFNfUlRSICAmJgorCSAgICAoaWJxcC0+cXBfdHlwZSA9PSBJQl9RUFRfR1NJIHx8IGlicXAtPnFwX3R5cGUgPT0gSUJfUVBUX1NNSSB8fAorCSAgICAgaWJxcC0+cXBfdHlwZSA9PSBJQl9RUFRfVUQpKSB7CisJCWNvbnRleHQtPnByaV9wYXRoLnNjaGVkX3F1ZXVlID0gKHFwLT5wb3J0IC0gMSkgPDwgNjsKKwkJaWYgKGlzX3FwMChkZXYsIHFwKSkKKwkJCWNvbnRleHQtPnByaV9wYXRoLnNjaGVkX3F1ZXVlIHw9IE1MWDRfSUJfREVGQVVMVF9RUDBfU0NIRURfUVVFVUU7CisJCWVsc2UKKwkJCWNvbnRleHQtPnByaV9wYXRoLnNjaGVkX3F1ZXVlIHw9IE1MWDRfSUJfREVGQVVMVF9TQ0hFRF9RVUVVRTsKKwl9CisKKwlpZiAoY3VyX3N0YXRlID09IElCX1FQU19SVFMgJiYgbmV3X3N0YXRlID09IElCX1FQU19TUUQJJiYKKwkgICAgYXR0cl9tYXNrICYgSUJfUVBfRU5fU1FEX0FTWU5DX05PVElGWSAmJiBhdHRyLT5lbl9zcWRfYXN5bmNfbm90aWZ5KQorCQlzcWRfZXZlbnQgPSAxOworCWVsc2UKKwkJc3FkX2V2ZW50ID0gMDsKKworCS8qCisJICogQmVmb3JlIHBhc3NpbmcgYSBrZXJuZWwgUVAgdG8gdGhlIEhXLCBtYWtlIHN1cmUgdGhhdCB0aGUKKwkgKiBvd25lcnNoaXAgYml0cyBvZiB0aGUgc2VuZCBxdWV1ZSBhcmUgc2V0IHNvIHRoYXQgdGhlCisJICogaGFyZHdhcmUgZG9lc24ndCBzdGFydCBwcm9jZXNzaW5nIHN0YWxlIHdvcmsgcmVxdWVzdHMuCisJICovCisJaWYgKCFpYnFwLT51b2JqZWN0ICYmIGN1cl9zdGF0ZSA9PSBJQl9RUFNfUkVTRVQgJiYgbmV3X3N0YXRlID09IElCX1FQU19JTklUKSB7CisJCXN0cnVjdCBtbHg0X3dxZV9jdHJsX3NlZyAqY3RybDsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IHFwLT5zcS5tYXg7ICsraSkgeworCQkJY3RybCA9IGdldF9zZW5kX3dxZShxcCwgaSk7CisJCQljdHJsLT5vd25lcl9vcGNvZGUgPSBjcHVfdG9fYmUzMigxIDw8IDMxKTsKKwkJfQorCX0KKworCWVyciA9IG1seDRfcXBfbW9kaWZ5KGRldi0+ZGV2LCAmcXAtPm10dCwgdG9fbWx4NF9zdGF0ZShjdXJfc3RhdGUpLAorCQkJICAgICB0b19tbHg0X3N0YXRlKG5ld19zdGF0ZSksIGNvbnRleHQsIG9wdHBhciwKKwkJCSAgICAgc3FkX2V2ZW50LCAmcXAtPm1xcCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlxcC0+c3RhdGUgPSBuZXdfc3RhdGU7CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQUNDRVNTX0ZMQUdTKQorCQlxcC0+YXRvbWljX3JkX2VuID0gYXR0ci0+cXBfYWNjZXNzX2ZsYWdzOworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9NQVhfREVTVF9SRF9BVE9NSUMpCisJCXFwLT5yZXNwX2RlcHRoID0gYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljOworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QT1JUKQorCQlxcC0+cG9ydCA9IGF0dHItPnBvcnRfbnVtOworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9BTFRfUEFUSCkKKwkJcXAtPmFsdF9wb3J0ID0gYXR0ci0+YWx0X3BvcnRfbnVtOworCisJaWYgKGlzX3NxcChkZXYsIHFwKSkKKwkJc3RvcmVfc3FwX2F0dHJzKHRvX21zcXAocXApLCBhdHRyLCBhdHRyX21hc2spOworCisJLyoKKwkgKiBJZiB3ZSBtb3ZlZCBRUDAgdG8gUlRSLCBicmluZyB0aGUgSUIgbGluayB1cDsgaWYgd2UgbW92ZWQKKwkgKiBRUDAgdG8gUkVTRVQgb3IgRVJST1IsIGJyaW5nIHRoZSBsaW5rIGJhY2sgZG93bi4KKwkgKi8KKwlpZiAoaXNfcXAwKGRldiwgcXApKSB7CisJCWlmIChjdXJfc3RhdGUgIT0gSUJfUVBTX1JUUiAmJiBuZXdfc3RhdGUgPT0gSUJfUVBTX1JUUikKKwkJCWluaXRfcG9ydChkZXYsIHFwLT5wb3J0KTsKKworCQlpZiAoY3VyX3N0YXRlICE9IElCX1FQU19SRVNFVCAmJiBjdXJfc3RhdGUgIT0gSUJfUVBTX0VSUiAmJgorCQkgICAgKG5ld19zdGF0ZSA9PSBJQl9RUFNfUkVTRVQgfHwgbmV3X3N0YXRlID09IElCX1FQU19FUlIpKQorCQkJbWx4NF9DTE9TRV9QT1JUKGRldi0+ZGV2LCBxcC0+cG9ydCk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBtb3ZlZCBhIGtlcm5lbCBRUCB0byBSRVNFVCwgY2xlYW4gdXAgYWxsIG9sZCBDUQorCSAqIGVudHJpZXMgYW5kIHJlaW5pdGlhbGl6ZSB0aGUgUVAuCisJICovCisJaWYgKG5ld19zdGF0ZSA9PSBJQl9RUFNfUkVTRVQgJiYgIWlicXAtPnVvYmplY3QpIHsKKwkJbWx4NF9pYl9jcV9jbGVhbih0b19tY3EoaWJxcC0+cmVjdl9jcSksIHFwLT5tcXAucXBuLAorCQkJCSBpYnFwLT5zcnEgPyB0b19tc3JxKGlicXAtPnNycSk6IE5VTEwpOworCQlpZiAoaWJxcC0+c2VuZF9jcSAhPSBpYnFwLT5yZWN2X2NxKQorCQkJbWx4NF9pYl9jcV9jbGVhbih0b19tY3EoaWJxcC0+c2VuZF9jcSksIHFwLT5tcXAucXBuLCBOVUxMKTsKKworCQlxcC0+cnEuaGVhZCA9IDA7CisJCXFwLT5ycS50YWlsID0gMDsKKwkJcXAtPnNxLmhlYWQgPSAwOworCQlxcC0+c3EudGFpbCA9IDA7CisJCWlmICghaWJxcC0+c3JxKQorCQkJKnFwLT5kYi5kYiAgPSAwOworCX0KKworb3V0OgorCWtmcmVlKGNvbnRleHQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfcXBfYXR0ciBtbHg0X2liX3FwX2F0dHIgPSB7IC5wb3J0X251bSA9IDEgfTsKK3N0YXRpYyBjb25zdCBpbnQgbWx4NF9pYl9xcF9hdHRyX21hc2tfdGFibGVbSUJfUVBUX1VEICsgMV0gPSB7CisJCVtJQl9RUFRfVURdICA9IChJQl9RUF9QS0VZX0lOREVYCQl8CisJCQkJSUJfUVBfUE9SVAkJCXwKKwkJCQlJQl9RUF9RS0VZKSwKKwkJW0lCX1FQVF9VQ10gID0gKElCX1FQX1BLRVlfSU5ERVgJCXwKKwkJCQlJQl9RUF9QT1JUCQkJfAorCQkJCUlCX1FQX0FDQ0VTU19GTEFHUyksCisJCVtJQl9RUFRfUkNdICA9IChJQl9RUF9QS0VZX0lOREVYCQl8CisJCQkJSUJfUVBfUE9SVAkJCXwKKwkJCQlJQl9RUF9BQ0NFU1NfRkxBR1MpLAorCQlbSUJfUVBUX1NNSV0gPSAoSUJfUVBfUEtFWV9JTkRFWAkJfAorCQkJCUlCX1FQX1FLRVkpLAorCQlbSUJfUVBUX0dTSV0gPSAoSUJfUVBfUEtFWV9JTkRFWAkJfAorCQkJCUlCX1FQX1FLRVkpLAorfTsKKworaW50IG1seDRfaWJfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsCisJCSAgICAgIGludCBhdHRyX21hc2ssIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPSB0b19tZGV2KGlicXAtPmRldmljZSk7CisJc3RydWN0IG1seDRfaWJfcXAgKnFwID0gdG9fbXFwKGlicXApOworCWVudW0gaWJfcXBfc3RhdGUgY3VyX3N0YXRlLCBuZXdfc3RhdGU7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZxcC0+bXV0ZXgpOworCisJY3VyX3N0YXRlID0gYXR0cl9tYXNrICYgSUJfUVBfQ1VSX1NUQVRFID8gYXR0ci0+Y3VyX3FwX3N0YXRlIDogcXAtPnN0YXRlOworCW5ld19zdGF0ZSA9IGF0dHJfbWFzayAmIElCX1FQX1NUQVRFID8gYXR0ci0+cXBfc3RhdGUgOiBjdXJfc3RhdGU7CisKKwlpZiAoIWliX21vZGlmeV9xcF9pc19vayhjdXJfc3RhdGUsIG5ld19zdGF0ZSwgaWJxcC0+cXBfdHlwZSwgYXR0cl9tYXNrKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoKGF0dHJfbWFzayAmIElCX1FQX1BLRVlfSU5ERVgpICYmCisJICAgICBhdHRyLT5wa2V5X2luZGV4ID49IGRldi0+ZGV2LT5jYXBzLnBrZXlfdGFibGVfbGVuKSB7CisJCWdvdG8gb3V0OworCX0KKworCWlmICgoYXR0cl9tYXNrICYgSUJfUVBfUE9SVCkgJiYKKwkgICAgKGF0dHItPnBvcnRfbnVtID09IDAgfHwgYXR0ci0+cG9ydF9udW0gPiBkZXYtPmRldi0+Y2Fwcy5udW1fcG9ydHMpKSB7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9NQVhfUVBfUkRfQVRPTUlDICYmCisJICAgIGF0dHItPm1heF9yZF9hdG9taWMgPiBkZXYtPmRldi0+Y2Fwcy5tYXhfcXBfaW5pdF9yZG1hKSB7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9NQVhfREVTVF9SRF9BVE9NSUMgJiYKKwkgICAgYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljID4gZGV2LT5kZXYtPmNhcHMubWF4X3FwX2Rlc3RfcmRtYSkgeworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY3VyX3N0YXRlID09IG5ld19zdGF0ZSAmJiBjdXJfc3RhdGUgPT0gSUJfUVBTX1JFU0VUKSB7CisJCWVyciA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjdXJfc3RhdGUgPT0gSUJfUVBTX1JFU0VUICYmIG5ld19zdGF0ZSA9PSBJQl9RUFNfRVJSKSB7CisJCWVyciA9IF9fbWx4NF9pYl9tb2RpZnlfcXAoaWJxcCwgJm1seDRfaWJfcXBfYXR0ciwKKwkJCQkJICBtbHg0X2liX3FwX2F0dHJfbWFza190YWJsZVtpYnFwLT5xcF90eXBlXSwKKwkJCQkJICBJQl9RUFNfUkVTRVQsIElCX1FQU19JTklUKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQljdXJfc3RhdGUgPSBJQl9RUFNfSU5JVDsKKwl9CisKKwllcnIgPSBfX21seDRfaWJfbW9kaWZ5X3FwKGlicXAsIGF0dHIsIGF0dHJfbWFzaywgY3VyX3N0YXRlLCBuZXdfc3RhdGUpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZxcC0+bXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYnVpbGRfbWx4X2hlYWRlcihzdHJ1Y3QgbWx4NF9pYl9zcXAgKnNxcCwgc3RydWN0IGliX3NlbmRfd3IgKndyLAorCQkJICAgIHZvaWQgKndxZSkKK3sKKwlzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYgPSAmdG9fbWRldihzcXAtPnFwLmlicXAuZGV2aWNlKS0+aWJfZGV2OworCXN0cnVjdCBtbHg0X3dxZV9tbHhfc2VnICptbHggPSB3cWU7CisJc3RydWN0IG1seDRfd3FlX2lubGluZV9zZWcgKmlubCA9IHdxZSArIHNpemVvZiAqbWx4OworCXN0cnVjdCBtbHg0X2liX2FoICphaCA9IHRvX21haCh3ci0+d3IudWQuYWgpOworCXUxNiBwa2V5OworCWludCBzZW5kX3NpemU7CisJaW50IGhlYWRlcl9zaXplOworCWludCBpOworCisJc2VuZF9zaXplID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgd3ItPm51bV9zZ2U7ICsraSkKKwkJc2VuZF9zaXplICs9IHdyLT5zZ19saXN0W2ldLmxlbmd0aDsKKworCWliX3VkX2hlYWRlcl9pbml0KHNlbmRfc2l6ZSwgbWx4NF9pYl9haF9ncmhfcHJlc2VudChhaCksICZzcXAtPnVkX2hlYWRlcik7CisKKwlzcXAtPnVkX2hlYWRlci5scmguc2VydmljZV9sZXZlbCAgID0KKwkJYmUzMl90b19jcHUoYWgtPmF2LnNsX3RjbGFzc19mbG93bGFiZWwpID4+IDI4OworCXNxcC0+dWRfaGVhZGVyLmxyaC5kZXN0aW5hdGlvbl9saWQgPSBhaC0+YXYuZGxpZDsKKwlzcXAtPnVkX2hlYWRlci5scmguc291cmNlX2xpZCAgICAgID0gY3B1X3RvX2JlMTYoYWgtPmF2Lmdfc2xpZCAmIDB4N2YpOworCWlmIChtbHg0X2liX2FoX2dyaF9wcmVzZW50KGFoKSkgeworCQlzcXAtPnVkX2hlYWRlci5ncmgudHJhZmZpY19jbGFzcyA9CisJCQkoYmUzMl90b19jcHUoYWgtPmF2LnNsX3RjbGFzc19mbG93bGFiZWwpID4+IDIwKSAmIDB4ZmY7CisJCXNxcC0+dWRfaGVhZGVyLmdyaC5mbG93X2xhYmVsICAgID0KKwkJCWFoLT5hdi5zbF90Y2xhc3NfZmxvd2xhYmVsICYgY3B1X3RvX2JlMzIoMHhmZmZmZik7CisJCXNxcC0+dWRfaGVhZGVyLmdyaC5ob3BfbGltaXQgICAgID0gYWgtPmF2LmhvcF9saW1pdDsKKwkJaWJfZ2V0X2NhY2hlZF9naWQoaWJfZGV2LCBiZTMyX3RvX2NwdShhaC0+YXYucG9ydF9wZCkgPj4gMjQsCisJCQkJICBhaC0+YXYuZ2lkX2luZGV4LCAmc3FwLT51ZF9oZWFkZXIuZ3JoLnNvdXJjZV9naWQpOworCQltZW1jcHkoc3FwLT51ZF9oZWFkZXIuZ3JoLmRlc3RpbmF0aW9uX2dpZC5yYXcsCisJCSAgICAgICBhaC0+YXYuZGdpZCwgMTYpOworCX0KKworCW1seC0+ZmxhZ3MgJj0gY3B1X3RvX2JlMzIoTUxYNF9XUUVfQ1RSTF9DUV9VUERBVEUpOworCW1seC0+ZmxhZ3MgfD0gY3B1X3RvX2JlMzIoKCFzcXAtPnFwLmlicXAucXBfbnVtID8gTUxYNF9XUUVfTUxYX1ZMMTUgOiAwKSB8CisJCQkJICAoc3FwLT51ZF9oZWFkZXIubHJoLmRlc3RpbmF0aW9uX2xpZCA9PQorCQkJCSAgIElCX0xJRF9QRVJNSVNTSVZFID8gTUxYNF9XUUVfTUxYX1NMUiA6IDApIHwKKwkJCQkgIChzcXAtPnVkX2hlYWRlci5scmguc2VydmljZV9sZXZlbCA8PCA4KSk7CisJbWx4LT5ybGlkICAgPSBzcXAtPnVkX2hlYWRlci5scmguZGVzdGluYXRpb25fbGlkOworCisJc3dpdGNoICh3ci0+b3Bjb2RlKSB7CisJY2FzZSBJQl9XUl9TRU5EOgorCQlzcXAtPnVkX2hlYWRlci5idGgub3Bjb2RlCSA9IElCX09QQ09ERV9VRF9TRU5EX09OTFk7CisJCXNxcC0+dWRfaGVhZGVyLmltbWVkaWF0ZV9wcmVzZW50ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJQl9XUl9TRU5EX1dJVEhfSU1NOgorCQlzcXAtPnVkX2hlYWRlci5idGgub3Bjb2RlCSA9IElCX09QQ09ERV9VRF9TRU5EX09OTFlfV0lUSF9JTU1FRElBVEU7CisJCXNxcC0+dWRfaGVhZGVyLmltbWVkaWF0ZV9wcmVzZW50ID0gMTsKKwkJc3FwLT51ZF9oZWFkZXIuaW1tZWRpYXRlX2RhdGEgICAgPSB3ci0+aW1tX2RhdGE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNxcC0+dWRfaGVhZGVyLmxyaC52aXJ0dWFsX2xhbmUgICAgPSAhc3FwLT5xcC5pYnFwLnFwX251bSA/IDE1IDogMDsKKwlpZiAoc3FwLT51ZF9oZWFkZXIubHJoLmRlc3RpbmF0aW9uX2xpZCA9PSBJQl9MSURfUEVSTUlTU0lWRSkKKwkJc3FwLT51ZF9oZWFkZXIubHJoLnNvdXJjZV9saWQgPSBJQl9MSURfUEVSTUlTU0lWRTsKKwlzcXAtPnVkX2hlYWRlci5idGguc29saWNpdGVkX2V2ZW50ID0gISEod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCk7CisJaWYgKCFzcXAtPnFwLmlicXAucXBfbnVtKQorCQlpYl9nZXRfY2FjaGVkX3BrZXkoaWJfZGV2LCBzcXAtPnFwLnBvcnQsIHNxcC0+cGtleV9pbmRleCwgJnBrZXkpOworCWVsc2UKKwkJaWJfZ2V0X2NhY2hlZF9wa2V5KGliX2Rldiwgc3FwLT5xcC5wb3J0LCB3ci0+d3IudWQucGtleV9pbmRleCwgJnBrZXkpOworCXNxcC0+dWRfaGVhZGVyLmJ0aC5wa2V5ID0gY3B1X3RvX2JlMTYocGtleSk7CisJc3FwLT51ZF9oZWFkZXIuYnRoLmRlc3RpbmF0aW9uX3FwbiA9IGNwdV90b19iZTMyKHdyLT53ci51ZC5yZW1vdGVfcXBuKTsKKwlzcXAtPnVkX2hlYWRlci5idGgucHNuID0gY3B1X3RvX2JlMzIoKHNxcC0+c2VuZF9wc24rKykgJiAoKDEgPDwgMjQpIC0gMSkpOworCXNxcC0+dWRfaGVhZGVyLmRldGgucWtleSA9IGNwdV90b19iZTMyKHdyLT53ci51ZC5yZW1vdGVfcWtleSAmIDB4ODAwMDAwMDAgPworCQkJCQkgICAgICAgc3FwLT5xa2V5IDogd3ItPndyLnVkLnJlbW90ZV9xa2V5KTsKKwlzcXAtPnVkX2hlYWRlci5kZXRoLnNvdXJjZV9xcG4gPSBjcHVfdG9fYmUzMihzcXAtPnFwLmlicXAucXBfbnVtKTsKKworCWhlYWRlcl9zaXplID0gaWJfdWRfaGVhZGVyX3BhY2soJnNxcC0+dWRfaGVhZGVyLCBzcXAtPmhlYWRlcl9idWYpOworCisJaWYgKDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJidWlsdCBVRCBoZWFkZXIgb2Ygc2l6ZSAlZDpcbiIsIGhlYWRlcl9zaXplKTsKKwkJZm9yIChpID0gMDsgaSA8IGhlYWRlcl9zaXplIC8gNDsgKytpKSB7CisJCQlpZiAoaSAlIDggPT0gMCkKKwkJCQlwcmludGsoIiAgWyUwMnhdICIsIGkgKiA0KTsKKwkJCXByaW50aygiICUwOHgiLAorCQkJICAgICAgIGJlMzJfdG9fY3B1KCgoX19iZTMyICopIHNxcC0+aGVhZGVyX2J1ZilbaV0pKTsKKwkJCWlmICgoaSArIDEpICUgOCA9PSAwKQorCQkJCXByaW50aygiXG4iKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorCisJaW5sLT5ieXRlX2NvdW50ID0gY3B1X3RvX2JlMzIoMSA8PCAzMSB8IGhlYWRlcl9zaXplKTsKKwltZW1jcHkoaW5sICsgMSwgc3FwLT5oZWFkZXJfYnVmLCBoZWFkZXJfc2l6ZSk7CisKKwlyZXR1cm4gQUxJR04oc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfaW5saW5lX3NlZykgKyBoZWFkZXJfc2l6ZSwgMTYpOworfQorCitzdGF0aWMgaW50IG1seDRfd3Ffb3ZlcmZsb3coc3RydWN0IG1seDRfaWJfd3EgKndxLCBpbnQgbnJlcSwgc3RydWN0IGliX2NxICppYl9jcSkKK3sKKwl1bnNpZ25lZCBjdXI7CisJc3RydWN0IG1seDRfaWJfY3EgKmNxOworCisJY3VyID0gd3EtPmhlYWQgLSB3cS0+dGFpbDsKKwlpZiAobGlrZWx5KGN1ciArIG5yZXEgPCB3cS0+bWF4KSkKKwkJcmV0dXJuIDA7CisKKwljcSA9IHRvX21jcShpYl9jcSk7CisJc3Bpbl9sb2NrKCZjcS0+bG9jayk7CisJY3VyID0gd3EtPmhlYWQgLSB3cS0+dGFpbDsKKwlzcGluX3VubG9jaygmY3EtPmxvY2spOworCisJcmV0dXJuIGN1ciArIG5yZXEgPj0gd3EtPm1heDsKK30KKworaW50IG1seDRfaWJfcG9zdF9zZW5kKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3NlbmRfd3IgKndyLAorCQkgICAgICBzdHJ1Y3QgaWJfc2VuZF93ciAqKmJhZF93cikKK3sKKwlzdHJ1Y3QgbWx4NF9pYl9xcCAqcXAgPSB0b19tcXAoaWJxcCk7CisJdm9pZCAqd3FlOworCXN0cnVjdCBtbHg0X3dxZV9jdHJsX3NlZyAqY3RybDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBucmVxOworCWludCBlcnIgPSAwOworCWludCBpbmQ7CisJaW50IHNpemU7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnJxLmxvY2ssIGZsYWdzKTsKKworCWluZCA9IHFwLT5zcS5oZWFkOworCisJZm9yIChucmVxID0gMDsgd3I7ICsrbnJlcSwgd3IgPSB3ci0+bmV4dCkgeworCQlpZiAobWx4NF93cV9vdmVyZmxvdygmcXAtPnNxLCBucmVxLCBxcC0+aWJxcC5zZW5kX2NxKSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCSpiYWRfd3IgPSB3cjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHVubGlrZWx5KHdyLT5udW1fc2dlID4gcXAtPnNxLm1heF9ncykpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQkqYmFkX3dyID0gd3I7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWN0cmwgPSB3cWUgPSBnZXRfc2VuZF93cWUocXAsIGluZCAmIChxcC0+c3EubWF4IC0gMSkpOworCQlxcC0+c3Eud3JpZFtpbmQgJiAocXAtPnNxLm1heCAtIDEpXSA9IHdyLT53cl9pZDsKKworCQljdHJsLT5zcmNyYl9mbGFncyA9CisJCQkod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NJR05BTEVEID8KKwkJCSBjcHVfdG9fYmUzMihNTFg0X1dRRV9DVFJMX0NRX1VQREFURSkgOiAwKSB8CisJCQkod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCA/CisJCQkgY3B1X3RvX2JlMzIoTUxYNF9XUUVfQ1RSTF9TT0xJQ0lURUQpIDogMCkgfAorCQkJcXAtPnNxX3NpZ25hbF9iaXRzOworCisJCWlmICh3ci0+b3Bjb2RlID09IElCX1dSX1NFTkRfV0lUSF9JTU0gfHwKKwkJICAgIHdyLT5vcGNvZGUgPT0gSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTSkKKwkJCWN0cmwtPmltbSA9IHdyLT5pbW1fZGF0YTsKKwkJZWxzZQorCQkJY3RybC0+aW1tID0gMDsKKworCQl3cWUgKz0gc2l6ZW9mICpjdHJsOworCQlzaXplID0gc2l6ZW9mICpjdHJsIC8gMTY7CisKKwkJc3dpdGNoIChpYnFwLT5xcF90eXBlKSB7CisJCWNhc2UgSUJfUVBUX1JDOgorCQljYXNlIElCX1FQVF9VQzoKKwkJCXN3aXRjaCAod3ItPm9wY29kZSkgeworCQkJY2FzZSBJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1A6CisJCQljYXNlIElCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREOgorCQkJCSgoc3RydWN0IG1seDRfd3FlX3JhZGRyX3NlZyAqKSB3cWUpLT5yYWRkciA9CisJCQkJCWNwdV90b19iZTY0KHdyLT53ci5hdG9taWMucmVtb3RlX2FkZHIpOworCQkJCSgoc3RydWN0IG1seDRfd3FlX3JhZGRyX3NlZyAqKSB3cWUpLT5ya2V5ID0KKwkJCQkJY3B1X3RvX2JlMzIod3ItPndyLmF0b21pYy5ya2V5KTsKKwkJCQkoKHN0cnVjdCBtbHg0X3dxZV9yYWRkcl9zZWcgKikgd3FlKS0+cmVzZXJ2ZWQgPSAwOworCisJCQkJd3FlICArPSBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9yYWRkcl9zZWcpOworCisJCQkJaWYgKHdyLT5vcGNvZGUgPT0gSUJfV1JfQVRPTUlDX0NNUF9BTkRfU1dQKSB7CisJCQkJCSgoc3RydWN0IG1seDRfd3FlX2F0b21pY19zZWcgKikgd3FlKS0+c3dhcF9hZGQgPQorCQkJCQkJY3B1X3RvX2JlNjQod3ItPndyLmF0b21pYy5zd2FwKTsKKwkJCQkJKChzdHJ1Y3QgbWx4NF93cWVfYXRvbWljX3NlZyAqKSB3cWUpLT5jb21wYXJlID0KKwkJCQkJCWNwdV90b19iZTY0KHdyLT53ci5hdG9taWMuY29tcGFyZV9hZGQpOworCQkJCX0gZWxzZSB7CisJCQkJCSgoc3RydWN0IG1seDRfd3FlX2F0b21pY19zZWcgKikgd3FlKS0+c3dhcF9hZGQgPQorCQkJCQkJY3B1X3RvX2JlNjQod3ItPndyLmF0b21pYy5jb21wYXJlX2FkZCk7CisJCQkJCSgoc3RydWN0IG1seDRfd3FlX2F0b21pY19zZWcgKikgd3FlKS0+Y29tcGFyZSA9IDA7CisJCQkJfQorCisJCQkJd3FlICArPSBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9hdG9taWNfc2VnKTsKKwkJCQlzaXplICs9IChzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9yYWRkcl9zZWcpICsKKwkJCQkJIHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2F0b21pY19zZWcpKSAvIDE2OworCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgorCQkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgorCQkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NOgorCQkJCSgoc3RydWN0IG1seDRfd3FlX3JhZGRyX3NlZyAqKSB3cWUpLT5yYWRkciA9CisJCQkJCWNwdV90b19iZTY0KHdyLT53ci5yZG1hLnJlbW90ZV9hZGRyKTsKKwkJCQkoKHN0cnVjdCBtbHg0X3dxZV9yYWRkcl9zZWcgKikgd3FlKS0+cmtleSA9CisJCQkJCWNwdV90b19iZTMyKHdyLT53ci5yZG1hLnJrZXkpOworCQkJCSgoc3RydWN0IG1seDRfd3FlX3JhZGRyX3NlZyAqKSB3cWUpLT5yZXNlcnZlZCA9IDA7CisKKwkJCQl3cWUgICs9IHNpemVvZiAoc3RydWN0IG1seDRfd3FlX3JhZGRyX3NlZyk7CisJCQkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9yYWRkcl9zZWcpIC8gMTY7CisKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQkvKiBObyBleHRyYSBzZWdtZW50cyByZXF1aXJlZCBmb3Igc2VuZHMgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgSUJfUVBUX1VEOgorCQkJbWVtY3B5KCgoc3RydWN0IG1seDRfd3FlX2RhdGFncmFtX3NlZyAqKSB3cWUpLT5hdiwKKwkJCSAgICAgICAmdG9fbWFoKHdyLT53ci51ZC5haCktPmF2LCBzaXplb2YgKHN0cnVjdCBtbHg0X2F2KSk7CisJCQkoKHN0cnVjdCBtbHg0X3dxZV9kYXRhZ3JhbV9zZWcgKikgd3FlKS0+ZHFwbiA9CisJCQkJY3B1X3RvX2JlMzIod3ItPndyLnVkLnJlbW90ZV9xcG4pOworCQkJKChzdHJ1Y3QgbWx4NF93cWVfZGF0YWdyYW1fc2VnICopIHdxZSktPnFrZXkgPQorCQkJCWNwdV90b19iZTMyKHdyLT53ci51ZC5yZW1vdGVfcWtleSk7CisKKwkJCXdxZSAgKz0gc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfZGF0YWdyYW1fc2VnKTsKKwkJCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgbWx4NF93cWVfZGF0YWdyYW1fc2VnKSAvIDE2OworCQkJYnJlYWs7CisKKwkJY2FzZSBJQl9RUFRfU01JOgorCQljYXNlIElCX1FQVF9HU0k6CisJCQllcnIgPSBidWlsZF9tbHhfaGVhZGVyKHRvX21zcXAocXApLCB3ciwgY3RybCk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCSpiYWRfd3IgPSB3cjsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXdxZSAgKz0gZXJyOworCQkJc2l6ZSArPSBlcnIgLyAxNjsKKworCQkJZXJyID0gMDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCB3ci0+bnVtX3NnZTsgKytpKSB7CisJCQkoKHN0cnVjdCBtbHg0X3dxZV9kYXRhX3NlZyAqKSB3cWUpLT5ieXRlX2NvdW50ID0KKwkJCQljcHVfdG9fYmUzMih3ci0+c2dfbGlzdFtpXS5sZW5ndGgpOworCQkJKChzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcgKikgd3FlKS0+bGtleSA9CisJCQkJY3B1X3RvX2JlMzIod3ItPnNnX2xpc3RbaV0ubGtleSk7CisJCQkoKHN0cnVjdCBtbHg0X3dxZV9kYXRhX3NlZyAqKSB3cWUpLT5hZGRyID0KKwkJCQljcHVfdG9fYmU2NCh3ci0+c2dfbGlzdFtpXS5hZGRyKTsKKworCQkJd3FlICArPSBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhX3NlZyk7CisJCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2RhdGFfc2VnKSAvIDE2OworCQl9CisKKwkJLyogQWRkIG9uZSBtb3JlIGlubGluZSBkYXRhIHNlZ21lbnQgZm9yIElDUkMgZm9yIE1MWCBzZW5kcyAqLworCQlpZiAocXAtPmlicXAucXBfdHlwZSA9PSBJQl9RUFRfU01JIHx8IHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX0dTSSkgeworCQkJKChzdHJ1Y3QgbWx4NF93cWVfaW5saW5lX3NlZyAqKSB3cWUpLT5ieXRlX2NvdW50ID0KKwkJCQljcHVfdG9fYmUzMigoMSA8PCAzMSkgfCA0KTsKKwkJCSgodTMyICopIHdxZSlbMV0gPSAwOworCQkJd3FlICArPSBzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9kYXRhX3NlZyk7CisJCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2RhdGFfc2VnKSAvIDE2OworCQl9CisKKwkJY3RybC0+ZmVuY2Vfc2l6ZSA9ICh3ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfRkVOQ0UgPworCQkJCSAgICBNTFg0X1dRRV9DVFJMX0ZFTkNFIDogMCkgfCBzaXplOworCisJCS8qCisJCSAqIE1ha2Ugc3VyZSBkZXNjcmlwdG9yIGlzIGZ1bGx5IHdyaXR0ZW4gYmVmb3JlCisJCSAqIHNldHRpbmcgb3duZXJzaGlwIGJpdCAoYmVjYXVzZSBIVyBjYW4gc3RhcnQKKwkJICogZXhlY3V0aW5nIGFzIHNvb24gYXMgd2UgZG8pLgorCQkgKi8KKwkJd21iKCk7CisKKwkJaWYgKHdyLT5vcGNvZGUgPCAwIHx8IHdyLT5vcGNvZGUgPj0gQVJSQVlfU0laRShtbHg0X2liX29wY29kZSkpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWN0cmwtPm93bmVyX29wY29kZSA9IG1seDRfaWJfb3Bjb2RlW3dyLT5vcGNvZGVdIHwKKwkJCShpbmQgJiBxcC0+c3EubWF4ID8gY3B1X3RvX2JlMzIoMSA8PCAzMSkgOiAwKTsKKworCQkrK2luZDsKKwl9CisKK291dDoKKwlpZiAobGlrZWx5KG5yZXEpKSB7CisJCXFwLT5zcS5oZWFkICs9IG5yZXE7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoYXQgZGVzY3JpcHRvcnMgYXJlIHdyaXR0ZW4gYmVmb3JlCisJCSAqIGRvb3JiZWxsIHJlY29yZC4KKwkJICovCisJCXdtYigpOworCisJCXdyaXRlbChxcC0+ZG9vcmJlbGxfcXBuLAorCQkgICAgICAgdG9fbWRldihpYnFwLT5kZXZpY2UpLT51YXJfbWFwICsgTUxYNF9TRU5EX0RPT1JCRUxMKTsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgZG9vcmJlbGxzIGRvbid0IGxlYWsgb3V0IG9mIFNRIHNwaW5sb2NrCisJCSAqIGFuZCByZWFjaCB0aGUgSENBIG91dCBvZiBvcmRlci4KKwkJICovCisJCW1taW93YigpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5ycS5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbWx4NF9pYl9wb3N0X3JlY3Yoc3RydWN0IGliX3FwICppYnFwLCBzdHJ1Y3QgaWJfcmVjdl93ciAqd3IsCisJCSAgICAgIHN0cnVjdCBpYl9yZWN2X3dyICoqYmFkX3dyKQoreworCXN0cnVjdCBtbHg0X2liX3FwICpxcCA9IHRvX21xcChpYnFwKTsKKwlzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcgKnNjYXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gMDsKKwlpbnQgbnJlcTsKKwlpbnQgaW5kOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5ycS5sb2NrLCBmbGFncyk7CisKKwlpbmQgPSBxcC0+cnEuaGVhZCAmIChxcC0+cnEubWF4IC0gMSk7CisKKwlmb3IgKG5yZXEgPSAwOyB3cjsgKytucmVxLCB3ciA9IHdyLT5uZXh0KSB7CisJCWlmIChtbHg0X3dxX292ZXJmbG93KCZxcC0+cnEsIG5yZXEsIHFwLT5pYnFwLnNlbmRfY3EpKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJKmJhZF93ciA9IHdyOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAodW5saWtlbHkod3ItPm51bV9zZ2UgPiBxcC0+cnEubWF4X2dzKSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCSpiYWRfd3IgPSB3cjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJc2NhdCA9IGdldF9yZWN2X3dxZShxcCwgaW5kKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgd3ItPm51bV9zZ2U7ICsraSkgeworCQkJc2NhdFtpXS5ieXRlX2NvdW50ID0gY3B1X3RvX2JlMzIod3ItPnNnX2xpc3RbaV0ubGVuZ3RoKTsKKwkJCXNjYXRbaV0ubGtleSAgICAgICA9IGNwdV90b19iZTMyKHdyLT5zZ19saXN0W2ldLmxrZXkpOworCQkJc2NhdFtpXS5hZGRyICAgICAgID0gY3B1X3RvX2JlNjQod3ItPnNnX2xpc3RbaV0uYWRkcik7CisJCX0KKworCQlpZiAoaSA8IHFwLT5ycS5tYXhfZ3MpIHsKKwkJCXNjYXRbaV0uYnl0ZV9jb3VudCA9IDA7CisJCQlzY2F0W2ldLmxrZXkgICAgICAgPSBjcHVfdG9fYmUzMihNTFg0X0lOVkFMSURfTEtFWSk7CisJCQlzY2F0W2ldLmFkZHIgICAgICAgPSAwOworCQl9CisKKwkJcXAtPnJxLndyaWRbaW5kXSA9IHdyLT53cl9pZDsKKworCQlpbmQgPSAoaW5kICsgMSkgJiAocXAtPnJxLm1heCAtIDEpOworCX0KKworb3V0OgorCWlmIChsaWtlbHkobnJlcSkpIHsKKwkJcXAtPnJxLmhlYWQgKz0gbnJlcTsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhhdCBkZXNjcmlwdG9ycyBhcmUgd3JpdHRlbiBiZWZvcmUKKwkJICogZG9vcmJlbGwgcmVjb3JkLgorCQkgKi8KKwkJd21iKCk7CisKKwkJKnFwLT5kYi5kYiA9IGNwdV90b19iZTMyKHFwLT5ycS5oZWFkICYgMHhmZmZmKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cnEubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3NycS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3JxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmYWMxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3NycS5jCkBAIC0wLDAgKzEsMzQwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbHg0L3FwLmg+CisjaW5jbHVkZSA8bGludXgvbWx4NC9zcnEuaD4KKworI2luY2x1ZGUgIm1seDRfaWIuaCIKKyNpbmNsdWRlICJ1c2VyLmgiCisKK3N0YXRpYyB2b2lkICpnZXRfd3FlKHN0cnVjdCBtbHg0X2liX3NycSAqc3JxLCBpbnQgbikKK3sKKwlpbnQgb2Zmc2V0ID0gbiA8PCBzcnEtPm1zcnEud3FlX3NoaWZ0OworCisJaWYgKHNycS0+YnVmLm5idWZzID09IDEpCisJCXJldHVybiBzcnEtPmJ1Zi51LmRpcmVjdC5idWYgKyBvZmZzZXQ7CisJZWxzZQorCQlyZXR1cm4gc3JxLT5idWYudS5wYWdlX2xpc3Rbb2Zmc2V0ID4+IFBBR0VfU0hJRlRdLmJ1ZiArCisJCQkob2Zmc2V0ICYgKFBBR0VfU0laRSAtIDEpKTsKK30KKworc3RhdGljIHZvaWQgbWx4NF9pYl9zcnFfZXZlbnQoc3RydWN0IG1seDRfc3JxICpzcnEsIGVudW0gbWx4NF9ldmVudCB0eXBlKQoreworCXN0cnVjdCBpYl9ldmVudCBldmVudDsKKwlzdHJ1Y3QgaWJfc3JxICppYnNycSA9ICZ0b19taWJzcnEoc3JxKS0+aWJzcnE7CisKKwlpZiAoaWJzcnEtPmV2ZW50X2hhbmRsZXIpIHsKKwkJZXZlbnQuZGV2aWNlICAgICAgPSBpYnNycS0+ZGV2aWNlOworCQlldmVudC5lbGVtZW50LnNycSA9IGlic3JxOworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfU1JRX0xJTUlUOgorCQkJZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9TUlFfTElNSVRfUkVBQ0hFRDsKKwkJCWJyZWFrOworCQljYXNlIE1MWDRfRVZFTlRfVFlQRV9TUlFfQ0FUQVNfRVJST1I6CisJCQlldmVudC5ldmVudCA9IElCX0VWRU5UX1NSUV9FUlI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1seDRfaWI6IFVuZXhwZWN0ZWQgZXZlbnQgdHlwZSAlZCAiCisJCQkgICAgICAgIm9uIFNSUSAlMDZ4XG4iLCB0eXBlLCBzcnEtPnNycW4pOworCQkJcmV0dXJuOworCQl9CisKKwkJaWJzcnEtPmV2ZW50X2hhbmRsZXIoJmV2ZW50LCBpYnNycS0+c3JxX2NvbnRleHQpOworCX0KK30KKworc3RydWN0IGliX3NycSAqbWx4NF9pYl9jcmVhdGVfc3JxKHN0cnVjdCBpYl9wZCAqcGQsCisJCQkJICBzdHJ1Y3QgaWJfc3JxX2luaXRfYXR0ciAqaW5pdF9hdHRyLAorCQkJCSAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiA9IHRvX21kZXYocGQtPmRldmljZSk7CisJc3RydWN0IG1seDRfaWJfc3JxICpzcnE7CisJc3RydWN0IG1seDRfd3FlX3NycV9uZXh0X3NlZyAqbmV4dDsKKwlpbnQgZGVzY19zaXplOworCWludCBidWZfc2l6ZTsKKwlpbnQgZXJyOworCWludCBpOworCisJLyogU2FuaXR5IGNoZWNrIFNSUSBzaXplIGJlZm9yZSBwcm9jZWVkaW5nICovCisJaWYgKGluaXRfYXR0ci0+YXR0ci5tYXhfd3IgID49IGRldi0+ZGV2LT5jYXBzLm1heF9zcnFfd3FlcyB8fAorCSAgICBpbml0X2F0dHItPmF0dHIubWF4X3NnZSA+ICBkZXYtPmRldi0+Y2Fwcy5tYXhfc3JxX3NnZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlzcnEgPSBrbWFsbG9jKHNpemVvZiAqc3JxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNycSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltdXRleF9pbml0KCZzcnEtPm11dGV4KTsKKwlzcGluX2xvY2tfaW5pdCgmc3JxLT5sb2NrKTsKKwlzcnEtPm1zcnEubWF4ICAgID0gcm91bmR1cF9wb3dfb2ZfdHdvKGluaXRfYXR0ci0+YXR0ci5tYXhfd3IgKyAxKTsKKwlzcnEtPm1zcnEubWF4X2dzID0gaW5pdF9hdHRyLT5hdHRyLm1heF9zZ2U7CisKKwlkZXNjX3NpemUgPSBtYXgoMzJVTCwKKwkJCXJvdW5kdXBfcG93X29mX3R3byhzaXplb2YgKHN0cnVjdCBtbHg0X3dxZV9zcnFfbmV4dF9zZWcpICsKKwkJCQkJICAgc3JxLT5tc3JxLm1heF9ncyAqCisJCQkJCSAgIHNpemVvZiAoc3RydWN0IG1seDRfd3FlX2RhdGFfc2VnKSkpOworCXNycS0+bXNycS53cWVfc2hpZnQgPSBpbG9nMihkZXNjX3NpemUpOworCisJYnVmX3NpemUgPSBzcnEtPm1zcnEubWF4ICogZGVzY19zaXplOworCisJaWYgKHBkLT51b2JqZWN0KSB7CisJCXN0cnVjdCBtbHg0X2liX2NyZWF0ZV9zcnEgdWNtZDsKKworCQlpZiAoaWJfY29weV9mcm9tX3VkYXRhKCZ1Y21kLCB1ZGF0YSwgc2l6ZW9mIHVjbWQpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBlcnJfc3JxOworCQl9CisKKwkJc3JxLT51bWVtID0gaWJfdW1lbV9nZXQocGQtPnVvYmplY3QtPmNvbnRleHQsIHVjbWQuYnVmX2FkZHIsCisJCQkJCWJ1Zl9zaXplLCAwKTsKKwkJaWYgKElTX0VSUihzcnEtPnVtZW0pKSB7CisJCQllcnIgPSBQVFJfRVJSKHNycS0+dW1lbSk7CisJCQlnb3RvIGVycl9zcnE7CisJCX0KKworCQllcnIgPSBtbHg0X210dF9pbml0KGRldi0+ZGV2LCBpYl91bWVtX3BhZ2VfY291bnQoc3JxLT51bWVtKSwKKwkJCQkgICAgaWxvZzIoc3JxLT51bWVtLT5wYWdlX3NpemUpLCAmc3JxLT5tdHQpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfYnVmOworCisJCWVyciA9IG1seDRfaWJfdW1lbV93cml0ZV9tdHQoZGV2LCAmc3JxLT5tdHQsIHNycS0+dW1lbSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9tdHQ7CisKKwkJZXJyID0gbWx4NF9pYl9kYl9tYXBfdXNlcih0b19tdWNvbnRleHQocGQtPnVvYmplY3QtPmNvbnRleHQpLAorCQkJCQkgIHVjbWQuZGJfYWRkciwgJnNycS0+ZGIpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfbXR0OworCX0gZWxzZSB7CisJCWVyciA9IG1seDRfaWJfZGJfYWxsb2MoZGV2LCAmc3JxLT5kYiwgMCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9zcnE7CisKKwkJKnNycS0+ZGIuZGIgPSAwOworCisJCWlmIChtbHg0X2J1Zl9hbGxvYyhkZXYtPmRldiwgYnVmX3NpemUsIFBBR0VfU0laRSAqIDIsICZzcnEtPmJ1ZikpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9kYjsKKwkJfQorCisJCXNycS0+aGVhZCAgICA9IDA7CisJCXNycS0+dGFpbCAgICA9IHNycS0+bXNycS5tYXggLSAxOworCQlzcnEtPndxZV9jdHIgPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBzcnEtPm1zcnEubWF4OyArK2kpIHsKKwkJCW5leHQgPSBnZXRfd3FlKHNycSwgaSk7CisJCQluZXh0LT5uZXh0X3dxZV9pbmRleCA9CisJCQkJY3B1X3RvX2JlMTYoKGkgKyAxKSAmIChzcnEtPm1zcnEubWF4IC0gMSkpOworCQl9CisKKwkJZXJyID0gbWx4NF9tdHRfaW5pdChkZXYtPmRldiwgc3JxLT5idWYubnBhZ2VzLCBzcnEtPmJ1Zi5wYWdlX3NoaWZ0LAorCQkJCSAgICAmc3JxLT5tdHQpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfYnVmOworCisJCWVyciA9IG1seDRfYnVmX3dyaXRlX210dChkZXYtPmRldiwgJnNycS0+bXR0LCAmc3JxLT5idWYpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfbXR0OworCisJCXNycS0+d3JpZCA9IGttYWxsb2Moc3JxLT5tc3JxLm1heCAqIHNpemVvZiAodTY0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3JxLT53cmlkKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfbXR0OworCQl9CisJfQorCisJZXJyID0gbWx4NF9zcnFfYWxsb2MoZGV2LT5kZXYsIHRvX21wZChwZCktPnBkbiwgJnNycS0+bXR0LAorCQkJICAgICBzcnEtPmRiLmRtYSwgJnNycS0+bXNycSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfd3JpZDsKKworCXNycS0+bXNycS5ldmVudCA9IG1seDRfaWJfc3JxX2V2ZW50OworCisJaWYgKHBkLT51b2JqZWN0KQorCQlpZiAoaWJfY29weV90b191ZGF0YSh1ZGF0YSwgJnNycS0+bXNycS5zcnFuLCBzaXplb2YgKF9fdTMyKSkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIGVycl93cmlkOworCQl9CisKKwlpbml0X2F0dHItPmF0dHIubWF4X3dyID0gc3JxLT5tc3JxLm1heCAtIDE7CisKKwlyZXR1cm4gJnNycS0+aWJzcnE7CisKK2Vycl93cmlkOgorCWlmIChwZC0+dW9iamVjdCkKKwkJbWx4NF9pYl9kYl91bm1hcF91c2VyKHRvX211Y29udGV4dChwZC0+dW9iamVjdC0+Y29udGV4dCksICZzcnEtPmRiKTsKKwllbHNlCisJCWtmcmVlKHNycS0+d3JpZCk7CisKK2Vycl9tdHQ6CisJbWx4NF9tdHRfY2xlYW51cChkZXYtPmRldiwgJnNycS0+bXR0KTsKKworZXJyX2J1ZjoKKwlpZiAocGQtPnVvYmplY3QpCisJCWliX3VtZW1fcmVsZWFzZShzcnEtPnVtZW0pOworCWVsc2UKKwkJbWx4NF9idWZfZnJlZShkZXYtPmRldiwgYnVmX3NpemUsICZzcnEtPmJ1Zik7CisKK2Vycl9kYjoKKwlpZiAoIXBkLT51b2JqZWN0KQorCQltbHg0X2liX2RiX2ZyZWUoZGV2LCAmc3JxLT5kYik7CisKK2Vycl9zcnE6CisJa2ZyZWUoc3JxKTsKKworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK2ludCBtbHg0X2liX21vZGlmeV9zcnEoc3RydWN0IGliX3NycSAqaWJzcnEsIHN0cnVjdCBpYl9zcnFfYXR0ciAqYXR0ciwKKwkJICAgICAgIGVudW0gaWJfc3JxX2F0dHJfbWFzayBhdHRyX21hc2ssIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IG1seDRfaWJfZGV2ICpkZXYgPSB0b19tZGV2KGlic3JxLT5kZXZpY2UpOworCXN0cnVjdCBtbHg0X2liX3NycSAqc3JxID0gdG9fbXNycShpYnNycSk7CisJaW50IHJldDsKKworCS8qIFdlIGRvbid0IHN1cHBvcnQgcmVzaXppbmcgU1JRcyAoeWV0PykgKi8KKwlpZiAoYXR0cl9tYXNrICYgSUJfU1JRX01BWF9XUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfU1JRX0xJTUlUKSB7CisJCWlmIChhdHRyLT5zcnFfbGltaXQgPj0gc3JxLT5tc3JxLm1heCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW11dGV4X2xvY2soJnNycS0+bXV0ZXgpOworCQlyZXQgPSBtbHg0X3NycV9hcm0oZGV2LT5kZXYsICZzcnEtPm1zcnEsIGF0dHItPnNycV9saW1pdCk7CisJCW11dGV4X3VubG9jaygmc3JxLT5tdXRleCk7CisKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBtbHg0X2liX2Rlc3Ryb3lfc3JxKHN0cnVjdCBpYl9zcnEgKnNycSkKK3sKKwlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiA9IHRvX21kZXYoc3JxLT5kZXZpY2UpOworCXN0cnVjdCBtbHg0X2liX3NycSAqbXNycSA9IHRvX21zcnEoc3JxKTsKKworCW1seDRfc3JxX2ZyZWUoZGV2LT5kZXYsICZtc3JxLT5tc3JxKTsKKwltbHg0X210dF9jbGVhbnVwKGRldi0+ZGV2LCAmbXNycS0+bXR0KTsKKworCWlmIChzcnEtPnVvYmplY3QpIHsKKwkJbWx4NF9pYl9kYl91bm1hcF91c2VyKHRvX211Y29udGV4dChzcnEtPnVvYmplY3QtPmNvbnRleHQpLCAmbXNycS0+ZGIpOworCQlpYl91bWVtX3JlbGVhc2UobXNycS0+dW1lbSk7CisJfSBlbHNlIHsKKwkJa2ZyZWUobXNycS0+d3JpZCk7CisJCW1seDRfYnVmX2ZyZWUoZGV2LT5kZXYsIG1zcnEtPm1zcnEubWF4IDw8IG1zcnEtPm1zcnEud3FlX3NoaWZ0LAorCQkJICAgICAgJm1zcnEtPmJ1Zik7CisJCW1seDRfaWJfZGJfZnJlZShkZXYsICZtc3JxLT5kYik7CisJfQorCisJa2ZyZWUobXNycSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtbHg0X2liX2ZyZWVfc3JxX3dxZShzdHJ1Y3QgbWx4NF9pYl9zcnEgKnNycSwgaW50IHdxZV9pbmRleCkKK3sKKwlzdHJ1Y3QgbWx4NF93cWVfc3JxX25leHRfc2VnICpuZXh0OworCisJLyogYWx3YXlzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICovCisJc3Bpbl9sb2NrKCZzcnEtPmxvY2spOworCisJbmV4dCA9IGdldF93cWUoc3JxLCBzcnEtPnRhaWwpOworCW5leHQtPm5leHRfd3FlX2luZGV4ID0gY3B1X3RvX2JlMTYod3FlX2luZGV4KTsKKwlzcnEtPnRhaWwgPSB3cWVfaW5kZXg7CisKKwlzcGluX3VubG9jaygmc3JxLT5sb2NrKTsKK30KKworaW50IG1seDRfaWJfcG9zdF9zcnFfcmVjdihzdHJ1Y3QgaWJfc3JxICppYnNycSwgc3RydWN0IGliX3JlY3Zfd3IgKndyLAorCQkJICBzdHJ1Y3QgaWJfcmVjdl93ciAqKmJhZF93cikKK3sKKwlzdHJ1Y3QgbWx4NF9pYl9zcnEgKnNycSA9IHRvX21zcnEoaWJzcnEpOworCXN0cnVjdCBtbHg0X3dxZV9zcnFfbmV4dF9zZWcgKm5leHQ7CisJc3RydWN0IG1seDRfd3FlX2RhdGFfc2VnICpzY2F0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IDA7CisJaW50IG5yZXE7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3JxLT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKG5yZXEgPSAwOyB3cjsgKytucmVxLCB3ciA9IHdyLT5uZXh0KSB7CisJCWlmICh1bmxpa2VseSh3ci0+bnVtX3NnZSA+IHNycS0+bXNycS5tYXhfZ3MpKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJKmJhZF93ciA9IHdyOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAodW5saWtlbHkoc3JxLT5oZWFkID09IHNycS0+dGFpbCkpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQkqYmFkX3dyID0gd3I7CisJCQlicmVhazsKKwkJfQorCisJCXNycS0+d3JpZFtzcnEtPmhlYWRdID0gd3ItPndyX2lkOworCisJCW5leHQgICAgICA9IGdldF93cWUoc3JxLCBzcnEtPmhlYWQpOworCQlzcnEtPmhlYWQgPSBiZTE2X3RvX2NwdShuZXh0LT5uZXh0X3dxZV9pbmRleCk7CisJCXNjYXQgICAgICA9IChzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcgKikgKG5leHQgKyAxKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgd3ItPm51bV9zZ2U7ICsraSkgeworCQkJc2NhdFtpXS5ieXRlX2NvdW50ID0gY3B1X3RvX2JlMzIod3ItPnNnX2xpc3RbaV0ubGVuZ3RoKTsKKwkJCXNjYXRbaV0ubGtleSAgICAgICA9IGNwdV90b19iZTMyKHdyLT5zZ19saXN0W2ldLmxrZXkpOworCQkJc2NhdFtpXS5hZGRyICAgICAgID0gY3B1X3RvX2JlNjQod3ItPnNnX2xpc3RbaV0uYWRkcik7CisJCX0KKworCQlpZiAoaSA8IHNycS0+bXNycS5tYXhfZ3MpIHsKKwkJCXNjYXRbaV0uYnl0ZV9jb3VudCA9IDA7CisJCQlzY2F0W2ldLmxrZXkgICAgICAgPSBjcHVfdG9fYmUzMihNTFg0X0lOVkFMSURfTEtFWSk7CisJCQlzY2F0W2ldLmFkZHIgICAgICAgPSAwOworCQl9CisJfQorCisJaWYgKGxpa2VseShucmVxKSkgeworCQlzcnEtPndxZV9jdHIgKz0gbnJlcTsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhhdCBkZXNjcmlwdG9ycyBhcmUgd3JpdHRlbiBiZWZvcmUKKwkJICogZG9vcmJlbGwgcmVjb3JkLgorCQkgKi8KKwkJd21iKCk7CisKKwkJKnNycS0+ZGIuZGIgPSBjcHVfdG9fYmUzMihzcnEtPndxZV9jdHIpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNycS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3VzZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM3MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvdXNlci5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBNTFg0X0lCX1VTRVJfSAorI2RlZmluZSBNTFg0X0lCX1VTRVJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIEluY3JlbWVudCB0aGlzIHZhbHVlIGlmIGFueSBjaGFuZ2VzIHRoYXQgYnJlYWsgdXNlcnNwYWNlIEFCSQorICogY29tcGF0aWJpbGl0eSBhcmUgbWFkZS4KKyAqLworI2RlZmluZSBNTFg0X0lCX1VWRVJCU19BQklfVkVSU0lPTgkyCisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCBhbGwgc3RydWN0cyBkZWZpbmVkIGluIHRoaXMgZmlsZSByZW1haW4gbGFpZCBvdXQgc28KKyAqIHRoYXQgdGhleSBwYWNrIHRoZSBzYW1lIHdheSBvbiAzMi1iaXQgYW5kIDY0LWJpdCBhcmNoaXRlY3R1cmVzICh0bworICogYXZvaWQgaW5jb21wYXRpYmlsaXR5IGJldHdlZW4gMzItYml0IHVzZXJzcGFjZSBhbmQgNjQtYml0IGtlcm5lbHMpLgorICogSW4gcGFydGljdWxhciBkbyBub3QgdXNlIHBvaW50ZXIgdHlwZXMgLS0gcGFzcyBwb2ludGVycyBpbiBfX3U2NAorICogaW5zdGVhZC4KKyAqLworCitzdHJ1Y3QgbWx4NF9pYl9hbGxvY191Y29udGV4dF9yZXNwIHsKKwlfX3UzMglxcF90YWJfc2l6ZTsKKwlfX3UxNgliZl9yZWdfc2l6ZTsKKwlfX3UxNgliZl9yZWdzX3Blcl9wYWdlOworfTsKKworc3RydWN0IG1seDRfaWJfYWxsb2NfcGRfcmVzcCB7CisJX191MzIJcGRuOworCV9fdTMyCXJlc2VydmVkOworfTsKKworc3RydWN0IG1seDRfaWJfY3JlYXRlX2NxIHsKKwlfX3U2NAlidWZfYWRkcjsKKwlfX3U2NAlkYl9hZGRyOworfTsKKworc3RydWN0IG1seDRfaWJfY3JlYXRlX2NxX3Jlc3AgeworCV9fdTMyCWNxbjsKKwlfX3UzMglyZXNlcnZlZDsKK307CisKK3N0cnVjdCBtbHg0X2liX3Jlc2l6ZV9jcSB7CisJX191NjQJYnVmX2FkZHI7Cit9OworCitzdHJ1Y3QgbWx4NF9pYl9jcmVhdGVfc3JxIHsKKwlfX3U2NAlidWZfYWRkcjsKKwlfX3U2NAlkYl9hZGRyOworfTsKKworc3RydWN0IG1seDRfaWJfY3JlYXRlX3NycV9yZXNwIHsKKwlfX3UzMglzcnFuOworCV9fdTMyCXJlc2VydmVkOworfTsKKworc3RydWN0IG1seDRfaWJfY3JlYXRlX3FwIHsKKwlfX3U2NAlidWZfYWRkcjsKKwlfX3U2NAlkYl9hZGRyOworICAgICAgICBfX3U4CWxvZ19zcV9iYl9jb3VudDsKKyAgICAgICAgX191OAlsb2dfc3Ffc3RyaWRlOworICAgICAgICBfX3U4CXJlc2VydmVkWzZdOworfTsKKworI2VuZGlmIC8qIE1MWDRfSUJfVVNFUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9hdi5jCmluZGV4IDI3Y2FmM2IuLjRiMTExYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9hdi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9hdi5jCkBAIC0yNzksNiArMjc5LDcgQEAKIAkJCShiZTMyX3RvX2NwdShhaC0+YXYtPnNsX3RjbGFzc19mbG93bGFiZWwpID4+IDIwKSAmIDB4ZmY7CiAJCWhlYWRlci0+Z3JoLmZsb3dfbGFiZWwgICAgPQogCQkJYWgtPmF2LT5zbF90Y2xhc3NfZmxvd2xhYmVsICYgY3B1X3RvX2JlMzIoMHhmZmZmZik7CisJCWhlYWRlci0+Z3JoLmhvcF9saW1pdCAgICAgPSBhaC0+YXYtPmhvcF9saW1pdDsKIAkJaWJfZ2V0X2NhY2hlZF9naWQoJmRldi0+aWJfZGV2LAogCQkJCSAgYmUzMl90b19jcHUoYWgtPmF2LT5wb3J0X3BkKSA+PiAyNCwKIAkJCQkgIGFoLT5hdi0+Z2lkX2luZGV4ICUgZGV2LT5saW1pdHMuZ2lkX3RhYmxlX2xlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwppbmRleCA3MTMxNDQ2Li4zODEwMjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxyZG1hL2liX21hZC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCmluZGV4IGNmMDg2OGYuLmJlNmUxZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCkBAIC0zNyw2ICszNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTI4NCw3ICsyODUsNyBAQAogewogCXN0cnVjdCBtdGhjYV9jcWUgKmNxZTsKIAl1MzIgcHJvZF9pbmRleDsKLQlpbnQgbmZyZWVkID0gMDsKKwlpbnQgaSwgbmZyZWVkID0gMDsKIAogCXNwaW5fbG9ja19pcnEoJmNxLT5sb2NrKTsKIApAQCAtMzIxLDYgKzMyMiw4IEBACiAJfQogCiAJaWYgKG5mcmVlZCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbmZyZWVkOyArK2kpCisJCQlzZXRfY3FlX2h3KGdldF9jcWUoY3EsIChjcS0+Y29uc19pbmRleCArIGkpICYgY3EtPmliY3EuY3FlKSk7CiAJCXdtYigpOwogCQljcS0+Y29uc19pbmRleCArPSBuZnJlZWQ7CiAJCXVwZGF0ZV9jb25zX2luZGV4KGRldiwgY3EsIG5mcmVlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwppbmRleCA3NzMxNDVlLi5hYTU2M2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKQEAgLTEyNTAsMTIgKzEyNTAsMTQgQEAKIGludCBfX210aGNhX3Jlc3RhcnRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBtdGhjYV9kZXYgKm1kZXY7CisJaW50IGhjYV90eXBlOwogCiAJbWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpZiAoIW1kZXYpCiAJCXJldHVybiAtRU5PREVWOworCWhjYV90eXBlID0gbWRldi0+aGNhX3R5cGU7CiAJX19tdGhjYV9yZW1vdmVfb25lKHBkZXYpOwotCXJldHVybiBfX210aGNhX2luaXRfb25lKHBkZXYsIG1kZXYtPmhjYV90eXBlKTsKKwlyZXR1cm4gX19tdGhjYV9pbml0X29uZShwZGV2LCBoY2FfdHlwZSk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG10aGNhX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMKaW5kZXggNDhmN2M2NS4uZTYxZjNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKaW5kZXggMWMwNTQ4Ni4uNmJjZGUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKQEAgLTM3LDYgKzM3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8cmRtYS9pYl9zbWkuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3VtZW0uaD4KICNpbmNsdWRlIDxyZG1hL2liX3VzZXJfdmVyYnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCkBAIC05MDgsNiArOTA5LDggQEAKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAl9CiAKKwltci0+dW1lbSA9IE5VTEw7CisKIAlyZXR1cm4gJm1yLT5pYm1yOwogfQogCkBAIC0xMDAzLDExICsxMDA2LDEzIEBACiAJfQogCiAJa2ZyZWUocGFnZV9saXN0KTsKKwltci0+dW1lbSA9IE5VTEw7CisKIAlyZXR1cm4gJm1yLT5pYm1yOwogfQogCi1zdGF0aWMgc3RydWN0IGliX21yICptdGhjYV9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqcmVnaW9uLAotCQkJCSAgICAgICBpbnQgYWNjLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQorc3RhdGljIHN0cnVjdCBpYl9tciAqbXRoY2FfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICpwZCwgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoLAorCQkJCSAgICAgICB1NjQgdmlydCwgaW50IGFjYywgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKIHsKIAlzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYgPSB0b19tZGV2KHBkLT5kZXZpY2UpOwogCXN0cnVjdCBpYl91bWVtX2NodW5rICpjaHVuazsKQEAgLTEwMTgsMjAgKzEwMjMsMjYgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgd3JpdGVfbXR0X3NpemU7CiAKLQlzaGlmdCA9IGZmcyhyZWdpb24tPnBhZ2Vfc2l6ZSkgLSAxOwotCiAJbXIgPSBrbWFsbG9jKHNpemVvZiAqbXIsIEdGUF9LRVJORUwpOwogCWlmICghbXIpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCisJbXItPnVtZW0gPSBpYl91bWVtX2dldChwZC0+dW9iamVjdC0+Y29udGV4dCwgc3RhcnQsIGxlbmd0aCwgYWNjKTsKKwlpZiAoSVNfRVJSKG1yLT51bWVtKSkgeworCQllcnIgPSBQVFJfRVJSKG1yLT51bWVtKTsKKwkJZ290byBlcnI7CisJfQorCisJc2hpZnQgPSBmZnMobXItPnVtZW0tPnBhZ2Vfc2l6ZSkgLSAxOworCiAJbiA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJnJlZ2lvbi0+Y2h1bmtfbGlzdCwgbGlzdCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmbXItPnVtZW0tPmNodW5rX2xpc3QsIGxpc3QpCiAJCW4gKz0gY2h1bmstPm5lbnRzOwogCiAJbXItPm10dCA9IG10aGNhX2FsbG9jX210dChkZXYsIG4pOwogCWlmIChJU19FUlIobXItPm10dCkpIHsKIAkJZXJyID0gUFRSX0VSUihtci0+bXR0KTsKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX3VtZW07CiAJfQogCiAJcGFnZXMgPSAodTY0ICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKQEAgLTEwNDQsMTIgKzEwNTUsMTIgQEAKIAogCXdyaXRlX210dF9zaXplID0gbWluKG10aGNhX3dyaXRlX210dF9zaXplKGRldiksIChpbnQpIChQQUdFX1NJWkUgLyBzaXplb2YgKnBhZ2VzKSk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmcmVnaW9uLT5jaHVua19saXN0LCBsaXN0KQorCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZtci0+dW1lbS0+Y2h1bmtfbGlzdCwgbGlzdCkKIAkJZm9yIChqID0gMDsgaiA8IGNodW5rLT5ubWFwOyArK2opIHsKIAkJCWxlbiA9IHNnX2RtYV9sZW4oJmNodW5rLT5wYWdlX2xpc3Rbal0pID4+IHNoaWZ0OwogCQkJZm9yIChrID0gMDsgayA8IGxlbjsgKytrKSB7CiAJCQkJcGFnZXNbaSsrXSA9IHNnX2RtYV9hZGRyZXNzKCZjaHVuay0+cGFnZV9saXN0W2pdKSArCi0JCQkJCXJlZ2lvbi0+cGFnZV9zaXplICogazsKKwkJCQkJbXItPnVtZW0tPnBhZ2Vfc2l6ZSAqIGs7CiAJCQkJLyoKIAkJCQkgKiBCZSBmcmllbmRseSB0byB3cml0ZV9tdHQgYW5kIHBhc3MgaXQgY2h1bmtzCiAJCQkJICogb2YgYXBwcm9wcmlhdGUgc2l6ZS4KQEAgLTEwNzEsOCArMTA4Miw4IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfbXR0OwogCi0JZXJyID0gbXRoY2FfbXJfYWxsb2MoZGV2LCB0b19tcGQocGQpLT5wZF9udW0sIHNoaWZ0LCByZWdpb24tPnZpcnRfYmFzZSwKLQkJCSAgICAgcmVnaW9uLT5sZW5ndGgsIGNvbnZlcnRfYWNjZXNzKGFjYyksIG1yKTsKKwllcnIgPSBtdGhjYV9tcl9hbGxvYyhkZXYsIHRvX21wZChwZCktPnBkX251bSwgc2hpZnQsIHZpcnQsIGxlbmd0aCwKKwkJCSAgICAgY29udmVydF9hY2Nlc3MoYWNjKSwgbXIpOwogCiAJaWYgKGVycikKIAkJZ290byBlcnJfbXR0OwpAQCAtMTA4Miw2ICsxMDkzLDkgQEAKIGVycl9tdHQ6CiAJbXRoY2FfZnJlZV9tdHQoZGV2LCBtci0+bXR0KTsKIAorZXJyX3VtZW06CisJaWJfdW1lbV9yZWxlYXNlKG1yLT51bWVtKTsKKwogZXJyOgogCWtmcmVlKG1yKTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwpAQCAtMTA5MCw4ICsxMTA0LDEyIEBACiBzdGF0aWMgaW50IG10aGNhX2RlcmVnX21yKHN0cnVjdCBpYl9tciAqbXIpCiB7CiAJc3RydWN0IG10aGNhX21yICptbXIgPSB0b19tbXIobXIpOworCiAJbXRoY2FfZnJlZV9tcih0b19tZGV2KG1yLT5kZXZpY2UpLCBtbXIpOworCWlmIChtbXItPnVtZW0pCisJCWliX3VtZW1fcmVsZWFzZShtbXItPnVtZW0pOwogCWtmcmVlKG1tcik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaAppbmRleCAxZDI2NmFjLi4yNjI2MTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaApAQCAtNzMsNiArNzMsNyBAQAogCiBzdHJ1Y3QgbXRoY2FfbXIgewogCXN0cnVjdCBpYl9tciAgICAgIGlibXI7CisJc3RydWN0IGliX3VtZW0gICAqdW1lbTsKIAlzdHJ1Y3QgbXRoY2FfbXR0ICptdHQ7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCmluZGV4IGZlZTYwYzguLmVlZjQxNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCkBAIC0zNyw2ICszNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC0yOTUsNyArMjk2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3JlX2F0dHJzKHN0cnVjdCBtdGhjYV9zcXAgKnNxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsCitzdGF0aWMgdm9pZCBzdG9yZV9hdHRycyhzdHJ1Y3QgbXRoY2Ffc3FwICpzcXAsIGNvbnN0IHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLAogCQkJaW50IGF0dHJfbWFzaykKIHsKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUEtFWV9JTkRFWCkKQEAgLTMyNyw3ICszMjgsNyBAQAogCQltdGhjYV93YXJuKGRldiwgIklOSVRfSUIgcmV0dXJuZWQgc3RhdHVzICUwMnguXG4iLCBzdGF0dXMpOwogfQogCi1zdGF0aWMgX19iZTMyIGdldF9od19hY2Nlc3NfZmxhZ3Moc3RydWN0IG10aGNhX3FwICpxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsCitzdGF0aWMgX19iZTMyIGdldF9od19hY2Nlc3NfZmxhZ3Moc3RydWN0IG10aGNhX3FwICpxcCwgY29uc3Qgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsCiAJCQkJICBpbnQgYXR0cl9tYXNrKQogewogCXU4IGRlc3RfcmRfYXRvbWljOwpAQCAtNTEwLDcgKzUxMSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtdGhjYV9wYXRoX3NldChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBpYl9haF9hdHRyICphaCwKK3N0YXRpYyBpbnQgbXRoY2FfcGF0aF9zZXQoc3RydWN0IG10aGNhX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWgsCiAJCQkgIHN0cnVjdCBtdGhjYV9xcF9wYXRoICpwYXRoLCB1OCBwb3J0KQogewogCXBhdGgtPmdfbXlsbWMgICAgID0gYWgtPnNyY19wYXRoX2JpdHMgJiAweDdmOwpAQCAtNTM4LDEyICs1MzksMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG10aGNhX21vZGlmeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLCBpbnQgYXR0cl9tYXNrLAotCQkgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3N0YXRpYyBpbnQgX19tdGhjYV9tb2RpZnlfcXAoc3RydWN0IGliX3FwICppYnFwLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0ciwgaW50IGF0dHJfbWFzaywKKwkJCSAgICAgZW51bSBpYl9xcF9zdGF0ZSBjdXJfc3RhdGUsIGVudW0gaWJfcXBfc3RhdGUgbmV3X3N0YXRlKQogewogCXN0cnVjdCBtdGhjYV9kZXYgKmRldiA9IHRvX21kZXYoaWJxcC0+ZGV2aWNlKTsKIAlzdHJ1Y3QgbXRoY2FfcXAgKnFwID0gdG9fbXFwKGlicXApOwotCWVudW0gaWJfcXBfc3RhdGUgY3VyX3N0YXRlLCBuZXdfc3RhdGU7CiAJc3RydWN0IG10aGNhX21haWxib3ggKm1haWxib3g7CiAJc3RydWN0IG10aGNhX3FwX3BhcmFtICpxcF9wYXJhbTsKIAlzdHJ1Y3QgbXRoY2FfcXBfY29udGV4dCAqcXBfY29udGV4dDsKQEAgLTU1MSw2MCArNTUyLDYgQEAKIAl1OCBzdGF0dXM7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZxcC0+bXV0ZXgpOwotCi0JaWYgKGF0dHJfbWFzayAmIElCX1FQX0NVUl9TVEFURSkgewotCQljdXJfc3RhdGUgPSBhdHRyLT5jdXJfcXBfc3RhdGU7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2lycSgmcXAtPnNxLmxvY2spOwotCQlzcGluX2xvY2soJnFwLT5ycS5sb2NrKTsKLQkJY3VyX3N0YXRlID0gcXAtPnN0YXRlOwotCQlzcGluX3VubG9jaygmcXAtPnJxLmxvY2spOwotCQlzcGluX3VubG9ja19pcnEoJnFwLT5zcS5sb2NrKTsKLQl9Ci0KLQluZXdfc3RhdGUgPSBhdHRyX21hc2sgJiBJQl9RUF9TVEFURSA/IGF0dHItPnFwX3N0YXRlIDogY3VyX3N0YXRlOwotCi0JaWYgKCFpYl9tb2RpZnlfcXBfaXNfb2soY3VyX3N0YXRlLCBuZXdfc3RhdGUsIGlicXAtPnFwX3R5cGUsIGF0dHJfbWFzaykpIHsKLQkJbXRoY2FfZGJnKGRldiwgIkJhZCBRUCB0cmFuc2l0aW9uICh0cmFuc3BvcnQgJWQpICIKLQkJCSAgIiVkLT4lZCB3aXRoIGF0dHIgMHglMDh4XG4iLAotCQkJICBxcC0+dHJhbnNwb3J0LCBjdXJfc3RhdGUsIG5ld19zdGF0ZSwKLQkJCSAgYXR0cl9tYXNrKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGN1cl9zdGF0ZSA9PSBuZXdfc3RhdGUgJiYgY3VyX3N0YXRlID09IElCX1FQU19SRVNFVCkgewotCQllcnIgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoKGF0dHJfbWFzayAmIElCX1FQX1BLRVlfSU5ERVgpICYmCi0JICAgICBhdHRyLT5wa2V5X2luZGV4ID49IGRldi0+bGltaXRzLnBrZXlfdGFibGVfbGVuKSB7Ci0JCW10aGNhX2RiZyhkZXYsICJQX0tleSBpbmRleCAoJXUpIHRvbyBsYXJnZS4gbWF4IGlzICVkXG4iLAotCQkJICBhdHRyLT5wa2V5X2luZGV4LCBkZXYtPmxpbWl0cy5wa2V5X3RhYmxlX2xlbi0xKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKChhdHRyX21hc2sgJiBJQl9RUF9QT1JUKSAmJgotCSAgICAoYXR0ci0+cG9ydF9udW0gPT0gMCB8fCBhdHRyLT5wb3J0X251bSA+IGRldi0+bGltaXRzLm51bV9wb3J0cykpIHsKLQkJbXRoY2FfZGJnKGRldiwgIlBvcnQgbnVtYmVyICgldSkgaXMgaW52YWxpZFxuIiwgYXR0ci0+cG9ydF9udW0pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoYXR0cl9tYXNrICYgSUJfUVBfTUFYX1FQX1JEX0FUT01JQyAmJgotCSAgICBhdHRyLT5tYXhfcmRfYXRvbWljID4gZGV2LT5saW1pdHMubWF4X3FwX2luaXRfcmRtYSkgewotCQltdGhjYV9kYmcoZGV2LCAiTWF4IHJkbWFfYXRvbWljIGFzIGluaXRpYXRvciAldSB0b28gbGFyZ2UgKG1heCBpcyAlZClcbiIsCi0JCQkgIGF0dHItPm1heF9yZF9hdG9taWMsIGRldi0+bGltaXRzLm1heF9xcF9pbml0X3JkbWEpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoYXR0cl9tYXNrICYgSUJfUVBfTUFYX0RFU1RfUkRfQVRPTUlDICYmCi0JICAgIGF0dHItPm1heF9kZXN0X3JkX2F0b21pYyA+IDEgPDwgZGV2LT5xcF90YWJsZS5yZGJfc2hpZnQpIHsKLQkJbXRoY2FfZGJnKGRldiwgIk1heCByZG1hX2F0b21pYyBhcyByZXNwb25kZXIgJXUgdG9vIGxhcmdlIChtYXggJWQpXG4iLAotCQkJICBhdHRyLT5tYXhfZGVzdF9yZF9hdG9taWMsIDEgPDwgZGV2LT5xcF90YWJsZS5yZGJfc2hpZnQpOwotCQlnb3RvIG91dDsKLQl9Ci0KIAltYWlsYm94ID0gbXRoY2FfYWxsb2NfbWFpbGJveChkZXYsIEdGUF9LRVJORUwpOwogCWlmIChJU19FUlIobWFpbGJveCkpIHsKIAkJZXJyID0gUFRSX0VSUihtYWlsYm94KTsKQEAgLTg5MSw2ICs4MzgsOTggQEAKIAogb3V0X21haWxib3g6CiAJbXRoY2FfZnJlZV9tYWlsYm94KGRldiwgbWFpbGJveCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpYl9xcF9hdHRyIGR1bW15X2luaXRfYXR0ciA9IHsgLnBvcnRfbnVtID0gMSB9Oworc3RhdGljIGNvbnN0IGludCBkdW1teV9pbml0X2F0dHJfbWFza1tdID0geworCVtJQl9RUFRfVURdICA9IChJQl9RUF9QS0VZX0lOREVYCQl8CisJCQlJQl9RUF9QT1JUCQkJfAorCQkJSUJfUVBfUUtFWSksCisJW0lCX1FQVF9VQ10gID0gKElCX1FQX1BLRVlfSU5ERVgJCXwKKwkJCUlCX1FQX1BPUlQJCQl8CisJCQlJQl9RUF9BQ0NFU1NfRkxBR1MpLAorCVtJQl9RUFRfUkNdICA9IChJQl9RUF9QS0VZX0lOREVYCQl8CisJCQlJQl9RUF9QT1JUCQkJfAorCQkJSUJfUVBfQUNDRVNTX0ZMQUdTKSwKKwlbSUJfUVBUX1NNSV0gPSAoSUJfUVBfUEtFWV9JTkRFWAkJfAorCQkJSUJfUVBfUUtFWSksCisJW0lCX1FQVF9HU0ldID0gKElCX1FQX1BLRVlfSU5ERVgJCXwKKwkJCUlCX1FQX1FLRVkpLAorfTsKKworaW50IG10aGNhX21vZGlmeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLCBpbnQgYXR0cl9tYXNrLAorCQkgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYgPSB0b19tZGV2KGlicXAtPmRldmljZSk7CisJc3RydWN0IG10aGNhX3FwICpxcCA9IHRvX21xcChpYnFwKTsKKwllbnVtIGliX3FwX3N0YXRlIGN1cl9zdGF0ZSwgbmV3X3N0YXRlOworCWludCBlcnIgPSAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcXAtPm11dGV4KTsKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQ1VSX1NUQVRFKSB7CisJCWN1cl9zdGF0ZSA9IGF0dHItPmN1cl9xcF9zdGF0ZTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfaXJxKCZxcC0+c3EubG9jayk7CisJCXNwaW5fbG9jaygmcXAtPnJxLmxvY2spOworCQljdXJfc3RhdGUgPSBxcC0+c3RhdGU7CisJCXNwaW5fdW5sb2NrKCZxcC0+cnEubG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmcXAtPnNxLmxvY2spOworCX0KKworCW5ld19zdGF0ZSA9IGF0dHJfbWFzayAmIElCX1FQX1NUQVRFID8gYXR0ci0+cXBfc3RhdGUgOiBjdXJfc3RhdGU7CisKKwlpZiAoIWliX21vZGlmeV9xcF9pc19vayhjdXJfc3RhdGUsIG5ld19zdGF0ZSwgaWJxcC0+cXBfdHlwZSwgYXR0cl9tYXNrKSkgeworCQltdGhjYV9kYmcoZGV2LCAiQmFkIFFQIHRyYW5zaXRpb24gKHRyYW5zcG9ydCAlZCkgIgorCQkJICAiJWQtPiVkIHdpdGggYXR0ciAweCUwOHhcbiIsCisJCQkgIHFwLT50cmFuc3BvcnQsIGN1cl9zdGF0ZSwgbmV3X3N0YXRlLAorCQkJICBhdHRyX21hc2spOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKGF0dHJfbWFzayAmIElCX1FQX1BLRVlfSU5ERVgpICYmCisJICAgICBhdHRyLT5wa2V5X2luZGV4ID49IGRldi0+bGltaXRzLnBrZXlfdGFibGVfbGVuKSB7CisJCW10aGNhX2RiZyhkZXYsICJQX0tleSBpbmRleCAoJXUpIHRvbyBsYXJnZS4gbWF4IGlzICVkXG4iLAorCQkJICBhdHRyLT5wa2V5X2luZGV4LCBkZXYtPmxpbWl0cy5wa2V5X3RhYmxlX2xlbi0xKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKChhdHRyX21hc2sgJiBJQl9RUF9QT1JUKSAmJgorCSAgICAoYXR0ci0+cG9ydF9udW0gPT0gMCB8fCBhdHRyLT5wb3J0X251bSA+IGRldi0+bGltaXRzLm51bV9wb3J0cykpIHsKKwkJbXRoY2FfZGJnKGRldiwgIlBvcnQgbnVtYmVyICgldSkgaXMgaW52YWxpZFxuIiwgYXR0ci0+cG9ydF9udW0pOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfTUFYX1FQX1JEX0FUT01JQyAmJgorCSAgICBhdHRyLT5tYXhfcmRfYXRvbWljID4gZGV2LT5saW1pdHMubWF4X3FwX2luaXRfcmRtYSkgeworCQltdGhjYV9kYmcoZGV2LCAiTWF4IHJkbWFfYXRvbWljIGFzIGluaXRpYXRvciAldSB0b28gbGFyZ2UgKG1heCBpcyAlZClcbiIsCisJCQkgIGF0dHItPm1heF9yZF9hdG9taWMsIGRldi0+bGltaXRzLm1heF9xcF9pbml0X3JkbWEpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfTUFYX0RFU1RfUkRfQVRPTUlDICYmCisJICAgIGF0dHItPm1heF9kZXN0X3JkX2F0b21pYyA+IDEgPDwgZGV2LT5xcF90YWJsZS5yZGJfc2hpZnQpIHsKKwkJbXRoY2FfZGJnKGRldiwgIk1heCByZG1hX2F0b21pYyBhcyByZXNwb25kZXIgJXUgdG9vIGxhcmdlIChtYXggJWQpXG4iLAorCQkJICBhdHRyLT5tYXhfZGVzdF9yZF9hdG9taWMsIDEgPDwgZGV2LT5xcF90YWJsZS5yZGJfc2hpZnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY3VyX3N0YXRlID09IG5ld19zdGF0ZSAmJiBjdXJfc3RhdGUgPT0gSUJfUVBTX1JFU0VUKSB7CisJCWVyciA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjdXJfc3RhdGUgPT0gSUJfUVBTX1JFU0VUICYmIG5ld19zdGF0ZSA9PSBJQl9RUFNfRVJSKSB7CisJCWVyciA9IF9fbXRoY2FfbW9kaWZ5X3FwKGlicXAsICZkdW1teV9pbml0X2F0dHIsCisJCQkJCWR1bW15X2luaXRfYXR0cl9tYXNrW2licXAtPnFwX3R5cGVdLAorCQkJCQlJQl9RUFNfUkVTRVQsIElCX1FQU19JTklUKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQljdXJfc3RhdGUgPSBJQl9RUFNfSU5JVDsKKwl9CisKKwllcnIgPSBfX210aGNhX21vZGlmeV9xcChpYnFwLCBhdHRyLCBhdHRyX21hc2ssIGN1cl9zdGF0ZSwgbmV3X3N0YXRlKTsKIAogb3V0OgogCW11dGV4X3VubG9jaygmcXAtPm11dGV4KTsKQEAgLTE4NjIsNiArMTkwMSw3IEBACiAJCQkJICAgICAgZGV2LT5rYXIgKyBNVEhDQV9SRUNFSVZFX0RPT1JCRUxMLAogCQkJCSAgICAgIE1USENBX0dFVF9ET09SQkVMTF9MT0NLKCZkZXYtPmRvb3JiZWxsX2xvY2spKTsKIAorCQkJcXAtPnJxLm5leHRfaW5kID0gaW5kOwogCQkJcXAtPnJxLmhlYWQgKz0gTVRIQ0FfVEFWT1JfTUFYX1dRRVNfUEVSX1JFQ1ZfREI7CiAJCQlzaXplMCA9IDA7CiAJCX0KQEAgLTIyNDQsMTAgKzIyODQsMTAgQEAKIAlzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKm5leHQ7CiAKIAkvKgotCSAqIEZvciBTUlFzLCBhbGwgV1FFcyBnZW5lcmF0ZSBhIENRRSwgc28gd2UncmUgYWx3YXlzIGF0IHRoZQotCSAqIGVuZCBvZiB0aGUgZG9vcmJlbGwgY2hhaW4uCisJICogRm9yIFNSUXMsIGFsbCByZWNlaXZlIFdRRXMgZ2VuZXJhdGUgYSBDUUUsIHNvIHdlJ3JlIGFsd2F5cworCSAqIGF0IHRoZSBlbmQgb2YgdGhlIGRvb3JiZWxsIGNoYWluLgogCSAqLwotCWlmIChxcC0+aWJxcC5zcnEpIHsKKwlpZiAocXAtPmlicXAuc3JxICYmICFpc19zZW5kKSB7CiAJCSpuZXdfd3FlID0gMDsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwppbmRleCA2MTk3NGIwLi5iOGYwNWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKaW5kZXggODczMTBlZS4uMjg1YzE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaApAQCAtMTMyLDEyICsxMzIsNDYgQEAKIAlfX2JlMzIgbXR1OwogfTsKIAorLyoKKyAqIFF1b3RpbmcgMTAuMy4xIFF1ZXVlIFBhaXIgYW5kIEVFIENvbnRleHQgU3RhdGVzOgorICoKKyAqIE5vdGUsIGZvciBRUHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIFNSUSwgdGhlIENvbnN1bWVyIHNob3VsZCB0YWtlIHRoZQorICogUVAgdGhyb3VnaCB0aGUgRXJyb3IgU3RhdGUgYmVmb3JlIGludm9raW5nIGEgRGVzdHJveSBRUCBvciBhIE1vZGlmeSBRUCB0byB0aGUKKyAqIFJlc2V0IFN0YXRlLiAgVGhlIENvbnN1bWVyIG1heSBpbnZva2UgdGhlIERlc3Ryb3kgUVAgd2l0aG91dCBmaXJzdCBwZXJmb3JtaW5nCisgKiBhIE1vZGlmeSBRUCB0byB0aGUgRXJyb3IgU3RhdGUgYW5kIHdhaXRpbmcgZm9yIHRoZSBBZmZpbGlhdGVkIEFzeW5jaHJvbm91cworICogTGFzdCBXUUUgUmVhY2hlZCBFdmVudC4gSG93ZXZlciwgaWYgdGhlIENvbnN1bWVyIGRvZXMgbm90IHdhaXQgZm9yIHRoZQorICogQWZmaWxpYXRlZCBBc3luY2hyb25vdXMgTGFzdCBXUUUgUmVhY2hlZCBFdmVudCwgdGhlbiBXUUUgYW5kIERhdGEgU2VnbWVudAorICogbGVha2FnZSBtYXkgb2NjdXIuIFRoZXJlZm9yZSwgaXQgaXMgZ29vZCBwcm9ncmFtbWluZyBwcmFjdGljZSB0byB0ZWFyIGRvd24gYQorICogUVAgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gU1JRIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgcHJvY2VzczoKKyAqCisgKiAtIFB1dCB0aGUgUVAgaW4gdGhlIEVycm9yIFN0YXRlCisgKiAtIFdhaXQgZm9yIHRoZSBBZmZpbGlhdGVkIEFzeW5jaHJvbm91cyBMYXN0IFdRRSBSZWFjaGVkIEV2ZW50OworICogLSBlaXRoZXI6CisgKiAgICAgICBkcmFpbiB0aGUgQ1EgYnkgaW52b2tpbmcgdGhlIFBvbGwgQ1EgdmVyYiBhbmQgZWl0aGVyIHdhaXQgZm9yIENRCisgKiAgICAgICB0byBiZSBlbXB0eSBvciB0aGUgbnVtYmVyIG9mIFBvbGwgQ1Egb3BlcmF0aW9ucyBoYXMgZXhjZWVkZWQKKyAqICAgICAgIENRIGNhcGFjaXR5IHNpemU7CisgKiAtIG9yCisgKiAgICAgICBwb3N0IGFub3RoZXIgV1IgdGhhdCBjb21wbGV0ZXMgb24gdGhlIHNhbWUgQ1EgYW5kIHdhaXQgZm9yIHRoaXMKKyAqICAgICAgIFdSIHRvIHJldHVybiBhcyBhIFdDOworICogLSBhbmQgdGhlbiBpbnZva2UgYSBEZXN0cm95IFFQIG9yIFJlc2V0IFFQLgorICoKKyAqIFdlIHVzZSB0aGUgc2Vjb25kIG9wdGlvbiBhbmQgd2FpdCBmb3IgYSBjb21wbGV0aW9uIG9uIHRoZQorICogc2FtZSBDUSBiZWZvcmUgZGVzdHJveWluZyBRUHMgYXR0YWNoZWQgdG8gb3VyIFNSUS4KKyAqLworCitlbnVtIGlwb2liX2NtX3N0YXRlIHsKKwlJUE9JQl9DTV9SWF9MSVZFLAorCUlQT0lCX0NNX1JYX0VSUk9SLCAvKiBJZ25vcmVkIGJ5IHN0YWxlIHRhc2sgKi8KKwlJUE9JQl9DTV9SWF9GTFVTSCAgLyogTGFzdCBXUUUgUmVhY2hlZCBldmVudCBvYnNlcnZlZCAqLworfTsKKwogc3RydWN0IGlwb2liX2NtX3J4IHsKIAlzdHJ1Y3QgaWJfY21faWQgICAgICppZDsKIAlzdHJ1Y3QgaWJfcXAgICAgICAgICpxcDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICBsaXN0OwogCXN0cnVjdCBuZXRfZGV2aWNlICAgKmRldjsKIAl1bnNpZ25lZCBsb25nICAgICAgICBqaWZmaWVzOworCWVudW0gaXBvaWJfY21fc3RhdGUgIHN0YXRlOwogfTsKIAogc3RydWN0IGlwb2liX2NtX3R4IHsKQEAgLTE2NSwxMCArMTk5LDE1IEBACiAJc3RydWN0IGliX3NycSAgCSAgICAgICAqc3JxOwogCXN0cnVjdCBpcG9pYl9jbV9yeF9idWYgKnNycV9yaW5nOwogCXN0cnVjdCBpYl9jbV9pZCAgICAgICAgKmlkOwotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHBhc3NpdmVfaWRzOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHBhc3NpdmVfaWRzOyAgIC8qIHN0YXRlOiBMSVZFICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgcnhfZXJyb3JfbGlzdDsgLyogc3RhdGU6IEVSUk9SICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgcnhfZmx1c2hfbGlzdDsgLyogc3RhdGU6IEZMVVNILCBkcmFpbiBub3Qgc3RhcnRlZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHJ4X2RyYWluX2xpc3Q7IC8qIHN0YXRlOiBGTFVTSCwgZHJhaW4gc3RhcnRlZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHJ4X3JlYXBfbGlzdDsgIC8qIHN0YXRlOiBGTFVTSCwgZHJhaW4gZG9uZSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIHN0YXJ0X3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgcmVhcF90YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIHNrYl90YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIHJ4X3JlYXBfdGFzazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICAgICBzdGFsZV90YXNrOwogCXN0cnVjdCBza19idWZmX2hlYWQgICAgIHNrYl9xdWV1ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBzdGFydF9saXN0OwpAQCAtMjAxLDE1ICsyNDAsMTcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG11bHRpY2FzdF9saXN0OwogCXN0cnVjdCByYl9yb290IG11bHRpY2FzdF90cmVlOwogCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBwa2V5X3Rhc2s7CisJc3RydWN0IGRlbGF5ZWRfd29yayBwa2V5X3BvbGxfdGFzazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1jYXN0X3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IGZsdXNoX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc3RhcnRfdGFzazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGFoX3JlYXBfdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGtleV9ldmVudF90YXNrOwogCiAJc3RydWN0IGliX2RldmljZSAqY2E7CiAJdTggICAgICAgICAgICAJICBwb3J0OwogCXUxNiAgICAgICAgICAgCSAgcGtleTsKKwl1MTYgICAgICAgICAgICAgICBwa2V5X2luZGV4OwogCXN0cnVjdCBpYl9wZCAgCSAqcGQ7CiAJc3RydWN0IGliX21yICAJICptcjsKIAlzdHJ1Y3QgaWJfY3EgIAkgKmNxOwpAQCAtMzMzLDEyICszNzQsMTMgQEAKIAogaW50IGlwb2liX2liX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl9kZXZpY2UgKmNhLCBpbnQgcG9ydCk7CiB2b2lkIGlwb2liX2liX2Rldl9mbHVzaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCBpcG9pYl9wa2V5X2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGlwb2liX2liX2Rldl9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBpbnQgaXBvaWJfaWJfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgaXBvaWJfaWJfZGV2X3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGlwb2liX2liX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmbHVzaCk7Ci1pbnQgaXBvaWJfaWJfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgaXBvaWJfaWJfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZsdXNoKTsKIAogaW50IGlwb2liX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl9kZXZpY2UgKmNhLCBpbnQgcG9ydCk7CiB2b2lkIGlwb2liX2Rldl9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMzg2LDYgKzQyOCw3IEBACiAKIHZvaWQgaXBvaWJfcGtleV9wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBpbnQgaXBvaWJfcGtleV9kZXZfZGVsYXlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgaXBvaWJfZHJhaW5fY3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMKaW5kZXggNzg1YmM4NS4uMDc2YTBiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpbmNsdWRlIDxuZXQvaWNtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVR19EQVRBCiBzdGF0aWMgaW50IGRhdGFfZGVidWdfbGV2ZWw7CkBAIC02Miw2ICs2MywxNyBAQAogCXUzMiByZW1vdGVfbXR1OwogfTsKIAorc3RhdGljIHN0cnVjdCBpYl9xcF9hdHRyIGlwb2liX2NtX2Vycl9hdHRyID0geworCS5xcF9zdGF0ZSA9IElCX1FQU19FUlIKK307CisKKyNkZWZpbmUgSVBPSUJfQ01fUlhfRFJBSU5fV1JJRCAweDdmZmZmZmZmCisKK3N0YXRpYyBzdHJ1Y3QgaWJfc2VuZF93ciBpcG9pYl9jbV9yeF9kcmFpbl93ciA9IHsKKwkud3JfaWQgPSBJUE9JQl9DTV9SWF9EUkFJTl9XUklELAorCS5vcGNvZGUgPSBJQl9XUl9TRU5ELAorfTsKKwogc3RhdGljIGludCBpcG9pYl9jbV90eF9oYW5kbGVyKHN0cnVjdCBpYl9jbV9pZCAqY21faWQsCiAJCQkgICAgICAgc3RydWN0IGliX2NtX2V2ZW50ICpldmVudCk7CiAKQEAgLTE1MCwxNSArMTYyLDU0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIGlwb2liX2NtX3N0YXJ0X3J4X2RyYWluKHN0cnVjdCBpcG9pYl9kZXZfcHJpdiogcHJpdikKK3sKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqYmFkX3dyOworCXN0cnVjdCBpcG9pYl9jbV9yeCAqcDsKKworCS8qIFdlIG9ubHkgcmVzZXJ2ZWQgMSBleHRyYSBzbG90IGluIENRIGZvciBkcmFpbiBXUnMsIHNvCisJICogbWFrZSBzdXJlIHdlIGhhdmUgYXQgbW9zdCAxIG91dHN0YW5kaW5nIFdSLiAqLworCWlmIChsaXN0X2VtcHR5KCZwcml2LT5jbS5yeF9mbHVzaF9saXN0KSB8fAorCSAgICAhbGlzdF9lbXB0eSgmcHJpdi0+Y20ucnhfZHJhaW5fbGlzdCkpCisJCXJldHVybjsKKworCS8qCisJICogUVBzIG9uIGZsdXNoIGxpc3QgYXJlIGVycm9yIHN0YXRlLiAgVGhpcyB3YXksIGEgImZsdXNoCisJICogZXJyb3IiIFdDIHdpbGwgYmUgaW1tZWRpYXRlbHkgZ2VuZXJhdGVkIGZvciBlYWNoIFdSIHdlIHBvc3QuCisJICovCisJcCA9IGxpc3RfZW50cnkocHJpdi0+Y20ucnhfZmx1c2hfbGlzdC5uZXh0LCB0eXBlb2YoKnApLCBsaXN0KTsKKwlpZiAoaWJfcG9zdF9zZW5kKHAtPnFwLCAmaXBvaWJfY21fcnhfZHJhaW5fd3IsICZiYWRfd3IpKQorCQlpcG9pYl93YXJuKHByaXYsICJmYWlsZWQgdG8gcG9zdCBkcmFpbiB3clxuIik7CisKKwlsaXN0X3NwbGljZV9pbml0KCZwcml2LT5jbS5yeF9mbHVzaF9saXN0LCAmcHJpdi0+Y20ucnhfZHJhaW5fbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGlwb2liX2NtX3J4X2V2ZW50X2hhbmRsZXIoc3RydWN0IGliX2V2ZW50ICpldmVudCwgdm9pZCAqY3R4KQoreworCXN0cnVjdCBpcG9pYl9jbV9yeCAqcCA9IGN0eDsKKwlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihwLT5kZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZXZlbnQtPmV2ZW50ICE9IElCX0VWRU5UX1FQX0xBU1RfV1FFX1JFQUNIRUQpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJbGlzdF9tb3ZlKCZwLT5saXN0LCAmcHJpdi0+Y20ucnhfZmx1c2hfbGlzdCk7CisJcC0+c3RhdGUgPSBJUE9JQl9DTV9SWF9GTFVTSDsKKwlpcG9pYl9jbV9zdGFydF9yeF9kcmFpbihwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaWJfcXAgKmlwb2liX2NtX2NyZWF0ZV9yeF9xcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkgICBzdHJ1Y3QgaXBvaWJfY21fcnggKnApCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyIGF0dHIgPSB7Ci0JCS5zZW5kX2NxID0gcHJpdi0+Y3EsIC8qIGRvZXMgbm90IG1hdHRlciwgd2UgbmV2ZXIgc2VuZCBhbnl0aGluZyAqLworCQkuZXZlbnRfaGFuZGxlciA9IGlwb2liX2NtX3J4X2V2ZW50X2hhbmRsZXIsCisJCS5zZW5kX2NxID0gcHJpdi0+Y3EsIC8qIEZvciBkcmFpbiBXUiAqLwogCQkucmVjdl9jcSA9IHByaXYtPmNxLAogCQkuc3JxID0gcHJpdi0+Y20uc3JxLAotCQkuY2FwLm1heF9zZW5kX3dyID0gMSwgLyogRklYTUU6IDAgU2VlbXMgbm90IHRvIHdvcmsgKi8KKwkJLmNhcC5tYXhfc2VuZF93ciA9IDEsIC8qIEZvciBkcmFpbiBXUiAqLwogCQkuY2FwLm1heF9zZW5kX3NnZSA9IDEsIC8qIEZJWE1FOiAwIFNlZW1zIG5vdCB0byB3b3JrICovCiAJCS5zcV9zaWdfdHlwZSA9IElCX1NJR05BTF9BTExfV1IsCiAJCS5xcF90eXBlID0gSUJfUVBUX1JDLApAQCAtMTk4LDYgKzI0OSwyNyBAQAogCQlpcG9pYl93YXJuKHByaXYsICJmYWlsZWQgdG8gbW9kaWZ5IFFQIHRvIFJUUjogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQorCisJLyoKKwkgKiBDdXJyZW50IE1lbGxhbm94IEhDQSBmaXJtd2FyZSB3b24ndCBnZW5lcmF0ZSBjb21wbGV0aW9ucworCSAqIHdpdGggZXJyb3IgZm9yIGRyYWluIFdScyB1bmxlc3MgdGhlIFFQIGhhcyBiZWVuIG1vdmVkIHRvCisJICogUlRTIGZpcnN0LiBUaGlzIHdvcmstYXJvdW5kIGxlYXZlcyBhIHdpbmRvdyB3aGVyZSBhIFFQIGhhcworCSAqIG1vdmVkIHRvIGVycm9yIGFzeW5jaHJvbm91c2x5LCBidXQgdGhpcyB3aWxsIGV2ZW50dWFsbHkgZ2V0CisJICogZml4ZWQgaW4gZmlybXdhcmUsIHNvIGxldCdzIG5vdCBlcnJvciBvdXQgaWYgbW9kaWZ5IFFQCisJICogZmFpbHMuCisJICovCisJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19SVFM7CisJcmV0ID0gaWJfY21faW5pdF9xcF9hdHRyKGNtX2lkLCAmcXBfYXR0ciwgJnFwX2F0dHJfbWFzayk7CisJaWYgKHJldCkgeworCQlpcG9pYl93YXJuKHByaXYsICJmYWlsZWQgdG8gaW5pdCBRUCBhdHRyIGZvciBSVFM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0ID0gaWJfbW9kaWZ5X3FwKHFwLCAmcXBfYXR0ciwgcXBfYXR0cl9tYXNrKTsKKwlpZiAocmV0KSB7CisJCWlwb2liX3dhcm4ocHJpdiwgImZhaWxlZCB0byBtb2RpZnkgUVAgdG8gUlRTOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1NiwxMSArMzI4LDEzIEBACiAKIAljbV9pZC0+Y29udGV4dCA9IHA7CiAJcC0+amlmZmllcyA9IGppZmZpZXM7CisJcC0+c3RhdGUgPSBJUE9JQl9DTV9SWF9MSVZFOwogCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCWlmIChsaXN0X2VtcHR5KCZwcml2LT5jbS5wYXNzaXZlX2lkcykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhpcG9pYl93b3JrcXVldWUsCisJCQkJICAgJnByaXYtPmNtLnN0YWxlX3Rhc2ssIElQT0lCX0NNX1JYX0RFTEFZKTsKIAlsaXN0X2FkZCgmcC0+bGlzdCwgJnByaXYtPmNtLnBhc3NpdmVfaWRzKTsKIAlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCXF1ZXVlX2RlbGF5ZWRfd29yayhpcG9pYl93b3JrcXVldWUsCi0JCQkgICAmcHJpdi0+Y20uc3RhbGVfdGFzaywgSVBPSUJfQ01fUlhfREVMQVkpOwogCXJldHVybiAwOwogCiBlcnJfcmVwOgpAQCAtMjc2LDcgKzM1MCw2IEBACiB7CiAJc3RydWN0IGlwb2liX2NtX3J4ICpwOwogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdjsKLQlpbnQgcmV0OwogCiAJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKIAljYXNlIElCX0NNX1JFUV9SRUNFSVZFRDoKQEAgLTI4OCwyMCArMzYxLDkgQEAKIAljYXNlIElCX0NNX1JFSl9SRUNFSVZFRDoKIAkJcCA9IGNtX2lkLT5jb250ZXh0OwogCQlwcml2ID0gbmV0ZGV2X3ByaXYocC0+ZGV2KTsKLQkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0JCWlmIChsaXN0X2VtcHR5KCZwLT5saXN0KSkKLQkJCXJldCA9IDA7IC8qIENvbm5lY3Rpb24gaXMgZ29pbmcgYXdheSBhbHJlYWR5LiAqLwotCQllbHNlIHsKLQkJCWxpc3RfZGVsX2luaXQoJnAtPmxpc3QpOwotCQkJcmV0ID0gLUVDT05OUkVTRVQ7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQkJaWYgKHJldCkgewotCQkJaWJfZGVzdHJveV9xcChwLT5xcCk7Ci0JCQlrZnJlZShwKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJcmV0dXJuIDA7CisJCWlmIChpYl9tb2RpZnlfcXAocC0+cXAsICZpcG9pYl9jbV9lcnJfYXR0ciwgSUJfUVBfU1RBVEUpKQorCQkJaXBvaWJfd2Fybihwcml2LCAidW5hYmxlIHRvIG1vdmUgcXAgdG8gZXJyb3Igc3RhdGVcbiIpOworCQkvKiBGYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9CkBAIC0zNTMsOCArNDE1LDE1IEBACiAJCSAgICAgICB3cl9pZCwgd2MtPnN0YXR1cyk7CiAKIAlpZiAodW5saWtlbHkod3JfaWQgPj0gaXBvaWJfcmVjdnFfc2l6ZSkpIHsKLQkJaXBvaWJfd2Fybihwcml2LCAiY20gcmVjdiBjb21wbGV0aW9uIGV2ZW50IHdpdGggd3JpZCAlZCAoPiAlZClcbiIsCi0JCQkgICB3cl9pZCwgaXBvaWJfcmVjdnFfc2l6ZSk7CisJCWlmICh3cl9pZCA9PSAoSVBPSUJfQ01fUlhfRFJBSU5fV1JJRCAmIH5JUE9JQl9DTV9PUF9TUlEpKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJbGlzdF9zcGxpY2VfaW5pdCgmcHJpdi0+Y20ucnhfZHJhaW5fbGlzdCwgJnByaXYtPmNtLnJ4X3JlYXBfbGlzdCk7CisJCQlpcG9pYl9jbV9zdGFydF9yeF9kcmFpbihwcml2KTsKKwkJCXF1ZXVlX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+Y20ucnhfcmVhcF90YXNrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJfSBlbHNlCisJCQlpcG9pYl93YXJuKHByaXYsICJjbSByZWN2IGNvbXBsZXRpb24gZXZlbnQgd2l0aCB3cmlkICVkICg+ICVkKVxuIiwKKwkJCQkgICB3cl9pZCwgaXBvaWJfcmVjdnFfc2l6ZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM3MywxMyArNDQyLDExIEBACiAJCWlmIChwICYmIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcC0+amlmZmllcyArIElQT0lCX0NNX1JYX1VQREFURV9USU1FKSkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJCXAtPmppZmZpZXMgPSBqaWZmaWVzOwotCQkJLyogTW92ZSB0aGlzIGVudHJ5IHRvIGxpc3QgaGVhZCwgYnV0IGRvCi0JCQkgKiBub3QgcmUtYWRkIGl0IGlmIGl0IGhhcyBiZWVuIHJlbW92ZWQuICovCi0JCQlpZiAoIWxpc3RfZW1wdHkoJnAtPmxpc3QpKQorCQkJLyogTW92ZSB0aGlzIGVudHJ5IHRvIGxpc3QgaGVhZCwgYnV0IGRvIG5vdCByZS1hZGQgaXQKKwkJCSAqIGlmIGl0IGhhcyBiZWVuIG1vdmVkIG91dCBvZiBsaXN0LiAqLworCQkJaWYgKHAtPnN0YXRlID09IElQT0lCX0NNX1JYX0xJVkUpCiAJCQkJbGlzdF9tb3ZlKCZwLT5saXN0LCAmcHJpdi0+Y20ucGFzc2l2ZV9pZHMpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQkJcXVldWVfZGVsYXllZF93b3JrKGlwb2liX3dvcmtxdWV1ZSwKLQkJCQkJICAgJnByaXYtPmNtLnN0YWxlX3Rhc2ssIElQT0lCX0NNX1JYX0RFTEFZKTsKIAkJfQogCX0KIApAQCAtNTkzLDggKzY2MCw3IEBACiAJaWYgKElTX0VSUihwcml2LT5jbS5pZCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byBjcmVhdGUgQ00gSURcbiIsIHByaXYtPmNhLT5uYW1lKTsKIAkJcmV0ID0gUFRSX0VSUihwcml2LT5jbS5pZCk7Ci0JCXByaXYtPmNtLmlkID0gTlVMTDsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJfY207CiAJfQogCiAJcmV0ID0gaWJfY21fbGlzdGVuKHByaXYtPmNtLmlkLCBjcHVfdG9fYmU2NChJUE9JQl9DTV9JRVRGX0lEIHwgcHJpdi0+cXAtPnFwX251bSksCkBAIC02MDIsMzQgKzY2OCw3NiBAQAogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byBsaXN0ZW4gb24gSUQgMHglbGx4XG4iLCBwcml2LT5jYS0+bmFtZSwKIAkJICAgICAgIElQT0lCX0NNX0lFVEZfSUQgfCBwcml2LT5xcC0+cXBfbnVtKTsKLQkJaWJfZGVzdHJveV9jbV9pZChwcml2LT5jbS5pZCk7Ci0JCXByaXYtPmNtLmlkID0gTlVMTDsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJfbGlzdGVuOwogCX0KKwogCXJldHVybiAwOworCitlcnJfbGlzdGVuOgorCWliX2Rlc3Ryb3lfY21faWQocHJpdi0+Y20uaWQpOworZXJyX2NtOgorCXByaXYtPmNtLmlkID0gTlVMTDsKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGlwb2liX2NtX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaXBvaWJfY21fcnggKnA7CisJc3RydWN0IGlwb2liX2NtX3J4ICpwLCAqbjsKKwl1bnNpZ25lZCBsb25nIGJlZ2luOworCUxJU1RfSEVBRChsaXN0KTsKKwlpbnQgcmV0OwogCiAJaWYgKCFJUE9JQl9DTV9TVVBQT1JURUQoZGV2LT5kZXZfYWRkcikgfHwgIXByaXYtPmNtLmlkKQogCQlyZXR1cm47CiAKIAlpYl9kZXN0cm95X2NtX2lkKHByaXYtPmNtLmlkKTsKIAlwcml2LT5jbS5pZCA9IE5VTEw7CisKIAlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnByaXYtPmNtLnBhc3NpdmVfaWRzKSkgewogCQlwID0gbGlzdF9lbnRyeShwcml2LT5jbS5wYXNzaXZlX2lkcy5uZXh0LCB0eXBlb2YoKnApLCBsaXN0KTsKLQkJbGlzdF9kZWxfaW5pdCgmcC0+bGlzdCk7CisJCWxpc3RfbW92ZSgmcC0+bGlzdCwgJnByaXYtPmNtLnJ4X2Vycm9yX2xpc3QpOworCQlwLT5zdGF0ZSA9IElQT0lCX0NNX1JYX0VSUk9SOwogCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCQlyZXQgPSBpYl9tb2RpZnlfcXAocC0+cXAsICZpcG9pYl9jbV9lcnJfYXR0ciwgSUJfUVBfU1RBVEUpOworCQlpZiAocmV0KQorCQkJaXBvaWJfd2Fybihwcml2LCAidW5hYmxlIHRvIG1vdmUgcXAgdG8gZXJyb3Igc3RhdGU6ICVkXG4iLCByZXQpOworCQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwl9CisKKwkvKiBXYWl0IGZvciBhbGwgUlggdG8gYmUgZHJhaW5lZCAqLworCWJlZ2luID0gamlmZmllczsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+Y20ucnhfZXJyb3JfbGlzdCkgfHwKKwkgICAgICAgIWxpc3RfZW1wdHkoJnByaXYtPmNtLnJ4X2ZsdXNoX2xpc3QpIHx8CisJICAgICAgICFsaXN0X2VtcHR5KCZwcml2LT5jbS5yeF9kcmFpbl9saXN0KSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBiZWdpbiArIDUgKiBIWikpIHsKKwkJCWlwb2liX3dhcm4ocHJpdiwgIlJYIGRyYWluIHRpbWluZyBvdXRcbiIpOworCisJCQkvKgorCQkJICogYXNzdW1lIHRoZSBIVyBpcyB3ZWRnZWQgYW5kIGp1c3QgZnJlZSB1cCBldmVyeXRoaW5nLgorCQkJICovCisJCQlsaXN0X3NwbGljZV9pbml0KCZwcml2LT5jbS5yeF9mbHVzaF9saXN0LCAmbGlzdCk7CisJCQlsaXN0X3NwbGljZV9pbml0KCZwcml2LT5jbS5yeF9lcnJvcl9saXN0LCAmbGlzdCk7CisJCQlsaXN0X3NwbGljZV9pbml0KCZwcml2LT5jbS5yeF9kcmFpbl9saXN0LCAmbGlzdCk7CisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCQltc2xlZXAoMSk7CisJCWlwb2liX2RyYWluX2NxKGRldik7CisJCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCX0KKworCWxpc3Rfc3BsaWNlX2luaXQoJnByaXYtPmNtLnJ4X3JlYXBfbGlzdCwgJmxpc3QpOworCisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmbGlzdCwgbGlzdCkgewogCQlpYl9kZXN0cm95X2NtX2lkKHAtPmlkKTsKIAkJaWJfZGVzdHJveV9xcChwLT5xcCk7CiAJCWtmcmVlKHApOwotCQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmNtLnN0YWxlX3Rhc2spOwogfQpAQCAtMTA4MCwyNiArMTE4OCw1MCBAQAogCQlxdWV1ZV93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPmNtLnNrYl90YXNrKTsKIH0KIAorc3RhdGljIHZvaWQgaXBvaWJfY21fcnhfcmVhcChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcG9pYl9kZXZfcHJpdiwKKwkJCQkJCSAgIGNtLnJ4X3JlYXBfdGFzayk7CisJc3RydWN0IGlwb2liX2NtX3J4ICpwLCAqbjsKKwlMSVNUX0hFQUQobGlzdCk7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlsaXN0X3NwbGljZV9pbml0KCZwcml2LT5jbS5yeF9yZWFwX2xpc3QsICZsaXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZsaXN0LCBsaXN0KSB7CisJCWliX2Rlc3Ryb3lfY21faWQocC0+aWQpOworCQlpYl9kZXN0cm95X3FwKHAtPnFwKTsKKwkJa2ZyZWUocCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBpcG9pYl9jbV9zdGFsZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGlwb2liX2Rldl9wcml2LAogCQkJCQkJICAgY20uc3RhbGVfdGFzay53b3JrKTsKIAlzdHJ1Y3QgaXBvaWJfY21fcnggKnA7CisJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+Y20ucGFzc2l2ZV9pZHMpKSB7Ci0JCS8qIExpc3QgaWYgc29ydGVkIGJ5IExSVSwgc3RhcnQgZnJvbSB0YWlsLAorCQkvKiBMaXN0IGlzIHNvcnRlZCBieSBMUlUsIHN0YXJ0IGZyb20gdGFpbCwKIAkJICogc3RvcCB3aGVuIHdlIHNlZSBhIHJlY2VudGx5IHVzZWQgZW50cnkgKi8KIAkJcCA9IGxpc3RfZW50cnkocHJpdi0+Y20ucGFzc2l2ZV9pZHMucHJldiwgdHlwZW9mKCpwKSwgbGlzdCk7CiAJCWlmICh0aW1lX2JlZm9yZV9lcShqaWZmaWVzLCBwLT5qaWZmaWVzICsgSVBPSUJfQ01fUlhfVElNRU9VVCkpCiAJCQlicmVhazsKLQkJbGlzdF9kZWxfaW5pdCgmcC0+bGlzdCk7CisJCWxpc3RfbW92ZSgmcC0+bGlzdCwgJnByaXYtPmNtLnJ4X2Vycm9yX2xpc3QpOworCQlwLT5zdGF0ZSA9IElQT0lCX0NNX1JYX0VSUk9SOwogCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCQlpYl9kZXN0cm95X2NtX2lkKHAtPmlkKTsKLQkJaWJfZGVzdHJveV9xcChwLT5xcCk7Ci0JCWtmcmVlKHApOworCQlyZXQgPSBpYl9tb2RpZnlfcXAocC0+cXAsICZpcG9pYl9jbV9lcnJfYXR0ciwgSUJfUVBfU1RBVEUpOworCQlpZiAocmV0KQorCQkJaXBvaWJfd2Fybihwcml2LCAidW5hYmxlIHRvIG1vdmUgcXAgdG8gZXJyb3Igc3RhdGU6ICVkXG4iLCByZXQpOwogCQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAl9CisKKwlpZiAoIWxpc3RfZW1wdHkoJnByaXYtPmNtLnBhc3NpdmVfaWRzKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKGlwb2liX3dvcmtxdWV1ZSwKKwkJCQkgICAmcHJpdi0+Y20uc3RhbGVfdGFzaywgSVBPSUJfQ01fUlhfREVMQVkpOwogCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiB9CiAKQEAgLTExNjEsOSArMTI5MywxNCBAQAogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5jbS5wYXNzaXZlX2lkcyk7CiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmNtLnJlYXBfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmNtLnN0YXJ0X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5jbS5yeF9lcnJvcl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+Y20ucnhfZmx1c2hfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmNtLnJ4X2RyYWluX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5jbS5yeF9yZWFwX2xpc3QpOwogCUlOSVRfV09SSygmcHJpdi0+Y20uc3RhcnRfdGFzaywgaXBvaWJfY21fdHhfc3RhcnQpOwogCUlOSVRfV09SSygmcHJpdi0+Y20ucmVhcF90YXNrLCBpcG9pYl9jbV90eF9yZWFwKTsKIAlJTklUX1dPUksoJnByaXYtPmNtLnNrYl90YXNrLCBpcG9pYl9jbV9za2JfcmVhcCk7CisJSU5JVF9XT1JLKCZwcml2LT5jbS5yeF9yZWFwX3Rhc2ssIGlwb2liX2NtX3J4X3JlYXApOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5jbS5zdGFsZV90YXNrLCBpcG9pYl9jbV9zdGFsZV90YXNrKTsKIAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPmNtLnNrYl9xdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggNjhkNzJjNi4uODQwNGYwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwpAQCAtNDQ4LDYgKzQ0OCwxMyBAQAogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKIAorCWlmIChpYl9maW5kX3BrZXkocHJpdi0+Y2EsIHByaXYtPnBvcnQsIHByaXYtPnBrZXksICZwcml2LT5wa2V5X2luZGV4KSkgeworCQlpcG9pYl93YXJuKHByaXYsICJQX0tleSAweCUwNHggbm90IGZvdW5kXG4iLCBwcml2LT5wa2V5KTsKKwkJY2xlYXJfYml0KElQT0lCX1BLRVlfQVNTSUdORUQsICZwcml2LT5mbGFncyk7CisJCXJldHVybiAtMTsKKwl9CisJc2V0X2JpdChJUE9JQl9QS0VZX0FTU0lHTkVELCAmcHJpdi0+ZmxhZ3MpOworCiAJcmV0ID0gaXBvaWJfaW5pdF9xcChkZXYpOwogCWlmIChyZXQpIHsKIAkJaXBvaWJfd2Fybihwcml2LCAiaXBvaWJfaW5pdF9xcCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKQEAgLTQ1NywxNCArNDY0LDE0IEBACiAJcmV0ID0gaXBvaWJfaWJfcG9zdF9yZWNlaXZlcyhkZXYpOwogCWlmIChyZXQpIHsKIAkJaXBvaWJfd2Fybihwcml2LCAiaXBvaWJfaWJfcG9zdF9yZWNlaXZlcyByZXR1cm5lZCAlZFxuIiwgcmV0KTsKLQkJaXBvaWJfaWJfZGV2X3N0b3AoZGV2KTsKKwkJaXBvaWJfaWJfZGV2X3N0b3AoZGV2LCAxKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldCA9IGlwb2liX2NtX2Rldl9vcGVuKGRldik7CiAJaWYgKHJldCkgewotCQlpcG9pYl93YXJuKHByaXYsICJpcG9pYl9pYl9wb3N0X3JlY2VpdmVzIHJldHVybmVkICVkXG4iLCByZXQpOwotCQlpcG9pYl9pYl9kZXZfc3RvcChkZXYpOworCQlpcG9pYl93YXJuKHByaXYsICJpcG9pYl9jbV9kZXZfb3BlbiByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJaXBvaWJfaWJfZGV2X3N0b3AoZGV2LCAxKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNTE2LDcgKzUyMyw3IEBACiAJaWYgKCF0ZXN0X2JpdChJUE9JQl9QS0VZX0FTU0lHTkVELCAmcHJpdi0+ZmxhZ3MpKSB7CiAJCW11dGV4X2xvY2soJnBrZXlfbXV0ZXgpOwogCQlzZXRfYml0KElQT0lCX1BLRVlfU1RPUCwgJnByaXYtPmZsYWdzKTsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cGtleV90YXNrKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cGtleV9wb2xsX3Rhc2spOwogCQltdXRleF91bmxvY2soJnBrZXlfbXV0ZXgpOwogCQlpZiAoZmx1c2gpCiAJCQlmbHVzaF93b3JrcXVldWUoaXBvaWJfd29ya3F1ZXVlKTsKQEAgLTU0MywxMyArNTUwLDMwIEBACiAJcmV0dXJuIHBlbmRpbmc7CiB9CiAKLWludCBpcG9pYl9pYl9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQordm9pZCBpcG9pYl9kcmFpbl9jcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGksIG47CisJZG8geworCQluID0gaWJfcG9sbF9jcShwcml2LT5jcSwgSVBPSUJfTlVNX1dDLCBwcml2LT5pYndjKTsKKwkJZm9yIChpID0gMDsgaSA8IG47ICsraSkgeworCQkJaWYgKHByaXYtPmlid2NbaV0ud3JfaWQgJiBJUE9JQl9DTV9PUF9TUlEpCisJCQkJaXBvaWJfY21faGFuZGxlX3J4X3djKGRldiwgcHJpdi0+aWJ3YyArIGkpOworCQkJZWxzZSBpZiAocHJpdi0+aWJ3Y1tpXS53cl9pZCAmIElQT0lCX09QX1JFQ1YpCisJCQkJaXBvaWJfaWJfaGFuZGxlX3J4X3djKGRldiwgcHJpdi0+aWJ3YyArIGkpOworCQkJZWxzZQorCQkJCWlwb2liX2liX2hhbmRsZV90eF93YyhkZXYsIHByaXYtPmlid2MgKyBpKTsKKwkJfQorCX0gd2hpbGUgKG4gPT0gSVBPSUJfTlVNX1dDKTsKK30KKworaW50IGlwb2liX2liX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmbHVzaCkKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CiAJdW5zaWduZWQgbG9uZyBiZWdpbjsKIAlzdHJ1Y3QgaXBvaWJfdHhfYnVmICp0eF9yZXE7Ci0JaW50IGksIG47CisJaW50IGk7CiAKIAljbGVhcl9iaXQoSVBPSUJfRkxBR19JTklUSUFMSVpFRCwgJnByaXYtPmZsYWdzKTsKIAluZXRpZl9wb2xsX2Rpc2FibGUoZGV2KTsKQEAgLTYwNCwxNyArNjI4LDcgQEAKIAkJCWdvdG8gdGltZW91dDsKIAkJfQogCi0JCWRvIHsKLQkJCW4gPSBpYl9wb2xsX2NxKHByaXYtPmNxLCBJUE9JQl9OVU1fV0MsIHByaXYtPmlid2MpOwotCQkJZm9yIChpID0gMDsgaSA8IG47ICsraSkgewotCQkJCWlmIChwcml2LT5pYndjW2ldLndyX2lkICYgSVBPSUJfQ01fT1BfU1JRKQotCQkJCQlpcG9pYl9jbV9oYW5kbGVfcnhfd2MoZGV2LCBwcml2LT5pYndjICsgaSk7Ci0JCQkJZWxzZSBpZiAocHJpdi0+aWJ3Y1tpXS53cl9pZCAmIElQT0lCX09QX1JFQ1YpCi0JCQkJCWlwb2liX2liX2hhbmRsZV9yeF93YyhkZXYsIHByaXYtPmlid2MgKyBpKTsKLQkJCQllbHNlCi0JCQkJCWlwb2liX2liX2hhbmRsZV90eF93YyhkZXYsIHByaXYtPmlid2MgKyBpKTsKLQkJCX0KLQkJfSB3aGlsZSAobiA9PSBJUE9JQl9OVU1fV0MpOworCQlpcG9pYl9kcmFpbl9jcShkZXYpOwogCiAJCW1zbGVlcCgxKTsKIAl9CkBAIC02MjksNyArNjQzLDggQEAKIAkvKiBXYWl0IGZvciBhbGwgQUhzIHRvIGJlIHJlYXBlZCAqLwogCXNldF9iaXQoSVBPSUJfU1RPUF9SRUFQRVIsICZwcml2LT5mbGFncyk7CiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+YWhfcmVhcF90YXNrKTsKLQlmbHVzaF93b3JrcXVldWUoaXBvaWJfd29ya3F1ZXVlKTsKKwlpZiAoZmx1c2gpCisJCWZsdXNoX3dvcmtxdWV1ZShpcG9pYl93b3JrcXVldWUpOwogCiAJYmVnaW4gPSBqaWZmaWVzOwogCkBAIC02NzMsMTMgKzY4OCwyNCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGlwb2liX2liX2Rldl9mbHVzaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBfX2lwb2liX2liX2Rldl9mbHVzaChzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYsIGludCBwa2V5X2V2ZW50KQogewotCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqY3ByaXYsICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcG9pYl9kZXZfcHJpdiwgZmx1c2hfdGFzayk7CisJc3RydWN0IGlwb2liX2Rldl9wcml2ICpjcHJpdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXUxNiBuZXdfaW5kZXg7CiAKLQlpZiAoIXRlc3RfYml0KElQT0lCX0ZMQUdfSU5JVElBTElaRUQsICZwcml2LT5mbGFncykgKSB7CisJbXV0ZXhfbG9jaygmcHJpdi0+dmxhbl9tdXRleCk7CisKKwkvKgorCSAqIEZsdXNoIGFueSBjaGlsZCBpbnRlcmZhY2VzIHRvbyAtLSB0aGV5IG1pZ2h0IGJlIHVwIGV2ZW4gaWYKKwkgKiB0aGUgcGFyZW50IGlzIGRvd24uCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcHJpdiwgJnByaXYtPmNoaWxkX2ludGZzLCBsaXN0KQorCQlfX2lwb2liX2liX2Rldl9mbHVzaChjcHJpdiwgcGtleV9ldmVudCk7CisKKwltdXRleF91bmxvY2soJnByaXYtPnZsYW5fbXV0ZXgpOworCisJaWYgKCF0ZXN0X2JpdChJUE9JQl9GTEFHX0lOSVRJQUxJWkVELCAmcHJpdi0+ZmxhZ3MpKSB7CiAJCWlwb2liX2RiZyhwcml2LCAiTm90IGZsdXNoaW5nIC0gSVBPSUJfRkxBR19JTklUSUFMSVpFRCBub3Qgc2V0LlxuIik7CiAJCXJldHVybjsKIAl9CkBAIC02ODksMTAgKzcxNSwzMiBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKHBrZXlfZXZlbnQpIHsKKwkJaWYgKGliX2ZpbmRfcGtleShwcml2LT5jYSwgcHJpdi0+cG9ydCwgcHJpdi0+cGtleSwgJm5ld19pbmRleCkpIHsKKwkJCWNsZWFyX2JpdChJUE9JQl9QS0VZX0FTU0lHTkVELCAmcHJpdi0+ZmxhZ3MpOworCQkJaXBvaWJfaWJfZGV2X2Rvd24oZGV2LCAwKTsKKwkJCWlwb2liX3BrZXlfZGV2X2RlbGF5X29wZW4oZGV2KTsKKwkJCXJldHVybjsKKwkJfQorCQlzZXRfYml0KElQT0lCX1BLRVlfQVNTSUdORUQsICZwcml2LT5mbGFncyk7CisKKwkJLyogcmVzdGFydCBRUCBvbmx5IGlmIFBfS2V5IGluZGV4IGlzIGNoYW5nZWQgKi8KKwkJaWYgKG5ld19pbmRleCA9PSBwcml2LT5wa2V5X2luZGV4KSB7CisJCQlpcG9pYl9kYmcocHJpdiwgIk5vdCBmbHVzaGluZyAtIFBfS2V5IGluZGV4IG5vdCBjaGFuZ2VkLlxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJcHJpdi0+cGtleV9pbmRleCA9IG5ld19pbmRleDsKKwl9CisKIAlpcG9pYl9kYmcocHJpdiwgImZsdXNoaW5nXG4iKTsKIAogCWlwb2liX2liX2Rldl9kb3duKGRldiwgMCk7CiAKKwlpZiAocGtleV9ldmVudCkgeworCQlpcG9pYl9pYl9kZXZfc3RvcChkZXYsIDApOworCQlpcG9pYl9pYl9kZXZfb3BlbihkZXYpOworCX0KKwogCS8qCiAJICogVGhlIGRldmljZSBjb3VsZCBoYXZlIGJlZW4gYnJvdWdodCBkb3duIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCB3aGVuCiAJICogd2UgZ2V0IGhlcmUsIGRvbid0IGJyaW5nIGl0IGJhY2sgdXAgaWYgaXQncyBub3QgY29uZmlndXJlZCB1cApAQCAtNzAxLDE0ICs3NDksMjQgQEAKIAkJaXBvaWJfaWJfZGV2X3VwKGRldik7CiAJCWlwb2liX21jYXN0X3Jlc3RhcnRfdGFzaygmcHJpdi0+cmVzdGFydF90YXNrKTsKIAl9Cit9CiAKLQltdXRleF9sb2NrKCZwcml2LT52bGFuX211dGV4KTsKK3ZvaWQgaXBvaWJfaWJfZGV2X2ZsdXNoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGlwb2liX2Rldl9wcml2LCBmbHVzaF90YXNrKTsKIAotCS8qIEZsdXNoIGFueSBjaGlsZCBpbnRlcmZhY2VzIHRvbyAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3ByaXYsICZwcml2LT5jaGlsZF9pbnRmcywgbGlzdCkKLQkJaXBvaWJfaWJfZGV2X2ZsdXNoKCZjcHJpdi0+Zmx1c2hfdGFzayk7CisJaXBvaWJfZGJnKHByaXYsICJGbHVzaGluZyAlc1xuIiwgcHJpdi0+ZGV2LT5uYW1lKTsKKwlfX2lwb2liX2liX2Rldl9mbHVzaChwcml2LCAwKTsKK30KIAotCW11dGV4X3VubG9jaygmcHJpdi0+dmxhbl9tdXRleCk7Cit2b2lkIGlwb2liX3BrZXlfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYsIHBrZXlfZXZlbnRfdGFzayk7CisKKwlpcG9pYl9kYmcocHJpdiwgIkZsdXNoaW5nICVzIGFuZCByZXN0YXJ0aW5nIGl0cyBRUFxuIiwgcHJpdi0+ZGV2LT5uYW1lKTsKKwlfX2lwb2liX2liX2Rldl9mbHVzaChwcml2LCAxKTsKIH0KIAogdm9pZCBpcG9pYl9pYl9kZXZfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNzM2LDcgKzc5NCw3IEBACiB2b2lkIGlwb2liX3BrZXlfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcG9pYl9kZXZfcHJpdiwgcGtleV90YXNrLndvcmspOworCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGlwb2liX2Rldl9wcml2LCBwa2V5X3BvbGxfdGFzay53b3JrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OwogCiAJaXBvaWJfcGtleV9kZXZfY2hlY2tfcHJlc2VuY2UoZGV2KTsKQEAgLTc0Nyw3ICs4MDUsNyBAQAogCQltdXRleF9sb2NrKCZwa2V5X211dGV4KTsKIAkJaWYgKCF0ZXN0X2JpdChJUE9JQl9QS0VZX1NUT1AsICZwcml2LT5mbGFncykpCiAJCQlxdWV1ZV9kZWxheWVkX3dvcmsoaXBvaWJfd29ya3F1ZXVlLAotCQkJCQkgICAmcHJpdi0+cGtleV90YXNrLAorCQkJCQkgICAmcHJpdi0+cGtleV9wb2xsX3Rhc2ssCiAJCQkJCSAgIEhaKTsKIAkJbXV0ZXhfdW5sb2NrKCZwa2V5X211dGV4KTsKIAl9CkBAIC03NjYsNyArODI0LDcgQEAKIAkJbXV0ZXhfbG9jaygmcGtleV9tdXRleCk7CiAJCWNsZWFyX2JpdChJUE9JQl9QS0VZX1NUT1AsICZwcml2LT5mbGFncyk7CiAJCXF1ZXVlX2RlbGF5ZWRfd29yayhpcG9pYl93b3JrcXVldWUsCi0JCQkJICAgJnByaXYtPnBrZXlfdGFzaywKKwkJCQkgICAmcHJpdi0+cGtleV9wb2xsX3Rhc2ssCiAJCQkJICAgSFopOwogCQltdXRleF91bmxvY2soJnBrZXlfbXV0ZXgpOwogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggMGE0MjhmMi4uODk0YjFkY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaXBvaWJfaWJfZGV2X3VwKGRldikpIHsKLQkJaXBvaWJfaWJfZGV2X3N0b3AoZGV2KTsKKwkJaXBvaWJfaWJfZGV2X3N0b3AoZGV2LCAxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNTIsNyArMTUyLDcgQEAKIAlmbHVzaF93b3JrcXVldWUoaXBvaWJfd29ya3F1ZXVlKTsKIAogCWlwb2liX2liX2Rldl9kb3duKGRldiwgMSk7Ci0JaXBvaWJfaWJfZGV2X3N0b3AoZGV2KTsKKwlpcG9pYl9pYl9kZXZfc3RvcChkZXYsIDEpOwogCiAJaWYgKCF0ZXN0X2JpdChJUE9JQl9GTEFHX1NVQklOVEVSRkFDRSwgJnByaXYtPmZsYWdzKSkgewogCQlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKmNwcml2OwpAQCAtOTg4LDcgKzk4OCw4IEBACiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmRlYWRfYWhzKTsKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+bXVsdGljYXN0X2xpc3QpOwogCi0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnBrZXlfdGFzaywgICAgaXBvaWJfcGtleV9wb2xsKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cGtleV9wb2xsX3Rhc2ssIGlwb2liX3BrZXlfcG9sbCk7CisJSU5JVF9XT1JLKCZwcml2LT5wa2V5X2V2ZW50X3Rhc2ssIGlwb2liX3BrZXlfZXZlbnQpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5tY2FzdF90YXNrLCAgIGlwb2liX21jYXN0X2pvaW5fdGFzayk7CiAJSU5JVF9XT1JLKCZwcml2LT5mbHVzaF90YXNrLCAgIGlwb2liX2liX2Rldl9mbHVzaCk7CiAJSU5JVF9XT1JLKCZwcml2LT5yZXN0YXJ0X3Rhc2ssIGlwb2liX21jYXN0X3Jlc3RhcnRfdGFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCA1NGZiZWFkLi5hYWUzNjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTUyNCw3ICs1MjQsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAoaWJfcXVlcnlfZ2lkKHByaXYtPmNhLCBwcml2LT5wb3J0LCAwLCAmcHJpdi0+bG9jYWxfZ2lkKSkKLQkJaXBvaWJfd2Fybihwcml2LCAiaWJfZ2lkX2VudHJ5X2dldCgpIGZhaWxlZFxuIik7CisJCWlwb2liX3dhcm4ocHJpdiwgImliX3F1ZXJ5X2dpZCgpIGZhaWxlZFxuIik7CiAJZWxzZQogCQltZW1jcHkocHJpdi0+ZGV2LT5kZXZfYWRkciArIDQsIHByaXYtPmxvY2FsX2dpZC5yYXcsIHNpemVvZiAodW5pb24gaWJfZ2lkKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYwppbmRleCA1YzNjNmE0Li45ODJlYjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92ZXJicy5jCkBAIC0zMyw4ICszMyw2IEBACiAgKiAkSWQ6IGlwb2liX3ZlcmJzLmMgMTM0OSAyMDA0LTEyLTE2IDIxOjA5OjQzWiByb2xhbmQgJAogICovCiAKLSNpbmNsdWRlIDxyZG1hL2liX2NhY2hlLmg+Ci0KICNpbmNsdWRlICJpcG9pYi5oIgogCiBpbnQgaXBvaWJfbWNhc3RfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtbGlkLCB1bmlvbiBpYl9naWQgKm1naWQpCkBAIC00OSw3ICs0Nyw3IEBACiAJaWYgKCFxcF9hdHRyKQogCQlnb3RvIG91dDsKIAotCWlmIChpYl9maW5kX2NhY2hlZF9wa2V5KHByaXYtPmNhLCBwcml2LT5wb3J0LCBwcml2LT5wa2V5LCAmcGtleV9pbmRleCkpIHsKKwlpZiAoaWJfZmluZF9wa2V5KHByaXYtPmNhLCBwcml2LT5wb3J0LCBwcml2LT5wa2V5LCAmcGtleV9pbmRleCkpIHsKIAkJY2xlYXJfYml0KElQT0lCX1BLRVlfQVNTSUdORUQsICZwcml2LT5mbGFncyk7CiAJCXJldCA9IC1FTlhJTzsKIAkJZ290byBvdXQ7CkBAIC05NCwyNiArOTIsMTYgQEAKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXQ7Ci0JdTE2IHBrZXlfaW5kZXg7CiAJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKIAlpbnQgYXR0cl9tYXNrOwogCi0JLyoKLQkgKiBTZWFyY2ggdGhyb3VnaCB0aGUgcG9ydCBQX0tleSB0YWJsZSBmb3IgdGhlIHJlcXVlc3RlZCBwa2V5IHZhbHVlLgotCSAqIFRoZSBwb3J0IGhhcyB0byBiZSBhc3NpZ25lZCB0byB0aGUgcmVzcGVjdGl2ZSBJQiBwYXJ0aXRpb24gaW4KLQkgKiBhZHZhbmNlLgotCSAqLwotCXJldCA9IGliX2ZpbmRfY2FjaGVkX3BrZXkocHJpdi0+Y2EsIHByaXYtPnBvcnQsIHByaXYtPnBrZXksICZwa2V5X2luZGV4KTsKLQlpZiAocmV0KSB7Ci0JCWNsZWFyX2JpdChJUE9JQl9QS0VZX0FTU0lHTkVELCAmcHJpdi0+ZmxhZ3MpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlzZXRfYml0KElQT0lCX1BLRVlfQVNTSUdORUQsICZwcml2LT5mbGFncyk7CisJaWYgKCF0ZXN0X2JpdChJUE9JQl9QS0VZX0FTU0lHTkVELCAmcHJpdi0+ZmxhZ3MpKQorCQlyZXR1cm4gLTE7CiAKIAlxcF9hdHRyLnFwX3N0YXRlID0gSUJfUVBTX0lOSVQ7CiAJcXBfYXR0ci5xa2V5ID0gMDsKIAlxcF9hdHRyLnBvcnRfbnVtID0gcHJpdi0+cG9ydDsKLQlxcF9hdHRyLnBrZXlfaW5kZXggPSBwa2V5X2luZGV4OworCXFwX2F0dHIucGtleV9pbmRleCA9IHByaXYtPnBrZXlfaW5kZXg7CiAJYXR0cl9tYXNrID0KIAkgICAgSUJfUVBfUUtFWSB8CiAJICAgIElCX1FQX1BPUlQgfApAQCAtMTg1LDcgKzE3Myw3IEBACiAJc2l6ZSA9IGlwb2liX3NlbmRxX3NpemUgKyBpcG9pYl9yZWN2cV9zaXplICsgMTsKIAlyZXQgPSBpcG9pYl9jbV9kZXZfaW5pdChkZXYpOwogCWlmICghcmV0KQotCQlzaXplICs9IGlwb2liX3JlY3ZxX3NpemU7CisJCXNpemUgKz0gaXBvaWJfcmVjdnFfc2l6ZSArIDEgLyogMSBleHRyYSBmb3IgcnhfZHJhaW5fcXAgKi87CiAKIAlwcml2LT5jcSA9IGliX2NyZWF0ZV9jcShwcml2LT5jYSwgaXBvaWJfaWJfY29tcGxldGlvbiwgTlVMTCwgZGV2LCBzaXplLCAwKTsKIAlpZiAoSVNfRVJSKHByaXYtPmNxKSkgewpAQCAtMjU5LDE0ICsyNDcsMTggQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPQogCQljb250YWluZXJfb2YoaGFuZGxlciwgc3RydWN0IGlwb2liX2Rldl9wcml2LCBldmVudF9oYW5kbGVyKTsKIAotCWlmICgocmVjb3JkLT5ldmVudCA9PSBJQl9FVkVOVF9QT1JUX0VSUiAgICB8fAotCSAgICAgcmVjb3JkLT5ldmVudCA9PSBJQl9FVkVOVF9QS0VZX0NIQU5HRSB8fAotCSAgICAgcmVjb3JkLT5ldmVudCA9PSBJQl9FVkVOVF9QT1JUX0FDVElWRSB8fAotCSAgICAgcmVjb3JkLT5ldmVudCA9PSBJQl9FVkVOVF9MSURfQ0hBTkdFICB8fAotCSAgICAgcmVjb3JkLT5ldmVudCA9PSBJQl9FVkVOVF9TTV9DSEFOR0UgICB8fAotCSAgICAgcmVjb3JkLT5ldmVudCA9PSBJQl9FVkVOVF9DTElFTlRfUkVSRUdJU1RFUikgJiYKLQkgICAgcmVjb3JkLT5lbGVtZW50LnBvcnRfbnVtID09IHByaXYtPnBvcnQpIHsKKwlpZiAocmVjb3JkLT5lbGVtZW50LnBvcnRfbnVtICE9IHByaXYtPnBvcnQpCisJCXJldHVybjsKKworCWlmIChyZWNvcmQtPmV2ZW50ID09IElCX0VWRU5UX1BPUlRfRVJSICAgIHx8CisJICAgIHJlY29yZC0+ZXZlbnQgPT0gSUJfRVZFTlRfUE9SVF9BQ1RJVkUgfHwKKwkgICAgcmVjb3JkLT5ldmVudCA9PSBJQl9FVkVOVF9MSURfQ0hBTkdFICB8fAorCSAgICByZWNvcmQtPmV2ZW50ID09IElCX0VWRU5UX1NNX0NIQU5HRSAgIHx8CisJICAgIHJlY29yZC0+ZXZlbnQgPT0gSUJfRVZFTlRfQ0xJRU5UX1JFUkVHSVNURVIpIHsKIAkJaXBvaWJfZGJnKHByaXYsICJQb3J0IHN0YXRlIGNoYW5nZSBldmVudFxuIik7CiAJCXF1ZXVlX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+Zmx1c2hfdGFzayk7CisJfSBlbHNlIGlmIChyZWNvcmQtPmV2ZW50ID09IElCX0VWRU5UX1BLRVlfQ0hBTkdFKSB7CisJCWlwb2liX2RiZyhwcml2LCAiUF9LZXkgY2hhbmdlIGV2ZW50IG9uIHBvcnQ6JWRcbiIsIHByaXYtPnBvcnQpOworCQlxdWV1ZV93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPnBrZXlfZXZlbnRfdGFzayk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKaW5kZXggODlkNjAwOC4uMzcwMmUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9LY29uZmlnCmluZGV4IDBlOWI2OTUuLmY4MTRmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAjCiAKIG1lbnUgIklucHV0IGRldmljZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gIVMzOTAKIAogY29uZmlnIElOUFVUCiAJdHJpc3RhdGUgIkdlbmVyaWMgaW5wdXQgbGF5ZXIgKG5lZWRlZCBmb3Iga2V5Ym9hcmQsIG1vdXNlLCAuLi4pIiBpZiBFTUJFRERFRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9ldmRldi5jIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCmluZGV4IDkzYjQwN2MuLmJlNmI5M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAKQEAgLTMzNyw3ICszMzYsNyBAQAogCiAJaWYgKGNvbXBhdCkgewogCQlsZW4gPSBOQklUU19DT01QQVQobWF4Yml0KSAqIHNpemVvZihjb21wYXRfbG9uZ190KTsKLQkJaWYgKGxlbiA8IG1heGxlbikKKwkJaWYgKGxlbiA+IG1heGxlbikKIAkJCWxlbiA9IG1heGxlbjsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gc2l6ZW9mKGNvbXBhdF9sb25nX3QpOyBpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggOTE1ZTlhYi4uY2NkOGFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtMTEsNyArMTEsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKaW5kZXggYzgzYmZlOC4uMTBlM2I3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiBNT0RVTEVfQVVUSE9SKCJWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL0tjb25maWcKaW5kZXggODJmNTYzZS4uYjAwMjM0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svS2NvbmZpZwpAQCAtMjU1LDYgKzI1NSw3IEBACiAKIGNvbmZpZyBKT1lTVElDS19YUEFECiAJdHJpc3RhdGUgIlgtQm94IGdhbWVwYWQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0QKIAlzZWxlY3QgVVNCCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFgtQm94IHBhZCB3aXRoIHlvdXIgY29tcHV0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCmluZGV4IDczNTcyMzkuLjhjOGNkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCkBAIC03NCw3ICs3NCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMC42IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCA2MDEzYWNlLi44NDJhN2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtODQsNiArODQsNyBAQAogCiBjb25maWcgSU5QVVRfQVRJX1JFTU9URQogCXRyaXN0YXRlICJBVEkgLyBYMTAgVVNCIFJGIHJlbW90ZSBjb250cm9sIgorCWRlcGVuZHMgb24gVVNCX0FSQ0hfSEFTX0hDRAogCXNlbGVjdCBVU0IKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhbiBBVEkgb3IgWDEwICJMb2xhIiBVU0IgcmVtb3RlIGNvbnRyb2wuCkBAIC05OSw2ICsxMDAsNyBAQAogCiBjb25maWcgSU5QVVRfQVRJX1JFTU9URTIKIAl0cmlzdGF0ZSAiQVRJIC8gUGhpbGlwcyBVU0IgUkYgcmVtb3RlIGNvbnRyb2wiCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECiAJc2VsZWN0IFVTQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGFuIEFUSSBvciBQaGlsaXBzIFVTQiBSRiByZW1vdGUgY29udHJvbC4KQEAgLTExNCw2ICsxMTYsNyBAQAogY29uZmlnIElOUFVUX0tFWVNQQU5fUkVNT1RFCiAJdHJpc3RhdGUgIktleXNwYW4gRE1SIFVTQiByZW1vdGUgY29udHJvbCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gVVNCX0FSQ0hfSEFTX0hDRAogCXNlbGVjdCBVU0IKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEtleXNwYW4gRE1SIFVTQiByZW1vdGUgY29udHJvbC4KQEAgLTEyOCw2ICsxMzEsNyBAQAogCiBjb25maWcgSU5QVVRfUE9XRVJNQVRFCiAJdHJpc3RhdGUgIkdyaWZmaW4gUG93ZXJNYXRlIGFuZCBDb250b3VyIEpvZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX0FSQ0hfSEFTX0hDRAogCXNlbGVjdCBVU0IKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBHcmlmZmluIFBvd2VyTWF0ZSBvciBDb250b3VyIEpvZyBkZXZpY2VzLgpAQCAtMTQ0LDYgKzE0OCw3IEBACiBjb25maWcgSU5QVVRfWUVBTElOSwogCXRyaXN0YXRlICJZZWFsaW5rIHVzYi1wMWsgdm9pcCBwaG9uZSIKIAlkZXBlbmRzIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gVVNCX0FSQ0hfSEFTX0hDRAogCXNlbGVjdCBVU0IKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBrZXlib2FyZCBhbmQgTENEIGZ1bmN0aW9ucyBvZiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCmluZGV4IDNkNGI2MTkuLmU3NTk5NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYwpAQCAtNTEsNyArNTEsNyBAQAogCiBzdGF0aWMgaW50IGl4cDR4eF9zcGtyX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7Ci0JdW5zaWduZWQgaW50IHBpbiA9ICh1bnNpZ25lZCBpbnQpIGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7CisJdW5zaWduZWQgaW50IHBpbiA9ICh1bnNpZ25lZCBpbnQpIGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKIAogCWlmICh0eXBlICE9IEVWX1NORCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwppbmRleCAyNjgyYTdkLi41MGUwNmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCkBAIC0xMTEsNiArMTExLDcgQEAKIAogY29uZmlnIE1PVVNFX0FQUExFVE9VQ0gKIAl0cmlzdGF0ZSAiQXBwbGUgVVNCIFRvdWNocGFkIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECiAJc2VsZWN0IFVTQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGFuIEFwcGxlIFVTQiBUb3VjaHBhZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwppbmRleCBkYzc4ZjYyLi4zZjQ4NjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NhMTExMXBzMi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zYTExMTFwczIuYwppbmRleCA1NTk1MDg3Li5kMzFlY2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NhMTExMXBzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2ExMTExcHMyLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogLyoKICAqIENsZWFyIHRoZSBpbnB1dCBidWZmZXIuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwczJfY2xlYXJfaW5wdXQoc3RydWN0IHBzMmlmICpwczJpZikKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwczJfY2xlYXJfaW5wdXQoc3RydWN0IHBzMmlmICpwczJpZikKIHsKIAlpbnQgbWF4cmVhZCA9IDEwMDsKIApAQCAtMjI4LDcgKzIyOCw3IEBACiAvKgogICogQWRkIG9uZSBkZXZpY2UgdG8gdGhpcyBkcml2ZXIuCiAgKi8KLXN0YXRpYyBpbnQgcHMyX3Byb2JlKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwczJfcHJvYmUoc3RydWN0IHNhMTExMV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcHMyaWYgKnBzMmlmOwogCXN0cnVjdCBzZXJpbyAqc2VyaW87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvS2NvbmZpZwppbmRleCAxMmRmYjBlLi5kMzcxYzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L0tjb25maWcKQEAgLTEzLDYgKzEzLDcgQEAKIAogY29uZmlnIFRBQkxFVF9VU0JfQUNFQ0FECiAJdHJpc3RhdGUgIkFjZWNhZCBGbGFpciB0YWJsZXQgc3VwcG9ydCAoVVNCKSIKKwlkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0QKIAlzZWxlY3QgVVNCCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFVTQiB2ZXJzaW9uIG9mIHRoZSBBY2VjYWQgRmxhaXIKQEAgLTI1LDYgKzI2LDcgQEAKIAogY29uZmlnIFRBQkxFVF9VU0JfQUlQVEVLCiAJdHJpc3RhdGUgIkFpcHRlayA2MDAwVS84MDAwVSB0YWJsZXQgc3VwcG9ydCAoVVNCKSIKKwlkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0QKIAlzZWxlY3QgVVNCCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFVTQiB2ZXJzaW9uIG9mIHRoZSBBaXB0ZWsgNjAwMFUKQEAgLTQ5LDYgKzUxLDcgQEAKIAogY29uZmlnIFRBQkxFVF9VU0JfS0JUQUIKIAl0cmlzdGF0ZSAiS0IgR2VhciBKYW1TdHVkaW8gdGFibGV0IHN1cHBvcnQgKFVTQikiCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECiAJc2VsZWN0IFVTQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBVU0IgdmVyc2lvbiBvZiB0aGUgS0IgR2VhcgpAQCAtNjEsNiArNjQsNyBAQAogCiBjb25maWcgVEFCTEVUX1VTQl9XQUNPTQogCXRyaXN0YXRlICJXYWNvbSBJbnR1b3MvR3JhcGhpcmUgdGFibGV0IHN1cHBvcnQgKFVTQikiCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECiAJc2VsZWN0IFVTQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBVU0IgdmVyc2lvbiBvZiB0aGUgV2Fjb20gSW50dW9zCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKaW5kZXggYzBiMzZjYy4uZTVjY2E5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwpAQCAtMTY2LDYgKzE2Niw3IEBACiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFCiAJdHJpc3RhdGUgIlVTQiBUb3VjaHNjcmVlbiBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECiAJc2VsZWN0IFVTQgogCWhlbHAKIAkgIFVTQiBUb3VjaHNjcmVlbiBkcml2ZXIgZm9yOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jCmluZGV4IDYxYzE1MDIuLjFhMTU0NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMKQEAgLTEsNyArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KQEAgLTE4LDEyICsxNywxMiBAQAogI2RlZmluZQlQSERSCTB4YTQwMDAxMmUKICNkZWZpbmUgU0NQRFIJMHhhNDAwMDEzNgogCi1zdGF0aWMgdm9pZCBkb19zb2Z0aW50KHZvaWQgKmRhdGEpOworc3RhdGljIHZvaWQgZG9fc29mdGludChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiBzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqaHA2ODBfdHNfZGV2Owotc3RhdGljIERFQ0xBUkVfV09SSyh3b3JrLCBkb19zb2Z0aW50KTsKK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyh3b3JrLCBkb19zb2Z0aW50KTsKIAotc3RhdGljIHZvaWQgZG9fc29mdGludCh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgZG9fc29mdGludChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJaW50IGFic3ggPSAwLCBhYnN5ID0gMDsKIAl1OCBzY3BkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdHNkZXYuYyBiL2RyaXZlcnMvaW5wdXQvdHNkZXYuYwppbmRleCBhZjQ1ODFkLi4yZGIzNjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RzZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC90c2Rldi5jCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9LY29uZmlnIGIvZHJpdmVycy9pc2RuL0tjb25maWcKaW5kZXggYzkwYWZlZS4uM2UwODhjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAjCiAKIG1lbnUgIklTRE4gc3Vic3lzdGVtIgorCWRlcGVuZHMgb24gIVMzOTAKIAogY29uZmlnIElTRE4KIAl0cmlzdGF0ZSAiSVNETiBzdXBwb3J0IgpAQCAtMjUsOSArMjYsOSBAQAogCWRlcGVuZHMgb24gTkVUICYmIElTRE4KIAogY29uZmlnIElTRE5fSTRMCi0JdHJpc3RhdGUgIk9sZCBJU0RONExpbnV4IChvYnNvbGV0ZSkiCisJdHJpc3RhdGUgIk9sZCBJU0RONExpbnV4IChkZXByZWNhdGVkKSIKIAktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBhbGxvd3MgeW91IHRvIHVzZSBhbiBJU0ROLWNhcmQgZm9yIG5ldHdvcmtpbmcKKwkgIFRoaXMgZHJpdmVyIGFsbG93cyB5b3UgdG8gdXNlIGFuIElTRE4gYWRhcHRlciBmb3IgbmV0d29ya2luZwogCSAgY29ubmVjdGlvbnMgYW5kIGFzIGRpYWxpbi9vdXQgZGV2aWNlLiAgVGhlIGlzZG4tdHR5J3MgaGF2ZSBhIGJ1aWx0CiAJICBpbiBBVC1jb21wYXRpYmxlIG1vZGVtIGVtdWxhdG9yLiAgTmV0d29yayBkZXZpY2VzIHN1cHBvcnQgYXV0b2RpYWwsCiAJICBjaGFubmVsLWJ1bmRsaW5nLCBjYWxsYmFjayBhbmQgY2FsbGVyLWF1dGhlbnRpY2F0aW9uIHdpdGhvdXQgaGF2aW5nCkBAIC0zOCw4ICszOSw5IEBACiAKIAkgIElTRE4gc3VwcG9ydCBpbiB0aGUgbGludXgga2VybmVsIGlzIG1vdmluZyB0b3dhcmRzIGEgbmV3IEFQSSwKIAkgIGNhbGxlZCBDQVBJIChDb21tb24gSVNETiBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UpLgotCSAgVGhlcmVmb3JlIHRoZSBvbGQgSVNETjRMaW51eCBsYXllciBpcyBiZWNvbWluZyBvYnNvbGV0ZS4gSXQgaXMgCi0JICBzdGlsbCB1c2FibGUsIHRob3VnaCwgaWYgeW91IHNlbGVjdCB0aGlzIG9wdGlvbi4KKwkgIFRoZXJlZm9yZSB0aGUgb2xkIElTRE40TGludXggbGF5ZXIgd2lsbCBldmVudHVhbGx5IGJlY29tZSBvYnNvbGV0ZS4KKwkgIEl0IGlzIHN0aWxsIGF2YWlsYWJsZSwgdGhvdWdoLCBmb3IgdXNlIHdpdGggYWRhcHRlcnMgdGhhdCBhcmUgbm90CisJICBzdXBwb3J0ZWQgYnkgdGhlIG5ldyBDQVBJIHN1YnN5c3RlbSB5ZXQuCiAKIGlmIElTRE5fSTRMCiBzb3VyY2UgImRyaXZlcnMvaXNkbi9pNGwvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL0tjb25maWcgYi9kcml2ZXJzL2lzZG4vY2FwaS9LY29uZmlnCmluZGV4IGM5MjFkNmMuLmM5MmY5ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvS2NvbmZpZwpAQCAtMTcsNyArMTcsNyBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUga2VybmVsY2FwaSBkcml2ZXIgY2FuIG1ha2UgdmVyYm9zZSB0cmFjZXMKIAkgIG9mIENBUEkgbWVzc2FnZXMuIFRoaXMgZmVhdHVyZSBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCB2aWEgSU9DVEwgZm9yCi0JICBldmVyeSBjb250cm9sZXIgKGRlZmF1bHQgZGlzYWJsZWQpLgorCSAgZXZlcnkgY29udHJvbGxlciAoZGVmYXVsdCBkaXNhYmxlZCkuCiAJICBUaGlzIHdpbGwgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbGNhcGkgbW9kdWxlIGJ5IDIwIEtCLgogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCmluZGV4IGRiMTI2MGYuLjgxNjYxYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogCXN0cnVjdCBjYXBpbmNjaSAqbmNjaXM7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIG5jY2lfbGlzdF9zZW07CisJc3RydWN0IG11dGV4IG5jY2lfbGlzdF9tdHg7CiB9OwogCiAvKiAtLS0tLS0tLSBnbG9iYWwgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTM5NSw3ICszOTUsNyBAQAogCWlmICghY2RldikKIAkJcmV0dXJuIE5VTEw7CiAKLQlpbml0X01VVEVYKCZjZGV2LT5uY2NpX2xpc3Rfc2VtKTsKKwltdXRleF9pbml0KCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZjZGV2LT5yZWN2cXVldWUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNkZXYtPnJlY3Z3YWl0KTsKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcGlkZXZfbGlzdF9sb2NrLCBmbGFncyk7CkBAIC00MTQsOSArNDE0LDkgQEAKIAl9CiAJc2tiX3F1ZXVlX3B1cmdlKCZjZGV2LT5yZWN2cXVldWUpOwogCi0JZG93bigmY2Rldi0+bmNjaV9saXN0X3NlbSk7CisJbXV0ZXhfbG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7CiAJY2FwaW5jY2lfZnJlZShjZGV2LCAweGZmZmZmZmZmKTsKLQl1cCgmY2Rldi0+bmNjaV9saXN0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FwaWRldl9saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmY2Rldi0+bGlzdCk7CkBAIC02MDMsMTUgKzYwMywxNSBAQAogCWlmIChDQVBJTVNHX0NNRChza2ItPmRhdGEpID09IENBUElfQ09OTkVDVF9CM19DT05GKSB7CiAJCXUxNiBpbmZvID0gQ0FQSU1TR19VMTYoc2tiLT5kYXRhLCAxMik7IC8vIEluZm8gZmllbGQKIAkJaWYgKGluZm8gPT0gMCkgewotCQkJZG93bigmY2Rldi0+bmNjaV9saXN0X3NlbSk7CisJCQltdXRleF9sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKIAkJCWNhcGluY2NpX2FsbG9jKGNkZXYsIENBUElNU0dfTkNDSShza2ItPmRhdGEpKTsKLQkJCXVwKCZjZGV2LT5uY2NpX2xpc3Rfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7CiAJCX0KIAl9CiAJaWYgKENBUElNU0dfQ01EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9DT05ORUNUX0IzX0lORCkgewotCQlkb3duKCZjZGV2LT5uY2NpX2xpc3Rfc2VtKTsKKwkJbXV0ZXhfbG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7CiAJCWNhcGluY2NpX2FsbG9jKGNkZXYsIENBUElNU0dfTkNDSShza2ItPmRhdGEpKTsKLQkJdXAoJmNkZXYtPm5jY2lfbGlzdF9zZW0pOworCQltdXRleF91bmxvY2soJmNkZXYtPm5jY2lfbGlzdF9tdHgpOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7CiAJaWYgKENBUElNU0dfQ09NTUFORChza2ItPmRhdGEpICE9IENBUElfREFUQV9CMykgewpAQCAtNzUyLDkgKzc1Miw5IEBACiAJQ0FQSU1TR19TRVRBUFBJRChza2ItPmRhdGEsIGNkZXYtPmFwLmFwcGxpZCk7CiAKIAlpZiAoQ0FQSU1TR19DTUQoc2tiLT5kYXRhKSA9PSBDQVBJX0RJU0NPTk5FQ1RfQjNfUkVTUCkgewotCQlkb3duKCZjZGV2LT5uY2NpX2xpc3Rfc2VtKTsKKwkJbXV0ZXhfbG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7CiAJCWNhcGluY2NpX2ZyZWUoY2RldiwgQ0FQSU1TR19OQ0NJKHNrYi0+ZGF0YSkpOwotCQl1cCgmY2Rldi0+bmNjaV9saXN0X3NlbSk7CisJCW11dGV4X3VubG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7CiAJfQogCiAJY2Rldi0+ZXJyY29kZSA9IGNhcGkyMF9wdXRfbWVzc2FnZSgmY2Rldi0+YXAsIHNrYik7CkBAIC05MzksOSArOTM5LDkgQEAKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigmbmNjaSwgYXJncCwgc2l6ZW9mKG5jY2kpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQkJZG93bigmY2Rldi0+bmNjaV9saXN0X3NlbSk7CisJCQltdXRleF9sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKIAkJCWlmICgobmNjaXAgPSBjYXBpbmNjaV9maW5kKGNkZXYsICh1MzIpIG5jY2kpKSA9PSAwKSB7Ci0JCQkJdXAoJmNkZXYtPm5jY2lfbGlzdF9zZW0pOworCQkJCW11dGV4X3VubG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAjaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCkBAIC05NDksNyArOTQ5LDcgQEAKIAkJCQljb3VudCArPSBhdG9taWNfcmVhZCgmbXAtPnR0eW9wZW5jb3VudCk7CiAJCQl9CiAjZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCi0JCQl1cCgmY2Rldi0+bmNjaV9saXN0X3NlbSk7CisJCQltdXRleF91bmxvY2soJmNkZXYtPm5jY2lfbGlzdF9tdHgpOwogCQkJcmV0dXJuIGNvdW50OwogCQl9CiAJCXJldHVybiAwOwpAQCAtOTY0LDE0ICs5NjQsMTQgQEAKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigmbmNjaSwgYXJncCwKIAkJCQkJICAgc2l6ZW9mKG5jY2kpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWRvd24oJmNkZXYtPm5jY2lfbGlzdF9zZW0pOworCQkJbXV0ZXhfbG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7CiAJCQluY2NpcCA9IGNhcGluY2NpX2ZpbmQoY2RldiwgKHUzMikgbmNjaSk7CiAJCQlpZiAoIW5jY2lwIHx8IChtcCA9IG5jY2lwLT5taW5vcnApID09IDApIHsKLQkJCQl1cCgmY2Rldi0+bmNjaV9saXN0X3NlbSk7CisJCQkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKIAkJCQlyZXR1cm4gLUVTUkNIOwogCQkJfQogCQkJdW5pdCA9IG1wLT5taW5vcjsKLQkJCXVwKCZjZGV2LT5uY2NpX2xpc3Rfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7CiAJCQlyZXR1cm4gdW5pdDsKIAkJfQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGl1dGlsLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpdXRpbC5jCmluZGV4IGFkMWUyNzAuLjIyMzc5YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGl1dGlsLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaXV0aWwuYwpAQCAtODU1LDcgKzg1NSw3IEBACiBzdGF0aWMgdV9sb25nIGdfZGViYnVmX2xvY2s7CiBzdGF0aWMgX2Ntc2cgKmdfY21zZzsKIAotX2NkZWJidWYgKmNkZWJidWZfYWxsb2Modm9pZCkKK3N0YXRpYyBfY2RlYmJ1ZiAqY2RlYmJ1Zl9hbGxvYyh2b2lkKQogewogCV9jZGViYnVmICpjZGI7CiAKQEAgLTk4OSwxMSArOTg5LDYgQEAKIAlyZXR1cm4gJmdfZGViYnVmOwogfQogCi1fY2RlYmJ1ZiAqY2RlYmJ1Zl9hbGxvYyh2b2lkKQotewotCXJldHVybiAmZ19kZWJidWY7Ci19Ci0KIHZvaWQgY2RlYmJ1Zl9mcmVlKF9jZGViYnVmICpjZGIpCiB7CiB9CkBAIC0xMDA5LDcgKzEwMDQsNiBAQAogCiAjZW5kaWYKIAotRVhQT1JUX1NZTUJPTChjZGViYnVmX2FsbG9jKTsKIEVYUE9SVF9TWU1CT0woY2RlYmJ1Zl9mcmVlKTsKIEVYUE9SVF9TWU1CT0woY2FwaV9jbXNnMm1lc3NhZ2UpOwogRVhQT1JUX1NZTUJPTChjYXBpX21lc3NhZ2UyY21zZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCmluZGV4IDUzYTE4OTAuLmJlNzdlZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCkBAIC0xMSw3ICsxMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpZmRlZiBDT05GSUdfUFJPQ19GUwogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYwppbmRleCBjOGUxYzM1Li5hMTI2MzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKQEAgLTEzOCw4ICsxMzgsNiBAQAogCWNoYXIJCQliY2hhcnNbNl07CQkvKiBmb3IgcmVxdWVzdCAweDE5ICovCiB9OwogCi1zdHJ1Y3QgdXNiX2JjX3N0YXRlIHt9OwotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHRpb2NtX3RvX2dpZ2FzZXQodW5zaWduZWQgc3RhdGUpCiB7CiAJcmV0dXJuICgoc3RhdGUgJiBUSU9DTV9EVFIpID8gMSA6IDApIHwgKChzdGF0ZSAmIFRJT0NNX1JUUykgPyAyIDogMCk7CkBAIC01NzksMjUgKzU3NywyMSBAQAogCiBzdGF0aWMgaW50IGdpZ2FzZXRfZnJlZWJjc2h3KHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewotCWlmICghYmNzLT5ody51c2IpCi0JCXJldHVybiAwOwotCS8vRklYTUUKLQlrZnJlZShiY3MtPmh3LnVzYik7CisJLyogdW51c2VkICovCiAJcmV0dXJuIDE7CiB9CiAKIC8qIEluaXRpYWxpemUgdGhlIGItY2hhbm5lbCBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBpbnQgZ2lnYXNldF9pbml0YmNzaHcoc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7Ci0JYmNzLT5ody51c2IgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2JjX3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiY3MtPmh3LnVzYikKLQkJcmV0dXJuIDA7Ci0KKwkvKiB1bnVzZWQgKi8KKwliY3MtPmh3LnVzYiA9IE5VTEw7CiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIGdpZ2FzZXRfcmVpbml0YmNzaHcoc3RydWN0IGJjX3N0YXRlICpiY3MpCiB7CisJLyogbm90aGluZyB0byBkbyBmb3IgTTEweCAqLwogfQogCiBzdGF0aWMgdm9pZCBnaWdhc2V0X2ZyZWVjc2h3KHN0cnVjdCBjYXJkc3RhdGUgKmNzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2NhcGlmdW5jLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vY2FwaWZ1bmMuYwppbmRleCBmZjI4NGFlLi44MmVkYzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vY2FwaWZ1bmMuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vY2FwaWZ1bmMuYwpAQCAtMTg5LDIxICsxODksMjEgQEAKIHsKIAlhcHBsLT54YnVmZmVyX3VzZWRbcmVmXSA9IHRydWU7CiAJREJHX1BSVjEoKCIlZDp4YnVmX3VzZWQoJWQpIiwgYXBwbC0+SWQsIHJlZiArIDEpKQotCSAgICByZXR1cm4gKHZvaWQgKikgcmVmOworCSAgICByZXR1cm4gKHZvaWQgKikobG9uZylyZWY7CiB9CiAKIHZvaWQgKlRyYW5zbWl0QnVmZmVyR2V0KEFQUEwgKiBhcHBsLCB2b2lkICpwKQogewotCWlmIChhcHBsLT54YnVmZmVyX2ludGVybmFsWyhkd29yZCkgcF0pCi0JCXJldHVybiBhcHBsLT54YnVmZmVyX2ludGVybmFsWyhkd29yZCkgcF07CisJaWYgKGFwcGwtPnhidWZmZXJfaW50ZXJuYWxbKGR3b3JkKShsb25nKXBdKQorCQlyZXR1cm4gYXBwbC0+eGJ1ZmZlcl9pbnRlcm5hbFsoZHdvcmQpKGxvbmcpcF07CiAKLQlyZXR1cm4gYXBwbC0+eGJ1ZmZlcl9wdHJbKGR3b3JkKSBwXTsKKwlyZXR1cm4gYXBwbC0+eGJ1ZmZlcl9wdHJbKGR3b3JkKShsb25nKXBdOwogfQogCiB2b2lkIFRyYW5zbWl0QnVmZmVyRnJlZShBUFBMICogYXBwbCwgdm9pZCAqcCkKIHsKLQlhcHBsLT54YnVmZmVyX3VzZWRbKGR3b3JkKSBwXSA9IGZhbHNlOwotCURCR19QUlYxKCgiJWQ6eGJ1Zl9mcmVlKCVkKSIsIGFwcGwtPklkLCAoKGR3b3JkKSBwKSArIDEpKQorCWFwcGwtPnhidWZmZXJfdXNlZFsoZHdvcmQpKGxvbmcpcF0gPSBmYWxzZTsKKwlEQkdfUFJWMSgoIiVkOnhidWZfZnJlZSglZCkiLCBhcHBsLT5JZCwgKChkd29yZCkobG9uZylwKSArIDEpKQogfQogCiB2b2lkICpSZWNlaXZlQnVmZmVyR2V0KEFQUEwgKiBhcHBsLCBpbnQgTnVtKQpAQCAtMzAxLDcgKzMwMSw3IEBACiAJLyogaWYgREFUQV9CM19JTkQsIGNvcHkgZGF0YSB0b28gKi8KIAlpZiAoY29tbWFuZCA9PSBfREFUQV9CM19JKSB7CiAJCWR3b3JkIGRhdGEgPSBHRVRfRFdPUkQoJm1zZy5pbmZvLmRhdGFfYjNfaW5kLkRhdGEpOwotCQltZW1jcHkod3JpdGUgKyBsZW5ndGgsICh2b2lkICopIGRhdGEsIGRsZW5ndGgpOworCQltZW1jcHkod3JpdGUgKyBsZW5ndGgsICh2b2lkICopKGxvbmcpZGF0YSwgZGxlbmd0aCk7CiAJfQogCiAjaWZuZGVmIERJVkFfTk9fREVCVUdMSUIKQEAgLTMxOCw3ICszMTgsNyBAQAogCQkJaWYgKG15RHJpdmVyRGVidWdIYW5kbGUuZGJnTWFzayAmIERMX0JMSykgewogCQkJCXhsb2coIlx4MDBceDAyIiwgJm1zZywgMHg4MSwgbGVuZ3RoKTsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgZGxlbmd0aDsgaSArPSAyNTYpIHsKLQkJCQkgIERCR19CTEsoKCgoY2hhciAqKSBHRVRfRFdPUkQoJm1zZy5pbmZvLmRhdGFfYjNfaW5kLkRhdGEpKSArIGksCisJCQkJICBEQkdfQkxLKCgoKGNoYXIgKikobG9uZylHRVRfRFdPUkQoJm1zZy5pbmZvLmRhdGFfYjNfaW5kLkRhdGEpKSArIGksCiAJCQkJICAJKChkbGVuZ3RoIC0gaSkgPCAyNTYpID8gKGRsZW5ndGggLSBpKSA6IDI1NikpCiAJCQkJICBpZiAoIShteURyaXZlckRlYnVnSGFuZGxlLmRiZ01hc2sgJiBETF9QUlYwKSkKIAkJCQkJICBicmVhazsgLyogbm90IG1vcmUgaWYgbm90IGV4cGxpY2l0ZWx5IHJlcXVlc3RlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2NhcGltYWluLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vY2FwaW1haW4uYwppbmRleCA3YTc0ZWQzLi45OGZjZGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vY2FwaW1haW4uYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vY2FwaW1haW4uYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKICNpbmNsdWRlICJvc19jYXBpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGJnaW9jdGwuaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kYmdpb2N0bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmI2ZjVlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kYmdpb2N0bC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLQotLyoKLSAqCi0gIENvcHlyaWdodCAoYykgRWljb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiwgMjAwMC4KLSAqCi0gIFRoaXMgc291cmNlIGZpbGUgaXMgc3VwcGxpZWQgZm9yIHRoZSB1c2Ugd2l0aCBFaWNvbgotICBUZWNobm9sb2d5IENvcnBvcmF0aW9uJ3MgcmFuZ2Ugb2YgRElWQSBTZXJ2ZXIgQWRhcHRlcnMuCi0gKgotICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBPRiBBTlkgS0lORCBXSEFUU09FVkVSIElOQ0xVRElORyBBTlkKLSAgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogZmlsZTogZGJnaW9jdGwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgIWRlZmluZWQoX19EQkdJT0NUTF9IX18pCi0KLSNkZWZpbmUgX19EQkdJT0NUTF9IX18KLQotI2lmZGVmIE5PVF9ZRVRfTkVFREVECi0vKgotICogVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgcGFzc2VkIGluIGFyZzAgb2YgRGJnSW9jdGxBcmdzLAotICogYWRkaXRpb25hbCBhcmd1bWVudHMgKGlmIGFueSkgaW4gYXJnMSwgYXJnMiBhbmQgYXJnMy4KLSAqLwotCi10eXBlZGVmIHN0cnVjdAotewlVTE9ORwlhcmcwIDsKLQlVTE9ORwlhcmcxIDsKLQlVTE9ORwlhcmcyIDsKLQlVTE9ORwlhcmczIDsKLX0gRGJnSW9jdGxBcmdzIDsKLQotI2RlZmluZQlEQkdfQ09QWV9MT0dTCTAJLyogY29weSBkZWJ1Z3MgdG8gdXNlciB1bnRpbCBidWZmZXIgZnVsbAkqLwotCQkJCQkJCS8qIGFyZzE6IHNpemUgdGhyZXNob2xkCQkJCQkJKi8KLQkJCQkJCQkvKiBhcmcyOiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcwkJCSovCi0KLSNkZWZpbmUgREJHX0ZMVVNIX0xPR1MJMQkvKiBmbHVzaCBwZW5kaW5nIGRlYnVncyB0byB1c2VyIGJ1ZmZlcgkJKi8KLQkJCQkJCQkvKiBhcmcxOiBpbnRlcm5hbCBkcml2ZXIgaWQJCQkJCSovCi0KLSNkZWZpbmUgREJHX0xJU1RfRFJWUwkyCS8qIHJldHVybiB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGRyaXZlcnMJKi8KLQotI2RlZmluZQlEQkdfR0VUX01BU0sJMwkvKiBnZXQgY3VycmVudCBkZWJ1ZyBtYXNrIG9mIGRyaXZlcgkJCSovCi0JCQkJCQkJLyogYXJnMTogaW50ZXJuYWwgZHJpdmVyIGlkCQkJCQkqLwotCi0jZGVmaW5lCURCR19TRVRfTUFTSwk0CS8qIHNldC9jaGFuZ2UgZGVidWcgbWFzayBvZiBkcml2ZXIJCQkqLwotCQkJCQkJCS8qIGFyZzE6IGludGVybmFsIGRyaXZlciBpZAkJCQkJKi8KLQkJCQkJCQkvKiBhcmcyOiBuZXcgZGVidWcgbWFzawkJCQkJCSovCi0KLSNkZWZpbmUJREJHX0dFVF9CVUZTSVpFCTUJLyogZ2V0IGN1cnJlbnQgYnVmZmVyIHNpemUgb2YgZHJpdmVyCQkqLwotCQkJCQkJCS8qIGFyZzE6IGludGVybmFsIGRyaXZlciBpZAkJCQkJKi8KLQkJCQkJCQkvKiBhcmcyOiBuZXcgZGVidWcgbWFzawkJCQkJCSovCi0KLSNkZWZpbmUJREJHX1NFVF9CVUZTSVpFCTYJLyogc2V0IG5ldyBidWZmZXIgc2l6ZSBvZiBkcml2ZXIJCQkqLwotCQkJCQkJCS8qIGFyZzE6IG5ldyBidWZmZXIgc2l6ZQkJCQkJKi8KLQotLyoKLSAqCWNvbW1vbiBpbnRlcm5hbCBkZWJ1ZyBtZXNzYWdlIHN0cnVjdHVyZQotICovCi0KLXR5cGVkZWYgc3RydWN0Ci17CXVuc2lnbmVkIHNob3J0IGlkIDsJCS8qIHZpcnR1YWwgZHJpdmVyIGlkICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBzaG9ydCB0eXBlIDsJLyogc3BlY2lhbCBtZXNzYWdlIHR5cGUgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcgIHNlcSA7CS8qIHNlcXVlbmNlIG51bWJlciBvZiBtZXNzYWdlICAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nICBzaXplIDsJLyogc2l6ZSBvZiBtZXNzYWdlIGluIGJ5dGVzICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcgIG5leHQgOwkvKiBvZmZzZXQgdG8gbmV4dCBidWZmZXJlZCBtZXNzYWdlICAgICovCi0JTEFSR0VfSU5URUdFUiAgTlR0aW1lIDsJLyogMTAwIG5zICBzaW5jZSAxLjEuMTYwMSAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgIGRhdGFbNF0gOy8qIG1lc3NhZ2UgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgKi8KLX0gT2xkRGJnTWVzc2FnZSA7Ci0KLXR5cGVkZWYgc3RydWN0Ci17CUxBUkdFX0lOVEVHRVIgIE5UdGltZSA7CS8qIDEwMCBucyAgc2luY2UgMS4xLjE2MDEgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBzaG9ydCBzaXplIDsJLyogc2l6ZSBvZiBtZXNzYWdlIGluIGJ5dGVzICAgICAgICAgICAqLwotCXVuc2lnbmVkIHNob3J0IGZmZmYgOwkvKiBhbHdheXMgMHhmZmZmIHRvIGluZGljYXRlIG5ldyBtc2cgICovCi0JdW5zaWduZWQgc2hvcnQgaWQgOwkJLyogdmlydHVhbCBkcml2ZXIgaWQgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIHNob3J0IHR5cGUgOwkvKiBzcGVjaWFsIG1lc3NhZ2UgdHlwZSAgICAgICAgICAgICAgICovCi0JdW5zaWduZWQgbG9uZyAgc2VxIDsJLyogc2VxdWVuY2UgbnVtYmVyIG9mIG1lc3NhZ2UgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgIGRhdGFbNF0gOy8qIG1lc3NhZ2UgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgKi8KLX0gRGJnTWVzc2FnZSA7Ci0KLSNlbmRpZgotCi0jZGVmaW5lIERSVl9JRF9VTktOT1dOCQkweDBDCS8qIGZvciBtZXNzYWdlcyB2aWEgcHJ0Q29tcCgpICovCi0KLSNkZWZpbmUJTVNHX1BST0NfRkxBRwkJMHg4MAotI2RlZmluZQlNU0dfUFJPQ19OT19HRVQoeCkJKCgoeCkgJiBNU0dfUFJPQ19GTEFHKSA/ICgoKHgpID4+IDQpICYgNykgOiAtMSkKLSNkZWZpbmUJTVNHX1BST0NfTk9fU0VUKHgpCShNU0dfUFJPQ19GTEFHIHwgKCgoeCkgJiA3KSA8PCA0KSkKLQotI2RlZmluZSBNU0dfVFlQRV9EUlZfSUQJCTB4MDAwMQotI2RlZmluZSBNU0dfVFlQRV9GTEFHUwkJMHgwMDAyCi0jZGVmaW5lIE1TR19UWVBFX1NUUklORwkJMHgwMDAzCi0jZGVmaW5lIE1TR19UWVBFX0JJTkFSWQkJMHgwMDA0Ci0KLSNkZWZpbmUgTVNHX0hFQURfU0laRQkoKHVuc2lnbmVkIGxvbmcpJigoKERiZ01lc3NhZ2UgKikwKS0+ZGF0YVswXSkpCi0jZGVmaW5lIE1TR19BTElHTihsZW4pCSgoKHVuc2lnbmVkIGxvbmcpKGxlbikgKyBNU0dfSEVBRF9TSVpFICsgMykgJiB+MykKLSNkZWZpbmUgTVNHX1NJWkUocE1zZykJTVNHX0FMSUdOKChwTXNnKS0+c2l6ZSkKLSNkZWZpbmUgTVNHX05FWFQocE1zZykJKChEYmdNZXNzYWdlICopKCAoKGNoYXIgKikocE1zZykpICsgTVNHX1NJWkUocE1zZykgKSkKLQotI2RlZmluZSBPTERfTVNHX0hFQURfU0laRQkoKHVuc2lnbmVkIGxvbmcpJigoKE9sZERiZ01lc3NhZ2UgKikwKS0+ZGF0YVswXSkpCi0jZGVmaW5lIE9MRF9NU0dfQUxJR04obGVuKQkoKCh1bnNpZ25lZCBsb25nKShsZW4pK09MRF9NU0dfSEVBRF9TSVpFKzMpICYgfjMpCi0KLS8qCi0gKiBtYW5pZmVzdCBjb25zdGFudHMKLSAqLwotCi0jZGVmaW5lIE1TR19GUkFNRV9NQVhfU0laRQkyMTUwCQkvKiBtYXhpbXVtIHNpemUgb2YgQjEgZnJhbWUJICovCi0jZGVmaW5lIE1TR19URVhUX01BWF9TSVpFCTEwMjQJCS8qIG1heGltdW0gc2l6ZSBvZiBtc2cgdGV4dAkgKi8KLSNkZWZpbmUgTVNHX01BWF9TSVpFCQlNU0dfQUxJR04oTVNHX0ZSQU1FX01BWF9TSVpFKQotI2RlZmluZSBEQkdfTUlOX0JVRkZFUl9TSVpFCTB4MDAwMDgwMDAJLyogbWluaW1hbCB0b3RhbCBidWZmZXIgc2l6ZSAgMzIgS0IgKi8KLSNkZWZpbmUgREJHX0RFRl9CVUZGRVJfU0laRQkweDAwMDIwMDAwCS8qIGRlZmF1bHQgdG90YWwgYnVmZmVyIHNpemUgMTI4IEtCICovCi0jZGVmaW5lIERCR19NQVhfQlVGRkVSX1NJWkUJMHgwMDQwMDAwMAkvKiBtYXhpbWFsIHRvdGFsIGJ1ZmZlciBzaXplICAgNCBNQiAqLwotCi0jZGVmaW5lIERCR0RSVl9OQU1FCQkiRGllaGxfRElNQUlOVCIKLSNkZWZpbmUgVU5JREJHX0RSSVZFUglMIlxcRGV2aWNlXFxEaWVobF9ESU1BSU5UIiAvKiBVTklDT0RFIG5hbWUgZm9yIGtlcm5lbCAqLwotI2RlZmluZSBERUJVR19EUklWRVIJIlxcXFwuXFwiIERCR0RSVl9OQU1FICAvKiB0cmFkaXRpb25hbCBzdHJpbmcgZm9yIGFwcHMgKi8KLSNkZWZpbmUgREJHVlhEX05BTUUJCSJESU1BSU5UIgotI2RlZmluZSBERUJVR19WWEQJCSJcXFxcLlxcIiBEQkdWWERfTkFNRSAgLyogdHJhZGl0aW9uYWwgc3RyaW5nIGZvciBhcHBzICovCi0KLS8qCi0gKglTcGVjaWFsIElESSBpbnRlcmZhY2UgZGVidWcgY29uc3RydWN0aW9uCi0gKi8KLQotI2RlZmluZQlEQkdfSURJX1NJR19SRVEJCSh1bnNpZ25lZCBsb25nKTB4RjQ3OUM0MDIKLSNkZWZpbmUJREJHX0lESV9TSUdfSU5ECQkodW5zaWduZWQgbG9uZykweEY0NzlDNDAzCi0jZGVmaW5lCURCR19JRElfTkxfUkVRCQkodW5zaWduZWQgbG9uZykweEY0NzlDNDA0Ci0jZGVmaW5lCURCR19JRElfTkxfSU5ECQkodW5zaWduZWQgbG9uZykweEY0NzlDNDA1Ci0KLXR5cGVkZWYgc3RydWN0Ci17CXVuc2lnbmVkIGxvbmcgIG1hZ2ljX3R5cGUgOwotCXVuc2lnbmVkIHNob3J0IGRhdGFfbGVuIDsKLQl1bnNpZ25lZCBjaGFyICBsYXllcl9JRCA7Ci0JdW5zaWduZWQgY2hhciAgZW50aXR5X0lEIDsKLQl1bnNpZ25lZCBjaGFyICByZXF1ZXN0IDsKLQl1bnNpZ25lZCBjaGFyICByZXRfY29kZSA7Ci0JdW5zaWduZWQgY2hhciAgaW5kaWNhdGlvbiA7Ci0JdW5zaWduZWQgY2hhciAgY29tcGxldGUgOwotCXVuc2lnbmVkIGNoYXIgIGRhdGFbNF0gOwotfSBEYmdJZGlBY3QsICpEYmdJZGlBY3Rpb24gOwotCi0vKgotICogV2Ugd2FudCB0byB1c2UgdGhlIHNhbWUgSU9DVEwgY29kZXMgaW4gV2luOTUgYW5kIFdpbk5ULgotICogVGhlIG9mZmljaWFsIGNvbnN0cnVjdG9yIGZvciBJT0NUTCBjb2RlcyBpcyB0aGUgQ1RMX0NPREUgbWFjcm8KLSAqIGZyb20gPHdpbm9jdGwuaD4gKDxkZXZpb2N0bC5oPiBpbiBXaW5OVCBEREsgZW52aXJvbm1lbnQpLgotICogVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHdlIGRvbid0IGtub3cgaG93IHRvIGdldCA8d2luaW9jdGwuaD4KLSAqIHdvcmtpbmcgaW4gYSBXaW45NSBEREsgZW52aXJvbm1lbnQhCi0gKi8KLQotIyBpZmRlZiBDVExfQ09ERQkvKnsqLwotCi0vKiBBc3NlcnQgdGhhdCB3ZSBoYXZlIHRoZSBzYW1lIGlkZWEgb2YgdGhlIENUTF9DT0RFIG1hY3JvLgkqLwotCi0jZGVmaW5lIENUTF9DT0RFKCBEZXZpY2VUeXBlLCBGdW5jdGlvbiwgTWV0aG9kLCBBY2Nlc3MgKSAoICAgICAgICAgICAgICAgICBcCi0gICAgKChEZXZpY2VUeXBlKSA8PCAxNikgfCAoKEFjY2VzcykgPDwgMTQpIHwgKChGdW5jdGlvbikgPDwgMikgfCAoTWV0aG9kKSBcCi0pCi0KLSMgZWxzZQkvKiAhQ1RMX0NPREUgKi8gLyp9eyovCi0KLS8qIFVzZSB0aGUgZGVmaW5pdGlvbnMgc3RvbGVuIGZyb20gPHdpbmlvY3RsLmg+LiAgKi8KLQotI2RlZmluZSBDVExfQ09ERSggRGV2aWNlVHlwZSwgRnVuY3Rpb24sIE1ldGhvZCwgQWNjZXNzICkgKCAgICAgICAgICAgICAgICAgXAotICAgICgoRGV2aWNlVHlwZSkgPDwgMTYpIHwgKChBY2Nlc3MpIDw8IDE0KSB8ICgoRnVuY3Rpb24pIDw8IDIpIHwgKE1ldGhvZCkgXAotKQotCi0jZGVmaW5lIE1FVEhPRF9CVUZGRVJFRCAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNRVRIT0RfSU5fRElSRUNUICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTUVUSE9EX09VVF9ESVJFQ1QgICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1FVEhPRF9ORUlUSEVSICAgICAgICAgICAgICAgICAgMwotCi0jZGVmaW5lIEZJTEVfQU5ZX0FDQ0VTUyAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBGSUxFX1JFQURfQUNDRVNTICAgICAgICAgICggMHgwMDAxICkgICAgLy8gZmlsZSAmIHBpcGUKLSNkZWZpbmUgRklMRV9XUklURV9BQ0NFU1MgICAgICAgICAoIDB4MDAwMiApICAgIC8vIGZpbGUgJiBwaXBlCi0KLSMgZW5kaWYJLyogQ1RMX0NPREUgKi8gLyp9Ki8KLQotLyoKLSAqIE5vdyB3ZSBjYW4gZGVmaW5lIFdpbk5UL1dpbjk1IERldmljZUlvQ29udHJvbCBjb2Rlcy4KLSAqCi0gKiBUaGVzZSBjb2RlcyBhcmUgZGVmaW5lZCBpbiBkaV9kZWZzLmggdG9vLCBhIHBvc3NpYmxlIG1pc21hdGNoIHdpbGwgYmUKLSAqIGRldGVjdGVkIHdoZW4gdGhlIGRiZ3Rvb2wgaXMgY29tcGlsZWQuCi0gKi8KLQotI2RlZmluZSBJT0NUTF9EUklWRVJfTE5LIFwKLQlDVExfQ09ERSgweDgwMDFVLDB4NzAxLE1FVEhPRF9PVVRfRElSRUNULEZJTEVfQU5ZX0FDQ0VTUykKLSNkZWZpbmUgSU9DVExfRFJJVkVSX0RCRyBcCi0JQ1RMX0NPREUoMHg4MDAxVSwweDcwMixNRVRIT0RfT1VUX0RJUkVDVCxGSUxFX0FOWV9BQ0NFU1MpCi0KLSNlbmRpZiAvKiBfX0RCR0lPQ1RMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFfZGlkZC5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFfZGlkZC5jCmluZGV4IDE0Mjk4YjguLmQ3NTVkOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhX2RpZGQuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YV9kaWRkLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAlyZXR1cm4gKDApOwogfQogCi1zdGF0aWMgdm9pZCBESVZBX0VYSVRfRlVOQ1RJT04gcmVtb3ZlX3Byb2Modm9pZCkKK3N0YXRpYyB2b2lkIHJlbW92ZV9wcm9jKHZvaWQpCiB7CiAJcmVtb3ZlX3Byb2NfZW50cnkoRFJJVkVSTE5BTUUsIHByb2NfbmV0X2VpY29uKTsKIAlyZW1vdmVfcHJvY19lbnRyeSgibmV0L2VpY29uIiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YW1udC5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFtbnQuYwppbmRleCA0YWJhNWM1Li5jOTA5Mjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YW1udC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhbW50LmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzZnVuYy5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzZnVuYy5jCmluZGV4IGRmNjFlNTEuLjQ2ZmMyMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2Z1bmMuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNmdW5jLmMKQEAgLTIzMSw3ICsyMzEsNyBAQAogLyoKICAqIGV4aXQKICAqLwotdm9pZCBESVZBX0VYSVRfRlVOQ1RJT04gZGl2YXNmdW5jX2V4aXQodm9pZCkKK3ZvaWQgZGl2YXNmdW5jX2V4aXQodm9pZCkKIHsKIAlkaXZhc2FfeGRpX2RyaXZlcl91bmxvYWQoKTsKIAlkaXNjb25uZWN0X2RpZGQoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYwppbmRleCA1NTZiMTk2Li43OGYxNDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzbWFpbi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzbWFpbi5jCmluZGV4IDVlODYyZTIuLjZkMzlmOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc21haW4uYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNtYWluLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXN5bmMuaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc3luYy5oCmluZGV4IGFmM2ViOWUuLjg1Nzg0YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc3luYy5oCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc3luYy5oCkBAIC0yMTYsNyArMjE2LDcgQEAKICNkZWZpbmUgU0VSSUFMX0hPT0tfUklORyAweDg1CiAjZGVmaW5lIFNFUklBTF9IT09LX0RFVEFDSCAweDhmCiAgdW5zaWduZWQgY2hhciBGbGFnczsgICAgICAgICAgIC8qIGZ1bmN0aW9uIHJlZmluZW1lbnRzICAgKi8KLSAvKiBwYXJhbWV0ZXJzIHBhc3NlZCBieSB0aGUgdGhlIEFUVEFDSCByZXF1ZXN0ICAgICAgKi8KKyAvKiBwYXJhbWV0ZXJzIHBhc3NlZCBieSB0aGUgQVRUQUNIIHJlcXVlc3QgICAgICAqLwogIFNFUklBTF9JTlRfQ0IgSW50ZXJydXB0SGFuZGxlcjsgLyogY2FsbGVkIG9uIGVhY2ggaW50ZXJydXB0ICAqLwogIFNFUklBTF9EUENfQ0IgRGVmZXJyZWRIYW5kbGVyOyAvKiBjYWxsZWQgb24gaG9vayBzdGF0ZSBjaGFuZ2VzICovCiAgdm9pZCAgICpIYW5kbGVyQ29udGV4dDsgLyogY29udGV4dCBmb3IgYm90aCBoYW5kbGVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21haW5faWYuaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tYWluX2lmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYTMzOWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21haW5faWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKgotICBDb3B5cmlnaHQgKGMpIEVpY29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24sIDIwMDAuCi0gKgotICBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1cHBsaWVkIGZvciB0aGUgdXNlIHdpdGggRWljb24KLSAgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbidzIHJhbmdlIG9mIERJVkEgU2VydmVyIEFkYXB0ZXJzLgotICoKLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgV0hBVFNPRVZFUiBJTkNMVURJTkcgQU5ZCi0gIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIGZpbGU6IG1haW5faWYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSMgaWZuZGVmIE1BSU5fSUZfX19ICi0jIGRlZmluZSBNQUlOX0lGX19fSAotCi0jIGluY2x1ZGUgImRlYnVnX2lmLmgiCi0KLXZvaWQgIERJX2xvY2sgKHZvaWQpIDsKLXZvaWQgIERJX3VubG9jayAodm9pZCkgOwotCi0jaWZkZWYgTk9UX1lFVF9ORUVERUQKLXZvaWQgIERJX250dGltZSAoTEFSR0VfSU5URUdFUiAqTlR0aW1lKSA7Ci12b2lkICBESV9udGxjbHRpbWUoTEFSR0VfSU5URUdFUiAqTlR0aW1lLCBMQVJHRV9JTlRFR0VSICpsY2xOVHRpbWUpIDsKLXZvaWQgIERJX250dGltZWZpZWxkcyhMQVJHRV9JTlRFR0VSICpOVHRpbWUsIFRJTUVfRklFTERTICpUaW1lRmllbGRzKTsKLXVuc2lnbmVkIGxvbmcgIERJX3dpbnRpbWUoTEFSR0VfSU5URUdFUiAqTlR0aW1lKSA7Ci0KLXVuc2lnbmVkIHNob3J0ICBEaUluc2VydFByb2Nlc3Nvck51bWJlciAoaW50IHR5cGUpIDsKLXZvaWQgRGlQcm9jZXNzRXZlbnRMb2cgKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBsb25nIG1zZ0lELCB2YV9saXN0IGFwKTsKLQotdm9pZCAgU3RhcnRJb2N0bFRpbWVyICh2b2lkICgqSGFuZGxlcikodm9pZCksIHVuc2lnbmVkIGxvbmcgbXNlYykgOwotdm9pZCAgU3RvcElvY3RsVGltZXIgKHZvaWQpIDsKLXZvaWQgIFVucGVuZElvY3RsIChEYmdSZXF1ZXN0ICpwRGJnUmVxKSA7Ci0jZW5kaWYKLQotdm9pZCBhZGRfdG9fcShpbnQsIGNoYXIqICwgdW5zaWduZWQgaW50KTsKLSMgZW5kaWYgLyogTUFJTl9JRl9fX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKaW5kZXggNzg0MjMyYS4uY2NkMzVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCkBAIC0xLDQgKzEsMyBAQAotCiAvKgogICoKICAgQ29weXJpZ2h0IChjKSBFaWNvbiBOZXR3b3JrcywgMjAwMi4KQEAgLTUzMyw3ICs1MzIsNyBAQAogICAgICAgICBpZiAobS0+aGVhZGVyLmNvbW1hbmQgPT0gX0RBVEFfQjNfUikKICAgICAgICAgewogCi0gICAgICAgICAgbS0+aW5mby5kYXRhX2IzX3JlcS5EYXRhID0gKGR3b3JkKShUcmFuc21pdEJ1ZmZlclNldCAoYXBwbCwgbS0+aW5mby5kYXRhX2IzX3JlcS5EYXRhKSk7CisgICAgICAgICAgbS0+aW5mby5kYXRhX2IzX3JlcS5EYXRhID0gKGR3b3JkKShsb25nKShUcmFuc21pdEJ1ZmZlclNldCAoYXBwbCwgbS0+aW5mby5kYXRhX2IzX3JlcS5EYXRhKSk7CiAKICAgICAgICAgfQogCkBAIC0xMDMyLDcgKzEwMzEsNyBAQAogICAgICAgewogCiAgICAgICAgIFRyYW5zbWl0QnVmZmVyRnJlZSAocGxjaS0+YXBwbCwKLSAgICAgICAgICAoYnl0ZSAgICopKCgoQ0FQSV9NU0cgICAqKSgmKChieXRlICAgKikocGxjaS0+bXNnX2luX3F1ZXVlKSlbaV0pKS0+aW5mby5kYXRhX2IzX3JlcS5EYXRhKSk7CisgICAgICAgICAgKGJ5dGUgKikobG9uZykoKChDQVBJX01TRyAqKSgmKChieXRlICopKHBsY2ktPm1zZ19pbl9xdWV1ZSkpW2ldKSktPmluZm8uZGF0YV9iM19yZXEuRGF0YSkpOwogCiAgICAgICB9CiAKQEAgLTMxMTgsNyArMzExNyw3IEBACiAgICAgICAgJiYgKCgoYnl0ZSAgICopKHBhcm1zWzBdLmluZm8pKSA8ICgoYnl0ZSAgICopKHBsY2ktPm1zZ19pbl9xdWV1ZSkpICsgc2l6ZW9mKHBsY2ktPm1zZ19pbl9xdWV1ZSkpKQogICAgICAgewogCi0gICAgICAgIGRhdGEtPlAgPSAoYnl0ZSAgICopKCooKGR3b3JkICAgKikocGFybXNbMF0uaW5mbykpKTsKKyAgICAgICAgZGF0YS0+UCA9IChieXRlICopKGxvbmcpKCooKGR3b3JkICopKHBhcm1zWzBdLmluZm8pKSk7CiAKICAgICAgIH0KICAgICAgIGVsc2UKQEAgLTMxNTEsNyArMzE1MCw3IEBACiAgICAgICAgJiYgKCgoYnl0ZSAgICopKHBhcm1zWzBdLmluZm8pKSA8ICgoYnl0ZSAgICopKHBsY2ktPm1zZ19pbl9xdWV1ZSkpICsgc2l6ZW9mKHBsY2ktPm1zZ19pbl9xdWV1ZSkpKQogICAgICAgewogCi0gICAgICAgIFRyYW5zbWl0QnVmZmVyRnJlZSAoYXBwbCwgKGJ5dGUgICAqKSgqKChkd29yZCAgICopKHBhcm1zWzBdLmluZm8pKSkpOworICAgICAgICBUcmFuc21pdEJ1ZmZlckZyZWUgKGFwcGwsIChieXRlICopKGxvbmcpKCooKGR3b3JkICopKHBhcm1zWzBdLmluZm8pKSkpOwogCiAgICAgICB9CiAgICAgfQpAQCAtNDA1Nyw3ICs0MDU2LDcgQEAKICAgICB7CiAgICAgICBpZiAobS0+aGVhZGVyLmNvbW1hbmQgPT0gX0RBVEFfQjNfUikKIAotICAgICAgICBUcmFuc21pdEJ1ZmZlckZyZWUgKGFwcGwsIChieXRlICAgKikobS0+aW5mby5kYXRhX2IzX3JlcS5EYXRhKSk7CisgICAgICAgIFRyYW5zbWl0QnVmZmVyRnJlZSAoYXBwbCwgKGJ5dGUgKikobG9uZykobS0+aW5mby5kYXRhX2IzX3JlcS5EYXRhKSk7CiAKICAgICAgIGRidWcoMSxkcHJpbnRmKCJFcnJvciAweCUwNHggZnJvbSBtc2coMHglMDR4KSIsIGksIG0tPmhlYWRlci5jb21tYW5kKSk7CiAgICAgICBicmVhazsKQEAgLTcxMzQsNyArNzEzMyw3IEBACiAgIGNhc2UgTl9VREFUQToKICAgICBpZiAoISh1ZGF0YV9mb3J3YXJkaW5nX3RhYmxlW3BsY2ktPk5MLlJCdWZmZXItPlBbMF0gPj4gNV0gJiAoMUwgPDwgKHBsY2ktPk5MLlJCdWZmZXItPlBbMF0gJiAweDFmKSkpKQogICAgIHsKLSAgICAgIHBsY2ktPlJEYXRhWzBdLlAgPSBwbGNpLT5pbnRlcm5hbF9pbmRfYnVmZmVyICsgKC0oKGludCkocGxjaS0+aW50ZXJuYWxfaW5kX2J1ZmZlcikpICYgMyk7CisgICAgICBwbGNpLT5SRGF0YVswXS5QID0gcGxjaS0+aW50ZXJuYWxfaW5kX2J1ZmZlciArICgtKChpbnQpKGxvbmcpKHBsY2ktPmludGVybmFsX2luZF9idWZmZXIpKSAmIDMpOwogICAgICAgcGxjaS0+UkRhdGFbMF0uUExlbmd0aCA9IElOVEVSTkFMX0lORF9CVUZGRVJfU0laRTsKICAgICAgIHBsY2ktPk5MLlIgPSBwbGNpLT5SRGF0YTsKICAgICAgIHBsY2ktPk5MLlJOdW0gPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL3BsYXRmb3JtLmggYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vcGxhdGZvcm0uaAppbmRleCBmZjA5ZjA3Li4xNWQ0OTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vcGxhdGZvcm0uaAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vcGxhdGZvcm0uaApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYwppbmRleCBkYTQxOTZmLi44ZDUzYTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCkBAIC0xNTUxLDcgKzE1NTEsNyBAQAogCWlmIChyZXR2YWwgPT0gMCkgeyAvLyB5dWNrCiAJCWNhcmRzW2ldLnR5cCA9IDA7CiAJCW5yY2FyZHMtLTsKLQkJcmV0dXJuIHJldHZhbDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWNzID0gY2FyZHNbaV0uY3M7CiAJaGlzYXhfZF9pZi0+Y3MgPSBjczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5jCmluZGV4IDlmNDRkM2UuLmIxYTI2ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYwpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImhpc2F4X2lmLmgiCiAjaW5jbHVkZSAiaGZjX3VzYi5oIgpAQCAtNDg2LDcgKzQ4NSw2IEBACiB7CiAJaW50IGs7CiAKLQlzcGluX2xvY2tfaW5pdCgmdXJiLT5sb2NrKTsKIAl1cmItPmRldiA9IGRldjsKIAl1cmItPnBpcGUgPSBwaXBlOwogCXVyYi0+Y29tcGxldGUgPSBjb21wbGV0ZTsKQEAgLTU3OSwxNiArNTc3LDE0IEBACiAJCQkgICAgIkhGQy1TIFVTQjogU3RvcHBpbmcgaXNvIGNoYWluIGZvciBmaWZvICVpLiVpIiwKIAkJCSAgICBmaWZvLT5maWZvbnVtLCBpKTsKICNlbmRpZgotCQkJdXNiX3VubGlua191cmIoZmlmby0+aXNvW2ldLnB1cmIpOworCQkJdXNiX2tpbGxfdXJiKGZpZm8tPmlzb1tpXS5wdXJiKTsKIAkJCXVzYl9mcmVlX3VyYihmaWZvLT5pc29baV0ucHVyYik7CiAJCQlmaWZvLT5pc29baV0ucHVyYiA9IE5VTEw7CiAJCX0KIAl9Ci0JaWYgKGZpZm8tPnVyYikgewotCQl1c2JfdW5saW5rX3VyYihmaWZvLT51cmIpOwotCQl1c2JfZnJlZV91cmIoZmlmby0+dXJiKTsKLQkJZmlmby0+dXJiID0gTlVMTDsKLQl9CisJdXNiX2tpbGxfdXJiKGZpZm8tPnVyYik7CisJdXNiX2ZyZWVfdXJiKGZpZm8tPnVyYik7CisJZmlmby0+dXJiID0gTlVMTDsKIAlmaWZvLT5hY3RpdmUgPSAwOwogfQogCkBAIC0xMjE4LDExICsxMjE0LDExIEBACiAJLyogYXV4ID0gb3V0cHV0LCByZXNldCBvZmYgKi8KIAl3cml0ZV91c2IoaGZjLCBIRkNVU0JfQ0lSTSwgMHgxMCk7CiAKLQkvKiBzZXQgVVNCX1NJWkUgdG8gbWF0Y2ggdGhlIHRoZSB3TWF4UGFja2V0U2l6ZSBmb3IgSU5UIG9yIEJVTEsgdHJhbnNmZXJzICovCisJLyogc2V0IFVTQl9TSVpFIHRvIG1hdGNoIHRoZSB3TWF4UGFja2V0U2l6ZSBmb3IgSU5UIG9yIEJVTEsgdHJhbnNmZXJzICovCiAJd3JpdGVfdXNiKGhmYywgSEZDVVNCX1VTQl9TSVpFLAogCQkgIChoZmMtPnBhY2tldF9zaXplIC8gOCkgfCAoKGhmYy0+cGFja2V0X3NpemUgLyA4KSA8PCA0KSk7CiAKLQkvKiBzZXQgVVNCX1NJWkVfSSB0byBtYXRjaCB0aGUgdGhlIHdNYXhQYWNrZXRTaXplIGZvciBJU08gdHJhbnNmZXJzICovCisJLyogc2V0IFVTQl9TSVpFX0kgdG8gbWF0Y2ggdGhlIHdNYXhQYWNrZXRTaXplIGZvciBJU08gdHJhbnNmZXJzICovCiAJd3JpdGVfdXNiKGhmYywgSEZDVVNCX1VTQl9TSVpFX0ksIGhmYy0+aXNvX3BhY2tldF9zaXplKTsKIAogCS8qIGVuYWJsZSBQQ00vR0NJIG1hc3RlciBtb2RlICovCkBAIC0xMzA2LDcgKzEzMDIsMTEgQEAKIAl9CiAJLyogZGVmYXVsdCBQcm90OiBFVVJPIElTRE4sIHNob3VsZCBiZSBhIG1vZHVsZV9wYXJhbSAqLwogCWhmYy0+cHJvdG9jb2wgPSAyOwotCWhpc2F4X3JlZ2lzdGVyKCZoZmMtPmRfaWYsIHBfYl9pZiwgImhmY191c2IiLCBoZmMtPnByb3RvY29sKTsKKwlpID0gaGlzYXhfcmVnaXN0ZXIoJmhmYy0+ZF9pZiwgcF9iX2lmLCAiaGZjX3VzYiIsIGhmYy0+cHJvdG9jb2wpOworCWlmIChpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkhGQy1TIFVTQjogaGlzYXhfcmVnaXN0ZXIgLT4gJWRcbiIsIGkpOworCQlyZXR1cm4gaTsKKwl9CiAKICNpZmRlZiBDT05GSUdfSElTQVhfREVCVUcKIAloZmNfZGVidWcgPSBkZWJ1ZzsKQEAgLTE2MjcsMTEgKzE2MjcsOSBAQAogI2VuZGlmCiAJCQkvKiBpbml0IHRoZSBjaGlwIGFuZCByZWdpc3RlciB0aGUgZHJpdmVyICovCiAJCQlpZiAodXNiX2luaXQoY29udGV4dCkpIHsKLQkJCQlpZiAoY29udGV4dC0+Y3RybF91cmIpIHsKLQkJCQkJdXNiX3VubGlua191cmIoY29udGV4dC0+Y3RybF91cmIpOwotCQkJCQl1c2JfZnJlZV91cmIoY29udGV4dC0+Y3RybF91cmIpOwotCQkJCQljb250ZXh0LT5jdHJsX3VyYiA9IE5VTEw7Ci0JCQkJfQorCQkJCXVzYl9raWxsX3VyYihjb250ZXh0LT5jdHJsX3VyYik7CisJCQkJdXNiX2ZyZWVfdXJiKGNvbnRleHQtPmN0cmxfdXJiKTsKKwkJCQljb250ZXh0LT5jdHJsX3VyYiA9IE5VTEw7CiAJCQkJa2ZyZWUoY29udGV4dCk7CiAJCQkJcmV0dXJuICgtRUlPKTsKIAkJCX0KQEAgLTE2ODMsMjEgKzE2ODEsMTUgQEAKIAkJCQkgICAgaSk7CiAjZW5kaWYKIAkJCX0KLQkJCWlmIChjb250ZXh0LT5maWZvc1tpXS51cmIpIHsKLQkJCQl1c2JfdW5saW5rX3VyYihjb250ZXh0LT5maWZvc1tpXS51cmIpOwotCQkJCXVzYl9mcmVlX3VyYihjb250ZXh0LT5maWZvc1tpXS51cmIpOwotCQkJCWNvbnRleHQtPmZpZm9zW2ldLnVyYiA9IE5VTEw7Ci0JCQl9CisJCQl1c2Jfa2lsbF91cmIoY29udGV4dC0+Zmlmb3NbaV0udXJiKTsKKwkJCXVzYl9mcmVlX3VyYihjb250ZXh0LT5maWZvc1tpXS51cmIpOworCQkJY29udGV4dC0+Zmlmb3NbaV0udXJiID0gTlVMTDsKIAkJfQogCQljb250ZXh0LT5maWZvc1tpXS5hY3RpdmUgPSAwOwogCX0KLQkvKiB3YWl0IGZvciBhbGwgVVJCUyB0byB0ZXJtaW5hdGUgKi8KLQltZGVsYXkoMTApOwotCWlmIChjb250ZXh0LT5jdHJsX3VyYikgewotCQl1c2JfdW5saW5rX3VyYihjb250ZXh0LT5jdHJsX3VyYik7Ci0JCXVzYl9mcmVlX3VyYihjb250ZXh0LT5jdHJsX3VyYik7Ci0JCWNvbnRleHQtPmN0cmxfdXJiID0gTlVMTDsKLQl9CisJdXNiX2tpbGxfdXJiKGNvbnRleHQtPmN0cmxfdXJiKTsKKwl1c2JfZnJlZV91cmIoY29udGV4dC0+Y3RybF91cmIpOworCWNvbnRleHQtPmN0cmxfdXJiID0gTlVMTDsKIAloaXNheF91bnJlZ2lzdGVyKCZjb250ZXh0LT5kX2lmKTsKIAlrZnJlZShjb250ZXh0KTsJCS8qIGZyZWUgb3VyIHN0cnVjdHVyZSBhZ2FpbiAqLwogfQkJCQkvKiBoZmNfdXNiX2Rpc2Nvbm5lY3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9mY3BjaXBucC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2ZjcGNpcG5wLmMKaW5kZXggOWUwODhmYy4uNzk5M2UwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2ZjcGNpcG5wLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2ZjcGNpcG5wLmMKQEAgLTg1OSw3ICs4NTksMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQogCQliX2lmW2ldID0gJmFkYXB0ZXItPmJjc1tpXS5iX2lmOwogCi0JaGlzYXhfcmVnaXN0ZXIoJmFkYXB0ZXItPmlzYWMuaGlzYXhfZF9pZiwgYl9pZiwgImZjcGNpcG5wIiwgcHJvdG9jb2wpOworCWlmIChoaXNheF9yZWdpc3RlcigmYWRhcHRlci0+aXNhYy5oaXNheF9kX2lmLCBiX2lmLCAiZmNwY2lwbnAiLAorCQkJcHJvdG9jb2wpICE9IDApIHsKKwkJa2ZyZWUoYWRhcHRlcik7CisJCWFkYXB0ZXIgPSBOVUxMOworCX0KIAogCXJldHVybiBhZGFwdGVyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYwppbmRleCBiYjNhMjhhLi4xMzc1MTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYwpAQCAtMTA3LDEyICsxMDcsMTcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQogCQliX2lmW2ldID0gJmFkYXB0ZXItPmJjc1tpXS5iX2lmOwogCi0JaGlzYXhfcmVnaXN0ZXIoJmFkYXB0ZXItPmhpc2F4X2RfaWYsIGJfaWYsICJzdDU0ODFfdXNiIiwgcHJvdG9jb2wpOworCWlmIChoaXNheF9yZWdpc3RlcigmYWRhcHRlci0+aGlzYXhfZF9pZiwgYl9pZiwgInN0NTQ4MV91c2IiLAorCQkJcHJvdG9jb2wpICE9IDApCisJCWdvdG8gZXJyX2IxOworCiAJc3Q1NDgxX3N0YXJ0KGFkYXB0ZXIpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBhZGFwdGVyKTsKIAlyZXR1cm4gMDsKIAorIGVycl9iMToKKwlzdDU0ODFfcmVsZWFzZV9iKCZhZGFwdGVyLT5iY3NbMV0pOwogIGVycl9iOgogCXN0NTQ4MV9yZWxlYXNlX2IoJmFkYXB0ZXItPmJjc1swXSk7CiAgZXJyX2Q6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV91c2IuYwppbmRleCBmZjE1OTUxLi40YWRhNjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfdXNiLmMKQEAgLTQwNyw3ICs0MDcsNiBAQAogewogCWludCBrOwogCi0Jc3Bpbl9sb2NrX2luaXQoJnVyYi0+bG9jayk7CiAJdXJiLT5kZXY9ZGV2OwogCXVyYi0+cGlwZT1waXBlOwogCXVyYi0+aW50ZXJ2YWwgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2JvYXJkZXJnby5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2JvYXJkZXJnby5jCmluZGV4IDg0ZGNjZDUuLjZjZGJhZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9ib2FyZGVyZ28uYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vYm9hcmRlcmdvLmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCWNhcmQtPndhaXRwb2ZyZWFkeSA9IGVyZ29fd2FpdHBvZnJlYWR5OwogCWNhcmQtPnNldF9lcnJsb2dfc3RhdGUgPSBlcmdvX3NldF9lcnJsb2dfc3RhdGU7CiAJSU5JVF9XT1JLKCZjYXJkLT5pcnFfcXVldWUsIGVyZ29faXJxX2JoKTsKLQljYXJkLT5oeXNkbl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5oeXNkbl9sb2NrKTsKIAogCXJldHVybiAoMCk7CiB9CQkJCS8qIGVyZ29faW5pdGhhcmR3YXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYwppbmRleCA0YzdkZWRhLi4yN2IzOTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKQEAgLTI5Nyw4ICsyOTcsNiBAQAogCXN0cnVjdCBwcm9jZGF0YSAqcGQ7CiAJaHlzZG5fY2FyZCAqY2FyZDsKIAlpbnQgcmV0dmFsID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5sb2NrX3QgaHlzZG5fbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKIAogCWxvY2tfa2VybmVsKCk7CiAJaWYgKChmaWxlcC0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSkpID09IEZNT0RFX1dSSVRFKSB7CkBAIC0zMDgsNyArMzA2LDYgQEAKIAkJLyogcmVhZCBhY2Nlc3MgLT4gbG9nL2RlYnVnIHJlYWQsIG1hcmsgb25lIGZ1cnRoZXIgZmlsZSBhcyBjbG9zZWQgKi8KIAogCQlwZCA9IE5VTEw7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZoeXNkbl9sb2NrLCBmbGFncyk7CiAJCWluZiA9ICooKHN0cnVjdCBsb2dfZGF0YSAqKikgZmlsZXAtPnByaXZhdGVfZGF0YSk7CS8qIGdldCBmaXJzdCBsb2cgZW50cnkgKi8KIAkJaWYgKGluZikKIAkJCXBkID0gKHN0cnVjdCBwcm9jZGF0YSAqKSBpbmYtPnByb2NfY3RybDsJLyogc3RpbGwgZW50cmllcyB0aGVyZSAqLwpAQCAtMzMxLDcgKzMyOCw2IEBACiAJCQlpbmYtPnVzYWdlX2NudC0tOwkvKiBkZWNyZW1lbnQgdXNhZ2UgY291bnQgZm9yIGJ1ZmZlcnMgKi8KIAkJCWluZiA9IGluZi0+bmV4dDsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoeXNkbl9sb2NrLCBmbGFncyk7CiAKIAkJaWYgKHBkKQogCQkJaWYgKHBkLT5pZl91c2VkIDw9IDApCS8qIGRlbGV0ZSBidWZmZXJzIGlmIGxhc3QgZmlsZSBjbG9zZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYwppbmRleCBlYTVmMzBkLi40ZTVmODdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCkBAIC0yNjkzLDggKzI2OTMsOSBAQAogCWludCBsaW1pdCA9IElTRE5fTVNOTEVOIC0gMTsJLyogTVVTVCBtYXRjaCB0aGUgc2l6ZSBvZiBpbnRlcmZhY2UgdmFyIHRvIGF2b2lkCiAJCQkJCWJ1ZmZlciBvdmVyZmxvdyAqLwogCi0Jd2hpbGUgKHN0cmNocigiIDAxMjM0NTY3ODksIy4qV1BUUy0iLCAqcCkgJiYgKnAgJiYgLS1jbnQ+MCkgeworCXdoaWxlIChzdHJjaHIoIiAwMTIzNDU2Nzg5LCMuKldQVFNSLSIsICpwKSAmJiAqcCAmJiAtLWNudD4wKSB7CiAJCWlmICgoKnAgPj0gJzAnICYmICpwIDw9ICc5JykgfHwgKCgqcCA9PSAnUycpICYmIGZpcnN0KSB8fAorCQkgICAgKCgqcCA9PSAnUicpICYmIGZpcnN0KSB8fAogCQkgICAgKCpwID09ICcqJykgfHwgKCpwID09ICcjJykpIHsKIAkJCSpxKysgPSAqcDsKIAkJCWxpbWl0LS07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jIGIvZHJpdmVycy9pc2RuL2ljbi9pY24uYwppbmRleCAxZTY5OWJjLi44MmQ5NTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlICJpY24uaCIKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogc3RhdGljIGludCBwb3J0YmFzZSA9IElDTl9CQVNFQUREUjsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbWJhc2UgPSBJQ05fTUVNQUREUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pc2RubG9vcC9pc2RubG9vcC5jIGIvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKaW5kZXggZTkzYWQ1OS4uYmI5MmUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKKysrIGIvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKQEAgLTE0NjIsNyArMTQ2Miw3IEBACiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNhcmQtPmJxdWV1ZVtpXSk7CiAJfQogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNhcmQtPmRxdWV1ZSk7Ci0JY2FyZC0+aXNkbmxvb3BfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+aXNkbmxvb3BfbG9jayk7CiAJY2FyZC0+bmV4dCA9IGNhcmRzOwogCWNhcmRzID0gY2FyZDsKIAlpZiAoIXJlZ2lzdGVyX2lzZG4oJmNhcmQtPmludGVyZmFjZSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9zYy9tZXNzYWdlLmMgYi9kcml2ZXJzL2lzZG4vc2MvbWVzc2FnZS5jCmluZGV4IGM1YTMwN2UuLjBiNGM0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9zYy9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy9pc2RuL3NjL21lc3NhZ2UuYwpAQCAtMTYsNyArMTYsNyBAQAogICogICAgICsxICg0MTYpIDI5Ny04NTY1CiAgKiAgICAgKzEgKDQxNikgMjk3LTY0MzMgRmFjc2ltaWxlCiAgKi8KLQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaW5jbHVkZXMuaCIKICNpbmNsdWRlICJoYXJkd2FyZS5oIgogI2luY2x1ZGUgIm1lc3NhZ2UuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMva3ZtL0tjb25maWcgYi9kcml2ZXJzL2t2bS9LY29uZmlnCmluZGV4IDcwM2NjODguLmU4ZTM3ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMva3ZtL0tjb25maWcKKysrIGIvZHJpdmVycy9rdm0vS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKICMgS1ZNIGNvbmZpZ3VyYXRpb24KICMKIG1lbnUgIlZpcnR1YWxpemF0aW9uIgorCWRlcGVuZHMgb24gWDg2CiAKIGNvbmZpZyBLVk0KIAl0cmlzdGF0ZSAiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9rdm0va3ZtLmggYi9kcml2ZXJzL2t2bS9rdm0uaAppbmRleCA0MTYzNGZkLi4xYzA0MGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2t2bS9rdm0uaAorKysgYi9kcml2ZXJzL2t2bS9rdm0uaApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KIAogI2luY2x1ZGUgInZteC5oIgogI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9rdm0va3ZtX21haW4uYyBiL2RyaXZlcnMva3ZtL2t2bV9tYWluLmMKaW5kZXggYzhiOGNmYS4uZGE5ODViMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9rdm0va3ZtX21haW4uYworKysgYi9kcml2ZXJzL2t2bS9rdm1fbWFpbi5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAieDg2X2VtdWxhdGUuaCIKICNpbmNsdWRlICJzZWdtZW50X2Rlc2NyaXB0b3IuaCIKQEAgLTI4ODksNyArMjg5MCw5IEBACiAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKIAkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiBkaXNhYmxpbmcgdmlydHVhbGl6YXRpb24gb24gQ1BVJWRcbiIsCiAJCSAgICAgICBjcHUpOwogCQlkZWNhY2hlX3ZjcHVzX29uX2NwdShjcHUpOwpAQCAtMjg5Nyw2ICsyOTAwLDcgQEAKIAkJCQkJIE5VTEwsIDAsIDEpOwogCQlicmVhazsKIAljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKIAkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiBlbmFibGluZyB2aXJ0dWFsaXphdGlvbiBvbiBDUFUlZFxuIiwKIAkJICAgICAgIGNwdSk7CiAJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGt2bV9hcmNoX29wcy0+aGFyZHdhcmVfZW5hYmxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9rdm0vc3ZtLmMgYi9kcml2ZXJzL2t2bS9zdm0uYwppbmRleCA5YzE1ZjMyLi5mYTE3ZDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2t2bS9zdm0uYworKysgYi9kcml2ZXJzL2t2bS9zdm0uYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KIAogI2luY2x1ZGUgImt2bV9zdm0uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMva3ZtL3ZteC5jIGIvZHJpdmVycy9rdm0vdm14LmMKaW5kZXggNzI0ZGIwMC4uMTg0MjM4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9rdm0vdm14LmMKKysrIGIvZHJpdmVycy9rdm0vdm14LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogCkBAIC02MzgsNyArNjM5LDcgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZtY3MsIHZtY3NfZGVzY3JpcHRvci5vcmRlcik7CiB9CiAKLXN0YXRpYyBfX2V4aXQgdm9pZCBmcmVlX2t2bV9hcmVhKHZvaWQpCitzdGF0aWMgdm9pZCBmcmVlX2t2bV9hcmVhKHZvaWQpCiB7CiAJaW50IGNwdTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCA4MGFjZDA4Li44N2QyMDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMSw1ICsxLDYgQEAKIAogbWVudSAiTEVEIGRldmljZXMiCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0KIAogY29uZmlnIE5FV19MRURTCiAJYm9vbCAiTEVEIFN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1oMTk0MC5jIGIvZHJpdmVycy9sZWRzL2xlZHMtaDE5NDAuYwppbmRleCAxZDQ5ZDJhLi42NzdjOTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1oMTk0MC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWgxOTQwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogZHJpdmVycy9sZWRzL2gxOTQwLWxlZHMuYworICogZHJpdmVycy9sZWRzL2xlZHMtaDE5NDAuYwogICogQ29weXJpZ2h0IChjKSBBcm5hdWQgUGF0YXJkIDxhcm5hdWQucGF0YXJkQHJ0cC1uZXQub3JnPgogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9LY29uZmlnIGIvZHJpdmVycy9tYWNpbnRvc2gvS2NvbmZpZwppbmRleCAxYTg2Mzg3Li5lZTY5OWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL0tjb25maWcKQEAgLTEsNiArMSwxMCBAQAogCi1tZW51ICJNYWNpbnRvc2ggZGV2aWNlIGRyaXZlcnMiCittZW51Y29uZmlnIE1BQ0lOVE9TSF9EUklWRVJTCisJYm9vbCAiTWFjaW50b3NoIGRldmljZSBkcml2ZXJzIgogCWRlcGVuZHMgb24gUFBDIHx8IE1BQyB8fCBYODYKKwlkZWZhdWx0IHkKKworaWYgTUFDSU5UT1NIX0RSSVZFUlMKIAogY29uZmlnIEFEQgogCWJvb2wgIkFwcGxlIERlc2t0b3AgQnVzIChBREIpIHN1cHBvcnQiCkBAIC0xMDksNyArMTEzLDggQEAKIAogY29uZmlnIFBNQUNfQVBNX0VNVQogCXRyaXN0YXRlICJBUE0gZW11bGF0aW9uIgotCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgUFBDMzIgJiYgUE0gJiYgQURCX1BNVQorCXNlbGVjdCBBUE1fRU1VTEFUSU9OCisJZGVwZW5kcyBvbiBBREJfUE1VICYmIFBNICYmIFBQQzMyCiAKIGNvbmZpZyBQTUFDX01FRElBQkFZCiAJYm9vbCAiU3VwcG9ydCBQb3dlckJvb2sgaG90c3dhcCBtZWRpYSBiYXkiCkBAIC0yMzEsNyArMjM2LDcgQEAKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgQXBwbGUgWFNlcnZlIGZyb250IHBhbmVsIExFRHMiCiAJZGVwZW5kcyBvbiBQUENfUE1BQwogCWhlbHAKLQkgIFRoaXMgZHJpdmVyIHByb2NpZGVzIHNvbWUgc3VwcG9ydCB0byBjb250cm9sIHRoZSBmcm9udCBwYW5lbAorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc29tZSBzdXBwb3J0IHRvIGNvbnRyb2wgdGhlIGZyb250IHBhbmVsCiAgICAgICAgICAgYmx1ZSBMRURzICJ2dS1tZXRlciIgb2YgdGhlIFhTZXJ2ZXIgbWFjcy4KIAotZW5kbWVudQorZW5kaWYgIyBNQUNJTlRPU0hfRFJJVkVSUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvYXBtX2VtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvYXBtX2VtdS5jCmluZGV4IGNkYjBiZWEuLjk4MjFlNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL2FwbV9lbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9hcG1fZW11LmMKQEAgLTEsOSArMSw3IEBACi0vKiBBUE0gZW11bGF0aW9uIGxheWVyIGZvciBQb3dlck1hYwotICogCi0gKiBDb3B5cmlnaHQgMjAwMSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpCisvKgorICogQVBNIGVtdWxhdGlvbiBmb3IgUE1VLWJhc2VkIG1hY2hpbmVzCiAgKgotICogTG90cyBvZiBjb2RlIGluaGVyaXRlZCBmcm9tIGFwbS5jLCBzZWUgYXBwcm9wcmlhdGUgbm90aWNlIGluCi0gKiAgYXJjaC9pMzg2L2tlcm5lbC9hcG0uYworICogQ29weXJpZ2h0IDIwMDEgQmVuamFtaW4gSGVycmVuc2NobWlkdCAoYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE4LDQyOSArMTYsMzkgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9hcG1fYmlvcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FwbS1lbXVsYXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9hZGIuaD4KICNpbmNsdWRlIDxsaW51eC9wbXUuaD4KIAotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0KLSN1bmRlZiBERUJVRwotCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgREJHKGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCi0vLyNkZWZpbmUgREJHKGFyZ3MuLi4pIHhtb25fcHJpbnRmKGFyZ3MpCi0jZWxzZQotI2RlZmluZSBEQkcoYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLS8qCi0gKiBUaGUgYXBtX2Jpb3MgZGV2aWNlIGlzIG9uZSBvZiB0aGUgbWlzYyBjaGFyIGRldmljZXMuCi0gKiBUaGlzIGlzIGl0cyBtaW5vciBudW1iZXIuCi0gKi8KLSNkZWZpbmUJQVBNX01JTk9SX0RFVgkxMzQKLQotLyoKLSAqIE1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBzdG9yZWQKLSAqLwotI2RlZmluZSBBUE1fTUFYX0VWRU5UUwkJMjAKLQotI2RlZmluZSBGQUtFX0FQTV9CSU9TX1ZFUlNJT04JMHgwMTAxCi0KLSNkZWZpbmUgQVBNX1VTRVJfTk9USUZZX1RJTUVPVVQJKDUqSFopCi0KLS8qCi0gKiBUaGUgcGVyLWZpbGUgQVBNIGRhdGEKLSAqLwotc3RydWN0IGFwbV91c2VyIHsKLQlpbnQJCW1hZ2ljOwotCXN0cnVjdCBhcG1fdXNlciAqCW5leHQ7Ci0JaW50CQlzdXNlcjogMTsKLQlpbnQJCXN1c3BlbmRfd2FpdGluZzogMTsKLQlpbnQJCXN1c3BlbmRzX3BlbmRpbmc7Ci0JaW50CQlzdXNwZW5kc19yZWFkOwotCWludAkJZXZlbnRfaGVhZDsKLQlpbnQJCWV2ZW50X3RhaWw7Ci0JYXBtX2V2ZW50X3QJZXZlbnRzW0FQTV9NQVhfRVZFTlRTXTsKLX07Ci0KLS8qCi0gKiBUaGUgbWFnaWMgbnVtYmVyIGluIGFwbV91c2VyCi0gKi8KLSNkZWZpbmUgQVBNX0JJT1NfTUFHSUMJCTB4NDEwMQotCi0vKgotICogTG9jYWwgdmFyaWFibGVzCi0gKi8KLXN0YXRpYyBpbnQJCQlzdXNwZW5kc19wZW5kaW5nOwotCi1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoYXBtX3dhaXRxdWV1ZSk7Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoYXBtX3N1c3BlbmRfd2FpdHF1ZXVlKTsKLXN0YXRpYyBzdHJ1Y3QgYXBtX3VzZXIgKgl1c2VyX2xpc3Q7Ci0KLXN0YXRpYyB2b2lkIGFwbV9ub3RpZnlfc2xlZXAoc3RydWN0IHBtdV9zbGVlcF9ub3RpZmllciAqc2VsZiwgaW50IHdoZW4pOwotc3RhdGljIHN0cnVjdCBwbXVfc2xlZXBfbm90aWZpZXIgYXBtX3NsZWVwX25vdGlmaWVyID0gewotCWFwbV9ub3RpZnlfc2xlZXAsCi0JU0xFRVBfTEVWRUxfVVNFUkxBTkQsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfdmVyc2lvbltdID0gIjAuNSI7CS8qIG5vIHNwYWNlcyAqLwotCi0jaWZkZWYgREVCVUcKLXN0YXRpYyBjaGFyICoJYXBtX2V2ZW50X25hbWVbXSA9IHsKLQkic3lzdGVtIHN0YW5kYnkiLAotCSJzeXN0ZW0gc3VzcGVuZCIsCi0JIm5vcm1hbCByZXN1bWUiLAotCSJjcml0aWNhbCByZXN1bWUiLAotCSJsb3cgYmF0dGVyeSIsCi0JInBvd2VyIHN0YXR1cyBjaGFuZ2UiLAotCSJ1cGRhdGUgdGltZSIsCi0JImNyaXRpY2FsIHN1c3BlbmQiLAotCSJ1c2VyIHN0YW5kYnkiLAotCSJ1c2VyIHN1c3BlbmQiLAotCSJzeXN0ZW0gc3RhbmRieSByZXN1bWUiLAotCSJjYXBhYmlsaXRpZXMgY2hhbmdlIgotfTsKLSNkZWZpbmUgTlJfQVBNX0VWRU5UX05BTUUJXAotCQkoc2l6ZW9mKGFwbV9ldmVudF9uYW1lKSAvIHNpemVvZihhcG1fZXZlbnRfbmFtZVswXSkpCi0KLSNlbmRpZgotCi1zdGF0aWMgaW50IHF1ZXVlX2VtcHR5KHN0cnVjdCBhcG1fdXNlciAqYXMpCi17Ci0JcmV0dXJuIGFzLT5ldmVudF9oZWFkID09IGFzLT5ldmVudF90YWlsOwotfQotCi1zdGF0aWMgYXBtX2V2ZW50X3QgZ2V0X3F1ZXVlZF9ldmVudChzdHJ1Y3QgYXBtX3VzZXIgKmFzKQotewotCWFzLT5ldmVudF90YWlsID0gKGFzLT5ldmVudF90YWlsICsgMSkgJSBBUE1fTUFYX0VWRU5UUzsKLQlyZXR1cm4gYXMtPmV2ZW50c1thcy0+ZXZlbnRfdGFpbF07Ci19Ci0KLXN0YXRpYyB2b2lkIHF1ZXVlX2V2ZW50KGFwbV9ldmVudF90IGV2ZW50LCBzdHJ1Y3QgYXBtX3VzZXIgKnNlbmRlcikKLXsKLQlzdHJ1Y3QgYXBtX3VzZXIgKglhczsKLQotCURCRygiYXBtX2VtdTogcXVldWVfZXZlbnQoJXMpXG4iLCBhcG1fZXZlbnRfbmFtZVtldmVudC0xXSk7Ci0JaWYgKHVzZXJfbGlzdCA9PSBOVUxMKQotCQlyZXR1cm47Ci0JZm9yIChhcyA9IHVzZXJfbGlzdDsgYXMgIT0gTlVMTDsgYXMgPSBhcy0+bmV4dCkgewotCQlpZiAoYXMgPT0gc2VuZGVyKQotCQkJY29udGludWU7Ci0JCWFzLT5ldmVudF9oZWFkID0gKGFzLT5ldmVudF9oZWFkICsgMSkgJSBBUE1fTUFYX0VWRU5UUzsKLQkJaWYgKGFzLT5ldmVudF9oZWFkID09IGFzLT5ldmVudF90YWlsKSB7Ci0JCQlzdGF0aWMgaW50IG5vdGlmaWVkOwotCi0JCQlpZiAobm90aWZpZWQrKyA9PSAwKQotCQkJICAgIHByaW50ayhLRVJOX0VSUiAiYXBtX2VtdTogYW4gZXZlbnQgcXVldWUgb3ZlcmZsb3dlZFxuIik7Ci0JCQlhcy0+ZXZlbnRfdGFpbCA9IChhcy0+ZXZlbnRfdGFpbCArIDEpICUgQVBNX01BWF9FVkVOVFM7Ci0JCX0KLQkJYXMtPmV2ZW50c1thcy0+ZXZlbnRfaGVhZF0gPSBldmVudDsKLQkJaWYgKCFhcy0+c3VzZXIpCi0JCQljb250aW51ZTsKLQkJc3dpdGNoIChldmVudCkgewotCQljYXNlIEFQTV9TWVNfU1VTUEVORDoKLQkJY2FzZSBBUE1fVVNFUl9TVVNQRU5EOgotCQkJYXMtPnN1c3BlbmRzX3BlbmRpbmcrKzsKLQkJCXN1c3BlbmRzX3BlbmRpbmcrKzsKLQkJCWJyZWFrOwotCQljYXNlIEFQTV9OT1JNQUxfUkVTVU1FOgotCQkJYXMtPnN1c3BlbmRfd2FpdGluZyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwbV93YWl0cXVldWUpOwotfQotCi1zdGF0aWMgaW50IGNoZWNrX2FwbV91c2VyKHN0cnVjdCBhcG1fdXNlciAqYXMsIGNvbnN0IGNoYXIgKmZ1bmMpCi17Ci0JaWYgKChhcyA9PSBOVUxMKSB8fCAoYXMtPm1hZ2ljICE9IEFQTV9CSU9TX01BR0lDKSkgewotCQlwcmludGsoS0VSTl9FUlIgImFwbV9lbXU6ICVzIHBhc3NlZCBiYWQgZmlscFxuIiwgZnVuYyk7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgZG9fcmVhZChzdHJ1Y3QgZmlsZSAqZnAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBhcG1fdXNlciAqCWFzOwotCXNpemVfdAkJCWk7Ci0JYXBtX2V2ZW50X3QJCWV2ZW50OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0JYXMgPSBmcC0+cHJpdmF0ZV9kYXRhOwotCWlmIChjaGVja19hcG1fdXNlcihhcywgInJlYWQiKSkKLQkJcmV0dXJuIC1FSU87Ci0JaWYgKGNvdW50IDwgc2l6ZW9mKGFwbV9ldmVudF90KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHF1ZXVlX2VtcHR5KGFzKSkgewotCQlpZiAoZnAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCWFkZF93YWl0X3F1ZXVlKCZhcG1fd2FpdHF1ZXVlLCAmd2FpdCk7Ci1yZXBlYXQ6Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmIChxdWV1ZV9lbXB0eShhcykgJiYgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlzY2hlZHVsZSgpOwotCQkJZ290byByZXBlYXQ7Ci0JCX0KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoJmFwbV93YWl0cXVldWUsICZ3YWl0KTsKLQl9Ci0JaSA9IGNvdW50OwotCXdoaWxlICgoaSA+PSBzaXplb2YoZXZlbnQpKSAmJiAhcXVldWVfZW1wdHkoYXMpKSB7Ci0JCWV2ZW50ID0gZ2V0X3F1ZXVlZF9ldmVudChhcyk7Ci0JCURCRygiYXBtX2VtdTogZG9fcmVhZCwgcmV0dXJuaW5nOiAlc1xuIiwgYXBtX2V2ZW50X25hbWVbZXZlbnQtMV0pOwotCQlpZiAoY29weV90b191c2VyKGJ1ZiwgJmV2ZW50LCBzaXplb2YoZXZlbnQpKSkgewotCQkJaWYgKGkgPCBjb3VudCkKLQkJCQlicmVhazsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCXN3aXRjaCAoZXZlbnQpIHsKLQkJY2FzZSBBUE1fU1lTX1NVU1BFTkQ6Ci0JCWNhc2UgQVBNX1VTRVJfU1VTUEVORDoKLQkJCWFzLT5zdXNwZW5kc19yZWFkKys7Ci0JCQlicmVhazsKLQkJfQotCQlidWYgKz0gc2l6ZW9mKGV2ZW50KTsKLQkJaSAtPSBzaXplb2YoZXZlbnQpOwotCX0KLQlpZiAoaSA8IGNvdW50KQotCQlyZXR1cm4gY291bnQgLSBpOwotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkb19wb2xsKHN0cnVjdCBmaWxlICpmcCwgcG9sbF90YWJsZSAqIHdhaXQpCi17Ci0Jc3RydWN0IGFwbV91c2VyICogYXM7Ci0KLQlhcyA9IGZwLT5wcml2YXRlX2RhdGE7Ci0JaWYgKGNoZWNrX2FwbV91c2VyKGFzLCAicG9sbCIpKQotCQlyZXR1cm4gMDsKLQlwb2xsX3dhaXQoZnAsICZhcG1fd2FpdHF1ZXVlLCB3YWl0KTsKLQlpZiAoIXF1ZXVlX2VtcHR5KGFzKSkKLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZG9faW9jdGwoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICAgdV9pbnQgY21kLCB1X2xvbmcgYXJnKQotewotCXN0cnVjdCBhcG1fdXNlciAqCWFzOwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0JYXMgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JaWYgKGNoZWNrX2FwbV91c2VyKGFzLCAiaW9jdGwiKSkKLQkJcmV0dXJuIC1FSU87Ci0JaWYgKCFhcy0+c3VzZXIpCi0JCXJldHVybiAtRVBFUk07Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIEFQTV9JT0NfU1VTUEVORDoKLQkJLyogSWYgYSBzdXNwZW5kIG1lc3NhZ2Ugd2FzIHNlbnQgdG8gdXNlcmxhbmQsIHdlCi0JCSAqIGNvbnNpZGVyIHRoaXMgYXMgYSBjb25maXJtYXRpb24gbWVzc2FnZQotCQkgKi8KLQkJaWYgKGFzLT5zdXNwZW5kc19yZWFkID4gMCkgewotCQkJYXMtPnN1c3BlbmRzX3JlYWQtLTsKLQkJCWFzLT5zdXNwZW5kc19wZW5kaW5nLS07Ci0JCQlzdXNwZW5kc19wZW5kaW5nLS07Ci0JCX0gZWxzZSB7Ci0JCQkvLyBSb3V0ZSB0byBQTVUgc3VzcGVuZCA/Ci0JCQlicmVhazsKLQkJfQotCQlhcy0+c3VzcGVuZF93YWl0aW5nID0gMTsKLQkJYWRkX3dhaXRfcXVldWUoJmFwbV93YWl0cXVldWUsICZ3YWl0KTsKLQkJREJHKCJhcG1fZW11OiBpb2N0bCB3YWtpbmcgdXAgc2xlZXAgd2FpdGVyICFcbiIpOwotCQl3YWtlX3VwKCZhcG1fc3VzcGVuZF93YWl0cXVldWUpOwotCQltYigpOwotCQl3aGlsZShhcy0+c3VzcGVuZF93YWl0aW5nICYmICFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCXNjaGVkdWxlKCk7Ci0JCX0KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoJmFwbV93YWl0cXVldWUsICZ3YWl0KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRvX3JlbGVhc2Uoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKLXsKLQlzdHJ1Y3QgYXBtX3VzZXIgKglhczsKLQotCWFzID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWlmIChjaGVja19hcG1fdXNlcihhcywgInJlbGVhc2UiKSkKLQkJcmV0dXJuIDA7Ci0JZmlscC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQlsb2NrX2tlcm5lbCgpOwotCWlmIChhcy0+c3VzcGVuZHNfcGVuZGluZyA+IDApIHsKLQkJc3VzcGVuZHNfcGVuZGluZyAtPSBhcy0+c3VzcGVuZHNfcGVuZGluZzsKLQkJaWYgKHN1c3BlbmRzX3BlbmRpbmcgPD0gMCkKLQkJCXdha2VfdXAoJmFwbV9zdXNwZW5kX3dhaXRxdWV1ZSk7Ci0JfQotCWlmICh1c2VyX2xpc3QgPT0gYXMpCi0JCXVzZXJfbGlzdCA9IGFzLT5uZXh0OwotCWVsc2UgewotCQlzdHJ1Y3QgYXBtX3VzZXIgKglhczE7Ci0KLQkJZm9yIChhczEgPSB1c2VyX2xpc3Q7Ci0JCSAgICAgKGFzMSAhPSBOVUxMKSAmJiAoYXMxLT5uZXh0ICE9IGFzKTsKLQkJICAgICBhczEgPSBhczEtPm5leHQpCi0JCQk7Ci0JCWlmIChhczEgPT0gTlVMTCkKLQkJCXByaW50ayhLRVJOX0VSUiAiYXBtOiBmaWxwIG5vdCBpbiB1c2VyIGxpc3RcbiIpOwotCQllbHNlCi0JCQlhczEtPm5leHQgPSBhcy0+bmV4dDsKLQl9Ci0JdW5sb2NrX2tlcm5lbCgpOwotCWtmcmVlKGFzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCi17Ci0Jc3RydWN0IGFwbV91c2VyICoJYXM7Ci0KLQlhcyA9IGttYWxsb2Moc2l6ZW9mKCphcyksIEdGUF9LRVJORUwpOwotCWlmIChhcyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXBtOiBjYW5ub3QgYWxsb2NhdGUgc3RydWN0IG9mIHNpemUgJWQgYnl0ZXNcbiIsCi0JCSAgICAgICBzaXplb2YoKmFzKSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlhcy0+bWFnaWMgPSBBUE1fQklPU19NQUdJQzsKLQlhcy0+ZXZlbnRfdGFpbCA9IGFzLT5ldmVudF9oZWFkID0gMDsKLQlhcy0+c3VzcGVuZHNfcGVuZGluZyA9IDA7Ci0JYXMtPnN1c3BlbmRzX3JlYWQgPSAwOwotCS8qCi0JICogWFhYIC0gdGhpcyBpcyBhIHRpbnkgYml0IGJyb2tlbiwgd2hlbiB3ZSBjb25zaWRlciBCU0QKLSAgICAgICAgICogcHJvY2VzcyBhY2NvdW50aW5nLiBJZiB0aGUgZGV2aWNlIGlzIG9wZW5lZCBieSByb290LCB3ZQotCSAqIGluc3RhbnRseSBmbGFnIHRoYXQgd2UgdXNlZCBzdXBlcnVzZXIgcHJpdnMuIFdobyBrbm93cywKLQkgKiB3ZSBtaWdodCBjbG9zZSB0aGUgZGV2aWNlIGltbWVkaWF0ZWx5IHdpdGhvdXQgZG9pbmcgYQotCSAqIHByaXZpbGVnZWQgb3BlcmF0aW9uIC0tIGNldmFucwotCSAqLwotCWFzLT5zdXNlciA9IGNhcGFibGUoQ0FQX1NZU19BRE1JTik7Ci0JYXMtPm5leHQgPSB1c2VyX2xpc3Q7Ci0JdXNlcl9saXN0ID0gYXM7Ci0JZmlscC0+cHJpdmF0ZV9kYXRhID0gYXM7Ci0KLQlEQkcoImFwbV9lbXU6IG9wZW5lZCBieSAlcywgc3VzZXI6ICVkXG4iLCBjdXJyZW50LT5jb21tLCAoaW50KWFzLT5zdXNlcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogV2FpdCBmb3IgYWxsIGNsaWVudHMgdG8gYWNrIHRoZSBzdXNwZW5kIHJlcXVlc3QuIEFQTSBBUEkKLSAqIGRvZXNuJ3QgcHJvdmlkZSBhIHdheSB0byBOQUssIGJ1dCB0aGlzIGNvdWxkIGJlIGFkZGVkCi0gKiBoZXJlLgotICovCi1zdGF0aWMgdm9pZCB3YWl0X2FsbF9zdXNwZW5kKHZvaWQpCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQlhZGRfd2FpdF9xdWV1ZSgmYXBtX3N1c3BlbmRfd2FpdHF1ZXVlLCAmd2FpdCk7Ci0JREJHKCJhcG1fZW11OiB3YWl0X2FsbF9zdXNwZW5kKCksIHN1c3BlbmRzX3BlbmRpbmc6ICVkXG4iLCBzdXNwZW5kc19wZW5kaW5nKTsKLQl3aGlsZShzdXNwZW5kc19wZW5kaW5nID4gMCkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlKCk7Ci0JfQotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmFwbV9zdXNwZW5kX3dhaXRxdWV1ZSwgJndhaXQpOwotCi0JREJHKCJhcG1fZW11OiB3YWl0X2FsbF9zdXNwZW5kKCkgLSBjb21wbGV0ZSAhXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgYXBtX25vdGlmeV9zbGVlcChzdHJ1Y3QgcG11X3NsZWVwX25vdGlmaWVyICpzZWxmLCBpbnQgd2hlbikKLXsKLQlzd2l0Y2god2hlbikgewotCQljYXNlIFBCT09LX1NMRUVQX1JFUVVFU1Q6Ci0JCQlxdWV1ZV9ldmVudChBUE1fU1lTX1NVU1BFTkQsIE5VTEwpOwotCQkJd2FpdF9hbGxfc3VzcGVuZCgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEJPT0tfV0FLRToKLQkJCXF1ZXVlX2V2ZW50KEFQTV9OT1JNQUxfUkVTVU1FLCBOVUxMKTsKLQkJCWJyZWFrOwotCX0KLX0KLQogI2RlZmluZSBBUE1fQ1JJVElDQUwJCTEwCiAjZGVmaW5lIEFQTV9MT1cJCQkzMAogCi1zdGF0aWMgaW50IGFwbV9lbXVfZ2V0X2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IGZwb3MsIGludCBsZW5ndGgpCitzdGF0aWMgdm9pZCBwbXVfYXBtX2dldF9wb3dlcl9zdGF0dXMoc3RydWN0IGFwbV9wb3dlcl9pbmZvICppbmZvKQogewotCS8qIEFyZ3VtZW50cywgd2l0aCBzeW1ib2xzIGZyb20gbGludXgvYXBtX2Jpb3MuaC4gIEluZm9ybWF0aW9uIGlzCi0JICAgZnJvbSB0aGUgR2V0IFBvd2VyIFN0YXR1cyAoMHgwYSkgY2FsbCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCWludCBwZXJjZW50YWdlID0gLTE7CisJaW50IGJhdHRlcmllcyA9IDA7CisJaW50IHRpbWVfdW5pdHMgPSAtMTsKKwlpbnQgcmVhbF9jb3VudCA9IDA7CisJaW50IGk7CisJY2hhciBjaGFyZ2luZyA9IDA7CisJbG9uZyBjaGFyZ2UgPSAtMTsKKwlsb25nIGFtcGVyYWdlID0gMDsKKwl1bnNpZ25lZCBsb25nIGJ0eXBlID0gMDsKIAotCSAgIDApIExpbnV4IGRyaXZlciB2ZXJzaW9uICh0aGlzIHdpbGwgY2hhbmdlIGlmIGZvcm1hdCBjaGFuZ2VzKQotCSAgIDEpIEFQTSBCSU9TIFZlcnNpb24uICBVc3VhbGx5IDEuMCwgMS4xIG9yIDEuMi4KLQkgICAyKSBBUE0gZmxhZ3MgZnJvbSBBUE0gSW5zdGFsbGF0aW9uIENoZWNrICgweDAwKToKLQkgICAgICBiaXQgMDogQVBNXzE2X0JJVF9TVVBQT1JUCi0JICAgICAgYml0IDE6IEFQTV8zMl9CSVRfU1VQUE9SVAotCSAgICAgIGJpdCAyOiBBUE1fSURMRV9TTE9XU19DTE9DSwotCSAgICAgIGJpdCAzOiBBUE1fQklPU19ESVNBQkxFRAotCSAgICAgIGJpdCA0OiBBUE1fQklPU19ESVNFTkdBR0VECi0JICAgMykgQUMgbGluZSBzdGF0dXMKLQkgICAgICAweDAwOiBPZmYtbGluZQotCSAgICAgIDB4MDE6IE9uLWxpbmUKLQkgICAgICAweDAyOiBPbiBiYWNrdXAgcG93ZXIgKEJJT1MgPj0gMS4xIG9ubHkpCi0JICAgICAgMHhmZjogVW5rbm93bgotCSAgIDQpIEJhdHRlcnkgc3RhdHVzCi0JICAgICAgMHgwMDogSGlnaAotCSAgICAgIDB4MDE6IExvdwotCSAgICAgIDB4MDI6IENyaXRpY2FsCi0JICAgICAgMHgwMzogQ2hhcmdpbmcKLQkgICAgICAweDA0OiBTZWxlY3RlZCBiYXR0ZXJ5IG5vdCBwcmVzZW50IChCSU9TID49IDEuMiBvbmx5KQotCSAgICAgIDB4ZmY6IFVua25vd24KLQkgICA1KSBCYXR0ZXJ5IGZsYWcKLQkgICAgICBiaXQgMDogSGlnaAotCSAgICAgIGJpdCAxOiBMb3cKLQkgICAgICBiaXQgMjogQ3JpdGljYWwKLQkgICAgICBiaXQgMzogQ2hhcmdpbmcKLQkgICAgICBiaXQgNzogTm8gc3lzdGVtIGJhdHRlcnkKLQkgICAgICAweGZmOiBVbmtub3duCi0JICAgNikgUmVtYWluaW5nIGJhdHRlcnkgbGlmZSAocGVyY2VudGFnZSBvZiBjaGFyZ2UpOgotCSAgICAgIDAtMTAwOiB2YWxpZAotCSAgICAgIC0xOiBVbmtub3duCi0JICAgNykgUmVtYWluaW5nIGJhdHRlcnkgbGlmZSAodGltZSB1bml0cyk6Ci0JICAgICAgTnVtYmVyIG9mIHJlbWFpbmluZyBtaW51dGVzIG9yIHNlY29uZHMKLQkgICAgICAtMTogVW5rbm93bgotCSAgIDgpIG1pbiA9IG1pbnV0ZXM7IHNlYyA9IHNlY29uZHMgKi8KKwlpbmZvLT5iYXR0ZXJ5X3N0YXR1cyA9IEFQTV9CQVRURVJZX1NUQVRVU19VTktOT1dOOworCWluZm8tPmJhdHRlcnlfZmxhZyA9IEFQTV9CQVRURVJZX0ZMQUdfVU5LTk9XTjsKKwlpbmZvLT51bml0cyA9IEFQTV9VTklUU19NSU5TOwogCi0JdW5zaWduZWQgc2hvcnQgIGFjX2xpbmVfc3RhdHVzOwotCXVuc2lnbmVkIHNob3J0ICBiYXR0ZXJ5X3N0YXR1cyA9IDA7Ci0JdW5zaWduZWQgc2hvcnQgIGJhdHRlcnlfZmxhZyAgID0gMHhmZjsKLQlpbnQJCXBlcmNlbnRhZ2UgICAgID0gLTE7Ci0JaW50ICAgICAgICAgICAgIHRpbWVfdW5pdHMgICAgID0gLTE7Ci0JaW50CQlyZWFsX2NvdW50ICAgICA9IDA7Ci0JaW50CQlpOwotCWNoYXIgKgkJcCA9IGJ1ZjsKLQljaGFyCQljaGFyZ2luZyAgICAgICA9IDA7Ci0JbG9uZwkJY2hhcmdlCSAgICAgICA9IC0xOwotCWxvbmcJCWFtcGVyYWdlICAgICAgID0gMDsKLQl1bnNpZ25lZCBsb25nCWJ0eXBlICAgICAgICAgID0gMDsKKwlpZiAocG11X3Bvd2VyX2ZsYWdzICYgUE1VX1BXUl9BQ19QUkVTRU5UKQorCQlpbmZvLT5hY19saW5lX3N0YXR1cyA9IEFQTV9BQ19PTkxJTkU7CisJZWxzZQorCQlpbmZvLT5hY19saW5lX3N0YXR1cyA9IEFQTV9BQ19PRkZMSU5FOwogCi0JYWNfbGluZV9zdGF0dXMgPSAoKHBtdV9wb3dlcl9mbGFncyAmIFBNVV9QV1JfQUNfUFJFU0VOVCkgIT0gMCk7CiAJZm9yIChpPTA7IGk8cG11X2JhdHRlcnlfY291bnQ7IGkrKykgewogCQlpZiAocG11X2JhdHRlcmllc1tpXS5mbGFncyAmIFBNVV9CQVRUX1BSRVNFTlQpIHsKLQkJCWJhdHRlcnlfc3RhdHVzKys7CisJCQliYXR0ZXJpZXMrKzsKIAkJCWlmIChwZXJjZW50YWdlIDwgMCkKIAkJCQlwZXJjZW50YWdlID0gMDsKIAkJCWlmIChjaGFyZ2UgPCAwKQpAQCAtNDU2LDkgKzY0LDkgQEAKIAkJCQljaGFyZ2luZysrOwogCQl9CiAJfQotCWlmICgwID09IGJhdHRlcnlfc3RhdHVzKQotCQlhY19saW5lX3N0YXR1cyA9IDE7Ci0JYmF0dGVyeV9zdGF0dXMgPSAweGZmOworCWlmIChiYXR0ZXJpZXMgPT0gMCkKKwkJaW5mby0+YWNfbGluZV9zdGF0dXMgPSBBUE1fQUNfT05MSU5FOworCiAJaWYgKHJlYWxfY291bnQpIHsKIAkJaWYgKGFtcGVyYWdlIDwgMCkgewogCQkJaWYgKGJ0eXBlID09IFBNVV9CQVRUX1RZUEVfU01BUlQpCkBAIC00NjgsODUgKzc2LDQ0IEBACiAJCX0KIAkJcGVyY2VudGFnZSAvPSByZWFsX2NvdW50OwogCQlpZiAoY2hhcmdpbmcgPiAwKSB7Ci0JCQliYXR0ZXJ5X3N0YXR1cyA9IDB4MDM7Ci0JCQliYXR0ZXJ5X2ZsYWcgPSAweDA4OworCQkJaW5mby0+YmF0dGVyeV9zdGF0dXMgPSBBUE1fQkFUVEVSWV9TVEFUVVNfQ0hBUkdJTkc7CisJCQlpbmZvLT5iYXR0ZXJ5X2ZsYWcgPSBBUE1fQkFUVEVSWV9GTEFHX0NIQVJHSU5HOwogCQl9IGVsc2UgaWYgKHBlcmNlbnRhZ2UgPD0gQVBNX0NSSVRJQ0FMKSB7Ci0JCQliYXR0ZXJ5X3N0YXR1cyA9IDB4MDI7Ci0JCQliYXR0ZXJ5X2ZsYWcgPSAweDA0OworCQkJaW5mby0+YmF0dGVyeV9zdGF0dXMgPSBBUE1fQkFUVEVSWV9TVEFUVVNfQ1JJVElDQUw7CisJCQlpbmZvLT5iYXR0ZXJ5X2ZsYWcgPSBBUE1fQkFUVEVSWV9GTEFHX0NSSVRJQ0FMOwogCQl9IGVsc2UgaWYgKHBlcmNlbnRhZ2UgPD0gQVBNX0xPVykgewotCQkJYmF0dGVyeV9zdGF0dXMgPSAweDAxOwotCQkJYmF0dGVyeV9mbGFnID0gMHgwMjsKKwkJCWluZm8tPmJhdHRlcnlfc3RhdHVzID0gQVBNX0JBVFRFUllfU1RBVFVTX0xPVzsKKwkJCWluZm8tPmJhdHRlcnlfZmxhZyA9IEFQTV9CQVRURVJZX0ZMQUdfTE9XOwogCQl9IGVsc2UgewotCQkJYmF0dGVyeV9zdGF0dXMgPSAweDAwOwotCQkJYmF0dGVyeV9mbGFnID0gMHgwMTsKKwkJCWluZm8tPmJhdHRlcnlfc3RhdHVzID0gQVBNX0JBVFRFUllfU1RBVFVTX0hJR0g7CisJCQlpbmZvLT5iYXR0ZXJ5X2ZsYWcgPSBBUE1fQkFUVEVSWV9GTEFHX0hJR0g7CiAJCX0KIAl9Ci0JcCArPSBzcHJpbnRmKHAsICIlcyAlZC4lZCAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnggJWQlJSAlZCAlc1xuIiwKLQkJICAgICBkcml2ZXJfdmVyc2lvbiwKLQkJICAgICAoRkFLRV9BUE1fQklPU19WRVJTSU9OID4+IDgpICYgMHhmZiwKLQkJICAgICBGQUtFX0FQTV9CSU9TX1ZFUlNJT04gJiAweGZmLAotCQkgICAgIDAsCi0JCSAgICAgYWNfbGluZV9zdGF0dXMsCi0JCSAgICAgYmF0dGVyeV9zdGF0dXMsCi0JCSAgICAgYmF0dGVyeV9mbGFnLAotCQkgICAgIHBlcmNlbnRhZ2UsCi0JCSAgICAgdGltZV91bml0cywKLQkJICAgICAibWluIik7CiAKLQlyZXR1cm4gcCAtIGJ1ZjsKKwlpbmZvLT5iYXR0ZXJ5X2xpZmUgPSBwZXJjZW50YWdlOworCWluZm8tPnRpbWUgPSB0aW1lX3VuaXRzOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhcG1fYmlvc19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucmVhZAkJPSBkb19yZWFkLAotCS5wb2xsCQk9IGRvX3BvbGwsCi0JLmlvY3RsCQk9IGRvX2lvY3RsLAotCS5vcGVuCQk9IGRvX29wZW4sCi0JLnJlbGVhc2UJPSBkb19yZWxlYXNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGFwbV9kZXZpY2UgPSB7Ci0JQVBNX01JTk9SX0RFViwKLQkiYXBtX2Jpb3MiLAotCSZhcG1fYmlvc19mb3BzCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBhcG1fZW11X2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmFwbV9wcm9jOworCWFwbV9nZXRfcG93ZXJfc3RhdHVzID0gcG11X2FwbV9nZXRfcG93ZXJfc3RhdHVzOwogCi0JaWYgKHN5c19jdHJsZXIgIT0gU1lTX0NUUkxFUl9QTVUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYXBtX2VtdTogUmVxdWlyZXMgYSBtYWNoaW5lIHdpdGggYSBQTVUuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCQkKLQlhcG1fcHJvYyA9IGNyZWF0ZV9wcm9jX2luZm9fZW50cnkoImFwbSIsIDAsIE5VTEwsIGFwbV9lbXVfZ2V0X2luZm8pOwotCWlmIChhcG1fcHJvYykKLQkJYXBtX3Byb2MtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlpZiAobWlzY19yZWdpc3RlcigmYXBtX2RldmljZSkgIT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGQgbm90IGNyZWF0ZSBtaXNjLiBkZXZpY2UgZm9yIGFwbVxuIik7Ci0KLQlwbXVfcmVnaXN0ZXJfc2xlZXBfbm90aWZpZXIoJmFwbV9zbGVlcF9ub3RpZmllcik7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJhcG1fZW11OiBBUE0gRW11bGF0aW9uICVzIGluaXRpYWxpemVkLlxuIiwgZHJpdmVyX3ZlcnNpb24pOworCXByaW50ayhLRVJOX0lORk8gImFwbV9lbXU6IFBNVSBBUE0gRW11bGF0aW9uIGluaXRpYWxpemVkLlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFwbV9lbXVfZXhpdCh2b2lkKQogewotCXBtdV91bnJlZ2lzdGVyX3NsZWVwX25vdGlmaWVyKCZhcG1fc2xlZXBfbm90aWZpZXIpOwotCW1pc2NfZGVyZWdpc3RlcigmYXBtX2RldmljZSk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoImFwbSIsIE5VTEwpOworCWlmIChhcG1fZ2V0X3Bvd2VyX3N0YXR1cyA9PSBwbXVfYXBtX2dldF9wb3dlcl9zdGF0dXMpCisJCWFwbV9nZXRfcG93ZXJfc3RhdHVzID0gTlVMTDsKIAotCXByaW50ayhLRVJOX0lORk8gImFwbV9lbXU6IEFQTSBFbXVsYXRpb24gcmVtb3ZlZC5cbiIpOworCXByaW50ayhLRVJOX0lORk8gImFwbV9lbXU6IFBNVSBBUE0gRW11bGF0aW9uIHJlbW92ZWQuXG4iKTsKIH0KIAogbW9kdWxlX2luaXQoYXBtX2VtdV9pbml0KTsKIG1vZHVsZV9leGl0KGFwbV9lbXVfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIkJlbmphbWluIEhlcnJlbnNjaG1pZHQiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQVBNIGVtdWxhdGlvbiBsYXllciBmb3IgUG93ZXJNYWMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQVBNIGVtdWxhdGlvbiBmb3IgUG93ZXJNYWMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jCmluZGV4IDE1OTlkYzMuLjc2YzFlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL21hY19oaWQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNfaGlkLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1NZU0NUTCkKIC8qIGZpbGUocykgaW4gL3Byb2Mvc3lzL2Rldi9tYWNfaGlkICovCi1jdGxfdGFibGUgbWFjX2hpZF9maWxlc1tdID0geworc3RhdGljIGN0bF90YWJsZSBtYWNfaGlkX2ZpbGVzW10gPSB7CiAJewogCQkuY3RsX25hbWUJPSBERVZfTUFDX0hJRF9NT1VTRV9CVVRUT05fRU1VTEFUSU9OLAogCQkucHJvY25hbWUJPSAibW91c2VfYnV0dG9uX2VtdWxhdGlvbiIsCkBAIC01Myw3ICs1Myw3IEBACiB9OwogCiAvKiBkaXIgaW4gL3Byb2Mvc3lzL2RldiAqLwotY3RsX3RhYmxlIG1hY19oaWRfZGlyW10gPSB7CitzdGF0aWMgY3RsX3RhYmxlIG1hY19oaWRfZGlyW10gPSB7CiAJewogCQkuY3RsX25hbWUJPSBERVZfTUFDX0hJRCwKIAkJLnByb2NuYW1lCT0gIm1hY19oaWQiLApAQCAtNjUsNyArNjUsNyBAQAogfTsKIAogLyogL3Byb2Mvc3lzL2RldiBpdHNlbGYsIGluIGNhc2UgdGhhdCBpcyBub3QgdGhlcmUgeWV0ICovCi1jdGxfdGFibGUgbWFjX2hpZF9yb290X2RpcltdID0geworc3RhdGljIGN0bF90YWJsZSBtYWNfaGlkX3Jvb3RfZGlyW10gPSB7CiAJewogCQkuY3RsX25hbWUJPSBDVExfREVWLAogCQkucHJvY25hbWUJPSAiZGV2IiwKQEAgLTEyNyw3ICsxMjcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX2luaXQgbWFjX2hpZF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtYWNfaGlkX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19zeXNmcy5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fc3lzZnMuYwppbmRleCBjYzgyNjc5Li4xMTJlNWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19zeXNmcy5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX3N5c2ZzLmMKQEAgLTQxLDI4ICs0MSwxNSBAQAogc3RhdGljIHNzaXplX3QgbW9kYWxpYXNfc2hvdyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICpvZjsKLQljb25zdCBjaGFyICpjb21wYXQ7Ci0JaW50IGNwbGVuOwotCWludCBsZW5ndGg7CisJc3RydWN0IG9mX2RldmljZSAqb2ZkZXYgPSB0b19vZl9kZXZpY2UoZGV2KTsKKwlpbnQgbGVuOwogCi0Jb2YgPSAmdG9fbWFjaW9fZGV2aWNlIChkZXYpLT5vZmRldjsKLQljb21wYXQgPSBvZl9nZXRfcHJvcGVydHkob2YtPm5vZGUsICJjb21wYXRpYmxlIiwgJmNwbGVuKTsKLQlpZiAoIWNvbXBhdCkgY29tcGF0ID0gIiIsIGNwbGVuID0gMTsKLQlsZW5ndGggPSBzcHJpbnRmIChidWYsICJvZjpOJXNUJXMiLCBvZi0+bm9kZS0+bmFtZSwgb2YtPm5vZGUtPnR5cGUpOwotCWJ1ZiArPSBsZW5ndGg7Ci0Jd2hpbGUgKGNwbGVuID4gMCkgewotCQlpbnQgbDsKLQkJbCA9IHNwcmludGYgKGJ1ZiwgIkMlcyIsIGNvbXBhdCk7Ci0JCWxlbmd0aCArPSBsOwotCQlidWYgKz0gbDsKLQkJbCA9IHN0cmxlbiAoY29tcGF0KSArIDE7Ci0JCWNvbXBhdCArPSBsOwotCQljcGxlbiAtPSBsOwotCX0KLQlsZW5ndGggKz0gc3ByaW50ZihidWYsICJcbiIpOworCWxlbiA9IG9mX2RldmljZV9nZXRfbW9kYWxpYXMob2ZkZXYsIGJ1ZiwgUEFHRV9TSVpFKTsKIAotCXJldHVybiBsZW5ndGg7CisJYnVmW2xlbl0gPSAnXG4nOworCWJ1ZltsZW4rMV0gPSAwOworCisJcmV0dXJuIGxlbisxOwogfQogCiBtYWNpb19jb25maWdfb2ZfYXR0ciAobmFtZSwgIiVzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL21lZGlhYmF5LmMgYi9kcml2ZXJzL21hY2ludG9zaC9tZWRpYWJheS5jCmluZGV4IDBhY2YyZjcuLmM4MDNkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL21lZGlhYmF5LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvbWVkaWFiYXkuYwpAQCAtNTYzLDcgKzU2Myw3IEBACiAJCQkJaWRlX2luaXRfaHdpZl9wb3J0cygmaHcsICh1bnNpZ25lZCBsb25nKSBiYXktPmNkX2Jhc2UsICh1bnNpZ25lZCBsb25nKSAwLCBOVUxMKTsKIAkJCQlody5pcnEgPSBiYXktPmNkX2lycTsKIAkJCQlody5jaGlwc2V0ID0gaWRlX3BtYWM7Ci0JCQkJYmF5LT5jZF9pbmRleCA9IGlkZV9yZWdpc3Rlcl9odygmaHcsIE5VTEwpOworCQkJCWJheS0+Y2RfaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAwLCBOVUxMKTsKIAkJCQlwbXVfcmVzdW1lKCk7CiAJCQl9CiAJCQlpZiAoYmF5LT5jZF9pbmRleCA9PSAtMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvc211LmMgYi9kcml2ZXJzL21hY2ludG9zaC9zbXUuYwppbmRleCBhOThhMzI4Li5mOGUxYTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9zbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9zbXUuYwpAQCAtNjA2LDcgKzYwNiw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAogCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9nZXRfbmV4dF9jaGlsZChzbXUtPm9mX25vZGUsIG5wKSkgIT0gTlVMTDspCi0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInNtdS1zZW5zb3JzIikpCisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInNtdS1zZW5zb3JzIikpCiAJCQlvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKG5wLCAic211LXNlbnNvcnMiLAogCQkJCQkJICAmc211LT5vZl9kZXYtPmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKaW5kZXggMjI4OTAzNC4uYmQ1NWU2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpAQCAtNTYwLDkgKzU1OSw5IEBACiAJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiZmFuIik7CiAJaWYgKCFucCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKGRldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYWR0NzQ2MCIpKQorCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFkdDc0NjAiKSkKIAkJdGhlcm1fdHlwZSA9IEFEVDc0NjA7Ci0JZWxzZSBpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhZHQ3NDY3IikpCisJZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJhZHQ3NDY3IikpCiAJCXRoZXJtX3R5cGUgPSBBRFQ3NDY3OwogCWVsc2UKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKaW5kZXggNzhmZjE4Ni4uZGJiMjI0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwpAQCAtMTE3LDcgKzExNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtbGVkLmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWxlZC5jCmluZGV4IGZjODlhNzAuLjU1YWQ5NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtbGVkLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1sZWQuYwpAQCAtMzEsNyArMzEsNiBAQAogc3RhdGljIHN0cnVjdCBhZGJfcmVxdWVzdCBwbXVfYmxpbmtfcmVxOwogLyogLTE6IG5vIGNoYW5nZSwgMDogcmVxdWVzdCBvZmYsIDE6IHJlcXVlc3Qgb24gKi8KIHN0YXRpYyBpbnQgcmVxdWVzdGVkX2NoYW5nZTsKLXN0YXRpYyBpbnQgc2xlZXBpbmc7CiAKIHN0YXRpYyB2b2lkIHBtdV9yZXFfZG9uZShzdHJ1Y3QgYWRiX3JlcXVlc3QgKiByZXEpCiB7CkBAIC00MSw3ICs0MCw3IEBACiAJLyogaWYgc29tZW9uZSByZXF1ZXN0ZWQgYSBjaGFuZ2UgaW4gdGhlIG1lYW50aW1lCiAJICogKHdlIG9ubHkgc2VlIHRoZSBsYXN0IG9uZSB3aGljaCBpcyBmaW5lKQogCSAqIHRoZW4gYXBwbHkgaXQgbm93ICovCi0JaWYgKHJlcXVlc3RlZF9jaGFuZ2UgIT0gLTEgJiYgIXNsZWVwaW5nKQorCWlmIChyZXF1ZXN0ZWRfY2hhbmdlICE9IC0xICYmICFwbXVfc3lzX3N1c3BlbmRlZCkKIAkJcG11X3JlcXVlc3QoJnBtdV9ibGlua19yZXEsIE5VTEwsIDQsIDB4ZWUsIDQsIDAsIHJlcXVlc3RlZF9jaGFuZ2UpOwogCS8qIHJlc2V0IHJlcXVlc3RlZCBjaGFuZ2UgKi8KIAlyZXF1ZXN0ZWRfY2hhbmdlID0gLTE7CkBAIC02Niw3ICs2NSw3IEBACiAJCWJyZWFrOwogCX0KIAkvKiBpZiByZXF1ZXN0IGlzbid0IGRvbmUsIHRoZW4gZG9uJ3QgZG8gYW55dGhpbmcgKi8KLQlpZiAocG11X2JsaW5rX3JlcS5jb21wbGV0ZSAmJiAhc2xlZXBpbmcpCisJaWYgKHBtdV9ibGlua19yZXEuY29tcGxldGUgJiYgIXBtdV9zeXNfc3VzcGVuZGVkKQogCQlwbXVfcmVxdWVzdCgmcG11X2JsaW5rX3JlcSwgTlVMTCwgNCwgMHhlZSwgNCwgMCwgcmVxdWVzdGVkX2NoYW5nZSk7CiAgb3V0OgogIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfYmxpbmtfbG9jaywgZmxhZ3MpOwpAQCAtODAsMzIgKzc5LDYgQEAKIAkuYnJpZ2h0bmVzc19zZXQgPSBwbXVfbGVkX3NldCwKIH07CiAKLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyB2b2lkIHBtdV9sZWRfc2xlZXBfY2FsbChzdHJ1Y3QgcG11X3NsZWVwX25vdGlmaWVyICpzZWxmLCBpbnQgd2hlbikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9ibGlua19sb2NrLCBmbGFncyk7Ci0KLQlzd2l0Y2ggKHdoZW4pIHsKLQljYXNlIFBCT09LX1NMRUVQX1JFUVVFU1Q6Ci0JCXNsZWVwaW5nID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBQQk9PS19XQUtFOgotCQlzbGVlcGluZyA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIGRvIG5vdGhpbmcgKi8KLQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9ibGlua19sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcG11X3NsZWVwX25vdGlmaWVyIHZpYV9wbXVfbGVkX3NsZWVwX25vdGlmID0gewotCS5ub3RpZmllcl9jYWxsID0gcG11X2xlZF9zbGVlcF9jYWxsLAotfTsKLSNlbmRpZgotCiBzdGF0aWMgaW50IF9faW5pdCB2aWFfcG11X2xlZF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkdDsKQEAgLTEzNSw5ICsxMDgsNyBAQAogCS8qIG5vIG91dHN0YW5kaW5nIHJlcSAqLwogCXBtdV9ibGlua19yZXEuY29tcGxldGUgPSAxOwogCXBtdV9ibGlua19yZXEuZG9uZSA9IHBtdV9yZXFfZG9uZTsKLSNpZmRlZiBDT05GSUdfUE0KLQlwbXVfcmVnaXN0ZXJfc2xlZXBfbm90aWZpZXIoJnZpYV9wbXVfbGVkX3NsZWVwX25vdGlmKTsKLSNlbmRpZgorCiAJcmV0dXJuIGxlZF9jbGFzc2Rldl9yZWdpc3RlcihOVUxMLCAmcG11X2xlZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwppbmRleCAxNzI5ZDNmLi4xNTcwODBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCkBAIC0zMTAsMTQgKzMxMCwxNCBAQAogCQkJUE1VX0lOVF9USUNLOwogCQogCWlmICh2aWFzLT5wYXJlbnQtPm5hbWUgJiYgKChzdHJjbXAodmlhcy0+cGFyZW50LT5uYW1lLCAib2hhcmUiKSA9PSAwKQotCSAgICB8fCBkZXZpY2VfaXNfY29tcGF0aWJsZSh2aWFzLT5wYXJlbnQsICJvaGFyZSIpKSkKKwkgICAgfHwgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUodmlhcy0+cGFyZW50LCAib2hhcmUiKSkpCiAJCXBtdV9raW5kID0gUE1VX09IQVJFX0JBU0VEOwotCWVsc2UgaWYgKGRldmljZV9pc19jb21wYXRpYmxlKHZpYXMtPnBhcmVudCwgInBhZGRpbmd0b24iKSkKKwllbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZSh2aWFzLT5wYXJlbnQsICJwYWRkaW5ndG9uIikpCiAJCXBtdV9raW5kID0gUE1VX1BBRERJTkdUT05fQkFTRUQ7Ci0JZWxzZSBpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUodmlhcy0+cGFyZW50LCAiaGVhdGhyb3ciKSkKKwllbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZSh2aWFzLT5wYXJlbnQsICJoZWF0aHJvdyIpKQogCQlwbXVfa2luZCA9IFBNVV9IRUFUSFJPV19CQVNFRDsKLQllbHNlIGlmIChkZXZpY2VfaXNfY29tcGF0aWJsZSh2aWFzLT5wYXJlbnQsICJLZXlsYXJnbyIpCi0JCSB8fCBkZXZpY2VfaXNfY29tcGF0aWJsZSh2aWFzLT5wYXJlbnQsICJLMi1LZXlsYXJnbyIpKSB7CisJZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUodmlhcy0+cGFyZW50LCAiS2V5bGFyZ28iKQorCQkgfHwgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUodmlhcy0+cGFyZW50LCAiSzItS2V5bGFyZ28iKSkgewogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmdwaW9wOwogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFkYnA7CiAJCXU2NCBnYWRkciA9IE9GX0JBRF9BRERSOwpAQCAtMjc1OSw3ICsyNzU5LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKIAotc3RhdGljIGludCBwbXVfc3lzX3N1c3BlbmRlZDsKK2ludCBwbXVfc3lzX3N1c3BlbmRlZDsKIAogc3RhdGljIGludCBwbXVfc3lzX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jCmluZGV4IDk0YzExN2UuLjExY2VkMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NvcmUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jb3JlLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CkBAIC0yMTcsNyArMjE2LDEwIEBACiAJbmV3X2N0LT5hdHRyLmF0dHIubW9kZSA9IDA2NDQ7CiAJbmV3X2N0LT5hdHRyLnNob3cgPSB3Zl9zaG93X2NvbnRyb2w7CiAJbmV3X2N0LT5hdHRyLnN0b3JlID0gd2Zfc3RvcmVfY29udHJvbDsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJndmX3BsYXRmb3JtX2RldmljZS5kZXYsICZuZXdfY3QtPmF0dHIpOworCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJndmX3BsYXRmb3JtX2RldmljZS5kZXYsICZuZXdfY3QtPmF0dHIpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJ3aW5kZmFybTogZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZCIKKwkJCSIgZm9yICVzXG4iLCBuZXdfY3QtPm5hbWUpOworCQkvKiB0aGUgc3Vic3lzdGVtIHN0aWxsIGRvZXMgdXNlZnVsIHdvcmsgd2l0aG91dCB0aGUgZmlsZSAqLwogCiAJREJHKCJ3ZjogUmVnaXN0ZXJlZCBjb250cm9sICVzXG4iLCBuZXdfY3QtPm5hbWUpOwogCkBAIC0zMjcsNyArMzI5LDEwIEBACiAJbmV3X3NyLT5hdHRyLmF0dHIubW9kZSA9IDA0NDQ7CiAJbmV3X3NyLT5hdHRyLnNob3cgPSB3Zl9zaG93X3NlbnNvcjsKIAluZXdfc3ItPmF0dHIuc3RvcmUgPSBOVUxMOwotCWRldmljZV9jcmVhdGVfZmlsZSgmd2ZfcGxhdGZvcm1fZGV2aWNlLmRldiwgJm5ld19zci0+YXR0cik7CisJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmd2ZfcGxhdGZvcm1fZGV2aWNlLmRldiwgJm5ld19zci0+YXR0cikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIndpbmRmYXJtOiBkZXZpY2VfY3JlYXRlX2ZpbGUgZmFpbGVkIgorCQkJIiBmb3IgJXNcbiIsIG5ld19zci0+bmFtZSk7CisJCS8qIHRoZSBzdWJzeXN0ZW0gc3RpbGwgZG9lcyB1c2VmdWwgd29yayB3aXRob3V0IHRoZSBmaWxlICovCiAKIAlEQkcoIndmOiBSZWdpc3RlcmVkIHNlbnNvciAlc1xuIiwgbmV3X3NyLT5uYW1lKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMKaW5kZXggYWI0ZDFiNi4uYTBmYWJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCkBAIC0xODgsMTAgKzE4OCwxMCBAQAogCQlpZiAobG9jID09IE5VTEwgfHwgYWRkciA9PSAwKQogCQkJY29udGludWU7CiAJCS8qIHJlYWwgbG03NSAqLwotCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LCAibG03NSIpKQorCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LCAibG03NSIpKQogCQkJd2ZfbG03NV9jcmVhdGUoYWRhcHRlciwgYWRkciwgMCwgbG9jKTsKIAkJLyogZHMxNzc1IChjb21wYXRpYmxlLCBiZXR0ZXIgcmVzb2x1dGlvbiAqLwotCQllbHNlIGlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJkczE3NzUiKSkKKwkJZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LCAiZHMxNzc1IikpCiAJCQl3Zl9sbTc1X2NyZWF0ZShhZGFwdGVyLCBhZGRyLCAxLCBsb2MpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCmluZGV4IGVhYTc0YWYuLjVmMDNhYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCSAqLwogCQlpZiAoIXBtYWNfaTJjX21hdGNoX2FkYXB0ZXIoZGV2LCBhZGFwdGVyKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIWRldmljZV9pc19jb21wYXRpYmxlKGRldiwgIm1heDY2OTAiKSkKKwkJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJtYXg2NjkwIikpCiAJCQljb250aW51ZTsKIAkJYWRkciA9IHBtYWNfaTJjX2dldF9kZXZfYWRkcihkZXYpOwogCQlsb2MgPSBvZl9nZXRfcHJvcGVydHkoZGV2LCAiaHdzZW5zb3ItbG9jYXRpb24iLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9jb250cm9scy5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMKaW5kZXggZmYzOThhZC4uNThjMjU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogCS8qIExvb2sgZm9yIFJQTSBmYW5zICovCiAJZm9yIChmYW5zID0gTlVMTDsgKGZhbnMgPSBvZl9nZXRfbmV4dF9jaGlsZChzbXUsIGZhbnMpKSAhPSBOVUxMOykKIAkJaWYgKCFzdHJjbXAoZmFucy0+bmFtZSwgInJwbS1mYW5zIikgfHwKLQkJICAgIGRldmljZV9pc19jb21wYXRpYmxlKGZhbnMsICJzbXUtcnBtLWZhbnMiKSkKKwkJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKGZhbnMsICJzbXUtcnBtLWZhbnMiKSkKIAkJCWJyZWFrOwogCWZvciAoZmFuID0gTlVMTDsKIAkgICAgIGZhbnMgJiYgKGZhbiA9IG9mX2dldF9uZXh0X2NoaWxkKGZhbnMsIGZhbikpICE9IE5VTEw7KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMKaW5kZXggOWE2YzJjZi4uMTA0M2IzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJYnVzbm9kZSA9IHBtYWNfaTJjX2dldF9idXNfbm9kZShidXMpOwogCiAJd2hpbGUgKChkZXYgPSBvZl9nZXRfbmV4dF9jaGlsZChidXNub2RlLCBkZXYpKSAhPSBOVUxMKQotCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LCAic211LXNhdCIpKQorCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LCAic211LXNhdCIpKQogCQkJd2Zfc2F0X2NyZWF0ZShhZGFwdGVyLCBkZXYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tY2EvbWNhLWJ1cy5jIGIvZHJpdmVycy9tY2EvbWNhLWJ1cy5jCmluZGV4IGRhODYyZTQuLjY3YjhlOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWNhL21jYS1idXMuYworKysgYi9kcml2ZXJzL21jYS9tY2EtYnVzLmMKQEAgLTQ3LDE5ICs0NywyNSBAQAogewogCXN0cnVjdCBtY2FfZGV2aWNlICptY2FfZGV2ID0gdG9fbWNhX2RldmljZSAoZGV2KTsKIAlzdHJ1Y3QgbWNhX2RyaXZlciAqbWNhX2RydiA9IHRvX21jYV9kcml2ZXIgKGRydik7Ci0JY29uc3Qgc2hvcnQgKm1jYV9pZHMgPSBtY2FfZHJ2LT5pZF90YWJsZTsKLQlpbnQgaTsKKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqbWNhX2lkcyA9IG1jYV9kcnYtPmlkX3RhYmxlOworCWludCBpID0gMDsKIAotCWlmICghbWNhX2lkcykKLQkJcmV0dXJuIDA7Ci0KLQlmb3IoaSA9IDA7IG1jYV9pZHNbaV07IGkrKykgewotCQlpZiAobWNhX2lkc1tpXSA9PSBtY2FfZGV2LT5wb3NfaWQpIHsKLQkJCW1jYV9kZXYtPmluZGV4ID0gaTsKLQkJCXJldHVybiAxOworCWlmIChtY2FfaWRzKSB7CisJCWZvcihpID0gMDsgbWNhX2lkc1tpXTsgaSsrKSB7CisJCQlpZiAobWNhX2lkc1tpXSA9PSBtY2FfZGV2LT5wb3NfaWQpIHsKKwkJCQltY2FfZGV2LT5pbmRleCA9IGk7CisJCQkJcmV0dXJuIDE7CisJCQl9CiAJCX0KIAl9Ci0KKwkvKiBJZiB0aGUgaW50ZWdyYXRlZCBpZCBpcyBwcmVzZW50LCB0cmVhdCBpdCBhcyB0aG91Z2ggaXQgd2VyZSBhbgorCSAqIGFkZGl0aW9uYWwgaWQgaW4gdGhlIGlkX3RhYmxlIChpdCBjYW4ndCBiZSBiZWNhdXNlIGJ5IGRlZmluaXRpb24sCisJICogaW50ZWdyYXRlZCBpZCdzIG92ZXJmbG93IGEgc2hvcnQgKi8KKwlpZiAobWNhX2Rydi0+aW50ZWdyYXRlZF9pZCAmJiBtY2FfZGV2LT5wb3NfaWQgPT0KKwkgICAgbWNhX2Rydi0+aW50ZWdyYXRlZF9pZCkgeworCQltY2FfZGV2LT5pbmRleCA9IGk7CisJCXJldHVybiAxOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tY2EvbWNhLWRyaXZlci5jIGIvZHJpdmVycy9tY2EvbWNhLWRyaXZlci5jCmluZGV4IDIyMjM0NjYuLjMyY2QzOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWNhL21jYS1kcml2ZXIuYworKysgYi9kcml2ZXJzL21jYS9tY2EtZHJpdmVyLmMKQEAgLTM2LDEyICszNiwyNSBAQAogCQltY2FfZHJ2LT5kcml2ZXIuYnVzID0gJm1jYV9idXNfdHlwZTsKIAkJaWYgKChyID0gZHJpdmVyX3JlZ2lzdGVyKCZtY2FfZHJ2LT5kcml2ZXIpKSA8IDApCiAJCQlyZXR1cm4gcjsKKwkJbWNhX2Rydi0+aW50ZWdyYXRlZF9pZCA9IDA7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKG1jYV9yZWdpc3Rlcl9kcml2ZXIpOwogCitpbnQgbWNhX3JlZ2lzdGVyX2RyaXZlcl9pbnRlZ3JhdGVkKHN0cnVjdCBtY2FfZHJpdmVyICptY2FfZHJpdmVyLAorCQkJCSAgIGludCBpbnRlZ3JhdGVkX2lkKQoreworCWludCByID0gbWNhX3JlZ2lzdGVyX2RyaXZlcihtY2FfZHJpdmVyKTsKKworCWlmICghcikKKwkJbWNhX2RyaXZlci0+aW50ZWdyYXRlZF9pZCA9IGludGVncmF0ZWRfaWQ7CisKKwlyZXR1cm4gcjsKK30KK0VYUE9SVF9TWU1CT0wobWNhX3JlZ2lzdGVyX2RyaXZlcl9pbnRlZ3JhdGVkKTsKKwogdm9pZCBtY2FfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1jYV9kcml2ZXIgKm1jYV9kcnYpCiB7CiAJaWYgKE1DQV9idXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL0tjb25maWcgYi9kcml2ZXJzL21kL0tjb25maWcKaW5kZXggNDU0MGFkZS4uN2RmOTM0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWQvS2NvbmZpZwpAQCAtMjYyLDYgKzI2MiwxNSBAQAogCS0tLWhlbHAtLS0KIAkgIE11bHRpcGF0aCBzdXBwb3J0IGZvciBFTUMgQ1gvQVggc2VyaWVzIGhhcmR3YXJlLgogCitjb25maWcgRE1fREVMQVkKKwl0cmlzdGF0ZSAiSS9PIGRlbGF5aW5nIHRhcmdldCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEJMS19ERVZfRE0gJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCUEgdGFyZ2V0IHRoYXQgZGVsYXlzIHJlYWRzIGFuZC9vciB3cml0ZXMgYW5kIGNhbiBzZW5kCisJdGhlbSB0byBkaWZmZXJlbnQgZGV2aWNlcy4gIFVzZWZ1bCBmb3IgdGVzdGluZy4KKworCUlmIHVuc3VyZSwgc2F5IE4uCisKIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvTWFrZWZpbGUgYi9kcml2ZXJzL21kL01ha2VmaWxlCmluZGV4IDM0OTU3YTYuLjM4NzU0MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9NYWtlZmlsZQpAQCAtMzEsNiArMzEsNyBAQAogb2JqLSQoQ09ORklHX0JMS19ERVZfTUQpCSs9IG1kLW1vZC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9ETSkJKz0gZG0tbW9kLm8KIG9iai0kKENPTkZJR19ETV9DUllQVCkJCSs9IGRtLWNyeXB0Lm8KK29iai0kKENPTkZJR19ETV9ERUxBWSkJCSs9IGRtLWRlbGF5Lm8KIG9iai0kKENPTkZJR19ETV9NVUxUSVBBVEgpCSs9IGRtLW11bHRpcGF0aC5vIGRtLXJvdW5kLXJvYmluLm8KIG9iai0kKENPTkZJR19ETV9NVUxUSVBBVEhfRU1DKQkrPSBkbS1lbWMubwogb2JqLSQoQ09ORklHX0RNX1NOQVBTSE9UKQkrPSBkbS1zbmFwc2hvdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCBlNjFlMGVmLi45NjIwZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTI1NSwxOSArMjU1LDI1IEBACiAKIH0KIAotc3RhdGljIGludCB3cml0ZV9zYl9wYWdlKG1kZGV2X3QgKm1kZGV2LCBsb25nIG9mZnNldCwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB3YWl0KQorc3RhdGljIGludCB3cml0ZV9zYl9wYWdlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB3YWl0KQogewogCW1ka19yZGV2X3QgKnJkZXY7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCW1kZGV2X3QgKm1kZGV2ID0gYml0bWFwLT5tZGRldjsKIAogCUlURVJBVEVfUkRFVihtZGRldiwgcmRldiwgdG1wKQogCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKQotCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKKwkJICAgICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKKwkJCWludCBzaXplID0gUEFHRV9TSVpFOworCQkJaWYgKHBhZ2UtPmluZGV4ID09IGJpdG1hcC0+ZmlsZV9wYWdlcy0xKQorCQkJCXNpemUgPSByb3VuZHVwKGJpdG1hcC0+bGFzdF9wYWdlX3NpemUsCisJCQkJCSAgICAgICBiZGV2X2hhcmRzZWN0X3NpemUocmRldi0+YmRldikpOwogCQkJbWRfc3VwZXJfd3JpdGUobWRkZXYsIHJkZXYsCi0JCQkJICAgICAgIChyZGV2LT5zYl9vZmZzZXQ8PDEpICsgb2Zmc2V0CisJCQkJICAgICAgIChyZGV2LT5zYl9vZmZzZXQ8PDEpICsgYml0bWFwLT5vZmZzZXQKIAkJCQkgICAgICAgKyBwYWdlLT5pbmRleCAqIChQQUdFX1NJWkUvNTEyKSwKLQkJCQkgICAgICAgUEFHRV9TSVpFLAorCQkJCSAgICAgICBzaXplLAogCQkJCSAgICAgICBwYWdlKTsKKwkJfQogCiAJaWYgKHdhaXQpCiAJCW1kX3N1cGVyX3dhaXQobWRkZXYpOwpAQCAtMjgyLDcgKzI4OCw3IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAogCWlmIChiaXRtYXAtPmZpbGUgPT0gTlVMTCkKLQkJcmV0dXJuIHdyaXRlX3NiX3BhZ2UoYml0bWFwLT5tZGRldiwgYml0bWFwLT5vZmZzZXQsIHBhZ2UsIHdhaXQpOworCQlyZXR1cm4gd3JpdGVfc2JfcGFnZShiaXRtYXAsIHBhZ2UsIHdhaXQpOwogCiAJYmggPSBwYWdlX2J1ZmZlcnMocGFnZSk7CiAKQEAgLTkyMyw2ICs5MjksNyBAQAogCQkJfQogCiAJCQliaXRtYXAtPmZpbGVtYXBbYml0bWFwLT5maWxlX3BhZ2VzKytdID0gcGFnZTsKKwkJCWJpdG1hcC0+bGFzdF9wYWdlX3NpemUgPSBjb3VudDsKIAkJfQogCQlwYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKIAkJaWYgKGJpdG1hcC0+ZmxhZ3MgJiBCSVRNQVBfSE9TVEVORElBTikKQEAgLTE0NTYsMTAgKzE0NjMsMTAgQEAKIAliaXRtYXAtPm9mZnNldCA9IG1kZGV2LT5iaXRtYXBfb2Zmc2V0OwogCWlmIChmaWxlKSB7CiAJCWdldF9maWxlKGZpbGUpOwotCQlkb19zeW5jX2ZpbGVfcmFuZ2UoZmlsZSwgMCwgTExPTkdfTUFYLAotCQkJCSAgIFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRSB8Ci0JCQkJICAgU1lOQ19GSUxFX1JBTkdFX1dSSVRFIHwKLQkJCQkgICBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUik7CisJCWRvX3N5bmNfbWFwcGluZ19yYW5nZShmaWxlLT5mX21hcHBpbmcsIDAsIExMT05HX01BWCwKKwkJCQkgICAgICBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUgfAorCQkJCSAgICAgIFNZTkNfRklMRV9SQU5HRV9XUklURSB8CisJCQkJICAgICAgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIpOwogCX0KIAkvKiByZWFkIHN1cGVyYmxvY2sgZnJvbSBiaXRtYXAgZmlsZSAodGhpcyBzZXRzIGJpdG1hcC0+Y2h1bmtzaXplKSAqLwogCWVyciA9IGJpdG1hcF9yZWFkX3NiKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWJpby1saXN0LmggYi9kcml2ZXJzL21kL2RtLWJpby1saXN0LmgKaW5kZXggZGE0MzQ5Ni4uYzZiZTg4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1iaW8tbGlzdC5oCisrKyBiL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaApAQCAtOCwxNyArOCw0MyBAQAogI2RlZmluZSBETV9CSU9fTElTVF9ICiAKICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiBzdHJ1Y3QgYmlvX2xpc3QgewogCXN0cnVjdCBiaW8gKmhlYWQ7CiAJc3RydWN0IGJpbyAqdGFpbDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgaW50IGJpb19saXN0X2VtcHR5KGNvbnN0IHN0cnVjdCBiaW9fbGlzdCAqYmwpCit7CisJcmV0dXJuIGJsLT5oZWFkID09IE5VTEw7Cit9CisKKyNkZWZpbmUgQklPX0xJU1RfSU5JVCB7IC5oZWFkID0gTlVMTCwgLnRhaWwgPSBOVUxMIH0KKworI2RlZmluZSBCSU9fTElTVChibCkgXAorCXN0cnVjdCBiaW9fbGlzdCBibCA9IEJJT19MSVNUX0lOSVQKKwogc3RhdGljIGlubGluZSB2b2lkIGJpb19saXN0X2luaXQoc3RydWN0IGJpb19saXN0ICpibCkKIHsKIAlibC0+aGVhZCA9IGJsLT50YWlsID0gTlVMTDsKIH0KIAorI2RlZmluZSBiaW9fbGlzdF9mb3JfZWFjaChiaW8sIGJsKSBcCisJZm9yIChiaW8gPSAoYmwpLT5oZWFkOyBiaW8gJiYgKHsgcHJlZmV0Y2goYmlvLT5iaV9uZXh0KTsgMTsgfSk7IFwKKwkgICAgIGJpbyA9IGJpby0+YmlfbmV4dCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBiaW9fbGlzdF9zaXplKGNvbnN0IHN0cnVjdCBiaW9fbGlzdCAqYmwpCit7CisJdW5zaWduZWQgc3ogPSAwOworCXN0cnVjdCBiaW8gKmJpbzsKKworCWJpb19saXN0X2Zvcl9lYWNoKGJpbywgYmwpCisJCXN6Kys7CisKKwlyZXR1cm4gc3o7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fbGlzdF9hZGQoc3RydWN0IGJpb19saXN0ICpibCwgc3RydWN0IGJpbyAqYmlvKQogewogCWJpby0+YmlfbmV4dCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKaW5kZXggZDgxMjEyMy4uN2IwZmNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwpAQCAtMzMsNyArMzMsNiBAQAogc3RydWN0IGNyeXB0X2lvIHsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0YXJnZXQ7CiAJc3RydWN0IGJpbyAqYmFzZV9iaW87Ci0Jc3RydWN0IGJpbyAqZmlyc3RfY2xvbmU7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJYXRvbWljX3QgcGVuZGluZzsKIAlpbnQgZXJyb3I7CkBAIC0xMDcsNiArMTA2LDggQEAKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpfY3J5cHRfaW9fcG9vbDsKIAorc3RhdGljIHZvaWQgY2xvbmVfaW5pdChzdHJ1Y3QgY3J5cHRfaW8gKiwgc3RydWN0IGJpbyAqKTsKKwogLyoKICAqIERpZmZlcmVudCBJViBnZW5lcmF0aW9uIGFsZ29yaXRobXM6CiAgKgpAQCAtMTIwLDYgKzEyMSw5IEBACiAgKiBiZW5iaTogdGhlIDY0LWJpdCAiYmlnLWVuZGlhbiAnbmFycm93IGJsb2NrJy1jb3VudCIsIHN0YXJ0aW5nIGF0IDEKICAqICAgICAgICAobmVlZGVkIGZvciBMUlctMzItQUVTIGFuZCBwb3NzaWJsZSBvdGhlciBuYXJyb3cgYmxvY2sgbW9kZXMpCiAgKgorICogbnVsbDogdGhlIGluaXRpYWwgdmVjdG9yIGlzIGFsd2F5cyB6ZXJvLiAgUHJvdmlkZXMgY29tcGF0aWJpbGl0eSB3aXRoCisgKiAgICAgICBvYnNvbGV0ZSBsb29wX2Zpc2gyIGRldmljZXMuICBEbyBub3QgdXNlIGZvciBuZXcgZGV2aWNlcy4KKyAqCiAgKiBwbHVtYjogdW5pbXBsZW1lbnRlZCwgc2VlOgogICogaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmxpbnV4Lmtlcm5lbC5kZXZpY2UtbWFwcGVyLmRtLWNyeXB0LzQ1NAogICovCkBAIC0yNTYsNiArMjYwLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY3J5cHRfaXZfbnVsbF9nZW4oc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MsIHU4ICppdiwgc2VjdG9yX3Qgc2VjdG9yKQoreworCW1lbXNldChpdiwgMCwgY2MtPml2X3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRfaXZfb3BlcmF0aW9ucyBjcnlwdF9pdl9wbGFpbl9vcHMgPSB7CiAJLmdlbmVyYXRvciA9IGNyeXB0X2l2X3BsYWluX2dlbgogfTsKQEAgLTI3Miw2ICsyODMsMTAgQEAKIAkuZ2VuZXJhdG9yID0gY3J5cHRfaXZfYmVuYmlfZ2VuCiB9OwogCitzdGF0aWMgc3RydWN0IGNyeXB0X2l2X29wZXJhdGlvbnMgY3J5cHRfaXZfbnVsbF9vcHMgPSB7CisJLmdlbmVyYXRvciA9IGNyeXB0X2l2X251bGxfZ2VuCit9OworCiBzdGF0aWMgaW50CiBjcnlwdF9jb252ZXJ0X3NjYXR0ZXJsaXN0KHN0cnVjdCBjcnlwdF9jb25maWcgKmNjLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKm91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICppbiwgdW5zaWduZWQgaW50IGxlbmd0aCwKQEAgLTM3OCwzNiArMzkzLDIxIEBACiAgKiBUaGlzIHNob3VsZCBuZXZlciB2aW9sYXRlIHRoZSBkZXZpY2UgbGltaXRhdGlvbnMKICAqIE1heSByZXR1cm4gYSBzbWFsbGVyIGJpbyB3aGVuIHJ1bm5pbmcgb3V0IG9mIHBhZ2VzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYmlvICoKLWNyeXB0X2FsbG9jX2J1ZmZlcihzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYywgdW5zaWduZWQgaW50IHNpemUsCi0gICAgICAgICAgICAgICAgICAgc3RydWN0IGJpbyAqYmFzZV9iaW8sIHVuc2lnbmVkIGludCAqYmlvX3ZlY19pZHgpCitzdGF0aWMgc3RydWN0IGJpbyAqY3J5cHRfYWxsb2NfYnVmZmVyKHN0cnVjdCBjcnlwdF9pbyAqaW8sIHVuc2lnbmVkIGludCBzaXplKQogeworCXN0cnVjdCBjcnlwdF9jb25maWcgKmNjID0gaW8tPnRhcmdldC0+cHJpdmF0ZTsKIAlzdHJ1Y3QgYmlvICpjbG9uZTsKIAl1bnNpZ25lZCBpbnQgbnJfaW92ZWNzID0gKHNpemUgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogCWdmcF90IGdmcF9tYXNrID0gR0ZQX05PSU8gfCBfX0dGUF9ISUdITUVNOwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKGJhc2VfYmlvKSB7Ci0JCWNsb25lID0gYmlvX2FsbG9jX2Jpb3NldChHRlBfTk9JTywgYmFzZV9iaW8tPmJpX21heF92ZWNzLCBjYy0+YnMpOwotCQlfX2Jpb19jbG9uZShjbG9uZSwgYmFzZV9iaW8pOwotCX0gZWxzZQotCQljbG9uZSA9IGJpb19hbGxvY19iaW9zZXQoR0ZQX05PSU8sIG5yX2lvdmVjcywgY2MtPmJzKTsKLQorCWNsb25lID0gYmlvX2FsbG9jX2Jpb3NldChHRlBfTk9JTywgbnJfaW92ZWNzLCBjYy0+YnMpOwogCWlmICghY2xvbmUpCiAJCXJldHVybiBOVUxMOwogCi0JY2xvbmUtPmJpX2Rlc3RydWN0b3IgPSBkbV9jcnlwdF9iaW9fZGVzdHJ1Y3RvcjsKKwljbG9uZV9pbml0KGlvLCBjbG9uZSk7CiAKLQkvKiBpZiB0aGUgbGFzdCBiaW8gd2FzIG5vdCBjb21wbGV0ZSwgY29udGludWUgd2hlcmUgdGhhdCBvbmUgZW5kZWQgKi8KLQljbG9uZS0+YmlfaWR4ID0gKmJpb192ZWNfaWR4OwotCWNsb25lLT5iaV92Y250ID0gKmJpb192ZWNfaWR4OwotCWNsb25lLT5iaV9zaXplID0gMDsKLQljbG9uZS0+YmlfZmxhZ3MgJj0gfigxIDw8IEJJT19TRUdfVkFMSUQpOwotCi0JLyogY2xvbmUtPmJpX2lkeCBwYWdlcyBoYXZlIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQgKi8KLQlzaXplIC09IGNsb25lLT5iaV9pZHggKiBQQUdFX1NJWkU7Ci0KLQlmb3IgKGkgPSBjbG9uZS0+YmlfaWR4OyBpIDwgbnJfaW92ZWNzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW92ZWNzOyBpKyspIHsKIAkJc3RydWN0IGJpb192ZWMgKmJ2ID0gYmlvX2lvdmVjX2lkeChjbG9uZSwgaSk7CiAKIAkJYnYtPmJ2X3BhZ2UgPSBtZW1wb29sX2FsbG9jKGNjLT5wYWdlX3Bvb2wsIGdmcF9tYXNrKTsKQEAgLTQxOSw3ICs0MTksNyBAQAogCQkgKiByZXR1cm4gYSBwYXJ0aWFsbHkgYWxsb2NhdGVkIGJpbywgdGhlIGNhbGxlciB3aWxsIHRoZW4gdHJ5CiAJCSAqIHRvIGFsbG9jYXRlIGFkZGl0aW9uYWwgYmlvcyB3aGlsZSBzdWJtaXR0aW5nIHRoaXMgcGFydGlhbCBiaW8KIAkJICovCi0JCWlmICgoaSAtIGNsb25lLT5iaV9pZHgpID09IChNSU5fQklPX1BBR0VTIC0gMSkpCisJCWlmIChpID09IChNSU5fQklPX1BBR0VTIC0gMSkpCiAJCQlnZnBfbWFzayA9IChnZnBfbWFzayB8IF9fR0ZQX05PV0FSTikgJiB+X19HRlBfV0FJVDsKIAogCQlidi0+YnZfb2Zmc2V0ID0gMDsKQEAgLTQzOCwxMiArNDM4LDYgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JLyoKLQkgKiBSZW1lbWJlciB0aGUgbGFzdCBiaW9fdmVjIGFsbG9jYXRlZCB0byBiZSBhYmxlCi0JICogdG8gY29ycmVjdGx5IGNvbnRpbnVlIGFmdGVyIHRoZSBzcGxpdHRpbmcuCi0JICovCi0JKmJpb192ZWNfaWR4ID0gY2xvbmUtPmJpX3ZjbnQ7Ci0KIAlyZXR1cm4gY2xvbmU7CiB9CiAKQEAgLTQ5NSw5ICs0ODksNiBAQAogCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmaW8tPnBlbmRpbmcpKQogCQlyZXR1cm47CiAKLQlpZiAoaW8tPmZpcnN0X2Nsb25lKQotCQliaW9fcHV0KGlvLT5maXJzdF9jbG9uZSk7Ci0KIAliaW9fZW5kaW8oaW8tPmJhc2VfYmlvLCBpby0+YmFzZV9iaW8tPmJpX3NpemUsIGlvLT5lcnJvcik7CiAKIAltZW1wb29sX2ZyZWUoaW8sIGNjLT5pb19wb29sKTsKQEAgLTU2Miw2ICs1NTMsNyBAQAogCWNsb25lLT5iaV9lbmRfaW8gID0gY3J5cHRfZW5kaW87CiAJY2xvbmUtPmJpX2JkZXYgICAgPSBjYy0+ZGV2LT5iZGV2OwogCWNsb25lLT5iaV9ydyAgICAgID0gaW8tPmJhc2VfYmlvLT5iaV9ydzsKKwljbG9uZS0+YmlfZGVzdHJ1Y3RvciA9IGRtX2NyeXB0X2Jpb19kZXN0cnVjdG9yOwogfQogCiBzdGF0aWMgdm9pZCBwcm9jZXNzX3JlYWQoc3RydWN0IGNyeXB0X2lvICppbykKQEAgLTU4NSw3ICs1NzcsNiBAQAogCX0KIAogCWNsb25lX2luaXQoaW8sIGNsb25lKTsKLQljbG9uZS0+YmlfZGVzdHJ1Y3RvciA9IGRtX2NyeXB0X2Jpb19kZXN0cnVjdG9yOwogCWNsb25lLT5iaV9pZHggPSAwOwogCWNsb25lLT5iaV92Y250ID0gYmlvX3NlZ21lbnRzKGJhc2VfYmlvKTsKIAljbG9uZS0+Ymlfc2l6ZSA9IGJhc2VfYmlvLT5iaV9zaXplOwpAQCAtNjA0LDcgKzU5NSw2IEBACiAJc3RydWN0IGNvbnZlcnRfY29udGV4dCBjdHg7CiAJdW5zaWduZWQgcmVtYWluaW5nID0gYmFzZV9iaW8tPmJpX3NpemU7CiAJc2VjdG9yX3Qgc2VjdG9yID0gYmFzZV9iaW8tPmJpX3NlY3RvciAtIGlvLT50YXJnZXQtPmJlZ2luOwotCXVuc2lnbmVkIGJ2ZWNfaWR4ID0gMDsKIAogCWF0b21pY19pbmMoJmlvLT5wZW5kaW5nKTsKIApAQCAtNjE1LDE0ICs2MDUsMTQgQEAKIAkgKiBzbyByZXBlYXQgdGhlIHdob2xlIHByb2Nlc3MgdW50aWwgYWxsIHRoZSBkYXRhIGNhbiBiZSBoYW5kbGVkLgogCSAqLwogCXdoaWxlIChyZW1haW5pbmcpIHsKLQkJY2xvbmUgPSBjcnlwdF9hbGxvY19idWZmZXIoY2MsIGJhc2VfYmlvLT5iaV9zaXplLAotCQkJCQkgICBpby0+Zmlyc3RfY2xvbmUsICZidmVjX2lkeCk7CisJCWNsb25lID0gY3J5cHRfYWxsb2NfYnVmZmVyKGlvLCByZW1haW5pbmcpOwogCQlpZiAodW5saWtlbHkoIWNsb25lKSkgewogCQkJZGVjX3BlbmRpbmcoaW8sIC1FTk9NRU0pOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJY3R4LmJpb19vdXQgPSBjbG9uZTsKKwkJY3R4LmlkeF9vdXQgPSAwOwogCiAJCWlmICh1bmxpa2VseShjcnlwdF9jb252ZXJ0KGNjLCAmY3R4KSA8IDApKSB7CiAJCQljcnlwdF9mcmVlX2J1ZmZlcl9wYWdlcyhjYywgY2xvbmUsIGNsb25lLT5iaV9zaXplKTsKQEAgLTYzMSwzMSArNjIxLDI2IEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQljbG9uZV9pbml0KGlvLCBjbG9uZSk7CisJCS8qIGNyeXB0X2NvbnZlcnQgc2hvdWxkIGhhdmUgZmlsbGVkIHRoZSBjbG9uZSBiaW8gKi8KKwkJQlVHX09OKGN0eC5pZHhfb3V0IDwgY2xvbmUtPmJpX3ZjbnQpOworCiAJCWNsb25lLT5iaV9zZWN0b3IgPSBjYy0+c3RhcnQgKyBzZWN0b3I7Ci0KLQkJaWYgKCFpby0+Zmlyc3RfY2xvbmUpIHsKLQkJCS8qCi0JCQkgKiBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBmaXJzdCBjbG9uZSwgYmVjYXVzZSBpdAotCQkJICogaG9sZHMgdGhlIGJpb192ZWMgYXJyYXkgYW5kIHRoYXQgY2FuJ3QgYmUgZnJlZWQKLQkJCSAqIGJlZm9yZSBhbGwgb3RoZXIgY2xvbmVzIGFyZSByZWxlYXNlZAotCQkJICovCi0JCQliaW9fZ2V0KGNsb25lKTsKLQkJCWlvLT5maXJzdF9jbG9uZSA9IGNsb25lOwotCQl9Ci0KIAkJcmVtYWluaW5nIC09IGNsb25lLT5iaV9zaXplOwogCQlzZWN0b3IgKz0gYmlvX3NlY3RvcnMoY2xvbmUpOwogCi0JCS8qIHByZXZlbnQgYmlvX3B1dCBvZiBmaXJzdF9jbG9uZSAqLworCQkvKiBHcmFiIGFub3RoZXIgcmVmZXJlbmNlIHRvIHRoZSBpbyBzdHJ1Y3QKKwkJICogYmVmb3JlIHdlIGtpY2sgb2ZmIHRoZSByZXF1ZXN0ICovCiAJCWlmIChyZW1haW5pbmcpCiAJCQlhdG9taWNfaW5jKCZpby0+cGVuZGluZyk7CiAKIAkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoY2xvbmUpOwogCisJCS8qIERvIG5vdCByZWZlcmVuY2UgY2xvbmUgYWZ0ZXIgdGhpcyAtIGl0CisJCSAqIG1heSBiZSBnb25lIGFscmVhZHkuICovCisKIAkJLyogb3V0IG9mIG1lbW9yeSAtPiBydW4gcXVldWVzICovCiAJCWlmIChyZW1haW5pbmcpCi0JCQljb25nZXN0aW9uX3dhaXQoYmlvX2RhdGFfZGlyKGNsb25lKSwgSFovMTAwKTsKKwkJCWNvbmdlc3Rpb25fd2FpdChXUklURSwgSFovMTAwKTsKIAl9CiB9CiAKQEAgLTgzMiw2ICs4MTcsOCBAQAogCQljYy0+aXZfZ2VuX29wcyA9ICZjcnlwdF9pdl9lc3Npdl9vcHM7CiAJZWxzZSBpZiAoc3RyY21wKGl2bW9kZSwgImJlbmJpIikgPT0gMCkKIAkJY2MtPml2X2dlbl9vcHMgPSAmY3J5cHRfaXZfYmVuYmlfb3BzOworCWVsc2UgaWYgKHN0cmNtcChpdm1vZGUsICJudWxsIikgPT0gMCkKKwkJY2MtPml2X2dlbl9vcHMgPSAmY3J5cHRfaXZfbnVsbF9vcHM7CiAJZWxzZSB7CiAJCXRpLT5lcnJvciA9ICJJbnZhbGlkIElWIG1vZGUiOwogCQlnb3RvIGJhZDI7CkBAIC05NTQsMTAgKzk0MSwxMiBAQAogCXN0cnVjdCBjcnlwdF9jb25maWcgKmNjID0gdGktPnByaXZhdGU7CiAJc3RydWN0IGNyeXB0X2lvICppbzsKIAorCWlmIChiaW9fYmFycmllcihiaW8pKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpbyA9IG1lbXBvb2xfYWxsb2MoY2MtPmlvX3Bvb2wsIEdGUF9OT0lPKTsKIAlpby0+dGFyZ2V0ID0gdGk7CiAJaW8tPmJhc2VfYmlvID0gYmlvOwotCWlvLT5maXJzdF9jbG9uZSA9IE5VTEw7CiAJaW8tPmVycm9yID0gaW8tPnBvc3RfcHJvY2VzcyA9IDA7CiAJYXRvbWljX3NldCgmaW8tPnBlbmRpbmcsIDApOwogCWtjcnlwdGRfcXVldWVfaW8oaW8pOwpAQCAtMTA1Nyw3ICsxMDQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCB0YXJnZXRfdHlwZSBjcnlwdF90YXJnZXQgPSB7CiAJLm5hbWUgICA9ICJjcnlwdCIsCi0JLnZlcnNpb249IHsxLCAzLCAwfSwKKwkudmVyc2lvbj0gezEsIDUsIDB9LAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKIAkuY3RyICAgID0gY3J5cHRfY3RyLAogCS5kdHIgICAgPSBjcnlwdF9kdHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWRlbGF5LmMgYi9kcml2ZXJzL21kL2RtLWRlbGF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjN2NmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWQvZG0tZGVsYXkuYwpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IFJlZCBIYXQgR21iSAorICoKKyAqIEEgdGFyZ2V0IHRoYXQgZGVsYXlzIHJlYWRzIGFuZC9vciB3cml0ZXMgYW5kIGNhbiBzZW5kCisgKiB0aGVtIHRvIGRpZmZlcmVudCBkZXZpY2VzLgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiZG0uaCIKKyNpbmNsdWRlICJkbS1iaW8tbGlzdC5oIgorCisjZGVmaW5lIERNX01TR19QUkVGSVggImRlbGF5IgorCitzdHJ1Y3QgZGVsYXlfYyB7CisJc3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfdGltZXI7CisJc3RydWN0IHNlbWFwaG9yZSB0aW1lcl9sb2NrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBmbHVzaF9leHBpcmVkX2Jpb3M7CisJc3RydWN0IGxpc3RfaGVhZCBkZWxheWVkX2Jpb3M7CisJYXRvbWljX3QgbWF5X2RlbGF5OworCW1lbXBvb2xfdCAqZGVsYXllZF9wb29sOworCisJc3RydWN0IGRtX2RldiAqZGV2X3JlYWQ7CisJc2VjdG9yX3Qgc3RhcnRfcmVhZDsKKwl1bnNpZ25lZCByZWFkX2RlbGF5OworCXVuc2lnbmVkIHJlYWRzOworCisJc3RydWN0IGRtX2RldiAqZGV2X3dyaXRlOworCXNlY3Rvcl90IHN0YXJ0X3dyaXRlOworCXVuc2lnbmVkIHdyaXRlX2RlbGF5OworCXVuc2lnbmVkIHdyaXRlczsKK307CisKK3N0cnVjdCBkZWxheV9pbmZvIHsKKwlzdHJ1Y3QgZGVsYXlfYyAqY29udGV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGJpbyAqYmlvOworCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZGVsYXllZF9iaW9zX2xvY2spOworCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtkZWxheWRfd3E7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRlbGF5ZWRfY2FjaGU7CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9kZWxheWVkX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZGVsYXlfYyAqZGMgPSAoc3RydWN0IGRlbGF5X2MgKilkYXRhOworCisJcXVldWVfd29yayhrZGVsYXlkX3dxLCAmZGMtPmZsdXNoX2V4cGlyZWRfYmlvcyk7Cit9CisKK3N0YXRpYyB2b2lkIHF1ZXVlX3RpbWVvdXQoc3RydWN0IGRlbGF5X2MgKmRjLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCit7CisJZG93bigmZGMtPnRpbWVyX2xvY2spOworCisJaWYgKCF0aW1lcl9wZW5kaW5nKCZkYy0+ZGVsYXlfdGltZXIpIHx8IGV4cGlyZXMgPCBkYy0+ZGVsYXlfdGltZXIuZXhwaXJlcykKKwkJbW9kX3RpbWVyKCZkYy0+ZGVsYXlfdGltZXIsIGV4cGlyZXMpOworCisJdXAoJmRjLT50aW1lcl9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZmx1c2hfYmlvcyhzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGJpbyAqbjsKKworCXdoaWxlIChiaW8pIHsKKwkJbiA9IGJpby0+YmlfbmV4dDsKKwkJYmlvLT5iaV9uZXh0ID0gTlVMTDsKKwkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKKwkJYmlvID0gbjsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmlvICpmbHVzaF9kZWxheWVkX2Jpb3Moc3RydWN0IGRlbGF5X2MgKmRjLCBpbnQgZmx1c2hfYWxsKQoreworCXN0cnVjdCBkZWxheV9pbmZvICpkZWxheWVkLCAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIG5leHRfZXhwaXJlcyA9IDA7CisJaW50IHN0YXJ0X3RpbWVyID0gMDsKKwlCSU9fTElTVChmbHVzaF9iaW9zKTsKKworCW11dGV4X2xvY2soJmRlbGF5ZWRfYmlvc19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVsYXllZCwgbmV4dCwgJmRjLT5kZWxheWVkX2Jpb3MsIGxpc3QpIHsKKwkJaWYgKGZsdXNoX2FsbCB8fCB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGRlbGF5ZWQtPmV4cGlyZXMpKSB7CisJCQlsaXN0X2RlbCgmZGVsYXllZC0+bGlzdCk7CisJCQliaW9fbGlzdF9hZGQoJmZsdXNoX2Jpb3MsIGRlbGF5ZWQtPmJpbyk7CisJCQlpZiAoKGJpb19kYXRhX2RpcihkZWxheWVkLT5iaW8pID09IFdSSVRFKSkKKwkJCQlkZWxheWVkLT5jb250ZXh0LT53cml0ZXMtLTsKKwkJCWVsc2UKKwkJCQlkZWxheWVkLT5jb250ZXh0LT5yZWFkcy0tOworCQkJbWVtcG9vbF9mcmVlKGRlbGF5ZWQsIGRjLT5kZWxheWVkX3Bvb2wpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXN0YXJ0X3RpbWVyKSB7CisJCQlzdGFydF90aW1lciA9IDE7CisJCQluZXh0X2V4cGlyZXMgPSBkZWxheWVkLT5leHBpcmVzOworCQl9IGVsc2UKKwkJCW5leHRfZXhwaXJlcyA9IG1pbihuZXh0X2V4cGlyZXMsIGRlbGF5ZWQtPmV4cGlyZXMpOworCX0KKworCW11dGV4X3VubG9jaygmZGVsYXllZF9iaW9zX2xvY2spOworCisJaWYgKHN0YXJ0X3RpbWVyKQorCQlxdWV1ZV90aW1lb3V0KGRjLCBuZXh0X2V4cGlyZXMpOworCisJcmV0dXJuIGJpb19saXN0X2dldCgmZmx1c2hfYmlvcyk7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX2V4cGlyZWRfYmlvcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRlbGF5X2MgKmRjOworCisJZGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5X2MsIGZsdXNoX2V4cGlyZWRfYmlvcyk7CisJZmx1c2hfYmlvcyhmbHVzaF9kZWxheWVkX2Jpb3MoZGMsIDApKTsKK30KKworLyoKKyAqIE1hcHBpbmcgcGFyYW1ldGVyczoKKyAqICAgIDxkZXZpY2U+IDxvZmZzZXQ+IDxkZWxheT4gWzx3cml0ZV9kZXZpY2U+IDx3cml0ZV9vZmZzZXQ+IDx3cml0ZV9kZWxheT5dCisgKgorICogV2l0aCBzZXBhcmF0ZSB3cml0ZSBwYXJhbWV0ZXJzLCB0aGUgZmlyc3Qgc2V0IGlzIG9ubHkgdXNlZCBmb3IgcmVhZHMuCisgKiBEZWxheXMgYXJlIHNwZWNpZmllZCBpbiBtaWxsaXNlY29uZHMuCisgKi8KK3N0YXRpYyBpbnQgZGVsYXlfY3RyKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGRlbGF5X2MgKmRjOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXBsbDsKKworCWlmIChhcmdjICE9IDMgJiYgYXJnYyAhPSA2KSB7CisJCXRpLT5lcnJvciA9ICJyZXF1aXJlcyBleGFjdGx5IDMgb3IgNiBhcmd1bWVudHMiOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkYyA9IGttYWxsb2Moc2l6ZW9mKCpkYyksIEdGUF9LRVJORUwpOworCWlmICghZGMpIHsKKwkJdGktPmVycm9yID0gIkNhbm5vdCBhbGxvY2F0ZSBjb250ZXh0IjsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGMtPnJlYWRzID0gZGMtPndyaXRlcyA9IDA7CisKKwlpZiAoc3NjYW5mKGFyZ3ZbMV0sICIlbGx1IiwgJnRtcGxsKSAhPSAxKSB7CisJCXRpLT5lcnJvciA9ICJJbnZhbGlkIGRldmljZSBzZWN0b3IiOworCQlnb3RvIGJhZDsKKwl9CisJZGMtPnN0YXJ0X3JlYWQgPSB0bXBsbDsKKworCWlmIChzc2NhbmYoYXJndlsyXSwgIiV1IiwgJmRjLT5yZWFkX2RlbGF5KSAhPSAxKSB7CisJCXRpLT5lcnJvciA9ICJJbnZhbGlkIGRlbGF5IjsKKwkJZ290byBiYWQ7CisJfQorCisJaWYgKGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMF0sIGRjLT5zdGFydF9yZWFkLCB0aS0+bGVuLAorCQkJICBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmZGMtPmRldl9yZWFkKSkgeworCQl0aS0+ZXJyb3IgPSAiRGV2aWNlIGxvb2t1cCBmYWlsZWQiOworCQlnb3RvIGJhZDsKKwl9CisKKwlpZiAoYXJnYyA9PSAzKSB7CisJCWRjLT5kZXZfd3JpdGUgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc3NjYW5mKGFyZ3ZbNF0sICIlbGx1IiwgJnRtcGxsKSAhPSAxKSB7CisJCXRpLT5lcnJvciA9ICJJbnZhbGlkIHdyaXRlIGRldmljZSBzZWN0b3IiOworCQlnb3RvIGJhZDsKKwl9CisJZGMtPnN0YXJ0X3dyaXRlID0gdG1wbGw7CisKKwlpZiAoc3NjYW5mKGFyZ3ZbNV0sICIldSIsICZkYy0+d3JpdGVfZGVsYXkpICE9IDEpIHsKKwkJdGktPmVycm9yID0gIkludmFsaWQgd3JpdGUgZGVsYXkiOworCQlnb3RvIGJhZDsKKwl9CisKKwlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlszXSwgZGMtPnN0YXJ0X3dyaXRlLCB0aS0+bGVuLAorCQkJICBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmZGMtPmRldl93cml0ZSkpIHsKKwkJdGktPmVycm9yID0gIldyaXRlIGRldmljZSBsb29rdXAgZmFpbGVkIjsKKwkJZG1fcHV0X2RldmljZSh0aSwgZGMtPmRldl9yZWFkKTsKKwkJZ290byBiYWQ7CisJfQorCitvdXQ6CisJZGMtPmRlbGF5ZWRfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbCgxMjgsIGRlbGF5ZWRfY2FjaGUpOworCWlmICghZGMtPmRlbGF5ZWRfcG9vbCkgeworCQlETUVSUigiQ291bGRuJ3QgY3JlYXRlIGRlbGF5ZWQgYmlvIHBvb2wuIik7CisJCWdvdG8gYmFkOworCX0KKworCWluaXRfdGltZXIoJmRjLT5kZWxheV90aW1lcik7CisJZGMtPmRlbGF5X3RpbWVyLmZ1bmN0aW9uID0gaGFuZGxlX2RlbGF5ZWRfdGltZXI7CisJZGMtPmRlbGF5X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkYzsKKworCUlOSVRfV09SSygmZGMtPmZsdXNoX2V4cGlyZWRfYmlvcywgZmx1c2hfZXhwaXJlZF9iaW9zKTsKKwlJTklUX0xJU1RfSEVBRCgmZGMtPmRlbGF5ZWRfYmlvcyk7CisJaW5pdF9NVVRFWCgmZGMtPnRpbWVyX2xvY2spOworCWF0b21pY19zZXQoJmRjLT5tYXlfZGVsYXksIDEpOworCisJdGktPnByaXZhdGUgPSBkYzsKKwlyZXR1cm4gMDsKKworYmFkOgorCWtmcmVlKGRjKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgZGVsYXlfZHRyKHN0cnVjdCBkbV90YXJnZXQgKnRpKQoreworCXN0cnVjdCBkZWxheV9jICpkYyA9IHRpLT5wcml2YXRlOworCisJZmx1c2hfd29ya3F1ZXVlKGtkZWxheWRfd3EpOworCisJZG1fcHV0X2RldmljZSh0aSwgZGMtPmRldl9yZWFkKTsKKworCWlmIChkYy0+ZGV2X3dyaXRlKQorCQlkbV9wdXRfZGV2aWNlKHRpLCBkYy0+ZGV2X3dyaXRlKTsKKworCW1lbXBvb2xfZGVzdHJveShkYy0+ZGVsYXllZF9wb29sKTsKKwlrZnJlZShkYyk7Cit9CisKK3N0YXRpYyBpbnQgZGVsYXlfYmlvKHN0cnVjdCBkZWxheV9jICpkYywgaW50IGRlbGF5LCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGRlbGF5X2luZm8gKmRlbGF5ZWQ7CisJdW5zaWduZWQgbG9uZyBleHBpcmVzID0gMDsKKworCWlmICghZGVsYXkgfHwgIWF0b21pY19yZWFkKCZkYy0+bWF5X2RlbGF5KSkKKwkJcmV0dXJuIDE7CisKKwlkZWxheWVkID0gbWVtcG9vbF9hbGxvYyhkYy0+ZGVsYXllZF9wb29sLCBHRlBfTk9JTyk7CisKKwlkZWxheWVkLT5jb250ZXh0ID0gZGM7CisJZGVsYXllZC0+YmlvID0gYmlvOworCWRlbGF5ZWQtPmV4cGlyZXMgPSBleHBpcmVzID0gamlmZmllcyArIChkZWxheSAqIEhaIC8gMTAwMCk7CisKKwltdXRleF9sb2NrKCZkZWxheWVkX2Jpb3NfbG9jayk7CisKKwlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpCisJCWRjLT53cml0ZXMrKzsKKwllbHNlCisJCWRjLT5yZWFkcysrOworCisJbGlzdF9hZGRfdGFpbCgmZGVsYXllZC0+bGlzdCwgJmRjLT5kZWxheWVkX2Jpb3MpOworCisJbXV0ZXhfdW5sb2NrKCZkZWxheWVkX2Jpb3NfbG9jayk7CisKKwlxdWV1ZV90aW1lb3V0KGRjLCBleHBpcmVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWxheV9wcmVzdXNwZW5kKHN0cnVjdCBkbV90YXJnZXQgKnRpKQoreworCXN0cnVjdCBkZWxheV9jICpkYyA9IHRpLT5wcml2YXRlOworCisJYXRvbWljX3NldCgmZGMtPm1heV9kZWxheSwgMCk7CisJZGVsX3RpbWVyX3N5bmMoJmRjLT5kZWxheV90aW1lcik7CisJZmx1c2hfYmlvcyhmbHVzaF9kZWxheWVkX2Jpb3MoZGMsIDEpKTsKK30KKworc3RhdGljIHZvaWQgZGVsYXlfcmVzdW1lKHN0cnVjdCBkbV90YXJnZXQgKnRpKQoreworCXN0cnVjdCBkZWxheV9jICpkYyA9IHRpLT5wcml2YXRlOworCisJYXRvbWljX3NldCgmZGMtPm1heV9kZWxheSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgZGVsYXlfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8sCisJCSAgICAgdW5pb24gbWFwX2luZm8gKm1hcF9jb250ZXh0KQoreworCXN0cnVjdCBkZWxheV9jICpkYyA9IHRpLT5wcml2YXRlOworCisJaWYgKChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgJiYgKGRjLT5kZXZfd3JpdGUpKSB7CisJCWJpby0+YmlfYmRldiA9IGRjLT5kZXZfd3JpdGUtPmJkZXY7CisJCWJpby0+Ymlfc2VjdG9yID0gZGMtPnN0YXJ0X3dyaXRlICsKKwkJCQkgKGJpby0+Ymlfc2VjdG9yIC0gdGktPmJlZ2luKTsKKworCQlyZXR1cm4gZGVsYXlfYmlvKGRjLCBkYy0+d3JpdGVfZGVsYXksIGJpbyk7CisJfQorCisJYmlvLT5iaV9iZGV2ID0gZGMtPmRldl9yZWFkLT5iZGV2OworCWJpby0+Ymlfc2VjdG9yID0gZGMtPnN0YXJ0X3JlYWQgKworCQkJIChiaW8tPmJpX3NlY3RvciAtIHRpLT5iZWdpbik7CisKKwlyZXR1cm4gZGVsYXlfYmlvKGRjLCBkYy0+cmVhZF9kZWxheSwgYmlvKTsKK30KKworc3RhdGljIGludCBkZWxheV9zdGF0dXMoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0YXR1c190eXBlX3QgdHlwZSwKKwkJCWNoYXIgKnJlc3VsdCwgdW5zaWduZWQgbWF4bGVuKQoreworCXN0cnVjdCBkZWxheV9jICpkYyA9IHRpLT5wcml2YXRlOworCWludCBzeiA9IDA7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNUQVRVU1RZUEVfSU5GTzoKKwkJRE1FTUlUKCIldSAldSIsIGRjLT5yZWFkcywgZGMtPndyaXRlcyk7CisJCWJyZWFrOworCisJY2FzZSBTVEFUVVNUWVBFX1RBQkxFOgorCQlETUVNSVQoIiVzICVsbHUgJXUiLCBkYy0+ZGV2X3JlYWQtPm5hbWUsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBkYy0+c3RhcnRfcmVhZCwKKwkJICAgICAgIGRjLT5yZWFkX2RlbGF5KTsKKwkJaWYgKGRjLT5kZXZfd3JpdGUpCisJCQlETUVNSVQoIiVzICVsbHUgJXUiLCBkYy0+ZGV2X3dyaXRlLT5uYW1lLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGRjLT5zdGFydF93cml0ZSwKKwkJCSAgICAgICBkYy0+d3JpdGVfZGVsYXkpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0YXJnZXRfdHlwZSBkZWxheV90YXJnZXQgPSB7CisJLm5hbWUJICAgICA9ICJkZWxheSIsCisJLnZlcnNpb24gICAgID0gezEsIDAsIDJ9LAorCS5tb2R1bGUgICAgICA9IFRISVNfTU9EVUxFLAorCS5jdHIJICAgICA9IGRlbGF5X2N0ciwKKwkuZHRyCSAgICAgPSBkZWxheV9kdHIsCisJLm1hcAkgICAgID0gZGVsYXlfbWFwLAorCS5wcmVzdXNwZW5kICA9IGRlbGF5X3ByZXN1c3BlbmQsCisJLnJlc3VtZQkgICAgID0gZGVsYXlfcmVzdW1lLAorCS5zdGF0dXMJICAgICA9IGRlbGF5X3N0YXR1cywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRtX2RlbGF5X2luaXQodm9pZCkKK3sKKwlpbnQgciA9IC1FTk9NRU07CisKKwlrZGVsYXlkX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgia2RlbGF5ZCIpOworCWlmICgha2RlbGF5ZF93cSkgeworCQlETUVSUigiQ291bGRuJ3Qgc3RhcnQga2RlbGF5ZCIpOworCQlnb3RvIGJhZF9xdWV1ZTsKKwl9CisKKwlkZWxheWVkX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImRtLWRlbGF5IiwKKwkJCQkJICBzaXplb2Yoc3RydWN0IGRlbGF5X2luZm8pLAorCQkJCQkgIF9fYWxpZ25vZl9fKHN0cnVjdCBkZWxheV9pbmZvKSwKKwkJCQkJICAwLCBOVUxMLCBOVUxMKTsKKwlpZiAoIWRlbGF5ZWRfY2FjaGUpIHsKKwkJRE1FUlIoIkNvdWxkbid0IGNyZWF0ZSBkZWxheWVkIGJpbyBjYWNoZS4iKTsKKwkJZ290byBiYWRfbWVtY2FjaGU7CisJfQorCisJciA9IGRtX3JlZ2lzdGVyX3RhcmdldCgmZGVsYXlfdGFyZ2V0KTsKKwlpZiAociA8IDApIHsKKwkJRE1FUlIoInJlZ2lzdGVyIGZhaWxlZCAlZCIsIHIpOworCQlnb3RvIGJhZF9yZWdpc3RlcjsKKwl9CisKKwlyZXR1cm4gMDsKKworYmFkX3JlZ2lzdGVyOgorCWttZW1fY2FjaGVfZGVzdHJveShkZWxheWVkX2NhY2hlKTsKK2JhZF9tZW1jYWNoZToKKwlkZXN0cm95X3dvcmtxdWV1ZShrZGVsYXlkX3dxKTsKK2JhZF9xdWV1ZToKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRtX2RlbGF5X2V4aXQodm9pZCkKK3sKKwlpbnQgciA9IGRtX3VucmVnaXN0ZXJfdGFyZ2V0KCZkZWxheV90YXJnZXQpOworCisJaWYgKHIgPCAwKQorCQlETUVSUigidW5yZWdpc3RlciBmYWlsZWQgJWQiLCByKTsKKworCWttZW1fY2FjaGVfZGVzdHJveShkZWxheWVkX2NhY2hlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShrZGVsYXlkX3dxKTsKK30KKworLyogTW9kdWxlIGhvb2tzICovCittb2R1bGVfaW5pdChkbV9kZWxheV9pbml0KTsKK21vZHVsZV9leGl0KGRtX2RlbGF5X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRE1fTkFNRSAiIGRlbGF5IHRhcmdldCIpOworTU9EVUxFX0FVVEhPUigiSGVpbnogTWF1ZWxzaGFnZW4gPG1hdWVsc2hhZ2VuQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYwppbmRleCA5OWNkZmZhLi4wN2UwYTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKQEAgLTEsNyArMSw4IEBACiAvKgotICogZG0tc25hcHNob3QuYworICogZG0tZXhjZXB0aW9uLXN0b3JlLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBTaXN0aW5hIFNvZnR3YXJlIChVSykgTGltaXRlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0IEdtYkgKICAqCiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTC4KICAqLwpAQCAtMTIzLDYgKzEyNCw3IEBACiAJYXRvbWljX3QgcGVuZGluZ19jb3VudDsKIAl1aW50MzJfdCBjYWxsYmFja19jb3VudDsKIAlzdHJ1Y3QgY29tbWl0X2NhbGxiYWNrICpjYWxsYmFja3M7CisJc3RydWN0IGRtX2lvX2NsaWVudCAqaW9fY2xpZW50OwogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2VjdG9yc190b19wYWdlcyh1bnNpZ25lZCBpbnQgc2VjdG9ycykKQEAgLTE1OSwxNCArMTYxLDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgY2h1bmtfaW8oc3RydWN0IHBzdG9yZSAqcHMsIHVpbnQzMl90IGNodW5rLCBpbnQgcncpCiB7Ci0Jc3RydWN0IGlvX3JlZ2lvbiB3aGVyZTsKLQl1bnNpZ25lZCBsb25nIGJpdHM7CisJc3RydWN0IGlvX3JlZ2lvbiB3aGVyZSA9IHsKKwkJLmJkZXYgPSBwcy0+c25hcC0+Y293LT5iZGV2LAorCQkuc2VjdG9yID0gcHMtPnNuYXAtPmNodW5rX3NpemUgKiBjaHVuaywKKwkJLmNvdW50ID0gcHMtPnNuYXAtPmNodW5rX3NpemUsCisJfTsKKwlzdHJ1Y3QgZG1faW9fcmVxdWVzdCBpb19yZXEgPSB7CisJCS5iaV9ydyA9IHJ3LAorCQkubWVtLnR5cGUgPSBETV9JT19WTUEsCisJCS5tZW0ucHRyLnZtYSA9IHBzLT5hcmVhLAorCQkuY2xpZW50ID0gcHMtPmlvX2NsaWVudCwKKwkJLm5vdGlmeS5mbiA9IE5VTEwsCisJfTsKIAotCXdoZXJlLmJkZXYgPSBwcy0+c25hcC0+Y293LT5iZGV2OwotCXdoZXJlLnNlY3RvciA9IHBzLT5zbmFwLT5jaHVua19zaXplICogY2h1bms7Ci0Jd2hlcmUuY291bnQgPSBwcy0+c25hcC0+Y2h1bmtfc2l6ZTsKLQotCXJldHVybiBkbV9pb19zeW5jX3ZtKDEsICZ3aGVyZSwgcncsIHBzLT5hcmVhLCAmYml0cyk7CisJcmV0dXJuIGRtX2lvKCZpb19yZXEsIDEsICZ3aGVyZSwgTlVMTCk7CiB9CiAKIC8qCkBAIC0yMTMsMTcgKzIyMSwxOCBAQAogCQljaHVua19zaXplX3N1cHBsaWVkID0gMDsKIAl9CiAKLQlyID0gZG1faW9fZ2V0KHNlY3RvcnNfdG9fcGFnZXMocHMtPnNuYXAtPmNodW5rX3NpemUpKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJcHMtPmlvX2NsaWVudCA9IGRtX2lvX2NsaWVudF9jcmVhdGUoc2VjdG9yc190b19wYWdlcyhwcy0+c25hcC0+CisJCQkJCQkJICAgICBjaHVua19zaXplKSk7CisJaWYgKElTX0VSUihwcy0+aW9fY2xpZW50KSkKKwkJcmV0dXJuIFBUUl9FUlIocHMtPmlvX2NsaWVudCk7CiAKIAlyID0gYWxsb2NfYXJlYShwcyk7CiAJaWYgKHIpCi0JCWdvdG8gYmFkMTsKKwkJcmV0dXJuIHI7CiAKIAlyID0gY2h1bmtfaW8ocHMsIDAsIFJFQUQpOwogCWlmIChyKQotCQlnb3RvIGJhZDI7CisJCWdvdG8gYmFkOwogCiAJZGggPSAoc3RydWN0IGRpc2tfaGVhZGVyICopIHBzLT5hcmVhOwogCkBAIC0yMzUsNyArMjQ0LDcgQEAKIAlpZiAobGUzMl90b19jcHUoZGgtPm1hZ2ljKSAhPSBTTkFQX01BR0lDKSB7CiAJCURNV0FSTigiSW52YWxpZCBvciBjb3JydXB0IHNuYXBzaG90Iik7CiAJCXIgPSAtRU5YSU87Ci0JCWdvdG8gYmFkMjsKKwkJZ290byBiYWQ7CiAJfQogCiAJKm5ld19zbmFwc2hvdCA9IDA7CkBAIC0yNTIsMjcgKzI2MSwyMiBAQAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBzLT5zbmFwLT5jaHVua19zaXplKTsKIAogCS8qIFdlIGhhZCBhIGJvZ3VzIGNodW5rX3NpemUuIEZpeCBzdHVmZiB1cC4gKi8KLQlkbV9pb19wdXQoc2VjdG9yc190b19wYWdlcyhwcy0+c25hcC0+Y2h1bmtfc2l6ZSkpOwogCWZyZWVfYXJlYShwcyk7CiAKIAlwcy0+c25hcC0+Y2h1bmtfc2l6ZSA9IGNodW5rX3NpemU7CiAJcHMtPnNuYXAtPmNodW5rX21hc2sgPSBjaHVua19zaXplIC0gMTsKIAlwcy0+c25hcC0+Y2h1bmtfc2hpZnQgPSBmZnMoY2h1bmtfc2l6ZSkgLSAxOwogCi0JciA9IGRtX2lvX2dldChzZWN0b3JzX3RvX3BhZ2VzKGNodW5rX3NpemUpKTsKKwlyID0gZG1faW9fY2xpZW50X3Jlc2l6ZShzZWN0b3JzX3RvX3BhZ2VzKHBzLT5zbmFwLT5jaHVua19zaXplKSwKKwkJCQlwcy0+aW9fY2xpZW50KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKIAlyID0gYWxsb2NfYXJlYShwcyk7Ci0JaWYgKHIpCi0JCWdvdG8gYmFkMTsKKwlyZXR1cm4gcjsKIAotCXJldHVybiAwOwotCi1iYWQyOgorYmFkOgogCWZyZWVfYXJlYShwcyk7Ci1iYWQxOgotCWRtX2lvX3B1dChzZWN0b3JzX3RvX3BhZ2VzKHBzLT5zbmFwLT5jaHVua19zaXplKSk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTQwNSw3ICs0MDksNyBAQAogewogCXN0cnVjdCBwc3RvcmUgKnBzID0gZ2V0X2luZm8oc3RvcmUpOwogCi0JZG1faW9fcHV0KHNlY3RvcnNfdG9fcGFnZXMocHMtPnNuYXAtPmNodW5rX3NpemUpKTsKKwlkbV9pb19jbGllbnRfZGVzdHJveShwcy0+aW9fY2xpZW50KTsKIAl2ZnJlZShwcy0+Y2FsbGJhY2tzKTsKIAlmcmVlX2FyZWEocHMpOwogCWtmcmVlKHBzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taHctaGFuZGxlci5oIGIvZHJpdmVycy9tZC9kbS1ody1oYW5kbGVyLmgKaW5kZXggMzJlZmYyOC4uZTA4MzJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1ody1oYW5kbGVyLmgKKysrIGIvZHJpdmVycy9tZC9kbS1ody1oYW5kbGVyLmgKQEAgLTE2LDYgKzE2LDcgQEAKIHN0cnVjdCBod19oYW5kbGVyX3R5cGU7CiBzdHJ1Y3QgaHdfaGFuZGxlciB7CiAJc3RydWN0IGh3X2hhbmRsZXJfdHlwZSAqdHlwZTsKKwlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQ7CiAJdm9pZCAqY29udGV4dDsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW8uYyBiL2RyaXZlcnMvbWQvZG0taW8uYwppbmRleCA4YmRjOGE4Li4zNTJjNmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pby5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyBTaXN0aW5hIFNvZnR3YXJlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCBHbWJICiAgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCiAgKi8KQEAgLTEyLDEzICsxMywxNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi1zdGF0aWMgc3RydWN0IGJpb19zZXQgKl9iaW9zOworc3RydWN0IGRtX2lvX2NsaWVudCB7CisJbWVtcG9vbF90ICpwb29sOworCXN0cnVjdCBiaW9fc2V0ICpiaW9zOworfTsKIAogLyogRklYTUU6IGNhbiB3ZSBzaHJpbmsgdGhpcyA/ICovCiBzdHJ1Y3QgaW8gewogCXVuc2lnbmVkIGxvbmcgZXJyb3I7CiAJYXRvbWljX3QgY291bnQ7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpzbGVlcGVyOworCXN0cnVjdCBkbV9pb19jbGllbnQgKmNsaWVudDsKIAlpb19ub3RpZnlfZm4gY2FsbGJhY2s7CiAJdm9pZCAqY29udGV4dDsKIH07CkBAIC0yNiw2MyArMzEsNTggQEAKIC8qCiAgKiBpbyBjb250ZXh0cyBhcmUgb25seSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZm9yIGFzeW5jaHJvbm91cwogICogaW8uICBTaW5jZSBhc3luYyBpbyBpcyBsaWtlbHkgdG8gYmUgdGhlIG1ham9yaXR5IG9mIGlvIHdlJ2xsCi0gKiBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBpbyBjb250ZXh0cyBhcyBidWZmZXIgaGVhZHMgISAoRklYTUU6Ci0gKiBtdXN0IHJlZHVjZSB0aGlzKS4KKyAqIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGlvIGNvbnRleHRzIGFzIGJpb3MhIChGSVhNRTogbXVzdCByZWR1Y2UgdGhpcykuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBfbnVtX2lvczsKLXN0YXRpYyBtZW1wb29sX3QgKl9pb19wb29sOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBhZ2VzX3RvX2lvcyh1bnNpZ25lZCBpbnQgcGFnZXMpCiB7CiAJcmV0dXJuIDQgKiBwYWdlczsJLyogdG9vIG1hbnkgPyAqLwogfQogCi1zdGF0aWMgaW50IHJlc2l6ZV9wb29sKHVuc2lnbmVkIGludCBuZXdfaW9zKQorLyoKKyAqIENyZWF0ZSBhIGNsaWVudCB3aXRoIG1lbXBvb2wgYW5kIGJpb3NldC4KKyAqLworc3RydWN0IGRtX2lvX2NsaWVudCAqZG1faW9fY2xpZW50X2NyZWF0ZSh1bnNpZ25lZCBudW1fcGFnZXMpCiB7Ci0JaW50IHIgPSAwOworCXVuc2lnbmVkIGlvcyA9IHBhZ2VzX3RvX2lvcyhudW1fcGFnZXMpOworCXN0cnVjdCBkbV9pb19jbGllbnQgKmNsaWVudDsKIAotCWlmIChfaW9fcG9vbCkgewotCQlpZiAobmV3X2lvcyA9PSAwKSB7Ci0JCQkvKiBmcmVlIG9mZiB0aGUgcG9vbCAqLwotCQkJbWVtcG9vbF9kZXN0cm95KF9pb19wb29sKTsKLQkJCV9pb19wb29sID0gTlVMTDsKLQkJCWJpb3NldF9mcmVlKF9iaW9zKTsKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbGllbnQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JCX0gZWxzZSB7Ci0JCQkvKiByZXNpemUgdGhlIHBvb2wgKi8KLQkJCXIgPSBtZW1wb29sX3Jlc2l6ZShfaW9fcG9vbCwgbmV3X2lvcywgR0ZQX0tFUk5FTCk7Ci0JCX0KKwljbGllbnQtPnBvb2wgPSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Bvb2woaW9zLCBzaXplb2Yoc3RydWN0IGlvKSk7CisJaWYgKCFjbGllbnQtPnBvb2wpCisJCWdvdG8gYmFkOwogCi0JfSBlbHNlIHsKLQkJLyogY3JlYXRlIG5ldyBwb29sICovCi0JCV9pb19wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKG5ld19pb3MsCi0JCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbykpOwotCQlpZiAoIV9pb19wb29sKQotCQkJcmV0dXJuIC1FTk9NRU07CisJY2xpZW50LT5iaW9zID0gYmlvc2V0X2NyZWF0ZSgxNiwgMTYpOworCWlmICghY2xpZW50LT5iaW9zKQorCQlnb3RvIGJhZDsKIAotCQlfYmlvcyA9IGJpb3NldF9jcmVhdGUoMTYsIDE2KTsKLQkJaWYgKCFfYmlvcykgewotCQkJbWVtcG9vbF9kZXN0cm95KF9pb19wb29sKTsKLQkJCV9pb19wb29sID0gTlVMTDsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQorCXJldHVybiBjbGllbnQ7CiAKLQlpZiAoIXIpCi0JCV9udW1faW9zID0gbmV3X2lvczsKLQotCXJldHVybiByOworICAgYmFkOgorCWlmIChjbGllbnQtPnBvb2wpCisJCW1lbXBvb2xfZGVzdHJveShjbGllbnQtPnBvb2wpOworCWtmcmVlKGNsaWVudCk7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CitFWFBPUlRfU1lNQk9MKGRtX2lvX2NsaWVudF9jcmVhdGUpOwogCi1pbnQgZG1faW9fZ2V0KHVuc2lnbmVkIGludCBudW1fcGFnZXMpCitpbnQgZG1faW9fY2xpZW50X3Jlc2l6ZSh1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCBkbV9pb19jbGllbnQgKmNsaWVudCkKIHsKLQlyZXR1cm4gcmVzaXplX3Bvb2woX251bV9pb3MgKyBwYWdlc190b19pb3MobnVtX3BhZ2VzKSk7CisJcmV0dXJuIG1lbXBvb2xfcmVzaXplKGNsaWVudC0+cG9vbCwgcGFnZXNfdG9faW9zKG51bV9wYWdlcyksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKIH0KK0VYUE9SVF9TWU1CT0woZG1faW9fY2xpZW50X3Jlc2l6ZSk7CiAKLXZvaWQgZG1faW9fcHV0KHVuc2lnbmVkIGludCBudW1fcGFnZXMpCit2b2lkIGRtX2lvX2NsaWVudF9kZXN0cm95KHN0cnVjdCBkbV9pb19jbGllbnQgKmNsaWVudCkKIHsKLQlyZXNpemVfcG9vbChfbnVtX2lvcyAtIHBhZ2VzX3RvX2lvcyhudW1fcGFnZXMpKTsKKwltZW1wb29sX2Rlc3Ryb3koY2xpZW50LT5wb29sKTsKKwliaW9zZXRfZnJlZShjbGllbnQtPmJpb3MpOworCWtmcmVlKGNsaWVudCk7CiB9CitFWFBPUlRfU1lNQk9MKGRtX2lvX2NsaWVudF9kZXN0cm95KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogV2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIHJlZ2lvbiBhIGJpbyBpcyBkb2luZyBpbyBmb3IuCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJCWlvX25vdGlmeV9mbiBmbiA9IGlvLT5jYWxsYmFjazsKIAkJCXZvaWQgKmNvbnRleHQgPSBpby0+Y29udGV4dDsKIAotCQkJbWVtcG9vbF9mcmVlKGlvLCBfaW9fcG9vbCk7CisJCQltZW1wb29sX2ZyZWUoaW8sIGlvLT5jbGllbnQtPnBvb2wpOwogCQkJZm4ociwgY29udGV4dCk7CiAJCX0KIAl9CkBAIC0xMjYsNyArMTI2LDggQEAKIAogc3RhdGljIGludCBlbmRpbyhzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBkb25lLCBpbnQgZXJyb3IpCiB7Ci0Jc3RydWN0IGlvICppbyA9IChzdHJ1Y3QgaW8gKikgYmlvLT5iaV9wcml2YXRlOworCXN0cnVjdCBpbyAqaW87CisJdW5zaWduZWQgcmVnaW9uOwogCiAJLyoga2VlcCBnb2luZyB1bnRpbCB3ZSd2ZSBmaW5pc2hlZCAqLwogCWlmIChiaW8tPmJpX3NpemUpCkBAIC0xMzUsMTAgKzEzNiwxNyBAQAogCWlmIChlcnJvciAmJiBiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKQogCQl6ZXJvX2ZpbGxfYmlvKGJpbyk7CiAKLQlkZWNfY291bnQoaW8sIGJpb19nZXRfcmVnaW9uKGJpbyksIGVycm9yKTsKKwkvKgorCSAqIFRoZSBiaW8gZGVzdHJ1Y3RvciBpbiBiaW9fcHV0KCkgbWF5IHVzZSB0aGUgaW8gb2JqZWN0LgorCSAqLworCWlvID0gYmlvLT5iaV9wcml2YXRlOworCXJlZ2lvbiA9IGJpb19nZXRfcmVnaW9uKGJpbyk7CisKIAliaW8tPmJpX21heF92ZWNzKys7CiAJYmlvX3B1dChiaW8pOwogCisJZGVjX2NvdW50KGlvLCByZWdpb24sIGVycm9yKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMDksNiArMjE3LDkgQEAKIAlkcC0+Y29udGV4dF9wdHIgPSBidmVjOwogfQogCisvKgorICogRnVuY3Rpb25zIGZvciBnZXR0aW5nIHRoZSBwYWdlcyBmcm9tIGEgVk1BLgorICovCiBzdGF0aWMgdm9pZCB2bV9nZXRfcGFnZShzdHJ1Y3QgZHBhZ2VzICpkcCwKIAkJIHN0cnVjdCBwYWdlICoqcCwgdW5zaWduZWQgbG9uZyAqbGVuLCB1bnNpZ25lZCAqb2Zmc2V0KQogewpAQCAtMjMzLDcgKzI0NCwzNCBAQAogCiBzdGF0aWMgdm9pZCBkbV9iaW9fZGVzdHJ1Y3RvcihzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JYmlvX2ZyZWUoYmlvLCBfYmlvcyk7CisJc3RydWN0IGlvICppbyA9IGJpby0+YmlfcHJpdmF0ZTsKKworCWJpb19mcmVlKGJpbywgaW8tPmNsaWVudC0+Ymlvcyk7Cit9CisKKy8qCisgKiBGdW5jdGlvbnMgZm9yIGdldHRpbmcgdGhlIHBhZ2VzIGZyb20ga2VybmVsIG1lbW9yeS4KKyAqLworc3RhdGljIHZvaWQga21fZ2V0X3BhZ2Uoc3RydWN0IGRwYWdlcyAqZHAsIHN0cnVjdCBwYWdlICoqcCwgdW5zaWduZWQgbG9uZyAqbGVuLAorCQkJdW5zaWduZWQgKm9mZnNldCkKK3sKKwkqcCA9IHZpcnRfdG9fcGFnZShkcC0+Y29udGV4dF9wdHIpOworCSpvZmZzZXQgPSBkcC0+Y29udGV4dF91OworCSpsZW4gPSBQQUdFX1NJWkUgLSBkcC0+Y29udGV4dF91OworfQorCitzdGF0aWMgdm9pZCBrbV9uZXh0X3BhZ2Uoc3RydWN0IGRwYWdlcyAqZHApCit7CisJZHAtPmNvbnRleHRfcHRyICs9IFBBR0VfU0laRSAtIGRwLT5jb250ZXh0X3U7CisJZHAtPmNvbnRleHRfdSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGttX2RwX2luaXQoc3RydWN0IGRwYWdlcyAqZHAsIHZvaWQgKmRhdGEpCit7CisJZHAtPmdldF9wYWdlID0ga21fZ2V0X3BhZ2U7CisJZHAtPm5leHRfcGFnZSA9IGttX25leHRfcGFnZTsKKwlkcC0+Y29udGV4dF91ID0gKCh1bnNpZ25lZCBsb25nKSBkYXRhKSAmIChQQUdFX1NJWkUgLSAxKTsKKwlkcC0+Y29udGV4dF9wdHIgPSBkYXRhOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNTYsNyArMjk0LDcgQEAKIAkJICogdG8gaGlkZSBpdCBmcm9tIGJpb19hZGRfcGFnZSgpLgogCQkgKi8KIAkJbnVtX2J2ZWNzID0gKHJlbWFpbmluZyAvIChQQUdFX1NJWkUgPj4gU0VDVE9SX1NISUZUKSkgKyAyOwotCQliaW8gPSBiaW9fYWxsb2NfYmlvc2V0KEdGUF9OT0lPLCBudW1fYnZlY3MsIF9iaW9zKTsKKwkJYmlvID0gYmlvX2FsbG9jX2Jpb3NldChHRlBfTk9JTywgbnVtX2J2ZWNzLCBpby0+Y2xpZW50LT5iaW9zKTsKIAkJYmlvLT5iaV9zZWN0b3IgPSB3aGVyZS0+c2VjdG9yICsgKHdoZXJlLT5jb3VudCAtIHJlbWFpbmluZyk7CiAJCWJpby0+YmlfYmRldiA9IHdoZXJlLT5iZGV2OwogCQliaW8tPmJpX2VuZF9pbyA9IGVuZGlvOwpAQCAtMzExLDggKzM0OSw5IEBACiAJZGVjX2NvdW50KGlvLCAwLCAwKTsKIH0KIAotc3RhdGljIGludCBzeW5jX2lvKHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywgc3RydWN0IGlvX3JlZ2lvbiAqd2hlcmUsCi0JICAgIGludCBydywgc3RydWN0IGRwYWdlcyAqZHAsIHVuc2lnbmVkIGxvbmcgKmVycm9yX2JpdHMpCitzdGF0aWMgaW50IHN5bmNfaW8oc3RydWN0IGRtX2lvX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgbnVtX3JlZ2lvbnMsCisJCSAgIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLCBpbnQgcncsIHN0cnVjdCBkcGFnZXMgKmRwLAorCQkgICB1bnNpZ25lZCBsb25nICplcnJvcl9iaXRzKQogewogCXN0cnVjdCBpbyBpbzsKIApAQCAtMzI0LDYgKzM2Myw3IEBACiAJaW8uZXJyb3IgPSAwOwogCWF0b21pY19zZXQoJmlvLmNvdW50LCAxKTsgLyogc2VlIGRpc3BhdGNoX2lvKCkgKi8KIAlpby5zbGVlcGVyID0gY3VycmVudDsKKwlpby5jbGllbnQgPSBjbGllbnQ7CiAKIAlkaXNwYXRjaF9pbyhydywgbnVtX3JlZ2lvbnMsIHdoZXJlLCBkcCwgJmlvLCAxKTsKIApAQCAtMzQwLDEyICszODAsMTUgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmlvLmNvdW50KSkKIAkJcmV0dXJuIC1FSU5UUjsKIAotCSplcnJvcl9iaXRzID0gaW8uZXJyb3I7CisJaWYgKGVycm9yX2JpdHMpCisJCSplcnJvcl9iaXRzID0gaW8uZXJyb3I7CisKIAlyZXR1cm4gaW8uZXJyb3IgPyAtRUlPIDogMDsKIH0KIAotc3RhdGljIGludCBhc3luY19pbyh1bnNpZ25lZCBpbnQgbnVtX3JlZ2lvbnMsIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLCBpbnQgcncsCi0JICAgICBzdHJ1Y3QgZHBhZ2VzICpkcCwgaW9fbm90aWZ5X2ZuIGZuLCB2b2lkICpjb250ZXh0KQorc3RhdGljIGludCBhc3luY19pbyhzdHJ1Y3QgZG1faW9fY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywKKwkJICAgIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLCBpbnQgcncsIHN0cnVjdCBkcGFnZXMgKmRwLAorCQkgICAgaW9fbm90aWZ5X2ZuIGZuLCB2b2lkICpjb250ZXh0KQogewogCXN0cnVjdCBpbyAqaW87CiAKQEAgLTM1NSwxMCArMzk4LDExIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWlvID0gbWVtcG9vbF9hbGxvYyhfaW9fcG9vbCwgR0ZQX05PSU8pOworCWlvID0gbWVtcG9vbF9hbGxvYyhjbGllbnQtPnBvb2wsIEdGUF9OT0lPKTsKIAlpby0+ZXJyb3IgPSAwOwogCWF0b21pY19zZXQoJmlvLT5jb3VudCwgMSk7IC8qIHNlZSBkaXNwYXRjaF9pbygpICovCiAJaW8tPnNsZWVwZXIgPSBOVUxMOworCWlvLT5jbGllbnQgPSBjbGllbnQ7CiAJaW8tPmNhbGxiYWNrID0gZm47CiAJaW8tPmNvbnRleHQgPSBjb250ZXh0OwogCkBAIC0zNjYsNjEgKzQxMCw1MSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZG1faW9fc3luYyh1bnNpZ25lZCBpbnQgbnVtX3JlZ2lvbnMsIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLCBpbnQgcncsCi0JICAgICAgIHN0cnVjdCBwYWdlX2xpc3QgKnBsLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAotCSAgICAgICB1bnNpZ25lZCBsb25nICplcnJvcl9iaXRzKQorc3RhdGljIGludCBkcF9pbml0KHN0cnVjdCBkbV9pb19yZXF1ZXN0ICppb19yZXEsIHN0cnVjdCBkcGFnZXMgKmRwKQogewotCXN0cnVjdCBkcGFnZXMgZHA7Ci0JbGlzdF9kcF9pbml0KCZkcCwgcGwsIG9mZnNldCk7Ci0JcmV0dXJuIHN5bmNfaW8obnVtX3JlZ2lvbnMsIHdoZXJlLCBydywgJmRwLCBlcnJvcl9iaXRzKTsKKwkvKiBTZXQgdXAgZHBhZ2VzIGJhc2VkIG9uIG1lbW9yeSB0eXBlICovCisJc3dpdGNoIChpb19yZXEtPm1lbS50eXBlKSB7CisJY2FzZSBETV9JT19QQUdFX0xJU1Q6CisJCWxpc3RfZHBfaW5pdChkcCwgaW9fcmVxLT5tZW0ucHRyLnBsLCBpb19yZXEtPm1lbS5vZmZzZXQpOworCQlicmVhazsKKworCWNhc2UgRE1fSU9fQlZFQzoKKwkJYnZlY19kcF9pbml0KGRwLCBpb19yZXEtPm1lbS5wdHIuYnZlYyk7CisJCWJyZWFrOworCisJY2FzZSBETV9JT19WTUE6CisJCXZtX2RwX2luaXQoZHAsIGlvX3JlcS0+bWVtLnB0ci52bWEpOworCQlicmVhazsKKworCWNhc2UgRE1fSU9fS01FTToKKwkJa21fZHBfaW5pdChkcCwgaW9fcmVxLT5tZW0ucHRyLmFkZHIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOwogfQogCi1pbnQgZG1faW9fc3luY19idmVjKHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywgc3RydWN0IGlvX3JlZ2lvbiAqd2hlcmUsIGludCBydywKLQkJICAgIHN0cnVjdCBiaW9fdmVjICpidmVjLCB1bnNpZ25lZCBsb25nICplcnJvcl9iaXRzKQorLyoKKyAqIE5ldyBjb2xsYXBzZWQgKGEpc3luY2hyb25vdXMgaW50ZXJmYWNlCisgKi8KK2ludCBkbV9pbyhzdHJ1Y3QgZG1faW9fcmVxdWVzdCAqaW9fcmVxLCB1bnNpZ25lZCBudW1fcmVnaW9ucywKKwkgIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLCB1bnNpZ25lZCBsb25nICpzeW5jX2Vycm9yX2JpdHMpCiB7CisJaW50IHI7CiAJc3RydWN0IGRwYWdlcyBkcDsKLQlidmVjX2RwX2luaXQoJmRwLCBidmVjKTsKLQlyZXR1cm4gc3luY19pbyhudW1fcmVnaW9ucywgd2hlcmUsIHJ3LCAmZHAsIGVycm9yX2JpdHMpOwotfQogCi1pbnQgZG1faW9fc3luY192bSh1bnNpZ25lZCBpbnQgbnVtX3JlZ2lvbnMsIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLCBpbnQgcncsCi0JCSAgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyAqZXJyb3JfYml0cykKLXsKLQlzdHJ1Y3QgZHBhZ2VzIGRwOwotCXZtX2RwX2luaXQoJmRwLCBkYXRhKTsKLQlyZXR1cm4gc3luY19pbyhudW1fcmVnaW9ucywgd2hlcmUsIHJ3LCAmZHAsIGVycm9yX2JpdHMpOwotfQorCXIgPSBkcF9pbml0KGlvX3JlcSwgJmRwKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CiAKLWludCBkbV9pb19hc3luYyh1bnNpZ25lZCBpbnQgbnVtX3JlZ2lvbnMsIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLCBpbnQgcncsCi0JCXN0cnVjdCBwYWdlX2xpc3QgKnBsLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAotCQlpb19ub3RpZnlfZm4gZm4sIHZvaWQgKmNvbnRleHQpCi17Ci0Jc3RydWN0IGRwYWdlcyBkcDsKLQlsaXN0X2RwX2luaXQoJmRwLCBwbCwgb2Zmc2V0KTsKLQlyZXR1cm4gYXN5bmNfaW8obnVtX3JlZ2lvbnMsIHdoZXJlLCBydywgJmRwLCBmbiwgY29udGV4dCk7Ci19CisJaWYgKCFpb19yZXEtPm5vdGlmeS5mbikKKwkJcmV0dXJuIHN5bmNfaW8oaW9fcmVxLT5jbGllbnQsIG51bV9yZWdpb25zLCB3aGVyZSwKKwkJCSAgICAgICBpb19yZXEtPmJpX3J3LCAmZHAsIHN5bmNfZXJyb3JfYml0cyk7CiAKLWludCBkbV9pb19hc3luY19idmVjKHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywgc3RydWN0IGlvX3JlZ2lvbiAqd2hlcmUsIGludCBydywKLQkJICAgICBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgaW9fbm90aWZ5X2ZuIGZuLCB2b2lkICpjb250ZXh0KQotewotCXN0cnVjdCBkcGFnZXMgZHA7Ci0JYnZlY19kcF9pbml0KCZkcCwgYnZlYyk7Ci0JcmV0dXJuIGFzeW5jX2lvKG51bV9yZWdpb25zLCB3aGVyZSwgcncsICZkcCwgZm4sIGNvbnRleHQpOworCXJldHVybiBhc3luY19pbyhpb19yZXEtPmNsaWVudCwgbnVtX3JlZ2lvbnMsIHdoZXJlLCBpb19yZXEtPmJpX3J3LAorCQkJJmRwLCBpb19yZXEtPm5vdGlmeS5mbiwgaW9fcmVxLT5ub3RpZnkuY29udGV4dCk7CiB9Ci0KLWludCBkbV9pb19hc3luY192bSh1bnNpZ25lZCBpbnQgbnVtX3JlZ2lvbnMsIHN0cnVjdCBpb19yZWdpb24gKndoZXJlLCBpbnQgcncsCi0JCSAgIHZvaWQgKmRhdGEsIGlvX25vdGlmeV9mbiBmbiwgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgZHBhZ2VzIGRwOwotCXZtX2RwX2luaXQoJmRwLCBkYXRhKTsKLQlyZXR1cm4gYXN5bmNfaW8obnVtX3JlZ2lvbnMsIHdoZXJlLCBydywgJmRwLCBmbiwgY29udGV4dCk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZG1faW9fZ2V0KTsKLUVYUE9SVF9TWU1CT0woZG1faW9fcHV0KTsKLUVYUE9SVF9TWU1CT0woZG1faW9fc3luYyk7Ci1FWFBPUlRfU1lNQk9MKGRtX2lvX2FzeW5jKTsKLUVYUE9SVF9TWU1CT0woZG1faW9fc3luY19idmVjKTsKLUVYUE9SVF9TWU1CT0woZG1faW9fYXN5bmNfYnZlYyk7Ci1FWFBPUlRfU1lNQk9MKGRtX2lvX3N5bmNfdm0pOwotRVhQT1JUX1NZTUJPTChkbV9pb19hc3luY192bSk7CitFWFBPUlRfU1lNQk9MKGRtX2lvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW8uaCBiL2RyaXZlcnMvbWQvZG0taW8uaAppbmRleCBmOTAzNWJmLi5mNjQ3ZTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvLmgKKysrIGIvZHJpdmVycy9tZC9kbS1pby5oCkBAIC0xMiw3ICsxMiw3IEBACiBzdHJ1Y3QgaW9fcmVnaW9uIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwogCXNlY3Rvcl90IHNlY3RvcjsKLQlzZWN0b3JfdCBjb3VudDsKKwlzZWN0b3JfdCBjb3VudDsJCS8qIElmIHRoaXMgaXMgemVybyB0aGUgcmVnaW9uIGlzIGlnbm9yZWQuICovCiB9OwogCiBzdHJ1Y3QgcGFnZV9saXN0IHsKQEAgLTIwLDU1ICsyMCw2MCBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogfTsKIAotCi0vKgotICogJ2Vycm9yJyBpcyBhIGJpdHNldCwgd2l0aCBlYWNoIGJpdCBpbmRpY2F0aW5nIHdoZXRoZXIgYW4gZXJyb3IKLSAqIG9jY3VycmVkIGRvaW5nIGlvIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lvbi4KLSAqLwogdHlwZWRlZiB2b2lkICgqaW9fbm90aWZ5X2ZuKSh1bnNpZ25lZCBsb25nIGVycm9yLCB2b2lkICpjb250ZXh0KTsKIAorZW51bSBkbV9pb19tZW1fdHlwZSB7CisJRE1fSU9fUEFHRV9MSVNULC8qIFBhZ2UgbGlzdCAqLworCURNX0lPX0JWRUMsCS8qIEJpbyB2ZWN0b3IgKi8KKwlETV9JT19WTUEsCS8qIFZpcnR1YWwgbWVtb3J5IGFyZWEgKi8KKwlETV9JT19LTUVNLAkvKiBLZXJuZWwgbWVtb3J5ICovCit9OworCitzdHJ1Y3QgZG1faW9fbWVtb3J5IHsKKwllbnVtIGRtX2lvX21lbV90eXBlIHR5cGU7CisKKwl1bmlvbiB7CisJCXN0cnVjdCBwYWdlX2xpc3QgKnBsOworCQlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKKwkJdm9pZCAqdm1hOworCQl2b2lkICphZGRyOworCX0gcHRyOworCisJdW5zaWduZWQgb2Zmc2V0OworfTsKKworc3RydWN0IGRtX2lvX25vdGlmeSB7CisJaW9fbm90aWZ5X2ZuIGZuOwkvKiBDYWxsYmFjayBmb3IgYXN5bmNocm9ub3VzIHJlcXVlc3RzICovCisJdm9pZCAqY29udGV4dDsJCS8qIFBhc3NlZCB0byBjYWxsYmFjayAqLworfTsKIAogLyoKLSAqIEJlZm9yZSBhbnlvbmUgdXNlcyB0aGUgSU8gaW50ZXJmYWNlIHRoZXkgc2hvdWxkIGNhbGwKLSAqIGRtX2lvX2dldCgpLCBzcGVjaWZ5aW5nIHJvdWdobHkgaG93IG1hbnkgcGFnZXMgdGhleSBhcmUKLSAqIGV4cGVjdGluZyB0byBwZXJmb3JtIGlvIG9uIGNvbmN1cnJlbnRseS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG1heSBibG9jay4KKyAqIElPIHJlcXVlc3Qgc3RydWN0dXJlCiAgKi8KLWludCBkbV9pb19nZXQodW5zaWduZWQgaW50IG51bV9wYWdlcyk7Ci12b2lkIGRtX2lvX3B1dCh1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzKTsKK3N0cnVjdCBkbV9pb19jbGllbnQ7CitzdHJ1Y3QgZG1faW9fcmVxdWVzdCB7CisJaW50IGJpX3J3OwkJCS8qIFJFQUR8V1JJVEUgLSBub3QgUkVBREEgKi8KKwlzdHJ1Y3QgZG1faW9fbWVtb3J5IG1lbTsJLyogTWVtb3J5IHRvIHVzZSBmb3IgaW8gKi8KKwlzdHJ1Y3QgZG1faW9fbm90aWZ5IG5vdGlmeTsJLyogU3luY2hyb25vdXMgaWYgbm90aWZ5LmZuIGlzIE5VTEwgKi8KKwlzdHJ1Y3QgZG1faW9fY2xpZW50ICpjbGllbnQ7CS8qIENsaWVudCBtZW1vcnkgaGFuZGxlciAqLworfTsKIAogLyoKLSAqIFN5bmNocm9ub3VzIElPLgorICogRm9yIGFzeW5jIGlvIGNhbGxzLCB1c2VycyBjYW4gYWx0ZXJuYXRpdmVseSB1c2UgdGhlIGRtX2lvKCkgZnVuY3Rpb24gYmVsb3cKKyAqIGFuZCBkbV9pb19jbGllbnRfY3JlYXRlKCkgdG8gY3JlYXRlIHByaXZhdGUgbWVtcG9vbHMgZm9yIHRoZSBjbGllbnQuCiAgKgotICogUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBydyBmbGFnIGluIHRoZSBuZXh0IHR3byBmdW5jdGlvbnMgaXMKLSAqIGVpdGhlciBSRUFEIG9yIFdSSVRFLCBpZS4gd2UgZG9uJ3QgdGFrZSBSRUFEQS4gIEFueQotICogcmVnaW9ucyB3aXRoIGEgemVybyBjb3VudCBmaWVsZCB3aWxsIGJlIGlnbm9yZWQuCisgKiBDcmVhdGUvZGVzdHJveSBtYXkgYmxvY2suCiAgKi8KLWludCBkbV9pb19zeW5jKHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywgc3RydWN0IGlvX3JlZ2lvbiAqd2hlcmUsIGludCBydywKLQkgICAgICAgc3RydWN0IHBhZ2VfbGlzdCAqcGwsIHVuc2lnbmVkIGludCBvZmZzZXQsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgKmVycm9yX2JpdHMpOwotCi1pbnQgZG1faW9fc3luY19idmVjKHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywgc3RydWN0IGlvX3JlZ2lvbiAqd2hlcmUsIGludCBydywKLQkJICAgIHN0cnVjdCBiaW9fdmVjICpidmVjLCB1bnNpZ25lZCBsb25nICplcnJvcl9iaXRzKTsKLQotaW50IGRtX2lvX3N5bmNfdm0odW5zaWduZWQgaW50IG51bV9yZWdpb25zLCBzdHJ1Y3QgaW9fcmVnaW9uICp3aGVyZSwgaW50IHJ3LAotCQkgIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgKmVycm9yX2JpdHMpOworc3RydWN0IGRtX2lvX2NsaWVudCAqZG1faW9fY2xpZW50X2NyZWF0ZSh1bnNpZ25lZCBudW1fcGFnZXMpOworaW50IGRtX2lvX2NsaWVudF9yZXNpemUodW5zaWduZWQgbnVtX3BhZ2VzLCBzdHJ1Y3QgZG1faW9fY2xpZW50ICpjbGllbnQpOwordm9pZCBkbV9pb19jbGllbnRfZGVzdHJveShzdHJ1Y3QgZG1faW9fY2xpZW50ICpjbGllbnQpOwogCiAvKgotICogQXluY2hyb25vdXMgSU8uCi0gKgotICogVGhlICd3aGVyZScgYXJyYXkgbWF5IGJlIHNhZmVseSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIHNpbmNlCi0gKiB0aGUgZnVuY3Rpb24gdGFrZXMgYSBjb3B5LgorICogSU8gaW50ZXJmYWNlIHVzaW5nIHByaXZhdGUgcGVyLWNsaWVudCBwb29scy4KKyAqIEVhY2ggYml0IGluIHRoZSBvcHRpb25hbCAnc3luY19lcnJvcl9iaXRzJyBiaXRzZXQgaW5kaWNhdGVzIHdoZXRoZXIgYW4KKyAqIGVycm9yIG9jY3VycmVkIGRvaW5nIGlvIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lvbi4KICAqLwotaW50IGRtX2lvX2FzeW5jKHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywgc3RydWN0IGlvX3JlZ2lvbiAqd2hlcmUsIGludCBydywKLQkJc3RydWN0IHBhZ2VfbGlzdCAqcGwsIHVuc2lnbmVkIGludCBvZmZzZXQsCi0JCWlvX25vdGlmeV9mbiBmbiwgdm9pZCAqY29udGV4dCk7Ci0KLWludCBkbV9pb19hc3luY19idmVjKHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywgc3RydWN0IGlvX3JlZ2lvbiAqd2hlcmUsIGludCBydywKLQkJICAgICBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgaW9fbm90aWZ5X2ZuIGZuLCB2b2lkICpjb250ZXh0KTsKLQotaW50IGRtX2lvX2FzeW5jX3ZtKHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywgc3RydWN0IGlvX3JlZ2lvbiAqd2hlcmUsIGludCBydywKLQkJICAgdm9pZCAqZGF0YSwgaW9fbm90aWZ5X2ZuIGZuLCB2b2lkICpjb250ZXh0KTsKK2ludCBkbV9pbyhzdHJ1Y3QgZG1faW9fcmVxdWVzdCAqaW9fcmVxLCB1bnNpZ25lZCBudW1fcmVnaW9ucywKKwkgIHN0cnVjdCBpb19yZWdpb24gKnJlZ2lvbiwgdW5zaWduZWQgbG9uZyAqc3luY19lcnJvcl9iaXRzKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWxvZy5jIGIvZHJpdmVycy9tZC9kbS1sb2cuYwppbmRleCA2YTkyNjEzLi5hNjY0MjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWxvZy5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbG9nLmMKQEAgLTE0OSw5ICsxNDksMTIgQEAKIAkJRk9SQ0VTWU5DLAkvKiBGb3JjZSBhIHN5bmMgdG8gaGFwcGVuICovCiAJfSBzeW5jOwogCisJc3RydWN0IGRtX2lvX3JlcXVlc3QgaW9fcmVxOworCiAJLyoKIAkgKiBEaXNrIGxvZyBmaWVsZHMKIAkgKi8KKwlpbnQgbG9nX2Rldl9mYWlsZWQ7CiAJc3RydWN0IGRtX2RldiAqbG9nX2RldjsKIAlzdHJ1Y3QgbG9nX2hlYWRlciBoZWFkZXI7CiAKQEAgLTE5OSwxMyArMjAyLDIwIEBACiAJY29yZS0+bnJfcmVnaW9ucyA9IGxlNjRfdG9fY3B1KGRpc2stPm5yX3JlZ2lvbnMpOwogfQogCitzdGF0aWMgaW50IHJ3X2hlYWRlcihzdHJ1Y3QgbG9nX2MgKmxjLCBpbnQgcncpCit7CisJbGMtPmlvX3JlcS5iaV9ydyA9IHJ3OworCWxjLT5pb19yZXEubWVtLnB0ci52bWEgPSBsYy0+ZGlza19oZWFkZXI7CisJbGMtPmlvX3JlcS5ub3RpZnkuZm4gPSBOVUxMOworCisJcmV0dXJuIGRtX2lvKCZsYy0+aW9fcmVxLCAxLCAmbGMtPmhlYWRlcl9sb2NhdGlvbiwgTlVMTCk7Cit9CisKIHN0YXRpYyBpbnQgcmVhZF9oZWFkZXIoc3RydWN0IGxvZ19jICpsb2cpCiB7CiAJaW50IHI7Ci0JdW5zaWduZWQgbG9uZyBlYml0czsKIAotCXIgPSBkbV9pb19zeW5jX3ZtKDEsICZsb2ctPmhlYWRlcl9sb2NhdGlvbiwgUkVBRCwKLQkJCSAgbG9nLT5kaXNrX2hlYWRlciwgJmViaXRzKTsKKwlyID0gcndfaGVhZGVyKGxvZywgUkVBRCk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC0yMzMsMTEgKzI0Myw4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHdyaXRlX2hlYWRlcihzdHJ1Y3QgbG9nX2MgKmxvZykKIHsKLQl1bnNpZ25lZCBsb25nIGViaXRzOwotCiAJaGVhZGVyX3RvX2Rpc2soJmxvZy0+aGVhZGVyLCBsb2ctPmRpc2tfaGVhZGVyKTsKLQlyZXR1cm4gZG1faW9fc3luY192bSgxLCAmbG9nLT5oZWFkZXJfbG9jYXRpb24sIFdSSVRFLAotCQkJICAgICBsb2ctPmRpc2tfaGVhZGVyLCAmZWJpdHMpOworCXJldHVybiByd19oZWFkZXIobG9nLCBXUklURSk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjU2LDYgKzI2Myw3IEBACiAJdWludDMyX3QgcmVnaW9uX3NpemU7CiAJdW5zaWduZWQgaW50IHJlZ2lvbl9jb3VudDsKIAlzaXplX3QgYml0c2V0X3NpemUsIGJ1Zl9zaXplOworCWludCByOwogCiAJaWYgKGFyZ2MgPCAxIHx8IGFyZ2MgPiAyKSB7CiAJCURNV0FSTigid3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBtaXJyb3IgbG9nIik7CkBAIC0zMTUsNiArMzIzLDcgQEAKIAkJbGMtPmRpc2tfaGVhZGVyID0gTlVMTDsKIAl9IGVsc2UgewogCQlsYy0+bG9nX2RldiA9IGRldjsKKwkJbGMtPmxvZ19kZXZfZmFpbGVkID0gMDsKIAkJbGMtPmhlYWRlcl9sb2NhdGlvbi5iZGV2ID0gbGMtPmxvZ19kZXYtPmJkZXY7CiAJCWxjLT5oZWFkZXJfbG9jYXRpb24uc2VjdG9yID0gMDsKIApAQCAtMzI0LDYgKzMzMywxNSBAQAogCQlidWZfc2l6ZSA9IGRtX3JvdW5kX3VwKChMT0dfT0ZGU0VUIDw8IFNFQ1RPUl9TSElGVCkgKwogCQkJCSAgICAgICBiaXRzZXRfc2l6ZSwgdGktPmxpbWl0cy5oYXJkc2VjdF9zaXplKTsKIAkJbGMtPmhlYWRlcl9sb2NhdGlvbi5jb3VudCA9IGJ1Zl9zaXplID4+IFNFQ1RPUl9TSElGVDsKKwkJbGMtPmlvX3JlcS5tZW0udHlwZSA9IERNX0lPX1ZNQTsKKwkJbGMtPmlvX3JlcS5jbGllbnQgPSBkbV9pb19jbGllbnRfY3JlYXRlKGRtX2Rpdl91cChidWZfc2l6ZSwKKwkJCQkJCQkJICAgUEFHRV9TSVpFKSk7CisJCWlmIChJU19FUlIobGMtPmlvX3JlcS5jbGllbnQpKSB7CisJCQlyID0gUFRSX0VSUihsYy0+aW9fcmVxLmNsaWVudCk7CisJCQlETVdBUk4oImNvdWxkbid0IGFsbG9jYXRlIGRpc2sgaW8gY2xpZW50Iik7CisJCQlrZnJlZShsYyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCiAJCWxjLT5kaXNrX2hlYWRlciA9IHZtYWxsb2MoYnVmX3NpemUpOwogCQlpZiAoIWxjLT5kaXNrX2hlYWRlcikgewpAQCAtNDI0LDYgKzQ0Miw3IEBACiAKIAlkbV9wdXRfZGV2aWNlKGxjLT50aSwgbGMtPmxvZ19kZXYpOwogCXZmcmVlKGxjLT5kaXNrX2hlYWRlcik7CisJZG1faW9fY2xpZW50X2Rlc3Ryb3kobGMtPmlvX3JlcS5jbGllbnQpOwogCWRlc3Ryb3lfbG9nX2NvbnRleHQobGMpOwogfQogCkBAIC00MzcsNiArNDU2LDE1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgdm9pZCBmYWlsX2xvZ19kZXZpY2Uoc3RydWN0IGxvZ19jICpsYykKK3sKKwlpZiAobGMtPmxvZ19kZXZfZmFpbGVkKQorCQlyZXR1cm47CisKKwlsYy0+bG9nX2Rldl9mYWlsZWQgPSAxOworCWRtX3RhYmxlX2V2ZW50KGxjLT50aS0+dGFibGUpOworfQorCiBzdGF0aWMgaW50IGRpc2tfcmVzdW1lKHN0cnVjdCBkaXJ0eV9sb2cgKmxvZykKIHsKIAlpbnQgcjsKQEAgLTQ0Niw4ICs0NzQsMTkgQEAKIAogCS8qIHJlYWQgdGhlIGRpc2sgaGVhZGVyICovCiAJciA9IHJlYWRfaGVhZGVyKGxjKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJaWYgKHIpIHsKKwkJRE1XQVJOKCIlczogRmFpbGVkIHRvIHJlYWQgaGVhZGVyIG9uIG1pcnJvciBsb2cgZGV2aWNlIiwKKwkJICAgICAgIGxjLT5sb2dfZGV2LT5uYW1lKTsKKwkJZmFpbF9sb2dfZGV2aWNlKGxjKTsKKwkJLyoKKwkJICogSWYgdGhlIGxvZyBkZXZpY2UgY2Fubm90IGJlIHJlYWQsIHdlIG11c3QgYXNzdW1lCisJCSAqIGFsbCByZWdpb25zIGFyZSBvdXQtb2Ytc3luYy4gIElmIHdlIHNpbXBseSByZXR1cm4KKwkJICogaGVyZSwgdGhlIHN0YXRlIHdpbGwgYmUgdW5pbml0aWFsaXplZCBhbmQgY291bGQKKwkJICogbGVhZCB1cyB0byByZXR1cm4gJ2luLXN5bmMnIHN0YXR1cyBmb3IgcmVnaW9ucworCQkgKiB0aGF0IGFyZSBhY3R1YWxseSAnb3V0LW9mLXN5bmMnLgorCQkgKi8KKwkJbGMtPmhlYWRlci5ucl9yZWdpb25zID0gMDsKKwl9CiAKIAkvKiBzZXQgb3IgY2xlYXIgYW55IG5ldyBiaXRzIC0tIGRldmljZSBoYXMgZ3Jvd24gKi8KIAlpZiAobGMtPnN5bmMgPT0gTk9TWU5DKQpAQCAtNDcyLDcgKzUxMSwxNCBAQAogCWxjLT5oZWFkZXIubnJfcmVnaW9ucyA9IGxjLT5yZWdpb25fY291bnQ7CiAKIAkvKiB3cml0ZSB0aGUgbmV3IGhlYWRlciAqLwotCXJldHVybiB3cml0ZV9oZWFkZXIobGMpOworCXIgPSB3cml0ZV9oZWFkZXIobGMpOworCWlmIChyKSB7CisJCURNV0FSTigiJXM6IEZhaWxlZCB0byB3cml0ZSBoZWFkZXIgb24gbWlycm9yIGxvZyBkZXZpY2UiLAorCQkgICAgICAgbGMtPmxvZ19kZXYtPm5hbWUpOworCQlmYWlsX2xvZ19kZXZpY2UobGMpOworCX0KKworCXJldHVybiByOwogfQogCiBzdGF0aWMgdWludDMyX3QgY29yZV9nZXRfcmVnaW9uX3NpemUoc3RydWN0IGRpcnR5X2xvZyAqbG9nKQpAQCAtNTE2LDcgKzU2Miw5IEBACiAJCXJldHVybiAwOwogCiAJciA9IHdyaXRlX2hlYWRlcihsYyk7Ci0JaWYgKCFyKQorCWlmIChyKQorCQlmYWlsX2xvZ19kZXZpY2UobGMpOworCWVsc2UKIAkJbGMtPnRvdWNoZWQgPSAwOwogCiAJcmV0dXJuIHI7CkBAIC01OTEsNiArNjM5LDcgQEAKIAogCXN3aXRjaChzdGF0dXMpIHsKIAljYXNlIFNUQVRVU1RZUEVfSU5GTzoKKwkJRE1FTUlUKCIxICVzIiwgbG9nLT50eXBlLT5uYW1lKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNUQVRVU1RZUEVfVEFCTEU6CkBAIC02MDYsMTcgKzY1NSwxNyBAQAogCQkgICAgICAgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgbWF4bGVuKQogewogCWludCBzeiA9IDA7Ci0JY2hhciBidWZmZXJbMTZdOwogCXN0cnVjdCBsb2dfYyAqbGMgPSBsb2ctPmNvbnRleHQ7CiAKIAlzd2l0Y2goc3RhdHVzKSB7CiAJY2FzZSBTVEFUVVNUWVBFX0lORk86CisJCURNRU1JVCgiMyAlcyAlcyAlYyIsIGxvZy0+dHlwZS0+bmFtZSwgbGMtPmxvZ19kZXYtPm5hbWUsCisJCSAgICAgICBsYy0+bG9nX2Rldl9mYWlsZWQgPyAnRCcgOiAnQScpOwogCQlicmVhazsKIAogCWNhc2UgU1RBVFVTVFlQRV9UQUJMRToKLQkJZm9ybWF0X2Rldl90KGJ1ZmZlciwgbGMtPmxvZ19kZXYtPmJkZXYtPmJkX2Rldik7CiAJCURNRU1JVCgiJXMgJXUgJXMgJXUgIiwgbG9nLT50eXBlLT5uYW1lLAotCQkgICAgICAgbGMtPnN5bmMgPT0gREVGQVVMVFNZTkMgPyAyIDogMywgYnVmZmVyLAorCQkgICAgICAgbGMtPnN5bmMgPT0gREVGQVVMVFNZTkMgPyAyIDogMywgbGMtPmxvZ19kZXYtPm5hbWUsCiAJCSAgICAgICBsYy0+cmVnaW9uX3NpemUpOwogCQlETUVNSVRfU1lOQzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLW1wYXRoLmMgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKaW5kZXggM2FhMDEzNS4uZGU1NGIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbXBhdGguYwpAQCAtNjY4LDYgKzY2OCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCW0tPmh3X2hhbmRsZXIubWQgPSBkbV90YWJsZV9nZXRfbWQodGktPnRhYmxlKTsKKwlkbV9wdXQobS0+aHdfaGFuZGxlci5tZCk7CisKIAlyID0gaHdodC0+Y3JlYXRlKCZtLT5od19oYW5kbGVyLCBod19hcmdjIC0gMSwgYXMtPmFyZ3YpOwogCWlmIChyKSB7CiAJCWRtX3B1dF9od19oYW5kbGVyKGh3aHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCmluZGV4IDIzYTY0MjYuLmVmMTI0YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKQEAgLTIxLDE2ICsyMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjZGVmaW5lIERNX01TR19QUkVGSVggInJhaWQxIgorI2RlZmluZSBETV9JT19QQUdFUyA2NAogCi1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKl9rbWlycm9yZF93cTsKLXN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgX2ttaXJyb3JkX3dvcms7CisjZGVmaW5lIERNX1JBSUQxX0hBTkRMRV9FUlJPUlMgMHgwMQorCiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoX2ttaXJyb3JkX3JlY292ZXJ5X3N0b3BwZWQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FrZSh2b2lkKQotewotCXF1ZXVlX3dvcmsoX2ttaXJyb3JkX3dxLCAmX2ttaXJyb3JkX3dvcmspOwotfQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBSZWdpb24gaGFzaAogICoKQEAgLTEyNSwxNyArMTIxLDIzIEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCByZWdpb25faGFzaCByaDsKIAlzdHJ1Y3Qga2NvcHlkX2NsaWVudCAqa2NvcHlkX2NsaWVudDsKKwl1aW50NjRfdCBmZWF0dXJlczsKIAogCXNwaW5sb2NrX3QgbG9jazsJLyogcHJvdGVjdHMgdGhlIG5leHQgdHdvIGxpc3RzICovCiAJc3RydWN0IGJpb19saXN0IHJlYWRzOwogCXN0cnVjdCBiaW9fbGlzdCB3cml0ZXM7CiAKKwlzdHJ1Y3QgZG1faW9fY2xpZW50ICppb19jbGllbnQ7CisKIAkvKiByZWNvdmVyeSAqLwogCXJlZ2lvbl90IG5yX3JlZ2lvbnM7CiAJaW50IGluX3N5bmM7CiAKIAlzdHJ1Y3QgbWlycm9yICpkZWZhdWx0X21pcnJvcjsJLyogRGVmYXVsdCBtaXJyb3IgKi8KIAorCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprbWlycm9yZF93cTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qga21pcnJvcmRfd29yazsKKwogCXVuc2lnbmVkIGludCBucl9taXJyb3JzOwogCXN0cnVjdCBtaXJyb3IgbWlycm9yWzBdOwogfTsKQEAgLTE1Myw2ICsxNTUsMTEgQEAKIAlyZXR1cm4gcmVnaW9uIDw8IHJoLT5yZWdpb25fc2hpZnQ7CiB9CiAKK3N0YXRpYyB2b2lkIHdha2Uoc3RydWN0IG1pcnJvcl9zZXQgKm1zKQoreworCXF1ZXVlX3dvcmsobXMtPmttaXJyb3JkX3dxLCAmbXMtPmttaXJyb3JkX3dvcmspOworfQorCiAvKiBGSVhNRSBtb3ZlIHRoaXMgKi8KIHN0YXRpYyB2b2lkIHF1ZXVlX2JpbyhzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KTsKIApAQCAtMzk4LDggKzQwNSw3IEBACiAJCW1lbXBvb2xfZnJlZShyZWcsIHJoLT5yZWdpb25fcG9vbCk7CiAJfQogCi0JaWYgKCFsaXN0X2VtcHR5KCZyZWNvdmVyZWQpKQotCQlyaC0+bG9nLT50eXBlLT5mbHVzaChyaC0+bG9nKTsKKwlyaC0+bG9nLT50eXBlLT5mbHVzaChyaC0+bG9nKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSAocmVnLCBuZXh0LCAmY2xlYW4sIGxpc3QpCiAJCW1lbXBvb2xfZnJlZShyZWcsIHJoLT5yZWdpb25fcG9vbCk7CkBAIC00NzEsNyArNDc3LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaC0+cmVnaW9uX2xvY2ssIGZsYWdzKTsKIAogCWlmIChzaG91bGRfd2FrZSkKLQkJd2FrZSgpOworCQl3YWtlKHJoLT5tcyk7CiB9CiAKIC8qCkBAIC01NTgsNyArNTY0LDcgQEAKIAlsaXN0X2FkZCgmcmVnLT5saXN0LCAmcmVnLT5yaC0+cmVjb3ZlcmVkX3JlZ2lvbnMpOwogCXNwaW5fdW5sb2NrX2lycSgmcmgtPnJlZ2lvbl9sb2NrKTsKIAotCXdha2UoKTsKKwl3YWtlKHJoLT5tcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHJoX2ZsdXNoKHN0cnVjdCByZWdpb25faGFzaCAqcmgpCkBAIC01OTIsNyArNTk4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1JFQ09WRVJZOyBpKyspCiAJCXVwKCZyaC0+cmVjb3ZlcnlfY291bnQpOwogCi0Jd2FrZSgpOworCXdha2UocmgtPm1zKTsKIH0KIAogLyoKQEAgLTczNSw3ICs3NDEsNyBAQAogCQkvKgogCQkgKiBXZSBjYW4gb25seSByZWFkIGJhbGFuY2UgaWYgdGhlIHJlZ2lvbiBpcyBpbiBzeW5jLgogCQkgKi8KLQkJaWYgKHJoX2luX3N5bmMoJm1zLT5yaCwgcmVnaW9uLCAwKSkKKwkJaWYgKHJoX2luX3N5bmMoJm1zLT5yaCwgcmVnaW9uLCAxKSkKIAkJCW0gPSBjaG9vc2VfbWlycm9yKG1zLCBiaW8tPmJpX3NlY3Rvcik7CiAJCWVsc2UKIAkJCW0gPSBtcy0+ZGVmYXVsdF9taXJyb3I7CkBAIC03OTIsNiArNzk4LDE0IEBACiAJdW5zaWduZWQgaW50IGk7CiAJc3RydWN0IGlvX3JlZ2lvbiBpb1tLQ09QWURfTUFYX1JFR0lPTlMrMV07CiAJc3RydWN0IG1pcnJvciAqbTsKKwlzdHJ1Y3QgZG1faW9fcmVxdWVzdCBpb19yZXEgPSB7CisJCS5iaV9ydyA9IFdSSVRFLAorCQkubWVtLnR5cGUgPSBETV9JT19CVkVDLAorCQkubWVtLnB0ci5idmVjID0gYmlvLT5iaV9pb192ZWMgKyBiaW8tPmJpX2lkeCwKKwkJLm5vdGlmeS5mbiA9IHdyaXRlX2NhbGxiYWNrLAorCQkubm90aWZ5LmNvbnRleHQgPSBiaW8sCisJCS5jbGllbnQgPSBtcy0+aW9fY2xpZW50LAorCX07CiAKIAlmb3IgKGkgPSAwOyBpIDwgbXMtPm5yX21pcnJvcnM7IGkrKykgewogCQltID0gbXMtPm1pcnJvciArIGk7CkBAIC04MDIsOSArODE2LDggQEAKIAl9CiAKIAliaW9fc2V0X21zKGJpbywgbXMpOwotCWRtX2lvX2FzeW5jX2J2ZWMobXMtPm5yX21pcnJvcnMsIGlvLCBXUklURSwKLQkJCSBiaW8tPmJpX2lvX3ZlYyArIGJpby0+YmlfaWR4LAotCQkJIHdyaXRlX2NhbGxiYWNrLCBiaW8pOworCisJKHZvaWQpIGRtX2lvKCZpb19yZXEsIG1zLT5ucl9taXJyb3JzLCBpbywgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX3dyaXRlcyhzdHJ1Y3QgbWlycm9yX3NldCAqbXMsIHN0cnVjdCBiaW9fbGlzdCAqd3JpdGVzKQpAQCAtODcwLDExICs4ODMsMTAgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIGttaXJyb3JkCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgTElTVF9IRUFEKF9taXJyb3Jfc2V0cyk7Ci1zdGF0aWMgREVDTEFSRV9SV1NFTShfbWlycm9yX3NldHNfbG9jayk7Ci0KLXN0YXRpYyB2b2lkIGRvX21pcnJvcihzdHJ1Y3QgbWlycm9yX3NldCAqbXMpCitzdGF0aWMgdm9pZCBkb19taXJyb3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogeworCXN0cnVjdCBtaXJyb3Jfc2V0ICptcyA9Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtaXJyb3Jfc2V0LAorCQkJCQkgICAga21pcnJvcmRfd29yayk7CiAJc3RydWN0IGJpb19saXN0IHJlYWRzLCB3cml0ZXM7CiAKIAlzcGluX2xvY2soJm1zLT5sb2NrKTsKQEAgLTg5MCwxNiArOTAyLDYgQEAKIAlkb193cml0ZXMobXMsICZ3cml0ZXMpOwogfQogCi1zdGF0aWMgdm9pZCBkb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKLXsKLQlzdHJ1Y3QgbWlycm9yX3NldCAqbXM7Ci0KLQlkb3duX3JlYWQoJl9taXJyb3Jfc2V0c19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChtcywgJl9taXJyb3Jfc2V0cywgbGlzdCkKLQkJZG9fbWlycm9yKG1zKTsKLQl1cF9yZWFkKCZfbWlycm9yX3NldHNfbG9jayk7Ci19Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFRhcmdldCBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTkzMSw2ICs5MzMsMTMgQEAKIAltcy0+aW5fc3luYyA9IDA7CiAJbXMtPmRlZmF1bHRfbWlycm9yID0gJm1zLT5taXJyb3JbREVGQVVMVF9NSVJST1JdOwogCisJbXMtPmlvX2NsaWVudCA9IGRtX2lvX2NsaWVudF9jcmVhdGUoRE1fSU9fUEFHRVMpOworCWlmIChJU19FUlIobXMtPmlvX2NsaWVudCkpIHsKKwkJdGktPmVycm9yID0gIkVycm9yIGNyZWF0aW5nIGRtX2lvIGNsaWVudCI7CisJCWtmcmVlKG1zKTsKKyAJCXJldHVybiBOVUxMOworCX0KKwogCWlmIChyaF9pbml0KCZtcy0+cmgsIG1zLCBkbCwgcmVnaW9uX3NpemUsIG1zLT5ucl9yZWdpb25zKSkgewogCQl0aS0+ZXJyb3IgPSAiRXJyb3IgY3JlYXRpbmcgZGlydHkgcmVnaW9uIGhhc2giOwogCQlrZnJlZShtcyk7CkBAIC05NDYsNiArOTU1LDcgQEAKIAl3aGlsZSAobS0tKQogCQlkbV9wdXRfZGV2aWNlKHRpLCBtcy0+bWlycm9yW21dLmRldik7CiAKKwlkbV9pb19jbGllbnRfZGVzdHJveShtcy0+aW9fY2xpZW50KTsKIAlyaF9leGl0KCZtcy0+cmgpOwogCWtmcmVlKG1zKTsKIH0KQEAgLTk3OCwyMyArOTg4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhZGRfbWlycm9yX3NldChzdHJ1Y3QgbWlycm9yX3NldCAqbXMpCi17Ci0JZG93bl93cml0ZSgmX21pcnJvcl9zZXRzX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJm1zLT5saXN0LCAmX21pcnJvcl9zZXRzKTsKLQl1cF93cml0ZSgmX21pcnJvcl9zZXRzX2xvY2spOwotCXdha2UoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkZWxfbWlycm9yX3NldChzdHJ1Y3QgbWlycm9yX3NldCAqbXMpCi17Ci0JZG93bl93cml0ZSgmX21pcnJvcl9zZXRzX2xvY2spOwotCWxpc3RfZGVsKCZtcy0+bGlzdCk7Ci0JdXBfd3JpdGUoJl9taXJyb3Jfc2V0c19sb2NrKTsKLX0KLQogLyoKICAqIENyZWF0ZSBkaXJ0eSBsb2c6IGxvZ190eXBlICNsb2dfcGFyYW1zIDxsb2dfcGFyYW1zPgogICovCkBAIC0xMDM3LDE2ICsxMDMwLDU1IEBACiAJcmV0dXJuIGRsOwogfQogCitzdGF0aWMgaW50IHBhcnNlX2ZlYXR1cmVzKHN0cnVjdCBtaXJyb3Jfc2V0ICptcywgdW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YsCisJCQkgIHVuc2lnbmVkICphcmdzX3VzZWQpCit7CisJdW5zaWduZWQgbnVtX2ZlYXR1cmVzOworCXN0cnVjdCBkbV90YXJnZXQgKnRpID0gbXMtPnRpOworCisJKmFyZ3NfdXNlZCA9IDA7CisKKwlpZiAoIWFyZ2MpCisJCXJldHVybiAwOworCisJaWYgKHNzY2FuZihhcmd2WzBdLCAiJXUiLCAmbnVtX2ZlYXR1cmVzKSAhPSAxKSB7CisJCXRpLT5lcnJvciA9ICJJbnZhbGlkIG51bWJlciBvZiBmZWF0dXJlcyI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFyZ2MtLTsKKwlhcmd2Kys7CisJKCphcmdzX3VzZWQpKys7CisKKwlpZiAobnVtX2ZlYXR1cmVzID4gYXJnYykgeworCQl0aS0+ZXJyb3IgPSAiTm90IGVub3VnaCBhcmd1bWVudHMgdG8gc3VwcG9ydCBmZWF0dXJlIGNvdW50IjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFzdHJjbXAoImhhbmRsZV9lcnJvcnMiLCBhcmd2WzBdKSkKKwkJbXMtPmZlYXR1cmVzIHw9IERNX1JBSUQxX0hBTkRMRV9FUlJPUlM7CisJZWxzZSB7CisJCXRpLT5lcnJvciA9ICJVbnJlY29nbmlzZWQgZmVhdHVyZSByZXF1ZXN0ZWQiOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkoKmFyZ3NfdXNlZCkrKzsKKworCXJldHVybiAwOworfQorCiAvKgogICogQ29uc3RydWN0IGEgbWlycm9yIG1hcHBpbmc6CiAgKgogICogbG9nX3R5cGUgI2xvZ19wYXJhbXMgPGxvZ19wYXJhbXM+CiAgKiAjbWlycm9ycyBbbWlycm9yX3BhdGggb2Zmc2V0XXsyLH0KKyAqIFsjZmVhdHVyZXMgPGZlYXR1cmVzPl0KICAqCiAgKiBsb2dfdHlwZSBpcyAiY29yZSIgb3IgImRpc2siCiAgKiAjbG9nX3BhcmFtcyBpcyBiZXR3ZWVuIDEgYW5kIDMKKyAqCisgKiBJZiBwcmVzZW50LCBmZWF0dXJlcyBtdXN0IGJlICJoYW5kbGVfZXJyb3JzIi4KICAqLwotI2RlZmluZSBETV9JT19QQUdFUyA2NAogc3RhdGljIGludCBtaXJyb3JfY3RyKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJaW50IHI7CkBAIC0xMDcwLDggKzExMDIsOCBAQAogCiAJYXJndisrLCBhcmdjLS07CiAKLQlpZiAoYXJnYyAhPSBucl9taXJyb3JzICogMikgewotCQl0aS0+ZXJyb3IgPSAiV3JvbmcgbnVtYmVyIG9mIG1pcnJvciBhcmd1bWVudHMiOworCWlmIChhcmdjIDwgbnJfbWlycm9ycyAqIDIpIHsKKwkJdGktPmVycm9yID0gIlRvbyBmZXcgbWlycm9yIGFyZ3VtZW50cyI7CiAJCWRtX2Rlc3Ryb3lfZGlydHlfbG9nKGRsKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTA5NiwxMyArMTEyOCwzNyBAQAogCXRpLT5wcml2YXRlID0gbXM7CiAgCXRpLT5zcGxpdF9pbyA9IG1zLT5yaC5yZWdpb25fc2l6ZTsKIAotCXIgPSBrY29weWRfY2xpZW50X2NyZWF0ZShETV9JT19QQUdFUywgJm1zLT5rY29weWRfY2xpZW50KTsKKwltcy0+a21pcnJvcmRfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia21pcnJvcmQiKTsKKwlpZiAoIW1zLT5rbWlycm9yZF93cSkgeworCQlETUVSUigiY291bGRuJ3Qgc3RhcnQga21pcnJvcmQiKTsKKwkJZnJlZV9jb250ZXh0KG1zLCB0aSwgbSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlJTklUX1dPUksoJm1zLT5rbWlycm9yZF93b3JrLCBkb19taXJyb3IpOworCisJciA9IHBhcnNlX2ZlYXR1cmVzKG1zLCBhcmdjLCBhcmd2LCAmYXJnc191c2VkKTsKIAlpZiAocikgewogCQlmcmVlX2NvbnRleHQobXMsIHRpLCBtcy0+bnJfbWlycm9ycyk7CiAJCXJldHVybiByOwogCX0KIAotCWFkZF9taXJyb3Jfc2V0KG1zKTsKKwlhcmd2ICs9IGFyZ3NfdXNlZDsKKwlhcmdjIC09IGFyZ3NfdXNlZDsKKworCWlmIChhcmdjKSB7CisJCXRpLT5lcnJvciA9ICJUb28gbWFueSBtaXJyb3IgYXJndW1lbnRzIjsKKwkJZnJlZV9jb250ZXh0KG1zLCB0aSwgbXMtPm5yX21pcnJvcnMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyID0ga2NvcHlkX2NsaWVudF9jcmVhdGUoRE1fSU9fUEFHRVMsICZtcy0+a2NvcHlkX2NsaWVudCk7CisJaWYgKHIpIHsKKwkJZGVzdHJveV93b3JrcXVldWUobXMtPmttaXJyb3JkX3dxKTsKKwkJZnJlZV9jb250ZXh0KG1zLCB0aSwgbXMtPm5yX21pcnJvcnMpOworCQlyZXR1cm4gcjsKKwl9CisKKwl3YWtlKG1zKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTExMCw4ICsxMTY2LDkgQEAKIHsKIAlzdHJ1Y3QgbWlycm9yX3NldCAqbXMgPSAoc3RydWN0IG1pcnJvcl9zZXQgKikgdGktPnByaXZhdGU7CiAKLQlkZWxfbWlycm9yX3NldChtcyk7CisJZmx1c2hfd29ya3F1ZXVlKG1zLT5rbWlycm9yZF93cSk7CiAJa2NvcHlkX2NsaWVudF9kZXN0cm95KG1zLT5rY29weWRfY2xpZW50KTsKKwlkZXN0cm95X3dvcmtxdWV1ZShtcy0+a21pcnJvcmRfd3EpOwogCWZyZWVfY29udGV4dChtcywgdGksIG1zLT5ucl9taXJyb3JzKTsKIH0KIApAQCAtMTEyNyw3ICsxMTg0LDcgQEAKIAlzcGluX3VubG9jaygmbXMtPmxvY2spOwogCiAJaWYgKHNob3VsZF93YWtlKQotCQl3YWtlKCk7CisJCXdha2UobXMpOwogfQogCiAvKgpAQCAtMTIyMiwxMSArMTI3OSw5IEBACiBzdGF0aWMgaW50IG1pcnJvcl9zdGF0dXMoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0YXR1c190eXBlX3QgdHlwZSwKIAkJCSBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBtYXhsZW4pCiB7Ci0JdW5zaWduZWQgaW50IG0sIHN6OworCXVuc2lnbmVkIGludCBtLCBzeiA9IDA7CiAJc3RydWN0IG1pcnJvcl9zZXQgKm1zID0gKHN0cnVjdCBtaXJyb3Jfc2V0ICopIHRpLT5wcml2YXRlOwogCi0Jc3ogPSBtcy0+cmgubG9nLT50eXBlLT5zdGF0dXMobXMtPnJoLmxvZywgdHlwZSwgcmVzdWx0LCBtYXhsZW4pOwotCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTVEFUVVNUWVBFX0lORk86CiAJCURNRU1JVCgiJWQgIiwgbXMtPm5yX21pcnJvcnMpOwpAQCAtMTIzNywxMyArMTI5MiwyMSBAQAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyltcy0+cmgubG9nLT50eXBlLT4KIAkJCQlnZXRfc3luY19jb3VudChtcy0+cmgubG9nKSwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbXMtPm5yX3JlZ2lvbnMpOworCisJCXN6ID0gbXMtPnJoLmxvZy0+dHlwZS0+c3RhdHVzKG1zLT5yaC5sb2csIHR5cGUsIHJlc3VsdCwgbWF4bGVuKTsKKwogCQlicmVhazsKIAogCWNhc2UgU1RBVFVTVFlQRV9UQUJMRToKKwkJc3ogPSBtcy0+cmgubG9nLT50eXBlLT5zdGF0dXMobXMtPnJoLmxvZywgdHlwZSwgcmVzdWx0LCBtYXhsZW4pOworCiAJCURNRU1JVCgiJWQiLCBtcy0+bnJfbWlycm9ycyk7CiAJCWZvciAobSA9IDA7IG0gPCBtcy0+bnJfbWlycm9yczsgbSsrKQogCQkJRE1FTUlUKCIgJXMgJWxsdSIsIG1zLT5taXJyb3JbbV0uZGV2LT5uYW1lLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbXMtPm1pcnJvclttXS5vZmZzZXQpOworCisJCWlmIChtcy0+ZmVhdHVyZXMgJiBETV9SQUlEMV9IQU5ETEVfRVJST1JTKQorCQkJRE1FTUlUKCIgMSBoYW5kbGVfZXJyb3JzIik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMjUxLDcgKzEzMTQsNyBAQAogCiBzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIG1pcnJvcl90YXJnZXQgPSB7CiAJLm5hbWUJID0gIm1pcnJvciIsCi0JLnZlcnNpb24gPSB7MSwgMCwgMn0sCisJLnZlcnNpb24gPSB7MSwgMCwgM30sCiAJLm1vZHVsZQkgPSBUSElTX01PRFVMRSwKIAkuY3RyCSA9IG1pcnJvcl9jdHIsCiAJLmR0cgkgPSBtaXJyb3JfZHRyLApAQCAtMTI3MCwyMCArMTMzMywxMSBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCV9rbWlycm9yZF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrbWlycm9yZCIpOwotCWlmICghX2ttaXJyb3JkX3dxKSB7Ci0JCURNRVJSKCJjb3VsZG4ndCBzdGFydCBrbWlycm9yZCIpOwotCQlkbV9kaXJ0eV9sb2dfZXhpdCgpOwotCQlyZXR1cm4gcjsKLQl9Ci0JSU5JVF9XT1JLKCZfa21pcnJvcmRfd29yaywgZG9fd29yayk7Ci0KIAlyID0gZG1fcmVnaXN0ZXJfdGFyZ2V0KCZtaXJyb3JfdGFyZ2V0KTsKIAlpZiAociA8IDApIHsKIAkJRE1FUlIoIiVzOiBGYWlsZWQgdG8gcmVnaXN0ZXIgbWlycm9yIHRhcmdldCIsCiAJCSAgICAgIG1pcnJvcl90YXJnZXQubmFtZSk7CiAJCWRtX2RpcnR5X2xvZ19leGl0KCk7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKF9rbWlycm9yZF93cSk7CiAJfQogCiAJcmV0dXJuIHI7CkBAIC0xMjk3LDcgKzEzNTEsNiBAQAogCWlmIChyIDwgMCkKIAkJRE1FUlIoIiVzOiB1bnJlZ2lzdGVyIGZhaWxlZCAlZCIsIG1pcnJvcl90YXJnZXQubmFtZSwgcik7CiAKLQlkZXN0cm95X3dvcmtxdWV1ZShfa21pcnJvcmRfd3EpOwogCWRtX2RpcnR5X2xvZ19leGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYyBiL2RyaXZlcnMvbWQvZG0tdGFibGUuYwppbmRleCAwNWJlZmE5Li4yZmMxOTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRhYmxlLmMKKysrIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCkBAIC00MjUsMTMgKzQyNSwxNSBAQAogfQogCiAvKgotICogSWYgcG9zc2libGUgKGllLiBibGtfc2l6ZVttYWpvcl0gaXMgc2V0KSwgdGhpcyBjaGVja3MgYW4gYXJlYQotICogb2YgYSBkZXN0aW5hdGlvbiBkZXZpY2UgaXMgdmFsaWQuCisgKiBJZiBwb3NzaWJsZSwgdGhpcyBjaGVja3MgYW4gYXJlYSBvZiBhIGRlc3RpbmF0aW9uIGRldmljZSBpcyB2YWxpZC4KICAqLwogc3RhdGljIGludCBjaGVja19kZXZpY2VfYXJlYShzdHJ1Y3QgZG1fZGV2ICpkZCwgc2VjdG9yX3Qgc3RhcnQsIHNlY3Rvcl90IGxlbikKIHsKLQlzZWN0b3JfdCBkZXZfc2l6ZTsKLQlkZXZfc2l6ZSA9IGRkLT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IFNFQ1RPUl9TSElGVDsKKwlzZWN0b3JfdCBkZXZfc2l6ZSA9IGRkLT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IFNFQ1RPUl9TSElGVDsKKworCWlmICghZGV2X3NpemUpCisJCXJldHVybiAxOworCiAJcmV0dXJuICgoc3RhcnQgPCBkZXZfc2l6ZSkgJiYgKGxlbiA8PSAoZGV2X3NpemUgLSBzdGFydCkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDExYTk4ZGYuLjI3MTdhMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTEyMzYsNiArMTIzNiw3IEBACiAJCWZyZWVfZGV2KG1kKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9wdXQpOwogCiAvKgogICogUHJvY2VzcyB0aGUgZGVmZXJyZWQgYmlvcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9rY29weWQuYyBiL2RyaXZlcnMvbWQva2NvcHlkLmMKaW5kZXggYjQ2ZjZjNS4uZGJjMjM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9rY29weWQuYworKysgYi9kcml2ZXJzL21kL2tjb3B5ZC5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMiBTaXN0aW5hIFNvZnR3YXJlIChVSykgTGltaXRlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0IEdtYkgKICAqCiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTC4KICAqCkBAIC00NSw2ICs0Niw4IEBACiAJdW5zaWduZWQgaW50IG5yX3BhZ2VzOwogCXVuc2lnbmVkIGludCBucl9mcmVlX3BhZ2VzOwogCisJc3RydWN0IGRtX2lvX2NsaWVudCAqaW9fY2xpZW50OworCiAJd2FpdF9xdWV1ZV9oZWFkX3QgZGVzdHJveXE7CiAJYXRvbWljX3QgbnJfam9iczsKIH07CkBAIC0zNDIsMTYgKzM0NSwyMCBAQAogc3RhdGljIGludCBydW5faW9fam9iKHN0cnVjdCBrY29weWRfam9iICpqb2IpCiB7CiAJaW50IHI7CisJc3RydWN0IGRtX2lvX3JlcXVlc3QgaW9fcmVxID0geworCQkuYmlfcncgPSBqb2ItPnJ3LAorCQkubWVtLnR5cGUgPSBETV9JT19QQUdFX0xJU1QsCisJCS5tZW0ucHRyLnBsID0gam9iLT5wYWdlcywKKwkJLm1lbS5vZmZzZXQgPSBqb2ItPm9mZnNldCwKKwkJLm5vdGlmeS5mbiA9IGNvbXBsZXRlX2lvLAorCQkubm90aWZ5LmNvbnRleHQgPSBqb2IsCisJCS5jbGllbnQgPSBqb2ItPmtjLT5pb19jbGllbnQsCisJfTsKIAogCWlmIChqb2ItPnJ3ID09IFJFQUQpCi0JCXIgPSBkbV9pb19hc3luYygxLCAmam9iLT5zb3VyY2UsIGpvYi0+cncsCi0JCQkJam9iLT5wYWdlcywKLQkJCQlqb2ItPm9mZnNldCwgY29tcGxldGVfaW8sIGpvYik7Ci0KKwkJciA9IGRtX2lvKCZpb19yZXEsIDEsICZqb2ItPnNvdXJjZSwgTlVMTCk7CiAJZWxzZQotCQlyID0gZG1faW9fYXN5bmMoam9iLT5udW1fZGVzdHMsIGpvYi0+ZGVzdHMsIGpvYi0+cncsCi0JCQkJam9iLT5wYWdlcywKLQkJCQlqb2ItPm9mZnNldCwgY29tcGxldGVfaW8sIGpvYik7CisJCXIgPSBkbV9pbygmaW9fcmVxLCBqb2ItPm51bV9kZXN0cywgam9iLT5kZXN0cywgTlVMTCk7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTY3MCw4ICs2NzcsOSBAQAogCQlyZXR1cm4gcjsKIAl9CiAKLQlyID0gZG1faW9fZ2V0KG5yX3BhZ2VzKTsKLQlpZiAocikgeworCWtjLT5pb19jbGllbnQgPSBkbV9pb19jbGllbnRfY3JlYXRlKG5yX3BhZ2VzKTsKKwlpZiAoSVNfRVJSKGtjLT5pb19jbGllbnQpKSB7CisJCXIgPSBQVFJfRVJSKGtjLT5pb19jbGllbnQpOwogCQljbGllbnRfZnJlZV9wYWdlcyhrYyk7CiAJCWtmcmVlKGtjKTsKIAkJa2NvcHlkX2V4aXQoKTsKQEAgLTY5MSw3ICs2OTksNyBAQAogCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgYWxsIGpvYnMgc3VibWl0dGVkIGJ5IHRoaXMgY2xpZW50LiAqLwogCXdhaXRfZXZlbnQoa2MtPmRlc3Ryb3lxLCAhYXRvbWljX3JlYWQoJmtjLT5ucl9qb2JzKSk7CiAKLQlkbV9pb19wdXQoa2MtPm5yX3BhZ2VzKTsKKwlkbV9pb19jbGllbnRfZGVzdHJveShrYy0+aW9fY2xpZW50KTsKIAljbGllbnRfZnJlZV9wYWdlcyhrYyk7CiAJY2xpZW50X2RlbChrYyk7CiAJa2ZyZWUoa2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuYyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKaW5kZXggZDVlY2QyZC4uMTkyNzQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0xMzksOCArMTM5LDYgQEAKIAlpZiAoIWNvbmYpCiAJCXJldHVybiBOVUxMOwogCi0JbWRkZXYtPnByaXZhdGUgPSBjb25mOwotCiAJY250ID0gMDsKIAljb25mLT5hcnJheV9zaXplID0gMDsKIApAQCAtMjMyLDcgKzIzMCw3IEBACiAJICogRmlyc3QgY2FsY3VsYXRlIHRoZSBkZXZpY2Ugb2Zmc2V0cy4KIAkgKi8KIAljb25mLT5kaXNrc1swXS5vZmZzZXQgPSAwOwotCWZvciAoaT0xOyBpPG1kZGV2LT5yYWlkX2Rpc2tzOyBpKyspCisJZm9yIChpID0gMTsgaSA8IHJhaWRfZGlza3M7IGkrKykKIAkJY29uZi0+ZGlza3NbaV0ub2Zmc2V0ID0KIAkJCWNvbmYtPmRpc2tzW2ktMV0ub2Zmc2V0ICsKIAkJCWNvbmYtPmRpc2tzW2ktMV0uc2l6ZTsKQEAgLTI0NCw3ICsyNDIsNyBAQAogCSAgICAgY3Vycl9vZmZzZXQgPCBjb25mLT5hcnJheV9zaXplOwogCSAgICAgY3Vycl9vZmZzZXQgKz0gY29uZi0+aGFzaF9zcGFjaW5nKSB7CiAKLQkJd2hpbGUgKGkgPCBtZGRldi0+cmFpZF9kaXNrcy0xICYmCisJCXdoaWxlIChpIDwgcmFpZF9kaXNrcy0xICYmCiAJCSAgICAgICBjdXJyX29mZnNldCA+PSBjb25mLT5kaXNrc1tpKzFdLm9mZnNldCkKIAkJCWkrKzsKIApAQCAtMjk5LDkgKzI5NywxMSBAQAogCSAqLwogCWxpbmVhcl9jb25mX3QgKm5ld2NvbmY7CiAKLQlpZiAocmRldi0+cmFpZF9kaXNrICE9IG1kZGV2LT5yYWlkX2Rpc2tzKQorCWlmIChyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgIT0gbWRkZXYtPnJhaWRfZGlza3MpCiAJCXJldHVybiAtRUlOVkFMOwogCisJcmRldi0+cmFpZF9kaXNrID0gcmRldi0+c2F2ZWRfcmFpZF9kaXNrOworCiAJbmV3Y29uZiA9IGxpbmVhcl9jb25mKG1kZGV2LG1kZGV2LT5yYWlkX2Rpc2tzKzEpOwogCiAJaWYgKCFuZXdjb25mKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDJiNDMxNWQuLjFjNTRmM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTMzLDYgKzMzLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KQEAgLTI3Myw2ICsyNzQsNyBAQAogCWF0b21pY19zZXQoJm5ldy0+YWN0aXZlLCAxKTsKIAlzcGluX2xvY2tfaW5pdCgmbmV3LT53cml0ZV9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuZXctPnNiX3dhaXQpOworCW5ldy0+cmVzaGFwZV9wb3NpdGlvbiA9IE1heFNlY3RvcjsKIAogCW5ldy0+cXVldWUgPSBibGtfYWxsb2NfcXVldWUoR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXctPnF1ZXVlKSB7CkBAIC01ODksMTQgKzU5MSw0MSBAQAogCXJldHVybiByZXQ7CiB9CiAKKworc3RhdGljIHUzMiBtZF9jc3VtX2ZvbGQodTMyIGNzdW0pCit7CisJY3N1bSA9IChjc3VtICYgMHhmZmZmKSArIChjc3VtID4+IDE2KTsKKwlyZXR1cm4gKGNzdW0gJiAweGZmZmYpICsgKGNzdW0gPj4gMTYpOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfc2JfY3N1bShtZHBfc3VwZXJfdCAqIHNiKQogeworCXU2NCBuZXdjc3VtID0gMDsKKwl1MzIgKnNiMzIgPSAodTMyKilzYjsKKwlpbnQgaTsKIAl1bnNpZ25lZCBpbnQgZGlza19jc3VtLCBjc3VtOwogCiAJZGlza19jc3VtID0gc2ItPnNiX2NzdW07CiAJc2ItPnNiX2NzdW0gPSAwOwotCWNzdW0gPSBjc3VtX3BhcnRpYWwoKHZvaWQgKilzYiwgTURfU0JfQllURVMsIDApOworCisJZm9yIChpID0gMDsgaSA8IE1EX1NCX0JZVEVTLzQgOyBpKyspCisJCW5ld2NzdW0gKz0gc2IzMltpXTsKKwljc3VtID0gKG5ld2NzdW0gJiAweGZmZmZmZmZmKSArIChuZXdjc3VtPj4zMik7CisKKworI2lmZGVmIENPTkZJR19BTFBIQQorCS8qIFRoaXMgdXNlZCB0byB1c2UgY3N1bV9wYXJ0aWFsLCB3aGljaCB3YXMgd3JvbmcgZm9yIHNldmVyYWwKKwkgKiByZWFzb25zIGluY2x1ZGluZyB0aGF0IGRpZmZlcmVudCByZXN1bHRzIGFyZSByZXR1cm5lZCBvbgorCSAqIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiAgSXQgaXNuJ3QgY3JpdGljYWwgdGhhdCB3ZSBnZXQgZXhhY3RseQorCSAqIHRoZSBzYW1lIHJldHVybiB2YWx1ZSBhcyBiZWZvcmUgKHdlIGFsd2F5cyBjc3VtX2ZvbGQgYmVmb3JlCisJICogdGVzdGluZywgYW5kIHRoYXQgcmVtb3ZlcyBhbnkgZGlmZmVyZW5jZXMpLiAgSG93ZXZlciBhcyB3ZQorCSAqIGtub3cgdGhhdCBjc3VtX3BhcnRpYWwgYWx3YXlzIHJldHVybmVkIGEgMTZiaXQgdmFsdWUgb24KKwkgKiBhbHBoYXMsIGRvIGEgZm9sZCB0byBtYXhpbWlzZSBjb25mb3JtaXR5IHRvIHByZXZpb3VzIGJlaGF2aW91ci4KKwkgKi8KKwlzYi0+c2JfY3N1bSA9IG1kX2NzdW1fZm9sZChkaXNrX2NzdW0pOworI2Vsc2UKIAlzYi0+c2JfY3N1bSA9IGRpc2tfY3N1bTsKKyNlbmRpZgogCXJldHVybiBjc3VtOwogfQogCkBAIC02ODQsNyArNzEzLDcgQEAKIAlpZiAoc2ItPnJhaWRfZGlza3MgPD0gMCkKIAkJZ290byBhYm9ydDsKIAotCWlmIChjc3VtX2ZvbGQoY2FsY19zYl9jc3VtKHNiKSkgIT0gY3N1bV9mb2xkKHNiLT5zYl9jc3VtKSkgeworCWlmIChtZF9jc3VtX2ZvbGQoY2FsY19zYl9jc3VtKHNiKSkgIT0gbWRfY3N1bV9mb2xkKHNiLT5zYl9jc3VtKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZDogaW52YWxpZCBzdXBlcmJsb2NrIGNoZWNrc3VtIG9uICVzXG4iLAogCQkJYik7CiAJCWdvdG8gYWJvcnQ7CkBAIC02OTQsNiArNzIzLDE3IEBACiAJcmRldi0+ZGF0YV9vZmZzZXQgPSAwOwogCXJkZXYtPnNiX3NpemUgPSBNRF9TQl9CWVRFUzsKIAorCWlmIChzYi0+c3RhdGUgJiAoMTw8TURfU0JfQklUTUFQX1BSRVNFTlQpKSB7CisJCWlmIChzYi0+bGV2ZWwgIT0gMSAmJiBzYi0+bGV2ZWwgIT0gNAorCQkgICAgJiYgc2ItPmxldmVsICE9IDUgJiYgc2ItPmxldmVsICE9IDYKKwkJICAgICYmIHNiLT5sZXZlbCAhPSAxMCkgeworCQkJLyogRklYTUUgdXNlIGEgYmV0dGVyIHRlc3QgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAibWQ6IGJpdG1hcHMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBsZXZlbC5cbiIpOworCQkJZ290byBhYm9ydDsKKwkJfQorCX0KKwogCWlmIChzYi0+bGV2ZWwgPT0gTEVWRUxfTVVMVElQQVRIKQogCQlyZGV2LT5kZXNjX25yID0gLTE7CiAJZWxzZQpAQCAtNzkyLDE2ICs4MzIsOCBAQAogCQltZGRldi0+bWF4X2Rpc2tzID0gTURfU0JfRElTS1M7CiAKIAkJaWYgKHNiLT5zdGF0ZSAmICgxPDxNRF9TQl9CSVRNQVBfUFJFU0VOVCkgJiYKLQkJICAgIG1kZGV2LT5iaXRtYXBfZmlsZSA9PSBOVUxMKSB7Ci0JCQlpZiAobWRkZXYtPmxldmVsICE9IDEgJiYgbWRkZXYtPmxldmVsICE9IDQKLQkJCSAgICAmJiBtZGRldi0+bGV2ZWwgIT0gNSAmJiBtZGRldi0+bGV2ZWwgIT0gNgotCQkJICAgICYmIG1kZGV2LT5sZXZlbCAhPSAxMCkgewotCQkJCS8qIEZJWE1FIHVzZSBhIGJldHRlciB0ZXN0ICovCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWQ6IGJpdG1hcHMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBsZXZlbC5cbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQorCQkgICAgbWRkZXYtPmJpdG1hcF9maWxlID09IE5VTEwpCiAJCQltZGRldi0+Yml0bWFwX29mZnNldCA9IG1kZGV2LT5kZWZhdWx0X2JpdG1hcF9vZmZzZXQ7Ci0JCX0KIAogCX0gZWxzZSBpZiAobWRkZXYtPnBlcnMgPT0gTlVMTCkgewogCQkvKiBJbnNpc3Qgb24gZ29vZCBldmVudCBjb3VudGVyIHdoaWxlIGFzc2VtYmxpbmcgKi8KQEAgLTEwNTgsNiArMTA5MCwxOCBAQAogCQkgICAgICAgYmRldm5hbWUocmRldi0+YmRldixiKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlpZiAoKGxlMzJfdG9fY3B1KHNiLT5mZWF0dXJlX21hcCkgJiBNRF9GRUFUVVJFX0JJVE1BUF9PRkZTRVQpKSB7CisJCWlmIChzYi0+bGV2ZWwgIT0gY3B1X3RvX2xlMzIoMSkgJiYKKwkJICAgIHNiLT5sZXZlbCAhPSBjcHVfdG9fbGUzMig0KSAmJgorCQkgICAgc2ItPmxldmVsICE9IGNwdV90b19sZTMyKDUpICYmCisJCSAgICBzYi0+bGV2ZWwgIT0gY3B1X3RvX2xlMzIoNikgJiYKKwkJICAgIHNiLT5sZXZlbCAhPSBjcHVfdG9fbGUzMigxMCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAibWQ6IGJpdG1hcHMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBsZXZlbC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKIAlyZGV2LT5wcmVmZXJyZWRfbWlub3IgPSAweGZmZmY7CiAJcmRldi0+ZGF0YV9vZmZzZXQgPSBsZTY0X3RvX2NwdShzYi0+ZGF0YV9vZmZzZXQpOwogCWF0b21pY19zZXQoJnJkZXYtPmNvcnJlY3RlZF9lcnJvcnMsIGxlMzJfdG9fY3B1KHNiLT5jbnRfY29ycmVjdGVkX3JlYWQpKTsKQEAgLTExNDEsMTQgKzExODUsOSBAQAogCQltZGRldi0+bWF4X2Rpc2tzID0gICg0MDk2LTI1NikvMjsKIAogCQlpZiAoKGxlMzJfdG9fY3B1KHNiLT5mZWF0dXJlX21hcCkgJiBNRF9GRUFUVVJFX0JJVE1BUF9PRkZTRVQpICYmCi0JCSAgICBtZGRldi0+Yml0bWFwX2ZpbGUgPT0gTlVMTCApIHsKLQkJCWlmIChtZGRldi0+bGV2ZWwgIT0gMSAmJiBtZGRldi0+bGV2ZWwgIT0gNSAmJiBtZGRldi0+bGV2ZWwgIT0gNgotCQkJICAgICYmIG1kZGV2LT5sZXZlbCAhPSAxMCkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kOiBiaXRtYXBzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgbGV2ZWwuXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KKwkJICAgIG1kZGV2LT5iaXRtYXBfZmlsZSA9PSBOVUxMICkKIAkJCW1kZGV2LT5iaXRtYXBfb2Zmc2V0ID0gKF9fczMyKWxlMzJfdG9fY3B1KHNiLT5iaXRtYXBfb2Zmc2V0KTsKLQkJfQorCiAJCWlmICgobGUzMl90b19jcHUoc2ItPmZlYXR1cmVfbWFwKSAmIE1EX0ZFQVRVUkVfUkVTSEFQRV9BQ1RJVkUpKSB7CiAJCQltZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9IGxlNjRfdG9fY3B1KHNiLT5yZXNoYXBlX3Bvc2l0aW9uKTsKIAkJCW1kZGV2LT5kZWx0YV9kaXNrcyA9IGxlMzJfdG9fY3B1KHNiLT5kZWx0YV9kaXNrcyk7CkBAIC0xMjU5LDggKzEyOTgsOSBAQAogCUlURVJBVEVfUkRFVihtZGRldixyZGV2Mix0bXApCiAJCWlmIChyZGV2Mi0+ZGVzY19ucisxID4gbWF4X2RldikKIAkJCW1heF9kZXYgPSByZGV2Mi0+ZGVzY19ucisxOwotCQotCXNiLT5tYXhfZGV2ID0gY3B1X3RvX2xlMzIobWF4X2Rldik7CisKKwlpZiAobWF4X2RldiA+IGxlMzJfdG9fY3B1KHNiLT5tYXhfZGV2KSkKKwkJc2ItPm1heF9kZXYgPSBjcHVfdG9fbGUzMihtYXhfZGV2KTsKIAlmb3IgKGk9MDsgaTxtYXhfZGV2O2krKykKIAkJc2ItPmRldl9yb2xlc1tpXSA9IGNwdV90b19sZTE2KDB4ZmZmZSk7CiAJCkBAIC0xMzI2LDEwICsxMzY2LDE0IEBACiAJfQogCS8qIG1ha2Ugc3VyZSByZGV2LT5zaXplIGV4Y2VlZHMgbWRkZXYtPnNpemUgKi8KIAlpZiAocmRldi0+c2l6ZSAmJiAobWRkZXYtPnNpemUgPT0gMCB8fCByZGV2LT5zaXplIDwgbWRkZXYtPnNpemUpKSB7Ci0JCWlmIChtZGRldi0+cGVycykKLQkJCS8qIENhbm5vdCBjaGFuZ2Ugc2l6ZSwgc28gZmFpbCAqLwotCQkJcmV0dXJuIC1FTk9TUEM7Ci0JCWVsc2UKKwkJaWYgKG1kZGV2LT5wZXJzKSB7CisJCQkvKiBDYW5ub3QgY2hhbmdlIHNpemUsIHNvIGZhaWwKKwkJCSAqIElmIG1kZGV2LT5sZXZlbCA8PSAwLCB0aGVuIHdlIGRvbid0IGNhcmUKKwkJCSAqIGFib3V0IGFsaWduaW5nIHNpemVzIChlLmcuIGxpbmVhcikKKwkJCSAqLworCQkJaWYgKG1kZGV2LT5sZXZlbCA+IDApCisJCQkJcmV0dXJuIC1FTk9TUEM7CisJCX0gZWxzZQogCQkJbWRkZXYtPnNpemUgPSByZGV2LT5zaXplOwogCX0KIApAQCAtMjEwMyw2ICsyMTQ3LDkgQEAKIAkJCXJkZXYtPmRlc2NfbnIgPSBpKys7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSByZGV2LT5kZXNjX25yOwogCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCQl9IGVsc2UgaWYgKHJkZXYtPnJhaWRfZGlzayA+PSBtZGRldi0+cmFpZF9kaXNrcykgeworCQkJcmRldi0+cmFpZF9kaXNrID0gLTE7CisJCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJfQogCX0KIApAQCAtMjIwNCw2ICsyMjUxLDEwIEBACiBsYXlvdXRfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKIHsKIAkvKiBqdXN0IGEgbnVtYmVyLCBub3QgbWVhbmluZ2Z1bCBmb3IgYWxsIGxldmVscyAqLworCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IgJiYKKwkgICAgbWRkZXYtPmxheW91dCAhPSBtZGRldi0+bmV3X2xheW91dCkKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIiVkICglZClcbiIsCisJCQkgICAgICAgbWRkZXYtPm5ld19sYXlvdXQsIG1kZGV2LT5sYXlvdXQpOwogCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgbWRkZXYtPmxheW91dCk7CiB9CiAKQEAgLTIyMTIsMTMgKzIyNjMsMTYgQEAKIHsKIAljaGFyICplOwogCXVuc2lnbmVkIGxvbmcgbiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmUsIDEwKTsKLQlpZiAobWRkZXYtPnBlcnMpCi0JCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoISpidWYgfHwgKCplICYmICplICE9ICdcbicpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1kZGV2LT5sYXlvdXQgPSBuOworCWlmIChtZGRldi0+cGVycykKKwkJcmV0dXJuIC1FQlVTWTsKKwlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKQorCQltZGRldi0+bmV3X2xheW91dCA9IG47CisJZWxzZQorCQltZGRldi0+bGF5b3V0ID0gbjsKIAlyZXR1cm4gbGVuOwogfQogc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBtZF9sYXlvdXQgPQpAQCAtMjIzMCw2ICsyMjg0LDEwIEBACiB7CiAJaWYgKG1kZGV2LT5yYWlkX2Rpc2tzID09IDApCiAJCXJldHVybiAwOworCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IgJiYKKwkgICAgbWRkZXYtPmRlbHRhX2Rpc2tzICE9IDApCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZCAoJWQpXG4iLCBtZGRldi0+cmFpZF9kaXNrcywKKwkJCSAgICAgICBtZGRldi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWx0YV9kaXNrcyk7CiAJcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCBtZGRldi0+cmFpZF9kaXNrcyk7CiB9CiAKQEAgLTIyNDcsNyArMjMwNSwxMSBAQAogCiAJaWYgKG1kZGV2LT5wZXJzKQogCQlydiA9IHVwZGF0ZV9yYWlkX2Rpc2tzKG1kZGV2LCBuKTsKLQllbHNlCisJZWxzZSBpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKSB7CisJCWludCBvbGRkaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlbHRhX2Rpc2tzOworCQltZGRldi0+ZGVsdGFfZGlza3MgPSBuIC0gb2xkZGlza3M7CisJCW1kZGV2LT5yYWlkX2Rpc2tzID0gbjsKKwl9IGVsc2UKIAkJbWRkZXYtPnJhaWRfZGlza3MgPSBuOwogCXJldHVybiBydiA/IHJ2IDogbGVuOwogfQpAQCAtMjI1Nyw2ICsyMzE5LDEwIEBACiBzdGF0aWMgc3NpemVfdAogY2h1bmtfc2l6ZV9zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQogeworCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IgJiYKKwkgICAgbWRkZXYtPmNodW5rX3NpemUgIT0gbWRkZXYtPm5ld19jaHVuaykKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIiVkICglZClcbiIsIG1kZGV2LT5uZXdfY2h1bmssCisJCQkgICAgICAgbWRkZXYtPmNodW5rX3NpemUpOwogCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgbWRkZXYtPmNodW5rX3NpemUpOwogfQogCkBAIC0yMjY3LDEyICsyMzMzLDE1IEBACiAJY2hhciAqZTsKIAl1bnNpZ25lZCBsb25nIG4gPSBzaW1wbGVfc3RydG91bChidWYsICZlLCAxMCk7CiAKLQlpZiAobWRkZXYtPnBlcnMpCi0JCXJldHVybiAtRUJVU1k7CiAJaWYgKCEqYnVmIHx8ICgqZSAmJiAqZSAhPSAnXG4nKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZGRldi0+Y2h1bmtfc2l6ZSA9IG47CisJaWYgKG1kZGV2LT5wZXJzKQorCQlyZXR1cm4gLUVCVVNZOworCWVsc2UgaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3RvcikKKwkJbWRkZXYtPm5ld19jaHVuayA9IG47CisJZWxzZQorCQltZGRldi0+Y2h1bmtfc2l6ZSA9IG47CiAJcmV0dXJuIGxlbjsKIH0KIHN0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgbWRfY2h1bmtfc2l6ZSA9CkBAIC0yNjM3LDggKzI3MDYsNyBAQAogCW1pbm9yID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZSwgMTApOwogCWlmIChlPT1idWYgfHwgKCplICYmICplICE9ICdcbicpICkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKG1ham9yID49IHNpemVvZihzdXBlcl90eXBlcykvc2l6ZW9mKHN1cGVyX3R5cGVzWzBdKSB8fAotCSAgICBzdXBlcl90eXBlc1ttYWpvcl0ubmFtZSA9PSBOVUxMKQorCWlmIChtYWpvciA+PSBBUlJBWV9TSVpFKHN1cGVyX3R5cGVzKSB8fCBzdXBlcl90eXBlc1ttYWpvcl0ubmFtZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0VOVDsKIAltZGRldi0+bWFqb3JfdmVyc2lvbiA9IG1ham9yOwogCW1kZGV2LT5taW5vcl92ZXJzaW9uID0gbWlub3I7CkBAIC0yODU5LDYgKzI5MjcsMzcgQEAKIHN0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgbWRfc3VzcGVuZF9oaSA9CiBfX0FUVFIoc3VzcGVuZF9oaSwgU19JUlVHT3xTX0lXVVNSLCBzdXNwZW5kX2hpX3Nob3csIHN1c3BlbmRfaGlfc3RvcmUpOwogCitzdGF0aWMgc3NpemVfdAorcmVzaGFwZV9wb3NpdGlvbl9zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQoreworCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbWRkZXYtPnJlc2hhcGVfcG9zaXRpb24pOworCXN0cmNweShwYWdlLCAibm9uZVxuIik7CisJcmV0dXJuIDU7Cit9CisKK3N0YXRpYyBzc2l6ZV90CityZXNoYXBlX3Bvc2l0aW9uX3N0b3JlKG1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJY2hhciAqZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbmV3ID0gc2ltcGxlX3N0cnRvdWxsKGJ1ZiwgJmUsIDEwKTsKKwlpZiAobWRkZXYtPnBlcnMpCisJCXJldHVybiAtRUJVU1k7CisJaWYgKGJ1ZiA9PSBlIHx8ICgqZSAmJiAqZSAhPSAnXG4nKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPSBuZXc7CisJbWRkZXYtPmRlbHRhX2Rpc2tzID0gMDsKKwltZGRldi0+bmV3X2xldmVsID0gbWRkZXYtPmxldmVsOworCW1kZGV2LT5uZXdfbGF5b3V0ID0gbWRkZXYtPmxheW91dDsKKwltZGRldi0+bmV3X2NodW5rID0gbWRkZXYtPmNodW5rX3NpemU7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBtZF9yZXNoYXBlX3Bvc2l0aW9uID0KK19fQVRUUihyZXNoYXBlX3Bvc2l0aW9uLCBTX0lSVUdPfFNfSVdVU1IsIHJlc2hhcGVfcG9zaXRpb25fc2hvdywKKyAgICAgICByZXNoYXBlX3Bvc2l0aW9uX3N0b3JlKTsKKwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWRfZGVmYXVsdF9hdHRyc1tdID0gewogCSZtZF9sZXZlbC5hdHRyLApAQCAtMjg3MSw2ICsyOTcwLDcgQEAKIAkmbWRfbmV3X2RldmljZS5hdHRyLAogCSZtZF9zYWZlX2RlbGF5LmF0dHIsCiAJJm1kX2FycmF5X3N0YXRlLmF0dHIsCisJJm1kX3Jlc2hhcGVfcG9zaXRpb24uYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMzQwOSw2ICszNTA5LDcgQEAKIAkJbWRkZXYtPnNpemUgPSAwOwogCQltZGRldi0+cmFpZF9kaXNrcyA9IDA7CiAJCW1kZGV2LT5yZWNvdmVyeV9jcCA9IDA7CisJCW1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID0gTWF4U2VjdG9yOwogCiAJfSBlbHNlIGlmIChtZGRldi0+cGVycykKIAkJcHJpbnRrKEtFUk5fSU5GTyAibWQ6ICVzIHN3aXRjaGVkIHRvIHJlYWQtb25seSBtb2RlLlxuIiwKQEAgLTQwMTksNyArNDEyMCw3IEBACiAJaWYgKGluZm8tPnJhaWRfZGlza3MgPT0gMCkgewogCQkvKiBqdXN0IHNldHRpbmcgdmVyc2lvbiBudW1iZXIgZm9yIHN1cGVyYmxvY2sgbG9hZGluZyAqLwogCQlpZiAoaW5mby0+bWFqb3JfdmVyc2lvbiA8IDAgfHwKLQkJICAgIGluZm8tPm1ham9yX3ZlcnNpb24gPj0gc2l6ZW9mKHN1cGVyX3R5cGVzKS9zaXplb2Yoc3VwZXJfdHlwZXNbMF0pIHx8CisJCSAgICBpbmZvLT5tYWpvcl92ZXJzaW9uID49IEFSUkFZX1NJWkUoc3VwZXJfdHlwZXMpIHx8CiAJCSAgICBzdXBlcl90eXBlc1tpbmZvLT5tYWpvcl92ZXJzaW9uXS5uYW1lID09IE5VTEwpIHsKIAkJCS8qIG1heWJlIHRyeSB0byBhdXRvLWxvYWQgYSBtb2R1bGU/ICovCiAJCQlwcmludGsoS0VSTl9JTkZPIApAQCAtNDk0MSwxNSArNTA0Miw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IG1kX3NlcV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgbWRzdGF0X2luZm8gKm1pID0gbS0+cHJpdmF0ZTsKLQltLT5wcml2YXRlID0gTlVMTDsKLQlrZnJlZShtaSk7Ci0JcmV0dXJuIHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBtZHN0YXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CkBAIC00OTcxLDcgKzUwNjMsNyBAQAogCS5vcGVuICAgICAgICAgICA9IG1kX3NlcV9vcGVuLAogCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IG1kX3NlcV9yZWxlYXNlLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKIAkucG9sbAkJPSBtZHN0YXRfcG9sbCwKIH07CiAKQEAgLTUwMTksNyArNTExMSw3IEBACiAJCSAqCiAJCSAqIE5vdGU6IHRoZSBmb2xsb3dpbmcgaXMgYW4gdW5zaWduZWQgY29tcGFyaXNvbi4KIAkJICovCi0JCWlmICgoY3Vycl9ldmVudHMgLSByZGV2LT5sYXN0X2V2ZW50cyArIDQwOTYpID4gODE5MikgeworCQlpZiAoKGxvbmcpY3Vycl9ldmVudHMgLSAobG9uZylyZGV2LT5sYXN0X2V2ZW50cyA+IDQwOTYpIHsKIAkJCXJkZXYtPmxhc3RfZXZlbnRzID0gY3Vycl9ldmVudHM7CiAJCQlpZGxlID0gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMC5jIGIvZHJpdmVycy9tZC9yYWlkMC5jCmluZGV4IGRmZTMyMTQuLjJjNDA0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDAuYworKysgYi9kcml2ZXJzL21kL3JhaWQwLmMKQEAgLTQxNSw3ICs0MTUsNyBAQAogCXJhaWQwX2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwogCXN0cnVjdCBzdHJpcF96b25lICp6b25lOwogCW1ka19yZGV2X3QgKnRtcF9kZXY7Ci0JdW5zaWduZWQgbG9uZyBjaHVuazsKKwlzZWN0b3JfdCBjaHVuazsKIAlzZWN0b3JfdCBibG9jaywgcnNlY3Q7CiAJY29uc3QgaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpbyk7CiAKQEAgLTQ3MCw3ICs0NzAsNiBAQAogCiAJCXNlY3Rvcl9kaXYoeCwgem9uZS0+bmJfZGV2KTsKIAkJY2h1bmsgPSB4OwotCQlCVUdfT04oeCAhPSAoc2VjdG9yX3QpY2h1bmspOwogCiAJCXggPSBibG9jayA+PiBjaHVua3NpemVfYml0czsKIAkJdG1wX2RldiA9IHpvbmUtPmRldltzZWN0b3JfZGl2KHgsIHpvbmUtPm5iX2RldildOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IDk3ZWU4NzAuLjNhOTVjYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTI3MSwyMSArMjcxLDI1IEBACiAJICovCiAJdXBkYXRlX2hlYWRfcG9zKG1pcnJvciwgcjFfYmlvKTsKIAotCWlmICh1cHRvZGF0ZSB8fCAoY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPm1kZGV2LT5kZWdyYWRlZCkgPD0gMSkgewotCQkvKgotCQkgKiBTZXQgUjFCSU9fVXB0b2RhdGUgaW4gb3VyIG1hc3RlciBiaW8sIHNvIHRoYXQKLQkJICogd2Ugd2lsbCByZXR1cm4gYSBnb29kIGVycm9yIGNvZGUgZm9yIHRvIHRoZSBoaWdoZXIKLQkJICogbGV2ZWxzIGV2ZW4gaWYgSU8gb24gc29tZSBvdGhlciBtaXJyb3JlZCBidWZmZXIgZmFpbHMuCi0JCSAqCi0JCSAqIFRoZSAnbWFzdGVyJyByZXByZXNlbnRzIHRoZSBjb21wb3NpdGUgSU8gb3BlcmF0aW9uIHRvCi0JCSAqIHVzZXItc2lkZS4gU28gaWYgc29tZXRoaW5nIHdhaXRzIGZvciBJTywgdGhlbiBpdCB3aWxsCi0JCSAqIHdhaXQgZm9yIHRoZSAnbWFzdGVyJyBiaW8uCisJaWYgKHVwdG9kYXRlKQorCQlzZXRfYml0KFIxQklPX1VwdG9kYXRlLCAmcjFfYmlvLT5zdGF0ZSk7CisJZWxzZSB7CisJCS8qIElmIGFsbCBvdGhlciBkZXZpY2VzIGhhdmUgZmFpbGVkLCB3ZSB3YW50IHRvIHJldHVybgorCQkgKiB0aGUgZXJyb3IgdXB3YXJkcyByYXRoZXIgdGhhbiBmYWlsIHRoZSBsYXN0IGRldmljZS4KKwkJICogSGVyZSB3ZSByZWRlZmluZSAidXB0b2RhdGUiIHRvIG1lYW4gIkRvbid0IHdhbnQgdG8gcmV0cnkiCiAJCSAqLwotCQlpZiAodXB0b2RhdGUpCi0JCQlzZXRfYml0KFIxQklPX1VwdG9kYXRlLCAmcjFfYmlvLT5zdGF0ZSk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlpZiAocjFfYmlvLT5tZGRldi0+ZGVncmFkZWQgPT0gY29uZi0+cmFpZF9kaXNrcyB8fAorCQkgICAgKHIxX2Jpby0+bWRkZXYtPmRlZ3JhZGVkID09IGNvbmYtPnJhaWRfZGlza3MtMSAmJgorCQkgICAgICF0ZXN0X2JpdChGYXVsdHksICZjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldi0+ZmxhZ3MpKSkKKwkJCXVwdG9kYXRlID0gMTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwl9CiAKKwlpZiAodXB0b2RhdGUpCiAJCXJhaWRfZW5kX2Jpb19pbyhyMV9iaW8pOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCS8qCiAJCSAqIG9vcHMsIHJlYWQgZXJyb3I6CiAJCSAqLwpAQCAtOTkyLDEzICs5OTYsMTQgQEAKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAJCW1kZGV2LT5kZWdyYWRlZCsrOworCQlzZXRfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJLyoKIAkJICogaWYgcmVjb3ZlcnkgaXMgcnVubmluZywgbWFrZSBzdXJlIGl0IGFib3J0cy4KIAkJICovCiAJCXNldF9iaXQoTURfUkVDT1ZFUllfRVJSLCAmbWRkZXYtPnJlY292ZXJ5KTsKLQl9Ci0Jc2V0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7CisJfSBlbHNlCisJCXNldF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOwogCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOwogCXByaW50ayhLRVJOX0FMRVJUICJyYWlkMTogRGlzayBmYWlsdXJlIG9uICVzLCBkaXNhYmxpbmcgZGV2aWNlLiBcbiIKIAkJIglPcGVyYXRpb24gY29udGludWluZyBvbiAlZCBkZXZpY2VzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IDhkNTk5MTQuLjA2MTM3NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTM1Myw4ICszNTMsOCBAQAogCXN0cnVjdCBrbWVtX2NhY2hlICpzYzsKIAlpbnQgZGV2cyA9IGNvbmYtPnJhaWRfZGlza3M7CiAKLQlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMF0sICJyYWlkNS8lcyIsIG1kbmFtZShjb25mLT5tZGRldikpOwotCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZVsxXSwgInJhaWQ1LyVzLWFsdCIsIG1kbmFtZShjb25mLT5tZGRldikpOworCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZVswXSwgInJhaWQ1LSVzIiwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7CisJc3ByaW50Zihjb25mLT5jYWNoZV9uYW1lWzFdLCAicmFpZDUtJXMtYWx0IiwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7CiAJY29uZi0+YWN0aXZlX25hbWUgPSAwOwogCXNjID0ga21lbV9jYWNoZV9jcmVhdGUoY29uZi0+Y2FjaGVfbmFtZVtjb25mLT5hY3RpdmVfbmFtZV0sCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzdHJpcGVfaGVhZCkrKGRldnMtMSkqc2l6ZW9mKHN0cnVjdCByNWRldiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL0tjb25maWcKaW5kZXggOTFkMjU3OS4uNjI0YjIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwpAQCAtMyw2ICszLDcgQEAKICMKIAogbWVudSAiTXVsdGltZWRpYSBkZXZpY2VzIgorCWRlcGVuZHMgb24gSEFTX0lPTUVNCiAKIGNvbmZpZyBWSURFT19ERVYKIAl0cmlzdGF0ZSAiVmlkZW8gRm9yIExpbnV4IgpAQCAtODYsNiArODcsMTQgQEAKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gSTJDCiAKK2NvbmZpZyBEQUIKKwlib29sZWFuICJEQUIgYWRhcHRlcnMiCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgQWxsb3cgc2VsZWN0aW5nIHN1cHBvcnQgZm9yIGZvciBEaWdpdGFsIEF1ZGlvIEJyb2FkY2FzdGluZyAoREFCKQorCSAgUmVjZWl2ZXIgYWRhcHRlcnMuCisKK2lmIERBQgogY29uZmlnIFVTQl9EQUJVU0IKIAl0cmlzdGF0ZSAiREFCVVNCIGRyaXZlciIKIAlkZXBlbmRzIG9uIFVTQgpAQCAtOTksNSArMTA4LDYgQEAKIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZGFidXNiLgorZW5kaWYgIyBEQUIKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvTWFrZWZpbGUKaW5kZXggYzU3OGE1Mi4uOGZhMTk5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogb2JqLXkgOj0gY29tbW9uLwogb2JqLSQoQ09ORklHX1ZJREVPX0RFVikgKz0gdmlkZW8vCiBvYmotJChDT05GSUdfVklERU9fREVWKSArPSByYWRpby8KLW9iai0kKENPTkZJR19EVkIpICAgICAgICs9IGR2Yi8KK29iai0kKENPTkZJR19EVkJfQ09SRSkgICs9IGR2Yi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKaW5kZXggODZjYmRiYy4uZWYzZTU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKQEAgLTEzNiwyOCArMTM2LDQ1IEBACiAJY2hhciAqbWVtID0gdm1hbGxvY18zMihsZW5ndGgpOwogCWludCBzbGVuID0gMDsKIAotCWlmIChOVUxMID09IG1lbSkgewotCQlyZXR1cm4gTlVMTDsKLQl9CisJaWYgKE5VTEwgPT0gbWVtKQorCQlnb3RvIGVycl9udWxsOwogCi0JaWYgKCEocHQtPnNsaXN0ID0gdm1hbGxvY190b19zZyhtZW0sIHBhZ2VzKSkpIHsKLQkJdmZyZWUobWVtKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmICghKHB0LT5zbGlzdCA9IHZtYWxsb2NfdG9fc2cobWVtLCBwYWdlcykpKQorCQlnb3RvIGVycl9mcmVlX21lbTsKIAotCWlmIChzYWE3MTQ2X3BndGFibGVfYWxsb2MocGNpLCBwdCkpIHsKLQkJa2ZyZWUocHQtPnNsaXN0KTsKLQkJcHQtPnNsaXN0ID0gTlVMTDsKLQkJdmZyZWUobWVtKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChzYWE3MTQ2X3BndGFibGVfYWxsb2MocGNpLCBwdCkpCisJCWdvdG8gZXJyX2ZyZWVfc2xpc3Q7CiAKLQlzbGVuID0gcGNpX21hcF9zZyhwY2kscHQtPnNsaXN0LHBhZ2VzLFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JaWYgKDAgIT0gc2FhNzE0Nl9wZ3RhYmxlX2J1aWxkX3NpbmdsZShwY2ksIHB0LCBwdC0+c2xpc3QsIHNsZW4pKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlwdC0+bmVudHMgPSBwYWdlczsKKwlzbGVuID0gcGNpX21hcF9zZyhwY2kscHQtPnNsaXN0LHB0LT5uZW50cyxQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWlmICgwID09IHNsZW4pCisJCWdvdG8gZXJyX2ZyZWVfcGd0YWJsZTsKKworCWlmICgwICE9IHNhYTcxNDZfcGd0YWJsZV9idWlsZF9zaW5nbGUocGNpLCBwdCwgcHQtPnNsaXN0LCBzbGVuKSkKKwkJZ290byBlcnJfdW5tYXBfc2c7CiAKIAlyZXR1cm4gbWVtOworCitlcnJfdW5tYXBfc2c6CisJcGNpX3VubWFwX3NnKHBjaSwgcHQtPnNsaXN0LCBwdC0+bmVudHMsIFBDSV9ETUFfRlJPTURFVklDRSk7CitlcnJfZnJlZV9wZ3RhYmxlOgorCXNhYTcxNDZfcGd0YWJsZV9mcmVlKHBjaSwgcHQpOworZXJyX2ZyZWVfc2xpc3Q6CisJa2ZyZWUocHQtPnNsaXN0KTsKKwlwdC0+c2xpc3QgPSBOVUxMOworZXJyX2ZyZWVfbWVtOgorCXZmcmVlKG1lbSk7CitlcnJfbnVsbDoKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBzYWE3MTQ2X3ZmcmVlX2Rlc3Ryb3lfcGd0YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjaGFyICptZW0sIHN0cnVjdCBzYWE3MTQ2X3BndGFibGUgKnB0KQoreworCXBjaV91bm1hcF9zZyhwY2ksIHB0LT5zbGlzdCwgcHQtPm5lbnRzLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXNhYTcxNDZfcGd0YWJsZV9mcmVlKHBjaSwgcHQpOworCWtmcmVlKHB0LT5zbGlzdCk7CisJcHQtPnNsaXN0ID0gTlVMTDsKKwl2ZnJlZShtZW0pOwogfQogCiB2b2lkIHNhYTcxNDZfcGd0YWJsZV9mcmVlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBzYWE3MTQ2X3BndGFibGUgKnB0KQpAQCAtMTY2LDggKzE4Myw2IEBACiAJCXJldHVybjsKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBjaSwgcHQtPnNpemUsIHB0LT5jcHUsIHB0LT5kbWEpOwogCXB0LT5jcHUgPSBOVUxMOwotCWtmcmVlKHB0LT5zbGlzdCk7Ci0JcHQtPnNsaXN0ID0gTlVMTDsKIH0KIAogaW50IHNhYTcxNDZfcGd0YWJsZV9hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGNpLCBzdHJ1Y3Qgc2FhNzE0Nl9wZ3RhYmxlICpwdCkKQEAgLTUyOCw2ICs1NDMsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc2FhNzE0Nl9wZ3RhYmxlX2ZyZWUpOwogRVhQT1JUX1NZTUJPTF9HUEwoc2FhNzE0Nl9wZ3RhYmxlX2J1aWxkX3NpbmdsZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChzYWE3MTQ2X3ZtYWxsb2NfYnVpbGRfcGd0YWJsZSk7CitFWFBPUlRfU1lNQk9MX0dQTChzYWE3MTQ2X3ZmcmVlX2Rlc3Ryb3lfcGd0YWJsZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChzYWE3MTQ2X3dhaXRfZm9yX2RlYmlfZG9uZSk7CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHNhYTcxNDZfc2V0Z3Bpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCmluZGV4IGMxOGE1ZGEuLmI0NzcwYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCkBAIC0zMDcsNyArMzA3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHNhYTcxNDZfdmlkZW9fZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiBzdGF0aWMgaW50IGZvcHNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCmluZGV4IGE5N2M4ZjUuLmVmZDJiNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZwpAQCAtMiwyNSArMiwxNyBAQAogIyBNdWx0aW1lZGlhIGRldmljZSBjb25maWd1cmF0aW9uCiAjCiAKLW1lbnUgIkRpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMiCi0KLWNvbmZpZyBEVkIKLQlib29sICJEVkIgRm9yIExpbnV4IgotCWRlcGVuZHMgb24gTkVUICYmIElORVQKLQktLS1oZWxwLS0tCi0JICBTdXBwb3J0IERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIGhhcmR3YXJlLiAgRW5hYmxlIHRoaXMgaWYgeW91Ci0JICBvd24gYSBEVkIgYWRhcHRlciBhbmQgd2FudCB0byB1c2UgaXQgb3IgaWYgeW91IGNvbXBpbGUgTGludXggZm9yCi0JICBhIGRpZ2l0YWwgU2V0VG9wQm94LgotCi0JICBBUEkgc3BlY3MgYW5kIHVzZXIgdG9vbHMgYXJlIGF2YWlsYWJsZSBmcm9tIDxodHRwOi8vd3d3LmxpbnV4dHYub3JnLz4uCi0KLQkgIFBsZWFzZSByZXBvcnQgcHJvYmxlbXMgcmVnYXJkaW5nIHRoaXMgZHJpdmVyIHRvIHRoZSBMaW51eERWQgotCSAgbWFpbGluZyBsaXN0LgotCi0JICBJZiB1bnN1cmUgc2F5IE4uCi0KIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvS2NvbmZpZyIKIAorbWVudWNvbmZpZyBEVkJfQ0FQVFVSRV9EUklWRVJTCisJYm9vbCAiRFZCL0FUU0MgYWRhcHRlcnMiCisJZGVwZW5kcyBvbiBEVkJfQ09SRQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIHRvIHNlbGVjdCBEaWdpdGFsIFRWIGFkYXB0ZXJzCisKK2lmIERWQl9DQVBUVVJFX0RSSVZFUlMKKwogY29tbWVudCAiU3VwcG9ydGVkIFNBQTcxNDYgYmFzZWQgUENJIEFkYXB0ZXJzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQwogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnIgpAQCAtNDgsNCArNDAsNCBAQAogCWRlcGVuZHMgb24gRFZCX0NPUkUKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWciCiAKLWVuZG1lbnUKK2VuZGlmICMgRFZCX0NBUFRVUkVfRFJJVkVSUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwppbmRleCAwMzkzYTNkLi5lOTA4ZTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwpAQCAtMTcyMSw5ICsxNzIxLDYgQEAKIAkJc3ltYm9sX3B1dChkc3RfY2FfYXR0YWNoKTsKICNlbmRpZgogCX0KLSNpZmRlZiBDT05GSUdfRFZCX0NPUkVfQVRUQUNICi0Jc3ltYm9sX3B1dChkc3RfYXR0YWNoKTsKLSNlbmRpZgogCWtmcmVlKHN0YXRlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NvbW1vbi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NvbW1vbi5oCmluZGV4IDNiZjA4NGYuLjg3NjIzZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jb21tb24uaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY29tbW9uLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNpZm5kZWYgRFNUX0NPTU1PTl9ICiAjZGVmaW5lIERTVF9DT01NT05fSAogCi0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL0tjb25maWcKaW5kZXggMTk5MGVkYS4uZTNlNjgzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9LY29uZmlnCkBAIC0xLDEyICsxLDIyIEBACiBjb25maWcgRFZCX0NPUkUKLQl0cmlzdGF0ZSAiRFZCIENvcmUgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIERWQgorCXRyaXN0YXRlICJEVkIgZm9yIExpbnV4IgorCWRlcGVuZHMgb24gTkVUICYmIElORVQKIAlzZWxlY3QgQ1JDMzIKIAloZWxwCisJICBTdXBwb3J0IERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIGhhcmR3YXJlLiAgRW5hYmxlIHRoaXMgaWYgeW91CisJICBvd24gYSBEVkIgYWRhcHRlciBhbmQgd2FudCB0byB1c2UgaXQgb3IgaWYgeW91IGNvbXBpbGUgTGludXggZm9yCisJICBhIGRpZ2l0YWwgU2V0VG9wQm94LgorCiAJICBEVkIgY29yZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgZGV2aWNlIGhhbmRsaW5nLCBzb2Z0d2FyZSBmYWxsYmFja3MgZXRjLgogCSAgU2F5IFkgd2hlbiB5b3UgaGF2ZSBhIERWQiBjYXJkIGFuZCB3YW50IHRvIHVzZSBpdC4gU2F5IFkgaWYgeW91ciB3YW50CiAJICB0byBidWlsZCB5b3VyIGRyaXZlcnMgb3V0c2lkZSB0aGUga2VybmVsLCBidXQgbmVlZCB0aGUgRFZCIGNvcmUuIEFsbAogCSAgaW4ta2VybmVsIGRyaXZlcnMgd2lsbCBzZWxlY3QgdGhpcyBhdXRvbWF0aWNhbGx5IGlmIG5lZWRlZC4KKworCSAgQVBJIHNwZWNzIGFuZCB1c2VyIHRvb2xzIGFyZSBhdmFpbGFibGUgZnJvbSA8aHR0cDovL3d3dy5saW51eHR2Lm9yZy8+LgorCisJICBQbGVhc2UgcmVwb3J0IHByb2JsZW1zIHJlZ2FyZGluZyB0aGlzIGRyaXZlciB0byB0aGUgTGludXhEVkIKKwkgIG1haWxpbmcgbGlzdC4KKwogCSAgSWYgdW5zdXJlIHNheSBOLgogCiBjb25maWcgRFZCX0NPUkVfQVRUQUNICmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCmluZGV4IGUyM2Q4YTAuLmE5ZmEzMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIHsKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2OwogCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmR2YmRldmZvcHM7Ci0KKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbHNkZXY7CiAJaW50IGlkOwogCiAJbXV0ZXhfbG9jaygmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOwpAQCAtMjQyLDggKzI0MiwxNSBAQAogCiAJbXV0ZXhfdW5sb2NrKCZkdmJkZXZfcmVnaXN0ZXJfbG9jayk7CiAKLQljbGFzc19kZXZpY2VfY3JlYXRlKGR2Yl9jbGFzcywgTlVMTCwgTUtERVYoRFZCX01BSk9SLCBudW1zMm1pbm9yKGFkYXAtPm51bSwgdHlwZSwgaWQpKSwKLQkJCSAgICBhZGFwLT5kZXZpY2UsICJkdmIlZC4lcyVkIiwgYWRhcC0+bnVtLCBkbmFtZXNbdHlwZV0sIGlkKTsKKwljbHNkZXYgPSBjbGFzc19kZXZpY2VfY3JlYXRlKGR2Yl9jbGFzcywgTlVMTCwgTUtERVYoRFZCX01BSk9SLAorCQkJCSAgICAgbnVtczJtaW5vcihhZGFwLT5udW0sIHR5cGUsIGlkKSksCisJCQkJICAgICBhZGFwLT5kZXZpY2UsICJkdmIlZC4lcyVkIiwgYWRhcC0+bnVtLAorCQkJCSAgICAgZG5hbWVzW3R5cGVdLCBpZCk7CisJaWYgKElTX0VSUihjbHNkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjcmVhdGUgZGV2aWNlIGR2YiVkLiVzJWQgKCVsZClcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGFkYXAtPm51bSwgZG5hbWVzW3R5cGVdLCBpZCwgUFRSX0VSUihjbHNkZXYpKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2xzZGV2KTsKKwl9CiAKIAlkcHJpbnRrKCJEVkI6IHJlZ2lzdGVyIGFkYXB0ZXIlZC8lcyVkIEAgbWlub3I6ICVpICgweCUwMngpXG4iLAogCQlhZGFwLT5udW0sIGRuYW1lc1t0eXBlXSwgaWQsIG51bXMybWlub3IoYWRhcC0+bnVtLCB0eXBlLCBpZCksCkBAIC00MzEsNyArNDM4LDcgQEAKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoRFZCX01BSk9SLCAwKSwgTUFYX0RWQl9NSU5PUlMpOwogfQogCi1tb2R1bGVfaW5pdChpbml0X2R2YmRldik7CitzdWJzeXNfaW5pdGNhbGwoaW5pdF9kdmJkZXYpOwogbW9kdWxlX2V4aXQoZXhpdF9kdmJkZXYpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBDb3JlIERyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IDk3NzE1ZjcuLjQwMzA4MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTE5LDYgKzE5LDcgQEAKICNkZWZpbmUgVVNCX1ZJRF9DT01QUk9fVU5LCQkJMHgxNDVmCiAjZGVmaW5lIFVTQl9WSURfQ1lQUkVTUwkJCQkweDA0YjQKICNkZWZpbmUgVVNCX1ZJRF9ESUJDT00JCQkJMHgxMGI4CisjZGVmaW5lIFVTQl9WSURfRFBPU0gJCQkJMHgxNDk4CiAjZGVmaW5lIFVTQl9WSURfRFZJQ08JCQkJMHgwZmU5CiAjZGVmaW5lIFVTQl9WSURfRU1QSUEJCQkJMHhlYjFhCiAjZGVmaW5lIFVTQl9WSURfR0VOUElYCQkJCTB4MDljMApAQCAtNjEsNiArNjIsOCBAQAogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9TVEs3NzAwUAkJCQkweDFlMTQKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzcwMFBfUEMJCQkweDFlNzgKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fQU5DSE9SXzIxMzVfQ09MRAkJCTB4MjEzMQorI2RlZmluZSBVU0JfUElEX0RQT1NIX005MjA2X0NPTEQJCQkweDkyMDYKKyNkZWZpbmUgVVNCX1BJRF9EUE9TSF9NOTIwNl9XQVJNCQkJMHhhMDkwCiAjZGVmaW5lIFVTQl9QSURfVU5JV0lMTF9TVEs3NzAwUAkJCTB4NjAwMwogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCX0NPTEQJCQkweDBmYTAKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQl9XQVJNCQkJMHgwZmExCkBAIC0xNDUsNiArMTQ4LDggQEAKICNkZWZpbmUgVVNCX1BJRF9NU0lfRElHSV9WT1hfTUlOSV9JSQkJCTB4MTUxMwogI2RlZmluZSBVU0JfUElEX09QRVJBMV9DT0xECQkJCTB4MjgzMAogI2RlZmluZSBVU0JfUElEX09QRVJBMV9XQVJNCQkJCTB4MzgyOQorI2RlZmluZSBVU0JfUElEX0xJRkVWSUVXX1RWX1dBTEtFUl9UV0lOX0NPTEQJCTB4MDUxNAorI2RlZmluZSBVU0JfUElEX0xJRkVWSUVXX1RWX1dBTEtFUl9UV0lOX1dBUk0JCTB4MDUxMwogCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCmluZGV4IDY4ZWQzYTcuLjkyMDBhMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKQEAgLTMsNyArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtNiBQYXRyaWNrIEJvZXR0Y2hlciAocGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZSkKICAqIHNlZSBkdmItdXNiLWluaXQuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgogICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBmdW5jdGlvbnMgZm9yIGluaXRpYWxpemluZyB0aGUgdGhlIGlucHV0LWRldmljZSBhbmQgZm9yIGhhbmRsaW5nIHJlbW90ZS1jb250cm9sLXF1ZXJpZXMuCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIGZvciBpbml0aWFsaXppbmcgdGhlIGlucHV0LWRldmljZSBhbmQgZm9yIGhhbmRsaW5nIHJlbW90ZS1jb250cm9sLXF1ZXJpZXMuCiAgKi8KICNpbmNsdWRlICJkdmItdXNiLWNvbW1vbi5oIgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaAppbmRleCAwZDcyMTczMS4uNmY4MjRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmgKQEAgLTExOSw3ICsxMTksNyBAQAogICogQGNhcHM6IGNhcGFiaWxpdGllcyBvZiB0aGUgRFZCIFVTQiBkZXZpY2UuCiAgKiBAcGlkX2ZpbHRlcl9jb3VudDogbnVtYmVyIG9mIFBJRCBmaWx0ZXIgcG9zaXRpb24gaW4gdGhlIG9wdGlvbmFsIGhhcmR3YXJlCiAgKiAgUElELWZpbHRlci4KLSAqIEBzdHJlYW1pbmdfY3J0bDogY2FsbGVkIHRvIHN0YXJ0IGFuZCBzdG9wIHRoZSBNUEVHMi1UUyBzdHJlYW1pbmcgb2YgdGhlCisgKiBAc3RyZWFtaW5nX2N0cmw6IGNhbGxlZCB0byBzdGFydCBhbmQgc3RvcCB0aGUgTVBFRzItVFMgc3RyZWFtaW5nIG9mIHRoZQogICogIGRldmljZSAobm90IFVSQiBzdWJtaXR0aW5nL2tpbGxpbmcpLgogICogQHBpZF9maWx0ZXJfY3RybDogY2FsbGVkIHRvIGVuL2Rpc2FibGUgdGhlIFBJRCBmaWx0ZXIsIGlmIGFueS4KICAqIEBwaWRfZmlsdGVyOiBjYWxsZWQgdG8gc2V0L3Vuc2V0IGEgUElEIGZvciBmaWx0ZXJpbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKaW5kZXggNDVkN2JjMi4uYzU0NmRkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYwpAQCAtMyw4ICszLDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBBYXBvIFRhaGtvbGEgKGFldEByYXN0ZXJidXJuLm9yZykKICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqCVNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICoJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCiAgKgogICogc2VlIERvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiIGZvciBtb3JlIGluZm9ybWF0aW9uCiAgKi8KQEAgLTIyLDI2ICsyMiw3IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsZHZiX3VzYl9tOTIweF9kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPXJjIChvci1hYmxlKSkuIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgbWVnYXNreV9yY19rZXlzIFtdID0gewotCXsgMHgwLCAweDEyLCBLRVlfUE9XRVIgfSwKLQl7IDB4MCwgMHgxZSwgS0VZX0NZQ0xFV0lORE9XUyB9LCAvKiBtaW4vbWF4ICovCi0JeyAweDAsIDB4MDIsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MCwgMHgwNSwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDAsIDB4MDMsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwLCAweDA2LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwLCAweDA0LCBLRVlfTVVURSB9LAotCXsgMHgwLCAweDA3LCBLRVlfT0sgfSwgLyogVFMgKi8KLQl7IDB4MCwgMHgwOCwgS0VZX1NUT1AgfSwKLQl7IDB4MCwgMHgwOSwgS0VZX01FTlUgfSwgLyogc3dhcCAqLwotCXsgMHgwLCAweDBhLCBLRVlfUkVXSU5EIH0sCi0JeyAweDAsIDB4MWIsIEtFWV9QQVVTRSB9LAotCXsgMHgwLCAweDFmLCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MCwgMHgwYywgS0VZX1JFQ09SRCB9LAotCXsgMHgwLCAweDBkLCBLRVlfQ0FNRVJBIH0sIC8qIHNjcmVlbnNob3QgKi8KLQl7IDB4MCwgMHgwZSwgS0VZX0NPRkZFRSB9LCAvKiAiTVRTIiAqLwotfTsKLQotc3RhdGljIGlubGluZSBpbnQgbTkyMDZfcmVhZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLFwKK3N0YXRpYyBpbmxpbmUgaW50IG05MjB4X3JlYWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IHJlcXVlc3QsIHUxNiB2YWx1ZSwKIAkJCSAgICAgdTE2IGluZGV4LCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKIHsKIAlpbnQgcmV0OwpAQCAtNTUsMTQgKzM2LDE0IEBACiAJfQogCiAJaWYgKHJldCAhPSBzaXplKSB7Ci0JCWRlYl9yYygibTkyMHhfcmVhZCA9IG5vIGRhdGFcbiIpOworCQlkZWIoIm05MjB4X3JlYWQgPSBubyBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG05MjA2X3dyaXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCByZXF1ZXN0LAorc3RhdGljIGlubGluZSBpbnQgbTkyMHhfd3JpdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IHJlcXVlc3QsCiAJCQkgICAgICB1MTYgdmFsdWUsIHUxNiBpbmRleCkKIHsKIAlpbnQgcmV0OwpAQCAtNzQsMzIgKzU1LDQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtOTIwNl9pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3N0YXRpYyBpbnQgbTkyMHhfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHN0cnVjdCBtOTIweF9pbml0cyAqcmNfc2VxKQogewogCWludCByZXQgPSAwOwogCiAJLyogUmVtb3RlIGNvbnRyb2xsZXIgaW5pdC4gKi8KIAlpZiAoZC0+cHJvcHMucmNfcXVlcnkpIHsKLQkJaWYgKChyZXQgPSBtOTIwNl93cml0ZShkLT51ZGV2LCBNOTIwNl9DT1JFLCAweGE4LCBNOTIwNl9SQ19JTklUMikpICE9IDApCi0JCQlyZXR1cm4gcmV0OworCQlkZWIoIkluaXRpYWxpc2luZyByZW1vdGUgY29udHJvbFxuIik7CisJCXdoaWxlIChyY19zZXEtPmFkZHJlc3MpIHsKKwkJCWlmICgocmV0ID0gbTkyMHhfd3JpdGUoZC0+dWRldiwgTTkyMDZfQ09SRSwKKwkJCQkJICAgICAgIHJjX3NlcS0+ZGF0YSwKKwkJCQkJICAgICAgIHJjX3NlcS0+YWRkcmVzcykpICE9IDApIHsKKwkJCQlkZWIoIkluaXRpYWxpc2luZyByZW1vdGUgY29udHJvbCBmYWlsZWRcbiIpOworCQkJCXJldHVybiByZXQ7CisJCQl9CiAKLQkJaWYgKChyZXQgPSBtOTIwNl93cml0ZShkLT51ZGV2LCBNOTIwNl9DT1JFLCAweDUxLCBNOTIwNl9SQ19JTklUMSkpICE9IDApCi0JCQlyZXR1cm4gcmV0OworCQkJcmNfc2VxKys7CisJCX0KKworCQlkZWIoIkluaXRpYWxpc2luZyByZW1vdGUgY29udHJvbCBzdWNjZXNzXG4iKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG05MjA2X3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKK3N0YXRpYyBpbnQgbTkyMHhfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQogewotCXN0cnVjdCBtOTIwNl9zdGF0ZSAqbSA9IGQtPnByaXY7CisJc3RydWN0IG05MjB4X3N0YXRlICptID0gZC0+cHJpdjsKIAlpbnQgaSwgcmV0ID0gMDsKIAl1OCByY19zdGF0ZVsyXTsKIAotCWlmICgocmV0ID0gbTkyMDZfcmVhZChkLT51ZGV2LCBNOTIwNl9DT1JFLCAweDAsIE05MjA2X1JDX1NUQVRFLCByY19zdGF0ZSwgMSkpICE9IDApCisJaWYgKChyZXQgPSBtOTIweF9yZWFkKGQtPnVkZXYsIE05MjA2X0NPUkUsIDB4MCwgTTkyMDZfUkNfU1RBVEUsIHJjX3N0YXRlLCAxKSkgIT0gMCkKIAkJZ290byB1bmxvY2s7CiAKLQlpZiAoKHJldCA9IG05MjA2X3JlYWQoZC0+dWRldiwgTTkyMDZfQ09SRSwgMHgwLCBNOTIwNl9SQ19LRVksIHJjX3N0YXRlICsgMSwgMSkpICE9IDApCisJaWYgKChyZXQgPSBtOTIweF9yZWFkKGQtPnVkZXYsIE05MjA2X0NPUkUsIDB4MCwgTTkyMDZfUkNfS0VZLCByY19zdGF0ZSArIDEsIDEpKSAhPSAwKQogCQlnb3RvIHVubG9jazsKIAogCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykKQEAgLTExMSw2ICsxMDAsMTQgQEAKIAkJCQkqc3RhdGUgPSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ7CiAJCQkJZ290byB1bmxvY2s7CiAKKwkJCWNhc2UgMHg4ODogLyogZnJhbWluZyBlcnJvciBvciAiaW52YWxpZCBjb2RlIiAqLworCQkJY2FzZSAweDk5OgorCQkJY2FzZSAweGMwOgorCQkJY2FzZSAweGQ4OgorCQkJCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKKwkJCQltLT5yZXBfY291bnQgPSAwOworCQkJCWdvdG8gdW5sb2NrOworCiAJCQljYXNlIDB4OTM6CiAJCQljYXNlIDB4OTI6CiAJCQkJbS0+cmVwX2NvdW50ID0gMDsKQEAgLTExOCwzMSArMTE1LDMyIEBACiAJCQkJZ290byB1bmxvY2s7CiAKIAkJCWNhc2UgMHg5MToKLQkJCQkvKiBGb3IgY29tZm9ydC4gKi8KKwkJCQkvKiBwcmV2ZW50IGltbWVkaWF0ZSBhdXRvLXJlcGVhdCAqLwogCQkJCWlmICgrK20tPnJlcF9jb3VudCA+IDIpCiAJCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUkVQRUFUOworCQkJCWVsc2UKKwkJCQkJKnN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOwogCQkJCWdvdG8gdW5sb2NrOwogCiAJCQlkZWZhdWx0OgotCQkJCWRlYl9yYygiVW5leHBlY3RlZCByYyByZXNwb25zZSAleFxuIiwgcmNfc3RhdGVbMF0pOworCQkJCWRlYigiVW5leHBlY3RlZCByYyBzdGF0ZSAlMDJ4XG4iLCByY19zdGF0ZVswXSk7CiAJCQkJKnN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOwogCQkJCWdvdG8gdW5sb2NrOwogCQkJfQogCQl9CiAKIAlpZiAocmNfc3RhdGVbMV0gIT0gMCkKLQkJZGViX3JjKCJVbmtub3duIHJjIGtleSAleFxuIiwgcmNfc3RhdGVbMV0pOworCQlkZWIoIlVua25vd24gcmMga2V5ICUwMnhcbiIsIHJjX3N0YXRlWzFdKTsKIAogCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKIAotCXVubG9jazoKKyB1bmxvY2s6CiAKIAlyZXR1cm4gcmV0OwogfQogCiAvKiBJMkMgKi8KLXN0YXRpYyBpbnQgbTkyMDZfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwKLQkJCSAgaW50IG51bSkKK3N0YXRpYyBpbnQgbTkyMHhfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwgaW50IG51bSkKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOwogCWludCBpLCBqOwpAQCAtMTU1LDMzICsxNTMsNDAgQEAKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJaWYgKG1zZ1tpXS5mbGFncyAmIChJMkNfTV9OT19SRF9BQ0t8STJDX01fSUdOT1JFX05BS3xJMkNfTV9URU4pIHx8Ci0JCSAgICBtc2dbaV0ubGVuID09IDApIHsKLQkJCS8qIEZvciBhIDAgYnl0ZSBtZXNzYWdlLCBJIHRoaW5rIHNlbmRpbmcgdGhlIGFkZHJlc3MgdG8gaW5kZXggMHg4MHwweDQwCi0JCQkgKiB3b3VsZCBiZSB0aGUgY29ycmVjdCB0aGluZyB0byBkby4gIEhvd2V2ZXIsIHplcm8gYnl0ZSBtZXNzYWdlcyBhcmUKLQkJCSAqIG9ubHkgdXNlZCBmb3IgcHJvYmluZywgYW5kIHNpbmNlIHdlIGRvbid0IGtub3cgaG93IHRvIGdldCB0aGUgc2xhdmUncwotCQkJICogYWNrLCB3ZSBjYW4ndCBwcm9iZS4gKi8KKwkJaWYgKG1zZ1tpXS5mbGFncyAmIChJMkNfTV9OT19SRF9BQ0sgfCBJMkNfTV9JR05PUkVfTkFLIHwgSTJDX01fVEVOKSB8fCBtc2dbaV0ubGVuID09IDApIHsKKwkJCS8qIEZvciBhIDAgYnl0ZSBtZXNzYWdlLCBJIHRoaW5rIHNlbmRpbmcgdGhlIGFkZHJlc3MKKwkJCSAqIHRvIGluZGV4IDB4ODB8MHg0MCB3b3VsZCBiZSB0aGUgY29ycmVjdCB0aGluZyB0bworCQkJICogZG8uICBIb3dldmVyLCB6ZXJvIGJ5dGUgbWVzc2FnZXMgYXJlIG9ubHkgdXNlZCBmb3IKKwkJCSAqIHByb2JpbmcsIGFuZCBzaW5jZSB3ZSBkb24ndCBrbm93IGhvdyB0byBnZXQgdGhlCisJCQkgKiBzbGF2ZSdzIGFjaywgd2UgY2FuJ3QgcHJvYmUuICovCiAJCQlyZXQgPSAtRU5PVFNVUFA7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQkvKiBTZW5kIFNUQVJUICYgYWRkcmVzcy9SVyBiaXQgKi8KIAkJaWYgKCEobXNnW2ldLmZsYWdzICYgSTJDX01fTk9TVEFSVCkpIHsKLQkJCWlmICgocmV0ID0gbTkyMDZfd3JpdGUoZC0+dWRldiwgTTkyMDZfSTJDLCAobXNnW2ldLmFkZHI8PDEpfChtc2dbaV0uZmxhZ3MmSTJDX01fUkQ/MHgwMTowKSwgMHg4MCkpICE9IDApCisJCQlpZiAoKHJldCA9IG05MjB4X3dyaXRlKGQtPnVkZXYsIE05MjA2X0kyQywKKwkJCQkJKG1zZ1tpXS5hZGRyIDw8IDEpIHwKKwkJCQkJKG1zZ1tpXS5mbGFncyAmIEkyQ19NX1JEID8gMHgwMSA6IDApLCAweDgwKSkgIT0gMCkKIAkJCQlnb3RvIHVubG9jazsKIAkJCS8qIFNob3VsZCBjaGVjayBmb3IgYWNrIGhlcmUsIGlmIHdlIGtuZXcgaG93LiAqLwogCQl9CiAJCWlmIChtc2dbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgewogCQkJZm9yIChqID0gMDsgaiA8IG1zZ1tpXS5sZW47IGorKykgewotCQkJCS8qIExhc3QgYnl0ZSBvZiB0cmFuc2FjdGlvbj8gU2VuZCBTVE9QLCBvdGhlcndpc2Ugc2VuZCBBQ0suICovCi0JCQkJaW50IHN0b3AgPSAoaSsxID09IG51bSAmJiBqKzEgPT0gbXNnW2ldLmxlbik/MHg0MDoweDAxOwotCQkJCWlmICgocmV0ID0gbTkyMDZfcmVhZChkLT51ZGV2LCBNOTIwNl9JMkMsIDB4MCwgMHgyMHxzdG9wLCAmbXNnW2ldLmJ1ZltqXSwgMSkpICE9IDApCisJCQkJLyogTGFzdCBieXRlIG9mIHRyYW5zYWN0aW9uPworCQkJCSAqIFNlbmQgU1RPUCwgb3RoZXJ3aXNlIHNlbmQgQUNLLiAqLworCQkJCWludCBzdG9wID0gKGkrMSA9PSBudW0gJiYgaisxID09IG1zZ1tpXS5sZW4pID8gMHg0MCA6IDB4MDE7CisKKwkJCQlpZiAoKHJldCA9IG05MjB4X3JlYWQoZC0+dWRldiwgTTkyMDZfSTJDLCAweDAsCisJCQkJCQkgICAgICAweDIwIHwgc3RvcCwKKwkJCQkJCSAgICAgICZtc2dbaV0uYnVmW2pdLCAxKSkgIT0gMCkKIAkJCQkJZ290byB1bmxvY2s7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlmb3IgKGogPSAwOyBqIDwgbXNnW2ldLmxlbjsgaisrKSB7CiAJCQkJLyogTGFzdCBieXRlIG9mIHRyYW5zYWN0aW9uPyBUaGVuIHNlbmQgU1RPUC4gKi8KLQkJCQlpbnQgc3RvcCA9IChpKzEgPT0gbnVtICYmIGorMSA9PSBtc2dbaV0ubGVuKT8weDQwOjB4MDA7Ci0JCQkJaWYgKChyZXQgPSBtOTIwNl93cml0ZShkLT51ZGV2LCBNOTIwNl9JMkMsIG1zZ1tpXS5idWZbal0sIHN0b3ApKSAhPSAwKQorCQkJCWludCBzdG9wID0gKGkrMSA9PSBudW0gJiYgaisxID09IG1zZ1tpXS5sZW4pID8gMHg0MCA6IDB4MDA7CisKKwkJCQlpZiAoKHJldCA9IG05MjB4X3dyaXRlKGQtPnVkZXYsIE05MjA2X0kyQywgbXNnW2ldLmJ1ZltqXSwgc3RvcCkpICE9IDApCiAJCQkJCWdvdG8gdW5sb2NrOwogCQkJCS8qIFNob3VsZCBjaGVjayBmb3IgYWNrIGhlcmUgdG9vLiAqLwogCQkJfQpAQCAtMTg5LDI1ICsxOTQsMjUgQEAKIAl9CiAJcmV0ID0gbnVtOwogCi11bmxvY2s6CisgdW5sb2NrOgogCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1MzIgbTkyMDZfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIHUzMiBtOTIweF9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJcmV0dXJuIEkyQ19GVU5DX0kyQzsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIG05MjA2X2kyY19hbGdvID0gewotCS5tYXN0ZXJfeGZlciAgID0gbTkyMDZfaTJjX3hmZXIsCi0JLmZ1bmN0aW9uYWxpdHkgPSBtOTIwNl9pMmNfZnVuYywKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBtOTIweF9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgICA9IG05MjB4X2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gbTkyMHhfaTJjX2Z1bmMsCiB9OwogCi0KLXN0YXRpYyBpbnQgbTkyMDZfc2V0X2ZpbHRlcihzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgdHlwZSwgaW50IGlkeCwKLQkJCSAgICBpbnQgcGlkKQorLyogcGlkIGZpbHRlciAqLworc3RhdGljIGludCBtOTIweF9zZXRfZmlsdGVyKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsCisJCQkgICAgaW50IHR5cGUsIGludCBpZHgsIGludCBwaWQpCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTIxNiwxOCArMjIxLDE4IEBACiAKIAlwaWQgfD0gMHg4MDAwOwogCi0JaWYgKChyZXQgPSBtOTIwNl93cml0ZShhZGFwLT5kZXYtPnVkZXYsIE05MjA2X0ZJTFRFUiwgcGlkLCAodHlwZSA8PCA4KSB8IChpZHggKiA0KSApKSAhPSAwKQorCWlmICgocmV0ID0gbTkyMHhfd3JpdGUoYWRhcC0+ZGV2LT51ZGV2LCBNOTIwNl9GSUxURVIsIHBpZCwgKHR5cGUgPDwgOCkgfCAoaWR4ICogNCkgKSkgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICgocmV0ID0gbTkyMDZfd3JpdGUoYWRhcC0+ZGV2LT51ZGV2LCBNOTIwNl9GSUxURVIsIDAsICh0eXBlIDw8IDgpIHwgKGlkeCAqIDQpICkpICE9IDApCisJaWYgKChyZXQgPSBtOTIweF93cml0ZShhZGFwLT5kZXYtPnVkZXYsIE05MjA2X0ZJTFRFUiwgMCwgKHR5cGUgPDwgOCkgfCAoaWR4ICogNCkgKSkgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbTkyMDZfdXBkYXRlX2ZpbHRlcnMoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbnQgbTkyMHhfdXBkYXRlX2ZpbHRlcnMoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKLQlzdHJ1Y3QgbTkyMDZfc3RhdGUgKm0gPSBhZGFwLT5kZXYtPnByaXY7CisJc3RydWN0IG05MjB4X3N0YXRlICptID0gYWRhcC0+ZGV2LT5wcml2OwogCWludCBlbmFibGVkID0gbS0+ZmlsdGVyaW5nX2VuYWJsZWQ7CiAJaW50IGksIHJldCA9IDAsIGZpbHRlciA9IDA7CiAKQEAgLTIzNiwxNCArMjQxLDE0IEBACiAJCQllbmFibGVkID0gMDsKIAogCS8qIERpc2FibGUgYWxsIGZpbHRlcnMgKi8KLQlpZiAoKHJldCA9IG05MjA2X3NldF9maWx0ZXIoYWRhcCwgMHg4MSwgMSwgZW5hYmxlZCkpICE9IDApCisJaWYgKChyZXQgPSBtOTIweF9zZXRfZmlsdGVyKGFkYXAsIDB4ODEsIDEsIGVuYWJsZWQpKSAhPSAwKQogCQlyZXR1cm4gcmV0OwogCiAJZm9yIChpID0gMDsgaSA8IE05MjA2X01BWF9GSUxURVJTOyBpKyspCi0JCWlmICgocmV0ID0gbTkyMDZfc2V0X2ZpbHRlcihhZGFwLCAweDgxLCBpICsgMiwgMCkpICE9IDApCisJCWlmICgocmV0ID0gbTkyMHhfc2V0X2ZpbHRlcihhZGFwLCAweDgxLCBpICsgMiwgMCkpICE9IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JaWYgKChyZXQgPSBtOTIwNl9zZXRfZmlsdGVyKGFkYXAsIDB4ODIsIDAsIDB4MCkpICE9IDApCisJaWYgKChyZXQgPSBtOTIweF9zZXRfZmlsdGVyKGFkYXAsIDB4ODIsIDAsIDB4MCkpICE9IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBTZXQgKi8KQEAgLTI1Miw0MCArMjU3LDM4IEBACiAJCQlpZiAobS0+ZmlsdGVyc1tpXSA9PSAwKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoKHJldCA9IG05MjA2X3NldF9maWx0ZXIoYWRhcCwgMHg4MSwgZmlsdGVyICsgMiwgbS0+ZmlsdGVyc1tpXSkpICE9IDApCisJCQlpZiAoKHJldCA9IG05MjB4X3NldF9maWx0ZXIoYWRhcCwgMHg4MSwgZmlsdGVyICsgMiwgbS0+ZmlsdGVyc1tpXSkpICE9IDApCiAJCQkJcmV0dXJuIHJldDsKIAogCQkJZmlsdGVyKys7CiAJCX0KIAl9CiAKLQlpZiAoKHJldCA9IG05MjA2X3NldF9maWx0ZXIoYWRhcCwgMHg4MiwgMCwgMHgwMmY1KSkgIT0gMCkKKwlpZiAoKHJldCA9IG05MjB4X3NldF9maWx0ZXIoYWRhcCwgMHg4MiwgMCwgMHgwMmY1KSkgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbTkyMDZfcGlkX2ZpbHRlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZikKK3N0YXRpYyBpbnQgbTkyMHhfcGlkX2ZpbHRlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZikKIHsKLQlzdHJ1Y3QgbTkyMDZfc3RhdGUgKm0gPSBhZGFwLT5kZXYtPnByaXY7CisJc3RydWN0IG05MjB4X3N0YXRlICptID0gYWRhcC0+ZGV2LT5wcml2OwogCiAJbS0+ZmlsdGVyaW5nX2VuYWJsZWQgPSBvbm9mZiA/IDEgOiAwOwogCi0JcmV0dXJuIG05MjA2X3VwZGF0ZV9maWx0ZXJzKGFkYXApOworCXJldHVybiBtOTIweF91cGRhdGVfZmlsdGVycyhhZGFwKTsKIH0KIAotc3RhdGljIGludCBtOTIwNl9waWRfZmlsdGVyKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBpbmRleCwgdTE2IHBpZCwKLQkJCSAgICBpbnQgb25vZmYpCitzdGF0aWMgaW50IG05MjB4X3BpZF9maWx0ZXIoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IGluZGV4LCB1MTYgcGlkLCBpbnQgb25vZmYpCiB7Ci0Jc3RydWN0IG05MjA2X3N0YXRlICptID0gYWRhcC0+ZGV2LT5wcml2OworCXN0cnVjdCBtOTIweF9zdGF0ZSAqbSA9IGFkYXAtPmRldi0+cHJpdjsKIAogCW0tPmZpbHRlcnNbaW5kZXhdID0gb25vZmYgPyBwaWQgOiAwOwogCi0JcmV0dXJuIG05MjA2X3VwZGF0ZV9maWx0ZXJzKGFkYXApOworCXJldHVybiBtOTIweF91cGRhdGVfZmlsdGVycyhhZGFwKTsKIH0KIAotc3RhdGljIGludCBtOTIwNl9maXJtd2FyZV9kb3dubG9hZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQorc3RhdGljIGludCBtOTIweF9maXJtd2FyZV9kb3dubG9hZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKIHsKIAl1MTYgdmFsdWUsIGluZGV4LCBzaXplOwogCXU4IHJlYWRbNF0sICpidWZmOwpAQCAtMjkzLDEzICsyOTYsMTMgQEAKIAogCWJ1ZmYgPSBrbWFsbG9jKDY1NTM2LCBHRlBfS0VSTkVMKTsKIAotCWlmICgocmV0ID0gbTkyMDZfcmVhZCh1ZGV2LCBNOTIwNl9GSUxURVIsIDB4MCwgMHg4MDAwLCByZWFkLCA0KSkgIT0gMCkKKwlpZiAoKHJldCA9IG05MjB4X3JlYWQodWRldiwgTTkyMDZfRklMVEVSLCAweDAsIDB4ODAwMCwgcmVhZCwgNCkpICE9IDApCiAJCWdvdG8gZG9uZTsKLQlkZWJfcmMoIiV4ICV4ICV4ICV4XG4iLCByZWFkWzBdLCByZWFkWzFdLCByZWFkWzJdLCByZWFkWzNdKTsKKwlkZWIoIiV4ICV4ICV4ICV4XG4iLCByZWFkWzBdLCByZWFkWzFdLCByZWFkWzJdLCByZWFkWzNdKTsKIAotCWlmICgocmV0ID0gbTkyMDZfcmVhZCh1ZGV2LCBNOTIwNl9GVywgMHgwLCAweDAsIHJlYWQsIDEpKSAhPSAwKQorCWlmICgocmV0ID0gbTkyMHhfcmVhZCh1ZGV2LCBNOTIwNl9GVywgMHgwLCAweDAsIHJlYWQsIDEpKSAhPSAwKQogCQlnb3RvIGRvbmU7Ci0JZGViX3JjKCIleFxuIiwgcmVhZFswXSk7CisJZGViKCIleFxuIiwgcmVhZFswXSk7CiAKIAlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CiAJCWZvciAoaSA9IDA7IGkgKyAoc2l6ZW9mKHUxNikgKiAzKSA8IGZ3LT5zaXplOykgewpAQCAtMzE3LDExICszMjAsMTEgQEAKIAkJCQltZW1jcHkoYnVmZiwgZnctPmRhdGEgKyBpLCBzaXplKTsKIAogCQkJCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwwKSwKLQkJCQkJICAgIE05MjA2X0ZXLAotCQkJCQkgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQsCi0JCQkJCSAgICB2YWx1ZSwgaW5kZXgsIGJ1ZmYsIHNpemUsIDIwKTsKKwkJCQkJCSAgICAgIE05MjA2X0ZXLAorCQkJCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQsCisJCQkJCQkgICAgICB2YWx1ZSwgaW5kZXgsIGJ1ZmYsIHNpemUsIDIwKTsKIAkJCQlpZiAocmV0ICE9IHNpemUpIHsKLQkJCQkJZGViX3JjKCJlcnJvciB3aGlsZSB1cGxvYWRpbmcgZnchXG4iKTsKKwkJCQkJZGViKCJlcnJvciB3aGlsZSB1cGxvYWRpbmcgZnchXG4iKTsKIAkJCQkJcmV0ID0gLUVJTzsKIAkJCQkJZ290byBkb25lOwogCQkJCX0KQEAgLTMzMCw3ICszMzMsNyBAQAogCQkJaSArPSBzaXplOwogCQl9CiAJCWlmIChpICE9IGZ3LT5zaXplKSB7Ci0JCQlkZWJfcmMoImJhZCBmaXJtd2FyZSBmaWxlIVxuIik7CisJCQlkZWIoImJhZCBmaXJtd2FyZSBmaWxlIVxuIik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBkb25lOwogCQl9CkBAIC0zMzgsMTEgKzM0MSwxMSBAQAogCiAJbXNsZWVwKDM2KTsKIAotCS8qIG05MjA2IHdpbGwgZGlzY29ubmVjdCBpdHNlbGYgZnJvbSB0aGUgYnVzIGFmdGVyIHRoaXMuICovCi0JKHZvaWQpIG05MjA2X3dyaXRlKHVkZXYsIE05MjA2X0NPUkUsIDB4MDEsIE05MjA2X0ZXX0dPKTsKLQlkZWJfcmMoImZpcm13YXJlIHVwbG9hZGVkIVxuIik7CisJLyogbTkyMHggd2lsbCBkaXNjb25uZWN0IGl0c2VsZiBmcm9tIHRoZSBidXMgYWZ0ZXIgdGhpcy4gKi8KKwkodm9pZCkgbTkyMHhfd3JpdGUodWRldiwgTTkyMDZfQ09SRSwgMHgwMSwgTTkyMDZfRldfR08pOworCWRlYigiZmlybXdhcmUgdXBsb2FkZWQhXG4iKTsKIAotCWRvbmU6CisgZG9uZToKIAlrZnJlZShidWZmKTsKIAogCXJldHVybiByZXQ7CkBAIC0zNjIsNyArMzY1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZWdhc2t5X210MzUyX2RlbW9kX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCisvKiBkZW1vZCBjb25maWd1cmF0aW9ucyAqLworc3RhdGljIGludCBtOTIweF9tdDM1Ml9kZW1vZF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXU4IGNvbmZpZ1tdID0geyBDT05GSUcsIDB4M2QgfTsKIAl1OCBjbG9ja1tdID0geyBDTE9DS19DVEwsIDB4MzAgfTsKQEAgLTM4Miw0MSArMzg2LDE4IEBACiAJbXQzNTJfd3JpdGUoZmUsIHVuazEsIEFSUkFZX1NJWkUodW5rMSkpOwogCW10MzUyX3dyaXRlKGZlLCB1bmsyLCBBUlJBWV9TSVpFKHVuazIpKTsKIAotCWRlYl9yYygiRGVtb2QgaW5pdCFcbiIpOworCWRlYigiRGVtb2QgaW5pdCFcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXQzNTJfY29uZmlnIG1lZ2Fza3lfbXQzNTJfY29uZmlnID0geworc3RhdGljIHN0cnVjdCBtdDM1Ml9jb25maWcgbTkyMHhfbXQzNTJfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHgwZiwKIAkubm9fdHVuZXIgPSAxLAotCS5kZW1vZF9pbml0ID0gbWVnYXNreV9tdDM1Ml9kZW1vZF9pbml0LAorCS5kZW1vZF9pbml0ID0gbTkyMHhfbXQzNTJfZGVtb2RfaW5pdCwKIH07CiAKLXN0YXRpYyBpbnQgbWVnYXNreV9tdDM1Ml9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKLXsKLQlkZWJfcmMoIm1lZ2Fza3lfZnJvbnRlbmRfYXR0YWNoIVxuIik7Ci0KLQlpZiAoKGFkYXAtPmZlID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZtZWdhc2t5X210MzUyX2NvbmZpZywgJmFkYXAtPmRldi0+aTJjX2FkYXApKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHF0MTAxMF9jb25maWcgbWVnYXNreV9xdDEwMTBfY29uZmlnID0gewotCS5pMmNfYWRkcmVzcyA9IDB4NjIKLX07Ci0KLXN0YXRpYyBpbnQgbWVnYXNreV9xdDEwMTBfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCi17Ci0JaWYgKGR2Yl9hdHRhY2gocXQxMDEwX2F0dGFjaCwgYWRhcC0+ZmUsICZhZGFwLT5kZXYtPmkyY19hZGFwLAotCQkgICAgICAgJm1lZ2Fza3lfcXQxMDEwX2NvbmZpZykgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgZGlnaXZveF90ZGExMDA0Nl9jb25maWcgPSB7CitzdGF0aWMgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyBtOTIweF90ZGExMDA0Nl8wOF9jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDA4LAogCS5pbnZlcnQgPSAwLAogCS5pbnZlcnRfb2NsayA9IDAsCkBAIC00MjgsMjggKzQwOSwxNTEgQEAKIAkucmVxdWVzdF9maXJtd2FyZSA9IE5VTEwsCiB9OwogCi1zdGF0aWMgaW50IGRpZ2l2b3hfdGRhMTAwNDZfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCi17Ci0JZGViX3JjKCJkaWdpdm94X3RkYTEwMDQ2X2Zyb250ZW5kX2F0dGFjaCFcbiIpOworc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgbTkyMHhfdGRhMTAwNDZfMGJfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwYiwKKwkuaW52ZXJ0ID0gMCwKKwkuaW52ZXJ0X29jbGsgPSAwLAorCS50c19tb2RlID0gVERBMTAwNDZfVFNfU0VSSUFMLAorCS54dGFsX2ZyZXEgPSBUREExMDA0Nl9YVEFMXzE2TSwKKwkuaWZfZnJlcSA9IFREQTEwMDQ2X0ZSRVFfMDQ1LAorCS5hZ2NfY29uZmlnID0gVERBMTAwNDZfQUdDX1REQTgyN1gsCisJLmdwaW9fY29uZmlnID0gVERBMTAwNDZfR1BUUkksCisJLnJlcXVlc3RfZmlybXdhcmUgPSBOVUxMLCAvKiB1c2VzIGZpcm13YXJlIEVFUFJPTSAqLworfTsKIAotCWlmICgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwgJmRpZ2l2b3hfdGRhMTAwNDZfY29uZmlnLAorLyogdHVuZXIgY29uZmlndXJhdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgcXQxMDEwX2NvbmZpZyBtOTIweF9xdDEwMTBfY29uZmlnID0geworCS5pMmNfYWRkcmVzcyA9IDB4NjIKK307CisKKy8qIENhbGxiYWNrcyBmb3IgRFZCIFVTQiAqLworc3RhdGljIGludCBtOTIweF9tdDM1Ml9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlkZWIoIiVzXG4iLF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoKGFkYXAtPmZlID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCQkJICAgJm05MjB4X210MzUyX2NvbmZpZywKIAkJCQkgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGlnaXZveF90ZGE4Mjc1X3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQorc3RhdGljIGludCBtOTIweF90ZGExMDA0Nl8wOF9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKLQlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCwgYWRhcC0+ZmUsIDB4NjAsICZhZGFwLT5kZXYtPmkyY19hZGFwLAotCQkgICAgICAgTlVMTCkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJZGViKCIlc1xuIixfX0ZVTkNUSU9OX18pOworCisJaWYgKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQkJCSAgICZtOTIweF90ZGExMDA0Nl8wOF9jb25maWcsCisJCQkJICAgJmFkYXAtPmRldi0+aTJjX2FkYXApKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTzsKKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG05MjB4X3RkYTEwMDQ2XzBiX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWRlYigiJXNcbiIsX19GVU5DVElPTl9fKTsKKworCWlmICgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJCQkgICAmbTkyMHhfdGRhMTAwNDZfMGJfY29uZmlnLAorCQkJCSAgICZhZGFwLT5kZXYtPmkyY19hZGFwKSkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtOTIweF9xdDEwMTBfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJZGViKCIlc1xuIixfX0ZVTkNUSU9OX18pOworCisJaWYgKGR2Yl9hdHRhY2gocXQxMDEwX2F0dGFjaCwgYWRhcC0+ZmUsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAmbTkyMHhfcXQxMDEwX2NvbmZpZykgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtOTIweF90ZGE4Mjc1XzYwX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWRlYigiJXNcbiIsX19GVU5DVElPTl9fKTsKKworCWlmIChkdmJfYXR0YWNoKHRkYTgyN3hfYXR0YWNoLCBhZGFwLT5mZSwgMHg2MCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIE5VTEwpID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbTkyMHhfdGRhODI3NV82MV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlkZWIoIiVzXG4iLF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCwgYWRhcC0+ZmUsIDB4NjEsICZhZGFwLT5kZXYtPmkyY19hZGFwLCBOVUxMKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCisvKiBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgbTkyMHhfaW5pdHMgbWVnYXNreV9yY19pbml0IFtdID0geworCXsgTTkyMDZfUkNfSU5JVDIsIDB4YTggfSwKKwl7IE05MjA2X1JDX0lOSVQxLCAweDUxIH0sCisJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IG05MjB4X2luaXRzIHR2d2Fsa2VydHdpbl9yY19pbml0IFtdID0geworCXsgTTkyMDZfUkNfSU5JVDIsIDB4MDAgfSwKKwl7IE05MjA2X1JDX0lOSVQxLCAweGVmIH0sCisJeyAweGZmMjgsICAgICAgICAgMHgwMCB9LAorCXsgMHhmZjIzLCAgICAgICAgIDB4MDAgfSwKKwl7IDB4ZmYyMSwgICAgICAgICAweDMwIH0sCisJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKiBpciBrZXltYXBzICovCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IG1lZ2Fza3lfcmNfa2V5cyBbXSA9IHsKKwl7IDB4MCwgMHgxMiwgS0VZX1BPV0VSIH0sCisJeyAweDAsIDB4MWUsIEtFWV9DWUNMRVdJTkRPV1MgfSwgLyogbWluL21heCAqLworCXsgMHgwLCAweDAyLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAsIDB4MDUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwLCAweDAzLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MCwgMHgwNiwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MCwgMHgwNCwgS0VZX01VVEUgfSwKKwl7IDB4MCwgMHgwNywgS0VZX09LIH0sIC8qIFRTICovCisJeyAweDAsIDB4MDgsIEtFWV9TVE9QIH0sCisJeyAweDAsIDB4MDksIEtFWV9NRU5VIH0sIC8qIHN3YXAgKi8KKwl7IDB4MCwgMHgwYSwgS0VZX1JFV0lORCB9LAorCXsgMHgwLCAweDFiLCBLRVlfUEFVU0UgfSwKKwl7IDB4MCwgMHgxZiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDAsIDB4MGMsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MCwgMHgwZCwgS0VZX0NBTUVSQSB9LCAvKiBzY3JlZW5zaG90ICovCisJeyAweDAsIDB4MGUsIEtFWV9DT0ZGRUUgfSwgLyogIk1UUyIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgdHZ3YWxrZXJ0d2luX3JjX2tleXMgW10gPSB7CisJeyAweDAsIDB4MDEsIEtFWV9aT09NIH0sIC8qIEZ1bGwgU2NyZWVuICovCisJeyAweDAsIDB4MDIsIEtFWV9DQU1FUkEgfSwgLyogc25hcHNob3QgKi8KKwl7IDB4MCwgMHgwMywgS0VZX01VVEUgfSwKKwl7IDB4MCwgMHgwNCwgS0VZX1JFV0lORCB9LAorCXsgMHgwLCAweDA1LCBLRVlfUExBWVBBVVNFIH0sIC8qIFBsYXkvUGF1c2UgKi8KKwl7IDB4MCwgMHgwNiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDAsIDB4MDcsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MCwgMHgwOCwgS0VZX1NUT1AgfSwKKwl7IDB4MCwgMHgwOSwgS0VZX1RJTUUgfSwgLyogVGltZXNoaWZ0ICovCisJeyAweDAsIDB4MGMsIEtFWV9DT0ZGRUUgfSwgLyogUmVjYWxsICovCisJeyAweDAsIDB4MGUsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MCwgMHgxMiwgS0VZX1BPV0VSIH0sCisJeyAweDAsIDB4MTUsIEtFWV9NRU5VIH0sIC8qIHNvdXJjZSAqLworCXsgMHgwLCAweDE4LCBLRVlfQ1lDTEVXSU5ET1dTIH0sIC8qIFRXSU4gUElQICovCisJeyAweDAsIDB4MWEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwLCAweDFiLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwLCAweDFlLCBLRVlfVk9MVU1FVVAgfSwKK307CisKIC8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgbWVnYXNreV9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRpZ2l2b3hfbWluaV9paV9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHR2d2Fsa2VydHdpbl9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRwb3NoX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgbTkyMHhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC00NTcsMTkgKzU2MSw1NyBAQAogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZDsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CiAJaW50IHJldDsKKwlzdHJ1Y3QgbTkyMHhfaW5pdHMgKnJjX2luaXRfc2VxID0gTlVMTDsKKwlpbnQgYkludGVyZmFjZU51bWJlciA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAKLQlkZWJfcmMoIlByb2JlZCFcbiIpOworCWRlYigiUHJvYmluZyBmb3IgbTkyMHggZGV2aWNlIGF0IGludGVyZmFjZSAlZFxuIiwgYkludGVyZmFjZU51bWJlcik7CiAKLQlpZiAoKChyZXQgPSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZtZWdhc2t5X3Byb3BlcnRpZXMsIFRISVNfTU9EVUxFLCAmZCkpID09IDApIHx8Ci0JICAgICgocmV0ID0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmZGlnaXZveF9taW5pX2lpX3Byb3BlcnRpZXMsIFRISVNfTU9EVUxFLCAmZCkpID09IDApKQotCQlnb3RvIGZvdW5kOworCWlmIChiSW50ZXJmYWNlTnVtYmVyID09IDApIHsKKwkJLyogU2luZ2xlLXR1bmVyIGRldmljZSwgb3IgZmlyc3QgaW50ZXJmYWNlIG9uCisJCSAqIG11bHRpLXR1bmVyIGRldmljZQorCQkgKi8KIAotCXJldHVybiByZXQ7CisJCWlmICgocmV0ID0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmbWVnYXNreV9wcm9wZXJ0aWVzLAorCQkJCQkgICAgICAgVEhJU19NT0RVTEUsICZkKSkgPT0gMCkgeworCQkJcmNfaW5pdF9zZXEgPSBtZWdhc2t5X3JjX2luaXQ7CisJCQlnb3RvIGZvdW5kOworCQl9CiAKLWZvdW5kOgorCQlpZiAoKHJldCA9IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmRpZ2l2b3hfbWluaV9paV9wcm9wZXJ0aWVzLAorCQkJCQkgICAgICAgVEhJU19NT0RVTEUsICZkKSkgPT0gMCkgeworCQkJLyogTm8gcmVtb3RlIGNvbnRyb2wsIHNvIG5vIHJjX2luaXRfc2VxICovCisJCQlnb3RvIGZvdW5kOworCQl9CisKKwkJLyogVGhpcyBjb25maWd1cmVzIGJvdGggdHVuZXJzIG9uIHRoZSBUViBXYWxrZXIgVHdpbiAqLworCQlpZiAoKHJldCA9IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJnR2d2Fsa2VydHdpbl9wcm9wZXJ0aWVzLAorCQkJCQkgICAgICAgVEhJU19NT0RVTEUsICZkKSkgPT0gMCkgeworCQkJcmNfaW5pdF9zZXEgPSB0dndhbGtlcnR3aW5fcmNfaW5pdDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKworCQlpZiAoKHJldCA9IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmRwb3NoX3Byb3BlcnRpZXMsCisJCQkJCSAgICAgICBUSElTX01PRFVMRSwgJmQpKSA9PSAwKSB7CisJCQkvKiBSZW1vdGUgY29udHJvbGxlciBub3Qgc3VwcG9ydGVkIHlldC4gKi8KKwkJCWdvdG8gZm91bmQ7CisJCX0KKworCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCS8qIEFub3RoZXIgaW50ZXJmYWNlIG9uIGEgbXVsdGktdHVuZXIgZGV2aWNlICovCisKKwkJLyogVGhlIExpZmVWaWV3IFRWIFdhbGtlciBUd2luIGdldHMgaGVyZSwgYnV0IHN0cnVjdAorCQkgKiB0dndhbGtlcnR3aW5fcHJvcGVydGllcyBhbHJlYWR5IGNvbmZpZ3VyZWQgYm90aAorCQkgKiB0dW5lcnMsIHNvIHRoZXJlIGlzIG5vdGhpbmcgZm9yIHVzIHRvIGRvIGhlcmUKKwkJICovCisKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisgZm91bmQ6CiAJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsIDEpOwogCWlmIChhbHQgPT0gTlVMTCkgewotCQlkZWJfcmMoIk5vIGFsdCBmb3VuZCFcbiIpOworCQlkZWIoIk5vIGFsdCBmb3VuZCFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTQ3OCw3ICs2MjAsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKChyZXQgPSBtOTIwNl9pbml0KGQpKSAhPSAwKQorCWlmICgocmV0ID0gbTkyMHhfaW5pdChkLCByY19pbml0X3NlcSkpICE9IDApCiAJCXJldHVybiByZXQ7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNDg4LDYgKzYzMCwxMiBAQAogCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9NU0ksIFVTQl9QSURfTVNJX01FR0FTS1k1ODApIH0sCiAJCXsgVVNCX0RFVklDRShVU0JfVklEX0FOVUJJU19FTEVDVFJPTklDLAogCQkJICAgICBVU0JfUElEX01TSV9ESUdJX1ZPWF9NSU5JX0lJKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BTlVCSVNfRUxFQ1RST05JQywKKwkJCSAgICAgVVNCX1BJRF9MSUZFVklFV19UVl9XQUxLRVJfVFdJTl9DT0xEKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BTlVCSVNfRUxFQ1RST05JQywKKwkJCSAgICAgVVNCX1BJRF9MSUZFVklFV19UVl9XQUxLRVJfVFdJTl9XQVJNKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EUE9TSCwgVVNCX1BJRF9EUE9TSF9NOTIwNl9DT0xEKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EUE9TSCwgVVNCX1BJRF9EUE9TSF9NOTIwNl9XQVJNKSB9LAogCQl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBtOTIweF90YWJsZSk7CkBAIC00OTcsMTQgKzY0NSwxNCBAQAogCiAJLnVzYl9jdHJsID0gREVWSUNFX1NQRUNJRklDLAogCS5maXJtd2FyZSA9ICJkdmItdXNiLW1lZ2Fza3ktMDIuZnciLAotCS5kb3dubG9hZF9maXJtd2FyZSA9IG05MjA2X2Zpcm13YXJlX2Rvd25sb2FkLAorCS5kb3dubG9hZF9maXJtd2FyZSA9IG05MjB4X2Zpcm13YXJlX2Rvd25sb2FkLAogCiAJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCiAJLnJjX2tleV9tYXAgICAgICAgPSBtZWdhc2t5X3JjX2tleXMsCiAJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKG1lZ2Fza3lfcmNfa2V5cyksCi0JLnJjX3F1ZXJ5ICAgICAgICAgPSBtOTIwNl9yY19xdWVyeSwKKwkucmNfcXVlcnkgICAgICAgICA9IG05MjB4X3JjX3F1ZXJ5LAogCi0JLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IG05MjA2X3N0YXRlKSwKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgbTkyMHhfc3RhdGUpLAogCiAJLmlkZW50aWZ5X3N0YXRlICAgPSBtOTIweF9pZGVudGlmeV9zdGF0ZSwKIAkubnVtX2FkYXB0ZXJzID0gMSwKQEAgLTUxMywxMSArNjYxLDExIEBACiAJCQlEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKIAogCQkucGlkX2ZpbHRlcl9jb3VudCA9IDgsCi0JCS5waWRfZmlsdGVyICAgICAgID0gbTkyMDZfcGlkX2ZpbHRlciwKLQkJLnBpZF9maWx0ZXJfY3RybCAgPSBtOTIwNl9waWRfZmlsdGVyX2N0cmwsCisJCS5waWRfZmlsdGVyICAgICAgID0gbTkyMHhfcGlkX2ZpbHRlciwKKwkJLnBpZF9maWx0ZXJfY3RybCAgPSBtOTIweF9waWRfZmlsdGVyX2N0cmwsCiAKLQkJLmZyb250ZW5kX2F0dGFjaCAgPSBtZWdhc2t5X210MzUyX2Zyb250ZW5kX2F0dGFjaCwKLQkJLnR1bmVyX2F0dGFjaCAgICAgPSBtZWdhc2t5X3F0MTAxMF90dW5lcl9hdHRhY2gsCisJCS5mcm9udGVuZF9hdHRhY2ggID0gbTkyMHhfbXQzNTJfZnJvbnRlbmRfYXR0YWNoLAorCQkudHVuZXJfYXR0YWNoICAgICA9IG05MjB4X3F0MTAxMF90dW5lcl9hdHRhY2gsCiAKIAkJLnN0cmVhbSA9IHsKIAkJCS50eXBlID0gVVNCX0JVTEssCkBAIC01MzAsNyArNjc4LDcgQEAKIAkJCX0KIAkJfSwKIAl9fSwKLQkuaTJjX2FsZ28gICAgICAgICA9ICZtOTIwNl9pMmNfYWxnbywKKwkuaTJjX2FsZ28gICAgICAgICA9ICZtOTIweF9pMmNfYWxnbywKIAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKQEAgLTU0NiwyMiArNjk0LDIyIEBACiAKIAkudXNiX2N0cmwgPSBERVZJQ0VfU1BFQ0lGSUMsCiAJLmZpcm13YXJlID0gImR2Yi11c2ItZGlnaXZveC0wMi5mdyIsCi0JLmRvd25sb2FkX2Zpcm13YXJlID0gbTkyMDZfZmlybXdhcmVfZG93bmxvYWQsCisJLmRvd25sb2FkX2Zpcm13YXJlID0gbTkyMHhfZmlybXdhcmVfZG93bmxvYWQsCiAKLQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgbTkyMDZfc3RhdGUpLAorCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBtOTIweF9zdGF0ZSksCiAKIAkuaWRlbnRpZnlfc3RhdGUgICA9IG05MjB4X2lkZW50aWZ5X3N0YXRlLAogCS5udW1fYWRhcHRlcnMgPSAxLAogCS5hZGFwdGVyID0ge3sKIAkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfAotCQlEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKKwkJCURWQl9VU0JfQURBUF9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGLAogCiAJCS5waWRfZmlsdGVyX2NvdW50ID0gOCwKLQkJLnBpZF9maWx0ZXIgICAgICAgPSBtOTIwNl9waWRfZmlsdGVyLAotCQkucGlkX2ZpbHRlcl9jdHJsICA9IG05MjA2X3BpZF9maWx0ZXJfY3RybCwKKwkJLnBpZF9maWx0ZXIgICAgICAgPSBtOTIweF9waWRfZmlsdGVyLAorCQkucGlkX2ZpbHRlcl9jdHJsICA9IG05MjB4X3BpZF9maWx0ZXJfY3RybCwKIAotCQkuZnJvbnRlbmRfYXR0YWNoICA9IGRpZ2l2b3hfdGRhMTAwNDZfZnJvbnRlbmRfYXR0YWNoLAotCQkudHVuZXJfYXR0YWNoICAgICA9IGRpZ2l2b3hfdGRhODI3NV90dW5lcl9hdHRhY2gsCisJCS5mcm9udGVuZF9hdHRhY2ggID0gbTkyMHhfdGRhMTAwNDZfMDhfZnJvbnRlbmRfYXR0YWNoLAorCQkudHVuZXJfYXR0YWNoICAgICA9IG05MjB4X3RkYTgyNzVfNjBfdHVuZXJfYXR0YWNoLAogCiAJCS5zdHJlYW0gPSB7CiAJCQkudHlwZSA9IFVTQl9CVUxLLApAQCAtNTc0LDcgKzcyMiw3IEBACiAJCQl9CiAJCX0sCiAJfX0sCi0JLmkyY19hbGdvICAgICAgICAgPSAmbTkyMDZfaTJjX2FsZ28sCisJLmkyY19hbGdvICAgICAgICAgPSAmbTkyMHhfaTJjX2FsZ28sCiAKIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7CkBAIC01ODUsNiArNzMzLDEyMiBAQAogCX0KIH07CiAKKy8qIExpZmVWaWV3IFRWIFdhbGtlciBUd2luIHN1cHBvcnQgYnkgTmljayBBbmRyZXcgPG5pY2tAbmljay1hbmRyZXcubmV0PgorICoKKyAqIExpZmVWaWV3IFRWIFdhbGtlciBUd2luIGhhcyAxIHggTTkyMDYsIDIgeCBUREExMDA0NiwgMiB4IFREQTgyNzVBCisgKiBUREExMDA0NiAjMCBpcyBsb2NhdGVkIGF0IGkyYyBhZGRyZXNzIDB4MDgKKyAqIFREQTEwMDQ2ICMxIGlzIGxvY2F0ZWQgYXQgaTJjIGFkZHJlc3MgMHgwYiAocHJlc2VudGx5IGRpc2FibGVkIC0gbm90IHlldCB3b3JraW5nKQorICogVERBODI3NUEgIzAgaXMgbG9jYXRlZCBhdCBpMmMgYWRkcmVzcyAweDYwCisgKiBUREE4Mjc1QSAjMSBpcyBsb2NhdGVkIGF0IGkyYyBhZGRyZXNzIDB4NjEgKHByZXNlbnRseSBkaXNhYmxlZCAtIG5vdCB5ZXQgd29ya2luZykKKyAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHR2d2Fsa2VydHdpbl9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKworCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKwkuZmlybXdhcmUgPSAiZHZiLXVzYi10dndhbGtlcnQuZnciLAorCS5kb3dubG9hZF9maXJtd2FyZSA9IG05MjB4X2Zpcm13YXJlX2Rvd25sb2FkLAorCisJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJLnJjX2tleV9tYXAgICAgICAgPSB0dndhbGtlcnR3aW5fcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUodHZ3YWxrZXJ0d2luX3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgID0gbTkyMHhfcmNfcXVlcnksCisKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgbTkyMHhfc3RhdGUpLAorCisJLmlkZW50aWZ5X3N0YXRlICAgPSBtOTIweF9pZGVudGlmeV9zdGF0ZSwKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHt7CisJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwKKwkJCURWQl9VU0JfQURBUF9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGLAorCisJCS5waWRfZmlsdGVyX2NvdW50ID0gOCwKKwkJLnBpZF9maWx0ZXIgICAgICAgPSBtOTIweF9waWRfZmlsdGVyLAorCQkucGlkX2ZpbHRlcl9jdHJsICA9IG05MjB4X3BpZF9maWx0ZXJfY3RybCwKKworCQkuZnJvbnRlbmRfYXR0YWNoICA9IG05MjB4X3RkYTEwMDQ2XzA4X2Zyb250ZW5kX2F0dGFjaCwKKwkJLnR1bmVyX2F0dGFjaCAgICAgPSBtOTIweF90ZGE4Mjc1XzYwX3R1bmVyX2F0dGFjaCwKKworCQkuc3RyZWFtID0geworCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCS5jb3VudCA9IDgsCisJCQkuZW5kcG9pbnQgPSAweDgxLAorCQkJLnUgPSB7CisJCQkJIC5idWxrID0geworCQkJCQkgLmJ1ZmZlcnNpemUgPSA1MTIsCisJCQkJIH0KKwkJCX0KKwkJfX0seworCQkuY2FwcyA9IERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUiB8CisJCQlEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKKworCQkucGlkX2ZpbHRlcl9jb3VudCA9IDgsCisJCS5waWRfZmlsdGVyICAgICAgID0gbTkyMHhfcGlkX2ZpbHRlciwKKwkJLnBpZF9maWx0ZXJfY3RybCAgPSBtOTIweF9waWRfZmlsdGVyX2N0cmwsCisKKwkJLmZyb250ZW5kX2F0dGFjaCAgPSBtOTIweF90ZGExMDA0Nl8wYl9mcm9udGVuZF9hdHRhY2gsCisJCS50dW5lcl9hdHRhY2ggICAgID0gbTkyMHhfdGRhODI3NV82MV90dW5lcl9hdHRhY2gsCisKKwkJLnN0cmVhbSA9IHsKKwkJCS50eXBlID0gVVNCX0JVTEssCisJCQkuY291bnQgPSA4LAorCQkJLmVuZHBvaW50ID0gMHg4MiwKKwkJCS51ID0geworCQkJCSAuYnVsayA9IHsKKwkJCQkJIC5idWZmZXJzaXplID0gNTEyLAorCQkJCSB9CisJCQl9CisJCX0sCisJfX0sCisJLmkyY19hbGdvICAgICAgICAgPSAmbTkyMHhfaTJjX2FsZ28sCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsgICAubmFtZSA9ICJMaWZlVmlldyBUViBXYWxrZXIgVHdpbiBEVkItVCBVU0IyLjAiLAorCQkgICAgLmNvbGRfaWRzID0geyAmbTkyMHhfdGFibGVbMl0sIE5VTEwgfSwKKwkJICAgIC53YXJtX2lkcyA9IHsgJm05MjB4X3RhYmxlWzNdLCBOVUxMIH0sCisJCX0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRwb3NoX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCisJLnVzYl9jdHJsID0gREVWSUNFX1NQRUNJRklDLAorCS5maXJtd2FyZSA9ICJkdmItdXNiLWRwb3NoLTAxLmZ3IiwKKwkuZG93bmxvYWRfZmlybXdhcmUgPSBtOTIweF9maXJtd2FyZV9kb3dubG9hZCwKKworCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBtOTIweF9zdGF0ZSksCisKKwkuaWRlbnRpZnlfc3RhdGUgICA9IG05MjB4X2lkZW50aWZ5X3N0YXRlLAorCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0ge3sKKwkJLyogSGFyZHdhcmUgcGlkIGZpbHRlcnMgZG9uJ3Qgd29yayB3aXRoIHRoaXMgZGV2aWNlL2Zpcm13YXJlICovCisKKwkJLmZyb250ZW5kX2F0dGFjaCAgPSBtOTIweF9tdDM1Ml9mcm9udGVuZF9hdHRhY2gsCisJCS50dW5lcl9hdHRhY2ggICAgID0gbTkyMHhfcXQxMDEwX3R1bmVyX2F0dGFjaCwKKworCQkuc3RyZWFtID0geworCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCS5jb3VudCA9IDgsCisJCQkuZW5kcG9pbnQgPSAweDgxLAorCQkJLnUgPSB7CisJCQkJIC5idWxrID0geworCQkJCQkgLmJ1ZmZlcnNpemUgPSA1MTIsCisJCQkJIH0KKwkJCX0KKwkJfSwKKwl9fSwKKwkuaTJjX2FsZ28gICAgICAgICA9ICZtOTIweF9pMmNfYWxnbywKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJIHsgICAubmFtZSA9ICJEcG9zaCBEVkItVCBVU0IyLjAiLAorCQkgICAgIC5jb2xkX2lkcyA9IHsgJm05MjB4X3RhYmxlWzRdLCBOVUxMIH0sCisJCSAgICAgLndhcm1faWRzID0geyAmbTkyMHhfdGFibGVbNV0sIE5VTEwgfSwKKwkJIH0sCisJIH0KK307CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtOTIweF9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImR2Yl91c2JfbTkyMHgiLAogCS5wcm9iZQkJPSBtOTIweF9wcm9iZSwKQEAgLTYxNSw2ICs4NzksMTEgQEAKIG1vZHVsZV9leGl0IChtOTIweF9tb2R1bGVfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIkFhcG8gVGFoa29sYSA8YWV0QHJhc3RlcmJ1cm4ub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgTVNJIE1lZ2EgU2t5IDU4MCBEVkItVCBVU0IyLjAgLyBVbGkgbTkyMHgiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRFZCIERyaXZlciBmb3IgVUxJIE05MjB4Iik7CiBNT0RVTEVfVkVSU0lPTigiMC4xIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWJhc2ljLW9mZnNldDogOAorICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmgKaW5kZXggN2RkM2RiNi4uMmM4OTQyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguaApAQCAtNCw3ICs0LDcgQEAKICNkZWZpbmUgRFZCX1VTQl9MT0dfUFJFRklYICJtOTIweCIKICNpbmNsdWRlICJkdmItdXNiLmgiCiAKLSNkZWZpbmUgZGViX3JjKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX205MjB4X2RlYnVnLDB4MDEsYXJncykKKyNkZWZpbmUgZGViKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX205MjB4X2RlYnVnLDB4MDEsYXJncykKIAogI2RlZmluZSBNOTIwNl9DT1JFCTB4MjIKICNkZWZpbmUgTTkyMDZfUkNfU1RBVEUJMHhmZjUxCkBAIC01OSw5ICs1OSwxOCBAQAogcmVzcG9uc2UgdG8gYSB3cml0ZSwgaXMgdW5rbm93bi4KICovCiAKLXN0cnVjdCBtOTIwNl9zdGF0ZSB7CitzdHJ1Y3QgbTkyMHhfc3RhdGUgewogCXUxNiBmaWx0ZXJzW005MjA2X01BWF9GSUxURVJTXTsKIAlpbnQgZmlsdGVyaW5nX2VuYWJsZWQ7CiAJaW50IHJlcF9jb3VudDsKIH07CisKKy8qIEluaXRpYWxpc2F0aW9uIGRhdGEgZm9yIHRoZSBtOTIweAorICovCisKK3N0cnVjdCBtOTIweF9pbml0cyB7CisJdTE2IGFkZHJlc3M7CisJdTggIGRhdGE7Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC1mZS5jCmluZGV4IDNlY2IyZTAuLmMzZmRjN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMngtZmUuYwpAQCAtMjA0LDggKzIwNCw4IEBACiBzdGF0aWMgaW50IHZwNzAyeF9mZV9zZW5kX2Rpc2VxY19tc2cgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAogCQkJCSAgICBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICptKQogewotCS8vc3RydWN0IHZwNzAyeF9mZV9zdGF0ZSAqc3QgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQl1OCBjbWRbOF07Ly8saWJ1ZlsxMF07CisJc3RydWN0IHZwNzAyeF9mZV9zdGF0ZSAqc3QgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBjbWRbOF0saWJ1ZlsxMF07CiAJbWVtc2V0KGNtZCwwLDgpOwogCiAJZGViX2ZlKCIlc1xuIixfX0ZVTkNUSU9OX18pOwpAQCAtMjE4LDEyICsyMTgsMTIgQEAKIAltZW1jcHkoJmNtZFszXSwgbS0+bXNnLCBtLT5tc2dfbGVuKTsKIAljbWRbN10gPSB2cDcwMnhfY2hrc3VtKGNtZCwwLDcpOwogCi0vLwl2cDcwMnhfdXNiX2lub3V0X29wKHN0LT5kLGNtZCw4LGlidWYsMTAsMTAwKTsKKwl2cDcwMnhfdXNiX2lub3V0X29wKHN0LT5kLGNtZCw4LGlidWYsMTAsMTAwKTsKIAotLy8JaWYgKGlidWZbMl0gPT0gMCAmJiBpYnVmWzNdID09IDApCi0vLwkJZGViX2ZlKCJkaXNlcWMgY21kIGZhaWxlZC5cbiIpOwotLy8JZWxzZQotLy8JCWRlYl9mZSgiZGlzZXFjIGNtZCBzdWNjZWVkZWQuXG4iKTsKKwlpZiAoaWJ1ZlsyXSA9PSAwICYmIGlidWZbM10gPT0gMCkKKwkJZGViX2ZlKCJkaXNlcWMgY21kIGZhaWxlZC5cbiIpOworCWVsc2UKKwkJZGViX2ZlKCJkaXNlcWMgY21kIHN1Y2NlZWRlZC5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5jCmluZGV4IGY1ZDQwYWEuLmY2NDU0NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5jCkBAIC0yNjYsNyArMjY2LDcgQEAKIHsKIAogLyogaW50ZXJuYWwgKi8KLS8vCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDkyOCwgKDMgPDwgMTQpIHwgKDEgPDwgMTIpIHwgKDUyNCA8PCAwKSk7IC8vIHNhbXBsaW5nIGNsb2NrIG9mIHRoZSBTQUQgaXMgd3JpdHRpbmcgaW4gc2V0X2JhbmR3aWR0aAorLy8JZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgOTI4LCAoMyA8PCAxNCkgfCAoMSA8PCAxMikgfCAoNTI0IDw8IDApKTsgLy8gc2FtcGxpbmcgY2xvY2sgb2YgdGhlIFNBRCBpcyB3cml0dGVuIGluIHNldF9iYW5kd2lkdGgKIAlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MjksICgwIDw8IDEpIHwgKDAgPDwgMCkpOwogCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDkzMCwgNzc2KTsgLy8gMC42MjUqMy4zIC8gNDA5NgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCmluZGV4IDAzNDlhNGIuLmFlY2U0NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCkBAIC0yMjMsNyArMjIzLDcgQEAKIHN0YXRpYyBpbnQgZGliNzAwMHBfc2FkX2NhbGliKHN0cnVjdCBkaWI3MDAwcF9zdGF0ZSAqc3RhdGUpCiB7CiAvKiBpbnRlcm5hbCAqLwotLy8JZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgNzIsICgzIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICg1MjQgPDwgMCkpOyAvLyBzYW1wbGluZyBjbG9jayBvZiB0aGUgU0FEIGlzIHdyaXR0aW5nIGluIHNldF9iYW5kd2lkdGgKKy8vCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDcyLCAoMyA8PCAxNCkgfCAoMSA8PCAxMikgfCAoNTI0IDw8IDApKTsgLy8gc2FtcGxpbmcgY2xvY2sgb2YgdGhlIFNBRCBpcyB3cml0dGVuIGluIHNldF9iYW5kd2lkdGgKIAlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA3MywgKDAgPDwgMSkgfCAoMCA8PCAwKSk7CiAJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgNzQsIDc3Nik7IC8vIDAuNjI1KjMuMyAvIDQwOTYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYwppbmRleCAxMTA1MzY4Li5lNzI1ZjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgVERBMTAwMjEgIC0gU2luZ2xlIENoaXAgQ2FibGUgQ2hhbm5lbCBSZWNlaXZlciBkcml2ZXIgbW9kdWxlCi0JICAgICAgIHVzZWQgb24gdGhlIHRoZSBTaWVtZW5zIERWQi1DIGNhcmRzCisJICAgICAgIHVzZWQgb24gdGhlIFNpZW1lbnMgRFZCLUMgY2FyZHMKIAogICAgIENvcHlyaWdodCAoQykgMTk5OSBDb252ZXJnZW5jZSBJbnRlZ3JhdGVkIE1lZGlhIEdtYkggPHJhbHBoQGNvbnZlcmdlbmNlLmRlPgogICAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgU2NodWx6IDxtc2NAYW50enN5c3RlbS5kZT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy92ZXMxeDkzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdmVzMXg5My5jCmluZGV4IDU0ZDdiMDcuLjIzZmQwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy92ZXMxeDkzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3ZlczF4OTMuYwpAQCAtMzA2LDcgKzMwNiw3IEBACiAJICogVGhlIHZlczE4OTMgc29tZXRpbWVzIHJldHVybnMgc3luYyB2YWx1ZXMgdGhhdCBtYWtlIG5vIHNlbnNlLAogCSAqIGJlY2F1c2UsIGUuZy4sIHRoZSBTSUdOQUwgYml0IGlzIDAsIHdoaWxlIHNvbWUgb2YgdGhlIGhpZ2hlcgogCSAqIGJpdHMgYXJlIDEgKGFuZCBob3cgY2FuIHRoZXJlIGJlIGEgQ0FSUklFUiB3L28gYSBTSUdOQUw/KS4KLQkgKiBUZXN0cyBzaG93ZWQgdGhhdCB0aGUgdGhlIFZJVEVSQkkgYW5kIFNZTkMgYml0cyBhcmUgcmV0dXJuZWQKKwkgKiBUZXN0cyBzaG93ZWQgdGhhdCB0aGUgVklURVJCSSBhbmQgU1lOQyBiaXRzIGFyZSByZXR1cm5lZAogCSAqIHJlbGlhYmx5LCB3aGlsZSB0aGUgU0lHTkFMIGFuZCBDQVJSSUVSIGJpdHMgYXIgc29tZXRpbWVzIHdyb25nLgogCSAqIElmIHN1Y2ggYSBjYXNlIG9jY3Vycywgd2UgcmVhZCB0aGUgdmFsdWUgYWdhaW4sIHVudGlsIHdlIGdldCBhCiAJICogdmFsaWQgdmFsdWUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKaW5kZXggMDU4ZGY1Yy4uMDhhMjU5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYwpAQCAtMjkzLDEyICsyOTMsMjAgQEAKIAkgKiAgICAgYnV0IG5vIHBhY2tldHMgaGF2ZSBiZWVuIHRyYW5zZmVyZWQuCiAJICogWzJdIFNvbWV0aW1lcyAoYWN0dWFsbHkgdmVyeSBvZnRlbikgTkJQQUNLRVRTIHN0YXlzIGF0IHplcm8KIAkgKiAgICAgYWx0aG91Z2ggb25lIHBhY2tldCBoYXMgYmVlbiB0cmFuc2ZlcmVkLgorCSAqIFszXSBTb21ldGltZXMgKGFjdHVhbGx5IHJhcmVseSksIHRoZSBjYXJkIGdldHMgaW50byBhbiBlcnJvbmVvdXMKKwkgKiAgICAgbW9kZSB3aGVyZSBpdCBjb250aW51b3VzbHkgZ2VuZXJhdGVzIGludGVycnVwdHMsIGNsYWltaW5nIGl0CisJICogICAgIGhhcyByZWNpZXZlZCBuYnBhY2tldHM+VFNfRE1BX1BBQ0tFVFMgcGFja2V0cywgYnV0IG5vIHBhY2tldAorCSAqICAgICBoYXMgYmVlbiB0cmFuc2ZlcmVkLiBPbmx5IGEgcmVzZXQgc2VlbXMgdG8gc29sdmUgdGhpcwogCSAqLwogCWlmICgobmJwYWNrZXRzID09IDApIHx8IChuYnBhY2tldHMgPiBUU19ETUFfUEFDS0VUUykpIHsKIAkJdW5zaWduZWQgaW50IGkgPSAwOwogCQl3aGlsZSAocGx1dG8tPmRtYV9idWZbaV0gPT0gMHg0NykKIAkJCWkgKz0gMTg4OwogCQluYnBhY2tldHMgPSBpIC8gMTg4OworCQlpZiAoaSA9PSAwKSB7CisJCQlwbHV0b19yZXNldF90cyhwbHV0bywgMSk7CisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwbHV0by0+cGRldi0+ZGV2LCAicmVzZXR0aW5nIFRTIGJlY2F1c2Ugb2YgaW52YWxpZCBwYWNrZXQgY291bnRlclxuIik7CisJCX0KIAl9CiAKIAlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJnBsdXRvLT5kZW11eCwgcGx1dG8tPmRtYV9idWYsIG5icGFja2V0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCmluZGV4IDY3YmVjZGQuLmVmMTEwOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCkBAIC0xMjQ2LDYgKzEyNDYsOSBAQAogCWlmICghYnVkZ2V0LT5mZWVkaW5nMSB8fCAobmV3ZG1hID09IG9sZGRtYSkpCiAJCXJldHVybjsKIAorCS8qIEVuc3VyZSBzdHJlYW1lZCBQQ0kgZGF0YSBpcyBzeW5jZWQgdG8gQ1BVICovCisJcGNpX2RtYV9zeW5jX3NnX2Zvcl9jcHUoYnVkZ2V0LT5kZXYtPnBjaSwgYnVkZ2V0LT5wdC5zbGlzdCwgYnVkZ2V0LT5wdC5uZW50cywgUENJX0RNQV9GUk9NREVWSUNFKTsKKwogI2lmIDAKIAkvKiB0cmFjayBycHMxIGFjdGl2aXR5ICovCiAJcHJpbnRrKCJ2cGVpcnE6ICUwMnggRXZlbnQgQ291bnRlciAxIDB4JTA0eFxuIiwKQEAgLTI2NzksOCArMjY4Miw4IEBACiBlcnJfcGNpX2ZyZWVfNToKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIDgxOTIsIGF2NzExMC0+ZGViaV92aXJ0LCBhdjcxMTAtPmRlYmlfYnVzKTsKIGVycl9zYWE3MTQ2Nl92ZnJlZV80OgotCWlmICghYXY3MTEwLT5ncmFiYmluZykKLQkJc2FhNzE0Nl9wZ3RhYmxlX2ZyZWUocGRldiwgJmF2NzExMC0+cHQpOworCWlmIChhdjcxMTAtPmdyYWJiaW5nKQorCQlzYWE3MTQ2X3ZmcmVlX2Rlc3Ryb3lfcGd0YWJsZShwZGV2LCBhdjcxMTAtPmdyYWJiaW5nLCAmYXY3MTEwLT5wdCk7CiBlcnJfaTJjX2RlbF8zOgogCWkyY19kZWxfYWRhcHRlcigmYXY3MTEwLT5pMmNfYWRhcCk7CiBlcnJfZHZiX3VucmVnaXN0ZXJfYWRhcHRlcl8yOgpAQCAtMjcxMCw3ICsyNzEzLDcgQEAKIAkJU0FBNzE0Nl9JU1JfQ0xFQVIoc2FhLCBNQVNLXzEwKTsKIAkJbXNsZWVwKDUwKTsKIAkJdGFza2xldF9raWxsKCZhdjcxMTAtPnZwZV90YXNrbGV0KTsKLQkJc2FhNzE0Nl9wZ3RhYmxlX2ZyZWUoc2FhLT5wY2ksICZhdjcxMTAtPnB0KTsKKwkJc2FhNzE0Nl92ZnJlZV9kZXN0cm95X3BndGFibGUoc2FhLT5wY2ksIGF2NzExMC0+Z3JhYmJpbmcsICZhdjcxMTAtPnB0KTsKIAl9CiAJYXY3MTEwX2V4aXRfdjRsKGF2NzExMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKaW5kZXggNjU0YzllOS4uNTg2NzhjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogI2luY2x1ZGUgImF2NzExMC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2NhLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYwppbmRleCBlOWI0ZTg4Li5lMWMxMjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgImF2NzExMC5oIgogI2luY2x1ZGUgImF2NzExMF9ody5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuYwppbmRleCA0ZDcxNTBlLi43MGFlZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCiAjaW5jbHVkZSAiYXY3MTEwLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMKaW5kZXggY2RlNWQzYS4uZmNkOTk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgImF2NzExMC5oIgogI2luY2x1ZGUgImF2NzExMF9ody5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwppbmRleCA0ZWQ0NTk5Li45ZDQyZjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwpAQCAtOTA0LDcgKzkwNCw3IEBACiAJCWJhbmQgPSAxOwogCX0gZWxzZSBpZiAodHVuZXJfZnJlcXVlbmN5IDwgMjAwMDAwMDAwKSB7CiAJCWNwID0gNjsKLQkJYmFuZCA9IDI7CisJCWJhbmQgPSAxOwogCX0gZWxzZSBpZiAodHVuZXJfZnJlcXVlbmN5IDwgMjkwMDAwMDAwKSB7CiAJCWNwID0gMzsKIAkJYmFuZCA9IDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNvcmUuYwppbmRleCA2Yjk3ZGMxLi4yNTU3YWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jb3JlLmMKQEAgLTE5NSw2ICsxOTUsOSBAQAogCXUzMiBuZXdkbWEgPSBzYWE3MTQ2X3JlYWQoYnVkZ2V0LT5kZXYsIFBDSV9WRFAzKTsKIAl1MzIgY291bnQ7CiAKKwkvKiBFbnN1cmUgc3RyZWFtZWQgUENJIGRhdGEgaXMgc3luY2VkIHRvIENQVSAqLworCXBjaV9kbWFfc3luY19zZ19mb3JfY3B1KGJ1ZGdldC0+ZGV2LT5wY2ksIGJ1ZGdldC0+cHQuc2xpc3QsIGJ1ZGdldC0+cHQubmVudHMsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKIAkvKiBuZWFyZXN0IGxvd2VyIHBvc2l0aW9uIGRpdmlzaWJsZSBieSAxODggKi8KIAluZXdkbWEgLT0gbmV3ZG1hICUgMTg4OwogCkBAIC01MDQsMTYgKzUwNywxNiBAQAogCXN0cmNweShidWRnZXQtPmkyY19hZGFwLm5hbWUsIGJ1ZGdldC0+Y2FyZC0+bmFtZSk7CiAKIAlpZiAoaTJjX2FkZF9hZGFwdGVyKCZidWRnZXQtPmkyY19hZGFwKSA8IDApIHsKLQkJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmYnVkZ2V0LT5kdmJfYWRhcHRlcik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9kdmJfdW5yZWdpc3RlcjsKIAl9CiAKIAl0dHBjaV9lZXByb21fcGFyc2VfbWFjKCZidWRnZXQtPmkyY19hZGFwLCBidWRnZXQtPmR2Yl9hZGFwdGVyLnByb3Bvc2VkX21hYyk7CiAKLQlpZiAoTlVMTCA9PQotCSAgICAoYnVkZ2V0LT5ncmFiYmluZyA9IHNhYTcxNDZfdm1hbGxvY19idWlsZF9wZ3RhYmxlKGRldi0+cGNpLCBidWRnZXQtPmJ1ZmZlcl9zaXplLCAmYnVkZ2V0LT5wdCkpKSB7CisJYnVkZ2V0LT5ncmFiYmluZyA9IHNhYTcxNDZfdm1hbGxvY19idWlsZF9wZ3RhYmxlKGRldi0+cGNpLCBidWRnZXQtPmJ1ZmZlcl9zaXplLCAmYnVkZ2V0LT5wdCk7CisJaWYgKE5VTEwgPT0gYnVkZ2V0LT5ncmFiYmluZykgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfZGVsX2kyYzsKIAl9CiAKIAlzYWE3MTQ2X3dyaXRlKGRldiwgUENJX0JUX1YxLCAweDAwMWMwMDAwKTsKQEAgLTUyNiwxNCArNTI5LDE2IEBACiAJaWYgKGJpLT50eXBlICE9IEJVREdFVF9GU19BQ1RJVlkpCiAJCXNhYTcxNDZfc2V0Z3BpbyhkZXYsIDIsIFNBQTcxNDZfR1BJT19PVVRISSk7CiAKLQlpZiAoYnVkZ2V0X3JlZ2lzdGVyKGJ1ZGdldCkgPT0gMCkgewotCQlyZXR1cm4gMDsKLQl9Ci1lcnI6CisJaWYgKGJ1ZGdldF9yZWdpc3RlcihidWRnZXQpID09IDApCisJCXJldHVybiAwOyAvKiBFdmVyeXRoaW5nIE9LICovCisKKwkvKiBBbiBlcnJvciBvY2N1cnJlZCwgY2xlYW51cCByZXNvdXJjZXMgKi8KKwlzYWE3MTQ2X3ZmcmVlX2Rlc3Ryb3lfcGd0YWJsZShkZXYtPnBjaSwgYnVkZ2V0LT5ncmFiYmluZywgJmJ1ZGdldC0+cHQpOworCitlcnJfZGVsX2kyYzoKIAlpMmNfZGVsX2FkYXB0ZXIoJmJ1ZGdldC0+aTJjX2FkYXApOwogCi0JdmZyZWUoYnVkZ2V0LT5ncmFiYmluZyk7Ci0KK2Vycl9kdmJfdW5yZWdpc3RlcjoKIAlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZidWRnZXQtPmR2Yl9hZGFwdGVyKTsKIAogCXJldHVybiByZXQ7CkBAIC01NTUsMTYgKzU2MCwxNCBAQAogCiAJYnVkZ2V0X3VucmVnaXN0ZXIoYnVkZ2V0KTsKIAorCXRhc2tsZXRfa2lsbCgmYnVkZ2V0LT52cGVfdGFza2xldCk7CisKKwlzYWE3MTQ2X3ZmcmVlX2Rlc3Ryb3lfcGd0YWJsZShkZXYtPnBjaSwgYnVkZ2V0LT5ncmFiYmluZywgJmJ1ZGdldC0+cHQpOworCiAJaTJjX2RlbF9hZGFwdGVyKCZidWRnZXQtPmkyY19hZGFwKTsKIAogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmJ1ZGdldC0+ZHZiX2FkYXB0ZXIpOwogCi0JdGFza2xldF9raWxsKCZidWRnZXQtPnZwZV90YXNrbGV0KTsKLQotCXNhYTcxNDZfcGd0YWJsZV9mcmVlKGRldi0+cGNpLCAmYnVkZ2V0LT5wdCk7Ci0KLQl2ZnJlZShidWRnZXQtPmdyYWJiaW5nKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKaW5kZXggYWY2NmE1ZC4uYTZhYzgyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwpAQCAtMiw4ICsyLDE0IEBACiAjIE11bHRpbWVkaWEgVmlkZW8gZGV2aWNlIGNvbmZpZ3VyYXRpb24KICMKIAotbWVudSAiUmFkaW8gQWRhcHRlcnMiCittZW51Y29uZmlnIFJBRElPX0FEQVBURVJTCisJYm9vbCAiUmFkaW8gQWRhcHRlcnMiCiAJZGVwZW5kcyBvbiBWSURFT19ERVYKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzZWxlY3RpbmcgQU0vRk0gcmFkaW8gYWRhcHRlcnMuCisKK2lmIFJBRElPX0FEQVBURVJTCiAKIGNvbmZpZyBSQURJT19DQURFVAogCXRyaXN0YXRlICJBRFMgQ2FkZXQgQU0vRk0gVHVuZXIiCkBAIC0zMjgsNCArMzM0LDUgQEAKIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZHNicjEwMC4KLWVuZG1lbnUKKworZW5kaWYgIyBSQURJT19BREFQVEVSUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYwppbmRleCBkZjhkMDUyLi4zYmQwN2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYwpAQCAtMzMsNiArMzMsMTAgQEAKIAogIEhpc3Rvcnk6CiAKKyBWZXJzaW9uIDAuNDI6CisJQ29udmVydGVkIGRzYnIxMDAgdG8gdXNlIHZpZGVvX2lvY3RsMgorCWJ5IERvdWdsYXMgTGFuZGdyYWYgPGRvdWdzbGFuZEBnbWFpbC5jb20+CisKICBWZXJzaW9uIDAuNDEtYWMxOgogCUFsYW4gQ294OiBTb21lIGNsZWFudXBzIGFuZCBmaXhlcwogCkBAIC03OSw3ICs4Myw2IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgpAQCAtMTIyLDggKzEyNSw2IEBACiBzdGF0aWMgaW50IHVzYl9kc2JyMTAwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgdXNiX2RzYnIxMDBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7Ci1zdGF0aWMgaW50IHVzYl9kc2JyMTAwX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgaW50IHVzYl9kc2JyMTAwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIGludCB1c2JfZHNicjEwMF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiAKQEAgLTE0MywyNiArMTQ0LDYgQEAKIH07CiAKIAotLyogRmlsZSBzeXN0ZW0gaW50ZXJmYWNlICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JfZHNicjEwMF9mb3BzID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5vcGVuID0JCXVzYl9kc2JyMTAwX29wZW4sCi0JLnJlbGVhc2UgPSAgICAgCXVzYl9kc2JyMTAwX2Nsb3NlLAotCS5pb2N0bCA9ICAgICAgICB1c2JfZHNicjEwMF9pb2N0bCwKLQkuY29tcGF0X2lvY3RsID0gdjRsX2NvbXBhdF9pb2N0bDMyLAotCS5sbHNlZWsgPSAgICAgICBub19sbHNlZWssCi19OwotCi0vKiBWNEwgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBkc2JyMTAwX3ZpZGVvZGV2X3RlbXBsYXRlPQotewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5uYW1lID0JCSJELUxpbmsgRFNCLVIgMTAwIiwKLQkudHlwZSA9CQlWSURfVFlQRV9UVU5FUiwKLQkuZm9wcyA9ICAgICAgICAgJnVzYl9kc2JyMTAwX2ZvcHMsCi0JLnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfZHNicjEwMF9kZXZpY2VfdGFibGUgW10gPSB7CiAJeyBVU0JfREVWSUNFKERTQjEwMF9WRU5ET1IsIERTQjEwMF9QUk9EVUNUKSB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCkBAIC0yNTMsMzcgKzIzNCw2IEBACiAKIC8qIFVTQiBzdWJzeXN0ZW0gaW50ZXJmYWNlIGJlZ2lucyBoZXJlICovCiAKLS8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgcmVnaXN0ZXIgd2l0aCB2NGwgYW5kCi11c2IgaWYgaXQgaXMgKi8KLXN0YXRpYyBpbnQgdXNiX2RzYnIxMDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW87Ci0KLQlpZiAoIShyYWRpbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkc2JyMTAwX2RldmljZSksIEdGUF9LRVJORUwpKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKCEocmFkaW8tPnZpZGVvZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCkpKSB7Ci0JCWtmcmVlKHJhZGlvKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCW1lbWNweShyYWRpby0+dmlkZW9kZXYsICZkc2JyMTAwX3ZpZGVvZGV2X3RlbXBsYXRlLAotCQlzaXplb2YoZHNicjEwMF92aWRlb2Rldl90ZW1wbGF0ZSkpOwotCXJhZGlvLT5yZW1vdmVkID0gMDsKLQlyYWRpby0+dXNlcnMgPSAwOwotCXJhZGlvLT51c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXJhZGlvLT5jdXJmcmVxID0gRlJFUV9NSU4qRlJFUV9NVUw7Ci0JdmlkZW9fc2V0X2RydmRhdGEocmFkaW8tPnZpZGVvZGV2LCByYWRpbyk7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYsIFZGTF9UWVBFX1JBRElPLAotCQlyYWRpb19ucikpIHsKLQkJd2FybigiQ291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZSIpOwotCQl2aWRlb19kZXZpY2VfcmVsZWFzZShyYWRpby0+dmlkZW9kZXYpOwotCQlrZnJlZShyYWRpbyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHJhZGlvKTsKLQlyZXR1cm4gMDsKLX0KLQogLyogaGFuZGxlIHVucGx1Z2dpbmcgb2YgdGhlIGRldmljZSwgcmVsZWFzZSBkYXRhIHN0cnVjdHVyZXMKIGlmIG5vdGhpbmcga2VlcHMgdXMgZnJvbSBkb2luZyBpdC4gIElmIHNvbWV0aGluZyBpcyBzdGlsbAoga2VlcGluZyB1cyBidXN5LCB0aGUgcmVsZWFzZSBjYWxsYmFjayBvZiB2NGwgd2lsbCB0YWtlIGNhcmUKQEAgLTMwOCwxMzMgKzI1OCwxNDcgQEAKIH0KIAogCi0vKiBWaWRlbyBmb3IgTGludXggaW50ZXJmYWNlICovCi0KLXN0YXRpYyBpbnQgdXNiX2RzYnIxMDBfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7Ci0Jc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbz12aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKLQotCWlmICghcmFkaW8pCi0JCXJldHVybiAtRUlPOwotCi0Jc3dpdGNoKGNtZCkgewotCQljYXNlIFZJRElPQ19RVUVSWUNBUDoKLQkJewotCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdiA9IGFyZzsKLQkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7Ci0JCQlzdHJsY3B5KHYtPmRyaXZlciwgImRzYnIxMDAiLCBzaXplb2YgKHYtPmRyaXZlcikpOwotCQkJc3RybGNweSh2LT5jYXJkLCAiRC1MaW5rIFItMTAwIFVTQiBGTSBSYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOwotCQkJc3ByaW50Zih2LT5idXNfaW5mbywiSVNBIik7Ci0JCQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQkJCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ19HX1RVTkVSOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKLQotCQkJaWYgKHYtPmluZGV4ID4gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJZHNicjEwMF9nZXRzdGF0KHJhZGlvKTsKLQotCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKLQkJCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKLQkJCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCi0JCQl2LT5yYW5nZWxvdyA9IEZSRVFfTUlOKkZSRVFfTVVMOwotCQkJdi0+cmFuZ2VoaWdoID0gRlJFUV9NQVgqRlJFUV9NVUw7Ci0JCQl2LT5yeHN1YmNoYW5zID1WNEwyX1RVTkVSX1NVQl9NT05PfFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQkJCXYtPmNhcGFiaWxpdHk9VjRMMl9UVU5FUl9DQVBfTE9XOwotCQkJaWYocmFkaW8tPnN0ZXJlbykKLQkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQkJCWVsc2UKLQkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0JCQl2LT5zaWduYWwgPSAweEZGRkY7ICAgICAvKiBXZSBjYW4ndCBnZXQgdGhlIHNpZ25hbCBzdHJlbmd0aCAqLwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ19TX1RVTkVSOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKLQotCQkJaWYgKHYtPmluZGV4ID4gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKLQotCQkJcmFkaW8tPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JCQlpZiAoZHNicjEwMF9zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSk9PS0xKQotCQkJCXdhcm4oIlNldCBmcmVxdWVuY3kgZmFpbGVkIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKLQkJewotCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOwotCi0JCQlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQkJCWYtPmZyZXF1ZW5jeSA9IHJhZGlvLT5jdXJmcmVxOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0JCQlpbnQgaTsKLQotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJewotCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybD0gYXJnOwotCi0JCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQkJY3RybC0+dmFsdWU9cmFkaW8tPm11dGVkOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJY2FzZSBWSURJT0NfU19DVFJMOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsPSBhcmc7Ci0KLQkJCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCQlpZiAoY3RybC0+dmFsdWUpIHsKLQkJCQkJaWYgKGRzYnIxMDBfc3RvcChyYWRpbyk9PS0xKQotCQkJCQkJd2FybigiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5Iik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKGRzYnIxMDBfc3RhcnQocmFkaW8pPT0tMSkKLQkJCQkJCXdhcm4oIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseSIpOwotCQkJCX0KLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsYXJnLAotCQkJCQkJCSAgdXNiX2RzYnIxMDBfZG9faW9jdGwpOwotCX0KKwlzdHJsY3B5KHYtPmRyaXZlciwgImRzYnIxMDAiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CisJc3RybGNweSh2LT5jYXJkLCAiRC1MaW5rIFItMTAwIFVTQiBGTSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7CisJc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYl9kc2JyMTAwX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgdXNiX2RzYnIxMDBfZG9faW9jdGwpOworCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKworCWlmICh2LT5pbmRleCA+IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZHNicjEwMF9nZXRzdGF0KHJhZGlvKTsKKwlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJdi0+cmFuZ2Vsb3cgPSBGUkVRX01JTipGUkVRX01VTDsKKwl2LT5yYW5nZWhpZ2ggPSBGUkVRX01BWCpGUkVRX01VTDsKKwl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKKwlpZihyYWRpby0+c3RlcmVvKQorCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwllbHNlCisJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwl2LT5zaWduYWwgPSAweGZmZmY7ICAgICAvKiBXZSBjYW4ndCBnZXQgdGhlIHNpZ25hbCBzdHJlbmd0aCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQoreworCWlmICh2LT5pbmRleCA+IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisKKwlyYWRpby0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwlpZiAoZHNicjEwMF9zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSk9PS0xKQorCQl3YXJuKCJTZXQgZnJlcXVlbmN5IGZhaWxlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJZi0+ZnJlcXVlbmN5ID0gcmFkaW8tPmN1cmZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKKwkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKKwkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCisJCQkJCQlzaXplb2YoKnFjKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSByYWRpby0+bXV0ZWQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKGN0cmwtPnZhbHVlKSB7CisJCQlpZiAoZHNicjEwMF9zdG9wKHJhZGlvKT09LTEpCisJCQkJd2FybigiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5Iik7CisJCX0gZWxzZSB7CisJCQlpZiAoZHNicjEwMF9zdGFydChyYWRpbyk9PS0xKQorCQkJCXdhcm4oIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseSIpOworCQl9CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAoYS0+aW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCit7CisJKmkgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlpZiAoaSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJaWYgKGEtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHVzYl9kc2JyMTAwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC00NjYsNiArNDMwLDY4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEZpbGUgc3lzdGVtIGludGVyZmFjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX2RzYnIxMDBfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdXNiX2RzYnIxMDBfb3BlbiwKKwkucmVsZWFzZQk9IHVzYl9kc2JyMTAwX2Nsb3NlLAorCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKK307CisKKy8qIFY0TDIgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBkc2JyMTAwX3ZpZGVvZGV2X3RlbXBsYXRlID0KK3sKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gIkQtTGluayBEU0ItUiAxMDAiLAorCS50eXBlCQk9IFZJRF9UWVBFX1RVTkVSLAorCS5mb3BzCQk9ICZ1c2JfZHNicjEwMF9mb3BzLAorCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2dfdHVuZXIgICAgID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyICAgICA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3F1ZXJ5Y3RybCAgID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCAgICAgID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX2dfYXVkaW8gICAgID0gdmlkaW9jX2dfYXVkaW8sCisJLnZpZGlvY19zX2F1ZGlvICAgICA9IHZpZGlvY19zX2F1ZGlvLAorCS52aWRpb2NfZ19pbnB1dCAgICAgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCit9OworCisvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHJlZ2lzdGVyIHdpdGggdjRsIGFuZAordXNiIGlmIGl0IGlzICovCitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvOworCisJaWYgKCEocmFkaW8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHNicjEwMF9kZXZpY2UpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCWlmICghKHJhZGlvLT52aWRlb2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpKSkgeworCQlrZnJlZShyYWRpbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1jcHkocmFkaW8tPnZpZGVvZGV2LCAmZHNicjEwMF92aWRlb2Rldl90ZW1wbGF0ZSwKKwkJc2l6ZW9mKGRzYnIxMDBfdmlkZW9kZXZfdGVtcGxhdGUpKTsKKwlyYWRpby0+cmVtb3ZlZCA9IDA7CisJcmFkaW8tPnVzZXJzID0gMDsKKwlyYWRpby0+dXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlyYWRpby0+Y3VyZnJlcSA9IEZSRVFfTUlOKkZSRVFfTVVMOworCXZpZGVvX3NldF9kcnZkYXRhKHJhZGlvLT52aWRlb2RldiwgcmFkaW8pOworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LCBWRkxfVFlQRV9SQURJTyxyYWRpb19ucikpIHsKKwkJd2FybigiQ291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZSIpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShyYWRpby0+dmlkZW9kZXYpOworCQlrZnJlZShyYWRpbyk7CisJCXJldHVybiAtRUlPOworCX0KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHJhZGlvKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgZHNicjEwMF9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX2RzYnIxMDBfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwppbmRleCA4ZmJmMGQ4Li44Y2YyZTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCkBAIC00OCw2ICs0OCwyNSBAQAogCiAjZGVmaW5lIENBREVUX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwzLDMpCiAKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9LHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisJCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAweGZmLAorCQkuc3RlcCAgICAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMHhmZiwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCX0KK307CisKIHN0YXRpYyBpbnQgaW89LTE7CQkvKiBkZWZhdWx0IHRvIGlzYXBucCBhY3RpdmF0aW9uICovCiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CiBzdGF0aWMgaW50IHVzZXJzPTA7CkBAIC0zNDcsMTM1ICszNjYsMTY1IEBACiB9CiAKIAotCi1zdGF0aWMgaW50IGNhZGV0X2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogewotCXN3aXRjaChjbWQpCi0JewotCQljYXNlIFZJRElPQ19RVUVSWUNBUDoKLQkJewotCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCQkJbWVtc2V0KGNhcCwwLHNpemVvZigqY2FwKSk7Ci0JCQljYXAtPmNhcGFiaWxpdGllcyA9Ci0JCQkJVjRMMl9DQVBfVFVORVIgfAotCQkJCVY0TDJfQ0FQX1JFQURXUklURTsKLQkJCWNhcC0+dmVyc2lvbiA9IENBREVUX1ZFUlNJT047Ci0JCQlzdHJjcHkoY2FwLT5kcml2ZXIsICJBRFMgQ2FkZXQiKTsKLQkJCXN0cmNweShjYXAtPmNhcmQsICJBRFMgQ2FkZXQiKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOwotCQkJbWVtc2V0KHQsMCxzaXplb2YoKnQpKTsKLQkJCXQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCQkJc3dpdGNoICh0LT5pbmRleCkKLQkJCXsKLQkJCQljYXNlIDA6IHN0cmNweSh0LT5uYW1lLCAiRk0iKTsKLQkJCQkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTzsKLQkJCQkJdC0+cmFuZ2Vsb3cgPSAxNDAwOyAgICAgLyogODcuNSBNSHogKi8KLQkJCQkJdC0+cmFuZ2VoaWdoID0gMTcyODsgICAgLyogMTA4LjAgTUh6ICovCi0JCQkJCXQtPnJ4c3ViY2hhbnM9Y2FkZXRfZ2V0c3RlcmVvKCk7Ci0JCQkJCXN3aXRjaCAodC0+cnhzdWJjaGFucyl7Ci0JCQkJCQljYXNlIFY0TDJfVFVORVJfU1VCX01PTk86Ci0JCQkJCQkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCQkJCQkJCWJyZWFrOwotCQkJCQkJY2FzZSBWNEwyX1RVTkVSX1NVQl9TVEVSRU86Ci0JCQkJCQkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQlkZWZhdWx0OiA7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxOiBzdHJjcHkodC0+bmFtZSwgIkFNIik7Ci0JCQkJCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7Ci0JCQkJCXQtPnJhbmdlbG93ID0gODMyMDsgICAgICAvKiA1MjAga0h6ICovCi0JCQkJCXQtPnJhbmdlaGlnaCA9IDI2NDAwOyAgICAvKiAxNjUwIGtIeiAqLwotCQkJCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQkJCQkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJdC0+c2lnbmFsID0gc2lnc3RyZW5ndGg7IC8qIFdlIG1pZ2h0IG5lZWQgdG8gbW9kaWZ5IHNjYWxpbmcgb2YgdGhpcyAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NfU19UVU5FUjoKLQkJewotCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0JCQlpZigodC0+aW5kZXggIT0gMCkmJih0LT5pbmRleCAhPSAxKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJY3VydHVuZXIgPSB0LT5pbmRleDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7Ci0JCQltZW1zZXQoZiwwLHNpemVvZigqZikpOwotCQkJZi0+dHVuZXIgPSBjdXJ0dW5lcjsKLQkJCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCQkJZi0+ZnJlcXVlbmN5ID0gY2FkZXRfZ2V0ZnJlcSgpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKLQkJCWlmIChmLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pewotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJaWYoKGN1cnR1bmVyPT0wKSYmKChmLT5mcmVxdWVuY3k8MTQwMCl8fChmLT5mcmVxdWVuY3k+MTcyOCkpKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlpZigoY3VydHVuZXI9PTEpJiYoKGYtPmZyZXF1ZW5jeTw4MzIwKXx8KGYtPmZyZXF1ZW5jeT4yNjQwMCkpKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQljYWRldF9zZXRmcmVxKGYtPmZyZXF1ZW5jeSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmMgPSBhcmc7Ci0JCQlzd2l0Y2ggKGMtPmlkKXsKLQkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6IC8qIFRPRE86IEhhbmRsZSB0aGlzIGNvcnJlY3RseSAqLwotCQkJCQljLT52YWx1ZSA9IChjYWRldF9nZXR2b2woKSA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQkJCWMtPnZhbHVlID0gY2FkZXRfZ2V0dm9sKCk7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NfU19DVFJMOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjID0gYXJnOwotCQkJc3dpdGNoIChjLT5pZCl7Ci0JCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiAvKiBUT0RPOiBIYW5kbGUgdGhpcyBjb3JyZWN0bHkgKi8KLQkJCQkJaWYgKGMtPnZhbHVlKSBjYWRldF9zZXR2b2woMCk7Ci0JCQkJCQllbHNlIGNhZGV0X3NldHZvbCgweGZmZmYpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJCQkJY2FkZXRfc2V0dm9sKGMtPnZhbHVlKTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KKwl2LT5jYXBhYmlsaXRpZXMgPQorCQlWNEwyX0NBUF9UVU5FUiB8CisJCVY0TDJfQ0FQX1JFQURXUklURTsKKwl2LT52ZXJzaW9uID0gQ0FERVRfVkVSU0lPTjsKKwlzdHJjcHkodi0+ZHJpdmVyLCAiQURTIENhZGV0Iik7CisJc3RyY3B5KHYtPmNhcmQsICJBRFMgQ2FkZXQiKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotY2FkZXRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgY2FkZXRfZG9faW9jdGwpOworCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCXN3aXRjaCAodi0+aW5kZXgpIHsKKwljYXNlIDA6CisJCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwkJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTzsKKwkJdi0+cmFuZ2Vsb3cgPSAxNDAwOyAgICAgLyogODcuNSBNSHogKi8KKwkJdi0+cmFuZ2VoaWdoID0gMTcyODsgICAgLyogMTA4LjAgTUh6ICovCisJCXYtPnJ4c3ViY2hhbnM9Y2FkZXRfZ2V0c3RlcmVvKCk7CisJCXN3aXRjaCAodi0+cnhzdWJjaGFucyl7CisJCWNhc2UgVjRMMl9UVU5FUl9TVUJfTU9OTzoKKwkJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfVFVORVJfU1VCX1NURVJFTzoKKwkJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IDsKKwkJfQorCQlicmVhazsKKwljYXNlIDE6CisJCXN0cmNweSh2LT5uYW1lLCAiQU0iKTsKKwkJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKKwkJdi0+cmFuZ2Vsb3cgPSA4MzIwOyAgICAgIC8qIDUyMCBrSHogKi8KKwkJdi0+cmFuZ2VoaWdoID0gMjY0MDA7ICAgIC8qIDE2NTAga0h6ICovCisJCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl2LT5zaWduYWwgPSBzaWdzdHJlbmd0aDsgLyogV2UgbWlnaHQgbmVlZCB0byBtb2RpZnkgc2NhbGluZyBvZiB0aGlzICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCit7CisJaWYoKHYtPmluZGV4ICE9IDApJiYodi0+aW5kZXggIT0gMSkpCisJCXJldHVybiAtRUlOVkFMOworCWN1cnR1bmVyID0gdi0+aW5kZXg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlmLT50dW5lciA9IGN1cnR1bmVyOworCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCWYtPmZyZXF1ZW5jeSA9IGNhZGV0X2dldGZyZXEoKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJaWYgKGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYoKGN1cnR1bmVyPT0wKSYmKChmLT5mcmVxdWVuY3k8MTQwMCl8fChmLT5mcmVxdWVuY3k+MTcyOCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZigoY3VydHVuZXI9PTEpJiYoKGYtPmZyZXF1ZW5jeTw4MzIwKXx8KGYtPmZyZXF1ZW5jeT4yNjQwMCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljYWRldF9zZXRmcmVxKGYtPmZyZXF1ZW5jeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKKwkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKKwkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCisJCQkJCQlzaXplb2YoKnFjKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCl7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiAvKiBUT0RPOiBIYW5kbGUgdGhpcyBjb3JyZWN0bHkgKi8KKwkJY3RybC0+dmFsdWUgPSAoY2FkZXRfZ2V0dm9sKCkgPT0gMCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQljdHJsLT52YWx1ZSA9IGNhZGV0X2dldHZvbCgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogLyogVE9ETzogSGFuZGxlIHRoaXMgY29ycmVjdGx5ICovCisJCWlmIChjdHJsLT52YWx1ZSkKKwkJCWNhZGV0X3NldHZvbCgwKTsKKwkJZWxzZQorCQkJY2FkZXRfc2V0dm9sKDB4ZmZmZik7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQljYWRldF9zZXR2b2woY3RybC0+dmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJaWYgKGEtPmluZGV4ID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKK3sKKwkqaSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQoreworCWlmIChpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWlmIChhLT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtNTEyLDcgKzU2MSw3IEBACiAJLm9wZW4JCT0gY2FkZXRfb3BlbiwKIAkucmVsZWFzZSAgICAgICAJPSBjYWRldF9yZWxlYXNlLAogCS5yZWFkCQk9IGNhZGV0X3JlYWQsCi0JLmlvY3RsCQk9IGNhZGV0X2lvY3RsLAorCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiAJLnBvbGwJCT0gY2FkZXRfcG9sbCwKIAkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgICAgICAgICA9IG5vX2xsc2VlaywKQEAgLTUyNCw2ICs1NzMsMTggQEAKIAkubmFtZQkJPSAiQ2FkZXQgcmFkaW8iLAogCS50eXBlCQk9IFZJRF9UWVBFX1RVTkVSLAogCS5mb3BzICAgICAgICAgICA9ICZjYWRldF9mb3BzLAorCS52aWRpb2NfcXVlcnljYXAgICAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19nX3R1bmVyICAgICA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciAgICAgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisJLnZpZGlvY19xdWVyeWN0cmwgICA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwgICAgICA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19nX2F1ZGlvICAgICA9IHZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbyAgICAgPSB2aWRpb2Nfc19hdWRpbywKKwkudmlkaW9jX2dfaW5wdXQgICAgID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbnBfZGV2aWNlX2lkIGNhZGV0X3BucF9kZXZpY2VzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCmluZGV4IDExZjgwY2EuLjhlMzNhMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KQEAgLTExMCw3ICsxMDksNiBAQAogCQltdXRlZCwJLyogVklERU9fQVVESU9fTVVURSAqLwogCQlzdGVyZW8sCS8qIFZJREVPX1RVTkVSX1NURVJFT19PTiAqLwogCQl0dW5lZDsJLyogc2lnbmFsIHN0cmVuZ3RoICgwIG9yIDB4ZmZmZikgKi8KLQlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKIHN0YXRpYyB1MzIgcmFkaW9fYml0c19nZXQoc3RydWN0IHJhZGlvX2RldmljZSAqZGV2KQpAQCAtMzk0LDcgKzM5Miw2IEBACiAJfQogCiAJcmFkaW9fdW5pdC0+aW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkgKyBHUElPX0RBVEE7Ci0JbXV0ZXhfaW5pdCgmcmFkaW9fdW5pdC0+bG9jayk7CiAKIAltYWVzdHJvX3JhZGlvX2luc3QgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAlpZiAobWFlc3Ryb19yYWRpb19pbnN0ID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKaW5kZXggYTQ3MTU5MC4uMjAzZjQzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKQEAgLTQxMCw3ICs0MTAsNiBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiWm9sdHJpeCBSYWRpbyBQbHVzIiwKIAkudHlwZQkJPSBWSURfVFlQRV9UVU5FUiwKLQkuaGFyZHdhcmUJPSAwLAogCS5mb3BzICAgICAgICAgICA9ICZ6b2x0cml4X2ZvcHMsCiAJLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKIAkudmlkaW9jX2dfdHVuZXIgICAgID0gdmlkaW9jX2dfdHVuZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggYmM3NzM3OC4uNWNiM2Y1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMiwxNCArMiwxOSBAQAogIyBNdWx0aW1lZGlhIFZpZGVvIGRldmljZSBjb25maWd1cmF0aW9uCiAjCiAKLW1lbnUgIlZpZGVvIENhcHR1cmUgQWRhcHRlcnMiCittZW51Y29uZmlnIFZJREVPX0NBUFRVUkVfRFJJVkVSUworCWJvb2wgIlZpZGVvIGNhcHR1cmUgYWRhcHRlcnMiCiAJZGVwZW5kcyBvbiBWSURFT19ERVYKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzZWxlY3RpbmcgdGhlIHZpZGVvIGFkYXB0ZXJzIGZvcgorCSAgd2ViY2FtcywgYW5hbG9nIFRWLCBhbmQgaHlicmlkIGFuYWxvZy9kaWdpdGFsIFRWLgorCSAgU29tZSBvZiB0aG9zZSBkZXZpY2VzIGFsc28gc3VwcG9ydHMgRk0gcmFkaW8uCiAKLWNvbW1lbnQgIlZpZGVvIENhcHR1cmUgQWRhcHRlcnMiCitpZiBWSURFT19DQVBUVVJFX0RSSVZFUlMKIAogY29uZmlnIFZJREVPX0FEVl9ERUJVRwogCWJvb2wgIkVuYWJsZSBhZHZhbmNlZCBkZWJ1ZyBmdW5jdGlvbmFsaXR5IgotCWRlcGVuZHMgb24gVklERU9fREVWCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgYWR2YW5jZWQgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkgb24gc29tZQpAQCAtMzQsNyArMzksNyBAQAogIwogCiBtZW51ICJFbmNvZGVycy9kZWNvZGVycyBhbmQgb3RoZXIgaGVscGVyIGNoaXBzIgotCWRlcGVuZHMgb24gVklERU9fREVWICYmICFWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCWRlcGVuZHMgb24gIVZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAKIGNvbW1lbnQgIkF1ZGlvIGRlY29kZXJzIgogCkBAIC02MSw3ICs2Niw3IEBACiAKIGNvbmZpZyBWSURFT19UREE5ODQwCiAJdHJpc3RhdGUgIlBoaWxpcHMgVERBOTg0MCBhdWRpbyBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0ZGE5ODQwIGF1ZGlvIGRlY29kZXIgY2hpcCBmb3VuZCBvbiBzb21lIFpvcmFuIGJvYXJkcy4KIApAQCAtNzksNyArODQsNyBAQAogCiBjb25maWcgVklERU9fVEVBNjQxNUMKIAl0cmlzdGF0ZSAiUGhpbGlwcyBURUE2NDE1QyBhdWRpbyBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDCisJZGVwZW5kcyBvbiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0ZWE2NDE1YyBhdWRpbyBkZWNvZGVyIGNoaXAgZm91bmQgb24gc29tZSBidDh4eCBib2FyZHMuCiAKQEAgLTg4LDcgKzkzLDcgQEAKIAogY29uZmlnIFZJREVPX1RFQTY0MjAKIAl0cmlzdGF0ZSAiUGhpbGlwcyBURUE2NDIwIGF1ZGlvIHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMKKwlkZXBlbmRzIG9uIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRlYTY0MjAgYXVkaW8gZGVjb2RlciBjaGlwIGZvdW5kIG9uIHNvbWUgYnQ4eHggYm9hcmRzLgogCkBAIC00NjksNyArNDc0LDcgQEAKIAogY29uZmlnIFZJREVPX1NBQTUyNDkKIAl0cmlzdGF0ZSAiU0FBNTI0OSBUZWxldGV4dCBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIFZJREVPX1Y0TDIKKwlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19WNEwyCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgSTJDIGJ1cyBiYXNlZCB0ZWxldGV4dCB1c2luZyB0aGUgU0FBNTI0OSBjaGlwLiBBdCB0aGUKIAkgIG1vbWVudCB0aGlzIGlzIG9ubHkgdXNlZnVsIG9uIHNvbWUgRXVyb3BlYW4gV2luVFYgY2FyZHMuCkBAIC00NzksNyArNDg0LDcgQEAKIAogY29uZmlnIFRVTkVSXzMwMzYKIAl0cmlzdGF0ZSAiU0FCMzAzNiB0dW5lciIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDEKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUGhpbGlwcyBTQUIzMDM2IGNvbXBhdGlibGUgdHVuZXJzLgogCSAgSWYgaW4gZG91YnQsIHNheSBOLgpAQCAtNjgxLDggKzY4NiwxMiBAQAogIyBVU0IgTXVsdGltZWRpYSBkZXZpY2UgY29uZmlndXJhdGlvbgogIwogCi1tZW51ICJWNEwgVVNCIGRldmljZXMiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCittZW51Y29uZmlnIFY0TF9VU0JfRFJJVkVSUworCWJvb2wgIlY0TCBVU0IgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIFVTQgorCWRlZmF1bHQgeQorCitpZiBWNExfVVNCX0RSSVZFUlMKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZyIKIApAQCAtNzA3LDcgKzcxNiw3IEBACiAKIGNvbmZpZyBVU0JfVzk5NjhDRgogCXRyaXN0YXRlICJVU0IgVzk5Nls4N11DRiBKUEVHIER1YWwgTW9kZSBDYW1lcmEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKIAlzZWxlY3QgVklERU9fT1ZDQU1DSElQCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIE9WNjgxIG9yCkBAIC03MjUsNyArNzM0LDcgQEAKIAogY29uZmlnIFVTQl9PVjUxMQogCXRyaXN0YXRlICJVU0IgT1Y1MTEgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKIAkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L292NTExLnR4dD4KQEAgLTczNiw3ICs3NDUsNyBAQAogCiBjb25maWcgVVNCX1NFNDAxCiAJdHJpc3RhdGUgIlVTQiBTRTQwMSBDYW1lcmEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBWSURFT19WNEwxCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRoaXMgdHlwZSBvZiBjYW1lcmEgdG8geW91cgogCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2U0MDEudHh0PgpAQCAtNzQ5LDcgKzc1OCw3IEBACiAKIGNvbmZpZyBVU0JfU1RWNjgwCiAJdHJpc3RhdGUgIlVTQiBTVFY2ODAgKFBlbmNhbSkgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKIAkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgaW5jbHVkZXMgdGhlIFBlbmNhbSBsaW5lIG9mIGNhbWVyYXMuCkBAIC03NjUsNyArNzc0LDcgQEAKIAogY29uZmlnIFVTQl9aUjM2NFhYCiAJdHJpc3RhdGUgIlVTQiBaUjM2NFhYIENhbWVyYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX1Y0TDIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIGNhbWVyYSB0byB5b3VyCiAJICBjb21wdXRlcidzIFVTQiBwb3J0LgpAQCAtNzc1LDYgKzc4NCw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB6cjM2NHh4LgogCi1lbmRtZW51ICMgVjRMIFVTQiBkZXZpY2VzCitlbmRpZiAjIFY0TF9VU0JfRFJJVkVSUwogCi1lbmRtZW51CitlbmRpZiAjIFZJREVPX0NBUFRVUkVfRFJJVkVSUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMtcmVncy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMtcmVncy5oCmluZGV4IGIyYzIyYTAuLjhlMmE4N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLXJlZ3MuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy1yZWdzLmgKQEAgLTE1MCw2ICsxNTAsMTIgQEAKICNkZWZpbmUgUkVHX0dMX0lNQVNLICAgMHgzMDBjICAvKiBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLwogI2RlZmluZSAgIEdJTVNLX0NDSUNfRU4gICAgICAgICAgMHgwMDAwMDAwNCAgICAvKiBDQ0lDIEludGVycnVwdCBlbmFibGUgKi8KIAorI2RlZmluZSBSRUdfR0xfRkNSCTB4MzAzOCAgLyogR1BJTyBmdW5jdGlvbmFsIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJICBHRkNSX0dQSU9fT04JICAweDA4CQkvKiBDYW1lcmEgR1BJTyBlbmFibGVkICovCisjZGVmaW5lIFJFR19HTF9HUElPUgkweDMxNWMJLyogR1BJTyByZWdpc3RlciAqLworI2RlZmluZSAgIEdHUElPX09VVCAgCQkweDgwMDAwCS8qIEdQSU8gb3V0cHV0ICovCisjZGVmaW5lICAgR0dQSU9fVkFMICAJCTB4MDAwMDgJLyogT3V0cHV0IHBpbiB2YWx1ZSAqLworCiAjZGVmaW5lIFJFR19MRU4gICAgICAgICAgICAgICAgUkVHX0dMX0lNQVNLICsgNAogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmluZGV4IDk2MjU0ZGIuLmMwOGY2NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtNzc1LDYgKzc3NSwxMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CiAJY2FmZV9yZWdfY2xlYXJfYml0KGNhbSwgUkVHX0NUUkwxLCBDMV9QV1JEV04pOwogCS8qCisJICogUGFydCBvbmUgb2YgdGhlIHNlbnNvciBkYW5jZTogdHVybiB0aGUgZ2xvYmFsCisJICogR1BJTyBzaWduYWwgb24uCisJICovCisJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR0xfRkNSLCBHRkNSX0dQSU9fT04pOworCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0dMX0dQSU9SLCBHR1BJT19PVVR8R0dQSU9fVkFMKTsKKwkvKgogCSAqIFB1dCB0aGUgc2Vuc29yIGludG8gb3BlcmF0aW9uYWwgbW9kZSAoYXNzdW1lcyBPTFBDLXN0eWxlCiAJICogd2lyaW5nKS4gIENvbnRyb2wgMCBpcyByZXNldCAtIHNldCB0byAxIHRvIG9wZXJhdGUuCiAJICogQ29udHJvbCAxIGlzIHBvd2VyIGRvd24sIHNldCB0byAwIHRvIG9wZXJhdGUuCkBAIC03ODQsNiArNzkwLDcgQEAKIAljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HUFIsIEdQUl9DMUVOfEdQUl9DMEVOfEdQUl9DMCk7CiAvLwltZGVsYXkoMSk7IC8qIEVub3VnaD8gKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJbXNsZWVwKDUpOyAvKiBKdXN0IHRvIGJlIHN1cmUgKi8KIH0KIAogc3RhdGljIHZvaWQgY2FmZV9jdGxyX3Bvd2VyX2Rvd24oc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCkBAIC03OTIsNiArNzk5LDggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CiAJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR1BSLCBHUFJfQzFFTnxHUFJfQzBFTnxHUFJfQzEpOworCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0dMX0ZDUiwgR0ZDUl9HUElPX09OKTsKKwljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HTF9HUElPUiwgR0dQSU9fT1VUKTsKIAljYWZlX3JlZ19zZXRfYml0KGNhbSwgUkVHX0NUUkwxLCBDMV9QV1JEV04pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKIH0KQEAgLTg1MSw2ICs4NjAsNyBAQAogCXJldCA9IDA7CiAJY2FtLT5zdGF0ZSA9IFNfSURMRTsKICAgb3V0OgorCWNhZmVfY3Rscl9wb3dlcl9kb3duKGNhbSk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMTAzLDEwICsyMTEzLDE2IEBACiAJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBjYWZlX2lycSwgSVJRRl9TSEFSRUQsICJjYWZlLWNjaWMiLCBjYW0pOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2lvdW5tYXA7CisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBjb250cm9sbGVyIGFuZCBsZWF2ZSBpdCBwb3dlcmVkIHVwLiAgSXQgd2lsbAorCSAqIHN0YXkgdGhhdCB3YXkgdW50aWwgdGhlIHNlbnNvciBkcml2ZXIgc2hvd3MgdXAuCisJICovCiAJY2FmZV9jdGxyX2luaXQoY2FtKTsKIAljYWZlX2N0bHJfcG93ZXJfdXAoY2FtKTsKIAkvKgotCSAqIFNldCB1cCBJMkMvU01CVVMgY29tbXVuaWNhdGlvbnMKKwkgKiBTZXQgdXAgSTJDL1NNQlVTIGNvbW11bmljYXRpb25zLiAgV2UgaGF2ZSB0byBkcm9wIHRoZSBtdXRleCBoZXJlCisJICogYmVjYXVzZSB0aGUgc2Vuc29yIGNvdWxkIGF0dGFjaCBpbiB0aGlzIGNhbGwgY2hhaW4sIGxlYWRpbmcgdG8KKwkgKiB1bnNpZ2h0bHkgZGVhZGxvY2tzLgogCSAqLwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsgIC8qIGF0dGFjaCBjYW4gZGVhZGxvY2sgKi8KIAlyZXQgPSBjYWZlX3NtYnVzX3NldHVwKGNhbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5oCmluZGV4IDZlYWE2OTIuLjc4MzkyZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5oCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIHN0cnVjdCBjcGlhX2NhbWVyYV9vcHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYV9wcC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhX3BwLmMKaW5kZXggMTk3MTFhYS4uYzQzMWRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhX3BwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhX3BwLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwppbmRleCAxNzU3YTU4Li42N2JkYTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCkBAIC01NTUsNyArNTU1LDcgQEAKIHsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXg7CiAJaW50IEhTQywgVlNDLCBWc3JjLCBIc3JjLCBmaWx0ZXIsIFZsaW5lczsKLQlpbnQgaXNfcGFsID0gIShjeDI1ODQwX2dldF92NGxzdGQoY2xpZW50KSAmIFY0TDJfU1REX05UU0MpOworCWludCBpc181MEh6ID0gIShjeDI1ODQwX2dldF92NGxzdGQoY2xpZW50KSAmIFY0TDJfU1REXzUyNV82MCk7CiAKIAlzd2l0Y2ggKGZtdC0+dHlwZSkgewogCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgpAQCAtNTY3LDcgKzU2Nyw3IEBACiAJCUhzcmMgPSAoY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0NzIpICYgMHgzZikgPDwgNDsKIAkJSHNyYyB8PSAoY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0NzEpICYgMHhmMCkgPj4gNDsKIAotCQlWbGluZXMgPSBwaXgtPmhlaWdodCArIChpc19wYWwgPyA0IDogNyk7CisJCVZsaW5lcyA9IHBpeC0+aGVpZ2h0ICsgKGlzXzUwSHogPyA0IDogNyk7CiAKIAkJaWYgKChwaXgtPndpZHRoICogMTYgPCBIc3JjKSB8fCAoSHNyYyA8IHBpeC0+d2lkdGgpIHx8CiAJCSAgICAoVmxpbmVzICogOCA8IFZzcmMpIHx8IChWc3JjIDwgVmxpbmVzKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCmluZGV4IDJlYmRlMmYuLjU0M2IwNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAKICNpbmNsdWRlICJjeDg4LmgiCkBAIC02MTIsNyArNjEzLDcgQEAKIH0KIAogLyogRHJpdmVyIGFza2VkIGZvciBoYXJkd2FyZSBhY2Nlc3MuICovCi1pbnQgY3g4ODAyX3JlcXVlc3RfYWNxdWlyZShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KQorc3RhdGljIGludCBjeDg4MDJfcmVxdWVzdF9hY3F1aXJlKHN0cnVjdCBjeDg4MDJfZHJpdmVyICpkcnYpCiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRydi0+Y29yZTsKIApAQCAtNjMyLDcgKzYzMyw3IEBACiB9CiAKIC8qIERyaXZlciBhc2tlZCB0byByZWxlYXNlIGhhcmR3YXJlLiAqLwotaW50IGN4ODgwMl9yZXF1ZXN0X3JlbGVhc2Uoc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRydikKK3N0YXRpYyBpbnQgY3g4ODAyX3JlcXVlc3RfcmVsZWFzZShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KQogewogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkcnYtPmNvcmU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYwppbmRleCBlNjI3MDYyLi4yNTllYTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwppbmRleCBiOTRlZjhhLi45OGZhMzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKICNpbmNsdWRlICJjeDg4LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmMKaW5kZXggNjA2OGM5Yi4uODJiYzNhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdnAzMDU0LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZwMzA1NC1pMmMuYwpAQCAtMTExLDEwICsxMTEsNiBAQAogCS5pZCAgICAgICAgICAgICAgICA9IEkyQ19IV19CX0NYMjM4OHgsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgdnAzMDU0X2kyY19jbGllbnRfdGVtcGxhdGUgPSB7Ci0JLm5hbWUJPSAiVlAtMzA1NCIsCi19OwotCiBpbnQgdnAzMDU0X2kyY19wcm9iZShzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQogewogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CkBAIC0xMzMsOCArMTI5LDYgQEAKIAkgICAgICAgc2l6ZW9mKHZwMzA1NF9pMmMtPmFkYXApKTsKIAltZW1jcHkoJnZwMzA1NF9pMmMtPmFsZ28sICZ2cDMwNTRfaTJjX2FsZ29fdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZih2cDMwNTRfaTJjLT5hbGdvKSk7Ci0JbWVtY3B5KCZ2cDMwNTRfaTJjLT5jbGllbnQsICZ2cDMwNTRfaTJjX2NsaWVudF90ZW1wbGF0ZSwKLQkgICAgICAgc2l6ZW9mKHZwMzA1NF9pMmMtPmNsaWVudCkpOwogCiAJdnAzMDU0X2kyYy0+YWRhcC5jbGFzcyB8PSBJMkNfQ0xBU1NfVFZfRElHSVRBTDsKIApAQCAtMTQ0LDcgKzEzOCw2IEBACiAJdnAzMDU0X2kyYy0+YWxnby5kYXRhID0gZGV2OwogCWkyY19zZXRfYWRhcGRhdGEoJnZwMzA1NF9pMmMtPmFkYXAsIGRldik7CiAJdnAzMDU0X2kyYy0+YWRhcC5hbGdvX2RhdGEgPSAmdnAzMDU0X2kyYy0+YWxnbzsKLQl2cDMwNTRfaTJjLT5jbGllbnQuYWRhcHRlciA9ICZ2cDMwNTRfaTJjLT5hZGFwOwogCiAJdnAzMDU0X2JpdF9zZXRzY2woZGV2LDEpOwogCXZwMzA1NF9iaXRfc2V0c2RhKGRldiwxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZwMzA1NC1pMmMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZwMzA1NC1pMmMuaAppbmRleCBiN2EwYTA0Li42MzdhN2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdnAzMDU0LWkyYy5oCkBAIC0yNiw3ICsyNiw2IEBACiBzdHJ1Y3QgdnAzMDU0X2kyY19zdGF0ZSB7CiAJc3RydWN0IGkyY19hZGFwdGVyICAgICAgICAgYWRhcDsKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgICBhbGdvOwotCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgICAgIGNsaWVudDsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCmluZGV4IGZmNGIyMzguLmE1NzMxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgImRhYnVzYi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcKaW5kZXggOTI4NWE1OC4uNWI2YTQwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogY29uZmlnIFZJREVPX0VNMjhYWAogCXRyaXN0YXRlICJFbXBpYSBFTTI4MDAvMjgyMC8yODQwIFVTQiB2aWRlbyBjYXB0dXJlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIFVTQiAmJiBJMkMKLQlzZWxlY3QgVklERU9fQlVGCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQwogCXNlbGVjdCBWSURFT19UVU5FUgogCXNlbGVjdCBWSURFT19UVkVFUFJPTQogCXNlbGVjdCBWSURFT19JUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCmluZGV4IDU2M2E4MzEuLjU0Y2NjNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAogCXJldCA9IGRldi0+ZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCA0IC0gbGVuLCAmYjJbNCAtIGxlbl0sIDIgKyBsZW4pOwogCWlmIChyZXQgIT0gMiArIGxlbikgewotCQllbTI4eHhfd2Fybigid3JpdHRpbmcgdG8gaTJjIGRldmljZSBmYWlsZWQgKGVycm9yPSVpKVxuIiwgcmV0KTsKKwkJZW0yOHh4X3dhcm4oIndyaXRpbmcgdG8gaTJjIGRldmljZSBmYWlsZWQgKGVycm9yPSVpKVxuIiwgcmV0KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWZvciAod3JpdGVfdGltZW91dCA9IEVNMjgwMF9JMkNfV1JJVEVfVElNRU9VVDsgd3JpdGVfdGltZW91dCA+IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCmluZGV4IGJlYzY3NjAuLjJjN2IxNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC0xNzI5LDcgKzE3MjksNyBAQAogCiAJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMV0uZGVzYzsKIAotCS8qIGNoZWNrIGlmIHRoZSB0aGUgZGV2aWNlIGhhcyB0aGUgaXNvIGluIGVuZHBvaW50IGF0IHRoZSBjb3JyZWN0IHBsYWNlICovCisJLyogY2hlY2sgaWYgdGhlIGRldmljZSBoYXMgdGhlIGlzbyBpbiBlbmRwb2ludCBhdCB0aGUgY29ycmVjdCBwbGFjZSAqLwogCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSAhPQogCSAgICBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSB7CiAJCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIiBwcm9iaW5nIGVycm9yOiBlbmRwb2ludCBpcyBub24tSVNPIGVuZHBvaW50IVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcKaW5kZXggYzZiZmY3MC4uNjY0Njc2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBVU0JfRVQ2MVgyNTEKIAl0cmlzdGF0ZSAiVVNCIEVUNjFYWzEyXTUxIFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBFdG9tcyBFVDYxWDE1MQogCSAgb3IgRVQ2MVgyNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvS2NvbmZpZwppbmRleCBlODU0ZjNmLi4xYWFlYWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWSURFT19JVlRWCiAJdHJpc3RhdGUgIkNvbmV4YW50IGN4MjM0MTYvY3gyMzQxNSBNUEVHIGVuY29kZXIvZGVjb2RlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBWSURFT19WNEwyICYmIFVTQiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIFZJREVPX1Y0TDIgJiYgUENJICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IFZJREVPX1RVTkVSCiAJc2VsZWN0IFZJREVPX1RWRUVQUk9NCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IDQ1YjkzMjguLmUyOWY5NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC03NCw3ICs3NCw3IEBACiBzdHJ1Y3QgaXZ0diAqaXZ0dl9jYXJkc1tJVlRWX01BWF9DQVJEU107CiAKIC8qIFByb3RlY3RzIGl2dHZfY2FyZHNfYWN0aXZlICovCi1zcGlubG9ja190IGl2dHZfY2FyZHNfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK0RFRklORV9TUElOTE9DSyhpdnR2X2NhcmRzX2xvY2spOwogCiAvKiBhZGQgeW91ciByZXZpc2lvbiBhbmQgd2hhdG5vdCBoZXJlICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXZ0dl9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKaW5kZXggOWE0MTJkNi4uNTUyZjA0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmgKQEAgLTY3LDE0ICs2Nyw2IEBACiAKICNpbmNsdWRlIDxtZWRpYS9pdnR2Lmg+CiAKLSNpZmRlZiBDT05GSUdfTElSQ19JMkMKLSMgIGVycm9yICJUaGlzIGRyaXZlciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBMSVJDIEkyQyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIgotI2VuZGlmIC8qIENPTkZJR19MSVJDX0kyQyAqLwotCi0jaWZuZGVmIENPTkZJR19QQ0kKLSMgIGVycm9yICJUaGlzIGRyaXZlciByZXF1aXJlcyBrZXJuZWwgUENJIHN1cHBvcnQuIgotI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KLQogI2RlZmluZSBJVlRWX0VOQ09ERVJfT0ZGU0VUCTB4MDAwMDAwMDAKICNkZWZpbmUgSVZUVl9FTkNPREVSX1NJWkUJMHgwMDgwMDAwMAkvKiBMYXN0IGhhbGYgaXNuJ3QgbmVlZGVkIDB4MDEwMDAwMDAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCmluZGV4IDE2MzcwOTcuLjg5NzY0ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKQEAgLTgwNCw3ICs4MDQsNyBAQAogCXN0cnVjdCBpdnR2X29wZW5faWQgKml0ZW07CiAJc3RydWN0IGl2dHYgKml0diA9IE5VTEw7CiAJc3RydWN0IGl2dHZfc3RyZWFtICpzID0gTlVMTDsKLQlpbnQgbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCiAJLyogRmluZCB3aGljaCBjYXJkIHRoaXMgb3BlbiB3YXMgb24gKi8KIAlzcGluX2xvY2soJml2dHZfY2FyZHNfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwppbmRleCA3OTRhNmEwLi4xOTg5ZWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKQEAgLTM2Miw4ICszNjIsNiBAQAogCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6CiAJCWlmICghKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWZtdC0+Zm10LnBpeC5sZWZ0ID0gaXR2LT5tYWluX3JlY3QubGVmdDsKLQkJZm10LT5mbXQucGl4LnRvcCA9IGl0di0+bWFpbl9yZWN0LnRvcDsKIAkJZm10LT5mbXQucGl4LndpZHRoID0gaXR2LT5tYWluX3JlY3Qud2lkdGg7CiAJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBpdHYtPm1haW5fcmVjdC5oZWlnaHQ7CiAJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKQEAgLTQwMiw4ICs0MDAsNiBAQAogCQlicmVhazsKIAogCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlmbXQtPmZtdC5waXgubGVmdCA9IDA7Ci0JCWZtdC0+Zm10LnBpeC50b3AgPSAwOwogCQlmbXQtPmZtdC5waXgud2lkdGggPSBpdHYtPnBhcmFtcy53aWR0aDsKIAkJZm10LT5mbXQucGl4LmhlaWdodCA9IGl0di0+cGFyYW1zLmhlaWdodDsKIAkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwpAQCAtNDk4LDE1ICs0OTQsMTMgQEAKIAkJaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJZmllbGQgPSBmbXQtPmZtdC5waXguZmllbGQ7Ci0JCXIudG9wID0gZm10LT5mbXQucGl4LnRvcDsKLQkJci5sZWZ0ID0gZm10LT5mbXQucGl4LmxlZnQ7CisJCXIudG9wID0gMDsKKwkJci5sZWZ0ID0gMDsKIAkJci53aWR0aCA9IGZtdC0+Zm10LnBpeC53aWR0aDsKIAkJci5oZWlnaHQgPSBmbXQtPmZtdC5waXguaGVpZ2h0OwogCQlpdnR2X2dldF9mbXQoaXR2LCBzdHJlYW10eXBlLCBmbXQpOwogCQlpZiAoaXR2LT5vdXRwdXRfbW9kZSAhPSBPVVRfVURNQV9ZVVYpIHsKIAkJCS8qIFRPRE86IHdvdWxkIHNldHRpbmcgdGhlIHJlY3QgYWxzbyBiZSB2YWxpZCBmb3IgdGhpcyBtb2RlPyAqLwotCQkJZm10LT5mbXQucGl4LnRvcCA9IHIudG9wOwotCQkJZm10LT5mbXQucGl4LmxlZnQgPSByLmxlZnQ7CiAJCQlmbXQtPmZtdC5waXgud2lkdGggPSByLndpZHRoOwogCQkJZm10LT5mbXQucGl4LmhlaWdodCA9IHIuaGVpZ2h0OwogCQl9CkBAIC0xMTQxLDggKzExMzUsNiBAQAogCQlmYi0+Zm10LnBpeGVsZm9ybWF0ID0gaXR2LT5vc2RfcGl4ZWxmb3JtYXQ7CiAJCWZiLT5mbXQud2lkdGggPSBpdHYtPm9zZF9yZWN0LndpZHRoOwogCQlmYi0+Zm10LmhlaWdodCA9IGl0di0+b3NkX3JlY3QuaGVpZ2h0OwotCQlmYi0+Zm10LmxlZnQgPSBpdHYtPm9zZF9yZWN0LmxlZnQ7Ci0JCWZiLT5mbXQudG9wID0gaXR2LT5vc2RfcmVjdC50b3A7CiAJCWZiLT5iYXNlID0gKHZvaWQgKilpdHYtPm9zZF92aWRlb19wYmFzZTsKIAkJaWYgKGl0di0+b3NkX2dsb2JhbF9hbHBoYV9zdGF0ZSkKIAkJCWZiLT5mbGFncyB8PSBWNEwyX0ZCVUZfRkxBR19HTE9CQUxfQUxQSEE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmgKaW5kZXggNjhiMDgyYi4uMThjNjQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuaApAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jCmluZGV4IDAzYmMzNjkuLjNjZWI4YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc2NzAuYwpAQCAtNzIwLDEyICs3MjAsMjIgQEAKIAlzdHJ1Y3Qgb3Y3NjcwX2Zvcm1hdF9zdHJ1Y3QgKm92Zm10OwogCXN0cnVjdCBvdjc2NzBfd2luX3NpemUgKndzaXplOwogCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQl1bnNpZ25lZCBjaGFyIGNvbTc7CisJdW5zaWduZWQgY2hhciBjb203LCBjbGtyYzsKIAogCXJldCA9IG92NzY3MF90cnlfZm10KGMsIGZtdCwgJm92Zm10LCAmd3NpemUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJLyoKKwkgKiBIQUNLOiBpZiB3ZSdyZSBydW5uaW5nIHJnYjU2NSB3ZSBuZWVkIHRvIGdyYWIgdGhlbiByZXdyaXRlCisJICogQ0xLUkMuICBJZiB3ZSdyZSAqbm90KiwgaG93ZXZlciwgdGhlbiByZXdyaXRpbmcgY2xrcmMgaG9zZXMKKwkgKiB0aGUgY29sb3JzLgorCSAqLworCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1JHQjU2NSkgeworCQlyZXQgPSBvdjc2NzBfcmVhZChjLCBSRUdfQ0xLUkMsICZjbGtyYyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwkvKgogCSAqIENPTTcgaXMgYSBwYWluIGluIHRoZSBhc3MsIGl0IGRvZXNuJ3QgbGlrZSB0byBiZSByZWFkIHRoZW4KIAkgKiBxdWlja2x5IHdyaXR0ZW4gYWZ0ZXJ3YXJkLiAgQnV0IHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkCiAJICogdG8gc2V0IGl0IGFic29sdXRlbHkgaGVyZSwgYXMgbG9uZyBhcyB0aGUgZm9ybWF0LXNwZWNpZmljCkBAIC03NDQsNyArNzU0LDEwIEBACiAJaWYgKHdzaXplLT5yZWdzKQogCQlyZXQgPSBvdjc2NzBfd3JpdGVfYXJyYXkoYywgd3NpemUtPnJlZ3MpOwogCWluZm8tPmZtdCA9IG92Zm10OwotCXJldHVybiAwOworCisJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfUkdCNTY1ICYmIHJldCA9PSAwKQorCQlyZXQgPSBvdjc2NzBfd3JpdGUoYywgUkVHX0NMS1JDLCBjbGtyYyk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTEyNjcsNyArMTI4MCw5IEBACiAJcmV0ID0gb3Y3NjcwX2RldGVjdChjbGllbnQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZyZWVfaW5mbzsKLQlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCXJldCA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZV9pbmZvOwogCXJldHVybiAwOwogCiAgIG91dF9mcmVlX2luZm86CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9LY29uZmlnCmluZGV4IDU2NDVjOTMuLmQwYzJjZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFZJREVPX1BWUlVTQjIKIAl0cmlzdGF0ZSAiSGF1cHBhdWdlIFdpblRWLVBWUiBVU0IyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IFZJREVPX1RVTkVSCiAJc2VsZWN0IFZJREVPX1RWRUVQUk9NCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMKaW5kZXggNTY2OWM4Yy4uMjBiNjE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYwpAQCAtMzkxLDIyICszOTEsMjkgQEAKIGludCBwdnIyX2VuY29kZXJfY29uZmlndXJlKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewogCWludCByZXQ7CisJaW50IHZhbDsKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRU5DT0RFUiwicHZyMl9lbmNvZGVyX2NvbmZpZ3VyZSIKIAkJICAgIiAoY3gyMzQxeCBtb2R1bGUpIik7CiAJaGR3LT5lbmNfY3RsX3N0YXRlLnBvcnQgPSBDWDIzNDFYX1BPUlRfU1RSRUFNSU5HOwogCWhkdy0+ZW5jX2N0bF9zdGF0ZS53aWR0aCA9IGhkdy0+cmVzX2hvcl92YWw7CiAJaGR3LT5lbmNfY3RsX3N0YXRlLmhlaWdodCA9IGhkdy0+cmVzX3Zlcl92YWw7Ci0JaGR3LT5lbmNfY3RsX3N0YXRlLmlzXzUwaHogPSAoKGhkdy0+c3RkX21hc2tfY3VyICYKLQkJCQkgICAgICAgKFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMX00pKSA/CisJaGR3LT5lbmNfY3RsX3N0YXRlLmlzXzUwaHogPSAoKGhkdy0+c3RkX21hc2tfY3VyICYgVjRMMl9TVERfNTI1XzYwKSA/CiAJCQkJICAgICAgMCA6IDEpOwogCiAJcmV0ID0gMDsKIAogCXJldCB8PSBwdnIyX2VuY29kZXJfcHJlcF9jb25maWcoaGR3KTsKIAorCS8qIHNhYTcxMTU6IDB4ZjAgKi8KKwl2YWwgPSAweGYwOworCWlmIChoZHctPmhkd190eXBlID09IFBWUjJfSERXX1RZUEVfMjRYWFgpIHsKKwkJLyogaXZ0diBjeDI1ODQwOiAweDE0MCAqLworCQl2YWwgPSAweDE0MDsKKwl9CisKIAlpZiAoIXJldCkgcmV0ID0gcHZyMl9lbmNvZGVyX3ZjbWQoCiAJCWhkdyxDWDIzNDFYX0VOQ19TRVRfTlVNX1ZTWU5DX0xJTkVTLCAyLAotCQkweGYwLCAweGYwKTsKKwkJdmFsLCB2YWwpOwogCiAJLyogc2V0dXAgZmlybXdhcmUgdG8gbm90aWZ5IHVzIGFib3V0IHNvbWUgZXZlbnRzIChkb24ndCBrbm93IHdoeS4uLikgKi8KIAlpZiAoIXJldCkgcmV0ID0gcHZyMl9lbmNvZGVyX3ZjbWQoCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCmluZGV4IGFjZjY1MWUuLjEzMTE4OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCkBAIC04Myw3ICs4Myw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHB2cjJfaGR3ICp1bml0X3BvaW50ZXJzW1BWUl9OVU1dID0ge1sgMCAuLi4gUFZSX05VTS0xIF0gPSBOVUxMfTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKHB2cjJfdW5pdF9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChwdnIyX3VuaXRfbXR4KTsKIAogc3RhdGljIGludCBjdGxjaGcgPSAwOwogc3RhdGljIGludCBpbml0dXNicmVzZXQgPSAxOwpAQCAtMjA3NiwxNCArMjA3NiwxNCBAQAogCWhkdy0+Y3RsX3JlYWRfdXJiID0gdXNiX2FsbG9jX3VyYigwLEdGUF9LRVJORUwpOwogCWlmICghaGR3LT5jdGxfcmVhZF91cmIpIGdvdG8gZmFpbDsKIAotCWRvd24oJnB2cjJfdW5pdF9zZW0pOyBkbyB7CisJbXV0ZXhfbG9jaygmcHZyMl91bml0X210eCk7IGRvIHsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBQVlJfTlVNOyBpZHgrKykgewogCQkJaWYgKHVuaXRfcG9pbnRlcnNbaWR4XSkgY29udGludWU7CiAJCQloZHctPnVuaXRfbnVtYmVyID0gaWR4OwogCQkJdW5pdF9wb2ludGVyc1tpZHhdID0gaGR3OwogCQkJYnJlYWs7CiAJCX0KLQl9IHdoaWxlICgwKTsgdXAoJnB2cjJfdW5pdF9zZW0pOworCX0gd2hpbGUgKDApOyBtdXRleF91bmxvY2soJnB2cjJfdW5pdF9tdHgpOwogCiAJY250MSA9IDA7CiAJY250MiA9IHNjbnByaW50ZihoZHctPm5hbWUrY250MSxzaXplb2YoaGR3LT5uYW1lKS1jbnQxLCJwdnJ1c2IyIik7CkBAIC0yMTg2LDEzICsyMTg2LDEzIEBACiAJfQogCXB2cjJfaTJjX2NvcmVfZG9uZShoZHcpOwogCXB2cjJfaGR3X3JlbW92ZV91c2Jfc3R1ZmYoaGR3KTsKLQlkb3duKCZwdnIyX3VuaXRfc2VtKTsgZG8geworCW11dGV4X2xvY2soJnB2cjJfdW5pdF9tdHgpOyBkbyB7CiAJCWlmICgoaGR3LT51bml0X251bWJlciA+PSAwKSAmJgogCQkgICAgKGhkdy0+dW5pdF9udW1iZXIgPCBQVlJfTlVNKSAmJgogCQkgICAgKHVuaXRfcG9pbnRlcnNbaGR3LT51bml0X251bWJlcl0gPT0gaGR3KSkgewogCQkJdW5pdF9wb2ludGVyc1toZHctPnVuaXRfbnVtYmVyXSA9IE5VTEw7CiAJCX0KLQl9IHdoaWxlICgwKTsgdXAoJnB2cjJfdW5pdF9zZW0pOworCX0gd2hpbGUgKDApOyBtdXRleF91bmxvY2soJnB2cjJfdW5pdF9tdHgpOwogCWtmcmVlKGhkdy0+Y29udHJvbHMpOwogCWtmcmVlKGhkdy0+bXBlZ19jdHJsX2luZm8pOwogCWtmcmVlKGhkdy0+c3RkX2RlZnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKaW5kZXggNThmYzNjNy4uNjc4NmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCiAjaW5jbHVkZSAicHZydXNiMi1meDItY21kLmgiCisjaW5jbHVkZSAicHZydXNiMi5oIgogCiAjZGVmaW5lIHRyYWNlX2kyYyguLi4pIHB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkMsX19WQV9BUkdTX18pCiAKQEAgLTM4LDYgKzM5LDEwIEBACiBtb2R1bGVfcGFyYW0oaTJjX3NjYW4sIGludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoaTJjX3NjYW4sInNjYW4gaTJjIGJ1cyBhdCBpbnNtb2QgdGltZSIpOwogCitzdGF0aWMgaW50IGlyX21vZGVbUFZSX05VTV0gPSB7IFswIC4uLiBQVlJfTlVNLTFdID0gMSB9OworbW9kdWxlX3BhcmFtX2FycmF5KGlyX21vZGUsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlyX21vZGUsInNwZWNpZnk6IDA9ZGlzYWJsZSBJUiByZWNlcHRpb24sIDE9bm9ybWFsIElSIik7CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXRhaWwsCiAJCQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBtYXhsZW4pOwpAQCAtMjczLDYgKzI3OCwxNSBAQAogCXJldHVybiBwdnIyX2kyY19iYXNpY19vcChoZHcsaTJjX2FkZHIsd2RhdGEsd2xlbixyZGF0YSxybGVuKTsKIH0KIAorLyogVGhpcyBpcyBhbiBlbnRyeSBwb2ludCBkZXNpZ25lZCB0byBhbHdheXMgZmFpbCBhbnkgYXR0ZW1wdCB0byBwZXJmb3JtIGEKKyAgIHRyYW5zZmVyLiAgV2UgdXNlIHRoaXMgdG8gY2F1c2UgY2VydGFpbiBJMkMgYWRkcmVzc2VzIHRvIG5vdCBiZQorICAgcHJvYmVkLiAqLworc3RhdGljIGludCBpMmNfYmxhY2tfaG9sZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKKwkJCSAgIHU4IGkyY19hZGRyLHU4ICp3ZGF0YSx1MTYgd2xlbix1OCAqcmRhdGEsdTE2IHJsZW4pCit7CisJcmV0dXJuIC1FSU87Cit9CisKIC8qIFRoaXMgaXMgYSBzcGVjaWFsIGVudHJ5IHBvaW50IHRoYXQgaXMgZW50ZXJlZCBpZiBhbiBJMkMgb3BlcmF0aW9uIGlzCiAgICBhdHRlbXB0ZWQgdG8gYSBjeDI1ODQwIGNoaXAgb24gbW9kZWwgMjR4eHggaGFyZHdhcmUuICBUaGlzIGNoaXAgY2FuCiAgICBzb21ldGltZXMgd2VkZ2UgaXRzZWxmLiAgV29yc2Ugc3RpbGwsIHdoZW4gdGhpcyBoYXBwZW5zIG1zcDM0MDAgY2FuCkBAIC05OTQsMTAgKzEwMDgsMTcgQEAKIAl9CiAKIAkvKiBIb3dldmVyLCBkZWFsIHdpdGggdmFyaW91cyBzcGVjaWFsIGNhc2VzIGZvciAyNHh4eCBoYXJkd2FyZS4gKi8KKwlpZiAoaXJfbW9kZVtoZHctPnVuaXRfbnVtYmVyXSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUiBkaXNhYmxlZFxuIixoZHctPm5hbWUpOworCQloZHctPmkyY19mdW5jWzB4MThdID0gaTJjX2JsYWNrX2hvbGU7CisJfSBlbHNlIGlmIChpcl9tb2RlW2hkdy0+dW5pdF9udW1iZXJdID09IDEpIHsKKwkJaWYgKGhkdy0+aGR3X3R5cGUgPT0gUFZSMl9IRFdfVFlQRV8yNFhYWCkgeworCQkJaGR3LT5pMmNfZnVuY1sweDE4XSA9IGkyY18yNHh4eF9pcjsKKwkJfQorCX0KIAlpZiAoaGR3LT5oZHdfdHlwZSA9PSBQVlIyX0hEV19UWVBFXzI0WFhYKSB7CiAJCWhkdy0+aTJjX2Z1bmNbMHgxYl0gPSBpMmNfaGFja193bTg3NzU7CiAJCWhkdy0+aTJjX2Z1bmNbMHg0NF0gPSBpMmNfaGFja19jeDI1ODQwOwotCQloZHctPmkyY19mdW5jWzB4MThdID0gaTJjXzI0eHh4X2lyOwogCX0KIAogCS8vIENvbmZpZ3VyZSB0aGUgYWRhcHRlciBhbmQgc2V0IHVwIGV2ZXJ5dGhpbmcgZWxzZSByZWxhdGVkIHRvIGl0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCmluZGV4IGU5NzZjNDguLjllYTQxYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYwppbmRleCBhNzQxYzU1Ni4uN2FiNzliYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC01MTgsNDAgKzUxOCwzMiBAQAogCX0KIAlzZnAtPml0ZW1fbGFzdCA9IGNpcDsKIAotCWNpcC0+YXR0cl9uYW1lLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAljaXAtPmF0dHJfbmFtZS5hdHRyLm5hbWUgPSAibmFtZSI7CiAJY2lwLT5hdHRyX25hbWUuYXR0ci5tb2RlID0gU19JUlVHTzsKIAljaXAtPmF0dHJfbmFtZS5zaG93ID0gZnAtPnNob3dfbmFtZTsKIAotCWNpcC0+YXR0cl90eXBlLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAljaXAtPmF0dHJfdHlwZS5hdHRyLm5hbWUgPSAidHlwZSI7CiAJY2lwLT5hdHRyX3R5cGUuYXR0ci5tb2RlID0gU19JUlVHTzsKIAljaXAtPmF0dHJfdHlwZS5zaG93ID0gZnAtPnNob3dfdHlwZTsKIAotCWNpcC0+YXR0cl9taW4uYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCWNpcC0+YXR0cl9taW4uYXR0ci5uYW1lID0gIm1pbl92YWwiOwogCWNpcC0+YXR0cl9taW4uYXR0ci5tb2RlID0gU19JUlVHTzsKIAljaXAtPmF0dHJfbWluLnNob3cgPSBmcC0+c2hvd19taW47CiAKLQljaXAtPmF0dHJfbWF4LmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAljaXAtPmF0dHJfbWF4LmF0dHIubmFtZSA9ICJtYXhfdmFsIjsKIAljaXAtPmF0dHJfbWF4LmF0dHIubW9kZSA9IFNfSVJVR087CiAJY2lwLT5hdHRyX21heC5zaG93ID0gZnAtPnNob3dfbWF4OwogCi0JY2lwLT5hdHRyX3ZhbC5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJY2lwLT5hdHRyX3ZhbC5hdHRyLm5hbWUgPSAiY3VyX3ZhbCI7CiAJY2lwLT5hdHRyX3ZhbC5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCi0JY2lwLT5hdHRyX2N1c3RvbS5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJY2lwLT5hdHRyX2N1c3RvbS5hdHRyLm5hbWUgPSAiY3VzdG9tX3ZhbCI7CiAJY2lwLT5hdHRyX2N1c3RvbS5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCi0JY2lwLT5hdHRyX2VudW0uYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCWNpcC0+YXR0cl9lbnVtLmF0dHIubmFtZSA9ICJlbnVtX3ZhbCI7CiAJY2lwLT5hdHRyX2VudW0uYXR0ci5tb2RlID0gU19JUlVHTzsKIAljaXAtPmF0dHJfZW51bS5zaG93ID0gZnAtPnNob3dfZW51bTsKIAotCWNpcC0+YXR0cl9iaXRzLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAljaXAtPmF0dHJfYml0cy5hdHRyLm5hbWUgPSAiYml0X3ZhbCI7CiAJY2lwLT5hdHRyX2JpdHMuYXR0ci5tb2RlID0gU19JUlVHTzsKIAljaXAtPmF0dHJfYml0cy5zaG93ID0gZnAtPnNob3dfYml0czsKQEAgLTYxNiwxMiArNjA4LDEwIEBACiAKIAlkaXAgPSBremFsbG9jKHNpemVvZigqZGlwKSxHRlBfS0VSTkVMKTsKIAlpZiAoIWRpcCkgcmV0dXJuOwotCWRpcC0+YXR0cl9kZWJ1Z2NtZC5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJZGlwLT5hdHRyX2RlYnVnY21kLmF0dHIubmFtZSA9ICJkZWJ1Z2NtZCI7CiAJZGlwLT5hdHRyX2RlYnVnY21kLmF0dHIubW9kZSA9IFNfSVJVR098U19JV1VTUnxTX0lXR1JQOwogCWRpcC0+YXR0cl9kZWJ1Z2NtZC5zaG93ID0gZGVidWdjbWRfc2hvdzsKIAlkaXAtPmF0dHJfZGVidWdjbWQuc3RvcmUgPSBkZWJ1Z2NtZF9zdG9yZTsKLQlkaXAtPmF0dHJfZGVidWdpbmZvLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAlkaXAtPmF0dHJfZGVidWdpbmZvLmF0dHIubmFtZSA9ICJkZWJ1Z2luZm8iOwogCWRpcC0+YXR0cl9kZWJ1Z2luZm8uYXR0ci5tb2RlID0gU19JUlVHTzsKIAlkaXAtPmF0dHJfZGVidWdpbmZvLnNob3cgPSBkZWJ1Z2luZm9fc2hvdzsKQEAgLTgxMSw3ICs4MDEsNiBAQAogCQlyZXR1cm47CiAJfQogCi0Jc2ZwLT5hdHRyX3Y0bF9taW5vcl9udW1iZXIuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCXNmcC0+YXR0cl92NGxfbWlub3JfbnVtYmVyLmF0dHIubmFtZSA9ICJ2NGxfbWlub3JfbnVtYmVyIjsKIAlzZnAtPmF0dHJfdjRsX21pbm9yX251bWJlci5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCXNmcC0+YXR0cl92NGxfbWlub3JfbnVtYmVyLnNob3cgPSB2NGxfbWlub3JfbnVtYmVyX3Nob3c7CkBAIC04MjUsNyArODE0LDYgQEAKIAkJc2ZwLT52NGxfbWlub3JfbnVtYmVyX2NyZWF0ZWRfb2sgPSAhMDsKIAl9CiAKLQlzZnAtPmF0dHJfdjRsX3JhZGlvX21pbm9yX251bWJlci5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJc2ZwLT5hdHRyX3Y0bF9yYWRpb19taW5vcl9udW1iZXIuYXR0ci5uYW1lID0gInY0bF9yYWRpb19taW5vcl9udW1iZXIiOwogCXNmcC0+YXR0cl92NGxfcmFkaW9fbWlub3JfbnVtYmVyLmF0dHIubW9kZSA9IFNfSVJVR087CiAJc2ZwLT5hdHRyX3Y0bF9yYWRpb19taW5vcl9udW1iZXIuc2hvdyA9IHY0bF9yYWRpb19taW5vcl9udW1iZXJfc2hvdzsKQEAgLTgzOSw3ICs4MjcsNiBAQAogCQlzZnAtPnY0bF9yYWRpb19taW5vcl9udW1iZXJfY3JlYXRlZF9vayA9ICEwOwogCX0KIAotCXNmcC0+YXR0cl91bml0X251bWJlci5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJc2ZwLT5hdHRyX3VuaXRfbnVtYmVyLmF0dHIubmFtZSA9ICJ1bml0X251bWJlciI7CiAJc2ZwLT5hdHRyX3VuaXRfbnVtYmVyLmF0dHIubW9kZSA9IFNfSVJVR087CiAJc2ZwLT5hdHRyX3VuaXRfbnVtYmVyLnNob3cgPSB1bml0X251bWJlcl9zaG93OwpAQCAtODUyLDcgKzgzOSw2IEBACiAJCXNmcC0+dW5pdF9udW1iZXJfY3JlYXRlZF9vayA9ICEwOwogCX0KIAotCXNmcC0+YXR0cl9idXNfaW5mby5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJc2ZwLT5hdHRyX2J1c19pbmZvLmF0dHIubmFtZSA9ICJidXNfaW5mb19zdHIiOwogCXNmcC0+YXR0cl9idXNfaW5mby5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCXNmcC0+YXR0cl9idXNfaW5mby5zaG93ID0gYnVzX2luZm9fc2hvdzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnCmluZGV4IDhmZGY3MTAuLjcyOThjZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBVU0JfUFdDCiAJdHJpc3RhdGUgIlVTQiBQaGlsaXBzIENhbWVyYXMiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZXNlIFBoaWxpcHMgJiBPRU0KIAkgIHdlYmNhbXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9waGlsaXBzLnR4dCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3BoaWxpcHMudHh0CmluZGV4IGY1ZTg0ODQuLmY5ZjM1ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3BoaWxpcHMudHh0CisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3BoaWxpcHMudHh0CkBAIC01NCw5ICs1NCw5IEBACiAgICBTcGVjaWZpZXMgdGhlIGRlc2lyZWQgZnJhbWVyYXRlLiBJcyBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiA0LTMwLgogCiBmYnVmcwotICAgVGhpcyBwYXJhbXRlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBpbnRlcm5hbCBidWZmZXJzIHRvIHVzZSBmb3Igc3RvcmluZworICAgVGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgaW50ZXJuYWwgYnVmZmVycyB0byB1c2UgZm9yIHN0b3JpbmcKICAgIGZyYW1lcyBmcm9tIHRoZSBjYW0uIFRoaXMgd2lsbCBoZWxwIGlmIHRoZSBwcm9jZXNzIHRoYXQgcmVhZHMgaW1hZ2VzIGZyb20KLSAgIHRoZSBjYW0gaXMgYSBiaXQgc2xvdyBvciBtb21lbnRhcmVseSBidXN5LiBIb3dldmVyLCBvbiBzbG93IG1hY2hpbmVzIGl0CisgICB0aGUgY2FtIGlzIGEgYml0IHNsb3cgb3IgbW9tZW50YXJpbHkgYnVzeS4gSG93ZXZlciwgb24gc2xvdyBtYWNoaW5lcyBpdAogICAgb25seSBpbnRyb2R1Y2VzIGxhZywgc28gY2hvb3NlIGNhcmVmdWxseS4gVGhlIGRlZmF1bHQgaXMgMywgd2hpY2ggaXMKICAgIHJlYXNvbmFibGUuIFlvdSBjYW4gc2V0IGl0IGJldHdlZW4gMiBhbmQgNS4KIApAQCAtMjA5LDcgKzIwOSw3IEBACiAKICAgICAgMTI4ICAgMHg4MCAgIFBXQ1ggZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmYKIAotICAgRm9yIGV4YW1wbGUsIHRvIHRyYWNlIHRoZSBvcGVuKCkgJiByZWFkKCkgZnVjdGlvbnMsIHN1bSA4ICsgNCA9IDEyLAorICAgRm9yIGV4YW1wbGUsIHRvIHRyYWNlIHRoZSBvcGVuKCkgJiByZWFkKCkgZnVuY3Rpb25zLCBzdW0gOCArIDQgPSAxMiwKICAgIHNvIHlvdSB3b3VsZCBzdXBwbHkgdHJhY2U9MTIgZHVyaW5nIGluc21vZCBvciBtb2Rwcm9iZS4gSWYKICAgIHlvdSB3YW50IHRvIHR1cm4gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBwcm9iaW5nIHRyYWNpbmcgb2ZmLCBzZXQgdHJhY2U9MC4KICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0cmFjZSBpcyAzNSAoMHgyMykuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCA0ZWE0NzliLi41MGYxNWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTExNzAsNiArMTE3MCw0MiBAQAogCQkJLmFtdXggICA9IExJTkUyLAogCQl9LAogCX0sCisgICAgW1NBQTcxMzRfQk9BUkRfRUNTX1RWUDNYUF80Q0I2XSA9IHsKKwkJLyogQmFycnkgU2NvdHQgPGJhcnJ5LnNjb3R0QG9uZWxhbi5jby51az4gKi8KKwkJLm5hbWUJCT0gIkVsaXRlZ3JvdXAgRUNTIFRWUDNYUCBGTTEyNDYgVHVuZXIgQ2FyZCAoUEFMLEZNKSIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTF9JLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSAgID0gbmFtZV90diwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IFRWLAorCQkJLnR2ICAgICA9IDEsCisJCX0seworCQkJLm5hbWUgICA9IG5hbWVfdHZfbW9ubywKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IExJTkUyLAorCQkJLnR2ICAgICA9IDEsCisJCX0seworCQkJLm5hbWUgICA9IG5hbWVfY29tcDEsCisJCQkudm11eCAgID0gMywKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJfSx7CisJCQkubmFtZSAgID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCAgID0gOCwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJfSx7CisJCQkubmFtZSAgID0gIkNWaWQgb3ZlciBTVmlkIiwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgICA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCAgID0gTElORTIsCisJCX0sCisJfSwKIAlbU0FBNzEzNF9CT0FSRF9BVkFDU1NNQVJUVFZdID0gewogCQkvKiBSb21hbiBQc3pvbmN6ZW5rbyA8cm9ta2FAa29sb3MubWF0aC51bmkubG9kei5wbD4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkFWQUNTIFNtYXJ0VFYiLApAQCAtMjc1NCw2ICsyNzkwLDM1IEBACiAJCQkuYW11eCAgID0gTElORTEsCiAJCX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9LV09STERfRFZCVF8yMTBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiS1dvcmxkIERWQi1UIDIxMCIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuZ3Bpb21hc2sgICAgICAgPSAxIDw8IDIxLAorCQkuaW5wdXRzID0ge3sKKwkJCS5uYW1lICAgPSBuYW1lX3R2LAorCQkJLnZtdXggICA9IDEsCisJCQkuYW11eCAgID0gVFYsCisJCQkudHYgICAgID0gMSwKKwkJfSx7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAzLAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ICAgPSA4LAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgICA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCAgID0gVFYsCisJCQkuZ3BpbyAgID0gMHgwMjAwMDAwLAorCQl9LAorCX0sCiAJW1NBQTcxMzRfQk9BUkRfS1dPUkxEX0FUU0MxMTBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiS3dvcmxkIEFUU0MxMTAiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LApAQCAtMzQwNyw2ICszNDcyLDM2IEBACiAJCQkuZ3BpbyA9IDB4MDIwMDAwMCwKIAkJfSwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX1NBQlJFTlRfVFZfUENCMDVdID0geworCQkubmFtZSAgICAgICAgICAgPSAiU2FicmVudCBQQ01DSUEgVFYtUENCMDUiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBUViwKKwkJCS50diAgID0gMSwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMiwKKwkJCS52bXV4ID0gMCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX19LAorCQkubXV0ZSA9IHsKKwkJCS5uYW1lID0gbmFtZV9tdXRlLAorCQkJLmFtdXggPSBUViwKKwkJfSwKKwl9LAogfTsKIAogY29uc3QgdW5zaWduZWQgaW50IHNhYTcxMzRfYmNvdW50ID0gQVJSQVlfU0laRShzYWE3MTM0X2JvYXJkcyk7CkBAIC0zNTE1LDcgKzM2MTAsMTMgQEAKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAogCQkuc3VidmVuZG9yICAgID0gMHg1MTY4LAkvKiBBbmltYXRpb24gVGVjaG5vbG9naWVzIChMaWZlVmlldykgKi8KLQkJLnN1YmRldmljZSAgICA9IDB4MDIxNCwgLyogU3RhbmRhcmQgUENJLCBMUjIxNFdGICovCisJCS5zdWJkZXZpY2UgICAgPSAweDAyMTQsIC8qIFN0YW5kYXJkIFBDSSwgTFIyMTQgUmV2IEUgYW5kIGVhcmxpZXIgKFNBQTcxMzUpICovCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fRk0sCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4NTE2OCwJLyogQW5pbWF0aW9uIFRlY2hub2xvZ2llcyAoTGlmZVZpZXcpICovCisJCS5zdWJkZXZpY2UgICAgPSAweDUyMTQsIC8qIFN0YW5kYXJkIFBDSSwgTFIyMTQgUmV2IEYgb253YXJkcyAoU0FBNzEzMSkgKi8KIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9GTSwKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKQEAgLTM2ODksNiArMzc5MCwxMiBAQAogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9FQ1NfVFZQM1hQXzRDQjUsCiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKKwkJLnN1YnZlbmRvciAgICA9IDB4MTAxOSwKKwkJLnN1YmRldmljZSAgICA9IDB4NGNiNiwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRUNTX1RWUDNYUF80Q0I2LAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDEyYWIsCiAJCS5zdWJkZXZpY2UgICAgPSAweDA4MDAsCkBAIC0zOTE1LDYgKzQwMjIsMTIgQEAKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfVEVWSU9OX0RWQlRfMjIwUkYsCiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTdkZSwKKwkJLnN1YmRldmljZSAgICA9IDB4NzI1MCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfS1dPUkxEX0RWQlRfMjEwLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsIC8qIFNBQTcxMzVITCAqLwogCQkuc3VidmVuZG9yICAgID0gMHgxN2RlLAogCQkuc3ViZGV2aWNlICAgID0gMHg3MzUwLApAQCAtNDEwMCw2ICs0MjEzLDEyIEBACiAJCS5zdWJkZXZpY2UgICAgPSAweDQ4NTcsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTCwKIAl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LAorCQkuc3VidmVuZG9yICAgID0gMHgwOTE5LCAvKiBTaW5vVmlkZW8gUENJIDIzMDkgUHJvdGV1cyAoNzEzNCkgKi8KKwkJLnN1YmRldmljZSAgICA9IDB4MjAwMywgLyogT0VNIGNhcmRidXMgKi8KKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfU0FCUkVOVF9UVl9QQ0IwNSwKKwl9LHsKIAkJLyogLS0tIGJvYXJkcyB3aXRob3V0IGVlcHJvbSArIHN1YnN5c3RlbSBJRCAtLS0gKi8KIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LApAQCAtNDE3OCw2ICs0Mjk3LDcgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfQ0lORVJHWTYwMF9NSzM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0VDU19UVlAzWFA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0VDU19UVlAzWFBfNENCNToKKwljYXNlIFNBQTcxMzRfQk9BUkRfRUNTX1RWUDNYUF80Q0I2OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9NRDI4MTk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9WU1RSRUFNX1hQRVJUOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfWFBFUlQ6CkBAIC00NDI2LDYgKzQ1NDYsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzMxMGk6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9EVkJUXzIxMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfVEVWSU9OX0RWQlRfMjIwUkY6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9IWUJSSURfTE5BOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCA2NWFlYzg4Li5lMGVlYzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtODg3LDYgKzg4NywyMCBAQAogCS5hbnRlbm5hX3N3aXRjaD0gMiwKIAkucmVxdWVzdF9maXJtd2FyZSA9IHBoaWxpcHNfdGRhMTAwNHhfcmVxdWVzdF9maXJtd2FyZQogfTsKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIGt3b3JsZF9kdmJfdF8yMTBfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwOCwKKwkuaW52ZXJ0ICAgICAgICA9IDEsCisJLmludmVydF9vY2xrICAgPSAwLAorCS54dGFsX2ZyZXEgICAgID0gVERBMTAwNDZfWFRBTF8xNk0sCisJLmFnY19jb25maWcgICAgPSBUREExMDA0Nl9BR0NfVERBODI3WCwKKwkuZ3Bpb19jb25maWcgICA9IFREQTEwMDQ2X0dQMTFfSSwKKwkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMDQ1LAorCS5pMmNfZ2F0ZSAgICAgID0gMHg0YiwKKwkudHVuZXJfYWRkcmVzcyA9IDB4NjEsCisJLnR1bmVyX2NvbmZpZyAgPSAyLAorCS5hbnRlbm5hX3N3aXRjaD0gMSwKKwkucmVxdWVzdF9maXJtd2FyZSA9IHBoaWxpcHNfdGRhMTAwNHhfcmVxdWVzdF9maXJtd2FyZQorfTsKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogc3BlY2lhbCBjYXNlOiB0aGlzIGNhcmQgdXNlcyBzYWE3MTN4IEdQSU8yMiBmb3IgdGhlIG1vZGUgc3dpdGNoCiAgKi8KQEAgLTEwMzksNiArMTA1Myw5IEBACiAJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZGE2NjUxX3BsbF9zZXQ7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9EVkJUXzIxMDoKKwkJY29uZmlndXJlX3RkYTgyN3hfZmUoZGV2LCAma3dvcmxkX2R2Yl90XzIxMF9jb25maWcpOworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfUEhJTElQU19USUdFUjoKIAkJY29uZmlndXJlX3RkYTgyN3hfZmUoZGV2LCAmcGhpbGlwc190aWdlcl9jb25maWcpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYwppbmRleCBkZDc1OWQ2Li43YjU2MDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogI2luY2x1ZGUgInNhYTcxMzQtcmVnLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCA2MjIyNGNjLi4xNTYyM2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTIzNSw2ICsyMzUsOSBAQAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9NMTAyCSAgIDExMAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FTVVNfUDcxMzFfNDg3MQkgICAxMTEKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0hZQlJJRF9MTkEgMTEyCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfRUNTX1RWUDNYUF80Q0I2ICAxMTMKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9LV09STERfRFZCVF8yMTAgMTE0CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfU0FCUkVOVF9UVl9QQ0IwNSAgICAgMTE1CiAKICNkZWZpbmUgU0FBNzEzNF9NQVhCT0FSRFMgOAogI2RlZmluZSBTQUE3MTM0X0lOUFVUX01BWCA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmgKaW5kZXggYzA4OTFiMy4uODM1ZWY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuaApAQCAtNSw3ICs1LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUgc2U0MDFfREVCVUcJLyogVHVybiBvbiBkZWJ1ZyBtZXNzYWdlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZwppbmRleCAxOTIwNGY1Li5mNzFmMjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBVU0JfU045QzEwMgogCXRyaXN0YXRlICJVU0IgU045QzF4eCBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX1Y0TDIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gU09OaVggU045QzEwMSwKIAkgIFNOOUMxMDIsIFNOOUMxMDMsIFNOOUMxMDUgYW5kIFNOOUMxMjAgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyLmgKaW5kZXggNjgwZTc0Ni4uMTFmY2I0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMi5oCkBAIC0xNDEsNyArMTQxLDcgQEAKIAogdm9pZAogc245YzEwMl9hdHRhY2hfc2Vuc29yKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAotCQkgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcikKKwkJICAgICAgY29uc3Qgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IpCiB7CiAJbWVtY3B5KCZjYW0tPnNlbnNvciwgc2Vuc29yLCBzaXplb2Yoc3RydWN0IHNuOWMxMDJfc2Vuc29yKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKaW5kZXggODlmODMzNS4uNzRhMjA0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwpAQCAtNDgsOCArNDgsOCBAQAogI2RlZmluZSBTTjlDMTAyX01PRFVMRV9BVVRIT1IgICAiKEMpIDIwMDQtMjAwNyBMdWNhIFJpc29saWEiCiAjZGVmaW5lIFNOOUMxMDJfQVVUSE9SX0VNQUlMICAgICI8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iCiAjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX0xJQ0VOU0UgICJHUEwiCi0jZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT04gICIxOjEuMzkiCi0jZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT05fQ09ERSAgS0VSTkVMX1ZFUlNJT04oMSwgMSwgMzkpCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT04gICIxOjEuNDQiCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT05fQ09ERSAgS0VSTkVMX1ZFUlNJT04oMSwgMSwgNDQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMjA5LDM4ICsyMDksNDEgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAvKgotICogV3JpdGUgYSBzZXF1ZW5jZSBvZiBjb3VudCB2YWx1ZS9yZWdpc3RlciBwYWlycy4gIFJldHVybnMgLTEgYWZ0ZXIgdGhlCi0gKiBmaXJzdCBmYWlsZWQgd3JpdGUsIG9yIDAgZm9yIG5vIGVycm9ycy4KLSAqLworICAgV3JpdGUgYSBzZXF1ZW5jZSBvZiBjb3VudCB2YWx1ZS9yZWdpc3RlciBwYWlycy4gUmV0dXJucyAtMSBhZnRlciB0aGUgZmlyc3QKKyAgIGZhaWxlZCB3cml0ZSwgb3IgMCBmb3Igbm8gZXJyb3JzLgorKi8KIGludCBzbjljMTAyX3dyaXRlX3JlZ3Moc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIGNvbnN0IHU4IHZhbHJlZ1tdWzJdLAogCQkgICAgICAgaW50IGNvdW50KQogewogCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7Ci0JdTgqIHZhbHVlID0gY2FtLT5jb250cm9sX2J1ZmZlcjsgIC8qIE5lZWRlZCBmb3IgRE1BJ2FibGUgbWVtb3J5ICovCisJdTgqIGJ1ZmYgPSBjYW0tPmNvbnRyb2xfYnVmZmVyOwogCWludCBpLCByZXM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQl1OCBpbmRleCA9IHZhbHJlZ1tpXVsxXTsKIAogCQkvKgotCQkgKiBpbmRleCBpcyBhIHU4LCBzbyBpdCBtdXN0IGJlIDwyNTYgYW5kIGNhbid0IGJlIG91dCBvZiByYW5nZS4KLQkJICogSWYgd2UgcHV0IGluIGEgY2hlY2sgYW55d2F5LCBnY2MgYW5ub3lzIHVzIHdpdGggYSB3YXJuaW5nCi0JCSAqIHRoYXQgb3VyIGNoZWNrIGlzIHVzZWxlc3MuICBQZW9wbGUgZ2V0IGFsbCB1cHBpdHkgd2hlbiB0aGV5Ci0JCSAqIHNlZSB3YXJuaW5ncyBpbiB0aGUga2VybmVsIGNvbXBpbGUuCi0JCSAqLworCQkgICBpbmRleCBpcyBhIHU4LCBzbyBpdCBtdXN0IGJlIDwyNTYgYW5kIGNhbid0IGJlIG91dCBvZiByYW5nZS4KKwkJICAgSWYgd2UgcHV0IGluIGEgY2hlY2sgYW55d2F5LCBnY2MgYW5ub3lzIHVzIHdpdGggYSB3YXJuaW5nCisJCSAgIGhhdCBvdXIgY2hlY2sgaXMgdXNlbGVzcy4gUGVvcGxlIGdldCBhbGwgdXBwaXR5IHdoZW4gdGhleQorCQkgICBzZWUgd2FybmluZ3MgaW4gdGhlIGtlcm5lbCBjb21waWxlLgorCQkqLwogCi0JCSp2YWx1ZSA9IHZhbHJlZ1tpXVswXTsKLQkJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCQkgICAgICAweDA4LCAweDQxLCBpbmRleCwgMCwKLQkJCQkgICAgICB2YWx1ZSwgMSwgU045QzEwMl9DVFJMX1RJTUVPVVQpOworCQkqYnVmZiA9IHZhbHJlZ1tpXVswXTsKKworCQlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDA4LAorCQkJCSAgICAgIDB4NDEsIGluZGV4LCAwLCBidWZmLCAxLAorCQkJCSAgICAgIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKKwogCQlpZiAocmVzIDwgMCkgewogCQkJREJHKDMsICJGYWlsZWQgdG8gd3JpdGUgYSByZWdpc3RlciAodmFsdWUgMHglMDJYLCAiCi0JCQkgICAgICAgImluZGV4IDB4JTAyWCwgZXJyb3IgJWQpIiwgKnZhbHVlLCBpbmRleCwgcmVzKTsKKwkJCSAgICAgICAiaW5kZXggMHglMDJYLCBlcnJvciAlZCkiLCAqYnVmZiwgaW5kZXgsIHJlcyk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAotCQljYW0tPnJlZ1tpbmRleF0gPSAqdmFsdWU7CisJCWNhbS0+cmVnW2luZGV4XSA9ICpidWZmOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjcyLDggKzI3NSw4IEBACiB9CiAKIAotLyogTk9URTogcmVhZGluZyBzb21lIHJlZ2lzdGVycyBhbHdheXMgcmV0dXJucyAwICovCi1zdGF0aWMgaW50IHNuOWMxMDJfcmVhZF9yZWcoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHUxNiBpbmRleCkKKy8qIE5PVEU6IHdpdGggdGhlIFNOOUMxMFsxMjNdIHJlYWRpbmcgc29tZSByZWdpc3RlcnMgYWx3YXlzIHJldHVybnMgMCAqLworaW50IHNuOWMxMDJfcmVhZF9yZWcoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHUxNiBpbmRleCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSogdWRldiA9IGNhbS0+dXNiZGV2OwogCXU4KiBidWZmID0gY2FtLT5jb250cm9sX2J1ZmZlcjsKQEAgLTI5OSw3ICszMDIsOCBAQAogCiAKIHN0YXRpYyBpbnQKLXNuOWMxMDJfaTJjX3dhaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKQorc245YzEwMl9pMmNfd2FpdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJIGNvbnN0IHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKQogewogCWludCBpLCByOwogCkBAIC0zMjAsNyArMzI0LDcgQEAKIAogc3RhdGljIGludAogc245YzEwMl9pMmNfZGV0ZWN0X3JlYWRfZXJyb3Ioc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0JCQkgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcikKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKQogewogCWludCByICwgZXJyID0gMDsKIApAQCAtMzQyLDcgKzM0Niw3IEBACiAKIHN0YXRpYyBpbnQKIHNuOWMxMDJfaTJjX2RldGVjdF93cml0ZV9lcnJvcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKLQkJCSAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcikKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcikKIHsKIAlpbnQgcjsKIAlyID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIDB4MDgpOwpAQCAtMzUyLDEyICszNTYsMTIgQEAKIAogaW50CiBzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0JCQkgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IsIHU4IGRhdGEwLCB1OCBkYXRhMSwKLQkJCSB1OCBuLCB1OCBidWZmZXJbXSkKKwkJCSBjb25zdCBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggZGF0YTAsCisJCQkgdTggZGF0YTEsIHU4IG4sIHU4IGJ1ZmZlcltdKQogewogCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7CiAJdTgqIGRhdGEgPSBjYW0tPmNvbnRyb2xfYnVmZmVyOwotCWludCBlcnIgPSAwLCByZXM7CisJaW50IGkgPSAwLCBlcnIgPSAwLCByZXM7CiAKIAkvKiBXcml0ZSBjeWNsZSAqLwogCWRhdGFbMF0gPSAoKHNlbnNvci0+aW50ZXJmYWNlID09IFNOOUMxMDJfSTJDXzJXSVJFUykgPyAweDgwIDogMCkgfApAQCAtNDAyLDcgKzQwNiw4IEBACiAJfQogCiAJaWYgKGJ1ZmZlcikKLQkJbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZW9mKGJ1ZmZlcikpOworCQlmb3IgKGkgPSAwOyBpIDwgbiAmJiBpIDwgNTsgaSsrKQorCQkJYnVmZmVyW24taS0xXSA9IGRhdGFbNC1pXTsKIAogCXJldHVybiAoaW50KWRhdGFbNF07CiB9CkBAIC00MTAsNyArNDE1LDcgQEAKIAogaW50CiBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAotCQkJICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggbiwgdTggZGF0YTAsCisJCQkgIGNvbnN0IHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBuLCB1OCBkYXRhMCwKIAkJCSAgdTggZGF0YTEsIHU4IGRhdGEyLCB1OCBkYXRhMywgdTggZGF0YTQsIHU4IGRhdGE1KQogewogCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7CkBAIC00NDksNyArNDU0LDcgQEAKIAogaW50CiBzbjljMTAyX2kyY190cnlfcmVhZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKLQkJICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggYWRkcmVzcykKKwkJICAgICBjb25zdCBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggYWRkcmVzcykKIHsKIAlyZXR1cm4gc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgc2Vuc29yLCBzZW5zb3ItPmkyY19zbGF2ZV9pZCwKIAkJCQkJYWRkcmVzcywgMSwgTlVMTCk7CkBAIC00NTgsNyArNDYzLDcgQEAKIAogaW50CiBzbjljMTAyX2kyY190cnlfd3JpdGUoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0JCSAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBhZGRyZXNzLCB1OCB2YWx1ZSkKKwkJICAgICAgY29uc3Qgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IsIHU4IGFkZHJlc3MsIHU4IHZhbHVlKQogewogCXJldHVybiBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgc2Vuc29yLCAzLAogCQkJCQkgc2Vuc29yLT5pMmNfc2xhdmVfaWQsIGFkZHJlc3MsCkBAIC02NTcsMTYgKzY2Miw2IEBACiB9CiAKIAotc3RhdGljIHZvaWQKLXNuOWMxMDJfd3JpdGVfZW9pbWFya2VyKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCBzdHJ1Y3Qgc245YzEwMl9mcmFtZV90KiBmKQotewotCXN0YXRpYyBjb25zdCB1OCBlb2lfbWFya2VyWzJdID0gezB4ZmYsIDB4ZDl9OwotCi0JbWVtY3B5KGYtPmJ1Zm1lbSArIGYtPmJ1Zi5ieXRlc3VzZWQsIGVvaV9tYXJrZXIsIHNpemVvZihlb2lfbWFya2VyKSk7Ci0JZi0+YnVmLmJ5dGVzdXNlZCArPSBzaXplb2YoZW9pX21hcmtlcik7Ci19Ci0KLQogc3RhdGljIHZvaWQgc245YzEwMl91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdXJiLT5jb250ZXh0OwpAQCAtMzE4MSwxNCArMzE3NiwxNCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbjljMTAyX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gPSAgICBzbjljMTAyX29wZW4sCisJLm9wZW4gPSBzbjljMTAyX29wZW4sCiAJLnJlbGVhc2UgPSBzbjljMTAyX3JlbGVhc2UsCi0JLmlvY3RsID0gICBzbjljMTAyX2lvY3RsLAorCS5pb2N0bCA9IHNuOWMxMDJfaW9jdGwsCiAJLmNvbXBhdF9pb2N0bCA9IHY0bF9jb21wYXRfaW9jdGwzMiwKLQkucmVhZCA9ICAgIHNuOWMxMDJfcmVhZCwKLQkucG9sbCA9ICAgIHNuOWMxMDJfcG9sbCwKLQkubW1hcCA9ICAgIHNuOWMxMDJfbW1hcCwKLQkubGxzZWVrID0gIG5vX2xsc2VlaywKKwkucmVhZCA9IHNuOWMxMDJfcmVhZCwKKwkucG9sbCA9IHNuOWMxMDJfcG9sbCwKKwkubW1hcCA9IHNuOWMxMDJfbW1hcCwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzI1MSw3ICszMjQ2LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JZm9yICAoaSA9IDA7IHNuOWMxMDJfc2Vuc29yX3RhYmxlW2ldOyBpKyspIHsKKwlmb3IgIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc245YzEwMl9zZW5zb3JfdGFibGUpOyBpKyspIHsKIAkJZXJyID0gc245YzEwMl9zZW5zb3JfdGFibGVbaV0oY2FtKTsKIAkJaWYgKCFlcnIpCiAJCQlicmVhazsKQEAgLTMyNjIsNyArMzI1Nyw3IEBACiAJCURCRygzLCAiU3VwcG9ydCBmb3IgJXMgbWFpbnRhaW5lZCBieSAlcyIsCiAJCSAgICBjYW0tPnNlbnNvci5uYW1lLCBjYW0tPnNlbnNvci5tYWludGFpbmVyKTsKIAl9IGVsc2UgewotCQlEQkcoMSwgIk5vIHN1cHBvcnRlZCBpbWFnZSBzZW5zb3IgZGV0ZWN0ZWQiKTsKKwkJREJHKDEsICJObyBzdXBwb3J0ZWQgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIGZvciB0aGlzIGJyaWRnZSIpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGZhaWw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKaW5kZXggZjQ5YmQ4Yy4uOTE2MDU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCkBAIC04Niw2ICs4Niw4IEBACiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYmMsIEJSSURHRV9TTjlDMTAzKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiZSwgQlJJREdFX1NOOUMxMDMpLCB9LAogCS8qIFNOOUMxMDUgKi8KKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNSwgQlJJREdFX1NOOUMxMDUpLCB9LAorCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMGY3LCBCUklER0VfU045QzEwNSksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMjcsIEJSSURHRV9TTjlDMTA1KSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDA0NzEsIDB4MDMyOCwgQlJJREdFX1NOOUMxMDUpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGMwLCBCUklER0VfU045QzEwNSksIH0sCkBAIC0xMDAsNiArMTAyLDcgQEAKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYywgQlJJREdFX1NOOUMxMDUpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZlLCBCUklER0VfU045QzEwNSksIH0sCiAJLyogU045QzEyMCAqLworCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ1OCwgMHg3MDI1LCBCUklER0VfU045QzEyMCksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMDIsIEJSSURHRV9TTjlDMTIwKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEwOCwgQlJJREdFX1NOOUMxMjApLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTBmLCBCUklER0VfU045QzEyMCksIH0sCkBAIC0xNDgsNyArMTUxLDYgQEAKIAkmc245YzEwMl9wcm9iZV90YXM1MTEwYzFiLCAvKiBkZXRlY3Rpb24gYmFzZWQgb24gVVNCIHBpZC92aWQgKi8KIAkmc245YzEwMl9wcm9iZV90YXM1MTEwZCwgLyogZGV0ZWN0aW9uIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovCiAJJnNuOWMxMDJfcHJvYmVfdGFzNTEzMGQxYiwgLyogZGV0ZWN0aW9uIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovCi0JTlVMTCwKIH07CiAKICNlbmRpZiAvKiBfU045QzEwMl9ERVZUQUJMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfaHY3MTMxZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfaHY3MTMxZC5jCmluZGV4IDI4YTg2MWEuLmVhZjlhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMWQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9odjcxMzFkLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgaHY3MTMxZCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgaHY3MTMxZCA9IHsKIAkubmFtZSA9ICJIVjcxMzFEIiwKIAkubWFpbnRhaW5lciA9ICJMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IiwKIAkuc3VwcG9ydGVkX2JyaWRnZSA9IEJSSURHRV9TTjlDMTAxIHwgQlJJREdFX1NOOUMxMDIsCkBAIC0yNDgsMTIgKzI0OCwxMCBAQAogCiAJZXJyID0gc245YzEwMl93cml0ZV9jb25zdF9yZWdzKGNhbSwgezB4MDEsIDB4MDF9LCB7MHgwMCwgMHgwMX0sCiAJCQkJICAgICAgIHsweDI4LCAweDE3fSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIC1FSU87CiAKIAlyMCA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJmh2NzEzMWQsIDB4MDApOwogCXIxID0gc245YzEwMl9pMmNfdHJ5X3JlYWQoY2FtLCAmaHY3MTMxZCwgMHgwMSk7Ci0JaWYgKHIwIDwgMCB8fCByMSA8IDApCisJaWYgKGVyciB8fCByMCA8IDAgfHwgcjEgPCAwKQogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChyMCAhPSAweDAwIHx8IHIxICE9IDB4MDQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9odjcxMzFyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9odjcxMzFyLmMKaW5kZXggNWE0OTViYS4uMGZjNDAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfaHY3MTMxci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMXIuYwpAQCAtNDQsNyArNDQsNiBAQAogCQkJCQkgICAgICAgezB4YjAsIDB4MmJ9LCB7MHhjMCwgMHgyY30sCiAJCQkJCSAgICAgICB7MHhkMCwgMHgyZH0sIHsweGUwLCAweDJlfSwKIAkJCQkJICAgICAgIHsweGYwLCAweDJmfSwgezB4ZmYsIDB4MzB9KTsKLQogCQlicmVhazsKIAljYXNlIEJSSURHRV9TTjlDMTA1OgogCWNhc2UgQlJJREdFX1NOOUMxMjA6CkBAIC0yNTQsNyArMjUzLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIGh2NzEzMXIgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuOWMxMDJfc2Vuc29yIGh2NzEzMXIgPSB7CiAJLm5hbWUgPSAiSFY3MTMxUiIsCiAJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCiAJLnN1cHBvcnRlZF9icmlkZ2UgPSBCUklER0VfU045QzEwMyB8IEJSSURHRV9TTjlDMTA1IHwgQlJJREdFX1NOOUMxMjAsCkBAIC0zNTAsMTEgKzM0OSw4IEBACiAJCQkJICAgICAgIHsweDM0LCAweDAxfSwgezB4MjAsIDB4MTd9LAogCQkJCSAgICAgICB7MHgzNCwgMHgwMX0sIHsweDQ2LCAweDAxfSk7CiAKLQlpZiAoZXJyKQotCQlyZXR1cm4gLUVJTzsKLQogCWRldmlkID0gc245YzEwMl9pMmNfdHJ5X3JlYWQoY2FtLCAmaHY3MTMxciwgMHgwMCk7Ci0JaWYgKGRldmlkIDwgMCkKKwlpZiAoZXJyIHx8IGRldmlkIDwgMCkKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAoZGV2aWQgIT0gMHgwMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM0My5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfbWkwMzQzLmMKaW5kZXggOTIwMDg0NS4uMDBiMTM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfbWkwMzQzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfbWkwMzQzLmMKQEAgLTU1LDQ1ICs1NSw0NSBAQAogCQkJICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKIHsKIAlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBzbjljMTAyX2dldF9zZW5zb3IoY2FtKTsKLQl1OCBkYXRhWzUrMV07CisJdTggZGF0YVsyXTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgotCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDA5LAotCQkJCQkgICAgIDIrMSwgZGF0YSkgPCAwKQorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDA5LCAyLAorCQkJCQkgICAgIGRhdGEpIDwgMCkKIAkJCXJldHVybiAtRUlPOwotCQljdHJsLT52YWx1ZSA9IGRhdGFbMl07CisJCWN0cmwtPnZhbHVlID0gZGF0YVswXTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9HQUlOOgotCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDM1LAotCQkJCQkgICAgIDIrMSwgZGF0YSkgPCAwKQorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDM1LCAyLAorCQkJCQkgICAgIGRhdGEpIDwgMCkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0hGTElQOgotCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDIwLAotCQkJCQkgICAgIDIrMSwgZGF0YSkgPCAwKQorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDIwLCAyLAorCQkJCQkgICAgIGRhdGEpIDwgMCkKIAkJCXJldHVybiAtRUlPOwotCQljdHJsLT52YWx1ZSA9IGRhdGFbM10gJiAweDIwID8gMSA6IDA7CisJCWN0cmwtPnZhbHVlID0gZGF0YVsxXSAmIDB4MjAgPyAxIDogMDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9WRkxJUDoKLQkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sIHMsIHMtPmkyY19zbGF2ZV9pZCwgMHgyMCwKLQkJCQkJICAgICAyKzEsIGRhdGEpIDwgMCkKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sIHMsIHMtPmkyY19zbGF2ZV9pZCwgMHgyMCwgMiwKKwkJCQkJICAgICBkYXRhKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKLQkJY3RybC0+dmFsdWUgPSBkYXRhWzNdICYgMHg4MCA/IDEgOiAwOworCQljdHJsLT52YWx1ZSA9IGRhdGFbMV0gJiAweDgwID8gMSA6IDA7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6Ci0JCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCBzLCBzLT5pMmNfc2xhdmVfaWQsIDB4MmQsCi0JCQkJCSAgICAgMisxLCBkYXRhKSA8IDApCisJCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCBzLCBzLT5pMmNfc2xhdmVfaWQsIDB4MmQsIDIsCisJCQkJCSAgICAgZGF0YSkgPCAwKQogCQkJcmV0dXJuIC1FSU87CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgotCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDJjLAotCQkJCQkgICAgIDIrMSwgZGF0YSkgPCAwKQorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDJjLCAyLAorCQkJCQkgICAgIGRhdGEpIDwgMCkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKIAljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKLQkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sIHMsIHMtPmkyY19zbGF2ZV9pZCwgMHgyZSwKLQkJCQkJICAgICAyKzEsIGRhdGEpIDwgMCkKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sIHMsIHMtPmkyY19zbGF2ZV9pZCwgMHgyZSwgMiwKKwkJCQkJICAgICBkYXRhKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEwNSw3ICsxMDUsNyBAQAogCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CiAJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CiAJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6Ci0JCWN0cmwtPnZhbHVlID0gZGF0YVszXSB8IChkYXRhWzJdIDw8IDgpOworCQljdHJsLT52YWx1ZSA9IGRhdGFbMV0gfCAoZGF0YVswXSA8PCA4KTsKIAkJaWYgKGN0cmwtPnZhbHVlID49IDB4MTAgJiYgY3RybC0+dmFsdWUgPD0gMHgzZikKIAkJCWN0cmwtPnZhbHVlIC09IDB4MTA7CiAJCWVsc2UgaWYgKGN0cmwtPnZhbHVlID49IDB4NjAgJiYgY3RybC0+dmFsdWUgPD0gMHg3ZikKQEAgLTIyMyw3ICsyMjMsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgbWkwMzQzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbjljMTAyX3NlbnNvciBtaTAzNDMgPSB7CiAJLm5hbWUgPSAiTUktMDM0MyIsCiAJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCiAJLnN1cHBvcnRlZF9icmlkZ2UgPSBCUklER0VfU045QzEwMSB8IEJSSURHRV9TTjlDMTAyLApAQCAtMzMyLDIwICszMzIsMTcgQEAKIAogaW50IHNuOWMxMDJfcHJvYmVfbWkwMzQzKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQogewotCXU4IGRhdGFbNSsxXTsKLQlpbnQgZXJyID0gMDsKKwl1OCBkYXRhWzJdOwogCi0JZXJyID0gc245YzEwMl93cml0ZV9jb25zdF9yZWdzKGNhbSwgezB4MDEsIDB4MDF9LCB7MHgwMCwgMHgwMX0sCi0JCQkJICAgICAgIHsweDI4LCAweDE3fSk7Ci0KLQlpZiAoZXJyKQorCWlmIChzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHgwMSwgMHgwMX0sIHsweDAwLCAweDAxfSwKKwkJCQkgICAgIHsweDI4LCAweDE3fSkpCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsIDB4MDAsCiAJCQkJICAgICAyLCBkYXRhKSA8IDApCiAJCXJldHVybiAtRUlPOwogCi0JaWYgKGRhdGFbNF0gIT0gMHgzMiB8fCBkYXRhWzNdICE9IDB4ZTMpCisJaWYgKGRhdGFbMV0gIT0gMHg0MiB8fCBkYXRhWzBdICE9IDB4ZTMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJm1pMDM0Myk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9taTAzNjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM2MC5jCmluZGV4IDY0Njk4YWMuLmY4ZDgxZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM2MC5jCkBAIC0yNywyMCArMjcsMTA1IEBACiAJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gc245YzEwMl9nZXRfc2Vuc29yKGNhbSk7CiAJaW50IGVyciA9IDA7CiAKLQllcnIgPSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHgwMCwgMHgxMH0sIHsweDAwLCAweDExfSwKLQkJCQkgICAgICAgezB4MGEsIDB4MTR9LCB7MHg0MCwgMHgwMX0sCi0JCQkJICAgICAgIHsweDIwLCAweDE3fSwgezB4MDcsIDB4MTh9LAotCQkJCSAgICAgICB7MHhhMCwgMHgxOX0sIHsweDAyLCAweDFjfSwKLQkJCQkgICAgICAgezB4MDMsIDB4MWR9LCB7MHgwZiwgMHgxZX0sCi0JCQkJICAgICAgIHsweDBjLCAweDFmfSwgezB4MDAsIDB4MjB9LAotCQkJCSAgICAgICB7MHgxMCwgMHgyMX0sIHsweDIwLCAweDIyfSwKLQkJCQkgICAgICAgezB4MzAsIDB4MjN9LCB7MHg0MCwgMHgyNH0sCi0JCQkJICAgICAgIHsweDUwLCAweDI1fSwgezB4NjAsIDB4MjZ9LAotCQkJCSAgICAgICB7MHg3MCwgMHgyN30sIHsweDgwLCAweDI4fSwKLQkJCQkgICAgICAgezB4OTAsIDB4Mjl9LCB7MHhhMCwgMHgyYX0sCi0JCQkJICAgICAgIHsweGIwLCAweDJifSwgezB4YzAsIDB4MmN9LAotCQkJCSAgICAgICB7MHhkMCwgMHgyZH0sIHsweGUwLCAweDJlfSwKLQkJCQkgICAgICAgezB4ZjAsIDB4MmZ9LCB7MHhmZiwgMHgzMH0pOworCXN3aXRjaCAoc245YzEwMl9nZXRfYnJpZGdlKGNhbSkpIHsKKwljYXNlIEJSSURHRV9TTjlDMTAzOgorCQllcnIgPSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHgwMCwgMHgxMH0sIHsweDAwLCAweDExfSwKKwkJCQkJICAgICAgIHsweDBhLCAweDE0fSwgezB4NDAsIDB4MDF9LAorCQkJCQkgICAgICAgezB4MjAsIDB4MTd9LCB7MHgwNywgMHgxOH0sCisJCQkJCSAgICAgICB7MHhhMCwgMHgxOX0sIHsweDAyLCAweDFjfSwKKwkJCQkJICAgICAgIHsweDAzLCAweDFkfSwgezB4MGYsIDB4MWV9LAorCQkJCQkgICAgICAgezB4MGMsIDB4MWZ9LCB7MHgwMCwgMHgyMH0sCisJCQkJCSAgICAgICB7MHgxMCwgMHgyMX0sIHsweDIwLCAweDIyfSwKKwkJCQkJICAgICAgIHsweDMwLCAweDIzfSwgezB4NDAsIDB4MjR9LAorCQkJCQkgICAgICAgezB4NTAsIDB4MjV9LCB7MHg2MCwgMHgyNn0sCisJCQkJCSAgICAgICB7MHg3MCwgMHgyN30sIHsweDgwLCAweDI4fSwKKwkJCQkJICAgICAgIHsweDkwLCAweDI5fSwgezB4YTAsIDB4MmF9LAorCQkJCQkgICAgICAgezB4YjAsIDB4MmJ9LCB7MHhjMCwgMHgyY30sCisJCQkJCSAgICAgICB7MHhkMCwgMHgyZH0sIHsweGUwLCAweDJlfSwKKwkJCQkJICAgICAgIHsweGYwLCAweDJmfSwgezB4ZmYsIDB4MzB9KTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfU045QzEwNToKKwljYXNlIEJSSURHRV9TTjlDMTIwOgorCQllcnIgPSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHg0NCwgMHgwMX0sIHsweDQwLCAweDAyfSwKKwkJCQkJICAgICAgIHsweDAwLCAweDAzfSwgezB4MWEsIDB4MDR9LAorCQkJCQkgICAgICAgezB4NTAsIDB4MDV9LCB7MHgyMCwgMHgwNn0sCisJCQkJCSAgICAgICB7MHgxMCwgMHgwN30sIHsweDAzLCAweDEwfSwKKwkJCQkJICAgICAgIHsweDA4LCAweDE0fSwgezB4YTIsIDB4MTd9LAorCQkJCQkgICAgICAgezB4NDcsIDB4MTh9LCB7MHgwMCwgMHgxOX0sCisJCQkJCSAgICAgICB7MHgxZCwgMHgxYX0sIHsweDEwLCAweDFifSwKKwkJCQkJICAgICAgIHsweDAyLCAweDFjfSwgezB4MDMsIDB4MWR9LAorCQkJCQkgICAgICAgezB4MGYsIDB4MWV9LCB7MHgwYywgMHgxZn0sCisJCQkJCSAgICAgICB7MHgwMCwgMHgyMH0sIHsweDI5LCAweDIxfSwKKwkJCQkJICAgICAgIHsweDQwLCAweDIyfSwgezB4NTQsIDB4MjN9LAorCQkJCQkgICAgICAgezB4NjYsIDB4MjR9LCB7MHg3NiwgMHgyNX0sCisJCQkJCSAgICAgICB7MHg4NSwgMHgyNn0sIHsweDk0LCAweDI3fSwKKwkJCQkJICAgICAgIHsweGExLCAweDI4fSwgezB4YWUsIDB4Mjl9LAorCQkJCQkgICAgICAgezB4YmIsIDB4MmF9LCB7MHhjNywgMHgyYn0sCisJCQkJCSAgICAgICB7MHhkMywgMHgyY30sIHsweGRlLCAweDJkfSwKKwkJCQkJICAgICAgIHsweGVhLCAweDJlfSwgezB4ZjQsIDB4MmZ9LAorCQkJCQkgICAgICAgezB4ZmYsIDB4MzB9LCB7MHgwMCwgMHgzRn0sCisJCQkJCSAgICAgICB7MHhDNywgMHg0MH0sIHsweDAxLCAweDQxfSwKKwkJCQkJICAgICAgIHsweDQ0LCAweDQyfSwgezB4MDAsIDB4NDN9LAorCQkJCQkgICAgICAgezB4NDQsIDB4NDR9LCB7MHgwMCwgMHg0NX0sCisJCQkJCSAgICAgICB7MHg0NCwgMHg0Nn0sIHsweDAwLCAweDQ3fSwKKwkJCQkJICAgICAgIHsweEM3LCAweDQ4fSwgezB4MDEsIDB4NDl9LAorCQkJCQkgICAgICAgezB4QzcsIDB4NEF9LCB7MHgwMSwgMHg0Qn0sCisJCQkJCSAgICAgICB7MHhDNywgMHg0Q30sIHsweDAxLCAweDREfSwKKwkJCQkJICAgICAgIHsweDQ0LCAweDRFfSwgezB4MDAsIDB4NEZ9LAorCQkJCQkgICAgICAgezB4NDQsIDB4NTB9LCB7MHgwMCwgMHg1MX0sCisJCQkJCSAgICAgICB7MHg0NCwgMHg1Mn0sIHsweDAwLCAweDUzfSwKKwkJCQkJICAgICAgIHsweEM3LCAweDU0fSwgezB4MDEsIDB4NTV9LAorCQkJCQkgICAgICAgezB4QzcsIDB4NTZ9LCB7MHgwMSwgMHg1N30sCisJCQkJCSAgICAgICB7MHhDNywgMHg1OH0sIHsweDAxLCAweDU5fSwKKwkJCQkJICAgICAgIHsweDQ0LCAweDVBfSwgezB4MDAsIDB4NUJ9LAorCQkJCQkgICAgICAgezB4NDQsIDB4NUN9LCB7MHgwMCwgMHg1RH0sCisJCQkJCSAgICAgICB7MHg0NCwgMHg1RX0sIHsweDAwLCAweDVGfSwKKwkJCQkJICAgICAgIHsweEM3LCAweDYwfSwgezB4MDEsIDB4NjF9LAorCQkJCQkgICAgICAgezB4QzcsIDB4NjJ9LCB7MHgwMSwgMHg2M30sCisJCQkJCSAgICAgICB7MHhDNywgMHg2NH0sIHsweDAxLCAweDY1fSwKKwkJCQkJICAgICAgIHsweDQ0LCAweDY2fSwgezB4MDAsIDB4Njd9LAorCQkJCQkgICAgICAgezB4NDQsIDB4Njh9LCB7MHgwMCwgMHg2OX0sCisJCQkJCSAgICAgICB7MHg0NCwgMHg2QX0sIHsweDAwLCAweDZCfSwKKwkJCQkJICAgICAgIHsweEM3LCAweDZDfSwgezB4MDEsIDB4NkR9LAorCQkJCQkgICAgICAgezB4QzcsIDB4NkV9LCB7MHgwMSwgMHg2Rn0sCisJCQkJCSAgICAgICB7MHhDNywgMHg3MH0sIHsweDAxLCAweDcxfSwKKwkJCQkJICAgICAgIHsweDQ0LCAweDcyfSwgezB4MDAsIDB4NzN9LAorCQkJCQkgICAgICAgezB4NDQsIDB4NzR9LCB7MHgwMCwgMHg3NX0sCisJCQkJCSAgICAgICB7MHg0NCwgMHg3Nn0sIHsweDAwLCAweDc3fSwKKwkJCQkJICAgICAgIHsweEM3LCAweDc4fSwgezB4MDEsIDB4Nzl9LAorCQkJCQkgICAgICAgezB4QzcsIDB4N0F9LCB7MHgwMSwgMHg3Qn0sCisJCQkJCSAgICAgICB7MHhDNywgMHg3Q30sIHsweDAxLCAweDdEfSwKKwkJCQkJICAgICAgIHsweDQ0LCAweDdFfSwgezB4MDAsIDB4N0Z9LAorCQkJCQkgICAgICAgezB4MTQsIDB4ODR9LCB7MHgwMCwgMHg4NX0sCisJCQkJCSAgICAgICB7MHgyNywgMHg4Nn0sIHsweDAwLCAweDg3fSwKKwkJCQkJICAgICAgIHsweDA3LCAweDg4fSwgezB4MDAsIDB4ODl9LAorCQkJCQkgICAgICAgezB4RUMsIDB4OEF9LCB7MHgwZiwgMHg4Qn0sCisJCQkJCSAgICAgICB7MHhEOCwgMHg4Q30sIHsweDBmLCAweDhEfSwKKwkJCQkJICAgICAgIHsweDNELCAweDhFfSwgezB4MDAsIDB4OEZ9LAorCQkJCQkgICAgICAgezB4M0QsIDB4OTB9LCB7MHgwMCwgMHg5MX0sCisJCQkJCSAgICAgICB7MHhDRCwgMHg5Mn0sIHsweDBmLCAweDkzfSwKKwkJCQkJICAgICAgIHsweGY3LCAweDk0fSwgezB4MGYsIDB4OTV9LAorCQkJCQkgICAgICAgezB4MEMsIDB4OTZ9LCB7MHgwMCwgMHg5N30sCisJCQkJCSAgICAgICB7MHgwMCwgMHg5OH0sIHsweDY2LCAweDk5fSwKKwkJCQkJICAgICAgIHsweDA1LCAweDlBfSwgezB4MDAsIDB4OUJ9LAorCQkJCQkgICAgICAgezB4MDQsIDB4OUN9LCB7MHgwMCwgMHg5RH0sCisJCQkJCSAgICAgICB7MHgwOCwgMHg5RX0sIHsweDAwLCAweDlGfSwKKwkJCQkJICAgICAgIHsweDJELCAweEMwfSwgezB4MkQsIDB4QzF9LAorCQkJCQkgICAgICAgezB4M0EsIDB4QzJ9LCB7MHgwNSwgMHhDM30sCisJCQkJCSAgICAgICB7MHgwNCwgMHhDNH0sIHsweDNGLCAweEM1fSwKKwkJCQkJICAgICAgIHsweDAwLCAweEM2fSwgezB4MDAsIDB4Qzd9LAorCQkJCQkgICAgICAgezB4NTAsIDB4Qzh9LCB7MHgzQywgMHhDOX0sCisJCQkJCSAgICAgICB7MHgyOCwgMHhDQX0sIHsweEQ4LCAweENCfSwKKwkJCQkJICAgICAgIHsweDE0LCAweENDfSwgezB4RUMsIDB4Q0R9LAorCQkJCQkgICAgICAgezB4MzIsIDB4Q0V9LCB7MHhERCwgMHhDRn0sCisJCQkJCSAgICAgICB7MHgzMiwgMHhEMH0sIHsweERELCAweEQxfSwKKwkJCQkJICAgICAgIHsweDZBLCAweEQyfSwgezB4NTAsIDB4RDN9LAorCQkJCQkgICAgICAgezB4MDAsIDB4RDR9LCB7MHgwMCwgMHhENX0sCisJCQkJCSAgICAgICB7MHgwMCwgMHhENn0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sIHMsIDQsIHMtPmkyY19zbGF2ZV9pZCwgMHgwZCwKIAkJCQkJIDB4MDAsIDB4MDEsIDAsIDApOwpAQCAtNjUsNTAgKzE1MCw1MCBAQAogCQkJICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKIHsKIAlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBzbjljMTAyX2dldF9zZW5zb3IoY2FtKTsKLQl1OCBkYXRhWzUrMV07CisJdTggZGF0YVsyXTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgotCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDA5LAotCQkJCQkgICAgIDIrMSwgZGF0YSkgPCAwKQorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDA5LCAyLAorCQkJCQkgICAgIGRhdGEpIDwgMCkKIAkJCXJldHVybiAtRUlPOwotCQljdHJsLT52YWx1ZSA9IGRhdGFbMl07CisJCWN0cmwtPnZhbHVlID0gZGF0YVswXTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9HQUlOOgotCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDM1LAotCQkJCQkgICAgIDIrMSwgZGF0YSkgPCAwKQorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDM1LCAyLAorCQkJCQkgICAgIGRhdGEpIDwgMCkKIAkJCXJldHVybiAtRUlPOwotCQljdHJsLT52YWx1ZSA9IGRhdGFbM107CisJCWN0cmwtPnZhbHVlID0gZGF0YVsxXTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKLQkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sIHMsIHMtPmkyY19zbGF2ZV9pZCwgMHgyYywKLQkJCQkJICAgICAyKzEsIGRhdGEpIDwgMCkKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sIHMsIHMtPmkyY19zbGF2ZV9pZCwgMHgyYywgMiwKKwkJCQkJICAgICBkYXRhKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKLQkJY3RybC0+dmFsdWUgPSBkYXRhWzNdOworCQljdHJsLT52YWx1ZSA9IGRhdGFbMV07CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgotCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDJkLAotCQkJCQkgICAgIDIrMSwgZGF0YSkgPCAwKQorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDJkLCAyLAorCQkJCQkgICAgIGRhdGEpIDwgMCkKIAkJCXJldHVybiAtRUlPOwotCQljdHJsLT52YWx1ZSA9IGRhdGFbM107CisJCWN0cmwtPnZhbHVlID0gZGF0YVsxXTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6Ci0JCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCBzLCBzLT5pMmNfc2xhdmVfaWQsIDB4MmUsCi0JCQkJCSAgICAgMisxLCBkYXRhKSA8IDApCisJCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCBzLCBzLT5pMmNfc2xhdmVfaWQsIDB4MmUsIDIsCisJCQkJCSAgICAgZGF0YSkgPCAwKQogCQkJcmV0dXJuIC1FSU87Ci0JCWN0cmwtPnZhbHVlID0gZGF0YVszXTsKKwkJY3RybC0+dmFsdWUgPSBkYXRhWzFdOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0hGTElQOgotCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDIwLAotCQkJCQkgICAgIDIrMSwgZGF0YSkgPCAwKQorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgcywgcy0+aTJjX3NsYXZlX2lkLCAweDIwLCAyLAorCQkJCQkgICAgIGRhdGEpIDwgMCkKIAkJCXJldHVybiAtRUlPOwotCQljdHJsLT52YWx1ZSA9IGRhdGFbM10gJiAweDIwID8gMSA6IDA7CisJCWN0cmwtPnZhbHVlID0gZGF0YVsxXSAmIDB4MjAgPyAxIDogMDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9WRkxJUDoKLQkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sIHMsIHMtPmkyY19zbGF2ZV9pZCwgMHgyMCwKLQkJCQkJICAgICAyKzEsIGRhdGEpIDwgMCkKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sIHMsIHMtPmkyY19zbGF2ZV9pZCwgMHgyMCwgMiwKKwkJCQkJICAgICBkYXRhKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKLQkJY3RybC0+dmFsdWUgPSBkYXRhWzNdICYgMHg4MCA/IDEgOiAwOworCQljdHJsLT52YWx1ZSA9IGRhdGFbMV0gJiAweDgwID8gMSA6IDA7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTc4LDggKzI2MywxOSBAQAogewogCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9IHNuOWMxMDJfZ2V0X3NlbnNvcihjYW0pOwogCWludCBlcnIgPSAwOwotCXU4IGhfc3RhcnQgPSAodTgpKHJlY3QtPmxlZnQgLSBzLT5jcm9wY2FwLmJvdW5kcy5sZWZ0KSArIDAsCi0JICAgdl9zdGFydCA9ICh1OCkocmVjdC0+dG9wIC0gcy0+Y3JvcGNhcC5ib3VuZHMudG9wKSArIDE7CisJdTggaF9zdGFydCA9IDAsIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAxOworCisJc3dpdGNoIChzbjljMTAyX2dldF9icmlkZ2UoY2FtKSkgeworCWNhc2UgQlJJREdFX1NOOUMxMDM6CisJCWhfc3RhcnQgPSAodTgpKHJlY3QtPmxlZnQgLSBzLT5jcm9wY2FwLmJvdW5kcy5sZWZ0KSArIDA7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NOOUMxMDU6CisJY2FzZSBCUklER0VfU045QzEyMDoKKwkJaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CiAJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7CkBAIC0xOTQsMjQgKzI5MCwzMCBAQAogCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9IHNuOWMxMDJfZ2V0X3NlbnNvcihjYW0pOwogCWludCBlcnIgPSAwOwogCi0JaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpIHsKLQkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCBzLCA0LCBzLT5pMmNfc2xhdmVfaWQsCi0JCQkJCQkgMHgwYSwgMHgwMCwgMHgwMiwgMCwgMCk7Ci0JCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTkpOwotCX0gZWxzZSB7CisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkgewogCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sIHMsIDQsIHMtPmkyY19zbGF2ZV9pZCwKIAkJCQkJCSAweDBhLCAweDAwLCAweDA1LCAwLCAwKTsKIAkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg2MCwgMHgxOSk7CisJCWlmIChzbjljMTAyX2dldF9icmlkZ2UoY2FtKSA9PSBCUklER0VfU045QzEwNSB8fAorCQkgICAgc245YzEwMl9nZXRfYnJpZGdlKGNhbSkgPT0gQlJJREdFX1NOOUMxMjApCisJCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGE2LCAweDE3KTsKKwl9IGVsc2UgeworCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sIHMsIDQsIHMtPmkyY19zbGF2ZV9pZCwKKwkJCQkJCSAweDBhLCAweDAwLCAweDAyLCAwLCAwKTsKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgxOSk7CisJCWlmIChzbjljMTAyX2dldF9icmlkZ2UoY2FtKSA9PSBCUklER0VfU045QzEwNSB8fAorCQkgICAgc245YzEwMl9nZXRfYnJpZGdlKGNhbSkgPT0gQlJJREdFX1NOOUMxMjApCisJCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGEyLCAweDE3KTsKIAl9CiAKIAlyZXR1cm4gZXJyOwogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgbWkwMzYwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbjljMTAyX3NlbnNvciBtaTAzNjAgPSB7CiAJLm5hbWUgPSAiTUktMDM2MCIsCiAJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCi0JLnN1cHBvcnRlZF9icmlkZ2UgPSBCUklER0VfU045QzEwMywKKwkuc3VwcG9ydGVkX2JyaWRnZSA9IEJSSURHRV9TTjlDMTAzIHwgQlJJREdFX1NOOUMxMDUgfCBCUklER0VfU045QzEyMCwKIAkuZnJlcXVlbmN5ID0gU045QzEwMl9JMkNfMTAwS0haLAogCS5pbnRlcmZhY2UgPSBTTjlDMTAyX0kyQ18yV0lSRVMsCiAJLmkyY19zbGF2ZV9pZCA9IDB4NWQsCkBAIC0zMTcsMTkgKzQxOSwzMSBAQAogCiBpbnQgc245YzEwMl9wcm9iZV9taTAzNjAoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCiB7Ci0JdTggZGF0YVs1KzFdOwotCWludCBlcnI7CiAKLQllcnIgPSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHgwMSwgMHgwMX0sIHsweDAwLCAweDAxfSwKLQkJCQkgICAgICAgezB4MjgsIDB4MTd9KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gLUVJTzsKKwl1OCBkYXRhWzJdOworCisJc3dpdGNoIChzbjljMTAyX2dldF9icmlkZ2UoY2FtKSkgeworCWNhc2UgQlJJREdFX1NOOUMxMDM6CisJCWlmIChzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHgwMSwgMHgwMX0sIHsweDAwLCAweDAxfSwKKwkJCQkJICAgICB7MHgyOCwgMHgxN30pKQorCQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NOOUMxMDU6CisJY2FzZSBCUklER0VfU045QzEyMDoKKwkJaWYgKHNuOWMxMDJfd3JpdGVfY29uc3RfcmVncyhjYW0sIHsweDAxLCAweGYxfSwgezB4MDAsIDB4ZjF9LAorCQkJCQkgICAgIHsweDAxLCAweDAxfSwgezB4MDAsIDB4MDF9LAorCQkJCQkgICAgIHsweDI4LCAweDE3fSkpCisJCQlyZXR1cm4gLUVJTzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNjAsIG1pMDM2MC5pMmNfc2xhdmVfaWQsIDB4MDAsCi0JCQkJICAgICAyKzEsIGRhdGEpIDwgMCkKKwkJCQkgICAgIDIsIGRhdGEpIDwgMCkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoZGF0YVsyXSAhPSAweDgyIHx8IGRhdGFbM10gIT0gMHg0MykKKwlpZiAoZGF0YVswXSAhPSAweDgyIHx8IGRhdGFbMV0gIT0gMHg0MykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzbjljMTAyX2F0dGFjaF9zZW5zb3IoY2FtLCAmbWkwMzYwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzYzMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfb3Y3NjMwLmMKaW5kZXggMzFiNjA4MC4uZTY4MzIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfb3Y3NjMwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfb3Y3NjMwLmMKQEAgLTI5LDkgKzI5LDggQEAKIAlzd2l0Y2ggKHNuOWMxMDJfZ2V0X2JyaWRnZShjYW0pKSB7CiAJY2FzZSBCUklER0VfU045QzEwMToKIAljYXNlIEJSSURHRV9TTjlDMTAyOgotCQllcnIgPSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHgwMCwgMHgxNH0sCi0JCQkJCSAgICAgICB7MHg2MCwgMHgxN30sIHsweDBmLCAweDE4fSwKLQkJCQkJICAgICAgIHsweDUwLCAweDE5fSk7CisJCWVyciA9IHNuOWMxMDJfd3JpdGVfY29uc3RfcmVncyhjYW0sIHsweDAwLCAweDE0fSwgezB4NjAsIDB4MTd9LAorCQkJCQkgICAgICAgezB4MGYsIDB4MTh9LCB7MHg1MCwgMHgxOX0pOwogCiAJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTIsIDB4OGQpOwogCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEyLCAweDBkKTsKQEAgLTYxLDcgKzYwLDYgQEAKIAkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHg3MSwgMHgwMCk7CiAJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4NzQsIDB4MjEpOwogCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDdkLCAweGY3KTsKLQogCQlicmVhazsKIAljYXNlIEJSSURHRV9TTjlDMTAzOgogCQllcnIgPSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHgwMCwgMHgwMn0sIHsweDAwLCAweDAzfSwKQEAgLTI1Myw3ICsyNTEsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3Igb3Y3NjMwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbjljMTAyX3NlbnNvciBvdjc2MzAgPSB7CiAJLm5hbWUgPSAiT1Y3NjMwIiwKIAkubWFpbnRhaW5lciA9ICJMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IiwKIAkuc3VwcG9ydGVkX2JyaWRnZSA9IEJSSURHRV9TTjlDMTAxIHwgQlJJREdFX1NOOUMxMDIgfCBCUklER0VfU045QzEwMywKQEAgLTQwOCwxOSArNDA2LDE2IEBACiAJc3dpdGNoIChzbjljMTAyX2dldF9icmlkZ2UoY2FtKSkgewogCWNhc2UgQlJJREdFX1NOOUMxMDE6CiAJY2FzZSBCUklER0VfU045QzEwMjoKLQkJZXJyID0gc245YzEwMl93cml0ZV9jb25zdF9yZWdzKGNhbSwgezB4MDEsIDB4MDF9LAotCQkJCQkgICAgICAgezB4MDAsIDB4MDF9LCB7MHgyOCwgMHgxN30pOwotCisJCWVyciA9IHNuOWMxMDJfd3JpdGVfY29uc3RfcmVncyhjYW0sIHsweDAxLCAweDAxfSwgezB4MDAsIDB4MDF9LAorCQkJCQkgICAgICAgezB4MjgsIDB4MTd9KTsKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfU045QzEwMzogLyogZG8gX25vdF8gY2hhbmdlIGFueXRoaW5nISAqLwotCQllcnIgPSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHgwOSwgMHgwMX0sCi0JCQkJCSAgICAgICB7MHg0MiwgMHgwMX0sIHsweDI4LCAweDE3fSwKLQkJCQkJICAgICAgIHsweDQ0LCAweDAyfSk7CisJCWVyciA9IHNuOWMxMDJfd3JpdGVfY29uc3RfcmVncyhjYW0sIHsweDA5LCAweDAxfSwgezB4NDIsIDB4MDF9LAorCQkJCQkgICAgICAgezB4MjgsIDB4MTd9LCB7MHg0NCwgMHgwMn0pOwogCQlwaWQgPSBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sICZvdjc2MzAsIDB4MGEpOwotCQlpZiAoZXJyIHx8IHBpZCA8IDApIHsgLyogdHJ5IGEgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uICovCi0JCQllcnIgPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOwotCQkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgwMSk7Ci0JCX0KKwkJaWYgKGVyciB8fCBwaWQgPCAwKSAvKiB0cnkgYSBkaWZmZXJlbnQgaW5pdGlhbGl6YXRpb24gKi8KKwkJCWVyciArPSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHgwMSwgMHgwMX0sCisJCQkJCQkJezB4MDAsIDB4MDF9KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9vdjc2NjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzY2MC5jCmluZGV4IGM4OThlOTQ4Li40YjY0NzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9vdjc2NjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9vdjc2NjAuYwpAQCAtMTA0LDggKzEwNCw4IEBACiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMiwgMHg4MCk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMSwgMHgwOSk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMCwgMHgwQSk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMSwgMHg3OCk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMiwgMHg5MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMSwgMHg4MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMiwgMHg4MCk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMywgMHgwMCk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNCwgMHgwMCk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNSwgMHgwOCk7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEwLCAweDIwKTsKIAllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDExLCAweDAzKTsKIAllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEyLCAweDA1KTsKLQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEzLCAweEY4KTsKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEzLCAweEM3KTsKIAllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDE0LCAweDJDKTsKIAllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDE1LCAweDAwKTsKIAllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDE2LCAweDAyKTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MzgsIDB4MDIpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MzksIDB4NDMpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4M0EsIDB4MDApOwotCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4M0IsIDB4MDIpOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4M0IsIDB4MEEpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4M0MsIDB4NkMpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4M0QsIDB4OTkpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4M0UsIDB4MEUpOwpAQCAtMjgxLDI1ICsyODEsMzQgQEAKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0U6Ci0JCWN0cmwtPnZhbHVlID0gc245YzEwMl9wcmVhZF9yZWcoY2FtLCAweDAyKTsKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfcmVhZF9yZWcoY2FtLCAweDAyKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKGN0cmwtPnZhbHVlICYgMHgwNCkgPyAxIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKLQkJY3RybC0+dmFsdWUgPSBzbjljMTAyX3ByZWFkX3JlZyhjYW0sIDB4MDUpOworCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIDB4MDUpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKIAkJY3RybC0+dmFsdWUgJj0gMHg3ZjsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6Ci0JCWN0cmwtPnZhbHVlID0gc245YzEwMl9wcmVhZF9yZWcoY2FtLCAweDA2KTsKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfcmVhZF9yZWcoY2FtLCAweDA2KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlICY9IDB4N2Y7CiAJCWJyZWFrOwogCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgotCQljdHJsLT52YWx1ZSA9IHNuOWMxMDJfcHJlYWRfcmVnKGNhbSwgMHgwNyk7CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX3JlYWRfcmVnKGNhbSwgMHgwNykpIDwgMCkKKwkJCXJldHVybiAtRUlPOwogCQljdHJsLT52YWx1ZSAmPSAweDdmOwogCQlicmVhazsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfQkFORF9GSUxURVI6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgzYikpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDA4OworCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0dBSU46CiAJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwMCkpIDwgMCkKIAkJCXJldHVybiAtRUlPOwotCQljdHJsLT52YWx1ZSAmPSAweDdmOworCQljdHJsLT52YWx1ZSAmPSAweDFmOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgogCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MTMpKSA8IDApCkBAIC0zMzUsMTIgKzM0NCwxNSBAQAogCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgogCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjdHJsLT52YWx1ZSwgMHgwNyk7CiAJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9CQU5EX0ZJTFRFUjoKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgY3RybC0+dmFsdWUgPDwgMywgMHgzYik7CisJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfR0FJTjoKLQkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMCwgY3RybC0+dmFsdWUpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDAwLCAweDYwICsgY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgotCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEzLCAweGYwIHwgY3RybC0+dmFsdWUgfAotCQkJCQkJICAgIChjdHJsLT52YWx1ZSA8PCAxKSk7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTMsIDB4YzAgfAorCQkJCQkJICAgIChjdHJsLT52YWx1ZSAqIDB4MDcpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zODYsNyArMzk4LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIG92NzY2MCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc245YzEwMl9zZW5zb3Igb3Y3NjYwID0gewogCS5uYW1lID0gIk9WNzY2MCIsCiAJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCiAJLnN1cHBvcnRlZF9icmlkZ2UgPSBCUklER0VfU045QzEwNSB8IEJSSURHRV9TTjlDMTIwLApAQCAtNDAxLDkgKzQxMyw5IEBACiAJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCQkubmFtZSA9ICJnbG9iYWwgZ2FpbiIsCiAJCQkubWluaW11bSA9IDB4MDAsCi0JCQkubWF4aW11bSA9IDB4N2YsCisJCQkubWF4aW11bSA9IDB4MWYsCiAJCQkuc3RlcCA9IDB4MDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4MGEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDksCiAJCQkuZmxhZ3MgPSAwLAogCQl9LAogCQl7CkBAIC00MTMsNyArNDI1LDcgQEAKIAkJCS5taW5pbXVtID0gMHgwMCwKIAkJCS5tYXhpbXVtID0gMHhmZiwKIAkJCS5zdGVwID0gMHgwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHg1MCwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgyNywKIAkJCS5mbGFncyA9IDAsCiAJCX0sCiAJCXsKQEAgLTQzMyw3ICs0NDUsNyBAQAogCQkJLm1pbmltdW0gPSAweDAwLAogCQkJLm1heGltdW0gPSAweDdmLAogCQkJLnN0ZXAgPSAweDAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAweDFmLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDE0LAogCQkJLmZsYWdzID0gMCwKIAkJfSwKIAkJewpAQCAtNDQzLDcgKzQ1NSw3IEBACiAJCQkubWluaW11bSA9IDB4MDAsCiAJCQkubWF4aW11bSA9IDB4N2YsCiAJCQkuc3RlcCA9IDB4MDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4MWUsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MTQsCiAJCQkuZmxhZ3MgPSAwLAogCQl9LAogCQl7CkBAIC00NTMsNyArNDY1LDcgQEAKIAkJCS5taW5pbXVtID0gMHgwMCwKIAkJCS5tYXhpbXVtID0gMHgwMSwKIAkJCS5zdGVwID0gMHgwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMCwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMSwKIAkJCS5mbGFncyA9IDAsCiAJCX0sCiAJCXsKQEAgLTQ2Myw3ICs0NzUsMTcgQEAKIAkJCS5taW5pbXVtID0gMHgwMCwKIAkJCS5tYXhpbXVtID0gMHg3ZiwKIAkJCS5zdGVwID0gMHgwMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHgyMCwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgxNCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFNOOUMxMDJfVjRMMl9DSURfQkFORF9GSUxURVIsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSA9ICJiYW5kIGZpbHRlciIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MDEsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCiAJCQkuZmxhZ3MgPSAwLAogCQl9LAogCX0sCkBAIC01MDgsNiArNTMwLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJaWYgKHBpZCAhPSAweDc2IHx8IHZlciAhPSAweDYwKQogCQlyZXR1cm4gLUVOT0RFVjsKKwogCXNuOWMxMDJfYXR0YWNoX3NlbnNvcihjYW0sICZvdjc2NjApOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMxMDZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMxMDZiLmMKaW5kZXggNjcxNTE5Ni4uMzYwZjJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfcGFzMTA2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczEwNmIuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBwYXMxMDZiID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbjljMTAyX3NlbnNvciBwYXMxMDZiID0gewogCS5uYW1lID0gIlBBUzEwNkIiLAogCS5tYWludGFpbmVyID0gIkx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iLAogCS5zdXBwb3J0ZWRfYnJpZGdlID0gQlJJREdFX1NOOUMxMDEgfCBCUklER0VfU045QzEwMiwKQEAgLTI3MywyMyArMjczLDIxIEBACiAKIGludCBzbjljMTAyX3Byb2JlX3BhczEwNmIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCiB7Ci0JaW50IHIwID0gMCwgcjEgPSAwLCBlcnI7CisJaW50IHIwID0gMCwgcjEgPSAwOwogCXVuc2lnbmVkIGludCBwaWQgPSAwOwogCiAJLyoKIAkgICBNaW5pbWFsIGluaXRpYWxpemF0aW9uIHRvIGVuYWJsZSB0aGUgSTJDIGNvbW11bmljYXRpb24KIAkgICBOT1RFOiBkbyBOT1QgY2hhbmdlIHRoZSB2YWx1ZXMhCiAJKi8KLQllcnIgPSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLAotCQkJCSAgICAgICB7MHgwMSwgMHgwMX0sIC8qIHNlbnNvciBwb3dlciBkb3duICovCi0JCQkJICAgICAgIHsweDAwLCAweDAxfSwgLyogc2Vuc29yIHBvd2VyIG9uICovCi0JCQkJICAgICAgIHsweDI4LCAweDE3fSk7Lyogc2Vuc29yIGNsb2NrIDI0IE1IeiAqLwotCWlmIChlcnIpCisJaWYgKHNuOWMxMDJfd3JpdGVfY29uc3RfcmVncyhjYW0sCisJCQkJICAgICB7MHgwMSwgMHgwMX0sIC8qIHNlbnNvciBwb3dlciBkb3duICovCisJCQkJICAgICB7MHgwMCwgMHgwMX0sIC8qIHNlbnNvciBwb3dlciBvbiAqLworCQkJCSAgICB7MHgyOCwgMHgxN30pKSAvKiBzZW5zb3IgY2xvY2sgYXQgMjQgTUh6ICovCiAJCXJldHVybiAtRUlPOwogCiAJcjAgPSBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sICZwYXMxMDZiLCAweDAwKTsKIAlyMSA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJnBhczEwNmIsIDB4MDEpOwotCiAJaWYgKHIwIDwgMCB8fCByMSA8IDApCiAJCXJldHVybiAtRUlPOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMyMDJiY2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYi5jCmluZGV4IGMxYjhkNmIuLmNhNGExNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYi5jCkBAIC0zNSwyOSArMzUsMjggQEAKIAlzd2l0Y2ggKHNuOWMxMDJfZ2V0X2JyaWRnZShjYW0pKSB7CiAJY2FzZSBCUklER0VfU045QzEwMToKIAljYXNlIEJSSURHRV9TTjlDMTAyOgotCQllcnIgPSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHgwMCwgMHgxMH0sCi0JCQkJCSAgICAgICB7MHgwMCwgMHgxMX0sIHsweDAwLCAweDE0fSwKLQkJCQkJICAgICAgIHsweDIwLCAweDE3fSwgezB4MzAsIDB4MTl9LAotCQkJCQkgICAgICAgezB4MDksIDB4MTh9KTsKKwkJZXJyID0gc245YzEwMl93cml0ZV9jb25zdF9yZWdzKGNhbSwgezB4MDAsIDB4MTB9LCB7MHgwMCwgMHgxMX0sCisJCQkJCSAgICAgICB7MHgwMCwgMHgxNH0sIHsweDIwLCAweDE3fSwKKwkJCQkJICAgICAgIHsweDMwLCAweDE5fSwgezB4MDksIDB4MTh9KTsKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfU045QzEwMzoKLQkJZXJyID0gc245YzEwMl93cml0ZV9jb25zdF9yZWdzKGNhbSwgezB4MDAsIDB4MDJ9LAotCQkJCQkgICAgICAgezB4MDAsIDB4MDN9LCB7MHgxYSwgMHgwNH0sCi0JCQkJCSAgICAgICB7MHgyMCwgMHgwNX0sIHsweDIwLCAweDA2fSwKLQkJCQkJICAgICAgIHsweDIwLCAweDA3fSwgezB4MDAsIDB4MTB9LAotCQkJCQkgICAgICAgezB4MDAsIDB4MTF9LCB7MHgwMCwgMHgxNH0sCi0JCQkJCSAgICAgICB7MHgyMCwgMHgxN30sIHsweDMwLCAweDE5fSwKLQkJCQkJICAgICAgIHsweDA5LCAweDE4fSwgezB4MDIsIDB4MWN9LAotCQkJCQkgICAgICAgezB4MDMsIDB4MWR9LCB7MHgwZiwgMHgxZX0sCi0JCQkJCSAgICAgICB7MHgwYywgMHgxZn0sIHsweDAwLCAweDIwfSwKLQkJCQkJICAgICAgIHsweDEwLCAweDIxfSwgezB4MjAsIDB4MjJ9LAotCQkJCQkgICAgICAgezB4MzAsIDB4MjN9LCB7MHg0MCwgMHgyNH0sCi0JCQkJCSAgICAgICB7MHg1MCwgMHgyNX0sIHsweDYwLCAweDI2fSwKLQkJCQkJICAgICAgIHsweDcwLCAweDI3fSwgezB4ODAsIDB4Mjh9LAotCQkJCQkgICAgICAgezB4OTAsIDB4Mjl9LCB7MHhhMCwgMHgyYX0sCi0JCQkJCSAgICAgICB7MHhiMCwgMHgyYn0sIHsweGMwLCAweDJjfSwKLQkJCQkJICAgICAgIHsweGQwLCAweDJkfSwgezB4ZTAsIDB4MmV9LAotCQkJCQkgICAgICAgezB4ZjAsIDB4MmZ9LCB7MHhmZiwgMHgzMH0pOworCQllcnIgPSBzbjljMTAyX3dyaXRlX2NvbnN0X3JlZ3MoY2FtLCB7MHgwMCwgMHgwMn0sIHsweDAwLCAweDAzfSwKKwkJCQkJICAgICAgIHsweDFhLCAweDA0fSwgezB4MjAsIDB4MDV9LAorCQkJCQkgICAgICAgezB4MjAsIDB4MDZ9LCB7MHgyMCwgMHgwN30sCisJCQkJCSAgICAgICB7MHgwMCwgMHgxMH0sIHsweDAwLCAweDExfSwKKwkJCQkJICAgICAgIHsweDAwLCAweDE0fSwgezB4MjAsIDB4MTd9LAorCQkJCQkgICAgICAgezB4MzAsIDB4MTl9LCB7MHgwOSwgMHgxOH0sCisJCQkJCSAgICAgICB7MHgwMiwgMHgxY30sIHsweDAzLCAweDFkfSwKKwkJCQkJICAgICAgIHsweDBmLCAweDFlfSwgezB4MGMsIDB4MWZ9LAorCQkJCQkgICAgICAgezB4MDAsIDB4MjB9LCB7MHgxMCwgMHgyMX0sCisJCQkJCSAgICAgICB7MHgyMCwgMHgyMn0sIHsweDMwLCAweDIzfSwKKwkJCQkJICAgICAgIHsweDQwLCAweDI0fSwgezB4NTAsIDB4MjV9LAorCQkJCQkgICAgICAgezB4NjAsIDB4MjZ9LCB7MHg3MCwgMHgyN30sCisJCQkJCSAgICAgICB7MHg4MCwgMHgyOH0sIHsweDkwLCAweDI5fSwKKwkJCQkJICAgICAgIHsweGEwLCAweDJhfSwgezB4YjAsIDB4MmJ9LAorCQkJCQkgICAgICAgezB4YzAsIDB4MmN9LCB7MHhkMCwgMHgyZH0sCisJCQkJCSAgICAgICB7MHhlMCwgMHgyZX0sIHsweGYwLCAweDJmfSwKKwkJCQkJICAgICAgIHsweGZmLCAweDMwfSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTk3LDcgKzE5Niw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBwYXMyMDJiY2IgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHBhczIwMmJjYiA9IHsKIAkubmFtZSA9ICJQQVMyMDJCQ0IiLAogCS5tYWludGFpbmVyID0gIkx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iLAogCS5zdXBwb3J0ZWRfYnJpZGdlID0gQlJJREdFX1NOOUMxMDEgfCBCUklER0VfU045QzEwMiB8IEJSSURHRV9TTjlDMTAzLApAQCAtMzEzLDkgKzMxMiw4IEBACiAJCQkJCSAgICAgICB7MHgyOCwgMHgxN30pOy8qIGNsb2NrIDI0IE1IeiAqLwogCQlicmVhazsKIAljYXNlIEJSSURHRV9TTjlDMTAzOiAvKiBkbyBfbm90XyBjaGFuZ2UgYW55dGhpbmchICovCi0JCWVyciA9IHNuOWMxMDJfd3JpdGVfY29uc3RfcmVncyhjYW0sIHsweDA5LCAweDAxfSwKLQkJCQkJICAgICAgIHsweDQ0LCAweDAxfSwgezB4NDQsIDB4MDJ9LAotCQkJCQkgICAgICAgezB4MjksIDB4MTd9KTsKKwkJZXJyID0gc245YzEwMl93cml0ZV9jb25zdF9yZWdzKGNhbSwgezB4MDksIDB4MDF9LCB7MHg0NCwgMHgwMX0sCisJCQkJCSAgICAgICB7MHg0NCwgMHgwMn0sIHsweDI5LCAweDE3fSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9zZW5zb3IuaAppbmRleCAxYmJmNjRjLi4yZDdkNzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9zZW5zb3IuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9zZW5zb3IuaApAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBfU045QzEwMl9TRU5TT1JfSF8KIAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTc0LDcgKzc0LDcgQEAKIC8qIEF0dGFjaCBhIHByb2JlZCBzZW5zb3IgdG8gdGhlIGNhbWVyYS4gKi8KIGV4dGVybiB2b2lkCiBzbjljMTAyX2F0dGFjaF9zZW5zb3Ioc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0JCSAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKTsKKwkJICAgICAgY29uc3Qgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IpOwogCiAvKgogICAgUmVhZC93cml0ZSByb3V0aW5lczogdGhleSBhbHdheXMgcmV0dXJuIC0xIG9uIGVycm9yLCAwIG9yIHRoZSByZWFkIHZhbHVlCkBAIC04NSwxMCArODUsMTEgQEAKICovCiAKIC8qIFRoZSAidHJ5IiBJMkMgSS9PIHZlcnNpb25zIGFyZSB1c2VkIHdoZW4gcHJvYmluZyB0aGUgc2Vuc29yICovCi1leHRlcm4gaW50IHNuOWMxMDJfaTJjX3RyeV93cml0ZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLHN0cnVjdCBzbjljMTAyX3NlbnNvciosCi0JCQkJIHU4IGFkZHJlc3MsIHU4IHZhbHVlKTsKLWV4dGVybiBpbnQgc245YzEwMl9pMmNfdHJ5X3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKixzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqLAotCQkJCXU4IGFkZHJlc3MpOworZXh0ZXJuIGludCBzbjljMTAyX2kyY190cnlfd3JpdGUoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiwKKwkJCQkgY29uc3Qgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiwgdTggYWRkcmVzcywKKwkJCQkgdTggdmFsdWUpOworZXh0ZXJuIGludCBzbjljMTAyX2kyY190cnlfcmVhZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLAorCQkJCWNvbnN0IHN0cnVjdCBzbjljMTAyX3NlbnNvciosIHU4IGFkZHJlc3MpOwogCiAvKgogICAgVGhlc2UgbXVzdCBiZSB1c2VkIGlmIGFuZCBvbmx5IGlmIHRoZSBzZW5zb3IgZG9lc24ndCBpbXBsZW1lbnQgdGhlIHN0YW5kYXJkCkBAIC0xMDIsMjkgKzEwMywzMSBAQAogICAgYnl0ZS4KICovCiBleHRlcm4gaW50IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0JCQkJICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggbiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBuLAogCQkJCSAgICAgdTggZGF0YTAsIHU4IGRhdGExLCB1OCBkYXRhMiwgdTggZGF0YTMsCiAJCQkJICAgICB1OCBkYXRhNCwgdTggZGF0YTUpOwogZXh0ZXJuIGludCBzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0JCQkJICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBkYXRhMCwKLQkJCQkgICAgdTggZGF0YTEsIHU4IG4sIHU4IGJ1ZmZlcltdKTsKKwkJCQkgICAgY29uc3Qgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IsCisJCQkJICAgIHU4IGRhdGEwLCB1OCBkYXRhMSwgdTggbiwgdTggYnVmZmVyW10pOwogCiAvKiBUbyBiZSB1c2VkIGFmdGVyIHRoZSBzZW5zb3Igc3RydWN0IGhhcyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBjYW1lcmEgc3RydWN0ICovCiBleHRlcm4gaW50IHNuOWMxMDJfaTJjX3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSosIHU4IGFkZHJlc3MsIHU4IHZhbHVlKTsKIGV4dGVybiBpbnQgc245YzEwMl9pMmNfcmVhZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLCB1OCBhZGRyZXNzKTsKIAogLyogSS9PIG9uIHJlZ2lzdGVycyBpbiB0aGUgYnJpZGdlLiBDb3VsZCBiZSB1c2VkIGJ5IHRoZSBzZW5zb3IgbWV0aG9kcyB0b28gKi8KK2V4dGVybiBpbnQgc245YzEwMl9yZWFkX3JlZyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLCB1MTYgaW5kZXgpOwogZXh0ZXJuIGludCBzbjljMTAyX3ByZWFkX3JlZyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLCB1MTYgaW5kZXgpOwogZXh0ZXJuIGludCBzbjljMTAyX3dyaXRlX3JlZyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLCB1OCB2YWx1ZSwgdTE2IGluZGV4KTsKIGV4dGVybiBpbnQgc245YzEwMl93cml0ZV9yZWdzKHN0cnVjdCBzbjljMTAyX2RldmljZSosIGNvbnN0IHU4IHZhbHJlZ1tdWzJdLAogCQkJICAgICAgaW50IGNvdW50KTsKIC8qCi0gKiBXcml0ZSBtdWx0aXBsZSByZWdpc3RlcnMgd2l0aCBjb25zdGFudCB2YWx1ZXMuICBGb3IgZXhhbXBsZToKLSAqIHNuOWMxMDJfd3JpdGVfY29uc3RfcmVncyhjYW0sIHsweDAwLCAweDE0fSwgezB4NjAsIDB4MTd9LCB7MHgwZiwgMHgxOH0pOwotICovCi0jZGVmaW5lIHNuOWMxMDJfd3JpdGVfY29uc3RfcmVncyhkZXZpY2UsIGRhdGEuLi4pIFwKLQkoeyBjb25zdCBzdGF0aWMgdTggX2RhdGFbXVsyXSA9IHtkYXRhfTsgXAotCXNuOWMxMDJfd3JpdGVfcmVncyhkZXZpY2UsIF9kYXRhLCBBUlJBWV9TSVpFKF9kYXRhKSk7IH0pCisgICBXcml0ZSBtdWx0aXBsZSByZWdpc3RlcnMgd2l0aCBjb25zdGFudCB2YWx1ZXMuIEZvciBleGFtcGxlOgorICAgc245YzEwMl93cml0ZV9jb25zdF9yZWdzKGNhbSwgezB4MDAsIDB4MTR9LCB7MHg2MCwgMHgxN30sIHsweDBmLCAweDE4fSk7CisgICBSZWdpc3RlciBhZHJlc3NlcyBtdXN0IGJlIDwgMjU2LgorKi8KKyNkZWZpbmUgc245YzEwMl93cml0ZV9jb25zdF9yZWdzKHNuOWMxMDJfZGV2aWNlLCBkYXRhLi4uKSAgICAgICAgICAgICAgICAgICAgIFwKKwkoeyBjb25zdCBzdGF0aWMgdTggX3ZhbHJlZ1tdWzJdID0ge2RhdGF9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXNuOWMxMDJfd3JpdGVfcmVncyhzbjljMTAyX2RldmljZSwgX3ZhbHJlZywgQVJSQVlfU0laRShfdmFscmVnKSk7IH0pCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTExMGMxYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTExMGMxYi5jCmluZGV4IDBlN2VjODYuLmU3ZDJkZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMTBjMWIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTEwYzFiLmMKQEAgLTg4LDcgKzg4LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHRhczUxMTBjMWIgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHRhczUxMTBjMWIgPSB7CiAJLm5hbWUgPSAiVEFTNTExMEMxQiIsCiAJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCiAJLnN1cHBvcnRlZF9icmlkZ2UgPSBCUklER0VfU045QzEwMSB8IEJSSURHRV9TTjlDMTAyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTExMGQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMTBkLmMKaW5kZXggODNhMzllOC4uZDMyZmRiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTExMGQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTEwZC5jCkBAIC02OCw3ICs2OCw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciB0YXM1MTEwZCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgdGFzNTExMGQgPSB7CiAJLm5hbWUgPSAiVEFTNTExMEQiLAogCS5tYWludGFpbmVyID0gIkx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iLAogCS5zdXBwb3J0ZWRfYnJpZGdlID0gQlJJREdFX1NOOUMxMDEgfCBCUklER0VfU045QzEwMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMzBkMWIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMzBkMWIuYwppbmRleCA1MDQwNjUwLi41NmZiMWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTMwZDFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTEzMGQxYi5jCkBAIC04OSw3ICs4OSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciB0YXM1MTMwZDFiID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbjljMTAyX3NlbnNvciB0YXM1MTMwZDFiID0gewogCS5uYW1lID0gIlRBUzUxMzBEMUIiLAogCS5tYWludGFpbmVyID0gIkx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iLAogCS5zdXBwb3J0ZWRfYnJpZGdlID0gQlJJREdFX1NOOUMxMDEgfCBCUklER0VfU045QzEwMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jCmluZGV4IDFiOWIwNzQuLmM0MGI5MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYwpAQCAtMjA1LDkgKzIwNSwxMyBAQAogCQkvKiAweDAxIC0+ID8/PyBubyBjaGFuZ2UgPz8/ICovCiAJCS8qIDB4MDIgLT4gUEFMIEJER0hJIC8gU0VDQU0gTCAqLwogCQkvKiAweDA0IC0+ID8/PyBQQUwgb3RoZXJzIC8gU0VDQU0gb3RoZXJzID8/PyAqLwotCQljYiAmPSB+MHgwMjsKLQkJaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNKQotCQkJY2IgfD0gMHgwMjsKKwkJY2IgJj0gfjB4MDM7CisJCWlmICh0LT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MKSAvL2Fsc28gdmFsaWQgZm9yIFY0TDJfU1REX1NFQ0FNCisJCQljYiB8PSBQSElMSVBTX01GX1NFVF9QQUxfTDsKKwkJZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfU0VDQU1fTEMpCisJCQljYiB8PSBQSElMSVBTX01GX1NFVF9QQUxfTDI7CisJCWVsc2UgLyogVjRMMl9TVERfQnxWNEwyX1NURF9HSCAqLworCQkJY2IgfD0gUEhJTElQU19NRl9TRVRfQkc7CiAJCWJyZWFrOwogCiAJY2FzZSBUVU5FUl9URU1JQ180MDQ2Rk01OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwppbmRleCBhMmRhNWQyLi5jOWJmOWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9LY29uZmlnCmluZGV4IGEwZmQ4MmIuLmU0Y2I5OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL0tjb25maWcKQEAgLTMsNyArMyw3IEBACiAKIGNvbmZpZyBVU0JfVklDQU0KIAl0cmlzdGF0ZSAiVVNCIDNjb20gSG9tZUNvbm5lY3QgKGFrYSB2aWNhbSkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYgJiYgVklERU9fVjRMMSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFZJREVPX1VTQlZJREVPCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSAzY29tIGhvbWVjb25uZWN0IGNhbWVyYSAodmljYW0pLgpAQCAtMTMsNyArMTMsNyBAQAogCiBjb25maWcgVVNCX0lCTUNBTQogCXRyaXN0YXRlICJVU0IgSUJNIChYaXJsaW5rKSBDLWl0IENhbWVyYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFViAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBWSURFT19WNEwxCiAJc2VsZWN0IFZJREVPX1VTQlZJREVPCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgSUJNICJDLUl0IiBjYW1lcmEsIGFsc28ga25vd24gYXMKQEAgLTI4LDcgKzI4LDcgQEAKIAogY29uZmlnIFVTQl9LT05JQ0FXQwogCXRyaXN0YXRlICJVU0IgS29uaWNhIFdlYmNhbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFViAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBWSURFT19WNEwxCiAJc2VsZWN0IFZJREVPX1VTQlZJREVPCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB3ZWJjYW1zIGJhc2VkIG9uIGEgS29uaWNhCkBAIC0zOSw3ICszOSw3IEBACiAKIGNvbmZpZyBVU0JfUVVJQ0tDQU1fTUVTU0VOR0VSCiAJdHJpc3RhdGUgIlVTQiBMb2dpdGVjaCBRdWlja2NhbSBNZXNzZW5nZXIiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWICYmIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKIAlzZWxlY3QgVklERU9fVVNCVklERU8KIAktLS1oZWxwLS0tCiAJICBTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBVU0IgTG9naXRlY2ggUXVpY2tjYW0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYwppbmRleCA2ODdmMDI2Li4zN2NlMzZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKaW5kZXggODc2ZmQyNy4uOTgyYjExNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYwpAQCAtMjgsNyArMjgsNyBAQAogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgY29kZSB3ZXJlIGFsc28gY29waWVkIGZyb20gdXNidmlkZW8uYwogICoKLSAqIFNwZWNpYWwgdGhhbmtzIHRvIHRoZSB0aGUgd2hvbGUgdGVhbSBhdCBTb3VyY2Vmb3JnZSBmb3IgaGVscCBtYWtpbmcKKyAqIFNwZWNpYWwgdGhhbmtzIHRvIHRoZSB3aG9sZSB0ZWFtIGF0IFNvdXJjZWZvcmdlIGZvciBoZWxwIG1ha2luZwogICogdGhpcyBkcml2ZXIgYmVjb21lIGEgcmVhbGl0eS4gIE5vdGFibHk6CiAgKiBBbmR5IEFybXN0cm9uZyB3aG8gcmV2ZXJzZSBlbmdpbmVlcmVkIHRoZSBjb2xvciBlbmNvZGluZyBhbmQKICAqIFBhdmVsIE1hY2hlayBhbmQgQ2hyaXMgQ2hlbmV5IHdobyB3b3JrZWQgb24gcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi9LY29uZmlnCmluZGV4IGM0M2E1ZDguLmZjMjRlZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWSURFT19VU0JWSVNJT04KIAl0cmlzdGF0ZSAiVVNCIHZpZGVvIGRldmljZXMgYmFzZWQgb24gTm9nYXRlY2ggTlQxMDAzLzEwMDQvMTAwNSIKLQlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19WNEwyICYmIFVTQgorCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDIKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fU0FBNzExWCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jCmluZGV4IGJjYjU1MWEuLjkxMThhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwppbmRleCAyMTY3MDQxLi5hYTMyNThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwpAQCAtNTIsNyArNTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCmluZGV4IGQyYzFhZTAuLmVkZTg1NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgpAQCAtMTI4LDcgKzEyNyw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgcGFsZXR0ZTJwaXhlbGZvcm1hdFtdID0geworY29uc3Qgc3RhdGljIHVuc2lnbmVkIGludCBwYWxldHRlMnBpeGVsZm9ybWF0W10gPSB7CiAJW1ZJREVPX1BBTEVUVEVfR1JFWV0gICAgPSBWNEwyX1BJWF9GTVRfR1JFWSwKIAlbVklERU9fUEFMRVRURV9SR0I1NTVdICA9IFY0TDJfUElYX0ZNVF9SR0I1NTUsCiAJW1ZJREVPX1BBTEVUVEVfUkdCNTY1XSAgPSBWNEwyX1BJWF9GTVRfUkdCNTY1LApAQCAtMTQ2LDcgKzE0NSw3IEBACiAJW1ZJREVPX1BBTEVUVEVfWVVWNDIyUF0gPSBWNEwyX1BJWF9GTVRfWVVWNDIyUCwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfcHVyZV9fCiBwYWxldHRlX3RvX3BpeGVsZm9ybWF0KHVuc2lnbmVkIGludCBwYWxldHRlKQogewogCWlmIChwYWxldHRlIDwgQVJSQVlfU0laRShwYWxldHRlMnBpeGVsZm9ybWF0KSkKQEAgLTE1NSw4ICsxNTQsOCBAQAogCQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludAotcGl4ZWxmb3JtYXRfdG9fcGFsZXR0ZShpbnQgcGl4ZWxmb3JtYXQpCitzdGF0aWMgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX2NvbnN0X18KK3BpeGVsZm9ybWF0X3RvX3BhbGV0dGUodW5zaWduZWQgaW50IHBpeGVsZm9ybWF0KQogewogCWludAlwYWxldHRlID0gMDsKIAlzd2l0Y2ggKHBpeGVsZm9ybWF0KQpAQCAtNjE3LDYgKzYxNiw4IEBACiAJY2FzZSBWSURJT0NTUElDVDogLyogIHNldCB0b25lIGNvbnRyb2xzICYgcGFydGlhbCBjYXB0dXJlIGZvcm1hdCAgKi8KIAl7CiAJCXN0cnVjdCB2aWRlb19waWN0dXJlCSpwaWN0ID0gYXJnOworCQlpbnQgbWVtX2VyciA9IDAsIG92bF9lcnIgPSAwOworCiAJCW1lbXNldCgmZmJ1ZjIsIDAsIHNpemVvZihmYnVmMikpOwogCiAJCXNldF92NGxfY29udHJvbChpbm9kZSwgZmlsZSwKQEAgLTYyOSwzMyArNjMwLDU5IEBACiAJCQkJVjRMMl9DSURfU0FUVVJBVElPTiwgcGljdC0+Y29sb3VyLCBkcnYpOwogCQlzZXRfdjRsX2NvbnRyb2woaW5vZGUsIGZpbGUsCiAJCQkJVjRMMl9DSURfV0hJVEVORVNTLCBwaWN0LT53aGl0ZW5lc3MsIGRydik7CisJCS8qCisJCSAqIFY0TDEgdXNlcyB0aGlzIGlvY3RsIHRvIHNldCBib3RoIG1lbW9yeSBjYXB0dXJlIGFuZCBvdmVybGF5CisJCSAqIHBpeGVsIGZvcm1hdCwgd2hpbGUgVjRMMiBoYXMgdHdvIGRpZmZlcmVudCBpb2N0bHMgZm9yIHRoaXMuCisJCSAqIFNvbWUgY2FyZHMgbWF5IG5vdCBzdXBwb3J0IG9uZSBvciB0aGUgb3RoZXIsIGFuZCBtYXkgc3VwcG9ydAorCQkgKiBkaWZmZXJlbnQgcGl4ZWwgZm9ybWF0cyBmb3IgbWVtb3J5IHZzIG92ZXJsYXkuCisJCSAqLwogCiAJCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksR0ZQX0tFUk5FTCk7CiAJCWZtdDItPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRk1ULCBmbXQyKTsKLQkJaWYgKGVyciA8IDApCisJCS8qIElmIFZJRElPQ19HX0ZNVCBmYWlsZWQsIHRoZW4gdGhlIGRyaXZlciBsaWtlbHkgZG9lc24ndAorCQkgICBzdXBwb3J0IG1lbW9yeSBjYXB0dXJlLiAgVHJ5aW5nIHRvIHNldCB0aGUgbWVtb3J5IGNhcHR1cmUKKwkJICAgcGFyYW1ldGVycyB3b3VsZCBiZSBwb2ludGxlc3MuICAqLworCQlpZiAoZXJyIDwgMCkgewogCQkJZHByaW50aygiVklESU9DU1BJQ1QgLyBWSURJT0NfR19GTVQ6ICVkXG4iLGVycik7Ci0JCWlmIChmbXQyLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9Ci0JCSAgICBwYWxldHRlX3RvX3BpeGVsZm9ybWF0KHBpY3QtPnBhbGV0dGUpKSB7CisJCQltZW1fZXJyID0gLTEwMDA7ICAvKiBkaWRuJ3QgZXZlbiB0cnkgKi8KKwkJfSBlbHNlIGlmIChmbXQyLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9CisJCQkgcGFsZXR0ZV90b19waXhlbGZvcm1hdChwaWN0LT5wYWxldHRlKSkgewogCQkJZm10Mi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IHBhbGV0dGVfdG9fcGl4ZWxmb3JtYXQoCiAJCQkJcGljdC0+cGFsZXR0ZSk7Ci0JCQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19TX0ZNVCwgZm10Mik7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlkcHJpbnRrKCJWSURJT0NTUElDVCAvIFZJRElPQ19TX0ZNVDogJWRcbiIsZXJyKTsKKwkJCW1lbV9lcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19TX0ZNVCwgZm10Mik7CisJCQlpZiAobWVtX2VyciA8IDApCisJCQkJZHByaW50aygiVklESU9DU1BJQ1QgLyBWSURJT0NfU19GTVQ6ICVkXG4iLAorCQkJCQltZW1fZXJyKTsKIAkJfQogCiAJCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRkJVRiwgJmZidWYyKTsKLQkJaWYgKGVyciA8IDApCisJCS8qIElmIFZJRElPQ19HX0ZCVUYgZmFpbGVkLCB0aGVuIHRoZSBkcml2ZXIgbGlrZWx5IGRvZXNuJ3QKKwkJICAgc3VwcG9ydCBvdmVybGF5LiAgVHJ5aW5nIHRvIHNldCB0aGUgb3ZlcmxheSBwYXJhbWV0ZXJzCisJCSAgIHdvdWxkIGJlIHF1aXRlIHBvaW50bGVzcy4gICovCisJCWlmIChlcnIgPCAwKSB7CiAJCQlkcHJpbnRrKCJWSURJT0NTUElDVCAvIFZJRElPQ19HX0ZCVUY6ICVkXG4iLGVycik7Ci0JCWlmIChmYnVmMi5mbXQucGl4ZWxmb3JtYXQgIT0KLQkJICAgIHBhbGV0dGVfdG9fcGl4ZWxmb3JtYXQocGljdC0+cGFsZXR0ZSkpIHsKKwkJCW92bF9lcnIgPSAtMTAwMDsgIC8qIGRpZG4ndCBldmVuIHRyeSAqLworCQl9IGVsc2UgaWYgKGZidWYyLmZtdC5waXhlbGZvcm1hdCAhPQorCQkJIHBhbGV0dGVfdG9fcGl4ZWxmb3JtYXQocGljdC0+cGFsZXR0ZSkpIHsKIAkJCWZidWYyLmZtdC5waXhlbGZvcm1hdCA9IHBhbGV0dGVfdG9fcGl4ZWxmb3JtYXQoCiAJCQkJcGljdC0+cGFsZXR0ZSk7Ci0JCQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19TX0ZCVUYsICZmYnVmMik7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlkcHJpbnRrKCJWSURJT0NTUElDVCAvIFZJRElPQ19TX0ZCVUY6ICVkXG4iLGVycik7Ci0JCQllcnIgPSAwOyAvKiBsaWtlbHkgZmFpbHMgZm9yIG5vbi1yb290ICovCisJCQlvdmxfZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfU19GQlVGLCAmZmJ1ZjIpOworCQkJaWYgKG92bF9lcnIgPCAwKQorCQkJCWRwcmludGsoIlZJRElPQ1NQSUNUIC8gVklESU9DX1NfRkJVRjogJWRcbiIsCisJCQkJCW92bF9lcnIpOwogCQl9CisJCWlmIChvdmxfZXJyIDwgMCAmJiBtZW1fZXJyIDwgMCkKKwkJCS8qIGlvY3RsIGZhaWxlZCwgY291bGRuJ3Qgc2V0IGVpdGhlciBwYXJhbWV0ZXIgKi8KKwkJCWlmIChtZW1fZXJyICE9IC0xMDAwKSB7CisJCQkgICAgZXJyID0gbWVtX2VycjsKKwkJCX0gZWxzZSBpZiAob3ZsX2VyciA9PSAtRVBFUk0pIHsKKwkJCSAgICBlcnIgPSAwOworCQkJfSBlbHNlIHsKKwkJCSAgICBlcnIgPSBvdmxfZXJyOworCQkJfQorCQllbHNlCisJCQllcnIgPSAwOwogCQlicmVhazsKIAl9CiAJY2FzZSBWSURJT0NHVFVORVI6IC8qICBnZXQgdHVuZXIgaW5mb3JtYXRpb24gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggNDlmMWRmNy4uMTNlZTU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYwppbmRleCA0NTk3ODZmLi5hMzJkZmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMKQEAgLTcwMiw5ICs3MDIsNyBAQAogCQlkcHJpbnRrKDEsInFidWY6IG1lbW9yeSB0eXBlIGlzIHdyb25nLlxuIik7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKGJ1Zi0+c3RhdGUgPT0gU1RBVEVfUVVFVUVEIHx8Ci0JICAgIGJ1Zi0+c3RhdGUgPT0gU1RBVEVfUFJFUEFSRUQgfHwKLQkgICAgYnVmLT5zdGF0ZSA9PSBTVEFURV9BQ1RJVkUpIHsKKwlpZiAoYnVmLT5zdGF0ZSAhPSBTVEFURV9ORUVEU19JTklUICYmIGJ1Zi0+c3RhdGUgIT0gU1RBVEVfSURMRSkgewogCQlkcHJpbnRrKDEsInFidWY6IGJ1ZmZlciBpcyBhbHJlYWR5IHF1ZXVlZCBvciBhY3RpdmUuXG4iKTsKIAkJZ290byBkb25lOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYwppbmRleCA4MGFjNWY4Li5iODc2YWNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC00MzQsMTMgKzQzMyw0MyBAQAogCWludCAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoICh2ZmQtPmRlYnVnICYgVjRMMl9ERUJVR19JT0NUTCkgJiYKLQkJCQkhKHZmZC0+ZGVidWcgfCBWNEwyX0RFQlVHX0lPQ1RMX0FSRykpIHsKKwkJCQkhKHZmZC0+ZGVidWcgJiBWNEwyX0RFQlVHX0lPQ1RMX0FSRykpIHsKIAkJdjRsX3ByaW50X2lvY3RsKHZmZC0+bmFtZSwgY21kKTsKIAl9CiAKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgSGFuZGxlcyBjYWxscyB0byB0aGUgb2Jzb2xldGVkIFY0TDEgQVBJCisJIER1ZSB0byB0aGUgbmF0dXJlIG9mIFZJRElPQ0dNQlVGLCBlYWNoIGRyaXZlciB0aGF0IHN1cHBvcnRzCisJIFY0TDEgc2hvdWxkIGltcGxlbWVudCBpdHMgb3duIGhhbmRsZXIgZm9yIHRoaXMgaW9jdGwuCisJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogLS0tIHN0cmVhbWluZyBjYXB0dXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlpZiAoY21kID09IFZJRElPQ0dNQlVGKSB7CisJCXN0cnVjdCB2aWRlb19tYnVmICpwPWFyZzsKKworCQltZW1zZXQocCwwLHNpemVvZihwKSk7CisKKwkJaWYgKCF2ZmQtPnZpZGlvY2dtYnVmKQorCQkJcmV0dXJuIHJldDsKKwkJcmV0PXZmZC0+dmlkaW9jZ21idWYoZmlsZSwgZmgsIHApOworCQlpZiAoIXJldCkKKwkJCWRiZ2FyZyAoY21kLCAic2l6ZT0lZCwgZnJhbWVzPSVkLCBvZmZzZXRzPTB4JTA4bHhcbiIsCisJCQkJCQlwLT5zaXplLCBwLT5mcmFtZXMsCisJCQkJCQkodW5zaWduZWQgbG9uZylwLT5vZmZzZXRzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgQWxsIG90aGVyIFY0TDEgY2FsbHMgYXJlIGhhbmRsZWQgYnkgdjRsMV9jb21wYXQgbW9kdWxlLgorCSBUaG9zZSBjYWxscyB3aWxsIGJlIHRyYW5zbGF0ZWQgaW50byBWNEwyIGNhbGxzLCBhbmQKKwkgX192aWRlb19kb19pb2N0bCB3aWxsIGJlIGNhbGxlZCBhZ2Fpbiwgd2l0aCBvbmUgb3IgbW9yZQorCSBWNEwyIGlvY3Rscy4KKwkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJaWYgKF9JT0NfVFlQRShjbWQpPT0ndicpCiAJCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcsCiAJCQkJCQlfX3ZpZGVvX2RvX2lvY3RsKTsKKyNlbmRpZgogCiAJc3dpdGNoKGNtZCkgewogCS8qIC0tLSBjYXBhYmlsaXRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC03OTIsMjQgKzgyMSw2IEBACiAJCXJldD12ZmQtPnZpZGlvY19vdmVybGF5KGZpbGUsIGZoLCAqaSk7CiAJCWJyZWFrOwogCX0KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkvKiAtLS0gc3RyZWFtaW5nIGNhcHR1cmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCWNhc2UgVklESU9DR01CVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqcD1hcmc7Ci0KLQkJbWVtc2V0KHAsMCxzaXplb2YocCkpOwotCi0JCWlmICghdmZkLT52aWRpb2NnbWJ1ZikKLQkJCWJyZWFrOwotCQlyZXQ9dmZkLT52aWRpb2NnbWJ1ZihmaWxlLCBmaCwgcCk7Ci0JCWlmICghcmV0KQotCQkJZGJnYXJnIChjbWQsICJzaXplPSVkLCBmcmFtZXM9JWQsIG9mZnNldHM9MHglMDhseFxuIiwKLQkJCQkJCXAtPnNpemUsIHAtPmZyYW1lcywKLQkJCQkJCSh1bnNpZ25lZCBsb25nKXAtPm9mZnNldHMpOwotCQlicmVhazsKLQl9Ci0jZW5kaWYKIAljYXNlIFZJRElPQ19HX0ZCVUY6CiAJewogCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqcD1hcmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvS2NvbmZpZwppbmRleCBhODU5YTY5Li40N2NkOTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgVVNCX1pDMDMwMQogCXRyaXN0YXRlICJVU0IgWkMwMzAxW1BdIEltYWdlIFByb2Nlc3NvciBhbmQgQ29udHJvbCBDaGlwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gVklERU9fVjRMMQogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgWkMwMzAxIG9yCiAJICBaQzAzMDFQIEltYWdlIFByb2Nlc3NvcnMgYW5kIENvbnRyb2wgQ2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYwppbmRleCAwNzQzMjM3Li5jZjBlZDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMKQEAgLTIwMzQsNyArMjAzNCw3IEBACiAJICogYnV0IG1vdmluZyB0aGUgZnJlZSBjb2RlIG91dHNpZGUgdGhlIG11bm1hcCgpIGhhbmRsZXIgZml4ZXMKIAkgKiBhbGwgdGhpcy4uLiBJZiBzb21lb25lIGtub3dzIHdoeSwgcGxlYXNlIGV4cGxhaW4gbWUgKFJvbmFsZCkKIAkgKi8KLQlpZiAoISFtdXRleF90cnlsb2NrKCZ6ci0+cmVzb3VyY2VfbG9jaykpIHsKKwlpZiAobXV0ZXhfdHJ5bG9jaygmenItPnJlc291cmNlX2xvY2spKSB7CiAJCS8qIHdlIG9idGFpbmVkIGl0ISBMZXQncyB0cnkgdG8gZnJlZSBzb21lIHRoaW5ncyAqLwogCQlpZiAoZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKQogCQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vS2NvbmZpZyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vS2NvbmZpZwppbmRleCA3MTAzN2Y5Li5jODhjYzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9LY29uZmlnCkBAIC0xLDUgKzEsNiBAQAogCiBtZW51ICJGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJCiAKIGNvbmZpZyBGVVNJT04KIAlib29sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfaGlzdG9yeS50eHQgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfaGlzdG9yeS50eHQKaW5kZXggZDZiNGM2MC4uZGRjN2FlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2hpc3RvcnkudHh0CisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9oaXN0b3J5LnR4dApAQCAtNTcxLDcgKzU3MSw3IEBACiAgKiAgMTEtMDItMDAgIDAxLjAxLjAxICBPcmlnaW5hbCByZWxlYXNlIGZvciBwb3N0IDEuMCB3b3JrCiAgKiAgMTItMDQtMDAgIDAxLjAxLjAyICBBZGRlZCBtZXNzYWdlcyBmb3IgQ29tbW9uIFRyYW5zcG9ydCBTZW5kIGFuZAogICogICAgICAgICAgICAgICAgICAgICAgUHJpbWl0aXZlIFNlbmQuCi0gKiAgMDEtMDktMDEgIDAxLjAxLjAzICBNb2RpZmVkIHNvbWUgb2YgdGhlIG5ldyBmbGFncyB0byBoYXZlIGFuIE1QSSBwcmVmaXgKKyAqICAwMS0wOS0wMSAgMDEuMDEuMDMgIE1vZGlmaWVkIHNvbWUgb2YgdGhlIG5ldyBmbGFncyB0byBoYXZlIGFuIE1QSSBwcmVmaXgKICAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBtb2RpZmllZCB0aGUgRmNQcmltaXRpdmVTZW5kIGZsYWdzLgogICogIDAxLTI1LTAxICAwMS4wMS4wNCAgTW92ZSBJbml0aWF0b3JJbmRleCBpbiBMaW5rU2VydmljZVJzcCByZXBseSB0byBhIGxhcmdlcgogICogICAgICAgICAgICAgICAgICAgICAgZmllbGQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IDk3NDcxYWYuLjUwMjFkMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0zNTg1LDcgKzM1ODUsNyBAQAogCSAqIGluZGV4ID0gY2hhaW5faWR4CiAJICoKIAkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFpbiBidWZmZXJzIG5lZWRlZChwbHVzIDEpIHBlciBJL08KLQkgKiB0aGVuIG11bHRpcGx5IHRoZSB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIGNtZHMKKwkgKiB0aGVuIG11bHRpcGx5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVvdXMgY21kcwogCSAqCiAJICogbnVtX3NnZSA9IG51bSBzZ2UgaW4gcmVxdWVzdCBmcmFtZSArIGxhc3QgY2hhaW4gYnVmZmVyCiAJICogc2NhbGUgPSBudW0gc2dlIHBlciBjaGFpbiBidWZmZXIgaWYgbm8gY2hhaW4gZWxlbWVudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAppbmRleCBkMjVkM2JlLi4xNjVmODFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNDM2LDcgKzQzNiw3IEBACiB0eXBlZGVmIHN0cnVjdCBfbXB0X2lvY3RsX2V2ZW50cyB7CiAJdTMyCWV2ZW50OwkJLyogU3BlY2lmaWVkIGJ5IGRlZmluZSBhYm92ZSAqLwogCXUzMglldmVudENvbnRleHQ7CS8qIEluZGV4IG9yIGNvdW50ZXIgKi8KLQlpbnQJZGF0YVsyXTsJLyogRmlyc3QgOCBieXRlcyBvZiBFdmVudCBEYXRhICovCisJdTMyCWRhdGFbMl07CS8qIEZpcnN0IDggYnl0ZXMgb2YgRXZlbnQgRGF0YSAqLwogfSBNUFRfSU9DVExfRVZFTlRTOwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IGZhMGY3NzYuLjNiZDk0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKQEAgLTI0NjMsMTEgKzI0NjMsMTEgQEAKIAkJCQlpb2MtPmV2ZW50c1tpZHhdLmV2ZW50ID0gTVBJX0VWRU5UX1NDU0lfREVWSUNFX1NUQVRVU19DSEFOR0U7CiAJCQkJaW9jLT5ldmVudHNbaWR4XS5ldmVudENvbnRleHQgPSBpb2MtPmV2ZW50Q29udGV4dDsKIAotCQkJCWlvYy0+ZXZlbnRzW2lkeF0uZGF0YVswXSA9IChwUmVxLT5MVU5bMV0gPDwgMjQpIHx8Ci0JCQkJCShNUElfRVZFTlRfU0NTSV9ERVZfU1RBVF9SQ19TTUFSVF9EQVRBIDw8IDE2KSB8fAotCQkJCQkoc2MtPmRldmljZS0+Y2hhbm5lbCA8PCA4KSB8fCBzYy0+ZGV2aWNlLT5pZDsKKwkJCQlpb2MtPmV2ZW50c1tpZHhdLmRhdGFbMF0gPSAocFJlcS0+TFVOWzFdIDw8IDI0KSB8CisJCQkJCShNUElfRVZFTlRfU0NTSV9ERVZfU1RBVF9SQ19TTUFSVF9EQVRBIDw8IDE2KSB8CisJCQkJCShzYy0+ZGV2aWNlLT5jaGFubmVsIDw8IDgpIHwgc2MtPmRldmljZS0+aWQ7CiAKLQkJCQlpb2MtPmV2ZW50c1tpZHhdLmRhdGFbMV0gPSAoc2Vuc2VfZGF0YVsxM10gPDwgOCkgfHwgc2Vuc2VfZGF0YVsxMl07CisJCQkJaW9jLT5ldmVudHNbaWR4XS5kYXRhWzFdID0gKHNlbnNlX2RhdGFbMTNdIDw8IDgpIHwgc2Vuc2VfZGF0YVsxMl07CiAKIAkJCQlpb2MtPmV2ZW50Q29udGV4dCsrOwogCQkJCWlmIChoZC0+aW9jLT5wY2lkZXYtPnZlbmRvciA9PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9LY29uZmlnIGIvZHJpdmVycy9tZXNzYWdlL2kyby9LY29uZmlnCmluZGV4IDY0NDMzOTIuLmY0YWMyMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL0tjb25maWcKQEAgLTEsNSArMSw2IEBACiAKIG1lbnUgIkkyTyBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSQogCiBjb25maWcgSTJPCiAJdHJpc3RhdGUgIkkyTyBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9kcml2ZXIuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vZHJpdmVyLmMKaW5kZXggZDMyMzVmMi4uZTBkNDc0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2RyaXZlci5jCkBAIC0xMjMsOCArMTIzLDEyIEBACiAJfQogCiAJcmMgPSBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKLQlpZiAocmMpCi0JCWRlc3Ryb3lfd29ya3F1ZXVlKGRydi0+ZXZlbnRfcXVldWUpOworCWlmIChyYykgeworCQlpZiAoZHJ2LT5ldmVudCkgeworCQkJZGVzdHJveV93b3JrcXVldWUoZHJ2LT5ldmVudF9xdWV1ZSk7CisJCQlkcnYtPmV2ZW50X3F1ZXVlID0gTlVMTDsKKwkJfQorCX0KIAogCXJldHVybiByYzsKIH07CkBAIC0yNTYsNyArMjYwLDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgaTJvX2RyaXZlciAqZHJ2OwogCi0JZm9yIChpID0gMDsgaSA8IEkyT19NQVhfRFJJVkVSUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGkyb19tYXhfZHJpdmVyczsgaSsrKSB7CiAJCWRydiA9IGkyb19kcml2ZXJzW2ldOwogCiAJCWlmIChkcnYpCkBAIC0yNzYsNyArMjgwLDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgaTJvX2RyaXZlciAqZHJ2OwogCi0JZm9yIChpID0gMDsgaSA8IEkyT19NQVhfRFJJVkVSUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGkyb19tYXhfZHJpdmVyczsgaSsrKSB7CiAJCWRydiA9IGkyb19kcml2ZXJzW2ldOwogCiAJCWlmIChkcnYpCkBAIC0yOTUsNyArMjk5LDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgaTJvX2RyaXZlciAqZHJ2OwogCi0JZm9yIChpID0gMDsgaSA8IEkyT19NQVhfRFJJVkVSUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGkyb19tYXhfZHJpdmVyczsgaSsrKSB7CiAJCWRydiA9IGkyb19kcml2ZXJzW2ldOwogCiAJCWlmIChkcnYpCkBAIC0zMTQsNyArMzE4LDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgaTJvX2RyaXZlciAqZHJ2OwogCi0JZm9yIChpID0gMDsgaSA8IEkyT19NQVhfRFJJVkVSUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGkyb19tYXhfZHJpdmVyczsgaSsrKSB7CiAJCWRydiA9IGkyb19kcml2ZXJzW2ldOwogCiAJCWlmIChkcnYpCkBAIC0zMzUsMTcgKzMzOSwxNSBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmkyb19kcml2ZXJzX2xvY2spOwogCi0JaWYgKChpMm9fbWF4X2RyaXZlcnMgPCAyKSB8fCAoaTJvX21heF9kcml2ZXJzID4gNjQpIHx8Ci0JICAgICgoaTJvX21heF9kcml2ZXJzIF4gKGkyb19tYXhfZHJpdmVycyAtIDEpKSAhPQotCSAgICAgKDIgKiBpMm9fbWF4X2RyaXZlcnMgLSAxKSkpIHsKLQkJb3NtX3dhcm4oIm1heF9kcml2ZXJzIHNldCB0byAlZCwgYnV0IG11c3QgYmUgPj0yIGFuZCA8PSA2NCBhbmQgIgotCQkJICJhIHBvd2VyIG9mIDJcbiIsIGkyb19tYXhfZHJpdmVycyk7CisJaWYgKChpMm9fbWF4X2RyaXZlcnMgPCAyKSB8fCAoaTJvX21heF9kcml2ZXJzID4gNjQpKSB7CisJCW9zbV93YXJuKCJtYXhfZHJpdmVycyBzZXQgdG8gJWQsIGJ1dCBtdXN0IGJlID49MiBhbmQgPD0gNjRcbiIsCisJCQkgaTJvX21heF9kcml2ZXJzKTsKIAkJaTJvX21heF9kcml2ZXJzID0gSTJPX01BWF9EUklWRVJTOwogCX0KIAlvc21faW5mbygibWF4IGRyaXZlcnMgPSAlZFxuIiwgaTJvX21heF9kcml2ZXJzKTsKIAogCWkyb19kcml2ZXJzID0KLQkgICAga3phbGxvYyhpMm9fbWF4X2RyaXZlcnMgKiBzaXplb2YoKmkyb19kcml2ZXJzKSwgR0ZQX0tFUk5FTCk7CisJICAgIGtjYWxsb2MoaTJvX21heF9kcml2ZXJzLCBzaXplb2YoKmkyb19kcml2ZXJzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpMm9fZHJpdmVycykKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2xhbi5oIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fbGFuLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MDJiODEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fbGFuLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoKLSAqICAgCWkyb19sYW4uaAkJCUkyTyBMQU4gQ2xhc3MgZGVmaW5pdGlvbnMKLSAqCi0gKiAgICAgIEkyTyBMQU4gQ0xBU1MgT1NNICAgICAgIAlNYXkgMjZ0aCAyMDAwCi0gKgotICogICAgICAoQykgQ29weXJpZ2h0IDE5OTksIDIwMDAJVW5pdmVyc2l0eSBvZiBIZWxzaW5raSwKLSAqCQkJCQlEZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UKLSAqCi0gKiAgICAgIFRoaXMgY29kZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCAvIHRlc3QuCi0gKgotICoJQXV0aG9yOgkJQXV2byBI5GtraW5lbiA8QXV2by5IYWtraW5lbkBjcy5IZWxzaW5raS5GST4KLSAqCQkJSnVoYSBTaWV25G5lbiA8SnVoYS5TaWV2YW5lbkBjcy5IZWxzaW5raS5GST4KLSAqCQkJVGFuZWxpIFbkaORrYW5nYXMgPFRhbmVsaS5WYWhha2FuZ2FzQGNzLkhlbHNpbmtpLkZJPgotICovCi0KLSNpZm5kZWYgX0kyT19MQU5fSAotI2RlZmluZSBfSTJPX0xBTl9ICi0KLS8qIERlZmF1bHQgdmFsdWVzIGZvciB0dW5hYmxlIHBhcmFtZXRlcnMgZmlyc3QgKi8KLQotI2RlZmluZSBJMk9fTEFOX01BWF9CVUNLRVRTX09VVCA5NgotI2RlZmluZSBJMk9fTEFOX0JVQ0tFVF9USFJFU0gJMTgJLyogOSBidWNrZXRzIGluIG9uZSBtZXNzYWdlICovCi0jZGVmaW5lIEkyT19MQU5fUlhfQ09QWUJSRUFLCTIwMAotI2RlZmluZSBJMk9fTEFOX1RYX1RJTUVPVVQgCSgxKkhaKQotI2RlZmluZSBJMk9fTEFOX1RYX0JBVENIX01PREUJMgkvKiAyPWF1dG9tYXRpYywgMT1vbiwgMD1vZmYgKi8KLSNkZWZpbmUgSTJPX0xBTl9FVkVOVF9NQVNLCTAJLyogMD1Ob25lLCAweEZGQzAwMDAyPUFsbCAqLwotCi0vKiBMQU4gdHlwZXMgKi8KLSNkZWZpbmUgSTJPX0xBTl9FVEhFUk5FVAkweDAwMzAKLSNkZWZpbmUgSTJPX0xBTl8xMDBWRwkJMHgwMDQwCi0jZGVmaW5lIEkyT19MQU5fVFIJCTB4MDA1MAotI2RlZmluZSBJMk9fTEFOX0ZEREkJCTB4MDA2MAotI2RlZmluZSBJMk9fTEFOX0ZJQlJFX0NIQU5ORUwJMHgwMDcwCi0jZGVmaW5lIEkyT19MQU5fVU5LTk9XTgkJMHgwMDAwMDAwMAotCi0vKiBDb25uZWN0b3IgdHlwZXMgKi8KLQotLyogRXRoZXJuZXQgKi8KLSNkZWZpbmUgSTJPX0xBTl9BVUkJCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwMQotI2RlZmluZSBJMk9fTEFOXzEwQkFTRTUJCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwMgotI2RlZmluZSBJMk9fTEFOX0ZJT1JMCQkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDMKLSNkZWZpbmUgSTJPX0xBTl8xMEJBU0UyCQkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDQKLSNkZWZpbmUgSTJPX0xBTl8xMEJST0FEMzYJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDA1Ci0jZGVmaW5lIEkyT19MQU5fMTBCQVNFX1QJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDA2Ci0jZGVmaW5lIEkyT19MQU5fMTBCQVNFX0ZQCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwNwotI2RlZmluZSBJMk9fTEFOXzEwQkFTRV9GQgkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDgKLSNkZWZpbmUgSTJPX0xBTl8xMEJBU0VfRkwJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDA5Ci0jZGVmaW5lIEkyT19MQU5fMTAwQkFTRV9UWAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMEEKLSNkZWZpbmUgSTJPX0xBTl8xMDBCQVNFX0ZYCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwQgotI2RlZmluZSBJMk9fTEFOXzEwMEJBU0VfVDQJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDBDCi0jZGVmaW5lIEkyT19MQU5fMTAwMEJBU0VfU1gJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDBECi0jZGVmaW5lIEkyT19MQU5fMTAwMEJBU0VfTFgJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDBFCi0jZGVmaW5lIEkyT19MQU5fMTAwMEJBU0VfQ1gJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDBGCi0jZGVmaW5lIEkyT19MQU5fMTAwMEJBU0VfVAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMTAKLQotLyogQW55TEFOICovCi0jZGVmaW5lIEkyT19MQU5fMTAwVkdfRVRIRVJORVQJKEkyT19MQU5fMTAwVkcgPDwgNCkgKyAweDAwMDAwMDAxCi0jZGVmaW5lIEkyT19MQU5fMTAwVkdfVFIJKEkyT19MQU5fMTAwVkcgPDwgNCkgKyAweDAwMDAwMDAyCi0KLS8qIFRva2VuIFJpbmcgKi8KLSNkZWZpbmUgSTJPX0xBTl80TUJJVAkJKEkyT19MQU5fVFIgPDwgNCkgKyAweDAwMDAwMDAxCi0jZGVmaW5lIEkyT19MQU5fMTZNQklUCQkoSTJPX0xBTl9UUiA8PCA0KSArIDB4MDAwMDAwMDIKLQotLyogRkRESSAqLwotI2RlZmluZSBJMk9fTEFOXzEyNU1CQVVECShJMk9fTEFOX0ZEREkgPDwgNCkgKyAweDAwMDAwMDAxCi0KLS8qIEZpYnJlIENoYW5uZWwgKi8KLSNkZWZpbmUgSTJPX0xBTl9QT0lOVF9QT0lOVAkoSTJPX0xBTl9GSUJSRV9DSEFOTkVMIDw8IDQpICsgMHgwMDAwMDAwMQotI2RlZmluZSBJMk9fTEFOX0FSQl9MT09QCShJMk9fTEFOX0ZJQlJFX0NIQU5ORUwgPDwgNCkgKyAweDAwMDAwMDAyCi0jZGVmaW5lIEkyT19MQU5fUFVCTElDX0xPT1AJKEkyT19MQU5fRklCUkVfQ0hBTk5FTCA8PCA0KSArIDB4MDAwMDAwMDMKLSNkZWZpbmUgSTJPX0xBTl9GQUJSSUMJCShJMk9fTEFOX0ZJQlJFX0NIQU5ORUwgPDwgNCkgKyAweDAwMDAwMDA0Ci0KLSNkZWZpbmUgSTJPX0xBTl9FTVVMQVRJT04JMHgwMDAwMEYwMAotI2RlZmluZSBJMk9fTEFOX09USEVSCQkweDAwMDAwRjAxCi0jZGVmaW5lIEkyT19MQU5fREVGQVVMVAkJMHhGRkZGRkZGRgotCi0vKiBMQU4gY2xhc3MgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgTEFOX1BBQ0tFVF9TRU5ECQkweDNCCi0jZGVmaW5lIExBTl9TRFVfU0VORAkJMHgzRAotI2RlZmluZSBMQU5fUkVDRUlWRV9QT1NUCTB4M0UKLSNkZWZpbmUgTEFOX1JFU0VUCQkweDM1Ci0jZGVmaW5lIExBTl9TVVNQRU5ECQkweDM3Ci0KLS8qIExBTiBEZXRhaWxlZFN0YXR1c0NvZGUgZGVmaW5lcyAqLwotI2RlZmluZSBJMk9fTEFOX0RTQ19TVUNDRVNTCQkJMHgwMAotI2RlZmluZSBJMk9fTEFOX0RTQ19ERVZJQ0VfRkFJTFVSRQkJMHgwMQotI2RlZmluZSBJMk9fTEFOX0RTQ19ERVNUSU5BVElPTl9OT1RfRk9VTkQJMHgwMgotI2RlZmluZQlJMk9fTEFOX0RTQ19UUkFOU01JVF9FUlJPUgkJMHgwMwotI2RlZmluZSBJMk9fTEFOX0RTQ19UUkFOU01JVF9BQk9SVEVECQkweDA0Ci0jZGVmaW5lIEkyT19MQU5fRFNDX1JFQ0VJVkVfRVJST1IJCTB4MDUKLSNkZWZpbmUgSTJPX0xBTl9EU0NfUkVDRUlWRV9BQk9SVEVECQkweDA2Ci0jZGVmaW5lIEkyT19MQU5fRFNDX0RNQV9FUlJPUgkJCTB4MDcKLSNkZWZpbmUgSTJPX0xBTl9EU0NfQkFEX1BBQ0tFVF9ERVRFQ1RFRAkJMHgwOAotI2RlZmluZSBJMk9fTEFOX0RTQ19PVVRfT0ZfTUVNT1JZCQkweDA5Ci0jZGVmaW5lIEkyT19MQU5fRFNDX0JVQ0tFVF9PVkVSUlVOCQkweDBBCi0jZGVmaW5lIEkyT19MQU5fRFNDX0lPUF9JTlRFUk5BTF9FUlJPUgkJMHgwQgotI2RlZmluZSBJMk9fTEFOX0RTQ19DQU5DRUxFRAkJCTB4MEMKLSNkZWZpbmUgSTJPX0xBTl9EU0NfSU5WQUxJRF9UUkFOU0FDVElPTl9DT05URVhUCTB4MEQKLSNkZWZpbmUgSTJPX0xBTl9EU0NfREVTVF9BRERSRVNTX0RFVEVDVEVECTB4MEUKLSNkZWZpbmUgSTJPX0xBTl9EU0NfREVTVF9BRERSRVNTX09NSVRURUQJMHgwRgotI2RlZmluZSBJMk9fTEFOX0RTQ19QQVJUSUFMX1BBQ0tFVF9SRVRVUk5FRAkweDEwCi0jZGVmaW5lIEkyT19MQU5fRFNDX1NVU1BFTkRFRAkJCTB4MTEKLQotc3RydWN0IGkyb19wYWNrZXRfaW5mbyB7Ci0JdTMyIG9mZnNldDoyNDsKLQl1MzIgZmxhZ3M6ODsKLQl1MzIgbGVuOjI0OwotCXUzMiBzdGF0dXM6ODsKLX07Ci0KLXN0cnVjdCBpMm9fYnVja2V0X2Rlc2NyaXB0b3IgewotCXUzMiBjb250ZXh0OwkJLyogRklYTUU6IDY0Yml0IHN1cHBvcnQgKi8KLQlzdHJ1Y3QgaTJvX3BhY2tldF9pbmZvIHBhY2tldF9pbmZvWzFdOwotfTsKLQotLyogRXZlbnQgSW5kaWNhdG9yIE1hc2sgRmxhZ3MgZm9yIExBTiBPU00gKi8KLQotI2RlZmluZSBJMk9fTEFOX0VWVF9MSU5LX0RPV04JCTB4MDEKLSNkZWZpbmUgSTJPX0xBTl9FVlRfTElOS19VUAkJMHgwMgotI2RlZmluZSBJMk9fTEFOX0VWVF9NRURJQV9DSEFOR0UgCTB4MDQKLQotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZkZGlkZXZpY2UuaD4KLQotc3RydWN0IGkyb19sYW5fbG9jYWwgewotCXU4IHVuaXQ7Ci0Jc3RydWN0IGkyb19kZXZpY2UgKmkyb19kZXY7Ci0KLQlzdHJ1Y3QgZmRkaV9zdGF0aXN0aWNzIHN0YXRzOwkvKiBzZWUgYWxzbyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqLwotCXVuc2lnbmVkIHNob3J0ICgqdHlwZV90cmFucykgKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwotCWF0b21pY190IGJ1Y2tldHNfb3V0OwkvKiBuYnIgb2YgdW51c2VkIGJ1Y2tldHMgb24gRERNICovCi0JYXRvbWljX3QgdHhfb3V0OwkvKiBvdXRzdGFuZGluZyBUWGVzICovCi0JdTggdHhfY291bnQ7CQkvKiBwYWNrZXRzIGluIG9uZSBUWCBtZXNzYWdlIGZyYW1lICovCi0JdTE2IHR4X21heF9vdXQ7CQkvKiBERE0ncyBUeCBxdWV1ZSBsZW4gKi8KLQl1OCBzZ2xfbWF4OwkJLyogbWF4IFNHTHMgaW4gb25lIG1lc3NhZ2UgZnJhbWUgKi8KLQl1MzIgbTsJCQkvKiBJT1AgYWRkcmVzcyBvZiB0aGUgYmF0Y2ggbXNnIGZyYW1lICovCi0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaTJvX2JhdGNoX3NlbmRfdGFzazsKLQlpbnQgc2VuZF9hY3RpdmU7Ci0Jc3RydWN0IHNrX2J1ZmYgKippMm9fZmJsOwkvKiBGcmVlIGJ1Y2tldCBsaXN0ICh0byByZXVzZSBza2JzKSAqLwotCWludCBpMm9fZmJsX3RhaWw7Ci0Jc3BpbmxvY2tfdCBmYmxfbG9jazsKLQotCXNwaW5sb2NrX3QgdHhfbG9jazsKLQotCXUzMiBtYXhfc2l6ZV9tY190YWJsZTsJLyogbWF4IG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzICovCi0KLQkvKiBMQU4gT1NNIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIGFyZSBoZXJlOiAqLwotCi0JdTE2IG1heF9idWNrZXRzX291dDsJLyogbWF4IG5iciBvZiBidWNrZXRzIHRvIHNlbmQgdG8gRERNICovCi0JdTE2IGJ1Y2tldF90aHJlc2g7CS8qIHNlbmQgbW9yZSB3aGVuIHRoaXMgbWFueSB1c2VkICovCi0JdTE2IHJ4X2NvcHlicmVhazsKLQotCXU4IHR4X2JhdGNoX21vZGU7CS8qIFNldCB3aGVuIHVzaW5nIGJhdGNoIG1vZGUgc2VuZHMgKi8KLQl1MzIgaTJvX2V2ZW50X21hc2s7CS8qIFRvIHR1cm4gb24gaW50ZXJlc3RpbmcgZXZlbnQgZmxhZ3MgKi8KLX07Ci0KLSNlbmRpZgkJCQkvKiBfSTJPX0xBTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCBhYjZlOTg1Li5hMjBhNTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAjCiAKIG1lbnUgIk11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0KIAogY29uZmlnIE1GRF9TTTUwMQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBTaWxpY29uIE1vdGlvbiBTTTUwMSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYwppbmRleCAyZDAzYmY3Li4zOGU4MTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxeDAwLXRzLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC10cy5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwppbmRleCBhM2M1MjViLi4yZjJmYmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwpAQCAtMjUsNiArMjUsMTUgQEAKIAkgIGluZm9ybWF0aW9uIG9uIHRoZSBzcGVjaWZpYyBkcml2ZXIgbGV2ZWwgYW5kIHN1cHBvcnQgc3RhdGVtZW50CiAJICBmb3IgeW91ciBJQk0gc2VydmVyLgogCitjb25maWcgUEhBTlRPTQorCXRyaXN0YXRlICJTZW5zYWJsZSBQSEFOVG9NIgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBhIGRyaXZlciBmb3IgU2Vuc2FibGUgUEhBTlRvTSBkZXZpY2UuCisKKwkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgbW9kdWxlLCBpdHMgbmFtZSB3aWxsIGJlIHBoYW50b20uIElmIHVuc3VyZSwKKwkgIHNheSBOIGhlcmUuCisKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtMTIxLDcgKzEzMCw3IEBACiAKIAkgIFJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb255LWxhcHRvcC50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uLgogCi1jb25maWcgU09OWV9MQVBUT1BfT0xECitjb25maWcgU09OWVBJX0NPTVBBVAogCWJvb2wgIlNvbnlwaSBjb21wYXRpYmlsaXR5IgogCWRlcGVuZHMgb24gU09OWV9MQVBUT1AKIAkgIC0tLWhlbHAtLS0KQEAgLTE3OCw0ICsxODcsMTMgQEAKIAogCSAgSWYgeW91IGFyZSBub3Qgc3VyZSwgc2F5IFkgaGVyZS4KIAorY29uZmlnIEJMSU5LCisJdHJpc3RhdGUgIktleWJvYXJkIGJsaW5rIGRyaXZlciIKKwloZWxwCisJICBEcml2ZXIgdGhhdCB3aGVuIGxvYWRlZCB3aWxsIGJsaW5rIHRoZSBrZXlib2FyZCBMRURzIGNvbnRpbnVvdXNseS4KKwkgIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGZvciBrZXJuZWxzIHRoYXQgY2Fubm90IG5lY2Vzc2FyaWx5CisJICBvdXRwdXQgc29tZXRoaW5nIHRvIHRoZSBzY3JlZW4gbGlrZSBrZXhlYyBrZXJuZWxzIHRvIGdpdmUgdGhlIHVzZXIKKwkgIGEgdmlzdWFsIGluZGljYXRpb24gdGhhdCB0aGUga2VybmVsIGlzIGRvaW5nIHNvbWV0aGluZy4KKworCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKaW5kZXggZTMyNTE2NC4uNWI2ZDQ2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQpAQCAtNyw5ICs3LDExIEBACiBvYmotJChDT05GSUdfSERQVV9GRUFUVVJFUykJKz0gaGRwdWZ0cnMvCiBvYmotJChDT05GSUdfTVNJX0xBUFRPUCkgICAgICs9IG1zaS1sYXB0b3Aubwogb2JqLSQoQ09ORklHX0FTVVNfTEFQVE9QKSAgICAgKz0gYXN1cy1sYXB0b3Aubworb2JqLSQoQ09ORklHX0JMSU5LKQkJKz0gYmxpbmsubwogb2JqLSQoQ09ORklHX0xLRFRNKQkJKz0gbGtkdG0ubwogb2JqLSQoQ09ORklHX1RJRk1fQ09SRSkgICAgICAgCSs9IHRpZm1fY29yZS5vCiBvYmotJChDT05GSUdfVElGTV83WFgxKSAgICAgICAJKz0gdGlmbV83eHgxLm8KK29iai0kKENPTkZJR19QSEFOVE9NKQkJKz0gcGhhbnRvbS5vCiBvYmotJChDT05GSUdfU0dJX0lPQzQpCQkrPSBpb2M0Lm8KIG9iai0kKENPTkZJR19TT05ZX0xBUFRPUCkJKz0gc29ueS1sYXB0b3Aubwogb2JqLSQoQ09ORklHX1RISU5LUEFEX0FDUEkpCSs9IHRoaW5rcGFkX2FjcGkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2FzdXMtbGFwdG9wLmMgYi9kcml2ZXJzL21pc2MvYXN1cy1sYXB0b3AuYwppbmRleCA2NWMzMmE5Li40ZjkwNjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvYXN1cy1sYXB0b3AuYworKysgYi9kcml2ZXJzL21pc2MvYXN1cy1sYXB0b3AuYwpAQCAtMzAsNyArMzAsNyBAQAogICogIEVyaWMgQnVyZ2hhcmQgIC0gTEVEIGRpc3BsYXkgc3VwcG9ydCBmb3IgVzFOCiAgKiAgSm9zaCBHcmVlbiAgICAgLSBMaWdodCBTZW5zIHN1cHBvcnQKICAqICBUaG9tYXMgVHV0dGxlICAtIEhpcyBmaXJzdCBwYXRjaCBmb3IgbGVkIHN1cHBvcnQgd2FzIHZlcnkgaGVscGZ1bGwKLSAqCisgKiAgU2FtIExpbiAgICAgICAgLSBHUFMgc3VwcG9ydAogICovCiAKICNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgpAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jZGVmaW5lIEFTVVNfTEFQVE9QX1ZFUlNJT04gIjAuNDEiCisjZGVmaW5lIEFTVVNfTEFQVE9QX1ZFUlNJT04gIjAuNDIiCiAKICNkZWZpbmUgQVNVU19IT1RLX05BTUUgICAgICAgICAgIkFzdXMgTGFwdG9wIFN1cHBvcnQiCiAjZGVmaW5lIEFTVVNfSE9US19DTEFTUyAgICAgICAgICJob3RrZXkiCkBAIC04Myw2ICs4Myw3IEBACiAjZGVmaW5lIFBMRURfT04gICAgIDB4MjAJLy9QaG9uZSBMRUQKICNkZWZpbmUgR0xFRF9PTiAgICAgMHg0MAkvL0dhbWluZyBMRUQKICNkZWZpbmUgTENEX09OICAgICAgMHg4MAkvL0xDRCBiYWNrbGlnaHQKKyNkZWZpbmUgR1BTX09OICAgICAgMHgxMDAJLy9HUFMKIAogI2RlZmluZSBBU1VTX0xPRyAgICBBU1VTX0hPVEtfRklMRSAiOiAiCiAjZGVmaW5lIEFTVVNfRVJSICAgIEtFUk5fRVJSICAgIEFTVVNfTE9HCkBAIC0xNDgsNyArMTQ5LDcgQEAKIEFTVVNfSEFORExFKGRpc3BsYXlfZ2V0LCAiXFxfU0IuUENJMC5QMFAxLlZHQS5HRVREIiwJLyogIEE2QiwgQTZLIEE2UiBBN0QgRjNKTSBMNFIgTTZSIEEzRwogCQkJCQkJCSAgIE02QSBNNlYgVlgtMSBWNkogVjZWIFczWiAqLwogCSAgICAiXFxfU0IuUENJMC5QMFAyLlZHQS5HRVREIiwJLyogQTNFIEE0SywgQTREIEE0TCBBNkogQTdKIEE4SiBaNzFWIE05VgotCQkJCQkgICBTNUEgTTVBIHozM0EgVzFKYyBXMlYgKi8KKwkJCQkJICAgUzVBIE01QSB6MzNBIFcxSmMgVzJWIEcxICovCiAJICAgICJcXF9TQi5QQ0kwLlAwUDMuVkdBLkdFVEQiLAkvKiBBNlYgQTZRICovCiAJICAgICJcXF9TQi5QQ0kwLlAwUEEuVkdBLkdFVEQiLAkvKiBBNlQsIEE2TSAqLwogCSAgICAiXFxfU0IuUENJMC5QQ0kxLlZHQUMuTk1BUCIsCS8qIEwzQyAqLwpAQCAtMTYyLDYgKzE2MywxMiBAQAogQVNVU19IQU5ETEUobHNfc3dpdGNoLCBBU1VTX0hPVEtfUFJFRklYICJBTFNDIik7CS8qIFo3MUEgWjcxViAqLwogQVNVU19IQU5ETEUobHNfbGV2ZWwsIEFTVVNfSE9US19QUkVGSVggIkFMU0wiKTsJLyogWjcxQSBaNzFWICovCiAKKy8qIEdQUyAqLworLyogUjJIIHVzZSBkaWZmZXJlbnQgaGFuZGxlIGZvciBHUFMgb24vb2ZmICovCitBU1VTX0hBTkRMRShncHNfb24sIEFTVVNfSE9US19QUkVGSVggIlNET04iKTsJLyogUjJIICovCitBU1VTX0hBTkRMRShncHNfb2ZmLCBBU1VTX0hPVEtfUFJFRklYICJTRE9GIik7CS8qIFIySCAqLworQVNVU19IQU5ETEUoZ3BzX3N0YXR1cywgQVNVU19IT1RLX1BSRUZJWCAiR1BTVCIpOworCiAvKgogICogVGhpcyBpcyB0aGUgbWFpbiBzdHJ1Y3R1cmUsIHdlIGNhbiB1c2UgaXQgdG8gc3RvcmUgYW55dGhpbmcgaW50ZXJlc3RpbmcKICAqIGFib3V0IHRoZSBob3RrIGRldmljZQpAQCAtMjc4LDEyICsyODUsMjggQEAKIAlyZXR1cm4gKGhvdGstPnN0YXR1cyAmIG1hc2spID8gMSA6IDA7CiB9CiAKK3N0YXRpYyBpbnQgcmVhZF9ncHNfc3RhdHVzKHZvaWQpCit7CisJdWxvbmcgc3RhdHVzOworCWFjcGlfc3RhdHVzIHJ2ID0gQUVfT0s7CisKKwlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihncHNfc3RhdHVzX2hhbmRsZSwgTlVMTCwgTlVMTCwgJnN0YXR1cyk7CisJaWYgKEFDUElfRkFJTFVSRShydikpCisJCXByaW50ayhBU1VTX1dBUk5JTkcgIkVycm9yIHJlYWRpbmcgR1BTIHN0YXR1c1xuIik7CisJZWxzZQorCQlyZXR1cm4gc3RhdHVzID8gMSA6IDA7CisKKwlyZXR1cm4gKGhvdGstPnN0YXR1cyAmIEdQU19PTikgPyAxIDogMDsKK30KKwogLyogR2VuZXJpYyBMRUQgZnVuY3Rpb25zICovCiBzdGF0aWMgaW50IHJlYWRfc3RhdHVzKGludCBtYXNrKQogewogCS8qIFRoZXJlIGlzIGEgc3BlY2lhbCBtZXRob2QgZm9yIGJvdGggd2lyZWxlc3MgZGV2aWNlcyAqLwogCWlmIChtYXNrID09IEJUX09OIHx8IG1hc2sgPT0gV0xfT04pCiAJCXJldHVybiByZWFkX3dpcmVsZXNzX3N0YXR1cyhtYXNrKTsKKwllbHNlIGlmIChtYXNrID09IEdQU19PTikKKwkJcmV0dXJuIHJlYWRfZ3BzX3N0YXR1cygpOwogCiAJcmV0dXJuIChob3RrLT5zdGF0dXMgJiBtYXNrKSA/IDEgOiAwOwogfQpAQCAtMjk5LDYgKzMyMiwxMCBAQAogCWNhc2UgR0xFRF9PTjoKIAkJb3V0ID0gKG91dCAmIDB4MSkgKyAxOwogCQlicmVhazsKKwljYXNlIEdQU19PTjoKKwkJaGFuZGxlID0gKG91dCkgPyBncHNfb25faGFuZGxlIDogZ3BzX29mZl9oYW5kbGU7CisJCW91dCA9IDB4MDI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW91dCAmPSAweDE7CiAJCWJyZWFrOwpAQCAtNjY3LDYgKzY5NCwyMSBAQAogCXJldHVybiBydjsKIH0KIAorLyoKKyAqIEdQUworICovCitzdGF0aWMgc3NpemVfdCBzaG93X2dwcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCByZWFkX3N0YXR1cyhHUFNfT04pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfZ3BzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHN0b3JlX3N0YXR1cyhidWYsIGNvdW50LCBOVUxMLCBHUFNfT04pOworfQorCiBzdGF0aWMgdm9pZCBhc3VzX2hvdGtfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQogewogCS8qIFRPRE8gRmluZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIGV2ZW50cyBjb3VudC4gKi8KQEAgLTcxNSw2ICs3NTcsNyBAQAogc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGxlZGQpOwogc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGxzX3N3aXRjaCk7CiBzdGF0aWMgQVNVU19DUkVBVEVfREVWSUNFX0FUVFIobHNfbGV2ZWwpOworc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGdwcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphc3VzcGZfYXR0cmlidXRlc1tdID0gewogCSZkZXZfYXR0cl9pbmZvcy5hdHRyLApAQCAtNzI0LDYgKzc2Nyw3IEBACiAJJmRldl9hdHRyX2xlZGQuYXR0ciwKIAkmZGV2X2F0dHJfbHNfc3dpdGNoLmF0dHIsCiAJJmRldl9hdHRyX2xzX2xldmVsLmF0dHIsCisJJmRldl9hdHRyX2dwcy5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTc2Myw2ICs4MDcsOSBAQAogCQlBU1VTX1NFVF9ERVZJQ0VfQVRUUihsc19sZXZlbCwgMDY0NCwgc2hvd19sc2x2bCwgc3RvcmVfbHNsdmwpOwogCQlBU1VTX1NFVF9ERVZJQ0VfQVRUUihsc19zd2l0Y2gsIDA2NDQsIHNob3dfbHNzdywgc3RvcmVfbHNzdyk7CiAJfQorCisJaWYgKGdwc19zdGF0dXNfaGFuZGxlICYmIGdwc19vbl9oYW5kbGUgJiYgZ3BzX29mZl9oYW5kbGUpCisJCUFTVVNfU0VUX0RFVklDRV9BVFRSKGdwcywgMDY0NCwgc2hvd19ncHMsIHN0b3JlX2dwcyk7CiB9CiAKIHN0YXRpYyBpbnQgYXN1c19oYW5kbGVfaW5pdChjaGFyICpuYW1lLCBhY3BpX2hhbmRsZSAqIGhhbmRsZSwKQEAgLTg5MCw5ICs5MzcsMTMgQEAKIAogCS8qIFRoZXJlIGlzIGEgbG90IG9mIG1vZGVscyB3aXRoICJBTFNMIiwgYnV0IGEgZmV3IGdldAogCSAgIGEgcmVhbCBsaWdodCBzZW5zLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGl0LiAqLwotCWlmIChBU1VTX0hBTkRMRV9JTklUKGxzX3N3aXRjaCkpCisJaWYgKCFBU1VTX0hBTkRMRV9JTklUKGxzX3N3aXRjaCkpCiAJCUFTVVNfSEFORExFX0lOSVQobHNfbGV2ZWwpOwogCisJQVNVU19IQU5ETEVfSU5JVChncHNfb24pOworCUFTVVNfSEFORExFX0lOSVQoZ3BzX29mZik7CisJQVNVU19IQU5ETEVfSU5JVChncHNfc3RhdHVzKTsKKwogCWtmcmVlKG1vZGVsKTsKIAogCXJldHVybiBBRV9PSzsKQEAgLTk1MCw3ICsxMDAxLDcgQEAKIAkgKiBXZSBpbnN0YWxsIHRoZSBoYW5kbGVyLCBpdCB3aWxsIHJlY2VpdmUgdGhlIGhvdGsgaW4gcGFyYW1ldGVyLCBzbywgd2UKIAkgKiBjb3VsZCBhZGQgb3RoZXIgZGF0YSB0byB0aGUgaG90ayBzdHJ1Y3QKIAkgKi8KLQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoaG90ay0+aGFuZGxlLCBBQ1BJX1NZU1RFTV9OT1RJRlksCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGhvdGstPmhhbmRsZSwgQUNQSV9BTExfTk9USUZZLAogCQkJCQkgICAgIGFzdXNfaG90a19ub3RpZnksIGhvdGspOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcHJpbnRrKEFTVVNfRVJSICJFcnJvciBpbnN0YWxsaW5nIG5vdGlmeSBoYW5kbGVyXG4iKTsKQEAgLTk4MSw2ICsxMDMyLDkgQEAKIAlpZiAobHNfbGV2ZWxfaGFuZGxlKQogCQlzZXRfbGlnaHRfc2Vuc19sZXZlbChob3RrLT5saWdodF9sZXZlbCk7CiAKKwkvKiBHUFMgaXMgb24gYnkgZGVmYXVsdCAqLworCXdyaXRlX3N0YXR1cyhOVUxMLCAxLCBHUFNfT04pOworCiAgICAgICBlbmQ6CiAJaWYgKHJlc3VsdCkgewogCQlrZnJlZShob3RrLT5uYW1lKTsKQEAgLTk5Nyw3ICsxMDUxLDcgQEAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0YXR1cyA9IGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGhvdGstPmhhbmRsZSwgQUNQSV9TWVNURU1fTk9USUZZLAorCXN0YXR1cyA9IGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGhvdGstPmhhbmRsZSwgQUNQSV9BTExfTk9USUZZLAogCQkJCQkgICAgYXN1c19ob3RrX25vdGlmeSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlwcmludGsoQVNVU19FUlIgIkVycm9yIHJlbW92aW5nIG5vdGlmeSBoYW5kbGVyXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9ibGluay5jIGIvZHJpdmVycy9taXNjL2JsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0NDMxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9ibGluay5jCkBAIC0wLDAgKzEsMjcgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKworc3RhdGljIHZvaWQgZG9fYmxpbmsodW5zaWduZWQgbG9uZyBkYXRhKTsKKworc3RhdGljIERFRklORV9USU1FUihibGlua190aW1lciwgZG9fYmxpbmssIDAgLDApOworCitzdGF0aWMgdm9pZCBkb19ibGluayh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RhdGljIGxvbmcgY291bnQ7CisJaWYgKHBhbmljX2JsaW5rKQorCQlwYW5pY19ibGluayhjb3VudCsrKTsKKwlibGlua190aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMSk7CisJYWRkX3RpbWVyKCZibGlua190aW1lcik7Cit9CisKK3N0YXRpYyBpbnQgYmxpbmtfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIkVuYWJsaW5nIGtleWJvYXJkIGJsaW5raW5nXG4iKTsKKwlkb19ibGluaygwKTsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQoYmxpbmtfaW5pdCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9tc2ktbGFwdG9wLmMgYi9kcml2ZXJzL21pc2MvbXNpLWxhcHRvcC5jCmluZGV4IDY4YzRiNTguLjQxZTkwMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tc2ktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9taXNjL21zaS1sYXB0b3AuYwpAQCAtODUsNyArODUsNyBAQAogCWJ1ZlswXSA9IDB4ODA7CiAJYnVmWzFdID0gKHU4KSAobGV2ZWwqMzEpOwogCi0JcmV0dXJuIGVjX3RyYW5zYWN0aW9uKE1TSV9FQ19DT01NQU5EX0xDRF9MRVZFTCwgYnVmLCBzaXplb2YoYnVmKSwgTlVMTCwgMCk7CisJcmV0dXJuIGVjX3RyYW5zYWN0aW9uKE1TSV9FQ19DT01NQU5EX0xDRF9MRVZFTCwgYnVmLCBzaXplb2YoYnVmKSwgTlVMTCwgMCwgMSk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2xjZF9sZXZlbCh2b2lkKQpAQCAtOTMsNyArOTMsNyBAQAogCXU4IHdkYXRhID0gMCwgcmRhdGE7CiAJaW50IHJlc3VsdDsKIAotCXJlc3VsdCA9IGVjX3RyYW5zYWN0aW9uKE1TSV9FQ19DT01NQU5EX0xDRF9MRVZFTCwgJndkYXRhLCAxLCAmcmRhdGEsIDEpOworCXJlc3VsdCA9IGVjX3RyYW5zYWN0aW9uKE1TSV9FQ19DT01NQU5EX0xDRF9MRVZFTCwgJndkYXRhLCAxLCAmcmRhdGEsIDEsIDEpOwogCWlmIChyZXN1bHQgPCAwKQogCQlyZXR1cm4gcmVzdWx0OwogCkBAIC0xMDUsNyArMTA1LDcgQEAKIAl1OCB3ZGF0YSA9IDQsIHJkYXRhOwogCWludCByZXN1bHQ7CiAKLQlyZXN1bHQgPSBlY190cmFuc2FjdGlvbihNU0lfRUNfQ09NTUFORF9MQ0RfTEVWRUwsICZ3ZGF0YSwgMSwgJnJkYXRhLCAxKTsKKwlyZXN1bHQgPSBlY190cmFuc2FjdGlvbihNU0lfRUNfQ09NTUFORF9MQ0RfTEVWRUwsICZ3ZGF0YSwgMSwgJnJkYXRhLCAxLCAxKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJcmV0dXJuIHJlc3VsdDsKIApAQCAtMTE5LDE0ICsxMTksMTQgQEAKIAogCXdkYXRhWzBdID0gNDsKIAotCXJlc3VsdCA9IGVjX3RyYW5zYWN0aW9uKE1TSV9FQ19DT01NQU5EX0xDRF9MRVZFTCwgd2RhdGEsIDEsICZyZGF0YSwgMSk7CisJcmVzdWx0ID0gZWNfdHJhbnNhY3Rpb24oTVNJX0VDX0NPTU1BTkRfTENEX0xFVkVMLCB3ZGF0YSwgMSwgJnJkYXRhLCAxLCAxKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJcmV0dXJuIHJlc3VsdDsKIAogCXdkYXRhWzBdID0gMHg4NDsKIAl3ZGF0YVsxXSA9IChyZGF0YSAmIDB4RjcpIHwgKGVuYWJsZSA/IDggOiAwKTsKIAotCXJldHVybiBlY190cmFuc2FjdGlvbihNU0lfRUNfQ09NTUFORF9MQ0RfTEVWRUwsIHdkYXRhLCAyLCBOVUxMLCAwKTsKKwlyZXR1cm4gZWNfdHJhbnNhY3Rpb24oTVNJX0VDX0NPTU1BTkRfTENEX0xFVkVMLCB3ZGF0YSwgMiwgTlVMTCwgMCwgMSk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3dpcmVsZXNzX3N0YXRlKGludCAqd2xhbiwgaW50ICpibHVldG9vdGgpCkBAIC0xMzQsNyArMTM0LDcgQEAKIAl1OCB3ZGF0YSA9IDAsIHJkYXRhOwogCWludCByZXN1bHQ7CiAKLQlyZXN1bHQgPSBlY190cmFuc2FjdGlvbihNU0lfRUNfQ09NTUFORF9XSVJFTEVTUywgJndkYXRhLCAxLCAmcmRhdGEsIDEpOworCXJlc3VsdCA9IGVjX3RyYW5zYWN0aW9uKE1TSV9FQ19DT01NQU5EX1dJUkVMRVNTLCAmd2RhdGEsIDEsICZyZGF0YSwgMSwgMSk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCXJldHVybiAtMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3BoYW50b20uYyBiL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwOGI3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgWW91IG5lZWQgYW4gdXNlcnNwYWNlIGxpYnJhcnkgdG8gY29vcGVyYXRlIHdpdGggdGhpcyBkcml2ZXIuIEl0IChhbmQgb3RoZXIKKyAqICBpbmZvKSBtYXkgYmUgb2J0YWluZWQgaGVyZToKKyAqICBodHRwOi8vd3d3LmZpLm11bmkuY3ovfnhzbGFieS9waGFudG9tLmh0bWwKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3BoYW50b20uaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBQSEFOVE9NX1ZFUlNJT04JCSJuMC45LjUiCisKKyNkZWZpbmUgUEhBTlRPTV9NQVhfTUlOT1JTCTgKKworI2RlZmluZSBQSE5fSVJRQ1RMCQkweDRjICAgIC8qIGlycSBjb250cm9sIGluIGNhZGRyIHNwYWNlICovCisKKyNkZWZpbmUgUEhCX1JVTk5JTkcJCTEKKworc3RhdGljIHN0cnVjdCBjbGFzcyAqcGhhbnRvbV9jbGFzczsKK3N0YXRpYyBpbnQgcGhhbnRvbV9tYWpvcjsKKworc3RydWN0IHBoYW50b21fZGV2aWNlIHsKKwl1bnNpZ25lZCBpbnQgb3BlbmVkOworCXZvaWQgX19pb21lbSAqY2FkZHI7CisJdTMyIF9faW9tZW0gKmlhZGRyOworCXUzMiBfX2lvbWVtICpvYWRkcjsKKwl1bnNpZ25lZCBsb25nIHN0YXR1czsKKwlhdG9taWNfdCBjb3VudGVyOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlzdHJ1Y3QgY2RldiBjZGV2OworCisJc3RydWN0IG11dGV4IG9wZW5fbG9jazsKKwlzcGlubG9ja190IGlvY3RsX2xvY2s7Cit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBwaGFudG9tX2RldmljZXNbUEhBTlRPTV9NQVhfTUlOT1JTXTsKKworc3RhdGljIGludCBwaGFudG9tX3N0YXR1cyhzdHJ1Y3QgcGhhbnRvbV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBuZXdzdGF0KQoreworCXByX2RlYnVnKCJwaGFudG9tX3N0YXR1cyAlbHggJWx4XG4iLCBkZXYtPnN0YXR1cywgbmV3c3RhdCk7CisKKwlpZiAoIShkZXYtPnN0YXR1cyAmIFBIQl9SVU5OSU5HKSAmJiAobmV3c3RhdCAmIFBIQl9SVU5OSU5HKSkgeworCQlhdG9taWNfc2V0KCZkZXYtPmNvdW50ZXIsIDApOworCQlpb3dyaXRlMzIoUEhOX0NUTF9JUlEsIGRldi0+aWFkZHIgKyBQSE5fQ09OVFJPTCk7CisJCWlvd3JpdGUzMigweDQzLCBkZXYtPmNhZGRyICsgUEhOX0lSUUNUTCk7CisJCWlvcmVhZDMyKGRldi0+Y2FkZHIgKyBQSE5fSVJRQ1RMKTsgLyogUENJIHBvc3RpbmcgKi8KKwl9IGVsc2UgaWYgKChkZXYtPnN0YXR1cyAmIFBIQl9SVU5OSU5HKSAmJiAhKG5ld3N0YXQgJiBQSEJfUlVOTklORykpIHsKKwkJaW93cml0ZTMyKDAsIGRldi0+Y2FkZHIgKyBQSE5fSVJRQ1RMKTsKKwkJaW9yZWFkMzIoZGV2LT5jYWRkciArIFBITl9JUlFDVEwpOyAvKiBQQ0kgcG9zdGluZyAqLworCX0KKworCWRldi0+c3RhdHVzID0gbmV3c3RhdDsKKworCXJldHVybiAwOworfQorCisvKgorICogRmlsZSBvcHMKKyAqLworCitzdGF0aWMgbG9uZyBwaGFudG9tX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgcGhhbnRvbV9kZXZpY2UgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGhtX3JlZ3MgcnM7CisJc3RydWN0IHBobV9yZWcgcjsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChfSU9DX1RZUEUoY21kKSAhPSBQSF9JT0NfTUFHSUMgfHwKKwkJCV9JT0NfTlIoY21kKSA+IFBIX0lPQ19NQVhOUikKKwkJcmV0dXJuIC1FTk9UVFk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUEhOX1NFVF9SRUc6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmciwgYXJncCwgc2l6ZW9mKHIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChyLnJlZyA+IDcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzcGluX2xvY2soJmRldi0+aW9jdGxfbG9jayk7CisJCWlmIChyLnJlZyA9PSBQSE5fQ09OVFJPTCAmJiAoci52YWx1ZSAmIFBITl9DVExfSVJRKSAmJgorCQkJCXBoYW50b21fc3RhdHVzKGRldiwgZGV2LT5zdGF0dXMgfCBQSEJfUlVOTklORykpeworCQkJc3Bpbl91bmxvY2soJmRldi0+aW9jdGxfbG9jayk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCXByX2RlYnVnKCJwaGFudG9tOiB3cml0aW5nICV4IHRvICV1XG4iLCByLnZhbHVlLCByLnJlZyk7CisJCWlvd3JpdGUzMihyLnZhbHVlLCBkZXYtPmlhZGRyICsgci5yZWcpOworCQlpb3JlYWQzMihkZXYtPmlhZGRyKTsgLyogUENJIHBvc3RpbmcgKi8KKworCQlpZiAoci5yZWcgPT0gUEhOX0NPTlRST0wgJiYgIShyLnZhbHVlICYgUEhOX0NUTF9JUlEpKQorCQkJcGhhbnRvbV9zdGF0dXMoZGV2LCBkZXYtPnN0YXR1cyAmIH5QSEJfUlVOTklORyk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmlvY3RsX2xvY2spOworCQlicmVhazsKKwljYXNlIFBITl9TRVRfUkVHUzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZycywgYXJncCwgc2l6ZW9mKHJzKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlwcl9kZWJ1ZygicGhhbnRvbTogU1JTICV1IHJlZ3MgJXhcbiIsIHJzLmNvdW50LCBycy5tYXNrKTsKKwkJc3Bpbl9sb2NrKCZkZXYtPmlvY3RsX2xvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgbWluKHJzLmNvdW50LCA4VSk7IGkrKykKKwkJCWlmICgoMSA8PCBpKSAmIHJzLm1hc2spCisJCQkJaW93cml0ZTMyKHJzLnZhbHVlc1tpXSwgZGV2LT5vYWRkciArIGkpOworCQlpb3JlYWQzMihkZXYtPmlhZGRyKTsgLyogUENJIHBvc3RpbmcgKi8KKwkJc3Bpbl91bmxvY2soJmRldi0+aW9jdGxfbG9jayk7CisJCWJyZWFrOworCWNhc2UgUEhOX0dFVF9SRUc6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmciwgYXJncCwgc2l6ZW9mKHIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChyLnJlZyA+IDcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyLnZhbHVlID0gaW9yZWFkMzIoZGV2LT5pYWRkciArIHIucmVnKTsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZyLCBzaXplb2YocikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgUEhOX0dFVF9SRUdTOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnJzLCBhcmdwLCBzaXplb2YocnMpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXByX2RlYnVnKCJwaGFudG9tOiBHUlMgJXUgcmVncyAleFxuIiwgcnMuY291bnQsIHJzLm1hc2spOworCQlzcGluX2xvY2soJmRldi0+aW9jdGxfbG9jayk7CisJCWZvciAoaSA9IDA7IGkgPCBtaW4ocnMuY291bnQsIDhVKTsgaSsrKQorCQkJaWYgKCgxIDw8IGkpICYgcnMubWFzaykKKwkJCQlycy52YWx1ZXNbaV0gPSBpb3JlYWQzMihkZXYtPmlhZGRyICsgaSk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmlvY3RsX2xvY2spOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnJzLCBzaXplb2YocnMpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaGFudG9tX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHBoYW50b21fZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2RldiwKKwkJCXN0cnVjdCBwaGFudG9tX2RldmljZSwgY2Rldik7CisKKwlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+b3Blbl9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChkZXYtPm9wZW5lZCkgeworCQltdXRleF91bmxvY2soJmRldi0+b3Blbl9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OworCisJZGV2LT5vcGVuZWQrKzsKKwltdXRleF91bmxvY2soJmRldi0+b3Blbl9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBoYW50b21fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgcGhhbnRvbV9kZXZpY2UgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCW11dGV4X2xvY2soJmRldi0+b3Blbl9sb2NrKTsKKworCWRldi0+b3BlbmVkID0gMDsKKwlwaGFudG9tX3N0YXR1cyhkZXYsIGRldi0+c3RhdHVzICYgflBIQl9SVU5OSU5HKTsKKworCW11dGV4X3VubG9jaygmZGV2LT5vcGVuX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGhhbnRvbV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBwaGFudG9tX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKworCXByX2RlYnVnKCJwaGFudG9tX3BvbGw6ICVkXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5jb3VudGVyKSk7CisJcG9sbF93YWl0KGZpbGUsICZkZXYtPndhaXQsIHdhaXQpOworCWlmIChhdG9taWNfcmVhZCgmZGV2LT5jb3VudGVyKSkgeworCQltYXNrID0gUE9MTElOIHwgUE9MTFJETk9STTsKKwkJYXRvbWljX2RlYygmZGV2LT5jb3VudGVyKTsKKwl9IGVsc2UgaWYgKChkZXYtPnN0YXR1cyAmIFBIQl9SVU5OSU5HKSA9PSAwKQorCQltYXNrID0gUE9MTElOIHwgUE9MTFJETk9STSB8IFBPTExFUlI7CisJcHJfZGVidWcoInBoYW50b21fcG9sbCBlbmQ6ICV4LyVkXG4iLCBtYXNrLCBhdG9taWNfcmVhZCgmZGV2LT5jb3VudGVyKSk7CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGhhbnRvbV9maWxlX29wcyA9IHsKKwkub3BlbiA9IHBoYW50b21fb3BlbiwKKwkucmVsZWFzZSA9IHBoYW50b21fcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBwaGFudG9tX2lvY3RsLAorCS5wb2xsID0gcGhhbnRvbV9wb2xsLAorfTsKKworc3RhdGljIGlycXJldHVybl90IHBoYW50b21faXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBoYW50b21fZGV2aWNlICpkZXYgPSBkYXRhOworCisJaWYgKCEoaW9yZWFkMzIoZGV2LT5pYWRkciArIFBITl9DT05UUk9MKSAmIFBITl9DVExfSVJRKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaW93cml0ZTMyKDAsIGRldi0+aWFkZHIpOworCWlvd3JpdGUzMigweGMwLCBkZXYtPmlhZGRyKTsKKwlpb3JlYWQzMihkZXYtPmlhZGRyKTsgLyogUENJIHBvc3RpbmcgKi8KKworCWF0b21pY19pbmMoJmRldi0+Y291bnRlcik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogSW5pdCBhbmQgZGVpbml0IGRyaXZlcgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IHBoYW50b21fZ2V0X2ZyZWUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQSEFOVE9NX01BWF9NSU5PUlM7IGkrKykKKwkJaWYgKHBoYW50b21fZGV2aWNlc1tpXSA9PSAwKQorCQkJYnJlYWs7CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcGhhbnRvbV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQoreworCXN0cnVjdCBwaGFudG9tX2RldmljZSAqcGh0OworCXVuc2lnbmVkIGludCBtaW5vcjsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnI7CisKKwltaW5vciA9IHBoYW50b21fZ2V0X2ZyZWUoKTsKKwlpZiAobWlub3IgPT0gUEhBTlRPTV9NQVhfTUlOT1JTKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInRvbyBtYW55IGRldmljZXMgZm91bmQhXG4iKTsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBlcnJfZGlzOworCX0KKworCXBoYW50b21fZGV2aWNlc1ttaW5vcl0gPSAxOworCisJcmV0dmFsID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCAicGhhbnRvbSIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX251bGw7CisKKwlyZXR2YWwgPSAtRU5PTUVNOworCXBodCA9IGt6YWxsb2Moc2l6ZW9mKCpwaHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAocGh0ID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3JlZzsKKwl9CisKKwlwaHQtPmNhZGRyID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOworCWlmIChwaHQtPmNhZGRyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVtYXAgY29uZiBzcGFjZVxuIik7CisJCWdvdG8gZXJyX2ZyOworCX0KKwlwaHQtPmlhZGRyID0gcGNpX2lvbWFwKHBkZXYsIDIsIDApOworCWlmIChwaHQtPmlhZGRyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVtYXAgaW5wdXQgc3BhY2VcbiIpOworCQlnb3RvIGVycl91bm1jOworCX0KKwlwaHQtPm9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIDMsIDApOworCWlmIChwaHQtPm9hZGRyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVtYXAgb3V0cHV0IHNwYWNlXG4iKTsKKwkJZ290byBlcnJfdW5taTsKKwl9CisKKwltdXRleF9pbml0KCZwaHQtPm9wZW5fbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBodC0+aW9jdGxfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGh0LT53YWl0KTsKKwljZGV2X2luaXQoJnBodC0+Y2RldiwgJnBoYW50b21fZmlsZV9vcHMpOworCXBodC0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOworCisJaW93cml0ZTMyKDAsIHBodC0+Y2FkZHIgKyBQSE5fSVJRQ1RMKTsKKwlpb3JlYWQzMihwaHQtPmNhZGRyICsgUEhOX0lSUUNUTCk7IC8qIFBDSSBwb3N0aW5nICovCisJcmV0dmFsID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBwaGFudG9tX2lzciwKKwkJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgInBoYW50b20iLCBwaHQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZXN0YWJsaXNoIElTUlxuIik7CisJCWdvdG8gZXJyX3VubW87CisJfQorCisJcmV0dmFsID0gY2Rldl9hZGQoJnBodC0+Y2RldiwgTUtERVYocGhhbnRvbV9tYWpvciwgbWlub3IpLCAxKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNoYXJkZXYgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2lycTsKKwl9CisKKwlpZiAoSVNfRVJSKGRldmljZV9jcmVhdGUocGhhbnRvbV9jbGFzcywgJnBkZXYtPmRldiwgTUtERVYocGhhbnRvbV9tYWpvciwKKwkJCW1pbm9yKSwgInBoYW50b20ldSIsIG1pbm9yKSkpCisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGNyZWF0ZSBkZXZpY2VcbiIpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHBodCk7CisKKwlyZXR1cm4gMDsKK2Vycl9pcnE6CisJZnJlZV9pcnEocGRldi0+aXJxLCBwaHQpOworZXJyX3VubW86CisJcGNpX2lvdW5tYXAocGRldiwgcGh0LT5vYWRkcik7CitlcnJfdW5taToKKwlwY2lfaW91bm1hcChwZGV2LCBwaHQtPmlhZGRyKTsKK2Vycl91bm1jOgorCXBjaV9pb3VubWFwKHBkZXYsIHBodC0+Y2FkZHIpOworZXJyX2ZyOgorCWtmcmVlKHBodCk7CitlcnJfcmVnOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitlcnJfbnVsbDoKKwlwaGFudG9tX2RldmljZXNbbWlub3JdID0gMDsKK2Vycl9kaXM6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZXJyOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBwaGFudG9tX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgcGhhbnRvbV9kZXZpY2UgKnBodCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBNSU5PUihwaHQtPmNkZXYuZGV2KTsKKworCWRldmljZV9kZXN0cm95KHBoYW50b21fY2xhc3MsIE1LREVWKHBoYW50b21fbWFqb3IsIG1pbm9yKSk7CisKKwljZGV2X2RlbCgmcGh0LT5jZGV2KTsKKworCWlvd3JpdGUzMigwLCBwaHQtPmNhZGRyICsgUEhOX0lSUUNUTCk7CisJaW9yZWFkMzIocGh0LT5jYWRkciArIFBITl9JUlFDVEwpOyAvKiBQQ0kgcG9zdGluZyAqLworCWZyZWVfaXJxKHBkZXYtPmlycSwgcGh0KTsKKworCXBjaV9pb3VubWFwKHBkZXYsIHBodC0+b2FkZHIpOworCXBjaV9pb3VubWFwKHBkZXYsIHBodC0+aWFkZHIpOworCXBjaV9pb3VubWFwKHBkZXYsIHBodC0+Y2FkZHIpOworCisJa2ZyZWUocGh0KTsKKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisKKwlwaGFudG9tX2RldmljZXNbbWlub3JdID0gMDsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwaGFudG9tX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcGhhbnRvbV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlvd3JpdGUzMigwLCBkZXYtPmNhZGRyICsgUEhOX0lSUUNUTCk7CisJaW9yZWFkMzIoZGV2LT5jYWRkciArIFBITl9JUlFDVEwpOyAvKiBQQ0kgcG9zdGluZyAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGhhbnRvbV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBoYW50b21fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlpb3dyaXRlMzIoMCwgZGV2LT5jYWRkciArIFBITl9JUlFDVEwpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBwaGFudG9tX3N1c3BlbmQJTlVMTAorI2RlZmluZSBwaGFudG9tX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBoYW50b21fcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF85MDUwKSwKKwkJLmNsYXNzID0gUENJX0NMQVNTX0JSSURHRV9PVEhFUiA8PCA4LCAuY2xhc3NfbWFzayA9IDB4ZmZmZjAwIH0sCisJeyAwLCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBoYW50b21fcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwaGFudG9tX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAicGhhbnRvbSIsCisJLmlkX3RhYmxlID0gcGhhbnRvbV9wY2lfdGJsLAorCS5wcm9iZSA9IHBoYW50b21fcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHBoYW50b21fcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IHBoYW50b21fc3VzcGVuZCwKKwkucmVzdW1lID0gcGhhbnRvbV9yZXN1bWUKK307CisKK3N0YXRpYyBzc2l6ZV90IHBoYW50b21fc2hvd192ZXJzaW9uKHN0cnVjdCBjbGFzcyAqY2xzLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCBQSEFOVE9NX1ZFUlNJT04gIlxuIik7Cit9CisKK3N0YXRpYyBDTEFTU19BVFRSKHZlcnNpb24sIDA0NDQsIHBoYW50b21fc2hvd192ZXJzaW9uLCBOVUxMKTsKKworc3RhdGljIGludCBfX2luaXQgcGhhbnRvbV9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlkZXZfdCBkZXY7CisKKwlwaGFudG9tX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAicGhhbnRvbSIpOworCWlmIChJU19FUlIocGhhbnRvbV9jbGFzcykpIHsKKwkJcmV0dmFsID0gUFRSX0VSUihwaGFudG9tX2NsYXNzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwaGFudG9tOiBjYW4ndCByZWdpc3RlciBwaGFudG9tIGNsYXNzXG4iKTsKKwkJZ290byBlcnI7CisJfQorCXJldHZhbCA9IGNsYXNzX2NyZWF0ZV9maWxlKHBoYW50b21fY2xhc3MsICZjbGFzc19hdHRyX3ZlcnNpb24pOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwaGFudG9tOiBjYW4ndCBjcmVhdGUgc3lzZnMgdmVyc2lvbiBmaWxlXG4iKTsKKwkJZ290byBlcnJfY2xhc3M7CisJfQorCisJcmV0dmFsID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmZGV2LCAwLCBQSEFOVE9NX01BWF9NSU5PUlMsICJwaGFudG9tIik7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9FUlIgInBoYW50b206IGNhbid0IHJlZ2lzdGVyIGNoYXJhY3RlciBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9hdHRyOworCX0KKwlwaGFudG9tX21ham9yID0gTUFKT1IoZGV2KTsKKworCXJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnBoYW50b21fcGNpX2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9FUlIgInBoYW50b206IGNhbid0IHJlZ2lzdGVyIHBjaSBkcml2ZXJcbiIpOworCQlnb3RvIGVycl91bmNocjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJQaGFudG9tIExpbnV4IERyaXZlciwgdmVyc2lvbiAiIFBIQU5UT01fVkVSU0lPTiAiLCAiCisJCQkiaW5pdCBPS1xuIik7CisKKwlyZXR1cm4gMDsKK2Vycl91bmNocjoKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBQSEFOVE9NX01BWF9NSU5PUlMpOworZXJyX2F0dHI6CisJY2xhc3NfcmVtb3ZlX2ZpbGUocGhhbnRvbV9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbik7CitlcnJfY2xhc3M6CisJY2xhc3NfZGVzdHJveShwaGFudG9tX2NsYXNzKTsKK2VycjoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGhhbnRvbV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwaGFudG9tX3BjaV9kcml2ZXIpOworCisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKHBoYW50b21fbWFqb3IsIDApLCBQSEFOVE9NX01BWF9NSU5PUlMpOworCisJY2xhc3NfcmVtb3ZlX2ZpbGUocGhhbnRvbV9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbik7CisJY2xhc3NfZGVzdHJveShwaGFudG9tX2NsYXNzKTsKKworCXByX2RlYnVnKCJwaGFudG9tOiBtb2R1bGUgc3VjY2Vzc2Z1bGx5IHJlbW92ZWRcbiIpOworfQorCittb2R1bGVfaW5pdChwaGFudG9tX2luaXQpOworbW9kdWxlX2V4aXQocGhhbnRvbV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2Vuc2FibGUgUGhhbnRvbSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFBIQU5UT01fVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc29ueS1sYXB0b3AuYyBiL2RyaXZlcnMvbWlzYy9zb255LWxhcHRvcC5jCmluZGV4IGMxNWMxZjYuLjhlZTAzMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zb255LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvbWlzYy9zb255LWxhcHRvcC5jCkBAIC02Myw3ICs2Myw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zb255cGkuaD4KICNpbmNsdWRlIDxsaW51eC9zb255LWxhcHRvcC5oPgotI2lmZGVmIENPTkZJR19TT05ZX0xBUFRPUF9PTEQKKyNpZmRlZiBDT05GSUdfU09OWVBJX0NPTVBBVAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjZW5kaWYKQEAgLTExNCw3ICsxMTQsNyBAQAogCQkgInNldCB0aGlzIHRvIDEgdG8gZW5hYmxlIE1vdGlvbiBFeWUgY2FtZXJhIGNvbnRyb2xzICIKIAkJICIob25seSB1c2UgaXQgaWYgeW91IGhhdmUgYSBDMVZFIG9yIEMxVk4gbW9kZWwpIik7CiAKLSNpZmRlZiBDT05GSUdfU09OWV9MQVBUT1BfT0xECisjaWZkZWYgQ09ORklHX1NPTllQSV9DT01QQVQKIHN0YXRpYyBpbnQgbWlub3IgPSAtMTsKIG1vZHVsZV9wYXJhbShtaW5vciwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWlub3IsCkBAIC0xNTA0LDcgKzE1MDQsNyBAQAogfTsKIAogLyoqKioqKioqIFNPTllQSSBjb21wYXRpYmlsaXR5ICoqKioqKioqKiovCi0jaWZkZWYgQ09ORklHX1NPTllfTEFQVE9QX09MRAorI2lmZGVmIENPTkZJR19TT05ZUElfQ09NUEFUCiAKIC8qIGJhdHRlcnkgLyBicmlnaHRuZXNzIC8gdGVtcGVyYXR1cmUgIGFkZHJlc3NlcyAqLwogI2RlZmluZSBTT05ZUElfQkFUX0ZMQUdTCTB4ODEKQEAgLTE3OTgsNyArMTc5OCw3IEBACiBzdGF0aWMgaW50IHNvbnlwaV9jb21wYXRfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgdm9pZCBzb255cGlfY29tcGF0X2V4aXQodm9pZCkgeyB9CiBzdGF0aWMgdm9pZCBzb255cGlfY29tcGF0X3JlcG9ydF9ldmVudCh1OCBldmVudCkgeyB9Ci0jZW5kaWYgLyogQ09ORklHX1NPTllfTEFQVE9QX09MRCAqLworI2VuZGlmIC8qIENPTkZJR19TT05ZUElfQ09NUEFUICovCiAKIC8qCiAgKiBBQ1BJIGNhbGxiYWNrcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3RoaW5rcGFkX2FjcGkuYyBiL2RyaXZlcnMvbWlzYy90aGlua3BhZF9hY3BpLmMKaW5kZXggNmMzNmE1NS4uOTVjMGI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL21pc2MvdGhpbmtwYWRfYWNwaS5jCkBAIC03NDAsNyArNzQwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2hvdGtleV9lbmFibGUgPQotCV9fQVRUUihlbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCV9fQVRUUihob3RrZXlfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywKIAkJaG90a2V5X2VuYWJsZV9zaG93LCBob3RrZXlfZW5hYmxlX3N0b3JlKTsKIAogLyogc3lzZnMgaG90a2V5IG1hc2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC03NzUsNyArNzc1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2hvdGtleV9tYXNrID0KLQlfX0FUVFIobWFzaywgU19JV1VTUiB8IFNfSVJVR08sCisJX19BVFRSKGhvdGtleV9tYXNrLCBTX0lXVVNSIHwgU19JUlVHTywKIAkJaG90a2V5X21hc2tfc2hvdywgaG90a2V5X21hc2tfc3RvcmUpOwogCiAvKiBzeXNmcyBob3RrZXkgYmlvc19lbmFibGVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTc4Nyw3ICs3ODcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfaG90a2V5X2Jpb3NfZW5hYmxlZCA9Ci0JX19BVFRSKGJpb3NfZW5hYmxlZCwgU19JUlVHTywgaG90a2V5X2Jpb3NfZW5hYmxlZF9zaG93LCBOVUxMKTsKKwlfX0FUVFIoaG90a2V5X2Jpb3NfZW5hYmxlZCwgU19JUlVHTywgaG90a2V5X2Jpb3NfZW5hYmxlZF9zaG93LCBOVUxMKTsKIAogLyogc3lzZnMgaG90a2V5IGJpb3NfbWFzayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgc3NpemVfdCBob3RrZXlfYmlvc19tYXNrX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtNzk4LDcgKzc5OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9ob3RrZXlfYmlvc19tYXNrID0KLQlfX0FUVFIoYmlvc19tYXNrLCBTX0lSVUdPLCBob3RrZXlfYmlvc19tYXNrX3Nob3csIE5VTEwpOworCV9fQVRUUihob3RrZXlfYmlvc19tYXNrLCBTX0lSVUdPLCBob3RrZXlfYmlvc19tYXNrX3Nob3csIE5VTEwpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtODI0LDggKzgyNCw3IEBACiAJCXN0cl9zdXBwb3J0ZWQodHBfZmVhdHVyZXMuaG90a2V5KSk7CiAKIAlpZiAodHBfZmVhdHVyZXMuaG90a2V5KSB7Ci0JCWhvdGtleV9kZXZfYXR0cmlidXRlcyA9IGNyZWF0ZV9hdHRyX3NldCg0LAotCQkJCQkJVFBBQ1BJX0hPVEtFWV9TWVNGU19HUk9VUCk7CisJCWhvdGtleV9kZXZfYXR0cmlidXRlcyA9IGNyZWF0ZV9hdHRyX3NldCg0LCBOVUxMKTsKIAkJaWYgKCFob3RrZXlfZGV2X2F0dHJpYnV0ZXMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJcmVzID0gYWRkX3RvX2F0dHJfc2V0KGhvdGtleV9kZXZfYXR0cmlidXRlcywKQEAgLTEwNTAsNyArMTA0OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9ibHVldG9vdGhfZW5hYmxlID0KLQlfX0FUVFIoZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywKKwlfX0FUVFIoYmx1ZXRvb3RoX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCiAJCWJsdWV0b290aF9lbmFibGVfc2hvdywgYmx1ZXRvb3RoX2VuYWJsZV9zdG9yZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTA2MSw3ICsxMDYwLDYgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGJsdWV0b290aF9hdHRyX2dyb3VwID0gewotCS5uYW1lID0gVFBBQ1BJX0JMVUVUSF9TWVNGU19HUk9VUCwKIAkuYXR0cnMgPSBibHVldG9vdGhfYXR0cmlidXRlcywKIH07CiAKQEAgLTEyMTUsNyArMTIxMyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl93YW5fZW5hYmxlID0KLQlfX0FUVFIoZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywKKwlfX0FUVFIod3dhbl9lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQl3YW5fZW5hYmxlX3Nob3csIHdhbl9lbmFibGVfc3RvcmUpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTEyMjYsNyArMTIyNCw2IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB3YW5fYXR0cl9ncm91cCA9IHsKLQkubmFtZSA9IFRQQUNQSV9XQU5fU1lTRlNfR1JPVVAsCiAJLmF0dHJzID0gd2FuX2F0dHJpYnV0ZXMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvdGhpbmtwYWRfYWNwaS5oIGIvZHJpdmVycy9taXNjL3RoaW5rcGFkX2FjcGkuaAppbmRleCA0NDAxNDVhLi43MmQ2MmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvdGhpbmtwYWRfYWNwaS5oCisrKyBiL2RyaXZlcnMvbWlzYy90aGlua3BhZF9hY3BpLmgKQEAgLTI3OCw4ICsyNzgsNiBAQAogICogQmx1ZXRvb3RoIHN1YmRyaXZlcgogICovCiAKLSNkZWZpbmUgVFBBQ1BJX0JMVUVUSF9TWVNGU19HUk9VUCAiYmx1ZXRvb3RoIgotCiBlbnVtIHsKIAkvKiBBQ1BJIEdCREMvU0JEQyBiaXRzICovCiAJVFBfQUNQSV9CTFVFVE9PVEhfSFdQUkVTRU5UCT0gMHgwMSwJLyogQmx1ZXRvb3RoIGh3IGF2YWlsYWJsZSAqLwpAQCAtNDE2LDggKzQxNCw2IEBACiAgKiBIb3RrZXkgc3ViZHJpdmVyCiAgKi8KIAotI2RlZmluZSBUUEFDUElfSE9US0VZX1NZU0ZTX0dST1VQICJob3RrZXkiCi0KIHN0YXRpYyBpbnQgaG90a2V5X29yaWdfc3RhdHVzOwogc3RhdGljIGludCBob3RrZXlfb3JpZ19tYXNrOwogCkBAIC01NTMsOCArNTQ5LDYgQEAKICAqIFdhbiBzdWJkcml2ZXIKICAqLwogCi0jZGVmaW5lIFRQQUNQSV9XQU5fU1lTRlNfR1JPVVAgInd3YW4iCi0KIGVudW0gewogCS8qIEFDUEkgR1dBTi9TV0FOIGJpdHMgKi8KIAlUUF9BQ1BJX1dBTkNBUkRfSFdQUkVTRU5UCT0gMHgwMSwJLyogV2FuIGh3IGF2YWlsYWJsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3RpZm1fN3h4MS5jIGIvZHJpdmVycy9taXNjL3RpZm1fN3h4MS5jCmluZGV4IDFiYTZjMDguLjJkMWIzZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy90aWZtXzd4eDEuYworKysgYi9kcml2ZXJzL21pc2MvdGlmbV83eHgxLmMKQEAgLTEwNSw3ICsxMDUsOCBAQAogCSAgICA9PSBUSUZNX1RZUEVfWEQpCiAJCW1zbGVlcCg0MCk7CiAKLQl3cml0ZWwoKHNfc3RhdGUgJiA3KSB8IDB4MGMwMCwgc29ja19hZGRyICsgU09DS19DT05UUk9MKTsKKwl3cml0ZWwoKHNfc3RhdGUgJiBUSUZNX0NUUkxfUE9XRVJfTUFTSykgfCAweDBjMDAsCisJICAgICAgIHNvY2tfYWRkciArIFNPQ0tfQ09OVFJPTCk7CiAJLyogd2FpdCBmb3IgcG93ZXIgdG8gc3RhYmlsaXplICovCiAJbXNsZWVwKDIwKTsKIAlmb3IgKGNudCA9IDE2OyBjbnQgPD0gMjU2OyBjbnQgPDw9IDEpIHsKQEAgLTEyMiw2ICsxMjMsMTIgQEAKIAlyZXR1cm4gKHJlYWRsKHNvY2tfYWRkciArIFNPQ0tfUFJFU0VOVF9TVEFURSkgPj4gNCkgJiA3OwogfQogCitpbmxpbmUgc3RhdGljIHZvaWQgdGlmbV83eHgxX3NvY2tfcG93ZXJfb2ZmKGNoYXIgX19pb21lbSAqc29ja19hZGRyKQoreworCXdyaXRlbCgoflRJRk1fQ1RSTF9QT1dFUl9NQVNLKSAmIHJlYWRsKHNvY2tfYWRkciArIFNPQ0tfQ09OVFJPTCksCisJICAgICAgIHNvY2tfYWRkciArIFNPQ0tfQ09OVFJPTCk7Cit9CisKIGlubGluZSBzdGF0aWMgY2hhciBfX2lvbWVtICoKIHRpZm1fN3h4MV9zb2NrX2FkZHIoY2hhciBfX2lvbWVtICpiYXNlX2FkZHIsIHVuc2lnbmVkIGludCBzb2NrX251bSkKIHsKQEAgLTEzMyw2ICsxNDAsNyBAQAogCXN0cnVjdCB0aWZtX2FkYXB0ZXIgKmZtID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0aWZtX2FkYXB0ZXIsCiAJCQkJCSAgICAgICBtZWRpYV9zd2l0Y2hlcik7CiAJc3RydWN0IHRpZm1fZGV2ICpzb2NrOworCWNoYXIgX19pb21lbSAqc29ja19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciBtZWRpYV9pZDsKIAl1bnNpZ25lZCBpbnQgc29ja2V0X2NoYW5nZV9zZXQsIGNudDsKQEAgLTE1OCwxMSArMTY2LDEyIEBACiAJCQkgICAgICAgIiVzIDogZGVtYW5kIHJlbW92aW5nIGNhcmQgZnJvbSBzb2NrZXQgJXU6JXVcbiIsCiAJCQkgICAgICAgZm0tPmNkZXYuY2xhc3NfaWQsIGZtLT5pZCwgY250KTsKIAkJCWZtLT5zb2NrZXRzW2NudF0gPSBOVUxMOworCQkJc29ja19hZGRyID0gc29jay0+YWRkcjsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZtLT5sb2NrLCBmbGFncyk7CiAJCQlkZXZpY2VfdW5yZWdpc3Rlcigmc29jay0+ZGV2KTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZmbS0+bG9jaywgZmxhZ3MpOwotCQkJd3JpdGVsKDB4MGUwMCwgdGlmbV83eHgxX3NvY2tfYWRkcihmbS0+YWRkciwgY250KQotCQkJICAgICAgICsgU09DS19DT05UUk9MKTsKKwkJCXRpZm1fN3h4MV9zb2NrX3Bvd2VyX29mZihzb2NrX2FkZHIpOworCQkJd3JpdGVsKDB4MGUwMCwgc29ja19hZGRyICsgU09DS19DT05UUk9MKTsKIAkJfQogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZtLT5sb2NrLCBmbGFncyk7CkBAIC0yMDUsOCArMjE0LDE2IEBACiAKIHN0YXRpYyBpbnQgdGlmbV83eHgxX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogeworCXN0cnVjdCB0aWZtX2FkYXB0ZXIgKmZtID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaW50IGNudDsKKwogCWRldl9kYmcoJmRldi0+ZGV2LCAic3VzcGVuZGluZyBob3N0XG4iKTsKIAorCWZvciAoY250ID0gMDsgY250IDwgZm0tPm51bV9zb2NrZXRzOyBjbnQrKykgeworCQlpZiAoZm0tPnNvY2tldHNbY250XSkKKwkJCXRpZm1fN3h4MV9zb2NrX3Bvd2VyX29mZihmbS0+c29ja2V0c1tjbnRdLT5hZGRyKTsKKwl9CisKIAlwY2lfc2F2ZV9zdGF0ZShkZXYpOwogCXBjaV9lbmFibGVfd2FrZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBzdGF0ZSksIDApOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwpAQCAtMzI2LDcgKzM0Myw3IEBACiAJaWYgKCFmbS0+YWRkcikKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAKLQlyYyA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCB0aWZtXzd4eDFfaXNyLCBTQV9TSElSUSwgRFJJVkVSX05BTUUsIGZtKTsKKwlyYyA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCB0aWZtXzd4eDFfaXNyLCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUsIGZtKTsKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dF91bm1hcDsKIApAQCAtMzU3LDYgKzM3NCw3IEBACiBzdGF0aWMgdm9pZCB0aWZtXzd4eDFfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHRpZm1fYWRhcHRlciAqZm0gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgY250OwogCiAJZm0tPmVqZWN0ID0gdGlmbV83eHgxX2R1bW15X2VqZWN0OwogCXdyaXRlbChUSUZNX0lSUV9TRVRBTEwsIGZtLT5hZGRyICsgRk1fQ0xFQVJfSU5URVJSVVBUX0VOQUJMRSk7CkBAIC0zNjUsNiArMzgzLDkgQEAKIAogCXRpZm1fcmVtb3ZlX2FkYXB0ZXIoZm0pOwogCisJZm9yIChjbnQgPSAwOyBjbnQgPCBmbS0+bnVtX3NvY2tldHM7IGNudCsrKQorCQl0aWZtXzd4eDFfc29ja19wb3dlcl9vZmYodGlmbV83eHgxX3NvY2tfYWRkcihmbS0+YWRkciwgY250KSk7CisKIAlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlvdW5tYXAoZm0tPmFkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL0tjb25maWcKaW5kZXggNmM5NzQ5MS4uYzBiNDFlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvS2NvbmZpZworKysgYi9kcml2ZXJzL21tYy9LY29uZmlnCkBAIC0yLDEwICsyLDkgQEAKICMgTU1DIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uCiAjCiAKLW1lbnUgIk1NQy9TRCBDYXJkIHN1cHBvcnQiCi0KLWNvbmZpZyBNTUMKLQl0cmlzdGF0ZSAiTU1DIHN1cHBvcnQiCittZW51Y29uZmlnIE1NQworCXRyaXN0YXRlICJNTUMvU0QgY2FyZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gSEFTX0lPTUVNCiAJaGVscAogCSAgTU1DIGlzIHRoZSAibXVsdGktbWVkaWEgY2FyZCIgYnVzIHByb3RvY29sLgogCkBAIC0xOSwxMCArMTgsMTIgQEAKIAkgIFRoaXMgaXMgYW4gb3B0aW9uIGZvciB1c2UgYnkgZGV2ZWxvcGVyczsgbW9zdCBwZW9wbGUgc2hvdWxkCiAJICBzYXkgTiBoZXJlLiAgVGhpcyBlbmFibGVzIE1NQyBjb3JlIGFuZCBkcml2ZXIgZGVidWdnaW5nLgogCitpZiBNTUMKKwogc291cmNlICJkcml2ZXJzL21tYy9jb3JlL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9tbWMvY2FyZC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyIKIAotZW5kbWVudQorZW5kaWYgIyBNTUMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2NhcmQvS2NvbmZpZwppbmRleCAwMWE5ZmQzLi45MzIwYThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9LY29uZmlnCkBAIC0zLDExICszLDEwIEBACiAjCiAKIGNvbW1lbnQgIk1NQy9TRCBDYXJkIERyaXZlcnMiCi0JZGVwZW5kcyBNTUMKIAogY29uZmlnIE1NQ19CTE9DSwogCXRyaXN0YXRlICJNTUMgYmxvY2sgZGV2aWNlIGRyaXZlciIKLQlkZXBlbmRzIG9uIE1NQyAmJiBCTE9DSworCWRlcGVuZHMgb24gQkxPQ0sKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgTU1DIGJsb2NrIGRldmljZSBkcml2ZXIgc3VwcG9ydC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYyBiL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYwppbmRleCBkMjRhYjIzLi41NDBmZjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCkBAIC00NSw4ICs0NSw2IEBACiAgKi8KICNkZWZpbmUgTU1DX1NISUZUCTMKIAotc3RhdGljIGludCBtYWpvcjsKLQogLyoKICAqIFRoZXJlIGlzIG9uZSBtbWNfYmxrX2RhdGEgcGVyIHNsb3QuCiAgKi8KQEAgLTEzNywyMyArMTM1LDYgQEAKIAlzdHJ1Y3QgbW1jX2RhdGEJCWRhdGE7CiB9OwogCi1zdGF0aWMgaW50IG1tY19ibGtfcHJlcF9ycShzdHJ1Y3QgbW1jX3F1ZXVlICptcSwgc3RydWN0IHJlcXVlc3QgKnJlcSkKLXsKLQlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZCA9IG1xLT5kYXRhOwotCWludCBzdGF0ID0gQkxLUFJFUF9PSzsKLQotCS8qCi0JICogSWYgd2UgaGF2ZSBubyBkZXZpY2UsIHdlIGhhdmVuJ3QgZmluaXNoZWQgaW5pdGlhbGlzaW5nLgotCSAqLwotCWlmICghbWQgfHwgIW1xLT5jYXJkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGtpbGxpbmcgcmVxdWVzdCAtIG5vIGRldmljZS9ob3N0XG4iLAotCQkgICAgICAgcmVxLT5ycV9kaXNrLT5kaXNrX25hbWUpOwotCQlzdGF0ID0gQkxLUFJFUF9LSUxMOwotCX0KLQotCXJldHVybiBzdGF0OwotfQotCiBzdGF0aWMgdTMyIG1tY19zZF9udW1fd3JfYmxvY2tzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKIAlpbnQgZXJyOwpAQCAtNDYyLDExICs0NDMsMTAgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9wdXRkaXNrOwogCi0JbWQtPnF1ZXVlLnByZXBfZm4gPSBtbWNfYmxrX3ByZXBfcnE7CiAJbWQtPnF1ZXVlLmlzc3VlX2ZuID0gbW1jX2Jsa19pc3N1ZV9ycTsKIAltZC0+cXVldWUuZGF0YSA9IG1kOwogCi0JbWQtPmRpc2stPm1ham9yCT0gbWFqb3I7CisJbWQtPmRpc2stPm1ham9yCT0gTU1DX0JMT0NLX01BSk9SOwogCW1kLT5kaXNrLT5maXJzdF9taW5vciA9IGRldmlkeCA8PCBNTUNfU0hJRlQ7CiAJbWQtPmRpc2stPmZvcHMgPSAmbW1jX2Jkb3BzOwogCW1kLT5kaXNrLT5wcml2YXRlX2RhdGEgPSBtZDsKQEAgLTYzNCwxNCArNjE0LDkgQEAKIHsKIAlpbnQgcmVzID0gLUVOT01FTTsKIAotCXJlcyA9IHJlZ2lzdGVyX2Jsa2RldihtYWpvciwgIm1tYyIpOwotCWlmIChyZXMgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIE1NQyBtZWRpYTogJWRcbiIsCi0JCSAgICAgICBtYWpvciwgcmVzKTsKKwlyZXMgPSByZWdpc3Rlcl9ibGtkZXYoTU1DX0JMT0NLX01BSk9SLCAibW1jIik7CisJaWYgKHJlcykKIAkJZ290byBvdXQ7Ci0JfQotCWlmIChtYWpvciA9PSAwKQotCQltYWpvciA9IHJlczsKIAogCXJldHVybiBtbWNfcmVnaXN0ZXJfZHJpdmVyKCZtbWNfZHJpdmVyKTsKIApAQCAtNjUyLDcgKzYyNyw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbW1jX2Jsa19leGl0KHZvaWQpCiB7CiAJbW1jX3VucmVnaXN0ZXJfZHJpdmVyKCZtbWNfZHJpdmVyKTsKLQl1bnJlZ2lzdGVyX2Jsa2RldihtYWpvciwgIm1tYyIpOworCXVucmVnaXN0ZXJfYmxrZGV2KE1NQ19CTE9DS19NQUpPUiwgIm1tYyIpOwogfQogCiBtb2R1bGVfaW5pdChtbWNfYmxrX2luaXQpOwpAQCAtNjYxLDUgKzYzNiwzIEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk11bHRpbWVkaWEgQ2FyZCAoTU1DKSBibG9jayBkZXZpY2UgZHJpdmVyIik7CiAKLW1vZHVsZV9wYXJhbShtYWpvciwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobWFqb3IsICJzcGVjaWZ5IHRoZSBtYWpvciBkZXZpY2UgbnVtYmVyIGZvciBNTUMgYmxvY2sgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKaW5kZXggMmU3Nzk2My4uZGQ5N2JjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYwpAQCAtMjAsNDAgKzIwLDIxIEBACiAjZGVmaW5lIE1NQ19RVUVVRV9TVVNQRU5ERUQJKDEgPDwgMCkKIAogLyoKLSAqIFByZXBhcmUgYSBNTUMgcmVxdWVzdC4gIEVzc2VudGlhbGx5LCB0aGlzIG1lYW5zIHBhc3NpbmcgdGhlCi0gKiBwcmVwYXJhdGlvbiBvZmYgdG8gdGhlIG1lZGlhIGRyaXZlci4gIFRoZSBtZWRpYSBkcml2ZXIgd2lsbAotICogY3JlYXRlIGEgbW1jX2lvX3JlcXVlc3QgaW4gcmVxLT5zcGVjaWFsLgorICogUHJlcGFyZSBhIE1NQyByZXF1ZXN0LiBUaGlzIGp1c3QgZmlsdGVycyBvdXQgb2RkIHN0dWZmLgogICovCiBzdGF0aWMgaW50IG1tY19wcmVwX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7Ci0Jc3RydWN0IG1tY19xdWV1ZSAqbXEgPSBxLT5xdWV1ZWRhdGE7Ci0JaW50IHJldCA9IEJMS1BSRVBfS0lMTDsKLQotCWlmIChibGtfc3BlY2lhbF9yZXF1ZXN0KHJlcSkpIHsKLQkJLyoKLQkJICogU3BlY2lhbCBjb21tYW5kcyBhbHJlYWR5IGhhdmUgdGhlIGNvbW1hbmQKLQkJICogYmxvY2tzIGFscmVhZHkgc2V0dXAgaW4gcmVxLT5zcGVjaWFsLgotCQkgKi8KLQkJQlVHX09OKCFyZXEtPnNwZWNpYWwpOwotCi0JCXJldCA9IEJMS1BSRVBfT0s7Ci0JfSBlbHNlIGlmIChibGtfZnNfcmVxdWVzdChyZXEpIHx8IGJsa19wY19yZXF1ZXN0KHJlcSkpIHsKLQkJLyoKLQkJICogQmxvY2sgSS9PIHJlcXVlc3RzIG5lZWQgdHJhbnNsYXRpbmcgYWNjb3JkaW5nCi0JCSAqIHRvIHRoZSBwcm90b2NvbC4KLQkJICovCi0JCXJldCA9IG1xLT5wcmVwX2ZuKG1xLCByZXEpOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEV2ZXJ5dGhpbmcgZWxzZSBpcyBpbnZhbGlkLgotCQkgKi8KKwkvKgorCSAqIFdlIG9ubHkgbGlrZSBub3JtYWwgYmxvY2sgcmVxdWVzdHMuCisJICovCisJaWYgKCFibGtfZnNfcmVxdWVzdChyZXEpICYmICFibGtfcGNfcmVxdWVzdChyZXEpKSB7CiAJCWJsa19kdW1wX3JxX2ZsYWdzKHJlcSwgIk1NQyBiYWQgcmVxdWVzdCIpOworCQlyZXR1cm4gQkxLUFJFUF9LSUxMOwogCX0KIAotCWlmIChyZXQgPT0gQkxLUFJFUF9PSykKLQkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0RPTlRQUkVQOworCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9ET05UUFJFUDsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIEJMS1BSRVBfT0s7CiB9CiAKIHN0YXRpYyBpbnQgbW1jX3F1ZXVlX3RocmVhZCh2b2lkICpkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5oIGIvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5oCmluZGV4IGM5ZjEzOWUuLjE1OTBiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuaAorKysgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmgKQEAgLTEwLDIwICsxMCwxMiBAQAogCXN0cnVjdCBzZW1hcGhvcmUJdGhyZWFkX3NlbTsKIAl1bnNpZ25lZCBpbnQJCWZsYWdzOwogCXN0cnVjdCByZXF1ZXN0CQkqcmVxOwotCWludAkJCSgqcHJlcF9mbikoc3RydWN0IG1tY19xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIAlpbnQJCQkoKmlzc3VlX2ZuKShzdHJ1Y3QgbW1jX3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwogCXZvaWQJCQkqZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZQkqcXVldWU7CiAJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZzsKIH07CiAKLXN0cnVjdCBtbWNfaW9fcmVxdWVzdCB7Ci0Jc3RydWN0IHJlcXVlc3QJCSpycTsKLQlpbnQJCQludW07Ci0Jc3RydWN0IG1tY19jb21tYW5kCXNlbGNtZDsJCS8qIG1tY19xdWV1ZSBwcml2YXRlICovCi0Jc3RydWN0IG1tY19jb21tYW5kCWNtZFs0XTsJCS8qIG1heCA0IGNvbW1hbmRzICovCi19OwotCiBleHRlcm4gaW50IG1tY19pbml0X3F1ZXVlKHN0cnVjdCBtbWNfcXVldWUgKiwgc3RydWN0IG1tY19jYXJkICosIHNwaW5sb2NrX3QgKik7CiBleHRlcm4gdm9pZCBtbWNfY2xlYW51cF9xdWV1ZShzdHJ1Y3QgbW1jX3F1ZXVlICopOwogZXh0ZXJuIHZvaWQgbW1jX3F1ZXVlX3N1c3BlbmQoc3RydWN0IG1tY19xdWV1ZSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2NvcmUvS2NvbmZpZwppbmRleCA5NDIyMmI5Li5hYjM3YTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvY29yZS9LY29uZmlnCkBAIC00LDcgKzQsNiBAQAogCiBjb25maWcgTU1DX1VOU0FGRV9SRVNVTUUKIAlib29sICJBbGxvdyB1bnNhZmUgcmVzdW1lIChEQU5HRVJPVVMpIgotCWRlcGVuZHMgb24gTU1DICE9IG4KIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIE1NQyBsYXllciB3aWxsIGFzc3VtZSB0aGF0IGFsbCBjYXJkcwogCSAgc3RheWVkIGluIHRoZWlyIHJlc3BlY3RpdmUgc2xvdHMgZHVyaW5nIHRoZSBzdXNwZW5kLiBUaGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKaW5kZXggNzJjN2NmNC4uNzM4NWFjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKQEAgLTUwMCw5ICs1MDAsMTAgQEAKIHZvaWQgbW1jX2RldGVjdF9jaGFuZ2Uoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1bnNpZ25lZCBsb25nIGRlbGF5KQogewogI2lmZGVmIENPTkZJR19NTUNfREVCVUcKLQltbWNfY2xhaW1faG9zdChob3N0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAJQlVHX09OKGhvc3QtPnJlbW92ZWQpOwotCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogI2VuZGlmCiAKIAltbWNfc2NoZWR1bGVfZGVsYXllZF93b3JrKCZob3N0LT5kZXRlY3QsIGRlbGF5KTsKQEAgLTYyNSw5ICs2MjYsMTAgQEAKIHZvaWQgbW1jX3JlbW92ZV9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKIHsKICNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCi0JbW1jX2NsYWltX2hvc3QoaG9zdCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCWhvc3QtPnJlbW92ZWQgPSAxOwotCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogI2VuZGlmCiAKIAltbWNfZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCBlZDRkZWFiLi5lMjMwODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC0zLDExICszLDEwIEBACiAjCiAKIGNvbW1lbnQgIk1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycyIKLQlkZXBlbmRzIG9uIE1NQwogCiBjb25maWcgTU1DX0FSTU1NQ0kKIAl0cmlzdGF0ZSAiQVJNIEFNQkEgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVJNX0FNQkEgJiYgTU1DCisJZGVwZW5kcyBvbiBBUk1fQU1CQQogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgQVJNKFIpIEFNQkEoUikgUHJpbWVDZWxsIE11bHRpbWVkaWEgQ2FyZAogCSAgSW50ZXJmYWNlIChQTDE4MCBhbmQgUEwxODEpIHN1cHBvcnQuICBJZiB5b3UgaGF2ZSBhbiBBUk0oUikKQEAgLTE3LDcgKzE2LDcgQEAKIAogY29uZmlnIE1NQ19QWEEKIAl0cmlzdGF0ZSAiSW50ZWwgUFhBMjV4LzI2eC8yN3ggTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVJDSF9QWEEgJiYgTU1DCisJZGVwZW5kcyBvbiBBUkNIX1BYQQogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgSW50ZWwoUikgUFhBKFIpIE11bHRpbWVkaWEgY2FyZCBJbnRlcmZhY2UuCiAJICBJZiB5b3UgaGF2ZSBhIFBYQShSKSBwbGF0Zm9ybSB3aXRoIGEgTXVsdGltZWRpYSBDYXJkIHNsb3QsCkBAIC0yNyw3ICsyNiw3IEBACiAKIGNvbmZpZyBNTUNfU0RIQ0kKIAl0cmlzdGF0ZSAiU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBzdXBwb3J0ICAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFBDSSAmJiBNTUMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgVGhpcyBzZWxlY3QgdGhlIGdlbmVyaWMgU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZS4KIAkgIEl0IGlzIHVzZWQgYnkgbWFudWZhY3R1cmVycyBzdWNoIGFzIFRleGFzIEluc3RydW1lbnRzKFIpLCBSaWNvaChSKQpAQCAtMzgsNyArMzcsNyBAQAogCiBjb25maWcgTU1DX09NQVAKIAl0cmlzdGF0ZSAiVEkgT01BUCBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAgJiYgTU1DCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKIAlzZWxlY3QgVFBTNjUwMTAgaWYgTUFDSF9PTUFQX0gyCiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHRoZSBUSSBPTUFQIE11bHRpbWVkaWEgY2FyZCBJbnRlcmZhY2UuCkBAIC00OSw3ICs0OCw3IEBACiAKIGNvbmZpZyBNTUNfV0JTRAogCXRyaXN0YXRlICJXaW5ib25kIFc4M0w1MXhEIFNEL01NQyBDYXJkIEludGVyZmFjZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTU1DICYmIElTQV9ETUFfQVBJCisJZGVwZW5kcyBvbiBJU0FfRE1BX0FQSQogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgV2luYm9uZChSKSBXODNMNTF4RCBTZWN1cmUgZGlnaXRhbCBhbmQKICAgICAgICAgICBNdWx0aW1lZGlhIGNhcmQgSW50ZXJmYWNlLgpAQCAtNjAsNyArNTksNyBAQAogCiBjb25maWcgTU1DX0FVMVgKIAl0cmlzdGF0ZSAiQWxjaGVteSBBVTFYWDAgTU1DIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNTUMgJiYgU09DX0FVMTIwMAorCWRlcGVuZHMgb24gU09DX0FVMTIwMAogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgQU1EIEFsY2hlbXkoUikgTXVsdGltZWRpYSBjYXJkIGludGVyZmFjZS4KIAkgIElmIHlvdSBoYXZlIGEgQWxjaGVteSBwbGF0Zm9ybSB3aXRoIGEgTU1DIHNsb3QsIHNheSBZIG9yIE0gaGVyZS4KQEAgLTY5LDcgKzY4LDcgQEAKIAogY29uZmlnIE1NQ19BVDkxCiAJdHJpc3RhdGUgIkFUOTEgU0QvTU1DIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgTU1DCisJZGVwZW5kcyBvbiBBUkNIX0FUOTEKIAloZWxwCiAJICBUaGlzIHNlbGVjdHMgdGhlIEFUOTEgTUNJIGNvbnRyb2xsZXIuCiAKQEAgLTc3LDcgKzc2LDcgQEAKIAogY29uZmlnIE1NQ19JTVgKIAl0cmlzdGF0ZSAiTW90b3JvbGEgaS5NWCBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX0lNWCAmJiBNTUMKKwlkZXBlbmRzIG9uIEFSQ0hfSU1YCiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHRoZSBNb3Rvcm9sYSBpLk1YIE11bHRpbWVkaWEgY2FyZCBJbnRlcmZhY2UuCiAJICBJZiB5b3UgaGF2ZSBhIGkuTVggcGxhdGZvcm0gd2l0aCBhIE11bHRpbWVkaWEgQ2FyZCBzbG90LApAQCAtODcsNyArODYsNyBAQAogCiBjb25maWcgTU1DX1RJRk1fU0QKIAl0cmlzdGF0ZSAiVEkgRmxhc2ggTWVkaWEgTU1DL1NEIEludGVyZmFjZSBzdXBwb3J0ICAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIE1NQyAmJiBFWFBFUklNRU5UQUwgJiYgUENJCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgUENJCiAJc2VsZWN0IFRJRk1fQ09SRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgTU1DL1NEIGNhcmRzIHdpdGgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMKaW5kZXggYjcxNTZhNC4uZjk2NzIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMKQEAgLTE4Nyw5ICsxODcsOCBAQAogfQogCiBzdGF0aWMgaW50IGF1MXhtbWNfc2VuZF9jb21tYW5kKHN0cnVjdCBhdTF4bW1jX2hvc3QgKmhvc3QsIGludCB3YWl0LAotCQkJCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQorCQkJCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0KIAl1MzIgbW1jY21kID0gKGNtZC0+b3Bjb2RlIDw8IFNEX0NNRF9DSV9TSElGVCk7CiAKIAlzd2l0Y2ggKG1tY19yZXNwX3R5cGUoY21kKSkgewpAQCAtMjEzLDI0ICsyMTIsMTYgQEAKIAkJcmV0dXJuIE1NQ19FUlJfSU5WQUxJRDsKIAl9CiAKLQlzd2l0Y2goY21kLT5vcGNvZGUpIHsKLQljYXNlIE1NQ19SRUFEX1NJTkdMRV9CTE9DSzoKLQljYXNlIFNEX0FQUF9TRU5EX1NDUjoKLQkJbW1jY21kIHw9IFNEX0NNRF9DVF8yOwotCQlicmVhazsKLQljYXNlIE1NQ19SRUFEX01VTFRJUExFX0JMT0NLOgotCQltbWNjbWQgfD0gU0RfQ01EX0NUXzQ7Ci0JCWJyZWFrOwotCWNhc2UgTU1DX1dSSVRFX0JMT0NLOgotCQltbWNjbWQgfD0gU0RfQ01EX0NUXzE7Ci0JCWJyZWFrOwotCi0JY2FzZSBNTUNfV1JJVEVfTVVMVElQTEVfQkxPQ0s6Ci0JCW1tY2NtZCB8PSBTRF9DTURfQ1RfMzsKLQkJYnJlYWs7Ci0JY2FzZSBNTUNfU1RPUF9UUkFOU01JU1NJT046Ci0JCW1tY2NtZCB8PSBTRF9DTURfQ1RfNzsKLQkJYnJlYWs7CisJaWYgKGZsYWdzICYgTU1DX0RBVEFfUkVBRCkgeworCQlpZiAoZmxhZ3MgJiBNTUNfREFUQV9NVUxUSSkKKwkJCW1tY2NtZCB8PSBTRF9DTURfQ1RfNDsKKwkJZWxzZQorCQkJbW1jY21kIHw9IFNEX0NNRF9DVF8yOworCX0gZWxzZSBpZiAoZmxhZ3MgJiBNTUNfREFUQV9XUklURSkgeworCQlpZiAoZmxhZ3MgJiBNTUNfREFUQV9NVUxUSSkKKwkJCW1tY2NtZCB8PSBTRF9DTURfQ1RfMzsKKwkJZWxzZQorCQkJbW1jY21kIHw9IFNEX0NNRF9DVF8xOwogCX0KIAogCWF1X3dyaXRlbChjbWQtPmFyZywgSE9TVF9DTURBUkcoaG9zdCkpOwpAQCAtNjY1LDYgKzY1Niw3IEBACiB7CiAKIAlzdHJ1Y3QgYXUxeG1tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwogCWludCByZXQgPSBNTUNfRVJSX05PTkU7CiAKIAlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CkBAIC02NzcsMTEgKzY2OSwxMiBAQAogCiAJaWYgKG1ycS0+ZGF0YSkgewogCQlGTFVTSF9GSUZPKGhvc3QpOworCQlmbGFncyA9IG1ycS0+ZGF0YS0+ZmxhZ3M7CiAJCXJldCA9IGF1MXhtbWNfcHJlcGFyZV9kYXRhKGhvc3QsIG1ycS0+ZGF0YSk7CiAJfQogCiAJaWYgKHJldCA9PSBNTUNfRVJSX05PTkUpCi0JCXJldCA9IGF1MXhtbWNfc2VuZF9jb21tYW5kKGhvc3QsIDAsIG1ycS0+Y21kKTsKKwkJcmV0ID0gYXUxeG1tY19zZW5kX2NvbW1hbmQoaG9zdCwgMCwgbXJxLT5jbWQsIGZsYWdzKTsKIAogCWlmIChyZXQgIT0gTU1DX0VSUl9OT05FKSB7CiAJCW1ycS0+Y21kLT5lcnJvciA9IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCmluZGV4IGQ5N2QzODYuLmY4OTg1YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwpAQCAtMjMyLDIwICsyMzIsMTQgQEAKIAkJLyoKIAkJICogd29ya2Fyb3VuZCBmb3IgZXJyYXR1bSAjNDI6CiAJCSAqIEludGVsIFBYQTI3eCBGYW1pbHkgUHJvY2Vzc29yIFNwZWNpZmljYXRpb24gVXBkYXRlIFJldiAwMDEKKwkJICogQSBib2d1cyBDUkMgZXJyb3IgY2FuIGFwcGVhciBpZiB0aGUgbXNiIG9mIGEgMTM2IGJpdAorCQkgKiByZXNwb25zZSBpcyBhIG9uZS4KIAkJICovCi0JCWlmIChjbWQtPm9wY29kZSA9PSBNTUNfQUxMX1NFTkRfQ0lEIHx8Ci0JCSAgICBjbWQtPm9wY29kZSA9PSBNTUNfU0VORF9DU0QgfHwKLQkJICAgIGNtZC0+b3Bjb2RlID09IE1NQ19TRU5EX0NJRCkgewotCQkJLyogYSBib2d1cyBDUkMgZXJyb3IgY2FuIGFwcGVhciBpZiB0aGUgbXNiIG9mCi0JCQkgICB0aGUgMTUgYnl0ZSByZXNwb25zZSBpcyBhIG9uZSAqLwotCQkJaWYgKChjbWQtPnJlc3BbMF0gJiAweDgwMDAwMDAwKSA9PSAwKQotCQkJCWNtZC0+ZXJyb3IgPSBNTUNfRVJSX0JBRENSQzsKLQkJfSBlbHNlIHsKLQkJCXByX2RlYnVnKCJpZ25vcmluZyBDUkMgZnJvbSBjb21tYW5kICVkIC0gKnJpc2t5KlxuIixjbWQtPm9wY29kZSk7Ci0JCX0KLSNlbHNlCi0JCWNtZC0+ZXJyb3IgPSBNTUNfRVJSX0JBRENSQzsKKwkJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQXzEzNiAmJiBjbWQtPnJlc3BbMF0gJiAweDgwMDAwMDAwKSB7CisJCQlwcl9kZWJ1ZygiaWdub3JpbmcgQ1JDIGZyb20gY29tbWFuZCAlZCAtICpyaXNreSpcbiIsIGNtZC0+b3Bjb2RlKTsKKwkJfSBlbHNlCiAjZW5kaWYKKwkJY21kLT5lcnJvciA9IE1NQ19FUlJfQkFEQ1JDOwogCX0KIAogCXB4YW1jaV9kaXNhYmxlX2lycShob3N0LCBFTkRfQ01EX1JFUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKaW5kZXggZmY1YmY3My4uYTM1OWVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwpAQCAtOTYzLDYgKzk2MywxNSBAQAogCQlpZiAoaW50bWFzayAmIChTREhDSV9JTlRfREFUQV9BVkFJTCB8IFNESENJX0lOVF9TUEFDRV9BVkFJTCkpCiAJCQlzZGhjaV90cmFuc2Zlcl9waW8oaG9zdCk7CiAKKwkJLyoKKwkJICogV2UgY3VycmVudGx5IGRvbid0IGRvIGFueXRoaW5nIGZhbmN5IHdpdGggRE1BCisJCSAqIGJvdW5kYXJpZXMsIGJ1dCBhcyB3ZSBjYW4ndCBkaXNhYmxlIHRoZSBmZWF0dXJlCisJCSAqIHdlIG5lZWQgdG8gYXQgbGVhc3QgcmVzdGFydCB0aGUgdHJhbnNmZXIuCisJCSAqLworCQlpZiAoaW50bWFzayAmIFNESENJX0lOVF9ETUFfRU5EKQorCQkJd3JpdGVsKHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0RNQV9BRERSRVNTKSwKKwkJCQlob3N0LT5pb2FkZHIgKyBTREhDSV9ETUFfQUREUkVTUyk7CisKIAkJaWYgKGludG1hc2sgJiBTREhDSV9JTlRfREFUQV9FTkQpCiAJCQlzZGhjaV9maW5pc2hfZGF0YShob3N0KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3RpZm1fc2QuYyBiL2RyaXZlcnMvbW1jL2hvc3QvdGlmbV9zZC5jCmluZGV4IDc1MTFmOTYuLjhiNzM2ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvdGlmbV9zZC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvdGlmbV9zZC5jCkBAIC0xMDIxLDEwICsxMDIxLDYgQEAKIAltbWNfcmVtb3ZlX2hvc3QobW1jKTsKIAlkZXZfZGJnKCZzb2NrLT5kZXYsICJhZnRlciByZW1vdmVcbiIpOwogCi0JLyogVGhlIG1lYW5pbmcgb2YgdGhlIGJpdCBtYWpvcml0eSBpbiB0aGlzIGNvbnN0YW50IGlzIHVua25vd24uICovCi0Jd3JpdGVsKDB4ZmZmOCAmIHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX0NPTlRST0wpLAotCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19DT05UUk9MKTsKLQogCW1tY19mcmVlX2hvc3QobW1jKTsKIH0KIApAQCAtMTAzMiwxNCArMTAyOCw3IEBACiAKIHN0YXRpYyBpbnQgdGlmbV9zZF9zdXNwZW5kKHN0cnVjdCB0aWZtX2RldiAqc29jaywgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gdGlmbV9nZXRfZHJ2ZGF0YShzb2NrKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IG1tY19zdXNwZW5kX2hvc3QobW1jLCBzdGF0ZSk7Ci0JLyogVGhlIG1lYW5pbmcgb2YgdGhlIGJpdCBtYWpvcml0eSBpbiB0aGlzIGNvbnN0YW50IGlzIHVua25vd24uICovCi0Jd3JpdGVsKDB4ZmZmOCAmIHJlYWRsKHNvY2stPmFkZHIgKyBTT0NLX0NPTlRST0wpLAotCSAgICAgICBzb2NrLT5hZGRyICsgU09DS19DT05UUk9MKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIG1tY19zdXNwZW5kX2hvc3QodGlmbV9nZXRfZHJ2ZGF0YShzb2NrKSwgc3RhdGUpOwogfQogCiBzdGF0aWMgaW50IHRpZm1fc2RfcmVzdW1lKHN0cnVjdCB0aWZtX2RldiAqc29jaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL0tjb25maWcgYi9kcml2ZXJzL210ZC9LY29uZmlnCmluZGV4IGMxYjQ3ZGIuLmZiZWM4Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAogbWVudWNvbmZpZyBNVEQKIAl0cmlzdGF0ZSAiTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlIChNVEQpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0KIAloZWxwCiAJICBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIGFyZSBmbGFzaCwgUkFNIGFuZCBzaW1pbGFyIGNoaXBzLCBvZnRlbgogCSAgdXNlZCBmb3Igc29saWQgc3RhdGUgZmlsZSBzeXN0ZW1zIG9uIGVtYmVkZGVkIGRldmljZXMuIFRoaXMgb3B0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZwppbmRleCBkMjhlMGZjLi40NzlkMzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKQEAgLTEsNSArMSw0IEBACiAjIGRyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKLSMgJElkOiBLY29uZmlnLHYgMS4xOCAyMDA1LzExLzA3IDExOjE0OjIyIGdsZWl4bmVyIEV4cCAkCiAKIG1lbnUgIlJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzIgogCWRlcGVuZHMgb24gTVREIT1uCkBAIC0yMzEsNDUgKzIzMCw2IEBACiAJICB0aGUgc3lzdGVtIHJlZ2FyZGxlc3Mgb2YgbWVkaWEgcHJlc2VuY2UuICBEZXZpY2Ugbm9kZXMgY3JlYXRlZAogCSAgd2l0aCB0aGlzIGRyaXZlciB3aWxsIHJldHVybiAtRU5PREVWIHVwb24gYWNjZXNzLgogCi1jb25maWcgTVREX09CU09MRVRFX0NISVBTCi0JYm9vbCAiT2xkZXIgKHRoZW9yZXRpY2FsbHkgb2Jzb2xldGVkIG5vdykgZHJpdmVycyBmb3Igbm9uLUNGSSBjaGlwcyIKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBkb2VzIG5vdCBlbmFibGUgYW55IGNvZGUgZGlyZWN0bHksIGJ1dCB3aWxsIGFsbG93IHlvdSB0bwotCSAgc2VsZWN0IHNvbWUgb3RoZXIgY2hpcCBkcml2ZXJzIHdoaWNoIGFyZSBub3cgY29uc2lkZXJlZCBvYnNvbGV0ZSwKLQkgIGJlY2F1c2UgdGhlIGdlbmVyaWMgQ09ORklHX0pFREVDUFJPQkUgY29kZSBhYm92ZSBzaG91bGQgbm93IGRldGVjdAotCSAgdGhlIGNoaXBzIHdoaWNoIGFyZSBzdXBwb3J0ZWQgYnkgdGhlc2UgZHJpdmVycywgYW5kIGFsbG93IHRoZSBnZW5lcmljCi0JICBDRkktY29tcGF0aWJsZSBkcml2ZXJzIHRvIGRyaXZlIHRoZSBjaGlwcy4gU2F5ICdOJyBoZXJlIHVubGVzcyB5b3UgaGF2ZQotCSAgYWxyZWFkeSB0cmllZCB0aGUgQ09ORklHX0pFREVDUFJPQkUgbWV0aG9kIGFuZCByZXBvcnRlZCBpdHMgZmFpbHVyZQotCSAgdG8gdGhlIE1URCBtYWlsaW5nIGxpc3QgYXQgPGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnPgotCi1jb25maWcgTVREX0FNRFNURAotCXRyaXN0YXRlICJBTUQgY29tcGF0aWJsZSBmbGFzaCBjaGlwIHN1cHBvcnQgKG5vbi1DRkkpIgotCWRlcGVuZHMgb24gTVREX09CU09MRVRFX0NISVBTICYmIEJST0tFTgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgZmxhc2ggY2hpcHMgdXNpbmcgQU1ELWNvbXBhdGlibGUKLQkgIGNvbW1hbmRzLCBpbmNsdWRpbmcgc29tZSB3aGljaCBhcmUgbm90IENGSS1jb21wYXRpYmxlIGFuZCBoZW5jZQotCSAgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgQ09ORklHX01URF9DRklfQU1EU1REIG9wdGlvbi4KLQotCSAgSXQgYWxzbyB3b3JrcyBvbiBBTUQgY29tcGF0aWJsZSBjaGlwcyB0aGF0IGRvIGNvbmZvcm0gdG8gQ0ZJLgotCi1jb25maWcgTVREX1NIQVJQCi0JdHJpc3RhdGUgInByZS1DRkkgU2hhcnAgY2hpcCBzdXBwb3J0IgotCWRlcGVuZHMgb24gTVREX09CU09MRVRFX0NISVBTCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBmbGFzaCBjaGlwcyB1c2luZyBTaGFycC1jb21wYXRpYmxlCi0JICBjb21tYW5kcywgaW5jbHVkaW5nIHNvbWUgd2hpY2ggYXJlIG5vdCBDRkktY29tcGF0aWJsZSBhbmQgaGVuY2UKLQkgIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIENPTkZJR19NVERfQ0ZJX0lOVEVMeHh4IG9wdGlvbnMuCi0KLWNvbmZpZyBNVERfSkVERUMKLQl0cmlzdGF0ZSAiSkVERUMgZGV2aWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNVERfT0JTT0xFVEVfQ0hJUFMgJiYgQlJPS0VOCi0JaGVscAotCSAgRW5hYmxlIG9sZGVyIEpFREVDIGZsYXNoIGludGVyZmFjZSBkZXZpY2VzIGZvciBzZWxmCi0JICBwcm9ncmFtbWluZyBmbGFzaC4gIEl0IGlzIGNvbW1vbmx5IHVzZWQgaW4gb2xkZXIgQU1EIGNoaXBzLiAgSXQgaXMKLQkgIG9ubHkgY2FsbGVkIEpFREVDIGJlY2F1c2UgdGhlIEpFREVDIGFzc29jaWF0aW9uCi0JICA8aHR0cDovL3d3dy5qZWRlYy5vcmcvPiBkaXN0cmlidXRlcyB0aGUgaWRlbnRpZmljYXRpb24gY29kZXMgZm9yIHRoZQotCSAgY2hpcHMuCi0KIGNvbmZpZyBNVERfWElQCiAJYm9vbCAiWElQIGF3YXJlIE1URCBzdXBwb3J0IgogCWRlcGVuZHMgb24gIVNNUCAmJiAoTVREX0NGSV9JTlRFTEVYVCB8fCBNVERfQ0ZJX0FNRFNURCkgJiYgRVhQRVJJTUVOVEFMICYmIEFSQ0hfTVREX1hJUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9jaGlwcy9NYWtlZmlsZQppbmRleCA3NWJjMWMyLi4zNjU4MjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9jaGlwcy9NYWtlZmlsZQpAQCAtMSwxOSArMSwxNSBAQAogIwogIyBsaW51eC9kcml2ZXJzL2NoaXBzL01ha2VmaWxlCiAjCi0jICRJZDogTWFrZWZpbGUuY29tbW9uLHYgMS41IDIwMDUvMTEvMDcgMTE6MTQ6MjIgZ2xlaXhuZXIgRXhwICQKIAogb2JqLSQoQ09ORklHX01URCkJCSs9IGNoaXByZWcubwotb2JqLSQoQ09ORklHX01URF9BTURTVEQpCSs9IGFtZF9mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0NGSSkJCSs9IGNmaV9wcm9iZS5vCiBvYmotJChDT05GSUdfTVREX0NGSV9VVElMKQkrPSBjZmlfdXRpbC5vCiBvYmotJChDT05GSUdfTVREX0NGSV9TVEFBKQkrPSBjZmlfY21kc2V0XzAwMjAubwogb2JqLSQoQ09ORklHX01URF9DRklfQU1EU1REKQkrPSBjZmlfY21kc2V0XzAwMDIubwogb2JqLSQoQ09ORklHX01URF9DRklfSU5URUxFWFQpCSs9IGNmaV9jbWRzZXRfMDAwMS5vCiBvYmotJChDT05GSUdfTVREX0dFTl9QUk9CRSkJKz0gZ2VuX3Byb2JlLm8KLW9iai0kKENPTkZJR19NVERfSkVERUMpCQkrPSBqZWRlYy5vCiBvYmotJChDT05GSUdfTVREX0pFREVDUFJPQkUpCSs9IGplZGVjX3Byb2JlLm8KIG9iai0kKENPTkZJR19NVERfUkFNKQkJKz0gbWFwX3JhbS5vCiBvYmotJChDT05GSUdfTVREX1JPTSkJCSs9IG1hcF9yb20ubwotb2JqLSQoQ09ORklHX01URF9TSEFSUCkJCSs9IHNoYXJwLm8KIG9iai0kKENPTkZJR19NVERfQUJTRU5UKQkrPSBtYXBfYWJzZW50Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2FtZF9mbGFzaC5jIGIvZHJpdmVycy9tdGQvY2hpcHMvYW1kX2ZsYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3OTk5ZjEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvYW1kX2ZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzk2ICswLDAgQEAKLS8qCi0gKiBNVEQgbWFwIGRyaXZlciBmb3IgQU1EIGNvbXBhdGlibGUgZmxhc2ggY2hpcHMgKG5vbi1DRkkpCi0gKgotICogQXV0aG9yOiBKb25hcyBIb2xtYmVyZyA8am9uYXMuaG9sbWJlcmdAYXhpcy5jb20+Ci0gKgotICogJElkOiBhbWRfZmxhc2guYyx2IDEuMjggMjAwNS8xMS8wNyAxMToxNDoyMiBnbGVpeG5lciBFeHAgJAotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBBeGlzIENvbW11bmljYXRpb25zIEFCCi0gKgotICogVGhpcyBmaWxlIGlzIHVuZGVyIEdQTC4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9mbGFzaGNoaXAuaD4KLQotLyogVGhlcmUncyBubyBsaW1pdC4gSXQgZXhpc3RzIG9ubHkgdG8gYXZvaWQgcmVhbGxvYy4gKi8KLSNkZWZpbmUgTUFYX0FNRF9DSElQUyA4Ci0KLSNkZWZpbmUgREVWSUNFX1RZUEVfWDgJKDggLyA4KQotI2RlZmluZSBERVZJQ0VfVFlQRV9YMTYJKDE2IC8gOCkKLSNkZWZpbmUgREVWSUNFX1RZUEVfWDMyCSgzMiAvIDgpCi0KLS8qIEFkZHJlc3NlcyAqLwotI2RlZmluZSBBRERSX01BTlVGQUNUVVJFUgkJMHgwMDAwCi0jZGVmaW5lIEFERFJfREVWSUNFX0lECQkJMHgwMDAxCi0jZGVmaW5lIEFERFJfU0VDVE9SX0xPQ0sJCTB4MDAwMgotI2RlZmluZSBBRERSX0hBTkRTSEFLRQkJCTB4MDAwMwotI2RlZmluZSBBRERSX1VOTE9DS18xCQkJMHgwNTU1Ci0jZGVmaW5lIEFERFJfVU5MT0NLXzIJCQkweDAyQUEKLQotLyogQ29tbWFuZHMgKi8KLSNkZWZpbmUgQ01EX1VOTE9DS19EQVRBXzEJCTB4MDBBQQotI2RlZmluZSBDTURfVU5MT0NLX0RBVEFfMgkJMHgwMDU1Ci0jZGVmaW5lIENNRF9NQU5VRkFDVFVSRVJfVU5MT0NLX0RBVEEJMHgwMDkwCi0jZGVmaW5lIENNRF9VTkxPQ0tfQllQQVNTX01PREUJCTB4MDAyMAotI2RlZmluZSBDTURfUFJPR1JBTV9VTkxPQ0tfREFUQQkJMHgwMEEwCi0jZGVmaW5lIENNRF9SRVNFVF9EQVRBCQkJMHgwMEYwCi0jZGVmaW5lIENNRF9TRUNUT1JfRVJBU0VfVU5MT0NLX0RBVEEJMHgwMDgwCi0jZGVmaW5lIENNRF9TRUNUT1JfRVJBU0VfVU5MT0NLX0RBVEFfMgkweDAwMzAKLQotI2RlZmluZSBDTURfVU5MT0NLX1NFQ1RPUgkJMHgwMDYwCi0KLS8qIE1hbnVmYWN0dXJlcnMgKi8KLSNkZWZpbmUgTUFOVUZBQ1RVUkVSX0FNRAkweDAwMDEKLSNkZWZpbmUgTUFOVUZBQ1RVUkVSX0FUTUVMCTB4MDAxRgotI2RlZmluZSBNQU5VRkFDVFVSRVJfRlVKSVRTVQkweDAwMDQKLSNkZWZpbmUgTUFOVUZBQ1RVUkVSX1NUCQkweDAwMjAKLSNkZWZpbmUgTUFOVUZBQ1RVUkVSX1NTVAkweDAwQkYKLSNkZWZpbmUgTUFOVUZBQ1RVUkVSX1RPU0hJQkEJMHgwMDk4Ci0KLS8qIEFNRCAqLwotI2RlZmluZSBBTTI5RjgwMEJCCTB4MjI1OAotI2RlZmluZSBBTTI5RjgwMEJUCTB4MjJENgotI2RlZmluZSBBTTI5TFY4MDBCQgkweDIyNUIKLSNkZWZpbmUgQU0yOUxWODAwQlQJMHgyMkRBCi0jZGVmaW5lIEFNMjlMVjE2MERUCTB4MjJDNAotI2RlZmluZSBBTTI5TFYxNjBEQgkweDIyNDkKLSNkZWZpbmUgQU0yOUJEUzMyM0QgICAgIDB4MjJEMQotCi0vKiBBdG1lbCAqLwotI2RlZmluZSBBVDQ5eFYxNngJMHgwMEMwCi0jZGVmaW5lIEFUNDl4VjE2eFQJMHgwMEMyCi0KLS8qIEZ1aml0c3UgKi8KLSNkZWZpbmUgTUJNMjlMVjE2MFRFCTB4MjJDNAotI2RlZmluZSBNQk0yOUxWMTYwQkUJMHgyMjQ5Ci0jZGVmaW5lIE1CTTI5TFY4MDBCQgkweDIyNUIKLQotLyogU1QgLSB3d3cuc3QuY29tICovCi0jZGVmaW5lIE0yOVc4MDBUCTB4MDBENwotI2RlZmluZSBNMjlXMTYwRFQJMHgyMkM0Ci0jZGVmaW5lIE0yOVcxNjBEQgkweDIyNDkKLQotLyogU1NUICovCi0jZGVmaW5lIFNTVDM5TEY4MDAJMHgyNzgxCi0jZGVmaW5lIFNTVDM5TEYxNjAJMHgyNzgyCi0KLS8qIFRvc2hpYmEgKi8KLSNkZWZpbmUgVEM1OEZWVDE2MAkweDAwQzIKLSNkZWZpbmUgVEM1OEZWQjE2MAkweDAwNDMKLQotI2RlZmluZSBENl9NQVNLCTB4NDAKLQotc3RydWN0IGFtZF9mbGFzaF9wcml2YXRlIHsKLQlpbnQgZGV2aWNlX3R5cGU7Ci0JaW50IGludGVybGVhdmU7Ci0JaW50IG51bWNoaXBzOwotCXVuc2lnbmVkIGxvbmcgY2hpcHNoaWZ0OwotCXN0cnVjdCBmbGNoaXAgY2hpcHNbMF07Ci19OwotCi1zdHJ1Y3QgYW1kX2ZsYXNoX2luZm8gewotCWNvbnN0IF9fdTE2IG1mcl9pZDsKLQljb25zdCBfX3UxNiBkZXZfaWQ7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCB1X2xvbmcgc2l6ZTsKLQljb25zdCBpbnQgbnVtZXJhc2VyZWdpb25zOwotCWNvbnN0IHN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8gcmVnaW9uc1s0XTsKLX07Ci0KLQotCi1zdGF0aWMgaW50IGFtZF9mbGFzaF9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqLCBsb2ZmX3QsIHNpemVfdCwgc2l6ZV90ICosCi0JCQkgIHVfY2hhciAqKTsKLXN0YXRpYyBpbnQgYW1kX2ZsYXNoX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqLCBsb2ZmX3QsIHNpemVfdCwgc2l6ZV90ICosCi0JCQkgICBjb25zdCB1X2NoYXIgKik7Ci1zdGF0aWMgaW50IGFtZF9mbGFzaF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKiwgc3RydWN0IGVyYXNlX2luZm8gKik7Ci1zdGF0aWMgdm9pZCBhbWRfZmxhc2hfc3luYyhzdHJ1Y3QgbXRkX2luZm8gKik7Ci1zdGF0aWMgaW50IGFtZF9mbGFzaF9zdXNwZW5kKHN0cnVjdCBtdGRfaW5mbyAqKTsKLXN0YXRpYyB2b2lkIGFtZF9mbGFzaF9yZXN1bWUoc3RydWN0IG10ZF9pbmZvICopOwotc3RhdGljIHZvaWQgYW1kX2ZsYXNoX2Rlc3Ryb3koc3RydWN0IG10ZF9pbmZvICopOwotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqYW1kX2ZsYXNoX3Byb2JlKHN0cnVjdCBtYXBfaW5mbyAqbWFwKTsKLQotCi1zdGF0aWMgc3RydWN0IG10ZF9jaGlwX2RyaXZlciBhbWRfZmxhc2hfY2hpcGRydiA9IHsKLQkucHJvYmUgPSBhbWRfZmxhc2hfcHJvYmUsCi0JLmRlc3Ryb3kgPSBhbWRfZmxhc2hfZGVzdHJveSwKLQkubmFtZSA9ICJhbWRfZmxhc2giLAotCS5tb2R1bGUgPSBUSElTX01PRFVMRQotfTsKLQotc3RhdGljIGlubGluZSBfX3UzMiB3aWRlX3JlYWQoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTMyIGFkZHIpCi17Ci0JaWYgKG1hcC0+YnVzd2lkdGggPT0gMSkgewotCQlyZXR1cm4gbWFwX3JlYWQ4KG1hcCwgYWRkcik7Ci0JfSBlbHNlIGlmIChtYXAtPmJ1c3dpZHRoID09IDIpIHsKLQkJcmV0dXJuIG1hcF9yZWFkMTYobWFwLCBhZGRyKTsKLQl9IGVsc2UgaWYgKG1hcC0+YnVzd2lkdGggPT0gNCkgewotCQlyZXR1cm4gbWFwX3JlYWQzMihtYXAsIGFkZHIpOwotICAgICAgICB9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdpZGVfd3JpdGUoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTMyIHZhbCwgX191MzIgYWRkcikKLXsKLQlpZiAobWFwLT5idXN3aWR0aCA9PSAxKSB7Ci0JCW1hcF93cml0ZTgobWFwLCB2YWwsIGFkZHIpOwotCX0gZWxzZSBpZiAobWFwLT5idXN3aWR0aCA9PSAyKSB7Ci0JCW1hcF93cml0ZTE2KG1hcCwgdmFsLCBhZGRyKTsKLQl9IGVsc2UgaWYgKG1hcC0+YnVzd2lkdGggPT0gNCkgewotCQltYXBfd3JpdGUzMihtYXAsIHZhbCwgYWRkcik7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIF9fdTMyIG1ha2VfY21kKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBfX3UzMiBjbWQpCi17Ci0JY29uc3Qgc3RydWN0IGFtZF9mbGFzaF9wcml2YXRlICpwcml2YXRlID0gbWFwLT5mbGRydl9wcml2OwotCWlmICgocHJpdmF0ZS0+aW50ZXJsZWF2ZSA9PSAyKSAmJgotCSAgICAocHJpdmF0ZS0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX1RZUEVfWDE2KSkgewotCQljbWQgfD0gKGNtZCA8PCAxNik7Ci0JfQotCi0JcmV0dXJuIGNtZDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfdW5sb2NrKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0Jd2lkZV93cml0ZShtYXAsIChDTURfVU5MT0NLX0RBVEFfMSA8PCAxNikgfCBDTURfVU5MT0NLX0RBVEFfMSwKLQkJICAgYmFzZSArIChtYXAtPmJ1c3dpZHRoICogQUREUl9VTkxPQ0tfMSkpOwotCXdpZGVfd3JpdGUobWFwLCAoQ01EX1VOTE9DS19EQVRBXzIgPDwgMTYpIHwgQ01EX1VOTE9DS19EQVRBXzIsCi0JCSAgIGJhc2UgKyAobWFwLT5idXN3aWR0aCAqIEFERFJfVU5MT0NLXzIpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfY21kKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1bnNpZ25lZCBsb25nIGJhc2UsIF9fdTMyIGNtZCkKLXsKLQlzZW5kX3VubG9jayhtYXAsIGJhc2UpOwotCXdpZGVfd3JpdGUobWFwLCBtYWtlX2NtZChtYXAsIGNtZCksCi0JCSAgIGJhc2UgKyAobWFwLT5idXN3aWR0aCAqIEFERFJfVU5MT0NLXzEpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNlbmRfY21kX3RvX2FkZHIoc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJCQkgICAgX191MzIgY21kLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jc2VuZF91bmxvY2sobWFwLCBiYXNlKTsKLQl3aWRlX3dyaXRlKG1hcCwgbWFrZV9jbWQobWFwLCBjbWQpLCBhZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZmxhc2hfaXNfYnVzeShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCWludCBpbnRlcmxlYXZlKQotewotCi0JaWYgKChpbnRlcmxlYXZlID09IDIpICYmIChtYXAtPmJ1c3dpZHRoID09IDQpKSB7Ci0JCV9fdTMyIHJlYWQxLCByZWFkMjsKLQotCQlyZWFkMSA9IHdpZGVfcmVhZChtYXAsIGFkZHIpOwotCQlyZWFkMiA9IHdpZGVfcmVhZChtYXAsIGFkZHIpOwotCi0JCXJldHVybiAoKChyZWFkMSA+PiAxNikgJiBENl9NQVNLKSAhPQotCQkJKChyZWFkMiA+PiAxNikgJiBENl9NQVNLKSkgfHwKLQkJICAgICAgICgoKHJlYWQxICYgMHhmZmZmKSAmIEQ2X01BU0spICE9Ci0JCQkoKHJlYWQyICYgMHhmZmZmKSAmIEQ2X01BU0spKTsKLQl9Ci0KLQlyZXR1cm4gKCh3aWRlX3JlYWQobWFwLCBhZGRyKSAmIEQ2X01BU0spICE9Ci0JCSh3aWRlX3JlYWQobWFwLCBhZGRyKSAmIEQ2X01BU0spKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19zZWN0b3Ioc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgc2VjdF9hZGRyLAotCQkJCSBpbnQgdW5sb2NrKQotewotCS8qIFNlY3RvciBsb2NrIGFkZHJlc3MuIEE2ID0gMSBmb3IgdW5sb2NrLCBBNiA9IDAgZm9yIGxvY2sgKi8KLQlpbnQgU0xBID0gdW5sb2NrID8KLQkJKHNlY3RfYWRkciB8ICAoMHg0MCAqIG1hcC0+YnVzd2lkdGgpKSA6Ci0JCShzZWN0X2FkZHIgJiB+KDB4NDAgKiBtYXAtPmJ1c3dpZHRoKSkgOwotCi0JX191MzIgY21kID0gbWFrZV9jbWQobWFwLCBDTURfVU5MT0NLX1NFQ1RPUik7Ci0KLQl3aWRlX3dyaXRlKG1hcCwgbWFrZV9jbWQobWFwLCBDTURfUkVTRVRfREFUQSksIDApOwotCXdpZGVfd3JpdGUobWFwLCBjbWQsIFNMQSk7IC8qIDFzdCBjeWNsZTogd3JpdGUgY21kIHRvIGFueSBhZGRyZXNzICovCi0Jd2lkZV93cml0ZShtYXAsIGNtZCwgU0xBKTsgLyogMm5kIGN5Y2xlOiB3cml0ZSBjbWQgdG8gYW55IGFkZHJlc3MgKi8KLQl3aWRlX3dyaXRlKG1hcCwgY21kLCBTTEEpOyAvKiAzcmQgY3ljbGU6IHdyaXRlIGNtZCB0byBTTEEgKi8KLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfc2VjdG9yX2xvY2tlZChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwKLQkJCQkgICB1bnNpZ25lZCBsb25nIHNlY3RfYWRkcikKLXsKLQlpbnQgc3RhdHVzOwotCi0Jd2lkZV93cml0ZShtYXAsIENNRF9SRVNFVF9EQVRBLCAwKTsKLQlzZW5kX2NtZChtYXAsIHNlY3RfYWRkciwgQ01EX01BTlVGQUNUVVJFUl9VTkxPQ0tfREFUQSk7Ci0KLQkvKiBzdGF0dXMgaXMgMHgwMDAwIGZvciB1bmxvY2tlZCBhbmQgMHgwMDAxIGZvciBsb2NrZWQgKi8KLQlzdGF0dXMgPSB3aWRlX3JlYWQobWFwLCBzZWN0X2FkZHIgKyAobWFwLT5idXN3aWR0aCAqIEFERFJfU0VDVE9SX0xPQ0spKTsKLQl3aWRlX3dyaXRlKG1hcCwgQ01EX1JFU0VUX0RBVEEsIDApOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgYW1kX2ZsYXNoX2RvX3VubG9jayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKLQkJCSAgICAgICBpbnQgaXNfdW5sb2NrKQotewotCXN0cnVjdCBtYXBfaW5mbyAqbWFwOwotCXN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8gKm1lcmlwOwotCWludCBlcmFzZW9mZnNldCwgZXJhc2VzaXplLCBlcmFzZWJsb2NrczsKLQlpbnQgaTsKLQlpbnQgcmV0dmFsID0gMDsKLQlpbnQgbG9ja19zdGF0dXM7Ci0KLQltYXAgPSBtdGQtPnByaXY7Ci0KLQkvKiBQYXNzIHRoZSB3aG9sZSBjaGlwIHRocm91Z2ggc2VjdG9yIGJ5IHNlY3RvciBhbmQgY2hlY2sgZm9yIGVhY2gKLQkgICBzZWN0b3IgaWYgdGhlIHNlY3RvciBhbmQgdGhlIGdpdmVuIGludGVydmFsIG92ZXJsYXAgKi8KLQlmb3IoaSA9IDA7IGkgPCBtdGQtPm51bWVyYXNlcmVnaW9uczsgaSsrKSB7Ci0JCW1lcmlwID0gJm10ZC0+ZXJhc2VyZWdpb25zW2ldOwotCi0JCWVyYXNlb2Zmc2V0ID0gbWVyaXAtPm9mZnNldDsKLQkJZXJhc2VzaXplID0gbWVyaXAtPmVyYXNlc2l6ZTsKLQkJZXJhc2VibG9ja3MgPSBtZXJpcC0+bnVtYmxvY2tzOwotCi0JCWlmIChvZnMgPiBlcmFzZW9mZnNldCArIGVyYXNlc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCXdoaWxlIChlcmFzZWJsb2NrcyA+IDApIHsKLQkJCWlmIChvZnMgPCBlcmFzZW9mZnNldCArIGVyYXNlc2l6ZSAmJiBvZnMgKyBsZW4gPiBlcmFzZW9mZnNldCkgewotCQkJCXVubG9ja19zZWN0b3IobWFwLCBlcmFzZW9mZnNldCwgaXNfdW5sb2NrKTsKLQotCQkJCWxvY2tfc3RhdHVzID0gaXNfc2VjdG9yX2xvY2tlZChtYXAsIGVyYXNlb2Zmc2V0KTsKLQotCQkJCWlmIChpc191bmxvY2sgJiYgbG9ja19zdGF0dXMpIHsKLQkJCQkJcHJpbnRrKCJDYW5ub3QgdW5sb2NrIHNlY3RvciBhdCBhZGRyZXNzICV4IGxlbmd0aCAleHhcbiIsCi0JCQkJCSAgICAgICBlcmFzZW9mZnNldCwgbWVyaXAtPmVyYXNlc2l6ZSk7Ci0JCQkJCXJldHZhbCA9IC0xOwotCQkJCX0gZWxzZSBpZiAoIWlzX3VubG9jayAmJiAhbG9ja19zdGF0dXMpIHsKLQkJCQkJcHJpbnRrKCJDYW5ub3QgbG9jayBzZWN0b3IgYXQgYWRkcmVzcyAleCBsZW5ndGggJXhcbiIsCi0JCQkJCSAgICAgICBlcmFzZW9mZnNldCwgbWVyaXAtPmVyYXNlc2l6ZSk7Ci0JCQkJCXJldHZhbCA9IC0xOwotCQkJCX0KLQkJCX0KLQkJCWVyYXNlb2Zmc2V0ICs9IGVyYXNlc2l6ZTsKLQkJCWVyYXNlYmxvY2tzIC0tOwotCQl9Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgYW1kX2ZsYXNoX3VubG9jayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gYW1kX2ZsYXNoX2RvX3VubG9jayhtdGQsIG9mcywgbGVuLCAxKTsKLX0KLQotc3RhdGljIGludCBhbWRfZmxhc2hfbG9jayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gYW1kX2ZsYXNoX2RvX3VubG9jayhtdGQsIG9mcywgbGVuLCAwKTsKLX0KLQotCi0vKgotICogUmVhZHMgSkVERUMgbWFudWZhY3R1cmVyIElEIGFuZCBkZXZpY2UgSUQgYW5kIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdAotICogbWF0Y2hpbmcgdGFibGUgZW50cnkgKC0xIGlmIG5vdCBmb3VuZCBvciBhbGlhcyBmb3IgYWxyZWFkeSBmb3VuZCBjaGlwKS4KLSAqLwotc3RhdGljIGludCBwcm9iZV9uZXdfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgX191MzIgYmFzZSwKLQkJCSAgc3RydWN0IGZsY2hpcCAqY2hpcHMsCi0JCQkgIHN0cnVjdCBhbWRfZmxhc2hfcHJpdmF0ZSAqcHJpdmF0ZSwKLQkJCSAgY29uc3Qgc3RydWN0IGFtZF9mbGFzaF9pbmZvICp0YWJsZSwgaW50IHRhYmxlX3NpemUpCi17Ci0JX191MzIgbWZyX2lkOwotCV9fdTMyIGRldl9pZDsKLQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgYW1kX2ZsYXNoX3ByaXZhdGUgdGVtcDsKLQlpbnQgaTsKLQotCXRlbXAuZGV2aWNlX3R5cGUgPSBERVZJQ0VfVFlQRV9YMTY7CS8vIEFzc3VtZSBYMTYgKEZJWE1FKQotCXRlbXAuaW50ZXJsZWF2ZSA9IDI7Ci0JbWFwLT5mbGRydl9wcml2ID0gJnRlbXA7Ci0KLQkvKiBFbnRlciBhdXRvc2VsZWN0IG1vZGUuICovCi0Jc2VuZF9jbWQobWFwLCBiYXNlLCBDTURfUkVTRVRfREFUQSk7Ci0Jc2VuZF9jbWQobWFwLCBiYXNlLCBDTURfTUFOVUZBQ1RVUkVSX1VOTE9DS19EQVRBKTsKLQotCW1mcl9pZCA9IHdpZGVfcmVhZChtYXAsIGJhc2UgKyAobWFwLT5idXN3aWR0aCAqIEFERFJfTUFOVUZBQ1RVUkVSKSk7Ci0JZGV2X2lkID0gd2lkZV9yZWFkKG1hcCwgYmFzZSArIChtYXAtPmJ1c3dpZHRoICogQUREUl9ERVZJQ0VfSUQpKTsKLQotCWlmICgobWFwLT5idXN3aWR0aCA9PSA0KSAmJiAoKG1mcl9pZCA+PiAxNikgPT0gKG1mcl9pZCAmIDB4ZmZmZikpICYmCi0JICAgICgoZGV2X2lkID4+IDE2KSA9PSAoZGV2X2lkICYgMHhmZmZmKSkpIHsKLQkJbWZyX2lkICY9IDB4ZmZmZjsKLQkJZGV2X2lkICY9IDB4ZmZmZjsKLQl9IGVsc2UgewotCQl0ZW1wLmludGVybGVhdmUgPSAxOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCB0YWJsZV9zaXplOyBpKyspIHsKLQkJaWYgKChtZnJfaWQgPT0gdGFibGVbaV0ubWZyX2lkKSAmJgotCQkgICAgKGRldl9pZCA9PSB0YWJsZVtpXS5kZXZfaWQpKSB7Ci0JCQlpZiAoY2hpcHMpIHsKLQkJCQlpbnQgajsKLQotCQkJCS8qIElzIHRoaXMgYW4gYWxpYXMgZm9yIGFuIGFscmVhZHkgZm91bmQgY2hpcD8KLQkJCQkgKiBJbiB0aGF0IGNhc2UgdGhhdCBjaGlwIHNob3VsZCBiZSBpbgotCQkJCSAqIGF1dG9zZWxlY3QgbW9kZSBub3cuCi0JCQkJICovCi0JCQkJZm9yIChqID0gMDsgaiA8IHByaXZhdGUtPm51bWNoaXBzOyBqKyspIHsKLQkJCQkJX191MzIgbWZyX2lkX290aGVyOwotCQkJCQlfX3UzMiBkZXZfaWRfb3RoZXI7Ci0KLQkJCQkJbWZyX2lkX290aGVyID0KLQkJCQkJCXdpZGVfcmVhZChtYXAsIGNoaXBzW2pdLnN0YXJ0ICsKLQkJCQkJCQkgICAgICAgKG1hcC0+YnVzd2lkdGggKgotCQkJCQkJCQlBRERSX01BTlVGQUNUVVJFUgotCQkJCQkJCSAgICAgICApKTsKLQkJCQkJZGV2X2lkX290aGVyID0KLQkJCQkJCXdpZGVfcmVhZChtYXAsIGNoaXBzW2pdLnN0YXJ0ICsKLQkJCQkJICAgIAkJICAgICAgIChtYXAtPmJ1c3dpZHRoICoKLQkJCQkJCQkgICAgICAgIEFERFJfREVWSUNFX0lEKSk7Ci0JCQkJCWlmICh0ZW1wLmludGVybGVhdmUgPT0gMikgewotCQkJCQkJbWZyX2lkX290aGVyICY9IDB4ZmZmZjsKLQkJCQkJCWRldl9pZF9vdGhlciAmPSAweGZmZmY7Ci0JCQkJCX0KLQkJCQkJaWYgKChtZnJfaWRfb3RoZXIgPT0gbWZyX2lkKSAmJgotCQkJCQkgICAgKGRldl9pZF9vdGhlciA9PSBkZXZfaWQpKSB7Ci0KLQkJCQkJCS8qIEV4aXQgYXV0b3NlbGVjdCBtb2RlLiAqLwotCQkJCQkJc2VuZF9jbWQobWFwLCBiYXNlLAotCQkJCQkJCSBDTURfUkVTRVRfREFUQSk7Ci0KLQkJCQkJCXJldHVybiAtMTsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWlmIChwcml2YXRlLT5udW1jaGlwcyA9PSBNQVhfQU1EX0NISVBTKSB7Ci0JCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkJICAgICAgICIlczogVG9vIG1hbnkgZmxhc2ggY2hpcHMgIgotCQkJCQkgICAgICAgImRldGVjdGVkLiBJbmNyZWFzZSAiCi0JCQkJCSAgICAgICAiTUFYX0FNRF9DSElQUyBmcm9tICVkLlxuIiwKLQkJCQkJICAgICAgIG1hcC0+bmFtZSwgTUFYX0FNRF9DSElQUyk7Ci0KLQkJCQkJcmV0dXJuIC0xOwotCQkJCX0KLQotCQkJCWNoaXBzW3ByaXZhdGUtPm51bWNoaXBzXS5zdGFydCA9IGJhc2U7Ci0JCQkJY2hpcHNbcHJpdmF0ZS0+bnVtY2hpcHNdLnN0YXRlID0gRkxfUkVBRFk7Ci0JCQkJY2hpcHNbcHJpdmF0ZS0+bnVtY2hpcHNdLm11dGV4ID0KLQkJCQkJJmNoaXBzW3ByaXZhdGUtPm51bWNoaXBzXS5fc3BpbmxvY2s7Ci0JCQkJcHJpdmF0ZS0+bnVtY2hpcHMrKzsKLQkJCX0KLQotCQkJcHJpbnRrKCIlczogRm91bmQgJWQgeCAlbGRNaUIgJXMgYXQgMHgleFxuIiwgbWFwLT5uYW1lLAotCQkJICAgICAgIHRlbXAuaW50ZXJsZWF2ZSwgKHRhYmxlW2ldLnNpemUpLygxMDI0KjEwMjQpLAotCQkJICAgICAgIHRhYmxlW2ldLm5hbWUsIGJhc2UpOwotCi0JCQltdGQtPnNpemUgKz0gdGFibGVbaV0uc2l6ZSAqIHRlbXAuaW50ZXJsZWF2ZTsKLQkJCW10ZC0+bnVtZXJhc2VyZWdpb25zICs9IHRhYmxlW2ldLm51bWVyYXNlcmVnaW9uczsKLQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBFeGl0IGF1dG9zZWxlY3QgbW9kZS4gKi8KLQlzZW5kX2NtZChtYXAsIGJhc2UsIENNRF9SRVNFVF9EQVRBKTsKLQotCWlmIChpID09IHRhYmxlX3NpemUpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bmtub3duIGZsYXNoIGRldmljZSBhdCAweCV4LCAiCi0JCSAgICAgICAibWZyIGlkIDB4JXgsIGRldiBpZCAweCV4XG4iLCBtYXAtPm5hbWUsCi0JCSAgICAgICBiYXNlLCBtZnJfaWQsIGRldl9pZCk7Ci0JCW1hcC0+ZmxkcnZfcHJpdiA9IE5VTEw7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCXByaXZhdGUtPmRldmljZV90eXBlID0gdGVtcC5kZXZpY2VfdHlwZTsKLQlwcml2YXRlLT5pbnRlcmxlYXZlID0gdGVtcC5pbnRlcmxlYXZlOwotCi0JcmV0dXJuIGk7Ci19Ci0KLQotCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICphbWRfZmxhc2hfcHJvYmUoc3RydWN0IG1hcF9pbmZvICptYXApCi17Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBhbWRfZmxhc2hfaW5mbyB0YWJsZVtdID0gewotCXsKLQkJLm1mcl9pZCA9IE1BTlVGQUNUVVJFUl9BTUQsCi0JCS5kZXZfaWQgPSBBTTI5TFYxNjBEVCwKLQkJLm5hbWUgPSAiQU1EIEFNMjlMVjE2MERUIiwKLQkJLnNpemUgPSAweDAwMjAwMDAwLAotCQkubnVtZXJhc2VyZWdpb25zID0gNCwKLQkJLnJlZ2lvbnMgPSB7Ci0JCQl7IC5vZmZzZXQgPSAweDAwMDAwMCwgLmVyYXNlc2l6ZSA9IDB4MTAwMDAsIC5udW1ibG9ja3MgPSAzMSB9LAotCQkJeyAub2Zmc2V0ID0gMHgxRjAwMDAsIC5lcmFzZXNpemUgPSAweDA4MDAwLCAubnVtYmxvY2tzID0gIDEgfSwKLQkJCXsgLm9mZnNldCA9IDB4MUY4MDAwLCAuZXJhc2VzaXplID0gMHgwMjAwMCwgLm51bWJsb2NrcyA9ICAyIH0sCi0JCQl7IC5vZmZzZXQgPSAweDFGQzAwMCwgLmVyYXNlc2l6ZSA9IDB4MDQwMDAsIC5udW1ibG9ja3MgPSAgMSB9Ci0JCX0KLQl9LCB7Ci0JCS5tZnJfaWQgPSBNQU5VRkFDVFVSRVJfQU1ELAotCQkuZGV2X2lkID0gQU0yOUxWMTYwREIsCi0JCS5uYW1lID0gIkFNRCBBTTI5TFYxNjBEQiIsCi0JCS5zaXplID0gMHgwMDIwMDAwMCwKLQkJLm51bWVyYXNlcmVnaW9ucyA9IDQsCi0JCS5yZWdpb25zID0gewotCQkJeyAub2Zmc2V0ID0gMHgwMDAwMDAsIC5lcmFzZXNpemUgPSAweDA0MDAwLCAubnVtYmxvY2tzID0gIDEgfSwKLQkJCXsgLm9mZnNldCA9IDB4MDA0MDAwLCAuZXJhc2VzaXplID0gMHgwMjAwMCwgLm51bWJsb2NrcyA9ICAyIH0sCi0JCQl7IC5vZmZzZXQgPSAweDAwODAwMCwgLmVyYXNlc2l6ZSA9IDB4MDgwMDAsIC5udW1ibG9ja3MgPSAgMSB9LAotCQkJeyAub2Zmc2V0ID0gMHgwMTAwMDAsIC5lcmFzZXNpemUgPSAweDEwMDAwLCAubnVtYmxvY2tzID0gMzEgfQotCQl9Ci0JfSwgewotCQkubWZyX2lkID0gTUFOVUZBQ1RVUkVSX1RPU0hJQkEsCi0JCS5kZXZfaWQgPSBUQzU4RlZUMTYwLAotCQkubmFtZSA9ICJUb3NoaWJhIFRDNThGVlQxNjAiLAotCQkuc2l6ZSA9IDB4MDAyMDAwMDAsCi0JCS5udW1lcmFzZXJlZ2lvbnMgPSA0LAotCQkucmVnaW9ucyA9IHsKLQkJCXsgLm9mZnNldCA9IDB4MDAwMDAwLCAuZXJhc2VzaXplID0gMHgxMDAwMCwgLm51bWJsb2NrcyA9IDMxIH0sCi0JCQl7IC5vZmZzZXQgPSAweDFGMDAwMCwgLmVyYXNlc2l6ZSA9IDB4MDgwMDAsIC5udW1ibG9ja3MgPSAgMSB9LAotCQkJeyAub2Zmc2V0ID0gMHgxRjgwMDAsIC5lcmFzZXNpemUgPSAweDAyMDAwLCAubnVtYmxvY2tzID0gIDIgfSwKLQkJCXsgLm9mZnNldCA9IDB4MUZDMDAwLCAuZXJhc2VzaXplID0gMHgwNDAwMCwgLm51bWJsb2NrcyA9ICAxIH0KLQkJfQotCX0sIHsKLQkJLm1mcl9pZCA9IE1BTlVGQUNUVVJFUl9GVUpJVFNVLAotCQkuZGV2X2lkID0gTUJNMjlMVjE2MFRFLAotCQkubmFtZSA9ICJGdWppdHN1IE1CTTI5TFYxNjBURSIsCi0JCS5zaXplID0gMHgwMDIwMDAwMCwKLQkJLm51bWVyYXNlcmVnaW9ucyA9IDQsCi0JCS5yZWdpb25zID0gewotCQkJeyAub2Zmc2V0ID0gMHgwMDAwMDAsIC5lcmFzZXNpemUgPSAweDEwMDAwLCAubnVtYmxvY2tzID0gMzEgfSwKLQkJCXsgLm9mZnNldCA9IDB4MUYwMDAwLCAuZXJhc2VzaXplID0gMHgwODAwMCwgLm51bWJsb2NrcyA9ICAxIH0sCi0JCQl7IC5vZmZzZXQgPSAweDFGODAwMCwgLmVyYXNlc2l6ZSA9IDB4MDIwMDAsIC5udW1ibG9ja3MgPSAgMiB9LAotCQkJeyAub2Zmc2V0ID0gMHgxRkMwMDAsIC5lcmFzZXNpemUgPSAweDA0MDAwLCAubnVtYmxvY2tzID0gIDEgfQotCQl9Ci0JfSwgewotCQkubWZyX2lkID0gTUFOVUZBQ1RVUkVSX1RPU0hJQkEsCi0JCS5kZXZfaWQgPSBUQzU4RlZCMTYwLAotCQkubmFtZSA9ICJUb3NoaWJhIFRDNThGVkIxNjAiLAotCQkuc2l6ZSA9IDB4MDAyMDAwMDAsCi0JCS5udW1lcmFzZXJlZ2lvbnMgPSA0LAotCQkucmVnaW9ucyA9IHsKLQkJCXsgLm9mZnNldCA9IDB4MDAwMDAwLCAuZXJhc2VzaXplID0gMHgwNDAwMCwgLm51bWJsb2NrcyA9ICAxIH0sCi0JCQl7IC5vZmZzZXQgPSAweDAwNDAwMCwgLmVyYXNlc2l6ZSA9IDB4MDIwMDAsIC5udW1ibG9ja3MgPSAgMiB9LAotCQkJeyAub2Zmc2V0ID0gMHgwMDgwMDAsIC5lcmFzZXNpemUgPSAweDA4MDAwLCAubnVtYmxvY2tzID0gIDEgfSwKLQkJCXsgLm9mZnNldCA9IDB4MDEwMDAwLCAuZXJhc2VzaXplID0gMHgxMDAwMCwgLm51bWJsb2NrcyA9IDMxIH0KLQkJfQotCX0sIHsKLQkJLm1mcl9pZCA9IE1BTlVGQUNUVVJFUl9GVUpJVFNVLAotCQkuZGV2X2lkID0gTUJNMjlMVjE2MEJFLAotCQkubmFtZSA9ICJGdWppdHN1IE1CTTI5TFYxNjBCRSIsCi0JCS5zaXplID0gMHgwMDIwMDAwMCwKLQkJLm51bWVyYXNlcmVnaW9ucyA9IDQsCi0JCS5yZWdpb25zID0gewotCQkJeyAub2Zmc2V0ID0gMHgwMDAwMDAsIC5lcmFzZXNpemUgPSAweDA0MDAwLCAubnVtYmxvY2tzID0gIDEgfSwKLQkJCXsgLm9mZnNldCA9IDB4MDA0MDAwLCAuZXJhc2VzaXplID0gMHgwMjAwMCwgLm51bWJsb2NrcyA9ICAyIH0sCi0JCQl7IC5vZmZzZXQgPSAweDAwODAwMCwgLmVyYXNlc2l6ZSA9IDB4MDgwMDAsIC5udW1ibG9ja3MgPSAgMSB9LAotCQkJeyAub2Zmc2V0ID0gMHgwMTAwMDAsIC5lcmFzZXNpemUgPSAweDEwMDAwLCAubnVtYmxvY2tzID0gMzEgfQotCQl9Ci0JfSwgewotCQkubWZyX2lkID0gTUFOVUZBQ1RVUkVSX0FNRCwKLQkJLmRldl9pZCA9IEFNMjlMVjgwMEJCLAotCQkubmFtZSA9ICJBTUQgQU0yOUxWODAwQkIiLAotCQkuc2l6ZSA9IDB4MDAxMDAwMDAsCi0JCS5udW1lcmFzZXJlZ2lvbnMgPSA0LAotCQkucmVnaW9ucyA9IHsKLQkJCXsgLm9mZnNldCA9IDB4MDAwMDAwLCAuZXJhc2VzaXplID0gMHgwNDAwMCwgLm51bWJsb2NrcyA9ICAxIH0sCi0JCQl7IC5vZmZzZXQgPSAweDAwNDAwMCwgLmVyYXNlc2l6ZSA9IDB4MDIwMDAsIC5udW1ibG9ja3MgPSAgMiB9LAotCQkJeyAub2Zmc2V0ID0gMHgwMDgwMDAsIC5lcmFzZXNpemUgPSAweDA4MDAwLCAubnVtYmxvY2tzID0gIDEgfSwKLQkJCXsgLm9mZnNldCA9IDB4MDEwMDAwLCAuZXJhc2VzaXplID0gMHgxMDAwMCwgLm51bWJsb2NrcyA9IDE1IH0KLQkJfQotCX0sIHsKLQkJLm1mcl9pZCA9IE1BTlVGQUNUVVJFUl9BTUQsCi0JCS5kZXZfaWQgPSBBTTI5RjgwMEJCLAotCQkubmFtZSA9ICJBTUQgQU0yOUY4MDBCQiIsCi0JCS5zaXplID0gMHgwMDEwMDAwMCwKLQkJLm51bWVyYXNlcmVnaW9ucyA9IDQsCi0JCS5yZWdpb25zID0gewotCQkJeyAub2Zmc2V0ID0gMHgwMDAwMDAsIC5lcmFzZXNpemUgPSAweDA0MDAwLCAubnVtYmxvY2tzID0gIDEgfSwKLQkJCXsgLm9mZnNldCA9IDB4MDA0MDAwLCAuZXJhc2VzaXplID0gMHgwMjAwMCwgLm51bWJsb2NrcyA9ICAyIH0sCi0JCQl7IC5vZmZzZXQgPSAweDAwODAwMCwgLmVyYXNlc2l6ZSA9IDB4MDgwMDAsIC5udW1ibG9ja3MgPSAgMSB9LAotCQkJeyAub2Zmc2V0ID0gMHgwMTAwMDAsIC5lcmFzZXNpemUgPSAweDEwMDAwLCAubnVtYmxvY2tzID0gMTUgfQotCQl9Ci0JfSwgewotCQkubWZyX2lkID0gTUFOVUZBQ1RVUkVSX0FNRCwKLQkJLmRldl9pZCA9IEFNMjlMVjgwMEJULAotCQkubmFtZSA9ICJBTUQgQU0yOUxWODAwQlQiLAotCQkuc2l6ZSA9IDB4MDAxMDAwMDAsCi0JCS5udW1lcmFzZXJlZ2lvbnMgPSA0LAotCQkucmVnaW9ucyA9IHsKLQkJCXsgLm9mZnNldCA9IDB4MDAwMDAwLCAuZXJhc2VzaXplID0gMHgxMDAwMCwgLm51bWJsb2NrcyA9IDE1IH0sCi0JCQl7IC5vZmZzZXQgPSAweDBGMDAwMCwgLmVyYXNlc2l6ZSA9IDB4MDgwMDAsIC5udW1ibG9ja3MgPSAgMSB9LAotCQkJeyAub2Zmc2V0ID0gMHgwRjgwMDAsIC5lcmFzZXNpemUgPSAweDAyMDAwLCAubnVtYmxvY2tzID0gIDIgfSwKLQkJCXsgLm9mZnNldCA9IDB4MEZDMDAwLCAuZXJhc2VzaXplID0gMHgwNDAwMCwgLm51bWJsb2NrcyA9ICAxIH0KLQkJfQotCX0sIHsKLQkJLm1mcl9pZCA9IE1BTlVGQUNUVVJFUl9BTUQsCi0JCS5kZXZfaWQgPSBBTTI5RjgwMEJULAotCQkubmFtZSA9ICJBTUQgQU0yOUY4MDBCVCIsCi0JCS5zaXplID0gMHgwMDEwMDAwMCwKLQkJLm51bWVyYXNlcmVnaW9ucyA9IDQsCi0JCS5yZWdpb25zID0gewotCQkJeyAub2Zmc2V0ID0gMHgwMDAwMDAsIC5lcmFzZXNpemUgPSAweDEwMDAwLCAubnVtYmxvY2tzID0gMTUgfSwKLQkJCXsgLm9mZnNldCA9IDB4MEYwMDAwLCAuZXJhc2VzaXplID0gMHgwODAwMCwgLm51bWJsb2NrcyA9ICAxIH0sCi0JCQl7IC5vZmZzZXQgPSAweDBGODAwMCwgLmVyYXNlc2l6ZSA9IDB4MDIwMDAsIC5udW1ibG9ja3MgPSAgMiB9LAotCQkJeyAub2Zmc2V0ID0gMHgwRkMwMDAsIC5lcmFzZXNpemUgPSAweDA0MDAwLCAubnVtYmxvY2tzID0gIDEgfQotCQl9Ci0JfSwgewotCQkubWZyX2lkID0gTUFOVUZBQ1RVUkVSX0FNRCwKLQkJLmRldl9pZCA9IEFNMjlMVjgwMEJCLAotCQkubmFtZSA9ICJBTUQgQU0yOUxWODAwQkIiLAotCQkuc2l6ZSA9IDB4MDAxMDAwMDAsCi0JCS5udW1lcmFzZXJlZ2lvbnMgPSA0LAotCQkucmVnaW9ucyA9IHsKLQkJCXsgLm9mZnNldCA9IDB4MDAwMDAwLCAuZXJhc2VzaXplID0gMHgxMDAwMCwgLm51bWJsb2NrcyA9IDE1IH0sCi0JCQl7IC5vZmZzZXQgPSAweDBGMDAwMCwgLmVyYXNlc2l6ZSA9IDB4MDgwMDAsIC5udW1ibG9ja3MgPSAgMSB9LAotCQkJeyAub2Zmc2V0ID0gMHgwRjgwMDAsIC5lcmFzZXNpemUgPSAweDAyMDAwLCAubnVtYmxvY2tzID0gIDIgfSwKLQkJCXsgLm9mZnNldCA9IDB4MEZDMDAwLCAuZXJhc2VzaXplID0gMHgwNDAwMCwgLm51bWJsb2NrcyA9ICAxIH0KLQkJfQotCX0sIHsKLQkJLm1mcl9pZCA9IE1BTlVGQUNUVVJFUl9GVUpJVFNVLAotCQkuZGV2X2lkID0gTUJNMjlMVjgwMEJCLAotCQkubmFtZSA9ICJGdWppdHN1IE1CTTI5TFY4MDBCQiIsCi0JCS5zaXplID0gMHgwMDEwMDAwMCwKLQkJLm51bWVyYXNlcmVnaW9ucyA9IDQsCi0JCS5yZWdpb25zID0gewotCQkJeyAub2Zmc2V0ID0gMHgwMDAwMDAsIC5lcmFzZXNpemUgPSAweDA0MDAwLCAubnVtYmxvY2tzID0gIDEgfSwKLQkJCXsgLm9mZnNldCA9IDB4MDA0MDAwLCAuZXJhc2VzaXplID0gMHgwMjAwMCwgLm51bWJsb2NrcyA9ICAyIH0sCi0JCQl7IC5vZmZzZXQgPSAweDAwODAwMCwgLmVyYXNlc2l6ZSA9IDB4MDgwMDAsIC5udW1ibG9ja3MgPSAgMSB9LAotCQkJeyAub2Zmc2V0ID0gMHgwMTAwMDAsIC5lcmFzZXNpemUgPSAweDEwMDAwLCAubnVtYmxvY2tzID0gMTUgfQotCQl9Ci0JfSwgewotCQkubWZyX2lkID0gTUFOVUZBQ1RVUkVSX1NULAotCQkuZGV2X2lkID0gTTI5VzgwMFQsCi0JCS5uYW1lID0gIlNUIE0yOVc4MDBUIiwKLQkJLnNpemUgPSAweDAwMTAwMDAwLAotCQkubnVtZXJhc2VyZWdpb25zID0gNCwKLQkJLnJlZ2lvbnMgPSB7Ci0JCQl7IC5vZmZzZXQgPSAweDAwMDAwMCwgLmVyYXNlc2l6ZSA9IDB4MTAwMDAsIC5udW1ibG9ja3MgPSAxNSB9LAotCQkJeyAub2Zmc2V0ID0gMHgwRjAwMDAsIC5lcmFzZXNpemUgPSAweDA4MDAwLCAubnVtYmxvY2tzID0gIDEgfSwKLQkJCXsgLm9mZnNldCA9IDB4MEY4MDAwLCAuZXJhc2VzaXplID0gMHgwMjAwMCwgLm51bWJsb2NrcyA9ICAyIH0sCi0JCQl7IC5vZmZzZXQgPSAweDBGQzAwMCwgLmVyYXNlc2l6ZSA9IDB4MDQwMDAsIC5udW1ibG9ja3MgPSAgMSB9Ci0JCX0KLQl9LCB7Ci0JCS5tZnJfaWQgPSBNQU5VRkFDVFVSRVJfU1QsCi0JCS5kZXZfaWQgPSBNMjlXMTYwRFQsCi0JCS5uYW1lID0gIlNUIE0yOVcxNjBEVCIsCi0JCS5zaXplID0gMHgwMDIwMDAwMCwKLQkJLm51bWVyYXNlcmVnaW9ucyA9IDQsCi0JCS5yZWdpb25zID0gewotCQkJeyAub2Zmc2V0ID0gMHgwMDAwMDAsIC5lcmFzZXNpemUgPSAweDEwMDAwLCAubnVtYmxvY2tzID0gMzEgfSwKLQkJCXsgLm9mZnNldCA9IDB4MUYwMDAwLCAuZXJhc2VzaXplID0gMHgwODAwMCwgLm51bWJsb2NrcyA9ICAxIH0sCi0JCQl7IC5vZmZzZXQgPSAweDFGODAwMCwgLmVyYXNlc2l6ZSA9IDB4MDIwMDAsIC5udW1ibG9ja3MgPSAgMiB9LAotCQkJeyAub2Zmc2V0ID0gMHgxRkMwMDAsIC5lcmFzZXNpemUgPSAweDA0MDAwLCAubnVtYmxvY2tzID0gIDEgfQotCQl9Ci0JfSwgewotCQkubWZyX2lkID0gTUFOVUZBQ1RVUkVSX1NULAotCQkuZGV2X2lkID0gTTI5VzE2MERCLAotCQkubmFtZSA9ICJTVCBNMjlXMTYwREIiLAotCQkuc2l6ZSA9IDB4MDAyMDAwMDAsCi0JCS5udW1lcmFzZXJlZ2lvbnMgPSA0LAotCQkucmVnaW9ucyA9IHsKLQkJCXsgLm9mZnNldCA9IDB4MDAwMDAwLCAuZXJhc2VzaXplID0gMHgwNDAwMCwgLm51bWJsb2NrcyA9ICAxIH0sCi0JCQl7IC5vZmZzZXQgPSAweDAwNDAwMCwgLmVyYXNlc2l6ZSA9IDB4MDIwMDAsIC5udW1ibG9ja3MgPSAgMiB9LAotCQkJeyAub2Zmc2V0ID0gMHgwMDgwMDAsIC5lcmFzZXNpemUgPSAweDA4MDAwLCAubnVtYmxvY2tzID0gIDEgfSwKLQkJCXsgLm9mZnNldCA9IDB4MDEwMDAwLCAuZXJhc2VzaXplID0gMHgxMDAwMCwgLm51bWJsb2NrcyA9IDMxIH0KLQkJfQotCX0sIHsKLQkJLm1mcl9pZCA9IE1BTlVGQUNUVVJFUl9BTUQsCi0JCS5kZXZfaWQgPSBBTTI5QkRTMzIzRCwKLQkJLm5hbWUgPSAiQU1EIEFNMjlCRFMzMjNEIiwKLQkJLnNpemUgPSAweDAwNDAwMDAwLAotCQkubnVtZXJhc2VyZWdpb25zID0gMywKLQkJLnJlZ2lvbnMgPSB7Ci0JCQl7IC5vZmZzZXQgPSAweDAwMDAwMCwgLmVyYXNlc2l6ZSA9IDB4MTAwMDAsIC5udW1ibG9ja3MgPSA0OCB9LAotCQkJeyAub2Zmc2V0ID0gMHgzMDAwMDAsIC5lcmFzZXNpemUgPSAweDEwMDAwLCAubnVtYmxvY2tzID0gMTUgfSwKLQkJCXsgLm9mZnNldCA9IDB4M2YwMDAwLCAuZXJhc2VzaXplID0gMHgwMjAwMCwgLm51bWJsb2NrcyA9ICA4IH0sCi0JCX0KLQl9LCB7Ci0JCS5tZnJfaWQgPSBNQU5VRkFDVFVSRVJfQVRNRUwsCi0JCS5kZXZfaWQgPSBBVDQ5eFYxNngsCi0JCS5uYW1lID0gIkF0bWVsIEFUNDl4VjE2eCIsCi0JCS5zaXplID0gMHgwMDIwMDAwMCwKLQkJLm51bWVyYXNlcmVnaW9ucyA9IDIsCi0JCS5yZWdpb25zID0gewotCQkJeyAub2Zmc2V0ID0gMHgwMDAwMDAsIC5lcmFzZXNpemUgPSAweDAyMDAwLCAubnVtYmxvY2tzID0gIDggfSwKLQkJCXsgLm9mZnNldCA9IDB4MDEwMDAwLCAuZXJhc2VzaXplID0gMHgxMDAwMCwgLm51bWJsb2NrcyA9IDMxIH0KLQkJfQotCX0sIHsKLQkJLm1mcl9pZCA9IE1BTlVGQUNUVVJFUl9BVE1FTCwKLQkJLmRldl9pZCA9IEFUNDl4VjE2eFQsCi0JCS5uYW1lID0gIkF0bWVsIEFUNDl4VjE2eFQiLAotCQkuc2l6ZSA9IDB4MDAyMDAwMDAsCi0JCS5udW1lcmFzZXJlZ2lvbnMgPSAyLAotCQkucmVnaW9ucyA9IHsKLQkJCXsgLm9mZnNldCA9IDB4MDAwMDAwLCAuZXJhc2VzaXplID0gMHgxMDAwMCwgLm51bWJsb2NrcyA9IDMxIH0sCi0JCQl7IC5vZmZzZXQgPSAweDFGMDAwMCwgLmVyYXNlc2l6ZSA9IDB4MDIwMDAsIC5udW1ibG9ja3MgPSAgOCB9Ci0JCX0KLQl9Ci0JfTsKLQotCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwotCXN0cnVjdCBmbGNoaXAgY2hpcHNbTUFYX0FNRF9DSElQU107Ci0JaW50IHRhYmxlX3Bvc1tNQVhfQU1EX0NISVBTXTsKLQlzdHJ1Y3QgYW1kX2ZsYXNoX3ByaXZhdGUgdGVtcDsKLQlzdHJ1Y3QgYW1kX2ZsYXNoX3ByaXZhdGUgKnByaXZhdGU7Ci0JdV9sb25nIHNpemU7Ci0JdW5zaWduZWQgbG9uZyBiYXNlOwotCWludCBpOwotCWludCByZWdfaWR4OwotCWludCBvZmZzZXQ7Ci0KLQltdGQgPSBremFsbG9jKHNpemVvZigqbXRkKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtdGQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIiVzOiBrbWFsbG9jIGZhaWxlZCBmb3IgaW5mbyBzdHJ1Y3R1cmVcbiIsIG1hcC0+bmFtZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQltdGQtPnByaXYgPSBtYXA7Ci0KLQltZW1zZXQoJnRlbXAsIDAsIHNpemVvZih0ZW1wKSk7Ci0KLQlwcmludGsoIiVzOiBQcm9iaW5nIGZvciBBTUQgY29tcGF0aWJsZSBmbGFzaC4uLlxuIiwgbWFwLT5uYW1lKTsKLQotCWlmICgodGFibGVfcG9zWzBdID0gcHJvYmVfbmV3X2NoaXAobXRkLCAwLCBOVUxMLCAmdGVtcCwgdGFibGUsCi0JCQkJCSAgIEFSUkFZX1NJWkUodGFibGUpKSkKLQkgICAgPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIiVzOiBGb3VuZCBubyBBTUQgY29tcGF0aWJsZSBkZXZpY2UgYXQgbG9jYXRpb24gemVyb1xuIiwKLQkJICAgICAgIG1hcC0+bmFtZSk7Ci0JCWtmcmVlKG10ZCk7Ci0KLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JY2hpcHNbMF0uc3RhcnQgPSAwOwotCWNoaXBzWzBdLnN0YXRlID0gRkxfUkVBRFk7Ci0JY2hpcHNbMF0ubXV0ZXggPSAmY2hpcHNbMF0uX3NwaW5sb2NrOwotCXRlbXAubnVtY2hpcHMgPSAxOwotCWZvciAoc2l6ZSA9IG10ZC0+c2l6ZTsgc2l6ZSA+IDE7IHNpemUgPj49IDEpIHsKLQkJdGVtcC5jaGlwc2hpZnQrKzsKLQl9Ci0Jc3dpdGNoICh0ZW1wLmludGVybGVhdmUpIHsKLQkJY2FzZSAyOgotCQkJdGVtcC5jaGlwc2hpZnQgKz0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQl0ZW1wLmNoaXBzaGlmdCArPSAyOwotCQkJYnJlYWs7Ci0JfQotCi0JLyogRmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSBtb3JlIGNoaXBzIGluIHRoZSBtYXAuICovCi0JZm9yIChiYXNlID0gKDEgPDwgdGVtcC5jaGlwc2hpZnQpOwotCSAgICAgYmFzZSA8IG1hcC0+c2l6ZTsKLQkgICAgIGJhc2UgKz0gKDEgPDwgdGVtcC5jaGlwc2hpZnQpKSB7Ci0JICAgICAJaW50IG51bWNoaXBzID0gdGVtcC5udW1jaGlwczsKLQkJdGFibGVfcG9zW251bWNoaXBzXSA9IHByb2JlX25ld19jaGlwKG10ZCwgYmFzZSwgY2hpcHMsCi0JCQkmdGVtcCwgdGFibGUsIEFSUkFZX1NJWkUodGFibGUpKTsKLQl9Ci0KLQltdGQtPmVyYXNlcmVnaW9ucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8pICoKLQkJCQkgICAgbXRkLT5udW1lcmFzZXJlZ2lvbnMsIEdGUF9LRVJORUwpOwotCWlmICghbXRkLT5lcmFzZXJlZ2lvbnMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSAiCi0JCSAgICAgICAibWVtb3J5IGZvciBNVEQgZXJhc2UgcmVnaW9uIGluZm9cbiIsIG1hcC0+bmFtZSk7Ci0JCWtmcmVlKG10ZCk7Ci0JCW1hcC0+ZmxkcnZfcHJpdiA9IE5VTEw7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJlZ19pZHggPSAwOwotCW9mZnNldCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHRlbXAubnVtY2hpcHM7IGkrKykgewotCQlpbnQgZGV2X3NpemU7Ci0JCWludCBqOwotCi0JCWRldl9zaXplID0gMDsKLQkJZm9yIChqID0gMDsgaiA8IHRhYmxlW3RhYmxlX3Bvc1tpXV0ubnVtZXJhc2VyZWdpb25zOyBqKyspIHsKLQkJCW10ZC0+ZXJhc2VyZWdpb25zW3JlZ19pZHhdLm9mZnNldCA9IG9mZnNldCArCi0JCQkJKHRhYmxlW3RhYmxlX3Bvc1tpXV0ucmVnaW9uc1tqXS5vZmZzZXQgKgotCQkJCSB0ZW1wLmludGVybGVhdmUpOwotCQkJbXRkLT5lcmFzZXJlZ2lvbnNbcmVnX2lkeF0uZXJhc2VzaXplID0KLQkJCQl0YWJsZVt0YWJsZV9wb3NbaV1dLnJlZ2lvbnNbal0uZXJhc2VzaXplICoKLQkJCQl0ZW1wLmludGVybGVhdmU7Ci0JCQltdGQtPmVyYXNlcmVnaW9uc1tyZWdfaWR4XS5udW1ibG9ja3MgPQotCQkJCXRhYmxlW3RhYmxlX3Bvc1tpXV0ucmVnaW9uc1tqXS5udW1ibG9ja3M7Ci0JCQlpZiAobXRkLT5lcmFzZXNpemUgPAotCQkJICAgIG10ZC0+ZXJhc2VyZWdpb25zW3JlZ19pZHhdLmVyYXNlc2l6ZSkgewotCQkJCW10ZC0+ZXJhc2VzaXplID0KLQkJCQkJbXRkLT5lcmFzZXJlZ2lvbnNbcmVnX2lkeF0uZXJhc2VzaXplOwotCQkJfQotCQkJZGV2X3NpemUgKz0gbXRkLT5lcmFzZXJlZ2lvbnNbcmVnX2lkeF0uZXJhc2VzaXplICoKLQkJCQkgICAgbXRkLT5lcmFzZXJlZ2lvbnNbcmVnX2lkeF0ubnVtYmxvY2tzOwotCQkJcmVnX2lkeCsrOwotCQl9Ci0JCW9mZnNldCArPSBkZXZfc2l6ZTsKLQl9Ci0JbXRkLT50eXBlID0gTVREX05PUkZMQVNIOwotCW10ZC0+d3JpdGVzaXplID0gMTsKLQltdGQtPmZsYWdzID0gTVREX0NBUF9OT1JGTEFTSDsKLQltdGQtPm5hbWUgPSBtYXAtPm5hbWU7Ci0JbXRkLT5lcmFzZSA9IGFtZF9mbGFzaF9lcmFzZTsKLQltdGQtPnJlYWQgPSBhbWRfZmxhc2hfcmVhZDsKLQltdGQtPndyaXRlID0gYW1kX2ZsYXNoX3dyaXRlOwotCW10ZC0+c3luYyA9IGFtZF9mbGFzaF9zeW5jOwotCW10ZC0+c3VzcGVuZCA9IGFtZF9mbGFzaF9zdXNwZW5kOwotCW10ZC0+cmVzdW1lID0gYW1kX2ZsYXNoX3Jlc3VtZTsKLQltdGQtPmxvY2sgPSBhbWRfZmxhc2hfbG9jazsKLQltdGQtPnVubG9jayA9IGFtZF9mbGFzaF91bmxvY2s7Ci0KLQlwcml2YXRlID0ga21hbGxvYyhzaXplb2YoKnByaXZhdGUpICsgKHNpemVvZihzdHJ1Y3QgZmxjaGlwKSAqCi0JCQkJCSAgICAgIHRlbXAubnVtY2hpcHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXZhdGUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIiVzOiBrbWFsbG9jIGZhaWxlZCBmb3IgcHJpdmF0ZSBzdHJ1Y3R1cmVcbiIsIG1hcC0+bmFtZSk7Ci0JCWtmcmVlKG10ZCk7Ci0JCW1hcC0+ZmxkcnZfcHJpdiA9IE5VTEw7Ci0JCXJldHVybiBOVUxMOwotCX0KLQltZW1jcHkocHJpdmF0ZSwgJnRlbXAsIHNpemVvZih0ZW1wKSk7Ci0JbWVtY3B5KHByaXZhdGUtPmNoaXBzLCBjaGlwcywKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmbGNoaXApICogcHJpdmF0ZS0+bnVtY2hpcHMpOwotCWZvciAoaSA9IDA7IGkgPCBwcml2YXRlLT5udW1jaGlwczsgaSsrKSB7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXZhdGUtPmNoaXBzW2ldLndxKTsKLQkJc3Bpbl9sb2NrX2luaXQoJnByaXZhdGUtPmNoaXBzW2ldLl9zcGlubG9jayk7Ci0JfQotCi0JbWFwLT5mbGRydl9wcml2ID0gcHJpdmF0ZTsKLQotCW1hcC0+ZmxkcnYgPSAmYW1kX2ZsYXNoX2NoaXBkcnY7Ci0KLQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwotCXJldHVybiBtdGQ7Ci19Ci0KLQotCi1zdGF0aWMgaW5saW5lIGludCByZWFkX29uZV9jaGlwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLAotCQkJICAgICAgIGxvZmZfdCBhZHIsIHNpemVfdCBsZW4sIHVfY2hhciAqYnVmKQotewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCXVuc2lnbmVkIGxvbmcgdGltZW8gPSBqaWZmaWVzICsgSFo7Ci0KLXJldHJ5OgotCXNwaW5fbG9ja19iaChjaGlwLT5tdXRleCk7Ci0KLQlpZiAoY2hpcC0+c3RhdGUgIT0gRkxfUkVBRFkpewotCQlwcmludGsoS0VSTl9JTkZPICIlczogd2FpdGluZyBmb3IgY2hpcCB0byByZWFkLCBzdGF0ZSA9ICVkXG4iLAotCQkgICAgICAgbWFwLT5uYW1lLCBjaGlwLT5zdGF0ZSk7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJYWRkX3dhaXRfcXVldWUoJmNoaXAtPndxLCAmd2FpdCk7Ci0KLQkJc3Bpbl91bmxvY2tfYmgoY2hpcC0+bXV0ZXgpOwotCi0JCXNjaGVkdWxlKCk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCi0JCWlmKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXR1cm4gLUVJTlRSOwotCQl9Ci0KLQkJdGltZW8gPSBqaWZmaWVzICsgSFo7Ci0KLQkJZ290byByZXRyeTsKLQl9Ci0KLQlhZHIgKz0gY2hpcC0+c3RhcnQ7Ci0KLQljaGlwLT5zdGF0ZSA9IEZMX1JFQURZOwotCi0JbWFwX2NvcHlfZnJvbShtYXAsIGJ1ZiwgYWRyLCBsZW4pOwotCi0Jd2FrZV91cCgmY2hpcC0+d3EpOwotCXNwaW5fdW5sb2NrX2JoKGNoaXAtPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi0KLQotc3RhdGljIGludCBhbWRfZmxhc2hfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCQkgIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgYW1kX2ZsYXNoX3ByaXZhdGUgKnByaXZhdGUgPSBtYXAtPmZsZHJ2X3ByaXY7Ci0JdW5zaWduZWQgbG9uZyBvZnM7Ci0JaW50IGNoaXBudW07Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoKGZyb20gKyBsZW4pID4gbXRkLT5zaXplKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZWFkIHJlcXVlc3QgcGFzdCBlbmQgb2YgZGV2aWNlICIKLQkJICAgICAgICIoMHglbHgpXG4iLCBtYXAtPm5hbWUsICh1bnNpZ25lZCBsb25nKWZyb20gKyBsZW4pOwotCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIE9mZnNldCB3aXRoaW4gdGhlIGZpcnN0IGNoaXAgdGhhdCB0aGUgZmlyc3QgcmVhZCBzaG91bGQgc3RhcnQuICovCi0JY2hpcG51bSA9IChmcm9tID4+IHByaXZhdGUtPmNoaXBzaGlmdCk7Ci0Jb2ZzID0gZnJvbSAtIChjaGlwbnVtIDw8ICBwcml2YXRlLT5jaGlwc2hpZnQpOwotCi0JKnJldGxlbiA9IDA7Ci0KLQl3aGlsZSAobGVuKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdGhpc19sZW47Ci0KLQkJaWYgKGNoaXBudW0gPj0gcHJpdmF0ZS0+bnVtY2hpcHMpIHsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKChsZW4gKyBvZnMgLSAxKSA+PiBwcml2YXRlLT5jaGlwc2hpZnQpIHsKLQkJCXRoaXNfbGVuID0gKDEgPDwgcHJpdmF0ZS0+Y2hpcHNoaWZ0KSAtIG9mczsKLQkJfSBlbHNlIHsKLQkJCXRoaXNfbGVuID0gbGVuOwotCQl9Ci0KLQkJcmV0ID0gcmVhZF9vbmVfY2hpcChtYXAsICZwcml2YXRlLT5jaGlwc1tjaGlwbnVtXSwgb2ZzLAotCQkJCSAgICB0aGlzX2xlbiwgYnVmKTsKLQkJaWYgKHJldCkgewotCQkJYnJlYWs7Ci0JCX0KLQotCQkqcmV0bGVuICs9IHRoaXNfbGVuOwotCQlsZW4gLT0gdGhpc19sZW47Ci0JCWJ1ZiArPSB0aGlzX2xlbjsKLQotCQlvZnMgPSAwOwotCQljaGlwbnVtKys7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotCi0KLXN0YXRpYyBpbnQgd3JpdGVfb25lX3dvcmQoc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCi0JCQkgIHVuc2lnbmVkIGxvbmcgYWRyLCBfX3UzMiBkYXR1bSkKLXsKLQl1bnNpZ25lZCBsb25nIHRpbWVvID0gamlmZmllcyArIEhaOwotCXN0cnVjdCBhbWRfZmxhc2hfcHJpdmF0ZSAqcHJpdmF0ZSA9IG1hcC0+ZmxkcnZfcHJpdjsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgdGltZXNfbGVmdDsKLQotcmV0cnk6Ci0Jc3Bpbl9sb2NrX2JoKGNoaXAtPm11dGV4KTsKLQotCWlmIChjaGlwLT5zdGF0ZSAhPSBGTF9SRUFEWSl7Ci0JCXByaW50aygiJXM6IHdhaXRpbmcgZm9yIGNoaXAgdG8gd3JpdGUsIHN0YXRlID0gJWRcbiIsCi0JCSAgICAgICBtYXAtPm5hbWUsIGNoaXAtPnN0YXRlKTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQlhZGRfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQotCQlzcGluX3VubG9ja19iaChjaGlwLT5tdXRleCk7Ci0KLQkJc2NoZWR1bGUoKTsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoJmNoaXAtPndxLCAmd2FpdCk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiB3b2tlIHVwIHRvIHdyaXRlXG4iLCBtYXAtPm5hbWUpOwotCQlpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCXJldHVybiAtRUlOVFI7Ci0KLQkJdGltZW8gPSBqaWZmaWVzICsgSFo7Ci0KLQkJZ290byByZXRyeTsKLQl9Ci0KLQljaGlwLT5zdGF0ZSA9IEZMX1dSSVRJTkc7Ci0KLQlhZHIgKz0gY2hpcC0+c3RhcnQ7Ci0JRU5BQkxFX1ZQUChtYXApOwotCXNlbmRfY21kKG1hcCwgY2hpcC0+c3RhcnQsIENNRF9QUk9HUkFNX1VOTE9DS19EQVRBKTsKLQl3aWRlX3dyaXRlKG1hcCwgZGF0dW0sIGFkcik7Ci0KLQl0aW1lc19sZWZ0ID0gNTAwMDAwOwotCXdoaWxlICh0aW1lc19sZWZ0LS0gJiYgZmxhc2hfaXNfYnVzeShtYXAsIGFkciwgcHJpdmF0ZS0+aW50ZXJsZWF2ZSkpIHsKLQkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7Ci0JCQlzcGluX3VubG9ja19iaChjaGlwLT5tdXRleCk7Ci0JCQlzY2hlZHVsZSgpOwotCQkJc3Bpbl9sb2NrX2JoKGNoaXAtPm11dGV4KTsKLQkJfQotCX0KLQotCWlmICghdGltZXNfbGVmdCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogd3JpdGUgdG8gMHglbHggdGltZWQgb3V0IVxuIiwKLQkJICAgICAgIG1hcC0+bmFtZSwgYWRyKTsKLQkJcmV0ID0gLUVJTzsKLQl9IGVsc2UgewotCQlfX3UzMiB2ZXJpZnk7Ci0JCWlmICgodmVyaWZ5ID0gd2lkZV9yZWFkKG1hcCwgYWRyKSkgIT0gZGF0dW0pIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB3cml0ZSB0byAweCVseCBmYWlsZWQuICIKLQkJCSAgICAgICAiZGF0dW0gPSAleCwgdmVyaWZ5ID0gJXhcbiIsCi0JCQkgICAgICAgbWFwLT5uYW1lLCBhZHIsIGRhdHVtLCB2ZXJpZnkpOwotCQkJcmV0ID0gLUVJTzsKLQkJfQotCX0KLQotCURJU0FCTEVfVlBQKG1hcCk7Ci0JY2hpcC0+c3RhdGUgPSBGTF9SRUFEWTsKLQl3YWtlX3VwKCZjaGlwLT53cSk7Ci0Jc3Bpbl91bmxvY2tfYmgoY2hpcC0+bXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCi0KLXN0YXRpYyBpbnQgYW1kX2ZsYXNoX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8gLCBzaXplX3QgbGVuLAotCQkJICAgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQotewotCXN0cnVjdCBtYXBfaW5mbyAqbWFwID0gbXRkLT5wcml2OwotCXN0cnVjdCBhbWRfZmxhc2hfcHJpdmF0ZSAqcHJpdmF0ZSA9IG1hcC0+ZmxkcnZfcHJpdjsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgY2hpcG51bTsKLQl1bnNpZ25lZCBsb25nIG9mczsKLQl1bnNpZ25lZCBsb25nIGNoaXBzdGFydDsKLQotCSpyZXRsZW4gPSAwOwotCWlmICghbGVuKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCWNoaXBudW0gPSB0byA+PiBwcml2YXRlLT5jaGlwc2hpZnQ7Ci0Jb2ZzID0gdG8gIC0gKGNoaXBudW0gPDwgcHJpdmF0ZS0+Y2hpcHNoaWZ0KTsKLQljaGlwc3RhcnQgPSBwcml2YXRlLT5jaGlwc1tjaGlwbnVtXS5zdGFydDsKLQotCS8qIElmIGl0J3Mgbm90IGJ1cy1hbGlnbmVkLCBkbyB0aGUgZmlyc3QgYnl0ZSB3cml0ZS4gKi8KLQlpZiAob2ZzICYgKG1hcC0+YnVzd2lkdGggLSAxKSkgewotCQl1bnNpZ25lZCBsb25nIGJ1c19vZnMgPSBvZnMgJiB+KG1hcC0+YnVzd2lkdGggLSAxKTsKLQkJaW50IGkgPSBvZnMgLSBidXNfb2ZzOwotCQlpbnQgbiA9IDA7Ci0JCXVfY2hhciB0bXBfYnVmWzRdOwotCQlfX3UzMiBkYXR1bTsKLQotCQltYXBfY29weV9mcm9tKG1hcCwgdG1wX2J1ZiwKLQkJCSAgICAgICBidXNfb2ZzICsgcHJpdmF0ZS0+Y2hpcHNbY2hpcG51bV0uc3RhcnQsCi0JCQkgICAgICAgbWFwLT5idXN3aWR0aCk7Ci0JCXdoaWxlIChsZW4gJiYgaSA8IG1hcC0+YnVzd2lkdGgpCi0JCQl0bXBfYnVmW2krK10gPSBidWZbbisrXSwgbGVuLS07Ci0KLQkJaWYgKG1hcC0+YnVzd2lkdGggPT0gMikgewotCQkJZGF0dW0gPSAqKF9fdTE2Kil0bXBfYnVmOwotCQl9IGVsc2UgaWYgKG1hcC0+YnVzd2lkdGggPT0gNCkgewotCQkJZGF0dW0gPSAqKF9fdTMyKil0bXBfYnVmOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIC1FSU5WQUw7ICAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgYmUgc2FmZSAqLwotCQl9Ci0KLQkJcmV0ID0gd3JpdGVfb25lX3dvcmQobWFwLCAmcHJpdmF0ZS0+Y2hpcHNbY2hpcG51bV0sIGJ1c19vZnMsCi0JCQkJICAgICBkYXR1bSk7Ci0JCWlmIChyZXQpIHsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlvZnMgKz0gbjsKLQkJYnVmICs9IG47Ci0JCSgqcmV0bGVuKSArPSBuOwotCi0JCWlmIChvZnMgPj4gcHJpdmF0ZS0+Y2hpcHNoaWZ0KSB7Ci0JCQljaGlwbnVtKys7Ci0JCQlvZnMgPSAwOwotCQkJaWYgKGNoaXBudW0gPT0gcHJpdmF0ZS0+bnVtY2hpcHMpIHsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQotCX0KLQotCS8qIFdlIGFyZSBub3cgYWxpZ25lZCwgd3JpdGUgYXMgbXVjaCBhcyBwb3NzaWJsZS4gKi8KLQl3aGlsZShsZW4gPj0gbWFwLT5idXN3aWR0aCkgewotCQlfX3UzMiBkYXR1bTsKLQotCQlpZiAobWFwLT5idXN3aWR0aCA9PSAxKSB7Ci0JCQlkYXR1bSA9ICooX191OCopYnVmOwotCQl9IGVsc2UgaWYgKG1hcC0+YnVzd2lkdGggPT0gMikgewotCQkJZGF0dW0gPSAqKF9fdTE2KilidWY7Ci0JCX0gZWxzZSBpZiAobWFwLT5idXN3aWR0aCA9PSA0KSB7Ci0JCQlkYXR1bSA9ICooX191MzIqKWJ1ZjsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJcmV0ID0gd3JpdGVfb25lX3dvcmQobWFwLCAmcHJpdmF0ZS0+Y2hpcHNbY2hpcG51bV0sIG9mcywgZGF0dW0pOwotCi0JCWlmIChyZXQpIHsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlvZnMgKz0gbWFwLT5idXN3aWR0aDsKLQkJYnVmICs9IG1hcC0+YnVzd2lkdGg7Ci0JCSgqcmV0bGVuKSArPSBtYXAtPmJ1c3dpZHRoOwotCQlsZW4gLT0gbWFwLT5idXN3aWR0aDsKLQotCQlpZiAob2ZzID4+IHByaXZhdGUtPmNoaXBzaGlmdCkgewotCQkJY2hpcG51bSsrOwotCQkJb2ZzID0gMDsKLQkJCWlmIChjaGlwbnVtID09IHByaXZhdGUtPm51bWNoaXBzKSB7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQljaGlwc3RhcnQgPSBwcml2YXRlLT5jaGlwc1tjaGlwbnVtXS5zdGFydDsKLQkJfQotCX0KLQotCWlmIChsZW4gJiAobWFwLT5idXN3aWR0aCAtIDEpKSB7Ci0JCWludCBpID0gMCwgbiA9IDA7Ci0JCXVfY2hhciB0bXBfYnVmWzJdOwotCQlfX3UzMiBkYXR1bTsKLQotCQltYXBfY29weV9mcm9tKG1hcCwgdG1wX2J1ZiwKLQkJCSAgICAgICBvZnMgKyBwcml2YXRlLT5jaGlwc1tjaGlwbnVtXS5zdGFydCwKLQkJCSAgICAgICBtYXAtPmJ1c3dpZHRoKTsKLQkJd2hpbGUgKGxlbi0tKSB7Ci0JCQl0bXBfYnVmW2krK10gPSBidWZbbisrXTsKLQkJfQotCi0JCWlmIChtYXAtPmJ1c3dpZHRoID09IDIpIHsKLQkJCWRhdHVtID0gKihfX3UxNiopdG1wX2J1ZjsKLQkJfSBlbHNlIGlmIChtYXAtPmJ1c3dpZHRoID09IDQpIHsKLQkJCWRhdHVtID0gKihfX3UzMiopdG1wX2J1ZjsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAtRUlOVkFMOyAgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGJlIHNhZmUgKi8KLQkJfQotCi0JCXJldCA9IHdyaXRlX29uZV93b3JkKG1hcCwgJnByaXZhdGUtPmNoaXBzW2NoaXBudW1dLCBvZnMsIGRhdHVtKTsKLQotCQlpZiAocmV0KSB7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJKCpyZXRsZW4pICs9IG47Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotCi1zdGF0aWMgaW5saW5lIGludCBlcmFzZV9vbmVfYmxvY2soc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCi0JCQkJICB1bnNpZ25lZCBsb25nIGFkciwgdV9sb25nIHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyB0aW1lbyA9IGppZmZpZXMgKyBIWjsKLQlzdHJ1Y3QgYW1kX2ZsYXNoX3ByaXZhdGUgKnByaXZhdGUgPSBtYXAtPmZsZHJ2X3ByaXY7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLXJldHJ5OgotCXNwaW5fbG9ja19iaChjaGlwLT5tdXRleCk7Ci0KLQlpZiAoY2hpcC0+c3RhdGUgIT0gRkxfUkVBRFkpewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCWFkZF93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCi0JCXNwaW5fdW5sb2NrX2JoKGNoaXAtPm11dGV4KTsKLQotCQlzY2hlZHVsZSgpOwotCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXJldHVybiAtRUlOVFI7Ci0JCX0KLQotCQl0aW1lbyA9IGppZmZpZXMgKyBIWjsKLQotCQlnb3RvIHJldHJ5OwotCX0KLQotCWNoaXAtPnN0YXRlID0gRkxfRVJBU0lORzsKLQotCWFkciArPSBjaGlwLT5zdGFydDsKLQlFTkFCTEVfVlBQKG1hcCk7Ci0Jc2VuZF9jbWQobWFwLCBjaGlwLT5zdGFydCwgQ01EX1NFQ1RPUl9FUkFTRV9VTkxPQ0tfREFUQSk7Ci0Jc2VuZF9jbWRfdG9fYWRkcihtYXAsIGNoaXAtPnN0YXJ0LCBDTURfU0VDVE9SX0VSQVNFX1VOTE9DS19EQVRBXzIsIGFkcik7Ci0KLQl0aW1lbyA9IGppZmZpZXMgKyAoSFogKiAyMCk7Ci0KLQlzcGluX3VubG9ja19iaChjaGlwLT5tdXRleCk7Ci0JbXNsZWVwKDEwMDApOwotCXNwaW5fbG9ja19iaChjaGlwLT5tdXRleCk7Ci0KLQl3aGlsZSAoZmxhc2hfaXNfYnVzeShtYXAsIGFkciwgcHJpdmF0ZS0+aW50ZXJsZWF2ZSkpIHsKLQotCQlpZiAoY2hpcC0+c3RhdGUgIT0gRkxfRVJBU0lORykgewotCQkJLyogU29tZW9uZSdzIHN1c3BlbmRlZCB0aGUgZXJhc2UuIFNsZWVwICovCi0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlhZGRfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQotCQkJc3Bpbl91bmxvY2tfYmgoY2hpcC0+bXV0ZXgpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVyYXNlIHN1c3BlbmRlZC4gU2xlZXBpbmdcbiIsCi0JCQkgICAgICAgbWFwLT5uYW1lKTsKLQkJCXNjaGVkdWxlKCk7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQotCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQkJcmV0dXJuIC1FSU5UUjsKLQkJCX0KLQotCQkJdGltZW8gPSBqaWZmaWVzICsgKEhaKjIpOyAvKiBGSVhNRSAqLwotCQkJc3Bpbl9sb2NrX2JoKGNoaXAtPm11dGV4KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogT0sgU3RpbGwgd2FpdGluZyAqLwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lbykpIHsKLQkJCWNoaXAtPnN0YXRlID0gRkxfUkVBRFk7Ci0JCQlzcGluX3VubG9ja19iaChjaGlwLT5tdXRleCk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogd2FpdGluZyBmb3IgZXJhc2UgdG8gY29tcGxldGUgIgotCQkJICAgICAgICJ0aW1lZCBvdXQuXG4iLCBtYXAtPm5hbWUpOwotCQkJRElTQUJMRV9WUFAobWFwKTsKLQotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQkvKiBMYXRlbmN5IGlzc3Vlcy4gRHJvcCB0aGUgbG9jaywgd2FpdCBhIHdoaWxlIGFuZCByZXRyeSAqLwotCQlzcGluX3VubG9ja19iaChjaGlwLT5tdXRleCk7Ci0KLQkJaWYgKG5lZWRfcmVzY2hlZCgpKQotCQkJc2NoZWR1bGUoKTsKLQkJZWxzZQotCQkJdWRlbGF5KDEpOwotCi0JCXNwaW5fbG9ja19iaChjaGlwLT5tdXRleCk7Ci0JfQotCi0JLyogVmVyaWZ5IGV2ZXJ5IHNpbmdsZSB3b3JkICovCi0JewotCQlpbnQgYWRkcmVzczsKLQkJaW50IGVycm9yID0gMDsKLQkJX191OCB2ZXJpZnk7Ci0KLQkJZm9yIChhZGRyZXNzID0gYWRyOyBhZGRyZXNzIDwgKGFkciArIHNpemUpOyBhZGRyZXNzKyspIHsKLQkJCWlmICgodmVyaWZ5ID0gbWFwX3JlYWQ4KG1hcCwgYWRkcmVzcykpICE9IDB4RkYpIHsKLQkJCQllcnJvciA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVycm9yKSB7Ci0JCQljaGlwLT5zdGF0ZSA9IEZMX1JFQURZOwotCQkJc3Bpbl91bmxvY2tfYmgoY2hpcC0+bXV0ZXgpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogdmVyaWZ5IGVycm9yIGF0IDB4JXgsIHNpemUgJWxkLlxuIiwKLQkJCSAgICAgICBtYXAtPm5hbWUsIGFkZHJlc3MsIHNpemUpOwotCQkJRElTQUJMRV9WUFAobWFwKTsKLQotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQlESVNBQkxFX1ZQUChtYXApOwotCWNoaXAtPnN0YXRlID0gRkxfUkVBRFk7Ci0Jd2FrZV91cCgmY2hpcC0+d3EpOwotCXNwaW5fdW5sb2NrX2JoKGNoaXAtPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi0KLQotc3RhdGljIGludCBhbWRfZmxhc2hfZXJhc2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKLXsKLQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3QgYW1kX2ZsYXNoX3ByaXZhdGUgKnByaXZhdGUgPSBtYXAtPmZsZHJ2X3ByaXY7Ci0JdW5zaWduZWQgbG9uZyBhZHIsIGxlbjsKLQlpbnQgY2hpcG51bTsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgaTsKLQlpbnQgZmlyc3Q7Ci0Jc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyAqcmVnaW9ucyA9IG10ZC0+ZXJhc2VyZWdpb25zOwotCi0JaWYgKGluc3RyLT5hZGRyID4gbXRkLT5zaXplKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgoaW5zdHItPmxlbiArIGluc3RyLT5hZGRyKSA+IG10ZC0+c2l6ZSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBDaGVjayB0aGF0IGJvdGggc3RhcnQgYW5kIGVuZCBvZiB0aGUgcmVxdWVzdGVkIGVyYXNlIGFyZQotCSAqIGFsaWduZWQgd2l0aCB0aGUgZXJhc2VzaXplIGF0IHRoZSBhcHByb3ByaWF0ZSBhZGRyZXNzZXMuCi0JICovCi0KLQlpID0gMDsKLQotICAgICAgICAvKiBTa2lwIGFsbCBlcmFzZSByZWdpb25zIHdoaWNoIGFyZSBlbmRlZCBiZWZvcmUgdGhlIHN0YXJ0IG9mCi0gICAgICAgICAgIHRoZSByZXF1ZXN0ZWQgZXJhc2UuIEFjdHVhbGx5LCB0byBzYXZlIG9uIHRoZSBjYWxjdWxhdGlvbnMsCi0gICAgICAgICAgIHdlIHNraXAgdG8gdGhlIGZpcnN0IGVyYXNlIHJlZ2lvbiB3aGljaCBzdGFydHMgYWZ0ZXIgdGhlCi0gICAgICAgICAgIHN0YXJ0IG9mIHRoZSByZXF1ZXN0ZWQgZXJhc2UsIGFuZCB0aGVuIGdvIGJhY2sgb25lLgotICAgICAgICAqLwotCi0gICAgICAgIHdoaWxlICgoaSA8IG10ZC0+bnVtZXJhc2VyZWdpb25zKSAmJgotCSAgICAgICAoaW5zdHItPmFkZHIgPj0gcmVnaW9uc1tpXS5vZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICBpKys7Ci0JfQotICAgICAgICBpLS07Ci0KLQkvKiBPSywgbm93IGkgaXMgcG9pbnRpbmcgYXQgdGhlIGVyYXNlIHJlZ2lvbiBpbiB3aGljaCB0aGlzCi0JICogZXJhc2UgcmVxdWVzdCBzdGFydHMuIENoZWNrIHRoZSBzdGFydCBvZiB0aGUgcmVxdWVzdGVkCi0JICogZXJhc2UgcmFuZ2UgaXMgYWxpZ25lZCB3aXRoIHRoZSBlcmFzZSBzaXplIHdoaWNoIGlzIGluCi0JICogZWZmZWN0IGhlcmUuCi0JICovCi0KLQlpZiAoaW5zdHItPmFkZHIgJiAocmVnaW9uc1tpXS5lcmFzZXNpemUtMSkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogUmVtZW1iZXIgdGhlIGVyYXNlIHJlZ2lvbiB3ZSBzdGFydCBvbi4gKi8KLQotCWZpcnN0ID0gaTsKLQotCS8qIE5leHQsIGNoZWNrIHRoYXQgdGhlIGVuZCBvZiB0aGUgcmVxdWVzdGVkIGVyYXNlIGlzIGFsaWduZWQKLQkgKiB3aXRoIHRoZSBlcmFzZSByZWdpb24gYXQgdGhhdCBhZGRyZXNzLgotCSAqLwotCi0Jd2hpbGUgKChpIDwgbXRkLT5udW1lcmFzZXJlZ2lvbnMpICYmCi0JICAgICAgICgoaW5zdHItPmFkZHIgKyBpbnN0ci0+bGVuKSA+PSByZWdpb25zW2ldLm9mZnNldCkpIHsKLSAgICAgICAgICAgICAgICBpKys7Ci0JfQotCi0JLyogQXMgYmVmb3JlLCBkcm9wIGJhY2sgb25lIHRvIHBvaW50IGF0IHRoZSByZWdpb24gaW4gd2hpY2gKLQkgKiB0aGUgYWRkcmVzcyBhY3R1YWxseSBmYWxscy4KLQkgKi8KLQotCWktLTsKLQotCWlmICgoaW5zdHItPmFkZHIgKyBpbnN0ci0+bGVuKSAmIChyZWdpb25zW2ldLmVyYXNlc2l6ZS0xKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotCX0KLQotCWNoaXBudW0gPSBpbnN0ci0+YWRkciA+PiBwcml2YXRlLT5jaGlwc2hpZnQ7Ci0JYWRyID0gaW5zdHItPmFkZHIgLSAoY2hpcG51bSA8PCBwcml2YXRlLT5jaGlwc2hpZnQpOwotCWxlbiA9IGluc3RyLT5sZW47Ci0KLQlpID0gZmlyc3Q7Ci0KLQl3aGlsZSAobGVuKSB7Ci0JCXJldCA9IGVyYXNlX29uZV9ibG9jayhtYXAsICZwcml2YXRlLT5jaGlwc1tjaGlwbnVtXSwgYWRyLAotCQkJCSAgICAgIHJlZ2lvbnNbaV0uZXJhc2VzaXplKTsKLQotCQlpZiAocmV0KSB7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJYWRyICs9IHJlZ2lvbnNbaV0uZXJhc2VzaXplOwotCQlsZW4gLT0gcmVnaW9uc1tpXS5lcmFzZXNpemU7Ci0KLQkJaWYgKChhZHIgJSAoMSA8PCBwcml2YXRlLT5jaGlwc2hpZnQpKSA9PQotCQkgICAgKChyZWdpb25zW2ldLm9mZnNldCArIChyZWdpb25zW2ldLmVyYXNlc2l6ZSAqCi0JCSAgICAJCQkgICByZWdpb25zW2ldLm51bWJsb2NrcykpCi0JCSAgICAgJSAoMSA8PCBwcml2YXRlLT5jaGlwc2hpZnQpKSkgewotCQkJaSsrOwotCQl9Ci0KLQkJaWYgKGFkciA+PiBwcml2YXRlLT5jaGlwc2hpZnQpIHsKLQkJCWFkciA9IDA7Ci0JCQljaGlwbnVtKys7Ci0JCQlpZiAoY2hpcG51bSA+PSBwcml2YXRlLT5udW1jaGlwcykgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0RPTkU7Ci0JbXRkX2VyYXNlX2NhbGxiYWNrKGluc3RyKTsKLQotCXJldHVybiAwOwotfQotCi0KLQotc3RhdGljIHZvaWQgYW1kX2ZsYXNoX3N5bmMoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IG1hcF9pbmZvICptYXAgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IGFtZF9mbGFzaF9wcml2YXRlICpwcml2YXRlID0gbWFwLT5mbGRydl9wcml2OwotCWludCBpOwotCXN0cnVjdCBmbGNoaXAgKmNoaXA7Ci0JaW50IHJldCA9IDA7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQlmb3IgKGkgPSAwOyAhcmV0ICYmIChpIDwgcHJpdmF0ZS0+bnVtY2hpcHMpOyBpKyspIHsKLQkJY2hpcCA9ICZwcml2YXRlLT5jaGlwc1tpXTsKLQotCXJldHJ5OgotCQlzcGluX2xvY2tfYmgoY2hpcC0+bXV0ZXgpOwotCi0JCXN3aXRjaChjaGlwLT5zdGF0ZSkgewotCQljYXNlIEZMX1JFQURZOgotCQljYXNlIEZMX1NUQVRVUzoKLQkJY2FzZSBGTF9DRklfUVVFUlk6Ci0JCWNhc2UgRkxfSkVERUNfUVVFUlk6Ci0JCQljaGlwLT5vbGRzdGF0ZSA9IGNoaXAtPnN0YXRlOwotCQkJY2hpcC0+c3RhdGUgPSBGTF9TWU5DSU5HOwotCQkJLyogTm8gbmVlZCB0byB3YWtlX3VwKCkgb24gdGhpcyBzdGF0ZSBjaGFuZ2UgLQotCQkJICogYXMgdGhlIHdob2xlIHBvaW50IGlzIHRoYXQgbm9ib2R5IGNhbiBkbyBhbnl0aGluZwotCQkJICogd2l0aCB0aGUgY2hpcCBub3cgYW55d2F5LgotCQkJICovCi0JCWNhc2UgRkxfU1lOQ0lORzoKLQkJCXNwaW5fdW5sb2NrX2JoKGNoaXAtPm11dGV4KTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQkvKiBOb3QgYW4gaWRsZSBzdGF0ZSAqLwotCQkJYWRkX3dhaXRfcXVldWUoJmNoaXAtPndxLCAmd2FpdCk7Ci0KLQkJCXNwaW5fdW5sb2NrX2JoKGNoaXAtPm11dGV4KTsKLQotCQkJc2NoZWR1bGUoKTsKLQotCQkgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCi0JCQlnb3RvIHJldHJ5OwotCQl9Ci0JfQotCi0JLyogVW5sb2NrIHRoZSBjaGlwcyBhZ2FpbiAqLwotCWZvciAoaS0tOyBpID49IDA7IGktLSkgewotCQljaGlwID0gJnByaXZhdGUtPmNoaXBzW2ldOwotCi0JCXNwaW5fbG9ja19iaChjaGlwLT5tdXRleCk7Ci0KLQkJaWYgKGNoaXAtPnN0YXRlID09IEZMX1NZTkNJTkcpIHsKLQkJCWNoaXAtPnN0YXRlID0gY2hpcC0+b2xkc3RhdGU7Ci0JCQl3YWtlX3VwKCZjaGlwLT53cSk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoY2hpcC0+bXV0ZXgpOwotCX0KLX0KLQotCi0KLXN0YXRpYyBpbnQgYW1kX2ZsYXNoX3N1c3BlbmQoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci1wcmludGsoImFtZF9mbGFzaF9zdXNwZW5kKCk6IG5vdCBpbXBsZW1lbnRlZCFcbiIpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi0KLQotc3RhdGljIHZvaWQgYW1kX2ZsYXNoX3Jlc3VtZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLXByaW50aygiYW1kX2ZsYXNoX3Jlc3VtZSgpOiBub3QgaW1wbGVtZW50ZWQhXG4iKTsKLX0KLQotCi0KLXN0YXRpYyB2b2lkIGFtZF9mbGFzaF9kZXN0cm95KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCXN0cnVjdCBtYXBfaW5mbyAqbWFwID0gbXRkLT5wcml2OwotCXN0cnVjdCBhbWRfZmxhc2hfcHJpdmF0ZSAqcHJpdmF0ZSA9IG1hcC0+ZmxkcnZfcHJpdjsKLQlrZnJlZShwcml2YXRlKTsKLX0KLQotaW50IF9faW5pdCBhbWRfZmxhc2hfaW5pdCh2b2lkKQotewotCXJlZ2lzdGVyX210ZF9jaGlwX2RyaXZlcigmYW1kX2ZsYXNoX2NoaXBkcnYpOwotCXJldHVybiAwOwotfQotCi12b2lkIF9fZXhpdCBhbWRfZmxhc2hfZXhpdCh2b2lkKQotewotCXVucmVnaXN0ZXJfbXRkX2NoaXBfZHJpdmVyKCZhbWRfZmxhc2hfY2hpcGRydik7Ci19Ci0KLW1vZHVsZV9pbml0KGFtZF9mbGFzaF9pbml0KTsKLW1vZHVsZV9leGl0KGFtZF9mbGFzaF9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSm9uYXMgSG9sbWJlcmcgPGpvbmFzLmhvbG1iZXJnQGF4aXMuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJPbGQgTVREIGNoaXAgZHJpdmVyIGZvciBBTUQgZmxhc2ggY2hpcHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9qZWRlYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGU1N2IyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MzUgKzAsMCBAQAotCi0vKiBKRURFQyBGbGFzaCBJbnRlcmZhY2UuCi0gKiBUaGlzIGlzIGFuIG9sZGVyIHR5cGUgb2YgaW50ZXJmYWNlIGZvciBzZWxmIHByb2dyYW1taW5nIGZsYXNoLiBJdCBpcwotICogY29tbW9ubHkgdXNlIGluIG9sZGVyIEFNRCBjaGlwcyBhbmQgaXMgb2Jzb2xldGUgY29tcGFyZWQgd2l0aCBDRkkuCi0gKiBJdCBpcyBjYWxsZWQgSkVERUMgYmVjYXVzZSB0aGUgSkVERUMgYXNzb2NpYXRpb24gZGlzdHJpYnV0ZXMgdGhlIElEIGNvZGVzCi0gKiBmb3IgdGhlIGNoaXBzLgotICoKLSAqIFNlZSB0aGUgQU1EIGZsYXNoIGRhdGFib29rIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gb3BlcmF0ZSB0aGUgaW50ZXJmYWNlLgotICoKLSAqIFRoaXMgY29kZSBkb2VzIG5vdCBzdXBwb3J0IGFueXRoaW5nIHdpZGVyIHRoYW4gOCBiaXQgZmxhc2ggY2hpcHMsIEkgYW0KLSAqIG5vdCBnb2luZyB0byBndWVzcyBob3cgdG8gc2VuZCBjb21tYW5kcyB0byB0aGVtLCBwbHVzIEkgZXhwZWN0IHRoZXkgd2lsbAotICogYWxsIHNwZWFrIENGSS4uCi0gKgotICogJElkOiBqZWRlYy5jLHYgMS4yMiAyMDA1LzAxLzA1IDE4OjA1OjExIGR3bXcyIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2plZGVjLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmplZGVjX3Byb2JlKHN0cnVjdCBtYXBfaW5mbyAqKTsKLXN0YXRpYyBpbnQgamVkZWNfcHJvYmU4KHN0cnVjdCBtYXBfaW5mbyAqbWFwLHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJICBzdHJ1Y3QgamVkZWNfcHJpdmF0ZSAqcHJpdik7Ci1zdGF0aWMgaW50IGplZGVjX3Byb2JlMTYoc3RydWN0IG1hcF9pbmZvICptYXAsdW5zaWduZWQgbG9uZyBiYXNlLAotCQkgIHN0cnVjdCBqZWRlY19wcml2YXRlICpwcml2KTsKLXN0YXRpYyBpbnQgamVkZWNfcHJvYmUzMihzdHJ1Y3QgbWFwX2luZm8gKm1hcCx1bnNpZ25lZCBsb25nIGJhc2UsCi0JCSAgc3RydWN0IGplZGVjX3ByaXZhdGUgKnByaXYpOwotc3RhdGljIHZvaWQgamVkZWNfZmxhc2hfY2hpcF9zY2FuKHN0cnVjdCBqZWRlY19wcml2YXRlICpwcml2LHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBsZW4pOwotc3RhdGljIGludCBmbGFzaF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKTsKLXN0YXRpYyBpbnQgZmxhc2hfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBzdGFydCwgc2l6ZV90IGxlbiwKLQkJICAgICAgIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG15X2Jhbmtfc2l6ZTsKLQotLyogTGlzdGluZyBvZiBwYXJ0cyBhbmQgc2l6ZXMuIFdlIG5lZWQgdGhpcyB0YWJsZSB0byBsZWFybiB0aGUgc2VjdG9yCi0gICBzaXplIG9mIHRoZSBjaGlwIGFuZCB0aGUgdG90YWwgbGVuZ3RoICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IEpFREVDVGFibGUgSkVERUNfdGFibGVbXSA9IHsKLQl7Ci0JCS5qZWRlYwkJPSAweDAxM0QsCi0JCS5uYW1lCQk9ICJBTUQgQW0yOUYwMTdEIiwKLQkJLnNpemUJCT0gMioxMDI0KjEwMjQsCi0JCS5zZWN0b3JzaXplCT0gNjQqMTAyNCwKLQkJLmNhcGFiaWxpdGllcwk9IE1URF9DQVBfTk9SRkxBU0gKLQl9LAotCXsKLQkJLmplZGVjCQk9IDB4MDFBRCwKLQkJLm5hbWUJCT0gIkFNRCBBbTI5RjAxNiIsCi0JCS5zaXplCQk9IDIqMTAyNCoxMDI0LAotCQkuc2VjdG9yc2l6ZQk9IDY0KjEwMjQsCi0JCS5jYXBhYmlsaXRpZXMJPSBNVERfQ0FQX05PUkZMQVNICi0JfSwKLQl7Ci0JCS5qZWRlYwkJPSAweDAxRDUsCi0JCS5uYW1lCQk9ICJBTUQgQW0yOUYwODAiLAotCQkuc2l6ZQkJPSAxKjEwMjQqMTAyNCwKLQkJLnNlY3RvcnNpemUJPSA2NCoxMDI0LAotCQkuY2FwYWJpbGl0aWVzCT0gTVREX0NBUF9OT1JGTEFTSAotCX0sCi0JewotCQkuamVkZWMJCT0gMHgwMUE0LAotCQkubmFtZQkJPSAiQU1EIEFtMjlGMDQwIiwKLQkJLnNpemUJCT0gNTEyKjEwMjQsCi0JCS5zZWN0b3JzaXplCT0gNjQqMTAyNCwKLQkJLmNhcGFiaWxpdGllcwk9IE1URF9DQVBfTk9SRkxBU0gKLQl9LAotCXsKLQkJLmplZGVjCQk9IDB4MjBFMywKLQkJLm5hbWUJCT0gIkFNRCBBbTI5VzA0MEIiLAotCQkuc2l6ZQkJPSA1MTIqMTAyNCwKLQkJLnNlY3RvcnNpemUJPSA2NCoxMDI0LAotCQkuY2FwYWJpbGl0aWVzCT0gTVREX0NBUF9OT1JGTEFTSAotCX0sCi0JewotCQkuamVkZWMJCT0gMHhDMkFELAotCQkubmFtZQkJPSAiTWFjcm9uaXggTVgyOUYwMTYiLAotCQkuc2l6ZQkJPSAyKjEwMjQqMTAyNCwKLQkJLnNlY3RvcnNpemUJPSA2NCoxMDI0LAotCQkuY2FwYWJpbGl0aWVzCT0gTVREX0NBUF9OT1JGTEFTSAotCX0sCi0JeyAuamVkZWMgPSAweDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBKRURFQ1RhYmxlICpqZWRlY19pZHRvaW5mKF9fdTggbWZyLF9fdTggaWQpOwotc3RhdGljIHZvaWQgamVkZWNfc3luYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCkge307Ci1zdGF0aWMgaW50IGplZGVjX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkgICAgICBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwotc3RhdGljIGludCBqZWRlY19yZWFkX2JhbmtlZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCQkgICAgIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmplZGVjX3Byb2JlKHN0cnVjdCBtYXBfaW5mbyAqbWFwKTsKLQotCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2NoaXBfZHJpdmVyIGplZGVjX2NoaXBkcnYgPSB7Ci0JLnByb2JlCT0gamVkZWNfcHJvYmUsCi0JLm5hbWUJPSAiamVkZWMiLAotCS5tb2R1bGUJPSBUSElTX01PRFVMRQotfTsKLQotLyogUHJvYmUgZW50cnkgcG9pbnQgKi8KLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqamVkZWNfcHJvYmUoc3RydWN0IG1hcF9pbmZvICptYXApCi17Ci0gICBzdHJ1Y3QgbXRkX2luZm8gKk1URDsKLSAgIHN0cnVjdCBqZWRlY19wcml2YXRlICpwcml2OwotICAgdW5zaWduZWQgbG9uZyBCYXNlOwotICAgdW5zaWduZWQgbG9uZyBTZWN0b3JTaXplOwotICAgdW5zaWduZWQgY291bnQ7Ci0gICB1bnNpZ25lZCBJLFVuaXE7Ci0gICBjaGFyIFBhcnRbMjAwXTsKLSAgIG1lbXNldCgmcHJpdiwwLHNpemVvZihwcml2KSk7Ci0KLSAgIE1URCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IGplZGVjX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKLSAgIGlmICghTVREKQotCSAgIHJldHVybiBOVUxMOwotCi0gICBwcml2ID0gKHN0cnVjdCBqZWRlY19wcml2YXRlICopJk1URFsxXTsKLQotICAgbXlfYmFua19zaXplID0gbWFwLT5zaXplOwotCi0gICBpZiAobWFwLT5zaXplL215X2Jhbmtfc2l6ZSA+IE1BWF9KRURFQ19DSElQUykKLSAgIHsKLSAgICAgIHByaW50aygibXRkOiBJbmNyZWFzZSBNQVhfSkVERUNfQ0hJUFMsIHRvbyBtYW55IGJhbmtzLlxuIik7Ci0gICAgICBrZnJlZShNVEQpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICB9Ci0KLSAgIGZvciAoQmFzZSA9IDA7IEJhc2UgPCBtYXAtPnNpemU7IEJhc2UgKz0gbXlfYmFua19zaXplKQotICAgewotICAgICAgLy8gUGVyaGFwcyB6ZXJvIGNvdWxkIGRlc2lnbmF0ZSBhbGwgdGVzdHM/Ci0gICAgICBpZiAobWFwLT5idXN3aWR0aCA9PSAwKQotCSBtYXAtPmJ1c3dpZHRoID0gMTsKLQotICAgICAgaWYgKG1hcC0+YnVzd2lkdGggPT0gMSl7Ci0JIGlmIChqZWRlY19wcm9iZTgobWFwLEJhc2UscHJpdikgPT0gMCkgewotCQkgcHJpbnRrKCJkaWQgcmVjb2duaXplIGplZGVjIGNoaXBcbiIpOwotCQkga2ZyZWUoTVREKTsKLQkgICAgICAgICByZXR1cm4gTlVMTDsKLQkgfQotICAgICAgfQotICAgICAgaWYgKG1hcC0+YnVzd2lkdGggPT0gMikKLQkgamVkZWNfcHJvYmUxNihtYXAsQmFzZSxwcml2KTsKLSAgICAgIGlmIChtYXAtPmJ1c3dpZHRoID09IDQpCi0JIGplZGVjX3Byb2JlMzIobWFwLEJhc2UscHJpdik7Ci0gICB9Ci0KLSAgIC8vIEdldCB0aGUgYmlnZ2VzdCBzZWN0b3Igc2l6ZQotICAgU2VjdG9yU2l6ZSA9IDA7Ci0gICBmb3IgKEkgPSAwOyBwcml2LT5jaGlwc1tJXS5qZWRlYyAhPSAwICYmIEkgPCBNQVhfSkVERUNfQ0hJUFM7IEkrKykKLSAgIHsKLQkgICAvLwkgICBwcmludGsoInByaXYtPmNoaXBzWyVkXS5qZWRlYyBpcyAleFxuIixJLHByaXYtPmNoaXBzW0ldLmplZGVjKTsKLQkgICAvLwkgICBwcmludGsoInByaXYtPmNoaXBzWyVkXS5zZWN0b3JzaXplIGlzICVseFxuIixJLHByaXYtPmNoaXBzW0ldLnNlY3RvcnNpemUpOwotICAgICAgaWYgKHByaXYtPmNoaXBzW0ldLnNlY3RvcnNpemUgPiBTZWN0b3JTaXplKQotCSBTZWN0b3JTaXplID0gcHJpdi0+Y2hpcHNbSV0uc2VjdG9yc2l6ZTsKLSAgIH0KLQotICAgLy8gUXVpY2tseSBlbnN1cmUgdGhhdCB0aGUgb3RoZXIgc2VjdG9yIHNpemVzIGFyZSBmYWN0b3JzIG9mIHRoZSBsYXJnZXN0Ci0gICBmb3IgKEkgPSAwOyBwcml2LT5jaGlwc1tJXS5qZWRlYyAhPSAwICYmIEkgPCBNQVhfSkVERUNfQ0hJUFM7IEkrKykKLSAgIHsKLSAgICAgIGlmICgoU2VjdG9yU2l6ZS9wcml2LT5jaGlwc1tJXS5zZWN0b3JzaXplKSpwcml2LT5jaGlwc1tJXS5zZWN0b3JzaXplICE9IFNlY3RvclNpemUpCi0gICAgICB7Ci0JIHByaW50aygibXRkOiBGYWlsZWQuIERldmljZSBoYXMgaW5jb21wYXRpYmxlIG1peGVkIHNlY3RvciBzaXplc1xuIik7Ci0JIGtmcmVlKE1URCk7Ci0JIHJldHVybiBOVUxMOwotICAgICAgfQotICAgfQotCi0gICAvKiBHZW5lcmF0ZSBhIHBhcnQgbmFtZSB0aGF0IGluY2x1ZGVzIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGNoaXBzIGFuZAotICAgICAgb3RoZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiAqLwotICAgY291bnQgPSAxOwotICAgc3RybGNweShQYXJ0LG1hcC0+bmFtZSxzaXplb2YoUGFydCktMTApOwotICAgc3RyY2F0KFBhcnQsIiAiKTsKLSAgIFVuaXEgPSAwOwotICAgZm9yIChJID0gMDsgcHJpdi0+Y2hpcHNbSV0uamVkZWMgIT0gMCAmJiBJIDwgTUFYX0pFREVDX0NISVBTOyBJKyspCi0gICB7Ci0gICAgICBjb25zdCBzdHJ1Y3QgSkVERUNUYWJsZSAqSkVERUM7Ci0KLSAgICAgIGlmIChwcml2LT5jaGlwc1tJKzFdLmplZGVjID09IHByaXYtPmNoaXBzW0ldLmplZGVjKQotICAgICAgewotCSBjb3VudCsrOwotCSBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy8gTG9jYXRlIHRoZSBjaGlwIGluIHRoZSBqZWRlYyB0YWJsZQotICAgICAgSkVERUMgPSBqZWRlY19pZHRvaW5mKHByaXYtPmNoaXBzW0ldLmplZGVjID4+IDgscHJpdi0+Y2hpcHNbSV0uamVkZWMpOwotICAgICAgaWYgKEpFREVDID09IDApCi0gICAgICB7Ci0JIHByaW50aygibXRkOiBJbnRlcm5hbCBFcnJvciwgSkVERUMgbm90IHNldFxuIik7Ci0JIGtmcmVlKE1URCk7Ci0JIHJldHVybiBOVUxMOwotICAgICAgfQotCi0gICAgICBpZiAoVW5pcSAhPSAwKQotCSBzdHJjYXQoUGFydCwiLCIpOwotICAgICAgVW5pcSsrOwotCi0gICAgICBpZiAoY291bnQgIT0gMSkKLQkgc3ByaW50ZihQYXJ0K3N0cmxlbihQYXJ0KSwiJXgqWyVzXSIsY291bnQsSkVERUMtPm5hbWUpOwotICAgICAgZWxzZQotCSBzcHJpbnRmKFBhcnQrc3RybGVuKFBhcnQpLCIlcyIsSkVERUMtPm5hbWUpOwotICAgICAgaWYgKHN0cmxlbihQYXJ0KSA+IHNpemVvZihQYXJ0KSoyLzMpCi0JIGJyZWFrOwotICAgICAgY291bnQgPSAxOwotICAgfQotCi0gICAvKiBEZXRlcm1pbmUgaWYgdGhlIGNoaXBzIGFyZSBvcmdhbml6ZWQgaW4gYSBsaW5lYXIgZmFzaGlvbiwgb3IgaWYgdGhlcmUKLSAgICAgIGFyZSBlbXB0eSBiYW5rcy4gTm90ZSwgdGhlIGxhc3QgYmFuayBkb2VzIG5vdCBjb3VudCBoZXJlLCBvbmx5IHRoZQotICAgICAgZmlyc3QgYmFua3MgYXJlIGltcG9ydGFudC4gSG9sZXMgb24gbm9uLWJhbmsgYm91bmRhcmllcyBjYW4gbm90IGV4aXN0Ci0gICAgICBkdWUgdG8gdGhlIHdheSB0aGUgZGV0ZWN0aW9uIGFsZ29yaXRobSB3b3Jrcy4gKi8KLSAgIGlmIChwcml2LT5zaXplIDwgbXlfYmFua19zaXplKQotICAgICAgbXlfYmFua19zaXplID0gcHJpdi0+c2l6ZTsKLSAgIHByaXYtPmlzX2JhbmtlZCA9IDA7Ci0gICAvL3ByaW50aygicHJpdi0+c2l6ZSBpcyAleCwgbXlfYmFua19zaXplIGlzICV4XG4iLHByaXYtPnNpemUsbXlfYmFua19zaXplKTsKLSAgIC8vcHJpbnRrKCJwcml2LT5iYW5rX2ZpbGxbMF0gaXMgJXhcbiIscHJpdi0+YmFua19maWxsWzBdKTsKLSAgIGlmICghcHJpdi0+c2l6ZSkgewotCSAgIHByaW50aygicHJpdi0+c2l6ZSBpcyB6ZXJvXG4iKTsKLQkgICBrZnJlZShNVEQpOwotCSAgIHJldHVybiBOVUxMOwotICAgfQotICAgaWYgKHByaXYtPnNpemUvbXlfYmFua19zaXplKSB7Ci0JICAgaWYgKHByaXYtPnNpemUvbXlfYmFua19zaXplID09IDEpIHsKLQkJICAgcHJpdi0+c2l6ZSA9IG15X2Jhbmtfc2l6ZTsKLQkgICB9Ci0JICAgZWxzZSB7Ci0JCSAgIGZvciAoSSA9IDA7IEkgIT0gcHJpdi0+c2l6ZS9teV9iYW5rX3NpemUgLSAxOyBJKyspCi0JCSAgIHsKLQkJICAgICAgaWYgKHByaXYtPmJhbmtfZmlsbFtJXSAhPSBteV9iYW5rX3NpemUpCi0JCQkgcHJpdi0+aXNfYmFua2VkID0gMTsKLQotCQkgICAgICAvKiBUaGlzIGV2ZW4gY291bGQgYmUgZWxpbWluYXRlZCwgYnV0IG5ldyBkZS1vcHRpbWl6ZWQgcmVhZC93cml0ZQotCQkJIGZ1bmN0aW9ucyBoYXZlIHRvIGJlIHdyaXR0ZW4gKi8KLQkJICAgICAgcHJpbnRrKCJwcml2LT5iYW5rX2ZpbGxbJWRdIGlzICVseCwgcHJpdi0+YmFua19maWxsWzBdIGlzICVseFxuIixJLHByaXYtPmJhbmtfZmlsbFtJXSxwcml2LT5iYW5rX2ZpbGxbMF0pOwotCQkgICAgICBpZiAocHJpdi0+YmFua19maWxsW0ldICE9IHByaXYtPmJhbmtfZmlsbFswXSkKLQkJICAgICAgewotCQkJIHByaW50aygibXRkOiBGYWlsZWQuIENhbm5vdCBoYW5kbGUgdW5zeW1tZXRyaWMgYmFua2luZ1xuIik7Ci0JCQkga2ZyZWUoTVREKTsKLQkJCSByZXR1cm4gTlVMTDsKLQkJICAgICAgfQotCQkgICB9Ci0JICAgfQotICAgfQotICAgaWYgKHByaXYtPmlzX2JhbmtlZCA9PSAxKQotICAgICAgc3RyY2F0KFBhcnQsIiwgYmFua2VkIik7Ci0KLSAgIC8vICAgcHJpbnRrKCJQYXJ0OiAnJXMnXG4iLFBhcnQpOwotCi0gICBtZW1zZXQoTVRELDAsc2l6ZW9mKCpNVEQpKTsKLSAgLy8gc3RybGNweShNVEQtPm5hbWUsUGFydCxzaXplb2YoTVRELT5uYW1lKSk7Ci0gICBNVEQtPm5hbWUgPSBtYXAtPm5hbWU7Ci0gICBNVEQtPnR5cGUgPSBNVERfTk9SRkxBU0g7Ci0gICBNVEQtPmZsYWdzID0gTVREX0NBUF9OT1JGTEFTSDsKLSAgIE1URC0+d3JpdGVzaXplID0gMTsKLSAgIE1URC0+ZXJhc2VzaXplID0gU2VjdG9yU2l6ZSoobWFwLT5idXN3aWR0aCk7Ci0gICAvLyAgIHByaW50aygiTVRELT5lcmFzZXNpemUgaXMgJXhcbiIsKHVuc2lnbmVkIGludClNVEQtPmVyYXNlc2l6ZSk7Ci0gICBNVEQtPnNpemUgPSBwcml2LT5zaXplOwotICAgLy8gICBwcmludGsoIk1URC0+c2l6ZSBpcyAleFxuIiwodW5zaWduZWQgaW50KU1URC0+c2l6ZSk7Ci0gICAvL01URC0+bW9kdWxlID0gVEhJU19NT0RVTEU7IC8vID8gTWF5YmUgdGhpcyBzaG91bGQgYmUgdGhlIGxvdyBsZXZlbCBtb2R1bGU/Ci0gICBNVEQtPmVyYXNlID0gZmxhc2hfZXJhc2U7Ci0gICBpZiAocHJpdi0+aXNfYmFua2VkID09IDEpCi0gICAgICBNVEQtPnJlYWQgPSBqZWRlY19yZWFkX2JhbmtlZDsKLSAgIGVsc2UKLSAgICAgIE1URC0+cmVhZCA9IGplZGVjX3JlYWQ7Ci0gICBNVEQtPndyaXRlID0gZmxhc2hfd3JpdGU7Ci0gICBNVEQtPnN5bmMgPSBqZWRlY19zeW5jOwotICAgTVRELT5wcml2ID0gbWFwOwotICAgbWFwLT5mbGRydl9wcml2ID0gcHJpdjsKLSAgIG1hcC0+ZmxkcnYgPSAmamVkZWNfY2hpcGRydjsKLSAgIF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7Ci0gICByZXR1cm4gTVREOwotfQotCi0vKiBIZWxwZXIgZm9yIHRoZSBKRURFQyBmdW5jdGlvbiwgSkVERUMgbnVtYmVycyBhbGwgaGF2ZSBvZGQgcGFyaXR5ICovCi1zdGF0aWMgaW50IGNoZWNrcGFyaXR5KHVfY2hhciBDKQotewotICAgdV9jaGFyIHBhcml0eSA9IDA7Ci0gICB3aGlsZSAoQyAhPSAwKQotICAgewotICAgICAgcGFyaXR5IF49IEMgJiAxOwotICAgICAgQyA+Pj0gMTsKLSAgIH0KLQotICAgcmV0dXJuIHBhcml0eSA9PSAxOwotfQotCi0KLS8qIFRha2UgYW4gYXJyYXkgb2YgSkVERUMgbnVtYmVycyB0aGF0IHJlcHJlc2VudCBpbnRlcmxldmVkIGZsYXNoIGNoaXBzCi0gICBhbmQgcHJvY2VzcyB0aGVtLiBDaGVjayB0byBtYWtlIHN1cmUgdGhleSBhcmUgZ29vZCBKRURFQyBudW1iZXJzLCBsb29rCi0gICB0aGVtIHVwIGFuZCB0aGVuIGFkZCB0aGVtIHRvIHRoZSBjaGlwIGxpc3QgKi8KLXN0YXRpYyBpbnQgaGFuZGxlX2plZGVjcyhzdHJ1Y3QgbWFwX2luZm8gKm1hcCxfX3U4ICpNZmcsX191OCAqSWQsdW5zaWduZWQgQ291bnQsCi0JCSAgdW5zaWduZWQgbG9uZyBiYXNlLHN0cnVjdCBqZWRlY19wcml2YXRlICpwcml2KQotewotICAgdW5zaWduZWQgSSxKOwotICAgdW5zaWduZWQgbG9uZyBTaXplOwotICAgdW5zaWduZWQgbG9uZyBTZWN0b3JTaXplOwotICAgY29uc3Qgc3RydWN0IEpFREVDVGFibGUgKkpFREVDOwotCi0gICAvLyBUZXN0ICMyIEpFREVDIG51bWJlcnMgZXhoaWJpdCBvZGQgcGFyaXR5Ci0gICBmb3IgKEkgPSAwOyBJICE9IENvdW50OyBJKyspCi0gICB7Ci0gICAgICBpZiAoY2hlY2twYXJpdHkoTWZnW0ldKSA9PSAwIHx8IGNoZWNrcGFyaXR5KElkW0ldKSA9PSAwKQotCSByZXR1cm4gMDsKLSAgIH0KLQotICAgLy8gRmluYWxseSwganVzdCBtYWtlIHN1cmUgYWxsIHRoZSBjaGlwIHNpemVzIGFyZSB0aGUgc2FtZQotICAgSkVERUMgPSBqZWRlY19pZHRvaW5mKE1mZ1swXSxJZFswXSk7Ci0KLSAgIGlmIChKRURFQyA9PSAwKQotICAgewotICAgICAgcHJpbnRrKCJtdGQ6IEZvdW5kIEpFREVDIGZsYXNoIGNoaXAsIGJ1dCBkbyBub3QgaGF2ZSBhIHRhYmxlIGVudHJ5IGZvciAleDoleFxuIixNZmdbMF0sTWZnWzFdKTsKLSAgICAgIHJldHVybiAwOwotICAgfQotCi0gICBTaXplID0gSkVERUMtPnNpemU7Ci0gICBTZWN0b3JTaXplID0gSkVERUMtPnNlY3RvcnNpemU7Ci0gICBmb3IgKEkgPSAwOyBJICE9IENvdW50OyBJKyspCi0gICB7Ci0gICAgICBKRURFQyA9IGplZGVjX2lkdG9pbmYoTWZnWzBdLElkWzBdKTsKLSAgICAgIGlmIChKRURFQyA9PSAwKQotICAgICAgewotCSBwcmludGsoIm10ZDogRm91bmQgSkVERUMgZmxhc2ggY2hpcCwgYnV0IGRvIG5vdCBoYXZlIGEgdGFibGUgZW50cnkgZm9yICV4OiV4XG4iLE1mZ1swXSxNZmdbMV0pOwotCSByZXR1cm4gMDsKLSAgICAgIH0KLQotICAgICAgaWYgKFNpemUgIT0gSkVERUMtPnNpemUgfHwgU2VjdG9yU2l6ZSAhPSBKRURFQy0+c2VjdG9yc2l6ZSkKLSAgICAgIHsKLQkgcHJpbnRrKCJtdGQ6IEZhaWxlZC4gSW50ZXJsZXZlZCBmbGFzaCBkb2VzIG5vdCBoYXZlIG1hdGNoaW5nIGNoYXJhY3RlcmlzdGljc1xuIik7Ci0JIHJldHVybiAwOwotICAgICAgfQotICAgfQotCi0gICAvLyBMb2FkIHRoZSBDaGlwcwotICAgZm9yIChJID0gMDsgSSAhPSBNQVhfSkVERUNfQ0hJUFM7IEkrKykKLSAgIHsKLSAgICAgIGlmIChwcml2LT5jaGlwc1tJXS5qZWRlYyA9PSAwKQotCSBicmVhazsKLSAgIH0KLQotICAgaWYgKEkgKyBDb3VudCA+IE1BWF9KRURFQ19DSElQUykKLSAgIHsKLSAgICAgIHByaW50aygibXRkOiBEZXZpY2UgaGFzIHRvbyBtYW55IGNoaXBzLiBJbmNyZWFzZSBNQVhfSkVERUNfQ0hJUFNcbiIpOwotICAgICAgcmV0dXJuIDA7Ci0gICB9Ci0KLSAgIC8vIEFkZCB0aGVtIHRvIHRoZSB0YWJsZQotICAgZm9yIChKID0gMDsgSiAhPSBDb3VudDsgSisrKQotICAgewotICAgICAgdW5zaWduZWQgbG9uZyBCYW5rOwotCi0gICAgICBKRURFQyA9IGplZGVjX2lkdG9pbmYoTWZnW0pdLElkW0pdKTsKLSAgICAgIHByaXYtPmNoaXBzW0ldLmplZGVjID0gKE1mZ1tKXSA8PCA4KSB8IElkW0pdOwotICAgICAgcHJpdi0+Y2hpcHNbSV0uc2l6ZSA9IEpFREVDLT5zaXplOwotICAgICAgcHJpdi0+Y2hpcHNbSV0uc2VjdG9yc2l6ZSA9IEpFREVDLT5zZWN0b3JzaXplOwotICAgICAgcHJpdi0+Y2hpcHNbSV0uYmFzZSA9IGJhc2UgKyBKOwotICAgICAgcHJpdi0+Y2hpcHNbSV0uZGF0YXNoaWZ0ID0gSio4OwotICAgICAgcHJpdi0+Y2hpcHNbSV0uY2FwYWJpbGl0aWVzID0gSkVERUMtPmNhcGFiaWxpdGllczsKLSAgICAgIHByaXYtPmNoaXBzW0ldLm9mZnNldCA9IHByaXYtPnNpemUgKyBKOwotCi0gICAgICAvLyBsb2cyIG4gOnwKLSAgICAgIHByaXYtPmNoaXBzW0ldLmFkZHJzaGlmdCA9IDA7Ci0gICAgICBmb3IgKEJhbmsgPSBDb3VudDsgQmFuayAhPSAxOyBCYW5rID4+PSAxLCBwcml2LT5jaGlwc1tJXS5hZGRyc2hpZnQrKyk7Ci0KLSAgICAgIC8vIERldGVybWluZSBob3cgZmlsbGVkIHRoaXMgYmFuayBpcy4KLSAgICAgIEJhbmsgPSBiYXNlICYgKH4obXlfYmFua19zaXplLTEpKTsKLSAgICAgIGlmIChwcml2LT5iYW5rX2ZpbGxbQmFuay9teV9iYW5rX3NpemVdIDwgYmFzZSArCi0JICAoSkVERUMtPnNpemUgPDwgcHJpdi0+Y2hpcHNbSV0uYWRkcnNoaWZ0KSAtIEJhbmspCi0JIHByaXYtPmJhbmtfZmlsbFtCYW5rL215X2Jhbmtfc2l6ZV0gPSAgYmFzZSArIChKRURFQy0+c2l6ZSA8PCBwcml2LT5jaGlwc1tJXS5hZGRyc2hpZnQpIC0gQmFuazsKLSAgICAgIEkrKzsKLSAgIH0KLQotICAgcHJpdi0+c2l6ZSArPSBwcml2LT5jaGlwc1tJLTFdLnNpemUqQ291bnQ7Ci0KLSAgIHJldHVybiBwcml2LT5jaGlwc1tJLTFdLnNpemU7Ci19Ci0KLS8qIExvb2t1cCB0aGUgY2hpcCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBKRURFQyBJRCB0YWJsZS4gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgSkVERUNUYWJsZSAqamVkZWNfaWR0b2luZihfX3U4IG1mcixfX3U4IGlkKQotewotICAgX191MTYgSWQgPSAobWZyIDw8IDgpIHwgaWQ7Ci0gICB1bnNpZ25lZCBsb25nIEkgPSAwOwotICAgZm9yIChJID0gMDsgSkVERUNfdGFibGVbSV0uamVkZWMgIT0gMDsgSSsrKQotICAgICAgaWYgKEpFREVDX3RhYmxlW0ldLmplZGVjID09IElkKQotCSByZXR1cm4gSkVERUNfdGFibGUgKyBJOwotICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8vIExvb2sgZm9yIGZsYXNoIHVzaW5nIGFuIDggYml0IGJ1cyBpbnRlcmZhY2UKLXN0YXRpYyBpbnQgamVkZWNfcHJvYmU4KHN0cnVjdCBtYXBfaW5mbyAqbWFwLHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJICBzdHJ1Y3QgamVkZWNfcHJpdmF0ZSAqcHJpdikKLXsKLSAgICNkZWZpbmUgZmxyZWFkKHgpIG1hcF9yZWFkOChtYXAsYmFzZSt4KQotICAgI2RlZmluZSBmbHdyaXRlKHYseCkgbWFwX3dyaXRlOChtYXAsdixiYXNlK3gpCi0KLSAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQXV0b1NlbDEgPSAweEFBOwotICAgY29uc3QgdW5zaWduZWQgbG9uZyBBdXRvU2VsMiA9IDB4NTU7Ci0gICBjb25zdCB1bnNpZ25lZCBsb25nIEF1dG9TZWwzID0gMHg5MDsKLSAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgUmVzZXQgPSAweEYwOwotICAgX191MzIgT2xkVmFsOwotICAgX191OCBNZmdbMV07Ci0gICBfX3U4IElkWzFdOwotICAgdW5zaWduZWQgSTsKLSAgIHVuc2lnbmVkIGxvbmcgU2l6ZTsKLQotICAgLy8gV2FpdCBmb3IgYW55IHdyaXRlL2VyYXNlIG9wZXJhdGlvbiB0byBzZXR0bGUKLSAgIE9sZFZhbCA9IGZscmVhZChiYXNlKTsKLSAgIGZvciAoSSA9IDA7IE9sZFZhbCAhPSBmbHJlYWQoYmFzZSkgJiYgSSA8IDEwMDAwOyBJKyspCi0gICAgICBPbGRWYWwgPSBmbHJlYWQoYmFzZSk7Ci0KLSAgIC8vIFJlc2V0IHRoZSBjaGlwCi0gICBmbHdyaXRlKFJlc2V0LDB4NTU1KTsKLQotICAgLy8gU2VuZCB0aGUgc2VxdWVuY2UKLSAgIGZsd3JpdGUoQXV0b1NlbDEsMHg1NTUpOwotICAgZmx3cml0ZShBdXRvU2VsMiwweDJBQSk7Ci0gICBmbHdyaXRlKEF1dG9TZWwzLDB4NTU1KTsKLQotICAgLy8gIEdldCB0aGUgSkVERUMgbnVtYmVycwotICAgTWZnWzBdID0gZmxyZWFkKDApOwotICAgSWRbMF0gPSBmbHJlYWQoMSk7Ci0gICAvLyAgIHByaW50aygiTWZnIGlzICV4LCBJZCBpcyAleFxuIixNZmdbMF0sSWRbMF0pOwotCi0gICBTaXplID0gaGFuZGxlX2plZGVjcyhtYXAsTWZnLElkLDEsYmFzZSxwcml2KTsKLSAgIC8vICAgcHJpbnRrKCJoYW5kbGVfamVkZWNzIFNpemUgaXMgJXhcbiIsKHVuc2lnbmVkIGludClTaXplKTsKLSAgIGlmIChTaXplID09IDApCi0gICB7Ci0gICAgICBmbHdyaXRlKFJlc2V0LDB4NTU1KTsKLSAgICAgIHJldHVybiAwOwotICAgfQotCi0KLSAgIC8vIFJlc2V0LgotICAgZmx3cml0ZShSZXNldCwweDU1NSk7Ci0KLSAgIHJldHVybiAxOwotCi0gICAjdW5kZWYgZmxyZWFkCi0gICAjdW5kZWYgZmx3cml0ZQotfQotCi0vLyBMb29rIGZvciBmbGFzaCB1c2luZyBhIDE2IGJpdCBidXMgaW50ZXJmYWNlIChpZSAyIDgtYml0IGNoaXBzKQotc3RhdGljIGludCBqZWRlY19wcm9iZTE2KHN0cnVjdCBtYXBfaW5mbyAqbWFwLHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJICBzdHJ1Y3QgamVkZWNfcHJpdmF0ZSAqcHJpdikKLXsKLSAgIHJldHVybiAwOwotfQotCi0vLyBMb29rIGZvciBmbGFzaCB1c2luZyBhIDMyIGJpdCBidXMgaW50ZXJmYWNlIChpZSA0IDgtYml0IGNoaXBzKQotc3RhdGljIGludCBqZWRlY19wcm9iZTMyKHN0cnVjdCBtYXBfaW5mbyAqbWFwLHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJICBzdHJ1Y3QgamVkZWNfcHJpdmF0ZSAqcHJpdikKLXsKLSAgICNkZWZpbmUgZmxyZWFkKHgpIG1hcF9yZWFkMzIobWFwLGJhc2UrKCh4KTw8MikpCi0gICAjZGVmaW5lIGZsd3JpdGUodix4KSBtYXBfd3JpdGUzMihtYXAsdixiYXNlKygoeCk8PDIpKQotCi0gICBjb25zdCB1bnNpZ25lZCBsb25nIEF1dG9TZWwxID0gMHhBQUFBQUFBQTsKLSAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQXV0b1NlbDIgPSAweDU1NTU1NTU1OwotICAgY29uc3QgdW5zaWduZWQgbG9uZyBBdXRvU2VsMyA9IDB4OTA5MDkwOTA7Ci0gICBjb25zdCB1bnNpZ25lZCBsb25nIFJlc2V0ID0gMHhGMEYwRjBGMDsKLSAgIF9fdTMyIE9sZFZhbDsKLSAgIF9fdTggTWZnWzRdOwotICAgX191OCBJZFs0XTsKLSAgIHVuc2lnbmVkIEk7Ci0gICB1bnNpZ25lZCBsb25nIFNpemU7Ci0KLSAgIC8vIFdhaXQgZm9yIGFueSB3cml0ZS9lcmFzZSBvcGVyYXRpb24gdG8gc2V0dGxlCi0gICBPbGRWYWwgPSBmbHJlYWQoYmFzZSk7Ci0gICBmb3IgKEkgPSAwOyBPbGRWYWwgIT0gZmxyZWFkKGJhc2UpICYmIEkgPCAxMDAwMDsgSSsrKQotICAgICAgT2xkVmFsID0gZmxyZWFkKGJhc2UpOwotCi0gICAvLyBSZXNldCB0aGUgY2hpcAotICAgZmx3cml0ZShSZXNldCwweDU1NSk7Ci0KLSAgIC8vIFNlbmQgdGhlIHNlcXVlbmNlCi0gICBmbHdyaXRlKEF1dG9TZWwxLDB4NTU1KTsKLSAgIGZsd3JpdGUoQXV0b1NlbDIsMHgyQUEpOwotICAgZmx3cml0ZShBdXRvU2VsMywweDU1NSk7Ci0KLSAgIC8vIFRlc3QgIzEsIEpFREVDIG51bWJlcnMgYXJlIHJlYWRhYmxlIGZyb20gMHg/PzAwLzB4Pz8wMQotICAgaWYgKGZscmVhZCgwKSAhPSBmbHJlYWQoMHgxMDApIHx8Ci0gICAgICAgZmxyZWFkKDEpICE9IGZscmVhZCgweDEwMSkpCi0gICB7Ci0gICAgICBmbHdyaXRlKFJlc2V0LDB4NTU1KTsKLSAgICAgIHJldHVybiAwOwotICAgfQotCi0gICAvLyBTcGxpdCB1cCB0aGUgSkVERUMgbnVtYmVycwotICAgT2xkVmFsID0gZmxyZWFkKDApOwotICAgZm9yIChJID0gMDsgSSAhPSA0OyBJKyspCi0gICAgICBNZmdbSV0gPSAoT2xkVmFsID4+IChJKjgpKTsKLSAgIE9sZFZhbCA9IGZscmVhZCgxKTsKLSAgIGZvciAoSSA9IDA7IEkgIT0gNDsgSSsrKQotICAgICAgSWRbSV0gPSAoT2xkVmFsID4+IChJKjgpKTsKLQotICAgU2l6ZSA9IGhhbmRsZV9qZWRlY3MobWFwLE1mZyxJZCw0LGJhc2UscHJpdik7Ci0gICBpZiAoU2l6ZSA9PSAwKQotICAgewotICAgICAgZmx3cml0ZShSZXNldCwweDU1NSk7Ci0gICAgICByZXR1cm4gMDsKLSAgIH0KLQotICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgYWRkcmVzcyB3cmFwIGFyb3VuZCB3aXRoaW4gYSBzaW5nbGUgYmFuaywgaWYgdGhpcwotICAgICAgcmV0dXJucyBKRURFQyBudW1iZXJzIHRoZW4gd2UgYXNzdW1lIHRoYXQgaXQgaXMgd3JhcCBhcm91bmQuIE5vdGljZQotICAgICAgd2UgY2FsbCB0aGlzIHJvdXRpbmUgd2l0aCB0aGUgSkVERUMgcmV0dXJuIHN0aWxsIGVuYWJsZWQsIGlmIHR3byBvcgotICAgICAgbW9yZSBmbGFzaGVzIGhhdmUgYSB0cnVuY2F0ZWQgYWRkcmVzcyBzcGFjZSB0aGUgcHJvYmUgdGVzdCB3aWxsIHN0aWxsCi0gICAgICB3b3JrICovCi0gICBpZiAoYmFzZSArIChTaXplPDwyKSsweDU1NSA8IG1hcC0+c2l6ZSAmJgotICAgICAgIGJhc2UgKyAoU2l6ZTw8MikrMHg1NTUgPCAoYmFzZSAmICh+KG15X2Jhbmtfc2l6ZS0xKSkpICsgbXlfYmFua19zaXplKQotICAgewotICAgICAgaWYgKGZscmVhZChiYXNlK1NpemUpICE9IGZscmVhZChiYXNlK1NpemUgKyAweDEwMCkgfHwKLQkgIGZscmVhZChiYXNlK1NpemUgKyAxKSAhPSBmbHJlYWQoYmFzZStTaXplICsgMHgxMDEpKQotICAgICAgewotCSBqZWRlY19wcm9iZTMyKG1hcCxiYXNlK1NpemUscHJpdik7Ci0gICAgICB9Ci0gICB9Ci0KLSAgIC8vIFJlc2V0LgotICAgZmx3cml0ZSgweEYwRjBGMEYwLDB4NTU1KTsKLQotICAgcmV0dXJuIDE7Ci0KLSAgICN1bmRlZiBmbHJlYWQKLSAgICN1bmRlZiBmbHdyaXRlCi19Ci0KLS8qIExpbmVhciByZWFkLiAqLwotc3RhdGljIGludCBqZWRlY19yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKLQkJICAgICAgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQotewotICAgc3RydWN0IG1hcF9pbmZvICptYXAgPSBtdGQtPnByaXY7Ci0KLSAgIG1hcF9jb3B5X2Zyb20obWFwLCBidWYsIGZyb20sIGxlbik7Ci0gICAqcmV0bGVuID0gbGVuOwotICAgcmV0dXJuIDA7Ci19Ci0KLS8qIEJhbmtlZCByZWFkLiBUYWtlIHNwZWNpYWwgY2FyZSB0byBqdW1wIHBhc3QgdGhlIGhvbGVzIGluIHRoZSBiYW5rCi0gICBtYXBwaW5nLiBUaGlzIHZlcnNpb24gYXNzdW1lcyBzeW1ldHJ5IGluIHRoZSBob2xlcy4uICovCi1zdGF0aWMgaW50IGplZGVjX3JlYWRfYmFua2VkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKLQkJCSAgICAgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQotewotICAgc3RydWN0IG1hcF9pbmZvICptYXAgPSBtdGQtPnByaXY7Ci0gICBzdHJ1Y3QgamVkZWNfcHJpdmF0ZSAqcHJpdiA9IG1hcC0+ZmxkcnZfcHJpdjsKLQotICAgKnJldGxlbiA9IDA7Ci0gICB3aGlsZSAobGVuID4gMCkKLSAgIHsKLSAgICAgIC8vIERldGVybWluZSB3aGF0IGJhbmsgYW5kIG9mZnNldCBpbnRvIHRoYXQgYmFuayB0aGUgZmlyc3QgYnl0ZSBpcwotICAgICAgdW5zaWduZWQgbG9uZyBiYW5rID0gZnJvbSAmICh+KHByaXYtPmJhbmtfZmlsbFswXS0xKSk7Ci0gICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCA9IGZyb20gJiAocHJpdi0+YmFua19maWxsWzBdLTEpOwotICAgICAgdW5zaWduZWQgbG9uZyBnZXQgPSBsZW47Ci0gICAgICBpZiAocHJpdi0+YmFua19maWxsWzBdIC0gb2Zmc2V0IDwgbGVuKQotCSBnZXQgPSBwcml2LT5iYW5rX2ZpbGxbMF0gLSBvZmZzZXQ7Ci0KLSAgICAgIGJhbmsgLz0gcHJpdi0+YmFua19maWxsWzBdOwotICAgICAgbWFwX2NvcHlfZnJvbShtYXAsYnVmICsgKnJldGxlbixiYW5rKm15X2Jhbmtfc2l6ZSArIG9mZnNldCxnZXQpOwotCi0gICAgICBsZW4gLT0gZ2V0OwotICAgICAgKnJldGxlbiArPSBnZXQ7Ci0gICAgICBmcm9tICs9IGdldDsKLSAgIH0KLSAgIHJldHVybiAwOwotfQotCi0vKiBQYXNzIHRoZSBmbGFncyB2YWx1ZSB0aGF0IHRoZSBmbGFzaCByZXR1cm4gYmVmb3JlIGl0IHJlLWVudGVyZWQgcmVhZAotICAgbW9kZS4gKi8KLXN0YXRpYyB2b2lkIGplZGVjX2ZsYXNoX2ZhaWxlZCh1bnNpZ25lZCBjaGFyIGNvZGUpCi17Ci0gICAvKiBCaXQgNSBiZWluZyBoaWdoIGluZGljYXRlcyB0aGF0IHRoZXJlIHdhcyBhbiBpbnRlcm5hbCBkZXZpY2UKLSAgICAgIGZhaWx1cmUsIGVyYXN1cmUgdGltZSBsaW1pdHMgZXhjZWVkZWQgb3Igc29tZXRoaW5nICovCi0gICBpZiAoKGNvZGUgJiAoMSA8PCA1KSkgIT0gMCkKLSAgIHsKLSAgICAgIHByaW50aygibXRkOiBJbnRlcm5hbCBGbGFzaCBmYWlsdXJlXG4iKTsKLSAgICAgIHJldHVybjsKLSAgIH0KLSAgIHByaW50aygibXRkOiBQcm9ncmFtbWluZyBkaWRuJ3QgdGFrZVxuIik7Ci19Ci0KLS8qIFRoaXMgdXNlcyB0aGUgZXJhc3VyZSBmdW5jdGlvbiBkZXNjcmliZWQgaW4gdGhlIEFNRCBGbGFzaCBIYW5kYm9vaywKLSAgIGl0IHdpbGwgd29yayBmb3IgZmxhc2hlcyB3aXRoIGEgZml4ZWQgc2VjdG9yIHNpemUgb25seS4gRmxhc2hlcyB3aXRoCi0gICBhIHNlbGVjdGlvbiBvZiBzZWN0b3Igc2l6ZXMgKGllIHRoZSBBTUQgQW0yOUY4MDBCKSB3aWxsIG5lZWQgYSBkaWZmZXJlbnQKLSAgIHJvdXRpbmUuIFRoaXMgcm91dGluZSB0cmllcyB0byBwYXJhbGxpemUgZXJhc2luZyBtdWx0aXBsZSBjaGlwcy9zZWN0b3JzCi0gICB3aGVyZSBwb3NzaWJsZSAqLwotc3RhdGljIGludCBmbGFzaF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQotewotICAgLy8gRG9lcyBJTyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNoaXAKLSAgICNkZWZpbmUgZmxyZWFkKHgpIG1hcF9yZWFkOChtYXAsY2hpcC0+YmFzZSsoKHgpPDxjaGlwLT5hZGRyc2hpZnQpKQotICAgI2RlZmluZSBmbHdyaXRlKHYseCkgbWFwX3dyaXRlOChtYXAsdixjaGlwLT5iYXNlKygoeCk8PGNoaXAtPmFkZHJzaGlmdCkpCi0KLSAgIHVuc2lnbmVkIGxvbmcgVGltZSA9IDA7Ci0gICB1bnNpZ25lZCBsb25nIE5vVGltZSA9IDA7Ci0gICB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gaW5zdHItPmFkZHIsIGxlbiA9IGluc3RyLT5sZW47Ci0gICB1bnNpZ25lZCBpbnQgSTsKLSAgIHN0cnVjdCBtYXBfaW5mbyAqbWFwID0gbXRkLT5wcml2OwotICAgc3RydWN0IGplZGVjX3ByaXZhdGUgKnByaXYgPSBtYXAtPmZsZHJ2X3ByaXY7Ci0KLSAgIC8vIFZlcmlmeSB0aGUgYXJndW1lbnRzLi4KLSAgIGlmIChzdGFydCArIGxlbiA+IG10ZC0+c2l6ZSB8fAotICAgICAgIChzdGFydCAlIG10ZC0+ZXJhc2VzaXplKSAhPSAwIHx8Ci0gICAgICAgKGxlbiAlIG10ZC0+ZXJhc2VzaXplKSAhPSAwIHx8Ci0gICAgICAgKGxlbi9tdGQtPmVyYXNlc2l6ZSkgPT0gMCkKLSAgICAgIHJldHVybiAtRUlOVkFMOwotCi0gICBqZWRlY19mbGFzaF9jaGlwX3NjYW4ocHJpdixzdGFydCxsZW4pOwotCi0gICAvLyBTdGFydCB0aGUgZXJhc2Ugc2VxdWVuY2Ugb24gZWFjaCBjaGlwCi0gICBmb3IgKEkgPSAwOyBwcml2LT5jaGlwc1tJXS5qZWRlYyAhPSAwICYmIEkgPCBNQVhfSkVERUNfQ0hJUFM7IEkrKykKLSAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgb2ZmOwotICAgICAgc3RydWN0IGplZGVjX2ZsYXNoX2NoaXAgKmNoaXAgPSBwcml2LT5jaGlwcyArIEk7Ci0KLSAgICAgIGlmIChjaGlwLT5sZW5ndGggPT0gMCkKLQkgY29udGludWU7Ci0KLSAgICAgIGlmIChjaGlwLT5zdGFydCArIGNoaXAtPmxlbmd0aCA+IGNoaXAtPnNpemUpCi0gICAgICB7Ci0JIHByaW50aygiRElFXG4iKTsKLQkgcmV0dXJuIC1FSU87Ci0gICAgICB9Ci0KLSAgICAgIGZsd3JpdGUoMHhGMCxjaGlwLT5zdGFydCArIDB4NTU1KTsKLSAgICAgIGZsd3JpdGUoMHhBQSxjaGlwLT5zdGFydCArIDB4NTU1KTsKLSAgICAgIGZsd3JpdGUoMHg1NSxjaGlwLT5zdGFydCArIDB4MkFBKTsKLSAgICAgIGZsd3JpdGUoMHg4MCxjaGlwLT5zdGFydCArIDB4NTU1KTsKLSAgICAgIGZsd3JpdGUoMHhBQSxjaGlwLT5zdGFydCArIDB4NTU1KTsKLSAgICAgIGZsd3JpdGUoMHg1NSxjaGlwLT5zdGFydCArIDB4MkFBKTsKLQotICAgICAgLyogT25jZSB3ZSBzdGFydCBzZWxlY3RpbmcgdGhlIGVyYXNlIHNlY3RvcnMgdGhlIGRlbGF5IGJldHdlZW4gZWFjaAotICAgICAgICAgY29tbWFuZCBtdXN0IG5vdCBleGNlZWQgNTB1cyBvciBpdCB3aWxsIGltbWVkaWF0ZWx5IHN0YXJ0IGVyYXNpbmcKLSAgICAgICAgIGFuZCBpZ25vcmUgdGhlIG90aGVyIHNlY3RvcnMgKi8KLSAgICAgIGZvciAob2ZmID0gMDsgb2ZmIDwgbGVuOyBvZmYgKz0gY2hpcC0+c2VjdG9yc2l6ZSkKLSAgICAgIHsKLQkgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGRpZG4ndCB0aW1lb3V0Ci0JIGZsd3JpdGUoMHgzMCxjaGlwLT5zdGFydCArIG9mZik7Ci0JIGlmIChvZmYgPT0gMCkKLQkgICAgY29udGludWU7Ci0JIGlmICgoZmxyZWFkKGNoaXAtPnN0YXJ0ICsgb2ZmKSAmICgxIDw8IDMpKSAhPSAwKQotCSB7Ci0JICAgIHByaW50aygibXRkOiBBY2shIFdlIHRpbWVkIG91dCB0aGUgZXJhc2UgdGltZXIhXG4iKTsKLQkgICAgcmV0dXJuIC1FSU87Ci0JIH0KLSAgICAgIH0KLSAgIH0KLQotICAgLyogV2UgY291bGQgc3BsaXQgdGhpcyBpbnRvIGEgdGltZXIgcm91dGluZSBhbmQgcmV0dXJuIGVhcmx5LCBwZXJmb3JtaW5nCi0gICAgICBiYWNrZ3JvdW5kIGVyYXN1cmUuLiBNYXliZSBsYXRlciBpZiB0aGUgbmVlZCB3YXJyZW50cyAqLwotCi0gICAvKiBQb2xsIHRoZSBmbGFzaCBmb3IgZXJhc3VyZSBjb21wbGV0aW9uLCBzcGVjcyBzYXkgdGhpcyBjYW4gdGFrZSBhcyBsb25nCi0gICAgICBhcyA0ODAgc2Vjb25kcyB0byBkbyBhbGwgdGhlIHNlY3RvcnMgKGZvciBhIDIgbWVnIGZsYXNoKS4KLSAgICAgIEVyYXN1cmUgdGltZSBpcyBkZXBlbmRlbnQgb24gY2hpcCBhZ2UsIHRlbXAgYW5kIHdlYXIuLiAqLwotCi0gICAvKiBUaGlzIGJlaW5nIGEgZ2VuZXJpYyByb3V0aW5lIGFzc3VtZXMgYSAzMiBiaXQgYnVzLiBJdCBkb2VzIHJlYWQzMnMKLSAgICAgIGFuZCBidW5kbGVzIGludGVybGV2ZWQgY2hpcHMgaW50byB0aGUgc2FtZSBncm91cGluZy4gVGhpcyB3aWxsIHdvcmsKLSAgICAgIGZvciBhbGwgYnVzIHdpZHRocyAqLwotICAgVGltZSA9IDA7Ci0gICBOb1RpbWUgPSAwOwotICAgZm9yIChJID0gMDsgcHJpdi0+Y2hpcHNbSV0uamVkZWMgIT0gMCAmJiBJIDwgTUFYX0pFREVDX0NISVBTOyBJKyspCi0gICB7Ci0gICAgICBzdHJ1Y3QgamVkZWNfZmxhc2hfY2hpcCAqY2hpcCA9IHByaXYtPmNoaXBzICsgSTsKLSAgICAgIHVuc2lnbmVkIGxvbmcgb2ZmID0gMDsKLSAgICAgIHVuc2lnbmVkIHRvZG9bNF0gPSB7MCwwLDAsMH07Ci0gICAgICB1bnNpZ25lZCB0b2RvX2xlZnQgPSAwOwotICAgICAgdW5zaWduZWQgSjsKLQotICAgICAgaWYgKGNoaXAtPmxlbmd0aCA9PSAwKQotCSBjb250aW51ZTsKLQotICAgICAgLyogRmluZCBhbGwgY2hpcHMgaW4gdGhpcyBkYXRhIGxpbmUsIHJlYWxpc3RpY2FsbHkgdGhpcyBpcyBhbGwKLSAgICAgICAgIG9yIG5vdGhpbmcgdXAgdG8gdGhlIGludGVybGV2ZSBjb3VudCAqLwotICAgICAgZm9yIChKID0gMDsgcHJpdi0+Y2hpcHNbSl0uamVkZWMgIT0gMCAmJiBKIDwgTUFYX0pFREVDX0NISVBTOyBKKyspCi0gICAgICB7Ci0JIGlmICgocHJpdi0+Y2hpcHNbSl0uYmFzZSAmICh+KCgxPDxjaGlwLT5hZGRyc2hpZnQpLTEpKSkgPT0KLQkgICAgIChjaGlwLT5iYXNlICYgKH4oKDE8PGNoaXAtPmFkZHJzaGlmdCktMSkpKSkKLQkgewotCSAgICB0b2RvX2xlZnQrKzsKLQkgICAgdG9kb1twcml2LT5jaGlwc1tKXS5iYXNlICYgKCgxPDxjaGlwLT5hZGRyc2hpZnQpLTEpXSA9IDE7Ci0JIH0KLSAgICAgIH0KLQotICAgICAgLyogICAgICBwcmludGsoInRvZG86ICV4ICV4ICV4ICV4XG4iLChzaG9ydCl0b2RvWzBdLChzaG9ydCl0b2RvWzFdLAotCSAgICAgIChzaG9ydCl0b2RvWzJdLChzaG9ydCl0b2RvWzNdKTsKLSAgICAgICovCi0gICAgICB3aGlsZSAoMSkKLSAgICAgIHsKLQkgX191MzIgTGFzdFs0XTsKLQkgdW5zaWduZWQgbG9uZyBDb3VudCA9IDA7Ci0KLQkgLyogRHVyaW5nIGVyYXNlIGJpdCA3IGlzIGhlbGQgbG93IGFuZCBiaXQgNiB0b2dnbGVzLCB3ZSB3YXRjaCB0aGlzLAotCSAgICBzaG91bGQgaXQgc3RvcCB0b2dnbGluZyBvciBnbyBoaWdoIHRoZW4gdGhlIGVyYXNlIGlzIGNvbXBsZXRlZCwKLSAgCSAgICBvciB0aGlzIGlzIG5vdCByZWFsbHkgZmxhc2ggOz4gKi8KLQkgc3dpdGNoIChtYXAtPmJ1c3dpZHRoKSB7Ci0JIGNhc2UgMToKLQkgICAgTGFzdFswXSA9IG1hcF9yZWFkOChtYXAsKGNoaXAtPmJhc2UgPj4gY2hpcC0+YWRkcnNoaWZ0KSArIGNoaXAtPnN0YXJ0ICsgb2ZmKTsKLQkgICAgTGFzdFsxXSA9IG1hcF9yZWFkOChtYXAsKGNoaXAtPmJhc2UgPj4gY2hpcC0+YWRkcnNoaWZ0KSArIGNoaXAtPnN0YXJ0ICsgb2ZmKTsKLQkgICAgTGFzdFsyXSA9IG1hcF9yZWFkOChtYXAsKGNoaXAtPmJhc2UgPj4gY2hpcC0+YWRkcnNoaWZ0KSArIGNoaXAtPnN0YXJ0ICsgb2ZmKTsKLQkgICAgYnJlYWs7Ci0JIGNhc2UgMjoKLQkgICAgTGFzdFswXSA9IG1hcF9yZWFkMTYobWFwLChjaGlwLT5iYXNlID4+IGNoaXAtPmFkZHJzaGlmdCkgKyBjaGlwLT5zdGFydCArIG9mZik7Ci0JICAgIExhc3RbMV0gPSBtYXBfcmVhZDE2KG1hcCwoY2hpcC0+YmFzZSA+PiBjaGlwLT5hZGRyc2hpZnQpICsgY2hpcC0+c3RhcnQgKyBvZmYpOwotCSAgICBMYXN0WzJdID0gbWFwX3JlYWQxNihtYXAsKGNoaXAtPmJhc2UgPj4gY2hpcC0+YWRkcnNoaWZ0KSArIGNoaXAtPnN0YXJ0ICsgb2ZmKTsKLQkgICAgYnJlYWs7Ci0JIGNhc2UgMzoKLQkgICAgTGFzdFswXSA9IG1hcF9yZWFkMzIobWFwLChjaGlwLT5iYXNlID4+IGNoaXAtPmFkZHJzaGlmdCkgKyBjaGlwLT5zdGFydCArIG9mZik7Ci0JICAgIExhc3RbMV0gPSBtYXBfcmVhZDMyKG1hcCwoY2hpcC0+YmFzZSA+PiBjaGlwLT5hZGRyc2hpZnQpICsgY2hpcC0+c3RhcnQgKyBvZmYpOwotCSAgICBMYXN0WzJdID0gbWFwX3JlYWQzMihtYXAsKGNoaXAtPmJhc2UgPj4gY2hpcC0+YWRkcnNoaWZ0KSArIGNoaXAtPnN0YXJ0ICsgb2ZmKTsKLQkgICAgYnJlYWs7Ci0JIH0KLQkgQ291bnQgPSAzOwotCSB3aGlsZSAodG9kb19sZWZ0ICE9IDApCi0JIHsKLQkgICAgZm9yIChKID0gMDsgSiAhPSA0OyBKKyspCi0JICAgIHsKLQkgICAgICAgX191OCBCeXRlMSA9IChMYXN0WyhDb3VudC0xKSU0XSA+PiAoSio4KSkgJiAweEZGOwotCSAgICAgICBfX3U4IEJ5dGUyID0gKExhc3RbKENvdW50LTIpJTRdID4+IChKKjgpKSAmIDB4RkY7Ci0JICAgICAgIF9fdTggQnl0ZTMgPSAoTGFzdFsoQ291bnQtMyklNF0gPj4gKEoqOCkpICYgMHhGRjsKLQkgICAgICAgaWYgKHRvZG9bSl0gPT0gMCkKLQkJICBjb250aW51ZTsKLQotCSAgICAgICBpZiAoKEJ5dGUxICYgKDEgPDwgNykpID09IDAgJiYgQnl0ZTEgIT0gQnl0ZTIpCi0JICAgICAgIHsKLS8vCQkgIHByaW50aygiQ2hlY2sgJXggJXggJXhcbiIsKHNob3J0KUosKHNob3J0KUJ5dGUxLChzaG9ydClCeXRlMik7Ci0JCSAgY29udGludWU7Ci0JICAgICAgIH0KLQotCSAgICAgICBpZiAoQnl0ZTEgPT0gQnl0ZTIpCi0JICAgICAgIHsKLQkJICBqZWRlY19mbGFzaF9mYWlsZWQoQnl0ZTMpOwotCQkgIHJldHVybiAtRUlPOwotCSAgICAgICB9Ci0KLQkgICAgICAgdG9kb1tKXSA9IDA7Ci0JICAgICAgIHRvZG9fbGVmdC0tOwotCSAgICB9Ci0KLS8qCSAgICBpZiAoTm9UaW1lID09IDApCi0JICAgICAgIFRpbWUgKz0gSFovMTAgLSBzY2hlZHVsZV90aW1lb3V0KEhaLzEwKTsqLwotCSAgICBOb1RpbWUgPSAwOwotCi0JICAgIHN3aXRjaCAobWFwLT5idXN3aWR0aCkgewotCSAgICBjYXNlIDE6Ci0JICAgICAgIExhc3RbQ291bnQgJSA0XSA9IG1hcF9yZWFkOChtYXAsKGNoaXAtPmJhc2UgPj4gY2hpcC0+YWRkcnNoaWZ0KSArIGNoaXAtPnN0YXJ0ICsgb2ZmKTsKLQkgICAgICBicmVhazsKLQkgICAgY2FzZSAyOgotCSAgICAgICBMYXN0W0NvdW50ICUgNF0gPSBtYXBfcmVhZDE2KG1hcCwoY2hpcC0+YmFzZSA+PiBjaGlwLT5hZGRyc2hpZnQpICsgY2hpcC0+c3RhcnQgKyBvZmYpOwotCSAgICAgIGJyZWFrOwotCSAgICBjYXNlIDQ6Ci0JICAgICAgIExhc3RbQ291bnQgJSA0XSA9IG1hcF9yZWFkMzIobWFwLChjaGlwLT5iYXNlID4+IGNoaXAtPmFkZHJzaGlmdCkgKyBjaGlwLT5zdGFydCArIG9mZik7Ci0JICAgICAgYnJlYWs7Ci0JICAgIH0KLQkgICAgQ291bnQrKzsKLQotLyoJICAgIC8vIENvdW50IHRpbWUsIG1heCBvZiAxNXMgcGVyIHNlY3RvciAoYWNjb3JkaW5nIHRvIEFNRCkKLQkgICAgaWYgKFRpbWUgPiAxNSpsZW4vbXRkLT5lcmFzZXNpemUqSFopCi0JICAgIHsKLQkgICAgICAgcHJpbnRrKCJtdGQ6IEZsYXNoIEVyYXNlIFRpbWVkIG91dFxuIik7Ci0JICAgICAgIHJldHVybiAtRUlPOwotCSAgICB9CSAgICAqLwotCSB9Ci0KLQkgLy8gU2tpcCB0byB0aGUgbmV4dCBjaGlwIGlmIHdlIHVzZWQgY2hpcCBlcmFzZQotCSBpZiAoY2hpcC0+bGVuZ3RoID09IGNoaXAtPnNpemUpCi0JICAgIG9mZiA9IGNoaXAtPnNpemU7Ci0JIGVsc2UKLQkgICAgb2ZmICs9IGNoaXAtPnNlY3RvcnNpemU7Ci0KLQkgaWYgKG9mZiA+PSBjaGlwLT5sZW5ndGgpCi0JICAgIGJyZWFrOwotCSBOb1RpbWUgPSAxOwotICAgICAgfQotCi0gICAgICBmb3IgKEogPSAwOyBwcml2LT5jaGlwc1tKXS5qZWRlYyAhPSAwICYmIEogPCBNQVhfSkVERUNfQ0hJUFM7IEorKykKLSAgICAgIHsKLQkgaWYgKChwcml2LT5jaGlwc1tKXS5iYXNlICYgKH4oKDE8PGNoaXAtPmFkZHJzaGlmdCktMSkpKSA9PQotCSAgICAgKGNoaXAtPmJhc2UgJiAofigoMTw8Y2hpcC0+YWRkcnNoaWZ0KS0xKSkpKQotCSAgICBwcml2LT5jaGlwc1tKXS5sZW5ndGggPSAwOwotICAgICAgfQotICAgfQotCi0gICAvL3ByaW50aygiZG9uZVxuIik7Ci0gICBpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRE9ORTsKLSAgIG10ZF9lcmFzZV9jYWxsYmFjayhpbnN0cik7Ci0gICByZXR1cm4gMDsKLQotICAgI3VuZGVmIGZscmVhZAotICAgI3VuZGVmIGZsd3JpdGUKLX0KLQotLyogVGhpcyBpcyB0aGUgc2ltcGxlIGZsYXNoIHdyaXRpbmcgZnVuY3Rpb24uIEl0IHdyaXRlcyB0byBldmVyeSBieXRlLCBpbgotICAgc2VxdWVuY2UuIEl0IHRha2VzIGNhcmUgb2YgaG93IHRvIHByb3Blcmx5IGFkZHJlc3MgdGhlIGZsYXNoIGlmCi0gICB0aGUgZmxhc2ggaXMgaW50ZXJsZXZlZC4gSXQgY2FuIG9ubHkgYmUgdXNlZCBpZiBhbGwgdGhlIGNoaXBzIGluIHRoZQotICAgYXJyYXkgYXJlIGlkZW50aWNhbCEqLwotc3RhdGljIGludCBmbGFzaF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHN0YXJ0LCBzaXplX3QgbGVuLAotCQkgICAgICAgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQotewotICAgLyogRG9lcyBJTyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNoaXAuIEl0IHRha2VzIHRoZSBiYW5rIGFkZHJlc3NpbmcKLSAgICAgIGJhc2UgKHdoaWNoIGlzIGRpdmlzaWJsZSBieSB0aGUgY2hpcCBzaXplKSBhZGRzIHRoZSBuZWNlc3NhcnkgbG93ZXIgYml0cwotICAgICAgb2YgYWRkcnNoaWZ0IChpbnRlcmxlYXZlIGluZGV4KSBhbmQgdGhlbiBhZGRzIHRoZSBjb250cm9sIHJlZ2lzdGVyIGluZGV4LiAqLwotICAgI2RlZmluZSBmbHJlYWQoeCkgbWFwX3JlYWQ4KG1hcCxiYXNlKyhvZmYmKCgxPDxjaGlwLT5hZGRyc2hpZnQpLTEpKSsoKHgpPDxjaGlwLT5hZGRyc2hpZnQpKQotICAgI2RlZmluZSBmbHdyaXRlKHYseCkgbWFwX3dyaXRlOChtYXAsdixiYXNlKyhvZmYmKCgxPDxjaGlwLT5hZGRyc2hpZnQpLTEpKSsoKHgpPDxjaGlwLT5hZGRyc2hpZnQpKQotCi0gICBzdHJ1Y3QgbWFwX2luZm8gKm1hcCA9IG10ZC0+cHJpdjsKLSAgIHN0cnVjdCBqZWRlY19wcml2YXRlICpwcml2ID0gbWFwLT5mbGRydl9wcml2OwotICAgdW5zaWduZWQgbG9uZyBiYXNlOwotICAgdW5zaWduZWQgbG9uZyBvZmY7Ci0gICBzaXplX3Qgc2F2ZV9sZW4gPSBsZW47Ci0KLSAgIGlmIChzdGFydCArIGxlbiA+IG10ZC0+c2l6ZSkKLSAgICAgIHJldHVybiAtRUlPOwotCi0gICAvL3ByaW50aygiSGVyZSIpOwotCi0gICAvL3ByaW50aygiZmxhc2hfd3JpdGU6IHN0YXJ0IGlzICV4LCBsZW4gaXMgJXhcbiIsc3RhcnQsKHVuc2lnbmVkIGxvbmcpbGVuKTsKLSAgIHdoaWxlIChsZW4gIT0gMCkKLSAgIHsKLSAgICAgIHN0cnVjdCBqZWRlY19mbGFzaF9jaGlwICpjaGlwID0gcHJpdi0+Y2hpcHM7Ci0gICAgICB1bnNpZ25lZCBsb25nIGJhbms7Ci0gICAgICB1bnNpZ25lZCBsb25nIGJvZmZzZXQ7Ci0KLSAgICAgIC8vIENvbXB1dGUgdGhlIGJhc2Ugb2YgdGhlIGZsYXNoLgotICAgICAgb2ZmID0gKCh1bnNpZ25lZCBsb25nKXN0YXJ0KSAlIChjaGlwLT5zaXplIDw8IGNoaXAtPmFkZHJzaGlmdCk7Ci0gICAgICBiYXNlID0gc3RhcnQgLSBvZmY7Ci0KLSAgICAgIC8vIFBlcmZvcm0gYmFua2VkIGFkZHJlc3NpbmcgdHJhbnNsYXRpb24uCi0gICAgICBiYW5rID0gYmFzZSAmICh+KHByaXYtPmJhbmtfZmlsbFswXS0xKSk7Ci0gICAgICBib2Zmc2V0ID0gYmFzZSAmIChwcml2LT5iYW5rX2ZpbGxbMF0tMSk7Ci0gICAgICBiYW5rID0gKGJhbmsvcHJpdi0+YmFua19maWxsWzBdKSpteV9iYW5rX3NpemU7Ci0gICAgICBiYXNlID0gYmFuayArIGJvZmZzZXQ7Ci0KLSAgICAvLyAgcHJpbnRrKCJGbGFzaW5nICVYICVYICVYXG4iLGJhc2UsY2hpcC0+c2l6ZSxsZW4pOwotICAgICAvLyBwcmludGsoIm9mZiBpcyAleCwgY29tcGFyZSB3aXRoICV4XG4iLG9mZixjaGlwLT5zaXplIDw8IGNoaXAtPmFkZHJzaGlmdCk7Ci0KLSAgICAgIC8vIExvb3Agb3ZlciB0aGlzIHBhZ2UKLSAgICAgIGZvciAoOyBvZmYgIT0gKGNoaXAtPnNpemUgPDwgY2hpcC0+YWRkcnNoaWZ0KSAmJiBsZW4gIT0gMDsgc3RhcnQrKywgbGVuLS0sIG9mZisrLGJ1ZisrKQotICAgICAgewotCSB1bnNpZ25lZCBjaGFyIG9sZGJ5dGUgPSBtYXBfcmVhZDgobWFwLGJhc2Urb2ZmKTsKLQkgdW5zaWduZWQgY2hhciBMYXN0WzRdOwotCSB1bnNpZ25lZCBsb25nIENvdW50ID0gMDsKLQotCSBpZiAob2xkYnl0ZSA9PSAqYnVmKSB7Ci0JLy8JIHByaW50aygib2xkYnl0ZSBhbmQgKmJ1ZiBpcyAleCxsZW4gaXMgJXhcbiIsb2xkYnl0ZSxsZW4pOwotCSAgICBjb250aW51ZTsKLQkgfQotCSBpZiAoKCh+b2xkYnl0ZSkgJiAqYnVmKSAhPSAwKQotCSAgICBwcmludGsoIm10ZDogd2FybjogVHJ5aW5nIHRvIHNldCBhIDAgdG8gYSAxXG4iKTsKLQotCSAvLyBXcml0ZQotCSBmbHdyaXRlKDB4QUEsMHg1NTUpOwotCSBmbHdyaXRlKDB4NTUsMHgyQUEpOwotCSBmbHdyaXRlKDB4QTAsMHg1NTUpOwotCSBtYXBfd3JpdGU4KG1hcCwqYnVmLGJhc2UgKyBvZmYpOwotCSBMYXN0WzBdID0gbWFwX3JlYWQ4KG1hcCxiYXNlICsgb2ZmKTsKLQkgTGFzdFsxXSA9IG1hcF9yZWFkOChtYXAsYmFzZSArIG9mZik7Ci0JIExhc3RbMl0gPSBtYXBfcmVhZDgobWFwLGJhc2UgKyBvZmYpOwotCi0JIC8qIFdhaXQgZm9yIHRoZSBmbGFzaCB0byBmaW5pc2ggdGhlIG9wZXJhdGlvbi4gV2Ugc3RvcmUgdGhlIGxhc3QgNAotCSAgICBzdGF0dXMgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcmV0cmlldmVkIHNvIHdlIGNhbiBkZXRlcm1pbmUgd2h5Ci0JICAgIGl0IGZhaWxlZC4gVGhlIHRvZ2dsZSBiaXRzIGtlZXAgdG9nZ2xpbmcgd2hlbiB0aGVyZSBpcyBhCi0JICAgIGZhaWx1cmUgKi8KLQkgZm9yIChDb3VudCA9IDM7IExhc3RbKENvdW50IC0gMSkgJSA0XSAhPSBMYXN0WyhDb3VudCAtIDIpICUgNF0gJiYKLQkgICAgICBDb3VudCA8IDEwMDAwOyBDb3VudCsrKQotCSAgICBMYXN0W0NvdW50ICUgNF0gPSBtYXBfcmVhZDgobWFwLGJhc2UgKyBvZmYpOwotCSBpZiAoTGFzdFsoQ291bnQgLSAxKSAlIDRdICE9ICpidWYpCi0JIHsKLQkgICAgamVkZWNfZmxhc2hfZmFpbGVkKExhc3RbKENvdW50IC0gMykgJSA0XSk7Ci0JICAgIHJldHVybiAtRUlPOwotCSB9Ci0gICAgICB9Ci0gICB9Ci0gICAqcmV0bGVuID0gc2F2ZV9sZW47Ci0gICByZXR1cm4gMDsKLX0KLQotLyogVGhpcyBpcyB1c2VkIHRvIGVuaGFuY2UgdGhlIHNwZWVkIG9mIHRoZSBlcmFzZSByb3V0aW5lLAotICAgd2hlbiB0aGluZ3MgYXJlIGJlaW5nIGRvbmUgdG8gbXVsdGlwbGUgY2hpcHMgaXQgaXMgcG9zc2libGUgdG8KLSAgIHBhcmFsbGl6ZSB0aGUgb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IGZ1bGwgbWVtb3J5IGVyYXNlcyBvZiBtdWx0aQotICAgY2hpcCBtZW1vcmllcyBiZW5pZml0ICovCi1zdGF0aWMgdm9pZCBqZWRlY19mbGFzaF9jaGlwX3NjYW4oc3RydWN0IGplZGVjX3ByaXZhdGUgKnByaXYsdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJICAgICB1bnNpZ25lZCBsb25nIGxlbikKLXsKLSAgIHVuc2lnbmVkIGludCBJOwotCi0gICAvLyBaZXJvIHRoZSByZWNvcmRzCi0gICBmb3IgKEkgPSAwOyBwcml2LT5jaGlwc1tJXS5qZWRlYyAhPSAwICYmIEkgPCBNQVhfSkVERUNfQ0hJUFM7IEkrKykKLSAgICAgIHByaXYtPmNoaXBzW0ldLnN0YXJ0ID0gcHJpdi0+Y2hpcHNbSV0ubGVuZ3RoID0gMDsKLQotICAgLy8gSW50ZXJzZWN0IHRoZSByZWdpb24gd2l0aCBlYWNoIGNoaXAKLSAgIGZvciAoSSA9IDA7IHByaXYtPmNoaXBzW0ldLmplZGVjICE9IDAgJiYgSSA8IE1BWF9KRURFQ19DSElQUzsgSSsrKQotICAgewotICAgICAgc3RydWN0IGplZGVjX2ZsYXNoX2NoaXAgKmNoaXAgPSBwcml2LT5jaGlwcyArIEk7Ci0gICAgICB1bnNpZ25lZCBsb25nIEJ5dGVTdGFydDsKLSAgICAgIHVuc2lnbmVkIGxvbmcgQ2hpcEVuZEJ5dGUgPSBjaGlwLT5vZmZzZXQgKyAoY2hpcC0+c2l6ZSA8PCBjaGlwLT5hZGRyc2hpZnQpOwotCi0gICAgICAvLyBFbmQgaXMgYmVmb3JlIHRoaXMgY2hpcCBvciB0aGUgc3RhcnQgaXMgYWZ0ZXIgaXQKLSAgICAgIGlmIChzdGFydCtsZW4gPCBjaGlwLT5vZmZzZXQgfHwKLQkgIENoaXBFbmRCeXRlIC0gKDEgPDwgY2hpcC0+YWRkcnNoaWZ0KSA8IHN0YXJ0KQotCSBjb250aW51ZTsKLQotICAgICAgaWYgKHN0YXJ0IDwgY2hpcC0+b2Zmc2V0KQotICAgICAgewotCSBCeXRlU3RhcnQgPSBjaGlwLT5vZmZzZXQ7Ci0JIGNoaXAtPnN0YXJ0ID0gMDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLQkgY2hpcC0+c3RhcnQgPSAoc3RhcnQgLSBjaGlwLT5vZmZzZXQgKyAoMSA8PCBjaGlwLT5hZGRyc2hpZnQpLTEpID4+IGNoaXAtPmFkZHJzaGlmdDsKLQkgQnl0ZVN0YXJ0ID0gc3RhcnQ7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzdGFydCArIGxlbiA+PSBDaGlwRW5kQnl0ZSkKLQkgY2hpcC0+bGVuZ3RoID0gKENoaXBFbmRCeXRlIC0gQnl0ZVN0YXJ0KSA+PiBjaGlwLT5hZGRyc2hpZnQ7Ci0gICAgICBlbHNlCi0JIGNoaXAtPmxlbmd0aCA9IChzdGFydCArIGxlbiAtIEJ5dGVTdGFydCArICgxIDw8IGNoaXAtPmFkZHJzaGlmdCktMSkgPj4gY2hpcC0+YWRkcnNoaWZ0OwotICAgfQotfQotCi1pbnQgX19pbml0IGplZGVjX2luaXQodm9pZCkKLXsKLQlyZWdpc3Rlcl9tdGRfY2hpcF9kcml2ZXIoJmplZGVjX2NoaXBkcnYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgamVkZWNfZXhpdCh2b2lkKQotewotCXVucmVnaXN0ZXJfbXRkX2NoaXBfZHJpdmVyKCZqZWRlY19jaGlwZHJ2KTsKLX0KLQotbW9kdWxlX2luaXQoamVkZWNfaW5pdCk7Ci1tb2R1bGVfZXhpdChqZWRlY19leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSmFzb24gR3VudGhvcnBlIDxqZ2dAZGVsdGF0ZWUuY29tPiBldCBhbC4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiT2xkIE1URCBjaGlwIGRyaXZlciBmb3IgSkVERUMtY29tcGxpYW50IGZsYXNoIGNoaXBzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9zaGFycC5jIGIvZHJpdmVycy9tdGQvY2hpcHMvc2hhcnAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzljZDNkMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9zaGFycC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjAxICswLDAgQEAKLS8qCi0gKiBNVEQgY2hpcCBkcml2ZXIgZm9yIHByZS1DRkkgU2hhcnAgZmxhc2ggY2hpcHMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCwyMDAxIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogICAgICAgICAgIDIwMDAsMjAwMSBMaW5lbywgSW5jLgotICoKLSAqICRJZDogc2hhcnAuYyx2IDEuMTcgMjAwNS8xMS8yOSAxNDoyODoyOCBnbGVpeG5lciBFeHAgJAotICoKLSAqIERldmljZXMgc3VwcG9ydGVkOgotICogICBMSDI4RjAxNlNDVCBTeW1tZXRyaWNhbCBibG9jayBmbGFzaCBtZW1vcnksIDJNeDgKLSAqICAgTEgyOEYwMDhTQ1QgU3ltbWV0cmljYWwgYmxvY2sgZmxhc2ggbWVtb3J5LCAxTXg4Ci0gKgotICogRG9jdW1lbnRhdGlvbjoKLSAqICAgaHR0cDovL3d3dy5zaGFycG1lZy5jb20vZGF0YXNoZWV0cy9tZW1pYy9mbGFzaGNtcC8KLSAqICAgaHR0cDovL3d3dy5zaGFycG1lZy5jb20vZGF0YXNoZWV0cy9tZW1pYy9mbGFzaGNtcC8wMXN5bWYvMTZtLzAxNnNjdGw5LnBkZgotICogICAwMTZzY3RsOS5wZGYKLSAqCi0gKiBMaW1pdGF0aW9uczoKLSAqICAgVGhpcyBkcml2ZXIgb25seSBzdXBwb3J0cyA0eDEgYXJyYW5nZW1lbnQgb2YgY2hpcHMuCi0gKiAgIE5vdCB0ZXN0ZWQgb24gYW55dGhpbmcgYnV0IFBvd2VyUEMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NmaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2RlZmluZSBDTURfUkVTRVQJCTB4ZmZmZmZmZmYKLSNkZWZpbmUgQ01EX1JFQURfSUQJCTB4OTA5MDkwOTAKLSNkZWZpbmUgQ01EX1JFQURfU1RBVFVTCQkweDcwNzA3MDcwCi0jZGVmaW5lIENNRF9DTEVBUl9TVEFUVVMJMHg1MDUwNTA1MAotI2RlZmluZSBDTURfQkxPQ0tfRVJBU0VfMQkweDIwMjAyMDIwCi0jZGVmaW5lIENNRF9CTE9DS19FUkFTRV8yCTB4ZDBkMGQwZDAKLSNkZWZpbmUgQ01EX0JZVEVfV1JJVEUJCTB4NDA0MDQwNDAKLSNkZWZpbmUgQ01EX1NVU1BFTkQJCTB4YjBiMGIwYjAKLSNkZWZpbmUgQ01EX1JFU1VNRQkJMHhkMGQwZDBkMAotI2RlZmluZSBDTURfU0VUX0JMT0NLX0xPQ0tfMQkweDYwNjA2MDYwCi0jZGVmaW5lIENNRF9TRVRfQkxPQ0tfTE9DS18yCTB4MDEwMTAxMDEKLSNkZWZpbmUgQ01EX1NFVF9NQVNURVJfTE9DS18xCTB4NjA2MDYwNjAKLSNkZWZpbmUgQ01EX1NFVF9NQVNURVJfTE9DS18yCTB4ZjFmMWYxZjEKLSNkZWZpbmUgQ01EX0NMRUFSX0JMT0NLX0xPQ0tTXzEJMHg2MDYwNjA2MAotI2RlZmluZSBDTURfQ0xFQVJfQkxPQ0tfTE9DS1NfMgkweGQwZDBkMGQwCi0KLSNkZWZpbmUgU1JfUkVBRFkJCTB4ODA4MDgwODAgLy8gMSA9IHJlYWR5Ci0jZGVmaW5lIFNSX0VSQVNFX1NVU1BFTkQJMHg0MDQwNDA0MCAvLyAxID0gYmxvY2sgZXJhc2Ugc3VzcGVuZGVkCi0jZGVmaW5lIFNSX0VSUk9SX0VSQVNFCQkweDIwMjAyMDIwIC8vIDEgPSBlcnJvciBpbiBibG9jayBlcmFzZSBvciBjbGVhciBsb2NrIGJpdHMKLSNkZWZpbmUgU1JfRVJST1JfV1JJVEUJCTB4MTAxMDEwMTAgLy8gMSA9IGVycm9yIGluIGJ5dGUgd3JpdGUgb3Igc2V0IGxvY2sgYml0Ci0jZGVmaW5lCVNSX1ZQUAkJCTB4MDgwODA4MDggLy8gMSA9IFZwcCBpcyBsb3cKLSNkZWZpbmUgU1JfV1JJVEVfU1VTUEVORAkweDA0MDQwNDA0IC8vIDEgPSBieXRlIHdyaXRlIHN1c3BlbmRlZAotI2RlZmluZSBTUl9QUk9URUNUCQkweDAyMDIwMjAyIC8vIDEgPSBsb2NrIGJpdCBzZXQKLSNkZWZpbmUgU1JfUkVTRVJWRUQJCTB4MDEwMTAxMDEKLQotI2RlZmluZSBTUl9FUlJPUlMgKFNSX0VSUk9SX0VSQVNFfFNSX0VSUk9SX1dSSVRFfFNSX1ZQUHxTUl9QUk9URUNUKQotCi0vKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KLQotI3VuZGVmIEFVVE9VTkxPQ0sgIC8qIGF1dG9tYXRpY2FsbHkgdW5sb2NrcyBibG9ja3MgYmVmb3JlIGVyYXNpbmcgKi8KLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqc2hhcnBfcHJvYmUoc3RydWN0IG1hcF9pbmZvICopOwotCi1zdGF0aWMgaW50IHNoYXJwX3Byb2JlX21hcChzdHJ1Y3QgbWFwX2luZm8gKm1hcCxzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0KLXN0YXRpYyBpbnQgc2hhcnBfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0Jc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKLXN0YXRpYyBpbnQgc2hhcnBfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7Ci1zdGF0aWMgaW50IHNoYXJwX2VyYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpOwotc3RhdGljIHZvaWQgc2hhcnBfc3luYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci1zdGF0aWMgaW50IHNoYXJwX3N1c3BlbmQoc3RydWN0IG10ZF9pbmZvICptdGQpOwotc3RhdGljIHZvaWQgc2hhcnBfcmVzdW1lKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLXN0YXRpYyB2b2lkIHNoYXJwX2Rlc3Ryb3koc3RydWN0IG10ZF9pbmZvICptdGQpOwotCi1zdGF0aWMgaW50IHNoYXJwX3dyaXRlX29uZXdvcmQoc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCi0JdW5zaWduZWQgbG9uZyBhZHIsIF9fdTMyIGRhdHVtKTsKLXN0YXRpYyBpbnQgc2hhcnBfZXJhc2Vfb25lYmxvY2soc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCi0JdW5zaWduZWQgbG9uZyBhZHIpOwotI2lmZGVmIEFVVE9VTkxPQ0sKLXN0YXRpYyB2b2lkIHNoYXJwX3VubG9ja19vbmVibG9jayhzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKLQl1bnNpZ25lZCBsb25nIGFkcik7Ci0jZW5kaWYKLQotCi1zdHJ1Y3Qgc2hhcnBfaW5mb3sKLQlzdHJ1Y3QgZmxjaGlwICpjaGlwOwotCWludCBib2d1czsKLQlpbnQgY2hpcHNoaWZ0OwotCWludCBudW1jaGlwczsKLQlzdHJ1Y3QgZmxjaGlwIGNoaXBzWzFdOwotfTsKLQotc3RhdGljIHZvaWQgc2hhcnBfZGVzdHJveShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2NoaXBfZHJpdmVyIHNoYXJwX2NoaXBkcnYgPSB7Ci0JLnByb2JlCQk9IHNoYXJwX3Byb2JlLAotCS5kZXN0cm95CT0gc2hhcnBfZGVzdHJveSwKLQkubmFtZQkJPSAic2hhcnAiLAotCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUKLX07Ci0KLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqc2hhcnBfcHJvYmUoc3RydWN0IG1hcF9pbmZvICptYXApCi17Ci0Jc3RydWN0IG10ZF9pbmZvICptdGQgPSBOVUxMOwotCXN0cnVjdCBzaGFycF9pbmZvICpzaGFycCA9IE5VTEw7Ci0JaW50IHdpZHRoOwotCi0JbXRkID0ga3phbGxvYyhzaXplb2YoKm10ZCksIEdGUF9LRVJORUwpOwotCWlmKCFtdGQpCi0JCXJldHVybiBOVUxMOwotCi0Jc2hhcnAgPSBremFsbG9jKHNpemVvZigqc2hhcnApLCBHRlBfS0VSTkVMKTsKLQlpZighc2hhcnApIHsKLQkJa2ZyZWUobXRkKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0Jd2lkdGggPSBzaGFycF9wcm9iZV9tYXAobWFwLG10ZCk7Ci0JaWYoIXdpZHRoKXsKLQkJa2ZyZWUobXRkKTsKLQkJa2ZyZWUoc2hhcnApOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQltdGQtPnByaXYgPSBtYXA7Ci0JbXRkLT50eXBlID0gTVREX05PUkZMQVNIOwotCW10ZC0+ZXJhc2UgPSBzaGFycF9lcmFzZTsKLQltdGQtPnJlYWQgPSBzaGFycF9yZWFkOwotCW10ZC0+d3JpdGUgPSBzaGFycF93cml0ZTsKLQltdGQtPnN5bmMgPSBzaGFycF9zeW5jOwotCW10ZC0+c3VzcGVuZCA9IHNoYXJwX3N1c3BlbmQ7Ci0JbXRkLT5yZXN1bWUgPSBzaGFycF9yZXN1bWU7Ci0JbXRkLT5mbGFncyA9IE1URF9DQVBfTk9SRkxBU0g7Ci0JbXRkLT53cml0ZXNpemUgPSAxOwotCW10ZC0+bmFtZSA9IG1hcC0+bmFtZTsKLQotCXNoYXJwLT5jaGlwc2hpZnQgPSAyMzsKLQlzaGFycC0+bnVtY2hpcHMgPSAxOwotCXNoYXJwLT5jaGlwc1swXS5zdGFydCA9IDA7Ci0Jc2hhcnAtPmNoaXBzWzBdLnN0YXRlID0gRkxfUkVBRFk7Ci0Jc2hhcnAtPmNoaXBzWzBdLm11dGV4ID0gJnNoYXJwLT5jaGlwc1swXS5fc3BpbmxvY2s7Ci0Jc2hhcnAtPmNoaXBzWzBdLndvcmRfd3JpdGVfdGltZSA9IDA7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc2hhcnAtPmNoaXBzWzBdLndxKTsKLQlzcGluX2xvY2tfaW5pdCgmc2hhcnAtPmNoaXBzWzBdLl9zcGlubG9jayk7Ci0KLQltYXAtPmZsZHJ2ID0gJnNoYXJwX2NoaXBkcnY7Ci0JbWFwLT5mbGRydl9wcml2ID0gc2hhcnA7Ci0KLQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwotCXJldHVybiBtdGQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzaGFycF9zZW5kX2NtZChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgdW5zaWduZWQgbG9uZyBjbWQsIHVuc2lnbmVkIGxvbmcgYWRyKQotewotCW1hcF93b3JkIG1hcF9jbWQ7Ci0JbWFwX2NtZC54WzBdID0gY21kOwotCW1hcF93cml0ZShtYXAsIG1hcF9jbWQsIGFkcik7Ci19Ci0KLXN0YXRpYyBpbnQgc2hhcnBfcHJvYmVfbWFwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCW1hcF93b3JkIHRtcCwgcmVhZDAsIHJlYWQ0OwotCXVuc2lnbmVkIGxvbmcgYmFzZSA9IDA7Ci0JaW50IHdpZHRoID0gNDsKLQotCXRtcCA9IG1hcF9yZWFkKG1hcCwgYmFzZSswKTsKLQotCXNoYXJwX3NlbmRfY21kKG1hcCwgQ01EX1JFQURfSUQsIGJhc2UrMCk7Ci0KLQlyZWFkMCA9IG1hcF9yZWFkKG1hcCwgYmFzZSswKTsKLQlyZWFkNCA9IG1hcF9yZWFkKG1hcCwgYmFzZSs0KTsKLQlpZihyZWFkMC54WzBdID09IDB4ODk4OTg5ODkpewotCQlwcmludGsoIkxvb2tzIGxpa2Ugc2hhcnAgZmxhc2hcbiIpOwotCQlzd2l0Y2gocmVhZDQueFswXSl7Ci0JCWNhc2UgMHhhYWFhYWFhYToKLQkJY2FzZSAweGEwYTBhMGEwOgotCQkJLyogYWEgLSBMSDI4RjAxNlNDVC1MOTUgMk14OCwgMzIgNjRrIGJsb2NrcyovCi0JCQkvKiBhMCAtIExIMjhGMDE2U0NULVo0ICAyTXg4LCAzMiA2NGsgYmxvY2tzKi8KLQkJCW10ZC0+ZXJhc2VzaXplID0gMHgxMDAwMCAqIHdpZHRoOwotCQkJbXRkLT5zaXplID0gMHgyMDAwMDAgKiB3aWR0aDsKLQkJCXJldHVybiB3aWR0aDsKLQkJY2FzZSAweGE2YTZhNmE2OgotCQkJLyogYTYgLSBMSDI4RjAwOFNDVC1MMTIgMU14OCwgMTYgNjRrIGJsb2NrcyovCi0JCQkvKiBhNiAtIExIMjhGMDA4U0NSLUw4NSAxTXg4LCAxNiA2NGsgYmxvY2tzKi8KLQkJCW10ZC0+ZXJhc2VzaXplID0gMHgxMDAwMCAqIHdpZHRoOwotCQkJbXRkLT5zaXplID0gMHgxMDAwMDAgKiB3aWR0aDsKLQkJCXJldHVybiB3aWR0aDsKLSNpZiAwCi0JCWNhc2UgMHgwMDAwMDAwMDogLyogdW5rbm93biAqLwotCQkJLyogWFggLSBMSDI4RjAwNFNDVCA1MTJreDgsIDggNjRrIGJsb2NrcyovCi0JCQltdGQtPmVyYXNlc2l6ZSA9IDB4MTAwMDAgKiB3aWR0aDsKLQkJCW10ZC0+c2l6ZSA9IDB4ODAwMDAgKiB3aWR0aDsKLQkJCXJldHVybiB3aWR0aDsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJcHJpbnRrKCJTb3J0LW9mIGxvb2tzIGxpa2Ugc2hhcnAgZmxhc2gsIDB4JTA4bHggMHglMDhseFxuIiwKLQkJCQlyZWFkMC54WzBdLCByZWFkNC54WzBdKTsKLQkJfQotCX1lbHNlIGlmKChtYXBfcmVhZChtYXAsIGJhc2UrMCkueFswXSA9PSBDTURfUkVBRF9JRCkpewotCQkvKiBSQU0sIHByb2JhYmx5ICovCi0JCXByaW50aygiTG9va3MgbGlrZSBSQU1cbiIpOwotCQltYXBfd3JpdGUobWFwLCB0bXAsIGJhc2UrMCk7Ci0JfWVsc2V7Ci0JCXByaW50aygiRG9lc24ndCBsb29rIGxpa2Ugc2hhcnAgZmxhc2gsIDB4JTA4bHggMHglMDhseFxuIiwKLQkJCXJlYWQwLnhbMF0sIHJlYWQ0LnhbMF0pOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgd2l0aCB0aGUgY2hpcC0+bXV0ZXggbG9jayBoZWxkLiAqLwotc3RhdGljIGludCBzaGFycF93YWl0KHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwKQotewotCWludCBpOwotCW1hcF93b3JkIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIHRpbWVvID0gamlmZmllcyArIEhaOwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCWludCBhZHIgPSAwOwotCi1yZXRyeToKLQlzcGluX2xvY2tfYmgoY2hpcC0+bXV0ZXgpOwotCi0Jc3dpdGNoKGNoaXAtPnN0YXRlKXsKLQljYXNlIEZMX1JFQURZOgotCQlzaGFycF9zZW5kX2NtZChtYXAsIENNRF9SRUFEX1NUQVRVUywgYWRyKTsKLQkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7Ci0JY2FzZSBGTF9TVEFUVVM6Ci0JCWZvcihpPTA7aTwxMDA7aSsrKXsKLQkJCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgYWRyKTsKLQkJCWlmKChzdGF0dXMueFswXSAmIFNSX1JFQURZKT09U1JfUkVBRFkpCi0JCQkJYnJlYWs7Ci0JCQl1ZGVsYXkoMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKCJXYWl0aW5nIGZvciBjaGlwXG4iKTsKLQotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlhZGRfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQotCQlzcGluX3VubG9ja19iaChjaGlwLT5tdXRleCk7Ci0KLQkJc2NoZWR1bGUoKTsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoJmNoaXAtPndxLCAmd2FpdCk7Ci0KLQkJaWYoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlyZXR1cm4gLUVJTlRSOwotCi0JCXRpbWVvID0gamlmZmllcyArIEhaOwotCi0JCWdvdG8gcmV0cnk7Ci0JfQotCi0Jc2hhcnBfc2VuZF9jbWQobWFwLCBDTURfUkVTRVQsIGFkcik7Ci0KLQljaGlwLT5zdGF0ZSA9IEZMX1JFQURZOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNoYXJwX3JlbGVhc2Uoc3RydWN0IGZsY2hpcCAqY2hpcCkKLXsKLQl3YWtlX3VwKCZjaGlwLT53cSk7Ci0Jc3Bpbl91bmxvY2tfYmgoY2hpcC0+bXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IHNoYXJwX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3Qgc2hhcnBfaW5mbyAqc2hhcnAgPSBtYXAtPmZsZHJ2X3ByaXY7Ci0JaW50IGNoaXBudW07Ci0JaW50IHJldCA9IDA7Ci0JaW50IG9mcyA9IDA7Ci0KLQljaGlwbnVtID0gKGZyb20gPj4gc2hhcnAtPmNoaXBzaGlmdCk7Ci0Jb2ZzID0gZnJvbSAmICgoMSA8PCBzaGFycC0+Y2hpcHNoaWZ0KS0xKTsKLQotCSpyZXRsZW4gPSAwOwotCi0Jd2hpbGUobGVuKXsKLQkJdW5zaWduZWQgbG9uZyB0aGlzbGVuOwotCi0JCWlmKGNoaXBudW0+PXNoYXJwLT5udW1jaGlwcykKLQkJCWJyZWFrOwotCi0JCXRoaXNsZW4gPSBsZW47Ci0JCWlmKG9mcyt0aGlzbGVuID49ICgxPDxzaGFycC0+Y2hpcHNoaWZ0KSkKLQkJCXRoaXNsZW4gPSAoMTw8c2hhcnAtPmNoaXBzaGlmdCkgLSBvZnM7Ci0KLQkJcmV0ID0gc2hhcnBfd2FpdChtYXAsJnNoYXJwLT5jaGlwc1tjaGlwbnVtXSk7Ci0JCWlmKHJldDwwKQotCQkJYnJlYWs7Ci0KLQkJbWFwX2NvcHlfZnJvbShtYXAsYnVmLG9mcyx0aGlzbGVuKTsKLQotCQlzaGFycF9yZWxlYXNlKCZzaGFycC0+Y2hpcHNbY2hpcG51bV0pOwotCi0JCSpyZXRsZW4gKz0gdGhpc2xlbjsKLQkJbGVuIC09IHRoaXNsZW47Ci0JCWJ1ZiArPSB0aGlzbGVuOwotCi0JCW9mcyA9IDA7Ci0JCWNoaXBudW0rKzsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzaGFycF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCA9IG10ZC0+cHJpdjsKLQlzdHJ1Y3Qgc2hhcnBfaW5mbyAqc2hhcnAgPSBtYXAtPmZsZHJ2X3ByaXY7Ci0JaW50IHJldCA9IDA7Ci0JaW50IGksajsKLQlpbnQgY2hpcG51bTsKLQl1bnNpZ25lZCBsb25nIG9mczsKLQl1bmlvbiB7IHUzMiBsOyB1bnNpZ25lZCBjaGFyIHVjWzRdOyB9IHRidWY7Ci0KLQkqcmV0bGVuID0gMDsKLQotCXdoaWxlKGxlbil7Ci0JCXRidWYubCA9IDB4ZmZmZmZmZmY7Ci0JCWNoaXBudW0gPSB0byA+PiBzaGFycC0+Y2hpcHNoaWZ0OwotCQlvZnMgPSB0byAmICgoMTw8c2hhcnAtPmNoaXBzaGlmdCktMSk7Ci0KLQkJaj0wOwotCQlmb3IoaT1vZnMmMztpPDQgJiYgbGVuO2krKyl7Ci0JCQl0YnVmLnVjW2ldID0gKmJ1ZjsKLQkJCWJ1ZisrOwotCQkJdG8rKzsKLQkJCWxlbi0tOwotCQkJaisrOwotCQl9Ci0JCXNoYXJwX3dyaXRlX29uZXdvcmQobWFwLCAmc2hhcnAtPmNoaXBzW2NoaXBudW1dLCBvZnMmfjMsIHRidWYubCk7Ci0JCWlmKHJldDwwKQotCQkJcmV0dXJuIHJldDsKLQkJKCpyZXRsZW4pKz1qOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNoYXJwX3dyaXRlX29uZXdvcmQoc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCi0JdW5zaWduZWQgbG9uZyBhZHIsIF9fdTMyIGRhdHVtKQotewotCWludCByZXQ7Ci0JaW50IHRpbWVvOwotCWludCB0cnk7Ci0JaW50IGk7Ci0JbWFwX3dvcmQgZGF0YSwgc3RhdHVzOwotCi0Jc3RhdHVzLnhbMF0gPSAwOwotCXJldCA9IHNoYXJwX3dhaXQobWFwLGNoaXApOwotCi0JZm9yKHRyeT0wO3RyeTwxMDt0cnkrKyl7Ci0JCXNoYXJwX3NlbmRfY21kKG1hcCwgQ01EX0JZVEVfV1JJVEUsIGFkcik7Ci0JCS8qIGNwdV90b19sZTMyIC0+IGhhY2sgdG8gZml4IHRoZSB3cml0ZWwgYmUtPmxlIGNvbnZlcnNpb24gKi8KLQkJZGF0YS54WzBdID0gY3B1X3RvX2xlMzIoZGF0dW0pOwotCQltYXBfd3JpdGUobWFwLCBkYXRhLCBhZHIpOwotCi0JCWNoaXAtPnN0YXRlID0gRkxfV1JJVElORzsKLQotCQl0aW1lbyA9IGppZmZpZXMgKyAoSFovMik7Ci0KLQkJc2hhcnBfc2VuZF9jbWQobWFwLCBDTURfUkVBRF9TVEFUVVMsIGFkcik7Ci0JCWZvcihpPTA7aTwxMDA7aSsrKXsKLQkJCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgYWRyKTsKLQkJCWlmKChzdGF0dXMueFswXSAmIFNSX1JFQURZKSA9PSBTUl9SRUFEWSkKLQkJCQlicmVhazsKLQkJfQotCQlpZihpPT0xMDApewotCQkJcHJpbnRrKCJzaGFycDogdGltZWQgb3V0IHdyaXRpbmdcbiIpOwotCQl9Ci0KLQkJaWYoIShzdGF0dXMueFswXSAmIFNSX0VSUk9SUykpCi0JCQlicmVhazsKLQotCQlwcmludGsoInNoYXJwOiBlcnJvciB3cml0aW5nIGJ5dGUgYXQgYWRkcj0lMDhseCBzdGF0dXM9JTA4bHhcbiIsIGFkciwgc3RhdHVzLnhbMF0pOwotCi0JCXNoYXJwX3NlbmRfY21kKG1hcCwgQ01EX0NMRUFSX1NUQVRVUywgYWRyKTsKLQl9Ci0Jc2hhcnBfc2VuZF9jbWQobWFwLCBDTURfUkVTRVQsIGFkcik7Ci0JY2hpcC0+c3RhdGUgPSBGTF9SRUFEWTsKLQotCXdha2VfdXAoJmNoaXAtPndxKTsKLQlzcGluX3VubG9ja19iaChjaGlwLT5tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzaGFycF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQotewotCXN0cnVjdCBtYXBfaW5mbyAqbWFwID0gbXRkLT5wcml2OwotCXN0cnVjdCBzaGFycF9pbmZvICpzaGFycCA9IG1hcC0+ZmxkcnZfcHJpdjsKLQl1bnNpZ25lZCBsb25nIGFkcixsZW47Ci0JaW50IGNoaXBudW0sIHJldD0wOwotCi0vL3ByaW50aygic2hhcnBfZXJhc2UoKVxuIik7Ci0JaWYoaW5zdHItPmFkZHIgJiAobXRkLT5lcmFzZXNpemUgLSAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYoaW5zdHItPmxlbiAmIChtdGQtPmVyYXNlc2l6ZSAtIDEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZihpbnN0ci0+bGVuICsgaW5zdHItPmFkZHIgPiBtdGQtPnNpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2hpcG51bSA9IGluc3RyLT5hZGRyID4+IHNoYXJwLT5jaGlwc2hpZnQ7Ci0JYWRyID0gaW5zdHItPmFkZHIgJiAoKDE8PHNoYXJwLT5jaGlwc2hpZnQpLTEpOwotCWxlbiA9IGluc3RyLT5sZW47Ci0KLQl3aGlsZShsZW4pewotCQlyZXQgPSBzaGFycF9lcmFzZV9vbmVibG9jayhtYXAsICZzaGFycC0+Y2hpcHNbY2hpcG51bV0sIGFkcik7Ci0JCWlmKHJldClyZXR1cm4gcmV0OwotCi0JCWFkciArPSBtdGQtPmVyYXNlc2l6ZTsKLQkJbGVuIC09IG10ZC0+ZXJhc2VzaXplOwotCQlpZihhZHIgPj4gc2hhcnAtPmNoaXBzaGlmdCl7Ci0JCQlhZHIgPSAwOwotCQkJY2hpcG51bSsrOwotCQkJaWYoY2hpcG51bT49c2hhcnAtPm51bWNoaXBzKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0RPTkU7Ci0JbXRkX2VyYXNlX2NhbGxiYWNrKGluc3RyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNoYXJwX2RvX3dhaXRfZm9yX3JlYWR5KHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLAotCXVuc2lnbmVkIGxvbmcgYWRyKQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lbzsKLQltYXBfd29yZCBzdGF0dXM7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQlzaGFycF9zZW5kX2NtZChtYXAsIENNRF9SRUFEX1NUQVRVUywgYWRyKTsKLQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGFkcik7Ci0KLQl0aW1lbyA9IGppZmZpZXMgKyBIWjsKLQotCXdoaWxlKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvKSl7Ci0JCXNoYXJwX3NlbmRfY21kKG1hcCwgQ01EX1JFQURfU1RBVFVTLCBhZHIpOwotCQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGFkcik7Ci0JCWlmKChzdGF0dXMueFswXSAmIFNSX1JFQURZKT09U1JfUkVBRFkpewotCQkJcmV0ID0gMDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWFkZF93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCi0JCS8vc3Bpbl91bmxvY2tfYmgoY2hpcC0+bXV0ZXgpOwotCi0JCXNjaGVkdWxlX3RpbWVvdXQoMSk7Ci0JCXNjaGVkdWxlKCk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCi0JCS8vc3Bpbl9sb2NrX2JoKGNoaXAtPm11dGV4KTsKLQotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpewotCQkJcmV0ID0gLUVJTlRSOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCX0KLQlyZXQgPSAtRVRJTUU7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzaGFycF9lcmFzZV9vbmVibG9jayhzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKLQl1bnNpZ25lZCBsb25nIGFkcikKLXsKLQlpbnQgcmV0OwotCS8vaW50IHRpbWVvOwotCW1hcF93b3JkIHN0YXR1czsKLQkvL2ludCBpOwotCi0vL3ByaW50aygic2hhcnBfZXJhc2Vfb25lYmxvY2soKVxuIik7Ci0KLSNpZmRlZiBBVVRPVU5MT0NLCi0JLyogVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBkbyBhbiB1bmxvY2sgKi8KLQlzaGFycF91bmxvY2tfb25lYmxvY2sobWFwLGNoaXAsYWRyKTsKLSNlbmRpZgotCi0Jc2hhcnBfc2VuZF9jbWQobWFwLCBDTURfQkxPQ0tfRVJBU0VfMSwgYWRyKTsKLQlzaGFycF9zZW5kX2NtZChtYXAsIENNRF9CTE9DS19FUkFTRV8yLCBhZHIpOwotCi0JY2hpcC0+c3RhdGUgPSBGTF9FUkFTSU5HOwotCi0JcmV0ID0gc2hhcnBfZG9fd2FpdF9mb3JfcmVhZHkobWFwLGNoaXAsYWRyKTsKLQlpZihyZXQ8MClyZXR1cm4gcmV0OwotCi0Jc2hhcnBfc2VuZF9jbWQobWFwLCBDTURfUkVBRF9TVEFUVVMsIGFkcik7Ci0Jc3RhdHVzID0gbWFwX3JlYWQobWFwLCBhZHIpOwotCi0JaWYoIShzdGF0dXMueFswXSAmIFNSX0VSUk9SUykpewotCQlzaGFycF9zZW5kX2NtZChtYXAsIENNRF9SRVNFVCwgYWRyKTsKLQkJY2hpcC0+c3RhdGUgPSBGTF9SRUFEWTsKLQkJLy9zcGluX3VubG9ja19iaChjaGlwLT5tdXRleCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXByaW50aygic2hhcnA6IGVycm9yIGVyYXNpbmcgYmxvY2sgYXQgYWRkcj0lMDhseCBzdGF0dXM9JTA4bHhcbiIsIGFkciwgc3RhdHVzLnhbMF0pOwotCXNoYXJwX3NlbmRfY21kKG1hcCwgQ01EX0NMRUFSX1NUQVRVUywgYWRyKTsKLQotCS8vc3Bpbl91bmxvY2tfYmgoY2hpcC0+bXV0ZXgpOwotCi0JcmV0dXJuIC1FSU87Ci19Ci0KLSNpZmRlZiBBVVRPVU5MT0NLCi1zdGF0aWMgdm9pZCBzaGFycF91bmxvY2tfb25lYmxvY2soc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCi0JdW5zaWduZWQgbG9uZyBhZHIpCi17Ci0JaW50IGk7Ci0JbWFwX3dvcmQgc3RhdHVzOwotCi0Jc2hhcnBfc2VuZF9jbWQobWFwLCBDTURfQ0xFQVJfQkxPQ0tfTE9DS1NfMSwgYWRyKTsKLQlzaGFycF9zZW5kX2NtZChtYXAsIENNRF9DTEVBUl9CTE9DS19MT0NLU18yLCBhZHIpOwotCi0JdWRlbGF5KDEwMCk7Ci0KLQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGFkcik7Ci0JcHJpbnRrKCJzdGF0dXM9JTA4bHhcbiIsIHN0YXR1cy54WzBdKTsKLQotCWZvcihpPTA7aTwxMDAwO2krKyl7Ci0JCS8vc2hhcnBfc2VuZF9jbWQobWFwLCBDTURfUkVBRF9TVEFUVVMsIGFkcik7Ci0JCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgYWRyKTsKLQkJaWYoKHN0YXR1cy54WzBdICYgU1JfUkVBRFkpID09IFNSX1JFQURZKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMDApOwotCX0KLQlpZihpPT0xMDAwKXsKLQkJcHJpbnRrKCJzaGFycDogdGltZWQgb3V0IHVubG9ja2luZyBibG9ja1xuIik7Ci0JfQotCi0JaWYoIShzdGF0dXMueFswXSAmIFNSX0VSUk9SUykpewotCQlzaGFycF9zZW5kX2NtZChtYXAsIENNRF9SRVNFVCwgYWRyKTsKLQkJY2hpcC0+c3RhdGUgPSBGTF9SRUFEWTsKLQkJcmV0dXJuOwotCX0KLQotCXByaW50aygic2hhcnA6IGVycm9yIHVubG9ja2luZyBibG9jayBhdCBhZGRyPSUwOGx4IHN0YXR1cz0lMDhseFxuIiwgYWRyLCBzdGF0dXMueFswXSk7Ci0Jc2hhcnBfc2VuZF9jbWQobWFwLCBDTURfQ0xFQVJfU1RBVFVTLCBhZHIpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHNoYXJwX3N5bmMoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0JLy9wcmludGsoInNoYXJwX3N5bmMoKVxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgc2hhcnBfc3VzcGVuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlwcmludGsoInNoYXJwX3N1c3BlbmQoKVxuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyB2b2lkIHNoYXJwX3Jlc3VtZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlwcmludGsoInNoYXJwX3Jlc3VtZSgpXG4iKTsKLQotfQotCi1zdGF0aWMgdm9pZCBzaGFycF9kZXN0cm95KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQotewotCXByaW50aygic2hhcnBfZGVzdHJveSgpXG4iKTsKLQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzaGFycF9wcm9iZV9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKCJNVEQgU2hhcnAgY2hpcCBkcml2ZXIgPGRzQGxpbmVvLmNvbT5cbiIpOwotCi0JcmVnaXN0ZXJfbXRkX2NoaXBfZHJpdmVyKCZzaGFycF9jaGlwZHJ2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2hhcnBfcHJvYmVfZXhpdCh2b2lkKQotewotCXVucmVnaXN0ZXJfbXRkX2NoaXBfZHJpdmVyKCZzaGFycF9jaGlwZHJ2KTsKLX0KLQotbW9kdWxlX2luaXQoc2hhcnBfcHJvYmVfaW5pdCk7Ci1tb2R1bGVfZXhpdChzaGFycF9wcm9iZV9leGl0KTsKLQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiT2xkIE1URCBjaGlwIGRyaXZlciBmb3IgcHJlLUNGSSBTaGFycCBmbGFzaCBjaGlwcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKaW5kZXggZmM0Y2M4Yi4uYmU0Yjk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCkBAIC0zNzMsNyArMzczLDcgQEAKIAogI2lmbmRlZiBNT0RVTEUKIHN0YXRpYyBpbnQgYmxvY2sybXRkX2luaXRfY2FsbGVkID0gMDsKLXN0YXRpYyBfX2luaXRkYXRhIGNoYXIgYmxvY2sybXRkX3BhcmFtbGluZVs4MCArIDEyXTsgLyogODAgZm9yIGRldmljZSwgMTIgZm9yIGVyYXNlIHNpemUgKi8KK3N0YXRpYyBjaGFyIGJsb2NrMm10ZF9wYXJhbWxpbmVbODAgKyAxMl07IC8qIDgwIGZvciBkZXZpY2UsIDEyIGZvciBlcmFzZSBzaXplICovCiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9wbWM1NTEuYwppbmRleCBhNDg3M2FiLi5lOGY2ODZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvcG1jNTUxLmMKQEAgLTY1MCw3ICs2NTAsNyBAQAogICovCiBzdGF0aWMgaW50IG1zaXplID0gMDsKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUE1DNTUxX0FQRVJUVVJFX1NJWkUpCi1zdGF0aWMgaW50IGFzaXplID0gQ09ORklHX01URF9QTUM1NTFfQVBFUlRVUkVfU0laRQorc3RhdGljIGludCBhc2l6ZSA9IENPTkZJR19NVERfUE1DNTUxX0FQRVJUVVJFX1NJWkU7CiAjZWxzZQogc3RhdGljIGludCBhc2l6ZSA9IDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCBkOTkwZDgxLi5iNjY1ZTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC02MCw3ICs2MCw3IEBACiAJICAoaS5lLiwgcnVuLXRpbWUgY2FsbGluZyBwaHlzbWFwX2NvbmZpZ3VyZSgpKS4KIAogY29uZmlnIE1URF9QSFlTTUFQX09GCi0JdHJpc3RhdGUgIkZsYXNoIGRldmljZSBpbiBwaHlzaWNhbCBtZW1vcnkgbWFwIGJhc2VkIG9uIE9GIGRlc2NpcnB0aW9uIgorCXRyaXN0YXRlICJGbGFzaCBkZXZpY2UgaW4gcGh5c2ljYWwgbWVtb3J5IG1hcCBiYXNlZCBvbiBPRiBkZXNjcmlwdGlvbiIKIAlkZXBlbmRzIG9uIFBQQ19PRiAmJiAoTVREX0NGSSB8fCBNVERfSkVERUNQUk9CRSB8fCBNVERfUk9NKQogCWhlbHAKIAkgIFRoaXMgcHJvdmlkZXMgYSAnbWFwcGluZycgZHJpdmVyIHdoaWNoIGFsbG93cyB0aGUgTk9SIEZsYXNoIGFuZApAQCAtMzU4LDIyICszNTgsNiBAQAogCSAgTWFwcGluZyBmb3IgdGhlIEZsYWdhIGRpZ2l0YWwgbW9kdWxlLiBJZiB5b3UgZG9uJ3QgaGF2ZSBvbmUsIGlnbm9yZQogCSAgdGhpcyBzZXR0aW5nLgogCi1jb25maWcgTVREX0JFRUNICi0JdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIElCTSA0MDVMUCBCZWVjaCIKLQlkZXBlbmRzIG9uIE1URF9DRkkgJiYgQkVFQ0gKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgYWNjZXNzIHJvdXRpbmVzIGZvciB0aGUgZmxhc2ggY2hpcHMgb24gdGhlIElCTQotCSAgNDA1TFAgQmVlY2ggYm9hcmQuIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBib2FyZHMgYW5kIHdvdWxkIGxpa2UKLQkgIHRvIHVzZSB0aGUgZmxhc2ggY2hpcHMgb24gaXQsIHNheSAnWScuCi0KLWNvbmZpZyBNVERfQVJDVElDCi0JdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIElCTSA0MDVMUCBBcmN0aWMiCi0JZGVwZW5kcyBvbiBNVERfQ0ZJICYmIEFSQ1RJQzIKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgYWNjZXNzIHJvdXRpbmVzIGZvciB0aGUgZmxhc2ggY2hpcHMgb24gdGhlIElCTSA0MDVMUAotCSAgQXJjdGljIGJvYXJkLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgYm9hcmRzIGFuZCB3b3VsZCBsaWtlIHRvCi0JICB1c2UgdGhlIGZsYXNoIGNoaXBzIG9uIGl0LCBzYXkgJ1knLgotCiBjb25maWcgTVREX1dBTE5VVAogCXRyaXN0YXRlICJGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIElCTSA0MDVHUCBXYWxudXQiCiAJZGVwZW5kcyBvbiBNVERfSkVERUNQUk9CRSAmJiBXQUxOVVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IGRlMDM2YzUuLjNhY2JiNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNTgsOCArNTgsNiBAQAogb2JqLSQoQ09ORklHX01URF9TQ0IyX0ZMQVNIKQkrPSBzY2IyX2ZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfRUJPTlkpCQkrPSBlYm9ueS5vCiBvYmotJChDT05GSUdfTVREX09DT1RFQSkJKz0gb2NvdGVhLm8KLW9iai0kKENPTkZJR19NVERfQkVFQ0gpCQkrPSBiZWVjaC1tdGQubwotb2JqLSQoQ09ORklHX01URF9BUkNUSUMpCSs9IGFyY3RpYy1tdGQubwogb2JqLSQoQ09ORklHX01URF9XQUxOVVQpICAgICAgICArPSB3YWxudXQubwogb2JqLSQoQ09ORklHX01URF9INzIwWCkJCSs9IGg3MjB4LWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfU0JDODI0MCkJKz0gc2JjODI0MC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2FyY3RpYy1tdGQuYyBiL2RyaXZlcnMvbXRkL21hcHMvYXJjdGljLW10ZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2M5MDI0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbXRkL21hcHMvYXJjdGljLW10ZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiAkSWQ6IGFyY3RpYy1tdGQuYyx2IDEuMTQgMjAwNS8xMS8wNyAxMToxNDoyNiBnbGVpeG5lciBFeHAgJAotICoKLSAqIGRyaXZlcnMvbXRkL21hcHMvYXJjdGljLW10ZC5jIE1URCBtYXBwaW5ncyBhbmQgcGFydGl0aW9uIHRhYmxlcyBmb3IKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUJNIDQwNUxQIEFyY3RpYyBib2FyZHMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogQmlzaG9wIEJyb2NrCi0gKiBJQk0gUmVzZWFyY2gsIEF1c3RpbiBDZW50ZXIgZm9yIExvdy1Qb3dlciBDb21wdXRpbmcKLSAqIGJjYnJvY2tAdXMuaWJtLmNvbQotICogTWFyY2ggMjAwMgotICoKLSAqIG1vZGlmaWVkIGZvciBBcmN0aWMgYnksCi0gKiBEYXZpZCBHaWJzb24KLSAqIElCTSBPekxhYnMsIENhbmJlcnJhLCBBdXN0cmFsaWEKLSAqIDxhcmN0aWNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pYm00eHguaD4KLQotLyoKLSAqIDAgOiAweEZFMDAgMDAwMCAtIDB4RkVGRiBGRkZGIDogRmlsZXN5c3RlbSAxICgxNk1pQikKLSAqIDEgOiAweEZGMDAgMDAwMCAtIDB4RkY0RiBGRkZGIDoga2VybmVsICg1LjEyTWlCKQotICogMiA6IDB4RkY1MCAwMDAwIC0gMHhGRkY1IEZGRkYgOiBGaWxlc3lzdGVtIDIgKDEwLjYyNE1pQikgKGlmIG5vbi1YSVApCi0gKiAzIDogMHhGRkY2IDAwMDAgLSAweEZGRkYgRkZGRiA6IFBJQlMgRmlybXdhcmUgKDY0MEtpQikKLSAqLwotCi0jZGVmaW5lIEZGUzFfU0laRQkweDAxMDAwMDAwIC8qIDE2TWlCICovCi0jZGVmaW5lIEtFUk5FTF9TSVpFCTB4MDA1MDAwMDAgLyogNS4xMk1pQiAqLwotI2RlZmluZSBGRlMyX1NJWkUJMHgwMGE2MDAwMCAvKiAxMC42MjRNaUIgKi8KLSNkZWZpbmUgRklSTVdBUkVfU0laRQkweDAwMGEwMDAwIC8qIDY0MEtpQiAqLwotCi0KLSNkZWZpbmUgTkFNRSAgICAgCSJBcmN0aWMgTGludXggRmxhc2giCi0jZGVmaW5lIFBBRERSICAgIAlTVUJaRVJPX0JPT1RGTEFTSF9QQUREUgotI2RlZmluZSBCVVNXSURUSAkyCi0jZGVmaW5lIFNJWkUJCVNVQlpFUk9fQk9PVEZMQVNIX1NJWkUKLSNkZWZpbmUgUEFSVElUSU9OUwk0Ci0KLS8qIEZsYXNoIG1lbW9yaWVzIG9uIHRoZXNlIGJvYXJkcyBhcmUgbWVtb3J5IHJlc291cmNlcywgYWNjZXNzZWQgYmlnLWVuZGlhbi4gKi8KLQotewotICAvKiBkbyBub3RoaW5nIGZvciBub3cgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBhcmN0aWNfbXRkX21hcCA9IHsKLQkubmFtZQkJPSBOQU1FLAotCS5zaXplCQk9IFNJWkUsCi0JLmJhbmt3aWR0aAk9IEJVU1dJRFRILAotCS5waHlzCQk9IFBBRERSLAotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqYXJjdGljX210ZDsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGFyY3RpY19wYXJ0aXRpb25zW1BBUlRJVElPTlNdID0gewotCXsgLm5hbWUJCT0gIkZpbGVzeXN0ZW0iLAotCSAgLnNpemUJCT0gRkZTMV9TSVpFLAotCSAgLm9mZnNldAk9IDAsfSwKLSAgICAgICAgeyAubmFtZQkJPSAiS2VybmVsIiwKLQkgIC5zaXplCQk9IEtFUk5FTF9TSVpFLAotCSAgLm9mZnNldAk9IEZGUzFfU0laRSx9LAotCXsgLm5hbWUJCT0gIkZpbGVzeXN0ZW0iLAotCSAgLnNpemUJCT0gRkZTMl9TSVpFLAotCSAgLm9mZnNldAk9IEZGUzFfU0laRSArIEtFUk5FTF9TSVpFLH0sCi0JeyAubmFtZQkJPSAiRmlybXdhcmUiLAotCSAgLnNpemUJCT0gRklSTVdBUkVfU0laRSwKLQkgIC5vZmZzZXQJPSBTVUJaRVJPX0JPT1RGTEFTSF9TSVpFIC0gRklSTVdBUkVfU0laRSx9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQKLWluaXRfYXJjdGljX210ZCh2b2lkKQotewotCWludCBlcnI7Ci0KLQlwcmludGsoIiVzOiAweCUwOHggYXQgMHglMDh4XG4iLCBOQU1FLCBTSVpFLCBQQUREUik7Ci0KLQlhcmN0aWNfbXRkX21hcC52aXJ0ID0gaW9yZW1hcChQQUREUiwgU0laRSk7Ci0KLQlpZiAoIWFyY3RpY19tdGRfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGlvcmVtYXAgMHgleFxuIiwgTkFNRSwgUEFERFIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0Jc2ltcGxlX21hcF9pbml0KCZhcmN0aWNfbXRkX21hcCk7Ci0KLQlwcmludGsoIiVzOiBwcm9iaW5nICVkLWJpdCBmbGFzaCBidXNcbiIsIE5BTUUsIEJVU1dJRFRIICogOCk7Ci0JYXJjdGljX210ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJmFyY3RpY19tdGRfbWFwKTsKLQotCWlmICghYXJjdGljX210ZCkgewotCQlpb3VubWFwKGFyY3RpY19tdGRfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCWFyY3RpY19tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQllcnIgPSBhZGRfbXRkX3BhcnRpdGlvbnMoYXJjdGljX210ZCwgYXJjdGljX3BhcnRpdGlvbnMsIFBBUlRJVElPTlMpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKCIlczogYWRkX210ZF9wYXJ0aXRpb25zIGZhaWxlZFxuIiwgTkFNRSk7Ci0JCWlvdW5tYXAoYXJjdGljX210ZF9tYXAudmlydCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1jbGVhbnVwX2FyY3RpY19tdGQodm9pZCkKLXsKLQlpZiAoYXJjdGljX210ZCkgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMoYXJjdGljX210ZCk7Ci0JCW1hcF9kZXN0cm95KGFyY3RpY19tdGQpOwotCQlpb3VubWFwKCh2b2lkICopIGFyY3RpY19tdGRfbWFwLnZpcnQpOwotCX0KLX0KLQotbW9kdWxlX2luaXQoaW5pdF9hcmN0aWNfbXRkKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfYXJjdGljX210ZCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmlkIEdpYnNvbiA8YXJjdGljQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBhbmQgcGFydGl0aW9ucyBmb3IgSUJNIDQwNUxQIEFyY3RpYyBib2FyZHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYmVlY2gtbXRkLmMgYi9kcml2ZXJzL210ZC9tYXBzL2JlZWNoLW10ZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzZkNTk4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbXRkL21hcHMvYmVlY2gtbXRkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqICRJZDogYmVlY2gtbXRkLmMsdiAxLjExIDIwMDUvMTEvMDcgMTE6MTQ6MjYgZ2xlaXhuZXIgRXhwICQKLSAqCi0gKiBkcml2ZXJzL210ZC9tYXBzL2JlZWNoLW10ZC5jIE1URCBtYXBwaW5ncyBhbmQgcGFydGl0aW9uIHRhYmxlcyBmb3IKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUJNIDQwNUxQIEJlZWNoIGJvYXJkcy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBCaXNob3AgQnJvY2sKLSAqIElCTSBSZXNlYXJjaCwgQXVzdGluIENlbnRlciBmb3IgTG93LVBvd2VyIENvbXB1dGluZwotICogYmNicm9ja0B1cy5pYm0uY29tCi0gKiBNYXJjaCAyMDAyCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pYm00eHguaD4KLQotI2RlZmluZSBOQU1FICAgICAiQmVlY2ggTGludXggRmxhc2giCi0jZGVmaW5lIFBBRERSICAgIEJFRUNIX0JJR0ZMQVNIX1BBRERSCi0jZGVmaW5lIFNJWkUgICAgIEJFRUNIX0JJR0ZMQVNIX1NJWkUKLSNkZWZpbmUgQlVTV0lEVEggMQotCi0vKiBGbGFzaCBtZW1vcmllcyBvbiB0aGVzZSBib2FyZHMgYXJlIG1lbW9yeSByZXNvdXJjZXMsIGFjY2Vzc2VkIGJpZy1lbmRpYW4uICovCi0KLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBiZWVjaF9tdGRfbWFwID0gewotCS5uYW1lID0JCU5BTUUsCi0JLnNpemUgPQkJU0laRSwKLQkuYmFua3dpZHRoID0JQlVTV0lEVEgsCi0JLnBoeXMgPQkJUEFERFIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmJlZWNoX210ZDsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGJlZWNoX3BhcnRpdGlvbnNbMl0gPSB7Ci0JewotCSAgICAgIC5uYW1lID0gIkxpbnV4IEtlcm5lbCIsCi0JICAgICAgLnNpemUgPSBCRUVDSF9LRVJORUxfU0laRSwKLQkgICAgICAub2Zmc2V0ID0gQkVFQ0hfS0VSTkVMX09GRlNFVAotCX0sIHsKLQkgICAgICAubmFtZSA9ICJGcmVlIEFyZWEiLAotCSAgICAgIC5zaXplID0gQkVFQ0hfRlJFRV9BUkVBX1NJWkUsCi0JICAgICAgLm9mZnNldCA9IEJFRUNIX0ZSRUVfQVJFQV9PRkZTRVQKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdAotaW5pdF9iZWVjaF9tdGQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JcHJpbnRrKCIlczogMHglMDh4IGF0IDB4JTA4eFxuIiwgTkFNRSwgU0laRSwgUEFERFIpOwotCi0JYmVlY2hfbXRkX21hcC52aXJ0ID0gaW9yZW1hcChQQUREUiwgU0laRSk7Ci0KLQlpZiAoIWJlZWNoX210ZF9tYXAudmlydCkgewotCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gaW9yZW1hcCAweCV4XG4iLCBOQU1FLCBQQUREUik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNpbXBsZV9tYXBfaW5pdCgmYmVlY2hfbXRkX21hcCk7Ci0KLQlwcmludGsoIiVzOiBwcm9iaW5nICVkLWJpdCBmbGFzaCBidXNcbiIsIE5BTUUsIEJVU1dJRFRIICogOCk7Ci0JYmVlY2hfbXRkID0gZG9fbWFwX3Byb2JlKCJjZmlfcHJvYmUiLCAmYmVlY2hfbXRkX21hcCk7Ci0KLQlpZiAoIWJlZWNoX210ZCkgewotCQlpb3VubWFwKGJlZWNoX210ZF9tYXAudmlydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JYmVlY2hfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JZXJyID0gYWRkX210ZF9wYXJ0aXRpb25zKGJlZWNoX210ZCwgYmVlY2hfcGFydGl0aW9ucywgMik7Ci0JaWYgKGVycikgewotCQlwcmludGsoIiVzOiBhZGRfbXRkX3BhcnRpdGlvbnMgZmFpbGVkXG4iLCBOQU1FKTsKLQkJaW91bm1hcChiZWVjaF9tdGRfbWFwLnZpcnQpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotY2xlYW51cF9iZWVjaF9tdGQodm9pZCkKLXsKLQlpZiAoYmVlY2hfbXRkKSB7Ci0JCWRlbF9tdGRfcGFydGl0aW9ucyhiZWVjaF9tdGQpOwotCQltYXBfZGVzdHJveShiZWVjaF9tdGQpOwotCQlpb3VubWFwKCh2b2lkICopIGJlZWNoX210ZF9tYXAudmlydCk7Ci0JfQotfQotCi1tb2R1bGVfaW5pdChpbml0X2JlZWNoX210ZCk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX2JlZWNoX210ZCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkJpc2hvcCBCcm9jayA8YmNicm9ja0B1cy5pYm0uY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGFuZCBwYXJ0aXRpb25zIGZvciBJQk0gNDA1TFAgQmVlY2ggYm9hcmRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jIGIvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYwppbmRleCA5ZjUzYzY1Li43Yjk2Y2QwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAkvKiBUdXJuIG90aGVyIFBBUiBvZmYgc28gdGhlIGZpcnN0IHByb2JlIGRvZXNuJ3QgZmluZCBpdCAqLwogCSppbnRlbDFwYXIgPSAwOwogCi0JLyogUHJvYmUgZm9yIHRoZSB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgSW50ZWwgZmxhc2ggKi8KKwkvKiBQcm9iZSBmb3IgdGhlIHNpemUgb2YgdGhlIGZpcnN0IEludGVsIGZsYXNoICovCiAJbmV0dGVsX2ludGVsX21hcC5zaXplID0gbWF4c2l6ZTsKIAluZXR0ZWxfaW50ZWxfbWFwLnBoeXMgPSBpbnRlbDBhZGRyOwogCW5ldHRlbF9pbnRlbF9tYXAudmlydCA9IGlvcmVtYXBfbm9jYWNoZShpbnRlbDBhZGRyLCBtYXhzaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKaW5kZXggN2VmZTc0NC4uYmJiNDJjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAljb25zdCAgdTMyICAqcGFydDsKIAljb25zdCAgY2hhciAqbmFtZTsKIAotCXBhcnQgPSBnZXRfcHJvcGVydHkobm9kZSwgInBhcnRpdGlvbnMiLCAmcGxlbik7CisJcGFydCA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAicGFydGl0aW9ucyIsICZwbGVuKTsKIAlpZiAocGFydCA9PSBOVUxMKQogCQlnb3RvIGVycjsKIApAQCAtNTksNyArNTksNyBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQluYW1lID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJwYXJ0aXRpb24tbmFtZXMiLCAmcGxlbik7CisJbmFtZSA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAicGFydGl0aW9uLW5hbWVzIiwgJnBsZW4pOwogCiAJZm9yIChpID0gMDsgaSA8IHJldHZhbDsgaSsrKSB7CiAJCSgqcGFydHMpW2ldLm9mZnNldCA9ICpwYXJ0Kys7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCXdpZHRoID0gZ2V0X3Byb3BlcnR5KGRwLCAiYmFuay13aWR0aCIsIE5VTEwpOworCXdpZHRoID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiYmFuay13aWR0aCIsIE5VTEwpOwogCWlmICh3aWR0aCA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IHRoZSBmbGFzaCBiYW5rIHdpZHRoIVxuIik7CiAJCWVyciA9IC1FSU5WQUw7CkBAIC0xNzQsNyArMTc0LDcgQEAKIAogCXNpbXBsZV9tYXBfaW5pdCgmaW5mby0+bWFwKTsKIAotCW9mX3Byb2JlID0gZ2V0X3Byb3BlcnR5KGRwLCAicHJvYmUtdHlwZSIsIE5VTEwpOworCW9mX3Byb2JlID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicHJvYmUtdHlwZSIsIE5VTEwpOwogCWlmIChvZl9wcm9iZSA9PSBOVUxMKSB7CiAJCXByb2JlX3R5cGUgPSByb21fcHJvYmVfdHlwZXM7CiAJCWZvciAoOyBpbmZvLT5tdGQgPT0gTlVMTCAmJiAqcHJvYmVfdHlwZSAhPSBOVUxMOyBwcm9iZV90eXBlKyspCkBAIC0xODYsNyArMTg2LDcgQEAKIAllbHNlIHsKICAJCWlmIChzdHJjbXAob2ZfcHJvYmUsICJST00iKSkKIAkJCWRldl9kYmcoJmRldi0+ZGV2LCAibWFwX3Byb2JlOiBkb24ndCBrbm93IHByb2JlIHR5cGUgIgotCQkJIiclcycsIG1hcHBpbmcgYXMgcm9tXG4iKTsKKwkJCSInJXMnLCBtYXBwaW5nIGFzIHJvbVxuIiwgb2ZfcHJvYmUpOwogCQlpbmZvLT5tdGQgPSBkb19tYXBfcHJvYmUoIm10ZF9yb20iLCAmaW5mby0+bWFwKTsKIAl9CiAJaWYgKGluZm8tPm10ZCA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jIGIvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYwppbmRleCA1MjRiODNiLi41MWJjN2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCisrKyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogCWludCBsYXN0X2Rldm51bSA9IC0xOwogCXN0cnVjdCBnZW5kaXNrICpnZDsKIAotCWlmICghIW11dGV4X3RyeWxvY2soJm10ZF90YWJsZV9tdXRleCkpIHsKKwlpZiAobXV0ZXhfdHJ5bG9jaygmbXRkX3RhYmxlX211dGV4KSkgewogCQltdXRleF91bmxvY2soJm10ZF90YWJsZV9tdXRleCk7CiAJCUJVRygpOwogCX0KQEAgLTI5NCw3ICsyOTQsNyBAQAogCiBpbnQgZGVsX210ZF9ibGt0cmFuc19kZXYoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKm9sZCkKIHsKLQlpZiAoISFtdXRleF90cnlsb2NrKCZtdGRfdGFibGVfbXV0ZXgpKSB7CisJaWYgKG11dGV4X3RyeWxvY2soJm10ZF90YWJsZV9tdXRleCkpIHsKIAkJbXV0ZXhfdW5sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOwogCQlCVUcoKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKaW5kZXggMWFmOTg5MC4uOWM2MjM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwpAQCAtMzQ3LDcgKzM0Nyw2IEBACiAJCXNsYXZlLT5tdGQuc3VicGFnZV9zZnQgPSBtYXN0ZXItPnN1YnBhZ2Vfc2Z0OwogCiAJCXNsYXZlLT5tdGQubmFtZSA9IHBhcnRzW2ldLm5hbWU7Ci0JCXNsYXZlLT5tdGQuYmFua19zaXplID0gbWFzdGVyLT5iYW5rX3NpemU7CiAJCXNsYXZlLT5tdGQub3duZXIgPSBtYXN0ZXItPm93bmVyOwogCiAJCXNsYXZlLT5tdGQucmVhZCA9IHBhcnRfcmVhZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCBkMDU4NzNiLi5mMWQ2MGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC0yMzIsMTEgKzIzMiwxMyBAQAogICAgICAgICAgIHdpbGwgYmUgbmFtZWQgImV4Y2l0ZV9uYW5kZmxhc2gua28iLgogCiBjb25maWcgTVREX05BTkRfQ0FGRQotICAgICAgIHRyaXN0YXRlICJOQU5EIHN1cHBvcnQgZm9yIE9MUEMgQ0FGw4kgY2hpcCIKLSAgICAgICBkZXBlbmRzIG9uIFBDSQotICAgICAgIGhlbHAKLQkgVXNlIE5BTkQgZmxhc2ggYXR0YWNoZWQgdG8gdGhlIENBRsOJIGNoaXAgZGVzaWduZWQgZm9yIHRoZSAkMTAwCi0JIGxhcHRvcC4KKwl0cmlzdGF0ZSAiTkFORCBzdXBwb3J0IGZvciBPTFBDIENBRsOJIGNoaXAiCisJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgUkVFRF9TT0xPTU9OCisJc2VsZWN0IFJFRURfU09MT01PTl9ERUMxNgorCWhlbHAKKwkgIFVzZSBOQU5EIGZsYXNoIGF0dGFjaGVkIHRvIHRoZSBDQUbDiSBjaGlwIGRlc2lnbmVkIGZvciB0aGUgJDEwMAorCSAgbGFwdG9wLgogCiBjb25maWcgTVREX05BTkRfQ1M1NTNYCiAJdHJpc3RhdGUgIk5BTkQgc3VwcG9ydCBmb3IgQ1M1NTM1L0NTNTUzNiAoQU1EIEdlb2RlIGNvbXBhbmlvbiBjaGlwKSIKQEAgLTI3MCw0ICsyNzIsMTMgQEAKIAkgIFRoZSBzaW11bGF0b3IgbWF5IHNpbXVsYXRlIHZhcmlvdXMgTkFORCBmbGFzaCBjaGlwcyBmb3IgdGhlCiAJICBNVEQgbmFuZCBsYXllci4KIAorY29uZmlnIE1URF9OQU5EX1BMQVRGT1JNCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIGdlbmVyaWMgcGxhdGZvcm0gTkFORCBkcml2ZXIiCisJZGVwZW5kcyBvbiBNVERfTkFORAorCWhlbHAKKwkgIFRoaXMgaW1wbGVtZW50cyBhIGdlbmVyaWMgTkFORCBkcml2ZXIgZm9yIG9uLVNPQyBwbGF0Zm9ybQorCSAgZGV2aWNlcy4gWW91IHdpbGwgbmVlZCB0byBwcm92aWRlIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucworCSAgdmlhIHBsYXRmb3JtX2RhdGEuCisKKwogZW5kaWYgIyBNVERfTkFORApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKaW5kZXggNjg3MjAzMS4uZWRiYTFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCkBAIC0yNiw2ICsyNiw2IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfQVQ5MSkJCSs9IGF0OTFfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQ01fWDI3MCkJCSs9IGNteDI3MF9uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9CQVNMRVJfRVhDSVRFKQkrPSBleGNpdGVfbmFuZGZsYXNoLm8KK29iai0kKENPTkZJR19NVERfTkFORF9QTEFURk9STSkJCSs9IHBsYXRfbmFuZC5vCiAKIG5hbmQtb2JqcyA6PSBuYW5kX2Jhc2UubyBuYW5kX2JidC5vCi1jYWZlX25hbmQtb2JqcyA6PSBjYWZlLm8gY2FmZV9lY2MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdDkxX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvYXQ5MV9uYW5kLmMKaW5kZXggMTRiODBjYy4uNTEyZTk5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hdDkxX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F0OTFfbmFuZC5jCkBAIC04Miw2ICs4MiwxMCBAQAogCQlhdDkxX3NldF9ncGlvX3ZhbHVlKGhvc3QtPmJvYXJkLT5lbmFibGVfcGluLCAxKTsKIH0KIAorI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworY29uc3QgY2hhciAqcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OworI2VuZGlmCisKIC8qCiAgKiBQcm9iZSBmb3IgdGhlIE5BTkQgZGV2aWNlLgogICovCkBAIC0xNTEsNiArMTU1LDEyIEBACiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJaWYgKGhvc3QtPmJvYXJkLT5wYXJ0aXRpb25faW5mbykKIAkJcGFydGl0aW9ucyA9IGhvc3QtPmJvYXJkLT5wYXJ0aXRpb25faW5mbyhtdGQtPnNpemUsICZudW1fcGFydGl0aW9ucyk7CisjaWZkZWYgQ09ORklHX01URF9DTURMSU5FX1BBUlRTCisJZWxzZSB7CisJCW10ZC0+bmFtZSA9ICJhdDkxX25hbmQiOworCQludW1fcGFydGl0aW9ucyA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKG10ZCwgcGFydF9wcm9iZXMsICZwYXJ0aXRpb25zLCAwKTsKKwl9CisjZW5kaWYKIAogCWlmICgoIXBhcnRpdGlvbnMpIHx8IChudW1fcGFydGl0aW9ucyA9PSAwKSkgewogCQlwcmludGsoS0VSTl9FUlIgImF0OTFfbmFuZDogTm8gcGFyaXRpdGlvbnMgZGVmaW5lZCwgb3IgdW5zdXBwb3J0ZWQgZGV2aWNlLlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKaW5kZXggZmU5NGFlOWEuLmUzNzQ0ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXV0Y3B1MTIuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKIAlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKLQkJdm9pZCBfX2lvbWVtICphZGRyCisJCXZvaWQgX19pb21lbSAqYWRkcjsKIAkJdW5zaWduZWQgY2hhciBiaXRzOwogCiAJCWFkZHIgPSBDUzg5NzEyX1ZJUlRfQkFTRSArIEFVVENQVTEyX1NNQ19QT1JUX09GRlNFVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvY2FmZV9lY2MuYyBiL2RyaXZlcnMvbXRkL25hbmQvY2FmZV9lY2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE1Yzg0OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2NhZmVfZWNjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzgxICswLDAgQEAKLS8qIEVycm9yIGNvcnJlY3Rpb24gZm9yIENBRsOJIE5BTkQgY29udHJvbGxlcgotICoKLSAqIMKpIDIwMDYgTWFydmVsbCwgSW5jLgotICogQXV0aG9yOiBUb20gQ2hpb3UKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5Ci0gKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IGdmNDA5Nl9tdWwodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZjY0X211bCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwotc3RhdGljIHVuc2lnbmVkIHNob3J0IGdmNDA5Nl9pbnYodW5zaWduZWQgc2hvcnQpOwotc3RhdGljIHVuc2lnbmVkIHNob3J0IGVycl9wb3ModW5zaWduZWQgc2hvcnQpOwotc3RhdGljIHZvaWQgZmluZF80Yml0X2Vycl9jb2Vmcyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LAotCQkJCXVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsCi0JCQkJdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCAqKTsKLXN0YXRpYyB2b2lkIHplcm9fNHg1X2NvbDModW5zaWduZWQgc2hvcnRbNF1bNV0pOwotc3RhdGljIHZvaWQgemVyb180eDVfY29sMih1bnNpZ25lZCBzaG9ydFs0XVs1XSk7Ci1zdGF0aWMgdm9pZCB6ZXJvXzR4NV9jb2wxKHVuc2lnbmVkIHNob3J0WzRdWzVdKTsKLXN0YXRpYyB2b2lkIHN3YXBfNHg1X3Jvd3ModW5zaWduZWQgc2hvcnRbNF1bNV0sIGludCwgaW50LCBpbnQpOwotc3RhdGljIHZvaWQgc3dhcF8yeDNfcm93cyh1bnNpZ25lZCBzaG9ydCBtWzJdWzNdKTsKLXN0YXRpYyB2b2lkIHNvbHZlXzR4NSh1bnNpZ25lZCBzaG9ydCBtWzRdWzVdLCB1bnNpZ25lZCBzaG9ydCAqLCBpbnQgKik7Ci1zdGF0aWMgdm9pZCBzb3J0X2NvZWZzKGludCAqLCB1bnNpZ25lZCBzaG9ydCAqLCBpbnQpOwotc3RhdGljIHZvaWQgZmluZF80Yml0X2Vycl9wYXRzKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsCi0JCQkgICAgICAgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwKLQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0ICopOwotc3RhdGljIHZvaWQgZmluZF8zYml0X2Vycl9jb2Vmcyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LAotCQkJCXVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsCi0JCQkJdW5zaWduZWQgc2hvcnQgKik7Ci1zdGF0aWMgdm9pZCB6ZXJvXzN4NF9jb2wyKHVuc2lnbmVkIHNob3J0WzNdWzRdKTsKLXN0YXRpYyB2b2lkIHplcm9fM3g0X2NvbDEodW5zaWduZWQgc2hvcnRbM11bNF0pOwotc3RhdGljIHZvaWQgc3dhcF8zeDRfcm93cyh1bnNpZ25lZCBzaG9ydFszXVs0XSwgaW50LCBpbnQsIGludCk7Ci1zdGF0aWMgdm9pZCBzb2x2ZV8zeDQodW5zaWduZWQgc2hvcnRbM11bNF0sIHVuc2lnbmVkIHNob3J0ICosIGludCAqKTsKLXN0YXRpYyB2b2lkIGZpbmRfM2JpdF9lcnJfcGF0cyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LAotCQkJICAgICAgIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsCi0JCQkgICAgICAgdW5zaWduZWQgc2hvcnQgKik7Ci0KLXN0YXRpYyB2b2lkIGZpbmRfMmJpdF9lcnJfcGF0cyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LAotCQkJICAgICAgIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCAqKTsKLXN0YXRpYyB2b2lkIGZpbmRfMngyX3NvbG4odW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwKLQkJCSAgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwKLQkJCSAgdW5zaWduZWQgc2hvcnQgKik7Ci1zdGF0aWMgdm9pZCBzb2x2ZV8yeDModW5zaWduZWQgc2hvcnRbMl1bM10sIHVuc2lnbmVkIHNob3J0ICopOwotc3RhdGljIGludCBjaGtfbm9fZXJyX29ubHkodW5zaWduZWQgc2hvcnQgKiwgdW5zaWduZWQgc2hvcnQgKik7Ci1zdGF0aWMgaW50IGNoa18xX2Vycl9vbmx5KHVuc2lnbmVkIHNob3J0ICosIHVuc2lnbmVkIHNob3J0ICopOwotc3RhdGljIGludCBjaGtfMl9lcnJfb25seSh1bnNpZ25lZCBzaG9ydCAqLCB1bnNpZ25lZCBzaG9ydCAqKTsKLXN0YXRpYyBpbnQgY2hrXzNfZXJyX29ubHkodW5zaWduZWQgc2hvcnQgKiwgdW5zaWduZWQgc2hvcnQgKik7Ci1zdGF0aWMgaW50IGNoa180X2Vycl9vbmx5KHVuc2lnbmVkIHNob3J0ICosIHVuc2lnbmVkIHNob3J0ICopOwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2Y2NF9tdWwodW5zaWduZWQgc2hvcnQgYSwgdW5zaWduZWQgc2hvcnQgYikKLXsKLQl1bnNpZ25lZCBzaG9ydCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1OwotCXVuc2lnbmVkIHNob3J0IGNfYml0MCwgY19iaXQxLCBjX2JpdDIsIGNfYml0MywgY19iaXQ0LCBjX2JpdDUsIGM7Ci0KLQl0bXAxID0gKChhKSBeIChhID4+IDUpKTsKLQl0bXAyID0gKChhID4+IDQpIF4gKGEgPj4gNSkpOwotCXRtcDMgPSAoKGEgPj4gMykgXiAoYSA+PiA0KSk7Ci0JdG1wNCA9ICgoYSA+PiAyKSBeIChhID4+IDMpKTsKLQl0bXA1ID0gKChhID4+IDEpIF4gKGEgPj4gMikpOwotCi0JY19iaXQwID0gKChhICYgYikgXiAoKGEgPj4gNSkgJiAoYiA+PiAxKSkgXiAoKGEgPj4gNCkgJiAoYiA+PiAyKSkgXgotCQkgICgoYSA+PiAzKSAmIChiID4+IDMpKSBeICgoYSA+PiAyKSAmIChiID4+IDQpKSBeICgoYSA+PiAxKSAmIChiID4+IDUpKSkgJiAweDE7Ci0KLQljX2JpdDEgPSAoKChhID4+IDEpICYgYikgXiAodG1wMSAmIChiID4+IDEpKSBeICh0bXAyICYgKGIgPj4gMikpIF4KLQkJICAodG1wMyAmIChiID4+IDMpKSBeICh0bXA0ICYgKGIgPj4gNCkpIF4gKHRtcDUgJiAoYiA+PiA1KSkpICYgMHgxOwotCi0JY19iaXQyID0gKCgoYSA+PiAyKSAmIGIpIF4gKChhID4+IDEpICYgKGIgPj4gMSkpIF4gKHRtcDEgJiAoYiA+PiAyKSkgXgotCQkgICh0bXAyICYgKGIgPj4gMykpIF4gKHRtcDMgJiAoYiA+PiA0KSkgXiAodG1wNCAmIChiID4+IDUpKSkgJiAweDE7Ci0KLQljX2JpdDMgPSAoKChhID4+IDMpICYgYikgXiAoKGEgPj4gMikgJiAoYiA+PiAxKSkgXiAoKGEgPj4gMSkgJiAoYiA+PiAyKSkgXgotCQkgICh0bXAxICYgKGIgPj4gMykpIF4gKHRtcDIgJiAoYiA+PiA0KSkgXiAodG1wMyAmIChiID4+IDUpKSkgJiAweDE7Ci0KLQljX2JpdDQgPSAoKChhID4+IDQpICYgYikgXiAoKGEgPj4gMykgJiAoYiA+PiAxKSkgXiAoKGEgPj4gMikgJiAoYiA+PiAyKSkgXgotCQkgICgoYSA+PiAxKSAmIChiID4+IDMpKSBeICh0bXAxICYgKGIgPj4gNCkpIF4gKHRtcDIgJiAoYiA+PiA1KSkpICYgMHgxOwotCi0JY19iaXQ1ID0gKCgoYSA+PiA1KSAmIGIpIF4gKChhID4+IDQpICYgKGIgPj4gMSkpIF4gKChhID4+IDMpICYgKGIgPj4gMikpIF4KLQkJICAoKGEgPj4gMikgJiAoYiA+PiAzKSkgXiAoKGEgPj4gMSkgJiAoYiA+PiA0KSkgXiAodG1wMSAmIChiID4+IDUpKSkgJiAweDE7Ci0KLQljID0gY19iaXQwIHwgKGNfYml0MSA8PCAxKSB8IChjX2JpdDIgPDwgMikgfCAoY19iaXQzIDw8IDMpIHwgKGNfYml0NCA8PCA0KSB8IChjX2JpdDUgPDwgNSk7Ci0KLQlyZXR1cm4gYzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IGdmNDA5Nl9tdWwodW5zaWduZWQgc2hvcnQgYSwgdW5zaWduZWQgc2hvcnQgYikKLXsKLQl1bnNpZ25lZCBzaG9ydCBhaCwgYWwsIGJoLCBibCwgYWx4YWgsIGJseGJoLCBhYmxoLCBhbGJsLCBhaGJoLCBhaGJoQiwgYzsKLQotCWFoID0gKGEgPj4gNikgJiAweDNmOwotCWFsID0gYSAmIDB4M2Y7Ci0JYmggPSAoYiA+PiA2KSAmIDB4M2Y7Ci0JYmwgPSBiICYgMHgzZjsKLQlhbHhhaCA9IGFsIF4gYWg7Ci0JYmx4YmggPSBibCBeIGJoOwotCi0JYWJsaCA9IGdmNjRfbXVsKGFseGFoLCBibHhiaCk7Ci0JYWxibCA9IGdmNjRfbXVsKGFsLCBibCk7Ci0JYWhiaCA9IGdmNjRfbXVsKGFoLCBiaCk7Ci0KLQlhaGJoQiA9ICgoYWhiaCAmIDB4MSkgPDwgNSkgfAotCSAgICAoKGFoYmggJiAweDIwKSA+PiAxKSB8Ci0JICAgICgoYWhiaCAmIDB4MTApID4+IDEpIHwgKChhaGJoICYgMHg4KSA+PiAxKSB8ICgoYWhiaCAmIDB4NCkgPj4gMSkgfCAoKChhaGJoID4+IDEpIF4gYWhiaCkgJiAweDEpOwotCi0JYyA9ICgoYWJsaCBeIGFsYmwpIDw8IDYpIHwgKGFoYmhCIF4gYWxibCk7Ci0JcmV0dXJuIGM7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbmRfMmJpdF9lcnJfcGF0cyh1bnNpZ25lZCBzaG9ydCBzMCwgdW5zaWduZWQgc2hvcnQgczEsIHVuc2lnbmVkIHNob3J0IHIwLCB1bnNpZ25lZCBzaG9ydCByMSwgdW5zaWduZWQgc2hvcnQgKnBhdHMpCi17Ci0JZmluZF8yeDJfc29sbigweDEsIDB4MSwgcjAsIHIxLCBzMCwgczEsIHBhdHMpOwotfQotCi1zdGF0aWMgdm9pZCBmaW5kXzNiaXRfZXJyX2NvZWZzKHVuc2lnbmVkIHNob3J0IHMwLCB1bnNpZ25lZCBzaG9ydCBzMSwKLQkJCQl1bnNpZ25lZCBzaG9ydCBzMiwgdW5zaWduZWQgc2hvcnQgczMsIHVuc2lnbmVkIHNob3J0IHM0LCB1bnNpZ25lZCBzaG9ydCBzNSwgdW5zaWduZWQgc2hvcnQgKmNvZWZzKQotewotCXVuc2lnbmVkIHNob3J0IG1bM11bNF07Ci0JaW50IHJvd19vcmRlclszXTsKLQotCXJvd19vcmRlclswXSA9IDA7Ci0Jcm93X29yZGVyWzFdID0gMTsKLQlyb3dfb3JkZXJbMl0gPSAyOwotCW1bMF1bMF0gPSBzMjsKLQltWzBdWzFdID0gczE7Ci0JbVswXVsyXSA9IHMwOwotCW1bMF1bM10gPSBzMzsKLQltWzFdWzBdID0gczM7Ci0JbVsxXVsxXSA9IHMyOwotCW1bMV1bMl0gPSBzMTsKLQltWzFdWzNdID0gczQ7Ci0JbVsyXVswXSA9IHM0OwotCW1bMl1bMV0gPSBzMzsKLQltWzJdWzJdID0gczI7Ci0JbVsyXVszXSA9IHM1OwotCi0JaWYgKG1bMF1bMl0gIT0gMHgwKSB7Ci0JCXplcm9fM3g0X2NvbDIobSk7Ci0JfSBlbHNlIGlmIChtWzFdWzJdICE9IDB4MCkgewotCQlzd2FwXzN4NF9yb3dzKG0sIDAsIDEsIDQpOwotCQl6ZXJvXzN4NF9jb2wyKG0pOwotCX0gZWxzZSBpZiAobVsyXVsyXSAhPSAweDApIHsKLQkJc3dhcF8zeDRfcm93cyhtLCAwLCAyLCA0KTsKLQkJemVyb18zeDRfY29sMihtKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBmaW5kXzNiaXRfZXJyX2NvZWZzLCBzMCxzMSxzMiBhbGwgemVyb3MhXG4iKTsKLQl9Ci0KLQlpZiAobVsxXVsxXSAhPSAweDApIHsKLQkJemVyb18zeDRfY29sMShtKTsKLQl9IGVsc2UgaWYgKG1bMl1bMV0gIT0gMHgwKSB7Ci0JCXN3YXBfM3g0X3Jvd3MobSwgMSwgMiwgNCk7Ci0JCXplcm9fM3g0X2NvbDEobSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogZmluZF8zYml0X2Vycl9jb2VmcywgY2Fubm90IHJlc29sdmUgY29sIDEhXG4iKTsKLQl9Ci0KLQkvKiBzb2x2ZSBjb2VmcyAqLwotCXNvbHZlXzN4NChtLCBjb2Vmcywgcm93X29yZGVyKTsKLX0KLQotc3RhdGljIHZvaWQgemVyb18zeDRfY29sMih1bnNpZ25lZCBzaG9ydCBtWzNdWzRdKQotewotCXVuc2lnbmVkIHNob3J0IG1pbnYxLCBtaW52MjsKLQotCW1pbnYxID0gZ2Y0MDk2X211bChtWzFdWzJdLCBnZjQwOTZfaW52KG1bMF1bMl0pKTsKLQltaW52MiA9IGdmNDA5Nl9tdWwobVsyXVsyXSwgZ2Y0MDk2X2ludihtWzBdWzJdKSk7Ci0JbVsxXVswXSA9IG1bMV1bMF0gXiBnZjQwOTZfbXVsKG1bMF1bMF0sIG1pbnYxKTsKLQltWzFdWzFdID0gbVsxXVsxXSBeIGdmNDA5Nl9tdWwobVswXVsxXSwgbWludjEpOwotCW1bMV1bM10gPSBtWzFdWzNdIF4gZ2Y0MDk2X211bChtWzBdWzNdLCBtaW52MSk7Ci0JbVsyXVswXSA9IG1bMl1bMF0gXiBnZjQwOTZfbXVsKG1bMF1bMF0sIG1pbnYyKTsKLQltWzJdWzFdID0gbVsyXVsxXSBeIGdmNDA5Nl9tdWwobVswXVsxXSwgbWludjIpOwotCW1bMl1bM10gPSBtWzJdWzNdIF4gZ2Y0MDk2X211bChtWzBdWzNdLCBtaW52Mik7Ci19Ci0KLXN0YXRpYyB2b2lkIHplcm9fM3g0X2NvbDEodW5zaWduZWQgc2hvcnQgbVszXVs0XSkKLXsKLQl1bnNpZ25lZCBzaG9ydCBtaW52OwotCW1pbnYgPSBnZjQwOTZfbXVsKG1bMl1bMV0sIGdmNDA5Nl9pbnYobVsxXVsxXSkpOwotCW1bMl1bMF0gPSBtWzJdWzBdIF4gZ2Y0MDk2X211bChtWzFdWzBdLCBtaW52KTsKLQltWzJdWzNdID0gbVsyXVszXSBeIGdmNDA5Nl9tdWwobVsxXVszXSwgbWludik7Ci19Ci0KLXN0YXRpYyB2b2lkIHN3YXBfM3g0X3Jvd3ModW5zaWduZWQgc2hvcnQgbVszXVs0XSwgaW50IGksIGludCBqLCBpbnQgY29sX3dpZHRoKQotewotCXVuc2lnbmVkIHNob3J0IHRtcDA7Ci0JaW50IGNudDsKLQlmb3IgKGNudCA9IDA7IGNudCA8IGNvbF93aWR0aDsgY250KyspIHsKLQkJdG1wMCA9IG1baV1bY250XTsKLQkJbVtpXVtjbnRdID0gbVtqXVtjbnRdOwotCQltW2pdW2NudF0gPSB0bXAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc29sdmVfM3g0KHVuc2lnbmVkIHNob3J0IG1bM11bNF0sIHVuc2lnbmVkIHNob3J0ICpjb2VmcywgaW50ICpyb3dfb3JkZXIpCi17Ci0JdW5zaWduZWQgc2hvcnQgdG1wWzNdOwotCXRtcFswXSA9IGdmNDA5Nl9tdWwobVsyXVszXSwgZ2Y0MDk2X2ludihtWzJdWzBdKSk7Ci0JdG1wWzFdID0gZ2Y0MDk2X211bCgoZ2Y0MDk2X211bCh0bXBbMF0sIG1bMV1bMF0pIF4gbVsxXVszXSksIGdmNDA5Nl9pbnYobVsxXVsxXSkpOwotCXRtcFsyXSA9IGdmNDA5Nl9tdWwoKGdmNDA5Nl9tdWwodG1wWzBdLCBtWzBdWzBdKSBeIGdmNDA5Nl9tdWwodG1wWzFdLCBtWzBdWzFdKSBeIG1bMF1bM10pLCBnZjQwOTZfaW52KG1bMF1bMl0pKTsKLQlzb3J0X2NvZWZzKHJvd19vcmRlciwgdG1wLCAzKTsKLQljb2Vmc1swXSA9IHRtcFswXTsKLQljb2Vmc1sxXSA9IHRtcFsxXTsKLQljb2Vmc1syXSA9IHRtcFsyXTsKLX0KLQotc3RhdGljIHZvaWQgZmluZF8zYml0X2Vycl9wYXRzKHVuc2lnbmVkIHNob3J0IHMwLCB1bnNpZ25lZCBzaG9ydCBzMSwKLQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBzMiwgdW5zaWduZWQgc2hvcnQgcjAsCi0JCQkgICAgICAgdW5zaWduZWQgc2hvcnQgcjEsIHVuc2lnbmVkIHNob3J0IHIyLAotCQkJICAgICAgIHVuc2lnbmVkIHNob3J0ICpwYXRzKQotewotCWZpbmRfMngyX3NvbG4ocjAgXiByMiwgcjEgXiByMiwKLQkJICAgICAgZ2Y0MDk2X211bChyMCwgcjAgXiByMiksIGdmNDA5Nl9tdWwocjEsIHIxIF4gcjIpLAotCQkgICAgICBnZjQwOTZfbXVsKHMwLCByMikgXiBzMSwgZ2Y0MDk2X211bChzMSwgcjIpIF4gczIsIHBhdHMpOwotCXBhdHNbMl0gPSBzMCBeIHBhdHNbMF0gXiBwYXRzWzFdOwotfQotCi1zdGF0aWMgdm9pZCBmaW5kXzRiaXRfZXJyX2NvZWZzKHVuc2lnbmVkIHNob3J0IHMwLCB1bnNpZ25lZCBzaG9ydCBzMSwKLQkJCQl1bnNpZ25lZCBzaG9ydCBzMiwgdW5zaWduZWQgc2hvcnQgczMsCi0JCQkJdW5zaWduZWQgc2hvcnQgczQsIHVuc2lnbmVkIHNob3J0IHM1LAotCQkJCXVuc2lnbmVkIHNob3J0IHM2LCB1bnNpZ25lZCBzaG9ydCBzNywKLQkJCQl1bnNpZ25lZCBzaG9ydCAqY29lZnMpCi17Ci0JdW5zaWduZWQgc2hvcnQgbVs0XVs1XTsKLQlpbnQgcm93X29yZGVyWzRdOwotCi0Jcm93X29yZGVyWzBdID0gMDsKLQlyb3dfb3JkZXJbMV0gPSAxOwotCXJvd19vcmRlclsyXSA9IDI7Ci0Jcm93X29yZGVyWzNdID0gMzsKLQotCW1bMF1bMF0gPSBzMzsKLQltWzBdWzFdID0gczI7Ci0JbVswXVsyXSA9IHMxOwotCW1bMF1bM10gPSBzMDsKLQltWzBdWzRdID0gczQ7Ci0JbVsxXVswXSA9IHM0OwotCW1bMV1bMV0gPSBzMzsKLQltWzFdWzJdID0gczI7Ci0JbVsxXVszXSA9IHMxOwotCW1bMV1bNF0gPSBzNTsKLQltWzJdWzBdID0gczU7Ci0JbVsyXVsxXSA9IHM0OwotCW1bMl1bMl0gPSBzMzsKLQltWzJdWzNdID0gczI7Ci0JbVsyXVs0XSA9IHM2OwotCW1bM11bMF0gPSBzNjsKLQltWzNdWzFdID0gczU7Ci0JbVszXVsyXSA9IHM0OwotCW1bM11bM10gPSBzMzsKLQltWzNdWzRdID0gczc7Ci0KLQlpZiAobVswXVszXSAhPSAweDApIHsKLQkJemVyb180eDVfY29sMyhtKTsKLQl9IGVsc2UgaWYgKG1bMV1bM10gIT0gMHgwKSB7Ci0JCXN3YXBfNHg1X3Jvd3MobSwgMCwgMSwgNSk7Ci0JCXplcm9fNHg1X2NvbDMobSk7Ci0JfSBlbHNlIGlmIChtWzJdWzNdICE9IDB4MCkgewotCQlzd2FwXzR4NV9yb3dzKG0sIDAsIDIsIDUpOwotCQl6ZXJvXzR4NV9jb2wzKG0pOwotCX0gZWxzZSBpZiAobVszXVszXSAhPSAweDApIHsKLQkJc3dhcF80eDVfcm93cyhtLCAwLCAzLCA1KTsKLQkJemVyb180eDVfY29sMyhtKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBmaW5kXzRiaXRfZXJyX2NvZWZzLCBzMCxzMSxzMixzMyBhbGwgemVyb3MhXG4iKTsKLQl9Ci0KLQlpZiAobVsxXVsyXSAhPSAweDApIHsKLQkJemVyb180eDVfY29sMihtKTsKLQl9IGVsc2UgaWYgKG1bMl1bMl0gIT0gMHgwKSB7Ci0JCXN3YXBfNHg1X3Jvd3MobSwgMSwgMiwgNSk7Ci0JCXplcm9fNHg1X2NvbDIobSk7Ci0JfSBlbHNlIGlmIChtWzNdWzJdICE9IDB4MCkgewotCQlzd2FwXzR4NV9yb3dzKG0sIDEsIDMsIDUpOwotCQl6ZXJvXzR4NV9jb2wyKG0pOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IGZpbmRfNGJpdF9lcnJfY29lZnMsIGNhbm5vdCByZXNvbHZlIGNvbCAyIVxuIik7Ci0JfQotCi0JaWYgKG1bMl1bMV0gIT0gMHgwKSB7Ci0JCXplcm9fNHg1X2NvbDEobSk7Ci0JfSBlbHNlIGlmIChtWzNdWzFdICE9IDB4MCkgewotCQlzd2FwXzR4NV9yb3dzKG0sIDIsIDMsIDUpOwotCQl6ZXJvXzR4NV9jb2wxKG0pOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IGZpbmRfNGJpdF9lcnJfY29lZnMsIGNhbm5vdCByZXNvbHZlIGNvbCAxIVxuIik7Ci0JfQotCi0Jc29sdmVfNHg1KG0sIGNvZWZzLCByb3dfb3JkZXIpOwotfQotCi1zdGF0aWMgdm9pZCB6ZXJvXzR4NV9jb2wzKHVuc2lnbmVkIHNob3J0IG1bNF1bNV0pCi17Ci0JdW5zaWduZWQgc2hvcnQgbWludjEsIG1pbnYyLCBtaW52MzsKLQotCW1pbnYxID0gZ2Y0MDk2X211bChtWzFdWzNdLCBnZjQwOTZfaW52KG1bMF1bM10pKTsKLQltaW52MiA9IGdmNDA5Nl9tdWwobVsyXVszXSwgZ2Y0MDk2X2ludihtWzBdWzNdKSk7Ci0JbWludjMgPSBnZjQwOTZfbXVsKG1bM11bM10sIGdmNDA5Nl9pbnYobVswXVszXSkpOwotCi0JbVsxXVswXSA9IG1bMV1bMF0gXiBnZjQwOTZfbXVsKG1bMF1bMF0sIG1pbnYxKTsKLQltWzFdWzFdID0gbVsxXVsxXSBeIGdmNDA5Nl9tdWwobVswXVsxXSwgbWludjEpOwotCW1bMV1bMl0gPSBtWzFdWzJdIF4gZ2Y0MDk2X211bChtWzBdWzJdLCBtaW52MSk7Ci0JbVsxXVs0XSA9IG1bMV1bNF0gXiBnZjQwOTZfbXVsKG1bMF1bNF0sIG1pbnYxKTsKLQltWzJdWzBdID0gbVsyXVswXSBeIGdmNDA5Nl9tdWwobVswXVswXSwgbWludjIpOwotCW1bMl1bMV0gPSBtWzJdWzFdIF4gZ2Y0MDk2X211bChtWzBdWzFdLCBtaW52Mik7Ci0JbVsyXVsyXSA9IG1bMl1bMl0gXiBnZjQwOTZfbXVsKG1bMF1bMl0sIG1pbnYyKTsKLQltWzJdWzRdID0gbVsyXVs0XSBeIGdmNDA5Nl9tdWwobVswXVs0XSwgbWludjIpOwotCW1bM11bMF0gPSBtWzNdWzBdIF4gZ2Y0MDk2X211bChtWzBdWzBdLCBtaW52Myk7Ci0JbVszXVsxXSA9IG1bM11bMV0gXiBnZjQwOTZfbXVsKG1bMF1bMV0sIG1pbnYzKTsKLQltWzNdWzJdID0gbVszXVsyXSBeIGdmNDA5Nl9tdWwobVswXVsyXSwgbWludjMpOwotCW1bM11bNF0gPSBtWzNdWzRdIF4gZ2Y0MDk2X211bChtWzBdWzRdLCBtaW52Myk7Ci19Ci0KLXN0YXRpYyB2b2lkIHplcm9fNHg1X2NvbDIodW5zaWduZWQgc2hvcnQgbVs0XVs1XSkKLXsKLQl1bnNpZ25lZCBzaG9ydCBtaW52MiwgbWludjM7Ci0KLQltaW52MiA9IGdmNDA5Nl9tdWwobVsyXVsyXSwgZ2Y0MDk2X2ludihtWzFdWzJdKSk7Ci0JbWludjMgPSBnZjQwOTZfbXVsKG1bM11bMl0sIGdmNDA5Nl9pbnYobVsxXVsyXSkpOwotCi0JbVsyXVswXSA9IG1bMl1bMF0gXiBnZjQwOTZfbXVsKG1bMV1bMF0sIG1pbnYyKTsKLQltWzJdWzFdID0gbVsyXVsxXSBeIGdmNDA5Nl9tdWwobVsxXVsxXSwgbWludjIpOwotCW1bMl1bNF0gPSBtWzJdWzRdIF4gZ2Y0MDk2X211bChtWzFdWzRdLCBtaW52Mik7Ci0JbVszXVswXSA9IG1bM11bMF0gXiBnZjQwOTZfbXVsKG1bMV1bMF0sIG1pbnYzKTsKLQltWzNdWzFdID0gbVszXVsxXSBeIGdmNDA5Nl9tdWwobVsxXVsxXSwgbWludjMpOwotCW1bM11bNF0gPSBtWzNdWzRdIF4gZ2Y0MDk2X211bChtWzFdWzRdLCBtaW52Myk7Ci19Ci0KLXN0YXRpYyB2b2lkIHplcm9fNHg1X2NvbDEodW5zaWduZWQgc2hvcnQgbVs0XVs1XSkKLXsKLQl1bnNpZ25lZCBzaG9ydCBtaW52OwotCi0JbWludiA9IGdmNDA5Nl9tdWwobVszXVsxXSwgZ2Y0MDk2X2ludihtWzJdWzFdKSk7Ci0KLQltWzNdWzBdID0gbVszXVswXSBeIGdmNDA5Nl9tdWwobVsyXVswXSwgbWludik7Ci0JbVszXVs0XSA9IG1bM11bNF0gXiBnZjQwOTZfbXVsKG1bMl1bNF0sIG1pbnYpOwotfQotCi1zdGF0aWMgdm9pZCBzd2FwXzR4NV9yb3dzKHVuc2lnbmVkIHNob3J0IG1bNF1bNV0sIGludCBpLCBpbnQgaiwgaW50IGNvbF93aWR0aCkKLXsKLQl1bnNpZ25lZCBzaG9ydCB0bXAwOwotCWludCBjbnQ7Ci0KLQlmb3IgKGNudCA9IDA7IGNudCA8IGNvbF93aWR0aDsgY250KyspIHsKLQkJdG1wMCA9IG1baV1bY250XTsKLQkJbVtpXVtjbnRdID0gbVtqXVtjbnRdOwotCQltW2pdW2NudF0gPSB0bXAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc29sdmVfNHg1KHVuc2lnbmVkIHNob3J0IG1bNF1bNV0sIHVuc2lnbmVkIHNob3J0ICpjb2VmcywgaW50ICpyb3dfb3JkZXIpCi17Ci0JdW5zaWduZWQgc2hvcnQgdG1wWzRdOwotCi0JdG1wWzBdID0gZ2Y0MDk2X211bChtWzNdWzRdLCBnZjQwOTZfaW52KG1bM11bMF0pKTsKLQl0bXBbMV0gPSBnZjQwOTZfbXVsKChnZjQwOTZfbXVsKHRtcFswXSwgbVsyXVswXSkgXiBtWzJdWzRdKSwgZ2Y0MDk2X2ludihtWzJdWzFdKSk7Ci0JdG1wWzJdID0gZ2Y0MDk2X211bCgoZ2Y0MDk2X211bCh0bXBbMF0sIG1bMV1bMF0pIF4gZ2Y0MDk2X211bCh0bXBbMV0sIG1bMV1bMV0pIF4gbVsxXVs0XSksIGdmNDA5Nl9pbnYobVsxXVsyXSkpOwotCXRtcFszXSA9IGdmNDA5Nl9tdWwoKGdmNDA5Nl9tdWwodG1wWzBdLCBtWzBdWzBdKSBeCi0JCQlnZjQwOTZfbXVsKHRtcFsxXSwgbVswXVsxXSkgXiBnZjQwOTZfbXVsKHRtcFsyXSwgbVswXVsyXSkgXiBtWzBdWzRdKSwgZ2Y0MDk2X2ludihtWzBdWzNdKSk7Ci0Jc29ydF9jb2Vmcyhyb3dfb3JkZXIsIHRtcCwgNCk7Ci0JY29lZnNbMF0gPSB0bXBbMF07Ci0JY29lZnNbMV0gPSB0bXBbMV07Ci0JY29lZnNbMl0gPSB0bXBbMl07Ci0JY29lZnNbM10gPSB0bXBbM107Ci19Ci0KLXN0YXRpYyB2b2lkIHNvcnRfY29lZnMoaW50ICpvcmRlciwgdW5zaWduZWQgc2hvcnQgKnNvbG4sIGludCBsZW4pCi17Ci0JaW50IGNudCwgc3RhcnRfY250LCBsZWFzdF9vcmQsIGxlYXN0X2NudDsKLQl1bnNpZ25lZCBzaG9ydCB0bXAwOwotCWZvciAoc3RhcnRfY250ID0gMDsgc3RhcnRfY250IDwgbGVuOyBzdGFydF9jbnQrKykgewotCQlmb3IgKGNudCA9IHN0YXJ0X2NudDsgY250IDwgbGVuOyBjbnQrKykgewotCQkJaWYgKGNudCA9PSBzdGFydF9jbnQpIHsKLQkJCQlsZWFzdF9vcmQgPSBvcmRlcltjbnRdOwotCQkJCWxlYXN0X2NudCA9IHN0YXJ0X2NudDsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGxlYXN0X29yZCA+IG9yZGVyW2NudF0pIHsKLQkJCQkJbGVhc3Rfb3JkID0gb3JkZXJbY250XTsKLQkJCQkJbGVhc3RfY250ID0gY250OwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAobGVhc3RfY250ICE9IHN0YXJ0X2NudCkgewotCQkJdG1wMCA9IG9yZGVyW2xlYXN0X2NudF07Ci0JCQlvcmRlcltsZWFzdF9jbnRdID0gb3JkZXJbc3RhcnRfY250XTsKLQkJCW9yZGVyW3N0YXJ0X2NudF0gPSB0bXAwOwotCQkJdG1wMCA9IHNvbG5bbGVhc3RfY250XTsKLQkJCXNvbG5bbGVhc3RfY250XSA9IHNvbG5bc3RhcnRfY250XTsKLQkJCXNvbG5bc3RhcnRfY250XSA9IHRtcDA7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbmRfNGJpdF9lcnJfcGF0cyh1bnNpZ25lZCBzaG9ydCBzMCwgdW5zaWduZWQgc2hvcnQgczEsCi0JCQkgICAgICAgdW5zaWduZWQgc2hvcnQgczIsIHVuc2lnbmVkIHNob3J0IHMzLAotCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IHoxLCB1bnNpZ25lZCBzaG9ydCB6MiwKLQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCB6MywgdW5zaWduZWQgc2hvcnQgejQsCi0JCQkgICAgICAgdW5zaWduZWQgc2hvcnQgKnBhdHMpCi17Ci0JdW5zaWduZWQgc2hvcnQgejRfejEsIHozejRfejN6MywgejRfejIsIHMwejRfczEsIHoxejRfejF6MSwKLQkJejRfejMsIHoyejRfejJ6MiwgczF6NF9zMiwgejN6M3o0X3ozejN6MywgejF6MXo0X3oxejF6MSwgejJ6Mno0X3oyejJ6MiwgczJ6NF9zMzsKLQl1bnNpZ25lZCBzaG9ydCB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzOwotCi0JejRfejEgPSB6NCBeIHoxOwotCXozejRfejN6MyA9IGdmNDA5Nl9tdWwoejMsIHo0KSBeIGdmNDA5Nl9tdWwoejMsIHozKTsKLQl6NF96MiA9IHo0IF4gejI7Ci0JczB6NF9zMSA9IGdmNDA5Nl9tdWwoczAsIHo0KSBeIHMxOwotCXoxejRfejF6MSA9IGdmNDA5Nl9tdWwoejEsIHo0KSBeIGdmNDA5Nl9tdWwoejEsIHoxKTsKLQl6NF96MyA9IHo0IF4gejM7Ci0JejJ6NF96MnoyID0gZ2Y0MDk2X211bCh6MiwgejQpIF4gZ2Y0MDk2X211bCh6MiwgejIpOwotCXMxejRfczIgPSBnZjQwOTZfbXVsKHMxLCB6NCkgXiBzMjsKLQl6M3ozejRfejN6M3ozID0gZ2Y0MDk2X211bChnZjQwOTZfbXVsKHozLCB6MyksIHo0KSBeIGdmNDA5Nl9tdWwoZ2Y0MDk2X211bCh6MywgejMpLCB6Myk7Ci0JejF6MXo0X3oxejF6MSA9IGdmNDA5Nl9tdWwoZ2Y0MDk2X211bCh6MSwgejEpLCB6NCkgXiBnZjQwOTZfbXVsKGdmNDA5Nl9tdWwoejEsIHoxKSwgejEpOwotCXoyejJ6NF96MnoyejIgPSBnZjQwOTZfbXVsKGdmNDA5Nl9tdWwoejIsIHoyKSwgejQpIF4gZ2Y0MDk2X211bChnZjQwOTZfbXVsKHoyLCB6MiksIHoyKTsKLQlzMno0X3MzID0gZ2Y0MDk2X211bChzMiwgejQpIF4gczM7Ci0KLQkvL2ZpbmQgZXJyIHBhdCAwLDEKLQlmaW5kXzJ4Ml9zb2xuKGdmNDA5Nl9tdWwoejRfejEsIHozejRfejN6MykgXgotCQkgICAgICBnZjQwOTZfbXVsKHoxejRfejF6MSwgejRfejMpLCBnZjQwOTZfbXVsKHo0X3oyLAotCQkJCQkJCSAgICAgICB6M3o0X3ozejMpIF4KLQkJICAgICAgZ2Y0MDk2X211bCh6Mno0X3oyejIsIHo0X3ozKSwgZ2Y0MDk2X211bCh6MXo0X3oxejEsCi0JCQkJCQkJICAgICAgIHozejN6NF96M3ozejMpIF4KLQkJICAgICAgZ2Y0MDk2X211bCh6MXoxejRfejF6MXoxLCB6M3o0X3ozejMpLAotCQkgICAgICBnZjQwOTZfbXVsKHoyejRfejJ6MiwKLQkJCQkgejN6M3o0X3ozejN6MykgXiBnZjQwOTZfbXVsKHoyejJ6NF96MnoyejIsCi0JCQkJCQkJICAgICB6M3o0X3ozejMpLAotCQkgICAgICBnZjQwOTZfbXVsKHMwejRfczEsIHozejRfejN6MykgXiBnZjQwOTZfbXVsKHMxejRfczIsCi0JCQkJCQkJCSAgejRfejMpLAotCQkgICAgICBnZjQwOTZfbXVsKHMxejRfczIsIHozejN6NF96M3ozejMpIF4gZ2Y0MDk2X211bChzMno0X3MzLCB6M3o0X3ozejMpLCBwYXRzKTsKLQl0bXAwID0gcGF0c1swXTsKLQl0bXAxID0gcGF0c1sxXTsKLQl0bXAyID0gcGF0c1swXSBeIHBhdHNbMV0gXiBzMDsKLQl0bXAzID0gZ2Y0MDk2X211bChwYXRzWzBdLCB6MSkgXiBnZjQwOTZfbXVsKHBhdHNbMV0sIHoyKSBeIHMxOwotCi0JLy9maW5kIGVyciBwYXQgMiwzCi0JZmluZF8yeDJfc29sbigweDEsIDB4MSwgejMsIHo0LCB0bXAyLCB0bXAzLCBwYXRzKTsKLQlwYXRzWzJdID0gcGF0c1swXTsKLQlwYXRzWzNdID0gcGF0c1sxXTsKLQlwYXRzWzBdID0gdG1wMDsKLQlwYXRzWzFdID0gdG1wMTsKLX0KLQotc3RhdGljIHZvaWQgZmluZF8yeDJfc29sbih1bnNpZ25lZCBzaG9ydCBjMDAsIHVuc2lnbmVkIHNob3J0IGMwMSwKLQkJCSAgdW5zaWduZWQgc2hvcnQgYzEwLCB1bnNpZ25lZCBzaG9ydCBjMTEsCi0JCQkgIHVuc2lnbmVkIHNob3J0IGx2YWwwLCB1bnNpZ25lZCBzaG9ydCBsdmFsMSwKLQkJCSAgdW5zaWduZWQgc2hvcnQgKnNvbG4pCi17Ci0JdW5zaWduZWQgc2hvcnQgbVsyXVszXTsKLQltWzBdWzBdID0gYzAwOwotCW1bMF1bMV0gPSBjMDE7Ci0JbVswXVsyXSA9IGx2YWwwOwotCW1bMV1bMF0gPSBjMTA7Ci0JbVsxXVsxXSA9IGMxMTsKLQltWzFdWzJdID0gbHZhbDE7Ci0KLQlpZiAobVswXVsxXSAhPSAweDApIHsKLQkJLyogKi8KLQl9IGVsc2UgaWYgKG1bMV1bMV0gIT0gMHgwKSB7Ci0JCXN3YXBfMngzX3Jvd3MobSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJXYXJuaW5nOiBmaW5kXzJiaXRfZXJyX2NvZWZzLCBzMCxzMSBhbGwgemVyb3MhXG4iKTsKLQl9Ci0KLQlzb2x2ZV8yeDMobSwgc29sbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHN3YXBfMngzX3Jvd3ModW5zaWduZWQgc2hvcnQgbVsyXVszXSkKLXsKLQl1bnNpZ25lZCBzaG9ydCB0bXAwOwotCWludCBjbnQ7Ci0KLQlmb3IgKGNudCA9IDA7IGNudCA8IDM7IGNudCsrKSB7Ci0JCXRtcDAgPSBtWzBdW2NudF07Ci0JCW1bMF1bY250XSA9IG1bMV1bY250XTsKLQkJbVsxXVtjbnRdID0gdG1wMDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNvbHZlXzJ4Myh1bnNpZ25lZCBzaG9ydCBtWzJdWzNdLCB1bnNpZ25lZCBzaG9ydCAqY29lZnMpCi17Ci0JdW5zaWduZWQgc2hvcnQgbWludjsKLQotCW1pbnYgPSBnZjQwOTZfbXVsKG1bMV1bMV0sIGdmNDA5Nl9pbnYobVswXVsxXSkpOwotCW1bMV1bMF0gPSBtWzFdWzBdIF4gZ2Y0MDk2X211bChtWzBdWzBdLCBtaW52KTsKLQltWzFdWzJdID0gbVsxXVsyXSBeIGdmNDA5Nl9tdWwobVswXVsyXSwgbWludik7Ci0JY29lZnNbMF0gPSBnZjQwOTZfbXVsKG1bMV1bMl0sIGdmNDA5Nl9pbnYobVsxXVswXSkpOwotCWNvZWZzWzFdID0gZ2Y0MDk2X211bCgoZ2Y0MDk2X211bChjb2Vmc1swXSwgbVswXVswXSkgXiBtWzBdWzJdKSwgZ2Y0MDk2X2ludihtWzBdWzFdKSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGdmNjRfaW52WzY0XSA9IHsKLQkgMCwgIDEsIDMzLCA2MiwgNDksIDQzLCAzMSwgNDQsIDU3LCAzNywgNTIsIDI4LCA0NiwgNDAsIDIyLCAyNSwKLQk2MSwgNTQsIDUxLCAzOSwgMjYsIDM1LCAxNCwgMjQsIDIzLCAxNSwgMjAsIDM0LCAxMSwgNTMsIDQ1LCAgNiwKLQk2MywgIDIsIDI3LCAyMSwgNTYsICA5LCA1MCwgMTksIDEzLCA0NywgNDgsICA1LCAgNywgMzAsIDEyLCA0MSwKLQk0MiwgIDQsIDM4LCAxOCwgMTAsIDI5LCAxNywgNjAsIDM2LCAgOCwgNTksIDU4LCA1NSwgMTYsICAzLCAzMgotfTsKLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IGdmNDA5Nl9pbnYodW5zaWduZWQgc2hvcnQgZGluKQotewotCXVuc2lnbmVkIHNob3J0IGFsYWh4YWwsIGFoMkIsIGRlbm8sIGludiwgYmwsIGJoOwotCXVuc2lnbmVkIHNob3J0IGFoLCBhbCwgYWh4YWw7Ci0JdW5zaWduZWQgc2hvcnQgZG91dDsKLQotCWFoID0gKGRpbiA+PiA2KSAmIDB4M2Y7Ci0JYWwgPSBkaW4gJiAweDNmOwotCWFoeGFsID0gYWggXiBhbDsKLQlhaDJCID0gKCgoYWggXiAoYWggPj4gMykpICYgMHgxKSA8PCA1KSB8Ci0JCSgoYWggPj4gMSkgJiAweDEwKSB8Ci0JCSgoKChhaCA+PiA1KSBeIChhaCA+PiAyKSkgJiAweDEpIDw8IDMpIHwKLQkJKChhaCA+PiAyKSAmIDB4NCkgfCAoKCgoYWggPj4gNCkgXiAoYWggPj4gMSkpICYgMHgxKSA8PCAxKSB8IChhaCAmIDB4MSk7Ci0JYWxhaHhhbCA9IGdmNjRfbXVsKGFoeGFsLCBhbCk7Ci0JZGVubyA9IGFsYWh4YWwgXiBhaDJCOwotCWludiA9IGdmNjRfaW52W2Rlbm9dOwotCWJsID0gZ2Y2NF9tdWwoaW52LCBhaHhhbCk7Ci0JYmggPSBnZjY0X211bChpbnYsIGFoKTsKLQlkb3V0ID0gKChiaCAmIDB4M2YpIDw8IDYpIHwgKGJsICYgMHgzZik7Ci0JcmV0dXJuICgoKGJoICYgMHgzZikgPDwgNikgfCAoYmwgJiAweDNmKSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBlcnJfcG9zX2x1dFs0MDk2XSA9IHsKLQkweGZmZiwgMHgwMDAsIDB4NDUxLCAweGZmZiwgMHhmZmYsIDB4M2NmLCAweGZmZiwgMHgwNDEsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjhhLCAweGZmZiwgMHg0OTIsIDB4ZmZmLAotCTB4MTQ1LCAweGZmZiwgMHhmZmYsIDB4NTE0LCAweGZmZiwgMHgwODIsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHgyNDksIDB4MzhlLCAweDQxMCwgMHhmZmYsIDB4MTA0LCAweDIwOCwgMHgxYzcsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmNiLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MGMzLCAweDM0ZCwgMHg0ZDMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDE4NiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MzBjLCAweDU1NSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTY2LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDM4NSwgMHgxNGUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0ZTEsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTM4LCAweGZmZiwgMHgxNmQsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHg0NWIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI5YywgMHgyY2MsIDB4MzBiLCAweDJiMywgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDBiMywgMHhmZmYsIDB4MmY3LAotCTB4ZmZmLCAweDMyYiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MGE3LCAweGZmZiwKLQkweGZmZiwgMHgyZGEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MDdlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxMWMsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDIyZiwgMHhmZmYsIDB4MWY0LCAweGZmZiwgMHhmZmYsCi0JMHgyYjAsIDB4NTA0LCAweGZmZiwgMHgxMTQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjFkLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDAwZCwgMHgzYzQsIDB4MzQwLCAweDEwZiwKLQkweGZmZiwgMHhmZmYsIDB4MjY2LCAweDAyZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0ZjgsCi0JMHgzMzcsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDdiLCAweDE2OCwgMHhmZmYsIDB4ZmZmLCAweDBmZSwKLQkweGZmZiwgMHhmZmYsIDB4NTFhLCAweGZmZiwgMHg0NTgsIDB4ZmZmLCAweDM2ZCwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwNzMsIDB4MzdkLCAweDQxNSwgMHg1NTAsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHgyM2IsIDB4NGI0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFhMSwKLQkweGZmZiwgMHhmZmYsIDB4M2FhLCAweGZmZiwgMHgxMTcsIDB4MDRkLCAweDM0MSwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg1MTgsIDB4MDNlLCAweDBmMiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzYzLCAweGZmZiwgMHgwYjksIDB4ZmZmLCAweGZmZiwKLQkweDI0MSwgMHhmZmYsIDB4ZmZmLCAweDA0OSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHgxNWYsIDB4NTJkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI5ZSwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHg0Y2YsIDB4MGZjLCAweGZmZiwgMHgzNmYsIDB4M2QzLCAweGZmZiwKLQkweDIyOCwgMHhmZmYsIDB4ZmZmLCAweDQ1ZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHgyMzgsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ3ZiwgMHhmZmYsIDB4ZmZmLAotCTB4NDNhLCAweDI2NSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDNlOCwKLQkweGZmZiwgMHhmZmYsIDB4MDFhLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyMWUsCi0JMHgxZmMsIDB4NDBiLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJkMCwgMHgxNTksIDB4ZmZmLAotCTB4ZmZmLCAweDMxMywgMHhmZmYsIDB4ZmZmLCAweDA1YywgMHg0Y2MsIDB4ZmZmLCAweGZmZiwKLQkweDBmNiwgMHgzZDUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTRmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MTcyLCAweDFlNCwgMHgwN2MsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg1M2MsIDB4MWFkLCAweDUzNSwKLQkweDE5YiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDA5MiwgMHhmZmYsIDB4MmJlLCAweGZmZiwgMHhmZmYsIDB4NDgyLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwZTYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ3NiwgMHhmZmYsIDB4NTFkLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHgzNDIsIDB4MmI1LCAweDIyZSwgMHgwOWEsIDB4ZmZmLCAweDA4ZCwKLQkweDQ0ZiwgMHgzZWQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDNkMSwgMHhmZmYsCi0JMHhmZmYsIDB4NTQzLCAweGZmZiwgMHg0OGYsIDB4ZmZmLCAweDNkMiwgMHhmZmYsIDB4MGQ1LAotCTB4MTEzLCAweDBlYywgMHg0MjcsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGM0LCAweGZmZiwKLQkweGZmZiwgMHg1MGEsIDB4ZmZmLCAweDE0NCwgMHhmZmYsIDB4MTA1LCAweDM5ZiwgMHgyOTQsCi0JMHgxNjQsIDB4ZmZmLCAweDMxYSwgMHhmZmYsIDB4ZmZmLCAweDQ5YSwgMHhmZmYsIDB4MTMwLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDFiZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDQ5ZSwgMHgzNzEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDBlOCwgMHg0OWMsIDB4MGY0LCAweGZmZiwKLQkweDMzOCwgMHgxYTcsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MzZjLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHgxYWUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MzFiLCAweGZmZiwgMHhmZmYsIDB4MmRkLCAweDUyMiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJmNCwKLQkweDNjNiwgMHgzMGQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM0YywgMHgxOGYsCi0JMHgzMGEsIDB4ZmZmLCAweDAxZiwgMHgwNzksIDB4ZmZmLCAweGZmZiwgMHg1NGQsIDB4NDZiLAotCTB4MjhjLCAweDM3ZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzU1LCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTRmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzNTksIDB4M2ZlLCAweDNjNSwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHg0MjMsIDB4ZmZmLCAweGZmZiwgMHgzNGEsIDB4MjJjLCAweGZmZiwKLQkweDI1YSwgMHhmZmYsIDB4ZmZmLCAweDRhZCwgMHhmZmYsIDB4MjhkLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg1NDcsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MmUyLCAweGZmZiwgMHhmZmYsIDB4MWQ1LCAweGZmZiwgMHgyYTgsIDB4ZmZmLCAweGZmZiwKLQkweDAzZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4M2ViLCAweDBmYSwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg1NWIsIDB4ZmZmLAotCTB4MDhlLCAweGZmZiwgMHgzYWUsIDB4ZmZmLCAweDNhNCwgMHhmZmYsIDB4MjgyLCAweDE1OCwKLQkweGZmZiwgMHgzODIsIDB4ZmZmLCAweGZmZiwgMHg0OTksIDB4ZmZmLCAweGZmZiwgMHgwOGEsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0NTYsIDB4M2JlLCAweGZmZiwgMHgxZTIsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDU1OSwgMHhmZmYsIDB4MWEwLCAweGZmZiwKLQkweGZmZiwgMHgwYjQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmRmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MDdmLCAweDRmNSwgMHhmZmYsIDB4ZmZmLCAweDI3YywgMHgxMzMsIDB4MDE3LAotCTB4ZmZmLCAweDNmZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0NGQsIDB4NGNkLCAweDE3YSwKLQkweDBkNywgMHg1MzcsIDB4ZmZmLCAweGZmZiwgMHgzNTMsIDB4ZmZmLCAweGZmZiwgMHgzNTEsCi0JMHgzNjYsIDB4ZmZmLCAweDQ0YSwgMHhmZmYsIDB4MWE2LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MjkxLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFlMywKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzODksIDB4ZmZmLCAweDA3YSwgMHhmZmYsCi0JMHgxYjYsIDB4MmVkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyNGUsIDB4MDc0LAotCTB4ZmZmLCAweGZmZiwgMHgzZGMsIDB4ZmZmLCAweDRlMywgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHg0ZWIsIDB4ZmZmLCAweGZmZiwgMHgzYjgsIDB4NGRlLCAweGZmZiwgMHgxOWMsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjYyLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwNzYsIDB4NGU4LCAweDNkYSwKLQkweGZmZiwgMHg1MzEsIDB4ZmZmLCAweGZmZiwgMHgxNGEsIDB4ZmZmLCAweDBhMiwgMHg0MzMsCi0JMHgzZGYsIDB4MWU5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzZTcsIDB4Mjg1LAotCTB4MmQ4LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM0OSwgMHgxOGQsIDB4MDk4LCAweGZmZiwKLQkweDBkZiwgMHg0YmYsIDB4ZmZmLCAweGZmZiwgMHgwYjIsIDB4ZmZmLCAweDM0NiwgMHgyNGQsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyNGYsIDB4NGZhLCAweDJmOSwgMHhmZmYsIDB4ZmZmLAotCTB4M2M5LCAweGZmZiwgMHgyYjQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHgwNTYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDE3OSwgMHhmZmYsIDB4MGU5LCAweDNmMCwgMHgzM2QsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFmZCwgMHhmZmYsIDB4ZmZmLCAweDUyNiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDUzZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxNzAsIDB4MzMxLAotCTB4ZmZmLCAweDA2OCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzZjcsIDB4ZmZmLCAweDNkOCwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MDlmLCAweDU1NiwgMHhmZmYsIDB4ZmZmLCAweDAyZCwgMHhmZmYsIDB4ZmZmLAotCTB4NTUzLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFmMCwgMHhmZmYsIDB4ZmZmLCAweDRkNiwKLQkweDQxZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGQ1LCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyNDgsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MGEzLAotCTB4ZmZmLCAweDIxNywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0ZjEsIDB4MjA5LCAweGZmZiwKLQkweGZmZiwgMHg0NzUsIDB4MjM0LCAweDUyYiwgMHgzOTgsIDB4ZmZmLCAweDA4YiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyYzIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHgyNjgsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHg0YTMsIDB4ZmZmLCAweDBhYSwgMHhmZmYsIDB4MWQ5LCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDE1NSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MGJmLAotCTB4NTM5LCAweGZmZiwgMHhmZmYsIDB4MmYxLCAweDU0NSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJhNywgMHgwNmYsIDB4ZmZmLCAweDM3OCwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyNWUsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTVkLCAweDAyYSwgMHhmZmYsIDB4ZmZmLCAweDBiYywKLQkweDIzNSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHgxNTAsIDB4ZmZmLCAweDFhOSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzgxLAotCTB4ZmZmLCAweDA0ZSwgMHgyNzAsIDB4MTNmLCAweGZmZiwgMHhmZmYsIDB4NDA1LCAweGZmZiwKLQkweDNjZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MmVmLCAweGZmZiwgMHgwNmEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzRmLAotCTB4MjEyLCAweGZmZiwgMHhmZmYsIDB4MGUyLCAweGZmZiwgMHgwODMsIDB4Mjk4LCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4MGMyLCAweGZmZiwgMHhmZmYsIDB4NTJlLCAweGZmZiwgMHg0ODgsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzNmIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDQyLAotCTB4MDkxLCAweGZmZiwgMHg0MWMsIDB4ZmZmLCAweGZmZiwgMHgzYTUsIDB4ZmZmLCAweDRlNiwKLQkweGZmZiwgMHhmZmYsIDB4NDBkLCAweDMxZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0YzEsCi0JMHgwNTMsIDB4ZmZmLCAweDQxOCwgMHgxM2MsIDB4ZmZmLCAweDM1MCwgMHhmZmYsIDB4MGFlLAotCTB4ZmZmLCAweGZmZiwgMHg0MWYsIDB4ZmZmLCAweDQ3MCwgMHhmZmYsIDB4NGNhLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4MDJiLCAweDQ1MCwgMHhmZmYsIDB4MWY4LCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyOTMsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDExLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwYjgsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHgzZTEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQzYywgMHhmZmYsIDB4MmIyLAotCTB4MmFiLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFlYywKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDNmOCwgMHgwMzQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxMWEsIDB4ZmZmLCAweDU0MSwgMHg0NWMsIDB4MTM0LAotCTB4MWNjLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ2OSwgMHhmZmYsIDB4ZmZmLCAweDQ0YiwKLQkweDE2MSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwNTUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MzA3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyZDEsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHgxMjQsIDB4MzdiLCAweDI2YiwgMHgzMzYsIDB4ZmZmLCAweGZmZiwKLQkweDJlNCwgMHgzY2IsIDB4ZmZmLCAweGZmZiwgMHgwZjgsIDB4M2M4LCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4NDYxLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGI1LAotCTB4MmNmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDIwZiwgMHhmZmYsIDB4MzVhLCAweGZmZiwKLQkweDQ5MCwgMHhmZmYsIDB4MTg1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0MmUsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTRiLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MTQ2LCAweGZmZiwgMHg0MTIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MWZmLCAweGZmZiwKLQkweGZmZiwgMHgzZTAsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJkNSwgMHhmZmYsCi0JMHg0ZGYsIDB4NTA1LCAweGZmZiwgMHg0MTMsIDB4ZmZmLCAweDFhNSwgMHhmZmYsIDB4M2IyLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzViLCAweGZmZiwgMHgxMTYsIDB4ZmZmLCAweGZmZiwKLQkweDE3MSwgMHg0ZDAsIDB4ZmZmLCAweDE1NCwgMHgxMmQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ2OCwgMHg0ZGIsIDB4ZmZmLAotCTB4ZmZmLCAweDFkZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDVhLCAweGZmZiwKLQkweDBmMSwgMHg0MDMsIDB4ZmZmLCAweDIyYiwgMHgyZTAsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHgyYjcsIDB4MzczLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxM2UsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHgwZDAsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDMyOSwgMHgxZDIsIDB4M2ZhLCAweDA0NywgMHhmZmYsIDB4MmYyLCAweGZmZiwgMHhmZmYsCi0JMHgxNDEsIDB4MGFjLCAweDFkNywgMHhmZmYsIDB4MDdkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MWMxLCAweGZmZiwgMHg0ODcsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA0NSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHgyODgsIDB4MGNkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyMjYsIDB4MWQ4LAotCTB4ZmZmLCAweDE1MywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRjYiwKLQkweDUyOCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyMGEsIDB4MzQzLCAweDNhMSwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDJkNywgMHgyZDMsIDB4MWFhLCAweDRjNSwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDQyYiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzZTksIDB4ZmZmLCAweDIwYiwgMHgyNjAsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzN2MsIDB4MmZkLAotCTB4ZmZmLCAweGZmZiwgMHgyYzgsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHgzMWUsIDB4ZmZmLCAweDMzNSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHgxMzUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4MzVjLCAweDRkZCwgMHgxMjksIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDFlZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDM0ZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDA3LCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzYWQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHgzNzksIDB4ZmZmLCAweGZmZiwgMHgxZDAsIDB4MzhkLCAweGZmZiwgMHhmZmYsIDB4MWU4LAotCTB4MTg0LCAweDNjMSwgMHgxYzQsIDB4ZmZmLCAweDFmOSwgMHhmZmYsIDB4ZmZmLCAweDQyNCwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxZDMsIDB4MGQ0LCAweGZmZiwgMHg0ZTksCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg1MzAsIDB4MTA3LCAweGZmZiwgMHgxMDYsIDB4MDRmLAotCTB4ZmZmLCAweGZmZiwgMHg0YzcsIDB4NTAzLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHgxNWMsIDB4ZmZmLCAweDIzZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGYzLCAweGZmZiwgMHhmZmYsIDB4M2M3LAotCTB4ZmZmLCAweDI3OCwgMHhmZmYsIDB4ZmZmLCAweDBhNiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDEyMiwgMHgxY2YsIDB4ZmZmLCAweDMyNywgMHhmZmYsIDB4MmU1LCAweGZmZiwgMHgyOWQsCi0JMHhmZmYsIDB4ZmZmLCAweDNmMSwgMHhmZmYsIDB4ZmZmLCAweDQ4ZCwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHgwNTQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDE3OCwKLQkweDI3ZSwgMHg0ZTAsIDB4MzUyLCAweDAyZiwgMHgwOWMsIDB4ZmZmLCAweDJhMCwgMHhmZmYsCi0JMHhmZmYsIDB4NDZhLCAweDQ1NywgMHhmZmYsIDB4ZmZmLCAweDUwMSwgMHhmZmYsIDB4MmJhLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTRlLCAweDJlNywgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4NTUxLCAweGZmZiwgMHhmZmYsIDB4MWRiLCAweDJhYSwgMHhmZmYsCi0JMHhmZmYsIDB4NGJjLCAweGZmZiwgMHhmZmYsIDB4Mzk1LCAweGZmZiwgMHgwZGUsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0NTUsIDB4ZmZmLCAweDE3ZSwKLQkweGZmZiwgMHgyMjEsIDB4NGE3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHgzODgsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzA4LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MjBlLCAweDRiOSwgMHhmZmYsIDB4MjczLCAweDIwYywgMHgwOWUsIDB4ZmZmLCAweDA1NywKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzZjIsIDB4ZmZmLCAweDFhOCwgMHgzYTYsCi0JMHgxNGMsIDB4ZmZmLCAweGZmZiwgMHgwNzEsIDB4ZmZmLCAweGZmZiwgMHg1M2EsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTA5LCAweGZmZiwgMHhmZmYsIDB4Mzk5LCAweGZmZiwKLQkweDA2MSwgMHg0ZjAsIDB4MzllLCAweDI0NCwgMHhmZmYsIDB4MDM1LCAweGZmZiwgMHhmZmYsCi0JMHgzMDUsIDB4NDdlLCAweDI5NywgMHhmZmYsIDB4ZmZmLCAweDJiOCwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxYmMsIDB4ZmZmLCAweDJmYywKLQkweGZmZiwgMHhmZmYsIDB4NTU0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzYjYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg1MTUsIDB4Mzk3LCAweGZmZiwgMHhmZmYsIDB4MTJmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRlNSwKLQkweGZmZiwgMHg0ZmMsIDB4ZmZmLCAweGZmZiwgMHgwNWUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDBhOCwgMHgzYWYsIDB4MDE1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDEzOCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg1NDAsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHgwMjcsIDB4NTIzLCAweDJmMCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDE2YywgMHhmZmYsIDB4MjdkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDA0YywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRkYywKLQkweGZmZiwgMHhmZmYsIDB4MDU5LCAweDMwMSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxYTMsIDB4ZmZmLCAweDE1YSwgMHhmZmYsIDB4ZmZmLAotCTB4MGE1LCAweGZmZiwgMHg0MzUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHgwNTEsIDB4ZmZmLCAweGZmZiwgMHgxMzEsIDB4ZmZmLCAweDRmNCwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0NDEsIDB4ZmZmLCAweDRmYiwgMHhmZmYsIDB4MDNiLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MWVkLCAweDI3NCwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MGQzLCAweDU1ZSwgMHgxYjMsCi0JMHhmZmYsIDB4MGJkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyMjUsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRiNywgMHhmZmYsIDB4ZmZmLCAweDJmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRjMywgMHhmZmYsCi0JMHgzODMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmY2LAotCTB4ZmZmLCAweGZmZiwgMHgxZWUsIDB4ZmZmLCAweDAzZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4MjZmLCAweDFkYywgMHhmZmYsIDB4MGRiLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwY2UsIDB4ZmZmLCAweGZmZiwgMHgxMjcsIDB4MDNhLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzExLCAweGZmZiwKLQkweGZmZiwgMHgxM2QsIDB4MDlkLCAweDQ3YiwgMHgyYTYsIDB4NTBkLCAweDUxMCwgMHgxOWEsCi0JMHhmZmYsIDB4MzU0LCAweDQxNCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHg0NGMsIDB4M2IwLCAweGZmZiwgMHgyM2QsIDB4NDI5LCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHg0YzAsIDB4NDE2LCAweGZmZiwgMHgwNWIsIDB4ZmZmLCAweGZmZiwgMHgxMzcsIDB4ZmZmLAotCTB4MjVmLCAweDQ5ZiwgMHhmZmYsIDB4Mjc5LCAweDAxMywgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDI2OSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDNkMCwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA3NywgMHhmZmYsIDB4ZmZmLCAweDNmYiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyNzEsIDB4M2EwLCAweGZmZiwgMHhmZmYsCi0JMHg0MGYsIDB4ZmZmLCAweGZmZiwgMHgzZGUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MWFiLCAweDI2YSwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDg5LCAweGZmZiwgMHhmZmYsCi0JMHgyNTIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFiNywgMHg0MmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDNiNywKLQkweGZmZiwgMHgyYmIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwZjcsIDB4MDFkLCAweGZmZiwgMHgwNjcsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGUyLCAweGZmZiwgMHhmZmYsIDB4NGJiLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4MTdiLCAweGZmZiwgMHgwZWUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDM2ZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg1MzMsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHg0ZDQsIDB4MzU2LCAweGZmZiwgMHhmZmYsIDB4Mzc1LCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRhNCwgMHg1MTMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRmZiwgMHhmZmYsIDB4MmFmLAotCTB4ZmZmLCAweGZmZiwgMHgwMjYsIDB4ZmZmLCAweDBhZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHgyNmUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ5MywgMHhmZmYsCi0JMHg0NjMsIDB4NGQyLCAweDRiZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGYyLAotCTB4MGI2LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHgzMmQsIDB4MzE1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MTNhLCAweDRhMSwgMHhmZmYsIDB4MjdhLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4NDdhLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDMzNCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTRjLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MGM5LCAweDAwNywgMHhmZmYsIDB4ZmZmLCAweDEyZSwgMHhmZmYsIDB4MGZmLAotCTB4ZmZmLCAweGZmZiwgMHgzZjUsIDB4NTA5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDFjMywgMHgyYWQsIDB4ZmZmLCAweGZmZiwgMHg0N2MsIDB4MjYxLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxNTIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzM5LAotCTB4ZmZmLCAweDI0MywgMHgxYzAsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDA2MywgMHhmZmYsIDB4ZmZmLCAweDI1NCwgMHhmZmYsIDB4ZmZmLCAweDE3MywgMHhmZmYsCi0JMHgwYzcsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDM2MiwgMHgyNTksIDB4NDg1LCAweDM3NCwgMHgwZGMsIDB4M2FiLCAweGZmZiwKLQkweDFjNSwgMHg1MzQsIDB4NTQ0LCAweGZmZiwgMHhmZmYsIDB4NTA4LCAweGZmZiwgMHg0MDIsCi0JMHg0MDgsIDB4ZmZmLCAweDBlNywgMHhmZmYsIDB4ZmZmLCAweDAwYSwgMHgyMDUsIDB4ZmZmLAotCTB4ZmZmLCAweDJiOSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0NjUsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyM2EsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MTQ3LCAweDE5ZCwgMHgxMTUsIDB4MjE0LCAweGZmZiwgMHgwOTAsIDB4MzY4LAotCTB4ZmZmLCAweDIxMCwgMHhmZmYsIDB4ZmZmLCAweDI4MCwgMHg1MmEsIDB4MTYzLCAweDE0OCwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzI2LCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyZGUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MjA2LCAweDJjMSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDE4OSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzY3LCAweGZmZiwgMHgxYTQsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ0MywgMHhmZmYsIDB4MjdiLAotCTB4ZmZmLCAweGZmZiwgMHgyNTEsIDB4NTQ5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4MTg4LCAweDA0YiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzMWYsCi0JMHg0YTYsIDB4ZmZmLCAweDI0NiwgMHgxZGUsIDB4MTU2LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4M2E5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJmYSwgMHhmZmYsIDB4MTI4LCAweDBkMSwKLQkweDQ0OSwgMHgyNTUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI1OCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDUzMiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzMDMsIDB4NTE3LCAweGZmZiwgMHhmZmYsCi0JMHgyYTksIDB4MjRhLCAweGZmZiwgMHhmZmYsIDB4MjMxLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHg0YjYsIDB4NTE2LCAweGZmZiwgMHhmZmYsIDB4MGU0LCAweDBlYiwKLQkweGZmZiwgMHg0ZTQsIDB4ZmZmLCAweDI3NSwgMHhmZmYsIDB4ZmZmLCAweDAzMSwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDI1LCAweDIxYSwgMHhmZmYsIDB4MGNjLAotCTB4NDVmLCAweDNkOSwgMHgyODksIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4MjNlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQzOCwgMHgwOTcsCi0JMHg0MTksIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4MGE5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MzdlLCAweDBlMCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQzMSwKLQkweDM3MiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxYmEsIDB4MDZlLCAweGZmZiwgMHgxYjEsCi0JMHhmZmYsIDB4ZmZmLCAweDEyYSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHgxOTMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDEwYSwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA0OCwgMHgxYjQsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4Mjk1LCAweDE0MCwgMHgxMDgsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTZmLCAweGZmZiwgMHgwYTQsIDB4MzdhLCAweGZmZiwKLQkweDI5YSwgMHhmZmYsIDB4Mjg0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0YzYsCi0JMHgyYTIsIDB4M2EzLCAweGZmZiwgMHgyMDEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGJkLAotCTB4MDA1LCAweDU0YSwgMHgzYjUsIDB4MjA0LCAweDJlZSwgMHgxMWQsIDB4NDM2LCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzZWMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTFmLCAweDQ5OCwgMHgyMWMsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHgzZDYsIDB4ZmZmLCAweDRhYiwgMHhmZmYsIDB4NDMyLCAweDJlYiwKLQkweDU0MiwgMHg0ZmQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0Y2UsIDB4ZmZmLCAweGZmZiwgMHgyZmIsIDB4ZmZmLAotCTB4ZmZmLCAweDJlMSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MWI5LCAweDAzNywgMHgwZGQsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyYmYsIDB4NTIxLCAweDQ5NiwgMHgwOTUsIDB4ZmZmLAotCTB4ZmZmLCAweDMyOCwgMHgwNzAsIDB4MWJmLCAweGZmZiwgMHgzOTMsIDB4ZmZmLCAweGZmZiwKLQkweDEwMiwgMHhmZmYsIDB4ZmZmLCAweDIxYiwgMHhmZmYsIDB4MTQyLCAweDI2MywgMHg1MTksCi0JMHhmZmYsIDB4MmE1LCAweDE3NywgMHhmZmYsIDB4MTRkLCAweDQ3MSwgMHg0YWUsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDFmNiwgMHhmZmYsIDB4NDgxLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDE1MSwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDA4NSwgMHgzM2YsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDg0LAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzQ1LCAweDNhMiwgMHhmZmYsIDB4ZmZmLCAweDBhMCwKLQkweDBkYSwgMHgwMjQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MWJkLCAweGZmZiwgMHg1NWMsCi0JMHg0NjcsIDB4NDQ1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA1MiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHg1MWUsIDB4ZmZmLCAweGZmZiwgMHgzOWQsIDB4ZmZmLCAweDM1ZiwKLQkweGZmZiwgMHgzNzYsIDB4M2VlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0NDgsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTZhLAotCTB4ZmZmLCAweDAzNiwgMHgzOGYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyMTEsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyMzAsIDB4ZmZmLCAweGZmZiwgMHgzYmEsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHgzY2UsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDIyOSwgMHhmZmYsIDB4MTc2LCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwMGIsIDB4ZmZmLCAweDE2MiwgMHgwMTgsIDB4ZmZmLAotCTB4ZmZmLCAweDIzMywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDQwMCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxMmIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDNmNCwgMHhmZmYsIDB4MGYwLCAweGZmZiwgMHgxYWMsIDB4ZmZmLCAweGZmZiwKLQkweDExOSwgMHhmZmYsIDB4MmMwLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ5YiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyM2MsIDB4ZmZmLAotCTB4NGIzLCAweDAxMCwgMHgwNjQsIDB4ZmZmLCAweGZmZiwgMHg0YmEsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDNjMiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDAwNiwgMHgxOTYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxMDAsIDB4MTkxLCAweGZmZiwKLQkweDFlYSwgMHgyOWYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4Mjc2LCAweGZmZiwgMHhmZmYsCi0JMHgyYjEsIDB4M2I5LCAweGZmZiwgMHgwM2MsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTgwLAotCTB4ZmZmLCAweDA4ZiwgMHhmZmYsIDB4ZmZmLCAweDE5ZSwgMHgwMTksIDB4ZmZmLCAweDBiMCwKLQkweDBmZCwgMHgzMzIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MDZiLCAweDJlOCwgMHhmZmYsIDB4NDQ2LCAweGZmZiwgMHhmZmYsIDB4MDA0LAotCTB4MjQ3LCAweDE5NywgMHhmZmYsIDB4MTEyLCAweDE2OSwgMHgyOTIsIDB4ZmZmLCAweDMwMiwKLQkweGZmZiwgMHhmZmYsIDB4MzNiLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyODcsIDB4MjFmLCAweGZmZiwgMHgzZWEsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0ZTcsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDNhOCwgMHhmZmYsIDB4ZmZmLCAweDJiYywgMHhmZmYsCi0JMHg0ODQsIDB4Mjk2LCAweGZmZiwgMHgxYzksIDB4MDhjLCAweDFlNSwgMHg0OGEsIDB4ZmZmLAotCTB4MzYwLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDFjYSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxMGQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHgwNjYsIDB4MmVhLCAweDI4YiwgMHgyNWIsIDB4ZmZmLCAweDA3MiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyYjYsIDB4ZmZmLCAweGZmZiwgMHgyNzIsCi0JMHhmZmYsIDB4ZmZmLCAweDUyNSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MmNhLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI5OSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDU1OCwgMHg0MWEsIDB4ZmZmLCAweDRmNywgMHg1NTcsIDB4ZmZmLCAweDRhMCwgMHgzNDQsCi0JMHgxMmMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTI1LAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDQwZSwgMHhmZmYsIDB4ZmZmLCAweDUwMiwgMHhmZmYsIDB4MTAzLCAweDNlNiwgMHhmZmYsCi0JMHg1MjcsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDVkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDQ0ZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MGQyLCAweDRjOSwgMHgzNWUsCi0JMHg0NTksIDB4MmQ5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTdkLAotCTB4MGM0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDNhYywgMHgzOTAsIDB4MDk0LCAweGZmZiwKLQkweDQ4MywgMHgwYWIsIDB4ZmZmLCAweDI1MywgMHhmZmYsIDB4MzkxLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDEyMywgMHgwZWYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzMwLAotCTB4MzhjLCAweGZmZiwgMHhmZmYsIDB4MmFlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA0MiwKLQkweDAxMiwgMHgwNmQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzJhLCAweDNkYiwgMHgzNjQsCi0JMHgyZGMsIDB4ZmZmLCAweDMwZiwgMHgzZDcsIDB4NGE1LCAweDA1MCwgMHhmZmYsIDB4ZmZmLAotCTB4MDI5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxZDEsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ4MCwgMHhmZmYsCi0JMHg0ZWQsIDB4MDgxLCAweDBhMSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzMGUsIDB4NTJmLAotCTB4MjU3LCAweGZmZiwgMHhmZmYsIDB4NDQ3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQwMSwgMHgzY2MsIDB4ZmZmLCAweGZmZiwgMHgwZmIsCi0JMHgyYzksIDB4NDJhLCAweDMxNCwgMHgzM2UsIDB4M2JkLCAweDMxOCwgMHhmZmYsIDB4MTBlLAotCTB4MmExLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI0YywKLQkweDUwNiwgMHhmZmYsIDB4MjY3LCAweGZmZiwgMHhmZmYsIDB4MjE5LCAweGZmZiwgMHgxZWIsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MzA5LCAweDNlMiwgMHg0NmMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDM4NCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTBjLCAweGZmZiwgMHgyNGIsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDM4LAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDE5NCwKLQkweDE0MywgMHgzZTMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGMyLCAweGZmZiwgMHhmZmYsCi0JMHgwZTEsIDB4MjVjLCAweGZmZiwgMHgyMzcsIDB4ZmZmLCAweDFmZSwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDA2NSwgMHgyYTQsIDB4ZmZmLCAweDM4NiwgMHg1NWEsIDB4MTFiLCAweGZmZiwKLQkweGZmZiwgMHgxOTIsIDB4ZmZmLCAweDE4MywgMHgwMGUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0YjIsIDB4MThlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDQ4NiwgMHg0ZWYsIDB4MGM2LCAweDM4MCwgMHhmZmYsIDB4NGE4LCAweGZmZiwKLQkweDBjNSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDkzLCAweDFiOCwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmU2LAotCTB4ZmZmLCAweDBmMywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDI4ZSwgMHhmZmYsIDB4NTNiLCAweDQyMCwgMHgyMmEsIDB4MzNhLCAweGZmZiwgMHgzODcsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJhMywgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDQyOCwgMHg1MDAsIDB4ZmZmLCAweGZmZiwgMHgxMjAsIDB4MmM2LCAweDI5MCwKLQkweDJmNSwgMHgwZTMsIDB4ZmZmLCAweDBiNywgMHhmZmYsIDB4MzE5LCAweDQ3NCwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDUyOSwgMHgwMTQsIDB4ZmZmLCAweDQxYiwgMHg0MGEsIDB4MThiLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDBkOSwKLQkweGZmZiwgMHgzOGEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFjZSwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4M2IxLCAweGZmZiwgMHhmZmYsIDB4MDVkLAotCTB4MmM0LCAweGZmZiwgMHhmZmYsIDB4NGFmLCAweGZmZiwgMHgwMzAsIDB4ZmZmLCAweGZmZiwKLQkweDIwMywgMHhmZmYsIDB4Mjc3LCAweDI1NiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0ZjksCi0JMHhmZmYsIDB4MmM3LCAweGZmZiwgMHg0NjYsIDB4MDE2LCAweDFjZCwgMHhmZmYsIDB4MTY3LAotCTB4ZmZmLCAweGZmZiwgMHgwYzgsIDB4ZmZmLCAweDQzZCwgMHhmZmYsIDB4ZmZmLCAweDAyMCwKLQkweGZmZiwgMHhmZmYsIDB4MjMyLCAweDFjYiwgMHgxZTAsIDB4ZmZmLCAweGZmZiwgMHgzNDcsCi0JMHhmZmYsIDB4NDc4LCAweGZmZiwgMHgzNjUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MzU4LCAweGZmZiwgMHgxMGIsIDB4ZmZmLCAweDM1ZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4NDUyLCAweDIyZCwgMHhmZmYsIDB4ZmZmLCAweDQ3ZCwgMHhmZmYsCi0JMHgyZjMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0NjAsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHg1MGIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmVjLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0YjEsIDB4NDIyLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MmQ0LCAweGZmZiwgMHgyMzksIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDM5LAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHg0OTEsIDB4MDc1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA2YywgMHhmZmYsCi0JMHhmZmYsIDB4MGY5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDEzOSwgMHhmZmYsIDB4NGY2LCAweGZmZiwgMHhmZmYsIDB4NDA5LCAweGZmZiwKLQkweGZmZiwgMHgxNWIsIDB4ZmZmLCAweGZmZiwgMHgzNDgsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4NGEyLCAweDQ5ZCwgMHhmZmYsIDB4MDMzLCAweDE3NSwgMHhmZmYsIDB4MDM5LAotCTB4ZmZmLCAweDMxMiwgMHg0MGMsIDB4ZmZmLCAweGZmZiwgMHgzMjUsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0YWEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxNjUsIDB4M2JjLCAweDQ4YywgMHgzMTAsIDB4MDk2LAotCTB4ZmZmLCAweGZmZiwgMHgyNTAsIDB4MWEyLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDIwZCwgMHgyYWMsIDB4ZmZmLCAweGZmZiwgMHgzOWIsIDB4ZmZmLCAweDM3NywgMHhmZmYsCi0JMHg1MTIsIDB4NDk1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM1NywgMHg0ZWEsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4MTk4LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQzNCwgMHgwNGEsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDYyLCAweGZmZiwgMHgxZDYsIDB4MWM4LAotCTB4ZmZmLCAweDFmMywgMHgyODEsIDB4ZmZmLCAweDQ2MiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDRiMCwgMHhmZmYsIDB4MjA3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzZGQsCi0JMHhmZmYsIDB4ZmZmLCAweDU1ZCwgMHhmZmYsIDB4NTUyLCAweDQ5NCwgMHgxYWYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDIyNywgMHhmZmYsIDB4ZmZmLCAweDA2OSwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0M2UsCi0JMHgwYjUsIDB4ZmZmLCAweDUyNCwgMHgyZDIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjhmLAotCTB4ZmZmLCAweDAxYiwgMHg1MGUsIDB4ZmZmLCAweGZmZiwgMHgxYmIsIDB4ZmZmLCAweGZmZiwKLQkweDQxZCwgMHhmZmYsIDB4MzJlLCAweDQ4ZSwgMHhmZmYsIDB4MWY3LCAweDIyNCwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4Mzk0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDUyYywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzOTIsIDB4ZmZmLCAweDFlNywKLQkweGZmZiwgMHhmZmYsIDB4M2Y5LCAweDNhNywgMHhmZmYsIDB4NTFmLCAweGZmZiwgMHgwYmIsCi0JMHgxMTgsIDB4M2NhLCAweGZmZiwgMHgxZGQsIDB4ZmZmLCAweDQ4YiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHg1MGYsIDB4ZmZmLCAweDBkNiwgMHhmZmYsIDB4MWZhLCAweGZmZiwKLQkweDExZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGQ3LCAweGZmZiwgMHgwNzgsCi0JMHgwMDgsIDB4ZmZmLCAweDI1ZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MDMyLCAweDMzYywgMHhmZmYsIDB4NGQ5LCAweDE2MCwgMHhmZmYsIDB4ZmZmLCAweDMwMCwKLQkweDBiMSwgMHhmZmYsIDB4MzIyLCAweGZmZiwgMHg0ZWMsIDB4ZmZmLCAweGZmZiwgMHgyMDAsCi0JMHgwMGMsIDB4MzY5LCAweDQ3MywgMHhmZmYsIDB4ZmZmLCAweDMyYywgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDUzZSwgMHgzZDQsIDB4NDE3LCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHgzNGIsIDB4MDAxLCAweDM5YSwgMHgwMmMsIDB4ZmZmLCAweGZmZiwgMHgyY2UsIDB4MDBmLAotCTB4ZmZmLCAweDBiYSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDYwLCAweGZmZiwKLQkweDQwNiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0ZWUsIDB4NGFjLCAweGZmZiwgMHg0M2YsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI5YiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDIxNiwKLQkweDE5MCwgMHhmZmYsIDB4Mzk2LCAweDQ2NCwgMHhmZmYsIDB4ZmZmLCAweDMyMywgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJlOSwgMHhmZmYsIDB4MjZkLAotCTB4MmNkLCAweDA0MCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzhiLCAweDNjMCwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFmMiwgMHhmZmYsIDB4MGVhLCAweGZmZiwgMHhmZmYsCi0JMHg0NzIsIDB4ZmZmLCAweDFmYiwgMHhmZmYsIDB4ZmZmLCAweDBhZiwgMHgyN2YsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHg0NzksIDB4MDIzLCAweGZmZiwgMHgwZDgsIDB4M2IzLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4MTIxLCAweGZmZiwgMHhmZmYsIDB4M2JmLCAweGZmZiwgMHhmZmYsCi0JMHgxNmIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHg0NWEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDBiZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxMTEsIDB4ZmZmLCAweDIyMCwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDA5YiwgMHgyMTgsIDB4ZmZmLCAweDAyMiwgMHgyMDIsIDB4ZmZmLAotCTB4NGM4LCAweGZmZiwgMHgwZWQsIDB4ZmZmLCAweGZmZiwgMHgxODIsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHgxN2YsIDB4MjEzLCAweGZmZiwgMHgzMjEsIDB4MzZhLCAweGZmZiwgMHgwODYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0M2IsIDB4MDg4LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweDI2YywgMHhmZmYsIDB4MmY4LCAweDNiNCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDEzMiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDMzMywgMHg0NDQsCi0JMHgwYzEsIDB4NGQ4LCAweDQ2ZCwgMHgyNjQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4NDI2LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyZmUsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4MDExLCAweGZmZiwgMHgwNWYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4MTBjLCAweDEwMSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTEwLAotCTB4ZmZmLCAweDA0NCwgMHgzMDQsIDB4MzYxLCAweDQwNCwgMHhmZmYsIDB4NTFiLCAweDA5OSwKLQkweGZmZiwgMHg0NDAsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjIyLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDFiNSwgMHhmZmYsIDB4MTM2LCAweDQzMCwgMHhmZmYsIDB4MWRhLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDQzLCAweGZmZiwgMHgxN2MsIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHgwMWMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDI1LCAweDIzNiwgMHhmZmYsCi0JMHgzMTcsIDB4ZmZmLCAweGZmZiwgMHg0MzcsIDB4M2ZjLCAweGZmZiwgMHgxZjEsIDB4ZmZmLAotCTB4MzI0LCAweGZmZiwgMHhmZmYsIDB4MGNhLCAweDMwNiwgMHhmZmYsIDB4NTQ4LCAweGZmZiwKLQkweDQ2ZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0YjgsIDB4MWMyLCAweDI4NiwgMHhmZmYsCi0JMHhmZmYsIDB4MDg3LCAweDE4YSwgMHgxOWYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4MThjLCAweGZmZiwgMHgyMTUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI4MywKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDEyNiwgMHhmZmYsIDB4ZmZmLCAweDM3MCwgMHhmZmYsCi0JMHg1M2YsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzMWMsIDB4ZmZmLAotCTB4NGQxLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDAyMSwgMHhmZmYsIDB4MTU3LCAweGZmZiwKLQkweGZmZiwgMHgwMjgsIDB4MTZlLCAweGZmZiwgMHg0MjEsIDB4ZmZmLCAweDFjNiwgMHhmZmYsCi0JMHhmZmYsIDB4NTExLCAweGZmZiwgMHhmZmYsIDB4MzljLCAweDQ2ZiwgMHgxYjIsIDB4ZmZmLAotCTB4ZmZmLCAweDMxNiwgMHhmZmYsIDB4ZmZmLCAweDAwOSwgMHhmZmYsIDB4ZmZmLCAweDE5NSwKLQkweGZmZiwgMHgyNDAsIDB4NTQ2LCAweGZmZiwgMHhmZmYsIDB4NTIwLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDU0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4M2YzLCAweGZmZiwgMHhmZmYsIDB4MTg3LCAweGZmZiwgMHg0YTksIDB4ZmZmLCAweGZmZiwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg1MWMsIDB4NDUzLCAweDFlNiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweDFiMCwgMHhmZmYsIDB4NDc3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4NGZlLCAweGZmZiwgMHgzMmYsIDB4ZmZmLCAweGZmZiwgMHgxNWUsIDB4MWQ0LCAweGZmZiwKLQkweDBlNSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyNDIsIDB4MTRiLCAweDA0NiwgMHhmZmYsCi0JMHgzZjYsIDB4M2JiLCAweDNlNCwgMHhmZmYsIDB4ZmZmLCAweDJlMywgMHhmZmYsIDB4MjQ1LAotCTB4ZmZmLCAweDE0OSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyZGIsIDB4ZmZmLCAweGZmZiwKLQkweDE4MSwgMHhmZmYsIDB4MDg5LCAweDJjNSwgMHhmZmYsIDB4MWY1LCAweGZmZiwgMHgyZDYsCi0JMHg1MDcsIDB4ZmZmLCAweDQyZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAotCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKLQkweDA4MCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCi0JMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4M2MzLCAweDMyMCwgMHhmZmYsIDB4MWUxLAotCTB4ZmZmLCAweDBmNSwgMHgxM2IsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDAzLCAweDRkYSwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQyYywgMHhmZmYsIDB4ZmZmLCAweDBjYiwgMHhmZmYsCi0JMHg1MzYsIDB4MmMzLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxOTksIDB4ZmZmLAotCTB4ZmZmLCAweDBjMCwgMHhmZmYsIDB4MDFlLCAweDQ5NywgMHhmZmYsIDB4ZmZmLCAweDNlNSwKLQkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDBjZiwgMHhmZmYsIDB4MmJkLCAweGZmZiwgMHgyMjMsCi0JMHhmZmYsIDB4M2ZmLCAweGZmZiwgMHgwNTgsIDB4MTc0LCAweDNlZiwgMHhmZmYsIDB4MDAyCi19OwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgZXJyX3Bvcyh1bnNpZ25lZCBzaG9ydCBkaW4pCi17Ci0JQlVHX09OKGRpbiA+PSBBUlJBWV9TSVpFKGVycl9wb3NfbHV0KSk7Ci0JcmV0dXJuIGVycl9wb3NfbHV0W2Rpbl07Ci19Ci1zdGF0aWMgaW50IGNoa19ub19lcnJfb25seSh1bnNpZ25lZCBzaG9ydCAqY2hrX3N5bmRyb21lX2xpc3QsIHVuc2lnbmVkIHNob3J0ICplcnJfaW5mbykKLXsKLQlpZiAoKGNoa19zeW5kcm9tZV9saXN0WzBdIHwgY2hrX3N5bmRyb21lX2xpc3RbMV0gfAotCSAgICAgY2hrX3N5bmRyb21lX2xpc3RbMl0gfCBjaGtfc3luZHJvbWVfbGlzdFszXSB8Ci0JICAgICBjaGtfc3luZHJvbWVfbGlzdFs0XSB8IGNoa19zeW5kcm9tZV9saXN0WzVdIHwKLQkgICAgIGNoa19zeW5kcm9tZV9saXN0WzZdIHwgY2hrX3N5bmRyb21lX2xpc3RbN10pICE9IDB4MCkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgewotCQllcnJfaW5mb1swXSA9IDB4MDsKLQkJcmV0dXJuIDA7Ci0JfQotfQotc3RhdGljIGludCBjaGtfMV9lcnJfb25seSh1bnNpZ25lZCBzaG9ydCAqY2hrX3N5bmRyb21lX2xpc3QsIHVuc2lnbmVkIHNob3J0ICplcnJfaW5mbykKLXsKLQl1bnNpZ25lZCBzaG9ydCB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1LCB0bXA2OwotCXRtcDAgPSBnZjQwOTZfbXVsKGNoa19zeW5kcm9tZV9saXN0WzFdLCBnZjQwOTZfaW52KGNoa19zeW5kcm9tZV9saXN0WzBdKSk7Ci0JdG1wMSA9IGdmNDA5Nl9tdWwoY2hrX3N5bmRyb21lX2xpc3RbMl0sIGdmNDA5Nl9pbnYoY2hrX3N5bmRyb21lX2xpc3RbMV0pKTsKLQl0bXAyID0gZ2Y0MDk2X211bChjaGtfc3luZHJvbWVfbGlzdFszXSwgZ2Y0MDk2X2ludihjaGtfc3luZHJvbWVfbGlzdFsyXSkpOwotCXRtcDMgPSBnZjQwOTZfbXVsKGNoa19zeW5kcm9tZV9saXN0WzRdLCBnZjQwOTZfaW52KGNoa19zeW5kcm9tZV9saXN0WzNdKSk7Ci0JdG1wNCA9IGdmNDA5Nl9tdWwoY2hrX3N5bmRyb21lX2xpc3RbNV0sIGdmNDA5Nl9pbnYoY2hrX3N5bmRyb21lX2xpc3RbNF0pKTsKLQl0bXA1ID0gZ2Y0MDk2X211bChjaGtfc3luZHJvbWVfbGlzdFs2XSwgZ2Y0MDk2X2ludihjaGtfc3luZHJvbWVfbGlzdFs1XSkpOwotCXRtcDYgPSBnZjQwOTZfbXVsKGNoa19zeW5kcm9tZV9saXN0WzddLCBnZjQwOTZfaW52KGNoa19zeW5kcm9tZV9saXN0WzZdKSk7Ci0JaWYgKCh0bXAwID09IHRtcDEpICYgKHRtcDEgPT0gdG1wMikgJiAodG1wMiA9PSB0bXAzKSAmICh0bXAzID09IHRtcDQpICYgKHRtcDQgPT0gdG1wNSkgJiAodG1wNSA9PSB0bXA2KSkgewotCQllcnJfaW5mb1swXSA9IDB4MTsJLy8gZW5jb2RlIDEtc3ltYm9sIGVycm9yIGFzIDB4MQotCQllcnJfaW5mb1sxXSA9IGVycl9wb3ModG1wMCk7Ci0JCWVycl9pbmZvWzFdID0gKHVuc2lnbmVkIHNob3J0KSgweDU1ZSAtIGVycl9pbmZvWzFdKTsKLQkJZXJyX2luZm9bNV0gPSBjaGtfc3luZHJvbWVfbGlzdFswXTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlCi0JCXJldHVybiAtRUlOVkFMOwotfQotc3RhdGljIGludCBjaGtfMl9lcnJfb25seSh1bnNpZ25lZCBzaG9ydCAqY2hrX3N5bmRyb21lX2xpc3QsIHVuc2lnbmVkIHNob3J0ICplcnJfaW5mbykKLXsKLQl1bnNpZ25lZCBzaG9ydCB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1LCB0bXA2LCB0bXA3OwotCXVuc2lnbmVkIHNob3J0IGNvZWZzWzRdOwotCXVuc2lnbmVkIHNob3J0IGVycl9wYXRzWzRdOwotCWludCBmb3VuZF9udW1fcm9vdCA9IDA7Ci0JdW5zaWduZWQgc2hvcnQgYml0Ml9yb290MCwgYml0Ml9yb290MTsKLQl1bnNpZ25lZCBzaG9ydCBiaXQyX3Jvb3QwX2ludiwgYml0Ml9yb290MV9pbnY7Ci0JdW5zaWduZWQgc2hvcnQgZXJyX2xvY19lcW4sIHRlc3Rfcm9vdDsKLQl1bnNpZ25lZCBzaG9ydCBiaXQyX2xvYzAsIGJpdDJfbG9jMTsKLQl1bnNpZ25lZCBzaG9ydCBiaXQyX3BhdDAsIGJpdDJfcGF0MTsKLQotCWZpbmRfMngyX3NvbG4oY2hrX3N5bmRyb21lX2xpc3RbMV0sCi0JCSAgICAgIGNoa19zeW5kcm9tZV9saXN0WzBdLAotCQkgICAgICBjaGtfc3luZHJvbWVfbGlzdFsyXSwgY2hrX3N5bmRyb21lX2xpc3RbMV0sIGNoa19zeW5kcm9tZV9saXN0WzJdLCBjaGtfc3luZHJvbWVfbGlzdFszXSwgY29lZnMpOwotCWZvciAodGVzdF9yb290ID0gMHgxOyB0ZXN0X3Jvb3QgPCAweGZmZjsgdGVzdF9yb290KyspIHsKLQkJZXJyX2xvY19lcW4gPQotCQkgICAgZ2Y0MDk2X211bChjb2Vmc1sxXSwgZ2Y0MDk2X211bCh0ZXN0X3Jvb3QsIHRlc3Rfcm9vdCkpIF4gZ2Y0MDk2X211bChjb2Vmc1swXSwgdGVzdF9yb290KSBeIDB4MTsKLQkJaWYgKGVycl9sb2NfZXFuID09IDB4MCkgewotCQkJaWYgKGZvdW5kX251bV9yb290ID09IDApIHsKLQkJCQliaXQyX3Jvb3QwID0gdGVzdF9yb290OwotCQkJCWZvdW5kX251bV9yb290ID0gMTsKLQkJCX0gZWxzZSBpZiAoZm91bmRfbnVtX3Jvb3QgPT0gMSkgewotCQkJCWJpdDJfcm9vdDEgPSB0ZXN0X3Jvb3Q7Ci0JCQkJZm91bmRfbnVtX3Jvb3QgPSAyOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCWlmIChmb3VuZF9udW1fcm9vdCAhPSAyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIHsKLQkJYml0Ml9yb290MF9pbnYgPSBnZjQwOTZfaW52KGJpdDJfcm9vdDApOwotCQliaXQyX3Jvb3QxX2ludiA9IGdmNDA5Nl9pbnYoYml0Ml9yb290MSk7Ci0JCWZpbmRfMmJpdF9lcnJfcGF0cyhjaGtfc3luZHJvbWVfbGlzdFswXSwKLQkJCQkgICBjaGtfc3luZHJvbWVfbGlzdFsxXSwgYml0Ml9yb290MF9pbnYsIGJpdDJfcm9vdDFfaW52LCBlcnJfcGF0cyk7Ci0JCWJpdDJfcGF0MCA9IGVycl9wYXRzWzBdOwotCQliaXQyX3BhdDEgPSBlcnJfcGF0c1sxXTsKLQkJLy9mb3IoeCsxKQotCQl0bXAwID0gZ2Y0MDk2X211bChnZjQwOTZfbXVsKGJpdDJfcm9vdDBfaW52LCBiaXQyX3Jvb3QwX2ludiksIGdmNDA5Nl9tdWwoYml0Ml9yb290MF9pbnYsIGJpdDJfcm9vdDBfaW52KSk7CS8vcmludjBeNAotCQl0bXAxID0gZ2Y0MDk2X211bChiaXQyX3Jvb3QwX2ludiwgdG1wMCk7CS8vcmludjBeNQotCQl0bXAyID0gZ2Y0MDk2X211bChiaXQyX3Jvb3QwX2ludiwgdG1wMSk7CS8vcmludjBeNgotCQl0bXAzID0gZ2Y0MDk2X211bChiaXQyX3Jvb3QwX2ludiwgdG1wMik7CS8vcmludjBeNwotCQl0bXA0ID0gZ2Y0MDk2X211bChnZjQwOTZfbXVsKGJpdDJfcm9vdDFfaW52LCBiaXQyX3Jvb3QxX2ludiksIGdmNDA5Nl9tdWwoYml0Ml9yb290MV9pbnYsIGJpdDJfcm9vdDFfaW52KSk7CS8vcmludjFeNAotCQl0bXA1ID0gZ2Y0MDk2X211bChiaXQyX3Jvb3QxX2ludiwgdG1wNCk7CS8vcmludjFeNQotCQl0bXA2ID0gZ2Y0MDk2X211bChiaXQyX3Jvb3QxX2ludiwgdG1wNSk7CS8vcmludjFeNgotCQl0bXA3ID0gZ2Y0MDk2X211bChiaXQyX3Jvb3QxX2ludiwgdG1wNik7CS8vcmludjFeNwotCQkvL2NoZWNrIGlmIG9ubHkgMi1iaXQgZXJyb3IKLQkJaWYgKChjaGtfc3luZHJvbWVfbGlzdFs0XSA9PQotCQkgICAgIChnZjQwOTZfbXVsKGJpdDJfcGF0MCwgdG1wMCkgXgotCQkgICAgICBnZjQwOTZfbXVsKGJpdDJfcGF0MSwKLQkJCQkgdG1wNCkpKSAmIChjaGtfc3luZHJvbWVfbGlzdFs1XSA9PQotCQkJCQkgICAgKGdmNDA5Nl9tdWwoYml0Ml9wYXQwLCB0bXAxKSBeCi0JCQkJCSAgICAgZ2Y0MDk2X211bChiaXQyX3BhdDEsCi0JCQkJCQkJdG1wNSkpKSAmCi0JCSAgICAoY2hrX3N5bmRyb21lX2xpc3RbNl0gPT0KLQkJICAgICAoZ2Y0MDk2X211bChiaXQyX3BhdDAsIHRtcDIpIF4KLQkJICAgICAgZ2Y0MDk2X211bChiaXQyX3BhdDEsCi0JCQkJIHRtcDYpKSkgJiAoY2hrX3N5bmRyb21lX2xpc3RbN10gPT0KLQkJCQkJICAgIChnZjQwOTZfbXVsKGJpdDJfcGF0MCwgdG1wMykgXiBnZjQwOTZfbXVsKGJpdDJfcGF0MSwgdG1wNykpKSkgewotCQkJaWYgKChlcnJfcG9zKGJpdDJfcm9vdDBfaW52KSA9PSAweGZmZikgfCAoZXJyX3BvcyhiaXQyX3Jvb3QxX2ludikgPT0gMHhmZmYpKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9IGVsc2UgewotCQkJCWJpdDJfbG9jMCA9IDB4NTVlIC0gZXJyX3BvcyhiaXQyX3Jvb3QwX2ludik7Ci0JCQkJYml0Ml9sb2MxID0gMHg1NWUgLSBlcnJfcG9zKGJpdDJfcm9vdDFfaW52KTsKLQkJCQllcnJfaW5mb1swXSA9IDB4MjsJLy8gZW5jb2RlIDItc3ltYm9sIGVycm9yIGFzIDB4MgotCQkJCWVycl9pbmZvWzFdID0gYml0Ml9sb2MwOwotCQkJCWVycl9pbmZvWzJdID0gYml0Ml9sb2MxOwotCQkJCWVycl9pbmZvWzVdID0gYml0Ml9wYXQwOwotCQkJCWVycl9pbmZvWzZdID0gYml0Ml9wYXQxOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9IGVsc2UKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLXN0YXRpYyBpbnQgY2hrXzNfZXJyX29ubHkodW5zaWduZWQgc2hvcnQgKmNoa19zeW5kcm9tZV9saXN0LCB1bnNpZ25lZCBzaG9ydCAqZXJyX2luZm8pCi17Ci0JdW5zaWduZWQgc2hvcnQgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNTsKLQl1bnNpZ25lZCBzaG9ydCBjb2Vmc1s0XTsKLQl1bnNpZ25lZCBzaG9ydCBlcnJfcGF0c1s0XTsKLQlpbnQgZm91bmRfbnVtX3Jvb3QgPSAwOwotCXVuc2lnbmVkIHNob3J0IGJpdDNfcm9vdDAsIGJpdDNfcm9vdDEsIGJpdDNfcm9vdDI7Ci0JdW5zaWduZWQgc2hvcnQgYml0M19yb290MF9pbnYsIGJpdDNfcm9vdDFfaW52LCBiaXQzX3Jvb3QyX2ludjsKLQl1bnNpZ25lZCBzaG9ydCBlcnJfbG9jX2VxbiwgdGVzdF9yb290OwotCi0JZmluZF8zYml0X2Vycl9jb2VmcyhjaGtfc3luZHJvbWVfbGlzdFswXSwgY2hrX3N5bmRyb21lX2xpc3RbMV0sCi0JCQkgICAgY2hrX3N5bmRyb21lX2xpc3RbMl0sIGNoa19zeW5kcm9tZV9saXN0WzNdLAotCQkJICAgIGNoa19zeW5kcm9tZV9saXN0WzRdLCBjaGtfc3luZHJvbWVfbGlzdFs1XSwgY29lZnMpOwotCi0JZm9yICh0ZXN0X3Jvb3QgPSAweDE7IHRlc3Rfcm9vdCA8IDB4ZmZmOyB0ZXN0X3Jvb3QrKykgewotCQllcnJfbG9jX2VxbiA9IGdmNDA5Nl9tdWwoY29lZnNbMl0sCi0JCQkJCSBnZjQwOTZfbXVsKGdmNDA5Nl9tdWwodGVzdF9yb290LCB0ZXN0X3Jvb3QpLAotCQkJCQkJICAgIHRlc3Rfcm9vdCkpIF4gZ2Y0MDk2X211bChjb2Vmc1sxXSwgZ2Y0MDk2X211bCh0ZXN0X3Jvb3QsIHRlc3Rfcm9vdCkpCi0JCQleIGdmNDA5Nl9tdWwoY29lZnNbMF0sIHRlc3Rfcm9vdCkgXiAweDE7Ci0KLQkJaWYgKGVycl9sb2NfZXFuID09IDB4MCkgewotCQkJaWYgKGZvdW5kX251bV9yb290ID09IDApIHsKLQkJCQliaXQzX3Jvb3QwID0gdGVzdF9yb290OwotCQkJCWZvdW5kX251bV9yb290ID0gMTsKLQkJCX0gZWxzZSBpZiAoZm91bmRfbnVtX3Jvb3QgPT0gMSkgewotCQkJCWJpdDNfcm9vdDEgPSB0ZXN0X3Jvb3Q7Ci0JCQkJZm91bmRfbnVtX3Jvb3QgPSAyOwotCQkJfSBlbHNlIGlmIChmb3VuZF9udW1fcm9vdCA9PSAyKSB7Ci0JCQkJYml0M19yb290MiA9IHRlc3Rfcm9vdDsKLQkJCQlmb3VuZF9udW1fcm9vdCA9IDM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGZvdW5kX251bV9yb290ICE9IDMpCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UgewotCQliaXQzX3Jvb3QwX2ludiA9IGdmNDA5Nl9pbnYoYml0M19yb290MCk7Ci0JCWJpdDNfcm9vdDFfaW52ID0gZ2Y0MDk2X2ludihiaXQzX3Jvb3QxKTsKLQkJYml0M19yb290Ml9pbnYgPSBnZjQwOTZfaW52KGJpdDNfcm9vdDIpOwotCi0JCWZpbmRfM2JpdF9lcnJfcGF0cyhjaGtfc3luZHJvbWVfbGlzdFswXSwgY2hrX3N5bmRyb21lX2xpc3RbMV0sCi0JCQkJICAgY2hrX3N5bmRyb21lX2xpc3RbMl0sIGJpdDNfcm9vdDBfaW52LAotCQkJCSAgIGJpdDNfcm9vdDFfaW52LCBiaXQzX3Jvb3QyX2ludiwgZXJyX3BhdHMpOwotCi0JCS8vY2hlY2sgaWYgb25seSAzLWJpdCBlcnJvcgotCQl0bXAwID0gZ2Y0MDk2X211bChiaXQzX3Jvb3QwX2ludiwgYml0M19yb290MF9pbnYpOwotCQl0bXAwID0gZ2Y0MDk2X211bCh0bXAwLCB0bXAwKTsKLQkJdG1wMCA9IGdmNDA5Nl9tdWwodG1wMCwgYml0M19yb290MF9pbnYpOwotCQl0bXAwID0gZ2Y0MDk2X211bCh0bXAwLCBiaXQzX3Jvb3QwX2ludik7CS8vcmludjBeNgotCQl0bXAxID0gZ2Y0MDk2X211bCh0bXAwLCBiaXQzX3Jvb3QwX2ludik7CS8vcmludjBeNwotCQl0bXAyID0gZ2Y0MDk2X211bChiaXQzX3Jvb3QxX2ludiwgYml0M19yb290MV9pbnYpOwotCQl0bXAyID0gZ2Y0MDk2X211bCh0bXAyLCB0bXAyKTsKLQkJdG1wMiA9IGdmNDA5Nl9tdWwodG1wMiwgYml0M19yb290MV9pbnYpOwotCQl0bXAyID0gZ2Y0MDk2X211bCh0bXAyLCBiaXQzX3Jvb3QxX2ludik7CS8vcmludjFeNgotCQl0bXAzID0gZ2Y0MDk2X211bCh0bXAyLCBiaXQzX3Jvb3QxX2ludik7CS8vcmludjFeNwotCQl0bXA0ID0gZ2Y0MDk2X211bChiaXQzX3Jvb3QyX2ludiwgYml0M19yb290Ml9pbnYpOwotCQl0bXA0ID0gZ2Y0MDk2X211bCh0bXA0LCB0bXA0KTsKLQkJdG1wNCA9IGdmNDA5Nl9tdWwodG1wNCwgYml0M19yb290Ml9pbnYpOwotCQl0bXA0ID0gZ2Y0MDk2X211bCh0bXA0LCBiaXQzX3Jvb3QyX2ludik7CS8vcmludjJeNgotCQl0bXA1ID0gZ2Y0MDk2X211bCh0bXA0LCBiaXQzX3Jvb3QyX2ludik7CS8vcmludjJeNwotCi0JCS8vY2hlY2sgaWYgb25seSAzIGVycm9ycwotCQlpZiAoKGNoa19zeW5kcm9tZV9saXN0WzZdID09IChnZjQwOTZfbXVsKGVycl9wYXRzWzBdLCB0bXAwKSBeCi0JCQkJCSAgICAgIGdmNDA5Nl9tdWwoZXJyX3BhdHNbMV0sIHRtcDIpIF4KLQkJCQkJICAgICAgZ2Y0MDk2X211bChlcnJfcGF0c1syXSwgdG1wNCkpKSAmCi0JCSAgICAoY2hrX3N5bmRyb21lX2xpc3RbN10gPT0gKGdmNDA5Nl9tdWwoZXJyX3BhdHNbMF0sIHRtcDEpIF4KLQkJCQkJICAgICAgZ2Y0MDk2X211bChlcnJfcGF0c1sxXSwgdG1wMykgXiBnZjQwOTZfbXVsKGVycl9wYXRzWzJdLCB0bXA1KSkpKSB7Ci0JCQlpZiAoKGVycl9wb3MoYml0M19yb290MF9pbnYpID09IDB4ZmZmKSB8Ci0JCQkgICAgKGVycl9wb3MoYml0M19yb290MV9pbnYpID09IDB4ZmZmKSB8IChlcnJfcG9zKGJpdDNfcm9vdDJfaW52KSA9PSAweGZmZikpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0gZWxzZSB7Ci0JCQkJZXJyX2luZm9bMF0gPSAweDM7Ci0JCQkJZXJyX2luZm9bMV0gPSAoMHg1NWUgLSBlcnJfcG9zKGJpdDNfcm9vdDBfaW52KSk7Ci0JCQkJZXJyX2luZm9bMl0gPSAoMHg1NWUgLSBlcnJfcG9zKGJpdDNfcm9vdDFfaW52KSk7Ci0JCQkJZXJyX2luZm9bM10gPSAoMHg1NWUgLSBlcnJfcG9zKGJpdDNfcm9vdDJfaW52KSk7Ci0JCQkJZXJyX2luZm9bNV0gPSBlcnJfcGF0c1swXTsKLQkJCQllcnJfaW5mb1s2XSA9IGVycl9wYXRzWzFdOwotCQkJCWVycl9pbmZvWzddID0gZXJyX3BhdHNbMl07Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQotc3RhdGljIGludCBjaGtfNF9lcnJfb25seSh1bnNpZ25lZCBzaG9ydCAqY2hrX3N5bmRyb21lX2xpc3QsIHVuc2lnbmVkIHNob3J0ICplcnJfaW5mbykKLXsKLQl1bnNpZ25lZCBzaG9ydCBjb2Vmc1s0XTsKLQl1bnNpZ25lZCBzaG9ydCBlcnJfcGF0c1s0XTsKLQlpbnQgZm91bmRfbnVtX3Jvb3QgPSAwOwotCXVuc2lnbmVkIHNob3J0IGJpdDRfcm9vdDAsIGJpdDRfcm9vdDEsIGJpdDRfcm9vdDIsIGJpdDRfcm9vdDM7Ci0JdW5zaWduZWQgc2hvcnQgYml0NF9yb290MF9pbnYsIGJpdDRfcm9vdDFfaW52LCBiaXQ0X3Jvb3QyX2ludiwgYml0NF9yb290M19pbnY7Ci0JdW5zaWduZWQgc2hvcnQgZXJyX2xvY19lcW4sIHRlc3Rfcm9vdDsKLQotCWZpbmRfNGJpdF9lcnJfY29lZnMoY2hrX3N5bmRyb21lX2xpc3RbMF0sCi0JCQkgICAgY2hrX3N5bmRyb21lX2xpc3RbMV0sCi0JCQkgICAgY2hrX3N5bmRyb21lX2xpc3RbMl0sCi0JCQkgICAgY2hrX3N5bmRyb21lX2xpc3RbM10sCi0JCQkgICAgY2hrX3N5bmRyb21lX2xpc3RbNF0sCi0JCQkgICAgY2hrX3N5bmRyb21lX2xpc3RbNV0sIGNoa19zeW5kcm9tZV9saXN0WzZdLCBjaGtfc3luZHJvbWVfbGlzdFs3XSwgY29lZnMpOwotCi0JZm9yICh0ZXN0X3Jvb3QgPSAweDE7IHRlc3Rfcm9vdCA8IDB4ZmZmOyB0ZXN0X3Jvb3QrKykgewotCQllcnJfbG9jX2VxbiA9Ci0JCSAgICBnZjQwOTZfbXVsKGNvZWZzWzNdLAotCQkJICAgICAgIGdmNDA5Nl9tdWwoZ2Y0MDk2X211bAotCQkJCQkgIChnZjQwOTZfbXVsKHRlc3Rfcm9vdCwgdGVzdF9yb290KSwKLQkJCQkJICAgdGVzdF9yb290KSwKLQkJCQkJICB0ZXN0X3Jvb3QpKSBeIGdmNDA5Nl9tdWwoY29lZnNbMl0sCi0JCQkJCQkJCSAgIGdmNDA5Nl9tdWwKLQkJCQkJCQkJICAgKGdmNDA5Nl9tdWwodGVzdF9yb290LCB0ZXN0X3Jvb3QpLCB0ZXN0X3Jvb3QpKQotCQkgICAgXiBnZjQwOTZfbXVsKGNvZWZzWzFdLCBnZjQwOTZfbXVsKHRlc3Rfcm9vdCwgdGVzdF9yb290KSkgXiBnZjQwOTZfbXVsKGNvZWZzWzBdLCB0ZXN0X3Jvb3QpCi0JCSAgICBeIDB4MTsKLQkJaWYgKGVycl9sb2NfZXFuID09IDB4MCkgewotCQkJaWYgKGZvdW5kX251bV9yb290ID09IDApIHsKLQkJCQliaXQ0X3Jvb3QwID0gdGVzdF9yb290OwotCQkJCWZvdW5kX251bV9yb290ID0gMTsKLQkJCX0gZWxzZSBpZiAoZm91bmRfbnVtX3Jvb3QgPT0gMSkgewotCQkJCWJpdDRfcm9vdDEgPSB0ZXN0X3Jvb3Q7Ci0JCQkJZm91bmRfbnVtX3Jvb3QgPSAyOwotCQkJfSBlbHNlIGlmIChmb3VuZF9udW1fcm9vdCA9PSAyKSB7Ci0JCQkJYml0NF9yb290MiA9IHRlc3Rfcm9vdDsKLQkJCQlmb3VuZF9udW1fcm9vdCA9IDM7Ci0JCQl9IGVsc2UgewotCQkJCWZvdW5kX251bV9yb290ID0gNDsKLQkJCQliaXQ0X3Jvb3QzID0gdGVzdF9yb290OwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCWlmIChmb3VuZF9udW1fcm9vdCAhPSA0KSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSB7Ci0JCWJpdDRfcm9vdDBfaW52ID0gZ2Y0MDk2X2ludihiaXQ0X3Jvb3QwKTsKLQkJYml0NF9yb290MV9pbnYgPSBnZjQwOTZfaW52KGJpdDRfcm9vdDEpOwotCQliaXQ0X3Jvb3QyX2ludiA9IGdmNDA5Nl9pbnYoYml0NF9yb290Mik7Ci0JCWJpdDRfcm9vdDNfaW52ID0gZ2Y0MDk2X2ludihiaXQ0X3Jvb3QzKTsKLQkJZmluZF80Yml0X2Vycl9wYXRzKGNoa19zeW5kcm9tZV9saXN0WzBdLAotCQkJCSAgIGNoa19zeW5kcm9tZV9saXN0WzFdLAotCQkJCSAgIGNoa19zeW5kcm9tZV9saXN0WzJdLAotCQkJCSAgIGNoa19zeW5kcm9tZV9saXN0WzNdLAotCQkJCSAgIGJpdDRfcm9vdDBfaW52LCBiaXQ0X3Jvb3QxX2ludiwgYml0NF9yb290Ml9pbnYsIGJpdDRfcm9vdDNfaW52LCBlcnJfcGF0cyk7Ci0JCWVycl9pbmZvWzBdID0gMHg0OwotCQllcnJfaW5mb1sxXSA9ICgweDU1ZSAtIGVycl9wb3MoYml0NF9yb290MF9pbnYpKTsKLQkJZXJyX2luZm9bMl0gPSAoMHg1NWUgLSBlcnJfcG9zKGJpdDRfcm9vdDFfaW52KSk7Ci0JCWVycl9pbmZvWzNdID0gKDB4NTVlIC0gZXJyX3BvcyhiaXQ0X3Jvb3QyX2ludikpOwotCQllcnJfaW5mb1s0XSA9ICgweDU1ZSAtIGVycl9wb3MoYml0NF9yb290M19pbnYpKTsKLQkJZXJyX2luZm9bNV0gPSBlcnJfcGF0c1swXTsKLQkJZXJyX2luZm9bNl0gPSBlcnJfcGF0c1sxXTsKLQkJZXJyX2luZm9bN10gPSBlcnJfcGF0c1syXTsKLQkJZXJyX2luZm9bOF0gPSBlcnJfcGF0c1szXTsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi12b2lkIGNvcnJlY3RfMTJiaXRfc3ltYm9sKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgc2hvcnQgc3ltLAotCQkJICB1bnNpZ25lZCBzaG9ydCB2YWwpCi17Ci0JaWYgKHVubGlrZWx5KHN5bSA+IDEzNjYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IHN5bWJvbCAlZCBvdXQgb2YgcmFuZ2U7IGNhbm5vdCBjb3JyZWN0XG4iLCBzeW0pOwotCX0gZWxzZSBpZiAoc3ltID09IDApIHsKLQkJYnVmWzBdIF49IHZhbDsKLQl9IGVsc2UgaWYgKHN5bSAmIDEpIHsKLQkJYnVmWzErKDMqKHN5bS0xKSkvMl0gXj0gKHZhbCA+PiA0KTsKLQkJYnVmWzIrKDMqKHN5bS0xKSkvMl0gXj0gKCh2YWwgJiAweGYpIDw8IDQpOwotCX0gZWxzZSB7Ci0JCWJ1ZlsyKygzKihzeW0tMikpLzJdIF49ICh2YWwgPj4gOCk7Ci0JCWJ1ZlszKygzKihzeW0tMikpLzJdIF49ICh2YWwgJiAweGZmKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgZGVidWdlY2MgPSAwOwotbW9kdWxlX3BhcmFtKGRlYnVnZWNjLCBpbnQsIDA2NDQpOwotCi1pbnQgY2FmZV9jb3JyZWN0X2VjYyh1bnNpZ25lZCBjaGFyICpidWYsCi0JCSAgICAgdW5zaWduZWQgc2hvcnQgKmNoa19zeW5kcm9tZV9saXN0KQotewotCXVuc2lnbmVkIHNob3J0IGVycl9pbmZvWzldOwotCWludCBpOwotCi0JaWYgKGRlYnVnZWNjKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNhZmVfY29ycmVjdF9lY2MgaW52b2tlZC4gU3luZHJvbWVzICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4XG4iLAotCQkgICAgICAgY2hrX3N5bmRyb21lX2xpc3RbMF0sIGNoa19zeW5kcm9tZV9saXN0WzFdLAotCQkgICAgICAgY2hrX3N5bmRyb21lX2xpc3RbMl0sIGNoa19zeW5kcm9tZV9saXN0WzNdLAotCQkgICAgICAgY2hrX3N5bmRyb21lX2xpc3RbNF0sIGNoa19zeW5kcm9tZV9saXN0WzVdLAotCQkgICAgICAgY2hrX3N5bmRyb21lX2xpc3RbNl0sIGNoa19zeW5kcm9tZV9saXN0WzddKTsKLQkJZm9yIChpPTA7IGkgPCAyMDQ4OyBpKz0xNikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRCAlMDR4OiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkJCSAgICAgICBpLAotCQkJICAgICAgIGJ1ZltpXSwgYnVmW2krMV0sIGJ1ZltpKzJdLCBidWZbaSszXSwKLQkJCSAgICAgICBidWZbaSs0XSwgYnVmW2krNV0sIGJ1ZltpKzZdLCBidWZbaSs3XSwKLQkJCSAgICAgICBidWZbaSs4XSwgYnVmW2krOV0sIGJ1ZltpKzEwXSwgYnVmW2krMTFdLAotCQkJICAgICAgIGJ1ZltpKzEyXSwgYnVmW2krMTNdLCBidWZbaSsxNF0sIGJ1ZltpKzE1XSk7Ci0JCX0KLQkJZm9yICggOyBpIDwgMjExMjsgaSs9MTYpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk8gICAlMDJ4OiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkJCSAgICAgICBpIC0gMjA0OCwKLQkJCSAgICAgICBidWZbaV0sIGJ1ZltpKzFdLCBidWZbaSsyXSwgYnVmW2krM10sCi0JCQkgICAgICAgYnVmW2krNF0sIGJ1ZltpKzVdLCBidWZbaSs2XSwgYnVmW2krN10sCi0JCQkgICAgICAgYnVmW2krOF0sIGJ1ZltpKzldLCBidWZbaSsxMF0sIGJ1ZltpKzExXSwKLQkJCSAgICAgICBidWZbaSsxMl0sIGJ1ZltpKzEzXSwgYnVmW2krMTRdLCBidWZbaSsxNV0pOwotCQl9Ci0JfQotCi0KLQotCWlmIChjaGtfbm9fZXJyX29ubHkoY2hrX3N5bmRyb21lX2xpc3QsIGVycl9pbmZvKSAmJgotCSAgICBjaGtfMV9lcnJfb25seShjaGtfc3luZHJvbWVfbGlzdCwgZXJyX2luZm8pICYmCi0JICAgIGNoa18yX2Vycl9vbmx5KGNoa19zeW5kcm9tZV9saXN0LCBlcnJfaW5mbykgJiYKLQkgICAgY2hrXzNfZXJyX29ubHkoY2hrX3N5bmRyb21lX2xpc3QsIGVycl9pbmZvKSAmJgotCSAgICBjaGtfNF9lcnJfb25seShjaGtfc3luZHJvbWVfbGlzdCwgZXJyX2luZm8pKSB7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWZvciAoaT0wOyBpIDwgZXJyX2luZm9bMF07IGkrKykgewotCQlpZiAoZGVidWdlY2MpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3JyZWN0IHN5bWJvbCAlZCB3aXRoIDB4JTAzeFxuIiwKLQkJCSAgICAgICBlcnJfaW5mb1sxK2ldLCBlcnJfaW5mb1s1K2ldKTsKLQotCQljb3JyZWN0XzEyYml0X3N5bWJvbChidWYsIGVycl9pbmZvWzEraV0sIGVycl9pbmZvWzUraV0pOwotCX0KLQotCXJldHVybiBlcnJfaW5mb1swXTsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9jYWZlLmMgYi9kcml2ZXJzL210ZC9uYW5kL2NhZmVfbmFuZC5jCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIGRyaXZlcnMvbXRkL25hbmQvY2FmZS5jCnJlbmFtZSB0byBkcml2ZXJzL210ZC9uYW5kL2NhZmVfbmFuZC5jCmluZGV4IGMzMjhhNzUuLmNmZjk2OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvY2FmZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvY2FmZV9uYW5kLmMKQEAgLTExLDYgKzExLDcgQEAKICN1bmRlZiBERUJVRwogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3JzbGliLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTQ2LDEzICs0NywxNCBAQAogI2RlZmluZSBDQUZFX0dMT0JBTF9JUlFfTUFTSwkweDMwMGMKICNkZWZpbmUgQ0FGRV9OQU5EX1JFU0VUCQkweDMwMzQKIAotaW50IGNhZmVfY29ycmVjdF9lY2ModW5zaWduZWQgY2hhciAqYnVmLAotCQkgICAgIHVuc2lnbmVkIHNob3J0ICpjaGtfc3luZHJvbWVfbGlzdCk7CisvKiBNaXNzaW5nIGZyb20gdGhlIGRhdGFzaGVldDogYml0IDE5IG9mIENUUkwxIHNldHMgQ0UwIHZzLiBDRTEgKi8KKyNkZWZpbmUgQ1RSTDFfQ0hJUFNFTEVDVAkoMTw8MTkpCiAKIHN0cnVjdCBjYWZlX3ByaXYgewogCXN0cnVjdCBuYW5kX2NoaXAgbmFuZDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAl2b2lkIF9faW9tZW0gKm1taW87CisJc3RydWN0IHJzX2NvbnRyb2wgKnJzOwogCXVpbnQzMl90IGN0bDE7CiAJdWludDMyX3QgY3RsMjsKIAlpbnQgZGF0YWxlbjsKQEAgLTE5NSw4ICsxOTcsOCBAQAogCiAJY2FmZS0+ZGF0YV9wb3MgPSBjYWZlLT5kYXRhbGVuID0gMDsKIAotCS8qIFNldCBjb21tYW5kIHZhbGlkIGJpdCAqLwotCWN0bDEgPSAweDgwMDAwMDAwIHwgY29tbWFuZDsKKwkvKiBTZXQgY29tbWFuZCB2YWxpZCBiaXQsIG1hc2sgaW4gdGhlIGNoaXAgc2VsZWN0IGJpdCAgKi8KKwljdGwxID0gMHg4MDAwMDAwMCB8IGNvbW1hbmQgfCAoY2FmZS0+Y3RsMSAmIENUUkwxX0NISVBTRUxFQ1QpOwogCiAJLyogU2V0IFJEIG9yIFdSIGJpdHMgYXMgYXBwcm9wcmlhdGUgKi8KIAlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFESUQgfHwgY29tbWFuZCA9PSBOQU5EX0NNRF9TVEFUVVMpIHsKQEAgLTMwOSw4ICszMTEsMTYgQEAKIAogc3RhdGljIHZvaWQgY2FmZV9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXBucikKIHsKLQkvL3N0cnVjdCBjYWZlX3ByaXYgKmNhZmUgPSBtdGQtPnByaXY7Ci0JLy8JY2FmZV9kZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJzZWxlY3RfY2hpcCAlZFxuIiwgY2hpcG5yKTsKKwlzdHJ1Y3QgY2FmZV9wcml2ICpjYWZlID0gbXRkLT5wcml2OworCisJY2FmZV9kZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJzZWxlY3RfY2hpcCAlZFxuIiwgY2hpcG5yKTsKKworCS8qIE1hc2sgdGhlIGFwcHJvcHJpYXRlIGJpdCBpbnRvIHRoZSBzdG9yZWQgdmFsdWUgb2YgY3RsMQorCSAgIHdoaWNoIHdpbGwgYmUgdXNlZCBieSBjYWZlX25hbmRfY21kZnVuYygpICovCisJaWYgKGNoaXBucikKKwkJY2FmZS0+Y3RsMSB8PSBDVFJMMV9DSElQU0VMRUNUOworCWVsc2UKKwkJY2FmZS0+Y3RsMSAmPSB+Q1RSTDFfQ0hJUFNFTEVDVDsKIH0KIAogc3RhdGljIGludCBjYWZlX25hbmRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmlkKQpAQCAtMzc0LDI4ICszODQsNjYgQEAKIAljaGlwLT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7CiAKIAlpZiAoY2hlY2tlY2MgJiYgY2FmZV9yZWFkbChjYWZlLCBOQU5EX0VDQ19SRVNVTFQpICYgKDE8PDE4KSkgewotCQl1bnNpZ25lZCBzaG9ydCBzeW5bOF07Ci0JCWludCBpOworCQl1bnNpZ25lZCBzaG9ydCBzeW5bOF0sIHBhdFs0XTsKKwkJaW50IHBvc1s0XTsKKwkJdTggKm9vYiA9IGNoaXAtPm9vYl9wb2k7CisJCWludCBpLCBuOwogCiAJCWZvciAoaT0wOyBpPDg7IGkrPTIpIHsKIAkJCXVpbnQzMl90IHRtcCA9IGNhZmVfcmVhZGwoY2FmZSwgTkFORF9FQ0NfU1lOMDEgKyAoaSoyKSk7Ci0JCQlzeW5baV0gPSB0bXAgJiAweGZmZjsKLQkJCXN5bltpKzFdID0gKHRtcCA+PiAxNikgJiAweGZmZjsKKwkJCXN5bltpXSA9IGNhZmUtPnJzLT5pbmRleF9vZlt0bXAgJiAweGZmZl07CisJCQlzeW5baSsxXSA9IGNhZmUtPnJzLT5pbmRleF9vZlsodG1wID4+IDE2KSAmIDB4ZmZmXTsKIAkJfQogCi0JCWlmICgoaSA9IGNhZmVfY29ycmVjdF9lY2MoYnVmLCBzeW4pKSA8IDApIHsKKwkJbiA9IGRlY29kZV9yczE2KGNhZmUtPnJzLCBOVUxMLCBOVUxMLCAxMzY3LCBzeW4sIDAsIHBvcywgMCwKKwkJICAgICAgICAgICAgICAgIHBhdCk7CisKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJaW50IHAgPSBwb3NbaV07CisKKwkJCS8qIFRoZSAxMi1iaXQgc3ltYm9scyBhcmUgbWFwcGVkIHRvIGJ5dGVzIGhlcmUgKi8KKworCQkJaWYgKHAgPiAxMzc0KSB7CisJCQkJLyogb3V0IG9mIHJhbmdlICovCisJCQkJbiA9IC0xMzc0OworCQkJfSBlbHNlIGlmIChwID09IDApIHsKKwkJCQkvKiBoaWdoIGZvdXIgYml0cyBkbyBub3QgY29ycmVzcG9uZCB0byBkYXRhICovCisJCQkJaWYgKHBhdFtpXSA+IDB4ZmYpCisJCQkJCW4gPSAtMjA0ODsKKwkJCQllbHNlCisJCQkJCWJ1ZlswXSBePSBwYXRbaV07CisJCQl9IGVsc2UgaWYgKHAgPT0gMTM2NSkgeworCQkJCWJ1ZlsyMDQ3XSBePSBwYXRbaV0gPj4gNDsKKwkJCQlvb2JbMF0gXj0gcGF0W2ldIDw8IDQ7CisJCQl9IGVsc2UgaWYgKHAgPiAxMzY1KSB7CisJCQkJaWYgKChwICYgMSkgPT0gMSkgeworCQkJCQlvb2JbMypwLzIgLSAyMDQ4XSBePSBwYXRbaV0gPj4gNDsKKwkJCQkJb29iWzMqcC8yIC0gMjA0N10gXj0gcGF0W2ldIDw8IDQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJb29iWzMqcC8yIC0gMjA0OV0gXj0gcGF0W2ldID4+IDg7CisJCQkJCW9vYlszKnAvMiAtIDIwNDhdIF49IHBhdFtpXTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKChwICYgMSkgPT0gMSkgeworCQkJCWJ1ZlszKnAvMl0gXj0gcGF0W2ldID4+IDQ7CisJCQkJYnVmWzMqcC8yICsgMV0gXj0gcGF0W2ldIDw8IDQ7CisJCQl9IGVsc2UgeworCQkJCWJ1ZlszKnAvMiAtIDFdIF49IHBhdFtpXSA+PiA4OworCQkJCWJ1ZlszKnAvMl0gXj0gcGF0W2ldOworCQkJfQorCQl9CisKKwkJaWYgKG4gPCAwKSB7CiAJCQlkZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJGYWlsZWQgdG8gY29ycmVjdCBFQ0MgYXQgJTA4eFxuIiwKIAkJCQljYWZlX3JlYWRsKGNhZmUsIE5BTkRfQUREUjIpICogMjA0OCk7Ci0JCQlmb3IgKGk9MDsgaTwgMHg1YzsgaSs9NCkKKwkJCWZvciAoaSA9IDA7IGkgPCAweDVjOyBpICs9IDQpCiAJCQkJcHJpbnRrKCJSZWdpc3RlciAleDogJTA4eFxuIiwgaSwgcmVhZGwoY2FmZS0+bW1pbyArIGkpKTsKIAkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOwogCQl9IGVsc2UgewotCQkJZGV2X2RiZygmY2FmZS0+cGRldi0+ZGV2LCAiQ29ycmVjdGVkICVkIHN5bWJvbCBlcnJvcnNcbiIsIGkpOwotCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IGk7CisJCQlkZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJDb3JyZWN0ZWQgJWQgc3ltYm9sIGVycm9yc1xuIiwgbik7CisJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gbjsKIAkJfQogCX0KIAotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNiw3ICs0NjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGNhZmVfYmJ0X21haW5fZGVzY3JfMjA0OCA9IHsKIAkub3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUX0NSRUFURSB8IE5BTkRfQkJUX1dSSVRFCi0JCXwgTkFORF9CQlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJT04gfCBOQU5EX0JCVF9QRVJDSElQLAorCQl8IE5BTkRfQkJUXzJCSVQgfCBOQU5EX0JCVF9WRVJTSU9OLAogCS5vZmZzID0JMTQsCiAJLmxlbiA9IDQsCiAJLnZlcm9mZnMgPSAxOCwKQEAgLTQyNiw3ICs0NzQsNyBAQAogCiBzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGNhZmVfYmJ0X21pcnJvcl9kZXNjcl8yMDQ4ID0gewogCS5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfQ1JFQVRFIHwgTkFORF9CQlRfV1JJVEUKLQkJfCBOQU5EX0JCVF8yQklUIHwgTkFORF9CQlRfVkVSU0lPTiB8IE5BTkRfQkJUX1BFUkNISVAsCisJCXwgTkFORF9CQlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJT04sCiAJLm9mZnMgPQkxNCwKIAkubGVuID0gNCwKIAkudmVyb2ZmcyA9IDE4LApAQCAtNDQyLDcgKzQ5MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgY2FmZV9iYnRfbWFpbl9kZXNjcl81MTIgPSB7CiAJLm9wdGlvbnMgPSBOQU5EX0JCVF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF9DUkVBVEUgfCBOQU5EX0JCVF9XUklURQotCQl8IE5BTkRfQkJUXzJCSVQgfCBOQU5EX0JCVF9WRVJTSU9OIHwgTkFORF9CQlRfUEVSQ0hJUCwKKwkJfCBOQU5EX0JCVF8yQklUIHwgTkFORF9CQlRfVkVSU0lPTiwKIAkub2ZmcyA9CTE0LAogCS5sZW4gPSAxLAogCS52ZXJvZmZzID0gMTUsCkBAIC00NTIsNyArNTAwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBjYWZlX2JidF9taXJyb3JfZGVzY3JfNTEyID0gewogCS5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfQ1JFQVRFIHwgTkFORF9CQlRfV1JJVEUKLQkJfCBOQU5EX0JCVF8yQklUIHwgTkFORF9CQlRfVkVSU0lPTiB8IE5BTkRfQkJUX1BFUkNISVAsCisJCXwgTkFORF9CQlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJT04sCiAJLm9mZnMgPQkxNCwKIAkubGVuID0gMSwKIAkudmVyb2ZmcyA9IDE1LApAQCAtNTI1LDYgKzU3Myw0OCBAQAogCXJldHVybiAwOwogfQogCisvKiBGXzJbWF0vKFgqKjYrWCsxKSAgKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBfX2RldmluaXQgZ2Y2NF9tdWwodTggYSwgdTggYikKK3sKKwl1OCBjOworCXVuc2lnbmVkIGludCBpOworCisJYyA9IDA7CisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQlpZiAoYSAmIDEpCisJCQljIF49IGI7CisJCWEgPj49IDE7CisJCWIgPDw9IDE7CisJCWlmICgoYiAmIDB4NDApICE9IDApCisJCQliIF49IDB4NDM7CisJfQorCisJcmV0dXJuIGM7Cit9CisKKy8qIEZfNjRbWF0vKFgqKjIrWCtBKiotMSkgd2l0aCBBIHRoZSBnZW5lcmF0b3Igb2YgRl82NFtYXSAgKi8KK3N0YXRpYyB1MTYgX19kZXZpbml0IGdmNDA5Nl9tdWwodTE2IGEsIHUxNiBiKQoreworCXU4IGFoLCBhbCwgYmgsIGJsLCBjaCwgY2w7CisKKwlhaCA9IGEgPj4gNjsKKwlhbCA9IGEgJiAweDNmOworCWJoID0gYiA+PiA2OworCWJsID0gYiAmIDB4M2Y7CisKKwljaCA9IGdmNjRfbXVsKGFoIF4gYWwsIGJoIF4gYmwpIF4gZ2Y2NF9tdWwoYWwsIGJsKTsKKwljbCA9IGdmNjRfbXVsKGdmNjRfbXVsKGFoLCBiaCksIDB4MjEpIF4gZ2Y2NF9tdWwoYWwsIGJsKTsKKworCXJldHVybiAoY2ggPDwgNikgXiBjbDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgY2FmZV9tdWwoaW50IHgpCit7CisJaWYgKHggPT0gMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIGdmNDA5Nl9tdWwoeCwgMHhlMDEpOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjYWZlX25hbmRfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtNTY0LDYgKzY1NCwxMiBAQAogCX0KIAljYWZlLT5uYW5kLmJ1ZmZlcnMgPSAodm9pZCAqKWNhZmUtPmRtYWJ1ZiArIDIxMTI7CiAKKwljYWZlLT5ycyA9IGluaXRfcnNfbm9uX2Nhbm9uaWNhbCgxMiwgJmNhZmVfbXVsLCAwLCAxLCA4KTsKKwlpZiAoIWNhZmUtPnJzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2lvcjsKKwl9CisKIAljYWZlLT5uYW5kLmNtZGZ1bmMgPSBjYWZlX25hbmRfY21kZnVuYzsKIAljYWZlLT5uYW5kLmRldl9yZWFkeSA9IGNhZmVfZGV2aWNlX3JlYWR5OwogCWNhZmUtPm5hbmQucmVhZF9ieXRlID0gY2FmZV9yZWFkX2J5dGU7CkBAIC02NDYsNyArNzQyLDcgQEAKIAkJY2FmZV9yZWFkbChjYWZlLCBHTE9CQUxfQ1RSTCksIGNhZmVfcmVhZGwoY2FmZSwgR0xPQkFMX0lSUV9NQVNLKSk7CiAKIAkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAobmFuZF9zY2FuX2lkZW50KG10ZCwgMSkpIHsKKwlpZiAobmFuZF9zY2FuX2lkZW50KG10ZCwgMikpIHsKIAkJZXJyID0gLUVOWElPOwogCQlnb3RvIG91dF9pcnE7CiAJfQpAQCAtNzEzLDYgKzgwOSw3IEBACiAJY2FmZV93cml0ZWwoY2FmZSwgfjEgJiBjYWZlX3JlYWRsKGNhZmUsIEdMT0JBTF9JUlFfTUFTSyksIEdMT0JBTF9JUlFfTUFTSyk7CiAJZnJlZV9pcnEocGRldi0+aXJxLCBtdGQpOwogCW5hbmRfcmVsZWFzZShtdGQpOworCWZyZWVfcnMoY2FmZS0+cnMpOwogCXBjaV9pb3VubWFwKHBkZXYsIGNhZmUtPm1taW8pOwogCWRtYV9mcmVlX2NvaGVyZW50KCZjYWZlLT5wZGV2LT5kZXYsIDIxMTIsIGNhZmUtPmRtYWJ1ZiwgY2FmZS0+ZG1hYWRkcik7CiAJa2ZyZWUobXRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCmluZGV4IDA0ZGUzMTUuLjdlNjgyMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwpAQCAtMzAzLDI4ICszMDMsMjcgQEAKIAlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCXUxNiBiYWQ7CiAKKwlwYWdlID0gKGludCkob2ZzID4+IGNoaXAtPnBhZ2Vfc2hpZnQpICYgY2hpcC0+cGFnZW1hc2s7CisKIAlpZiAoZ2V0Y2hpcCkgewotCQlwYWdlID0gKGludCkob2ZzID4+IGNoaXAtPnBhZ2Vfc2hpZnQpOwogCQljaGlwbnIgPSAoaW50KShvZnMgPj4gY2hpcC0+Y2hpcF9zaGlmdCk7CiAKIAkJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfUkVBRElORyk7CiAKIAkJLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwogCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7Ci0JfSBlbHNlCi0JCXBhZ2UgPSAoaW50KShvZnMgPj4gY2hpcC0+cGFnZV9zaGlmdCk7CisJfQogCiAJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSB7CiAJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFET09CLCBjaGlwLT5iYWRibG9ja3BvcyAmIDB4RkUsCi0JCQkgICAgICBwYWdlICYgY2hpcC0+cGFnZW1hc2spOworCQkJICAgICAgcGFnZSk7CiAJCWJhZCA9IGNwdV90b19sZTE2KGNoaXAtPnJlYWRfd29yZChtdGQpKTsKIAkJaWYgKGNoaXAtPmJhZGJsb2NrcG9zICYgMHgxKQogCQkJYmFkID4+PSA4OwogCQlpZiAoKGJhZCAmIDB4RkYpICE9IDB4ZmYpCiAJCQlyZXMgPSAxOwogCX0gZWxzZSB7Ci0JCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFET09CLCBjaGlwLT5iYWRibG9ja3BvcywKLQkJCSAgICAgIHBhZ2UgJiBjaGlwLT5wYWdlbWFzayk7CisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFET09CLCBjaGlwLT5iYWRibG9ja3BvcywgcGFnZSk7CiAJCWlmIChjaGlwLT5yZWFkX2J5dGUobXRkKSAhPSAweGZmKQogCQkJcmVzID0gMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3BsYXRfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9wbGF0X25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDcyNWZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9wbGF0X25hbmQuYwpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIEdlbmVyaWMgTkFORCBkcml2ZXIKKyAqCisgKiBBdXRob3I6IFZpdGFseSBXb29sIDx2aXRhbHl3b29sQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworc3RydWN0IHBsYXRfbmFuZF9kYXRhIHsKKwlzdHJ1Y3QgbmFuZF9jaGlwCWNoaXA7CisJc3RydWN0IG10ZF9pbmZvCQltdGQ7CisJdm9pZCBfX2lvbWVtCQkqaW9fYmFzZTsKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlpbnQJCQlucl9wYXJ0czsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7CisjZW5kaWYKK307CisKKy8qCisgKiBQcm9iZSBmb3IgdGhlIE5BTkQgZGV2aWNlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBwbGF0X25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBwbGF0X25hbmRfZGF0YSAqZGF0YTsKKwlpbnQgcmVzID0gMDsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKGFuZCB6ZXJvIGl0KSAqLworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGxhdF9uYW5kX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGF0YS0+aW9fYmFzZSA9IGlvcmVtYXAocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCisJCQkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKKwlpZiAoZGF0YS0+aW9fYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWRhdGEtPmNoaXAucHJpdiA9ICZkYXRhOworCWRhdGEtPm10ZC5wcml2ID0gJmRhdGEtPmNoaXA7CisJZGF0YS0+bXRkLm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlkYXRhLT5jaGlwLklPX0FERFJfUiA9IGRhdGEtPmlvX2Jhc2U7CisJZGF0YS0+Y2hpcC5JT19BRERSX1cgPSBkYXRhLT5pb19iYXNlOworCWRhdGEtPmNoaXAuY21kX2N0cmwgPSBwZGF0YS0+Y3RybC5jbWRfY3RybDsKKwlkYXRhLT5jaGlwLmRldl9yZWFkeSA9IHBkYXRhLT5jdHJsLmRldl9yZWFkeTsKKwlkYXRhLT5jaGlwLnNlbGVjdF9jaGlwID0gcGRhdGEtPmN0cmwuc2VsZWN0X2NoaXA7CisJZGF0YS0+Y2hpcC5jaGlwX2RlbGF5ID0gcGRhdGEtPmNoaXAuY2hpcF9kZWxheTsKKwlkYXRhLT5jaGlwLm9wdGlvbnMgfD0gcGRhdGEtPmNoaXAub3B0aW9uczsKKworCWRhdGEtPmNoaXAuZWNjLmh3Y3RsID0gcGRhdGEtPmN0cmwuaHdjb250cm9sOworCWRhdGEtPmNoaXAuZWNjLmxheW91dCA9IHBkYXRhLT5jaGlwLmVjY2xheW91dDsKKwlkYXRhLT5jaGlwLmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOworCisJLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCisJaWYgKG5hbmRfc2NhbigmZGF0YS0+bXRkLCAxKSkgeworCQlyZXMgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCWlmIChwZGF0YS0+Y2hpcC5wYXJ0X3Byb2JlX3R5cGVzKSB7CisJCXJlcyA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKCZkYXRhLT5tdGQsCisJCQkJCXBkYXRhLT5jaGlwLnBhcnRfcHJvYmVfdHlwZXMsCisJCQkJCSZkYXRhLT5wYXJ0cywgMCk7CisJCWlmIChyZXMgPiAwKSB7CisJCQlhZGRfbXRkX3BhcnRpdGlvbnMoJmRhdGEtPm10ZCwgZGF0YS0+cGFydHMsIHJlcyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAocGRhdGEtPmNoaXAucGFydGl0aW9ucykgeworCQlkYXRhLT5wYXJ0cyA9IHBkYXRhLT5jaGlwLnBhcnRpdGlvbnM7CisJCXJlcyA9IGFkZF9tdGRfcGFydGl0aW9ucygmZGF0YS0+bXRkLCBkYXRhLT5wYXJ0cywKKwkJCXBkYXRhLT5jaGlwLm5yX3BhcnRpdGlvbnMpOworCX0gZWxzZQorI2VuZGlmCisJcmVzID0gYWRkX210ZF9kZXZpY2UoJmRhdGEtPm10ZCk7CisKKwlpZiAoIXJlcykKKwkJcmV0dXJuIHJlczsKKworCW5hbmRfcmVsZWFzZSgmZGF0YS0+bXRkKTsKK291dDoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpb3VubWFwKGRhdGEtPmlvX2Jhc2UpOworCWtmcmVlKGRhdGEpOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBSZW1vdmUgYSBOQU5EIGRldmljZS4KKyAqLworc3RhdGljIGludCBfX2RldmV4aXQgcGxhdF9uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwbGF0X25hbmRfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwluYW5kX3JlbGVhc2UoJmRhdGEtPm10ZCk7CisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJaWYgKGRhdGEtPnBhcnRzICYmIGRhdGEtPnBhcnRzICE9IHBkYXRhLT5jaGlwLnBhcnRpdGlvbnMpCisJCWtmcmVlKGRhdGEtPnBhcnRzKTsKKyNlbmRpZgorCWlvdW5tYXAoZGF0YS0+aW9fYmFzZSk7CisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGxhdF9uYW5kX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gcGxhdF9uYW5kX3Byb2JlLAorCS5yZW1vdmUJCT0gcGxhdF9uYW5kX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiZ2VuX25hbmQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdF9uYW5kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwbGF0X25hbmRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBsYXRfbmFuZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBsYXRfbmFuZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwbGF0X25hbmRfaW5pdCk7Cittb2R1bGVfZXhpdChwbGF0X25hbmRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlZpdGFseSBXb29sIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNpbXBsZSBnZW5lcmljIE5BTkQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3BwY2hhbWVsZW9uZXZiLmMgYi9kcml2ZXJzL210ZC9uYW5kL3BwY2hhbWVsZW9uZXZiLmMKaW5kZXggZWI3ZDRkNC4uMDgyMDczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9wcGNoYW1lbGVvbmV2Yi5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcHBjaGFtZWxlb25ldmIuYwpAQCAtODEsNyArODEsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9faGlbXSA9IHsKICAgICAgIHsgLm5hbWUgPSAiUFBDaGFtZWxlb24gSEkgTmFuZCBGbGFzaCIsCi0Jb2Zmc2V0ID0gMCwKKwkub2Zmc2V0ID0gMCwKIAkuc2l6ZSA9IDEyOCAqIDEwMjQgKiAxMDI0CiAgICAgICB9CiB9OwpAQCAtNDI0LDkgKzQyNCw5IEBACiAKIAkvKiBSZWxlYXNlIGlvbWFwcyAqLwogCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAmcHBjaGFtZWxlb25fbXRkWzFdOwotCWlvdW5tYXAoKHZvaWQgKikgdGhpcy0+SU9fQUREUl9SOworCWlvdW5tYXAoKHZvaWQgKikgdGhpcy0+SU9fQUREUl9SKTsKIAl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgJnBwY2hhbWVsZW9uZXZiX210ZFsxXTsKLQlpb3VubWFwKCh2b2lkICopIHRoaXMtPklPX0FERFJfUjsKKwlpb3VubWFwKCh2b2lkICopIHRoaXMtPklPX0FERFJfUik7CiAKIAkvKiBGcmVlIHRoZSBNVEQgZGV2aWNlIHN0cnVjdHVyZSAqLwogCWtmcmVlIChwcGNoYW1lbGVvbl9tdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKaW5kZXggMDAwNzk0Yy4uMDUzN2ZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCkBAIC0yMTkyLDcgKzIxOTIsNyBAQAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqCiAgKiBPbmVOQU5EIGRldGVjdGlvbiBtZXRob2Q6Ci0gKiAgIENvbXBhcmUgdGhlIHRoZSB2YWx1ZXMgZnJvbSBjb21tYW5kIHdpdGggb25lcyBmcm9tIHJlZ2lzdGVyCisgKiAgIENvbXBhcmUgdGhlIHZhbHVlcyBmcm9tIGNvbW1hbmQgd2l0aCBvbmVzIGZyb20gcmVnaXN0ZXIKICAqLwogc3RhdGljIGludCBvbmVuYW5kX3Byb2JlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2ViYS5jIGIvZHJpdmVycy9tdGQvdWJpL2ViYS5jCmluZGV4IDNkYmE1NzMuLjc0MDAyOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9lYmEuYworKysgYi9kcml2ZXJzL210ZC91YmkvZWJhLmMKQEAgLTk0MCw5ICs5NDAsNiBAQAogewogCXN0cnVjdCBsdHJlZV9lbnRyeSAqbGUgPSBvYmo7CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpCi0JCXJldHVybjsKLQogCWxlLT51c2VycyA9IDA7CiAJaW5pdF9yd3NlbSgmbGUtPm11dGV4KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA5LmMgYi9kcml2ZXJzL25ldC8zYzUwOS5jCmluZGV4IDk1ODhkYTMuLjEyN2Y2MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA5LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDkuYwpAQCAtOTUsOCArOTUsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotc3RhdGljIGNoYXIgdmVyc2lvbkFbXSBfX2luaXRkYXRhID0gRFJWX05BTUUgIi5jOiIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgYmVja2VyQHNjeWxkLmNvbVxuIjsKLXN0YXRpYyBjaGFyIHZlcnNpb25CW10gX19pbml0ZGF0YSA9ICJodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrLzNjNTA5Lmh0bWxcbiI7CitzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9IERSVl9OQU1FICIuYzoiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiIGJlY2tlckBzY3lsZC5jb21cbiI7CiAKICNpZiBkZWZpbmVkKENPTkZJR19QTSkgJiYgKGRlZmluZWQoQ09ORklHX01DQSkgfHwgZGVmaW5lZChDT05GSUdfRUlTQSkpCiAjZGVmaW5lIEVMM19TVVNQRU5ECkBAIC0zNjAsNyArMzU5LDcgQEAKIAlwcmludGsoIiwgSVJRICVkLlxuIiwgZGV2LT5pcnEpOwogCiAJaWYgKGVsM19kZWJ1ZyA+IDApCi0JCXByaW50ayhLRVJOX0lORk8gIiVzIiBLRVJOX0lORk8gIiVzIiwgdmVyc2lvbkEsIHZlcnNpb25CKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKIAlyZXR1cm4gMDsKIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggODA5MjRmNy4uZjI2Y2EzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1EUlZfTkFNRSAiOiBEb25hbGQgQmVja2VyIGFuZCBvdGhlcnMuIHd3dy5zY3lsZC5jb20vbmV0d29yay92b3J0ZXguaHRtbFxuIjsKK0RSVl9OQU1FICI6IERvbmFsZCBCZWNrZXIgYW5kIG90aGVycy5cbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIjNDb20gM2M1OXgvM2M5eHggZXRoZXJuZXQgZHJpdmVyICIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOWNwLmMgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwppbmRleCBlOGM5ZjI3OC4uYTgwNDk2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOWNwLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKQEAgLTQzNSwyMCArNDM1LDEyIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGZsYWdzKTsKIAljcC0+dmxncnAgPSBncnA7Ci0JY3AtPmNwY21kIHw9IFJ4Vmxhbk9uOwotCWNwdzE2KENwQ21kLCBjcC0+Y3BjbWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7Ci19CisJaWYgKGdycCkKKwkJY3AtPmNwY21kIHw9IFJ4Vmxhbk9uOworCWVsc2UKKwkJY3AtPmNwY21kICY9IH5SeFZsYW5PbjsKIAotc3RhdGljIHZvaWQgY3Bfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB2aWQpCi17Ci0Jc3RydWN0IGNwX3ByaXZhdGUgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7Ci0JY3AtPmNwY21kICY9IH5SeFZsYW5PbjsKIAljcHcxNihDcENtZCwgY3AtPmNwY21kKTsKLQl2bGFuX2dyb3VwX3NldF9kZXZpY2UoY3AtPnZsZ3JwLCB2aWQsIE5VTEwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CiB9CiAjZW5kaWYgLyogQ1BfVkxBTl9UQUdfVVNFRCAqLwpAQCAtMTk0NCw3ICsxOTM2LDYgQEAKICNpZiBDUF9WTEFOX1RBR19VU0VECiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CiAJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gY3Bfdmxhbl9yeF9yZWdpc3RlcjsKLQlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBjcF92bGFuX3J4X2tpbGxfdmlkOwogI2VuZGlmCiAKIAlpZiAocGNpX3VzaW5nX2RhYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IDI3OWVjNjIuLjdkNTdmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMTEwNCw3ICsxMTA0LDcgQEAKIAogY29uZmlnIE5FMjAwMAogCXRyaXN0YXRlICJORTIwMDAvTkUxMDAwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfSVNBIHx8IChRNDAgJiYgbSkgfHwgTTMyUgorCWRlcGVuZHMgb24gTkVUX0lTQSB8fCAoUTQwICYmIG0pIHx8IE0zMlIgfHwgVE9TSElCQV9SQlRYNDkyNyB8fCBUT1NISUJBX1JCVFg0OTM4CiAJc2VsZWN0IENSQzMyCiAJLS0taGVscC0tLQogCSAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBvZiB0aGlzIHR5cGUsIHNheSBZIGFuZCByZWFkCkBAIC0xODk4LDggKzE4OTgsMTIgQEAKICMJR2lnYWJpdCBFdGhlcm5ldAogIwogCi1tZW51ICJFdGhlcm5ldCAoMTAwMCBNYml0KSIKK21lbnVjb25maWcgTkVUREVWXzEwMDAKKwlib29sICJFdGhlcm5ldCAoMTAwMCBNYml0KSIKIAlkZXBlbmRzIG9uICFVTUwKKwlkZWZhdWx0IHkKKworaWYgTkVUREVWXzEwMDAKIAogY29uZmlnIEFDRU5JQwogCXRyaXN0YXRlICJBbHRlb24gQWNlTklDLzNDb20gM0M5ODUvTmV0R2VhciBHQTYyMCBHaWdhYml0IHN1cHBvcnQiCkBAIC0yMjE0LDcgKzIyMTgsNyBAQAogCiBjb25maWcgVklBX1ZFTE9DSVRZCiAJdHJpc3RhdGUgIlZJQSBWZWxvY2l0eSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX1BDSSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFBDSQogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBDUkNfQ0NJVFQKIAlzZWxlY3QgTUlJCkBAIC0yMjc2LDcgKzIyODAsNyBAQAogY29uZmlnIFVDQ19HRVRICiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBRRSBHaWdhYml0IEV0aGVybmV0IgogCWRlcGVuZHMgb24gUVVJQ0NfRU5HSU5FCi0Jc2VsZWN0IFVDQ19GQVNUCisJc2VsZWN0IFBIWUxJQgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHaWdhYml0IEV0aGVybmV0IG1vZGUgb2YgdGhlIFFVSUNDIEVuZ2luZSwKIAkgIHdoaWNoIGlzIGF2YWlsYWJsZSBvbiBzb21lIEZyZWVzY2FsZSBTT0NzLgpAQCAtMjI5OSw3ICsyMzAzLDcgQEAKIAogY29uZmlnIE1WNjQzWFhfRVRICiAJdHJpc3RhdGUgIk1WLTY0M1hYIEV0aGVybmV0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNT01FTkNPX09DRUxPVF9DIHx8IE1PTUVOQ09fSkFHVUFSX0FUWCB8fCBNVjY0MzYwIHx8IE1PTUVOQ09fT0NFTE9UXzMgfHwgKFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyKQorCWRlcGVuZHMgb24gTU9NRU5DT19PQ0VMT1RfQyB8fCBNT01FTkNPX0pBR1VBUl9BVFggfHwgTVY2NDM2MCB8fCBNVjY0WDYwIHx8IE1PTUVOQ09fT0NFTE9UXzMgfHwgKFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyKQogCXNlbGVjdCBNSUkKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBFdGhlcm5ldCBvbiB0aGUgTWFydmVsbCBNVjY0M1hYCkBAIC0yMzI2LDE0ICsyMzMwLDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgVGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYXRsMS4KIAotZW5kbWVudQorZW5kaWYgIyBORVRERVZfMTAwMAogCiAjCiAjCTEwIEdpZ2FiaXQgRXRoZXJuZXQKICMKIAotbWVudSAiRXRoZXJuZXQgKDEwMDAwIE1iaXQpIgorbWVudWNvbmZpZyBORVRERVZfMTAwMDAKKwlib29sICJFdGhlcm5ldCAoMTAwMDAgTWJpdCkiCiAJZGVwZW5kcyBvbiAhVU1MCisJZGVmYXVsdCB5CisKK2lmIE5FVERFVl8xMDAwMAogCiBjb25maWcgQ0hFTFNJT19UMQogICAgICAgICB0cmlzdGF0ZSAiQ2hlbHNpbyAxMEdiIEV0aGVybmV0IHN1cHBvcnQiCkBAIC0yNDg4LDE2ICsyNDk2LDM0IEBACiBjb25maWcgUEFTRU1JX01BQwogCXRyaXN0YXRlICJQQSBTZW1pIDEvMTBHYml0IE1BQyIKIAlkZXBlbmRzIG9uIFBQQzY0ICYmIFBDSQorCXNlbGVjdCBQSFlMSUIKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgb24tY2hpcCAxLzEwR2JpdCBFdGhlcm5ldCBjb250cm9sbGVyIG9uCiAJICBQQSBTZW1pJ3MgUFdSZmljaWVudCBsaW5lIG9mIGNoaXBzLgogCi1lbmRtZW51Citjb25maWcgTUxYNF9DT1JFCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFBDSQorCWRlZmF1bHQgbgorCitjb25maWcgTUxYNF9ERUJVRworCWJvb2wgIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dCIgaWYgKE1MWDRfQ09SRSAmJiBFTUJFRERFRCkKKwlkZXBlbmRzIG9uIE1MWDRfQ09SRQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIGNhdXNlcyBkZWJ1Z2dpbmcgY29kZSB0byBiZSBjb21waWxlZCBpbnRvIHRoZQorCSAgbWx4NF9jb3JlIGRyaXZlci4gIFRoZSBvdXRwdXQgY2FuIGJlIHR1cm5lZCBvbiB2aWEgdGhlCisJICBkZWJ1Z19sZXZlbCBtb2R1bGUgcGFyYW1ldGVyICh3aGljaCBjYW4gYWxzbyBiZSBzZXQgYWZ0ZXIKKwkgIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHRocm91Z2ggc3lzZnMpLgorCitlbmRpZiAjIE5FVERFVl8xMDAwMAogCiBzb3VyY2UgImRyaXZlcnMvbmV0L3Rva2VucmluZy9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9uZXQvdXNiL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9uZXQvcGNtY2lhL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2FuL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IDU5YzA0NTkuLmE3N2FmZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0xOTcsNiArMTk3LDcgQEAKIG9iai0kKENPTkZJR19ETTkwMDApICs9IGRtOTAwMC5vCiBvYmotJChDT05GSUdfRkVDXzhYWCkgKz0gZmVjXzh4eC8KIG9iai0kKENPTkZJR19QQVNFTUlfTUFDKSArPSBwYXNlbWlfbWFjLm8KK29iai0kKENPTkZJR19NTFg0X0NPUkUpICs9IG1seDQvCiAKIG9iai0kKENPTkZJR19NQUNCKSArPSBtYWNiLm8KIApAQCAtMjA2LDYgKzIwNywxNCBAQAogb2JqLSQoQ09ORklHX1dBTikgKz0gd2FuLwogb2JqLSQoQ09ORklHX0FSQ05FVCkgKz0gYXJjbmV0Lwogb2JqLSQoQ09ORklHX05FVF9QQ01DSUEpICs9IHBjbWNpYS8KKworb2JqLSQoQ09ORklHX1VTQl9DQVRDKSAgICAgICAgICArPSB1c2IvCitvYmotJChDT05GSUdfVVNCX0tBV0VUSCkgICAgICAgICs9IHVzYi8KK29iai0kKENPTkZJR19VU0JfUEVHQVNVUykgICAgICAgKz0gdXNiLworb2JqLSQoQ09ORklHX1VTQl9SVEw4MTUwKSAgICAgICArPSB1c2IvCitvYmotJChDT05GSUdfVVNCX1VTQk5FVCkgICAgICAgICs9IHVzYi8KK29iai0kKENPTkZJR19VU0JfWkQxMjAxKSAgICAgICAgKz0gdXNiLworCiBvYmoteSArPSB3aXJlbGVzcy8KIG9iai0kKENPTkZJR19ORVRfVFVMSVApICs9IHR1bGlwLwogb2JqLSQoQ09ORklHX0hBTVJBRElPKSArPSBoYW1yYWRpby8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKaW5kZXggNzEyMmI3Yi4uMDQzODJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYWNlbmljLmMKKysrIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKQEAgLTQ4MCwxMiArNDgwLDEwIEBACiAjaWYgQUNFTklDX0RPX1ZMQU4KIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKIAlkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBhY2Vfdmxhbl9yeF9yZWdpc3RlcjsKLQlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBhY2Vfdmxhbl9yeF9raWxsX3ZpZDsKICNlbmRpZgotCWlmICgxKSB7Ci0JCWRldi0+dHhfdGltZW91dCA9ICZhY2Vfd2F0Y2hkb2c7Ci0JCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwotCX0KKworCWRldi0+dHhfdGltZW91dCA9ICZhY2Vfd2F0Y2hkb2c7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7CiAKIAlkZXYtPm9wZW4gPSAmYWNlX29wZW47CiAJZGV2LT5zdG9wID0gJmFjZV9jbG9zZTsKQEAgLTIyODMsMTkgKzIyODEsNiBAQAogCWFjZV91bm1hc2tfaXJxKGRldik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQotCi0KLXN0YXRpYyB2b2lkIGFjZV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKLXsKLQlzdHJ1Y3QgYWNlX3ByaXZhdGUgKmFwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWFjZV9tYXNrX2lycShkZXYpOwotCXZsYW5fZ3JvdXBfc2V0X2RldmljZShhcC0+dmxncnAsIHZpZCwgTlVMTCk7Ci0JYWNlX3VubWFza19pcnEoZGV2KTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19CiAjZW5kaWYgLyogQUNFTklDX0RPX1ZMQU4gKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuaCBiL2RyaXZlcnMvbmV0L2FjZW5pYy5oCmluZGV4IDhjYTg1MzQuLjYwZWQxODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5oCkBAIC03ODcsNyArNzg3LDYgQEAKIHN0YXRpYyBpbnQgcmVhZF9lZXByb21fYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAjaWYgQUNFTklDX0RPX1ZMQU4KIHN0YXRpYyB2b2lkIGFjZV92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApOwotc3RhdGljIHZvaWQgYWNlX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKTsKICNlbmRpZgogCiAjZW5kaWYgLyogX0FDRU5JQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW1kODExMWUuYyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKaW5kZXggNjc1ZmU5MS4uYTYxYjJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYW1kODExMWUuYworKysgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCkBAIC0xNTUsNyArMTU1LDcgQEAKICovCiBzdGF0aWMgaW50IGFtZDgxMTFlX3dyaXRlX3BoeShzdHJ1Y3QgYW1kODExMWVfcHJpdiogbHAsaW50IHBoeV9pZCwgaW50IHJlZywgdTMyIHZhbCkKIHsKLQl1bnNpZ25lZCBpbnQgcmVwZWF0ID0gUkVQRUFUX0NOVAorCXVuc2lnbmVkIGludCByZXBlYXQgPSBSRVBFQVRfQ05UOwogCXZvaWQgX19pb21lbSAqbW1pbyA9IGxwLT5tbWlvOwogCXVuc2lnbmVkIGludCByZWdfdmFsOwogCkBAIC0xNzI4LDE1ICsxNzI4LDggQEAKIAlscC0+dmxncnAgPSBncnA7CiAJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CiB9Ci0KLXN0YXRpYyB2b2lkIGFtZDgxMTFlX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQotewotCXN0cnVjdCBhbWQ4MTExZV9wcml2ICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwotCXZsYW5fZ3JvdXBfc2V0X2RldmljZShscC0+dmxncnAsIHZpZCwgTlVMTCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7Ci19CiAjZW5kaWYKKwogc3RhdGljIGludCBhbWQ4MTExZV9lbmFibGVfbWFnaWNwa3Qoc3RydWN0IGFtZDgxMTFlX3ByaXYqIGxwKQogewogCXdyaXRlbCggVkFMMXxNUFBMQkEsIGxwLT5tbWlvICsgQ01EMyk7CkBAIC0xOTk2LDcgKzE5ODksNiBAQAogI2lmIEFNRDgxMTFFX1ZMQU5fVEFHX1VTRUQKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCA7CiAJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID1hbWQ4MTExZV92bGFuX3J4X3JlZ2lzdGVyOwotCWRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IGFtZDgxMTFlX3ZsYW5fcnhfa2lsbF92aWQ7CiAjZW5kaWYKIAogCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTIwNDksNyArMjA0MSw2IEBACiAjaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9YW1kODExMWVfdmxhbl9yeF9yZWdpc3RlcjsKLQlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBhbWQ4MTExZV92bGFuX3J4X2tpbGxfdmlkOwogI2VuZGlmCiAJLyogUHJvYmUgdGhlIGV4dGVybmFsIFBIWSAqLwogCWFtZDgxMTFlX3Byb2JlX2V4dF9waHkoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmggYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5oCmluZGV4IDIwMDc1MTAuLmU2NTA4MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmgKKysrIGIvZHJpdmVycy9uZXQvYW1kODExMWUuaApAQCAtNjE1LDcgKzYxNSw3IEBACiAjZGVmaW5lIFNTVEFURSAgMgogCiAvKiBBc3N1bWUgY29udG9sbGVyIGdldHMgZGF0YSAxMCB0aW1lcyB0aGUgbWF4aW11bSBwcm9jZXNzaW5nIHRpbWUgKi8KLSNkZWZpbmUgIFJFUEVBVF9DTlQJCQkxMDsKKyNkZWZpbmUgIFJFUEVBVF9DTlQJCQkxMAogCiAvKiBhbWQ4MTExZSBkZWNyaXB0b3IgZmxhZyBkZWZpbml0aW9ucyAqLwogdHlwZWRlZiBlbnVtIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvYXJjbmV0L0tjb25maWcKaW5kZXggNzI4NGNjYS4uNDAzMDI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L0tjb25maWcKQEAgLTIsMTAgKzIsOCBAQAogIyBBcmNuZXQgY29uZmlndXJhdGlvbgogIwogCi1tZW51ICJBUkNuZXQgZGV2aWNlcyIKK21lbnVjb25maWcgQVJDTkVUCiAJZGVwZW5kcyBvbiBORVRERVZJQ0VTICYmIChJU0EgfHwgUENJKQotCi1jb25maWcgQVJDTkVUCiAJdHJpc3RhdGUgIkFSQ25ldCBzdXBwb3J0IgogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSBoYXZlIGEgbmV0d29yayBjYXJkIG9mIHRoaXMgdHlwZSwgc2F5IFkgYW5kIGNoZWNrIG91dCB0aGUKQEAgLTI1LDkgKzIzLDEwIEBACiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0LW1vZHVsZXMudHh0Pi4gIFRoZSBtb2R1bGUgd2lsbAogCSAgYmUgY2FsbGVkIGFyY25ldC4KIAoraWYgQVJDTkVUCisKIGNvbmZpZyBBUkNORVRfMTIwMQogCXRyaXN0YXRlICJFbmFibGUgc3RhbmRhcmQgQVJDTmV0IHBhY2tldCBmb3JtYXQgKFJGQyAxMjAxKSIKLQlkZXBlbmRzIG9uIEFSQ05FVAogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgUkZDMTIwMSB3aXRoIHlvdXIgQVJDbmV0IGNhcmQgdmlhIHRoZSB2aXJ0dWFsCiAJICBhcmMwIGRldmljZS4gIFlvdSBuZWVkIHRvIHNheSBZIGhlcmUgdG8gY29tbXVuaWNhdGUgd2l0aApAQCAtMzgsNyArMzcsNiBAQAogCiBjb25maWcgQVJDTkVUXzEwNTEKIAl0cmlzdGF0ZSAiRW5hYmxlIG9sZCBBUkNOZXQgcGFja2V0IGZvcm1hdCAoUkZDIDEwNTEpIgotCWRlcGVuZHMgb24gQVJDTkVUCiAJLS0taGVscC0tLQogCSAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSBSRkMxMDUxIHdpdGggeW91ciBBUkNuZXQgY2FyZCB2aWEgdGhlIHZpcnR1YWwKIAkgIGFyYzBzIGRldmljZS4gWW91IG9ubHkgbmVlZCBhcmMwcyBpZiB5b3Ugd2FudCB0byB0YWxrIHRvIEFSQ25ldApAQCAtNTMsNyArNTEsNiBAQAogCiBjb25maWcgQVJDTkVUX1JBVwogCXRyaXN0YXRlICJFbmFibGUgcmF3IG1vZGUgcGFja2V0IGludGVyZmFjZSIKLQlkZXBlbmRzIG9uIEFSQ05FVAogCWhlbHAKIAkgIEFSQ25ldCAicmF3IG1vZGUiIHBhY2tldCBlbmNhcHN1bGF0aW9uLCBubyBzb2Z0IGhlYWRlcnMuICBVbmxpa2VseQogCSAgdG8gd29yayB1bmxlc3MgdGFsa2luZyB0byBhIGNvcHkgb2YgdGhlIHNhbWUgTGludXggYXJjbmV0IGRyaXZlciwKQEAgLTYxLDcgKzU4LDYgQEAKIAogY29uZmlnIEFSQ05FVF9DQVAKIAl0cmlzdGF0ZSAiRW5hYmxlIENBUCBtb2RlIHBhY2tldCBpbnRlcmZhY2UiCi0JZGVwZW5kcyBvbiBBUkNORVQKIAloZWxwCiAJICBBUkNuZXQgImNhcCBtb2RlIiBwYWNrZXQgZW5jYXBzdWxhdGlvbi4gVXNlZCB0byBnZXQgdGhlIGhhcmR3YXJlCiAgICAgICAgICAgYWNrbm93bGVkZ2UgYmFjayB0byB1c2Vyc3BhY2UuIEFmdGVyIHRoZSBpbml0aWFsIHByb3RvY29sIGJ5dGUgZXZlcnkKQEAgLTgwLDcgKzc2LDYgQEAKIAogY29uZmlnIEFSQ05FVF9DT005MHh4CiAJdHJpc3RhdGUgIkFSQ25ldCBDT005MHh4IChub3JtYWwpIGNoaXBzZXQgZHJpdmVyIgotCWRlcGVuZHMgb24gQVJDTkVUCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgY2hpcHNldCBkcml2ZXIgZm9yIHRoZSBzdGFuZGFyZCBDT005MHh4IGNhcmRzLiBJZiB5b3UKIAkgIGhhdmUgYWx3YXlzIHVzZWQgdGhlIG9sZCBBUkNuZXQgZHJpdmVyIHdpdGhvdXQga25vd2luZyB3aGF0IHR5cGUgb2YKQEAgLTkyLDcgKzg3LDYgQEAKIAogY29uZmlnIEFSQ05FVF9DT005MHh4SU8KIAl0cmlzdGF0ZSAiQVJDbmV0IENPTTkweHggKElPIG1hcHBlZCkgY2hpcHNldCBkcml2ZXIiCi0JZGVwZW5kcyBvbiBBUkNORVQKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHRoZSBjaGlwc2V0IGRyaXZlciBmb3IgdGhlIENPTTkweHggY2FyZHMsIHVzaW5nIHRoZW0gaW4KIAkgIElPLW1hcHBlZCBtb2RlIGluc3RlYWQgb2YgbWVtb3J5LW1hcHBlZCBtb2RlLiBUaGlzIGlzIHNsb3dlciB0aGFuCkBAIC0xMDUsNyArOTksNiBAQAogCiBjb25maWcgQVJDTkVUX1JJTV9JCiAJdHJpc3RhdGUgIkFSQ25ldCBDT005MHh4IChSSU0gSSkgY2hpcHNldCBkcml2ZXIiCi0JZGVwZW5kcyBvbiBBUkNORVQKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHlldCBhbm90aGVyIGNoaXBzZXQgZHJpdmVyIGZvciB0aGUgQ09NOTB4eCBjYXJkcywgYnV0IHRoaXMKIAkgIHRpbWUgb25seSB1c2luZyBtZW1vcnktbWFwcGVkIG1vZGUsIGFuZCBubyBJTyBwb3J0cyBhdCBhbGwuIFRoaXMKQEAgLTExOCw3ICsxMTEsNiBAQAogCiBjb25maWcgQVJDTkVUX0NPTTIwMDIwCiAJdHJpc3RhdGUgIkFSQ25ldCBDT00yMDAyMCBjaGlwc2V0IGRyaXZlciIKLQlkZXBlbmRzIG9uIEFSQ05FVAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIG5ldyBDT00yMDAyMCBjaGlwc2V0LiBJdCBzdXBwb3J0cyBzdWNoCiAJICB0aGluZ3MgYXMgcHJvbWlzY3VvdXMgbW9kZSwgc28gcGFja2V0IHNuaWZmaW5nIGlzIHBvc3NpYmxlLCBhbmQKQEAgLTEzNiw1ICsxMjgsNCBAQAogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBDT00yMDAyMCBvbiBQQ0kiCiAJZGVwZW5kcyBvbiBBUkNORVRfQ09NMjAwMjAgJiYgUENJCiAKLWVuZG1lbnUKLQorZW5kaWYgIyBBUkNORVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMgYi9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jCmluZGV4IDE1MmZhN2EuLmVmMmNjODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYwpAQCAtMjI1LDYgKzIyNSwxNiBAQAogCQlpZiAoIShwaHkgJiAoKDEgPDwgMikgfCAxKSkpCiAJCQlnb3RvIGRvbmU7CiAJfQorCWVsc2UgaWYgKGxwLT5waHlfdHlwZSA9PSBNSUlfVDc4UTIxeDNfSUQpIHsJCQkvKiBhY2sgaW50ZXJydXB0IGluIFRlcmlkaWFuIFBIWSAqLworCQlyZWFkX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9UNzhRMjFJTlRfUkVHLCAmcGh5KTsKKwkJaWYgKCEocGh5ICYgKCgxIDw8IDIpIHwgMSkpKQorCQkJZ290byBkb25lOworCX0KKwllbHNlIGlmIChscC0+cGh5X3R5cGUgPT0gTUlJX0RQODM4NDhfSUQpIHsKKwkJcmVhZF9waHkobHAtPnBoeV9hZGRyZXNzLCBNSUlfRFBQSFlTVFNfUkVHLCAmcGh5KTsJLyogYWNrIGludGVycnVwdCBpbiBEUDgzODQ4IFBIWSAqLworCQlpZiAoIShwaHkgJiAoMSA8PCA3KSkpCisJCQlnb3RvIGRvbmU7CisJfQogCiAJdXBkYXRlX2xpbmtzcGVlZChkZXYsIDApOwogCkBAIC0yODAsNiArMjkwLDE5IEBACiAJCWRzaW50ciA9ICgxIDw8IDEwKSB8ICggMSA8PCA4KTsKIAkJd3JpdGVfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX1RQSVNUQVRVUywgZHNpbnRyKTsKIAl9CisJZWxzZSBpZiAobHAtPnBoeV90eXBlID09IE1JSV9UNzhRMjF4M19JRCkgewkvKiBmb3IgVGVyaWRpYW4gUEhZICovCisJCXJlYWRfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX1Q3OFEyMUlOVF9SRUcsICZkc2ludHIpOworCQlkc2ludHIgPSBkc2ludHIgfCAweDUwMDsJCS8qIHNldCBiaXRzIDgsIDEwICovCisJCXdyaXRlX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9UNzhRMjFJTlRfUkVHLCBkc2ludHIpOworCX0KKwllbHNlIGlmIChscC0+cGh5X3R5cGUgPT0gTUlJX0RQODM4NDhfSUQpIHsJLyogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBEUDgzODQ4IFBIWSAqLworCQlyZWFkX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9EUE1JU1JfUkVHLCAmZHNpbnRyKTsKKwkJZHNpbnRyID0gZHNpbnRyIHwgMHgzYzsJCQkvKiBzZXQgYml0cyAyLi41ICovCisJCXdyaXRlX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9EUE1JU1JfUkVHLCBkc2ludHIpOworCQlyZWFkX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9EUE1JQ1JfUkVHLCAmZHNpbnRyKTsKKwkJZHNpbnRyID0gZHNpbnRyIHwgMHgzOwkJCS8qIHNldCBiaXRzIDAsMSAqLworCQl3cml0ZV9waHkobHAtPnBoeV9hZGRyZXNzLCBNSUlfRFBNSUNSX1JFRywgZHNpbnRyKTsKKwl9CiAKIAlkaXNhYmxlX21kaSgpOwogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwpAQCAtMzIzLDYgKzM0NiwxOSBAQAogCQlkc2ludHIgPSB+KCgxIDw8IDEwKSB8ICgxIDw8IDgpKTsKIAkJd3JpdGVfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX1RQSVNUQVRVUywgZHNpbnRyKTsKIAl9CisJZWxzZSBpZiAobHAtPnBoeV90eXBlID09IE1JSV9UNzhRMjF4M19JRCkgewkvKiBmb3IgVGVyaWRpYW4gUEhZICovCisJCXJlYWRfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX1Q3OFEyMUlOVF9SRUcsICZkc2ludHIpOworCQlkc2ludHIgPSBkc2ludHIgJiB+MHg1MDA7CQkJLyogY2xlYXIgYml0cyA4LCAxMCAqLworCQl3cml0ZV9waHkobHAtPnBoeV9hZGRyZXNzLCBNSUlfVDc4UTIxSU5UX1JFRywgZHNpbnRyKTsKKwl9CisJZWxzZSBpZiAobHAtPnBoeV90eXBlID09IE1JSV9EUDgzODQ4X0lEKSB7CS8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgRFA4Mzg0OCBQSFkgKi8KKwkJcmVhZF9waHkobHAtPnBoeV9hZGRyZXNzLCBNSUlfRFBNSUNSX1JFRywgJmRzaW50cik7CisJCWRzaW50ciA9IGRzaW50ciAmIH4weDM7CQkJCS8qIGNsZWFyIGJpdHMgMCwgMSAqLworCQl3cml0ZV9waHkobHAtPnBoeV9hZGRyZXNzLCBNSUlfRFBNSUNSX1JFRywgZHNpbnRyKTsKKwkJcmVhZF9waHkobHAtPnBoeV9hZGRyZXNzLCBNSUlfRFBNSVNSX1JFRywgJmRzaW50cik7CisJCWRzaW50ciA9IGRzaW50ciAmIH4weDNjOwkJCS8qIGNsZWFyIGJpdHMgMi4uNSAqLworCQl3cml0ZV9waHkobHAtPnBoeV9hZGRyZXNzLCBNSUlfRFBNSVNSX1JFRywgZHNpbnRyKTsKKwl9CiAKIAlkaXNhYmxlX21kaSgpOwogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwpAQCAtNTM1LDggKzU3MSw4IEBACiAJCW1jX2ZpbHRlcltiaXRuciA+PiA1XSB8PSAxIDw8IChiaXRuciAmIDMxKTsKIAl9CiAKLQlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX0hTSCwgbWNfZmlsdGVyWzBdKTsKLQlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX0hTTCwgbWNfZmlsdGVyWzFdKTsKKwlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX0hTTCwgbWNfZmlsdGVyWzBdKTsKKwlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX0hTSCwgbWNfZmlsdGVyWzFdKTsKIH0KIAogLyoKQEAgLTEwNjIsMTAgKzEwOTgsMTYgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEJyb2FkY29tIEJDTTUyMjEgUEhZXG4iLCBkZXYtPm5hbWUpOwogCWVsc2UgaWYgKHBoeV90eXBlID09IE1JSV9EUDgzODQ3X0lEKQogCQlwcmludGsoS0VSTl9JTkZPICIlczogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBEUDgzODQ3IFBIWVxuIiwgZGV2LT5uYW1lKTsKKwllbHNlIGlmIChwaHlfdHlwZSA9PSBNSUlfRFA4Mzg0OF9JRCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5hdGlvbmFsIFNlbWljb25kdWN0b3IgRFA4Mzg0OCBQSFlcbiIsIGRldi0+bmFtZSk7CiAJZWxzZSBpZiAocGh5X3R5cGUgPT0gTUlJX0FDMTAxTF9JRCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFsdGltYSBBQzEwMUwgUEhZXG4iLCBkZXYtPm5hbWUpOwogCWVsc2UgaWYgKHBoeV90eXBlID09IE1JSV9LUzg3MjFfSUQpCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNaWNyZWwgS1M4NzIxIFBIWVxuIiwgZGV2LT5uYW1lKTsKKwllbHNlIGlmIChwaHlfdHlwZSA9PSBNSUlfVDc4UTIxeDNfSUQpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUZXJpZGlhbiA3OFEyMXgzIFBIWVxuIiwgZGV2LT5uYW1lKTsKKwllbHNlIGlmIChwaHlfdHlwZSA9PSBNSUlfTEFOODNDMTg1X0lEKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogU01TQyBMQU44M0MxODUgUEhZXG4iLCBkZXYtPm5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTAzLDggKzExNDUsMTEgQEAKIAkJCWNhc2UgTUlJX1JUTDgyMDFfSUQ6CQkvKiBSZWFsdGVrIFJUTDgyMDE6IFBIWV9JRDEgPSAwLCBQSFlfSUQyID0gMHg4MjAxICovCiAJCQljYXNlIE1JSV9CQ001MjIxX0lEOgkJLyogQnJvYWRjb20gQkNNNTIyMTogUEhZX0lEMSA9IDB4NDAsIFBIWV9JRDIgPSAweDYxZTAgKi8KIAkJCWNhc2UgTUlJX0RQODM4NDdfSUQ6CQkvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIERQODM4NDc6ICAqLworCQkJY2FzZSBNSUlfRFA4Mzg0OF9JRDoJCS8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgRFA4Mzg0ODogICovCiAJCQljYXNlIE1JSV9BQzEwMUxfSUQ6CQkvKiBBbHRpbWEgQUMxMDFMOiBQSFlfSUQxID0gMHgyMiwgUEhZX0lEMiA9IDB4NTUyMCAqLwogCQkJY2FzZSBNSUlfS1M4NzIxX0lEOgkJLyogTWljcmVsIEtTODcyMTogUEhZX0lEMSA9IDB4MjIsIFBIWV9JRDIgPSAweDE2MTAgKi8KKwkJCWNhc2UgTUlJX1Q3OFEyMXgzX0lEOgkJLyogVGVyaWRpYW4gNzhRMjF4MzogUEhZX0lEMSA9IDB4MEUsIFBIWV9JRDIgPSA3MjM3ICovCisJCQljYXNlIE1JSV9MQU44M0MxODVfSUQ6CQkvKiBTTVNDIExBTjgzQzE4NTogUEhZX0lEMSA9IDB4MDAwNywgUEhZX0lEMiA9IDB4QzBBMSAqLwogCQkJCWRldGVjdGVkID0gYXQ5MWV0aGVyX3NldHVwKHBoeV9pZCwgcGh5X2FkZHJlc3MsIHBkZXYsIGV0aGVyX2Nsayk7CiAJCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmggYi9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5oCmluZGV4IGI2YjY2NWQuLmEzOGZkMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmgKKysrIGIvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuaApAQCAtMTcsMzkgKzE3LDQ2IEBACiAKIAogLyogRGF2aWNvbSA5MTYxIFBIWSAqLwotI2RlZmluZSBNSUlfRE05MTYxX0lECTB4MDE4MWI4ODAKLSNkZWZpbmUgTUlJX0RNOTE2MUFfSUQJMHgwMTgxYjhhMAotCi0vKiBEYXZpY29tIHNwZWNpZmljIHJlZ2lzdGVycyAqLwotI2RlZmluZSBNSUlfRFNDUl9SRUcJMTYKLSNkZWZpbmUgTUlJX0RTQ1NSX1JFRwkxNwotI2RlZmluZSBNSUlfRFNJTlRSX1JFRwkyMQorI2RlZmluZSBNSUlfRE05MTYxX0lECQkweDAxODFiODgwCisjZGVmaW5lIE1JSV9ETTkxNjFBX0lECQkweDAxODFiOGEwCisjZGVmaW5lIE1JSV9EU0NSX1JFRwkJMTYKKyNkZWZpbmUgTUlJX0RTQ1NSX1JFRwkJMTcKKyNkZWZpbmUgTUlJX0RTSU5UUl9SRUcJCTIxCiAKIC8qIEludGVsIExYVDk3MUEgUEhZICovCi0jZGVmaW5lIE1JSV9MWFQ5NzFBX0lECTB4MDAxMzc4RTAKLQotLyogSW50ZWwgc3BlY2lmaWMgcmVnaXN0ZXJzICovCi0jZGVmaW5lIE1JSV9JU0lOVEVfUkVHCTE4Ci0jZGVmaW5lIE1JSV9JU0lOVFNfUkVHCTE5Ci0jZGVmaW5lIE1JSV9MRURDVFJMX1JFRwkyMAorI2RlZmluZSBNSUlfTFhUOTcxQV9JRAkJMHgwMDEzNzhFMAorI2RlZmluZSBNSUlfSVNJTlRFX1JFRwkJMTgKKyNkZWZpbmUgTUlJX0lTSU5UU19SRUcJCTE5CisjZGVmaW5lIE1JSV9MRURDVFJMX1JFRwkJMjAKIAogLyogUmVhbHRlayBSVEw4MjAxIFBIWSAqLwotI2RlZmluZSBNSUlfUlRMODIwMV9JRAkweDAwMDA4MjAwCisjZGVmaW5lIE1JSV9SVEw4MjAxX0lECQkweDAwMDA4MjAwCiAKIC8qIEJyb2FkY29tIEJDTTUyMjEgUEhZICovCi0jZGVmaW5lIE1JSV9CQ001MjIxX0lECTB4MDA0MDYxZTAKLQotLyogQnJvYWRjb20gc3BlY2lmaWMgcmVnaXN0ZXJzICovCi0jZGVmaW5lIE1JSV9CQ01JTlRSX1JFRwkyNgorI2RlZmluZSBNSUlfQkNNNTIyMV9JRAkJMHgwMDQwNjFlMAorI2RlZmluZSBNSUlfQkNNSU5UUl9SRUcJCTI2CiAKIC8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgRFA4Mzg0NyAqLwotI2RlZmluZSBNSUlfRFA4Mzg0N19JRAkweDIwMDA1YzMwCisjZGVmaW5lIE1JSV9EUDgzODQ3X0lECQkweDIwMDA1YzMwCisKKy8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgRFA4Mzg0OCAqLworI2RlZmluZSBNSUlfRFA4Mzg0OF9JRAkJMHgyMDAwNWM5MAorI2RlZmluZSBNSUlfRFBQSFlTVFNfUkVHCTE2CisjZGVmaW5lIE1JSV9EUE1JQ1JfUkVHCQkxNworI2RlZmluZSBNSUlfRFBNSVNSX1JFRwkJMTgKIAogLyogQWx0aW1hIEFDMTAxTCBQSFkgKi8KLSNkZWZpbmUgTUlJX0FDMTAxTF9JRAkweDAwMjI1NTIwCisjZGVmaW5lIE1JSV9BQzEwMUxfSUQJCTB4MDAyMjU1MjAKIAogLyogTWljcmVsIEtTODcyMSBQSFkgKi8KLSNkZWZpbmUgTUlJX0tTODcyMV9JRAkweDAwMjIxNjEwCisjZGVmaW5lIE1JSV9LUzg3MjFfSUQJCTB4MDAyMjE2MTAKKworLyogVGVyaWRpYW4gNzhRMjEyMy83OFEyMTMzICovCisjZGVmaW5lIE1JSV9UNzhRMjF4M19JRAkJMHgwMDBlNzIzMAorI2RlZmluZSBNSUlfVDc4UTIxSU5UX1JFRwkxNworCisvKiBTTVNDIExBTjgzQzE4NSAqLworI2RlZmluZSBNSUlfTEFOODNDMTg1X0lECTB4MDAwN0MwQTAKIAogLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcjEuYyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcjEuYwppbmRleCBmMDc1Y2ViLi5mMjExNDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXRoZXIxLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyMS5jCkBAIC0xMDE0LDggKzEwMTQsNyBAQAogCVNFVF9ORVRERVZfREVWKGRldiwgJmVjLT5kZXYpOwogCiAJZGV2LT5pcnEgPSBlYy0+aXJxOwotCXByaXYoZGV2KS0+YmFzZSA9IGlvcmVtYXAoZWNhcmRfcmVzb3VyY2Vfc3RhcnQoZWMsIEVDQVJEX1JFU19JT0NGQVNUKSwKLQkJCQkgIGVjYXJkX3Jlc291cmNlX2xlbihlYywgRUNBUkRfUkVTX0lPQ0ZBU1QpKTsKKwlwcml2KGRldiktPmJhc2UgPSBlY2FyZG1faW9tYXAoZWMsIEVDQVJEX1JFU19JT0NGQVNULCAwLCAwKTsKIAlpZiAoIXByaXYoZGV2KS0+YmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZyZWU7CkBAIC0xMDU2LDggKzEwNTUsNiBAQAogCXJldHVybiAwOwogCiAgZnJlZToKLQlpZiAocHJpdihkZXYpLT5iYXNlKQotCQlpb3VubWFwKHByaXYoZGV2KS0+YmFzZSk7CiAJZnJlZV9uZXRkZXYoZGV2KTsKICByZWxlYXNlOgogCWVjYXJkX3JlbGVhc2VfcmVzb3VyY2VzKGVjKTsKQEAgLTEwNzIsNyArMTA2OSw2IEBACiAJZWNhcmRfc2V0X2RydmRhdGEoZWMsIE5VTEwpOwkKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JaW91bm1hcChwcml2KGRldiktPmJhc2UpOwogCWZyZWVfbmV0ZGV2KGRldik7CiAJZWNhcmRfcmVsZWFzZV9yZXNvdXJjZXMoZWMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyMy5jIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyMy5jCmluZGV4IDMyZGEyZWIuLmRhNzEzNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcjMuYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXIzLmMKQEAgLTc5Myw4ICs3OTMsNyBAQAogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZlYy0+ZGV2KTsKIAotCXByaXYoZGV2KS0+YmFzZSA9IGlvcmVtYXAoZWNhcmRfcmVzb3VyY2Vfc3RhcnQoZWMsIEVDQVJEX1JFU19NRU1DKSwKLQkJCQkgIGVjYXJkX3Jlc291cmNlX2xlbihlYywgRUNBUkRfUkVTX01FTUMpKTsKKwlwcml2KGRldiktPmJhc2UgPSBlY2FyZG1faW9tYXAoZWMsIEVDQVJEX1JFU19NRU1DLCAwLCAwKTsKIAlpZiAoIXByaXYoZGV2KS0+YmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZyZWU7CkBAIC04NjksOCArODY4LDYgQEAKIAlyZXR1cm4gMDsKIAogIGZyZWU6Ci0JaWYgKHByaXYoZGV2KS0+YmFzZSkKLQkJaW91bm1hcChwcml2KGRldiktPmJhc2UpOwogCWZyZWVfbmV0ZGV2KGRldik7CiAgcmVsZWFzZToKIAllY2FyZF9yZWxlYXNlX3Jlc291cmNlcyhlYyk7CkBAIC04ODUsNyArODgyLDYgQEAKIAllY2FyZF9zZXRfZHJ2ZGF0YShlYywgTlVMTCk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCWlvdW5tYXAocHJpdihkZXYpLT5iYXNlKTsKIAlmcmVlX25ldGRldihkZXYpOwogCWVjYXJkX3JlbGVhc2VfcmVzb3VyY2VzKGVjKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYwppbmRleCA2MWY1NzRhLi43NjliYTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCkBAIC02ODYsNyArNjg2LDcgQEAKIAllaC0+c3VwcG9ydGVkCQk9IGRhdGEtPnN1cHBvcnRlZDsKIAllaC0+Y3RybAkJPSAwOwogCWVoLT5pZAkJCT0gZWMtPmNpZC5wcm9kdWN0OwotCWVoLT5tZW1jCQk9IGlvcmVtYXAoZWNhcmRfcmVzb3VyY2Vfc3RhcnQoZWMsIEVDQVJEX1JFU19NRU1DKSwgUEFHRV9TSVpFKTsKKwllaC0+bWVtYwkJPSBlY2FyZG1faW9tYXAoZWMsIEVDQVJEX1JFU19NRU1DLCAwLCBQQUdFX1NJWkUpOwogCWlmICghZWgtPm1lbWMpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBmcmVlOwpAQCAtNjk0LDcgKzY5NCw3IEBACiAKIAllaC0+Y3RybF9wb3J0ID0gZWgtPm1lbWM7CiAJaWYgKGRhdGEtPmN0cmxfaW9jKSB7Ci0JCWVoLT5pb2NfZmFzdCA9IGlvcmVtYXAoZWNhcmRfcmVzb3VyY2Vfc3RhcnQoZWMsIEVDQVJEX1JFU19JT0NGQVNUKSwgUEFHRV9TSVpFKTsKKwkJZWgtPmlvY19mYXN0ID0gZWNhcmRtX2lvbWFwKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCwgMCwgUEFHRV9TSVpFKTsKIAkJaWYgKCFlaC0+aW9jX2Zhc3QpIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGZyZWU7CkBAIC03MTAsOCArNzEwLDcgQEAKIAkgKiBJUlEgYW5kIGNvbnRyb2wgcG9ydCBoYW5kbGluZyAtIG9ubHkgZm9yIG5vbi1OSUMgc2xvdCBjYXJkcy4KIAkgKi8KIAlpZiAoZWMtPnNsb3Rfbm8gIT0gOCkgewotCQllYy0+b3BzCQk9ICZldGhlcmhfb3BzOwotCQllYy0+aXJxX2RhdGEJPSBlaDsKKwkJZWNhcmRfc2V0aXJxKGVjLCAmZXRoZXJoX29wcywgZWgpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIElmIHdlJ3JlIGluIHRoZSBOSUMgc2xvdCwgbWFrZSBzdXJlIHRoZSBJUlEgaXMgZW5hYmxlZApAQCAtNzU5LDEwICs3NTgsNiBAQAogCXJldHVybiAwOwogCiAgZnJlZToKLQlpZiAoZWgtPmlvY19mYXN0KQotCQlpb3VubWFwKGVoLT5pb2NfZmFzdCk7Ci0JaWYgKGVoLT5tZW1jKQotCQlpb3VubWFwKGVoLT5tZW1jKTsKIAlmcmVlX25ldGRldihkZXYpOwogIHJlbGVhc2U6CiAJZWNhcmRfcmVsZWFzZV9yZXNvdXJjZXMoZWMpOwpAQCAtNzczLDE2ICs3NjgsMTAgQEAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBldGhlcmhfcmVtb3ZlKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGVjYXJkX2dldF9kcnZkYXRhKGVjKTsKLQlzdHJ1Y3QgZXRoZXJoX3ByaXYgKmVoID0gZXRoZXJoX3ByaXYoZGV2KTsKIAogCWVjYXJkX3NldF9kcnZkYXRhKGVjLCBOVUxMKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZWMtPm9wcyA9IE5VTEw7Ci0KLQlpZiAoZWgtPmlvY19mYXN0KQotCQlpb3VubWFwKGVoLT5pb2NfZmFzdCk7Ci0JaW91bm1hcChlaC0+bWVtYyk7CiAKIAlmcmVlX25ldGRldihkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYXRsMS9hdGwxX2V0aHRvb2wuYwppbmRleCBjMTFjMjc3Li4xZjYxNmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxL2F0bDFfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9ldGh0b29sLmMKQEAgLTE1Niw4ICsxNTYsNyBAQAogCXUxNiBvbGRfbWVkaWFfdHlwZSA9IGh3LT5tZWRpYV90eXBlOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV0aHRvb2wgc2h1dHRpbmcgZG93biBhZGFwdGVyXG4iLAotCQkJYXRsMV9kcml2ZXJfbmFtZSk7CisJCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgImV0aHRvb2wgc2h1dHRpbmcgZG93biBhZGFwdGVyXG4iKTsKIAkJYXRsMV9kb3duKGFkYXB0ZXIpOwogCX0KIApAQCAtMTY2LDkgKzE2NSw4IEBACiAJZWxzZSB7CiAJCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQlpZiAoZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSAgICAgICAiJXM6IGNhbid0IGZvcmNlIHRvIDEwMDBNIGhhbGYgZHVwbGV4XG4iLAotCQkJCQlhdGwxX2RyaXZlcl9uYW1lKTsKKwkJCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiY2FuJ3QgZm9yY2UgdG8gMTAwME0gaGFsZiBkdXBsZXhcbiIpOwogCQkJCXJldF92YWwgPSAtRUlOVkFMOwogCQkJCWdvdG8gZXhpdF9zc2V0OwogCQkJfQpAQCAtMjA2LDkgKzIwNCw4IEBACiAJfQogCWlmIChhdGwxX3BoeV9zZXR1cF9hdXRvbmVnX2FkdihodykpIHsKIAkJcmV0X3ZhbCA9IC1FSU5WQUw7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSIlczogaW52YWxpZCBldGh0b29sIHNwZWVkL2R1cGxleCBzZXR0aW5nXG4iLAotCQkJYXRsMV9kcml2ZXJfbmFtZSk7CisJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiaW52YWxpZCBldGh0b29sIHNwZWVkL2R1cGxleCBzZXR0aW5nXG4iKTsKIAkJZ290byBleGl0X3NzZXQ7CiAJfQogCWlmIChody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFX0FVVE9fU0VOU09SIHx8CkBAIC0yMzksMTIgKzIzNiwxMCBAQAogCQlody0+bWVkaWFfdHlwZSA9IG9sZF9tZWRpYV90eXBlOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV0aHRvb2wgc3RhcnRpbmcgYWRhcHRlclxuIiwKLQkJCWF0bDFfZHJpdmVyX25hbWUpOworCQlkZXZfZGJnKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJldGh0b29sIHN0YXJ0aW5nIGFkYXB0ZXJcbiIpOwogCQlhdGwxX3VwKGFkYXB0ZXIpOwogCX0gZWxzZSBpZiAoIXJldF92YWwpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBldGh0b29sIHJlc2V0dGluZyBhZGFwdGVyXG4iLAotCQkJYXRsMV9kcml2ZXJfbmFtZSk7CisJCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgImV0aHRvb2wgcmVzZXR0aW5nIGFkYXB0ZXJcbiIpOwogCQlhdGwxX3Jlc2V0KGFkYXB0ZXIpOwogCX0KIAlyZXR1cm4gcmV0X3ZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9ody5jIGIvZHJpdmVycy9uZXQvYXRsMS9hdGwxX2h3LmMKaW5kZXggNjk0ODJlMC4uZWY4ODZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMS9hdGwxX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMS9hdGwxX2h3LmMKQEAgLTIsMjAgKzIsMjAgQEAKICAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwNiBBdHRhbnNpYyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodChjKSAyMDA2IENocmlzIFNub29rIDxjc25vb2tAcmVkaGF0LmNvbT4KICAqIENvcHlyaWdodChjKSAyMDA2IEpheSBDbGlidXJuIDxqY2xpYnVybkBnbWFpbC5jb20+Ci0gKiAKKyAqCiAgKiBEZXJpdmVkIGZyb20gSW50ZWwgZTEwMDAgZHJpdmVyCiAgKiBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKICAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiAgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKICAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKICAqIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKICAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQogICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCkBAIC0zOCwxMiArMzgsMTMgQEAKICAqLwogczMyIGF0bDFfcmVzZXRfaHcoc3RydWN0IGF0bDFfaHcgKmh3KQogeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gaHctPmJhY2stPnBkZXY7CiAJdTMyIGljcjsKIAlpbnQgaTsKIAotCS8qIAorCS8qCiAJICogQ2xlYXIgSW50ZXJydXB0IG1hc2sgdG8gc3RvcCBib2FyZCBmcm9tIGdlbmVyYXRpbmcKLQkgKiBpbnRlcnJ1cHRzICYgQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGV2ZW50cyAKKwkgKiBpbnRlcnJ1cHRzICYgQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IGV2ZW50cwogCSAqLwogCS8qCiAJICogaW93cml0ZTMyKDAsIGh3LT5od19hZGRyICsgUkVHX0lNUik7CkBAIC03NCw3ICs3NSw3IEBACiAJfQogCiAJaWYgKGljcikgewotCQlwcmludGsgKEtFUk5fREVCVUcgImljciA9ICV4XG4iLCBpY3IpOyAKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiSUNSID0gMHgleFxuIiwgaWNyKTsKIAkJcmV0dXJuIGljcjsKIAl9CiAKQEAgLTEzNiw4ICsxMzcsOCBAQAogCWludCBpOwogCiAJdmFsID0gKCh1MzIpIChyZWdfYWRkciAmIE1ESU9fUkVHX0FERFJfTUFTSykpIDw8IE1ESU9fUkVHX0FERFJfU0hJRlQgfAotCSAgICAJTURJT19TVEFSVCB8IE1ESU9fU1VQX1BSRUFNQkxFIHwgTURJT19SVyB8IE1ESU9fQ0xLXzI1XzQgPDwKLSAJCU1ESU9fQ0xLX1NFTF9TSElGVDsKKwkJTURJT19TVEFSVCB8IE1ESU9fU1VQX1BSRUFNQkxFIHwgTURJT19SVyB8IE1ESU9fQ0xLXzI1XzQgPDwKKwkJTURJT19DTEtfU0VMX1NISUZUOwogCWlvd3JpdGUzMih2YWwsIGh3LT5od19hZGRyICsgUkVHX01ESU9fQ1RSTCk7CiAJaW9yZWFkMzIoaHctPmh3X2FkZHIgKyBSRUdfTURJT19DVFJMKTsKIApAQCAtMjA0LDcgKzIwNSw3IEBACiAKIC8qCiAgKiBnZXRfcGVybWFuZW50X2FkZHJlc3MKLSAqIHJldHVybiAwIGlmIGdldCB2YWxpZCBtYWMgYWRkcmVzcywgCisgKiByZXR1cm4gMCBpZiBnZXQgdmFsaWQgbWFjIGFkZHJlc3MsCiAgKi8KIHN0YXRpYyBpbnQgYXRsMV9nZXRfcGVybWFuZW50X2FkZHJlc3Moc3RydWN0IGF0bDFfaHcgKmh3KQogewpAQCAtMzAxLDcgKzMwMiw3IEBACiB9CiAKIC8qCi0gKiBSZWFkcyB0aGUgYWRhcHRlcidzIE1BQyBhZGRyZXNzIGZyb20gdGhlIEVFUFJPTSAKKyAqIFJlYWRzIHRoZSBhZGFwdGVyJ3MgTUFDIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICovCiBzMzIgYXRsMV9yZWFkX21hY19hZGRyKHN0cnVjdCBhdGwxX2h3ICpodykKQEAgLTQzNyw2ICs0MzgsNyBAQAogICovCiBzdGF0aWMgczMyIGF0bDFfcGh5X3Jlc2V0KHN0cnVjdCBhdGwxX2h3ICpodykKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGh3LT5iYWNrLT5wZGV2OwogCXMzMiByZXRfdmFsOwogCXUxNiBwaHlfZGF0YTsKIApAQCAtNDY4LDggKzQ3MCw3IEBACiAJCXUzMiB2YWw7CiAJCWludCBpOwogCQkvKiBwY2llIHNlcmRlcyBsaW5rIG1heSBiZSBkb3duISAqLwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dG9uZWcgY2F1c2VkIHBjaWUgcGh5IGxpbmsgZG93blxuIiwgCi0JCQlhdGwxX2RyaXZlcl9uYW1lKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicGNpZSBwaHkgbGluayBkb3duXG4iKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMjU7IGkrKykgewogCQkJbXNsZWVwKDEpOwpAQCAtNDc5LDkgKzQ4MCw3IEBACiAJCX0KIAogCQlpZiAoKHZhbCAmIChNRElPX1NUQVJUIHwgTURJT19CVVNZKSkgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKLQkJCQkiJXM6IHBjaWUgbGluayBkb3duIGF0IGxlYXN0IGZvciAyNW1zXG4iLCAKLQkJCQlhdGwxX2RyaXZlcl9uYW1lKTsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJwY2llIGxpbmsgZG93biBhdCBsZWFzdCAyNW1zXG4iKTsKIAkJCXJldHVybiByZXRfdmFsOwogCQl9CiAJfQpAQCAtNTcxLDYgKzU3MCw3IEBACiAgKi8KIHN0YXRpYyBzMzIgYXRsMV9zZXR1cF9saW5rKHN0cnVjdCBhdGwxX2h3ICpodykKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGh3LT5iYWNrLT5wZGV2OwogCXMzMiByZXRfdmFsOwogCiAJLyoKQEAgLTU4MSwxNSArNTgxLDEzIEBACiAJICovCiAJcmV0X3ZhbCA9IGF0bDFfcGh5X3NldHVwX2F1dG9uZWdfYWR2KGh3KTsKIAlpZiAocmV0X3ZhbCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGVycm9yIHNldHRpbmcgdXAgYXV0b25lZ290aWF0aW9uXG4iLCAKLQkJCWF0bDFfZHJpdmVyX25hbWUpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJlcnJvciBzZXR0aW5nIHVwIGF1dG9uZWdvdGlhdGlvblxuIik7CiAJCXJldHVybiByZXRfdmFsOwogCX0KIAkvKiBTVy5SZXNldCAsIEVuLUF1dG8tTmVnIGlmIG5lZWRlZCAqLwogCXJldF92YWwgPSBhdGwxX3BoeV9yZXNldChodyk7CiAJaWYgKHJldF92YWwpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBlcnJvciByZXNldHRpbmcgdGhlIHBoeVxuIiwgCi0JCQlhdGwxX2RyaXZlcl9uYW1lKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZXJyb3IgcmVzZXR0aW5nIHBoeVxuIik7CiAJCXJldHVybiByZXRfdmFsOwogCX0KIAlody0+cGh5X2NvbmZpZ3VyZWQgPSB0cnVlOwpAQCAtNjMxLDcgKzYyOSw3IEBACiAgKiBQZXJmb3JtcyBiYXNpYyBjb25maWd1cmF0aW9uIG9mIHRoZSBhZGFwdGVyLgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqIEFzc3VtZXMgdGhhdCB0aGUgY29udHJvbGxlciBoYXMgcHJldmlvdXNseSBiZWVuIHJlc2V0IGFuZCBpcyBpbiBhCi0gKiBwb3N0LXJlc2V0IHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEluaXRpYWxpemVzIG11bHRpY2FzdCB0YWJsZSwgCisgKiBwb3N0LXJlc2V0IHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEluaXRpYWxpemVzIG11bHRpY2FzdCB0YWJsZSwKICAqIGFuZCAgQ2FsbHMgcm91dGluZXMgdG8gc2V0dXAgbGluawogICogTGVhdmVzIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cyBkaXNhYmxlZCBhbmQgdW5pbml0aWFsaXplZC4KICAqLwpAQCAtNjY5LDYgKzY2Nyw3IEBACiAgKi8KIHMzMiBhdGwxX2dldF9zcGVlZF9hbmRfZHVwbGV4KHN0cnVjdCBhdGwxX2h3ICpodywgdTE2ICpzcGVlZCwgdTE2ICpkdXBsZXgpCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBody0+YmFjay0+cGRldjsKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGh5X2RhdGE7CiAKQEAgLTY5MSw4ICs2OTAsNyBAQAogCQkqc3BlZWQgPSBTUEVFRF8xMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBlcnJvciBnZXR0aW5nIHNwZWVkXG4iLCAKLQkJCWF0bDFfZHJpdmVyX25hbWUpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJlcnJvciBnZXR0aW5nIHNwZWVkXG4iKTsKIAkJcmV0dXJuIEFUTDFfRVJSX1BIWV9TUEVFRDsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMS9hdGwxX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9tYWluLmMKaW5kZXggNGIxZDRkMS4uNjg2MmMxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMS9hdGwxX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxL2F0bDFfbWFpbi5jCkBAIC0xODgsOCArMTg4LDcgQEAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBhdGwxX2J1ZmZlcikgKiAodHBkX3JpbmctPmNvdW50ICsgcmZkX3JpbmctPmNvdW50KTsKIAl0cGRfcmluZy0+YnVmZmVyX2luZm8gPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseSghdHBkX3JpbmctPmJ1ZmZlcl9pbmZvKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczoga3phbGxvYyBmYWlsZWQgLCBzaXplID0gRCVkXG4iLAotCQkJYXRsMV9kcml2ZXJfbmFtZSwgc2l6ZSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImt6YWxsb2MgZmFpbGVkICwgc2l6ZSA9IEQlZFxuIiwgc2l6ZSk7CiAJCWdvdG8gZXJyX25vbWVtOwogCX0KIAlyZmRfcmluZy0+YnVmZmVyX2luZm8gPQpAQCAtMjA3LDkgKzIwNiw3IEBACiAJcmluZ19oZWFkZXItPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCByaW5nX2hlYWRlci0+c2l6ZSwKIAkJCQkJCSZyaW5nX2hlYWRlci0+ZG1hKTsKIAlpZiAodW5saWtlbHkoIXJpbmdfaGVhZGVyLT5kZXNjKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiJXM6IHBjaV9hbGxvY19jb25zaXN0ZW50IGZhaWxlZCwgc2l6ZSA9IEQlZFxuIiwKLQkJCWF0bDFfZHJpdmVyX25hbWUsIHNpemUpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfYWxsb2NfY29uc2lzdGVudCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9ub21lbTsKIAl9CiAKQEAgLTM3Myw4ICszNzAsNyBAQAogCQlpZiAocnJkLT5lcnJfZmxnICYgKEVSUl9GTEFHX0NSQyB8IEVSUl9GTEFHX1RSVU5DIHwKIAkJCQkJRVJSX0ZMQUdfQ09ERSB8IEVSUl9GTEFHX09WKSkgewogCQkJYWRhcHRlci0+aHdfY3N1bV9lcnIrKzsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcnggY2hlY2tzdW0gZXJyb3JcbiIsCi0JCQkJYXRsMV9kcml2ZXJfbmFtZSk7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJyeCBjaGVja3N1bSBlcnJvclxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0zOTMsOCArMzg5LDkgQEAKIAl9CiAKIAkvKiBJUHY0LCBidXQgaGFyZHdhcmUgdGhpbmtzIGl0cyBjaGVja3N1bSBpcyB3cm9uZyAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogaHcgY3N1bSB3cm9uZyBwa3RfZmxhZzoleCwgZXJyX2ZsYWc6JXhcbiIsCi0JCWF0bDFfZHJpdmVyX25hbWUsIHJyZC0+cGt0X2ZsZywgcnJkLT5lcnJfZmxnKTsKKwlkZXZfZGJnKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCSJodyBjc3VtIHdyb25nLCBwa3RfZmxhZzoleCwgZXJyX2ZsYWc6JXhcbiIsCisJCXJyZC0+cGt0X2ZsZywgcnJkLT5lcnJfZmxnKTsKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0NPTVBMRVRFOwogCXNrYi0+Y3N1bSA9IGh0b25zKHJyZC0+eHN6LnhzdW1fc3oucnhfY2hrc3VtKTsKIAlhZGFwdGVyLT5od19jc3VtX2VycisrOwpAQCAtNTA3LDE0ICs1MDQsMTMgQEAKIAkJCS8qIHJyZCBzZWVtcyB0byBiZSBiYWQgKi8KIAkJCWlmICh1bmxpa2VseShpLS0gPiAwKSkgewogCQkJCS8qIHJyZCBtYXkgbm90IGJlIERNQWVkIGNvbXBsZXRlbHkgKi8KLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCQkiJXM6IFJSRCBtYXkgbm90IGJlIERNQWVkIGNvbXBsZXRlbHlcbiIsCi0JCQkJCWF0bDFfZHJpdmVyX25hbWUpOworCQkJCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJImluY29tcGxldGUgUlJEIERNQSB0cmFuc2ZlclxuIik7CiAJCQkJdWRlbGF5KDEpOwogCQkJCWdvdG8gY2hrX3JyZDsKIAkJCX0KIAkJCS8qIGJhZCBycmQgKi8KLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmFkIFJSRFxuIiwgYXRsMV9kcml2ZXJfbmFtZSk7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJiYWQgUlJEXG4iKTsKIAkJCS8qIHNlZSBpZiB1cGRhdGUgUkZEIGluZGV4ICovCiAJCQlpZiAocnJkLT5udW1fYnVmID4gMSkgewogCQkJCXUxNiBudW1fYnVmOwpAQCAtNjg1LDggKzY4MSw4IEBACiAJLyogbm90aWZ5IHVwcGVyIGxheWVyIGxpbmsgZG93biBBU0FQICovCiAJaWYgKCEocGh5X2RhdGEgJiBCTVNSX0xTVEFUVVMpKSB7CS8qIExpbmsgRG93biAqLwogCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CS8qIG9sZCBsaW5rIHN0YXRlOiBVcCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGxpbmsgaXMgZG93blxuIiwKLQkJCSAgICAgICBhdGwxX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUpOworCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzIGxpbmsgaXMgZG93blxuIiwKKwkJCQluZXRkZXYtPm5hbWUpOwogCQkJYWRhcHRlci0+bGlua19zcGVlZCA9IFNQRUVEXzA7CiAJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwpAQCAtNzMxLDggKzcyNyw4IEBACiAKIAkJLyogY2hlY2sgaWYgUENJRSBQSFkgTGluayBkb3duICovCiAJCWlmIChzdGF0dXMgJiBJU1JfUEhZX0xJTktET1dOKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHBjaWUgcGh5IGxpbmsgZG93biAleFxuIiwKLQkJCQlhdGwxX2RyaXZlcl9uYW1lLCBzdGF0dXMpOworCQkJZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LCAicGNpZSBwaHkgbGluayBkb3duICV4XG4iLAorCQkJCXN0YXR1cyk7CiAJCQlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CS8qIHJlc2V0IE1BQyAqLwogCQkJCWlvd3JpdGUzMigwLCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX0lNUik7CiAJCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cGNpZV9kbWFfdG9fcnN0X3Rhc2spOwpAQCAtNzQyLDkgKzczOCw5IEBACiAKIAkJLyogY2hlY2sgaWYgRE1BIHJlYWQvd3JpdGUgZXJyb3IgPyAqLwogCQlpZiAoc3RhdHVzICYgKElTUl9ETUFSX1RPX1JTVCB8IElTUl9ETUFXX1RPX1JTVCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJIiVzOiBwY2llIERNQSByL3cgZXJyb3IgKHN0YXR1cyA9IDB4JXgpXG4iLAotCQkJCWF0bDFfZHJpdmVyX25hbWUsIHN0YXR1cyk7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJInBjaWUgRE1BIHIvdyBlcnJvciAoc3RhdHVzID0gMHgleClcbiIsCisJCQkJc3RhdHVzKTsKIAkJCWlvd3JpdGUzMigwLCBhZGFwdGVyLT5ody5od19hZGRyICsgUkVHX0lNUik7CiAJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5wY2llX2RtYV90b19yc3RfdGFzayk7CiAJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC03NjIsMTQgKzc1OCwxMyBAQAogCiAJCS8qIHJ4IGV4Y2VwdGlvbiAqLwogCQlpZiAodW5saWtlbHkoc3RhdHVzICYgKElTUl9SWEZfT1YgfCBJU1JfUkZEX1VOUlVOIHwKKwkJCUlTUl9SUkRfT1YgfCBJU1JfSE9TVF9SRkRfVU5SVU4gfAorCQkJSVNSX0hPU1RfUlJEX09WIHwgSVNSX0NNQl9SWCkpKSB7CisJCQlpZiAoc3RhdHVzICYgKElTUl9SWEZfT1YgfCBJU1JfUkZEX1VOUlVOIHwKIAkJCQlJU1JfUlJEX09WIHwgSVNSX0hPU1RfUkZEX1VOUlVOIHwKLQkJCQlJU1JfSE9TVF9SUkRfT1YgfCBJU1JfQ01CX1JYKSkpIHsKLQkJCWlmIChzdGF0dXMgJgotCQkJICAgIChJU1JfUlhGX09WIHwgSVNSX1JGRF9VTlJVTiB8IElTUl9SUkRfT1YgfAotCQkJICAgICBJU1JfSE9TVF9SRkRfVU5SVU4gfCBJU1JfSE9TVF9SUkRfT1YpKQotCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJIiVzOiByeCBleGNlcHRpb246IHN0YXR1cyA9IDB4JXhcbiIsCi0JCQkJCWF0bDFfZHJpdmVyX25hbWUsIHN0YXR1cyk7CisJCQkJSVNSX0hPU1RfUlJEX09WKSkKKwkJCQlkZXZfZGJnKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJyeCBleGNlcHRpb24sIElTUiA9IDB4JXhcbiIsIHN0YXR1cyk7CiAJCQlhdGwxX2ludHJfcngoYWRhcHRlcik7CiAJCX0KIApAQCAtODc0LDggKzg2OSw3IEBACiAJYXRsMV9yZWFkX3BoeV9yZWcoaHcsIE1JSV9CTVNSLCAmcGh5X2RhdGEpOwogCWlmICghKHBoeV9kYXRhICYgQk1TUl9MU1RBVFVTKSkgewkvKiBsaW5rIGRvd24gKi8KIAkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewkvKiBvbGQgbGluayBzdGF0ZTogVXAgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGlzIGRvd25cbiIsCi0JCQkJYXRsMV9kcml2ZXJfbmFtZSk7CisJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAibGluayBpcyBkb3duXG4iKTsKIAkJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBTUEVFRF8wOwogCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKQEAgLTkxOCwxMSArOTEyLDExIEBACiAJCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gc3BlZWQ7CiAJCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IGR1cGxleDsKIAkJCWF0bDFfc2V0dXBfbWFjX2N0cmwoYWRhcHRlcik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgbGluayBpcyB1cCAlZCBNYnBzICVzXG4iLAotCQkJICAgICAgIGF0bDFfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSwKLQkJCSAgICAgICBhZGFwdGVyLT5saW5rX3NwZWVkLAotCQkJICAgICAgIGFkYXB0ZXItPmxpbmtfZHVwbGV4ID09Ci0JCQkgICAgICAgRlVMTF9EVVBMRVggPyAiZnVsbCBkdXBsZXgiIDogImhhbGYgZHVwbGV4Iik7CisJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSIlcyBsaW5rIGlzIHVwICVkIE1icHMgJXNcbiIsCisJCQkJbmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5saW5rX3NwZWVkLAorCQkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYID8KKwkJCQkiZnVsbCBkdXBsZXgiIDogImhhbGYgZHVwbGV4Iik7CiAJCX0KIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsJLyogTGluayBkb3duIC0+IFVwICovCiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CkBAIC0xMjM1LDM5ICsxMjI5LDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CiB9CiAKLS8qIEZJWE1FOiBqdXN0aWZ5IG9yIHJlbW92ZSAtLSBDSFMgKi8KLXN0YXRpYyB2b2lkIGF0bDFfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCi17Ci0JLyogV2UgZG9uJ3QgZG8gVmxhbiBmaWx0ZXJpbmcgKi8KLQlyZXR1cm47Ci19Ci0KLS8qIEZJWE1FOiB0aGlzIGxvb2tzIHdyb25nIHRvbyAtLSBDSFMgKi8KLXN0YXRpYyB2b2lkIGF0bDFfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQotewotCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOwotCS8qIGF0bDFfaXJxX2Rpc2FibGUoYWRhcHRlcik7ICovCi0Jdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQsIE5VTEwpOwotCS8qIGF0bDFfaXJxX2VuYWJsZShhZGFwdGVyKTsgKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7Ci0JLyogV2UgZG9uJ3QgZG8gVmxhbiBmaWx0ZXJpbmcgKi8KLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyB2b2lkIGF0bDFfcmVzdG9yZV92bGFuKHN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJYXRsMV92bGFuX3J4X3JlZ2lzdGVyKGFkYXB0ZXItPm5ldGRldiwgYWRhcHRlci0+dmxncnApOwotCWlmIChhZGFwdGVyLT52bGdycCkgewotCQl1MTYgdmlkOwotCQlmb3IgKHZpZCA9IDA7IHZpZCA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyB2aWQrKykgewotCQkJaWYgKCF2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCkpCi0JCQkJY29udGludWU7Ci0JCQlhdGwxX3ZsYW5fcnhfYWRkX3ZpZChhZGFwdGVyLT5uZXRkZXYsIHZpZCk7Ci0JCX0KLQl9CiB9CiAKIHN0YXRpYyB1MTYgdHBkX2F2YWlsKHN0cnVjdCBhdGwxX3RwZF9yaW5nICp0cGRfcmluZykKQEAgLTEzMzAsOCArMTI5NCw4IEBACiAJCWNzbyA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CiAJCWNzcyA9IGNzbyArIHNrYi0+Y3N1bV9vZmZzZXQ7CiAJCWlmICh1bmxpa2VseShjc28gJiAweDEpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHBheWxvYWQgb2Zmc2V0ICE9IGV2ZW4gbnVtYmVyXG4iLAotCQkJCWF0bDFfZHJpdmVyX25hbWUpOworCQkJZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSJwYXlsb2FkIG9mZnNldCBub3QgYW4gZXZlbiBudW1iZXJcbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWNzdW0tPmNzdW1wbCB8PSAoY3NvICYgQ1NVTV9QQVJBTV9QTE9BRE9GRlNFVF9NQVNLKSA8PApAQCAtMTU3OSw3ICsxNTQzLDcgQEAKIAlpZiAoIXNwaW5fdHJ5bG9jaygmYWRhcHRlci0+bG9jaykpIHsKIAkJLyogQ2FuJ3QgZ2V0IGxvY2sgLSB0ZWxsIHVwcGVyIGxheWVyIHRvIHJlcXVldWUgKi8KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRYIGxvY2tlZFxuIiwgYXRsMV9kcml2ZXJfbmFtZSk7CisJCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgInR4IGxvY2tlZFxuIik7CiAJCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwogCX0KIApAQCAtMTU4Nyw3ICsxNTUxLDcgQEAKIAkJLyogbm90IGVub3VnaCBkZXNjcmlwdG9ycyAqLwogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUWCBidXN5XG4iLCBhdGwxX2RyaXZlcl9uYW1lKTsKKwkJZGV2X2RiZygmYWRhcHRlci0+cGRldi0+ZGV2LCAidHggYnVzeVxuIik7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKQEAgLTE4NDEsOCArMTgwNSw3IEBACiAKIAlpZiAoKG1heF9mcmFtZSA8IE1JTklNVU1fRVRIRVJORVRfRlJBTUVfU0laRSkgfHwKIAkgICAgKG1heF9mcmFtZSA+IE1BWF9KVU1CT19GUkFNRV9TSVpFKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW52YWxpZCBNVFUgc2V0dGluZ1xuIiwKLQkJCWF0bDFfZHJpdmVyX25hbWUpOworCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCAiaW52YWxpZCBNVFUgc2V0dGluZ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjA0NSw2ICsyMDA4LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorc3RhdGljIHZvaWQgYXRsMV9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlkaXNhYmxlX2lycShuZXRkZXYtPmlycSk7CisJYXRsMV9pbnRyKG5ldGRldi0+aXJxLCBuZXRkZXYpOworCWVuYWJsZV9pcnEobmV0ZGV2LT5pcnEpOworfQorI2VuZGlmCisKIC8qCiAgKiBJZiBUUEQgQnVmZmVyIHNpemUgZXF1YWwgdG8gMCwgUENJRSBETUFSX1RPX0lOVAogICogd2lsbCBhc3NlcnQuIFdlIGRvIHNvZnQgcmVzZXQgPDB4MTQwMD0xPiBhY2NvcmRpbmcKQEAgLTIxMzYsOSArMjEwOCw3IEBACiAJaWYgKGVycikgewogCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkiJXM6IG5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcbiIsCi0JCQkJYXRsMV9kcml2ZXJfbmFtZSk7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb25cbiIpOwogCQkJZ290byBlcnJfZG1hOwogCQl9CiAJCXBjaV91c2luZ182NCA9IGZhbHNlOwpAQCAtMjE3NSw3ICsyMTQ1LDkgQEAKIAkJZ290byBlcnJfcGNpX2lvbWFwOwogCX0KIAkvKiBnZXQgZGV2aWNlIHJldmlzaW9uIG51bWJlciAqLwotCWFkYXB0ZXItPmh3LmRldl9yZXYgPSBpb3JlYWQxNihhZGFwdGVyLT5ody5od19hZGRyICsgKFJFR19NQVNURVJfQ1RSTCArIDIpKTsKKwlhZGFwdGVyLT5ody5kZXZfcmV2ID0gaW9yZWFkMTYoYWRhcHRlci0+aHcuaHdfYWRkciArCisJCQkJCShSRUdfTUFTVEVSX0NUUkwgKyAyKSk7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgInZlcnNpb24gJXNcbiIsIERSSVZFUl9WRVJTSU9OKTsKIAogCS8qIHNldCBkZWZhdWx0IHJpbmcgcmVzb3VyY2UgY291bnRzICovCiAJYWRhcHRlci0+cmZkX3JpbmcuY291bnQgPSBhZGFwdGVyLT5ycmRfcmluZy5jb3VudCA9IEFUTDFfREVGQVVMVF9SRkQ7CkBAIC0yMTk3LDkgKzIxNjksMTEgQEAKIAluZXRkZXYtPmRvX2lvY3RsID0gJmF0bDFfaW9jdGw7CiAJbmV0ZGV2LT50eF90aW1lb3V0ID0gJmF0bDFfdHhfdGltZW91dDsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJbmV0ZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBhdGwxX3BvbGxfY29udHJvbGxlcjsKKyNlbmRpZgogCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGF0bDFfdmxhbl9yeF9yZWdpc3RlcjsKLQluZXRkZXYtPnZsYW5fcnhfYWRkX3ZpZCA9IGF0bDFfdmxhbl9yeF9hZGRfdmlkOwotCW5ldGRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IGF0bDFfdmxhbl9yeF9raWxsX3ZpZDsKKwogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmYXRsMV9ldGh0b29sX29wczsKIAlhZGFwdGVyLT5iZF9udW1iZXIgPSBjYXJkc19mb3VuZDsKIAlhZGFwdGVyLT5wY2lfdXNpbmdfNjQgPSBwY2lfdXNpbmdfNjQ7CkBAIC0yNDY2LDggKzI0NDAsNiBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBhdGwxX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgLSB2ZXJzaW9uICVzXG4iLCBhdGwxX2RyaXZlcl9zdHJpbmcsIERSSVZFUl9WRVJTSU9OKTsKLQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgYXRsMV9jb3B5cmlnaHQpOwogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhdGwxX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9wYXJhbS5jIGIvZHJpdmVycy9uZXQvYXRsMS9hdGwxX3BhcmFtLmMKaW5kZXggYmNkMGJkODkuLjQyNDZiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9wYXJhbS5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDEvYXRsMV9wYXJhbS5jCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSAiYXRsMS5oIgogCiAvKgpAQCAtOTMsNyArOTQsNyBAQAogCX0gYXJnOwogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgYXRsMV92YWxpZGF0ZV9vcHRpb24oaW50ICp2YWx1ZSwgc3RydWN0IGF0bDFfb3B0aW9uICpvcHQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdGwxX3ZhbGlkYXRlX29wdGlvbihpbnQgKnZhbHVlLCBzdHJ1Y3QgYXRsMV9vcHRpb24gKm9wdCwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJaWYgKCp2YWx1ZSA9PSBPUFRJT05fVU5TRVQpIHsKIAkJKnZhbHVlID0gb3B0LT5kZWY7CkBAIC0xMDQsMTkgKzEwNSwxNyBAQAogCWNhc2UgZW5hYmxlX29wdGlvbjoKIAkJc3dpdGNoICgqdmFsdWUpIHsKIAkJY2FzZSBPUFRJT05fRU5BQkxFRDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBFbmFibGVkXG4iLCBhdGwxX2RyaXZlcl9uYW1lLAotCQkJCW9wdC0+bmFtZSk7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgZW5hYmxlZFxuIiwgb3B0LT5uYW1lKTsKIAkJCXJldHVybiAwOwogCQljYXNlIE9QVElPTl9ESVNBQkxFRDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBEaXNhYmxlZFxuIiwgYXRsMV9kcml2ZXJfbmFtZSwKLQkJCQlvcHQtPm5hbWUpOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIGRpc2FibGVkXG4iLCBvcHQtPm5hbWUpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSByYW5nZV9vcHRpb246CiAJCWlmICgqdmFsdWUgPj0gb3B0LT5hcmcuci5taW4gJiYgKnZhbHVlIDw9IG9wdC0+YXJnLnIubWF4KSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgc2V0IHRvICVpXG4iLAotCQkJCWF0bDFfZHJpdmVyX25hbWUsIG9wdC0+bmFtZSwgKnZhbHVlKTsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyBzZXQgdG8gJWlcbiIsIG9wdC0+bmFtZSwKKwkJCQkqdmFsdWUpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJYnJlYWs7CkBAIC0xMjgsOCArMTI3LDggQEAKIAkJCQllbnQgPSAmb3B0LT5hcmcubC5wW2ldOwogCQkJCWlmICgqdmFsdWUgPT0gZW50LT5pKSB7CiAJCQkJCWlmIChlbnQtPnN0clswXSAhPSAnXDAnKQotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzXG4iLAotCQkJCQkJICAgICAgIGF0bDFfZHJpdmVyX25hbWUsIGVudC0+c3RyKTsKKwkJCQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlc1xuIiwKKwkJCQkJCQllbnQtPnN0cik7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCX0KQEAgLTE0MCw4ICsxMzksOCBAQAogCQlicmVhazsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCAlcyBzcGVjaWZpZWQgKCVpKSAlc1xuIiwKLQkgICAgICAgYXRsMV9kcml2ZXJfbmFtZSwgb3B0LT5uYW1lLCAqdmFsdWUsIG9wdC0+ZXJyKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaW52YWxpZCAlcyBzcGVjaWZpZWQgKCVpKSAlc1xuIiwKKwkJb3B0LT5uYW1lLCAqdmFsdWUsIG9wdC0+ZXJyKTsKIAkqdmFsdWUgPSBvcHQtPmRlZjsKIAlyZXR1cm4gLTE7CiB9CkBAIC0xNTcsMTIgKzE1NiwxMSBAQAogICovCiB2b2lkIF9fZGV2aW5pdCBhdGwxX2NoZWNrX29wdGlvbnMoc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlcikKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJaW50IGJkID0gYWRhcHRlci0+YmRfbnVtYmVyOwogCWlmIChiZCA+PSBBVEwxX01BWF9OSUMpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogd2FybmluZzogbm8gY29uZmlndXJhdGlvbiBmb3IgYm9hcmQgIyVpXG4iLAotCQkJYXRsMV9kcml2ZXJfbmFtZSwgYmQpOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiB1c2luZyBkZWZhdWx0cyBmb3IgYWxsIHZhbHVlc1xuIiwKLQkJCWF0bDFfZHJpdmVyX25hbWUpOworCQlkZXZfbm90aWNlKCZwZGV2LT5kZXYsICJubyBjb25maWd1cmF0aW9uIGZvciBib2FyZCMlaVxuIiwgYmQpOworCQlkZXZfbm90aWNlKCZwZGV2LT5kZXYsICJ1c2luZyBkZWZhdWx0cyBmb3IgYWxsIHZhbHVlc1xuIik7CiAJfQogCXsJCQkvKiBJbnRlcnJ1cHQgTW9kZXJhdGUgVGltZXIgKi8KIAkJc3RydWN0IGF0bDFfb3B0aW9uIG9wdCA9IHsKQEAgLTE3Nyw3ICsxNzUsNyBAQAogCQlpbnQgdmFsOwogCQlpZiAobnVtX2ludF9tb2RfdGltZXIgPiBiZCkgewogCQkJdmFsID0gaW50X21vZF90aW1lcltiZF07Ci0JCQlhdGwxX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0KTsKKwkJCWF0bDFfdmFsaWRhdGVfb3B0aW9uKCZ2YWwsICZvcHQsIHBkZXYpOwogCQkJYWRhcHRlci0+aW10ID0gKHUxNikgdmFsOwogCQl9IGVsc2UKIAkJCWFkYXB0ZXItPmltdCA9ICh1MTYpIChvcHQuZGVmKTsKQEAgLTE5Nyw3ICsxOTUsNyBAQAogCQlpbnQgdmFsOwogCQlpZiAobnVtX2ZsYXNoX3ZlbmRvciA+IGJkKSB7CiAJCQl2YWwgPSBmbGFzaF92ZW5kb3JbYmRdOwotCQkJYXRsMV92YWxpZGF0ZV9vcHRpb24oJnZhbCwgJm9wdCk7CisJCQlhdGwxX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBwZGV2KTsKIAkJCWFkYXB0ZXItPmh3LmZsYXNoX3ZlbmRvciA9ICh1OCkgdmFsOwogCQl9IGVsc2UKIAkJCWFkYXB0ZXItPmh3LmZsYXNoX3ZlbmRvciA9ICh1OCkgKG9wdC5kZWYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRwLmMgYi9kcml2ZXJzL25ldC9hdHAuYwppbmRleCAxOGFiYTgzLi44MmQ3OGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdHAuYworKysgYi9kcml2ZXJzL25ldC9hdHAuYwpAQCAtMzEsMTAgKzMxLDggQEAKIAogKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbkFbXSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPQogImF0cC5jOnYxLjA5PWFjIDIwMDIvMTAvMDEgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiI7Ci1zdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uQltdID0KLSIgIGh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvYXRwLmh0bWxcbiI7CiAKIC8qIFRoZSB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMuCiAgICBUaGVzZSBtYXkgYmUgbW9kaWZpZWQgd2hlbiBhIGRyaXZlciBtb2R1bGUgaXMgbG9hZGVkLiovCkBAIC0zMjQsNyArMzIyLDcgQEAKIAogI2lmbmRlZiBNT0RVTEUKIAlpZiAobmV0X2RlYnVnKQotCQlwcmludGsoS0VSTl9JTkZPICIlcyIgS0VSTl9JTkZPICIlcyIsIHZlcnNpb25BLCB2ZXJzaW9uQik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CiAjZW5kaWYKIAogCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFBvY2tldCBhZGFwdGVyIGZvdW5kIGF0ICUjM2x4LCBJUlEgJWQsIFNBUFJPTSAiCkBAIC05MjYsNyArOTI0LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYXRwX2luaXRfbW9kdWxlKHZvaWQpIHsKIAlpZiAoZGVidWcpCQkJCQkvKiBFbWl0IHZlcnNpb24gZXZlbiBpZiBubyBjYXJkcyBkZXRlY3RlZC4gKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiIEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uQSwgdmVyc2lvbkIpOworCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOwogCXJldHVybiBhdHBfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibWFjLmMgYi9kcml2ZXJzL25ldC9ibWFjLmMKaW5kZXggNDYxMjcyNS4uOWI4ZDdkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JtYWMuYwpAQCAtMTI2MCw5ICsxMjYwLDEwIEBACiAJCXByaW50ayhLRVJOX0VSUiAiQk1BQzogY2FuJ3QgdXNlLCBuZWVkIDMgYWRkcnMgYW5kIDMgaW50cnNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JcHJvcF9hZGRyID0gZ2V0X3Byb3BlcnR5KG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAibWFjLWFkZHJlc3MiLCBOVUxMKTsKKwlwcm9wX2FkZHIgPSBvZl9nZXRfcHJvcGVydHkobWFjaW9fZ2V0X29mX25vZGUobWRldiksCisJCQkibWFjLWFkZHJlc3MiLCBOVUxMKTsKIAlpZiAocHJvcF9hZGRyID09IE5VTEwpIHsKLQkJcHJvcF9hZGRyID0gZ2V0X3Byb3BlcnR5KG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLAorCQlwcm9wX2FkZHIgPSBvZl9nZXRfcHJvcGVydHkobWFjaW9fZ2V0X29mX25vZGUobWRldiksCiAJCQkJImxvY2FsLW1hYy1hZGRyZXNzIiwgTlVMTCk7CiAJCWlmIChwcm9wX2FkZHIgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJCTUFDOiBDYW4ndCBnZXQgbWFjLWFkZHJlc3NcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5jIGIvZHJpdmVycy9uZXQvYm54Mi5jCmluZGV4IDg4YjMzYzYuLmRhN2MzYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ibngyLmMKQEAgLTQ3ODYsMTkgKzQ3ODYsNiBAQAogCiAJYm54Ml9uZXRpZl9zdGFydChicCk7CiB9Ci0KLS8qIENhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwotc3RhdGljIHZvaWQKLWJueDJfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1aW50MTZfdCB2aWQpCi17Ci0Jc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWJueDJfbmV0aWZfc3RvcChicCk7Ci0Jdmxhbl9ncm91cF9zZXRfZGV2aWNlKGJwLT52bGdycCwgdmlkLCBOVUxMKTsKLQlibngyX3NldF9yeF9tb2RlKGRldik7Ci0KLQlibngyX25ldGlmX3N0YXJ0KGJwKTsKLX0KICNlbmRpZgogCiAvKiBDYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrLgpAQCAtNjQ1Myw3ICs2NDQwLDYgQEAKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKICNpZmRlZiBCQ01fVkxBTgogCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGJueDJfdmxhbl9yeF9yZWdpc3RlcjsKLQlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBibngyX3ZsYW5fcnhfa2lsbF92aWQ7CiAjZW5kaWYKIAlkZXYtPnBvbGwgPSBibngyX3BvbGw7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZibngyX2V0aHRvb2xfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggNzI0YmNlNS4uMjIzNTE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0zNDYxLDcgKzM0NjEsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhc2hpbmcgUG9saWNpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgotICogSGFzaCBmb3IgdGhlIHRoZSBvdXRwdXQgZGV2aWNlIGJhc2VkIHVwb24gbGF5ZXIgMyBhbmQgbGF5ZXIgNCBkYXRhLiBJZgorICogSGFzaCBmb3IgdGhlIG91dHB1dCBkZXZpY2UgYmFzZWQgdXBvbiBsYXllciAzIGFuZCBsYXllciA0IGRhdGEuIElmCiAgKiB0aGUgcGFja2V0IGlzIGEgZnJhZyBvciBub3QgVENQIG9yIFVEUCwganVzdCB1c2UgbGF5ZXIgMyBkYXRhLiAgSWYgaXQgaXMKICAqIGFsdG9nZXRoZXIgbm90IElQLCBtaW1pYyBib25kX3htaXRfaGFzaF9wb2xpY3lfbDIoKQogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKaW5kZXggNGFlYzc0Ny4uNTliOTk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwpAQCAtNDkxOSw3ICs0OTE5LDEwIEBACiAJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfU0VSUjsKIAlwY2lfY21kIHw9IFBDSV9DT01NQU5EX1BBUklUWTsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOwotCXBjaV9zZXRfbXdpKHBkZXYpOworCWlmIChwY2lfc2V0X213aShwZGV2KSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkNvdWxkIG5vdCBlbmFibGUgTVdJIGZvciAlc1xuIiwKKwkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwogCS8qCiAJICogT24gc29tZSBhcmNoaXRlY3R1cmVzLCB0aGUgZGVmYXVsdCBjYWNoZSBsaW5lIHNpemUgc2V0CiAJICogYnkgcGNpX3NldF9td2kgcmVkdWNlcyBwZXJmb3JhbW5jZS4gIFdlIGhhdmUgdG8gaW5jcmVhc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYwppbmRleCAxMjVjOWIxLi4yMzFjZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jCkBAIC04ODMsMTUgKzg4Myw2IEBACiAJdDFfc2V0X3ZsYW5fYWNjZWwoYWRhcHRlciwgZ3JwICE9IE5VTEwpOwogCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+YXN5bmNfbG9jayk7CiB9Ci0KLXN0YXRpYyB2b2lkIHZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQotewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gZGV2LT5wcml2OwotCi0Jc3Bpbl9sb2NrX2lycSgmYWRhcHRlci0+YXN5bmNfbG9jayk7Ci0Jdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsYW5fZ3JwLCB2aWQsIE5VTEwpOwotCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+YXN5bmNfbG9jayk7Ci19CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC0xMDk5LDcgKzEwOTAsNiBAQAogCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PQogCQkJCU5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKIAkJCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9IHZsYW5fcnhfcmVnaXN0ZXI7Ci0JCQluZXRkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSB2bGFuX3J4X2tpbGxfdmlkOwogI2VuZGlmCiAKIAkJCS8qIFQyMDQ6IGRpc2FibGUgVFNPICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3N1bmkxeDEwZ2V4cF9yZWdzLmggYi9kcml2ZXJzL25ldC9jaGVsc2lvL3N1bmkxeDEwZ2V4cF9yZWdzLmgKaW5kZXggMjY5ZDA5Ny4uZDBmODdkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zdW5pMXgxMGdleHBfcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc3VuaTF4MTBnZXhwX3JlZ3MuaApAQCAtMTA1LDcgKzEwNSw3IEBACiAjZGVmaW5lIG1TVU5JMXgxMEdFWFBfUkVHX1JYWEdfRVhBQ1RfTUFUQ0hfQUREUl9MT1coZmlsdGVySWQpICgweDIwNEEgKyBtU1VOSTF4MTBHRVhQX01BQ19GSUxURVJfT0ZGU0VUKGZpbHRlcklkKSkKICNkZWZpbmUgbVNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSX01JRChmaWx0ZXJJZCkgKDB4MjA0QiArIG1TVU5JMXgxMEdFWFBfTUFDX0ZJTFRFUl9PRkZTRVQoZmlsdGVySWQpKQogI2RlZmluZSBtU1VOSTF4MTBHRVhQX1JFR19SWFhHX0VYQUNUX01BVENIX0FERFJfSElHSChmaWx0ZXJJZCkoMHgyMDRDICsgbVNVTkkxeDEwR0VYUF9NQUNfRklMVEVSX09GRlNFVChmaWx0ZXJJZCkpCi0jZGVmaW5lIG1TVU5JMXgxMEdFWFBfUkVHX1JYWEdfRVhBQ1RfTUFUQ0hfVklEKGZpbHRlcklkKSAgICAgICgweDIwNjIgKyBtU1VOSTF4MTBHRVhQX01BQ19WSURfRklMVEVSX09GRlNFVChmaWx0ZXJJZCkKKyNkZWZpbmUgbVNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9WSUQoZmlsdGVySWQpICAgICAgKDB4MjA2MiArIG1TVU5JMXgxMEdFWFBfTUFDX1ZJRF9GSUxURVJfT0ZGU0VUKGZpbHRlcklkKSkKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19SWFhHX0VYQUNUX01BVENIX0FERFJfMF9MT1cgICAgICAgICAgICAgICAgICAgICAweDIwNEEKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19SWFhHX0VYQUNUX01BVENIX0FERFJfMF9NSUQgICAgICAgICAgICAgICAgICAgICAweDIwNEIKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19SWFhHX0VYQUNUX01BVENIX0FERFJfMF9ISUdIICAgICAgICAgICAgICAgICAgICAweDIwNEMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwppbmRleCA2N2I0YjIxLi4xYjIwZjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCkBAIC0yMDY3LDExICsyMDY3LDYgQEAKIAl0M19zeW5jaHJvbml6ZV9yeChhZGFwdGVyLCBwaSk7CiB9CiAKLXN0YXRpYyB2b2lkIHZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQotewotCS8qIG5vdGhpbmcgKi8KLX0KLQogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCBjeGdiX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTI0MDksNyArMjQwNCw2IEBACiAKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CiAJCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9IHZsYW5fcnhfcmVnaXN0ZXI7Ci0JCW5ldGRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IHZsYW5fcnhfa2lsbF92aWQ7CiAKIAkJbmV0ZGV2LT5vcGVuID0gY3hnYl9vcGVuOwogCQluZXRkZXYtPnN0b3AgPSBjeGdiX2Nsb3NlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKaW5kZXggOTVkODU0ZS4uYjI1NzdmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCkBAIC05MzIsOCArOTMyLDYgQEAKIAkvKiBLaWNrIHRoZSBsYW5jZTogdHJhbnNtaXQgbm93ICovCiAJd3JpdGVyZWcoJmxsLT5yZHAsIExFX0MwX0lORUEgfCBMRV9DMF9URE1EKTsKIAotCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwotCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZWZ4eC5jIGIvZHJpdmVycy9uZXQvZGVmeHguYwppbmRleCA1NzFkODJmLi43ZGYyM2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZWZ4eC5jCisrKyBiL2RyaXZlcnMvbmV0L2RlZnh4LmMKQEAgLTU2Niw2ICs1NjYsNyBAQAogCQlicC0+YmFzZS5tZW0gPSBpb3JlbWFwX25vY2FjaGUoYmFyX3N0YXJ0LCBiYXJfbGVuKTsKIAkJaWYgKCFicC0+YmFzZS5tZW0pIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgTU1JT1xuIiwgcHJpbnRfbmFtZSk7CisJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfb3V0X3JlZ2lvbjsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuYyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCmluZGV4IDhjYzExNzQuLjI2NGZhMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCkBAIC03Nyw5ICs3Nyw2IEBACiAKICNkZWZpbmUgRE05MDAwX1BIWQkJMHg0MAkvKiBQSFkgYWRkcmVzcyAweDAxICovCiAKLSNkZWZpbmUgVFJVRQkJCTEKLSNkZWZpbmUgRkFMU0UJCQkwCi0KICNkZWZpbmUgQ0FSRE5BTUUgImRtOTAwMCIKICNkZWZpbmUgUEZYIENBUkROQU1FICI6ICIKIApAQCAtNjAxLDcgKzU5OCw3IEBACiAJcHJpbnRrKCIlczogbm90IGZvdW5kICglZCkuXG4iLCBDQVJETkFNRSwgcmV0KTsKIAogCWRtOTAwMF9yZWxlYXNlX2JvYXJkKHBkZXYsIGRiKTsKLQlrZnJlZShuZGV2KTsKKwlmcmVlX25ldGRldihuZGV2KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04OTYsNyArODkzLDcgQEAKIAlzdHJ1Y3QgZG05MDAwX3J4aGRyIHJ4aGRyOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTggcnhieXRlLCAqcmRwdHI7Ci0JaW50IEdvb2RQYWNrZXQ7CisJYm9vbCBHb29kUGFja2V0OwogCWludCBSeExlbjsKIAogCS8qIENoZWNrIHBhY2tldCByZWFkeSBvciBub3QgKi8KQEAgLTkxOCw3ICs5MTUsNyBAQAogCQkJcmV0dXJuOwogCiAJCS8qIEEgcGFja2V0IHJlYWR5IG5vdyAgJiBHZXQgc3RhdHVzL2xlbmd0aCAqLwotCQlHb29kUGFja2V0ID0gVFJVRTsKKwkJR29vZFBhY2tldCA9IHRydWU7CiAJCXdyaXRlYihETTkwMDBfTVJDTUQsIGRiLT5pb19hZGRyKTsKIAogCQkoZGItPmluYmxrKShkYi0+aW9fZGF0YSwgJnJ4aGRyLCBzaXplb2YocnhoZHIpKTsKQEAgLTkyNyw3ICs5MjQsNyBAQAogCiAJCS8qIFBhY2tldCBTdGF0dXMgY2hlY2sgKi8KIAkJaWYgKFJ4TGVuIDwgMHg0MCkgewotCQkJR29vZFBhY2tldCA9IEZBTFNFOworCQkJR29vZFBhY2tldCA9IGZhbHNlOwogCQkJUFJJTlRLMSgiQmFkIFBhY2tldCByZWNlaXZlZCAocnVudClcbiIpOwogCQl9CiAKQEAgLTkzNiw3ICs5MzMsNyBAQAogCQl9CiAKIAkJaWYgKHJ4aGRyLlJ4U3RhdHVzICYgMHhiZjAwKSB7Ci0JCQlHb29kUGFja2V0ID0gRkFMU0U7CisJCQlHb29kUGFja2V0ID0gZmFsc2U7CiAJCQlpZiAocnhoZHIuUnhTdGF0dXMgJiAweDEwMCkgewogCQkJCVBSSU5USzEoImZpZm8gZXJyb3JcbiIpOwogCQkJCWRiLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwpAQCAtMTE5Myw3ICsxMTkwLDcgQEAKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCWRtOTAwMF9yZWxlYXNlX2JvYXJkKHBkZXYsIChib2FyZF9pbmZvX3QgKikgbmRldi0+cHJpdik7Ci0Ja2ZyZWUobmRldik7CQkvKiBmcmVlIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlmcmVlX25ldGRldihuZGV2KTsJCS8qIGZyZWUgZGV2aWNlIHN0cnVjdHVyZSAqLwogCiAJUFJJTlRLMSgiY2xlYW5fbW9kdWxlKCkgZXhpdFxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCmluZGV4IGE5ZWE2N2UuLjE2YTZlZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaApAQCAtMzMzLDExICszMzMsOSBAQAogCXN0cnVjdCBlMTAwMF90eF9yaW5nIHRlc3RfdHhfcmluZzsKIAlzdHJ1Y3QgZTEwMDBfcnhfcmluZyB0ZXN0X3J4X3Jpbmc7CiAKLQogCWludCBtc2dfZW5hYmxlOwotI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAJYm9vbGVhbl90IGhhdmVfbXNpOwotI2VuZGlmCisKIAkvKiB0byBub3QgbWVzcyB1cCBjYWNoZSBhbGlnbm1lbnQsIGFsd2F5cyBhZGQgdG8gdGhlIGJvdHRvbSAqLwogCWJvb2xlYW5fdCB0c29fZm9yY2U7CiAJYm9vbGVhbl90IHNtYXJ0X3Bvd2VyX2Rvd247CS8qIHBoeSBzbWFydCBwb3dlciBkb3duICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggM2EwM2E3NC4uY2Y4YWY5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMTU4LDkgKzE1OCw3IEBACiBzdGF0aWMgaW50IGUxMDAwX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOwogc3RhdGljIGludCBlMTAwMF9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApOwogc3RhdGljIGlycXJldHVybl90IGUxMDAwX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSk7Ci0jaWZkZWYgQ09ORklHX1BDSV9NU0kKIHN0YXRpYyBpcnFyZXR1cm5fdCBlMTAwMF9pbnRyX21zaShpbnQgaXJxLCB2b2lkICpkYXRhKTsKLSNlbmRpZgogc3RhdGljIGJvb2xlYW5fdCBlMTAwMF9jbGVhbl90eF9pcnEoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZyk7CiAjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKQEAgLTMwMCwzMSArMjk4LDI2IEBACiBzdGF0aWMgaW50IGUxMDAwX3JlcXVlc3RfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JaW50IGZsYWdzLCBlcnIgPSAwOworCXZvaWQgKCpoYW5kbGVyKSA9ICZlMTAwMF9pbnRyOworCWludCBpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKKwlpbnQgZXJyOwogCi0JZmxhZ3MgPSBJUlFGX1NIQVJFRDsKLSNpZmRlZiBDT05GSUdfUENJX01TSQogCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkgewotCQlhZGFwdGVyLT5oYXZlX21zaSA9IFRSVUU7Ci0JCWlmICgoZXJyID0gcGNpX2VuYWJsZV9tc2koYWRhcHRlci0+cGRldikpKSB7Ci0JCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCQkgIlVuYWJsZSB0byBhbGxvY2F0ZSBNU0kgaW50ZXJydXB0IEVycm9yOiAlZFxuIiwgZXJyKTsKLQkJCWFkYXB0ZXItPmhhdmVfbXNpID0gRkFMU0U7CisJCWFkYXB0ZXItPmhhdmVfbXNpID0gIXBjaV9lbmFibGVfbXNpKGFkYXB0ZXItPnBkZXYpOworCQlpZiAoYWRhcHRlci0+aGF2ZV9tc2kpIHsKKwkJCWhhbmRsZXIgPSAmZTEwMDBfaW50cl9tc2k7CisJCQlpcnFfZmxhZ3MgPSAwOwogCQl9CiAJfQotCWlmIChhZGFwdGVyLT5oYXZlX21zaSkgewotCQlmbGFncyAmPSB+SVJRRl9TSEFSRUQ7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgJmUxMDAwX2ludHJfbXNpLCBmbGFncywKLQkJICAgICAgICAgICAgICAgICAgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpOwotCQlpZiAoZXJyKQotCQkJRFBSSU5USyhQUk9CRSwgRVJSLAotCQkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0IEVycm9yOiAlZFxuIiwgZXJyKTsKLQl9IGVsc2UKLSNlbmRpZgotCWlmICgoZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCAmZTEwMDBfaW50ciwgZmxhZ3MsCi0JICAgICAgICAgICAgICAgICAgICAgICBuZXRkZXYtPm5hbWUsIG5ldGRldikpKQorCisJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCBoYW5kbGVyLCBpcnFfZmxhZ3MsIG5ldGRldi0+bmFtZSwKKwkgICAgICAgICAgICAgICAgICBuZXRkZXYpOworCWlmIChlcnIpIHsKKwkJaWYgKGFkYXB0ZXItPmhhdmVfbXNpKQorCQkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOwogCQlEUFJJTlRLKFBST0JFLCBFUlIsCiAJCSAgICAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBpbnRlcnJ1cHQgRXJyb3I6ICVkXG4iLCBlcnIpOworCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC0zMzUsMTAgKzMyOCw4IEBACiAKIAlmcmVlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIG5ldGRldik7CiAKLSNpZmRlZiBDT05GSUdfUENJX01TSQogCWlmIChhZGFwdGVyLT5oYXZlX21zaSkKIAkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOwotI2VuZGlmCiB9CiAKIC8qKgpAQCAtMTE1MSwxMyArMTE0MiwxNiBAQAogCSAgICAhZTEwMDBfY2hlY2tfbW5nX21vZGUoJmFkYXB0ZXItPmh3KSkKIAkJZTEwMDBfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CiAKLQlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKLQlpZiAoKGVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpKSkKLQkJZ290byBlcnJfcmVnaXN0ZXI7Ci0KIAkvKiB0ZWxsIHRoZSBzdGFjayB0byBsZWF2ZSB1cyBhbG9uZSB1bnRpbCBlMTAwMF9vcGVuKCkgaXMgY2FsbGVkICovCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKKwluZXRpZl9wb2xsX2Rpc2FibGUobmV0ZGV2KTsKKyNlbmRpZgorCisJc3RyY3B5KG5ldGRldi0+bmFtZSwgImV0aCVkIik7CisJaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KSkpCisJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJRFBSSU5USyhQUk9CRSwgSU5GTywgIkludGVsKFIpIFBSTy8xMDAwIE5ldHdvcmsgQ29ubmVjdGlvblxuIik7CiAKQEAgLTEyMTQsNyArMTIwOCw3IEBACiAJaW50IGk7CiAjZW5kaWYKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+cmVzZXRfdGFzayk7CiAKIAllMTAwMF9yZWxlYXNlX21hbmFnZWFiaWxpdHkoYWRhcHRlcik7CiAKQEAgLTEzMzQsNyArMTMyOCwxMCBAQAogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrKTsKICNlbmRpZgogCi0JYXRvbWljX3NldCgmYWRhcHRlci0+aXJxX3NlbSwgMSk7CisJLyogRXhwbGljaXRseSBkaXNhYmxlIElSUSBzaW5jZSB0aGUgTklDIGNhbiBiZSBpbiBhbnkgc3RhdGUuICovCisJYXRvbWljX3NldCgmYWRhcHRlci0+aXJxX3NlbSwgMCk7CisJZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CisKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+c3RhdHNfbG9jayk7CiAKIAlzZXRfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKTsKQEAgLTM3NDQsNyArMzc0MSw2IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7CiB9Ci0jaWZkZWYgQ09ORklHX1BDSV9NU0kKIAogLyoqCiAgKiBlMTAwMF9pbnRyX21zaSAtIEludGVycnVwdCBIYW5kbGVyCkBAIC0zODEwLDcgKzM4MDYsNiBAQAogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQotI2VuZGlmCiAKIC8qKgogICogZTEwMDBfaW50ciAtIEludGVycnVwdCBIYW5kbGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lZXByby5jIGIvZHJpdmVycy9uZXQvZWVwcm8uYwppbmRleCAzOTY1NGUxLi40NzY4MDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lZXByby5jCisrKyBiL2RyaXZlcnMvbmV0L2VlcHJvLmMKQEAgLTExMjYsNyArMTEyNiw3IEBACiAJcHJpbnRrIChLRVJOX0VSUiAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCwgJXM/XG4iLCBkZXYtPm5hbWUsCiAJCSJuZXR3b3JrIGNhYmxlIHByb2JsZW0iKTsKIAkvKiBUaGlzIGlzIG5vdCBhIGR1cGxpY2F0ZS4gT25lIG1lc3NhZ2UgZm9yIHRoZSBjb25zb2xlLAotCSAgIG9uZSBmb3IgdGhlIHRoZSBsb2cgZmlsZSAgKi8KKwkgICBvbmUgZm9yIHRoZSBsb2cgZmlsZSAgKi8KIAlwcmludGsgKEtFUk5fREVCVUcgIiVzOiB0cmFuc21pdCB0aW1lZCBvdXQsICVzP1xuIiwgZGV2LT5uYW1lLAogCQkibmV0d29yayBjYWJsZSBwcm9ibGVtIik7CiAJZWVwcm9fY29tcGxldGVfc2VscmVzZXQoaW9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VlcHJvMTAwLmMgYi9kcml2ZXJzL25ldC9lZXBybzEwMC5jCmluZGV4IDZjMjY3YzMuLjk4MDAzNDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lZXBybzEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VlcHJvMTAwLmMKQEAgLTI4LDcgKzI4LDcgQEAKICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdmVyc2lvbiA9Ci0iZWVwcm8xMDAuYzp2MS4wOWotdCA5LzI5Lzk5IERvbmFsZCBCZWNrZXIgaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay9lZXBybzEwMC5odG1sXG4iCisiZWVwcm8xMDAuYzp2MS4wOWotdCA5LzI5Lzk5IERvbmFsZCBCZWNrZXJcbiIKICJlZXBybzEwMC5jOiAkUmV2aXNpb246IDEuMzYgJCAyMDAwLzExLzE3IE1vZGlmaWVkIGJ5IEFuZHJleSBWLiBTYXZvY2hraW4gPHNhd0BzYXcuc3cuY29tLnNnPiBhbmQgb3RoZXJzXG4iOwogCiAvKiBBIGZldyB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMgdGhhdCBhcHBseSB0byBhbGwgYm9hcmRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhLmggYi9kcml2ZXJzL25ldC9laGVhL2VoZWEuaAppbmRleCA2MDI4NzJkLi5lODVhOTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWEuaAorKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWEuaApAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJlaGVhIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiRUhFQV8wMDU4IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiRUhFQV8wMDYxIgogCiAjZGVmaW5lIEVIRUFfTVNHX0RFRkFVTFQgKE5FVElGX01TR19MSU5LIHwgTkVUSUZfTVNHX1RJTUVSIFwKIAl8IE5FVElGX01TR19SWF9FUlIgfCBORVRJRl9NU0dfVFhfRVJSKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKaW5kZXggYzdhNTYxNC4uMTUyYmIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCkBAIC00MjgsNyArNDI4LDcgQEAKIAkJCQl9CiAJCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCAoKGNoYXIqKWNxZSkgKyA2NCwKIAkJCQkJICAgICAgIGNxZS0+bnVtX2J5dGVzX3RyYW5zZmVyZWQgLSA0KTsKLQkJCQllaGVhX2ZpbGxfc2tiKGRldiwgc2tiLCBjcWUpOworCQkJCWVoZWFfZmlsbF9za2IocG9ydC0+bmV0ZGV2LCBza2IsIGNxZSk7CiAJCQl9IGVsc2UgaWYgKHJxID09IDIpIHsgIC8qIFJRMiAqLwogCQkJCXNrYiA9IGdldF9za2JfYnlfaW5kZXgoc2tiX2Fycl9ycTIsCiAJCQkJCQkgICAgICAgc2tiX2Fycl9ycTJfbGVuLCBjcWUpOwpAQCAtMTgwMywxMCArMTgwMywxMCBAQAogCXUzMiB0bXA7CiAKIAlpZiAoKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSAmJgotCSAgICAoc2tiLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSkgewotCQl0Y3AgPSAoc3RydWN0IHRjcGhkciopKHNrYi0+bmgucmF3ICsgKHNrYi0+bmguaXBoLT5paGwgKiA0KSk7CisJICAgIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApKSB7CisJCXRjcCA9IChzdHJ1Y3QgdGNwaGRyKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyAoaXBfaGRyKHNrYiktPmlobCAqIDQpKTsKIAkJdG1wID0gKHRjcC0+c291cmNlICsgKHRjcC0+ZGVzdCA8PCAxNikpICUgMzE7Ci0JCXRtcCArPSBza2ItPm5oLmlwaC0+ZGFkZHIgJSAzMTsKKwkJdG1wICs9IGlwX2hkcihza2IpLT5kYWRkciAlIDMxOwogCQlyZXR1cm4gdG1wICUgbnVtX3FwczsKIAl9CiAJZWxzZQpAQCAtMjYwMywxNCArMjYwMywxMyBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGhlYV9kbjsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmV0aF9kbiA9IE5VTEw7Ci0KLQl1MzIgKmRuX2xvZ19wb3J0X2lkOworCWNvbnN0IHUzMiAqZG5fbG9nX3BvcnRfaWQ7CiAJaW50IGkgPSAwOwogCiAJbGhlYV9kbiA9IGFkYXB0ZXItPmVidXNfZGV2LT5vZmRldi5ub2RlOwogCXdoaWxlICgoZXRoX2RuID0gb2ZfZ2V0X25leHRfY2hpbGQobGhlYV9kbiwgZXRoX2RuKSkpIHsKIAotCQlkbl9sb2dfcG9ydF9pZCA9ICh1MzIqKWdldF9wcm9wZXJ0eShldGhfZG4sICJpYm0saGVhLXBvcnQtbm8iLAorCQlkbl9sb2dfcG9ydF9pZCA9IG9mX2dldF9wcm9wZXJ0eShldGhfZG4sICJpYm0saGVhLXBvcnQtbm8iLAogCQkJCQkJICAgIE5VTEwpOwogCQlpZiAoIWRuX2xvZ19wb3J0X2lkKSB7CiAJCQllaGVhX2Vycm9yKCJiYWQgZGV2aWNlIG5vZGU6IGV0aF9kbiBuYW1lPSVzIiwKQEAgLTI2NDUsMTIgKzI2NDQsMTIgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmxoZWFfZG47CiAJc3RydWN0IGRldmljZV9ub2RlICpldGhfZG4gPSBOVUxMOwotCXUzMiAqZG5fbG9nX3BvcnRfaWQ7CisJY29uc3QgdTMyICpkbl9sb2dfcG9ydF9pZDsKIAogCWxoZWFfZG4gPSBhZGFwdGVyLT5lYnVzX2Rldi0+b2ZkZXYubm9kZTsKIAl3aGlsZSAoKGV0aF9kbiA9IG9mX2dldF9uZXh0X2NoaWxkKGxoZWFfZG4sIGV0aF9kbikpKSB7CiAKLQkJZG5fbG9nX3BvcnRfaWQgPSAodTMyKilnZXRfcHJvcGVydHkoZXRoX2RuLCAiaWJtLGhlYS1wb3J0LW5vIiwKKwkJZG5fbG9nX3BvcnRfaWQgPSBvZl9nZXRfcHJvcGVydHkoZXRoX2RuLCAiaWJtLGhlYS1wb3J0LW5vIiwKIAkJCQkJCSAgICBOVUxMKTsKIAkJaWYgKGRuX2xvZ19wb3J0X2lkKQogCQkJaWYgKCpkbl9sb2dfcG9ydF9pZCA9PSBsb2dpY2FsX3BvcnRfaWQpCkBAIC0yNzc0LDcgKzI3NzMsNyBAQAogCQkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyOwotCXU2NCAqYWRhcHRlcl9oYW5kbGU7CisJY29uc3QgdTY0ICphZGFwdGVyX2hhbmRsZTsKIAlpbnQgcmV0OwogCiAJaWYgKCFkZXYgfHwgIWRldi0+b2ZkZXYubm9kZSkgewpAQCAtMjc5MSw3ICsyNzkwLDcgQEAKIAogCWFkYXB0ZXItPmVidXNfZGV2ID0gZGV2OwogCi0JYWRhcHRlcl9oYW5kbGUgPSAodTY0KilnZXRfcHJvcGVydHkoZGV2LT5vZmRldi5ub2RlLCAiaWJtLGhlYS1oYW5kbGUiLAorCWFkYXB0ZXJfaGFuZGxlID0gb2ZfZ2V0X3Byb3BlcnR5KGRldi0+b2ZkZXYubm9kZSwgImlibSxoZWEtaGFuZGxlIiwKIAkJCQkJICAgIE5VTEwpOwogCWlmIChhZGFwdGVyX2hhbmRsZSkKIAkJYWRhcHRlci0+aGFuZGxlID0gKmFkYXB0ZXJfaGFuZGxlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jIGIvZHJpdmVycy9uZXQvZXBpYzEwMC5jCmluZGV4IDRlM2YxNGMuLjVlNTE3OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VwaWMxMDAuYworKysgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKQEAgLTkzLDggKzkzLDYgQEAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KIERSVl9OQU1FICIuYzp2MS4xMSAxLzcvMjAwMSBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iOwogc3RhdGljIGNoYXIgdmVyc2lvbjJbXSBfX2RldmluaXRkYXRhID0KLSIgIGh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvZXBpYzEwMC5odG1sXG4iOwotc3RhdGljIGNoYXIgdmVyc2lvbjNbXSBfX2RldmluaXRkYXRhID0KICIgICh1bm9mZmljaWFsIDIuNC54IGtlcm5lbCBwb3J0LCB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiKVxuIjsKIAogTU9EVUxFX0FVVEhPUigiRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4iKTsKQEAgLTMyMyw4ICszMjEsOCBAQAogI2lmbmRlZiBNT0RVTEUKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQotCQlwcmludGsgKEtFUk5fSU5GTyAiJXMiIEtFUk5fSU5GTyAiJXMiIEtFUk5fSU5GTyAiJXMiLAotCQkJdmVyc2lvbiwgdmVyc2lvbjIsIHZlcnNpb24zKTsKKwkJcHJpbnRrIChLRVJOX0lORk8gIiVzIiBLRVJOX0lORk8gIiVzIiwKKwkJCXZlcnNpb24sIHZlcnNpb24yKTsKICNlbmRpZgogCiAJY2FyZF9pZHgrKzsKQEAgLTE1OTYsOCArMTU5NCw4IEBACiB7CiAvKiB3aGVuIGEgbW9kdWxlLCB0aGlzIGlzIHByaW50ZWQgd2hldGhlciBvciBub3QgZGV2aWNlcyBhcmUgZm91bmQgaW4gcHJvYmUgKi8KICNpZmRlZiBNT0RVTEUKLQlwcmludGsgKEtFUk5fSU5GTyAiJXMiIEtFUk5fSU5GTyAiJXMiIEtFUk5fSU5GTyAiJXMiLAotCQl2ZXJzaW9uLCB2ZXJzaW9uMiwgdmVyc2lvbjMpOworCXByaW50ayAoS0VSTl9JTkZPICIlcyIgS0VSTl9JTkZPICIlcyIsCisJCXZlcnNpb24sIHZlcnNpb24yKTsKICNlbmRpZgogCiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmVwaWNfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlY184eHgvZmVjX21haW4uYyBiL2RyaXZlcnMvbmV0L2ZlY184eHgvZmVjX21haW4uYwppbmRleCA4OGVmZTk3Li5lNTUwMmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWNfOHh4L2ZlY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZmVjXzh4eC9mZWNfbWFpbi5jCkBAIC01NTAsNyArNTUwLDcgQEAKIAkJCQlza2JuID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuICsgMik7CiAJCQkJaWYgKHNrYm4gIT0gTlVMTCkgewogCQkJCQlza2JfcmVzZXJ2ZShza2JuLCAyKTsJLyogYWxpZ24gSVAgaGVhZGVyICovCi0JCQkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiCisJCQkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLAogCQkJCQkJCQkgIHNrYm4tPmRhdGEsCiAJCQkJCQkJCSAgcGt0X2xlbik7CiAJCQkJCS8qIHN3YXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggN2EwMTgwMi4uMzI3ODhjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogI2RlZmluZSBOVlJFR19JUlFfVFhfRk9SQ0VECQkweDAxMDAKICNkZWZpbmUgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IJCTB4ODAwMAogI2RlZmluZSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQJMHgwMGRmCi0jZGVmaW5lIE5WUkVHX0lSUU1BU0tfQ1BVCQkweDAwNDAKKyNkZWZpbmUgTlZSRUdfSVJRTUFTS19DUFUJCTB4MDA2MAogI2RlZmluZSBOVlJFR19JUlFfVFhfQUxMCQkoTlZSRUdfSVJRX1RYX0VSUnxOVlJFR19JUlFfVFhfT0t8TlZSRUdfSVJRX1RYX0ZPUkNFRCkKICNkZWZpbmUgTlZSRUdfSVJRX1JYX0FMTAkJKE5WUkVHX0lSUV9SWF9FUlJPUnxOVlJFR19JUlFfUlh8TlZSRUdfSVJRX1JYX05PQlVGfE5WUkVHX0lSUV9SWF9GT1JDRUQpCiAjZGVmaW5lIE5WUkVHX0lSUV9PVEhFUgkJCShOVlJFR19JUlFfVElNRVJ8TlZSRUdfSVJRX0xJTkt8TlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpCkBAIC00NjA1LDEyICs0NjA1LDcgQEAKIAl3cml0ZWwobnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShkZXYpICsgTnZSZWdUeFJ4Q29udHJvbCk7CiAKIAlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKLX07Ci0KLXN0YXRpYyB2b2lkIG52X3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQotewotCS8qIG5vdGhpbmcgdG8gZG8gKi8KLX07Cit9CiAKIC8qIFRoZSBtZ210IHVuaXQgYW5kIGRyaXZlciB1c2UgYSBzZW1hcGhvcmUgdG8gYWNjZXNzIHRoZSBwaHkgZHVyaW5nIGluaXQgKi8KIHN0YXRpYyBpbnQgbnZfbWdtdF9hY3F1aXJlX3NlbWEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTQ5NTYsNyArNDk1MSw2IEBACiAJCW5wLT52bGFuY3RsX2JpdHMgPSBOVlJFR19WTEFOQ09OVFJPTF9FTkFCTEU7CiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX1RYOwogCQlkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBudl92bGFuX3J4X3JlZ2lzdGVyOwotCQlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBudl92bGFuX3J4X2tpbGxfdmlkOwogCX0KIAogCW5wLT5tc2lfZmxhZ3MgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYwppbmRleCBkMGYyODk4Li43NTQwOTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKIAlmZXAtPnJpbmdfbWVtX2FkZHIgPSBjcG1fZHBhbGxvYygoZnBpLT50eF9yaW5nICsgZnBpLT5yeF9yaW5nKSAqCiAJCQkJCSBzaXplb2YoY2JkX3QpLCA4KTsKLQlpZiAoSVNfRFBFUlIoZmVwLT5yaW5nX21lbV9hZGRyKSkKKwlpZiAoSVNfRVJSX1ZBTFVFKGZlcC0+cmluZ19tZW1fYWRkcikpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZmVwLT5yaW5nX2Jhc2UgPSBjcG1fZHByYW1fYWRkcihmZXAtPnJpbmdfbWVtX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IGI2NjZhMGMuLjY4MjJiZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTE0MCw3ICsxNDAsNiBAQAogc3RhdGljIGludCBnZmFyX3Byb2Nlc3NfZnJhbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbmd0aCk7CiBzdGF0aWMgdm9pZCBnZmFyX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJICAgICAgICAgICAgICAgIHN0cnVjdCB2bGFuX2dyb3VwICpncnApOwotc3RhdGljIHZvaWQgZ2Zhcl92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQxNl90IHZpZCk7CiB2b2lkIGdmYXJfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgZ2Zhcl9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGdmYXJfY2xlYXJfZXhhY3RfbWF0Y2goc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0yODQsNyArMjgzLDYgQEAKIAogCWlmIChwcml2LT5laW5mby0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19WTEFOKSB7CiAJCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGdmYXJfdmxhbl9yeF9yZWdpc3RlcjsKLQkJZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gZ2Zhcl92bGFuX3J4X2tpbGxfdmlkOwogCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogCkBAIC0xMDI1LDYgKzEwMjMsMTUgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCisJLyogVGhlIHBvd2VycGMtc3BlY2lmaWMgZWllaW8oKSBpcyB1c2VkLCBhcyB3bWIoKSBoYXMgdG9vIHN0cm9uZworCSAqIHNlbWFudGljcyAoaXQgcmVxdWlyZXMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gY2FjaGVhYmxlIGFuZAorCSAqIHVuY2FjaGVhYmxlIG1hcHBpbmdzLCB3aGljaCBlaWVpbyBkb2Vzbid0IHByb3ZpZGUgYW5kIHdoaWNoIHdlCisJICogZG9uJ3QgbmVlZCksIHRodXMgcmVxdWlyaW5nIGEgbW9yZSBleHBlbnNpdmUgc3luYyBpbnN0cnVjdGlvbi4gIEF0CisJICogc29tZSBwb2ludCwgdGhlIHNldCBvZiBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgYmFycmllciBmdW5jdGlvbnMKKwkgKiBzaG91bGQgYmUgZXhwYW5kZWQgdG8gaW5jbHVkZSB3ZWFrZXIgYmFycmllcnMuCisJICovCisKKwllaWVpbygpOwogCXR4YmRwLT5zdGF0dXMgPSBzdGF0dXM7CiAKIAkvKiBJZiB0aGlzIHdhcyB0aGUgbGFzdCBCRCBpbiB0aGUgcmluZywgdGhlIG5leHQgb25lICovCkBAIC0xMTI0LDIwICsxMTMxLDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBnZmFyX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDE2X3QgdmlkKQotewotCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhsb2NrLCBmbGFncyk7Ci0KLQl2bGFuX2dyb3VwX3NldF9kZXZpY2UocHJpdi0+dmxncnAsIHZpZCwgTlVMTCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeGxvY2ssIGZsYWdzKTsKLX0KLQotCiBzdGF0aWMgaW50IGdmYXJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpbnQgdGVtcHNpemUsIHRlbXB2YWw7CkBAIC0xMzAxLDYgKzEyOTQsNyBAQAogCWJkcC0+bGVuZ3RoID0gMDsKIAogCS8qIE1hcmsgdGhlIGJ1ZmZlciBlbXB0eSAqLworCWVpZWlvKCk7CiAJYmRwLT5zdGF0dXMgfD0gKFJYQkRfRU1QVFkgfCBSWEJEX0lOVEVSUlVQVCk7CiAKIAlyZXR1cm4gc2tiOwpAQCAtMTQ4NCw2ICsxNDc4LDcgQEAKIAliZHAgPSBwcml2LT5jdXJfcng7CiAKIAl3aGlsZSAoISgoYmRwLT5zdGF0dXMgJiBSWEJEX0VNUFRZKSB8fCAoLS1yeF93b3JrX2xpbWl0IDwgMCkpKSB7CisJCXJtYigpOwogCQlza2IgPSBwcml2LT5yeF9za2J1ZmZbcHJpdi0+c2tiX2N1cnJ4XTsKIAogCQlpZiAoIShiZHAtPnN0YXR1cyAmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vS2NvbmZpZwppbmRleCA2ZTkwNjE5Li4zNmQyYzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL0tjb25maWcKQEAgLTE0MCw3ICsxNDAsNyBAQAogCSAgbW9kZW1zIHRoYXQgY29ubmVjdCB0byBhIHNlcmlhbCBpbnRlcmZhY2UuIFRoZSBkcml2ZXIgc3VwcG9ydHMgdGhlCiAJICBzZXIxMiBkZXNpZ24gaW4gaGFsZi1kdXBsZXggbW9kZS4gVGhpcyBpcyB0aGUgb2xkIGRyaXZlci4gIEl0IGlzCiAJICBzdGlsbCBwcm92aWRlZCBpbiBjYXNlIHlvdXIgc2VyaWFsIGludGVyZmFjZSBjaGlwIGRvZXMgbm90IHdvcmsgd2l0aAotCSAgdGhlIGZ1bGwtZHVwbGV4IGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgZGVwcmVjaWF0ZWQuICBUbyBjb25maWd1cmUKKwkgIHRoZSBmdWxsLWR1cGxleCBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIGRlcHJlY2F0ZWQuICBUbyBjb25maWd1cmUKIAkgIHRoZSBkcml2ZXIsIHVzZSB0aGUgc2V0aGRsYyB1dGlsaXR5IGF2YWlsYWJsZSBpbiB0aGUgc3RhbmRhcmQgYXgyNQogCSAgdXRpbGl0aWVzIHBhY2thZ2UuIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgbW9kZW1zLCBzZWUKIAkgIDxodHRwOi8vd3d3LmJheWNvbS5kZS8+IGFuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggODExOGE2Ny4uOGNhYTU5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC0zMDA1LDcgKzMwMDUsNyBAQAogCXJldHVybiBjYXJkcyA+IDAgPyAwIDogLUVOT0RFVjsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGhwMTAwX2lzYV9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBocDEwMF9pc2FfY2xlYW51cCh2b2lkKQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmMKaW5kZXggNTAwMzVlYi4uZjc1MmU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2NvcmUuYwpAQCAtOTI2LDcgKzkyNiw3IEBACiAJaW50IGR1cGxleCA9IHIgJiBFTUFDX01SMV9GREUgPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCWludCBzcGVlZCwgcGF1c2UsIGFzeW1fcGF1c2U7CiAKLQlpZiAociAmIChFTUFDX01SMV9NRl8xMDAwIHwgRU1BQ19NUjFfTUZfMTAwMEdQQ1MpKQorCWlmIChyICYgRU1BQ19NUjFfTUZfMTAwMCkKIAkJc3BlZWQgPSBTUEVFRF8xMDAwOwogCWVsc2UgaWYgKHIgJiBFTUFDX01SMV9NRl8xMDApCiAJCXNwZWVkID0gU1BFRURfMTAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfbWFsLmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19tYWwuYwppbmRleCA2YzBmMDcxLi5jYWJkOTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19tYWwuYworKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19tYWwuYwpAQCAtNTksOCArNTksNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdCBtYWxfdW5yZWdpc3Rlcl9jb21tYWMoc3RydWN0IGlibV9vY3BfbWFsICptYWwsCi0JCQkJICBzdHJ1Y3QgbWFsX2NvbW1hYyAqY29tbWFjKQordm9pZCBtYWxfdW5yZWdpc3Rlcl9jb21tYWMoc3RydWN0IGlibV9vY3BfbWFsICptYWwsIHN0cnVjdCBtYWxfY29tbWFjICpjb21tYWMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19tYWwuaCBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5oCmluZGV4IDQwN2QyYWMuLjY0YmMzMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5oCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX21hbC5oCkBAIC0yMjMsOCArMjIzLDcgQEAKIAogaW50IG1hbF9yZWdpc3Rlcl9jb21tYWMoc3RydWN0IGlibV9vY3BfbWFsICptYWwsCiAJCQlzdHJ1Y3QgbWFsX2NvbW1hYyAqY29tbWFjKSBfX2luaXQ7Ci12b2lkIG1hbF91bnJlZ2lzdGVyX2NvbW1hYyhzdHJ1Y3QgaWJtX29jcF9tYWwgKm1hbCwKLQkJCSAgIHN0cnVjdCBtYWxfY29tbWFjICpjb21tYWMpIF9fZXhpdDsKK3ZvaWQgbWFsX3VucmVnaXN0ZXJfY29tbWFjKHN0cnVjdCBpYm1fb2NwX21hbCAqbWFsLCBzdHJ1Y3QgbWFsX2NvbW1hYyAqY29tbWFjKTsKIGludCBtYWxfc2V0X3JjYnMoc3RydWN0IGlibV9vY3BfbWFsICptYWwsIGludCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiAvKiBSZXR1cm5zIEJEIHJpbmcgb2Zmc2V0IGZvciBhIHBhcnRpY3VsYXIgY2hhbm5lbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcGh5LmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19waHkuYwppbmRleCA5MDc0Zjc2Li5lNTc4NjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19waHkuYworKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19waHkuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8YXNtL29jcC5oPgogCisjaW5jbHVkZSAiaWJtX2VtYWNfY29yZS5oIgogI2luY2x1ZGUgImlibV9lbWFjX3BoeS5oIgogCiBzdGF0aWMgaW5saW5lIGludCBwaHlfcmVhZChzdHJ1Y3QgbWlpX3BoeSAqcGh5LCBpbnQgcmVnKQpAQCAtMzQsMTEgKzM1LDM5IEBACiAJcGh5LT5tZGlvX3dyaXRlKHBoeS0+ZGV2LCBwaHktPmFkZHJlc3MsIHJlZywgdmFsKTsKIH0KIAotaW50IG1paV9yZXNldF9waHkoc3RydWN0IG1paV9waHkgKnBoeSkKKy8qCisgKiBwb2xscyBNSUlfQk1DUiB1bnRpbCBCTUNSX1JFU0VUIGJpdCBjbGVhcnMgb3Igb3BlcmF0aW9uIHRpbWVzIG91dC4KKyAqCisgKiByZXR1cm5zOgorICoJPj0gMCA9PiBzdWNjZXNzLCB2YWx1ZSBpbiBCTUNSIHJldHVybmVkIHRvIGNhbGxlcgorICoJLUVCVVNZID0+IGZhaWx1cmUsIFJFU0VUIGJpdCBuZXZlciBjbGVhcmVkCisgKglvdGhlcndpc2UgPT4gZmFpbHVyZSwgbG93ZXIgbGV2ZWwgUEhZIHJlYWQgZmFpbGVkCisgKi8KK3N0YXRpYyBpbnQgbWlpX3NwaW5fcmVzZXRfY29tcGxldGUoc3RydWN0IG1paV9waHkgKnBoeSkKIHsKIAlpbnQgdmFsOwogCWludCBsaW1pdCA9IDEwMDAwOwogCisJd2hpbGUgKGxpbWl0LS0pIHsKKwkJdmFsID0gcGh5X3JlYWQocGh5LCBNSUlfQk1DUik7CisJCWlmICh2YWwgPj0gMCAmJiAhKHZhbCAmIEJNQ1JfUkVTRVQpKQorCQkJcmV0dXJuIHZhbDsJLyogc3VjY2VzcyAqLworCQl1ZGVsYXkoMTApOworCX0KKwlpZiAodmFsICYgQk1DUl9SRVNFVCkKKwkJdmFsID0gLUVCVVNZOworCisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJlbWFjJWQ6IFBIWSByZXNldCB0aW1lb3V0ICglZClcbiIsIAorCQkgICAgICAgKChzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqKXBoeS0+ZGV2LT5wcml2KS0+ZGVmLT5pbmRleCwKKwkJICAgICAgIHZhbCk7CisJcmV0dXJuIHZhbDsJCSAgICAKK30KKworaW50IG1paV9yZXNldF9waHkoc3RydWN0IG1paV9waHkgKnBoeSkKK3sKKwlpbnQgdmFsOworCiAJdmFsID0gcGh5X3JlYWQocGh5LCBNSUlfQk1DUik7CiAJdmFsICY9IH5CTUNSX0lTT0xBVEU7CiAJdmFsIHw9IEJNQ1JfUkVTRVQ7CkBAIC00NiwxNiArNzUsMTEgQEAKIAogCXVkZWxheSgzMDApOwogCi0Jd2hpbGUgKGxpbWl0LS0pIHsKLQkJdmFsID0gcGh5X3JlYWQocGh5LCBNSUlfQk1DUik7Ci0JCWlmICh2YWwgPj0gMCAmJiAodmFsICYgQk1DUl9SRVNFVCkgPT0gMCkKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMTApOwotCX0KLQlpZiAoKHZhbCAmIEJNQ1JfSVNPTEFURSkgJiYgbGltaXQgPiAwKQorCXZhbCA9IG1paV9zcGluX3Jlc2V0X2NvbXBsZXRlKHBoeSk7CisJaWYgKHZhbCA+PSAwICYmICh2YWwgJiBCTUNSX0lTT0xBVEUpKQogCQlwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgdmFsICYgfkJNQ1JfSVNPTEFURSk7CiAKLQlyZXR1cm4gbGltaXQgPD0gMDsKKwlyZXR1cm4gdmFsIDwgMDsKIH0KIAogc3RhdGljIGludCBnZW5taWlfc2V0dXBfYW5lZyhzdHJ1Y3QgbWlpX3BoeSAqcGh5LCB1MzIgYWR2ZXJ0aXNlKQpAQCAtMTAyLDggKzEyNiwxNCBAQAogCX0KIAogCS8qIFN0YXJ0L1Jlc3RhcnQgYW5lZyAqLwotCWN0bCA9IHBoeV9yZWFkKHBoeSwgTUlJX0JNQ1IpOwotCWN0bCB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKKwkvKiBvbiBzb21lIFBIWXMgKGUuZy4gTmF0aW9uYWwgRFA4Mzg0MykgYSB3cml0ZSB0byBNSUlfQURWRVJUSVNFCisJICogY2F1c2VzIEJNQ1JfUkVTRVQgdG8gYmUgc2V0IG9uIHRoZSBuZXh0IHJlYWQgb2YgTUlJX0JNQ1IsIHdoaWNoCisJICogaWYgbm90IGNoZWNrZWQgZm9yIGNhdXNlcyB0aGUgUEhZIHRvIGJlIHJlc2V0IGJlbG93ICovCisJY3RsID0gbWlpX3NwaW5fcmVzZXRfY29tcGxldGUocGh5KTsKKwlpZiAoY3RsIDwgMCkKKwkJcmV0dXJuIGN0bDsKKworCWN0bCB8PSBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQ7CiAJcGh5X3dyaXRlKHBoeSwgTUlJX0JNQ1IsIGN0bCk7CiAKIAlyZXR1cm4gMDsKQEAgLTExOCwxMyArMTQ4LDEzIEBACiAJcGh5LT5kdXBsZXggPSBmZDsKIAlwaHktPnBhdXNlID0gcGh5LT5hc3ltX3BhdXNlID0gMDsKIAorCS8qIEZpcnN0IHJlc2V0IHRoZSBQSFkgKi8KKwltaWlfcmVzZXRfcGh5KHBoeSk7CisKIAljdGwgPSBwaHlfcmVhZChwaHksIE1JSV9CTUNSKTsKIAlpZiAoY3RsIDwgMCkKIAkJcmV0dXJuIGN0bDsKLQljdGwgJj0gfihCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMCB8IEJNQ1JfQU5FTkFCTEUpOwotCi0JLyogRmlyc3QgcmVzZXQgdGhlIFBIWSAqLwotCXBoeV93cml0ZShwaHksIE1JSV9CTUNSLCBjdGwgfCBCTUNSX1JFU0VUKTsKKwljdGwgJj0gfihCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMCB8IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX1NQRUVEMTAwMCk7CiAKIAkvKiBTZWxlY3Qgc3BlZWQgJiBkdXBsZXggKi8KIAlzd2l0Y2ggKHNwZWVkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5jIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcmdtaWkuYwppbmRleCA1M2QyODFjLi45ZGJiNWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3JnbWlpLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCW91dF9iZTMyKCZkZXYtPmJhc2UtPnNzciwgc3NyKTsKIH0KIAotdm9pZCBfX2V4aXQgX19yZ21paV9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCkKK3ZvaWQgX19yZ21paV9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCkKIHsKIAlzdHJ1Y3QgaWJtX29jcF9yZ21paSAqZGV2ID0gb2NwX2dldF9kcnZkYXRhKG9jcGRldik7CiAJQlVHX09OKCFkZXYgfHwgZGV2LT51c2VycyA9PSAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3JnbWlpLmggYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5oCmluZGV4IDExN2VhNDguLjk3MWU0NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3JnbWlpLmgKKysrIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcmdtaWkuaApAQCAtMzcsNyArMzcsNyBAQAogI2lmZGVmIENPTkZJR19JQk1fRU1BQ19SR01JSQogaW50IHJnbWlpX2F0dGFjaCh2b2lkICplbWFjKSBfX2luaXQ7CiAKLXZvaWQgX19yZ21paV9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCkgX19leGl0Owordm9pZCBfX3JnbWlpX2Zpbmkoc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldiwgaW50IGlucHV0KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCByZ21paV9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCkKIHsKIAlpZiAob2NwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfdGFoLmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguYwppbmRleCBlMjg3YjQ1Li4zYzJkNWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguYworKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguYwpAQCAtNjMsNyArNjMsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdCBfX3RhaF9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYpCit2b2lkIF9fdGFoX2Zpbmkoc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldikKIHsKIAlzdHJ1Y3QgdGFoX3JlZ3MgKnAgPSBvY3BfZ2V0X2RydmRhdGEob2NwZGV2KTsKIAlCVUdfT04oIXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfdGFoLmggYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguaAppbmRleCAzODE1Mzk0Li5jY2Y2NDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguaAorKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY190YWguaApAQCAtNTUsNyArNTUsNyBAQAogI2lmZGVmIENPTkZJR19JQk1fRU1BQ19UQUgKIGludCB0YWhfYXR0YWNoKHZvaWQgKmVtYWMpIF9faW5pdDsKIAotdm9pZCBfX3RhaF9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYpIF9fZXhpdDsKK3ZvaWQgX190YWhfZmluaShzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YWhfZmluaShzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2KQogewogCWlmIChvY3BkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmMKaW5kZXggMzdkYzhmMy4uMmMwZmRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3ptaWkuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJb3V0X2JlMzIoJmRldi0+YmFzZS0+c3NyLCBzc3IpOwogfQogCi12b2lkIF9fZXhpdCBfX3ptaWlfZmluaShzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2LCBpbnQgaW5wdXQpCit2b2lkIF9fem1paV9maW5pKHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCkKIHsKIAlzdHJ1Y3QgaWJtX29jcF96bWlpICpkZXYgPSBvY3BfZ2V0X2RydmRhdGEob2NwZGV2KTsKIAlCVUdfT04oIWRldiB8fCBkZXYtPnVzZXJzID09IDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5oIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5oCmluZGV4IDk3MmUzYTQuLmZhZDZkOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3ptaWkuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNpZmRlZiBDT05GSUdfSUJNX0VNQUNfWk1JSQogaW50IHptaWlfYXR0YWNoKHZvaWQgKmVtYWMpIF9faW5pdDsKIAotdm9pZCBfX3ptaWlfZmluaShzdHJ1Y3Qgb2NwX2RldmljZSAqb2NwZGV2LCBpbnQgaW5wdXQpIF9fZXhpdDsKK3ZvaWQgX196bWlpX2Zpbmkoc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldiwgaW50IGlucHV0KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCB6bWlpX2Zpbmkoc3RydWN0IG9jcF9kZXZpY2UgKm9jcGRldiwgaW50IGlucHV0KQogewogCWlmIChvY3BkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcgYi9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcKaW5kZXggN2M4Y2NjMC4uODI5ZGE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZwpAQCAtMTQxLDYgKzE0MSwyMCBAQAogCSAgVG8gYWN0aXZhdGUgc3VwcG9ydCBmb3IgQUNUaVNZUyBJUi0yMDBMIGRvbmdsZSB5b3Ugd2lsbCBoYXZlIHRvCiAJICBzdGFydCBpcmF0dGFjaCBsaWtlIHRoaXM6ICJpcmF0dGFjaCAtZCBhY3QyMDBsIi4KIAorY29uZmlnIEtJTkdTVU5fRE9OR0xFCisJdHJpc3RhdGUgIktpbmdTdW4vRG9uU2hpbmUgRFMtNjIwIElyREEtVVNCIGRvbmdsZSIKKwlkZXBlbmRzIG9uIElSREEgJiYgVVNCICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgS2luZ1N1bi9Eb25TaGluZQorCSAgRFMtNjIwIElyREEtVVNCIGJyaWRnZSBkZXZpY2UgZHJpdmVyLgorCisJICBUaGlzIFVTQiBicmlkZ2UgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgSXJEQS1VU0IgZGV2aWNlIGNsYXNzCisJICBzcGVjaWZpY2F0aW9uLCBhbmQgdGhlcmVmb3JlIG5lZWRzIGl0cyBvd24gc3BlY2lmaWMgZHJpdmVyLiBUaGlzCisJICBkb25nbGUgc3VwcG9ydHMgU0lSIHNwZWVkIG9ubHkgKDk2MDAgYnBzKS4KKworCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZAorCSAga2luZ3N1bi1zaXIuCisKIGNvbW1lbnQgIk9sZCBTSVIgZGV2aWNlIGRyaXZlcnMiCiAKIGNvbmZpZyBJUlBPUlRfU0lSCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaXJkYS9NYWtlZmlsZQppbmRleCA1YmUwOWYxLi4yMzNhMmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvTWFrZWZpbGUKQEAgLTQ1LDYgKzQ1LDcgQEAKIG9iai0kKENPTkZJR19BQ1QyMDBMX0RPTkdMRSkJKz0gYWN0MjAwbC1zaXIubwogb2JqLSQoQ09ORklHX01BNjAwX0RPTkdMRSkJKz0gbWE2MDAtc2lyLm8KIG9iai0kKENPTkZJR19UT0lNMzIzMl9ET05HTEUpCSs9IHRvaW0zMjMyLXNpci5vCitvYmotJChDT05GSUdfS0lOR1NVTl9ET05HTEUpCSs9IGtpbmdzdW4tc2lyLm8KIAogIyBUaGUgU0lSIGhlbHBlciBtb2R1bGUKIHNpci1kZXYtb2JqcyA6PSBzaXJfZGV2Lm8gc2lyX2RvbmdsZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmggYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmgKaW5kZXggMmFiMTczZC4uMWU2NzcyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuaApAQCAtMTEzLDcgKzExMyw3IEBACiAvKiBSeE92ZXIgIG92ZXJmbG93IGluIFJlY3YgRklGTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIFNpcFJjdiAgcmVjZWl2ZWQgc2VyaWFsIGdhcCAgKG9yIG90aGVyIGNvbmRpdGlvbiB5b3Ugc2V0KSAgICAqLwogLyogSW50ZXJydXB0cyBhcmUgZW5hYmxlZCBieSB3cml0aW5nIGEgb25lIHRvIHRoZSBJRVIgcmVnaXN0ZXIgICovCi0vKiBJbnRlcnJ1cHRzIGFyZSBjbGVhcmVkIGJ5IHdyaXR0aW5nIGEgb25lIHRvIHRoZSBJU1IgcmVnaXN0ZXIgKi8KKy8qIEludGVycnVwdHMgYXJlIGNsZWFyZWQgYnkgd3JpdGluZyBhIG9uZSB0byB0aGUgSVNSIHJlZ2lzdGVyICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIDYuIFRoZSByZW1haW5pbmcgcmVnaXN0ZXJzOiAweDYgYW5kIDB4MyBhcHBlYXIgdG8gYmUgICAgICAgICAqLwogLyogICAgcmVzZXJ2ZWQgcGFydHMgb2YgMTYgb3IgMzIgYml0IHJlZ2lzdGVyc3RoZSByZW1haW5kZXIgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3NDI5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwpAQCAtMCwwICsxLDY1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZpbGVuYW1lOiAgICAgIGtpbmdzdW4tc2lyLmMKKyogVmVyc2lvbjogICAgICAgMC4xLjEKKyogRGVzY3JpcHRpb246ICAgSXJkYSBLaW5nU3VuL0RvblNoaW5lIFVTQiBEb25nbGUKKyogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsCisqIEF1dGhvcjogICAgICAgIEFsZXggVmlsbGFj77+9cyBMYXNzbyA8YV92aWxsYWNpc0BwYWxvc2FudG8uY29tPgorKgorKiAgCUJhc2VkIG9uIHN0aXI0MjAwIGFuZCBtY3M3NzgwIGRyaXZlcnMsIHdpdGggKHN0cmFuZ2U/KSBkaWZmZXJlbmNlcworKgorKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKgorKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyoJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyoJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKglHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKglZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKglhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKglGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhpcyBpcyBteSBjdXJyZW50ICgyMDA3LTA0LTI1KSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGRvbmdsZSBpcyBzdXBwb3NlZAorICogdG8gd29yay4gVGhpcyBpcyBiYXNlZCBvbiByZXZlcnNlLWVuZ2luZWVyaW5nIGFuZCBleGFtaW5hdGlvbiBvZiB0aGUgcGFja2V0CisgKiBkYXRhIHNlbnQgYW5kIHJlY2VpdmVkIGJ5IHRoZSBXaW5YUCBkcml2ZXIgdXNpbmcgVVNCU25vb3B5LiBGZWVsIGZyZWUgdG8KKyAqIHVwZGF0ZSBoZXJlIGFzIG1vcmUgb2YgdGhpcyBkb25nbGUgaXMga25vd246CisgKgorICogR2VuZXJhbDogVW5saWtlIHRoZSBvdGhlciBVU0IgSXJEQSBkb25nbGVzLCB0aGlzIHBhcnRpY3VsYXIgZG9uZ2xlIGV4cG9zZXMsCisgKiBub3QgdHdvIGJ1bGsgKGluIGFuZCBvdXQpIGVuZHBvaW50cywgYnV0IHR3byAqaW50ZXJydXB0KiBvbmVzLiBUaGlzIGRvbmdsZSwKKyAqIGxpa2UgdGhlIGJ1bGsgYmFzZWQgb25lcyAoc3RpcjQyMDAuYyBhbmQgbWNzNzc4MC5jKSwgcmVxdWlyZXMgcG9sbGluZyBpbgorICogb3JkZXIgdG8gcmVjZWl2ZSBkYXRhLgorICogVHJhbnNtaXNzaW9uOiBKdXN0IGxpa2Ugc3RpcjQyMDAsIHRoaXMgZG9uZ2xlIHVzZXMgYSByYXcgc3RyZWFtIG9mIGRhdGEsCisgKiB3aGljaCBuZWVkcyB0byBiZSB3cmFwcGVkIGFuZCBlc2NhcGVkIGluIGEgc2ltaWxhciB3YXkgYXMgaW4gc3RpcjQyMDAuYy4KKyAqIFJlY2VwdGlvbjogUG9sbC1iYXNlZCwgYXMgaW4gc3RpcjQyMDAuIEVhY2ggcmVhZCByZXR1cm5zIHRoZSBjb250ZW50cyBvZiBhCisgKiA4LWJ5dGUgYnVmZmVyLCBvZiB3aGljaCB0aGUgZmlyc3QgYnl0ZSAoTFNCKSBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBieXRlcworICogKDEtNykgb2YgdmFsaWQgZGF0YSBjb250YWluZWQgd2l0aGluIHRoZSByZW1haW5pbmcgNyBieXRlcy4gRm9yIGV4YW1wbGUsIGlmCisgKiB0aGUgYnVmZmVyIGhhZCB0aGUgZm9sbG93aW5nIGNvbnRlbnRzOgorICogIDA2IGZmIGZmIGZmIGMwIDAxIDA0IGFhCisgKiBUaGlzIG1lYW5zIHRoYXQgKDA2KSB0aGVyZSBhcmUgNiBieXRlcyBvZiB2YWxpZCBkYXRhLiBUaGUgYnl0ZSAweGFhIGF0IHRoZQorICogZW5kIGlzIGdhcmJhZ2UgKGxlZnQgb3ZlciBmcm9tIGEgcHJldmlvdXMgcmVjZXB0aW9uKSBhbmQgaXMgZGlzY2FyZGVkLgorICogSWYgYSByZWFkIHJldHVybnMgYW4gImltcG9zc2libGUiIHZhbHVlIGFzIHRoZSBsZW5ndGggb2YgdmFsaWQgZGF0YSAoc3VjaCBhcworICogMHgzNikgaW4gdGhlIGZpcnN0IGJ5dGUsIHRoZW4gdGhlIGJ1ZmZlciBpcyB1bmluaXRpYWxpemVkIChhcyBpcyB0aGUgY2FzZSBvZgorICogZmlyc3QgcGx1Zy1pbikgYW5kIGl0cyBjb250ZW50cyBzaG91bGQgYmUgZGlzY2FyZGVkLiBUaGVyZSBpcyBjdXJyZW50bHkgbm8KKyAqIGV2aWRlbmNlIHRoYXQgdGhlIHRvcCA1IGJpdHMgb2YgdGhlIDFzdCBieXRlIG9mIHRoZSBidWZmZXIgY2FuIGhhdmUgdmFsdWVzCisgKiBvdGhlciB0aGFuIDAgb25jZSByZWNlcHRpb24gYmVnaW5zLgorICogT25jZSB2YWxpZCBieXRlcyBhcmUgY29sbGVjdGVkLCB0aGUgYXNzZW1ibGVkIHN0cmVhbSBpcyBhIHNlcXVlbmNlIG9mCisgKiB3cmFwcGVkIElyREEgZnJhbWVzIHRoYXQgaXMgdW53cmFwcGVkIGFuZCB1bmVzY2FwZWQgYXMgaW4gc3RpcjQyMDAuYy4KKyAqIEJJRyBGQVQgV0FSTklORzogdGhlIGRvbmdsZSBkb2VzICpub3QqIHJlc2V0IHRoZSBSWCBidWZmZXIgaW4gYW55IHdheSBhZnRlcgorICogYSBzdWNjZXNzZnVsIHJlYWQgZnJvbSB0aGUgaG9zdCwgd2hpY2ggbWVhbnMgdGhhdCBpbiBhYnNlbmNlIG9mIGZ1cnRoZXIKKyAqIHJlY2VwdGlvbiwgcmVwZWF0ZWQgcmVhZHMgZnJvbSB0aGUgZG9uZ2xlIHdpbGwgcmV0dXJuIHRoZSBleGFjdCBzYW1lCisgKiBjb250ZW50cyByZXBlYXRlZGx5LiBBdHRlbXB0cyB0byBiZSBzbWFydCBhbmQgY2FjaGUgYSBwcmV2aW91cyByZWFkIHNlZW0KKyAqIHRvIHJlc3VsdCBpbiBjb3JydXB0ZWQgcGFja2V0cywgc28gdGhpcyBkcml2ZXIgZGVwZW5kcyBvbiB0aGUgdW53cmFwIGxvZ2ljCisgKiB0byBzb3J0IG91dCBhbnkgcmVwZWF0ZWQgcmVhZHMuCisgKiBTcGVlZCBjaGFuZ2U6IG5vIGNvbW1hbmRzIG9ic2VydmVkIHNvIGZhciB0byBjaGFuZ2Ugc3BlZWQsIGFzc3VtZWQgZml4ZWQKKyAqIDk2MDBicHMgKFNJUikuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvd3JhcHBlci5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL2NyYy5oPgorCisvKgorICogQWNjb3JkaW5nIHRvIGxzdXNiLCAweDA3YzAgaXMgYXNzaWduZWQgdG8KKyAqICJDb2RlIE1lcmNlbmFyaWVzIEhhcmQtIHVuZCBTb2Z0d2FyZSBHbWJIIgorICovCisjZGVmaW5lIEtJTkdfVkVORE9SX0lEIDB4MDdjMAorI2RlZmluZSBLSU5HX1BST0RVQ1RfSUQgMHg0MjAwCisKKy8qIFRoZXNlIGFyZSB0aGUgY3VycmVudGx5IGtub3duIFVTQiBpZHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkb25nbGVzW10gPSB7CisgICAgLyogS2luZ1N1biBDbyxMdGQgIElyREEvVVNCIEJyaWRnZSAqLworICAgIHsgVVNCX0RFVklDRShLSU5HX1ZFTkRPUl9JRCwgS0lOR19QUk9EVUNUX0lEKSB9LAorICAgIHsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRvbmdsZXMpOworCisjZGVmaW5lIEtJTkdTVU5fTVRUIDB4MDcKKworI2RlZmluZSBLSU5HU1VOX0ZJRk9fU0laRQkJNDA5NgorI2RlZmluZSBLSU5HU1VOX0VQX0lOCQkJMAorI2RlZmluZSBLSU5HU1VOX0VQX09VVAkJCTEKKworc3RydWN0IGtpbmdzdW5fY2IgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7ICAgICAgLyogaW5pdDogcHJvYmVfaXJkYSAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7ICAgICAgLyogbmV0d29yayBsYXllciAqLworCXN0cnVjdCBpcmxhcF9jYiAgICppcmxhcDsgICAgICAgLyogVGhlIGxpbmsgbGF5ZXIgd2UgYXJlIGJpbmRlZCB0byAqLworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwkvKiBuZXR3b3JrIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QgcW9zX2luZm8gICBxb3M7CisKKwlfX3U4CQkgICppbl9idWY7CS8qIHJlY2VpdmUgYnVmZmVyICovCisJX191OAkJICAqb3V0X2J1ZjsJLyogdHJhbnNtaXQgYnVmZmVyICovCisJX191OAkJICBtYXhfcng7CS8qIG1heC4gYXRvbWljIHJlYWQgZnJvbSBkb25nbGUKKwkJCQkJICAgKHVzdWFsbHkgOCksIGFsc28gc2l6ZSBvZiBpbl9idWYgKi8KKwlfX3U4CQkgIG1heF90eDsJLyogbWF4LiBhdG9taWMgd3JpdGUgdG8gZG9uZ2xlCisJCQkJCSAgICh1c3VhbGx5IDgpICovCisKKwlpb2J1ZmZfdCAgCSAgcnhfYnVmZjsJLyogcmVjZWl2ZSB1bndyYXAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCB0aW1ldmFsCSAgcnhfdGltZTsKKwlzcGlubG9ja190IGxvY2s7CisJaW50IHJlY2VpdmluZzsKKworCV9fdTggZXBfaW47CisJX191OCBlcF9vdXQ7CisKKwlzdHJ1Y3QgdXJiCSAqdHhfdXJiOworCXN0cnVjdCB1cmIJICpyeF91cmI7Cit9OworCisvKiBDYWxsYmFjayB0cmFuc21pc3Npb24gcm91dGluZSAqLworc3RhdGljIHZvaWQga2luZ3N1bl9zZW5kX2lycShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGtpbmdzdW5fY2IgKmtpbmdzdW4gPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGtpbmdzdW4tPm5ldGRldjsKKworCS8qIGluIHByb2Nlc3Mgb2Ygc3RvcHBpbmcsIGp1c3QgZHJvcCBkYXRhICovCisJaWYgKCFuZXRpZl9ydW5uaW5nKGtpbmdzdW4tPm5ldGRldikpIHsKKwkJZXJyKCJraW5nc3VuX3NlbmRfaXJxOiBOZXR3b3JrIG5vdCBydW5uaW5nISIpOworCQlyZXR1cm47CisJfQorCisJLyogdW5saW5rLCBzaHV0ZG93biwgdW5wbHVnLCBvdGhlciBuYXN0aWVzICovCisJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJZXJyKCJraW5nc3VuX3NlbmRfaXJxOiB1cmIgYXN5bmNocm9ub3VzbHkgZmFpbGVkIC0gJWQiLAorCQkgICAgdXJiLT5zdGF0dXMpOworCX0KKwluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBuZXQvY29yZSB3aGVuIG5ldyBmcmFtZSBpcyBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbnQga2luZ3N1bl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qga2luZ3N1bl9jYiAqa2luZ3N1bjsKKwlpbnQgd3JhcGxlbjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChza2IgPT0gTlVMTCB8fCBuZXRkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiB0aGUgSVJEQSB3cmFwcGluZyByb3V0aW5lcyBkb24ndCBkZWFsIHdpdGggbm9uIGxpbmVhciBza2IgKi8KKwlTS0JfTElORUFSX0FTU0VSVChza2IpOworCisJa2luZ3N1biA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzcGluX2xvY2soJmtpbmdzdW4tPmxvY2spOworCisJLyogQXBwZW5kIGRhdGEgdG8gdGhlIGVuZCBvZiB3aGF0ZXZlciBkYXRhIHJlbWFpbnMgdG8gYmUgdHJhbnNtaXR0ZWQgKi8KKwl3cmFwbGVuID0gYXN5bmNfd3JhcF9za2Ioc2tiLAorCQlraW5nc3VuLT5vdXRfYnVmLAorCQlLSU5HU1VOX0ZJRk9fU0laRSk7CisKKwkvKiBDYWxjdWxhdGUgaG93IG11Y2ggZGF0YSBjYW4gYmUgdHJhbnNtaXR0ZWQgaW4gdGhpcyB1cmIgKi8KKwl1c2JfZmlsbF9pbnRfdXJiKGtpbmdzdW4tPnR4X3VyYiwga2luZ3N1bi0+dXNiZGV2LAorCQl1c2Jfc25kaW50cGlwZShraW5nc3VuLT51c2JkZXYsIGtpbmdzdW4tPmVwX291dCksCisJCWtpbmdzdW4tPm91dF9idWYsIHdyYXBsZW4sIGtpbmdzdW5fc2VuZF9pcnEsCisJCWtpbmdzdW4sIDEpOworCisJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihraW5nc3VuLT50eF91cmIsIEdGUF9BVE9NSUMpKSkgeworCQllcnIoImtpbmdzdW5faGFyZF94bWl0OiBmYWlsZWQgdHhfdXJiIHN1Ym1pdDogJWQiLCByZXQpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIC1FTk9ERVY6CisJCWNhc2UgLUVQSVBFOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlraW5nc3VuLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisJCX0KKwl9IGVsc2UgeworCQlraW5nc3VuLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWtpbmdzdW4tPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCX0KKworCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlzcGluX3VubG9jaygma2luZ3N1bi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZWNlaXZlIGNhbGxiYWNrIGZ1bmN0aW9uICovCitzdGF0aWMgdm9pZCBraW5nc3VuX3Jjdl9pcnEoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBraW5nc3VuX2NiICpraW5nc3VuID0gdXJiLT5jb250ZXh0OworCWludCByZXQ7CisKKwkvKiBpbiBwcm9jZXNzIG9mIHN0b3BwaW5nLCBqdXN0IGRyb3AgZGF0YSAqLworCWlmICghbmV0aWZfcnVubmluZyhraW5nc3VuLT5uZXRkZXYpKSB7CisJCWtpbmdzdW4tPnJlY2VpdmluZyA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKiB1bmxpbmssIHNodXRkb3duLCB1bnBsdWcsIG90aGVyIG5hc3RpZXMgKi8KKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQllcnIoImtpbmdzdW5fcmN2X2lycTogdXJiIGFzeW5jaHJvbm91c2x5IGZhaWxlZCAtICVkIiwKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJa2luZ3N1bi0+cmVjZWl2aW5nID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0ga2luZ3N1bi0+bWF4X3J4KSB7CisJCV9fdTggKmJ5dGVzID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCWludCBpOworCisJCS8qIFRoZSB2ZXJ5IGZpcnN0IGJ5dGUgaW4gdGhlIGJ1ZmZlciBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZgorCQkgICB2YWxpZCBkYXRhIGluIHRoZSByZWFkLiBUaGlzIGJ5dGUgbXVzdCBiZSBpbiB0aGUgcmFuZ2UKKwkJICAgMS4ua2luZ3N1bi0+bWF4X3J4IC0xIC4gVmFsdWVzIG91dHNpZGUgdGhpcyByYW5nZSBpbmRpY2F0ZQorCQkgICBhbiB1bmluaXRpYWxpemVkIFJ4IGJ1ZmZlciB3aGVuIHRoZSBkb25nbGUgaGFzIGp1c3QgYmVlbgorCQkgICBwbHVnZ2VkIGluLiAqLworCQlpZiAoYnl0ZXNbMF0gPj0gMSAmJiBieXRlc1swXSA8IGtpbmdzdW4tPm1heF9yeCkgeworCQkJZm9yIChpID0gMTsgaSA8PSBieXRlc1swXTsgaSsrKSB7CisJCQkJYXN5bmNfdW53cmFwX2NoYXIoa2luZ3N1bi0+bmV0ZGV2LAorCQkJCQkJICAma2luZ3N1bi0+c3RhdHMsCisJCQkJCQkgICZraW5nc3VuLT5yeF9idWZmLCBieXRlc1tpXSk7CisJCQl9CisJCQlraW5nc3VuLT5uZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQkJZG9fZ2V0dGltZW9mZGF5KCZraW5nc3VuLT5yeF90aW1lKTsKKwkJCWtpbmdzdW4tPnJlY2VpdmluZyA9CisJCQkJKGtpbmdzdW4tPnJ4X2J1ZmYuc3RhdGUgIT0gT1VUU0lERV9GUkFNRSkKKwkJCQk/IDEgOiAwOworCQl9CisJfSBlbHNlIGlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7CisJCWVycigiJXMoKTogVW5leHBlY3RlZCByZXNwb25zZSBsZW5ndGgsIGV4cGVjdGVkICVkIGdvdCAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIGtpbmdzdW4tPm1heF9yeCwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwl9CisJLyogVGhpcyB1cmIgaGFzIGFscmVhZHkgYmVlbiBmaWxsZWQgaW4ga2luZ3N1bl9uZXRfb3BlbiAqLworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBraW5nc3VuX25ldF9vcGVuIChkZXYpCisgKgorICogICAgTmV0d29yayBkZXZpY2UgaXMgdGFrZW4gdXAuIFVzdWFsbHkgdGhpcyBpcyBkb25lIGJ5ICJpZmNvbmZpZyBpcmRhMCB1cCIKKyAqLworc3RhdGljIGludCBraW5nc3VuX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGtpbmdzdW5fY2IgKmtpbmdzdW4gPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBlcnIgPSAtRU5PTUVNOworCWNoYXIgaHduYW1lWzE2XTsKKworCS8qIEF0IHRoaXMgcG9pbnQsIHVyYnMgYXJlIE5VTEwsIGFuZCBza2IgaXMgTlVMTCAoc2VlIGtpbmdzdW5fcHJvYmUpICovCisJa2luZ3N1bi0+cmVjZWl2aW5nID0gMDsKKworCS8qIEluaXRpYWxpemUgZm9yIFNJUiB0byBjb3B5IGRhdGEgZGlyZWN0bHkgaW50byBza2IuICAqLworCWtpbmdzdW4tPnJ4X2J1ZmYuaW5fZnJhbWUgPSBGQUxTRTsKKwlraW5nc3VuLT5yeF9idWZmLnN0YXRlID0gT1VUU0lERV9GUkFNRTsKKwlraW5nc3VuLT5yeF9idWZmLnRydWVzaXplID0gSVJEQV9TS0JfTUFYX01UVTsKKwlraW5nc3VuLT5yeF9idWZmLnNrYiA9IGRldl9hbGxvY19za2IoSVJEQV9TS0JfTUFYX01UVSk7CisJaWYgKCFraW5nc3VuLT5yeF9idWZmLnNrYikKKwkJZ290byBmcmVlX21lbTsKKworCXNrYl9yZXNlcnZlKGtpbmdzdW4tPnJ4X2J1ZmYuc2tiLCAxKTsKKwlraW5nc3VuLT5yeF9idWZmLmhlYWQgPSBraW5nc3VuLT5yeF9idWZmLnNrYi0+ZGF0YTsKKwlkb19nZXR0aW1lb2ZkYXkoJmtpbmdzdW4tPnJ4X3RpbWUpOworCisJa2luZ3N1bi0+cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtpbmdzdW4tPnJ4X3VyYikKKwkJZ290byBmcmVlX21lbTsKKworCWtpbmdzdW4tPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFraW5nc3VuLT50eF91cmIpCisJCWdvdG8gZnJlZV9tZW07CisKKwkvKgorCSAqIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgc2hvdWxkIGJlIGluaXRpYWxpemVkIHByb3Blcmx5LAorCSAqIE9wZW4gbmV3IElyTEFQIGxheWVyIGluc3RhbmNlIHRvIHRha2UgY2FyZSBvZiB1cy4uLgorCSAqLworCXNwcmludGYoaHduYW1lLCAidXNiIyVkIiwga2luZ3N1bi0+dXNiZGV2LT5kZXZudW0pOworCWtpbmdzdW4tPmlybGFwID0gaXJsYXBfb3BlbihuZXRkZXYsICZraW5nc3VuLT5xb3MsIGh3bmFtZSk7CisJaWYgKCFraW5nc3VuLT5pcmxhcCkgeworCQllcnIoImtpbmdzdW4tc2lyOiBpcmxhcF9vcGVuIGZhaWxlZCIpOworCQlnb3RvIGZyZWVfbWVtOworCX0KKworCS8qIFN0YXJ0IGZpcnN0IHJlY2VwdGlvbiAqLworCXVzYl9maWxsX2ludF91cmIoa2luZ3N1bi0+cnhfdXJiLCBraW5nc3VuLT51c2JkZXYsCisJCQkgIHVzYl9yY3ZpbnRwaXBlKGtpbmdzdW4tPnVzYmRldiwga2luZ3N1bi0+ZXBfaW4pLAorCQkJICBraW5nc3VuLT5pbl9idWYsIGtpbmdzdW4tPm1heF9yeCwKKwkJCSAga2luZ3N1bl9yY3ZfaXJxLCBraW5nc3VuLCAxKTsKKwlraW5nc3VuLT5yeF91cmItPnN0YXR1cyA9IDA7CisJZXJyID0gdXNiX3N1Ym1pdF91cmIoa2luZ3N1bi0+cnhfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyKSB7CisJCWVycigia2luZ3N1bi1zaXI6IGZpcnN0IHVyYi1zdWJtaXQgZmFpbGVkOiAlZCIsIGVycik7CisJCWdvdG8gY2xvc2VfaXJsYXA7CisJfQorCisJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKworCS8qIFNpdHVhdGlvbiBhdCB0aGlzIHBvaW50OgorCSAgIC0gYWxsIHdvcmsgYnVmZmVycyBhbGxvY2F0ZWQKKwkgICAtIHVyYnMgYWxsb2NhdGVkIGFuZCByZWFkeSB0byBmaWxsCisJICAgLSBtYXggcnggcGFja2V0IGtub3duIChpbiBtYXhfcngpCisJICAgLSB1bndyYXAgc3RhdGUgbWFjaGluZSBpbml0aWFsaXplZCwgaW4gc3RhdGUgb3V0c2lkZSBvZiBhbnkgZnJhbWUKKwkgICAtIHJlY2VpdmUgcmVxdWVzdCBpbiBwcm9ncmVzcworCSAgIC0gSXJMQVAgbGF5ZXIgc3RhcnRlZCwgYWJvdXQgdG8gaGFuZCBvdmVyIHBhY2tldHMgdG8gc2VuZAorCSAqLworCisJcmV0dXJuIDA7CisKKyBjbG9zZV9pcmxhcDoKKwlpcmxhcF9jbG9zZShraW5nc3VuLT5pcmxhcCk7CisgZnJlZV9tZW06CisJaWYgKGtpbmdzdW4tPnR4X3VyYikgeworCQl1c2JfZnJlZV91cmIoa2luZ3N1bi0+dHhfdXJiKTsKKwkJa2luZ3N1bi0+dHhfdXJiID0gTlVMTDsKKwl9CisJaWYgKGtpbmdzdW4tPnJ4X3VyYikgeworCQl1c2JfZnJlZV91cmIoa2luZ3N1bi0+cnhfdXJiKTsKKwkJa2luZ3N1bi0+cnhfdXJiID0gTlVMTDsKKwl9CisJaWYgKGtpbmdzdW4tPnJ4X2J1ZmYuc2tiKSB7CisJCWtmcmVlX3NrYihraW5nc3VuLT5yeF9idWZmLnNrYik7CisJCWtpbmdzdW4tPnJ4X2J1ZmYuc2tiID0gTlVMTDsKKwkJa2luZ3N1bi0+cnhfYnVmZi5oZWFkID0gTlVMTDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEZ1bmN0aW9uIGtpbmdzdW5fbmV0X2Nsb3NlIChraW5nc3VuKQorICoKKyAqICAgIE5ldHdvcmsgZGV2aWNlIGlzIHRha2VuIGRvd24uIFVzdWFsbHkgdGhpcyBpcyBkb25lIGJ5CisgKiAgICAiaWZjb25maWcgaXJkYTAgZG93biIKKyAqLworc3RhdGljIGludCBraW5nc3VuX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBraW5nc3VuX2NiICpraW5nc3VuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIFN0b3AgdHJhbnNtaXQgcHJvY2Vzc2luZyAqLworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCS8qIE1vcCB1cCByZWNlaXZlICYmIHRyYW5zbWl0IHVyYidzICovCisJdXNiX2tpbGxfdXJiKGtpbmdzdW4tPnR4X3VyYik7CisJdXNiX2tpbGxfdXJiKGtpbmdzdW4tPnJ4X3VyYik7CisKKwl1c2JfZnJlZV91cmIoa2luZ3N1bi0+dHhfdXJiKTsKKwl1c2JfZnJlZV91cmIoa2luZ3N1bi0+cnhfdXJiKTsKKworCWtpbmdzdW4tPnR4X3VyYiA9IE5VTEw7CisJa2luZ3N1bi0+cnhfdXJiID0gTlVMTDsKKworCWtmcmVlX3NrYihraW5nc3VuLT5yeF9idWZmLnNrYik7CisJa2luZ3N1bi0+cnhfYnVmZi5za2IgPSBOVUxMOworCWtpbmdzdW4tPnJ4X2J1ZmYuaGVhZCA9IE5VTEw7CisJa2luZ3N1bi0+cnhfYnVmZi5pbl9mcmFtZSA9IEZBTFNFOworCWtpbmdzdW4tPnJ4X2J1ZmYuc3RhdGUgPSBPVVRTSURFX0ZSQU1FOworCWtpbmdzdW4tPnJlY2VpdmluZyA9IDA7CisKKwkvKiBTdG9wIGFuZCByZW1vdmUgaW5zdGFuY2Ugb2YgSXJMQVAgKi8KKwlpZiAoa2luZ3N1bi0+aXJsYXApCisJCWlybGFwX2Nsb3NlKGtpbmdzdW4tPmlybGFwKTsKKworCWtpbmdzdW4tPmlybGFwID0gTlVMTDsKKworCXJldHVybiAwOworfQorCisvKgorICogSU9DVExzIDogRXh0cmEgb3V0LW9mLWJhbmQgbmV0d29yayBjb21tYW5kcy4uLgorICovCitzdGF0aWMgaW50IGtpbmdzdW5fbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqcnEsCisJCQkgICAgIGludCBjbWQpCit7CisJc3RydWN0IGlmX2lyZGFfcmVxICppcnEgPSAoc3RydWN0IGlmX2lyZGFfcmVxICopIHJxOworCXN0cnVjdCBraW5nc3VuX2NiICpraW5nc3VuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DU0JBTkRXSURUSDogLyogU2V0IGJhbmR3aWR0aCAqLworCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCisJCS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgc3RpbGwgdGhlcmUgKi8KKwkJaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGtpbmdzdW4tPm5ldGRldikpCisJCQkvKiBObyBvYnNlcnZlZCBjb21tYW5kcyBmb3Igc3BlZWQgY2hhbmdlICovCisJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NTTUVESUFCVVNZOiAvKiBTZXQgbWVkaWEgYnVzeSAqLworCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCisJCS8qIENoZWNrIGlmIHRoZSBJckRBIHN0YWNrIGlzIHN0aWxsIHRoZXJlICovCisJCWlmIChuZXRpZl9ydW5uaW5nKGtpbmdzdW4tPm5ldGRldikpCisJCQlpcmRhX2RldmljZV9zZXRfbWVkaWFfYnVzeShraW5nc3VuLT5uZXRkZXYsIFRSVUUpOworCQlicmVhazsKKworCWNhc2UgU0lPQ0dSRUNFSVZJTkc6CisJCS8qIE9ubHkgYXBwcm94aW1hdGVseSB0cnVlICovCisJCWlycS0+aWZyX3JlY2VpdmluZyA9IGtpbmdzdW4tPnJlY2VpdmluZzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogR2V0IGRldmljZSBzdGF0cyAoZm9yIC9wcm9jL25ldC9kZXYgYW5kIGlmY29uZmlnKQorICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgora2luZ3N1bl9uZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGtpbmdzdW5fY2IgKmtpbmdzdW4gPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiAma2luZ3N1bi0+c3RhdHM7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBVU0Igc3Vic3lzdGVtIGZvciBlYWNoIG5ldyBkZXZpY2UKKyAqIGluIHRoZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyBvdXJzLCBhbmQgaW4KKyAqIHRoaXMgY2FzZSBzdGFydCBoYW5kbGluZyBpdC4KKyAqLworc3RhdGljIGludCBraW5nc3VuX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3Qga2luZ3N1bl9jYiAqa2luZ3N1biA9IE5VTEw7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IE5VTEw7CisJaW50IHJldCA9IC1FTk9NRU07CisJaW50IHBpcGUsIG1heHBfaW4sIG1heHBfb3V0OworCV9fdTggZXBfaW47CisJX191OCBlcF9vdXQ7CisKKwkvKiBDaGVjayB0aGF0IHRoZXJlIHJlYWxseSBhcmUgdHdvIGludGVycnVwdCBlbmRwb2ludHMuCisJICAgQ2hlY2sgYmFzZWQgb24gdGhlIG9uZSBpbiBkcml2ZXJzL3VzYi9pbnB1dC91c2Jtb3VzZS5jCisJICovCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJaWYgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDIpIHsKKwkJZXJyKCJraW5nc3VuLXNpcjogZXhwZWN0ZWQgMiBlbmRwb2ludHMsIGZvdW5kICVkIiwKKwkJICAgIGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbS0lOR1NVTl9FUF9JTl0uZGVzYzsKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKSB7CisJCWVycigia2luZ3N1bi1zaXI6IGVuZHBvaW50IDAgaXMgbm90IGludGVycnVwdCBJTiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwllcF9pbiA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYsIGVwX2luKTsKKwltYXhwX2luID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKwlpZiAobWF4cF9pbiA+IDI1NSB8fCBtYXhwX2luIDw9IDEpIHsKKwkJZXJyKCIlczogZW5kcG9pbnQgMCBoYXMgbWF4IHBhY2tldCBzaXplICVkIG5vdCBpbiByYW5nZSIsCisJCSAgICBfX0ZJTEVfXywgbWF4cF9pbik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbS0lOR1NVTl9FUF9PVVRdLmRlc2M7CisJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaW50X291dChlbmRwb2ludCkpIHsKKwkJZXJyKCJraW5nc3VuLXNpcjogZW5kcG9pbnQgMSBpcyBub3QgaW50ZXJydXB0IE9VVCIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwllcF9vdXQgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwlwaXBlID0gdXNiX3NuZGludHBpcGUoZGV2LCBlcF9vdXQpOworCW1heHBfb3V0ID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKworCS8qIEFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlIGNvbnRhaW5lci4gKi8KKwluZXQgPSBhbGxvY19pcmRhZGV2KHNpemVvZigqa2luZ3N1bikpOworCWlmKCFuZXQpCisJCWdvdG8gZXJyX291dDE7CisKKwlTRVRfTU9EVUxFX09XTkVSKG5ldCk7CisJU0VUX05FVERFVl9ERVYobmV0LCAmaW50Zi0+ZGV2KTsKKwlraW5nc3VuID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlraW5nc3VuLT5pcmxhcCA9IE5VTEw7CisJa2luZ3N1bi0+dHhfdXJiID0gTlVMTDsKKwlraW5nc3VuLT5yeF91cmIgPSBOVUxMOworCWtpbmdzdW4tPmVwX2luID0gZXBfaW47CisJa2luZ3N1bi0+ZXBfb3V0ID0gZXBfb3V0OworCWtpbmdzdW4tPmluX2J1ZiA9IE5VTEw7CisJa2luZ3N1bi0+b3V0X2J1ZiA9IE5VTEw7CisJa2luZ3N1bi0+bWF4X3J4ID0gKF9fdTgpbWF4cF9pbjsKKwlraW5nc3VuLT5tYXhfdHggPSAoX191OCltYXhwX291dDsKKwlraW5nc3VuLT5uZXRkZXYgPSBuZXQ7CisJa2luZ3N1bi0+dXNiZGV2ID0gZGV2OworCWtpbmdzdW4tPnJ4X2J1ZmYuaW5fZnJhbWUgPSBGQUxTRTsKKwlraW5nc3VuLT5yeF9idWZmLnN0YXRlID0gT1VUU0lERV9GUkFNRTsKKwlraW5nc3VuLT5yeF9idWZmLnNrYiA9IE5VTEw7CisJa2luZ3N1bi0+cmVjZWl2aW5nID0gMDsKKwlzcGluX2xvY2tfaW5pdCgma2luZ3N1bi0+bG9jayk7CisKKwkvKiBBbGxvY2F0ZSBpbnB1dCBidWZmZXIgKi8KKwlraW5nc3VuLT5pbl9idWYgPSAoX191OCAqKWttYWxsb2Moa2luZ3N1bi0+bWF4X3J4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtpbmdzdW4tPmluX2J1ZikKKwkJZ290byBmcmVlX21lbTsKKworCS8qIEFsbG9jYXRlIG91dHB1dCBidWZmZXIgKi8KKwlraW5nc3VuLT5vdXRfYnVmID0gKF9fdTggKilrbWFsbG9jKEtJTkdTVU5fRklGT19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtpbmdzdW4tPm91dF9idWYpCisJCWdvdG8gZnJlZV9tZW07CisKKwlwcmludGsoS0VSTl9JTkZPICJLaW5nU3VuL0RvblNoaW5lIElSREEvVVNCIGZvdW5kIGF0IGFkZHJlc3MgJWQsICIKKwkJIlZlbmRvcjogJXgsIFByb2R1Y3Q6ICV4XG4iLAorCSAgICAgICBkZXYtPmRldm51bSwgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkgICAgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCisJLyogSW5pdGlhbGl6ZSBRb1MgZm9yIHRoaXMgZGV2aWNlICovCisJaXJkYV9pbml0X21heF9xb3NfY2FwYWJpbGllcygma2luZ3N1bi0+cW9zKTsKKworCS8qIFRoYXQncyB0aGUgUnggY2FwYWJpbGl0eS4gKi8KKwlraW5nc3VuLT5xb3MuYmF1ZF9yYXRlLmJpdHMgICAgICAgJj0gSVJfOTYwMDsKKwlraW5nc3VuLT5xb3MubWluX3R1cm5fdGltZS5iaXRzICAgJj0gS0lOR1NVTl9NVFQ7CisJaXJkYV9xb3NfYml0c190b192YWx1ZSgma2luZ3N1bi0+cW9zKTsKKworCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLworCW5ldC0+aGFyZF9zdGFydF94bWl0ID0ga2luZ3N1bl9oYXJkX3htaXQ7CisJbmV0LT5vcGVuICAgICAgICAgICAgPSBraW5nc3VuX25ldF9vcGVuOworCW5ldC0+c3RvcCAgICAgICAgICAgID0ga2luZ3N1bl9uZXRfY2xvc2U7CisJbmV0LT5nZXRfc3RhdHMJICAgICA9IGtpbmdzdW5fbmV0X2dldF9zdGF0czsKKwluZXQtPmRvX2lvY3RsICAgICAgICA9IGtpbmdzdW5fbmV0X2lvY3RsOworCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZyZWVfbWVtOworCisJaW5mbygiSXJEQTogUmVnaXN0ZXJlZCBLaW5nU3VuL0RvblNoaW5lIGRldmljZSAlcyIsIG5ldC0+bmFtZSk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGtpbmdzdW4pOworCisJLyogU2l0dWF0aW9uIGF0IHRoaXMgcG9pbnQ6CisJICAgLSBhbGwgd29yayBidWZmZXJzIGFsbG9jYXRlZAorCSAgIC0gdXJicyBub3QgYWxsb2NhdGVkLCBzZXQgdG8gTlVMTAorCSAgIC0gbWF4IHJ4IHBhY2tldCBrbm93biAoaW4gbWF4X3J4KQorCSAgIC0gdW53cmFwIHN0YXRlIG1hY2hpbmUgKHBhcnRpYWxseSkgaW5pdGlhbGl6ZWQsIGJ1dCBza2IgPT0gTlVMTAorCSAqLworCisJcmV0dXJuIDA7CisKK2ZyZWVfbWVtOgorCWlmIChraW5nc3VuLT5vdXRfYnVmKSBrZnJlZShraW5nc3VuLT5vdXRfYnVmKTsKKwlpZiAoa2luZ3N1bi0+aW5fYnVmKSBrZnJlZShraW5nc3VuLT5pbl9idWYpOworCWZyZWVfbmV0ZGV2KG5ldCk7CitlcnJfb3V0MToKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhlIGN1cnJlbnQgZGV2aWNlIGlzIHJlbW92ZWQsIHRoZSBVU0IgbGF5ZXIgdGVsbCB1cyB0byBzaHV0IGl0IGRvd24uLi4KKyAqLworc3RhdGljIHZvaWQga2luZ3N1bl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBraW5nc3VuX2NiICpraW5nc3VuID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmICgha2luZ3N1bikKKwkJcmV0dXJuOworCisJdW5yZWdpc3Rlcl9uZXRkZXYoa2luZ3N1bi0+bmV0ZGV2KTsKKworCS8qIE1vcCB1cCByZWNlaXZlICYmIHRyYW5zbWl0IHVyYidzICovCisJaWYgKGtpbmdzdW4tPnR4X3VyYiAhPSBOVUxMKSB7CisJCXVzYl9raWxsX3VyYihraW5nc3VuLT50eF91cmIpOworCQl1c2JfZnJlZV91cmIoa2luZ3N1bi0+dHhfdXJiKTsKKwkJa2luZ3N1bi0+dHhfdXJiID0gTlVMTDsKKwl9CisJaWYgKGtpbmdzdW4tPnJ4X3VyYiAhPSBOVUxMKSB7CisJCXVzYl9raWxsX3VyYihraW5nc3VuLT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIoa2luZ3N1bi0+cnhfdXJiKTsKKwkJa2luZ3N1bi0+cnhfdXJiID0gTlVMTDsKKwl9CisKKwlrZnJlZShraW5nc3VuLT5vdXRfYnVmKTsKKwlrZnJlZShraW5nc3VuLT5pbl9idWYpOworCWZyZWVfbmV0ZGV2KGtpbmdzdW4tPm5ldGRldik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworfQorCisjaWZkZWYgQ09ORklHX1BNCisvKiBVU0Igc3VzcGVuZCwgc28gcG93ZXIgb2ZmIHRoZSB0cmFuc21pdHRlci9yZWNlaXZlciAqLworc3RhdGljIGludCBraW5nc3VuX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCBraW5nc3VuX2NiICpraW5nc3VuID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCW5ldGlmX2RldmljZV9kZXRhY2goa2luZ3N1bi0+bmV0ZGV2KTsKKwlpZiAoa2luZ3N1bi0+dHhfdXJiICE9IE5VTEwpIHVzYl9raWxsX3VyYihraW5nc3VuLT50eF91cmIpOworCWlmIChraW5nc3VuLT5yeF91cmIgIT0gTlVMTCkgdXNiX2tpbGxfdXJiKGtpbmdzdW4tPnJ4X3VyYik7CisJcmV0dXJuIDA7Cit9CisKKy8qIENvbWluZyBvdXQgb2Ygc3VzcGVuZCwgc28gcmVzZXQgaGFyZHdhcmUgKi8KK3N0YXRpYyBpbnQga2luZ3N1bl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGtpbmdzdW5fY2IgKmtpbmdzdW4gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJaWYgKGtpbmdzdW4tPnJ4X3VyYiAhPSBOVUxMKQorCQl1c2Jfc3VibWl0X3VyYihraW5nc3VuLT5yeF91cmIsIEdGUF9LRVJORUwpOworCW5ldGlmX2RldmljZV9hdHRhY2goa2luZ3N1bi0+bmV0ZGV2KTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBVU0IgZGV2aWNlIGNhbGxiYWNrcworICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaXJkYV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImtpbmdzdW4tc2lyIiwKKwkucHJvYmUJCT0ga2luZ3N1bl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGtpbmdzdW5fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBkb25nbGVzLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0ga2luZ3N1bl9zdXNwZW5kLAorCS5yZXN1bWUJCT0ga2luZ3N1bl9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qCisgKiBNb2R1bGUgaW5zZXJ0aW9uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGtpbmdzdW5faW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmlyZGFfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGtpbmdzdW5faW5pdCk7CisKKy8qCisgKiBNb2R1bGUgcmVtb3ZhbAorICovCitzdGF0aWMgdm9pZCBfX2V4aXQga2luZ3N1bl9jbGVhbnVwKHZvaWQpCit7CisJLyogRGVyZWdpc3RlciB0aGUgZHJpdmVyIGFuZCByZW1vdmUgYWxsIHBlbmRpbmcgaW5zdGFuY2VzICovCisJdXNiX2RlcmVnaXN0ZXIoJmlyZGFfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGtpbmdzdW5fY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIkFsZXggVmlsbGFj77+9cyBMYXNzbyA8YV92aWxsYWNpc0BwYWxvc2FudG8uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJckRBLVVTQiBEb25nbGUgRHJpdmVyIGZvciBLaW5nU3VuL0RvblNoaW5lIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCmluZGV4IDE3YjBjM2EuLjlkNmM4ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2RvbmdsZS5jIGIvZHJpdmVycy9uZXQvaXJkYS9zaXJfZG9uZ2xlLmMKaW5kZXggZDdlMzJkOS4uMjVkNWI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfZG9uZ2xlLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zaXJfZG9uZ2xlLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCAxOThiZjNiLi45MDQzYmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtNzksMTEgKzc5LDE3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNNQyBJckNDIFNJUi9GSVIgY29udHJvbGxlciBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIGludCBpcmNjX2RtYSA9IDI1NTsKK3N0YXRpYyBpbnQgc21zY19ub3BucDsKK21vZHVsZV9wYXJhbV9uYW1lZChub3BucCwgc21zY19ub3BucCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vcG5wLCAiRG8gbm90IHVzZSBQTlAgdG8gZGV0ZWN0IGNvbnRyb2xsZXIgc2V0dGluZ3MiKTsKKworI2RlZmluZSBETUFfSU5WQUwgMjU1CitzdGF0aWMgaW50IGlyY2NfZG1hID0gRE1BX0lOVkFMOwogbW9kdWxlX3BhcmFtKGlyY2NfZG1hLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpcmNjX2RtYSwgIkRNQSBjaGFubmVsIik7CiAKLXN0YXRpYyBpbnQgaXJjY19pcnEgPSAyNTU7CisjZGVmaW5lIElSUV9JTlZBTCAyNTUKK3N0YXRpYyBpbnQgaXJjY19pcnEgPSBJUlFfSU5WQUw7CiBtb2R1bGVfcGFyYW0oaXJjY19pcnEsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlyY2NfaXJxLCAiSVJRIGxpbmUiKTsKIApAQCAtMzYwLDcgKzM2Niw2IEBACiAgICAgICAgICAgICAgICBpb2Jhc2UgKyBJUkNDX01BU1RFUik7CiB9CiAKLSNpZmRlZglDT05GSUdfUE5QCiAvKiBQTlAgaG90cGx1ZyBzdXBwb3J0ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgc21zY19pcmNjX3BucF90YWJsZVtdID0gewogCXsgLmlkID0gIlNNQ2YwMTAiLCAuZHJpdmVyX2RhdGEgPSAwIH0sCkBAIC0zNjgsNyArMzczLDM1IEBACiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHNtc2NfaXJjY19wbnBfdGFibGUpOwotI2VuZGlmCisKK3N0YXRpYyBpbnQgcG5wX2RyaXZlcl9yZWdpc3RlcmVkOworCitzdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2NfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpkZXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZmlyYmFzZSwgc2lyYmFzZTsKKwl1OCBkbWEsIGlycTsKKworCWlmICghKHBucF9wb3J0X3ZhbGlkKGRldiwgMCkgJiYgcG5wX3BvcnRfdmFsaWQoZGV2LCAxKSAmJgorCSAgICAgIHBucF9kbWFfdmFsaWQoZGV2LCAwKSAmJiBwbnBfaXJxX3ZhbGlkKGRldiwgMCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNpcmJhc2UgPSBwbnBfcG9ydF9zdGFydChkZXYsIDApOworCWZpcmJhc2UgPSBwbnBfcG9ydF9zdGFydChkZXYsIDEpOworCWRtYSA9IHBucF9kbWEoZGV2LCAwKTsKKwlpcnEgPSBwbnBfaXJxKGRldiwgMCk7CisKKwlpZiAoc21zY19pcmNjX29wZW4oZmlyYmFzZSwgc2lyYmFzZSwgZG1hLCBpcnEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgc21zY19pcmNjX3BucF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInNtc2MtaXJjYzIiLAorCS5pZF90YWJsZQk9IHNtc2NfaXJjY19wbnBfdGFibGUsCisJLnByb2JlCQk9IHNtc2NfaXJjY19wbnBfcHJvYmUsCit9OwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNzksNiArNDEyLDM1IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyBpbnQgX19pbml0IHNtc2NfaXJjY19sZWdhY3lfcHJvYmUodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChpcmNjX2ZpciA+IDAgJiYgaXJjY19zaXIgPiAwKSB7CisJCUlSREFfTUVTU0FHRSgiIE92ZXJyaWRpbmcgRklSIGFkZHJlc3MgMHglMDR4XG4iLCBpcmNjX2Zpcik7CisJCUlSREFfTUVTU0FHRSgiIE92ZXJyaWRpbmcgU0lSIGFkZHJlc3MgMHglMDR4XG4iLCBpcmNjX3Npcik7CisKKwkJaWYgKHNtc2NfaXJjY19vcGVuKGlyY2NfZmlyLCBpcmNjX3NpciwgaXJjY19kbWEsIGlyY2NfaXJxKSkKKwkJCXJldCA9IC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVOT0RFVjsKKworCQkvKiB0cnkgdXNlciBwcm92aWRlZCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLworCQlpZiAoaXJjY19jZmcgPiAwKSB7CisJCQlJUkRBX01FU1NBR0UoIiBPdmVycmlkaW5nIGNvbmZpZ3VyYXRpb24gYWRkcmVzcyAiCisJCQkJICAgICAiMHglMDR4XG4iLCBpcmNjX2NmZyk7CisJCQlpZiAoIXNtc2Nfc3VwZXJpb19mZGMoaXJjY19jZmcpKQorCQkJCXJldCA9IDA7CisJCQlpZiAoIXNtc2Nfc3VwZXJpb19scGMoaXJjY19jZmcpKQorCQkJCXJldCA9IDA7CisJCX0KKworCQlpZiAoc21zY19pcmNjX2xvb2tfZm9yX2NoaXBzKCkgPiAwKQorCQkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIEZ1bmN0aW9uIHNtc2NfaXJjY19pbml0ICgpCiAgKgpAQCAtNDA2LDMxICs0NjgsMjAgQEAKIAogCWRldl9jb3VudCA9IDA7CiAKLQlpZiAoaXJjY19maXIgPiAwICYmIGlyY2Nfc2lyID4gMCkgewotCQlJUkRBX01FU1NBR0UoIiBPdmVycmlkaW5nIEZJUiBhZGRyZXNzIDB4JTA0eFxuIiwgaXJjY19maXIpOwotCQlJUkRBX01FU1NBR0UoIiBPdmVycmlkaW5nIFNJUiBhZGRyZXNzIDB4JTA0eFxuIiwgaXJjY19zaXIpOwotCi0JCWlmIChzbXNjX2lyY2Nfb3BlbihpcmNjX2ZpciwgaXJjY19zaXIsIGlyY2NfZG1hLCBpcmNjX2lycSkpCi0JCQlyZXQgPSAtRU5PREVWOworCWlmIChzbXNjX25vcG5wIHx8ICFwbnBfcGxhdGZvcm1fZGV2aWNlcyB8fAorCSAgICBpcmNjX2NmZyB8fCBpcmNjX2ZpciB8fCBpcmNjX3NpciB8fAorCSAgICBpcmNjX2RtYSAhPSBETUFfSU5WQUwgfHwgaXJjY19pcnEgIT0gSVJRX0lOVkFMKSB7CisJCXJldCA9IHNtc2NfaXJjY19sZWdhY3lfcHJvYmUoKTsKIAl9IGVsc2UgewotCQlyZXQgPSAtRU5PREVWOwotCi0JCS8qIHRyeSB1c2VyIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovCi0JCWlmIChpcmNjX2NmZyA+IDApIHsKLQkJCUlSREFfTUVTU0FHRSgiIE92ZXJyaWRpbmcgY29uZmlndXJhdGlvbiBhZGRyZXNzICIKLQkJCQkgICAgICIweCUwNHhcbiIsIGlyY2NfY2ZnKTsKLQkJCWlmICghc21zY19zdXBlcmlvX2ZkYyhpcmNjX2NmZykpCi0JCQkJcmV0ID0gMDsKLQkJCWlmICghc21zY19zdXBlcmlvX2xwYyhpcmNjX2NmZykpCi0JCQkJcmV0ID0gMDsKLQkJfQotCi0JCWlmIChzbXNjX2lyY2NfbG9va19mb3JfY2hpcHMoKSA+IDApCi0JCQlyZXQgPSAwOworCQlpZiAocG5wX3JlZ2lzdGVyX2RyaXZlcigmc21zY19pcmNjX3BucF9kcml2ZXIpID09IDApCisJCQlwbnBfZHJpdmVyX3JlZ2lzdGVyZWQgPSAxOwogCX0KIAotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlpZiAocG5wX2RyaXZlcl9yZWdpc3RlcmVkKQorCQkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZzbXNjX2lyY2NfcG5wX2RyaXZlcik7CiAJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbXNjX2lyY2NfZHJpdmVyKTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjQ2LDcgKzY5Nyw3IEBACiAJc2VsZi0+aW8uZmlmb19zaXplID0gU01TQ19JUkNDMl9GSUZPX1NJWkU7CiAJc2VsZi0+aW8uc3BlZWQgPSBTTVNDX0lSQ0MyX0NfSVJEQV9GQUxMQkFDS19TUEVFRDsKIAotCWlmIChpcnEgPCAyNTUpIHsKKwlpZiAoaXJxICE9IElSUV9JTlZBTCkgewogCQlpZiAoaXJxICE9IGNoaXBfaXJxKQogCQkJSVJEQV9NRVNTQUdFKCIlcywgT3ZlcnJpZGluZyBJUlEgLSBjaGlwIHNheXMgJWQsIHVzaW5nICVkXG4iLAogCQkJCSAgICAgZHJpdmVyX25hbWUsIGNoaXBfaXJxLCBpcnEpOwpAQCAtNjU0LDcgKzcwNSw3IEBACiAJfSBlbHNlCiAJCXNlbGYtPmlvLmlycSA9IGNoaXBfaXJxOwogCi0JaWYgKGRtYSA8IDI1NSkgeworCWlmIChkbWEgIT0gRE1BX0lOVkFMKSB7CiAJCWlmIChkbWEgIT0gY2hpcF9kbWEpCiAJCQlJUkRBX01FU1NBR0UoIiVzLCBPdmVycmlkaW5nIERNQSAtIGNoaXAgc2F5cyAlZCwgdXNpbmcgJWRcbiIsCiAJCQkJICAgICBkcml2ZXJfbmFtZSwgY2hpcF9kbWEsIGRtYSk7CkBAIC0xODQwLDYgKzE4OTEsOSBAQAogCQkJc21zY19pcmNjX2Nsb3NlKGRldl9zZWxmW2ldKTsKIAl9CiAKKwlpZiAocG5wX2RyaXZlcl9yZWdpc3RlcmVkKQorCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJnNtc2NfaXJjY19wbnBfZHJpdmVyKTsKKwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbXNjX2lyY2NfZHJpdmVyKTsKIH0KIApAQCAtMjgzNiw5ICsyODkwLDkgQEAKIAkJCQkJdG1wY29uZi5maXJfaW8gPSBpcmNjX2ZpcjsKIAkJCQlpZiAoaXJjY19zaXIgIT0gMCkKIAkJCQkJdG1wY29uZi5zaXJfaW8gPSBpcmNjX3NpcjsKLQkJCQlpZiAoaXJjY19kbWEgIT0gMHhmZikKKwkJCQlpZiAoaXJjY19kbWEgIT0gRE1BX0lOVkFMKQogCQkJCQl0bXBjb25mLmZpcl9kbWEgPSBpcmNjX2RtYTsKLQkJCQlpZiAoaXJjY19pcnEgIT0gMHhmZikKKwkJCQlpZiAoaXJjY19pcnEgIT0gSVJRX0lOVkFMKQogCQkJCQl0bXBjb25mLmZpcl9pcnEgPSBpcmNjX2lycTsKIAogCQkJCUlSREFfTUVTU0FHRSgiRGV0ZWN0ZWQgdW5jb25maWd1cmVkICVzIFNNU0MgSXJEQSBjaGlwLCBwcmUtY29uZmlndXJpbmcgZGV2aWNlLlxuIiwgY29uZi0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCmluZGV4IGM0YmU5NzMuLmJmNzhlZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKaW5kZXggYzhlOTA4Ni4uMzU2OWQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKQEAgLTE5Myw4ICsxOTMsNiBAQAogCXUxNiBtc2dfZW5hYmxlOwogCXN0cnVjdCBpeGdiX2h3X3N0YXRzIHN0YXRzOwogCXVpbnQzMl90IGFsbG9jX3J4X2J1ZmZfZmFpbGVkOwotI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAJYm9vbGVhbl90IGhhdmVfbXNpOwotI2VuZGlmCiB9OwogI2VuZGlmIC8qIF9JWEdCX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9lZS5jCmluZGV4IGYxNWFlYmQuLjUyYzk5ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9lZS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9lZS5jCkBAIC0zMTUsNyArMzE1LDcgQEAKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKgogICogUmVhZHMgdGhlIGZpcnN0IDY0IDE2IGJpdCB3b3JkcyBvZiB0aGUgRUVQUk9NIGFuZCBzdW1zIHRoZSB2YWx1ZXMgcmVhZC4KLSAqIElmIHRoZSB0aGUgc3VtIG9mIHRoZSA2NCAxNiBiaXQgd29yZHMgaXMgMHhCQUJBLCB0aGUgRUVQUk9NJ3MgY2hlY2tzdW0gaXMKKyAqIElmIHRoZSBzdW0gb2YgdGhlIDY0IDE2IGJpdCB3b3JkcyBpcyAweEJBQkEsIHRoZSBFRVBST00ncyBjaGVja3N1bSBpcwogICogdmFsaWQuCiAgKgogICogUmV0dXJuczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCmluZGV4IDZkMmIwNTkuLjk5MWM4ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwpAQCAtMjI3LDcgKzIyNyw3IEBACiBpeGdiX3VwKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlpbnQgZXJyOworCWludCBlcnIsIGlycV9mbGFncyA9IElSUUZfU0hBUkVEOwogCWludCBtYXhfZnJhbWUgPSBuZXRkZXYtPm10dSArIEVORVRfSEVBREVSX1NJWkUgKyBFTkVUX0ZDU19MRU5HVEg7CiAJc3RydWN0IGl4Z2JfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCkBAIC0yNDYsMjYgKzI0NiwyMSBAQAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgZ2V0IHRoZSBoYXJkd2FyZSBpbnRvIGEga25vd24gc3RhdGUgKi8KIAlJWEdCX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgMHhmZmZmZmZmZik7CiAKLSNpZmRlZiBDT05GSUdfUENJX01TSQotCXsKLQlib29sZWFuX3QgcGNpeCA9IChJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmIAotCQkJCQkJICBJWEdCX1NUQVRVU19QQ0lYX01PREUpID8gVFJVRSA6IEZBTFNFOwotCWFkYXB0ZXItPmhhdmVfbXNpID0gVFJVRTsKLQotCWlmICghcGNpeCkKLQkgICBhZGFwdGVyLT5oYXZlX21zaSA9IEZBTFNFOwotCWVsc2UgaWYoKGVyciA9IHBjaV9lbmFibGVfbXNpKGFkYXB0ZXItPnBkZXYpKSkgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCSAiVW5hYmxlIHRvIGFsbG9jYXRlIE1TSSBpbnRlcnJ1cHQgRXJyb3I6ICVkXG4iLCBlcnIpOwotCQlhZGFwdGVyLT5oYXZlX21zaSA9IEZBTFNFOworCS8qIG9ubHkgZW5hYmxlIE1TSSBpZiBidXMgaXMgaW4gUENJLVggbW9kZSAqLworCWlmIChJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmIElYR0JfU1RBVFVTX1BDSVhfTU9ERSkgeworCQllcnIgPSBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKKwkJaWYgKCFlcnIpIHsKKwkJCWFkYXB0ZXItPmhhdmVfbXNpID0gMTsKKwkJCWlycV9mbGFncyA9IDA7CisJCX0KIAkJLyogcHJvY2VlZCB0byB0cnkgdG8gcmVxdWVzdCByZWd1bGFyIGludGVycnVwdCAqLwogCX0KLQl9CiAKLSNlbmRpZgotCWlmKChlcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsICZpeGdiX2ludHIsCi0JCQkJICBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKLQkJCSAgICAgICAgICBuZXRkZXYtPm5hbWUsIG5ldGRldikpKSB7CisJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCAmaXhnYl9pbnRyLCBpcnFfZmxhZ3MsCisJICAgICAgICAgICAgICAgICAgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpOworCWlmIChlcnIpIHsKKwkJaWYgKGFkYXB0ZXItPmhhdmVfbXNpKQorCQkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOwogCQlEUFJJTlRLKFBST0JFLCBFUlIsCiAJCSAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CkBAIC0zMDcsMTEgKzMwMiwxMCBAQAogCiAJaXhnYl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIAlmcmVlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIG5ldGRldik7Ci0jaWZkZWYgQ09ORklHX1BDSV9NU0kKLQlpZihhZGFwdGVyLT5oYXZlX21zaSA9PSBUUlVFKQorCisJaWYgKGFkYXB0ZXItPmhhdmVfbXNpKQogCQlwY2lfZGlzYWJsZV9tc2koYWRhcHRlci0+cGRldik7CiAKLSNlbmRpZgogCWlmKGtpbGxfd2F0Y2hkb2cpCiAJCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CiAjaWZkZWYgQ09ORklHX0lYR0JfTkFQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjZS5jIGIvZHJpdmVycy9uZXQvbWFjZS5jCmluZGV4IGIzYmQ2MjMuLjUyYjkzMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2UuYworKysgYi9kcml2ZXJzL25ldC9tYWNlLmMKQEAgLTExMCw5ICsxMTAsOSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlhZGRyID0gZ2V0X3Byb3BlcnR5KG1hY2UsICJtYWMtYWRkcmVzcyIsIE5VTEwpOworCWFkZHIgPSBvZl9nZXRfcHJvcGVydHkobWFjZSwgIm1hYy1hZGRyZXNzIiwgTlVMTCk7CiAJaWYgKGFkZHIgPT0gTlVMTCkgewotCQlhZGRyID0gZ2V0X3Byb3BlcnR5KG1hY2UsICJsb2NhbC1tYWMtYWRkcmVzcyIsIE5VTEwpOworCQlhZGRyID0gb2ZfZ2V0X3Byb3BlcnR5KG1hY2UsICJsb2NhbC1tYWMtYWRkcmVzcyIsIE5VTEwpOwogCQlpZiAoYWRkciA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGdldCBtYWMtYWRkcmVzcyBmb3IgTUFDRSAlc1xuIiwKIAkJCSAgICAgICBtYWNlLT5mdWxsX25hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWV0aC5jIGIvZHJpdmVycy9uZXQvbWV0aC5jCmluZGV4IDAzNDNlYTEuLjkyYjQwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21ldGguYworKysgYi9kcml2ZXJzL25ldC9tZXRoLmMKQEAgLTgsMTUgKzgsMTYgQEAKICAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPiAvKiBwcmludGsoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+ICAvKiBlcnJvciBjb2RlcyAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ICAvKiBzaXplX3QgKi8KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4gLyogbWFya19iaCAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CkBAIC0zMyw3ICszNCw2IEBACiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSAibWV0aC5oIgogCkBAIC01MSw4ICs1MSw2IEBACiAKIAogc3RhdGljIGNvbnN0IGNoYXIgKm1ldGhfc3RyPSJTR0kgTzIgRmFzdCBFdGhlcm5ldCI7Ci1NT0RVTEVfQVVUSE9SKCJJbHlhIFZvbHluZXRzIDxpbHlhQHRoZUlseWEuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTR0kgTzIgQnVpbHRpbiBGYXN0IEV0aGVybmV0IGRyaXZlciIpOwogCiAjZGVmaW5lIEhBVkVfVFhfVElNRU9VVAogLyogVGhlIG1heGltdW0gdGltZSB3YWl0ZWQgKGluIGppZmZpZXMpIGJlZm9yZSBhc3N1bWluZyBhIFR4IGZhaWxlZC4gKDQwMG1zKSAqLwpAQCAtNzg0LDE1ICs3ODIsMTUgQEAKIC8qCiAgKiBUaGUgaW5pdCBmdW5jdGlvbi4KICAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICptZXRoX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG1ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBtZXRoX3ByaXZhdGUgKnByaXY7Ci0JaW50IHJldDsKKwlpbnQgZXJyOwogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBtZXRoX3ByaXZhdGUpKTsKIAlpZiAoIWRldikKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOwogCiAJZGV2LT5vcGVuICAgICAgICAgICAgPSBtZXRoX29wZW47CiAJZGV2LT5zdG9wICAgICAgICAgICAgPSBtZXRoX3JlbGVhc2U7CkBAIC04MDgsMTEgKzgwNiwxMiBAQAogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPm1ldGhfbG9jayk7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAotCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwotCWlmIChyZXQpIHsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoZXJyKSB7CiAJCWZyZWVfbmV0ZGV2KGRldik7Ci0JCXJldHVybiBFUlJfUFRSKHJldCk7CisJCXJldHVybiBlcnI7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNHSSBNQUNFIEV0aGVybmV0IHJldi4gJWRcbiIsCkBAIC04MjAsMjEgKzgxOSw0NCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm1ldGhfZGV2Oworc3RhdGljIGludCBfX2V4aXQgbWV0aF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCWZyZWVfbmV0ZGV2KGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWV0aF9kcml2ZXIgPSB7CisJLnByb2JlCT0gbWV0aF9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AobWV0aF9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIm1ldGgiLAorCX0KK307CiAKIHN0YXRpYyBpbnQgX19pbml0IG1ldGhfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQltZXRoX2RldiA9IG1ldGhfaW5pdCgpOwotCWlmIChJU19FUlIobWV0aF9kZXYpKQotCQlyZXR1cm4gUFRSX0VSUihtZXRoX2Rldik7Ci0JcmV0dXJuIDA7CisJaW50IGVycjsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWV0aF9kcml2ZXIpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG1ldGhfZXhpdF9tb2R1bGUodm9pZCkKIHsKLQl1bnJlZ2lzdGVyX25ldGRldihtZXRoX2Rldik7Ci0JZnJlZV9uZXRkZXYobWV0aF9kZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtZXRoX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG1ldGhfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQobWV0aF9leGl0X21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIklseWEgVm9seW5ldHMgPGlseWFAdGhlSWx5YS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNHSSBPMiBCdWlsdGluIEZhc3QgRXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZXRoLmggYi9kcml2ZXJzL25ldC9tZXRoLmgKaW5kZXggODQ5NjBkYS4uZWEzYjhmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWV0aC5oCisrKyBiL2RyaXZlcnMvbmV0L21ldGguaApAQCAtMTI2LDcgKzEyNiw3IEBACiAJCQkJICAgICAgIC8qICAgTm90ZTogd2hlbiBsb29wYmFjayBpcyBzZXQgdGhpcyBiaXQgYmVjb21lcyBjb2xsaXNpb24gY29udHJvbC4gIFNldHRpbmcgdGhpcyBiaXQgd2lsbCAqLwogCQkJCSAgICAgICAvKiAgICAgICAgIGNhdXNlIGEgY29sbGlzaW9uIHRvIGJlIHJlcG9ydGVkLiAqLwogCi0JCQkJICAgICAgIC8qIEJpdHMgNSBhbmQgNiBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRoZSBEZXN0aW5hdGlvbiBhZGRyZXNzIGZpbHRlciBtb2RlICovCisJCQkJICAgICAgIC8qIEJpdHMgNSBhbmQgNiBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIERlc3RpbmF0aW9uIGFkZHJlc3MgZmlsdGVyIG1vZGUgKi8KICNkZWZpbmUgTUVUSF9BQ0NFUFRfTVkgMAkJCS8qIDAwOiBBY2NlcHQgUEhZIGFkZHJlc3Mgb25seSAqLwogI2RlZmluZSBNRVRIX0FDQ0VQVF9NQ0FTVCAweDIwCS8qIDAxOiBBY2NlcHQgcGh5c2ljYWwsIGJyb2FkY2FzdCwgYW5kIG11bHRpY2FzdCBmaWx0ZXIgbWF0Y2hlcyBvbmx5ICovCiAjZGVmaW5lIE1FVEhfQUNDRVBUX0FNQ0FTVCAweDQwCS8qIDEwOiBBY2NlcHQgcGh5c2ljYWwsIGJyb2FkY2FzdCwgYW5kIGFsbCBtdWx0aWNhc3QgcGFja2V0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk1MmE2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUKQEAgLTAsMCArMSw0IEBACitvYmotJChDT05GSUdfTUxYNF9DT1JFKQkJKz0gbWx4NF9jb3JlLm8KKworbWx4NF9jb3JlLXkgOj0JYWxsb2MubyBjYXRhcy5vIGNtZC5vIGNxLm8gZXEubyBmdy5vIGljbS5vIGludGYubyBtYWluLm8gbWNnLm8gXAorCQltci5vIHBkLm8gcHJvZmlsZS5vIHFwLm8gcmVzZXQubyBzcnEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9hbGxvYy5jIGIvZHJpdmVycy9uZXQvbWx4NC9hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDYzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L2FsbG9jLmMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSAibWx4NC5oIgorCit1MzIgbWx4NF9iaXRtYXBfYWxsb2Moc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXApCit7CisJdTMyIG9iajsKKworCXNwaW5fbG9jaygmYml0bWFwLT5sb2NrKTsKKworCW9iaiA9IGZpbmRfbmV4dF96ZXJvX2JpdChiaXRtYXAtPnRhYmxlLCBiaXRtYXAtPm1heCwgYml0bWFwLT5sYXN0KTsKKwlpZiAob2JqID49IGJpdG1hcC0+bWF4KSB7CisJCWJpdG1hcC0+dG9wID0gKGJpdG1hcC0+dG9wICsgYml0bWFwLT5tYXgpICYgYml0bWFwLT5tYXNrOworCQlvYmogPSBmaW5kX2ZpcnN0X3plcm9fYml0KGJpdG1hcC0+dGFibGUsIGJpdG1hcC0+bWF4KTsKKwl9CisKKwlpZiAob2JqIDwgYml0bWFwLT5tYXgpIHsKKwkJc2V0X2JpdChvYmosIGJpdG1hcC0+dGFibGUpOworCQliaXRtYXAtPmxhc3QgPSAob2JqICsgMSkgJiAoYml0bWFwLT5tYXggLSAxKTsKKwkJb2JqIHw9IGJpdG1hcC0+dG9wOworCX0gZWxzZQorCQlvYmogPSAtMTsKKworCXNwaW5fdW5sb2NrKCZiaXRtYXAtPmxvY2spOworCisJcmV0dXJuIG9iajsKK30KKwordm9pZCBtbHg0X2JpdG1hcF9mcmVlKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCB1MzIgb2JqKQoreworCW9iaiAmPSBiaXRtYXAtPm1heCAtIDE7CisKKwlzcGluX2xvY2soJmJpdG1hcC0+bG9jayk7CisJY2xlYXJfYml0KG9iaiwgYml0bWFwLT50YWJsZSk7CisJYml0bWFwLT5sYXN0ID0gbWluKGJpdG1hcC0+bGFzdCwgb2JqKTsKKwliaXRtYXAtPnRvcCA9IChiaXRtYXAtPnRvcCArIGJpdG1hcC0+bWF4KSAmIGJpdG1hcC0+bWFzazsKKwlzcGluX3VubG9jaygmYml0bWFwLT5sb2NrKTsKK30KKworaW50IG1seDRfYml0bWFwX2luaXQoc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXAsIHUzMiBudW0sIHUzMiBtYXNrLCB1MzIgcmVzZXJ2ZWQpCit7CisJaW50IGk7CisKKwkvKiBudW0gbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KKwlpZiAobnVtICE9IHJvdW5kdXBfcG93X29mX3R3byhudW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJpdG1hcC0+bGFzdCA9IDA7CisJYml0bWFwLT50b3AgID0gMDsKKwliaXRtYXAtPm1heCAgPSBudW07CisJYml0bWFwLT5tYXNrID0gbWFzazsKKwlzcGluX2xvY2tfaW5pdCgmYml0bWFwLT5sb2NrKTsKKwliaXRtYXAtPnRhYmxlID0ga3phbGxvYyhCSVRTX1RPX0xPTkdTKG51bSkgKiBzaXplb2YgKGxvbmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJpdG1hcC0+dGFibGUpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHJlc2VydmVkOyArK2kpCisJCXNldF9iaXQoaSwgYml0bWFwLT50YWJsZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtbHg0X2JpdG1hcF9jbGVhbnVwKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwKQoreworCWtmcmVlKGJpdG1hcC0+dGFibGUpOworfQorCisvKgorICogSGFuZGxpbmcgZm9yIHF1ZXVlIGJ1ZmZlcnMgLS0gd2UgYWxsb2NhdGUgYSBidW5jaCBvZiBtZW1vcnkgYW5kCisgKiByZWdpc3RlciBpdCBpbiBhIG1lbW9yeSByZWdpb24gYXQgSENBIHZpcnR1YWwgYWRkcmVzcyAwLiAgSWYgdGhlCisgKiByZXF1ZXN0ZWQgc2l6ZSBpcyA+IG1heF9kaXJlY3QsIHdlIHNwbGl0IHRoZSBhbGxvY2F0aW9uIGludG8KKyAqIG11bHRpcGxlIHBhZ2VzLCBzbyB3ZSBkb24ndCByZXF1aXJlIHRvbyBtdWNoIGNvbnRpZ3VvdXMgbWVtb3J5LgorICovCisKK2ludCBtbHg0X2J1Zl9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHNpemUsIGludCBtYXhfZGlyZWN0LAorCQkgICBzdHJ1Y3QgbWx4NF9idWYgKmJ1ZikKK3sKKwlkbWFfYWRkcl90IHQ7CisKKwlpZiAoc2l6ZSA8PSBtYXhfZGlyZWN0KSB7CisJCWJ1Zi0+bmJ1ZnMgICAgICAgID0gMTsKKwkJYnVmLT5ucGFnZXMgICAgICAgPSAxOworCQlidWYtPnBhZ2Vfc2hpZnQgICA9IGdldF9vcmRlcihzaXplKSArIFBBR0VfU0hJRlQ7CisJCWJ1Zi0+dS5kaXJlY3QuYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPnBkZXYtPmRldiwKKwkJCQkJCSAgICAgICBzaXplLCAmdCwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmLT51LmRpcmVjdC5idWYpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlidWYtPnUuZGlyZWN0Lm1hcCA9IHQ7CisKKwkJd2hpbGUgKHQgJiAoKDEgPDwgYnVmLT5wYWdlX3NoaWZ0KSAtIDEpKSB7CisJCQktLWJ1Zi0+cGFnZV9zaGlmdDsKKwkJCWJ1Zi0+bnBhZ2VzICo9IDI7CisJCX0KKworCQltZW1zZXQoYnVmLT51LmRpcmVjdC5idWYsIDAsIHNpemUpOworCX0gZWxzZSB7CisJCWludCBpOworCisJCWJ1Zi0+bmJ1ZnMgICAgICAgPSAoc2l6ZSArIFBBR0VfU0laRSAtIDEpIC8gUEFHRV9TSVpFOworCQlidWYtPm5wYWdlcyAgICAgID0gYnVmLT5uYnVmczsKKwkJYnVmLT5wYWdlX3NoaWZ0ICA9IFBBR0VfU0hJRlQ7CisJCWJ1Zi0+dS5wYWdlX2xpc3QgPSBremFsbG9jKGJ1Zi0+bmJ1ZnMgKiBzaXplb2YgKmJ1Zi0+dS5wYWdlX2xpc3QsCisJCQkJCSAgIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1Zi0+dS5wYWdlX2xpc3QpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYnVmLT5uYnVmczsgKytpKSB7CisJCQlidWYtPnUucGFnZV9saXN0W2ldLmJ1ZiA9CisJCQkJZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPnBkZXYtPmRldiwgUEFHRV9TSVpFLAorCQkJCQkJICAgJnQsIEdGUF9LRVJORUwpOworCQkJaWYgKCFidWYtPnUucGFnZV9saXN0W2ldLmJ1ZikKKwkJCQlnb3RvIGVycl9mcmVlOworCisJCQlidWYtPnUucGFnZV9saXN0W2ldLm1hcCA9IHQ7CisKKwkJCW1lbXNldChidWYtPnUucGFnZV9saXN0W2ldLmJ1ZiwgMCwgUEFHRV9TSVpFKTsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZToKKwltbHg0X2J1Zl9mcmVlKGRldiwgc2l6ZSwgYnVmKTsKKworCXJldHVybiAtRU5PTUVNOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9idWZfYWxsb2MpOworCit2b2lkIG1seDRfYnVmX2ZyZWUoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBzaXplLCBzdHJ1Y3QgbWx4NF9idWYgKmJ1ZikKK3sKKwlpbnQgaTsKKworCWlmIChidWYtPm5idWZzID09IDEpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPnBkZXYtPmRldiwgc2l6ZSwgYnVmLT51LmRpcmVjdC5idWYsCisJCQkJICBidWYtPnUuZGlyZWN0Lm1hcCk7CisJZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBidWYtPm5idWZzOyArK2kpCisJCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIFBBR0VfU0laRSwKKwkJCQkJICBidWYtPnUucGFnZV9saXN0W2ldLmJ1ZiwKKwkJCQkJICBidWYtPnUucGFnZV9saXN0W2ldLm1hcCk7CisJCWtmcmVlKGJ1Zi0+dS5wYWdlX2xpc3QpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfYnVmX2ZyZWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jIGIvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYjA4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L2NhdGFzLmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAibWx4NC5oIgorCit2b2lkIG1seDRfaGFuZGxlX2NhdGFzX2VycihzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisKKwlpbnQgaTsKKworCW1seDRfZXJyKGRldiwgIkNhdGFzdHJvcGhpYyBlcnJvciBkZXRlY3RlZDpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5mdy5jYXRhc19zaXplOyArK2kpCisJCW1seDRfZXJyKGRldiwgIiAgYnVmWyUwMnhdOiAlMDh4XG4iLAorCQkJIGksIHN3YWIzMihyZWFkbChwcml2LT5jYXRhc19lcnIubWFwICsgaSkpKTsKKworCW1seDRfZGlzcGF0Y2hfZXZlbnQoZGV2LCBNTFg0X0VWRU5UX1RZUEVfTE9DQUxfQ0FUQVNfRVJST1IsIDAsIDApOworfQorCit2b2lkIG1seDRfbWFwX2NhdGFzX2J1ZihzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIHByaXYtPmZ3LmNhdGFzX2JhcikgKworCQlwcml2LT5mdy5jYXRhc19vZmZzZXQ7CisKKwlwcml2LT5jYXRhc19lcnIubWFwID0gaW9yZW1hcChhZGRyLCBwcml2LT5mdy5jYXRhc19zaXplICogNCk7CisJaWYgKCFwcml2LT5jYXRhc19lcnIubWFwKQorCQltbHg0X3dhcm4oZGV2LCAiRmFpbGVkIHRvIG1hcCBjYXRhc3Ryb3BoaWMgZXJyb3IgYnVmZmVyIGF0IDB4JWx4XG4iLAorCQkJICBhZGRyKTsKKworfQorCit2b2lkIG1seDRfdW5tYXBfY2F0YXNfYnVmKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKworCWlmIChwcml2LT5jYXRhc19lcnIubWFwKQorCQlpb3VubWFwKHByaXYtPmNhdGFzX2Vyci5tYXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9jbWQuYyBiL2RyaXZlcnMvbmV0L21seDQvY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmODFhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21seDQvY21kLmMKQEAgLTAsMCArMSw0MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2LCAyMDA3IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaW5jbHVkZSA8bGludXgvbWx4NC9jbWQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAibWx4NC5oIgorCisjZGVmaW5lIENNRF9QT0xMX1RPS0VOIDB4ZmZmZgorCitlbnVtIHsKKwkvKiBjb21tYW5kIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICovCisJQ01EX1NUQVRfT0sJCT0gMHgwMCwKKwkvKiBJbnRlcm5hbCBlcnJvciAoc3VjaCBhcyBhIGJ1cyBlcnJvcikgb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyBjb21tYW5kOiAqLworCUNNRF9TVEFUX0lOVEVSTkFMX0VSUgk9IDB4MDEsCisJLyogT3BlcmF0aW9uL2NvbW1hbmQgbm90IHN1cHBvcnRlZCBvciBvcGNvZGUgbW9kaWZpZXIgbm90IHN1cHBvcnRlZDogKi8KKwlDTURfU1RBVF9CQURfT1AJCT0gMHgwMiwKKwkvKiBQYXJhbWV0ZXIgbm90IHN1cHBvcnRlZCBvciBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlOiAqLworCUNNRF9TVEFUX0JBRF9QQVJBTQk9IDB4MDMsCisJLyogU3lzdGVtIG5vdCBlbmFibGVkIG9yIGJhZCBzeXN0ZW0gc3RhdGU6ICovCisJQ01EX1NUQVRfQkFEX1NZU19TVEFURQk9IDB4MDQsCisJLyogQXR0ZW1wdCB0byBhY2Nlc3MgcmVzZXJ2ZWQgb3IgdW5hbGxvY2F0ZXJkIHJlc291cmNlOiAqLworCUNNRF9TVEFUX0JBRF9SRVNPVVJDRQk9IDB4MDUsCisJLyogUmVxdWVzdGVkIHJlc291cmNlIGlzIGN1cnJlbnRseSBleGVjdXRpbmcgYSBjb21tYW5kLCBvciBpcyBvdGhlcndpc2UgYnVzeTogKi8KKwlDTURfU1RBVF9SRVNPVVJDRV9CVVNZCT0gMHgwNiwKKwkvKiBSZXF1aXJlZCBjYXBhYmlsaXR5IGV4Y2VlZHMgZGV2aWNlIGxpbWl0czogKi8KKwlDTURfU1RBVF9FWENFRURfTElNCT0gMHgwOCwKKwkvKiBSZXNvdXJjZSBpcyBub3QgaW4gdGhlIGFwcHJvcHJpYXRlIHN0YXRlIG9yIG93bmVyc2hpcDogKi8KKwlDTURfU1RBVF9CQURfUkVTX1NUQVRFCT0gMHgwOSwKKwkvKiBJbmRleCBvdXQgb2YgcmFuZ2U6ICovCisJQ01EX1NUQVRfQkFEX0lOREVYCT0gMHgwYSwKKwkvKiBGVyBpbWFnZSBjb3JydXB0ZWQ6ICovCisJQ01EX1NUQVRfQkFEX05WTUVNCT0gMHgwYiwKKwkvKiBBdHRlbXB0IHRvIG1vZGlmeSBhIFFQL0VFIHdoaWNoIGlzIG5vdCBpbiB0aGUgcHJlc3VtZWQgc3RhdGU6ICovCisJQ01EX1NUQVRfQkFEX1FQX1NUQVRFICAgPSAweDEwLAorCS8qIEJhZCBzZWdtZW50IHBhcmFtZXRlcnMgKEFkZHJlc3MvU2l6ZSk6ICovCisJQ01EX1NUQVRfQkFEX1NFR19QQVJBTQk9IDB4MjAsCisJLyogTWVtb3J5IFJlZ2lvbiBoYXMgTWVtb3J5IFdpbmRvd3MgYm91bmQgdG86ICovCisJQ01EX1NUQVRfUkVHX0JPVU5ECT0gMHgyMSwKKwkvKiBIQ0EgbG9jYWwgYXR0YWNoZWQgbWVtb3J5IG5vdCBwcmVzZW50OiAqLworCUNNRF9TVEFUX0xBTV9OT1RfUFJFCT0gMHgyMiwKKwkvKiBCYWQgbWFuYWdlbWVudCBwYWNrZXQgKHNpbGVudGx5IGRpc2NhcmRlZCk6ICovCisJQ01EX1NUQVRfQkFEX1BLVAk9IDB4MzAsCisJLyogTW9yZSBvdXRzdGFuZGluZyBDUUVzIGluIENRIHRoYW4gbmV3IENRIHNpemU6ICovCisJQ01EX1NUQVRfQkFEX1NJWkUJPSAweDQwCit9OworCitlbnVtIHsKKwlIQ1JfSU5fUEFSQU1fT0ZGU0VUCT0gMHgwMCwKKwlIQ1JfSU5fTU9ESUZJRVJfT0ZGU0VUCT0gMHgwOCwKKwlIQ1JfT1VUX1BBUkFNX09GRlNFVAk9IDB4MGMsCisJSENSX1RPS0VOX09GRlNFVAk9IDB4MTQsCisJSENSX1NUQVRVU19PRkZTRVQJPSAweDE4LAorCisJSENSX09QTU9EX1NISUZUCQk9IDEyLAorCUhDUl9UX0JJVAkJPSAyMSwKKwlIQ1JfRV9CSVQJCT0gMjIsCisJSENSX0dPX0JJVAkJPSAyMworfTsKKworZW51bSB7CisJR09fQklUX1RJTUVPVVQJCT0gMTAwMDAKK307CisKK3N0cnVjdCBtbHg0X2NtZF9jb250ZXh0IHsKKwlzdHJ1Y3QgY29tcGxldGlvbglkb25lOworCWludAkJCXJlc3VsdDsKKwlpbnQJCQluZXh0OworCXU2NAkJCW91dF9wYXJhbTsKKwl1MTYJCQl0b2tlbjsKK307CisKK3N0YXRpYyBpbnQgbWx4NF9zdGF0dXNfdG9fZXJybm8odTggc3RhdHVzKSB7CisJc3RhdGljIGNvbnN0IGludCB0cmFuc190YWJsZVtdID0geworCQlbQ01EX1NUQVRfSU5URVJOQUxfRVJSXQkgID0gLUVJTywKKwkJW0NNRF9TVEFUX0JBRF9PUF0JICA9IC1FUEVSTSwKKwkJW0NNRF9TVEFUX0JBRF9QQVJBTV0JICA9IC1FSU5WQUwsCisJCVtDTURfU1RBVF9CQURfU1lTX1NUQVRFXSAgPSAtRU5YSU8sCisJCVtDTURfU1RBVF9CQURfUkVTT1VSQ0VdCSAgPSAtRUJBREYsCisJCVtDTURfU1RBVF9SRVNPVVJDRV9CVVNZXSAgPSAtRUJVU1ksCisJCVtDTURfU1RBVF9FWENFRURfTElNXQkgID0gLUVOT01FTSwKKwkJW0NNRF9TVEFUX0JBRF9SRVNfU1RBVEVdICA9IC1FQkFERiwKKwkJW0NNRF9TVEFUX0JBRF9JTkRFWF0JICA9IC1FQkFERiwKKwkJW0NNRF9TVEFUX0JBRF9OVk1FTV0JICA9IC1FRkFVTFQsCisJCVtDTURfU1RBVF9CQURfUVBfU1RBVEVdICAgPSAtRUlOVkFMLAorCQlbQ01EX1NUQVRfQkFEX1NFR19QQVJBTV0gID0gLUVGQVVMVCwKKwkJW0NNRF9TVEFUX1JFR19CT1VORF0JICA9IC1FQlVTWSwKKwkJW0NNRF9TVEFUX0xBTV9OT1RfUFJFXQkgID0gLUVBR0FJTiwKKwkJW0NNRF9TVEFUX0JBRF9QS1RdCSAgPSAtRUlOVkFMLAorCQlbQ01EX1NUQVRfQkFEX1NJWkVdCSAgPSAtRU5PTUVNLAorCX07CisKKwlpZiAoc3RhdHVzID49IEFSUkFZX1NJWkUodHJhbnNfdGFibGUpIHx8CisJICAgIChzdGF0dXMgIT0gQ01EX1NUQVRfT0sgJiYgdHJhbnNfdGFibGVbc3RhdHVzXSA9PSAwKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gdHJhbnNfdGFibGVbc3RhdHVzXTsKK30KKworc3RhdGljIGludCBjbWRfcGVuZGluZyhzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwl1MzIgc3RhdHVzID0gcmVhZGwobWx4NF9wcml2KGRldiktPmNtZC5oY3IgKyBIQ1JfU1RBVFVTX09GRlNFVCk7CisKKwlyZXR1cm4gKHN0YXR1cyAmIHN3YWIzMigxIDw8IEhDUl9HT19CSVQpKSB8fAorCQkobWx4NF9wcml2KGRldiktPmNtZC50b2dnbGUgPT0KKwkJICEhKHN0YXR1cyAmIHN3YWIzMigxIDw8IEhDUl9UX0JJVCkpKTsKK30KKworc3RhdGljIGludCBtbHg0X2NtZF9wb3N0KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1NjQgaW5fcGFyYW0sIHU2NCBvdXRfcGFyYW0sCisJCQkgdTMyIGluX21vZGlmaWVyLCB1OCBvcF9tb2RpZmllciwgdTE2IG9wLCB1MTYgdG9rZW4sCisJCQkgaW50IGV2ZW50KQoreworCXN0cnVjdCBtbHg0X2NtZCAqY21kID0gJm1seDRfcHJpdihkZXYpLT5jbWQ7CisJdTMyIF9faW9tZW0gKmhjciA9IGNtZC0+aGNyOworCWludCByZXQgPSAtRUFHQUlOOworCXVuc2lnbmVkIGxvbmcgZW5kOworCisJbXV0ZXhfbG9jaygmY21kLT5oY3JfbXV0ZXgpOworCisJZW5kID0gamlmZmllczsKKwlpZiAoZXZlbnQpCisJCWVuZCArPSBIWiAqIDEwOworCisJd2hpbGUgKGNtZF9wZW5kaW5nKGRldikpIHsKKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZW5kKSkKKwkJCWdvdG8gb3V0OworCQljb25kX3Jlc2NoZWQoKTsKKwl9CisKKwkvKgorCSAqIFdlIHVzZSB3cml0ZWwgKGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgbWVtY3B5X3RvaW8pCisJICogYmVjYXVzZSB3cml0ZXMgb2YgbGVzcyB0aGFuIDMyIGJpdHMgdG8gdGhlIEhDUiBkb24ndCB3b3JrCisJICogKGFuZCBzb21lIGFyY2hpdGVjdHVyZXMgc3VjaCBhcyBpYTY0IGltcGxlbWVudCBtZW1jcHlfdG9pbworCSAqIGluIHRlcm1zIG9mIHdyaXRlYikuCisJICovCisJX19yYXdfd3JpdGVsKChfX2ZvcmNlIHUzMikgY3B1X3RvX2JlMzIoaW5fcGFyYW0gPj4gMzIpLAkJICBoY3IgKyAwKTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMihpbl9wYXJhbSAmIDB4ZmZmZmZmZmZ1bCksICBoY3IgKyAxKTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMihpbl9tb2RpZmllciksCQkgIGhjciArIDIpOworCV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpIGNwdV90b19iZTMyKG91dF9wYXJhbSA+PiAzMiksCSAgaGNyICsgMyk7CisJX19yYXdfd3JpdGVsKChfX2ZvcmNlIHUzMikgY3B1X3RvX2JlMzIob3V0X3BhcmFtICYgMHhmZmZmZmZmZnVsKSwgaGNyICsgNCk7CisJX19yYXdfd3JpdGVsKChfX2ZvcmNlIHUzMikgY3B1X3RvX2JlMzIodG9rZW4gPDwgMTYpLAkJICBoY3IgKyA1KTsKKworCS8qIF9fcmF3X3dyaXRlbCBtYXkgbm90IG9yZGVyIHdyaXRlcy4gKi8KKwl3bWIoKTsKKworCV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpIGNwdV90b19iZTMyKCgxIDw8IEhDUl9HT19CSVQpCQl8CisJCQkJCSAgICAgICAoY21kLT50b2dnbGUgPDwgSENSX1RfQklUKQl8CisJCQkJCSAgICAgICAoZXZlbnQgPyAoMSA8PCBIQ1JfRV9CSVQpIDogMCkJfAorCQkJCQkgICAgICAgKG9wX21vZGlmaWVyIDw8IEhDUl9PUE1PRF9TSElGVCkgfAorCQkJCQkgICAgICAgb3ApLAkJCSAgaGNyICsgNik7CisJY21kLT50b2dnbGUgPSBjbWQtPnRvZ2dsZSBeIDE7CisKKwlyZXQgPSAwOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjbWQtPmhjcl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtbHg0X2NtZF9wb2xsKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1NjQgaW5fcGFyYW0sIHU2NCAqb3V0X3BhcmFtLAorCQkJIGludCBvdXRfaXNfaW1tLCB1MzIgaW5fbW9kaWZpZXIsIHU4IG9wX21vZGlmaWVyLAorCQkJIHUxNiBvcCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwl2b2lkIF9faW9tZW0gKmhjciA9IHByaXYtPmNtZC5oY3I7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisKKwlkb3duKCZwcml2LT5jbWQucG9sbF9zZW0pOworCisJZXJyID0gbWx4NF9jbWRfcG9zdChkZXYsIGluX3BhcmFtLCBvdXRfcGFyYW0gPyAqb3V0X3BhcmFtIDogMCwKKwkJCSAgICBpbl9tb2RpZmllciwgb3BfbW9kaWZpZXIsIG9wLCBDTURfUE9MTF9UT0tFTiwgMCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllbmQgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpICsgamlmZmllczsKKwl3aGlsZSAoY21kX3BlbmRpbmcoZGV2KSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmQpKQorCQljb25kX3Jlc2NoZWQoKTsKKworCWlmIChjbWRfcGVuZGluZyhkZXYpKSB7CisJCWVyciA9IC1FVElNRURPVVQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvdXRfaXNfaW1tKQorCQkqb3V0X3BhcmFtID0KKwkJCSh1NjQpIGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMikKKwkJCQkJICBfX3Jhd19yZWFkbChoY3IgKyBIQ1JfT1VUX1BBUkFNX09GRlNFVCkpIDw8IDMyIHwKKwkJCSh1NjQpIGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMikKKwkJCQkJICBfX3Jhd19yZWFkbChoY3IgKyBIQ1JfT1VUX1BBUkFNX09GRlNFVCArIDQpKTsKKworCWVyciA9IG1seDRfc3RhdHVzX3RvX2Vycm5vKGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMikKKwkJCQkJICAgICAgIF9fcmF3X3JlYWRsKGhjciArIEhDUl9TVEFUVVNfT0ZGU0VUKSkgPj4gMjQpOworCitvdXQ6CisJdXAoJnByaXYtPmNtZC5wb2xsX3NlbSk7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBtbHg0X2NtZF9ldmVudChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTE2IHRva2VuLCB1OCBzdGF0dXMsIHU2NCBvdXRfcGFyYW0pCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2NtZF9jb250ZXh0ICpjb250ZXh0ID0KKwkJJnByaXYtPmNtZC5jb250ZXh0W3Rva2VuICYgcHJpdi0+Y21kLnRva2VuX21hc2tdOworCisJLyogcHJldmlvdXNseSB0aW1lZCBvdXQgY29tbWFuZCBjb21wbGV0aW5nIGF0IGxvbmcgbGFzdCAqLworCWlmICh0b2tlbiAhPSBjb250ZXh0LT50b2tlbikKKwkJcmV0dXJuOworCisJY29udGV4dC0+cmVzdWx0ICAgID0gbWx4NF9zdGF0dXNfdG9fZXJybm8oc3RhdHVzKTsKKwljb250ZXh0LT5vdXRfcGFyYW0gPSBvdXRfcGFyYW07CisKKwljb250ZXh0LT50b2tlbiArPSBwcml2LT5jbWQudG9rZW5fbWFzayArIDE7CisKKwljb21wbGV0ZSgmY29udGV4dC0+ZG9uZSk7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9jbWRfd2FpdChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTY0IGluX3BhcmFtLCB1NjQgKm91dF9wYXJhbSwKKwkJCSBpbnQgb3V0X2lzX2ltbSwgdTMyIGluX21vZGlmaWVyLCB1OCBvcF9tb2RpZmllciwKKwkJCSB1MTYgb3AsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlzdHJ1Y3QgbWx4NF9jbWQgKmNtZCA9ICZtbHg0X3ByaXYoZGV2KS0+Y21kOworCXN0cnVjdCBtbHg0X2NtZF9jb250ZXh0ICpjb250ZXh0OworCWludCBlcnIgPSAwOworCisJZG93bigmY21kLT5ldmVudF9zZW0pOworCisJc3Bpbl9sb2NrKCZjbWQtPmNvbnRleHRfbG9jayk7CisJQlVHX09OKGNtZC0+ZnJlZV9oZWFkIDwgMCk7CisJY29udGV4dCA9ICZjbWQtPmNvbnRleHRbY21kLT5mcmVlX2hlYWRdOworCWNtZC0+ZnJlZV9oZWFkID0gY29udGV4dC0+bmV4dDsKKwlzcGluX3VubG9jaygmY21kLT5jb250ZXh0X2xvY2spOworCisJaW5pdF9jb21wbGV0aW9uKCZjb250ZXh0LT5kb25lKTsKKworCW1seDRfY21kX3Bvc3QoZGV2LCBpbl9wYXJhbSwgb3V0X3BhcmFtID8gKm91dF9wYXJhbSA6IDAsCisJCSAgICAgIGluX21vZGlmaWVyLCBvcF9tb2RpZmllciwgb3AsIGNvbnRleHQtPnRva2VuLCAxKTsKKworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjb250ZXh0LT5kb25lLCBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGNvbnRleHQtPnJlc3VsdDsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWlmIChvdXRfaXNfaW1tKQorCQkqb3V0X3BhcmFtID0gY29udGV4dC0+b3V0X3BhcmFtOworCitvdXQ6CisJc3Bpbl9sb2NrKCZjbWQtPmNvbnRleHRfbG9jayk7CisJY29udGV4dC0+bmV4dCA9IGNtZC0+ZnJlZV9oZWFkOworCWNtZC0+ZnJlZV9oZWFkID0gY29udGV4dCAtIGNtZC0+Y29udGV4dDsKKwlzcGluX3VubG9jaygmY21kLT5jb250ZXh0X2xvY2spOworCisJdXAoJmNtZC0+ZXZlbnRfc2VtKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgX19tbHg0X2NtZChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTY0IGluX3BhcmFtLCB1NjQgKm91dF9wYXJhbSwKKwkgICAgICAgaW50IG91dF9pc19pbW0sIHUzMiBpbl9tb2RpZmllciwgdTggb3BfbW9kaWZpZXIsCisJICAgICAgIHUxNiBvcCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoreworCWlmIChtbHg0X3ByaXYoZGV2KS0+Y21kLnVzZV9ldmVudHMpCisJCXJldHVybiBtbHg0X2NtZF93YWl0KGRldiwgaW5fcGFyYW0sIG91dF9wYXJhbSwgb3V0X2lzX2ltbSwKKwkJCQkgICAgIGluX21vZGlmaWVyLCBvcF9tb2RpZmllciwgb3AsIHRpbWVvdXQpOworCWVsc2UKKwkJcmV0dXJuIG1seDRfY21kX3BvbGwoZGV2LCBpbl9wYXJhbSwgb3V0X3BhcmFtLCBvdXRfaXNfaW1tLAorCQkJCSAgICAgaW5fbW9kaWZpZXIsIG9wX21vZGlmaWVyLCBvcCwgdGltZW91dCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX21seDRfY21kKTsKKworaW50IG1seDRfY21kX2luaXQoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCisJbXV0ZXhfaW5pdCgmcHJpdi0+Y21kLmhjcl9tdXRleCk7CisJc2VtYV9pbml0KCZwcml2LT5jbWQucG9sbF9zZW0sIDEpOworCXByaXYtPmNtZC51c2VfZXZlbnRzID0gMDsKKwlwcml2LT5jbWQudG9nZ2xlICAgICA9IDE7CisKKwlwcml2LT5jbWQuaGNyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKSArIE1MWDRfSENSX0JBU0UsCisJCQkJTUxYNF9IQ1JfU0laRSk7CisJaWYgKCFwcml2LT5jbWQuaGNyKSB7CisJCW1seDRfZXJyKGRldiwgIkNvdWxkbid0IG1hcCBjb21tYW5kIHJlZ2lzdGVyLiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwcml2LT5jbWQucG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgibWx4NF9jbWQiLCBkZXYtPnBkZXYsCisJCQkJCSBNTFg0X01BSUxCT1hfU0laRSwKKwkJCQkJIE1MWDRfTUFJTEJPWF9TSVpFLCAwKTsKKwlpZiAoIXByaXYtPmNtZC5wb29sKSB7CisJCWlvdW5tYXAocHJpdi0+Y21kLmhjcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIG1seDRfY21kX2NsZWFudXAoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCisJcGNpX3Bvb2xfZGVzdHJveShwcml2LT5jbWQucG9vbCk7CisJaW91bm1hcChwcml2LT5jbWQuaGNyKTsKK30KKworLyoKKyAqIFN3aXRjaCB0byB1c2luZyBldmVudHMgdG8gaXNzdWUgRlcgY29tbWFuZHMgKGNhbiBvbmx5IGJlIGNhbGxlZAorICogYWZ0ZXIgZXZlbnQgcXVldWUgZm9yIGNvbW1hbmQgZXZlbnRzIGhhcyBiZWVuIGluaXRpYWxpemVkKS4KKyAqLworaW50IG1seDRfY21kX3VzZV9ldmVudHMoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCWludCBpOworCisJcHJpdi0+Y21kLmNvbnRleHQgPSBrbWFsbG9jKHByaXYtPmNtZC5tYXhfY21kcyAqCisJCQkJICAgc2l6ZW9mIChzdHJ1Y3QgbWx4NF9jbWRfY29udGV4dCksCisJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5jbWQuY29udGV4dCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+Y21kLm1heF9jbWRzOyArK2kpIHsKKwkJcHJpdi0+Y21kLmNvbnRleHRbaV0udG9rZW4gPSBpOworCQlwcml2LT5jbWQuY29udGV4dFtpXS5uZXh0ICA9IGkgKyAxOworCX0KKworCXByaXYtPmNtZC5jb250ZXh0W3ByaXYtPmNtZC5tYXhfY21kcyAtIDFdLm5leHQgPSAtMTsKKwlwcml2LT5jbWQuZnJlZV9oZWFkID0gMDsKKworCXNlbWFfaW5pdCgmcHJpdi0+Y21kLmV2ZW50X3NlbSwgcHJpdi0+Y21kLm1heF9jbWRzKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+Y21kLmNvbnRleHRfbG9jayk7CisKKwlmb3IgKHByaXYtPmNtZC50b2tlbl9tYXNrID0gMTsKKwkgICAgIHByaXYtPmNtZC50b2tlbl9tYXNrIDwgcHJpdi0+Y21kLm1heF9jbWRzOworCSAgICAgcHJpdi0+Y21kLnRva2VuX21hc2sgPDw9IDEpCisJCTsgLyogbm90aGluZyAqLworCS0tcHJpdi0+Y21kLnRva2VuX21hc2s7CisKKwlwcml2LT5jbWQudXNlX2V2ZW50cyA9IDE7CisKKwlkb3duKCZwcml2LT5jbWQucG9sbF9zZW0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTd2l0Y2ggYmFjayB0byBwb2xsaW5nICh1c2VkIHdoZW4gc2h1dHRpbmcgZG93biB0aGUgZGV2aWNlKQorICovCit2b2lkIG1seDRfY21kX3VzZV9wb2xsaW5nKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCXByaXYtPmNtZC51c2VfZXZlbnRzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5jbWQubWF4X2NtZHM7ICsraSkKKwkJZG93bigmcHJpdi0+Y21kLmV2ZW50X3NlbSk7CisKKwlrZnJlZShwcml2LT5jbWQuY29udGV4dCk7CisKKwl1cCgmcHJpdi0+Y21kLnBvbGxfc2VtKTsKK30KKworc3RydWN0IG1seDRfY21kX21haWxib3ggKm1seDRfYWxsb2NfY21kX21haWxib3goc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CisKKwltYWlsYm94ID0ga21hbGxvYyhzaXplb2YgKm1haWxib3gsIEdGUF9LRVJORUwpOworCWlmICghbWFpbGJveCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltYWlsYm94LT5idWYgPSBwY2lfcG9vbF9hbGxvYyhtbHg0X3ByaXYoZGV2KS0+Y21kLnBvb2wsIEdGUF9LRVJORUwsCisJCQkJICAgICAgJm1haWxib3gtPmRtYSk7CisJaWYgKCFtYWlsYm94LT5idWYpIHsKKwkJa2ZyZWUobWFpbGJveCk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCXJldHVybiBtYWlsYm94OworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9hbGxvY19jbWRfbWFpbGJveCk7CisKK3ZvaWQgbWx4NF9mcmVlX2NtZF9tYWlsYm94KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveCkKK3sKKwlpZiAoIW1haWxib3gpCisJCXJldHVybjsKKworCXBjaV9wb29sX2ZyZWUobWx4NF9wcml2KGRldiktPmNtZC5wb29sLCBtYWlsYm94LT5idWYsIG1haWxib3gtPmRtYSk7CisJa2ZyZWUobWFpbGJveCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X2ZyZWVfY21kX21haWxib3gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9jcS5jIGIvZHJpdmVycy9uZXQvbWx4NC9jcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzN2Q3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L2NxLmMKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2LCAyMDA3IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVm9sdGFpcmUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorCisjaW5jbHVkZSA8bGludXgvbWx4NC9jbWQuaD4KKworI2luY2x1ZGUgIm1seDQuaCIKKyNpbmNsdWRlICJpY20uaCIKKworc3RydWN0IG1seDRfY3FfY29udGV4dCB7CisJX19iZTMyCQkJZmxhZ3M7CisJdTE2CQkJcmVzZXJ2ZWQxWzNdOworCV9fYmUxNgkJCXBhZ2Vfb2Zmc2V0OworCV9fYmUzMgkJCWxvZ3NpemVfdXNycGFnZTsKKwl1OAkJCXJlc2VydmVkMjsKKwl1OAkJCWNxX3BlcmlvZDsKKwl1OAkJCXJlc2VydmVkMzsKKwl1OAkJCWNxX21heF9jb3VudDsKKwl1OAkJCXJlc2VydmVkNFszXTsKKwl1OAkJCWNvbXBfZXFuOworCXU4CQkJbG9nX3BhZ2Vfc2l6ZTsKKwl1OAkJCXJlc2VydmVkNVsyXTsKKwl1OAkJCW10dF9iYXNlX2FkZHJfaDsKKwlfX2JlMzIJCQltdHRfYmFzZV9hZGRyX2w7CisJX19iZTMyCQkJbGFzdF9ub3RpZmllZF9pbmRleDsKKwlfX2JlMzIJCQlzb2xpY2l0X3Byb2R1Y2VyX2luZGV4OworCV9fYmUzMgkJCWNvbnN1bWVyX2luZGV4OworCV9fYmUzMgkJCXByb2R1Y2VyX2luZGV4OworCXU4CQkJcmVzZXJ2ZWQ2WzJdOworCV9fYmU2NAkJCWRiX3JlY19hZGRyOworfTsKKworI2RlZmluZSBNTFg0X0NRX1NUQVRVU19PSwkJKCAwIDw8IDI4KQorI2RlZmluZSBNTFg0X0NRX1NUQVRVU19PVkVSRkxPVwkJKCA5IDw8IDI4KQorI2RlZmluZSBNTFg0X0NRX1NUQVRVU19XUklURV9GQUlMCSgxMCA8PCAyOCkKKyNkZWZpbmUgTUxYNF9DUV9GTEFHX0NDCQkJKCAxIDw8IDE4KQorI2RlZmluZSBNTFg0X0NRX0ZMQUdfT0kJCQkoIDEgPDwgMTcpCisjZGVmaW5lIE1MWDRfQ1FfU1RBVEVfQVJNRUQJCSggOSA8PCAgOCkKKyNkZWZpbmUgTUxYNF9DUV9TVEFURV9BUk1FRF9TT0wJCSggNiA8PCAgOCkKKyNkZWZpbmUgTUxYNF9FUV9TVEFURV9GSVJFRAkJKDEwIDw8ICA4KQorCit2b2lkIG1seDRfY3FfY29tcGxldGlvbihzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTMyIGNxbikKK3sKKwlzdHJ1Y3QgbWx4NF9jcSAqY3E7CisKKwljcSA9IHJhZGl4X3RyZWVfbG9va3VwKCZtbHg0X3ByaXYoZGV2KS0+Y3FfdGFibGUudHJlZSwKKwkJCSAgICAgICBjcW4gJiAoZGV2LT5jYXBzLm51bV9jcXMgLSAxKSk7CisJaWYgKCFjcSkgeworCQltbHg0X3dhcm4oZGV2LCAiQ29tcGxldGlvbiBldmVudCBmb3IgYm9ndXMgQ1EgJTA4eFxuIiwgY3FuKTsKKwkJcmV0dXJuOworCX0KKworCSsrY3EtPmFybV9zbjsKKworCWNxLT5jb21wKGNxKTsKK30KKwordm9pZCBtbHg0X2NxX2V2ZW50KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1MzIgY3FuLCBpbnQgZXZlbnRfdHlwZSkKK3sKKwlzdHJ1Y3QgbWx4NF9jcV90YWJsZSAqY3FfdGFibGUgPSAmbWx4NF9wcml2KGRldiktPmNxX3RhYmxlOworCXN0cnVjdCBtbHg0X2NxICpjcTsKKworCXNwaW5fbG9jaygmY3FfdGFibGUtPmxvY2spOworCisJY3EgPSByYWRpeF90cmVlX2xvb2t1cCgmY3FfdGFibGUtPnRyZWUsIGNxbiAmIChkZXYtPmNhcHMubnVtX2NxcyAtIDEpKTsKKwlpZiAoY3EpCisJCWF0b21pY19pbmMoJmNxLT5yZWZjb3VudCk7CisKKwlzcGluX3VubG9jaygmY3FfdGFibGUtPmxvY2spOworCisJaWYgKCFjcSkgeworCQltbHg0X3dhcm4oZGV2LCAiQXN5bmMgZXZlbnQgZm9yIGJvZ3VzIENRICUwOHhcbiIsIGNxbik7CisJCXJldHVybjsKKwl9CisKKwljcS0+ZXZlbnQoY3EsIGV2ZW50X3R5cGUpOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNxLT5yZWZjb3VudCkpCisJCWNvbXBsZXRlKCZjcS0+ZnJlZSk7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9TVzJIV19DUShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3gsCisJCQkgaW50IGNxX251bSkKK3sKKwlyZXR1cm4gbWx4NF9jbWQoZGV2LCBtYWlsYm94LT5kbWEsIGNxX251bSwgMCwgTUxYNF9DTURfU1cySFdfQ1EsCisJCQlNTFg0X0NNRF9USU1FX0NMQVNTX0EpOworfQorCitzdGF0aWMgaW50IG1seDRfSFcyU1dfQ1Eoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94LAorCQkJIGludCBjcV9udW0pCit7CisJcmV0dXJuIG1seDRfY21kX2JveChkZXYsIDAsIG1haWxib3ggPyBtYWlsYm94LT5kbWEgOiAwLCBjcV9udW0sCisJCQkgICAgbWFpbGJveCA/IDAgOiAxLCBNTFg0X0NNRF9IVzJTV19DUSwKKwkJCSAgICBNTFg0X0NNRF9USU1FX0NMQVNTX0EpOworfQorCitpbnQgbWx4NF9jcV9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IG5lbnQsIHN0cnVjdCBtbHg0X210dCAqbXR0LAorCQkgIHN0cnVjdCBtbHg0X3VhciAqdWFyLCB1NjQgZGJfcmVjLCBzdHJ1Y3QgbWx4NF9jcSAqY3EpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2NxX3RhYmxlICpjcV90YWJsZSA9ICZwcml2LT5jcV90YWJsZTsKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwlzdHJ1Y3QgbWx4NF9jcV9jb250ZXh0ICpjcV9jb250ZXh0OworCXU2NCBtdHRfYWRkcjsKKwlpbnQgZXJyOworCisJY3EtPmNxbiA9IG1seDRfYml0bWFwX2FsbG9jKCZjcV90YWJsZS0+Yml0bWFwKTsKKwlpZiAoY3EtPmNxbiA9PSAtMSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBtbHg0X3RhYmxlX2dldChkZXYsICZjcV90YWJsZS0+dGFibGUsIGNxLT5jcW4pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCWVyciA9IG1seDRfdGFibGVfZ2V0KGRldiwgJmNxX3RhYmxlLT5jbXB0X3RhYmxlLCBjcS0+Y3FuKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9wdXQ7CisKKwlzcGluX2xvY2tfaXJxKCZjcV90YWJsZS0+bG9jayk7CisJZXJyID0gcmFkaXhfdHJlZV9pbnNlcnQoJmNxX3RhYmxlLT50cmVlLCBjcS0+Y3FuLCBjcSk7CisJc3Bpbl91bmxvY2tfaXJxKCZjcV90YWJsZS0+bG9jayk7CisJaWYgKGVycikKKwkJZ290byBlcnJfY21wdF9wdXQ7CisKKwltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOworCWlmIChJU19FUlIobWFpbGJveCkpIHsKKwkJZXJyID0gUFRSX0VSUihtYWlsYm94KTsKKwkJZ290byBlcnJfcmFkaXg7CisJfQorCisJY3FfY29udGV4dCA9IG1haWxib3gtPmJ1ZjsKKwltZW1zZXQoY3FfY29udGV4dCwgMCwgc2l6ZW9mICpjcV9jb250ZXh0KTsKKworCWNxX2NvbnRleHQtPmxvZ3NpemVfdXNycGFnZSA9IGNwdV90b19iZTMyKChpbG9nMihuZW50KSA8PCAyNCkgfCB1YXItPmluZGV4KTsKKwljcV9jb250ZXh0LT5jb21wX2VxbiAgICAgICAgPSBwcml2LT5lcV90YWJsZS5lcVtNTFg0X0VRX0NPTVBdLmVxbjsKKwljcV9jb250ZXh0LT5sb2dfcGFnZV9zaXplICAgPSBtdHQtPnBhZ2Vfc2hpZnQgLSBNTFg0X0lDTV9QQUdFX1NISUZUOworCisJbXR0X2FkZHIgPSBtbHg0X210dF9hZGRyKGRldiwgbXR0KTsKKwljcV9jb250ZXh0LT5tdHRfYmFzZV9hZGRyX2ggPSBtdHRfYWRkciA+PiAzMjsKKwljcV9jb250ZXh0LT5tdHRfYmFzZV9hZGRyX2wgPSBjcHVfdG9fYmUzMihtdHRfYWRkciAmIDB4ZmZmZmZmZmYpOworCWNxX2NvbnRleHQtPmRiX3JlY19hZGRyICAgICA9IGNwdV90b19iZTY0KGRiX3JlYyk7CisKKwllcnIgPSBtbHg0X1NXMkhXX0NRKGRldiwgbWFpbGJveCwgY3EtPmNxbik7CisJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcmFkaXg7CisKKwljcS0+Y29uc19pbmRleCA9IDA7CisJY3EtPmFybV9zbiAgICAgPSAxOworCWNxLT51YXIgICAgICAgID0gdWFyOworCWF0b21pY19zZXQoJmNxLT5yZWZjb3VudCwgMSk7CisJaW5pdF9jb21wbGV0aW9uKCZjcS0+ZnJlZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3JhZGl4OgorCXNwaW5fbG9ja19pcnEoJmNxX3RhYmxlLT5sb2NrKTsKKwlyYWRpeF90cmVlX2RlbGV0ZSgmY3FfdGFibGUtPnRyZWUsIGNxLT5jcW4pOworCXNwaW5fdW5sb2NrX2lycSgmY3FfdGFibGUtPmxvY2spOworCitlcnJfY21wdF9wdXQ6CisJbWx4NF90YWJsZV9wdXQoZGV2LCAmY3FfdGFibGUtPmNtcHRfdGFibGUsIGNxLT5jcW4pOworCitlcnJfcHV0OgorCW1seDRfdGFibGVfcHV0KGRldiwgJmNxX3RhYmxlLT50YWJsZSwgY3EtPmNxbik7CisKK2Vycl9vdXQ6CisJbWx4NF9iaXRtYXBfZnJlZSgmY3FfdGFibGUtPmJpdG1hcCwgY3EtPmNxbik7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9jcV9hbGxvYyk7CisKK3ZvaWQgbWx4NF9jcV9mcmVlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9jcSAqY3EpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2NxX3RhYmxlICpjcV90YWJsZSA9ICZwcml2LT5jcV90YWJsZTsKKwlpbnQgZXJyOworCisJZXJyID0gbWx4NF9IVzJTV19DUShkZXYsIE5VTEwsIGNxLT5jcW4pOworCWlmIChlcnIpCisJCW1seDRfd2FybihkZXYsICJIVzJTV19DUSBmYWlsZWQgKCVkKSBmb3IgQ1FOICUwNnhcbiIsIGVyciwgY3EtPmNxbik7CisKKwlzeW5jaHJvbml6ZV9pcnEocHJpdi0+ZXFfdGFibGUuZXFbTUxYNF9FUV9DT01QXS5pcnEpOworCisJc3Bpbl9sb2NrX2lycSgmY3FfdGFibGUtPmxvY2spOworCXJhZGl4X3RyZWVfZGVsZXRlKCZjcV90YWJsZS0+dHJlZSwgY3EtPmNxbik7CisJc3Bpbl91bmxvY2tfaXJxKCZjcV90YWJsZS0+bG9jayk7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3EtPnJlZmNvdW50KSkKKwkJY29tcGxldGUoJmNxLT5mcmVlKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjcS0+ZnJlZSk7CisKKwltbHg0X3RhYmxlX3B1dChkZXYsICZjcV90YWJsZS0+dGFibGUsIGNxLT5jcW4pOworCW1seDRfYml0bWFwX2ZyZWUoJmNxX3RhYmxlLT5iaXRtYXAsIGNxLT5jcW4pOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9jcV9mcmVlKTsKKworaW50IF9fZGV2aW5pdCBtbHg0X2luaXRfY3FfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfY3FfdGFibGUgKmNxX3RhYmxlID0gJm1seDRfcHJpdihkZXYpLT5jcV90YWJsZTsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrX2luaXQoJmNxX3RhYmxlLT5sb2NrKTsKKwlJTklUX1JBRElYX1RSRUUoJmNxX3RhYmxlLT50cmVlLCBHRlBfQVRPTUlDKTsKKworCWVyciA9IG1seDRfYml0bWFwX2luaXQoJmNxX3RhYmxlLT5iaXRtYXAsIGRldi0+Y2Fwcy5udW1fY3FzLAorCQkJICAgICAgIGRldi0+Y2Fwcy5udW1fY3FzIC0gMSwgZGV2LT5jYXBzLnJlc2VydmVkX2Nxcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCit2b2lkIG1seDRfY2xlYW51cF9jcV90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwkvKiBOb3RoaW5nIHRvIGRvIHRvIGNsZWFuIHVwIHJhZGl4X3RyZWUgKi8KKwltbHg0X2JpdG1hcF9jbGVhbnVwKCZtbHg0X3ByaXYoZGV2KS0+Y3FfdGFibGUuYml0bWFwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZXEuYyBiL2RyaXZlcnMvbmV0L21seDQvZXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjExYWRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lcS5jCkBAIC0wLDAgKzEsNjk3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiwgMjAwNyBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqCS0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICoJICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICoJICBkaXNjbGFpbWVyLgorICoKKyAqCS0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICoJICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICoJICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqCSAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8bGludXgvbWx4NC9jbWQuaD4KKworI2luY2x1ZGUgIm1seDQuaCIKKyNpbmNsdWRlICJmdy5oIgorCitlbnVtIHsKKwlNTFg0X05VTV9BU1lOQ19FUUUJPSAweDEwMCwKKwlNTFg0X05VTV9TUEFSRV9FUUUJPSAweDgwLAorCU1MWDRfRVFfRU5UUllfU0laRQk9IDB4MjAKK307CisKKy8qCisgKiBNdXN0IGJlIHBhY2tlZCBiZWNhdXNlIHN0YXJ0IGlzIDY0IGJpdHMgYnV0IG9ubHkgYWxpZ25lZCB0byAzMiBiaXRzLgorICovCitzdHJ1Y3QgbWx4NF9lcV9jb250ZXh0IHsKKwlfX2JlMzIJCQlmbGFnczsKKwl1MTYJCQlyZXNlcnZlZDFbM107CisJX19iZTE2CQkJcGFnZV9vZmZzZXQ7CisJdTgJCQlsb2dfZXFfc2l6ZTsKKwl1OAkJCXJlc2VydmVkMls0XTsKKwl1OAkJCWVxX3BlcmlvZDsKKwl1OAkJCXJlc2VydmVkMzsKKwl1OAkJCWVxX21heF9jb3VudDsKKwl1OAkJCXJlc2VydmVkNFszXTsKKwl1OAkJCWludHI7CisJdTgJCQlsb2dfcGFnZV9zaXplOworCXU4CQkJcmVzZXJ2ZWQ1WzJdOworCXU4CQkJbXR0X2Jhc2VfYWRkcl9oOworCV9fYmUzMgkJCW10dF9iYXNlX2FkZHJfbDsKKwl1MzIJCQlyZXNlcnZlZDZbMl07CisJX19iZTMyCQkJY29uc3VtZXJfaW5kZXg7CisJX19iZTMyCQkJcHJvZHVjZXJfaW5kZXg7CisJdTMyCQkJcmVzZXJ2ZWQ3WzRdOworfTsKKworI2RlZmluZSBNTFg0X0VRX1NUQVRVU19PSwkgICAoIDAgPDwgMjgpCisjZGVmaW5lIE1MWDRfRVFfU1RBVFVTX1dSSVRFX0ZBSUwgICgxMCA8PCAyOCkKKyNkZWZpbmUgTUxYNF9FUV9PV05FUl9TVwkgICAoIDAgPDwgMjQpCisjZGVmaW5lIE1MWDRfRVFfT1dORVJfSFcJICAgKCAxIDw8IDI0KQorI2RlZmluZSBNTFg0X0VRX0ZMQUdfRUMJCSAgICggMSA8PCAxOCkKKyNkZWZpbmUgTUxYNF9FUV9GTEFHX09JCQkgICAoIDEgPDwgMTcpCisjZGVmaW5lIE1MWDRfRVFfU1RBVEVfQVJNRUQJICAgKCA5IDw8ICA4KQorI2RlZmluZSBNTFg0X0VRX1NUQVRFX0ZJUkVECSAgICgxMCA8PCAgOCkKKyNkZWZpbmUgTUxYNF9FUV9TVEFURV9BTFdBWVNfQVJNRUQgKDExIDw8ICA4KQorCisjZGVmaW5lIE1MWDRfQVNZTkNfRVZFTlRfTUFTSyAoKDF1bGwgPDwgTUxYNF9FVkVOVF9UWVBFX1BBVEhfTUlHKQkgICAgfCBcCisJCQkgICAgICAgKDF1bGwgPDwgTUxYNF9FVkVOVF9UWVBFX0NPTU1fRVNUKQkgICAgfCBcCisJCQkgICAgICAgKDF1bGwgPDwgTUxYNF9FVkVOVF9UWVBFX1NRX0RSQUlORUQpCSAgICB8IFwKKwkJCSAgICAgICAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfQ1FfRVJST1IpCSAgICB8IFwKKwkJCSAgICAgICAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfV1FfQ0FUQVNfRVJST1IpCSAgICB8IFwKKwkJCSAgICAgICAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfRUVDX0NBVEFTX0VSUk9SKSAgICB8IFwKKwkJCSAgICAgICAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfUEFUSF9NSUdfRkFJTEVEKSAgICB8IFwKKwkJCSAgICAgICAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfV1FfSU5WQUxfUkVRX0VSUk9SKSB8IFwKKwkJCSAgICAgICAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfV1FfQUNDRVNTX0VSUk9SKSAgICB8IFwKKwkJCSAgICAgICAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfTE9DQUxfQ0FUQVNfRVJST1IpICB8IFwKKwkJCSAgICAgICAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfUE9SVF9DSEFOR0UpCSAgICB8IFwKKwkJCSAgICAgICAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfRUNDX0RFVEVDVCkJICAgIHwgXAorCQkJICAgICAgICgxdWxsIDw8IE1MWDRfRVZFTlRfVFlQRV9TUlFfQ0FUQVNfRVJST1IpICAgIHwgXAorCQkJICAgICAgICgxdWxsIDw8IE1MWDRfRVZFTlRfVFlQRV9TUlFfUVBfTEFTVF9XUUUpICAgIHwgXAorCQkJICAgICAgICgxdWxsIDw8IE1MWDRfRVZFTlRfVFlQRV9TUlFfTElNSVQpCSAgICB8IFwKKwkJCSAgICAgICAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfQ01EKSkKKyNkZWZpbmUgTUxYNF9DQVRBU19FVkVOVF9NQVNLICAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfTE9DQUxfQ0FUQVNfRVJST1IpCisKK3N0cnVjdCBtbHg0X2VxZSB7CisJdTgJCQlyZXNlcnZlZDE7CisJdTgJCQl0eXBlOworCXU4CQkJcmVzZXJ2ZWQyOworCXU4CQkJc3VidHlwZTsKKwl1bmlvbiB7CisJCXUzMgkJcmF3WzZdOworCQlzdHJ1Y3QgeworCQkJX19iZTMyCWNxbjsKKwkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBjb21wOworCQlzdHJ1Y3QgeworCQkJdTE2CXJlc2VydmVkMTsKKwkJCV9fYmUxNgl0b2tlbjsKKwkJCXUzMglyZXNlcnZlZDI7CisJCQl1OAlyZXNlcnZlZDNbM107CisJCQl1OAlzdGF0dXM7CisJCQlfX2JlNjQJb3V0X3BhcmFtOworCQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGNtZDsKKwkJc3RydWN0IHsKKwkJCV9fYmUzMglxcG47CisJCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgcXA7CisJCXN0cnVjdCB7CisJCQlfX2JlMzIJc3JxbjsKKwkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzcnE7CisJCXN0cnVjdCB7CisJCQlfX2JlMzIJY3FuOworCQkJdTMyCXJlc2VydmVkMTsKKwkJCXU4CXJlc2VydmVkMlszXTsKKwkJCXU4CXN5bmRyb21lOworCQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGNxX2VycjsKKwkJc3RydWN0IHsKKwkJCXUzMglyZXNlcnZlZDFbMl07CisJCQlfX2JlMzIJcG9ydDsKKwkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBwb3J0X2NoYW5nZTsKKwl9CQkJZXZlbnQ7CisJdTgJCQlyZXNlcnZlZDNbM107CisJdTgJCQlvd25lcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyB2b2lkIGVxX3NldF9jaShzdHJ1Y3QgbWx4NF9lcSAqZXEsIGludCByZXFfbm90KQoreworCV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpIGNwdV90b19iZTMyKChlcS0+Y29uc19pbmRleCAmIDB4ZmZmZmZmKSB8CisJCQkJCSAgICAgICByZXFfbm90IDw8IDMxKSwKKwkJICAgICBlcS0+ZG9vcmJlbGwpOworCS8qIFdlIHN0aWxsIHdhbnQgb3JkZXJpbmcsIGp1c3Qgbm90IHN3YWJiaW5nLCBzbyBhZGQgYSBiYXJyaWVyICovCisJbWIoKTsKK30KKworc3RhdGljIHN0cnVjdCBtbHg0X2VxZSAqZ2V0X2VxZShzdHJ1Y3QgbWx4NF9lcSAqZXEsIHUzMiBlbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZiA9IChlbnRyeSAmIChlcS0+bmVudCAtIDEpKSAqIE1MWDRfRVFfRU5UUllfU0laRTsKKwlyZXR1cm4gZXEtPnBhZ2VfbGlzdFtvZmYgLyBQQUdFX1NJWkVdLmJ1ZiArIG9mZiAlIFBBR0VfU0laRTsKK30KKworc3RhdGljIHN0cnVjdCBtbHg0X2VxZSAqbmV4dF9lcWVfc3coc3RydWN0IG1seDRfZXEgKmVxKQoreworCXN0cnVjdCBtbHg0X2VxZSAqZXFlID0gZ2V0X2VxZShlcSwgZXEtPmNvbnNfaW5kZXgpOworCXJldHVybiAhIShlcWUtPm93bmVyICYgMHg4MCkgXiAhIShlcS0+Y29uc19pbmRleCAmIGVxLT5uZW50KSA/IE5VTEwgOiBlcWU7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9lcV9pbnQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2VxICplcSkKK3sKKwlzdHJ1Y3QgbWx4NF9lcWUgKmVxZTsKKwlpbnQgY3FuOworCWludCBlcWVzX2ZvdW5kID0gMDsKKwlpbnQgc2V0X2NpID0gMDsKKworCXdoaWxlICgoZXFlID0gbmV4dF9lcWVfc3coZXEpKSkgeworCQkvKgorCQkgKiBNYWtlIHN1cmUgd2UgcmVhZCBFUSBlbnRyeSBjb250ZW50cyBhZnRlciB3ZSd2ZQorCQkgKiBjaGVja2VkIHRoZSBvd25lcnNoaXAgYml0LgorCQkgKi8KKwkJcm1iKCk7CisKKwkJc3dpdGNoIChlcWUtPnR5cGUpIHsKKwkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfQ09NUDoKKwkJCWNxbiA9IGJlMzJfdG9fY3B1KGVxZS0+ZXZlbnQuY29tcC5jcW4pICYgMHhmZmZmZmY7CisJCQltbHg0X2NxX2NvbXBsZXRpb24oZGV2LCBjcW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfUEFUSF9NSUc6CisJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX0NPTU1fRVNUOgorCQljYXNlIE1MWDRfRVZFTlRfVFlQRV9TUV9EUkFJTkVEOgorCQljYXNlIE1MWDRfRVZFTlRfVFlQRV9TUlFfUVBfTEFTVF9XUUU6CisJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX1dRX0NBVEFTX0VSUk9SOgorCQljYXNlIE1MWDRfRVZFTlRfVFlQRV9QQVRIX01JR19GQUlMRUQ6CisJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX1dRX0lOVkFMX1JFUV9FUlJPUjoKKwkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfV1FfQUNDRVNTX0VSUk9SOgorCQkJbWx4NF9xcF9ldmVudChkZXYsIGJlMzJfdG9fY3B1KGVxZS0+ZXZlbnQucXAucXBuKSAmIDB4ZmZmZmZmLAorCQkJCSAgICAgIGVxZS0+dHlwZSk7CisJCQlicmVhazsKKworCQljYXNlIE1MWDRfRVZFTlRfVFlQRV9TUlFfTElNSVQ6CisJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX1NSUV9DQVRBU19FUlJPUjoKKwkJCW1seDRfc3JxX2V2ZW50KGRldiwgYmUzMl90b19jcHUoZXFlLT5ldmVudC5zcnEuc3JxbikgJiAweGZmZmZmZiwKKwkJCQkgICAgICBlcWUtPnR5cGUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfQ01EOgorCQkJbWx4NF9jbWRfZXZlbnQoZGV2LAorCQkJCSAgICAgICBiZTE2X3RvX2NwdShlcWUtPmV2ZW50LmNtZC50b2tlbiksCisJCQkJICAgICAgIGVxZS0+ZXZlbnQuY21kLnN0YXR1cywKKwkJCQkgICAgICAgYmU2NF90b19jcHUoZXFlLT5ldmVudC5jbWQub3V0X3BhcmFtKSk7CisJCQlicmVhazsKKworCQljYXNlIE1MWDRfRVZFTlRfVFlQRV9QT1JUX0NIQU5HRToKKwkJCW1seDRfZGlzcGF0Y2hfZXZlbnQoZGV2LCBlcWUtPnR5cGUsIGVxZS0+c3VidHlwZSwKKwkJCQkJICAgIGJlMzJfdG9fY3B1KGVxZS0+ZXZlbnQucG9ydF9jaGFuZ2UucG9ydCkgPj4gMjgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfQ1FfRVJST1I6CisJCQltbHg0X3dhcm4oZGV2LCAiQ1EgJXMgb24gQ1FOICUwNnhcbiIsCisJCQkJICBlcWUtPmV2ZW50LmNxX2Vyci5zeW5kcm9tZSA9PSAxID8KKwkJCQkgICJvdmVycnVuIiA6ICJhY2Nlc3MgdmlvbGF0aW9uIiwKKwkJCQkgIGJlMzJfdG9fY3B1KGVxZS0+ZXZlbnQuY3FfZXJyLmNxbikgJiAweGZmZmZmZik7CisJCQltbHg0X2NxX2V2ZW50KGRldiwgYmUzMl90b19jcHUoZXFlLT5ldmVudC5jcV9lcnIuY3FuKSwKKwkJCQkgICAgICBlcWUtPnR5cGUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfRVFfT1ZFUkZMT1c6CisJCQltbHg0X3dhcm4oZGV2LCAiRVEgb3ZlcnJ1biBvbiBFUU4gJWRcbiIsIGVxLT5lcW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfRUVDX0NBVEFTX0VSUk9SOgorCQljYXNlIE1MWDRfRVZFTlRfVFlQRV9FQ0NfREVURUNUOgorCQlkZWZhdWx0OgorCQkJbWx4NF93YXJuKGRldiwgIlVuaGFuZGxlZCBldmVudCAlMDJ4KCUwMngpIG9uIEVRICVkIGF0IGluZGV4ICV1XG4iLAorCQkJCSAgZXFlLT50eXBlLCBlcWUtPnN1YnR5cGUsIGVxLT5lcW4sIGVxLT5jb25zX2luZGV4KTsKKwkJCWJyZWFrOworCQl9OworCisJCSsrZXEtPmNvbnNfaW5kZXg7CisJCWVxZXNfZm91bmQgPSAxOworCQkrK3NldF9jaTsKKworCQkvKgorCQkgKiBUaGUgSENBIHdpbGwgdGhpbmsgdGhlIHF1ZXVlIGhhcyBvdmVyZmxvd2VkIGlmIHdlCisJCSAqIGRvbid0IHRlbGwgaXQgd2UndmUgYmVlbiBwcm9jZXNzaW5nIGV2ZW50cy4gIFdlCisJCSAqIGNyZWF0ZSBvdXIgRVFzIHdpdGggTUxYNF9OVU1fU1BBUkVfRVFFIGV4dHJhCisJCSAqIGVudHJpZXMsIHNvIHdlIG11c3QgdXBkYXRlIG91ciBjb25zdW1lciBpbmRleCBhdAorCQkgKiBsZWFzdCB0aGF0IG9mdGVuLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHNldF9jaSA+PSBNTFg0X05VTV9TUEFSRV9FUUUpKSB7CisJCQkvKgorCQkJICogQ29uZGl0aW9uYWwgb24gaGNhX3R5cGUgaXMgT0sgaGVyZSBiZWNhdXNlCisJCQkgKiB0aGlzIGlzIGEgcmFyZSBjYXNlLCBub3QgdGhlIGZhc3QgcGF0aC4KKwkJCSAqLworCQkJZXFfc2V0X2NpKGVxLCAwKTsKKwkJCXNldF9jaSA9IDA7CisJCX0KKwl9CisKKwllcV9zZXRfY2koZXEsIDEpOworCisJcmV0dXJuIGVxZXNfZm91bmQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtbHg0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfcHRyKQoreworCXN0cnVjdCBtbHg0X2RldiAqZGV2ID0gZGV2X3B0cjsKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJaW50IHdvcmsgPSAwOworCWludCBpOworCisJd3JpdGVsKHByaXYtPmVxX3RhYmxlLmNscl9tYXNrLCBwcml2LT5lcV90YWJsZS5jbHJfaW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBNTFg0X0VRX0NBVEFTOyArK2kpCisJCXdvcmsgfD0gbWx4NF9lcV9pbnQoZGV2LCAmcHJpdi0+ZXFfdGFibGUuZXFbaV0pOworCisJcmV0dXJuIElSUV9SRVRWQUwod29yayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtbHg0X21zaV94X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICplcV9wdHIpCit7CisJc3RydWN0IG1seDRfZXEgICplcSAgPSBlcV9wdHI7CisJc3RydWN0IG1seDRfZGV2ICpkZXYgPSBlcS0+ZGV2OworCisJbWx4NF9lcV9pbnQoZGV2LCBlcSk7CisKKwkvKiBNU0ktWCB2ZWN0b3JzIGFsd2F5cyBiZWxvbmcgdG8gdXMgKi8KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtbHg0X2NhdGFzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfcHRyKQoreworCW1seDRfaGFuZGxlX2NhdGFzX2VycihkZXZfcHRyKTsKKworCS8qIE1TSS1YIHZlY3RvcnMgYWx3YXlzIGJlbG9uZyB0byB1cyAqLworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBtbHg0X01BUF9FUShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTY0IGV2ZW50X21hc2ssIGludCB1bm1hcCwKKwkJCWludCBlcV9udW0pCit7CisJcmV0dXJuIG1seDRfY21kKGRldiwgZXZlbnRfbWFzaywgKHVubWFwIDw8IDMxKSB8IGVxX251bSwKKwkJCTAsIE1MWDRfQ01EX01BUF9FUSwgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKK30KKworc3RhdGljIGludCBtbHg0X1NXMkhXX0VRKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveCwKKwkJCSBpbnQgZXFfbnVtKQoreworCXJldHVybiBtbHg0X2NtZChkZXYsIG1haWxib3gtPmRtYSwgZXFfbnVtLCAwLCBNTFg0X0NNRF9TVzJIV19FUSwKKwkJCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQSk7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9IVzJTV19FUShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3gsCisJCQkgaW50IGVxX251bSkKK3sKKwlyZXR1cm4gbWx4NF9jbWRfYm94KGRldiwgMCwgbWFpbGJveC0+ZG1hLCBlcV9udW0sIDAsIE1MWDRfQ01EX0hXMlNXX0VRLAorCQkJICAgIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBfX2lvbWVtICptbHg0X2dldF9lcV91YXIoc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgbWx4NF9lcSAqZXEpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCWludCBpbmRleDsKKworCWluZGV4ID0gZXEtPmVxbiAvIDQgLSBkZXYtPmNhcHMucmVzZXJ2ZWRfZXFzIC8gNDsKKworCWlmICghcHJpdi0+ZXFfdGFibGUudWFyX21hcFtpbmRleF0pIHsKKwkJcHJpdi0+ZXFfdGFibGUudWFyX21hcFtpbmRleF0gPQorCQkJaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAyKSArCisJCQkJKChlcS0+ZXFuIC8gNCkgPDwgUEFHRV9TSElGVCksCisJCQkJUEFHRV9TSVpFKTsKKwkJaWYgKCFwcml2LT5lcV90YWJsZS51YXJfbWFwW2luZGV4XSkgeworCQkJbWx4NF9lcnIoZGV2LCAiQ291bGRuJ3QgbWFwIEVRIGRvb3JiZWxsIGZvciBFUU4gMHglMDZ4XG4iLAorCQkJCSBlcS0+ZXFuKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIHByaXYtPmVxX3RhYmxlLnVhcl9tYXBbaW5kZXhdICsgMHg4MDAgKyA4ICogKGVxLT5lcW4gJSA0KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWx4NF9jcmVhdGVfZXEoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBuZW50LAorCQkJCSAgICB1OCBpbnRyLCBzdHJ1Y3QgbWx4NF9lcSAqZXEpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OworCXN0cnVjdCBtbHg0X2VxX2NvbnRleHQgKmVxX2NvbnRleHQ7CisJaW50IG5wYWdlczsKKwl1NjQgKmRtYV9saXN0ID0gTlVMTDsKKwlkbWFfYWRkcl90IHQ7CisJdTY0IG10dF9hZGRyOworCWludCBlcnIgPSAtRU5PTUVNOworCWludCBpOworCisJZXEtPmRldiAgID0gZGV2OworCWVxLT5uZW50ICA9IHJvdW5kdXBfcG93X29mX3R3byhtYXgobmVudCwgMikpOworCW5wYWdlcyA9IFBBR0VfQUxJR04oZXEtPm5lbnQgKiBNTFg0X0VRX0VOVFJZX1NJWkUpIC8gUEFHRV9TSVpFOworCisJZXEtPnBhZ2VfbGlzdCA9IGttYWxsb2MobnBhZ2VzICogc2l6ZW9mICplcS0+cGFnZV9saXN0LAorCQkJCUdGUF9LRVJORUwpOworCWlmICghZXEtPnBhZ2VfbGlzdCkKKwkJZ290byBlcnJfb3V0OworCisJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgKytpKQorCQllcS0+cGFnZV9saXN0W2ldLmJ1ZiA9IE5VTEw7CisKKwlkbWFfbGlzdCA9IGttYWxsb2MobnBhZ2VzICogc2l6ZW9mICpkbWFfbGlzdCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbWFfbGlzdCkKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOworCWlmIChJU19FUlIobWFpbGJveCkpCisJCWdvdG8gZXJyX291dF9mcmVlOworCWVxX2NvbnRleHQgPSBtYWlsYm94LT5idWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyArK2kpIHsKKwkJZXEtPnBhZ2VfbGlzdFtpXS5idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmRldi0+cGRldi0+ZGV2LAorCQkJCQkJCSAgUEFHRV9TSVpFLCAmdCwgR0ZQX0tFUk5FTCk7CisJCWlmICghZXEtPnBhZ2VfbGlzdFtpXS5idWYpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlczsKKworCQlkbWFfbGlzdFtpXSA9IHQ7CisJCWVxLT5wYWdlX2xpc3RbaV0ubWFwID0gdDsKKworCQltZW1zZXQoZXEtPnBhZ2VfbGlzdFtpXS5idWYsIDAsIFBBR0VfU0laRSk7CisJfQorCisJZXEtPmVxbiA9IG1seDRfYml0bWFwX2FsbG9jKCZwcml2LT5lcV90YWJsZS5iaXRtYXApOworCWlmIChlcS0+ZXFuID09IC0xKQorCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlczsKKworCWVxLT5kb29yYmVsbCA9IG1seDRfZ2V0X2VxX3VhcihkZXYsIGVxKTsKKwlpZiAoIWVxLT5kb29yYmVsbCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZnJlZV9lcTsKKwl9CisKKwllcnIgPSBtbHg0X210dF9pbml0KGRldiwgbnBhZ2VzLCBQQUdFX1NISUZULCAmZXEtPm10dCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWVfZXE7CisKKwllcnIgPSBtbHg0X3dyaXRlX210dChkZXYsICZlcS0+bXR0LCAwLCBucGFnZXMsIGRtYV9saXN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZV9tdHQ7CisKKwltZW1zZXQoZXFfY29udGV4dCwgMCwgc2l6ZW9mICplcV9jb250ZXh0KTsKKwllcV9jb250ZXh0LT5mbGFncwkgID0gY3B1X3RvX2JlMzIoTUxYNF9FUV9TVEFUVVNfT0sgICB8CisJCQkJCQlNTFg0X0VRX1NUQVRFX0FSTUVEKTsKKwllcV9jb250ZXh0LT5sb2dfZXFfc2l6ZQkgID0gaWxvZzIoZXEtPm5lbnQpOworCWVxX2NvbnRleHQtPmludHIJICA9IGludHI7CisJZXFfY29udGV4dC0+bG9nX3BhZ2Vfc2l6ZSA9IFBBR0VfU0hJRlQgLSBNTFg0X0lDTV9QQUdFX1NISUZUOworCisJbXR0X2FkZHIgPSBtbHg0X210dF9hZGRyKGRldiwgJmVxLT5tdHQpOworCWVxX2NvbnRleHQtPm10dF9iYXNlX2FkZHJfaCA9IG10dF9hZGRyID4+IDMyOworCWVxX2NvbnRleHQtPm10dF9iYXNlX2FkZHJfbCA9IGNwdV90b19iZTMyKG10dF9hZGRyICYgMHhmZmZmZmZmZik7CisKKwllcnIgPSBtbHg0X1NXMkhXX0VRKGRldiwgbWFpbGJveCwgZXEtPmVxbik7CisJaWYgKGVycikgeworCQltbHg0X3dhcm4oZGV2LCAiU1cySFdfRVEgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gZXJyX291dF9mcmVlX210dDsKKwl9CisKKwlrZnJlZShkbWFfbGlzdCk7CisJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CisKKwllcS0+Y29uc19pbmRleCA9IDA7CisKKwlyZXR1cm4gZXJyOworCitlcnJfb3V0X2ZyZWVfbXR0OgorCW1seDRfbXR0X2NsZWFudXAoZGV2LCAmZXEtPm10dCk7CisKK2Vycl9vdXRfZnJlZV9lcToKKwltbHg0X2JpdG1hcF9mcmVlKCZwcml2LT5lcV90YWJsZS5iaXRtYXAsIGVxLT5lcW4pOworCitlcnJfb3V0X2ZyZWVfcGFnZXM6CisJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgKytpKQorCQlpZiAoZXEtPnBhZ2VfbGlzdFtpXS5idWYpCisJCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIFBBR0VfU0laRSwKKwkJCQkJICBlcS0+cGFnZV9saXN0W2ldLmJ1ZiwKKwkJCQkJICBlcS0+cGFnZV9saXN0W2ldLm1hcCk7CisKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LCBtYWlsYm94KTsKKworZXJyX291dF9mcmVlOgorCWtmcmVlKGVxLT5wYWdlX2xpc3QpOworCWtmcmVlKGRtYV9saXN0KTsKKworZXJyX291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2ZyZWVfZXEoc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCQkgc3RydWN0IG1seDRfZXEgKmVxKQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwlpbnQgZXJyOworCWludCBucGFnZXMgPSBQQUdFX0FMSUdOKE1MWDRfRVFfRU5UUllfU0laRSAqIGVxLT5uZW50KSAvIFBBR0VfU0laRTsKKwlpbnQgaTsKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CisJaWYgKElTX0VSUihtYWlsYm94KSkKKwkJcmV0dXJuOworCisJZXJyID0gbWx4NF9IVzJTV19FUShkZXYsIG1haWxib3gsIGVxLT5lcW4pOworCWlmIChlcnIpCisJCW1seDRfd2FybihkZXYsICJIVzJTV19FUSBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKworCWlmICgwKSB7CisJCW1seDRfZGJnKGRldiwgIkR1bXBpbmcgRVEgY29udGV4dCAlMDJ4OlxuIiwgZXEtPmVxbik7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHN0cnVjdCBtbHg0X2VxX2NvbnRleHQpIC8gNDsgKytpKSB7CisJCQlpZiAoaSAlIDQgPT0gMCkKKwkJCQlwcmludGsoIlslMDJ4XSAiLCBpICogNCk7CisJCQlwcmludGsoIiAlMDh4IiwgYmUzMl90b19jcHVwKG1haWxib3gtPmJ1ZiArIGkgKiA0KSk7CisJCQlpZiAoKGkgKyAxKSAlIDQgPT0gMCkKKwkJCQlwcmludGsoIlxuIik7CisJCX0KKwl9CisKKwltbHg0X210dF9jbGVhbnVwKGRldiwgJmVxLT5tdHQpOworCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7ICsraSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBkZXYsIFBBR0VfU0laRSwKKwkJCQkgICAgZXEtPnBhZ2VfbGlzdFtpXS5idWYsCisJCQkJICAgIGVxLT5wYWdlX2xpc3RbaV0ubWFwKTsKKworCWtmcmVlKGVxLT5wYWdlX2xpc3QpOworCW1seDRfYml0bWFwX2ZyZWUoJnByaXYtPmVxX3RhYmxlLmJpdG1hcCwgZXEtPmVxbik7CisJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7Cit9CisKK3N0YXRpYyB2b2lkIG1seDRfZnJlZV9pcnFzKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X2VxX3RhYmxlICplcV90YWJsZSA9ICZtbHg0X3ByaXYoZGV2KS0+ZXFfdGFibGU7CisJaW50IGk7CisKKwlpZiAoZXFfdGFibGUtPmhhdmVfaXJxKQorCQlmcmVlX2lycShkZXYtPnBkZXYtPmlycSwgZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgTUxYNF9OVU1fRVE7ICsraSkKKwkJaWYgKGVxX3RhYmxlLT5lcVtpXS5oYXZlX2lycSkKKwkJCWZyZWVfaXJxKGVxX3RhYmxlLT5lcVtpXS5pcnEsIGVxX3RhYmxlLT5lcSArIGkpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtbHg0X21hcF9jbHJfaW50KHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKworCXByaXYtPmNscl9iYXNlID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCBwcml2LT5mdy5jbHJfaW50X2JhcikgKworCQkJCSBwcml2LT5mdy5jbHJfaW50X2Jhc2UsIE1MWDRfQ0xSX0lOVF9TSVpFKTsKKwlpZiAoIXByaXYtPmNscl9iYXNlKSB7CisJCW1seDRfZXJyKGRldiwgIkNvdWxkbid0IG1hcCBpbnRlcnJ1cHQgY2xlYXIgcmVnaXN0ZXIsIGFib3J0aW5nLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtbHg0X3VubWFwX2Nscl9pbnQoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCisJaW91bm1hcChwcml2LT5jbHJfYmFzZSk7Cit9CisKK2ludCBfX2RldmluaXQgbWx4NF9tYXBfZXFfaWNtKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1NjQgaWNtX3ZpcnQpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCWludCByZXQ7CisKKwkvKgorCSAqIFdlIGFzc3VtZSB0aGF0IG1hcHBpbmcgb25lIHBhZ2UgaXMgZW5vdWdoIGZvciB0aGUgd2hvbGUgRVEKKwkgKiBjb250ZXh0IHRhYmxlLiAgVGhpcyBpcyBmaW5lIHdpdGggYWxsIGN1cnJlbnQgSENBcywgYmVjYXVzZQorCSAqIHdlIG9ubHkgdXNlIDMyIEVRcyBhbmQgZWFjaCBFUSB1c2VzIDY0IGJ5dGVzIG9mIGNvbnRleHQKKwkgKiBtZW1vcnksIG9yIDEgS0IgdG90YWwuCisJICovCisJcHJpdi0+ZXFfdGFibGUuaWNtX3ZpcnQgPSBpY21fdmlydDsKKwlwcml2LT5lcV90YWJsZS5pY21fcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSKTsKKwlpZiAoIXByaXYtPmVxX3RhYmxlLmljbV9wYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwcml2LT5lcV90YWJsZS5pY21fZG1hICA9IHBjaV9tYXBfcGFnZShkZXYtPnBkZXYsIHByaXYtPmVxX3RhYmxlLmljbV9wYWdlLCAwLAorCQkJCQkgICAgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+ZXFfdGFibGUuaWNtX2RtYSkpIHsKKwkJX19mcmVlX3BhZ2UocHJpdi0+ZXFfdGFibGUuaWNtX3BhZ2UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBtbHg0X01BUF9JQ01fcGFnZShkZXYsIHByaXYtPmVxX3RhYmxlLmljbV9kbWEsIGljbV92aXJ0KTsKKwlpZiAocmV0KSB7CisJCXBjaV91bm1hcF9wYWdlKGRldi0+cGRldiwgcHJpdi0+ZXFfdGFibGUuaWNtX2RtYSwgUEFHRV9TSVpFLAorCQkJICAgICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCV9fZnJlZV9wYWdlKHByaXYtPmVxX3RhYmxlLmljbV9wYWdlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG1seDRfdW5tYXBfZXFfaWNtKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKworCW1seDRfVU5NQVBfSUNNKGRldiwgcHJpdi0+ZXFfdGFibGUuaWNtX3ZpcnQsIDEpOworCXBjaV91bm1hcF9wYWdlKGRldi0+cGRldiwgcHJpdi0+ZXFfdGFibGUuaWNtX2RtYSwgUEFHRV9TSVpFLAorCQkgICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlfX2ZyZWVfcGFnZShwcml2LT5lcV90YWJsZS5pY21fcGFnZSk7Cit9CisKK2ludCBfX2RldmluaXQgbWx4NF9pbml0X2VxX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlpbnQgZXJyOworCWludCBpOworCisJZXJyID0gbWx4NF9iaXRtYXBfaW5pdCgmcHJpdi0+ZXFfdGFibGUuYml0bWFwLCBkZXYtPmNhcHMubnVtX2VxcywKKwkJCSAgICAgICBkZXYtPmNhcHMubnVtX2VxcyAtIDEsIGRldi0+Y2Fwcy5yZXNlcnZlZF9lcXMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcml2LT5lcV90YWJsZS51YXJfbWFwKTsgKytpKQorCQlwcml2LT5lcV90YWJsZS51YXJfbWFwW2ldID0gTlVMTDsKKworCWVyciA9IG1seDRfbWFwX2Nscl9pbnQoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCXByaXYtPmVxX3RhYmxlLmNscl9tYXNrID0KKwkJc3dhYjMyKDEgPDwgKHByaXYtPmVxX3RhYmxlLmludGFfcGluICYgMzEpKTsKKwlwcml2LT5lcV90YWJsZS5jbHJfaW50ICA9IHByaXYtPmNscl9iYXNlICsKKwkJKHByaXYtPmVxX3RhYmxlLmludGFfcGluIDwgMzIgPyA0IDogMCk7CisKKwllcnIgPSBtbHg0X2NyZWF0ZV9lcShkZXYsIGRldi0+Y2Fwcy5udW1fY3FzICsgTUxYNF9OVU1fU1BBUkVfRVFFLAorCQkJICAgICAoZGV2LT5mbGFncyAmIE1MWDRfRkxBR19NU0lfWCkgPyBNTFg0X0VRX0NPTVAgOiAwLAorCQkJICAgICAmcHJpdi0+ZXFfdGFibGUuZXFbTUxYNF9FUV9DT01QXSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3VubWFwOworCisJZXJyID0gbWx4NF9jcmVhdGVfZXEoZGV2LCBNTFg0X05VTV9BU1lOQ19FUUUgKyBNTFg0X05VTV9TUEFSRV9FUUUsCisJCQkgICAgIChkZXYtPmZsYWdzICYgTUxYNF9GTEFHX01TSV9YKSA/IE1MWDRfRVFfQVNZTkMgOiAwLAorCQkJICAgICAmcHJpdi0+ZXFfdGFibGUuZXFbTUxYNF9FUV9BU1lOQ10pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9jb21wOworCisJaWYgKGRldi0+ZmxhZ3MgJiBNTFg0X0ZMQUdfTVNJX1gpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKmVxX25hbWVbXSA9IHsKKwkJCVtNTFg0X0VRX0NPTVBdICA9IERSVl9OQU1FICIgKGNvbXApIiwKKwkJCVtNTFg0X0VRX0FTWU5DXSA9IERSVl9OQU1FICIgKGFzeW5jKSIsCisJCQlbTUxYNF9FUV9DQVRBU10gPSBEUlZfTkFNRSAiIChjYXRhcykiCisJCX07CisKKwkJZXJyID0gbWx4NF9jcmVhdGVfZXEoZGV2LCAxLCBNTFg0X0VRX0NBVEFTLAorCQkJCSAgICAgJnByaXYtPmVxX3RhYmxlLmVxW01MWDRfRVFfQ0FUQVNdKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9hc3luYzsKKworCQlmb3IgKGkgPSAwOyBpIDwgTUxYNF9FUV9DQVRBUzsgKytpKSB7CisJCQllcnIgPSByZXF1ZXN0X2lycShwcml2LT5lcV90YWJsZS5lcVtpXS5pcnEsCisJCQkJCSAgbWx4NF9tc2lfeF9pbnRlcnJ1cHQsCisJCQkJCSAgMCwgZXFfbmFtZVtpXSwgcHJpdi0+ZXFfdGFibGUuZXEgKyBpKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnJfb3V0X2NhdGFzOworCisJCQlwcml2LT5lcV90YWJsZS5lcVtpXS5oYXZlX2lycSA9IDE7CisJCX0KKworCQllcnIgPSByZXF1ZXN0X2lycShwcml2LT5lcV90YWJsZS5lcVtNTFg0X0VRX0NBVEFTXS5pcnEsCisJCQkJICBtbHg0X2NhdGFzX2ludGVycnVwdCwgMCwKKwkJCQkgIGVxX25hbWVbTUxYNF9FUV9DQVRBU10sIGRldik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfY2F0YXM7CisKKwkJcHJpdi0+ZXFfdGFibGUuZXFbTUxYNF9FUV9DQVRBU10uaGF2ZV9pcnEgPSAxOworCX0gZWxzZSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+cGRldi0+aXJxLCBtbHg0X2ludGVycnVwdCwKKwkJCQkgIElSUUZfU0hBUkVELCBEUlZfTkFNRSwgZGV2KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9hc3luYzsKKworCQlwcml2LT5lcV90YWJsZS5oYXZlX2lycSA9IDE7CisJfQorCisJZXJyID0gbWx4NF9NQVBfRVEoZGV2LCBNTFg0X0FTWU5DX0VWRU5UX01BU0ssIDAsCisJCQkgIHByaXYtPmVxX3RhYmxlLmVxW01MWDRfRVFfQVNZTkNdLmVxbik7CisJaWYgKGVycikKKwkJbWx4NF93YXJuKGRldiwgIk1BUF9FUSBmb3IgYXN5bmMgRVEgJWQgZmFpbGVkICglZClcbiIsCisJCQkgICBwcml2LT5lcV90YWJsZS5lcVtNTFg0X0VRX0FTWU5DXS5lcW4sIGVycik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUxYNF9FUV9DQVRBUzsgKytpKQorCQllcV9zZXRfY2koJnByaXYtPmVxX3RhYmxlLmVxW2ldLCAxKTsKKworCWlmIChkZXYtPmZsYWdzICYgTUxYNF9GTEFHX01TSV9YKSB7CisJCWVyciA9IG1seDRfTUFQX0VRKGRldiwgTUxYNF9DQVRBU19FVkVOVF9NQVNLLCAwLAorCQkJCSAgcHJpdi0+ZXFfdGFibGUuZXFbTUxYNF9FUV9DQVRBU10uZXFuKTsKKwkJaWYgKGVycikKKwkJCW1seDRfd2FybihkZXYsICJNQVBfRVEgZm9yIGNhdGFzIEVRICVkIGZhaWxlZCAoJWQpXG4iLAorCQkJCSAgcHJpdi0+ZXFfdGFibGUuZXFbTUxYNF9FUV9DQVRBU10uZXFuLCBlcnIpOworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0X2NhdGFzOgorCW1seDRfZnJlZV9lcShkZXYsICZwcml2LT5lcV90YWJsZS5lcVtNTFg0X0VRX0NBVEFTXSk7CisKK2Vycl9vdXRfYXN5bmM6CisJbWx4NF9mcmVlX2VxKGRldiwgJnByaXYtPmVxX3RhYmxlLmVxW01MWDRfRVFfQVNZTkNdKTsKKworZXJyX291dF9jb21wOgorCW1seDRfZnJlZV9lcShkZXYsICZwcml2LT5lcV90YWJsZS5lcVtNTFg0X0VRX0NPTVBdKTsKKworZXJyX291dF91bm1hcDoKKwltbHg0X3VubWFwX2Nscl9pbnQoZGV2KTsKKwltbHg0X2ZyZWVfaXJxcyhkZXYpOworCitlcnJfb3V0X2ZyZWU6CisJbWx4NF9iaXRtYXBfY2xlYW51cCgmcHJpdi0+ZXFfdGFibGUuYml0bWFwKTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIG1seDRfY2xlYW51cF9lcV90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJaW50IGk7CisKKwlpZiAoZGV2LT5mbGFncyAmIE1MWDRfRkxBR19NU0lfWCkKKwkJbWx4NF9NQVBfRVEoZGV2LCBNTFg0X0NBVEFTX0VWRU5UX01BU0ssIDEsCisJCQkgICAgcHJpdi0+ZXFfdGFibGUuZXFbTUxYNF9FUV9DQVRBU10uZXFuKTsKKworCW1seDRfTUFQX0VRKGRldiwgTUxYNF9BU1lOQ19FVkVOVF9NQVNLLCAxLAorCQkgICAgcHJpdi0+ZXFfdGFibGUuZXFbTUxYNF9FUV9BU1lOQ10uZXFuKTsKKworCW1seDRfZnJlZV9pcnFzKGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUxYNF9FUV9DQVRBUzsgKytpKQorCQltbHg0X2ZyZWVfZXEoZGV2LCAmcHJpdi0+ZXFfdGFibGUuZXFbaV0pOworCWlmIChkZXYtPmZsYWdzICYgTUxYNF9GTEFHX01TSV9YKQorCQltbHg0X2ZyZWVfZXEoZGV2LCAmcHJpdi0+ZXFfdGFibGUuZXFbTUxYNF9FUV9DQVRBU10pOworCisJbWx4NF91bm1hcF9jbHJfaW50KGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcml2LT5lcV90YWJsZS51YXJfbWFwKTsgKytpKQorCQlpZiAocHJpdi0+ZXFfdGFibGUudWFyX21hcFtpXSkKKwkJCWlvdW5tYXAocHJpdi0+ZXFfdGFibGUudWFyX21hcFtpXSk7CisKKwltbHg0X2JpdG1hcF9jbGVhbnVwKCZwcml2LT5lcV90YWJsZS5iaXRtYXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9mdy5jIGIvZHJpdmVycy9uZXQvbWx4NC9mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTVjYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L2Z3LmMKQEAgLTAsMCArMSw3NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2LCAyMDA3IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbWx4NC9jbWQuaD4KKworI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAiaWNtLmgiCisKK2V4dGVybiB2b2lkIF9fYnVnZ3lfdXNlX29mX01MWDRfR0VUKHZvaWQpOworZXh0ZXJuIHZvaWQgX19idWdneV91c2Vfb2ZfTUxYNF9QVVQodm9pZCk7CisKKyNkZWZpbmUgTUxYNF9HRVQoZGVzdCwgc291cmNlLCBvZmZzZXQpCQkJCSAgICAgIFwKKwlkbyB7CQkJCQkJCSAgICAgIFwKKwkJdm9pZCAqX19wID0gKGNoYXIgKikgKHNvdXJjZSkgKyAob2Zmc2V0KTsJICAgICAgXAorCQlzd2l0Y2ggKHNpemVvZiAoZGVzdCkpIHsJCQkgICAgICBcCisJCWNhc2UgMTogKGRlc3QpID0gKih1OCAqKSBfX3A7CSAgICBicmVhazsJICAgICAgXAorCQljYXNlIDI6IChkZXN0KSA9IGJlMTZfdG9fY3B1cChfX3ApOyBicmVhazsJICAgICAgXAorCQljYXNlIDQ6IChkZXN0KSA9IGJlMzJfdG9fY3B1cChfX3ApOyBicmVhazsJICAgICAgXAorCQljYXNlIDg6IChkZXN0KSA9IGJlNjRfdG9fY3B1cChfX3ApOyBicmVhazsJICAgICAgXAorCQlkZWZhdWx0OiBfX2J1Z2d5X3VzZV9vZl9NTFg0X0dFVCgpOwkJICAgICAgXAorCQl9CQkJCQkJICAgICAgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgTUxYNF9QVVQoZGVzdCwgc291cmNlLCBvZmZzZXQpCQkJCSAgICAgIFwKKwlkbyB7CQkJCQkJCSAgICAgIFwKKwkJdm9pZCAqX19kID0gKChjaGFyICopIChkZXN0KSArIChvZmZzZXQpKTsJICAgICAgXAorCQlzd2l0Y2ggKHNpemVvZihzb3VyY2UpKSB7CQkJICAgICAgXAorCQljYXNlIDE6ICoodTggKikgX19kID0gKHNvdXJjZSk7CQkgICAgICAgYnJlYWs7IFwKKwkJY2FzZSAyOgkqKF9fYmUxNiAqKSBfX2QgPSBjcHVfdG9fYmUxNihzb3VyY2UpOyBicmVhazsgXAorCQljYXNlIDQ6CSooX19iZTMyICopIF9fZCA9IGNwdV90b19iZTMyKHNvdXJjZSk7IGJyZWFrOyBcCisJCWNhc2UgODoJKihfX2JlNjQgKikgX19kID0gY3B1X3RvX2JlNjQoc291cmNlKTsgYnJlYWs7IFwKKwkJZGVmYXVsdDogX19idWdneV91c2Vfb2ZfTUxYNF9QVVQoKTsJCSAgICAgIFwKKwkJfQkJCQkJCSAgICAgIFwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCBkdW1wX2Rldl9jYXBfZmxhZ3Moc3RydWN0IG1seDRfZGV2ICpkZXYsIHUzMiBmbGFncykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqZm5hbWVbXSA9IHsKKwkJWyAwXSA9ICJSQyB0cmFuc3BvcnQiLAorCQlbIDFdID0gIlVDIHRyYW5zcG9ydCIsCisJCVsgMl0gPSAiVUQgdHJhbnNwb3J0IiwKKwkJWyAzXSA9ICJTUkMgdHJhbnNwb3J0IiwKKwkJWyA0XSA9ICJyZWxpYWJsZSBtdWx0aWNhc3QiLAorCQlbIDVdID0gIkZDb0lCIHN1cHBvcnQiLAorCQlbIDZdID0gIlNSUSBzdXBwb3J0IiwKKwkJWyA3XSA9ICJJUG9JQiBjaGVja3N1bSBvZmZsb2FkIiwKKwkJWyA4XSA9ICJQX0tleSB2aW9sYXRpb24gY291bnRlciIsCisJCVsgOV0gPSAiUV9LZXkgdmlvbGF0aW9uIGNvdW50ZXIiLAorCQlbMTBdID0gIlZNTSIsCisJCVsxNl0gPSAiTVcgc3VwcG9ydCIsCisJCVsxN10gPSAiQVBNIHN1cHBvcnQiLAorCQlbMThdID0gIkF0b21pYyBvcHMgc3VwcG9ydCIsCisJCVsxOV0gPSAiUmF3IG11bHRpY2FzdCBzdXBwb3J0IiwKKwkJWzIwXSA9ICJBZGRyZXNzIHZlY3RvciBwb3J0IGNoZWNraW5nIHN1cHBvcnQiLAorCQlbMjFdID0gIlVEIG11bHRpY2FzdCBzdXBwb3J0IiwKKwkJWzI0XSA9ICJEZW1hbmQgcGFnaW5nIHN1cHBvcnQiLAorCQlbMjVdID0gIlJvdXRlciBzdXBwb3J0IgorCX07CisJaW50IGk7CisKKwltbHg0X2RiZyhkZXYsICJERVZfQ0FQIGZsYWdzOlxuIik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm5hbWUpOyArK2kpCisJCWlmIChmbmFtZVtpXSAmJiAoZmxhZ3MgJiAoMSA8PCBpKSkpCisJCQltbHg0X2RiZyhkZXYsICIgICAgJXNcbiIsIGZuYW1lW2ldKTsKK30KKworaW50IG1seDRfUVVFUllfREVWX0NBUChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfZGV2X2NhcCAqZGV2X2NhcCkKK3sKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwl1MzIgKm91dGJveDsKKwl1OCBmaWVsZDsKKwl1MTYgc2l6ZTsKKwl1MTYgc3RhdF9yYXRlOworCWludCBlcnI7CisKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9PVVRfU0laRQkJICAgICAgIDB4MTAwCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX1NSUV9TWl9PRkZTRVQJCTB4MTAKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9NQVhfUVBfU1pfT0ZGU0VUCQkweDExCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfUlNWRF9RUF9PRkZTRVQJCTB4MTIKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9NQVhfUVBfT0ZGU0VUCQkweDEzCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfUlNWRF9TUlFfT0ZGU0VUCQkweDE0CisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX1NSUV9PRkZTRVQJCTB4MTUKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9SU1ZEX0VFQ19PRkZTRVQJCTB4MTYKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9NQVhfRUVDX09GRlNFVAkJMHgxNworI2RlZmluZSBRVUVSWV9ERVZfQ0FQX01BWF9DUV9TWl9PRkZTRVQJCTB4MTkKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9SU1ZEX0NRX09GRlNFVAkJMHgxYQorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX01BWF9DUV9PRkZTRVQJCTB4MWIKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9NQVhfTVBUX09GRlNFVAkJMHgxZAorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX1JTVkRfRVFfT0ZGU0VUCQkweDFlCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX0VRX09GRlNFVAkJMHgxZgorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX1JTVkRfTVRUX09GRlNFVAkJMHgyMAorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX01BWF9NUldfU1pfT0ZGU0VUCQkweDIxCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfUlNWRF9NUldfT0ZGU0VUCQkweDIyCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX01UVF9TRUdfT0ZGU0VUCTB4MjMKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9NQVhfQVZfT0ZGU0VUCQkweDI3CisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX1JFUV9RUF9PRkZTRVQJCTB4MjkKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9NQVhfUkVTX1FQX09GRlNFVAkJMHgyYgorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX01BWF9SRE1BX09GRlNFVAkJMHgyZgorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX1JTWl9TUlFfT0ZGU0VUCQkweDMzCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfQUNLX0RFTEFZX09GRlNFVAkJMHgzNQorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX01UVV9XSURUSF9PRkZTRVQJCTB4MzYKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9WTF9QT1JUX09GRlNFVAkJMHgzNworI2RlZmluZSBRVUVSWV9ERVZfQ0FQX01BWF9HSURfT0ZGU0VUCQkweDNiCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfUkFURV9TVVBQT1JUX09GRlNFVAkweDNjCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX1BLRVlfT0ZGU0VUCQkweDNmCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfRkxBR1NfT0ZGU0VUCQkweDQ0CisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfUlNWRF9VQVJfT0ZGU0VUCQkweDQ4CisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfVUFSX1NaX09GRlNFVAkJMHg0OQorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX1BBR0VfU1pfT0ZGU0VUCQkweDRiCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfQkZfT0ZGU0VUCQkJMHg0YworI2RlZmluZSBRVUVSWV9ERVZfQ0FQX0xPR19CRl9SRUdfU1pfT0ZGU0VUCTB4NGQKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9MT0dfTUFYX0JGX1JFR1NfUEVSX1BBR0VfT0ZGU0VUCTB4NGUKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9MT0dfTUFYX0JGX1BBR0VTX09GRlNFVAkweDRmCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX1NHX1NRX09GRlNFVAkJMHg1MQorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX01BWF9ERVNDX1NaX1NRX09GRlNFVAkweDUyCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX1NHX1JRX09GRlNFVAkJMHg1NQorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX01BWF9ERVNDX1NaX1JRX09GRlNFVAkweDU2CisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX1FQX01DR19PRkZTRVQJCTB4NjEKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9SU1ZEX01DR19PRkZTRVQJCTB4NjIKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9NQVhfTUNHX09GRlNFVAkJMHg2MworI2RlZmluZSBRVUVSWV9ERVZfQ0FQX1JTVkRfUERfT0ZGU0VUCQkweDY0CisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX1BEX09GRlNFVAkJMHg2NQorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX1JETUFSQ19FTlRSWV9TWl9PRkZTRVQJMHg4MAorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX1FQQ19FTlRSWV9TWl9PRkZTRVQJMHg4MgorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX0FVWF9FTlRSWV9TWl9PRkZTRVQJMHg4NAorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX0FMVENfRU5UUllfU1pfT0ZGU0VUCTB4ODYKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9FUUNfRU5UUllfU1pfT0ZGU0VUCTB4ODgKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9DUUNfRU5UUllfU1pfT0ZGU0VUCTB4OGEKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9TUlFfRU5UUllfU1pfT0ZGU0VUCTB4OGMKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9DX01QVF9FTlRSWV9TWl9PRkZTRVQJMHg4ZQorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX01UVF9FTlRSWV9TWl9PRkZTRVQJMHg5MAorI2RlZmluZSBRVUVSWV9ERVZfQ0FQX0RfTVBUX0VOVFJZX1NaX09GRlNFVAkweDkyCisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfQk1NRV9GTEFHU19PRkZTRVQJCTB4OTcKKyNkZWZpbmUgUVVFUllfREVWX0NBUF9SU1ZEX0xLRVlfT0ZGU0VUCQkweDk4CisjZGVmaW5lIFFVRVJZX0RFVl9DQVBfTUFYX0lDTV9TWl9PRkZTRVQJCTB4YTAKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CisJaWYgKElTX0VSUihtYWlsYm94KSkKKwkJcmV0dXJuIFBUUl9FUlIobWFpbGJveCk7CisJb3V0Ym94ID0gbWFpbGJveC0+YnVmOworCisJZXJyID0gbWx4NF9jbWRfYm94KGRldiwgMCwgbWFpbGJveC0+ZG1hLCAwLCAwLCBNTFg0X0NNRF9RVUVSWV9ERVZfQ0FQLAorCQkJICAgTUxYNF9DTURfVElNRV9DTEFTU19BKTsKKworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9SU1ZEX1FQX09GRlNFVCk7CisJZGV2X2NhcC0+cmVzZXJ2ZWRfcXBzID0gMSA8PCAoZmllbGQgJiAweGYpOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTUFYX1FQX09GRlNFVCk7CisJZGV2X2NhcC0+bWF4X3FwcyA9IDEgPDwgKGZpZWxkICYgMHgxZik7CisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9SU1ZEX1NSUV9PRkZTRVQpOworCWRldl9jYXAtPnJlc2VydmVkX3NycXMgPSAxIDw8IChmaWVsZCA+PiA0KTsKKwlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX01BWF9TUlFfT0ZGU0VUKTsKKwlkZXZfY2FwLT5tYXhfc3JxcyA9IDEgPDwgKGZpZWxkICYgMHgxZik7CisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfQ1FfU1pfT0ZGU0VUKTsKKwlkZXZfY2FwLT5tYXhfY3Ffc3ogPSAxIDw8IGZpZWxkOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfUlNWRF9DUV9PRkZTRVQpOworCWRldl9jYXAtPnJlc2VydmVkX2NxcyA9IDEgPDwgKGZpZWxkICYgMHhmKTsKKwlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX01BWF9DUV9PRkZTRVQpOworCWRldl9jYXAtPm1heF9jcXMgPSAxIDw8IChmaWVsZCAmIDB4MWYpOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTUFYX01QVF9PRkZTRVQpOworCWRldl9jYXAtPm1heF9tcHRzID0gMSA8PCAoZmllbGQgJiAweDNmKTsKKwlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX1JTVkRfRVFfT0ZGU0VUKTsKKwlkZXZfY2FwLT5yZXNlcnZlZF9lcXMgPSAxIDw8IChmaWVsZCAmIDB4Zik7CisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfRVFfT0ZGU0VUKTsKKwlkZXZfY2FwLT5tYXhfZXFzID0gMSA8PCAoZmllbGQgJiAweDcpOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfUlNWRF9NVFRfT0ZGU0VUKTsKKwlkZXZfY2FwLT5yZXNlcnZlZF9tdHRzID0gMSA8PCAoZmllbGQgPj4gNCk7CisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfTVJXX1NaX09GRlNFVCk7CisJZGV2X2NhcC0+bWF4X21yd19zeiA9IDEgPDwgZmllbGQ7CisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9SU1ZEX01SV19PRkZTRVQpOworCWRldl9jYXAtPnJlc2VydmVkX21yd3MgPSAxIDw8IChmaWVsZCAmIDB4Zik7CisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfTVRUX1NFR19PRkZTRVQpOworCWRldl9jYXAtPm1heF9tdHRfc2VnID0gMSA8PCAoZmllbGQgJiAweDNmKTsKKwlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX01BWF9SRVFfUVBfT0ZGU0VUKTsKKwlkZXZfY2FwLT5tYXhfcmVxdWVzdGVyX3Blcl9xcCA9IDEgPDwgKGZpZWxkICYgMHgzZik7CisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfUkVTX1FQX09GRlNFVCk7CisJZGV2X2NhcC0+bWF4X3Jlc3BvbmRlcl9wZXJfcXAgPSAxIDw8IChmaWVsZCAmIDB4M2YpOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTUFYX1JETUFfT0ZGU0VUKTsKKwlkZXZfY2FwLT5tYXhfcmRtYV9nbG9iYWwgPSAxIDw8IChmaWVsZCAmIDB4M2YpOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfQUNLX0RFTEFZX09GRlNFVCk7CisJZGV2X2NhcC0+bG9jYWxfY2FfYWNrX2RlbGF5ID0gZmllbGQgJiAweDFmOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTVRVX1dJRFRIX09GRlNFVCk7CisJZGV2X2NhcC0+bWF4X210dQk9IGZpZWxkID4+IDQ7CisJZGV2X2NhcC0+bWF4X3BvcnRfd2lkdGggPSBmaWVsZCAmIDB4ZjsKKwlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX1ZMX1BPUlRfT0ZGU0VUKTsKKwlkZXZfY2FwLT5tYXhfdmwgICAgPSBmaWVsZCA+PiA0OworCWRldl9jYXAtPm51bV9wb3J0cyA9IGZpZWxkICYgMHhmOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTUFYX0dJRF9PRkZTRVQpOworCWRldl9jYXAtPm1heF9naWRzID0gMSA8PCAoZmllbGQgJiAweGYpOworCU1MWDRfR0VUKHN0YXRfcmF0ZSwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX1JBVEVfU1VQUE9SVF9PRkZTRVQpOworCWRldl9jYXAtPnN0YXRfcmF0ZV9zdXBwb3J0ID0gc3RhdF9yYXRlOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTUFYX1BLRVlfT0ZGU0VUKTsKKwlkZXZfY2FwLT5tYXhfcGtleXMgPSAxIDw8IChmaWVsZCAmIDB4Zik7CisJTUxYNF9HRVQoZGV2X2NhcC0+ZmxhZ3MsIG91dGJveCwgUVVFUllfREVWX0NBUF9GTEFHU19PRkZTRVQpOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfUlNWRF9VQVJfT0ZGU0VUKTsKKwlkZXZfY2FwLT5yZXNlcnZlZF91YXJzID0gZmllbGQgPj4gNDsKKwlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX1VBUl9TWl9PRkZTRVQpOworCWRldl9jYXAtPnVhcl9zaXplID0gMSA8PCAoKGZpZWxkICYgMHgzZikgKyAyMCk7CisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9QQUdFX1NaX09GRlNFVCk7CisJZGV2X2NhcC0+bWluX3BhZ2Vfc3ogPSAxIDw8IGZpZWxkOworCisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9CRl9PRkZTRVQpOworCWlmIChmaWVsZCAmIDB4ODApIHsKKwkJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9MT0dfQkZfUkVHX1NaX09GRlNFVCk7CisJCWRldl9jYXAtPmJmX3JlZ19zaXplID0gMSA8PCAoZmllbGQgJiAweDFmKTsKKwkJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9MT0dfTUFYX0JGX1JFR1NfUEVSX1BBR0VfT0ZGU0VUKTsKKwkJZGV2X2NhcC0+YmZfcmVnc19wZXJfcGFnZSA9IDEgPDwgKGZpZWxkICYgMHgzZik7CisJCW1seDRfZGJnKGRldiwgIkJsdWVGbGFtZSBhdmFpbGFibGUgKHJlZyBzaXplICVkLCByZWdzL3BhZ2UgJWQpXG4iLAorCQkJIGRldl9jYXAtPmJmX3JlZ19zaXplLCBkZXZfY2FwLT5iZl9yZWdzX3Blcl9wYWdlKTsKKwl9IGVsc2UgeworCQlkZXZfY2FwLT5iZl9yZWdfc2l6ZSA9IDA7CisJCW1seDRfZGJnKGRldiwgIkJsdWVGbGFtZSBub3QgYXZhaWxhYmxlXG4iKTsKKwl9CisKKwlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX01BWF9TR19TUV9PRkZTRVQpOworCWRldl9jYXAtPm1heF9zcV9zZyA9IGZpZWxkOworCU1MWDRfR0VUKHNpemUsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfREVTQ19TWl9TUV9PRkZTRVQpOworCWRldl9jYXAtPm1heF9zcV9kZXNjX3N6ID0gc2l6ZTsKKworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTUFYX1FQX01DR19PRkZTRVQpOworCWRldl9jYXAtPm1heF9xcF9wZXJfbWNnID0gMSA8PCBmaWVsZDsKKwlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX1JTVkRfTUNHX09GRlNFVCk7CisJZGV2X2NhcC0+cmVzZXJ2ZWRfbWdtcyA9IGZpZWxkICYgMHhmOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTUFYX01DR19PRkZTRVQpOworCWRldl9jYXAtPm1heF9tY2dzID0gMSA8PCBmaWVsZDsKKwlNTFg0X0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX1JTVkRfUERfT0ZGU0VUKTsKKwlkZXZfY2FwLT5yZXNlcnZlZF9wZHMgPSBmaWVsZCA+PiA0OworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTUFYX1BEX09GRlNFVCk7CisJZGV2X2NhcC0+bWF4X3BkcyA9IDEgPDwgKGZpZWxkICYgMHgzZik7CisKKwlNTFg0X0dFVChzaXplLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfUkRNQVJDX0VOVFJZX1NaX09GRlNFVCk7CisJZGV2X2NhcC0+cmRtYXJjX2VudHJ5X3N6ID0gc2l6ZTsKKwlNTFg0X0dFVChzaXplLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfUVBDX0VOVFJZX1NaX09GRlNFVCk7CisJZGV2X2NhcC0+cXBjX2VudHJ5X3N6ID0gc2l6ZTsKKwlNTFg0X0dFVChzaXplLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfQVVYX0VOVFJZX1NaX09GRlNFVCk7CisJZGV2X2NhcC0+YXV4X2VudHJ5X3N6ID0gc2l6ZTsKKwlNTFg0X0dFVChzaXplLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfQUxUQ19FTlRSWV9TWl9PRkZTRVQpOworCWRldl9jYXAtPmFsdGNfZW50cnlfc3ogPSBzaXplOworCU1MWDRfR0VUKHNpemUsIG91dGJveCwgUVVFUllfREVWX0NBUF9FUUNfRU5UUllfU1pfT0ZGU0VUKTsKKwlkZXZfY2FwLT5lcWNfZW50cnlfc3ogPSBzaXplOworCU1MWDRfR0VUKHNpemUsIG91dGJveCwgUVVFUllfREVWX0NBUF9DUUNfRU5UUllfU1pfT0ZGU0VUKTsKKwlkZXZfY2FwLT5jcWNfZW50cnlfc3ogPSBzaXplOworCU1MWDRfR0VUKHNpemUsIG91dGJveCwgUVVFUllfREVWX0NBUF9TUlFfRU5UUllfU1pfT0ZGU0VUKTsKKwlkZXZfY2FwLT5zcnFfZW50cnlfc3ogPSBzaXplOworCU1MWDRfR0VUKHNpemUsIG91dGJveCwgUVVFUllfREVWX0NBUF9DX01QVF9FTlRSWV9TWl9PRkZTRVQpOworCWRldl9jYXAtPmNtcHRfZW50cnlfc3ogPSBzaXplOworCU1MWDRfR0VUKHNpemUsIG91dGJveCwgUVVFUllfREVWX0NBUF9NVFRfRU5UUllfU1pfT0ZGU0VUKTsKKwlkZXZfY2FwLT5tdHRfZW50cnlfc3ogPSBzaXplOworCU1MWDRfR0VUKHNpemUsIG91dGJveCwgUVVFUllfREVWX0NBUF9EX01QVF9FTlRSWV9TWl9PRkZTRVQpOworCWRldl9jYXAtPmRtcHRfZW50cnlfc3ogPSBzaXplOworCisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfU1JRX1NaX09GRlNFVCk7CisJZGV2X2NhcC0+bWF4X3NycV9zeiA9IDEgPDwgZmllbGQ7CisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfUVBfU1pfT0ZGU0VUKTsKKwlkZXZfY2FwLT5tYXhfcXBfc3ogPSAxIDw8IGZpZWxkOworCU1MWDRfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfUlNaX1NSUV9PRkZTRVQpOworCWRldl9jYXAtPnJlc2l6ZV9zcnEgPSBmaWVsZCAmIDE7CisJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9NQVhfU0dfUlFfT0ZGU0VUKTsKKwlkZXZfY2FwLT5tYXhfcnFfc2cgPSBmaWVsZDsKKwlNTFg0X0dFVChzaXplLCBvdXRib3gsIFFVRVJZX0RFVl9DQVBfTUFYX0RFU0NfU1pfUlFfT0ZGU0VUKTsKKwlkZXZfY2FwLT5tYXhfcnFfZGVzY19zeiA9IHNpemU7CisKKwlNTFg0X0dFVChkZXZfY2FwLT5ibW1lX2ZsYWdzLCBvdXRib3gsCisJCSBRVUVSWV9ERVZfQ0FQX0JNTUVfRkxBR1NfT0ZGU0VUKTsKKwlNTFg0X0dFVChkZXZfY2FwLT5yZXNlcnZlZF9sa2V5LCBvdXRib3gsCisJCSBRVUVSWV9ERVZfQ0FQX1JTVkRfTEtFWV9PRkZTRVQpOworCU1MWDRfR0VUKGRldl9jYXAtPm1heF9pY21fc3osIG91dGJveCwKKwkJIFFVRVJZX0RFVl9DQVBfTUFYX0lDTV9TWl9PRkZTRVQpOworCisJaWYgKGRldl9jYXAtPmJtbWVfZmxhZ3MgJiAxKQorCQltbHg0X2RiZyhkZXYsICJCYXNlIE1NIGV4dGVuc2lvbnM6IHllcyAiCisJCQkgIihmbGFncyAlZCwgcnN2ZCBMX0tleSAlMDh4KVxuIiwKKwkJCSBkZXZfY2FwLT5ibW1lX2ZsYWdzLCBkZXZfY2FwLT5yZXNlcnZlZF9sa2V5KTsKKwllbHNlCisJCW1seDRfZGJnKGRldiwgIkJhc2UgTU0gZXh0ZW5zaW9uczogbm9cbiIpOworCisJLyoKKwkgKiBFYWNoIFVBUiBoYXMgNCBFUSBkb29yYmVsbHM7IHNvIGlmIGEgVUFSIGlzIHJlc2VydmVkLCB0aGVuCisJICogd2UgY2FuJ3QgdXNlIGFueSBFUXMgd2hvc2UgZG9vcmJlbGwgZmFsbHMgb24gdGhhdCBwYWdlLAorCSAqIGV2ZW4gaWYgdGhlIEVRIGl0c2VsZiBpc24ndCByZXNlcnZlZC4KKwkgKi8KKwlkZXZfY2FwLT5yZXNlcnZlZF9lcXMgPSBtYXgoZGV2X2NhcC0+cmVzZXJ2ZWRfdWFycyAqIDQsCisJCQkJICAgIGRldl9jYXAtPnJlc2VydmVkX2Vxcyk7CisKKwltbHg0X2RiZyhkZXYsICJNYXggSUNNIHNpemUgJWxsZCBNQlxuIiwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGRldl9jYXAtPm1heF9pY21fc3ogPj4gMjApOworCW1seDRfZGJnKGRldiwgIk1heCBRUHM6ICVkLCByZXNlcnZlZCBRUHM6ICVkLCBlbnRyeSBzaXplOiAlZFxuIiwKKwkJIGRldl9jYXAtPm1heF9xcHMsIGRldl9jYXAtPnJlc2VydmVkX3FwcywgZGV2X2NhcC0+cXBjX2VudHJ5X3N6KTsKKwltbHg0X2RiZyhkZXYsICJNYXggU1JRczogJWQsIHJlc2VydmVkIFNSUXM6ICVkLCBlbnRyeSBzaXplOiAlZFxuIiwKKwkJIGRldl9jYXAtPm1heF9zcnFzLCBkZXZfY2FwLT5yZXNlcnZlZF9zcnFzLCBkZXZfY2FwLT5zcnFfZW50cnlfc3opOworCW1seDRfZGJnKGRldiwgIk1heCBDUXM6ICVkLCByZXNlcnZlZCBDUXM6ICVkLCBlbnRyeSBzaXplOiAlZFxuIiwKKwkJIGRldl9jYXAtPm1heF9jcXMsIGRldl9jYXAtPnJlc2VydmVkX2NxcywgZGV2X2NhcC0+Y3FjX2VudHJ5X3N6KTsKKwltbHg0X2RiZyhkZXYsICJNYXggRVFzOiAlZCwgcmVzZXJ2ZWQgRVFzOiAlZCwgZW50cnkgc2l6ZTogJWRcbiIsCisJCSBkZXZfY2FwLT5tYXhfZXFzLCBkZXZfY2FwLT5yZXNlcnZlZF9lcXMsIGRldl9jYXAtPmVxY19lbnRyeV9zeik7CisJbWx4NF9kYmcoZGV2LCAicmVzZXJ2ZWQgTVBUczogJWQsIHJlc2VydmVkIE1UVHM6ICVkXG4iLAorCQkgZGV2X2NhcC0+cmVzZXJ2ZWRfbXJ3cywgZGV2X2NhcC0+cmVzZXJ2ZWRfbXR0cyk7CisJbWx4NF9kYmcoZGV2LCAiTWF4IFBEczogJWQsIHJlc2VydmVkIFBEczogJWQsIHJlc2VydmVkIFVBUnM6ICVkXG4iLAorCQkgZGV2X2NhcC0+bWF4X3BkcywgZGV2X2NhcC0+cmVzZXJ2ZWRfcGRzLCBkZXZfY2FwLT5yZXNlcnZlZF91YXJzKTsKKwltbHg0X2RiZyhkZXYsICJNYXggUVAvTUNHOiAlZCwgcmVzZXJ2ZWQgTUdNczogJWRcbiIsCisJCSBkZXZfY2FwLT5tYXhfcGRzLCBkZXZfY2FwLT5yZXNlcnZlZF9tZ21zKTsKKwltbHg0X2RiZyhkZXYsICJNYXggQ1FFczogJWQsIG1heCBXUUVzOiAlZCwgbWF4IFNSUSBXUUVzOiAlZFxuIiwKKwkJIGRldl9jYXAtPm1heF9jcV9zeiwgZGV2X2NhcC0+bWF4X3FwX3N6LCBkZXZfY2FwLT5tYXhfc3JxX3N6KTsKKwltbHg0X2RiZyhkZXYsICJMb2NhbCBDQSBBQ0sgZGVsYXk6ICVkLCBtYXggTVRVOiAlZCwgcG9ydCB3aWR0aCBjYXA6ICVkXG4iLAorCQkgZGV2X2NhcC0+bG9jYWxfY2FfYWNrX2RlbGF5LCAxMjggPDwgZGV2X2NhcC0+bWF4X210dSwKKwkJIGRldl9jYXAtPm1heF9wb3J0X3dpZHRoKTsKKwltbHg0X2RiZyhkZXYsICJNYXggU1EgZGVzYyBzaXplOiAlZCwgbWF4IFNRIFMvRzogJWRcbiIsCisJCSBkZXZfY2FwLT5tYXhfc3FfZGVzY19zeiwgZGV2X2NhcC0+bWF4X3NxX3NnKTsKKwltbHg0X2RiZyhkZXYsICJNYXggUlEgZGVzYyBzaXplOiAlZCwgbWF4IFJRIFMvRzogJWRcbiIsCisJCSBkZXZfY2FwLT5tYXhfcnFfZGVzY19zeiwgZGV2X2NhcC0+bWF4X3JxX3NnKTsKKworCWR1bXBfZGV2X2NhcF9mbGFncyhkZXYsIGRldl9jYXAtPmZsYWdzKTsKKworb3V0OgorCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBtbHg0X21hcF9jbWQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHUxNiBvcCwgc3RydWN0IG1seDRfaWNtICppY20sIHU2NCB2aXJ0KQoreworCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OworCXN0cnVjdCBtbHg0X2ljbV9pdGVyIGl0ZXI7CisJX19iZTY0ICpwYWdlczsKKwlpbnQgbGc7CisJaW50IG5lbnQgPSAwOworCWludCBpOworCWludCBlcnIgPSAwOworCWludCB0cyA9IDAsIHRjID0gMDsKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CisJaWYgKElTX0VSUihtYWlsYm94KSkKKwkJcmV0dXJuIFBUUl9FUlIobWFpbGJveCk7CisJbWVtc2V0KG1haWxib3gtPmJ1ZiwgMCwgTUxYNF9NQUlMQk9YX1NJWkUpOworCXBhZ2VzID0gbWFpbGJveC0+YnVmOworCisJZm9yIChtbHg0X2ljbV9maXJzdChpY20sICZpdGVyKTsKKwkgICAgICFtbHg0X2ljbV9sYXN0KCZpdGVyKTsKKwkgICAgIG1seDRfaWNtX25leHQoJml0ZXIpKSB7CisJCS8qCisJCSAqIFdlIGhhdmUgdG8gcGFzcyBwYWdlcyB0aGF0IGFyZSBhbGlnbmVkIHRvIHRoZWlyCisJCSAqIHNpemUsIHNvIGZpbmQgdGhlIGxlYXN0IHNpZ25pZmljYW50IDEgaW4gdGhlCisJCSAqIGFkZHJlc3Mgb3Igc2l6ZSBhbmQgdXNlIHRoYXQgYXMgb3VyIGxvZzIgc2l6ZS4KKwkJICovCisJCWxnID0gZmZzKG1seDRfaWNtX2FkZHIoJml0ZXIpIHwgbWx4NF9pY21fc2l6ZSgmaXRlcikpIC0gMTsKKwkJaWYgKGxnIDwgTUxYNF9JQ01fUEFHRV9TSElGVCkgeworCQkJbWx4NF93YXJuKGRldiwgIkdvdCBGVyBhcmVhIG5vdCBhbGlnbmVkIHRvICVkICglbGx4LyVseCkuXG4iLAorCQkJCSAgIE1MWDRfSUNNX1BBR0VfU0laRSwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBtbHg0X2ljbV9hZGRyKCZpdGVyKSwKKwkJCQkgICBtbHg0X2ljbV9zaXplKCZpdGVyKSk7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgbWx4NF9pY21fc2l6ZSgmaXRlcikgPj4gbGc7ICsraSkgeworCQkJaWYgKHZpcnQgIT0gLTEpIHsKKwkJCQlwYWdlc1tuZW50ICogMl0gPSBjcHVfdG9fYmU2NCh2aXJ0KTsKKwkJCQl2aXJ0ICs9IDEgPDwgbGc7CisJCQl9CisKKwkJCXBhZ2VzW25lbnQgKiAyICsgMV0gPQorCQkJCWNwdV90b19iZTY0KChtbHg0X2ljbV9hZGRyKCZpdGVyKSArIChpIDw8IGxnKSkgfAorCQkJCQkgICAgKGxnIC0gTUxYNF9JQ01fUEFHRV9TSElGVCkpOworCQkJdHMgKz0gMSA8PCAobGcgLSAxMCk7CisJCQkrK3RjOworCisJCQlpZiAoKytuZW50ID09IE1MWDRfTUFJTEJPWF9TSVpFIC8gMTYpIHsKKwkJCQllcnIgPSBtbHg0X2NtZChkZXYsIG1haWxib3gtPmRtYSwgbmVudCwgMCwgb3AsCisJCQkJCQlNTFg0X0NNRF9USU1FX0NMQVNTX0IpOworCQkJCWlmIChlcnIpCisJCQkJCWdvdG8gb3V0OworCQkJCW5lbnQgPSAwOworCQkJfQorCQl9CisJfQorCisJaWYgKG5lbnQpCisJCWVyciA9IG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCBuZW50LCAwLCBvcCwgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXN3aXRjaCAob3ApIHsKKwljYXNlIE1MWDRfQ01EX01BUF9GQToKKwkJbWx4NF9kYmcoZGV2LCAiTWFwcGVkICVkIGNodW5rcy8lZCBLQiBmb3IgRlcuXG4iLCB0YywgdHMpOworCQlicmVhazsKKwljYXNlIE1MWDRfQ01EX01BUF9JQ01fQVVYOgorCQltbHg0X2RiZyhkZXYsICJNYXBwZWQgJWQgY2h1bmtzLyVkIEtCIGZvciBJQ00gYXV4LlxuIiwgdGMsIHRzKTsKKwkJYnJlYWs7CisJY2FzZSBNTFg0X0NNRF9NQVBfSUNNOgorCQltbHg0X2RiZyhkZXYsICJNYXBwZWQgJWQgY2h1bmtzLyVkIEtCIGF0ICVsbHggZm9yIElDTS5cbiIsCisJCQkgIHRjLCB0cywgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmlydCAtICh0cyA8PCAxMCkpOworCQlicmVhazsKKwl9CisKK291dDoKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LCBtYWlsYm94KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbWx4NF9NQVBfRkEoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2ljbSAqaWNtKQoreworCXJldHVybiBtbHg0X21hcF9jbWQoZGV2LCBNTFg0X0NNRF9NQVBfRkEsIGljbSwgLTEpOworfQorCitpbnQgbWx4NF9VTk1BUF9GQShzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlyZXR1cm4gbWx4NF9jbWQoZGV2LCAwLCAwLCAwLCBNTFg0X0NNRF9VTk1BUF9GQSwgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKK30KKworCitpbnQgbWx4NF9SVU5fRlcoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJcmV0dXJuIG1seDRfY21kKGRldiwgMCwgMCwgMCwgTUxYNF9DTURfUlVOX0ZXLCBNTFg0X0NNRF9USU1FX0NMQVNTX0EpOworfQorCitpbnQgbWx4NF9RVUVSWV9GVyhzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9mdyAgKmZ3ICA9ICZtbHg0X3ByaXYoZGV2KS0+Znc7CisJc3RydWN0IG1seDRfY21kICpjbWQgPSAmbWx4NF9wcml2KGRldiktPmNtZDsKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwl1MzIgKm91dGJveDsKKwlpbnQgZXJyID0gMDsKKwl1NjQgZndfdmVyOworCXU4IGxnOworCisjZGVmaW5lIFFVRVJZX0ZXX09VVF9TSVpFICAgICAgICAgICAgIDB4MTAwCisjZGVmaW5lIFFVRVJZX0ZXX1ZFUl9PRkZTRVQgICAgICAgICAgICAweDAwCisjZGVmaW5lIFFVRVJZX0ZXX01BWF9DTURfT0ZGU0VUICAgICAgICAweDBmCisjZGVmaW5lIFFVRVJZX0ZXX0VSUl9TVEFSVF9PRkZTRVQgICAgICAweDMwCisjZGVmaW5lIFFVRVJZX0ZXX0VSUl9TSVpFX09GRlNFVCAgICAgICAweDM4CisjZGVmaW5lIFFVRVJZX0ZXX0VSUl9CQVJfT0ZGU0VUICAgICAgICAweDNjCisKKyNkZWZpbmUgUVVFUllfRldfU0laRV9PRkZTRVQgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUVVFUllfRldfQ0xSX0lOVF9CQVNFX09GRlNFVCAgIDB4MjAKKyNkZWZpbmUgUVVFUllfRldfQ0xSX0lOVF9CQVJfT0ZGU0VUICAgIDB4MjgKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CisJaWYgKElTX0VSUihtYWlsYm94KSkKKwkJcmV0dXJuIFBUUl9FUlIobWFpbGJveCk7CisJb3V0Ym94ID0gbWFpbGJveC0+YnVmOworCisJZXJyID0gbWx4NF9jbWRfYm94KGRldiwgMCwgbWFpbGJveC0+ZG1hLCAwLCAwLCBNTFg0X0NNRF9RVUVSWV9GVywKKwkJCSAgICBNTFg0X0NNRF9USU1FX0NMQVNTX0EpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJTUxYNF9HRVQoZndfdmVyLCBvdXRib3gsIFFVRVJZX0ZXX1ZFUl9PRkZTRVQpOworCS8qCisJICogRlcgc3VibWlub3IgdmVyc2lvbiBpcyBhdCBtb3JlIHNpZ25pZmFudCBiaXRzIHRoYW4gbWlub3IKKwkgKiB2ZXJzaW9uLCBzbyBzd2FwIGhlcmUuCisJICovCisJZGV2LT5jYXBzLmZ3X3ZlciA9IChmd192ZXIgJiAweGZmZmYwMDAwMDAwMHVsbCkgfAorCQkoKGZ3X3ZlciAmIDB4ZmZmZjAwMDB1bGwpID4+IDE2KSB8CisJCSgoZndfdmVyICYgMHgwMDAwZmZmZnVsbCkgPDwgMTYpOworCisJTUxYNF9HRVQobGcsIG91dGJveCwgUVVFUllfRldfTUFYX0NNRF9PRkZTRVQpOworCWNtZC0+bWF4X2NtZHMgPSAxIDw8IGxnOworCisJbWx4NF9kYmcoZGV2LCAiRlcgdmVyc2lvbiAlZC4lZC4lMDNkLCBtYXggY29tbWFuZHMgJWRcbiIsCisJCSAoaW50KSAoZGV2LT5jYXBzLmZ3X3ZlciA+PiAzMiksCisJCSAoaW50KSAoZGV2LT5jYXBzLmZ3X3ZlciA+PiAxNikgJiAweGZmZmYsCisJCSAoaW50KSBkZXYtPmNhcHMuZndfdmVyICYgMHhmZmZmLAorCQkgY21kLT5tYXhfY21kcyk7CisKKwlNTFg0X0dFVChmdy0+Y2F0YXNfb2Zmc2V0LCBvdXRib3gsIFFVRVJZX0ZXX0VSUl9TVEFSVF9PRkZTRVQpOworCU1MWDRfR0VUKGZ3LT5jYXRhc19zaXplLCAgIG91dGJveCwgUVVFUllfRldfRVJSX1NJWkVfT0ZGU0VUKTsKKwlNTFg0X0dFVChmdy0+Y2F0YXNfYmFyLCAgICBvdXRib3gsIFFVRVJZX0ZXX0VSUl9CQVJfT0ZGU0VUKTsKKwlmdy0+Y2F0YXNfYmFyID0gKGZ3LT5jYXRhc19iYXIgPj4gNikgKiAyOworCisJbWx4NF9kYmcoZGV2LCAiQ2F0YXN0cm9waGljIGVycm9yIGJ1ZmZlciBhdCAweCVsbHgsIHNpemUgMHgleCwgQkFSICVkXG4iLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgZnctPmNhdGFzX29mZnNldCwgZnctPmNhdGFzX3NpemUsIGZ3LT5jYXRhc19iYXIpOworCisJTUxYNF9HRVQoZnctPmZ3X3BhZ2VzLCAgICAgb3V0Ym94LCBRVUVSWV9GV19TSVpFX09GRlNFVCk7CisJTUxYNF9HRVQoZnctPmNscl9pbnRfYmFzZSwgb3V0Ym94LCBRVUVSWV9GV19DTFJfSU5UX0JBU0VfT0ZGU0VUKTsKKwlNTFg0X0dFVChmdy0+Y2xyX2ludF9iYXIsICBvdXRib3gsIFFVRVJZX0ZXX0NMUl9JTlRfQkFSX09GRlNFVCk7CisJZnctPmNscl9pbnRfYmFyID0gKGZ3LT5jbHJfaW50X2JhciA+PiA2KSAqIDI7CisKKwltbHg0X2RiZyhkZXYsICJGVyBzaXplICVkIEtCXG4iLCBmdy0+ZndfcGFnZXMgPj4gMik7CisKKwkvKgorCSAqIFJvdW5kIHVwIG51bWJlciBvZiBzeXN0ZW0gcGFnZXMgbmVlZGVkIGluIGNhc2UKKwkgKiBNTFg0X0lDTV9QQUdFX1NJWkUgPCBQQUdFX1NJWkUuCisJICovCisJZnctPmZ3X3BhZ2VzID0KKwkJQUxJR04oZnctPmZ3X3BhZ2VzLCBQQUdFX1NJWkUgLyBNTFg0X0lDTV9QQUdFX1NJWkUpID4+CisJCShQQUdFX1NISUZUIC0gTUxYNF9JQ01fUEFHRV9TSElGVCk7CisKKwltbHg0X2RiZyhkZXYsICJDbGVhciBpbnQgQCAlbGx4LCBCQVIgJWRcbiIsCisJCSAodW5zaWduZWQgbG9uZyBsb25nKSBmdy0+Y2xyX2ludF9iYXNlLCBmdy0+Y2xyX2ludF9iYXIpOworCitvdXQ6CisJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZ2V0X2JvYXJkX2lkKHZvaWQgKnZzZCwgY2hhciAqYm9hcmRfaWQpCit7CisJaW50IGk7CisKKyNkZWZpbmUgVlNEX09GRlNFVF9TSUcxCQkweDAwCisjZGVmaW5lIFZTRF9PRkZTRVRfU0lHMgkJMHhkZQorI2RlZmluZSBWU0RfT0ZGU0VUX01MWF9CT0FSRF9JRAkweGQwCisjZGVmaW5lIFZTRF9PRkZTRVRfVFNfQk9BUkRfSUQJMHgyMAorCisjZGVmaW5lIFZTRF9TSUdOQVRVUkVfVE9QU1BJTgkweDVhZAorCisJbWVtc2V0KGJvYXJkX2lkLCAwLCBNTFg0X0JPQVJEX0lEX0xFTik7CisKKwlpZiAoYmUxNl90b19jcHVwKHZzZCArIFZTRF9PRkZTRVRfU0lHMSkgPT0gVlNEX1NJR05BVFVSRV9UT1BTUElOICYmCisJICAgIGJlMTZfdG9fY3B1cCh2c2QgKyBWU0RfT0ZGU0VUX1NJRzIpID09IFZTRF9TSUdOQVRVUkVfVE9QU1BJTikgeworCQlzdHJsY3B5KGJvYXJkX2lkLCB2c2QgKyBWU0RfT0ZGU0VUX1RTX0JPQVJEX0lELCBNTFg0X0JPQVJEX0lEX0xFTik7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGJvYXJkIElEIGlzIGEgc3RyaW5nIGJ1dCB0aGUgZmlybXdhcmUgYnl0ZQorCQkgKiBzd2FwcyBlYWNoIDQtYnl0ZSB3b3JkIGJlZm9yZSBwYXNzaW5nIGl0IGJhY2sgdG8KKwkJICogdXMuICBUaGVyZWZvcmUgd2UgbmVlZCB0byBzd2FiIGl0IGJlZm9yZSBwcmludGluZy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJCQkoKHUzMiAqKSBib2FyZF9pZClbaV0gPQorCQkJCXN3YWIzMigqKHUzMiAqKSAodnNkICsgVlNEX09GRlNFVF9NTFhfQk9BUkRfSUQgKyBpICogNCkpOworCX0KK30KKworaW50IG1seDRfUVVFUllfQURBUFRFUihzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwl1MzIgKm91dGJveDsKKwlpbnQgZXJyOworCisjZGVmaW5lIFFVRVJZX0FEQVBURVJfT1VUX1NJWkUgICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgUVVFUllfQURBUFRFUl9WRU5ET1JfSURfT0ZGU0VUICAgICAweDAwCisjZGVmaW5lIFFVRVJZX0FEQVBURVJfREVWSUNFX0lEX09GRlNFVCAgICAgMHgwNAorI2RlZmluZSBRVUVSWV9BREFQVEVSX1JFVklTSU9OX0lEX09GRlNFVCAgIDB4MDgKKyNkZWZpbmUgUVVFUllfQURBUFRFUl9JTlRBX1BJTl9PRkZTRVQgICAgICAweDEwCisjZGVmaW5lIFFVRVJZX0FEQVBURVJfVlNEX09GRlNFVCAgICAgICAgICAgMHgyMAorCisJbWFpbGJveCA9IG1seDRfYWxsb2NfY21kX21haWxib3goZGV2KTsKKwlpZiAoSVNfRVJSKG1haWxib3gpKQorCQlyZXR1cm4gUFRSX0VSUihtYWlsYm94KTsKKwlvdXRib3ggPSBtYWlsYm94LT5idWY7CisKKwllcnIgPSBtbHg0X2NtZF9ib3goZGV2LCAwLCBtYWlsYm94LT5kbWEsIDAsIDAsIE1MWDRfQ01EX1FVRVJZX0FEQVBURVIsCisJCQkgICBNTFg0X0NNRF9USU1FX0NMQVNTX0EpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJTUxYNF9HRVQoYWRhcHRlci0+dmVuZG9yX2lkLCBvdXRib3gsICAgUVVFUllfQURBUFRFUl9WRU5ET1JfSURfT0ZGU0VUKTsKKwlNTFg0X0dFVChhZGFwdGVyLT5kZXZpY2VfaWQsIG91dGJveCwgICBRVUVSWV9BREFQVEVSX0RFVklDRV9JRF9PRkZTRVQpOworCU1MWDRfR0VUKGFkYXB0ZXItPnJldmlzaW9uX2lkLCBvdXRib3gsIFFVRVJZX0FEQVBURVJfUkVWSVNJT05fSURfT0ZGU0VUKTsKKwlNTFg0X0dFVChhZGFwdGVyLT5pbnRhX3Bpbiwgb3V0Ym94LCAgICBRVUVSWV9BREFQVEVSX0lOVEFfUElOX09GRlNFVCk7CisKKwlnZXRfYm9hcmRfaWQob3V0Ym94ICsgUVVFUllfQURBUFRFUl9WU0RfT0ZGU0VUIC8gNCwKKwkJICAgICBhZGFwdGVyLT5ib2FyZF9pZCk7CisKK291dDoKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LCBtYWlsYm94KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbWx4NF9JTklUX0hDQShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfaW5pdF9oY2FfcGFyYW0gKnBhcmFtKQoreworCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OworCV9fYmUzMiAqaW5ib3g7CisJaW50IGVycjsKKworI2RlZmluZSBJTklUX0hDQV9JTl9TSVpFCQkgMHgyMDAKKyNkZWZpbmUgSU5JVF9IQ0FfVkVSU0lPTl9PRkZTRVQJCSAweDAwMAorI2RlZmluZQkgSU5JVF9IQ0FfVkVSU0lPTgkJIDIKKyNkZWZpbmUgSU5JVF9IQ0FfRkxBR1NfT0ZGU0VUCQkgMHgwMTQKKyNkZWZpbmUgSU5JVF9IQ0FfUVBDX09GRlNFVAkJIDB4MDIwCisjZGVmaW5lCSBJTklUX0hDQV9RUENfQkFTRV9PRkZTRVQJIChJTklUX0hDQV9RUENfT0ZGU0VUICsgMHgxMCkKKyNkZWZpbmUJIElOSVRfSENBX0xPR19RUF9PRkZTRVQJCSAoSU5JVF9IQ0FfUVBDX09GRlNFVCArIDB4MTcpCisjZGVmaW5lCSBJTklUX0hDQV9TUlFDX0JBU0VfT0ZGU0VUCSAoSU5JVF9IQ0FfUVBDX09GRlNFVCArIDB4MjgpCisjZGVmaW5lCSBJTklUX0hDQV9MT0dfU1JRX09GRlNFVAkgKElOSVRfSENBX1FQQ19PRkZTRVQgKyAweDJmKQorI2RlZmluZQkgSU5JVF9IQ0FfQ1FDX0JBU0VfT0ZGU0VUCSAoSU5JVF9IQ0FfUVBDX09GRlNFVCArIDB4MzApCisjZGVmaW5lCSBJTklUX0hDQV9MT0dfQ1FfT0ZGU0VUCQkgKElOSVRfSENBX1FQQ19PRkZTRVQgKyAweDM3KQorI2RlZmluZQkgSU5JVF9IQ0FfQUxUQ19CQVNFX09GRlNFVAkgKElOSVRfSENBX1FQQ19PRkZTRVQgKyAweDQwKQorI2RlZmluZQkgSU5JVF9IQ0FfQVVYQ19CQVNFX09GRlNFVAkgKElOSVRfSENBX1FQQ19PRkZTRVQgKyAweDUwKQorI2RlZmluZQkgSU5JVF9IQ0FfRVFDX0JBU0VfT0ZGU0VUCSAoSU5JVF9IQ0FfUVBDX09GRlNFVCArIDB4NjApCisjZGVmaW5lCSBJTklUX0hDQV9MT0dfRVFfT0ZGU0VUCQkgKElOSVRfSENBX1FQQ19PRkZTRVQgKyAweDY3KQorI2RlZmluZQkgSU5JVF9IQ0FfUkRNQVJDX0JBU0VfT0ZGU0VUCSAoSU5JVF9IQ0FfUVBDX09GRlNFVCArIDB4NzApCisjZGVmaW5lCSBJTklUX0hDQV9MT0dfUkRfT0ZGU0VUCQkgKElOSVRfSENBX1FQQ19PRkZTRVQgKyAweDc3KQorI2RlZmluZSBJTklUX0hDQV9NQ0FTVF9PRkZTRVQJCSAweDBjMAorI2RlZmluZQkgSU5JVF9IQ0FfTUNfQkFTRV9PRkZTRVQJIChJTklUX0hDQV9NQ0FTVF9PRkZTRVQgKyAweDAwKQorI2RlZmluZQkgSU5JVF9IQ0FfTE9HX01DX0VOVFJZX1NaX09GRlNFVCAoSU5JVF9IQ0FfTUNBU1RfT0ZGU0VUICsgMHgxMikKKyNkZWZpbmUJIElOSVRfSENBX0xPR19NQ19IQVNIX1NaX09GRlNFVAkgKElOSVRfSENBX01DQVNUX09GRlNFVCArIDB4MTYpCisjZGVmaW5lCSBJTklUX0hDQV9MT0dfTUNfVEFCTEVfU1pfT0ZGU0VUIChJTklUX0hDQV9NQ0FTVF9PRkZTRVQgKyAweDFiKQorI2RlZmluZSBJTklUX0hDQV9UUFRfT0ZGU0VUCQkgMHgwZjAKKyNkZWZpbmUJIElOSVRfSENBX0RNUFRfQkFTRV9PRkZTRVQJIChJTklUX0hDQV9UUFRfT0ZGU0VUICsgMHgwMCkKKyNkZWZpbmUJIElOSVRfSENBX0xPR19NUFRfU1pfT0ZGU0VUCSAoSU5JVF9IQ0FfVFBUX09GRlNFVCArIDB4MGIpCisjZGVmaW5lCSBJTklUX0hDQV9NVFRfQkFTRV9PRkZTRVQJIChJTklUX0hDQV9UUFRfT0ZGU0VUICsgMHgxMCkKKyNkZWZpbmUJIElOSVRfSENBX0NNUFRfQkFTRV9PRkZTRVQJIChJTklUX0hDQV9UUFRfT0ZGU0VUICsgMHgxOCkKKyNkZWZpbmUgSU5JVF9IQ0FfVUFSX09GRlNFVAkJIDB4MTIwCisjZGVmaW5lCSBJTklUX0hDQV9MT0dfVUFSX1NaX09GRlNFVAkgKElOSVRfSENBX1VBUl9PRkZTRVQgKyAweDBhKQorI2RlZmluZSAgSU5JVF9IQ0FfVUFSX1BBR0VfU1pfT0ZGU0VUICAgICAoSU5JVF9IQ0FfVUFSX09GRlNFVCArIDB4MGIpCisKKwltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOworCWlmIChJU19FUlIobWFpbGJveCkpCisJCXJldHVybiBQVFJfRVJSKG1haWxib3gpOworCWluYm94ID0gbWFpbGJveC0+YnVmOworCisJbWVtc2V0KGluYm94LCAwLCBJTklUX0hDQV9JTl9TSVpFKTsKKworCSooKHU4ICopIG1haWxib3gtPmJ1ZiArIElOSVRfSENBX1ZFUlNJT05fT0ZGU0VUKSA9IElOSVRfSENBX1ZFUlNJT047CisKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwkqKGluYm94ICsgSU5JVF9IQ0FfRkxBR1NfT0ZGU0VUIC8gNCkgJj0gfmNwdV90b19iZTMyKDEgPDwgMSk7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwkqKGluYm94ICsgSU5JVF9IQ0FfRkxBR1NfT0ZGU0VUIC8gNCkgfD0gY3B1X3RvX2JlMzIoMSA8PCAxKTsKKyNlbHNlCisjZXJyb3IgSG9zdCBlbmRpYW5uZXNzIG5vdCBkZWZpbmVkCisjZW5kaWYKKwkvKiBDaGVjayBwb3J0IGZvciBVRCBhZGRyZXNzIHZlY3RvcjogKi8KKwkqKGluYm94ICsgSU5JVF9IQ0FfRkxBR1NfT0ZGU0VUIC8gNCkgfD0gY3B1X3RvX2JlMzIoMSk7CisKKwkvKiBRUEMvRUVDL0NRQy9FUUMvUkRNQVJDIGF0dHJpYnV0ZXMgKi8KKworCU1MWDRfUFVUKGluYm94LCBwYXJhbS0+cXBjX2Jhc2UsICAgICAgSU5JVF9IQ0FfUVBDX0JBU0VfT0ZGU0VUKTsKKwlNTFg0X1BVVChpbmJveCwgcGFyYW0tPmxvZ19udW1fcXBzLCAgIElOSVRfSENBX0xPR19RUF9PRkZTRVQpOworCU1MWDRfUFVUKGluYm94LCBwYXJhbS0+c3JxY19iYXNlLCAgICAgSU5JVF9IQ0FfU1JRQ19CQVNFX09GRlNFVCk7CisJTUxYNF9QVVQoaW5ib3gsIHBhcmFtLT5sb2dfbnVtX3NycXMsICBJTklUX0hDQV9MT0dfU1JRX09GRlNFVCk7CisJTUxYNF9QVVQoaW5ib3gsIHBhcmFtLT5jcWNfYmFzZSwgICAgICBJTklUX0hDQV9DUUNfQkFTRV9PRkZTRVQpOworCU1MWDRfUFVUKGluYm94LCBwYXJhbS0+bG9nX251bV9jcXMsICAgSU5JVF9IQ0FfTE9HX0NRX09GRlNFVCk7CisJTUxYNF9QVVQoaW5ib3gsIHBhcmFtLT5hbHRjX2Jhc2UsICAgICBJTklUX0hDQV9BTFRDX0JBU0VfT0ZGU0VUKTsKKwlNTFg0X1BVVChpbmJveCwgcGFyYW0tPmF1eGNfYmFzZSwgICAgIElOSVRfSENBX0FVWENfQkFTRV9PRkZTRVQpOworCU1MWDRfUFVUKGluYm94LCBwYXJhbS0+ZXFjX2Jhc2UsICAgICAgSU5JVF9IQ0FfRVFDX0JBU0VfT0ZGU0VUKTsKKwlNTFg0X1BVVChpbmJveCwgcGFyYW0tPmxvZ19udW1fZXFzLCAgIElOSVRfSENBX0xPR19FUV9PRkZTRVQpOworCU1MWDRfUFVUKGluYm94LCBwYXJhbS0+cmRtYXJjX2Jhc2UsICAgSU5JVF9IQ0FfUkRNQVJDX0JBU0VfT0ZGU0VUKTsKKwlNTFg0X1BVVChpbmJveCwgcGFyYW0tPmxvZ19yZF9wZXJfcXAsIElOSVRfSENBX0xPR19SRF9PRkZTRVQpOworCisJLyogbXVsdGljYXN0IGF0dHJpYnV0ZXMgKi8KKworCU1MWDRfUFVUKGluYm94LCBwYXJhbS0+bWNfYmFzZSwJCUlOSVRfSENBX01DX0JBU0VfT0ZGU0VUKTsKKwlNTFg0X1BVVChpbmJveCwgcGFyYW0tPmxvZ19tY19lbnRyeV9zeiwgSU5JVF9IQ0FfTE9HX01DX0VOVFJZX1NaX09GRlNFVCk7CisJTUxYNF9QVVQoaW5ib3gsIHBhcmFtLT5sb2dfbWNfaGFzaF9zeiwgIElOSVRfSENBX0xPR19NQ19IQVNIX1NaX09GRlNFVCk7CisJTUxYNF9QVVQoaW5ib3gsIHBhcmFtLT5sb2dfbWNfdGFibGVfc3osIElOSVRfSENBX0xPR19NQ19UQUJMRV9TWl9PRkZTRVQpOworCisJLyogVFBUIGF0dHJpYnV0ZXMgKi8KKworCU1MWDRfUFVUKGluYm94LCBwYXJhbS0+ZG1wdF9iYXNlLCAgSU5JVF9IQ0FfRE1QVF9CQVNFX09GRlNFVCk7CisJTUxYNF9QVVQoaW5ib3gsIHBhcmFtLT5sb2dfbXB0X3N6LCBJTklUX0hDQV9MT0dfTVBUX1NaX09GRlNFVCk7CisJTUxYNF9QVVQoaW5ib3gsIHBhcmFtLT5tdHRfYmFzZSwgICBJTklUX0hDQV9NVFRfQkFTRV9PRkZTRVQpOworCU1MWDRfUFVUKGluYm94LCBwYXJhbS0+Y21wdF9iYXNlLCAgSU5JVF9IQ0FfQ01QVF9CQVNFX09GRlNFVCk7CisKKwkvKiBVQVIgYXR0cmlidXRlcyAqLworCisJTUxYNF9QVVQoaW5ib3gsICh1OCkgKFBBR0VfU0hJRlQgLSAxMiksIElOSVRfSENBX1VBUl9QQUdFX1NaX09GRlNFVCk7CisJTUxYNF9QVVQoaW5ib3gsIHBhcmFtLT5sb2dfdWFyX3N6LCAgICAgIElOSVRfSENBX0xPR19VQVJfU1pfT0ZGU0VUKTsKKworCWVyciA9IG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCAwLCAwLCBNTFg0X0NNRF9JTklUX0hDQSwgMTAwMCk7CisKKwlpZiAoZXJyKQorCQltbHg0X2VycihkZXYsICJJTklUX0hDQSByZXR1cm5zICVkXG4iLCBlcnIpOworCisJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CisJcmV0dXJuIGVycjsKK30KKworaW50IG1seDRfSU5JVF9QT1JUKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pbml0X3BvcnRfcGFyYW0gKnBhcmFtLCBpbnQgcG9ydCkKK3sKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwl1MzIgKmluYm94OworCWludCBlcnI7CisJdTMyIGZsYWdzOworCisjZGVmaW5lIElOSVRfUE9SVF9JTl9TSVpFICAgICAgICAgIDI1NgorI2RlZmluZSBJTklUX1BPUlRfRkxBR1NfT0ZGU0VUICAgICAweDAwCisjZGVmaW5lIElOSVRfUE9SVF9GTEFHX1NJRyAgICAgICAgICgxIDw8IDE4KQorI2RlZmluZSBJTklUX1BPUlRfRkxBR19ORyAgICAgICAgICAoMSA8PCAxNykKKyNkZWZpbmUgSU5JVF9QT1JUX0ZMQUdfRzAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIElOSVRfUE9SVF9WTF9TSElGVCAgICAgICAgIDQKKyNkZWZpbmUgSU5JVF9QT1JUX1BPUlRfV0lEVEhfU0hJRlQgOAorI2RlZmluZSBJTklUX1BPUlRfTVRVX09GRlNFVCAgICAgICAweDA0CisjZGVmaW5lIElOSVRfUE9SVF9NQVhfR0lEX09GRlNFVCAgIDB4MDYKKyNkZWZpbmUgSU5JVF9QT1JUX01BWF9QS0VZX09GRlNFVCAgMHgwYQorI2RlZmluZSBJTklUX1BPUlRfR1VJRDBfT0ZGU0VUICAgICAweDEwCisjZGVmaW5lIElOSVRfUE9SVF9OT0RFX0dVSURfT0ZGU0VUIDB4MTgKKyNkZWZpbmUgSU5JVF9QT1JUX1NJX0dVSURfT0ZGU0VUICAgMHgyMAorCisJbWFpbGJveCA9IG1seDRfYWxsb2NfY21kX21haWxib3goZGV2KTsKKwlpZiAoSVNfRVJSKG1haWxib3gpKQorCQlyZXR1cm4gUFRSX0VSUihtYWlsYm94KTsKKwlpbmJveCA9IG1haWxib3gtPmJ1ZjsKKworCW1lbXNldChpbmJveCwgMCwgSU5JVF9QT1JUX0lOX1NJWkUpOworCisJZmxhZ3MgPSAwOworCWZsYWdzIHw9IHBhcmFtLT5zZXRfZ3VpZDAgICAgID8gSU5JVF9QT1JUX0ZMQUdfRzAgIDogMDsKKwlmbGFncyB8PSBwYXJhbS0+c2V0X25vZGVfZ3VpZCA/IElOSVRfUE9SVF9GTEFHX05HICA6IDA7CisJZmxhZ3MgfD0gcGFyYW0tPnNldF9zaV9ndWlkICAgPyBJTklUX1BPUlRfRkxBR19TSUcgOiAwOworCWZsYWdzIHw9IChwYXJhbS0+dmxfY2FwICYgMHhmKSA8PCBJTklUX1BPUlRfVkxfU0hJRlQ7CisJZmxhZ3MgfD0gKHBhcmFtLT5wb3J0X3dpZHRoX2NhcCAmIDB4ZikgPDwgSU5JVF9QT1JUX1BPUlRfV0lEVEhfU0hJRlQ7CisJTUxYNF9QVVQoaW5ib3gsIGZsYWdzLCAgICAgICAgICAgIElOSVRfUE9SVF9GTEFHU19PRkZTRVQpOworCisJTUxYNF9QVVQoaW5ib3gsIHBhcmFtLT5tdHUsICAgICAgIElOSVRfUE9SVF9NVFVfT0ZGU0VUKTsKKwlNTFg0X1BVVChpbmJveCwgcGFyYW0tPm1heF9naWQsICAgSU5JVF9QT1JUX01BWF9HSURfT0ZGU0VUKTsKKwlNTFg0X1BVVChpbmJveCwgcGFyYW0tPm1heF9wa2V5LCAgSU5JVF9QT1JUX01BWF9QS0VZX09GRlNFVCk7CisJTUxYNF9QVVQoaW5ib3gsIHBhcmFtLT5ndWlkMCwgICAgIElOSVRfUE9SVF9HVUlEMF9PRkZTRVQpOworCU1MWDRfUFVUKGluYm94LCBwYXJhbS0+bm9kZV9ndWlkLCBJTklUX1BPUlRfTk9ERV9HVUlEX09GRlNFVCk7CisJTUxYNF9QVVQoaW5ib3gsIHBhcmFtLT5zaV9ndWlkLCAgIElOSVRfUE9SVF9TSV9HVUlEX09GRlNFVCk7CisKKwllcnIgPSBtbHg0X2NtZChkZXYsIG1haWxib3gtPmRtYSwgcG9ydCwgMCwgTUxYNF9DTURfSU5JVF9QT1JULAorCQkgICAgICAgTUxYNF9DTURfVElNRV9DTEFTU19BKTsKKworCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfSU5JVF9QT1JUKTsKKworaW50IG1seDRfQ0xPU0VfUE9SVChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHBvcnQpCit7CisJcmV0dXJuIG1seDRfY21kKGRldiwgMCwgcG9ydCwgMCwgTUxYNF9DTURfQ0xPU0VfUE9SVCwgMTAwMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X0NMT1NFX1BPUlQpOworCitpbnQgbWx4NF9DTE9TRV9IQ0Eoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBwYW5pYykKK3sKKwlyZXR1cm4gbWx4NF9jbWQoZGV2LCAwLCAwLCBwYW5pYywgTUxYNF9DTURfQ0xPU0VfSENBLCAxMDAwKTsKK30KKworaW50IG1seDRfU0VUX0lDTV9TSVpFKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1NjQgaWNtX3NpemUsIHU2NCAqYXV4X3BhZ2VzKQoreworCWludCByZXQgPSBtbHg0X2NtZF9pbW0oZGV2LCBpY21fc2l6ZSwgYXV4X3BhZ2VzLCAwLCAwLAorCQkJICAgICAgIE1MWDRfQ01EX1NFVF9JQ01fU0laRSwKKwkJCSAgICAgICBNTFg0X0NNRF9USU1FX0NMQVNTX0EpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIFJvdW5kIHVwIG51bWJlciBvZiBzeXN0ZW0gcGFnZXMgbmVlZGVkIGluIGNhc2UKKwkgKiBNTFg0X0lDTV9QQUdFX1NJWkUgPCBQQUdFX1NJWkUuCisJICovCisJKmF1eF9wYWdlcyA9IEFMSUdOKCphdXhfcGFnZXMsIFBBR0VfU0laRSAvIE1MWDRfSUNNX1BBR0VfU0laRSkgPj4KKwkJKFBBR0VfU0hJRlQgLSBNTFg0X0lDTV9QQUdFX1NISUZUKTsKKworCXJldHVybiAwOworfQorCitpbnQgbWx4NF9OT1Aoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJLyogSW5wdXQgbW9kaWZpZXIgb2YgMHgxZiBtZWFucyAiZmluaXNoIGFzIHNvb24gYXMgcG9zc2libGUuIiAqLworCXJldHVybiBtbHg0X2NtZChkZXYsIDAsIDB4MWYsIDAsIE1MWDRfQ01EX05PUCwgMTAwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZncuaCBiL2RyaXZlcnMvbmV0L21seDQvZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjE2ZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9mdy5oCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgTUxYNF9GV19ICisjZGVmaW5lIE1MWDRfRldfSAorCisjaW5jbHVkZSAibWx4NC5oIgorI2luY2x1ZGUgImljbS5oIgorCitzdHJ1Y3QgbWx4NF9kZXZfY2FwIHsKKwlpbnQgbWF4X3NycV9zejsKKwlpbnQgbWF4X3FwX3N6OworCWludCByZXNlcnZlZF9xcHM7CisJaW50IG1heF9xcHM7CisJaW50IHJlc2VydmVkX3NycXM7CisJaW50IG1heF9zcnFzOworCWludCBtYXhfY3Ffc3o7CisJaW50IHJlc2VydmVkX2NxczsKKwlpbnQgbWF4X2NxczsKKwlpbnQgbWF4X21wdHM7CisJaW50IHJlc2VydmVkX2VxczsKKwlpbnQgbWF4X2VxczsKKwlpbnQgcmVzZXJ2ZWRfbXR0czsKKwlpbnQgbWF4X21yd19zejsKKwlpbnQgcmVzZXJ2ZWRfbXJ3czsKKwlpbnQgbWF4X210dF9zZWc7CisJaW50IG1heF9yZXF1ZXN0ZXJfcGVyX3FwOworCWludCBtYXhfcmVzcG9uZGVyX3Blcl9xcDsKKwlpbnQgbWF4X3JkbWFfZ2xvYmFsOworCWludCBsb2NhbF9jYV9hY2tfZGVsYXk7CisJaW50IG1heF9tdHU7CisJaW50IG1heF9wb3J0X3dpZHRoOworCWludCBtYXhfdmw7CisJaW50IG51bV9wb3J0czsKKwlpbnQgbWF4X2dpZHM7CisJdTE2IHN0YXRfcmF0ZV9zdXBwb3J0OworCWludCBtYXhfcGtleXM7CisJdTMyIGZsYWdzOworCWludCByZXNlcnZlZF91YXJzOworCWludCB1YXJfc2l6ZTsKKwlpbnQgbWluX3BhZ2Vfc3o7CisJaW50IGJmX3JlZ19zaXplOworCWludCBiZl9yZWdzX3Blcl9wYWdlOworCWludCBtYXhfc3Ffc2c7CisJaW50IG1heF9zcV9kZXNjX3N6OworCWludCBtYXhfcnFfc2c7CisJaW50IG1heF9ycV9kZXNjX3N6OworCWludCBtYXhfcXBfcGVyX21jZzsKKwlpbnQgcmVzZXJ2ZWRfbWdtczsKKwlpbnQgbWF4X21jZ3M7CisJaW50IHJlc2VydmVkX3BkczsKKwlpbnQgbWF4X3BkczsKKwlpbnQgcXBjX2VudHJ5X3N6OworCWludCByZG1hcmNfZW50cnlfc3o7CisJaW50IGFsdGNfZW50cnlfc3o7CisJaW50IGF1eF9lbnRyeV9zejsKKwlpbnQgc3JxX2VudHJ5X3N6OworCWludCBjcWNfZW50cnlfc3o7CisJaW50IGVxY19lbnRyeV9zejsKKwlpbnQgZG1wdF9lbnRyeV9zejsKKwlpbnQgY21wdF9lbnRyeV9zejsKKwlpbnQgbXR0X2VudHJ5X3N6OworCWludCByZXNpemVfc3JxOworCXU4ICBibW1lX2ZsYWdzOworCXUzMiByZXNlcnZlZF9sa2V5OworCXU2NCBtYXhfaWNtX3N6OworfTsKKworc3RydWN0IG1seDRfYWRhcHRlciB7CisJdTMyICB2ZW5kb3JfaWQ7CisJdTMyICBkZXZpY2VfaWQ7CisJdTMyICByZXZpc2lvbl9pZDsKKwljaGFyIGJvYXJkX2lkW01MWDRfQk9BUkRfSURfTEVOXTsKKwl1OCAgIGludGFfcGluOworfTsKKworc3RydWN0IG1seDRfaW5pdF9oY2FfcGFyYW0geworCXU2NCBxcGNfYmFzZTsKKwl1NjQgcmRtYXJjX2Jhc2U7CisJdTY0IGF1eGNfYmFzZTsKKwl1NjQgYWx0Y19iYXNlOworCXU2NCBzcnFjX2Jhc2U7CisJdTY0IGNxY19iYXNlOworCXU2NCBlcWNfYmFzZTsKKwl1NjQgbWNfYmFzZTsKKwl1NjQgZG1wdF9iYXNlOworCXU2NCBjbXB0X2Jhc2U7CisJdTY0IG10dF9iYXNlOworCXUxNiBsb2dfbWNfZW50cnlfc3o7CisJdTE2IGxvZ19tY19oYXNoX3N6OworCXU4ICBsb2dfbnVtX3FwczsKKwl1OCAgbG9nX251bV9zcnFzOworCXU4ICBsb2dfbnVtX2NxczsKKwl1OCAgbG9nX251bV9lcXM7CisJdTggIGxvZ19yZF9wZXJfcXA7CisJdTggIGxvZ19tY190YWJsZV9zejsKKwl1OCAgbG9nX21wdF9zejsKKwl1OCAgbG9nX3Vhcl9zejsKK307CisKK3N0cnVjdCBtbHg0X2luaXRfaWJfcGFyYW0geworCWludCBwb3J0X3dpZHRoOworCWludCB2bF9jYXA7CisJaW50IG10dV9jYXA7CisJdTE2IGdpZF9jYXA7CisJdTE2IHBrZXlfY2FwOworCWludCBzZXRfZ3VpZDA7CisJdTY0IGd1aWQwOworCWludCBzZXRfbm9kZV9ndWlkOworCXU2NCBub2RlX2d1aWQ7CisJaW50IHNldF9zaV9ndWlkOworCXU2NCBzaV9ndWlkOworfTsKKworc3RydWN0IG1seDRfc2V0X2liX3BhcmFtIHsKKwlpbnQgc2V0X3NpX2d1aWQ7CisJaW50IHJlc2V0X3FrZXlfdmlvbDsKKwl1NjQgc2lfZ3VpZDsKKwl1MzIgY2FwX21hc2s7Cit9OworCitpbnQgbWx4NF9RVUVSWV9ERVZfQ0FQKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9kZXZfY2FwICpkZXZfY2FwKTsKK2ludCBtbHg0X01BUF9GQShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfaWNtICppY20pOworaW50IG1seDRfVU5NQVBfRkEoc3RydWN0IG1seDRfZGV2ICpkZXYpOworaW50IG1seDRfUlVOX0ZXKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK2ludCBtbHg0X1FVRVJZX0ZXKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK2ludCBtbHg0X1FVRVJZX0FEQVBURVIoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG1seDRfSU5JVF9IQ0Eoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2luaXRfaGNhX3BhcmFtICpwYXJhbSk7CitpbnQgbWx4NF9DTE9TRV9IQ0Eoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBwYW5pYyk7CitpbnQgbWx4NF9tYXBfY21kKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1MTYgb3AsIHN0cnVjdCBtbHg0X2ljbSAqaWNtLCB1NjQgdmlydCk7CitpbnQgbWx4NF9TRVRfSUNNX1NJWkUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHU2NCBpY21fc2l6ZSwgdTY0ICphdXhfcGFnZXMpOworaW50IG1seDRfTUFQX0lDTV9BVVgoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2ljbSAqaWNtKTsKK2ludCBtbHg0X1VOTUFQX0lDTV9BVVgoc3RydWN0IG1seDRfZGV2ICpkZXYpOworaW50IG1seDRfTk9QKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKKworI2VuZGlmIC8qIE1MWDRfRldfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9pY20uYyBiL2RyaXZlcnMvbmV0L21seDQvaWNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhNGFhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21seDQvaWNtLmMKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGxpbnV4L21seDQvY21kLmg+CisKKyNpbmNsdWRlICJtbHg0LmgiCisjaW5jbHVkZSAiaWNtLmgiCisjaW5jbHVkZSAiZncuaCIKKworLyoKKyAqIFdlIGFsbG9jYXRlIGluIGFzIGJpZyBjaHVua3MgYXMgd2UgY2FuLCB1cCB0byBhIG1heGltdW0gb2YgMjU2IEtCCisgKiBwZXIgY2h1bmsuCisgKi8KK2VudW0geworCU1MWDRfSUNNX0FMTE9DX1NJWkUJPSAxIDw8IDE4LAorCU1MWDRfVEFCTEVfQ0hVTktfU0laRQk9IDEgPDwgMTgKK307CisKK3ZvaWQgbWx4NF9mcmVlX2ljbShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfaWNtICppY20pCit7CisJc3RydWN0IG1seDRfaWNtX2NodW5rICpjaHVuaywgKnRtcDsKKwlpbnQgaTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaHVuaywgdG1wLCAmaWNtLT5jaHVua19saXN0LCBsaXN0KSB7CisJCWlmIChjaHVuay0+bnNnID4gMCkKKwkJCXBjaV91bm1hcF9zZyhkZXYtPnBkZXYsIGNodW5rLT5tZW0sIGNodW5rLT5ucGFnZXMsCisJCQkJICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCisJCWZvciAoaSA9IDA7IGkgPCBjaHVuay0+bnBhZ2VzOyArK2kpCisJCQlfX2ZyZWVfcGFnZXMoY2h1bmstPm1lbVtpXS5wYWdlLAorCQkJCSAgICAgZ2V0X29yZGVyKGNodW5rLT5tZW1baV0ubGVuZ3RoKSk7CisKKwkJa2ZyZWUoY2h1bmspOworCX0KKworCWtmcmVlKGljbSk7Cit9CisKK3N0cnVjdCBtbHg0X2ljbSAqbWx4NF9hbGxvY19pY20oc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBucGFnZXMsCisJCQkJZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IG1seDRfaWNtICppY207CisJc3RydWN0IG1seDRfaWNtX2NodW5rICpjaHVuayA9IE5VTEw7CisJaW50IGN1cl9vcmRlcjsKKworCWljbSA9IGttYWxsb2Moc2l6ZW9mICppY20sIGdmcF9tYXNrICYgfihfX0dGUF9ISUdITUVNIHwgX19HRlBfTk9XQVJOKSk7CisJaWYgKCFpY20pCisJCXJldHVybiBpY207CisKKwlpY20tPnJlZmNvdW50ID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmaWNtLT5jaHVua19saXN0KTsKKworCWN1cl9vcmRlciA9IGdldF9vcmRlcihNTFg0X0lDTV9BTExPQ19TSVpFKTsKKworCXdoaWxlIChucGFnZXMgPiAwKSB7CisJCWlmICghY2h1bmspIHsKKwkJCWNodW5rID0ga21hbGxvYyhzaXplb2YgKmNodW5rLAorCQkJCQlnZnBfbWFzayAmIH4oX19HRlBfSElHSE1FTSB8IF9fR0ZQX05PV0FSTikpOworCQkJaWYgKCFjaHVuaykKKwkJCQlnb3RvIGZhaWw7CisKKwkJCWNodW5rLT5ucGFnZXMgPSAwOworCQkJY2h1bmstPm5zZyAgICA9IDA7CisJCQlsaXN0X2FkZF90YWlsKCZjaHVuay0+bGlzdCwgJmljbS0+Y2h1bmtfbGlzdCk7CisJCX0KKworCQl3aGlsZSAoMSA8PCBjdXJfb3JkZXIgPiBucGFnZXMpCisJCQktLWN1cl9vcmRlcjsKKworCQljaHVuay0+bWVtW2NodW5rLT5ucGFnZXNdLnBhZ2UgPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgY3VyX29yZGVyKTsKKwkJaWYgKGNodW5rLT5tZW1bY2h1bmstPm5wYWdlc10ucGFnZSkgeworCQkJY2h1bmstPm1lbVtjaHVuay0+bnBhZ2VzXS5sZW5ndGggPSBQQUdFX1NJWkUgPDwgY3VyX29yZGVyOworCQkJY2h1bmstPm1lbVtjaHVuay0+bnBhZ2VzXS5vZmZzZXQgPSAwOworCisJCQlpZiAoKytjaHVuay0+bnBhZ2VzID09IE1MWDRfSUNNX0NIVU5LX0xFTikgeworCQkJCWNodW5rLT5uc2cgPSBwY2lfbWFwX3NnKGRldi0+cGRldiwgY2h1bmstPm1lbSwKKwkJCQkJCQljaHVuay0+bnBhZ2VzLAorCQkJCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisKKwkJCQlpZiAoY2h1bmstPm5zZyA8PSAwKQorCQkJCQlnb3RvIGZhaWw7CisKKwkJCQljaHVuayA9IE5VTEw7CisJCQl9CisKKwkJCW5wYWdlcyAtPSAxIDw8IGN1cl9vcmRlcjsKKwkJfSBlbHNlIHsKKwkJCS0tY3VyX29yZGVyOworCQkJaWYgKGN1cl9vcmRlciA8IDApCisJCQkJZ290byBmYWlsOworCQl9CisJfQorCisJaWYgKGNodW5rKSB7CisJCWNodW5rLT5uc2cgPSBwY2lfbWFwX3NnKGRldi0+cGRldiwgY2h1bmstPm1lbSwKKwkJCQkJY2h1bmstPm5wYWdlcywKKwkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKworCQlpZiAoY2h1bmstPm5zZyA8PSAwKQorCQkJZ290byBmYWlsOworCX0KKworCXJldHVybiBpY207CisKK2ZhaWw6CisJbWx4NF9mcmVlX2ljbShkZXYsIGljbSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9NQVBfSUNNKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pY20gKmljbSwgdTY0IHZpcnQpCit7CisJcmV0dXJuIG1seDRfbWFwX2NtZChkZXYsIE1MWDRfQ01EX01BUF9JQ00sIGljbSwgdmlydCk7Cit9CisKK2ludCBtbHg0X1VOTUFQX0lDTShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTY0IHZpcnQsIHUzMiBwYWdlX2NvdW50KQoreworCXJldHVybiBtbHg0X2NtZChkZXYsIHZpcnQsIHBhZ2VfY291bnQsIDAsIE1MWDRfQ01EX1VOTUFQX0lDTSwKKwkJCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQik7Cit9CisKK2ludCBtbHg0X01BUF9JQ01fcGFnZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTY0IGRtYV9hZGRyLCB1NjQgdmlydCkKK3sKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwlfX2JlNjQgKmluYm94OworCWludCBlcnI7CisKKwltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOworCWlmIChJU19FUlIobWFpbGJveCkpCisJCXJldHVybiBQVFJfRVJSKG1haWxib3gpOworCWluYm94ID0gbWFpbGJveC0+YnVmOworCisJaW5ib3hbMF0gPSBjcHVfdG9fYmU2NCh2aXJ0KTsKKwlpbmJveFsxXSA9IGNwdV90b19iZTY0KGRtYV9hZGRyKTsKKworCWVyciA9IG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCAxLCAwLCBNTFg0X0NNRF9NQVBfSUNNLAorCQkgICAgICAgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKKworCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOworCisJaWYgKCFlcnIpCisJCW1seDRfZGJnKGRldiwgIk1hcHBlZCBwYWdlIGF0ICVsbHggdG8gJWxseCBmb3IgSUNNLlxuIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZG1hX2FkZHIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHZpcnQpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IG1seDRfTUFQX0lDTV9BVVgoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2ljbSAqaWNtKQoreworCXJldHVybiBtbHg0X21hcF9jbWQoZGV2LCBNTFg0X0NNRF9NQVBfSUNNX0FVWCwgaWNtLCAtMSk7Cit9CisKK2ludCBtbHg0X1VOTUFQX0lDTV9BVVgoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJcmV0dXJuIG1seDRfY21kKGRldiwgMCwgMCwgMCwgTUxYNF9DTURfVU5NQVBfSUNNX0FVWCwgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKK30KKworaW50IG1seDRfdGFibGVfZ2V0KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pY21fdGFibGUgKnRhYmxlLCBpbnQgb2JqKQoreworCWludCBpID0gKG9iaiAmICh0YWJsZS0+bnVtX29iaiAtIDEpKSAvIChNTFg0X1RBQkxFX0NIVU5LX1NJWkUgLyB0YWJsZS0+b2JqX3NpemUpOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmdGFibGUtPm11dGV4KTsKKworCWlmICh0YWJsZS0+aWNtW2ldKSB7CisJCSsrdGFibGUtPmljbVtpXS0+cmVmY291bnQ7CisJCWdvdG8gb3V0OworCX0KKworCXRhYmxlLT5pY21baV0gPSBtbHg0X2FsbG9jX2ljbShkZXYsIE1MWDRfVEFCTEVfQ0hVTktfU0laRSA+PiBQQUdFX1NISUZULAorCQkJCSAgICAgICAodGFibGUtPmxvd21lbSA/IEdGUF9LRVJORUwgOiBHRlBfSElHSFVTRVIpIHwKKwkJCQkgICAgICAgX19HRlBfTk9XQVJOKTsKKwlpZiAoIXRhYmxlLT5pY21baV0pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1seDRfTUFQX0lDTShkZXYsIHRhYmxlLT5pY21baV0sIHRhYmxlLT52aXJ0ICsKKwkJCSAodTY0KSBpICogTUxYNF9UQUJMRV9DSFVOS19TSVpFKSkgeworCQltbHg0X2ZyZWVfaWNtKGRldiwgdGFibGUtPmljbVtpXSk7CisJCXRhYmxlLT5pY21baV0gPSBOVUxMOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkrK3RhYmxlLT5pY21baV0tPnJlZmNvdW50OworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ0YWJsZS0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbWx4NF90YWJsZV9wdXQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2ljbV90YWJsZSAqdGFibGUsIGludCBvYmopCit7CisJaW50IGk7CisKKwlpID0gKG9iaiAmICh0YWJsZS0+bnVtX29iaiAtIDEpKSAvIChNTFg0X1RBQkxFX0NIVU5LX1NJWkUgLyB0YWJsZS0+b2JqX3NpemUpOworCisJbXV0ZXhfbG9jaygmdGFibGUtPm11dGV4KTsKKworCWlmICgtLXRhYmxlLT5pY21baV0tPnJlZmNvdW50ID09IDApIHsKKwkJbWx4NF9VTk1BUF9JQ00oZGV2LCB0YWJsZS0+dmlydCArIGkgKiBNTFg0X1RBQkxFX0NIVU5LX1NJWkUsCisJCQkgICAgICAgTUxYNF9UQUJMRV9DSFVOS19TSVpFIC8gTUxYNF9JQ01fUEFHRV9TSVpFKTsKKwkJbWx4NF9mcmVlX2ljbShkZXYsIHRhYmxlLT5pY21baV0pOworCQl0YWJsZS0+aWNtW2ldID0gTlVMTDsKKwl9CisKKwltdXRleF91bmxvY2soJnRhYmxlLT5tdXRleCk7Cit9CisKK3ZvaWQgKm1seDRfdGFibGVfZmluZChzdHJ1Y3QgbWx4NF9pY21fdGFibGUgKnRhYmxlLCBpbnQgb2JqKQoreworCWludCBpZHgsIG9mZnNldCwgaTsKKwlzdHJ1Y3QgbWx4NF9pY21fY2h1bmsgKmNodW5rOworCXN0cnVjdCBtbHg0X2ljbSAqaWNtOworCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKKworCWlmICghdGFibGUtPmxvd21lbSkKKwkJcmV0dXJuIE5VTEw7CisKKwltdXRleF9sb2NrKCZ0YWJsZS0+bXV0ZXgpOworCisJaWR4ID0gb2JqICYgKHRhYmxlLT5udW1fb2JqIC0gMSk7CisJaWNtID0gdGFibGUtPmljbVtpZHggLyAoTUxYNF9UQUJMRV9DSFVOS19TSVpFIC8gdGFibGUtPm9ial9zaXplKV07CisJb2Zmc2V0ID0gaWR4ICUgKE1MWDRfVEFCTEVfQ0hVTktfU0laRSAvIHRhYmxlLT5vYmpfc2l6ZSk7CisKKwlpZiAoIWljbSkKKwkJZ290byBvdXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmaWNtLT5jaHVua19saXN0LCBsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBjaHVuay0+bnBhZ2VzOyArK2kpIHsKKwkJCWlmIChjaHVuay0+bWVtW2ldLmxlbmd0aCA+IG9mZnNldCkgeworCQkJCXBhZ2UgPSBjaHVuay0+bWVtW2ldLnBhZ2U7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlvZmZzZXQgLT0gY2h1bmstPm1lbVtpXS5sZW5ndGg7CisJCX0KKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJnRhYmxlLT5tdXRleCk7CisJcmV0dXJuIHBhZ2UgPyBsb3dtZW1fcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0IDogTlVMTDsKK30KKworaW50IG1seDRfdGFibGVfZ2V0X3JhbmdlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pY21fdGFibGUgKnRhYmxlLAorCQkJIGludCBzdGFydCwgaW50IGVuZCkKK3sKKwlpbnQgaW5jID0gTUxYNF9UQUJMRV9DSFVOS19TSVpFIC8gdGFibGUtPm9ial9zaXplOworCWludCBpLCBlcnI7CisKKwlmb3IgKGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkgKz0gaW5jKSB7CisJCWVyciA9IG1seDRfdGFibGVfZ2V0KGRldiwgdGFibGUsIGkpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsOworCX0KKworCXJldHVybiAwOworCitmYWlsOgorCXdoaWxlIChpID4gc3RhcnQpIHsKKwkJaSAtPSBpbmM7CisJCW1seDRfdGFibGVfcHV0KGRldiwgdGFibGUsIGkpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgbWx4NF90YWJsZV9wdXRfcmFuZ2Uoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2ljbV90YWJsZSAqdGFibGUsCisJCQkgIGludCBzdGFydCwgaW50IGVuZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSArPSBNTFg0X1RBQkxFX0NIVU5LX1NJWkUgLyB0YWJsZS0+b2JqX3NpemUpCisJCW1seDRfdGFibGVfcHV0KGRldiwgdGFibGUsIGkpOworfQorCitpbnQgbWx4NF9pbml0X2ljbV90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfaWNtX3RhYmxlICp0YWJsZSwKKwkJCXU2NCB2aXJ0LCBpbnQgb2JqX3NpemUsCWludCBub2JqLCBpbnQgcmVzZXJ2ZWQsCisJCQlpbnQgdXNlX2xvd21lbSkKK3sKKwlpbnQgb2JqX3Blcl9jaHVuazsKKwlpbnQgbnVtX2ljbTsKKwl1bnNpZ25lZCBjaHVua19zaXplOworCWludCBpOworCisJb2JqX3Blcl9jaHVuayA9IE1MWDRfVEFCTEVfQ0hVTktfU0laRSAvIG9ial9zaXplOworCW51bV9pY20gPSAobm9iaiArIG9ial9wZXJfY2h1bmsgLSAxKSAvIG9ial9wZXJfY2h1bms7CisKKwl0YWJsZS0+aWNtICAgICAgPSBrY2FsbG9jKG51bV9pY20sIHNpemVvZiAqdGFibGUtPmljbSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YWJsZS0+aWNtKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0YWJsZS0+dmlydCAgICAgPSB2aXJ0OworCXRhYmxlLT5udW1faWNtICA9IG51bV9pY207CisJdGFibGUtPm51bV9vYmogID0gbm9iajsKKwl0YWJsZS0+b2JqX3NpemUgPSBvYmpfc2l6ZTsKKwl0YWJsZS0+bG93bWVtICAgPSB1c2VfbG93bWVtOworCW11dGV4X2luaXQoJnRhYmxlLT5tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpICogTUxYNF9UQUJMRV9DSFVOS19TSVpFIDwgcmVzZXJ2ZWQgKiBvYmpfc2l6ZTsgKytpKSB7CisJCWNodW5rX3NpemUgPSBNTFg0X1RBQkxFX0NIVU5LX1NJWkU7CisJCWlmICgoaSArIDEpICogTUxYNF9UQUJMRV9DSFVOS19TSVpFID4gbm9iaiAqIG9ial9zaXplKQorCQkJY2h1bmtfc2l6ZSA9IFBBR0VfQUxJR04obm9iaiAqIG9ial9zaXplIC0gaSAqIE1MWDRfVEFCTEVfQ0hVTktfU0laRSk7CisKKwkJdGFibGUtPmljbVtpXSA9IG1seDRfYWxsb2NfaWNtKGRldiwgY2h1bmtfc2l6ZSA+PiBQQUdFX1NISUZULAorCQkJCQkgICAgICAgKHVzZV9sb3dtZW0gPyBHRlBfS0VSTkVMIDogR0ZQX0hJR0hVU0VSKSB8CisJCQkJCSAgICAgICBfX0dGUF9OT1dBUk4pOworCQlpZiAoIXRhYmxlLT5pY21baV0pCisJCQlnb3RvIGVycjsKKwkJaWYgKG1seDRfTUFQX0lDTShkZXYsIHRhYmxlLT5pY21baV0sIHZpcnQgKyBpICogTUxYNF9UQUJMRV9DSFVOS19TSVpFKSkgeworCQkJbWx4NF9mcmVlX2ljbShkZXYsIHRhYmxlLT5pY21baV0pOworCQkJdGFibGUtPmljbVtpXSA9IE5VTEw7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCS8qCisJCSAqIEFkZCBhIHJlZmVyZW5jZSB0byB0aGlzIElDTSBjaHVuayBzbyB0aGF0IGl0IG5ldmVyCisJCSAqIGdldHMgZnJlZWQgKHNpbmNlIGl0IGNvbnRhaW5zIHJlc2VydmVkIGZpcm13YXJlIG9iamVjdHMpLgorCQkgKi8KKwkJKyt0YWJsZS0+aWNtW2ldLT5yZWZjb3VudDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWZvciAoaSA9IDA7IGkgPCBudW1faWNtOyArK2kpCisJCWlmICh0YWJsZS0+aWNtW2ldKSB7CisJCQltbHg0X1VOTUFQX0lDTShkZXYsIHZpcnQgKyBpICogTUxYNF9UQUJMRV9DSFVOS19TSVpFLAorCQkJCSAgICAgICBNTFg0X1RBQkxFX0NIVU5LX1NJWkUgLyBNTFg0X0lDTV9QQUdFX1NJWkUpOworCQkJbWx4NF9mcmVlX2ljbShkZXYsIHRhYmxlLT5pY21baV0pOworCQl9CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCBtbHg0X2NsZWFudXBfaWNtX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pY21fdGFibGUgKnRhYmxlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5udW1faWNtOyArK2kpCisJCWlmICh0YWJsZS0+aWNtW2ldKSB7CisJCQltbHg0X1VOTUFQX0lDTShkZXYsIHRhYmxlLT52aXJ0ICsgaSAqIE1MWDRfVEFCTEVfQ0hVTktfU0laRSwKKwkJCQkgICAgICAgTUxYNF9UQUJMRV9DSFVOS19TSVpFIC8gTUxYNF9JQ01fUEFHRV9TSVpFKTsKKwkJCW1seDRfZnJlZV9pY20oZGV2LCB0YWJsZS0+aWNtW2ldKTsKKwkJfQorCisJa2ZyZWUodGFibGUtPmljbSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2ljbS5oIGIvZHJpdmVycy9uZXQvbWx4NC9pY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWEyMjNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9pY20uaApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgTUxYNF9JQ01fSAorI2RlZmluZSBNTFg0X0lDTV9ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2RlZmluZSBNTFg0X0lDTV9DSFVOS19MRU4JCQkJCQlcCisJKCgyNTYgLSBzaXplb2YgKHN0cnVjdCBsaXN0X2hlYWQpIC0gMiAqIHNpemVvZiAoaW50KSkgLwkJXAorCSAoc2l6ZW9mIChzdHJ1Y3Qgc2NhdHRlcmxpc3QpKSkKKworZW51bSB7CisJTUxYNF9JQ01fUEFHRV9TSElGVAk9IDEyLAorCU1MWDRfSUNNX1BBR0VfU0laRQk9IDEgPDwgTUxYNF9JQ01fUEFHRV9TSElGVCwKK307CisKK3N0cnVjdCBtbHg0X2ljbV9jaHVuayB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCWludAkJCW5wYWdlczsKKwlpbnQJCQluc2c7CisJc3RydWN0IHNjYXR0ZXJsaXN0CW1lbVtNTFg0X0lDTV9DSFVOS19MRU5dOworfTsKKworc3RydWN0IG1seDRfaWNtIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNodW5rX2xpc3Q7CisJaW50CQkJcmVmY291bnQ7Cit9OworCitzdHJ1Y3QgbWx4NF9pY21faXRlciB7CisJc3RydWN0IG1seDRfaWNtCSAgICAgICAqaWNtOworCXN0cnVjdCBtbHg0X2ljbV9jaHVuayAgKmNodW5rOworCWludAkJCXBhZ2VfaWR4OworfTsKKworc3RydWN0IG1seDRfZGV2OworCitzdHJ1Y3QgbWx4NF9pY20gKm1seDRfYWxsb2NfaWNtKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgbnBhZ2VzLCBnZnBfdCBnZnBfbWFzayk7Cit2b2lkIG1seDRfZnJlZV9pY20oc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2ljbSAqaWNtKTsKKworaW50IG1seDRfdGFibGVfZ2V0KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pY21fdGFibGUgKnRhYmxlLCBpbnQgb2JqKTsKK3ZvaWQgbWx4NF90YWJsZV9wdXQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2ljbV90YWJsZSAqdGFibGUsIGludCBvYmopOworaW50IG1seDRfdGFibGVfZ2V0X3JhbmdlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pY21fdGFibGUgKnRhYmxlLAorCQkJIGludCBzdGFydCwgaW50IGVuZCk7Cit2b2lkIG1seDRfdGFibGVfcHV0X3JhbmdlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pY21fdGFibGUgKnRhYmxlLAorCQkJICBpbnQgc3RhcnQsIGludCBlbmQpOworaW50IG1seDRfaW5pdF9pY21fdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2ljbV90YWJsZSAqdGFibGUsCisJCQl1NjQgdmlydCwgaW50IG9ial9zaXplLAlpbnQgbm9iaiwgaW50IHJlc2VydmVkLAorCQkJaW50IHVzZV9sb3dtZW0pOwordm9pZCBtbHg0X2NsZWFudXBfaWNtX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pY21fdGFibGUgKnRhYmxlKTsKK2ludCBtbHg0X3RhYmxlX2dldChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfaWNtX3RhYmxlICp0YWJsZSwgaW50IG9iaik7Cit2b2lkIG1seDRfdGFibGVfcHV0KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9pY21fdGFibGUgKnRhYmxlLCBpbnQgb2JqKTsKK3ZvaWQgKm1seDRfdGFibGVfZmluZChzdHJ1Y3QgbWx4NF9pY21fdGFibGUgKnRhYmxlLCBpbnQgb2JqKTsKK2ludCBtbHg0X3RhYmxlX2dldF9yYW5nZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfaWNtX3RhYmxlICp0YWJsZSwKKwkJCSBpbnQgc3RhcnQsIGludCBlbmQpOwordm9pZCBtbHg0X3RhYmxlX3B1dF9yYW5nZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfaWNtX3RhYmxlICp0YWJsZSwKKwkJCSAgaW50IHN0YXJ0LCBpbnQgZW5kKTsKKworc3RhdGljIGlubGluZSB2b2lkIG1seDRfaWNtX2ZpcnN0KHN0cnVjdCBtbHg0X2ljbSAqaWNtLAorCQkJCSAgc3RydWN0IG1seDRfaWNtX2l0ZXIgKml0ZXIpCit7CisJaXRlci0+aWNtICAgICAgPSBpY207CisJaXRlci0+Y2h1bmsgICAgPSBsaXN0X2VtcHR5KCZpY20tPmNodW5rX2xpc3QpID8KKwkJTlVMTCA6IGxpc3RfZW50cnkoaWNtLT5jaHVua19saXN0Lm5leHQsCisJCQkJICBzdHJ1Y3QgbWx4NF9pY21fY2h1bmssIGxpc3QpOworCWl0ZXItPnBhZ2VfaWR4ID0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWx4NF9pY21fbGFzdChzdHJ1Y3QgbWx4NF9pY21faXRlciAqaXRlcikKK3sKKwlyZXR1cm4gIWl0ZXItPmNodW5rOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWx4NF9pY21fbmV4dChzdHJ1Y3QgbWx4NF9pY21faXRlciAqaXRlcikKK3sKKwlpZiAoKytpdGVyLT5wYWdlX2lkeCA+PSBpdGVyLT5jaHVuay0+bnNnKSB7CisJCWlmIChpdGVyLT5jaHVuay0+bGlzdC5uZXh0ID09ICZpdGVyLT5pY20tPmNodW5rX2xpc3QpIHsKKwkJCWl0ZXItPmNodW5rID0gTlVMTDsKKwkJCXJldHVybjsKKwkJfQorCisJCWl0ZXItPmNodW5rID0gbGlzdF9lbnRyeShpdGVyLT5jaHVuay0+bGlzdC5uZXh0LAorCQkJCQkgc3RydWN0IG1seDRfaWNtX2NodW5rLCBsaXN0KTsKKwkJaXRlci0+cGFnZV9pZHggPSAwOworCX0KK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IG1seDRfaWNtX2FkZHIoc3RydWN0IG1seDRfaWNtX2l0ZXIgKml0ZXIpCit7CisJcmV0dXJuIHNnX2RtYV9hZGRyZXNzKCZpdGVyLT5jaHVuay0+bWVtW2l0ZXItPnBhZ2VfaWR4XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbHg0X2ljbV9zaXplKHN0cnVjdCBtbHg0X2ljbV9pdGVyICppdGVyKQoreworCXJldHVybiBzZ19kbWFfbGVuKCZpdGVyLT5jaHVuay0+bWVtW2l0ZXItPnBhZ2VfaWR4XSk7Cit9CisKK2ludCBtbHg0X1VOTUFQX0lDTShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTY0IHZpcnQsIHUzMiBwYWdlX2NvdW50KTsKK2ludCBtbHg0X01BUF9JQ01fcGFnZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTY0IGRtYV9hZGRyLCB1NjQgdmlydCk7CitpbnQgbWx4NF9NQVBfSUNNX0FVWChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfaWNtICppY20pOworaW50IG1seDRfVU5NQVBfSUNNX0FVWChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CisKKyNlbmRpZiAvKiBNTFg0X0lDTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2ludGYuYyBiL2RyaXZlcnMvbmV0L21seDQvaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ODU0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L2ludGYuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbWx4NC9kcml2ZXIuaD4KKworI2luY2x1ZGUgIm1seDQuaCIKKworc3RydWN0IG1seDRfZGV2aWNlX2NvbnRleHQgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgbWx4NF9pbnRlcmZhY2UgICppbnRmOworCXZvaWQJCSAgICAgICAqY29udGV4dDsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoaW50Zl9saXN0KTsKK3N0YXRpYyBMSVNUX0hFQUQoZGV2X2xpc3QpOworc3RhdGljIERFRklORV9NVVRFWChpbnRmX211dGV4KTsKKworc3RhdGljIHZvaWQgbWx4NF9hZGRfZGV2aWNlKHN0cnVjdCBtbHg0X2ludGVyZmFjZSAqaW50Ziwgc3RydWN0IG1seDRfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgbWx4NF9kZXZpY2VfY29udGV4dCAqZGV2X2N0eDsKKworCWRldl9jdHggPSBrbWFsbG9jKHNpemVvZiAqZGV2X2N0eCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZfY3R4KQorCQlyZXR1cm47CisKKwlkZXZfY3R4LT5pbnRmICAgID0gaW50ZjsKKwlkZXZfY3R4LT5jb250ZXh0ID0gaW50Zi0+YWRkKCZwcml2LT5kZXYpOworCisJaWYgKGRldl9jdHgtPmNvbnRleHQpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+Y3R4X2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZkZXZfY3R4LT5saXN0LCAmcHJpdi0+Y3R4X2xpc3QpOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmN0eF9sb2NrKTsKKwl9IGVsc2UKKwkJa2ZyZWUoZGV2X2N0eCk7Cit9CisKK3N0YXRpYyB2b2lkIG1seDRfcmVtb3ZlX2RldmljZShzdHJ1Y3QgbWx4NF9pbnRlcmZhY2UgKmludGYsIHN0cnVjdCBtbHg0X3ByaXYgKnByaXYpCit7CisJc3RydWN0IG1seDRfZGV2aWNlX2NvbnRleHQgKmRldl9jdHg7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldl9jdHgsICZwcml2LT5jdHhfbGlzdCwgbGlzdCkKKwkJaWYgKGRldl9jdHgtPmludGYgPT0gaW50ZikgeworCQkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+Y3R4X2xvY2spOworCQkJbGlzdF9kZWwoJmRldl9jdHgtPmxpc3QpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5jdHhfbG9jayk7CisKKwkJCWludGYtPnJlbW92ZSgmcHJpdi0+ZGV2LCBkZXZfY3R4LT5jb250ZXh0KTsKKwkJCWtmcmVlKGRldl9jdHgpOworCQkJcmV0dXJuOworCQl9Cit9CisKK2ludCBtbHg0X3JlZ2lzdGVyX2ludGVyZmFjZShzdHJ1Y3QgbWx4NF9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdjsKKworCWlmICghaW50Zi0+YWRkIHx8ICFpbnRmLT5yZW1vdmUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmaW50Zl9tdXRleCk7CisKKwlsaXN0X2FkZF90YWlsKCZpbnRmLT5saXN0LCAmaW50Zl9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHByaXYsICZkZXZfbGlzdCwgZGV2X2xpc3QpCisJCW1seDRfYWRkX2RldmljZShpbnRmLCBwcml2KTsKKworCW11dGV4X3VubG9jaygmaW50Zl9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfcmVnaXN0ZXJfaW50ZXJmYWNlKTsKKwordm9pZCBtbHg0X3VucmVnaXN0ZXJfaW50ZXJmYWNlKHN0cnVjdCBtbHg0X2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2OworCisJbXV0ZXhfbG9jaygmaW50Zl9tdXRleCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHByaXYsICZkZXZfbGlzdCwgZGV2X2xpc3QpCisJCW1seDRfcmVtb3ZlX2RldmljZShpbnRmLCBwcml2KTsKKworCWxpc3RfZGVsKCZpbnRmLT5saXN0KTsKKworCW11dGV4X3VubG9jaygmaW50Zl9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X3VucmVnaXN0ZXJfaW50ZXJmYWNlKTsKKwordm9pZCBtbHg0X2Rpc3BhdGNoX2V2ZW50KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBlbnVtIG1seDRfZXZlbnQgdHlwZSwKKwkJCSBpbnQgc3VidHlwZSwgaW50IHBvcnQpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2RldmljZV9jb250ZXh0ICpkZXZfY3R4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+Y3R4X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2X2N0eCwgJnByaXYtPmN0eF9saXN0LCBsaXN0KQorCQlpZiAoZGV2X2N0eC0+aW50Zi0+ZXZlbnQpCisJCQlkZXZfY3R4LT5pbnRmLT5ldmVudChkZXYsIGRldl9jdHgtPmNvbnRleHQsIHR5cGUsCisJCQkJCSAgICAgc3VidHlwZSwgcG9ydCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5jdHhfbG9jaywgZmxhZ3MpOworfQorCitpbnQgbWx4NF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2ludGVyZmFjZSAqaW50ZjsKKworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5jdHhfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmN0eF9sb2NrKTsKKworCW11dGV4X2xvY2soJmludGZfbXV0ZXgpOworCisJbGlzdF9hZGRfdGFpbCgmcHJpdi0+ZGV2X2xpc3QsICZkZXZfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnRmLCAmaW50Zl9saXN0LCBsaXN0KQorCQltbHg0X2FkZF9kZXZpY2UoaW50ZiwgcHJpdik7CisKKwltdXRleF91bmxvY2soJmludGZfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWx4NF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJc3RydWN0IG1seDRfaW50ZXJmYWNlICppbnRmOworCisJbXV0ZXhfbG9jaygmaW50Zl9tdXRleCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGludGYsICZpbnRmX2xpc3QsIGxpc3QpCisJCW1seDRfcmVtb3ZlX2RldmljZShpbnRmLCBwcml2KTsKKworCWxpc3RfZGVsKCZwcml2LT5kZXZfbGlzdCk7CisKKwltdXRleF91bmxvY2soJmludGZfbXV0ZXgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGI4YzBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKQEAgLTAsMCArMSw5MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPGxpbnV4L21seDQvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWx4NC9kb29yYmVsbC5oPgorCisjaW5jbHVkZSAibWx4NC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAiaWNtLmgiCisKK01PRFVMRV9BVVRIT1IoIlJvbGFuZCBEcmVpZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVsbGFub3ggQ29ubmVjdFggSENBIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKKworI2lmZGVmIENPTkZJR19NTFg0X0RFQlVHCisKK2ludCBtbHg0X2RlYnVnX2xldmVsID0gMDsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19sZXZlbCwgbWx4NF9kZWJ1Z19sZXZlbCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfbGV2ZWwsICJFbmFibGUgZGVidWcgdHJhY2luZyBpZiA+IDAiKTsKKworI2VuZGlmIC8qIENPTkZJR19NTFg0X0RFQlVHICovCisKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCitzdGF0aWMgaW50IG1zaV94OworbW9kdWxlX3BhcmFtKG1zaV94LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtc2lfeCwgImF0dGVtcHQgdG8gdXNlIE1TSS1YIGlmIG5vbnplcm8iKTsKKworI2Vsc2UgLyogQ09ORklHX1BDSV9NU0kgKi8KKworI2RlZmluZSBtc2lfeCAoMCkKKworI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCisKK3N0YXRpYyBjb25zdCBjaGFyIG1seDRfdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorCURSVl9OQU1FICI6IE1lbGxhbm94IENvbm5lY3RYIGNvcmUgZHJpdmVyIHYiCisJRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKVxuIjsKKworc3RhdGljIHN0cnVjdCBtbHg0X3Byb2ZpbGUgZGVmYXVsdF9wcm9maWxlID0geworCS5udW1fcXAJCT0gMSA8PCAxNiwKKwkubnVtX3NycQk9IDEgPDwgMTYsCisJLnJkbWFyY19wZXJfcXAJPSA0LAorCS5udW1fY3EJCT0gMSA8PCAxNiwKKwkubnVtX21jZwk9IDEgPDwgMTMsCisJLm51bV9tcHQJPSAxIDw8IDE3LAorCS5udW1fbXR0CT0gMSA8PCAyMCwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1seDRfZGV2X2NhcChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfZGV2X2NhcCAqZGV2X2NhcCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gbWx4NF9RVUVSWV9ERVZfQ0FQKGRldiwgZGV2X2NhcCk7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJRVUVSWV9ERVZfQ0FQIGNvbW1hbmQgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChkZXZfY2FwLT5taW5fcGFnZV9zeiA+IFBBR0VfU0laRSkgeworCQltbHg0X2VycihkZXYsICJIQ0EgbWluaW11bSBwYWdlIHNpemUgb2YgJWQgYmlnZ2VyIHRoYW4gIgorCQkJICJrZXJuZWwgUEFHRV9TSVpFIG9mICVsZCwgYWJvcnRpbmcuXG4iLAorCQkJIGRldl9jYXAtPm1pbl9wYWdlX3N6LCBQQUdFX1NJWkUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKGRldl9jYXAtPm51bV9wb3J0cyA+IE1MWDRfTUFYX1BPUlRTKSB7CisJCW1seDRfZXJyKGRldiwgIkhDQSBoYXMgJWQgcG9ydHMsIGJ1dCB3ZSBvbmx5IHN1cHBvcnQgJWQsICIKKwkJCSAiYWJvcnRpbmcuXG4iLAorCQkJIGRldl9jYXAtPm51bV9wb3J0cywgTUxYNF9NQVhfUE9SVFMpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoZGV2X2NhcC0+dWFyX3NpemUgPiBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMikpIHsKKwkJbWx4NF9lcnIoZGV2LCAiSENBIHJlcG9ydGVkIFVBUiBzaXplIG9mIDB4JXggYmlnZ2VyIHRoYW4gIgorCQkJICJQQ0kgcmVzb3VyY2UgMiBzaXplIG9mIDB4JWxseCwgYWJvcnRpbmcuXG4iLAorCQkJIGRldl9jYXAtPnVhcl9zaXplLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAyKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldi0+Y2Fwcy5udW1fcG9ydHMJICAgICA9IGRldl9jYXAtPm51bV9wb3J0czsKKwlkZXYtPmNhcHMubnVtX3VhcnMJICAgICA9IGRldl9jYXAtPnVhcl9zaXplIC8gUEFHRV9TSVpFOworCWRldi0+Y2Fwcy52bF9jYXAJICAgICA9IGRldl9jYXAtPm1heF92bDsKKwlkZXYtPmNhcHMubXR1X2NhcAkgICAgID0gZGV2X2NhcC0+bWF4X210dTsKKwlkZXYtPmNhcHMuZ2lkX3RhYmxlX2xlbgkgICAgID0gZGV2X2NhcC0+bWF4X2dpZHM7CisJZGV2LT5jYXBzLnBrZXlfdGFibGVfbGVuICAgICA9IGRldl9jYXAtPm1heF9wa2V5czsKKwlkZXYtPmNhcHMubG9jYWxfY2FfYWNrX2RlbGF5ID0gZGV2X2NhcC0+bG9jYWxfY2FfYWNrX2RlbGF5OworCWRldi0+Y2Fwcy5iZl9yZWdfc2l6ZQkgICAgID0gZGV2X2NhcC0+YmZfcmVnX3NpemU7CisJZGV2LT5jYXBzLmJmX3JlZ3NfcGVyX3BhZ2UgICA9IGRldl9jYXAtPmJmX3JlZ3NfcGVyX3BhZ2U7CisJZGV2LT5jYXBzLm1heF9zcV9zZwkgICAgID0gZGV2X2NhcC0+bWF4X3NxX3NnOworCWRldi0+Y2Fwcy5tYXhfcnFfc2cJICAgICA9IGRldl9jYXAtPm1heF9ycV9zZzsKKwlkZXYtPmNhcHMubWF4X3dxZXMJICAgICA9IGRldl9jYXAtPm1heF9xcF9zejsKKwlkZXYtPmNhcHMubWF4X3FwX2luaXRfcmRtYSAgID0gZGV2X2NhcC0+bWF4X3JlcXVlc3Rlcl9wZXJfcXA7CisJZGV2LT5jYXBzLnJlc2VydmVkX3FwcwkgICAgID0gZGV2X2NhcC0+cmVzZXJ2ZWRfcXBzOworCWRldi0+Y2Fwcy5tYXhfc3JxX3dxZXMJICAgICA9IGRldl9jYXAtPm1heF9zcnFfc3o7CisJZGV2LT5jYXBzLm1heF9zcnFfc2dlCSAgICAgPSBkZXZfY2FwLT5tYXhfcnFfc2cgLSAxOworCWRldi0+Y2Fwcy5yZXNlcnZlZF9zcnFzCSAgICAgPSBkZXZfY2FwLT5yZXNlcnZlZF9zcnFzOworCWRldi0+Y2Fwcy5tYXhfc3FfZGVzY19zeiAgICAgPSBkZXZfY2FwLT5tYXhfc3FfZGVzY19zejsKKwlkZXYtPmNhcHMubWF4X3JxX2Rlc2Nfc3ogICAgID0gZGV2X2NhcC0+bWF4X3JxX2Rlc2Nfc3o7CisJZGV2LT5jYXBzLm51bV9xcF9wZXJfbWdtICAgICA9IE1MWDRfUVBfUEVSX01HTTsKKwkvKgorCSAqIFN1YnRyYWN0IDEgZnJvbSB0aGUgbGltaXQgYmVjYXVzZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEKKwkgKiBzcGFyZSBDUUUgc28gdGhlIEhDQSBIVyBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuCisJICogZW1wdHkgQ1EgYW5kIGEgZnVsbCBDUS4KKwkgKi8KKwlkZXYtPmNhcHMubWF4X2NxZXMJICAgICA9IGRldl9jYXAtPm1heF9jcV9zeiAtIDE7CisJZGV2LT5jYXBzLnJlc2VydmVkX2NxcwkgICAgID0gZGV2X2NhcC0+cmVzZXJ2ZWRfY3FzOworCWRldi0+Y2Fwcy5yZXNlcnZlZF9lcXMJICAgICA9IGRldl9jYXAtPnJlc2VydmVkX2VxczsKKwlkZXYtPmNhcHMucmVzZXJ2ZWRfbXR0cwkgICAgID0gZGV2X2NhcC0+cmVzZXJ2ZWRfbXR0czsKKwlkZXYtPmNhcHMucmVzZXJ2ZWRfbXJ3cwkgICAgID0gZGV2X2NhcC0+cmVzZXJ2ZWRfbXJ3czsKKwlkZXYtPmNhcHMucmVzZXJ2ZWRfdWFycwkgICAgID0gZGV2X2NhcC0+cmVzZXJ2ZWRfdWFyczsKKwlkZXYtPmNhcHMucmVzZXJ2ZWRfcGRzCSAgICAgPSBkZXZfY2FwLT5yZXNlcnZlZF9wZHM7CisJZGV2LT5jYXBzLnBvcnRfd2lkdGhfY2FwICAgICA9IGRldl9jYXAtPm1heF9wb3J0X3dpZHRoOworCWRldi0+Y2Fwcy5tdHRfZW50cnlfc3oJICAgICA9IE1MWDRfTVRUX0VOVFJZX1BFUl9TRUcgKiBkZXZfY2FwLT5tdHRfZW50cnlfc3o7CisJZGV2LT5jYXBzLnBhZ2Vfc2l6ZV9jYXAJICAgICA9IH4odTMyKSAoZGV2X2NhcC0+bWluX3BhZ2Vfc3ogLSAxKTsKKwlkZXYtPmNhcHMuZmxhZ3MJCSAgICAgPSBkZXZfY2FwLT5mbGFnczsKKwlkZXYtPmNhcHMuc3RhdF9yYXRlX3N1cHBvcnQgID0gZGV2X2NhcC0+c3RhdF9yYXRlX3N1cHBvcnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWx4NF9sb2FkX2Z3KHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlpbnQgZXJyOworCisJcHJpdi0+ZncuZndfaWNtID0gbWx4NF9hbGxvY19pY20oZGV2LCBwcml2LT5mdy5md19wYWdlcywKKwkJCQkJIEdGUF9ISUdIVVNFUiB8IF9fR0ZQX05PV0FSTik7CisJaWYgKCFwcml2LT5mdy5md19pY20pIHsKKwkJbWx4NF9lcnIoZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgRlcgYXJlYSwgYWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZXJyID0gbWx4NF9NQVBfRkEoZGV2LCBwcml2LT5mdy5md19pY20pOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiTUFQX0ZBIGNvbW1hbmQgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWVyciA9IG1seDRfUlVOX0ZXKGRldik7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJSVU5fRlcgY29tbWFuZCBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX3VubWFwX2ZhOworCX0KKworCXJldHVybiAwOworCitlcnJfdW5tYXBfZmE6CisJbWx4NF9VTk1BUF9GQShkZXYpOworCitlcnJfZnJlZToKKwltbHg0X2ZyZWVfaWNtKGRldiwgcHJpdi0+ZncuZndfaWNtKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtbHg0X2luaXRfY21wdF90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTY0IGNtcHRfYmFzZSwKKwkJCQkJICBpbnQgY21wdF9lbnRyeV9zeikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJaW50IGVycjsKKworCWVyciA9IG1seDRfaW5pdF9pY21fdGFibGUoZGV2LCAmcHJpdi0+cXBfdGFibGUuY21wdF90YWJsZSwKKwkJCQkgIGNtcHRfYmFzZSArCisJCQkJICAoKHU2NCkgKE1MWDRfQ01QVF9UWVBFX1FQICoKKwkJCQkJICBjbXB0X2VudHJ5X3N6KSA8PCBNTFg0X0NNUFRfU0hJRlQpLAorCQkJCSAgY21wdF9lbnRyeV9zeiwgZGV2LT5jYXBzLm51bV9xcHMsCisJCQkJICBkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKworCWVyciA9IG1seDRfaW5pdF9pY21fdGFibGUoZGV2LCAmcHJpdi0+c3JxX3RhYmxlLmNtcHRfdGFibGUsCisJCQkJICBjbXB0X2Jhc2UgKworCQkJCSAgKCh1NjQpIChNTFg0X0NNUFRfVFlQRV9TUlEgKgorCQkJCQkgIGNtcHRfZW50cnlfc3opIDw8IE1MWDRfQ01QVF9TSElGVCksCisJCQkJICBjbXB0X2VudHJ5X3N6LCBkZXYtPmNhcHMubnVtX3NycXMsCisJCQkJICBkZXYtPmNhcHMucmVzZXJ2ZWRfc3JxcywgMCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcXA7CisKKwllcnIgPSBtbHg0X2luaXRfaWNtX3RhYmxlKGRldiwgJnByaXYtPmNxX3RhYmxlLmNtcHRfdGFibGUsCisJCQkJICBjbXB0X2Jhc2UgKworCQkJCSAgKCh1NjQpIChNTFg0X0NNUFRfVFlQRV9DUSAqCisJCQkJCSAgY21wdF9lbnRyeV9zeikgPDwgTUxYNF9DTVBUX1NISUZUKSwKKwkJCQkgIGNtcHRfZW50cnlfc3osIGRldi0+Y2Fwcy5udW1fY3FzLAorCQkJCSAgZGV2LT5jYXBzLnJlc2VydmVkX2NxcywgMCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfc3JxOworCisJZXJyID0gbWx4NF9pbml0X2ljbV90YWJsZShkZXYsICZwcml2LT5lcV90YWJsZS5jbXB0X3RhYmxlLAorCQkJCSAgY21wdF9iYXNlICsKKwkJCQkgICgodTY0KSAoTUxYNF9DTVBUX1RZUEVfRVEgKgorCQkJCQkgIGNtcHRfZW50cnlfc3opIDw8IE1MWDRfQ01QVF9TSElGVCksCisJCQkJICBjbXB0X2VudHJ5X3N6LAorCQkJCSAgcm91bmR1cF9wb3dfb2ZfdHdvKE1MWDRfTlVNX0VRICsKKwkJCQkJCSAgICAgZGV2LT5jYXBzLnJlc2VydmVkX2VxcyksCisJCQkJICBNTFg0X05VTV9FUSArIGRldi0+Y2Fwcy5yZXNlcnZlZF9lcXMsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2NxOworCisJcmV0dXJuIDA7CisKK2Vycl9jcToKKwltbHg0X2NsZWFudXBfaWNtX3RhYmxlKGRldiwgJnByaXYtPmNxX3RhYmxlLmNtcHRfdGFibGUpOworCitlcnJfc3JxOgorCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+c3JxX3RhYmxlLmNtcHRfdGFibGUpOworCitlcnJfcXA6CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5xcF90YWJsZS5jbXB0X3RhYmxlKTsKKworZXJyOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1seDRfaW5pdF9pY20oc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCQkJICAgc3RydWN0IG1seDRfZGV2X2NhcCAqZGV2X2NhcCwKKwkJCQkgICBzdHJ1Y3QgbWx4NF9pbml0X2hjYV9wYXJhbSAqaW5pdF9oY2EsCisJCQkJICAgdTY0IGljbV9zaXplKQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwl1NjQgYXV4X3BhZ2VzOworCWludCBlcnI7CisKKwllcnIgPSBtbHg0X1NFVF9JQ01fU0laRShkZXYsIGljbV9zaXplLCAmYXV4X3BhZ2VzKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIlNFVF9JQ01fU0laRSBjb21tYW5kIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltbHg0X2RiZyhkZXYsICIlbGxkIEtCIG9mIEhDQSBjb250ZXh0IHJlcXVpcmVzICVsbGQgS0IgYXV4IG1lbW9yeS5cbiIsCisJCSAodW5zaWduZWQgbG9uZyBsb25nKSBpY21fc2l6ZSA+PiAxMCwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGF1eF9wYWdlcyA8PCAyKTsKKworCXByaXYtPmZ3LmF1eF9pY20gPSBtbHg0X2FsbG9jX2ljbShkZXYsIGF1eF9wYWdlcywKKwkJCQkJICBHRlBfSElHSFVTRVIgfCBfX0dGUF9OT1dBUk4pOworCWlmICghcHJpdi0+ZncuYXV4X2ljbSkgeworCQltbHg0X2VycihkZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBhdXggbWVtb3J5LCBhYm9ydGluZy5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwllcnIgPSBtbHg0X01BUF9JQ01fQVVYKGRldiwgcHJpdi0+ZncuYXV4X2ljbSk7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJNQVBfSUNNX0FVWCBjb21tYW5kIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfZnJlZV9hdXg7CisJfQorCisJZXJyID0gbWx4NF9pbml0X2NtcHRfdGFibGUoZGV2LCBpbml0X2hjYS0+Y21wdF9iYXNlLCBkZXZfY2FwLT5jbXB0X2VudHJ5X3N6KTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBtYXAgY01QVCBjb250ZXh0IG1lbW9yeSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfdW5tYXBfYXV4OworCX0KKworCWVyciA9IG1seDRfbWFwX2VxX2ljbShkZXYsIGluaXRfaGNhLT5lcWNfYmFzZSk7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gbWFwIEVRIGNvbnRleHQgbWVtb3J5LCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl91bm1hcF9jbXB0OworCX0KKworCWVyciA9IG1seDRfaW5pdF9pY21fdGFibGUoZGV2LCAmcHJpdi0+bXJfdGFibGUubXR0X3RhYmxlLAorCQkJCSAgaW5pdF9oY2EtPm10dF9iYXNlLAorCQkJCSAgZGV2LT5jYXBzLm10dF9lbnRyeV9zeiwKKwkJCQkgIGRldi0+Y2Fwcy5udW1fbXR0X3NlZ3MsCisJCQkJICBkZXYtPmNhcHMucmVzZXJ2ZWRfbXR0cywgMSk7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gbWFwIE1UVCBjb250ZXh0IG1lbW9yeSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfdW5tYXBfZXE7CisJfQorCisJZXJyID0gbWx4NF9pbml0X2ljbV90YWJsZShkZXYsICZwcml2LT5tcl90YWJsZS5kbXB0X3RhYmxlLAorCQkJCSAgaW5pdF9oY2EtPmRtcHRfYmFzZSwKKwkJCQkgIGRldl9jYXAtPmRtcHRfZW50cnlfc3osCisJCQkJICBkZXYtPmNhcHMubnVtX21wdHMsCisJCQkJICBkZXYtPmNhcHMucmVzZXJ2ZWRfbXJ3cywgMSk7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gbWFwIGRNUFQgY29udGV4dCBtZW1vcnksIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX3VubWFwX210dDsKKwl9CisKKwllcnIgPSBtbHg0X2luaXRfaWNtX3RhYmxlKGRldiwgJnByaXYtPnFwX3RhYmxlLnFwX3RhYmxlLAorCQkJCSAgaW5pdF9oY2EtPnFwY19iYXNlLAorCQkJCSAgZGV2X2NhcC0+cXBjX2VudHJ5X3N6LAorCQkJCSAgZGV2LT5jYXBzLm51bV9xcHMsCisJCQkJICBkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzLCAwKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBtYXAgUVAgY29udGV4dCBtZW1vcnksIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX3VubWFwX2RtcHQ7CisJfQorCisJZXJyID0gbWx4NF9pbml0X2ljbV90YWJsZShkZXYsICZwcml2LT5xcF90YWJsZS5hdXhjX3RhYmxlLAorCQkJCSAgaW5pdF9oY2EtPmF1eGNfYmFzZSwKKwkJCQkgIGRldl9jYXAtPmF1eF9lbnRyeV9zeiwKKwkJCQkgIGRldi0+Y2Fwcy5udW1fcXBzLAorCQkJCSAgZGV2LT5jYXBzLnJlc2VydmVkX3FwcywgMCk7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gbWFwIEFVWEMgY29udGV4dCBtZW1vcnksIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX3VubWFwX3FwOworCX0KKworCWVyciA9IG1seDRfaW5pdF9pY21fdGFibGUoZGV2LCAmcHJpdi0+cXBfdGFibGUuYWx0Y190YWJsZSwKKwkJCQkgIGluaXRfaGNhLT5hbHRjX2Jhc2UsCisJCQkJICBkZXZfY2FwLT5hbHRjX2VudHJ5X3N6LAorCQkJCSAgZGV2LT5jYXBzLm51bV9xcHMsCisJCQkJICBkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzLCAwKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBtYXAgQUxUQyBjb250ZXh0IG1lbW9yeSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfdW5tYXBfYXV4YzsKKwl9CisKKwllcnIgPSBtbHg0X2luaXRfaWNtX3RhYmxlKGRldiwgJnByaXYtPnFwX3RhYmxlLnJkbWFyY190YWJsZSwKKwkJCQkgIGluaXRfaGNhLT5yZG1hcmNfYmFzZSwKKwkJCQkgIGRldl9jYXAtPnJkbWFyY19lbnRyeV9zeiA8PCBwcml2LT5xcF90YWJsZS5yZG1hcmNfc2hpZnQsCisJCQkJICBkZXYtPmNhcHMubnVtX3FwcywKKwkJCQkgIGRldi0+Y2Fwcy5yZXNlcnZlZF9xcHMsIDApOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIG1hcCBSRE1BUkMgY29udGV4dCBtZW1vcnksIGFib3J0aW5nXG4iKTsKKwkJZ290byBlcnJfdW5tYXBfYWx0YzsKKwl9CisKKwllcnIgPSBtbHg0X2luaXRfaWNtX3RhYmxlKGRldiwgJnByaXYtPmNxX3RhYmxlLnRhYmxlLAorCQkJCSAgaW5pdF9oY2EtPmNxY19iYXNlLAorCQkJCSAgZGV2X2NhcC0+Y3FjX2VudHJ5X3N6LAorCQkJCSAgZGV2LT5jYXBzLm51bV9jcXMsCisJCQkJICBkZXYtPmNhcHMucmVzZXJ2ZWRfY3FzLCAwKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBtYXAgQ1EgY29udGV4dCBtZW1vcnksIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX3VubWFwX3JkbWFyYzsKKwl9CisKKwllcnIgPSBtbHg0X2luaXRfaWNtX3RhYmxlKGRldiwgJnByaXYtPnNycV90YWJsZS50YWJsZSwKKwkJCQkgIGluaXRfaGNhLT5zcnFjX2Jhc2UsCisJCQkJICBkZXZfY2FwLT5zcnFfZW50cnlfc3osCisJCQkJICBkZXYtPmNhcHMubnVtX3NycXMsCisJCQkJICBkZXYtPmNhcHMucmVzZXJ2ZWRfc3JxcywgMCk7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gbWFwIFNSUSBjb250ZXh0IG1lbW9yeSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfdW5tYXBfY3E7CisJfQorCisJLyoKKwkgKiBJdCdzIG5vdCBzdHJpY3RseSByZXF1aXJlZCwgYnV0IGZvciBzaW1wbGljaXR5IGp1c3QgbWFwIHRoZQorCSAqIHdob2xlIG11bHRpY2FzdCBncm91cCB0YWJsZSBub3cuICBUaGUgdGFibGUgaXNuJ3QgdmVyeSBiaWcKKwkgKiBhbmQgaXQncyBhIGxvdCBlYXNpZXIgdGhhbiB0cnlpbmcgdG8gdHJhY2sgcmVmIGNvdW50cy4KKwkgKi8KKwllcnIgPSBtbHg0X2luaXRfaWNtX3RhYmxlKGRldiwgJnByaXYtPm1jZ190YWJsZS50YWJsZSwKKwkJCQkgIGluaXRfaGNhLT5tY19iYXNlLCBNTFg0X01HTV9FTlRSWV9TSVpFLAorCQkJCSAgZGV2LT5jYXBzLm51bV9tZ21zICsgZGV2LT5jYXBzLm51bV9hbWdtcywKKwkJCQkgIGRldi0+Y2Fwcy5udW1fbWdtcyArIGRldi0+Y2Fwcy5udW1fYW1nbXMsCisJCQkJICAwKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBtYXAgTUNHIGNvbnRleHQgbWVtb3J5LCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl91bm1hcF9zcnE7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl91bm1hcF9zcnE6CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5zcnFfdGFibGUudGFibGUpOworCitlcnJfdW5tYXBfY3E6CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5jcV90YWJsZS50YWJsZSk7CisKK2Vycl91bm1hcF9yZG1hcmM6CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5xcF90YWJsZS5yZG1hcmNfdGFibGUpOworCitlcnJfdW5tYXBfYWx0YzoKKwltbHg0X2NsZWFudXBfaWNtX3RhYmxlKGRldiwgJnByaXYtPnFwX3RhYmxlLmFsdGNfdGFibGUpOworCitlcnJfdW5tYXBfYXV4YzoKKwltbHg0X2NsZWFudXBfaWNtX3RhYmxlKGRldiwgJnByaXYtPnFwX3RhYmxlLmF1eGNfdGFibGUpOworCitlcnJfdW5tYXBfcXA6CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5xcF90YWJsZS5xcF90YWJsZSk7CisKK2Vycl91bm1hcF9kbXB0OgorCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+bXJfdGFibGUuZG1wdF90YWJsZSk7CisKK2Vycl91bm1hcF9tdHQ6CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5tcl90YWJsZS5tdHRfdGFibGUpOworCitlcnJfdW5tYXBfZXE6CisJbWx4NF91bm1hcF9lcV9pY20oZGV2KTsKKworZXJyX3VubWFwX2NtcHQ6CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5lcV90YWJsZS5jbXB0X3RhYmxlKTsKKwltbHg0X2NsZWFudXBfaWNtX3RhYmxlKGRldiwgJnByaXYtPmNxX3RhYmxlLmNtcHRfdGFibGUpOworCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+c3JxX3RhYmxlLmNtcHRfdGFibGUpOworCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+cXBfdGFibGUuY21wdF90YWJsZSk7CisKK2Vycl91bm1hcF9hdXg6CisJbWx4NF9VTk1BUF9JQ01fQVVYKGRldik7CisKK2Vycl9mcmVlX2F1eDoKKwltbHg0X2ZyZWVfaWNtKGRldiwgcHJpdi0+ZncuYXV4X2ljbSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2ZyZWVfaWNtcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisKKwltbHg0X2NsZWFudXBfaWNtX3RhYmxlKGRldiwgJnByaXYtPm1jZ190YWJsZS50YWJsZSk7CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5zcnFfdGFibGUudGFibGUpOworCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+Y3FfdGFibGUudGFibGUpOworCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+cXBfdGFibGUucmRtYXJjX3RhYmxlKTsKKwltbHg0X2NsZWFudXBfaWNtX3RhYmxlKGRldiwgJnByaXYtPnFwX3RhYmxlLmFsdGNfdGFibGUpOworCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+cXBfdGFibGUuYXV4Y190YWJsZSk7CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5xcF90YWJsZS5xcF90YWJsZSk7CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5tcl90YWJsZS5kbXB0X3RhYmxlKTsKKwltbHg0X2NsZWFudXBfaWNtX3RhYmxlKGRldiwgJnByaXYtPm1yX3RhYmxlLm10dF90YWJsZSk7CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5lcV90YWJsZS5jbXB0X3RhYmxlKTsKKwltbHg0X2NsZWFudXBfaWNtX3RhYmxlKGRldiwgJnByaXYtPmNxX3RhYmxlLmNtcHRfdGFibGUpOworCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+c3JxX3RhYmxlLmNtcHRfdGFibGUpOworCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+cXBfdGFibGUuY21wdF90YWJsZSk7CisJbWx4NF91bm1hcF9lcV9pY20oZGV2KTsKKworCW1seDRfVU5NQVBfSUNNX0FVWChkZXYpOworCW1seDRfZnJlZV9pY20oZGV2LCBwcml2LT5mdy5hdXhfaWNtKTsKK30KKworc3RhdGljIHZvaWQgbWx4NF9jbG9zZV9oY2Eoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJbWx4NF9DTE9TRV9IQ0EoZGV2LCAwKTsKKwltbHg0X2ZyZWVfaWNtcyhkZXYpOworCW1seDRfVU5NQVBfRkEoZGV2KTsKKwltbHg0X2ZyZWVfaWNtKGRldiwgbWx4NF9wcml2KGRldiktPmZ3LmZ3X2ljbSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1seDRfaW5pdF9oY2Eoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfcHJpdgkgICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJc3RydWN0IG1seDRfYWRhcHRlcgkgICBhZGFwdGVyOworCXN0cnVjdCBtbHg0X2Rldl9jYXAJICAgZGV2X2NhcDsKKwlzdHJ1Y3QgbWx4NF9wcm9maWxlCSAgIHByb2ZpbGU7CisJc3RydWN0IG1seDRfaW5pdF9oY2FfcGFyYW0gaW5pdF9oY2E7CisJdTY0IGljbV9zaXplOworCWludCBlcnI7CisKKwllcnIgPSBtbHg0X1FVRVJZX0ZXKGRldik7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJRVUVSWV9GVyBjb21tYW5kIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBtbHg0X2xvYWRfZncoZGV2KTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBzdGFydCBGVywgYWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBtbHg0X2Rldl9jYXAoZGV2LCAmZGV2X2NhcCk7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJRVUVSWV9ERVZfQ0FQIGNvbW1hbmQgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9zdG9wX2Z3OworCX0KKworCXByb2ZpbGUgPSBkZWZhdWx0X3Byb2ZpbGU7CisKKwlpY21fc2l6ZSA9IG1seDRfbWFrZV9wcm9maWxlKGRldiwgJnByb2ZpbGUsICZkZXZfY2FwLCAmaW5pdF9oY2EpOworCWlmICgobG9uZyBsb25nKSBpY21fc2l6ZSA8IDApIHsKKwkJZXJyID0gaWNtX3NpemU7CisJCWdvdG8gZXJyX3N0b3BfZnc7CisJfQorCisJaW5pdF9oY2EubG9nX3Vhcl9zeiA9IGlsb2cyKGRldi0+Y2Fwcy5udW1fdWFycyk7CisKKwllcnIgPSBtbHg0X2luaXRfaWNtKGRldiwgJmRldl9jYXAsICZpbml0X2hjYSwgaWNtX3NpemUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3N0b3BfZnc7CisKKwllcnIgPSBtbHg0X0lOSVRfSENBKGRldiwgJmluaXRfaGNhKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIklOSVRfSENBIGNvbW1hbmQgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9mcmVlX2ljbTsKKwl9CisKKwllcnIgPSBtbHg0X1FVRVJZX0FEQVBURVIoZGV2LCAmYWRhcHRlcik7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJRVUVSWV9BREFQVEVSIGNvbW1hbmQgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9jbG9zZTsKKwl9CisKKwlwcml2LT5lcV90YWJsZS5pbnRhX3BpbiA9IGFkYXB0ZXIuaW50YV9waW47CisJcHJpdi0+cmV2X2lkCQk9IGFkYXB0ZXIucmV2aXNpb25faWQ7CisJbWVtY3B5KHByaXYtPmJvYXJkX2lkLCBhZGFwdGVyLmJvYXJkX2lkLCBzaXplb2YgcHJpdi0+Ym9hcmRfaWQpOworCisJcmV0dXJuIDA7CisKK2Vycl9jbG9zZToKKwltbHg0X2Nsb3NlX2hjYShkZXYpOworCitlcnJfZnJlZV9pY206CisJbWx4NF9mcmVlX2ljbXMoZGV2KTsKKworZXJyX3N0b3BfZnc6CisJbWx4NF9VTk1BUF9GQShkZXYpOworCW1seDRfZnJlZV9pY20oZGV2LCBwcml2LT5mdy5md19pY20pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWx4NF9zZXR1cF9oY2Eoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCWludCBlcnI7CisKKwllcnIgPSBtbHg0X2luaXRfdWFyX3RhYmxlKGRldik7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSAiCisJCQkgInVzZXIgYWNjZXNzIHJlZ2lvbiB0YWJsZSwgYWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBtbHg0X3Vhcl9hbGxvYyhkZXYsICZwcml2LT5kcml2ZXJfdWFyKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBkcml2ZXIgYWNjZXNzIHJlZ2lvbiwgIgorCQkJICJhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl91YXJfdGFibGVfZnJlZTsKKwl9CisKKwlwcml2LT5rYXIgPSBpb3JlbWFwKHByaXYtPmRyaXZlcl91YXIucGZuIDw8IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CisJaWYgKCFwcml2LT5rYXIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiQ291bGRuJ3QgbWFwIGtlcm5lbCBhY2Nlc3MgcmVnaW9uLCAiCisJCQkgImFib3J0aW5nLlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3Vhcl9mcmVlOworCX0KKworCWVyciA9IG1seDRfaW5pdF9wZF90YWJsZShkZXYpOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgIgorCQkJICJwcm90ZWN0aW9uIGRvbWFpbiB0YWJsZSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfa2FyX3VubWFwOworCX0KKworCWVyciA9IG1seDRfaW5pdF9tcl90YWJsZShkZXYpOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgIgorCQkJICJtZW1vcnkgcmVnaW9uIHRhYmxlLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9wZF90YWJsZV9mcmVlOworCX0KKworCW1seDRfbWFwX2NhdGFzX2J1ZihkZXYpOworCisJZXJyID0gbWx4NF9pbml0X2VxX3RhYmxlKGRldik7CisJaWYgKGVycikgeworCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSAiCisJCQkgImV2ZW50IHF1ZXVlIHRhYmxlLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9jYXRhc19idWY7CisJfQorCisJZXJyID0gbWx4NF9jbWRfdXNlX2V2ZW50cyhkZXYpOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIHN3aXRjaCB0byBldmVudC1kcml2ZW4gIgorCQkJICJmaXJtd2FyZSBjb21tYW5kcywgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfZXFfdGFibGVfZnJlZTsKKwl9CisKKwllcnIgPSBtbHg0X05PUChkZXYpOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiTk9QIGNvbW1hbmQgZmFpbGVkIHRvIGdlbmVyYXRlIGludGVycnVwdCAiCisJCQkgIihJUlEgJWQpLCBhYm9ydGluZy5cbiIsCisJCQkgcHJpdi0+ZXFfdGFibGUuZXFbTUxYNF9FUV9BU1lOQ10uaXJxKTsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBNTFg0X0ZMQUdfTVNJX1gpCisJCQltbHg0X2VycihkZXYsICJUcnkgYWdhaW4gd2l0aCBNU0ktWCBkaXNhYmxlZC5cbiIpOworCQllbHNlCisJCQltbHg0X2VycihkZXYsICJCSU9TIG9yIEFDUEkgaW50ZXJydXB0IHJvdXRpbmcgcHJvYmxlbT9cbiIpOworCisJCWdvdG8gZXJyX2NtZF9wb2xsOworCX0KKworCW1seDRfZGJnKGRldiwgIk5PUCBjb21tYW5kIElSUSB0ZXN0IHBhc3NlZFxuIik7CisKKwllcnIgPSBtbHg0X2luaXRfY3FfdGFibGUoZGV2KTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplICIKKwkJCSAiY29tcGxldGlvbiBxdWV1ZSB0YWJsZSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfY21kX3BvbGw7CisJfQorCisJZXJyID0gbWx4NF9pbml0X3NycV90YWJsZShkZXYpOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgIgorCQkJICJzaGFyZWQgcmVjZWl2ZSBxdWV1ZSB0YWJsZSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfY3FfdGFibGVfZnJlZTsKKwl9CisKKwllcnIgPSBtbHg0X2luaXRfcXBfdGFibGUoZGV2KTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplICIKKwkJCSAicXVldWUgcGFpciB0YWJsZSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfc3JxX3RhYmxlX2ZyZWU7CisJfQorCisJZXJyID0gbWx4NF9pbml0X21jZ190YWJsZShkZXYpOworCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgIgorCQkJICJtdWx0aWNhc3QgZ3JvdXAgdGFibGUsIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX3FwX3RhYmxlX2ZyZWU7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9xcF90YWJsZV9mcmVlOgorCW1seDRfY2xlYW51cF9xcF90YWJsZShkZXYpOworCitlcnJfc3JxX3RhYmxlX2ZyZWU6CisJbWx4NF9jbGVhbnVwX3NycV90YWJsZShkZXYpOworCitlcnJfY3FfdGFibGVfZnJlZToKKwltbHg0X2NsZWFudXBfY3FfdGFibGUoZGV2KTsKKworZXJyX2NtZF9wb2xsOgorCW1seDRfY21kX3VzZV9wb2xsaW5nKGRldik7CisKK2Vycl9lcV90YWJsZV9mcmVlOgorCW1seDRfY2xlYW51cF9lcV90YWJsZShkZXYpOworCitlcnJfY2F0YXNfYnVmOgorCW1seDRfdW5tYXBfY2F0YXNfYnVmKGRldik7CisJbWx4NF9jbGVhbnVwX21yX3RhYmxlKGRldik7CisKK2Vycl9wZF90YWJsZV9mcmVlOgorCW1seDRfY2xlYW51cF9wZF90YWJsZShkZXYpOworCitlcnJfa2FyX3VubWFwOgorCWlvdW5tYXAocHJpdi0+a2FyKTsKKworZXJyX3Vhcl9mcmVlOgorCW1seDRfdWFyX2ZyZWUoZGV2LCAmcHJpdi0+ZHJpdmVyX3Vhcik7CisKK2Vycl91YXJfdGFibGVfZnJlZToKKwltbHg0X2NsZWFudXBfdWFyX3RhYmxlKGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IG1seDRfZW5hYmxlX21zaV94KHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbXNpeF9lbnRyeSBlbnRyaWVzW01MWDRfTlVNX0VRXTsKKwlpbnQgZXJyOworCWludCBpOworCisJaWYgKG1zaV94KSB7CisJCWZvciAoaSA9IDA7IGkgPCBNTFg0X05VTV9FUTsgKytpKQorCQkJZW50cmllc1tpXS5lbnRyeSA9IGk7CisKKwkJZXJyID0gcGNpX2VuYWJsZV9tc2l4KGRldi0+cGRldiwgZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSk7CisJCWlmIChlcnIpIHsKKwkJCWlmIChlcnIgPiAwKQorCQkJCW1seDRfaW5mbyhkZXYsICJPbmx5ICVkIE1TSS1YIHZlY3RvcnMgYXZhaWxhYmxlLCAiCisJCQkJCSAgIm5vdCB1c2luZyBNU0ktWFxuIiwgZXJyKTsKKwkJCWdvdG8gbm9fbXNpOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IE1MWDRfTlVNX0VROyArK2kpCisJCQlwcml2LT5lcV90YWJsZS5lcVtpXS5pcnEgPSBlbnRyaWVzW2ldLnZlY3RvcjsKKworCQlkZXYtPmZsYWdzIHw9IE1MWDRfRkxBR19NU0lfWDsKKwkJcmV0dXJuOworCX0KKworbm9fbXNpOgorCWZvciAoaSA9IDA7IGkgPCBNTFg0X05VTV9FUTsgKytpKQorCQlwcml2LT5lcV90YWJsZS5lcVtpXS5pcnEgPSBkZXYtPnBkZXYtPmlycTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWx4NF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RhdGljIGludCBtbHg0X3ZlcnNpb25fcHJpbnRlZDsKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2OworCXN0cnVjdCBtbHg0X2RldiAqZGV2OworCWludCBlcnI7CisKKwlpZiAoIW1seDRfdmVyc2lvbl9wcmludGVkKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIiwgbWx4NF92ZXJzaW9uKTsKKwkJKyttbHg0X3ZlcnNpb25fcHJpbnRlZDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiSW5pdGlhbGl6aW5nICVzXG4iLAorCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgIgorCQkJImFib3J0aW5nLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgQkFScy4gIFdlIGV4cGVjdCAwOiAxTUIsIDI6IDhNQiwgNDogRERSIChtYXkgbm90CisJICogYmUgcHJlc2VudCkKKwkgKi8KKwlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX01FTSkgfHwKKwkgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSAhPSAxIDw8IDIwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk1pc3NpbmcgRENTLCBhYm9ydGluZy5cbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9kaXNhYmxlX3BkZXY7CisJfQorCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSAmIElPUkVTT1VSQ0VfTUVNKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJNaXNzaW5nIFVBUiwgYWJvcnRpbmcuXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZGlzYWJsZV9wZGV2OworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAwLCBEUlZfTkFNRSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVxdWVzdCBjb250cm9sIHJlZ2lvbiwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfZGlzYWJsZV9wZGV2OworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAyLCBEUlZfTkFNRSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVxdWVzdCBVQVIgcmVnaW9uLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9yZWxlYXNlX2JhcjA7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKKwlpZiAoZXJyKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJXYXJuaW5nOiBjb3VsZG4ndCBzZXQgNjQtYml0IFBDSSBETUEgbWFzay5cbiIpOworCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3Qgc2V0IFBDSSBETUEgbWFzaywgYWJvcnRpbmcuXG4iKTsKKwkJCWdvdG8gZXJyX3JlbGVhc2VfYmFyMjsKKwkJfQorCX0KKwllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spOworCWlmIChlcnIpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIldhcm5pbmc6IGNvdWxkbid0IHNldCA2NC1iaXQgIgorCQkJICJjb25zaXN0ZW50IFBDSSBETUEgbWFzay5cbiIpOworCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCBzZXQgY29uc2lzdGVudCBQQ0kgRE1BIG1hc2ssICIKKwkJCQkiYWJvcnRpbmcuXG4iKTsKKwkJCWdvdG8gZXJyX3JlbGVhc2VfYmFyMjsKKwkJfQorCX0KKworCXByaXYgPSBremFsbG9jKHNpemVvZiAqcHJpdiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkRldmljZSBzdHJ1Y3QgYWxsb2MgZmFpbGVkLCAiCisJCQkiYWJvcnRpbmcuXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVsZWFzZV9iYXIyOworCX0KKworCWRldiAgICAgICA9ICZwcml2LT5kZXY7CisJZGV2LT5wZGV2ID0gcGRldjsKKworCS8qCisJICogTm93IHJlc2V0IHRoZSBIQ0EgYmVmb3JlIHdlIHRvdWNoIHRoZSBQQ0kgY2FwYWJpbGl0aWVzIG9yCisJICogYXR0ZW1wdCBhIGZpcm13YXJlIGNvbW1hbmQsIHNpbmNlIGEgYm9vdCBST00gbWF5IGhhdmUgbGVmdAorCSAqIHRoZSBIQ0EgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLgorCSAqLworCWVyciA9IG1seDRfcmVzZXQoZGV2KTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byByZXNldCBIQ0EsIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX2ZyZWVfZGV2OworCX0KKworCW1seDRfZW5hYmxlX21zaV94KGRldik7CisKKwlpZiAobWx4NF9jbWRfaW5pdChkZXYpKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0IGNvbW1hbmQgaW50ZXJmYWNlLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9mcmVlX2RldjsKKwl9CisKKwllcnIgPSBtbHg0X2luaXRfaGNhKGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfY21kOworCisJZXJyID0gbWx4NF9zZXR1cF9oY2EoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9jbG9zZTsKKworCWVyciA9IG1seDRfcmVnaXN0ZXJfZGV2aWNlKGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfY2xlYW51cDsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCisJcmV0dXJuIDA7CisKK2Vycl9jbGVhbnVwOgorCW1seDRfY2xlYW51cF9tY2dfdGFibGUoZGV2KTsKKwltbHg0X2NsZWFudXBfcXBfdGFibGUoZGV2KTsKKwltbHg0X2NsZWFudXBfc3JxX3RhYmxlKGRldik7CisJbWx4NF9jbGVhbnVwX2NxX3RhYmxlKGRldik7CisJbWx4NF9jbWRfdXNlX3BvbGxpbmcoZGV2KTsKKwltbHg0X2NsZWFudXBfZXFfdGFibGUoZGV2KTsKKworCW1seDRfdW5tYXBfY2F0YXNfYnVmKGRldik7CisKKwltbHg0X2NsZWFudXBfbXJfdGFibGUoZGV2KTsKKwltbHg0X2NsZWFudXBfcGRfdGFibGUoZGV2KTsKKwltbHg0X2NsZWFudXBfdWFyX3RhYmxlKGRldik7CisKK2Vycl9jbG9zZToKKwltbHg0X2Nsb3NlX2hjYShkZXYpOworCitlcnJfY21kOgorCW1seDRfY21kX2NsZWFudXAoZGV2KTsKKworZXJyX2ZyZWVfZGV2OgorCWlmIChkZXYtPmZsYWdzICYgTUxYNF9GTEFHX01TSV9YKQorCQlwY2lfZGlzYWJsZV9tc2l4KHBkZXYpOworCisJa2ZyZWUocHJpdik7CisKK2Vycl9yZWxlYXNlX2JhcjI6CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDIpOworCitlcnJfcmVsZWFzZV9iYXIwOgorCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKKworZXJyX2Rpc2FibGVfcGRldjoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBtbHg0X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1seDRfZGV2ICAqZGV2ICA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJaW50IHA7CisKKwlpZiAoZGV2KSB7CisJCW1seDRfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKKworCQlmb3IgKHAgPSAxOyBwIDw9IGRldi0+Y2Fwcy5udW1fcG9ydHM7ICsrcCkKKwkJCW1seDRfQ0xPU0VfUE9SVChkZXYsIHApOworCisJCW1seDRfY2xlYW51cF9tY2dfdGFibGUoZGV2KTsKKwkJbWx4NF9jbGVhbnVwX3FwX3RhYmxlKGRldik7CisJCW1seDRfY2xlYW51cF9zcnFfdGFibGUoZGV2KTsKKwkJbWx4NF9jbGVhbnVwX2NxX3RhYmxlKGRldik7CisJCW1seDRfY21kX3VzZV9wb2xsaW5nKGRldik7CisJCW1seDRfY2xlYW51cF9lcV90YWJsZShkZXYpOworCisJCW1seDRfdW5tYXBfY2F0YXNfYnVmKGRldik7CisKKwkJbWx4NF9jbGVhbnVwX21yX3RhYmxlKGRldik7CisJCW1seDRfY2xlYW51cF9wZF90YWJsZShkZXYpOworCisJCWlvdW5tYXAocHJpdi0+a2FyKTsKKwkJbWx4NF91YXJfZnJlZShkZXYsICZwcml2LT5kcml2ZXJfdWFyKTsKKwkJbWx4NF9jbGVhbnVwX3Vhcl90YWJsZShkZXYpOworCQltbHg0X2Nsb3NlX2hjYShkZXYpOworCQltbHg0X2NtZF9jbGVhbnVwKGRldik7CisKKwkJaWYgKGRldi0+ZmxhZ3MgJiBNTFg0X0ZMQUdfTVNJX1gpCisJCQlwY2lfZGlzYWJsZV9tc2l4KHBkZXYpOworCisJCWtmcmVlKHByaXYpOworCQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMik7CisJCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWx4NF9wY2lfdGFibGVbXSA9IHsKKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDYzNDApIH0sIC8qIE1UMjU0MDggIkhlcm1vbiIgU0RSICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzRhKSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIEREUiAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4NjM1NCkgfSwgLyogTVQyNTQwOCAiSGVybW9uIiBRRFIgKi8KKwl7IDAsIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtbHg0X3BjaV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtbHg0X2RyaXZlciA9IHsKKwkubmFtZQkJPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUJPSBtbHg0X3BjaV90YWJsZSwKKwkucHJvYmUJCT0gbWx4NF9pbml0X29uZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1seDRfcmVtb3ZlX29uZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1seDRfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtbHg0X2RyaXZlcik7CisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbWx4NF9jbGVhbnVwKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtbHg0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1seDRfaW5pdCk7Cittb2R1bGVfZXhpdChtbHg0X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tY2cuYyBiL2RyaXZlcnMvbmV0L21seDQvbWNnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyMDI0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWNnLmMKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8bGludXgvbWx4NC9jbWQuaD4KKworI2luY2x1ZGUgIm1seDQuaCIKKworc3RydWN0IG1seDRfbWdtIHsKKwlfX2JlMzIJCQluZXh0X2dpZF9pbmRleDsKKwlfX2JlMzIJCQltZW1iZXJzX2NvdW50OworCXUzMgkJCXJlc2VydmVkWzJdOworCXU4CQkJZ2lkWzE2XTsKKwlfX2JlMzIJCQlxcFtNTFg0X1FQX1BFUl9NR01dOworfTsKKworc3RhdGljIGNvbnN0IHU4IHplcm9fZ2lkWzE2XTsJLyogYXV0b21hdGljYWxseSBpbml0aWFsaXplZCB0byAwICovCisKK3N0YXRpYyBpbnQgbWx4NF9SRUFEX01DRyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IGluZGV4LAorCQkJIHN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94KQoreworCXJldHVybiBtbHg0X2NtZF9ib3goZGV2LCAwLCBtYWlsYm94LT5kbWEsIGluZGV4LCAwLCBNTFg0X0NNRF9SRUFEX01DRywKKwkJCSAgICBNTFg0X0NNRF9USU1FX0NMQVNTX0EpOworfQorCitzdGF0aWMgaW50IG1seDRfV1JJVEVfTUNHKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgaW5kZXgsCisJCQkgIHN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94KQoreworCXJldHVybiBtbHg0X2NtZChkZXYsIG1haWxib3gtPmRtYSwgaW5kZXgsIDAsIE1MWDRfQ01EX1dSSVRFX01DRywKKwkJCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQSk7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9NR0lEX0hBU0goc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94LAorCQkJICB1MTYgKmhhc2gpCit7CisJdTY0IGltbTsKKwlpbnQgZXJyOworCisJZXJyID0gbWx4NF9jbWRfaW1tKGRldiwgbWFpbGJveC0+ZG1hLCAmaW1tLCAwLCAwLCBNTFg0X0NNRF9NR0lEX0hBU0gsCisJCQkgICBNTFg0X0NNRF9USU1FX0NMQVNTX0EpOworCisJaWYgKCFlcnIpCisJCSpoYXNoID0gaW1tOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENhbGxlciBtdXN0IGhvbGQgTUNHIHRhYmxlIHNlbWFwaG9yZS4gIGdpZCBhbmQgbWdtIHBhcmFtZXRlcnMgbXVzdAorICogYmUgcHJvcGVybHkgYWxpZ25lZCBmb3IgY29tbWFuZCBpbnRlcmZhY2UuCisgKgorICogIFJldHVybnMgMCB1bmxlc3MgYSBmaXJtd2FyZSBjb21tYW5kIGVycm9yIG9jY3Vycy4KKyAqCisgKiBJZiBHSUQgaXMgZm91bmQgaW4gTUdNIG9yIE1HTSBpcyBlbXB0eSwgKmluZGV4ID0gKmhhc2gsICpwcmV2ID0gLTEKKyAqIGFuZCAqbWdtIGhvbGRzIE1HTSBlbnRyeS4KKyAqCisgKiBpZiBHSUQgaXMgZm91bmQgaW4gQU1HTSwgKmluZGV4ID0gaW5kZXggaW4gQU1HTSwgKnByZXYgPSBpbmRleCBvZgorICogcHJldmlvdXMgZW50cnkgaW4gaGFzaCBjaGFpbiBhbmQgKm1nbSBob2xkcyBBTUdNIGVudHJ5LgorICoKKyAqIElmIG5vIEFNR00gZXhpc3RzIGZvciBnaXZlbiBnaWQsICppbmRleCA9IC0xLCAqcHJldiA9IGluZGV4IG9mIGxhc3QKKyAqIGVudHJ5IGluIGhhc2ggY2hhaW4gYW5kICptZ20gaG9sZHMgZW5kIG9mIGhhc2ggY2hhaW4uCisgKi8KK3N0YXRpYyBpbnQgZmluZF9tZ20oc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCSAgICB1OCAqZ2lkLCBzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWdtX21haWxib3gsCisJCSAgICB1MTYgKmhhc2gsIGludCAqcHJldiwgaW50ICppbmRleCkKK3sKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwlzdHJ1Y3QgbWx4NF9tZ20gKm1nbSA9IG1nbV9tYWlsYm94LT5idWY7CisJdTggKm1naWQ7CisJaW50IGVycjsKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CisJaWYgKElTX0VSUihtYWlsYm94KSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWdpZCA9IG1haWxib3gtPmJ1ZjsKKworCW1lbWNweShtZ2lkLCBnaWQsIDE2KTsKKworCWVyciA9IG1seDRfTUdJRF9IQVNIKGRldiwgbWFpbGJveCwgaGFzaCk7CisJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICgwKQorCQltbHg0X2RiZyhkZXYsICJIYXNoIGZvciAlMDR4OiUwNHg6JTA0eDolMDR4OiIKKwkJCSAgIiUwNHg6JTA0eDolMDR4OiUwNHggaXMgJTA0eFxuIiwKKwkJCSAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgZ2lkKVswXSksCisJCQkgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIGdpZClbMV0pLAorCQkJICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSBnaWQpWzJdKSwKKwkJCSAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgZ2lkKVszXSksCisJCQkgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIGdpZClbNF0pLAorCQkJICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSBnaWQpWzVdKSwKKwkJCSAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgZ2lkKVs2XSksCisJCQkgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIGdpZClbN10pLAorCQkJICAqaGFzaCk7CisKKwkqaW5kZXggPSAqaGFzaDsKKwkqcHJldiAgPSAtMTsKKworCWRvIHsKKwkJZXJyID0gbWx4NF9SRUFEX01DRyhkZXYsICppbmRleCwgbWdtX21haWxib3gpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAoIW1lbWNtcChtZ20tPmdpZCwgemVyb19naWQsIDE2KSkgeworCQkJaWYgKCppbmRleCAhPSAqaGFzaCkgeworCQkJCW1seDRfZXJyKGRldiwgIkZvdW5kIHplcm8gTUdJRCBpbiBBTUdNLlxuIik7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCX0KKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlpZiAoIW1lbWNtcChtZ20tPmdpZCwgZ2lkLCAxNikpCisJCQlyZXR1cm4gZXJyOworCisJCSpwcmV2ID0gKmluZGV4OworCQkqaW5kZXggPSBiZTMyX3RvX2NwdShtZ20tPm5leHRfZ2lkX2luZGV4KSA+PiA2OworCX0gd2hpbGUgKCppbmRleCk7CisKKwkqaW5kZXggPSAtMTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbWx4NF9tdWx0aWNhc3RfYXR0YWNoKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9xcCAqcXAsIHU4IGdpZFsxNl0pCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OworCXN0cnVjdCBtbHg0X21nbSAqbWdtOworCXUzMiBtZW1iZXJzX2NvdW50OworCXUxNiBoYXNoOworCWludCBpbmRleCwgcHJldjsKKwlpbnQgbGluayA9IDA7CisJaW50IGk7CisJaW50IGVycjsKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CisJaWYgKElTX0VSUihtYWlsYm94KSkKKwkJcmV0dXJuIFBUUl9FUlIobWFpbGJveCk7CisJbWdtID0gbWFpbGJveC0+YnVmOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bWNnX3RhYmxlLm11dGV4KTsKKworCWVyciA9IGZpbmRfbWdtKGRldiwgZ2lkLCBtYWlsYm94LCAmaGFzaCwgJnByZXYsICZpbmRleCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlpZiAoaW5kZXggIT0gLTEpIHsKKwkJaWYgKCFtZW1jbXAobWdtLT5naWQsIHplcm9fZ2lkLCAxNikpCisJCQltZW1jcHkobWdtLT5naWQsIGdpZCwgMTYpOworCX0gZWxzZSB7CisJCWxpbmsgPSAxOworCisJCWluZGV4ID0gbWx4NF9iaXRtYXBfYWxsb2MoJnByaXYtPm1jZ190YWJsZS5iaXRtYXApOworCQlpZiAoaW5kZXggPT0gLTEpIHsKKwkJCW1seDRfZXJyKGRldiwgIk5vIEFNR00gZW50cmllcyBsZWZ0XG4iKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQlpbmRleCArPSBkZXYtPmNhcHMubnVtX21nbXM7CisKKwkJZXJyID0gbWx4NF9SRUFEX01DRyhkZXYsIGluZGV4LCBtYWlsYm94KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCisJCW1lbXNldChtZ20sIDAsIHNpemVvZiAqbWdtKTsKKwkJbWVtY3B5KG1nbS0+Z2lkLCBnaWQsIDE2KTsKKwl9CisKKwltZW1iZXJzX2NvdW50ID0gYmUzMl90b19jcHUobWdtLT5tZW1iZXJzX2NvdW50KTsKKwlpZiAobWVtYmVyc19jb3VudCA9PSBNTFg0X1FQX1BFUl9NR00pIHsKKwkJbWx4NF9lcnIoZGV2LCAiTUdNIGF0IGluZGV4ICV4IGlzIGZ1bGwuXG4iLCBpbmRleCk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtZW1iZXJzX2NvdW50OyArK2kpCisJCWlmIChtZ20tPnFwW2ldID09IGNwdV90b19iZTMyKHFwLT5xcG4pKSB7CisJCQltbHg0X2RiZyhkZXYsICJRUCAlMDZ4IGFscmVhZHkgYSBtZW1iZXIgb2YgTUdNXG4iLCBxcC0+cXBuKTsKKwkJCWVyciA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCisJbWdtLT5xcFttZW1iZXJzX2NvdW50KytdID0gY3B1X3RvX2JlMzIocXAtPnFwbik7CisJbWdtLT5tZW1iZXJzX2NvdW50ICAgICAgID0gY3B1X3RvX2JlMzIobWVtYmVyc19jb3VudCk7CisKKwllcnIgPSBtbHg0X1dSSVRFX01DRyhkZXYsIGluZGV4LCBtYWlsYm94KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWlmICghbGluaykKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtbHg0X1JFQURfTUNHKGRldiwgcHJldiwgbWFpbGJveCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwltZ20tPm5leHRfZ2lkX2luZGV4ID0gY3B1X3RvX2JlMzIoaW5kZXggPDwgNik7CisKKwllcnIgPSBtbHg0X1dSSVRFX01DRyhkZXYsIHByZXYsIG1haWxib3gpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCitvdXQ6CisJaWYgKGVyciAmJiBsaW5rICYmIGluZGV4ICE9IC0xKSB7CisJCWlmIChpbmRleCA8IGRldi0+Y2Fwcy5udW1fbWdtcykKKwkJCW1seDRfd2FybihkZXYsICJHb3QgQU1HTSBpbmRleCAlZCA8ICVkIiwKKwkJCQkgIGluZGV4LCBkZXYtPmNhcHMubnVtX21nbXMpOworCQllbHNlCisJCQltbHg0X2JpdG1hcF9mcmVlKCZwcml2LT5tY2dfdGFibGUuYml0bWFwLAorCQkJCQkgaW5kZXggLSBkZXYtPmNhcHMubnVtX21nbXMpOworCX0KKwltdXRleF91bmxvY2soJnByaXYtPm1jZ190YWJsZS5tdXRleCk7CisKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LCBtYWlsYm94KTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9tdWx0aWNhc3RfYXR0YWNoKTsKKworaW50IG1seDRfbXVsdGljYXN0X2RldGFjaChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfcXAgKnFwLCB1OCBnaWRbMTZdKQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwlzdHJ1Y3QgbWx4NF9tZ20gKm1nbTsKKwl1MzIgbWVtYmVyc19jb3VudDsKKwl1MTYgaGFzaDsKKwlpbnQgcHJldiwgaW5kZXg7CisJaW50IGksIGxvYzsKKwlpbnQgZXJyOworCisJbWFpbGJveCA9IG1seDRfYWxsb2NfY21kX21haWxib3goZGV2KTsKKwlpZiAoSVNfRVJSKG1haWxib3gpKQorCQlyZXR1cm4gUFRSX0VSUihtYWlsYm94KTsKKwltZ20gPSBtYWlsYm94LT5idWY7CisKKwltdXRleF9sb2NrKCZwcml2LT5tY2dfdGFibGUubXV0ZXgpOworCisJZXJyID0gZmluZF9tZ20oZGV2LCBnaWQsIG1haWxib3gsICZoYXNoLCAmcHJldiwgJmluZGV4KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWlmIChpbmRleCA9PSAtMSkgeworCQltbHg0X2VycihkZXYsICJNR0lEICUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eCAiCisJCQkgICJub3QgZm91bmRcbiIsCisJCQkgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIGdpZClbMF0pLAorCQkJICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSBnaWQpWzFdKSwKKwkJCSAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgZ2lkKVsyXSksCisJCQkgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIGdpZClbM10pLAorCQkJICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSBnaWQpWzRdKSwKKwkJCSAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgZ2lkKVs1XSksCisJCQkgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIGdpZClbNl0pLAorCQkJICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSBnaWQpWzddKSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCW1lbWJlcnNfY291bnQgPSBiZTMyX3RvX2NwdShtZ20tPm1lbWJlcnNfY291bnQpOworCWZvciAobG9jID0gLTEsIGkgPSAwOyBpIDwgbWVtYmVyc19jb3VudDsgKytpKQorCQlpZiAobWdtLT5xcFtpXSA9PSBjcHVfdG9fYmUzMihxcC0+cXBuKSkKKwkJCWxvYyA9IGk7CisKKwlpZiAobG9jID09IC0xKSB7CisJCW1seDRfZXJyKGRldiwgIlFQICUwNnggbm90IGZvdW5kIGluIE1HTVxuIiwgcXAtPnFwbik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCisJbWdtLT5tZW1iZXJzX2NvdW50ID0gY3B1X3RvX2JlMzIoLS1tZW1iZXJzX2NvdW50KTsKKwltZ20tPnFwW2xvY10gICAgICAgPSBtZ20tPnFwW2kgLSAxXTsKKwltZ20tPnFwW2kgLSAxXSAgICAgPSAwOworCisJZXJyID0gbWx4NF9XUklURV9NQ0coZGV2LCBpbmRleCwgbWFpbGJveCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlpZiAoaSAhPSAxKQorCQlnb3RvIG91dDsKKworCWlmIChwcmV2ID09IC0xKSB7CisJCS8qIFJlbW92ZSBlbnRyeSBmcm9tIE1HTSAqLworCQlpbnQgYW1nbV9pbmRleCA9IGJlMzJfdG9fY3B1KG1nbS0+bmV4dF9naWRfaW5kZXgpID4+IDY7CisJCWlmIChhbWdtX2luZGV4KSB7CisJCQllcnIgPSBtbHg0X1JFQURfTUNHKGRldiwgYW1nbV9pbmRleCwgbWFpbGJveCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCQl9IGVsc2UKKwkJCW1lbXNldChtZ20tPmdpZCwgMCwgMTYpOworCisJCWVyciA9IG1seDRfV1JJVEVfTUNHKGRldiwgaW5kZXgsIG1haWxib3gpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKGFtZ21faW5kZXgpIHsKKwkJCWlmIChhbWdtX2luZGV4IDwgZGV2LT5jYXBzLm51bV9tZ21zKQorCQkJCW1seDRfd2FybihkZXYsICJNR00gZW50cnkgJWQgaGFkIEFNR00gaW5kZXggJWQgPCAlZCIsCisJCQkJCSAgaW5kZXgsIGFtZ21faW5kZXgsIGRldi0+Y2Fwcy5udW1fbWdtcyk7CisJCQllbHNlCisJCQkJbWx4NF9iaXRtYXBfZnJlZSgmcHJpdi0+bWNnX3RhYmxlLmJpdG1hcCwKKwkJCQkJCSBhbWdtX2luZGV4IC0gZGV2LT5jYXBzLm51bV9tZ21zKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFJlbW92ZSBlbnRyeSBmcm9tIEFNR00gKi8KKwkJaW50IGN1cl9uZXh0X2luZGV4ID0gYmUzMl90b19jcHUobWdtLT5uZXh0X2dpZF9pbmRleCkgPj4gNjsKKwkJZXJyID0gbWx4NF9SRUFEX01DRyhkZXYsIHByZXYsIG1haWxib3gpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisKKwkJbWdtLT5uZXh0X2dpZF9pbmRleCA9IGNwdV90b19iZTMyKGN1cl9uZXh0X2luZGV4IDw8IDYpOworCisJCWVyciA9IG1seDRfV1JJVEVfTUNHKGRldiwgcHJldiwgbWFpbGJveCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQlpZiAoaW5kZXggPCBkZXYtPmNhcHMubnVtX21nbXMpCisJCQltbHg0X3dhcm4oZGV2LCAiZW50cnkgJWQgaGFkIG5leHQgQU1HTSBpbmRleCAlZCA8ICVkIiwKKwkJCQkgIHByZXYsIGluZGV4LCBkZXYtPmNhcHMubnVtX21nbXMpOworCQllbHNlCisJCQltbHg0X2JpdG1hcF9mcmVlKCZwcml2LT5tY2dfdGFibGUuYml0bWFwLAorCQkJCQkgaW5kZXggLSBkZXYtPmNhcHMubnVtX21nbXMpOworCX0KKworb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bWNnX3RhYmxlLm11dGV4KTsKKworCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X211bHRpY2FzdF9kZXRhY2gpOworCitpbnQgX19kZXZpbml0IG1seDRfaW5pdF9tY2dfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCWludCBlcnI7CisKKwllcnIgPSBtbHg0X2JpdG1hcF9pbml0KCZwcml2LT5tY2dfdGFibGUuYml0bWFwLAorCQkJICAgICAgIGRldi0+Y2Fwcy5udW1fYW1nbXMsIGRldi0+Y2Fwcy5udW1fYW1nbXMgLSAxLCAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbXV0ZXhfaW5pdCgmcHJpdi0+bWNnX3RhYmxlLm11dGV4KTsKKworCXJldHVybiAwOworfQorCit2b2lkIG1seDRfY2xlYW51cF9tY2dfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJbWx4NF9iaXRtYXBfY2xlYW51cCgmbWx4NF9wcml2KGRldiktPm1jZ190YWJsZS5iaXRtYXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmggYi9kcml2ZXJzL25ldC9tbHg0L21seDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDNiNmQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKQEAgLTAsMCArMSwzNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2LCAyMDA3IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBWb2x0YWlyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBNTFg0X0gKKyNkZWZpbmUgTUxYNF9ICisKKyNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbHg0L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21seDQvZG9vcmJlbGwuaD4KKworI2RlZmluZSBEUlZfTkFNRQkibWx4NF9jb3JlIgorI2RlZmluZSBQRlgJCURSVl9OQU1FICI6ICIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMDEiCisjZGVmaW5lIERSVl9SRUxEQVRFCSJNYXkgMSwgMjAwNyIKKworZW51bSB7CisJTUxYNF9IQ1JfQkFTRQkJPSAweDgwNjgwLAorCU1MWDRfSENSX1NJWkUJCT0gMHgwMDAxYywKKwlNTFg0X0NMUl9JTlRfU0laRQk9IDB4MDAwMDgKK307CisKK2VudW0geworCU1MWDRfQk9BUkRfSURfTEVOCT0gNjQKK307CisKK2VudW0geworCU1MWDRfTUdNX0VOVFJZX1NJWkUJPSAgMHg0MCwKKwlNTFg0X1FQX1BFUl9NR00JCT0gNCAqIChNTFg0X01HTV9FTlRSWV9TSVpFIC8gMTYgLSAyKSwKKwlNTFg0X01UVF9FTlRSWV9QRVJfU0VHCT0gOAorfTsKKworZW51bSB7CisJTUxYNF9FUV9BU1lOQywKKwlNTFg0X0VRX0NPTVAsCisJTUxYNF9FUV9DQVRBUywKKwlNTFg0X05VTV9FUQorfTsKKworZW51bSB7CisJTUxYNF9OVU1fUERTCQk9IDEgPDwgMTUKK307CisKK2VudW0geworCU1MWDRfQ01QVF9UWVBFX1FQCT0gMCwKKwlNTFg0X0NNUFRfVFlQRV9TUlEJPSAxLAorCU1MWDRfQ01QVF9UWVBFX0NRCT0gMiwKKwlNTFg0X0NNUFRfVFlQRV9FUQk9IDMsCisJTUxYNF9DTVBUX05VTV9UWVBFCit9OworCitlbnVtIHsKKwlNTFg0X0NNUFRfU0hJRlQJCT0gMjQsCisJTUxYNF9OVU1fQ01QVFMJCT0gTUxYNF9DTVBUX05VTV9UWVBFIDw8IE1MWDRfQ01QVF9TSElGVAorfTsKKworI2lmZGVmIENPTkZJR19NTFg0X0RFQlVHCitleHRlcm4gaW50IG1seDRfZGVidWdfbGV2ZWw7CisKKyNkZWZpbmUgbWx4NF9kYmcobWRldiwgZm9ybWF0LCBhcmcuLi4pCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAobWx4NF9kZWJ1Z19sZXZlbCkJCQkJCVwKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJm1kZXYtPnBkZXYtPmRldiwgZm9ybWF0LCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworI2Vsc2UgLyogQ09ORklHX01MWDRfREVCVUcgKi8KKworI2RlZmluZSBtbHg0X2RiZyhtZGV2LCBmb3JtYXQsIGFyZy4uLikgZG8geyAodm9pZCkgbWRldjsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIENPTkZJR19NTFg0X0RFQlVHICovCisKKyNkZWZpbmUgbWx4NF9lcnIobWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKKwlkZXZfZXJyKCZtZGV2LT5wZGV2LT5kZXYsIGZvcm1hdCwgIyMgYXJnKQorI2RlZmluZSBtbHg0X2luZm8obWRldiwgZm9ybWF0LCBhcmcuLi4pIFwKKwlkZXZfaW5mbygmbWRldi0+cGRldi0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgbWx4NF93YXJuKG1kZXYsIGZvcm1hdCwgYXJnLi4uKSBcCisJZGV2X3dhcm4oJm1kZXYtPnBkZXYtPmRldiwgZm9ybWF0LCAjIyBhcmcpCisKK3N0cnVjdCBtbHg0X2JpdG1hcCB7CisJdTMyCQkJbGFzdDsKKwl1MzIJCQl0b3A7CisJdTMyCQkJbWF4OworCXUzMgkJCW1hc2s7CisJc3BpbmxvY2tfdAkJbG9jazsKKwl1bnNpZ25lZCBsb25nCSAgICAgICAqdGFibGU7Cit9OworCitzdHJ1Y3QgbWx4NF9idWRkeSB7CisJdW5zaWduZWQgbG9uZwkgICAgICAqKmJpdHM7CisJaW50CQkJbWF4X29yZGVyOworCXNwaW5sb2NrX3QJCWxvY2s7Cit9OworCitzdHJ1Y3QgbWx4NF9pY207CisKK3N0cnVjdCBtbHg0X2ljbV90YWJsZSB7CisJdTY0CQkJdmlydDsKKwlpbnQJCQludW1faWNtOworCWludAkJCW51bV9vYmo7CisJaW50CQkJb2JqX3NpemU7CisJaW50CQkJbG93bWVtOworCXN0cnVjdCBtdXRleAkJbXV0ZXg7CisJc3RydWN0IG1seDRfaWNtCSAgICAgICoqaWNtOworfTsKKworc3RydWN0IG1seDRfZXEgeworCXN0cnVjdCBtbHg0X2RldgkgICAgICAgKmRldjsKKwl2b2lkIF9faW9tZW0JICAgICAgICpkb29yYmVsbDsKKwlpbnQJCQllcW47CisJdTMyCQkJY29uc19pbmRleDsKKwl1MTYJCQlpcnE7CisJdTE2CQkJaGF2ZV9pcnE7CisJaW50CQkJbmVudDsKKwlzdHJ1Y3QgbWx4NF9idWZfbGlzdCAgICpwYWdlX2xpc3Q7CisJc3RydWN0IG1seDRfbXR0CQltdHQ7Cit9OworCitzdHJ1Y3QgbWx4NF9wcm9maWxlIHsKKwlpbnQJCQludW1fcXA7CisJaW50CQkJcmRtYXJjX3Blcl9xcDsKKwlpbnQJCQludW1fc3JxOworCWludAkJCW51bV9jcTsKKwlpbnQJCQludW1fbWNnOworCWludAkJCW51bV9tcHQ7CisJaW50CQkJbnVtX210dDsKK307CisKK3N0cnVjdCBtbHg0X2Z3IHsKKwl1NjQJCQljbHJfaW50X2Jhc2U7CisJdTY0CQkJY2F0YXNfb2Zmc2V0OworCXN0cnVjdCBtbHg0X2ljbQkgICAgICAgKmZ3X2ljbTsKKwlzdHJ1Y3QgbWx4NF9pY20JICAgICAgICphdXhfaWNtOworCXUzMgkJCWNhdGFzX3NpemU7CisJdTE2CQkJZndfcGFnZXM7CisJdTgJCQljbHJfaW50X2JhcjsKKwl1OAkJCWNhdGFzX2JhcjsKK307CisKK3N0cnVjdCBtbHg0X2NtZCB7CisJc3RydWN0IHBjaV9wb29sCSAgICAgICAqcG9vbDsKKwl2b2lkIF9faW9tZW0JICAgICAgICpoY3I7CisJc3RydWN0IG11dGV4CQloY3JfbXV0ZXg7CisJc3RydWN0IHNlbWFwaG9yZQlwb2xsX3NlbTsKKwlzdHJ1Y3Qgc2VtYXBob3JlCWV2ZW50X3NlbTsKKwlpbnQJCQltYXhfY21kczsKKwlzcGlubG9ja190CQljb250ZXh0X2xvY2s7CisJaW50CQkJZnJlZV9oZWFkOworCXN0cnVjdCBtbHg0X2NtZF9jb250ZXh0ICpjb250ZXh0OworCXUxNgkJCXRva2VuX21hc2s7CisJdTgJCQl1c2VfZXZlbnRzOworCXU4CQkJdG9nZ2xlOworfTsKKworc3RydWN0IG1seDRfdWFyX3RhYmxlIHsKKwlzdHJ1Y3QgbWx4NF9iaXRtYXAJYml0bWFwOworfTsKKworc3RydWN0IG1seDRfbXJfdGFibGUgeworCXN0cnVjdCBtbHg0X2JpdG1hcAltcHRfYml0bWFwOworCXN0cnVjdCBtbHg0X2J1ZGR5CW10dF9idWRkeTsKKwl1NjQJCQltdHRfYmFzZTsKKwl1NjQJCQltcHRfYmFzZTsKKwlzdHJ1Y3QgbWx4NF9pY21fdGFibGUJbXR0X3RhYmxlOworCXN0cnVjdCBtbHg0X2ljbV90YWJsZQlkbXB0X3RhYmxlOworfTsKKworc3RydWN0IG1seDRfY3FfdGFibGUgeworCXN0cnVjdCBtbHg0X2JpdG1hcAliaXRtYXA7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290CXRyZWU7CisJc3RydWN0IG1seDRfaWNtX3RhYmxlCXRhYmxlOworCXN0cnVjdCBtbHg0X2ljbV90YWJsZQljbXB0X3RhYmxlOworfTsKKworc3RydWN0IG1seDRfZXFfdGFibGUgeworCXN0cnVjdCBtbHg0X2JpdG1hcAliaXRtYXA7CisJdm9pZCBfX2lvbWVtCSAgICAgICAqY2xyX2ludDsKKwl2b2lkIF9faW9tZW0JICAgICAgICp1YXJfbWFwWyhNTFg0X05VTV9FUSArIDYpIC8gNF07CisJdTMyCQkJY2xyX21hc2s7CisJc3RydWN0IG1seDRfZXEJCWVxW01MWDRfTlVNX0VRXTsKKwl1NjQJCQlpY21fdmlydDsKKwlzdHJ1Y3QgcGFnZQkgICAgICAgKmljbV9wYWdlOworCWRtYV9hZGRyX3QJCWljbV9kbWE7CisJc3RydWN0IG1seDRfaWNtX3RhYmxlCWNtcHRfdGFibGU7CisJaW50CQkJaGF2ZV9pcnE7CisJdTgJCQlpbnRhX3BpbjsKK307CisKK3N0cnVjdCBtbHg0X3NycV90YWJsZSB7CisJc3RydWN0IG1seDRfYml0bWFwCWJpdG1hcDsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QJdHJlZTsKKwlzdHJ1Y3QgbWx4NF9pY21fdGFibGUJdGFibGU7CisJc3RydWN0IG1seDRfaWNtX3RhYmxlCWNtcHRfdGFibGU7Cit9OworCitzdHJ1Y3QgbWx4NF9xcF90YWJsZSB7CisJc3RydWN0IG1seDRfYml0bWFwCWJpdG1hcDsKKwl1MzIJCQlyZG1hcmNfYmFzZTsKKwlpbnQJCQlyZG1hcmNfc2hpZnQ7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgbWx4NF9pY21fdGFibGUJcXBfdGFibGU7CisJc3RydWN0IG1seDRfaWNtX3RhYmxlCWF1eGNfdGFibGU7CisJc3RydWN0IG1seDRfaWNtX3RhYmxlCWFsdGNfdGFibGU7CisJc3RydWN0IG1seDRfaWNtX3RhYmxlCXJkbWFyY190YWJsZTsKKwlzdHJ1Y3QgbWx4NF9pY21fdGFibGUJY21wdF90YWJsZTsKK307CisKK3N0cnVjdCBtbHg0X21jZ190YWJsZSB7CisJc3RydWN0IG11dGV4CQltdXRleDsKKwlzdHJ1Y3QgbWx4NF9iaXRtYXAJYml0bWFwOworCXN0cnVjdCBtbHg0X2ljbV90YWJsZQl0YWJsZTsKK307CisKK3N0cnVjdCBtbHg0X2NhdGFzX2VyciB7CisJdTMyIF9faW9tZW0JICAgICAgICptYXA7CisJaW50CQkJc2l6ZTsKK307CisKK3N0cnVjdCBtbHg0X3ByaXYgeworCXN0cnVjdCBtbHg0X2RldgkJZGV2OworCisJc3RydWN0IGxpc3RfaGVhZAlkZXZfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWN0eF9saXN0OworCXNwaW5sb2NrX3QJCWN0eF9sb2NrOworCisJc3RydWN0IG1seDRfZncJCWZ3OworCXN0cnVjdCBtbHg0X2NtZAkJY21kOworCisJc3RydWN0IG1seDRfYml0bWFwCXBkX2JpdG1hcDsKKwlzdHJ1Y3QgbWx4NF91YXJfdGFibGUJdWFyX3RhYmxlOworCXN0cnVjdCBtbHg0X21yX3RhYmxlCW1yX3RhYmxlOworCXN0cnVjdCBtbHg0X2NxX3RhYmxlCWNxX3RhYmxlOworCXN0cnVjdCBtbHg0X2VxX3RhYmxlCWVxX3RhYmxlOworCXN0cnVjdCBtbHg0X3NycV90YWJsZQlzcnFfdGFibGU7CisJc3RydWN0IG1seDRfcXBfdGFibGUJcXBfdGFibGU7CisJc3RydWN0IG1seDRfbWNnX3RhYmxlCW1jZ190YWJsZTsKKworCXN0cnVjdCBtbHg0X2NhdGFzX2VycgljYXRhc19lcnI7CisKKwl2b2lkIF9faW9tZW0JICAgICAgICpjbHJfYmFzZTsKKworCXN0cnVjdCBtbHg0X3VhcgkJZHJpdmVyX3VhcjsKKwl2b2lkIF9faW9tZW0JICAgICAgICprYXI7CisKKwl1MzIJCQlyZXZfaWQ7CisJY2hhcgkJCWJvYXJkX2lkW01MWDRfQk9BUkRfSURfTEVOXTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1seDRfcHJpdiAqbWx4NF9wcml2KHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWx4NF9wcml2LCBkZXYpOworfQorCit1MzIgbWx4NF9iaXRtYXBfYWxsb2Moc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXApOwordm9pZCBtbHg0X2JpdG1hcF9mcmVlKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCB1MzIgb2JqKTsKK2ludCBtbHg0X2JpdG1hcF9pbml0KHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCB1MzIgbnVtLCB1MzIgbWFzaywgdTMyIHJlc2VydmVkKTsKK3ZvaWQgbWx4NF9iaXRtYXBfY2xlYW51cChzdHJ1Y3QgbWx4NF9iaXRtYXAgKmJpdG1hcCk7CisKK2ludCBtbHg0X3Jlc2V0KHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKKworaW50IG1seDRfaW5pdF9wZF90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CitpbnQgbWx4NF9pbml0X3Vhcl90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CitpbnQgbWx4NF9pbml0X21yX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK2ludCBtbHg0X2luaXRfZXFfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYpOworaW50IG1seDRfaW5pdF9jcV90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CitpbnQgbWx4NF9pbml0X3FwX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK2ludCBtbHg0X2luaXRfc3JxX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK2ludCBtbHg0X2luaXRfbWNnX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKKwordm9pZCBtbHg0X2NsZWFudXBfcGRfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYpOwordm9pZCBtbHg0X2NsZWFudXBfdWFyX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK3ZvaWQgbWx4NF9jbGVhbnVwX21yX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK3ZvaWQgbWx4NF9jbGVhbnVwX2VxX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK3ZvaWQgbWx4NF9jbGVhbnVwX2NxX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK3ZvaWQgbWx4NF9jbGVhbnVwX3FwX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK3ZvaWQgbWx4NF9jbGVhbnVwX3NycV90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfY2xlYW51cF9tY2dfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYpOworCit2b2lkIG1seDRfbWFwX2NhdGFzX2J1ZihzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfdW5tYXBfY2F0YXNfYnVmKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKKworaW50IG1seDRfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK3ZvaWQgbWx4NF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfZGlzcGF0Y2hfZXZlbnQoc3RydWN0IG1seDRfZGV2ICpkZXYsIGVudW0gbWx4NF9ldmVudCB0eXBlLAorCQkJIGludCBzdWJ0eXBlLCBpbnQgcG9ydCk7CisKK3N0cnVjdCBtbHg0X2Rldl9jYXA7CitzdHJ1Y3QgbWx4NF9pbml0X2hjYV9wYXJhbTsKKwordTY0IG1seDRfbWFrZV9wcm9maWxlKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkgICAgICBzdHJ1Y3QgbWx4NF9wcm9maWxlICpyZXF1ZXN0LAorCQkgICAgICBzdHJ1Y3QgbWx4NF9kZXZfY2FwICpkZXZfY2FwLAorCQkgICAgICBzdHJ1Y3QgbWx4NF9pbml0X2hjYV9wYXJhbSAqaW5pdF9oY2EpOworCitpbnQgbWx4NF9tYXBfZXFfaWNtKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1NjQgaWNtX3ZpcnQpOwordm9pZCBtbHg0X3VubWFwX2VxX2ljbShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CisKK2ludCBtbHg0X2NtZF9pbml0KHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK3ZvaWQgbWx4NF9jbWRfY2xlYW51cChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfY21kX2V2ZW50KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1MTYgdG9rZW4sIHU4IHN0YXR1cywgdTY0IG91dF9wYXJhbSk7CitpbnQgbWx4NF9jbWRfdXNlX2V2ZW50cyhzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfY21kX3VzZV9wb2xsaW5nKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKKwordm9pZCBtbHg0X2NxX2NvbXBsZXRpb24oc3RydWN0IG1seDRfZGV2ICpkZXYsIHUzMiBjcW4pOwordm9pZCBtbHg0X2NxX2V2ZW50KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1MzIgY3FuLCBpbnQgZXZlbnRfdHlwZSk7CisKK3ZvaWQgbWx4NF9xcF9ldmVudChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTMyIHFwbiwgaW50IGV2ZW50X3R5cGUpOworCit2b2lkIG1seDRfc3JxX2V2ZW50KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1MzIgc3JxbiwgaW50IGV2ZW50X3R5cGUpOworCit2b2lkIG1seDRfaGFuZGxlX2NhdGFzX2VycihzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CisKKyNlbmRpZiAvKiBNTFg0X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbXIuYyBiL2RyaXZlcnMvbmV0L21seDQvbXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzM4NjRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tci5jCkBAIC0wLDAgKzEsNDc5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaW5jbHVkZSA8bGludXgvbWx4NC9jbWQuaD4KKworI2luY2x1ZGUgIm1seDQuaCIKKyNpbmNsdWRlICJpY20uaCIKKworLyoKKyAqIE11c3QgYmUgcGFja2VkIGJlY2F1c2UgbXR0X3NlZyBpcyA2NCBiaXRzIGJ1dCBvbmx5IGFsaWduZWQgdG8gMzIgYml0cy4KKyAqLworc3RydWN0IG1seDRfbXB0X2VudHJ5IHsKKwlfX2JlMzIgZmxhZ3M7CisJX19iZTMyIHFwbjsKKwlfX2JlMzIga2V5OworCV9fYmUzMiBwZDsKKwlfX2JlNjQgc3RhcnQ7CisJX19iZTY0IGxlbmd0aDsKKwlfX2JlMzIgbGtleTsKKwlfX2JlMzIgd2luX2NudDsKKwl1OAlyZXNlcnZlZDFbM107CisJdTgJbXR0X3JlcDsKKwlfX2JlNjQgbXR0X3NlZzsKKwlfX2JlMzIgbXR0X3N6OworCV9fYmUzMiBlbnRpdHlfc2l6ZTsKKwlfX2JlMzIgZmlyc3RfYnl0ZV9vZmZzZXQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1MWDRfTVBUX0ZMQUdfU1dfT1dOUwkgICAgKDB4ZlVMIDw8IDI4KQorI2RlZmluZSBNTFg0X01QVF9GTEFHX01JTwkgICAgKDEgPDwgMTcpCisjZGVmaW5lIE1MWDRfTVBUX0ZMQUdfQklORF9FTkFCTEUgICAoMSA8PCAxNSkKKyNkZWZpbmUgTUxYNF9NUFRfRkxBR19QSFlTSUNBTAkgICAgKDEgPDwgIDkpCisjZGVmaW5lIE1MWDRfTVBUX0ZMQUdfUkVHSU9OCSAgICAoMSA8PCAgOCkKKworI2RlZmluZSBNTFg0X01UVF9GTEFHX1BSRVNFTlQJCTEKKworc3RhdGljIHUzMiBtbHg0X2J1ZGR5X2FsbG9jKHN0cnVjdCBtbHg0X2J1ZGR5ICpidWRkeSwgaW50IG9yZGVyKQoreworCWludCBvOworCWludCBtOworCXUzMiBzZWc7CisKKwlzcGluX2xvY2soJmJ1ZGR5LT5sb2NrKTsKKworCWZvciAobyA9IG9yZGVyOyBvIDw9IGJ1ZGR5LT5tYXhfb3JkZXI7ICsrbykgeworCQltID0gMSA8PCAoYnVkZHktPm1heF9vcmRlciAtIG8pOworCQlzZWcgPSBmaW5kX2ZpcnN0X2JpdChidWRkeS0+Yml0c1tvXSwgbSk7CisJCWlmIChzZWcgPCBtKQorCQkJZ290byBmb3VuZDsKKwl9CisKKwlzcGluX3VubG9jaygmYnVkZHktPmxvY2spOworCXJldHVybiAtMTsKKworIGZvdW5kOgorCWNsZWFyX2JpdChzZWcsIGJ1ZGR5LT5iaXRzW29dKTsKKworCXdoaWxlIChvID4gb3JkZXIpIHsKKwkJLS1vOworCQlzZWcgPDw9IDE7CisJCXNldF9iaXQoc2VnIF4gMSwgYnVkZHktPmJpdHNbb10pOworCX0KKworCXNwaW5fdW5sb2NrKCZidWRkeS0+bG9jayk7CisKKwlzZWcgPDw9IG9yZGVyOworCisJcmV0dXJuIHNlZzsKK30KKworc3RhdGljIHZvaWQgbWx4NF9idWRkeV9mcmVlKHN0cnVjdCBtbHg0X2J1ZGR5ICpidWRkeSwgdTMyIHNlZywgaW50IG9yZGVyKQoreworCXNlZyA+Pj0gb3JkZXI7CisKKwlzcGluX2xvY2soJmJ1ZGR5LT5sb2NrKTsKKworCXdoaWxlICh0ZXN0X2JpdChzZWcgXiAxLCBidWRkeS0+Yml0c1tvcmRlcl0pKSB7CisJCWNsZWFyX2JpdChzZWcgXiAxLCBidWRkeS0+Yml0c1tvcmRlcl0pOworCQlzZWcgPj49IDE7CisJCSsrb3JkZXI7CisJfQorCisJc2V0X2JpdChzZWcsIGJ1ZGR5LT5iaXRzW29yZGVyXSk7CisKKwlzcGluX3VubG9jaygmYnVkZHktPmxvY2spOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtbHg0X2J1ZGR5X2luaXQoc3RydWN0IG1seDRfYnVkZHkgKmJ1ZGR5LCBpbnQgbWF4X29yZGVyKQoreworCWludCBpLCBzOworCisJYnVkZHktPm1heF9vcmRlciA9IG1heF9vcmRlcjsKKwlzcGluX2xvY2tfaW5pdCgmYnVkZHktPmxvY2spOworCisJYnVkZHktPmJpdHMgPSBremFsbG9jKChidWRkeS0+bWF4X29yZGVyICsgMSkgKiBzaXplb2YgKGxvbmcgKiksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZGR5LT5iaXRzKQorCQlnb3RvIGVycl9vdXQ7CisKKwlmb3IgKGkgPSAwOyBpIDw9IGJ1ZGR5LT5tYXhfb3JkZXI7ICsraSkgeworCQlzID0gQklUU19UT19MT05HUygxIDw8IChidWRkeS0+bWF4X29yZGVyIC0gaSkpOworCQlidWRkeS0+Yml0c1tpXSA9IGttYWxsb2MocyAqIHNpemVvZiAobG9uZyksIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZGR5LT5iaXRzW2ldKQorCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCWJpdG1hcF96ZXJvKGJ1ZGR5LT5iaXRzW2ldLCAxIDw8IChidWRkeS0+bWF4X29yZGVyIC0gaSkpOworCX0KKworCXNldF9iaXQoMCwgYnVkZHktPmJpdHNbYnVkZHktPm1heF9vcmRlcl0pOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwlmb3IgKGkgPSAwOyBpIDw9IGJ1ZGR5LT5tYXhfb3JkZXI7ICsraSkKKwkJa2ZyZWUoYnVkZHktPmJpdHNbaV0pOworCisJa2ZyZWUoYnVkZHktPmJpdHMpOworCitlcnJfb3V0OgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBtbHg0X2J1ZGR5X2NsZWFudXAoc3RydWN0IG1seDRfYnVkZHkgKmJ1ZGR5KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8PSBidWRkeS0+bWF4X29yZGVyOyArK2kpCisJCWtmcmVlKGJ1ZGR5LT5iaXRzW2ldKTsKKworCWtmcmVlKGJ1ZGR5LT5iaXRzKTsKK30KKworc3RhdGljIHUzMiBtbHg0X2FsbG9jX210dF9yYW5nZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IG9yZGVyKQoreworCXN0cnVjdCBtbHg0X21yX3RhYmxlICptcl90YWJsZSA9ICZtbHg0X3ByaXYoZGV2KS0+bXJfdGFibGU7CisJdTMyIHNlZzsKKworCXNlZyA9IG1seDRfYnVkZHlfYWxsb2MoJm1yX3RhYmxlLT5tdHRfYnVkZHksIG9yZGVyKTsKKwlpZiAoc2VnID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobWx4NF90YWJsZV9nZXRfcmFuZ2UoZGV2LCAmbXJfdGFibGUtPm10dF90YWJsZSwgc2VnLAorCQkJCSBzZWcgKyAoMSA8PCBvcmRlcikgLSAxKSkgeworCQltbHg0X2J1ZGR5X2ZyZWUoJm1yX3RhYmxlLT5tdHRfYnVkZHksIHNlZywgb3JkZXIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIHNlZzsKK30KKworaW50IG1seDRfbXR0X2luaXQoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBucGFnZXMsIGludCBwYWdlX3NoaWZ0LAorCQkgIHN0cnVjdCBtbHg0X210dCAqbXR0KQoreworCWludCBpOworCisJaWYgKCFucGFnZXMpIHsKKwkJbXR0LT5vcmRlciAgICAgID0gLTE7CisJCW10dC0+cGFnZV9zaGlmdCA9IE1MWDRfSUNNX1BBR0VfU0hJRlQ7CisJCXJldHVybiAwOworCX0gZWxzZQorCQltdHQtPnBhZ2Vfc2hpZnQgPSBwYWdlX3NoaWZ0OworCisJZm9yIChtdHQtPm9yZGVyID0gMCwgaSA9IE1MWDRfTVRUX0VOVFJZX1BFUl9TRUc7IGkgPCBucGFnZXM7IGkgPDw9IDEpCisJCSsrbXR0LT5vcmRlcjsKKworCW10dC0+Zmlyc3Rfc2VnID0gbWx4NF9hbGxvY19tdHRfcmFuZ2UoZGV2LCBtdHQtPm9yZGVyKTsKKwlpZiAobXR0LT5maXJzdF9zZWcgPT0gLTEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X210dF9pbml0KTsKKwordm9pZCBtbHg0X210dF9jbGVhbnVwKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9tdHQgKm10dCkKK3sKKwlzdHJ1Y3QgbWx4NF9tcl90YWJsZSAqbXJfdGFibGUgPSAmbWx4NF9wcml2KGRldiktPm1yX3RhYmxlOworCisJaWYgKG10dC0+b3JkZXIgPCAwKQorCQlyZXR1cm47CisKKwltbHg0X2J1ZGR5X2ZyZWUoJm1yX3RhYmxlLT5tdHRfYnVkZHksIG10dC0+Zmlyc3Rfc2VnLCBtdHQtPm9yZGVyKTsKKwltbHg0X3RhYmxlX3B1dF9yYW5nZShkZXYsICZtcl90YWJsZS0+bXR0X3RhYmxlLCBtdHQtPmZpcnN0X3NlZywKKwkJCSAgICAgbXR0LT5maXJzdF9zZWcgKyAoMSA8PCBtdHQtPm9yZGVyKSAtIDEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9tdHRfY2xlYW51cCk7CisKK3U2NCBtbHg0X210dF9hZGRyKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9tdHQgKm10dCkKK3sKKwlyZXR1cm4gKHU2NCkgbXR0LT5maXJzdF9zZWcgKiBkZXYtPmNhcHMubXR0X2VudHJ5X3N6OworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9tdHRfYWRkcik7CisKK3N0YXRpYyB1MzIgaHdfaW5kZXhfdG9fa2V5KHUzMiBpbmQpCit7CisJcmV0dXJuIChpbmQgPj4gMjQpIHwgKGluZCA8PCA4KTsKK30KKworc3RhdGljIHUzMiBrZXlfdG9faHdfaW5kZXgodTMyIGtleSkKK3sKKwlyZXR1cm4gKGtleSA8PCAyNCkgfCAoa2V5ID4+IDgpOworfQorCitzdGF0aWMgaW50IG1seDRfU1cySFdfTVBUKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveCwKKwkJCSAgaW50IG1wdF9pbmRleCkKK3sKKwlyZXR1cm4gbWx4NF9jbWQoZGV2LCBtYWlsYm94LT5kbWEsIG1wdF9pbmRleCwgMCwgTUxYNF9DTURfU1cySFdfTVBULAorCQkJTUxYNF9DTURfVElNRV9DTEFTU19CKTsKK30KKworc3RhdGljIGludCBtbHg0X0hXMlNXX01QVChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3gsCisJCQkgIGludCBtcHRfaW5kZXgpCit7CisJcmV0dXJuIG1seDRfY21kX2JveChkZXYsIDAsIG1haWxib3ggPyBtYWlsYm94LT5kbWEgOiAwLCBtcHRfaW5kZXgsCisJCQkgICAgIW1haWxib3gsIE1MWDRfQ01EX0hXMlNXX01QVCwgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKK30KKworaW50IG1seDRfbXJfYWxsb2Moc3RydWN0IG1seDRfZGV2ICpkZXYsIHUzMiBwZCwgdTY0IGlvdmEsIHU2NCBzaXplLCB1MzIgYWNjZXNzLAorCQkgIGludCBucGFnZXMsIGludCBwYWdlX3NoaWZ0LCBzdHJ1Y3QgbWx4NF9tciAqbXIpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXUzMiBpbmRleDsKKwlpbnQgZXJyOworCisJaW5kZXggPSBtbHg0X2JpdG1hcF9hbGxvYygmcHJpdi0+bXJfdGFibGUubXB0X2JpdG1hcCk7CisJaWYgKGluZGV4ID09IC0xKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCW1yLT5pb3ZhICAgICAgID0gaW92YTsKKwltci0+c2l6ZSAgICAgICA9IHNpemU7CisJbXItPnBkCSAgICAgICA9IHBkOworCW1yLT5hY2Nlc3MgICAgID0gYWNjZXNzOworCW1yLT5lbmFibGVkICAgID0gMDsKKwltci0+a2V5CSAgICAgICA9IGh3X2luZGV4X3RvX2tleShpbmRleCk7CisKKwllcnIgPSBtbHg0X210dF9pbml0KGRldiwgbnBhZ2VzLCBwYWdlX3NoaWZ0LCAmbXItPm10dCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfaW5kZXg7CisKKwlyZXR1cm4gMDsKKworZXJyX2luZGV4OgorCW1seDRfYml0bWFwX2ZyZWUoJnByaXYtPm1yX3RhYmxlLm1wdF9iaXRtYXAsIGluZGV4KTsKKworZXJyOgorCWtmcmVlKG1yKTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9tcl9hbGxvYyk7CisKK3ZvaWQgbWx4NF9tcl9mcmVlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9tciAqbXIpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCWludCBlcnI7CisKKwlpZiAobXItPmVuYWJsZWQpIHsKKwkJZXJyID0gbWx4NF9IVzJTV19NUFQoZGV2LCBOVUxMLAorCQkJCSAgICAga2V5X3RvX2h3X2luZGV4KG1yLT5rZXkpICYKKwkJCQkgICAgIChkZXYtPmNhcHMubnVtX21wdHMgLSAxKSk7CisJCWlmIChlcnIpCisJCQltbHg0X3dhcm4oZGV2LCAiSFcyU1dfTVBUIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCX0KKworCW1seDRfbXR0X2NsZWFudXAoZGV2LCAmbXItPm10dCk7CisJbWx4NF9iaXRtYXBfZnJlZSgmcHJpdi0+bXJfdGFibGUubXB0X2JpdG1hcCwga2V5X3RvX2h3X2luZGV4KG1yLT5rZXkpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfbXJfZnJlZSk7CisKK2ludCBtbHg0X21yX2VuYWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfbXIgKm1yKQoreworCXN0cnVjdCBtbHg0X21yX3RhYmxlICptcl90YWJsZSA9ICZtbHg0X3ByaXYoZGV2KS0+bXJfdGFibGU7CisJc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CisJc3RydWN0IG1seDRfbXB0X2VudHJ5ICptcHRfZW50cnk7CisJaW50IGVycjsKKworCWVyciA9IG1seDRfdGFibGVfZ2V0KGRldiwgJm1yX3RhYmxlLT5kbXB0X3RhYmxlLCBrZXlfdG9faHdfaW5kZXgobXItPmtleSkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOworCWlmIChJU19FUlIobWFpbGJveCkpIHsKKwkJZXJyID0gUFRSX0VSUihtYWlsYm94KTsKKwkJZ290byBlcnJfdGFibGU7CisJfQorCW1wdF9lbnRyeSA9IG1haWxib3gtPmJ1ZjsKKworCW1lbXNldChtcHRfZW50cnksIDAsIHNpemVvZiAqbXB0X2VudHJ5KTsKKworCW1wdF9lbnRyeS0+ZmxhZ3MgPSBjcHVfdG9fYmUzMihNTFg0X01QVF9GTEFHX1NXX09XTlMJIHwKKwkJCQkgICAgICAgTUxYNF9NUFRfRkxBR19NSU8JIHwKKwkJCQkgICAgICAgTUxYNF9NUFRfRkxBR19SRUdJT04JIHwKKwkJCQkgICAgICAgbXItPmFjY2Vzcyk7CisJaWYgKG1yLT5tdHQub3JkZXIgPCAwKQorCQltcHRfZW50cnktPmZsYWdzIHw9IGNwdV90b19iZTMyKE1MWDRfTVBUX0ZMQUdfUEhZU0lDQUwpOworCisJbXB0X2VudHJ5LT5rZXkJICAgICAgID0gY3B1X3RvX2JlMzIoa2V5X3RvX2h3X2luZGV4KG1yLT5rZXkpKTsKKwltcHRfZW50cnktPnBkCSAgICAgICA9IGNwdV90b19iZTMyKG1yLT5wZCk7CisJbXB0X2VudHJ5LT5zdGFydCAgICAgICA9IGNwdV90b19iZTY0KG1yLT5pb3ZhKTsKKwltcHRfZW50cnktPmxlbmd0aCAgICAgID0gY3B1X3RvX2JlNjQobXItPnNpemUpOworCW1wdF9lbnRyeS0+ZW50aXR5X3NpemUgPSBjcHVfdG9fYmUzMihtci0+bXR0LnBhZ2Vfc2hpZnQpOworCW1wdF9lbnRyeS0+bXR0X3NlZyAgICAgPSBjcHVfdG9fYmU2NChtbHg0X210dF9hZGRyKGRldiwgJm1yLT5tdHQpKTsKKworCWVyciA9IG1seDRfU1cySFdfTVBUKGRldiwgbWFpbGJveCwKKwkJCSAgICAga2V5X3RvX2h3X2luZGV4KG1yLT5rZXkpICYgKGRldi0+Y2Fwcy5udW1fbXB0cyAtIDEpKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfd2FybihkZXYsICJTVzJIV19NUFQgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gZXJyX2NtZDsKKwl9CisKKwltci0+ZW5hYmxlZCA9IDE7CisKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LCBtYWlsYm94KTsKKworCXJldHVybiAwOworCitlcnJfY21kOgorCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOworCitlcnJfdGFibGU6CisJbWx4NF90YWJsZV9wdXQoZGV2LCAmbXJfdGFibGUtPmRtcHRfdGFibGUsIGtleV90b19od19pbmRleChtci0+a2V5KSk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfbXJfZW5hYmxlKTsKKworc3RhdGljIGludCBtbHg0X1dSSVRFX01UVChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3gsCisJCQkgIGludCBudW1fbXR0KQoreworCXJldHVybiBtbHg0X2NtZChkZXYsIG1haWxib3gtPmRtYSwgbnVtX210dCwgMCwgTUxYNF9DTURfV1JJVEVfTVRULAorCQkJTUxYNF9DTURfVElNRV9DTEFTU19CKTsKK30KKworaW50IG1seDRfd3JpdGVfbXR0KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9tdHQgKm10dCwKKwkJICAgaW50IHN0YXJ0X2luZGV4LCBpbnQgbnBhZ2VzLCB1NjQgKnBhZ2VfbGlzdCkKK3sKKwlzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCAqbWFpbGJveDsKKwlfX2JlNjQgKm10dF9lbnRyeTsKKwlpbnQgaTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChtdHQtPm9yZGVyIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOworCWlmIChJU19FUlIobWFpbGJveCkpCisJCXJldHVybiBQVFJfRVJSKG1haWxib3gpOworCisJbXR0X2VudHJ5ID0gbWFpbGJveC0+YnVmOworCisJd2hpbGUgKG5wYWdlcyA+IDApIHsKKwkJbXR0X2VudHJ5WzBdID0gY3B1X3RvX2JlNjQobWx4NF9tdHRfYWRkcihkZXYsIG10dCkgKyBzdGFydF9pbmRleCAqIDgpOworCQltdHRfZW50cnlbMV0gPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBucGFnZXMgJiYgaSA8IE1MWDRfTUFJTEJPWF9TSVpFIC8gOCAtIDI7ICsraSkKKwkJCW10dF9lbnRyeVtpICsgMl0gPSBjcHVfdG9fYmU2NChwYWdlX2xpc3RbaV0gfAorCQkJCQkJICAgICAgIE1MWDRfTVRUX0ZMQUdfUFJFU0VOVCk7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBhbiBvZGQgbnVtYmVyIG9mIGVudHJpZXMgdG8gd3JpdGUsIGFkZAorCQkgKiBvbmUgbW9yZSBkdW1teSBlbnRyeSBmb3IgZmlybXdhcmUgZWZmaWNpZW5jeS4KKwkJICovCisJCWlmIChpICYgMSkKKwkJCW10dF9lbnRyeVtpICsgMl0gPSAwOworCisJCWVyciA9IG1seDRfV1JJVEVfTVRUKGRldiwgbWFpbGJveCwgKGkgKyAxKSAmIH4xKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCisJCW5wYWdlcyAgICAgIC09IGk7CisJCXN0YXJ0X2luZGV4ICs9IGk7CisJCXBhZ2VfbGlzdCAgICs9IGk7CisJfQorCitvdXQ6CisJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF93cml0ZV9tdHQpOworCitpbnQgbWx4NF9idWZfd3JpdGVfbXR0KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9tdHQgKm10dCwKKwkJICAgICAgIHN0cnVjdCBtbHg0X2J1ZiAqYnVmKQoreworCXU2NCAqcGFnZV9saXN0OworCWludCBlcnI7CisJaW50IGk7CisKKwlwYWdlX2xpc3QgPSBrbWFsbG9jKGJ1Zi0+bnBhZ2VzICogc2l6ZW9mICpwYWdlX2xpc3QsIEdGUF9LRVJORUwpOworCWlmICghcGFnZV9saXN0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBidWYtPm5wYWdlczsgKytpKQorCQlpZiAoYnVmLT5uYnVmcyA9PSAxKQorCQkJcGFnZV9saXN0W2ldID0gYnVmLT51LmRpcmVjdC5tYXAgKyAoaSA8PCBidWYtPnBhZ2Vfc2hpZnQpOworCQllbHNlCisJCQlwYWdlX2xpc3RbaV0gPSBidWYtPnUucGFnZV9saXN0W2ldLm1hcDsKKworCWVyciA9IG1seDRfd3JpdGVfbXR0KGRldiwgbXR0LCAwLCBidWYtPm5wYWdlcywgcGFnZV9saXN0KTsKKworCWtmcmVlKHBhZ2VfbGlzdCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfYnVmX3dyaXRlX210dCk7CisKK2ludCBfX2RldmluaXQgbWx4NF9pbml0X21yX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X21yX3RhYmxlICptcl90YWJsZSA9ICZtbHg0X3ByaXYoZGV2KS0+bXJfdGFibGU7CisJaW50IGVycjsKKworCWVyciA9IG1seDRfYml0bWFwX2luaXQoJm1yX3RhYmxlLT5tcHRfYml0bWFwLCBkZXYtPmNhcHMubnVtX21wdHMsCisJCQkgICAgICAgfjAsIGRldi0+Y2Fwcy5yZXNlcnZlZF9tcndzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbWx4NF9idWRkeV9pbml0KCZtcl90YWJsZS0+bXR0X2J1ZGR5LAorCQkJICAgICAgaWxvZzIoZGV2LT5jYXBzLm51bV9tdHRfc2VncykpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2J1ZGR5OworCisJaWYgKGRldi0+Y2Fwcy5yZXNlcnZlZF9tdHRzKSB7CisJCWlmIChtbHg0X2FsbG9jX210dF9yYW5nZShkZXYsIGlsb2cyKGRldi0+Y2Fwcy5yZXNlcnZlZF9tdHRzKSkgPT0gLTEpIHsKKwkJCW1seDRfd2FybihkZXYsICJNVFQgdGFibGUgb2Ygb3JkZXIgJWQgaXMgdG9vIHNtYWxsLlxuIiwKKwkJCQkgIG1yX3RhYmxlLT5tdHRfYnVkZHkubWF4X29yZGVyKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9yZXNlcnZlX210dHM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3Jlc2VydmVfbXR0czoKKwltbHg0X2J1ZGR5X2NsZWFudXAoJm1yX3RhYmxlLT5tdHRfYnVkZHkpOworCitlcnJfYnVkZHk6CisJbWx4NF9iaXRtYXBfY2xlYW51cCgmbXJfdGFibGUtPm1wdF9iaXRtYXApOworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBtbHg0X2NsZWFudXBfbXJfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfbXJfdGFibGUgKm1yX3RhYmxlID0gJm1seDRfcHJpdihkZXYpLT5tcl90YWJsZTsKKworCW1seDRfYnVkZHlfY2xlYW51cCgmbXJfdGFibGUtPm10dF9idWRkeSk7CisJbWx4NF9iaXRtYXBfY2xlYW51cCgmbXJfdGFibGUtPm1wdF9iaXRtYXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9wZC5jIGIvZHJpdmVycy9uZXQvbWx4NC9wZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZGVhMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L3BkLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjaW5jbHVkZSAibWx4NC5oIgorI2luY2x1ZGUgImljbS5oIgorCitpbnQgbWx4NF9wZF9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTMyICpwZG4pCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCisJKnBkbiA9IG1seDRfYml0bWFwX2FsbG9jKCZwcml2LT5wZF9iaXRtYXApOworCWlmICgqcGRuID09IC0xKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9wZF9hbGxvYyk7CisKK3ZvaWQgbWx4NF9wZF9mcmVlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1MzIgcGRuKQoreworCW1seDRfYml0bWFwX2ZyZWUoJm1seDRfcHJpdihkZXYpLT5wZF9iaXRtYXAsIHBkbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X3BkX2ZyZWUpOworCitpbnQgX19kZXZpbml0IG1seDRfaW5pdF9wZF90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisKKwlyZXR1cm4gbWx4NF9iaXRtYXBfaW5pdCgmcHJpdi0+cGRfYml0bWFwLCBkZXYtPmNhcHMubnVtX3BkcywKKwkJCQkoMSA8PCAyNCkgLSAxLCBkZXYtPmNhcHMucmVzZXJ2ZWRfcGRzKTsKK30KKwordm9pZCBtbHg0X2NsZWFudXBfcGRfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJbWx4NF9iaXRtYXBfY2xlYW51cCgmbWx4NF9wcml2KGRldiktPnBkX2JpdG1hcCk7Cit9CisKKworaW50IG1seDRfdWFyX2FsbG9jKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF91YXIgKnVhcikKK3sKKwl1YXItPmluZGV4ID0gbWx4NF9iaXRtYXBfYWxsb2MoJm1seDRfcHJpdihkZXYpLT51YXJfdGFibGUuYml0bWFwKTsKKwlpZiAodWFyLT5pbmRleCA9PSAtMSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1YXItPnBmbiA9IChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAyKSA+PiBQQUdFX1NISUZUKSArIHVhci0+aW5kZXg7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfdWFyX2FsbG9jKTsKKwordm9pZCBtbHg0X3Vhcl9mcmVlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF91YXIgKnVhcikKK3sKKwltbHg0X2JpdG1hcF9mcmVlKCZtbHg0X3ByaXYoZGV2KS0+dWFyX3RhYmxlLmJpdG1hcCwgdWFyLT5pbmRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X3Vhcl9mcmVlKTsKKworaW50IG1seDRfaW5pdF91YXJfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJcmV0dXJuIG1seDRfYml0bWFwX2luaXQoJm1seDRfcHJpdihkZXYpLT51YXJfdGFibGUuYml0bWFwLAorCQkJCWRldi0+Y2Fwcy5udW1fdWFycywgZGV2LT5jYXBzLm51bV91YXJzIC0gMSwKKwkJCQltYXgoMTI4LCBkZXYtPmNhcHMucmVzZXJ2ZWRfdWFycykpOworfQorCit2b2lkIG1seDRfY2xlYW51cF91YXJfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJbWx4NF9iaXRtYXBfY2xlYW51cCgmbWx4NF9wcml2KGRldiktPnVhcl90YWJsZS5iaXRtYXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9wcm9maWxlLmMgYi9kcml2ZXJzL25ldC9tbHg0L3Byb2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2E0MmIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9wcm9maWxlLmMKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlICJtbHg0LmgiCisjaW5jbHVkZSAiZncuaCIKKworZW51bSB7CisJTUxYNF9SRVNfUVAsCisJTUxYNF9SRVNfUkRNQVJDLAorCU1MWDRfUkVTX0FMVEMsCisJTUxYNF9SRVNfQVVYQywKKwlNTFg0X1JFU19TUlEsCisJTUxYNF9SRVNfQ1EsCisJTUxYNF9SRVNfRVEsCisJTUxYNF9SRVNfRE1QVCwKKwlNTFg0X1JFU19DTVBULAorCU1MWDRfUkVTX01UVCwKKwlNTFg0X1JFU19NQ0csCisJTUxYNF9SRVNfTlVNCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcmVzX25hbWVbXSA9IHsKKwlbTUxYNF9SRVNfUVBdCQk9ICJRUCIsCisJW01MWDRfUkVTX1JETUFSQ10JPSAiUkRNQVJDIiwKKwlbTUxYNF9SRVNfQUxUQ10JCT0gIkFMVEMiLAorCVtNTFg0X1JFU19BVVhDXQkJPSAiQVVYQyIsCisJW01MWDRfUkVTX1NSUV0JCT0gIlNSUSIsCisJW01MWDRfUkVTX0NRXQkJPSAiQ1EiLAorCVtNTFg0X1JFU19FUV0JCT0gIkVRIiwKKwlbTUxYNF9SRVNfRE1QVF0JCT0gIkRNUFQiLAorCVtNTFg0X1JFU19DTVBUXQkJPSAiQ01QVCIsCisJW01MWDRfUkVTX01UVF0JCT0gIk1UVCIsCisJW01MWDRfUkVTX01DR10JCT0gIk1DRyIsCit9OworCit1NjQgbWx4NF9tYWtlX3Byb2ZpbGUoc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCSAgICAgIHN0cnVjdCBtbHg0X3Byb2ZpbGUgKnJlcXVlc3QsCisJCSAgICAgIHN0cnVjdCBtbHg0X2Rldl9jYXAgKmRldl9jYXAsCisJCSAgICAgIHN0cnVjdCBtbHg0X2luaXRfaGNhX3BhcmFtICppbml0X2hjYSkKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJc3RydWN0IG1seDRfcmVzb3VyY2UgeworCQl1NjQgc2l6ZTsKKwkJdTY0IHN0YXJ0OworCQlpbnQgdHlwZTsKKwkJaW50IG51bTsKKwkJaW50IGxvZ19udW07CisJfTsKKworCXU2NCB0b3RhbF9zaXplID0gMDsKKwlzdHJ1Y3QgbWx4NF9yZXNvdXJjZSAqcHJvZmlsZTsKKwlzdHJ1Y3QgbWx4NF9yZXNvdXJjZSB0bXA7CisJaW50IGksIGo7CisKKwlwcm9maWxlID0ga3phbGxvYyhNTFg0X1JFU19OVU0gKiBzaXplb2YgKnByb2ZpbGUsIEdGUF9LRVJORUwpOworCWlmICghcHJvZmlsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcm9maWxlW01MWDRfUkVTX1FQXS5zaXplICAgICA9IGRldl9jYXAtPnFwY19lbnRyeV9zejsKKwlwcm9maWxlW01MWDRfUkVTX1JETUFSQ10uc2l6ZSA9IGRldl9jYXAtPnJkbWFyY19lbnRyeV9zejsKKwlwcm9maWxlW01MWDRfUkVTX0FMVENdLnNpemUgICA9IGRldl9jYXAtPmFsdGNfZW50cnlfc3o7CisJcHJvZmlsZVtNTFg0X1JFU19BVVhDXS5zaXplICAgPSBkZXZfY2FwLT5hdXhfZW50cnlfc3o7CisJcHJvZmlsZVtNTFg0X1JFU19TUlFdLnNpemUgICAgPSBkZXZfY2FwLT5zcnFfZW50cnlfc3o7CisJcHJvZmlsZVtNTFg0X1JFU19DUV0uc2l6ZSAgICAgPSBkZXZfY2FwLT5jcWNfZW50cnlfc3o7CisJcHJvZmlsZVtNTFg0X1JFU19FUV0uc2l6ZSAgICAgPSBkZXZfY2FwLT5lcWNfZW50cnlfc3o7CisJcHJvZmlsZVtNTFg0X1JFU19ETVBUXS5zaXplICAgPSBkZXZfY2FwLT5kbXB0X2VudHJ5X3N6OworCXByb2ZpbGVbTUxYNF9SRVNfQ01QVF0uc2l6ZSAgID0gZGV2X2NhcC0+Y21wdF9lbnRyeV9zejsKKwlwcm9maWxlW01MWDRfUkVTX01UVF0uc2l6ZSAgICA9IE1MWDRfTVRUX0VOVFJZX1BFUl9TRUcgKiBkZXZfY2FwLT5tdHRfZW50cnlfc3o7CisJcHJvZmlsZVtNTFg0X1JFU19NQ0ddLnNpemUgICAgPSBNTFg0X01HTV9FTlRSWV9TSVpFOworCisJcHJvZmlsZVtNTFg0X1JFU19RUF0ubnVtICAgICAgPSByZXF1ZXN0LT5udW1fcXA7CisJcHJvZmlsZVtNTFg0X1JFU19SRE1BUkNdLm51bSAgPSByZXF1ZXN0LT5udW1fcXAgKiByZXF1ZXN0LT5yZG1hcmNfcGVyX3FwOworCXByb2ZpbGVbTUxYNF9SRVNfQUxUQ10ubnVtICAgID0gcmVxdWVzdC0+bnVtX3FwOworCXByb2ZpbGVbTUxYNF9SRVNfQVVYQ10ubnVtICAgID0gcmVxdWVzdC0+bnVtX3FwOworCXByb2ZpbGVbTUxYNF9SRVNfU1JRXS5udW0gICAgID0gcmVxdWVzdC0+bnVtX3NycTsKKwlwcm9maWxlW01MWDRfUkVTX0NRXS5udW0gICAgICA9IHJlcXVlc3QtPm51bV9jcTsKKwlwcm9maWxlW01MWDRfUkVTX0VRXS5udW0gICAgICA9IE1MWDRfTlVNX0VRICsgZGV2X2NhcC0+cmVzZXJ2ZWRfZXFzOworCXByb2ZpbGVbTUxYNF9SRVNfRE1QVF0ubnVtICAgID0gcmVxdWVzdC0+bnVtX21wdDsKKwlwcm9maWxlW01MWDRfUkVTX0NNUFRdLm51bSAgICA9IE1MWDRfTlVNX0NNUFRTOworCXByb2ZpbGVbTUxYNF9SRVNfTVRUXS5udW0gICAgID0gcmVxdWVzdC0+bnVtX210dDsKKwlwcm9maWxlW01MWDRfUkVTX01DR10ubnVtICAgICA9IHJlcXVlc3QtPm51bV9tY2c7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUxYNF9SRVNfTlVNOyArK2kpIHsKKwkJcHJvZmlsZVtpXS50eXBlICAgICA9IGk7CisJCXByb2ZpbGVbaV0ubnVtICAgICAgPSByb3VuZHVwX3Bvd19vZl90d28ocHJvZmlsZVtpXS5udW0pOworCQlwcm9maWxlW2ldLmxvZ19udW0gID0gaWxvZzIocHJvZmlsZVtpXS5udW0pOworCQlwcm9maWxlW2ldLnNpemUgICAgKj0gcHJvZmlsZVtpXS5udW07CisJCXByb2ZpbGVbaV0uc2l6ZSAgICAgPSBtYXgocHJvZmlsZVtpXS5zaXplLCAodTY0KSBQQUdFX1NJWkUpOworCX0KKworCS8qCisJICogU29ydCB0aGUgcmVzb3VyY2VzIGluIGRlY3JlYXNpbmcgb3JkZXIgb2Ygc2l6ZS4gIFNpbmNlIHRoZXkKKwkgKiBhbGwgaGF2ZSBzaXplcyB0aGF0IGFyZSBwb3dlcnMgb2YgMiwgd2UnbGwgYmUgYWJsZSB0byBrZWVwCisJICogcmVzb3VyY2VzIGFsaWduZWQgdG8gdGhlaXIgc2l6ZSBhbmQgcGFjayB0aGVtIHdpdGhvdXQgZ2FwcworCSAqIHVzaW5nIHRoZSBzb3J0ZWQgb3JkZXIuCisJICovCisJZm9yIChpID0gTUxYNF9SRVNfTlVNOyBpID4gMDsgLS1pKQorCQlmb3IgKGogPSAxOyBqIDwgaTsgKytqKSB7CisJCQlpZiAocHJvZmlsZVtqXS5zaXplID4gcHJvZmlsZVtqIC0gMV0uc2l6ZSkgeworCQkJCXRtcAkgICAgICAgPSBwcm9maWxlW2pdOworCQkJCXByb2ZpbGVbal0gICAgID0gcHJvZmlsZVtqIC0gMV07CisJCQkJcHJvZmlsZVtqIC0gMV0gPSB0bXA7CisJCQl9CisJCX0KKworCWZvciAoaSA9IDA7IGkgPCBNTFg0X1JFU19OVU07ICsraSkgeworCQlpZiAocHJvZmlsZVtpXS5zaXplKSB7CisJCQlwcm9maWxlW2ldLnN0YXJ0ID0gdG90YWxfc2l6ZTsKKwkJCXRvdGFsX3NpemUJKz0gcHJvZmlsZVtpXS5zaXplOworCQl9CisKKwkJaWYgKHRvdGFsX3NpemUgPiBkZXZfY2FwLT5tYXhfaWNtX3N6KSB7CisJCQltbHg0X2VycihkZXYsICJQcm9maWxlIHJlcXVpcmVzIDB4JWxseCBieXRlczsgIgorCQkJCSAgIndvbid0IGZpdCBpbiAweCVsbHggYnl0ZXMgb2YgY29udGV4dCBtZW1vcnkuXG4iLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdG90YWxfc2l6ZSwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIGRldl9jYXAtPm1heF9pY21fc3opOworCQkJa2ZyZWUocHJvZmlsZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWlmIChwcm9maWxlW2ldLnNpemUpCisJCQltbHg0X2RiZyhkZXYsICIgIHByb2ZpbGVbJTJkXSAoJTZzKTogMl4lMDJkIGVudHJpZXMgQCAweCUxMGxseCwgIgorCQkJCSAgInNpemUgMHglMTBsbHhcbiIsCisJCQkJIGksIHJlc19uYW1lW3Byb2ZpbGVbaV0udHlwZV0sIHByb2ZpbGVbaV0ubG9nX251bSwKKwkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgcHJvZmlsZVtpXS5zdGFydCwKKwkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgcHJvZmlsZVtpXS5zaXplKTsKKwl9CisKKwltbHg0X2RiZyhkZXYsICJIQ0EgY29udGV4dCBtZW1vcnk6IHJlc2VydmluZyAlZCBLQlxuIiwKKwkJIChpbnQpICh0b3RhbF9zaXplID4+IDEwKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUxYNF9SRVNfTlVNOyArK2kpIHsKKwkJc3dpdGNoIChwcm9maWxlW2ldLnR5cGUpIHsKKwkJY2FzZSBNTFg0X1JFU19RUDoKKwkJCWRldi0+Y2Fwcy5udW1fcXBzICAgICA9IHByb2ZpbGVbaV0ubnVtOworCQkJaW5pdF9oY2EtPnFwY19iYXNlICAgID0gcHJvZmlsZVtpXS5zdGFydDsKKwkJCWluaXRfaGNhLT5sb2dfbnVtX3FwcyA9IHByb2ZpbGVbaV0ubG9nX251bTsKKwkJCWJyZWFrOworCQljYXNlIE1MWDRfUkVTX1JETUFSQzoKKwkJCWZvciAocHJpdi0+cXBfdGFibGUucmRtYXJjX3NoaWZ0ID0gMDsKKwkJCSAgICAgcmVxdWVzdC0+bnVtX3FwIDw8IHByaXYtPnFwX3RhYmxlLnJkbWFyY19zaGlmdCA8IHByb2ZpbGVbaV0ubnVtOworCQkJICAgICArK3ByaXYtPnFwX3RhYmxlLnJkbWFyY19zaGlmdCkKKwkJCQk7IC8qIG5vdGhpbmcgKi8KKwkJCWRldi0+Y2Fwcy5tYXhfcXBfZGVzdF9yZG1hID0gMSA8PCBwcml2LT5xcF90YWJsZS5yZG1hcmNfc2hpZnQ7CisJCQlwcml2LT5xcF90YWJsZS5yZG1hcmNfYmFzZSAgID0gKHUzMikgcHJvZmlsZVtpXS5zdGFydDsKKwkJCWluaXRfaGNhLT5yZG1hcmNfYmFzZQkgICAgID0gcHJvZmlsZVtpXS5zdGFydDsKKwkJCWluaXRfaGNhLT5sb2dfcmRfcGVyX3FwCSAgICAgPSBwcml2LT5xcF90YWJsZS5yZG1hcmNfc2hpZnQ7CisJCQlicmVhazsKKwkJY2FzZSBNTFg0X1JFU19BTFRDOgorCQkJaW5pdF9oY2EtPmFsdGNfYmFzZSA9IHByb2ZpbGVbaV0uc3RhcnQ7CisJCQlicmVhazsKKwkJY2FzZSBNTFg0X1JFU19BVVhDOgorCQkJaW5pdF9oY2EtPmF1eGNfYmFzZSA9IHByb2ZpbGVbaV0uc3RhcnQ7CisJCQlicmVhazsKKwkJY2FzZSBNTFg0X1JFU19TUlE6CisJCQlkZXYtPmNhcHMubnVtX3NycXMgICAgID0gcHJvZmlsZVtpXS5udW07CisJCQlpbml0X2hjYS0+c3JxY19iYXNlICAgID0gcHJvZmlsZVtpXS5zdGFydDsKKwkJCWluaXRfaGNhLT5sb2dfbnVtX3NycXMgPSBwcm9maWxlW2ldLmxvZ19udW07CisJCQlicmVhazsKKwkJY2FzZSBNTFg0X1JFU19DUToKKwkJCWRldi0+Y2Fwcy5udW1fY3FzICAgICA9IHByb2ZpbGVbaV0ubnVtOworCQkJaW5pdF9oY2EtPmNxY19iYXNlICAgID0gcHJvZmlsZVtpXS5zdGFydDsKKwkJCWluaXRfaGNhLT5sb2dfbnVtX2NxcyA9IHByb2ZpbGVbaV0ubG9nX251bTsKKwkJCWJyZWFrOworCQljYXNlIE1MWDRfUkVTX0VROgorCQkJZGV2LT5jYXBzLm51bV9lcXMgICAgID0gcHJvZmlsZVtpXS5udW07CisJCQlpbml0X2hjYS0+ZXFjX2Jhc2UgICAgPSBwcm9maWxlW2ldLnN0YXJ0OworCQkJaW5pdF9oY2EtPmxvZ19udW1fZXFzID0gcHJvZmlsZVtpXS5sb2dfbnVtOworCQkJYnJlYWs7CisJCWNhc2UgTUxYNF9SRVNfRE1QVDoKKwkJCWRldi0+Y2Fwcy5udW1fbXB0cwk9IHByb2ZpbGVbaV0ubnVtOworCQkJcHJpdi0+bXJfdGFibGUubXB0X2Jhc2UgPSBwcm9maWxlW2ldLnN0YXJ0OworCQkJaW5pdF9oY2EtPmRtcHRfYmFzZQk9IHByb2ZpbGVbaV0uc3RhcnQ7CisJCQlpbml0X2hjYS0+bG9nX21wdF9zegk9IHByb2ZpbGVbaV0ubG9nX251bTsKKwkJCWJyZWFrOworCQljYXNlIE1MWDRfUkVTX0NNUFQ6CisJCQlpbml0X2hjYS0+Y21wdF9iYXNlCSA9IHByb2ZpbGVbaV0uc3RhcnQ7CisJCQlicmVhazsKKwkJY2FzZSBNTFg0X1JFU19NVFQ6CisJCQlkZXYtPmNhcHMubnVtX210dF9zZWdzCSA9IHByb2ZpbGVbaV0ubnVtOworCQkJcHJpdi0+bXJfdGFibGUubXR0X2Jhc2UJID0gcHJvZmlsZVtpXS5zdGFydDsKKwkJCWluaXRfaGNhLT5tdHRfYmFzZQkgPSBwcm9maWxlW2ldLnN0YXJ0OworCQkJYnJlYWs7CisJCWNhc2UgTUxYNF9SRVNfTUNHOgorCQkJZGV2LT5jYXBzLm51bV9tZ21zCSAgPSBwcm9maWxlW2ldLm51bSA+PiAxOworCQkJZGV2LT5jYXBzLm51bV9hbWdtcwkgID0gcHJvZmlsZVtpXS5udW0gPj4gMTsKKwkJCWluaXRfaGNhLT5tY19iYXNlCSAgPSBwcm9maWxlW2ldLnN0YXJ0OworCQkJaW5pdF9oY2EtPmxvZ19tY19lbnRyeV9zeiA9IGlsb2cyKE1MWDRfTUdNX0VOVFJZX1NJWkUpOworCQkJaW5pdF9oY2EtPmxvZ19tY190YWJsZV9zeiA9IHByb2ZpbGVbaV0ubG9nX251bTsKKwkJCWluaXRfaGNhLT5sb2dfbWNfaGFzaF9zeiAgPSBwcm9maWxlW2ldLmxvZ19udW0gLSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogUERzIGRvbid0IHRha2UgYW55IEhDQSBtZW1vcnksIGJ1dCB3ZSBhc3NpZ24gdGhlbSBhcyBwYXJ0CisJICogb2YgdGhlIEhDQSBwcm9maWxlIGFueXdheS4KKwkgKi8KKwlkZXYtPmNhcHMubnVtX3BkcyA9IE1MWDRfTlVNX1BEUzsKKworCWtmcmVlKHByb2ZpbGUpOworCXJldHVybiB0b3RhbF9zaXplOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9xcC5jIGIvZHJpdmVycy9uZXQvbWx4NC9xcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGI3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L3FwLmMKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYsIDIwMDcgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBWb2x0YWlyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L21seDQvY21kLmg+CisjaW5jbHVkZSA8bGludXgvbWx4NC9xcC5oPgorCisjaW5jbHVkZSAibWx4NC5oIgorI2luY2x1ZGUgImljbS5oIgorCit2b2lkIG1seDRfcXBfZXZlbnQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHUzMiBxcG4sIGludCBldmVudF90eXBlKQoreworCXN0cnVjdCBtbHg0X3FwX3RhYmxlICpxcF90YWJsZSA9ICZtbHg0X3ByaXYoZGV2KS0+cXBfdGFibGU7CisJc3RydWN0IG1seDRfcXAgKnFwOworCisJc3Bpbl9sb2NrKCZxcF90YWJsZS0+bG9jayk7CisKKwlxcCA9IF9fbWx4NF9xcF9sb29rdXAoZGV2LCBxcG4pOworCWlmIChxcCkKKwkJYXRvbWljX2luYygmcXAtPnJlZmNvdW50KTsKKworCXNwaW5fdW5sb2NrKCZxcF90YWJsZS0+bG9jayk7CisKKwlpZiAoIXFwKSB7CisJCW1seDRfd2FybihkZXYsICJBc3luYyBldmVudCBmb3IgYm9ndXMgUVAgJTA4eFxuIiwgcXBuKTsKKwkJcmV0dXJuOworCX0KKworCXFwLT5ldmVudChxcCwgZXZlbnRfdHlwZSk7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcXAtPnJlZmNvdW50KSkKKwkJY29tcGxldGUoJnFwLT5mcmVlKTsKK30KKworaW50IG1seDRfcXBfbW9kaWZ5KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9tdHQgKm10dCwKKwkJICAgZW51bSBtbHg0X3FwX3N0YXRlIGN1cl9zdGF0ZSwgZW51bSBtbHg0X3FwX3N0YXRlIG5ld19zdGF0ZSwKKwkJICAgc3RydWN0IG1seDRfcXBfY29udGV4dCAqY29udGV4dCwgZW51bSBtbHg0X3FwX29wdHBhciBvcHRwYXIsCisJCSAgIGludCBzcWRfZXZlbnQsIHN0cnVjdCBtbHg0X3FwICpxcCkKK3sKKwlzdGF0aWMgY29uc3QgdTE2IG9wW01MWDRfUVBfTlVNX1NUQVRFXVtNTFg0X1FQX05VTV9TVEFURV0gPSB7CisJCVtNTFg0X1FQX1NUQVRFX1JTVF0gPSB7CisJCQlbTUxYNF9RUF9TVEFURV9SU1RdCT0gTUxYNF9DTURfMlJTVF9RUCwKKwkJCVtNTFg0X1FQX1NUQVRFX0VSUl0JPSBNTFg0X0NNRF8yRVJSX1FQLAorCQkJW01MWDRfUVBfU1RBVEVfSU5JVF0JPSBNTFg0X0NNRF9SU1QySU5JVF9RUCwKKwkJfSwKKwkJW01MWDRfUVBfU1RBVEVfSU5JVF0gID0geworCQkJW01MWDRfUVBfU1RBVEVfUlNUXQk9IE1MWDRfQ01EXzJSU1RfUVAsCisJCQlbTUxYNF9RUF9TVEFURV9FUlJdCT0gTUxYNF9DTURfMkVSUl9RUCwKKwkJCVtNTFg0X1FQX1NUQVRFX0lOSVRdCT0gTUxYNF9DTURfSU5JVDJJTklUX1FQLAorCQkJW01MWDRfUVBfU1RBVEVfUlRSXQk9IE1MWDRfQ01EX0lOSVQyUlRSX1FQLAorCQl9LAorCQlbTUxYNF9RUF9TVEFURV9SVFJdICAgPSB7CisJCQlbTUxYNF9RUF9TVEFURV9SU1RdCT0gTUxYNF9DTURfMlJTVF9RUCwKKwkJCVtNTFg0X1FQX1NUQVRFX0VSUl0JPSBNTFg0X0NNRF8yRVJSX1FQLAorCQkJW01MWDRfUVBfU1RBVEVfUlRTXQk9IE1MWDRfQ01EX1JUUjJSVFNfUVAsCisJCX0sCisJCVtNTFg0X1FQX1NUQVRFX1JUU10gICA9IHsKKwkJCVtNTFg0X1FQX1NUQVRFX1JTVF0JPSBNTFg0X0NNRF8yUlNUX1FQLAorCQkJW01MWDRfUVBfU1RBVEVfRVJSXQk9IE1MWDRfQ01EXzJFUlJfUVAsCisJCQlbTUxYNF9RUF9TVEFURV9SVFNdCT0gTUxYNF9DTURfUlRTMlJUU19RUCwKKwkJCVtNTFg0X1FQX1NUQVRFX1NRRF0JPSBNTFg0X0NNRF9SVFMyU1FEX1FQLAorCQl9LAorCQlbTUxYNF9RUF9TVEFURV9TUURdID0geworCQkJW01MWDRfUVBfU1RBVEVfUlNUXQk9IE1MWDRfQ01EXzJSU1RfUVAsCisJCQlbTUxYNF9RUF9TVEFURV9FUlJdCT0gTUxYNF9DTURfMkVSUl9RUCwKKwkJCVtNTFg0X1FQX1NUQVRFX1JUU10JPSBNTFg0X0NNRF9TUUQyUlRTX1FQLAorCQkJW01MWDRfUVBfU1RBVEVfU1FEXQk9IE1MWDRfQ01EX1NRRDJTUURfUVAsCisJCX0sCisJCVtNTFg0X1FQX1NUQVRFX1NRRVJdID0geworCQkJW01MWDRfUVBfU1RBVEVfUlNUXQk9IE1MWDRfQ01EXzJSU1RfUVAsCisJCQlbTUxYNF9RUF9TVEFURV9FUlJdCT0gTUxYNF9DTURfMkVSUl9RUCwKKwkJCVtNTFg0X1FQX1NUQVRFX1JUU10JPSBNTFg0X0NNRF9TUUVSUjJSVFNfUVAsCisJCX0sCisJCVtNTFg0X1FQX1NUQVRFX0VSUl0gPSB7CisJCQlbTUxYNF9RUF9TVEFURV9SU1RdCT0gTUxYNF9DTURfMlJTVF9RUCwKKwkJCVtNTFg0X1FQX1NUQVRFX0VSUl0JPSBNTFg0X0NNRF8yRVJSX1FQLAorCQl9CisJfTsKKworCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OworCWludCByZXQgPSAwOworCisJaWYgKGN1cl9zdGF0ZSA8IDAgfHwgY3VyX3N0YXRlID49IE1MWDRfUVBfTlVNX1NUQVRFIHx8CisJICAgIG5ld19zdGF0ZSA8IDAgfHwgY3VyX3N0YXRlID49IE1MWDRfUVBfTlVNX1NUQVRFIHx8CisJICAgICFvcFtjdXJfc3RhdGVdW25ld19zdGF0ZV0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9wW2N1cl9zdGF0ZV1bbmV3X3N0YXRlXSA9PSBNTFg0X0NNRF8yUlNUX1FQKQorCQlyZXR1cm4gbWx4NF9jbWQoZGV2LCAwLCBxcC0+cXBuLCAyLAorCQkJCU1MWDRfQ01EXzJSU1RfUVAsIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQSk7CisKKwltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOworCWlmIChJU19FUlIobWFpbGJveCkpCisJCXJldHVybiBQVFJfRVJSKG1haWxib3gpOworCisJaWYgKGN1cl9zdGF0ZSA9PSBNTFg0X1FQX1NUQVRFX1JTVCAmJiBuZXdfc3RhdGUgPT0gTUxYNF9RUF9TVEFURV9JTklUKSB7CisJCXU2NCBtdHRfYWRkciA9IG1seDRfbXR0X2FkZHIoZGV2LCBtdHQpOworCQljb250ZXh0LT5tdHRfYmFzZV9hZGRyX2ggPSBtdHRfYWRkciA+PiAzMjsKKwkJY29udGV4dC0+bXR0X2Jhc2VfYWRkcl9sID0gY3B1X3RvX2JlMzIobXR0X2FkZHIgJiAweGZmZmZmZmZmKTsKKwkJY29udGV4dC0+bG9nX3BhZ2Vfc2l6ZSAgID0gbXR0LT5wYWdlX3NoaWZ0IC0gTUxYNF9JQ01fUEFHRV9TSElGVDsKKwl9CisKKwkqKF9fYmUzMiAqKSBtYWlsYm94LT5idWYgPSBjcHVfdG9fYmUzMihvcHRwYXIpOworCW1lbWNweShtYWlsYm94LT5idWYgKyA4LCBjb250ZXh0LCBzaXplb2YgKmNvbnRleHQpOworCisJKChzdHJ1Y3QgbWx4NF9xcF9jb250ZXh0ICopIChtYWlsYm94LT5idWYgKyA4KSktPmxvY2FsX3FwbiA9CisJCWNwdV90b19iZTMyKHFwLT5xcG4pOworCisJcmV0ID0gbWx4NF9jbWQoZGV2LCBtYWlsYm94LT5kbWEsIHFwLT5xcG4gfCAoISFzcWRfZXZlbnQgPDwgMzEpLAorCQkgICAgICAgbmV3X3N0YXRlID09IE1MWDRfUVBfU1RBVEVfUlNUID8gMiA6IDAsCisJCSAgICAgICBvcFtjdXJfc3RhdGVdW25ld19zdGF0ZV0sIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQyk7CisKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LCBtYWlsYm94KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9xcF9tb2RpZnkpOworCitpbnQgbWx4NF9xcF9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHNxcG4sIHN0cnVjdCBtbHg0X3FwICpxcCkKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJc3RydWN0IG1seDRfcXBfdGFibGUgKnFwX3RhYmxlID0gJnByaXYtPnFwX3RhYmxlOworCWludCBlcnI7CisKKwlpZiAoc3FwbikKKwkJcXAtPnFwbiA9IHNxcG47CisJZWxzZSB7CisJCXFwLT5xcG4gPSBtbHg0X2JpdG1hcF9hbGxvYygmcXBfdGFibGUtPmJpdG1hcCk7CisJCWlmIChxcC0+cXBuID09IC0xKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZXJyID0gbWx4NF90YWJsZV9nZXQoZGV2LCAmcXBfdGFibGUtPnFwX3RhYmxlLCBxcC0+cXBuKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKKwllcnIgPSBtbHg0X3RhYmxlX2dldChkZXYsICZxcF90YWJsZS0+YXV4Y190YWJsZSwgcXAtPnFwbik7CisJaWYgKGVycikKKwkJZ290byBlcnJfcHV0X3FwOworCisJZXJyID0gbWx4NF90YWJsZV9nZXQoZGV2LCAmcXBfdGFibGUtPmFsdGNfdGFibGUsIHFwLT5xcG4pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3B1dF9hdXhjOworCisJZXJyID0gbWx4NF90YWJsZV9nZXQoZGV2LCAmcXBfdGFibGUtPnJkbWFyY190YWJsZSwgcXAtPnFwbik7CisJaWYgKGVycikKKwkJZ290byBlcnJfcHV0X2FsdGM7CisKKwllcnIgPSBtbHg0X3RhYmxlX2dldChkZXYsICZxcF90YWJsZS0+Y21wdF90YWJsZSwgcXAtPnFwbik7CisJaWYgKGVycikKKwkJZ290byBlcnJfcHV0X3JkbWFyYzsKKworCXNwaW5fbG9ja19pcnEoJnFwX3RhYmxlLT5sb2NrKTsKKwllcnIgPSByYWRpeF90cmVlX2luc2VydCgmZGV2LT5xcF90YWJsZV90cmVlLCBxcC0+cXBuICYgKGRldi0+Y2Fwcy5udW1fcXBzIC0gMSksIHFwKTsKKwlzcGluX3VubG9ja19pcnEoJnFwX3RhYmxlLT5sb2NrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9wdXRfY21wdDsKKworCWF0b21pY19zZXQoJnFwLT5yZWZjb3VudCwgMSk7CisJaW5pdF9jb21wbGV0aW9uKCZxcC0+ZnJlZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3B1dF9jbXB0OgorCW1seDRfdGFibGVfcHV0KGRldiwgJnFwX3RhYmxlLT5jbXB0X3RhYmxlLCBxcC0+cXBuKTsKKworZXJyX3B1dF9yZG1hcmM6CisJbWx4NF90YWJsZV9wdXQoZGV2LCAmcXBfdGFibGUtPnJkbWFyY190YWJsZSwgcXAtPnFwbik7CisKK2Vycl9wdXRfYWx0YzoKKwltbHg0X3RhYmxlX3B1dChkZXYsICZxcF90YWJsZS0+YWx0Y190YWJsZSwgcXAtPnFwbik7CisKK2Vycl9wdXRfYXV4YzoKKwltbHg0X3RhYmxlX3B1dChkZXYsICZxcF90YWJsZS0+YXV4Y190YWJsZSwgcXAtPnFwbik7CisKK2Vycl9wdXRfcXA6CisJbWx4NF90YWJsZV9wdXQoZGV2LCAmcXBfdGFibGUtPnFwX3RhYmxlLCBxcC0+cXBuKTsKKworZXJyX291dDoKKwlpZiAoIXNxcG4pCisJCW1seDRfYml0bWFwX2ZyZWUoJnFwX3RhYmxlLT5iaXRtYXAsIHFwLT5xcG4pOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfcXBfYWxsb2MpOworCit2b2lkIG1seDRfcXBfcmVtb3ZlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9xcCAqcXApCit7CisJc3RydWN0IG1seDRfcXBfdGFibGUgKnFwX3RhYmxlID0gJm1seDRfcHJpdihkZXYpLT5xcF90YWJsZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnFwX3RhYmxlLT5sb2NrLCBmbGFncyk7CisJcmFkaXhfdHJlZV9kZWxldGUoJmRldi0+cXBfdGFibGVfdHJlZSwgcXAtPnFwbiAmIChkZXYtPmNhcHMubnVtX3FwcyAtIDEpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcF90YWJsZS0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9xcF9yZW1vdmUpOworCit2b2lkIG1seDRfcXBfZnJlZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfcXAgKnFwKQoreworCXN0cnVjdCBtbHg0X3FwX3RhYmxlICpxcF90YWJsZSA9ICZtbHg0X3ByaXYoZGV2KS0+cXBfdGFibGU7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcXAtPnJlZmNvdW50KSkKKwkJY29tcGxldGUoJnFwLT5mcmVlKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZxcC0+ZnJlZSk7CisKKwltbHg0X3RhYmxlX3B1dChkZXYsICZxcF90YWJsZS0+Y21wdF90YWJsZSwgcXAtPnFwbik7CisJbWx4NF90YWJsZV9wdXQoZGV2LCAmcXBfdGFibGUtPnJkbWFyY190YWJsZSwgcXAtPnFwbik7CisJbWx4NF90YWJsZV9wdXQoZGV2LCAmcXBfdGFibGUtPmFsdGNfdGFibGUsIHFwLT5xcG4pOworCW1seDRfdGFibGVfcHV0KGRldiwgJnFwX3RhYmxlLT5hdXhjX3RhYmxlLCBxcC0+cXBuKTsKKwltbHg0X3RhYmxlX3B1dChkZXYsICZxcF90YWJsZS0+cXBfdGFibGUsIHFwLT5xcG4pOworCisJbWx4NF9iaXRtYXBfZnJlZSgmcXBfdGFibGUtPmJpdG1hcCwgcXAtPnFwbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X3FwX2ZyZWUpOworCitzdGF0aWMgaW50IG1seDRfQ09ORl9TUEVDSUFMX1FQKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1MzIgYmFzZV9xcG4pCit7CisJcmV0dXJuIG1seDRfY21kKGRldiwgMCwgYmFzZV9xcG4sIDAsIE1MWDRfQ01EX0NPTkZfU1BFQ0lBTF9RUCwKKwkJCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQik7Cit9CisKK2ludCBfX2RldmluaXQgbWx4NF9pbml0X3FwX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3FwX3RhYmxlICpxcF90YWJsZSA9ICZtbHg0X3ByaXYoZGV2KS0+cXBfdGFibGU7CisJaW50IGVycjsKKworCXNwaW5fbG9ja19pbml0KCZxcF90YWJsZS0+bG9jayk7CisJSU5JVF9SQURJWF9UUkVFKCZkZXYtPnFwX3RhYmxlX3RyZWUsIEdGUF9BVE9NSUMpOworCisJLyoKKwkgKiBXZSByZXNlcnZlIDIgZXh0cmEgUVBzIHBlciBwb3J0IGZvciB0aGUgc3BlY2lhbCBRUHMuICBUaGUKKwkgKiBibG9jayBvZiBzcGVjaWFsIFFQcyBtdXN0IGJlIGFsaWduZWQgdG8gYSBtdWx0aXBsZSBvZiA4LCBzbworCSAqIHJvdW5kIHVwLgorCSAqLworCWRldi0+Y2Fwcy5zcXBfc3RhcnQgPSBBTElHTihkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzLCA4KTsKKwllcnIgPSBtbHg0X2JpdG1hcF9pbml0KCZxcF90YWJsZS0+Yml0bWFwLCBkZXYtPmNhcHMubnVtX3FwcywKKwkJCSAgICAgICAoMSA8PCAyNCkgLSAxLCBkZXYtPmNhcHMuc3FwX3N0YXJ0ICsgOCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBtbHg0X0NPTkZfU1BFQ0lBTF9RUChkZXYsIGRldi0+Y2Fwcy5zcXBfc3RhcnQpOworfQorCit2b2lkIG1seDRfY2xlYW51cF9xcF90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwltbHg0X0NPTkZfU1BFQ0lBTF9RUChkZXYsIDApOworCW1seDRfYml0bWFwX2NsZWFudXAoJm1seDRfcHJpdihkZXYpLT5xcF90YWJsZS5iaXRtYXApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9yZXNldC5jIGIvZHJpdmVycy9uZXQvbWx4NC9yZXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZGZkNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L3Jlc2V0LmMKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisKKyNpbmNsdWRlICJtbHg0LmgiCisKK2ludCBtbHg0X3Jlc2V0KHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXZvaWQgX19pb21lbSAqcmVzZXQ7CisJdTMyICpoY2FfaGVhZGVyID0gTlVMTDsKKwlpbnQgcGNpZV9jYXA7CisJdTE2IGRldmN0bDsKKwl1MTYgbGlua2N0bDsKKwl1MTYgdmVuZG9yOworCXVuc2lnbmVkIGxvbmcgZW5kOworCXUzMiBzZW07CisJaW50IGk7CisJaW50IGVyciA9IDA7CisKKyNkZWZpbmUgTUxYNF9SRVNFVF9CQVNFCQkweGYwMDAwCisjZGVmaW5lIE1MWDRfUkVTRVRfU0laRQkJICAweDQwMAorI2RlZmluZSBNTFg0X1NFTV9PRkZTRVQJCSAgMHgzZmMKKyNkZWZpbmUgTUxYNF9SRVNFVF9PRkZTRVQJICAgMHgxMAorI2RlZmluZSBNTFg0X1JFU0VUX1ZBTFVFCXN3YWIzMigxKQorCisjZGVmaW5lIE1MWDRfU0VNX1RJTUVPVVRfSklGRklFUwkoMTAgKiBIWikKKyNkZWZpbmUgTUxYNF9SRVNFVF9USU1FT1VUX0pJRkZJRVMJKDIgKiBIWikKKworCS8qCisJICogUmVzZXQgdGhlIGNoaXAuICBUaGlzIGlzIHNvbWV3aGF0IHVnbHkgYmVjYXVzZSB3ZSBoYXZlIHRvCisJICogc2F2ZSBvZmYgdGhlIFBDSSBoZWFkZXIgYmVmb3JlIHJlc2V0IGFuZCB0aGVuIHJlc3RvcmUgaXQKKwkgKiBhZnRlciB0aGUgY2hpcCByZWJvb3RzLiAgV2Ugc2tpcCBjb25maWcgc3BhY2Ugb2Zmc2V0cyAyMgorCSAqIGFuZCAyMyBzaW5jZSB0aG9zZSBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nLgorCSAqLworCisJLyogRG8gd2UgbmVlZCB0byBzYXZlIG9mZiB0aGUgZnVsbCA0SyBQQ0kgRXhwcmVzcyBoZWFkZXI/PyAqLworCWhjYV9oZWFkZXIgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoY2FfaGVhZGVyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCW1seDRfZXJyKGRldiwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBzYXZlIEhDQSAiCisJCQkgICJQQ0kgaGVhZGVyLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlwY2llX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LT5wZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7ICsraSkgeworCQlpZiAoaSA9PSAyMiB8fCBpID09IDIzKQorCQkJY29udGludWU7CisJCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LT5wZGV2LCBpICogNCwgaGNhX2hlYWRlciArIGkpKSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJbWx4NF9lcnIoZGV2LCAiQ291bGRuJ3Qgc2F2ZSBIQ0EgIgorCQkJCSAgIlBDSSBoZWFkZXIsIGFib3J0aW5nLlxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJlc2V0ID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKSArIE1MWDRfUkVTRVRfQkFTRSwKKwkJCU1MWDRfUkVTRVRfU0laRSk7CisJaWYgKCFyZXNldCkgeworCQllcnIgPSAtRU5PTUVNOworCQltbHg0X2VycihkZXYsICJDb3VsZG4ndCBtYXAgSENBIHJlc2V0IHJlZ2lzdGVyLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBncmFiIEhXIHNlbWFwaG9yZSB0byBsb2NrIG91dCBmbGFzaCB1cGRhdGVzICovCisJZW5kID0gamlmZmllcyArIE1MWDRfU0VNX1RJTUVPVVRfSklGRklFUzsKKwlkbyB7CisJCXNlbSA9IHJlYWRsKHJlc2V0ICsgTUxYNF9TRU1fT0ZGU0VUKTsKKwkJaWYgKCFzZW0pCisJCQlicmVhazsKKworCQltc2xlZXAoMSk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kKSk7CisKKwlpZiAoc2VtKSB7CisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBvYnRhaW4gSFcgc2VtYXBob3JlLCBhYm9ydGluZ1xuIik7CisJCWVyciA9IC1FQUdBSU47CisJCWlvdW5tYXAocmVzZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBhY3R1YWxseSBoaXQgcmVzZXQgKi8KKwl3cml0ZWwoTUxYNF9SRVNFVF9WQUxVRSwgcmVzZXQgKyBNTFg0X1JFU0VUX09GRlNFVCk7CisJaW91bm1hcChyZXNldCk7CisKKwllbmQgPSBqaWZmaWVzICsgTUxYNF9SRVNFVF9USU1FT1VUX0pJRkZJRVM7CisJZG8geworCQlpZiAoIXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgUENJX1ZFTkRPUl9JRCwgJnZlbmRvcikgJiYKKwkJICAgIHZlbmRvciAhPSAweGZmZmYpCisJCQlicmVhazsKKworCQltc2xlZXAoMSk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kKSk7CisKKwlpZiAodmVuZG9yID09IDB4ZmZmZikgeworCQllcnIgPSAtRU5PREVWOworCQltbHg0X2VycihkZXYsICJQQ0kgZGV2aWNlIGRpZCBub3QgY29tZSBiYWNrIGFmdGVyIHJlc2V0LCAiCisJCQkgICJhYm9ydGluZy5cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBOb3cgcmVzdG9yZSB0aGUgUENJIGhlYWRlcnMgKi8KKwlpZiAocGNpZV9jYXApIHsKKwkJZGV2Y3RsID0gaGNhX2hlYWRlclsocGNpZV9jYXAgKyBQQ0lfRVhQX0RFVkNUTCkgLyA0XTsKKwkJaWYgKHBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIHBjaWVfY2FwICsgUENJX0VYUF9ERVZDVEwsCisJCQkJCSAgIGRldmN0bCkpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQltbHg0X2VycihkZXYsICJDb3VsZG4ndCByZXN0b3JlIEhDQSBQQ0kgRXhwcmVzcyAiCisJCQkJICJEZXZpY2UgQ29udHJvbCByZWdpc3RlciwgYWJvcnRpbmcuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWxpbmtjdGwgPSBoY2FfaGVhZGVyWyhwY2llX2NhcCArIFBDSV9FWFBfTE5LQ1RMKSAvIDRdOworCQlpZiAocGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgcGNpZV9jYXAgKyBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJICAgbGlua2N0bCkpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQltbHg0X2VycihkZXYsICJDb3VsZG4ndCByZXN0b3JlIEhDQSBQQ0kgRXhwcmVzcyAiCisJCQkJICJMaW5rIGNvbnRyb2wgcmVnaXN0ZXIsIGFib3J0aW5nLlxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB7CisJCWlmIChpICogNCA9PSBQQ0lfQ09NTUFORCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldi0+cGRldiwgaSAqIDQsIGhjYV9oZWFkZXJbaV0pKSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJbWx4NF9lcnIoZGV2LCAiQ291bGRuJ3QgcmVzdG9yZSBIQ0EgcmVnICV4LCAiCisJCQkJICAiYWJvcnRpbmcuXG4iLCBpKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKHBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LT5wZGV2LCBQQ0lfQ09NTUFORCwKKwkJCQkgICBoY2FfaGVhZGVyW1BDSV9DT01NQU5EIC8gNF0pKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCW1seDRfZXJyKGRldiwgIkNvdWxkbid0IHJlc3RvcmUgSENBIENPTU1BTkQsICIKKwkJCSAgImFib3J0aW5nLlxuIik7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGhjYV9oZWFkZXIpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvc3JxLmMgYi9kcml2ZXJzL25ldC9tbHg0L3NycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMzRmODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L3NycS5jCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbHg0L2NtZC5oPgorCisjaW5jbHVkZSAibWx4NC5oIgorI2luY2x1ZGUgImljbS5oIgorCitzdHJ1Y3QgbWx4NF9zcnFfY29udGV4dCB7CisJX19iZTMyCQkJc3RhdGVfbG9nc2l6ZV9zcnFuOworCXU4CQkJbG9nc3RyaWRlOworCXU4CQkJcmVzZXJ2ZWQxWzNdOworCXU4CQkJcGdfb2Zmc2V0OworCXU4CQkJcmVzZXJ2ZWQyWzNdOworCXUzMgkJCXJlc2VydmVkMzsKKwl1OAkJCWxvZ19wYWdlX3NpemU7CisJdTgJCQlyZXNlcnZlZDRbMl07CisJdTgJCQltdHRfYmFzZV9hZGRyX2g7CisJX19iZTMyCQkJbXR0X2Jhc2VfYWRkcl9sOworCV9fYmUzMgkJCXBkOworCV9fYmUxNgkJCWxpbWl0X3dhdGVybWFyazsKKwlfX2JlMTYJCQl3cWVfY250OworCXUxNgkJCXJlc2VydmVkNTsKKwlfX2JlMTYJCQl3cWVfY291bnRlcjsKKwl1MzIJCQlyZXNlcnZlZDY7CisJX19iZTY0CQkJZGJfcmVjX2FkZHI7Cit9OworCit2b2lkIG1seDRfc3JxX2V2ZW50KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1MzIgc3JxbiwgaW50IGV2ZW50X3R5cGUpCit7CisJc3RydWN0IG1seDRfc3JxX3RhYmxlICpzcnFfdGFibGUgPSAmbWx4NF9wcml2KGRldiktPnNycV90YWJsZTsKKwlzdHJ1Y3QgbWx4NF9zcnEgKnNycTsKKworCXNwaW5fbG9jaygmc3JxX3RhYmxlLT5sb2NrKTsKKworCXNycSA9IHJhZGl4X3RyZWVfbG9va3VwKCZzcnFfdGFibGUtPnRyZWUsIHNycW4gJiAoZGV2LT5jYXBzLm51bV9zcnFzIC0gMSkpOworCWlmIChzcnEpCisJCWF0b21pY19pbmMoJnNycS0+cmVmY291bnQpOworCisJc3Bpbl91bmxvY2soJnNycV90YWJsZS0+bG9jayk7CisKKwlpZiAoIXNycSkgeworCQltbHg0X3dhcm4oZGV2LCAiQXN5bmMgZXZlbnQgZm9yIGJvZ3VzIFNSUSAlMDh4XG4iLCBzcnFuKTsKKwkJcmV0dXJuOworCX0KKworCXNycS0+ZXZlbnQoc3JxLCBldmVudF90eXBlKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzcnEtPnJlZmNvdW50KSkKKwkJY29tcGxldGUoJnNycS0+ZnJlZSk7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9TVzJIV19TUlEoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94LAorCQkJICBpbnQgc3JxX251bSkKK3sKKwlyZXR1cm4gbWx4NF9jbWQoZGV2LCBtYWlsYm94LT5kbWEsIHNycV9udW0sIDAsIE1MWDRfQ01EX1NXMkhXX1NSUSwKKwkJCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQSk7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9IVzJTV19TUlEoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94LAorCQkJICBpbnQgc3JxX251bSkKK3sKKwlyZXR1cm4gbWx4NF9jbWRfYm94KGRldiwgMCwgbWFpbGJveCA/IG1haWxib3gtPmRtYSA6IDAsIHNycV9udW0sCisJCQkgICAgbWFpbGJveCA/IDAgOiAxLCBNTFg0X0NNRF9IVzJTV19TUlEsCisJCQkgICAgTUxYNF9DTURfVElNRV9DTEFTU19BKTsKK30KKworc3RhdGljIGludCBtbHg0X0FSTV9TUlEoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBzcnFfbnVtLCBpbnQgbGltaXRfd2F0ZXJtYXJrKQoreworCXJldHVybiBtbHg0X2NtZChkZXYsIGxpbWl0X3dhdGVybWFyaywgc3JxX251bSwgMCwgTUxYNF9DTURfQVJNX1NSUSwKKwkJCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQik7Cit9CisKK2ludCBtbHg0X3NycV9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTMyIHBkbiwgc3RydWN0IG1seDRfbXR0ICptdHQsCisJCSAgIHU2NCBkYl9yZWMsIHN0cnVjdCBtbHg0X3NycSAqc3JxKQoreworCXN0cnVjdCBtbHg0X3NycV90YWJsZSAqc3JxX3RhYmxlID0gJm1seDRfcHJpdihkZXYpLT5zcnFfdGFibGU7CisJc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CisJc3RydWN0IG1seDRfc3JxX2NvbnRleHQgKnNycV9jb250ZXh0OworCXU2NCBtdHRfYWRkcjsKKwlpbnQgZXJyOworCisJc3JxLT5zcnFuID0gbWx4NF9iaXRtYXBfYWxsb2MoJnNycV90YWJsZS0+Yml0bWFwKTsKKwlpZiAoc3JxLT5zcnFuID09IC0xKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IG1seDRfdGFibGVfZ2V0KGRldiwgJnNycV90YWJsZS0+dGFibGUsIHNycS0+c3Jxbik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJZXJyID0gbWx4NF90YWJsZV9nZXQoZGV2LCAmc3JxX3RhYmxlLT5jbXB0X3RhYmxlLCBzcnEtPnNycW4pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3B1dDsKKworCXNwaW5fbG9ja19pcnEoJnNycV90YWJsZS0+bG9jayk7CisJZXJyID0gcmFkaXhfdHJlZV9pbnNlcnQoJnNycV90YWJsZS0+dHJlZSwgc3JxLT5zcnFuLCBzcnEpOworCXNwaW5fdW5sb2NrX2lycSgmc3JxX3RhYmxlLT5sb2NrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9jbXB0X3B1dDsKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CisJaWYgKElTX0VSUihtYWlsYm94KSkgeworCQllcnIgPSBQVFJfRVJSKG1haWxib3gpOworCQlnb3RvIGVycl9yYWRpeDsKKwl9CisKKwlzcnFfY29udGV4dCA9IG1haWxib3gtPmJ1ZjsKKwltZW1zZXQoc3JxX2NvbnRleHQsIDAsIHNpemVvZiAqc3JxX2NvbnRleHQpOworCisJc3JxX2NvbnRleHQtPnN0YXRlX2xvZ3NpemVfc3JxbiA9IGNwdV90b19iZTMyKChpbG9nMihzcnEtPm1heCkgPDwgMjQpIHwKKwkJCQkJCSAgICAgIHNycS0+c3Jxbik7CisJc3JxX2NvbnRleHQtPmxvZ3N0cmlkZSAgICAgICAgICA9IHNycS0+d3FlX3NoaWZ0IC0gNDsKKwlzcnFfY29udGV4dC0+bG9nX3BhZ2Vfc2l6ZSAgICAgID0gbXR0LT5wYWdlX3NoaWZ0IC0gTUxYNF9JQ01fUEFHRV9TSElGVDsKKworCW10dF9hZGRyID0gbWx4NF9tdHRfYWRkcihkZXYsIG10dCk7CisJc3JxX2NvbnRleHQtPm10dF9iYXNlX2FkZHJfaCAgICA9IG10dF9hZGRyID4+IDMyOworCXNycV9jb250ZXh0LT5tdHRfYmFzZV9hZGRyX2wgICAgPSBjcHVfdG9fYmUzMihtdHRfYWRkciAmIDB4ZmZmZmZmZmYpOworCXNycV9jb250ZXh0LT5wZAkJCT0gY3B1X3RvX2JlMzIocGRuKTsKKwlzcnFfY29udGV4dC0+ZGJfcmVjX2FkZHIgICAgICAgID0gY3B1X3RvX2JlNjQoZGJfcmVjKTsKKworCWVyciA9IG1seDRfU1cySFdfU1JRKGRldiwgbWFpbGJveCwgc3JxLT5zcnFuKTsKKwltbHg0X2ZyZWVfY21kX21haWxib3goZGV2LCBtYWlsYm94KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yYWRpeDsKKworCWF0b21pY19zZXQoJnNycS0+cmVmY291bnQsIDEpOworCWluaXRfY29tcGxldGlvbigmc3JxLT5mcmVlKTsKKworCXJldHVybiAwOworCitlcnJfcmFkaXg6CisJc3Bpbl9sb2NrX2lycSgmc3JxX3RhYmxlLT5sb2NrKTsKKwlyYWRpeF90cmVlX2RlbGV0ZSgmc3JxX3RhYmxlLT50cmVlLCBzcnEtPnNycW4pOworCXNwaW5fdW5sb2NrX2lycSgmc3JxX3RhYmxlLT5sb2NrKTsKKworZXJyX2NtcHRfcHV0OgorCW1seDRfdGFibGVfcHV0KGRldiwgJnNycV90YWJsZS0+Y21wdF90YWJsZSwgc3JxLT5zcnFuKTsKKworZXJyX3B1dDoKKwltbHg0X3RhYmxlX3B1dChkZXYsICZzcnFfdGFibGUtPnRhYmxlLCBzcnEtPnNycW4pOworCitlcnJfb3V0OgorCW1seDRfYml0bWFwX2ZyZWUoJnNycV90YWJsZS0+Yml0bWFwLCBzcnEtPnNycW4pOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfc3JxX2FsbG9jKTsKKwordm9pZCBtbHg0X3NycV9mcmVlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9zcnEgKnNycSkKK3sKKwlzdHJ1Y3QgbWx4NF9zcnFfdGFibGUgKnNycV90YWJsZSA9ICZtbHg0X3ByaXYoZGV2KS0+c3JxX3RhYmxlOworCWludCBlcnI7CisKKwllcnIgPSBtbHg0X0hXMlNXX1NSUShkZXYsIE5VTEwsIHNycS0+c3Jxbik7CisJaWYgKGVycikKKwkJbWx4NF93YXJuKGRldiwgIkhXMlNXX1NSUSBmYWlsZWQgKCVkKSBmb3IgU1JRTiAlMDZ4XG4iLCBlcnIsIHNycS0+c3Jxbik7CisKKwlzcGluX2xvY2tfaXJxKCZzcnFfdGFibGUtPmxvY2spOworCXJhZGl4X3RyZWVfZGVsZXRlKCZzcnFfdGFibGUtPnRyZWUsIHNycS0+c3Jxbik7CisJc3Bpbl91bmxvY2tfaXJxKCZzcnFfdGFibGUtPmxvY2spOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNycS0+cmVmY291bnQpKQorCQljb21wbGV0ZSgmc3JxLT5mcmVlKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZzcnEtPmZyZWUpOworCisJbWx4NF90YWJsZV9wdXQoZGV2LCAmc3JxX3RhYmxlLT50YWJsZSwgc3JxLT5zcnFuKTsKKwltbHg0X2JpdG1hcF9mcmVlKCZzcnFfdGFibGUtPmJpdG1hcCwgc3JxLT5zcnFuKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1seDRfc3JxX2ZyZWUpOworCitpbnQgbWx4NF9zcnFfYXJtKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9zcnEgKnNycSwgaW50IGxpbWl0X3dhdGVybWFyaykKK3sKKwlyZXR1cm4gbWx4NF9BUk1fU1JRKGRldiwgc3JxLT5zcnFuLCBsaW1pdF93YXRlcm1hcmspOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9zcnFfYXJtKTsKKworaW50IF9fZGV2aW5pdCBtbHg0X2luaXRfc3JxX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3NycV90YWJsZSAqc3JxX3RhYmxlID0gJm1seDRfcHJpdihkZXYpLT5zcnFfdGFibGU7CisJaW50IGVycjsKKworCXNwaW5fbG9ja19pbml0KCZzcnFfdGFibGUtPmxvY2spOworCUlOSVRfUkFESVhfVFJFRSgmc3JxX3RhYmxlLT50cmVlLCBHRlBfQVRPTUlDKTsKKworCWVyciA9IG1seDRfYml0bWFwX2luaXQoJnNycV90YWJsZS0+Yml0bWFwLCBkZXYtPmNhcHMubnVtX3NycXMsCisJCQkgICAgICAgZGV2LT5jYXBzLm51bV9zcnFzIC0gMSwgZGV2LT5jYXBzLnJlc2VydmVkX3NycXMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtbHg0X2NsZWFudXBfc3JxX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCW1seDRfYml0bWFwX2NsZWFudXAoJm1seDRfcHJpdihkZXYpLT5zcnFfdGFibGUuYml0bWFwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IDE2ZTNjNDMuLmI1M2I3YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpAQCAtMjkwLDYgKzI5MCw4IEBACiAKICNkZWZpbmUgbXlyaTEwZ2VfcGlvX2NvcHkodG8sZnJvbSxzaXplKSBfX2lvd3JpdGU2NF9jb3B5KHRvLGZyb20sc2l6ZS84KQogCitzdGF0aWMgdm9pZCBteXJpMTBnZV9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYmUzMihfX2JlMzIgdmFsLCBfX2JlMzIgX19pb21lbSAqIHApCiB7CiAJX19yYXdfd3JpdGVsKChfX2ZvcmNlIF9fdTMyKSB2YWwsIChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKXApOwpAQCAtMzUzLDYgKzM1NSw4IEBACiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIGlmIChyZXN1bHQgPT0gTVhHRUZXX0NNRF9VTktOT1dOKSB7CiAJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfSBlbHNlIGlmIChyZXN1bHQgPT0gTVhHRUZXX0NNRF9FUlJPUl9VTkFMSUdORUQpIHsKKwkJCXJldHVybiAtRTJCSUc7CiAJCX0gZWxzZSB7CiAJCQlkZXZfZXJyKCZtZ3AtPnBkZXYtPmRldiwKIAkJCQkiY29tbWFuZCAlZCBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLApAQCAtNzEyLDE0ICs3MTYsNzggQEAKIAkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKIH0KIAorc3RhdGljIGludCBteXJpMTBnZV9kbWFfdGVzdChzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCBpbnQgdGVzdF90eXBlKQoreworCXN0cnVjdCBteXJpMTBnZV9jbWQgY21kOworCWludCBzdGF0dXM7CisJdTMyIGxlbjsKKwlzdHJ1Y3QgcGFnZSAqZG1hdGVzdF9wYWdlOworCWRtYV9hZGRyX3QgZG1hdGVzdF9idXM7CisJY2hhciAqdGVzdCA9ICIgIjsKKworCWRtYXRlc3RfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFkbWF0ZXN0X3BhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCWRtYXRlc3RfYnVzID0gcGNpX21hcF9wYWdlKG1ncC0+cGRldiwgZG1hdGVzdF9wYWdlLCAwLCBQQUdFX1NJWkUsCisJCQkJICAgRE1BX0JJRElSRUNUSU9OQUwpOworCisJLyogUnVuIGEgc21hbGwgRE1BIHRlc3QuCisJICogVGhlIG1hZ2ljIG11bHRpcGxpZXJzIHRvIHRoZSBsZW5ndGggdGVsbCB0aGUgZmlybXdhcmUKKwkgKiB0byBkbyBETUEgcmVhZCwgd3JpdGUsIG9yIHJlYWQrd3JpdGUgdGVzdHMuICBUaGUKKwkgKiByZXN1bHRzIGFyZSByZXR1cm5lZCBpbiBjbWQuZGF0YTAuICBUaGUgdXBwZXIgMTYKKwkgKiBiaXRzIG9yIHRoZSByZXR1cm4gaXMgdGhlIG51bWJlciBvZiB0cmFuc2ZlcnMgY29tcGxldGVkLgorCSAqIFRoZSBsb3dlciAxNiBiaXRzIGlzIHRoZSB0aW1lIGluIDAuNXVzIHRpY2tzIHRoYXQgdGhlCisJICogdHJhbnNmZXJzIHRvb2sgdG8gY29tcGxldGUuCisJICovCisKKwlsZW4gPSBtZ3AtPnR4LmJvdW5kYXJ5OworCisJY21kLmRhdGEwID0gTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIoZG1hdGVzdF9idXMpOworCWNtZC5kYXRhMSA9IE1ZUkkxMEdFX0hJR0hQQVJUX1RPX1UzMihkbWF0ZXN0X2J1cyk7CisJY21kLmRhdGEyID0gbGVuICogMHgxMDAwMDsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIHRlc3RfdHlwZSwgJmNtZCwgMCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXRlc3QgPSAicmVhZCI7CisJCWdvdG8gYWJvcnQ7CisJfQorCW1ncC0+cmVhZF9kbWEgPSAoKGNtZC5kYXRhMCA+PiAxNikgKiBsZW4gKiAyKSAvIChjbWQuZGF0YTAgJiAweGZmZmYpOworCWNtZC5kYXRhMCA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKGRtYXRlc3RfYnVzKTsKKwljbWQuZGF0YTEgPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIoZG1hdGVzdF9idXMpOworCWNtZC5kYXRhMiA9IGxlbiAqIDB4MTsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIHRlc3RfdHlwZSwgJmNtZCwgMCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXRlc3QgPSAid3JpdGUiOworCQlnb3RvIGFib3J0OworCX0KKwltZ3AtPndyaXRlX2RtYSA9ICgoY21kLmRhdGEwID4+IDE2KSAqIGxlbiAqIDIpIC8gKGNtZC5kYXRhMCAmIDB4ZmZmZik7CisKKwljbWQuZGF0YTAgPSBNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihkbWF0ZXN0X2J1cyk7CisJY21kLmRhdGExID0gTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKGRtYXRlc3RfYnVzKTsKKwljbWQuZGF0YTIgPSBsZW4gKiAweDEwMDAxOworCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgdGVzdF90eXBlLCAmY21kLCAwKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJdGVzdCA9ICJyZWFkL3dyaXRlIjsKKwkJZ290byBhYm9ydDsKKwl9CisJbWdwLT5yZWFkX3dyaXRlX2RtYSA9ICgoY21kLmRhdGEwID4+IDE2KSAqIGxlbiAqIDIgKiAyKSAvCisJICAgIChjbWQuZGF0YTAgJiAweGZmZmYpOworCithYm9ydDoKKwlwY2lfdW5tYXBfcGFnZShtZ3AtPnBkZXYsIGRtYXRlc3RfYnVzLCBQQUdFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsKKwlwdXRfcGFnZShkbWF0ZXN0X3BhZ2UpOworCisJaWYgKHN0YXR1cyAhPSAwICYmIHRlc3RfdHlwZSAhPSBNWEdFRldfQ01EX1VOQUxJR05FRF9URVNUKQorCQlkZXZfd2FybigmbWdwLT5wZGV2LT5kZXYsICJETUEgJXMgYmVuY2htYXJrIGZhaWxlZDogJWRcbiIsCisJCQkgdGVzdCwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyBpbnQgbXlyaTEwZ2VfcmVzZXQoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKIHsKIAlzdHJ1Y3QgbXlyaTEwZ2VfY21kIGNtZDsKIAlpbnQgc3RhdHVzOwogCXNpemVfdCBieXRlczsKLQl1MzIgbGVuOwotCXN0cnVjdCBwYWdlICpkbWF0ZXN0X3BhZ2U7Ci0JZG1hX2FkZHJfdCBkbWF0ZXN0X2J1czsKIAogCS8qIHRyeSB0byBzZW5kIGEgcmVzZXQgY29tbWFuZCB0byB0aGUgY2FyZCB0byBzZWUgaWYgaXQKIAkgKiBpcyBhbGl2ZSAqLwpAQCAtNzI5LDExICs3OTcsOCBAQAogCQlkZXZfZXJyKCZtZ3AtPnBkZXYtPmRldiwgImZhaWxlZCByZXNldFxuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQotCWRtYXRlc3RfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkbWF0ZXN0X3BhZ2UpCi0JCXJldHVybiAtRU5PTUVNOwotCWRtYXRlc3RfYnVzID0gcGNpX21hcF9wYWdlKG1ncC0+cGRldiwgZG1hdGVzdF9wYWdlLCAwLCBQQUdFX1NJWkUsCi0JCQkJICAgRE1BX0JJRElSRUNUSU9OQUwpOworCisJKHZvaWQpbXlyaTEwZ2VfZG1hX3Rlc3QobWdwLCBNWEdFRldfRE1BX1RFU1QpOwogCiAJLyogTm93IGV4Y2hhbmdlIGluZm9ybWF0aW9uIGFib3V0IGludGVycnVwdHMgICovCiAKQEAgLTc2MSw1MiArODI2LDYgQEAKIAl9CiAJcHV0X2JlMzIoaHRvbmwobWdwLT5pbnRyX2NvYWxfZGVsYXkpLCBtZ3AtPmludHJfY29hbF9kZWxheV9wdHIpOwogCi0JLyogUnVuIGEgc21hbGwgRE1BIHRlc3QuCi0JICogVGhlIG1hZ2ljIG11bHRpcGxpZXJzIHRvIHRoZSBsZW5ndGggdGVsbCB0aGUgZmlybXdhcmUKLQkgKiB0byBkbyBETUEgcmVhZCwgd3JpdGUsIG9yIHJlYWQrd3JpdGUgdGVzdHMuICBUaGUKLQkgKiByZXN1bHRzIGFyZSByZXR1cm5lZCBpbiBjbWQuZGF0YTAuICBUaGUgdXBwZXIgMTYKLQkgKiBiaXRzIG9yIHRoZSByZXR1cm4gaXMgdGhlIG51bWJlciBvZiB0cmFuc2ZlcnMgY29tcGxldGVkLgotCSAqIFRoZSBsb3dlciAxNiBiaXRzIGlzIHRoZSB0aW1lIGluIDAuNXVzIHRpY2tzIHRoYXQgdGhlCi0JICogdHJhbnNmZXJzIHRvb2sgdG8gY29tcGxldGUuCi0JICovCi0KLQlsZW4gPSBtZ3AtPnR4LmJvdW5kYXJ5OwotCi0JY21kLmRhdGEwID0gTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIoZG1hdGVzdF9idXMpOwotCWNtZC5kYXRhMSA9IE1ZUkkxMEdFX0hJR0hQQVJUX1RPX1UzMihkbWF0ZXN0X2J1cyk7Ci0JY21kLmRhdGEyID0gbGVuICogMHgxMDAwMDsKLQlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19ETUFfVEVTVCwgJmNtZCwgMCk7Ci0JaWYgKHN0YXR1cyA9PSAwKQotCQltZ3AtPnJlYWRfZG1hID0gKChjbWQuZGF0YTAgPj4gMTYpICogbGVuICogMikgLwotCQkgICAgKGNtZC5kYXRhMCAmIDB4ZmZmZik7Ci0JZWxzZQotCQlkZXZfd2FybigmbWdwLT5wZGV2LT5kZXYsICJETUEgcmVhZCBiZW5jaG1hcmsgZmFpbGVkOiAlZFxuIiwKLQkJCSBzdGF0dXMpOwotCWNtZC5kYXRhMCA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKGRtYXRlc3RfYnVzKTsKLQljbWQuZGF0YTEgPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIoZG1hdGVzdF9idXMpOwotCWNtZC5kYXRhMiA9IGxlbiAqIDB4MTsKLQlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19ETUFfVEVTVCwgJmNtZCwgMCk7Ci0JaWYgKHN0YXR1cyA9PSAwKQotCQltZ3AtPndyaXRlX2RtYSA9ICgoY21kLmRhdGEwID4+IDE2KSAqIGxlbiAqIDIpIC8KLQkJICAgIChjbWQuZGF0YTAgJiAweGZmZmYpOwotCWVsc2UKLQkJZGV2X3dhcm4oJm1ncC0+cGRldi0+ZGV2LCAiRE1BIHdyaXRlIGJlbmNobWFyayBmYWlsZWQ6ICVkXG4iLAotCQkJIHN0YXR1cyk7Ci0KLQljbWQuZGF0YTAgPSBNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihkbWF0ZXN0X2J1cyk7Ci0JY21kLmRhdGExID0gTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKGRtYXRlc3RfYnVzKTsKLQljbWQuZGF0YTIgPSBsZW4gKiAweDEwMDAxOwotCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0RNQV9URVNULCAmY21kLCAwKTsKLQlpZiAoc3RhdHVzID09IDApCi0JCW1ncC0+cmVhZF93cml0ZV9kbWEgPSAoKGNtZC5kYXRhMCA+PiAxNikgKiBsZW4gKiAyICogMikgLwotCQkgICAgKGNtZC5kYXRhMCAmIDB4ZmZmZik7Ci0JZWxzZQotCQlkZXZfd2FybigmbWdwLT5wZGV2LT5kZXYsCi0JCQkgIkRNQSByZWFkL3dyaXRlIGJlbmNobWFyayBmYWlsZWQ6ICVkXG4iLCBzdGF0dXMpOwotCi0JcGNpX3VubWFwX3BhZ2UobWdwLT5wZGV2LCBkbWF0ZXN0X2J1cywgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7Ci0JcHV0X3BhZ2UoZG1hdGVzdF9wYWdlKTsKLQogCW1lbXNldChtZ3AtPnJ4X2RvbmUuZW50cnksIDAsIGJ5dGVzKTsKIAogCS8qIHJlc2V0IG1jcC9kcml2ZXIgc2hhcmVkIHN0YXRlIGJhY2sgdG8gMCAqLwpAQCAtODIwLDEwICs4MzksOCBAQAogCW1ncC0+cnhfZG9uZS5jbnQgPSAwOwogCW1ncC0+bGlua19jaGFuZ2VzID0gMDsKIAlzdGF0dXMgPSBteXJpMTBnZV91cGRhdGVfbWFjX2FkZHJlc3MobWdwLCBtZ3AtPmRldi0+ZGV2X2FkZHIpOwotCW15cmkxMGdlX2NoYW5nZV9wcm9taXNjKG1ncCwgMCwgMCk7CiAJbXlyaTEwZ2VfY2hhbmdlX3BhdXNlKG1ncCwgbWdwLT5wYXVzZSk7Ci0JaWYgKG1ncC0+YWRvcHRlZF9yeF9maWx0ZXJfYnVnKQotCQkodm9pZClteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19FTkFCTEVfQUxMTVVMVEksICZjbWQsIDEpOworCW15cmkxMGdlX3NldF9tdWx0aWNhc3RfbGlzdChtZ3AtPmRldik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTM1NSw3ICsxMzcyLDkgQEAKIAkidHhfcmVxIiwgInR4X2RvbmUiLCAicnhfc21hbGxfY250IiwgInJ4X2JpZ19jbnQiLAogCSJ3YWtlX3F1ZXVlIiwgInN0b3BfcXVldWUiLCAid2F0Y2hkb2dfcmVzZXRzIiwgInR4X2xpbmVhcml6ZWQiLAogCSJsaW5rX2NoYW5nZXMiLCAibGlua191cCIsICJkcm9wcGVkX2xpbmtfb3ZlcmZsb3ciLAotCSJkcm9wcGVkX2xpbmtfZXJyb3Jfb3JfZmlsdGVyZWQiLCAiZHJvcHBlZF9tdWx0aWNhc3RfZmlsdGVyZWQiLAorCSJkcm9wcGVkX2xpbmtfZXJyb3Jfb3JfZmlsdGVyZWQiLAorCSJkcm9wcGVkX3BhdXNlIiwgImRyb3BwZWRfYmFkX3BoeSIsICJkcm9wcGVkX2JhZF9jcmMzMiIsCisJImRyb3BwZWRfdW5pY2FzdF9maWx0ZXJlZCIsICJkcm9wcGVkX211bHRpY2FzdF9maWx0ZXJlZCIsCiAJImRyb3BwZWRfcnVudCIsICJkcm9wcGVkX292ZXJydW4iLCAiZHJvcHBlZF9ub19zbWFsbF9idWZmZXIiLAogCSJkcm9wcGVkX25vX2JpZ19idWZmZXIiCiB9OwpAQCAtMTQxMiw2ICsxNDMxLDExIEBACiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCludG9obChtZ3AtPmZ3X3N0YXRzLT5kcm9wcGVkX2xpbmtfb3ZlcmZsb3cpOwogCWRhdGFbaSsrXSA9CiAJICAgICh1bnNpZ25lZCBpbnQpbnRvaGwobWdwLT5md19zdGF0cy0+ZHJvcHBlZF9saW5rX2Vycm9yX29yX2ZpbHRlcmVkKTsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmRyb3BwZWRfcGF1c2UpOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbnRvaGwobWdwLT5md19zdGF0cy0+ZHJvcHBlZF9iYWRfcGh5KTsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmRyb3BwZWRfYmFkX2NyYzMyKTsKKwlkYXRhW2krK10gPQorCSAgICAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmRyb3BwZWRfdW5pY2FzdF9maWx0ZXJlZCk7CiAJZGF0YVtpKytdID0KIAkgICAgKHVuc2lnbmVkIGludCludG9obChtZ3AtPmZ3X3N0YXRzLT5kcm9wcGVkX211bHRpY2FzdF9maWx0ZXJlZCk7CiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCludG9obChtZ3AtPmZ3X3N0YXRzLT5kcm9wcGVkX3J1bnQpOwpAQCAtMTQ0OCw2ICsxNDcyLDcgQEAKIAkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCiAJLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3N0cmluZ3MgPSBteXJpMTBnZV9nZXRfc3RyaW5ncywKIAkuZ2V0X3N0YXRzX2NvdW50ID0gbXlyaTEwZ2VfZ2V0X3N0YXRzX2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IG15cmkxMGdlX2dldF9ldGh0b29sX3N0YXRzLApAQCAtMjI3Niw3ICsyMzAxLDcgQEAKIAlteXJpMTBnZV9jaGFuZ2VfcHJvbWlzYyhtZ3AsIGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQywgMSk7CiAKIAkvKiBUaGlzIGZpcm13YXJlIGlzIGtub3duIHRvIG5vdCBzdXBwb3J0IG11bHRpY2FzdCAqLwotCWlmICghbWdwLT5md19tdWx0aWNhc3Rfc3VwcG9ydCB8fCBtZ3AtPmFkb3B0ZWRfcnhfZmlsdGVyX2J1ZykKKwlpZiAoIW1ncC0+ZndfbXVsdGljYXN0X3N1cHBvcnQpCiAJCXJldHVybjsKIAogCS8qIERpc2FibGUgbXVsdGljYXN0IGZpbHRlcmluZyAqLwpAQCAtMjI4OCw3ICsyMzEzLDcgQEAKIAkJZ290byBhYm9ydDsKIAl9CiAKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgbWdwLT5hZG9wdGVkX3J4X2ZpbHRlcl9idWcpIHsKIAkJLyogcmVxdWVzdCB0byBkaXNhYmxlIG11bHRpY2FzdCBmaWx0ZXJpbmcsIHNvIHF1aXQgaGVyZSAqLwogCQlyZXR1cm47CiAJfQpAQCAtMjQ2MSw4ICsyNDg2LDYgQEAKIAllcnJfY2FwIHw9IFBDSV9FUlJfQ0FQX0VDUkNfR0VORTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgY2FwICsgUENJX0VSUl9DQVAsIGVycl9jYXApOwogCWRldl9pbmZvKGRldiwgIkVuYWJsZWQgRUNSQyBvbiB1cHN0cmVhbSBicmlkZ2UgJXNcbiIsIHBjaV9uYW1lKGJyaWRnZSkpOwotCW1ncC0+dHguYm91bmRhcnkgPSA0MDk2OwotCW1ncC0+ZndfbmFtZSA9IG15cmkxMGdlX2Z3X2FsaWduZWQ7CiB9CiAKIC8qCkBAIC0yNDg0LDIyICsyNTA3LDcwIEBACiAgKiBmaXJtd2FyZSBpbWFnZSwgYW5kIHNldCB0eC5ib3VuZGFyeSB0byA0S0IuCiAgKi8KIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U1MDAwX1BDSUUyMyAweDI1ZjcKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FNTAwMF9QQ0lFNDcgMHgyNWZhCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNjMwMEVTQl9QQ0lFRTEgMHgzNTEwCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNjMwMEVTQl9QQ0lFRTQgMHgzNTFiCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRTMwMDBfUENJRQkweDI3NzkKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FMzAxMF9QQ0lFCTB4Mjc3YQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMjEwMF9QQ0lFX0ZJUlNUIDB4MTQwCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQyMTAwX1BDSUVfTEFTVCAweDE0MgotCi1zdGF0aWMgdm9pZCBteXJpMTBnZV9zZWxlY3RfZmlybXdhcmUoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKK3N0YXRpYyB2b2lkIG15cmkxMGdlX2Zpcm13YXJlX3Byb2JlKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IG1ncC0+cGRldi0+YnVzLT5zZWxmOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWdwLT5wZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJaW50IGNhcCwgc3RhdHVzOworCXUxNiB2YWw7CiAKKwltZ3AtPnR4LmJvdW5kYXJ5ID0gNDA5NjsKKwkvKgorCSAqIFZlcmlmeSB0aGUgbWF4IHJlYWQgcmVxdWVzdCBzaXplIHdhcyBzZXQgdG8gNEtCCisJICogYmVmb3JlIHRyeWluZyB0aGUgdGVzdCB3aXRoIDRLQi4KKwkgKi8KKwljYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAoY2FwIDwgNjQpIHsKKwkJZGV2X2VycihkZXYsICJCYWQgUENJX0NBUF9JRF9FWFAgbG9jYXRpb24gJWRcbiIsIGNhcCk7CisJCWdvdG8gYWJvcnQ7CisJfQorCXN0YXR1cyA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIGNhcCArIFBDSV9FWFBfREVWQ1RMLCAmdmFsKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCByZWFkIG1heCByZWFkIHJlcSBzaXplOiAlZFxuIiwgc3RhdHVzKTsKKwkJZ290byBhYm9ydDsKKwl9CisJaWYgKCh2YWwgJiAoNSA8PCAxMikpICE9ICg1IDw8IDEyKSkgeworCQlkZXZfd2FybihkZXYsICJNYXggUmVhZCBSZXF1ZXN0IHNpemUgIT0gNDA5NiAoMHgleClcbiIsIHZhbCk7CisJCW1ncC0+dHguYm91bmRhcnkgPSAyMDQ4OworCX0KKwkvKgorCSAqIGxvYWQgdGhlIG9wdGltaXplZCBmaXJtd2FyZSAod2hpY2ggYXNzdW1lcyBhbGlnbmVkIFBDSWUKKwkgKiBjb21wbGV0aW9ucykgaW4gb3JkZXIgdG8gc2VlIGlmIGl0IHdvcmtzIG9uIHRoaXMgaG9zdC4KKwkgKi8KKwltZ3AtPmZ3X25hbWUgPSBteXJpMTBnZV9md19hbGlnbmVkOworCXN0YXR1cyA9IG15cmkxMGdlX2xvYWRfZmlybXdhcmUobWdwKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZ290byBhYm9ydDsKKwl9CisKKwkvKgorCSAqIEVuYWJsZSBFQ1JDIGlmIHBvc3NpYmxlCisJICovCisJbXlyaTEwZ2VfZW5hYmxlX2VjcmMobWdwKTsKKworCS8qCisJICogUnVuIGEgRE1BIHRlc3Qgd2hpY2ggd2F0Y2hlcyBmb3IgdW5hbGlnbmVkIGNvbXBsZXRpb25zIGFuZAorCSAqIGFib3J0cyBvbiB0aGUgZmlyc3Qgb25lIHNlZW4uCisJICovCisKKwlzdGF0dXMgPSBteXJpMTBnZV9kbWFfdGVzdChtZ3AsIE1YR0VGV19DTURfVU5BTElHTkVEX1RFU1QpOworCWlmIChzdGF0dXMgPT0gMCkKKwkJcmV0dXJuOwkJLyoga2VlcCB0aGUgYWxpZ25lZCBmaXJtd2FyZSAqLworCisJaWYgKHN0YXR1cyAhPSAtRTJCSUcpCisJCWRldl93YXJuKGRldiwgIkRNQSB0ZXN0IGZhaWxlZDogJWRcbiIsIHN0YXR1cyk7CisJaWYgKHN0YXR1cyA9PSAtRU5PU1lTKQorCQlkZXZfd2FybihkZXYsICJGYWxsaW5nIGJhY2sgdG8gZXRocCEgIgorCQkJICJQbGVhc2UgaW5zdGFsbCB1cCB0byBkYXRlIGZ3XG4iKTsKK2Fib3J0OgorCS8qIGZhbGwgYmFjayB0byB1c2luZyB0aGUgdW5hbGlnbmVkIGZpcm13YXJlICovCiAJbWdwLT50eC5ib3VuZGFyeSA9IDIwNDg7CiAJbWdwLT5md19uYW1lID0gbXlyaTEwZ2VfZndfdW5hbGlnbmVkOwogCit9CisKK3N0YXRpYyB2b2lkIG15cmkxMGdlX3NlbGVjdF9maXJtd2FyZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQorewogCWlmIChteXJpMTBnZV9mb3JjZV9maXJtd2FyZSA9PSAwKSB7CiAJCWludCBsaW5rX3dpZHRoLCBleHBfY2FwOwogCQl1MTYgbG5rOwpAQCAtMjUwOCw4ICsyNTc5LDYgQEAKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQobWdwLT5wZGV2LCBleHBfY2FwICsgUENJX0VYUF9MTktTVEEsICZsbmspOwogCQlsaW5rX3dpZHRoID0gKGxuayA+PiA0KSAmIDB4M2Y7CiAKLQkJbXlyaTEwZ2VfZW5hYmxlX2VjcmMobWdwKTsKLQogCQkvKiBDaGVjayB0byBzZWUgaWYgTGluayBpcyBsZXNzIHRoYW4gOCBvciBpZiB0aGUKIAkJICogdXBzdHJlYW0gYnJpZGdlIGlzIGtub3duIHRvIHByb3ZpZGUgYWxpZ25lZAogCQkgKiBjb21wbGV0aW9ucyAqLwpAQCAtMjUxOCw0NiArMjU4Nyw4IEBACiAJCQkJIGxpbmtfd2lkdGgpOwogCQkJbWdwLT50eC5ib3VuZGFyeSA9IDQwOTY7CiAJCQltZ3AtPmZ3X25hbWUgPSBteXJpMTBnZV9md19hbGlnbmVkOwotCQl9IGVsc2UgaWYgKGJyaWRnZSAmJgotCQkJICAgLyogU2VydmVyV29ya3MgSFQyMDAwL0hUMTAwMCAqLwotCQkJICAgKChicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTCi0JCQkgICAgICYmIGJyaWRnZS0+ZGV2aWNlID09Ci0JCQkgICAgIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQyMDAwX1BDSUUpCi0JCQkgICAgLyogU2VydmVyV29ya3MgSFQyMTAwICovCi0JCQkgICAgfHwgKGJyaWRnZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MKLQkJCQkmJiBicmlkZ2UtPmRldmljZSA+PQotCQkJCVBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQyMTAwX1BDSUVfRklSU1QKLQkJCQkmJiBicmlkZ2UtPmRldmljZSA8PQotCQkJCVBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQyMTAwX1BDSUVfTEFTVCkKLQkJCSAgICAvKiBBbGwgSW50ZWwgRTMwMDAvRTMwMTAgUENJRSBwb3J0cyAqLwotCQkJICAgIHx8IChicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMCi0JCQkJJiYgKGJyaWRnZS0+ZGV2aWNlID09Ci0JCQkJICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfRTMwMDBfUENJRQotCQkJCSAgICB8fCBicmlkZ2UtPmRldmljZSA9PQotCQkJCSAgICBQQ0lfREVWSUNFX0lEX0lOVEVMX0UzMDEwX1BDSUUpKQotCQkJICAgIC8qIEFsbCBJbnRlbCA2MzEwLzYzMTEvNjMyMUVTQiBQQ0lFIHBvcnRzICovCi0JCQkgICAgfHwgKGJyaWRnZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwKLQkJCQkmJiBicmlkZ2UtPmRldmljZSA+PQotCQkJCVBDSV9ERVZJQ0VfSURfSU5URUxfNjMwMEVTQl9QQ0lFRTEKLQkJCQkmJiBicmlkZ2UtPmRldmljZSA8PQotCQkJCVBDSV9ERVZJQ0VfSURfSU5URUxfNjMwMEVTQl9QQ0lFRTQpCi0JCQkgICAgLyogQWxsIEludGVsIEU1MDAwIFBDSUUgcG9ydHMgKi8KLQkJCSAgICB8fCAoYnJpZGdlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTAotCQkJCSYmIGJyaWRnZS0+ZGV2aWNlID49Ci0JCQkJUENJX0RFVklDRV9JRF9JTlRFTF9FNTAwMF9QQ0lFMjMKLQkJCQkmJiBicmlkZ2UtPmRldmljZSA8PQotCQkJCVBDSV9ERVZJQ0VfSURfSU5URUxfRTUwMDBfUENJRTQ3KSkpIHsKLQkJCWRldl9pbmZvKCZtZ3AtPnBkZXYtPmRldiwKLQkJCQkgIkFzc3VtaW5nIGFsaWduZWQgY29tcGxldGlvbnMgKDB4JXg6MHgleClcbiIsCi0JCQkJIGJyaWRnZS0+dmVuZG9yLCBicmlkZ2UtPmRldmljZSk7Ci0JCQltZ3AtPnR4LmJvdW5kYXJ5ID0gNDA5NjsKLQkJCW1ncC0+ZndfbmFtZSA9IG15cmkxMGdlX2Z3X2FsaWduZWQ7Ci0JCX0gZWxzZSBpZiAoYnJpZGdlICYmCi0JCQkgICBicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NHSSAmJgotCQkJICAgYnJpZGdlLT5kZXZpY2UgPT0gMHg0MDAyIC8qIFRJT0NFIHBjaWUtcG9ydCAqLyApIHsKLQkJCS8qIHRoaXMgcGNpZSBicmlkZ2UgZG9lcyBub3Qgc3VwcG9ydCA0SyByZG1hIHJlcXVlc3QgKi8KLQkJCW1ncC0+dHguYm91bmRhcnkgPSAyMDQ4OwotCQkJbWdwLT5md19uYW1lID0gbXlyaTEwZ2VfZndfYWxpZ25lZDsKKwkJfSBlbHNlIHsKKwkJCW15cmkxMGdlX2Zpcm13YXJlX3Byb2JlKG1ncCk7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAobXlyaTEwZ2VfZm9yY2VfZmlybXdhcmUgPT0gMSkgewpAQCAtMjgyNSw3ICsyODU2LDYgQEAKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAkJZ290byBhYm9ydF93aXRoX25ldGRldjsKIAl9Ci0JbXlyaTEwZ2Vfc2VsZWN0X2Zpcm13YXJlKG1ncCk7CiAKIAkvKiBGaW5kIHRoZSB2ZW5kb3Itc3BlY2lmaWMgY2FwIHNvIHdlIGNhbiBjaGVjawogCSAqIHRoZSByZWJvb3QgcmVnaXN0ZXIgbGF0ZXIgb24gKi8KQEAgLTI5MTksNiArMjk0OSw4IEBACiAJCWdvdG8gYWJvcnRfd2l0aF9pb3JlbWFwOwogCW1lbXNldChtZ3AtPnJ4X2RvbmUuZW50cnksIDAsIGJ5dGVzKTsKIAorCW15cmkxMGdlX3NlbGVjdF9maXJtd2FyZShtZ3ApOworCiAJc3RhdHVzID0gbXlyaTEwZ2VfbG9hZF9maXJtd2FyZShtZ3ApOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3AuaCBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcC5oCmluZGV4IDI5NDYzYjMuLmExZDJhMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcC5oCisrKyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcC5oCkBAIC0yMDAsNiArMjAwLDEzIEBACiAJLyogZGF0YTAsIGRhdGExID0gYnVzIGFkZHIsCiAJICogZGF0YTIgPSBzaXplb2Yoc3RydWN0IG1jcF9pcnFfZGF0YSkgZnJvbSBkcml2ZXIgcG9pbnQgb2YgdmlldywgYWxsb3dzCiAJICogYWRkaW5nIG5ldyBzdHVmZiB0byBtY3BfaXJxX2RhdGEgd2l0aG91dCBjaGFuZ2luZyB0aGUgQUJJICovCisKKwlNWEdFRldfQ01EX1VOQUxJR05FRF9URVNULAorCS8qIHNhbWUgdGhhbiBETUFfVEVTVCAoc2FtZSBhcmdzKSBidXQgYWJvcnQgd2l0aCBVTkFMSUdORUQgb24gdW5hbGlnbmVkCisJICogY2hpcHNldCAqLworCisJTVhHRUZXX0NNRF9VTkFMSUdORURfU1RBVFVTCisJICAgIC8qIHJldHVybiBkYXRhID0gYm9vbGVhbiwgdHJ1ZSBpZiB0aGUgY2hpcHNldCBpcyBrbm93biB0byBiZSB1bmFsaWduZWQgKi8KIH07CiAKIGVudW0gbXlyaTEwZ2VfbWNwX2NtZF9zdGF0dXMgewpAQCAtMjEyLDE4ICsyMTksMjcgQEAKIAlNWEdFRldfQ01EX0VSUk9SX0hBU0hfRVJST1IsCiAJTVhHRUZXX0NNRF9FUlJPUl9CQURfUE9SVCwKIAlNWEdFRldfQ01EX0VSUk9SX1JFU09VUkNFUywKLQlNWEdFRldfQ01EX0VSUk9SX01VTFRJQ0FTVAorCU1YR0VGV19DTURfRVJST1JfTVVMVElDQVNULAorCU1YR0VGV19DTURfRVJST1JfVU5BTElHTkVECiB9OwogCiAjZGVmaW5lIE1YR0VGV19PTERfSVJRX0RBVEFfTEVOIDQwCiAKIHN0cnVjdCBtY3BfaXJxX2RhdGEgewogCS8qIGFkZCBuZXcgY291bnRlcnMgYXQgdGhlIGJlZ2lubmluZyAqLwotCV9fYmUzMiBmdXR1cmVfdXNlWzVdOworCV9fYmUzMiBmdXR1cmVfdXNlWzFdOworCV9fYmUzMiBkcm9wcGVkX3BhdXNlOworCV9fYmUzMiBkcm9wcGVkX3VuaWNhc3RfZmlsdGVyZWQ7CisJX19iZTMyIGRyb3BwZWRfYmFkX2NyYzMyOworCV9fYmUzMiBkcm9wcGVkX2JhZF9waHk7CiAJX19iZTMyIGRyb3BwZWRfbXVsdGljYXN0X2ZpbHRlcmVkOwogCS8qIDQwIEJ5dGVzICovCiAJX19iZTMyIHNlbmRfZG9uZV9jb3VudDsKIAorI2RlZmluZSBNWEdFRldfTElOS19ET1dOIDAKKyNkZWZpbmUgTVhHRUZXX0xJTktfVVAgMQorI2RlZmluZSBNWEdFRldfTElOS19NWVJJTkVUIDIKKyNkZWZpbmUgTVhHRUZXX0xJTktfVU5LTk9XTiAzCiAJX19iZTMyIGxpbmtfdXA7CiAJX19iZTMyIGRyb3BwZWRfbGlua19vdmVyZmxvdzsKIAlfX2JlMzIgZHJvcHBlZF9saW5rX2Vycm9yX29yX2ZpbHRlcmVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCmluZGV4IGE4ZDdmZjIuLjRjZjBkM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYworKysgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKQEAgLTgxLDYgKzgxLDggQEAKICAgIFNldHRpbmcgdG8gPiAxNTE4IGVmZmVjdGl2ZWx5IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4gKi8KIHN0YXRpYyBpbnQgcnhfY29weWJyZWFrOwogCitzdGF0aWMgaW50IGRzcGNmZ193b3JrYXJvdW5kID0gMTsKKwogLyogVXNlZCB0byBwYXNzIHRoZSBtZWRpYSB0eXBlLCBldGMuCiAgICBCb3RoICdvcHRpb25zW10nIGFuZCAnZnVsbF9kdXBsZXhbXScgc2hvdWxkIGV4aXN0IGZvciBkcml2ZXIKICAgIGludGVyb3BlcmFiaWxpdHkuCkBAIC0xMjksNyArMTMxLDYgQEAKICAgS0VSTl9JTkZPIERSVl9OQU1FICIgZHA4MzgxeCBkcml2ZXIsIHZlcnNpb24gIgogICAgICAgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiXG4iCiAgIEtFUk5fSU5GTyAiICBvcmlnaW5hbGx5IGJ5IERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCi0gIEtFUk5fSU5GTyAiICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL25hdHNlbWkuaHRtbFxuIgogICBLRVJOX0lORk8gIiAgMi40Lngga2VybmVsIHBvcnQgYnkgSmVmZiBHYXJ6aWssIFRqZWVyZCBNdWxkZXJcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7CkBAIC0xMzksMTIgKzE0MCwxNCBAQAogbW9kdWxlX3BhcmFtKG10dSwgaW50LCAwKTsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIG1vZHVsZV9wYXJhbShyeF9jb3B5YnJlYWssIGludCwgMCk7Cittb2R1bGVfcGFyYW0oZHNwY2ZnX3dvcmthcm91bmQsIGludCwgMSk7CiBtb2R1bGVfcGFyYW1fYXJyYXkob3B0aW9ucywgaW50LCBOVUxMLCAwKTsKIG1vZHVsZV9wYXJhbV9hcnJheShmdWxsX2R1cGxleCwgaW50LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobXR1LCAiRFA4MzgxeCBNVFUgKGFsbCBib2FyZHMpIik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRFA4MzgxeCBkZWZhdWx0IGRlYnVnIGxldmVsIik7CiBNT0RVTEVfUEFSTV9ERVNDKHJ4X2NvcHlicmVhaywKIAkiRFA4MzgxeCBjb3B5IGJyZWFrcG9pbnQgZm9yIGNvcHktb25seS10aW55LWZyYW1lcyIpOworTU9EVUxFX1BBUk1fREVTQyhkc3BjZmdfd29ya2Fyb3VuZCwgIkRQODM4MXg6IGNvbnRyb2wgRHNwQ2ZnIHdvcmthcm91bmQiKTsKIE1PRFVMRV9QQVJNX0RFU0Mob3B0aW9ucywKIAkiRFA4MzgxeDogQml0cyAwLTM6IG1lZGlhIHR5cGUsIGJpdCAxNzogZnVsbCBkdXBsZXgiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZnVsbF9kdXBsZXgsICJEUDgzODF4IGZ1bGwgZHVwbGV4IHNldHRpbmcocykgKDEpIik7CkBAIC01OTAsNiArNTkzLDcgQEAKIAl1MzIgc3JyOwogCS8qIGV4cGVjdGVkIERTUENGRyB2YWx1ZSAqLwogCXUxNiBkc3BjZmc7CisJaW50IGRzcGNmZ193b3JrYXJvdW5kOwogCS8qIHBhcm1zIHNhdmVkIGluIGV0aHRvb2wgZm9ybWF0ICovCiAJdTE2CXNwZWVkOwkJLyogVGhlIGZvcmNlZCBzcGVlZCwgMTBNYiwgMTAwTWIsIGdpZ2FiaXQgKi8KIAl1OAlkdXBsZXg7CQkvKiBEdXBsZXgsIGhhbGYgb3IgZnVsbCAqLwpAQCAtNjU2LDYgKzY2MCw1NiBAQAogc3RhdGljIGludCBuZXRkZXZfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqYnVmKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHM7CiAKKyNkZWZpbmUgTkFUU0VNSV9BVFRSKF9uYW1lKSBcCitzdGF0aWMgc3NpemVfdCBuYXRzZW1pX3Nob3dfIyNfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKyAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOyBcCisJIHN0YXRpYyBzc2l6ZV90IG5hdHNlbWlfc2V0XyMjX25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCisJICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7IFwKKwkgc3RhdGljIERFVklDRV9BVFRSKF9uYW1lLCAwNjQ0LCBuYXRzZW1pX3Nob3dfIyNfbmFtZSwgbmF0c2VtaV9zZXRfIyNfbmFtZSkKKworI2RlZmluZSBOQVRTRU1JX0NSRUFURV9GSUxFKF9kZXYsIF9uYW1lKSBcCisgICAgICAgICBkZXZpY2VfY3JlYXRlX2ZpbGUoJl9kZXYtPmRldiwgJmRldl9hdHRyXyMjX25hbWUpCisjZGVmaW5lIE5BVFNFTUlfUkVNT1ZFX0ZJTEUoX2RldiwgX25hbWUpIFwKKyAgICAgICAgIGRldmljZV9jcmVhdGVfZmlsZSgmX2Rldi0+ZGV2LCAmZGV2X2F0dHJfIyNfbmFtZSkKKworTkFUU0VNSV9BVFRSKGRzcGNmZ193b3JrYXJvdW5kKTsKKworc3RhdGljIHNzaXplX3QgbmF0c2VtaV9zaG93X2RzcGNmZ193b3JrYXJvdW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIAkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgCisJCQkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBucC0+ZHNwY2ZnX3dvcmthcm91bmQgPyAib24iIDogIm9mZiIpOworfQorCitzdGF0aWMgc3NpemVfdCBuYXRzZW1pX3NldF9kc3BjZmdfd29ya2Fyb3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisJaW50IG5ld19zZXR0aW5nOworCXUzMiBmbGFnczsKKworICAgICAgICAvKiBGaW5kIG91dCB0aGUgbmV3IHNldHRpbmcgKi8KKyAgICAgICAgaWYgKCFzdHJuY21wKCJvbiIsIGJ1ZiwgY291bnQgLSAxKSB8fCAhc3RybmNtcCgiMSIsIGJ1ZiwgY291bnQgLSAxKSkKKyAgICAgICAgICAgICAgICBuZXdfc2V0dGluZyA9IDE7CisgICAgICAgIGVsc2UgaWYgKCFzdHJuY21wKCJvZmYiLCBidWYsIGNvdW50IC0gMSkKKyAgICAgICAgICAgICAgICAgfHwgIXN0cm5jbXAoIjAiLCBidWYsIGNvdW50IC0gMSkpCisJCW5ld19zZXR0aW5nID0gMDsKKwllbHNlCisgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDsgCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKworCW5wLT5kc3BjZmdfd29ya2Fyb3VuZCA9IG5ld19zZXR0aW5nOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKm5zX2lvYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiAodm9pZCBfX2lvbWVtICopIGRldi0+YmFzZV9hZGRyOwpAQCAtODIwLDYgKzg3NCw3IEBACiAJCW5wLT5pZ25vcmVfcGh5ID0gMTsKIAllbHNlCiAJCW5wLT5pZ25vcmVfcGh5ID0gMDsKKwlucC0+ZHNwY2ZnX3dvcmthcm91bmQgPSBkc3BjZmdfd29ya2Fyb3VuZDsKIAogCS8qIEluaXRpYWwgcG9ydDoKIAkgKiAtIElmIGNvbmZpZ3VyZWQgdG8gaWdub3JlIHRoZSBQSFkgc2V0IHVwIGZvciBleHRlcm5hbC4KQEAgLTg5OSw2ICs5NTQsOSBAQAogCWlmIChpKQogCQlnb3RvIGVycl9yZWdpc3Rlcl9uZXRkZXY7CiAKKwlpZiAoTkFUU0VNSV9DUkVBVEVfRklMRShwZGV2LCBkc3BjZmdfd29ya2Fyb3VuZCkpCisJCWdvdG8gZXJyX2NyZWF0ZV9maWxlOworCiAJaWYgKG5ldGlmX21zZ19kcnYobnApKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIm5hdHNlbWkgJXM6ICVzIGF0ICUjMDhseCAoJXMpLCAiLAogCQkJZGV2LT5uYW1lLCBuYXRzZW1pX3BjaV9pbmZvW2NoaXBfaWR4XS5uYW1lLCBpb3N0YXJ0LApAQCAtOTE1LDYgKzk3Myw5IEBACiAJfQogCXJldHVybiAwOwogCisgZXJyX2NyZWF0ZV9maWxlOgorIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCiAgZXJyX3JlZ2lzdGVyX25ldGRldjoKIAlpb3VubWFwKGlvYWRkcik7CiAKQEAgLTE3MjcsNyArMTc4OCw4IEBACiAgKiAgICBJdCBzZWVtcyB0aGF0IGEgcmVmZXJlbmNlIHNldCBmb3IgdGhpcyBjaGlwIHdlbnQgb3V0IHdpdGggaW5jb3JyZWN0IGluZm8sCiAgKiAgICBhbmQgdGhlcmUgZXhpc3QgYm9hcmRzIHRoYXQgYXJlbid0IHF1aXRlIHJpZ2h0LiAgQW4gdW5leHBlY3RlZCB2b2x0YWdlCiAgKiAgICBkcm9wIGNhbiBjYXVzZSB0aGUgUEhZIHRvIGdldCBpdHNlbGYgaW4gYSB3ZWlyZCBzdGF0ZSAoYmFzaWNhbGx5IHJlc2V0KS4KLSAqICAgIE5PVEU6IHRoaXMgb25seSBzZWVtcyB0byBhZmZlY3QgcmV2QyBjaGlwcy4KKyAqICAgIE5PVEU6IHRoaXMgb25seSBzZWVtcyB0byBhZmZlY3QgcmV2QyBjaGlwcy4gIFRoZSB1c2VyIGNhbiBkaXNhYmxlCisgKiAgICB0aGlzIGNoZWNrIHZpYSBkc3BjZmdfd29ya2Fyb3VuZCBzeXNmcyBvcHRpb24uCiAgKiAzKSBjaGVjayBvZiBkZWF0aCBvZiB0aGUgUlggcGF0aCBkdWUgdG8gT09NCiAgKi8KIHN0YXRpYyB2b2lkIG5ldGRldl90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC0xNzUzLDEwICsxODE1LDEwIEBACiAJCXdyaXRldygxLCBpb2FkZHIrUEdTRUwpOwogCQlkc3BjZmcgPSByZWFkdyhpb2FkZHIrRFNQQ0ZHKTsKIAkJd3JpdGV3KDAsIGlvYWRkcitQR1NFTCk7Ci0JCWlmIChkc3BjZmcgIT0gbnAtPmRzcGNmZykgeworCQlpZiAobnAtPmRzcGNmZ193b3JrYXJvdW5kICYmIGRzcGNmZyAhPSBucC0+ZHNwY2ZnKSB7CiAJCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewogCQkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwotCQkJCWlmIChuZXRpZl9tc2dfaHcobnApKQorCQkJCWlmIChuZXRpZl9tc2dfZHJ2KG5wKSkKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogcG9zc2libGUgcGh5IHJlc2V0OiAiCiAJCQkJCQkicmUtaW5pdGlhbGl6aW5nXG4iLCBkZXYtPm5hbWUpOwogCQkJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKQEAgLTMxNTcsNiArMzIxOSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl2b2lkIF9faW9tZW0gKiBpb2FkZHIgPSBuc19pb2FkZHIoZGV2KTsKIAorCU5BVFNFTUlfUkVNT1ZFX0ZJTEUocGRldiwgZHNwY2ZnX3dvcmthcm91bmQpOwogCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMgKHBkZXYpOwogCWlvdW5tYXAoaW9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lLmMgYi9kcml2ZXJzL25ldC9uZS5jCmluZGV4IGE1YzQxOTkuLmM5Zjc0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lLmMKKysrIGIvZHJpdmVycy9uZXQvbmUuYwpAQCAtNTEsMTQgKzUxLDExIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19UT1NISUJBX1JCVFg0OTI3KSB8fCBkZWZpbmVkKENPTkZJR19UT1NISUJBX1JCVFg0OTM4KQotI2luY2x1ZGUgPGFzbS90eDQ5MzgvcmJ0eDQ5MzguaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAiODM5MC5oIgogCiAjZGVmaW5lIERSVl9OQU1FICJuZSIKQEAgLTc3LDggKzc0LDEzIEBACiAvKiBEbyB3ZSBoYXZlIGEgbm9uIHN0ZC4gYW1vdW50IG9mIG1lbW9yeT8gKGluIHVuaXRzIG9mIDI1NiBieXRlIHBhZ2VzKSAqLwogLyogI2RlZmluZSBQQUNLRVRCVUZfTUVNU0laRQkweDQwICovCiAKKyNpZiAhZGVmaW5lZChNT0RVTEUpICYmIChkZWZpbmVkKENPTkZJR19JU0EpIHx8IGRlZmluZWQoQ09ORklHX00zMlIpKQorLyogRG8gd2UgbmVlZCBhIHBvcnRsaXN0IGZvciB0aGUgSVNBIGF1dG8tcHJvYmUgPyAqLworI2RlZmluZSBORUVEU19QT1JUTElTVAorI2VuZGlmCisKIC8qIEEgemVyby10ZXJtaW5hdGVkIGxpc3Qgb2YgSS9PIGFkZHJlc3NlcyB0byBiZSBwcm9iZWQgYXQgYm9vdC4gKi8KLSNpZm5kZWYgTU9EVUxFCisjaWZkZWYgTkVFRFNfUE9SVExJU1QKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0Y2FyZF9wb3J0bGlzdFtdIF9faW5pdGRhdGEgPSB7CiAJMHgzMDAsIDB4MjgwLCAweDMyMCwgMHgzNDAsIDB4MzYwLCAweDM4MCwgMAogfTsKQEAgLTE0Niw3ICsxNDgsNyBAQAogIyAgZGVmaW5lIERDUl9WQUwgMHg0OQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgbmVfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpOworc3RhdGljIGludCBuZV9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBpb2FkZHIpOwogc3RhdGljIGludCBuZV9wcm9iZV9pc2FwbnAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0YXRpYyBpbnQgbmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTE4NCw4ICsxODYsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBkb19uZV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGludCBiYXNlX2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLSNpZm5kZWYgTU9EVUxFCisJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKyNpZmRlZiBORUVEU19QT1JUTElTVAogCWludCBvcmlnX2lycSA9IGRldi0+aXJxOwogI2VuZGlmCiAKQEAgLTIwMSw3ICsyMDMsNyBAQAogCWlmIChpc2FwbnBfcHJlc2VudCgpICYmIChuZV9wcm9iZV9pc2FwbnAoZGV2KSA9PSAwKSkKIAkJcmV0dXJuIDA7CiAKLSNpZm5kZWYgTU9EVUxFCisjaWZkZWYgTkVFRFNfUE9SVExJU1QKIAkvKiBMYXN0IHJlc29ydC4gVGhlIHNlbWktcmlza3kgSVNBIGF1dG8tcHJvYmUuICovCiAJZm9yIChiYXNlX2FkZHIgPSAwOyBuZXRjYXJkX3BvcnRsaXN0W2Jhc2VfYWRkcl0gIT0gMDsgYmFzZV9hZGRyKyspIHsKIAkJaW50IGlvYWRkciA9IG5ldGNhcmRfcG9ydGxpc3RbYmFzZV9hZGRyXTsKQEAgLTIyNiwxMCArMjI4LDYgQEAKIAlzcHJpbnRmKGRldi0+bmFtZSwgImV0aCVkIiwgdW5pdCk7CiAJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKIAotI2lmZGVmIENPTkZJR19UT1NISUJBX1JCVFg0OTM4Ci0JZGV2LT5iYXNlX2FkZHIgPSBSQlRYNDkzOF9SVExfODAxOV9CQVNFOwotCWRldi0+aXJxID0gUkJUWDQ5MzhfUlRMXzgwMTlfSVJROwotI2VuZGlmCiAJZXJyID0gZG9fbmVfcHJvYmUoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTI4NSw3ICsyODMsNyBAQAogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBuZV9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcikKK3N0YXRpYyBpbnQgX19pbml0IG5lX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGlvYWRkcikKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCBjaGFyIFNBX3Byb21bMzJdOwpAQCAtMzI0LDcgKzMyMiw3IEBACiAJaWYgKGVpX2RlYnVnICAmJiAgdmVyc2lvbl9wcmludGVkKysgPT0gMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiIEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uMSwgdmVyc2lvbjIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiTkUqMDAwIGV0aGVyY2FyZCBwcm9iZSBhdCAlIzN4OiIsIGlvYWRkcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiTkUqMDAwIGV0aGVyY2FyZCBwcm9iZSBhdCAlIzNseDoiLCBpb2FkZHIpOwogCiAJLyogQSB1c2VyIHdpdGggYSBwb29yIGNhcmQgdGhhdCBmYWlscyB0byBhY2sgdGhlIHJlc2V0LCBvciB0aGF0CiAJICAgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIDB4NTcsMHg1NyBzaWduYXR1cmUgY2FuIHN0aWxsIHVzZSB0aGlzCkBAIC01MTYsOCArNTE0LDcgQEAKIAl9CiAjZW5kaWYKIAotCXByaW50aygiXG4lczogJXMgZm91bmQgYXQgJSN4LCB1c2luZyBJUlEgJWQuXG4iLAotCQlkZXYtPm5hbWUsIG5hbWUsIGlvYWRkciwgZGV2LT5pcnEpOworCXByaW50aygiXG4iKTsKIAogCWVpX3N0YXR1cy5uYW1lID0gbmFtZTsKIAllaV9zdGF0dXMudHhfc3RhcnRfcGFnZSA9IHN0YXJ0X3BhZ2U7CkBAIC01NDcsNiArNTQ0LDggQEAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9pcnE7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGZvdW5kIGF0ICUjbHgsIHVzaW5nIElSUSAlZC5cbiIsCisJICAgICAgIGRldi0+bmFtZSwgbmFtZSwgaW9hZGRyLCBkZXYtPmlycSk7CiAJcmV0dXJuIDA7CiAKIG91dF9pcnE6CkBAIC04MDcsNiArODA2LDg3IEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBuZV9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBlcnIsIGlycTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghcmVzIHx8IGlycSA8IDApCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PTUVNOworCWRldi0+aXJxID0gaXJxOworCWRldi0+YmFzZV9hZGRyID0gcmVzLT5zdGFydDsKKwllcnIgPSBkb19uZV9wcm9iZShkZXYpOworCWlmIChlcnIpIHsKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJcmV0dXJuIGVycjsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2V4aXQgbmVfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIE5FX0lPX0VYVEVOVCk7CisJZnJlZV9uZXRkZXYoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBuZV9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5lX3Jlc2V0XzgzOTAoZGV2KTsKKwkJTlM4MzkwX2luaXQoZGV2LCAxKTsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIG5lX2Rydl9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgbmVfZHJ2X3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbmVfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19leGl0X3AobmVfZHJ2X3JlbW92ZSksCisJLnN1c3BlbmQJPSBuZV9kcnZfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG5lX2Rydl9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJWX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBuZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbmVfZHJpdmVyLCBuZV9kcnZfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbmVfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZuZV9kcml2ZXIpOworfQogCiAjaWZkZWYgTU9EVUxFCiAjZGVmaW5lIE1BWF9ORV9DQVJEUwk0CS8qIE1heCBudW1iZXIgb2YgTkUgY2FyZHMgcGVyIG1vZHVsZSAqLwpAQCAtODMyLDYgKzkxMiw3IEBACiBpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IHRoaXNfZGV2LCBmb3VuZCA9IDA7CisJaW50IHBsYXRfZm91bmQgPSAhbmVfaW5pdCgpOwogCiAJZm9yICh0aGlzX2RldiA9IDA7IHRoaXNfZGV2IDwgTUFYX05FX0NBUkRTOyB0aGlzX2RldisrKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19laV9uZXRkZXYoKTsKQEAgLTg0NSw3ICs5MjYsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJaWYgKGZvdW5kKQorCQlpZiAoZm91bmQgfHwgcGxhdF9mb3VuZCkKIAkJCWJyZWFrOwogCQlpZiAoaW9bdGhpc19kZXZdICE9IDApCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJuZS5jOiBObyBORSowMDAgY2FyZCBmb3VuZCBhdCBpL28gPSAlI3hcbiIsIGlvW3RoaXNfZGV2XSk7CkBAIC04NTMsNyArOTM0LDcgQEAKIAkJCXByaW50ayhLRVJOX05PVElDRSAibmUuYzogWW91IG11c3Qgc3VwcGx5IFwiaW89MHhOTk5cIiB2YWx1ZShzKSBmb3IgSVNBIGNhcmRzLlxuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQotCWlmIChmb3VuZCkKKwlpZiAoZm91bmQgfHwgcGxhdF9mb3VuZCkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CkBAIC04NzEsNiArOTUyLDcgQEAKIHsKIAlpbnQgdGhpc19kZXY7CiAKKwluZV9leGl0KCk7CiAJZm9yICh0aGlzX2RldiA9IDA7IHRoaXNfZGV2IDwgTUFYX05FX0NBUkRTOyB0aGlzX2RldisrKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfbmVbdGhpc19kZXZdOwogCQlpZiAoZGV2KSB7CkBAIC04ODAsNCArOTYyLDcgQEAKIAkJfQogCX0KIH0KKyNlbHNlIC8qIE1PRFVMRSAqLworbW9kdWxlX2luaXQobmVfaW5pdCk7Cittb2R1bGVfZXhpdChuZV9leGl0KTsKICNlbmRpZiAvKiBNT0RVTEUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lMmstcGNpLmMgYi9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCmluZGV4IDU4OTc4NWQuLjk5NWMwYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwpAQCAtNjMsOCArNjMsNyBAQAogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiBELiBCZWNrZXIvUC4gR29ydG1ha2VyXG4iCi1LRVJOX0lORk8gIiAgaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay9uZTJrLXBjaS5odG1sXG4iOworS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiBELiBCZWNrZXIvUC4gR29ydG1ha2VyXG4iOwogCiAjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKICNkZWZpbmUgaW5sX2xlKGFkZHIpICBsZTMyX3RvX2NwdShpbmwoYWRkcikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKaW5kZXggY2YwZTk2YS4uYTM2ODkyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwpAQCAtMTIxNiw3ICsxMjE2LDcgQEAKIAkJLyogV2luZG93ID0gMSAqLwogCQl3cml0ZWwoY29uc3VtZXIsCiAJCSAgICAgICBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLAotCQkJCQkgICAgcmVjdl9jcmJfcmVnaXN0ZXJzW2N0eGlkXS4KKwkJCQkJICAgIHJlY3ZfY3JiX3JlZ2lzdGVyc1thZGFwdGVyLT5wb3J0bnVtXS4KIAkJCQkJICAgIGNyYl9yY3Zfc3RhdHVzX2NvbnN1bWVyKSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggNGUzMmJiNi4uYzYxMTgxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtNjU0LDggKzY1NCw2IEBACiAJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkKIAkJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOwogCi0JaWYgKGFkYXB0ZXItPmlycSkKLQkJZnJlZV9pcnEoYWRhcHRlci0+aXJxLCBhZGFwdGVyKTsKIAlpZihhZGFwdGVyLT5wb3J0bnVtID09IDApIHsKIAkJLyogbGVhdmUgdGhlIGh3IGluIHRoZSBzYW1lIHN0YXRlIGFzIHJlYm9vdCAqLwogCQl3cml0ZWwoMCwgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX0NNRFBFR19TVEFURSkpOwpAQCAtNzM1LDcgKzczMyw3IEBACiAJCX0KIAkJYWRhcHRlci0+aXJxID0gYWRhcHRlci0+YWh3LnBkZXYtPmlycTsKIAkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+YWh3LnBkZXYtPmlycSwgbmV0eGVuX2ludHIsCi0JCQkJICBTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET00sIG5ldGRldi0+bmFtZSwKKwkJCQkgIElSUUZfU0hBUkVEfElSUUZfU0FNUExFX1JBTkRPTSwgbmV0ZGV2LT5uYW1lLAogCQkJCSAgYWRhcHRlcik7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAicmVxdWVzdF9pcnEgZmFpbGVkIHdpdGg6ICVkXG4iLCBlcnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCmluZGV4IDZhMzIzMzguLjcxN2Q4ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25zODM4MjAuYworKysgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKQEAgLTEwNCw3ICsxMDQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgkvKiBmb3IgaXBoICovCkBAIC01MDcsMTcgKzUwNiw2IEBACiAJc3Bpbl91bmxvY2soJmRldi0+dHhfbG9jayk7CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPm1pc2NfbG9jayk7CiB9Ci0KLXN0YXRpYyB2b2lkIG5zODM4MjBfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQotewotCXN0cnVjdCBuczgzODIwICpkZXYgPSBQUklWKG5kZXYpOwotCi0Jc3Bpbl9sb2NrX2lycSgmZGV2LT5taXNjX2xvY2spOwotCXNwaW5fbG9jaygmZGV2LT50eF9sb2NrKTsKLQl2bGFuX2dyb3VwX3NldF9kZXZpY2UoZGV2LT52bGdycCwgdmlkLCBOVUxMKTsKLQlzcGluX3VubG9jaygmZGV2LT50eF9sb2NrKTsKLQlzcGluX3VubG9ja19pcnEoJmRldi0+bWlzY19sb2NrKTsKLX0KICNlbmRpZgogCiAvKiBQYWNrZXQgUmVjZWl2ZXIKQEAgLTIwODQsNyArMjA3Miw2IEBACiAJLyogV2UgYWxzbyBzdXBwb3J0IGhhcmR3YXJlIHZsYW4gYWNjZWxlcmF0aW9uICovCiAJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogCW5kZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBuczgzODIwX3ZsYW5fcnhfcmVnaXN0ZXI7Ci0JbmRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IG5zODM4MjBfdmxhbl9yeF9raWxsX3ZpZDsKICNlbmRpZgogCiAJaWYgKHVzaW5nX2RhYykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCmluZGV4IDc2ZmU5ZGQuLjhkMzg0MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYworKysgYi9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KIAorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKwogI2luY2x1ZGUgInBhc2VtaV9tYWMuaCIKIAogCkBAIC01MSw2ICs1MywxNiBAQAogI2RlZmluZSBSWF9SSU5HX1NJWkUgNTEyCiAjZGVmaW5lIFRYX1JJTkdfU0laRSA1MTIKIAorI2RlZmluZSBERUZBVUxUX01TR19FTkFCTEUJICBcCisJKE5FVElGX01TR19EUlYJCXwgXAorCSBORVRJRl9NU0dfUFJPQkUJfCBcCisJIE5FVElGX01TR19MSU5LCQl8IFwKKwkgTkVUSUZfTVNHX1RJTUVSCXwgXAorCSBORVRJRl9NU0dfSUZET1dOCXwgXAorCSBORVRJRl9NU0dfSUZVUAkJfCBcCisJIE5FVElGX01TR19SWF9FUlIJfCBcCisJIE5FVElGX01TR19UWF9FUlIpCisKICNkZWZpbmUgVFhfREVTQyhtYWMsIG51bSkJKChtYWMpLT50eC0+ZGVzY1sobnVtKSAmIChUWF9SSU5HX1NJWkUtMSldKQogI2RlZmluZSBUWF9ERVNDX0lORk8obWFjLCBudW0pCSgobWFjKS0+dHgtPmRlc2NfaW5mb1sobnVtKSAmIChUWF9SSU5HX1NJWkUtMSldKQogI2RlZmluZSBSWF9ERVNDKG1hYywgbnVtKQkoKG1hYyktPnJ4LT5kZXNjWyhudW0pICYgKFJYX1JJTkdfU0laRS0xKV0pCkBAIC01OSwxMSArNzEsMTMgQEAKIAogI2RlZmluZSBCVUZfU0laRSAxNjQ2IC8qIDE1MDAgTVRVICsgRVRIX0hMRU4gKyBWTEFOX0hMRU4gKyAyIDY0QiBjYWNoZWxpbmVzICovCiAKLS8qIFhYWE9KTiB0aGVzZSBzaG91bGQgY29tZSBvdXQgb2YgdGhlIGRldmljZSB0cmVlIHNvbWUgZGF5ICovCi0jZGVmaW5lIFBBU19ETUFfQ0FQX0JBU0UgICAweGUwMGQwMDQwCi0jZGVmaW5lIFBBU19ETUFfQ0FQX1NJWkUgICAweDEwMAotI2RlZmluZSBQQVNfRE1BX0NPTV9CQVNFICAgMHhlMDBkMDEwMAotI2RlZmluZSBQQVNfRE1BX0NPTV9TSVpFICAgMHgxMDAKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IgKCJPbG9mIEpvaGFuc3NvbiA8b2xvZkBsaXhvbS5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBBIFNlbWkgUFdSZmljaWVudCBFdGhlcm5ldCBkcml2ZXIiKTsKKworc3RhdGljIGludCBkZWJ1ZyA9IC0xOwkvKiAtMSA9PSB1c2UgREVGQVVMVF9NU0dfRU5BQkxFIGFzIHZhbHVlICovCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiUEEgU2VtaSBNQUMgYml0bWFwcGVkIGRlYnVnZ2luZyBtZXNzYWdlIGVuYWJsZSB2YWx1ZSIpOwogCiBzdGF0aWMgc3RydWN0IHBhc2RtYV9zdGF0dXMgKmRtYV9zdGF0dXM7CiAKQEAgLTcxLDYgKzg1LDcgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG1hYy0+cGRldjsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOworCWludCBsZW47CiAJY29uc3QgdTggKm1hZGRyOwogCXU4IGFkZHJbNl07CiAKQEAgLTgwLDEzICs5NSwyNyBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQltYWRkciA9IGdldF9wcm9wZXJ0eShkbiwgIm1hYy1hZGRyZXNzIiwgTlVMTCk7CisJbWFkZHIgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJsb2NhbC1tYWMtYWRkcmVzcyIsICZsZW4pOworCisJaWYgKG1hZGRyICYmIGxlbiA9PSA2KSB7CisJCW1lbWNweShtYWMtPm1hY19hZGRyLCBtYWRkciwgNik7CisJCXJldHVybiAwOworCX0KKworCS8qIFNvbWUgb2xkIHZlcnNpb25zIG9mIGZpcm13YXJlIG1pc3Rha2VubHkgdXNlcyBtYWMtYWRkcmVzcworCSAqIChhbmQgYXMgYSBzdHJpbmcpIGluc3RlYWQgb2YgYSBieXRlIGFycmF5IGluIGxvY2FsLW1hYy1hZGRyZXNzLgorCSAqLworCisJaWYgKG1hZGRyID09IE5VTEwpCisJCW1hZGRyID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAibWFjLWFkZHJlc3MiLCBOVUxMKTsKKwogCWlmIChtYWRkciA9PSBOVUxMKSB7CiAJCWRldl93YXJuKCZwZGV2LT5kZXYsCiAJCQkgIm5vIG1hYyBhZGRyZXNzIGluIGRldmljZSB0cmVlLCBub3QgY29uZmlndXJpbmdcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKKwogCWlmIChzc2NhbmYobWFkZHIsICIlaGh4OiVoaHg6JWhoeDolaGh4OiVoaHg6JWhoeCIsICZhZGRyWzBdLAogCQkgICAmYWRkclsxXSwgJmFkZHJbMl0sICZhZGRyWzNdLCAmYWRkcls0XSwgJmFkZHJbNV0pICE9IDYpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwKQEAgLTk0LDcgKzEyMyw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW1lbWNweShtYWMtPm1hY19hZGRyLCBhZGRyLCBzaXplb2YoYWRkcikpOworCW1lbWNweShtYWMtPm1hY19hZGRyLCBhZGRyLCA2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNzcsOCArMzA3LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKIAkJaW5mbyA9ICZSWF9ERVNDX0lORk8obWFjLCBpKTsKIAkJZHAgPSAmUlhfREVTQyhtYWMsIGkpOwotCQlpZiAoaW5mby0+ZG1hKSB7Ci0JCQlpZiAoaW5mby0+c2tiKSB7CisJCWlmIChpbmZvLT5za2IpIHsKKwkJCWlmIChpbmZvLT5kbWEpIHsKIAkJCQlwY2lfdW5tYXBfc2luZ2xlKG1hYy0+ZG1hX3BkZXYsCiAJCQkJCQkgaW5mby0+ZG1hLAogCQkJCQkJIGluZm8tPnNrYi0+bGVuLApAQCAtMzA5LDgyICszMzksMTE1IEBACiAJc3RydWN0IHBhc2VtaV9tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHN0YXJ0ID0gbWFjLT5yeC0+bmV4dF90b19maWxsOwotCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgbGltaXQsIGNvdW50OwogCi0JY291bnQgPSAobWFjLT5yeC0+bmV4dF90b19jbGVhbiArIFJYX1JJTkdfU0laRSAtCisJbGltaXQgPSAobWFjLT5yeC0+bmV4dF90b19jbGVhbiArIFJYX1JJTkdfU0laRSAtCiAJCSBtYWMtPnJ4LT5uZXh0X3RvX2ZpbGwpICYgKFJYX1JJTkdfU0laRSAtIDEpOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIGRvaW5nIGZpcnN0LXRpbWUgc2V0dXAgKi8KIAlpZiAodW5saWtlbHkobWFjLT5yeC0+bmV4dF90b19jbGVhbiA9PSAwICYmIG1hYy0+cngtPm5leHRfdG9fZmlsbCA9PSAwKSkKLQkJY291bnQgPSBSWF9SSU5HX1NJWkU7CisJCWxpbWl0ID0gUlhfUklOR19TSVpFOwogCi0JaWYgKGNvdW50IDw9IDApCisJaWYgKGxpbWl0IDw9IDApCiAJCXJldHVybjsKIAotCWZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgaSsrKSB7CisJaSA9IHN0YXJ0OworCWZvciAoY291bnQgPSBsaW1pdDsgY291bnQ7IGNvdW50LS0pIHsKIAkJc3RydWN0IHBhc2VtaV9tYWNfYnVmZmVyICppbmZvID0gJlJYX0RFU0NfSU5GTyhtYWMsIGkpOwogCQl1NjQgKmJ1ZmYgPSAmUlhfQlVGRihtYWMsIGkpOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlkbWFfYWRkcl90IGRtYTsKIAotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKEJVRl9TSVpFKTsKKwkJLyogc2tiIG1pZ2h0IHN0aWxsIGJlIGluIHRoZXJlIGZvciByZWN5Y2xlIG9uIHNob3J0IHJlY2VpdmVzICovCisJCWlmIChpbmZvLT5za2IpCisJCQlza2IgPSBpbmZvLT5za2I7CisJCWVsc2UKKwkJCXNrYiA9IGRldl9hbGxvY19za2IoQlVGX1NJWkUpOwogCi0JCWlmICghc2tiKSB7Ci0JCQljb3VudCA9IGkgLSBzdGFydDsKKwkJaWYgKHVubGlrZWx5KCFza2IpKQogCQkJYnJlYWs7Ci0JCX0KIAogCQlkbWEgPSBwY2lfbWFwX3NpbmdsZShtYWMtPmRtYV9wZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJCSAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZG1hKSkgeworCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoZG1hKSkpIHsKIAkJCWRldl9rZnJlZV9za2JfaXJxKGluZm8tPnNrYik7Ci0JCQljb3VudCA9IGkgLSBzdGFydDsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaW5mby0+c2tiID0gc2tiOwogCQlpbmZvLT5kbWEgPSBkbWE7CiAJCSpidWZmID0gWENUX1JYQl9MRU4oQlVGX1NJWkUpIHwgWENUX1JYQl9BRERSKGRtYSk7CisJCWkrKzsKIAl9CiAKIAl3bWIoKTsKIAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWFjLT5kbWFfcGRldiwKIAkJCSAgICAgICBQQVNfRE1BX1JYQ0hBTl9JTkNSKG1hYy0+ZG1hX3J4Y2gpLAotCQkJICAgICAgIGNvdW50KTsKKwkJCSAgICAgICBsaW1pdCAtIGNvdW50KTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1hYy0+ZG1hX3BkZXYsCiAJCQkgICAgICAgUEFTX0RNQV9SWElOVF9JTkNSKG1hYy0+ZG1hX2lmKSwKLQkJCSAgICAgICBjb3VudCk7CisJCQkgICAgICAgbGltaXQgLSBjb3VudCk7CiAKLQltYWMtPnJ4LT5uZXh0X3RvX2ZpbGwgKz0gY291bnQ7CisJbWFjLT5yeC0+bmV4dF90b19maWxsICs9IGxpbWl0IC0gY291bnQ7CiB9CiAKK3N0YXRpYyB2b2lkIHBhc2VtaV9tYWNfcmVzdGFydF9yeF9pbnRyKHN0cnVjdCBwYXNlbWlfbWFjICptYWMpCit7CisJdW5zaWduZWQgaW50IHJlZywgcGNudDsKKwkvKiBSZS1lbmFibGUgcGFja2V0IGNvdW50IGludGVycnVwdHM6IGZpbmFsbHkKKwkgKiBhY2sgdGhlIHBhY2tldCBjb3VudCBpbnRlcnJ1cHQgd2UgZ290IGluIHJ4X2ludHIuCisJICovCisKKwlwY250ID0gKm1hYy0+cnhfc3RhdHVzICYgUEFTX1NUQVRVU19QQ05UX007CisKKwlyZWcgPSBQQVNfSU9CX0RNQV9SWENIX1JFU0VUX1BDTlQocGNudCkgfCBQQVNfSU9CX0RNQV9SWENIX1JFU0VUX1BJTlRDOworCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtYWMtPmlvYl9wZGV2LAorCQkJICAgICAgIFBBU19JT0JfRE1BX1JYQ0hfUkVTRVQobWFjLT5kbWFfcnhjaCksCisJCQkgICAgICAgcmVnKTsKK30KKworc3RhdGljIHZvaWQgcGFzZW1pX21hY19yZXN0YXJ0X3R4X2ludHIoc3RydWN0IHBhc2VtaV9tYWMgKm1hYykKK3sKKwl1bnNpZ25lZCBpbnQgcmVnLCBwY250OworCisJLyogUmUtZW5hYmxlIHBhY2tldCBjb3VudCBpbnRlcnJ1cHRzICovCisJcGNudCA9ICptYWMtPnR4X3N0YXR1cyAmIFBBU19TVEFUVVNfUENOVF9NOworCisJcmVnID0gUEFTX0lPQl9ETUFfVFhDSF9SRVNFVF9QQ05UKHBjbnQpIHwgUEFTX0lPQl9ETUFfVFhDSF9SRVNFVF9QSU5UQzsKKworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWFjLT5pb2JfcGRldiwKKwkJCSAgICAgICBQQVNfSU9CX0RNQV9UWENIX1JFU0VUKG1hYy0+ZG1hX3R4Y2gpLCByZWcpOworfQorCisKIHN0YXRpYyBpbnQgcGFzZW1pX21hY19jbGVhbl9yeChzdHJ1Y3QgcGFzZW1pX21hYyAqbWFjLCBpbnQgbGltaXQpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IHN0YXJ0LCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgbjsKKwlpbnQgY291bnQ7CisJc3RydWN0IHBhc19kbWFfeGN0X2Rlc2NyICpkcDsKKwlzdHJ1Y3QgcGFzZW1pX21hY19idWZmZXIgKmluZm87CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgaSwgbGVuOworCXU2NCBtYWNyeDsKKwlkbWFfYWRkcl90IGRtYTsKIAogCXNwaW5fbG9jaygmbWFjLT5yeC0+bG9jayk7CiAKLQlzdGFydCA9IG1hYy0+cngtPm5leHRfdG9fY2xlYW47Ci0JY291bnQgPSAwOworCW4gPSBtYWMtPnJ4LT5uZXh0X3RvX2NsZWFuOwogCi0JZm9yIChpID0gc3RhcnQ7IGkgPCAoc3RhcnQgKyBSWF9SSU5HX1NJWkUpICYmIGNvdW50IDwgbGltaXQ7IGkrKykgewotCQlzdHJ1Y3QgcGFzX2RtYV94Y3RfZGVzY3IgKmRwOwotCQlzdHJ1Y3QgcGFzZW1pX21hY19idWZmZXIgKmluZm87Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCXVuc2lnbmVkIGludCBqLCBsZW47Ci0JCWRtYV9hZGRyX3QgZG1hOworCWZvciAoY291bnQgPSBsaW1pdDsgY291bnQ7IGNvdW50LS0pIHsKIAogCQlybWIoKTsKIAotCQlkcCA9ICZSWF9ERVNDKG1hYywgaSk7CisJCWRwID0gJlJYX0RFU0MobWFjLCBuKTsKKwkJbWFjcnggPSBkcC0+bWFjcng7CiAKLQkJaWYgKCEoZHAtPm1hY3J4ICYgWENUX01BQ1JYX08pKQorCQlpZiAoIShtYWNyeCAmIFhDVF9NQUNSWF9PKSkKIAkJCWJyZWFrOwogCi0JCWNvdW50Kys7CiAKIAkJaW5mbyA9IE5VTEw7CiAKQEAgLTM5NiwyOSArNDU5LDQyIEBACiAJCSAqLwogCiAJCWRtYSA9IChkcC0+cHRyICYgWENUX1BUUl9BRERSX00pOwotCQlmb3IgKGogPSBzdGFydDsgaiA8IChzdGFydCArIFJYX1JJTkdfU0laRSk7IGorKykgewotCQkJaW5mbyA9ICZSWF9ERVNDX0lORk8obWFjLCBqKTsKKwkJZm9yIChpID0gbjsgaSA8IChuICsgUlhfUklOR19TSVpFKTsgaSsrKSB7CisJCQlpbmZvID0gJlJYX0RFU0NfSU5GTyhtYWMsIGkpOwogCQkJaWYgKGluZm8tPmRtYSA9PSBkbWEpCiAJCQkJYnJlYWs7CiAJCX0KIAotCQlCVUdfT04oIWluZm8pOwotCQlCVUdfT04oaW5mby0+ZG1hICE9IGRtYSk7CisJCXNrYiA9IGluZm8tPnNrYjsKKwkJaW5mby0+ZG1hID0gMDsKIAotCQlwY2lfdW5tYXBfc2luZ2xlKG1hYy0+ZG1hX3BkZXYsIGluZm8tPmRtYSwgaW5mby0+c2tiLT5sZW4sCisJCXBjaV91bm1hcF9zaW5nbGUobWFjLT5kbWFfcGRldiwgZG1hLCBza2ItPmxlbiwKIAkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCQlza2IgPSBpbmZvLT5za2I7CisJCWxlbiA9IChtYWNyeCAmIFhDVF9NQUNSWF9MTEVOX00pID4+IFhDVF9NQUNSWF9MTEVOX1M7CiAKLQkJbGVuID0gKGRwLT5tYWNyeCAmIFhDVF9NQUNSWF9MTEVOX00pID4+IFhDVF9NQUNSWF9MTEVOX1M7CisJCWlmIChsZW4gPCAyNTYpIHsKKwkJCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0KKwkJCSAgICBuZXRkZXZfYWxsb2Nfc2tiKG1hYy0+bmV0ZGV2LCBsZW4gKyBORVRfSVBfQUxJR04pOworCQkJaWYgKG5ld19za2IpIHsKKwkJCQlza2JfcmVzZXJ2ZShuZXdfc2tiLCBORVRfSVBfQUxJR04pOworCQkJCW1lbWNweShuZXdfc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOLAorCQkJCQlza2ItPmRhdGEgLSBORVRfSVBfQUxJR04sCisJCQkJCWxlbiArIE5FVF9JUF9BTElHTik7CisJCQkJLyogc2F2ZSB0aGUgc2tiIGluIGJ1ZmZlcl9pbmZvIGFzIGdvb2QgKi8KKwkJCQlza2IgPSBuZXdfc2tiOworCQkJfQorCQkJLyogZWxzZSBqdXN0IGNvbnRpbnVlIHdpdGggdGhlIG9sZCBvbmUgKi8KKwkJfSBlbHNlCisJCQlpbmZvLT5za2IgPSBOVUxMOwogCiAJCXNrYl9wdXQoc2tiLCBsZW4pOwogCiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG1hYy0+bmV0ZGV2KTsKIAotCQlpZiAoKGRwLT5tYWNyeCAmIFhDVF9NQUNSWF9IVFlfTSkgPT0gWENUX01BQ1JYX0hUWV9JUFY0X09LKSB7CisJCWlmICgobWFjcnggJiBYQ1RfTUFDUlhfSFRZX00pID09IFhDVF9NQUNSWF9IVFlfSVBWNF9PSykgewogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKLQkJCXNrYi0+Y3N1bSA9IChkcC0+bWFjcnggJiBYQ1RfTUFDUlhfQ1NVTV9NKSA+PgorCQkJc2tiLT5jc3VtID0gKG1hY3J4ICYgWENUX01BQ1JYX0NTVU1fTSkgPj4KIAkJCQkJICAgWENUX01BQ1JYX0NTVU1fUzsKIAkJfSBlbHNlCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CkBAIC00MjgsMTMgKzUwNCwxMyBAQAogCiAJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAKLQkJaW5mby0+ZG1hID0gMDsKLQkJaW5mby0+c2tiID0gTlVMTDsKIAkJZHAtPnB0ciA9IDA7CiAJCWRwLT5tYWNyeCA9IDA7CisKKwkJbisrOwogCX0KIAotCW1hYy0+cngtPm5leHRfdG9fY2xlYW4gKz0gY291bnQ7CisJbWFjLT5yeC0+bmV4dF90b19jbGVhbiArPSBsaW1pdCAtIGNvdW50OwogCXBhc2VtaV9tYWNfcmVwbGVuaXNoX3J4X3JpbmcobWFjLT5uZXRkZXYpOwogCiAJc3Bpbl91bmxvY2soJm1hYy0+cngtPmxvY2spOwpAQCAtNDc2LDYgKzU1Miw4IEBACiAJbWFjLT50eC0+bmV4dF90b19jbGVhbiArPSBjb3VudDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPnR4LT5sb2NrLCBmbGFncyk7CiAKKwluZXRpZl93YWtlX3F1ZXVlKG1hYy0+bmV0ZGV2KTsKKwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNDg2LDE4ICs1NjQsMjggQEAKIAlzdHJ1Y3QgcGFzZW1pX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCi0JaWYgKCEoKm1hYy0+cnhfc3RhdHVzICYgUEFTX1NUQVRVU19JTlQpKQorCWlmICghKCptYWMtPnJ4X3N0YXR1cyAmIFBBU19TVEFUVVNfQ0FVU0VfTSkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKGRldik7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtYWMtPmlvYl9wZGV2LCBQQVNfSU9CX0RNQV9DT01fVElNRU9VVENGRywKLQkJCSAgICAgICBQQVNfSU9CX0RNQV9DT01fVElNRU9VVENGR19UQ05UKDApKTsKKwlpZiAoKm1hYy0+cnhfc3RhdHVzICYgUEFTX1NUQVRVU19FUlJPUikKKwkJcHJpbnRrKCJyeF9zdGF0dXMgcmVwb3J0ZWQgZXJyb3JcbiIpOwogCi0JcmVnID0gUEFTX0lPQl9ETUFfUlhDSF9SRVNFVF9QSU5UQyB8IFBBU19JT0JfRE1BX1JYQ0hfUkVTRVRfU0lOVEMgfAotCSAgICAgIFBBU19JT0JfRE1BX1JYQ0hfUkVTRVRfRElOVEM7CisJLyogRG9uJ3QgcmVzZXQgcGFja2V0IGNvdW50IHNvIGl0IHdvbid0IGZpcmUgYWdhaW4gYnV0IGNsZWFyCisJICogYWxsIG90aGVycy4KKwkgKi8KKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtYWMtPmRtYV9wZGV2LCBQQVNfRE1BX1JYSU5UX1JDTURTVEEobWFjLT5kbWFfaWYpLCAmcmVnKTsKKworCXJlZyA9IDA7CisJaWYgKCptYWMtPnJ4X3N0YXR1cyAmIFBBU19TVEFUVVNfU09GVCkKKwkJcmVnIHw9IFBBU19JT0JfRE1BX1JYQ0hfUkVTRVRfU0lOVEM7CisJaWYgKCptYWMtPnJ4X3N0YXR1cyAmIFBBU19TVEFUVVNfRVJST1IpCisJCXJlZyB8PSBQQVNfSU9CX0RNQV9SWENIX1JFU0VUX0RJTlRDOwogCWlmICgqbWFjLT5yeF9zdGF0dXMgJiBQQVNfU1RBVFVTX1RJTUVSKQogCQlyZWcgfD0gUEFTX0lPQl9ETUFfUlhDSF9SRVNFVF9USU5UQzsKIAorCW5ldGlmX3J4X3NjaGVkdWxlKGRldik7CisKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1hYy0+aW9iX3BkZXYsCiAJCQkgICAgICAgUEFTX0lPQl9ETUFfUlhDSF9SRVNFVChtYWMtPmRtYV9yeGNoKSwgcmVnKTsKIApAQCAtNTA5LDMyICs1OTcsMTQxIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7CiAJc3RydWN0IHBhc2VtaV9tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IHJlZzsKLQlpbnQgd2FzX2Z1bGw7CisJdW5zaWduZWQgaW50IHJlZywgcGNudDsKIAotCXdhc19mdWxsID0gbWFjLT50eC0+bmV4dF90b19jbGVhbiAtIG1hYy0+dHgtPm5leHRfdG9fdXNlID09IFRYX1JJTkdfU0laRTsKLQotCWlmICghKCptYWMtPnR4X3N0YXR1cyAmIFBBU19TVEFUVVNfSU5UKSkKKwlpZiAoISgqbWFjLT50eF9zdGF0dXMgJiBQQVNfU1RBVFVTX0NBVVNFX00pKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlwYXNlbWlfbWFjX2NsZWFuX3R4KG1hYyk7CiAKLQlyZWcgPSBQQVNfSU9CX0RNQV9UWENIX1JFU0VUX1BJTlRDIHwgUEFTX0lPQl9ETUFfVFhDSF9SRVNFVF9TSU5UQzsKLQlpZiAoKm1hYy0+dHhfc3RhdHVzICYgUEFTX1NUQVRVU19USU1FUikKLQkJcmVnIHw9IFBBU19JT0JfRE1BX1RYQ0hfUkVTRVRfVElOVEM7CisJcGNudCA9ICptYWMtPnR4X3N0YXR1cyAmIFBBU19TVEFUVVNfUENOVF9NOwogCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtYWMtPmlvYl9wZGV2LCBQQVNfSU9CX0RNQV9UWENIX1JFU0VUKG1hYy0+ZG1hX3R4Y2gpLAorCXJlZyA9IFBBU19JT0JfRE1BX1RYQ0hfUkVTRVRfUENOVChwY250KSB8IFBBU19JT0JfRE1BX1RYQ0hfUkVTRVRfUElOVEM7CisKKwlpZiAoKm1hYy0+dHhfc3RhdHVzICYgUEFTX1NUQVRVU19TT0ZUKQorCQlyZWcgfD0gUEFTX0lPQl9ETUFfVFhDSF9SRVNFVF9TSU5UQzsKKwlpZiAoKm1hYy0+dHhfc3RhdHVzICYgUEFTX1NUQVRVU19FUlJPUikKKwkJcmVnIHw9IFBBU19JT0JfRE1BX1RYQ0hfUkVTRVRfRElOVEM7CisKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1hYy0+aW9iX3BkZXYsCisJCQkgICAgICAgUEFTX0lPQl9ETUFfVFhDSF9SRVNFVChtYWMtPmRtYV90eGNoKSwKIAkJCSAgICAgICByZWcpOwogCi0JaWYgKHdhc19mdWxsKQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyB2b2lkIHBhc2VtaV9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwYXNlbWlfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBtc2c7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIGludCBuZXdfZmxhZ3M7CisKKwlpZiAoIW1hYy0+cGh5ZGV2LT5saW5rKSB7CisJCS8qIElmIG5vIGxpbmssIE1BQyBzcGVlZCBzZXR0aW5ncyBkb24ndCBtYXR0ZXIuIEp1c3QgcmVwb3J0CisJCSAqIGxpbmsgZG93biBhbmQgcmV0dXJuLgorCQkgKi8KKwkJaWYgKG1hYy0+bGluayAmJiBuZXRpZl9tc2dfbGluayhtYWMpKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgaXMgZG93bi5cbiIsIGRldi0+bmFtZSk7CisKKwkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwkJbWFjLT5saW5rID0gMDsKKworCQlyZXR1cm47CisJfSBlbHNlCisJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtYWMtPnBkZXYsIFBBU19NQUNfQ0ZHX1BDRkcsICZmbGFncyk7CisJbmV3X2ZsYWdzID0gZmxhZ3MgJiB+KFBBU19NQUNfQ0ZHX1BDRkdfSEQgfCBQQVNfTUFDX0NGR19QQ0ZHX1NQRF9NIHwKKwkJCSAgICAgIFBBU19NQUNfQ0ZHX1BDRkdfVFNSX00pOworCisJaWYgKCFtYWMtPnBoeWRldi0+ZHVwbGV4KQorCQluZXdfZmxhZ3MgfD0gUEFTX01BQ19DRkdfUENGR19IRDsKKworCXN3aXRjaCAobWFjLT5waHlkZXYtPnNwZWVkKSB7CisJY2FzZSAxMDAwOgorCQluZXdfZmxhZ3MgfD0gUEFTX01BQ19DRkdfUENGR19TUERfMUcgfAorCQkJICAgICBQQVNfTUFDX0NGR19QQ0ZHX1RTUl8xRzsKKwkJYnJlYWs7CisJY2FzZSAxMDA6CisJCW5ld19mbGFncyB8PSBQQVNfTUFDX0NGR19QQ0ZHX1NQRF8xMDBNIHwKKwkJCSAgICAgUEFTX01BQ19DRkdfUENGR19UU1JfMTAwTTsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJbmV3X2ZsYWdzIHw9IFBBU19NQUNfQ0ZHX1BDRkdfU1BEXzEwTSB8CisJCQkgICAgIFBBU19NQUNfQ0ZHX1BDRkdfVFNSXzEwTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJVbnN1cHBvcnRlZCBzcGVlZCAlZFxuIiwgbWFjLT5waHlkZXYtPnNwZWVkKTsKKwl9CisKKwkvKiBQcmludCBvbiBsaW5rIG9yIHNwZWVkL2R1cGxleCBjaGFuZ2UgKi8KKwltc2cgPSBtYWMtPmxpbmsgIT0gbWFjLT5waHlkZXYtPmxpbmsgfHwgZmxhZ3MgIT0gbmV3X2ZsYWdzOworCisJbWFjLT5kdXBsZXggPSBtYWMtPnBoeWRldi0+ZHVwbGV4OworCW1hYy0+c3BlZWQgPSBtYWMtPnBoeWRldi0+c3BlZWQ7CisJbWFjLT5saW5rID0gbWFjLT5waHlkZXYtPmxpbms7CisKKwlpZiAobmV3X2ZsYWdzICE9IGZsYWdzKQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1hYy0+cGRldiwgUEFTX01BQ19DRkdfUENGRywgbmV3X2ZsYWdzKTsKKworCWlmIChtc2cgJiYgbmV0aWZfbXNnX2xpbmsobWFjKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgaXMgdXAgYXQgJWQgTWJwcywgJXMgZHVwbGV4LlxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgbWFjLT5zcGVlZCwgbWFjLT5kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIpOworfQorCitzdGF0aWMgaW50IHBhc2VtaV9tYWNfcGh5X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGFzZW1pX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCAqcGh5X2RuOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CisJdW5zaWduZWQgaW50IHBoeV9pZDsKKwljb25zdCBwaGFuZGxlICpwaDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnByb3A7CisJc3RydWN0IHJlc291cmNlIHI7CisJaW50IHJldDsKKworCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKG1hYy0+cGRldik7CisJcGggPSBvZl9nZXRfcHJvcGVydHkoZG4sICJwaHktaGFuZGxlIiwgTlVMTCk7CisJaWYgKCFwaCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcGh5X2RuID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKnBoKTsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkocGh5X2RuLCAicmVnIiwgTlVMTCk7CisJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShwaHlfZG4tPnBhcmVudCwgMCwgJnIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcGh5X2lkID0gKnByb3A7CisJc25wcmludGYobWFjLT5waHlfaWQsIEJVU19JRF9TSVpFLCBQSFlfSURfRk1ULCAoaW50KXIuc3RhcnQsIHBoeV9pZCk7CisKKwlvZl9ub2RlX3B1dChwaHlfZG4pOworCisJbWFjLT5saW5rID0gMDsKKwltYWMtPnNwZWVkID0gMDsKKwltYWMtPmR1cGxleCA9IC0xOworCisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBtYWMtPnBoeV9pZCwgJnBhc2VtaV9hZGp1c3RfbGluaywgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKTsKKworCWlmIChJU19FUlIocGh5ZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIHBoeVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5ZGV2KTsKKwl9CisKKwltYWMtPnBoeWRldiA9IHBoeWRldjsKKworCXJldHVybiAwOworCitlcnI6CisJb2Zfbm9kZV9wdXQocGh5X2RuKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworCiBzdGF0aWMgaW50IHBhc2VtaV9tYWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwYXNlbWlfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBiYXNlX2lycTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJaW50IHJldDsKIApAQCAtNTU4LDEwICs3NTUsMTggQEAKIAlmbGFncyB8PSBQQVNfTUFDX0NGR19QQ0ZHX1RTUl8xRyB8IFBBU19NQUNfQ0ZHX1BDRkdfU1BEXzFHOwogCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtYWMtPmlvYl9wZGV2LCBQQVNfSU9CX0RNQV9SWENIX0NGRyhtYWMtPmRtYV9yeGNoKSwKLQkJCSAgICAgICBQQVNfSU9CX0RNQV9SWENIX0NGR19DTlRUSCgzMCkpOworCQkJICAgICAgIFBBU19JT0JfRE1BX1JYQ0hfQ0ZHX0NOVFRIKDEpKTsKIAorCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWFjLT5pb2JfcGRldiwgUEFTX0lPQl9ETUFfVFhDSF9DRkcobWFjLT5kbWFfdHhjaCksCisJCQkgICAgICAgUEFTX0lPQl9ETUFfVFhDSF9DRkdfQ05UVEgoMzIpKTsKKworCS8qIENsZWFyIG91dCBhbnkgcmVzaWR1YWwgcGFja2V0IGNvdW50IHN0YXRlIGZyb20gZmlybXdhcmUgKi8KKwlwYXNlbWlfbWFjX3Jlc3RhcnRfcnhfaW50cihtYWMpOworCXBhc2VtaV9tYWNfcmVzdGFydF90eF9pbnRyKG1hYyk7CisKKwkvKiAweGZmZmZmZiBpcyBtYXggdmFsdWUsIGFib3V0IDE2bXMgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1hYy0+aW9iX3BkZXYsIFBBU19JT0JfRE1BX0NPTV9USU1FT1VUQ0ZHLAotCQkJICAgICAgIFBBU19JT0JfRE1BX0NPTV9USU1FT1VUQ0ZHX1RDTlQoMTAwMDAwMCkpOworCQkJICAgICAgIFBBU19JT0JfRE1BX0NPTV9USU1FT1VUQ0ZHX1RDTlQoMHhmZmZmZmYpKTsKIAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQobWFjLT5wZGV2LCBQQVNfTUFDX0NGR19QQ0ZHLCBmbGFncyk7CiAKQEAgLTU5NSwzMSArODAwLDUwIEBACiAKIAlwYXNlbWlfbWFjX3JlcGxlbmlzaF9yeF9yaW5nKGRldik7CiAKKwlyZXQgPSBwYXNlbWlfbWFjX3BoeV9pbml0KGRldik7CisJLyogU29tZSBjb25maWdzIGRvbid0IGhhdmUgUEhZcyAoWEFVSSBldGMpLCBzbyBkb24ndCBjb21wbGFpbiBhYm91dAorCSAqIGZhaWxlZCBpbml0IGR1ZSB0byAtRU5PREVWLgorCSAqLworCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9ERVYpCisJCWRldl93YXJuKCZtYWMtPnBkZXYtPmRldiwgInBoeSBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CisKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCW5ldGlmX3BvbGxfZW5hYmxlKGRldik7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShtYWMtPmRtYV9wZGV2LT5pcnEgKyBtYWMtPmRtYV90eGNoLAotCQkJICAmcGFzZW1pX21hY190eF9pbnRyLCBJUlFGX0RJU0FCTEVELAorCS8qIEludGVycnVwdHMgYXJlIGEgYml0IGRpZmZlcmVudCBmb3Igb3VyIERNQSBjb250cm9sbGVyOiBXaGlsZQorCSAqIGl0J3MgZ290IG9uZSBhIHJlZ3VsYXIgUENJIGRldmljZSBoZWFkZXIsIHRoZSBpbnRlcnJ1cHQgdGhlcmUKKwkgKiBpcyByZWFsbHkgdGhlIGJhc2Ugb2YgdGhlIHJhbmdlIGl0J3MgdXNpbmcuIEVhY2ggdHggYW5kIHJ4CisJICogY2hhbm5lbCBoYXMgaXQncyBvd24gaW50ZXJydXB0IHNvdXJjZS4KKwkgKi8KKworCWJhc2VfaXJxID0gdmlycV90b19odyhtYWMtPmRtYV9wZGV2LT5pcnEpOworCisJbWFjLT50eF9pcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoTlVMTCwgYmFzZV9pcnEgKyBtYWMtPmRtYV90eGNoKTsKKwltYWMtPnJ4X2lycSA9IGlycV9jcmVhdGVfbWFwcGluZyhOVUxMLCBiYXNlX2lycSArIDIwICsgbWFjLT5kbWFfdHhjaCk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShtYWMtPnR4X2lycSwgJnBhc2VtaV9tYWNfdHhfaW50ciwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgbWFjLT50eC0+aXJxX25hbWUsIGRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZtYWMtPnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIG9mIGlycSAlZCBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgbWFjLT5kbWFfcGRldi0+aXJxICsgbWFjLT5kbWFfdHhjaCwgcmV0KTsKKwkJCWJhc2VfaXJxICsgbWFjLT5kbWFfdHhjaCwgcmV0KTsKIAkJZ290byBvdXRfdHhfaW50OwogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKG1hYy0+ZG1hX3BkZXYtPmlycSArIDIwICsgbWFjLT5kbWFfcnhjaCwKLQkJCSAgJnBhc2VtaV9tYWNfcnhfaW50ciwgSVJRRl9ESVNBQkxFRCwKKwlyZXQgPSByZXF1ZXN0X2lycShtYWMtPnJ4X2lycSwgJnBhc2VtaV9tYWNfcnhfaW50ciwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgbWFjLT5yeC0+aXJxX25hbWUsIGRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZtYWMtPnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIG9mIGlycSAlZCBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgbWFjLT5kbWFfcGRldi0+aXJxICsgMjAgKyBtYWMtPmRtYV9yeGNoLCByZXQpOworCQkJYmFzZV9pcnEgKyAyMCArIG1hYy0+ZG1hX3J4Y2gsIHJldCk7CiAJCWdvdG8gb3V0X3J4X2ludDsKIAl9CiAKKwlpZiAobWFjLT5waHlkZXYpCisJCXBoeV9zdGFydChtYWMtPnBoeWRldik7CisKIAlyZXR1cm4gMDsKIAogb3V0X3J4X2ludDoKLQlmcmVlX2lycShtYWMtPmRtYV9wZGV2LT5pcnEgKyBtYWMtPmRtYV90eGNoLCBkZXYpOworCWZyZWVfaXJxKG1hYy0+dHhfaXJxLCBkZXYpOwogb3V0X3R4X2ludDoKIAluZXRpZl9wb2xsX2Rpc2FibGUoZGV2KTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CkBAIC02MzksNiArODYzLDExIEBACiAJdW5zaWduZWQgaW50IHN0YXQ7CiAJaW50IHJldHJpZXM7CiAKKwlpZiAobWFjLT5waHlkZXYpIHsKKwkJcGh5X3N0b3AobWFjLT5waHlkZXYpOworCQlwaHlfZGlzY29ubmVjdChtYWMtPnBoeWRldik7CisJfQorCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAJLyogQ2xlYW4gb3V0IGFueSBwZW5kaW5nIGJ1ZmZlcnMgKi8KQEAgLTY2MCw0MCArODg5LDM3IEBACiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtYWMtPmRtYV9wZGV2LAogCQkJCSAgICAgIFBBU19ETUFfVFhDSEFOX1RDTURTVEEobWFjLT5kbWFfdHhjaCksCiAJCQkJICAgICAgJnN0YXQpOwotCQlpZiAoc3RhdCAmIFBBU19ETUFfVFhDSEFOX1RDTURTVEFfQUNUKQorCQlpZiAoIShzdGF0ICYgUEFTX0RNQV9UWENIQU5fVENNRFNUQV9BQ1QpKQogCQkJYnJlYWs7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAotCWlmICghKHN0YXQgJiBQQVNfRE1BX1RYQ0hBTl9UQ01EU1RBX0FDVCkpIHsKKwlpZiAoc3RhdCAmIFBBU19ETUFfVFhDSEFOX1RDTURTVEFfQUNUKQogCQlkZXZfZXJyKCZtYWMtPmRtYV9wZGV2LT5kZXYsICJGYWlsZWQgdG8gc3RvcCB0eCBjaGFubmVsXG4iKTsKLQl9CiAKIAlmb3IgKHJldHJpZXMgPSAwOyByZXRyaWVzIDwgTUFYX1JFVFJJRVM7IHJldHJpZXMrKykgewogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQobWFjLT5kbWFfcGRldiwKIAkJCQkgICAgICBQQVNfRE1BX1JYQ0hBTl9DQ01EU1RBKG1hYy0+ZG1hX3J4Y2gpLAogCQkJCSAgICAgICZzdGF0KTsKLQkJaWYgKHN0YXQgJiBQQVNfRE1BX1JYQ0hBTl9DQ01EU1RBX0FDVCkKKwkJaWYgKCEoc3RhdCAmIFBBU19ETUFfUlhDSEFOX0NDTURTVEFfQUNUKSkKIAkJCWJyZWFrOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKLQlpZiAoIShzdGF0ICYgUEFTX0RNQV9SWENIQU5fQ0NNRFNUQV9BQ1QpKSB7CisJaWYgKHN0YXQgJiBQQVNfRE1BX1JYQ0hBTl9DQ01EU1RBX0FDVCkKIAkJZGV2X2VycigmbWFjLT5kbWFfcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHN0b3AgcnggY2hhbm5lbFxuIik7Ci0JfQogCiAJZm9yIChyZXRyaWVzID0gMDsgcmV0cmllcyA8IE1BWF9SRVRSSUVTOyByZXRyaWVzKyspIHsKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG1hYy0+ZG1hX3BkZXYsCiAJCQkJICAgICAgUEFTX0RNQV9SWElOVF9SQ01EU1RBKG1hYy0+ZG1hX2lmKSwKIAkJCQkgICAgICAmc3RhdCk7Ci0JCWlmIChzdGF0ICYgUEFTX0RNQV9SWElOVF9SQ01EU1RBX0FDVCkKKwkJaWYgKCEoc3RhdCAmIFBBU19ETUFfUlhJTlRfUkNNRFNUQV9BQ1QpKQogCQkJYnJlYWs7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAotCWlmICghKHN0YXQgJiBQQVNfRE1BX1JYSU5UX1JDTURTVEFfQUNUKSkgeworCWlmIChzdGF0ICYgUEFTX0RNQV9SWElOVF9SQ01EU1RBX0FDVCkKIAkJZGV2X2VycigmbWFjLT5kbWFfcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHN0b3AgcnggaW50ZXJmYWNlXG4iKTsKLQl9CiAKIAkvKiBUaGVuLCBkaXNhYmxlIHRoZSBjaGFubmVsLiBUaGlzIG11c3QgYmUgZG9uZSBzZXBhcmF0ZWx5IGZyb20KIAkgKiBzdG9wcGluZywgc2luY2UgeW91IGNhbid0IGRpc2FibGUgd2hlbiBhY3RpdmUuCkBAIC03MDYsOCArOTMyLDggQEAKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1hYy0+ZG1hX3BkZXYsCiAJCQkgICAgICAgUEFTX0RNQV9SWElOVF9SQ01EU1RBKG1hYy0+ZG1hX2lmKSwgMCk7CiAKLQlmcmVlX2lycShtYWMtPmRtYV9wZGV2LT5pcnEgKyBtYWMtPmRtYV90eGNoLCBkZXYpOwotCWZyZWVfaXJxKG1hYy0+ZG1hX3BkZXYtPmlycSArIDIwICsgbWFjLT5kbWFfcnhjaCwgZGV2KTsKKwlmcmVlX2lycShtYWMtPnR4X2lycSwgZGV2KTsKKwlmcmVlX2lycShtYWMtPnJ4X2lycSwgZGV2KTsKIAogCS8qIEZyZWUgcmVzb3VyY2VzICovCiAJcGFzZW1pX21hY19mcmVlX3J4X3Jlc291cmNlcyhkZXYpOwpAQCAtNzU3LDYgKzk4Myw3IEBACiAJaWYgKHR4cmluZy0+bmV4dF90b19jbGVhbiAtIHR4cmluZy0+bmV4dF90b191c2UgPT0gVFhfUklOR19TSVpFKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR4cmluZy0+bG9jaywgZmxhZ3MpOwogCQlwYXNlbWlfbWFjX2NsZWFuX3R4KG1hYyk7CisJCXBhc2VtaV9tYWNfcmVzdGFydF90eF9pbnRyKG1hYyk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ0eHJpbmctPmxvY2ssIGZsYWdzKTsKIAogCQlpZiAodHhyaW5nLT5uZXh0X3RvX2NsZWFuIC0gdHhyaW5nLT5uZXh0X3RvX3VzZSA9PQpAQCAtODAyLDYgKzEwMjksNyBAQAogCXJldHVybiAmbWFjLT5zdGF0czsKIH0KIAorCiBzdGF0aWMgdm9pZCBwYXNlbWlfbWFjX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBhc2VtaV9tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CkBAIC04MjYsMTggKzEwNTQsMTcgQEAKIAogCXBrdHMgPSBwYXNlbWlfbWFjX2NsZWFuX3J4KG1hYywgbGltaXQpOwogCisJZGV2LT5xdW90YSAtPSBwa3RzOworCSpidWRnZXQgLT0gcGt0czsKKwogCWlmIChwa3RzIDwgbGltaXQpIHsKIAkJLyogYWxsIGRvbmUsIG5vIG1vcmUgcGFja2V0cyBwcmVzZW50ICovCiAJCW5ldGlmX3J4X2NvbXBsZXRlKGRldik7CiAKLQkJLyogcmUtZW5hYmxlIHJlY2VpdmUgaW50ZXJydXB0cyAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG1hYy0+aW9iX3BkZXYsIFBBU19JT0JfRE1BX0NPTV9USU1FT1VUQ0ZHLAotCQkJCSAgICAgICBQQVNfSU9CX0RNQV9DT01fVElNRU9VVENGR19UQ05UKDEwMDAwMDApKTsKKwkJcGFzZW1pX21hY19yZXN0YXJ0X3J4X2ludHIobWFjKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKIAkJLyogdXNlZCB1cCBvdXIgcXVhbnR1bSwgc28gcmVzY2hlZHVsZSAqLwotCQlkZXYtPnF1b3RhIC09IHBrdHM7Ci0JCSpidWRnZXQgLT0gcGt0czsKIAkJcmV0dXJuIDE7CiAJfQogfQpAQCAtOTM3LDYgKzExNjQsMTEgQEAKIAltYWMtPnJ4X3N0YXR1cyA9ICZkbWFfc3RhdHVzLT5yeF9zdGFbbWFjLT5kbWFfcnhjaF07CiAJbWFjLT50eF9zdGF0dXMgPSAmZG1hX3N0YXR1cy0+dHhfc3RhW21hYy0+ZG1hX3R4Y2hdOwogCisJbWFjLT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIERFRkFVTFRfTVNHX0VOQUJMRSk7CisKKwkvKiBFbmFibGUgbW9zdCBtZXNzYWdlcyBieSBkZWZhdWx0ICovCisJbWFjLT5tc2dfZW5hYmxlID0gKE5FVElGX01TR19JRlVQIDw8IDEgKSAtIDE7CisKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAogCWlmIChlcnIpIHsKQEAgLTk4OCw2ICsxMjIwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwYXNlbWlfbWFjX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9QQVNFTUksIDB4YTAwNSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9QQVNFTUksIDB4YTAwNikgfSwKKwl7IH0sCiB9OwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGFzZW1pX21hY19wY2lfdGJsKTsKQEAgLTEwMTEsOSArMTI0NCw1IEBACiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnBhc2VtaV9tYWNfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUiAoIk9sb2YgSm9oYW5zc29uIDxvbG9mQGxpeG9tLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUEEgU2VtaSBQV1JmaWNpZW50IEV0aGVybmV0IGRyaXZlciIpOwotCiBtb2R1bGVfaW5pdChwYXNlbWlfbWFjX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KHBhc2VtaV9tYWNfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5oIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5oCmluZGV4IGMzZTM3ZTQuLmMyOWVlMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuaAorKysgYi9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KIAogc3RydWN0IHBhc2VtaV9tYWNfdHhyaW5nIHsKIAlzcGlubG9ja190CSBsb2NrOwpAQCAtNTQsNiArNTUsNyBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpkbWFfcGRldjsKIAlzdHJ1Y3QgcGNpX2RldiAqaW9iX3BkZXY7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAogCS8qIFBvaW50ZXIgdG8gdGhlIGNhY2hlYWJsZSBwZXItY2hhbm5lbCBzdGF0dXMgcmVnaXN0ZXJzICovCkBAIC03Myw2ICs3NSwxNCBAQAogCiAJc3RydWN0IHBhc2VtaV9tYWNfdHhyaW5nICp0eDsKIAlzdHJ1Y3QgcGFzZW1pX21hY19yeHJpbmcgKnJ4OworCXVuc2lnbmVkIGxvbmcJdHhfaXJxOworCXVuc2lnbmVkIGxvbmcJcnhfaXJxOworCWludAlsaW5rOworCWludAlzcGVlZDsKKwlpbnQJZHVwbGV4OworCisJdW5zaWduZWQgaW50CW1zZ19lbmFibGU7CisJY2hhcglwaHlfaWRbQlVTX0lEX1NJWkVdOwogfTsKIAogLyogU29mdHdhcmUgc3RhdHVzIGRlc2NyaXB0b3IgKGRlc2NfaW5mbykgKi8KQEAgLTE5MywxMSArMjAzLDE1IEBACiAjZGVmaW5lIFBBU19ETUFfUlhJTlRfUkNNRFNUQShpKQkoMHgyMDArKGkpKl9QQVNfRE1BX1JYSU5UX1NUUklERSkKICNkZWZpbmUgICAgUEFTX0RNQV9SWElOVF9SQ01EU1RBX0VOCTB4MDAwMDAwMDEKICNkZWZpbmUgICAgUEFTX0RNQV9SWElOVF9SQ01EU1RBX1NUCTB4MDAwMDAwMDIKLSNkZWZpbmUgICAgUEFTX0RNQV9SWElOVF9SQ01EU1RBX09PCTB4MDAwMDAxMDAKLSNkZWZpbmUgICAgUEFTX0RNQV9SWElOVF9SQ01EU1RBX0JQCTB4MDAwMDAyMDAKLSNkZWZpbmUgICAgUEFTX0RNQV9SWElOVF9SQ01EU1RBX0RSCTB4MDAwMDA0MDAKKyNkZWZpbmUgICAgUEFTX0RNQV9SWElOVF9SQ01EU1RBX01CVAkweDAwMDAwMDA4CisjZGVmaW5lICAgIFBBU19ETUFfUlhJTlRfUkNNRFNUQV9NRFIJMHgwMDAwMDAxMAorI2RlZmluZSAgICBQQVNfRE1BX1JYSU5UX1JDTURTVEFfTU9PCTB4MDAwMDAwMjAKKyNkZWZpbmUgICAgUEFTX0RNQV9SWElOVF9SQ01EU1RBX01CUAkweDAwMDAwMDQwCiAjZGVmaW5lICAgIFBBU19ETUFfUlhJTlRfUkNNRFNUQV9CVAkweDAwMDAwODAwCi0jZGVmaW5lICAgIFBBU19ETUFfUlhJTlRfUkNNRFNUQV9UQgkweDAwMDAxMDAwCisjZGVmaW5lICAgIFBBU19ETUFfUlhJTlRfUkNNRFNUQV9EUgkweDAwMDAxMDAwCisjZGVmaW5lICAgIFBBU19ETUFfUlhJTlRfUkNNRFNUQV9PTwkweDAwMDAyMDAwCisjZGVmaW5lICAgIFBBU19ETUFfUlhJTlRfUkNNRFNUQV9CUAkweDAwMDA0MDAwCisjZGVmaW5lICAgIFBBU19ETUFfUlhJTlRfUkNNRFNUQV9UQgkweDAwMDA4MDAwCiAjZGVmaW5lICAgIFBBU19ETUFfUlhJTlRfUkNNRFNUQV9BQ1QJMHgwMDAxMDAwMAogI2RlZmluZSAgICBQQVNfRE1BX1JYSU5UX1JDTURTVEFfRFJPUFNfTQkweGZmZmUwMDAwCiAjZGVmaW5lICAgIFBBU19ETUFfUlhJTlRfUkNNRFNUQV9EUk9QU19TCTE3CkBAIC0yOTcsNiArMzExLDcgQEAKICNkZWZpbmUgICAgUEFTX1NUQVRVU19EQ05UX1MJCTE2CiAjZGVmaW5lICAgIFBBU19TVEFUVVNfQlBDTlRfTQkJMHgwMDAwZmZmZjAwMDAwMDAwdWxsCiAjZGVmaW5lICAgIFBBU19TVEFUVVNfQlBDTlRfUwkJMzIKKyNkZWZpbmUgICAgUEFTX1NUQVRVU19DQVVTRV9NCQkweGYwMDAwMDAwMDAwMDAwMDB1bGwKICNkZWZpbmUgICAgUEFTX1NUQVRVU19USU1FUgkJMHgxMDAwMDAwMDAwMDAwMDAwdWxsCiAjZGVmaW5lICAgIFBBU19TVEFUVVNfRVJST1IJCTB4MjAwMDAwMDAwMDAwMDAwMHVsbAogI2RlZmluZSAgICBQQVNfU1RBVFVTX1NPRlQJCTB4NDAwMDAwMDAwMDAwMDAwMHVsbApAQCAtMzI2LDcgKzM0MSw3IEBACiAJCQkJCQkgUEFTX0lPQl9ETUFfVFhDSF9TVEFUX0NOVERFTF9NKQogI2RlZmluZSBQQVNfSU9CX0RNQV9SWENIX1JFU0VUKGkpCSgweDE1MDAgKyAoaSkqNCkKICNkZWZpbmUgICAgUEFTX0lPQl9ETUFfUlhDSF9SRVNFVF9QQ05UX00JMHhmZmZmMDAwMAotI2RlZmluZSAgICBQQVNfSU9CX0RNQV9SWENIX1JFU0VUX1BDTlRfUwkwCisjZGVmaW5lICAgIFBBU19JT0JfRE1BX1JYQ0hfUkVTRVRfUENOVF9TCTE2CiAjZGVmaW5lICAgIFBBU19JT0JfRE1BX1JYQ0hfUkVTRVRfUENOVCh4KQkoKCh4KSA8PCBQQVNfSU9CX0RNQV9SWENIX1JFU0VUX1BDTlRfUykgJiBcCiAJCQkJCQkgUEFTX0lPQl9ETUFfUlhDSF9SRVNFVF9QQ05UX00pCiAjZGVmaW5lICAgIFBBU19JT0JfRE1BX1JYQ0hfUkVTRVRfUENOVFJTVAkweDAwMDAwMDIwCkBAIC0zMzcsNyArMzUyLDcgQEAKICNkZWZpbmUgICAgUEFTX0lPQl9ETUFfUlhDSF9SRVNFVF9QSU5UQwkJMHgwMDAwMDAwMQogI2RlZmluZSBQQVNfSU9CX0RNQV9UWENIX1JFU0VUKGkpCSgweDE2MDAgKyAoaSkqNCkKICNkZWZpbmUgICAgUEFTX0lPQl9ETUFfVFhDSF9SRVNFVF9QQ05UX00JMHhmZmZmMDAwMAotI2RlZmluZSAgICBQQVNfSU9CX0RNQV9UWENIX1JFU0VUX1BDTlRfUwkwCisjZGVmaW5lICAgIFBBU19JT0JfRE1BX1RYQ0hfUkVTRVRfUENOVF9TCTE2CiAjZGVmaW5lICAgIFBBU19JT0JfRE1BX1RYQ0hfUkVTRVRfUENOVCh4KQkoKCh4KSA8PCBQQVNfSU9CX0RNQV9UWENIX1JFU0VUX1BDTlRfUykgJiBcCiAJCQkJCQkgUEFTX0lPQl9ETUFfVFhDSF9SRVNFVF9QQ05UX00pCiAjZGVmaW5lICAgIFBBU19JT0JfRE1BX1RYQ0hfUkVTRVRfUENOVFJTVAkweDAwMDAwMDIwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9LY29uZmlnCmluZGV4IDc0Zjg2MjAuLjVkNjU4YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9LY29uZmlnCkBAIC0yLDExICsyLDkgQEAKICMgUENNQ0lBIE5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24KICMKIAotbWVudSAiUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRERVZJQ0VTICYmIFBDTUNJQSE9bgotCi1jb25maWcgTkVUX1BDTUNJQQorbWVudWNvbmZpZyBORVRfUENNQ0lBCiAJYm9vbCAiUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ01DSUEKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBpZiB5b3Ugd291bGQgbGlrZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIGFueSBQQ01DSUEgb3IgQ2FyZEJ1cwogCSAgbmV0d29yayBhZGFwdGVycywgdGhlbiBzYXkgWSB0byB0aGUgZHJpdmVyIGZvciB5b3VyIHBhcnRpY3VsYXIgY2FyZApAQCAtMjEsOSArMTksMTAgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAoraWYgTkVUX1BDTUNJQQorCiBjb25maWcgUENNQ0lBXzNDNTg5CiAJdHJpc3RhdGUgIjNDb20gM2M1ODkgUENNQ0lBIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfUENNQ0lBICYmIFBDTUNJQQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBhdHRhY2ggYSAzQ29tIDNjNTg5IG9yIGNvbXBhdGlibGUgUENNQ0lBCiAJICAoUEMtY2FyZCkgRXRoZXJuZXQgY2FyZCB0byB5b3VyIGNvbXB1dGVyLgpAQCAtMzMsNyArMzIsNiBAQAogCiBjb25maWcgUENNQ0lBXzNDNTc0CiAJdHJpc3RhdGUgIjNDb20gM2M1NzQgUENNQ0lBIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfUENNQ0lBICYmIFBDTUNJQQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBhdHRhY2ggYSAzQ29tIDNjNTc0IG9yIGNvbXBhdGlibGUgUENNQ0lBCiAJICAoUEMtY2FyZCkgRmFzdCBFdGhlcm5ldCBjYXJkIHRvIHlvdXIgY29tcHV0ZXIuCkBAIC00Myw3ICs0MSw2IEBACiAKIGNvbmZpZyBQQ01DSUFfRk1WSjE4WAogCXRyaXN0YXRlICJGdWppdHN1IEZNVi1KMTh4IFBDTUNJQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX1BDTUNJQSAmJiBQQ01DSUEKIAlzZWxlY3QgQ1JDMzIKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gYXR0YWNoIGEgRnVqaXRzdSBGTVYtSjE4eCBvciBjb21wYXRpYmxlCkBAIC01NCw3ICs1MSw2IEBACiAKIGNvbmZpZyBQQ01DSUFfUENORVQKIAl0cmlzdGF0ZSAiTkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfUENNQ0lBICYmIFBDTUNJQQogCXNlbGVjdCBDUkMzMgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBhdHRhY2ggYW4gTkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBCkBAIC02NSw3ICs2MSw2IEBACiAKIGNvbmZpZyBQQ01DSUFfTk1DTEFOCiAJdHJpc3RhdGUgIk5ldyBNZWRpYSBQQ01DSUEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE5FVF9QQ01DSUEgJiYgUENNQ0lBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIGF0dGFjaCBhIE5ldyBNZWRpYSBFdGhlcm5ldCBvciBMaXZlV2lyZQogCSAgUENNQ0lBIChQQy1jYXJkKSBFdGhlcm5ldCBjYXJkIHRvIHlvdXIgY29tcHV0ZXIuCkBAIC03NSw3ICs3MCw2IEBACiAKIGNvbmZpZyBQQ01DSUFfU01DOTFDOTIKIAl0cmlzdGF0ZSAiU01DIDkxQ3h4IFBDTUNJQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX1BDTUNJQSAmJiBQQ01DSUEKIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgTUlJCiAJaGVscApAQCAtODcsNyArODEsNiBAQAogCiBjb25maWcgUENNQ0lBX1hJUkMyUFMKIAl0cmlzdGF0ZSAiWGlyY29tIDE2LWJpdCBQQ01DSUEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE5FVF9QQ01DSUEgJiYgUENNQ0lBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIGF0dGFjaCBhIFhpcmNvbSAxNi1iaXQgUENNQ0lBIChQQy1jYXJkKQogCSAgRXRoZXJuZXQgb3IgRmFzdCBFdGhlcm5ldCBjYXJkIHRvIHlvdXIgY29tcHV0ZXIuCkBAIC05Nyw3ICs5MCw2IEBACiAKIGNvbmZpZyBQQ01DSUFfQVhORVQKIAl0cmlzdGF0ZSAiQXNpeCBBWDg4MTkwIFBDTUNJQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX1BDTUNJQSAmJiBQQ01DSUEKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gYXR0YWNoIGFuIEFzaXggQVg4ODE5MC1iYXNlZCBQQ01DSUEKIAkgIChQQy1jYXJkKSBGYXN0IEV0aGVybmV0IGNhcmQgdG8geW91ciBjb21wdXRlci4gIFRoZXNlIGNhcmRzIGFyZQpAQCAtMTA5LDcgKzEwMSw3IEBACiAKIGNvbmZpZyBBUkNORVRfQ09NMjAwMjBfQ1MKIAl0cmlzdGF0ZSAiQ09NMjAwMjAgQVJDbmV0IFBDTUNJQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX1BDTUNJQSAmJiBBUkNORVRfQ09NMjAwMjAgJiYgUENNQ0lBCisJZGVwZW5kcyBvbiBBUkNORVRfQ09NMjAwMjAKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gYXR0YWNoIHRoaXMgdHlwZSBvZiBBUkNuZXQgUENNQ0lBIGNhcmQKIAkgIHRvIHlvdXIgY29tcHV0ZXIuCkBAIC0xMTksNyArMTExLDcgQEAKIAogY29uZmlnIFBDTUNJQV9JQk1UUgogCXRyaXN0YXRlICJJQk0gUENNQ0lBIHRva2VucmluZyBhZGFwdGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfUENNQ0lBICYmIElCTVRSIT15ICYmIFRSICYmIFBDTUNJQSAmJiAhNjRCSVQKKwlkZXBlbmRzIG9uIElCTVRSIT15ICYmIFRSICYmICE2NEJJVAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBhdHRhY2ggdGhpcyB0eXBlIG9mIFRva2VuIFJpbmcgUENNQ0lBCiAJICBjYXJkIHRvIHlvdXIgY29tcHV0ZXIuIFlvdSB0aGVuIGFsc28gbmVlZCB0byBzYXkgWSB0byAiVG9rZW4gUmluZwpAQCAtMTI4LDUgKzEyMCw0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKIAkgIGNhbGxlZCBpYm10cl9jcy4KIAotZW5kbWVudQotCitlbmRpZiAjIE5FVF9QQ01DSUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMKaW5kZXggMTA2MDE1NC4uNGVjYjhjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMKQEAgLTE4OSwxNiArMTg5LDIwIEBACiB7CiAgICAgc3RydWN0IGlibXRyX2Rldl90ICppbmZvID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+ZGV2OworICAgICBzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogICAgIERFQlVHKDAsICJpYm10cl9kZXRhY2goMHglcClcbiIsIGxpbmspOworICAgIAorICAgIC8qIAorICAgICAqIFdoZW4gdGhlIGNhcmQgcmVtb3ZhbCBpbnRlcnJ1cHQgaGl0cyB0b2tfaW50ZXJydXB0KCksIAorICAgICAqIGJhaWwgb3V0IGVhcmx5LCBzbyB3ZSBkb24ndCBjcmFzaCB0aGUgbWFjaGluZSAKKyAgICAgKi8KKyAgICB0aS0+c3JhbV9waHlzIHw9IDE7CiAKICAgICBpZiAobGluay0+ZGV2X25vZGUpCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQotICAgIHsKLQlzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlkZWxfdGltZXJfc3luYygmKHRpLT50cl90aW1lcikpOwotICAgIH0KKyAgICAKKyAgICBkZWxfdGltZXJfc3luYygmKHRpLT50cl90aW1lcikpOwogCiAgICAgaWJtdHJfcmVsZWFzZShsaW5rKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKaW5kZXggODA5ZWM0NC4uMjU4ZDZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCkBAIC0xNDIwLDcgKzE0MjAsNyBAQAogICAgIGtpb19hZGRyX3QgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7Ci0gICAgY2hhciAqYWRkcjsKKyAgICB1bnNpZ25lZCBjaGFyICphZGRyOwogICAgIGludCBpLGosayxuOwogCiAgICAgU2VsZWN0UGFnZShrPTB4NTApOwpAQCAtMTQyOSw2ICsxNDI5LDkgQEAKIAkgICAgaWYgKCsrbiA+IDkpCiAJCWJyZWFrOwogCSAgICBpID0gMDsKKwkgICAgaWYgKG4gPiAxICYmIG4gPD0gZGV2LT5tY19jb3VudCAmJiBkbWkpIHsKKwkgICAJIGRtaSA9IGRtaS0+bmV4dDsKKwkgICAgfQogCX0KIAlpZiAoaiA+IDE1KSB7CiAJICAgIGogPSA4OwpAQCAtMTQzNiwxMCArMTQzOSw5IEBACiAJICAgIFNlbGVjdFBhZ2Uoayk7CiAJfQogCi0JaWYgKG4gJiYgbiA8PSBkZXYtPm1jX2NvdW50ICYmIGRtaSkgeworCWlmIChuICYmIG4gPD0gZGV2LT5tY19jb3VudCAmJiBkbWkpCiAJICAgIGFkZHIgPSBkbWktPmRtaV9hZGRyOwotCSAgICBkbWkgPSBkbWktPm5leHQ7Ci0JfSBlbHNlCisJZWxzZQogCSAgICBhZGRyID0gZGV2LT5kZXZfYWRkcjsKIAogCWlmIChscC0+bW9oYXdrKQpAQCAtMTQ2NSwxMCArMTQ2NywxMCBAQAogICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsgLyogc25vb3AgKi8KIAlQdXRCeXRlKFhJUkNSRUc0Ml9TV0MxLCAweDA2KTsgLyogc2V0IE1QRSBhbmQgUE1FICovCiAgICAgfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gOSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKLQlQdXRCeXRlKFhJUkNSRUc0Ml9TV0MxLCAweDA2KTsgLyogc2V0IE1QRSAqLworCVB1dEJ5dGUoWElSQ1JFRzQyX1NXQzEsIDB4MDIpOyAvKiBzZXQgTVBFICovCiAgICAgfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50KSB7CiAJLyogdGhlIGNoaXAgY2FuIGZpbHRlciA5IGFkZHJlc3NlcyBwZXJmZWN0bHkgKi8KLQlQdXRCeXRlKFhJUkNSRUc0Ml9TV0MxLCAweDAwKTsKKwlQdXRCeXRlKFhJUkNSRUc0Ml9TV0MxLCAweDAxKTsKIAlTZWxlY3RQYWdlKDB4NDApOwogCVB1dEJ5dGUoWElSQ1JFRzQwX0NNRDAsIE9mZmxpbmUpOwogCXNldF9hZGRyZXNzZXMoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKaW5kZXggZjk5NGYxMi4uMDliNmYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKQEAgLTIsNjkgKzIsNjEgQEAKICMgUEhZIExheWVyIENvbmZpZ3VyYXRpb24KICMKIAotbWVudSAiUEhZIGRldmljZSBzdXBwb3J0IgotCi1jb25maWcgUEhZTElCCittZW51Y29uZmlnIFBIWUxJQgogCXRyaXN0YXRlICJQSFkgRGV2aWNlIHN1cHBvcnQgYW5kIGluZnJhc3RydWN0dXJlIgorCWRlcGVuZHMgb24gIVMzOTAKIAlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiAoQlJPS0VOIHx8ICFTMzkwKQogCWhlbHAKIAkgIEV0aGVybmV0IGNvbnRyb2xsZXJzIGFyZSB1c3VhbGx5IGF0dGFjaGVkIHRvIFBIWQogCSAgZGV2aWNlcy4gIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGluZnJhc3RydWN0dXJlIGZvcgogCSAgbWFuYWdpbmcgUEhZIGRldmljZXMuCiAKK2lmIFBIWUxJQgorCiBjb21tZW50ICJNSUkgUEhZIGRldmljZSBkcml2ZXJzIgotCWRlcGVuZHMgb24gUEhZTElCCiAKIGNvbmZpZyBNQVJWRUxMX1BIWQogCXRyaXN0YXRlICJEcml2ZXJzIGZvciBNYXJ2ZWxsIFBIWXMiCi0JZGVwZW5kcyBvbiBQSFlMSUIKIAktLS1oZWxwLS0tCiAJICBDdXJyZW50bHkgaGFzIGEgZHJpdmVyIGZvciB0aGUgODhFMTAxMVMKIAkKIGNvbmZpZyBEQVZJQ09NX1BIWQogCXRyaXN0YXRlICJEcml2ZXJzIGZvciBEYXZpY29tIFBIWXMiCi0JZGVwZW5kcyBvbiBQSFlMSUIKIAktLS1oZWxwLS0tCiAJICBDdXJyZW50bHkgc3VwcG9ydHMgZG05MTYxZSBhbmQgZG05MTMxCiAKIGNvbmZpZyBRU0VNSV9QSFkKIAl0cmlzdGF0ZSAiRHJpdmVycyBmb3IgUXVhbGl0eSBTZW1pY29uZHVjdG9yIFBIWXMiCi0JZGVwZW5kcyBvbiBQSFlMSUIKIAktLS1oZWxwLS0tCiAJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHFzNjYxMgogCiBjb25maWcgTFhUX1BIWQogCXRyaXN0YXRlICJEcml2ZXJzIGZvciB0aGUgSW50ZWwgTFhUIFBIWXMiCi0JZGVwZW5kcyBvbiBQSFlMSUIKIAktLS1oZWxwLS0tCiAJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIGx4dDk3MCwgbHh0OTcxCiAKIGNvbmZpZyBDSUNBREFfUEhZCiAJdHJpc3RhdGUgIkRyaXZlcnMgZm9yIHRoZSBDaWNhZGEgUEhZcyIKLQlkZXBlbmRzIG9uIFBIWUxJQgogCS0tLWhlbHAtLS0KIAkgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgY2lzODIwNAorCiBjb25maWcgVklURVNTRV9QSFkKICAgICAgICAgdHJpc3RhdGUgIkRyaXZlcnMgZm9yIHRoZSBWaXRlc3NlIFBIWXMiCi0gICAgICAgIGRlcGVuZHMgb24gUEhZTElCCiAgICAgICAgIC0tLWhlbHAtLS0KICAgICAgICAgICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDQKIAogY29uZmlnIFNNU0NfUEhZCiAJdHJpc3RhdGUgIkRyaXZlcnMgZm9yIFNNU0MgUEhZcyIKLQlkZXBlbmRzIG9uIFBIWUxJQgogCS0tLWhlbHAtLS0KIAkgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgTEFOODNDMTg1IFBIWQogCiBjb25maWcgQlJPQURDT01fUEhZCiAJdHJpc3RhdGUgIkRyaXZlcnMgZm9yIEJyb2FkY29tIFBIWXMiCi0JZGVwZW5kcyBvbiBQSFlMSUIKIAktLS1oZWxwLS0tCiAJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIEJDTTU0MTEsIEJDTTU0MjEgYW5kIEJDTTU0NjEgUEhZcy4KIAogY29uZmlnIEZJWEVEX1BIWQogCXRyaXN0YXRlICJEcml2ZXJzIGZvciBQSFkgZW11bGF0aW9uIG9uIGZpeGVkIHNwZWVkL2xpbmsiCi0JZGVwZW5kcyBvbiBQSFlMSUIKIAktLS1oZWxwLS0tCiAJICBBZGRzIHRoZSBkcml2ZXIgdG8gUEhZIGxheWVyIHRvIGNvdmVyIHRoZSBib2FyZHMgdGhhdCBkbyBub3QgaGF2ZSBhbnkgUEhZIGJvdW5kLAogCSAgYnV0IHdpdGggdGhlIGFiaWxpdHkgdG8gbWFuaXB1bGF0ZSB0aGUgc3BlZWQvbGluayBpbiBzb2Z0d2FyZS4gVGhlIHJlbGV2YW50IE1JSQpAQCAtNzksNSArNzEsNCBAQAogCWJvb2wgIkVtdWxhdGlvbiBmb3IgMTAwTSBGZHggZml4ZWQgUEhZIGJlaGF2aW9yIgogCWRlcGVuZHMgb24gRklYRURfUEhZCiAKLWVuZG1lbnUKLQorZW5kaWYgIyBQSFlMSUIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmMgYi9kcml2ZXJzL25ldC9waHkvZGF2aWNvbS5jCmluZGV4IDUxOWJhYTMuLjdlZDYzMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2Rhdmljb20uYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkbTkxNjFfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRtOTE2MWVfZHJpdmVyID0gewogCS5waHlfaWQJCT0gMHgwMTgxYjg4MCwKIAkubmFtZQkJPSAiRGF2aWNvbSBETTkxNjFFIiwKIAkucGh5X2lkX21hc2sJPSAweDBmZmZmZmYwLApAQCAtMTQ3LDcgKzE0NywxOCBAQAogCS5jb25maWdfaW5pdAk9IGRtOTE2MV9jb25maWdfaW5pdCwKIAkuY29uZmlnX2FuZWcJPSBkbTkxNjFfY29uZmlnX2FuZWcsCiAJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAotCS5kcml2ZXIgCT0geyAub3duZXIgPSBUSElTX01PRFVMRSx9LAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSx9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRtOTE2MWFfZHJpdmVyID0geworCS5waHlfaWQJCT0gMHgwMTgxYjhhMCwKKwkubmFtZQkJPSAiRGF2aWNvbSBETTkxNjFBIiwKKwkucGh5X2lkX21hc2sJPSAweDBmZmZmZmYwLAorCS5mZWF0dXJlcwk9IFBIWV9CQVNJQ19GRUFUVVJFUywKKwkuY29uZmlnX2luaXQJPSBkbTkxNjFfY29uZmlnX2luaXQsCisJLmNvbmZpZ19hbmVnCT0gZG05MTYxX2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUsfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkbTkxMzFfZHJpdmVyID0gewpAQCAtMTYwLDMxICsxNzEsMzggQEAKIAkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCiAJLmFja19pbnRlcnJ1cHQJPSBkbTkxNjFfYWNrX2ludGVycnVwdCwKIAkuY29uZmlnX2ludHIJPSBkbTkxNjFfY29uZmlnX2ludHIsCi0JLmRyaXZlciAJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLH0sCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLH0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBkYXZpY29tX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlcigmZG05MTYxX2RyaXZlcik7CisJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlcigmZG05MTYxZV9kcml2ZXIpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyMTsKIAotCXJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoJmRtOTEzMV9kcml2ZXIpOworCXJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoJmRtOTE2MWFfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjI7CisKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZkbTkxMzFfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjM7CiAJcmV0dXJuIDA7CiAKLSBlcnIyOgkKLQlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmRtOTE2MV9kcml2ZXIpOworIGVycjM6CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZkbTkxNjFhX2RyaXZlcik7CisgZXJyMjoKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmRtOTE2MWVfZHJpdmVyKTsKICBlcnIxOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkYXZpY29tX2V4aXQodm9pZCkKIHsKLQlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmRtOTE2MV9kcml2ZXIpOworCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmZG05MTYxZV9kcml2ZXIpOworCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmZG05MTYxYV9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmZG05MTMxX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9maXhlZC5jIGIvZHJpdmVycy9uZXQvcGh5L2ZpeGVkLmMKaW5kZXggNjhjOTliNGMuLmJiOTY2OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9maXhlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9maXhlZC5jCkBAIC04OSw2ICs4OSw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgVGhpcyBpcyB1c2VkIGZvciB1cGRhdGluZyBpbnRlcm5hbCBtaWkgcmVncyBmcm9tIHRoZSBzdGF0dXMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoQ09ORklHX0ZJWEVEX01JSV8xMDBfRkRYKSB8fCBkZWZpbmVkKENPTkZJR19GSVhFRF9NSUlfMTBfRkRYKQogc3RhdGljIGludCBmaXhlZF9tZGlvX3VwZGF0ZV9yZWdzKHN0cnVjdCBmaXhlZF9pbmZvICpmaXhlZCkKIHsKIAl1MTYgKnJlZ3MgPSBmaXhlZC0+cmVnczsKQEAgLTE2NSw2ICsxNjYsNyBAQAogCS8qbm90aGluZyBoZXJlIC0gbm8gd2F5L25lZWQgdG8gcmVzZXQgaXQqLwogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgZml4ZWRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKQEAgLTE5NCw2ICsxOTYsNyBAQAogICogbnVtYmVyIGlzIHVzZWQgdG8gY3JlYXRlIG11bHRpcGxlIGZpeGVkIFBIWXMsIHNvIHRoYXQgc2V2ZXJhbCBkZXZpY2VzIGNhbgogICogdXRpbGl6ZSB0aGVtIHNpbXVsdGFuZW91c2x5LgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChDT05GSUdfRklYRURfTUlJXzEwMF9GRFgpIHx8IGRlZmluZWQoQ09ORklHX0ZJWEVEX01JSV8xMF9GRFgpCiBzdGF0aWMgaW50IGZpeGVkX21kaW9fcmVnaXN0ZXJfZGV2aWNlKGludCBudW1iZXIsIGludCBzcGVlZCwgaW50IGR1cGxleCkKIHsKIAlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKQEAgLTMwMSw2ICszMDQsNyBAQAogCiAJcmV0dXJuIGVycjsKIH0KKyNlbmRpZgogCiAKIE1PRFVMRV9ERVNDUklQVElPTigiRml4ZWQgUEhZIGRldmljZSAmIGRyaXZlciBmb3IgUEFMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKaW5kZXggZWVkNDMzZC4uZjcxZGFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwpAQCAtNjYyLDEwICs2NjIsMTAgQEAKIAkJcGh5X2Vycm9yKHBoeWRldik7CiAKIAkvKgotCSAqIEZpbmlzaCBhbnkgcGVuZGluZyB3b3JrOyB3ZSBtaWdodCBoYXZlIGJlZW4gc2NoZWR1bGVkCi0JICogdG8gYmUgY2FsbGVkIGZyb20ga2V2ZW50ZCBvdXJzZWx2ZXMsIHRob3VnaC4KKwkgKiBGaW5pc2ggYW55IHBlbmRpbmcgd29yazsgd2UgbWlnaHQgaGF2ZSBiZWVuIHNjaGVkdWxlZCB0byBiZSBjYWxsZWQKKwkgKiBmcm9tIGtldmVudGQgb3Vyc2VsdmVzLCBidXQgY2FuY2VsX3dvcmtfc3luYygpIGhhbmRsZXMgdGhhdC4KIAkgKi8KLQlydW5fc2NoZWR1bGVkX3dvcmsoJnBoeWRldi0+cGh5X3F1ZXVlKTsKKwljYW5jZWxfd29ya19zeW5jKCZwaHlkZXYtPnBoeV9xdWV1ZSk7CiAKIAlmcmVlX2lycShwaHlkZXYtPmlycSwgcGh5ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKaW5kZXggNmQ1OTZjYS4uNTQxMTY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYyBiL2RyaXZlcnMvbmV0L3FsYTN4eHguYwppbmRleCBkODc2NmMwLi41ODViZTA0IDEwMDc1NQotLS0gYS9kcml2ZXJzL25ldC9xbGEzeHh4LmMKKysrIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCkBAIC00MDQ0LDcgKzQwNDQsNyBAQAogCWlmIChwY2lfdXNpbmdfZGFjKQogCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAJaWYgKHFkZXYtPmRldmljZV9pZCA9PSBRTDMwMzJfREVWSUNFX0lEKQotCQluZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9TRyk7CisJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0c7CiAKIAlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVycyA9CiAJICAgIGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCA0NTg3NmE4Li41ZWM3NzUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC04ODYsMTYgKzg4Niw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgcnRsODE2OV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKLXsKLQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwotCXZsYW5fZ3JvdXBfc2V0X2RldmljZSh0cC0+dmxncnAsIHZpZCwgTlVMTCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIGludCBydGw4MTY5X3J4X3ZsYW5fc2tiKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjLAogCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xNjcxLDcgKzE2NjEsNiBAQAogI2lmZGVmIENPTkZJR19SODE2OV9WTEFOCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CiAJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gcnRsODE2OV92bGFuX3J4X3JlZ2lzdGVyOwotCWRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IHJ0bDgxNjlfdmxhbl9yeF9raWxsX3ZpZDsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uYyBiL2RyaXZlcnMvbmV0L3MyaW8uYwppbmRleCAyOTBlMWMxLi5jNmJhM2RlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtODQsNyArODQsNyBAQAogI2luY2x1ZGUgInMyaW8uaCIKICNpbmNsdWRlICJzMmlvLXJlZ3MuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjIyLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIyLjAuMjMuMSIKIAogLyogUzJpbyBEcml2ZXIgbmFtZSAmIHZlcnNpb24uICovCiBzdGF0aWMgY2hhciBzMmlvX2RyaXZlcl9uYW1lW10gPSAiTmV0ZXJpb24iOwpAQCAtMjgxLDYgKzI4MSwyOCBAQAogCSgibHJvX291dF9vZl9zZXF1ZW5jZV9wa3RzIiksCiAJKCJscm9fZmx1c2hfZHVlX3RvX21heF9wa3RzIiksCiAJKCJscm9fYXZnX2FnZ3JfcGt0cyIpLAorCSgibWVtX2FsbG9jX2ZhaWxfY250IiksCisJKCJ3YXRjaGRvZ190aW1lcl9jbnQiKSwKKwkoIm1lbV9hbGxvY2F0ZWQiKSwKKwkoIm1lbV9mcmVlZCIpLAorCSgibGlua191cF9jbnQiKSwKKwkoImxpbmtfZG93bl9jbnQiKSwKKwkoImxpbmtfdXBfdGltZSIpLAorCSgibGlua19kb3duX3RpbWUiKSwKKwkoInR4X3Rjb2RlX2J1Zl9hYm9ydF9jbnQiKSwKKwkoInR4X3Rjb2RlX2Rlc2NfYWJvcnRfY250IiksCisJKCJ0eF90Y29kZV9wYXJpdHlfZXJyX2NudCIpLAorCSgidHhfdGNvZGVfbGlua19sb3NzX2NudCIpLAorCSgidHhfdGNvZGVfbGlzdF9wcm9jX2Vycl9jbnQiKSwKKwkoInJ4X3Rjb2RlX3Bhcml0eV9lcnJfY250IiksCisJKCJyeF90Y29kZV9hYm9ydF9jbnQiKSwKKwkoInJ4X3Rjb2RlX3Bhcml0eV9hYm9ydF9jbnQiKSwKKwkoInJ4X3Rjb2RlX3JkYV9mYWlsX2NudCIpLAorCSgicnhfdGNvZGVfdW5rbl9wcm90X2NudCIpLAorCSgicnhfdGNvZGVfZmNzX2Vycl9jbnQiKSwKKwkoInJ4X3Rjb2RlX2J1Zl9zaXplX2Vycl9jbnQiKSwKKwkoInJ4X3Rjb2RlX3J4ZF9jb3JydXB0X2NudCIpLAorCSgicnhfdGNvZGVfdW5rbl9lcnJfY250IikKIH07CiAKICNkZWZpbmUgUzJJT19YRU5BX1NUQVRfTEVOIHNpemVvZihldGh0b29sX3hlbmFfc3RhdHNfa2V5cykvIEVUSF9HU1RSSU5HX0xFTgpAQCAtMzE4LDE3ICszNDAsNiBAQAogLyogQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciAnUlhfUEFfQ0ZHX1NUUklQX1ZMQU5fVEFHJyBiaXQgaXMgc2V0IG9yIG5vdCAqLwogc3RhdGljIGludCB2bGFuX3N0cmlwX2ZsYWc7CiAKLS8qIFVucmVnaXN0ZXIgdGhlIHZsYW4gKi8KLXN0YXRpYyB2b2lkIHMyaW9fdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHZpZCkKLXsKLQlzdHJ1Y3QgczJpb19uaWMgKm5pYyA9IGRldi0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm5pYy0+dHhfbG9jaywgZmxhZ3MpOwotCXZsYW5fZ3JvdXBfc2V0X2RldmljZShuaWMtPnZsZ3JwLCB2aWQsIE5VTEwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5pYy0+dHhfbG9jaywgZmxhZ3MpOwotfQotCiAvKgogICogQ29uc3RhbnRzIHRvIGJlIHByb2dyYW1tZWQgaW50byB0aGUgWGVuYSdzIHJlZ2lzdGVycywgdG8gY29uZmlndXJlCiAgKiB0aGUgWEFVSS4KQEAgLTQ5MCw2ICs1MDEsNyBAQAogCiAJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CisJdW5zaWduZWQgbG9uZyBsb25nIG1lbV9hbGxvY2F0ZWQgPSAwOwogCiAJbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKIAljb25maWcgPSAmbmljLT5jb25maWc7CkBAIC01MTksNiArNTMxLDcgQEAKIAkJCQkgICJNYWxsb2MgZmFpbGVkIGZvciBsaXN0X2luZm9cbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KKwkJbWVtX2FsbG9jYXRlZCArPSBsaXN0X2hvbGRlcl9zaXplOwogCQltZW1zZXQobWFjX2NvbnRyb2wtPmZpZm9zW2ldLmxpc3RfaW5mbywgMCwgbGlzdF9ob2xkZXJfc2l6ZSk7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnR4X2ZpZm9fbnVtOyBpKyspIHsKQEAgLTU2NSw2ICs1NzgsNyBAQAogCQkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICJmYWlsZWQgZm9yIFR4RExcbiIpOwogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQl9CisJCQkJbWVtX2FsbG9jYXRlZCArPSBQQUdFX1NJWkU7CiAJCQl9CiAJCQl3aGlsZSAoayA8IGxzdF9wZXJfcGFnZSkgewogCQkJCWludCBsID0gKGogKiBsc3RfcGVyX3BhZ2UpICsgazsKQEAgLTU4Miw2ICs1OTYsNyBAQAogCW5pYy0+dWZvX2luX2JhbmRfdiA9IGtjYWxsb2Moc2l6ZSwgc2l6ZW9mKHU2NCksIEdGUF9LRVJORUwpOwogCWlmICghbmljLT51Zm9faW5fYmFuZF92KQogCQlyZXR1cm4gLUVOT01FTTsKKwkgbWVtX2FsbG9jYXRlZCArPSAoc2l6ZSAqIHNpemVvZih1NjQpKTsKIAogCS8qIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIFJYRHMgaW4gUmluZ3MgKi8KIAlzaXplID0gMDsKQEAgLTYzOSw2ICs2NTQsNyBAQAogCQkJCXJ4X2Jsb2Nrcy0+YmxvY2tfdmlydF9hZGRyID0gdG1wX3ZfYWRkcjsKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KKwkJCW1lbV9hbGxvY2F0ZWQgKz0gc2l6ZTsKIAkJCW1lbXNldCh0bXBfdl9hZGRyLCAwLCBzaXplKTsKIAkJCXJ4X2Jsb2Nrcy0+YmxvY2tfdmlydF9hZGRyID0gdG1wX3ZfYWRkcjsKIAkJCXJ4X2Jsb2Nrcy0+YmxvY2tfZG1hX2FkZHIgPSB0bXBfcF9hZGRyOwpAQCAtNjQ3LDYgKzY2Myw4IEBACiAJCQkJCQkgIEdGUF9LRVJORUwpOwogCQkJaWYgKCFyeF9ibG9ja3MtPnJ4ZHMpCiAJCQkJcmV0dXJuIC1FTk9NRU07CisJCQltZW1fYWxsb2NhdGVkICs9IAorCQkJKHNpemVvZihzdHJ1Y3QgcnhkX2luZm8pKiByeGRfY291bnRbbmljLT5yeGRfbW9kZV0pOwogCQkJZm9yIChsPTA7IGw8cnhkX2NvdW50W25pYy0+cnhkX21vZGVdO2wrKykgewogCQkJCXJ4X2Jsb2Nrcy0+cnhkc1tsXS52aXJ0X2FkZHIgPQogCQkJCQlyeF9ibG9ja3MtPmJsb2NrX3ZpcnRfYWRkciArCkBAIC02ODksNiArNzA3LDcgQEAKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCQkJaWYgKCFtYWNfY29udHJvbC0+cmluZ3NbaV0uYmEpCiAJCQkJcmV0dXJuIC1FTk9NRU07CisJCQltZW1fYWxsb2NhdGVkICs9KHNpemVvZihzdHJ1Y3QgYnVmZkFkZCAqKSAqIGJsa19jbnQpOwogCQkJZm9yIChqID0gMDsgaiA8IGJsa19jbnQ7IGorKykgewogCQkJCWludCBrID0gMDsKIAkJCQltYWNfY29udHJvbC0+cmluZ3NbaV0uYmFbal0gPQpAQCAtNjk3LDYgKzcxNiw4IEBACiAJCQkJCQlHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIW1hY19jb250cm9sLT5yaW5nc1tpXS5iYVtqXSkKIAkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJbWVtX2FsbG9jYXRlZCArPSAoc2l6ZW9mKHN0cnVjdCBidWZmQWRkKSAqICBcCisJCQkJCShyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKSk7CiAJCQkJd2hpbGUgKGsgIT0gcnhkX2NvdW50W25pYy0+cnhkX21vZGVdKSB7CiAJCQkJCWJhID0gJm1hY19jb250cm9sLT5yaW5nc1tpXS5iYVtqXVtrXTsKIApAQCAtNzA0LDYgKzcyNSw4IEBACiAJCQkJCSAgICAoQlVGMF9MRU4gKyBBTElHTl9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJCQkJaWYgKCFiYS0+YmFfMF9vcmcpCiAJCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQkJbWVtX2FsbG9jYXRlZCArPSAKKwkJCQkJCShCVUYwX0xFTiArIEFMSUdOX1NJWkUpOwogCQkJCQl0bXAgPSAodW5zaWduZWQgbG9uZyliYS0+YmFfMF9vcmc7CiAJCQkJCXRtcCArPSBBTElHTl9TSVpFOwogCQkJCQl0bXAgJj0gfigodW5zaWduZWQgbG9uZykgQUxJR05fU0laRSk7CkBAIC03MTMsNiArNzM2LDggQEAKIAkJCQkJICAgIChCVUYxX0xFTiArIEFMSUdOX1NJWkUsIEdGUF9LRVJORUwpOwogCQkJCQlpZiAoIWJhLT5iYV8xX29yZykKIAkJCQkJCXJldHVybiAtRU5PTUVNOworCQkJCQltZW1fYWxsb2NhdGVkIAorCQkJCQkJKz0gKEJVRjFfTEVOICsgQUxJR05fU0laRSk7CiAJCQkJCXRtcCA9ICh1bnNpZ25lZCBsb25nKSBiYS0+YmFfMV9vcmc7CiAJCQkJCXRtcCArPSBBTElHTl9TSVpFOwogCQkJCQl0bXAgJj0gfigodW5zaWduZWQgbG9uZykgQUxJR05fU0laRSk7CkBAIC03MzYsNiArNzYxLDcgQEAKIAkJICovCiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwltZW1fYWxsb2NhdGVkICs9IHNpemU7CiAJbWFjX2NvbnRyb2wtPnN0YXRzX21lbV9zeiA9IHNpemU7CiAKIAl0bXBfdl9hZGRyID0gbWFjX2NvbnRyb2wtPnN0YXRzX21lbTsKQEAgLTc0Myw3ICs3NjksNyBAQAogCW1lbXNldCh0bXBfdl9hZGRyLCAwLCBzaXplKTsKIAlEQkdfUFJJTlQoSU5JVF9EQkcsICIlczpSaW5nIE1lbSBQSFk6IDB4JWxseFxuIiwgZGV2LT5uYW1lLAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRtcF9wX2FkZHIpOwotCisJbWFjX2NvbnRyb2wtPnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZCArPSBtZW1fYWxsb2NhdGVkOwogCXJldHVybiBTVUNDRVNTOwogfQogCkBAIC03NTcsMTIgKzc4MywxNCBAQAogc3RhdGljIHZvaWQgZnJlZV9zaGFyZWRfbWVtKHN0cnVjdCBzMmlvX25pYyAqbmljKQogewogCWludCBpLCBqLCBibGtfY250LCBzaXplOworCXUzMiB1Zm9fc2l6ZSA9IDA7CiAJdm9pZCAqdG1wX3ZfYWRkcjsKIAlkbWFfYWRkcl90IHRtcF9wX2FkZHI7CiAJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CiAJaW50IGxzdF9zaXplLCBsc3RfcGVyX3BhZ2U7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5pYy0+ZGV2OworCWludCBwYWdlX251bSA9IDA7CiAKIAlpZiAoIW5pYykKIAkJcmV0dXJuOwpAQCAtNzc0LDggKzgwMiw5IEBACiAJbHN0X3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gbHN0X3NpemU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKSB7Ci0JCWludCBwYWdlX251bSA9IFRYRF9NRU1fUEFHRV9DTlQoY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW4sCi0JCQkJCQlsc3RfcGVyX3BhZ2UpOworCQl1Zm9fc2l6ZSArPSBjb25maWctPnR4X2NmZ1tpXS5maWZvX2xlbjsKKwkJcGFnZV9udW0gPSBUWERfTUVNX1BBR0VfQ05UKGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuLAorCQkJCQkJCWxzdF9wZXJfcGFnZSk7CiAJCWZvciAoaiA9IDA7IGogPCBwYWdlX251bTsgaisrKSB7CiAJCQlpbnQgbWVtX2Jsa3MgPSAoaiAqIGxzdF9wZXJfcGFnZSk7CiAJCQlpZiAoIW1hY19jb250cm9sLT5maWZvc1tpXS5saXN0X2luZm8pCkBAIC03OTAsNiArODE5LDggQEAKIAkJCQkJICAgIG1hY19jb250cm9sLT5maWZvc1tpXS4KIAkJCQkJICAgIGxpc3RfaW5mb1ttZW1fYmxrc10uCiAJCQkJCSAgICBsaXN0X3BoeV9hZGRyKTsKKwkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgCisJCQkJCQkrPSBQQUdFX1NJWkU7CiAJCX0KIAkJLyogSWYgd2UgZ290IGEgemVybyBETUEgYWRkcmVzcyBkdXJpbmcgYWxsb2NhdGlvbiwKIAkJICogZnJlZSB0aGUgcGFnZSBub3cKQEAgLTgwMyw4ICs4MzQsMTIgQEAKIAkJCQlkZXYtPm5hbWUpOwogCQkJREJHX1BSSU5UKElOSVRfREJHLCAiVmlydHVhbCBhZGRyZXNzICVwXG4iLAogCQkJCW1hY19jb250cm9sLT56ZXJvZG1hX3ZpcnRfYWRkcik7CisJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkIAorCQkJCQkJKz0gUEFHRV9TSVpFOwogCQl9CiAJCWtmcmVlKG1hY19jb250cm9sLT5maWZvc1tpXS5saXN0X2luZm8pOworCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkICs9IAorCQkobmljLT5jb25maWcudHhfY2ZnW2ldLmZpZm9fbGVuICpzaXplb2Yoc3RydWN0IGxpc3RfaW5mb19ob2xkKSk7CiAJfQogCiAJc2l6ZSA9IFNJWkVfT0ZfQkxPQ0s7CkBAIC04MTksNyArODU0LDEwIEBACiAJCQkJYnJlYWs7CiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5pYy0+cGRldiwgc2l6ZSwKIAkJCQkJICAgIHRtcF92X2FkZHIsIHRtcF9wX2FkZHIpOworCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCArPSBzaXplOwogCQkJa2ZyZWUobWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2Jsb2Nrc1tqXS5yeGRzKTsKKwkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gCisJCQkoIHNpemVvZihzdHJ1Y3QgcnhkX2luZm8pKiByeGRfY291bnRbbmljLT5yeGRfbW9kZV0pOwogCQl9CiAJfQogCkBAIC04MzYsMTIgKzg3NCwyMCBAQAogCQkJCQlzdHJ1Y3QgYnVmZkFkZCAqYmEgPQogCQkJCQkJJm1hY19jb250cm9sLT5yaW5nc1tpXS5iYVtqXVtrXTsKIAkJCQkJa2ZyZWUoYmEtPmJhXzBfb3JnKTsKKwkJCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LlwKKwkJCQkJbWVtX2ZyZWVkICs9IChCVUYwX0xFTiArIEFMSUdOX1NJWkUpOwogCQkJCQlrZnJlZShiYS0+YmFfMV9vcmcpOworCQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuXAorCQkJCQltZW1fZnJlZWQgKz0gKEJVRjFfTEVOICsgQUxJR05fU0laRSk7CiAJCQkJCWsrKzsKIAkJCQl9CiAJCQkJa2ZyZWUobWFjX2NvbnRyb2wtPnJpbmdzW2ldLmJhW2pdKTsKKwkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkIAkJCQkrPSAoc2l6ZW9mKHN0cnVjdCBidWZmQWRkKSAqIAorCQkJCShyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKSk7CiAJCQl9CiAJCQlrZnJlZShtYWNfY29udHJvbC0+cmluZ3NbaV0uYmEpOworCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCArPSAKKwkJCShzaXplb2Yoc3RydWN0IGJ1ZmZBZGQgKikgKiBibGtfY250KTsKIAkJfQogCX0KIApAQCAtODUwLDkgKzg5NiwxNCBAQAogCQkJCSAgICBtYWNfY29udHJvbC0+c3RhdHNfbWVtX3N6LAogCQkJCSAgICBtYWNfY29udHJvbC0+c3RhdHNfbWVtLAogCQkJCSAgICBtYWNfY29udHJvbC0+c3RhdHNfbWVtX3BoeSk7CisJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gCisJCQltYWNfY29udHJvbC0+c3RhdHNfbWVtX3N6OwogCX0KLQlpZiAobmljLT51Zm9faW5fYmFuZF92KQorCWlmIChuaWMtPnVmb19pbl9iYW5kX3YpIHsKIAkJa2ZyZWUobmljLT51Zm9faW5fYmFuZF92KTsKKwkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCAKKwkJCSs9ICh1Zm9fc2l6ZSAqIHNpemVvZih1NjQpKTsKKwl9CiB9CiAKIC8qKgpAQCAtMjEyMiwxMCArMjE3MywxMiBAQAogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW4gLSAxOyBqKyspIHsKLQkJCXR4ZHAgPSAoc3RydWN0IFR4RCAqKSBtYWNfY29udHJvbC0+Zmlmb3NbaV0ubGlzdF9pbmZvW2pdLgotCQkJICAgIGxpc3RfdmlydF9hZGRyOworCQkJdHhkcCA9IChzdHJ1Y3QgVHhEICopIFwKKwkJCW1hY19jb250cm9sLT5maWZvc1tpXS5saXN0X2luZm9bal0ubGlzdF92aXJ0X2FkZHI7CiAJCQlza2IgPSBzMmlvX3R4ZGxfZ2V0c2tiKCZtYWNfY29udHJvbC0+Zmlmb3NbaV0sIHR4ZHAsIGopOwogCQkJaWYgKHNrYikgeworCQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgCisJCQkJCSs9IHNrYi0+dHJ1ZXNpemU7CiAJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJCWNudCsrOwogCQkJfQpAQCAtMjE4NiwxMSArMjIzOSwxNCBAQAogCS8qIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0IHdpbGwgaGF2ZSBMNCBkYXRhIHBheWxvYWQgKi8KIAlza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdCA9IGRldl9hbGxvY19za2IoZGV2LT5tdHUgKyBBTElHTl9TSVpFKTsKIAlpZiAoc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3QgPT0gTlVMTCkgeworCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jX2ZhaWxfY250Kys7CiAJCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBkZXZfYWxsb2Nfc2tiIGZhaWxlZFxuICIsIGRldi0+bmFtZSk7CiAJCXJldHVybiAtRU5PTUVNIDsKIAl9CiAJZnJhZ19saXN0ID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7CiAJc2tiLT50cnVlc2l6ZSArPSBmcmFnX2xpc3QtPnRydWVzaXplOworCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkIAorCQkrPSBmcmFnX2xpc3QtPnRydWVzaXplOwogCWZyYWdfbGlzdC0+bmV4dCA9IE5VTEw7CiAJdG1wID0gKHZvaWQgKilBTElHTigobG9uZylmcmFnX2xpc3QtPmRhdGEsIEFMSUdOX1NJWkUgKyAxKTsKIAlmcmFnX2xpc3QtPmRhdGEgPSB0bXA7CkBAIC0yMzE5LDggKzIzNzUsMTIgQEAKIAkJCQl3bWIoKTsKIAkJCQlmaXJzdF9yeGRwLT5Db250cm9sXzEgfD0gUlhEX09XTl9YRU5BOwogCQkJfQorCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LiBcCisJCQkJbWVtX2FsbG9jX2ZhaWxfY250Kys7CiAJCQlyZXR1cm4gLUVOT01FTSA7CiAJCX0KKwkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY2F0ZWQgCisJCQkrPSBza2ItPnRydWVzaXplOwogCQlpZiAobmljLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8xKSB7CiAJCQkvKiAxIGJ1ZmZlciBtb2RlIC0gbm9ybWFsIG9wZXJhdGlvbiBtb2RlICovCiAJCQltZW1zZXQocnhkcCwgMCwgc2l6ZW9mKHN0cnVjdCBSeEQxKSk7CkBAIC0yMzI4LDcgKzIzODgsOCBAQAogCQkJKChzdHJ1Y3QgUnhEMSopcnhkcCktPkJ1ZmZlcjBfcHRyID0gcGNpX21hcF9zaW5nbGUKIAkJCSAgICAobmljLT5wZGV2LCBza2ItPmRhdGEsIHNpemUgLSBORVRfSVBfQUxJR04sCiAJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCXJ4ZHAtPkNvbnRyb2xfMiA9IFNFVF9CVUZGRVIwX1NJWkVfMShzaXplIC0gTkVUX0lQX0FMSUdOKTsKKwkJCXJ4ZHAtPkNvbnRyb2xfMiA9IAorCQkJCVNFVF9CVUZGRVIwX1NJWkVfMShzaXplIC0gTkVUX0lQX0FMSUdOKTsKIAogCQl9IGVsc2UgaWYgKG5pYy0+cnhkX21vZGUgPj0gUlhEX01PREVfM0EpIHsKIAkJCS8qCkBAIC0yMzQyLDcgKzI0MDMsNyBAQAogCQkJICogcGF5bG9hZAogCQkJICovCiAKLQkJCS8qIHNhdmUgdGhlIGJ1ZmZlciBwb2ludGVycyB0byBhdm9pZCBmcmVxdWVudCBkbWEgbWFwcGluZyAqLworCQkJLyogc2F2ZSBidWZmZXIgcG9pbnRlcnMgdG8gYXZvaWQgZnJlcXVlbnQgZG1hIG1hcHBpbmcgKi8KIAkJCUJ1ZmZlcjBfcHRyID0gKChzdHJ1Y3QgUnhEMyopcnhkcCktPkJ1ZmZlcjBfcHRyOwogCQkJQnVmZmVyMV9wdHIgPSAoKHN0cnVjdCBSeEQzKilyeGRwKS0+QnVmZmVyMV9wdHI7CiAJCQltZW1zZXQocnhkcCwgMCwgc2l6ZW9mKHN0cnVjdCBSeEQzKSk7CkBAIC0yMzY0LDcgKzI0MjUsNyBAQAogCQkJCQkgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJZWxzZQogCQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShuaWMtPnBkZXYsCi0JCQkJICAgIChkbWFfYWRkcl90KSAoKHN0cnVjdCBSeEQzKilyeGRwKS0+QnVmZmVyMF9wdHIsCisJCQkJKGRtYV9hZGRyX3QpICgoc3RydWN0IFJ4RDMqKXJ4ZHApLT5CdWZmZXIwX3B0ciwKIAkJCQkgICAgQlVGMF9MRU4sIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlyeGRwLT5Db250cm9sXzIgPSBTRVRfQlVGRkVSMF9TSVpFXzMoQlVGMF9MRU4pOwogCQkJaWYgKG5pYy0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpIHsKQEAgLTIzOTEsNiArMjQ1Miw4IEBACiAJCQl9IGVsc2UgewogCQkJCS8qIDMgYnVmZmVyIG1vZGUgKi8KIAkJCQlpZiAoZmlsbF9yeGRfM2J1ZihuaWMsIHJ4ZHAsIHNrYikgPT0gLUVOT01FTSkgeworCQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuXAorCQkJCQltZW1fZnJlZWQgKz0gc2tiLT50cnVlc2l6ZTsKIAkJCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJCQkJaWYgKGZpcnN0X3J4ZHApIHsKIAkJCQkJCXdtYigpOwpAQCAtMjQ5MSw2ICsyNTU0LDcgQEAKIAkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJbWVtc2V0KHJ4ZHAsIDAsIHNpemVvZihzdHJ1Y3QgUnhEMykpOwogCQl9CisJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCArPSBza2ItPnRydWVzaXplOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCWF0b21pY19kZWMoJnNwLT5yeF9idWZzX2xlZnRbcmluZ19ub10pOwogCX0KQEAgLTI4MjAsMTMgKzI4ODQsMzUgQEAKIAkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCiAJCQkJCQlwYXJpdHlfZXJyX2NudCsrOwogCQkJfQotCQkJaWYgKChlcnIgPj4gNDgpID09IDB4QSkgewotCQkJCURCR19QUklOVChUWF9EQkcsICJUeEQgcmV0dXJuZWQgZHVlIFwKLQkJCQkJCXRvIGxvc3Mgb2YgbGlua1xuIik7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIioqKlR4RCBlcnJvciAlbGx4XG4iLCBlcnIpOwotCQkJfQorCisJCQkvKiB1cGRhdGUgdF9jb2RlIHN0YXRpc3RpY3MgKi8KKwkJCWVyciA+Pj0gNDg7CisJCQlzd2l0Y2goZXJyKSB7CisJCQkJY2FzZSAyOgorCQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCisJCQkJCQkJdHhfYnVmX2Fib3J0X2NudCsrOworCQkJCWJyZWFrOworCisJCQkJY2FzZSAzOgorCQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCisJCQkJCQkJdHhfZGVzY19hYm9ydF9jbnQrKzsKKwkJCQlicmVhazsKKworCQkJCWNhc2UgNzoKKwkJCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgorCQkJCQkJCXR4X3Bhcml0eV9lcnJfY250Kys7CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIDEwOgorCQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCisJCQkJCQkJdHhfbGlua19sb3NzX2NudCsrOworCQkJCWJyZWFrOworCisJCQkJY2FzZSAxNToKKwkJCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgorCQkJCQkJCXR4X2xpc3RfcHJvY19lcnJfY250Kys7CisJCQkJYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAJCX0KIAogCQlza2IgPSBzMmlvX3R4ZGxfZ2V0c2tiKGZpZm9fZGF0YSwgdHhkbHAsIGdldF9pbmZvLm9mZnNldCk7CkBAIC0yODM5LDYgKzI5MjUsNyBAQAogCiAJCS8qIFVwZGF0aW5nIHRoZSBzdGF0aXN0aWNzIGJsb2NrICovCiAJCW5pYy0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gc2tiLT50cnVlc2l6ZTsKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAogCQlnZXRfaW5mby5vZmZzZXQrKzsKQEAgLTMzMTQsNyArMzQwMSw5IEBACiAJdTE2IHN1YmlkLCBwY2lfY21kOwogCWludCBpOwogCXUxNiB2YWwxNjsKLQl1bnNpZ25lZCBsb25nIGxvbmcgcmVzZXRfY250ID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdXBfY250LCBkb3duX2NudCwgdXBfdGltZSwgZG93bl90aW1lLCByZXNldF9jbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIG1lbV9hbGxvY19jbnQsIG1lbV9mcmVlX2NudCwgd2F0Y2hkb2dfY250OworCiAJREJHX1BSSU5UKElOSVRfREJHLCIlcyAtIFJlc2V0dGluZyBYRnJhbWUgY2FyZCAlc1xuIiwKIAkJCV9fRlVOQ1RJT05fXywgc3AtPmRldi0+bmFtZSk7CiAKQEAgLTMzODAsMTEgKzM0NjksMjYgQEAKIAogCS8qIFJlc2V0IGRldmljZSBzdGF0aXN0aWNzIG1haW50YWluZWQgYnkgT1MgKi8KIAltZW1zZXQoJnNwLT5zdGF0cywgMCwgc2l6ZW9mIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOwotCS8qIHNhdmUgcmVzZXQgY291bnQgKi8KKwkKKwl1cF9jbnQgPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX3VwX2NudDsKKwlkb3duX2NudCA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfZG93bl9jbnQ7CisJdXBfdGltZSA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfdXBfdGltZTsKKwlkb3duX3RpbWUgPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX2Rvd25fdGltZTsKIAlyZXNldF9jbnQgPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5zb2Z0X3Jlc2V0X2NudDsKKwltZW1fYWxsb2NfY250ID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZDsKKwltZW1fZnJlZV9jbnQgPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQ7CisJd2F0Y2hkb2dfY250ID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQud2F0Y2hkb2dfdGltZXJfY250OworCS8qIHNhdmUgbGluayB1cC9kb3duIHRpbWUvY250LCByZXNldC9tZW1vcnkvd2F0Y2hkb2cgY250ICovCiAJbWVtc2V0KHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLCAwLCBzaXplb2Yoc3RydWN0IHN0YXRfYmxvY2spKTsKLQkvKiByZXN0b3JlIHJlc2V0IGNvdW50ICovCisJLyogcmVzdG9yZSBsaW5rIHVwL2Rvd24gdGltZS9jbnQsIHJlc2V0L21lbW9yeS93YXRjaGRvZyBjbnQgKi8KKwlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX3VwX2NudCA9IHVwX2NudDsKKwlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX2Rvd25fY250ID0gZG93bl9jbnQ7CisJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua191cF90aW1lID0gdXBfdGltZTsKKwlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX2Rvd25fdGltZSA9IGRvd25fdGltZTsKIAlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5zb2Z0X3Jlc2V0X2NudCA9IHJlc2V0X2NudDsKKwlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkID0gbWVtX2FsbG9jX2NudDsKKwlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgPSBtZW1fZnJlZV9jbnQ7CisJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQud2F0Y2hkb2dfdGltZXJfY250ID0gd2F0Y2hkb2dfY250OwogCiAJLyogU1hFLTAwMjogQ29uZmlndXJlIGxpbmsgYW5kIGFjdGl2aXR5IExFRCB0byB0dXJuIGl0IG9mZiAqLwogCXN1YmlkID0gc3AtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CkBAIC0zNjcyLDE5ICszNzc2LDI5IEBACiAJbmljLT5lbnRyaWVzID0ga21hbGxvYyhNQVhfUkVRVUVTVEVEX01TSV9YICogc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KSwKIAkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAobmljLT5lbnRyaWVzID09IE5VTEwpIHsKLQkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIiwgXAorCQkJX19GVU5DVElPTl9fKTsKKwkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY19mYWlsX2NudCsrOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KG5pYy0+ZW50cmllcywgMCwgTUFYX1JFUVVFU1RFRF9NU0lfWCAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOworCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkIAorCQkrPSAoTUFYX1JFUVVFU1RFRF9NU0lfWCAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOworCW1lbXNldChuaWMtPmVudHJpZXMsIDAsTUFYX1JFUVVFU1RFRF9NU0lfWCAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOwogCiAJbmljLT5zMmlvX2VudHJpZXMgPQogCQlrbWFsbG9jKE1BWF9SRVFVRVNURURfTVNJX1ggKiBzaXplb2Yoc3RydWN0IHMyaW9fbXNpeF9lbnRyeSksCiAJCQkJICAgR0ZQX0tFUk5FTCk7CiAJaWYgKG5pYy0+czJpb19lbnRyaWVzID09IE5VTEwpIHsKLQkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIiwgCisJCQlfX0ZVTkNUSU9OX18pOworCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jX2ZhaWxfY250Kys7CiAJCWtmcmVlKG5pYy0+ZW50cmllcyk7CisJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgCisJCQkrPSAoTUFYX1JFUVVFU1RFRF9NU0lfWCAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJIG5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkIAorCQkrPSAoTUFYX1JFUVVFU1RFRF9NU0lfWCAqIHNpemVvZihzdHJ1Y3QgczJpb19tc2l4X2VudHJ5KSk7CiAJbWVtc2V0KG5pYy0+czJpb19lbnRyaWVzLCAwLAogCSAgICAgICBNQVhfUkVRVUVTVEVEX01TSV9YICogc2l6ZW9mKHN0cnVjdCBzMmlvX21zaXhfZW50cnkpKTsKIApAQCAtMzcwOCw3ICszODIyLDggQEAKIAkJcnhfbWF0ID0gcmVhZHEoJmJhcjAtPnJ4X21hdCk7CiAJCWZvciAoaj0wOyBqPG5pYy0+Y29uZmlnLnJ4X3JpbmdfbnVtOyBqKyssIG1zaXhfaW5keCsrKSB7CiAJCQlyeF9tYXQgfD0gUlhfTUFUX1NFVChqLCBtc2l4X2luZHgpOwotCQkJbmljLT5zMmlvX2VudHJpZXNbbXNpeF9pbmR4XS5hcmcgPSAmbmljLT5tYWNfY29udHJvbC5yaW5nc1tqXTsKKwkJCW5pYy0+czJpb19lbnRyaWVzW21zaXhfaW5keF0uYXJnIAorCQkJCT0gJm5pYy0+bWFjX2NvbnRyb2wucmluZ3Nbal07CiAJCQluaWMtPnMyaW9fZW50cmllc1ttc2l4X2luZHhdLnR5cGUgPSBNU0lYX1JJTkdfVFlQRTsKIAkJCW5pYy0+czJpb19lbnRyaWVzW21zaXhfaW5keF0uaW5fdXNlID0gTVNJWF9GTEc7CiAJCX0KQEAgLTM3MTcsNyArMzgzMiw4IEBACiAJCXR4X21hdCA9IHJlYWRxKCZiYXIwLT50eF9tYXQwX25bN10pOwogCQlmb3IgKGo9MDsgajxuaWMtPmNvbmZpZy5yeF9yaW5nX251bTsgaisrLCBtc2l4X2luZHgrKykgewogCQkJdHhfbWF0IHw9IFRYX01BVF9TRVQoaSwgbXNpeF9pbmR4KTsKLQkJCW5pYy0+czJpb19lbnRyaWVzW21zaXhfaW5keF0uYXJnID0gJm5pYy0+bWFjX2NvbnRyb2wucmluZ3Nbal07CisJCQluaWMtPnMyaW9fZW50cmllc1ttc2l4X2luZHhdLmFyZyAKKwkJCQk9ICZuaWMtPm1hY19jb250cm9sLnJpbmdzW2pdOwogCQkJbmljLT5zMmlvX2VudHJpZXNbbXNpeF9pbmR4XS50eXBlID0gTVNJWF9SSU5HX1RZUEU7CiAJCQluaWMtPnMyaW9fZW50cmllc1ttc2l4X2luZHhdLmluX3VzZSA9IE1TSVhfRkxHOwogCQl9CkBAIC0zNzM0LDcgKzM4NTAsMTEgQEAKIAlpZiAocmV0KSB7CiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IEVuYWJsaW5nIE1TSVggZmFpbGVkXG4iLCBuaWMtPmRldi0+bmFtZSk7CiAJCWtmcmVlKG5pYy0+ZW50cmllcyk7CisJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgCisJCQkrPSAoTUFYX1JFUVVFU1RFRF9NU0lfWCAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOwogCQlrZnJlZShuaWMtPnMyaW9fZW50cmllcyk7CisJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgCisJCSs9IChNQVhfUkVRVUVTVEVEX01TSV9YICogc2l6ZW9mKHN0cnVjdCBzMmlvX21zaXhfZW50cnkpKTsKIAkJbmljLT5lbnRyaWVzID0gTlVMTDsKIAkJbmljLT5zMmlvX2VudHJpZXMgPSBOVUxMOwogCQluaWMtPmF2YWlsX21zaXhfdmVjdG9ycyA9IDA7CkBAIC0zODAyLDEwICszOTIyLDE2IEBACiAKIGh3X2luaXRfZmFpbGVkOgogCWlmIChzcC0+aW50cl90eXBlID09IE1TSV9YKSB7Ci0JCWlmIChzcC0+ZW50cmllcykKKwkJaWYgKHNwLT5lbnRyaWVzKSB7CiAJCQlrZnJlZShzcC0+ZW50cmllcyk7Ci0JCWlmIChzcC0+czJpb19lbnRyaWVzKQorCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkIAorCQkJKz0gKE1BWF9SRVFVRVNURURfTVNJX1ggKiBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpKTsKKwkJfQorCQlpZiAoc3AtPnMyaW9fZW50cmllcykgewogCQkJa2ZyZWUoc3AtPnMyaW9fZW50cmllcyk7CisJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgCisJCQkrPSAoTUFYX1JFUVVFU1RFRF9NU0lfWCAqIHNpemVvZihzdHJ1Y3QgczJpb19tc2l4X2VudHJ5KSk7CisJCX0KIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTM4NjYsNiArMzk5MiwxMyBAQAogCWNvbmZpZyA9ICZzcC0+Y29uZmlnOwogCiAJREJHX1BSSU5UKFRYX0RCRywgIiVzOiBJbiBOZXRlcmlvbiBUeCByb3V0aW5lXG4iLCBkZXYtPm5hbWUpOworCisJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDw9IDApKSB7CisJCURCR19QUklOVChUWF9EQkcsICIlczpCdWZmZXIgaGFzIG5vIGRhdGEuLlxuIiwgZGV2LT5uYW1lKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIDA7Cit9CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3AtPnR4X2xvY2ssIGZsYWdzKTsKIAlpZiAoYXRvbWljX3JlYWQoJnNwLT5jYXJkX3N0YXRlKSA9PSBDQVJEX0RPV04pIHsKIAkJREJHX1BSSU5UKFRYX0RCRywgIiVzOiBDYXJkIGdvaW5nIGRvd24gZm9yIHJlc2V0XG4iLApAQCAtMzg3Niw3ICs0MDA5LDYgQEAKIAl9CiAKIAlxdWV1ZSA9IDA7Ci0KIAkvKiBHZXQgRmlmbyBudW1iZXIgdG8gVHJhbnNtaXQgYmFzZWQgb24gdmxhbiBwcmlvcml0eSAqLwogCWlmIChzcC0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CiAJCXZsYW5fdGFnID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CkBAIC0zOTAwLDE0ICs0MDMyLDYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogQSBidWZmZXIgd2l0aCBubyBkYXRhIHdpbGwgYmUgZHJvcHBlZCAqLwotCWlmICghc2tiLT5sZW4pIHsKLQkJREJHX1BSSU5UKFRYX0RCRywgIiVzOkJ1ZmZlciBoYXMgbm8gZGF0YS4uXG4iLCBkZXYtPm5hbWUpOwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwLT50eF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAwOwotCX0KLQogCW9mZmxvYWRfdHlwZSA9IHMyaW9fb2ZmbG9hZF90eXBlKHNrYik7CiAJaWYgKG9mZmxvYWRfdHlwZSAmIChTS0JfR1NPX1RDUFY0IHwgU0tCX0dTT19UQ1BWNikpIHsKIAkJdHhkcC0+Q29udHJvbF8xIHw9IFRYRF9UQ1BfTFNPX0VOOwpAQCAtNDAwMyw3ICs0MTI3LDcgQEAKIAkJCSAgcHV0X29mZiwgZ2V0X29mZik7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9Ci0KKwltYWNfY29udHJvbC0+c3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkICs9IHNrYi0+dHJ1ZXNpemU7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3AtPnR4X2xvY2ssIGZsYWdzKTsKIApAQCAtNDc3NSw2ICs0ODk5LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHMyaW9fZXRodG9vbF9ncmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQoreworCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBkZXYtPnByaXY7CisJaW50IGksdHhfZGVzY19jb3VudD0wLHJ4X2Rlc2NfY291bnQ9MDsKKworCWlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkKKwkJZXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JYX0RFU0NfMTsKKwllbHNlIGlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpCisJCWVyaW5nLT5yeF9tYXhfcGVuZGluZyA9IE1BWF9SWF9ERVNDXzI7CisJZWxzZSBpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNBKQorCQllcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBNQVhfUlhfREVTQ18zOworCisJZXJpbmctPnR4X21heF9wZW5kaW5nID0gTUFYX1RYX0RFU0M7CisJZm9yIChpID0gMCA7IGkgPCBzcC0+Y29uZmlnLnR4X2ZpZm9fbnVtIDsgaSsrKSB7CisJCXR4X2Rlc2NfY291bnQgKz0gc3AtPmNvbmZpZy50eF9jZmdbaV0uZmlmb19sZW47CisJfQorCURCR19QUklOVChJTkZPX0RCRywiXG5tYXggdHhkcyA6ICVkXG4iLHNwLT5jb25maWcubWF4X3R4ZHMpOworCWVyaW5nLT50eF9wZW5kaW5nID0gdHhfZGVzY19jb3VudDsKKwlyeF9kZXNjX2NvdW50ID0gMDsKKwlmb3IgKGkgPSAwIDsgaSA8IHNwLT5jb25maWcucnhfcmluZ19udW0gOyBpKyspIHsKKwkJcnhfZGVzY19jb3VudCArPSBzcC0+Y29uZmlnLnJ4X2NmZ1tpXS5udW1fcnhkOworCX0KKwllcmluZy0+cnhfcGVuZGluZyA9IHJ4X2Rlc2NfY291bnQ7CisKKwllcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7CisJZXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IDA7CisJaWYoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpCisJCWVyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IE1BWF9SWF9ERVNDXzE7CisJZWxzZSBpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKQorCQllcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSBNQVhfUlhfREVTQ18yOworCWVyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gcnhfZGVzY19jb3VudDsKK30KKwogLyoqCiAgKiBzMmlvX2V0aHRvb2xfZ2V0cGF1c2VfZGF0YSAtUGF1c2UgZnJhbWUgZnJhbWUgZ2VuZXJhdGlvbiBhbmQgcmVjZXB0aW9uLgogICogQHNwIDogcHJpdmF0ZSBtZW1iZXIgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGEgcG9pbnRlciB0byB0aGUKQEAgLTQ5ODEsOCArNTEzOSwxMSBAQAogCXN0cmNweShuaWMtPnNlcmlhbF9udW0sICJOT1QgQVZBSUxBQkxFIik7CiAKIAl2cGRfZGF0YSA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXZwZF9kYXRhKQorCWlmICghdnBkX2RhdGEpIHsKKwkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY19mYWlsX2NudCsrOwogCQlyZXR1cm47CisJfQorCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkICs9IDI1NjsKIAogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkgKz00ICkgewogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUobmljLT5wZGV2LCAodnBkX2FkZHIgKyAyKSwgaSk7CkBAIC01MDIyLDYgKzUxODMsNyBAQAogCQltZW1jcHkobmljLT5wcm9kdWN0X25hbWUsICZ2cGRfZGF0YVszXSwgdnBkX2RhdGFbMV0pOwogCX0KIAlrZnJlZSh2cGRfZGF0YSk7CisJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCArPSAyNTY7CiB9CiAKIC8qKgpAQCAtNTc0Miw2ICs1OTA0LDMwIEBACiAJfQogCWVsc2UKIAkJdG1wX3N0YXRzW2krK10gPSAwOworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY19mYWlsX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC53YXRjaGRvZ190aW1lcl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQ7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQubGlua191cF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQubGlua19kb3duX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5saW5rX3VwX3RpbWU7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQubGlua19kb3duX3RpbWU7CisKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC50eF9idWZfYWJvcnRfY250OworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnR4X2Rlc2NfYWJvcnRfY250OworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnR4X3Bhcml0eV9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnR4X2xpbmtfbG9zc19jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQudHhfbGlzdF9wcm9jX2Vycl9jbnQ7CisKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF9wYXJpdHlfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF9hYm9ydF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucnhfcGFyaXR5X2Fib3J0X2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF9yZGFfZmFpbF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucnhfdW5rbl9wcm90X2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF9mY3NfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF9idWZfc2l6ZV9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnJ4X3J4ZF9jb3JydXB0X2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF91bmtuX2Vycl9jbnQ7CiB9CiAKIHN0YXRpYyBpbnQgczJpb19ldGh0b29sX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNTg1NCw2ICs2MDQwLDcgQEAKIAkuZ2V0X2VlcHJvbV9sZW4gPSBzMmlvX2dldF9lZXByb21fbGVuLAogCS5nZXRfZWVwcm9tID0gczJpb19ldGh0b29sX2dlZXByb20sCiAJLnNldF9lZXByb20gPSBzMmlvX2V0aHRvb2xfc2VlcHJvbSwKKwkuZ2V0X3JpbmdwYXJhbSA9IHMyaW9fZXRodG9vbF9ncmluZ3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbSA9IHMyaW9fZXRodG9vbF9nZXRwYXVzZV9kYXRhLAogCS5zZXRfcGF1c2VwYXJhbSA9IHMyaW9fZXRodG9vbF9zZXRwYXVzZV9kYXRhLAogCS5nZXRfcnhfY3N1bSA9IHMyaW9fZXRodG9vbF9nZXRfcnhfY3N1bSwKQEAgLTU5NjIsNyArNjE0OSw3IEBACiAJCQlpZiAocmV0ID09IC1FTk9NRU0pIHsKIAkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogT3V0IG9mICIsCiAJCQkJCSAgZGV2LT5uYW1lKTsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIm1lbW9yeSBpbiB0YXNrbGV0XG4iKTsKKwkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICJtZW1vcnkgaW4gdGFza2xldFxuIik7CiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgaWYgKHJldCA9PSAtRUZJTEwpIHsKIAkJCQlEQkdfUFJJTlQoSU5GT19EQkcsCkBAIC02MDc3LDkgKzYyNjQsMTQgQEAKIAkJCSpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUpOwogCQkJaWYgKCEoKnNrYikpIHsKIAkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogT3V0IG9mICIsIGRldi0+bmFtZSk7Ci0JCQkJREJHX1BSSU5UKElORk9fREJHLCAibWVtb3J5IHRvIGFsbG9jYXRlIFNLQnNcbiIpOworCQkJCURCR19QUklOVChJTkZPX0RCRywgIm1lbW9yeSB0byBhbGxvY2F0ZSAiKTsKKwkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICIxIGJ1ZiBtb2RlIFNLQnNcbiIpOworCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LiBcCisJCQkJCW1lbV9hbGxvY19mYWlsX2NudCsrOwogCQkJCXJldHVybiAtRU5PTUVNIDsKIAkJCX0KKwkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY2F0ZWQgCisJCQkJKz0gKCpza2IpLT50cnVlc2l6ZTsKIAkJCS8qIHN0b3JpbmcgdGhlIG1hcHBlZCBhZGRyIGluIGEgdGVtcCB2YXJpYWJsZQogCQkJICogc3VjaCBpdCB3aWxsIGJlIHVzZWQgZm9yIG5leHQgcnhkIHdob3NlCiAJCQkgKiBIb3N0IENvbnRyb2wgaXMgTlVMTApAQCAtNjA5OSwxMCArNjI5MSwxNSBAQAogCQl9IGVsc2UgewogCQkJKnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSk7CiAJCQlpZiAoISgqc2tiKSkgewotCQkJCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBkZXZfYWxsb2Nfc2tiIGZhaWxlZFxuIiwKLQkJCQkJZGV2LT5uYW1lKTsKKwkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogT3V0IG9mICIsIGRldi0+bmFtZSk7CisJCQkJREJHX1BSSU5UKElORk9fREJHLCAibWVtb3J5IHRvIGFsbG9jYXRlICIpOworCQkJCURCR19QUklOVChJTkZPX0RCRywgIjIgYnVmIG1vZGUgU0tCc1xuIik7CisJCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuIFwKKwkJCQkJbWVtX2FsbG9jX2ZhaWxfY250Kys7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CisJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkIAorCQkJCSs9ICgqc2tiKS0+dHJ1ZXNpemU7CiAJCQkoKHN0cnVjdCBSeEQzKilyeGRwKS0+QnVmZmVyMl9wdHIgPSAqdGVtcDIgPQogCQkJCXBjaV9tYXBfc2luZ2xlKHNwLT5wZGV2LCAoKnNrYiktPmRhdGEsCiAJCQkJCSAgICAgICBkZXYtPm10dSArIDQsCkBAIC02MTI2LDEwICs2MzIzLDE1IEBACiAJCX0gZWxzZSB7CiAJCQkqc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKTsKIAkJCWlmICghKCpza2IpKSB7Ci0JCQkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IGRldl9hbGxvY19za2IgZmFpbGVkXG4iLAotCQkJCQkgIGRldi0+bmFtZSk7CisJCQkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IE91dCBvZiAiLCBkZXYtPm5hbWUpOworCQkJCURCR19QUklOVChJTkZPX0RCRywgIm1lbW9yeSB0byBhbGxvY2F0ZSAiKTsKKwkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICIzIGJ1ZiBtb2RlIFNLQnNcbiIpOworCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LiBcCisJCQkJCW1lbV9hbGxvY19mYWlsX2NudCsrOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQorCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZCAKKwkJCQkrPSAoKnNrYiktPnRydWVzaXplOwogCQkJKChzdHJ1Y3QgUnhEMyopcnhkcCktPkJ1ZmZlcjBfcHRyID0gKnRlbXAwID0KIAkJCQlwY2lfbWFwX3NpbmdsZShzcC0+cGRldiwgYmEtPmJhXzAsIEJVRjBfTEVOLAogCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKQEAgLTYxNDcsMTAgKzYzNDksMTQgQEAKIAkJCWlmIChza2Jfc2hpbmZvKCpza2IpLT5mcmFnX2xpc3QgPT0gTlVMTCkgewogCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IGRldl9hbGxvY19za2IgXAogCQkJCQkgIGZhaWxlZFxuICIsIGRldi0+bmFtZSk7CisJCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuIFwKKwkJCQkJbWVtX2FsbG9jX2ZhaWxfY250Kys7CiAJCQkJcmV0dXJuIC1FTk9NRU0gOwogCQkJfQogCQkJZnJhZ19saXN0ID0gc2tiX3NoaW5mbygqc2tiKS0+ZnJhZ19saXN0OwogCQkJZnJhZ19saXN0LT5uZXh0ID0gTlVMTDsKKwkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY2F0ZWQgCisJCQkJKz0gZnJhZ19saXN0LT50cnVlc2l6ZTsKIAkJCS8qCiAJCQkgKiBCdWZmZXItMiByZWNlaXZlcyBMNCBkYXRhIHBheWxvYWQKIAkJCSAqLwpAQCAtNjU2Niw2ICs2NzcyLDcgQEAKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gZGV2LT5wcml2OwogCiAJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgeworCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC53YXRjaGRvZ190aW1lcl9jbnQrKzsKIAkJc2NoZWR1bGVfd29yaygmc3AtPnJzdF90aW1lcl90YXNrKTsKIAkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuc29mdF9yZXNldF9jbnQrKzsKIAl9CkBAIC02NjA2LDcgKzY4MTMsNTMgQEAKIAkJaWYgKGVyciAmIDB4MSkgewogCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQucGFyaXR5X2Vycl9jbnQrKzsKIAkJfQorCQllcnIgPj49IDQ4OworCQlzd2l0Y2goZXJyKSB7CisJCQljYXNlIDE6CisJCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCisJCQkJcnhfcGFyaXR5X2Vycl9jbnQrKzsKKwkJCWJyZWFrOwogCisJCQljYXNlIDI6CisJCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCisJCQkJcnhfYWJvcnRfY250Kys7CisJCQlicmVhazsKKworCQkJY2FzZSAzOgorCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgorCQkJCXJ4X3Bhcml0eV9hYm9ydF9jbnQrKzsKKwkJCWJyZWFrOworCisJCQljYXNlIDQ6CisJCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCisJCQkJcnhfcmRhX2ZhaWxfY250Kys7CisJCQlicmVhazsKKworCQkJY2FzZSA1OgorCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgorCQkJCXJ4X3Vua25fcHJvdF9jbnQrKzsKKwkJCWJyZWFrOworCisJCQljYXNlIDY6CisJCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCisJCQkJcnhfZmNzX2Vycl9jbnQrKzsKKwkJCWJyZWFrOworCisJCQljYXNlIDc6CisJCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCisJCQkJcnhfYnVmX3NpemVfZXJyX2NudCsrOworCQkJYnJlYWs7CisKKwkJCWNhc2UgODoKKwkJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KKwkJCQlyeF9yeGRfY29ycnVwdF9jbnQrKzsKKwkJCWJyZWFrOworCisJCQljYXNlIDE1OgorCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgorCQkJCXJ4X3Vua25fZXJyX2NudCsrOworCQkJYnJlYWs7CisJCX0KIAkJLyoKIAkJKiBEcm9wIHRoZSBwYWNrZXQgaWYgYmFkIHRyYW5zZmVyIGNvZGUuIEV4Y2VwdGlvbiBiZWluZwogCQkqIDB4NSwgd2hpY2ggY291bGQgYmUgZHVlIHRvIHVuc3VwcG9ydGVkIElQdjYgZXh0ZW5zaW9uIGhlYWRlci4KQEAgLTY2MTQsMTAgKzY4NjcsMTIgQEAKIAkJKiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLCBzaW5jZSBjaGVja3N1bSB3aWxsIGJlIGluY29ycmVjdCwKIAkJKiBzdGFjayB3aWxsIHZhbGlkYXRlIHRoZSBzYW1lLgogCQkqLwotCQlpZiAoZXJyICYmICgoZXJyID4+IDQ4KSAhPSAweDUpKSB7CisJCWlmIChlcnIgIT0gMHg1KSB7CiAJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBSeCBlcnJvciBWYWx1ZTogMHglbGx4XG4iLAogCQkJCWRldi0+bmFtZSwgZXJyKTsKIAkJCXNwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgCisJCQkJKz0gc2tiLT50cnVlc2l6ZTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCWF0b21pY19kZWMoJnNwLT5yeF9idWZzX2xlZnRbcmluZ19ub10pOwogCQkJcnhkcC0+SG9zdF9Db250cm9sID0gMDsKQEAgLTY2MjcsNyArNjg4Miw2IEBACiAKIAkvKiBVcGRhdGluZyBzdGF0aXN0aWNzICovCiAJcnhkcC0+SG9zdF9Db250cm9sID0gMDsKLQlzcC0+c3RhdHMucnhfcGFja2V0cysrOwogCWlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkgewogCQlpbnQgbGVuID0gUlhEX0dFVF9CVUZGRVIwX1NJWkVfMShyeGRwLT5Db250cm9sXzIpOwogCkBAIC02NzMxLDcgKzY5ODUsNyBAQAogCX0gZWxzZSB7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAl9Ci0KKwlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gc2tiLT50cnVlc2l6ZTsKIAlpZiAoIXNwLT5scm8pIHsKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJaWYgKChzcC0+dmxncnAgJiYgUlhEX0dFVF9WTEFOX1RBRyhyeGRwLT5Db250cm9sXzIpICYmCkBAIC02NzgwLDEyICs3MDM0LDIxIEBACiAJCWlmIChsaW5rID09IExJTktfRE9XTikgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTGluayBkb3duXG4iLCBkZXYtPm5hbWUpOwogCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwkJCWlmKHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfdXBfY250KQorCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua191cF90aW1lID0gCisJCQkJamlmZmllcyAtIHNwLT5zdGFydF90aW1lOworCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua19kb3duX2NudCsrOwogCQl9IGVsc2UgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTGluayBVcFxuIiwgZGV2LT5uYW1lKTsKKwkJCWlmIChzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX2Rvd25fY250KQorCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua19kb3duX3RpbWUgPSAKKwkJCQlqaWZmaWVzIC0gc3AtPnN0YXJ0X3RpbWU7CisJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX3VwX2NudCsrOwogCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCQl9CiAJfQogCXNwLT5sYXN0X2xpbmtfc3RhdGUgPSBsaW5rOworCXNwLT5zdGFydF90aW1lID0gamlmZmllczsKIH0KIAogLyoqCkBAIC03MTM4LDcgKzc0MDEsNiBAQAogCVNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IHMyaW9fdmxhbl9yeF9yZWdpc3RlcjsKLQlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSAodm9pZCAqKXMyaW9fdmxhbl9yeF9raWxsX3ZpZDsKIAogCS8qCiAJICogd2lsbCB1c2UgZXRoX21hY19hZGRyKCkgZm9yICBkZXYtPnNldF9tYWNfYWRkcmVzcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5oIGIvZHJpdmVycy9uZXQvczJpby5oCmluZGV4IGE2NTZkMTguLjU0YmFhMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uaAorKysgYi9kcml2ZXJzL25ldC9zMmlvLmgKQEAgLTk1LDYgKzk1LDMyIEBACiAJdW5zaWduZWQgbG9uZyBsb25nIGZsdXNoX21heF9wa3RzOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBzdW1fYXZnX3BrdHNfYWdncmVnYXRlZDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbnVtX2FnZ3JlZ2F0aW9uczsKKwkvKiBPdGhlciBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgbG9uZyBsb25nIG1lbV9hbGxvY19mYWlsX2NudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgd2F0Y2hkb2dfdGltZXJfY250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fYWxsb2NhdGVkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fZnJlZWQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGxpbmtfdXBfY250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBsaW5rX2Rvd25fY250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBsaW5rX3VwX3RpbWU7CisJdW5zaWduZWQgbG9uZyBsb25nIGxpbmtfZG93bl90aW1lOworCisJLyogVHJhbnNmZXIgQ29kZSBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgbG9uZyBsb25nIHR4X2J1Zl9hYm9ydF9jbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHR4X2Rlc2NfYWJvcnRfY250OworCXVuc2lnbmVkIGxvbmcgbG9uZyB0eF9wYXJpdHlfZXJyX2NudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdHhfbGlua19sb3NzX2NudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdHhfbGlzdF9wcm9jX2Vycl9jbnQ7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcgcnhfcGFyaXR5X2Vycl9jbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHJ4X2Fib3J0X2NudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcnhfcGFyaXR5X2Fib3J0X2NudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcnhfcmRhX2ZhaWxfY250OworCXVuc2lnbmVkIGxvbmcgbG9uZyByeF91bmtuX3Byb3RfY250OworCXVuc2lnbmVkIGxvbmcgbG9uZyByeF9mY3NfZXJyX2NudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcnhfYnVmX3NpemVfZXJyX2NudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcnhfcnhkX2NvcnJ1cHRfY250OworCXVuc2lnbmVkIGxvbmcgbG9uZyByeF91bmtuX2Vycl9jbnQ7CiB9OwogCiAvKiBYcGFrIHJlbGVhdGVkIGFsYXJtIGFuZCB3YXJuaW5ncyAqLwpAQCAtMzA4LDYgKzMzNCwxMSBAQAogI2RlZmluZSBNQVhfVFhfRklGT1MgOAogI2RlZmluZSBNQVhfUlhfUklOR1MgOAogCisjZGVmaW5lIE1BWF9SWF9ERVNDXzEgIChNQVhfUlhfUklOR1MgKiBNQVhfUlhfQkxPQ0tTX1BFUl9SSU5HICogMTI3ICkKKyNkZWZpbmUgTUFYX1JYX0RFU0NfMiAgKE1BWF9SWF9SSU5HUyAqIE1BWF9SWF9CTE9DS1NfUEVSX1JJTkcgKiA4NSApCisjZGVmaW5lIE1BWF9SWF9ERVNDXzMgIChNQVhfUlhfUklOR1MgKiBNQVhfUlhfQkxPQ0tTX1BFUl9SSU5HICogODUgKQorI2RlZmluZSBNQVhfVFhfREVTQyAgICAoTUFYX0FWQUlMQUJMRV9UWERTKQorCiAvKiBGSUZPIG1hcHBpbmdzIGZvciBhbGwgcG9zc2libGUgbnVtYmVyIG9mIGZpZm9zIGNvbmZpZ3VyZWQgKi8KIHN0YXRpYyBpbnQgZmlmb19tYXBbXVtNQVhfVFhfRklGT1NdID0gewogCXswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSwKQEAgLTgxOSw2ICs4NTAsNyBAQAogI2RlZmluZQlMSU5LX1VQCQkyCiAKIAlpbnQgdGFza19mbGFnOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydF90aW1lOwogI2RlZmluZSBDQVJEX0RPV04gMQogI2RlZmluZSBDQVJEX1VQIDIKIAlhdG9taWNfdCBjYXJkX3N0YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2dpc2VlcS5jIGIvZHJpdmVycy9uZXQvc2dpc2VlcS5jCmluZGV4IDFmYzc3MzAuLjIxMDZiZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NnaXNlZXEuYworKysgYi9kcml2ZXJzL25ldC9zZ2lzZWVxLmMKQEAgLTE2LDExICsxNiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAogI2luY2x1ZGUgPGFzbS9zZ2kvaHBjMy5oPgogI2luY2x1ZGUgPGFzbS9zZ2kvaXAyMi5oPgorI2luY2x1ZGUgPGFzbS9zZ2kvc2VlcS5oPgogCiAjaW5jbHVkZSAic2dpc2VlcS5oIgogCkBAIC05MiwxMyArOTQsOSBAQAogCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV4dF9tb2R1bGU7CiAJc3BpbmxvY2tfdCB0eF9sb2NrOwogfTsKIAotLyogQSBsaXN0IG9mIGFsbCBpbnN0YWxsZWQgc2VlcSBkZXZpY2VzLCBmb3IgcmVtb3ZpbmcgdGhlIGRyaXZlciBtb2R1bGUuICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3Rfc2dpc2VlcV9kZXY7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBocGMzX2V0aF9yZXNldChzdHJ1Y3QgaHBjM19ldGhyZWdzICpocmVncykKIHsKIAlocmVncy0+cmVzZXQgPSBIUEMzX0VSU1RfQ1JFU0VUIHwgSFBDM19FUlNUX0NMUklSUTsKQEAgLTYyNCw5ICs2MjIsMTIgQEAKIAogI2RlZmluZSBBTElHTkVEKHgpICAoKCgodW5zaWduZWQgbG9uZykoeCkpICsgMHhmKSAmIH4oMHhmKSkKIAotc3RhdGljIGludCBzZ2lzZWVxX2luaXQoc3RydWN0IGhwYzNfcmVncyogaHBjcmVncywgaW50IGlycSwgaW50IGhhc19lZXByb20pCitzdGF0aWMgaW50IF9faW5pdCBzZ2lzZWVxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHNnaXNlZXFfcGxhdGZvcm1fZGF0YSAqcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgaHBjM19yZWdzICpocGNyZWdzID0gcGQtPmhwYzsKIAlzdHJ1Y3Qgc2dpc2VlcV9pbml0X2Jsb2NrICpzcjsKKwl1bnNpZ25lZCBpbnQgaXJxID0gcGQtPmlycTsKIAlzdHJ1Y3Qgc2dpc2VlcV9wcml2YXRlICpzcDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBlcnIsIGk7CkBAIC02MzcsNiArNjM4LDggQEAKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0OwogCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogTWFrZSBwcml2YXRlIGRhdGEgcGFnZSBhbGlnbmVkICovCkBAIC02NDgsMTUgKzY1MSw3IEBACiAJfQogCXNwLT5zcmluZ3MgPSBzcjsKIAotI2RlZmluZSBFQUREUl9OVk9GUyAgICAgMjUwCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQl1bnNpZ25lZCBzaG9ydCB0bXAgPSBoYXNfZWVwcm9tID8KLQkJCWlwMjJfZWVwcm9tX3JlYWQoJmhwY3JlZ3MtPmVlcHJvbSwgRUFERFJfTlZPRlMgLyAyK2kpIDoKLQkJCWlwMjJfbnZyYW1fcmVhZChFQUREUl9OVk9GUyAvIDIraSk7Ci0KLQkJZGV2LT5kZXZfYWRkclsyICogaV0gICAgID0gdG1wID4+IDg7Ci0JCWRldi0+ZGV2X2FkZHJbMiAqIGkgKyAxXSA9IHRtcCAmIDB4ZmY7Ci0JfQorCW1lbWNweShkZXYtPmRldl9hZGRyLCBwZC0+bWFjLCBFVEhfQUxFTik7CiAKICNpZmRlZiBERUJVRwogCWdwcml2ID0gc3A7CkBAIC03MjAsOSArNzE1LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQlwcmludGsoIiUyLjJ4JWMiLCBkZXYtPmRldl9hZGRyW2ldLCBpID09IDUgPyAnXG4nIDogJzonKTsKIAotCXNwLT5uZXh0X21vZHVsZSA9IHJvb3Rfc2dpc2VlcV9kZXY7Ci0Jcm9vdF9zZ2lzZWVxX2RldiA9IGRldjsKLQogCXJldHVybiAwOwogCiBlcnJfb3V0X2ZyZWVfcGFnZToKQEAgLTczNCw0MyArNzI2LDQyIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc2dpc2VlcV9wcm9iZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNnaXNlZXFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JdW5zaWduZWQgaW50IHRtcCwgcmV0MSwgcmV0MiA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzZ2lzZWVxX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCS8qIE9uIGJvYXJkIGFkYXB0ZXIgb24gMXN0IEhQQyBpcyBhbHdheXMgcHJlc2VudCAqLwotCXJldDEgPSBzZ2lzZWVxX2luaXQoaHBjM2MwLCBTR0lfRU5FVF9JUlEsIDApOwotCS8qIExldCdzIHNlZSBpZiBzZWNvbmQgSFBDIGlzIHRoZXJlICovCi0JaWYgKCEoaXAyMl9pc19mdWxsaG91c2UoKSkgJiYKLQkgICAgZ2V0X2RiZSh0bXAsICh1bnNpZ25lZCBpbnQgKikmaHBjM2MxLT5wYmRtYVsxXSkgPT0gMCkgewotCQlzZ2ltYy0+Z2lvcGFyIHw9IFNHSU1DX0dJT1BBUl9NQVNURVJFWFAxIHwKLQkJCQkgU0dJTUNfR0lPUEFSX0VYUDE2NCB8Ci0JCQkJIFNHSU1DX0dJT1BBUl9IUEMyNjQ7Ci0JCWhwYzNjMS0+cGJ1c19waW9jZmdbMF1bMF0gPSAweDNmZmZmOwotCQkvKiBpbnRlcnJ1cHQvY29uZmlnIHJlZ2lzdGVyIG9uIENoYWxsZW5nZSBTIE1lenogYm9hcmQgKi8KLQkJaHBjM2MxLT5wYnVzX2V4dHJlZ3NbMF1bMF0gPSAweDMwOwotCQlyZXQyID0gc2dpc2VlcV9pbml0KGhwYzNjMSwgU0dJX0dJT18wX0lSUSwgMSk7Ci0JfQotCi0JcmV0dXJuIChyZXQxICYgcmV0MikgPyByZXQxIDogMDsKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgc3AtPnNyaW5ncyk7CisJZnJlZV9uZXRkZXYoZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHNnaXNlZXFfZXhpdCh2b2lkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXh0LCAqZGV2OwotCXN0cnVjdCBzZ2lzZWVxX3ByaXZhdGUgKnNwOwotCi0JZm9yIChkZXYgPSByb290X3NnaXNlZXFfZGV2OyBkZXY7IGRldiA9IG5leHQpIHsKLQkJc3AgPSAoc3RydWN0IHNnaXNlZXFfcHJpdmF0ZSAqKSBuZXRkZXZfcHJpdihkZXYpOwotCQluZXh0ID0gc3AtPm5leHRfbW9kdWxlOwotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHNwLT5zcmluZ3MpOwotCQlmcmVlX25ldGRldihkZXYpOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2dpc2VlcV9kcml2ZXIgPSB7CisJLnByb2JlCT0gc2dpc2VlcV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3Aoc2dpc2VlcV9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInNnaXNlZXEiCiAJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgc2dpc2VlcV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWlmIChwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNnaXNlZXFfZHJpdmVyKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkRyaXZlciByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKLW1vZHVsZV9pbml0KHNnaXNlZXFfcHJvYmUpOwotbW9kdWxlX2V4aXQoc2dpc2VlcV9leGl0KTsKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZ2lzZWVxX21vZHVsZV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNnaXNlZXFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2dpc2VlcV9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChzZ2lzZWVxX21vZHVsZV9leGl0KTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTR0kgU2VlcSA4MDAzIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTGludXgvTUlQUyBNYWlsaW5nIExpc3QgPGxpbnV4LW1pcHNAbGludXgtbWlwcy5vcmc+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3NtdC5jIGIvZHJpdmVycy9uZXQvc2tmcC9zbXQuYwppbmRleCBmZTg0NzgwLi43NWFmYzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3NtdC5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvc210LmMKQEAgLTE3NDgsNyArMTc0OCw3IEBACiAjZW5kaWYKIAogI2lmZGVmCUFNMjlLCi1zbXRfaWZjb25maWcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2ludCBzbXRfaWZjb25maWcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlpZiAoYXJnYyA+PSAyICYmICFzdHJjbXAoYXJndlswXSwib3B0X2J5cGFzcyIpICYmCiAJICAgICFzdHJjbXAoYXJndlsxXSwieWVzIikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCAyMWFmZTEwLi43NzY2OTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0xMzUsMTAgKzEzNSwxMyBAQAogLyogV2FrZSBvbiBMYW4gb25seSBzdXBwb3J0ZWQgb24gWXVrb24gY2hpcHMgd2l0aCByZXYgMSBvciBhYm92ZSAqLwogc3RhdGljIHUzMiB3b2xfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBza2dlX2h3ICpodykKIHsKLQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTiAmJiBody0+Y2hpcF9yZXYgIT0gMCkKLQkJcmV0dXJuIFdBS0VfTUFHSUMgfCBXQUtFX1BIWTsKLQllbHNlCisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKIAkJcmV0dXJuIDA7CisKKwlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTiAmJiBody0+Y2hpcF9yZXYgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gV0FLRV9NQUdJQyB8IFdBS0VfUEhZOwogfQogCiBzdGF0aWMgdTMyIHBjaV93YWtlX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYgKmRldikKQEAgLTM1OTEsNyArMzU5NCw5IEBACiAJc2tnZS0+ZHVwbGV4ID0gLTE7CiAJc2tnZS0+c3BlZWQgPSAtMTsKIAlza2dlLT5hZHZlcnRpc2luZyA9IHNrZ2Vfc3VwcG9ydGVkX21vZGVzKGh3KTsKLQlza2dlLT53b2wgPSBwY2lfd2FrZV9lbmFibGVkKGh3LT5wZGV2KSA/IHdvbF9zdXBwb3J0ZWQoaHcpIDogMDsKKworCWlmIChwY2lfd2FrZV9lbmFibGVkKGh3LT5wZGV2KSkKKwkJc2tnZS0+d29sID0gd29sX3N1cHBvcnRlZChodykgJiBXQUtFX01BR0lDOwogCiAJaHctPmRldltwb3J0XSA9IGRldjsKIApAQCAtMzc5Nyw2ICszODAyLDkgQEAKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCBpLCBlcnIsIHdvbCA9IDA7CiAKKwlpZiAoIWh3KQorCQlyZXR1cm4gMDsKKwogCWVyciA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0zODI1LDYgKzM4MzMsOSBAQAogCXN0cnVjdCBza2dlX2h3ICpodyAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJaW50IGksIGVycjsKIAorCWlmICghaHcpCisJCXJldHVybiAwOworCiAJZXJyID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpAQCAtMzg2Myw2ICszODc0LDkgQEAKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCBpLCB3b2wgPSAwOwogCisJaWYgKCFodykKKwkJcmV0dXJuOworCiAJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOwogCQlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCAyMzhjMmNhLi5mZTAxYjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC0xMjQsMTYgKzEyNCwxMyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM2MSkgfSwgLyogODhFODA1MCAqLwogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM2MikgfSwgLyogODhFODA1MyAqLwogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM2MykgfSwgLyogODhFODA1NSAqLwotI2lmZGVmIGJyb2tlbgotCS8qIFRoaXMgZGV2aWNlIGNhdXNlcyBkYXRhIGNvcnJ1cHRpb24gcHJvYmxlbXMgdGhhdCBhcmUgbm90IHJlc29sdmVkICovCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzY0KSB9LCAvKiA4OEU4MDU2ICovCi0jZW5kaWYKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNjYpIH0sIC8qIDg4RUMwMzYgKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNjcpIH0sIC8qIDg4RUMwMzIgKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNjgpIH0sIC8qIDg4RUMwMzQgKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNjkpIH0sIC8qIDg4RUMwNDIgKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNkEpIH0sIC8qIDg4RTgwNTggKi8KLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNkIpIH0sIC8qIDg4RTgwNzEgKi8KKy8vCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM2QikgfSwgLyogODhFODA3MSAqLwogCXsgMCB9CiB9OwogCkBAIC0zMDcsMTAgKzMwNCwxMyBAQAogCQkJICAgUEhZX01fRUNfTUFDX1NfTVNLKTsKIAkJZWN0cmwgfD0gUEhZX01fRUNfTUFDX1MoTUFDX1RYX0NMS18yNV9NSFopOwogCisJCS8qIG9uIFBIWSA4OEUxMDQwIFJldi5EMCAoYW5kIG5ld2VyKSBkb3duc2hpZnQgY29udHJvbCBjaGFuZ2VkICovCiAJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDKQorCQkJLyogc2V0IGRvd25zaGlmdCBjb3VudGVyIHRvIDN4IGFuZCBlbmFibGUgZG93bnNoaWZ0ICovCiAJCQllY3RybCB8PSBQSFlfTV9FQ19EU0NfMigyKSB8IFBIWV9NX0VDX0RPV05fU19FTkE7CiAJCWVsc2UKLQkJCWVjdHJsIHw9IFBIWV9NX0VDX01fRFNDKDIpIHwgUEhZX01fRUNfU19EU0MoMyk7CisJCQkvKiBzZXQgbWFzdGVyICYgc2xhdmUgZG93bnNoaWZ0IGNvdW50ZXIgdG8gMXggKi8KKwkJCWVjdHJsIHw9IFBIWV9NX0VDX01fRFNDKDApIHwgUEhZX01fRUNfU19EU0MoMSk7CiAKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQ1RSTCwgZWN0cmwpOwogCX0KQEAgLTMyNywxMCArMzI3LDEyIEBACiAJCQkvKiBlbmFibGUgYXV0b21hdGljIGNyb3Nzb3ZlciAqLwogCQkJY3RybCB8PSBQSFlfTV9QQ19NRElfWE1PREUoUEhZX01fUENfRU5BX0FVVE8pOwogCisJCQkvKiBkb3duc2hpZnQgb24gUEhZIDg4RTExMTIgYW5kIDg4RTExNDkgaXMgY2hhbmdlZCAqLwogCQkJaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUKIAkJCSAgICAmJiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTAogCQkJCXx8IGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVQogCQkJCXx8IGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRVgpKSB7CisJCQkJLyogc2V0IGRvd25zaGlmdCBjb3VudGVyIHRvIDN4IGFuZCBlbmFibGUgZG93bnNoaWZ0ICovCiAJCQkJY3RybCAmPSB+UEhZX01fUENfRFNDX01TSzsKIAkJCQljdHJsIHw9IFBIWV9NX1BDX0RTQygyKSB8IFBIWV9NX1BDX0RPV05fU19FTkE7CiAJCQl9CkBAIC0zNjIsNyArMzY0LDcgQEAKIAkJCS8qIGZvciBTRlAtbW9kdWxlIHNldCBTSUdERVQgcG9sYXJpdHkgdG8gbG93ICovCiAJCQljdHJsID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMKTsKIAkJCWN0cmwgfD0gUEhZX01fRklCX1NJR0RfUE9MOwotCQkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9DVFJMLCBjdHJsKTsKKwkJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIGN0cmwpOwogCQl9CiAKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCBwZyk7CkBAIC02NTYsNyArNjU4LDcgQEAKIAljb25zdCB1OCAqYWRkciA9IGh3LT5kZXZbcG9ydF0tPmRldl9hZGRyOwogCiAJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgR1BIWV9DVFJMKSwgR1BDX1JTVF9TRVQpOwotCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIEdQSFlfQ1RSTCksIEdQQ19SU1RfQ0xSfEdQQ19FTkFfUEFVU0UpOworCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIEdQSFlfQ1RSTCksIEdQQ19SU1RfQ0xSKTsKIAogCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19DVFJMKSwgR01DX1JTVF9DTFIpOwogCkBAIC04NDIsMTAgKzg0NCwxMiBAQAogLyogVXBkYXRlIGNoaXAncyBuZXh0IHBvaW50ZXIgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBza3kyX3B1dF9pZHgoc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBxLCB1MTYgaWR4KQogewotCXEgPSBZMl9RQUREUihxLCBQUkVGX1VOSVRfUFVUX0lEWCk7CisJLyogTWFrZSBzdXJlIHdyaXRlJyB0byBkZXNjcmlwdG9ycyBhcmUgY29tcGxldGUgYmVmb3JlIHdlIHRlbGwgaGFyZHdhcmUgKi8KIAl3bWIoKTsKLQlza3kyX3dyaXRlMTYoaHcsIHEsIGlkeCk7Ci0Jc2t5Ml9yZWFkMTYoaHcsIHEpOworCXNreTJfd3JpdGUxNihodywgWTJfUUFERFIocSwgUFJFRl9VTklUX1BVVF9JRFgpLCBpZHgpOworCisJLyogU3luY2hyb25pemUgSS9PIG9uIHNpbmNlIG5leHQgcHJvY2Vzc29yIG1heSB3cml0ZSB0byB0YWlsICovCisJbW1pb3diKCk7CiB9CiAKIApAQCAtOTc3LDYgKzk4MSw3IEBACiAKIAkvKiByZXNldCB0aGUgUnggcHJlZmV0Y2ggdW5pdCAqLwogCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocnhxLCBQUkVGX1VOSVRfQ1RSTCksIFBSRUZfVU5JVF9SU1RfU0VUKTsKKwltbWlvd2IoKTsKIH0KIAogLyogQ2xlYW4gb3V0IHJlY2VpdmUgYnVmZmVyIGFyZWEsIGFzc3VtZXMgcmVjZWl2ZXIgaGFyZHdhcmUgc3RvcHBlZCAqLwpAQCAtMTA0NCwyNiArMTA0OSwyMiBAQAogCXUxNiBwb3J0ID0gc2t5Mi0+cG9ydDsKIAogCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKKwluZXRpZl9wb2xsX2Rpc2FibGUoc2t5Mi0+aHctPmRldlswXSk7CiAKLQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwgUlhfVkxBTl9TVFJJUF9PTik7Ci0Jc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksIFRYX1ZMQU5fVEFHX09OKTsKIAlza3kyLT52bGdycCA9IGdycDsKKwlpZiAoZ3JwKSB7CisJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLAorCQkJICAgICBSWF9WTEFOX1NUUklQX09OKTsKKwkJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksCisJCQkgICAgIFRYX1ZMQU5fVEFHX09OKTsKKwl9IGVsc2UgeworCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwKKwkJCSAgICAgUlhfVkxBTl9TVFJJUF9PRkYpOworCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwKKwkJCSAgICAgVFhfVkxBTl9UQUdfT0ZGKTsKKwl9CiAKLQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgc2t5Ml92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKLXsKLQlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKLQl1MTYgcG9ydCA9IHNreTItPnBvcnQ7Ci0KLQluZXRpZl90eF9sb2NrX2JoKGRldik7Ci0KLQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwgUlhfVkxBTl9TVFJJUF9PRkYpOwotCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBUWF9WTEFOX1RBR19PRkYpOwotCXZsYW5fZ3JvdXBfc2V0X2RldmljZShza3kyLT52bGdycCwgdmlkLCBOVUxMKTsKLQorCW5ldGlmX3BvbGxfZW5hYmxlKHNreTItPmh3LT5kZXZbMF0pOwogCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogfQogI2VuZGlmCkBAIC0xMTk2LDcgKzExOTcsNyBAQAogCX0KIAogCS8qIFRlbGwgY2hpcCBhYm91dCBhdmFpbGFibGUgYnVmZmVycyAqLwotCXNreTJfd3JpdGUxNihodywgWTJfUUFERFIocnhxLCBQUkVGX1VOSVRfUFVUX0lEWCksIHNreTItPnJ4X3B1dCk7CisJc2t5Ml9wdXRfaWR4KGh3LCByeHEsIHNreTItPnJ4X3B1dCk7CiAJcmV0dXJuIDA7CiBub21lbToKIAlza3kyX3J4X2NsZWFuKHNreTIpOwpAQCAtMTQyNyw3ICsxNDI4LDcgQEAKIAkJdGNwc3VtID0gb2Zmc2V0IDw8IDE2OwkJLyogc3VtIHN0YXJ0ICovCiAJCXRjcHN1bSB8PSBvZmZzZXQgKyBza2ItPmNzdW1fb2Zmc2V0OwkvKiBzdW0gd3JpdGUgKi8KIAotCQljdHJsID0gQ0FMU1VNIHwgV1JfU1VNIHwgSU5JVF9TVU0gfCBMT0NLX1NVTTsKKwkJY3RybCB8PSBDQUxTVU0gfCBXUl9TVU0gfCBJTklUX1NVTSB8IExPQ0tfU1VNOwogCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVURQKQogCQkJY3RybCB8PSBVRFBUQ1A7CiAKQEAgLTE1MzgsNiArMTUzOSw4IEBACiAJfQogCiAJc2t5Mi0+dHhfY29ucyA9IGlkeDsKKwlzbXBfbWIoKTsKKwogCWlmICh0eF9hdmFpbChza3kyKSA+IE1BWF9TS0JfVFhfTEUgKyA0KQogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CkBAIC0xNTc3LDEzICsxNTgwLDYgQEAKIAlpbWFzayAmPSB+cG9ydGlycV9tc2tbcG9ydF07CiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBpbWFzayk7CiAKLQkvKgotCSAqIEJvdGggcG9ydHMgc2hhcmUgdGhlIE5BUEkgcG9sbCBvbiBwb3J0IDAsIHNvIGlmIG5lY2Vzc2FyeSB1bmRvIHRoZQotCSAqIHRoZSBkaXNhYmxlIHRoYXQgaXMgZG9uZSBpbiBkZXZfY2xvc2UuCi0JICovCi0JaWYgKHNreTItPnBvcnQgPT0gMCAmJiBody0+cG9ydHMgPiAxKQotCQluZXRpZl9wb2xsX2VuYWJsZShkZXYpOwotCiAJc2t5Ml9nbWFjX3Jlc2V0KGh3LCBwb3J0KTsKIAogCS8qIFN0b3AgdHJhbnNtaXR0ZXIgKi8KQEAgLTIxMzksOCArMjEzNSwxMCBAQAogCQlzd2l0Y2ggKGxlLT5vcGNvZGUgJiB+SFdfT1dORVIpIHsKIAkJY2FzZSBPUF9SWFNUQVQ6CiAJCQlza2IgPSBza3kyX3JlY2VpdmUoZGV2LCBsZW5ndGgsIHN0YXR1cyk7Ci0JCQlpZiAoIXNrYikKKwkJCWlmICh1bmxpa2VseSghc2tiKSkgeworCQkJCXNreTItPm5ldF9zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkJZ290byBmb3JjZV91cGRhdGU7CisJCQl9CiAKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQlza3kyLT5uZXRfc3RhdHMucnhfcGFja2V0cysrOwpAQCAtMjIyMSw2ICsyMjE5LDcgQEAKIAogCS8qIEZ1bGx5IHByb2Nlc3NlZCBzdGF0dXMgcmluZyBzbyBjbGVhciBpcnEgKi8KIAlza3kyX3dyaXRlMzIoaHcsIFNUQVRfQ1RSTCwgU0NfU1RBVF9DTFJfSVJRKTsKKwltbWlvd2IoKTsKIAogZXhpdF9sb29wOgogCWlmIChidWZfd3JpdGVbMF0pIHsKQEAgLTIzNDEsNiArMjM0MCwxMiBAQAogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IG1hYyBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CiAKKwlpZiAoc3RhdHVzICYgR01fSVNfUlhfQ09fT1YpCisJCWdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX1JYX0lSUV9TUkMpOworCisJaWYgKHN0YXR1cyAmIEdNX0lTX1RYX0NPX09WKQorCQlnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9UWF9JUlFfU1JDKTsKKwogCWlmIChzdGF0dXMgJiBHTV9JU19SWF9GRl9PUikgewogCQkrK3NreTItPm5ldF9zdGF0cy5yeF9maWZvX2Vycm9yczsKIAkJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwgR01GX0NMSV9SWF9GTyk7CkBAIC0yNDM5LDYgKzI0NDQsNyBAQAogCWlmICh3b3JrX2RvbmUgPCB3b3JrX2xpbWl0KSB7CiAJCW5ldGlmX3J4X2NvbXBsZXRlKGRldjApOwogCisJCS8qIGVuZCBvZiBpbnRlcnJ1cHQsIHJlLWVuYWJsZXMgYWxzbyBhY3RzIGFzIEkvTyBzeW5jaHJvbml6YXRpb24gKi8KIAkJc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0xJU1IpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewpAQCAtMzQ3NCw3ICszNDgwLDYgQEAKICNpZmRlZiBTS1kyX1ZMQU5fVEFHX1VTRUQKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKIAlkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSBza3kyX3ZsYW5fcnhfcmVnaXN0ZXI7Ci0JZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gc2t5Ml92bGFuX3J4X2tpbGxfdmlkOwogI2VuZGlmCiAKIAkvKiByZWFkIHRoZSBtYWMgYWRkcmVzcyAqLwpAQCAtMzU4NCw3ICszNTg5LDcgQEAKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9OQU1FKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7Ci0JCWdvdG8gZXJyX291dDsKKwkJZ290byBlcnJfb3V0X2Rpc2FibGU7CiAJfQogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CkBAIC0zNzIxLDggKzM3MjYsMTAgQEAKIAlrZnJlZShodyk7CiBlcnJfb3V0X2ZyZWVfcmVnaW9uczoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyX291dF9kaXNhYmxlOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIGVycl9vdXQ6CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTM3NzUsNiArMzc4Miw5IEBACiAJc3RydWN0IHNreTJfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCBpLCB3b2wgPSAwOwogCisJaWYgKCFodykKKwkJcmV0dXJuIDA7CisKIAlkZWxfdGltZXJfc3luYygmaHctPmlkbGVfdGltZXIpOwogCW5ldGlmX3BvbGxfZGlzYWJsZShody0+ZGV2WzBdKTsKIApAQCAtMzgwNiw2ICszODE2LDkgQEAKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJaW50IGksIGVycjsKIAorCWlmICghaHcpCisJCXJldHVybiAwOworCiAJZXJyID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpAQCAtMzg1Miw2ICszODY1LDkgQEAKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJaW50IGksIHdvbCA9IDA7CiAKKwlpZiAoIWh3KQorCQlyZXR1cm47CisKIAlkZWxfdGltZXJfc3luYygmaHctPmlkbGVfdGltZXIpOwogCW5ldGlmX3BvbGxfZGlzYWJsZShody0+ZGV2WzBdKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5oIGIvZHJpdmVycy9uZXQvc2t5Mi5oCmluZGV4IDVlZmI1YWYuLmI4YzRhM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuaAorKysgYi9kcml2ZXJzL25ldC9za3kyLmgKQEAgLTExNDksNyArMTE0OSw3IEBACiAJUEhZX01fSVNfSkFCQkVSCQk9IDE8PDAsIC8qIEphYmJlciAqLwogCiAJUEhZX01fREVGX01TSwkJPSBQSFlfTV9JU19MU1BfQ0hBTkdFIHwgUEhZX01fSVNfTFNUX0NIQU5HRQotCQkJCSB8IFBIWV9NX0lTX0ZJRk9fRVJST1IsCisJCQkJIHwgUEhZX01fSVNfRFVQX0NIQU5HRSwKIAlQSFlfTV9BTl9NU0sJICAgICAgID0gUEhZX01fSVNfQU5fRVJST1IgfCBQSFlfTV9JU19BTl9DT01QTCwKIH07CiAKQEAgLTE3MzIsMjggKzE3MzIsNiBAQAogCiAvKglHUEhZX0NUUkwJCTMyIGJpdAlHUEhZIENvbnRyb2wgUmVnIChZVUtPTiBvbmx5KSAqLwogZW51bSB7Ci0JR1BDX1NFTF9CRFQJPSAxPDwyOCwgLyogU2VsZWN0IEJpLURpci4gVHJhbnNmZXIgZm9yIE1EQy9NRElPICovCi0JR1BDX0lOVF9QT0xfSEkJPSAxPDwyNywgLyogSVJRIFBvbGFyaXR5IGlzIEFjdGl2ZSBISUdIICovCi0JR1BDXzc1X09ITQk9IDE8PDI2LCAvKiBVc2UgNzUgT2htIFRlcm1pbmF0aW9uIGluc3RlYWQgb2YgNTAgKi8KLQlHUENfRElTX0ZDCT0gMTw8MjUsIC8qIERpc2FibGUgQXV0b21hdGljIEZpYmVyL0NvcHBlciBEZXRlY3Rpb24gKi8KLQlHUENfRElTX1NMRUVQCT0gMTw8MjQsIC8qIERpc2FibGUgRW5lcmd5IERldGVjdCAqLwotCUdQQ19IV0NGR19NXzMJPSAxPDwyMywgLyogSFdDRkdfTU9ERVszXSAqLwotCUdQQ19IV0NGR19NXzIJPSAxPDwyMiwgLyogSFdDRkdfTU9ERVsyXSAqLwotCUdQQ19IV0NGR19NXzEJPSAxPDwyMSwgLyogSFdDRkdfTU9ERVsxXSAqLwotCUdQQ19IV0NGR19NXzAJPSAxPDwyMCwgLyogSFdDRkdfTU9ERVswXSAqLwotCUdQQ19BTkVHXzAJPSAxPDwxOSwgLyogQU5FR1swXSAqLwotCUdQQ19FTkFfWEMJPSAxPDwxOCwgLyogRW5hYmxlIE1ESSBjcm9zc292ZXIgKi8KLQlHUENfRElTXzEyNQk9IDE8PDE3LCAvKiBEaXNhYmxlIDEyNSBNSHogY2xvY2sgKi8KLQlHUENfQU5FR18zCT0gMTw8MTYsIC8qIEFORUdbM10gKi8KLQlHUENfQU5FR18yCT0gMTw8MTUsIC8qIEFORUdbMl0gKi8KLQlHUENfQU5FR18xCT0gMTw8MTQsIC8qIEFORUdbMV0gKi8KLQlHUENfRU5BX1BBVVNFCT0gMTw8MTMsIC8qIEVuYWJsZSBQYXVzZSAoU1lNX09SX1JFTSkgKi8KLQlHUENfUEhZQUREUl80CT0gMTw8MTIsIC8qIEJpdCA0IG9mIFBoeSBBZGRyICovCi0JR1BDX1BIWUFERFJfMwk9IDE8PDExLCAvKiBCaXQgMyBvZiBQaHkgQWRkciAqLwotCUdQQ19QSFlBRERSXzIJPSAxPDwxMCwgLyogQml0IDIgb2YgUGh5IEFkZHIgKi8KLQlHUENfUEhZQUREUl8xCT0gMTw8OSwJIC8qIEJpdCAxIG9mIFBoeSBBZGRyICovCi0JR1BDX1BIWUFERFJfMAk9IDE8PDgsCSAvKiBCaXQgMCBvZiBQaHkgQWRkciAqLwotCQkJCQkJLyogQml0cyAgNy4uMjoJcmVzZXJ2ZWQgKi8KIAlHUENfUlNUX0NMUgk9IDE8PDEsCS8qIENsZWFyIEdQSFkgUmVzZXQgKi8KIAlHUENfUlNUX1NFVAk9IDE8PDAsCS8qIFNldCAgIEdQSFkgUmVzZXQgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKaW5kZXggODFmMjQ4NC4uZGI0M2U0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwpAQCAtNzcsNyArNzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSAic21jOTExeC5oIgogCkBAIC0yMDg0LDEyICsyMDgzLDExIEBACiAJbHAtPmN0bF9yc3BlZWQgPSAxMDA7CiAKIAkvKiBHcmFiIHRoZSBJUlEgKi8KLQlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJnNtYzkxMXhfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmc21jOTExeF9pbnRlcnJ1cHQsCisJCQlJUlFGX1NIQVJFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfb3V0OwogCi0Jc2V0X2lycV90eXBlKGRldi0+aXJxLCBJUlFUX0ZBTExJTkcpOwotCiAjaWZkZWYgU01DX1VTRV9ETUEKIAlscC0+cnhkbWEgPSBTTUNfRE1BX1JFUVVFU1QoZGV2LCBzbWM5MTF4X3J4X2RtYV9pcnEpOwogCWxwLT50eGRtYSA9IFNNQ19ETUFfUkVRVUVTVChkZXYsIHNtYzkxMXhfdHhfZG1hX2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IDcwNTMwMjYuLjUwNmJmZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0yNzksNiArMjc5LDM3IEBACiAjZGVmaW5lIFNNQ19pbnN3KGEsIHIsIHAsIGwpCWluc3coKGEpICsgKHIpLCBwLCBsKQogI2RlZmluZSBTTUNfb3V0c3coYSwgciwgcCwgbCkJb3V0c3coKGEpICsgKHIpLCBwLCBsKQogCisjZWxpZiAgIGRlZmluZWQoQ09ORklHX1NVUEVSSCkKKworI2lmZGVmIENPTkZJR19TT0xVVElPTl9FTkdJTkUKKyNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVCAgICAgICAwCisjZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUICAgICAgMQorI2RlZmluZSBTTUNfQ0FOX1VTRV8zMkJJVCAgICAgIDAKKyNkZWZpbmUgU01DX0lPX1NISUZUICAgICAgICAgICAwCisjZGVmaW5lIFNNQ19OT1dBSVQgICAgICAgICAgICAgMQorCisjZGVmaW5lIFNNQ19pbncoYSwgcikgICAgICAgICAgaW53KChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dHcodiwgYSwgcikgICAgICBvdXR3KHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkgICBpbnN3KChhKSArIChyKSwgcCwgbCkKKyNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpICBvdXRzdygoYSkgKyAociksIHAsIGwpCisKKyNlbHNlIC8qIEJPQVJEUyAqLworCisjZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQgICAgICAgMQorI2RlZmluZSBTTUNfQ0FOX1VTRV8xNkJJVCAgICAgIDEKKyNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQgICAgICAxCisKKyNkZWZpbmUgU01DX2luYihhLCByKSAgICAgICAgICBpbmIoKGEpICsgKHIpKQorI2RlZmluZSBTTUNfaW53KGEsIHIpICAgICAgICAgIGludygoYSkgKyAocikpCisjZGVmaW5lIFNNQ19vdXRiKHYsIGEsIHIpICAgICAgb3V0Yih2LCAoYSkgKyAocikpCisjZGVmaW5lIFNNQ19vdXR3KHYsIGEsIHIpICAgICAgb3V0dyh2LCAoYSkgKyAocikpCisjZGVmaW5lIFNNQ19pbnN3KGEsIHIsIHAsIGwpICAgaW5zdygoYSkgKyAociksIHAsIGwpCisjZGVmaW5lIFNNQ19vdXRzdyhhLCByLCBwLCBsKSAgb3V0c3coKGEpICsgKHIpLCBwLCBsKQorCisjZW5kaWYgIC8qIEJPQVJEUyAqLworCisjZGVmaW5lIHNldF9pcnFfdHlwZShpcnEsIHR5cGUpIGRvIHt9IHdoaWxlICgwKQorCiAjZWxpZiAgIGRlZmluZWQoQ09ORklHX00zMlIpCiAKICNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKaW5kZXggMjMwZGExNC4uYjQ3YWQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwpAQCAtMTc1LDEyICsxNzUsMTAgQEAKIHsKIAlzdHJ1Y3QgbWlpX3BoeSAqcGh5ID0gJmNhcmQtPnBoeTsKIAl1MzIgYWR2ZXJ0aXNlID0gMDsKLQl1MTYgYm1jciwgYm1zciwgc3RhdDEwMDAsIGVzdGF0OworCXUxNiBibXNyLCBlc3RhdDsKIAotCWJtY3IgICAgID0gc3BpZGVyX25ldF9yZWFkX3BoeShjYXJkLT5uZXRkZXYsIHBoeS0+bWlpX2lkLCBNSUlfQk1DUik7Ci0JYm1zciAgICAgPSBzcGlkZXJfbmV0X3JlYWRfcGh5KGNhcmQtPm5ldGRldiwgcGh5LT5taWlfaWQsIE1JSV9CTVNSKTsKLQlzdGF0MTAwMCA9IHNwaWRlcl9uZXRfcmVhZF9waHkoY2FyZC0+bmV0ZGV2LCBwaHktPm1paV9pZCwgTUlJX1NUQVQxMDAwKTsKLQllc3RhdCAgICA9IHNwaWRlcl9uZXRfcmVhZF9waHkoY2FyZC0+bmV0ZGV2LCBwaHktPm1paV9pZCwgTUlJX0VTVEFUVVMpOworCWJtc3IgID0gc3BpZGVyX25ldF9yZWFkX3BoeShjYXJkLT5uZXRkZXYsIHBoeS0+bWlpX2lkLCBNSUlfQk1TUik7CisJZXN0YXQgPSBzcGlkZXJfbmV0X3JlYWRfcGh5KGNhcmQtPm5ldGRldiwgcGh5LT5taWlfaWQsIE1JSV9FU1RBVFVTKTsKIAogCWlmIChibXNyICYgQk1TUl8xMEhBTEYpCiAJCWFkdmVydGlzZSB8PSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZjsKQEAgLTQzMiw3ICs0MzAsOCBAQAogCS8qIGFuZCB3ZSBuZWVkIHRvIGhhdmUgaXQgMTI4IGJ5dGUgYWxpZ25lZCwgdGhlcmVmb3JlIHdlIGFsbG9jYXRlIGEKIAkgKiBiaXQgbW9yZSAqLwogCS8qIGFsbG9jYXRlIGFuIHNrYiAqLwotCWRlc2NyLT5za2IgPSBkZXZfYWxsb2Nfc2tiKGJ1ZnNpemUgKyBTUElERVJfTkVUX1JYQlVGX0FMSUdOIC0gMSk7CisJZGVzY3ItPnNrYiA9IG5ldGRldl9hbGxvY19za2IoY2FyZC0+bmV0ZGV2LAorCQkJCSAgICAgIGJ1ZnNpemUgKyBTUElERVJfTkVUX1JYQlVGX0FMSUdOIC0gMSk7CiAJaWYgKCFkZXNjci0+c2tiKSB7CiAJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGNhcmQpICYmIG5ldF9yYXRlbGltaXQoKSkKIAkJCXByX2VycigiTm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgcnggYnVmZmVyXG4iKTsKQEAgLTEwMTUsMTIgKzEwMTQsMTIgQEAKIAkJICovCiAJfQogCi0JLyogcGFzcyBza2IgdXAgdG8gc3RhY2sgKi8KLQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCiAJLyogdXBkYXRlIG5ldGRldmljZSBzdGF0aXN0aWNzICovCiAJY2FyZC0+bmV0ZGV2X3N0YXRzLnJ4X3BhY2tldHMrKzsKIAljYXJkLT5uZXRkZXZfc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwkvKiBwYXNzIHNrYiB1cCB0byBzdGFjayAqLworCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiB9CiAKICNpZmRlZiBERUJVRwpAQCAtMTE5Miw0MyArMTE5MSw2IEBACiB9CiAKIC8qKgotICogc3BpZGVyX25ldF92bGFuX3J4X3JlZyAtIGluaXRpYWxpemVzIFZMQU4gc3RydWN0dXJlcyBpbiB0aGUgZHJpdmVyIGFuZCBjYXJkCi0gKiBAbmV0ZGV2OiBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQotICogQGdycDogdmxhbl9ncm91cCBzdHJ1Y3R1cmUgdGhhdCBpcyByZWdpc3RlcmVkIChOVUxMIG9uIGRlc3Ryb3lpbmcgaW50ZXJmYWNlKQotICovCi1zdGF0aWMgdm9pZAotc3BpZGVyX25ldF92bGFuX3J4X3JlZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQotewotCS8qIGZ1cnRoZXIgZW5oYW5jZW1lbnQuLi4geWV0IHRvIGRvICovCi0JcmV0dXJuOwotfQotCi0vKioKLSAqIHNwaWRlcl9uZXRfdmxhbl9yeF9hZGQgLSBhZGRzIFZMQU4gaWQgdG8gdGhlIGNhcmQgZmlsdGVyCi0gKiBAbmV0ZGV2OiBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQotICogQHZpZDogVkxBTiBpZCB0byBhZGQKLSAqLwotc3RhdGljIHZvaWQKLXNwaWRlcl9uZXRfdmxhbl9yeF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDE2X3QgdmlkKQotewotCS8qIGZ1cnRoZXIgZW5oYW5jZW1lbnQuLi4geWV0IHRvIGRvICovCi0JLyogYWRkIHZpZCB0byBjYXJkJ3MgVkxBTiBmaWx0ZXIgdGFibGUgKi8KLQlyZXR1cm47Ci19Ci0KLS8qKgotICogc3BpZGVyX25ldF92bGFuX3J4X2tpbGwgLSByZW1vdmVzIFZMQU4gaWQgdG8gdGhlIGNhcmQgZmlsdGVyCi0gKiBAbmV0ZGV2OiBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQotICogQHZpZDogVkxBTiBpZCB0byByZW1vdmUKLSAqLwotc3RhdGljIHZvaWQKLXNwaWRlcl9uZXRfdmxhbl9yeF9raWxsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQxNl90IHZpZCkKLXsKLQkvKiBmdXJ0aGVyIGVuaGFuY2VtZW50Li4uIHlldCB0byBkbyAqLwotCS8qIHJlbW92ZSB2aWQgZnJvbSBjYXJkJ3MgVkxBTiBmaWx0ZXIgdGFibGUgKi8KLX0KLQotLyoqCiAgKiBzcGlkZXJfbmV0X2dldF9zdGF0cyAtIGdldCBpbnRlcmZhY2Ugc3RhdGlzdGljcwogICogQG5ldGRldjogaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKICAqCkBAIC0xODMwLDcgKzE3OTIsNyBAQAogCWlmICghZG4pCiAJCWdvdG8gb3V0X2VycjsKIAotCWZ3X3Byb3AgPSBnZXRfcHJvcGVydHkoZG4sICJmaXJtd2FyZSIsICZmd19zaXplKTsKKwlmd19wcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiZmlybXdhcmUiLCAmZndfc2l6ZSk7CiAJaWYgKCFmd19wcm9wKQogCQlnb3RvIG91dF9lcnI7CiAKQEAgLTIxNzgsOSArMjE0MCw2IEBACiAJbmV0ZGV2LT5wb2xsID0gJnNwaWRlcl9uZXRfcG9sbDsKIAluZXRkZXYtPndlaWdodCA9IFNQSURFUl9ORVRfTkFQSV9XRUlHSFQ7CiAJLyogSFcgVkxBTiAqLwotCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9ICZzcGlkZXJfbmV0X3ZsYW5fcnhfcmVnOwotCW5ldGRldi0+dmxhbl9yeF9hZGRfdmlkID0gJnNwaWRlcl9uZXRfdmxhbl9yeF9hZGQ7Ci0JbmV0ZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gJnNwaWRlcl9uZXRfdmxhbl9yeF9raWxsOwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLyogcG9sbCBjb250cm9sbGVyICovCiAJbmV0ZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSAmc3BpZGVyX25ldF9wb2xsX2NvbnRyb2xsZXI7CkBAIC0yMjM2LDcgKzIxOTUsNyBAQAogCWlmICghZG4pCiAJCXJldHVybiAtRUlPOwogCi0JbWFjID0gZ2V0X3Byb3BlcnR5KGRuLCAibG9jYWwtbWFjLWFkZHJlc3MiLCBOVUxMKTsKKwltYWMgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJsb2NhbC1tYWMtYWRkcmVzcyIsIE5VTEwpOwogCWlmICghbWFjKQogCQlyZXR1cm4gLUVJTzsKIAltZW1jcHkoYWRkci5zYV9kYXRhLCBtYWMsIEVUSF9BTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCmluZGV4IGY1MWJhMzEuLmUxZjkxMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwpAQCAtMTEwLDggKzExMCw3IEBACiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyXG4iCi1LRVJOX0lORk8gIiAgaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay9zdW5kYW5jZS5odG1sXG4iOworS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyXG4iOwogCiBNT0RVTEVfQVVUSE9SKCJEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdW5kYW5jZSBBbHRhIEV0aGVybmV0IGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCA1ZGE3MzIxLi40MzI4MDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMjkwMyw3ICsyOTAzLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZ3AtPmRldjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyOwogCi0JYWRkciA9IGdldF9wcm9wZXJ0eShncC0+b2Zfbm9kZSwgImxvY2FsLW1hYy1hZGRyZXNzIiwgTlVMTCk7CisJYWRkciA9IG9mX2dldF9wcm9wZXJ0eShncC0+b2Zfbm9kZSwgImxvY2FsLW1hYy1hZGRyZXNzIiwgTlVMTCk7CiAJaWYgKGFkZHIgPT0gTlVMTCkgewogI2lmZGVmIENPTkZJR19TUEFSQwogCQlhZGRyID0gaWRwcm9tLT5pZF9ldGhhZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCmluZGV4IDU2YTExMGMuLjYxODQzZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCWlmIChwaHktPnBsYXRmb3JtX2RhdGEpIHsKIAkJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mX2dldF9wYXJlbnQocGh5LT5wbGF0Zm9ybV9kYXRhKTsKIAkJaW50IGNhbl9sb3dfcG93ZXIgPSAxOwotCQlpZiAobnAgPT0gTlVMTCB8fCBnZXRfcHJvcGVydHkobnAsICJuby1hdXRvbG93cG93ZXIiLCBOVUxMKSkKKwkJaWYgKG5wID09IE5VTEwgfHwgb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibm8tYXV0b2xvd3Bvd2VyIiwgTlVMTCkpCiAJCQljYW5fbG93X3Bvd2VyID0gMDsKIAkJaWYgKGNhbl9sb3dfcG93ZXIpIHsKIAkJCS8qIEVuYWJsZSBhdXRvbWF0aWMgbG93LXBvd2VyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggZjFlMmRmYy4uNDYzZDYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtNTQwLDcgKzU0MCw2IEBACiAJc2tiID0gZGV2X2FsbG9jX3NrYihSWF9CVUZfU0laRSk7CiAJaWYgKCFza2IpCiAJCXJldHVybiBOVUxMOwotCXNrYi0+ZGV2ID0gZGV2OwogCSpkbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUoaHdkZXYsIHNrYi0+ZGF0YSwgUlhfQlVGX1NJWkUsCiAJCQkJICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoKmRtYV9oYW5kbGUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IGU1ZTkwMWUuLjJmMzE4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02NCw4ICs2NCw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjc2IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1heSA1LCAyMDA3IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuNzciCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiTWF5IDMxLCAyMDA3IgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTM3MTYsMTAgKzM3MTYsOCBAQAogCXVuc2lnbmVkIGludCByZXN0YXJ0X3RpbWVyOwogCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7Ci0JdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19JTl9SRVNFVF9UQVNLOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKHRwLT5kZXYpKSB7Ci0JCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX0lOX1JFU0VUX1RBU0s7CiAJCXRnM19mdWxsX3VubG9jayh0cCk7CiAJCXJldHVybjsKIAl9CkBAIC0zNzUwLDggKzM3NDgsNiBAQAogCQltb2RfdGltZXIoJnRwLT50aW1lciwgamlmZmllcyArIDEpOwogCiBvdXQ6Ci0JdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfSU5fUkVTRVRfVEFTSzsKLQogCXRnM19mdWxsX3VubG9jayh0cCk7CiB9CiAKQEAgLTczOTAsMTIgKzczODYsNyBAQAogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCS8qIENhbGxpbmcgZmx1c2hfc2NoZWR1bGVkX3dvcmsoKSBtYXkgZGVhZGxvY2sgYmVjYXVzZQotCSAqIGxpbmt3YXRjaF9ldmVudCgpIG1heSBiZSBvbiB0aGUgd29ya3F1ZXVlIGFuZCBpdCB3aWxsIHRyeSB0byBnZXQKLQkgKiB0aGUgcnRubF9sb2NrIHdoaWNoIHdlIGFyZSBob2xkaW5nLgotCSAqLwotCXdoaWxlICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSU5fUkVTRVRfVEFTSykKLQkJbXNsZWVwKDEpOworCWNhbmNlbF93b3JrX3N5bmMoJnRwLT5yZXNldF90YXNrKTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtOTEzMCwyMSArOTEyMSw2IEBACiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJdGczX25ldGlmX3N0YXJ0KHRwKTsKIH0KLQotc3RhdGljIHZvaWQgdGczX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQotewotCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXRnM19uZXRpZl9zdG9wKHRwKTsKLQotCXRnM19mdWxsX2xvY2sodHAsIDApOwotCXZsYW5fZ3JvdXBfc2V0X2RldmljZSh0cC0+dmxncnAsIHZpZCwgTlVMTCk7Ci0JdGczX2Z1bGxfdW5sb2NrKHRwKTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXRnM19uZXRpZl9zdGFydCh0cCk7Ci19CiAjZW5kaWYKIAogc3RhdGljIGludCB0ZzNfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKQEAgLTEwOTg1LDYgKzEwOTYxLDcgQEAKIAkgKiB1cG9uIHN1YnN5c3RlbSBJRHMuCiAJICovCiAJaWYgKHRwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfREVMTCAmJgorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSAmJgogCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUykpIHsKIAkJdHAtPnRnM19mbGFncyB8PSAoVEczX0ZMQUdfVVNFX01JX0lOVEVSUlVQVCB8CiAJCQkJICBURzNfRkxBR19VU0VfTElOS0NIR19SRUcpOwpAQCAtMTE3ODcsNyArMTE3NjQsNiBAQAogI2lmIFRHM19WTEFOX1RBR19VU0VECiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CiAJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gdGczX3ZsYW5fcnhfcmVnaXN0ZXI7Ci0JZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gdGczX3ZsYW5fcnhfa2lsbF92aWQ7CiAjZW5kaWYKIAogCXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggNGQzMzRjZi4uYmQ5ZjRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTIyMjgsNyArMjIyOCw3IEBACiAjZGVmaW5lIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFCTB4MDA4MDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfMTBfMTAwX09OTFkJCTB4MDEwMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfUEFVU0VfQVVUT05FRwkJMHgwMjAwMDAwMAotI2RlZmluZSBURzNfRkxBR19JTl9SRVNFVF9UQVNLCQkweDA0MDAwMDAwCisKICNkZWZpbmUgVEczX0ZMQUdfNDBCSVRfRE1BX0JVRwkJMHgwODAwMDAwMAogI2RlZmluZSBURzNfRkxBR19CUk9LRU5fQ0hFQ0tTVU1TCTB4MTAwMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfU1VQUE9SVF9NU0kJCTB4MjAwMDAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9LY29uZmlnIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL0tjb25maWcKaW5kZXggOTljNGMxOS4uZTZiMmUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL0tjb25maWcKQEAgLTIsMTIgKzIsMTAgQEAKICMgVG9rZW4gUmluZyBkcml2ZXIgY29uZmlndXJhdGlvbgogIwogCi1tZW51ICJUb2tlbiBSaW5nIGRldmljZXMiCi0JZGVwZW5kcyBvbiBORVRERVZJQ0VTICYmICFVTUwKLQogIyBTbyBmYXIsIHdlIG9ubHkgaGF2ZSBQQ0ksIElTQSwgYW5kIE1DQSB0b2tlbiByaW5nIGRldmljZXMKLWNvbmZpZyBUUgorbWVudWNvbmZpZyBUUgogCWJvb2wgIlRva2VuIFJpbmcgZHJpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVRERVZJQ0VTICYmICFVTUwKIAlkZXBlbmRzIG9uIChQQ0kgfHwgSVNBIHx8IE1DQSB8fCBDQ1cpCiAJc2VsZWN0IExMQwogCWhlbHAKQEAgLTIwLDkgKzE4LDExIEBACiAJICBmcm9tIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4uIE1vc3QgcGVvcGxlIGNhbgogCSAgc2F5IE4gaGVyZS4KIAoraWYgVFIKKwogY29uZmlnIElCTVRSCiAJdHJpc3RhdGUgIklCTSBUcm9waWMgY2hpcHNldCBiYXNlZCBhZGFwdGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBUUiAmJiAoSVNBIHx8IE1DQSkKKwlkZXBlbmRzIG9uIElTQSB8fCBNQ0EKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHN1cHBvcnQgZm9yIGFsbCBJQk0gVG9rZW4gUmluZyBjYXJkcyB0aGF0IGRvbid0IHVzZSBETUEuIElmCiAJICB5b3UgaGF2ZSBzdWNoIGEgYmVhc3QsIHNheSBZIGFuZCByZWFkIHRoZSBUb2tlbi1SaW5nIG1pbmktSE9XVE8sCkBAIC0zNiw3ICszNiw3IEBACiAKIGNvbmZpZyBJQk1PTAogCXRyaXN0YXRlICJJQk0gT2x5bXBpYyBjaGlwc2V0IFBDSSBhZGFwdGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBUUiAmJiBQQ0kKKwlkZXBlbmRzIG9uIFBDSQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgc3VwcG9ydCBmb3IgYWxsIG5vbi1MYW5zdHJlYW1lciBJQk0gUENJIFRva2VuIFJpbmcgQ2FyZHMuCiAJICBTcGVjaWZpY2FsbHkgdGhpcyBpcyBhbGwgSUJNIFBDSSwgUENJIFdha2UgT24gTGFuLCBQQ0kgSUksIFBDSSBJSQpAQCAtNTQsNyArNTQsNyBAQAogCiBjb25maWcgSUJNTFMKIAl0cmlzdGF0ZSAiSUJNIExhbnN0cmVhbWVyIGNoaXBzZXQgUENJIGFkYXB0ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFRSICYmIFBDSSAmJiAhNjRCSVQKKwlkZXBlbmRzIG9uIFBDSSAmJiAhNjRCSVQKIAloZWxwCiAJICBUaGlzIGlzIHN1cHBvcnQgZm9yIElCTSBMYW5zdHJlYW1lciBQQ0kgVG9rZW4gUmluZyBDYXJkcy4KIApAQCAtNjYsNyArNjYsNyBAQAogCiBjb25maWcgM0MzNTkKIAl0cmlzdGF0ZSAiM0NvbSAzQzM1OSBUb2tlbiBMaW5rIFZlbG9jaXR5IFhMIGFkYXB0ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFRSICYmIFBDSQorCWRlcGVuZHMgb24gUENJCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBzdXBwb3J0IGZvciB0aGUgM0NvbSBQQ0kgVmVsb2NpdHkgWEwgY2FyZHMsIHNwZWNpZmljYWxseQogCSAgdGhlIDNDb20gM0MzNTksIHBsZWFzZSBub3RlIHRoaXMgaXMgbm90IGZvciB0aGUgM0MzMzkgY2FyZHMsIHlvdQpAQCAtODQsNyArODQsNyBAQAogCiBjb25maWcgVE1TMzgwVFIKIAl0cmlzdGF0ZSAiR2VuZXJpYyBUTVMzODAgVG9rZW4gUmluZyBJU0EvUENJIGFkYXB0ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFRSICYmIChQQ0kgfHwgSVNBICYmIElTQV9ETUFfQVBJIHx8IE1DQSkKKwlkZXBlbmRzIG9uIFBDSSB8fCBJU0EgJiYgSVNBX0RNQV9BUEkgfHwgTUNBCiAJc2VsZWN0IEZXX0xPQURFUgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGdlbmVyaWMgc3VwcG9ydCBmb3IgdG9rZW4gcmluZyBhZGFwdGVycwpAQCAtMTA4LDcgKzEwOCw3IEBACiAKIGNvbmZpZyBUTVNQQ0kKIAl0cmlzdGF0ZSAiR2VuZXJpYyBUTVMzODAgUENJIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBUUiAmJiBUTVMzODBUUiAmJiBQQ0kKKwlkZXBlbmRzIG9uIFRNUzM4MFRSICYmIFBDSQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgdG1zMzgwIG1vZHVsZSBzdXBwb3J0cyBnZW5lcmljIFRNUzM4MC1iYXNlZCBQQ0kgY2FyZHMuCiAKQEAgLTEyMyw3ICsxMjMsNyBAQAogCiBjb25maWcgU0tJU0EKIAl0cmlzdGF0ZSAiU3lzS29ubmVjdCBUUjQvMTYgSVNBIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBUUiAmJiBUTVMzODBUUiAmJiBJU0EKKwlkZXBlbmRzIG9uIFRNUzM4MFRSICYmIElTQQogCWhlbHAKIAkgIFRoaXMgdG1zMzgwIG1vZHVsZSBzdXBwb3J0cyBTeXNLb25uZWN0IFRSNC8xNiBJU0EgY2FyZHMuCiAKQEAgLTEzNSw3ICsxMzUsNyBAQAogCiBjb25maWcgUFJPVEVPTgogCXRyaXN0YXRlICJQcm90ZW9uIElTQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVFIgJiYgVE1TMzgwVFIgJiYgSVNBCisJZGVwZW5kcyBvbiBUTVMzODBUUiAmJiBJU0EKIAloZWxwCiAJICBUaGlzIHRtczM4MCBtb2R1bGUgc3VwcG9ydHMgUHJvdGVvbiBJU0EgY2FyZHMuCiAKQEAgLTE0OCw3ICsxNDgsNyBAQAogCiBjb25maWcgQUJZU1MKIAl0cmlzdGF0ZSAiTWFkZ2UgU21hcnQgMTYvNCBQQ0kgTWsyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBUUiAmJiBUTVMzODBUUiAmJiBQQ0kKKwlkZXBlbmRzIG9uIFRNUzM4MFRSICYmIFBDSQogCWhlbHAKIAkgIFRoaXMgdG1zMzgwIG1vZHVsZSBzdXBwb3J0cyB0aGUgTWFkZ2UgU21hcnQgMTYvNCBQQ0kgTWsyCiAJICBjYXJkcyAoNTEtMDIpLgpAQCAtMTU4LDcgKzE1OCw3IEBACiAKIGNvbmZpZyBNQURHRU1DCiAJdHJpc3RhdGUgIk1hZGdlIFNtYXJ0IDE2LzQgUmluZ25vZGUgTWljcm9DaGFubmVsIgotCWRlcGVuZHMgb24gVFIgJiYgVE1TMzgwVFIgJiYgTUNBCisJZGVwZW5kcyBvbiBUTVMzODBUUiAmJiBNQ0EKIAloZWxwCiAJICBUaGlzIHRtczM4MCBtb2R1bGUgc3VwcG9ydHMgdGhlIE1hZGdlIFNtYXJ0IDE2LzQgTUMxNiBhbmQgTUMzMgogCSAgTWljcm9DaGFubmVsIGFkYXB0ZXJzLgpAQCAtMTY4LDcgKzE2OCw3IEBACiAKIGNvbmZpZyBTTUNUUgogCXRyaXN0YXRlICJTTUMgSVNBL01DQSBhZGFwdGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBUUiAmJiAoSVNBIHx8IE1DQV9MRUdBQ1kpICYmIChCUk9LRU4gfHwgITY0QklUKQorCWRlcGVuZHMgb24gKElTQSB8fCBNQ0FfTEVHQUNZKSAmJiAoQlJPS0VOIHx8ICE2NEJJVCkKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHN1cHBvcnQgZm9yIHRoZSBJU0EgYW5kIE1DQSBTTUMgVG9rZW4gUmluZyBjYXJkcywKIAkgIHNwZWNpZmljYWxseSBTTUMgVG9rZW5DYXJkIEVsaXRlICg4MTE1VCkgYW5kIFNNQyBUb2tlbkNhcmQgRWxpdGUvQQpAQCAtMTgyLDUgKzE4Miw0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKIAkgIGNhbGxlZCBzbWN0ci4KIAotZW5kbWVudQotCitlbmRpZiAjIFRSCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKaW5kZXggMGJmYzJjOS4uMWFhYmM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwpAQCAtODIsNiArODIsNyBAQAogCXVuc2lnbmVkIGludCBwaHk7CQkvKiBJbmRleCBvZiBQSFkgZm9yIHRoaXMgaW50ZXJmYWNlICovCiAJdW5zaWduZWQgaW50IGlycV9udW07CiAJdW5zaWduZWQgaW50IGlkOworCXVuc2lnbmVkIGludCBwaHlfdHlwZTsKIAogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOy8qIFRpbWVyIHRoYXQgdHJpZ2dlcnMgdGhlIGNoZWNrIHBoeSBmdW5jdGlvbiAqLwogCXVuc2lnbmVkIGludCByeHRhaWw7CS8qIE5leHQgZW50cnkgaW4gcnhyaW5nIHRvIHJlYWQgKi8KQEAgLTEyNTYsMTEgKzEyNTcsMTEgQEAKIAlpZiAoaSA9PSAwKQogCQlwcmludGsoS0VSTl9FUlIgIiVzIGZ1bmN0aW9uIHRpbWUgb3V0IFxuIiwgX19GVU5DVElPTl9fKTsKIAotI2lmIChUU0kxMDhfUEhZX1RZUEUgPT0gUEhZX0JDTTU0WFgpCS8qIEJyb2FkY29tIEJDTTU0eHggUEhZICovCi0JdHNpMTA4X3dyaXRlX21paShkYXRhLCAweDA5LCAweDAzMDApOwotCXRzaTEwOF93cml0ZV9taWkoZGF0YSwgMHgxMCwgMHgxMDIwKTsKLQl0c2kxMDhfd3JpdGVfbWlpKGRhdGEsIDB4MWMsIDB4OGMwMCk7Ci0jZW5kaWYKKwlpZiAoZGF0YS0+cGh5X3R5cGUgPT0gVFNJMTA4X1BIWV9CQ001NFhYKSB7CisJCXRzaTEwOF93cml0ZV9taWkoZGF0YSwgMHgwOSwgMHgwMzAwKTsKKwkJdHNpMTA4X3dyaXRlX21paShkYXRhLCAweDEwLCAweDEwMjApOworCQl0c2kxMDhfd3JpdGVfbWlpKGRhdGEsIDB4MWMsIDB4OGMwMCk7CisJfQogCiAJdHNpMTA4X3dyaXRlX21paShkYXRhLAogCQkJIE1JSV9CTUNSLApAQCAtMTU4Nyw2ICsxNTg4LDcgQEAKIAlkYXRhLT5taWlfaWYuc3VwcG9ydHNfZ21paSA9IG1paV9jaGVja19nbWlpX3N1cHBvcnQoJmRhdGEtPm1paV9pZik7CiAKIAlkYXRhLT5waHkgPSBlaW5mby0+cGh5OworCWRhdGEtPnBoeV90eXBlID0gZWluZm8tPnBoeV90eXBlOwogCWRhdGEtPmlycV9udW0gPSBlaW5mby0+aXJxX251bTsKIAlkYXRhLT5pZCA9IHBkZXYtPmlkOwogCWRldi0+b3BlbiA9IHRzaTEwOF9vcGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5oIGIvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5oCmluZGV4IDc3YTc2OWQuLjVhNzdhZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguaAorKysgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmgKQEAgLTQzLDE1ICs0Myw2IEBACiAJaW5fYmUzMigoZGF0YS0+cGh5cmVncyArIChvZmZzZXQpKSkKIAogLyoKLSAqIFBIWSBDb25maWd1cmF0aW9uIE9wdGlvbnMKLSAqCi0gKiBOT1RFOiBFbmFibGUgc2V0IG9mIGRlZmluaXRpb25zIGNvcnJlc3BvbmRpbmcgdG8geW91ciBib2FyZCB0eXBlCi0gKi8KLSNkZWZpbmUgUEhZX01WODhFCTEJLyogTWFydmVsIDg4RXh4eHggUEhZICovCi0jZGVmaW5lIFBIWV9CQ001NFhYCTIJLyogQnJvYXJkY29tIEJDTTU0eHggUEhZICovCi0jZGVmaW5lIFRTSTEwOF9QSFlfVFlQRQlQSFlfTVY4OEUKLQotLyoKICAqIFRTSTEwOCBHSUdFIHBvcnQgcmVnaXN0ZXJzCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwppbmRleCA5YjA4YWZiLi5lYTg5Njc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAgICAgICAgICAgICBUaGlzIHdvdWxkIHR1cm4gb24gSU0gZm9yIGRldmljZXMgdGhhdCBpcyBub3QgY29udHJpYnV0aW5nCiAgICAgICAgICAgICB0byBiYWNrbG9nIGNvbmdlc3Rpb24gd2l0aCB1bm5lY2Vzc2FyeSBsYXRlbmN5LgogCi0gICAgICAgICAgICAgV2UgbW9uaXRvciB0aGUgdGhlIGRldmljZSBSWC1yaW5nIGFuZCBoYXZlOgorICAgICAgICAgICAgIFdlIG1vbml0b3IgdGhlIGRldmljZSBSWC1yaW5nIGFuZCBoYXZlOgogCiAgICAgICAgICAgICAgSFcgSW50ZXJydXB0IE1pdGlnYXRpb24gZWl0aGVyIE9OIG9yIE9GRi4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKaW5kZXggZmE0NDA3MC4uMzhmM2I5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCkBAIC0xMDIxLDcgKzEwMjEsNyBAQAogCQlucC0+dHhfcmluZ1tlbnRyeV0ubGVuZ3RoIHw9IERlc2NFbmRSaW5nOwogCiAJLyogTm93IGFjcXVpcmUgdGhlIGlycSBzcGlubG9jay4KLQkgKiBUaGUgZGlmZmljdWx0IHJhY2UgaXMgdGhlIHRoZSBvcmRlcmluZyBiZXR3ZWVuCisJICogVGhlIGRpZmZpY3VsdCByYWNlIGlzIHRoZSBvcmRlcmluZyBiZXR3ZWVuCiAJICogaW5jcmVhc2luZyBucC0+Y3VyX3R4IGFuZCBzZXR0aW5nIERlc2NPd25lZDoKIAkgKiAtIGlmIG5wLT5jdXJfdHggaXMgaW5jcmVhc2VkIGZpcnN0IHRoZSBpbnRlcnJ1cHQKIAkgKiAgIGhhbmRsZXIgY291bGQgY29uc2lkZXIgdGhlIHBhY2tldCBhcyB0cmFuc21pdHRlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwppbmRleCA5ODVhMTgxLi4yNDcwYjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwpAQCAtMTA0Myw3ICsxMDQzLDcgQEAKIAogCiAvKgotbGlua19zdGF0dXMoKSBjaGVja3MgdGhlIHRoZSBsaW5rcyBzdGF0dXMgYW5kIHdpbGwgcmV0dXJuIDAgZm9yIG5vIGxpbmssIDEwIGZvciAxMG1iaXQgbGluayBhbmQgMTAwIGZvci4uIGd1ZXNzIHdoYXQuCitsaW5rX3N0YXR1cygpIGNoZWNrcyB0aGUgbGlua3Mgc3RhdHVzIGFuZCB3aWxsIHJldHVybiAwIGZvciBubyBsaW5rLCAxMCBmb3IgMTBtYml0IGxpbmsgYW5kIDEwMCBmb3IuLiBndWVzcyB3aGF0LgogCiBNdXN0IGJlIGNhbGxlZCBpbiBsb2NrZWQgc3RhdGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCmluZGV4IGYyZGQ3NzYuLjE1YjJmYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYworKysgYi9kcml2ZXJzL25ldC90eXBob29uLmMKQEAgLTYzOSw3ICs2MzksNyBAQAogCiAJdHlwaG9vbl9pbmNfY21kX2luZGV4KCZyaW5nLT5sYXN0V3JpdGUsIG51bV9jbWQpOwogCi0JLyogIkkgZmVlbCBhIHByZXNlbmNlLi4uIGFub3RoZXIgd2FycmlvciBpcyBvbiB0aGUgdGhlIG1lc2EuIgorCS8qICJJIGZlZWwgYSBwcmVzZW5jZS4uLiBhbm90aGVyIHdhcnJpb3IgaXMgb24gdGhlIG1lc2EuIgogCSAqLwogCXdtYigpOwogCWlvd3JpdGUzMihyaW5nLT5sYXN0V3JpdGUsIHRwLT5pb2FkZHIgKyBUWVBIT09OX1JFR19DTURfUkVBRFkpOwpAQCAtNzQxLDE1ICs3NDEsNiBAQAogCXNwaW5fdW5sb2NrX2JoKCZ0cC0+c3RhdGVfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkCi10eXBob29uX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQotewotCXN0cnVjdCB0eXBob29uICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3Bpbl9sb2NrX2JoKCZ0cC0+c3RhdGVfbG9jayk7Ci0Jdmxhbl9ncm91cF9zZXRfZGV2aWNlKHRwLT52bGdycCwgdmlkLCBOVUxMKTsKLQlzcGluX3VubG9ja19iaCgmdHAtPnN0YXRlX2xvY2spOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQKIHR5cGhvb25fdHNvX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRyYW5zbWl0X3JpbmcgKnR4UmluZywKIAkJCXUzMiByaW5nX2RtYSkKQEAgLTI1NDIsNyArMjUzMyw3IEBACiAJZGV2LT5nZXRfc3RhdHMJCT0gdHlwaG9vbl9nZXRfc3RhdHM7CiAJZGV2LT5zZXRfbWFjX2FkZHJlc3MJPSB0eXBob29uX3NldF9tYWNfYWRkcmVzczsKIAlkZXYtPnZsYW5fcnhfcmVnaXN0ZXIJPSB0eXBob29uX3ZsYW5fcnhfcmVnaXN0ZXI7Ci0JZGV2LT52bGFuX3J4X2tpbGxfdmlkCT0gdHlwaG9vbl92bGFuX3J4X2tpbGxfdmlkOworCiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJnR5cGhvb25fZXRodG9vbF9vcHMpOwogCiAJLyogV2UgY2FuIGhhbmRsZSBzY2F0dGVyIGdhdGhlciwgdXAgdG8gMTYgZW50cmllcywgYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCAxNmI5YWNkLi4xOGI3MzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSBGcmVlc2NhbGUgU2VtaWNvbmR1dG9yLCBJbmMuIDIwMDYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1dG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQXV0aG9yOiBTaGxvbWkgR3JpZGlzaCA8Z3JpZGlzaEBmcmVlc2NhbGUuY29tPgogICoJICAgTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4KQEAgLTIzLDExICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CkBAIC0yOTMsNyArMjkwLDcgQEAKIAkJZWxzZSB7CiAJCQlpbml0X2VuZXRfb2Zmc2V0ID0KIAkJCSAgICBxZV9tdXJhbV9hbGxvYyh0aHJlYWRfc2l6ZSwgdGhyZWFkX2FsaWdubWVudCk7Ci0JCQlpZiAoSVNfTVVSQU1fRVJSKGluaXRfZW5ldF9vZmZzZXQpKSB7CisJCQlpZiAoSVNfRVJSX1ZBTFVFKGluaXRfZW5ldF9vZmZzZXQpKSB7CiAJCQkJdWdldGhfZXJyCiAJCSgiZmlsbF9pbml0X2VuZXRfZW50cmllczogQ2FuIG5vdCBhbGxvY2F0ZSBEUFJBTSBtZW1vcnkuIik7CiAJCQkJcWVfcHV0X3NudW0oKHU4KSBzbnVtKTsKQEAgLTI1OTQsNyArMjU5MSw3IEBACiAJCQl1Z2V0aC0+dHhfYmRfcmluZ19vZmZzZXRbal0gPQogCQkJICAgIHFlX211cmFtX2FsbG9jKGxlbmd0aCwKIAkJCQkJICAgVUNDX0dFVEhfVFhfQkRfUklOR19BTElHTk1FTlQpOwotCQkJaWYgKCFJU19NVVJBTV9FUlIodWdldGgtPnR4X2JkX3Jpbmdfb2Zmc2V0W2pdKSkKKwkJCWlmICghSVNfRVJSX1ZBTFVFKHVnZXRoLT50eF9iZF9yaW5nX29mZnNldFtqXSkpCiAJCQkJdWdldGgtPnBfdHhfYmRfcmluZ1tqXSA9CiAJCQkJICAgICh1OCAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KIAkJCQkJCQkgdHhfYmRfcmluZ19vZmZzZXRbal0pOwpAQCAtMjYyOSw3ICsyNjI2LDcgQEAKIAkJCXVnZXRoLT5yeF9iZF9yaW5nX29mZnNldFtqXSA9CiAJCQkgICAgcWVfbXVyYW1fYWxsb2MobGVuZ3RoLAogCQkJCQkgICBVQ0NfR0VUSF9SWF9CRF9SSU5HX0FMSUdOTUVOVCk7Ci0JCQlpZiAoIUlTX01VUkFNX0VSUih1Z2V0aC0+cnhfYmRfcmluZ19vZmZzZXRbal0pKQorCQkJaWYgKCFJU19FUlJfVkFMVUUodWdldGgtPnJ4X2JkX3Jpbmdfb2Zmc2V0W2pdKSkKIAkJCQl1Z2V0aC0+cF9yeF9iZF9yaW5nW2pdID0KIAkJCQkgICAgKHU4ICopIHFlX211cmFtX2FkZHIodWdldGgtPgogCQkJCQkJCSByeF9iZF9yaW5nX29mZnNldFtqXSk7CkBAIC0yNzEzLDcgKzI3MTAsNyBAQAogCXVnZXRoLT50eF9nbGJsX3ByYW1fb2Zmc2V0ID0KIAkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF90eF9nbG9iYWxfcHJhbSksCiAJCQkgICBVQ0NfR0VUSF9UWF9HTE9CQUxfUFJBTV9BTElHTk1FTlQpOwotCWlmIChJU19NVVJBTV9FUlIodWdldGgtPnR4X2dsYmxfcHJhbV9vZmZzZXQpKSB7CisJaWYgKElTX0VSUl9WQUxVRSh1Z2V0aC0+dHhfZ2xibF9wcmFtX29mZnNldCkpIHsKIAkJdWdldGhfZXJyCiAJCSAgICAoIiVzOiBDYW4gbm90IGFsbG9jYXRlIERQUkFNIG1lbW9yeSBmb3IgcF90eF9nbGJsX3ByYW0uIiwKIAkJICAgICBfX0ZVTkNUSU9OX18pOwpAQCAtMjczNSw3ICsyNzMyLDcgQEAKIAkJCSAgIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfdGhyZWFkX2RhdGFfdHgpICsKIAkJCSAgIDMyICogKG51bVRocmVhZHNUeE51bWVyaWNhbCA9PSAxKSwKIAkJCSAgIFVDQ19HRVRIX1RIUkVBRF9EQVRBX0FMSUdOTUVOVCk7Ci0JaWYgKElTX01VUkFNX0VSUih1Z2V0aC0+dGhyZWFkX2RhdF90eF9vZmZzZXQpKSB7CisJaWYgKElTX0VSUl9WQUxVRSh1Z2V0aC0+dGhyZWFkX2RhdF90eF9vZmZzZXQpKSB7CiAJCXVnZXRoX2VycgogCQkgICAgKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBEUFJBTSBtZW1vcnkgZm9yIHBfdGhyZWFkX2RhdGFfdHguIiwKIAkJICAgICBfX0ZVTkNUSU9OX18pOwpAQCAtMjc2Myw3ICsyNzYwLDcgQEAKIAkgICAgcWVfbXVyYW1fYWxsb2ModWdfaW5mby0+bnVtUXVldWVzVHggKgogCQkJICAgc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF9zZW5kX3F1ZXVlX3FkKSwKIAkJCSAgIFVDQ19HRVRIX1NFTkRfUVVFVUVfUVVFVUVfREVTQ1JJUFRPUl9BTElHTk1FTlQpOwotCWlmIChJU19NVVJBTV9FUlIodWdldGgtPnNlbmRfcV9tZW1fcmVnX29mZnNldCkpIHsKKwlpZiAoSVNfRVJSX1ZBTFVFKHVnZXRoLT5zZW5kX3FfbWVtX3JlZ19vZmZzZXQpKSB7CiAJCXVnZXRoX2VycgogCQkgICAgKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBEUFJBTSBtZW1vcnkgZm9yIHBfc2VuZF9xX21lbV9yZWcuIiwKIAkJICAgICBfX0ZVTkNUSU9OX18pOwpAQCAtMjgwNiw3ICsyODAzLDcgQEAKIAkJdWdldGgtPnNjaGVkdWxlcl9vZmZzZXQgPQogCQkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF9zY2hlZHVsZXIpLAogCQkJCSAgIFVDQ19HRVRIX1NDSEVEVUxFUl9BTElHTk1FTlQpOwotCQlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT5zY2hlZHVsZXJfb2Zmc2V0KSkgeworCQlpZiAoSVNfRVJSX1ZBTFVFKHVnZXRoLT5zY2hlZHVsZXJfb2Zmc2V0KSkgewogCQkJdWdldGhfZXJyCiAJCQkgKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBEUFJBTSBtZW1vcnkgZm9yIHBfc2NoZWR1bGVyLiIsCiAJCQkgICAgIF9fRlVOQ1RJT05fXyk7CkBAIC0yODU0LDcgKzI4NTEsNyBAQAogCQkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mCiAJCQkJICAgKHN0cnVjdCB1Y2NfZ2V0aF90eF9maXJtd2FyZV9zdGF0aXN0aWNzX3ByYW0pLAogCQkJCSAgIFVDQ19HRVRIX1RYX1NUQVRJU1RJQ1NfQUxJR05NRU5UKTsKLQkJaWYgKElTX01VUkFNX0VSUih1Z2V0aC0+dHhfZndfc3RhdGlzdGljc19wcmFtX29mZnNldCkpIHsKKwkJaWYgKElTX0VSUl9WQUxVRSh1Z2V0aC0+dHhfZndfc3RhdGlzdGljc19wcmFtX29mZnNldCkpIHsKIAkJCXVnZXRoX2VycgogCQkJICAgICgiJXM6IENhbiBub3QgYWxsb2NhdGUgRFBSQU0gbWVtb3J5IGZvciIKIAkJCQkiIHBfdHhfZndfc3RhdGlzdGljc19wcmFtLiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0yODkzLDcgKzI4OTAsNyBAQAogCXVnZXRoLT5yeF9nbGJsX3ByYW1fb2Zmc2V0ID0KIAkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF9yeF9nbG9iYWxfcHJhbSksCiAJCQkgICBVQ0NfR0VUSF9SWF9HTE9CQUxfUFJBTV9BTElHTk1FTlQpOwotCWlmIChJU19NVVJBTV9FUlIodWdldGgtPnJ4X2dsYmxfcHJhbV9vZmZzZXQpKSB7CisJaWYgKElTX0VSUl9WQUxVRSh1Z2V0aC0+cnhfZ2xibF9wcmFtX29mZnNldCkpIHsKIAkJdWdldGhfZXJyCiAJCSAgICAoIiVzOiBDYW4gbm90IGFsbG9jYXRlIERQUkFNIG1lbW9yeSBmb3IgcF9yeF9nbGJsX3ByYW0uIiwKIAkJICAgICBfX0ZVTkNUSU9OX18pOwpAQCAtMjkxNCw3ICsyOTExLDcgQEAKIAkgICAgcWVfbXVyYW1fYWxsb2MobnVtVGhyZWFkc1J4TnVtZXJpY2FsICoKIAkJCSAgIHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfdGhyZWFkX2RhdGFfcngpLAogCQkJICAgVUNDX0dFVEhfVEhSRUFEX0RBVEFfQUxJR05NRU5UKTsKLQlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT50aHJlYWRfZGF0X3J4X29mZnNldCkpIHsKKwlpZiAoSVNfRVJSX1ZBTFVFKHVnZXRoLT50aHJlYWRfZGF0X3J4X29mZnNldCkpIHsKIAkJdWdldGhfZXJyCiAJCSAgICAoIiVzOiBDYW4gbm90IGFsbG9jYXRlIERQUkFNIG1lbW9yeSBmb3IgcF90aHJlYWRfZGF0YV9yeC4iLAogCQkgICAgIF9fRlVOQ1RJT05fXyk7CkBAIC0yOTM3LDcgKzI5MzQsNyBAQAogCQkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mCiAJCQkJICAgKHN0cnVjdCB1Y2NfZ2V0aF9yeF9maXJtd2FyZV9zdGF0aXN0aWNzX3ByYW0pLAogCQkJCSAgIFVDQ19HRVRIX1JYX1NUQVRJU1RJQ1NfQUxJR05NRU5UKTsKLQkJaWYgKElTX01VUkFNX0VSUih1Z2V0aC0+cnhfZndfc3RhdGlzdGljc19wcmFtX29mZnNldCkpIHsKKwkJaWYgKElTX0VSUl9WQUxVRSh1Z2V0aC0+cnhfZndfc3RhdGlzdGljc19wcmFtX29mZnNldCkpIHsKIAkJCXVnZXRoX2VycgogCQkJCSgiJXM6IENhbiBub3QgYWxsb2NhdGUgRFBSQU0gbWVtb3J5IGZvciIKIAkJCQkiIHBfcnhfZndfc3RhdGlzdGljc19wcmFtLiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0yOTU5LDcgKzI5NTYsNyBAQAogCSAgICBxZV9tdXJhbV9hbGxvYyh1Z19pbmZvLT5udW1RdWV1ZXNSeCAqCiAJCQkgICBzaXplb2Yoc3RydWN0IHVjY19nZXRoX3J4X2ludGVycnVwdF9jb2FsZXNjaW5nX2VudHJ5KQogCQkJICAgKyA0LCBVQ0NfR0VUSF9SWF9JTlRFUlJVUFRfQ09BTEVTQ0lOR19BTElHTk1FTlQpOwotCWlmIChJU19NVVJBTV9FUlIodWdldGgtPnJ4X2lycV9jb2FsZXNjaW5nX3RibF9vZmZzZXQpKSB7CisJaWYgKElTX0VSUl9WQUxVRSh1Z2V0aC0+cnhfaXJxX2NvYWxlc2NpbmdfdGJsX29mZnNldCkpIHsKIAkJdWdldGhfZXJyCiAJCSAgICAoIiVzOiBDYW4gbm90IGFsbG9jYXRlIERQUkFNIG1lbW9yeSBmb3IiCiAJCQkiIHBfcnhfaXJxX2NvYWxlc2NpbmdfdGJsLiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0zMDI3LDcgKzMwMjQsNyBAQAogCQkJICAgKHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfcnhfYmRfcXVldWVzX2VudHJ5KSArCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCB1Y2NfZ2V0aF9yeF9wcmVmZXRjaGVkX2JkcykpLAogCQkJICAgVUNDX0dFVEhfUlhfQkRfUVVFVUVTX0FMSUdOTUVOVCk7Ci0JaWYgKElTX01VUkFNX0VSUih1Z2V0aC0+cnhfYmRfcXNfdGJsX29mZnNldCkpIHsKKwlpZiAoSVNfRVJSX1ZBTFVFKHVnZXRoLT5yeF9iZF9xc190Ymxfb2Zmc2V0KSkgewogCQl1Z2V0aF9lcnIKIAkJICAgICgiJXM6IENhbiBub3QgYWxsb2NhdGUgRFBSQU0gbWVtb3J5IGZvciBwX3J4X2JkX3FzX3RibC4iLAogCQkgICAgIF9fRlVOQ1RJT05fXyk7CkBAIC0zMTE2LDcgKzMxMTMsNyBAQAogCQl1Z2V0aC0+ZXhmX2dsYmxfcGFyYW1fb2Zmc2V0ID0KIAkJICAgIHFlX211cmFtX2FsbG9jKHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfZXhmX2dsb2JhbF9wcmFtKSwKIAkJVUNDX0dFVEhfUlhfRVhURU5ERURfRklMVEVSSU5HX0dMT0JBTF9QQVJBTUVURVJTX0FMSUdOTUVOVCk7Ci0JCWlmIChJU19NVVJBTV9FUlIodWdldGgtPmV4Zl9nbGJsX3BhcmFtX29mZnNldCkpIHsKKwkJaWYgKElTX0VSUl9WQUxVRSh1Z2V0aC0+ZXhmX2dsYmxfcGFyYW1fb2Zmc2V0KSkgewogCQkJdWdldGhfZXJyCiAJCQkJKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBEUFJBTSBtZW1vcnkgZm9yIgogCQkJCSIgcF9leGZfZ2xibF9wYXJhbS4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtMzI1OCw3ICszMjU1LDcgQEAKIAogCS8qIEFsbG9jYXRlIEluaXRFbmV0IGNvbW1hbmQgcGFyYW1ldGVyIHN0cnVjdHVyZSAqLwogCWluaXRfZW5ldF9wcmFtX29mZnNldCA9IHFlX211cmFtX2FsbG9jKHNpemVvZihzdHJ1Y3QgdWNjX2dldGhfaW5pdF9wcmFtKSwgNCk7Ci0JaWYgKElTX01VUkFNX0VSUihpbml0X2VuZXRfcHJhbV9vZmZzZXQpKSB7CisJaWYgKElTX0VSUl9WQUxVRShpbml0X2VuZXRfcHJhbV9vZmZzZXQpKSB7CiAJCXVnZXRoX2VycgogCQkgICAgKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBEUFJBTSBtZW1vcnkgZm9yIHBfaW5pdF9lbmV0X3ByYW0uIiwKIAkJICAgICBfX0ZVTkNUSU9OX18pOwpAQCAtMzczNywyMSArMzczNCwyMSBAQAogCiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdWNjX2dldGhfZXRodG9vbF9vcHMgPSB7IH07CiAKLXN0YXRpYyBwaHlfaW50ZXJmYWNlX3QgdG9fcGh5X2ludGVyZmFjZShjb25zdCBjaGFyICppbnRlcmZhY2VfdHlwZSkKK3N0YXRpYyBwaHlfaW50ZXJmYWNlX3QgdG9fcGh5X2ludGVyZmFjZShjb25zdCBjaGFyICpwaHlfY29ubmVjdGlvbl90eXBlKQogewotCWlmIChzdHJjYXNlY21wKGludGVyZmFjZV90eXBlLCAibWlpIikgPT0gMCkKKwlpZiAoc3RyY2FzZWNtcChwaHlfY29ubmVjdGlvbl90eXBlLCAibWlpIikgPT0gMCkKIAkJcmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7Ci0JaWYgKHN0cmNhc2VjbXAoaW50ZXJmYWNlX3R5cGUsICJnbWlpIikgPT0gMCkKKwlpZiAoc3RyY2FzZWNtcChwaHlfY29ubmVjdGlvbl90eXBlLCAiZ21paSIpID09IDApCiAJCXJldHVybiBQSFlfSU5URVJGQUNFX01PREVfR01JSTsKLQlpZiAoc3RyY2FzZWNtcChpbnRlcmZhY2VfdHlwZSwgInRiaSIpID09IDApCisJaWYgKHN0cmNhc2VjbXAocGh5X2Nvbm5lY3Rpb25fdHlwZSwgInRiaSIpID09IDApCiAJCXJldHVybiBQSFlfSU5URVJGQUNFX01PREVfVEJJOwotCWlmIChzdHJjYXNlY21wKGludGVyZmFjZV90eXBlLCAicm1paSIpID09IDApCisJaWYgKHN0cmNhc2VjbXAocGh5X2Nvbm5lY3Rpb25fdHlwZSwgInJtaWkiKSA9PSAwKQogCQlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUk7Ci0JaWYgKHN0cmNhc2VjbXAoaW50ZXJmYWNlX3R5cGUsICJyZ21paSIpID09IDApCisJaWYgKHN0cmNhc2VjbXAocGh5X2Nvbm5lY3Rpb25fdHlwZSwgInJnbWlpIikgPT0gMCkKIAkJcmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTsKLQlpZiAoc3RyY2FzZWNtcChpbnRlcmZhY2VfdHlwZSwgInJnbWlpLWlkIikgPT0gMCkKKwlpZiAoc3RyY2FzZWNtcChwaHlfY29ubmVjdGlvbl90eXBlLCAicmdtaWktaWQiKSA9PSAwKQogCQlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEOwotCWlmIChzdHJjYXNlY21wKGludGVyZmFjZV90eXBlLCAicnRiaSIpID09IDApCisJaWYgKHN0cmNhc2VjbXAocGh5X2Nvbm5lY3Rpb25fdHlwZSwgInJ0YmkiKSA9PSAwKQogCQlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX1JUQkk7CiAKIAlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKQEAgLTM3ODcsNyArMzc4NCw3IEBACiAKIAl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwogCi0JcHJvcCA9IGdldF9wcm9wZXJ0eShucCwgImRldmljZS1pZCIsIE5VTEwpOworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKIAl1Y2NfbnVtID0gKnByb3AgLSAxOwogCWlmICgodWNjX251bSA8IDApIHx8ICh1Y2NfbnVtID4gNykpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMzc5NSw5ICszNzkyLDkgQEAKIAl1Z19pbmZvID0gJnVnZXRoX2luZm9bdWNjX251bV07CiAJdWdfaW5mby0+dWZfaW5mby51Y2NfbnVtID0gdWNjX251bTsKIAotCXByb3AgPSBnZXRfcHJvcGVydHkobnAsICJyeC1jbG9jayIsIE5VTEwpOworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyeC1jbG9jayIsIE5VTEwpOwogCXVnX2luZm8tPnVmX2luZm8ucnhfY2xvY2sgPSAqcHJvcDsKLQlwcm9wID0gZ2V0X3Byb3BlcnR5KG5wLCAidHgtY2xvY2siLCBOVUxMKTsKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAidHgtY2xvY2siLCBOVUxMKTsKIAl1Z19pbmZvLT51Zl9pbmZvLnR4X2Nsb2NrID0gKnByb3A7CiAJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcyk7CiAJaWYgKGVycikKQEAgLTM4MDYsNDIgKzM4MDMsMzQgQEAKIAl1Z19pbmZvLT51Zl9pbmZvLnJlZ3MgPSByZXMuc3RhcnQ7CiAJdWdfaW5mby0+dWZfaW5mby5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CiAKLQlwaCA9IGdldF9wcm9wZXJ0eShucCwgInBoeS1oYW5kbGUiLCBOVUxMKTsKKwlwaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBoeS1oYW5kbGUiLCBOVUxMKTsKIAlwaHkgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGgpOwogCiAJaWYgKHBoeSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIHNldCB0aGUgUEhZIGFkZHJlc3MgKi8KLQlwcm9wID0gZ2V0X3Byb3BlcnR5KHBoeSwgInJlZyIsIE5VTEwpOworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkocGh5LCAicmVnIiwgTlVMTCk7CiAJaWYgKHByb3AgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCXVnX2luZm8tPnBoeV9hZGRyZXNzID0gKnByb3A7CiAKIAkvKiBnZXQgdGhlIHBoeSBpbnRlcmZhY2UgdHlwZSwgb3IgZGVmYXVsdCB0byBNSUkgKi8KLQlwcm9wID0gZ2V0X3Byb3BlcnR5KG5wLCAiaW50ZXJmYWNlLXR5cGUiLCBOVUxMKTsKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGh5LWNvbm5lY3Rpb24tdHlwZSIsIE5VTEwpOwogCWlmICghcHJvcCkgewogCQkvKiBoYW5kbGUgaW50ZXJmYWNlIHByb3BlcnR5IHByZXNlbnQgaW4gb2xkIHRyZWVzICovCi0JCXByb3AgPSBnZXRfcHJvcGVydHkocGh5LCAiaW50ZXJmYWNlIiwgTlVMTCk7Ci0JCWlmIChwcm9wICE9IE5VTEwpCisJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkocGh5LCAiaW50ZXJmYWNlIiwgTlVMTCk7CisJCWlmIChwcm9wICE9IE5VTEwpIHsKIAkJCXBoeV9pbnRlcmZhY2UgPSBlbmV0X3RvX3BoeV9pbnRlcmZhY2VbKnByb3BdOwotCQllbHNlCisJCQltYXhfc3BlZWQgPSBlbmV0X3RvX3NwZWVkWypwcm9wXTsKKwkJfSBlbHNlCiAJCQlwaHlfaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKIAl9IGVsc2UgewogCQlwaHlfaW50ZXJmYWNlID0gdG9fcGh5X2ludGVyZmFjZSgoY29uc3QgY2hhciAqKXByb3ApOwogCX0KIAotCS8qIGdldCBzcGVlZCwgb3IgZGVyaXZlIGZyb20gaW50ZXJmYWNlICovCi0JcHJvcCA9IGdldF9wcm9wZXJ0eShucCwgIm1heC1zcGVlZCIsIE5VTEwpOwotCWlmICghcHJvcCkgewotCQkvKiBoYW5kbGUgaW50ZXJmYWNlIHByb3BlcnR5IHByZXNlbnQgaW4gb2xkIHRyZWVzICovCi0JCXByb3AgPSBnZXRfcHJvcGVydHkocGh5LCAiaW50ZXJmYWNlIiwgTlVMTCk7Ci0JCWlmIChwcm9wICE9IE5VTEwpCi0JCQltYXhfc3BlZWQgPSBlbmV0X3RvX3NwZWVkWypwcm9wXTsKLQl9IGVsc2UgewotCQltYXhfc3BlZWQgPSAqcHJvcDsKLQl9Ci0JaWYgKCFtYXhfc3BlZWQpIHsKKwkvKiBnZXQgc3BlZWQsIG9yIGRlcml2ZSBmcm9tIFBIWSBpbnRlcmZhY2UgKi8KKwlpZiAobWF4X3NwZWVkID09IDApCiAJCXN3aXRjaCAocGh5X2ludGVyZmFjZSkgewogCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJOgogCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSToKQEAgLTM4NTQsOSArMzg0Myw5IEBACiAJCQltYXhfc3BlZWQgPSBTUEVFRF8xMDA7CiAJCQlicmVhazsKIAkJfQotCX0KIAogCWlmIChtYXhfc3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQkvKiBjb25maWd1cmUgbXVyYW0gRklGT3MgZm9yIGdpZ2FiaXQgb3BlcmF0aW9uICovCiAJCXVnX2luZm8tPnVmX2luZm8udXJmcyA9IFVDQ19HRVRIX1VSRlNfR0lHQV9JTklUOwogCQl1Z19pbmZvLT51Zl9pbmZvLnVyZmV0ID0gVUNDX0dFVEhfVVJGRVRfR0lHQV9JTklUOwogCQl1Z19pbmZvLT51Zl9pbmZvLnVyZnNldCA9IFVDQ19HRVRIX1VSRlNFVF9HSUdBX0lOSVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jCmluZGV4IDczYjVhNTMuLjdiY2I4MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX21paS5jCkBAIC0xLDEyICsxLDEzIEBACiAvKgogICogZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmMKICAqCi0gKiBHaWFuZmFyIEV0aGVybmV0IERyaXZlciAtLSBNSUlNIGJ1cyBpbXBsZW1lbnRhdGlvbgotICogUHJvdmlkZXMgQnVzIGludGVyZmFjZSBmb3IgTUlJTSByZWdzCisgKiBRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCisgKiBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUkgTWFuYWdlbWVudCByZWdzIGluIHRoZSBVQ0MgcmVnaXN0ZXIgc3BhY2UKICAqCi0gKiBBdXRob3I6IExpIFlhbmcKKyAqIENvcHlyaWdodCAoQykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBBdXRob3JzOiBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgorICoJICAgIEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE3Miw3ICsxNzMsNyBAQAogCXdoaWxlICgoY2hpbGQgPSBvZl9nZXRfbmV4dF9jaGlsZChucCwgY2hpbGQpKSAhPSBOVUxMKSB7CiAJCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjaGlsZCwgMCk7CiAJCWlmIChpcnEgIT0gTk9fSVJRKSB7Ci0JCQljb25zdCB1MzIgKmlkID0gZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7CisJCQljb25zdCB1MzIgKmlkID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7CiAJCQluZXdfYnVzLT5pcnFbKmlkXSA9IGlycTsKIAkJfQogCX0KQEAgLTIwMyw3ICsyMDQsNyBAQAogCQlpZiAoKHJlcy5zdGFydCA+PSB0ZW1wcmVzLnN0YXJ0KSAmJgogCQkgICAgKHJlcy5lbmQgPD0gdGVtcHJlcy5lbmQpKSB7CiAJCQkvKiBzZXQgdGhpcyBVQ0MgdG8gYmUgdGhlIE1JSSBtYXN0ZXIgKi8KLQkJCWNvbnN0IHUzMiAqaWQgPSBnZXRfcHJvcGVydHkodGVtcG5wLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCQljb25zdCB1MzIgKmlkID0gb2ZfZ2V0X3Byb3BlcnR5KHRlbXBucCwgImRldmljZS1pZCIsIE5VTEwpOwogCQkJaWYgKGlkID09IE5VTEwpCiAJCQkJZ290byBidXNfcmVnaXN0ZXJfZmFpbDsKIApAQCAtMjU5LDggKzI2MCw2IEBACiAJe30sCiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB1ZWNfbWRpb19tYXRjaCk7Ci0KIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHVlY19tZGlvX2RyaXZlciA9IHsKIAkubmFtZQk9IERSVl9OQU1FLAogCS5wcm9iZQk9IHVlY19tZGlvX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmggYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaAppbmRleCA5ODQzMGZlLi5kODM0MzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaAorKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaApAQCAtMSwxMyArMSwxMyBAQAogLyoKICAqIGRyaXZlcnMvbmV0L3VjY19nZXRoX21paS5oCiAgKgotICogR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCi0gKiBEcml2ZXIgZm9yIHRoZSBNRElPIGJ1cyBjb250cm9sbGVyIGluIHRoZSBHaWFuZmFyIHJlZ2lzdGVyIHNwYWNlCisgKiBRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCisgKiBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUkgTWFuYWdlbWVudCByZWdzIGluIHRoZSBVQ0MgcmVnaXN0ZXIgc3BhY2UKICAqCi0gKiBBdXRob3I6IEFuZHkgRmxlbWluZwotICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYQorICogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIEF1dGhvcnM6IExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CisgKgkgICAgS2ltIFBoaWxsaXBzIDxraW0ucGhpbGxpcHNAZnJlZXNjYWxlLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC91c2IvS2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbmV0L0tjb25maWcKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL25ldC9NYWtlZmlsZQpyZW5hbWUgdG8gZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvYXNpeC5jIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9uZXQvYXNpeC5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC91c2IvYXNpeC5jCmluZGV4IGQ1ZWY5N2IuLjZkOTVjYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwpAQCAtMTQ1OCw2ICsxNDU4LDEwIEBACiAJLy8gSU8tREFUQSBFVEctVVMyCiAJVVNCX0RFVklDRSAoMHgwNGJiLCAweDA5MzApLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmYXg4ODE3OF9pbmZvLAorfSwgeworCS8vIEJlbGtpbiBGNUQ1MDU1CisJVVNCX0RFVklDRSgweDA1MGQsIDB4NTA1NSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZheDg4MTc4X2luZm8sCiB9LAogCXsgfSwJCS8vIEVORAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9uZXQvY2F0Yy5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC91c2IvY2F0Yy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvY2RjX2V0aGVyLmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbmV0L2NkY19ldGhlci5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKaW5kZXggNWEyMWYwNi4uNjc1YWM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L2NkY19ldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYwpAQCAtOTEsNiArOTEsMjIgQEAKIAkJCQkiQ0RDIGRlc2NyaXB0b3JzIG9uIGNvbmZpZ1xuIik7CiAJfQogCisJLyogTWF5YmUgQ0RDIGRlc2NyaXB0b3JzIGFyZSBhZnRlciB0aGUgZW5kcG9pbnQ/ICBUaGlzIGJ1ZyBoYXMKKwkgKiBiZWVuIHNlZW4gb24gc29tZSAyV2lyZSBJbmMgUk5ESVMtaXNoIHByb2R1Y3RzLgorCSAqLworCWlmIChsZW4gPT0gMCkgeworCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQJKmhlcDsKKworCQloZXAgPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnQ7CisJCWlmIChoZXApIHsKKwkJCWJ1ZiA9IGhlcC0+ZXh0cmE7CisJCQlsZW4gPSBoZXAtPmV4dHJhbGVuOworCQl9CisJCWlmIChsZW4pCisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsCisJCQkJIkNEQyBkZXNjcmlwdG9ycyBvbiBlbmRwb2ludFxuIik7CisJfQorCiAJLyogdGhpcyBhc3N1bWVzIHRoYXQgaWYgdGhlcmUncyBhIG5vbi1STkRJUyB2ZW5kb3IgdmFyaWFudAogCSAqIG9mIGNkYy1hY20sIGl0J2xsIGZhaWwgUk5ESVMgcmVxdWVzdHMgY2xlYW5seS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9jZGNfc3Vic2V0LmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX3N1YnNldC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9uZXQvY2RjX3N1YnNldC5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC91c2IvY2RjX3N1YnNldC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvZG05NjAxLmMgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL25ldC9kbTk2MDEuYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvZ2w2MjBhLmMgYi9kcml2ZXJzL25ldC91c2IvZ2w2MjBhLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL25ldC9nbDYyMGEuYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvdXNiL2dsNjIwYS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQva2F3ZXRoLmMgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL25ldC9rYXdldGguYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQva2F3ZXRoZncuaCBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGhmdy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9uZXQva2F3ZXRoZncuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvdXNiL2thd2V0aGZ3LmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9tY3M3ODMwLmMgYi9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9uZXQvbWNzNzgzMC5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvbmV0MTA4MC5jIGIvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbmV0L25ldDEwODAuYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmggYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC91c2IvcGVnYXN1cy5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcGx1c2IuYyBiL2RyaXZlcnMvbmV0L3VzYi9wbHVzYi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9uZXQvcGx1c2IuYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvdXNiL3BsdXNiLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL25ldC9ybmRpc19ob3N0LmMKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKaW5kZXggOTgwZTRhYS4uY2Q5OTFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3JuZGlzX2hvc3QuYworKysgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCkBAIC01MTUsNiArNTE1LDcgQEAKIAkJZGV2X2VycigmaW50Zi0+ZGV2LAogCQkJImRldiBjYW4ndCB0YWtlICV1IGJ5dGUgcGFja2V0cyAobWF4ICV1KVxuIiwKIAkJCWRldi0+aGFyZF9tdHUsIHRtcCk7CisJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZmFpbF9hbmRfcmVsZWFzZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggZjljZDQyZC4uNWIxNmQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtMTI1MiwyMCArMTI1MiwyMyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBGSVhNRSB0aGVzZSBzdXNwZW5kL3Jlc3VtZSBtZXRob2RzIGFzc3VtZSBub24tQ0RDIHN0eWxlCi0gKiBkZXZpY2VzLCB3aXRoIG9ubHkgb25lIGludGVyZmFjZS4KKy8qCisgKiBzdXNwZW5kIHRoZSB3aG9sZSBkcml2ZXIgYXMgc29vbiBhcyB0aGUgZmlyc3QgaW50ZXJmYWNlIGlzIHN1c3BlbmRlZAorICogcmVzdW1lIG9ubHkgd2hlbiB0aGUgbGFzdCBpbnRlcmZhY2UgaXMgcmVzdW1lZAogICovCiAKIGludCB1c2JuZXRfc3VzcGVuZCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCi0JLyogYWNjZWxlcmF0ZSBlbXB0eWluZyBvZiB0aGUgcnggYW5kIHF1ZXVlcywgdG8gYXZvaWQKLQkgKiBoYXZpbmcgZXZlcnl0aGluZyBlcnJvciBvdXQuCi0JICovCi0JbmV0aWZfZGV2aWNlX2RldGFjaCAoZGV2LT5uZXQpOwotCSh2b2lkKSB1bmxpbmtfdXJicyAoZGV2LCAmZGV2LT5yeHEpOwotCSh2b2lkKSB1bmxpbmtfdXJicyAoZGV2LCAmZGV2LT50eHEpOworCWlmICghZGV2LT5zdXNwZW5kX2NvdW50KyspIHsKKwkJLyogYWNjZWxlcmF0ZSBlbXB0eWluZyBvZiB0aGUgcnggYW5kIHF1ZXVlcywgdG8gYXZvaWQKKwkJICogaGF2aW5nIGV2ZXJ5dGhpbmcgZXJyb3Igb3V0LgorCQkgKi8KKwkJbmV0aWZfZGV2aWNlX2RldGFjaCAoZGV2LT5uZXQpOworCQkodm9pZCkgdW5saW5rX3VyYnMgKGRldiwgJmRldi0+cnhxKTsKKwkJKHZvaWQpIHVubGlua191cmJzIChkZXYsICZkZXYtPnR4cSk7CisJfQogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3N1c3BlbmQpOwpAQCAtMTI3NCw4ICsxMjc3LDEwIEBACiB7CiAJc3RydWN0IHVzYm5ldAkJKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLQluZXRpZl9kZXZpY2VfYXR0YWNoIChkZXYtPm5ldCk7Ci0JdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworCWlmICghLS1kZXYtPnN1c3BlbmRfY291bnQpIHsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaCAoZGV2LT5uZXQpOworCQl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CisJfQogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3Jlc3VtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmggYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbmV0L3VzYm5ldC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC91c2IvdXNibmV0LmgKaW5kZXggY2JiNTNlMC4uYTNmOGI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5oCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuaApAQCAtMzIsNiArMzIsNyBAQAogCWNvbnN0IGNoYXIJCSpkcml2ZXJfbmFtZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdAkqd2FpdDsKIAlzdHJ1Y3QgbXV0ZXgJCXBoeV9tdXRleDsKKwl1bnNpZ25lZCBjaGFyCQlzdXNwZW5kX2NvdW50OwogCiAJLyogaS9vIGluZm86IHBpcGVzIGV0YyAqLwogCXVuc2lnbmVkCQlpbiwgb3V0OwpAQCAtMTI5LDcgKzEzMCw3IEBACiAKIAogLyogRHJpdmVycyB0aGF0IHJldXNlIHNvbWUgb2YgdGhlIHN0YW5kYXJkIFVTQiBDREMgaW5mcmFzdHJ1Y3R1cmUKLSAqIChub3RhYmx5LCB1c2luZyBtdWx0aXBsZSBpbnRlcmZhY2VzIGFjY29yZGluZyB0byB0aGUgdGhlIENEQworICogKG5vdGFibHksIHVzaW5nIG11bHRpcGxlIGludGVyZmFjZXMgYWNjb3JkaW5nIHRvIHRoZSBDREMKICAqIHVuaW9uIGRlc2NyaXB0b3IpIGdldCBzb21lIGhlbHBlciBjb2RlLgogICovCiBzdHJ1Y3QgY2RjX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC96YXVydXMuYyBiL2RyaXZlcnMvbmV0L3VzYi96YXVydXMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbmV0L3phdXJ1cy5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC91c2IvemF1cnVzLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKaW5kZXggODg5N2Y1My4uNGZjODY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKQEAgLTIsMTAgKzIsNyBAQAogIyB3YW4gZGV2aWNlcyBjb25maWd1cmF0aW9uCiAjCiAKLW1lbnUgIldhbiBpbnRlcmZhY2VzIgotCWRlcGVuZHMgb24gTkVUREVWSUNFUwotCi1jb25maWcgV0FOCittZW51Y29uZmlnIFdBTgogCWJvb2wgIldhbiBpbnRlcmZhY2VzIHN1cHBvcnQiCiAJLS0taGVscC0tLQogCSAgV2lkZSBBcmVhIE5ldHdvcmtzIChXQU5zKSwgc3VjaCBhcyBYLjI1LCBGcmFtZSBSZWxheSBhbmQgbGVhc2VkCkBAIC0yMywxMCArMjAsMTIgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAoraWYgV0FOCisKICMgVGhlcmUgaXMgbm8gd2F5IHRvIGRldGVjdCBhIGNvbXRyb2wgc3YxMSAtIGZvcmNlIGl0IG1vZHVsYXIgZm9yIG5vdy4KIGNvbmZpZyBIT1NURVNTX1NWMTEKIAl0cmlzdGF0ZSAiQ29tdHJvbCBIb3N0ZXNzIFNWLTExIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBXQU4gJiYgSVNBICYmIG0gJiYgSVNBX0RNQV9BUEkgJiYgSU5FVAorCWRlcGVuZHMgb24gSVNBICYmIG0gJiYgSVNBX0RNQV9BUEkgJiYgSU5FVAogCWhlbHAKIAkgIERyaXZlciBmb3IgQ29tdHJvbCBIb3N0ZXNzIFNWLTExIG5ldHdvcmsgY2FyZCB3aGljaAogCSAgb3BlcmF0ZXMgb24gbG93IHNwZWVkIHN5bmNocm9ub3VzIHNlcmlhbCBsaW5rcyBhdCB1cCB0bwpAQCAtMzgsNyArMzcsNyBAQAogIyBUaGUgQ09TQS9TUlAgZHJpdmVyIGhhcyBub3QgYmVlbiB0ZXN0ZWQgYXMgbm9uLW1vZHVsYXIgeWV0LgogY29uZmlnIENPU0EKIAl0cmlzdGF0ZSAiQ09TQS9TUlAgc3luYyBzZXJpYWwgYm9hcmRzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBXQU4gJiYgSVNBICYmIG0gJiYgSVNBX0RNQV9BUEkKKwlkZXBlbmRzIG9uIElTQSAmJiBtICYmIElTQV9ETUFfQVBJCiAJLS0taGVscC0tLQogCSAgRHJpdmVyIGZvciBDT1NBIGFuZCBTUlAgc3luY2hyb25vdXMgc2VyaWFsIGJvYXJkcy4KIApAQCAtNjIsNyArNjEsNyBAQAogIwogY29uZmlnIExBTk1FRElBCiAJdHJpc3RhdGUgIkxhbk1lZGlhIENvcnAuIFNTSS9WLjM1LCBUMS9FMSwgSFNTSSwgVDMgYm9hcmRzIgotCWRlcGVuZHMgb24gV0FOICYmIFBDSQorCWRlcGVuZHMgb24gUENJCiAJLS0taGVscC0tLQogCSAgRHJpdmVyIGZvciB0aGUgZm9sbG93aW5nIExhbiBNZWRpYSBmYW1pbHkgb2Ygc2VyaWFsIGJvYXJkczoKIApAQCAtODksNyArODgsNyBAQAogIyBUaGVyZSBpcyBubyB3YXkgdG8gZGV0ZWN0IGEgU2VhbGV2ZWwgYm9hcmQuIEZvcmNlIGl0IG1vZHVsYXIKIGNvbmZpZyBTRUFMRVZFTF80MDIxCiAJdHJpc3RhdGUgIlNlYWxldmVsIFN5c3RlbXMgNDAyMSBzdXBwb3J0IgotCWRlcGVuZHMgb24gV0FOICYmIElTQSAmJiBtICYmIElTQV9ETUFfQVBJICYmIElORVQKKwlkZXBlbmRzIG9uIElTQSAmJiBtICYmIElTQV9ETUFfQVBJICYmIElORVQKIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgU2VhbGV2ZWwgU3lzdGVtcyBBQ0IgNTYgc2VyaWFsIEkvTyBhZGFwdGVyLgogCkBAIC05OSw3ICs5OCw2IEBACiAjIEdlbmVyaWMgSERMQwogY29uZmlnIEhETEMKIAl0cmlzdGF0ZSAiR2VuZXJpYyBIRExDIGxheWVyIgotCWRlcGVuZHMgb24gV0FOCiAJaGVscAogCSAgU2F5IFkgdG8gdGhpcyBvcHRpb24gaWYgeW91ciBMaW51eCBib3ggY29udGFpbnMgYSBXQU4gKFdpZGUgQXJlYQogCSAgTmV0d29yaykgY2FyZCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgYW5kIHlvdSBhcmUgcGxhbm5pbmcgdG8KQEAgLTE2Nyw3ICsxNjUsNyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29tbWVudCAiWC4yNS9MQVBCIHN1cHBvcnQgaXMgZGlzYWJsZWQiCi0JZGVwZW5kcyBvbiBXQU4gJiYgSERMQyAmJiAoTEFQQiE9bSB8fCBIRExDIT1tKSAmJiBMQVBCIT15CisJZGVwZW5kcyBvbiBIRExDICYmIChMQVBCIT1tIHx8IEhETEMhPW0pICYmIExBUEIhPXkKIAogY29uZmlnIFBDSTIwMFNZTgogCXRyaXN0YXRlICJHb3JhbW8gUENJMjAwU1lOIHN1cHBvcnQiCkBAIC0yMzAsMTAgKzIyOCwxMCBAQAogCSAgTXVsdGlsaW5rIFBQUCBvdmVyIHRoZSBQQzMwMCBzeW5jaHJvbm91cyBjb21tdW5pY2F0aW9uIGJvYXJkcy4KIAogY29tbWVudCAiQ3ljbGFkZXMtUEMzMDAgTUxQUFAgc3VwcG9ydCBpcyBkaXNhYmxlZC4iCi0JZGVwZW5kcyBvbiBXQU4gJiYgSERMQyAmJiBQQzMwMCAmJiAoUFBQPW4gfHwgIVBQUF9NVUxUSUxJTksgfHwgUFBQX1NZTkNfVFRZPW4gfHwgIUhETENfUFBQKQorCWRlcGVuZHMgb24gSERMQyAmJiBQQzMwMCAmJiAoUFBQPW4gfHwgIVBQUF9NVUxUSUxJTksgfHwgUFBQX1NZTkNfVFRZPW4gfHwgIUhETENfUFBQKQogCiBjb21tZW50ICJSZWZlciB0byB0aGUgZmlsZSBSRUFETUUubWxwcHAsIHByb3ZpZGVkIGJ5IFBDMzAwIHBhY2thZ2UuIgotCWRlcGVuZHMgb24gV0FOICYmIEhETEMgJiYgUEMzMDAgJiYgKFBQUD1uIHx8ICFQUFBfTVVMVElMSU5LIHx8IFBQUF9TWU5DX1RUWT1uIHx8ICFIRExDX1BQUCkKKwlkZXBlbmRzIG9uIEhETEMgJiYgUEMzMDAgJiYgKFBQUD1uIHx8ICFQUFBfTVVMVElMSU5LIHx8IFBQUF9TWU5DX1RUWT1uIHx8ICFIRExDX1BQUCkKIAogY29uZmlnIFBDMzAwVE9PCiAJdHJpc3RhdGUgIkN5Y2xhZGVzIFBDMzAwIFJTVi9YMjEgYWx0ZXJuYXRpdmUgc3VwcG9ydCIKQEAgLTMzOCw3ICszMzYsNiBAQAogCiBjb25maWcgRExDSQogCXRyaXN0YXRlICJGcmFtZSBSZWxheSBETENJIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBXQU4KIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0aGUgRnJhbWUgUmVsYXkgcHJvdG9jb2wuCiAKQEAgLTM4NSw3ICszODIsNyBAQAogIyBXYW4gcm91dGVyIGNvcmUuCiBjb25maWcgV0FOX1JPVVRFUl9EUklWRVJTCiAJdHJpc3RhdGUgIldBTiByb3V0ZXIgZHJpdmVycyIKLQlkZXBlbmRzIG9uIFdBTiAmJiBXQU5fUk9VVEVSCisJZGVwZW5kcyBvbiBXQU5fUk9VVEVSCiAJLS0taGVscC0tLQogCSAgQ29ubmVjdCBMQU4gdG8gV0FOIHZpYSBMaW51eCBib3guCiAKQEAgLTQ0MCw3ICs0MzcsNyBAQAogIyBYLjI1IG5ldHdvcmsgZHJpdmVycwogY29uZmlnIExBUEJFVEhFUgogCXRyaXN0YXRlICJMQVBCIG92ZXIgRXRoZXJuZXQgZHJpdmVyIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gV0FOICYmIExBUEIgJiYgWDI1CisJZGVwZW5kcyBvbiBMQVBCICYmIFgyNQogCS0tLWhlbHAtLS0KIAkgIERyaXZlciBmb3IgYSBwc2V1ZG8gZGV2aWNlICh0eXBpY2FsbHkgY2FsbGVkIC9kZXYvbGFwYjApIHdoaWNoIGFsbG93cwogCSAgeW91IHRvIG9wZW4gYW4gTEFQQiBwb2ludC10by1wb2ludCBjb25uZWN0aW9uIHRvIHNvbWUgb3RoZXIgY29tcHV0ZXIKQEAgLTQ1Niw3ICs0NTMsNyBAQAogCiBjb25maWcgWDI1X0FTWQogCXRyaXN0YXRlICJYLjI1IGFzeW5jIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFdBTiAmJiBMQVBCICYmIFgyNQorCWRlcGVuZHMgb24gTEFQQiAmJiBYMjUKIAktLS1oZWxwLS0tCiAJICBTZW5kIGFuZCByZWNlaXZlIFguMjUgZnJhbWVzIG92ZXIgcmVndWxhciBhc3luY2hyb25vdXMgc2VyaWFsCiAJICBsaW5lcyBzdWNoIGFzIHRlbGVwaG9uZSBsaW5lcyBlcXVpcHBlZCB3aXRoIG9yZGluYXJ5IG1vZGVtcy4KQEAgLTQ3MSw3ICs0NjgsNyBAQAogCiBjb25maWcgU0JOSQogCXRyaXN0YXRlICJHcmFuY2ggU0JOSTEyIExlYXNlZCBMaW5lIGFkYXB0ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFdBTiAmJiBYODYKKwlkZXBlbmRzIG9uIFg4NgogCS0tLWhlbHAtLS0KIAkgIERyaXZlciBmb3IgSVNBIFNCTkkxMi14eCBjYXJkcyB3aGljaCBhcmUgbG93IGNvc3QgYWx0ZXJuYXRpdmVzIHRvCiAJICBsZWFzZWQgbGluZSBtb2RlbXMuCkBAIC00OTcsNSArNDk0LDQgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotZW5kbWVudQotCitlbmRpZiAjIFdBTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKaW5kZXggMjM0NjQ3My4uOWVmNDljZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYworKysgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCkBAIC05MCw3ICs5MCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjdW5kZWYgQ09TQV9TTE9XX0lPCS8qIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IDAxODQ2MTQuLmUzZjViYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMyw2ICszLDcgQEAKICMKIAogbWVudSAiV2lyZWxlc3MgTEFOIgorCWRlcGVuZHMgb24gIVMzOTAKIAogY29uZmlnIFdMQU5fUFJFODAyMTEKIAlib29sICJXaXJlbGVzcyBMQU4gKHByZS04MDIuMTEpIgpAQCAtMjY3LDcgKzI2OCw3IEBACiAKIGNvbmZpZyBMSUJFUlRBU19VU0IKIAl0cmlzdGF0ZSAiTWFydmVsbCBMaWJlcnRhcyA4Mzg4IDgwMi4xMWEvYi9nIGNhcmRzIgotCWRlcGVuZHMgb24gTkVUX1JBRElPICYmIFVTQgorCWRlcGVuZHMgb24gVVNCICYmIFdMQU5fODAyMTEKIAlzZWxlY3QgRldfTE9BREVSCiAJLS0taGVscC0tLQogCSAgQSBkcml2ZXIgZm9yIE1hcnZlbGwgTGliZXJ0YXMgODM4OCBVU0IgZGV2aWNlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCBmMjFiYmFmLi4yZDNhMTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlycG9ydC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlycG9ydC5jCmluZGV4IDM4ZmFjM2IuLjdkNWI4YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpcnBvcnQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJwb3J0LmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCS8qIFZpdGFsbHkgaW1wb3J0YW50LiAgSWYgd2UgZG9uJ3QgZG8gdGhpcyBpdCBzZWVtcyB3ZSBnZXQgYW4KIAkgKiBpbnRlcnJ1cHQgc29tZXdoZXJlIGR1cmluZyB0aGUgcG93ZXIgY3ljbGUsIHNpbmNlCiAJICogaHdfdW5hdmFpbGFibGUgaXMgYWxyZWFkeSBzZXQgaXQgZG9lc24ndCBnZXQgQUNLZWQsIHdlIGdldAotCSAqIGludG8gYW4gaW50ZXJydXB0IGxvb3AgYW5kIHRoZSB0aGUgUE1VIGRlY2lkZXMgdG8gdHVybiB1cworCSAqIGludG8gYW4gaW50ZXJydXB0IGxvb3AgYW5kIHRoZSBQTVUgZGVjaWRlcyB0byB0dXJuIHVzCiAJICogb2ZmLiAqLwogCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaAppbmRleCBmODQ4M2MxLi4xMGUwN2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaApAQCAtNjU4LDEyICs2NTgsNiBAQAogCiAjZGVmaW5lIEJDTTQzeHhfTUFYXzgwMjExX0NPUkVTCQkyCiAKLSNpZmRlZiBDT05GSUdfQkNNOTQ3WFgKLSNkZWZpbmUgY29yZV9vZmZzZXQoYmNtKSAoYmNtKS0+Y3VycmVudF9jb3JlX29mZnNldAotI2Vsc2UKLSNkZWZpbmUgY29yZV9vZmZzZXQoYmNtKSAwCi0jZW5kaWYKLQogLyogR2VuZXJpYyBpbmZvcm1hdGlvbiBhYm91dCBhIGNvcmUuICovCiBzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyB7CiAJdTggYXZhaWxhYmxlOjEsCkBAIC03ODksMTAgKzc4Myw2IEBACiAKIAkvKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBjb3JlLiAqLwogCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvICpjdXJyZW50X2NvcmU7Ci0jaWZkZWYgQ09ORklHX0JDTTk0N1hYCi0JLyoqIGN1cnJlbnQgY29yZSBtZW1vcnkgb2Zmc2V0ICovCi0JdTMyIGN1cnJlbnRfY29yZV9vZmZzZXQ7Ci0jZW5kaWYKIAlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyAqYWN0aXZlXzgwMjExX2NvcmU7CiAJLyogY29yZWluZm8gc3RydWN0cyBmb3IgYWxsIHBvc3NpYmxlIGNvcmVzIGZvbGxvdy4KIAkgKiBOb3RlIHRoYXQgYSBjb3JlIG1pZ2h0IG5vdCBleGlzdC4KQEAgLTk0MywyNSArOTMzLDI1IEBACiBzdGF0aWMgaW5saW5lCiB1MTYgYmNtNDN4eF9yZWFkMTYoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgb2Zmc2V0KQogewotCXJldHVybiBpb3JlYWQxNihiY20tPm1taW9fYWRkciArIGNvcmVfb2Zmc2V0KGJjbSkgKyBvZmZzZXQpOworCXJldHVybiBpb3JlYWQxNihiY20tPm1taW9fYWRkciArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUKIHZvaWQgYmNtNDN4eF93cml0ZTE2KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCwgdTE2IHZhbHVlKQogewotCWlvd3JpdGUxNih2YWx1ZSwgYmNtLT5tbWlvX2FkZHIgKyBjb3JlX29mZnNldChiY20pICsgb2Zmc2V0KTsKKwlpb3dyaXRlMTYodmFsdWUsIGJjbS0+bW1pb19hZGRyICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZQogdTMyIGJjbTQzeHhfcmVhZDMyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTE2IG9mZnNldCkKIHsKLQlyZXR1cm4gaW9yZWFkMzIoYmNtLT5tbWlvX2FkZHIgKyBjb3JlX29mZnNldChiY20pICsgb2Zmc2V0KTsKKwlyZXR1cm4gaW9yZWFkMzIoYmNtLT5tbWlvX2FkZHIgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lCiB2b2lkIGJjbTQzeHhfd3JpdGUzMihzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSkKIHsKLQlpb3dyaXRlMzIodmFsdWUsIGJjbS0+bW1pb19hZGRyICsgY29yZV9vZmZzZXQoYmNtKSArIG9mZnNldCk7CisJaW93cml0ZTMyKHZhbHVlLCBiY20tPm1taW9fYWRkciArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuYwppbmRleCBlM2QyZTYxLi4xZjc3MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5jCkBAIC02NjAsMTAgKzY2MCw2IEBACiAJcmluZy0+cm91dGluZyA9IEJDTTQzeHhfRE1BMzJfQ0xJRU5UVFJBTlM7CiAJaWYgKGRtYTY0KQogCQlyaW5nLT5yb3V0aW5nID0gQkNNNDN4eF9ETUE2NF9DTElFTlRUUkFOUzsKLSNpZmRlZiBDT05GSUdfQkNNOTQ3WFgKLQlpZiAoYmNtLT5wY2lfZGV2LT5idXMtPm51bWJlciA9PSAwKQotCQlyaW5nLT5yb3V0aW5nID0gZG1hNjQgPyBCQ000M3h4X0RNQTY0X05PVFJBTlMgOiBCQ000M3h4X0RNQTMyX05PVFJBTlM7Ci0jZW5kaWYKIAogCXJpbmctPmJjbSA9IGJjbTsKIAlyaW5nLT5ucl9zbG90cyA9IG5yX3Nsb3RzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKaW5kZXggNWU5NmJjYS4uZWY2YjI1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCkBAIC02MSwxMCArNjEsNiBAQAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBCdWVzY2giKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2lmZGVmIENPTkZJR19CQ005NDdYWAotZXh0ZXJuIGNoYXIgKm52cmFtX2dldChjaGFyICpuYW1lKTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfQkNNNDNYWF9ETUEpICYmIGRlZmluZWQoQ09ORklHX0JDTTQzWFhfUElPKQogc3RhdGljIGludCBtb2RwYXJhbV9waW87CiBtb2R1bGVfcGFyYW1fbmFtZWQocGlvLCBtb2RwYXJhbV9waW8sIGludCwgMDQ0NCk7CkBAIC0xNDIsMTAgKzEzOCw2IEBACiAJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAkvKiBCcm9hZGNvbSA0M1hHIDgwMi4xMWIvZyAqLwogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzI1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0jaWZkZWYgQ09ORklHX0JDTTk0N1hYCi0JLyogU0IgYnVzIG9uIEJDTTk0N3h4ICovCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDA4MDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKLSNlbmRpZgogCXsgMCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiY200M3h4X3BjaV90YmwpOwpAQCAtNzg2LDkgKzc3OCw2IEBACiB7CiAJdTE2IHZhbHVlOwogCXUxNiAqc3Byb207Ci0jaWZkZWYgQ09ORklHX0JDTTk0N1hYCi0JY2hhciAqYzsKLSNlbmRpZgogCiAJc3Byb20gPSBremFsbG9jKEJDTTQzeHhfU1BST01fU0laRSAqIHNpemVvZih1MTYpLAogCQkJR0ZQX0tFUk5FTCk7CkBAIC03OTYsMjggKzc4NSw3IEBACiAJCXByaW50ayhLRVJOX0VSUiBQRlggInNwcm9tX2V4dHJhY3QgT09NXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotI2lmZGVmIENPTkZJR19CQ005NDdYWAotCXNwcm9tW0JDTTQzeHhfU1BST01fQk9BUkRGTEFHUzJdID0gYXRvaShudnJhbV9nZXQoImJvYXJkZmxhZ3MyIikpOwotCXNwcm9tW0JDTTQzeHhfU1BST01fQk9BUkRGTEFHU10gPSBhdG9pKG52cmFtX2dldCgiYm9hcmRmbGFncyIpKTsKLQotCWlmICgoYyA9IG52cmFtX2dldCgiaWwwbWFjYWRkciIpKSAhPSBOVUxMKQotCQllX2F0b24oYywgKGNoYXIgKikgJihzcHJvbVtCQ000M3h4X1NQUk9NX0lMME1BQ0FERFJdKSk7Ci0KLQlpZiAoKGMgPSBudnJhbV9nZXQoImV0MW1hY2FkZHIiKSkgIT0gTlVMTCkKLQkJZV9hdG9uKGMsIChjaGFyICopICYoc3Byb21bQkNNNDN4eF9TUFJPTV9FVDFNQUNBRERSXSkpOwotCi0Jc3Byb21bQkNNNDN4eF9TUFJPTV9QQTBCMF0gPSBhdG9pKG52cmFtX2dldCgicGEwYjAiKSk7Ci0Jc3Byb21bQkNNNDN4eF9TUFJPTV9QQTBCMV0gPSBhdG9pKG52cmFtX2dldCgicGEwYjEiKSk7Ci0Jc3Byb21bQkNNNDN4eF9TUFJPTV9QQTBCMl0gPSBhdG9pKG52cmFtX2dldCgicGEwYjIiKSk7Ci0KLQlzcHJvbVtCQ000M3h4X1NQUk9NX1BBMUIwXSA9IGF0b2kobnZyYW1fZ2V0KCJwYTFiMCIpKTsKLQlzcHJvbVtCQ000M3h4X1NQUk9NX1BBMUIxXSA9IGF0b2kobnZyYW1fZ2V0KCJwYTFiMSIpKTsKLQlzcHJvbVtCQ000M3h4X1NQUk9NX1BBMUIyXSA9IGF0b2kobnZyYW1fZ2V0KCJwYTFiMiIpKTsKLQotCXNwcm9tW0JDTTQzeHhfU1BST01fQk9BUkRSRVZdID0gYXRvaShudnJhbV9nZXQoImJvYXJkcmV2IikpOwotI2Vsc2UKIAliY200M3h4X3Nwcm9tX3JlYWQoYmNtLCBzcHJvbSk7Ci0jZW5kaWYKIAogCS8qIGJvYXJkZmxhZ3MyICovCiAJdmFsdWUgPSBzcHJvbVtCQ000M3h4X1NQUk9NX0JPQVJERkxBR1MyXTsKQEAgLTEyMjUsMTIgKzExOTMsNiBAQAogCQkJZ290byBlcnJvcjsKIAkJdWRlbGF5KDEwKTsKIAl9Ci0jaWZkZWYgQ09ORklHX0JDTTk0N1hYCi0JaWYgKGJjbS0+cGNpX2Rldi0+YnVzLT5udW1iZXIgPT0gMCkKLQkJYmNtLT5jdXJyZW50X2NvcmVfb2Zmc2V0ID0gMHgxMDAwICogY29yZTsKLQllbHNlCi0JCWJjbS0+Y3VycmVudF9jb3JlX29mZnNldCA9IDA7Ci0jZW5kaWYKIAogCXJldHVybiAwOwogZXJyb3I6CkBAIC0xMzg3LDE5ICsxMzQ5LDYgQEAKIAogCWlmICgoYmNtNDN4eF9jb3JlX2VuYWJsZWQoYmNtKSkgJiYKIAkgICAgIWJjbTQzeHhfdXNpbmdfcGlvKGJjbSkpIHsKLS8vRklYTUU6IERvIHdlIF9yZWFsbHlfIHdhbnQgI2lmbmRlZiBDT05GSUdfQkNNOTQ3WFggaGVyZT8KLSNpZiAwCi0jaWZuZGVmIENPTkZJR19CQ005NDdYWAotCQkvKiByZXNldCBhbGwgdXNlZCBETUEgY29udHJvbGxlcnMuICovCi0JCWJjbTQzeHhfZG1hY29udHJvbGxlcl90eF9yZXNldChiY20sIEJDTTQzeHhfTU1JT19ETUExX0JBU0UpOwotCQliY200M3h4X2RtYWNvbnRyb2xsZXJfdHhfcmVzZXQoYmNtLCBCQ000M3h4X01NSU9fRE1BMl9CQVNFKTsKLQkJYmNtNDN4eF9kbWFjb250cm9sbGVyX3R4X3Jlc2V0KGJjbSwgQkNNNDN4eF9NTUlPX0RNQTNfQkFTRSk7Ci0JCWJjbTQzeHhfZG1hY29udHJvbGxlcl90eF9yZXNldChiY20sIEJDTTQzeHhfTU1JT19ETUE0X0JBU0UpOwotCQliY200M3h4X2RtYWNvbnRyb2xsZXJfcnhfcmVzZXQoYmNtLCBCQ000M3h4X01NSU9fRE1BMV9CQVNFKTsKLQkJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA1KQotCQkJYmNtNDN4eF9kbWFjb250cm9sbGVyX3J4X3Jlc2V0KGJjbSwgQkNNNDN4eF9NTUlPX0RNQTRfQkFTRSk7Ci0jZW5kaWYKLSNlbmRpZgogCX0KIAlpZiAoYmNtNDN4eF9zdGF0dXMoYmNtKSA9PSBCQ000M3h4X1NUQVRfU0hVVFRJTkdET1dOKSB7CiAJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQsCkBAIC0yMTQwLDMyICsyMDg5LDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmZGVmIENPTkZJR19CQ005NDdYWAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJjbTQzeHhfNDd4eF9pZHNbXSA9IHsKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzI0KSB9LAotCXsgMCB9Ci19OwotI2VuZGlmCi0KIHN0YXRpYyBpbnQgYmNtNDN4eF9pbml0aWFsaXplX2lycShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCiB7CiAJaW50IGVycjsKIAogCWJjbS0+aXJxID0gYmNtLT5wY2lfZGV2LT5pcnE7Ci0jaWZkZWYgQ09ORklHX0JDTTk0N1hYCi0JaWYgKGJjbS0+cGNpX2Rldi0+YnVzLT5udW1iZXIgPT0gMCkgewotCQlzdHJ1Y3QgcGNpX2RldiAqZDsKLQkJc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkOwotCQlmb3IgKGlkID0gYmNtNDN4eF80N3h4X2lkczsgaWQtPnZlbmRvcjsgaWQrKykgewotCQkJZCA9IHBjaV9nZXRfZGV2aWNlKGlkLT52ZW5kb3IsIGlkLT5kZXZpY2UsIE5VTEwpOwotCQkJaWYgKGQgIT0gTlVMTCkgewotCQkJCWJjbS0+aXJxID0gZC0+aXJxOwotCQkJCXBjaV9kZXZfcHV0KGQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotI2VuZGlmCiAJZXJyID0gcmVxdWVzdF9pcnEoYmNtLT5pcnEsIGJjbTQzeHhfaW50ZXJydXB0X2hhbmRsZXIsCiAJCQkgIElSUUZfU0hBUkVELCBLQlVJTERfTU9ETkFNRSwgYmNtKTsKIAlpZiAoZXJyKQpAQCAtMjY0NSwxMCArMjU3Myw2IEBACiAJCQljaGlwX2lkXzE2ID0gMHg0NjEwOwogCQllbHNlIGlmICgocGNpX2RldmljZSA+PSAweDQ3MTApICYmIChwY2lfZGV2aWNlIDw9IDB4NDcxNSkpCiAJCQljaGlwX2lkXzE2ID0gMHg0NzEwOwotI2lmZGVmIENPTkZJR19CQ005NDdYWAotCQllbHNlIGlmICgocGNpX2RldmljZSA+PSAweDQzMjApICYmIChwY2lfZGV2aWNlIDw9IDB4NDMyNSkpCi0JCQljaGlwX2lkXzE2ID0gMHg0MzA5OwotI2VuZGlmCiAJCWVsc2UgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGQgbm90IGRldGVybWluZSBDaGlwIElEXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwpAQCAtNDE0NCwxMSArNDA2OCw2IEBACiAJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtOwogCWludCBlcnI7CiAKLSNpZmRlZiBDT05GSUdfQkNNOTQ3WFgKLQlpZiAoKHBkZXYtPmJ1cy0+bnVtYmVyID09IDApICYmIChwZGV2LT5kZXZpY2UgIT0gMHgwODAwKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0jZW5kaWYKLQogI2lmZGVmIERFQlVHX1NJTkdMRV9ERVZJQ0VfT05MWQogCWlmIChzdHJjbXAocGNpX25hbWUocGRldiksIERFQlVHX1NJTkdMRV9ERVZJQ0VfT05MWSkpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmgKaW5kZXggZjc2MzU3MS4uYzhmM2M1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5oCkBAIC0zMywyNSArMzMsNiBAQAogCiAjaW5jbHVkZSAiYmNtNDN4eC5oIgogCi0jaWZkZWYgQ09ORklHX0JDTTk0N1hYCi0jZGVmaW5lIGF0b2koc3RyKSBzaW1wbGVfc3RydG91bCgoKHN0ciAhPSBOVUxMKSA/IHN0ciA6ICIiKSwgTlVMTCwgMCkKLQotc3RhdGljIGlubGluZSB2b2lkIGVfYXRvbihjaGFyICpzdHIsIGNoYXIgKmRlc3QpCi17Ci0JaW50IGkgPSAwOwotCXUxNiAqZCA9ICh1MTYgKikgZGVzdDsKLQotCWZvciAoOzspIHsKLQkJZGVzdFtpKytdID0gKGNoYXIpIHNpbXBsZV9zdHJ0b3VsKHN0ciwgTlVMTCwgMTYpOwotCQlzdHIgKz0gMjsKLQkJaWYgKCEqc3RyKysgfHwgaSA9PSA2KQotCQkJYnJlYWs7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCWRbaV0gPSBjcHVfdG9fYmUxNihkW2ldKTsKLX0KLSNlbmRpZgotCiAjZGVmaW5lIFA0RF9CWVQzUyhtYWdpYywgbnJfYnl0ZXMpCXU4IF9fcDRkZGluZyMjbWFnaWNbbnJfYnl0ZXNdCiAjZGVmaW5lIFA0RF9CWVRFUyhsaW5lLCBucl9ieXRlcykJUDREX0JZVDNTKGxpbmUsIG5yX2J5dGVzKQogLyogTWFnaWMgaGVscGVyIG1hY3JvIHRvIHBhZCBzdHJ1Y3R1cmVzLiBJZ25vcmUgdGhvc2UgYWJvdmUuIEl0J3MgbWFnaWMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKaW5kZXggMjQ2ZmFjMC4uM2RmM2M2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJbG9jYWxfaW5mb190ICpsb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCXUxNiBmYzsKLQlpbnQgaGRyX2xlbiwgcmVzOworCWludCBwcmVmaXhfbGVuLCBwb3N0Zml4X2xlbiwgaGRyX2xlbiwgcmVzOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihza2ItPmRldik7CiAJbG9jYWwgPSBpZmFjZS0+bG9jYWw7CkBAIC0zMzcsMTAgKzMzNywxMyBAQAogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoKHNrYl9oZWFkcm9vbShza2IpIDwgY3J5cHQtPm9wcy0+ZXh0cmFfbXBkdV9wcmVmaXhfbGVuIHx8Ci0JICAgICBza2JfdGFpbHJvb20oc2tiKSA8IGNyeXB0LT5vcHMtPmV4dHJhX21wZHVfcG9zdGZpeF9sZW4pICYmCi0JICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBjcnlwdC0+b3BzLT5leHRyYV9tcGR1X3ByZWZpeF9sZW4sCi0JCQkgICAgIGNyeXB0LT5vcHMtPmV4dHJhX21wZHVfcG9zdGZpeF9sZW4sIEdGUF9BVE9NSUMpKSB7CisJcHJlZml4X2xlbiA9IGNyeXB0LT5vcHMtPmV4dHJhX21wZHVfcHJlZml4X2xlbiArCisJCWNyeXB0LT5vcHMtPmV4dHJhX21zZHVfcHJlZml4X2xlbjsKKwlwb3N0Zml4X2xlbiA9IGNyeXB0LT5vcHMtPmV4dHJhX21wZHVfcG9zdGZpeF9sZW4gKworCQljcnlwdC0+b3BzLT5leHRyYV9tc2R1X3Bvc3RmaXhfbGVuOworCWlmICgoc2tiX2hlYWRyb29tKHNrYikgPCBwcmVmaXhfbGVuIHx8CisJICAgICBza2JfdGFpbHJvb20oc2tiKSA8IHBvc3RmaXhfbGVuKSAmJgorCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgcHJlZml4X2xlbiwgcG9zdGZpeF9sZW4sIEdGUF9BVE9NSUMpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKaW5kZXggY2IwOGJjNS4uY2RlYTdmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwpAQCAtMSw3ICsxLDYgQEAKIC8qIGlvY3RsKCkgKG1vc3RseSBMaW51eCBXaXJlbGVzcyBFeHRlbnNpb25zKSByb3V0aW5lcyBmb3IgSG9zdCBBUCBkcml2ZXIgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9jcnlwdC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCmluZGV4IDE5YzkzNTAuLjU2YThlYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCkBAIC0xLDUgKzEsMyBAQAotIyBFWFRSQV9DRkxBR1MgKz0gLVdwYWNrZWQKLQogdXNiOHh4eC1vYmpzIDo9IG1haW4ubyBmdy5vIHdleHQubyBcCiAJCXJ4Lm8gdHgubyBjbWQubyAJICBcCiAJCWNtZHJlc3AubyBzY2FuLm8JICBcCkBAIC03LDEzICs1LDYgQEAKIAkJaW9jdGwubyBkZWJ1Z2ZzLm8JICBcCiAJCWV0aHRvb2wubyBhc3NvYy5vCiAKLWlmZXEgKCQoQ09ORklHX0xJQkVSVEFTX1VTQl9ERUJVRyksIHkpCi1FWFRSQV9DRkxBR1MgKz0gLURERUJVRyAtRFBST0NfREVCVUcKLWVuZGlmCi0KLQotIyBUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IHRoZSBuZXdlciBib290MiBib290bG9hZGVyICh2ID49IDMxMDQpCi1FWFRSQV9DRkxBR1MgKz0gLURTVVBQT1JUX0JPT1RfQ09NTUFORAogdXNiOHh4eC1vYmpzICs9IGlmX2Jvb3RjbWQubwogdXNiOHh4eC1vYmpzICs9IGlmX3VzYi5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL1JFQURNRSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL1JFQURNRQppbmRleCA2ODhkYTRjLi4zNzg1NzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9SRUFETUUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvUkVBRE1FCkBAIC00MCw2NCArNDAsMTEgQEAKIFNZTk9QU0lTCiAJaXdwcml2IDxldGhYPiA8Y29tbWFuZD4gW3N1Yi1jb21tYW5kXSAuLi4KIAotCWl3cHJpdiBldGhYIHZlcnNpb24KLQlpd3ByaXYgZXRoWCBzY2FudHlwZSBbc3ViLWNvbW1hbmRdCi0JaXdwcml2IGV0aFggZ2V0U05SIDxuPgotCWl3cHJpdiBldGhYIGdldE5GIDxuPgotCWl3cHJpdiBldGhYIGdldFJTU0kgPG4+Ci0JaXdwcml2IGV0aFggc2V0cnhhbnQgPG4+Ci0JaXdwcml2IGV0aFggZ2V0cnhhbnQKLQlpd3ByaXYgZXRoWCBzZXR0eGFudCA8bj4KLQlpd3ByaXYgZXRoWCBnZXR0eGFudAotCWl3cHJpdiBldGhYIGF1dGhhbGdzIDxuPgotCWl3cHJpdiBldGhYIHByZS1UQlRUIDxuPgotCWl3cHJpdiBldGhYIDgwMjF4YXV0aGFsZ3MgPG4+Ci0JaXdwcml2IGV0aFggZW5jcnlwdGlvbm1vZGUgPG4+CiAJaXdwcml2IGV0aFggc2V0cmVnaW9uY29kZSA8bj4KIAlpd3ByaXYgZXRoWCBnZXRyZWdpb25jb2RlCi0JaXdwcml2IGV0aFggc2V0YmNuYXZnIDxuPgotCWl3cHJpdiBldGhYIGdldGJjbmF2ZwotCWl3cHJpdiBldGhYIHNldGRhdGFhdmcgPG4+Ci0JaXdwcml2IGV0aFggc2V0bGlzdGVuaW50ZXIgPG4+Ci0JaXdwcml2IGV0aFggZ2V0bGlzdGVuaW50ZXIKLQlpd3ByaXYgZXRoWCBzZXRtdWx0aXBsZWR0aW0gPG4+Ci0JaXdwcml2IGV0aFggZ2V0bXVsdGlwbGVkdGltCi0JaXdwcml2IGV0aFggYXRpbXdpbmRvdyA8bj4KLQlpd3ByaXYgZXRoWCBkZWF1dGgKLQlpd3ByaXYgZXRoWCBhZGhvY3N0b3AKLQlpd3ByaXYgZXRoWCByYWRpb29uCi0JaXdwcml2IGV0aFggcmFkaW9vZmYKLQlpd3ByaXYgZXRoWCByZWFzc28tb24KLQlpd3ByaXYgZXRoWCByZWFzc28tb2ZmCi0JaXdwcml2IGV0aFggc2Nhbm1vZGUgIFtzdWItY29tbWFuZF0KLQlpd3ByaXYgZXRoWCBzZXR3cGFpZSA8bj4KLQlpd3ByaXYgZXRoWCB3bGFuaWRsZS1vZmYKLQlpd3ByaXYgZXRoWCB3bGFuaWRsZS1vbgotCWl3cHJpdiBldGhYIGdldGNpcwotCWl3cHJpdiBldGhYIGdldGxvZwotCWl3cHJpdiBldGhYIGdldGFkaG9jc3RhdHVzCi0JaXdwcml2IGV0aFggYWRob2NncmF0ZSA8bj4KLQotVmVyc2lvbiA0IENvbW1hbmQ6Ci0JaXdwcml2IGV0aFggaW5hY3R2aXR5dG8gPG4+Ci0JaXdwcml2IGV0aFggc2xlZXBwZCA8bj4KLQlpd3ByaXYgZXRoWCBlbmFibGUxMWQgPG4+Ci0JaXdwcml2IGV0aFggdHBjY2ZnIDxuPgotCWl3cHJpdiBldGhYIHBvd2VyY2ZnIDxuPgotCWl3cHJpdiBldGhYIHNldGFmYyA8bj4KLQlpd3ByaXYgZXRoWCBnZXRhZmMKIAogVmVyc2lvbiA1IENvbW1hbmQ6CiAJaXdwcml2IGV0aFggbGVkZ3BpbyA8bj4KLQlpd3ByaXYgZXRoWCBzY2FucHJvYmVzIDxuPgotCWl3cHJpdiBldGhYIGxvbGlzdGVuaW50ZXIgPG4+Ci0JaXdwcml2IGV0aFggcmF0ZWFkYXB0IDxuPiA8bT4KLQlpd3ByaXYgZXRoWCB0eGNvbnRyb2wgPG4+Ci0JaXdwcml2IGV0aFggcHNudWxsaW50ZXJ2YWwgPG4+Ci0JaXdwcml2IGV0aFggcHJlc2NhbiA8bj4KLQlpd3ByaXYgZXRoWCBnZXRyeGluZm8KLQlpd3ByaXYgZXRoWCBnZXR0eHJhdGUKLQlpd3ByaXYgZXRoWCBiZWFjb25pbnRlcnZhbAogCiBCVCBDb21tYW5kczoKIAlUaGUgYmxpbmRpbmcgdGFibGUgKEJUKSBjb250YWlucyBhIGxpc3Qgb2YgbWFjIGFkZHJlc3NlcyB0aGF0IHNob3VsZCBiZQpAQCAtMTUwLDExNCArOTcsNiBAQAogCVRoZSBldGhYIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIG5ldHdvcmsgZGV2aWNlIHRoYXQgaXMgdG8gYmUgdXNlZCB0bwogCQlwZXJmb3JtIHRoaXMgY29tbWFuZCBvbi4gaXQgY291bGQgYmUgZXRoMCwgZXRoMSBldGMuCiAKLXZlcnNpb24KLQlUaGlzIGlzIHVzZWQgdG8gZ2V0IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGRyaXZlciBhbmQgdGhlIGZpcm13YXJlLgotCi1zY2FudHlwZQotCVRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHNldCB0aGUgc2NhbiB0eXBlIHRvIGJlIHVzZWQgYnkgdGhlIGRyaXZlciBpbgotCXRoZSBzY2FuIGNvbW1hbmQuIFRoaXMgc2V0dGluZyB3aWxsIG5vdCBiZSB1c2VkIHdoaWxlIHBlcmZvcm1pbmcgYSBzY2FuCi0JZm9yIGEgc3BlY2lmaWMgU1NJRCwgYXMgaXQgaXMgYWx3YXlzIGRvbmUgd2l0aCBzY2FuIHR5cGUgYmVpbmcgYWN0aXZlLgotCi0Jd2hlcmUgdGhlIHN1Yi1jb21tYW5kcyBhcmU6IC0KLQkJCWFjdGl2ZSAJLS0gdG8gc2V0IHRoZSBzY2FuIHR5cGUgdG8gYWN0aXZlCi0JCQlwYXNzaXZlIC0tIHRvIHNldCB0aGUgc2NhbiB0eXBlIHRvIHBhc3NpdmUKLQkJCWdldCAJLS0gdG8gZ2V0IHRoZSBzY2FuIHR5cGUgc2V0IGluIHRoZSBkcml2ZXIKLQotZ2V0U05SCi0JVGhpcyBjb21tYW5kIGdldHMgdGhlIGF2ZXJhZ2UgYW5kIG5vbiBhdmVyYWdlIHZhbHVlIG9mIFNpZ25hbCB0byBOb2lzZQotCVJhdGlvIG9mIEJlYWNvbiBhbmQgRGF0YS4KLQotCXdoZXJlIHZhbHVlIGlzOi0KLQkJCTAgCS0tIEJlYWNvbiBub24tYXZlcmFnZS4KLQkJCTEgCS0tIEJlYWNvbiBhdmVyYWdlLgotCQkJMiAJLS0gRGF0YSBub24tYXZlcmFnZS4KLQkJCTMgCS0tIERhdGEgYXZlcmFnZS4KLQotCUlmIG5vIHZhbHVlIGlzIGdpdmVuLCBhbGwgZm91ciB2YWx1ZXMgYXJlIHJldHVybmVkIGluIHRoZSBvcmRlciBtZW50aW9uZWQKLQlhYm92ZS4KLQotCU5vdGU6IFRoaXMgY29tbWFuZCBpcyBhdmFpbGFibGUgb25seSB3aGVuIFNUQSBpcyBjb25uZWN0ZWQuCi0KLWdldFJTU0kKLQlUaGlzIGNvbW1hbmQgZ2V0cyB0aGUgYXZlcmFnZSBhbmQgbm9uIGF2ZXJhZ2UgdmFsdWUgb3MgUmVjZWl2ZSBTaWduYWwKLQlTdHJlbmd0aCBvZiBCZWFjb24gYW5kIERhdGEuCi0KLQl3aGVyZSB2YWx1ZSBpczotCi0JCQkwIAktLSBCZWFjb24gbm9uLWF2ZXJhZ2UuCi0JCQkxIAktLSBCZWFjb24gYXZlcmFnZS4KLQkJCTIgCS0tIERhdGEgbm9uLWF2ZXJhZ2UuCi0JCQkzIAktLSBEYXRhIGF2ZXJhZ2UuCi0KLQlOb3RlOiBUaGlzIGNvbW1hbmQgaXMgYXZhaWxhYmxlIG9ubHkgd2hlbiBTVEEgaXMgY29ubmVjdGVkLgotCi1nZXRORgotCVRoaXMgY29tbWFuZCBnZXRzIHRoZSBhdmVyYWdlIGFuZCBub24gYXZlcmFnZSB2YWx1ZSBvZiBOb2lzZSBGbG9vciBvZgotCUJlYWNvbiBhbmQgRGF0YS4KLQotCXdoZXJlIHZhbHVlIGlzOi0KLQkJCTAgCS0tIEJlYWNvbiBub24tYXZlcmFnZS4KLQkJCTEgCS0tIEJlYWNvbiBhdmVyYWdlLgotCQkJMiAJLS0gRGF0YSBub24tYXZlcmFnZS4KLQkJCTMgCS0tIERhdGEgYXZlcmFnZS4KLQotCU5vdGU6IFRoaXMgY29tbWFuZCBpcyBhdmFpbGFibGUgb25seSB3aGVuIFNUQSBpcyBjb25uZWN0ZWQuCi0KLXNldHJ4YW50Ci0JVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gc2V0IHRoZSBtb2RlIGZvciBSeCBhbnRlbm5hLgotCi0JVGhlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2VudCBhcmU6LQotCQkJMSAJLS0gQW50ZW5uYSAxLgotCQkJMiAJLS0gQW50ZW5uYSAyLgotCQkJMHhGRkZGIAktLSBEaXZlcnNpdHkuCi0KLQlVc2FnZToKLQkJaXdwcml2IGV0aFggc2V0cnhhbnQgMHgwMTogc2VsZWN0IEFudGVubmEgMS4KLQotZ2V0cnhhbnQKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBnZXQgdGhlIG1vZGUgZm9yIFJ4IGFudGVubmEuCi0KLQotc2V0dHhhbnQKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBzZXQgdGhlIG1vZGUgZm9yIFR4IGFudGVubmEuCi0JCVRoZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNlbnQgYXJlOi0KLQkJCTEgCS0tIEFudGVubmEgMS4KLQkJCTIgCS0tIEFudGVubmEgMi4KLQkJCTB4RkZGRiAJLS0gRGl2ZXJzaXR5LgotCVVzYWdlOgotCQlpd3ByaXYgZXRoWCBzZXR0eGFudCAweDAxOiBzZWxlY3QgQW50ZW5uYSAxLgotCi1nZXR0eGFudAotCVRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGdldCB0aGUgbW9kZSBmb3IgVHggYW50ZW5uYS4KLQotYXV0aGFsZ3MKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCBieSB0aGUgV1BBIHN1cHBsaWNhbnQgdG8gc2V0IHRoZSBhdXRoZW50aWNhdGlvbgotCWFsZ29yaXRobXMgaW4gdGhlIHN0YXRpb24uCi0KLTgwMjF4YXV0aGFsZ3MKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCBieSB0aGUgV1BBIHN1cHBsaWNhbnQgdG8gc2V0IHRoZSA4MDIxLnggYXV0aGVudGljYXRpb24gYWxnb3JpdGhtIHR5cGUKLQlzdGF0aW9uLgotCi0Jd2hlcmUgdmFsdWVzIGNhbiBiZTotCi0JCQkxIAktLSBOb25lCi0JCQkyIAktLSBMRUFQCi0JCQk0IAktLSBUTFMKLQkJCTggCS0tIFRUTHMKLQkJCTE2CS0tIE1ENQotCi0KLWVuY3J5cHRpb25tb2RlCi0JVGhpcyBjb21tYW5kIGlzIHVzZWQgYnkgdGhlIFdQQSBzdXBwbGljYW50IHRvIHNldCB0aGUgZW5jcnlwdGlvbiBhbGdvcml0aG0uCi0KLQl3aGVyZSB2YWx1ZXMgY2FuIGJlOi0KLQkJCTAgCS0tIE5PTkUKLQkJCTEgCS0tIFdFUDQwCi0JCQkyIAktLSBUS0lQCi0JCQkzIAktLSBDQ01QCi0JCQk0IAktLSBXRVAxMDQKLQotcHJlLVRCVFQKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBzZXQgcHJlLVRCVFQgdGltZSBwZXJpb2Qgd2hlcmUgdmFsdWUgaXMgaW4gbWljcm9zZWNvbmRzLgotCiBzZXRyZWdpb25jb2RlCiAJVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gc2V0IHRoZSByZWdpb24gY29kZSBpbiB0aGUgc3RhdGlvbi4KIAl3aGVyZSB2YWx1ZSBpcyAncmVnaW9uIGNvZGUnIGZvciB2YXJpb3VzIHJlZ2lvbnMgbGlrZQpAQCAtMjcwLDExNCArMTA5LDYgQEAKIAlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBnZXQgdGhlIHJlZ2lvbiBjb2RlIGluZm9ybWF0aW9uIHNldCBpbiB0aGUKIAlzdGF0aW9uLgogCi1zZXRiY25hdmcKLQlTZXQgdGhlIHdlaWdodGluZyBmYWN0b3IgZm9yIGNhbGN1bGF0aW5nIFJTU0kuCi0KLWdldGJjbmF2ZwotCUdldCB3ZWlnaHRpbmcgZmFjdG9yIGZvciBjYWxjdWxhdGluZyBSU1NJLgotCi1zZXRkYXRhYXZnCi0JU2V0IHRoZSB3ZWlnaHRpbmcgZmFjdG9yIGZvciBjYWxjdWxhdGluZyBTTlIuCi0KLXNldGxpc3RlbmludGVyCi0JVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gc2V0IHRoZSBsaXN0ZW4gaW50ZXJ2YWwgaW4gdGhlCi0Jc3RhdGlvbi4KLQotCXdoZXJlIHRoZSB2YWx1ZSByYW5nZXMgYmV0d2VlbiAxIC0gMjU1Ci0KLWdldGxpc3RlbmludGVyCi0JVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZ2V0IHRoZSBsaXN0ZW4gaW50ZXJ2YWwgdmFsdWUgc2V0IGluIHRoZQotCXN0YXRpb24uCi0KLXNldG11bHRpcGxlZHRpbQotCVRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHNldCB0aGUgbXVsdGlwbGUgZHRpbSB2YWx1ZSBpbiB0aGUKLQlzdGF0aW9uLgotCQl3aGVyZSB0aGUgdmFsdWUgaXMgMSwyLDMsNCw1LDB4ZmZmZQotCQkweGZmZmUgbWVhbnMgdGhlIGZpcm13YXJlIHdpbGwgdXNlIGxpc3RlbiBpbnRlcnZhbCBpbiBhc3NvY2lhdGlvbgotCQljb21tYW5kIGZvciB3YWtpbmcgdXAKLQotZ2V0bXVsdGlwbGVkdGltCi0JVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZ2V0IHRoZSBtdWx0aXBsZSBkdGltIHZhbHVlIHNldCBpbiB0aGUgc3RhdGlvbi4KLQotYXRpbXdpbmRvdwotCVRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHNldCB0aGUgYXRpbSB2YWx1ZSBpbiB0aGUKLQlzdGF0aW9uLgotCi0Jd2hlcmUgdGhlIHZhbHVlIHJhbmdlcyBiZXR3ZWVuIDAgLSA1MAotCi1kZWF1dGgKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBzZW5kIHRoZSBkZS1hdXRoZW50aWNhdGlvbiB0byB0aGUgQVAgd2l0aCB3aGljaAotCXRoZSBzdGF0aW9uIGlzIGFzc29jaWF0ZWQuIFRoaXMgY29tbWFuZCBpcyB2YWxpZCBvbmx5IHdoZW4KLQlzdGF0aW9uIGlzIGluIEluZnJhc3RydWN0dXJlIG1vZGUuCi0KLQlOb3RlOiBUaGlzIGNvbW1hbmQgaXMgYXZhaWxhYmxlIG9ubHkgd2hlbiBTVEEgaXMgY29ubmVjdGVkLgotCi1hZGhvY3N0b3AKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBzdG9wIGJlYWNvbiB0cmFuc21pc3Npb24gZnJvbSB0aGUgc3RhdGlvbiBhbmQKLQlnbyBpbnRvIGlkbGUgc3RhdGUgaW4gYWQtaG9jIG1vZGUuCi0KLQlOb3RlOiBUaGlzIGNvbW1hbmQgaXMgYXZhaWxhYmxlIG9ubHkgd2hlbiBTVEEgaXMgY29ubmVjdGVkLgotCi1yYWRpb29uCi0JVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gdHVybiBvbiB0aGUgUkYgYW50ZW5uYS4KLQotcmFkaW9vZmYKLQlUaGlzIGNvbW1hbmQgaXMgc3VlZCB0byB0dXJuIG9mZiB0aGUgUkYgYW50ZW5uYS4KLQotc2Nhbm1vZGUKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBzZXQgdGhlIHN0YXRpb24gdG8gc2NhbiBmb3IgZWl0aGVyIElCU1MKLQluZXR3b3JrcyBvciBCU1MgbmV0d29ya3Mgb3IgYm90aCBCU1MgYW5kIElCU1MgbmV0d29ya3MuIFRoaXMKLQljb21tYW5kIGNhbiBiZSB1c2VkIHdpdGggc3ViIGNvbW1hbmRzLAotCi0Jd2hlcmUgdGhlIHZhbHVlIGZvcgotCQkJYnNzIAktLSBTY2FuIEFsbCB0aGUgQlNTIG5ldHdvcmtzLgotCQkJaWJzcyAJLS0gU2NhbiBBbGwgdGhlIElCU1MgbmV0d29ya3MuCi0JCQlhbnkgCS0tIFNjYW4gYm90aCBCU1MgYW5kIElCU1MgbmV0d29ya3MuCi0KLQotCi1zZXR3cGFpZQotCVRoaXMgY29tbWFuZCBpcyB1c2VkIGJ5IFdQQSBzdXBwbGljYW50IHRvIHNlbmQgdGhlIFdQQS1JRSB0byB0aGUgZHJpdmVyLgotCi13bGFuaWRsZS1vZmYKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBnZXQgaW50byBpZGxlIHN0YXRlLgotCi0JTm90ZTogVGhpcyBjb21tYW5kIGlzIGF2YWlsYWJsZSBvbmx5IHdoZW4gU1RBIGlzIGNvbm5lY3RlZC4KLQotd2xhbmlkbGUtb24KLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBnZXQgb2ZmIHRoZSBpZGxlIHN0YXRlLgotCi0JTm90ZTogVGhpcyBjb21tYW5kIGlzIGF2YWlsYWJsZSBvbmx5IHdoZW4gU1RBIGlzIGNvbm5lY3RlZC4KLQotCi1nZXRsb2cKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBnZXQgdGhlIDgwMi4xMSBzdGF0aXN0aWNzIGF2YWlsYWJsZSBpbiB0aGUKLQkJc3RhdGlvbi4KLQotCU5vdGU6IFRoaXMgY29tbWFuZCBpcyBhdmFpbGFibGUgb25seSB3aGVuIFNUQSBpcyBjb25uZWN0ZWQuCi0KLWdldGFkaG9jc3RhdHVzCi0JVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZ2V0IHRoZSBhZC1ob2MgTmV0d29yayBTdGF0dXMuCi0KLQlUaGUgdmFyaW91cyBzdGF0dXMgY29kZXMgYXJlOgotCQlBZGhvY1N0YXJ0ZWQKLQkJQWRob2NKb2luZWQKLQkJQWRob2NJZGxlCi0JCUluZnJhTW9kZQotCQlBdXRvVW5rbm93bk1vZGUKLQotCU5vdGU6IFRoaXMgY29tbWFuZCBpcyBhdmFpbGFibGUgb25seSB3aGVuIFNUQSBpcyBjb25uZWN0ZWQuCi0KLWFkaG9jZ3JhdGUKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBlbmFibGUoMSkgZ19yYXRlLCBEaXNhYmxlKDApIGdfcmF0ZQotCWFuZCByZXF1ZXN0KDIpIHRoZSBzdGF0dXMgd2hpY2ggZ19yYXRlIGlzIGRpc2FibGVkL2VuYWJsZWQsCi0JZm9yIEFkLWhvYyBjcmVhdG9yLgotCi0Jd2hlcmUgdmFsdWUgaXM6LQotCQkwCS0tIERpc2FibGVkCi0JCTEJLS0gRW5hYmxlZAotCQkyCS0tIEdldAotCiBsZWRncGlvCiAJVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gc2V0L2dldCBMRURzLgogCkBAIC00MDAsMjUzICsxMzEsNiBAQAogCU5vdGU6IExFRDAgaXMgaW52YWxpZAogCU5vdGU6IE1heGltdW0gTnVtYmVyIG9mIExFRHMgYXJlIDE2LgogCi1pbmFjdGl2aXR5dG8KLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCBieSB0aGUgaG9zdCB0byBzZXQvZ2V0IHRoZSBpbmFjdGl2aXR5IHRpbWVvdXQgdmFsdWUsCi0Jd2hpY2ggc3BlY2lmaWVzIHdoZW4gV0xBTiBkZXZpY2UgaXMgcHV0IHRvIHNsZWVwLgotCi0JVXNhZ2U6Ci0JCWl3cHJpdiBldGhYIGluYWN0aXZpdHl0byBbPHRpbWVvdXQ+XQotCi0Jd2hlcmUgdGhlIHBhcmFtZXRlciBhcmU6Ci0JCXRpbWVvdXQ6IHRpbWVvdXQgdmFsdWUgaW4gbWlsbGlzZWNvbmRzLgotCi0JRXhhbXBsZToKLQkJaXdwcml2IGV0aDEgaW5hY3Rpdml0eXRvCi0JCQkiZ2V0IHRoZSB0aW1lb3V0IHZhbHVlIgotCi0JCWl3cHJpdiBldGgxIGluYWN0aXZpdHl0byBYCi0JCQkic2V0IHRpbWVvdXQgdmFsdWUgdG8gWCBtcyIKLQotCi1zbGVlcHBkCi0JVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBzbGVlcCBwZXJpb2Qgb2YgdGhlIFdMQU4gZGV2aWNlLgotCi0JVXNhZ2U6Ci0JCWl3cHJpdiBldGhYIHNsZWVwcGQgWzxzbGVlcCBwZXJpb2Q+XQotCi0Jd2hlcmUgdGhlIHBhcmFtZXRlciBhcmU6Ci0JCVBlcmlvZDogc2xlZXAgcGVyaW9kIGluIG1pbGxpc2Vjb25kcy4gUmFuZ2UgMTB+NjAuCi0KLQlFeGFtcGxlOgotCQlpd3ByaXYgZXRoMSBzbGVlcHBkIDEwCi0JCQkic2V0IHBlcmlvZCBhcyAxMCBtcyIKLQkJaXdwcml2IGV0aDEgc2xlZXBwZAotCQkJImdldCB0aGUgc2xlZXAgcGVyaW9kIGNvbmZpZ3VyYXRpb24iCi0KLWVuYWJsZTExZAotCVRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNvbnRyb2wgMTFkCi0Jd2hlcmUgdmFsdWUgaXM6LQotCQkxCS0tIEVuYWJsZWQKLQkJMAktLSBEaXNhYmxlZAotCQkyCS0tIEdldAotCi0KLQotCi10cGNjZmcKLQlFbmFibGVzIG9yIGRpc2FibGVzIGF1dG9tYXRpYyB0cmFuc21pdCBwb3dlciBjb250cm9sLgotCi0JVGhlIGZpcnN0IHBhcmFtZXRlciB0dXJucyB0aGlzIGZlYXR1cmUgb24gKDEpIG9yIG9mZiAoMCkuICBXaGVuIHR1cm5pbmcKLQlvbiwgdGhlIHVzZXIgbXVzdCBhbHNvIHN1cHBseSBmb3VyIG1vcmUgcGFyYW1ldGVycyBpbiB0aGUgZm9sbG93aW5nCi0Jb3JkZXI6Ci0JCS1Vc2VTTlIgKFVzZSBTTlIgKGluIGFkZGl0aW9uIHRvIFBFUikgZm9yIFRQQyBhbGdvcml0aG0pLAotCQktUDAgKFAwIHBvd2VyIGxldmVsIGZvciBUUEMpLAotCQktUDEgKFAxIHBvd2VyIGxldmVsIGZvciBUUEMpLAotCQktUDIgKFAyIHBvd2VyIGxldmVsIGZvciBUUEMpLgotCi0JVXNhZ2U6Ci0JCWl3cHJpdiBldGhYIHRwY2NmZzogR2V0IGN1cnJlbnQgY29uZmlndXJhdGlvbgotCQlpd3ByaXYgZXRoWCB0cGNjZmcgMDogZGlzYWJsZSBhdXRvIFRQQwotCQlpd3ByaXYgZXRoWCB0cGNjZmcgMHgwMSAweDAwIDB4MDUgMHgwYSAweDBkOiBlbmFibGUgYXV0byBUUEM7IGRvIG5vdCB1c2UgU05SOwotCQkJCQkJCSAgICAgUDA9MHgwNTsgUDE9MHgwYTsgUDI9MHgwZDsKLQkJaXdwcml2IGV0aFggdHBjY2ZnIDB4MDEgMHgwMSAweDA1IDB4MGEgMHgwZDogZW5hYmxlIGF1dG8gVFBDOyB1c2UgU05SOwotCQkJCQkJCSAgICAgUDA9MHgwNTsgUDE9MHgwYTsgUDI9MHgwZC4KLQotcG93ZXJjZmcKLQlFbmFibGVzIG9yIGRpc2FibGVzIHBvd2VyIGFkYXB0YXRpb24uCi0KLQlUaGUgZmlyc3QgcGFyYW1ldGVyIHR1cm5zIHRoaXMgZmVhdHVyZSBvbiAoMSkgb3Igb2ZmICgwKS4gIFdoZW4gdHVybmluZwotCW9uLCB0aGUgdXNlciBtdXN0IGFsc28gc3VwcGx5IHRocmVlIG1vcmUgcGFyYW1ldGVycyBpbiB0aGUgZm9sbG93aW5nCi0Jb3JkZXI6Ci0JCS1QMCAoUDAgcG93ZXIgbGV2ZWwgZm9yIFBvd2VyIEFkYXB0YXRpb24pLAotCQktUDEgKFAxIHBvd2VyIGxldmVsIGZvciBQb3dlciBBZGFwdGF0aW9uKSwKLQkJLVAyIChQMiBwb3dlciBsZXZlbCBmb3IgUG93ZXIgQWRhcHRhdGlvbikuCi0KLQlVc2FnZToKLQkJaXdwcml2IGV0aFggcG93ZXJjZmc6IEdldCBjdXJyZW50IGNvbmZpZ3VyYXRpb24KLQkJaXdwcml2IGV0aFggcG93ZXJjZmcgMDogZGlzYWJsZSBwb3dlciBhZGFwdGF0aW9uCi0JCWl3cHJpdiBldGhYIHBvd2VyY2ZnIDEgMHgwZCAweDBmIDB4MTI6IGVuYWJsZSBwb3dlciBhZGFwdGF0aW9uOwotCQkJCQkJICAgICAgIFAwPTB4MGQ7IFAxPTB4MGY7IFAyPTB4MTIuCi0KLWdldGFmYwotCVRoaXMgY29tbWFuZCByZXR1cm5zIGF1dG9tYXRpYyBmcmVxdWVuY3kgY29udHJvbCBwYXJhbWV0ZXJzLiAgSXQgcmV0dXJucwotCXRocmVlIGludGVnZXJzOgotCQktUDA6IGF1dG9tYXRpYyBpcyBvbiAoMSksIG9yIG9mZiAoMCksCi0JCS1QMTogY3VycmVudCB0aW1pbmcgb2Zmc2V0IGluIFBQTSAocGFydCBwZXIgbWlsbGlvbiksIGFuZAotCQktUDI6IGN1cnJlbnQgZnJlcXVlbmN5IG9mZnNldCBpbiBQUE0uCi0KLXNldGFmYwotCVNldCBhdXRvbWF0aWMgZnJlcXVlbmN5IGNvbnRyb2wgb3B0aW9ucy4KLQotCVRoZSBmaXJzdCBwYXJhbWV0ZXIgdHVybnMgYXV0b21hdGljIG9uICgxKSBvciBvZmYgKDApLgotCVRoZSB1c2VyIG11c3Qgc3VwcGx5IHR3byBtb3JlIHBhcmFtZXRlcnMgaW4gZWl0aGVyIGNhc2UsIGluIHRoZSBmb2xsb3dpbmcKLSAgb3JkZXI6Ci0KLSAgV2hlbiBhdXRvIGlzIG9uOgotCi0JCS1QMCAoYXV0b21hdGljIGFkanVzdG1lbnQgZnJlcXVlbmN5IHRocmVzaG9sZCBpbiBQUE0pLAotCQktUDEgKGF1dG9tYXRpYyBhZGp1c3RtZW50IHBlcmlvZCBpbiBiZWFjb24gcGVyaW9kKSwKLQotICBXaGVuIGF1dG8gaXMgb2ZmOgotCi0JCS1QMCAobWFudWFsIGFkanVzdG1lbnQgdGltaW5nIG9mZnNldCBpbiBQUE0pLCBhbmQKLQkJLVAxIChtYW51YWwgYWRqdXN0bWVudCBmcmVxdWVuY3kgb2Zmc2V0IGluIFBQTSkuCi0KLQlVc2FnZToKLQkJaXdwcml2IGV0aFggc2V0YWZjIDAgMTAgMTA6IG1hbnVhbCBhZGp1c3RtZW50LCBib3RoIHRpbWluZyBhbmQgZnJlcXVjbmN5Ci0gICAgb2Zmc2V0IGFyZSAxMCBQUE0uCi0KLQkJaXdwcml2IGV0aFggc2V0YWZjIDEgMTAgMTAgZW5hYmxlIGFmYywgYXV0b21hdGljIGFkanVzdG1lbnQsCi0gICAgZnJlcXVlbmN5IHRocmVzaG9sZCAxMCBQUE0sIGZvciBldmVyeSAxMCBiZWFjb24gcGVyaW9kcy4KLQotCi0KLXNjYW5wcm9iZXMKLQlUaGlzIGNvbW1hbmQgc2V0cyBudW1iZXIgb2YgcHJvYmUgcmVxdWVzdHMgcGVyIGNoYW5uZWwuCi0KLQlVc2FnZToKLQkJaXdwcml2IGV0aFggc2NhbnByb2JlcyAzIChzZXQgc2NhbiBwcm9iZXMgdG8gMykKLQkJaXdwcml2IGV0aFggc2NhbnByb2JlcyAgIChnZXQgc2NhbiBwcm9iZXMpCi0KLWxvbGlzdGVuaW50ZXIKLQlUaGlzIGNvbW1hbmQgc2V0cyB0aGUgdmFsdWUgb2YgbGlzdGVuIGludGVydmFsLgotCi0JVXNhZ2U6Ci0JaXdwcml2IGV0aFggbG9saXN0ZW5pbnRlciAyMzQgKHNldCB0aGUgbG9saXN0ZW5pbnRlciB0byAyMzQpCi0JaXdwcml2IGV0aFggbG9saXN0ZW5pbnRlciAgICAgKGdldCB0aGUgbG9saXN0ZW5pbnRlciB2YWx1ZSkKLQotcmF0ZWFkYXB0Ci0JVGhpcyBjb21tYW5kIHNldHMgdGhlIGRhdGEgcmF0ZXMgYml0bWFwLgotCVdoZXJlIDxuPgotCQkwOiBEaXNhYmxlIGF1dG8gcmF0ZSBhZGFwdAotCQkxOiBFbmFibGUgYXV0byByYXRlIGFkYXB0Ci0KLQkgICAgICA8bT4KLQkJIGRhdGEgcmF0ZSBiaXRtYXAKLQkJCUJpdAlEYXRhIHJhdGUKLQkJCTAJMSBNYnBzCi0JCQkxCTIgTWJwcwotCQkJMgk1LjUgTWJwcwotCQkJMwkxMSBNYnBzCi0JCQk0CVJlc2VydmVkCi0JCQk1CTYgTWJwcwotCQkJNgk5IE1icHMKLQkJCTcJMTIgTWJwcwotCQkJOAkxOCBNYnBzCi0JCQk5CTI0IE1icHMKLQkJCTEwCTM2IE1icHMKLQkJCTExCTQ4IE1icHMKLQkJCTEyCTU0IE1icHMKLQkJCTEyLTE1CVJlc2VydmVkCi0KLQlVc2FnZToKLQlpd3ByaXYgZXRoWCByYXRlYWRhcHQKLQkJCXJlYWQgdGhlIGN1cnJlY3QgZGF0YSByYXRlIHNldHRpbmcKLQlpd3ByaXYgZXRoWCByYXRlYWRhcHQgMSAweDA3Ci0JCQllbmFibGUgYXV0byBkYXRhIHJhdGUgYWRhcHQgYW5kCi0JCQlkYXRhIHJhdGVzIGFyZSAxTWJwcywgMk1ic3AgYW5kIDUuNU1icHMKLQotCi10eGNvbnRyb2wKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBzZXQgdGhlIFR4IHJhdGUsIGFjayBwb2xpY3ksIGFuZCByZXRyeSBsaW1pdCBvbiBhIHBlciBwYWNrZXQgYmFzaXMuCi0KLQlXaGVyZSB2YWx1ZSA8bj4gaXM6Ci0JICAgIGlmIGJpdFs0XSA9PSAxOgotCQliaXRbMzowXSAgICAgICAgLS0gMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgIDEwICAgMTEgICAxMiAgIDEzLTE2Ci0JCURhdGEgUmF0ZShNYnBzKSAtLSAxICAgMiAgIDUuNSAxMSAgUnN2IDYgICA5ICAgMTIgIDE4ICAyNCAgMzYgICA0OCAgIDU0ICAgUnN2Ci0KLQkgICAgYml0WzEyOjhdCi0JCWlmIGJpdFsxMl0gPT0gMSwgYml0WzExOjhdIHNwZWNpZmllcyB0aGUgVHggcmV0cnkgbGltaXQuCi0KLQkgICAgYml0WzE0OjEzXSBzcGVjaWZpZXMgcGVyIHBhY2tldCBhY2sgcG9saWN5OgotCQliaXRbMTQ6MTNdCi0JCSAgICAgMSAgMAl1c2UgaW1tZWRpYXRlIGFjayBwb2xpY3kgZm9yIHRoaXMgcGFja2V0Ci0JCSAgICAgMSAgMSAgICAgICB1c2Ugbm8gYWNrIHBvbGljeSBmb3IgdGhpcyBwYWNrZXQKLQkJICAgICAwICB4CXVzZSB0aGUgcGVyLXBhY2tldCBhY2sgcG9saWN5IHNldHRpbmcKLQotCVVzYWdlOgotCWl3cHJpdiBldGhYIHR4Y29udHJvbCAweDc1MTMKLQkJCVVzZSBuby1hY2sgcG9saWN5LCA1IHJldGlyZXMgZm9yIFR4LCAxMU1icHMgcmF0ZQotCi0KLQotcHNudWxsaW50ZXJ2YWwKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBzZXQvcmVxdWVzdCBOVUxMIHBhY2thZ2UgaW50ZXJ2YWwgZm9yIFBvd2VyIFNhdmUKLQl1bmRlciBpbmZyYXN0cnVjdHVyZSBtb2RlLgotCi0Jd2hlcmUgdmFsdWUgaXM6LQotCQktMQktLSBEaXNhYmxlZAotCQluPjAJLS0gU2V0IGludGVydmFsIGFzIG4gKHNlY29uZHMpCi0KLXByZXNjYW4KLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBlbmFibGUgKDEpL2Rpc2FibGUoMCkgYXV0byBwcmVzY2FuIGJlZm9yZSBhc3NvaWNhdGUgdG8gdGhlIGFwCi0KLQl3aGVyZSB2YWx1ZSBpczotCi0JCTAJLS0gRGlzYWJsZWQKLQkJMQktLSBFbmFibGVkCi0JCTIgICAgICAgLS0gR2V0Ci0KLWdldHJ4aW5mbwotCVRoaXMgY29tbWFuZCBnZXRzIG5vbiBhdmVyYWdlIHZhbHVlIG9mIFNpZ25hbCB0byBOb2lzZSBSYXRpbyBvZiBEYXRhIGFuZCByYXRlIGluZGV4LgotCi0JVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyBSYXRlSW5kZXggYW5kIFJhdGUKLQotCQkgICAgIFJhdGVJbmRleAlEYXRhIHJhdGUKLQkJCTAJMSBNYnBzCi0JCQkxCTIgTWJwcwotCQkJMgk1LjUgTWJwcwotCQkJMwkxMSBNYnBzCi0JCQk0CVJlc2VydmVkCi0JCQk1CTYgTWJwcwotCQkJNgk5IE1icHMKLQkJCTcJMTIgTWJwcwotCQkJOAkxOCBNYnBzCi0JCQk5CTI0IE1icHMKLQkJCTEwCTM2IE1icHMKLQkJCTExCTQ4IE1icHMKLQkJCTEyCTU0IE1icHMKLQkJCTEzLTE1CVJlc2VydmVkCi0KLWdldHR4cmF0ZQotCVRoaXMgY29tbWFuZCBnZXRzIGN1cnJlbnQgVHggcmF0ZSBpbmRleCBvZiB0aGUgZmlyc3QgcGFja2V0IGFzc29jaWF0ZWQgd2l0aCBSYXRlIEFkYXB0YXRpb24uCi0KLQlUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIFJhdGVJbmRleCBhbmQgUmF0ZQotCi0JCSAgICAgUmF0ZUluZGV4CURhdGEgcmF0ZQotCQkJMAkxIE1icHMKLQkJCTEJMiBNYnBzCi0JCQkyCTUuNSBNYnBzCi0JCQkzCTExIE1icHMKLQkJCTQJUmVzZXJ2ZWQKLQkJCTUJNiBNYnBzCi0JCQk2CTkgTWJwcwotCQkJNwkxMiBNYnBzCi0JCQk4CTE4IE1icHMKLQkJCTkJMjQgTWJwcwotCQkJMTAJMzYgTWJwcwotCQkJMTEJNDggTWJwcwotCQkJMTIJNTQgTWJwcwotCQkJMTMtMTUJUmVzZXJ2ZWQKLQotYmNuaW50ZXJ2YWwKLQlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBzZXRzIGJlYWNvbiBpbnRlcnZhbCBpbiBhZGhvYyBtb2RlIHdoZW4gYW4gYXJndW1lbnQgaXMgZ2l2ZW4sIGFuZCBnZXRzIGN1cnJlbnQgYWRob2MKLQliZWFjb24gaW50ZXJ2YWwgd2hlbiBubyBhcmd1bWVudCBpcyBnaXZlbi4gVGhlIHZhbGlkIGJlYWNvbiBpbnRlcnZhbCBpcyBiZXR3ZWVuIDIwIC0gMTAwMCwKLQlkZWZhdWx0IGJlYWNvbiBpbnRlcnZhbCBpcyAxMDAuCi0KLQlVc2FnZToKLQkJaXdwcml2IGV0aFggYmNuaW50ZXJ2YWwgMTAwICAoc2V0IGFkaG9jIGJlYWNvbiBpbnRlcnZhbCB0byAxMDApCi0JCWl3cHJpdiBldGhYIGJjbmludGVydmFsICAgICAgKGdldCBhZGhvYyBiZWFjb24gaW50ZXJ2YWwpCi0KIGZ3dF9hZGQKIAlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBpbnNlcnQgYW4gZW50cnkgaW50byB0aGUgRldUIHRhYmxlLiBUaGUgbGlzdCBvZgogCXBhcmFtZXRlcnMgbXVzdCBmb2xsb3cgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYwppbmRleCBiNTVjN2Y1Li5jMjYwYmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmMKQEAgLTIzLDEzICsyMywxMyBAQAogCUVOVEVSKCk7CiAKIAlsYnNfcHJfZGVidWcoMSwgIk5ldyBTU0lEIHJlcXVlc3RlZDogJXNcbiIsIGFzc29jX3JlcS0+c3NpZC5zc2lkKTsKLQlpZiAoYXNzb2NfcmVxLT5tb2RlID09IHdsYW44MDJfMTFpbmZyYXN0cnVjdHVyZSkgeworCWlmIChhc3NvY19yZXEtPm1vZGUgPT0gSVdfTU9ERV9JTkZSQSkgewogCQlpZiAoYWRhcHRlci0+cHJlc2NhbikgewogCQkJbGliZXJ0YXNfc2VuZF9zcGVjaWZpY19TU0lEX3NjYW4ocHJpdiwgJmFzc29jX3JlcS0+c3NpZCwgMSk7CiAJCX0KIAogCQlpID0gbGliZXJ0YXNfZmluZF9TU0lEX2luX2xpc3QoYWRhcHRlciwgJmFzc29jX3JlcS0+c3NpZCwKLQkJCQlOVUxMLCB3bGFuODAyXzExaW5mcmFzdHJ1Y3R1cmUpOworCQkJCU5VTEwsIElXX01PREVfSU5GUkEpOwogCQlpZiAoaSA+PSAwKSB7CiAJCQlsYnNfcHJfZGVidWcoMSwKIAkJCSAgICAgICAiU1NJRCBmb3VuZCBpbiBzY2FuIGxpc3QgLi4uIGFzc29jaWF0aW5nLi4uXG4iKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKIAkJCWxic19wcl9kZWJ1ZygxLCAiU1NJRCAnJXMnIG5vdCBmb3VuZDsgY2Fubm90IGFzc29jaWF0ZVxuIiwKIAkJCQlhc3NvY19yZXEtPnNzaWQuc3NpZCk7CiAJCX0KLQl9IGVsc2UgaWYgKGFzc29jX3JlcS0+bW9kZSA9PSB3bGFuODAyXzExaWJzcykgeworCX0gZWxzZSBpZiAoYXNzb2NfcmVxLT5tb2RlID09IElXX01PREVfQURIT0MpIHsKIAkJLyogU2NhbiBmb3IgdGhlIG5ldHdvcmssIGRvIG5vdCBzYXZlIHByZXZpb3VzIHJlc3VsdHMuICBTdGFsZQogCQkgKiAgIHNjYW4gZGF0YSB3aWxsIGNhdXNlIHVzIHRvIGpvaW4gYSBub24tZXhpc3RhbnQgYWRob2MgbmV0d29yawogCQkgKi8KQEAgLTUyLDcgKzUyLDcgQEAKIAogCQkvKiBTZWFyY2ggZm9yIHRoZSByZXF1ZXN0ZWQgU1NJRCBpbiB0aGUgc2NhbiB0YWJsZSAqLwogCQlpID0gbGliZXJ0YXNfZmluZF9TU0lEX2luX2xpc3QoYWRhcHRlciwgJmFzc29jX3JlcS0+c3NpZCwgTlVMTCwKLQkJCQl3bGFuODAyXzExaWJzcyk7CisJCQkJSVdfTU9ERV9BREhPQyk7CiAJCWlmIChpID49IDApIHsKIAkJCWxic19wcl9kZWJ1ZygxLCAiU1NJRCBmb3VuZCBhdCAlZCBpbiBMaXN0LCBzbyBqb2luXG4iLCByZXQpOwogCQkJbGliZXJ0YXNfam9pbl9hZGhvY19uZXR3b3JrKHByaXYsICZhZGFwdGVyLT5zY2FudGFibGVbaV0pOwpAQCAtOTAsMTAgKzkwLDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChhc3NvY19yZXEtPm1vZGUgPT0gd2xhbjgwMl8xMWluZnJhc3RydWN0dXJlKSB7CisJaWYgKGFzc29jX3JlcS0+bW9kZSA9PSBJV19NT0RFX0lORlJBKSB7CiAJCXJldCA9IHdsYW5fYXNzb2NpYXRlKHByaXYsICZhZGFwdGVyLT5zY2FudGFibGVbaV0pOwogCQlsYnNfcHJfZGVidWcoMSwgIkFTU09DOiByZXR1cm4gZnJvbSB3bGFuX2Fzc29jaWF0ZShic3NkKSB3YXMgJWRcbiIsIHJldCk7Ci0JfSBlbHNlIGlmIChhc3NvY19yZXEtPm1vZGUgPT0gd2xhbjgwMl8xMWlic3MpIHsKKwl9IGVsc2UgaWYgKGFzc29jX3JlcS0+bW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CiAJCWxpYmVydGFzX2pvaW5fYWRob2NfbmV0d29yayhwcml2LCAmYWRhcHRlci0+c2NhbnRhYmxlW2ldKTsKIAl9CiAJbWVtY3B5KCZhc3NvY19yZXEtPnNzaWQsICZhZGFwdGVyLT5zY2FudGFibGVbaV0uc3NpZCwKQEAgLTE0MiwyMyArMTQyLDIzIEBACiAKIAlFTlRFUigpOwogCi0JaWYgKGFzc29jX3JlcS0+bW9kZSA9PSBhZGFwdGVyLT5pbmZyYW1vZGUpIHsKKwlpZiAoYXNzb2NfcmVxLT5tb2RlID09IGFkYXB0ZXItPm1vZGUpIHsKIAkJTEVBVkUoKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGFzc29jX3JlcS0+bW9kZSA9PSB3bGFuODAyXzExaW5mcmFzdHJ1Y3R1cmUpIHsKKwlpZiAoYXNzb2NfcmVxLT5tb2RlID09IElXX01PREVfSU5GUkEpIHsKIAkJaWYgKGFkYXB0ZXItPnBzc3RhdGUgIT0gUFNfU1RBVEVfRlVMTF9QT1dFUikKIAkJCWxpYmVydGFzX3BzX3dha2V1cChwcml2LCBjbWRfb3B0aW9uX3dhaXRmb3Jyc3ApOwogCQlhZGFwdGVyLT5wc21vZGUgPSB3bGFuODAyXzExcG93ZXJtb2RlY2FtOwogCX0KIAotCWFkYXB0ZXItPmluZnJhbW9kZSA9IGFzc29jX3JlcS0+bW9kZTsKKwlhZGFwdGVyLT5tb2RlID0gYXNzb2NfcmVxLT5tb2RlOwogCXJldCA9IGxpYmVydGFzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LAogCQkJCSAgICBjbWRfODAyXzExX3NubXBfbWliLAogCQkJCSAgICAwLCBjbWRfb3B0aW9uX3dhaXRmb3Jyc3AsCiAJCQkJICAgIE9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERSwKLQkJCQkgICAgKHZvaWQgKikgYXNzb2NfcmVxLT5tb2RlKTsKKwkJCQkgICAgKHZvaWQgKikgKHNpemVfdCkgYXNzb2NfcmVxLT5tb2RlKTsKIAogCUxFQVZFKCk7CiAJcmV0dXJuIHJldDsKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIGVuYWJsZS9kaXNhYmxlIHRoZSBNQUMncyBXRVAgcGFja2V0IGZpbHRlciAqLwotCWlmIChhc3NvY19yZXEtPnNlY2luZm8uV0VQc3RhdHVzID09IHdsYW44MDJfMTFXRVBlbmFibGVkKQorCWlmIChhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQpCiAJCWFkYXB0ZXItPmN1cnJlbnRwYWNrZXRmaWx0ZXIgfD0gY21kX2FjdF9tYWNfd2VwX2VuYWJsZTsKIAllbHNlCiAJCWFkYXB0ZXItPmN1cnJlbnRwYWNrZXRmaWx0ZXIgJj0gfmNtZF9hY3RfbWFjX3dlcF9lbmFibGU7CkBAIC0zMDAsOCArMzAwLDcgQEAKIAl9CiAKIAlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19TRUNJTkZPLCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJaWYgKGFkYXB0ZXItPnNlY2luZm8uYXV0aG1vZGUgIT0KLQkJICAgIGFzc29jX3JlcS0+c2VjaW5mby5hdXRobW9kZSkgeworCQlpZiAoYWRhcHRlci0+c2VjaW5mby5hdXRoX21vZGUgIT0gYXNzb2NfcmVxLT5zZWNpbmZvLmF1dGhfbW9kZSkgewogCQkJbGJzX3ByX2RlYnVnKDEsICJEZWF1dGhlbnRpY2F0aW5nIGR1ZSB0byB1cGRhdGVkIHNlY3VyaXR5ICIKIAkJCQkiaW5mbyBpbiBjb25maWd1cmF0aW9uIHJlcXVlc3QuXG4iKTsKIAkJCXJldHVybiAxOwpAQCAtMzE2LDcgKzMxNSw3IEBACiAKIAkvKiBGSVhNRTogZGVhbCB3aXRoICdhdXRvJyBtb2RlIHNvbWVob3cgKi8KIAlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19NT0RFLCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJaWYgKGFzc29jX3JlcS0+bW9kZSAhPSB3bGFuODAyXzExaW5mcmFzdHJ1Y3R1cmUpCisJCWlmIChhc3NvY19yZXEtPm1vZGUgIT0gSVdfTU9ERV9JTkZSQSkKIAkJCXJldHVybiAxOwogCX0KIApAQCAtMzMzLDEyICszMzIsMTIgQEAKIAlpZiAoYWRhcHRlci0+Y3VyYnNzcGFyYW1zLnNzaWQuc3NpZGxlbmd0aCAhPSBhc3NvY19yZXEtPnNzaWQuc3NpZGxlbmd0aCkKIAkJcmV0dXJuIDE7CiAJaWYgKG1lbWNtcChhZGFwdGVyLT5jdXJic3NwYXJhbXMuc3NpZC5zc2lkLCBhc3NvY19yZXEtPnNzaWQuc3NpZCwKLQkJCXNpemVvZihzdHJ1Y3QgV0xBTl84MDJfMTFfU1NJRCkpKQorCQkJYWRhcHRlci0+Y3VyYnNzcGFyYW1zLnNzaWQuc3NpZGxlbmd0aCkpCiAJCXJldHVybiAxOwogCiAJLyogRklYTUU6IGRlYWwgd2l0aCAnYXV0bycgbW9kZSBzb21laG93ICovCiAJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfTU9ERSwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7Ci0JCWlmIChhc3NvY19yZXEtPm1vZGUgIT0gd2xhbjgwMl8xMWlic3MpCisJCWlmIChhc3NvY19yZXEtPm1vZGUgIT0gSVdfTU9ERV9BREhPQykKIAkJCXJldHVybiAxOwogCX0KIApAQCAtMzgyLDcgKzM4MSw3IEBACiAJfQogCiAJaWYgKGZpbmRfYW55X3NzaWQpIHsKLQkJZW51bSBXTEFOXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFIG5ld19tb2RlOworCQl1OCBuZXdfbW9kZTsKIAogCQlyZXQgPSBsaWJlcnRhc19maW5kX2Jlc3RfbmV0d29ya19TU0lEKHByaXYsICZhc3NvY19yZXEtPnNzaWQsCiAJCQkJYXNzb2NfcmVxLT5tb2RlLCAmbmV3X21vZGUpOwpAQCAtMzkzLDcgKzM5Miw3IEBACiAJCX0KIAogCQkvKiBFbnN1cmUgd2Ugc3dpdGNoIHRvIHRoZSBtb2RlIG9mIHRoZSBBUCAqLwotCQlpZiAoYXNzb2NfcmVxLT5tb2RlID09IHdsYW44MDJfMTFhdXRvdW5rbm93bikgeworCQlpZiAoYXNzb2NfcmVxLT5tb2RlID09IElXX01PREVfQVVUTykgewogCQkJc2V0X2JpdChBU1NPQ19GTEFHX01PREUsICZhc3NvY19yZXEtPmZsYWdzKTsKIAkJCWFzc29jX3JlcS0+bW9kZSA9IG5ld19tb2RlOwogCQl9CkBAIC00MDMsNyArNDAyLDcgQEAKIAkgKiBDaGVjayBpZiB0aGUgYXR0cmlidXRlcyBiZWluZyBjaGFuZ2luZyByZXF1aXJlIGRlYXV0aGVudGljYXRpb24KIAkgKiBmcm9tIHRoZSBjdXJyZW50bHkgYXNzb2NpYXRlZCBpbmZyYXN0cnVjdHVyZSBhY2Nlc3MgcG9pbnQuCiAJICovCi0JaWYgKGFkYXB0ZXItPmluZnJhbW9kZSA9PSB3bGFuODAyXzExaW5mcmFzdHJ1Y3R1cmUpIHsKKwlpZiAoYWRhcHRlci0+bW9kZSA9PSBJV19NT0RFX0lORlJBKSB7CiAJCWlmIChzaG91bGRfZGVhdXRoX2luZnJhc3RydWN0dXJlKGFkYXB0ZXIsIGFzc29jX3JlcSkpIHsKIAkJCXJldCA9IGxpYmVydGFzX3NlbmRfZGVhdXRoZW50aWNhdGlvbihwcml2KTsKIAkJCWlmIChyZXQpIHsKQEAgLTQxMiw3ICs0MTEsNyBAQAogCQkJCQlyZXQpOwogCQkJfQogCQl9Ci0JfSBlbHNlIGlmIChhZGFwdGVyLT5pbmZyYW1vZGUgPT0gd2xhbjgwMl8xMWlic3MpIHsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPm1vZGUgPT0gSVdfTU9ERV9BREhPQykgewogCQlpZiAoc2hvdWxkX3N0b3BfYWRob2MoYWRhcHRlciwgYXNzb2NfcmVxKSkgewogCQkJcmV0ID0gbGliZXJ0YXNfc3RvcF9hZGhvY19uZXR3b3JrKHByaXYpOwogCQkJaWYgKHJldCkgewpAQCAtNTQzLDcgKzU0Miw3IEBACiAJCWFzc29jX3JlcS0+Y2hhbm5lbCA9IGFkYXB0ZXItPmN1cmJzc3BhcmFtcy5jaGFubmVsOwogCiAJaWYgKCF0ZXN0X2JpdChBU1NPQ19GTEFHX01PREUsICZhc3NvY19yZXEtPmZsYWdzKSkKLQkJYXNzb2NfcmVxLT5tb2RlID0gYWRhcHRlci0+aW5mcmFtb2RlOworCQlhc3NvY19yZXEtPm1vZGUgPSBhZGFwdGVyLT5tb2RlOwogCiAJaWYgKCF0ZXN0X2JpdChBU1NPQ19GTEFHX0JTU0lELCAmYXNzb2NfcmVxLT5mbGFncykpIHsKIAkJbWVtY3B5KCZhc3NvY19yZXEtPmJzc2lkLCBhZGFwdGVyLT5jdXJic3NwYXJhbXMuYnNzaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCmluZGV4IGJmZGFjNTguLmRlOWNiNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCkBAIC0zODEsMTUgKzM4MSwxNiBAQAogCXN3aXRjaCAoY21kX29pZCkgewogCWNhc2UgT0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFOgogCXsKLQkJZW51bSBXTEFOXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFIG1vZGUgPQotCQkJKGVudW0gV0xBTl84MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSkgcGRhdGFfYnVmOworCQl1OCBtb2RlID0gKHU4KSAoc2l6ZV90KSBwZGF0YV9idWY7CiAJCXBTTk1QTUlCLT5xdWVyeXR5cGUgPSBjcHVfdG9fbGUxNihjbWRfYWN0X3NldCk7CiAJCXBTTk1QTUlCLT5vaWQgPSBjcHVfdG9fbGUxNigodTE2KSBkZXNpcmVkX2Jzc3R5cGVfaSk7CiAJCXBTTk1QTUlCLT5idWZzaXplID0gc2l6ZW9mKHU4KTsKLQkJaWYgKG1vZGUgPT0gd2xhbjgwMl8xMWluZnJhc3RydWN0dXJlKQotCQkJdWNUZW1wID0gU05NUF9NSUJfVkFMVUVfSU5GUkE7Ci0JCWVsc2UKKwkJaWYgKG1vZGUgPT0gSVdfTU9ERV9BREhPQykgewogCQkJdWNUZW1wID0gU05NUF9NSUJfVkFMVUVfQURIT0M7CisJCX0gZWxzZSB7CisJCQkvKiBJbmZyYSBhbmQgQXV0byBtb2RlcyAqLworCQkJdWNUZW1wID0gU05NUF9NSUJfVkFMVUVfSU5GUkE7CisJCX0KIAogCQltZW1tb3ZlKHBTTk1QTUlCLT52YWx1ZSwgJnVjVGVtcCwgc2l6ZW9mKHU4KSk7CiAKQEAgLTk0Nyw4ICs5NDgsOCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAotCWxic19wcl9kZWJ1ZygxLCAiUVVFVUVfQ01EOiBJbnNlcnRlZCBub2RlPTB4JXgsIGNtZD0weCV4IGluIGNtZHBlbmRpbmdxXG4iLAotCSAgICAgICAodTMyKSBjbWRub2RlLAorCWxic19wcl9kZWJ1ZygxLCAiUVVFVUVfQ01EOiBJbnNlcnRlZCBub2RlPSVwLCBjbWQ9MHgleCBpbiBjbWRwZW5kaW5ncVxuIiwKKwkgICAgICAgY21kbm9kZSwKIAkgICAgICAgKChzdHJ1Y3QgY21kX2RzX2dlbiopY21kbm9kZS0+YnVmdmlydHVhbGFkZHIpLT5jb21tYW5kKTsKIAogZG9uZToKQEAgLTk3Niw4ICs5NzcsOCBAQAogCUVOVEVSKCk7CiAKIAlpZiAoIWFkYXB0ZXIgfHwgIWNtZG5vZGUpIHsKLQkJbGJzX3ByX2RlYnVnKDEsICJETkxEX0NNRDogYWRhcHRlciA9ICUjeCwgY21kbm9kZSA9ICUjeFxuIiwKLQkJICAgICAgIChpbnQpYWRhcHRlciwgKGludCljbWRub2RlKTsKKwkJbGJzX3ByX2RlYnVnKDEsICJETkxEX0NNRDogYWRhcHRlciA9ICVwLCBjbWRub2RlID0gJXBcbiIsCisJCSAgICAgICBhZGFwdGVyLCBjbWRub2RlKTsKIAkJaWYgKGNtZG5vZGUpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCQkJX19saWJlcnRhc19jbGVhbnVwX2FuZF9pbnNlcnRfY21kKHByaXYsIGNtZG5vZGUpOwpAQCAtMTE3NCw4ICsxMTc1LDggQEAKIAogCWNtZHB0ciA9IChzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKiljbWRub2RlLT5idWZ2aXJ0dWFsYWRkcjsKIAotCWxic19wcl9kZWJ1ZygxLCAiUFJFUF9DTUQ6IFZhbCBvZiBjbWQgcHRyID0weCV4LCBjb21tYW5kPTB4JVhcbiIsCi0JICAgICAgICh1MzIpIGNtZHB0ciwgY21kX25vKTsKKwlsYnNfcHJfZGVidWcoMSwgIlBSRVBfQ01EOiBWYWwgb2YgY21kIHB0cj0lcCwgY29tbWFuZD0weCVYXG4iLAorCSAgICAgICBjbWRwdHIsIGNtZF9ubyk7CiAKIAlpZiAoIWNtZHB0cikgewogCQlsYnNfcHJfZGVidWcoMSwgIlBSRVBfQ01EOiBidWZ2aXJ0dWFsYWRkciBvZiBjbWRub2RlIGlzIE5VTExcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCmluZGV4IGNkYjAxMmMuLmM4NjQ1NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKQEAgLTcyLDggKzcyLDYgQEAKIAlhZGFwdGVyLT5zZWNpbmZvLldQQWVuYWJsZWQgPSAwOwogCWFkYXB0ZXItPnNlY2luZm8uV1BBMmVuYWJsZWQgPSAwOwogCWFkYXB0ZXItPndwYV9pZV9sZW4gPSAwOwotCWFkYXB0ZXItPnNlY2luZm8uYXV0aDF4YWxnID0gV0xBTl8xWF9BVVRIX0FMR19OT05FOwotCWFkYXB0ZXItPnNlY2luZm8uRW5jcnlwdGlvbm1vZGUgPSBDSVBIRVJfTk9ORTsKIAogCWFkYXB0ZXItPmNvbm5lY3Rfc3RhdHVzID0gbGliZXJ0YXNfZGlzY29ubmVjdGVkOwogCkBAIC04MTEsNyArODA5LDcgQEAKIAkJaWYgKHJlc3VsdCkgewogCQkJbGJzX3ByX2RlYnVnKDEsICJDTURfUkVTUDogUFMgY29tbWFuZCBmYWlsZWQtICUjeCBcbiIsCiAJCQkgICAgICAgcmVzcC0+cmVzdWx0KTsKLQkJCWlmIChhZGFwdGVyLT5pbmZyYW1vZGUgPT0gd2xhbjgwMl8xMWlic3MpIHsKKwkJCWlmIChhZGFwdGVyLT5tb2RlID09IElXX01PREVfQURIT0MpIHsKIAkJCQkvKgogCQkJCSAqIFdlIHNob3VsZCBub3QgcmUtdHJ5IGVudGVyLXBzIGNvbW1hbmQgaW4KIAkJCQkgKiBhZC1ob2MgbW9kZS4gSXQgdGFrZXMgcGxhY2UgaW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYwppbmRleCA1MWRmZDIwLi43ZDdiYzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgImRldi5oIgogI2luY2x1ZGUgImRlY2wuaCIKICNpbmNsdWRlICJob3N0LmgiCisjaW5jbHVkZSAiZGVidWdmcy5oIgogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbGliZXJ0YXNfZGlyID0gTlVMTDsKIHN0YXRpYyBjaGFyICpzelN0YXRlc1tdID0gewpAQCAtMjc2LDcgKzI3Nyw3IEBACiAJaWYgKCFlbmQpCiAJCWVuZCA9IGJ1ZiArIGNvdW50IC0gMTsKIAotCXNpemUgPSBtaW4oSVdfRVNTSURfTUFYX1NJWkUsIGVuZCAtIGhvbGQpOworCXNpemUgPSBtaW4oKHNpemVfdClJV19FU1NJRF9NQVhfU0laRSwgKHNpemVfdCkgKGVuZCAtIGhvbGQpKTsKIAlzdHJuY3B5KHNjYW5fY2ZnLT5zcGVjaWZpY1NTSUQsIGhvbGQsIHNpemUpOwogCiAJcmV0dXJuOwpAQCAtMTY0OCw3ICsxNjQ5LDcgQEAKIAlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHM7CiB9OwogCi1zdHJ1Y3QgbGliZXJ0YXNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2ZpbGVzW10gPSB7CitzdGF0aWMgc3RydWN0IGxpYmVydGFzX2RlYnVnZnNfZmlsZXMgZGVidWdmc19maWxlc1tdID0gewogCXsgImluZm8iLCAwNDQ0LCBGT1BTKGxpYmVydGFzX2Rldl9pbmZvLCB3cml0ZV9maWxlX2R1bW15KSwgfSwKIAl7ICJnZXRzY2FudGFibGUiLCAwNDQ0LCBGT1BTKGxpYmVydGFzX2dldHNjYW50YWJsZSwKIAkJCQkJd3JpdGVfZmlsZV9kdW1teSksIH0sCkBAIC0xNjU4LDcgKzE2NTksNyBAQAogCXsgInNldHVzZXJzY2FuIiwgMDYwMCwgRk9QUyhOVUxMLCBsaWJlcnRhc19zZXR1c2Vyc2NhbiksIH0sCiB9OwogCi1zdHJ1Y3QgbGliZXJ0YXNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2V2ZW50c19maWxlc1tdID0geworc3RhdGljIHN0cnVjdCBsaWJlcnRhc19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfZXZlbnRzX2ZpbGVzW10gPSB7CiAJeyJsb3dfcnNzaSIsIDA2NDQsIEZPUFMobGliZXJ0YXNfbG93cnNzaV9yZWFkLAogCQkJCWxpYmVydGFzX2xvd3Jzc2lfd3JpdGUpLCB9LAogCXsibG93X3NuciIsIDA2NDQsIEZPUFMobGliZXJ0YXNfbG93c25yX3JlYWQsCkBAIC0xNjczLDcgKzE2NzQsNyBAQAogCQkJCWxpYmVydGFzX2hpZ2hzbnJfd3JpdGUpLCB9LAogfTsKIAotc3RydWN0IGxpYmVydGFzX2RlYnVnZnNfZmlsZXMgZGVidWdmc19yZWdzX2ZpbGVzW10gPSB7CitzdGF0aWMgc3RydWN0IGxpYmVydGFzX2RlYnVnZnNfZmlsZXMgZGVidWdmc19yZWdzX2ZpbGVzW10gPSB7CiAJeyJyZG1hYyIsIDA2NDQsIEZPUFMobGliZXJ0YXNfcmRtYWNfcmVhZCwgbGliZXJ0YXNfcmRtYWNfd3JpdGUpLCB9LAogCXsid3JtYWMiLCAwNjAwLCBGT1BTKE5VTEwsIGxpYmVydGFzX3dybWFjX3dyaXRlKSwgfSwKIAl7InJkYmJwIiwgMDY0NCwgRk9QUyhsaWJlcnRhc19yZGJicF9yZWFkLCBsaWJlcnRhc19yZGJicF93cml0ZSksIH0sCkBAIC0xNzc4LDcgKzE3NzksNyBAQAogc3RydWN0IGRlYnVnX2RhdGEgewogCWNoYXIgbmFtZVszMl07CiAJdTMyIHNpemU7Ci0JdTMyIGFkZHI7CisJc2l6ZV90IGFkZHI7CiB9OwogCiAvKiBUbyBkZWJ1ZyBhbnkgbWVtYmVyIG9mIHdsYW5fYWRhcHRlciwgc2ltcGx5IGFkZCBvbmUgbGluZSBoZXJlLgpAQCAtMTgyNSw2ICsxODI2LDggQEAKIAkJCXZhbCA9ICooKHUxNiAqKSBkW2ldLmFkZHIpOwogCQllbHNlIGlmIChkW2ldLnNpemUgPT0gNCkKIAkJCXZhbCA9ICooKHUzMiAqKSBkW2ldLmFkZHIpOworCQllbHNlIGlmIChkW2ldLnNpemUgPT0gOCkKKwkJCXZhbCA9ICooKHU2NCAqKSBkW2ldLmFkZHIpOwogCiAJCXBvcyArPSBzcHJpbnRmKHAgKyBwb3MsICIlcz0lZFxuIiwgZFtpXS5uYW1lLCB2YWwpOwogCX0KQEAgLTE4NDQsNyArMTg0Nyw3IEBACiAgKiAgQHBhcmFtIGRhdGEgICAgZGF0YSB0byB3cml0ZQogICogIEByZXR1cm4gCSAgIG51bWJlciBvZiBkYXRhCiAgKi8KLXN0YXRpYyBpbnQgd2xhbl9kZWJ1Z2ZzX3dyaXRlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorc3RhdGljIHNzaXplX3Qgd2xhbl9kZWJ1Z2ZzX3dyaXRlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKIAlpbnQgciwgaTsKQEAgLTE4ODYsMTIgKzE4ODksMTQgQEAKIAkJCQkqKCh1MTYgKikgZFtpXS5hZGRyKSA9ICh1MTYpIHI7CiAJCQllbHNlIGlmIChkW2ldLnNpemUgPT0gNCkKIAkJCQkqKCh1MzIgKikgZFtpXS5hZGRyKSA9ICh1MzIpIHI7CisJCQllbHNlIGlmIChkW2ldLnNpemUgPT0gOCkKKwkJCQkqKCh1NjQgKikgZFtpXS5hZGRyKSA9ICh1NjQpIHI7CiAJCQlicmVhazsKIAkJfSB3aGlsZSAoMSk7CiAJfQogCWtmcmVlKHBkYXRhKTsKIAotCXJldHVybiBjbnQ7CisJcmV0dXJuIChzc2l6ZV90KWNudDsKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGliZXJ0YXNfZGVidWdfZm9wcyA9IHsKQEAgLTE5MTYsMjAgKzE5MjEsMTAgQEAKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9vZl9pdGVtczsgaSsrKQotCQlpdGVtc1tpXS5hZGRyICs9ICh1MzIpIHByaXYtPmFkYXB0ZXI7CisJCWl0ZW1zW2ldLmFkZHIgKz0gKHNpemVfdCkgcHJpdi0+YWRhcHRlcjsKIAogCXByaXYtPmRlYnVnZnNfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkZWJ1ZyIsIDA2NDQsCiAJCQkJCQkgIHByaXYtPmRlYnVnZnNfZGlyLCAmaXRlbXNbMF0sCiAJCQkJCQkgICZsaWJlcnRhc19kZWJ1Z19mb3BzKTsKIH0KIAotLyoqCi0gKiAgQGJyaWVmIHJlbW92ZSBwcm9jIGZpbGUKLSAqCi0gKiAgQHBhcmFtIHByaXYJICAgcG9pbnRlciB3bGFuX3ByaXZhdGUKLSAqICBAcmV0dXJuIAkgICBOL0EKLSAqLwotdm9pZCBsaWJlcnRhc19kZWJ1Z19yZW1vdmUod2xhbl9wcml2YXRlICogcHJpdikKLXsKLQlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5kZWJ1Z2ZzX2RlYnVnKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaAppbmRleCA2MDZiZGQwLi5kZmUyNzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oCkBAIC00Niw3ICs0Niw3IEBACiB1OCBsaWJlcnRhc19kYXRhX3JhdGVfdG9faW5kZXgodTMyIHJhdGUpOwogdm9pZCBsaWJlcnRhc19nZXRfZnd2ZXJzaW9uKHdsYW5fYWRhcHRlciAqIGFkYXB0ZXIsIGNoYXIgKmZ3dmVyc2lvbiwgaW50IG1heGxlbik7CiAKLWludCBsaWJlcnRhc191cGxvYWRfcnhfcGFja2V0KHdsYW5fcHJpdmF0ZSAqIHByaXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBsaWJlcnRhc191cGxvYWRfcnhfcGFja2V0KHdsYW5fcHJpdmF0ZSAqIHByaXYsIHN0cnVjdCBza19idWZmICpza2IpOwogCiAvKiogVGhlIHByb2MgZnMgaW50ZXJmYWNlICovCiBpbnQgbGliZXJ0YXNfcHJvY2Vzc19yeF9jb21tYW5kKHdsYW5fcHJpdmF0ZSAqIHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCmluZGV4IGZiMTQ3OGMuLjgwZGQ5ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKQEAgLTksNiArOSwxMSBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IGxpYmVydGFzX2RlYnVnOwogCisjaWZkZWYgQ09ORklHX0xJQkVSVEFTX0RFQlVHCisjZGVmaW5lIERFQlVHCisjZGVmaW5lIFBST0NfREVCVUcKKyNlbmRpZgorCiAjZGVmaW5lIERSVl9OQU1FCQkidXNiOHh4eCIKIAogI2RlZmluZSBsYnNfcHJfaW5mbyhmb3JtYXQsIGFyZ3MuLi4pIFwKQEAgLTIyMywzMSArMjI4LDYgQEAKIAlNQVhfVFlQRV9BVkcKIH07CiAKLS8qKiBXTEFOXzgwMl8xMV9BVVRIX0FMRyovCi1lbnVtIFdMQU5fODAyXzExX0FVVEhfQUxHIHsKLQlBVVRIX0FMR19PUEVOX1NZU1RFTSA9IDEsCi0JQVVUSF9BTEdfU0hBUkVEX0tFWSA9IDIsCi0JQVVUSF9BTEdfTkVUV09SS19FQVAgPSA4LAotfTsKLQotLyoqIFdMQU5fODAyXzFYX0FVVEhfQUxHICovCi1lbnVtIFdMQU5fODAyXzFYX0FVVEhfQUxHIHsKLQlXTEFOXzFYX0FVVEhfQUxHX05PTkUgPSAxLAotCVdMQU5fMVhfQVVUSF9BTEdfTEVBUCA9IDIsCi0JV0xBTl8xWF9BVVRIX0FMR19UTFMgPSA0LAotCVdMQU5fMVhfQVVUSF9BTEdfVFRMUyA9IDgsCi0JV0xBTl8xWF9BVVRIX0FMR19NRDUgPSAxNiwKLX07Ci0KLS8qKiBXTEFOXzgwMl8xMV9FTkNSWVBUSU9OX01PREUgKi8KLWVudW0gV0xBTl84MDJfMTFfRU5DUllQVElPTl9NT0RFIHsKLQlDSVBIRVJfTk9ORSwKLQlDSVBIRVJfV0VQNDAsCi0JQ0lQSEVSX1RLSVAsCi0JQ0lQSEVSX0NDTVAsCi0JQ0lQSEVSX1dFUDEwNCwKLX07Ci0KIC8qKiBXTEFOXzgwMl8xMV9QT1dFUl9NT0RFICovCiBlbnVtIFdMQU5fODAyXzExX1BPV0VSX01PREUgewogCXdsYW44MDJfMTFwb3dlcm1vZGVjYW0sCkBAIC0yOTIsMjggKzI3Miw2IEBACiAJTVZNU19FVkVOVAogfTsKIAotLyoqIFdMQU5fODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUgKi8KLWVudW0gV0xBTl84MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSB7Ci0Jd2xhbjgwMl8xMWlic3MsCi0Jd2xhbjgwMl8xMWluZnJhc3RydWN0dXJlLAotCXdsYW44MDJfMTFhdXRvdW5rbm93biwKLQkvKmRlZmluZWQgYXMgdXBwZXIgYm91bmQgKi8KLQl3bGFuODAyXzExaW5mcmFzdHJ1Y3R1cmVtYXgKLX07Ci0KLS8qKiBXTEFOXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFICovCi1lbnVtIFdMQU5fODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgewotCXdsYW44MDJfMTFhdXRobW9kZW9wZW4gPSAweDAwLAotCXdsYW44MDJfMTFhdXRobW9kZXNoYXJlZCA9IDB4MDEsCi0Jd2xhbjgwMl8xMWF1dGhtb2RlbmV0d29ya0VBUCA9IDB4ODAsCi19OwotCi0vKiogV0xBTl84MDJfMTFfV0VQX1NUQVRVUyAqLwotZW51bSBXTEFOXzgwMl8xMV9XRVBfU1RBVFVTIHsKLQl3bGFuODAyXzExV0VQZW5hYmxlZCwKLQl3bGFuODAyXzExV0VQZGlzYWJsZWQsCi19OwotCiAvKiogU05NUF9NSUJfSU5ERVhfZSAqLwogZW51bSBTTk1QX01JQl9JTkRFWF9lIHsKIAlkZXNpcmVkX2Jzc3R5cGVfaSA9IDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IGIxZjg3NmYuLmU4YjkwMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KIAogI2luY2x1ZGUgImRlZnMuaCIKICNpbmNsdWRlICJzY2FuLmgiCkBAIC01NiwxMCArNTcsOCBAQAogc3RydWN0IHdsYW5fODAyXzExX3NlY3VyaXR5IHsKIAl1OCBXUEFlbmFibGVkOwogCXU4IFdQQTJlbmFibGVkOwotCWVudW0gV0xBTl84MDJfMTFfV0VQX1NUQVRVUyBXRVBzdGF0dXM7Ci0JZW51bSBXTEFOXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFIGF1dGhtb2RlOwotCWVudW0gV0xBTl84MDJfMVhfQVVUSF9BTEcgYXV0aDF4YWxnOwotCWVudW0gV0xBTl84MDJfMTFfRU5DUllQVElPTl9NT0RFIEVuY3J5cHRpb25tb2RlOworCXU4IHdlcF9lbmFibGVkOworCXU4IGF1dGhfbW9kZTsKIH07CiAKIC8qKiBDdXJyZW50IEJhc2ljIFNlcnZpY2UgU2V0IFN0YXRlIFN0cnVjdHVyZSAqLwpAQCAtMTg0LDcgKzE4Myw3IEBACiAKIAlzdHJ1Y3QgV0xBTl84MDJfMTFfU1NJRCBzc2lkOwogCXU4IGNoYW5uZWw7Ci0JZW51bSBXTEFOXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFIG1vZGU7CisJdTggbW9kZTsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAKIAkvKiogV0VQIGtleXMgKi8KQEAgLTE5OCw3ICsxOTcsNiBAQAogCXN0cnVjdCB3bGFuXzgwMl8xMV9zZWN1cml0eSBzZWNpbmZvOwogCiAJLyoqIFdQQSBJbmZvcm1hdGlvbiBFbGVtZW50cyovCi0jZGVmaW5lIE1BWF9XUEFfSUVfTEVOIDY0CiAJdTggd3BhX2llW01BWF9XUEFfSUVfTEVOXTsKIAl1OCB3cGFfaWVfbGVuOwogfTsKQEAgLTI1NCw3ICsyNTIsOCBAQAogCS8qKiBjdXJyZW50IHNzaWQvYnNzaWQgcmVsYXRlZCBwYXJhbWV0ZXJzKi8KIAlzdHJ1Y3QgY3VycmVudF9ic3NfcGFyYW1zIGN1cmJzc3BhcmFtczsKIAotCWVudW0gV0xBTl84MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSBpbmZyYW1vZGU7CisJLyogSVdfTU9ERV8qICovCisJdTggbW9kZTsKIAogCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqcGF0dGVtcHRlZGJzc2Rlc2M7CiAKQEAgLTMzOSw3ICszMzgsNiBAQAogCXN0cnVjdCBXTEFOXzgwMl8xMV9LRVkgd3BhX3VuaWNhc3Rfa2V5OwogCiAJLyoqIFdQQSBJbmZvcm1hdGlvbiBFbGVtZW50cyovCi0jZGVmaW5lIE1BWF9XUEFfSUVfTEVOIDY0CiAJdTggd3BhX2llW01BWF9XUEFfSUVfTEVOXTsKIAl1OCB3cGFfaWVfbGVuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZncuYwppbmRleCBiMTk0YTQ1Li41YzYzYzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Z3LmMKQEAgLTE5NCwxNiArMTk0LDEzIEBACiAJYWRhcHRlci0+c2Nhbm1vZGUgPSBjbWRfYnNzX3R5cGVfYW55OwogCiAJLyogODAyLjExIHNwZWNpZmljICovCi0JYWRhcHRlci0+c2VjaW5mby5XRVBzdGF0dXMgPSB3bGFuODAyXzExV0VQZGlzYWJsZWQ7CisJYWRhcHRlci0+c2VjaW5mby53ZXBfZW5hYmxlZCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihhZGFwdGVyLT53ZXBfa2V5cykgLyBzaXplb2YoYWRhcHRlci0+d2VwX2tleXNbMF0pOwogCSAgICAgaSsrKQogCQltZW1zZXQoJmFkYXB0ZXItPndlcF9rZXlzW2ldLCAwLCBzaXplb2Yoc3RydWN0IFdMQU5fODAyXzExX0tFWSkpOwogCWFkYXB0ZXItPndlcF90eF9rZXlpZHggPSAwOwotCWFkYXB0ZXItPnNlY2luZm8uV0VQc3RhdHVzID0gd2xhbjgwMl8xMVdFUGRpc2FibGVkOwotCWFkYXB0ZXItPnNlY2luZm8uYXV0aG1vZGUgPSB3bGFuODAyXzExYXV0aG1vZGVvcGVuOwotCWFkYXB0ZXItPnNlY2luZm8uYXV0aDF4YWxnID0gV0xBTl8xWF9BVVRIX0FMR19OT05FOwotCWFkYXB0ZXItPnNlY2luZm8uRW5jcnlwdGlvbm1vZGUgPSBDSVBIRVJfTk9ORTsKLQlhZGFwdGVyLT5pbmZyYW1vZGUgPSB3bGFuODAyXzExaW5mcmFzdHJ1Y3R1cmU7CisJYWRhcHRlci0+c2VjaW5mby5hdXRoX21vZGUgPSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKKwlhZGFwdGVyLT5tb2RlID0gSVdfTU9ERV9JTkZSQTsKIAogCWFkYXB0ZXItPmFzc29jX3JlcSA9IE5VTEw7CiAKQEAgLTMzNiwxOCArMzMzLDIyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXB0ZW1wbm9kZSA9IGFkYXB0ZXItPmN1cl9jbWQ7CisJaWYgKHB0ZW1wbm9kZSA9PSBOVUxMKSB7CisJCWxic19wcl9kZWJ1ZygxLCAiUFRlbXBub2RlIEVtcHR5XG4iKTsKKwkJcmV0dXJuOworCX0KKwogCWNtZCA9IChzdHJ1Y3QgY21kX2RzX2NvbW1hbmQgKilwdGVtcG5vZGUtPmJ1ZnZpcnR1YWxhZGRyOworCWlmICghY21kKSB7CisJCWxic19wcl9kZWJ1ZygxLCAiY21kIGlzIE5VTExcbiIpOworCQlyZXR1cm47CisJfQogCiAJbGJzX3ByX2luZm8oImNvbW1hbmRfdGltZXJfZm4gZmlyZWQgKCV4KVxuIiwgY21kLT5jb21tYW5kKTsKIAogCWlmICghYWRhcHRlci0+ZndfcmVhZHkpCiAJCXJldHVybjsKIAotCWlmIChwdGVtcG5vZGUgPT0gTlVMTCkgewotCQlsYnNfcHJfZGVidWcoMSwgIlBUZW1wbm9kZSBFbXB0eVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAlhZGFwdGVyLT5jdXJfY21kID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5kcml2ZXJfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYwppbmRleCA2OTVmYjZhLi5hZTZmNzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYwpAQCAtMzg4LDcgKzM4OCw3IEBACiAJdXNiX2ZpbGxfYnVsa191cmIoY2FyZHAtPnJ4X3VyYiwgY2FyZHAtPnVkZXYsCiAJCQkgIHVzYl9yY3ZidWxrcGlwZShjYXJkcC0+dWRldiwKIAkJCQkJICBjYXJkcC0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAotCQkJICBza2ItPnRhaWwgKyBJUEZJRUxEX0FMSUdOX09GRlNFVCwKKwkJCSAgKHZvaWQgKikgKHNrYi0+dGFpbCArIChzaXplX3QpIElQRklFTERfQUxJR05fT0ZGU0VUKSwKIAkJCSAgTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUsIGNhbGxiYWNrZm4sCiAJCQkgIHJpbmZvKTsKIApAQCAtNjI2LDYgKzYyNiw3IEBACiAJCQkgICAgY2FyZHAtPnVzYl9ldmVudF9jYXVzZSk7CiAJCWlmIChjYXJkcC0+dXNiX2V2ZW50X2NhdXNlICYgMHhmZmZmMDAwMCkgewogCQkJbGliZXJ0YXNfc2VuZF90eF9mZWVkYmFjayhwcml2KTsKKwkJCXNwaW5fdW5sb2NrKCZwcml2LT5hZGFwdGVyLT5kcml2ZXJfbG9jayk7CiAJCQlicmVhazsKIAkJfQogCQljYXJkcC0+dXNiX2V2ZW50X2NhdXNlID0gbGUzMl90b19jcHUoY2FyZHAtPnVzYl9ldmVudF9jYXVzZSkgPDwgMzsKQEAgLTc3NSw3ICs3NzYsNiBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0jaWZkZWYgU1VQUE9SVF9CT09UX0NPTU1BTkQKIAljYXJkcC0+Ym9vdGNtZHJlc3AgPSAwOwogCWRvIHsKIAkJaW50IGogPSAwOwpAQCAtNzk2LDcgKzc5Niw2IEBACiAJCX0KIAkJcmV0dXJuIC0xOwogCX0KLSNlbmRpZgogCiAJaSA9IDA7CiAJcHJpdi0+YWRhcHRlci0+ZndfcmVhZHkgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuaAppbmRleCA3ODUxMTY3Li4xNzBkZmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuaApAQCAtMTIsNyArMTIsNiBAQAogI2RlZmluZSBVU0I4Mzg4X1ZJRF8yCTB4MDVhMwogI2RlZmluZSBVU0I4Mzg4X1BJRF8yCTB4ODM4OAogCi0jaWZkZWYgU1VQUE9SVF9CT09UX0NPTU1BTkQKICNkZWZpbmUgQk9PVF9DTURfRldfQllfVVNCICAgICAweDAxCiAjZGVmaW5lIEJPT1RfQ01EX0ZXX0lOX0VFUFJPTSAgMHgwMgogI2RlZmluZSBCT09UX0NNRF9VUERBVEVfQk9PVDIgIDB4MDMKQEAgLTM2LDcgKzM1LDYgQEAKIAl1OCAgdThyZXN1bHQ7CiAJdTggIGF1OGR1bXlbMl07CiB9OwotI2VuZGlmIC8qIFNVUFBPUlRfQk9PVF9DT01NQU5EICovCiAKIC8qIHJlYWQgY2FsbGJhY2sgcHJpdmF0ZSBkYXRhICovCiBzdHJ1Y3QgcmVhZF9jYl9pbmZvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pb2N0bC5jCmluZGV4IDgyYjM5NjQuLmE4Zjc2YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaW9jdGwuYwpAQCAtMjcsOTUgKzI3LDYgQEAKIAogI2RlZmluZSBXQUlUX0ZPUl9TQ0FOX1JSRVNVTFRfTUFYX1RJTUUgKDEwICogSFopCiAKLXN0YXRpYyBpbnQgc2V0cnhhbnRlbm5hKHdsYW5fcHJpdmF0ZSAqIHByaXYsIGludCBtb2RlKQotewotCWludCByZXQgPSAwOwotCXdsYW5fYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7Ci0KLQlpZiAobW9kZSAhPSBSRl9BTlRFTk5BXzEgJiYgbW9kZSAhPSBSRl9BTlRFTk5BXzIKLQkgICAgJiYgbW9kZSAhPSBSRl9BTlRFTk5BX0FVVE8pIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYWRhcHRlci0+cnhhbnRlbm5hbW9kZSA9IG1vZGU7Ci0KLQlsYnNfcHJfZGVidWcoMSwgIlNFVCBSWCBBbnRlbm5hIG1vZGUgdG8gMHglMDR4XG4iLCBhZGFwdGVyLT5yeGFudGVubmFtb2RlKTsKLQotCXJldCA9IGxpYmVydGFzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LCBjbWRfODAyXzExX3JmX2FudGVubmEsCi0JCQkJICAgIGNtZF9hY3Rfc2V0X3J4LAotCQkJCSAgICBjbWRfb3B0aW9uX3dhaXRmb3Jyc3AsIDAsCi0JCQkJICAgICZhZGFwdGVyLT5yeGFudGVubmFtb2RlKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHNldHR4YW50ZW5uYSh3bGFuX3ByaXZhdGUgKiBwcml2LCBpbnQgbW9kZSkKLXsKLQlpbnQgcmV0ID0gMDsKLQl3bGFuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwotCi0JaWYgKChtb2RlICE9IFJGX0FOVEVOTkFfMSkgJiYgKG1vZGUgIT0gUkZfQU5URU5OQV8yKQotCSAgICAmJiAobW9kZSAhPSBSRl9BTlRFTk5BX0FVVE8pKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWFkYXB0ZXItPnR4YW50ZW5uYW1vZGUgPSBtb2RlOwotCi0JbGJzX3ByX2RlYnVnKDEsICJTRVQgVFggQW50ZW5uYSBtb2RlIHRvIDB4JTA0eFxuIiwgYWRhcHRlci0+dHhhbnRlbm5hbW9kZSk7Ci0KLQlyZXQgPSBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgY21kXzgwMl8xMV9yZl9hbnRlbm5hLAotCQkJCSAgICBjbWRfYWN0X3NldF90eCwKLQkJCQkgICAgY21kX29wdGlvbl93YWl0Zm9ycnNwLCAwLAotCQkJCSAgICAmYWRhcHRlci0+dHhhbnRlbm5hbW9kZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGdldHJ4YW50ZW5uYSh3bGFuX3ByaXZhdGUgKiBwcml2LCBjaGFyICpidWYpCi17Ci0JaW50IHJldCA9IDA7Ci0Jd2xhbl9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKLQotCS8vIGNsZWFyIGl0LCBzbyB3ZSB3aWxsIGtub3cgaWYgdGhlIHZhbHVlCi0JLy8gcmV0dXJuZWQgYmVsb3cgaXMgY29ycmVjdCBvciBub3QuCi0JYWRhcHRlci0+cnhhbnRlbm5hbW9kZSA9IDA7Ci0KLQlyZXQgPSBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgY21kXzgwMl8xMV9yZl9hbnRlbm5hLAotCQkJCSAgICBjbWRfYWN0X2dldF9yeCwKLQkJCQkgICAgY21kX29wdGlvbl93YWl0Zm9ycnNwLCAwLCBOVUxMKTsKLQotCWlmIChyZXQpIHsKLQkJTEVBVkUoKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlsYnNfcHJfZGVidWcoMSwgIkdldCBSeCBBbnRlbm5hIG1vZGU6MHglMDR4XG4iLCBhZGFwdGVyLT5yeGFudGVubmFtb2RlKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0eCIsIGFkYXB0ZXItPnJ4YW50ZW5uYW1vZGUpICsgMTsKLX0KLQotc3RhdGljIGludCBnZXR0eGFudGVubmEod2xhbl9wcml2YXRlICogcHJpdiwgY2hhciAqYnVmKQotewotCWludCByZXQgPSAwOwotCXdsYW5fYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7Ci0KLQkvLyBjbGVhciBpdCwgc28gd2Ugd2lsbCBrbm93IGlmIHRoZSB2YWx1ZQotCS8vIHJldHVybmVkIGJlbG93IGlzIGNvcnJlY3Qgb3Igbm90LgotCWFkYXB0ZXItPnR4YW50ZW5uYW1vZGUgPSAwOwotCi0JcmV0ID0gbGliZXJ0YXNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsIGNtZF84MDJfMTFfcmZfYW50ZW5uYSwKLQkJCQkgICAgY21kX2FjdF9nZXRfdHgsCi0JCQkJICAgIGNtZF9vcHRpb25fd2FpdGZvcnJzcCwgMCwgTlVMTCk7Ci0KLQlpZiAocmV0KSB7Ci0JCUxFQVZFKCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JbGJzX3ByX2RlYnVnKDEsICJHZXQgVHggQW50ZW5uYSBtb2RlOjB4JTA0eFxuIiwgYWRhcHRlci0+dHhhbnRlbm5hbW9kZSk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwNHgiLCBhZGFwdGVyLT50eGFudGVubmFtb2RlKSArIDE7Ci19Ci0KIHN0YXRpYyBpbnQgd2xhbl9zZXRfcmVnaW9uKHdsYW5fcHJpdmF0ZSAqIHByaXYsIHUxNiByZWdpb25fY29kZSkKIHsKIAlpbnQgaTsKQEAgLTE0NCw5OTggKzU1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiAgQGJyaWVmIEdldC9TZXQgRmlybXdhcmUgd2FrZXVwIG1ldGhvZAotICoKLSAqICBAcGFyYW0gcHJpdgkJQSBwb2ludGVyIHRvIHdsYW5fcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gd3JxCSAgIAlBIHBvaW50ZXIgdG8gdXNlciBkYXRhCi0gKiAgQHJldHVybiAJICAgCTAtLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCi0gKi8KLXN0YXRpYyBpbnQgd2xhbl90eGNvbnRyb2wod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGl3cmVxICp3cnEpCi17Ci0Jd2xhbl9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKLQlpbnQgZGF0YTsKLQlFTlRFUigpOwotCi0JaWYgKChpbnQpd3JxLT51LmRhdGEubGVuZ3RoID09IDApIHsKLQkJaWYgKGNvcHlfdG9fdXNlcgotCQkgICAgKHdycS0+dS5kYXRhLnBvaW50ZXIsICZhZGFwdGVyLT5wa3R0eGN0cmwsIHNpemVvZih1MzIpKSkgewotCQkJbGJzX3ByX2FsZXJ0KCJjb3B5X3RvX3VzZXIgZmFpbGVkIVxuIik7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICgoaW50KXdycS0+dS5kYXRhLmxlbmd0aCA+IDEpIHsKLQkJCWxic19wcl9hbGVydCgiaW9jdGwgdG9vIG1hbnkgYXJncyFcbiIpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZkYXRhLCB3cnEtPnUuZGF0YS5wb2ludGVyLCBzaXplb2YoaW50KSkpIHsKLQkJCWxic19wcl9hbGVydCgiQ29weSBmcm9tIHVzZXIgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0KLQkJYWRhcHRlci0+cGt0dHhjdHJsID0gKHUzMikgZGF0YTsKLQl9Ci0KLQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxOwotCi0JTEVBVkUoKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIEdldC9TZXQgTlVMTCBQYWNrYWdlIGdlbmVyYXRpb24gaW50ZXJ2YWwKLSAqCi0gKiAgQHBhcmFtIHByaXYJCUEgcG9pbnRlciB0byB3bGFuX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHdycQkgICAJQSBwb2ludGVyIHRvIHVzZXIgZGF0YQotICogIEByZXR1cm4gCSAgIAkwLS1zdWNjZXNzLCBvdGhlcndpc2UgZmFpbAotICovCi1zdGF0aWMgaW50IHdsYW5fbnVsbF9wa3RfaW50ZXJ2YWwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGl3cmVxICp3cnEpCi17Ci0Jd2xhbl9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKLQlpbnQgZGF0YTsKLQlFTlRFUigpOwotCi0JaWYgKChpbnQpd3JxLT51LmRhdGEubGVuZ3RoID09IDApIHsKLQkJZGF0YSA9IGFkYXB0ZXItPm51bGxwa3RpbnRlcnZhbDsKLQotCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZkYXRhLCBzaXplb2YoaW50KSkpIHsKLQkJCWxic19wcl9hbGVydCggImNvcHlfdG9fdXNlciBmYWlsZWQhXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKChpbnQpd3JxLT51LmRhdGEubGVuZ3RoID4gMSkgewotCQkJbGJzX3ByX2FsZXJ0KCAiaW9jdGwgdG9vIG1hbnkgYXJncyFcbiIpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZkYXRhLCB3cnEtPnUuZGF0YS5wb2ludGVyLCBzaXplb2YoaW50KSkpIHsKLQkJCWxic19wcl9kZWJ1ZygxLCAiQ29weSBmcm9tIHVzZXIgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0KLQkJYWRhcHRlci0+bnVsbHBrdGludGVydmFsID0gZGF0YTsKLQl9Ci0KLQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxOwotCi0JTEVBVkUoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bGFuX2dldF9yeGluZm8od2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGl3cmVxICp3cnEpCi17Ci0Jd2xhbl9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKLQlpbnQgZGF0YVsyXTsKLQlFTlRFUigpOwotCWRhdGFbMF0gPSBhZGFwdGVyLT5TTlJbVFlQRV9SWFBEXVtUWVBFX05PQVZHXTsKLQlkYXRhWzFdID0gYWRhcHRlci0+cnhwZF9yYXRlOwotCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgZGF0YSwgc2l6ZW9mKGludCkgKiAyKSkgewotCQlsYnNfcHJfZGVidWcoMSwgIkNvcHkgdG8gdXNlciBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0Jd3JxLT51LmRhdGEubGVuZ3RoID0gMjsKLQlMRUFWRSgpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsYW5fZ2V0X3Nucih3bGFuX3ByaXZhdGUgKiBwcml2LCBzdHJ1Y3QgaXdyZXEgKndycSkKLXsKLQlpbnQgcmV0ID0gMDsKLQl3bGFuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwotCWludCBkYXRhWzRdOwotCi0JRU5URVIoKTsKLQltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKLQlpZiAod3JxLT51LmRhdGEubGVuZ3RoKSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCB3cnEtPnUuZGF0YS5wb2ludGVyLAotCQkgICAgIG1pbl90KHNpemVfdCwgd3JxLT51LmRhdGEubGVuZ3RoLCA0KSAqIHNpemVvZihpbnQpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAoKHdycS0+dS5kYXRhLmxlbmd0aCA9PSAwKSB8fCAoZGF0YVswXSA9PSAwKSB8fCAoZGF0YVswXSA9PSAxKSkgewotCQlpZiAoYWRhcHRlci0+Y29ubmVjdF9zdGF0dXMgPT0gbGliZXJ0YXNfY29ubmVjdGVkKSB7Ci0JCQlyZXQgPSBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQkJCSAgICBjbWRfODAyXzExX3Jzc2ksCi0JCQkJCQkgICAgMCwKLQkJCQkJCSAgICBjbWRfb3B0aW9uX3dhaXRmb3Jyc3AsCi0JCQkJCQkgICAgMCwgTlVMTCk7Ci0KLQkJCWlmIChyZXQpIHsKLQkJCQlMRUFWRSgpOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAod3JxLT51LmRhdGEubGVuZ3RoID09IDApIHsKLQkJZGF0YVswXSA9IGFkYXB0ZXItPlNOUltUWVBFX0JFQUNPTl1bVFlQRV9OT0FWR107Ci0JCWRhdGFbMV0gPSBhZGFwdGVyLT5TTlJbVFlQRV9CRUFDT05dW1RZUEVfQVZHXTsKLQkJZGF0YVsyXSA9IGFkYXB0ZXItPlNOUltUWVBFX1JYUERdW1RZUEVfTk9BVkddOwotCQlkYXRhWzNdID0gYWRhcHRlci0+U05SW1RZUEVfUlhQRF1bVFlQRV9BVkddIC8gQVZHX1NDQUxFOwotCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIGRhdGEsIHNpemVvZihpbnQpICogNCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJd3JxLT51LmRhdGEubGVuZ3RoID0gNDsKLQl9IGVsc2UgaWYgKGRhdGFbMF0gPT0gMCkgewotCQlkYXRhWzBdID0gYWRhcHRlci0+U05SW1RZUEVfQkVBQ09OXVtUWVBFX05PQVZHXTsKLQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBkYXRhLCBzaXplb2YoaW50KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJd3JxLT51LmRhdGEubGVuZ3RoID0gMTsKLQl9IGVsc2UgaWYgKGRhdGFbMF0gPT0gMSkgewotCQlkYXRhWzBdID0gYWRhcHRlci0+U05SW1RZUEVfQkVBQ09OXVtUWVBFX0FWR107Ci0JCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgZGF0YSwgc2l6ZW9mKGludCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXdycS0+dS5kYXRhLmxlbmd0aCA9IDE7Ci0JfSBlbHNlIGlmIChkYXRhWzBdID09IDIpIHsKLQkJZGF0YVswXSA9IGFkYXB0ZXItPlNOUltUWVBFX1JYUERdW1RZUEVfTk9BVkddOwotCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIGRhdGEsIHNpemVvZihpbnQpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxOwotCX0gZWxzZSBpZiAoZGF0YVswXSA9PSAzKSB7Ci0JCWRhdGFbMF0gPSBhZGFwdGVyLT5TTlJbVFlQRV9SWFBEXVtUWVBFX0FWR10gLyBBVkdfU0NBTEU7Ci0JCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgZGF0YSwgc2l6ZW9mKGludCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXdycS0+dS5kYXRhLmxlbmd0aCA9IDE7Ci0JfSBlbHNlCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KLQlMRUFWRSgpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsYW5fYmVhY29uX2ludGVydmFsKHdsYW5fcHJpdmF0ZSAqIHByaXYsIHN0cnVjdCBpd3JlcSAqd3JxKQotewotCWludCBkYXRhOwotCXdsYW5fYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7Ci0KLQlpZiAod3JxLT51LmRhdGEubGVuZ3RoID4gMCkgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmRhdGEsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHNpemVvZihpbnQpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWxic19wcl9kZWJ1ZygxLCAiV0xBTiBTRVQgQkVBQ09OIElOVEVSVkFMOiAlZFxuIiwgZGF0YSk7Ci0JCWlmICgoZGF0YSA+IE1SVkRSVl9NQVhfQkVBQ09OX0lOVEVSVkFMKQotCQkgICAgfHwgKGRhdGEgPCBNUlZEUlZfTUlOX0JFQUNPTl9JTlRFUlZBTCkpCi0JCQlyZXR1cm4gLUVOT1RTVVBQOwotCQlhZGFwdGVyLT5iZWFjb25wZXJpb2QgPSBkYXRhOwotCX0KLQlkYXRhID0gYWRhcHRlci0+YmVhY29ucGVyaW9kOwotCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJmRhdGEsIHNpemVvZihpbnQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2xhbl9nZXRfcnNzaSh3bGFuX3ByaXZhdGUgKiBwcml2LCBzdHJ1Y3QgaXdyZXEgKndycSkKLXsKLQlpbnQgcmV0ID0gMDsKLQl3bGFuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwotCWludCB0ZW1wOwotCWludCBkYXRhID0gMDsKLQlpbnQgKnZhbDsKLQotCUVOVEVSKCk7Ci0JZGF0YSA9IFNVQkNNRF9EQVRBKHdycSk7Ci0JaWYgKChkYXRhID09IDApIHx8IChkYXRhID09IDEpKSB7Ci0JCXJldCA9IGxpYmVydGFzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LAotCQkJCQkgICAgY21kXzgwMl8xMV9yc3NpLAotCQkJCQkgICAgMCwgY21kX29wdGlvbl93YWl0Zm9ycnNwLAotCQkJCQkgICAgMCwgTlVMTCk7Ci0JCWlmIChyZXQpIHsKLQkJCUxFQVZFKCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0Jc3dpdGNoIChkYXRhKSB7Ci0JY2FzZSAwOgotCi0JCXRlbXAgPSBDQUxfUlNTSShhZGFwdGVyLT5TTlJbVFlQRV9CRUFDT05dW1RZUEVfTk9BVkddLAotCQkJCWFkYXB0ZXItPk5GW1RZUEVfQkVBQ09OXVtUWVBFX05PQVZHXSk7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJdGVtcCA9IENBTF9SU1NJKGFkYXB0ZXItPlNOUltUWVBFX0JFQUNPTl1bVFlQRV9BVkddLAotCQkJCWFkYXB0ZXItPk5GW1RZUEVfQkVBQ09OXVtUWVBFX0FWR10pOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXRlbXAgPSBDQUxfUlNTSShhZGFwdGVyLT5TTlJbVFlQRV9SWFBEXVtUWVBFX05PQVZHXSwKLQkJCQlhZGFwdGVyLT5ORltUWVBFX1JYUERdW1RZUEVfTk9BVkddKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQl0ZW1wID0gQ0FMX1JTU0koYWRhcHRlci0+U05SW1RZUEVfUlhQRF1bVFlQRV9BVkddIC8gQVZHX1NDQUxFLAotCQkJCWFkYXB0ZXItPk5GW1RZUEVfUlhQRF1bVFlQRV9BVkddIC8gQVZHX1NDQUxFKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0JdmFsID0gKGludCAqKXdycS0+dS5uYW1lOwotCSp2YWwgPSB0ZW1wOwotCi0JTEVBVkUoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bGFuX2dldF9uZih3bGFuX3ByaXZhdGUgKiBwcml2LCBzdHJ1Y3QgaXdyZXEgKndycSkKLXsKLQlpbnQgcmV0ID0gMDsKLQl3bGFuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwotCWludCB0ZW1wOwotCWludCBkYXRhID0gMDsKLQlpbnQgKnZhbDsKLQotCWRhdGEgPSBTVUJDTURfREFUQSh3cnEpOwotCWlmICgoZGF0YSA9PSAwKSB8fCAoZGF0YSA9PSAxKSkgewotCQlyZXQgPSBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQkJICAgIGNtZF84MDJfMTFfcnNzaSwKLQkJCQkJICAgIDAsIGNtZF9vcHRpb25fd2FpdGZvcnJzcCwKLQkJCQkJICAgIDAsIE5VTEwpOwotCi0JCWlmIChyZXQpIHsKLQkJCUxFQVZFKCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0Jc3dpdGNoIChkYXRhKSB7Ci0JY2FzZSAwOgotCQl0ZW1wID0gYWRhcHRlci0+TkZbVFlQRV9CRUFDT05dW1RZUEVfTk9BVkddOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXRlbXAgPSBhZGFwdGVyLT5ORltUWVBFX0JFQUNPTl1bVFlQRV9BVkddOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXRlbXAgPSBhZGFwdGVyLT5ORltUWVBFX1JYUERdW1RZUEVfTk9BVkddOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXRlbXAgPSBhZGFwdGVyLT5ORltUWVBFX1JYUERdW1RZUEVfQVZHXSAvIEFWR19TQ0FMRTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQl0ZW1wID0gQ0FMX05GKHRlbXApOwotCi0JbGJzX3ByX2RlYnVnKDEsICIlczogdGVtcCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHRlbXApOwotCXZhbCA9IChpbnQgKil3cnEtPnUubmFtZTsKLQkqdmFsID0gdGVtcDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bGFuX2dldF90eHJhdGVfaW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGlmcmVxICpyZXEpCi17Ci0Jd2xhbl9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKLQlpbnQgKnBkYXRhOwotCXN0cnVjdCBpd3JlcSAqd3JxID0gKHN0cnVjdCBpd3JlcSAqKXJlcTsKLQlpbnQgcmV0ID0gMDsKLQlhZGFwdGVyLT50eHJhdGUgPSAwOwotCWxic19wcl9kZWJ1ZygxLCAid2xhbl9nZXRfdHhyYXRlX2lvY3RsXG4iKTsKLQlyZXQgPSBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgY21kXzgwMl8xMV90eF9yYXRlX3F1ZXJ5LAotCQkJCSAgICBjbWRfYWN0X2dldCwgY21kX29wdGlvbl93YWl0Zm9ycnNwLAotCQkJCSAgICAwLCBOVUxMKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcGRhdGEgPSAoaW50ICopd3JxLT51Lm5hbWU7Ci0JKnBkYXRhID0gKGludClhZGFwdGVyLT50eHJhdGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2xhbl9nZXRfYWRob2Nfc3RhdHVzX2lvY3RsKHdsYW5fcHJpdmF0ZSAqIHByaXYsIHN0cnVjdCBpd3JlcSAqd3JxKQotewotCWNoYXIgc3RhdHVzWzY0XTsKLQl3bGFuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwotCi0JbWVtc2V0KHN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpOwotCi0Jc3dpdGNoIChhZGFwdGVyLT5pbmZyYW1vZGUpIHsKLQljYXNlIHdsYW44MDJfMTFpYnNzOgotCQlpZiAoYWRhcHRlci0+Y29ubmVjdF9zdGF0dXMgPT0gbGliZXJ0YXNfY29ubmVjdGVkKSB7Ci0JCQlpZiAoYWRhcHRlci0+YWRob2NjcmVhdGUpCi0JCQkJbWVtY3B5KCZzdGF0dXMsICJBZGhvY1N0YXJ0ZWQiLCBzaXplb2Yoc3RhdHVzKSk7Ci0JCQllbHNlCi0JCQkJbWVtY3B5KCZzdGF0dXMsICJBZGhvY0pvaW5lZCIsIHNpemVvZihzdGF0dXMpKTsKLQkJfSBlbHNlIHsKLQkJCW1lbWNweSgmc3RhdHVzLCAiQWRob2NJZGxlIiwgc2l6ZW9mKHN0YXR1cykpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2Ugd2xhbjgwMl8xMWluZnJhc3RydWN0dXJlOgotCQltZW1jcHkoJnN0YXR1cywgIkluZnJhbW9kZSIsIHNpemVvZihzdGF0dXMpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbWVtY3B5KCZzdGF0dXMsICJBdXRvVW5rbm93bm1vZGUiLCBzaXplb2Yoc3RhdHVzKSk7Ci0JCWJyZWFrOwotCX0KLQotCWxic19wcl9kZWJ1ZygxLCAic3RhdHVzID0gJXNcbiIsIHN0YXR1cyk7Ci0Jd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKHN0YXR1cykgKyAxOwotCi0JaWYgKHdycS0+dS5kYXRhLnBvaW50ZXIpIHsKLQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLAotCQkJCSAmc3RhdHVzLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JTEVBVkUoKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIFNldC9HZXQgV1BBIElFCi0gKiAgQHBhcmFtIHByaXYgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB3bGFuX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHJlcQkJCUEgcG9pbnRlciB0byBpZnJlcSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICAJCTAgLS1zdWNjZXNzLCBvdGhlcndpc2UgZmFpbAotICovCi1zdGF0aWMgaW50IHdsYW5fc2V0d3BhaWVfaW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGlmcmVxICpyZXEpCi17Ci0Jc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopcmVxOwotCXdsYW5fYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7Ci0JaW50IHJldCA9IDA7Ci0KLQlFTlRFUigpOwotCi0JaWYgKHdycS0+dS5kYXRhLmxlbmd0aCkgewotCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoID4gc2l6ZW9mKGFkYXB0ZXItPndwYV9pZSkpIHsKLQkJCWxic19wcl9kZWJ1ZygxLCAiZmFpbGVkIHRvIGNvcHkgV1BBIElFLCB0b28gYmlnIFxuIik7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlpZiAoY29weV9mcm9tX3VzZXIoYWRhcHRlci0+d3BhX2llLCB3cnEtPnUuZGF0YS5wb2ludGVyLAotCQkJCSAgIHdycS0+dS5kYXRhLmxlbmd0aCkpIHsKLQkJCWxic19wcl9kZWJ1ZygxLCAiZmFpbGVkIHRvIGNvcHkgV1BBIElFIFxuIik7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlhZGFwdGVyLT53cGFfaWVfbGVuID0gd3JxLT51LmRhdGEubGVuZ3RoOwotCQlsYnNfcHJfZGVidWcoMSwgIlNldCB3cGFfaWVfbGVuPSVkIElFPSUjeFxuIiwgYWRhcHRlci0+d3BhX2llX2xlbiwKLQkJICAgICAgIGFkYXB0ZXItPndwYV9pZVswXSk7Ci0JCWxic19kYmdfaGV4KCJ3cGFfaWUiLCBhZGFwdGVyLT53cGFfaWUsIGFkYXB0ZXItPndwYV9pZV9sZW4pOwotCQlpZiAoYWRhcHRlci0+d3BhX2llWzBdID09IFdQQV9JRSkKLQkJCWFkYXB0ZXItPnNlY2luZm8uV1BBZW5hYmxlZCA9IDE7Ci0JCWVsc2UgaWYgKGFkYXB0ZXItPndwYV9pZVswXSA9PSBXUEEyX0lFKQotCQkJYWRhcHRlci0+c2VjaW5mby5XUEEyZW5hYmxlZCA9IDE7Ci0JCWVsc2UgewotCQkJYWRhcHRlci0+c2VjaW5mby5XUEFlbmFibGVkID0gMDsKLQkJCWFkYXB0ZXItPnNlY2luZm8uV1BBMmVuYWJsZWQgPSAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJbWVtc2V0KGFkYXB0ZXItPndwYV9pZSwgMCwgc2l6ZW9mKGFkYXB0ZXItPndwYV9pZSkpOwotCQlhZGFwdGVyLT53cGFfaWVfbGVuID0gd3JxLT51LmRhdGEubGVuZ3RoOwotCQlsYnNfcHJfZGVidWcoMSwgIlJlc2V0IHdwYV9pZV9sZW49JWQgSUU9JSN4XG4iLAotCQkgICAgICAgYWRhcHRlci0+d3BhX2llX2xlbiwgYWRhcHRlci0+d3BhX2llWzBdKTsKLQkJYWRhcHRlci0+c2VjaW5mby5XUEFlbmFibGVkID0gMDsKLQkJYWRhcHRlci0+c2VjaW5mby5XUEEyZW5hYmxlZCA9IDA7Ci0JfQotCi0JLy8gZW5hYmxlL2Rpc2FibGUgUlNOIGluIGZpcm13YXJlIGlmIFdQQSBpcyBlbmFibGVkL2Rpc2FibGVkCi0JLy8gZGVwZW5kaW5nIG9uIHZhcmlhYmxlIGFkYXB0ZXItPnNlY2luZm8uV1BBZW5hYmxlZCBpcyBzZXQgb3Igbm90Ci0JcmV0ID0gbGliZXJ0YXNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsIGNtZF84MDJfMTFfZW5hYmxlX3JzbiwKLQkJCQkgICAgY21kX2FjdF9zZXQsIGNtZF9vcHRpb25fd2FpdGZvcnJzcCwKLQkJCQkgICAgMCwgTlVMTCk7Ci0KLQlMRUFWRSgpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogIEBicmllZiBTZXQgQXV0byBwcmVzY2FuCi0gKiAgQHBhcmFtIHByaXYgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB3bGFuX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHdycQkJCUEgcG9pbnRlciB0byBpd3JlcSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICAJCTAgLS1zdWNjZXNzLCBvdGhlcndpc2UgZmFpbAotICovCi1zdGF0aWMgaW50IHdsYW5fc3ViY21kX3NldHByZXNjYW5faW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGl3cmVxICp3cnEpCi17Ci0JaW50IGRhdGE7Ci0Jd2xhbl9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKLQlpbnQgKnZhbDsKLQotCWRhdGEgPSBTVUJDTURfREFUQSh3cnEpOwotCWxic19wcl9kZWJ1ZygxLCAiV0xBTl9TVUJDTURfU0VUX1BSRVNDQU4gJWRcbiIsIGRhdGEpOwotCWFkYXB0ZXItPnByZXNjYW4gPSBkYXRhOwotCi0JdmFsID0gKGludCAqKXdycS0+dS5uYW1lOwotCSp2YWwgPSBkYXRhOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsYW5fc2V0X211bHRpcGxlX2R0aW1faW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGlmcmVxICpyZXEpCi17Ci0Jc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopcmVxOwotCXUzMiBtZHRpbTsKLQlpbnQgaWRhdGE7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlFTlRFUigpOwotCi0JaWRhdGEgPSBTVUJDTURfREFUQSh3cnEpOwotCW1kdGltID0gKHUzMikgaWRhdGE7Ci0JaWYgKCgobWR0aW0gPj0gTVJWRFJWX01JTl9NVUxUSVBMRV9EVElNKQotCSAgICAgJiYgKG1kdGltIDw9IE1SVkRSVl9NQVhfTVVMVElQTEVfRFRJTSkpCi0JICAgIHx8IChtZHRpbSA9PSBNUlZEUlZfSUdOT1JFX01VTFRJUExFX0RUSU0pKSB7Ci0JCXByaXYtPmFkYXB0ZXItPm11bHRpcGxlZHRpbSA9IG1kdGltOwotCQlyZXQgPSAwOwotCX0KLQlpZiAocmV0KQotCQlsYnNfcHJfZGVidWcoMSwgIkludmFsaWQgcGFyYW1ldGVyLCBtdWx0aXBsZWR0aW0gbm90IGNoYW5nZWQuXG4iKTsKLQotCUxFQVZFKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIFNldCBhdXRoZW50aWNhdGlvbiBtb2RlCi0gKiAgQHBhcmFtIHByaXYgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB3bGFuX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHJlcQkJCUEgcG9pbnRlciB0byBpZnJlcSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICAJCTAgLS1zdWNjZXNzLCBvdGhlcndpc2UgZmFpbAotICovCi1zdGF0aWMgaW50IHdsYW5fc2V0YXV0aGFsZ19pb2N0bCh3bGFuX3ByaXZhdGUgKiBwcml2LCBzdHJ1Y3QgaWZyZXEgKnJlcSkKLXsKLQlpbnQgYWxnOwotCXN0cnVjdCBpd3JlcSAqd3JxID0gKHN0cnVjdCBpd3JlcSAqKXJlcTsKLQl3bGFuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwotCi0JaWYgKHdycS0+dS5kYXRhLmZsYWdzID09IDApIHsKLQkJLy9mcm9tIGl3cHJpdiBzdWJjbWQKLQkJYWxnID0gU1VCQ01EX0RBVEEod3JxKTsKLQl9IGVsc2UgewotCQkvL2Zyb20gd3BhX3N1cHBsaWNhbnQgc3ViY21kCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmYWxnLCB3cnEtPnUuZGF0YS5wb2ludGVyLCBzaXplb2YoYWxnKSkpIHsKLQkJCWxic19wcl9kZWJ1ZygxLCAiQ29weSBmcm9tIHVzZXIgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfQotCi0JbGJzX3ByX2RlYnVnKDEsICJhdXRoIGFsZyBpcyAlI3hcbiIsIGFsZyk7Ci0KLQlzd2l0Y2ggKGFsZykgewotCWNhc2UgQVVUSF9BTEdfU0hBUkVEX0tFWToKLQkJYWRhcHRlci0+c2VjaW5mby5hdXRobW9kZSA9IHdsYW44MDJfMTFhdXRobW9kZXNoYXJlZDsKLQkJYnJlYWs7Ci0JY2FzZSBBVVRIX0FMR19ORVRXT1JLX0VBUDoKLQkJYWRhcHRlci0+c2VjaW5mby5hdXRobW9kZSA9Ci0JCSAgICB3bGFuODAyXzExYXV0aG1vZGVuZXR3b3JrRUFQOwotCQlicmVhazsKLQljYXNlIEFVVEhfQUxHX09QRU5fU1lTVEVNOgotCWRlZmF1bHQ6Ci0JCWFkYXB0ZXItPnNlY2luZm8uYXV0aG1vZGUgPSB3bGFuODAyXzExYXV0aG1vZGVvcGVuOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogIEBicmllZiBTZXQgODAyLjF4IGF1dGhlbnRpY2F0aW9uIG1vZGUKLSAqICBAcGFyYW0gcHJpdiAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHdsYW5fcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gcmVxCQkJQSBwb2ludGVyIHRvIGlmcmVxIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIAkJMCAtLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCi0gKi8KLXN0YXRpYyBpbnQgd2xhbl9zZXQ4MDIxeGF1dGhhbGdfaW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGlmcmVxICpyZXEpCi17Ci0JaW50IGFsZzsKLQlzdHJ1Y3QgaXdyZXEgKndycSA9IChzdHJ1Y3QgaXdyZXEgKilyZXE7Ci0KLQlpZiAod3JxLT51LmRhdGEuZmxhZ3MgPT0gMCkgewotCQkvL2Zyb20gaXdwcml2IHN1YmNtZAotCQlhbGcgPSBTVUJDTURfREFUQSh3cnEpOwotCX0gZWxzZSB7Ci0JCS8vZnJvbSB3cGFfc3VwcGxpY2FudCBzdWJjbWQKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbGcsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHNpemVvZihpbnQpKSkgewotCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5IGZyb20gdXNlciBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9Ci0JbGJzX3ByX2RlYnVnKDEsICI4MDIuMXggYXV0aCBhbGcgaXMgJSN4XG4iLCBhbGcpOwotCXByaXYtPmFkYXB0ZXItPnNlY2luZm8uYXV0aDF4YWxnID0gYWxnOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsYW5fc2V0ZW5jcnlwdGlvbm1vZGVfaW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGlmcmVxICpyZXEpCi17Ci0JaW50IG1vZGU7Ci0Jc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopcmVxOwotCi0JRU5URVIoKTsKLQotCWlmICh3cnEtPnUuZGF0YS5mbGFncyA9PSAwKSB7Ci0JCS8vZnJvbSBpd3ByaXYgc3ViY21kCi0JCW1vZGUgPSBTVUJDTURfREFUQSh3cnEpOwotCX0gZWxzZSB7Ci0JCS8vZnJvbSB3cGFfc3VwcGxpY2FudCBzdWJjbWQKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZtb2RlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCBzaXplb2YoaW50KSkpIHsKLQkJCWxic19wcl9kZWJ1ZygxLCAiQ29weSBmcm9tIHVzZXIgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfQotCWxic19wcl9kZWJ1ZygxLCAiZW5jcnlwdGlvbiBtb2RlIGlzICUjeFxuIiwgbW9kZSk7Ci0JcHJpdi0+YWRhcHRlci0+c2VjaW5mby5FbmNyeXB0aW9ubW9kZSA9IG1vZGU7Ci0KLQlMRUFWRSgpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhZGp1c3RfbXR1KHdsYW5fcHJpdmF0ZSAqIHByaXYpCi17Ci0JaW50IG10dV9pbmNyZW1lbnQgPSAwOwotCi0JaWYgKHByaXYtPmFkYXB0ZXItPmxpbmttb2RlID09IFdMQU5fTElOS01PREVfODAyXzExKQotCQltdHVfaW5jcmVtZW50ICs9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkcik7Ci0KLQlpZiAocHJpdi0+YWRhcHRlci0+cmFkaW9tb2RlID09IFdMQU5fUkFESU9NT0RFX1JBRElPVEFQKQotCQltdHVfaW5jcmVtZW50ICs9IG1heChzaXplb2Yoc3RydWN0IHR4X3JhZGlvdGFwX2hkciksCi0JCQkJICAgICBzaXplb2Yoc3RydWN0IHJ4X3JhZGlvdGFwX2hkcikpOwotCXByaXYtPndsYW5fZGV2Lm5ldGRldi0+bXR1ID0gRVRIX0ZSQU1FX0xFTgotCSAgICAtIHNpemVvZihzdHJ1Y3QgZXRoaGRyKQotCSAgICArIG10dV9pbmNyZW1lbnQ7Ci19Ci0KLS8qKgotICogIEBicmllZiBTZXQgTGluay1MYXllciBMYXllciBtb2RlCi0gKiAgQHBhcmFtIHByaXYgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB3bGFuX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHJlcQkJCUEgcG9pbnRlciB0byBpZnJlcSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICAJCTAgLS1zdWNjZXNzLCBvdGhlcndpc2UgZmFpbAotICovCi1zdGF0aWMgaW50IHdsYW5fc2V0X2xpbmttb2RlX2lvY3RsKHdsYW5fcHJpdmF0ZSAqIHByaXYsIHN0cnVjdCBpZnJlcSAqcmVxKQotewotCWludCBtb2RlOwotCi0JbW9kZSA9IChpbnQpKChzdHJ1Y3QgaWZyZXEgKikoKHU4ICopIHJlcSArIDQpKS0+aWZyX2RhdGE7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIFdMQU5fTElOS01PREVfODAyXzM6Ci0JCXByaXYtPmFkYXB0ZXItPmxpbmttb2RlID0gbW9kZTsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0xJTktNT0RFXzgwMl8xMToKLQkJcHJpdi0+YWRhcHRlci0+bGlua21vZGUgPSBtb2RlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlsYnNfcHJfaW5mbygidXNiODM4OC01OiBpbnZhbGlkIGxpbmstbGF5ZXIgbW9kZSAoJSN4KVxuIiwKLQkJICAgICAgIG1vZGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCWxic19wcl9kZWJ1ZygxLCAidXNiODM4OC01OiBsaW5rLWxheWVyIG1vZGUgaXMgJSN4XG4iLCBtb2RlKTsKLQotCWFkanVzdF9tdHUocHJpdik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIFNldCBSYWRpbyBoZWFkZXIgbW9kZQotICogIEBwYXJhbSBwcml2ICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gd2xhbl9wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSByZXEJCQlBIHBvaW50ZXIgdG8gaWZyZXEgc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgCQkwIC0tc3VjY2Vzcywgb3RoZXJ3aXNlIGZhaWwKLSAqLwotc3RhdGljIGludCB3bGFuX3NldF9yYWRpb21vZGVfaW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGlmcmVxICpyZXEpCi17Ci0JaW50IG1vZGU7Ci0KLQltb2RlID0gKGludCkoKHN0cnVjdCBpZnJlcSAqKSgodTggKikgcmVxICsgNCkpLT5pZnJfZGF0YTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgV0xBTl9SQURJT01PREVfTk9ORToKLQkJcHJpdi0+YWRhcHRlci0+cmFkaW9tb2RlID0gbW9kZTsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX1JBRElPTU9ERV9SQURJT1RBUDoKLQkJcHJpdi0+YWRhcHRlci0+cmFkaW9tb2RlID0gbW9kZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbGJzX3ByX2RlYnVnKDEsICJ1c2I4Mzg4LTU6IGludmFsaWQgcmFkaW8gaGVhZGVyIG1vZGUgKCUjeClcbiIsCi0JCSAgICAgICBtb2RlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWxic19wcl9kZWJ1ZygxLCAidXNiODM4OC01OiByYWRpby1oZWFkZXIgbW9kZSBpcyAlI3hcbiIsIG1vZGUpOwotCi0JYWRqdXN0X210dShwcml2KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIFNldCBEZWJ1ZyBoZWFkZXIgbW9kZQotICogIEBwYXJhbSBwcml2ICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gd2xhbl9wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSByZXEJCQlBIHBvaW50ZXIgdG8gaWZyZXEgc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgCQkwIC0tc3VjY2Vzcywgb3RoZXJ3aXNlIGZhaWwKLSAqLwotc3RhdGljIGludCB3bGFuX3NldF9kZWJ1Z21vZGVfaW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGlmcmVxICpyZXEpCi17Ci0JcHJpdi0+YWRhcHRlci0+ZGVidWdtb2RlID0gKGludCkoKHN0cnVjdCBpZnJlcSAqKQotCQkJCQkgKCh1OCAqKSByZXEgKyA0KSktPmlmcl9kYXRhOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsYW5fc3ViY21kX2dldHJ4YW50ZW5uYV9pb2N0bCh3bGFuX3ByaXZhdGUgKiBwcml2LAotCQkJCQkgIHN0cnVjdCBpZnJlcSAqcmVxKQotewotCWludCBsZW47Ci0JY2hhciBidWZbOF07Ci0Jc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopcmVxOwotCi0JbGJzX3ByX2RlYnVnKDEsICJXTEFOX1NVQkNNRF9HRVRSWEFOVEVOTkFcbiIpOwotCWxlbiA9IGdldHJ4YW50ZW5uYShwcml2LCBidWYpOwotCi0Jd3JxLT51LmRhdGEubGVuZ3RoID0gbGVuOwotCWlmICh3cnEtPnUuZGF0YS5wb2ludGVyKSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJmJ1ZiwgbGVuKSkgewotCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5VG9Vc2VyIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsYW5fc3ViY21kX2dldHR4YW50ZW5uYV9pb2N0bCh3bGFuX3ByaXZhdGUgKiBwcml2LAotCQkJCQkgIHN0cnVjdCBpZnJlcSAqcmVxKQotewotCWludCBsZW47Ci0JY2hhciBidWZbOF07Ci0Jc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopcmVxOwotCi0JbGJzX3ByX2RlYnVnKDEsICJXTEFOX1NVQkNNRF9HRVRUWEFOVEVOTkFcbiIpOwotCWxlbiA9IGdldHR4YW50ZW5uYShwcml2LCBidWYpOwotCi0Jd3JxLT51LmRhdGEubGVuZ3RoID0gbGVuOwotCWlmICh3cnEtPnUuZGF0YS5wb2ludGVyKSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJmJ1ZiwgbGVuKSkgewotCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5VG9Vc2VyIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIEdldCB0aGUgTUFDIFRTRiB2YWx1ZSBmcm9tIHRoZSBmaXJtd2FyZQotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgICAgIEEgcG9pbnRlciB0byB3bGFuX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHdycSAgICAgICAgICBBIHBvaW50ZXIgdG8gaXdyZXEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYnVmZmVyCi0gKiAgICAgICAgICAgICAgICAgICAgICBzcGFjZSB0byBzdG9yZSBhIFRTRiB2YWx1ZSByZXRyaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUKLSAqCi0gKiAgQHJldHVybiAgICAgICAgICAgICAwIGlmIHN1Y2Nlc3NmdWw7IElPQ1RMIGVycm9yIGNvZGUgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQgd2xhbl9nZXRfdHNmX2lvY3RsKHdsYW5fcHJpdmF0ZSAqIHByaXYsIHN0cnVjdCBpd3JlcSAqd3JxKQotewotCXU2NCB0c2Z2YWw7Ci0JaW50IHJldDsKLQotCXJldCA9IGxpYmVydGFzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LAotCQkJCSAgICBjbWRfZ2V0X3RzZiwKLQkJCQkgICAgMCwgY21kX29wdGlvbl93YWl0Zm9ycnNwLCAwLCAmdHNmdmFsKTsKLQotCWxic19wcl9kZWJ1ZygxLCAiSU9DVEw6IEdldCBUU0YgPSAweCUwMTZsbHhcbiIsIHRzZnZhbCk7Ci0KLQlpZiAocmV0ICE9IDApIHsKLQkJbGJzX3ByX2RlYnVnKDEsICJJT0NUTDogR2V0IFRTRjsgY29tbWFuZCBleGVjIGZhaWxlZFxuIik7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLAotCQkJCSAmdHNmdmFsLAotCQkJCSBtaW5fdChzaXplX3QsIHdycS0+dS5kYXRhLmxlbmd0aCwKLQkJCQkgICAgIHNpemVvZih0c2Z2YWwpKSkgIT0gMCkgewotCi0JCQlsYnNfcHJfZGVidWcoMSwgIklPQ1RMOiBHZXQgVFNGOyBDb3B5IHRvIHVzZXIgZmFpbGVkXG4iKTsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSAwOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogIEBicmllZiBHZXQvU2V0IGFkYXB0IHJhdGUKLSAqICBAcGFyYW0gcHJpdiAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHdsYW5fcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gd3JxCQkJQSBwb2ludGVyIHRvIGl3cmVxIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIAkJMCAtLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCi0gKi8KLXN0YXRpYyBpbnQgd2xhbl9hZGFwdF9yYXRlc2V0KHdsYW5fcHJpdmF0ZSAqIHByaXYsIHN0cnVjdCBpd3JlcSAqd3JxKQotewotCWludCByZXQ7Ci0Jd2xhbl9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKLQlpbnQgZGF0YVsyXTsKLQotCW1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOwotCWlmICghd3JxLT51LmRhdGEubGVuZ3RoKSB7Ci0JCWxic19wcl9kZWJ1ZygxLCAiR2V0IEFEQVBUIFJBVEUgU0VUXG4iKTsKLQkJcmV0ID0gbGliZXJ0YXNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsCi0JCQkJCSAgICBjbWRfODAyXzExX3JhdGVfYWRhcHRfcmF0ZXNldCwKLQkJCQkJICAgIGNtZF9hY3RfZ2V0LAotCQkJCQkgICAgY21kX29wdGlvbl93YWl0Zm9ycnNwLCAwLCBOVUxMKTsKLQkJZGF0YVswXSA9IGFkYXB0ZXItPmVuYWJsZWh3YXV0bzsKLQkJZGF0YVsxXSA9IGFkYXB0ZXItPnJhdGViaXRtYXA7Ci0JCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgZGF0YSwgc2l6ZW9mKGludCkgKiAyKSkgewotCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5IHRvIHVzZXIgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0jZGVmaW5lIEdFVF9UV09fSU5UCTIKLQkJd3JxLT51LmRhdGEubGVuZ3RoID0gR0VUX1RXT19JTlQ7Ci0JfSBlbHNlIHsKLQkJbGJzX3ByX2RlYnVnKDEsICJTZXQgQURBUFQgUkFURSBTRVRcbiIpOwotCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoID4gMikKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJICAgIChkYXRhLCB3cnEtPnUuZGF0YS5wb2ludGVyLAotCQkgICAgIHNpemVvZihpbnQpICogd3JxLT51LmRhdGEubGVuZ3RoKSkgewotCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5IGZyb20gdXNlciBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQotCQlhZGFwdGVyLT5lbmFibGVod2F1dG8gPSBkYXRhWzBdOwotCQlhZGFwdGVyLT5yYXRlYml0bWFwID0gZGF0YVsxXTsKLQkJcmV0ID0gbGliZXJ0YXNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsCi0JCQkJCSAgICBjbWRfODAyXzExX3JhdGVfYWRhcHRfcmF0ZXNldCwKLQkJCQkJICAgIGNtZF9hY3Rfc2V0LAotCQkJCQkgICAgY21kX29wdGlvbl93YWl0Zm9ycnNwLCAwLCBOVUxMKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiAgQGJyaWVmIEdldC9TZXQgaW5hY3Rpdml0eSB0aW1lb3V0Ci0gKiAgQHBhcmFtIHByaXYgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB3bGFuX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHdycQkJCUEgcG9pbnRlciB0byBpd3JlcSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICAJCTAgLS1zdWNjZXNzLCBvdGhlcndpc2UgZmFpbAotICovCi1zdGF0aWMgaW50IHdsYW5faW5hY3Rpdml0eV90aW1lb3V0KHdsYW5fcHJpdmF0ZSAqIHByaXYsIHN0cnVjdCBpd3JlcSAqd3JxKQotewotCWludCByZXQ7Ci0JaW50IGRhdGEgPSAwOwotCXUxNiB0aW1lb3V0ID0gMDsKLQotCUVOVEVSKCk7Ci0JaWYgKHdycS0+dS5kYXRhLmxlbmd0aCA+IDEpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KLQlpZiAod3JxLT51LmRhdGEubGVuZ3RoID09IDApIHsKLQkJLyogR2V0ICovCi0JCXJldCA9IGxpYmVydGFzX3ByZXBhcmVfYW5kX3NlbmRfY29tbWFuZChwcml2LAotCQkJCQkgICAgY21kXzgwMl8xMV9pbmFjdGl2aXR5X3RpbWVvdXQsCi0JCQkJCSAgICBjbWRfYWN0X2dldCwKLQkJCQkJICAgIGNtZF9vcHRpb25fd2FpdGZvcnJzcCwgMCwKLQkJCQkJICAgICZ0aW1lb3V0KTsKLQkJZGF0YSA9IHRpbWVvdXQ7Ci0JCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJmRhdGEsIHNpemVvZihpbnQpKSkgewotCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5IHRvIHVzZXIgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogU2V0ICovCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgd3JxLT51LmRhdGEucG9pbnRlciwgc2l6ZW9mKGludCkpKSB7Ci0JCQlsYnNfcHJfZGVidWcoMSwgIkNvcHkgZnJvbSB1c2VyIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JCXRpbWVvdXQgPSBkYXRhOwotCQlyZXQgPSBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQkJICAgIGNtZF84MDJfMTFfaW5hY3Rpdml0eV90aW1lb3V0LAotCQkJCQkgICAgY21kX2FjdF9zZXQsCi0JCQkJCSAgICBjbWRfb3B0aW9uX3dhaXRmb3Jyc3AsIDAsCi0JCQkJCSAgICAmdGltZW91dCk7Ci0JfQotCi0Jd3JxLT51LmRhdGEubGVuZ3RoID0gMTsKLQotCUxFQVZFKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3bGFuX2RvX2dldGxvZ19pb2N0bCh3bGFuX3ByaXZhdGUgKiBwcml2LCBzdHJ1Y3QgaXdyZXEgKndycSkKLXsKLQlpbnQgcmV0OwotCWNoYXIgYnVmW0dFVExPR19CVUZTSVpFIC0gMV07Ci0Jd2xhbl9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKLQotCWxic19wcl9kZWJ1ZygxLCAiIEdFVCBTVEFUU1xuIik7Ci0KLQlyZXQgPSBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwgY21kXzgwMl8xMV9nZXRfbG9nLAotCQkJCSAgICAwLCBjbWRfb3B0aW9uX3dhaXRmb3Jyc3AsIDAsIE5VTEwpOwotCi0JaWYgKHJldCkgewotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmICh3cnEtPnUuZGF0YS5wb2ludGVyKSB7Ci0JCXNwcmludGYoYnVmLCAiXG4gIG1jYXN0dHhmcmFtZSAldSBmYWlsZWQgJXUgcmV0cnkgJXUgIgotCQkJIm11bHRpcmV0cnkgJXUgZnJhbWVkdXAgJXUgIgotCQkJInJ0c3N1Y2Nlc3MgJXUgcnRzZmFpbHVyZSAldSBhY2tmYWlsdXJlICV1XG4iCi0JCQkicnhmcmFnICV1IG1jYXN0cnhmcmFtZSAldSBmY3NlcnJvciAldSAiCi0JCQkidHhmcmFtZSAldSB3ZXB1bmRlY3J5cHRhYmxlICV1ICIsCi0JCQlhZGFwdGVyLT5sb2dtc2cubWNhc3R0eGZyYW1lLAotCQkJYWRhcHRlci0+bG9nbXNnLmZhaWxlZCwKLQkJCWFkYXB0ZXItPmxvZ21zZy5yZXRyeSwKLQkJCWFkYXB0ZXItPmxvZ21zZy5tdWx0aXJldHJ5LAotCQkJYWRhcHRlci0+bG9nbXNnLmZyYW1lZHVwLAotCQkJYWRhcHRlci0+bG9nbXNnLnJ0c3N1Y2Nlc3MsCi0JCQlhZGFwdGVyLT5sb2dtc2cucnRzZmFpbHVyZSwKLQkJCWFkYXB0ZXItPmxvZ21zZy5hY2tmYWlsdXJlLAotCQkJYWRhcHRlci0+bG9nbXNnLnJ4ZnJhZywKLQkJCWFkYXB0ZXItPmxvZ21zZy5tY2FzdHJ4ZnJhbWUsCi0JCQlhZGFwdGVyLT5sb2dtc2cuZmNzZXJyb3IsCi0JCQlhZGFwdGVyLT5sb2dtc2cudHhmcmFtZSwKLQkJCWFkYXB0ZXItPmxvZ21zZy53ZXB1bmRlY3J5cHRhYmxlKTsKLQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1ZikgKyAxOwotCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIGJ1Ziwgd3JxLT51LmRhdGEubGVuZ3RoKSkgewotCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5IHRvIHVzZXIgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2xhbl9zY2FuX3R5cGVfaW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGl3cmVxICp3cnEpCi17Ci0JdTggYnVmWzEyXTsKLQl1OCAqb3B0aW9uW10gPSB7ICJhY3RpdmUiLCAicGFzc2l2ZSIsICJnZXQiLCB9OwotCWludCBpLCBtYXhfb3B0aW9ucyA9IChzaXplb2Yob3B0aW9uKSAvIHNpemVvZihvcHRpb25bMF0pKTsKLQlpbnQgcmV0ID0gMDsKLQl3bGFuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwotCi0JaWYgKHByaXYtPmFkYXB0ZXItPmVuYWJsZTExZCkgewotCQlsYnNfcHJfZGVidWcoMSwgIjExRDogQ2Fubm90IHNldCBzY2FudHlwZSB3aGVuIDExRCBlbmFibGVkXG4iKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1Ziwgd3JxLT51LmRhdGEucG9pbnRlciwgbWluX3Qoc2l6ZV90LCBzaXplb2YoYnVmKSwKLQkJCQkJCQkgd3JxLT51LmRhdGEubGVuZ3RoKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JbGJzX3ByX2RlYnVnKDEsICJTY2FuIHR5cGUgT3B0aW9uID0gJXNcbiIsIGJ1Zik7Ci0KLQlidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9ICdcMCc7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWF4X29wdGlvbnM7IGkrKykgewotCQlpZiAoIXN0cmNtcChidWYsIG9wdGlvbltpXSkpCi0JCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGkpIHsKLQljYXNlIDA6Ci0JCWFkYXB0ZXItPnNjYW50eXBlID0gY21kX3NjYW5fdHlwZV9hY3RpdmU7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJYWRhcHRlci0+c2NhbnR5cGUgPSBjbWRfc2Nhbl90eXBlX3Bhc3NpdmU7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKG9wdGlvblthZGFwdGVyLT5zY2FudHlwZV0pICsgMTsKLQotCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsCi0JCQkJIG9wdGlvblthZGFwdGVyLT5zY2FudHlwZV0sCi0JCQkJIHdycS0+dS5kYXRhLmxlbmd0aCkpIHsKLQkJCWxic19wcl9kZWJ1ZygxLCAiQ29weSB0byB1c2VyIGZhaWxlZFxuIik7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQl9Ci0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbGJzX3ByX2RlYnVnKDEsICJJbnZhbGlkIFNjYW4gdHlwZSBJb2N0bCBPcHRpb25cbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdsYW5fc2Nhbl9tb2RlX2lvY3RsKHdsYW5fcHJpdmF0ZSAqIHByaXYsIHN0cnVjdCBpd3JlcSAqd3JxKQotewotCXdsYW5fYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7Ci0JdTggYnVmWzEyXTsKLQl1OCAqb3B0aW9uW10gPSB7ICJic3MiLCAiaWJzcyIsICJhbnkiLCAiZ2V0IiB9OwotCWludCBpLCBtYXhfb3B0aW9ucyA9IChzaXplb2Yob3B0aW9uKSAvIHNpemVvZihvcHRpb25bMF0pKTsKLQlpbnQgcmV0ID0gMDsKLQotCUVOVEVSKCk7Ci0KLQltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB3cnEtPnUuZGF0YS5wb2ludGVyLCBtaW5fdChzaXplX3QsIHNpemVvZihidWYpLAotCQkJCQkJCSB3cnEtPnUuZGF0YS5sZW5ndGgpKSkgewotCQlsYnNfcHJfZGVidWcoMSwgIkNvcHkgZnJvbSB1c2VyIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWxic19wcl9kZWJ1ZygxLCAiU2NhbiBtb2RlIE9wdGlvbiA9ICVzXG4iLCBidWYpOwotCi0JYnVmW3NpemVvZihidWYpIC0gMV0gPSAnXDAnOwotCi0JZm9yIChpID0gMDsgaSA8IG1heF9vcHRpb25zOyBpKyspIHsKLQkJaWYgKCFzdHJjbXAoYnVmLCBvcHRpb25baV0pKQotCQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChpKSB7Ci0KLQljYXNlIDA6Ci0JCWFkYXB0ZXItPnNjYW5tb2RlID0gY21kX2Jzc190eXBlX2JzczsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlhZGFwdGVyLT5zY2FubW9kZSA9IGNtZF9ic3NfdHlwZV9pYnNzOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWFkYXB0ZXItPnNjYW5tb2RlID0gY21kX2Jzc190eXBlX2FueTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCi0JCXdycS0+dS5kYXRhLmxlbmd0aCA9IHN0cmxlbihvcHRpb25bYWRhcHRlci0+c2Nhbm1vZGUgLSAxXSkgKyAxOwotCi0JCWxic19wcl9kZWJ1ZygxLCAiR2V0IFNjYW4gbW9kZSBPcHRpb24gPSAlc1xuIiwKLQkJICAgICAgIG9wdGlvblthZGFwdGVyLT5zY2FubW9kZSAtIDFdKTsKLQotCQlsYnNfcHJfZGVidWcoMSwgIlNjYW4gbW9kZSBsZW5ndGggJWRcbiIsIHdycS0+dS5kYXRhLmxlbmd0aCk7Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLAotCQkJCSBvcHRpb25bYWRhcHRlci0+c2Nhbm1vZGUgLSAxXSwKLQkJCQkgd3JxLT51LmRhdGEubGVuZ3RoKSkgewotCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5IHRvIHVzZXIgZmFpbGVkXG4iKTsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCX0KLQkJbGJzX3ByX2RlYnVnKDEsICJHRVQgU2NhbiB0eXBlIE9wdGlvbiBhZnRlciBjb3B5ID0gJXNcbiIsCi0JCSAgICAgICAoY2hhciAqKXdycS0+dS5kYXRhLnBvaW50ZXIpOwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJbGJzX3ByX2RlYnVnKDEsICJJbnZhbGlkIFNjYW4gbW9kZSBJb2N0bCBPcHRpb25cbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlMRUFWRSgpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogIEBicmllZiBHZXQvU2V0IEFkaG9jIEcgUmF0ZQotICoKLSAqICBAcGFyYW0gcHJpdgkJQSBwb2ludGVyIHRvIHdsYW5fcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gd3JxCSAgIAlBIHBvaW50ZXIgdG8gdXNlciBkYXRhCi0gKiAgQHJldHVybiAJICAgCTAtLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCi0gKi8KLXN0YXRpYyBpbnQgd2xhbl9kb19zZXRfZ3JhdGVfaW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGl3cmVxICp3cnEpCi17Ci0Jd2xhbl9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKLQlpbnQgZGF0YSwgZGF0YTE7Ci0JaW50ICp2YWw7Ci0KLQlFTlRFUigpOwotCi0JZGF0YTEgPSBTVUJDTURfREFUQSh3cnEpOwotCXN3aXRjaCAoZGF0YTEpIHsKLQljYXNlIDA6Ci0JCWFkYXB0ZXItPmFkaG9jX2dyYXRlX2VuYWJsZWQgPSAwOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWFkYXB0ZXItPmFkaG9jX2dyYXRlX2VuYWJsZWQgPSAxOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlkYXRhID0gYWRhcHRlci0+YWRob2NfZ3JhdGVfZW5hYmxlZDsKLQl2YWwgPSAoaW50ICopd3JxLT51Lm5hbWU7Ci0JKnZhbCA9IGRhdGE7Ci0JTEVBVkUoKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaGV4MmludChjaGFyIGMpCiB7CiAJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQpAQCAtMTc2MSw2ICs2ODAsNyBAQAogICovCiBzdGF0aWMgaW50IHdsYW5fZnd0X2NsZWFudXBfaW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGlmcmVxICpyZXEpCiB7CisJc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopcmVxOwogCXN0YXRpYyBzdHJ1Y3QgY21kX2RzX2Z3dF9hY2Nlc3MgZnd0X2FjY2VzczsKIAlpbnQgcmV0OwogCkBAIC0xNzc2LDcgKzY5Niw3IEBACiAJCQkJICAgICh2b2lkICopJmZ3dF9hY2Nlc3MpOwogCiAJaWYgKHJldCA9PSAwKQotCQlyZXEtPmlmcl9kYXRhID0gKGNoYXIgKikobGUzMl90b19jcHUoZnd0X2FjY2Vzcy5yZWZlcmVuY2VzKSk7CisJCXdycS0+dS5wYXJhbS52YWx1ZSA9IGxlMzJfdG9fY3B1KGZ3dF9hY2Nlc3MucmVmZXJlbmNlcyk7CiAJZWxzZQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtMTc5Miw2ICs3MTIsNyBAQAogICovCiBzdGF0aWMgaW50IHdsYW5fZnd0X3RpbWVfaW9jdGwod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IGlmcmVxICpyZXEpCiB7CisJc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopcmVxOwogCXN0YXRpYyBzdHJ1Y3QgY21kX2RzX2Z3dF9hY2Nlc3MgZnd0X2FjY2VzczsKIAlpbnQgcmV0OwogCkBAIC0xODA3LDcgKzcyOCw3IEBACiAJCQkJICAgICh2b2lkICopJmZ3dF9hY2Nlc3MpOwogCiAJaWYgKHJldCA9PSAwKQotCQlyZXEtPmlmcl9kYXRhID0gKGNoYXIgKikobGUzMl90b19jcHUoZnd0X2FjY2Vzcy5yZWZlcmVuY2VzKSk7CisJCXdycS0+dS5wYXJhbS52YWx1ZSA9IGxlMzJfdG9fY3B1KGZ3dF9hY2Nlc3MucmVmZXJlbmNlcyk7CiAJZWxzZQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtMTgyMyw2ICs3NDQsNyBAQAogICovCiBzdGF0aWMgaW50IHdsYW5fbWVzaF9nZXRfdHRsX2lvY3RsKHdsYW5fcHJpdmF0ZSAqIHByaXYsIHN0cnVjdCBpZnJlcSAqcmVxKQogeworCXN0cnVjdCBpd3JlcSAqd3JxID0gKHN0cnVjdCBpd3JlcSAqKXJlcTsKIAlzdHJ1Y3QgY21kX2RzX21lc2hfYWNjZXNzIG1lc2hfYWNjZXNzOwogCWludCByZXQ7CiAKQEAgLTE4MzUsOSArNzU3LDggQEAKIAkJCQkgICAgY21kX29wdGlvbl93YWl0Zm9ycnNwLCAwLAogCQkJCSAgICAodm9pZCAqKSZtZXNoX2FjY2Vzcyk7CiAKLQlpZiAocmV0ID09IDApIHsKLQkJcmVxLT5pZnJfZGF0YSA9IChjaGFyICopKGxlMzJfdG9fY3B1KG1lc2hfYWNjZXNzLmRhdGFbMF0pKTsKLQl9CisJaWYgKHJldCA9PSAwKQorCQl3cnEtPnUucGFyYW0udmFsdWUgPSBsZTMyX3RvX2NwdShtZXNoX2FjY2Vzcy5kYXRhWzBdKTsKIAllbHNlCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC0xODk4LDM2ICs4MTksOCBAQAogCiAJbGJzX3ByX2RlYnVnKDEsICJsaWJlcnRhc19kb19pb2N0bDogaW9jdGwgY21kID0gMHgleFxuIiwgY21kKTsKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgV0xBTlNDQU5fVFlQRToKLQkJbGJzX3ByX2RlYnVnKDEsICJTY2FuIHR5cGUgSW9jdGxcbiIpOwotCQlyZXQgPSB3bGFuX3NjYW5fdHlwZV9pb2N0bChwcml2LCB3cnEpOwotCQlicmVhazsKLQogCWNhc2UgV0xBTl9TRVROT05FX0dFVE5PTkU6CS8qIHNldCBXUEEgbW9kZSBvbi9vZmYgaW9jdGwgIzIwICovCiAJCXN3aXRjaCAod3JxLT51LmRhdGEuZmxhZ3MpIHsKLQkJY2FzZSBXTEFOREVBVVRIOgotCQkJbGJzX3ByX2RlYnVnKDEsICJEZWF1dGhcbiIpOwotCQkJbGliZXJ0YXNfc2VuZF9kZWF1dGgocHJpdik7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5BREhPQ1NUT1A6Ci0JCQlsYnNfcHJfZGVidWcoMSwgIkFkaG9jIHN0b3BcbiIpOwotCQkJcmV0ID0gbGliZXJ0YXNfZG9fYWRob2NzdG9wX2lvY3RsKHByaXYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOUkFESU9PTjoKLQkJCXdsYW5fcmFkaW9faW9jdGwocHJpdiwgMSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5SQURJT09GRjoKLQkJCXdsYW5fcmFkaW9faW9jdGwocHJpdiwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOV0xBTklETEVPTjoKLQkJCWxpYmVydGFzX2lkbGVfb24ocHJpdik7Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOV0xBTklETEVPRkY6Ci0JCQlsaWJlcnRhc19pZGxlX29mZihwcml2KTsKLQkJCWJyZWFrOwogCQljYXNlIFdMQU5fU1VCQ01EX0JUX1JFU0VUOgkvKiBidF9yZXNldCAqLwogCQkJd2xhbl9idF9yZXNldF9pb2N0bChwcml2KTsKIAkJCWJyZWFrOwpAQCAtMTkzNywxNjIgKzgzMCwxOSBAQAogCQl9CQkvKiBFbmQgb2Ygc3dpdGNoICovCiAJCWJyZWFrOwogCi0JY2FzZSBXTEFOU0VUV1BBSUU6Ci0JCXJldCA9IHdsYW5fc2V0d3BhaWVfaW9jdGwocHJpdiwgcmVxKTsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX1NFVElOVF9HRVRJTlQ6Ci0JCS8qIFRoZSBmaXJzdCA0IGJ5dGVzIG9mIHJlcS0+aWZyX2RhdGEgaXMgc3ViLWlvY3RsIG51bWJlcgotCQkgKiBhZnRlciA0IGJ5dGVzIHNpdHMgdGhlIHBheWxvYWQuCi0JCSAqLwotCQlzdWJjbWQgPSAoaW50KXJlcS0+aWZyX2RhdGE7CS8vZnJvbSBpd3ByaXYgc3ViY21kCi0JCXN3aXRjaCAoc3ViY21kKSB7Ci0JCWNhc2UgV0xBTk5GOgotCQkJcmV0ID0gd2xhbl9nZXRfbmYocHJpdiwgd3JxKTsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5SU1NJOgotCQkJcmV0ID0gd2xhbl9nZXRfcnNzaShwcml2LCB3cnEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTkVOQUJMRTExRDoKLQkJCXJldCA9IGxpYmVydGFzX2NtZF9lbmFibGVfMTFkKHByaXYsIHdycSk7Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOQURIT0NHUkFURToKLQkJCXJldCA9IHdsYW5fZG9fc2V0X2dyYXRlX2lvY3RsKHByaXYsIHdycSk7Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX1NVQkNNRF9TRVRfUFJFU0NBTjoKLQkJCXJldCA9IHdsYW5fc3ViY21kX3NldHByZXNjYW5faW9jdGwocHJpdiwgd3JxKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBXTEFOX1NFVE9ORUlOVF9HRVRPTkVJTlQ6Ci0JCXN3aXRjaCAod3JxLT51LmRhdGEuZmxhZ3MpIHsKLQkJY2FzZSBXTEFOX0JFQUNPTl9JTlRFUlZBTDoKLQkJCXJldCA9IHdsYW5fYmVhY29uX2ludGVydmFsKHByaXYsIHdycSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5fTElTVEVOSU5UUlZMOgotCQkJaWYgKCF3cnEtPnUuZGF0YS5sZW5ndGgpIHsKLQkJCQlpbnQgZGF0YTsKLQkJCQlsYnNfcHJfZGVidWcoMSwgIkdldCBsb2NhbGxpc3RlbmludGVydmFsIHZhbHVlXG4iKTsKLSNkZWZpbmUgR0VUX09ORV9JTlQJMQotCQkJCWRhdGEgPSBhZGFwdGVyLT5sb2NhbGxpc3RlbmludGVydmFsOwotCQkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwKLQkJCQkJCSAmZGF0YSwgc2l6ZW9mKGludCkpKSB7Ci0JCQkJCWxic19wcl9kZWJ1ZygxLCAiQ29weSB0byB1c2VyIGZhaWxlZFxuIik7Ci0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCX0KLQotCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IEdFVF9PTkVfSU5UOwotCQkJfSBlbHNlIHsKLQkJCQlpbnQgZGF0YTsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJCQkgICAgKCZkYXRhLCB3cnEtPnUuZGF0YS5wb2ludGVyLCBzaXplb2YoaW50KSkpIHsKLQkJCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5IGZyb20gdXNlciBmYWlsZWRcbiIpOwotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQl9Ci0KLQkJCQlsYnNfcHJfZGVidWcoMSwgIlNldCBsb2NhbGxpc3RlbmludGVydmFsID0gJWRcbiIsCi0JCQkJICAgICAgIGRhdGEpOwotI2RlZmluZSBNQVhfVTE2X1ZBTAk2NTUzNQotCQkJCWlmIChkYXRhID4gTUFYX1UxNl9WQUwpIHsKLQkJCQkJbGJzX3ByX2RlYnVnKDEsICJFeGNlZWRzIFUxNiB2YWx1ZVxuIik7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCQlhZGFwdGVyLT5sb2NhbGxpc3RlbmludGVydmFsID0gZGF0YTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fVFhDT05UUk9MOgotCQkJcmV0ID0gd2xhbl90eGNvbnRyb2wocHJpdiwgd3JxKTsJLy9hZGRzIGZvciB0eGNvbnRyb2wgaW9jdGwKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0xBTl9OVUxMUEtUSU5URVJWQUw6Ci0JCQlyZXQgPSB3bGFuX251bGxfcGt0X2ludGVydmFsKHByaXYsIHdycSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQogCWNhc2UgV0xBTl9TRVRPTkVJTlRfR0VUTk9ORToKIAkJLyogVGhlIGZpcnN0IDQgYnl0ZXMgb2YgcmVxLT5pZnJfZGF0YSBpcyBzdWItaW9jdGwgbnVtYmVyCiAJCSAqIGFmdGVyIDQgYnl0ZXMgc2l0cyB0aGUgcGF5bG9hZC4KIAkJICovCi0JCXN1YmNtZCA9IHdycS0+dS5kYXRhLmZsYWdzOwkvL2Zyb20gd3BhX3N1cHBsaWNhbnQgc3ViY21kCi0KKwkJc3ViY21kID0gd3JxLT51LmRhdGEuZmxhZ3M7CiAJCWlmICghc3ViY21kKQotCQkJc3ViY21kID0gKGludClyZXEtPmlmcl9kYXRhOwkvL2Zyb20gaXdwcml2IHN1YmNtZAorCQkJc3ViY21kID0gKGludCl3cnEtPnUucGFyYW0udmFsdWU7CiAKIAkJc3dpdGNoIChzdWJjbWQpIHsKLQkJY2FzZSBXTEFOX1NVQkNNRF9TRVRSWEFOVEVOTkE6CS8qIFNFVFJYQU5URU5OQSAqLwotCQkJaWRhdGEgPSBTVUJDTURfREFUQSh3cnEpOwotCQkJcmV0ID0gc2V0cnhhbnRlbm5hKHByaXYsIGlkYXRhKTsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fU1VCQ01EX1NFVFRYQU5URU5OQToJLyogU0VUVFhBTlRFTk5BICovCi0JCQlpZGF0YSA9IFNVQkNNRF9EQVRBKHdycSk7Ci0JCQlyZXQgPSBzZXR0eGFudGVubmEocHJpdiwgaWRhdGEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9TRVRfQVRJTV9XSU5ET1c6Ci0JCQlhZGFwdGVyLT5hdGltd2luZG93ID0gU1VCQ01EX0RBVEEod3JxKTsKLQkJCWFkYXB0ZXItPmF0aW13aW5kb3cgPSBtaW5fdChfX3UxNiwgYWRhcHRlci0+YXRpbXdpbmRvdywgNTApOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTlNFVEJDTkFWRzoKLQkJCWFkYXB0ZXItPmJjbl9hdmdfZmFjdG9yID0gU1VCQ01EX0RBVEEod3JxKTsKLQkJCWlmIChhZGFwdGVyLT5iY25fYXZnX2ZhY3RvciA9PSAwKQotCQkJCWFkYXB0ZXItPmJjbl9hdmdfZmFjdG9yID0KLQkJCQkgICAgREVGQVVMVF9CQ05fQVZHX0ZBQ1RPUjsKLQkJCWlmIChhZGFwdGVyLT5iY25fYXZnX2ZhY3RvciA+IERFRkFVTFRfQkNOX0FWR19GQUNUT1IpCi0JCQkJYWRhcHRlci0+YmNuX2F2Z19mYWN0b3IgPQotCQkJCSAgICBERUZBVUxUX0JDTl9BVkdfRkFDVE9SOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTlNFVERBVEFBVkc6Ci0JCQlhZGFwdGVyLT5kYXRhX2F2Z19mYWN0b3IgPSBTVUJDTURfREFUQSh3cnEpOwotCQkJaWYgKGFkYXB0ZXItPmRhdGFfYXZnX2ZhY3RvciA9PSAwKQotCQkJCWFkYXB0ZXItPmRhdGFfYXZnX2ZhY3RvciA9Ci0JCQkJICAgIERFRkFVTFRfREFUQV9BVkdfRkFDVE9SOwotCQkJaWYgKGFkYXB0ZXItPmRhdGFfYXZnX2ZhY3RvciA+IERFRkFVTFRfREFUQV9BVkdfRkFDVE9SKQotCQkJCWFkYXB0ZXItPmRhdGFfYXZnX2ZhY3RvciA9Ci0JCQkJICAgIERFRkFVTFRfREFUQV9BVkdfRkFDVE9SOwotCQkJYnJlYWs7CiAJCWNhc2UgV0xBTlNFVFJFR0lPTjoKIAkJCWlkYXRhID0gU1VCQ01EX0RBVEEod3JxKTsKIAkJCXJldCA9IHdsYW5fc2V0X3JlZ2lvbihwcml2LCAodTE2KSBpZGF0YSk7CiAJCQlicmVhazsKLQotCQljYXNlIFdMQU5fU0VUX0xJU1RFTl9JTlRFUlZBTDoKLQkJCWlkYXRhID0gU1VCQ01EX0RBVEEod3JxKTsKLQkJCWFkYXB0ZXItPmxpc3RlbmludGVydmFsID0gKHUxNikgaWRhdGE7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5fU0VUX01VTFRJUExFX0RUSU06Ci0JCQlyZXQgPSB3bGFuX3NldF9tdWx0aXBsZV9kdGltX2lvY3RsKHByaXYsIHJlcSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5TRVRBVVRIQUxHOgotCQkJcmV0ID0gd2xhbl9zZXRhdXRoYWxnX2lvY3RsKHByaXYsIHJlcSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5TRVQ4MDIxWEFVVEhBTEc6Ci0JCQlyZXQgPSB3bGFuX3NldDgwMjF4YXV0aGFsZ19pb2N0bChwcml2LCByZXEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOU0VURU5DUllQVElPTk1PREU6Ci0JCQlyZXQgPSB3bGFuX3NldGVuY3J5cHRpb25tb2RlX2lvY3RsKHByaXYsIHJlcSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5fU0VUX0xJTktNT0RFOgotCQkJcmV0ID0gd2xhbl9zZXRfbGlua21vZGVfaW9jdGwocHJpdiwgcmVxKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0xBTl9TRVRfUkFESU9NT0RFOgotCQkJcmV0ID0gd2xhbl9zZXRfcmFkaW9tb2RlX2lvY3RsKHByaXYsIHJlcSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5fU0VUX0RFQlVHTU9ERToKLQkJCXJldCA9IHdsYW5fc2V0X2RlYnVnbW9kZV9pb2N0bChwcml2LCByZXEpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBXTEFOX1NVQkNNRF9NRVNIX1NFVF9UVEw6CiAJCQlpZGF0YSA9IFNVQkNNRF9EQVRBKHdycSk7CiAJCQlyZXQgPSB3bGFuX21lc2hfc2V0X3R0bF9pb2N0bChwcml2LCBpZGF0YSk7CkBAIC0yMTA1LDM4ICs4NTUsOCBAQAogCiAJCWJyZWFrOwogCi0JY2FzZSBXTEFOX1NFVE5PTkVfR0VUVFdFTFZFX0NIQVI6CS8qIEdldCBBbnRlbm5hIHNldHRpbmdzICovCi0JCS8qCi0JCSAqIFdlJ3ZlIG5vdCB1c2VkIElXX1BSSVZfVFlQRV9GSVhFRCBzbyBzdWItaW9jdGwgbnVtYmVyIGlzCi0JCSAqIGluIGZsYWdzIG9mIGl3cmVxIHN0cnVjdHVyZSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgaW4KLQkJICogbW9kZSBtZW1iZXIgb2YgaXdyZXEgc3RydWN0dXJlLgotCQkgKi8KLQkJc3dpdGNoICgoaW50KXdycS0+dS5kYXRhLmZsYWdzKSB7Ci0JCWNhc2UgV0xBTl9TVUJDTURfR0VUUlhBTlRFTk5BOgkvKiBHZXQgUnggQW50ZW5uYSAqLwotCQkJcmV0ID0gd2xhbl9zdWJjbWRfZ2V0cnhhbnRlbm5hX2lvY3RsKHByaXYsIHJlcSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5fU1VCQ01EX0dFVFRYQU5URU5OQToJLyogR2V0IFR4IEFudGVubmEgKi8KLQkJCXJldCA9IHdsYW5fc3ViY21kX2dldHR4YW50ZW5uYV9pb2N0bChwcml2LCByZXEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOX0dFVF9UU0Y6Ci0JCQlyZXQgPSB3bGFuX2dldF90c2ZfaW9jdGwocHJpdiwgd3JxKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCiAJY2FzZSBXTEFOX1NFVDEyOENIQVJfR0VUMTI4Q0hBUjoKIAkJc3dpdGNoICgoaW50KXdycS0+dS5kYXRhLmZsYWdzKSB7Ci0KLQkJY2FzZSBXTEFOU0NBTl9NT0RFOgotCQkJbGJzX3ByX2RlYnVnKDEsICJTY2FuIG1vZGUgSW9jdGxcbiIpOwotCQkJcmV0ID0gd2xhbl9zY2FuX21vZGVfaW9jdGwocHJpdiwgd3JxKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0xBTl9HRVRfQURIT0NfU1RBVFVTOgotCQkJcmV0ID0gd2xhbl9nZXRfYWRob2Nfc3RhdHVzX2lvY3RsKHByaXYsIHdycSk7Ci0JCQlicmVhazsKIAkJY2FzZSBXTEFOX1NVQkNNRF9CVF9BREQ6CiAJCQlyZXQgPSB3bGFuX2J0X2FkZF9pb2N0bChwcml2LCByZXEpOwogCQkJYnJlYWs7CkBAIC0yMTY4LDQxICs4ODgsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFdMQU5fU0VUTk9ORV9HRVRPTkVJTlQ6Ci0JCXN3aXRjaCAoKGludClyZXEtPmlmcl9kYXRhKSB7Ci0JCWNhc2UgV0xBTkdFVEJDTkFWRzoKLQkJCXBkYXRhID0gKGludCAqKXdycS0+dS5uYW1lOwotCQkJKnBkYXRhID0gKGludClhZGFwdGVyLT5iY25fYXZnX2ZhY3RvcjsKLQkJCWJyZWFrOwotCisJCXN3aXRjaCAod3JxLT51LnBhcmFtLnZhbHVlKSB7CiAJCWNhc2UgV0xBTkdFVFJFR0lPTjoKIAkJCXBkYXRhID0gKGludCAqKXdycS0+dS5uYW1lOwogCQkJKnBkYXRhID0gKGludClhZGFwdGVyLT5yZWdpb25jb2RlOwogCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOX0dFVF9MSVNURU5fSU5URVJWQUw6Ci0JCQlwZGF0YSA9IChpbnQgKil3cnEtPnUubmFtZTsKLQkJCSpwZGF0YSA9IChpbnQpYWRhcHRlci0+bGlzdGVuaW50ZXJ2YWw7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5fR0VUX0xJTktNT0RFOgotCQkJcmVxLT5pZnJfZGF0YSA9IChjaGFyICopKCh1MzIpIGFkYXB0ZXItPmxpbmttb2RlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgV0xBTl9HRVRfUkFESU9NT0RFOgotCQkJcmVxLT5pZnJfZGF0YSA9IChjaGFyICopKCh1MzIpIGFkYXB0ZXItPnJhZGlvbW9kZSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5fR0VUX0RFQlVHTU9ERToKLQkJCXJlcS0+aWZyX2RhdGEgPSAoY2hhciAqKSgodTMyKSBhZGFwdGVyLT5kZWJ1Z21vZGUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOX0dFVF9NVUxUSVBMRV9EVElNOgotCQkJcGRhdGEgPSAoaW50ICopd3JxLT51Lm5hbWU7Ci0JCQkqcGRhdGEgPSAoaW50KWFkYXB0ZXItPm11bHRpcGxlZHRpbTsKLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fR0VUX1RYX1JBVEU6Ci0JCQlyZXQgPSB3bGFuX2dldF90eHJhdGVfaW9jdGwocHJpdiwgcmVxKTsKLQkJCWJyZWFrOwogCQljYXNlIFdMQU5fU1VCQ01EX0ZXVF9DTEVBTlVQOgkvKiBmd3RfY2xlYW51cCAqLwogCQkJcmV0ID0gd2xhbl9md3RfY2xlYW51cF9pb2N0bChwcml2LCByZXEpOwogCQkJYnJlYWs7CkBAIC0yMjIyLDE5NiArOTEyLDggQEAKIAogCQlicmVhazsKIAotCWNhc2UgV0xBTkdFVExPRzoKLQkJcmV0ID0gd2xhbl9kb19nZXRsb2dfaW9jdGwocHJpdiwgd3JxKTsKLQkJYnJlYWs7Ci0KIAljYXNlIFdMQU5fU0VUX0dFVF9TSVhURUVOX0lOVDoKIAkJc3dpdGNoICgoaW50KXdycS0+dS5kYXRhLmZsYWdzKSB7Ci0JCWNhc2UgV0xBTl9UUENDRkc6Ci0JCQl7Ci0JCQkJaW50IGRhdGFbNV07Ci0JCQkJc3RydWN0IGNtZF9kc184MDJfMTFfdHBjX2NmZyBjZmc7Ci0JCQkJbWVtc2V0KCZjZmcsIDAsIHNpemVvZihjZmcpKTsKLQkJCQlpZiAoKHdycS0+dS5kYXRhLmxlbmd0aCA+IDEpCi0JCQkJICAgICYmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gNSkpCi0JCQkJCXJldHVybiAtMTsKLQotCQkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggPT0gMCkgewotCQkJCQljZmcuYWN0aW9uID0KLQkJCQkJICAgIGNwdV90b19sZTE2Ci0JCQkJCSAgICAoY21kX2FjdF9nZXQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChjb3B5X2Zyb21fdXNlcgotCQkJCQkgICAgKGRhdGEsIHdycS0+dS5kYXRhLnBvaW50ZXIsCi0JCQkJCSAgICAgc2l6ZW9mKGludCkgKiA1KSkgewotCQkJCQkJbGJzX3ByX2RlYnVnKDEsCi0JCQkJCQkgICAgICAgIkNvcHkgZnJvbSB1c2VyIGZhaWxlZFxuIik7Ci0JCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQkJfQotCi0JCQkJCWNmZy5hY3Rpb24gPQotCQkJCQkgICAgY3B1X3RvX2xlMTYKLQkJCQkJICAgIChjbWRfYWN0X3NldCk7Ci0JCQkJCWNmZy5lbmFibGUgPSBkYXRhWzBdOwotCQkJCQljZmcudXNlc25yID0gZGF0YVsxXTsKLQkJCQkJY2ZnLlAwID0gZGF0YVsyXTsKLQkJCQkJY2ZnLlAxID0gZGF0YVszXTsKLQkJCQkJY2ZnLlAyID0gZGF0YVs0XTsKLQkJCQl9Ci0KLQkJCQlyZXQgPQotCQkJCSAgICBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQkJCQkgIGNtZF84MDJfMTFfdHBjX2NmZywKLQkJCQkJCQkgIDAsCi0JCQkJCQkJICBjbWRfb3B0aW9uX3dhaXRmb3Jyc3AsCi0JCQkJCQkJICAwLCAodm9pZCAqKSZjZmcpOwotCi0JCQkJZGF0YVswXSA9IGNmZy5lbmFibGU7Ci0JCQkJZGF0YVsxXSA9IGNmZy51c2VzbnI7Ci0JCQkJZGF0YVsyXSA9IGNmZy5QMDsKLQkJCQlkYXRhWzNdID0gY2ZnLlAxOwotCQkJCWRhdGFbNF0gPSBjZmcuUDI7Ci0JCQkJaWYgKGNvcHlfdG9fdXNlcgotCQkJCSAgICAod3JxLT51LmRhdGEucG9pbnRlciwgZGF0YSwKLQkJCQkgICAgIHNpemVvZihpbnQpICogNSkpIHsKLQkJCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5IHRvIHVzZXIgZmFpbGVkXG4iKTsKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJfQotCi0JCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gNTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgV0xBTl9QT1dFUkNGRzoKLQkJCXsKLQkJCQlpbnQgZGF0YVs0XTsKLQkJCQlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9wd3JfY2ZnIGNmZzsKLQkJCQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykpOwotCQkJCWlmICgod3JxLT51LmRhdGEubGVuZ3RoID4gMSkKLQkJCQkgICAgJiYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSA0KSkKLQkJCQkJcmV0dXJuIC0xOwotCQkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggPT0gMCkgewotCQkJCQljZmcuYWN0aW9uID0KLQkJCQkJICAgIGNwdV90b19sZTE2Ci0JCQkJCSAgICAoY21kX2FjdF9nZXQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChjb3B5X2Zyb21fdXNlcgotCQkJCQkgICAgKGRhdGEsIHdycS0+dS5kYXRhLnBvaW50ZXIsCi0JCQkJCSAgICAgc2l6ZW9mKGludCkgKiA0KSkgewotCQkJCQkJbGJzX3ByX2RlYnVnKDEsCi0JCQkJCQkgICAgICAgIkNvcHkgZnJvbSB1c2VyIGZhaWxlZFxuIik7Ci0JCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQkJfQotCi0JCQkJCWNmZy5hY3Rpb24gPQotCQkJCQkgICAgY3B1X3RvX2xlMTYKLQkJCQkJICAgIChjbWRfYWN0X3NldCk7Ci0JCQkJCWNmZy5lbmFibGUgPSBkYXRhWzBdOwotCQkJCQljZmcuUEFfUDAgPSBkYXRhWzFdOwotCQkJCQljZmcuUEFfUDEgPSBkYXRhWzJdOwotCQkJCQljZmcuUEFfUDIgPSBkYXRhWzNdOwotCQkJCX0KLQkJCQlyZXQgPQotCQkJCSAgICBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQkJCQkgIGNtZF84MDJfMTFfcHdyX2NmZywKLQkJCQkJCQkgIDAsCi0JCQkJCQkJICBjbWRfb3B0aW9uX3dhaXRmb3Jyc3AsCi0JCQkJCQkJICAwLCAodm9pZCAqKSZjZmcpOwotCQkJCWRhdGFbMF0gPSBjZmcuZW5hYmxlOwotCQkJCWRhdGFbMV0gPSBjZmcuUEFfUDA7Ci0JCQkJZGF0YVsyXSA9IGNmZy5QQV9QMTsKLQkJCQlkYXRhWzNdID0gY2ZnLlBBX1AyOwotCQkJCWlmIChjb3B5X3RvX3VzZXIKLQkJCQkgICAgKHdycS0+dS5kYXRhLnBvaW50ZXIsIGRhdGEsCi0JCQkJICAgICBzaXplb2YoaW50KSAqIDQpKSB7Ci0JCQkJCWxic19wcl9kZWJ1ZygxLCAiQ29weSB0byB1c2VyIGZhaWxlZFxuIik7Ci0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCX0KLQotCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0FVVE9fRlJFUV9TRVQ6Ci0JCQl7Ci0JCQkJaW50IGRhdGFbM107Ci0JCQkJc3RydWN0IGNtZF9kc184MDJfMTFfYWZjIGFmYzsKLQkJCQltZW1zZXQoJmFmYywgMCwgc2l6ZW9mKGFmYykpOwotCQkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gMykKLQkJCQkJcmV0dXJuIC0xOwotCQkJCWlmIChjb3B5X2Zyb21fdXNlcgotCQkJCSAgICAoZGF0YSwgd3JxLT51LmRhdGEucG9pbnRlciwKLQkJCQkgICAgIHNpemVvZihpbnQpICogMykpIHsKLQkJCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5IGZyb20gdXNlciBmYWlsZWRcbiIpOwotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQl9Ci0JCQkJYWZjLmFmY19hdXRvID0gZGF0YVswXTsKLQotCQkJCWlmIChhZmMuYWZjX2F1dG8gIT0gMCkgewotCQkJCQlhZmMudGhyZXNob2xkID0gZGF0YVsxXTsKLQkJCQkJYWZjLnBlcmlvZCA9IGRhdGFbMl07Ci0JCQkJfSBlbHNlIHsKLQkJCQkJYWZjLnRpbWluZ19vZmZzZXQgPSBkYXRhWzFdOwotCQkJCQlhZmMuY2Fycmllcl9vZmZzZXQgPSBkYXRhWzJdOwotCQkJCX0KLQkJCQlyZXQgPQotCQkJCSAgICBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQkJCQkgIGNtZF84MDJfMTFfc2V0X2FmYywKLQkJCQkJCQkgIDAsCi0JCQkJCQkJICBjbWRfb3B0aW9uX3dhaXRmb3Jyc3AsCi0JCQkJCQkJICAwLCAodm9pZCAqKSZhZmMpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9BVVRPX0ZSRVFfR0VUOgotCQkJewotCQkJCWludCBkYXRhWzNdOwotCQkJCXN0cnVjdCBjbWRfZHNfODAyXzExX2FmYyBhZmM7Ci0JCQkJbWVtc2V0KCZhZmMsIDAsIHNpemVvZihhZmMpKTsKLQkJCQlyZXQgPQotCQkJCSAgICBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKLQkJCQkJCQkgIGNtZF84MDJfMTFfZ2V0X2FmYywKLQkJCQkJCQkgIDAsCi0JCQkJCQkJICBjbWRfb3B0aW9uX3dhaXRmb3Jyc3AsCi0JCQkJCQkJICAwLCAodm9pZCAqKSZhZmMpOwotCQkJCWRhdGFbMF0gPSBhZmMuYWZjX2F1dG87Ci0JCQkJZGF0YVsxXSA9IGFmYy50aW1pbmdfb2Zmc2V0OwotCQkJCWRhdGFbMl0gPSBhZmMuY2Fycmllcl9vZmZzZXQ7Ci0JCQkJaWYgKGNvcHlfdG9fdXNlcgotCQkJCSAgICAod3JxLT51LmRhdGEucG9pbnRlciwgZGF0YSwKLQkJCQkgICAgIHNpemVvZihpbnQpICogMykpIHsKLQkJCQkJbGJzX3ByX2RlYnVnKDEsICJDb3B5IHRvIHVzZXIgZmFpbGVkXG4iKTsKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJfQotCi0JCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gMzsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFdMQU5fU0NBTlBST0JFUzoKLQkJCXsKLQkJCQlpbnQgZGF0YTsKLQkJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoID4gMCkgewotCQkJCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJCQkJICAgICgmZGF0YSwgd3JxLT51LmRhdGEucG9pbnRlciwKLQkJCQkJICAgICBzaXplb2YoaW50KSkpIHsKLQkJCQkJCWxic19wcl9kZWJ1ZygxLAotCQkJCQkJICAgICAgICJDb3B5IGZyb20gdXNlciBmYWlsZWRcbiIpOwotCQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJCX0KLQotCQkJCQlhZGFwdGVyLT5zY2FucHJvYmVzID0gZGF0YTsKLQkJCQl9IGVsc2UgewotCQkJCQlkYXRhID0gYWRhcHRlci0+c2NhbnByb2JlczsKLQkJCQkJaWYgKGNvcHlfdG9fdXNlcgotCQkJCQkgICAgKHdycS0+dS5kYXRhLnBvaW50ZXIsICZkYXRhLAotCQkJCQkgICAgIHNpemVvZihpbnQpKSkgewotCQkJCQkJbGJzX3ByX2RlYnVnKDEsCi0JCQkJCQkgICAgICAgIkNvcHkgdG8gdXNlciBmYWlsZWRcbiIpOwotCQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gMTsKLQkJCX0KLQkJCWJyZWFrOwogCQljYXNlIFdMQU5fTEVEX0dQSU9fQ1RSTDoKIAkJCXsKIAkJCQlpbnQgaTsKQEAgLTI0NzUsMTcgKzk3Nyw2IEBACiAJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gZ3Bpby0+aGVhZGVyLmxlbjsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIFdMQU5fQURBUFRfUkFURVNFVDoKLQkJCXJldCA9IHdsYW5fYWRhcHRfcmF0ZXNldChwcml2LCB3cnEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9JTkFDVElWSVRZX1RJTUVPVVQ6Ci0JCQlyZXQgPSB3bGFuX2luYWN0aXZpdHlfdGltZW91dChwcml2LCB3cnEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTlNOUjoKLQkJCXJldCA9IHdsYW5fZ2V0X3Nucihwcml2LCB3cnEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xBTl9HRVRfUlhJTkZPOgotCQkJcmV0ID0gd2xhbl9nZXRfcnhpbmZvKHByaXYsIHdycSk7CiAJCX0KIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2pvaW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2pvaW4uYwppbmRleCAxMTY4MmNiLi5kNDkyNmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9qb2luLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvam9pbi5jCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSAiam9pbi5oIgogI2luY2x1ZGUgImRldi5oIgogCisjZGVmaW5lIEFEX0hPQ19DQVBfUFJJVkFDWV9PTiAxCisKIC8qKgogICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGZpbmRzIG91dCB0aGUgY29tbW9uIHJhdGVzIGJldHdlZW4gcmF0ZTEgYW5kIHJhdGUyLgogICoKQEAgLTg1LDcgKzg3LDcgQEAKIAl3bGFuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwogCWludCByZXQgPSAwOwogCi0JaWYgKGFkYXB0ZXItPmluZnJhbW9kZSA9PSB3bGFuODAyXzExaW5mcmFzdHJ1Y3R1cmUgJiYKKwlpZiAoYWRhcHRlci0+bW9kZSA9PSBJV19NT0RFX0lORlJBICYmCiAJICAgIGFkYXB0ZXItPmNvbm5lY3Rfc3RhdHVzID09IGxpYmVydGFzX2Nvbm5lY3RlZCkKIAkJcmV0ID0gbGliZXJ0YXNfc2VuZF9kZWF1dGhlbnRpY2F0aW9uKHByaXYpOwogCWVsc2UKQEAgLTk0LDIwICs5Niw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGxpYmVydGFzX2RvX2FkaG9jc3RvcF9pb2N0bCh3bGFuX3ByaXZhdGUgKiBwcml2KQotewotCXdsYW5fYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoYWRhcHRlci0+aW5mcmFtb2RlID09IHdsYW44MDJfMTFpYnNzICYmCi0JICAgIGFkYXB0ZXItPmNvbm5lY3Rfc3RhdHVzID09IGxpYmVydGFzX2Nvbm5lY3RlZCkKLQkJcmV0ID0gbGliZXJ0YXNfc3RvcF9hZGhvY19uZXR3b3JrKHByaXYpOwotCWVsc2UKLQkJcmV0ID0gLUVOT1RTVVBQOwotCi0JcmV0dXJuIHJldDsKLX0KLQogLyoqCiAgKiAgQGJyaWVmIEFzc29jaWF0ZSB0byBhIHNwZWNpZmljIEJTUyBkaXNjb3ZlcmVkIGluIGEgc2NhbgogICoKQEAgLTIwNyw4ICsxOTUsNyBAQAogCS8qIGNoZWNrIGlmIHRoZSByZXF1ZXN0ZWQgU1NJRCBpcyBhbHJlYWR5IGpvaW5lZCAqLwogCWlmIChhZGFwdGVyLT5jdXJic3NwYXJhbXMuc3NpZC5zc2lkbGVuZ3RoCiAJICAgICYmICFsaWJlcnRhc19TU0lEX2NtcCgmcGJzc2Rlc2MtPnNzaWQsICZhZGFwdGVyLT5jdXJic3NwYXJhbXMuc3NpZCkKLQkgICAgJiYgKGFkYXB0ZXItPmN1cmJzc3BhcmFtcy5ic3NkZXNjcmlwdG9yLmluZnJhbW9kZSA9PQotCQl3bGFuODAyXzExaWJzcykpIHsKKwkgICAgJiYgKGFkYXB0ZXItPm1vZGUgPT0gSVdfTU9ERV9BREhPQykpIHsKIAogICAgICAgICBsYnNfcHJfZGVidWcoMSwKIAkJICAgICAgICJBREhPQ19KX0NNRDogTmV3IGFkLWhvYyBTU0lEIGlzIHRoZSBzYW1lIGFzIGN1cnJlbnQsICIKQEAgLTI2MSwxMzAgKzI0OCw2IEBACiB9CiAKIC8qKgotICogIEBicmllZiBTZXQgSWRsZSBPZmYKLSAqCi0gKiAgQHBhcmFtIHByaXYgICAgICAgICBBIHBvaW50ZXIgdG8gd2xhbl9wcml2YXRlIHN0cnVjdHVyZQotICogIEByZXR1cm4gICAgICAgICAgICAgMCAtLXN1Y2Nlc3MsIG90aGVyd2lzZSBmYWlsCi0gKi8KLWludCBsaWJlcnRhc19pZGxlX29mZih3bGFuX3ByaXZhdGUgKiBwcml2KQotewotCXdsYW5fYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7Ci0JaW50IHJldCA9IDA7Ci0JY29uc3QgdTggemVyb21hY1tdID0geyAwLCAwLCAwLCAwLCAwLCAwIH07Ci0JaW50IGk7Ci0KLQlFTlRFUigpOwotCi0JaWYgKGFkYXB0ZXItPmNvbm5lY3Rfc3RhdHVzID09IGxpYmVydGFzX2Rpc2Nvbm5lY3RlZCkgewotCQlpZiAoYWRhcHRlci0+aW5mcmFtb2RlID09IHdsYW44MDJfMTFpbmZyYXN0cnVjdHVyZSkgewotCQkJaWYgKG1lbWNtcChhZGFwdGVyLT5wcmV2aW91c2Jzc2lkLCB6ZXJvbWFjLAotCQkJCSAgIHNpemVvZih6ZXJvbWFjKSkgIT0gMCkgewotCi0JCQkJbGJzX3ByX2RlYnVnKDEsICJQcmV2aW91cyBTU0lEID0gJXNcbiIsCi0JCQkJICAgICAgIGFkYXB0ZXItPnByZXZpb3Vzc3NpZC5zc2lkKTsKLQkJCQlsYnNfcHJfZGVidWcoMSwgIlByZXZpb3VzIEJTU0lEID0gIgotCQkJCSAgICAgICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6XG4iLAotCQkJCSAgICAgICBhZGFwdGVyLT5wcmV2aW91c2Jzc2lkWzBdLAotCQkJCSAgICAgICBhZGFwdGVyLT5wcmV2aW91c2Jzc2lkWzFdLAotCQkJCSAgICAgICBhZGFwdGVyLT5wcmV2aW91c2Jzc2lkWzJdLAotCQkJCSAgICAgICBhZGFwdGVyLT5wcmV2aW91c2Jzc2lkWzNdLAotCQkJCSAgICAgICBhZGFwdGVyLT5wcmV2aW91c2Jzc2lkWzRdLAotCQkJCSAgICAgICBhZGFwdGVyLT5wcmV2aW91c2Jzc2lkWzVdKTsKLQotCQkJCWkgPSBsaWJlcnRhc19maW5kX1NTSURfaW5fbGlzdChhZGFwdGVyLAotCQkJCQkJICAgJmFkYXB0ZXItPnByZXZpb3Vzc3NpZCwKLQkJCQkJCSAgIGFkYXB0ZXItPnByZXZpb3VzYnNzaWQsCi0JCQkJCQkgICBhZGFwdGVyLT5pbmZyYW1vZGUpOwotCi0JCQkJaWYgKGkgPCAwKSB7Ci0JCQkJCWxpYmVydGFzX3NlbmRfc3BlY2lmaWNfQlNTSURfc2Nhbihwcml2LAotCQkJCQkJCSAgICAgIGFkYXB0ZXItPgotCQkJCQkJCSAgICAgIHByZXZpb3VzYnNzaWQsCi0JCQkJCQkJICAgICAgMSk7Ci0JCQkJCWkgPSBsaWJlcnRhc19maW5kX1NTSURfaW5fbGlzdChhZGFwdGVyLAotCQkJCQkJCSAgICZhZGFwdGVyLT4KLQkJCQkJCQkgICBwcmV2aW91c3NzaWQsCi0JCQkJCQkJICAgYWRhcHRlci0+Ci0JCQkJCQkJICAgcHJldmlvdXNic3NpZCwKLQkJCQkJCQkgICBhZGFwdGVyLT4KLQkJCQkJCQkgICBpbmZyYW1vZGUpOwotCQkJCX0KLQotCQkJCWlmIChpIDwgMCkgewotCQkJCQkvKiBJZiB0aGUgQlNTSUQgY291bGQgbm90IGJlIGZvdW5kLCB0cnkganVzdCB0aGUgU1NJRCAqLwotCQkJCQlpID0gbGliZXJ0YXNfZmluZF9TU0lEX2luX2xpc3QoYWRhcHRlciwKLQkJCQkJCQkgICAmYWRhcHRlci0+Ci0JCQkJCQkJICAgcHJldmlvdXNzc2lkLCBOVUxMLAotCQkJCQkJCSAgIGFkYXB0ZXItPgotCQkJCQkJCSAgIGluZnJhbW9kZSk7Ci0JCQkJfQotCi0JCQkJaWYgKGkgPCAwKSB7Ci0JCQkJCWxpYmVydGFzX3NlbmRfc3BlY2lmaWNfU1NJRF9zY2FuKHByaXYsCi0JCQkJCQkJICAgICAmYWRhcHRlci0+Ci0JCQkJCQkJICAgICBwcmV2aW91c3NzaWQsCi0JCQkJCQkJICAgICAxKTsKLQkJCQkJaSA9IGxpYmVydGFzX2ZpbmRfU1NJRF9pbl9saXN0KGFkYXB0ZXIsCi0JCQkJCQkJICAgJmFkYXB0ZXItPgotCQkJCQkJCSAgIHByZXZpb3Vzc3NpZCwgTlVMTCwKLQkJCQkJCQkgICBhZGFwdGVyLT4KLQkJCQkJCQkgICBpbmZyYW1vZGUpOwotCQkJCX0KLQotCQkJCWlmIChpID49IDApIHsKLQkJCQkJcmV0ID0KLQkJCQkJICAgIHdsYW5fYXNzb2NpYXRlKHByaXYsCi0JCQkJCQkJICAgJmFkYXB0ZXItPgotCQkJCQkJCSAgIHNjYW50YWJsZVtpXSk7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgaWYgKGFkYXB0ZXItPmluZnJhbW9kZSA9PSB3bGFuODAyXzExaWJzcykgewotCQkJcmV0ID0gbGliZXJ0YXNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHByaXYsCi0JCQkJCQkgICAgY21kXzgwMl8xMV9hZF9ob2Nfc3RhcnQsCi0JCQkJCQkgICAgMCwKLQkJCQkJCSAgICBjbWRfb3B0aW9uX3dhaXRmb3Jyc3AsCi0JCQkJCQkgICAgMCwgJmFkYXB0ZXItPnByZXZpb3Vzc3NpZCk7Ci0JCX0KLQl9Ci0JLyogZWxzZSBpdCBpcyBjb25uZWN0ZWQgKi8KLQotCWxic19wcl9kZWJ1ZygxLCAiXG53bGFuaWRsZSBpcyBvZmYiKTsKLQlMRUFWRSgpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogIEBicmllZiBTZXQgSWRsZSBPbgotICoKLSAqICBAcGFyYW0gcHJpdiAgICAgICAgIEEgcG9pbnRlciB0byB3bGFuX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHJldHVybiAgICAgICAgICAgICAwIC0tc3VjY2Vzcywgb3RoZXJ3aXNlIGZhaWwKLSAqLwotaW50IGxpYmVydGFzX2lkbGVfb24od2xhbl9wcml2YXRlICogcHJpdikKLXsKLQl3bGFuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwotCWludCByZXQgPSAwOwotCi0JaWYgKGFkYXB0ZXItPmNvbm5lY3Rfc3RhdHVzID09IGxpYmVydGFzX2Nvbm5lY3RlZCkgewotCQlpZiAoYWRhcHRlci0+aW5mcmFtb2RlID09IHdsYW44MDJfMTFpbmZyYXN0cnVjdHVyZSkgewotCQkJbGJzX3ByX2RlYnVnKDEsICJQcmV2aW91cyBTU0lEID0gJXNcbiIsCi0JCQkgICAgICAgYWRhcHRlci0+cHJldmlvdXNzc2lkLnNzaWQpOwotCQkJbWVtbW92ZSgmYWRhcHRlci0+cHJldmlvdXNzc2lkLAotCQkJCSZhZGFwdGVyLT5jdXJic3NwYXJhbXMuc3NpZCwKLQkJCQlzaXplb2Yoc3RydWN0IFdMQU5fODAyXzExX1NTSUQpKTsKLQkJCWxpYmVydGFzX3NlbmRfZGVhdXRoKHByaXYpOwotCi0JCX0gZWxzZSBpZiAoYWRhcHRlci0+aW5mcmFtb2RlID09IHdsYW44MDJfMTFpYnNzKSB7Ci0JCQlyZXQgPSBsaWJlcnRhc19zdG9wX2FkaG9jX25ldHdvcmsocHJpdik7Ci0JCX0KLQotCX0KLQotCWxic19wcl9kZWJ1ZygxLCAiXG53bGFuaWRsZSBpcyBvbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqCiAgKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCBvZiBhdXRoZW50aWNhdGUuCiAgKgogICogIEBwYXJhbSBwcml2ICAgICAgQSBwb2ludGVyIHRvIHdsYW5fcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTM5OCwyMiArMjYxLDM5IEBACiAJCQkJIHZvaWQgKnBkYXRhX2J1ZikKIHsKIAl3bGFuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwotCXN0cnVjdCBjbWRfZHNfODAyXzExX2F1dGhlbnRpY2F0ZSAqcGF1dGhlbnRpY2F0ZSA9Ci0JICAgICZjbWQtPnBhcmFtcy5hdXRoOworCXN0cnVjdCBjbWRfZHNfODAyXzExX2F1dGhlbnRpY2F0ZSAqcGF1dGhlbnRpY2F0ZSA9ICZjbWQtPnBhcmFtcy5hdXRoOworCWludCByZXQgPSAtMTsKIAl1OCAqYnNzaWQgPSBwZGF0YV9idWY7CiAKIAljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihjbWRfODAyXzExX2F1dGhlbnRpY2F0ZSk7Ci0JY21kLT5zaXplID0KLQkgICAgY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfODAyXzExX2F1dGhlbnRpY2F0ZSkKLQkJCSAgICAgKyBTX0RTX0dFTik7CisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBjbWRfZHNfODAyXzExX2F1dGhlbnRpY2F0ZSkKKwkgICAgICAgICAgICAgICAgICAgICAgICArIFNfRFNfR0VOKTsKIAotCXBhdXRoZW50aWNhdGUtPmF1dGh0eXBlID0gYWRhcHRlci0+c2VjaW5mby5hdXRobW9kZTsKKwkvKiB0cmFuc2xhdGUgYXV0aCBtb2RlIHRvIDgwMi4xMSBkZWZpbmVkIHdpcmUgdmFsdWUgKi8KKwlzd2l0Y2ggKGFkYXB0ZXItPnNlY2luZm8uYXV0aF9tb2RlKSB7CisJY2FzZSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTToKKwkJcGF1dGhlbnRpY2F0ZS0+YXV0aHR5cGUgPSAweDAwOworCQlicmVhazsKKwljYXNlIElXX0FVVEhfQUxHX1NIQVJFRF9LRVk6CisJCXBhdXRoZW50aWNhdGUtPmF1dGh0eXBlID0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSBJV19BVVRIX0FMR19MRUFQOgorCQlwYXV0aGVudGljYXRlLT5hdXRodHlwZSA9IDB4ODA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxic19wcl9kZWJ1ZygxLCAiQVVUSF9DTUQ6IGludmFsaWQgYXV0aCBhbGcgMHglWFxuIiwKKwkJICAgICAgICAgICAgIGFkYXB0ZXItPnNlY2luZm8uYXV0aF9tb2RlKTsKKwkJZ290byBvdXQ7CisJfQorCiAJbWVtY3B5KHBhdXRoZW50aWNhdGUtPm1hY2FkZHIsIGJzc2lkLCBFVEhfQUxFTik7CiAKIAlsYnNfcHJfZGVidWcoMSwgIkFVVEhfQ01EOiBCc3NpZCBpcyA6ICV4OiV4OiV4OiV4OiV4OiV4XG4iLAogCSAgICAgICBic3NpZFswXSwgYnNzaWRbMV0sIGJzc2lkWzJdLCBic3NpZFszXSwgYnNzaWRbNF0sIGJzc2lkWzVdKTsKKwlyZXQgPSAwOwogCi0JcmV0dXJuIDA7CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGxpYmVydGFzX2NtZF84MDIxMV9kZWF1dGhlbnRpY2F0ZSh3bGFuX3ByaXZhdGUgKiBwcml2LApAQCAtNTUwLDcgKzQzMCw3IEBACiAJbGJzX3ByX2RlYnVnKDEsICJBU1NPQ19DTUQ6IHJhdGVzLT5oZWFkZXIubGVuID0gJWRcbiIsIHJhdGVzLT5oZWFkZXIubGVuKTsKIAogCS8qIHNldCBJQlNTIGZpZWxkICovCi0JaWYgKHBic3NkZXNjLT5pbmZyYW1vZGUgPT0gd2xhbjgwMl8xMWluZnJhc3RydWN0dXJlKSB7CisJaWYgKHBic3NkZXNjLT5tb2RlID09IElXX01PREVfSU5GUkEpIHsKICNkZWZpbmUgQ0FQSU5GT19FU1NfTU9ERSAxCiAJCXBhc3NvLT5jYXBpbmZvLmVzcyA9IENBUElORk9fRVNTX01PREU7CiAJfQpAQCAtNjI0LDcgKzUwNCw3IEBACiAKIAkvKiBzZXQgdGhlIEJTUyB0eXBlICovCiAJYWRocy0+YnNzdHlwZSA9IGNtZF9ic3NfdHlwZV9pYnNzOwotCXBic3NkZXNjLT5pbmZyYW1vZGUgPSB3bGFuODAyXzExaWJzczsKKwlwYnNzZGVzYy0+bW9kZSA9IElXX01PREVfQURIT0M7CiAJYWRocy0+YmVhY29ucGVyaW9kID0gYWRhcHRlci0+YmVhY29ucGVyaW9kOwogCiAJLyogc2V0IFBoeXNpY2FsIHBhcmFtIHNldCAqLwpAQCAtNjY2LDE1ICs1NDYsMTIgQEAKIAlhZGhzLT5wcm9iZWRlbGF5ID0gY3B1X3RvX2xlMTYoY21kX3NjYW5fcHJvYmVfZGVsYXlfdGltZSk7CiAKIAkvKiBzZXQgdXAgcHJpdmFjeSBpbiBhZGFwdGVyLT5zY2FudGFibGVbaV0gKi8KLQlpZiAoYWRhcHRlci0+c2VjaW5mby5XRVBzdGF0dXMgPT0gd2xhbjgwMl8xMVdFUGVuYWJsZWQpIHsKLQotI2RlZmluZSBBRF9IT0NfQ0FQX1BSSVZBQ1lfT04gMQotCQlsYnNfcHJfZGVidWcoMSwgIkFESE9DX1NfQ01EOiBXRVBzdGF0dXMgc2V0LCBwcml2YWN5IHRvIFdFUFxuIik7CisJaWYgKGFkYXB0ZXItPnNlY2luZm8ud2VwX2VuYWJsZWQpIHsKKwkJbGJzX3ByX2RlYnVnKDEsICJBREhPQ19TX0NNRDogV0VQIGVuYWJsZWQsIHNldHRpbmcgcHJpdmFjeSBvblxuIik7CiAJCXBic3NkZXNjLT5wcml2YWN5ID0gd2xhbjgwMl8xMXByaXZmaWx0ZXI4MDIxeFdFUDsKIAkJYWRocy0+Y2FwLnByaXZhY3kgPSBBRF9IT0NfQ0FQX1BSSVZBQ1lfT047CiAJfSBlbHNlIHsKLQkJbGJzX3ByX2RlYnVnKDEsICJBREhPQ19TX0NNRDogV0VQc3RhdHVzIE5PVCBzZXQsIFNldHRpbmcgIgotCQkgICAgICAgInByaXZhY3kgdG8gQUNDRVBUIEFMTFxuIik7CisJCWxic19wcl9kZWJ1ZygxLCAiQURIT0NfU19DTUQ6IFdFUCBkaXNhYmxlZCwgc2V0dGluZyBwcml2YWN5IG9mZlxuIik7CiAJCXBic3NkZXNjLT5wcml2YWN5ID0gd2xhbjgwMl8xMXByaXZmaWx0ZXJhY2NlcHRhbGw7CiAJfQogCkBAIC03ODYsOSArNjYzLDYgQEAKIAkgICAgICAgcGFkaG9jam9pbi0+YnNzZGVzY3JpcHRvci5CU1NJRFs1XSwKIAkgICAgICAgcGFkaG9jam9pbi0+YnNzZGVzY3JpcHRvci5TU0lEKTsKIAotCWxic19wcl9kZWJ1ZygxLCAiQURIT0NfSl9DTUQ6IERhdGEgUmF0ZSA9ICV4XG4iLAotCSAgICAgICAodTMyKSBwYWRob2Nqb2luLT5ic3NkZXNjcmlwdG9yLmRhdGFyYXRlcyk7Ci0KIAkvKiBmYWlsdGltZW91dCAqLwogCXBhZGhvY2pvaW4tPmZhaWx0aW1lb3V0ID0gY3B1X3RvX2xlMTYoTVJWRFJWX0FTU09DSUFUSU9OX1RJTUVfT1VUKTsKIApAQCAtODMyLDcgKzcwNiw3IEBACiAJcGFkaG9jam9pbi0+YnNzZGVzY3JpcHRvci5zc3BhcmFtc2V0Lmlic3NwYXJhbXNldC5hdGltd2luZG93ID0KIAkgICAgY3B1X3RvX2xlMTYocGJzc2Rlc2MtPmF0aW13aW5kb3cpOwogCi0JaWYgKGFkYXB0ZXItPnNlY2luZm8uV0VQc3RhdHVzID09IHdsYW44MDJfMTFXRVBlbmFibGVkKSB7CisJaWYgKGFkYXB0ZXItPnNlY2luZm8ud2VwX2VuYWJsZWQpIHsKIAkJcGFkaG9jam9pbi0+YnNzZGVzY3JpcHRvci5jYXAucHJpdmFjeSA9IEFEX0hPQ19DQVBfUFJJVkFDWV9PTjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2pvaW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2pvaW4uaAppbmRleCA4ZWZhMjQ1Li4xMTVmNWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9qb2luLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvam9pbi5oCkBAIC0xLDYgKzEsMyBAQAotLyogLSotIG1vZGU6IEM7IHRhYi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLSAqLwotLyogdmk6IHNldCBleHBhbmR0YWIgc2hpZnR3aWR0aD00IHRhYnN0b3A9NCB0ZXh0d2lkdGg9Nzg6ICovCi0KIC8qKgogICAqIEludGVyZmFjZSBmb3IgdGhlIHdsYW4gaW5mcmFzdHJ1Y3R1cmUgYW5kIGFkaG9jIGpvaW4gcm91dGluZXMKICAgKgpAQCAtNDAsMTAgKzM3LDYgQEAKIGV4dGVybiBpbnQgbGliZXJ0YXNfcmV0XzgwMjExX2Fzc29jaWF0ZSh3bGFuX3ByaXZhdGUgKiBwcml2LAogCQkJCSAgICAgc3RydWN0IGNtZF9kc19jb21tYW5kICpyZXNwKTsKIAotZXh0ZXJuIGludCBsaWJlcnRhc19pZGxlX29uKHdsYW5fcHJpdmF0ZSAqIHByaXYpOwotZXh0ZXJuIGludCBsaWJlcnRhc19pZGxlX29mZih3bGFuX3ByaXZhdGUgKiBwcml2KTsKLQotZXh0ZXJuIGludCBsaWJlcnRhc19kb19hZGhvY3N0b3BfaW9jdGwod2xhbl9wcml2YXRlICogcHJpdik7CiBleHRlcm4gaW50IGxpYmVydGFzX3JlYXNzb2NpYXRpb25fdGhyZWFkKHZvaWQgKmRhdGEpOwogCiBzdHJ1Y3QgV0xBTl84MDJfMTFfU1NJRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwppbmRleCBkY2JmMTAyLi5iOWIyNWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCkBAIC0yMSw2ICsyMSwxMyBAQAogI2luY2x1ZGUgImRlYnVnZnMuaCIKICNpbmNsdWRlICJhc3NvYy5oIgogCisjZGVmaW5lIERSSVZFUl9SRUxFQVNFX1ZFUlNJT04gIjMyMC5wMCIKK2NvbnN0IGNoYXIgbGliZXJ0YXNfZHJpdmVyX3ZlcnNpb25bXSA9ICJDT01NLVVTQjgzODgtIiBEUklWRVJfUkVMRUFTRV9WRVJTSU9OCisjaWZkZWYgIERFQlVHCisgICAgIi1kYmciCisjZW5kaWYKKyAgICAiIjsKKwogI2lmZGVmIEVOQUJMRV9QTQogc3RhdGljIHN0cnVjdCBwbV9kZXYgKndsYW5fcG1fZGV2ID0gTlVMTDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKaW5kZXggN2UzZjc4Zi4uOTY2MTlhMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJTEVBVkUoKTsKIH0KIAotaW50IGxpYmVydGFzX3VwbG9hZF9yeF9wYWNrZXQod2xhbl9wcml2YXRlICogcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgbGliZXJ0YXNfdXBsb2FkX3J4X3BhY2tldCh3bGFuX3ByaXZhdGUgKiBwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWxic19wcl9kZWJ1ZygxLCAic2tiLT5kYXRhPSVwXG4iLCBza2ItPmRhdGEpOwogCkBAIC0xNDgsOCArMTQ4LDYgQEAKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCiAJbmV0aWZfcngoc2tiKTsKLQotCXJldHVybiAwOwogfQogCiAvKioKQEAgLTIxMCw3ICsyMDgsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JbGJzX3ByX2RlYnVnKDEsICJSWCBEYXRhOiBza2ItPmxlbiAtIHNpemVvZihSeFBkKSA9ICVkIC0gJWQgPSAlZFxuIiwKKwlsYnNfcHJfZGVidWcoMSwgIlJYIERhdGE6IHNrYi0+bGVuIC0gc2l6ZW9mKFJ4UGQpID0gJWQgLSAlemQgPSAlemRcbiIsCiAJICAgICAgIHNrYi0+bGVuLCBzaXplb2Yoc3RydWN0IHJ4cGQpLCBza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgcnhwZCkpOwogCiAJbGJzX2RiZ19oZXgoIlJYIERhdGE6IERlc3QiLCBwX3J4X3BrdC0+ZXRoODAzX2hkci5kZXN0X2FkZHIsCkBAIC0yNjksMTUgKzI2NywxMSBAQAogCXdsYW5fY29tcHV0ZV9yc3NpKHByaXYsIHBfcnhfcGQpOwogCiAJbGJzX3ByX2RlYnVnKDEsICJSWCBEYXRhOiBzaXplIG9mIGFjdHVhbCBwYWNrZXQgPSAlZFxuIiwgc2tiLT5sZW4pOwotCWlmIChsaWJlcnRhc191cGxvYWRfcnhfcGFja2V0KHByaXYsIHNrYikpIHsKLQkJbGJzX3ByX2RlYnVnKDEsICJSWCBlcnJvcjogbGliZXJ0YXNfdXBsb2FkX3J4X3BhY2tldCIKLQkJICAgICAgICIgcmV0dXJucyBmYWlsdXJlXG4iKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gZG9uZTsKLQl9CiAJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwogCisJbGliZXJ0YXNfdXBsb2FkX3J4X3BhY2tldChwcml2LCBza2IpOworCiAJcmV0ID0gMDsKIGRvbmU6CiAJTEVBVkUoKTsKQEAgLTM2NCw3ICszNTgsNyBAQAogCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAl9CiAKLQlsYnNfcHJfZGVidWcoMSwgIlJYIERhdGE6IHNrYi0+bGVuIC0gc2l6ZW9mKFJ4UGQpID0gJWQgLSAlZCA9ICVkXG4iLAorCWxic19wcl9kZWJ1ZygxLCAiUlggRGF0YTogc2tiLT5sZW4gLSBzaXplb2YoUnhQZCkgPSAlZCAtICV6ZCA9ICV6ZFxuIiwKIAkgICAgICAgc2tiLT5sZW4sIHNpemVvZihzdHJ1Y3QgcnhwZCksIHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCByeHBkKSk7CiAKIAkvKiBjcmVhdGUgdGhlIGV4cG9ydGVkIHJhZGlvIGhlYWRlciAqLwpAQCAtNDM4LDIyICs0MzIsMTQgQEAKIAl3bGFuX2NvbXB1dGVfcnNzaShwcml2LCBwcnhwZCk7CiAKIAlsYnNfcHJfZGVidWcoMSwgIlJYIERhdGE6IHNpemUgb2YgYWN0dWFsIHBhY2tldCA9ICVkXG4iLCBza2ItPmxlbik7Ci0KLQlpZiAobGliZXJ0YXNfdXBsb2FkX3J4X3BhY2tldChwcml2LCBza2IpKSB7Ci0JCWxic19wcl9kZWJ1ZygxLCAiUlggZXJyb3I6IGxpYmVydGFzX3VwbG9hZF9yeF9wYWNrZXQgIgotCQkJInJldHVybnMgZmFpbHVyZVxuIik7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGRvbmU7Ci0JfQotCiAJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwogCisJbGliZXJ0YXNfdXBsb2FkX3J4X3BhY2tldChwcml2LCBza2IpOworCiAJcmV0ID0gMDsKIGRvbmU6CiAJTEVBVkUoKTsKIAotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKDB4MDAxOSk7CS8qIEVUSF9QXzgwMjExX1JBVyAqLwotCiAJcmV0dXJuIChyZXQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCmluZGV4IGUxODcwNjIuLjNjMGIxYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKQEAgLTEsNiArMSwzIEBACi0vKiAtKi0gbW9kZTogQzsgdGFiLXdpZHRoOiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotICovCi0vKiB2aTogc2V0IGV4cGFuZHRhYiBzaGlmdHdpZHRoPTQgdGFic3RvcD00IHRleHR3aWR0aD03ODogKi8KLQogLyoqCiAgICogRnVuY3Rpb25zIGltcGxlbWVudGluZyB3bGFuIHNjYW4gSU9DVEwgYW5kIGZpcm13YXJlIGNvbW1hbmQgQVBJcwogICAqCkBAIC04NywxMTggKzg0LDk1IEBACiAgKgogICogIEByZXR1cm4gICAgICAgIEluZGV4IGluIHNjYW50YWJsZSwgb3IgZXJyb3IgY29kZSBpZiBuZWdhdGl2ZQogICovCi1zdGF0aWMgaW50IGlzX25ldHdvcmtfY29tcGF0aWJsZSh3bGFuX2FkYXB0ZXIgKiBhZGFwdGVyLCBpbnQgaW5kZXgsIGludCBtb2RlKQorc3RhdGljIGludCBpc19uZXR3b3JrX2NvbXBhdGlibGUod2xhbl9hZGFwdGVyICogYWRhcHRlciwgaW50IGluZGV4LCB1OCBtb2RlKQogewogCUVOVEVSKCk7CiAKLQlpZiAoYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS5pbmZyYW1vZGUgPT0gbW9kZSkgewotCQlpZiAoYWRhcHRlci0+c2VjaW5mby5XRVBzdGF0dXMgPT0gd2xhbjgwMl8xMVdFUGRpc2FibGVkCisJaWYgKGFkYXB0ZXItPnNjYW50YWJsZVtpbmRleF0ubW9kZSA9PSBtb2RlKSB7CisJCWlmICggICAhYWRhcHRlci0+c2VjaW5mby53ZXBfZW5hYmxlZAogCQkgICAgJiYgIWFkYXB0ZXItPnNlY2luZm8uV1BBZW5hYmxlZAogCQkgICAgJiYgIWFkYXB0ZXItPnNlY2luZm8uV1BBMmVuYWJsZWQKLQkJICAgICYmIGFkYXB0ZXItPnNjYW50YWJsZVtpbmRleF0ud3BhX3N1cHBsaWNhbnQud3BhX2llWzBdICE9Ci0JCSAgICBXUEFfSUUKLQkJICAgICYmIGFkYXB0ZXItPnNjYW50YWJsZVtpbmRleF0ud3BhMl9zdXBwbGljYW50LndwYV9pZVswXSAhPQotCQkgICAgV1BBMl9JRSAmJiBhZGFwdGVyLT5zZWNpbmZvLkVuY3J5cHRpb25tb2RlID09IENJUEhFUl9OT05FCisJCSAgICAmJiBhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLndwYV9pZVswXSAhPSBXUEFfSUUKKwkJICAgICYmIGFkYXB0ZXItPnNjYW50YWJsZVtpbmRleF0ucnNuX2llWzBdICE9IFdQQTJfSUUKIAkJICAgICYmICFhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLnByaXZhY3kpIHsKIAkJCS8qIG5vIHNlY3VyaXR5ICovCiAJCQlMRUFWRSgpOwogCQkJcmV0dXJuIGluZGV4OwotCQl9IGVsc2UgaWYgKGFkYXB0ZXItPnNlY2luZm8uV0VQc3RhdHVzID09IHdsYW44MDJfMTFXRVBlbmFibGVkCisJCX0gZWxzZSBpZiAoICAgYWRhcHRlci0+c2VjaW5mby53ZXBfZW5hYmxlZAogCQkJICAgJiYgIWFkYXB0ZXItPnNlY2luZm8uV1BBZW5hYmxlZAogCQkJICAgJiYgIWFkYXB0ZXItPnNlY2luZm8uV1BBMmVuYWJsZWQKIAkJCSAgICYmIGFkYXB0ZXItPnNjYW50YWJsZVtpbmRleF0ucHJpdmFjeSkgewogCQkJLyogc3RhdGljIFdFUCBlbmFibGVkICovCiAJCQlMRUFWRSgpOwogCQkJcmV0dXJuIGluZGV4OwotCQl9IGVsc2UgaWYgKGFkYXB0ZXItPnNlY2luZm8uV0VQc3RhdHVzID09IHdsYW44MDJfMTFXRVBkaXNhYmxlZAorCQl9IGVsc2UgaWYgKCAgICFhZGFwdGVyLT5zZWNpbmZvLndlcF9lbmFibGVkCiAJCQkgICAmJiBhZGFwdGVyLT5zZWNpbmZvLldQQWVuYWJsZWQKIAkJCSAgICYmICFhZGFwdGVyLT5zZWNpbmZvLldQQTJlbmFibGVkCi0JCQkgICAmJiAoYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS53cGFfc3VwcGxpY2FudC4KLQkJCSAgICAgICB3cGFfaWVbMF0KLQkJCSAgICAgICA9PSBXUEFfSUUpCisJCQkgICAmJiAoYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS53cGFfaWVbMF0gPT0gV1BBX0lFKQogCQkJICAgLyogcHJpdmFjeSBiaXQgbWF5IE5PVCBiZSBzZXQgaW4gc29tZSBBUHMgbGlrZSBMaW5rU3lzIFdSVDU0RwogCQkJICAgICAgJiYgYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS5wcml2YWN5ICovCiAJCSAgICApIHsKIAkJCS8qIFdQQSBlbmFibGVkICovCi0gICAgICAgICAgICBsYnNfcHJfZGVidWcoMSwKKwkJCWxic19wcl9kZWJ1ZygxLAogCQkJICAgICAgICJpc19uZXR3b3JrX2NvbXBhdGlibGUoKSBXUEE6IGluZGV4PSVkIHdwYV9pZT0lI3ggIgotCQkJICAgICAgICJ3cGEyX2llPSUjeCBXRVA9JXMgV1BBPSVzIFdQQTI9JXMgRW5jbW9kZT0lI3ggIgorCQkJICAgICAgICJ3cGEyX2llPSUjeCBXRVA9JXMgV1BBPSVzIFdQQTI9JXMgIgogCQkJICAgICAgICJwcml2YWN5PSUjeFxuIiwgaW5kZXgsCi0JCQkgICAgICAgYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS53cGFfc3VwcGxpY2FudC4KLQkJCSAgICAgICB3cGFfaWVbMF0sCi0JCQkgICAgICAgYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS53cGEyX3N1cHBsaWNhbnQuCi0JCQkgICAgICAgd3BhX2llWzBdLAotCQkJICAgICAgIChhZGFwdGVyLT5zZWNpbmZvLldFUHN0YXR1cyA9PQotCQkJCXdsYW44MDJfMTFXRVBlbmFibGVkKSA/ICJlIiA6ICJkIiwKLQkJCSAgICAgICAoYWRhcHRlci0+c2VjaW5mby5XUEFlbmFibGVkKSA/ICJlIiA6ICJkIiwKLQkJCSAgICAgICAoYWRhcHRlci0+c2VjaW5mby5XUEEyZW5hYmxlZCkgPyAiZSIgOiAiZCIsCi0JCQkgICAgICAgYWRhcHRlci0+c2VjaW5mby5FbmNyeXB0aW9ubW9kZSwKKwkJCSAgICAgICBhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLndwYV9pZVswXSwKKwkJCSAgICAgICBhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLnJzbl9pZVswXSwKKwkJCSAgICAgICBhZGFwdGVyLT5zZWNpbmZvLndlcF9lbmFibGVkID8gImUiIDogImQiLAorCQkJICAgICAgIGFkYXB0ZXItPnNlY2luZm8uV1BBZW5hYmxlZCA/ICJlIiA6ICJkIiwKKwkJCSAgICAgICBhZGFwdGVyLT5zZWNpbmZvLldQQTJlbmFibGVkID8gImUiIDogImQiLAogCQkJICAgICAgIGFkYXB0ZXItPnNjYW50YWJsZVtpbmRleF0ucHJpdmFjeSk7CiAJCQlMRUFWRSgpOwogCQkJcmV0dXJuIGluZGV4OwotCQl9IGVsc2UgaWYgKGFkYXB0ZXItPnNlY2luZm8uV0VQc3RhdHVzID09IHdsYW44MDJfMTFXRVBkaXNhYmxlZAorCQl9IGVsc2UgaWYgKCAgICFhZGFwdGVyLT5zZWNpbmZvLndlcF9lbmFibGVkCiAJCQkgICAmJiAhYWRhcHRlci0+c2VjaW5mby5XUEFlbmFibGVkCiAJCQkgICAmJiBhZGFwdGVyLT5zZWNpbmZvLldQQTJlbmFibGVkCi0JCQkgICAmJiAoYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS53cGEyX3N1cHBsaWNhbnQuCi0JCQkgICAgICAgd3BhX2llWzBdCi0JCQkgICAgICAgPT0gV1BBMl9JRSkKKwkJCSAgICYmIChhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLnJzbl9pZVswXSA9PSBXUEEyX0lFKQogCQkJICAgLyogcHJpdmFjeSBiaXQgbWF5IE5PVCBiZSBzZXQgaW4gc29tZSBBUHMgbGlrZSBMaW5rU3lzIFdSVDU0RwogCQkJICAgICAgJiYgYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS5wcml2YWN5ICovCiAJCSAgICApIHsKIAkJCS8qIFdQQTIgZW5hYmxlZCAqLwotICAgICAgICAgICAgbGJzX3ByX2RlYnVnKDEsCisJCQlsYnNfcHJfZGVidWcoMSwKIAkJCSAgICAgICAiaXNfbmV0d29ya19jb21wYXRpYmxlKCkgV1BBMjogaW5kZXg9JWQgd3BhX2llPSUjeCAiCi0JCQkgICAgICAgIndwYTJfaWU9JSN4IFdFUD0lcyBXUEE9JXMgV1BBMj0lcyBFbmNtb2RlPSUjeCAiCisJCQkgICAgICAgIndwYTJfaWU9JSN4IFdFUD0lcyBXUEE9JXMgV1BBMj0lcyAiCiAJCQkgICAgICAgInByaXZhY3k9JSN4XG4iLCBpbmRleCwKLQkJCSAgICAgICBhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLndwYV9zdXBwbGljYW50LgotCQkJICAgICAgIHdwYV9pZVswXSwKLQkJCSAgICAgICBhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLndwYTJfc3VwcGxpY2FudC4KLQkJCSAgICAgICB3cGFfaWVbMF0sCi0JCQkgICAgICAgKGFkYXB0ZXItPnNlY2luZm8uV0VQc3RhdHVzID09Ci0JCQkJd2xhbjgwMl8xMVdFUGVuYWJsZWQpID8gImUiIDogImQiLAotCQkJICAgICAgIChhZGFwdGVyLT5zZWNpbmZvLldQQWVuYWJsZWQpID8gImUiIDogImQiLAotCQkJICAgICAgIChhZGFwdGVyLT5zZWNpbmZvLldQQTJlbmFibGVkKSA/ICJlIiA6ICJkIiwKLQkJCSAgICAgICBhZGFwdGVyLT5zZWNpbmZvLkVuY3J5cHRpb25tb2RlLAorCQkJICAgICAgIGFkYXB0ZXItPnNjYW50YWJsZVtpbmRleF0ud3BhX2llWzBdLAorCQkJICAgICAgIGFkYXB0ZXItPnNjYW50YWJsZVtpbmRleF0ucnNuX2llWzBdLAorCQkJICAgICAgIGFkYXB0ZXItPnNlY2luZm8ud2VwX2VuYWJsZWQgPyAiZSIgOiAiZCIsCisJCQkgICAgICAgYWRhcHRlci0+c2VjaW5mby5XUEFlbmFibGVkID8gImUiIDogImQiLAorCQkJICAgICAgIGFkYXB0ZXItPnNlY2luZm8uV1BBMmVuYWJsZWQgPyAiZSIgOiAiZCIsCiAJCQkgICAgICAgYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS5wcml2YWN5KTsKIAkJCUxFQVZFKCk7CiAJCQlyZXR1cm4gaW5kZXg7Ci0JCX0gZWxzZSBpZiAoYWRhcHRlci0+c2VjaW5mby5XRVBzdGF0dXMgPT0gd2xhbjgwMl8xMVdFUGRpc2FibGVkCisJCX0gZWxzZSBpZiAoICAgIWFkYXB0ZXItPnNlY2luZm8ud2VwX2VuYWJsZWQKIAkJCSAgICYmICFhZGFwdGVyLT5zZWNpbmZvLldQQWVuYWJsZWQKIAkJCSAgICYmICFhZGFwdGVyLT5zZWNpbmZvLldQQTJlbmFibGVkCi0JCQkgICAmJiAoYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS53cGFfc3VwcGxpY2FudC4KLQkJCSAgICAgICB3cGFfaWVbMF0KLQkJCSAgICAgICAhPSBXUEFfSUUpCi0JCQkgICAmJiAoYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS53cGEyX3N1cHBsaWNhbnQuCi0JCQkgICAgICAgd3BhX2llWzBdCi0JCQkgICAgICAgIT0gV1BBMl9JRSkKLQkJCSAgICYmIGFkYXB0ZXItPnNlY2luZm8uRW5jcnlwdGlvbm1vZGUgIT0gQ0lQSEVSX05PTkUKKwkJCSAgICYmIChhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLndwYV9pZVswXSAhPSBXUEFfSUUpCisJCQkgICAmJiAoYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS5yc25faWVbMF0gIT0gV1BBMl9JRSkKIAkJCSAgICYmIGFkYXB0ZXItPnNjYW50YWJsZVtpbmRleF0ucHJpdmFjeSkgewogCQkJLyogZHluYW1pYyBXRVAgZW5hYmxlZCAqLwotICAgICAgICAgICAgbGJzX3ByX2RlYnVnKDEsCisJCQlsYnNfcHJfZGVidWcoMSwKIAkJCSAgICAgICAiaXNfbmV0d29ya19jb21wYXRpYmxlKCkgZHluYW1pYyBXRVA6IGluZGV4PSVkICIKLQkJCSAgICAgICAid3BhX2llPSUjeCB3cGEyX2llPSUjeCBFbmNtb2RlPSUjeCBwcml2YWN5PSUjeFxuIiwKKwkJCSAgICAgICAid3BhX2llPSUjeCB3cGEyX2llPSUjeCBwcml2YWN5PSUjeFxuIiwKIAkJCSAgICAgICBpbmRleCwKLQkJCSAgICAgICBhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLndwYV9zdXBwbGljYW50LgotCQkJICAgICAgIHdwYV9pZVswXSwKLQkJCSAgICAgICBhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLndwYTJfc3VwcGxpY2FudC4KLQkJCSAgICAgICB3cGFfaWVbMF0sIGFkYXB0ZXItPnNlY2luZm8uRW5jcnlwdGlvbm1vZGUsCisJCQkgICAgICAgYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS53cGFfaWVbMF0sCisJCQkgICAgICAgYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS5yc25faWVbMF0sCiAJCQkgICAgICAgYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS5wcml2YWN5KTsKIAkJCUxFQVZFKCk7CiAJCQlyZXR1cm4gaW5kZXg7CiAJCX0KIAogCQkvKiBzZWN1cml0eSBkb2Vzbid0IG1hdGNoICovCi0gICAgICAgIGxic19wcl9kZWJ1ZygxLAorCQlsYnNfcHJfZGVidWcoMSwKIAkJICAgICAgICJpc19uZXR3b3JrX2NvbXBhdGlibGUoKSBGQUlMRUQ6IGluZGV4PSVkIHdwYV9pZT0lI3ggIgotCQkgICAgICAgIndwYTJfaWU9JSN4IFdFUD0lcyBXUEE9JXMgV1BBMj0lcyBFbmNtb2RlPSUjeCBwcml2YWN5PSUjeFxuIiwKKwkJICAgICAgICJ3cGEyX2llPSUjeCBXRVA9JXMgV1BBPSVzIFdQQTI9JXMgcHJpdmFjeT0lI3hcbiIsCiAJCSAgICAgICBpbmRleCwKLQkJICAgICAgIGFkYXB0ZXItPnNjYW50YWJsZVtpbmRleF0ud3BhX3N1cHBsaWNhbnQud3BhX2llWzBdLAotCQkgICAgICAgYWRhcHRlci0+c2NhbnRhYmxlW2luZGV4XS53cGEyX3N1cHBsaWNhbnQud3BhX2llWzBdLAotCQkgICAgICAgKGFkYXB0ZXItPnNlY2luZm8uV0VQc3RhdHVzID09Ci0JCQl3bGFuODAyXzExV0VQZW5hYmxlZCkgPyAiZSIgOiAiZCIsCi0JCSAgICAgICAoYWRhcHRlci0+c2VjaW5mby5XUEFlbmFibGVkKSA/ICJlIiA6ICJkIiwKLQkJICAgICAgIChhZGFwdGVyLT5zZWNpbmZvLldQQTJlbmFibGVkKSA/ICJlIiA6ICJkIiwKLQkJICAgICAgIGFkYXB0ZXItPnNlY2luZm8uRW5jcnlwdGlvbm1vZGUsCisJCSAgICAgICBhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLndwYV9pZVswXSwKKwkJICAgICAgIGFkYXB0ZXItPnNjYW50YWJsZVtpbmRleF0ucnNuX2llWzBdLAorCQkgICAgICAgYWRhcHRlci0+c2VjaW5mby53ZXBfZW5hYmxlZCA/ICJlIiA6ICJkIiwKKwkJICAgICAgIGFkYXB0ZXItPnNlY2luZm8uV1BBZW5hYmxlZCA/ICJlIiA6ICJkIiwKKwkJICAgICAgIGFkYXB0ZXItPnNlY2luZm8uV1BBMmVuYWJsZWQgPyAiZSIgOiAiZCIsCiAJCSAgICAgICBhZGFwdGVyLT5zY2FudGFibGVbaW5kZXhdLnByaXZhY3kpOwogCQlMRUFWRSgpOwogCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKQEAgLTkyNCw4ICs4OTgsNiBAQAogCXU4IGZvdW5kZGF0YXJhdGVpZTsKIAlpbnQgYnl0ZXNsZWZ0Zm9yY3VycmVudGJlYWNvbjsKIAotCXN0cnVjdCBXUEFfU1VQUExJQ0FOVCAqcHdwYV9zdXBwbGljYW50OwotCXN0cnVjdCBXUEFfU1VQUExJQ0FOVCAqcHdwYTJfc3VwcGxpY2FudDsKIAlzdHJ1Y3QgSUVfV1BBICpwSWU7CiAJY29uc3QgdTggb3VpMDFbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEgfTsKIApAQCAtOTYyLDkgKzkzNCw2IEBACiAKIAlieXRlc2xlZnRmb3JjdXJyZW50YmVhY29uID0gYmVhY29uc2l6ZTsKIAotCXB3cGFfc3VwcGxpY2FudCA9ICZwQlNTRW50cnktPndwYV9zdXBwbGljYW50OwotCXB3cGEyX3N1cHBsaWNhbnQgPSAmcEJTU0VudHJ5LT53cGEyX3N1cHBsaWNhbnQ7Ci0KIAltZW1jcHkocEJTU0VudHJ5LT5tYWNhZGRyZXNzLCBwY3VycmVudHB0ciwgRVRIX0FMRU4pOwogCWxic19wcl9kZWJ1ZygxLCAiSW50ZXJwcmV0SUU6IEFQIE1BQyBBZGRyLSV4OiV4OiV4OiV4OiV4OiV4XG4iLAogCSAgICAgICBwQlNTRW50cnktPm1hY2FkZHJlc3NbMF0sIHBCU1NFbnRyeS0+bWFjYWRkcmVzc1sxXSwKQEAgLTEwMjcsOSArOTk2LDkgQEAKIAl9CiAKIAlpZiAocGNhcC0+aWJzcyA9PSAxKSB7Ci0JCXBCU1NFbnRyeS0+aW5mcmFtb2RlID0gd2xhbjgwMl8xMWlic3M7CisJCXBCU1NFbnRyeS0+bW9kZSA9IElXX01PREVfQURIT0M7CiAJfSBlbHNlIHsKLQkJcEJTU0VudHJ5LT5pbmZyYW1vZGUgPSB3bGFuODAyXzExaW5mcmFzdHJ1Y3R1cmU7CisJCXBCU1NFbnRyeS0+bW9kZSA9IElXX01PREVfSU5GUkE7CiAJfQogCiAJLyogcHJvY2VzcyB2YXJpYWJsZSBJRSAqLwpAQCAtMTExNiw3ICsxMDg1LDcgQEAKIAkJCSAgICBzaXplb2YocGNvdW50cnlpbmZvLT5jb3VudHJ5Y29kZSkKIAkJCSAgICB8fCBwY291bnRyeWluZm8tPmxlbiA+IDI1NCkgewogCQkJCWxic19wcl9kZWJ1ZygxLCAiSW50ZXJwcmV0SUU6IDExRC0gRXJyICIKLQkJCQkgICAgICAgIkNvdW50cnlJbmZvIGxlbiA9JWQgbWluPSVkIG1heD0yNTRcbiIsCisJCQkJICAgICAgICJDb3VudHJ5SW5mbyBsZW4gPSVkIG1pbj0lemQgbWF4PTI1NFxuIiwKIAkJCQkgICAgICAgcGNvdW50cnlpbmZvLT5sZW4sCiAJCQkJICAgICAgIHNpemVvZihwY291bnRyeWluZm8tPmNvdW50cnljb2RlKSk7CiAJCQkJTEVBVkUoKTsKQEAgLTExNjAsMjcgKzExMjksMjcgQEAKICNkZWZpbmUgSUVfSURfTEVOX0ZJRUxEU19CWVRFUyAyCiAJCQlwSWUgPSAoc3RydWN0IElFX1dQQSAqKXBjdXJyZW50cHRyOwogCi0JCQlpZiAoIW1lbWNtcChwSWUtPm91aSwgb3VpMDEsIHNpemVvZihvdWkwMSkpKSB7Ci0JCQkJcHdwYV9zdXBwbGljYW50LT53cGFfaWVfbGVuCi0JCQkJICAgID0gbWluX3Qoc2l6ZV90LCBlbGVtbGVuICsgSUVfSURfTEVOX0ZJRUxEU19CWVRFUywKLQkJCQkJICBzaXplb2YocHdwYV9zdXBwbGljYW50LT53cGFfaWUpKTsKLQkJCQltZW1jcHkocHdwYV9zdXBwbGljYW50LT53cGFfaWUsCi0JCQkJICAgICAgIHBjdXJyZW50cHRyLAotCQkJCSAgICAgICBwd3BhX3N1cHBsaWNhbnQtPndwYV9pZV9sZW4pOwotCQkJCWxic19kYmdfaGV4KCJJbnRlcnByZXRJRTogUmVzcCBXUEFfSUUiLAotCQkJCQlwd3BhX3N1cHBsaWNhbnQtPndwYV9pZSwgZWxlbWxlbik7Ci0JCQl9CisJCQlpZiAobWVtY21wKHBJZS0+b3VpLCBvdWkwMSwgc2l6ZW9mKG91aTAxKSkpCisJCQkJYnJlYWs7CisKKwkJCXBCU1NFbnRyeS0+d3BhX2llX2xlbiA9IG1pbl90KHNpemVfdCwKKwkJCQllbGVtbGVuICsgSUVfSURfTEVOX0ZJRUxEU19CWVRFUywKKwkJCQlzaXplb2YocEJTU0VudHJ5LT53cGFfaWUpKTsKKwkJCW1lbWNweShwQlNTRW50cnktPndwYV9pZSwgcGN1cnJlbnRwdHIsCisJCQkJcEJTU0VudHJ5LT53cGFfaWVfbGVuKTsKKwkJCWxic19kYmdfaGV4KCJJbnRlcnByZXRJRTogUmVzcCBXUEFfSUUiLAorCQkJCXBCU1NFbnRyeS0+d3BhX2llLCBlbGVtbGVuKTsKIAkJCWJyZWFrOwogCQljYXNlIFdQQTJfSUU6CiAJCQlwSWUgPSAoc3RydWN0IElFX1dQQSAqKXBjdXJyZW50cHRyOwotCQkJcHdwYTJfc3VwcGxpY2FudC0+d3BhX2llX2xlbgotCQkJICAgID0gbWluX3Qoc2l6ZV90LCBlbGVtbGVuICsgSUVfSURfTEVOX0ZJRUxEU19CWVRFUywKLQkJCQkgIHNpemVvZihwd3BhMl9zdXBwbGljYW50LT53cGFfaWUpKTsKLQkJCW1lbWNweShwd3BhMl9zdXBwbGljYW50LT53cGFfaWUsCi0JCQkgICAgICAgcGN1cnJlbnRwdHIsIHB3cGEyX3N1cHBsaWNhbnQtPndwYV9pZV9sZW4pOwogCisJCQlwQlNTRW50cnktPnJzbl9pZV9sZW4gPSBtaW5fdChzaXplX3QsCisJCQkJZWxlbWxlbiArIElFX0lEX0xFTl9GSUVMRFNfQllURVMsCisJCQkJc2l6ZW9mKHBCU1NFbnRyeS0+cnNuX2llKSk7CisJCQltZW1jcHkocEJTU0VudHJ5LT5yc25faWUsIHBjdXJyZW50cHRyLAorCQkJCXBCU1NFbnRyeS0+cnNuX2llX2xlbik7CiAJCQlsYnNfZGJnX2hleCgiSW50ZXJwcmV0SUU6IFJlc3AgV1BBMl9JRSIsCi0JCQkJcHdwYTJfc3VwcGxpY2FudC0+d3BhX2llLCBlbGVtbGVuKTsKKwkJCQlwQlNTRW50cnktPnJzbl9pZSwgZWxlbWxlbik7CiAJCQlicmVhazsKIAkJY2FzZSBUSU06CiAJCQlicmVhazsKQEAgLTEyMjcsNyArMTE5Niw3IEBACiAgKgogICogIEByZXR1cm4gICAgICAgICBpbmRleCBpbiBCU1NJRCBsaXN0LCBvciBlcnJvciByZXR1cm4gY29kZSAoPCAwKQogICovCi1pbnQgbGliZXJ0YXNfZmluZF9CU1NJRF9pbl9saXN0KHdsYW5fYWRhcHRlciAqIGFkYXB0ZXIsIHU4ICogYnNzaWQsIGludCBtb2RlKQoraW50IGxpYmVydGFzX2ZpbmRfQlNTSURfaW5fbGlzdCh3bGFuX2FkYXB0ZXIgKiBhZGFwdGVyLCB1OCAqIGJzc2lkLCB1OCBtb2RlKQogewogCWludCByZXQgPSAtRU5FVFVOUkVBQ0g7CiAJaW50IGk7CkBAIC0xMjQ3LDggKzEyMTYsOCBAQAogCWZvciAoaSA9IDA7IHJldCA8IDAgJiYgaSA8IGFkYXB0ZXItPm51bWluc2NhbnRhYmxlOyBpKyspIHsKIAkJaWYgKCFtZW1jbXAoYWRhcHRlci0+c2NhbnRhYmxlW2ldLm1hY2FkZHJlc3MsIGJzc2lkLCBFVEhfQUxFTikpIHsKIAkJCXN3aXRjaCAobW9kZSkgewotCQkJY2FzZSB3bGFuODAyXzExaW5mcmFzdHJ1Y3R1cmU6Ci0JCQljYXNlIHdsYW44MDJfMTFpYnNzOgorCQkJY2FzZSBJV19NT0RFX0lORlJBOgorCQkJY2FzZSBJV19NT0RFX0FESE9DOgogCQkJCXJldCA9IGlzX25ldHdvcmtfY29tcGF0aWJsZShhZGFwdGVyLCBpLCBtb2RlKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CkBAIC0xMjcyLDcgKzEyNDEsNyBAQAogICogIEByZXR1cm4gICAgICAgICBpbmRleCBpbiBCU1NJRCBsaXN0CiAgKi8KIGludCBsaWJlcnRhc19maW5kX1NTSURfaW5fbGlzdCh3bGFuX2FkYXB0ZXIgKiBhZGFwdGVyLAotCQkgICBzdHJ1Y3QgV0xBTl84MDJfMTFfU1NJRCAqc3NpZCwgdTggKiBic3NpZCwgaW50IG1vZGUpCisJCSAgIHN0cnVjdCBXTEFOXzgwMl8xMV9TU0lEICpzc2lkLCB1OCAqIGJzc2lkLCB1OCBtb2RlKQogewogCWludCBuZXQgPSAtRU5FVFVOUkVBQ0g7CiAJdTggYmVzdHJzc2kgPSAwOwpAQCAtMTI4Nyw4ICsxMjU2LDggQEAKIAkJICAgICAhbWVtY21wKGFkYXB0ZXItPnNjYW50YWJsZVtpXS4KIAkJCSAgICAgbWFjYWRkcmVzcywgYnNzaWQsIEVUSF9BTEVOKSkpIHsKIAkJCXN3aXRjaCAobW9kZSkgewotCQkJY2FzZSB3bGFuODAyXzExaW5mcmFzdHJ1Y3R1cmU6Ci0JCQljYXNlIHdsYW44MDJfMTFpYnNzOgorCQkJY2FzZSBJV19NT0RFX0lORlJBOgorCQkJY2FzZSBJV19NT0RFX0FESE9DOgogCQkJCWogPSBpc19uZXR3b3JrX2NvbXBhdGlibGUoYWRhcHRlciwgaSwgbW9kZSk7CiAKIAkJCQlpZiAoaiA+PSAwKSB7CkBAIC0xMzExLDcgKzEyODAsNyBAQAogCQkJCQl9CiAJCQkJfQogCQkJCWJyZWFrOwotCQkJY2FzZSB3bGFuODAyXzExYXV0b3Vua25vd246CisJCQljYXNlIElXX01PREVfQVVUTzoKIAkJCWRlZmF1bHQ6CiAJCQkJaWYgKFNDQU5fUlNTSShhZGFwdGVyLT5zY2FudGFibGVbaV0ucnNzaSkKIAkJCQkgICAgPiBiZXN0cnNzaSkgewpAQCAtMTMzOCw4ICsxMzA3LDcgQEAKICAqCiAgKiAgQHJldHVybiAgICAgICAgIGluZGV4IGluIEJTU0lEIGxpc3QKICAqLwotaW50IGxpYmVydGFzX2ZpbmRfYmVzdF9TU0lEX2luX2xpc3Qod2xhbl9hZGFwdGVyICogYWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gV0xBTl84MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSBtb2RlKQoraW50IGxpYmVydGFzX2ZpbmRfYmVzdF9TU0lEX2luX2xpc3Qod2xhbl9hZGFwdGVyICogYWRhcHRlciwgdTggbW9kZSkKIHsKIAlpbnQgYmVzdG5ldCA9IC1FTkVUVU5SRUFDSDsKIAl1OCBiZXN0cnNzaSA9IDA7CkBAIC0xMzUxLDggKzEzMTksOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bWluc2NhbnRhYmxlOyBpKyspIHsKIAkJc3dpdGNoIChtb2RlKSB7Ci0JCWNhc2Ugd2xhbjgwMl8xMWluZnJhc3RydWN0dXJlOgotCQljYXNlIHdsYW44MDJfMTFpYnNzOgorCQljYXNlIElXX01PREVfSU5GUkE6CisJCWNhc2UgSVdfTU9ERV9BREhPQzoKIAkJCWlmIChpc19uZXR3b3JrX2NvbXBhdGlibGUoYWRhcHRlciwgaSwgbW9kZSkgPj0gMCkgewogCQkJCWlmIChTQ0FOX1JTU0koYWRhcHRlci0+c2NhbnRhYmxlW2ldLnJzc2kpID4KIAkJCQkgICAgYmVzdHJzc2kpIHsKQEAgLTEzNjMsNyArMTMzMSw3IEBACiAJCQkJfQogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2Ugd2xhbjgwMl8xMWF1dG91bmtub3duOgorCQljYXNlIElXX01PREVfQVVUTzoKIAkJZGVmYXVsdDoKIAkJCWlmIChTQ0FOX1JTU0koYWRhcHRlci0+c2NhbnRhYmxlW2ldLnJzc2kpID4gYmVzdHJzc2kpIHsKIAkJCQliZXN0cnNzaSA9CkBAIC0xMzg4LDggKzEzNTYsNyBAQAogICovCiBpbnQgbGliZXJ0YXNfZmluZF9iZXN0X25ldHdvcmtfU1NJRCh3bGFuX3ByaXZhdGUgKiBwcml2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IFdMQU5fODAyXzExX1NTSUQgKnBTU0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBXTEFOXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFIHByZWZlcnJlZF9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBXTEFOXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFICpvdXRfbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHByZWZlcnJlZF9tb2RlLCB1OCAqb3V0X21vZGUpCiB7CiAJd2xhbl9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTE0MTQsNyArMTM4MSw3IEBACiAJcHJlcWJzc2lkID0gJmFkYXB0ZXItPnNjYW50YWJsZVtpXTsKIAltZW1jcHkocFNTSUQsICZwcmVxYnNzaWQtPnNzaWQsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgV0xBTl84MDJfMTFfU1NJRCkpOwotCSpvdXRfbW9kZSA9IHByZXFic3NpZC0+aW5mcmFtb2RlOworCSpvdXRfbW9kZSA9IHByZXFic3NpZC0+bW9kZTsKIAogCWlmICghcFNTSUQtPnNzaWRsZW5ndGgpIHsKIAkJcmV0ID0gLTE7CkBAIC0xNTg0LDcgKzE1NTEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1pbnNjYW50YWJsZTsgaSsrKSB7CiAJCWlmICgoY3VycmVudF9ldiArIE1BWF9TQ0FOX0NFTExfU0laRSkgPj0gZW5kX2J1ZikgewogCQkJbGJzX3ByX2RlYnVnKDEsICJpPSVkIGJyZWFrIG91dDogY3VycmVudF9ldj0lcCBlbmRfYnVmPSVwICIKLQkJCSAgICAgICAiTUFYX1NDQU5fQ0VMTF9TSVpFPSVkXG4iLAorCQkJICAgICAgICJNQVhfU0NBTl9DRUxMX1NJWkU9JXpkXG4iLAogCQkJICAgICAgIGksIGN1cnJlbnRfZXYsIGVuZF9idWYsIE1BWF9TQ0FOX0NFTExfU0laRSk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTYzMiw3ICsxNTk5LDcgQEAKIAogCQkvL0FkZCBtb2RlCiAJCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKLQkJaXdlLnUubW9kZSA9IGFkYXB0ZXItPnNjYW50YWJsZVtpXS5pbmZyYW1vZGUgKyAxOworCQlpd2UudS5tb2RlID0gYWRhcHRlci0+c2NhbnRhYmxlW2ldLm1vZGU7CiAJCWl3ZS5sZW4gPSBJV19FVl9VSU5UX0xFTjsKIAkJY3VycmVudF9ldiA9CiAJCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBpd2UubGVuKTsKQEAgLTE2NjYsNyArMTYzMyw3IEBACiAJCQlpd2UudS5xdWFsLm5vaXNlID0KIAkJCSAgICBDQUxfTkYoYWRhcHRlci0+TkZbVFlQRV9CRUFDT05dW1RZUEVfTk9BVkddKTsKIAkJfQotCQlpZiAoKGFkYXB0ZXItPmluZnJhbW9kZSA9PSB3bGFuODAyXzExaWJzcykgJiYKKwkJaWYgKChhZGFwdGVyLT5tb2RlID09IElXX01PREVfQURIT0MpICYmCiAJCSAgICAhbGliZXJ0YXNfU1NJRF9jbXAoJmFkYXB0ZXItPmN1cmJzc3BhcmFtcy5zc2lkLAogCQkJICAgICAmYWRhcHRlci0+c2NhbnRhYmxlW2ldLnNzaWQpCiAJCSAgICAmJiBhZGFwdGVyLT5hZGhvY2NyZWF0ZSkgewpAQCAtMTczMSw3ICsxNjk4LDcgQEAKIAkJCQkJCSBlbmRfYnVmLCAmaXdlLCBpd2UubGVuKTsKIAogCQl9Ci0JCWlmICgoYWRhcHRlci0+c2NhbnRhYmxlW2ldLmluZnJhbW9kZSA9PSB3bGFuODAyXzExaWJzcykKKwkJaWYgKChhZGFwdGVyLT5zY2FudGFibGVbaV0ubW9kZSA9PSBJV19NT0RFX0FESE9DKQogCQkgICAgJiYgIWxpYmVydGFzX1NTSURfY21wKCZhZGFwdGVyLT5jdXJic3NwYXJhbXMuc3NpZCwKIAkJCQkmYWRhcHRlci0+c2NhbnRhYmxlW2ldLnNzaWQpCiAJCSAgICAmJiBhZGFwdGVyLT5hZGhvY2NyZWF0ZSkgewpAQCAtMTc0NSwzMCArMTcxMiwyNCBAQAogCQkvKiBBZGQgbmV3IHZhbHVlIHRvIGV2ZW50ICovCiAJCWN1cnJlbnRfdmFsID0gY3VycmVudF9ldiArIElXX0VWX0xDUF9MRU47CiAKLQkJaWYgKGFkYXB0ZXItPnNjYW50YWJsZVtpXS53cGEyX3N1cHBsaWNhbnQud3BhX2llWzBdID09IFdQQTJfSUUpIHsKKwkJaWYgKGFkYXB0ZXItPnNjYW50YWJsZVtpXS5yc25faWVbMF0gPT0gV1BBMl9JRSkgewogCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKLQkJCW1lbWNweShidWYsIGFkYXB0ZXItPnNjYW50YWJsZVtpXS4KLQkJCQkJCXdwYTJfc3VwcGxpY2FudC53cGFfaWUsCi0JCQkJCWFkYXB0ZXItPnNjYW50YWJsZVtpXS53cGEyX3N1cHBsaWNhbnQuCi0JCQkJCQl3cGFfaWVfbGVuKTsKKwkJCW1lbWNweShidWYsIGFkYXB0ZXItPnNjYW50YWJsZVtpXS5yc25faWUsCisJCQkJCWFkYXB0ZXItPnNjYW50YWJsZVtpXS5yc25faWVfbGVuKTsKIAkJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IGFkYXB0ZXItPnNjYW50YWJsZVtpXS4KLQkJCQkJd3BhMl9zdXBwbGljYW50LndwYV9pZV9sZW47CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGFkYXB0ZXItPnNjYW50YWJsZVtpXS5yc25faWVfbGVuOwogCQkJaXdlLmxlbiA9IElXX0VWX1BPSU5UX0xFTiArIGl3ZS51LmRhdGEubGVuZ3RoOwogCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsCiAJCQkJCSZpd2UsIGJ1Zik7CiAJCX0KLQkJaWYgKGFkYXB0ZXItPnNjYW50YWJsZVtpXS53cGFfc3VwcGxpY2FudC53cGFfaWVbMF0gPT0gV1BBX0lFKSB7CisJCWlmIChhZGFwdGVyLT5zY2FudGFibGVbaV0ud3BhX2llWzBdID09IFdQQV9JRSkgewogCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKLQkJCW1lbWNweShidWYsIGFkYXB0ZXItPnNjYW50YWJsZVtpXS4KLQkJCQkJCXdwYV9zdXBwbGljYW50LndwYV9pZSwKLQkJCQkJYWRhcHRlci0+c2NhbnRhYmxlW2ldLndwYV9zdXBwbGljYW50LgotCQkJCQkJd3BhX2llX2xlbik7CisJCQltZW1jcHkoYnVmLCBhZGFwdGVyLT5zY2FudGFibGVbaV0ud3BhX2llLAorCQkJCQlhZGFwdGVyLT5zY2FudGFibGVbaV0ud3BhX2llX2xlbik7CiAJCQlpd2UuY21kID0gSVdFVkdFTklFOwotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBhZGFwdGVyLT5zY2FudGFibGVbaV0uCi0JCQkJCXdwYV9zdXBwbGljYW50LndwYV9pZV9sZW47CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGFkYXB0ZXItPnNjYW50YWJsZVtpXS53cGFfaWVfbGVuOwogCQkJaXdlLmxlbiA9IElXX0VWX1BPSU5UX0xFTiArIGl3ZS51LmRhdGEubGVuZ3RoOwogCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsCiAJCQkJCSZpd2UsIGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmgKaW5kZXggZDkzYWE3Zi4uNDA1ZjRmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uaApAQCAtMSw2ICsxLDMgQEAKLS8qIC0qLSBtb2RlOiBDOyB0YWItd2lkdGg6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0gKi8KLS8qIHZpOiBzZXQgZXhwYW5kdGFiIHNoaWZ0d2lkdGg9NCB0YWJzdG9wPTQgdGV4dHdpZHRoPTc4OiAqLwotCiAvKioKICAgKiBJbnRlcmZhY2UgZm9yIHRoZSB3bGFuIG5ldHdvcmsgc2NhbiByb3V0aW5lcwogICAqCkBAIC0xMCw2ICs3LDcgQEAKICNpZm5kZWYgX1dMQU5fU0NBTl9ICiAjZGVmaW5lIF9XTEFOX1NDQU5fSAogCisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgImhvc3RjbWQuaCIKIAogLyoqCkBAIC0xNTUsNyArMTUzLDcgQEAKIAogCXUzMiBhdGltd2luZG93OwogCi0JZW51bSBXTEFOXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFIGluZnJhbW9kZTsKKwl1OCBtb2RlOwogCXU4IGxpYmVydGFzX3N1cHBvcnRlZF9yYXRlc1tXTEFOX1NVUFBPUlRFRF9SQVRFU107CiAKIAlpbnQgZXh0cmFfaWU7CkBAIC0xNzAsMjIgKzE2OCwyMiBAQAogCiAJc3RydWN0IGllZWV0eXBlc19jb3VudHJ5aW5mb2Z1bGxzZXQgY291bnRyeWluZm87CiAKLQlzdHJ1Y3QgV1BBX1NVUFBMSUNBTlQgd3BhX3N1cHBsaWNhbnQ7Ci0Jc3RydWN0IFdQQV9TVVBQTElDQU5UIHdwYTJfc3VwcGxpY2FudDsKLQorCXU4IHdwYV9pZVtNQVhfV1BBX0lFX0xFTl07CisJc2l6ZV90IHdwYV9pZV9sZW47CisJdTggcnNuX2llW01BWF9XUEFfSUVfTEVOXTsKKwlzaXplX3QgcnNuX2llX2xlbjsKIH07CiAKIGV4dGVybiBpbnQgbGliZXJ0YXNfU1NJRF9jbXAoc3RydWN0IFdMQU5fODAyXzExX1NTSUQgKnNzaWQxLAogCQkgICBzdHJ1Y3QgV0xBTl84MDJfMTFfU1NJRCAqc3NpZDIpOwogZXh0ZXJuIGludCBsaWJlcnRhc19maW5kX1NTSURfaW5fbGlzdCh3bGFuX2FkYXB0ZXIgKiBhZGFwdGVyLCBzdHJ1Y3QgV0xBTl84MDJfMTFfU1NJRCAqc3NpZCwKLQkJCSAgdTggKiBic3NpZCwgaW50IG1vZGUpOwotaW50IGxpYmVydGFzX2ZpbmRfYmVzdF9TU0lEX2luX2xpc3Qod2xhbl9hZGFwdGVyICogYWRhcHRlciwgZW51bSBXTEFOXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFIG1vZGUpOwotZXh0ZXJuIGludCBsaWJlcnRhc19maW5kX0JTU0lEX2luX2xpc3Qod2xhbl9hZGFwdGVyICogYWRhcHRlciwgdTggKiBic3NpZCwgaW50IG1vZGUpOworCQkJICB1OCAqIGJzc2lkLCB1OCBtb2RlKTsKK2ludCBsaWJlcnRhc19maW5kX2Jlc3RfU1NJRF9pbl9saXN0KHdsYW5fYWRhcHRlciAqIGFkYXB0ZXIsIHU4IG1vZGUpOworZXh0ZXJuIGludCBsaWJlcnRhc19maW5kX0JTU0lEX2luX2xpc3Qod2xhbl9hZGFwdGVyICogYWRhcHRlciwgdTggKiBic3NpZCwgdTggbW9kZSk7CiAKIGludCBsaWJlcnRhc19maW5kX2Jlc3RfbmV0d29ya19TU0lEKHdsYW5fcHJpdmF0ZSAqIHByaXYsCiAJCQlzdHJ1Y3QgV0xBTl84MDJfMTFfU1NJRCAqcFNTSUQsCi0JCQllbnVtIFdMQU5fODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUgcHJlZmVycmVkX21vZGUsCi0JCQllbnVtIFdMQU5fODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUgKm91dF9tb2RlKTsKKwkJCXU4IHByZWZlcnJlZF9tb2RlLCB1OCAqb3V0X21vZGUpOwogCiBleHRlcm4gaW50IGxpYmVydGFzX3NlbmRfc3BlY2lmaWNfU1NJRF9zY2FuKHdsYW5fcHJpdmF0ZSAqIHByaXYsCiAJCQkJc3RydWN0IFdMQU5fODAyXzExX1NTSUQgKnByZXF1ZXN0ZWRzc2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKaW5kZXggODJkMDYyMi4uZDRiMTM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCkBAIC03OCw3ICs3OCw3IEBACiAJCQkgbWluX3QodW5zaWduZWQgaW50LCBza2ItPmxlbiwgMTAwKSk7CiAKIAlpZiAoIXNrYi0+bGVuIHx8IChza2ItPmxlbiA+IE1SVkRSVl9FVEhfVFhfUEFDS0VUX0JVRkZFUl9TSVpFKSkgewotCQlsYnNfcHJfZGVidWcoMSwgIlR4IGVycm9yOiBCYWQgc2tiIGxlbmd0aCAlZCA6ICVkXG4iLAorCQlsYnNfcHJfZGVidWcoMSwgIlR4IGVycm9yOiBCYWQgc2tiIGxlbmd0aCAlZCA6ICV6ZFxuIiwKIAkJICAgICAgIHNrYi0+bGVuLCBNUlZEUlZfRVRIX1RYX1BBQ0tFVF9CVUZGRVJfU0laRSk7CiAJCXJldCA9IC0xOwogCQlnb3RvIGRvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy92ZXJzaW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy92ZXJzaW9uLmgKaW5kZXggZTg2ZjY1YWUuLjhiMTM3ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy92ZXJzaW9uLmgKQEAgLTEsOCArMSBAQAotI2RlZmluZSBEUklWRVJfUkVMRUFTRV9WRVJTSU9OICIzMjAucDAiCi1jb25zdCBjaGFyIGxpYmVydGFzX2RyaXZlcl92ZXJzaW9uW10gPSAiQ09NTS1VU0I4Mzg4LSIgRFJJVkVSX1JFTEVBU0VfVkVSU0lPTgotI2lmZGVmICBERUJVRwotICAgICItZGJnIgotI2VuZGlmCi0gICAgIiI7Ci0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCmluZGV4IDRhNTIzMzYuLjY5ZjUyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlICJkZWZzLmgiCiAjaW5jbHVkZSAiZGV2LmgiCiAjaW5jbHVkZSAiam9pbi5oIgotI2luY2x1ZGUgInZlcnNpb24uaCIKICNpbmNsdWRlICJ3ZXh0LmgiCiAjaW5jbHVkZSAiYXNzb2MuaCIKIApAQCAtMjMzLDcgKzIzMiw3IEBACiAKIAkJLy8gZmluZCBvdXQgdGhlIEJTU0lEIHRoYXQgbWF0Y2hlcyB0aGUgY3VycmVudCBTU0lECiAJCWkgPSBsaWJlcnRhc19maW5kX1NTSURfaW5fbGlzdChhZGFwdGVyLCAmY3VyYWRob2Nzc2lkLCBOVUxMLAotCQkJCSAgIHdsYW44MDJfMTFpYnNzKTsKKwkJCQkgICBJV19NT0RFX0FESE9DKTsKIAogCQlpZiAoaSA+PSAwKSB7CiAJCQlsYnNfcHJfZGVidWcoMSwgIlNTSUQgZm91bmQgYXQgJWQgaW4gTGlzdCwiCkBAIC0zMTYsMTMgKzMxNSwxMSBAQAogCUVOVEVSKCk7CiAKIAlpZiAoYWRhcHRlci0+Y29ubmVjdF9zdGF0dXMgIT0gbGliZXJ0YXNfY29ubmVjdGVkKSB7Ci0JCWlmIChhZGFwdGVyLT5pbmZyYW1vZGUgPT0gd2xhbjgwMl8xMWluZnJhc3RydWN0dXJlKSB7Ci0JCQkvL0luZnJhLiBtb2RlCisJCWlmIChhZGFwdGVyLT5tb2RlID09IElXX01PREVfSU5GUkEpIHsKIAkJCWxic19wcl9kZWJ1ZygxLCAiSW5mcmFcbiIpOwogCQkJayA9IGNvcHlyYXRlcyhyYXRlcywgaywgbGliZXJ0YXNfc3VwcG9ydGVkX3JhdGVzLAogCQkJCSAgICAgIHNpemVvZihsaWJlcnRhc19zdXBwb3J0ZWRfcmF0ZXMpKTsKIAkJfSBlbHNlIHsKLQkJCS8vYWQtaG9jIG1vZGUKIAkJCWxic19wcl9kZWJ1ZygxLCAiQWRob2MgR1xuIik7CiAJCQlrID0gY29weXJhdGVzKHJhdGVzLCBrLCBsaWJlcnRhc19hZGhvY19yYXRlc19nLAogCQkJCSAgICAgIHNpemVvZihsaWJlcnRhc19hZGhvY19yYXRlc19nKSk7CkBAIC01ODYsMjAgKzU4Myw3IEBACiAKIAlFTlRFUigpOwogCi0Jc3dpdGNoIChhZGFwdGVyLT5pbmZyYW1vZGUpIHsKLQljYXNlIHdsYW44MDJfMTFpYnNzOgotCQkqdXdycSA9IElXX01PREVfQURIT0M7Ci0JCWJyZWFrOwotCi0JY2FzZSB3bGFuODAyXzExaW5mcmFzdHJ1Y3R1cmU6Ci0JCSp1d3JxID0gSVdfTU9ERV9JTkZSQTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCWNhc2Ugd2xhbjgwMl8xMWF1dG91bmtub3duOgotCQkqdXdycSA9IElXX01PREVfQVVUTzsKLQkJYnJlYWs7Ci0JfQorCSp1d3JxID0gYWRhcHRlci0+bW9kZTsKIAogCUxFQVZFKCk7CiAJcmV0dXJuIDA7CkBAIC0xMDAyLDE0OSArOTg2LDE4IEBACiAJLyoKIAkgKiB7IGNtZCwgc2V0X2FyZ3MsIGdldF9hcmdzLCBuYW1lIH0KIAkgKi8KLQl7Ci0JIFdMQU5TQ0FOX1RZUEUsCi0JIElXX1BSSVZfVFlQRV9DSEFSIHwgOCwKLQkgSVdfUFJJVl9UWVBFX0NIQVIgfCA4LAotCSAic2NhbnR5cGUifSwKLQotCXsKLQkgV0xBTl9TRVRJTlRfR0VUSU5ULAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICIifSwKLQl7Ci0JIFdMQU5ORiwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAiZ2V0TkYifSwKLQl7Ci0JIFdMQU5SU1NJLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICJnZXRSU1NJIn0sCi0JewotCSBXTEFORU5BQkxFMTFELAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICJlbmFibGUxMWQifSwKLQl7Ci0JIFdMQU5BREhPQ0dSQVRFLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICJhZGhvY2dyYXRlIn0sCi0KLQl7Ci0JIFdMQU5fU1VCQ01EX1NFVF9QUkVTQ0FOLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICJwcmVzY2FuIn0sCi0JewotCSBXTEFOX1NFVE9ORUlOVF9HRVRPTkVJTlQsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxLAotCSBJV19QUklWX1RZUEVfSU5UIHwgMSwKLQkgIiJ9LAotCXsKLQkgV0xBTl9CRUFDT05fSU5URVJWQUwsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxLAotCSBJV19QUklWX1RZUEVfSU5UIHwgMSwKLQkgImJjbmludGVydmFsIn0sCi0JewotCSBXTEFOX0xJU1RFTklOVFJWTCwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IDEsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxLAotCSAibG9saXN0ZW5pbnRlciJ9LAotCXsKLQkgV0xBTl9UWENPTlRST0wsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxLAotCSBJV19QUklWX1RZUEVfSU5UIHwgMSwKLQkgInR4Y29udHJvbCJ9LAotCXsKLQkgV0xBTl9OVUxMUEtUSU5URVJWQUwsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxLAotCSBJV19QUklWX1RZUEVfSU5UIHwgMSwKLQkgInBzbnVsbGludGVydmFsIn0sCiAJLyogVXNpbmcgaXdwcml2IHN1Yi1jb21tYW5kIGZlYXR1cmUgKi8KIAl7CiAJIFdMQU5fU0VUT05FSU5UX0dFVE5PTkUsCS8qIElPQ1RMOiAyNCAqLwogCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKIAkgSVdfUFJJVl9UWVBFX05PTkUsCiAJICIifSwKLQotCXsKLQkgV0xBTl9TVUJDTURfU0VUUlhBTlRFTk5BLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JICJzZXRyeGFudCJ9LAotCXsKLQkgV0xBTl9TVUJDTURfU0VUVFhBTlRFTk5BLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JICJzZXR0eGFudCJ9LAotCXsKLQkgV0xBTlNFVEFVVEhBTEcsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgImF1dGhhbGdzIiwKLQkgfSwKLQl7Ci0JIFdMQU5TRVQ4MDIxWEFVVEhBTEcsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgIjgwMjF4YXV0aGFsZ3MiLAotCSB9LAotCXsKLQkgV0xBTlNFVEVOQ1JZUFRJT05NT0RFLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JICJlbmNyeXB0aW9ubW9kZSIsCi0JIH0sCiAJewogCSBXTEFOU0VUUkVHSU9OLAogCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKIAkgSVdfUFJJVl9UWVBFX05PTkUsCiAJICJzZXRyZWdpb25jb2RlIn0sCiAJewotCSBXTEFOX1NFVF9MSVNURU5fSU5URVJWQUwsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgInNldGxpc3RlbmludGVyIn0sCi0JewotCSBXTEFOX1NFVF9NVUxUSVBMRV9EVElNLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JICJzZXRtdWx0aXBsZWR0aW0ifSwKLQl7Ci0JIFdMQU5fU0VUX0FUSU1fV0lORE9XLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JICJhdGltd2luZG93In0sCi0JewotCSBXTEFOU0VUQkNOQVZHLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JICJzZXRiY25hdmcifSwKLQl7Ci0JIFdMQU5TRVREQVRBQVZHLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JICJzZXRkYXRhYXZnIn0sCi0JewotCSBXTEFOX1NFVF9MSU5LTU9ERSwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JIElXX1BSSVZfVFlQRV9OT05FLAotCSAibGlua21vZGUifSwKLQl7Ci0JIFdMQU5fU0VUX1JBRElPTU9ERSwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JIElXX1BSSVZfVFlQRV9OT05FLAotCSAicmFkaW9tb2RlIn0sCi0JewotCSBXTEFOX1NFVF9ERUJVR01PREUsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgImRlYnVnbW9kZSJ9LAotCXsKIAkgV0xBTl9TVUJDTURfTUVTSF9TRVRfVFRMLAogCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKIAkgSVdfUFJJVl9UWVBFX05PTkUsCkBAIC0xMTYwLDQxICsxMDEzLDYgQEAKIAkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCiAJICJnZXRyZWdpb25jb2RlIn0sCiAJewotCSBXTEFOX0dFVF9MSVNURU5fSU5URVJWQUwsCi0JIElXX1BSSVZfVFlQRV9OT05FLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgImdldGxpc3RlbmludGVyIn0sCi0JewotCSBXTEFOX0dFVF9NVUxUSVBMRV9EVElNLAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICJnZXRtdWx0aXBsZWR0aW0ifSwKLQl7Ci0JIFdMQU5fR0VUX1RYX1JBVEUsCi0JIElXX1BSSVZfVFlQRV9OT05FLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgImdldHR4cmF0ZSJ9LAotCXsKLQkgV0xBTkdFVEJDTkFWRywKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAiZ2V0YmNuYXZnIn0sCi0JewotCSBXTEFOX0dFVF9MSU5LTU9ERSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAiZ2V0X2xpbmttb2RlIn0sCi0JewotCSBXTEFOX0dFVF9SQURJT01PREUsCi0JIElXX1BSSVZfVFlQRV9OT05FLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgImdldF9yYWRpb21vZGUifSwKLQl7Ci0JIFdMQU5fR0VUX0RFQlVHTU9ERSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAiZ2V0X2RlYnVnbW9kZSJ9LAotCXsKIAkgV0xBTl9TVUJDTURfRldUX0NMRUFOVVAsCiAJIElXX1BSSVZfVFlQRV9OT05FLAogCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKQEAgLTEyMTAsNjEgKzEwMjgsMTEgQEAKIAkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCiAJICJtZXNoX2dldF90dGwifSwKIAl7Ci0JIFdMQU5fU0VUTk9ORV9HRVRUV0VMVkVfQ0hBUiwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JIElXX1BSSVZfVFlQRV9DSEFSIHwgMTIsCi0JICIifSwKLQl7Ci0JIFdMQU5fU1VCQ01EX0dFVFJYQU5URU5OQSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JIElXX1BSSVZfVFlQRV9DSEFSIHwgMTIsCi0JICJnZXRyeGFudCJ9LAotCXsKLQkgV0xBTl9TVUJDTURfR0VUVFhBTlRFTk5BLAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMiwKLQkgImdldHR4YW50In0sCi0JewotCSBXTEFOX0dFVF9UU0YsCi0JIElXX1BSSVZfVFlQRV9OT05FLAotCSBJV19QUklWX1RZUEVfQ0hBUiB8IDEyLAotCSAiZ2V0dHNmIn0sCi0JewogCSBXTEFOX1NFVE5PTkVfR0VUTk9ORSwKIAkgSVdfUFJJVl9UWVBFX05PTkUsCiAJIElXX1BSSVZfVFlQRV9OT05FLAogCSAiIn0sCiAJewotCSBXTEFOREVBVVRILAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JICJkZWF1dGgifSwKLQl7Ci0JIFdMQU5BREhPQ1NUT1AsCi0JIElXX1BSSVZfVFlQRV9OT05FLAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgImFkaG9jc3RvcCJ9LAotCXsKLQkgV0xBTlJBRElPT04sCi0JIElXX1BSSVZfVFlQRV9OT05FLAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgInJhZGlvb24ifSwKLQl7Ci0JIFdMQU5SQURJT09GRiwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JIElXX1BSSVZfVFlQRV9OT05FLAotCSAicmFkaW9vZmYifSwKLQl7Ci0JIFdMQU5XTEFOSURMRU9OLAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JICJ3bGFuaWRsZS1vbiJ9LAotCXsKLQkgV0xBTldMQU5JRExFT0ZGLAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JICJ3bGFuaWRsZS1vZmYifSwKLQl7CiAJIFdMQU5fU1VCQ01EX0ZXVF9SRVNFVCwKIAkgSVdfUFJJVl9UWVBFX05PTkUsCiAJIElXX1BSSVZfVFlQRV9OT05FLApAQCAtMTMyNyw5MCArMTA5NSwxNSBAQAogCSBJV19QUklWX1RZUEVfQ0hBUiB8IDEyOCwKIAkgImZ3dF9saXN0X3JvdXRlIn0sCiAJewotCSBXTEFOU0NBTl9NT0RFLAotCSBJV19QUklWX1RZUEVfQ0hBUiB8IDEyOCwKLQkgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMjgsCi0JICJzY2FubW9kZSJ9LAotCXsKLQkgV0xBTl9HRVRfQURIT0NfU1RBVFVTLAotCSBJV19QUklWX1RZUEVfQ0hBUiB8IDEyOCwKLQkgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMjgsCi0JICJnZXRhZGhvY3N0YXR1cyJ9LAotCXsKLQkgV0xBTl9TRVROT05FX0dFVFdPUkRDSEFSLAotCSBJV19QUklWX1RZUEVfTk9ORSwKLQkgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMjgsCi0JICIifSwKLQl7Ci0JIFdMQU5TRVRXUEFJRSwKLQkgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfRklYRUQgfCAyNCwKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JICJzZXR3cGFpZSJ9LAotCXsKLQkgV0xBTkdFVExPRywKLQkgSVdfUFJJVl9UWVBFX05PTkUsCi0JIElXX1BSSVZfVFlQRV9DSEFSIHwgR0VUTE9HX0JVRlNJWkUsCi0JICJnZXRsb2cifSwKLQl7CiAJIFdMQU5fU0VUX0dFVF9TSVhURUVOX0lOVCwKIAkgSVdfUFJJVl9UWVBFX0lOVCB8IDE2LAogCSBJV19QUklWX1RZUEVfSU5UIHwgMTYsCiAJICIifSwKIAl7Ci0JIFdMQU5fVFBDQ0ZHLAotCSBJV19QUklWX1RZUEVfSU5UIHwgMTYsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxNiwKLQkgInRwY2NmZyJ9LAotCXsKLQkgV0xBTl9QT1dFUkNGRywKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IDE2LAotCSBJV19QUklWX1RZUEVfSU5UIHwgMTYsCi0JICJwb3dlcmNmZyJ9LAotCXsKLQkgV0xBTl9BVVRPX0ZSRVFfU0VULAotCSBJV19QUklWX1RZUEVfSU5UIHwgMTYsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxNiwKLQkgInNldGFmYyJ9LAotCXsKLQkgV0xBTl9BVVRPX0ZSRVFfR0VULAotCSBJV19QUklWX1RZUEVfSU5UIHwgMTYsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxNiwKLQkgImdldGFmYyJ9LAotCXsKLQkgV0xBTl9TQ0FOUFJPQkVTLAotCSBJV19QUklWX1RZUEVfSU5UIHwgMTYsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxNiwKLQkgInNjYW5wcm9iZXMifSwKLQl7CiAJIFdMQU5fTEVEX0dQSU9fQ1RSTCwKIAkgSVdfUFJJVl9UWVBFX0lOVCB8IDE2LAogCSBJV19QUklWX1RZUEVfSU5UIHwgMTYsCiAJICJsZWRncGlvIn0sCi0JewotCSBXTEFOX0FEQVBUX1JBVEVTRVQsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxNiwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IDE2LAotCSAicmF0ZWFkYXB0In0sCi0JewotCSBXTEFOX0lOQUNUSVZJVFlfVElNRU9VVCwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IDE2LAotCSBJV19QUklWX1RZUEVfSU5UIHwgMTYsCi0JICJpbmFjdGl2aXR5dG8ifSwKLQl7Ci0JIFdMQU5TTlIsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxNiwKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IDE2LAotCSAiZ2V0U05SIn0sCi0JewotCSBXTEFOX0dFVF9SQVRFLAotCSBJV19QUklWX1RZUEVfSU5UIHwgMTYsCi0JIElXX1BSSVZfVFlQRV9JTlQgfCAxNiwKLQkgImdldHJhdGUifSwKLQl7Ci0JIFdMQU5fR0VUX1JYSU5GTywKLQkgSVdfUFJJVl9UWVBFX0lOVCB8IDE2LAotCSBJV19QUklWX1RZUEVfSU5UIHwgMTYsCi0JICJnZXRyeGluZm8ifSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd2xhbl9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE0MzQsNyArMTEyNyw3IEBACiAKIAlFTlRFUigpOwogCi0JcHJpdi0+d3N0YXRzLnN0YXR1cyA9IGFkYXB0ZXItPmluZnJhbW9kZTsKKwlwcml2LT53c3RhdHMuc3RhdHVzID0gYWRhcHRlci0+bW9kZTsKIAogCS8qIElmIHdlJ3JlIG5vdCBhc3NvY2lhdGVkLCBhbGwgcXVhbGl0eSB2YWx1ZXMgYXJlIG1lYW5pbmdsZXNzICovCiAJaWYgKGFkYXB0ZXItPmNvbm5lY3Rfc3RhdHVzICE9IGxpYmVydGFzX2Nvbm5lY3RlZCkKQEAgLTE1NjgsMTMgKzEyNjEsMTIgQEAKIAkJaWYgKCFjZnApIHsKIAkJCXJjID0gLUVJTlZBTDsKIAkJfSBlbHNlIHsKLQkJCWlmIChhZGFwdGVyLT5pbmZyYW1vZGUgPT0gd2xhbjgwMl8xMWlic3MpIHsKKwkJCWlmIChhZGFwdGVyLT5tb2RlID09IElXX01PREVfQURIT0MpIHsKIAkJCQlyYyA9IGNoYW5nZWFkaG9jY2hhbm5lbChwcml2LCBjaGFubmVsKTsKIAkJCQkvKiAgSWYgc3RhdGlvbiBpcyBXRVAgZW5hYmxlZCwgc2VuZCB0aGUKIAkJCQkgKiAgY29tbWFuZCB0byBzZXQgV0VQIGluIGZpcm13YXJlCiAJCQkJICovCi0JCQkJaWYgKGFkYXB0ZXItPnNlY2luZm8uV0VQc3RhdHVzID09Ci0JCQkJICAgIHdsYW44MDJfMTFXRVBlbmFibGVkKSB7CisJCQkJaWYgKGFkYXB0ZXItPnNlY2luZm8ud2VwX2VuYWJsZWQpIHsKIAkJCQkJbGJzX3ByX2RlYnVnKDEsICJzZXRfZnJlcTogV0VQIGVuYWJsZWRcbiIpOwogCQkJCQlyZXQgPSBsaWJlcnRhc19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQocHJpdiwKIAkJCQkJCQkJICAgIGNtZF84MDJfMTFfc2V0X3dlcCwKQEAgLTE3MTYsNDkgKzE0MDgsMzEgQEAKIAl3bGFuX3ByaXZhdGUgKnByaXYgPSBkZXYtPnByaXY7CiAJd2xhbl9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKIAlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIGFzc29jX3JlcTsKLQllbnVtIFdMQU5fODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUgbmV3X21vZGU7CiAKIAlFTlRFUigpOwogCi0Jc3dpdGNoICgqdXdycSkgewotCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJbGJzX3ByX2RlYnVnKDEsICJXYW50ZWQgbW9kZSBpcyBhZC1ob2M6IGN1cnJlbnQgZGF0YXJhdGU9JSN4XG4iLAotCQkgICAgICAgYWRhcHRlci0+ZGF0YXJhdGUpOwotCQluZXdfbW9kZSA9IHdsYW44MDJfMTFpYnNzOwotCQlhZGFwdGVyLT5hZGhvY2NoYW5uZWwgPSBERUZBVUxUX0FEX0hPQ19DSEFOTkVMOwotCQlicmVhazsKLQotCWNhc2UgSVdfTU9ERV9JTkZSQToKLQkJbGJzX3ByX2RlYnVnKDEsICJXYW50ZWQgbW9kZSBpcyBJbmZyYXN0cnVjdHVyZVxuIik7Ci0JCW5ld19tb2RlID0gd2xhbjgwMl8xMWluZnJhc3RydWN0dXJlOwotCQlicmVhazsKLQotCWNhc2UgSVdfTU9ERV9BVVRPOgotCQlsYnNfcHJfZGVidWcoMSwgIldhbnRlZCBtb2RlIGlzIEF1dG9cbiIpOwotCQluZXdfbW9kZSA9IHdsYW44MDJfMTFhdXRvdW5rbm93bjsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlsYnNfcHJfZGVidWcoMSwgIldhbnRlZCBtb2RlIGlzIFVua25vd246IDB4JXhcbiIsICp1d3JxKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCAgICgqdXdycSAhPSBJV19NT0RFX0FESE9DKQorCSAgICAmJiAoKnV3cnEgIT0gSVdfTU9ERV9JTkZSQSkKKwkgICAgJiYgKCp1d3JxICE9IElXX01PREVfQVVUTykpIHsKKwkJbGJzX3ByX2RlYnVnKDEsICJJbnZhbGlkIG1vZGU6IDB4JXhcbiIsICp1d3JxKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJbXV0ZXhfbG9jaygmYWRhcHRlci0+bG9jayk7CiAJYXNzb2NfcmVxID0gd2xhbl9nZXRfYXNzb2NpYXRpb25fcmVxdWVzdChhZGFwdGVyKTsKIAlpZiAoIWFzc29jX3JlcSkgewogCQlyZXQgPSAtRU5PTUVNOworCQl3bGFuX2NhbmNlbF9hc3NvY2lhdGlvbl93b3JrKHByaXYpOwogCX0gZWxzZSB7Ci0JCWFzc29jX3JlcS0+bW9kZSA9IG5ld19tb2RlOwotCX0KLQotCWlmIChyZXQgPT0gMCkgeworCQlhc3NvY19yZXEtPm1vZGUgPSAqdXdycTsKIAkJc2V0X2JpdChBU1NPQ19GTEFHX01PREUsICZhc3NvY19yZXEtPmZsYWdzKTsKIAkJd2xhbl9wb3N0cG9uZV9hc3NvY2lhdGlvbl93b3JrKHByaXYpOwotCX0gZWxzZSB7Ci0JCXdsYW5fY2FuY2VsX2Fzc29jaWF0aW9uX3dvcmsocHJpdik7CisJCWxic19wcl9kZWJ1ZygxLCAiU3dpdGNoaW5nIHRvIG1vZGU6IDB4JXhcbiIsICp1d3JxKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5sb2NrKTsKIAorb3V0OgogCUxFQVZFKCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3ODksMTMgKzE0NjMsMTMgQEAKIAlkd3JxLT5mbGFncyA9IDA7CiAKIAkvKiBBdXRoZW50aWNhdGlvbiBtZXRob2QgKi8KLQlzd2l0Y2ggKGFkYXB0ZXItPnNlY2luZm8uYXV0aG1vZGUpIHsKLQljYXNlIHdsYW44MDJfMTFhdXRobW9kZW9wZW46CisJc3dpdGNoIChhZGFwdGVyLT5zZWNpbmZvLmF1dGhfbW9kZSkgeworCWNhc2UgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU06CiAJCWR3cnEtPmZsYWdzID0gSVdfRU5DT0RFX09QRU47CiAJCWJyZWFrOwogCi0JY2FzZSB3bGFuODAyXzExYXV0aG1vZGVzaGFyZWQ6Ci0JY2FzZSB3bGFuODAyXzExYXV0aG1vZGVuZXR3b3JrRUFQOgorCWNhc2UgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWToKKwljYXNlIElXX0FVVEhfQUxHX0xFQVA6CiAJCWR3cnEtPmZsYWdzID0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xODAzLDggKzE0NzcsOSBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAoKGFkYXB0ZXItPnNlY2luZm8uV0VQc3RhdHVzID09IHdsYW44MDJfMTFXRVBlbmFibGVkKQotCSAgICB8fCBhZGFwdGVyLT5zZWNpbmZvLldQQWVuYWJsZWQgfHwgYWRhcHRlci0+c2VjaW5mby5XUEEyZW5hYmxlZCkgeworCWlmICggICBhZGFwdGVyLT5zZWNpbmZvLndlcF9lbmFibGVkCisJICAgIHx8IGFkYXB0ZXItPnNlY2luZm8uV1BBZW5hYmxlZAorCSAgICB8fCBhZGFwdGVyLT5zZWNpbmZvLldQQTJlbmFibGVkKSB7CiAJCWR3cnEtPmZsYWdzICY9IH5JV19FTkNPREVfRElTQUJMRUQ7CiAJfSBlbHNlIHsKIAkJZHdycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOwpAQCAtMTgxOCw4ICsxNDkzLDcgQEAKIAlpZiAoaW5kZXggPCAwKQogCQlpbmRleCA9IGFkYXB0ZXItPndlcF90eF9rZXlpZHg7CiAKLQlpZiAoKGFkYXB0ZXItPndlcF9rZXlzW2luZGV4XS5sZW4pICYmCi0JICAgIChhZGFwdGVyLT5zZWNpbmZvLldFUHN0YXR1cyA9PSB3bGFuODAyXzExV0VQZW5hYmxlZCkpIHsKKwlpZiAoKGFkYXB0ZXItPndlcF9rZXlzW2luZGV4XS5sZW4pICYmIGFkYXB0ZXItPnNlY2luZm8ud2VwX2VuYWJsZWQpIHsKIAkJbWVtY3B5KGV4dHJhLCBhZGFwdGVyLT53ZXBfa2V5c1tpbmRleF0ua2V5LAogCQkgICAgICAgYWRhcHRlci0+d2VwX2tleXNbaW5kZXhdLmxlbik7CiAJCWR3cnEtPmxlbmd0aCA9IGFkYXB0ZXItPndlcF9rZXlzW2luZGV4XS5sZW47CkBAIC0xOTAzLDcgKzE1NzcsNyBAQAogCQlhc3NvY19yZXEtPndlcF90eF9rZXlpZHggPSBpbmRleDsKIAl9CiAKLQlhc3NvY19yZXEtPnNlY2luZm8uV0VQc3RhdHVzID0gd2xhbjgwMl8xMVdFUGVuYWJsZWQ7CisJYXNzb2NfcmVxLT5zZWNpbmZvLndlcF9lbmFibGVkID0gMTsKIAogCUxFQVZFKCk7CiAJcmV0dXJuIDA7CkBAIC0xOTMyLDEwICsxNjA2LDEwIEBACiAJaW50IGk7CiAKIAkvKiBTZXQgT3BlbiBTeXN0ZW0gYXV0aCBtb2RlICovCi0JYXNzb2NfcmVxLT5zZWNpbmZvLmF1dGhtb2RlID0gd2xhbjgwMl8xMWF1dGhtb2Rlb3BlbjsKKwlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07CiAKIAkvKiBDbGVhciBXRVAga2V5cyBhbmQgbWFyayBXRVAgYXMgZGlzYWJsZWQgKi8KLQlhc3NvY19yZXEtPnNlY2luZm8uV0VQc3RhdHVzID0gd2xhbjgwMl8xMVdFUGRpc2FibGVkOworCWFzc29jX3JlcS0+c2VjaW5mby53ZXBfZW5hYmxlZCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKIAkJYXNzb2NfcmVxLT53ZXBfa2V5c1tpXS5sZW4gPSAwOwogCkBAIC0xOTg3LDggKzE2NjEsNyBAQAogCS8qIElmIFdFUCBpc24ndCBlbmFibGVkLCBvciBpZiB0aGVyZSBpcyBubyBrZXkgZGF0YSBidXQgYSB2YWxpZAogCSAqIGluZGV4LCBzZXQgdGhlIFRYIGtleS4KIAkgKi8KLQlpZiAoKGFzc29jX3JlcS0+c2VjaW5mby5XRVBzdGF0dXMgIT0gd2xhbjgwMl8xMVdFUGVuYWJsZWQpCi0JICAgIHx8IChkd3JxLT5sZW5ndGggPT0gMCAmJiAhaXNfZGVmYXVsdCkpCisJaWYgKCFhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQgfHwgKGR3cnEtPmxlbmd0aCA9PSAwICYmICFpc19kZWZhdWx0KSkKIAkJc2V0X3R4X2tleSA9IDE7CiAKIAlyZXQgPSB3bGFuX3NldF93ZXBfa2V5KGFzc29jX3JlcSwgZXh0cmEsIGR3cnEtPmxlbmd0aCwgaW5kZXgsIHNldF90eF9rZXkpOwpAQCAtMjAwMSw5ICsxNjc0LDkgQEAKIAkJc2V0X2JpdChBU1NPQ19GTEFHX1dFUF9UWF9LRVlJRFgsICZhc3NvY19yZXEtPmZsYWdzKTsKIAogCWlmIChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKSB7Ci0JCWFzc29jX3JlcS0+c2VjaW5mby5hdXRobW9kZSA9IHdsYW44MDJfMTFhdXRobW9kZXNoYXJlZDsKKwkJYXNzb2NfcmVxLT5zZWNpbmZvLmF1dGhfbW9kZSA9IElXX0FVVEhfQUxHX1NIQVJFRF9LRVk7CiAJfSBlbHNlIGlmIChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKSB7Ci0JCWFzc29jX3JlcS0+c2VjaW5mby5hdXRobW9kZSA9IHdsYW44MDJfMTFhdXRobW9kZW9wZW47CisJCWFzc29jX3JlcS0+c2VjaW5mby5hdXRoX21vZGUgPSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKIAl9CiAKIG91dDoKQEAgLTIwNTYsMzAgKzE3MjksMzEgQEAKIAogCWlmICghZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSAmJgogCSAgICBleHQtPmFsZyAhPSBJV19FTkNPREVfQUxHX1dFUCkgewotCQlpZiAoaW5kZXggIT0gMCB8fCBhZGFwdGVyLT5pbmZyYW1vZGUgIT0gd2xhbjgwMl8xMWluZnJhc3RydWN0dXJlKQorCQlpZiAoaW5kZXggIT0gMCB8fCBhZGFwdGVyLT5tb2RlICE9IElXX01PREVfSU5GUkEpCiAJCQlnb3RvIG91dDsKIAl9CiAKIAlkd3JxLT5mbGFncyA9IGluZGV4ICsgMTsKIAltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOwogCi0JaWYgKChhZGFwdGVyLT5zZWNpbmZvLldFUHN0YXR1cyA9PSB3bGFuODAyXzExV0VQZGlzYWJsZWQpCi0JICAgICYmICFhZGFwdGVyLT5zZWNpbmZvLldQQWVuYWJsZWQgJiYgIWFkYXB0ZXItPnNlY2luZm8uV1BBMmVuYWJsZWQpIHsKKwlpZiAoICAgIWFkYXB0ZXItPnNlY2luZm8ud2VwX2VuYWJsZWQKKwkgICAgJiYgIWFkYXB0ZXItPnNlY2luZm8uV1BBZW5hYmxlZAorCSAgICAmJiAhYWRhcHRlci0+c2VjaW5mby5XUEEyZW5hYmxlZCkgewogCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKIAkJZXh0LT5rZXlfbGVuID0gMDsKIAkJZHdycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOwogCX0gZWxzZSB7CiAJCXU4ICprZXkgPSBOVUxMOwogCi0JCWlmICgoYWRhcHRlci0+c2VjaW5mby5XRVBzdGF0dXMgPT0gd2xhbjgwMl8xMVdFUGVuYWJsZWQpCisJCWlmICggICBhZGFwdGVyLT5zZWNpbmZvLndlcF9lbmFibGVkCiAJCSAgICAmJiAhYWRhcHRlci0+c2VjaW5mby5XUEFlbmFibGVkCiAJCSAgICAmJiAhYWRhcHRlci0+c2VjaW5mby5XUEEyZW5hYmxlZCkgewogCQkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKIAkJCWV4dC0+a2V5X2xlbiA9IGFkYXB0ZXItPndlcF9rZXlzW2luZGV4XS5sZW47CiAJCQlrZXkgPSAmYWRhcHRlci0+d2VwX2tleXNbaW5kZXhdLmtleVswXTsKLQkJfSBlbHNlIGlmICgoYWRhcHRlci0+c2VjaW5mby5XRVBzdGF0dXMgPT0gd2xhbjgwMl8xMVdFUGRpc2FibGVkKSAmJgotCQkgICAgICAgICAgIChhZGFwdGVyLT5zZWNpbmZvLldQQWVuYWJsZWQgfHwKLQkJICAgICAgICAgICAgYWRhcHRlci0+c2VjaW5mby5XUEEyZW5hYmxlZCkpIHsKKwkJfSBlbHNlIGlmICggICAhYWRhcHRlci0+c2VjaW5mby53ZXBfZW5hYmxlZAorCQkgICAgICAgICAgICYmIChhZGFwdGVyLT5zZWNpbmZvLldQQWVuYWJsZWQgfHwKKwkJICAgICAgICAgICAgICAgYWRhcHRlci0+c2VjaW5mby5XUEEyZW5hYmxlZCkpIHsKIAkJCS8qIFdQQSAqLwogCQkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1RLSVA7CiAJCQlleHQtPmtleV9sZW4gPSAwOwpAQCAtMjE0OSw3ICsxODIzLDcgQEAKIAkJLyogSWYgV0VQIGlzbid0IGVuYWJsZWQsIG9yIGlmIHRoZXJlIGlzIG5vIGtleSBkYXRhIGJ1dCBhIHZhbGlkCiAJCSAqIGluZGV4LCBvciBpZiB0aGUgc2V0LVRYLWtleSBmbGFnIHdhcyBwYXNzZWQsIHNldCB0aGUgVFgga2V5LgogCQkgKi8KLQkJaWYgKChhc3NvY19yZXEtPnNlY2luZm8uV0VQc3RhdHVzICE9IHdsYW44MDJfMTFXRVBlbmFibGVkKQorCQlpZiAoICAgIWFzc29jX3JlcS0+c2VjaW5mby53ZXBfZW5hYmxlZAogCQkgICAgfHwgKGR3cnEtPmxlbmd0aCA9PSAwICYmICFpc19kZWZhdWx0KQogCQkgICAgfHwgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKSkKIAkJCXNldF90eF9rZXkgPSAxOwpAQCAtMjE2MSwxMSArMTgzNSw5IEBACiAJCQlnb3RvIG91dDsKIAogCQlpZiAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkgewotCQkJYXNzb2NfcmVxLT5zZWNpbmZvLmF1dGhtb2RlID0KLQkJCSAgICB3bGFuODAyXzExYXV0aG1vZGVzaGFyZWQ7CisJCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfU0hBUkVEX0tFWTsKIAkJfSBlbHNlIGlmIChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKSB7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aG1vZGUgPQotCQkJICAgIHdsYW44MDJfMTFhdXRobW9kZW9wZW47CisJCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07CiAJCX0KIAogCQkvKiBNYXJrIHRoZSB2YXJpb3VzIFdFUCBiaXRzIGFzIG1vZGlmaWVkICovCkBAIC0yMzUwLDE1ICsyMDIyLDEzIEBACiAJCX0KIAkJaWYgKGR3cnEtPnZhbHVlICYgSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEpIHsKIAkJCWFzc29jX3JlcS0+c2VjaW5mby5XUEFlbmFibGVkID0gMTsKLQkJCWFzc29jX3JlcS0+c2VjaW5mby5XRVBzdGF0dXMgPSB3bGFuODAyXzExV0VQZGlzYWJsZWQ7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aG1vZGUgPQotCQkJICAgIHdsYW44MDJfMTFhdXRobW9kZW9wZW47CisJCQlhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQgPSAwOworCQkJYXNzb2NfcmVxLT5zZWNpbmZvLmF1dGhfbW9kZSA9IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwogCQl9CiAJCWlmIChkd3JxLT52YWx1ZSAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMikgewogCQkJYXNzb2NfcmVxLT5zZWNpbmZvLldQQTJlbmFibGVkID0gMTsKLQkJCWFzc29jX3JlcS0+c2VjaW5mby5XRVBzdGF0dXMgPSB3bGFuODAyXzExV0VQZGlzYWJsZWQ7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aG1vZGUgPQotCQkJICAgIHdsYW44MDJfMTFhdXRobW9kZW9wZW47CisJCQlhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQgPSAwOworCQkJYXNzb2NfcmVxLT5zZWNpbmZvLmF1dGhfbW9kZSA9IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwogCQl9CiAJCXVwZGF0ZWQgPSAxOwogCQlicmVhazsKQEAgLTIzNzYsMTQgKzIwNDYsMTEgQEAKIAogCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKIAkJaWYgKGR3cnEtPnZhbHVlICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSkgewotCQkJYXNzb2NfcmVxLT5zZWNpbmZvLmF1dGhtb2RlID0KLQkJCSAgICB3bGFuODAyXzExYXV0aG1vZGVzaGFyZWQ7CisJCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfU0hBUkVEX0tFWTsKIAkJfSBlbHNlIGlmIChkd3JxLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKSB7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aG1vZGUgPQotCQkJICAgIHdsYW44MDJfMTFhdXRobW9kZW9wZW47CisJCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07CiAJCX0gZWxzZSBpZiAoZHdycS0+dmFsdWUgJiBJV19BVVRIX0FMR19MRUFQKSB7Ci0JCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aG1vZGUgPQotCQkJICAgIHdsYW44MDJfMTFhdXRobW9kZW5ldHdvcmtFQVA7CisJCQlhc3NvY19yZXEtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfTEVBUDsKIAkJfSBlbHNlIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCX0KQEAgLTIzOTYsOSArMjA2Myw4IEBACiAJCQkgICAgIWFzc29jX3JlcS0+c2VjaW5mby5XUEEyZW5hYmxlZCkgewogCQkJCWFzc29jX3JlcS0+c2VjaW5mby5XUEFlbmFibGVkID0gMTsKIAkJCQlhc3NvY19yZXEtPnNlY2luZm8uV1BBMmVuYWJsZWQgPSAxOwotCQkJCWFzc29jX3JlcS0+c2VjaW5mby5XRVBzdGF0dXMgPSB3bGFuODAyXzExV0VQZGlzYWJsZWQ7Ci0JCQkJYXNzb2NfcmVxLT5zZWNpbmZvLmF1dGhtb2RlID0KLQkJCQkgICAgd2xhbjgwMl8xMWF1dGhtb2Rlb3BlbjsKKwkJCQlhc3NvY19yZXEtPnNlY2luZm8ud2VwX2VuYWJsZWQgPSAwOworCQkJCWFzc29jX3JlcS0+c2VjaW5mby5hdXRoX21vZGUgPSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWFzc29jX3JlcS0+c2VjaW5mby5XUEFlbmFibGVkID0gMDsKQEAgLTI0NTUsMTkgKzIxMjEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJc3dpdGNoIChhZGFwdGVyLT5zZWNpbmZvLmF1dGhtb2RlKSB7Ci0JCWNhc2Ugd2xhbjgwMl8xMWF1dGhtb2Rlc2hhcmVkOgotCQkJZHdycS0+dmFsdWUgPSBJV19BVVRIX0FMR19TSEFSRURfS0VZOwotCQkJYnJlYWs7Ci0JCWNhc2Ugd2xhbjgwMl8xMWF1dGhtb2Rlb3BlbjoKLQkJCWR3cnEtPnZhbHVlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07Ci0JCQlicmVhazsKLQkJY2FzZSB3bGFuODAyXzExYXV0aG1vZGVuZXR3b3JrRUFQOgotCQkJZHdycS0+dmFsdWUgPSBJV19BVVRIX0FMR19MRUFQOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQorCQlkd3JxLT52YWx1ZSA9IGFkYXB0ZXItPnNlY2luZm8uYXV0aF9tb2RlOwogCQlicmVhazsKIAogCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuaAppbmRleCAzOWYzNjdjMy4uMTVjZmFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuaApAQCAtMTAsODggKzEwLDIyIEBACiAvKiogUFJJVkFURSBDTUQgSUQgKi8KICNkZWZpbmUJV0xBTklPQ1RMCQkJU0lPQ0lXRklSU1RQUklWCiAKLSNkZWZpbmUgV0xBTlNFVFdQQUlFCQkJKFdMQU5JT0NUTCArIDApCi0KLSNkZWZpbmUgV0xBTl9TRVRJTlRfR0VUSU5UCQkoV0xBTklPQ1RMICsgNykKLSNkZWZpbmUgV0xBTk5GCQkJCQkxCi0jZGVmaW5lIFdMQU5SU1NJCQkJCTIKLSNkZWZpbmUgV0xBTkVOQUJMRTExRAkJCQk1Ci0jZGVmaW5lIFdMQU5BREhPQ0dSQVRFCQkJCTYKLSNkZWZpbmUgV0xBTl9TVUJDTURfU0VUX1BSRVNDQU4JCQkxMQotCiAjZGVmaW5lIFdMQU5fU0VUTk9ORV9HRVROT05FCSAgICAgICAgKFdMQU5JT0NUTCArIDgpCi0jZGVmaW5lIFdMQU5ERUFVVEggICAgICAgICAgICAgICAgICAJCTEKLSNkZWZpbmUgV0xBTlJBRElPT04gICAgICAgICAgICAgICAgIAkJMgotI2RlZmluZSBXTEFOUkFESU9PRkYgICAgICAgICAgICAgICAgCQkzCi0jZGVmaW5lIFdMQU5SRU1PVkVBREhPQ0FFUyAgICAgICAgICAJCTQKLSNkZWZpbmUgV0xBTkFESE9DU1RPUCAgICAgICAgICAgICAgIAkJNQotI2RlZmluZSBXTEFOQ0lQSEVSVEVTVCAgICAgICAgICAgICAgCQk2Ci0jZGVmaW5lIFdMQU5DUllQVE9URVNUCQkJCTcKLQotI2RlZmluZSBXTEFOV0xBTklETEVPTgkJCQkxMAotI2RlZmluZSBXTEFOV0xBTklETEVPRkYJCQkJMTEKICNkZWZpbmUgV0xBTl9TVUJDTURfQlRfUkVTRVQJCQkxMwogI2RlZmluZSBXTEFOX1NVQkNNRF9GV1RfUkVTRVQJCQkxNAogCi0jZGVmaW5lIFdMQU5HRVRMT0cgICAgICAgICAgICAgICAgICAJKFdMQU5JT0NUTCArIDkpCi0jZGVmaW5lIEdFVExPR19CVUZTSVpFICAzMDAKLQotI2RlZmluZSBXTEFOU0NBTl9UWVBFCQkJKFdMQU5JT0NUTCArIDExKQotCiAjZGVmaW5lIFdMQU5fU0VUTk9ORV9HRVRPTkVJTlQJCShXTEFOSU9DVEwgKyAxNSkKICNkZWZpbmUgV0xBTkdFVFJFR0lPTgkJCQkxCi0jZGVmaW5lIFdMQU5fR0VUX0xJU1RFTl9JTlRFUlZBTAkJMgotI2RlZmluZSBXTEFOX0dFVF9NVUxUSVBMRV9EVElNCQkJMwotI2RlZmluZSBXTEFOX0dFVF9UWF9SQVRFCQkJNAotI2RlZmluZQlXTEFOR0VUQkNOQVZHCQkJCTUKIAotI2RlZmluZSBXTEFOX0dFVF9MSU5LTU9ERQkJCTYKLSNkZWZpbmUgV0xBTl9HRVRfUkFESU9NT0RFCQkJNwotI2RlZmluZSBXTEFOX0dFVF9ERUJVR01PREUJCQk4CiAjZGVmaW5lIFdMQU5fU1VCQ01EX0ZXVF9DTEVBTlVQCQkJMTUKICNkZWZpbmUgV0xBTl9TVUJDTURfRldUX1RJTUUJCQkxNgogI2RlZmluZSBXTEFOX1NVQkNNRF9NRVNIX0dFVF9UVEwJCTE3CiAKLSNkZWZpbmUgV0xBTlJFR0NGUkRXUgkJCShXTEFOSU9DVEwgKyAxOCkKLQotI2RlZmluZSBXTEFOX1NFVE5PTkVfR0VUVFdFTFZFX0NIQVIgKFdMQU5JT0NUTCArIDE5KQotI2RlZmluZSBXTEFOX1NVQkNNRF9HRVRSWEFOVEVOTkEgICAgMQotI2RlZmluZSBXTEFOX1NVQkNNRF9HRVRUWEFOVEVOTkEgICAgMgotI2RlZmluZSBXTEFOX0dFVF9UU0YgICAgICAgICAgICAgICAgMwotCi0jZGVmaW5lIFdMQU5fU0VUTk9ORV9HRVRXT1JEQ0hBUgkoV0xBTklPQ1RMICsgMjEpCi0jZGVmaW5lIFdMQU5HRVRBREhPQ0FFUwkJCQkxCi0KLSNkZWZpbmUgV0xBTl9TRVRPTkVJTlRfR0VUT05FSU5UCShXTEFOSU9DVEwgKyAyMykKLSNkZWZpbmUgV0xBTl9CRUFDT05fSU5URVJWQUwJCQkxCi0jZGVmaW5lCVdMQU5fTElTVEVOSU5UUlZMCQkJNAotCi0jZGVmaW5lIFdMQU5fVFhDT05UUk9MCQkJCTYKLSNkZWZpbmUgV0xBTl9OVUxMUEtUSU5URVJWQUwJCQk3Ci0KICNkZWZpbmUgV0xBTl9TRVRPTkVJTlRfR0VUTk9ORQkJKFdMQU5JT0NUTCArIDI0KQotI2RlZmluZSBXTEFOX1NVQkNNRF9TRVRSWEFOVEVOTkEJCTEKLSNkZWZpbmUgV0xBTl9TVUJDTURfU0VUVFhBTlRFTk5BCQkyCi0jZGVmaW5lIFdMQU5TRVRBVVRIQUxHCQkJCTUKLSNkZWZpbmUgV0xBTlNFVDgwMjFYQVVUSEFMRwkJCTYKLSNkZWZpbmUgV0xBTlNFVEVOQ1JZUFRJT05NT0RFCQkJNwogI2RlZmluZSBXTEFOU0VUUkVHSU9OCQkJCTgKLSNkZWZpbmUgV0xBTl9TRVRfTElTVEVOX0lOVEVSVkFMCQk5Ci0KLSNkZWZpbmUgV0xBTl9TRVRfTVVMVElQTEVfRFRJTQkJCTEwCi0jZGVmaW5lIFdMQU5fU0VUX0FUSU1fV0lORE9XCQkJMTEKLSNkZWZpbmUgV0xBTlNFVEJDTkFWRwkJCQkxMwotI2RlZmluZSBXTEFOU0VUREFUQUFWRwkJCQkxNAotI2RlZmluZSBXTEFOX1NFVF9MSU5LTU9ERQkJCTE1Ci0jZGVmaW5lIFdMQU5fU0VUX1JBRElPTU9ERQkJCTE2Ci0jZGVmaW5lIFdMQU5fU0VUX0RFQlVHTU9ERQkJCTE3CiAjZGVmaW5lIFdMQU5fU1VCQ01EX01FU0hfU0VUX1RUTAkJMTgKIAogI2RlZmluZSBXTEFOX1NFVDEyOENIQVJfR0VUMTI4Q0hBUgkoV0xBTklPQ1RMICsgMjUpCi0jZGVmaW5lIFdMQU5TQ0FOX01PREUJCQkJNgotCi0jZGVmaW5lIFdMQU5fR0VUX0FESE9DX1NUQVRVUwkJCTkKLQogI2RlZmluZSBXTEFOX1NVQkNNRF9CVF9BREQJCQkxOAogI2RlZmluZSBXTEFOX1NVQkNNRF9CVF9ERUwgICAJCQkxOQogI2RlZmluZSBXTEFOX1NVQkNNRF9CVF9MSVNUCQkJMjAKQEAgLTEwMywyNyArMzcsOCBAQAogI2RlZmluZSBXTEFOX1NVQkNNRF9GV1RfTElTVF9ST1VURQkJCTI2CiAKICNkZWZpbmUgV0xBTl9TRVRfR0VUX1NJWFRFRU5fSU5UICAgICAgIChXTEFOSU9DVEwgKyAyOSkKLSNkZWZpbmUgV0xBTl9UUENDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgV0xBTl9QT1dFUkNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLQotI2RlZmluZSBXTEFOX0FVVE9fRlJFUV9TRVQJCQkzCi0jZGVmaW5lIFdMQU5fQVVUT19GUkVRX0dFVAkJCTQKICNkZWZpbmUgV0xBTl9MRURfR1BJT19DVFJMCQkJNQotI2RlZmluZSBXTEFOX1NDQU5QUk9CRVMgCQkJNgotI2RlZmluZQlXTEFOX0FEQVBUX1JBVEVTRVQJCQk4Ci0jZGVmaW5lCVdMQU5fSU5BQ1RJVklUWV9USU1FT1VUCQkJOQotI2RlZmluZSBXTEFOU05SCQkJCQkxMAotI2RlZmluZSBXTEFOX0dFVF9SQVRFCQkJCTExCi0jZGVmaW5lCVdMQU5fR0VUX1JYSU5GTwkJCQkxMgogCi0jZGVmaW5lIFdMQU5DTUQ1MlJEV1IJCQkoV0xBTklPQ1RMICsgMzApCi0jZGVmaW5lIFdMQU5DTUQ1M1JEV1IJCQkoV0xBTklPQ1RMICsgMzEpCi0jZGVmaW5lIENNRDUzQlVGTEVOCQkJCTMyCi0KLSNkZWZpbmUJUkVHX01BQwkJCQkJMHgxOQotI2RlZmluZQlSRUdfQkJQCQkJCQkweDFhCi0jZGVmaW5lCVJFR19SRgkJCQkJMHgxYgotI2RlZmluZQlSRUdfRUVQUk9NCQkJCTB4NTkKICNkZWZpbmUgV0xBTl9MSU5LTU9ERV84MDJfMwkJCTAKICNkZWZpbmUgV0xBTl9MSU5LTU9ERV84MDJfMTEJCQkyCiAjZGVmaW5lIFdMQU5fUkFESU9NT0RFX05PTkUgICAgCQkJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKaW5kZXggODQxYjNjMS4uMjgzYmU0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCkBAIC0zMDU0LDcgKzMwNTQsNyBAQAogCShpd19oYW5kbGVyKSBwcmlzbTU0X3NldF93YXAsCS8qIFNJT0NTSVdBUCAqLwogCShpd19oYW5kbGVyKSBwcmlzbTU0X2dldF93YXAsCS8qIFNJT0NHSVdBUCAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdBUExJU1QgZGVwcmVjaWF0ZWQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV0FQTElTVCBkZXByZWNhdGVkICovCiAJKGl3X2hhbmRsZXIpIHByaXNtNTRfc2V0X3NjYW4sCS8qIFNJT0NTSVdTQ0FOICovCiAJKGl3X2hhbmRsZXIpIHByaXNtNTRfZ2V0X3NjYW4sCS8qIFNJT0NHSVdTQ0FOICovCiAJKGl3X2hhbmRsZXIpIHByaXNtNTRfc2V0X2Vzc2lkLAkvKiBTSU9DU0lXRVNTSUQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKaW5kZXggYTAzN2IxMS4uMDg0Nzk1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCQkJICAgIElTTDM4WFhfTUVNT1JZX1dJTkRPV19TSVpFIDogZndfbGVuOwogCQkJdTMyIF9faW9tZW0gKmRldl9md19wdHIgPSBkZXZpY2VfYmFzZSArIElTTDM4WFhfRElSRUNUX01FTV9XSU47CiAKLQkJCS8qIHNldCB0aGUgY2FyZHMgYmFzZSBhZGRyZXNzIGZvciB3cml0dGluZyB0aGUgZGF0YSAqLworCQkJLyogc2V0IHRoZSBjYXJkJ3MgYmFzZSBhZGRyZXNzIGZvciB3cml0aW5nIHRoZSBkYXRhICovCiAJCQlpc2wzOHh4X3czMl9mbHVzaChkZXZpY2VfYmFzZSwgcmVnLAogCQkJCQkgIElTTDM4WFhfRElSX01FTV9CQVNFX1JFRyk7CiAJCQl3bWIoKTsJLyogYmUgcGFyYW5vaWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKaW5kZXggZGQwNzBjYy4uZjQ5ZWIwNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jCkBAIC0zNzgsOSArMzc4LDEwIEBACiAJZGlzcGxheV9idWZmZXIoKGNoYXIgKikgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAjZW5kaWYKIAkvKiB0YWtlIGNhcmUgb2YgbW9uaXRvciBtb2RlIGFuZCBzcHkgbW9uaXRvcmluZy4gKi8KLQlpZiAodW5saWtlbHkocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpKQorCWlmICh1bmxpa2VseShwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikpIHsKKwkJc2tiLT5kZXYgPSBuZGV2OwogCQlkaXNjYXJkID0gaXNscGNpX21vbml0b3JfcngocHJpdiwgJnNrYik7Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJaWYgKHVubGlrZWx5KHNrYi0+ZGF0YVsyICogRVRIX0FMRU5dID09IDApKSB7CiAJCQkvKiBUaGUgcGFja2V0IGhhcyBhIHJ4X2FubmV4LiBSZWFkIGl0IGZvciBzcHkgbW9uaXRvcmluZywgVGhlbgogCQkJICogcmVtb3ZlIGl0LCB3aGlsZSBrZWVwaW5nIHRoZSAyIGxlYWRpbmcgTUFDIGFkZHIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKaW5kZXggNjdiODY3ZjguLjU3NDBkNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogICB2b2xhdGlsZSB1X2NoYXIgX19pb21lbSAqdmVyaWZ5ID0gbHAtPm1lbSArIFBTQV9BRERSICsKICAgICAocHNhb2ZmKDAsIHBzYV9jb21wX251bWJlcikgPDwgMSk7CiAKLSAgLyogQXV0aG9yaXplIHdyaXR0aW5nIHRvIFBTQSAqLworICAvKiBBdXRob3JpemUgd3JpdGluZyB0byBQU0EgKi8KICAgaGFjcl93cml0ZShiYXNlLCBIQUNSX1BXUl9TVEFUIHwgSEFDUl9ST01fV0VOKTsKIAogICB3aGlsZShuLS0gPiAwKQpAQCAtMTY3Niw3ICsxNjc2LDcgQEAKICAgICAgIGZlZV93cml0ZShiYXNlLCAweDYwLAogCQlkYWMsIDIpOwogCi0gICAgICAvKiBXZSBub3cgc2hvdWxkIHZlcmlmeSBoZXJlIHRoYXQgdGhlIEVFcHJvbSB3cml0dGluZyB3YXMgb2sgKi8KKyAgICAgIC8qIFdlIG5vdyBzaG91bGQgdmVyaWZ5IGhlcmUgdGhhdCB0aGUgRUVwcm9tIHdyaXRpbmcgd2FzIG9rICovCiAKICAgICAgIC8qIFJlUmVhZCB0aGUgZmlyc3QgYXJlYSAqLwogICAgICAgZmVlX3JlYWQoYmFzZSwgMHgwMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKaW5kZXggNGQxYzQ5MC4uNGI5ZGUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKQEAgLTEyMCw3ICsxMjAsNyBAQAogICogdGhlIFdhdmVsYW4gaXRzZWxmIChOQ1IgLT4gQVQmVCAtPiBMdWNlbnQpLgogICoKICAqIEFsbCBzdGFydGVkIHdpdGggQW5kZXJzIEtsZW1ldHMgPGtsZW1ldHNAcGF1bC5ydXRnZXJzLmVkdT4sCi0gKiB3cml0dGluZyBhIFdhdmVsYW4gSVNBIGRyaXZlciBmb3IgdGhlIE1BQ0ggbWljcm9rZXJuZWwuIEdpcmlzaAorICogd3JpdGluZyBhIFdhdmVsYW4gSVNBIGRyaXZlciBmb3IgdGhlIE1BQ0ggbWljcm9rZXJuZWwuIEdpcmlzaAogICogV2VsbGluZyA8d2VsbGluZ0BwYXVsLnJ1dGdlcnMuZWR1PiBoYWQgYWxzbyB3b3JrZWQgb24gaXQuCiAgKiBLZWl0aCBNb29yZSBtb2RpZnkgdGhpcyBmb3IgdGhlIFBjbWNpYSBoYXJkd2FyZS4KICAqIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwppbmRleCBlMDRjZmZjLi44NDU5NTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwpAQCAtNDAsNiArNDAsNyBAQAogCXsgVVNCX0RFVklDRSgweDEyNmYsIDB4YTAwNiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKIAl7IFVTQl9ERVZJQ0UoMHg2ODkxLCAweGE3MjcpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHg5MDcxKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4OTA3NSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNTdlLCAweDMwMGIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJeyBVU0JfREVWSUNFKDB4MDc5YiwgMHgwMDRhKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAogCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4MjAwMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKQEAgLTY3LDggKzY4LDExIEBACiAJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDEwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwYmFmLCAweDAxMjEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAogCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxMiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDEzKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwMDUzLCAweDUzMDEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAogCS8qICJEcml2ZXJsZXNzIiBkZXZpY2VzIHRoYXQgbmVlZCBlamVjdGluZyAqLwogCXsgVVNCX0RFVklDRSgweDBhY2UsIDB4MjAxMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9JTlNUQUxMRVIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYWNlLCAweDIwZmYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfSU5TVEFMTEVSIH0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jIGIvZHJpdmVycy9uZXQveWVsbG93ZmluLmMKaW5kZXggM2Y0YTdjZi4uZjJhOTBhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMKKysrIGIvZHJpdmVycy9uZXQveWVsbG93ZmluLmMKQEAgLTEwOSw3ICsxMDksNiBAQAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KIEtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6djEuMDUgIDEvMDkvMjAwMSAgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgotS0VSTl9JTkZPICIgIGh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsveWVsbG93ZmluLmh0bWxcbiIKIEtFUk5fSU5GTyAiICAodW5vZmZpY2lhbCAyLjQueCBwb3J0LCAiIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIilcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKaW5kZXggNzhjMmU2ZS4uZWRkNmRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAgCiAjaW5jbHVkZSAib3Byb2ZpbGVfc3RhdHMuaCIKICNpbmNsdWRlICJldmVudF9idWZmZXIuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYyBiL2RyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYwppbmRleCAyMWM0YzI5Li41Yjg2ZWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvbGJhX3BjaS5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3BkYy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L0tjb25maWcgYi9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZwppbmRleCAzNmM2YTFiLi5mNDZjNjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZworKysgYi9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZwpAQCAtNiw2ICs2LDcgQEAKICMKIAogbWVudSAiUGFyYWxsZWwgcG9ydCBzdXBwb3J0IgorCWRlcGVuZHMgb24gSEFTX0lPTUVNCiAKIGNvbmZpZyBQQVJQT1JUCiAJdHJpc3RhdGUgIlBhcmFsbGVsIHBvcnQgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9jcy5jCmluZGV4IDMxNmMwNmYuLjhiN2Q4NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiAKICAgICBwID0gcGFycG9ydF9wY19wcm9iZV9wb3J0KGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uQmFzZVBvcnQyLAogCQkJICAgICAgbGluay0+aXJxLkFzc2lnbmVkSVJRLCBQQVJQT1JUX0RNQV9OT05FLAotCQkJICAgICAgTlVMTCk7CisJCQkgICAgICAmbGluay0+ZGV2KTsKICAgICBpZiAocCA9PSBOVUxMKSB7CiAJcHJpbnRrKEtFUk5fTk9USUNFICJwYXJwb3J0X2NzOiBwYXJwb3J0X3BjX3Byb2JlX3BvcnQoKSBhdCAiCiAJICAgICAgICIweCUzeCwgaXJxICV1IGZhaWxlZFxuIiwgbGluay0+aW8uQmFzZVBvcnQxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfbWZjMy5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfbWZjMy5jCmluZGV4IGU1YjBhNTQuLjc3NzI2ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X21mYzMuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9tZmMzLmMKQEAgLTM1Niw2ICszNTYsNyBAQAogCQkJCWlmIChyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIG1mYzNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgcC0+bmFtZSwgJnBwX21mYzNfb3BzKSkKIAkJCQkJZ290byBvdXRfaXJxOwogCQl9CisJCXAtPmRldiA9ICZ6LT5kZXY7CiAKIAkJdGhpc19wb3J0W3BpYXMrK10gPSBwOwogCQlwcmludGsoS0VSTl9JTkZPICIlczogTXVsdGlmYWNlIElJSSBwb3J0IHVzaW5nIGlycVxuIiwgcC0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYwppbmRleCAzZGUyNjIzLi43YmZiYWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKQEAgLTUxLDggKzUxLDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTYyMCw2ICs2MjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZG1hZmxhZzsKIAlzaXplX3QgbGVmdCA9IGxlbmd0aDsKIAljb25zdCBzdHJ1Y3QgcGFycG9ydF9wY19wcml2YXRlICpwcml2ID0gcG9ydC0+cGh5c3BvcnQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0LT5waHlzcG9ydC0+ZGV2OwogCWRtYV9hZGRyX3QgZG1hX2FkZHIsIGRtYV9oYW5kbGU7CiAJc2l6ZV90IG1heGxlbiA9IDB4MTAwMDA7IC8qIG1heCA2NGsgcGVyIERNQSB0cmFuc2ZlciAqLwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZykgYnVmOwpAQCAtNjMxLDggKzYzNCw4IEBACiAJCWlmICgoc3RhcnQgXiBlbmQpICYgfjB4ZmZmZlVMKQogCQkJbWF4bGVuID0gMHgxMDAwMCAtIChzdGFydCAmIDB4ZmZmZik7CiAKLQkJZG1hX2FkZHIgPSBkbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUocHJpdi0+ZGV2LCAodm9pZCAqKWJ1ZiwgbGVuZ3RoLAotCQkJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlkbWFfYWRkciA9IGRtYV9oYW5kbGUgPSBkbWFfbWFwX3NpbmdsZShkZXYsICh2b2lkICopYnVmLCBsZW5ndGgsCisJCQkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CiAgICAgICAgIH0gZWxzZSB7CiAJCS8qIGFib3ZlIDE2IE1CIHdlIHVzZSBhIGJvdW5jZSBidWZmZXIgYXMgSVNBLURNQSBpcyBub3QgcG9zc2libGUgKi8KIAkJbWF4bGVuICAgPSBQQUdFX1NJWkU7ICAgICAgICAgIC8qIHNpemVvZihwcml2LT5kbWFfYnVmKSAqLwpAQCAtNzI4LDkgKzczMSw5IEBACiAKIAkvKiBUdXJuIG9mZiBETUEgbW9kZSAqLwogCWZyb2JfZWNvbnRyb2wgKHBvcnQsIDE8PDMsIDApOwotCQorCiAJaWYgKGRtYV9oYW5kbGUpCi0JCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2LCBkbWFfaGFuZGxlLCBsZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2hhbmRsZSwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKIAogZHVtcF9wYXJwb3J0X3N0YXRlICgibGVhdmUgZmlmb193cml0ZV9ibG9ja19kbWEiLCBwb3J0KTsKIAlyZXR1cm4gbGVuZ3RoIC0gbGVmdDsKQEAgLTIxNDYsNyArMjE0OSw3IEBACiBzdHJ1Y3QgcGFycG9ydCAqcGFycG9ydF9wY19wcm9iZV9wb3J0ICh1bnNpZ25lZCBsb25nIGludCBiYXNlLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGludCBiYXNlX2hpLAogCQkJCSAgICAgICBpbnQgaXJxLCBpbnQgZG1hLAotCQkJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2KQorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBhcnBvcnRfcGNfcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zICpvcHM7CkBAIC0yMTU1LDYgKzIxNTgsMTcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKmJhc2VfcmVzOwogCXN0cnVjdCByZXNvdXJjZQkqRUNSX3JlcyA9IE5VTEw7CiAJc3RydWN0IHJlc291cmNlCSpFUFBfcmVzID0gTlVMTDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gTlVMTDsKKworCWlmICghZGV2KSB7CisJCS8qIFdlIG5lZWQgYSBwaHlzaWNhbCBkZXZpY2UgdG8gYXR0YWNoIHRvLCBidXQgbm9uZSB3YXMKKwkJICogcHJvdmlkZWQuIENyZWF0ZSBvdXIgb3duLiAqLworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicGFycG9ydF9wYyIsCisJCQkJCQkgICAgICAgYmFzZSwgTlVMTCwgMCk7CisJCWlmIChJU19FUlIocGRldikpCisJCQlyZXR1cm4gTlVMTDsKKwkJZGV2ID0gJnBkZXYtPmRldjsKKwl9CiAKIAlvcHMgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyksIEdGUF9LRVJORUwpOwogCWlmICghb3BzKQpAQCAtMjE4MCw5ICsyMTk0LDEwIEBACiAJcHJpdi0+Zmlmb19kZXB0aCA9IDA7CiAJcHJpdi0+ZG1hX2J1ZiA9IE5VTEw7CiAJcHJpdi0+ZG1hX2hhbmRsZSA9IDA7Ci0JcHJpdi0+ZGV2ID0gZGV2OwogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5saXN0KTsKIAlwcml2LT5wb3J0ID0gcDsKKworCXAtPmRldiA9IGRldjsKIAlwLT5iYXNlX2hpID0gYmFzZV9oaTsKIAlwLT5tb2RlcyA9IFBBUlBPUlRfTU9ERV9QQ1NQUCB8IFBBUlBPUlRfTU9ERV9TQUZFSU5JTlQ7CiAJcC0+cHJpdmF0ZV9kYXRhID0gcHJpdjsKQEAgLTIzMDUsOSArMjMyMCwxMCBAQAogCQkJCXAtPmRtYSA9IFBBUlBPUlRfRE1BX05PTkU7CiAJCQl9IGVsc2UgewogCQkJCXByaXYtPmRtYV9idWYgPQotCQkJCSAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+ZGV2LAorCQkJCSAgZG1hX2FsbG9jX2NvaGVyZW50KGRldiwKIAkJCQkJCSAgICAgICBQQUdFX1NJWkUsCi0JCQkJCQkgICAgICAgJnByaXYtPmRtYV9oYW5kbGUpOworCQkJCQkJICAgICAgICZwcml2LT5kbWFfaGFuZGxlLAorCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOwogCQkJCWlmICghIHByaXYtPmRtYV9idWYpIHsKIAkJCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiAiCiAJCQkJCQkiY2Fubm90IGdldCBidWZmZXIgZm9yIERNQSwgIgpAQCAtMjM1Niw2ICsyMzcyLDggQEAKIG91dDI6CiAJa2ZyZWUgKG9wcyk7CiBvdXQxOgorCWlmIChwZGV2KQorCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjM4Myw3ICsyNDAxLDcgQEAKIAkJcmVsZWFzZV9yZWdpb24ocC0+YmFzZV9oaSwgMyk7CiAjaWYgZGVmaW5lZChDT05GSUdfUEFSUE9SVF9QQ19GSUZPKSAmJiBkZWZpbmVkKEhBU19ETUEpCiAJaWYgKHByaXYtPmRtYV9idWYpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+ZGV2LCBQQUdFX1NJWkUsCisJCWRtYV9mcmVlX2NvaGVyZW50KHAtPnBoeXNwb3J0LT5kZXYsIFBBR0VfU0laRSwKIAkJCQkgICAgcHJpdi0+ZG1hX2J1ZiwKIAkJCQkgICAgcHJpdi0+ZG1hX2hhbmRsZSk7CiAjZW5kaWYKQEAgLTI0ODksNyArMjUwNyw3IEBACiAJICovCiAJcmVsZWFzZV9yZXNvdXJjZShiYXNlX3Jlcyk7CiAJaWYgKHBhcnBvcnRfcGNfcHJvYmVfcG9ydCAoaXRlODg3Ml9scHQsIGl0ZTg4NzJfbHB0aGksCi0JCQkJICAgaXJxLCBQQVJQT1JUX0RNQV9OT05FLCBOVUxMKSkgeworCQkJCSAgIGlycSwgUEFSUE9SVF9ETUFfTk9ORSwgJnBkZXYtPmRldikpIHsKIAkJcHJpbnRrIChLRVJOX0lORk8KIAkJCSJwYXJwb3J0X3BjOiBJVEUgODg3MiBwYXJhbGxlbCBwb3J0OiBpbz0weCVYIiwKIAkJCWl0ZTg4NzJfbHB0KTsKQEAgLTI2NzIsNyArMjY5MCw3IEBACiAJfQogCiAJLyogZmluYWxseSwgZG8gdGhlIHByb2JlIHdpdGggdmFsdWVzIG9idGFpbmVkICovCi0JaWYgKHBhcnBvcnRfcGNfcHJvYmVfcG9ydCAocG9ydDEsIHBvcnQyLCBpcnEsIGRtYSwgTlVMTCkpIHsKKwlpZiAocGFycG9ydF9wY19wcm9iZV9wb3J0IChwb3J0MSwgcG9ydDIsIGlycSwgZG1hLCAmcGRldi0+ZGV2KSkgewogCQlwcmludGsgKEtFUk5fSU5GTwogCQkJInBhcnBvcnRfcGM6IFZJQSBwYXJhbGxlbCBwb3J0OiBpbz0weCVYIiwgcG9ydDEpOwogCQlpZiAoaXJxICE9IFBBUlBPUlRfSVJRX05PTkUpCkBAIC0yOTcwLDcgKzI5ODgsNyBAQAogCQkJcGFycG9ydF9wY19wY2lfdGJsW2kgKyBsYXN0X3Npb10uZGV2aWNlLCBpb19sbywgaW9faGkpOwogCQlkYXRhLT5wb3J0c1tjb3VudF0gPQogCQkJcGFycG9ydF9wY19wcm9iZV9wb3J0IChpb19sbywgaW9faGksIFBBUlBPUlRfSVJRX05PTkUsCi0JCQkJCSAgICAgICBQQVJQT1JUX0RNQV9OT05FLCBkZXYpOworCQkJCQkgICAgICAgUEFSUE9SVF9ETUFfTk9ORSwgJmRldi0+ZGV2KTsKIAkJaWYgKGRhdGEtPnBvcnRzW2NvdW50XSkKIAkJCWNvdW50Kys7CiAJfQpAQCAtMzA3Nyw4ICszMDk1LDggQEAKIAl9IGVsc2UKIAkJZG1hID0gUEFSUE9SVF9ETUFfTk9ORTsKIAotCXByaW50ayhLRVJOX0lORk8gInBhcnBvcnQ6IFBuUEJJT1MgcGFycG9ydCBkZXRlY3RlZC5cbiIpOwotCWlmICghKHBkYXRhID0gcGFycG9ydF9wY19wcm9iZV9wb3J0IChpb19sbywgaW9faGksIGlycSwgZG1hLCBOVUxMKSkpCisJZGV2X2luZm8oJmRldi0+ZGV2LCAicmVwb3J0ZWQgYnkgJXNcbiIsIGRldi0+cHJvdG9jb2wtPm5hbWUpOworCWlmICghKHBkYXRhID0gcGFycG9ydF9wY19wcm9iZV9wb3J0IChpb19sbywgaW9faGksIGlycSwgZG1hLCAmZGV2LT5kZXYpKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwbnBfc2V0X2RydmRhdGEoZGV2LHBkYXRhKTsKQEAgLTMxMDMsNiArMzEyMSwyMSBAQAogfTsKIAogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJLyogQWx3YXlzIHN1Y2NlZWQsIHRoZSBhY3R1YWwgcHJvYmluZyBpcyBkb25lIGluCisJICogcGFycG9ydF9wY19wcm9iZV9wb3J0KCkuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBhcnBvcnRfcGNfcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJwYXJwb3J0X3BjIiwKKwl9LAorCS5wcm9iZQkJPSBwYXJwb3J0X3BjX3BsYXRmb3JtX3Byb2JlLAorfTsKKwogLyogVGhpcyBpcyBjYWxsZWQgYnkgcGFycG9ydF9wY19maW5kX25vbnBjaV9wb3J0cyAoaW4gYXNtL3BhcnBvcnQuaCkgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpCiBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzIChpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCkBAIC0zMzc4LDkgKzM0MTEsMTUgQEAKIAogc3RhdGljIGludCBfX2luaXQgcGFycG9ydF9wY19pbml0KHZvaWQpCiB7CisJaW50IGVycjsKKwogCWlmIChwYXJzZV9wYXJwb3J0X3BhcmFtcygpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGFycG9ydF9wY19wbGF0Zm9ybV9kcml2ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAlpZiAoaW9bMF0pIHsKIAkJaW50IGk7CiAJCS8qIE9ubHkgcHJvYmUgdGhlIHBvcnRzIHdlIHdlcmUgZ2l2ZW4uICovCkBAIC0zNDA1LDYgKzM0NDQsNyBAQAogCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZwYXJwb3J0X3BjX3BjaV9kcml2ZXIpOwogCWlmIChwbnBfcmVnaXN0ZXJlZF9wYXJwb3J0KQogCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIgKCZwYXJwb3J0X3BjX3BucF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwYXJwb3J0X3BjX3BsYXRmb3JtX2RyaXZlcik7CiAKIAlzcGluX2xvY2soJnBvcnRzX2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmcG9ydHNfbGlzdCkpIHsKQEAgLTM0MTMsNiArMzQ1Myw5IEBACiAJCXByaXYgPSBsaXN0X2VudHJ5KHBvcnRzX2xpc3QubmV4dCwKIAkJCQkgIHN0cnVjdCBwYXJwb3J0X3BjX3ByaXZhdGUsIGxpc3QpOwogCQlwb3J0ID0gcHJpdi0+cG9ydDsKKwkJaWYgKHBvcnQtPmRldiAmJiBwb3J0LT5kZXYtPmJ1cyA9PSAmcGxhdGZvcm1fYnVzX3R5cGUpCisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigKKwkJCQl0b19wbGF0Zm9ybV9kZXZpY2UocG9ydC0+ZGV2KSk7CiAJCXNwaW5fdW5sb2NrKCZwb3J0c19sb2NrKTsKIAkJcGFycG9ydF9wY191bnJlZ2lzdGVyX3BvcnQocG9ydCk7CiAJCXNwaW5fbG9jaygmcG9ydHNfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zZXJpYWwuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCmluZGV4IDc4YzBhMjYuLjkwZWEzYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAkJZGV2X2RiZygmZGV2LT5kZXYsICJQQ0kgcGFyYWxsZWwgcG9ydCBkZXRlY3RlZDogSS9PIGF0ICIKIAkJCSIlI2x4KCUjbHgpXG4iLCBpb19sbywgaW9faGkpOwogCQlwb3J0ID0gcGFycG9ydF9wY19wcm9iZV9wb3J0IChpb19sbywgaW9faGksIFBBUlBPUlRfSVJRX05PTkUsCi0JCQkJCSAgICAgIFBBUlBPUlRfRE1BX05PTkUsIGRldik7CisJCQkJCSAgICAgIFBBUlBPUlRfRE1BX05PTkUsICZkZXYtPmRldik7CiAJCWlmIChwb3J0KSB7CiAJCQlwcml2LT5wb3J0W3ByaXYtPm51bV9wYXIrK10gPSBwb3J0OwogCQkJc3VjY2VzcyA9IDE7CkBAIC0zOTIsNiArMzkyLDcgQEAKIHN0YXRpYyBpbnQgcGFycG9ydF9zZXJpYWxfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBwYXJwb3J0X3NlcmlhbF9wcml2YXRlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaW50IGVycjsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKGRldik7CkBAIC0zOTksNyArNDAwLDEyIEBACiAJLyoKIAkgKiBUaGUgZGV2aWNlIG1heSBoYXZlIGJlZW4gZGlzYWJsZWQuICBSZS1lbmFibGUgaXQuCiAJICovCi0JcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwYXJwb3J0X3NlcmlhbDogJXM6IGVycm9yIGVuYWJsaW5nICIKKwkJCSJkZXZpY2UgZm9yIHJlc3VtZSAoJWQpXG4iLCBwY2lfbmFtZShkZXYpLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KIAogCWlmIChwcml2LT5zZXJpYWwpCiAJCXBjaXNlcmlhbF9yZXN1bWVfcG9ydHMocHJpdi0+c2VyaWFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3N1bmJwcC5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc3VuYnBwLmMKaW5kZXggNDAwYmI5MC4uZDI3MDE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc3VuYnBwLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc3VuYnBwLmMKQEAgLTMyMiw2ICszMjIsNyBAQAogCQlnb3RvIG91dF9mcmVlX29wczsKIAogCXAtPnNpemUgPSBzaXplOworCXAtPmRldiA9ICZzZGV2LT5vZmRldi5kZXY7CiAKIAlpZiAoKGVyciA9IHJlcXVlc3RfaXJxKHAtPmlycSwgcGFycG9ydF9zdW5icHBfaW50ZXJydXB0LAogCQkJICAgICAgIElSUUZfU0hBUkVELCBwLT5uYW1lLCBwKSkgIT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3NoYXJlLmMgYi9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYwppbmRleCBmZDkxMjllLi5jZDY2NDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYwpAQCAtMzY1LDYgKzM2NSwxMSBAQAogCXBhcnBvcnRfZGFpc3lfaW5pdChwb3J0KTsKICNlbmRpZgogCisJaWYgKCFwb3J0LT5kZXYpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmaXggdGhpcyBsZWdhY3kgIgorCQkJCSJuby1kZXZpY2UgcG9ydCBkcml2ZXIhXG4iLAorCQkJCXBvcnQtPm5hbWUpOworCiAJcGFycG9ydF9wcm9jX3JlZ2lzdGVyKHBvcnQpOwogCW11dGV4X2xvY2soJnJlZ2lzdHJhdGlvbl9sb2NrKTsKIAlzcGluX2xvY2tfaXJxKCZwYXJwb3J0bGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jCmluZGV4IDQwYzc5YjAuLmZhNWMwMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2NvcmUuYwpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaV9ob3RwbHVnLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSAiYWNwaXBocC5oIgogCiAjZGVmaW5lIE1ZX05BTUUJImFjcGlwaHAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYwppbmRleCBmY2E5NzhmLi45ZWY0ZTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaG90cGx1Zy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgIi4uL3BjaS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfY29yZS5jCmluZGV4IDU5MzkyOTQuLjAzMTZlZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9jb3JlLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgIi4uLy4uLy4uL2FyY2gvaTM4Ni9wY2kvcGNpLmgiCS8qIGZvciBzdHJ1Y3QgaXJxX3JvdXRpbmdfdGFibGUgKi8KICNpbmNsdWRlICJpYm1waHAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2hwYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfaHBjLmMKaW5kZXggZjU1YWMzOC4uZDA2Y2NiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfaHBjLmMKQEAgLTMyLDkgKzMyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgImlibXBocC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCmluZGV4IDYzZjNiZDEuLmJkNDMzZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfc3lzZnMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfc3lzZnMuYwppbmRleCA2YzViZTNmLi5kZjA3NjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYWRscGFyX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFkbHBhcl9zeXNmcy5jCkBAIC0xMjksOCArMTI5LDkgQEAKIH07CiAKIHN0cnVjdCBrc2V0IGRscGFyX2lvX2tzZXQgPSB7Ci0JLnN1YnN5cyA9ICZwY2lfaG90cGx1Z19zbG90c19zdWJzeXMsCi0JLmtvYmogPSB7Lm5hbWUgPSBETFBBUl9LT0JKX05BTUUsIC5rdHlwZT0ma3R5cGVfZGxwYXJfaW8sfSwKKwkua29iaiA9IHsubmFtZSA9IERMUEFSX0tPQkpfTkFNRSwKKwkJIC5rdHlwZSA9ICZrdHlwZV9kbHBhcl9pbywKKwkJIC5wYXJlbnQgPSAmcGNpX2hvdHBsdWdfc2xvdHNfc3Vic3lzLmtvYmp9LAogCS5rdHlwZSA9ICZrdHlwZV9kbHBhcl9pbywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYwppbmRleCA4NDc5MzZmLi40NThjMDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpX2hvdHBsdWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2VlaC5oPiAgICAgICAvKiBmb3IgZWVoX2FkZF9kZXZpY2UoKSAqLwogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CQkvKiBydGFzX2NhbGwgKi8KQEAgLTE3MCwxMCArMTY5LDEwIEBACiB7CiAJY29uc3QgaW50ICppbmRleGVzLCAqbmFtZXMsICp0eXBlcywgKmRvbWFpbnM7CiAKLQlpbmRleGVzID0gZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGRyYy1pbmRleGVzIiwgTlVMTCk7Ci0JbmFtZXMgPSBnZXRfcHJvcGVydHkoZG4sICJpYm0sZHJjLW5hbWVzIiwgTlVMTCk7Ci0JdHlwZXMgPSBnZXRfcHJvcGVydHkoZG4sICJpYm0sZHJjLXR5cGVzIiwgTlVMTCk7Ci0JZG9tYWlucyA9IGdldF9wcm9wZXJ0eShkbiwgImlibSxkcmMtcG93ZXItZG9tYWlucyIsIE5VTEwpOworCWluZGV4ZXMgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJpYm0sZHJjLWluZGV4ZXMiLCBOVUxMKTsKKwluYW1lcyA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImlibSxkcmMtbmFtZXMiLCBOVUxMKTsKKwl0eXBlcyA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImlibSxkcmMtdHlwZXMiLCBOVUxMKTsKKwlkb21haW5zID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGRyYy1wb3dlci1kb21haW5zIiwgTlVMTCk7CiAKIAlpZiAoIWluZGV4ZXMgfHwgIW5hbWVzIHx8ICF0eXBlcyB8fCAhZG9tYWlucykgewogCQkvKiBTbG90IGRvZXMgbm90IGhhdmUgZHluYW1pY2FsbHktcmVtb3ZhYmxlIGNoaWxkcmVuICovCkBAIC0yMDYsNyArMjA1LDcgQEAKIAljaGFyICpuYW1lX3RtcCwgKnR5cGVfdG1wOwogCWludCBpLCByYzsKIAotCW15X2luZGV4ID0gZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLG15LWRyYy1pbmRleCIsIE5VTEwpOworCW15X2luZGV4ID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLG15LWRyYy1pbmRleCIsIE5VTEwpOwogCWlmICghbXlfaW5kZXgpIHsKIAkJLyogTm9kZSBpc24ndCBETFBBUi9ob3RwbHVnIGNhcGFibGUgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NnaV9ob3RwbHVnLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NnaV9ob3RwbHVnLmMKaW5kZXggNzhjZjA3MS4uZWYwN2MzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zZ2lfaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2dpX2hvdHBsdWcuYwpAQCAtMjQ5LDE5ICsyNDksMTkgQEAKIAogCiAJaWYgKHJjID09IFBDSV9TTE9UX0FMUkVBRFlfVVApIHsKLQkJZGV2X2RiZyhzbG90LT5wY2lfYnVzLT5zZWxmLCAiaXMgYWxyZWFkeSBhY3RpdmVcbiIpOworCQlkZXZfZGJnKCZzbG90LT5wY2lfYnVzLT5zZWxmLT5kZXYsICJpcyBhbHJlYWR5IGFjdGl2ZVxuIik7CiAJCXJldHVybiAxOyAvKiByZXR1cm4gMSB0byB1c2VyICovCiAJfQogCiAJaWYgKHJjID09IFBDSV9MMV9FUlIpIHsKLQkJZGV2X2RiZyhzbG90LT5wY2lfYnVzLT5zZWxmLAorCQlkZXZfZGJnKCZzbG90LT5wY2lfYnVzLT5zZWxmLT5kZXYsCiAJCQkiTDEgZmFpbHVyZSAlZCB3aXRoIG1lc3NhZ2U6ICVzIiwKIAkJCXJlc3AucmVzcF9zdWJfZXJybm8sIHJlc3AucmVzcF9sMV9tc2cpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIAogCWlmIChyYykgewotCQlkZXZfZGJnKHNsb3QtPnBjaV9idXMtPnNlbGYsCisJCWRldl9kYmcoJnNsb3QtPnBjaV9idXMtPnNlbGYtPmRldiwKIAkJCSJpbnNlcnQgZmFpbGVkIHdpdGggZXJyb3IgJWQgc3ViLWVycm9yICVkXG4iLAogCQkJcmMsIHJlc3AucmVzcF9zdWJfZXJybm8pOwogCQlyZXR1cm4gLUVJTzsKQEAgLTI4NywyNSArMjg3LDI1IEBACiAKIAlpZiAoKGFjdGlvbiA9PSBQQ0lfUkVRX1NMT1RfRUxJR0lCTEUpICYmCiAJICAgIChyYyA9PSBQQ0lfU0xPVF9BTFJFQURZX0RPV04pKSB7Ci0JCWRldl9kYmcoc2xvdC0+cGNpX2J1cy0+c2VsZiwgIlNsb3QgJXMgYWxyZWFkeSBpbmFjdGl2ZVxuIik7CisJCWRldl9kYmcoJnNsb3QtPnBjaV9idXMtPnNlbGYtPmRldiwgIlNsb3QgJXMgYWxyZWFkeSBpbmFjdGl2ZVxuIiwgc2xvdC0+cGh5c2ljYWxfcGF0aCk7CiAJCXJldHVybiAxOyAvKiByZXR1cm4gMSB0byB1c2VyICovCiAJfQogCiAJaWYgKChhY3Rpb24gPT0gUENJX1JFUV9TTE9UX0VMSUdJQkxFKSAmJiAocmMgPT0gUENJX0VNUFRZXzMzTUhaKSkgewotCQlkZXZfZGJnKHNsb3QtPnBjaV9idXMtPnNlbGYsCisJCWRldl9kYmcoJnNsb3QtPnBjaV9idXMtPnNlbGYtPmRldiwKIAkJCSJDYW5ub3QgcmVtb3ZlIGxhc3QgMzNNSHogY2FyZFxuIik7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCiAJaWYgKChhY3Rpb24gPT0gUENJX1JFUV9TTE9UX0VMSUdJQkxFKSAmJiAocmMgPT0gUENJX0wxX0VSUikpIHsKLQkJZGV2X2RiZyhzbG90LT5wY2lfYnVzLT5zZWxmLAorCQlkZXZfZGJnKCZzbG90LT5wY2lfYnVzLT5zZWxmLT5kZXYsCiAJCQkiTDEgZmFpbHVyZSAlZCB3aXRoIG1lc3NhZ2UgXG4lc1xuIiwKIAkJCXJlc3AucmVzcF9zdWJfZXJybm8sIHJlc3AucmVzcF9sMV9tc2cpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIAogCWlmICgoYWN0aW9uID09IFBDSV9SRVFfU0xPVF9FTElHSUJMRSkgJiYgcmMpIHsKLQkJZGV2X2RiZyhzbG90LT5wY2lfYnVzLT5zZWxmLAorCQlkZXZfZGJnKCZzbG90LT5wY2lfYnVzLT5zZWxmLT5kZXYsCiAJCQkicmVtb3ZlIGZhaWxlZCB3aXRoIGVycm9yICVkIHN1Yi1lcnJvciAlZFxuIiwKIAkJCXJjLCByZXNwLnJlc3Bfc3ViX2Vycm5vKTsKIAkJcmV0dXJuIC1FSU87CkBAIC0zMTcsMTIgKzMxNywxMiBAQAogCWlmICgoYWN0aW9uID09IFBDSV9SRVFfU0xPVF9ESVNBQkxFKSAmJiAhcmMpIHsKIAkJcGNpYnVzX2luZm8gPSBTTl9QQ0lCVVNfQlVTU09GVF9JTkZPKHNsb3QtPnBjaV9idXMpOwogCQlwY2lidXNfaW5mby0+cGJpX2VuYWJsZWRfZGV2aWNlcyAmPSB+KDEgPDwgZGV2aWNlX251bSk7Ci0JCWRldl9kYmcoc2xvdC0+cGNpX2J1cy0+c2VsZiwgInJlbW92ZSBzdWNjZXNzZnVsXG4iKTsKKwkJZGV2X2RiZygmc2xvdC0+cGNpX2J1cy0+c2VsZi0+ZGV2LCAicmVtb3ZlIHN1Y2Nlc3NmdWxcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoKGFjdGlvbiA9PSBQQ0lfUkVRX1NMT1RfRElTQUJMRSkgJiYgcmMpIHsKLQkJZGV2X2RiZyhzbG90LT5wY2lfYnVzLT5zZWxmLCJyZW1vdmUgZmFpbGVkIHJjID0gJWRcbiIsIHJjKTsKKwkJZGV2X2RiZygmc2xvdC0+cGNpX2J1cy0+c2VsZi0+ZGV2LCJyZW1vdmUgZmFpbGVkIHJjID0gJWRcbiIsIHJjKTsKIAl9CiAKIAlyZXR1cm4gcmM7CkBAIC0zNzUsNyArMzc1LDcgQEAKIAludW1fZnVuY3MgPSBwY2lfc2Nhbl9zbG90KHNsb3QtPnBjaV9idXMsCiAJCQkJICBQQ0lfREVWRk4oc2xvdC0+ZGV2aWNlX251bSArIDEsIDApKTsKIAlpZiAoIW51bV9mdW5jcykgewotCQlkZXZfZGJnKHNsb3QtPnBjaV9idXMtPnNlbGYsICJubyBkZXZpY2UgaW4gc2xvdFxuIik7CisJCWRldl9kYmcoJnNsb3QtPnBjaV9idXMtPnNlbGYtPmRldiwgIm5vIGRldmljZSBpbiBzbG90XG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZzbl9ob3RwbHVnX211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNDI3LDcgKzQyNyw3IEBACiAJCXBoYW5kbGUgPSBQQ0lfQ09OVFJPTExFUihzbG90LT5wY2lfYnVzKS0+YWNwaV9oYW5kbGU7CiAKIAkJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2UocGhhbmRsZSwgJnBkZXZpY2UpKSB7Ci0JCQlkZXZfZGJnKHNsb3QtPnBjaV9idXMtPnNlbGYsCisJCQlkZXZfZGJnKCZzbG90LT5wY2lfYnVzLT5zZWxmLT5kZXYsCiAJCQkJIm5vIHBhcmVudCBkZXZpY2UsIGFzc3VtaW5nIE5VTExcbiIpOwogCQkJcGRldmljZSA9IE5VTEw7CiAJCX0KQEAgLTQ3OSwxMCArNDc5LDEwIEBACiAJbXV0ZXhfdW5sb2NrKCZzbl9ob3RwbHVnX211dGV4KTsKIAogCWlmIChyYyA9PSAwKQotCQlkZXZfZGJnKHNsb3QtPnBjaV9idXMtPnNlbGYsCisJCWRldl9kYmcoJnNsb3QtPnBjaV9idXMtPnNlbGYtPmRldiwKIAkJCSJpbnNlcnQgb3BlcmF0aW9uIHN1Y2Nlc3NmdWxcbiIpOwogCWVsc2UKLQkJZGV2X2RiZyhzbG90LT5wY2lfYnVzLT5zZWxmLAorCQlkZXZfZGJnKCZzbG90LT5wY2lfYnVzLT5zZWxmLT5kZXYsCiAJCQkiaW5zZXJ0IG9wZXJhdGlvbiBmYWlsZWQgcmMgPSAlZFxuIiwgcmMpOwogCiAJcmV0dXJuIHJjOwpAQCAtNjU5LDE2ICs2NTksMTYgQEAKIAkJaWYgKHJjKQogCQkJZ290byByZWdpc3Rlcl9lcnI7CiAJfQotCWRldl9kYmcocGNpX2J1cy0+c2VsZiwgIlJlZ2lzdGVyZWQgYnVzIHdpdGggaG90cGx1Z1xuIik7CisJZGV2X2RiZygmcGNpX2J1cy0+c2VsZi0+ZGV2LCAiUmVnaXN0ZXJlZCBidXMgd2l0aCBob3RwbHVnXG4iKTsKIAlyZXR1cm4gcmM7CiAKIHJlZ2lzdGVyX2VycjoKLQlkZXZfZGJnKHBjaV9idXMtPnNlbGYsICJidXMgZmFpbGVkIHRvIHJlZ2lzdGVyIHdpdGggZXJyID0gJWRcbiIsCisJZGV2X2RiZygmcGNpX2J1cy0+c2VsZi0+ZGV2LCAiYnVzIGZhaWxlZCB0byByZWdpc3RlciB3aXRoIGVyciA9ICVkXG4iLAogCSAgICAgICAgcmMpOwogCiBhbGxvY19lcnI6CiAJaWYgKHJjID09IC1FTk9NRU0pCi0JCWRldl9kYmcocGNpX2J1cy0+c2VsZiwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKwkJZGV2X2RiZygmcGNpX2J1cy0+c2VsZi0+ZGV2LCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwogCiAJLyogZGVzdHJveSBUSElTIGVsZW1lbnQgKi8KIAlpZiAoYnNzX2hvdHBsdWdfc2xvdCkKQEAgLTcwMSwxMCArNzAxLDEwIEBACiAKIAkJcmMgPSBzbl9wY2lfYnVzX3ZhbGlkKHBjaV9idXMpOwogCQlpZiAocmMgIT0gMSkgewotCQkJZGV2X2RiZyhwY2lfYnVzLT5zZWxmLCAibm90IGEgdmFsaWQgaG90cGx1ZyBidXNcbiIpOworCQkJZGV2X2RiZygmcGNpX2J1cy0+c2VsZi0+ZGV2LCAibm90IGEgdmFsaWQgaG90cGx1ZyBidXNcbiIpOwogCQkJY29udGludWU7CiAJCX0KLQkJZGV2X2RiZyhwY2lfYnVzLT5zZWxmLCAidmFsaWQgaG90cGx1ZyBidXNcbiIpOworCQlkZXZfZGJnKCZwY2lfYnVzLT5zZWxmLT5kZXYsICJ2YWxpZCBob3RwbHVnIGJ1c1xuIik7CiAKIAkJcmMgPSBzbl9ob3RwbHVnX3Nsb3RfcmVnaXN0ZXIocGNpX2J1cyk7CiAJCWlmICghcmMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYwppbmRleCAyYzk0ZDQ0Li5kMmZjMzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgIi4uL3BjaS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbXNpLmMgYi9kcml2ZXJzL3BjaS9tc2kuYwppbmRleCA5ZTEzMjFkLi5iZTFkZjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9tc2kuYworKysgYi9kcml2ZXJzL3BjaS9tc2kuYwpAQCAtMTIsMTQgKzEyLDEzIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgogCiAjaW5jbHVkZSAicGNpLmgiCiAjaW5jbHVkZSAibXNpLmgiCkBAIC0zMzQsNyArMzMzLDcgQEAKIAkJCW1zaV9tYXNrX2JpdHNfcmVnKHBvcywgaXNfNjRiaXRfYWRkcmVzcyhjb250cm9sKSksCiAJCQltYXNrYml0cyk7CiAJfQotCWxpc3RfYWRkKCZlbnRyeS0+bGlzdCwgJmRldi0+bXNpX2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmZGV2LT5tc2lfbGlzdCk7CiAKIAkvKiBDb25maWd1cmUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlICovCiAJcmV0ID0gYXJjaF9zZXR1cF9tc2lfaXJxcyhkZXYsIDEsIFBDSV9DQVBfSURfTVNJKTsKQEAgLTQwNSw3ICs0MDQsNyBAQAogCQllbnRyeS0+ZGV2ID0gZGV2OwogCQllbnRyeS0+bWFza19iYXNlID0gYmFzZTsKIAotCQlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZkZXYtPm1zaV9saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZkZXYtPm1zaV9saXN0KTsKIAl9CiAKIAlyZXQgPSBhcmNoX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgUENJX0NBUF9JRF9NU0lYKTsKQEAgLTU1MCwxOSArNTQ5LDIxIEBACiB7CiAJc3RydWN0IG1zaV9kZXNjICplbnRyeSwgKnRtcDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KQotCQlCVUdfT04oaXJxX2hhc19hY3Rpb24oZW50cnktPmlycSkpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJCWlmIChlbnRyeS0+aXJxKQorCQkJQlVHX09OKGlycV9oYXNfYWN0aW9uKGVudHJ5LT5pcnEpKTsKKwl9CiAKIAlhcmNoX3RlYXJkb3duX21zaV9pcnFzKGRldik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKIAkJaWYgKGVudHJ5LT5tc2lfYXR0cmliLnR5cGUgPT0gUENJX0NBUF9JRF9NU0lYKSB7Ci0JCQlpZiAobGlzdF9pc19sYXN0KCZlbnRyeS0+bGlzdCwgJmRldi0+bXNpX2xpc3QpKQotCQkJCWlvdW5tYXAoZW50cnktPm1hc2tfYmFzZSk7Ci0KIAkJCXdyaXRlbCgxLCBlbnRyeS0+bWFza19iYXNlICsgZW50cnktPm1zaV9hdHRyaWIuZW50cnlfbnIKIAkJCQkgICogUENJX01TSVhfRU5UUllfU0laRQogCQkJCSAgKyBQQ0lfTVNJWF9FTlRSWV9WRUNUT1JfQ1RSTF9PRkZTRVQpOworCisJCQlpZiAobGlzdF9pc19sYXN0KCZlbnRyeS0+bGlzdCwgJmRldi0+bXNpX2xpc3QpKQorCQkJCWlvdW5tYXAoZW50cnktPm1hc2tfYmFzZSk7CiAJCX0KIAkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKIAkJa2ZyZWUoZW50cnkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IDNiYjc3MzkuLjhlNThlYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTExOSw3ICsxMTksNyBAQAogICogc3lzdGVtIGlzIGluIGl0cyBsaXN0IG9mIHN1cHBvcnRlZCBkZXZpY2VzLiAgUmV0dXJucyB0aGUgbWF0Y2hpbmcKICAqIHBjaV9kZXZpY2VfaWQgc3RydWN0dXJlIG9yICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLgogICoKLSAqIERlcHJlY2lhdGVkLCBkb24ndCB1c2UgdGhpcyBhcyBpdCB3aWxsIG5vdCBjYXRjaCBhbnkgZHluYW1pYyBpZHMKKyAqIERlcHJlY2F0ZWQsIGRvbid0IHVzZSB0aGlzIGFzIGl0IHdpbGwgbm90IGNhdGNoIGFueSBkeW5hbWljIGlkcwogICogdGhhdCBhIGRyaXZlciBtaWdodCB3YW50IHRvIGNoZWNrIGZvci4KICAqLwogY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9pZChjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmggYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuaAppbmRleCBiZjY1NWRiLi41Y2NhMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuaAorKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuaApAQCAtOCw2ICs4LDcgQEAKICNpZm5kZWYgX0FFUkRSVl9IXwogI2RlZmluZSBfQUVSRFJWX0hfCiAKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2llcG9ydF9pZi5oPgogI2luY2x1ZGUgPGxpbnV4L2Flci5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9jLmMgYi9kcml2ZXJzL3BjaS9wcm9jLmMKaW5kZXggZWQ4N2FhNS4uMDQyNWE3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYy5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2MuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggMTQ3ZDg2Zi4uMDFkOGY4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTg3NSw2ICs4NzUsNyBAQAogCX0KIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NBVEEsIHF1aXJrX3NiNjAwX3NhdGEpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfU0FUQSwgcXVpcmtfc2I2MDBfc2F0YSk7CiAKIC8qCiAgKglTZXJ2ZXJ3b3JrcyBDU0I1IElERSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IG5hdGl2ZSBtb2RlCkBAIC0xNjI0LDE4ICsxNjI1LDIyIEBACiAJCQlxdWlya19udmlkaWFfY2s4MDRfcGNpZV9hZXJfZXh0X2NhcCk7CiAKICNpZmRlZiBDT05GSUdfUENJX01TSQotLyogVGhlIFNlcnZlcndvcmtzIFBDSS1YIGNoaXBzZXQgZG9lcyBub3Qgc3VwcG9ydCBNU0kuIFdlIGNhbm5vdCBlYXNpbHkgcmVseQotICogb24gc2V0dGluZyBQQ0lfQlVTX0ZMQUdTX05PX01TSSBpbiBpdHMgYnVzIGZsYWdzIGJlY2F1c2UgdGhlcmUgYXJlIGFjdHVhbGx5Ci0gKiBzb21lIG90aGVyIGJ1c3NlcyBjb250cm9sbGVkIGJ5IHRoZSBjaGlwc2V0IGV2ZW4gaWYgTGludXggaXMgbm90IGF3YXJlIG9mIGl0LgotICogSW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBmbGFnIG9uIGFsbCBidXNzZXMgaW4gdGhlIG1hY2hpbmUsIHNpbXBseSBkaXNhYmxlIE1TSQotICogZ2xvYmFsbHkuCisvKiBTb21lIGNoaXBzZXRzIGRvIG5vdCBzdXBwb3J0IE1TSS4gV2UgY2Fubm90IGVhc2lseSByZWx5IG9uIHNldHRpbmcKKyAqIFBDSV9CVVNfRkxBR1NfTk9fTVNJIGluIGl0cyBidXMgZmxhZ3MgYmVjYXVzZSB0aGVyZSBhcmUgYWN0dWFsbHkKKyAqIHNvbWUgb3RoZXIgYnVzc2VzIGNvbnRyb2xsZWQgYnkgdGhlIGNoaXBzZXQgZXZlbiBpZiBMaW51eCBpcyBub3QKKyAqIGF3YXJlIG9mIGl0LiAgSW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBmbGFnIG9uIGFsbCBidXNzZXMgaW4gdGhlCisgKiBtYWNoaW5lLCBzaW1wbHkgZGlzYWJsZSBNU0kgZ2xvYmFsbHkuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBxdWlya19zdndfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfZGlzYWJsZV9hbGxfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJcGNpX25vX21zaSgpOwogCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogTVNJIHF1aXJrIGRldGVjdGVkLiBNU0kgZGVhY3RpdmF0ZWQuXG4iKTsKIH0KLURFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfR0NOQl9MRSwgcXVpcmtfc3Z3X21zaSk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLCBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0dDTkJfTEUsIHF1aXJrX2Rpc2FibGVfYWxsX21zaSk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLCBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMTAwMF9QQ0lYLCBxdWlya19kaXNhYmxlX2FsbF9tc2kpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX1JTNDAwXzIwMCwgcXVpcmtfZGlzYWJsZV9hbGxfbXNpKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9SUzQ4MCwgcXVpcmtfZGlzYWJsZV9hbGxfbXNpKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzNTEsIHF1aXJrX2Rpc2FibGVfYWxsX21zaSk7CiAKIC8qIERpc2FibGUgTVNJIG9uIGNoaXBzZXRzIHRoYXQgYXJlIGtub3duIHRvIG5vdCBzdXBwb3J0IGl0ICovCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfZGlzYWJsZV9tc2koc3RydWN0IHBjaV9kZXYgKmRldikKQEAgLTE2NDgsOCArMTY1Myw2IEBACiAJfQogfQogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQlJJREdFLCBxdWlya19kaXNhYmxlX21zaSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUlM0MDBfMjAwLCBxdWlya19kaXNhYmxlX21zaSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfUlM0ODAsIHF1aXJrX2Rpc2FibGVfbXNpKTsKIAogLyogR28gdGhyb3VnaCB0aGUgbGlzdCBvZiBIeXBlcnRyYW5zcG9ydCBjYXBhYmlsaXRpZXMgYW5kCiAgKiByZXR1cm4gMSBpZiBhIEhUIE1TSSBjYXBhYmlsaXR5IGlzIGZvdW5kIGFuZCBlbmFibGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZWFyY2guYyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jCmluZGV4IGIxMzdhMjcuLmMxMzIzMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jCisrKyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jCkBAIC00MDMsMTAgKzQwMywxMSBAQAogCXdoaWxlIChpZHMtPnZlbmRvciB8fCBpZHMtPnN1YnZlbmRvciB8fCBpZHMtPmNsYXNzX21hc2spIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZwY2lfZGV2aWNlcywgZ2xvYmFsX2xpc3QpIHsKIAkJCWlmICgoZm91bmQgPSBwY2lfbWF0Y2hfb25lX2RldmljZShpZHMsIGRldikpICE9IE5VTEwpCi0JCQkJYnJlYWs7CisJCQkJZ290byBleGl0OwogCQl9CiAJCWlkcysrOwogCX0KK2V4aXQ6CiAJdXBfcmVhZCgmcGNpX2J1c19zZW0pOwogCXJldHVybiBmb3VuZDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwppbmRleCA5NDhlZmM3Li5lYjZhYmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCkBAIC0zMzYsMTYgKzMzNiwyMSBAQAogCQllbmFibGVfaXJxX3dha2UoYm9hcmQtPmRldF9waW4pOwogCQlpZiAoYm9hcmQtPmlycV9waW4pCiAJCQllbmFibGVfaXJxX3dha2UoYm9hcmQtPmlycV9waW4pOwotCX0gZWxzZSB7Ci0JCWRpc2FibGVfaXJxX3dha2UoYm9hcmQtPmRldF9waW4pOwotCQlpZiAoYm9hcmQtPmlycV9waW4pCi0JCQlkaXNhYmxlX2lycV93YWtlKGJvYXJkLT5pcnFfcGluKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYXQ5MV9jZl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0OTFfY2ZfZGF0YQkqYm9hcmQgPSBjZi0+Ym9hcmQ7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKKwkJZGlzYWJsZV9pcnFfd2FrZShib2FyZC0+ZGV0X3Bpbik7CisJCWlmIChib2FyZC0+aXJxX3BpbikKKwkJCWRpc2FibGVfaXJxX3dha2UoYm9hcmQtPmlycV9waW4pOworCX0KKwogCXBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmcGRldi0+ZGV2KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9tYWluc3RvbmUuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9tYWluc3RvbmUuYwppbmRleCBmZGEwNjk0Li4zODMxMDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbWFpbnN0b25lLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X21haW5zdG9uZS5jCkBAIC0xNzUsNiArMTc1LDcgQEAKIAlpZiAoIW1zdF9wY21jaWFfZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCW1zdF9wY21jaWFfZGV2aWNlLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKIAltc3RfcGNtY2lhX2RldmljZS0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmbXN0X3BjbWNpYV9vcHM7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG1zdF9wY21jaWFfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zaGFycHNsLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfc2hhcnBzbC5jCmluZGV4IGI3YjllMTQuLmEyZGFhM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zaGFycHNsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3NoYXJwc2wuYwpAQCAtMjYxLDYgKzI2MSw3IEBACiAJaWYgKCFzaGFycHNsX3BjbWNpYV9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwogCisJc2hhcnBzbF9wY21jaWFfZGV2aWNlLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKIAlzaGFycHNsX3BjbWNpYV9kZXZpY2UtPmRldi5wbGF0Zm9ybV9kYXRhID0gJnNoYXJwc2xfcGNtY2lhX29wczsKIAlzaGFycHNsX3BjbWNpYV9kZXZpY2UtPmRldi5wYXJlbnQgPSBwbGF0Zm9ybV9zY29vcF9jb25maWctPmRldnNbMF0uZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9LY29uZmlnIGIvZHJpdmVycy9wbnAvS2NvbmZpZwppbmRleCBjNTE0MzIwLi4xOTU5Y2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcG5wL0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAjCiAKIG1lbnUgIlBsdWcgYW5kIFBsYXkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhBU19JT01FTQogCiBjb25maWcgUE5QCiAJYm9vbCAiUGx1ZyBhbmQgUGxheSBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvY29yZS5jIGIvZHJpdmVycy9wbnAvY29yZS5jCmluZGV4IGFlYzgzZWMuLjNlMjBiMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9jb3JlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSAiYmFzZS5oIgogCkBAIC0yMiw2ICsyMywxNCBAQAogTElTVF9IRUFEKHBucF9nbG9iYWwpOwogREVGSU5FX1NQSU5MT0NLKHBucF9sb2NrKTsKIAorLyoKKyAqIEFDUEkgb3IgUE5QQklPUyBzaG91bGQgdGVsbCB1cyBhYm91dCBhbGwgcGxhdGZvcm0gZGV2aWNlcywgc28gd2UgY2FuCisgKiBza2lwIHNvbWUgYmxpbmQgcHJvYmVzLiAgSVNBUE5QIHR5cGljYWxseSBlbnVtZXJhdGVzIG9ubHkgcGx1Zy1pbiBJU0EKKyAqIGRldmljZXMsIG5vdCBidWlsdC1pbiB0aGluZ3MgbGlrZSBDT00gcG9ydHMuCisgKi8KK2ludCBwbnBfcGxhdGZvcm1fZGV2aWNlczsKK0VYUE9SVF9TWU1CT0wocG5wX3BsYXRmb3JtX2RldmljZXMpOworCiB2b2lkICpwbnBfYWxsb2MobG9uZyBzaXplKQogewogCXZvaWQgKnJlc3VsdDsKQEAgLTExNCw2ICsxMjMsOCBAQAogCWludCByZXQ7CiAJcG5wX2ZpeHVwX2RldmljZShkZXYpOwogCWRldi0+ZGV2LmJ1cyA9ICZwbnBfYnVzX3R5cGU7CisJZGV2LT5kZXYuZG1hX21hc2sgPSAmZGV2LT5kbWFfbWFzazsKKwlkZXYtPmRtYV9tYXNrID0gZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfMjRCSVRfTUFTSzsKIAlkZXYtPmRldi5yZWxlYXNlID0gJnBucF9yZWxlYXNlX2RldmljZTsKIAlkZXYtPnN0YXR1cyA9IFBOUF9SRUFEWTsKIAlzcGluX2xvY2soJnBucF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKaW5kZXggNjJlZGE1ZC4uYTAwNTQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0IE1hdHRoaWV1IENhc3RldCA8Y2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnI+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgTGkgU2hhb2h1YSA8c2hhb2h1YS5saUBpbnRlbC5jb20+Ci0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CkBAIC0xOCw3ICsxOCw3IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCi0gCisKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgpAQCAtODIsNyArODIsNyBAQAogc3RhdGljIGludCBwbnBhY3BpX2dldF9yZXNvdXJjZXMoc3RydWN0IHBucF9kZXYgKiBkZXYsIHN0cnVjdCBwbnBfcmVzb3VyY2VfdGFibGUgKiByZXMpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwotCXN0YXR1cyA9IHBucGFjcGlfcGFyc2VfYWxsb2NhdGVkX3Jlc291cmNlKChhY3BpX2hhbmRsZSlkZXYtPmRhdGEsIAorCXN0YXR1cyA9IHBucGFjcGlfcGFyc2VfYWxsb2NhdGVkX3Jlc291cmNlKChhY3BpX2hhbmRsZSlkZXYtPmRhdGEsCiAJCSZkZXYtPnJlcyk7CiAJcmV0dXJuIEFDUElfRkFJTFVSRShzdGF0dXMpID8gLUVOT0RFViA6IDA7CiB9CkBAIC0xMTIsOSArMTEyLDkgQEAKIHN0YXRpYyBpbnQgcG5wYWNwaV9kaXNhYmxlX3Jlc291cmNlcyhzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQkKKwogCS8qIGFjcGlfdW5yZWdpc3Rlcl9nc2kocG5wX2lycShkZXYsIDApKTsgKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdCgoYWNwaV9oYW5kbGUpZGV2LT5kYXRhLCAKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdCgoYWNwaV9oYW5kbGUpZGV2LT5kYXRhLAogCQkiX0RJUyIsIE5VTEwsIE5VTEwpOwogCXJldHVybiBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSA/IC1FTk9ERVYgOiAwOwogfQpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCXN0cm5jcHkoZGV2LT5uYW1lLCBhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwgc2l6ZW9mKGRldi0+bmFtZSkpOwogCiAJZGV2LT5udW1iZXIgPSBudW07Ci0JCisKIAkvKiBzZXQgdGhlIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgUG5QIGRldmljZSAqLwogCWRldl9pZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfaWQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldl9pZCkKQEAgLTE4NSwxNCArMTg1LDE0IEBACiAJfQogCiAJaWYoZGV2LT5jYXBhYmlsaXRpZXMgJiBQTlBfQ09ORklHVVJBQkxFKSB7Ci0JCXN0YXR1cyA9IHBucGFjcGlfcGFyc2VfcmVzb3VyY2Vfb3B0aW9uX2RhdGEoZGV2aWNlLT5oYW5kbGUsIAorCQlzdGF0dXMgPSBwbnBhY3BpX3BhcnNlX3Jlc291cmNlX29wdGlvbl9kYXRhKGRldmljZS0+aGFuZGxlLAogCQkJZGV2KTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpICYmIChzdGF0dXMgIT0gQUVfTk9UX0ZPVU5EKSkgewogCQkJcG5wX2VycigiUG5QQUNQSTogTUVUSE9EX05BTUVfX1BSUyBmYWlsdXJlIGZvciAlcyIsIGRldl9pZC0+aWQpOwogCQkJZ290byBlcnIxOwogCQl9CiAJfQotCQorCiAJLyogcGFyc2UgY29tcGF0aWJsZSBpZHMgKi8KIAlpZiAoZGV2aWNlLT5mbGFncy5jb21wYXRpYmxlX2lkcykgewogCQlzdHJ1Y3QgYWNwaV9jb21wYXRpYmxlX2lkX2xpc3QgKmNpZF9saXN0ID0gZGV2aWNlLT5wbnAuY2lkX2xpc3Q7CkBAIC0yMzYsNiArMjM2LDQyIEBACiAJcmV0dXJuIEFFX09LOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BucF9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKl9wbnApCit7CisJc3RydWN0IGFjcGlfZGV2aWNlCSphY3BpID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcG5wX2RldgkJKnBucCA9IF9wbnA7CisKKwkvKiB0cnVlIG1lYW5zIGl0IG1hdGNoZWQgKi8KKwlyZXR1cm4gYWNwaS0+ZmxhZ3MuaGFyZHdhcmVfaWQKKwkJJiYgIWFjcGlfZ2V0X3BoeXNpY2FsX2RldmljZShhY3BpLT5oYW5kbGUpCisJCSYmIGNvbXBhcmVfcG5wX2lkKHBucC0+aWQsIGFjcGktPnBucC5oYXJkd2FyZV9pZCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfcG5wX2ZpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgYWNwaV9oYW5kbGUgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlCQkqYWRldjsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UJKmFjcGk7CisKKwlhZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZhY3BpX2J1c190eXBlLCBOVUxMLAorCQkJdG9fcG5wX2RldihkZXYpLAorCQkJYWNwaV9wbnBfbWF0Y2gpOworCWlmICghYWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlhY3BpID0gdG9fYWNwaV9kZXZpY2UoYWRldik7CisJKmhhbmRsZSA9IGFjcGktPmhhbmRsZTsKKwlwdXRfZGV2aWNlKGFkZXYpOworCXJldHVybiAwOworfQorCisvKiBjb21wbGV0ZSBpbml0aWFsaXphdGlvbiBvZiBhIFBOUEFDUEkgZGV2aWNlIGluY2x1ZGVzIGhhdmluZworICogcG5wZGV2LT5kZXYuYXJjaGRhdGEuYWNwaV9oYW5kbGUgcG9pbnQgdG8gaXRzIEFDUEkgc2libGluZy4KKyAqLworc3RhdGljIHN0cnVjdCBhY3BpX2J1c190eXBlIF9faW5pdGRhdGEgYWNwaV9wbnBfYnVzID0geworCS5idXMgPSAmcG5wX2J1c190eXBlLAorCS5maW5kX2RldmljZSA9IGFjcGlfcG5wX2ZpbmRfZGV2aWNlLAorfTsKKwogaW50IHBucGFjcGlfZGlzYWJsZWQgX19pbml0ZGF0YTsKIHN0YXRpYyBpbnQgX19pbml0IHBucGFjcGlfaW5pdCh2b2lkKQogewpAQCAtMjQ1LDggKzI4MSwxMSBAQAogCX0KIAlwbnBfaW5mbygiUG5QIEFDUEkgaW5pdCIpOwogCXBucF9yZWdpc3Rlcl9wcm90b2NvbCgmcG5wYWNwaV9wcm90b2NvbCk7CisJcmVnaXN0ZXJfYWNwaV9idXNfdHlwZSgmYWNwaV9wbnBfYnVzKTsKIAlhY3BpX2dldF9kZXZpY2VzKE5VTEwsIHBucGFjcGlfYWRkX2RldmljZV9oYW5kbGVyLCBOVUxMLCBOVUxMKTsKIAlwbnBfaW5mbygiUG5QIEFDUEk6IGZvdW5kICVkIGRldmljZXMiLCBudW0pOworCXVucmVnaXN0ZXJfYWNwaV9idXNfdHlwZSgmYWNwaV9wbnBfYnVzKTsKKwlwbnBfcGxhdGZvcm1fZGV2aWNlcyA9IDE7CiAJcmV0dXJuIDA7CiB9CiBzdWJzeXNfaW5pdGNhbGwocG5wYWNwaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMKaW5kZXggOTU3MzhkYi4uM2EyMDFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgpAQCAtMTU5LDkgKzE2MCw3IEBACiB7CiAJc3RhdGljIHN0cnVjdCBwbnBfZG9ja2luZ19zdGF0aW9uX2luZm8gbm93OwogCWludCBkb2NrZWQgPSAtMSwgZCA9IDA7Ci0JZGFlbW9uaXplKCJrcG5wYmlvc2QiKTsKLQlhbGxvd19zaWduYWwoU0lHS0lMTCk7Ci0Jd2hpbGUoIXVubG9hZGluZyAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJd2hpbGUgKCF1bmxvYWRpbmcpCiAJewogCQlpbnQgc3RhdHVzOwogCQkKQEAgLTE3MCwxMSArMTY5LDggQEAKIAkJICovCiAJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDIwMDApOwogCi0JCWlmKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlpZiAodHJ5X3RvX2ZyZWV6ZSgpKQotCQkJCWNvbnRpbnVlOwotCQkJYnJlYWs7Ci0JCX0KKwkJaWYgKHRyeV90b19mcmVlemUoKSkKKwkJCWNvbnRpbnVlOwogCiAJCXN0YXR1cyA9IHBucF9iaW9zX2RvY2tfc3RhdGlvbl9pbmZvKCZub3cpOwogCkBAIC01NzQsNiArNTcwLDcgQEAKIAkvKiBzY2FuIGZvciBwbnBiaW9zIGRldmljZXMgKi8KIAlidWlsZF9kZXZsaXN0KCk7CiAKKwlwbnBfcGxhdGZvcm1fZGV2aWNlcyA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4MSw2ICs1NzgsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwbnBiaW9zX3RocmVhZF9pbml0KHZvaWQpCiB7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChQTlBCSU9TX0JBU0UpKQogCQlyZXR1cm4gMDsKQEAgLTU4OSw3ICs1ODcsOCBAQAogCQlyZXR1cm4gMDsKICNpZmRlZiBDT05GSUdfSE9UUExVRwogCWluaXRfY29tcGxldGlvbigmdW5sb2FkX3NlbSk7Ci0JaWYgKGtlcm5lbF90aHJlYWQocG5wX2RvY2tfdGhyZWFkLCBOVUxMLCBDTE9ORV9LRVJORUwpID4gMCkKKwl0YXNrID0ga3RocmVhZF9ydW4ocG5wX2RvY2tfdGhyZWFkLCBOVUxMLCAia3BucGJpb3NkIik7CisJaWYgKCFJU19FUlIodGFzaykpCiAJCXVubG9hZGluZyA9IDA7CiAjZW5kaWYKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3F1aXJrcy5jIGIvZHJpdmVycy9wbnAvcXVpcmtzLmMKaW5kZXggZTk3ZWNlZi4uMjc3ZGY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wbnAvcXVpcmtzLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlICJiYXNlLmgiCiAKIApAQCAtMTA2LDYgKzEwNywzNCBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIHZvaWQgcXVpcmtfc21jX2VuYWJsZShzdHJ1Y3QgcG5wX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGludCBmaXJiYXNlOworCisJaWYgKCFkZXYtPmFjdGl2ZSB8fCAhcG5wX3BvcnRfdmFsaWQoZGV2LCAxKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBPbiB0aGUgSFAvQ29tcGFxIG53ODI0MCAoYW5kIHByb2JhYmx5IG90aGVyIHNpbWlsYXIgbWFjaGluZXMpLAorCSAqIHRoZXJlIGlzIGFuIFNNQ0YwMTAgZGV2aWNlIHdpdGggdHdvIEkvTyBwb3J0IHJlZ2lvbnM6CisJICoKKwkgKgkweDNlOC0weDNlZiBTSVIKKwkgKgkweDEwMC0weDEwZiBGSVIKKwkgKgorCSAqIF9TVEEgcmVwb3J0cyB0aGUgZGV2aWNlIGlzIGVuYWJsZWQsIGJ1dCBpbiBmYWN0LCB0aGUgQklPUworCSAqIG5lZ2xlY3RzIHRvIGVuYWJsZSB0aGUgRklSIHJhbmdlLiAgRm9ydHVuYXRlbHksIGl0IGRvZXMgZnVsbHkKKwkgKiBlbmFibGUgdGhlIGRldmljZSBpZiB3ZSBjYWxsIF9TUlMuCisJICovCisJZmlyYmFzZSA9IHBucF9wb3J0X3N0YXJ0KGRldiwgMSk7CisJaWYgKGluYihmaXJiYXNlICsgMHg3IC8qIElSQ0NfTUFTVEVSICovKSA9PSAweGZmKSB7CisJCXBucF9lcnIoIiVzICglcykgZW5hYmxlZCBidXQgbm90IHJlc3BvbmRpbmcsIGRpc2FibGluZyBhbmQgIgorCQkJInJlLWVuYWJsaW5nIiwgZGV2LT5kZXYuYnVzX2lkLCBwbnBfZGV2X25hbWUoZGV2KSk7CisJCXBucF9kaXNhYmxlX2RldihkZXYpOworCQlwbnBfYWN0aXZhdGVfZGV2KGRldik7CisJfQorfQorCisKIC8qCiAgKiAgUG5QIFF1aXJrcwogICogIENhcmRzIG9yIGRldmljZXMgdGhhdCBuZWVkIHNvbWUgdHdlYWtpbmcgZHVlIHRvIGluY29tcGxldGUgcmVzb3VyY2UgaW5mbwpAQCAtMTI2LDYgKzE1NSw3IEBACiAJeyAiQ1RMMDA0MyIsIHF1aXJrX3NiMTZhdWRpb19yZXNvdXJjZXMgfSwKIAl7ICJDVEwwMDQ0IiwgcXVpcmtfc2IxNmF1ZGlvX3Jlc291cmNlcyB9LAogCXsgIkNUTDAwNDUiLCBxdWlya19zYjE2YXVkaW9fcmVzb3VyY2VzIH0sCisJeyAiU01DZjAxMCIsIHF1aXJrX3NtY19lbmFibGUgfSwKIAl7ICIiIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL3Z1YXJ0LmMgYi9kcml2ZXJzL3BzMy92dWFydC5jCmluZGV4IDdkN2NhYjEuLmVjMmQzNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHMzL3Z1YXJ0LmMKKysrIGIvZHJpdmVycy9wczMvdnVhcnQuYwpAQCAtODg2LDEyICs4ODYsMTIgQEAKIAogCWlmICgrK3Z1YXJ0X2J1c19wcml2LnVzZV9jb3VudCA9PSAxKSB7CiAKLQkJcmVzdWx0ID0gcHMzX2FsbG9jX3Z1YXJ0X2lycShQUzNfQklORElOR19DUFVfQU5ZLAorCQlyZXN1bHQgPSBwczNfdnVhcnRfaXJxX3NldHVwKFBTM19CSU5ESU5HX0NQVV9BTlksCiAJCQkodm9pZCopJnZ1YXJ0X2J1c19wcml2LmJtcC5zdGF0dXMsICZ2dWFydF9idXNfcHJpdi52aXJxKTsKIAogCQlpZiAocmVzdWx0KSB7CiAJCQlkZXZfZGJnKCZkZXYtPmNvcmUsCi0JCQkJIiVzOiVkOiBwczNfYWxsb2NfdnVhcnRfaXJxIGZhaWxlZCAoJWQpXG4iLAorCQkJCSIlczolZDogcHMzX3Z1YXJ0X2lycV9zZXR1cCBmYWlsZWQgKCVkKVxuIiwKIAkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJlc3VsdCk7CiAJCQlyZXN1bHQgPSAtRVBFUk07CiAJCQlnb3RvIGZhaWxfYWxsb2NfaXJxOwpAQCAtOTM3LDcgKzkzNyw3IEBACiBmYWlsX3Byb2JlOgogCXBzM192dWFydF9zZXRfaW50ZXJydXB0X21hc2soZGV2LCAwKTsKIGZhaWxfcmVxdWVzdF9pcnE6Ci0JcHMzX2ZyZWVfdnVhcnRfaXJxKHZ1YXJ0X2J1c19wcml2LnZpcnEpOworCXBzM192dWFydF9pcnFfZGVzdHJveSh2dWFydF9idXNfcHJpdi52aXJxKTsKIAl2dWFydF9idXNfcHJpdi52aXJxID0gTk9fSVJROwogZmFpbF9hbGxvY19pcnE6CiAJLS12dWFydF9idXNfcHJpdi51c2VfY291bnQ7CkBAIC05NzUsNyArOTc1LDcgQEAKIAlpZiAoLS12dWFydF9idXNfcHJpdi51c2VfY291bnQgPT0gMCkgewogCQlCVUcoKTsKIAkJZnJlZV9pcnEodnVhcnRfYnVzX3ByaXYudmlycSwgJnZ1YXJ0X2J1c19wcml2KTsKLQkJcHMzX2ZyZWVfdnVhcnRfaXJxKHZ1YXJ0X2J1c19wcml2LnZpcnEpOworCQlwczNfdnVhcnRfaXJxX2Rlc3Ryb3kodnVhcnRfYnVzX3ByaXYudmlycSk7CiAJCXZ1YXJ0X2J1c19wcml2LnZpcnEgPSBOT19JUlE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCBlZjFlYWU5Li40ZTRjMTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAjCiAKIG1lbnUgIlJlYWwgVGltZSBDbG9jayIKKwlkZXBlbmRzIG9uICFTMzkwCiAKIGNvbmZpZyBSVENfTElCCiAJdHJpc3RhdGUKQEAgLTIxLDIxICsyMiwzMSBAQAogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWNsYXNzLgogCiBjb25maWcgUlRDX0hDVE9TWVMKLQlib29sICJTZXQgc3lzdGVtIHRpbWUgZnJvbSBSVEMgb24gc3RhcnR1cCIKKwlib29sICJTZXQgc3lzdGVtIHRpbWUgZnJvbSBSVEMgb24gc3RhcnR1cCBhbmQgcmVzdW1lIgogCWRlcGVuZHMgb24gUlRDX0NMQVNTID0geQogCWRlZmF1bHQgeQogCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUsIHRoZSBzeXN0ZW0gdGltZSB3aWxsIGJlIHNldCB1c2luZwotCSAgdGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUgc3BlY2lmaWVkIFJUQyBkZXZpY2UuIFRoaXMgaXMgdXNlZnVsCi0JICBpbiBvcmRlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSBmc2NrIHJ1bnMuCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlLCB0aGUgc3lzdGVtIHRpbWUgKHdhbGwgY2xvY2spIHdpbGwgYmUgc2V0IHVzaW5nCisJICB0aGUgdmFsdWUgcmVhZCBmcm9tIGEgc3BlY2lmaWVkIFJUQyBkZXZpY2UuIFRoaXMgaXMgdXNlZnVsIHRvIGF2b2lkCisJICB1bm5lY2Vzc2FyeSBmc2NrIHJ1bnMgYXQgYm9vdCB0aW1lLCBhbmQgdG8gbmV0d29yayBiZXR0ZXIuCiAKIGNvbmZpZyBSVENfSENUT1NZU19ERVZJQ0UKLQlzdHJpbmcgIlRoZSBSVEMgdG8gcmVhZCB0aGUgdGltZSBmcm9tIgorCXN0cmluZyAiUlRDIHVzZWQgdG8gc2V0IHRoZSBzeXN0ZW0gdGltZSIKIAlkZXBlbmRzIG9uIFJUQ19IQ1RPU1lTID0geQogCWRlZmF1bHQgInJ0YzAiCiAJaGVscAotCSAgVGhlIFJUQyBkZXZpY2UgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBmb3IKLQkgIHRoZSBzeXN0ZW0gdGltZSwgdXN1YWxseSBydGMwLgorCSAgVGhlIFJUQyBkZXZpY2UgdGhhdCB3aWxsIGJlIHVzZWQgdG8gKHJlKWluaXRpYWxpemUgdGhlIHN5c3RlbQorCSAgY2xvY2ssIHVzdWFsbHkgcnRjMC4gIEluaXRpYWxpemF0aW9uIGlzIGRvbmUgd2hlbiB0aGUgc3lzdGVtCisJICBzdGFydHMgdXAsIGFuZCB3aGVuIGl0IHJlc3VtZXMgZnJvbSBhIGxvdyBwb3dlciBzdGF0ZS4KKworCSAgVGhpcyBjbG9jayBzaG91bGQgYmUgYmF0dGVyeS1iYWNrZWQsIHNvIHRoYXQgaXQgcmVhZHMgdGhlIGNvcnJlY3QKKwkgIHRpbWUgd2hlbiB0aGUgc3lzdGVtIGJvb3RzIGZyb20gYSBwb3dlci1vZmYgc3RhdGUuICBPdGhlcndpc2UsIHlvdXIKKwkgIHN5c3RlbSB3aWxsIG5lZWQgYW4gZXh0ZXJuYWwgY2xvY2sgc291cmNlIChsaWtlIGFuIE5UUCBzZXJ2ZXIpLgorCisJICBJZiB0aGUgY2xvY2sgeW91IHNwZWNpZnkgaGVyZSBpcyBub3QgYmF0dGVyeSBiYWNrZWQsIGl0IG1heSBzdGlsbAorCSAgYmUgdXNlZnVsIHRvIHJlaW5pdGlhbGl6ZSBzeXN0ZW0gdGltZSB3aGVuIHJlc3VtaW5nIGZyb20gc3lzdGVtCisJICBzbGVlcCBzdGF0ZXMuICBEbyBub3Qgc3BlY2lmeSBhbiBSVEMgaGVyZSB1bmxlc3MgaXQgc3RheXMgcG93ZXJlZAorCSAgZHVyaW5nIGFsbCB0aGlzIHN5c3RlbSdzIHN1cHBvcnRlZCBzbGVlcCBzdGF0ZXMuCiAKIGNvbmZpZyBSVENfREVCVUcKIAlib29sICJSVEMgZGVidWcgc3VwcG9ydCIKQEAgLTQ4LDcgKzU5LDcgQEAKIAlkZXBlbmRzIG9uIFJUQ19DTEFTUwogCiBjb25maWcgUlRDX0lOVEZfU1lTRlMKLQl0cmlzdGF0ZSAic3lzZnMiCisJYm9vbGVhbiAiL3N5cy9jbGFzcy9ydGMvcnRjTiAoc3lzZnMpIgogCWRlcGVuZHMgb24gUlRDX0NMQVNTICYmIFNZU0ZTCiAJZGVmYXVsdCBSVENfQ0xBU1MKIAloZWxwCkBAIC01OSw3ICs3MCw3IEBACiAJICB3aWxsIGJlIGNhbGxlZCBydGMtc3lzZnMuCiAKIGNvbmZpZyBSVENfSU5URl9QUk9DCi0JdHJpc3RhdGUgInByb2MiCisJYm9vbGVhbiAiL3Byb2MvZHJpdmVyL3J0YyAocHJvY2ZzIGZvciBydGMwKSIKIAlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBQUk9DX0ZTCiAJZGVmYXVsdCBSVENfQ0xBU1MKIAloZWxwCkBAIC03MSw3ICs4Miw3IEBACiAJICB3aWxsIGJlIGNhbGxlZCBydGMtcHJvYy4KIAogY29uZmlnIFJUQ19JTlRGX0RFVgotCXRyaXN0YXRlICJkZXYiCisJYm9vbGVhbiAiL2Rldi9ydGNOIChjaGFyYWN0ZXIgZGV2aWNlcykiCiAJZGVwZW5kcyBvbiBSVENfQ0xBU1MKIAlkZWZhdWx0IFJUQ19DTEFTUwogCWhlbHAKQEAgLTg4LDQ4ICs5OSwzMCBAQAogCWJvb2wgIlJUQyBVSUUgZW11bGF0aW9uIG9uIGRldiBpbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBSVENfSU5URl9ERVYKIAloZWxwCi0JICBQcm92aWRlcyBhbiBlbXVsYXRpb24gZm9yIFJUQ19VSUUgaWYgdGhlIHVuZGVybGF5aW5nIHJ0YyBjaGlwCisJICBQcm92aWRlcyBhbiBlbXVsYXRpb24gZm9yIFJUQ19VSUUgaWYgdGhlIHVuZGVybHlpbmcgcnRjIGNoaXAKIAkgIGRyaXZlciBkb2VzIG5vdCBleHBvc2UgUlRDX1VJRSBpb2N0bHMuICBUaG9zZSByZXF1ZXN0cyBnZW5lcmF0ZQogCSAgb25jZS1wZXItc2Vjb25kIHVwZGF0ZSBpbnRlcnJ1cHRzLCB1c2VkIGZvciBzeW5jaHJvbml6YXRpb24uCiAKLWNvbW1lbnQgIlJUQyBkcml2ZXJzIgorY29uZmlnIFJUQ19EUlZfVEVTVAorCXRyaXN0YXRlICJUZXN0IGRyaXZlci9kZXZpY2UiCiAJZGVwZW5kcyBvbiBSVENfQ0xBU1MKLQotIyB0aGlzICdDTU9TJyBSVEMgZHJpdmVyIGlzIGFyY2ggZGVwZW5kZW50IGJlY2F1c2UgPGFzbS1nZW5lcmljL3J0Yy5oPgotIyByZXF1aXJlcyA8YXNtL21jMTQ2ODE4cnRjLmg+IGRlZmluaW5nIENNT1NfUkVBRC9DTU9TX1dSSVRFLCBhbmQgYQotIyBnbG9iYWwgcnRjX2xvY2sgLi4uIGl0J3Mgbm90IHlldCBqdXN0IGFub3RoZXIgcGxhdGZvcm1fZGV2aWNlLgotCi1jb25maWcgUlRDX0RSVl9DTU9TCi0JdHJpc3RhdGUgIlBDLXN0eWxlICdDTU9TJyByZWFsIHRpbWUgY2xvY2siCi0JZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgKFg4NiB8fCBBTFBIQSB8fCBBUk0yNiB8fCBBUk0gXAotCQl8fCBNMzJSIHx8IEFUQVJJIHx8IFBPV0VSUEMpCi0JaGVscAotCSAgU2F5ICJ5ZXMiIGhlcmUgdG8gZ2V0IGRpcmVjdCBzdXBwb3J0IGZvciB0aGUgcmVhbCB0aW1lIGNsb2NrCi0JICBmb3VuZCBpbiBldmVyeSBQQyBvciBBQ1BJLWJhc2VkIHN5c3RlbSwgYW5kIHNvbWUgb3RoZXIgYm9hcmRzLgotCSAgU3BlY2lmaWNhbGx5IHRoZSBvcmlnaW5hbCBNQzE0NjgxOCwgY29tcGF0aWJsZXMgbGlrZSB0aG9zZSBpbgotCSAgUEMgc291dGggYnJpZGdlcywgdGhlIERTMTI4ODcgb3IgTTQ4VDg2LCBzb21lIG11bHRpZnVuY3Rpb24KLQkgIG9yIExQQyBidXMgY2hpcHMsIGFuZCBzbyBvbi4KLQotCSAgWW91ciBzeXN0ZW0gd2lsbCBuZWVkIHRvIGRlZmluZSB0aGUgcGxhdGZvcm0gZGV2aWNlIHVzZWQgYnkKLQkgIHRoaXMgZHJpdmVyLCBvdGhlcndpc2UgaXQgd29uJ3QgYmUgYWNjZXNzaWJsZS4gIFRoaXMgbWVhbnMKLQkgIHlvdSBjYW4gc2FmZWx5IGVuYWJsZSB0aGlzIGRyaXZlciBpZiB5b3UgZG9uJ3Qga25vdyB3aGV0aGVyCi0JICBvciBub3QgeW91ciBib2FyZCBoYXMgdGhpcyBraW5kIG9mIGhhcmR3YXJlLgotCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1jbW9zLgotCi1jb25maWcgUlRDX0RSVl9YMTIwNQotCXRyaXN0YXRlICJYaWNvci9JbnRlcnNpbCBYMTIwNSIKLQlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlCi0JICBYaWNvci9JbnRlcnNpbCBYMTIwNSBSVEMgY2hpcC4KKwkgIFJUQyB0ZXN0IGRyaXZlci4gSXQncyBhIHNvZnR3YXJlIFJUQyB3aGljaCBjYW4gYmUKKwkgIHVzZWQgdG8gdGVzdCB0aGUgUlRDIHN1YnN5c3RlbSBBUElzLiBJdCBnZXRzCisJICB0aGUgdGltZSBmcm9tIHRoZSBzeXN0ZW0gY2xvY2suCisJICBZb3Ugd2FudCB0aGlzIGRyaXZlciBvbmx5IGlmIHlvdSBhcmUgZG9pbmcgZGV2ZWxvcG1lbnQKKwkgIG9uIHRoZSBSVEMgc3Vic3lzdGVtLiBQbGVhc2UgcmVhZCB0aGUgc291cmNlIGNvZGUKKwkgIGZvciBmdXJ0aGVyIGRldGFpbHMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXgxMjA1LgorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXRlc3QuCisKK2NvbW1lbnQgIkkyQyBSVEMgZHJpdmVycyIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUwogCiBjb25maWcgUlRDX0RSVl9EUzEzMDcKLQl0cmlzdGF0ZSAiRGFsbGFzL01heGltIERTMTMwNyBhbmQgc2ltaWxhciBJMkMgUlRDIGNoaXBzIgorCXRyaXN0YXRlICJEYWxsYXMvTWF4aW0gRFMxMzA3LzM3LzM4LzM5LzQwLCBTVCBNNDFUMDAiCiAJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHZhcmlvdXMgY29tcGF0aWJsZSBSVEMKQEAgLTE0NiwxNSArMTM5LDM1IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczEzMDcuCiAKLWNvbmZpZyBSVENfRFJWX0RTMTU1MwotCXRyaXN0YXRlICJEYWxsYXMgRFMxNTUzIgotCWRlcGVuZHMgb24gUlRDX0NMQVNTCitjb25maWcgUlRDX0RSVl9EUzE2NzIKKwl0cmlzdGF0ZSAiRGFsbGFzL01heGltIERTMTY3MiIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlCi0JICBEYWxsYXMgRFMxNTUzIHRpbWVrZWVwaW5nIGNoaXAuCisJICBEYWxsYXMvTWF4aW0gRFMxNjcyIHRpbWVrZWVwaW5nIGNoaXAuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWRzMTU1My4KKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczE2NzIuCisKK2NvbmZpZyBSVENfRFJWX01BWDY5MDAKKwl0cmlzdGF0ZSAiTWF4aW0gNjkwMCIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBJMkMKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUKKwkgIE1heGltIE1BWDY5MDAgSTJDIFJUQyBjaGlwLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1tYXg2OTAwLgorCitjb25maWcgUlRDX0RSVl9SUzVDMzcyCisJdHJpc3RhdGUgIlJpY29oIFJTNUMzNzJBL0IiCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgSTJDCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZQorCSAgUmljb2ggUlM1QzM3MkEgYW5kIFJTNUMzNzJCIFJUQyBjaGlwcy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtcnM1YzM3Mi4KIAogY29uZmlnIFJUQ19EUlZfSVNMMTIwOAogCXRyaXN0YXRlICJJbnRlcnNpbCAxMjA4IgpAQCAtMTY2LDMzICsxNzksMTUgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWlzbDEyMDguCiAKLWNvbmZpZyBSVENfRFJWX0RTMTY3MgotCXRyaXN0YXRlICJEYWxsYXMvTWF4aW0gRFMxNjcyIgorY29uZmlnIFJUQ19EUlZfWDEyMDUKKwl0cmlzdGF0ZSAiWGljb3IvSW50ZXJzaWwgWDEyMDUiCiAJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZQotCSAgRGFsbGFzL01heGltIERTMTY3MiB0aW1la2VlcGluZyBjaGlwLgorCSAgWGljb3IvSW50ZXJzaWwgWDEyMDUgUlRDIGNoaXAuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWRzMTY3Mi4KLQotY29uZmlnIFJUQ19EUlZfRFMxNzQyCi0JdHJpc3RhdGUgIkRhbGxhcyBEUzE3NDIvMTc0MyIKLQlkZXBlbmRzIG9uIFJUQ19DTEFTUwotCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUKLQkgIERhbGxhcyBEUzE3NDIvMTc0MyB0aW1la2VlcGluZyBjaGlwLgotCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczE3NDIuCi0KLWNvbmZpZyBSVENfRFJWX09NQVAKLQl0cmlzdGF0ZSAiVEkgT01BUDEiCi0JZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgKCBcCi0JCUFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzAgKQotCWhlbHAKLQkgIFNheSAieWVzIiBoZXJlIHRvIHN1cHBvcnQgdGhlIHJlYWwgdGltZSBjbG9jayBvbiBUSSBPTUFQMSBjaGlwcy4KLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIGNhbGxlZCBydGMtb21hcC4KKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy14MTIwNS4KIAogY29uZmlnIFJUQ19EUlZfUENGODU2MwogCXRyaXN0YXRlICJQaGlsaXBzIFBDRjg1NjMvRXBzb24gUlRDODU2NCIKQEAgLTIwNywxNiArMjAyLDIwIEBACiAKIGNvbmZpZyBSVENfRFJWX1BDRjg1ODMKIAl0cmlzdGF0ZSAiUGhpbGlwcyBQQ0Y4NTgzIgotCWRlcGVuZHMgb24gUlRDX0NMQVNTICYmIEkyQyAmJiBBUkNIX1JQQworCWRlcGVuZHMgb24gUlRDX0NMQVNTICYmIEkyQwogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBQQ0Y4NTgzCi0JICBSVEMgY2hpcCBmb3VuZCBvbiBBY29ybiBSaXNjUENzLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlCisJICBSVEMgY2hpcCBmb3VuZCBvbiBBY29ybiBSaXNjUENzLiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUKIAkgIHBsYXRmb3JtIHNwZWNpZmljIG1ldGhvZCBvZiByZXRyaWV2aW5nIHRoZSBjdXJyZW50IHllYXIgZnJvbQotCSAgdGhlIFJUQydzIFNSQU0uCisJICB0aGUgUlRDJ3MgU1JBTS4gSXQgd2lsbCB3b3JrIG9uIG90aGVyIHBsYXRmb3JtcyB3aXRoIHRoZSBzYW1lCisJICBjaGlwLCBidXQgdGhlIHllYXIgd2lsbCBwcm9iYWJseSBoYXZlIHRvIGJlIHR3ZWFrZWQuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXBjZjg1ODMuCiAKK2NvbW1lbnQgIlNQSSBSVEMgZHJpdmVycyIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUworCiBjb25maWcgUlRDX0RSVl9SUzVDMzQ4CiAJdHJpc3RhdGUgIlJpY29oIFJTNUMzNDhBL0IiCiAJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgU1BJCkBAIC0yMjcsMTUgKzIyNiw5MiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBydGMtcnM1YzM0OC4KIAotY29uZmlnIFJUQ19EUlZfUlM1QzM3MgotCXRyaXN0YXRlICJSaWNvaCBSUzVDMzcyQS9CIgotCWRlcGVuZHMgb24gUlRDX0NMQVNTICYmIEkyQworY29uZmlnIFJUQ19EUlZfTUFYNjkwMgorCXRyaXN0YXRlICJNYXhpbSA2OTAyIgorCWRlcGVuZHMgb24gUlRDX0NMQVNTICYmIFNQSQogCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUKLQkgIFJpY29oIFJTNUMzNzJBIGFuZCBSUzVDMzcyQiBSVEMgY2hpcHMuCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUKKwkgIE1heGltIE1BWDY5MDIgU1BJIFJUQyBjaGlwLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1yczVjMzcyLgorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLW1heDY5MDIuCisKK2NvbW1lbnQgIlBsYXRmb3JtIFJUQyBkcml2ZXJzIgorCWRlcGVuZHMgb24gUlRDX0NMQVNTCisKKyMgdGhpcyAnQ01PUycgUlRDIGRyaXZlciBpcyBhcmNoIGRlcGVuZGVudCBiZWNhdXNlIDxhc20tZ2VuZXJpYy9ydGMuaD4KKyMgcmVxdWlyZXMgPGFzbS9tYzE0NjgxOHJ0Yy5oPiBkZWZpbmluZyBDTU9TX1JFQUQvQ01PU19XUklURSwgYW5kIGEKKyMgZ2xvYmFsIHJ0Y19sb2NrIC4uLiBpdCdzIG5vdCB5ZXQganVzdCBhbm90aGVyIHBsYXRmb3JtX2RldmljZS4KKworY29uZmlnIFJUQ19EUlZfQ01PUworCXRyaXN0YXRlICJQQy1zdHlsZSAnQ01PUyciCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgKFg4NiB8fCBBTFBIQSB8fCBBUk0yNiB8fCBBUk0gXAorCQl8fCBNMzJSIHx8IEFUQVJJIHx8IFBPV0VSUEMgfHwgTUlQUykKKwloZWxwCisJICBTYXkgInllcyIgaGVyZSB0byBnZXQgZGlyZWN0IHN1cHBvcnQgZm9yIHRoZSByZWFsIHRpbWUgY2xvY2sKKwkgIGZvdW5kIGluIGV2ZXJ5IFBDIG9yIEFDUEktYmFzZWQgc3lzdGVtLCBhbmQgc29tZSBvdGhlciBib2FyZHMuCisJICBTcGVjaWZpY2FsbHkgdGhlIG9yaWdpbmFsIE1DMTQ2ODE4LCBjb21wYXRpYmxlcyBsaWtlIHRob3NlIGluCisJICBQQyBzb3V0aCBicmlkZ2VzLCB0aGUgRFMxMjg4NyBvciBNNDhUODYsIHNvbWUgbXVsdGlmdW5jdGlvbgorCSAgb3IgTFBDIGJ1cyBjaGlwcywgYW5kIHNvIG9uLgorCisJICBZb3VyIHN5c3RlbSB3aWxsIG5lZWQgdG8gZGVmaW5lIHRoZSBwbGF0Zm9ybSBkZXZpY2UgdXNlZCBieQorCSAgdGhpcyBkcml2ZXIsIG90aGVyd2lzZSBpdCB3b24ndCBiZSBhY2Nlc3NpYmxlLiAgVGhpcyBtZWFucworCSAgeW91IGNhbiBzYWZlbHkgZW5hYmxlIHRoaXMgZHJpdmVyIGlmIHlvdSBkb24ndCBrbm93IHdoZXRoZXIKKwkgIG9yIG5vdCB5b3VyIGJvYXJkIGhhcyB0aGlzIGtpbmQgb2YgaGFyZHdhcmUuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWNtb3MuCisKK2NvbmZpZyBSVENfRFJWX0RTMTU1MworCXRyaXN0YXRlICJEYWxsYXMgRFMxNTUzIgorCWRlcGVuZHMgb24gUlRDX0NMQVNTCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZQorCSAgRGFsbGFzIERTMTU1MyB0aW1la2VlcGluZyBjaGlwLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczE1NTMuCisKK2NvbmZpZyBSVENfRFJWX0RTMTc0MgorCXRyaXN0YXRlICJEYWxsYXMgRFMxNzQyLzE3NDMiCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlCisJICBEYWxsYXMgRFMxNzQyLzE3NDMgdGltZWtlZXBpbmcgY2hpcC4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtZHMxNzQyLgorCitjb25maWcgUlRDX0RSVl9NNDhUODYKKwl0cmlzdGF0ZSAiU1QgTTQ4VDg2L0RhbGxhcyBEUzEyODg3IgorCWRlcGVuZHMgb24gUlRDX0NMQVNTCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZQorCSAgU1QgTTQ4VDg2IGFuZCBEYWxsYXMgRFMxMjg4NyBSVEMgY2hpcHMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLW00OHQ4Ni4KKworY29uZmlnIFJUQ19EUlZfVjMwMjAKKwl0cmlzdGF0ZSAiRU0gTWljcm9lbGVjdHJvbmljIFYzMDIwIgorCWRlcGVuZHMgb24gUlRDX0NMQVNTCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlCisJICBFTSBNaWNyb2VsZWN0cm9uaWMgdjMwMjAgUlRDIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXYzMDIwLgorCitjb21tZW50ICJvbi1DUFUgUlRDIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MKKworY29uZmlnIFJUQ19EUlZfT01BUAorCXRyaXN0YXRlICJUSSBPTUFQMSIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiAoIFwKKwkJQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCApCisJaGVscAorCSAgU2F5ICJ5ZXMiIGhlcmUgdG8gc3VwcG9ydCB0aGUgcmVhbCB0aW1lIGNsb2NrIG9uIFRJIE9NQVAxIGNoaXBzLgorCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUgY2FsbGVkIHJ0Yy1vbWFwLgogCiBjb25maWcgUlRDX0RSVl9TM0MKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTM0Mgc2VyaWVzIFNvQyBSVEMiCkBAIC0yNTMsMTYgKzMyOSw2IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsZCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1zM2MuCiAKLWNvbmZpZyBSVENfRFJWX000OFQ4NgotCXRyaXN0YXRlICJTVCBNNDhUODYvRGFsbGFzIERTMTI4ODciCi0JZGVwZW5kcyBvbiBSVENfQ0xBU1MKLQloZWxwCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlCi0JICBTVCBNNDhUODYgYW5kIERhbGxhcyBEUzEyODg3IFJUQyBjaGlwcy4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBydGMtbTQ4dDg2LgotCiBjb25maWcgUlRDX0RSVl9FUDkzWFgKIAl0cmlzdGF0ZSAiQ2lycnVzIExvZ2ljIEVQOTNYWCIKIAlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBBUkNIX0VQOTNYWApAQCAtMzA4LDcgKzM3NCw3IEBACiAJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgQVJNX0FNQkEKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgYWNjZXNzIHRvIEFSTSBBTUJBCi0JICBQcmltZUNlbGwgUEwwMzEgVUFSVCBmb3VuZCBvbiBjZXJ0YWluIEFSTSBTT0NzLgorCSAgUHJpbWVDZWxsIFBMMDMxIFJUQyBmb3VuZCBvbiBjZXJ0YWluIEFSTSBTT0NzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGMtcGwwMzEuCkBAIC0zMTksNDEgKzM4NSw2IEBACiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgQXRtZWwgQVQ5MVJNOTIwMCdzIGludGVybmFsIFJUQyAoUmVhbHRpbWUgQ2xvY2spLgogCi1jb25maWcgUlRDX0RSVl9URVNUCi0JdHJpc3RhdGUgIlRlc3QgZHJpdmVyL2RldmljZSIKLQlkZXBlbmRzIG9uIFJUQ19DTEFTUwotCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUKLQkgIFJUQyB0ZXN0IGRyaXZlci4gSXQncyBhIHNvZnR3YXJlIFJUQyB3aGljaCBjYW4gYmUKLQkgIHVzZWQgdG8gdGVzdCB0aGUgUlRDIHN1YnN5c3RlbSBBUElzLiBJdCBnZXRzCi0JICB0aGUgdGltZSBmcm9tIHRoZSBzeXN0ZW0gY2xvY2suCi0JICBZb3Ugd2FudCB0aGlzIGRyaXZlciBvbmx5IGlmIHlvdSBhcmUgZG9pbmcgZGV2ZWxvcG1lbnQKLQkgIG9uIHRoZSBSVEMgc3Vic3lzdGVtLiBQbGVhc2UgcmVhZCB0aGUgc291cmNlIGNvZGUKLQkgIGZvciBmdXJ0aGVyIGRldGFpbHMuCi0KLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXRlc3QuCi0KLWNvbmZpZyBSVENfRFJWX01BWDY5MDIKLQl0cmlzdGF0ZSAiTWF4aW0gNjkwMiIKLQlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBTUEkKLQloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUKLQkgIE1heGltIE1BWDY5MDIgc3BpIFJUQyBjaGlwLgotCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1tYXg2OTAyLgotCi1jb25maWcgUlRDX0RSVl9WMzAyMAotCXRyaXN0YXRlICJFTSBNaWNyb2VsZWN0cm9uaWMgVjMwMjAiCi0JZGVwZW5kcyBvbiBSVENfQ0xBU1MKLQloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUKLQkgIEVNIE1pY3JvZWxlY3Ryb25pYyB2MzAyMCBSVEMgY2hpcC4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBydGMtdjMwMjAuCi0KIGNvbmZpZyBSVENfRFJWX0JGSU4KIAl0cmlzdGF0ZSAiQmxhY2tmaW4gT24tQ2hpcCBSVEMiCiAJZGVwZW5kcyBvbiBSVENfQ0xBU1MgJiYgQkZJTgpAQCAtMzY0LDQgKzM5NSwxMCBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBydGMtYmZpbi4KIAorY29uZmlnIFJUQ19EUlZfUlM1QzMxMworCXRyaXN0YXRlICJSaWNvaCBSUzVDMzEzIgorCWRlcGVuZHMgb24gUlRDX0NMQVNTICYmIFNIX0xBTkRJU0sKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFJpY29oIFJTNUMzMTMgUlRDIGNoaXBzLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IDkyMThjZjIuLmExYWZiYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC0xMSw5ICsxMSw5IEBACiBvYmotJChDT05GSUdfUlRDX0NMQVNTKQkJKz0gcnRjLWNvcmUubwogcnRjLWNvcmUteQkJCTo9IGNsYXNzLm8gaW50ZXJmYWNlLm8KIAotb2JqLSQoQ09ORklHX1JUQ19JTlRGX1NZU0ZTKQkrPSBydGMtc3lzZnMubwotb2JqLSQoQ09ORklHX1JUQ19JTlRGX1BST0MpCSs9IHJ0Yy1wcm9jLm8KLW9iai0kKENPTkZJR19SVENfSU5URl9ERVYpCSs9IHJ0Yy1kZXYubworcnRjLWNvcmUtJChDT05GSUdfUlRDX0lOVEZfREVWKQkrPSBydGMtZGV2Lm8KK3J0Yy1jb3JlLSQoQ09ORklHX1JUQ19JTlRGX1BST0MpICs9IHJ0Yy1wcm9jLm8KK3J0Yy1jb3JlLSQoQ09ORklHX1JUQ19JTlRGX1NZU0ZTKSArPSBydGMtc3lzZnMubwogCiBvYmotJChDT05GSUdfUlRDX0RSVl9DTU9TKQkrPSBydGMtY21vcy5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9YMTIwNSkJKz0gcnRjLXgxMjA1Lm8KQEAgLTMwLDEwICszMCwxMiBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfUlM1QzM0OCkJKz0gcnRjLXJzNWMzNDgubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQ4VDg2KQkrPSBydGMtbTQ4dDg2Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTU1MykJKz0gcnRjLWRzMTU1My5vCitvYmotJChDT05GSUdfUlRDX0RSVl9SUzVDMzEzKQkrPSBydGMtcnM1YzMxMy5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9FUDkzWFgpCSs9IHJ0Yy1lcDkzeHgubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfU0ExMTAwKQkrPSBydGMtc2ExMTAwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1ZSNDFYWCkJKz0gcnRjLXZyNDF4eC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QTDAzMSkJKz0gcnRjLXBsMDMxLm8KK29iai0kKENPTkZJR19SVENfRFJWX01BWDY5MDApCSs9IHJ0Yy1tYXg2OTAwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01BWDY5MDIpCSs9IHJ0Yy1tYXg2OTAyLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1YzMDIwKQkrPSBydGMtdjMwMjAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMCkrPSBydGMtYXQ5MXJtOTIwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9jbGFzcy5jIGIvZHJpdmVycy9ydGMvY2xhc3MuYwppbmRleCAwNGFhYTYzLi44YjNjZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9jbGFzcy5jCisrKyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKQEAgLTE2LDE5ICsxNiw5NCBAQAogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogCisjaW5jbHVkZSAicnRjLWNvcmUuaCIKKworCiBzdGF0aWMgREVGSU5FX0lEUihydGNfaWRyKTsKIHN0YXRpYyBERUZJTkVfTVVURVgoaWRyX2xvY2spOwogc3RydWN0IGNsYXNzICpydGNfY2xhc3M7CiAKLXN0YXRpYyB2b2lkIHJ0Y19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYpCitzdGF0aWMgdm9pZCBydGNfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSB0b19ydGNfZGV2aWNlKGNsYXNzX2Rldik7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHRvX3J0Y19kZXZpY2UoZGV2KTsKIAltdXRleF9sb2NrKCZpZHJfbG9jayk7CiAJaWRyX3JlbW92ZSgmcnRjX2lkciwgcnRjLT5pZCk7CiAJbXV0ZXhfdW5sb2NrKCZpZHJfbG9jayk7CiAJa2ZyZWUocnRjKTsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiBkZWZpbmVkKENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UpCisKKy8qCisgKiBPbiBzdXNwZW5kKCksIG1lYXN1cmUgdGhlIGRlbHRhIGJldHdlZW4gb25lIFJUQyBhbmQgdGhlCisgKiBzeXN0ZW0ncyB3YWxsIGNsb2NrOyByZXN0b3JlIGl0IG9uIHJlc3VtZSgpLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMJZGVsdGE7CitzdGF0aWMgdGltZV90CQlvbGR0aW1lOworCitzdGF0aWMgaW50IHJ0Y19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0YyA9IHRvX3J0Y19kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcnRjX3RpbWUJCXRtOworCisJaWYgKHN0cm5jbXAocnRjLT5kZXYuYnVzX2lkLAorCQkJCUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0UsCisJCQkJQlVTX0lEX1NJWkUpICE9IDApCisJCXJldHVybiAwOworCisJcnRjX3JlYWRfdGltZShydGMsICZ0bSk7CisJcnRjX3RtX3RvX3RpbWUoJnRtLCAmb2xkdGltZSk7CisKKwkvKiBSVEMgcHJlY2lzaW9uIGlzIDEgc2Vjb25kOyBhZGp1c3QgZGVsdGEgZm9yIGF2ZyAxLzIgc2VjIGVyciAqLworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZkZWx0YSwKKwkJCQl4dGltZS50dl9zZWMgLSBvbGR0aW1lLAorCQkJCXh0aW1lLnR2X25zZWMgLSAoTlNFQ19QRVJfU0VDID4+IDEpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0Y19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlCSpydGMgPSB0b19ydGNfZGV2aWNlKGRldik7CisJc3RydWN0IHJ0Y190aW1lCQl0bTsKKwl0aW1lX3QJCQluZXd0aW1lOworCXN0cnVjdCB0aW1lc3BlYwkJdGltZTsKKworCWlmIChzdHJuY21wKHJ0Yy0+ZGV2LmJ1c19pZCwKKwkJCQlDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFLAorCQkJCUJVU19JRF9TSVpFKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCXJ0Y19yZWFkX3RpbWUocnRjLCAmdG0pOworCWlmIChydGNfdmFsaWRfdG0oJnRtKSAhPSAwKSB7CisJCXByX2RlYnVnKCIlczogIGJvZ3VzIHJlc3VtZSB0aW1lXG4iLCBydGMtPmRldi5idXNfaWQpOworCQlyZXR1cm4gMDsKKwl9CisJcnRjX3RtX3RvX3RpbWUoJnRtLCAmbmV3dGltZSk7CisJaWYgKG5ld3RpbWUgPD0gb2xkdGltZSkgeworCQlpZiAobmV3dGltZSA8IG9sZHRpbWUpCisJCQlwcl9kZWJ1ZygiJXM6ICB0aW1lIHRyYXZlbCFcbiIsIHJ0Yy0+ZGV2LmJ1c19pZCk7CisJCXJldHVybiAwOworCX0KKworCS8qIHJlc3RvcmUgd2FsbCBjbG9jayB1c2luZyBkZWx0YSBhZ2FpbnN0IHRoaXMgUlRDOworCSAqIGFkanVzdCBhZ2FpbiBmb3IgYXZnIDEvMiBzZWNvbmQgUlRDIHNhbXBsaW5nIGVycm9yCisJICovCisJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnRpbWUsCisJCQkJbmV3dGltZSArIGRlbHRhLnR2X3NlYywKKwkJCQkoTlNFQ19QRVJfU0VDID4+IDEpICsgZGVsdGEudHZfbnNlYyk7CisJZG9fc2V0dGltZW9mZGF5KCZ0aW1lKTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBydGNfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHJ0Y19yZXN1bWUJTlVMTAorI2VuZGlmCisKKwogLyoqCiAgKiBydGNfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdy8gUlRDIGNsYXNzCiAgKiBAZGV2OiB0aGUgZGV2aWNlIHRvIHJlZ2lzdGVyCkBAIC03MCwyMyArMTQ1LDI5IEBACiAJcnRjLT5vcHMgPSBvcHM7CiAJcnRjLT5vd25lciA9IG93bmVyOwogCXJ0Yy0+bWF4X3VzZXJfZnJlcSA9IDY0OwotCXJ0Yy0+Y2xhc3NfZGV2LmRldiA9IGRldjsKLQlydGMtPmNsYXNzX2Rldi5jbGFzcyA9IHJ0Y19jbGFzczsKLQlydGMtPmNsYXNzX2Rldi5yZWxlYXNlID0gcnRjX2RldmljZV9yZWxlYXNlOworCXJ0Yy0+ZGV2LnBhcmVudCA9IGRldjsKKwlydGMtPmRldi5jbGFzcyA9IHJ0Y19jbGFzczsKKwlydGMtPmRldi5yZWxlYXNlID0gcnRjX2RldmljZV9yZWxlYXNlOwogCiAJbXV0ZXhfaW5pdCgmcnRjLT5vcHNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnJ0Yy0+aXJxX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZydGMtPmlycV90YXNrX2xvY2spOwogCiAJc3RybGNweShydGMtPm5hbWUsIG5hbWUsIFJUQ19ERVZJQ0VfTkFNRV9TSVpFKTsKLQlzbnByaW50ZihydGMtPmNsYXNzX2Rldi5jbGFzc19pZCwgQlVTX0lEX1NJWkUsICJydGMlZCIsIGlkKTsKKwlzbnByaW50ZihydGMtPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAicnRjJWQiLCBpZCk7CiAKLQllcnIgPSBjbGFzc19kZXZpY2VfcmVnaXN0ZXIoJnJ0Yy0+Y2xhc3NfZGV2KTsKKwlydGNfZGV2X3ByZXBhcmUocnRjKTsKKworCWVyciA9IGRldmljZV9yZWdpc3RlcigmcnRjLT5kZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9rZnJlZTsKIAorCXJ0Y19kZXZfYWRkX2RldmljZShydGMpOworCXJ0Y19zeXNmc19hZGRfZGV2aWNlKHJ0Yyk7CisJcnRjX3Byb2NfYWRkX2RldmljZShydGMpOworCiAJZGV2X2luZm8oZGV2LCAicnRjIGNvcmU6IHJlZ2lzdGVyZWQgJXMgYXMgJXNcbiIsCi0JCQlydGMtPm5hbWUsIHJ0Yy0+Y2xhc3NfZGV2LmNsYXNzX2lkKTsKKwkJCXJ0Yy0+bmFtZSwgcnRjLT5kZXYuYnVzX2lkKTsKIAogCXJldHVybiBydGM7CiAKQEAgLTExMywyNiArMTk0LDIyIEBACiAgKi8KIHZvaWQgcnRjX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBydGNfZGV2aWNlICpydGMpCiB7Ci0JaWYgKGNsYXNzX2RldmljZV9nZXQoJnJ0Yy0+Y2xhc3NfZGV2KSAhPSBOVUxMKSB7CisJaWYgKGdldF9kZXZpY2UoJnJ0Yy0+ZGV2KSAhPSBOVUxMKSB7CiAJCW11dGV4X2xvY2soJnJ0Yy0+b3BzX2xvY2spOwogCQkvKiByZW1vdmUgaW5uYXJkcyBvZiB0aGlzIFJUQywgdGhlbiBkaXNhYmxlIGl0LCBiZWZvcmUKIAkJICogbGV0dGluZyBhbnkgcnRjX2NsYXNzX29wZW4oKSB1c2VycyBhY2Nlc3MgaXQgYWdhaW4KIAkJICovCi0JCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZydGMtPmNsYXNzX2Rldik7CisJCXJ0Y19zeXNmc19kZWxfZGV2aWNlKHJ0Yyk7CisJCXJ0Y19kZXZfZGVsX2RldmljZShydGMpOworCQlydGNfcHJvY19kZWxfZGV2aWNlKHJ0Yyk7CisJCWRldmljZV91bnJlZ2lzdGVyKCZydGMtPmRldik7CiAJCXJ0Yy0+b3BzID0gTlVMTDsKIAkJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKLQkJY2xhc3NfZGV2aWNlX3B1dCgmcnRjLT5jbGFzc19kZXYpOworCQlwdXRfZGV2aWNlKCZydGMtPmRldik7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX2RldmljZV91bnJlZ2lzdGVyKTsKIAotaW50IHJ0Y19pbnRlcmZhY2VfcmVnaXN0ZXIoc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqaW50ZikKLXsKLQlpbnRmLT5jbGFzcyA9IHJ0Y19jbGFzczsKLQlyZXR1cm4gY2xhc3NfaW50ZXJmYWNlX3JlZ2lzdGVyKGludGYpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocnRjX2ludGVyZmFjZV9yZWdpc3Rlcik7Ci0KIHN0YXRpYyBpbnQgX19pbml0IHJ0Y19pbml0KHZvaWQpCiB7CiAJcnRjX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAicnRjIik7CkBAIC0xNDAsMTEgKzIxNywxNiBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZG4ndCBjcmVhdGUgY2xhc3NcbiIsIF9fRklMRV9fKTsKIAkJcmV0dXJuIFBUUl9FUlIocnRjX2NsYXNzKTsKIAl9CisJcnRjX2NsYXNzLT5zdXNwZW5kID0gcnRjX3N1c3BlbmQ7CisJcnRjX2NsYXNzLT5yZXN1bWUgPSBydGNfcmVzdW1lOworCXJ0Y19kZXZfaW5pdCgpOworCXJ0Y19zeXNmc19pbml0KHJ0Y19jbGFzcyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBydGNfZXhpdCh2b2lkKQogeworCXJ0Y19kZXZfZXhpdCgpOwogCWNsYXNzX2Rlc3Ryb3kocnRjX2NsYXNzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvaGN0b3N5cy5jIGIvZHJpdmVycy9ydGMvaGN0b3N5cy5jCmluZGV4IGQwMmZlOWEuLjE3ODUyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2hjdG9zeXMuYworKysgYi9kcml2ZXJzL3J0Yy9oY3Rvc3lzLmMKQEAgLTI2LDE1ICsyNiwxNSBAQAogewogCWludCBlcnI7CiAJc3RydWN0IHJ0Y190aW1lIHRtOwotCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiA9IHJ0Y19jbGFzc19vcGVuKENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UpOworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBydGNfY2xhc3Nfb3BlbihDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFKTsKIAotCWlmIChjbGFzc19kZXYgPT0gTlVMTCkgeworCWlmIChydGMgPT0gTlVMTCkgewogCQlwcmludGsoIiVzOiB1bmFibGUgdG8gb3BlbiBydGMgZGV2aWNlICglcylcbiIsCiAJCQlfX0ZJTEVfXywgQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWVyciA9IHJ0Y19yZWFkX3RpbWUoY2xhc3NfZGV2LCAmdG0pOworCWVyciA9IHJ0Y19yZWFkX3RpbWUocnRjLCAmdG0pOwogCWlmIChlcnIgPT0gMCkgewogCQllcnIgPSBydGNfdmFsaWRfdG0oJnRtKTsKIAkJaWYgKGVyciA9PSAwKSB7CkBAIC00Niw3ICs0Niw3IEBACiAKIAkJCWRvX3NldHRpbWVvZmRheSgmdHYpOwogCi0JCQlkZXZfaW5mbyhjbGFzc19kZXYtPmRldiwKKwkJCWRldl9pbmZvKHJ0Yy0+ZGV2LnBhcmVudCwKIAkJCQkic2V0dGluZyB0aGUgc3lzdGVtIGNsb2NrIHRvICIKIAkJCQkiJWQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkICgldSlcbiIsCiAJCQkJdG0udG1feWVhciArIDE5MDAsIHRtLnRtX21vbiArIDEsIHRtLnRtX21kYXksCkBAIC01NCwxNCArNTQsMTQgQEAKIAkJCQkodW5zaWduZWQgaW50KSB0di50dl9zZWMpOwogCQl9CiAJCWVsc2UKLQkJCWRldl9lcnIoY2xhc3NfZGV2LT5kZXYsCisJCQlkZXZfZXJyKHJ0Yy0+ZGV2LnBhcmVudCwKIAkJCQkiaGN0b3N5czogaW52YWxpZCBkYXRlL3RpbWVcbiIpOwogCX0KIAllbHNlCi0JCWRldl9lcnIoY2xhc3NfZGV2LT5kZXYsCisJCWRldl9lcnIocnRjLT5kZXYucGFyZW50LAogCQkJImhjdG9zeXM6IHVuYWJsZSB0byByZWFkIHRoZSBoYXJkd2FyZSBjbG9ja1xuIik7CiAKLQlydGNfY2xhc3NfY2xvc2UoY2xhc3NfZGV2KTsKKwlydGNfY2xhc3NfY2xvc2UocnRjKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwppbmRleCBlZjQwZGYwLi5hZDY2YzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwpAQCAtMTMsMTAgKzEzLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogCi1pbnQgcnRjX3JlYWRfdGltZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCitpbnQgcnRjX3JlYWRfdGltZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCWludCBlcnI7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHRvX3J0Y19kZXZpY2UoY2xhc3NfZGV2KTsKIAogCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcnRjLT5vcHNfbG9jayk7CiAJaWYgKGVycikKQEAgLTI4LDcgKzI3LDcgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAllbHNlIHsKIAkJbWVtc2V0KHRtLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSk7Ci0JCWVyciA9IHJ0Yy0+b3BzLT5yZWFkX3RpbWUoY2xhc3NfZGV2LT5kZXYsIHRtKTsKKwkJZXJyID0gcnRjLT5vcHMtPnJlYWRfdGltZShydGMtPmRldi5wYXJlbnQsIHRtKTsKIAl9CiAKIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwpAQCAtMzYsMTAgKzM1LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0Y19yZWFkX3RpbWUpOwogCi1pbnQgcnRjX3NldF90aW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2Rldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK2ludCBydGNfc2V0X3RpbWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSB0b19ydGNfZGV2aWNlKGNsYXNzX2Rldik7CiAKIAllcnIgPSBydGNfdmFsaWRfdG0odG0pOwogCWlmIChlcnIgIT0gMCkKQEAgLTU0LDE3ICs1MiwxNiBAQAogCWVsc2UgaWYgKCFydGMtPm9wcy0+c2V0X3RpbWUpCiAJCWVyciA9IC1FSU5WQUw7CiAJZWxzZQotCQllcnIgPSBydGMtPm9wcy0+c2V0X3RpbWUoY2xhc3NfZGV2LT5kZXYsIHRtKTsKKwkJZXJyID0gcnRjLT5vcHMtPnNldF90aW1lKHJ0Yy0+ZGV2LnBhcmVudCwgdG0pOwogCiAJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX3NldF90aW1lKTsKIAotaW50IHJ0Y19zZXRfbW1zcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIHVuc2lnbmVkIGxvbmcgc2VjcykKK2ludCBydGNfc2V0X21tc3Moc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywgdW5zaWduZWQgbG9uZyBzZWNzKQogewogCWludCBlcnI7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHRvX3J0Y19kZXZpY2UoY2xhc3NfZGV2KTsKIAogCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcnRjLT5vcHNfbG9jayk7CiAJaWYgKGVycikKQEAgLTczLDExICs3MCwxMSBAQAogCWlmICghcnRjLT5vcHMpCiAJCWVyciA9IC1FTk9ERVY7CiAJZWxzZSBpZiAocnRjLT5vcHMtPnNldF9tbXNzKQotCQllcnIgPSBydGMtPm9wcy0+c2V0X21tc3MoY2xhc3NfZGV2LT5kZXYsIHNlY3MpOworCQllcnIgPSBydGMtPm9wcy0+c2V0X21tc3MocnRjLT5kZXYucGFyZW50LCBzZWNzKTsKIAllbHNlIGlmIChydGMtPm9wcy0+cmVhZF90aW1lICYmIHJ0Yy0+b3BzLT5zZXRfdGltZSkgewogCQlzdHJ1Y3QgcnRjX3RpbWUgbmV3LCBvbGQ7CiAKLQkJZXJyID0gcnRjLT5vcHMtPnJlYWRfdGltZShjbGFzc19kZXYtPmRldiwgJm9sZCk7CisJCWVyciA9IHJ0Yy0+b3BzLT5yZWFkX3RpbWUocnRjLT5kZXYucGFyZW50LCAmb2xkKTsKIAkJaWYgKGVyciA9PSAwKSB7CiAJCQlydGNfdGltZV90b190bShzZWNzLCAmbmV3KTsKIApAQCAtODksNyArODYsOCBAQAogCQkJICovCiAJCQlpZiAoISgob2xkLnRtX2hvdXIgPT0gMjMgJiYgb2xkLnRtX21pbiA9PSA1OSkgfHwKIAkJCQkobmV3LnRtX2hvdXIgPT0gMjMgJiYgbmV3LnRtX21pbiA9PSA1OSkpKQotCQkJCWVyciA9IHJ0Yy0+b3BzLT5zZXRfdGltZShjbGFzc19kZXYtPmRldiwgJm5ldyk7CisJCQkJZXJyID0gcnRjLT5vcHMtPnNldF90aW1lKHJ0Yy0+ZGV2LnBhcmVudCwKKwkJCQkJCSZuZXcpOwogCQl9CiAJfQogCWVsc2UKQEAgLTEwMSwxMCArOTksOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX3NldF9tbXNzKTsKIAotaW50IHJ0Y19yZWFkX2FsYXJtKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2Rldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQoraW50IHJ0Y19yZWFkX2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSB0b19ydGNfZGV2aWNlKGNsYXNzX2Rldik7CiAKIAllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnJ0Yy0+b3BzX2xvY2spOwogCWlmIChlcnIpCkBAIC0xMTYsNyArMTEzLDcgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAllbHNlIHsKIAkJbWVtc2V0KGFsYXJtLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y193a2Fscm0pKTsKLQkJZXJyID0gcnRjLT5vcHMtPnJlYWRfYWxhcm0oY2xhc3NfZGV2LT5kZXYsIGFsYXJtKTsKKwkJZXJyID0gcnRjLT5vcHMtPnJlYWRfYWxhcm0ocnRjLT5kZXYucGFyZW50LCBhbGFybSk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKQEAgLTEyNCwxMCArMTIxLDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfcmVhZF9hbGFybSk7CiAKLWludCBydGNfc2V0X2FsYXJtKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2Rldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQoraW50IHJ0Y19zZXRfYWxhcm0oc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQogewogCWludCBlcnI7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHRvX3J0Y19kZXZpY2UoY2xhc3NfZGV2KTsKKworCWVyciA9IHJ0Y192YWxpZF90bSgmYWxhcm0tPnRpbWUpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcnRjLT5vcHNfbG9jayk7CiAJaWYgKGVycikKQEAgLTEzOCw3ICsxMzgsNyBAQAogCWVsc2UgaWYgKCFydGMtPm9wcy0+c2V0X2FsYXJtKQogCQllcnIgPSAtRUlOVkFMOwogCWVsc2UKLQkJZXJyID0gcnRjLT5vcHMtPnNldF9hbGFybShjbGFzc19kZXYtPmRldiwgYWxhcm0pOworCQllcnIgPSBydGMtPm9wcy0+c2V0X2FsYXJtKHJ0Yy0+ZGV2LnBhcmVudCwgYWxhcm0pOwogCiAJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKIAlyZXR1cm4gZXJyOwpAQCAtMTQ3LDE2ICsxNDcsMTQgQEAKIAogLyoqCiAgKiBydGNfdXBkYXRlX2lycSAtIHJlcG9ydCBSVEMgcGVyaW9kaWMsIGFsYXJtLCBhbmQvb3IgdXBkYXRlIGlycXMKLSAqIEBjbGFzc19kZXY6IHRoZSBydGMncyBjbGFzcyBkZXZpY2UKKyAqIEBydGM6IHRoZSBydGMgZGV2aWNlCiAgKiBAbnVtOiBob3cgbWFueSBpcnFzIGFyZSBiZWluZyByZXBvcnRlZCAodXN1YWxseSBvbmUpCiAgKiBAZXZlbnRzOiBtYXNrIG9mIFJUQ19JUlFGIHdpdGggb25lIG9yIG1vcmUgb2YgUlRDX1BGLCBSVENfQUYsIFJUQ19VRgogICogQ29udGV4dDogaW5faW50ZXJydXB0KCksIGlycXMgYmxvY2tlZAogICovCi12b2lkIHJ0Y191cGRhdGVfaXJxKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKK3ZvaWQgcnRjX3VwZGF0ZV9pcnEoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywKIAkJdW5zaWduZWQgbG9uZyBudW0sIHVuc2lnbmVkIGxvbmcgZXZlbnRzKQogewotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSB0b19ydGNfZGV2aWNlKGNsYXNzX2Rldik7Ci0KIAlzcGluX2xvY2soJnJ0Yy0+aXJxX2xvY2spOwogCXJ0Yy0+aXJxX2RhdGEgPSAocnRjLT5pcnFfZGF0YSArIChudW0gPDwgOCkpIHwgZXZlbnRzOwogCXNwaW5fdW5sb2NrKCZydGMtPmlycV9sb2NrKTsKQEAgLTE3MSw0MCArMTY5LDQzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfdXBkYXRlX2lycSk7CiAKLXN0cnVjdCBjbGFzc19kZXZpY2UgKnJ0Y19jbGFzc19vcGVuKGNoYXIgKm5hbWUpCitzdHJ1Y3QgcnRjX2RldmljZSAqcnRjX2NsYXNzX29wZW4oY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYgPSBOVUxMLAotCQkJCSpjbGFzc19kZXZfdG1wOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gTlVMTDsKIAogCWRvd24oJnJ0Y19jbGFzcy0+c2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsYXNzX2Rldl90bXAsICZydGNfY2xhc3MtPmNoaWxkcmVuLCBub2RlKSB7Ci0JCWlmIChzdHJuY21wKGNsYXNzX2Rldl90bXAtPmNsYXNzX2lkLCBuYW1lLCBCVVNfSURfU0laRSkgPT0gMCkgewotCQkJY2xhc3NfZGV2ID0gY2xhc3NfZGV2aWNlX2dldChjbGFzc19kZXZfdG1wKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnJ0Y19jbGFzcy0+ZGV2aWNlcywgbm9kZSkgeworCQlpZiAoc3RybmNtcChkZXYtPmJ1c19pZCwgbmFtZSwgQlVTX0lEX1NJWkUpID09IDApIHsKKwkJCWRldiA9IGdldF9kZXZpY2UoZGV2KTsKKwkJCWlmIChkZXYpCisJCQkJcnRjID0gdG9fcnRjX2RldmljZShkZXYpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlpZiAoY2xhc3NfZGV2KSB7Ci0JCWlmICghdHJ5X21vZHVsZV9nZXQodG9fcnRjX2RldmljZShjbGFzc19kZXYpLT5vd25lcikpCi0JCQljbGFzc19kZXYgPSBOVUxMOworCWlmIChydGMpIHsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChydGMtPm93bmVyKSkgeworCQkJcHV0X2RldmljZShkZXYpOworCQkJcnRjID0gTlVMTDsKKwkJfQogCX0KIAl1cCgmcnRjX2NsYXNzLT5zZW0pOwogCi0JcmV0dXJuIGNsYXNzX2RldjsKKwlyZXR1cm4gcnRjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX2NsYXNzX29wZW4pOwogCi12b2lkIHJ0Y19jbGFzc19jbG9zZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYpCit2b2lkIHJ0Y19jbGFzc19jbG9zZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQogewotCW1vZHVsZV9wdXQodG9fcnRjX2RldmljZShjbGFzc19kZXYpLT5vd25lcik7Ci0JY2xhc3NfZGV2aWNlX3B1dChjbGFzc19kZXYpOworCW1vZHVsZV9wdXQocnRjLT5vd25lcik7CisJcHV0X2RldmljZSgmcnRjLT5kZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX2NsYXNzX2Nsb3NlKTsKIAotaW50IHJ0Y19pcnFfcmVnaXN0ZXIoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBzdHJ1Y3QgcnRjX3Rhc2sgKnRhc2spCitpbnQgcnRjX2lycV9yZWdpc3RlcihzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3Rhc2sgKnRhc2spCiB7CiAJaW50IHJldHZhbCA9IC1FQlVTWTsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gdG9fcnRjX2RldmljZShjbGFzc19kZXYpOwogCiAJaWYgKHRhc2sgPT0gTlVMTCB8fCB0YXNrLT5mdW5jID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjIwLDkgKzIyMSw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfaXJxX3JlZ2lzdGVyKTsKIAotdm9pZCBydGNfaXJxX3VucmVnaXN0ZXIoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBzdHJ1Y3QgcnRjX3Rhc2sgKnRhc2spCit2b2lkIHJ0Y19pcnFfdW5yZWdpc3RlcihzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3Rhc2sgKnRhc2spCiB7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHRvX3J0Y19kZXZpY2UoY2xhc3NfZGV2KTsKIAogCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX3Rhc2tfbG9jayk7CiAJaWYgKHJ0Yy0+aXJxX3Rhc2sgPT0gdGFzaykKQEAgLTIzMSwxMSArMjMxLDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfaXJxX3VucmVnaXN0ZXIpOwogCi1pbnQgcnRjX2lycV9zZXRfc3RhdGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBzdHJ1Y3QgcnRjX3Rhc2sgKnRhc2ssIGludCBlbmFibGVkKQoraW50IHJ0Y19pcnFfc2V0X3N0YXRlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGFzayAqdGFzaywgaW50IGVuYWJsZWQpCiB7CiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gdG9fcnRjX2RldmljZShjbGFzc19kZXYpOwogCiAJaWYgKHJ0Yy0+b3BzLT5pcnFfc2V0X3N0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5YSU87CkBAIC0yNDYsMTcgKzI0NSwxNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Yy0+aXJxX3Rhc2tfbG9jaywgZmxhZ3MpOwogCiAJaWYgKGVyciA9PSAwKQotCQllcnIgPSBydGMtPm9wcy0+aXJxX3NldF9zdGF0ZShjbGFzc19kZXYtPmRldiwgZW5hYmxlZCk7CisJCWVyciA9IHJ0Yy0+b3BzLT5pcnFfc2V0X3N0YXRlKHJ0Yy0+ZGV2LnBhcmVudCwgZW5hYmxlZCk7CiAKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX2lycV9zZXRfc3RhdGUpOwogCi1pbnQgcnRjX2lycV9zZXRfZnJlcShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIHN0cnVjdCBydGNfdGFzayAqdGFzaywgaW50IGZyZXEpCitpbnQgcnRjX2lycV9zZXRfZnJlcShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3Rhc2sgKnRhc2ssIGludCBmcmVxKQogewogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHRvX3J0Y19kZXZpY2UoY2xhc3NfZGV2KTsKIAogCWlmIChydGMtPm9wcy0+aXJxX3NldF9mcmVxID09IE5VTEwpCiAJCXJldHVybiAtRU5YSU87CkBAIC0yNjcsNyArMjY1LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGMtPmlycV90YXNrX2xvY2ssIGZsYWdzKTsKIAogCWlmIChlcnIgPT0gMCkgewotCQllcnIgPSBydGMtPm9wcy0+aXJxX3NldF9mcmVxKGNsYXNzX2Rldi0+ZGV2LCBmcmVxKTsKKwkJZXJyID0gcnRjLT5vcHMtPmlycV9zZXRfZnJlcShydGMtPmRldi5wYXJlbnQsIGZyZXEpOwogCQlpZiAoZXJyID09IDApCiAJCQlydGMtPmlycV9mcmVxID0gZnJlcTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwppbmRleCBhYzBlNjhlLi4zMzc5NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogCiAJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX1NDQ1IsIHJ0c3IpOwkvKiBjbGVhciBzdGF0dXMgcmVnICovCiAKLQkJcnRjX3VwZGF0ZV9pcnEoJnJ0Yy0+Y2xhc3NfZGV2LCAxLCBldmVudHMpOworCQlydGNfdXBkYXRlX2lycShydGMsIDEsIGV2ZW50cyk7CiAKIAkJcHJfZGVidWcoIiVzKCk6IG51bT0lbGQsIGV2ZW50cz0weCUwMmx4XG4iLCBfX0ZVTkNUSU9OX18sCiAJCQlldmVudHMgPj4gOCwgZXZlbnRzICYgMHgwMDAwMDBGRik7CkBAIC0zNDgsMjEgKzM0OCwxMCBAQAogCiAvKiBBVDkxUk05MjAwIFJUQyBQb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wgKi8KIAotc3RhdGljIHN0cnVjdCB0aW1lc3BlYyBhdDkxX3J0Y19kZWx0YTsKIHN0YXRpYyB1MzIgYXQ5MV9ydGNfaW1yOwogCiBzdGF0aWMgaW50IGF0OTFfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBydGNfdGltZSB0bTsKLQlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKLQotCXRpbWUudHZfbnNlYyA9IDA7Ci0KLQkvKiBjYWxjdWxhdGUgdGltZSBkZWx0YSBmb3Igc3VzcGVuZCAqLwotCWF0OTFfcnRjX3JlYWR0aW1lKCZwZGV2LT5kZXYsICZ0bSk7Ci0JcnRjX3RtX3RvX3RpbWUoJnRtLCAmdGltZS50dl9zZWMpOwotCXNhdmVfdGltZV9kZWx0YSgmYXQ5MV9ydGNfZGVsdGEsICZ0aW1lKTsKLQogCS8qIHRoaXMgSVJRIGlzIHNoYXJlZCB3aXRoIERCR1UgYW5kIG90aGVyIGhhcmR3YXJlIHdoaWNoIGlzbid0CiAJICogbmVjZXNzYXJpbHkgZG9pbmcgUE0gbGlrZSB3ZSBhcmUuLi4KIAkgKi8KQEAgLTM3NCwzNiArMzYzLDE3IEBACiAJCWVsc2UKIAkJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0lEUiwgYXQ5MV9ydGNfaW1yKTsKIAl9Ci0KLQlwcl9kZWJ1ZygiJXMoKTogJTRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZFxuIiwgX19GVU5DVElPTl9fLAotCQkxOTAwICsgdG0udG1feWVhciwgdG0udG1fbW9uLCB0bS50bV9tZGF5LAotCQl0bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3NlYyk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdDkxX3J0Y19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcnRjX3RpbWUgdG07Ci0Jc3RydWN0IHRpbWVzcGVjIHRpbWU7Ci0KLQl0aW1lLnR2X25zZWMgPSAwOwotCi0JYXQ5MV9ydGNfcmVhZHRpbWUoJnBkZXYtPmRldiwgJnRtKTsKLQlydGNfdG1fdG9fdGltZSgmdG0sICZ0aW1lLnR2X3NlYyk7Ci0JcmVzdG9yZV90aW1lX2RlbHRhKCZhdDkxX3J0Y19kZWx0YSwgJnRpbWUpOwotCiAJaWYgKGF0OTFfcnRjX2ltcikgewogCQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCiAJCQlkaXNhYmxlX2lycV93YWtlKEFUOTFfSURfU1lTKTsKIAkJZWxzZQogCQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSUVSLCBhdDkxX3J0Y19pbXIpOwogCX0KLQotCXByX2RlYnVnKCIlcygpOiAlNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkXG4iLCBfX0ZVTkNUSU9OX18sCi0JCTE5MDAgKyB0bS50bV95ZWFyLCB0bS50bV9tb24sIHRtLnRtX21kYXksCi0JCXRtLnRtX2hvdXIsIHRtLnRtX21pbiwgdG0udG1fc2VjKTsKLQogCXJldHVybiAwOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMgYi9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jCmluZGV4IDdjMGQ2MDkuLmUyNGVhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWNtb3MuYwpAQCAtNDYsNiArNDYsMTAgQEAKIAlpbnQJCQlpcnE7CiAJc3RydWN0IHJlc291cmNlCQkqaW9tZW07CiAKKwl2b2lkCQkJKCp3YWtlX29uKShzdHJ1Y3QgZGV2aWNlICopOworCXZvaWQJCQkoKndha2Vfb2ZmKShzdHJ1Y3QgZGV2aWNlICopOworCisJdTgJCQllbmFibGVkX3dha2U7CiAJdTgJCQlzdXNwZW5kX2N0cmw7CiAKIAkvKiBuZXdlciBoYXJkd2FyZSBleHRlbmRzIHRoZSBvcmlnaW5hbCByZWdpc3RlciBzZXQgKi8KQEAgLTIwMyw3ICsyMDcsNyBAQAogCXJ0Y19pbnRyID0gQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKTsKIAlydGNfaW50ciAmPSAocnRjX2NvbnRyb2wgJiBSVENfSVJRTUFTSykgfCBSVENfSVJRRjsKIAlpZiAoaXNfaW50cihydGNfaW50cikpCi0JCXJ0Y191cGRhdGVfaXJxKCZjbW9zLT5ydGMtPmNsYXNzX2RldiwgMSwgcnRjX2ludHIpOworCQlydGNfdXBkYXRlX2lycShjbW9zLT5ydGMsIDEsIHJ0Y19pbnRyKTsKIAogCS8qIHVwZGF0ZSBhbGFybSAqLwogCUNNT1NfV1JJVEUoaHJzLCBSVENfSE9VUlNfQUxBUk0pOwpAQCAtMjIzLDcgKzIyNyw3IEBACiAJCXJ0Y19pbnRyID0gQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKTsKIAkJcnRjX2ludHIgJj0gKHJ0Y19jb250cm9sICYgUlRDX0lSUU1BU0spIHwgUlRDX0lSUUY7CiAJCWlmIChpc19pbnRyKHJ0Y19pbnRyKSkKLQkJCXJ0Y191cGRhdGVfaXJxKCZjbW9zLT5ydGMtPmNsYXNzX2RldiwgMSwgcnRjX2ludHIpOworCQkJcnRjX3VwZGF0ZV9pcnEoY21vcy0+cnRjLCAxLCBydGNfaW50cik7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CkBAIC0zMDQsNyArMzA4LDcgQEAKIAlydGNfaW50ciA9IENNT1NfUkVBRChSVENfSU5UUl9GTEFHUyk7CiAJcnRjX2ludHIgJj0gKHJ0Y19jb250cm9sICYgUlRDX0lSUU1BU0spIHwgUlRDX0lSUUY7CiAJaWYgKGlzX2ludHIocnRjX2ludHIpKQotCQlydGNfdXBkYXRlX2lycSgmY21vcy0+cnRjLT5jbGFzc19kZXYsIDEsIHJ0Y19pbnRyKTsKKwkJcnRjX3VwZGF0ZV9pcnEoY21vcy0+cnRjLCAxLCBydGNfaW50cik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM3OSwxMiArMzgzLDEyIEBACiAJCXJldHVybiBJUlFfTk9ORTsKIH0KIAotI2lmZGVmCUNPTkZJR19QTlBBQ1BJCi0jZGVmaW5lCWlzX3BucGFjcGkoKQkxCisjaWZkZWYJQ09ORklHX1BOUAorI2RlZmluZQlpc19wbnAoKQkxCiAjZGVmaW5lCUlOSVRTRUNUSU9OCiAKICNlbHNlCi0jZGVmaW5lCWlzX3BucGFjcGkoKQkwCisjZGVmaW5lCWlzX3BucCgpCTAKICNkZWZpbmUJSU5JVFNFQ1RJT04JX19pbml0CiAjZW5kaWYKIApAQCAtNDA1LDEzICs0MDksMjAgQEAKIAljbW9zX3J0Yy5pcnEgPSBydGNfaXJxOwogCWNtb3NfcnRjLmlvbWVtID0gcG9ydHM7CiAKLQkvKiBGb3IgQUNQSSBzeXN0ZW1zIHRoZSBpbmZvIGNvbWVzIGZyb20gdGhlIEZBRFQuICBPbiBvdGhlcnMsCi0JICogYm9hcmQgc3BlY2lmaWMgc2V0dXAgcHJvdmlkZXMgaXQgYXMgYXBwcm9wcmlhdGUuCisJLyogRm9yIEFDUEkgc3lzdGVtcyBleHRlbnNpb24gaW5mbyBjb21lcyBmcm9tIHRoZSBGQURULiAgT24gb3RoZXJzLAorCSAqIGJvYXJkIHNwZWNpZmljIHNldHVwIHByb3ZpZGVzIGl0IGFzIGFwcHJvcHJpYXRlLiAgU3lzdGVtcyB3aGVyZQorCSAqIHRoZSBhbGFybSBJUlEgaXNuJ3QgYXV0b21hdGljYWxseSBhIHdha2V1cCBJUlEgKGxpa2UgQUNQSSwgYW5kCisJICogc29tZSBhbG1vc3QtY2xvbmVzKSBjYW4gcHJvdmlkZSBob29rcyB0byBtYWtlIHRoYXQgYmVoYXZlLgogCSAqLwogCWlmIChpbmZvKSB7CiAJCWNtb3NfcnRjLmRheV9hbHJtID0gaW5mby0+cnRjX2RheV9hbGFybTsKIAkJY21vc19ydGMubW9uX2Fscm0gPSBpbmZvLT5ydGNfbW9uX2FsYXJtOwogCQljbW9zX3J0Yy5jZW50dXJ5ID0gaW5mby0+cnRjX2NlbnR1cnk7CisKKwkJaWYgKGluZm8tPndha2Vfb24gJiYgaW5mby0+d2FrZV9vZmYpIHsKKwkJCWNtb3NfcnRjLndha2Vfb24gPSBpbmZvLT53YWtlX29uOworCQkJY21vc19ydGMud2FrZV9vZmYgPSBpbmZvLT53YWtlX29mZjsKKwkJfQogCX0KIAogCWNtb3NfcnRjLnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoZHJpdmVyX25hbWUsIGRldiwKQEAgLTQyNywxNCArNDM4LDE0IEBACiAJICogUkVWSVNJVCBmb3Igbm9uLXg4NiBzeXN0ZW1zIHdlIG1heSBuZWVkIHRvIGhhbmRsZSBpbyBtZW1vcnkKIAkgKiByZXNvdXJjZXM6IGlvcmVtYXAgdGhlbSwgYW5kIHJlcXVlc3RfbWVtX3JlZ2lvbigpLgogCSAqLwotCWlmIChpc19wbnBhY3BpKCkpIHsKKwlpZiAoaXNfcG5wKCkpIHsKIAkJcmV0dmFsID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCBwb3J0cyk7CiAJCWlmIChyZXR2YWwgPCAwKSB7CiAJCQlkZXZfZGJnKGRldiwgImkvbyByZWdpc3RlcnMgYWxyZWFkeSBpbiB1c2VcbiIpOwogCQkJZ290byBjbGVhbnVwMDsKIAkJfQogCX0KLQlyZW5hbWVfcmVnaW9uKHBvcnRzLCBjbW9zX3J0Yy5ydGMtPmNsYXNzX2Rldi5jbGFzc19pZCk7CisJcmVuYW1lX3JlZ2lvbihwb3J0cywgY21vc19ydGMucnRjLT5kZXYuYnVzX2lkKTsKIAogCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKIApAQCAtNDcwLDggKzQ4MSw4IEBACiAKIAlpZiAoaXNfdmFsaWRfaXJxKHJ0Y19pcnEpKQogCQlyZXR2YWwgPSByZXF1ZXN0X2lycShydGNfaXJxLCBjbW9zX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKLQkJCQljbW9zX3J0Yy5ydGMtPmNsYXNzX2Rldi5jbGFzc19pZCwKLQkJCQkmY21vc19ydGMucnRjLT5jbGFzc19kZXYpOworCQkJCWNtb3NfcnRjLnJ0Yy0+ZGV2LmJ1c19pZCwKKwkJCQljbW9zX3J0Yy5ydGMpOwogCWlmIChyZXR2YWwgPCAwKSB7CiAJCWRldl9kYmcoZGV2LCAiSVJRICVkIGlzIGFscmVhZHkgaW4gdXNlXG4iLCBydGNfaXJxKTsKIAkJZ290byBjbGVhbnVwMTsKQEAgLTQ4Myw3ICs0OTQsNyBAQAogCSAqLwogCiAJcHJfaW5mbygiJXM6IGFsYXJtcyB1cCB0byBvbmUgJXMlc1xuIiwKLQkJCWNtb3NfcnRjLnJ0Yy0+Y2xhc3NfZGV2LmNsYXNzX2lkLAorCQkJY21vc19ydGMucnRjLT5kZXYuYnVzX2lkLAogCQkJaXNfdmFsaWRfaXJxKHJ0Y19pcnEpCiAJCQkJPyAgKGNtb3NfcnRjLm1vbl9hbHJtCiAJCQkJCT8gInllYXIiCkBAIC01MjAsMTIgKzUzMSwxMiBAQAogCiAJY21vc19kb19zaHV0ZG93bigpOwogCi0JaWYgKGlzX3BucGFjcGkoKSkKKwlpZiAoaXNfcG5wKCkpCiAJCXJlbGVhc2VfcmVzb3VyY2UoY21vcy0+aW9tZW0pOwogCXJlbmFtZV9yZWdpb24oY21vcy0+aW9tZW0sIE5VTEwpOwogCiAJaWYgKGlzX3ZhbGlkX2lycShjbW9zLT5pcnEpKQotCQlmcmVlX2lycShjbW9zLT5pcnEsICZjbW9zX3J0Yy5ydGMtPmNsYXNzX2Rldik7CisJCWZyZWVfaXJxKGNtb3MtPmlycSwgY21vc19ydGMucnRjKTsKIAogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihjbW9zX3J0Yy5ydGMpOwogCkBAIC01NTUsMTYgKzU2NiwyMCBAQAogCQlpcnFzdGF0ID0gQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKTsKIAkJaXJxc3RhdCAmPSAodG1wICYgUlRDX0lSUU1BU0spIHwgUlRDX0lSUUY7CiAJCWlmIChpc19pbnRyKGlycXN0YXQpKQotCQkJcnRjX3VwZGF0ZV9pcnEoJmNtb3MtPnJ0Yy0+Y2xhc3NfZGV2LCAxLCBpcnFzdGF0KTsKKwkJCXJ0Y191cGRhdGVfaXJxKGNtb3MtPnJ0YywgMSwgaXJxc3RhdCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCi0JLyogQUNQSSBIT09LOiAgZW5hYmxlIEFDUElfRVZFTlRfUlRDIHdoZW4gKHRtcCAmIFJUQ19BSUUpCi0JICogLi4uIGl0J2QgYmUgYmVzdCBpZiB3ZSBjb3VsZCBkbyB0aGF0IHVuZGVyIHJ0Y19sb2NrLgotCSAqLworCWlmICh0bXAgJiBSVENfQUlFKSB7CisJCWNtb3MtPmVuYWJsZWRfd2FrZSA9IDE7CisJCWlmIChjbW9zLT53YWtlX29uKQorCQkJY21vcy0+d2FrZV9vbihkZXYpOworCQllbHNlCisJCQllbmFibGVfaXJxX3dha2UoY21vcy0+aXJxKTsKKwl9CiAKIAlwcl9kZWJ1ZygiJXM6IHN1c3BlbmQlcywgY3RybCAlMDJ4XG4iLAotCQkJY21vc19ydGMucnRjLT5jbGFzc19kZXYuY2xhc3NfaWQsCisJCQljbW9zX3J0Yy5ydGMtPmRldi5idXNfaWQsCiAJCQkodG1wICYgUlRDX0FJRSkgPyAiLCBhbGFybSBtYXkgd2FrZSIgOiAiIiwKIAkJCXRtcCk7CiAKQEAgLTU3NiwyNiArNTkxLDI4IEBACiAJc3RydWN0IGNtb3NfcnRjCSpjbW9zID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdW5zaWduZWQgY2hhcgl0bXAgPSBjbW9zLT5zdXNwZW5kX2N0cmw7CiAKLQkvKiBSRVZJU0lUOiAgYSBtZWNoYW5pc20gdG8gcmVzeW5jIHRoZSBzeXN0ZW0gY2xvY2sgKGppZmZpZXMpCi0JICogb24gcmVzdW1lIHNob3VsZCBiZSBwb3J0YWJsZSBiZXR3ZWVuIHBsYXRmb3JtcyAuLi4KLQkgKi8KLQogCS8qIHJlLWVuYWJsZSBhbnkgaXJxcyBwcmV2aW91c2x5IGFjdGl2ZSAqLwogCWlmICh0bXAgJiAoUlRDX1BJRXxSVENfQUlFfFJUQ19VSUUpKSB7CiAKLQkJLyogQUNQSSBIT09LOiAgZGlzYWJsZSBBQ1BJX0VWRU5UX1JUQyB3aGVuICh0bXAgJiBSVENfQUlFKSAqLworCQlpZiAoY21vcy0+ZW5hYmxlZF93YWtlKSB7CisJCQlpZiAoY21vcy0+d2FrZV9vZmYpCisJCQkJY21vcy0+d2FrZV9vZmYoZGV2KTsKKwkJCWVsc2UKKwkJCQlkaXNhYmxlX2lycV93YWtlKGNtb3MtPmlycSk7CisJCQljbW9zLT5lbmFibGVkX3dha2UgPSAwOworCQl9CiAKIAkJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwogCQlDTU9TX1dSSVRFKHRtcCwgUlRDX0NPTlRST0wpOwogCQl0bXAgPSBDTU9TX1JFQUQoUlRDX0lOVFJfRkxBR1MpOwogCQl0bXAgJj0gKGNtb3MtPnN1c3BlbmRfY3RybCAmIFJUQ19JUlFNQVNLKSB8IFJUQ19JUlFGOwogCQlpZiAoaXNfaW50cih0bXApKQotCQkJcnRjX3VwZGF0ZV9pcnEoJmNtb3MtPnJ0Yy0+Y2xhc3NfZGV2LCAxLCB0bXApOworCQkJcnRjX3VwZGF0ZV9pcnEoY21vcy0+cnRjLCAxLCB0bXApOwogCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAl9CiAKIAlwcl9kZWJ1ZygiJXM6IHJlc3VtZSwgY3RybCAlMDJ4XG4iLAotCQkJY21vc19ydGMucnRjLT5jbGFzc19kZXYuY2xhc3NfaWQsCisJCQljbW9zX3J0Yy5ydGMtPmRldi5idXNfaWQsCiAJCQljbW9zLT5zdXNwZW5kX2N0cmwpOwogCiAKQEAgLTYxMyw3ICs2MzAsNyBAQAogICogdGhlIGRldmljZSBub2RlIHdpbGwgYWx3YXlzIGJlIGNyZWF0ZWQgYXMgYSBQTlBBQ1BJIGRldmljZS4KICAqLwogCi0jaWZkZWYJQ09ORklHX1BOUEFDUEkKKyNpZmRlZglDT05GSUdfUE5QCiAKICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KIApAQCAtNjI0LDkgKzY0MSwxNiBAQAogCSAqIGRyaXZlcnMgY2FuJ3QgcHJvdmlkZSBzaHV0ZG93bigpIG1ldGhvZHMgdG8gZGlzYWJsZSBJUlFzLgogCSAqIE9yIGJldHRlciB5ZXQsIGZpeCBQTlAgdG8gYWxsb3cgdGhvc2UgbWV0aG9kcy4uLgogCSAqLwotCXJldHVybiBjbW9zX2RvX3Byb2JlKCZwbnAtPmRldiwKLQkJCSZwbnAtPnJlcy5wb3J0X3Jlc291cmNlWzBdLAotCQkJcG5wLT5yZXMuaXJxX3Jlc291cmNlWzBdLnN0YXJ0KTsKKwlpZiAocG5wX3BvcnRfc3RhcnQocG5wLDApID09IDB4NzAgJiYgIXBucF9pcnFfdmFsaWQocG5wLDApKQorCQkvKiBTb21lIG1hY2hpbmVzIGNvbnRhaW4gYSBQTlAgZW50cnkgZm9yIHRoZSBSVEMsIGJ1dAorCQkgKiBkb24ndCBkZWZpbmUgdGhlIElSUS4gSXQgc2hvdWxkIGFsd2F5cyBiZSBzYWZlIHRvCisJCSAqIGhhcmRjb2RlIGl0IGluIHRoZXNlIGNhc2VzCisJCSAqLworCQlyZXR1cm4gY21vc19kb19wcm9iZSgmcG5wLT5kZXYsICZwbnAtPnJlcy5wb3J0X3Jlc291cmNlWzBdLCA4KTsKKwllbHNlCisJCXJldHVybiBjbW9zX2RvX3Byb2JlKCZwbnAtPmRldiwKKwkJCQkgICAgICZwbnAtPnJlcy5wb3J0X3Jlc291cmNlWzBdLAorCQkJCSAgICAgcG5wLT5yZXMuaXJxX3Jlc291cmNlWzBdLnN0YXJ0KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNtb3NfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqcG5wKQpAQCAtNjg0LDExICs3MDgsMTEgQEAKIH0KIG1vZHVsZV9leGl0KGNtb3NfZXhpdCk7CiAKLSNlbHNlCS8qIG5vIFBOUEFDUEkgKi8KKyNlbHNlCS8qIG5vIFBOUCAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBQbGF0Zm9ybSBzZXR1cCBzaG91bGQgaGF2ZSBzZXQgdXAgYW4gUlRDIGRldmljZSwgd2hlbiBQTlBBQ1BJIGlzCisvKiBQbGF0Zm9ybSBzZXR1cCBzaG91bGQgaGF2ZSBzZXQgdXAgYW4gUlRDIGRldmljZSwgd2hlbiBQTlAgaXMKICAqIHVuYXZhaWxhYmxlIC4uLiB0aGlzIGNvdWxkIGhhcHBlbiBldmVuIG9uIChvbGRlcikgUENzLgogICovCiAKQEAgLTczNCw3ICs3NTgsNyBAQAogbW9kdWxlX2V4aXQoY21vc19leGl0KTsKIAogCi0jZW5kaWYJLyogIVBOUEFDUEkgKi8KKyNlbmRpZgkvKiAhUE5QICovCiAKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIEJyb3duZWxsIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgUEMtc3R5bGUgJ0NNT1MnIFJUQ3MiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1jb3JlLmggYi9kcml2ZXJzL3J0Yy9ydGMtY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOWRmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtY29yZS5oCkBAIC0wLDAgKzEsNzAgQEAKKyNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWCisKK2V4dGVybiB2b2lkIF9faW5pdCBydGNfZGV2X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2V4aXQgcnRjX2Rldl9leGl0KHZvaWQpOworZXh0ZXJuIHZvaWQgcnRjX2Rldl9wcmVwYXJlKHN0cnVjdCBydGNfZGV2aWNlICpydGMpOworZXh0ZXJuIHZvaWQgcnRjX2Rldl9hZGRfZGV2aWNlKHN0cnVjdCBydGNfZGV2aWNlICpydGMpOworZXh0ZXJuIHZvaWQgcnRjX2Rldl9kZWxfZGV2aWNlKHN0cnVjdCBydGNfZGV2aWNlICpydGMpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRjX2Rldl9pbml0KHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGNfZGV2X2V4aXQodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0Y19kZXZfcHJlcGFyZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRjX2Rldl9hZGRfZGV2aWNlKHN0cnVjdCBydGNfZGV2aWNlICpydGMpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGNfZGV2X2RlbF9kZXZpY2Uoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKK3sKK30KKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUlRDX0lOVEZfUFJPQworCitleHRlcm4gdm9pZCBydGNfcHJvY19hZGRfZGV2aWNlKHN0cnVjdCBydGNfZGV2aWNlICpydGMpOworZXh0ZXJuIHZvaWQgcnRjX3Byb2NfZGVsX2RldmljZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHJ0Y19wcm9jX2FkZF9kZXZpY2Uoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0Y19wcm9jX2RlbF9kZXZpY2Uoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKK3sKK30KKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUlRDX0lOVEZfU1lTRlMKKworZXh0ZXJuIHZvaWQgX19pbml0IHJ0Y19zeXNmc19pbml0KHN0cnVjdCBjbGFzcyAqKTsKK2V4dGVybiB2b2lkIHJ0Y19zeXNmc19hZGRfZGV2aWNlKHN0cnVjdCBydGNfZGV2aWNlICpydGMpOworZXh0ZXJuIHZvaWQgcnRjX3N5c2ZzX2RlbF9kZXZpY2Uoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yyk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGNfc3lzZnNfaW5pdChzdHJ1Y3QgY2xhc3MgKnJ0YykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0Y19zeXNmc19hZGRfZGV2aWNlKHN0cnVjdCBydGNfZGV2aWNlICpydGMpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGNfc3lzZnNfZGVsX2RldmljZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQoreworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwppbmRleCAxMzczMzBiLi5mNGU1ZjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCkBAIC0xMyw4ICsxMyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlICJydGMtY29yZS5oIgogCi1zdGF0aWMgc3RydWN0IGNsYXNzICpydGNfZGV2X2NsYXNzOwogc3RhdGljIGRldl90IHJ0Y19kZXZ0OwogCiAjZGVmaW5lIFJUQ19ERVZfTUFYIDE2IC8qIDE2IFJUQ3Mgc2hvdWxkIGJlIGVub3VnaCBmb3IgZXZlcnlvbmUuLi4gKi8KQEAgLTMyLDkgKzMyLDkgQEAKIAlpZiAoIShtdXRleF90cnlsb2NrKCZydGMtPmNoYXJfbG9jaykpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gJnJ0Yy0+Y2xhc3NfZGV2OworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHJ0YzsKIAotCWVyciA9IG9wcy0+b3BlbiA/IG9wcy0+b3BlbihydGMtPmNsYXNzX2Rldi5kZXYpIDogMDsKKwllcnIgPSBvcHMtPm9wZW4gPyBvcHMtPm9wZW4ocnRjLT5kZXYucGFyZW50KSA6IDA7CiAJaWYgKGVyciA9PSAwKSB7CiAJCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOwogCQlydGMtPmlycV9kYXRhID0gMDsKQEAgLTYxLDcgKzYxLDcgQEAKIAlpbnQgbnVtID0gMDsKIAlpbnQgZXJyOwogCi0JZXJyID0gcnRjX3JlYWRfdGltZSgmcnRjLT5jbGFzc19kZXYsICZ0bSk7CisJZXJyID0gcnRjX3JlYWRfdGltZShydGMsICZ0bSk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXNwaW5fbG9jaygmcnRjLT5pcnFfbG9jayk7CkBAIC03OSw3ICs3OSw3IEBACiAJfQogCXNwaW5fdW5sb2NrKCZydGMtPmlycV9sb2NrKTsKIAlpZiAobnVtKQotCQlydGNfdXBkYXRlX2lycSgmcnRjLT5jbGFzc19kZXYsIG51bSwgUlRDX1VGIHwgUlRDX0lSUUYpOworCQlydGNfdXBkYXRlX2lycShydGMsIG51bSwgUlRDX1VGIHwgUlRDX0lSUUYpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KIHN0YXRpYyB2b2lkIHJ0Y191aWVfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtMTIxLDcgKzEyMSw3IEBACiAJc3RydWN0IHJ0Y190aW1lIHRtOwogCWludCBlcnI7CiAKLQllcnIgPSBydGNfcmVhZF90aW1lKCZydGMtPmNsYXNzX2RldiwgJnRtKTsKKwllcnIgPSBydGNfcmVhZF90aW1lKHJ0YywgJnRtKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJaWYgKHJldCA9PSAwKSB7CiAJCS8qIENoZWNrIGZvciBhbnkgZGF0YSB1cGRhdGVzICovCiAJCWlmIChydGMtPm9wcy0+cmVhZF9jYWxsYmFjaykKLQkJCWRhdGEgPSBydGMtPm9wcy0+cmVhZF9jYWxsYmFjayhydGMtPmNsYXNzX2Rldi5kZXYsCisJCQlkYXRhID0gcnRjLT5vcHMtPnJlYWRfY2FsbGJhY2socnRjLT5kZXYucGFyZW50LAogCQkJCQkJICAgICAgIGRhdGEpOwogCiAJCWlmIChzaXplb2YoaW50KSAhPSBzaXplb2YobG9uZykgJiYKQEAgLTIxMCw4ICsyMTAsNyBAQAogCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHRvX3J0Y19kZXZpY2UoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzICpvcHMgPSBydGMtPm9wczsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAJc3RydWN0IHJ0Y193a2Fscm0gYWxhcm07CkBAIC0yNTIsNyArMjUxLDcgQEAKIAogCS8qIHRyeSB0aGUgZHJpdmVyJ3MgaW9jdGwgaW50ZXJmYWNlICovCiAJaWYgKG9wcy0+aW9jdGwpIHsKLQkJZXJyID0gb3BzLT5pb2N0bChjbGFzc19kZXYtPmRldiwgY21kLCBhcmcpOworCQllcnIgPSBvcHMtPmlvY3RsKHJ0Yy0+ZGV2LnBhcmVudCwgY21kLCBhcmcpOwogCQlpZiAoZXJyICE9IC1FTk9JT0NUTENNRCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMjY0LDcgKzI2Myw3IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUlRDX0FMTV9SRUFEOgotCQllcnIgPSBydGNfcmVhZF9hbGFybShjbGFzc19kZXYsICZhbGFybSk7CisJCWVyciA9IHJ0Y19yZWFkX2FsYXJtKHJ0YywgJmFsYXJtKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCkBAIC0yNzgsMTcgKzI3Nyw1MyBAQAogCiAJCWFsYXJtLmVuYWJsZWQgPSAwOwogCQlhbGFybS5wZW5kaW5nID0gMDsKLQkJYWxhcm0udGltZS50bV9tZGF5ID0gLTE7Ci0JCWFsYXJtLnRpbWUudG1fbW9uID0gLTE7Ci0JCWFsYXJtLnRpbWUudG1feWVhciA9IC0xOwogCQlhbGFybS50aW1lLnRtX3dkYXkgPSAtMTsKIAkJYWxhcm0udGltZS50bV95ZGF5ID0gLTE7CiAJCWFsYXJtLnRpbWUudG1faXNkc3QgPSAtMTsKLQkJZXJyID0gcnRjX3NldF9hbGFybShjbGFzc19kZXYsICZhbGFybSk7CisKKwkJLyogUlRDX0FMTV9TRVQgYWxhcm1zIG1heSBiZSB1cCB0byAyNCBob3VycyBpbiB0aGUgZnV0dXJlLgorCQkgKiBSYXRoZXIgdGhhbiBleHBlY3RpbmcgZXZlcnkgUlRDIHRvIGltcGxlbWVudCAiZG9uJ3QgY2FyZSIKKwkJICogZm9yIGRheS9tb250aC95ZWFyIGZpZWxkcywganVzdCBmb3JjZSB0aGUgYWxhcm0gdG8gaGF2ZQorCQkgKiB0aGUgcmlnaHQgdmFsdWVzIGZvciB0aG9zZSBmaWVsZHMuCisJCSAqCisJCSAqIFJUQ19XS0FMTV9TRVQgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4gIE5vdCBvbmx5IGRvZXMgaXQKKwkJICogZWxpbWluYXRlIHRoZSBuZWVkIGZvciBhIHNlcGFyYXRlIFJUQ19BSUVfT04gY2FsbCwgaXQKKwkJICogZG9lc24ndCBoYXZlIHRoZSAiYWxhcm0gMjM6NTk6NTkgaW4gdGhlIGZ1dHVyZSIgcmFjZS4KKwkJICoKKwkJICogTk9URTogIHNvbWUgbGVnYWN5IGNvZGUgbWF5IGhhdmUgdXNlZCBpbnZhbGlkIGZpZWxkcyBhcworCQkgKiB3aWxkY2FyZHMsIGV4cG9zaW5nIGhhcmR3YXJlICJwZXJpb2RpYyBhbGFybSIgY2FwYWJpbGl0aWVzLgorCQkgKiBOb3Qgc3VwcG9ydGVkIGhlcmUuCisJCSAqLworCQl7CisJCQl1bnNpZ25lZCBsb25nIG5vdywgdGhlbjsKKworCQkJZXJyID0gcnRjX3JlYWRfdGltZShydGMsICZ0bSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJcnRjX3RtX3RvX3RpbWUoJnRtLCAmbm93KTsKKworCQkJYWxhcm0udGltZS50bV9tZGF5ID0gdG0udG1fbWRheTsKKwkJCWFsYXJtLnRpbWUudG1fbW9uID0gdG0udG1fbW9uOworCQkJYWxhcm0udGltZS50bV95ZWFyID0gdG0udG1feWVhcjsKKwkJCWVyciAgPSBydGNfdmFsaWRfdG0oJmFsYXJtLnRpbWUpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJCXJ0Y190bV90b190aW1lKCZhbGFybS50aW1lLCAmdGhlbik7CisKKwkJCS8qIGFsYXJtIG1heSBuZWVkIHRvIHdyYXAgaW50byB0b21vcnJvdyAqLworCQkJaWYgKHRoZW4gPCBub3cpIHsKKwkJCQlydGNfdGltZV90b190bShub3cgKyAyNCAqIDYwICogNjAsICZ0bSk7CisJCQkJYWxhcm0udGltZS50bV9tZGF5ID0gdG0udG1fbWRheTsKKwkJCQlhbGFybS50aW1lLnRtX21vbiA9IHRtLnRtX21vbjsKKwkJCQlhbGFybS50aW1lLnRtX3llYXIgPSB0bS50bV95ZWFyOworCQkJfQorCQl9CisKKwkJZXJyID0gcnRjX3NldF9hbGFybShydGMsICZhbGFybSk7CiAJCWJyZWFrOwogCiAJY2FzZSBSVENfUkRfVElNRToKLQkJZXJyID0gcnRjX3JlYWRfdGltZShjbGFzc19kZXYsICZ0bSk7CisJCWVyciA9IHJ0Y19yZWFkX3RpbWUocnRjLCAmdG0pOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAKQEAgLTMwMCw3ICszMzUsNyBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJnRtLCB1YXJnLCBzaXplb2YodG0pKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWVyciA9IHJ0Y19zZXRfdGltZShjbGFzc19kZXYsICZ0bSk7CisJCWVyciA9IHJ0Y19zZXRfdGltZShydGMsICZ0bSk7CiAJCWJyZWFrOwogCiAJY2FzZSBSVENfSVJRUF9SRUFEOgpAQCAtMzEwLDcgKzM0NSw3IEBACiAKIAljYXNlIFJUQ19JUlFQX1NFVDoKIAkJaWYgKG9wcy0+aXJxX3NldF9mcmVxKQotCQkJZXJyID0gcnRjX2lycV9zZXRfZnJlcShjbGFzc19kZXYsIHJ0Yy0+aXJxX3Rhc2ssIGFyZyk7CisJCQllcnIgPSBydGNfaXJxX3NldF9mcmVxKHJ0YywgcnRjLT5pcnFfdGFzaywgYXJnKTsKIAkJYnJlYWs7CiAKICNpZiAwCkBAIC0zMzYsMTEgKzM3MSwxMSBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmFsYXJtLCB1YXJnLCBzaXplb2YoYWxhcm0pKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWVyciA9IHJ0Y19zZXRfYWxhcm0oY2xhc3NfZGV2LCAmYWxhcm0pOworCQllcnIgPSBydGNfc2V0X2FsYXJtKHJ0YywgJmFsYXJtKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJUQ19XS0FMTV9SRDoKLQkJZXJyID0gcnRjX3JlYWRfYWxhcm0oY2xhc3NfZGV2LCAmYWxhcm0pOworCQllcnIgPSBydGNfcmVhZF9hbGFybShydGMsICZhbGFybSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIApAQCAtMzcyLDcgKzQwNyw3IEBACiAJY2xlYXJfdWllKHJ0Yyk7CiAjZW5kaWYKIAlpZiAocnRjLT5vcHMtPnJlbGVhc2UpCi0JCXJ0Yy0+b3BzLT5yZWxlYXNlKHJ0Yy0+Y2xhc3NfZGV2LmRldik7CisJCXJ0Yy0+b3BzLT5yZWxlYXNlKHJ0Yy0+ZGV2LnBhcmVudCk7CiAKIAltdXRleF91bmxvY2soJnJ0Yy0+Y2hhcl9sb2NrKTsKIAlyZXR1cm4gMDsKQEAgLTM5NywxNyArNDMyLDE4IEBACiAKIC8qIGluc2VydGlvbi9yZW1vdmFsIGhvb2tzICovCiAKLXN0YXRpYyBpbnQgcnRjX2Rldl9hZGRfZGV2aWNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKLQkJCQlzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICpjbGFzc19pbnRmKQordm9pZCBydGNfZGV2X3ByZXBhcmUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKIHsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gdG9fcnRjX2RldmljZShjbGFzc19kZXYpOworCWlmICghcnRjX2RldnQpCisJCXJldHVybjsKIAogCWlmIChydGMtPmlkID49IFJUQ19ERVZfTUFYKSB7Ci0JCWRldl9lcnIoY2xhc3NfZGV2LT5kZXYsICJ0b28gbWFueSBSVENzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXByX2RlYnVnKCIlczogdG9vIG1hbnkgUlRDIGRldmljZXNcbiIsIHJ0Yy0+bmFtZSk7CisJCXJldHVybjsKIAl9CiAKKwlydGMtPmRldi5kZXZ0ID0gTUtERVYoTUFKT1IocnRjX2RldnQpLCBydGMtPmlkKTsKKwogCW11dGV4X2luaXQoJnJ0Yy0+Y2hhcl9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcnRjLT5pcnFfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcnRjLT5pcnFfcXVldWUpOwpAQCAtNDE4LDEwMCArNDU0LDM2IEBACiAKIAljZGV2X2luaXQoJnJ0Yy0+Y2hhcl9kZXYsICZydGNfZGV2X2ZvcHMpOwogCXJ0Yy0+Y2hhcl9kZXYub3duZXIgPSBydGMtPm93bmVyOwotCi0JaWYgKGNkZXZfYWRkKCZydGMtPmNoYXJfZGV2LCBNS0RFVihNQUpPUihydGNfZGV2dCksIHJ0Yy0+aWQpLCAxKSkgewotCQlkZXZfZXJyKGNsYXNzX2Rldi0+ZGV2LAotCQkJImZhaWxlZCB0byBhZGQgY2hhciBkZXZpY2UgJWQ6JWRcbiIsCi0JCQlNQUpPUihydGNfZGV2dCksIHJ0Yy0+aWQpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlydGMtPnJ0Y19kZXYgPSBjbGFzc19kZXZpY2VfY3JlYXRlKHJ0Y19kZXZfY2xhc3MsIE5VTEwsCi0JCQkJCQlNS0RFVihNQUpPUihydGNfZGV2dCksIHJ0Yy0+aWQpLAotCQkJCQkJY2xhc3NfZGV2LT5kZXYsICJydGMlZCIsIHJ0Yy0+aWQpOwotCWlmIChJU19FUlIocnRjLT5ydGNfZGV2KSkgewotCQlkZXZfZXJyKGNsYXNzX2Rldi0+ZGV2LCAiY2Fubm90IGNyZWF0ZSBydGNfZGV2IGRldmljZVxuIik7Ci0JCWVyciA9IFBUUl9FUlIocnRjLT5ydGNfZGV2KTsKLQkJZ290byBlcnJfY2Rldl9kZWw7Ci0JfQotCi0JZGV2X2RiZyhjbGFzc19kZXYtPmRldiwgInJ0YyBpbnRmOiBkZXYgKCVkOiVkKVxuIiwKLQkJTUFKT1IocnRjLT5ydGNfZGV2LT5kZXZ0KSwKLQkJTUlOT1IocnRjLT5ydGNfZGV2LT5kZXZ0KSk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2NkZXZfZGVsOgotCi0JY2Rldl9kZWwoJnJ0Yy0+Y2hhcl9kZXYpOwotCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0Y19kZXZfcmVtb3ZlX2RldmljZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsCi0JCQkJCXN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKmNsYXNzX2ludGYpCit2b2lkIHJ0Y19kZXZfYWRkX2RldmljZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQogewotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSB0b19ydGNfZGV2aWNlKGNsYXNzX2Rldik7Ci0KLQlpZiAocnRjLT5ydGNfZGV2KSB7Ci0JCWRldl9kYmcoY2xhc3NfZGV2LT5kZXYsICJyZW1vdmluZyBjaGFyICVkOiVkXG4iLAotCQkJTUFKT1IocnRjLT5ydGNfZGV2LT5kZXZ0KSwKLQkJCU1JTk9SKHJ0Yy0+cnRjX2Rldi0+ZGV2dCkpOwotCi0JCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKHJ0Yy0+cnRjX2Rldik7Ci0JCWNkZXZfZGVsKCZydGMtPmNoYXJfZGV2KTsKLQl9CisJaWYgKGNkZXZfYWRkKCZydGMtPmNoYXJfZGV2LCBydGMtPmRldi5kZXZ0LCAxKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byBhZGQgY2hhciBkZXZpY2UgJWQ6JWRcbiIsCisJCQlydGMtPm5hbWUsIE1BSk9SKHJ0Y19kZXZ0KSwgcnRjLT5pZCk7CisJZWxzZQorCQlwcl9kZWJ1ZygiJXM6IGRldiAoJWQ6JWQpXG4iLCBydGMtPm5hbWUsCisJCQlNQUpPUihydGNfZGV2dCksIHJ0Yy0+aWQpOwogfQogCi0vKiBpbnRlcmZhY2UgcmVnaXN0cmF0aW9uICovCit2b2lkIHJ0Y19kZXZfZGVsX2RldmljZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQoreworCWlmIChydGMtPmRldi5kZXZ0KQorCQljZGV2X2RlbCgmcnRjLT5jaGFyX2Rldik7Cit9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlIHJ0Y19kZXZfaW50ZXJmYWNlID0gewotCS5hZGQgPSAmcnRjX2Rldl9hZGRfZGV2aWNlLAotCS5yZW1vdmUgPSAmcnRjX2Rldl9yZW1vdmVfZGV2aWNlLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcnRjX2Rldl9pbml0KHZvaWQpCit2b2lkIF9faW5pdCBydGNfZGV2X2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JcnRjX2Rldl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInJ0Yy1kZXYiKTsKLQlpZiAoSVNfRVJSKHJ0Y19kZXZfY2xhc3MpKQotCQlyZXR1cm4gUFRSX0VSUihydGNfZGV2X2NsYXNzKTsKLQogCWVyciA9IGFsbG9jX2NocmRldl9yZWdpb24oJnJ0Y19kZXZ0LCAwLCBSVENfREVWX01BWCwgInJ0YyIpOwotCWlmIChlcnIgPCAwKSB7CisJaWYgKGVyciA8IDApCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBjaGFyIGRldiByZWdpb25cbiIsCiAJCQlfX0ZJTEVfXyk7Ci0JCWdvdG8gZXJyX2Rlc3Ryb3lfY2xhc3M7Ci0JfQotCi0JZXJyID0gcnRjX2ludGVyZmFjZV9yZWdpc3RlcigmcnRjX2Rldl9pbnRlcmZhY2UpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciB0aGUgaW50ZXJmYWNlXG4iLAotCQkJX19GSUxFX18pOwotCQlnb3RvIGVycl91bnJlZ2lzdGVyX2NocmRldjsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX3VucmVnaXN0ZXJfY2hyZGV2OgotCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihydGNfZGV2dCwgUlRDX0RFVl9NQVgpOwotCi1lcnJfZGVzdHJveV9jbGFzczoKLQljbGFzc19kZXN0cm95KHJ0Y19kZXZfY2xhc3MpOwotCi0JcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHJ0Y19kZXZfZXhpdCh2b2lkKQordm9pZCBfX2V4aXQgcnRjX2Rldl9leGl0KHZvaWQpCiB7Ci0JY2xhc3NfaW50ZXJmYWNlX3VucmVnaXN0ZXIoJnJ0Y19kZXZfaW50ZXJmYWNlKTsKLQljbGFzc19kZXN0cm95KHJ0Y19kZXZfY2xhc3MpOwotCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihydGNfZGV2dCwgUlRDX0RFVl9NQVgpOworCWlmIChydGNfZGV2dCkKKwkJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKHJ0Y19kZXZ0LCBSVENfREVWX01BWCk7CiB9Ci0KLXN1YnN5c19pbml0Y2FsbChydGNfZGV2X2luaXQpOwotbW9kdWxlX2V4aXQocnRjX2Rldl9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJUQyBjbGFzcyBkZXYgaW50ZXJmYWNlIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMKaW5kZXggZTI3MTc2Yy4uYWZhNjRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJCWV2ZW50cyB8PSBSVENfVUY7CiAJZWxzZQogCQlldmVudHMgfD0gUlRDX0FGOwotCXJ0Y191cGRhdGVfaXJxKCZwZGF0YS0+cnRjLT5jbGFzc19kZXYsIDEsIGV2ZW50cyk7CisJcnRjX3VwZGF0ZV9pcnEocGRhdGEtPnJ0YywgMSwgZXZlbnRzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1saWIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1saWIuYwppbmRleCA3YmJjMjZhLi5iYTc5NWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbGliLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWxpYi5jCkBAIC0xMTcsODUgKzExNyw0IEBACiB9CiBFWFBPUlRfU1lNQk9MKHJ0Y190bV90b190aW1lKTsKIAotCi0vKiBNZXJnZSB0aGUgdmFsaWQgKGkuZS4gbm9uLW5lZ2F0aXZlKSBmaWVsZHMgb2YgYWxhcm0gaW50byB0aGUgY3VycmVudAotICogdGltZS4gIElmIHRoZSB2YWxpZCBhbGFybSBmaWVsZHMgYXJlIGVhcmxpZXIgdGhhbiB0aGUgZXF1aXZhbGVudAotICogZmllbGRzIGluIHRoZSB0aW1lLCBjYXJyeSBvbmUgaW50byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgaW52YWxpZAotICogZmllbGQsIHNvIHRoYXQgdGhlIGFsYXJtIGV4cGlyeSBpcyBpbiB0aGUgZnV0dXJlLiAgSXQgYXNzdW1lcyB0aGF0IHRoZQotICogbGVhc3Qgc2lnbmlmaWNhbnQgaW52YWxpZCBmaWVsZCBpcyBtb3JlIHNpZ25pZmljYW50IHRoYW4gdGhlIG1vc3QKLSAqIHNpZ25pZmljYW50IHZhbGlkIGZpZWxkLCBhbmQgdGhhdCB0aGUgc2Vjb25kcyBmaWVsZCBpcyB2YWxpZC4KLSAqCi0gKiBUaGlzIGlzIHVzZWQgYnkgYWxhcm1zIHRoYXQgdGFrZSByZWxhdGl2ZSAocmF0aGVyIHRoYW4gYWJzb2x1dGUpCi0gKiB0aW1lcywgYW5kL29yIGhhdmUgYSBzaW1wbGUgYmluYXJ5IHNlY29uZCBjb3VudGVyIGluc3RlYWQgb2YKLSAqIGRheS9ob3VyL21pbnV0ZS9zZWMgcmVnaXN0ZXJzLgotICovCi12b2lkIHJ0Y19tZXJnZV9hbGFybShzdHJ1Y3QgcnRjX3RpbWUgKm5vdywgc3RydWN0IHJ0Y190aW1lICphbGFybSkKLXsKLQlpbnQgKmFsYXJtcCA9ICZhbGFybS0+dG1fc2VjOwotCWludCAqdGltZXAgPSAmbm93LT50bV9zZWM7Ci0JaW50IGNhcnJ5X2ludG8sIGk7Ci0KLQkvKiBJZ25vcmUgZXZlcnl0aGluZyBwYXN0IHRoZSA2dGggZWxlbWVudCAodG1feWVhcikuICovCi0JZm9yIChpID0gNTsgaSA+IDA7IGktLSkgewotCQlpZiAoYWxhcm1wW2ldIDwgMCkKLQkJCWFsYXJtcFtpXSA9IHRpbWVwW2ldOwotCQllbHNlCi0JCQlicmVhazsKLQl9Ci0KLQkvKiBObyBjYXJyeSBuZWVkZWQgaWYgYWxsIGZpZWxkcyBhcmUgdmFsaWQuICovCi0JaWYgKGkgPT0gNSkKLQkJcmV0dXJuOwotCi0JZm9yIChjYXJyeV9pbnRvID0gaSArIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmIChhbGFybXBbaV0gPCB0aW1lcFtpXSkKLQkJCWJyZWFrOwotCi0JCWlmIChhbGFybXBbaV0gPiB0aW1lcFtpXSkKLQkJCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGNhcnJ5X2ludG8pIHsKLQkJY2FzZSAxOgotCQkJYWxhcm0tPnRtX21pbisrOwotCi0JCQlpZiAoYWxhcm0tPnRtX21pbiA8IDYwKQotCQkJCXJldHVybjsKLQotCQkJYWxhcm0tPnRtX21pbiA9IDA7Ci0JCQkvKiBmYWxsLXRocm91Z2ggKi8KLQotCQljYXNlIDI6Ci0JCQlhbGFybS0+dG1faG91cisrOwotCi0JCQlpZiAoYWxhcm0tPnRtX2hvdXIgPCA2MCkKLQkJCQlyZXR1cm47Ci0KLQkJCWFsYXJtLT50bV9ob3VyID0gMDsKLQkJCS8qIGZhbGwtdGhyb3VnaCAqLwotCi0JCWNhc2UgMzoKLQkJCWFsYXJtLT50bV9tZGF5Kys7Ci0KLQkJCWlmIChhbGFybS0+dG1fbWRheSA8PSBydGNfZGF5c19pbl9tb250aFthbGFybS0+dG1fbW9uXSkKLQkJCQlyZXR1cm47Ci0KLQkJCWFsYXJtLT50bV9tZGF5ID0gMTsKLQkJCS8qIGZhbGwtdGhyb3VnaCAqLwotCi0JCWNhc2UgNDoKLQkJCWFsYXJtLT50bV9tb24rKzsKLQotCQkJaWYgKGFsYXJtLT50bV9tb24gPD0gMTIpCi0JCQkJcmV0dXJuOwotCi0JCQlhbGFybS0+dG1fbW9uID0gMTsKLQkJCS8qIGZhbGwtdGhyb3VnaCAqLwotCi0JCWNhc2UgNToKLQkJCWFsYXJtLT50bV95ZWFyKys7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChydGNfbWVyZ2VfYWxhcm0pOwotCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMC5jIGIvZHJpdmVycy9ydGMvcnRjLW1heDY5MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWU0ZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1heDY5MDAuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIHJ0YyBjbGFzcyBkcml2ZXIgZm9yIHRoZSBNYXhpbSBNQVg2OTAwIGNoaXAKKyAqCisgKiBBdXRob3I6IERhbGUgRmFybnN3b3J0aCA8ZGFsZUBmYXJuc3dvcnRoLm9yZz4KKyAqCisgKiBiYXNlZCBvbiBwcmV2aW91c2x5IGV4aXN0aW5nIHJ0YyBjbGFzcyBkcml2ZXJzCisgKgorICogMjAwNyAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2RlZmluZSBEUlZfTkFNRSAibWF4NjkwMCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMSIKKworLyoKKyAqIHJlZ2lzdGVyIGluZGljZXMKKyAqLworI2RlZmluZSBNQVg2OTAwX1JFR19TQwkJCTAJLyogc2Vjb25kcwkwMC01OSAqLworI2RlZmluZSBNQVg2OTAwX1JFR19NTgkJCTEJLyogbWludXRlcwkwMC01OSAqLworI2RlZmluZSBNQVg2OTAwX1JFR19IUgkJCTIJLyogaG91cnMJMDAtMjMgKi8KKyNkZWZpbmUgTUFYNjkwMF9SRUdfRFQJCQkzCS8qIGRheSBvZiBtb250aAkwMC0zMSAqLworI2RlZmluZSBNQVg2OTAwX1JFR19NTwkJCTQJLyogbW9udGgJMDEtMTIgKi8KKyNkZWZpbmUgTUFYNjkwMF9SRUdfRFcJCQk1CS8qIGRheSBvZiB3ZWVrCSAxLTcgICovCisjZGVmaW5lIE1BWDY5MDBfUkVHX1lSCQkJNgkvKiB5ZWFyCQkwMC05OSAqLworI2RlZmluZSBNQVg2OTAwX1JFR19DVAkJCTcJLyogY29udHJvbCAqLworI2RlZmluZSBNQVg2OTAwX1JFR19MRU4JCQk4CisKKyNkZWZpbmUgTUFYNjkwMF9SRUdfQ1RfV1AJCSgxIDw8IDcpCS8qIFdyaXRlIFByb3RlY3QgKi8KKworLyoKKyAqIHJlZ2lzdGVyIHJlYWQvd3JpdGUgY29tbWFuZHMKKyAqLworI2RlZmluZSBNQVg2OTAwX1JFR19DT05UUk9MX1dSSVRFCTB4OGUKKyNkZWZpbmUgTUFYNjkwMF9SRUdfQlVSU1RfUkVBRAkJMHhiZgorI2RlZmluZSBNQVg2OTAwX1JFR19CVVJTVF9XUklURQkJMHhiZQorI2RlZmluZSBNQVg2OTAwX1JFR19SRVNFUlZFRF9SRUFECTB4OTYKKworI2RlZmluZSBNQVg2OTAwX0lETEVfVElNRV9BRlRFUl9XUklURQkzCS8qIHNwZWNpZmljYXRpb24gc2F5cyAyLjUgbVMgKi8KKworI2RlZmluZSBNQVg2OTAwX0kyQ19BRERSCQkweGEwCisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJTUFYNjkwMF9JMkNfQUREUiA+PiAxLAorCUkyQ19DTElFTlRfRU5ECit9OworCitJMkNfQ0xJRU5UX0lOU01PRDsJCQkvKiBkZWZpbmVzIGFkZHJfZGF0YSAqLworCitzdGF0aWMgaW50IG1heDY5MDBfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpOworCitzdGF0aWMgaW50IG1heDY5MDBfaTJjX3JlYWRfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqYnVmKQoreworCXU4IHJlZ19hZGRyWzFdID0geyBNQVg2OTAwX1JFR19CVVJTVF9SRUFEIH07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXSA9IHsKKwkJeworCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MJPSAwLCAvKiB3cml0ZSAqLworCQkJLmxlbgk9IHNpemVvZihyZWdfYWRkciksCisJCQkuYnVmCT0gcmVnX2FkZHIKKwkJfSwKKwkJeworCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MJPSBJMkNfTV9SRCwKKwkJCS5sZW4JPSBNQVg2OTAwX1JFR19MRU4sCisJCQkuYnVmCT0gYnVmCisJCX0KKwl9OworCWludCByYzsKKworCXJjID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CisJaWYgKHJjICE9IEFSUkFZX1NJWkUobXNncykpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcmVnaXN0ZXIgcmVhZCBmYWlsZWRcbiIsCisJCQlfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4NjkwMF9pMmNfd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb25zdCAqYnVmKQoreworCXU4IGkyY19idWZbTUFYNjkwMF9SRUdfTEVOICsgMV0gPSB7IE1BWDY5MDBfUkVHX0JVUlNUX1dSSVRFIH07CisJc3RydWN0IGkyY19tc2cgbXNnc1sxXSA9IHsKKwkJeworCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MJPSAwLCAvKiB3cml0ZSAqLworCQkJLmxlbgk9IE1BWDY5MDBfUkVHX0xFTiArIDEsCisJCQkuYnVmCT0gaTJjX2J1ZgorCQl9CisJfTsKKwlpbnQgcmM7CisKKwltZW1jcHkoJmkyY19idWZbMV0sIGJ1ZiwgTUFYNjkwMF9SRUdfTEVOKTsKKworCXJjID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CisJaWYgKHJjICE9IEFSUkFZX1NJWkUobXNncykpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcmVnaXN0ZXIgd3JpdGUgZmFpbGVkXG4iLAorCQkJX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCW1zbGVlcChNQVg2OTAwX0lETEVfVElNRV9BRlRFUl9XUklURSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4NjkwMF9pMmNfdmFsaWRhdGVfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJdTggcmVnc1tNQVg2OTAwX1JFR19MRU5dOworCXU4IHplcm9fbWFza1tNQVg2OTAwX1JFR19MRU5dID0geworCQkweDgwLAkvKiBzZWNvbmRzICovCisJCTB4ODAsCS8qIG1pbnV0ZXMgKi8KKwkJMHg0MCwJLyogaG91cnMgKi8KKwkJMHhjMCwJLyogZGF5IG9mIG1vbnRoICovCisJCTB4ZTAsCS8qIG1vbnRoICovCisJCTB4ZjgsCS8qIGRheSBvZiB3ZWVrICovCisJCTB4MDAsCS8qIHllYXIgKi8KKwkJMHg3ZiwJLyogY29udHJvbCAqLworCX07CisJaW50IGk7CisJaW50IHJjOworCWludCByZXNlcnZlZDsKKworCXJlc2VydmVkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUFYNjkwMF9SRUdfUkVTRVJWRURfUkVBRCk7CisJaWYgKHJlc2VydmVkICE9IDB4MDcpCisJCXJldHVybiAtRU5PREVWOworCisJcmMgPSBtYXg2OTAwX2kyY19yZWFkX3JlZ3MoY2xpZW50LCByZWdzKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYNjkwMF9SRUdfTEVOOyArK2kpIHsKKwkJaWYgKHJlZ3NbaV0gJiB6ZXJvX21hc2tbaV0pCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg2OTAwX2kyY19yZWFkX3RpbWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlpbnQgcmM7CisJdTggcmVnc1tNQVg2OTAwX1JFR19MRU5dOworCisJcmMgPSBtYXg2OTAwX2kyY19yZWFkX3JlZ3MoY2xpZW50LCByZWdzKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwl0bS0+dG1fc2VjID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX1NDXSk7CisJdG0tPnRtX21pbiA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19NTl0pOworCXRtLT50bV9ob3VyID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX0hSXSAmIDB4M2YpOworCXRtLT50bV9tZGF5ID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX0RUXSk7CisJdG0tPnRtX21vbiA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19NT10pIC0gMTsKKwl0bS0+dG1feWVhciA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19ZUl0pICsgMTAwOworCXRtLT50bV93ZGF5ID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX0RXXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg2OTAwX2kyY19jbGVhcl93cml0ZV9wcm90ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IHJjOworCXJjID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YSAoY2xpZW50LCBNQVg2OTAwX1JFR19DT05UUk9MX1dSSVRFLCAwKTsKKwlpZiAocmMgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IGNvbnRyb2wgcmVnaXN0ZXIgd3JpdGUgZmFpbGVkXG4iLAorCQkJX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heDY5MDBfaTJjX3NldF90aW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJc3RydWN0IHJ0Y190aW1lIGNvbnN0ICp0bSkKK3sKKwl1OCByZWdzW01BWDY5MDBfUkVHX0xFTl07CisJaW50IHJjOworCisJcmMgPSBtYXg2OTAwX2kyY19jbGVhcl93cml0ZV9wcm90ZWN0KGNsaWVudCk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmVnc1tNQVg2OTAwX1JFR19TQ10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOworCXJlZ3NbTUFYNjkwMF9SRUdfTU5dID0gQklOMkJDRCh0bS0+dG1fbWluKTsKKwlyZWdzW01BWDY5MDBfUkVHX0hSXSA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOworCXJlZ3NbTUFYNjkwMF9SRUdfRFRdID0gQklOMkJDRCh0bS0+dG1fbWRheSk7CisJcmVnc1tNQVg2OTAwX1JFR19NT10gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKKwlyZWdzW01BWDY5MDBfUkVHX1lSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgLSAxMDApOworCXJlZ3NbTUFYNjkwMF9SRUdfRFddID0gQklOMkJDRCh0bS0+dG1fd2RheSk7CisJcmVnc1tNQVg2OTAwX1JFR19DVF0gPSBNQVg2OTAwX1JFR19DVF9XUDsJLyogc2V0IHdyaXRlIHByb3RlY3QgKi8KKworCXJjID0gbWF4NjkwMF9pMmNfd3JpdGVfcmVncyhjbGllbnQsIHJlZ3MpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heDY5MDBfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJcmV0dXJuIG1heDY5MDBfaTJjX3JlYWRfdGltZSh0b19pMmNfY2xpZW50KGRldiksIHRtKTsKK30KKworc3RhdGljIGludCBtYXg2OTAwX3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJcmV0dXJuIG1heDY5MDBfaTJjX3NldF90aW1lKHRvX2kyY19jbGllbnQoZGV2KSwgdG0pOworfQorCitzdGF0aWMgaW50IG1heDY5MDBfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgbWF4NjkwMF9wcm9iZSk7Cit9CisKK3N0YXRpYyBpbnQgbWF4NjkwMF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKmNvbnN0IHJ0YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKHJ0YykKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisKKwlyZXR1cm4gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDY5MDBfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSVl9OQU1FLAorCX0sCisJLmlkCQk9IEkyQ19EUklWRVJJRF9NQVg2OTAwLAorCS5hdHRhY2hfYWRhcHRlciA9IG1heDY5MDBfYXR0YWNoX2FkYXB0ZXIsCisJLmRldGFjaF9jbGllbnQJPSBtYXg2OTAwX2RldGFjaF9jbGllbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbWF4NjkwMF9ydGNfb3BzID0geworCS5yZWFkX3RpbWUJPSBtYXg2OTAwX3J0Y19yZWFkX3RpbWUsCisJLnNldF90aW1lCT0gbWF4NjkwMF9ydGNfc2V0X3RpbWUsCit9OworCitzdGF0aWMgaW50IG1heDY5MDBfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gTlVMTDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgeworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbG91dDsKKwl9CisKKwljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbG91dDsKKwl9CisKKwljbGllbnQtPmFkZHIgPSBhZGRyOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5kcml2ZXIgPSAmbWF4NjkwMF9kcml2ZXI7CisJc3RybGNweShjbGllbnQtPm5hbWUsIERSVl9OQU1FLCBJMkNfTkFNRV9TSVpFKTsKKworCWlmIChraW5kIDwgMCkgeworCQlyYyA9IG1heDY5MDBfaTJjX3ZhbGlkYXRlX2NsaWVudChjbGllbnQpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBmYWlsb3V0OworCX0KKworCXJjID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGZhaWxvdXQ7CisKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsCisJCSAiY2hpcCBmb3VuZCwgZHJpdmVyIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKKworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIobWF4NjkwMF9kcml2ZXIuZHJpdmVyLm5hbWUsCisJCQkJICAmY2xpZW50LT5kZXYsCisJCQkJICAmbWF4NjkwMF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKSB7CisJCXJjID0gUFRSX0VSUihydGMpOworCQlnb3RvIGZhaWxvdXRfZGV0YWNoOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHJ0Yyk7CisKKwlyZXR1cm4gMDsKKworZmFpbG91dF9kZXRhY2g6CisJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKK2ZhaWxvdXQ6CisJa2ZyZWUoY2xpZW50KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1heDY5MDBfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmbWF4NjkwMF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4NjkwMF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm1heDY5MDBfZHJpdmVyKTsKK30KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXhpbSBNQVg2OTAwIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKKworbW9kdWxlX2luaXQobWF4NjkwMF9pbml0KTsKK21vZHVsZV9leGl0KG1heDY5MDBfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCA5ZGU4ZDY3Li5hMmY4NGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCS8qIG5vdyB3ZSBoYXZlIH4xNSB1c2VjIHRvIHJlYWQvd3JpdGUgdmFyaW91cyByZWdpc3RlcnMgKi8KIH0KIAotc3RhdGljIGlycXJldHVybl90IHJ0Y19pcnEoaW50IGlycSwgdm9pZCAqY2xhc3NfZGV2KQorc3RhdGljIGlycXJldHVybl90IHJ0Y19pcnEoaW50IGlycSwgdm9pZCAqcnRjKQogewogCXVuc2lnbmVkIGxvbmcJCWV2ZW50cyA9IDA7CiAJdTgJCQlpcnFfZGF0YTsKQEAgLTE0MSw3ICsxNDEsNyBAQAogCWlmIChpcnFfZGF0YSAmIE9NQVBfUlRDX1NUQVRVU18xU19FVkVOVCkKIAkJZXZlbnRzIHw9IFJUQ19JUlFGIHwgUlRDX1VGOwogCi0JcnRjX3VwZGF0ZV9pcnEoY2xhc3NfZGV2LCAxLCBldmVudHMpOworCXJ0Y191cGRhdGVfaXJxKHJ0YywgMSwgZXZlbnRzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTI4OSwzNCArMjg5LDYgQEAKIHsKIAl1OCByZWc7CiAKLQkvKiBNdWNoIHVzZXJzcGFjZSBjb2RlIHVzZXMgUlRDX0FMTV9TRVQsIHRodXMgImRvbid0IGNhcmUiIGZvcgotCSAqIGRheS9tb250aC95ZWFyIHNwZWNpZmllcyBhbGFybXMgdXAgdG8gMjQgaG91cnMgaW4gdGhlIGZ1dHVyZS4KLQkgKiBTbyB3ZSBuZWVkIHRvIGhhbmRsZSB0aGF0IC4uLiBidXQgbGV0J3MgaWdub3JlIHRoZSAiZG9uJ3QgY2FyZSIKLQkgKiB2YWx1ZXMgZm9yIGhvdXJzL21pbnV0ZXMvc2Vjb25kcy4KLQkgKi8KLQlpZiAoYWxtLT50aW1lLnRtX21kYXkgPD0gMAotCQkJJiYgYWxtLT50aW1lLnRtX21vbiA8IDAKLQkJCSYmIGFsbS0+dGltZS50bV95ZWFyIDwgMCkgewotCQlzdHJ1Y3QgcnRjX3RpbWUgdG07Ci0JCXVuc2lnbmVkIGxvbmcgbm93LCB0aGVuOwotCi0JCW9tYXBfcnRjX3JlYWRfdGltZShkZXYsICZ0bSk7Ci0JCXJ0Y190bV90b190aW1lKCZ0bSwgJm5vdyk7Ci0KLQkJYWxtLT50aW1lLnRtX21kYXkgPSB0bS50bV9tZGF5OwotCQlhbG0tPnRpbWUudG1fbW9uID0gdG0udG1fbW9uOwotCQlhbG0tPnRpbWUudG1feWVhciA9IHRtLnRtX3llYXI7Ci0JCXJ0Y190bV90b190aW1lKCZhbG0tPnRpbWUsICZ0aGVuKTsKLQotCQkvKiBzb21ldGltZXMgdGhlIGFsYXJtIHdyYXBzIGludG8gdG9tb3Jyb3cgKi8KLQkJaWYgKHRoZW4gPCBub3cpIHsKLQkJCXJ0Y190aW1lX3RvX3RtKG5vdyArIDI0ICogNjAgKiA2MCwgJnRtKTsKLQkJCWFsbS0+dGltZS50bV9tZGF5ID0gdG0udG1fbWRheTsKLQkJCWFsbS0+dGltZS50bV9tb24gPSB0bS50bV9tb247Ci0JCQlhbG0tPnRpbWUudG1feWVhciA9IHRtLnRtX3llYXI7Ci0JCX0KLQl9Ci0KIAlpZiAodG0yYmNkKCZhbG0tPnRpbWUpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTM5OSw3ICszNzEsNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7Ci0JY2xhc3Nfc2V0X2RldmRhdGEoJnJ0Yy0+Y2xhc3NfZGV2LCBtZW0pOworCWRldl9zZXRfZHJ2ZGF0YSgmcnRjLT5kZXYsIG1lbSk7CiAKIAkvKiBjbGVhciBwZW5kaW5nIGlycXMsIGFuZCBzZXQgMS9zZWNvbmQgcGVyaW9kaWMsCiAJICogd2hpY2ggd2UnbGwgdXNlIGluc3RlYWQgb2YgdXBkYXRlIGlycXMKQEAgLTQxOCwxMyArMzkwLDEzIEBACiAKIAkvKiBoYW5kbGUgcGVyaW9kaWMgYW5kIGFsYXJtIGlycXMgKi8KIAlpZiAocmVxdWVzdF9pcnEob21hcF9ydGNfdGltZXIsIHJ0Y19pcnEsIElSUUZfRElTQUJMRUQsCi0JCQlydGMtPmNsYXNzX2Rldi5jbGFzc19pZCwgJnJ0Yy0+Y2xhc3NfZGV2KSkgeworCQkJcnRjLT5kZXYuYnVzX2lkLCBydGMpKSB7CiAJCXByX2RlYnVnKCIlczogUlRDIHRpbWVyIGludGVycnVwdCBJUlElZCBhbHJlYWR5IGNsYWltZWRcbiIsCiAJCQlwZGV2LT5uYW1lLCBvbWFwX3J0Y190aW1lcik7CiAJCWdvdG8gZmFpbDA7CiAJfQogCWlmIChyZXF1ZXN0X2lycShvbWFwX3J0Y19hbGFybSwgcnRjX2lycSwgSVJRRl9ESVNBQkxFRCwKLQkJCXJ0Yy0+Y2xhc3NfZGV2LmNsYXNzX2lkLCAmcnRjLT5jbGFzc19kZXYpKSB7CisJCQlydGMtPmRldi5idXNfaWQsIHJ0YykpIHsKIAkJcHJfZGVidWcoIiVzOiBSVEMgYWxhcm0gaW50ZXJydXB0IElSUSVkIGFscmVhZHkgY2xhaW1lZFxuIiwKIAkJCXBkZXYtPm5hbWUsIG9tYXBfcnRjX2FsYXJtKTsKIAkJZ290byBmYWlsMTsKQEAgLTQ4MSwyNiArNDUzLDE3IEBACiAJZnJlZV9pcnEob21hcF9ydGNfdGltZXIsIHJ0Yyk7CiAJZnJlZV9pcnEob21hcF9ydGNfYWxhcm0sIHJ0Yyk7CiAKLQlyZWxlYXNlX3Jlc291cmNlKGNsYXNzX2dldF9kZXZkYXRhKCZydGMtPmNsYXNzX2RldikpOworCXJlbGVhc2VfcmVzb3VyY2UoZGV2X2dldF9kcnZkYXRhKCZydGMtPmRldikpOwogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgcnRjX2RlbHRhOwogc3RhdGljIHU4IGlycXN0YXQ7CiAKIHN0YXRpYyBpbnQgb21hcF9ydGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHJ0Y190aW1lIHJ0Y190bTsKLQlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKLQotCXRpbWUudHZfbnNlYyA9IDA7Ci0Jb21hcF9ydGNfcmVhZF90aW1lKE5VTEwsICZydGNfdG0pOwotCXJ0Y190bV90b190aW1lKCZydGNfdG0sICZ0aW1lLnR2X3NlYyk7Ci0KLQlzYXZlX3RpbWVfZGVsdGEoJnJ0Y19kZWx0YSwgJnRpbWUpOwogCWlycXN0YXQgPSBydGNfcmVhZChPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CiAKIAkvKiBGSVhNRSB0aGUgUlRDIGFsYXJtIGlzIG5vdCBjdXJyZW50bHkgYWN0aW5nIGFzIGEgd2FrZXVwIGV2ZW50CkBAIC01MTcsMTQgKzQ4MCw2IEBACiAKIHN0YXRpYyBpbnQgb21hcF9ydGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHJ0Y190aW1lIHJ0Y190bTsKLQlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKLQotCXRpbWUudHZfbnNlYyA9IDA7Ci0Jb21hcF9ydGNfcmVhZF90aW1lKE5VTEwsICZydGNfdG0pOwotCXJ0Y190bV90b190aW1lKCZydGNfdG0sICZ0aW1lLnR2X3NlYyk7Ci0KLQlyZXN0b3JlX3RpbWVfZGVsdGEoJnJ0Y19kZWx0YSwgJnRpbWUpOwogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKIAkJZGlzYWJsZV9pcnFfd2FrZShvbWFwX3J0Y19hbGFybSk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwppbmRleCBmMTNkYWE5Li5lNGJmNjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwpAQCAtNTEsNyArNTEsNyBAQAogewogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBkZXZfaWQ7CiAKLQlydGNfdXBkYXRlX2lycSgmcnRjLT5jbGFzc19kZXYsIDEsIFJUQ19BRik7CisJcnRjX3VwZGF0ZV9pcnEocnRjLCAxLCBSVENfQUYpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKaW5kZXggMWJkNjI0Zi4uOGQzMDBlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCkBAIC0xNiwxOCArMTYsMTggQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2UgKnJ0Y19kZXYgPSBOVUxMOwotc3RhdGljIERFRklORV9NVVRFWChydGNfbG9jayk7CisjaW5jbHVkZSAicnRjLWNvcmUuaCIKKwogCiBzdGF0aWMgaW50IHJ0Y19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiA9IHNlcS0+cHJpdmF0ZTsKLQljb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyAqb3BzID0gdG9fcnRjX2RldmljZShjbGFzc19kZXYpLT5vcHM7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHNlcS0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyAqb3BzID0gcnRjLT5vcHM7CiAJc3RydWN0IHJ0Y193a2Fscm0gYWxybTsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAKLQllcnIgPSBydGNfcmVhZF90aW1lKGNsYXNzX2RldiwgJnRtKTsKKwllcnIgPSBydGNfcmVhZF90aW1lKHJ0YywgJnRtKTsKIAlpZiAoZXJyID09IDApIHsKIAkJc2VxX3ByaW50ZihzZXEsCiAJCQkicnRjX3RpbWVcdDogJTAyZDolMDJkOiUwMmRcbiIKQEAgLTM2LDcgKzM2LDcgQEAKIAkJCXRtLnRtX3llYXIgKyAxOTAwLCB0bS50bV9tb24gKyAxLCB0bS50bV9tZGF5KTsKIAl9CiAKLQllcnIgPSBydGNfcmVhZF9hbGFybShjbGFzc19kZXYsICZhbHJtKTsKKwllcnIgPSBydGNfcmVhZF9hbGFybShydGMsICZhbHJtKTsKIAlpZiAoZXJyID09IDApIHsKIAkJc2VxX3ByaW50ZihzZXEsICJhbHJtX3RpbWVcdDogIik7CiAJCWlmICgodW5zaWduZWQgaW50KWFscm0udGltZS50bV9ob3VyIDw9IDI0KQpAQCAtNzQsMTkgKzc0LDE5IEBACiAJc2VxX3ByaW50ZihzZXEsICIyNGhyXHRcdDogeWVzXG4iKTsKIAogCWlmIChvcHMtPnByb2MpCi0JCW9wcy0+cHJvYyhjbGFzc19kZXYtPmRldiwgc2VxKTsKKwkJb3BzLT5wcm9jKHJ0Yy0+ZGV2LnBhcmVudCwgc2VxKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJ0Y19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2ID0gUERFKGlub2RlKS0+ZGF0YTsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gUERFKGlub2RlKS0+ZGF0YTsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBydGNfcHJvY19zaG93LCBjbGFzc19kZXYpOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBydGNfcHJvY19zaG93LCBydGMpOwogfQogCiBzdGF0aWMgaW50IHJ0Y19wcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0xMDMsNjIgKzEwMywyMiBAQAogCS5yZWxlYXNlCT0gcnRjX3Byb2NfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBpbnQgcnRjX3Byb2NfYWRkX2RldmljZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsCi0JCQkJCXN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKmNsYXNzX2ludGYpCit2b2lkIHJ0Y19wcm9jX2FkZF9kZXZpY2Uoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKIHsKLQltdXRleF9sb2NrKCZydGNfbG9jayk7Ci0JaWYgKHJ0Y19kZXYgPT0gTlVMTCkgeworCWlmIChydGMtPmlkID09IDApIHsKIAkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CiAKLQkJcnRjX2RldiA9IGNsYXNzX2RldjsKLQogCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHJpdmVyL3J0YyIsIDAsIE5VTEwpOwogCQlpZiAoZW50KSB7Ci0JCQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gdG9fcnRjX2RldmljZShjbGFzc19kZXYpOwotCiAJCQllbnQtPnByb2NfZm9wcyA9ICZydGNfcHJvY19mb3BzOwogCQkJZW50LT5vd25lciA9IHJ0Yy0+b3duZXI7Ci0JCQllbnQtPmRhdGEgPSBjbGFzc19kZXY7Ci0KLQkJCWRldl9kYmcoY2xhc3NfZGV2LT5kZXYsICJydGMgaW50ZjogcHJvY1xuIik7CisJCQllbnQtPmRhdGEgPSBydGM7CiAJCX0KLQkJZWxzZQotCQkJcnRjX2RldiA9IE5VTEw7CiAJfQotCW11dGV4X3VubG9jaygmcnRjX2xvY2spOwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0Y19wcm9jX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAotCQkJCQlzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICpjbGFzc19pbnRmKQordm9pZCBydGNfcHJvY19kZWxfZGV2aWNlKHN0cnVjdCBydGNfZGV2aWNlICpydGMpCiB7Ci0JbXV0ZXhfbG9jaygmcnRjX2xvY2spOwotCWlmIChydGNfZGV2ID09IGNsYXNzX2RldikgeworCWlmIChydGMtPmlkID09IDApCiAJCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcnRjIiwgTlVMTCk7Ci0JCXJ0Y19kZXYgPSBOVUxMOwotCX0KLQltdXRleF91bmxvY2soJnJ0Y19sb2NrKTsKIH0KLQotc3RhdGljIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgcnRjX3Byb2NfaW50ZXJmYWNlID0gewotCS5hZGQgPSAmcnRjX3Byb2NfYWRkX2RldmljZSwKLQkucmVtb3ZlID0gJnJ0Y19wcm9jX3JlbW92ZV9kZXZpY2UsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBydGNfcHJvY19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHJ0Y19pbnRlcmZhY2VfcmVnaXN0ZXIoJnJ0Y19wcm9jX2ludGVyZmFjZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBydGNfcHJvY19leGl0KHZvaWQpCi17Ci0JY2xhc3NfaW50ZXJmYWNlX3VucmVnaXN0ZXIoJnJ0Y19wcm9jX2ludGVyZmFjZSk7Ci19Ci0KLXN1YnN5c19pbml0Y2FsbChydGNfcHJvY19pbml0KTsKLW1vZHVsZV9leGl0KHJ0Y19wcm9jX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUlRDIGNsYXNzIHByb2MgaW50ZXJmYWNlIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzMxMy5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzMTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmViMTMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzMTMuYwpAQCAtMCwwICsxLDQyMyBAQAorLyoKKyAqIFJpY29oIFJTNUMzMTMgUlRDIGRldmljZS9kcml2ZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTm9idWhpcm8gSXdhbWF0c3UKKyAqCisgKiAgMjAwNS0wOS0xOSBtb2RpZmVkIGJ5IGtvZ2lpZGVuYQorICoKKyAqIEJhc2VkIG9uIHRoZSBvbGQgZHJpdmVycy9jaGFyL3JzNWMzMTNfcnRjLmMgIGJ5OgorICogIENvcHlyaWdodCAoQykgMjAwMCBQaGlsaXBwIFJ1bXBmIDxwcnVtcGZAdHV4Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgVGV0c3V5YSBPa2FkYSAmIE5paWJlIFl1dGFrYQorICoKKyAqIEJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieSBQYXVsIEdvcnRtYWtlci4KKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYgUGF1bCBHb3J0bWFrZXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBCYXNlZCBvbiBvdGhlciBtaW5pbWFsIGNoYXIgZGV2aWNlIGRyaXZlcnMsIGxpa2UgQWxhbidzCisgKiB3YXRjaGRvZywgVGVkJ3MgcmFuZG9tLCBldGMuIGV0Yy4KKyAqCisgKgkxLjA3CVBhdWwgR29ydG1ha2VyLgorICoJMS4wOAlNaXF1ZWwgdmFuIFNtb29yZW5idXJnOiBkaXNhbGxvdyBjZXJ0YWluIHRoaW5ncyBvbiB0aGUKKyAqCQlERUMgQWxwaGEgYXMgdGhlIENNT1MgY2xvY2sgaXMgYWxzbyB1c2VkIGZvciBvdGhlciB0aGluZ3MuCisgKgkxLjA5CU5pa2l0YSBTY2htaWR0OiBlcG9jaCBzdXBwb3J0IGFuZCBzb21lIEFscGhhIGNsZWFudXAuCisgKgkxLjA5YQlQZXRlIFphaXRjZXY6IFN1biBTUEFSQworICoJMS4wOWIJSmVmZiBHYXJ6aWs6IE1vZHVsYXJpemUsIGluaXQgY2xlYW51cAorICoJMS4wOWMJSmVmZiBHYXJ6aWs6IFNNUCBjbGVhbnVwCisgKgkxLjEwICAgIFBhdWwgQmFydG9uLURhdmlzOiBhZGQgc3VwcG9ydCBmb3IgYXN5bmMgSS9PCisgKgkxLjEwYQlBbmRyZWEgQXJjYW5nZWxpOiBBbHBoYSB1cGRhdGVzCisgKgkxLjEwYglBbmRyZXcgTW9ydG9uOiBTTVAgbG9jayBmaXgKKyAqCTEuMTBjCUNlc2FyIEJhcnJvczogU01QIGxvY2tpbmcgZml4ZXMgYW5kIGNsZWFudXAKKyAqCTEuMTBkCVBhdWwgR29ydG1ha2VyOiBkZWxldGUgcGFyYW5vaWEgY2hlY2sgaW4gcnRjX2V4aXQKKyAqCTEuMTBlCU1hY2llaiBXLiBSb3p5Y2tpOiBIYW5kbGUgREVDc3RhdGlvbidzIHllYXIgd2VpcmRuZXNzLgorICogICAgICAxLjExICAgIFRha2FzaGkgSXdhaTogS2VybmVsIGFjY2VzcyBmdW5jdGlvbnMKKyAqCQkJICAgICAgcnRjX3JlZ2lzdGVyL3J0Y191bnJlZ2lzdGVyL3J0Y19jb250cm9sCisgKiAgICAgIDEuMTFhICAgRGFuaWVsZSBCZWxsdWNjaTogQXVkaXQgY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSBpbiBydGNfaW5pdAorICoJMS4xMglWZW5rYXRlc2ggUGFsbGlwYWRpOiBIb29rcyBmb3IgZW11bGF0aW5nIHJ0YyBvbiBIUEVUIGJhc2UtdGltZXIKKyAqCQlDT05GSUdfSFBFVF9FTVVMQVRFX1JUQworICoJMS4xMwlOb2J1aGlybyBJd2FtYXRzdTogVXBkYXRhIGRyaXZlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBEUlZfTkFNRQkicnM1YzMxMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gCSIxLjEzIgorCisjaWZkZWYgQ09ORklHX1NIX0xBTkRJU0sKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIExBTkRJU0sgZGVwZW5kZW5jZSBwYXJ0IG9mIFJTNUMzMTMgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTQ1NNUjEJCTB4RkZFMDAwMDAKKyNkZWZpbmUgU0NTQ1IxCQkweEZGRTAwMDA4CisjZGVmaW5lIFNDU01SMV9DQQkweDgwCisjZGVmaW5lIFNDU0NSMV9DS0UJMHgwMworI2RlZmluZSBTQ1NQVFIxCQkweEZGRTAwMDFDCisjZGVmaW5lIFNDU1BUUjFfRUlPCTB4ODAKKyNkZWZpbmUgU0NTUFRSMV9TUEIxSU8JMHgwOAorI2RlZmluZSBTQ1NQVFIxX1NQQjFEVAkweDA0CisjZGVmaW5lIFNDU1BUUjFfU1BCMElPCTB4MDIKKyNkZWZpbmUgU0NTUFRSMV9TUEIwRFQJMHgwMQorCisjZGVmaW5lIFNEQV9PRU4JCVNDU1BUUjFfU1BCMUlPCisjZGVmaW5lIFNEQQkJU0NTUFRSMV9TUEIxRFQKKyNkZWZpbmUgU0NMX09FTgkJU0NTUFRSMV9TUEIwSU8KKyNkZWZpbmUgU0NMCQlTQ1NQVFIxX1NQQjBEVAorCisvKiBSSUNPSCBSUzVDMzEzIENFIHBvcnQgKi8KKyNkZWZpbmUgUlM1QzMxM19DRQkweEIwMDAwMDAzCisKKy8qIFJJQ09IIFJTNUMzMTMgQ0UgcG9ydCBiaXQgKi8KKyNkZWZpbmUgUlM1QzMxM19DRV9SVENDRQkweDAyCisKKy8qIFNDU1BUUjEgZGF0YSAqLwordW5zaWduZWQgY2hhciBzY3NwdHIxX2RhdGE7CisKKyNkZWZpbmUgUlM1QzMxM19DRUVOQUJMRSAgICBjdHJsX291dGIoUlM1QzMxM19DRV9SVENDRSwgUlM1QzMxM19DRSk7CisjZGVmaW5lIFJTNUMzMTNfQ0VESVNBQkxFICAgY3RybF9vdXRiKDB4MDAsIFJTNUMzMTNfQ0UpCisjZGVmaW5lIFJTNUMzMTNfTUlTQ09QICAgICAgY3RybF9vdXRiKDB4MDIsIDB4QjAwMDAwMDgpCisKK3N0YXRpYyB2b2lkIHJzNWMzMTNfaW5pdF9wb3J0KHZvaWQpCit7CisJLyogU2V0IFNDSyBhcyBJL08gcG9ydCBhbmQgSW5pdGlhbGl6ZSBTQ1NQVFIxIGRhdGEgJiBJL08gcG9ydC4gKi8KKwljdHJsX291dGIoY3RybF9pbmIoU0NTTVIxKSAmIH5TQ1NNUjFfQ0EsIFNDU01SMSk7CisJY3RybF9vdXRiKGN0cmxfaW5iKFNDU0NSMSkgJiB+U0NTQ1IxX0NLRSwgU0NTQ1IxKTsKKworCS8qIEFuZCBJbml0aWFsaXplIFNDTCBmb3IgUlM1QzMxMyBjbG9jayAqLworCXNjc3B0cjFfZGF0YSA9IGN0cmxfaW5iKFNDU1BUUjEpIHwgU0NMOwkvKiBTQ0w6SCAqLworCWN0cmxfb3V0YihzY3NwdHIxX2RhdGEsIFNDU1BUUjEpOworCXNjc3B0cjFfZGF0YSA9IGN0cmxfaW5iKFNDU1BUUjEpIHwgU0NMX09FTjsJLyogU0NMIG91dHB1dCBlbmFibGUgKi8KKwljdHJsX291dGIoc2NzcHRyMV9kYXRhLCBTQ1NQVFIxKTsKKwlSUzVDMzEzX0NFRElTQUJMRTsJLyogQ0U6TCAqLworfQorCitzdGF0aWMgdm9pZCByczVjMzEzX3dyaXRlX2RhdGEodW5zaWduZWQgY2hhciBkYXRhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkvKiBTREE6V3JpdGUgRGF0YSAqLworCQlzY3NwdHIxX2RhdGEgPSAoc2NzcHRyMV9kYXRhICYgflNEQSkgfAorCQkJCSgoKCgweDgwID4+IGkpICYgZGF0YSkgPj4gKDcgLSBpKSkgPDwgMik7CisJCWN0cmxfb3V0YihzY3NwdHIxX2RhdGEsIFNDU1BUUjEpOworCQlpZiAoaSA9PSAwKSB7CisJCQlzY3NwdHIxX2RhdGEgfD0gU0RBX09FTjsJLyogU0RBOm91dHB1dCBlbmFibGUgKi8KKwkJCWN0cmxfb3V0YihzY3NwdHIxX2RhdGEsIFNDU1BUUjEpOworCQl9CisJCW5kZWxheSg3MDApOworCQlzY3NwdHIxX2RhdGEgJj0gflNDTDsJLyogU0NMOkwgKi8KKwkJY3RybF9vdXRiKHNjc3B0cjFfZGF0YSwgU0NTUFRSMSk7CisJCW5kZWxheSg3MDApOworCQlzY3NwdHIxX2RhdGEgfD0gU0NMOwkvKiBTQ0w6SCAqLworCQljdHJsX291dGIoc2NzcHRyMV9kYXRhLCBTQ1NQVFIxKTsKKwl9CisKKwlzY3NwdHIxX2RhdGEgJj0gflNEQV9PRU47CS8qIFNEQTpvdXRwdXQgZGlzYWJsZSAqLworCWN0cmxfb3V0YihzY3NwdHIxX2RhdGEsIFNDU1BUUjEpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciByczVjMzEzX3JlYWRfZGF0YSh2b2lkKQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgZGF0YSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCW5kZWxheSg3MDApOworCQkvKiBTREE6UmVhZCBEYXRhICovCisJCWRhdGEgfD0gKChjdHJsX2luYihTQ1NQVFIxKSAmIFNEQSkgPj4gMikgPDwgKDcgLSBpKTsKKwkJc2NzcHRyMV9kYXRhICY9IH5TQ0w7CS8qIFNDTDpMICovCisJCWN0cmxfb3V0YihzY3NwdHIxX2RhdGEsIFNDU1BUUjEpOworCQluZGVsYXkoNzAwKTsKKwkJc2NzcHRyMV9kYXRhIHw9IFNDTDsJLyogU0NMOkggKi8KKwkJY3RybF9vdXRiKHNjc3B0cjFfZGF0YSwgU0NTUFRSMSk7CisJfQorCXJldHVybiBkYXRhICYgMHgwRjsKK30KKworI2VuZGlmIC8qIENPTkZJR19TSF9MQU5ESVNLICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIG1hY2hpbmUgaW5kZXBlbmRlbmNlIHBhcnQgb2YgUlM1QzMxMyAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUklDT0ggUlM1QzMxMyBhZGRyZXNzICovCisjZGVmaW5lIFJTNUMzMTNfQUREUl9TRUMJMHgwMAorI2RlZmluZSBSUzVDMzEzX0FERFJfU0VDMTAJMHgwMQorI2RlZmluZSBSUzVDMzEzX0FERFJfTUlOCTB4MDIKKyNkZWZpbmUgUlM1QzMxM19BRERSX01JTjEwCTB4MDMKKyNkZWZpbmUgUlM1QzMxM19BRERSX0hPVVIJMHgwNAorI2RlZmluZSBSUzVDMzEzX0FERFJfSE9VUjEwCTB4MDUKKyNkZWZpbmUgUlM1QzMxM19BRERSX1dFRUsJMHgwNgorI2RlZmluZSBSUzVDMzEzX0FERFJfSU5USU5UVlJFRwkweDA3CisjZGVmaW5lIFJTNUMzMTNfQUREUl9EQVkJMHgwOAorI2RlZmluZSBSUzVDMzEzX0FERFJfREFZMTAJMHgwOQorI2RlZmluZSBSUzVDMzEzX0FERFJfTU9OCTB4MEEKKyNkZWZpbmUgUlM1QzMxM19BRERSX01PTjEwCTB4MEIKKyNkZWZpbmUgUlM1QzMxM19BRERSX1lFQVIJMHgwQworI2RlZmluZSBSUzVDMzEzX0FERFJfWUVBUjEwCTB4MEQKKyNkZWZpbmUgUlM1QzMxM19BRERSX0NOVFJFRwkweDBFCisjZGVmaW5lIFJTNUMzMTNfQUREUl9URVNUUkVHCTB4MEYKKworLyogUklDT0ggUlM1QzMxMyBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFJTNUMzMTNfQ05UUkVHX0FESl9CU1kJMHgwMQorI2RlZmluZSBSUzVDMzEzX0NOVFJFR19XVEVOX1hTVFAJMHgwMgorI2RlZmluZSBSUzVDMzEzX0NOVFJFR18xMl8yNAkweDA0CisjZGVmaW5lIFJTNUMzMTNfQ05UUkVHX0NURkcJMHgwOAorCisvKiBSSUNPSCBSUzVDMzEzIHRlc3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlM1QzMxM19URVNUUkVHX1RFU1QJMHgwMQorCisvKiBSSUNPSCBSUzVDMzEzIGNvbnRyb2wgYml0ICovCisjZGVmaW5lIFJTNUMzMTNfQ05UQklUX1JFQUQJMHg0MAorI2RlZmluZSBSUzVDMzEzX0NOVEJJVF9BRAkweDIwCisjZGVmaW5lIFJTNUMzMTNfQ05UQklUX0RUCTB4MTAKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcnM1YzMxM19yZWFkX3JlZyh1bnNpZ25lZCBjaGFyIGFkZHIpCit7CisKKwlyczVjMzEzX3dyaXRlX2RhdGEoYWRkciB8IFJTNUMzMTNfQ05UQklUX1JFQUQgfCBSUzVDMzEzX0NOVEJJVF9BRCk7CisJcmV0dXJuIHJzNWMzMTNfcmVhZF9kYXRhKCk7Cit9CisKK3N0YXRpYyB2b2lkIHJzNWMzMTNfd3JpdGVfcmVnKHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciBkYXRhKQoreworCWRhdGEgJj0gMHgwZjsKKwlyczVjMzEzX3dyaXRlX2RhdGEoYWRkciB8IFJTNUMzMTNfQ05UQklUX0FEKTsKKwlyczVjMzEzX3dyaXRlX2RhdGEoZGF0YSB8IFJTNUMzMTNfQ05UQklUX0RUKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciByczVjMzEzX3JlYWRfY250cmVnKHZvaWQpCit7CisJcmV0dXJuIHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX0NOVFJFRyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByczVjMzEzX3dyaXRlX2NudHJlZyh1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX0NOVFJFRywgZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByczVjMzEzX3dyaXRlX2ludGludHZyZWcodW5zaWduZWQgY2hhciBkYXRhKQoreworCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9JTlRJTlRWUkVHLCBkYXRhKTsKK30KKworc3RhdGljIGludCByczVjMzEzX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCWludCBkYXRhOworCWludCBjbnQ7CisKKwljbnQgPSAwOworCXdoaWxlICgxKSB7CisJCVJTNUMzMTNfQ0VFTkFCTEU7CS8qIENFOkggKi8KKworCQkvKiBJbml0aWFsaXplIGNvbnRyb2wgcmVnLiAyNCBob3VyICovCisJCXJzNWMzMTNfd3JpdGVfY250cmVnKDB4MDQpOworCisJCWlmICghKHJzNWMzMTNfcmVhZF9jbnRyZWcoKSAmIFJTNUMzMTNfQ05UUkVHX0FESl9CU1kpKQorCQkJYnJlYWs7CisKKwkJUlM1QzMxM19DRURJU0FCTEU7CisJCW5kZWxheSg3MDApOwkvKiBDRTpMICovCisKKwkJaWYgKGNudCsrID4gMTAwKSB7CisJCQlkZXZfZXJyKGRldiwgIiVzOiB0aW1lb3V0IGVycm9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfU0VDKTsKKwlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9TRUMxMCkgPDwgNCk7CisJdG0tPnRtX3NlYyA9IEJDRDJCSU4oZGF0YSk7CisKKwlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfTUlOKTsKKwlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9NSU4xMCkgPDwgNCk7CisJdG0tPnRtX21pbiA9IEJDRDJCSU4oZGF0YSk7CisKKwlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfSE9VUik7CisJZGF0YSB8PSAocnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfSE9VUjEwKSA8PCA0KTsKKwl0bS0+dG1faG91ciA9IEJDRDJCSU4oZGF0YSk7CisKKwlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfREFZKTsKKwlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9EQVkxMCkgPDwgNCk7CisJdG0tPnRtX21kYXkgPSBCQ0QyQklOKGRhdGEpOworCisJZGF0YSA9IHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX01PTik7CisJZGF0YSB8PSAocnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfTU9OMTApIDw8IDQpOworCXRtLT50bV9tb24gPSBCQ0QyQklOKGRhdGEpIC0gMTsKKworCWRhdGEgPSByczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9ZRUFSKTsKKwlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9ZRUFSMTApIDw8IDQpOworCXRtLT50bV95ZWFyID0gQkNEMkJJTihkYXRhKTsKKworCWlmICh0bS0+dG1feWVhciA8IDcwKQorCQl0bS0+dG1feWVhciArPSAxMDA7CisKKwlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfV0VFSyk7CisJdG0tPnRtX3dkYXkgPSBCQ0QyQklOKGRhdGEpOworCisJUlM1QzMxM19DRURJU0FCTEU7CisJbmRlbGF5KDcwMCk7CQkvKiBDRTpMICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByczVjMzEzX3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJaW50IGRhdGE7CisJaW50IGNudDsKKworCWNudCA9IDA7CisJLyogYnVzeSBjaGVjay4gKi8KKwl3aGlsZSAoMSkgeworCQlSUzVDMzEzX0NFRU5BQkxFOwkvKiBDRTpIICovCisKKwkJLyogSW5pdGlhdGxpemUgY29udHJvbCByZWcuIDI0IGhvdXIgKi8KKwkJcnM1YzMxM193cml0ZV9jbnRyZWcoMHgwNCk7CisKKwkJaWYgKCEocnM1YzMxM19yZWFkX2NudHJlZygpICYgUlM1QzMxM19DTlRSRUdfQURKX0JTWSkpCisJCQlicmVhazsKKwkJUlM1QzMxM19NSVNDT1A7CisJCVJTNUMzMTNfQ0VESVNBQkxFOworCQluZGVsYXkoNzAwKTsJLyogQ0U6TCAqLworCisJCWlmIChjbnQrKyA+IDEwMCkgeworCQkJZGV2X2VycihkZXYsICIlczogdGltZW91dCBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJZGF0YSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7CisJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX1NFQywgZGF0YSk7CisJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX1NFQzEwLCAoZGF0YSA+PiA0KSk7CisKKwlkYXRhID0gQklOMkJDRCh0bS0+dG1fbWluKTsKKwlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfTUlOLCBkYXRhICk7CisJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX01JTjEwLCAoZGF0YSA+PiA0KSk7CisKKwlkYXRhID0gQklOMkJDRCh0bS0+dG1faG91cik7CisJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX0hPVVIsIGRhdGEpOworCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9IT1VSMTAsIChkYXRhID4+IDQpKTsKKworCWRhdGEgPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKKwlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfREFZLCBkYXRhKTsKKwlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfREFZMTAsIChkYXRhPj4gNCkpOworCisJZGF0YSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOworCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9NT04sIGRhdGEpOworCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9NT04xMCwgKGRhdGEgPj4gNCkpOworCisJZGF0YSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9ZRUFSLCBkYXRhKTsKKwlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfWUVBUjEwLCAoZGF0YSA+PiA0KSk7CisKKwlkYXRhID0gQklOMkJDRCh0bS0+dG1fd2RheSk7CisJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX1dFRUssIGRhdGEpOworCisJUlM1QzMxM19DRURJU0FCTEU7CS8qIENFOkggKi8KKwluZGVsYXkoNzAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByczVjMzEzX2NoZWNrX3hzdHBfYml0KHZvaWQpCit7CisJc3RydWN0IHJ0Y190aW1lIHRtOworCWludCBjbnQ7CisKKwlSUzVDMzEzX0NFRU5BQkxFOwkvKiBDRTpIICovCisJaWYgKHJzNWMzMTNfcmVhZF9jbnRyZWcoKSAmIFJTNUMzMTNfQ05UUkVHX1dURU5fWFNUUCkgeworCQkvKiBJTlQgaW50ZXJ2YWwgcmVnLiBPRkYgKi8KKwkJcnM1YzMxM193cml0ZV9pbnRpbnR2cmVnKDB4MDApOworCQkvKiBJbml0aWFsaXplIGNvbnRyb2wgcmVnLiAyNCBob3VyICYgYWRqdXN0ICovCisJCXJzNWMzMTNfd3JpdGVfY250cmVnKDB4MDcpOworCisJCS8qIGJ1c3kgY2hlY2suICovCisJCWZvciAoY250ID0gMDsgY250IDwgMTAwOyBjbnQrKykgeworCQkJaWYgKCEocnM1YzMxM19yZWFkX2NudHJlZygpICYgUlM1QzMxM19DTlRSRUdfQURKX0JTWSkpCisJCQkJYnJlYWs7CisJCQlSUzVDMzEzX01JU0NPUDsKKwkJfQorCisJCW1lbXNldCgmdG0sIDAsIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKTsKKwkJdG0udG1fbWRheSAJPSAxOworCQl0bS50bV9tb24gCT0gMSAtIDE7CisJCXRtLnRtX3llYXIgCT0gMjAwMCAtIDE5MDA7CisKKwkJcnM1YzMxM19ydGNfc2V0X3RpbWUoTlVMTCwgJnRtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJSSUNITyBSUzVDMzEzOiBpbnZhbGlkIHZhbHVlLCByZXNldHRpbmcgdG8gIgorCQkJCSIxIEphbiAyMDAwXG4iKTsKKwl9CisJUlM1QzMxM19DRURJU0FCTEU7CisJbmRlbGF5KDcwMCk7CQkvKiBDRTpMICovCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyByczVjMzEzX3J0Y19vcHMgPSB7CisJLnJlYWRfdGltZSA9IHJzNWMzMTNfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUgPSByczVjMzEzX3J0Y19zZXRfdGltZSwKK307CisKK3N0YXRpYyBpbnQgcnM1YzMxM19ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicnM1YzMxMyIsICZwZGV2LT5kZXYsCisJCQkJJnJzNWMzMTNfcnRjX29wcywgVEhJU19NT0RVTEUpOworCisJaWYgKElTX0VSUihydGMpKQorCQlyZXR1cm4gUFRSX0VSUihydGMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCByczVjMzEzX3J0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoIHBkZXYgKTsKKworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJzNWMzMTNfcnRjX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkuZHJpdmVyICAgICAgICAgPSB7CisJCS5uYW1lICAgPSBEUlZfTkFNRSwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlIAk9IHJzNWMzMTNfcnRjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCggcnM1YzMxM19ydGNfcmVtb3ZlICksCit9OworCitzdGF0aWMgaW50IF9faW5pdCByczVjMzEzX3J0Y19pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcnM1YzMxM19ydGNfcGxhdGZvcm1fZHJpdmVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcnM1YzMxM19pbml0X3BvcnQoKTsKKwlyczVjMzEzX2NoZWNrX3hzdHBfYml0KCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHJzNWMzMTNfcnRjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlciggJnJzNWMzMTNfcnRjX3BsYXRmb3JtX2RyaXZlciApOworfQorCittb2R1bGVfaW5pdChyczVjMzEzX3J0Y19pbml0KTsKK21vZHVsZV9leGl0KHJzNWMzMTNfcnRjX2V4aXQpOworCitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKCJrb2dpaWRlbmEgLCBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJpY29oIFJTNUMzMTMgUlRDIGRldmljZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwppbmRleCA5YTc5YTI0Li41NGI2MTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXMzYy5jCkBAIC01MCw3ICs1MCw3IEBACiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJkZXYgPSBpZDsKIAotCXJ0Y191cGRhdGVfaXJxKCZyZGV2LT5jbGFzc19kZXYsIDEsIFJUQ19BRiB8IFJUQ19JUlFGKTsKKwlydGNfdXBkYXRlX2lycShyZGV2LCAxLCBSVENfQUYgfCBSVENfSVJRRik7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC01OCw3ICs1OCw3IEBACiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJkZXYgPSBpZDsKIAotCXJ0Y191cGRhdGVfaXJxKCZyZGV2LT5jbGFzc19kZXYsIHRpY2tfY291bnQrKywgUlRDX1BGIHwgUlRDX0lSUUYpOworCXJ0Y191cGRhdGVfaXJxKHJkZXYsIHRpY2tfY291bnQrKywgUlRDX1BGIHwgUlRDX0lSUUYpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNTQ4LDM3ICs1NDgsMTUgQEAKIAogc3RhdGljIGludCBzM2NfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBydGNfdGltZSB0bTsKLQlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKLQotCXRpbWUudHZfbnNlYyA9IDA7Ci0KIAkvKiBzYXZlIFRJQ05UIGZvciBhbnlvbmUgdXNpbmcgcGVyaW9kaWMgaW50ZXJydXB0cyAqLwotCiAJdGljbnRfc2F2ZSA9IHJlYWRiKHMzY19ydGNfYmFzZSArIFMzQzI0MTBfVElDTlQpOwotCi0JLyogY2FsY3VsYXRlIHRpbWUgZGVsdGEgZm9yIHN1c3BlbmQgKi8KLQotCXMzY19ydGNfZ2V0dGltZSgmcGRldi0+ZGV2LCAmdG0pOwotCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUudHZfc2VjKTsKLQlzYXZlX3RpbWVfZGVsdGEoJnMzY19ydGNfZGVsdGEsICZ0aW1lKTsKIAlzM2NfcnRjX2VuYWJsZShwZGV2LCAwKTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHMzY19ydGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHJ0Y190aW1lIHRtOwotCXN0cnVjdCB0aW1lc3BlYyB0aW1lOwotCi0JdGltZS50dl9uc2VjID0gMDsKLQogCXMzY19ydGNfZW5hYmxlKHBkZXYsIDEpOwotCXMzY19ydGNfZ2V0dGltZSgmcGRldi0+ZGV2LCAmdG0pOwotCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUudHZfc2VjKTsKLQlyZXN0b3JlX3RpbWVfZGVsdGEoJnMzY19ydGNfZGVsdGEsICZ0aW1lKTsKLQogCXdyaXRlYih0aWNudF9zYXZlLCBzM2NfcnRjX2Jhc2UgKyBTM0MyNDEwX1RJQ05UKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCA2NzdiYWU4Li4wOTE4Yjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC05Myw3ICs5Myw3IEBACiAJaWYgKHJ0c3IgJiBSVFNSX0haKQogCQlldmVudHMgfD0gUlRDX1VGIHwgUlRDX0lSUUY7CiAKLQlydGNfdXBkYXRlX2lycSgmcnRjLT5jbGFzc19kZXYsIDEsIGV2ZW50cyk7CisJcnRjX3VwZGF0ZV9pcnEocnRjLCAxLCBldmVudHMpOwogCiAJaWYgKHJ0c3IgJiBSVFNSX0FMICYmIHJ0Y19wZXJpb2RpY19hbGFybSgmcnRjX2FsYXJtKSkKIAkJcnRjX3VwZGF0ZV9hbGFybSgmcnRjX2FsYXJtKTsKQEAgLTExOSw3ICsxMTksNyBAQAogCSAqLwogCU9TU1IgPSBPU1NSX00xOwkvKiBjbGVhciBtYXRjaCBvbiB0aW1lcjEgKi8KIAotCXJ0Y191cGRhdGVfaXJxKCZydGMtPmNsYXNzX2RldiwgcnRjX3RpbWVyMV9jb3VudCwgUlRDX1BGIHwgUlRDX0lSUUYpOworCXJ0Y191cGRhdGVfaXJxKHJ0YywgcnRjX3RpbWVyMV9jb3VudCwgUlRDX1BGIHwgUlRDX0lSUUYpOwogCiAJaWYgKHJ0Y190aW1lcjFfY291bnQgPT0gMSkKIAkJcnRjX3RpbWVyMV9jb3VudCA9IChydGNfZnJlcSAqICgoMTw8MzApLyhUSU1FUl9GUkVRPj4yKSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwppbmRleCAxOThiOWYyLi5lMGY5MWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2guYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAKIAl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKIAotCXJ0Y191cGRhdGVfaXJxKCZydGMtPnJ0Y19kZXYtPmNsYXNzX2RldiwgMSwgZXZlbnRzKTsKKwlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIGV2ZW50cyk7CiAKIAlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKIApAQCAtMTM5LDcgKzEzOSw3IEBACiAKIAkJcnRjLT5yZWFybV9haWUgPSAxOwogCi0JCXJ0Y191cGRhdGVfaXJxKCZydGMtPnJ0Y19kZXYtPmNsYXNzX2RldiwgMSwgZXZlbnRzKTsKKwkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBldmVudHMpOwogCX0KIAogCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOwpAQCAtMTUzLDcgKzE1Myw3IEBACiAKIAlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CiAKLQlydGNfdXBkYXRlX2lycSgmcnRjLT5ydGNfZGV2LT5jbGFzc19kZXYsIDEsIFJUQ19QRiB8IFJUQ19JUlFGKTsKKwlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19QRiB8IFJUQ19JUlFGKTsKIAogCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOwogCkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJdG0tPnRtX3NlYy0tOwogI2VuZGlmCiAKLQlkZXZfZGJnKCZkZXYsICIlczogdG0gaXMgc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsICIKKwlkZXZfZGJnKGRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCwgIgogCQkibWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLAogCQlfX0ZVTkNUSU9OX18sCiAJCXRtLT50bV9zZWMsIHRtLT50bV9taW4sIHRtLT50bV9ob3VyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc3lzZnMuYwppbmRleCA4OTlhYjhjLi42OWRmOTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc3lzZnMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc3lzZnMuYwpAQCAtMTIsMjAgKzEyLDI2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAKKyNpbmNsdWRlICJydGMtY29yZS5oIgorCisKIC8qIGRldmljZSBhdHRyaWJ1dGVzICovCiAKLXN0YXRpYyBzc2l6ZV90IHJ0Y19zeXNmc19zaG93X25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdAorcnRjX3N5c2ZzX3Nob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHRvX3J0Y19kZXZpY2UoZGV2KS0+bmFtZSk7CiB9Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgcnRjX3N5c2ZzX3Nob3dfbmFtZSwgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHJ0Y19zeXNmc19zaG93X2RhdGUoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdAorcnRjX3N5c2ZzX3Nob3dfZGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCiB7CiAJc3NpemVfdCByZXR2YWw7CiAJc3RydWN0IHJ0Y190aW1lIHRtOwogCi0JcmV0dmFsID0gcnRjX3JlYWRfdGltZShkZXYsICZ0bSk7CisJcmV0dmFsID0gcnRjX3JlYWRfdGltZSh0b19ydGNfZGV2aWNlKGRldiksICZ0bSk7CiAJaWYgKHJldHZhbCA9PSAwKSB7CiAJCXJldHZhbCA9IHNwcmludGYoYnVmLCAiJTA0ZC0lMDJkLSUwMmRcbiIsCiAJCQl0bS50bV95ZWFyICsgMTkwMCwgdG0udG1fbW9uICsgMSwgdG0udG1fbWRheSk7CkBAIC0zMywxNCArMzksMTUgQEAKIAogCXJldHVybiByZXR2YWw7CiB9Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoZGF0ZSwgU19JUlVHTywgcnRjX3N5c2ZzX3Nob3dfZGF0ZSwgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHJ0Y19zeXNmc19zaG93X3RpbWUoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdAorcnRjX3N5c2ZzX3Nob3dfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCiB7CiAJc3NpemVfdCByZXR2YWw7CiAJc3RydWN0IHJ0Y190aW1lIHRtOwogCi0JcmV0dmFsID0gcnRjX3JlYWRfdGltZShkZXYsICZ0bSk7CisJcmV0dmFsID0gcnRjX3JlYWRfdGltZSh0b19ydGNfZGV2aWNlKGRldiksICZ0bSk7CiAJaWYgKHJldHZhbCA9PSAwKSB7CiAJCXJldHZhbCA9IHNwcmludGYoYnVmLCAiJTAyZDolMDJkOiUwMmRcbiIsCiAJCQl0bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3NlYyk7CkBAIC00OCwxNCArNTUsMTUgQEAKIAogCXJldHVybiByZXR2YWw7CiB9Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIodGltZSwgU19JUlVHTywgcnRjX3N5c2ZzX3Nob3dfdGltZSwgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHJ0Y19zeXNmc19zaG93X3NpbmNlX2Vwb2NoKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QKK3J0Y19zeXNmc19zaG93X3NpbmNlX2Vwb2NoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKIHsKIAlzc2l6ZV90IHJldHZhbDsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAKLQlyZXR2YWwgPSBydGNfcmVhZF90aW1lKGRldiwgJnRtKTsKKwlyZXR2YWwgPSBydGNfcmVhZF90aW1lKHRvX3J0Y19kZXZpY2UoZGV2KSwgJnRtKTsKIAlpZiAocmV0dmFsID09IDApIHsKIAkJdW5zaWduZWQgbG9uZyB0aW1lOwogCQlydGNfdG1fdG9fdGltZSgmdG0sICZ0aW1lKTsKQEAgLTY0LDIzICs3MiwxOCBAQAogCiAJcmV0dXJuIHJldHZhbDsKIH0KLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihzaW5jZV9lcG9jaCwgU19JUlVHTywgcnRjX3N5c2ZzX3Nob3dfc2luY2VfZXBvY2gsIE5VTEwpOwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcnRjX2F0dHJzW10gPSB7Ci0JJmNsYXNzX2RldmljZV9hdHRyX25hbWUuYXR0ciwKLQkmY2xhc3NfZGV2aWNlX2F0dHJfZGF0ZS5hdHRyLAotCSZjbGFzc19kZXZpY2VfYXR0cl90aW1lLmF0dHIsCi0JJmNsYXNzX2RldmljZV9hdHRyX3NpbmNlX2Vwb2NoLmF0dHIsCi0JTlVMTCwKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBydGNfYXR0cnNbXSA9IHsKKwlfX0FUVFIobmFtZSwgU19JUlVHTywgcnRjX3N5c2ZzX3Nob3dfbmFtZSwgTlVMTCksCisJX19BVFRSKGRhdGUsIFNfSVJVR08sIHJ0Y19zeXNmc19zaG93X2RhdGUsIE5VTEwpLAorCV9fQVRUUih0aW1lLCBTX0lSVUdPLCBydGNfc3lzZnNfc2hvd190aW1lLCBOVUxMKSwKKwlfX0FUVFIoc2luY2VfZXBvY2gsIFNfSVJVR08sIHJ0Y19zeXNmc19zaG93X3NpbmNlX2Vwb2NoLCBOVUxMKSwKKwl7IH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBydGNfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSBydGNfYXR0cnMsCi19OwotCi0KIHN0YXRpYyBzc2l6ZV90Ci1ydGNfc3lzZnNfc2hvd193YWtlYWxhcm0oc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCitydGNfc3lzZnNfc2hvd193YWtlYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQogewogCXNzaXplX3QgcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcgYWxhcm07CkBAIC05NCw3ICs5Nyw3IEBACiAJICogUkVWSVNJVCBtYXliZSB3ZSBzaG91bGQgcmVxdWlyZSBSVEMgaW1wbGVtZW50YXRpb25zIHRvCiAJICogZGlzYWJsZSB0aGUgUlRDIGFsYXJtIGFmdGVyIGl0IHRyaWdnZXJzLCBmb3IgdW5pZm9ybWl0eS4KIAkgKi8KLQlyZXR2YWwgPSBydGNfcmVhZF9hbGFybShkZXYsICZhbG0pOworCXJldHZhbCA9IHJ0Y19yZWFkX2FsYXJtKHRvX3J0Y19kZXZpY2UoZGV2KSwgJmFsbSk7CiAJaWYgKHJldHZhbCA9PSAwICYmIGFsbS5lbmFibGVkKSB7CiAJCXJ0Y190bV90b190aW1lKCZhbG0udGltZSwgJmFsYXJtKTsKIAkJcmV0dmFsID0gc3ByaW50ZihidWYsICIlbHVcbiIsIGFsYXJtKTsKQEAgLTEwNCwxNiArMTA3LDE4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1ydGNfc3lzZnNfc2V0X3dha2VhbGFybShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pCitydGNfc3lzZnNfc2V0X3dha2VhbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQogewogCXNzaXplX3QgcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcgbm93LCBhbGFybTsKIAlzdHJ1Y3QgcnRjX3drYWxybSBhbG07CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHRvX3J0Y19kZXZpY2UoZGV2KTsKIAogCS8qIE9ubHkgcmVxdWVzdCBhbGFybXMgdGhhdCB0cmlnZ2VyIGluIHRoZSBmdXR1cmUuICBEaXNhYmxlIHRoZW0KIAkgKiBieSB3cml0aW5nIGFub3RoZXIgdGltZSwgZS5nLiAwIG1lYW5pbmcgSmFuIDEgMTk3MCBVVEMuCiAJICovCi0JcmV0dmFsID0gcnRjX3JlYWRfdGltZShkZXYsICZhbG0udGltZSk7CisJcmV0dmFsID0gcnRjX3JlYWRfdGltZShydGMsICZhbG0udGltZSk7CiAJaWYgKHJldHZhbCA8IDApCiAJCXJldHVybiByZXR2YWw7CiAJcnRjX3RtX3RvX3RpbWUoJmFsbS50aW1lLCAmbm93KTsKQEAgLTEyNCw3ICsxMjksNyBAQAogCQkgKiBlbnRpcmVseSBwcmV2ZW50IHRoYXQgaGVyZSwgd2l0aG91dCBldmVuIHRoZSBtaW5pbWFsCiAJCSAqIGxvY2tpbmcgZnJvbSB0aGUgL2Rldi9ydGNOIGFwaS4KIAkJICovCi0JCXJldHZhbCA9IHJ0Y19yZWFkX2FsYXJtKGRldiwgJmFsbSk7CisJCXJldHZhbCA9IHJ0Y19yZWFkX2FsYXJtKHJ0YywgJmFsbSk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJcmV0dXJuIHJldHZhbDsKIAkJaWYgKGFsbS5lbmFibGVkKQpAQCAtMTQxLDEwICsxNDYsMTAgQEAKIAl9CiAJcnRjX3RpbWVfdG9fdG0oYWxhcm0sICZhbG0udGltZSk7CiAKLQlyZXR2YWwgPSBydGNfc2V0X2FsYXJtKGRldiwgJmFsbSk7CisJcmV0dmFsID0gcnRjX3NldF9hbGFybShydGMsICZhbG0pOwogCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiBuOwogfQotc3RhdGljIGNvbnN0IENMQVNTX0RFVklDRV9BVFRSKHdha2VhbGFybSwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgREVWSUNFX0FUVFIod2FrZWFsYXJtLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJcnRjX3N5c2ZzX3Nob3dfd2FrZWFsYXJtLCBydGNfc3lzZnNfc2V0X3dha2VhbGFybSk7CiAKIApAQCAtMTUzLDcxICsxNTgsMzcgQEAKICAqIHN1c3BlbmQtdG8tZGlzay4gIFNvOiBubyBhdHRyaWJ1dGUgdW5sZXNzIHRoYXQgc2lkZSBlZmZlY3QgaXMgcG9zc2libGUuCiAgKiAoVXNlcnNwYWNlIG1heSBkaXNhYmxlIHRoYXQgbWVjaGFuaXNtIGxhdGVyLikKICAqLwotc3RhdGljIGlubGluZSBpbnQgcnRjX2RvZXNfd2FrZWFsYXJtKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldikKK3N0YXRpYyBpbmxpbmUgaW50IHJ0Y19kb2VzX3dha2VhbGFybShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQogewotCXN0cnVjdCBydGNfZGV2aWNlICpydGM7Ci0KLQlpZiAoIWRldmljZV9jYW5fd2FrZXVwKGNsYXNzX2Rldi0+ZGV2KSkKKwlpZiAoIWRldmljZV9jYW5fd2FrZXVwKHJ0Yy0+ZGV2LnBhcmVudCkpCiAJCXJldHVybiAwOwotCXJ0YyA9IHRvX3J0Y19kZXZpY2UoY2xhc3NfZGV2KTsKIAlyZXR1cm4gcnRjLT5vcHMtPnNldF9hbGFybSAhPSBOVUxMOwogfQogCiAKLXN0YXRpYyBpbnQgcnRjX3N5c2ZzX2FkZF9kZXZpY2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAotCQkJCQlzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICpjbGFzc19pbnRmKQordm9pZCBydGNfc3lzZnNfYWRkX2RldmljZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQogewogCWludCBlcnI7CiAKLQlkZXZfZGJnKGNsYXNzX2Rldi0+ZGV2LCAicnRjIGludGY6IHN5c2ZzXG4iKTsKKwkvKiBub3QgYWxsIFJUQ3Mgc3VwcG9ydCBib3RoIGFsYXJtcyBhbmQgd2FrZXVwICovCisJaWYgKCFydGNfZG9lc193YWtlYWxhcm0ocnRjKSkKKwkJcmV0dXJuOwogCi0JZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGFzc19kZXYtPmtvYmosICZydGNfYXR0cl9ncm91cCk7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZydGMtPmRldiwgJmRldl9hdHRyX3dha2VhbGFybSk7CiAJaWYgKGVycikKLQkJZGV2X2VycihjbGFzc19kZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgJXNcbiIsCi0JCQkJInN5c2ZzIGF0dHJpYnV0ZXMiKTsKLQllbHNlIGlmIChydGNfZG9lc193YWtlYWxhcm0oY2xhc3NfZGV2KSkgewotCQkvKiBub3QgYWxsIFJUQ3Mgc3VwcG9ydCBib3RoIGFsYXJtcyBhbmQgd2FrZXVwICovCi0JCWVyciA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGFzc19kZXYsCi0JCQkJCSZjbGFzc19kZXZpY2VfYXR0cl93YWtlYWxhcm0pOwotCQlpZiAoZXJyKSB7Ci0JCQlkZXZfZXJyKGNsYXNzX2Rldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSAlc1xuIiwKLQkJCQkJImFsYXJtIGF0dHJpYnV0ZSIpOwotCQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGFzc19kZXYtPmtvYmosICZydGNfYXR0cl9ncm91cCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZXJyOworCQlkZXZfZXJyKHJ0Yy0+ZGV2LnBhcmVudCwgImZhaWxlZCB0byBjcmVhdGUgIgorCQkJCSJhbGFybSBhdHRyaWJ1dGUsICVkIiwKKwkJCQllcnIpOwogfQogCi1zdGF0aWMgdm9pZCBydGNfc3lzZnNfcmVtb3ZlX2RldmljZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsCi0JCQkJc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqY2xhc3NfaW50ZikKK3ZvaWQgcnRjX3N5c2ZzX2RlbF9kZXZpY2Uoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKIHsKLQlpZiAocnRjX2RvZXNfd2FrZWFsYXJtKGNsYXNzX2RldikpCi0JCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGFzc19kZXYsCi0JCQkJJmNsYXNzX2RldmljZV9hdHRyX3dha2VhbGFybSk7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGFzc19kZXYtPmtvYmosICZydGNfYXR0cl9ncm91cCk7CisJLyogUkVWSVNJVCBkaWQgd2UgYWRkIGl0IHN1Y2Nlc3NmdWxseT8gKi8KKwlpZiAocnRjX2RvZXNfd2FrZWFsYXJtKHJ0YykpCisJCWRldmljZV9yZW1vdmVfZmlsZSgmcnRjLT5kZXYsICZkZXZfYXR0cl93YWtlYWxhcm0pOwogfQogCi0vKiBpbnRlcmZhY2UgcmVnaXN0cmF0aW9uICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlIHJ0Y19zeXNmc19pbnRlcmZhY2UgPSB7Ci0JLmFkZCA9ICZydGNfc3lzZnNfYWRkX2RldmljZSwKLQkucmVtb3ZlID0gJnJ0Y19zeXNmc19yZW1vdmVfZGV2aWNlLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcnRjX3N5c2ZzX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IHJ0Y19zeXNmc19pbml0KHN0cnVjdCBjbGFzcyAqcnRjX2NsYXNzKQogewotCXJldHVybiBydGNfaW50ZXJmYWNlX3JlZ2lzdGVyKCZydGNfc3lzZnNfaW50ZXJmYWNlKTsKKwlydGNfY2xhc3MtPmRldl9hdHRycyA9IHJ0Y19hdHRyczsKIH0KLQotc3RhdGljIHZvaWQgX19leGl0IHJ0Y19zeXNmc19leGl0KHZvaWQpCi17Ci0JY2xhc3NfaW50ZXJmYWNlX3VucmVnaXN0ZXIoJnJ0Y19zeXNmc19pbnRlcmZhY2UpOwotfQotCi1zdWJzeXNfaW5pdGNhbGwocnRjX3N5c2ZzX2luaXQpOwotbW9kdWxlX2V4aXQocnRjX3N5c2ZzX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUlRDIGNsYXNzIHN5c2ZzIGludGVyZmFjZSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXRlc3QuYyBiL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKaW5kZXggZjUwYTFiOC4uMjU0YzlmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXRlc3QuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCkBAIC0xMDEsMTEgKzEwMSwxMSBAQAogCXJldHZhbCA9IGNvdW50OwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJaWYgKHN0cm5jbXAoYnVmLCAidGljayIsIDQpID09IDApCi0JCXJ0Y191cGRhdGVfaXJxKCZydGMtPmNsYXNzX2RldiwgMSwgUlRDX1BGIHwgUlRDX0lSUUYpOworCQlydGNfdXBkYXRlX2lycShydGMsIDEsIFJUQ19QRiB8IFJUQ19JUlFGKTsKIAllbHNlIGlmIChzdHJuY21wKGJ1ZiwgImFsYXJtIiwgNSkgPT0gMCkKLQkJcnRjX3VwZGF0ZV9pcnEoJnJ0Yy0+Y2xhc3NfZGV2LCAxLCBSVENfQUYgfCBSVENfSVJRRik7CisJCXJ0Y191cGRhdGVfaXJxKHJ0YywgMSwgUlRDX0FGIHwgUlRDX0lSUUYpOwogCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAidXBkYXRlIiwgNikgPT0gMCkKLQkJcnRjX3VwZGF0ZV9pcnEoJnJ0Yy0+Y2xhc3NfZGV2LCAxLCBSVENfVUYgfCBSVENfSVJRRik7CisJCXJ0Y191cGRhdGVfaXJxKHJ0YywgMSwgUlRDX1VGIHwgUlRDX0lSUUYpOwogCWVsc2UKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKaW5kZXggZTQwMzIyYi4uYWY3NTk2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwpAQCAtOTcsNiArOTcsNyBAQAogc3RhdGljIGNoYXIgcnRjX25hbWVbXSA9ICJSVEMiOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfZnJlcXVlbmN5Owogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfY291bnQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGFsYXJtX2VuYWJsZWQ7CiAKIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VbMl0gPSB7CiAJewkubmFtZQk9IHJ0Y19uYW1lLApAQCAtMTg4LDYgKzE4OSw3IEBACiAJbG93ID0gcnRjMV9yZWFkKEVDTVBMUkVHKTsKIAltaWQgPSBydGMxX3JlYWQoRUNNUE1SRUcpOwogCWhpZ2ggPSBydGMxX3JlYWQoRUNNUEhSRUcpOworCXdrYWxybS0+ZW5hYmxlZCA9IGFsYXJtX2VuYWJsZWQ7CiAKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIApAQCAtMjA2LDEwICsyMDgsMTggQEAKIAogCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKIAorCWlmIChhbGFybV9lbmFibGVkKQorCQlkaXNhYmxlX2lycShFTEFQU0VEVElNRV9JUlEpOworCiAJcnRjMV93cml0ZShFQ01QTFJFRywgKHVpbnQxNl90KShhbGFybV9zZWMgPDwgMTUpKTsKIAlydGMxX3dyaXRlKEVDTVBNUkVHLCAodWludDE2X3QpKGFsYXJtX3NlYyA+PiAxKSk7CiAJcnRjMV93cml0ZShFQ01QSFJFRywgKHVpbnQxNl90KShhbGFybV9zZWMgPj4gMTcpKTsKIAorCWlmICh3a2Fscm0tPmVuYWJsZWQpCisJCWVuYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKKworCWFsYXJtX2VuYWJsZWQgPSB3a2Fscm0tPmVuYWJsZWQ7CisKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtMjIxLDEwICsyMzEsMjQgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBSVENfQUlFX09OOgotCQllbmFibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCQlpZiAoIWFsYXJtX2VuYWJsZWQpIHsKKwkJCWVuYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKKwkJCWFsYXJtX2VuYWJsZWQgPSAxOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCWRpc2FibGVfaXJxKEVMQVBTRURUSU1FX0lSUSk7CisJCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCQlpZiAoYWxhcm1fZW5hYmxlZCkgeworCQkJZGlzYWJsZV9pcnEoRUxBUFNFRFRJTUVfSVJRKTsKKwkJCWFsYXJtX2VuYWJsZWQgPSAwOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgUlRDX1BJRV9PTjoKIAkJZW5hYmxlX2lycShSVENMT05HMV9JUlEpOwpAQCAtMjc1LDcgKzI5OSw3IEBACiAKIAlydGMyX3dyaXRlKFJUQ0lOVFJFRywgRUxBUFNFRFRJTUVfSU5UKTsKIAotCXJ0Y191cGRhdGVfaXJxKCZydGMtPmNsYXNzX2RldiwgMSwgUlRDX0FGKTsKKwlydGNfdXBkYXRlX2lycShydGMsIDEsIFJUQ19BRik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0yOTEsNyArMzE1LDcgQEAKIAlydGMxX3dyaXRlKFJUQ0wxTFJFRywgY291bnQpOwogCXJ0YzFfd3JpdGUoUlRDTDFIUkVHLCBjb3VudCA+PiAxNik7CiAKLQlydGNfdXBkYXRlX2lycSgmcnRjLT5jbGFzc19kZXYsIDEsIFJUQ19QRik7CisJcnRjX3VwZGF0ZV9pcnEocnRjLCAxLCBSVENfUEYpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL0tjb25maWcgYi9kcml2ZXJzL3MzOTAvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY1YWYzOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDIzOSArMCwwIEBACi1jb25maWcgQ0NXCi0JYm9vbAotCWRlZmF1bHQgeQotCi1zb3VyY2UgImRyaXZlcnMvYmxvY2svS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL21kL0tjb25maWciCi0KLQotbWVudSAiQ2hhcmFjdGVyIGRldmljZSBkcml2ZXJzIgotCi1jb25maWcgVU5JWDk4X1BUWVMKLQlib29sICJVbml4OTggUFRZIHN1cHBvcnQiCi0JLS0taGVscC0tLQotCSAgQSBwc2V1ZG8gdGVybWluYWwgKFBUWSkgaXMgYSBzb2Z0d2FyZSBkZXZpY2UgY29uc2lzdGluZyBvZiB0d28KLQkgIGhhbHZlczogYSBtYXN0ZXIgYW5kIGEgc2xhdmUuIFRoZSBzbGF2ZSBkZXZpY2UgYmVoYXZlcyBpZGVudGljYWwgdG8KLQkgIGEgcGh5c2ljYWwgdGVybWluYWw7IHRoZSBtYXN0ZXIgZGV2aWNlIGlzIHVzZWQgYnkgYSBwcm9jZXNzIHRvCi0JICByZWFkIGRhdGEgZnJvbSBhbmQgd3JpdGUgZGF0YSB0byB0aGUgc2xhdmUsIHRoZXJlYnkgZW11bGF0aW5nIGEKLQkgIHRlcm1pbmFsLiBUeXBpY2FsIHByb2dyYW1zIGZvciB0aGUgbWFzdGVyIHNpZGUgYXJlIHRlbG5ldCBzZXJ2ZXJzCi0JICBhbmQgeHRlcm1zLgotCi0JICBMaW51eCBoYXMgdHJhZGl0aW9uYWxseSB1c2VkIHRoZSBCU0QtbGlrZSBuYW1lcyAvZGV2L3B0eXh4IGZvcgotCSAgbWFzdGVycyBhbmQgL2Rldi90dHl4eCBmb3Igc2xhdmVzIG9mIHBzZXVkbyB0ZXJtaW5hbHMuIFRoaXMgc2NoZW1lCi0JICBoYXMgYSBudW1iZXIgb2YgcHJvYmxlbXMuIFRoZSBHTlUgQyBsaWJyYXJ5IGdsaWJjIDIuMSBhbmQgbGF0ZXIsCi0JICBob3dldmVyLCBzdXBwb3J0cyB0aGUgVW5peDk4IG5hbWluZyBzdGFuZGFyZDogaW4gb3JkZXIgdG8gYWNxdWlyZSBhCi0JICBwc2V1ZG8gdGVybWluYWwsIGEgcHJvY2VzcyBvcGVucyAvZGV2L3B0bXg7IHRoZSBudW1iZXIgb2YgdGhlIHBzZXVkbwotCSAgdGVybWluYWwgaXMgdGhlbiBtYWRlIGF2YWlsYWJsZSB0byB0aGUgcHJvY2VzcyBhbmQgdGhlIHBzZXVkbwotCSAgdGVybWluYWwgc2xhdmUgY2FuIGJlIGFjY2Vzc2VkIGFzIC9kZXYvcHRzLzxudW1iZXI+LiBXaGF0IHdhcwotCSAgdHJhZGl0aW9uYWxseSAvZGV2L3R0eXAyIHdpbGwgdGhlbiBiZSAvZGV2L3B0cy8yLCBmb3IgZXhhbXBsZS4KLQotCSAgVGhlIGVudHJpZXMgaW4gL2Rldi9wdHMvIGFyZSBjcmVhdGVkIG9uIHRoZSBmbHkgYnkgYSB2aXJ0dWFsCi0JICBmaWxlIHN5c3RlbTsgdGhlcmVmb3JlLCBpZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugc2hvdWxkIHNheSBZIHRvCi0JICAiL2Rldi9wdHMgZmlsZSBzeXN0ZW0gZm9yIFVuaXg5OCBQVFlzIiBhcyB3ZWxsLgotCi0JICBJZiB5b3Ugd2FudCB0byBzYXkgWSBoZXJlLCB5b3UgbmVlZCB0byBoYXZlIHRoZSBDIGxpYnJhcnkgZ2xpYmMgMi4xCi0JICBvciBsYXRlciAoZXF1YWwgdG8gbGliYy02LjEsIGNoZWNrIHdpdGggImxzIC1sIC9saWIvbGliYy5zby4qIikuCi0JICBSZWFkIHRoZSBpbnN0cnVjdGlvbnMgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzPiBwZXJ0YWluaW5nIHRvCi0JICBwc2V1ZG8gdGVybWluYWxzLiBJdCdzIHNhZmUgdG8gc2F5IE4uCi0KLWNvbmZpZyBVTklYOThfUFRZX0NPVU5UCi0JaW50ICJNYXhpbXVtIG51bWJlciBvZiBVbml4OTggUFRZcyBpbiB1c2UgKDAtMjA0OCkiCi0JZGVwZW5kcyBvbiBVTklYOThfUFRZUwotCWRlZmF1bHQgIjI1NiIKLQloZWxwCi0JICBUaGUgbWF4aW11bSBudW1iZXIgb2YgVW5peDk4IFBUWXMgdGhhdCBjYW4gYmUgdXNlZCBhdCBhbnkgb25lIHRpbWUuCi0JICBUaGUgZGVmYXVsdCBpcyAyNTYsIGFuZCBzaG91bGQgYmUgZW5vdWdoIGZvciBkZXNrdG9wIHN5c3RlbXMuIFNlcnZlcgotCSAgbWFjaGluZXMgd2hpY2ggc3VwcG9ydCBpbmNvbWluZyB0ZWxuZXQvcmxvZ2luL3NzaCBjb25uZWN0aW9ucyBhbmQvb3IKLQkgIHNlcnZlIHNldmVyYWwgWCB0ZXJtaW5hbHMgbWF5IHdhbnQgdG8gaW5jcmVhc2UgdGhpczogZXZlcnkgaW5jb21pbmcKLQkgIGNvbm5lY3Rpb24gYW5kIGV2ZXJ5IHh0ZXJtIHVzZXMgdXAgb25lIFBUWS4KLQotCSAgV2hlbiBub3QgaW4gdXNlLCBlYWNoIGFkZGl0aW9uYWwgc2V0IG9mIDI1NiBQVFlzIG9jY3VweQotCSAgYXBwcm94aW1hdGVseSA4IEtCIG9mIGtlcm5lbCBtZW1vcnkgb24gMzItYml0IGFyY2hpdGVjdHVyZXMuCi0KLWNvbmZpZyBIQU5HQ0hFQ0tfVElNRVIKLQl0cmlzdGF0ZSAiSGFuZ2NoZWNrIHRpbWVyIgotCWhlbHAKLQkgIFRoZSBoYW5nY2hlY2stdGltZXIgbW9kdWxlIGRldGVjdHMgd2hlbiB0aGUgc3lzdGVtIGhhcyBnb25lCi0JICBvdXQgdG8gbHVuY2ggcGFzdCBhIGNlcnRhaW4gbWFyZ2luLiAgSXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtCi0JICBvciBtZXJlbHkgcHJpbnQgYSB3YXJuaW5nLgotCi1zb3VyY2UgImRyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnIgotCi1jb21tZW50ICJTLzM5MCBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlcnMiCi0KLWNvbmZpZyBUTjMyNzAKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgbG9jYWxseSBhdHRhY2hlZCAzMjcwIHRlcm1pbmFscyIKLQloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIElCTSAzMjcwIHRlcm1pbmFscy4KLQotY29uZmlnIFROMzI3MF9UVFkKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgdHR5IGlucHV0L291dHB1dCBvbiAzMjcwIHRlcm1pbmFscyIKLQlkZXBlbmRzIG9uIFROMzI3MAotCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdXNpbmcgYW4gSUJNIDMyNzAgdGVybWluYWwgYXMgYSBMaW51eCB0dHkuCi0KLWNvbmZpZyBUTjMyNzBfRlMKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgZnVsbHNjcmVlbiBhcHBsaWNhdGlvbnMgb24gMzI3MCB0ZXJtaW5hbHMiCi0JZGVwZW5kcyBvbiBUTjMyNzAKLQloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIGZ1bGxzY3JlZW4gYXBwbGljYXRpb25zIG9uIGFuIElCTSAzMjcwIHRlcm1pbmFsLgotCi1jb25maWcgVE4zMjcwX0NPTlNPTEUKLQlib29sICJTdXBwb3J0IGZvciBjb25zb2xlIG9uIDMyNzAgdGVybWluYWwiCi0JZGVwZW5kcyBvbiBUTjMyNzA9eSAmJiBUTjMyNzBfVFRZPXkKLQloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHVzaW5nIGFuIElCTSAzMjcwIHRlcm1pbmFsIGFzIGEgTGludXggc3lzdGVtCi0JICBjb25zb2xlLiAgQXZhaWxhYmxlIG9ubHkgaWYgMzI3MCBzdXBwb3J0IGlzIGNvbXBpbGVkIGluIHN0YXRpY2FsbHkuCi0KLWNvbmZpZyBUTjMyMTUKLQlib29sICJTdXBwb3J0IGZvciAzMjE1IGxpbmUgbW9kZSB0ZXJtaW5hbCIKLQloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIElCTSAzMjE1IGxpbmUtbW9kZSB0ZXJtaW5hbHMuCi0KLWNvbmZpZyBUTjMyMTVfQ09OU09MRQotCWJvb2wgIlN1cHBvcnQgZm9yIGNvbnNvbGUgb24gMzIxNSBsaW5lIG1vZGUgdGVybWluYWwiCi0JZGVwZW5kcyBvbiBUTjMyMTUKLQloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHVzaW5nIGFuIElCTSAzMjE1IGxpbmUtbW9kZSB0ZXJtaW5hbCBhcyBhCi0JICBMaW51eCBzeXN0ZW0gY29uc29sZS4KLQotY29uZmlnIENDV19DT05TT0xFCi0gCWJvb2wKLSAJZGVwZW5kcyBvbiBUTjMyMTVfQ09OU09MRSB8fCBUTjMyNzBfQ09OU09MRQotIAlkZWZhdWx0IHkKLSAKLWNvbmZpZyBTQ0xQX1RUWQotCWJvb2wgIlN1cHBvcnQgZm9yIFNDTFAgbGluZSBtb2RlIHRlcm1pbmFsIgotCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgSUJNIFNDTFAgbGluZS1tb2RlIHRlcm1pbmFscy4KLQotY29uZmlnIFNDTFBfQ09OU09MRQotCWJvb2wgIlN1cHBvcnQgZm9yIGNvbnNvbGUgb24gU0NMUCBsaW5lIG1vZGUgdGVybWluYWwiCi0JZGVwZW5kcyBvbiBTQ0xQX1RUWQotCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdXNpbmcgYW4gSUJNIEhXQyBsaW5lLW1vZGUgdGVybWluYWwgYXMgdGhlIExpbnV4Ci0JICBzeXN0ZW0gY29uc29sZS4KLQotY29uZmlnIFNDTFBfVlQyMjBfVFRZCi0JYm9vbCAiU3VwcG9ydCBmb3IgU0NMUCBWVDIyMC1jb21wYXRpYmxlIHRlcm1pbmFsIgotCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgYW4gSUJNIFNDTFAgVlQyMjAtY29tcGF0aWJsZSB0ZXJtaW5hbC4KLQotY29uZmlnIFNDTFBfVlQyMjBfQ09OU09MRQotCWJvb2wgIlN1cHBvcnQgZm9yIGNvbnNvbGUgb24gU0NMUCBWVDIyMC1jb21wYXRpYmxlIHRlcm1pbmFsIgotCWRlcGVuZHMgb24gU0NMUF9WVDIyMF9UVFkKLQloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHVzaW5nIGFuIElCTSBTQ0xQIFZUMjIwLWNvbXBhdGlibGUgdGVybWluYWwgYXMgYQotCSAgTGludXggc3lzdGVtIGNvbnNvbGUuCi0KLWNvbmZpZyBTQ0xQX0NQSQotCXRyaXN0YXRlICJDb250cm9sLVByb2dyYW0gSWRlbnRpZmljYXRpb24iCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgY29uc29sZSBpbnRlcmZhY2UgZm9yIHN5c3RlbQotCSAgaWRlbnRpZmljYXRpb24uIFRoaXMgaXMgY29tbW9ubHkgdXNlZCBmb3Igd29ya2xvYWQgbWFuYWdlbWVudCBhbmQKLQkgIGdpdmVzIHlvdSBhIG5pY2UgbmFtZSBmb3IgdGhlIHN5c3RlbSBvbiB0aGUgc2VydmljZSBlbGVtZW50LgotCSAgUGxlYXNlIHNlbGVjdCB0aGlzIG9wdGlvbiBhcyBhIG1vZHVsZSBzaW5jZSBidWlsdC1pbiBvcGVyYXRpb24gaXMKLQkgIGNvbXBsZXRlbHkgdW50ZXN0ZWQuCi0JICBZb3Ugc2hvdWxkIG9ubHkgc2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywKLQkgIG5lZWQgdGhpcyBmZWF0dXJlIGFuZCBpbnRlbmQgdG8gcnVuIHlvdXIga2VybmVsIGluIExQQVIuCi0KLWNvbmZpZyBTMzkwX1RBUEUKLQl0cmlzdGF0ZSAiUy8zOTAgdGFwZSBkZXZpY2Ugc3VwcG9ydCIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gYWNjZXNzIGNoYW5uZWwtYXR0YWNoZWQgdGFwZQotCSAgZGV2aWNlcyBvbiBJQk0gUy8zOTAgb3IgelNlcmllcy4KLQkgIElmIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24geW91IHdpbGwgYWxzbyB3YW50IHRvIHNlbGVjdCBhdAotCSAgbGVhc3Qgb25lIG9mIHRoZSB0YXBlIGludGVyZmFjZSBvcHRpb25zIGFuZCBvbmUgb2YgdGhlIHRhcGUKLQkgIGhhcmR3YXJlIG9wdGlvbnMgaW4gb3JkZXIgdG8gYWNjZXNzIGEgdGFwZSBkZXZpY2UuCi0JICBUaGlzIG9wdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZS4gVGhlIG1vZHVsZSB3aWxsIGJlCi0JICBjYWxsZWQgdGFwZTM5MCBhbmQgaW5jbHVkZSBhbGwgc2VsZWN0ZWQgaW50ZXJmYWNlcyBhbmQKLQkgIGhhcmR3YXJlIGRyaXZlcnMuCi0KLWNvbW1lbnQgIlMvMzkwIHRhcGUgaW50ZXJmYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTMzkwX1RBUEUKLQotY29uZmlnIFMzOTBfVEFQRV9CTE9DSwotCWJvb2wgIlN1cHBvcnQgZm9yIHRhcGUgYmxvY2sgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIFMzOTBfVEFQRQotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgeW91ciBjaGFubmVsLWF0dGFjaGVkIHRhcGUKLQkgIGRldmljZXMgdXNpbmcgdGhlIGJsb2NrIGRldmljZSBpbnRlcmZhY2UuICBUaGlzIGludGVyZmFjZSBpcyBzaW1pbGFyCi0JICB0byBDRC1ST00gZGV2aWNlcyBvbiBvdGhlciBwbGF0Zm9ybXMuICBUaGUgdGFwZXMgY2FuIG9ubHkgYmUKLQkgIGFjY2Vzc2VkIHJlYWQtb25seSB3aGVuIHVzaW5nIHRoaXMgaW50ZXJmYWNlLiAgSGF2ZSBhIGxvb2sgYXQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vczM5MC9UQVBFPiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCBjcmVhdGluZwotCSAgdm9sdW1lcyBmb3IgYW5kIHVzaW5nIHRoaXMgaW50ZXJmYWNlLiAgSXQgaXMgc2FmZSB0byBzYXkgIlkiIGhlcmUuCi0KLWNvbW1lbnQgIlMvMzkwIHRhcGUgaGFyZHdhcmUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFMzOTBfVEFQRQotCi1jb25maWcgUzM5MF9UQVBFXzM0WFgKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgMzQ4MC8zNDkwIHRhcGUgaGFyZHdhcmUiCi0JZGVwZW5kcyBvbiBTMzkwX1RBUEUKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gYWNjZXNzIElCTSAzNDgwLzM0OTAgbWFnbmV0aWMKLQkgIHRhcGUgc3Vic3lzdGVtcyBhbmQgMTAwJSBjb21wYXRpYmxlcy4KLQkgIEl0IGlzIHNhZmUgdG8gc2F5ICJZIiBoZXJlLgotCi1jb25maWcgUzM5MF9UQVBFXzM1OTAKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgMzU5MCB0YXBlIGhhcmR3YXJlIgotCWRlcGVuZHMgb24gUzM5MF9UQVBFCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGFjY2VzcyBJQk0gMzU5MCBtYWduZXRpYwotCSAgdGFwZSBzdWJzeXN0ZW1zIGFuZCAxMDAlIGNvbXBhdGlibGVzLgotCSAgSXQgaXMgc2FmZSB0byBzYXkgIlkiIGhlcmUuCi0KLWNvbmZpZyBWTUxPR1JEUgotCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0aGUgei9WTSByZWNvcmRpbmcgc3lzdGVtIHNlcnZpY2VzIChWTSBvbmx5KSIKLQlkZXBlbmRzIG9uIElVQ1YKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byByZWNlaXZlIHJlY29yZHMgY29sbGVjdGVkCi0JICBieSB0aGUgei9WTSByZWNvcmRpbmcgc3lzdGVtIHNlcnZpY2VzLCBlZy4gZnJvbSAqTE9HUkVDLCAqQUNDT1VOVCBvcgotCSAgKlNZTVBUT00uCi0JICBUaGlzIGRyaXZlciBkZXBlbmRzIG9uIHRoZSBJVUNWIHN1cHBvcnQgZHJpdmVyLgotCi1jb25maWcgVk1DUAotCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0aGUgei9WTSBDUCBpbnRlcmZhY2UgKFZNIG9ubHkpIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggdGhlIGNvbnRyb2wKLQkgIHByb2dyYW0gb24gei9WTQotCi0KLWNvbmZpZyBNT05SRUFERVIKLQl0cmlzdGF0ZSAiQVBJIGZvciByZWFkaW5nIHovVk0gbW9uaXRvciBzZXJ2aWNlIHJlY29yZHMiCi0JZGVwZW5kcyBvbiBJVUNWCi0JaGVscAotCSAgQ2hhcmFjdGVyIGRldmljZSBkcml2ZXIgZm9yIHJlYWRpbmcgei9WTSBtb25pdG9yIHNlcnZpY2UgcmVjb3JkcwotCi1jb25maWcgTU9OV1JJVEVSCi0JdHJpc3RhdGUgIkFQSSBmb3Igd3JpdGluZyB6L1ZNIG1vbml0b3Igc2VydmljZSByZWNvcmRzIgotCWRlZmF1bHQgIm0iCi0JaGVscAotCSAgQ2hhcmFjdGVyIGRldmljZSBkcml2ZXIgZm9yIHdyaXRpbmcgei9WTSBtb25pdG9yIHNlcnZpY2UgcmVjb3JkcwotCi1lbmRtZW51Ci0KLW1lbnUgIkNyeXB0b2dyYXBoaWMgZGV2aWNlcyIKLQotY29uZmlnIFpDUllQVAotCXRyaXN0YXRlICJTdXBwb3J0IGZvciBQQ0ktYXR0YWNoZWQgY3J5cHRvZ3JhcGhpYyBhZGFwdGVycyIKLQlzZWxlY3QgWkNSWVBUX01PTk9MSVRISUMgaWYgWkNSWVBUPSJ5IgotCWRlZmF1bHQgIm0iCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBhIFBDSS1hdHRhY2hlZCBjcnlwdG9ncmFwaGljCi0JICBhZGFwdGVyIGxpa2U6Ci0JICArIFBDSSBDcnlwdG9ncmFwaGljIEFjY2VsZXJhdG9yIChQQ0lDQSkKLQkgICsgUENJIENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgKFBDSUNDKQotCSAgKyBQQ0ktWCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChQQ0lYQ0MpCi0JICArIENyeXB0byBFeHByZXNzMiBDb3Byb2Nlc3NvciAoQ0VYMkMpCi0JICArIENyeXB0byBFeHByZXNzMiBBY2NlbGVyYXRvciAoQ0VYMkEpCi0KLWNvbmZpZyBaQ1JZUFRfTU9OT0xJVEhJQwotCWJvb2wgIk1vbm9saXRoaWMgemNyeXB0IG1vZHVsZSIKLQlkZXBlbmRzIG9uIFpDUllQVD0ibSIKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSBtb2R1bGUgejkwY3J5cHQua28KLQkgIHRoYXQgY29udGFpbnMgYWxsIHBhcnRzIG9mIHRoZSBjcnlwdG8gZGV2aWNlIGRyaXZlciAoYXAgYnVzLAotCSAgcmVxdWVzdCByb3V0ZXIgYW5kIGFsbCB0aGUgY2FyZCBkcml2ZXJzKS4KLQotZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWcgYi9kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZwppbmRleCBiMjUwYzUzLi5lODc5YjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZwpAQCAtMSwxMSArMSw5IEBACi1pZiBTMzkwICYmIEJMT0NLCi0KIGNvbW1lbnQgIlMvMzkwIGJsb2NrIGRldmljZSBkcml2ZXJzIgotCWRlcGVuZHMgb24gUzM5MAorCWRlcGVuZHMgb24gUzM5MCAmJiBCTE9DSwogCiBjb25maWcgQkxLX0RFVl9YUFJBTQogCXRyaXN0YXRlICJYUFJBTSBkaXNrIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTMzkwCisJZGVwZW5kcyBvbiBTMzkwICYmIEJMT0NLCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSB5b3VyIGV4cGFuZGVkIHN0b3JhZ2Ugb24gUy8zOTAKIAkgIG9yIHpTZXJpZXMgYXMgYSBkaXNrLiAgVGhpcyBpcyB1c2VmdWwgYXMgYSBfZmFzdF8gc3dhcCBkZXZpY2UgaWYgeW91CkBAIC0xNSwxMiArMTMsMTMgQEAKIAogY29uZmlnIERDU1NCTEsKIAl0cmlzdGF0ZSAiRENTU0JMSyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUzM5MCAmJiBCTE9DSwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGRjc3MgYmxvY2sgZGV2aWNlCiAKIGNvbmZpZyBEQVNECiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIERBU0QgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIENDVworCWRlcGVuZHMgb24gQ0NXICYmIEJMT0NLCiAJaGVscAogCSAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGFjY2VzcyBEQVNEcyBkaXJlY3RseSB1dGlsaXppbmcKIAkgIFMvMzkwcyBjaGFubmVsIHN1YnN5c3RlbSBjb21tYW5kcy4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHJ1bm5pbmcKQEAgLTYyLDUgKzYxLDMgQEAKIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgY2hhcmFjdGVyIGRldmljZSBpbnRlcmZhY2UgdG8gdGhlCiAJICBEQVNEIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZy4gVGhpcyBpcyBvbmx5IG5lZWRlZCBpZiB5b3Ugd2FudCB0bwogCSAgdXNlIGFwcGxpY2F0aW9ucyB3cml0dGVuIGZvciB0aGUgRUVSIGZhY2lsaXR5LgotCi1lbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggOTc3NTIxMC4uYmZlY2E1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC0yMTc0LDkgKzIxNzQsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdHJ1Y3QgZGFzZF9jY3dfcmVxICogZGFzZF9nZW5lcmljX2J1aWxkX3JkYyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKLQkJCQkJICAgICB2b2lkICpyZGNfYnVmZmVyLAotCQkJCQkgICAgIGludCByZGNfYnVmZmVyX3NpemUsIGNoYXIgKm1hZ2ljKQorc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZ2VuZXJpY19idWlsZF9yZGMoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCisJCQkJCQkgICB2b2lkICpyZGNfYnVmZmVyLAorCQkJCQkJICAgaW50IHJkY19idWZmZXJfc2l6ZSwKKwkJCQkJCSAgIGNoYXIgKm1hZ2ljKQogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlzdHJ1Y3QgY2N3MSAqY2N3OwpAQCAtMjIxOSw2ICsyMjIwLDcgQEAKIAlkYXNkX3NmcmVlX3JlcXVlc3QoY3FyLCBjcXItPmRldmljZSk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyk7CiAKIHN0YXRpYyBpbnQgX19pbml0CiBkYXNkX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwppbmRleCBlODEwZTRhLi5lY2NhYzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCkBAIC01MCw2ICs1MCw3IEBACiAJc3RydWN0IGRhc2RfZGlhZ19yd19pbyBpb2I7CiAJc3RydWN0IGRhc2RfZGlhZ19pbml0X2lvIGlpYjsKIAlibG9ja251bV90IHB0X2Jsb2NrOworCXN0cnVjdCBjY3dfZGV2X2lkIGRldl9pZDsKIH07CiAKIHN0cnVjdCBkYXNkX2RpYWdfcmVxIHsKQEAgLTEwMiw3ICsxMDMsNyBAQAogCWlpYiA9ICZwcml2YXRlLT5paWI7CiAJbWVtc2V0KGlpYiwgMCwgc2l6ZW9mIChzdHJ1Y3QgZGFzZF9kaWFnX2luaXRfaW8pKTsKIAotCWlpYi0+ZGV2X25yID0gX2Njd19kZXZpY2VfZ2V0X2RldmljZV9udW1iZXIoZGV2aWNlLT5jZGV2KTsKKwlpaWItPmRldl9uciA9IHByaXZhdGUtPmRldl9pZC5kZXZubzsKIAlpaWItPmJsb2NrX3NpemUgPSBibG9ja3NpemU7CiAJaWliLT5vZmZzZXQgPSBvZmZzZXQ7CiAJaWliLT5mbGFnYSA9IERBU0RfRElBR19GTEFHQV9ERUZBVUxUOwpAQCAtMTI3LDcgKzEyOCw3IEBACiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9kaWFnX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWlpYiA9ICZwcml2YXRlLT5paWI7CiAJbWVtc2V0KGlpYiwgMCwgc2l6ZW9mIChzdHJ1Y3QgZGFzZF9kaWFnX2luaXRfaW8pKTsKLQlpaWItPmRldl9uciA9IF9jY3dfZGV2aWNlX2dldF9kZXZpY2VfbnVtYmVyKGRldmljZS0+Y2Rldik7CisJaWliLT5kZXZfbnIgPSBwcml2YXRlLT5kZXZfaWQuZGV2bm87CiAJcmMgPSBkaWEyNTAoaWliLCBURVJNX0JJTyk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTY2LDcgKzE2Nyw3IEBACiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9kaWFnX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWRyZXEgPSAoc3RydWN0IGRhc2RfZGlhZ19yZXEgKikgY3FyLT5kYXRhOwogCi0JcHJpdmF0ZS0+aW9iLmRldl9uciA9IF9jY3dfZGV2aWNlX2dldF9kZXZpY2VfbnVtYmVyKGRldmljZS0+Y2Rldik7CisJcHJpdmF0ZS0+aW9iLmRldl9uciA9IHByaXZhdGUtPmRldl9pZC5kZXZubzsKIAlwcml2YXRlLT5pb2Iua2V5ID0gMDsKIAlwcml2YXRlLT5pb2IuZmxhZ3MgPSBEQVNEX0RJQUdfUldGTEFHX0FTWU5DOwogCXByaXZhdGUtPmlvYi5ibG9ja19jb3VudCA9IGRyZXEtPmJsb2NrX2NvdW50OwpAQCAtMzIzLDExICszMjQsMTIgQEAKIAkJCQkibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBwcml2YXRlIGRhdGEiKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CisJCWNjd19kZXZpY2VfZ2V0X2lkKGRldmljZS0+Y2RldiwgJnByaXZhdGUtPmRldl9pZCk7CiAJCWRldmljZS0+cHJpdmF0ZSA9ICh2b2lkICopIHByaXZhdGU7CiAJfQogCS8qIFJlYWQgRGV2aWNlIENoYXJhY3RlcmlzdGljcyAqLwogCXJkY19kYXRhID0gKHZvaWQgKikgJihwcml2YXRlLT5yZGNfZGF0YSk7Ci0JcmRjX2RhdGEtPmRldl9uciA9IF9jY3dfZGV2aWNlX2dldF9kZXZpY2VfbnVtYmVyKGRldmljZS0+Y2Rldik7CisJcmRjX2RhdGEtPmRldl9uciA9IHByaXZhdGUtPmRldl9pZC5kZXZubzsKIAlyZGNfZGF0YS0+cmRjX2xlbiA9IHNpemVvZiAoc3RydWN0IGRhc2RfZGlhZ19jaGFyYWN0ZXJpc3RpY3MpOwogCiAJcmMgPSBkaWFnMjEwKChzdHJ1Y3QgZGlhZzIxMCAqKSByZGNfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggYzk1ODNmYi4uNDE4YjRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtNDUwLDkgKzQ1MCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBkYXNkX2Njd19yZXEgKiBkYXNkX2Vja2RfYnVpbGRfcmNkX2xwbShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKLQkJCQkJICAgICAgdm9pZCAqcmNkX2J1ZmZlciwKLQkJCQkJICAgICAgc3RydWN0IGNpdyAqY2l3LCBfX3U4IGxwbSkKK3N0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2Vja2RfYnVpbGRfcmNkX2xwbShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKKwkJCQkJCSAgICB2b2lkICpyY2RfYnVmZmVyLAorCQkJCQkJICAgIHN0cnVjdCBjaXcgKmNpdywgX191OCBscG0pCiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCXN0cnVjdCBjY3cxICpjY3c7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCmluZGV4IGExZGM4YzQuLjBjMDgxYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCkBAIC0xNCw5ICsxNCw5IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAKQEAgLTUxNCw3ICs1MTQsNyBAQAogICogdG8gdHJhbnNmZXIgaW4gYSByZWFkYnVmZmVyLCB3aGljaCBpcyBwcm90ZWN0ZWQgYnkgdGhlIHJlYWRidWZmZXJfbXV0ZXguCiAgKi8KIHN0YXRpYyBjaGFyIHJlYWRidWZmZXJbUEFHRV9TSVpFXTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKHJlYWRidWZmZXJfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChyZWFkYnVmZmVyX211dGV4KTsKIAogc3RhdGljIGludCBkYXNkX2Vlcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5wLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKQEAgLTU3OSw3ICs1NzksNyBAQAogCXN0cnVjdCBlZXJidWZmZXIgKmVlcmI7CiAKIAllZXJiID0gKHN0cnVjdCBlZXJidWZmZXIgKikgZmlscC0+cHJpdmF0ZV9kYXRhOwotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnJlYWRidWZmZXJfbXV0ZXgpKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnJlYWRidWZmZXJfbXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1ZmZlcmxvY2ssIGZsYWdzKTsKQEAgLTU4OCw3ICs1ODgsNyBAQAogCQkgICAgICAgICAgICAgICAgICAvKiBoYXMgYmVlbiBkZWxldGVkICAgICAgICAgICAgICovCiAJCWVlcmItPnJlc2lkdWFsID0gMDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVmZmVybG9jaywgZmxhZ3MpOwotCQl1cCgmcmVhZGJ1ZmZlcl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcmVhZGJ1ZmZlcl9tdXRleCk7CiAJCXJldHVybiAtRUlPOwogCX0gZWxzZSBpZiAoZWVyYi0+cmVzaWR1YWwgPiAwKSB7CiAJCS8qIE9LIHdlIHN0aWxsIGhhdmUgYSBzZWNvbmQgaGFsZiBvZiBhIHJlY29yZCB0byBkZWxpdmVyICovCkBAIC02MDIsNyArNjAyLDcgQEAKIAkJCWlmICghdGMpIHsKIAkJCQkvKiBubyBkYXRhIGF2YWlsYWJsZSAqLwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1ZmZlcmxvY2ssIGZsYWdzKTsKLQkJCQl1cCgmcmVhZGJ1ZmZlcl9tdXRleCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZyZWFkYnVmZmVyX211dGV4KTsKIAkJCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCQkJCXJldHVybiAtRUFHQUlOOwogCQkJCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKApAQCAtNjEwLDcgKzYxMCw3IEBACiAJCQkJCWVlcmItPmhlYWQgIT0gZWVyYi0+dGFpbCk7CiAJCQkJaWYgKHJjKQogCQkJCQlyZXR1cm4gcmM7Ci0JCQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmcmVhZGJ1ZmZlcl9tdXRleCkpCisJCQkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcmVhZGJ1ZmZlcl9tdXRleCkpCiAJCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1ZmZlcmxvY2ssIGZsYWdzKTsKIAkJCX0KQEAgLTYyNiwxMSArNjI2LDExIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVmZmVybG9jaywgZmxhZ3MpOwogCiAJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJlYWRidWZmZXIsIGVmZmVjdGl2ZV9jb3VudCkpIHsKLQkJdXAoJnJlYWRidWZmZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJnJlYWRidWZmZXJfbXV0ZXgpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQl1cCgmcmVhZGJ1ZmZlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWFkYnVmZmVyX211dGV4KTsKIAlyZXR1cm4gZWZmZWN0aXZlX2NvdW50OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwppbmRleCA3NThjZmI1Li42NzJlYjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKQEAgLTI1NSw2ICsyNTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjOwogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OworCXN0cnVjdCBjY3dfZGV2X2lkIGRldl9pZDsKIAogCWlmICghZGV2aWNlLT5kaXNjaXBsaW5lLT5maWxsX2luZm8pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjcwLDggKzI3MSw5IEBACiAJfQogCiAJY2RldiA9IGRldmljZS0+Y2RldjsKKwljY3dfZGV2aWNlX2dldF9pZChjZGV2LCAmZGV2X2lkKTsKIAotCWRhc2RfaW5mby0+ZGV2bm8gPSBfY2N3X2RldmljZV9nZXRfZGV2aWNlX251bWJlcihkZXZpY2UtPmNkZXYpOworCWRhc2RfaW5mby0+ZGV2bm8gPSBkZXZfaWQuZGV2bm87CiAJZGFzZF9pbmZvLT5zY2hpZCA9IF9jY3dfZGV2aWNlX2dldF9zdWJjaGFubmVsX251bWJlcihkZXZpY2UtPmNkZXYpOwogCWRhc2RfaW5mby0+Y3VfdHlwZSA9IGNkZXYtPmlkLmN1X3R5cGU7CiAJZGFzZF9pbmZvLT5jdV9tb2RlbCA9IGNkZXYtPmlkLmN1X21vZGVsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvczM5MC9jaGFyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxMDJhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL0tjb25maWcKQEAgLTAsMCArMSwxNjYgQEAKK2NvbW1lbnQgIlMvMzkwIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycyIKKwlkZXBlbmRzIG9uIFMzOTAKKworY29uZmlnIFROMzI3MAorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBsb2NhbGx5IGF0dGFjaGVkIDMyNzAgdGVybWluYWxzIgorCWRlcGVuZHMgb24gQ0NXCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBJQk0gMzI3MCB0ZXJtaW5hbHMuCisKK2NvbmZpZyBUTjMyNzBfVFRZCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIHR0eSBpbnB1dC9vdXRwdXQgb24gMzI3MCB0ZXJtaW5hbHMiCisJZGVwZW5kcyBvbiBUTjMyNzAKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHVzaW5nIGFuIElCTSAzMjcwIHRlcm1pbmFsIGFzIGEgTGludXggdHR5LgorCitjb25maWcgVE4zMjcwX0ZTCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIGZ1bGxzY3JlZW4gYXBwbGljYXRpb25zIG9uIDMyNzAgdGVybWluYWxzIgorCWRlcGVuZHMgb24gVE4zMjcwCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBmdWxsc2NyZWVuIGFwcGxpY2F0aW9ucyBvbiBhbiBJQk0gMzI3MCB0ZXJtaW5hbC4KKworY29uZmlnIFROMzI3MF9DT05TT0xFCisJYm9vbCAiU3VwcG9ydCBmb3IgY29uc29sZSBvbiAzMjcwIHRlcm1pbmFsIgorCWRlcGVuZHMgb24gVE4zMjcwPXkgJiYgVE4zMjcwX1RUWT15CisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB1c2luZyBhbiBJQk0gMzI3MCB0ZXJtaW5hbCBhcyBhIExpbnV4IHN5c3RlbQorCSAgY29uc29sZS4gIEF2YWlsYWJsZSBvbmx5IGlmIDMyNzAgc3VwcG9ydCBpcyBjb21waWxlZCBpbiBzdGF0aWNhbGx5LgorCitjb25maWcgVE4zMjE1CisJYm9vbCAiU3VwcG9ydCBmb3IgMzIxNSBsaW5lIG1vZGUgdGVybWluYWwiCisJZGVwZW5kcyBvbiBDQ1cKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIElCTSAzMjE1IGxpbmUtbW9kZSB0ZXJtaW5hbHMuCisKK2NvbmZpZyBUTjMyMTVfQ09OU09MRQorCWJvb2wgIlN1cHBvcnQgZm9yIGNvbnNvbGUgb24gMzIxNSBsaW5lIG1vZGUgdGVybWluYWwiCisJZGVwZW5kcyBvbiBUTjMyMTUKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHVzaW5nIGFuIElCTSAzMjE1IGxpbmUtbW9kZSB0ZXJtaW5hbCBhcyBhCisJICBMaW51eCBzeXN0ZW0gY29uc29sZS4KKworY29uZmlnIENDV19DT05TT0xFCisJYm9vbAorCWRlcGVuZHMgb24gVE4zMjE1X0NPTlNPTEUgfHwgVE4zMjcwX0NPTlNPTEUKKwlkZWZhdWx0IHkKKworY29uZmlnIFNDTFAKKwlib29sICJTdXBwb3J0IGZvciBTQ0xQIgorCWRlcGVuZHMgb24gUzM5MAorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFNDTFAgaW50ZXJmYWNlIHRvIHRoZSBzZXJ2aWNlIGVsZW1lbnQuCisKK2NvbmZpZyBTQ0xQX1RUWQorCWJvb2wgIlN1cHBvcnQgZm9yIFNDTFAgbGluZSBtb2RlIHRlcm1pbmFsIgorCWRlcGVuZHMgb24gU0NMUAorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgSUJNIFNDTFAgbGluZS1tb2RlIHRlcm1pbmFscy4KKworY29uZmlnIFNDTFBfQ09OU09MRQorCWJvb2wgIlN1cHBvcnQgZm9yIGNvbnNvbGUgb24gU0NMUCBsaW5lIG1vZGUgdGVybWluYWwiCisJZGVwZW5kcyBvbiBTQ0xQX1RUWQorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdXNpbmcgYW4gSUJNIEhXQyBsaW5lLW1vZGUgdGVybWluYWwgYXMgdGhlIExpbnV4CisJICBzeXN0ZW0gY29uc29sZS4KKworY29uZmlnIFNDTFBfVlQyMjBfVFRZCisJYm9vbCAiU3VwcG9ydCBmb3IgU0NMUCBWVDIyMC1jb21wYXRpYmxlIHRlcm1pbmFsIgorCWRlcGVuZHMgb24gU0NMUAorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgYW4gSUJNIFNDTFAgVlQyMjAtY29tcGF0aWJsZSB0ZXJtaW5hbC4KKworY29uZmlnIFNDTFBfVlQyMjBfQ09OU09MRQorCWJvb2wgIlN1cHBvcnQgZm9yIGNvbnNvbGUgb24gU0NMUCBWVDIyMC1jb21wYXRpYmxlIHRlcm1pbmFsIgorCWRlcGVuZHMgb24gU0NMUF9WVDIyMF9UVFkKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHVzaW5nIGFuIElCTSBTQ0xQIFZUMjIwLWNvbXBhdGlibGUgdGVybWluYWwgYXMgYQorCSAgTGludXggc3lzdGVtIGNvbnNvbGUuCisKK2NvbmZpZyBTQ0xQX0NQSQorCXRyaXN0YXRlICJDb250cm9sLVByb2dyYW0gSWRlbnRpZmljYXRpb24iCisJZGVwZW5kcyBvbiBTQ0xQCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgY29uc29sZSBpbnRlcmZhY2UgZm9yIHN5c3RlbQorCSAgaWRlbnRpZmljYXRpb24uIFRoaXMgaXMgY29tbW9ubHkgdXNlZCBmb3Igd29ya2xvYWQgbWFuYWdlbWVudCBhbmQKKwkgIGdpdmVzIHlvdSBhIG5pY2UgbmFtZSBmb3IgdGhlIHN5c3RlbSBvbiB0aGUgc2VydmljZSBlbGVtZW50LgorCSAgUGxlYXNlIHNlbGVjdCB0aGlzIG9wdGlvbiBhcyBhIG1vZHVsZSBzaW5jZSBidWlsdC1pbiBvcGVyYXRpb24gaXMKKwkgIGNvbXBsZXRlbHkgdW50ZXN0ZWQuCisJICBZb3Ugc2hvdWxkIG9ubHkgc2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywKKwkgIG5lZWQgdGhpcyBmZWF0dXJlIGFuZCBpbnRlbmQgdG8gcnVuIHlvdXIga2VybmVsIGluIExQQVIuCisKK2NvbmZpZyBTMzkwX1RBUEUKKwl0cmlzdGF0ZSAiUy8zOTAgdGFwZSBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIENDVworCWhlbHAKKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgY2hhbm5lbC1hdHRhY2hlZCB0YXBlCisJICBkZXZpY2VzIG9uIElCTSBTLzM5MCBvciB6U2VyaWVzLgorCSAgSWYgeW91IHNlbGVjdCB0aGlzIG9wdGlvbiB5b3Ugd2lsbCBhbHNvIHdhbnQgdG8gc2VsZWN0IGF0CisJICBsZWFzdCBvbmUgb2YgdGhlIHRhcGUgaW50ZXJmYWNlIG9wdGlvbnMgYW5kIG9uZSBvZiB0aGUgdGFwZQorCSAgaGFyZHdhcmUgb3B0aW9ucyBpbiBvcmRlciB0byBhY2Nlc3MgYSB0YXBlIGRldmljZS4KKwkgIFRoaXMgb3B0aW9uIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlLiBUaGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCB0YXBlMzkwIGFuZCBpbmNsdWRlIGFsbCBzZWxlY3RlZCBpbnRlcmZhY2VzIGFuZAorCSAgaGFyZHdhcmUgZHJpdmVycy4KKworY29tbWVudCAiUy8zOTAgdGFwZSBpbnRlcmZhY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFMzOTBfVEFQRQorCitjb25maWcgUzM5MF9UQVBFX0JMT0NLCisJYm9vbCAiU3VwcG9ydCBmb3IgdGFwZSBibG9jayBkZXZpY2VzIgorCWRlcGVuZHMgb24gUzM5MF9UQVBFCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGFjY2VzcyB5b3VyIGNoYW5uZWwtYXR0YWNoZWQgdGFwZQorCSAgZGV2aWNlcyB1c2luZyB0aGUgYmxvY2sgZGV2aWNlIGludGVyZmFjZS4gIFRoaXMgaW50ZXJmYWNlIGlzIHNpbWlsYXIKKwkgIHRvIENELVJPTSBkZXZpY2VzIG9uIG90aGVyIHBsYXRmb3Jtcy4gIFRoZSB0YXBlcyBjYW4gb25seSBiZQorCSAgYWNjZXNzZWQgcmVhZC1vbmx5IHdoZW4gdXNpbmcgdGhpcyBpbnRlcmZhY2UuICBIYXZlIGEgbG9vayBhdAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9zMzkwL1RBUEU+IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nCisJICB2b2x1bWVzIGZvciBhbmQgdXNpbmcgdGhpcyBpbnRlcmZhY2UuICBJdCBpcyBzYWZlIHRvIHNheSAiWSIgaGVyZS4KKworY29tbWVudCAiUy8zOTAgdGFwZSBoYXJkd2FyZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUzM5MF9UQVBFCisKK2NvbmZpZyBTMzkwX1RBUEVfMzRYWAorCXRyaXN0YXRlICJTdXBwb3J0IGZvciAzNDgwLzM0OTAgdGFwZSBoYXJkd2FyZSIKKwlkZXBlbmRzIG9uIFMzOTBfVEFQRQorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgSUJNIDM0ODAvMzQ5MCBtYWduZXRpYworCSAgdGFwZSBzdWJzeXN0ZW1zIGFuZCAxMDAlIGNvbXBhdGlibGVzLgorCSAgSXQgaXMgc2FmZSB0byBzYXkgIlkiIGhlcmUuCisKK2NvbmZpZyBTMzkwX1RBUEVfMzU5MAorCXRyaXN0YXRlICJTdXBwb3J0IGZvciAzNTkwIHRhcGUgaGFyZHdhcmUiCisJZGVwZW5kcyBvbiBTMzkwX1RBUEUKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gYWNjZXNzIElCTSAzNTkwIG1hZ25ldGljCisJICB0YXBlIHN1YnN5c3RlbXMgYW5kIDEwMCUgY29tcGF0aWJsZXMuCisJICBJdCBpcyBzYWZlIHRvIHNheSAiWSIgaGVyZS4KKworY29uZmlnIFZNTE9HUkRSCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIHRoZSB6L1ZNIHJlY29yZGluZyBzeXN0ZW0gc2VydmljZXMgKFZNIG9ubHkpIgorCWRlcGVuZHMgb24gSVVDVgorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHJlY2VpdmUgcmVjb3JkcyBjb2xsZWN0ZWQKKwkgIGJ5IHRoZSB6L1ZNIHJlY29yZGluZyBzeXN0ZW0gc2VydmljZXMsIGVnLiBmcm9tICpMT0dSRUMsICpBQ0NPVU5UIG9yCisJICAqU1lNUFRPTS4KKwkgIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gdGhlIElVQ1Ygc3VwcG9ydCBkcml2ZXIuCisKK2NvbmZpZyBWTUNQCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIHRoZSB6L1ZNIENQIGludGVyZmFjZSAoVk0gb25seSkiCisJZGVwZW5kcyBvbiBTMzkwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgY29udHJvbAorCSAgcHJvZ3JhbSBvbiB6L1ZNCisKKworY29uZmlnIE1PTlJFQURFUgorCXRyaXN0YXRlICJBUEkgZm9yIHJlYWRpbmcgei9WTSBtb25pdG9yIHNlcnZpY2UgcmVjb3JkcyIKKwlkZXBlbmRzIG9uIElVQ1YKKwloZWxwCisJICBDaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciBmb3IgcmVhZGluZyB6L1ZNIG1vbml0b3Igc2VydmljZSByZWNvcmRzCisKK2NvbmZpZyBNT05XUklURVIKKwl0cmlzdGF0ZSAiQVBJIGZvciB3cml0aW5nIHovVk0gbW9uaXRvciBzZXJ2aWNlIHJlY29yZHMiCisJZGVwZW5kcyBvbiBTMzkwCisJZGVmYXVsdCAibSIKKwloZWxwCisJICBDaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciBmb3Igd3JpdGluZyB6L1ZNIG1vbml0b3Igc2VydmljZSByZWNvcmRzCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKaW5kZXggOGRmN2IxMy4uNjcwMDliZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMKQEAgLTk3LDcgKzk3LDcgQEAKICAqIENyZWF0ZSB0aGUgOCBieXRlcyBFQkNESUMgRENTUyBzZWdtZW50IG5hbWUgZnJvbQogICogYW4gQVNDSUkgbmFtZSwgaW5jbC4gcGFkZGluZwogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZGNzc19ta25hbWUoY2hhciAqYXNjaWlfbmFtZSwgY2hhciAqZWJjZGljX25hbWUpCitzdGF0aWMgdm9pZCBkY3NzX21rbmFtZShjaGFyICphc2NpaV9uYW1lLCBjaGFyICplYmNkaWNfbmFtZSkKIHsKIAlpbnQgaTsKIApAQCAtMTkxLDcgKzE5MSw3IEBACiAJcmV0dXJuICooKHUzMiAqKSAobW9uX21jYV9zdGFydChtb25tc2cpICsgbW9ubXNnLT5tY2Ffb2Zmc2V0ICsgOCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBtb25fY2hlY2tfbWNhKHN0cnVjdCBtb25fbXNnICptb25tc2cpCitzdGF0aWMgaW50IG1vbl9jaGVja19tY2Eoc3RydWN0IG1vbl9tc2cgKm1vbm1zZykKIHsKIAlpZiAoKG1vbl9yZWNfZW5kKG1vbm1zZykgPD0gbW9uX3JlY19zdGFydChtb25tc2cpKSB8fAogCSAgICAobW9uX3JlY19zdGFydChtb25tc2cpIDwgbW9uX2Rjc3Nfc3RhcnQpIHx8CkBAIC0yMDksOCArMjA5LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbW9uX3NlbmRfcmVwbHkoc3RydWN0IG1vbl9tc2cgKm1vbm1zZywKLQkJCQkgc3RydWN0IG1vbl9wcml2YXRlICptb25wcml2KQorc3RhdGljIGludCBtb25fc2VuZF9yZXBseShzdHJ1Y3QgbW9uX21zZyAqbW9ubXNnLAorCQkJICBzdHJ1Y3QgbW9uX3ByaXZhdGUgKm1vbnByaXYpCiB7CiAJaW50IHJjOwogCkBAIC0yMzYsNyArMjM2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1vbl9mcmVlX21lbShzdHJ1Y3QgbW9uX3ByaXZhdGUgKm1vbnByaXYpCitzdGF0aWMgdm9pZCBtb25fZnJlZV9tZW0oc3RydWN0IG1vbl9wcml2YXRlICptb25wcml2KQogewogCWludCBpOwogCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAlrZnJlZShtb25wcml2KTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbW9uX3ByaXZhdGUgKm1vbl9hbGxvY19tZW0odm9pZCkKK3N0YXRpYyBzdHJ1Y3QgbW9uX3ByaXZhdGUgKm1vbl9hbGxvY19tZW0odm9pZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbW9uX3ByaXZhdGUgKm1vbnByaXY7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAltb25tc2ctPnBvcyA9IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1vbl9tc2cgKm1vbl9uZXh0X21lc3NhZ2Uoc3RydWN0IG1vbl9wcml2YXRlICptb25wcml2KQorc3RhdGljIHN0cnVjdCBtb25fbXNnICptb25fbmV4dF9tZXNzYWdlKHN0cnVjdCBtb25fcHJpdmF0ZSAqbW9ucHJpdikKIHsKIAlzdHJ1Y3QgbW9uX21zZyAqbW9ubXNnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKaW5kZXggOGZhY2QxNC4uNzQzOTQ0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwpAQCAtNDg3LDcgKzQ4Nyw3IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RhdGljIHN0cnVjdCBkaWFnMjEwIHJhdzMyNzBfaW5pdF9kaWFnMjEwOwotc3RhdGljIERFQ0xBUkVfTVVURVgocmF3MzI3MF9pbml0X3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKHJhdzMyNzBfaW5pdF9tdXRleCk7CiAKIHN0YXRpYyBpbnQKIHJhdzMyNzBfaW5pdF9pcnEoc3RydWN0IHJhdzMyNzBfdmlldyAqdmlldywgc3RydWN0IHJhdzMyNzBfcmVxdWVzdCAqcnEsCkBAIC01ODksOSArNTg5LDEwIEBACiBfX3JhdzMyNzBfc2l6ZV9kZXZpY2Vfdm0oc3RydWN0IHJhdzMyNzAgKnJwKQogewogCWludCByYywgbW9kZWw7CisJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOwogCi0JcmF3MzI3MF9pbml0X2RpYWcyMTAudnJkY2R2bm8gPSAKLQkJX2Njd19kZXZpY2VfZ2V0X2RldmljZV9udW1iZXIocnAtPmNkZXYpOworCWNjd19kZXZpY2VfZ2V0X2lkKHJwLT5jZGV2LCAmZGV2X2lkKTsKKwlyYXczMjcwX2luaXRfZGlhZzIxMC52cmRjZHZubyA9IGRldl9pZC5kZXZubzsKIAlyYXczMjcwX2luaXRfZGlhZzIxMC52cmRjbGVuID0gc2l6ZW9mKHN0cnVjdCBkaWFnMjEwKTsKIAlyYyA9IGRpYWcyMTAoJnJhdzMyNzBfaW5pdF9kaWFnMjEwKTsKIAlpZiAocmMpCkBAIC03MTIsNyArNzEzLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlkb3duKCZyYXczMjcwX2luaXRfc2VtKTsKKwltdXRleF9sb2NrKCZyYXczMjcwX2luaXRfbXV0ZXgpOwogCXJwLT52aWV3ID0gJnJhdzMyNzBfaW5pdF92aWV3OwogCXJhdzMyNzBfaW5pdF92aWV3LmRldiA9IHJwOwogCWlmIChNQUNISU5FX0lTX1ZNKQpAQCAtNzIxLDcgKzcyMiw3IEBACiAJCXJjID0gX19yYXczMjcwX3NpemVfZGV2aWNlKHJwKTsKIAlyYXczMjcwX2luaXRfdmlldy5kZXYgPSBOVUxMOwogCXJwLT52aWV3ID0gTlVMTDsKLQl1cCgmcmF3MzI3MF9pbml0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZyYXczMjcwX2luaXRfbXV0ZXgpOwogCWlmIChyYyA9PSAwKSB7CS8qIEZvdW5kIHNvbWV0aGluZy4gKi8KIAkJLyogVHJ5IHRvIGZpbmQgYSBtb2RlbC4gKi8KIAkJcnAtPm1vZGVsID0gMDsKQEAgLTc0OCw3ICs3NDksNyBAQAogewogCWludCByYzsKIAotCWRvd24oJnJhdzMyNzBfaW5pdF9zZW0pOworCW11dGV4X2xvY2soJnJhdzMyNzBfaW5pdF9tdXRleCk7CiAJbWVtc2V0KCZycC0+aW5pdF9yZXF1ZXN0LCAwLCBzaXplb2YocnAtPmluaXRfcmVxdWVzdCkpOwogCW1lbXNldCgmcnAtPmluaXRfZGF0YSwgMCwgc2l6ZW9mKHJwLT5pbml0X2RhdGEpKTsKIAkvKiBTdG9yZSByZXNldCBkYXRhIHN0cmVhbSB0byBpbml0X2RhdGEvaW5pdF9yZXF1ZXN0ICovCkBAIC03NjMsNyArNzY0LDcgQEAKIAlyYyA9IHJhdzMyNzBfc3RhcnRfaW5pdChycCwgJnJhdzMyNzBfaW5pdF92aWV3LCAmcnAtPmluaXRfcmVxdWVzdCk7CiAJcmF3MzI3MF9pbml0X3ZpZXcuZGV2ID0gTlVMTDsKIAlycC0+dmlldyA9IE5VTEw7Ci0JdXAoJnJhdzMyNzBfaW5pdF9zZW0pOworCW11dGV4X3VubG9jaygmcmF3MzI3MF9pbml0X211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuaCBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuaAppbmRleCA4N2FjNGEzLi5kYmI5OWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oCkBAIC0xMzIsNiArMTMyLDkgQEAKIGludCBzY2xwX3JlYWN0aXZhdGUodm9pZCk7CiBpbnQgc2NscF9zZXJ2aWNlX2NhbGwoc2NscF9jbWR3X3QgY29tbWFuZCwgdm9pZCAqc2NjYik7CiAKK2ludCBzY2xwX3NkaWFzX2luaXQodm9pZCk7Cit2b2lkIHNjbHBfc2RpYXNfZXhpdCh2b2lkKTsKKwogLyogdXNlZnVsIGlubGluZXMgKi8KIAogLyogVk0gdXNlcyBFQkNESUMgMDM3LCBMUEFSK25hdGl2ZShTRStITUMpIHVzZSBFQkNESUMgNTAwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3J3LmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3J3LmMKaW5kZXggYmJkNWI4Yi4uZDZiMDZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9ydy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfcncuYwpAQCAtMjMsNyArMjMsNyBAQAogCiAvKgogICogVGhlIHJvb20gZm9yIHRoZSBTQ0NCIChvbmx5IGZvciB3cml0aW5nKSBpcyBub3QgZXF1YWwgdG8gYSBwYWdlcyBzaXplCi0gKiAoYXMgaXQgaXMgc3BlY2lmaWVkIGFzIHRoZSBtYXhpbXVtIHNpemUgaW4gdGhlIHRoZSBTQ0xQIGRvY3VtZW50YXRpb24pCisgKiAoYXMgaXQgaXMgc3BlY2lmaWVkIGFzIHRoZSBtYXhpbXVtIHNpemUgaW4gdGhlIFNDTFAgZG9jdW1lbnRhdGlvbikKICAqIGJlY2F1c2Ugb2YgdGhlIGFkZGl0aW9uYWwgZGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmVkIGFib3ZlLgogICovCiAjZGVmaW5lIE1BWF9TQ0NCX1JPT00gKFBBR0VfU0laRSAtIHNpemVvZihzdHJ1Y3Qgc2NscF9idWZmZXIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9zZGlhcy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9zZGlhcy5jCmluZGV4IDUyMjgzZGEuLjFjMDY0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfc2RpYXMuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3NkaWFzLmMKQEAgLTY2LDkgKzY2LDkgQEAKIAogc3RhdGljIHZvaWQgc2RpYXNfY2FsbGJhY2soc3RydWN0IHNjbHBfcmVxICpyZXF1ZXN0LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBzZGlhc19zY2NiICpzY2NiOworCXN0cnVjdCBzZGlhc19zY2NiICpjYnNjY2I7CiAKLQlzY2NiID0gKHN0cnVjdCBzZGlhc19zY2NiICopIHJlcXVlc3QtPnNjY2I7CisJY2JzY2NiID0gKHN0cnVjdCBzZGlhc19zY2NiICopIHJlcXVlc3QtPnNjY2I7CiAJc2NscF9yZXFfZG9uZSA9IDE7CiAJd2FrZV91cCgmc2RpYXNfd3EpOyAvKiBJbmZvcm0gY2FsbGVyLCB0aGF0IHJlcXVlc3QgaXMgY29tcGxldGUgKi8KIAlUUkFDRSgiY2FsbGJhY2sgZG9uZVxuIik7CkBAIC0yMjksNyArMjI5LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBfX2luaXQgc2RpYXNfaW5pdCh2b2lkKQoraW50IF9faW5pdCBzY2xwX3NkaWFzX2luaXQodm9pZCkKIHsKIAlpbnQgcmM7CiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdCBzZGlhc19leGl0KHZvaWQpCit2b2lkIF9fZXhpdCBzY2xwX3NkaWFzX2V4aXQodm9pZCkKIHsKIAlkZWJ1Z191bnJlZ2lzdGVyKHNkaWFzX2RiZik7CiAJc2NscF91bnJlZ2lzdGVyKCZzY2xwX3NkaWFzX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCmluZGV4IDg5ZDQzOTMxLi42NmViMDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vZGVidWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+CisjaW5jbHVkZSAic2NscC5oIgogCiAjZGVmaW5lIFRSQUNFKHguLi4pIGRlYnVnX3NwcmludGZfZXZlbnQoemNvcmVfZGJmLCAxLCB4KQogI2RlZmluZSBNU0coeC4uLikgcHJpbnRrKCBLRVJOX0FMRVJUIHggKQpAQCAtNTY0LDggKzU2NSw2IEBACiAJZ2V0X2NwdV9pZCgmaGRyLT5jcHVfaWQpOwogfQogCi1leHRlcm4gaW50IHNkaWFzX2luaXQodm9pZCk7Ci0KIHN0YXRpYyBpbnQgX19pbml0IHpjb3JlX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBjaGFyIGFyY2g7CkBAIC01ODIsNyArNTgxLDcgQEAKIAlUUkFDRSgid3dwbjogICAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBpcGxfaW5mby5kYXRhLmZjcC53d3BuKTsKIAlUUkFDRSgibHVuOiAgICAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBpcGxfaW5mby5kYXRhLmZjcC5sdW4pOwogCi0JcmMgPSBzZGlhc19pbml0KCk7CisJcmMgPSBzY2xwX3NkaWFzX2luaXQoKTsKIAlpZiAocmMpCiAJCWdvdG8gZmFpbDsKIApAQCAtNjM0LDEyICs2MzMsMTAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWV4dGVybiB2b2lkIHNkaWFzX2V4aXQodm9pZCk7Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCB6Y29yZV9leGl0KHZvaWQpCiB7CiAJZGVidWdfdW5yZWdpc3Rlcih6Y29yZV9kYmYpOwotCXNkaWFzX2V4aXQoKTsKKwlzY2xwX3NkaWFzX2V4aXQoKTsKIAlkaWFnMzA4KERJQUczMDhfUkVMX0hTQSwgTlVMTCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDI3YzZkOWUuLmRmY2EwZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtMTkxLDggKzE5MSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50Ci1jc3NfcHJvYmVfZGV2aWNlKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkKQorc3RhdGljIGludCBjc3NfcHJvYmVfZGV2aWNlKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkKQogewogCWludCByZXQ7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmggYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCmluZGV4IDcxZmNmZGMuLmVkNzk3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuaApAQCAtMTM4LDkgKzEzOCw3IEBACiAgKiBhbGwgY3NzX2RyaXZlcnMgaGF2ZSB0aGUgY3NzX2J1c190eXBlCiAgKi8KIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgY3NzX2J1c190eXBlOwotZXh0ZXJuIHN0cnVjdCBjc3NfZHJpdmVyIGlvX3N1YmNoYW5uZWxfZHJpdmVyOwogCi1leHRlcm4gaW50IGNzc19wcm9iZV9kZXZpY2Uoc3RydWN0IHN1YmNoYW5uZWxfaWQpOwogZXh0ZXJuIGludCBjc3Nfc2NoX2RldmljZV9yZWdpc3RlcihzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIGV4dGVybiB2b2lkIGNzc19zY2hfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHN1YmNoYW5uZWwgKik7CiBleHRlcm4gc3RydWN0IHN1YmNoYW5uZWwgKiBnZXRfc3ViY2hhbm5lbF9ieV9zY2hpZChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCBhMjNmZjU4Li42YjI2NGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogc3RhdGljIHZvaWQgaW9fc3ViY2hhbm5lbF9pb3Rlcm0oc3RydWN0IGRldmljZSAqKTsKIHN0YXRpYyB2b2lkIGlvX3N1YmNoYW5uZWxfc2h1dGRvd24oc3RydWN0IHN1YmNoYW5uZWwgKik7CiAKLXN0cnVjdCBjc3NfZHJpdmVyIGlvX3N1YmNoYW5uZWxfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBjc3NfZHJpdmVyIGlvX3N1YmNoYW5uZWxfZHJpdmVyID0gewogCS5zdWJjaGFubmVsX3R5cGUgPSBTVUJDSEFOTkVMX1RZUEVfSU8sCiAJLmRydiA9IHsKIAkJLm5hbWUgPSAiaW9fc3ViY2hhbm5lbCIsCkBAIC0yOTYsMjUgKzI5NiwxOSBAQAogCQlkZXZpY2VfZGVsKCZjZGV2LT5kZXYpOwogfQogCi1zdGF0aWMgdm9pZAotY2N3X2RldmljZV9yZW1vdmVfZGlzY29ubmVjdGVkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQorc3RhdGljIHZvaWQgY2N3X2RldmljZV9yZW1vdmVfb3JwaGFuX2NiKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiA9IHRvX2Njd2RldihkZXYpOworCisJY2N3X2RldmljZV91bnJlZ2lzdGVyKGNkZXYpOworCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIGNjd19kZXZpY2VfcmVtb3ZlX3NjaF9jYihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCS8qCi0JICogRm9yY2VkIG9mZmxpbmUgaW4gZGlzY29ubmVjdGVkIHN0YXRlIG1lYW5zCi0JICogJ3Rocm93IGF3YXkgZGV2aWNlJy4KLQkgKi8KLQlpZiAoY2N3X2RldmljZV9pc19vcnBoYW4oY2RldikpIHsKLQkJLyogRGVyZWdpc3RlciBjY3cgZGV2aWNlLiAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7Ci0JCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX05PVF9PUEVSOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNkZXYtPmNjd2xvY2ssIGZsYWdzKTsKLQkJY2N3X2RldmljZV91bnJlZ2lzdGVyKGNkZXYpOwotCQlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOwotCQlyZXR1cm4gOwotCX0KLQlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOworCisJc2NoID0gdG9fc3ViY2hhbm5lbChkZXYpOwogCWNzc19zY2hfZGV2aWNlX3VucmVnaXN0ZXIoc2NoKTsKIAkvKiBSZXNldCBpbnRwYXJtIHRvIHplcm9lcy4gKi8KIAlzY2gtPnNjaGliLnBtY3cuaW50cGFybSA9IDA7CkBAIC0zMjIsNiArMzE2LDM5IEBACiAJcHV0X2RldmljZSgmc2NoLT5kZXYpOwogfQogCitzdGF0aWMgdm9pZAorY2N3X2RldmljZV9yZW1vdmVfZGlzY29ubmVjdGVkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjOworCisJLyoKKwkgKiBGb3JjZWQgb2ZmbGluZSBpbiBkaXNjb25uZWN0ZWQgc3RhdGUgbWVhbnMKKwkgKiAndGhyb3cgYXdheSBkZXZpY2UnLgorCSAqLworCWlmIChjY3dfZGV2aWNlX2lzX29ycGhhbihjZGV2KSkgeworCQkvKgorCQkgKiBEZXJlZ2lzdGVyIGNjdyBkZXZpY2UuCisJCSAqIFVuZm9ydHVuYXRlbHksIHdlIGNhbm5vdCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gdGhlCisJCSAqIGF0dHJpYnV0ZSBtZXRob2QuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZShjZGV2LT5jY3dsb2NrLCBmbGFncyk7CisJCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX05PVF9PUEVSOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNkZXYtPmNjd2xvY2ssIGZsYWdzKTsKKwkJcmMgPSBkZXZpY2Vfc2NoZWR1bGVfY2FsbGJhY2soJmNkZXYtPmRldiwKKwkJCQkJICAgICAgY2N3X2RldmljZV9yZW1vdmVfb3JwaGFuX2NiKTsKKwkJaWYgKHJjKQorCQkJZGV2X2luZm8oJmNkZXYtPmRldiwgIkNvdWxkbid0IHVucmVnaXN0ZXIgb3JwaGFuXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBEZXJlZ2lzdGVyIHN1YmNoYW5uZWwsIHdoaWNoIHdpbGwga2lsbCB0aGUgY2N3IGRldmljZS4gKi8KKwlyYyA9IGRldmljZV9zY2hlZHVsZV9jYWxsYmFjayhjZGV2LT5kZXYucGFyZW50LAorCQkJCSAgICAgIGNjd19kZXZpY2VfcmVtb3ZlX3NjaF9jYik7CisJaWYgKHJjKQorCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJICJDb3VsZG4ndCB1bnJlZ2lzdGVyIGRpc2Nvbm5lY3RlZCBkZXZpY2VcbiIpOworfQorCiBpbnQKIGNjd19kZXZpY2Vfc2V0X29mZmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CkBAIC01NDYsNyArNTczLDcgQEAKIAkuYXR0cnMgPSBjY3dkZXZfYXR0cnMsCiB9OwogCi1zdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpjY3dkZXZfYXR0cl9ncm91cHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpjY3dkZXZfYXR0cl9ncm91cHNbXSA9IHsKIAkmY2N3ZGV2X2F0dHJfZ3JvdXAsCiAJTlVMTCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IDg5OGVjM2IuLjZiYmE4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC02ODgsNiArNjg4LDEyIEBACiAJCWNjd19kZXZpY2VfZG9uZShjZGV2LCBERVZfU1RBVEVfQk9YRUQpOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7CisJCWlmIChnZXRfZGV2aWNlKCZjZGV2LT5kZXYpKSB7CisJCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKKwkJCQkgICAgIGNjd19kZXZpY2VfY2FsbF9zY2hfdW5yZWdpc3Rlcik7CisJCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CisJCX0KIAkJY2N3X2RldmljZV9kb25lKGNkZXYsIERFVl9TVEFURV9OT1RfT1BFUik7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKaW5kZXggMTZmNTlmYy4uYTVkMjYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKQEAgLTYxNiw2ICs2MTYsMTcgQEAKIAlyZXR1cm4gY2hwX2dldF9jaHBfZGVzYyhjaHBpZCk7CiB9CiAKKy8qKgorICogY2N3X2RldmljZV9nZXRfaWQgLSBvYnRhaW4gYSBjY3cgZGV2aWNlIGlkCisgKiBAY2RldjogZGV2aWNlIHRvIG9idGFpbiB0aGUgaWQgZm9yCisgKiBAZGV2X2lkOiB3aGVyZSB0byBmaWxsIGluIHRoZSB2YWx1ZXMKKyAqLwordm9pZCBjY3dfZGV2aWNlX2dldF9pZChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgc3RydWN0IGNjd19kZXZfaWQgKmRldl9pZCkKK3sKKwkqZGV2X2lkID0gY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkOworfQorRVhQT1JUX1NZTUJPTChjY3dfZGV2aWNlX2dldF9pZCk7CisKIC8vIEZJWE1FOiB0aGVzZSBoYXZlIHRvIGdvOgogCiBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKaW5kZXggY2JhNjRlNC4uZTcwYWViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKQEAgLTk5NiwxOCArOTk2LDI1IEBACiAJaWYgKHFkaW9faGFzX291dGJvdW5kX3FfbW92ZWQocSkpCiAJCXFkaW9fa2lja19vdXRib3VuZF9oYW5kbGVyKHEpOwogCi0JaWYgKHEtPmlzX2lxZGlvX3EpIHsKKwlpZiAocS0+cXVldWVfdHlwZSA9PSBRRElPX1pGQ1BfUUZNVCkgeworCQlpZiAoKCFxLT5oeWRyYV9naXZlc19vdXRib3VuZF9wY2lzKSAmJgorCQkgICAgKCFxZGlvX2lzX291dGJvdW5kX3FfZG9uZShxKSkpCisJCQlxZGlvX21hcmtfcShxKTsKKwl9CisJZWxzZSBpZiAoKCghcS0+aXNfaXFkaW9fcSkgJiYgKCFxLT5pc19wY2lfb3V0KSkgfHwKKwkJIChxLT5xdWV1ZV90eXBlID09IFFESU9fSVFESU9fUUZNVF9BU1lOQ0gpKSB7CiAJCS8qIAotCQkgKiBmb3IgYXN5bmNocm9ub3VzIHF1ZXVlcywgd2UgYmV0dGVyIGNoZWNrLCBpZiB0aGUgc2VudAotCQkgKiBidWZmZXIgaXMgYWxyZWFkeSBzd2l0Y2hlZCBmcm9tIFBSSU1FRCB0byBFTVBUWS4KKwkJICogbWFrZSBzdXJlIGJ1ZmZlciBzd2l0Y2ggZnJvbSBQUklNRUQgdG8gRU1QVFkgaXMgbm90aWNlZAorCQkgKiBhbmQgb3V0Ym91bmRfaGFuZGxlciBpcyBjYWxsZWQKIAkJICovCi0JCWlmICgocS0+cXVldWVfdHlwZSA9PSBRRElPX0lRRElPX1FGTVRfQVNZTkNIKSAmJgotCQkgICAgIXFkaW9faXNfb3V0Ym91bmRfcV9kb25lKHEpKQotCQkJcWRpb19tYXJrX3EocSk7Ci0KLQl9IGVsc2UgaWYgKCFxLT5oeWRyYV9naXZlc19vdXRib3VuZF9wY2lzKQotCQlpZiAoIXFkaW9faXNfb3V0Ym91bmRfcV9kb25lKHEpKQotCQkJcWRpb19tYXJrX3EocSk7CisJCWlmIChxZGlvX2lzX291dGJvdW5kX3FfZG9uZShxKSkgeworCQkJZGVsX3RpbWVyKCZxLT50aW1lcik7CisJCX0gZWxzZSB7CisJCQlpZiAoIXRpbWVyX3BlbmRpbmcoJnEtPnRpbWVyKSkKKwkJCQltb2RfdGltZXIoJnEtPnRpbWVyLCBqaWZmaWVzICsKKwkJCQkJICBRRElPX0ZPUkNFX0NIRUNLX1RJTUVPVVQpOworCQl9CisJfQogCiAJcWRpb19yZWxlYXNlX3EocSk7CiB9CkBAIC0xODI2LDYgKzE4MzMsNyBAQAogCQkJcS0+cXVldWVfdHlwZSA9IFFESU9fSVFESU9fUUZNVF9BU1lOQ0g7CiAJCXEtPmludF9wYXJtPWludF9wYXJtOwogCQlxLT5pc19pbnB1dF9xPTA7CisJCXEtPmlzX3BjaV9vdXQgPSAwOwogCQlxLT5zY2hpZCA9IGlycV9wdHItPnNjaGlkOwogCQlxLT5jZGV2ID0gY2RldjsKIAkJcS0+aXJxX3B0ciA9IGlycV9wdHI7CkBAIC0xODM4LDYgKzE4NDYsMTAgQEAKIAkJcS0+dGFza2xldC5kYXRhPSh1bnNpZ25lZCBsb25nKXE7CiAJCXEtPnRhc2tsZXQuZnVuYz0odm9pZCgqKSh1bnNpZ25lZCBsb25nKSkKIAkJCSZxZGlvX291dGJvdW5kX3Byb2Nlc3Npbmc7CisJCXEtPnRpbWVyLmZ1bmN0aW9uPSh2b2lkKCopKHVuc2lnbmVkIGxvbmcpKQorCQkJJnFkaW9fb3V0Ym91bmRfcHJvY2Vzc2luZzsKKwkJcS0+dGltZXIuZGF0YSA9IChsb25nKXE7CisJCWluaXRfdGltZXIoJnEtPnRpbWVyKTsKIAogCQlhdG9taWNfc2V0KCZxLT5idXN5X3NpZ2FfY291bnRlciwwKTsKIAkJcS0+dGltaW5nLmJ1c3lfc3RhcnQ9MDsKQEAgLTE5NzEsNiArMTk4Myw3IEBACiAJCWlmIChxLT5pc19pbnB1dF9xJlFESU9fRkxBR19OT19JTlBVVF9JTlRFUlJVUFRfQ09OVEVYVCkKIAkJCXFkaW9fbWFya19xKHEpOwogCQllbHNlIHsKKwkJCXFkaW9fcGVyZl9zdGF0X2RlYygmcGVyZl9zdGF0cy50bF9ydW5zKTsKIAkJCV9fcWRpb19pbmJvdW5kX3Byb2Nlc3NpbmcocSk7CiAJCX0KIAl9CkBAIC0yNjM1LDYgKzI2NDgsNyBAQAogCiAJZm9yIChpPTA7aTxpcnFfcHRyLT5ub19vdXRwdXRfcXM7aSsrKSB7CiAJCXRhc2tsZXRfa2lsbCgmaXJxX3B0ci0+b3V0cHV0X3FzW2ldLT50YXNrbGV0KTsKKwkJZGVsX3RpbWVyKCZpcnFfcHRyLT5vdXRwdXRfcXNbaV0tPnRpbWVyKTsKIAkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoY2Rldi0+cHJpdmF0ZS0+d2FpdF9xLAogCQkJCQkJICFhdG9taWNfcmVhZCgmaXJxX3B0ci0+CiAJCQkJCQkJICAgICAgb3V0cHV0X3FzW2ldLT4KQEAgLTM0NTgsNiArMzQ3MiwxMCBAQAogCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMub3V0Ym91bmRfY250KTsKIAkJcmV0dXJuOwogCX0KKwlpZiAoY2FsbGZsYWdzICYgUURJT19GTEFHX1BDSV9PVVQpCisJCXEtPmlzX3BjaV9vdXQgPSAxOworCWVsc2UKKwkJcS0+aXNfcGNpX291dCA9IDA7CiAJaWYgKHEtPmlzX2lxZGlvX3EpIHsKIAkJLyogb25lIHNpZ2EgZm9yIGV2ZXJ5IHNiYWwgKi8KIAkJd2hpbGUgKGNvdW50LS0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCmluZGV4IDI4OTUzOTIuLjZkN2FhZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCkBAIC02MCw2ICs2MCw3IEBACiAjZGVmaW5lIFFESU9fQUNUSVZBVEVfVElNRU9VVCAoKDUqSFopPj4xMCkKICNkZWZpbmUgUURJT19DTEVBTlVQX0NMRUFSX1RJTUVPVVQgKDIwKkhaKQogI2RlZmluZSBRRElPX0NMRUFOVVBfSEFMVF9USU1FT1VUICgxMCpIWikKKyNkZWZpbmUgUURJT19GT1JDRV9DSEVDS19USU1FT1VUICgxMCpIWikKIAogZW51bSBxZGlvX2lycV9zdGF0ZXMgewogCVFESU9fSVJRX1NUQVRFX0lOQUNUSVZFLApAQCAtNTExLDggKzUxMiw4IEBACiAKIAl2b2lkICppcnFfcHRyOwogCi0jaWZkZWYgUURJT19VU0VfVElNRVJTX0ZPUl9QT0xMSU5HCiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisjaWZkZWYgUURJT19VU0VfVElNRVJTX0ZPUl9QT0xMSU5HCiAJYXRvbWljX3QgdGltZXJfYWxyZWFkeV9zZXQ7CiAJc3BpbmxvY2tfdCB0aW1lcl9sb2NrOwogI2Vsc2UgLyogUURJT19VU0VfVElNRVJTX0ZPUl9QT0xMSU5HICovCkBAIC01NTgsNiArNTU5LDcgQEAKIAl9IHRpbWluZzsKIAlhdG9taWNfdCBidXN5X3NpZ2FfY291bnRlcjsKICAgICAgICAgdW5zaWduZWQgaW50IHF1ZXVlX3R5cGU7CisJdW5zaWduZWQgaW50IGlzX3BjaV9vdXQ7CiAKIAkvKiBsZWF2ZSB0aGlzIG1lbWJlciBhdCB0aGUgZW5kLiB3b24ndCBiZSBjbGVhcmVkIGluIHFkaW9fZmlsbF9xcyAqLwogCXN0cnVjdCBzbGliICpzbGliOyAvKiBhIHBhZ2UgaXMgYWxsb2NhdGVkIHVuZGVyIHRoaXMgcG9pbnRlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZwppbmRleCBmOThmYTQ2Li5lYWRhNjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9zMzkwL25ldC9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogCiBjb25maWcgTENTCiAJdHJpc3RhdGUgIkxhbiBDaGFubmVsIFN0YXRpb24gSW50ZXJmYWNlIgotCWRlcGVuZHMgb24gTkVUREVWSUNFUyAmJiAoTkVUX0VUSEVSTkVUIHx8IFRSIHx8IEZEREkpCisJZGVwZW5kcyBvbiBDQ1cgJiYgTkVUREVWSUNFUyAmJiAoTkVUX0VUSEVSTkVUIHx8IFRSIHx8IEZEREkpCiAJaGVscAogCSAgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgTENTIG5ldHdvcmtpbmcgIG9uIElCTSBTLzM5MAogICAJICAgb3IgelNlcmllcy4gVGhpcyBkZXZpY2UgZHJpdmVyIHN1cHBvcnRzIFRva2VuIFJpbmcgKElFRUUgODAyLjUpLApAQCAtMTMsNyArMTMsNyBAQAogCiBjb25maWcgQ1RDCiAJdHJpc3RhdGUgIkNUQyBkZXZpY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE5FVERFVklDRVMKKwlkZXBlbmRzIG9uIENDVyAmJiBORVRERVZJQ0VTCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBjaGFubmVsLXRvLWNoYW5uZWwgbmV0d29ya2luZwogCSAgb24gSUJNIFMvMzkwIG9yIHpTZXJpZXMuIFRoaXMgZGV2aWNlIGRyaXZlciBzdXBwb3J0cyByZWFsIENUQwpAQCAtNDIsNyArNDIsNyBAQAogCiBjb25maWcgQ0xBVwogCXRyaXN0YXRlICJDTEFXIGRldmljZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUREVWSUNFUworCWRlcGVuZHMgb24gQ0NXICYmIE5FVERFVklDRVMKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBjaGFubmVsIGF0dGFjaGVkIENMQVcgZGV2aWNlcy4KIAkgIENMQVcgaXMgQ29tbW9uIExpbmsgQWNjZXNzIGZvciBXb3Jrc3RhdGlvbi4gIENvbW1vbiBkZXZpY2VzCkBAIC01Miw3ICs1Miw3IEBACiAKIGNvbmZpZyBRRVRICiAJdHJpc3RhdGUgIkdpZ2FiaXQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRERVZJQ0VTICYmIElQX01VTFRJQ0FTVCAmJiBRRElPCisJZGVwZW5kcyBvbiBDQ1cgJiYgTkVUREVWSUNFUyAmJiBJUF9NVUxUSUNBU1QgJiYgUURJTwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBJQk0gUy8zOTAgYW5kIHpTZXJpZXMgT1NBIEV4cHJlc3MgYWRhcHRlcnMKIAkgIGluIFFESU8gbW9kZSAoYWxsIG1lZGlhIHR5cGVzKSwgSGlwZXJTb2NrZXRzIGludGVyZmFjZXMgYW5kIFZNIEd1ZXN0TEFOCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCmluZGV4IGUxMGU4NWUuLmMzNTg3NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCkBAIC0xODYyLDEyICsxODYyLDE0IEBACiAJd3JpdGVfbG9ja19iaCgmaXVjdl9jb25uZWN0aW9uX3J3bG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmY29ubi0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZpdWN2X2Nvbm5lY3Rpb25fcndsb2NrKTsKKwlmc21fZGVsdGltZXIoJmNvbm4tPnRpbWVyKTsKKwluZXRpdWN2X3B1cmdlX3NrYl9xdWV1ZSgmY29ubi0+Y29sbGVjdF9xdWV1ZSk7CiAJaWYgKGNvbm4tPnBhdGgpIHsKIAkJaXVjdl9wYXRoX3NldmVyKGNvbm4tPnBhdGgsIGl1Y3ZNYWdpYyk7CiAJCWtmcmVlKGNvbm4tPnBhdGgpOwogCQljb25uLT5wYXRoID0gTlVMTDsKIAl9Ci0JZnNtX2RlbHRpbWVyKCZjb25uLT50aW1lcik7CisJbmV0aXVjdl9wdXJnZV9za2JfcXVldWUoJmNvbm4tPmNvbW1pdF9xdWV1ZSk7CiAJa2ZyZWVfZnNtKGNvbm4tPmZzbSk7CiAJa2ZyZWVfc2tiKGNvbm4tPnJ4X2J1ZmYpOwogCWtmcmVlX3NrYihjb25uLT50eF9idWZmKTsKQEAgLTIxMTUsNyArMjExNyw2IEBACiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZpdWN2X2Nvbm5lY3Rpb25fbGlzdCkpIHsKIAkJY3AgPSBsaXN0X2VudHJ5KGl1Y3ZfY29ubmVjdGlvbl9saXN0Lm5leHQsCiAJCQkJc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiwgbGlzdCk7Ci0JCWxpc3RfZGVsKCZjcC0+bGlzdCk7CiAJCW5kZXYgPSBjcC0+bmV0ZGV2OwogCQlwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJCWRldiA9IHByaXYtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCmluZGV4IGRkNzAzNGYuLjQ2NDBmMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuYwpAQCAtNjIwLDEwICs2MjAsMTAgQEAKIAogc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICoKIHFldGhfZWRkcF9jcmVhdGVfY29udGV4dChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJIHN0cnVjdCBxZXRoX2hkciAqcWhkcikKKwkJCSBzdHJ1Y3QgcWV0aF9oZHIgKnFoZHIsIHVuc2lnbmVkIGNoYXIgc2tfcHJvdG9jb2wpCiB7CiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgImNyZWRkcGMiKTsKLQlzd2l0Y2ggKHNrYi0+c2stPnNrX3Byb3RvY29sKXsKKwlzd2l0Y2ggKHNrX3Byb3RvY29sKSB7CiAJY2FzZSBJUFBST1RPX1RDUDoKIAkJcmV0dXJuIHFldGhfZWRkcF9jcmVhdGVfY29udGV4dF90Y3AoY2FyZCwgc2tiLCBxaGRyKTsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmgKaW5kZXggMTAzNzY4ZC4uNTI5MTBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5oCkBAIC0zNCw3ICszNCw4IEBACiB9OwogCiBleHRlcm4gc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICoKLXFldGhfZWRkcF9jcmVhdGVfY29udGV4dChzdHJ1Y3QgcWV0aF9jYXJkICosc3RydWN0IHNrX2J1ZmYgKixzdHJ1Y3QgcWV0aF9oZHIgKik7CitxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoc3RydWN0IHFldGhfY2FyZCAqLHN0cnVjdCBza19idWZmICosCisJCQkgc3RydWN0IHFldGhfaGRyICosIHVuc2lnbmVkIGNoYXIpOwogCiBleHRlcm4gdm9pZAogcWV0aF9lZGRwX3B1dF9jb250ZXh0KHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCmluZGV4IDZmZDg4NzAuLjBiOTZkNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwpAQCAtMTY4Miw2ICsxNjgyLDIxIEBACiAJCWtmcmVlKHJlcGx5KTsKIH0KIAorc3RhdGljIHZvaWQKK3FldGhfaXNzdWVfaXBhX21zZyhzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQsIHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjOworCWludCBjb207CisJY2hhciAqIGlwYV9uYW1lOworCisJY29tID0gY21kLT5oZHIuY29tbWFuZDsKKwlyYyAgPSBjbWQtPmhkci5yZXR1cm5fY29kZTsKKwlpcGFfbmFtZSA9IHFldGhfZ2V0X2lwYV9jbWRfbmFtZShjb20pOworCisJUFJJTlRfRVJSKCIlcyh4JVgpIGZvciAlcyByZXR1cm5lZCB4JVggXCIlc1wiXG4iLCBpcGFfbmFtZSwgY29tLAorCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYywgcWV0aF9nZXRfaXBhX21zZyhyYykpOworfQorCiBzdGF0aWMgc3RydWN0IHFldGhfaXBhX2NtZCAqCiBxZXRoX2NoZWNrX2lwYV9kYXRhKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYikKIHsKQEAgLTE2OTAsOCArMTcwNSwxMSBAQAogCVFFVEhfREJGX1RFWFQodHJhY2UsNSwiY2hraXBhZCIpOwogCWlmIChJU19JUEEoaW9iLT5kYXRhKSl7CiAJCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIFBEVV9FTkNBUFNVTEFUSU9OKGlvYi0+ZGF0YSk7Ci0JCWlmIChJU19JUEFfUkVQTFkoY21kKSkKKwkJaWYgKElTX0lQQV9SRVBMWShjbWQpKSB7CisJCQlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpCisJCQkJcWV0aF9pc3N1ZV9pcGFfbXNnKGNtZCwgY2FyZCk7CiAJCQlyZXR1cm4gY21kOworCQl9CiAJCWVsc2UgewogCQkJc3dpdGNoIChjbWQtPmhkci5jb21tYW5kKSB7CiAJCQljYXNlIElQQV9DTURfU1RPUExBTjoKQEAgLTI4MTYsNiArMjgzNCw3IEBACiAJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWY7CiAJaW50IHJjOwogCWludCBpOworCXVuc2lnbmVkIGludCBxZGlvX2ZsYWdzOwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgImZsdXNoYnVmIik7CiAKQEAgLTI4NDEsNyArMjg2MCw3IEBACiAJCQlpZiAoIWF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpewogCQkJCS8qCiAJCQkJICogdGhlcmUncyBubyBvdXRzdGFuZGluZyBQQ0kgYW55IG1vcmUsIHNvIHdlCi0JCQkJICogaGF2ZSB0byByZXF1ZXN0IGEgUENJIHRvIGJlIHN1cmUgdGhlIHRoZSBQQ0kKKwkJCQkgKiBoYXZlIHRvIHJlcXVlc3QgYSBQQ0kgdG8gYmUgc3VyZSB0aGF0IHRoZSBQQ0kKIAkJCQkgKiB3aWxsIHdha2UgYXQgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUgdGhlbiB3ZQogCQkJCSAqIGNhbiBmbHVzaCBwYWNrZWQgYnVmZmVycyB0aGF0IG1pZ2h0IHN0aWxsIGJlCiAJCQkJICogaGFuZ2luZyBhcm91bmQsIHdoaWNoIGNhbiBoYXBwZW4gaWYgbm8KQEAgLTI4NTksMTMgKzI4NzgsMTMgQEAKIAkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19zdGFydF90aW1lID0KIAkJCXFldGhfZ2V0X21pY3JvcygpOwogCX0KKwlxZGlvX2ZsYWdzID0gUURJT19GTEFHX1NZTkNfT1VUUFVUOwogCWlmICh1bmRlcl9pbnQpCi0JCXJjID0gZG9fUURJTyhDQVJEX0RERVYocXVldWUtPmNhcmQpLAotCQkJICAgICBRRElPX0ZMQUdfU1lOQ19PVVRQVVQgfCBRRElPX0ZMQUdfVU5ERVJfSU5URVJSVVBULAotCQkJICAgICBxdWV1ZS0+cXVldWVfbm8sIGluZGV4LCBjb3VudCwgTlVMTCk7Ci0JZWxzZQotCQlyYyA9IGRvX1FESU8oQ0FSRF9EREVWKHF1ZXVlLT5jYXJkKSwgUURJT19GTEFHX1NZTkNfT1VUUFVULAotCQkJICAgICBxdWV1ZS0+cXVldWVfbm8sIGluZGV4LCBjb3VudCwgTlVMTCk7CisJCXFkaW9fZmxhZ3MgfD0gUURJT19GTEFHX1VOREVSX0lOVEVSUlVQVDsKKwlpZiAoYXRvbWljX3JlYWQoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KSkKKwkJcWRpb19mbGFncyB8PSBRRElPX0ZMQUdfUENJX09VVDsKKwlyYyA9IGRvX1FESU8oQ0FSRF9EREVWKHF1ZXVlLT5jYXJkKSwgcWRpb19mbGFncywKKwkJICAgICBxdWV1ZS0+cXVldWVfbm8sIGluZGV4LCBjb3VudCwgTlVMTCk7CiAJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQogCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3RpbWUgKz0KIAkJCXFldGhfZ2V0X21pY3JvcygpIC0KQEAgLTQ0OTAsNyArNDUwOSw4IEBACiAJCXFldGhfZmlsbF9oZWFkZXIoY2FyZCwgaGRyLCBuZXdfc2tiLCBpcHYsIGNhc3RfdHlwZSk7CiAJfQogCWlmIChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9FRERQKSB7Ci0JCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dChjYXJkLCBuZXdfc2tiLCBoZHIpOworCQljdHggPSBxZXRoX2VkZHBfY3JlYXRlX2NvbnRleHQoY2FyZCwgbmV3X3NrYiwgaGRyLAorCQkJCQkgICAgICAgc2tiLT5zay0+c2tfcHJvdG9jb2wpOwogCQlpZiAoY3R4ID09IE5VTEwpIHsKIAkJCV9fcWV0aF9mcmVlX25ld19za2Ioc2tiLCBuZXdfc2tiKTsKIAkJCVBSSU5UX1dBUk4oImNvdWxkIG5vdCBjcmVhdGUgZWRkcCBjb250ZXh0XG4iKTsKQEAgLTU5NDgsOSArNTk2OCw2IEBACiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKIAlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKIAkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJMMmVyJXgiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JCVBSSU5UX1dBUk4oIkVycm9yIGluIHJlZ2lzdGVyaW5nIE1BQyBhZGRyZXNzIG9uICIgXAotCQkJICAgImRldmljZSAlczogeCV4XG4iLCBDQVJEX0JVU19JRChjYXJkKSwKLQkJCSAgIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKIAkJY2FyZC0+aW5mby5tYWNfYml0cyAmPSB+UUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7CiAJCWNtZC0+aGRyLnJldHVybl9jb2RlID0gLUVJTzsKIAl9IGVsc2UgewpAQCAtNTk4NSw5ICs2MDAyLDYgQEAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiTDJEbWFjY2IiKTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwogCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkgewotCQlQUklOVF9XQVJOKCJFcnJvciBpbiBkZXJlZ2lzdGVyaW5nIE1BQyBhZGRyZXNzIG9uICIgXAotCQkJICAgImRldmljZSAlczogeCV4XG4iLCBDQVJEX0JVU19JRChjYXJkKSwKLQkJCSAgIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKIAkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJlcnIlZCIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKIAkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSAtRUlPOwogCQlyZXR1cm4gMDsKQEAgLTY2NTEsNyArNjY2NSw3IEBACiAJUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJjaGdtYWNjYiIpOwogCiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKLQlpZiAoIWNhcmQtPm9wdGlvbnMubGF5ZXIyIHx8IGNhcmQtPmluZm8uZ3Vlc3RsYW4gfHwKKwlpZiAoIWNhcmQtPm9wdGlvbnMubGF5ZXIyIHx8CiAJICAgICEoY2FyZC0+aW5mby5tYWNfYml0cyAmIFFFVEhfTEFZRVIyX01BQ19SRUFEKSkgewogCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwKIAkJICAgICAgICZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuY2hhbmdlX2FkZHIuYWRkciwKQEAgLTg0OTcsNiArODUxMSw3IEBACiAJY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGRldi0+ZHJpdmVyX2RhdGE7CiAJcWV0aF9jbGVhcl9pcF9saXN0KGNhcmQsIDAsIDApOwogCXFldGhfcWRpb19jbGVhcl9jYXJkKGNhcmQsIDApOworCXFldGhfY2xlYXJfcWRpb19idWZmZXJzKGNhcmQpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmMKaW5kZXggNzdjODMyMC4uZjI5YTRiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuYwpAQCAtMTU3LDEyICsxNTcsMTEzIEBACiB9OwogCiAKK3N0cnVjdCBpcGFfcmNfbXNnIHsKKwllbnVtIHFldGhfaXBhX3JldHVybl9jb2RlcyByYzsKKwljaGFyICptc2c7Cit9OworCitzdGF0aWMgc3RydWN0IGlwYV9yY19tc2cgcWV0aF9pcGFfcmNfbXNnW10gPSB7CisJe0lQQV9SQ19TVUNDRVNTLAkJInN1Y2Nlc3MifSwKKwl7SVBBX1JDX05PVFNVUFAsCQkiQ29tbWFuZCBub3Qgc3VwcG9ydGVkIn0sCisJe0lQQV9SQ19JUF9UQUJMRV9GVUxMLAkJIkFkZCBBZGRyIElQIFRhYmxlIEZ1bGwgLSBpcHY2In0sCisJe0lQQV9SQ19VTktOT1dOX0VSUk9SLAkJIklQQSBjb21tYW5kIGZhaWxlZCAtIHJlYXNvbiB1bmtub3duIn0sCisJe0lQQV9SQ19VTlNVUFBPUlRFRF9DT01NQU5ELAkiQ29tbWFuZCBub3Qgc3VwcG9ydGVkIn0sCisJe0lQQV9SQ19EVVBfSVBWNl9SRU1PVEUsImlwdjYgYWRkcmVzcyBhbHJlYWR5IHJlZ2lzdGVyZWQgcmVtb3RlIn0sCisJe0lQQV9SQ19EVVBfSVBWNl9IT01FLAkJImlwdjYgYWRkcmVzcyBhbHJlYWR5IHJlZ2lzdGVyZWQifSwKKwl7SVBBX1JDX1VOUkVHSVNURVJFRF9BRERSLAkiQWRkcmVzcyBub3QgcmVnaXN0ZXJlZCJ9LAorCXtJUEFfUkNfTk9fSURfQVZBSUxBQkxFLAkiTm8gaWRlbnRpZmllcnMgYXZhaWxhYmxlIn0sCisJe0lQQV9SQ19JRF9OT1RfRk9VTkQsCQkiSWRlbnRpZmllciBub3QgZm91bmQifSwKKwl7SVBBX1JDX0lOVkFMSURfSVBfVkVSU0lPTiwJIklQIHZlcnNpb24gaW5jb3JyZWN0In0sCisJe0lQQV9SQ19MQU5fRlJBTUVfTUlTTUFUQ0gsCSJMQU4gYW5kIGZyYW1lIG1pc21hdGNoIn0sCisJe0lQQV9SQ19MMl9VTlNVUFBPUlRFRF9DTUQsCSJVbnN1cHBvcnRlZCBsYXllciAyIGNvbW1hbmQifSwKKwl7SVBBX1JDX0wyX0RVUF9NQUMsCQkiRHVwbGljYXRlIE1BQyBhZGRyZXNzIn0sCisJe0lQQV9SQ19MMl9BRERSX1RBQkxFX0ZVTEwsCSJMYXllcjIgYWRkcmVzcyB0YWJsZSBmdWxsIn0sCisJe0lQQV9SQ19MMl9EVVBfTEFZRVIzX01BQywJIkR1cGxpY2F0ZSB3aXRoIGxheWVyIDMgTUFDIn0sCisJe0lQQV9SQ19MMl9HTUFDX05PVF9GT1VORCwJIkdNQUMgbm90IGZvdW5kIn0sCisJe0lQQV9SQ19MMl9NQUNfTk9UX0ZPVU5ELAkiTDIgbWFjIGFkZHJlc3Mgbm90IGZvdW5kIn0sCisJe0lQQV9SQ19MMl9JTlZBTElEX1ZMQU5fSUQsCSJMMiBpbnZhbGlkIHZsYW4gaWQifSwKKwl7SVBBX1JDX0wyX0RVUF9WTEFOX0lELAkJIkwyIGR1cGxpY2F0ZSB2bGFuIGlkIn0sCisJe0lQQV9SQ19MMl9WTEFOX0lEX05PVF9GT1VORCwJIkwyIHZsYW4gaWQgbm90IGZvdW5kIn0sCisJe0lQQV9SQ19EQVRBX01JU01BVENILAkJIkRhdGEgZmllbGQgbWlzbWF0Y2ggKHY0L3Y2IG1peGVkKSJ9LAorCXtJUEFfUkNfSU5WQUxJRF9NVFVfU0laRSwJIkludmFsaWQgTVRVIHNpemUifSwKKwl7SVBBX1JDX0lOVkFMSURfTEFOVFlQRSwJIkludmFsaWQgTEFOIHR5cGUifSwKKwl7SVBBX1JDX0lOVkFMSURfTEFOTlVNLAkJIkludmFsaWQgTEFOIG51bSJ9LAorCXtJUEFfUkNfRFVQTElDQVRFX0lQX0FERFJFU1MsCSJBZGRyZXNzIGFscmVhZHkgcmVnaXN0ZXJlZCJ9LAorCXtJUEFfUkNfSVBfQUREUl9UQUJMRV9GVUxMLAkiSVAgYWRkcmVzcyB0YWJsZSBmdWxsIn0sCisJe0lQQV9SQ19MQU5fUE9SVF9TVEFURV9FUlJPUiwJIkxBTiBwb3J0IHN0YXRlIGVycm9yIn0sCisJe0lQQV9SQ19TRVRJUF9OT19TVEFSVExBTiwJIlNldGlwIG5vIHN0YXJ0bGFuIHJlY2VpdmVkIn0sCisJe0lQQV9SQ19TRVRJUF9BTFJFQURZX1JFQ0VJVkVELAkiU2V0aXAgYWxyZWFkeSByZWNlaXZlZCJ9LAorCXtJUEFfUkNfSVBfQUREUl9BTFJFQURZX1VTRUQsCSJJUCBhZGRyZXNzIGFscmVhZHkgaW4gdXNlIG9uIExBTiJ9LAorCXtJUEFfUkNfTVVMVElDQVNUX0ZVTEwsCQkiTm8gdGFzayBhdmFpbGFibGUsIG11bHRpY2FzdCBmdWxsIn0sCisJe0lQQV9SQ19TRVRJUF9JTlZBTElEX1ZFUlNJT04sCSJTRVRJUCBpbnZhbGlkIElQIHZlcnNpb24ifSwKKwl7SVBBX1JDX1VOU1VQUE9SVEVEX1NVQkNNRCwJIlVuc3VwcG9ydGVkIGFzc2lzdCBzdWJjb21tYW5kIn0sCisJe0lQQV9SQ19BUlBfQVNTSVNUX05PX0VOQUJMRSwJIk9ubHkgcGFydGlhbCBzdWNjZXNzLCBubyBlbmFibGUifSwKKwl7SVBBX1JDX1BSSU1BUllfQUxSRUFEWV9ERUZJTkVELCJQcmltYXJ5IGFscmVhZHkgZGVmaW5lZCJ9LAorCXtJUEFfUkNfU0VDT05EX0FMUkVBRFlfREVGSU5FRCwJIlNlY29uZGFyeSBhbHJlYWR5IGRlZmluZWQifSwKKwl7SVBBX1JDX0lOVkFMSURfU0VUUlRHX0lORElDQVRPUiwiSW52YWxpZCBTRVRSVEcgaW5kaWNhdG9yIn0sCisJe0lQQV9SQ19NQ19BRERSX0FMUkVBRFlfREVGSU5FRCwiTXVsdGljYXN0IGFkZHJlc3MgYWxyZWFkeSBkZWZpbmVkIn0sCisJe0lQQV9SQ19MQU5fT0ZGTElORSwJCSJTVFJUTEFOX0xBTl9ESVNBQkxFRCAtIExBTiBvZmZsaW5lIn0sCisJe0lQQV9SQ19JTlZBTElEX0lQX1ZFUlNJT04yLAkiSW52YWxpZCBJUCB2ZXJzaW9uIn0sCisJe0lQQV9SQ19GRkZGLAkJCSJVbmtub3duIEVycm9yIn0KK307CiAKIAogCitjaGFyICoKK3FldGhfZ2V0X2lwYV9tc2coZW51bSBxZXRoX2lwYV9yZXR1cm5fY29kZXMgcmMpCit7CisJaW50IHggPSAwOworCXFldGhfaXBhX3JjX21zZ1tzaXplb2YocWV0aF9pcGFfcmNfbXNnKSAvCisJCQlzaXplb2Yoc3RydWN0IGlwYV9yY19tc2cpIC0gMV0ucmMgPSByYzsKKwl3aGlsZShxZXRoX2lwYV9yY19tc2dbeF0ucmMgIT0gcmMpCisJCXgrKzsKKwlyZXR1cm4gcWV0aF9pcGFfcmNfbXNnW3hdLm1zZzsKK30KIAogCitzdHJ1Y3QgaXBhX2NtZF9uYW1lcyB7CisJZW51bSBxZXRoX2lwYV9jbWRzIGNtZDsKKwljaGFyICpuYW1lOworfTsKIAorc3RhdGljIHN0cnVjdCBpcGFfY21kX25hbWVzIHFldGhfaXBhX2NtZF9uYW1lc1tdID0geworCXtJUEFfQ01EX1NUQVJUTEFOLAkic3RhcnRsYW4ifSwKKwl7SVBBX0NNRF9TVE9QTEFOLAkic3RvcGxhbiJ9LAorCXtJUEFfQ01EX1NFVFZNQUMsCSJzZXR2bWFjIn0sCisJe0lQQV9DTURfREVMVk1BQywJImRlbHZtY2EifSwKKwl7SVBBX0NNRF9TRVRHTUFDLAkic2V0Z21hYyJ9LAorCXtJUEFfQ01EX0RFTEdNQUMsCSJkZWxnbWFjIn0sCisJe0lQQV9DTURfU0VUVkxBTiwJInNldHZsYW4ifSwKKwl7SVBBX0NNRF9ERUxWTEFOLAkiZGVsdmxhbiJ9LAorCXtJUEFfQ01EX1NFVENDSUQsCSJzZXRjY2lkIn0sCisJe0lQQV9DTURfREVMQ0NJRCwJImRlbGNjaWQifSwKKwl7SVBBX0NNRF9NT0RDQ0lELAkic2V0aXAifSwKKwl7SVBBX0NNRF9TRVRJUCwJCSJzZXRpcCJ9LAorCXtJUEFfQ01EX1FJUEFTU0lTVCwJInFpcGFzc2lzdCJ9LAorCXtJUEFfQ01EX1NFVEFTU1BBUk1TLAkic2V0YXNzcGFybXMifSwKKwl7SVBBX0NNRF9TRVRJUE0sCSJzZXRpcG0ifSwKKwl7SVBBX0NNRF9ERUxJUE0sCSJkZWxpcG0ifSwKKwl7SVBBX0NNRF9TRVRSVEcsCSJzZXRydGcifSwKKwl7SVBBX0NNRF9ERUxJUCwJCSJkZWxpcCJ9LAorCXtJUEFfQ01EX1NFVEFEQVBURVJQQVJNUywgInNldGFkYXB0ZXJwYXJtcyJ9LAorCXtJUEFfQ01EX1NFVF9ESUFHX0FTUywJInNldF9kaWFnX2FzcyJ9LAorCXtJUEFfQ01EX0NSRUFURV9BRERSLAkiY3JlYXRlX2FkZHIifSwKKwl7SVBBX0NNRF9ERVNUUk9ZX0FERFIsCSJkZXN0cm95X2FkZHIifSwKKwl7SVBBX0NNRF9SRUdJU1RFUl9MT0NBTF9BRERSLAkicmVnaXN0ZXJfbG9jYWxfYWRkciJ9LAorCXtJUEFfQ01EX1VOUkVHSVNURVJfTE9DQUxfQUREUiwJInVucmVnaXN0ZXJfbG9jYWxfYWRkciJ9LAorCXtJUEFfQ01EX1VOS05PV04sCSJ1bmtub3duIn0sCit9OwogCitjaGFyICoKK3FldGhfZ2V0X2lwYV9jbWRfbmFtZShlbnVtIHFldGhfaXBhX2NtZHMgY21kKQoreworCWludCB4ID0gMDsKKwlxZXRoX2lwYV9jbWRfbmFtZXNbCisJCXNpemVvZihxZXRoX2lwYV9jbWRfbmFtZXMpLworCQkJc2l6ZW9mKHN0cnVjdCBpcGFfY21kX25hbWVzKS0xXS5jbWQgPSBjbWQ7CisJd2hpbGUocWV0aF9pcGFfY21kX25hbWVzW3hdLmNtZCAhPSBjbWQpCisJCXgrKzsKKwlyZXR1cm4gcWV0aF9pcGFfY21kX25hbWVzW3hdLm5hbWU7Cit9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5oCmluZGV4IGQ3NGJjNDMuLjFkODA4M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmgKQEAgLTI1LDE0ICsyNSwxNCBAQAogCiAjZGVmaW5lIElQQV9DTURfTEVOR1RICShJUEFfUERVX0hFQURFUl9TSVpFICsgc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYV9jbWQpKQogCi0jZGVmaW5lIFFFVEhfU0VRX05PX0xFTkdUSCAJNAotI2RlZmluZSBRRVRIX01QQ19UT0tFTl9MRU5HVEggCTQKKyNkZWZpbmUgUUVUSF9TRVFfTk9fTEVOR1RICTQKKyNkZWZpbmUgUUVUSF9NUENfVE9LRU5fTEVOR1RICTQKICNkZWZpbmUgUUVUSF9NQ0xfTEVOR1RICQk0CiAjZGVmaW5lIE9TQV9BRERSX0xFTgkJNgogCi0jZGVmaW5lIFFFVEhfVElNRU9VVCAJCSgxMCAqIEhaKQotI2RlZmluZSBRRVRIX0lQQV9USU1FT1VUIAkoNDUgKiBIWikKLSNkZWZpbmUgUUVUSF9JRFhfQ09NTUFORF9TRVFOTyAJMHhmZmZmMDAwMAorI2RlZmluZSBRRVRIX1RJTUVPVVQJCSgxMCAqIEhaKQorI2RlZmluZSBRRVRIX0lQQV9USU1FT1VUCSg0NSAqIEhaKQorI2RlZmluZSBRRVRIX0lEWF9DT01NQU5EX1NFUU5PCTB4ZmZmZjAwMDAKICNkZWZpbmUgU1JfSU5GT19MRU4JCTE2CiAKICNkZWZpbmUgUUVUSF9DTEVBUl9DSEFOTkVMX1BBUk0JLTEwCkBAIC05Myw3OSArOTMsMTA3IEBACiAgKi8KICNkZWZpbmUgUkVTRVRfUk9VVElOR19GTEFHIDB4MTAgLyogaW5kaWNhdGUgdGhhdCByb3V0aW5nIHR5cGUgc2hhbGwgYmUgc2V0ICovCiBlbnVtIHFldGhfcm91dGluZ190eXBlcyB7Ci0JTk9fUk9VVEVSICAgICAgICAgICA9IDAsIC8qIFRPRE86IHNldCB0byBiaXQgZmxhZyB1c2VkIGluIElQQSBDb21tYW5kICovCi0JUFJJTUFSWV9ST1VURVIgICAgICA9IDEsCi0JU0VDT05EQVJZX1JPVVRFUiAgICA9IDIsCi0JTVVMVElDQVNUX1JPVVRFUiAgICA9IDMsCi0JUFJJTUFSWV9DT05ORUNUT1IgICA9IDQsCi0JU0VDT05EQVJZX0NPTk5FQ1RPUiA9IDUsCisJTk9fUk9VVEVSCQk9IDAsIC8qIFRPRE86IHNldCB0byBiaXQgZmxhZyB1c2VkIGluIElQQSBDb21tYW5kICovCisJUFJJTUFSWV9ST1VURVIJCT0gMSwKKwlTRUNPTkRBUllfUk9VVEVSCT0gMiwKKwlNVUxUSUNBU1RfUk9VVEVSCT0gMywKKwlQUklNQVJZX0NPTk5FQ1RPUgk9IDQsCisJU0VDT05EQVJZX0NPTk5FQ1RPUgk9IDUsCiB9OwogCi0KIC8qIElQQSBDb21tYW5kcyAqLwogZW51bSBxZXRoX2lwYV9jbWRzIHsKLQlJUEFfQ01EX1NUQVJUTEFOICAgICAgICAgICAgICA9IDB4MDEsCi0JSVBBX0NNRF9TVE9QTEFOICAgICAgICAgICAgICAgPSAweDAyLAotCUlQQV9DTURfU0VUVk1BQyAJICAgICAgPSAweDIxLAotCUlQQV9DTURfREVMVk1BQyAJICAgICAgPQkweDIyLAotCUlQQV9DTURfU0VUR01BQyAgCSAgICAgID0gMHgyMywKLQlJUEFfQ01EX0RFTEdNQUMgCSAgICAgID0gMHgyNCwKLQlJUEFfQ01EX1NFVFZMQU4gCSAgICAgID0gMHgyNSwKLQlJUEFfQ01EX0RFTFZMQU4gCSAgICAgID0gMHgyNiwKLQlJUEFfQ01EX1NFVENDSUQgICAgICAgICAgICAgICA9IDB4NDEsCi0JSVBBX0NNRF9ERUxDQ0lEICAgICAgICAgICAgICAgPSAweDQyLAotCUlQQV9DTURfTU9EQ0NJRCAgICAgICAgICAgICAgID0gMHg0MywKLQlJUEFfQ01EX1NFVElQICAgICAgICAgICAgICAgICA9IDB4YjEsCi0JSVBBX0NNRF9ERUxJUCAgICAgICAgICAgICAgICAgPSAweGI3LAotCUlQQV9DTURfUUlQQVNTSVNUICAgICAgICAgICAgID0gMHhiMiwKLQlJUEFfQ01EX1NFVEFTU1BBUk1TICAgICAgICAgICA9IDB4YjMsCi0JSVBBX0NNRF9TRVRJUE0gICAgICAgICAgICAgICAgPSAweGI0LAotCUlQQV9DTURfREVMSVBNICAgICAgICAgICAgICAgID0gMHhiNSwKLQlJUEFfQ01EX1NFVFJURyAgICAgICAgICAgICAgICA9IDB4YjYsCi0JSVBBX0NNRF9TRVRBREFQVEVSUEFSTVMgICAgICAgPSAweGI4LAotCUlQQV9DTURfSVBGUkFNRSAgICAgICAgICAgICAgID0gMHhiOSwKLQlJUEFfQ01EX0FERF9BRERSX0VOVFJZICAgICAgICA9IDB4YzEsCi0JSVBBX0NNRF9ERUxFVEVfQUREUl9FTlRSWSAgICAgPSAweGMyLAotCUlQQV9DTURfQ1JFQVRFX0FERFIgICAgICAgICAgID0gMHhjMywKLQlJUEFfQ01EX0RFU1RST1lfQUREUiAgICAgICAgICA9IDB4YzQsCi0JSVBBX0NNRF9SRUdJU1RFUl9MT0NBTF9BRERSICAgPSAweGQxLAotCUlQQV9DTURfVU5SRUdJU1RFUl9MT0NBTF9BRERSID0gMHhkMiwKKwlJUEFfQ01EX1NUQVJUTEFOCQk9IDB4MDEsCisJSVBBX0NNRF9TVE9QTEFOCQkJPSAweDAyLAorCUlQQV9DTURfU0VUVk1BQwkJCT0gMHgyMSwKKwlJUEFfQ01EX0RFTFZNQUMJCQk9IDB4MjIsCisJSVBBX0NNRF9TRVRHTUFDCQkJPSAweDIzLAorCUlQQV9DTURfREVMR01BQwkJCT0gMHgyNCwKKwlJUEFfQ01EX1NFVFZMQU4JCQk9IDB4MjUsCisJSVBBX0NNRF9ERUxWTEFOCQkJPSAweDI2LAorCUlQQV9DTURfU0VUQ0NJRAkJCT0gMHg0MSwKKwlJUEFfQ01EX0RFTENDSUQJCQk9IDB4NDIsCisJSVBBX0NNRF9NT0RDQ0lECQkJPSAweDQzLAorCUlQQV9DTURfU0VUSVAJCQk9IDB4YjEsCisJSVBBX0NNRF9RSVBBU1NJU1QJCT0gMHhiMiwKKwlJUEFfQ01EX1NFVEFTU1BBUk1TCQk9IDB4YjMsCisJSVBBX0NNRF9TRVRJUE0JCQk9IDB4YjQsCisJSVBBX0NNRF9ERUxJUE0JCQk9IDB4YjUsCisJSVBBX0NNRF9TRVRSVEcJCQk9IDB4YjYsCisJSVBBX0NNRF9ERUxJUAkJCT0gMHhiNywKKwlJUEFfQ01EX1NFVEFEQVBURVJQQVJNUwkJPSAweGI4LAorCUlQQV9DTURfU0VUX0RJQUdfQVNTCQk9IDB4YjksCisJSVBBX0NNRF9DUkVBVEVfQUREUgkJPSAweGMzLAorCUlQQV9DTURfREVTVFJPWV9BRERSCQk9IDB4YzQsCisJSVBBX0NNRF9SRUdJU1RFUl9MT0NBTF9BRERSCT0gMHhkMSwKKwlJUEFfQ01EX1VOUkVHSVNURVJfTE9DQUxfQUREUgk9IDB4ZDIsCisJSVBBX0NNRF9VTktOT1dOCQkJPSAweDAwCiB9OwogCiBlbnVtIHFldGhfaXBfYXNzX2NtZHMgewogCUlQQV9DTURfQVNTX1NUQVJUCT0gMHgwMDAxLAogCUlQQV9DTURfQVNTX1NUT1AJPSAweDAwMDIsCi0JSVBBX0NNRF9BU1NfQ09ORklHVVJFIAk9IDB4MDAwMywKLQlJUEFfQ01EX0FTU19FTkFCTEUgCT0gMHgwMDA0LAorCUlQQV9DTURfQVNTX0NPTkZJR1VSRQk9IDB4MDAwMywKKwlJUEFfQ01EX0FTU19FTkFCTEUJPSAweDAwMDQsCiB9OwogCiBlbnVtIHFldGhfYXJwX3Byb2Nlc3Nfc3ViY21kcyB7Ci0JSVBBX0NNRF9BU1NfQVJQX1NFVF9OT19FTlRSSUVTIAk9IDB4MDAwMywKLQlJUEFfQ01EX0FTU19BUlBfUVVFUllfQ0FDSEUgCT0gMHgwMDA0LAotCUlQQV9DTURfQVNTX0FSUF9BRERfRU5UUlkgCT0gMHgwMDA1LAotCUlQQV9DTURfQVNTX0FSUF9SRU1PVkVfRU5UUlkgCT0gMHgwMDA2LAotCUlQQV9DTURfQVNTX0FSUF9GTFVTSF9DQUNIRSAJPSAweDAwMDcsCi0JSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8gCT0gMHgwMTA0LAotCUlQQV9DTURfQVNTX0FSUF9RVUVSWV9TVEFUUyAJPSAweDAyMDQsCisJSVBBX0NNRF9BU1NfQVJQX1NFVF9OT19FTlRSSUVTCT0gMHgwMDAzLAorCUlQQV9DTURfQVNTX0FSUF9RVUVSWV9DQUNIRQk9IDB4MDAwNCwKKwlJUEFfQ01EX0FTU19BUlBfQUREX0VOVFJZCT0gMHgwMDA1LAorCUlQQV9DTURfQVNTX0FSUF9SRU1PVkVfRU5UUlkJPSAweDAwMDYsCisJSVBBX0NNRF9BU1NfQVJQX0ZMVVNIX0NBQ0hFCT0gMHgwMDA3LAorCUlQQV9DTURfQVNTX0FSUF9RVUVSWV9JTkZPCT0gMHgwMTA0LAorCUlQQV9DTURfQVNTX0FSUF9RVUVSWV9TVEFUUwk9IDB4MDIwNCwKIH07CiAKLS8qIFJldHVybiBDb2RlcyBmb3IgSVBBIENvbW1hbmRzICovCisKKy8qIFJldHVybiBDb2RlcyBmb3IgSVBBIENvbW1hbmRzCisgKiBhY2NvcmRpbmcgdG8gT1NBIGNhcmQgU3BlY3MgKi8KKwogZW51bSBxZXRoX2lwYV9yZXR1cm5fY29kZXMgewotCUlQQV9SQ19TVUNDRVNTICAgICAgICAgICAgID0gMHgwMDAwLAotCUlQQV9SQ19OT1RTVVBQICAgICAgICAgICAgID0gMHgwMDAxLAotCUlQQV9SQ19OT19BQ0NFU1MgICAgICAgICAgID0gMHgwMDAyLAotCUlQQV9SQ19GQUlMRUQgICAgICAgICAgICAgID0gMHgwMDAzLAotCUlQQV9SQ19EQVRBX01JU01BVENIICAgICAgID0gMHhlMDAxLAotCUlQQV9SQ19JTlZBTElEX0xBTl9UWVBFICAgID0gMHhlMDAzLAotCUlQQV9SQ19JTlZBTElEX0xBTl9OTyAgICAgID0gMHhlMDA0LAotCUlQQV9SQ19JUEFERFJfQUxSRUFEWV9SRUcgID0gMHhlMDA1LAotCUlQQV9SQ19JUEFERFJfVEFCTEVfRlVMTCAgID0gMHhlMDA2LAotCUlQQV9SQ19JUEFERFJfQUxSRUFEWV9VU0VEID0gMHhlMDBhLAotCUlQQV9SQ19BU1NOT19OT1RfU1VQUCAgICAgID0gMHhlMDBkLAotCUlQQV9SQ19BU1NDTURfU1RBUlRfRkFJTEVEID0gMHhlMDBlLAotCUlQQV9SQ19BU1NDTURfUEFSVF9TVUNDRVNTID0gMHhlMDBmLAotCUlQQV9SQ19JUEFERFJfTk9UX0RFRklORUQgID0gMHhlMDEwLAotCUlQQV9SQ19MQU5fT0ZGTElORSAgICAgICAgID0gMHhlMDgwLAorCUlQQV9SQ19TVUNDRVNTCQkJPSAweDAwMDAsCisJSVBBX1JDX05PVFNVUFAJCQk9IDB4MDAwMSwKKwlJUEFfUkNfSVBfVEFCTEVfRlVMTAkJPSAweDAwMDIsCisJSVBBX1JDX1VOS05PV05fRVJST1IJCT0gMHgwMDAzLAorCUlQQV9SQ19VTlNVUFBPUlRFRF9DT01NQU5ECT0gMHgwMDA0LAorCUlQQV9SQ19EVVBfSVBWNl9SRU1PVEUJCT0gMHgwMDA4LAorCUlQQV9SQ19EVVBfSVBWNl9IT01FCQk9IDB4MDAxMCwKKwlJUEFfUkNfVU5SRUdJU1RFUkVEX0FERFIJPSAweDAwMTEsCisJSVBBX1JDX05PX0lEX0FWQUlMQUJMRQkJPSAweDAwMTIsCisJSVBBX1JDX0lEX05PVF9GT1VORAkJPSAweDAwMTMsCisJSVBBX1JDX0lOVkFMSURfSVBfVkVSU0lPTgk9IDB4MDAyMCwKKwlJUEFfUkNfTEFOX0ZSQU1FX01JU01BVENICT0gMHgwMDQwLAorCUlQQV9SQ19MMl9VTlNVUFBPUlRFRF9DTUQJPSAweDIwMDMsCisJSVBBX1JDX0wyX0RVUF9NQUMJCT0gMHgyMDA1LAorCUlQQV9SQ19MMl9BRERSX1RBQkxFX0ZVTEwJPSAweDIwMDYsCisJSVBBX1JDX0wyX0RVUF9MQVlFUjNfTUFDCT0gMHgyMDBhLAorCUlQQV9SQ19MMl9HTUFDX05PVF9GT1VORAk9IDB4MjAwYiwKKwlJUEFfUkNfTDJfTUFDX05PVF9GT1VORAkJPSAweDIwMTAsCisJSVBBX1JDX0wyX0lOVkFMSURfVkxBTl9JRAk9IDB4MjAxNSwKKwlJUEFfUkNfTDJfRFVQX1ZMQU5fSUQJCT0gMHgyMDE2LAorCUlQQV9SQ19MMl9WTEFOX0lEX05PVF9GT1VORAk9IDB4MjAxNywKKwlJUEFfUkNfREFUQV9NSVNNQVRDSAkJPSAweGUwMDEsCisJSVBBX1JDX0lOVkFMSURfTVRVX1NJWkUJCT0gMHhlMDAyLAorCUlQQV9SQ19JTlZBTElEX0xBTlRZUEUJCT0gMHhlMDAzLAorCUlQQV9SQ19JTlZBTElEX0xBTk5VTQkJPSAweGUwMDQsCisJSVBBX1JDX0RVUExJQ0FURV9JUF9BRERSRVNTCT0gMHhlMDA1LAorCUlQQV9SQ19JUF9BRERSX1RBQkxFX0ZVTEwJPSAweGUwMDYsCisJSVBBX1JDX0xBTl9QT1JUX1NUQVRFX0VSUk9SCT0gMHhlMDA3LAorCUlQQV9SQ19TRVRJUF9OT19TVEFSVExBTgk9IDB4ZTAwOCwKKwlJUEFfUkNfU0VUSVBfQUxSRUFEWV9SRUNFSVZFRAk9IDB4ZTAwOSwKKwlJUEFfUkNfSVBfQUREUl9BTFJFQURZX1VTRUQJPSAweGUwMGEsCisJSVBBX1JDX01VTFRJQ0FTVF9GVUxMCQk9IDB4ZTAwYiwKKwlJUEFfUkNfU0VUSVBfSU5WQUxJRF9WRVJTSU9OCT0gMHhlMDBkLAorCUlQQV9SQ19VTlNVUFBPUlRFRF9TVUJDTUQJPSAweGUwMGUsCisJSVBBX1JDX0FSUF9BU1NJU1RfTk9fRU5BQkxFCT0gMHhlMDBmLAorCUlQQV9SQ19QUklNQVJZX0FMUkVBRFlfREVGSU5FRAk9IDB4ZTAxMCwKKwlJUEFfUkNfU0VDT05EX0FMUkVBRFlfREVGSU5FRAk9IDB4ZTAxMSwKKwlJUEFfUkNfSU5WQUxJRF9TRVRSVEdfSU5ESUNBVE9SCT0gMHhlMDEyLAorCUlQQV9SQ19NQ19BRERSX0FMUkVBRFlfREVGSU5FRAk9IDB4ZTAxMywKKwlJUEFfUkNfTEFOX09GRkxJTkUJCT0gMHhlMDgwLAorCUlQQV9SQ19JTlZBTElEX0lQX1ZFUlNJT04yCT0gMHhmMDAxLAorCUlQQV9SQ19GRkZGCQkJPSAweGZmZmYKIH07CiAKIC8qIElQQSBmdW5jdGlvbiBmbGFnczsgZWFjaCBmbGFnIG1hcmtzIGF2YWlsYWJpbGl0eSBvZiByZXNwZWN0aXZlIGZ1bmN0aW9uICovCkBAIC0xODMsNyArMjExLDkgQEAKIAlJUEFfU0VUQURBUFRFUlBBUk1TICAgICA9IDB4MDAwMDA0MDBMLAogCUlQQV9WTEFOX1BSSU8gICAgICAgICAgID0gMHgwMDAwMDgwMEwsCiAJSVBBX1BBU1NUSFJVICAgICAgICAgICAgPSAweDAwMDAxMDAwTCwKKwlJUEFfRkxVU0hfQVJQX1NVUFBPUlQgICA9IDB4MDAwMDIwMDBMLAogCUlQQV9GVUxMX1ZMQU4gICAgICAgICAgID0gMHgwMDAwNDAwMEwsCisJSVBBX0lOQk9VTkRfUEFTU1RIUlUgICAgPSAweDAwMDA4MDAwTCwKIAlJUEFfU09VUkNFX01BQyAgICAgICAgICA9IDB4MDAwMTAwMDBMLAogCUlQQV9PU0FfTUNfUk9VVEVSICAgICAgID0gMHgwMDAyMDAwMEwsCiAJSVBBX1FVRVJZX0FSUF9BU1NJU1QJPSAweDAwMDQwMDAwTCwKQEAgLTIwNCwzMSArMjM0LDMwIEBACiAvKiBTRVRBREFQVEVSIElQQSBDb21tYW5kOiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogZW51bSBxZXRoX2lwYV9zZXRhZHBfY21kIHsKIAlJUEFfU0VUQURQX1FVRVJZX0NPTU1BTkRTX1NVUFBPUlRFRAk9IDB4MDEsCi0JSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUyAJCT0gMHgwMiwKLQlJUEFfU0VUQURQX0FERF9ERUxFVEVfR1JPVVBfQUREUkVTUyAJPSAweDA0LAotCUlQQV9TRVRBRFBfQUREX0RFTEVURV9GVU5DVElPTkFMX0FERFIgCT0gMHgwOCwKLQlJUEFfU0VUQURQX1NFVF9BRERSRVNTSU5HX01PREUgCQk9IDB4MTAsCi0JSVBBX1NFVEFEUF9TRVRfQ09ORklHX1BBUk1TIAkJPSAweDIwLAotCUlQQV9TRVRBRFBfU0VUX0NPTkZJR19QQVJNU19FWFRFTkRFRCAJPSAweDQwLAotCUlQQV9TRVRBRFBfU0VUX0JST0FEQ0FTVF9NT0RFIAkJPSAweDgwLAotCUlQQV9TRVRBRFBfU0VORF9PU0FfTUVTU0FHRSAJCT0gMHgwMTAwLAotCUlQQV9TRVRBRFBfU0VUX1NOTVBfQ09OVFJPTCAJCT0gMHgwMjAwLAotCUlQQV9TRVRBRFBfUkVBRF9TTk1QX1BBUk1TIAkJPSAweDA0MDAsCisJSVBBX1NFVEFEUF9BTFRFUl9NQUNfQUREUkVTUwkJPSAweDAyLAorCUlQQV9TRVRBRFBfQUREX0RFTEVURV9HUk9VUF9BRERSRVNTCT0gMHgwNCwKKwlJUEFfU0VUQURQX0FERF9ERUxFVEVfRlVOQ1RJT05BTF9BRERSCT0gMHgwOCwKKwlJUEFfU0VUQURQX1NFVF9BRERSRVNTSU5HX01PREUJCT0gMHgxMCwKKwlJUEFfU0VUQURQX1NFVF9DT05GSUdfUEFSTVMJCT0gMHgyMCwKKwlJUEFfU0VUQURQX1NFVF9DT05GSUdfUEFSTVNfRVhURU5ERUQJPSAweDQwLAorCUlQQV9TRVRBRFBfU0VUX0JST0FEQ0FTVF9NT0RFCQk9IDB4ODAsCisJSVBBX1NFVEFEUF9TRU5EX09TQV9NRVNTQUdFCQk9IDB4MDEwMCwKKwlJUEFfU0VUQURQX1NFVF9TTk1QX0NPTlRST0wJCT0gMHgwMjAwLAorCUlQQV9TRVRBRFBfUVVFUllfQ0FSRF9JTkZPCQk9IDB4MDQwMCwKIAlJUEFfU0VUQURQX1NFVF9QUk9NSVNDX01PREUJCT0gMHgwODAwLAotCUlQQV9TRVRBRFBfUVVFUllfQ0FSRF9JTkZPIAkJPSAweDEwMDAsCiB9OwogZW51bSBxZXRoX2lwYV9tYWNfb3BzIHsKLQlDSEFOR0VfQUREUl9SRUFEX01BQyAJCT0gMCwKLQlDSEFOR0VfQUREUl9SRVBMQUNFX01BQyAJPSAxLAotCUNIQU5HRV9BRERSX0FERF9NQUMgCQk9IDIsCi0JQ0hBTkdFX0FERFJfREVMX01BQyAJCT0gNCwKLQlDSEFOR0VfQUREUl9SRVNFVF9NQUMgCQk9IDgsCisJQ0hBTkdFX0FERFJfUkVBRF9NQUMJCT0gMCwKKwlDSEFOR0VfQUREUl9SRVBMQUNFX01BQwkJPSAxLAorCUNIQU5HRV9BRERSX0FERF9NQUMJCT0gMiwKKwlDSEFOR0VfQUREUl9ERUxfTUFDCQk9IDQsCisJQ0hBTkdFX0FERFJfUkVTRVRfTUFDCQk9IDgsCiB9OwogZW51bSBxZXRoX2lwYV9hZGRyX29wcyB7Ci0JQ0hBTkdFX0FERFJfUkVBRF9BRERSIAkJPSAwLAotCUNIQU5HRV9BRERSX0FERF9BRERSIAkJPSAxLAotCUNIQU5HRV9BRERSX0RFTF9BRERSIAkJPSAyLAotCUNIQU5HRV9BRERSX0ZMVVNIX0FERFJfVEFCTEUgCT0gNCwKKwlDSEFOR0VfQUREUl9SRUFEX0FERFIJCT0gMCwKKwlDSEFOR0VfQUREUl9BRERfQUREUgkJPSAxLAorCUNIQU5HRV9BRERSX0RFTF9BRERSCQk9IDIsCisJQ0hBTkdFX0FERFJfRkxVU0hfQUREUl9UQUJMRQk9IDQsCiB9OwogZW51bSBxZXRoX2lwYV9wcm9taXNjX21vZGVzIHsKIAlTRVRfUFJPTUlTQ19NT0RFX09GRgkJPSAwLApAQCAtNDA3LDE1ICs0MzYsMTUgQEAKIHN0cnVjdCBxZXRoX2lwYV9jbWQgewogCXN0cnVjdCBxZXRoX2lwYWNtZF9oZHIgaGRyOwogCXVuaW9uIHsKLQkJc3RydWN0IHFldGhfaXBhY21kX3NldGRlbGlwNCAgIAkJc2V0ZGVsaXA0OwotCQlzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0ZGVsaXA2ICAgCQlzZXRkZWxpcDY7CisJCXN0cnVjdCBxZXRoX2lwYWNtZF9zZXRkZWxpcDQJCXNldGRlbGlwNDsKKwkJc3RydWN0IHFldGhfaXBhY21kX3NldGRlbGlwNgkJc2V0ZGVsaXA2OwogCQlzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0ZGVsaXBtCQlzZXRkZWxpcG07Ci0JCXN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhc3NwYXJtcyAJCXNldGFzc3Bhcm1zOwotCQlzdHJ1Y3QgcWV0aF9pcGFjbWRfbGF5ZXIyc2V0ZGVsbWFjICAJc2V0ZGVsbWFjOwotCQlzdHJ1Y3QgcWV0aF9pcGFjbWRfbGF5ZXIyc2V0ZGVsdmxhbiAJc2V0ZGVsdmxhbjsKLQkJc3RydWN0IHFldGhfY3JlYXRlX2Rlc3Ryb3lfYWRkcmVzcyAJY3JlYXRlX2Rlc3Ryb3lfYWRkcjsKLQkJc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zIAkJc2V0YWRhcHRlcnBhcm1zOwotCQlzdHJ1Y3QgcWV0aF9zZXRfcm91dGluZyAJCXNldHJ0ZzsKKwkJc3RydWN0IHFldGhfaXBhY21kX3NldGFzc3Bhcm1zCQlzZXRhc3NwYXJtczsKKwkJc3RydWN0IHFldGhfaXBhY21kX2xheWVyMnNldGRlbG1hYwlzZXRkZWxtYWM7CisJCXN0cnVjdCBxZXRoX2lwYWNtZF9sYXllcjJzZXRkZWx2bGFuCXNldGRlbHZsYW47CisJCXN0cnVjdCBxZXRoX2NyZWF0ZV9kZXN0cm95X2FkZHJlc3MJY3JlYXRlX2Rlc3Ryb3lfYWRkcjsKKwkJc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zCQlzZXRhZGFwdGVycGFybXM7CisJCXN0cnVjdCBxZXRoX3NldF9yb3V0aW5nCQkJc2V0cnRnOwogCX0gZGF0YTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC00MzMsNiArNDYyLDEyIEBACiAJUUVUSF9JUEFfQVJQX1JDX1FfTk9fREFUQSAgICA9IDB4MDAwOCwKIH07CiAKKworZXh0ZXJuIGNoYXIgKgorcWV0aF9nZXRfaXBhX21zZyhlbnVtIHFldGhfaXBhX3JldHVybl9jb2RlcyByYyk7CitleHRlcm4gY2hhciAqCitxZXRoX2dldF9pcGFfY21kX25hbWUoZW51bSBxZXRoX2lwYV9jbWRzIGNtZCk7CisKICNkZWZpbmUgUUVUSF9TRVRBU1NfQkFTRV9MRU4gKHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfaGRyKSArIFwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFzc3Bhcm1zX2hkcikpCiAjZGVmaW5lIFFFVEhfSVBBX0FSUF9EQVRBX1BPUyhidWZmZXIpIChidWZmZXIgKyBJUEFfUERVX0hFQURFUl9TSVpFICsgXApAQCAtNTIxLDcgKzU1Niw3IEBACiBleHRlcm4gdW5zaWduZWQgY2hhciBJRFhfQUNUSVZBVEVfUkVBRFtdOwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgSURYX0FDVElWQVRFX1dSSVRFW107CiAKLSNkZWZpbmUgSURYX0FDVElWQVRFX1NJWkUgCTB4MjIKKyNkZWZpbmUgSURYX0FDVElWQVRFX1NJWkUJMHgyMgogI2RlZmluZSBRRVRIX0lEWF9BQ1RfSVNTVUVSX1JNX1RPS0VOKGJ1ZmZlcikgKGJ1ZmZlcisweDBjKQogI2RlZmluZSBRRVRIX0lEWF9OT19QT1JUTkFNRV9SRVFVSVJFRChidWZmZXIpICgoYnVmZmVyKVsweDBiXSYweDgwKQogI2RlZmluZSBRRVRIX0lEWF9BQ1RfRlVOQ19MRVZFTChidWZmZXIpIChidWZmZXIrMHgxMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwppbmRleCBkNTE4NDE5Li42NWZmYzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCkBAIC0zODQsOCArMzg0LDYgQEAKIAkJcm91dGUtPnR5cGUgPSBQUklNQVJZX0NPTk5FQ1RPUjsKIAl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAic2Vjb25kYXJ5X2Nvbm5lY3RvciIpKSB7CiAJCXJvdXRlLT50eXBlID0gU0VDT05EQVJZX0NPTk5FQ1RPUjsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAibXVsdGljYXN0X3JvdXRlciIpKSB7Ci0JCXJvdXRlLT50eXBlID0gTVVMVElDQVNUX1JPVVRFUjsKIAl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAicHJpbWFyeV9yb3V0ZXIiKSkgewogCQlyb3V0ZS0+dHlwZSA9IFBSSU1BUllfUk9VVEVSOwogCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJzZWNvbmRhcnlfcm91dGVyIikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCmluZGV4IDFmOTU1NGUuLjgyMWNkZTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKQEAgLTExOCw5NyArMTE4LDMyIEBACiAKICNkZWZpbmUgWkZDUF9MT0dfQVJFQQkJCVpGQ1BfTE9HX0FSRUFfRlNGCiAKLXN0YXRpYyBpbnQgemZjcF9yZXFsaXN0X2luaXQoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgemZjcF9yZXFsaXN0X2FsbG9jKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaW50IGk7CisJaW50IGlkeDsKIAogCWFkYXB0ZXItPnJlcV9saXN0ID0ga2NhbGxvYyhSRVFVRVNUX0xJU1RfU0laRSwgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLAogCQkJCSAgICBHRlBfS0VSTkVMKTsKLQogCWlmICghYWRhcHRlci0+cmVxX2xpc3QpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChpPTA7IGk8UkVRVUVTVF9MSVNUX1NJWkU7IGkrKykKLQkJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPnJlcV9saXN0W2ldKTsKLQorCWZvciAoaWR4ID0gMDsgaWR4IDwgUkVRVUVTVF9MSVNUX1NJWkU7IGlkeCsrKQorCQlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfcmVxbGlzdF9mcmVlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxdWVzdCwgKnRtcDsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaT0wOyBpPFJFUVVFU1RfTElTVF9TSVpFOyBpKyspIHsKLQkJaWYgKGxpc3RfZW1wdHkoJmFkYXB0ZXItPnJlcV9saXN0W2ldKSkKLQkJCWNvbnRpbnVlOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXF1ZXN0LCB0bXAsCi0JCQkJCSAmYWRhcHRlci0+cmVxX2xpc3RbaV0sIGxpc3QpCi0JCQlsaXN0X2RlbCgmcmVxdWVzdC0+bGlzdCk7Ci0JfQotCiAJa2ZyZWUoYWRhcHRlci0+cmVxX2xpc3QpOwogfQogCi12b2lkIHpmY3BfcmVxbGlzdF9hZGQoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWkgPSBmc2ZfcmVxLT5yZXFfaWQgJSBSRVFVRVNUX0xJU1RfU0laRTsKLQlsaXN0X2FkZF90YWlsKCZmc2ZfcmVxLT5saXN0LCAmYWRhcHRlci0+cmVxX2xpc3RbaV0pOwotfQotCi12b2lkIHpmY3BfcmVxbGlzdF9yZW1vdmUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgbG9uZyByZXFfaWQpCi17Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxdWVzdCwgKnRtcDsKLQl1bnNpZ25lZCBpbnQgaSwgY291bnRlcjsKLQl1NjQgZGJnX3RtcFsyXTsKLQotCWkgPSByZXFfaWQgJSBSRVFVRVNUX0xJU1RfU0laRTsKLQlCVUdfT04obGlzdF9lbXB0eSgmYWRhcHRlci0+cmVxX2xpc3RbaV0pKTsKLQotCWNvdW50ZXIgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXF1ZXN0LCB0bXAsICZhZGFwdGVyLT5yZXFfbGlzdFtpXSwgbGlzdCkgewotCQlpZiAocmVxdWVzdC0+cmVxX2lkID09IHJlcV9pZCkgewotCQkJZGJnX3RtcFswXSA9ICh1NjQpIGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZXFzX2FjdGl2ZSk7Ci0JCQlkYmdfdG1wWzFdID0gKHU2NCkgY291bnRlcjsKLQkJCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsICh2b2lkICopIGRiZ190bXAsIDE2KTsKLQkJCWxpc3RfZGVsKCZyZXF1ZXN0LT5saXN0KTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNvdW50ZXIrKzsKLQl9Ci19Ci0KLXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfcmVxbGlzdF9pc21lbWJlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIHJlcV9pZCkKLXsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXF1ZXN0LCAqdG1wOwotCXVuc2lnbmVkIGludCBpOwotCi0JLyogMCBpcyByZXNlcnZlZCBhcyBhbiBpbnZhbGlkIHJlcV9pZCAqLwotCWlmIChyZXFfaWQgPT0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpID0gcmVxX2lkICUgUkVRVUVTVF9MSVNUX1NJWkU7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxdWVzdCwgdG1wLCAmYWRhcHRlci0+cmVxX2xpc3RbaV0sIGxpc3QpCi0JCWlmIChyZXF1ZXN0LT5yZXFfaWQgPT0gcmVxX2lkKQotCQkJcmV0dXJuIHJlcXVlc3Q7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogaW50IHpmY3BfcmVxbGlzdF9pc2VtcHR5KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGlkeDsKIAotCWZvciAoaT0wOyBpPFJFUVVFU1RfTElTVF9TSVpFOyBpKyspCi0JCWlmICghbGlzdF9lbXB0eSgmYWRhcHRlci0+cmVxX2xpc3RbaV0pKQorCWZvciAoaWR4ID0gMDsgaWR4IDwgUkVRVUVTVF9MSVNUX1NJWkU7IGlkeCsrKQorCQlpZiAoIWxpc3RfZW1wdHkoJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0pKQogCQkJcmV0dXJuIDA7Ci0KIAlyZXR1cm4gMTsKIH0KIApAQCAtNjcyLDggKzYwNyw3IEBACiAgKiBAc2dfY291bnQ6IGVsZW1lbnRzIGluIGFycmF5CiAgKiBSZXR1cm46IHNpemUgb2YgZW50aXJlIHNjYXR0ZXItZ2F0aGVyIGxpc3QKICAqLwotc2l6ZV90Ci16ZmNwX3NnX3NpemUoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnX2NvdW50KQorc3RhdGljIHNpemVfdCB6ZmNwX3NnX3NpemUoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnX2NvdW50KQogewogCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqcDsKQEAgLTkxMyw2ICs4NDcsOCBAQAogCXVuaXQtPnN5c2ZzX2RldmljZS5yZWxlYXNlID0gemZjcF9zeXNmc191bml0X3JlbGVhc2U7CiAJZGV2X3NldF9kcnZkYXRhKCZ1bml0LT5zeXNmc19kZXZpY2UsIHVuaXQpOwogCisJaW5pdF93YWl0cXVldWVfaGVhZCgmdW5pdC0+c2NzaV9zY2FuX3dxKTsKKwogCS8qIG1hcmsgdW5pdCB1bnVzYWJsZSBhcyBsb25nIGFzIHN5c2ZzIHJlZ2lzdHJhdGlvbiBpcyBub3QgY29tcGxldGUgKi8KIAlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX1JFTU9WRSwgJnVuaXQtPnN0YXR1cyk7CiAKQEAgLTEwMzgsOCArOTc0LDcgQEAKIAkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuZGF0YV9naWRfcG4pOwogfQogCi12b2lkCi16ZmNwX2R1bW15X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgemZjcF9kdW1teV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm47CiB9CkBAIC0xMTA0LDcgKzEwMzksNyBAQAogCiAJLyogaW5pdGlhbGl6ZSBsaXN0IG9mIGZzZiByZXF1ZXN0cyAqLwogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKLQlyZXR2YWwgPSB6ZmNwX3JlcWxpc3RfaW5pdChhZGFwdGVyKTsKKwlyZXR2YWwgPSB6ZmNwX3JlcWxpc3RfYWxsb2MoYWRhcHRlcik7CiAJaWYgKHJldHZhbCkgewogCQlaRkNQX0xPR19JTkZPKCJyZXF1ZXN0IGxpc3QgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsZWRfbG93X21lbV9idWZmZXJzOwpAQCAtMTE2NSw2ICsxMTAwLDcgQEAKIAl6ZmNwX3N5c2ZzX2FkYXB0ZXJfcmVtb3ZlX2ZpbGVzKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpOwogIHN5c2ZzX2ZhaWxlZDoKIAlkZXZfc2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldiwgTlVMTCk7CisJemZjcF9yZXFsaXN0X2ZyZWUoYWRhcHRlcik7CiAgZmFpbGVkX2xvd19tZW1fYnVmZmVyczoKIAl6ZmNwX2ZyZWVfbG93X21lbV9idWZmZXJzKGFkYXB0ZXIpOwogCWlmIChxZGlvX2ZyZWUoY2N3X2RldmljZSkgIT0gMCkKQEAgLTExOTEsNiArMTEyNyw3IEBACiAJaW50IHJldHZhbCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXpmY3BfYWRhcHRlcl9zY3NpX3VucmVnaXN0ZXIoYWRhcHRlcik7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJmFkYXB0ZXItPmdlbmVyaWNfc2VydmljZXMpOwogCXpmY3Bfc3lzZnNfYWRhcHRlcl9yZW1vdmVfZmlsZXMoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldik7CiAJZGV2X3NldF9kcnZkYXRhKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsIE5VTEwpOwpAQCAtMTM5OCw3ICsxMzM1LDcgQEAKIAogI2RlZmluZSBaRkNQX0xPR19BUkVBICAgICAgICAgICAgICAgICAgIFpGQ1BfTE9HX0FSRUFfRkMKIAotdm9pZAorc3RhdGljIHZvaWQKIHpmY3BfZnNmX2luY29taW5nX2Vsc19yc2NuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3RhdHVzX2J1ZmZlcikKIHsKQEAgLTE0OTcsNyArMTQzNCw3IEBACiAKIAlpZiAoIXBvcnQgfHwgKHBvcnQtPnd3cG4gIT0gKCood3duX3QgKikgJmVsc19wbG9naS0+c2Vydl9wYXJhbS53d3BuKSkpIHsKIAkJWkZDUF9MT0dfREVCVUcoImlnbm9yZWQgaW5jb21pbmcgUExPR0kgZm9yIG5vbmV4aXN0aW5nIHBvcnQgIgotCQkJICAgICAgICJ3aXRoIGRfaWQgMHglMDh4IG9uIGFkYXB0ZXIgJXNcbiIsCisJCQkgICAgICAgIndpdGggZF9pZCAweCUwNnggb24gYWRhcHRlciAlc1xuIiwKIAkJCSAgICAgICBzdGF0dXNfYnVmZmVyLT5kX2lkLAogCQkJICAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwogCX0gZWxzZSB7CkBAIC0xNTIyLDcgKzE0NTksNyBAQAogCiAJaWYgKCFwb3J0IHx8IChwb3J0LT53d3BuICE9IGVsc19sb2dvLT5ucG9ydF93d3BuKSkgewogCQlaRkNQX0xPR19ERUJVRygiaWdub3JlZCBpbmNvbWluZyBMT0dPIGZvciBub25leGlzdGluZyBwb3J0ICIKLQkJCSAgICAgICAid2l0aCBkX2lkIDB4JTA4eCBvbiBhZGFwdGVyICVzXG4iLAorCQkJICAgICAgICJ3aXRoIGRfaWQgMHglMDZ4IG9uIGFkYXB0ZXIgJXNcbiIsCiAJCQkgICAgICAgc3RhdHVzX2J1ZmZlci0+ZF9pZCwKIAkJCSAgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAl9IGVsc2UgewpAQCAtMTcwNCw3ICsxNjQxLDcgQEAKIAkvKiBsb29rcyBsaWtlIGEgdmFsaWQgZF9pZCAqLwogICAgICAgICBwb3J0LT5kX2lkID0gY3RfaXVfcmVzcC0+ZF9pZCAmIFpGQ1BfRElEX01BU0s7CiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX1BPUlRfRElEX0RJRCwgJnBvcnQtPnN0YXR1cyk7Ci0JWkZDUF9MT0dfREVCVUcoImFkYXB0ZXIgJXM6ICB3d3BuPTB4JTAxNkx4IC0tLT4gZF9pZD0weCUwOHhcbiIsCisJWkZDUF9MT0dfREVCVUcoImFkYXB0ZXIgJXM6ICB3d3BuPTB4JTAxNkx4IC0tLT4gZF9pZD0weCUwNnhcbiIsCiAJCSAgICAgICB6ZmNwX2dldF9idXNpZF9ieV9wb3J0KHBvcnQpLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkKTsKIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKaW5kZXggODE2ODBlZi4uMWM4ZjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCkBAIC0xODksOSArMTg5LDcgQEAKICAqIEBjY3dfZGV2aWNlOiBwb2ludGVyIHRvIGJlbG9uZ2luZyBjY3cgZGV2aWNlCiAgKgogICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSB0aGUgY29tbW9uIGkvbyBsYXllciBhbmQgc2V0cyBhbiBhZGFwdGVyCi0gKiBpbnRvIHN0YXRlIG9mZmxpbmUuIFNldHRpbmcgYW4gZmNwIGRldmljZSBvZmZsaW5lIG1lYW5zIHRoYXQgaXQgd2lsbCBiZQotICogdW5yZWdpc3RlcmVkIGZyb20gdGhlIFNDU0kgc3RhY2sgYW5kIHRoYXQgdGhlIGFkYXB0ZXIgd2lsbCBiZSBzaHV0IGRvd24KLSAqIGFzeW5jaHJvbm91c2x5LgorICogaW50byBzdGF0ZSBvZmZsaW5lLgogICovCiBzdGF0aWMgaW50CiB6ZmNwX2Njd19zZXRfb2ZmbGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2N3X2RldmljZSkKQEAgLTIwMiw3ICsyMDAsNiBAQAogCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldik7CiAJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwotCXpmY3BfYWRhcHRlcl9zY3NpX3VucmVnaXN0ZXIoYWRhcHRlcik7CiAJemZjcF9lcnBfdGhyZWFkX2tpbGwoYWRhcHRlcik7CiAJemZjcF9hZGFwdGVyX2RlYnVnX3VucmVnaXN0ZXIoYWRhcHRlcik7CiAJdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYwppbmRleCBkODE5MWQxLi41ZjMyMTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCU5VTEwKIH07CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBfemZjcF9zYW5fZGJmX2V2ZW50X2NvbW1vbl9jdChjb25zdCBjaGFyICp0YWcsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsCiAJCQkgICAgICB1MzIgc19pZCwgdTMyIGRfaWQsIHZvaWQgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCmluZGV4IDMyOTMzZWQuLjIyNjQ5NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaApAQCAtNjM3LDYgKzYzNyw3IEBACiAjZGVmaW5lIFpGQ1BfU1RBVFVTX1VOSVRfU0hBUkVECQkJMHgwMDAwMDAwNAogI2RlZmluZSBaRkNQX1NUQVRVU19VTklUX1JFQURPTkxZCQkweDAwMDAwMDA4CiAjZGVmaW5lIFpGQ1BfU1RBVFVTX1VOSVRfUkVHSVNURVJFRAkJMHgwMDAwMDAxMAorI2RlZmluZSBaRkNQX1NUQVRVU19VTklUX1NDU0lfV09SS19QRU5ESU5HCTB4MDAwMDAwMjAKIAogLyogRlNGIHJlcXVlc3Qgc3RhdHVzICh0aGlzIGRvZXMgbm90IGhhdmUgYSBjb21tb24gcGFydCkgKi8KICNkZWZpbmUgWkZDUF9TVEFUVVNfRlNGUkVRX05PVF9JTklUCQkweDAwMDAwMDAwCkBAIC05ODAsNiArOTgxLDEwIEBACiAgICAgICAgIHN0cnVjdCBzY3NpX2RldmljZSAgICAgKmRldmljZTsgICAgICAgIC8qIHNjc2kgZGV2aWNlIHN0cnVjdCBwb2ludGVyICovCiAJc3RydWN0IHpmY3BfZXJwX2FjdGlvbiBlcnBfYWN0aW9uOyAgICAgLyogcGVuZGluZyBlcnJvciByZWNvdmVyeSAqLwogICAgICAgICBhdG9taWNfdCAgICAgICAgICAgICAgIGVycF9jb3VudGVyOworCXdhaXRfcXVldWVfaGVhZF90ICAgICAgc2NzaV9zY2FuX3dxOyAgIC8qIGNhbiBiZSB1c2VkIHRvIHdhaXQgdW50aWwKKwkJCQkJCSAgYWxsIHNjc2lfc2Nhbl90YXJnZXQKKwkJCQkJCSAgcmVxdWVzdHMgaGF2ZSBiZWVuCisJCQkJCQkgIGNvbXBsZXRlZC4gKi8KIH07CiAKIC8qIEZTRiByZXF1ZXN0ICovCkBAIC0xMDg1LDYgKzEwOTAsNDIgQEAKICNkZWZpbmUgemZjcF9nZXRfYnVzaWRfYnlfdW5pdCh1bml0KSAoemZjcF9nZXRfYnVzaWRfYnlfcG9ydCh1bml0LT5wb3J0KSkKIAogLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIHJlcXVlc3QgSUQgbWFuYWdlbWVudC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgemZjcF9yZXFsaXN0X2hhc2godW5zaWduZWQgbG9uZyByZXFfaWQpCit7CisJcmV0dXJuIHJlcV9pZCAlIFJFUVVFU1RfTElTVF9TSVpFOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgemZjcF9yZXFsaXN0X2FkZChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQoreworCXVuc2lnbmVkIGludCBpZHg7CisKKwlpZHggPSB6ZmNwX3JlcWxpc3RfaGFzaChmc2ZfcmVxLT5yZXFfaWQpOworCWxpc3RfYWRkX3RhaWwoJmZzZl9yZXEtPmxpc3QsICZhZGFwdGVyLT5yZXFfbGlzdFtpZHhdKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHpmY3BfcmVxbGlzdF9yZW1vdmUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3sKKwlsaXN0X2RlbCgmZnNmX3JlcS0+bGlzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHpmY3BfZnNmX3JlcSAqCit6ZmNwX3JlcWxpc3RfZmluZChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBsb25nIHJlcV9pZCkKK3sKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXF1ZXN0OworCXVuc2lnbmVkIGludCBpZHg7CisKKwlpZHggPSB6ZmNwX3JlcWxpc3RfaGFzaChyZXFfaWQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxdWVzdCwgJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0sIGxpc3QpCisJCWlmIChyZXF1ZXN0LT5yZXFfaWQgPT0gcmVxX2lkKQorCQkJcmV0dXJuIHJlcXVlc3Q7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCiAgKiAgZnVuY3Rpb25zIG5lZWRlZCBmb3IgcmVmZXJlbmNlL3VzYWdlIGNvdW50aW5nCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggYzFmMmQ0Yi4uYWVmNjZiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX3JlcXVlc3RfdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgZGF0YTsKLQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKKwl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCk7CiB9CiAKIHZvaWQgemZjcF9mc2Zfc3RhcnRfdGltZXIoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQpAQCAtMzQyLDkgKzM0Miw5IEBACiAJYWRpc2MtPnd3cG4gPSBmY19ob3N0X3BvcnRfbmFtZShhZGFwdGVyLT5zY3NpX2hvc3QpOwogCWFkaXNjLT53d25uID0gZmNfaG9zdF9ub2RlX25hbWUoYWRhcHRlci0+c2NzaV9ob3N0KTsKIAlhZGlzYy0+bnBvcnRfaWQgPSBmY19ob3N0X3BvcnRfaWQoYWRhcHRlci0+c2NzaV9ob3N0KTsKLQlaRkNQX0xPR19JTkZPKCJBRElTQyByZXF1ZXN0IGZyb20gc19pZCAweCUwOHggdG8gZF9pZCAweCUwOHggIgorCVpGQ1BfTE9HX0lORk8oIkFESVNDIHJlcXVlc3QgZnJvbSBzX2lkIDB4JTA2eCB0byBkX2lkIDB4JTA2eCAiCiAJCSAgICAgICIod3dwbj0weCUwMTZMeCwgd3dubj0weCUwMTZMeCwgIgotCQkgICAgICAiaGFyZF9ucG9ydF9pZD0weCUwOHgsIG5wb3J0X2lkPTB4JTA4eClcbiIsCisJCSAgICAgICJoYXJkX25wb3J0X2lkPTB4JTA2eCwgbnBvcnRfaWQ9MHglMDZ4KVxuIiwKIAkJICAgICAgYWRpc2MtPm5wb3J0X2lkLCBzZW5kX2Vscy0+ZF9pZCwgKHd3bl90KSBhZGlzYy0+d3dwbiwKIAkJICAgICAgKHd3bl90KSBhZGlzYy0+d3dubiwgYWRpc2MtPmhhcmRfbnBvcnRfaWQsCiAJCSAgICAgIGFkaXNjLT5ucG9ydF9pZCk7CkBAIC0zNTIsNyArMzUyLDcgQEAKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9zZW5kX2VscyhzZW5kX2Vscyk7CiAJaWYgKHJldHZhbCAhPSAwKSB7CiAJCVpGQ1BfTE9HX05PUk1BTCgiZXJyb3I6IGluaXRpYXRpb24gb2YgU2VuZCBFTFMgZmFpbGVkIGZvciBwb3J0ICIKLQkJCQkiMHglMDh4IG9uIGFkYXB0ZXIgJXNcbiIsIHNlbmRfZWxzLT5kX2lkLAorCQkJCSIweCUwNnggb24gYWRhcHRlciAlc1xuIiwgc2VuZF9lbHMtPmRfaWQsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJCWdvdG8gZnJlZW1lbTsKIAl9CkBAIC0zOTgsNyArMzk4LDcgQEAKIAlpZiAoc2VuZF9lbHMtPnN0YXR1cyAhPSAwKSB7CiAJCVpGQ1BfTE9HX05PUk1BTCgiRUxTIHJlcXVlc3QgcmVqZWN0ZWQvdGltZWQgb3V0LCAiCiAJCQkJImZvcmNlIHBoeXNpY2FsIHBvcnQgcmVvcGVuICIKLQkJCQkiKGFkYXB0ZXIgJXMsIHBvcnQgZF9pZD0weCUwOHgpXG4iLAorCQkJCSIoYWRhcHRlciAlcywgcG9ydCBkX2lkPTB4JTA2eClcbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwgZF9pZCk7CiAJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgImZvcmNyZW9wIik7CiAJCWlmICh6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCkpCkBAIC00MTEsOSArNDExLDkgQEAKIAogCWFkaXNjID0gemZjcF9zZ190b19hZGRyZXNzKHNlbmRfZWxzLT5yZXNwKTsKIAotCVpGQ1BfTE9HX0lORk8oIkFESVNDIHJlc3BvbnNlIGZyb20gZF9pZCAweCUwOHggdG8gc19pZCAiCi0JCSAgICAgICIweCUwOHggKHd3cG49MHglMDE2THgsIHd3bm49MHglMDE2THgsICIKLQkJICAgICAgImhhcmRfbnBvcnRfaWQ9MHglMDh4LCBucG9ydF9pZD0weCUwOHgpXG4iLAorCVpGQ1BfTE9HX0lORk8oIkFESVNDIHJlc3BvbnNlIGZyb20gZF9pZCAweCUwNnggdG8gc19pZCAiCisJCSAgICAgICIweCUwNnggKHd3cG49MHglMDE2THgsIHd3bm49MHglMDE2THgsICIKKwkJICAgICAgImhhcmRfbnBvcnRfaWQ9MHglMDZ4LCBucG9ydF9pZD0weCUwNngpXG4iLAogCQkgICAgICBkX2lkLCBmY19ob3N0X3BvcnRfaWQoYWRhcHRlci0+c2NzaV9ob3N0KSwKIAkJICAgICAgKHd3bl90KSBhZGlzYy0+d3dwbiwgKHd3bl90KSBhZGlzYy0+d3dubiwKIAkJICAgICAgYWRpc2MtPmhhcmRfbnBvcnRfaWQsIGFkaXNjLT5ucG9ydF9pZCk7CkBAIC04NDcsOCArODQ3LDcgQEAKIAlpZiAoZXJwX2FjdGlvbi0+ZnNmX3JlcSkgewogCQkvKiB0YWtlIGxvY2sgdG8gZW5zdXJlIHRoYXQgcmVxdWVzdCBpcyBub3QgZGVsZXRlZCBtZWFud2hpbGUgKi8KIAkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKLQkJaWYgKHpmY3BfcmVxbGlzdF9pc21lbWJlcihhZGFwdGVyLAotCQkJCQkgICAgZXJwX2FjdGlvbi0+ZnNmX3JlcS0+cmVxX2lkKSkgeworCQlpZiAoemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlciwgZXJwX2FjdGlvbi0+ZnNmX3JlcS0+cmVxX2lkKSkgewogCQkJLyogZnNmX3JlcSBzdGlsbCBleGlzdHMgKi8KIAkJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgImFfY2FfcmVxIik7CiAJCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAmZXJwX2FjdGlvbi0+ZnNmX3JlcSwKQEAgLTEzNzcsNyArMTM3Niw3IEBACiAKIAlpZiAoYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19QT1JUX1dLQSwgJnBvcnQtPnN0YXR1cykpCiAJCVpGQ1BfTE9HX05PUk1BTCgicG9ydCBlcnAgZmFpbGVkIChhZGFwdGVyICVzLCAiCi0JCQkJInBvcnQgZF9pZD0weCUwOHgpXG4iLAorCQkJCSJwb3J0IGRfaWQ9MHglMDZ4KVxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9wb3J0KHBvcnQpLCBwb3J0LT5kX2lkKTsKIAllbHNlCiAJCVpGQ1BfTE9HX05PUk1BTCgicG9ydCBlcnAgZmFpbGVkIChhZGFwdGVyICVzLCB3d3BuPTB4JTAxNkx4KVxuIiwKQEAgLTE1OTEsNiArMTU5MCw2MiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0cnVjdCB6ZmNwX2VycF9hZGRfd29yayB7CisJc3RydWN0IHpmY3BfdW5pdCAgKnVuaXQ7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cit9OworCisvKioKKyAqIHpmY3BfZXJwX3Njc2lfc2NhbgorICogQGRhdGE6IHBvaW50ZXIgdG8gYSBzdHJ1Y3QgemZjcF9lcnBfYWRkX3dvcmsKKyAqCisgKiBSZWdpc3RlcnMgYSBsb2dpY2FsIHVuaXQgd2l0aCB0aGUgU0NTSSBzdGFjay4KKyAqLworc3RhdGljIHZvaWQgemZjcF9lcnBfc2NzaV9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgemZjcF9lcnBfYWRkX3dvcmsgKnAgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHpmY3BfZXJwX2FkZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gcC0+dW5pdDsKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gdW5pdC0+cG9ydC0+cnBvcnQ7CisJc2NzaV9zY2FuX3RhcmdldCgmcnBvcnQtPmRldiwgMCwgcnBvcnQtPnNjc2lfdGFyZ2V0X2lkLAorCQkJIHVuaXQtPnNjc2lfbHVuLCAwKTsKKwlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19VTklUX1NDU0lfV09SS19QRU5ESU5HLCAmdW5pdC0+c3RhdHVzKTsKKwl3YWtlX3VwKCZ1bml0LT5zY3NpX3NjYW5fd3EpOworCXpmY3BfdW5pdF9wdXQodW5pdCk7CisJa2ZyZWUocCk7Cit9CisKKy8qKgorICogemZjcF9lcnBfc2NoZWR1bGVfd29yaworICogQHVuaXQ6IHBvaW50ZXIgdG8gdW5pdCB3aGljaCBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIFNDU0kgc3RhY2sKKyAqCisgKiBTY2hlZHVsZXMgd29yayB3aGljaCByZWdpc3RlcnMgYSB1bml0IHdpdGggdGhlIFNDU0kgc3RhY2sKKyAqLworc3RhdGljIHZvaWQKK3pmY3BfZXJwX3NjaGVkdWxlX3dvcmsoc3RydWN0IHpmY3BfdW5pdCAqdW5pdCkKK3sKKwlzdHJ1Y3QgemZjcF9lcnBfYWRkX3dvcmsgKnA7CisKKwlwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXApIHsKKwkJWkZDUF9MT0dfTk9STUFMKCJlcnJvcjogT3V0IG9mIHJlc291cmNlcy4gQ291bGQgbm90IHJlZ2lzdGVyICIKKwkJCQkidGhlIEZDUC1MVU4gMHglTHggY29ubmVjdGVkIHRvICIKKwkJCQkidGhlIHBvcnQgd2l0aCBXV1BOIDB4JUx4IGNvbm5lY3RlZCB0byAiCisJCQkJInRoZSBhZGFwdGVyICVzIHdpdGggdGhlIFNDU0kgc3RhY2suXG4iLAorCQkJCXVuaXQtPmZjcF9sdW4sCisJCQkJdW5pdC0+cG9ydC0+d3dwbiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV91bml0KHVuaXQpKTsKKwkJcmV0dXJuOworCX0KKworCXpmY3BfdW5pdF9nZXQodW5pdCk7CisJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOworCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19VTklUX1NDU0lfV09SS19QRU5ESU5HLCAmdW5pdC0+c3RhdHVzKTsKKwlJTklUX1dPUksoJnAtPndvcmssIHpmY3BfZXJwX3Njc2lfc2Nhbik7CisJcC0+dW5pdCA9IHVuaXQ7CisJc2NoZWR1bGVfd29yaygmcC0+d29yayk7Cit9CisKIC8qCiAgKiBmdW5jdGlvbjoJCiAgKgpAQCAtMjQwMSw3ICsyNDU2LDcgQEAKIAkJCQlyZXR2YWwgPSBaRkNQX0VSUF9GQUlMRUQ7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlaRkNQX0xPR19ERUJVRygicG9ydCAweCUwMTZMeCBoYXMgZF9pZD0weCUwOHggLT4gIgorCQkJWkZDUF9MT0dfREVCVUcoInBvcnQgMHglMDE2THggaGFzIGRfaWQ9MHglMDZ4IC0+ICIKIAkJCQkgICAgICAgInRyeWluZyBvcGVuXG4iLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkKTsKIAkJCXJldHZhbCA9IHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfb3Blbl9wb3J0KGVycF9hY3Rpb24pOwogCQl9CkBAIC0yNDQxLDcgKzI0OTYsNyBAQAogCWNhc2UgWkZDUF9FUlBfU1RFUF9VTklOSVRJQUxJWkVEOgogCWNhc2UgWkZDUF9FUlBfU1RFUF9QSFlTX1BPUlRfQ0xPU0lORzoKIAljYXNlIFpGQ1BfRVJQX1NURVBfUE9SVF9DTE9TSU5HOgotCQlaRkNQX0xPR19ERUJVRygicG9ydCAweCUwMTZMeCBoYXMgZF9pZD0weCUwOHggLT4gdHJ5aW5nIG9wZW5cbiIsCisJCVpGQ1BfTE9HX0RFQlVHKCJwb3J0IDB4JTAxNkx4IGhhcyBkX2lkPTB4JTA2eCAtPiB0cnlpbmcgb3BlblxuIiwKIAkJCSAgICAgICBwb3J0LT53d3BuLCBwb3J0LT5kX2lkKTsKIAkJcmV0dmFsID0gemZjcF9lcnBfcG9ydF9zdHJhdGVneV9vcGVuX3BvcnQoZXJwX2FjdGlvbik7CiAJCWJyZWFrOwpAQCAtMzA5Miw5ICszMTQ3LDkgQEAKIAkJICAgICYmIHBvcnQtPnJwb3J0KSB7CiAJCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfVU5JVF9SRUdJU1RFUkVELAogCQkJCQkmdW5pdC0+c3RhdHVzKTsKLSAJCQlzY3NpX3NjYW5fdGFyZ2V0KCZwb3J0LT5ycG9ydC0+ZGV2LCAwLAotCQkJCQkgcG9ydC0+cnBvcnQtPnNjc2lfdGFyZ2V0X2lkLAotCQkJCQkgdW5pdC0+c2NzaV9sdW4sIDApOworCQkJaWYgKGF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfVU5JVF9TQ1NJX1dPUktfUEVORElORywKKwkJCQkJICAgICAmdW5pdC0+c3RhdHVzKSA9PSAwKQorCQkJCXpmY3BfZXJwX3NjaGVkdWxlX3dvcmsodW5pdCk7CiAJCX0KIAkJemZjcF91bml0X3B1dCh1bml0KTsKIAkJYnJlYWs7CkBAIC0zMTIxLDcgKzMxNzYsNyBAQAogCQkJCQkJemZjcF9nZXRfYnVzaWRfYnlfcG9ydChwb3J0KSwKIAkJCQkJCXBvcnQtPnd3cG4pOwogCQkJZWxzZSB7Ci0JCQkJc2NzaV9mbHVzaF93b3JrKGFkYXB0ZXItPnNjc2lfaG9zdCk7CisJCQkJc2NzaV90YXJnZXRfdW5ibG9jaygmcG9ydC0+cnBvcnQtPmRldik7CiAJCQkJcG9ydC0+cnBvcnQtPm1heGZyYW1lX3NpemUgPSBwb3J0LT5tYXhmcmFtZV9zaXplOwogCQkJCXBvcnQtPnJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9CiAJCQkJCXBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggMDEzODZhYy4uOTkxZDQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC0xODQsMTAgKzE4NCw2IEBACiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gdm9pZCB6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0KGNvbnN0IGNoYXIgKiwgdTgsIHN0cnVjdCB6ZmNwX3VuaXQgKiwKIAkJCQkJIHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3JlcWxpc3RfYWRkKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcmVxbGlzdF9yZW1vdmUoc3RydWN0IHpmY3BfYWRhcHRlciAqLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiBzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX3JlcWxpc3RfaXNtZW1iZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqLAotCQkJCQkJICB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiBpbnQgemZjcF9yZXFsaXN0X2lzZW1wdHkoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIAogI2VuZGlmCS8qIFpGQ1BfRVhUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IDRjMGE1OWEuLjBlYjMxZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtMTU2LDQ0ICsxNTYsMzAgQEAKIAlrZnJlZShmc2ZfcmVxKTsKIH0KIAotLyoqCi0gKiB6ZmNwX2ZzZl9yZXFfZGlzbWlzcyAtIGRpc21pc3MgYSBzaW5nbGUgZnNmIHJlcXVlc3QKLSAqLwotc3RhdGljIHZvaWQgemZjcF9mc2ZfcmVxX2Rpc21pc3Moc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwKLQkJCQkgdW5zaWduZWQgaW50IGNvdW50ZXIpCi17Ci0JdTY0IGRiZ190bXBbMl07Ci0KLQlkYmdfdG1wWzBdID0gKHU2NCkgYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlcXNfYWN0aXZlKTsKLQlkYmdfdG1wWzFdID0gKHU2NCkgY291bnRlcjsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LCAodm9pZCAqKSBkYmdfdG1wLCAxNik7Ci0JbGlzdF9kZWwoJmZzZl9yZXEtPmxpc3QpOwotCWZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEOwotCXpmY3BfZnNmX3JlcV9jb21wbGV0ZShmc2ZfcmVxKTsKLX0KLQotLyoqCi0gKiB6ZmNwX2ZzZl9yZXFfZGlzbWlzc19hbGwgLSBkaXNtaXNzIGFsbCByZW1haW5pbmcgZnNmIHJlcXVlc3RzCisvKgorICogTmV2ZXIgZXZlciBjYWxsIHRoaXMgd2l0aG91dCBzaHV0dGluZyBkb3duIHRoZSBhZGFwdGVyIGZpcnN0LgorICogT3RoZXJ3aXNlIHRoZSBhZGFwdGVyIHdvdWxkIGNvbnRpbnVlIHVzaW5nIGFuZCBjb3JydXB0aW5nIHMzOTAgc3RvcmFnZS4KKyAqIEluY2x1ZGVkIEJVR19PTigpIGNhbGwgdG8gZW5zdXJlIHRoaXMgaXMgZG9uZS4KKyAqIEVSUCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgb25seSB1c2VyIG9mIHRoaXMgZnVuY3Rpb24uCiAgKi8KIHZvaWQgemZjcF9mc2ZfcmVxX2Rpc21pc3NfYWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxdWVzdCwgKnRtcDsKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLCAqdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJTElTVF9IRUFEKHJlbW92ZV9xdWV1ZSk7Ci0JdW5zaWduZWQgaW50IGksIGNvdW50ZXI7CisJdW5zaWduZWQgaW50IGk7CiAKKwlCVUdfT04oYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUCwgJmFkYXB0ZXItPnN0YXR1cykpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CiAJYXRvbWljX3NldCgmYWRhcHRlci0+cmVxc19hY3RpdmUsIDApOwotCWZvciAoaT0wOyBpPFJFUVVFU1RfTElTVF9TSVpFOyBpKyspCisJZm9yIChpID0gMDsgaSA8IFJFUVVFU1RfTElTVF9TSVpFOyBpKyspCiAJCWxpc3Rfc3BsaWNlX2luaXQoJmFkYXB0ZXItPnJlcV9saXN0W2ldLCAmcmVtb3ZlX3F1ZXVlKTsKLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKIAotCWNvdW50ZXIgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXF1ZXN0LCB0bXAsICZyZW1vdmVfcXVldWUsIGxpc3QpIHsKLQkJemZjcF9mc2ZfcmVxX2Rpc21pc3MoYWRhcHRlciwgcmVxdWVzdCwgY291bnRlcik7Ci0JCWNvdW50ZXIrKzsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnNmX3JlcSwgdG1wLCAmcmVtb3ZlX3F1ZXVlLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZmc2ZfcmVxLT5saXN0KTsKKwkJZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQ7CisJCXpmY3BfZnNmX3JlcV9jb21wbGV0ZShmc2ZfcmVxKTsKIAl9CiB9CiAKQEAgLTgyOCw3ICs4MTQsNyBAQAogCiAJaWYgKCFwb3J0IHx8IChwb3J0LT5kX2lkICE9IChzdGF0dXNfYnVmZmVyLT5kX2lkICYgWkZDUF9ESURfTUFTSykpKSB7CiAJCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBSZW9wZW4gcG9ydCBpbmRpY2F0aW9uIHJlY2VpdmVkIGZvciIKLQkJCQkibm9uZXhpc3RpbmcgcG9ydCB3aXRoIGRfaWQgMHglMDh4IG9uICIKKwkJCQkibm9uZXhpc3RpbmcgcG9ydCB3aXRoIGRfaWQgMHglMDZ4IG9uICIKIAkJCQkiYWRhcHRlciAlcy4gSWdub3JlZC5cbiIsCiAJCQkJc3RhdHVzX2J1ZmZlci0+ZF9pZCAmIFpGQ1BfRElEX01BU0ssCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CkBAIC04NTMsNyArODM5LDcgQEAKIAkJCQkmc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3N1YnR5cGUsIHNpemVvZiAodTMyKSk7CiAJCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBVbmRlZmluZWQgc3RhdHVzIHN1YnR5cGUgcmVjZWl2ZWQgIgogCQkJCSJmb3IgYSByZW9wZW4gaW5kaWNhdGlvbiBvbiBwb3J0IHdpdGggIgotCQkJCSJkX2lkIDB4JTA4eCBvbiB0aGUgYWRhcHRlciAlcy4gIgorCQkJCSJkX2lkIDB4JTA2eCBvbiB0aGUgYWRhcHRlciAlcy4gIgogCQkJCSJJZ25vcmVkLiAoZGVidWcgaW5mbyAweCV4KVxuIiwKIAkJCQlzdGF0dXNfYnVmZmVyLT5kX2lkLAogCQkJCXpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksCkBAIC0xMTU2LDcgKzExNDIsNyBAQAogCX0KIAogCVpGQ1BfTE9HX0RFQlVHKCJBYm9ydCBGQ1AgQ29tbWFuZCByZXF1ZXN0IGluaXRpYXRlZCAiCi0JCSAgICAgICAiKGFkYXB0ZXIlcywgcG9ydCBkX2lkPTB4JTA4eCwgIgorCQkgICAgICAgIihhZGFwdGVyJXMsIHBvcnQgZF9pZD0weCUwNngsICIKIAkJICAgICAgICJ1bml0IHglMDE2THgsIG9sZF9yZXFfaWQ9MHglbHgpXG4iLAogCQkgICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKIAkJICAgICAgIHVuaXQtPnBvcnQtPmRfaWQsCkBAIC0xNTU0LDcgKzE1NDAsNyBAQAogCiAJY2FzZSBGU0ZfQUNDRVNTX0RFTklFRDoKIAkJWkZDUF9MT0dfTk9STUFMKCJhY2Nlc3MgZGVuaWVkLCBjYW5ub3Qgc2VuZCBnZW5lcmljIHNlcnZpY2UgIgotCQkJCSJjb21tYW5kIChhZGFwdGVyICVzLCBwb3J0IGRfaWQ9MHglMDh4KVxuIiwKKwkJCQkiY29tbWFuZCAoYWRhcHRlciAlcywgcG9ydCBkX2lkPTB4JTA2eClcbiIsCiAJCQkJemZjcF9nZXRfYnVzaWRfYnlfcG9ydChwb3J0KSwgcG9ydC0+ZF9pZCk7CiAJCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCAyOyBjb3VudGVyKyspIHsKIAkJCXN1YnRhYmxlID0gaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwuaGFsZndvcmRbY291bnRlciAqIDJdOwpAQCAtMTU3Niw3ICsxNTYyLDcgQEAKIAogICAgICAgICBjYXNlIEZTRl9HRU5FUklDX0NPTU1BTkRfUkVKRUNURUQ6CiAJCVpGQ1BfTE9HX0lORk8oImdlbmVyaWMgc2VydmljZSBjb21tYW5kIHJlamVjdGVkICIKLQkJCSAgICAgICIoYWRhcHRlciAlcywgcG9ydCBkX2lkPTB4JTA4eClcbiIsCisJCQkgICAgICAiKGFkYXB0ZXIgJXMsIHBvcnQgZF9pZD0weCUwNngpXG4iLAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfcG9ydChwb3J0KSwgcG9ydC0+ZF9pZCk7CiAJCVpGQ1BfTE9HX0lORk8oInN0YXR1cyBxdWFsaWZpZXI6XG4iKTsKIAkJWkZDUF9IRVhfRFVNUChaRkNQX0xPR19MRVZFTF9JTkZPLApAQCAtMTYwMiw3ICsxNTg4LDcgQEAKIAogICAgICAgICBjYXNlIEZTRl9QT1JUX0JPWEVEOgogCQlaRkNQX0xPR19JTkZPKCJwb3J0IG5lZWRzIHRvIGJlIHJlb3BlbmVkICIKLQkJCSAgICAgICIoYWRhcHRlciAlcywgcG9ydCBkX2lkPTB4JTA4eClcbiIsCisJCQkgICAgICAiKGFkYXB0ZXIgJXMsIHBvcnQgZF9pZD0weCUwNngpXG4iLAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfcG9ydChwb3J0KSwgcG9ydC0+ZF9pZCk7CiAJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMiwgImZzZl9zX3Bib3hlZCIpOwogCQl6ZmNwX2VycF9wb3J0X2JveGVkKHBvcnQpOwpAQCAtMTY4Myw3ICsxNjY5LDcgQEAKIAkJCQkgIE5VTEwsICZsb2NrX2ZsYWdzLCAmZnNmX3JlcSk7CiAJaWYgKHJldCA8IDApIHsKICAgICAgICAgICAgICAgICBaRkNQX0xPR19JTkZPKCJlcnJvcjogY3JlYXRpb24gb2YgRUxTIHJlcXVlc3QgZmFpbGVkICIKLQkJCSAgICAgICIoYWRhcHRlciAlcywgcG9ydCBkX2lkOiAweCUwOHgpXG4iLAorCQkJICAgICAgIihhZGFwdGVyICVzLCBwb3J0IGRfaWQ6IDB4JTA2eClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLCBkX2lkKTsKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9yZXE7CiAJfQpAQCAtMTcwOCw3ICsxNjk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpGQ1BfTUFYX1NCQUxTX1BFUl9FTFNfUkVRKTsKICAgICAgICAgICAgICAgICBpZiAoYnl0ZXMgPD0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgWkZDUF9MT0dfSU5GTygiZXJyb3I6IGNyZWF0aW9uIG9mIEVMUyByZXF1ZXN0IGZhaWxlZCAiCi0JCQkJICAgICAgIihhZGFwdGVyICVzLCBwb3J0IGRfaWQ6IDB4JTA4eClcbiIsCisJCQkJICAgICAgIihhZGFwdGVyICVzLCBwb3J0IGRfaWQ6IDB4JTA2eClcbiIsCiAJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwgZF9pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZXMgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRU5PTUVNOwpAQCAtMTcyNSw3ICsxNzExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpGQ1BfTUFYX1NCQUxTX1BFUl9FTFNfUkVRKTsKICAgICAgICAgICAgICAgICBpZiAoYnl0ZXMgPD0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgWkZDUF9MT0dfSU5GTygiZXJyb3I6IGNyZWF0aW9uIG9mIEVMUyByZXF1ZXN0IGZhaWxlZCAiCi0JCQkJICAgICAgIihhZGFwdGVyICVzLCBwb3J0IGRfaWQ6IDB4JTA4eClcbiIsCisJCQkJICAgICAgIihhZGFwdGVyICVzLCBwb3J0IGRfaWQ6IDB4JTA2eClcbiIsCiAJCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwgZF9pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZXMgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRU5PTUVNOwpAQCAtMTczOSw3ICsxNzI1LDcgQEAKICAgICAgICAgICAgICAgICAvKiByZWplY3QgcmVxdWVzdCAqLwogCQlaRkNQX0xPR19JTkZPKCJlcnJvcjogbWljcm9jb2RlIGRvZXMgbm90IHN1cHBvcnQgY2hhaW5lZCBTQkFMcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIEVMUyByZXF1ZXN0IHRvbyBiaWcgKGFkYXB0ZXIgJXMsICIKLQkJCSAgICAgICJwb3J0IGRfaWQ6IDB4JTA4eClcbiIsCisJCQkgICAgICAicG9ydCBkX2lkOiAweCUwNngpXG4iLAogCQkJICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwgZF9pZCk7CiAgICAgICAgICAgICAgICAgcmV0ID0gLUVPUE5PVFNVUFA7CiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfc2VuZDsKQEAgLTE3NjAsMTMgKzE3NDYsMTMgQEAKIAlyZXQgPSB6ZmNwX2ZzZl9yZXFfc2VuZChmc2ZfcmVxKTsKIAlpZiAocmV0KSB7CiAJCVpGQ1BfTE9HX0RFQlVHKCJlcnJvcjogaW5pdGlhdGlvbiBvZiBFTFMgcmVxdWVzdCBmYWlsZWQgIgotCQkJICAgICAgICIoYWRhcHRlciAlcywgcG9ydCBkX2lkOiAweCUwOHgpXG4iLAorCQkJICAgICAgICIoYWRhcHRlciAlcywgcG9ydCBkX2lkOiAweCUwNngpXG4iLAogCQkJICAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksIGRfaWQpOwogCQlnb3RvIGZhaWxlZF9zZW5kOwogCX0KIAogCVpGQ1BfTE9HX0RFQlVHKCJFTFMgcmVxdWVzdCBpbml0aWF0ZWQgKGFkYXB0ZXIgJXMsIHBvcnQgZF9pZDogIgotCQkgICAgICAgIjB4JTA4eClcbiIsIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksIGRfaWQpOworCQkgICAgICAgIjB4JTA2eClcbiIsIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksIGRfaWQpOwogCWdvdG8gb3V0OwogCiAgZmFpbGVkX3NlbmQ6CkBAIC0xODU5LDcgKzE4NDUsNyBAQAogCWNhc2UgRlNGX0VMU19DT01NQU5EX1JFSkVDVEVEOgogCQlaRkNQX0xPR19JTkZPKCJFTFMgaGFzIGJlZW4gcmVqZWN0ZWQgYmVjYXVzZSBjb21tYW5kIGZpbHRlciAiCiAJCQkgICAgICAicHJvaGliaXRlZCBzZW5kaW5nICIKLQkJCSAgICAgICIoYWRhcHRlcjogJXMsIHBvcnQgZF9pZDogMHglMDh4KVxuIiwKKwkJCSAgICAgICIoYWRhcHRlcjogJXMsIHBvcnQgZF9pZDogMHglMDZ4KVxuIiwKIAkJCSAgICAgIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlciksIGRfaWQpOwogCiAJCWJyZWFrOwpAQCAtMTkwNyw3ICsxODkzLDcgQEAKIAogCWNhc2UgRlNGX0FDQ0VTU19ERU5JRUQ6CiAJCVpGQ1BfTE9HX05PUk1BTCgiYWNjZXNzIGRlbmllZCwgY2Fubm90IHNlbmQgRUxTIGNvbW1hbmQgIgotCQkJCSIoYWRhcHRlciAlcywgcG9ydCBkX2lkPTB4JTA4eClcbiIsCisJCQkJIihhZGFwdGVyICVzLCBwb3J0IGRfaWQ9MHglMDZ4KVxuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLCBkX2lkKTsKIAkJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IDI7IGNvdW50ZXIrKykgewogCQkJc3VidGFibGUgPSBoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC5oYWxmd29yZFtjb3VudGVyICogMl07CkBAIC0yMDcwLDcgKzIwNTYsNyBAQAogCVpGQ1BfTE9HX05PUk1BTCgiVGhlIGFkYXB0ZXIgJXMgcmVwb3J0ZWQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJpc3RpY3M6XG4iCiAJCQkiV1dOTiAweCUwMTZMeCwgIgogCQkJIldXUE4gMHglMDE2THgsICIKLQkJCSJTX0lEIDB4JTA4eCxcbiIKKwkJCSJTX0lEIDB4JTA2eCxcbiIKIAkJCSJhZGFwdGVyIHZlcnNpb24gMHgleCwgIgogCQkJIkxJQyB2ZXJzaW9uIDB4JXgsICIKIAkJCSJGQyBsaW5rIHNwZWVkICVkIEdiL3NcbiIsCkBAIC0zMDQzLDYgKzMwMjksNyBAQAogCXF1ZXVlX2Rlc2lnbmF0b3IgPSAmaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwuZnNmX3F1ZXVlX2Rlc2lnbmF0b3I7CiAKIAlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0RFTklFRCB8CisJCQkgIFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfQk9YRUQgfAogCQkJICBaRkNQX1NUQVRVU19VTklUX1NIQVJFRCB8CiAJCQkgIFpGQ1BfU1RBVFVTX1VOSVRfUkVBRE9OTFksCiAJCQkgICZ1bml0LT5zdGF0dXMpOwpAQCAtNDY0NSwyMyArNDYzMiwyMiBAQAogCWZzZl9yZXEtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCWZzZl9yZXEtPmZzZl9jb21tYW5kID0gZnNmX2NtZDsKIAlJTklUX0xJU1RfSEVBRCgmZnNmX3JlcS0+bGlzdCk7Ci0JCi0JLyogdGhpcyBpcyBzZXJpYWxpemVkICh3ZSBhcmUgaG9sZGluZyByZXFfcXVldWUtbG9jayBvZiBhZGFwdGVyICovCi0JaWYgKGFkYXB0ZXItPnJlcV9ubyA9PSAwKQotCQlhZGFwdGVyLT5yZXFfbm8rKzsKLQlmc2ZfcmVxLT5yZXFfaWQgPSBhZGFwdGVyLT5yZXFfbm8rKzsKLQogCWluaXRfdGltZXIoJmZzZl9yZXEtPnRpbWVyKTsKLQl6ZmNwX2ZzZl9yZXFfcXRjYl9pbml0KGZzZl9yZXEpOwogCiAJLyogaW5pdGlhbGl6ZSB3YWl0cXVldWUgd2hpY2ggbWF5IGJlIHVzZWQgdG8gd2FpdCBvbiAKIAkgICB0aGlzIHJlcXVlc3QgY29tcGxldGlvbiAqLwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZzZl9yZXEtPmNvbXBsZXRpb25fd3EpOwogCiAgICAgICAgIHJldCA9IHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyLCByZXFfZmxhZ3MsIGxvY2tfZmxhZ3MpOwotICAgICAgICBpZihyZXQgPCAwKSB7CisgICAgICAgIGlmIChyZXQgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX3NiYWxzOwotCX0KKworCS8qIHRoaXMgaXMgc2VyaWFsaXplZCAod2UgYXJlIGhvbGRpbmcgcmVxX3F1ZXVlLWxvY2sgb2YgYWRhcHRlcikgKi8KKwlpZiAoYWRhcHRlci0+cmVxX25vID09IDApCisJCWFkYXB0ZXItPnJlcV9ubysrOworCWZzZl9yZXEtPnJlcV9pZCA9IGFkYXB0ZXItPnJlcV9ubysrOworCisJemZjcF9mc2ZfcmVxX3F0Y2JfaW5pdChmc2ZfcmVxKTsKIAogCS8qCiAJICogV2UgaG9sZCBxdWV1ZV9sb2NrIGhlcmUuIENoZWNrIGlmIFFESU9VUCBpcyBzZXQgYW5kIGxldCByZXF1ZXN0IGZhaWwKQEAgLTQ3ODgsNyArNDc3NCw3IEBACiAJCXJldHZhbCA9IC1FSU87CiAJCWRlbF90aW1lcigmZnNmX3JlcS0+dGltZXIpOwogCQlzcGluX2xvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwotCQl6ZmNwX3JlcWxpc3RfcmVtb3ZlKGFkYXB0ZXIsIGZzZl9yZXEtPnJlcV9pZCk7CisJCXpmY3BfcmVxbGlzdF9yZW1vdmUoYWRhcHRlciwgZnNmX3JlcSk7CiAJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKIAkJLyogdW5kbyBjaGFuZ2VzIGluIHJlcXVlc3QgcXVldWUgbWFkZSBmb3IgdGhpcyByZXF1ZXN0ICovCiAJCXpmY3BfcWRpb196ZXJvX3NiYWxzKHJlcV9xdWV1ZS0+YnVmZmVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCAxZTEyYTc4Li5iZGY1NzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAgICAgICAgICAgICAgICAgKiBTaW5jZSB3ZSBoYXZlIGJlZW4gdXNpbmcgdGhpcyBhZGFwdGVyLCBpdCBpcyBzYXZlIHRvIGFzc3VtZQogICAgICAgICAgICAgICAgICogdGhhdCBpdCBpcyBub3QgZmFpbGVkIGJ1dCByZWNvdmVyYWJsZS4gVGhlIGNhcmQgc2VlbXMgdG8KICAgICAgICAgICAgICAgICAqIHJlcG9ydCBsaW5rLXVwIGV2ZW50cyBieSBzZWxmLWluaXRpYXRlZCBxdWV1ZSBzaHV0ZG93bi4KLSAgICAgICAgICAgICAgICAqIFRoYXQgaXMgd2h5IHdlIG5lZWQgdG8gY2xlYXIgdGhlIHRoZSBsaW5rLWRvd24gZmxhZworICAgICAgICAgICAgICAgICogVGhhdCBpcyB3aHkgd2UgbmVlZCB0byBjbGVhciB0aGUgbGluay1kb3duIGZsYWcKICAgICAgICAgICAgICAgICAqIHdoaWNoIGlzIHNldCBhZ2FpbiBpbiBjYXNlIHdlIGhhdmUgbWlzc2VkIGJ5IGEgbWlsZS4KICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oCkBAIC0yODMsMTAgKzI4MywxMCBAQAogfQogCiAvKioKLSAqIHpmY3BfcWRpb19yZXFpZF9jaGVjayAtIGNoZWNrcyBmb3IgdmFsaWQgcmVxaWRzIG9yIHVuc29saWNpdGVkIHN0YXR1cworICogemZjcF9xZGlvX3JlcWlkX2NoZWNrIC0gY2hlY2tzIGZvciB2YWxpZCByZXFpZHMuCiAgKi8KLXN0YXRpYyBpbnQgemZjcF9xZGlvX3JlcWlkX2NoZWNrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIAotCQkJCSB1bnNpZ25lZCBsb25nIHJlcV9pZCkKK3N0YXRpYyB2b2lkIHpmY3BfcWRpb19yZXFpZF9jaGVjayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgdW5zaWduZWQgbG9uZyByZXFfaWQpCiB7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjk0LDIzICsyOTQsMjIgQEAKIAlkZWJ1Z19sb25nX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDQsIHJlcV9pZCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCWZzZl9yZXEgPSB6ZmNwX3JlcWxpc3RfaXNtZW1iZXIoYWRhcHRlciwgcmVxX2lkKTsKKwlmc2ZfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlciwgcmVxX2lkKTsKIAotCWlmICghZnNmX3JlcSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCVpGQ1BfTE9HX05PUk1BTCgiZXJyb3I6IHVua25vd24gcmVxdWVzdCBpZCAoJWxkKS5cbiIsIHJlcV9pZCk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDApOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaWYgKCFmc2ZfcmVxKQorCQkvKgorCQkgKiBVbmtub3duIHJlcXVlc3QgbWVhbnMgdGhhdCB3ZSBoYXZlIHBvdGVudGlhbGx5IG1lbW9yeQorCQkgKiBjb3JydXB0aW9uIGFuZCBtdXN0IHN0b3AgdGhlIG1hY2hpbmUgaW1tZWRpYXRseS4KKwkJICovCisJCXBhbmljKCJlcnJvcjogdW5rbm93biByZXF1ZXN0IGlkICglbGQpIG9uIGFkYXB0ZXIgJXMuXG4iLAorCQkgICAgICByZXFfaWQsIHpmY3BfZ2V0X2J1c2lkX2J5X2FkYXB0ZXIoYWRhcHRlcikpOwogCi0JemZjcF9yZXFsaXN0X3JlbW92ZShhZGFwdGVyLCByZXFfaWQpOworCXpmY3BfcmVxbGlzdF9yZW1vdmUoYWRhcHRlciwgZnNmX3JlcSk7CiAJYXRvbWljX2RlYygmYWRhcHRlci0+cmVxc19hY3RpdmUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKIAogCS8qIGZpbmlzaCB0aGUgRlNGIHJlcXVlc3QgKi8KIAl6ZmNwX2ZzZl9yZXFfY29tcGxldGUoZnNmX3JlcSk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTM3NCwyNyArMzczLDkgQEAKIAogCQkJLyogbG9vayBmb3IgUURJTyByZXF1ZXN0IGlkZW50aWZpZXJzIGluIFNCICovCiAJCQlidWZmZXJlID0gJmJ1ZmZlci0+ZWxlbWVudFtidWZmZXJlX2luZGV4XTsKLQkJCXJldHZhbCA9IHpmY3BfcWRpb19yZXFpZF9jaGVjayhhZGFwdGVyLAotCQkJCQkodW5zaWduZWQgbG9uZykgYnVmZmVyZS0+YWRkcik7CisJCQl6ZmNwX3FkaW9fcmVxaWRfY2hlY2soYWRhcHRlciwKKwkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIGJ1ZmZlcmUtPmFkZHIpOwogCi0JCQlpZiAocmV0dmFsKSB7Ci0JCQkJWkZDUF9MT0dfTk9STUFMKCJidWc6IHVuZXhwZWN0ZWQgaW5ib3VuZCAiCi0JCQkJCQkicGFja2V0IG9uIGFkYXB0ZXIgJXMgIgotCQkJCQkJIihyZXFpZD0weCVseCwgIgotCQkJCQkJImZpcnN0X2VsZW1lbnQ9JWQsICIKLQkJCQkJCSJlbGVtZW50c19wcm9jZXNzZWQ9JWQpXG4iLAotCQkJCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKLQkJCQkJCSh1bnNpZ25lZCBsb25nKSBidWZmZXJlLT5hZGRyLAotCQkJCQkJZmlyc3RfZWxlbWVudCwKLQkJCQkJCWVsZW1lbnRzX3Byb2Nlc3NlZCk7Ci0JCQkJWkZDUF9MT0dfTk9STUFMKCJoZXggZHVtcCBvZiBpbmJvdW5kIGJ1ZmZlciAiCi0JCQkJCQkiYXQgYWRkcmVzcyAlcCAiCi0JCQkJCQkiKGJ1ZmZlcl9pbmRleD0lZCwgIgotCQkJCQkJImJ1ZmZlcmVfaW5kZXg9JWQpXG4iLCBidWZmZXIsCi0JCQkJCQlidWZmZXJfaW5kZXgsIGJ1ZmZlcmVfaW5kZXgpOwotCQkJCVpGQ1BfSEVYX0RVTVAoWkZDUF9MT0dfTEVWRUxfTk9STUFMLAotCQkJCQkgICAgICAoY2hhciAqKSBidWZmZXIsIFNCQUxfU0laRSk7Ci0JCQl9CiAJCQkvKgogCQkJICogQSBzaW5nbGUgdXNlZCBTQkFMRSBwZXIgaW5ib3VuZCBTQkFMRSBoYXMgYmVlbgogCQkJICogaW1wbGVtZW50ZWQgYnkgUURJTyBzbyBmYXIuIEhvcGUgdGhleSB3aWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCmluZGV4IDk5ZGIwMjAuLjBhY2Y2ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIFpGQ1BfTE9HX0FSRUEJCQlaRkNQX0xPR19BUkVBX1NDU0kKIAogI2luY2x1ZGUgInpmY3BfZXh0LmgiCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBzdGF0aWMgdm9pZCB6ZmNwX3Njc2lfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCk7CiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCk7CkBAIC0xNzksNiArMTgwLDEwIEBACiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0ICopIHNkcG50LT5ob3N0ZGF0YTsKIAogCWlmICh1bml0KSB7CisJCXpmY3BfZXJwX3dhaXQodW5pdC0+cG9ydC0+YWRhcHRlcik7CisJCXdhaXRfZXZlbnQodW5pdC0+c2NzaV9zY2FuX3dxLAorCQkJICAgYXRvbWljX3Rlc3RfbWFzayhaRkNQX1NUQVRVU19VTklUX1NDU0lfV09SS19QRU5ESU5HLAorCQkJCQkgICAgJnVuaXQtPnN0YXR1cykgPT0gMCk7CiAJCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX1VOSVRfUkVHSVNURVJFRCwgJnVuaXQtPnN0YXR1cyk7CiAJCXNkcG50LT5ob3N0ZGF0YSA9IE5VTEw7CiAJCXVuaXQtPmRldmljZSA9IE5VTEw7CkBAIC00MDIsOCArNDA3LDggQEAKIAogCS8qIENoZWNrIHdoZXRoZXIgY29ycmVzcG9uZGluZyBmc2ZfcmVxIGlzIHN0aWxsIHBlbmRpbmcgKi8KIAlzcGluX2xvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwotCWZzZl9yZXEgPSB6ZmNwX3JlcWxpc3RfaXNtZW1iZXIoYWRhcHRlciwgKHVuc2lnbmVkIGxvbmcpCi0JCQkJCXNjcG50LT5ob3N0X3NjcmliYmxlKTsKKwlmc2ZfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlciwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNjcG50LT5ob3N0X3NjcmliYmxlKTsKIAlzcGluX3VubG9jaygmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7CiAJaWYgKCFmc2ZfcmVxKSB7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hYm9ydF9sb2NrLCBmbGFncyk7CkBAIC01NjQsNiArNTY5LDkgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAlzdGF0aWMgdW5zaWduZWQgaW50IHVuaXF1ZV9pZCA9IDA7CiAKKwlpZiAoYWRhcHRlci0+c2NzaV9ob3N0KQorCQlnb3RvIG91dDsKKwogCS8qIHJlZ2lzdGVyIGFkYXB0ZXIgYXMgU0NTSSBob3N0IHdpdGggbWlkIGxheWVyIG9mIFNDU0kgc3RhY2sgKi8KIAlhZGFwdGVyLT5zY3NpX2hvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJnpmY3BfZGF0YS5zY3NpX2hvc3RfdGVtcGxhdGUsCiAJCQkJCSAgICAgc2l6ZW9mIChzdHJ1Y3QgemZjcF9hZGFwdGVyICopKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19pMmMuYyBiL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19pMmMuYwppbmRleCA4NDEwNTg3Li4xNzgxNTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9iYmNfaTJjLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvYmJjX2kyYy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL2VidXMuaD4KICNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KICNpbmNsdWRlIDxhc20vYmJjLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJiYmNfaTJjLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2JwcC5jIGIvZHJpdmVycy9zYnVzL2NoYXIvYnBwLmMKaW5kZXggYTM5ZWU4MC4uNGZhYjBjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvYnBwLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvYnBwLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTE1Nyw3ICsxNTYsNyBAQAogI2RlZmluZSBCUFBfSUNSICAgICAgMHgxOAogI2RlZmluZSBCUFBfU0laRSAgICAgMHgxQQogCi0vKiBCUFBfQ1NSLiAgQml0cyBvZiB0eXBlIFJXMSBhcmUgY2xlYXJlZCB3aXRoIHdyaXR0aW5nICcxJy4gKi8KKy8qIEJQUF9DU1IuICBCaXRzIG9mIHR5cGUgUlcxIGFyZSBjbGVhcmVkIHdpdGggd3JpdGluZyAnMScuICovCiAjZGVmaW5lIFBfREVWX0lEX01BU0sgICAweGYwMDAwMDAwICAgICAgLyogUiAgICovCiAjZGVmaW5lIFBfREVWX0lEX1pFQlJBICAweDQwMDAwMDAwCiAjZGVmaW5lIFBfREVWX0lEX0w2NDg1NCAweGEwMDAwMDAwICAgICAgLyogICAgICA9PSBOQ1IgODlDMTAwKzg5QzEwNS4gUGl0eS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2Rpc3BsYXk3c2VnLmMgYi9kcml2ZXJzL3NidXMvY2hhci9kaXNwbGF5N3NlZy5jCmluZGV4IDJkMTRhMjkuLjMyNzlhMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2Rpc3BsYXk3c2VnLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvZGlzcGxheTdzZWcuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS9lYnVzLmg+CQkJLyogRUJ1cyBkZXZpY2UJCQkJCSovCiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CQkJLyogT3BlblByb20gTGlicmFyeSAJCQkqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CQkvKiBwdXRfL2dldF91c2VyCQkJKi8KKyNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9kaXNwbGF5N3NlZy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9lbnZjdHJsLmMgYi9kcml2ZXJzL3NidXMvY2hhci9lbnZjdHJsLmMKaW5kZXggZjJiZTJlYS4uODMyOGFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvZW52Y3RybC5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2VudmN0cmwuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9lYnVzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vZW52Y3RybC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjZGVmaW5lIEVOVkNUUkxfTUlOT1IJMTYyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2ZsYXNoLmMgYi9kcml2ZXJzL3NidXMvY2hhci9mbGFzaC5jCmluZGV4IDI2MmYwMWUuLjQ0ZTAzOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2ZsYXNoLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvZmxhc2guYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvcnRjLmMgYi9kcml2ZXJzL3NidXMvY2hhci9ydGMuYwppbmRleCA5NGQxODU4Li4xOGQxOGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9ydGMuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tb3N0ZWsuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci92ZmNfZGV2LmMgYi9kcml2ZXJzL3NidXMvY2hhci92ZmNfZGV2LmMKaW5kZXggYzMxMzVlMi4uNmFmYzdlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvdmZjX2Rldi5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL3ZmY19kZXYuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggZTYyZDIzZi4uNTcyMDM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTE3NTMsMTUgKzE3NTMsOSBAQAogCSAgVGhlIEVTUCB3YXMgYW4gb24tYm9hcmQgU0NTSSBjb250cm9sbGVyIHVzZWQgb24gU3VuIDMvODAKIAkgIG1hY2hpbmVzLiAgU2F5IFkgaGVyZSB0byBjb21waWxlIGluIHN1cHBvcnQgZm9yIGl0LgogCi1jb25maWcgU0NTSV9FU1BfQ09SRQotCXRyaXN0YXRlICJFU1AgU2NzaSBEcml2ZXIgQ29yZSIKLQlkZXBlbmRzIG9uIFNDU0kKLQlzZWxlY3QgU0NTSV9TUElfQVRUUlMKLQogY29uZmlnIFNDU0lfU1VORVNQCiAJdHJpc3RhdGUgIlNwYXJjIEVTUCBTY3NpIERyaXZlciIKIAlkZXBlbmRzIG9uIFNCVVMgJiYgU0NTSQotCXNlbGVjdCBTQ1NJX0VTUF9DT1JFCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgU3VuIEVTUCBTQ1NJIGhvc3QgYWRhcHRlci4gVGhlIEVTUAogCSAgY2hpcHNldCBpcyBwcmVzZW50IGluIG1vc3QgU1BBUkMgU0JVUy1iYXNlZCBjb21wdXRlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKaW5kZXggNTFlODg0Zi4uYjFiNjMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQpAQCAtMTA2LDggKzEwNiw3IEBACiBvYmotJChDT05GSUdfTUVHQVJBSURfTkVXR0VOKQkrPSBtZWdhcmFpZC8KIG9iai0kKENPTkZJR19NRUdBUkFJRF9TQVMpCSs9IG1lZ2FyYWlkLwogb2JqLSQoQ09ORklHX1NDU0lfQUNBUkQpCSs9IGF0cDg3MHUubwotb2JqLSQoQ09ORklHX1NDU0lfRVNQX0NPUkUpCSs9IGVzcF9zY3NpLm8KLW9iai0kKENPTkZJR19TQ1NJX1NVTkVTUCkJKz0gc3VuX2VzcC5vCitvYmotJChDT05GSUdfU0NTSV9TVU5FU1ApCSs9IGVzcF9zY3NpLm8Jc3VuX2VzcC5vCiBvYmotJChDT05GSUdfU0NTSV9HRFRIKQkJKz0gZ2R0aC5vCiBvYmotJChDT05GSUdfU0NTSV9JTklUSU8pCSs9IGluaXRpby5vCiBvYmotJChDT05GSUdfU0NTSV9JTklBMTAwKQkrPSBhMTAwdTJ3Lm8KQEAgLTEyMSw3ICsxMjAsNyBAQAogb2JqLSQoQ09ORklHX1NDU0lfM1dfOVhYWCkJKz0gM3ctOXh4eC5vCiBvYmotJChDT05GSUdfU0NTSV9QUEEpCQkrPSBwcGEubwogb2JqLSQoQ09ORklHX1NDU0lfSU1NKQkJKz0gaW1tLm8KLW9iai0kKENPTkZJR19KQVpaX0VTUCkJCSs9IE5DUjUzQzl4Lm8JamF6el9lc3Aubworb2JqLSQoQ09ORklHX0pBWlpfRVNQKQkJKz0gZXNwX3Njc2kubwlqYXp6X2VzcC5vCiBvYmotJChDT05GSUdfU1VOM1hfRVNQKQkJKz0gTkNSNTNDOXgubwlzdW4zeF9lc3Aubwogb2JqLSQoQ09ORklHX1NDU0lfRkNBTCkJCSs9IGZjYWwubwogb2JqLSQoQ09ORklHX1NDU0lfTEFTSTcwMCkJKz0gNTNjNzAwLm8gbGFzaTcwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL05DUjUzODAuYwppbmRleCBiYjNjYjMzLi44OGVhNWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKQEAgLTI2MjUsNyArMjYyNSw3IEBACiAjaWZkZWYgUkVBTF9ETUEKIHN0YXRpYyB2b2lkIE5DUjUzODBfZG1hX2NvbXBsZXRlKE5DUjUzODBfaW5zdGFuY2UgKiBpbnN0YW5jZSkgewogCU5DUjUzODBfbG9jYWxfZGVjbGFyZSgpOwotCXN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICpob3N0ZGF0YSA9IChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqIGluc3RhbmNlLT5ob3N0ZGF0YSk7CisJc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKmhvc3RkYXRhID0gKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopIGluc3RhbmNlLT5ob3N0ZGF0YTsKIAlpbnQgdHJhbnNmZXJyZWQ7CiAJTkNSNTM4MF9zZXR1cChpbnN0YW5jZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKaW5kZXggMWU4MmM2OS4uOGRjZmU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogc3RhdGljIGludCBub25kYXNkID0gLTE7CiBzdGF0aWMgaW50IGRhY21vZGUgPSAtMTsKIAotc3RhdGljIGludCBjb21taXQgPSAtMTsKK2ludCBhYWNfY29tbWl0ID0gLTE7CiBpbnQgc3RhcnR1cF90aW1lb3V0ID0gMTgwOwogaW50IGFpZl90aW1lb3V0ID0gMTIwOwogCkBAIC0xNTQsNyArMTU0LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0Mobm9uZGFzZCwgIkNvbnRyb2wgc2Nhbm5pbmcgb2YgaGJhIGZvciBub25kYXNkIGRldmljZXMuIDA9b2ZmLCAxPW9uIik7CiBtb2R1bGVfcGFyYW0oZGFjbW9kZSwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkYWNtb2RlLCAiQ29udHJvbCB3aGV0aGVyIGRtYSBhZGRyZXNzaW5nIGlzIHVzaW5nIDY0IGJpdCBEQUMuIDA9b2ZmLCAxPW9uIik7Ci1tb2R1bGVfcGFyYW0oY29tbWl0LCBpbnQsIFNfSVJVR098U19JV1VTUik7Cittb2R1bGVfcGFyYW1fbmFtZWQoY29tbWl0LCBhYWNfY29tbWl0LCBpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGNvbW1pdCwgIkNvbnRyb2wgd2hldGhlciBhIENPTU1JVF9DT05GSUcgaXMgaXNzdWVkIHRvIHRoZSBhZGFwdGVyIGZvciBmb3JlaWduIGFycmF5cy5cblRoaXMgaXMgdHlwaWNhbGx5IG5lZWRlZCBpbiBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgYSBCSU9TLiAwPW9mZiwgMT1vbiIpOwogbW9kdWxlX3BhcmFtKHN0YXJ0dXBfdGltZW91dCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhzdGFydHVwX3RpbWVvdXQsICJUaGUgZHVyYXRpb24gb2YgdGltZSBpbiBzZWNvbmRzIHRvIHdhaXQgZm9yIGFkYXB0ZXIgdG8gaGF2ZSBpdCdzIGtlcm5lbCB1cCBhbmRcbnJ1bm5pbmcuIFRoaXMgaXMgdHlwaWNhbGx5IGFkanVzdGVkIGZvciBsYXJnZSBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgYSBCSU9TLiIpOwpAQCAtMTczLDYgKzE3Myw5IEBACiBtb2R1bGVfcGFyYW0oZXhwb3NlX3BoeXNpY2FscywgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhleHBvc2VfcGh5c2ljYWxzLCAiRXhwb3NlIHBoeXNpY2FsIGNvbXBvbmVudHMgb2YgdGhlIGFycmF5cy4gLTE9cHJvdGVjdCAwPW9mZiwgMT1vbiIpOwogCitpbnQgYWFjX3Jlc2V0X2RldmljZXMgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKHJlc2V0X2RldmljZXMsIGFhY19yZXNldF9kZXZpY2VzLCBpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHJlc2V0X2RldmljZXMsICJGb3JjZSBhbiBhZGFwdGVyIHJlc2V0IGF0IGluaXRpYWxpemF0aW9uLiIpOwogCiBzdGF0aWMgaW5saW5lIGludCBhYWNfdmFsaWRfY29udGV4dChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpY21kLAogCQlzdHJ1Y3QgZmliICpmaWJwdHIpIHsKQEAgLTI0Niw3ICsyNDksNyBAQAogCWFhY19maWJfY29tcGxldGUoZmlicHRyKTsKIAkvKiBTZW5kIGEgQ1RfQ09NTUlUX0NPTkZJRyB0byBlbmFibGUgZGlzY292ZXJ5IG9mIGRldmljZXMgKi8KIAlpZiAoc3RhdHVzID49IDApIHsKLQkJaWYgKChjb21taXQgPT0gMSkgfHwgY29tbWl0X2ZsYWcpIHsKKwkJaWYgKChhYWNfY29tbWl0ID09IDEpIHx8IGNvbW1pdF9mbGFnKSB7CiAJCQlzdHJ1Y3QgYWFjX2NvbW1pdF9jb25maWcgKiBkaW5mbzsKIAkJCWFhY19maWJfaW5pdChmaWJwdHIpOwogCQkJZGluZm8gPSAoc3RydWN0IGFhY19jb21taXRfY29uZmlnICopIGZpYl9kYXRhKGZpYnB0cik7CkBAIC0yNjEsNyArMjY0LDcgQEAKIAkJCQkgICAgMSwgMSwKIAkJCQkgICAgTlVMTCwgTlVMTCk7CiAJCQlhYWNfZmliX2NvbXBsZXRlKGZpYnB0cik7Ci0JCX0gZWxzZSBpZiAoY29tbWl0ID09IDApIHsKKwkJfSBlbHNlIGlmIChhYWNfY29tbWl0ID09IDApIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgImFhY19nZXRfY29uZmlnX3N0YXR1czogRm9yZWlnbiBkZXZpY2UgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGlnbm9yZWRcbiIpOwogCQl9CkBAIC0zNDAsNyArMzQzLDcgQEAKIHN0YXRpYyB2b2lkIGFhY19pbnRlcm5hbF90cmFuc2ZlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpY21kLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXZvaWQgKmJ1ZjsKLQl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfbGVuOworCWludCB0cmFuc2Zlcl9sZW47CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IHNjc2ljbWQtPnJlcXVlc3RfYnVmZmVyOwogCiAJaWYgKHNjc2ljbWQtPnVzZV9zZykgewpAQCAtMzUxLDcgKzM1NCw3IEBACiAJCXRyYW5zZmVyX2xlbiA9IG1pbihzY3NpY21kLT5yZXF1ZXN0X2J1ZmZsZW4sIGxlbiArIG9mZnNldCk7CiAJfQogCXRyYW5zZmVyX2xlbiAtPSBvZmZzZXQ7Ci0JaWYgKGJ1ZiAmJiB0cmFuc2Zlcl9sZW4pCisJaWYgKGJ1ZiAmJiB0cmFuc2Zlcl9sZW4gPiAwKQogCQltZW1jcHkoYnVmICsgb2Zmc2V0LCBkYXRhLCB0cmFuc2Zlcl9sZW4pOwogCiAJaWYgKHNjc2ljbWQtPnVzZV9zZykgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmggYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmgKaW5kZXggNDVjYTNlOC4uYzgxZWRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaApAQCAtMTgyMyw5ICsxODIzLDEyIEBACiBpbnQgYWFjX3Byb2JlX2NvbnRhaW5lcihzdHJ1Y3QgYWFjX2RldiAqZGV2LCBpbnQgY2lkKTsKIGludCBfYWFjX3J4X2luaXQoc3RydWN0IGFhY19kZXYgKmRldik7CiBpbnQgYWFjX3J4X3NlbGVjdF9jb21tKHN0cnVjdCBhYWNfZGV2ICpkZXYsIGludCBjb21tKTsKK2ludCBhYWNfcnhfZGVsaXZlcl9wcm9kdWNlcihzdHJ1Y3QgZmliICogZmliKTsKIGV4dGVybiBpbnQgbnVtYWNiOwogZXh0ZXJuIGludCBhY2JzaXplOwogZXh0ZXJuIGNoYXIgYWFjX2RyaXZlcl92ZXJzaW9uW107CiBleHRlcm4gaW50IHN0YXJ0dXBfdGltZW91dDsKIGV4dGVybiBpbnQgYWlmX3RpbWVvdXQ7CiBleHRlcm4gaW50IGV4cG9zZV9waHlzaWNhbHM7CitleHRlcm4gaW50IGFhY19yZXNldF9kZXZpY2VzOworZXh0ZXJuIGludCBhYWNfY29tbWl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWluaXQuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1pbml0LmMKaW5kZXggMzM2ODJjZS4uMzAwOWFkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWluaXQuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21taW5pdC5jCkBAIC0zODcsMTIgKzM4NywxMSBAQAogCSAqCU9rIG5vdyBpbml0IHRoZSBjb21tdW5pY2F0aW9uIHN1YnN5c3RlbQogCSAqLwogCi0JZGV2LT5xdWV1ZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWFjX3F1ZXVlX2Jsb2NrKSwgR0ZQX0tFUk5FTCk7CisJZGV2LT5xdWV1ZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWFjX3F1ZXVlX2Jsb2NrKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldi0+cXVldWVzID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBjb3VsZCBub3QgYWxsb2NhdGUgY29tbSByZWdpb24uXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChkZXYtPnF1ZXVlcywgMCwgc2l6ZW9mKHN0cnVjdCBhYWNfcXVldWVfYmxvY2spKTsKIAogCWlmIChhYWNfY29tbV9pbml0KGRldik8MCl7CiAJCWtmcmVlKGRldi0+cXVldWVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYwppbmRleCA1ODI0YTc1Li45YWNhNTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jCkBAIC0xMjIzLDEzICsxMjIzLDExIEBACiAJCSAqIFdhcm5pbmc6IG5vIHNsZWVwIGFsbG93ZWQgd2hpbGUKIAkJICogaG9sZGluZyBzcGlubG9jawogCQkgKi8KLQkJaHdfZmliID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGh3X2ZpYiksIEdGUF9BVE9NSUMpOwotCQlmaWIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmliKSwgR0ZQX0FUT01JQyk7CisJCWh3X2ZpYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBod19maWIpLCBHRlBfQVRPTUlDKTsKKwkJZmliID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZpYiksIEdGUF9BVE9NSUMpOwogCQlpZiAoZmliICYmIGh3X2ZpYikgewogCQkJc3RydWN0IGFhY19haWZjbWQgKiBhaWY7CiAKLQkJCW1lbXNldChod19maWIsIDAsIHNpemVvZihzdHJ1Y3QgaHdfZmliKSk7Ci0JCQltZW1zZXQoZmliLCAwLCBzaXplb2Yoc3RydWN0IGZpYikpOwogCQkJZmliLT5od19maWJfdmEgPSBod19maWI7CiAJCQlmaWItPmRldiA9IGFhYzsKIAkJCWFhY19maWJfaW5pdChmaWIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvZHBjc3VwLmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9kcGNzdXAuYwppbmRleCA0MmM3ZGNkLi5mY2QyNWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9kcGNzdXAuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9kcGNzdXAuYwpAQCAtMjQ4LDE2ICsyNDgsMTQgQEAKIAkJICogbWFuYWdlIHRoZSBsaW5rZWQgbGlzdHMuCiAJCSAqLwogCQlpZiAoKCFkZXYtPmFpZl90aHJlYWQpCi0JCSB8fCAoIShmaWIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmliKSxHRlBfQVRPTUlDKSkpKQorCQkgfHwgKCEoZmliID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZpYiksR0ZQX0FUT01JQykpKSkKIAkJCXJldHVybiAxOwotCQlpZiAoIShod19maWIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaHdfZmliKSxHRlBfQVRPTUlDKSkpIHsKKwkJaWYgKCEoaHdfZmliID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGh3X2ZpYiksR0ZQX0FUT01JQykpKSB7CiAJCQlrZnJlZSAoZmliKTsKIAkJCXJldHVybiAxOwogCQl9Ci0JCW1lbXNldChod19maWIsIDAsIHNpemVvZihzdHJ1Y3QgaHdfZmliKSk7CiAJCW1lbWNweShod19maWIsIChzdHJ1Y3QgaHdfZmliICopKCgocHRyZGlmZl90KShkZXYtPnJlZ3Muc2EpKSArCiAJCSAgKGluZGV4ICYgfjB4MDAwMDAwMDJMKSksIHNpemVvZihzdHJ1Y3QgaHdfZmliKSk7Ci0JCW1lbXNldChmaWIsIDAsIHNpemVvZihzdHJ1Y3QgZmliKSk7CiAJCUlOSVRfTElTVF9IRUFEKCZmaWItPmZpYmxpbmspOwogCQlmaWItPnR5cGUgPSBGU0FGU19OVENfRklCX0NPTlRFWFQ7CiAJCWZpYi0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgZmliKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3J4LmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9yeC5jCmluZGV4IDBjNzEzMTUuLmFlOTc4YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3J4LmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvcnguYwpAQCAtMzc4LDcgKzM3OCw3IEBACiAgKgogICoJV2lsbCBzZW5kIGEgZmliLCByZXR1cm5pbmcgMCBpZiBzdWNjZXNzZnVsLgogICovCi1zdGF0aWMgaW50IGFhY19yeF9kZWxpdmVyX3Byb2R1Y2VyKHN0cnVjdCBmaWIgKiBmaWIpCitpbnQgYWFjX3J4X2RlbGl2ZXJfcHJvZHVjZXIoc3RydWN0IGZpYiAqIGZpYikKIHsKIAlzdHJ1Y3QgYWFjX2RldiAqZGV2ID0gZmliLT5kZXY7CiAJc3RydWN0IGFhY19xdWV1ZSAqcSA9ICZkZXYtPnF1ZXVlcy0+cXVldWVbQWRhcE5vcm1DbWRRdWV1ZV07CkBAIC00ODgsNiArNDg4LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHJ4X3JlYWRsKGRldiwgTVVuaXQuT01SeFswXSkgJiBLRVJORUxfUEFOSUMpCiAJCXJldHVybiAtRU5PREVWOworCWlmIChzdGFydHVwX3RpbWVvdXQgPCAzMDApCisJCXN0YXJ0dXBfdGltZW91dCA9IDMwMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTM5LDggKzU0MSwxMCBAQAogCX0KIAogCS8qIEZhaWx1cmUgdG8gcmVzZXQgaGVyZSBpcyBhbiBvcHRpb24gLi4uICovCisJZGV2LT5hX29wcy5hZGFwdGVyX3N5bmNfY21kID0gcnhfc3luY19jbWQ7CisJZGV2LT5hX29wcy5hZGFwdGVyX2VuYWJsZV9pbnQgPSBhYWNfcnhfZGlzYWJsZV9pbnRlcnJ1cHQ7CiAJZGV2LT5PSU1SID0gc3RhdHVzID0gcnhfcmVhZGIgKGRldiwgTVVuaXQuT0lNUik7Ci0JaWYgKCgoKHN0YXR1cyAmIDB4ZmYpICE9IDB4ZmYpIHx8IHJlc2V0X2RldmljZXMpICYmCisJaWYgKCgoKHN0YXR1cyAmIDB4MGMpICE9IDB4MGMpIHx8IGFhY19yZXNldF9kZXZpY2VzIHx8IHJlc2V0X2RldmljZXMpICYmCiAJICAhYWFjX3J4X3Jlc3RhcnRfYWRhcHRlcihkZXYsIDApKQogCQkrK3Jlc3RhcnQ7CiAJLyoKQEAgLTU5Miw2ICs1OTYsOCBAQAogCQl9CiAJCW1zbGVlcCgxKTsKIAl9CisJaWYgKHJlc3RhcnQpCisJCWFhY19jb21taXQgPSAxOwogCS8qCiAJICoJRmlsbCBpbiB0aGUgY29tbW9uIGZ1bmN0aW9uIGRpc3BhdGNoIHRhYmxlLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvc2EuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3NhLmMKaW5kZXggZjRiNWU5Ny4uODViOTFiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvc2EuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9zYS5jCkBAIC01LDcgKzUsNyBAQAogICogYmFzZWQgb24gdGhlIG9sZCBhYWNyYWlkIGRyaXZlciB0aGF0IGlzLi4KICAqIEFkYXB0ZWMgYWFjcmFpZCBkZXZpY2UgZHJpdmVyIGZvciBMaW51eC4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAgQWRhcHRlYywgSW5jLiAoYWFjcmFpZEBhZGFwdGVjLmNvbSkKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA3IEFkYXB0ZWMsIEluYy4gKGFhY3JhaWRAYWRhcHRlYy5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNTcsNiArMjU3LDExIEBACiAJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKIH0KIAorc3RhdGljIGludCBhYWNfc2FfcmVzdGFydF9hZGFwdGVyKHN0cnVjdCBhYWNfZGV2ICpkZXYsIGludCBibGVkKQoreworCXJldHVybiAtRUlOVkFMOworfQorCiAvKioKICAqCWFhY19zYV9jaGVja19oZWFsdGgKICAqCUBkZXY6IGRldmljZSB0byBjaGVjayBpZiBoZWFsdGh5CkBAIC0zNjYsNyArMzcxLDkgQEAKIAlkZXYtPmFfb3BzLmFkYXB0ZXJfbm90aWZ5ID0gYWFjX3NhX25vdGlmeV9hZGFwdGVyOwogCWRldi0+YV9vcHMuYWRhcHRlcl9zeW5jX2NtZCA9IHNhX3N5bmNfY21kOwogCWRldi0+YV9vcHMuYWRhcHRlcl9jaGVja19oZWFsdGggPSBhYWNfc2FfY2hlY2tfaGVhbHRoOworCWRldi0+YV9vcHMuYWRhcHRlcl9yZXN0YXJ0ID0gYWFjX3NhX3Jlc3RhcnRfYWRhcHRlcjsKIAlkZXYtPmFfb3BzLmFkYXB0ZXJfaW50ciA9IGFhY19zYV9pbnRyOworCWRldi0+YV9vcHMuYWRhcHRlcl9kZWxpdmVyID0gYWFjX3J4X2RlbGl2ZXJfcHJvZHVjZXI7CiAJZGV2LT5hX29wcy5hZGFwdGVyX2lvcmVtYXAgPSBhYWNfc2FfaW9yZW1hcDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCmluZGV4IDlkZGM2ZTQuLjA1ZjY5MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCkBAIC01MTgwLDcgKzUxODAsNyBAQAogCQkJY3VyX2x1biA9IGx1bjsKIAkJCW1heF9sdW4gPSBsdW47CiAJCX0KLQkJZm9yIChjdXJfbHVuIDw9IG1heF9sdW47IGN1cl9sdW4rKykgeworCQlmb3IgKDtjdXJfbHVuIDw9IG1heF9sdW47IGN1cl9sdW4rKykgewogCQkJc3RydWN0IGFoZF90bW9kZV9sc3RhdGUqIGxzdGF0ZTsKIAogCQkJbHN0YXRlID0gdHN0YXRlLT5lbmFibGVkX2x1bnNbY3VyX2x1bl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uaAppbmRleCA5MjE4ZjI5Li5hZDk3NjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmgKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wY2kuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcGNpLmMKaW5kZXggOGQ3MmJiYS4uMGJhZGEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3BjaS5jCkBAIC05NjYsNyArOTY2LDcgQEAKIAkJCSAgICAgIHwgIEFIRF9CVVNGUkVFUkVWX0JVRzsKIAkJYWhkLT5idWdzIHw9IEFIRF9MUU9PVkVSUlVOX0JVR3xBSERfRUFSTFlfUkVRX0JVRzsKIAotCQkvKiBJZiB0aGUgdXNlciByZXF1ZXN0ZWQgdGhlIHRoZSBTTE9XQ1JDIGJpdCB0byBiZSBzZXQuICovCisJCS8qIElmIHRoZSB1c2VyIHJlcXVlc3RlZCB0aGF0IHRoZSBTTE9XQ1JDIGJpdCB0byBiZSBzZXQuICovCiAJCWlmIChhaWM3OXh4X3Nsb3djcmMpCiAJCQlhaGQtPmZlYXR1cmVzIHw9IEFIRF9BSUM3OVhYQl9TTE9XQ1JDOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uaAppbmRleCA4NWFlNWQ4Li44ZmVlN2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmgKQEAgLTY0LDcgKzY0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9ncmFtLnkgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueQppbmRleCBjMzI4NTk2Li42MDY2OTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueQorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueQpAQCAtMTA2LDYgKzEwNiw3IEBACiBzdGF0aWMgdm9pZCBhZGRfY29uZGl0aW9uYWwoc3ltYm9sX3QgKnN5bWJvbCk7CiBzdGF0aWMgdm9pZCBhZGRfdmVyc2lvbihjb25zdCBjaGFyICp2ZXJzdHJpbmcpOwogc3RhdGljIGludCAgaXNfZG93bmxvYWRfY29uc3QoZXhwcmVzc2lvbl90ICppbW1lZCk7Cit2b2lkIHl5ZXJyb3IoY29uc3QgY2hhciAqc3RyaW5nKTsKIAogI2RlZmluZSBTUkFNX1NZTU5BTUUgIlNSQU1fQkFTRSIKICNkZWZpbmUgU0NCX1NZTU5BTUUgIlNDQl9CQVNFIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9tYWNyb19ncmFtLnkgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX21hY3JvX2dyYW0ueQppbmRleCA0MzlmNzYwLi5mZjQ2YWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX21hY3JvX2dyYW0ueQorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX21hY3JvX2dyYW0ueQpAQCAtNjUsNiArNjUsNyBAQAogc3RhdGljIHN5bWJvbF90ICptYWNyb19zeW1ib2w7CiAKIHN0YXRpYyB2b2lkIGFkZF9tYWNyb19hcmcoY29uc3QgY2hhciAqYXJndGV4dCwgaW50IHBvc2l0aW9uKTsKK3ZvaWQgbW1lcnJvcihjb25zdCBjaGFyICpzdHJpbmcpOwogCiAlfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L01ha2VmaWxlCmluZGV4IGU2YjcwMTIuLmU3OGNlMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogIwogIyBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCiAjCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGUgYWljOTR4eCBkcml2ZXIuCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBhaWM5NHh4IGRyaXZlci4KICMKICMgVGhlIGFpYzk0eHggZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF90bWYuYyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfdG1mLmMKaW5kZXggOWExNGE2ZC4uYzBkMGI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzk0eHgvYWljOTR4eF90bWYuYworKysgYi9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3RtZi5jCkBAIC0yOTAsNiArMjkwLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGFzZF9jbGVhcl9uZXh1cyhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2spCiB7CiAJaW50IHJlcyA9IFRNRl9SRVNQX0ZVTkNfRkFJTEVEOworCWludCBsZWZ0b3ZlcjsKIAlzdHJ1Y3QgYXNkX2FzY2IgKnRhc2NiID0gdGFzay0+bGxkZF90YXNrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI5OCwxMCArMjk5LDEyIEBACiAJCXJlcyA9IGFzZF9jbGVhcl9uZXh1c190YWcodGFzayk7CiAJZWxzZQogCQlyZXMgPSBhc2RfY2xlYXJfbmV4dXNfaW5kZXgodGFzayk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ0YXNjYi0+Y29tcGxldGlvbiwKLQkJCQkgICAgQUlDOTRYWF9TQ0JfVElNRU9VVCk7CisJbGVmdG92ZXIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnRhc2NiLT5jb21wbGV0aW9uLAorCQkJCQkgICAgICAgQUlDOTRYWF9TQ0JfVElNRU9VVCk7CiAJQVNEX0RQUklOVEsoImNhbWUgYmFjayBmcm9tIGNsZWFyIG5leHVzXG4iKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7CisJaWYgKGxlZnRvdmVyIDwgMSkKKwkJcmVzID0gVE1GX1JFU1BfRlVOQ19GQUlMRUQ7CiAJaWYgKHRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9ET05FKQogCQlyZXMgPSBUTUZfUkVTUF9GVU5DX0NPTVBMRVRFOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOwpAQCAtMzUwLDYgKzM1Myw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYXNkX2FzY2IgKmFzY2IgPSBOVUxMOwogCXN0cnVjdCBzY2IgKnNjYjsKKwlpbnQgbGVmdG92ZXI7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+dGFza19zdGF0ZV9sb2NrLCBmbGFncyk7CiAJaWYgKHRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9ET05FKSB7CkBAIC00NTUsOSArNDU5LDExIEBACiAJCWJyZWFrOwogCWNhc2UgVEZfVE1GX1RBU0tfRE9ORSArIDB4RkYwMDoJLyogZG9uZSBidXQgbm90IHJlcG9ydGVkIHlldCAqLwogCQlyZXMgPSBUTUZfUkVTUF9GVU5DX0ZBSUxFRDsKLQkJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ0YXNjYi0+Y29tcGxldGlvbiwKLQkJCQkJICAgIEFJQzk0WFhfU0NCX1RJTUVPVVQpOworCQlsZWZ0b3ZlciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmdGFzY2ItPmNvbXBsZXRpb24sCisJCQkJCQkgICAgICAgQUlDOTRYWF9TQ0JfVElNRU9VVCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKKwkJaWYgKGxlZnRvdmVyIDwgMSkKKwkJCXJlcyA9IFRNRl9SRVNQX0ZVTkNfRkFJTEVEOwogCQlpZiAodGFzay0+dGFza19zdGF0ZV9mbGFncyAmIFNBU19UQVNLX1NUQVRFX0RPTkUpCiAJCQlyZXMgPSBUTUZfUkVTUF9GVU5DX0NPTVBMRVRFOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vYXJ4ZXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9hcm0vYXJ4ZXNjc2kuYwppbmRleCA3ZTEzMmM1Li4yODM2ZmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2FyeGVzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9hcnhlc2NzaS5jCkBAIC0yODEsNyArMjgxLDYgQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCXN0cnVjdCBhcnhlc2NzaV9pbmZvICppbmZvOwotCXVuc2lnbmVkIGxvbmcgcmVzYmFzZSwgcmVzbGVuOwogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlpbnQgcmV0OwogCkBAIC0yODksOSArMjg4LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJlc2Jhc2UgPSBlY2FyZF9yZXNvdXJjZV9zdGFydChlYywgRUNBUkRfUkVTX01FTUMpOwotCXJlc2xlbiA9IGVjYXJkX3Jlc291cmNlX2xlbihlYywgRUNBUkRfUkVTX01FTUMpOwotCWJhc2UgPSBpb3JlbWFwKHJlc2Jhc2UsIHJlc2xlbik7CisJYmFzZSA9IGVjYXJkbV9pb21hcChlYywgRUNBUkRfUkVTX01FTUMsIDAsIDApOwogCWlmICghYmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9yZWdpb247CkBAIC0zMDAsNyArMjk3LDcgQEAKIAlob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZhcnhlc2NzaV90ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCBhcnhlc2NzaV9pbmZvKSk7CiAJaWYgKCFob3N0KSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3VubWFwOworCQlnb3RvIG91dF9yZWdpb247CiAJfQogCiAJaW5mbyA9IChzdHJ1Y3QgYXJ4ZXNjc2lfaW5mbyAqKWhvc3QtPmhvc3RkYXRhOwpAQCAtMzM3LDggKzMzNCw2IEBACiAJZmFzMjE2X3JlbGVhc2UoaG9zdCk7CiAgb3V0X3VucmVnaXN0ZXI6CiAJc2NzaV9ob3N0X3B1dChob3N0KTsKLSBvdXRfdW5tYXA6Ci0JaW91bm1hcChiYXNlKTsKICBvdXRfcmVnaW9uOgogCWVjYXJkX3JlbGVhc2VfcmVzb3VyY2VzKGVjKTsKICBvdXQ6CkBAIC0zNDgsMTMgKzM0MywxMCBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IGFyeGVzY3NpX3JlbW92ZShzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBlY2FyZF9nZXRfZHJ2ZGF0YShlYyk7Ci0Jc3RydWN0IGFyeGVzY3NpX2luZm8gKmluZm8gPSAoc3RydWN0IGFyeGVzY3NpX2luZm8gKilob3N0LT5ob3N0ZGF0YTsKIAogCWVjYXJkX3NldF9kcnZkYXRhKGVjLCBOVUxMKTsKIAlmYXMyMTZfcmVtb3ZlKGhvc3QpOwogCi0JaW91bm1hcChpbmZvLT5iYXNlKTsKLQogCWZhczIxNl9yZWxlYXNlKGhvc3QpOwogCXNjc2lfaG9zdF9wdXQoaG9zdCk7CiAJZWNhcmRfcmVsZWFzZV9yZXNvdXJjZXMoZWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jCmluZGV4IDgyYWRkNzcuLjY4YTY0MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMKQEAgLTQwMSw3ICs0MDEsNiBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IGN1bWFuYXNjc2kyX2luZm8gKmluZm87Ci0JdW5zaWduZWQgbG9uZyByZXNiYXNlLCByZXNsZW47CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCByZXQ7CiAKQEAgLTQwOSw5ICs0MDgsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JcmVzYmFzZSA9IGVjYXJkX3Jlc291cmNlX3N0YXJ0KGVjLCBFQ0FSRF9SRVNfTUVNQyk7Ci0JcmVzbGVuID0gZWNhcmRfcmVzb3VyY2VfbGVuKGVjLCBFQ0FSRF9SRVNfTUVNQyk7Ci0JYmFzZSA9IGlvcmVtYXAocmVzYmFzZSwgcmVzbGVuKTsKKwliYXNlID0gZWNhcmRtX2lvbWFwKGVjLCBFQ0FSRF9SRVNfTUVNQywgMCwgMCk7CiAJaWYgKCFiYXNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3JlZ2lvbjsKQEAgLTQyMSw3ICs0MTgsNyBAQAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY3VtYW5hc2NzaTJfaW5mbykpOwogCWlmICghaG9zdCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF91bm1hcDsKKwkJZ290byBvdXRfcmVnaW9uOwogCX0KIAogCWVjYXJkX3NldF9kcnZkYXRhKGVjLCBob3N0KTsKQEAgLTQ1MCw4ICs0NDcsOCBAQAogCiAJZWMtPmlycWFkZHIJPSBpbmZvLT5iYXNlICsgQ1VNQU5BU0NTSTJfU1RBVFVTOwogCWVjLT5pcnFtYXNrCT0gU1RBVFVTX0lOVDsKLQllYy0+aXJxX2RhdGEJPSBpbmZvOwotCWVjLT5vcHMJCT0gJmN1bWFuYXNjc2lfMl9vcHM7CisKKwllY2FyZF9zZXRpcnEoZWMsICZjdW1hbmFzY3NpXzJfb3BzLCBpbmZvKTsKIAogCXJldCA9IGZhczIxNl9pbml0KGhvc3QpOwogCWlmIChyZXQpCkBAIC00OTAsOSArNDg3LDYgQEAKICBvdXRfZnJlZToKIAlzY3NpX2hvc3RfcHV0KGhvc3QpOwogCi0gb3V0X3VubWFwOgotCWlvdW5tYXAoYmFzZSk7Ci0KICBvdXRfcmVnaW9uOgogCWVjYXJkX3JlbGVhc2VfcmVzb3VyY2VzKGVjKTsKIApAQCAtNTEyLDggKzUwNiw2IEBACiAJCWZyZWVfZG1hKGluZm8tPmluZm8uc2NzaS5kbWEpOwogCWZyZWVfaXJxKGVjLT5pcnEsIGluZm8pOwogCi0JaW91bm1hcChpbmZvLT5iYXNlKTsKLQogCWZhczIxNl9yZWxlYXNlKGhvc3QpOwogCXNjc2lfaG9zdF9wdXQoaG9zdCk7CiAJZWNhcmRfcmVsZWFzZV9yZXNvdXJjZXMoZWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jIGIvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jCmluZGV4IGVkMDZhOGMuLmJiMjQ3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMKQEAgLTUxOSw3ICs1MTksNiBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IGVlc294c2NzaV9pbmZvICppbmZvOwotCXVuc2lnbmVkIGxvbmcgcmVzYmFzZSwgcmVzbGVuOwogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlpbnQgcmV0OwogCkBAIC01MjcsOSArNTI2LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJlc2Jhc2UgPSBlY2FyZF9yZXNvdXJjZV9zdGFydChlYywgRUNBUkRfUkVTX0lPQ0ZBU1QpOwotCXJlc2xlbiA9IGVjYXJkX3Jlc291cmNlX2xlbihlYywgRUNBUkRfUkVTX0lPQ0ZBU1QpOwotCWJhc2UgPSBpb3JlbWFwKHJlc2Jhc2UsIHJlc2xlbik7CisJYmFzZSA9IGVjYXJkbV9pb21hcChlYywgRUNBUkRfUkVTX0lPQ0ZBU1QsIDAsIDApOwogCWlmICghYmFzZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9yZWdpb247CkBAIC01MzksNyArNTM2LDcgQEAKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IGVlc294c2NzaV9pbmZvKSk7CiAJaWYgKCFob3N0KSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3VubWFwOworCQlnb3RvIG91dF9yZWdpb247CiAJfQogCiAJZWNhcmRfc2V0X2RydmRhdGEoZWMsIGhvc3QpOwpAQCAtNTY5LDggKzU2Niw4IEBACiAKIAllYy0+aXJxYWRkcgk9IGJhc2UgKyBFRVNPWF9ETUFTVEFUOwogCWVjLT5pcnFtYXNrCT0gRUVTT1hfU1RBVF9JTlRSOwotCWVjLT5pcnFfZGF0YQk9IGluZm87Ci0JZWMtPm9wcwkJPSAmZWVzb3hzY3NpX29wczsKKworCWVjYXJkX3NldGlycShlYywgJmVlc294c2NzaV9vcHMsIGluZm8pOwogCiAJZGV2aWNlX2NyZWF0ZV9maWxlKCZlYy0+ZGV2LCAmZGV2X2F0dHJfYnVzX3Rlcm0pOwogCkBAIC02MTIsOSArNjA5LDYgQEAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmVjLT5kZXYsICZkZXZfYXR0cl9idXNfdGVybSk7CiAJc2NzaV9ob3N0X3B1dChob3N0KTsKIAotIG91dF91bm1hcDoKLQlpb3VubWFwKGJhc2UpOwotCiAgb3V0X3JlZ2lvbjoKIAllY2FyZF9yZWxlYXNlX3Jlc291cmNlcyhlYyk7CiAKQEAgLTYzNiw4ICs2MzAsNiBAQAogCiAJZGV2aWNlX3JlbW92ZV9maWxlKCZlYy0+ZGV2LCAmZGV2X2F0dHJfYnVzX3Rlcm0pOwogCi0JaW91bm1hcChpbmZvLT5iYXNlKTsKLQogCWZhczIxNl9yZWxlYXNlKGhvc3QpOwogCXNjc2lfaG9zdF9wdXQoaG9zdCk7CiAJZWNhcmRfcmVsZWFzZV9yZXNvdXJjZXMoZWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jIGIvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jCmluZGV4IDE1OTA0N2EuLmQ5YTU0NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMKQEAgLTMxMyw3ICszMTMsNiBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IHBvd2VydGVjX2luZm8gKmluZm87Ci0JdW5zaWduZWQgbG9uZyByZXNiYXNlLCByZXNsZW47CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCByZXQ7CiAKQEAgLTMyMSw5ICszMjAsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JcmVzYmFzZSA9IGVjYXJkX3Jlc291cmNlX3N0YXJ0KGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCk7Ci0JcmVzbGVuID0gZWNhcmRfcmVzb3VyY2VfbGVuKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCk7Ci0JYmFzZSA9IGlvcmVtYXAocmVzYmFzZSwgcmVzbGVuKTsKKwliYXNlID0gZWNhcmRtX2lvbWFwKGVjLCBFQ0FSRF9SRVNfSU9DRkFTVCwgMCwgMCk7CiAJaWYgKCFiYXNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3JlZ2lvbjsKQEAgLTMzMyw3ICszMzAsNyBAQAogCQkJICAgICAgIHNpemVvZiAoc3RydWN0IHBvd2VydGVjX2luZm8pKTsKIAlpZiAoIWhvc3QpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfdW5tYXA7CisJCWdvdG8gb3V0X3JlZ2lvbjsKIAl9CiAKIAllY2FyZF9zZXRfZHJ2ZGF0YShlYywgaG9zdCk7CkBAIC0zNjEsOCArMzU4LDggQEAKIAogCWVjLT5pcnFhZGRyCT0gYmFzZSArIFBPV0VSVEVDX0lOVFJfU1RBVFVTOwogCWVjLT5pcnFtYXNrCT0gUE9XRVJURUNfSU5UUl9CSVQ7Ci0JZWMtPmlycV9kYXRhCT0gaW5mbzsKLQllYy0+b3BzCQk9ICZwb3dlcnRlY3Njc2lfb3BzOworCisJZWNhcmRfc2V0aXJxKGVjLCAmcG93ZXJ0ZWNzY3NpX29wcywgaW5mbyk7CiAKIAlkZXZpY2VfY3JlYXRlX2ZpbGUoJmVjLT5kZXYsICZkZXZfYXR0cl9idXNfdGVybSk7CiAKQEAgLTQwNCw5ICs0MDEsNiBAQAogCWRldmljZV9yZW1vdmVfZmlsZSgmZWMtPmRldiwgJmRldl9hdHRyX2J1c190ZXJtKTsKIAlzY3NpX2hvc3RfcHV0KGhvc3QpOwogCi0gb3V0X3VubWFwOgotCWlvdW5tYXAoYmFzZSk7Ci0KICBvdXRfcmVnaW9uOgogCWVjYXJkX3JlbGVhc2VfcmVzb3VyY2VzKGVjKTsKIApAQCAtNDI4LDggKzQyMiw2IEBACiAJCWZyZWVfZG1hKGluZm8tPmluZm8uc2NzaS5kbWEpOwogCWZyZWVfaXJxKGVjLT5pcnEsIGluZm8pOwogCi0JaW91bm1hcChpbmZvLT5iYXNlKTsKLQogCWZhczIxNl9yZWxlYXNlKGhvc3QpOwogCXNjc2lfaG9zdF9wdXQoaG9zdCk7CiAJZWNhcmRfcmVsZWFzZV9yZXNvdXJjZXMoZWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NoLmMgYi9kcml2ZXJzL3Njc2kvY2guYwppbmRleCAyYTJjYzZjLi4yMzExMDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY2guYworKysgYi9kcml2ZXJzL3Njc2kvY2guYwpAQCAtMzE5LDEwICszMTksOSBAQAogCWludCAgICAgcmVzdWx0LGlkLGx1bixpOwogCXVfaW50ICAgZWxlbTsKIAotCWJ1ZmZlciA9IGttYWxsb2MoNTEyLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJYnVmZmVyID0ga3phbGxvYyg1MTIsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIWJ1ZmZlcikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGJ1ZmZlciwwLDUxMik7CiAJCiAJbWVtc2V0KGNtZCwwLHNpemVvZihjbWQpKTsKIAljbWRbMF0gPSBNT0RFX1NFTlNFOwpAQCAtNTMwLDEwICs1MjksOSBAQAogCXVfY2hhciAgKmJ1ZmZlcjsKIAlpbnQgcmVzdWx0OwogCi0JYnVmZmVyID0ga21hbGxvYyg1MTIsIEdGUF9LRVJORUwpOworCWJ1ZmZlciA9IGt6YWxsb2MoNTEyLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZmZlcikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGJ1ZmZlciwwLDUxMik7CiAKIAlkcHJpbnRrKCIlcyAlcyB2b2x0YWc6IDB4JXggPT4gXCIlc1wiXG4iLAogCQljbGVhciAgICAgPyAiY2xlYXIiICAgICA6ICJzZXQiLApAQCAtOTIyLDExICs5MjAsMTAgQEAKIAlpZiAoc2QtPnR5cGUgIT0gVFlQRV9NRURJVU1fQ0hBTkdFUikKIAkJcmV0dXJuIC1FTk9ERVY7CiAgICAgCi0JY2ggPSBrbWFsbG9jKHNpemVvZigqY2gpLCBHRlBfS0VSTkVMKTsKKwljaCA9IGt6YWxsb2Moc2l6ZW9mKCpjaCksIEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGNoKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChjaCwwLHNpemVvZigqY2gpKTsKIAljaC0+bWlub3IgPSBjaF9kZXZjb3VudDsKIAlzcHJpbnRmKGNoLT5uYW1lLCJjaCVkIixjaC0+bWlub3IpOwogCW11dGV4X2luaXQoJmNoLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kYzM5NXguYyBiL2RyaXZlcnMvc2NzaS9kYzM5NXguYwppbmRleCBhOTY1ZWQzLi41NjRlYTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKKysrIGIvZHJpdmVycy9zY3NpL2RjMzk1eC5jCkBAIC01NDEsNyArNTQxLDcgQEAKIAogCiAvKgotICogU2FmZSBzZXR0aW5ncy4gSWYgc2V0IHRvIHplcm8gdGhlIHRoZSBCSU9TL2RlZmF1bHQgdmFsdWVzIHdpdGgKKyAqIFNhZmUgc2V0dGluZ3MuIElmIHNldCB0byB6ZXJvIHRoZSBCSU9TL2RlZmF1bHQgdmFsdWVzIHdpdGgKICAqIGNvbW1hbmQgbGluZSBvdmVycmlkZXMgd2lsbCBiZSB1c2VkLiBJZiBzZXQgdG8gMSB0aGVuIHNhZmUgYW5kCiAgKiBzbG93IHNldHRpbmdzIHdpbGwgYmUgdXNlZC4KICAqLwpAQCAtNjE3LDcgKzYxNyw3IEBACiAKIC8qCiAgKiBNYXBwaW5nIGZyb20gdGhlIGVlcHJvbSBkZWxheSBpbmRleCB2YWx1ZSAoaW5kZXggaW50byB0aGlzIGFycmF5KQotICogdG8gdGhlIHRoZSBudW1iZXIgb2YgYWN0dWFsIHNlY29uZHMgdGhhdCB0aGUgZGVsYXkgc2hvdWxkIGJlIGZvci4KKyAqIHRvIHRoZSBudW1iZXIgb2YgYWN0dWFsIHNlY29uZHMgdGhhdCB0aGUgZGVsYXkgc2hvdWxkIGJlIGZvci4KICAqLwogc3RhdGljIGNoYXIgX19kZXZpbml0ZGF0YSBlZXByb21faW5kZXhfdG9fZGVsYXlfbWFwW10gPSAKIAl7IDEsIDMsIDUsIDEwLCAxNiwgMzAsIDYwLCAxMjAgfTsKQEAgLTQxMzYsNyArNDEzNiw3IEBACiAgKiBAaW9fcG9ydDoJYmFzZSBJL08gYWRkcmVzcwogICogQGFkZHI6CW9mZnNldCBpbnRvIFNFRVBST00KICAqCi0gKiBSZXR1cm5zIHRoZSB0aGUgYnl0ZSByZWFkLgorICogUmV0dXJucyB0aGUgYnl0ZSByZWFkLgogICoqLwogc3RhdGljIHU4IF9fZGV2aW5pdCB0cm1zMTA0MF9nZXRfZGF0YSh1bnNpZ25lZCBsb25nIGlvX3BvcnQsIHU4IGFkZHIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHB0X2kyby5jIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwppbmRleCBmN2I5ZGJkLi44YzdkMmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCisrKyBiL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KQEAgLTEzMDksMTMgKzEzMDgsMTIgQEAKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CiAJfSB3aGlsZSAobSA9PSBFTVBUWV9RVUVVRSk7CiAKLQlzdGF0dXMgPSBrbWFsbG9jKDQsIEdGUF9LRVJORUx8QUREUjMyKTsKKwlzdGF0dXMgPSBremFsbG9jKDQsIEdGUF9LRVJORUx8QUREUjMyKTsKIAlpZihzdGF0dXMgPT0gTlVMTCkgewogCQlhZHB0X3NlbmRfbm9wKHBIYmEsIG0pOwogCQlwcmludGsoS0VSTl9FUlIiSU9QIHJlc2V0IGZhaWxlZCAtIG5vIGZyZWUgbWVtb3J5LlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoc3RhdHVzLDAsNCk7CiAKIAltc2dbMF09RUlHSFRfV09SRF9NU0dfU0laRXxTR0xfT0ZGU0VUXzA7CiAJbXNnWzFdPUkyT19DTURfQURBUFRFUl9SRVNFVDw8MjR8SE9TVF9USUQ8PDEyfEFEQVBURVJfVElEOwpAQCAtMTUwNSwyMSArMTUwMywxOSBAQAogCQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJaWYoIHBIYmEtPmNoYW5uZWxbYnVzX25vXS5kZXZpY2Vbc2NzaV9pZF0gPT0gTlVMTCl7Ci0JCQkJCXBEZXYgPSAga21hbGxvYyhzaXplb2Yoc3RydWN0IGFkcHRfZGV2aWNlKSxHRlBfS0VSTkVMKTsKKwkJCQkJcERldiA9ICBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWRwdF9kZXZpY2UpLEdGUF9LRVJORUwpOwogCQkJCQlpZihwRGV2ID09IE5VTEwpIHsKIAkJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCQl9CiAJCQkJCXBIYmEtPmNoYW5uZWxbYnVzX25vXS5kZXZpY2Vbc2NzaV9pZF0gPSBwRGV2OwotCQkJCQltZW1zZXQocERldiwwLHNpemVvZihzdHJ1Y3QgYWRwdF9kZXZpY2UpKTsKIAkJCQl9IGVsc2UgewogCQkJCQlmb3IoIHBEZXYgPSBwSGJhLT5jaGFubmVsW2J1c19ub10uZGV2aWNlW3Njc2lfaWRdOwkKIAkJCQkJCQlwRGV2LT5uZXh0X2x1bjsgcERldiA9IHBEZXYtPm5leHRfbHVuKXsKIAkJCQkJfQotCQkJCQlwRGV2LT5uZXh0X2x1biA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHB0X2RldmljZSksR0ZQX0tFUk5FTCk7CisJCQkJCXBEZXYtPm5leHRfbHVuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkcHRfZGV2aWNlKSxHRlBfS0VSTkVMKTsKIAkJCQkJaWYocERldi0+bmV4dF9sdW4gPT0gTlVMTCkgewogCQkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJCX0KLQkJCQkJbWVtc2V0KHBEZXYtPm5leHRfbHVuLDAsc2l6ZW9mKHN0cnVjdCBhZHB0X2RldmljZSkpOwogCQkJCQlwRGV2ID0gcERldi0+bmV4dF9sdW47CiAJCQkJfQogCQkJCXBEZXYtPnRpZCA9IHRpZDsKQEAgLTE2NjgsMTIgKzE2NjQsMTEgQEAKIAkJcmVwbHlfc2l6ZSA9IFJFUExZX0ZSQU1FX1NJWkU7CiAJfQogCXJlcGx5X3NpemUgKj0gNDsKLQlyZXBseSA9IGttYWxsb2MoUkVQTFlfRlJBTUVfU0laRSo0LCBHRlBfS0VSTkVMKTsKKwlyZXBseSA9IGt6YWxsb2MoUkVQTFlfRlJBTUVfU0laRSo0LCBHRlBfS0VSTkVMKTsKIAlpZihyZXBseSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSByZXBseSBidWZmZXJcbiIscEhiYS0+bmFtZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQocmVwbHksMCxSRVBMWV9GUkFNRV9TSVpFKjQpOwogCXNnX29mZnNldCA9IChtc2dbMF0+PjQpJjB4ZjsKIAltc2dbMl0gPSAweDQwMDAwMDAwOyAvLyBJT0NUTCBjb250ZXh0CiAJbXNnWzNdID0gKHUzMilyZXBseTsKQEAgLTI0NDUsNyArMjQ0MCw3IEBACiAJCQkJfQogCQkJCXBEZXYgPSBwSGJhLT5jaGFubmVsW2J1c19ub10uZGV2aWNlW3Njc2lfaWRdOwkKIAkJCQlpZiggcERldiA9PSBOVUxMKXsKLQkJCQkJcERldiA9ICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRwdF9kZXZpY2UpLEdGUF9LRVJORUwpOworCQkJCQlwRGV2ID0gIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHB0X2RldmljZSksR0ZQX0tFUk5FTCk7CiAJCQkJCWlmKHBEZXYgPT0gTlVMTCkgewogCQkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJCX0KQEAgLTI0NTQsMTIgKzI0NDksMTEgQEAKIAkJCQkJd2hpbGUgKHBEZXYtPm5leHRfbHVuKSB7CiAJCQkJCQlwRGV2ID0gcERldi0+bmV4dF9sdW47CiAJCQkJCX0KLQkJCQkJcERldiA9IHBEZXYtPm5leHRfbHVuID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFkcHRfZGV2aWNlKSxHRlBfS0VSTkVMKTsKKwkJCQkJcERldiA9IHBEZXYtPm5leHRfbHVuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkcHRfZGV2aWNlKSxHRlBfS0VSTkVMKTsKIAkJCQkJaWYocERldiA9PSBOVUxMKSB7CiAJCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQkJfQogCQkJCX0KLQkJCQltZW1zZXQocERldiwwLHNpemVvZihzdHJ1Y3QgYWRwdF9kZXZpY2UpKTsKIAkJCQlwRGV2LT50aWQgPSBkLT5sY3RfZGF0YS50aWQ7CiAJCQkJcERldi0+c2NzaV9jaGFubmVsID0gYnVzX25vOwogCQkJCXBEZXYtPnNjc2lfaWQgPSBzY3NpX2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzdGd0LmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnN0Z3QuYwppbmRleCA2ZDIyM2RkLi44YmE3ZGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnN0Z3QuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnN0Z3QuYwpAQCAtODkyLDE2ICs4OTIsMTYgQEAKIAlpZiAoIXJvb3RkbikKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQltb2RlbCA9IGdldF9wcm9wZXJ0eShyb290ZG4sICJtb2RlbCIsIE5VTEwpOwotCWlkID0gZ2V0X3Byb3BlcnR5KHJvb3RkbiwgInN5c3RlbS1pZCIsIE5VTEwpOworCW1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KHJvb3RkbiwgIm1vZGVsIiwgTlVMTCk7CisJaWQgPSBvZl9nZXRfcHJvcGVydHkocm9vdGRuLCAic3lzdGVtLWlkIiwgTlVMTCk7CiAJaWYgKG1vZGVsICYmIGlkKQogCQlzbnByaW50ZihzeXN0ZW1faWQsIHNpemVvZihzeXN0ZW1faWQpLCAiJXMtJXMiLCBtb2RlbCwgaWQpOwogCi0JbmFtZSA9IGdldF9wcm9wZXJ0eShyb290ZG4sICJpYm0scGFydGl0aW9uLW5hbWUiLCBOVUxMKTsKKwluYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KHJvb3RkbiwgImlibSxwYXJ0aXRpb24tbmFtZSIsIE5VTEwpOwogCWlmIChuYW1lKQogCQlzdHJuY3B5KHBhcnRpdGlvbl9uYW1lLCBuYW1lLCBzaXplb2YocGFydGl0aW9uX25hbWUpKTsKIAotCW51bSA9IGdldF9wcm9wZXJ0eShyb290ZG4sICJpYm0scGFydGl0aW9uLW5vIiwgTlVMTCk7CisJbnVtID0gb2ZfZ2V0X3Byb3BlcnR5KHJvb3RkbiwgImlibSxwYXJ0aXRpb24tbm8iLCBOVUxMKTsKIAlpZiAobnVtKQogCQlwYXJ0aXRpb25fbnVtYmVyID0gKm51bTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL3JwYV92c2NzaS5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL3JwYV92c2NzaS5jCmluZGV4IDBhNTMzZjMuLmQ4NzAwYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9ycGFfdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvcnBhX3ZzY3NpLmMKQEAgLTE2MiwxMSArMTYyLDExIEBACiAJCXJldHVybjsKIAl9CiAKLQlwcGFydGl0aW9uX25hbWUgPSBnZXRfcHJvcGVydHkocm9vdGRuLCAiaWJtLHBhcnRpdGlvbi1uYW1lIiwgTlVMTCk7CisJcHBhcnRpdGlvbl9uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KHJvb3RkbiwgImlibSxwYXJ0aXRpb24tbmFtZSIsIE5VTEwpOwogCWlmIChwcGFydGl0aW9uX25hbWUpCiAJCXN0cm5jcHkocGFydGl0aW9uX25hbWUsIHBwYXJ0aXRpb25fbmFtZSwKIAkJCQlzaXplb2YocGFydGl0aW9uX25hbWUpKTsKLQlwX251bWJlcl9wdHIgPSBnZXRfcHJvcGVydHkocm9vdGRuLCAiaWJtLHBhcnRpdGlvbi1ubyIsIE5VTEwpOworCXBfbnVtYmVyX3B0ciA9IG9mX2dldF9wcm9wZXJ0eShyb290ZG4sICJpYm0scGFydGl0aW9uLW5vIiwgTlVMTCk7CiAJaWYgKHBfbnVtYmVyX3B0cikKIAkJcGFydGl0aW9uX251bWJlciA9ICpwX251bWJlcl9wdHI7CiAJb2Zfbm9kZV9wdXQocm9vdGRuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKaW5kZXggMmI1YjhhOS4uODI2M2Y3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKQEAgLTcyMSwxOSArNzIxLDIzIEBACiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiBzdGF0aWMgdm9pZCBpZGVzY3NpX2FkZF9zZXR0aW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlc2NzaV9zY3NpX3QgKnNjc2kgPSBkcml2ZV90b19pZGVzY3NpKGRyaXZlKTsKIAogLyoKLSAqCQkJZHJpdmUJc2V0dGluZyBuYW1lCXJlYWQvd3JpdGUJaW9jdGwJaW9jdGwJCWRhdGEgdHlwZQltaW4JbWF4CW11bF9mYWN0b3IJZGl2X2ZhY3RvcglkYXRhIHBvaW50ZXIJCXNldCBmdW5jdGlvbgorICoJCQlkcml2ZQlzZXR0aW5nIG5hbWUJcmVhZC93cml0ZQlkYXRhIHR5cGUJbWluCW1heAltdWxfZmFjdG9yCWRpdl9mYWN0b3IJZGF0YSBwb2ludGVyCQlzZXQgZnVuY3Rpb24KICAqLwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImJpb3NfY3lsIiwJU0VUVElOR19SVywJLTEsCS0xLAkJVFlQRV9JTlQsCTAsCTEwMjMsCTEsCQkxLAkJJmRyaXZlLT5iaW9zX2N5bCwJTlVMTCk7Ci0JaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkiYmlvc19oZWFkIiwJU0VUVElOR19SVywJLTEsCS0xLAkJVFlQRV9CWVRFLAkwLAkyNTUsCTEsCQkxLAkJJmRyaXZlLT5iaW9zX2hlYWQsCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImJpb3Nfc2VjdCIsCVNFVFRJTkdfUlcsCS0xLAktMSwJCVRZUEVfQllURSwJMCwJNjMsCTEsCQkxLAkJJmRyaXZlLT5iaW9zX3NlY3QsCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJInRyYW5zZm9ybSIsCVNFVFRJTkdfUlcsCS0xLAktMSwJCVRZUEVfSU5ULAkwLAkzLAkxLAkJMSwJCSZzY3NpLT50cmFuc2Zvcm0sCU5VTEwpOwotCWlkZV9hZGRfc2V0dGluZyhkcml2ZSwJImxvZyIsCQlTRVRUSU5HX1JXLAktMSwJLTEsCQlUWVBFX0lOVCwJMCwJMSwJMSwJCTEsCQkmc2NzaS0+bG9nLAkJTlVMTCk7CisJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkiYmlvc19jeWwiLAlTRVRUSU5HX1JXLAlUWVBFX0lOVCwJMCwJMTAyMywJMSwJCTEsCQkmZHJpdmUtPmJpb3NfY3lsLAlOVUxMKTsKKwlpZGVfYWRkX3NldHRpbmcoZHJpdmUsCSJiaW9zX2hlYWQiLAlTRVRUSU5HX1JXLAlUWVBFX0JZVEUsCTAsCTI1NSwJMSwJCTEsCQkmZHJpdmUtPmJpb3NfaGVhZCwJTlVMTCk7CisJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkiYmlvc19zZWN0IiwJU0VUVElOR19SVywJVFlQRV9CWVRFLAkwLAk2MywJMSwJCTEsCQkmZHJpdmUtPmJpb3Nfc2VjdCwJTlVMTCk7CisJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkidHJhbnNmb3JtIiwJU0VUVElOR19SVywJVFlQRV9JTlQsCTAsCTMsCTEsCQkxLAkJJnNjc2ktPnRyYW5zZm9ybSwJTlVMTCk7CisJaWRlX2FkZF9zZXR0aW5nKGRyaXZlLAkibG9nIiwJCVNFVFRJTkdfUlcsCVRZUEVfSU5ULAkwLAkxLAkxLAkJMSwJCSZzY3NpLT5sb2csCQlOVUxMKTsKIH0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlc2NzaV9hZGRfc2V0dGluZ3MoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQorI2VuZGlmCiAKIC8qCiAgKglEcml2ZXIgaW5pdGlhbGl6YXRpb24uCkBAIC03NTYsNyArNzYwLDcgQEAKIAlzdHJ1Y3QgaWRlX3Njc2lfb2JqICpzY3NpID0gc2NzaWhvc3RfdG9faWRlc2NzaShzY3NpaG9zdCk7CiAJc3RydWN0IGdlbmRpc2sgKmcgPSBzY3NpLT5kaXNrOwogCi0JaWRlX3VucmVnaXN0ZXJfc3ViZHJpdmVyKGRyaXZlLCBzY3NpLT5kcml2ZXIpOworCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBzY3NpLT5kcml2ZXIpOwogCiAJaWRlX3VucmVnaXN0ZXJfcmVnaW9uKGcpOwogCkBAIC03NzAsMTMgKzc3NCwxMSBAQAogCiBzdGF0aWMgaW50IGlkZV9zY3NpX3Byb2JlKGlkZV9kcml2ZV90ICopOwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKIHN0YXRpYyBpZGVfcHJvY19lbnRyeV90IGlkZXNjc2lfcHJvY1tdID0gewogCXsgImNhcGFjaXR5IiwgU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZV9yZWFkX2NhcGFjaXR5LCBOVUxMIH0sCiAJeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KIH07Ci0jZWxzZQotIyBkZWZpbmUgaWRlc2NzaV9wcm9jCU5VTEwKICNlbmRpZgogCiBzdGF0aWMgaWRlX2RyaXZlcl90IGlkZXNjc2lfZHJpdmVyID0gewpAQCAtNzkwLDExICs3OTIsMTMgQEAKIAkudmVyc2lvbgkJPSBJREVTQ1NJX1ZFUlNJT04sCiAJLm1lZGlhCQkJPSBpZGVfc2NzaSwKIAkuc3VwcG9ydHNfZHNjX292ZXJsYXAJPSAwLAotCS5wcm9jCQkJPSBpZGVzY3NpX3Byb2MsCiAJLmRvX3JlcXVlc3QJCT0gaWRlc2NzaV9kb19yZXF1ZXN0LAogCS5lbmRfcmVxdWVzdAkJPSBpZGVzY3NpX2VuZF9yZXF1ZXN0LAogCS5lcnJvciAgICAgICAgICAgICAgICAgID0gaWRlc2NzaV9hdGFwaV9lcnJvciwKIAkuYWJvcnQgICAgICAgICAgICAgICAgICA9IGlkZXNjc2lfYXRhcGlfYWJvcnQsCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCisJLnByb2MJCQk9IGlkZXNjc2lfcHJvYywKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBpZGVzY3NpX2lkZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtMTE1Myw3ICsxMTU3LDcgQEAKIAlpZGVzY3NpLT5ob3N0ID0gaG9zdDsKIAlpZGVzY3NpLT5kaXNrID0gZzsKIAlnLT5wcml2YXRlX2RhdGEgPSAmaWRlc2NzaS0+ZHJpdmVyOwotCWlkZV9yZWdpc3Rlcl9zdWJkcml2ZXIoZHJpdmUsICZpZGVzY3NpX2RyaXZlcik7CisJaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCAmaWRlc2NzaV9kcml2ZXIpOwogCWVyciA9IDA7CiAJaWRlc2NzaV9zZXR1cChkcml2ZSwgaWRlc2NzaSk7CiAJZy0+Zm9wcyA9ICZpZGVzY3NpX29wczsKQEAgLTExNjUsNyArMTE2OSw3IEBACiAJfQogCS8qIGZhbGwgdGhyb3VnaCBvbiBlcnJvciAqLwogCWlkZV91bnJlZ2lzdGVyX3JlZ2lvbihnKTsKLQlpZGVfdW5yZWdpc3Rlcl9zdWJkcml2ZXIoZHJpdmUsICZpZGVzY3NpX2RyaXZlcik7CisJaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsICZpZGVzY3NpX2RyaXZlcik7CiAKIAlwdXRfZGlzayhnKTsKIG91dF9ob3N0X3B1dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCAyYzdiNzdlLi5mYTZmZjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC05Miw2ICs5Miw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGlwcl90cmFuc29wX3RpbWVvdXQgPSAwOwogc3RhdGljIHVuc2lnbmVkIGludCBpcHJfZW5hYmxlX2NhY2hlID0gMTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXByX2RlYnVnID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXByX2R1YWxfaW9hX3JhaWQgPSAxOwogc3RhdGljIERFRklORV9TUElOTE9DSyhpcHJfZHJpdmVyX2xvY2spOwogCiAvKiBUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBETUEgY29udHJvbGxlciBjaGlwcyAqLwpAQCAtMTU4LDYgKzE1OSw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV9jYWNoZSwgIkVuYWJsZSBhZGFwdGVyJ3Mgbm9uLXZvbGF0aWxlIHdyaXRlIGNhY2hlIChkZWZhdWx0OiAxKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpcHJfZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRldmljZSBkcml2ZXIgZGVidWdnaW5nIGxvZ2dpbmcuIFNldCB0byAxIHRvIGVuYWJsZS4gKGRlZmF1bHQ6IDApIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoZHVhbF9pb2FfcmFpZCwgaXByX2R1YWxfaW9hX3JhaWQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGR1YWxfaW9hX3JhaWQsICJFbmFibGUgZHVhbCBhZGFwdGVyIFJBSUQgc3VwcG9ydC4gU2V0IHRvIDEgdG8gZW5hYmxlLiAoZGVmYXVsdDogMSkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKElQUl9EUklWRVJfVkVSU0lPTik7CiAKQEAgLTIwNiw2ICsyMDksOCBAQAogCSI4MDA5OiBJbXBlbmRpbmcgY2FjaGUgYmF0dGVyeSBwYWNrIGZhaWx1cmUifSwKIAl7MHgwMjA0MDQwMCwgMCwgMCwKIAkiMzRGRjogRGlzayBkZXZpY2UgZm9ybWF0IGluIHByb2dyZXNzIn0sCisJezB4MDIwNDgwMDAsIDAsIElQUl9ERUZBVUxUX0xPR19MRVZFTCwKKwkiOTA3MDogSU9BIHJlcXVlc3RlZCByZXNldCJ9LAogCXsweDAyM0YwMDAwLCAwLCAwLAogCSJTeW5jaHJvbml6YXRpb24gcmVxdWlyZWQifSwKIAl7MHgwMjRFMDAwMCwgMCwgMCwKQEAgLTk1MSw2ICs5NTYsNTMgQEAKIH0KIAogLyoqCisgKiBzdHJpcF9hbmRfcGFkX3doaXRlc3BhY2UgLSBTdHJpcCBhbmQgcGFkIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisgKiBAaToJCWluZGV4IGludG8gYnVmZmVyCisgKiBAYnVmOgkJc3RyaW5nIHRvIG1vZGlmeQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzdHJpcCBhbGwgdHJhaWxpbmcgd2hpdGVzcGFjZSwgcGFkIHRoZSBlbmQKKyAqIG9mIHRoZSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBzcGFjZSwgYW5kIE5VTEwgdGVybWluYXRlIHRoZSBzdHJpbmcuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCW5ldyBsZW5ndGggb2Ygc3RyaW5nCisgKiovCitzdGF0aWMgaW50IHN0cmlwX2FuZF9wYWRfd2hpdGVzcGFjZShpbnQgaSwgY2hhciAqYnVmKQoreworCXdoaWxlIChpICYmIGJ1ZltpXSA9PSAnICcpCisJCWktLTsKKwlidWZbaSsxXSA9ICcgJzsKKwlidWZbaSsyXSA9ICdcMCc7CisJcmV0dXJuIGkgKyAyOworfQorCisvKioKKyAqIGlwcl9sb2dfdnBkX2NvbXBhY3QgLSBMb2cgdGhlIHBhc3NlZCBleHRlbmRlZCBWUEQgY29tcGFjdGx5LgorICogQHByZWZpeDoJCXN0cmluZyB0byBwcmludCBhdCBzdGFydCBvZiBwcmludGsKKyAqIEBob3N0cmNiOglob3N0cmNiIHBvaW50ZXIKKyAqIEB2cGQ6CQl2ZW5kb3IvcHJvZHVjdCBpZC9zbiBzdHJ1Y3QKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJbm9uZQorICoqLworc3RhdGljIHZvaWQgaXByX2xvZ192cGRfY29tcGFjdChjaGFyICpwcmVmaXgsIHN0cnVjdCBpcHJfaG9zdHJjYiAqaG9zdHJjYiwKKwkJCQlzdHJ1Y3QgaXByX3ZwZCAqdnBkKQoreworCWNoYXIgYnVmZmVyW0lQUl9WRU5ET1JfSURfTEVOICsgSVBSX1BST0RfSURfTEVOICsgSVBSX1NFUklBTF9OVU1fTEVOICsgM107CisJaW50IGkgPSAwOworCisJbWVtY3B5KGJ1ZmZlciwgdnBkLT52cGlkcy52ZW5kb3JfaWQsIElQUl9WRU5ET1JfSURfTEVOKTsKKwlpID0gc3RyaXBfYW5kX3BhZF93aGl0ZXNwYWNlKElQUl9WRU5ET1JfSURfTEVOIC0gMSwgYnVmZmVyKTsKKworCW1lbWNweSgmYnVmZmVyW2ldLCB2cGQtPnZwaWRzLnByb2R1Y3RfaWQsIElQUl9QUk9EX0lEX0xFTik7CisJaSA9IHN0cmlwX2FuZF9wYWRfd2hpdGVzcGFjZShpICsgSVBSX1BST0RfSURfTEVOIC0gMSwgYnVmZmVyKTsKKworCW1lbWNweSgmYnVmZmVyW2ldLCB2cGQtPnNuLCBJUFJfU0VSSUFMX05VTV9MRU4pOworCWJ1ZmZlcltJUFJfU0VSSUFMX05VTV9MRU4gKyBpXSA9ICdcMCc7CisKKwlpcHJfaGNhbV9lcnIoaG9zdHJjYiwgIiVzIFZQSUQvU046ICVzXG4iLCBwcmVmaXgsIGJ1ZmZlcik7Cit9CisKKy8qKgogICogaXByX2xvZ192cGQgLSBMb2cgdGhlIHBhc3NlZCBWUEQgdG8gdGhlIGVycm9yIGxvZy4KICAqIEB2cGQ6CQl2ZW5kb3IvcHJvZHVjdCBpZC9zbiBzdHJ1Y3QKICAqCkBAIC05NzQsNiArMTAyNiwyMyBAQAogfQogCiAvKioKKyAqIGlwcl9sb2dfZXh0X3ZwZF9jb21wYWN0IC0gTG9nIHRoZSBwYXNzZWQgZXh0ZW5kZWQgVlBEIGNvbXBhY3RseS4KKyAqIEBwcmVmaXg6CQlzdHJpbmcgdG8gcHJpbnQgYXQgc3RhcnQgb2YgcHJpbnRrCisgKiBAaG9zdHJjYjoJaG9zdHJjYiBwb2ludGVyCisgKiBAdnBkOgkJdmVuZG9yL3Byb2R1Y3QgaWQvc24vd3duIHN0cnVjdAorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlub25lCisgKiovCitzdGF0aWMgdm9pZCBpcHJfbG9nX2V4dF92cGRfY29tcGFjdChjaGFyICpwcmVmaXgsIHN0cnVjdCBpcHJfaG9zdHJjYiAqaG9zdHJjYiwKKwkJCQkgICAgc3RydWN0IGlwcl9leHRfdnBkICp2cGQpCit7CisJaXByX2xvZ192cGRfY29tcGFjdChwcmVmaXgsIGhvc3RyY2IsICZ2cGQtPnZwZCk7CisJaXByX2hjYW1fZXJyKGhvc3RyY2IsICIlcyBXV046ICUwOFglMDhYXG4iLCBwcmVmaXgsCisJCSAgICAgYmUzMl90b19jcHUodnBkLT53d2lkWzBdKSwgYmUzMl90b19jcHUodnBkLT53d2lkWzFdKSk7Cit9CisKKy8qKgogICogaXByX2xvZ19leHRfdnBkIC0gTG9nIHRoZSBwYXNzZWQgZXh0ZW5kZWQgVlBEIHRvIHRoZSBlcnJvciBsb2cuCiAgKiBAdnBkOgkJdmVuZG9yL3Byb2R1Y3QgaWQvc24vd3duIHN0cnVjdAogICoKQEAgLTEyODcsMTAgKzEzNTYsMTEgQEAKIAogCWVycm9yID0gJmhvc3RyY2ItPmhjYW0udS5lcnJvci51LnR5cGVfMTdfZXJyb3I7CiAJZXJyb3ItPmZhaWx1cmVfcmVhc29uW3NpemVvZihlcnJvci0+ZmFpbHVyZV9yZWFzb24pIC0gMV0gPSAnXDAnOworCXN0cnN0cmlwKGVycm9yLT5mYWlsdXJlX3JlYXNvbik7CiAKLQlpcHJfZXJyKCIlc1xuIiwgZXJyb3ItPmZhaWx1cmVfcmVhc29uKTsKLQlpcHJfZXJyKCJSZW1vdGUgQWRhcHRlciBWUEQ6XG4iKTsKLQlpcHJfbG9nX2V4dF92cGQoJmVycm9yLT52cGQpOworCWlwcl9oY2FtX2Vycihob3N0cmNiLCAiJXMgW1BSQzogJTA4WF1cbiIsIGVycm9yLT5mYWlsdXJlX3JlYXNvbiwKKwkJICAgICBiZTMyX3RvX2NwdShob3N0cmNiLT5oY2FtLnUuZXJyb3IucHJjKSk7CisJaXByX2xvZ19leHRfdnBkX2NvbXBhY3QoIlJlbW90ZSBJT0EiLCBob3N0cmNiLCAmZXJyb3ItPnZwZCk7CiAJaXByX2xvZ19oZXhfZGF0YShpb2FfY2ZnLCBlcnJvci0+ZGF0YSwKIAkJCSBiZTMyX3RvX2NwdShob3N0cmNiLT5oY2FtLmxlbmd0aCkgLQogCQkJIChvZmZzZXRvZihzdHJ1Y3QgaXByX2hvc3RyY2JfZXJyb3IsIHUpICsKQEAgLTEzMTIsMTAgKzEzODIsMTEgQEAKIAogCWVycm9yID0gJmhvc3RyY2ItPmhjYW0udS5lcnJvci51LnR5cGVfMDdfZXJyb3I7CiAJZXJyb3ItPmZhaWx1cmVfcmVhc29uW3NpemVvZihlcnJvci0+ZmFpbHVyZV9yZWFzb24pIC0gMV0gPSAnXDAnOworCXN0cnN0cmlwKGVycm9yLT5mYWlsdXJlX3JlYXNvbik7CiAKLQlpcHJfZXJyKCIlc1xuIiwgZXJyb3ItPmZhaWx1cmVfcmVhc29uKTsKLQlpcHJfZXJyKCJSZW1vdGUgQWRhcHRlciBWUEQ6XG4iKTsKLQlpcHJfbG9nX3ZwZCgmZXJyb3ItPnZwZCk7CisJaXByX2hjYW1fZXJyKGhvc3RyY2IsICIlcyBbUFJDOiAlMDhYXVxuIiwgZXJyb3ItPmZhaWx1cmVfcmVhc29uLAorCQkgICAgIGJlMzJfdG9fY3B1KGhvc3RyY2ItPmhjYW0udS5lcnJvci5wcmMpKTsKKwlpcHJfbG9nX3ZwZF9jb21wYWN0KCJSZW1vdGUgSU9BIiwgaG9zdHJjYiwgJmVycm9yLT52cGQpOwogCWlwcl9sb2dfaGV4X2RhdGEoaW9hX2NmZywgZXJyb3ItPmRhdGEsCiAJCQkgYmUzMl90b19jcHUoaG9zdHJjYi0+aGNhbS5sZW5ndGgpIC0KIAkJCSAob2Zmc2V0b2Yoc3RydWN0IGlwcl9ob3N0cmNiX2Vycm9yLCB1KSArCkBAIC0xNjcyLDEyICsxNzQzLDE1IEBACiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gaXByX2NtZC0+aW9hX2NmZzsKIAlzdHJ1Y3QgaXByX2hvc3RyY2IgKmhvc3RyY2IgPSBpcHJfY21kLT51Lmhvc3RyY2I7CiAJdTMyIGlvYXNjID0gYmUzMl90b19jcHUoaXByX2NtZC0+aW9hc2EuaW9hc2MpOworCXUzMiBmZF9pb2FzYyA9IGJlMzJfdG9fY3B1KGhvc3RyY2ItPmhjYW0udS5lcnJvci5mYWlsaW5nX2Rldl9pb2FzYyk7CiAKIAlsaXN0X2RlbCgmaG9zdHJjYi0+cXVldWUpOwogCWxpc3RfYWRkX3RhaWwoJmlwcl9jbWQtPnF1ZXVlLCAmaW9hX2NmZy0+ZnJlZV9xKTsKIAogCWlmICghaW9hc2MpIHsKIAkJaXByX2hhbmRsZV9sb2dfZGF0YShpb2FfY2ZnLCBob3N0cmNiKTsKKwkJaWYgKGZkX2lvYXNjID09IElQUl9JT0FTQ19OUl9JT0FfUkVTRVRfUkVRVUlSRUQpCisJCQlpcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIElQUl9TSFVURE9XTl9BQkJSRVYpOwogCX0gZWxzZSBpZiAoaW9hc2MgIT0gSVBSX0lPQVNDX0lPQV9XQVNfUkVTRVQpIHsKIAkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LAogCQkJIkhvc3QgUkNCIGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsIGlvYXNjKTsKQEAgLTI2MzUsOCArMjcwOSwxMyBAQAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKLQl3YWl0X2V2ZW50KGlvYV9jZmctPnJlc2V0X3dhaXRfcSwgIWlvYV9jZmctPmluX3Jlc2V0X3JlbG9hZCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwl3aGlsZShpb2FfY2ZnLT5pbl9yZXNldF9yZWxvYWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQl3YWl0X2V2ZW50KGlvYV9jZmctPnJlc2V0X3dhaXRfcSwgIWlvYV9jZmctPmluX3Jlc2V0X3JlbG9hZCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJfQorCiAJaW9hX2NmZy0+ZXJyb3JzX2xvZ2dlZCA9IDA7CiAJaXByX2luaXRpYXRlX2lvYV9yZXNldChpb2FfY2ZnLCBJUFJfU0hVVERPV05fTk9STUFMKTsKIApAQCAtMjk1OCw2ICszMDM3LDExIEBACiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwl3aGlsZShpb2FfY2ZnLT5pbl9yZXNldF9yZWxvYWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQl3YWl0X2V2ZW50KGlvYV9jZmctPnJlc2V0X3dhaXRfcSwgIWlvYV9jZmctPmluX3Jlc2V0X3JlbG9hZCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJfQogCiAJaWYgKGlvYV9jZmctPnVjb2RlX3NnbGlzdCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CkBAIC0zODcwLDYgKzM5NTQsMTMgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKHNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7CiAJCWF0YV9kb19laChhcCwgTlVMTCwgTlVMTCwgaXByX3NhdGFfcmVzZXQsIE5VTEwpOwogCQlzcGluX2xvY2tfaXJxKHNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpcHJfY21kLCAmaW9hX2NmZy0+cGVuZGluZ19xLCBxdWV1ZSkgeworCQkJaWYgKGlwcl9jbWQtPmlvYXJjYi5yZXNfaGFuZGxlID09IHJlcy0+Y2ZndGUucmVzX2hhbmRsZSkgeworCQkJCXJjID0gLUVJTzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCX0gZWxzZQogCQlyYyA9IGlwcl9kZXZpY2VfcmVzZXQoaW9hX2NmZywgcmVzKTsKIAlyZXMtPnJlc2V0dGluZ19kZXZpY2UgPSAwOwpAQCAtNDY1NiwxOCArNDc0NywxOSBAQAogCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kID0gaXByX2NtZC0+c2NzaV9jbWQ7CiAJc3RydWN0IGlwcl9yZXNvdXJjZV9lbnRyeSAqcmVzID0gc2NzaV9jbWQtPmRldmljZS0+aG9zdGRhdGE7CiAJdTMyIGlvYXNjID0gYmUzMl90b19jcHUoaXByX2NtZC0+aW9hc2EuaW9hc2MpOworCXUzMiBtYXNrZWRfaW9hc2MgPSBpb2FzYyAmIElQUl9JT0FTQ19JT0FTQ19NQVNLOwogCiAJaWYgKCFyZXMpIHsKIAkJaXByX3Njc2lfZWhfZG9uZShpcHJfY21kKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmICghaXByX2lzX2dzY3NpKHJlcykpCisJaWYgKCFpcHJfaXNfZ3Njc2kocmVzKSAmJiBtYXNrZWRfaW9hc2MgIT0gSVBSX0lPQVNDX0hXX0RFVl9CVVNfU1RBVFVTKQogCQlpcHJfZ2VuX3NlbnNlKGlwcl9jbWQpOwogCiAJaXByX2R1bXBfaW9hc2EoaW9hX2NmZywgaXByX2NtZCwgcmVzKTsKIAotCXN3aXRjaCAoaW9hc2MgJiBJUFJfSU9BU0NfSU9BU0NfTUFTSykgeworCXN3aXRjaCAobWFza2VkX2lvYXNjKSB7CiAJY2FzZSBJUFJfSU9BU0NfQUJPUlRFRF9DTURfVEVSTV9CWV9IT1NUOgogCQlpZiAoaXByX2lzX25hY2FfbW9kZWwocmVzKSkKIAkJCXNjc2lfY21kLT5yZXN1bHQgfD0gKERJRF9BQk9SVCA8PCAxNik7CkBAIC01MzYzLDYgKzU0NTUsNyBAQAogCQkJaXByX3NlbmRfaGNhbShpb2FfY2ZnLCBJUFJfSENBTV9DREJfT1BfQ09ERV9DT05GSUdfQ0hBTkdFLCBob3N0cmNiKTsKIAl9CiAKKwlzY3NpX3JlcG9ydF9idXNfcmVzZXQoaW9hX2NmZy0+aG9zdCwgSVBSX1ZTRVRfQlVTKTsKIAlkZXZfaW5mbygmaW9hX2NmZy0+cGRldi0+ZGV2LCAiSU9BIGluaXRpYWxpemVkLlxuIik7CiAKIAlpb2FfY2ZnLT5yZXNldF9yZXRyaWVzID0gMDsKQEAgLTU3OTksNiArNTg5Miw5NCBAQAogfQogCiAvKioKKyAqIGlwcl9pb2FmcF9tb2RlX3NlbGVjdF9wYWdlMjQgLSBJc3N1ZSBNb2RlIFNlbGVjdCB0byBJT0EKKyAqIEBpcHJfY21kOglpcHIgY29tbWFuZCBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgZHVhbCBJT0EgUkFJRCBzdXBwb3J0IGlmIHBvc3NpYmxlLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlJUFJfUkNfSk9CX1JFVFVSTgorICoqLworc3RhdGljIGludCBpcHJfaW9hZnBfbW9kZV9zZWxlY3RfcGFnZTI0KHN0cnVjdCBpcHJfY21uZCAqaXByX2NtZCkKK3sKKwlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSBpcHJfY21kLT5pb2FfY2ZnOworCXN0cnVjdCBpcHJfbW9kZV9wYWdlcyAqbW9kZV9wYWdlcyA9ICZpb2FfY2ZnLT52cGRfY2JzLT5tb2RlX3BhZ2VzOworCXN0cnVjdCBpcHJfbW9kZV9wYWdlMjQgKm1vZGVfcGFnZTsKKwlpbnQgbGVuZ3RoOworCisJRU5URVI7CisJbW9kZV9wYWdlID0gaXByX2dldF9tb2RlX3BhZ2UobW9kZV9wYWdlcywgMHgyNCwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGlwcl9tb2RlX3BhZ2UyNCkpOworCisJaWYgKG1vZGVfcGFnZSkKKwkJbW9kZV9wYWdlLT5mbGFncyB8PSBJUFJfRU5BQkxFX0RVQUxfSU9BX0FGOworCisJbGVuZ3RoID0gbW9kZV9wYWdlcy0+aGRyLmxlbmd0aCArIDE7CisJbW9kZV9wYWdlcy0+aGRyLmxlbmd0aCA9IDA7CisKKwlpcHJfYnVpbGRfbW9kZV9zZWxlY3QoaXByX2NtZCwgY3B1X3RvX2JlMzIoSVBSX0lPQV9SRVNfSEFORExFKSwgMHgxMSwKKwkJCSAgICAgIGlvYV9jZmctPnZwZF9jYnNfZG1hICsgb2Zmc2V0b2Yoc3RydWN0IGlwcl9taXNjX2NicywgbW9kZV9wYWdlcyksCisJCQkgICAgICBsZW5ndGgpOworCisJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfaW9hZnBfbW9kZV9zZW5zZV9wYWdlMjg7CisJaXByX2RvX3JlcShpcHJfY21kLCBpcHJfcmVzZXRfaW9hX2pvYiwgaXByX3RpbWVvdXQsIElQUl9JTlRFUk5BTF9USU1FT1VUKTsKKworCUxFQVZFOworCXJldHVybiBJUFJfUkNfSk9CX1JFVFVSTjsKK30KKworLyoqCisgKiBpcHJfcmVzZXRfbW9kZV9zZW5zZV9wYWdlMjRfZmFpbGVkIC0gSGFuZGxlIGZhaWx1cmUgb2YgSU9BRlAgbW9kZSBzZW5zZQorICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZmFpbHVyZSBvZiBhIE1vZGUgU2Vuc2UgdG8gdGhlIElPQUZQLgorICogU29tZSBhZGFwdGVycyBkbyBub3QgaGFuZGxlIGFsbCBtb2RlIHBhZ2VzLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlJUFJfUkNfSk9CX0NPTlRJTlVFIC8gSVBSX1JDX0pPQl9SRVRVUk4KKyAqKi8KK3N0YXRpYyBpbnQgaXByX3Jlc2V0X21vZGVfc2Vuc2VfcGFnZTI0X2ZhaWxlZChzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQpCit7CisJdTMyIGlvYXNjID0gYmUzMl90b19jcHUoaXByX2NtZC0+aW9hc2EuaW9hc2MpOworCisJaWYgKGlvYXNjID09IElQUl9JT0FTQ19JUl9JTlZBTElEX1JFUV9UWVBFX09SX1BLVCkgeworCQlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9pb2FmcF9tb2RlX3NlbnNlX3BhZ2UyODsKKwkJcmV0dXJuIElQUl9SQ19KT0JfQ09OVElOVUU7CisJfQorCisJcmV0dXJuIGlwcl9yZXNldF9jbWRfZmFpbGVkKGlwcl9jbWQpOworfQorCisvKioKKyAqIGlwcl9pb2FmcF9tb2RlX3NlbnNlX3BhZ2UyNCAtIElzc3VlIFBhZ2UgMjQgTW9kZSBTZW5zZSB0byBJT0EKKyAqIEBpcHJfY21kOglpcHIgY29tbWFuZCBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmQgYSBtb2RlIHNlbnNlIHRvIHRoZSBJT0EgdG8gcmV0cmlldmUKKyAqIHRoZSBJT0EgQWR2YW5jZWQgRnVuY3Rpb24gQ29udHJvbCBtb2RlIHBhZ2UuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCUlQUl9SQ19KT0JfUkVUVVJOCisgKiovCitzdGF0aWMgaW50IGlwcl9pb2FmcF9tb2RlX3NlbnNlX3BhZ2UyNChzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQpCit7CisJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gaXByX2NtZC0+aW9hX2NmZzsKKworCUVOVEVSOworCWlwcl9idWlsZF9tb2RlX3NlbnNlKGlwcl9jbWQsIGNwdV90b19iZTMyKElQUl9JT0FfUkVTX0hBTkRMRSksCisJCQkgICAgIDB4MjQsIGlvYV9jZmctPnZwZF9jYnNfZG1hICsKKwkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGlwcl9taXNjX2NicywgbW9kZV9wYWdlcyksCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgaXByX21vZGVfcGFnZXMpKTsKKworCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX2lvYWZwX21vZGVfc2VsZWN0X3BhZ2UyNDsKKwlpcHJfY21kLT5qb2Jfc3RlcF9mYWlsZWQgPSBpcHJfcmVzZXRfbW9kZV9zZW5zZV9wYWdlMjRfZmFpbGVkOworCisJaXByX2RvX3JlcShpcHJfY21kLCBpcHJfcmVzZXRfaW9hX2pvYiwgaXByX3RpbWVvdXQsIElQUl9JTlRFUk5BTF9USU1FT1VUKTsKKworCUxFQVZFOworCXJldHVybiBJUFJfUkNfSk9CX1JFVFVSTjsKK30KKworLyoqCiAgKiBpcHJfaW5pdF9yZXNfdGFibGUgLSBJbml0aWFsaXplIHRoZSByZXNvdXJjZSB0YWJsZQogICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAogICoKQEAgLTU4NjYsNyArNjA0NywxMCBAQAogCQl9CiAJfQogCi0JaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfaW9hZnBfbW9kZV9zZW5zZV9wYWdlMjg7CisJaWYgKGlvYV9jZmctPmR1YWxfcmFpZCAmJiBpcHJfZHVhbF9pb2FfcmFpZCkKKwkJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfaW9hZnBfbW9kZV9zZW5zZV9wYWdlMjQ7CisJZWxzZQorCQlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9pb2FmcF9tb2RlX3NlbnNlX3BhZ2UyODsKIAogCUxFQVZFOwogCXJldHVybiBJUFJfUkNfSk9CX0NPTlRJTlVFOwpAQCAtNTg4OCw4ICs2MDcyLDExIEBACiAJc3RydWN0IGlwcl9pb2FyY2IgKmlvYXJjYiA9ICZpcHJfY21kLT5pb2FyY2I7CiAJc3RydWN0IGlwcl9pb2FkbF9kZXNjICppb2FkbCA9IGlwcl9jbWQtPmlvYWRsOwogCXN0cnVjdCBpcHJfaW5xdWlyeV9wYWdlMyAqdWNvZGVfdnBkID0gJmlvYV9jZmctPnZwZF9jYnMtPnBhZ2UzX2RhdGE7CisJc3RydWN0IGlwcl9pbnF1aXJ5X2NhcCAqY2FwID0gJmlvYV9jZmctPnZwZF9jYnMtPmNhcDsKIAogCUVOVEVSOworCWlmIChjYXAtPmNhcCAmIElQUl9DQVBfRFVBTF9JT0FfUkFJRCkKKwkJaW9hX2NmZy0+ZHVhbF9yYWlkID0gMTsKIAlkZXZfaW5mbygmaW9hX2NmZy0+cGRldi0+ZGV2LCAiQWRhcHRlciBmaXJtd2FyZSB2ZXJzaW9uOiAlMDJYJTAyWCUwMlglMDJYXG4iLAogCQkgdWNvZGVfdnBkLT5tYWpvcl9yZWxlYXNlLCB1Y29kZV92cGQtPmNhcmRfdHlwZSwKIAkJIHVjb2RlX3ZwZC0+bWlub3JfcmVsZWFzZVswXSwgdWNvZGVfdnBkLT5taW5vcl9yZWxlYXNlWzFdKTsKQEAgLTU5NzMsNiArNjE2MCwzNyBAQAogfQogCiAvKioKKyAqIGlwcl9pb2FmcF9jYXBfaW5xdWlyeSAtIFNlbmQgYSBQYWdlIDB4RDAgSW5xdWlyeSB0byB0aGUgYWRhcHRlci4KKyAqIEBpcHJfY21kOglpcHIgY29tbWFuZCBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgUGFnZSAweEQwIGlucXVpcnkgdG8gdGhlIGFkYXB0ZXIKKyAqIHRvIHJldHJpZXZlIGFkYXB0ZXIgY2FwYWJpbGl0aWVzLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlJUFJfUkNfSk9CX0NPTlRJTlVFIC8gSVBSX1JDX0pPQl9SRVRVUk4KKyAqKi8KK3N0YXRpYyBpbnQgaXByX2lvYWZwX2NhcF9pbnF1aXJ5KHN0cnVjdCBpcHJfY21uZCAqaXByX2NtZCkKK3sKKwlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSBpcHJfY21kLT5pb2FfY2ZnOworCXN0cnVjdCBpcHJfaW5xdWlyeV9wYWdlMCAqcGFnZTAgPSAmaW9hX2NmZy0+dnBkX2Nicy0+cGFnZTBfZGF0YTsKKwlzdHJ1Y3QgaXByX2lucXVpcnlfY2FwICpjYXAgPSAmaW9hX2NmZy0+dnBkX2Nicy0+Y2FwOworCisJRU5URVI7CisJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfaW9hZnBfcXVlcnlfaW9hX2NmZzsKKwltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOworCisJaWYgKGlwcl9pbnF1aXJ5X3BhZ2Vfc3VwcG9ydGVkKHBhZ2UwLCAweEQwKSkgeworCQlpcHJfaW9hZnBfaW5xdWlyeShpcHJfY21kLCAxLCAweEQwLAorCQkJCSAgaW9hX2NmZy0+dnBkX2Nic19kbWEgKyBvZmZzZXRvZihzdHJ1Y3QgaXByX21pc2NfY2JzLCBjYXApLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBpcHJfaW5xdWlyeV9jYXApKTsKKwkJcmV0dXJuIElQUl9SQ19KT0JfUkVUVVJOOworCX0KKworCUxFQVZFOworCXJldHVybiBJUFJfUkNfSk9CX0NPTlRJTlVFOworfQorCisvKioKICAqIGlwcl9pb2FmcF9wYWdlM19pbnF1aXJ5IC0gU2VuZCBhIFBhZ2UgMyBJbnF1aXJ5IHRvIHRoZSBhZGFwdGVyLgogICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAogICoKQEAgLTU5OTIsNyArNjIxMCw3IEBACiAJaWYgKCFpcHJfaW5xdWlyeV9wYWdlX3N1cHBvcnRlZChwYWdlMCwgMSkpCiAJCWlvYV9jZmctPmNhY2hlX3N0YXRlID0gQ0FDSEVfTk9ORTsKIAotCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX2lvYWZwX3F1ZXJ5X2lvYV9jZmc7CisJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfaW9hZnBfY2FwX2lucXVpcnk7CiAKIAlpcHJfaW9hZnBfaW5xdWlyeShpcHJfY21kLCAxLCAzLAogCQkJICBpb2FfY2ZnLT52cGRfY2JzX2RtYSArIG9mZnNldG9mKHN0cnVjdCBpcHJfbWlzY19jYnMsIHBhZ2UzX2RhdGEpLApAQCAtNjI3OCw2ICs2NDk2LDcgQEAKIAlzdHJ1Y3QgaXByX2hvc3RyY2IgKmhvc3RyY2I7CiAJc3RydWN0IGlwcl91Y19zZHQgc2R0OwogCWludCByYywgbGVuZ3RoOworCXUzMiBpb2FzYzsKIAogCW1haWxib3ggPSByZWFkbChpb2FfY2ZnLT5pb2FfbWFpbGJveCk7CiAKQEAgLTYzMTAsOSArNjUyOSwxMyBAQAogCQkJCQkoX19iZTMyICopJmhvc3RyY2ItPmhjYW0sCiAJCQkJCW1pbihsZW5ndGgsIChpbnQpc2l6ZW9mKGhvc3RyY2ItPmhjYW0pKSAvIHNpemVvZihfX2JlMzIpKTsKIAotCWlmICghcmMpCisJaWYgKCFyYykgewogCQlpcHJfaGFuZGxlX2xvZ19kYXRhKGlvYV9jZmcsIGhvc3RyY2IpOwotCWVsc2UKKwkJaW9hc2MgPSBiZTMyX3RvX2NwdShob3N0cmNiLT5oY2FtLnUuZXJyb3IuZmFpbGluZ19kZXZfaW9hc2MpOworCQlpZiAoaW9hc2MgPT0gSVBSX0lPQVNDX05SX0lPQV9SRVNFVF9SRVFVSVJFRCAmJgorCQkgICAgaW9hX2NmZy0+c2R0X3N0YXRlID09IEdFVF9EVU1QKQorCQkJaW9hX2NmZy0+c2R0X3N0YXRlID0gV0FJVF9GT1JfRFVNUDsKKwl9IGVsc2UKIAkJaXByX3VuaXRfY2hlY2tfbm9fZGF0YShpb2FfY2ZnKTsKIAogCWxpc3RfYWRkX3RhaWwoJmhvc3RyY2ItPnF1ZXVlLCAmaW9hX2NmZy0+aG9zdHJjYl9mcmVlX3EpOwpAQCAtNjQyNSw2ICs2NjQ4LDQ4IEBACiB9CiAKIC8qKgorICogaXByX3Jlc2V0X3Nsb3RfcmVzZXRfZG9uZSAtIENsZWFyIFBDSSByZXNldCB0byB0aGUgYWRhcHRlcgorICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAorICoKKyAqIERlc2NyaXB0aW9uOiBUaGlzIGNsZWFycyBQQ0kgcmVzZXQgdG8gdGhlIGFkYXB0ZXIgYW5kIGRlbGF5cyB0d28gc2Vjb25kcy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJSVBSX1JDX0pPQl9SRVRVUk4KKyAqKi8KK3N0YXRpYyBpbnQgaXByX3Jlc2V0X3Nsb3RfcmVzZXRfZG9uZShzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQpCit7CisJRU5URVI7CisJcGNpX3NldF9wY2llX3Jlc2V0X3N0YXRlKGlwcl9jbWQtPmlvYV9jZmctPnBkZXYsIHBjaWVfZGVhc3NlcnRfcmVzZXQpOworCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX3Jlc2V0X2Jpc3RfZG9uZTsKKwlpcHJfcmVzZXRfc3RhcnRfdGltZXIoaXByX2NtZCwgSVBSX1dBSVRfRk9SX0JJU1RfVElNRU9VVCk7CisJTEVBVkU7CisJcmV0dXJuIElQUl9SQ19KT0JfUkVUVVJOOworfQorCisvKioKKyAqIGlwcl9yZXNldF9zbG90X3Jlc2V0IC0gUmVzZXQgdGhlIFBDSSBzbG90IG9mIHRoZSBhZGFwdGVyLgorICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAorICoKKyAqIERlc2NyaXB0aW9uOiBUaGlzIGFzc2VydHMgUENJIHJlc2V0IHRvIHRoZSBhZGFwdGVyLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlJUFJfUkNfSk9CX1JFVFVSTgorICoqLworc3RhdGljIGludCBpcHJfcmVzZXRfc2xvdF9yZXNldChzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQpCit7CisJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gaXByX2NtZC0+aW9hX2NmZzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGlvYV9jZmctPnBkZXY7CisKKwlFTlRFUjsKKwlwY2lfYmxvY2tfdXNlcl9jZmdfYWNjZXNzKHBkZXYpOworCXBjaV9zZXRfcGNpZV9yZXNldF9zdGF0ZShwZGV2LCBwY2llX3dhcm1fcmVzZXQpOworCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX3Jlc2V0X3Nsb3RfcmVzZXRfZG9uZTsKKwlpcHJfcmVzZXRfc3RhcnRfdGltZXIoaXByX2NtZCwgSVBSX1BDSV9SRVNFVF9USU1FT1VUKTsKKwlMRUFWRTsKKwlyZXR1cm4gSVBSX1JDX0pPQl9SRVRVUk47Cit9CisKKy8qKgogICogaXByX3Jlc2V0X2FsbG93ZWQgLSBRdWVyeSB3aGV0aGVyIG9yIG5vdCBJT0EgY2FuIGJlIHJlc2V0CiAgKiBAaW9hX2NmZzoJaW9hIGNvbmZpZyBzdHJ1Y3QKICAqCkBAIC02NDYzLDcgKzY3MjgsNyBAQAogCQlpcHJfY21kLT51LnRpbWVfbGVmdCAtPSBJUFJfQ0hFQ0tfRk9SX1JFU0VUX1RJTUVPVVQ7CiAJCWlwcl9yZXNldF9zdGFydF90aW1lcihpcHJfY21kLCBJUFJfQ0hFQ0tfRk9SX1JFU0VUX1RJTUVPVVQpOwogCX0gZWxzZSB7Ci0JCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX3Jlc2V0X3N0YXJ0X2Jpc3Q7CisJCWlwcl9jbWQtPmpvYl9zdGVwID0gaW9hX2NmZy0+cmVzZXQ7CiAJCXJjID0gSVBSX1JDX0pPQl9DT05USU5VRTsKIAl9CiAKQEAgLTY0OTYsNyArNjc2MSw3IEBACiAJCXdyaXRlbChJUFJfVVBST0NJX1JFU0VUX0FMRVJULCBpb2FfY2ZnLT5yZWdzLnNldF91cHJvY19pbnRlcnJ1cHRfcmVnKTsKIAkJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfcmVzZXRfd2FpdF90b19zdGFydF9iaXN0OwogCX0gZWxzZSB7Ci0JCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX3Jlc2V0X3N0YXJ0X2Jpc3Q7CisJCWlwcl9jbWQtPmpvYl9zdGVwID0gaW9hX2NmZy0+cmVzZXQ7CiAJfQogCiAJaXByX2NtZC0+dS50aW1lX2xlZnQgPSBJUFJfV0FJVF9GT1JfUkVTRVRfVElNRU9VVDsKQEAgLTY1OTEsMTIgKzY4NTYsMTQgQEAKIAkJaXByX2NtZC0+aW9hcmNiLmNtZF9wa3QuY2RiWzBdID0gSVBSX0lPQV9TSFVURE9XTjsKIAkJaXByX2NtZC0+aW9hcmNiLmNtZF9wa3QuY2RiWzFdID0gc2h1dGRvd25fdHlwZTsKIAotCQlpZiAoc2h1dGRvd25fdHlwZSA9PSBJUFJfU0hVVERPV05fQUJCUkVWKQotCQkJdGltZW91dCA9IElQUl9BQkJSRVZfU0hVVERPV05fVElNRU9VVDsKKwkJaWYgKHNodXRkb3duX3R5cGUgPT0gSVBSX1NIVVRET1dOX05PUk1BTCkKKwkJCXRpbWVvdXQgPSBJUFJfU0hVVERPV05fVElNRU9VVDsKIAkJZWxzZSBpZiAoc2h1dGRvd25fdHlwZSA9PSBJUFJfU0hVVERPV05fUFJFUEFSRV9GT1JfTk9STUFMKQogCQkJdGltZW91dCA9IElQUl9JTlRFUk5BTF9USU1FT1VUOworCQllbHNlIGlmIChpb2FfY2ZnLT5kdWFsX3JhaWQgJiYgaXByX2R1YWxfaW9hX3JhaWQpCisJCQl0aW1lb3V0ID0gSVBSX0RVQUxfSU9BX0FCQlJfU0hVVERPV05fVE87CiAJCWVsc2UKLQkJCXRpbWVvdXQgPSBJUFJfU0hVVERPV05fVElNRU9VVDsKKwkJCXRpbWVvdXQgPSBJUFJfQUJCUkVWX1NIVVRET1dOX1RJTUVPVVQ7CiAKIAkJaXByX2RvX3JlcShpcHJfY21kLCBpcHJfcmVzZXRfaW9hX2pvYiwgaXByX3RpbWVvdXQsIHRpbWVvdXQpOwogCkBAIC02Nzc2LDggKzcwNDMsMTEgQEAKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQlfaXByX2luaXRpYXRlX2lvYV9yZXNldChpb2FfY2ZnLCBpcHJfcmVzZXRfcmVzdG9yZV9jZmdfc3BhY2UsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBSX1NIVVRET1dOX05PTkUpOworCWlmIChpb2FfY2ZnLT5uZWVkc193YXJtX3Jlc2V0KQorCQlpcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIElQUl9TSFVURE9XTl9OT05FKTsKKwllbHNlCisJCV9pcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIGlwcl9yZXNldF9yZXN0b3JlX2NmZ19zcGFjZSwKKwkJCQkJSVBSX1NIVVRET1dOX05PTkUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKIH0KQEAgLTcyMjYsNyArNzQ5Niw3IEBACiAJdW5zaWduZWQgbG9uZyBpcHJfcmVnc19wY2k7CiAJdm9pZCBfX2lvbWVtICppcHJfcmVnczsKIAlpbnQgcmMgPSBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0Jdm9sYXRpbGUgdTMyIG1hc2ssIHVwcm9jOworCXZvbGF0aWxlIHUzMiBtYXNrLCB1cHJvYywgaW50ZXJydXB0czsKIAogCUVOVEVSOwogCkBAIC03MjY1LDYgKzc1MzUsMTQgQEAKIAllbHNlCiAJCWlvYV9jZmctPnRyYW5zb3BfdGltZW91dCA9IElQUl9PUEVSQVRJT05BTF9USU1FT1VUOwogCisJcmMgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZpb2FfY2ZnLT5yZXZpZCk7CisKKwlpZiAocmMgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWFkIFBDSSByZXZpc2lvbiBJRFxuIik7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXRfc2NzaV9ob3N0X3B1dDsKKwl9CisKIAlpcHJfcmVnc19wY2kgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAKIAlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgSVBSX05BTUUpOwpAQCAtNzMzMyw5ICs3NjExLDE0IEBACiAJICogdGhlIGNhcmQgaXMgaW4gYW4gdW5rbm93biBzdGF0ZSBhbmQgbmVlZHMgYSBoYXJkIHJlc2V0CiAJICovCiAJbWFzayA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X21hc2tfcmVnKTsKKwlpbnRlcnJ1cHRzID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfcmVnKTsKIAl1cHJvYyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfdXByb2NfaW50ZXJydXB0X3JlZyk7CiAJaWYgKChtYXNrICYgSVBSX1BDSUlfSFJSUV9VUERBVEVEKSA9PSAwIHx8ICh1cHJvYyAmIElQUl9VUFJPQ0lfUkVTRVRfQUxFUlQpKQogCQlpb2FfY2ZnLT5uZWVkc19oYXJkX3Jlc2V0ID0gMTsKKwlpZiAoaW50ZXJydXB0cyAmIElQUl9QQ0lJX0VSUk9SX0lOVEVSUlVQVFMpCisJCWlvYV9jZmctPm5lZWRzX2hhcmRfcmVzZXQgPSAxOworCWlmIChpbnRlcnJ1cHRzICYgSVBSX1BDSUlfSU9BX1VOSVRfQ0hFQ0tFRCkKKwkJaW9hX2NmZy0+aW9hX3VuaXRfY2hlY2tlZCA9IDE7CiAKIAlpcHJfbWFza19hbmRfY2xlYXJfaW50ZXJydXB0cyhpb2FfY2ZnLCB+SVBSX1BDSUlfSU9BX1RSQU5TX1RPX09QRVIpOwogCXJjID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpcHJfaXNyLCBJUlFGX1NIQVJFRCwgSVBSX05BTUUsIGlvYV9jZmcpOwpAQCAtNzM0Niw2ICs3NjI5LDEzIEBACiAJCWdvdG8gY2xlYW51cF9ub2xvZzsKIAl9CiAKKwlpZiAoKGRldl9pZC0+ZHJpdmVyX2RhdGEgJiBJUFJfVVNFX1BDSV9XQVJNX1JFU0VUKSB8fAorCSAgICAoZGV2X2lkLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JQk1fT0JTSURJQU5fRSAmJiAhaW9hX2NmZy0+cmV2aWQpKSB7CisJCWlvYV9jZmctPm5lZWRzX3dhcm1fcmVzZXQgPSAxOworCQlpb2FfY2ZnLT5yZXNldCA9IGlwcl9yZXNldF9zbG90X3Jlc2V0OworCX0gZWxzZQorCQlpb2FfY2ZnLT5yZXNldCA9IGlwcl9yZXNldF9zdGFydF9iaXN0OworCiAJc3Bpbl9sb2NrKCZpcHJfZHJpdmVyX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmlvYV9jZmctPnF1ZXVlLCAmaXByX2lvYV9oZWFkKTsKIAlzcGluX3VubG9jaygmaXByX2RyaXZlcl9sb2NrKTsKQEAgLTc0MjgsNiArNzcxOCwxMiBAQAogCUVOVEVSOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBob3N0X2xvY2tfZmxhZ3MpOworCXdoaWxlKGlvYV9jZmctPmluX3Jlc2V0X3JlbG9hZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgaG9zdF9sb2NrX2ZsYWdzKTsKKwkJd2FpdF9ldmVudChpb2FfY2ZnLT5yZXNldF93YWl0X3EsICFpb2FfY2ZnLT5pbl9yZXNldF9yZWxvYWQpOworCQlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGhvc3RfbG9ja19mbGFncyk7CisJfQorCiAJaXByX2luaXRpYXRlX2lvYV9icmluZ2Rvd24oaW9hX2NmZywgSVBSX1NIVVRET1dOX05PUk1BTCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgaG9zdF9sb2NrX2ZsYWdzKTsKQEAgLTc1NTEsNiArNzg0NywxMiBAQAogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFncyA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCXdoaWxlKGlvYV9jZmctPmluX3Jlc2V0X3JlbG9hZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJCXdhaXRfZXZlbnQoaW9hX2NmZy0+cmVzZXRfd2FpdF9xLCAhaW9hX2NmZy0+aW5fcmVzZXRfcmVsb2FkKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwl9CisKIAlpcHJfaW5pdGlhdGVfaW9hX2JyaW5nZG93bihpb2FfY2ZnLCBJUFJfU0hVVERPV05fTk9STUFMKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAJd2FpdF9ldmVudChpb2FfY2ZnLT5yZXNldF93YWl0X3EsICFpb2FfY2ZnLT5pbl9yZXNldF9yZWxvYWQpOwpAQCAtNzU3NywxOSArNzg3OSwyMiBAQAogCXsgUENJX1ZFTkRPUl9JRF9BREFQVEVDMiwgUENJX0RFVklDRV9JRF9BREFQVEVDMl9PQlNJRElBTiwKIAkgICAgICBQQ0lfVkVORE9SX0lEX0lCTSwgSVBSX1NVQlNfREVWX0lEXzU3MkEsIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfT0JTSURJQU4sCi0JICAgICAgUENJX1ZFTkRPUl9JRF9JQk0sIElQUl9TVUJTX0RFVl9JRF81NzJCLCAwLCAwLCAwIH0sCisJICAgICAgUENJX1ZFTkRPUl9JRF9JQk0sIElQUl9TVUJTX0RFVl9JRF81NzJCLCAwLCAwLAorCSAgICAgIElQUl9VU0VfTE9OR19UUkFOU09QX1RJTUVPVVQgfSwKIAl7IFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfT0JTSURJQU4sCiAJICAgICAgUENJX1ZFTkRPUl9JRF9JQk0sIElQUl9TVUJTX0RFVl9JRF81NzVDLCAwLCAwLAogCSAgICAgIElQUl9VU0VfTE9OR19UUkFOU09QX1RJTUVPVVQgfSwKIAl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9PQlNJRElBTiwKIAkgICAgICBQQ0lfVkVORE9SX0lEX0lCTSwgSVBSX1NVQlNfREVWX0lEXzU3MkEsIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9PQlNJRElBTiwKLQkgICAgICBQQ0lfVkVORE9SX0lEX0lCTSwgSVBSX1NVQlNfREVWX0lEXzU3MkIsIDAsIDAsIDAgfSwKKwkgICAgICBQQ0lfVkVORE9SX0lEX0lCTSwgSVBSX1NVQlNfREVWX0lEXzU3MkIsIDAsIDAsCisJICAgICAgSVBSX1VTRV9MT05HX1RSQU5TT1BfVElNRU9VVH0sCiAJeyBQQ0lfVkVORE9SX0lEX0lCTSwgUENJX0RFVklDRV9JRF9JQk1fT0JTSURJQU4sCiAJICAgICAgUENJX1ZFTkRPUl9JRF9JQk0sIElQUl9TVUJTX0RFVl9JRF81NzVDLCAwLCAwLAogCSAgICAgIElQUl9VU0VfTE9OR19UUkFOU09QX1RJTUVPVVQgfSwKIAl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9PQlNJRElBTl9FLAotCSAgICAgIFBDSV9WRU5ET1JfSURfSUJNLCBJUFJfU1VCU19ERVZfSURfNTc0RSwgMCwgMCwgMCB9LAorCSAgICAgIFBDSV9WRU5ET1JfSURfSUJNLCBJUFJfU1VCU19ERVZfSURfNTc0RSwgMCwgMCwKKwkgICAgICBJUFJfVVNFX0xPTkdfVFJBTlNPUF9USU1FT1VUIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0lCTSwgUENJX0RFVklDRV9JRF9JQk1fT0JTSURJQU5fRSwKIAkgICAgICBQQ0lfVkVORE9SX0lEX0lCTSwgSVBSX1NVQlNfREVWX0lEXzU3NUQsIDAsIDAsCiAJICAgICAgSVBSX1VTRV9MT05HX1RSQU5TT1BfVElNRU9VVCB9LApAQCAtNzU5Nyw3ICs3OTAyLDcgQEAKIAkgICAgICBQQ0lfVkVORE9SX0lEX0lCTSwgSVBSX1NVQlNfREVWX0lEXzU3QjMsIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9PQlNJRElBTl9FLAogCSAgICAgIFBDSV9WRU5ET1JfSURfSUJNLCBJUFJfU1VCU19ERVZfSURfNTdCNywgMCwgMCwKLQkgICAgICBJUFJfVVNFX0xPTkdfVFJBTlNPUF9USU1FT1VUIH0sCisJICAgICAgSVBSX1VTRV9MT05HX1RSQU5TT1BfVElNRU9VVCB8IElQUl9VU0VfUENJX1dBUk1fUkVTRVQgfSwKIAl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9TTklQRSwKIAkJUENJX1ZFTkRPUl9JRF9JQk0sIElQUl9TVUJTX0RFVl9JRF8yNzgwLCAwLCAwLCAwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FEQVBURUMyLCBQQ0lfREVWSUNFX0lEX0FEQVBURUMyX1NDQU1QLApAQCAtNzYyNyw2ICs3OTMyLDcgQEAKIAkucmVtb3ZlID0gaXByX3JlbW92ZSwKIAkuc2h1dGRvd24gPSBpcHJfc2h1dGRvd24sCiAJLmVycl9oYW5kbGVyID0gJmlwcl9lcnJfaGFuZGxlciwKKwkuZHluaWRzLnVzZV9kcml2ZXJfZGF0YSA9IDEKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5oIGIvZHJpdmVycy9zY3NpL2lwci5oCmluZGV4IGJjNTNkN2MuLmQ5MzE1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuaAorKysgYi9kcml2ZXJzL3Njc2kvaXByLmgKQEAgLTM3LDggKzM3LDggQEAKIC8qCiAgKiBMaXRlcmFscwogICovCi0jZGVmaW5lIElQUl9EUklWRVJfVkVSU0lPTiAiMi4zLjIiCi0jZGVmaW5lIElQUl9EUklWRVJfREFURSAiKE1hcmNoIDIzLCAyMDA3KSIKKyNkZWZpbmUgSVBSX0RSSVZFUl9WRVJTSU9OICIyLjQuMSIKKyNkZWZpbmUgSVBSX0RSSVZFUl9EQVRFICIoQXByaWwgMjQsIDIwMDcpIgogCiAvKgogICogSVBSX01BWF9DTURfUEVSX0xVTjogVGhpcyBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvdXRzdGFuZGluZwpAQCAtOTEsNiArOTEsNyBAQAogICogSU9BU0NzCiAgKi8KICNkZWZpbmUgSVBSX0lPQVNDX05SX0lOSVRfQ01EX1JFUVVJUkVECQkweDAyMDQwMjAwCisjZGVmaW5lIElQUl9JT0FTQ19OUl9JT0FfUkVTRVRfUkVRVUlSRUQJCTB4MDIwNDgwMDAKICNkZWZpbmUgSVBSX0lPQVNDX1NZTkNfUkVRVUlSRUQJCQkweDAyM2YwMDAwCiAjZGVmaW5lIElQUl9JT0FTQ19NRURfRE9fTk9UX1JFQUxMT0MJCTB4MDMxMTBDMDAKICNkZWZpbmUgSVBSX0lPQVNDX0hXX1NFTF9USU1FT1VUCQkJMHgwNDA1MDAwMApAQCAtMTExLDYgKzExMiw3IEBACiAKIC8qIERyaXZlciBkYXRhIGZsYWdzICovCiAjZGVmaW5lIElQUl9VU0VfTE9OR19UUkFOU09QX1RJTUVPVVQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgSVBSX1VTRV9QQ0lfV0FSTV9SRVNFVAkJCTB4MDAwMDAwMDIKIAogI2RlZmluZSBJUFJfREVGQVVMVF9NQVhfRVJST1JfRFVNUAkJCTk4NAogI2RlZmluZSBJUFJfTlVNX0xPR19IQ0FNUwkJCQkyCkBAIC0xNzksNiArMTgxLDcgQEAKICNkZWZpbmUgSVBSX1NIVVRET1dOX1RJTUVPVVQJCQkoaXByX2Zhc3RmYWlsID8gNjAgKiBIWiA6IDEwICogNjAgKiBIWikKICNkZWZpbmUgSVBSX1ZTRVRfUldfVElNRU9VVAkJCShpcHJfZmFzdGZhaWwgPyAzMCAqIEhaIDogMiAqIDYwICogSFopCiAjZGVmaW5lIElQUl9BQkJSRVZfU0hVVERPV05fVElNRU9VVAkJKDEwICogSFopCisjZGVmaW5lIElQUl9EVUFMX0lPQV9BQkJSX1NIVVRET1dOX1RPCSgyICogNjAgKiBIWikKICNkZWZpbmUgSVBSX0RFVklDRV9SRVNFVF9USU1FT1VUCQkoaXByX2Zhc3RmYWlsID8gMTAgKiBIWiA6IDMwICogSFopCiAjZGVmaW5lIElQUl9DQU5DRUxfQUxMX1RJTUVPVVQJCShpcHJfZmFzdGZhaWwgPyAxMCAqIEhaIDogMzAgKiBIWikKICNkZWZpbmUgSVBSX0FCT1JUX1RBU0tfVElNRU9VVAkJKGlwcl9mYXN0ZmFpbCA/IDEwICogSFogOiAzMCAqIEhaKQpAQCAtMTkxLDYgKzE5NCw3IEBACiAjZGVmaW5lIElQUl9XQUlUX0ZPUl9SRVNFVF9USU1FT1VUCQkoMiAqIEhaKQogI2RlZmluZSBJUFJfQ0hFQ0tfRk9SX1JFU0VUX1RJTUVPVVQJCShIWiAvIDEwKQogI2RlZmluZSBJUFJfV0FJVF9GT1JfQklTVF9USU1FT1VUCQkoMiAqIEhaKQorI2RlZmluZSBJUFJfUENJX1JFU0VUX1RJTUVPVVQJCQkoSFogLyAyKQogI2RlZmluZSBJUFJfRFVNUF9USU1FT1VUCQkJKDE1ICogSFopCiAKIC8qCkBAIC02MDIsNiArNjA2LDEyIEBACiAJc3RydWN0IGlwcl9kZXZfYnVzX2VudHJ5IGJ1c1swXTsKIH1fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorc3RydWN0IGlwcl9tb2RlX3BhZ2UyNCB7CisJc3RydWN0IGlwcl9tb2RlX3BhZ2VfaGRyIGhkcjsKKwl1OCBmbGFnczsKKyNkZWZpbmUgSVBSX0VOQUJMRV9EVUFMX0lPQV9BRiAweDgwCit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKIHN0cnVjdCBpcHJfaW9hX3ZwZCB7CiAJc3RydWN0IGlwcl9zdGRfaW5xX2RhdGEgc3RkX2lucV9kYXRhOwogCXU4IGFzY2lpX3BhcnRfbnVtWzEyXTsKQEAgLTYyNCw2ICs2MzQsMTkgQEAKIAl1OCBwYXRjaF9udW1iZXJbNF07CiB9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKK3N0cnVjdCBpcHJfaW5xdWlyeV9jYXAgeworCXU4IHBlcmlfcXVhbF9kZXZfdHlwZTsKKwl1OCBwYWdlX2NvZGU7CisJdTggcmVzZXJ2ZWQxOworCXU4IHBhZ2VfbGVuZ3RoOworCXU4IGFzY2lpX2xlbjsKKwl1OCByZXNlcnZlZDI7CisJdTggc2lzX3ZlcnNpb25bMl07CisJdTggY2FwOworI2RlZmluZSBJUFJfQ0FQX0RVQUxfSU9BX1JBSUQJCTB4ODAKKwl1OCByZXNlcnZlZDNbMTVdOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiAjZGVmaW5lIElQUl9JTlFVSVJZX1BBR0UwX0VOVFJJRVMgMjAKIHN0cnVjdCBpcHJfaW5xdWlyeV9wYWdlMCB7CiAJdTggcGVyaV9xdWFsX2Rldl90eXBlOwpAQCAtOTYyLDYgKzk4NSw3IEBACiAJc3RydWN0IGlwcl9pb2FfdnBkIGlvYV92cGQ7CiAJc3RydWN0IGlwcl9pbnF1aXJ5X3BhZ2UwIHBhZ2UwX2RhdGE7CiAJc3RydWN0IGlwcl9pbnF1aXJ5X3BhZ2UzIHBhZ2UzX2RhdGE7CisJc3RydWN0IGlwcl9pbnF1aXJ5X2NhcCBjYXA7CiAJc3RydWN0IGlwcl9tb2RlX3BhZ2VzIG1vZGVfcGFnZXM7CiAJc3RydWN0IGlwcl9zdXBwb3J0ZWRfZGV2aWNlIHN1cHBfZGV2OwogfTsKQEAgLTEwNjgsNiArMTA5MiwxMCBAQAogCXU4IGFsbG93X2NtZHM6MTsKIAl1OCBhbGxvd19tbF9hZGRfZGVsOjE7CiAJdTggbmVlZHNfaGFyZF9yZXNldDoxOworCXU4IGR1YWxfcmFpZDoxOworCXU4IG5lZWRzX3dhcm1fcmVzZXQ6MTsKKworCXU4IHJldmlkOwogCiAJZW51bSBpcHJfY2FjaGVfc3RhdGUgY2FjaGVfc3RhdGU7CiAJdTE2IHR5cGU7IC8qIENDSU4gb2YgdGhlIGNhcmQgKi8KQEAgLTExNjEsNiArMTE4OSw3IEBACiAJc3RydWN0IHBjaV9wb29sICppcHJfY21kX3Bvb2w7CiAKIAlzdHJ1Y3QgaXByX2NtbmQgKnJlc2V0X2NtZDsKKwlpbnQgKCpyZXNldCkgKHN0cnVjdCBpcHJfY21uZCAqKTsKIAogCXN0cnVjdCBhdGFfaG9zdCBhdGFfaG9zdDsKIAljaGFyIGlwcl9jbWRfbGFiZWxbOF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvamF6el9lc3AuYyBiL2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jCmluZGV4IDE5ZGQ0YjkuLjgxZTQ5N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jCkBAIC0xLDMwNyArMSwyNDQgQEAKLS8qCi0gKiBqYXp6X2VzcC5jOiBEcml2ZXIgZm9yIFNDU0kgY2hpcCBvbiBNaXBzIE1hZ251bSBCb2FyZHMgKEpBWlogYXJjaGl0ZWN0dXJlKQorLyogamF6el9lc3AuYzogRVNQIGZyb250LWVuZCBmb3IgTUlQUyBKQVpaIHN5c3RlbXMuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk3IFRob21hcyBCb2dlbmRvZXJmZXIgKHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGUpCi0gKgotICogamF6el9lc3AgaXMgYmFzZWQgb24gRGF2aWQgUy4gTWlsbGVyJ3MgRVNQIGRyaXZlciBhbmQgY3liZXJfZXNwCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhvbWFzIEJvZ2VuZMO2cmZlciAodHNib2dlbmRAYWxwaGEuZnJhbmtlbmRlKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotCi0jaW5jbHVkZSAic2NzaS5oIgotI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0jaW5jbHVkZSAiTkNSNTNDOXguaCIKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vamF6ei5oPgotI2luY2x1ZGUgPGFzbS9qYXp6ZG1hLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vamF6ei5oPgorI2luY2x1ZGUgPGFzbS9qYXp6ZG1hLmg+CiAKLXN0YXRpYyBpbnQgIGRtYV9ieXRlc19zZW50KHN0cnVjdCBOQ1JfRVNQICplc3AsIGludCBmaWZvX2NvdW50KTsKLXN0YXRpYyBpbnQgIGRtYV9jYW5fdHJhbnNmZXIoc3RydWN0IE5DUl9FU1AgKmVzcCwgc3RydWN0IHNjc2lfY21uZCAqc3ApOwotc3RhdGljIHZvaWQgZG1hX2R1bXBfc3RhdGUoc3RydWN0IE5DUl9FU1AgKmVzcCk7Ci1zdGF0aWMgdm9pZCBkbWFfaW5pdF9yZWFkKHN0cnVjdCBOQ1JfRVNQICplc3AsIF9fdTMyIHZhZGRyZXNzLCBpbnQgbGVuZ3RoKTsKLXN0YXRpYyB2b2lkIGRtYV9pbml0X3dyaXRlKHN0cnVjdCBOQ1JfRVNQICplc3AsIF9fdTMyIHZhZGRyZXNzLCBpbnQgbGVuZ3RoKTsKLXN0YXRpYyB2b2lkIGRtYV9pbnRzX29mZihzdHJ1Y3QgTkNSX0VTUCAqZXNwKTsKLXN0YXRpYyB2b2lkIGRtYV9pbnRzX29uKHN0cnVjdCBOQ1JfRVNQICplc3ApOwotc3RhdGljIGludCAgZG1hX2lycV9wKHN0cnVjdCBOQ1JfRVNQICplc3ApOwotc3RhdGljIGludCAgZG1hX3BvcnRzX3Aoc3RydWN0IE5DUl9FU1AgKmVzcCk7Ci1zdGF0aWMgdm9pZCBkbWFfc2V0dXAoc3RydWN0IE5DUl9FU1AgKmVzcCwgX191MzIgYWRkciwgaW50IGNvdW50LCBpbnQgd3JpdGUpOwotc3RhdGljIHZvaWQgZG1hX21tdV9nZXRfc2NzaV9vbmUgKHN0cnVjdCBOQ1JfRVNQICplc3AsIHN0cnVjdCBzY3NpX2NtbmQgKnNwKTsKLXN0YXRpYyB2b2lkIGRtYV9tbXVfZ2V0X3Njc2lfc2dsIChzdHJ1Y3QgTkNSX0VTUCAqZXNwLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcCk7Ci1zdGF0aWMgdm9pZCBkbWFfbW11X3JlbGVhc2Vfc2NzaV9vbmUgKHN0cnVjdCBOQ1JfRVNQICplc3AsIHN0cnVjdCBzY3NpX2NtbmQgKnNwKTsKLXN0YXRpYyB2b2lkIGRtYV9tbXVfcmVsZWFzZV9zY3NpX3NnbCAoc3RydWN0IE5DUl9FU1AgKmVzcCwgc3RydWN0IHNjc2lfY21uZCAqc3ApOwotc3RhdGljIHZvaWQgZG1hX2FkdmFuY2Vfc2cgKHN0cnVjdCBzY3NpX2NtbmQgKnNwKTsKLXN0YXRpYyB2b2lkIGRtYV9sZWRfb2ZmKHN0cnVjdCBOQ1JfRVNQICopOwotc3RhdGljIHZvaWQgZG1hX2xlZF9vbihzdHJ1Y3QgTkNSX0VTUCAqKTsKKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogCisjaW5jbHVkZSAiZXNwX3Njc2kuaCIKIAotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgY21kX2J1ZmZlclsxNl07Ci0JCQkJLyogVGhpcyBpcyB3aGVyZSBhbGwgY29tbWFuZHMgYXJlIHB1dAotCQkJCSAqIGJlZm9yZSB0aGV5IGFyZSB0cmFzZmVyZWQgdG8gdGhlIEVTUCBjaGlwCi0JCQkJICogdmlhIFBJTy4KLQkJCQkgKi8KKyNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiamF6el9lc3AiCisjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMDAwIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1heSAxOSwgMjAwNyIKIAotc3RhdGljIGludCBqYXp6X2VzcF9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQorc3RhdGljIHZvaWQgamF6el9lc3Bfd3JpdGU4KHN0cnVjdCBlc3AgKmVzcCwgdTggdmFsLCB1bnNpZ25lZCBsb25nIHJlZykKIHsKLQlpZiAoc2hvc3QtPmlycSkKLQkJZnJlZV9pcnEoc2hvc3QtPmlycSwgTlVMTCk7Ci0JaWYgKHNob3N0LT5kbWFfY2hhbm5lbCAhPSAweGZmKQotCQlmcmVlX2RtYShzaG9zdC0+ZG1hX2NoYW5uZWwpOwotCWlmIChzaG9zdC0+aW9fcG9ydCAmJiBzaG9zdC0+bl9pb19wb3J0KQotCQlyZWxlYXNlX3JlZ2lvbihzaG9zdC0+aW9fcG9ydCwgc2hvc3QtPm5faW9fcG9ydCk7Ci0Jc2NzaV91bnJlZ2lzdGVyKHNob3N0KTsKKwkqKHZvbGF0aWxlIHU4ICopKGVzcC0+cmVncyArIHJlZykgPSB2YWw7Cit9CisKK3N0YXRpYyB1OCBqYXp6X2VzcF9yZWFkOChzdHJ1Y3QgZXNwICplc3AsIHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXJldHVybiAqKHZvbGF0aWxlIHU4ICopKGVzcC0+cmVncyArIHJlZyk7Cit9CisKK3N0YXRpYyBkbWFfYWRkcl90IGphenpfZXNwX21hcF9zaW5nbGUoc3RydWN0IGVzcCAqZXNwLCB2b2lkICpidWYsCisJCQkJICAgICAgc2l6ZV90IHN6LCBpbnQgZGlyKQoreworCXJldHVybiBkbWFfbWFwX3NpbmdsZShlc3AtPmRldiwgYnVmLCBzeiwgZGlyKTsKK30KKworc3RhdGljIGludCBqYXp6X2VzcF9tYXBfc2coc3RydWN0IGVzcCAqZXNwLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgaW50IG51bV9zZywgaW50IGRpcikKK3sKKwlyZXR1cm4gZG1hX21hcF9zZyhlc3AtPmRldiwgc2csIG51bV9zZywgZGlyKTsKK30KKworc3RhdGljIHZvaWQgamF6el9lc3BfdW5tYXBfc2luZ2xlKHN0cnVjdCBlc3AgKmVzcCwgZG1hX2FkZHJfdCBhZGRyLAorCQkJCSAgc2l6ZV90IHN6LCBpbnQgZGlyKQoreworCWRtYV91bm1hcF9zaW5nbGUoZXNwLT5kZXYsIGFkZHIsIHN6LCBkaXIpOworfQorCitzdGF0aWMgdm9pZCBqYXp6X2VzcF91bm1hcF9zZyhzdHJ1Y3QgZXNwICplc3AsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgICBpbnQgbnVtX3NnLCBpbnQgZGlyKQoreworCWRtYV91bm1hcF9zZyhlc3AtPmRldiwgc2csIG51bV9zZywgZGlyKTsKK30KKworc3RhdGljIGludCBqYXp6X2VzcF9pcnFfcGVuZGluZyhzdHJ1Y3QgZXNwICplc3ApCit7CisJaWYgKGphenpfZXNwX3JlYWQ4KGVzcCwgRVNQX1NUQVRVUykgJiBFU1BfU1RBVF9JTlRSKQorCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIERldGVjdGlvbiAqLwotc3RhdGljIGludCBqYXp6X2VzcF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKK3N0YXRpYyB2b2lkIGphenpfZXNwX3Jlc2V0X2RtYShzdHJ1Y3QgZXNwICplc3ApCiB7Ci0gICAgc3RydWN0IE5DUl9FU1AgKmVzcDsKLSAgICBzdHJ1Y3QgQ29uZmlnRGV2ICplc3BfZGV2OworCXZkbWFfZGlzYWJsZSAoKGludCllc3AtPmRtYV9yZWdzKTsKK30KIAotICAgIC8qCi0gICAgICogZmlyc3QgYXNzdW1wdGlvbiBpdCBpcyB0aGVyZTotKQotICAgICAqLwotICAgIGlmICgxKSB7Ci0JZXNwX2RldiA9IE5VTEw7Ci0JZXNwID0gZXNwX2FsbG9jYXRlKHRwbnQsIGVzcF9kZXYsIDApOwotCQotCS8qIERvIGNvbW1hbmQgdHJhbnNmZXIgd2l0aCBwcm9ncmFtbWVkIEkvTyAqLwotCWVzcC0+ZG9fcGlvX2NtZHMgPSAxOwotCQotCS8qIFJlcXVpcmVkIGZ1bmN0aW9ucyAqLwotCWVzcC0+ZG1hX2J5dGVzX3NlbnQgPSAmZG1hX2J5dGVzX3NlbnQ7Ci0JZXNwLT5kbWFfY2FuX3RyYW5zZmVyID0gJmRtYV9jYW5fdHJhbnNmZXI7Ci0JZXNwLT5kbWFfZHVtcF9zdGF0ZSA9ICZkbWFfZHVtcF9zdGF0ZTsKLQllc3AtPmRtYV9pbml0X3JlYWQgPSAmZG1hX2luaXRfcmVhZDsKLQllc3AtPmRtYV9pbml0X3dyaXRlID0gJmRtYV9pbml0X3dyaXRlOwotCWVzcC0+ZG1hX2ludHNfb2ZmID0gJmRtYV9pbnRzX29mZjsKLQllc3AtPmRtYV9pbnRzX29uID0gJmRtYV9pbnRzX29uOwotCWVzcC0+ZG1hX2lycV9wID0gJmRtYV9pcnFfcDsKLQllc3AtPmRtYV9wb3J0c19wID0gJmRtYV9wb3J0c19wOwotCWVzcC0+ZG1hX3NldHVwID0gJmRtYV9zZXR1cDsKK3N0YXRpYyB2b2lkIGphenpfZXNwX2RtYV9kcmFpbihzdHJ1Y3QgZXNwICplc3ApCit7CisJLyogbm90aGluZyB0byBkbyAqLworfQogCi0JLyogT3B0aW9uYWwgZnVuY3Rpb25zICovCi0JZXNwLT5kbWFfYmFycmllciA9IE5VTEw7Ci0JZXNwLT5kbWFfZHJhaW4gPSBOVUxMOwotCWVzcC0+ZG1hX2ludmFsaWRhdGUgPSBOVUxMOwotCWVzcC0+ZG1hX2lycV9lbnRyeSA9IE5VTEw7Ci0JZXNwLT5kbWFfaXJxX2V4aXQgPSBOVUxMOwotCWVzcC0+ZG1hX3BvbGwgPSBOVUxMOwotCWVzcC0+ZG1hX3Jlc2V0ID0gTlVMTDsKLQllc3AtPmRtYV9sZWRfb2ZmID0gJmRtYV9sZWRfb2ZmOwotCWVzcC0+ZG1hX2xlZF9vbiA9ICZkbWFfbGVkX29uOwotCQotCS8qIHZpcnR1YWwgRE1BIGZ1bmN0aW9ucyAqLwotCWVzcC0+ZG1hX21tdV9nZXRfc2NzaV9vbmUgPSAmZG1hX21tdV9nZXRfc2NzaV9vbmU7Ci0JZXNwLT5kbWFfbW11X2dldF9zY3NpX3NnbCA9ICZkbWFfbW11X2dldF9zY3NpX3NnbDsKLQllc3AtPmRtYV9tbXVfcmVsZWFzZV9zY3NpX29uZSA9ICZkbWFfbW11X3JlbGVhc2Vfc2NzaV9vbmU7Ci0JZXNwLT5kbWFfbW11X3JlbGVhc2Vfc2NzaV9zZ2wgPSAmZG1hX21tdV9yZWxlYXNlX3Njc2lfc2dsOwotCWVzcC0+ZG1hX2FkdmFuY2Vfc2cgPSAmZG1hX2FkdmFuY2Vfc2c7CitzdGF0aWMgdm9pZCBqYXp6X2VzcF9kbWFfaW52YWxpZGF0ZShzdHJ1Y3QgZXNwICplc3ApCit7CisJdmRtYV9kaXNhYmxlICgoaW50KWVzcC0+ZG1hX3JlZ3MpOworfQogCitzdGF0aWMgdm9pZCBqYXp6X2VzcF9zZW5kX2RtYV9jbWQoc3RydWN0IGVzcCAqZXNwLCB1MzIgYWRkciwgdTMyIGVzcF9jb3VudCwKKwkJCQkgIHUzMiBkbWFfY291bnQsIGludCB3cml0ZSwgdTggY21kKQoreworCUJVR19PTighKGNtZCAmIEVTUF9DTURfRE1BKSk7CiAKLQkvKiBTQ1NJIGNoaXAgc3BlZWQgKi8KKwlqYXp6X2VzcF93cml0ZTgoZXNwLCAoZXNwX2NvdW50ID4+IDApICYgMHhmZiwgRVNQX1RDTE9XKTsKKwlqYXp6X2VzcF93cml0ZTgoZXNwLCAoZXNwX2NvdW50ID4+IDgpICYgMHhmZiwgRVNQX1RDTUVEKTsKKwl2ZG1hX2Rpc2FibGUgKChpbnQpZXNwLT5kbWFfcmVncyk7CisJaWYgKHdyaXRlKQorCQl2ZG1hX3NldF9tb2RlICgoaW50KWVzcC0+ZG1hX3JlZ3MsIERNQV9NT0RFX1JFQUQpOworCWVsc2UKKwkJdmRtYV9zZXRfbW9kZSAoKGludCllc3AtPmRtYV9yZWdzLCBETUFfTU9ERV9XUklURSk7CisKKwl2ZG1hX3NldF9hZGRyICgoaW50KWVzcC0+ZG1hX3JlZ3MsIGFkZHIpOworCXZkbWFfc2V0X2NvdW50ICgoaW50KWVzcC0+ZG1hX3JlZ3MsIGRtYV9jb3VudCk7CisJdmRtYV9lbmFibGUgKChpbnQpZXNwLT5kbWFfcmVncyk7CisKKwlzY3NpX2VzcF9jbWQoZXNwLCBjbWQpOworfQorCitzdGF0aWMgaW50IGphenpfZXNwX2RtYV9lcnJvcihzdHJ1Y3QgZXNwICplc3ApCit7CisJdTMyIGVuYWJsZSA9IHZkbWFfZ2V0X2VuYWJsZSgoaW50KWVzcC0+ZG1hX3JlZ3MpOworCisJaWYgKGVuYWJsZSAmIChSNDAzMF9NRU1fSU5UUnxSNDAzMF9BRERSX0lOVFIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGVzcF9kcml2ZXJfb3BzIGphenpfZXNwX29wcyA9IHsKKwkuZXNwX3dyaXRlOAk9CWphenpfZXNwX3dyaXRlOCwKKwkuZXNwX3JlYWQ4CT0JamF6el9lc3BfcmVhZDgsCisJLm1hcF9zaW5nbGUJPQlqYXp6X2VzcF9tYXBfc2luZ2xlLAorCS5tYXBfc2cJCT0JamF6el9lc3BfbWFwX3NnLAorCS51bm1hcF9zaW5nbGUJPQlqYXp6X2VzcF91bm1hcF9zaW5nbGUsCisJLnVubWFwX3NnCT0JamF6el9lc3BfdW5tYXBfc2csCisJLmlycV9wZW5kaW5nCT0JamF6el9lc3BfaXJxX3BlbmRpbmcsCisJLnJlc2V0X2RtYQk9CWphenpfZXNwX3Jlc2V0X2RtYSwKKwkuZG1hX2RyYWluCT0JamF6el9lc3BfZG1hX2RyYWluLAorCS5kbWFfaW52YWxpZGF0ZQk9CWphenpfZXNwX2RtYV9pbnZhbGlkYXRlLAorCS5zZW5kX2RtYV9jbWQJPQlqYXp6X2VzcF9zZW5kX2RtYV9jbWQsCisJLmRtYV9lcnJvcgk9CWphenpfZXNwX2RtYV9lcnJvciwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVzcF9qYXp6X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50ID0gJnNjc2lfZXNwX3RlbXBsYXRlOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJc3RydWN0IGVzcCAqZXNwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBlcnI7CisKKwlob3N0ID0gc2NzaV9ob3N0X2FsbG9jKHRwbnQsIHNpemVvZihzdHJ1Y3QgZXNwKSk7CisKKwllcnIgPSAtRU5PTUVNOworCWlmICghaG9zdCkKKwkJZ290byBmYWlsOworCisJaG9zdC0+bWF4X2lkID0gODsKKwllc3AgPSBob3N0X3RvX2VzcChob3N0KTsKKworCWVzcC0+aG9zdCA9IGhvc3Q7CisJZXNwLT5kZXYgPSBkZXY7CisJZXNwLT5vcHMgPSAmamF6el9lc3Bfb3BzOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlnb3RvIGZhaWxfdW5saW5rOworCisJZXNwLT5yZWdzID0gKHZvaWQgX19pb21lbSAqKXJlcy0+c3RhcnQ7CisJaWYgKCFlc3AtPnJlZ3MpCisJCWdvdG8gZmFpbF91bmxpbms7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKCFyZXMpCisJCWdvdG8gZmFpbF91bmxpbms7CisKKwllc3AtPmRtYV9yZWdzID0gKHZvaWQgX19pb21lbSAqKXJlcy0+c3RhcnQ7CisKKwllc3AtPmNvbW1hbmRfYmxvY2sgPSBkbWFfYWxsb2NfY29oZXJlbnQoZXNwLT5kZXYsIDE2LAorCQkJCQkJJmVzcC0+Y29tbWFuZF9ibG9ja19kbWEsCisJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWVzcC0+Y29tbWFuZF9ibG9jaykKKwkJZ290byBmYWlsX3VubWFwX3JlZ3M7CisKKwlob3N0LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CisJZXJyID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBzY3NpX2VzcF9pbnRyLCBJUlFGX1NIQVJFRCwgIkVTUCIsIGVzcCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZmFpbF91bm1hcF9jb21tYW5kX2Jsb2NrOworCisJZXNwLT5zY3NpX2lkID0gNzsKKwllc3AtPmhvc3QtPnRoaXNfaWQgPSBlc3AtPnNjc2lfaWQ7CisJZXNwLT5zY3NpX2lkX21hc2sgPSAoMSA8PCBlc3AtPnNjc2lfaWQpOwogCWVzcC0+Y2ZyZXEgPSA0MDAwMDAwMDsKIAotCS8qIAotCSAqIHdlIGRvbid0IGdpdmUgdGhlIGFkZHJlc3Mgb2YgRE1BIGNoYW5uZWwsIGJ1dCB0aGUgbnVtYmVyCi0JICogb2YgRE1BIGNoYW5uZWwsIHNvIHdlIGNhbiB1c2UgdGhlIGphenogRE1BIGZ1bmN0aW9ucwotCSAqIAotCSAqLwotCWVzcC0+ZHJlZ3MgPSAodm9pZCAqKSBKQVpaX1NDU0lfRE1BOwotCQotCS8qIEVTUCByZWdpc3RlciBiYXNlICovCi0JZXNwLT5lcmVncyA9IChzdHJ1Y3QgRVNQX3JlZ3MgKikoSkFaWl9TQ1NJX0JBU0UpOwotCQotCS8qIFNldCB0aGUgY29tbWFuZCBidWZmZXIgKi8KLQllc3AtPmVzcF9jb21tYW5kID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiljbWRfYnVmZmVyOwotCQotCS8qIGdldCB2aXJ0dWFsIGRtYSBhZGRyZXNzIGZvciBjb21tYW5kIGJ1ZmZlciAqLwotCWVzcC0+ZXNwX2NvbW1hbmRfZHZtYSA9IHZkbWFfYWxsb2MoQ1BIWVNBRERSKGNtZF9idWZmZXIpLCBzaXplb2YgKGNtZF9idWZmZXIpKTsKLQkKLQllc3AtPmlycSA9IEpBWlpfU0NTSV9JUlE7Ci0JcmVxdWVzdF9pcnEoSkFaWl9TQ1NJX0lSUSwgZXNwX2ludHIsIElSUUZfRElTQUJMRUQsICJKQVpaIFNDU0kiLAotCSAgICAgICAgICAgIGVzcC0+ZWhvc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGVzcCk7CiAKLQkvKgotCSAqIEZJWE1FLCBsb29rIGlmIHRoZSBzY3NpIGlkIGlzIGF2YWlsYWJsZSBmcm9tIE5WUkFNCi0JICovCi0JZXNwLT5zY3NpX2lkID0gNzsKLQkJCi0JLyogQ2hlY2sgZm9yIGRpZmZlcmVudGlhbCBTQ1NJLWJ1cyAqLwotCS8qIFdoYXQgaXMgdGhpcyBzdHVmZj8gKi8KLQllc3AtPmRpZmYgPSAwOworCWVyciA9IHNjc2lfZXNwX3JlZ2lzdGVyKGVzcCwgJmRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfZnJlZV9pcnE7CiAKLQllc3BfaW5pdGlhbGl6ZShlc3ApOwotCQotCXByaW50aygiRVNQOiBUb3RhbCBvZiAlZCBFU1AgaG9zdHMgZm91bmQsICVkIGFjdHVhbGx5IGluIHVzZS5cbiIsIG5lc3BzLGVzcHNfaW5fdXNlKTsKLQllc3BzX3J1bm5pbmcgPSBlc3BzX2luX3VzZTsKLQlyZXR1cm4gZXNwc19pbl91c2U7Ci0gICAgfQotICAgIHJldHVybiAwOworCXJldHVybiAwOworCitmYWlsX2ZyZWVfaXJxOgorCWZyZWVfaXJxKGhvc3QtPmlycSwgZXNwKTsKK2ZhaWxfdW5tYXBfY29tbWFuZF9ibG9jazoKKwlkbWFfZnJlZV9jb2hlcmVudChlc3AtPmRldiwgMTYsCisJCQkgIGVzcC0+Y29tbWFuZF9ibG9jaywKKwkJCSAgZXNwLT5jb21tYW5kX2Jsb2NrX2RtYSk7CitmYWlsX3VubWFwX3JlZ3M6CitmYWlsX3VubGluazoKKwlzY3NpX2hvc3RfcHV0KGhvc3QpOworZmFpbDoKKwlyZXR1cm4gZXJyOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBETUEgRnVuY3Rpb25zICovCi1zdGF0aWMgaW50IGRtYV9ieXRlc19zZW50KHN0cnVjdCBOQ1JfRVNQICplc3AsIGludCBmaWZvX2NvdW50KQorc3RhdGljIGludCBfX2RldmV4aXQgZXNwX2phenpfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLSAgICByZXR1cm4gZmlmb19jb3VudDsKKwlzdHJ1Y3QgZXNwICplc3AgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZXNwLT5ob3N0LT5pcnE7CisKKwlzY3NpX2VzcF91bnJlZ2lzdGVyKGVzcCk7CisKKwlmcmVlX2lycShpcnEsIGVzcCk7CisJZG1hX2ZyZWVfY29oZXJlbnQoZXNwLT5kZXYsIDE2LAorCQkJICBlc3AtPmNvbW1hbmRfYmxvY2ssCisJCQkgIGVzcC0+Y29tbWFuZF9ibG9ja19kbWEpOworCisJc2NzaV9ob3N0X3B1dChlc3AtPmhvc3QpOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG1hX2Nhbl90cmFuc2ZlcihzdHJ1Y3QgTkNSX0VTUCAqZXNwLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcCkKLXsKLSAgICAvKgotICAgICAqIG1heGltdW0gRE1BIHNpemUgaXMgMU1CCi0gICAgICovCi0gICAgdW5zaWduZWQgbG9uZyBzeiA9IHNwLT5TQ3AudGhpc19yZXNpZHVhbDsKLSAgICBpZihzeiA+IDB4MTAwMDAwKQotCXN6ID0gMHgxMDAwMDA7Ci0gICAgcmV0dXJuIHN6OwotfQotCi1zdGF0aWMgdm9pZCBkbWFfZHVtcF9zdGF0ZShzdHJ1Y3QgTkNSX0VTUCAqZXNwKQotewotICAgIAotICAgIEVTUExPRygoImVzcCVkOiBkbWEgLS0gZW5hYmxlIDwlMDh4PiByZXNpZHVlIDwlMDh4XG4iLAotCSAgICBlc3AtPmVzcF9pZCwgdmRtYV9nZXRfZW5hYmxlKChpbnQpZXNwLT5kcmVncyksIHZkbWFfZ2V0X3Jlc2lkdWUoKGludCllc3AtPmRyZWdzKSkpOwotfQotCi1zdGF0aWMgdm9pZCBkbWFfaW5pdF9yZWFkKHN0cnVjdCBOQ1JfRVNQICplc3AsIF9fdTMyIHZhZGRyZXNzLCBpbnQgbGVuZ3RoKQotewotICAgIGRtYV9jYWNoZV93YmFja19pbnYgKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2ZG1hX2xvZzJwaHlzKHZhZGRyZXNzKSksIGxlbmd0aCk7Ci0gICAgdmRtYV9kaXNhYmxlICgoaW50KWVzcC0+ZHJlZ3MpOwotICAgIHZkbWFfc2V0X21vZGUgKChpbnQpZXNwLT5kcmVncywgRE1BX01PREVfUkVBRCk7Ci0gICAgdmRtYV9zZXRfYWRkciAoKGludCllc3AtPmRyZWdzLCB2YWRkcmVzcyk7Ci0gICAgdmRtYV9zZXRfY291bnQgKChpbnQpZXNwLT5kcmVncywgbGVuZ3RoKTsKLSAgICB2ZG1hX2VuYWJsZSAoKGludCllc3AtPmRyZWdzKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hX2luaXRfd3JpdGUoc3RydWN0IE5DUl9FU1AgKmVzcCwgX191MzIgdmFkZHJlc3MsIGludCBsZW5ndGgpCi17Ci0gICAgZG1hX2NhY2hlX3diYWNrX2ludiAoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZkbWFfbG9nMnBoeXModmFkZHJlc3MpKSwgbGVuZ3RoKTsgICAgCi0gICAgdmRtYV9kaXNhYmxlICgoaW50KWVzcC0+ZHJlZ3MpOyAgICAKLSAgICB2ZG1hX3NldF9tb2RlICgoaW50KWVzcC0+ZHJlZ3MsIERNQV9NT0RFX1dSSVRFKTsKLSAgICB2ZG1hX3NldF9hZGRyICgoaW50KWVzcC0+ZHJlZ3MsIHZhZGRyZXNzKTsKLSAgICB2ZG1hX3NldF9jb3VudCAoKGludCllc3AtPmRyZWdzLCBsZW5ndGgpOwotICAgIHZkbWFfZW5hYmxlICgoaW50KWVzcC0+ZHJlZ3MpOyAgICAKLX0KLQotc3RhdGljIHZvaWQgZG1hX2ludHNfb2ZmKHN0cnVjdCBOQ1JfRVNQICplc3ApCi17Ci0gICAgZGlzYWJsZV9pcnEoZXNwLT5pcnEpOwotfQotCi1zdGF0aWMgdm9pZCBkbWFfaW50c19vbihzdHJ1Y3QgTkNSX0VTUCAqZXNwKQotewotICAgIGVuYWJsZV9pcnEoZXNwLT5pcnEpOwotfQotCi1zdGF0aWMgaW50IGRtYV9pcnFfcChzdHJ1Y3QgTkNSX0VTUCAqZXNwKQotewotICAgIHJldHVybiAoZXNwX3JlYWQoZXNwLT5lcmVncy0+ZXNwX3N0YXR1cykgJiBFU1BfU1RBVF9JTlRSKTsKLX0KLQotc3RhdGljIGludCBkbWFfcG9ydHNfcChzdHJ1Y3QgTkNSX0VTUCAqZXNwKQotewotICAgIGludCBlbmFibGUgPSB2ZG1hX2dldF9lbmFibGUoKGludCllc3AtPmRyZWdzKTsKLSAgICAKLSAgICByZXR1cm4gKGVuYWJsZSAmIFI0MDMwX0NITkxfRU5BQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hX3NldHVwKHN0cnVjdCBOQ1JfRVNQICplc3AsIF9fdTMyIGFkZHIsIGludCBjb3VudCwgaW50IHdyaXRlKQotewotICAgIC8qIAotICAgICAqIE9uIHRoZSBTcGFyYywgRE1BX1NUX1dSSVRFIG1lYW5zICJtb3ZlIGRhdGEgZnJvbSBkZXZpY2UgdG8gbWVtb3J5IgotICAgICAqIHNvIHdoZW4gKHdyaXRlKSBpcyB0cnVlLCBpdCBhY3R1YWxseSBtZWFucyBSRUFEIQotICAgICAqLwotICAgIGlmKHdyaXRlKXsKLQlkbWFfaW5pdF9yZWFkKGVzcCwgYWRkciwgY291bnQpOwotICAgIH0gZWxzZSB7Ci0JZG1hX2luaXRfd3JpdGUoZXNwLCBhZGRyLCBjb3VudCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBkbWFfbW11X2dldF9zY3NpX29uZSAoc3RydWN0IE5DUl9FU1AgKmVzcCwgc3RydWN0IHNjc2lfY21uZCAqc3ApCi17Ci0gICAgc3AtPlNDcC5oYXZlX2RhdGFfaW4gPSB2ZG1hX2FsbG9jKENQSFlTQUREUihzcC0+U0NwLmJ1ZmZlciksIHNwLT5TQ3AudGhpc19yZXNpZHVhbCk7Ci0gICAgc3AtPlNDcC5wdHIgPSAoY2hhciAqKSgodW5zaWduZWQgbG9uZylzcC0+U0NwLmhhdmVfZGF0YV9pbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYV9tbXVfZ2V0X3Njc2lfc2dsIChzdHJ1Y3QgTkNSX0VTUCAqZXNwLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcCkKLXsKLSAgICBpbnQgc3ogPSBzcC0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWw7Ci0gICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgc3AtPlNDcC5idWZmZXI7Ci0gICAgCi0gICAgd2hpbGUgKHN6ID49IDApIHsKLQlzZ1tzel0uZG1hX2FkZHJlc3MgPSB2ZG1hX2FsbG9jKENQSFlTQUREUihwYWdlX2FkZHJlc3Moc2dbc3pdLnBhZ2UpICsgc2dbc3pdLm9mZnNldCksIHNnW3N6XS5sZW5ndGgpOwotCXN6LS07Ci0gICAgfQotICAgIHNwLT5TQ3AucHRyPShjaGFyICopKHNwLT5TQ3AuYnVmZmVyLT5kbWFfYWRkcmVzcyk7Ci19ICAgIAotCi1zdGF0aWMgdm9pZCBkbWFfbW11X3JlbGVhc2Vfc2NzaV9vbmUgKHN0cnVjdCBOQ1JfRVNQICplc3AsIHN0cnVjdCBzY3NpX2NtbmQgKnNwKQotewotICAgIHZkbWFfZnJlZShzcC0+U0NwLmhhdmVfZGF0YV9pbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYV9tbXVfcmVsZWFzZV9zY3NpX3NnbCAoc3RydWN0IE5DUl9FU1AgKmVzcCwgc3RydWN0IHNjc2lfY21uZCAqc3ApCi17Ci0gICAgaW50IHN6ID0gc3AtPnVzZV9zZyAtIDE7Ci0gICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzcC0+cmVxdWVzdF9idWZmZXI7Ci0JCQkKLSAgICB3aGlsZShzeiA+PSAwKSB7Ci0JdmRtYV9mcmVlKHNnW3N6XS5kbWFfYWRkcmVzcyk7Ci0Jc3otLTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYV9hZHZhbmNlX3NnIChzdHJ1Y3Qgc2NzaV9jbW5kICpzcCkKLXsKLSAgICBzcC0+U0NwLnB0ciA9IChjaGFyICopKHNwLT5TQ3AuYnVmZmVyLT5kbWFfYWRkcmVzcyk7Ci19Ci0KLSNkZWZpbmUgSkFaWl9IRENfTEVEICAgMHhlMDAwZDEwMCAvKiBGSVhNRSwgZmluZCBjb3JyZWN0IGFkZHJlc3MgKi8KLQotc3RhdGljIHZvaWQgZG1hX2xlZF9vZmYoc3RydWN0IE5DUl9FU1AgKmVzcCkKLXsKLSNpZiAwICAgIAotICAgICoodW5zaWduZWQgY2hhciAqKUpBWlpfSERDX0xFRCA9IDA7Ci0jZW5kaWYgICAgCi19Ci0KLXN0YXRpYyB2b2lkIGRtYV9sZWRfb24oc3RydWN0IE5DUl9FU1AgKmVzcCkKLXsgICAgCi0jaWYgMCAgICAKLSAgICAqKHVuc2lnbmVkIGNoYXIgKilKQVpaX0hEQ19MRUQgPSAxOwotI2VuZGlmICAgIAotfQotCi1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7Ci0JLnByb2NfbmFtZQkJPSAiamF6el9lc3AiLAotCS5wcm9jX2luZm8JCT0gZXNwX3Byb2NfaW5mbywKLQkubmFtZQkJCT0gIkVTUCAxMDAvMTAwYS8yMDAiLAotCS5kZXRlY3QJCQk9IGphenpfZXNwX2RldGVjdCwKLQkuc2xhdmVfYWxsb2MJCT0gZXNwX3NsYXZlX2FsbG9jLAotCS5zbGF2ZV9kZXN0cm95CQk9IGVzcF9zbGF2ZV9kZXN0cm95LAotCS5yZWxlYXNlCQk9IGphenpfZXNwX3JlbGVhc2UsCi0JLmluZm8JCQk9IGVzcF9pbmZvLAotCS5xdWV1ZWNvbW1hbmQJCT0gZXNwX3F1ZXVlLAotCS5laF9hYm9ydF9oYW5kbGVyCT0gZXNwX2Fib3J0LAotCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IGVzcF9yZXNldCwKLQkuY2FuX3F1ZXVlCQk9IDcsCi0JLnRoaXNfaWQJCT0gNywKLQkuc2dfdGFibGVzaXplCQk9IFNHX0FMTCwKLQkuY21kX3Blcl9sdW4JCT0gMSwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gRElTQUJMRV9DTFVTVEVSSU5HLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXNwX2phenpfZHJpdmVyID0geworCS5wcm9iZQkJPSBlc3BfamF6el9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGVzcF9qYXp6X3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiamF6el9lc3AiLAorCX0sCiB9OwotI2luY2x1ZGUgInNjc2lfbW9kdWxlLmMiCisKK3N0YXRpYyBpbnQgX19pbml0IGphenpfZXNwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlc3BfamF6el9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgamF6el9lc3BfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlc3BfamF6el9kcml2ZXIpOworfQorCitNT0RVTEVfREVTQ1JJUFRJT04oIkpBWlogRVNQIFNDU0kgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJUaG9tYXMgQm9nZW5kb2VyZmVyICh0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworCittb2R1bGVfaW5pdChqYXp6X2VzcF9pbml0KTsKK21vZHVsZV9leGl0KGphenpfZXNwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwppbmRleCA4OTdhNWUyLi5iNGI1MjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwpAQCAtMjMsNiArMjMsOCBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorCiAjaW5jbHVkZSAic2FzX2ludGVybmFsLmgiCiAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgpAQCAtMTg0LDcgKzE4Niw3IEBACiAJbGlzdF9hZGRfdGFpbCgmdGFzay0+bGlzdCwgJmNvcmUtPnRhc2tfcXVldWUpOwogCWNvcmUtPnRhc2tfcXVldWVfc2l6ZSArPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvcmUtPnRhc2tfcXVldWVfbG9jaywgZmxhZ3MpOwotCXVwKCZjb3JlLT5xdWV1ZV90aHJlYWRfc2VtYSk7CisJd2FrZV91cF9wcm9jZXNzKGNvcmUtPnF1ZXVlX3RocmVhZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgxOSw3ICs4MjEsNyBAQAogCXN0cnVjdCBzYXNfaW50ZXJuYWwgKmkgPSB0b19zYXNfaW50ZXJuYWwoY29yZS0+c2hvc3QtPnRyYW5zcG9ydHQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmUtPnRhc2tfcXVldWVfbG9jaywgZmxhZ3MpOwotCXdoaWxlICghY29yZS0+cXVldWVfdGhyZWFkX2tpbGwgJiYKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJgogCSAgICAgICAhbGlzdF9lbXB0eSgmY29yZS0+dGFza19xdWV1ZSkpIHsKIAogCQljYW5fcXVldWUgPSBzYXNfaGEtPmxsZGRfcXVldWVfc2l6ZSAtIGNvcmUtPnRhc2tfcXVldWVfc2l6ZTsKQEAgLTg1OCw4ICs4NjAsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvcmUtPnRhc2tfcXVldWVfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKHF1ZXVlX3RoX2NvbXApOwotCiAvKioKICAqIHNhc19xdWV1ZV90aHJlYWQgLS0gVGhlIFRhc2sgQ29sbGVjdG9yIHRocmVhZAogICogQF9zYXNfaGE6IHBvaW50ZXIgdG8gc3RydWN0IHNhc19oYQpAQCAtODY3LDQwICs4NjcsMzMgQEAKIHN0YXRpYyBpbnQgc2FzX3F1ZXVlX3RocmVhZCh2b2lkICpfc2FzX2hhKQogewogCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSBfc2FzX2hhOwotCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwogCi0JZGFlbW9uaXplKCJzYXNfcXVldWVfJWQiLCBjb3JlLT5zaG9zdC0+aG9zdF9ubyk7CiAJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CiAKLQljb21wbGV0ZSgmcXVldWVfdGhfY29tcCk7Ci0KIAl3aGlsZSAoMSkgewotCQlkb3duX2ludGVycnVwdGlibGUoJmNvcmUtPnF1ZXVlX3RocmVhZF9zZW1hKTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGUoKTsKIAkJc2FzX3F1ZXVlKHNhc19oYSk7Ci0JCWlmIChjb3JlLT5xdWV1ZV90aHJlYWRfa2lsbCkKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWJyZWFrOwogCX0KIAotCWNvbXBsZXRlKCZxdWV1ZV90aF9jb21wKTsKLQogCXJldHVybiAwOwogfQogCiBpbnQgc2FzX2luaXRfcXVldWUoc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNhc19oYSkKIHsKLQlpbnQgcmVzOwogCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwogCiAJc3Bpbl9sb2NrX2luaXQoJmNvcmUtPnRhc2tfcXVldWVfbG9jayk7CiAJY29yZS0+dGFza19xdWV1ZV9zaXplID0gMDsKIAlJTklUX0xJU1RfSEVBRCgmY29yZS0+dGFza19xdWV1ZSk7Ci0JaW5pdF9NVVRFWF9MT0NLRUQoJmNvcmUtPnF1ZXVlX3RocmVhZF9zZW1hKTsKIAotCXJlcyA9IGtlcm5lbF90aHJlYWQoc2FzX3F1ZXVlX3RocmVhZCwgc2FzX2hhLCAwKTsKLQlpZiAocmVzID49IDApCi0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJnF1ZXVlX3RoX2NvbXApOwotCi0JcmV0dXJuIHJlcyA8IDAgPyByZXMgOiAwOworCWNvcmUtPnF1ZXVlX3RocmVhZCA9IGt0aHJlYWRfcnVuKHNhc19xdWV1ZV90aHJlYWQsIHNhc19oYSwKKwkJCQkJICJzYXNfcXVldWVfJWQiLCBjb3JlLT5zaG9zdC0+aG9zdF9ubyk7CisJaWYgKElTX0VSUihjb3JlLT5xdWV1ZV90aHJlYWQpKQorCQlyZXR1cm4gUFRSX0VSUihjb3JlLT5xdWV1ZV90aHJlYWQpOworCXJldHVybiAwOwogfQogCiB2b2lkIHNhc19zaHV0ZG93bl9xdWV1ZShzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhKQpAQCAtOTA5LDEwICs5MDIsNyBAQAogCXN0cnVjdCBzY3NpX2NvcmUgKmNvcmUgPSAmc2FzX2hhLT5jb3JlOwogCXN0cnVjdCBzYXNfdGFzayAqdGFzaywgKm47CiAKLQlpbml0X2NvbXBsZXRpb24oJnF1ZXVlX3RoX2NvbXApOwotCWNvcmUtPnF1ZXVlX3RocmVhZF9raWxsID0gMTsKLQl1cCgmY29yZS0+cXVldWVfdGhyZWFkX3NlbWEpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJnF1ZXVlX3RoX2NvbXApOworCWt0aHJlYWRfc3RvcChjb3JlLT5xdWV1ZV90aHJlYWQpOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZjb3JlLT50YXNrX3F1ZXVlKSkKIAkJU0FTX0RQUklOVEsoIkhBOiAlbGx4OiBzY3NpIGNvcmUgdGFzayBxdWV1ZSBpcyBOT1QgZW1wdHkhP1xuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzcnAuYyBiL2RyaXZlcnMvc2NzaS9saWJzcnAuYwppbmRleCA1NjMxYzE5Li43MzI0NDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic3JwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNycC5jCkBAIC0yNTQsNiArMjU0LDcgQEAKIAogCQlzZ19pbml0X29uZSgmZHVtbXksIG1kLCBpZC0+dGFibGVfZGVzYy5sZW4pOwogCQlzZ19kbWFfYWRkcmVzcygmZHVtbXkpID0gdG9rZW47CisJCXNnX2RtYV9sZW4oJmR1bW15KSA9IGlkLT50YWJsZV9kZXNjLmxlbjsKIAkJZXJyID0gcmRtYV9pbyhzYywgJmR1bW15LCAxLCAmaWQtPnRhYmxlX2Rlc2MsIDEsIERNQV9UT19ERVZJQ0UsCiAJCQkgICAgICBpZC0+dGFibGVfZGVzYy5sZW4pOwogCQlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKaW5kZXggYTdkZTBiYy4uODJlOGY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtMjcsMTAgKzI3LDYgQEAKIAkJCQkJICAgcmVxdWVzdHMgKi8KICNkZWZpbmUgTFBGQ19NQVhfTlNfUkVUUlkJMwkvKiBOdW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgdG8gY29udGFjdAogCQkJCQkgICB0aGUgTmFtZVNlcnZlciAgYmVmb3JlIGdpdmluZyB1cC4gKi8KLSNkZWZpbmUgTFBGQ19ERlRfSEJBX1FfREVQVEgJMjA0OAkvKiBtYXggY21kcyBwZXIgaGJhICovCi0jZGVmaW5lIExQRkNfTENfSEJBX1FfREVQVEgJMTAyNAkvKiBtYXggY21kcyBwZXIgbG93IGNvc3QgaGJhICovCi0jZGVmaW5lIExQRkNfTFAxMDFfSEJBX1FfREVQVEgJMTI4CS8qIG1heCBjbWRzIHBlciBsb3cgY29zdCBoYmEgKi8KLQogI2RlZmluZSBMUEZDX0NNRF9QRVJfTFVOCTMJLyogbWF4IG91dHN0YW5kaW5nIGNtZHMgcGVyIGx1biAqLwogI2RlZmluZSBMUEZDX1NHX1NFR19DTlQJCTY0CS8qIHNnIGVsZW1lbnQgY291bnQgcGVyIHNjc2kgY21uZCAqLwogI2RlZmluZSBMUEZDX0lPQ0JfTElTVF9DTlQJMjI1MAkvKiBsaXN0IG9mIElPQ0JzIGZvciBmYXN0LXBhdGggdXNhZ2UuICovCkBAIC0yNDQsMjggKzI0MCwyMyBAQAogI2RlZmluZSBGQ19GQUJSSUMgICAgICAgICAgICAgICAweDEwMAkvKiBXZSBhcmUgZmFicmljIGF0dGFjaGVkICovCiAjZGVmaW5lIEZDX0VTVEFCTElTSF9MSU5LICAgICAgIDB4MjAwCS8qIFJlZXN0YWJsaXNoIExpbmsgKi8KICNkZWZpbmUgRkNfUlNDTl9ESVNDT1ZFUlkgICAgICAgMHg0MDAJLyogQXV0aGVudGljYXRlIGFsbCBkZXZpY2VzIGFmdGVyIFJTQ04qLworI2RlZmluZSBGQ19CTE9DS19NR01UX0lPICAgICAgICAweDgwMCAgIC8qIERvbid0IGFsbG93IG1nbXQgbWJ4IG9yIGlvY2IgY21kcyAqLwogI2RlZmluZSBGQ19MT0FESU5HCQkweDEwMDAJLyogSEJBIGluIHByb2Nlc3Mgb2YgbG9hZGluZyBkcnZyICovCiAjZGVmaW5lIEZDX1VOTE9BRElORwkJMHgyMDAwCS8qIEhCQSBpbiBwcm9jZXNzIG9mIHVubG9hZGluZyBkcnZyICovCiAjZGVmaW5lIEZDX1NDU0lfU0NBTl9UTU8gICAgICAgIDB4NDAwMAkvKiBzY3NpIHNjYW4gdGltZXIgcnVubmluZyAqLwogI2RlZmluZSBGQ19BQk9SVF9ESVNDT1ZFUlkgICAgICAweDgwMDAJLyogd2Ugd2FudCB0byBhYm9ydCBkaXNjb3ZlcnkgKi8KICNkZWZpbmUgRkNfTkRJU0NfQUNUSVZFICAgICAgICAgMHgxMDAwMAkvKiBOUG9ydCBkaXNjb3ZlcnkgYWN0aXZlICovCiAjZGVmaW5lIEZDX0JZUEFTU0VEX01PREUgICAgICAgIDB4MjAwMDAJLyogTlBvcnQgaXMgaW4gYnlwYXNzZWQgbW9kZSAqLworI2RlZmluZSBGQ19MT09QQkFDS19NT0RFICAgICAgICAweDQwMDAwCS8qIE5Qb3J0IGlzIGluIExvb3BiYWNrIG1vZGUgKi8KKwkJCQkJLyogVGhpcyBmbGFnIGlzIHNldCB3aGlsZSBpc3N1aW5nICovCisJCQkJCS8qIElOSVRfTElOSyBtYWlsYm94IGNvbW1hbmQgKi8KKyNkZWZpbmUgRkNfSUdOT1JFX0VSQVRUICAgICAgICAgMHg4MDAwMAkvKiBpbnRyIGhhbmRsZXIgc2hvdWxkIGlnbm9yZSBFUkFUVCAqLwogCiAJdWludDMyX3QgZmNfdG9wb2xvZ3k7CS8qIGxpbmsgdG9wb2xvZ3ksIGZyb20gTElOSyBJTklUICovCiAKIAlzdHJ1Y3QgbHBmY19zdGF0cyBmY19zdGF0OwogCi0JLyogVGhlc2UgYXJlIHRoZSBoZWFkL3RhaWwgcG9pbnRlcnMgZm9yIHRoZSBiaW5kLCBwbG9naSwgYWRpc2MsIHVubWFwLAotCSAqICBhbmQgbWFwIGxpc3RzLiAgVGhlaXIgY291bnRlcnMgYXJlIGltbWVkaWF0ZWx5IGZvbGxvd2luZy4KLQkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGZjX3Bsb2dpX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCBmY19hZGlzY19saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgZmNfcmVnbG9naW5fbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGZjX3BybGlfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGZjX25scHVubWFwX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCBmY19ubHBtYXBfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGZjX25wcl9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgZmNfdW51c2VkX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBmY19ub2RlczsKIAogCS8qIEtlZXAgY291bnRlcnMgZm9yIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBlYWNoIGxpc3QuICovCiAJdWludDE2X3QgZmNfcGxvZ2lfY250OwpAQCAtMzg3LDEzICszNzgsMTcgQEAKIAogCW1lbXBvb2xfdCAqbWJveF9tZW1fcG9vbDsKIAltZW1wb29sX3QgKm5scF9tZW1fcG9vbDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVidWZMaXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgY3Ryc3BidWZsaXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgcm5pZHJzcGJ1Zmxpc3Q7CiAKIAlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzIGxpbmtfc3RhdHM7CiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQKK2xwZmNfc2V0X2xvb3BiYWNrX2ZsYWcoc3RydWN0IGxwZmNfaGJhICpwaGJhKSB7CisJaWYgKHBoYmEtPmNmZ190b3BvbG9neSA9PSBGTEFHU19MT0NBTF9MQikKKwkJcGhiYS0+ZmNfZmxhZyB8PSBGQ19MT09QQkFDS19NT0RFOworCWVsc2UKKwkJcGhiYS0+ZmNfZmxhZyAmPSB+RkNfTE9PUEJBQ0tfTU9ERTsKK30KIAogc3RydWN0IHJuaWRyc3AgewogCXZvaWQgKmJ1ZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKaW5kZXggZjI0N2U3OC4uOTVmZTc3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTIwLDYgKzIwLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCkBAIC0yMTMsNiArMjE0LDcgQEAKIAlpbnQgbWJ4c3RhdHVzID0gTUJYRVJSX0VSUk9SOwogCiAJaWYgKChwaGJhLT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSB8fAorCSAgICAocGhiYS0+ZmNfZmxhZyAmIEZDX0JMT0NLX01HTVRfSU8pIHx8CiAJICAgIChwaGJhLT5oYmFfc3RhdGUgIT0gTFBGQ19IQkFfUkVBRFkpKQogCQlyZXR1cm4gLUVQRVJNOwogCkBAIC0yMzUsNiArMjM3LDcgQEAKIAkJCQkJCSAgICAgcGhiYS0+ZmNfcmF0b3YgKiAyKTsKIAl9CiAKKwlscGZjX3NldF9sb29wYmFja19mbGFnKHBoYmEpOwogCWlmIChtYnhzdGF0dXMgPT0gTUJYX1RJTUVPVVQpCiAJCXBtYm94cS0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKIAllbHNlCkBAIC0yNDcsMTggKzI1MCw2MSBAQAogfQogCiBzdGF0aWMgaW50CitscGZjX2RvX29mZmxpbmUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCB0eXBlKQoreworCXN0cnVjdCBjb21wbGV0aW9uIG9ubGluZV9jb21wbDsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmc7CisJc3RydWN0IGxwZmNfc2xpICpwc2xpOworCWludCBzdGF0dXMgPSAwOworCWludCBjbnQgPSAwOworCWludCBpOworCisJaW5pdF9jb21wbGV0aW9uKCZvbmxpbmVfY29tcGwpOworCWxwZmNfd29ya3FfcG9zdF9ldmVudChwaGJhLCAmc3RhdHVzLCAmb25saW5lX2NvbXBsLAorCQkJICAgICAgTFBGQ19FVlRfT0ZGTElORV9QUkVQKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZvbmxpbmVfY29tcGwpOworCisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCXBzbGkgPSAmcGhiYS0+c2xpOworCisJZm9yIChpID0gMDsgaSA8IHBzbGktPm51bV9yaW5nczsgaSsrKSB7CisJCXByaW5nID0gJnBzbGktPnJpbmdbaV07CisJCS8qIFRoZSBsaW5rZG93biBldmVudCB0YWtlcyAzMCBzZWNvbmRzIHRvIHRpbWVvdXQuICovCisJCXdoaWxlIChwcmluZy0+dHhjbXBscV9jbnQpIHsKKwkJCW1zbGVlcCgxMCk7CisJCQlpZiAoY250KysgPiAzMDAwKSB7CisJCQkJbHBmY19wcmludGZfbG9nKHBoYmEsCisJCQkJCUtFUk5fV0FSTklORywgTE9HX0lOSVQsCisJCQkJCSIlZDowNDY2IE91dHN0YW5kaW5nIElPIHdoZW4gIgorCQkJCQkiYnJpbmdpbmcgQWRhcHRlciBvZmZsaW5lXG4iLAorCQkJCQlwaGJhLT5icmRfbm8pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaW5pdF9jb21wbGV0aW9uKCZvbmxpbmVfY29tcGwpOworCWxwZmNfd29ya3FfcG9zdF9ldmVudChwaGJhLCAmc3RhdHVzLCAmb25saW5lX2NvbXBsLCB0eXBlKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZvbmxpbmVfY29tcGwpOworCisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBscGZjX3NlbGVjdGl2ZV9yZXNldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CiAJc3RydWN0IGNvbXBsZXRpb24gb25saW5lX2NvbXBsOwogCWludCBzdGF0dXMgPSAwOwogCi0JaW5pdF9jb21wbGV0aW9uKCZvbmxpbmVfY29tcGwpOwotCWxwZmNfd29ya3FfcG9zdF9ldmVudChwaGJhLCAmc3RhdHVzLCAmb25saW5lX2NvbXBsLAotCQkJICAgICAgTFBGQ19FVlRfT0ZGTElORSk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmb25saW5lX2NvbXBsKTsKKwlzdGF0dXMgPSBscGZjX2RvX29mZmxpbmUocGhiYSwgTFBGQ19FVlRfT0ZGTElORSk7CiAKIAlpZiAoc3RhdHVzICE9IDApCi0JCXJldHVybiAtRUlPOworCQlyZXR1cm4gc3RhdHVzOwogCiAJaW5pdF9jb21wbGV0aW9uKCZvbmxpbmVfY29tcGwpOwogCWxwZmNfd29ya3FfcG9zdF9ldmVudChwaGJhLCAmc3RhdHVzLCAmb25saW5lX2NvbXBsLApAQCAtMzI0LDIzICszNzAsMTkgQEAKIAogCWluaXRfY29tcGxldGlvbigmb25saW5lX2NvbXBsKTsKIAotCWlmKHN0cm5jbXAoYnVmLCAib25saW5lIiwgc2l6ZW9mKCJvbmxpbmUiKSAtIDEpID09IDApCisJaWYoc3RybmNtcChidWYsICJvbmxpbmUiLCBzaXplb2YoIm9ubGluZSIpIC0gMSkgPT0gMCkgewogCQlscGZjX3dvcmtxX3Bvc3RfZXZlbnQocGhiYSwgJnN0YXR1cywgJm9ubGluZV9jb21wbCwKIAkJCQkgICAgICBMUEZDX0VWVF9PTkxJTkUpOwotCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAib2ZmbGluZSIsIHNpemVvZigib2ZmbGluZSIpIC0gMSkgPT0gMCkKLQkJbHBmY193b3JrcV9wb3N0X2V2ZW50KHBoYmEsICZzdGF0dXMsICZvbmxpbmVfY29tcGwsCi0JCQkJICAgICAgTFBGQ19FVlRfT0ZGTElORSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm9ubGluZV9jb21wbCk7CisJfSBlbHNlIGlmIChzdHJuY21wKGJ1ZiwgIm9mZmxpbmUiLCBzaXplb2YoIm9mZmxpbmUiKSAtIDEpID09IDApCisJCXN0YXR1cyA9IGxwZmNfZG9fb2ZmbGluZShwaGJhLCBMUEZDX0VWVF9PRkZMSU5FKTsKIAllbHNlIGlmIChzdHJuY21wKGJ1ZiwgIndhcm0iLCBzaXplb2YoIndhcm0iKSAtIDEpID09IDApCi0JCWxwZmNfd29ya3FfcG9zdF9ldmVudChwaGJhLCAmc3RhdHVzLCAmb25saW5lX2NvbXBsLAotCQkJCSAgICAgIExQRkNfRVZUX1dBUk1fU1RBUlQpOwotIAllbHNlIGlmIChzdHJuY21wKGJ1ZiwgImVycm9yIiwgc2l6ZW9mKCJlcnJvciIpIC0gMSkgPT0gMCkKLQkJbHBmY193b3JrcV9wb3N0X2V2ZW50KHBoYmEsICZzdGF0dXMsICZvbmxpbmVfY29tcGwsCi0JCQkJICAgICAgTFBGQ19FVlRfS0lMTCk7CisJCXN0YXR1cyA9IGxwZmNfZG9fb2ZmbGluZShwaGJhLCBMUEZDX0VWVF9XQVJNX1NUQVJUKTsKKwllbHNlIGlmIChzdHJuY21wKGJ1ZiwgImVycm9yIiwgc2l6ZW9mKCJlcnJvciIpIC0gMSkgPT0gMCkKKwkJc3RhdHVzID0gbHBmY19kb19vZmZsaW5lKHBoYmEsIExQRkNfRVZUX0tJTEwpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZvbmxpbmVfY29tcGwpOwotCiAJaWYgKCFzdGF0dXMpCiAJCXJldHVybiBzdHJsZW4oYnVmKTsKIAllbHNlCkBAIC02NDUsOSArNjg3LDcgQEAKIAlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmcGhiYS0+cGNpZGV2LT5kZXYsCiAJCSAgICJscGZjJWQ6IFJlaW5pdGlhbGl6aW5nIHRvIHVzZSBzb2Z0X3d3cG5cbiIsIHBoYmEtPmJyZF9ubyk7CiAKLQlpbml0X2NvbXBsZXRpb24oJm9ubGluZV9jb21wbCk7Ci0JbHBmY193b3JrcV9wb3N0X2V2ZW50KHBoYmEsICZzdGF0MSwgJm9ubGluZV9jb21wbCwgTFBGQ19FVlRfT0ZGTElORSk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmb25saW5lX2NvbXBsKTsKKwlzdGF0MSA9IGxwZmNfZG9fb2ZmbGluZShwaGJhLCBMUEZDX0VWVF9PRkZMSU5FKTsKIAlpZiAoc3RhdDEpCiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCiAJCQkiJWQ6MDQ2MyBscGZjX3NvZnRfd3dwbiBhdHRyaWJ1dGUgc2V0IGZhaWxlZCB0byByZWluaXQgIgpAQCAtNzg5LDYgKzgyOSwxOCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgdm9pZAorbHBmY191cGRhdGVfcnBvcnRfZGV2bG9zc190bW8oc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXN0cnVjdCBscGZjX25vZGVsaXN0ICAqbmRscDsKKworCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5kbHAsICZwaGJhLT5mY19ub2RlcywgbmxwX2xpc3RwKQorCQlpZiAobmRscC0+cnBvcnQpCisJCQluZGxwLT5ycG9ydC0+ZGV2X2xvc3NfdG1vID0gcGhiYS0+Y2ZnX2Rldmxvc3NfdG1vOworCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworfQorCiBzdGF0aWMgaW50CiBscGZjX25vZGV2X3Rtb19zZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgdmFsKQogewpAQCAtODA0LDYgKzg1Niw3IEBACiAJaWYgKHZhbCA+PSBMUEZDX01JTl9ERVZMT1NTX1RNTyAmJiB2YWwgPD0gTFBGQ19NQVhfREVWTE9TU19UTU8pIHsKIAkJcGhiYS0+Y2ZnX25vZGV2X3RtbyA9IHZhbDsKIAkJcGhiYS0+Y2ZnX2Rldmxvc3NfdG1vID0gdmFsOworCQlscGZjX3VwZGF0ZV9ycG9ydF9kZXZsb3NzX3RtbyhwaGJhKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC04MzksNiArODkyLDcgQEAKIAkJcGhiYS0+Y2ZnX25vZGV2X3RtbyA9IHZhbDsKIAkJcGhiYS0+Y2ZnX2Rldmxvc3NfdG1vID0gdmFsOwogCQlwaGJhLT5kZXZfbG9zc190bW9fY2hhbmdlZCA9IDE7CisJCWxwZmNfdXBkYXRlX3Jwb3J0X2Rldmxvc3NfdG1vKHBoYmEpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTkzMSw5ICs5ODUsMTAgQEAKICMgICAgICAgMSAgPSAxIEdpZ2FiYXVkCiAjICAgICAgIDIgID0gMiBHaWdhYmF1ZAogIyAgICAgICA0ICA9IDQgR2lnYWJhdWQKLSMgVmFsdWUgcmFuZ2UgaXMgWzAsNF0uIERlZmF1bHQgdmFsdWUgaXMgMC4KKyMgICAgICAgOCAgPSA4IEdpZ2FiYXVkCisjIFZhbHVlIHJhbmdlIGlzIFswLDhdLiBEZWZhdWx0IHZhbHVlIGlzIDAuCiAqLwotTFBGQ19BVFRSX1IobGlua19zcGVlZCwgMCwgMCwgNCwgIlNlbGVjdCBsaW5rIHNwZWVkIik7CitMUEZDX0FUVFJfUihsaW5rX3NwZWVkLCAwLCAwLCA4LCAiU2VsZWN0IGxpbmsgc3BlZWQiKTsKIAogLyoKICMgbHBmY19mY3BfY2xhc3M6ICBEZXRlcm1pbmVzIEZDIGNsYXNzIHRvIHVzZSBmb3IgdGhlIEZDUCBwcm90b2NvbC4KQEAgLTk1OCw3ICsxMDEzLDcgQEAKIC8qCiAjIGxwZmNfY3JfZGVsYXkgJiBscGZjX2NyX2NvdW50OiBEZWZhdWx0IHZhbHVlcyBmb3IgSS9PIGNvbGFlc2luZwogIyBjcl9kZWxheSAobXNlYykgb3IgY3JfY291bnQgb3V0c3RhbmRpbmcgY29tbWFuZHMuIGNyX2RlbGF5IGNhbiB0YWtlCi0jIHZhbHVlIFswLDYzXS4gY3JfY291bnQgY2FuIHRha2UgdmFsdWUgWzAsMjU1XS4gRGVmYXVsdCB2YWx1ZSBvZiBjcl9kZWxheQorIyB2YWx1ZSBbMCw2M10uIGNyX2NvdW50IGNhbiB0YWtlIHZhbHVlIFsxLDI1NV0uIERlZmF1bHQgdmFsdWUgb2YgY3JfZGVsYXkKICMgaXMgMC4gRGVmYXVsdCB2YWx1ZSBvZiBjcl9jb3VudCBpcyAxLiBUaGUgY3JfY291bnQgZmVhdHVyZSBpcyBkaXNhYmxlZCBpZgogIyBjcl9kZWxheSBpcyBzZXQgdG8gMC4KICovCkBAIC0xMjI3LDExICsxMjgyLDExIEBACiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGE7CiAJaW50IHJjOwogCi0JaWYgKG9mZiA+IHNpemVvZihNQUlMQk9YX3QpKQorCWlmIChvZmYgPiBNQUlMQk9YX0NNRF9TSVpFKQogCQlyZXR1cm4gLUVSQU5HRTsKIAotCWlmICgoY291bnQgKyBvZmYpID4gc2l6ZW9mKE1BSUxCT1hfdCkpCi0JCWNvdW50ID0gc2l6ZW9mKE1BSUxCT1hfdCkgLSBvZmY7CisJaWYgKChjb3VudCArIG9mZikgPiBNQUlMQk9YX0NNRF9TSVpFKQorCQljb3VudCA9IE1BSUxCT1hfQ01EX1NJWkUgLSBvZmY7CiAKIAlpZiAob2ZmICUgNCB8fCAgY291bnQgJSA0IHx8ICh1bnNpZ25lZCBsb25nKWJ1ZiAlIDQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMwNyw2ICsxMzYyLDEyIEBACiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9CiAKKwkJaWYgKHBoYmEtPmZjX2ZsYWcgJiBGQ19CTE9DS19NR01UX0lPKSB7CisJCQlzeXNmc19tYm94X2lkbGUocGhiYSk7CisJCQlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXJldHVybiAgLUVBR0FJTjsKKwkJfQorCiAJCWlmICgocGhiYS0+ZmNfZmxhZyAmIEZDX09GRkxJTkVfTU9ERSkgfHwKIAkJICAgICghKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfU0xJMl9BQ1RJVkUpKSl7CiAKQEAgLTEzMjYsNiArMTM4NywxMSBAQAogCQl9CiAKIAkJaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CisJCQlpZiAocmMgPT0gTUJYX1RJTUVPVVQpIHsKKwkJCQlwaGJhLT5zeXNmc19tYm94Lm1ib3gtPm1ib3hfY21wbCA9CisJCQkJCWxwZmNfc2xpX2RlZl9tYm94X2NtcGw7CisJCQkJcGhiYS0+c3lzZnNfbWJveC5tYm94ID0gTlVMTDsKKwkJCX0KIAkJCXN5c2ZzX21ib3hfaWRsZShwaGJhKTsKIAkJCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwogCQkJcmV0dXJuICAocmMgPT0gTUJYX1RJTUVPVVQpID8gLUVUSU1FIDogLUVOT0RFVjsKQEAgLTEzNDQsNyArMTQxMCw3IEBACiAKIAlwaGJhLT5zeXNmc19tYm94Lm9mZnNldCA9IG9mZiArIGNvdW50OwogCi0JaWYgKHBoYmEtPnN5c2ZzX21ib3gub2Zmc2V0ID09IHNpemVvZihNQUlMQk9YX3QpKQorCWlmIChwaGJhLT5zeXNmc19tYm94Lm9mZnNldCA9PSBNQUlMQk9YX0NNRF9TSVpFKQogCQlzeXNmc19tYm94X2lkbGUocGhiYSk7CiAKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKQEAgLTEzNTgsNyArMTQyNCw3IEBACiAJCS5tb2RlID0gU19JUlVTUiB8IFNfSVdVU1IsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCi0JLnNpemUgPSBzaXplb2YoTUFJTEJPWF90KSwKKwkuc2l6ZSA9IE1BSUxCT1hfQ01EX1NJWkUsCiAJLnJlYWQgPSBzeXNmc19tYm94X3JlYWQsCiAJLndyaXRlID0gc3lzZnNfbWJveF93cml0ZSwKIH07CkBAIC0xNDk0LDYgKzE1NjAsOSBAQAogCQkJY2FzZSBMQV80R0haX0xJTks6CiAJCQkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfNEdCSVQ7CiAJCQlicmVhazsKKwkJCWNhc2UgTEFfOEdIWl9MSU5LOgorCQkJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzhHQklUOworCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEX1VOS05PV047CiAJCQlicmVhazsKQEAgLTE1NDYsNiArMTYxNSw5IEBACiAJdW5zaWduZWQgbG9uZyBzZWNvbmRzOwogCWludCByYyA9IDA7CiAKKwlpZiAocGhiYS0+ZmNfZmxhZyAmIEZDX0JMT0NLX01HTVRfSU8pCisJCXJldHVybiBOVUxMOworCiAJcG1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBtYm94cSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNjMxLDYgKzE3MDMsOCBAQAogCWVsc2UKIAkJaHMtPnNlY29uZHNfc2luY2VfbGFzdF9yZXNldCA9IHNlY29uZHMgLSBwc2xpLT5zdGF0c19zdGFydDsKIAorCW1lbXBvb2xfZnJlZShwbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCiAJcmV0dXJuIGhzOwogfQogCkBAIC0xNjQ0LDYgKzE3MTgsOSBAQAogCU1BSUxCT1hfdCAqcG1iOwogCWludCByYyA9IDA7CiAKKwlpZiAocGhiYS0+ZmNfZmxhZyAmIEZDX0JMT0NLX01HTVRfSU8pCisJCXJldHVybjsKKwogCXBtYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwbWJveHEpCiAJCXJldHVybjsKQEAgLTE2OTksNiArMTc3Niw4IEBACiAKIAlwc2xpLT5zdGF0c19zdGFydCA9IGdldF9zZWNvbmRzKCk7CiAKKwltZW1wb29sX2ZyZWUocG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwogCXJldHVybjsKIH0KIApAQCAtMTcwNiw2NyArMTc4NSw1MSBAQAogICogVGhlIExQRkMgZHJpdmVyIHRyZWF0cyBsaW5rZG93biBoYW5kbGluZyBhcyB0YXJnZXQgbG9zcyBldmVudHMgc28gdGhlcmUKICAqIGFyZSBubyBzeXNmcyBoYW5kbGVycyBmb3IgbGlua19kb3duX3Rtby4KICAqLwotc3RhdGljIHZvaWQKLWxwZmNfZ2V0X3N0YXJnZXRfcG9ydF9pZChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCisKK3N0YXRpYyBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqCitscGZjX2dldF9ub2RlX2J5X3RhcmdldChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3Qoc3RhcmdldC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKSBzaG9zdC0+aG9zdGRhdGE7Ci0JdWludDMyX3QgZGlkID0gLTE7Ci0Jc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwogCiAJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkvKiBTZWFyY2ggdGhlIG1hcHBlZCBsaXN0IGZvciB0aGlzIHRhcmdldCBJRCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkobmRscCwgJnBoYmEtPmZjX25scG1hcF9saXN0LCBubHBfbGlzdHApIHsKLQkJaWYgKHN0YXJnZXQtPmlkID09IG5kbHAtPm5scF9zaWQpIHsKLQkJCWRpZCA9IG5kbHAtPm5scF9ESUQ7Ci0JCQlicmVhazsKKwkvKiBTZWFyY2ggZm9yIHRoaXMsIG1hcHBlZCwgdGFyZ2V0IElEICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZGxwLCAmcGhiYS0+ZmNfbm9kZXMsIG5scF9saXN0cCkgeworCQlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfTUFQUEVEX05PREUgJiYKKwkJICAgIHN0YXJnZXQtPmlkID09IG5kbHAtPm5scF9zaWQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXJldHVybiBuZGxwOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwlyZXR1cm4gTlVMTDsKK30KIAotCWZjX3N0YXJnZXRfcG9ydF9pZChzdGFyZ2V0KSA9IGRpZDsKK3N0YXRpYyB2b2lkCitscGZjX2dldF9zdGFyZ2V0X3BvcnRfaWQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gbHBmY19nZXRfbm9kZV9ieV90YXJnZXQoc3RhcmdldCk7CisKKwlmY19zdGFyZ2V0X3BvcnRfaWQoc3RhcmdldCkgPSBuZGxwID8gbmRscC0+bmxwX0RJRCA6IC0xOwogfQogCiBzdGF0aWMgdm9pZAogbHBmY19nZXRfc3RhcmdldF9ub2RlX25hbWUoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHN0YXJnZXQtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKikgc2hvc3QtPmhvc3RkYXRhOwotCXU2NCBub2RlX25hbWUgPSAwOwotCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IGxwZmNfZ2V0X25vZGVfYnlfdGFyZ2V0KHN0YXJnZXQpOwogCi0Jc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkvKiBTZWFyY2ggdGhlIG1hcHBlZCBsaXN0IGZvciB0aGlzIHRhcmdldCBJRCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkobmRscCwgJnBoYmEtPmZjX25scG1hcF9saXN0LCBubHBfbGlzdHApIHsKLQkJaWYgKHN0YXJnZXQtPmlkID09IG5kbHAtPm5scF9zaWQpIHsKLQkJCW5vZGVfbmFtZSA9IHd3bl90b191NjQobmRscC0+bmxwX25vZGVuYW1lLnUud3duKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQotCWZjX3N0YXJnZXRfbm9kZV9uYW1lKHN0YXJnZXQpID0gbm9kZV9uYW1lOworCWZjX3N0YXJnZXRfbm9kZV9uYW1lKHN0YXJnZXQpID0KKwkJbmRscCA/IHd3bl90b191NjQobmRscC0+bmxwX25vZGVuYW1lLnUud3duKSA6IDA7CiB9CiAKIHN0YXRpYyB2b2lkCiBscGZjX2dldF9zdGFyZ2V0X3BvcnRfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3Qoc3RhcmdldC0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKSBzaG9zdC0+aG9zdGRhdGE7Ci0JdTY0IHBvcnRfbmFtZSA9IDA7Ci0Jc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gbHBmY19nZXRfbm9kZV9ieV90YXJnZXQoc3RhcmdldCk7CiAKLQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCS8qIFNlYXJjaCB0aGUgbWFwcGVkIGxpc3QgZm9yIHRoaXMgdGFyZ2V0IElEICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShuZGxwLCAmcGhiYS0+ZmNfbmxwbWFwX2xpc3QsIG5scF9saXN0cCkgewotCQlpZiAoc3RhcmdldC0+aWQgPT0gbmRscC0+bmxwX3NpZCkgewotCQkJcG9ydF9uYW1lID0gd3duX3RvX3U2NChuZGxwLT5ubHBfcG9ydG5hbWUudS53d24pOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCi0JZmNfc3RhcmdldF9wb3J0X25hbWUoc3RhcmdldCkgPSBwb3J0X25hbWU7CisJZmNfc3RhcmdldF9wb3J0X25hbWUoc3RhcmdldCkgPQorCQluZGxwID8gd3duX3RvX3U2NChuZGxwLT5ubHBfcG9ydG5hbWUudS53d24pIDogMDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE4OTUsMjUgKzE5NTgsOCBAQAogCQkJc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKSArCiAJCQkocGhiYS0+Y2ZnX3NnX3NlZ19jbnQgKiBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCkpOwogCi0Jc3dpdGNoIChwaGJhLT5wY2lkZXYtPmRldmljZSkgewotCWNhc2UgUENJX0RFVklDRV9JRF9MUDEwMToKLQljYXNlIFBDSV9ERVZJQ0VfSURfQlNNQjoKLQljYXNlIFBDSV9ERVZJQ0VfSURfWlNNQjoKLQkJcGhiYS0+Y2ZnX2hiYV9xdWV1ZV9kZXB0aCA9IExQRkNfTFAxMDFfSEJBX1FfREVQVEg7Ci0JCWJyZWFrOwotCWNhc2UgUENJX0RFVklDRV9JRF9SRkxZOgotCWNhc2UgUENJX0RFVklDRV9JRF9QRkxZOgotCWNhc2UgUENJX0RFVklDRV9JRF9CTUlEOgotCWNhc2UgUENJX0RFVklDRV9JRF9aTUlEOgotCWNhc2UgUENJX0RFVklDRV9JRF9URkxZOgotCQlwaGJhLT5jZmdfaGJhX3F1ZXVlX2RlcHRoID0gTFBGQ19MQ19IQkFfUV9ERVBUSDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcGhiYS0+Y2ZnX2hiYV9xdWV1ZV9kZXB0aCA9IExQRkNfREZUX0hCQV9RX0RFUFRIOwotCX0KIAotCWlmIChwaGJhLT5jZmdfaGJhX3F1ZXVlX2RlcHRoID4gbHBmY19oYmFfcXVldWVfZGVwdGgpCi0JCWxwZmNfaGJhX3F1ZXVlX2RlcHRoX2luaXQocGhiYSwgbHBmY19oYmFfcXVldWVfZGVwdGgpOworCWxwZmNfaGJhX3F1ZXVlX2RlcHRoX2luaXQocGhiYSwgbHBmY19oYmFfcXVldWVfZGVwdGgpOwogCiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaAppbmRleCAxMjUxNzg4Li5iOGMyYTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMTgsNiArMTgsOCBAQAogICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCit0eXBlZGVmIGludCAoKm5vZGVfZmlsdGVyKShzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwgdm9pZCAqcGFyYW0pOworCiBzdHJ1Y3QgZmNfcnBvcnQ7CiB2b2lkIGxwZmNfZHVtcF9tZW0oc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MTZfdCk7CiB2b2lkIGxwZmNfcmVhZF9udihzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwpAQCAtNDMsMjAgKzQ1LDI0IEBACiB2b2lkIGxwZmNfbWJ4X2NtcGxfZmFicmljX3JlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX21ieF9jbXBsX25zX3JlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX21ieF9jbXBsX2ZkbWlfcmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Ci1pbnQgbHBmY19ubHBfbGlzdChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiwgaW50KTsKK3ZvaWQgbHBmY19kZXF1ZXVlX25vZGUoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICopOwordm9pZCBscGZjX25scF9zZXRfc3RhdGUoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosIGludCk7Cit2b2lkIGxwZmNfZHJvcF9ub2RlKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY19zZXRfZGlzY3RtbyhzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19jYW5fZGlzY3RtbyhzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY191bnJlZ19ycGkoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogaW50IGxwZmNfY2hlY2tfc2xpX25kbHAoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCiAJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKLWludCBscGZjX25scF9yZW1vdmUoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogdm9pZCBscGZjX25scF9pbml0KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqLCB1aW50MzJfdCk7CitzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbHBmY19ubHBfZ2V0KHN0cnVjdCBscGZjX25vZGVsaXN0ICopOworaW50ICBscGZjX25scF9wdXQoc3RydWN0IGxwZmNfbm9kZWxpc3QgKik7CiBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbHBmY19zZXR1cF9kaXNjX25vZGUoc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90KTsKIHZvaWQgbHBmY19kaXNjX2xpc3RfbG9vcG1hcChzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfZGlzY19zdGFydChzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfZGlzY19mbHVzaF9saXN0KHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19kaXNjX3RpbWVvdXQodW5zaWduZWQgbG9uZyk7CiAKK3N0cnVjdCBscGZjX25vZGVsaXN0ICpfX2xwZmNfZmluZG5vZGVfcnBpKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHVpbnQxNl90IHJwaSk7CiBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbHBmY19maW5kbm9kZV9ycGkoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgdWludDE2X3QgcnBpKTsKIAogaW50IGxwZmNfd29ya3FfcG9zdF9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgdm9pZCAqLCB2b2lkICosIHVpbnQzMl90KTsKQEAgLTY2LDggKzcyLDcgQEAKIAogaW50IGxwZmNfY2hlY2tfc3Bhcm0oc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosCiAJCSAgICAgc3RydWN0IHNlcnZfcGFybSAqLCB1aW50MzJfdCk7Ci1pbnQgbHBmY19lbHNfYWJvcnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwKLQkJCWludCk7CitpbnQgbHBmY19lbHNfYWJvcnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCk7CiBpbnQgbHBmY19lbHNfYWJvcnRfZmxvZ2koc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfaW5pdGlhbF9mbG9naShzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19pc3N1ZV9lbHNfcGxvZ2koc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90LCB1aW50OF90KTsKQEAgLTExMyw3ICsxMTgsMTAgQEAKIGludCBscGZjX3Bvc3RfYnVmZmVyKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqLCBpbnQsIGludCk7CiB2b2lkIGxwZmNfZGVjb2RlX2Zpcm13YXJlX3JldihzdHJ1Y3QgbHBmY19oYmEgKiwgY2hhciAqLCBpbnQpOwogaW50IGxwZmNfb25saW5lKHN0cnVjdCBscGZjX2hiYSAqKTsKLWludCBscGZjX29mZmxpbmUoc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX2Jsb2NrX21nbXRfaW8oc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX3VuYmxvY2tfbWdtdF9pbyhzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIGxwZmNfb2ZmbGluZV9wcmVwKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY19vZmZsaW5lKHN0cnVjdCBscGZjX2hiYSAqKTsKIAogaW50IGxwZmNfc2xpX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaV9xdWV1ZV9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKik7CkBAIC0xNjIsOCArMTcwLDggQEAKIHN0cnVjdCBscGZjX2RtYWJ1ZiAqbHBmY19zbGlfcmluZ3Bvc3RidWZfZ2V0KHN0cnVjdCBscGZjX2hiYSAqLAogCQkJCQkgICAgIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCiAJCQkJCSAgICAgZG1hX2FkZHJfdCk7Ci1pbnQgbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWczMihzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwKLQkJCQkgc3RydWN0IGxwZmNfaW9jYnEgKik7CitpbnQgbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCisJCQkgICAgICAgc3RydWN0IGxwZmNfaW9jYnEgKik7CiBpbnQgbHBmY19zbGlfc3VtX2lvY2Ioc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosIHVpbnQxNl90LAogCQkJICB1aW50NjRfdCwgbHBmY19jdHhfY21kKTsKIGludCBscGZjX3NsaV9hYm9ydF9pb2NiKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqLCB1aW50MTZfdCwKQEAgLTE3Miw5ICsxODAsOCBAQAogdm9pZCBscGZjX21ib3hfdGltZW91dCh1bnNpZ25lZCBsb25nKTsKIHZvaWQgbHBmY19tYm94X3RpbWVvdXRfaGFuZGxlcihzdHJ1Y3QgbHBmY19oYmEgKik7CiAKLXN0cnVjdCBscGZjX25vZGVsaXN0ICpscGZjX2ZpbmRub2RlX2RpZChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QsIHVpbnQzMl90KTsKLXN0cnVjdCBscGZjX25vZGVsaXN0ICpscGZjX2ZpbmRub2RlX3d3cG4oc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90LAotCQkJCQlzdHJ1Y3QgbHBmY19uYW1lICopOworc3RydWN0IGxwZmNfbm9kZWxpc3QgKmxwZmNfZmluZG5vZGVfZGlkKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCk7CitzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbHBmY19maW5kbm9kZV93d3BuKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19uYW1lICopOwogCiBpbnQgbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYm94cSwKIAkJCSB1aW50MzJfdCB0aW1lb3V0KTsKQEAgLTE5Myw2ICsyMDAsOSBAQAogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzLiAqLwogY29uc3QgY2hhciogbHBmY19pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKik7Cit2b2lkIGxwZmNfc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICopOworaW50IGxwZmNfc2Nhbl9maW5pc2hlZChzdHJ1Y3QgU2NzaV9Ib3N0ICosIHVuc2lnbmVkIGxvbmcpOworCiB2b2lkIGxwZmNfZ2V0X2NmZ3BhcmFtKHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX2FsbG9jX3N5c2ZzX2F0dHIoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX2ZyZWVfc3lzZnNfYXR0cihzdHJ1Y3QgbHBmY19oYmEgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKaW5kZXggYTUxYTQxYi4uMzRhOWUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMzM0LDIxICszMzQsMjIgQEAKIAogCWxwZmNfc2V0X2Rpc2N0bW8ocGhiYSk7CiAKLQlDbnQgPSBTaXplICA+IEZDRUxTU0laRSA/IEZDRUxTU0laRSA6IFNpemU7CiAKIAlsaXN0X2FkZF90YWlsKCZoZWFkLCAmbXAtPmxpc3QpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcCwgbmV4dF9tcCwgJmhlYWQsIGxpc3QpIHsKIAkJbWxhc3QgPSBtcDsKIAorCQlDbnQgPSBTaXplICA+IEZDRUxTU0laRSA/IEZDRUxTU0laRSA6IFNpemU7CisKIAkJU2l6ZSAtPSBDbnQ7CiAKLQkJaWYgKCFjdHB0cikKKwkJaWYgKCFjdHB0cikgewogCQkJY3RwdHIgPSAodWludDMyX3QgKikgbWxhc3QtPnZpcnQ7Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQlDbnQgLT0gMTY7CS8qIHN1YnRyYWN0IGxlbmd0aCBvZiBDVCBoZWFkZXIgKi8KIAogCQkvKiBMb29wIHRocm91Z2ggZW50aXJlIE5hbWVTZXJ2ZXIgbGlzdCBvZiBESURzICovCi0JCXdoaWxlIChDbnQpIHsKKwkJd2hpbGUgKENudCA+PSBzaXplb2YgKHVpbnQzMl90KSkgewogCiAJCQkvKiBHZXQgbmV4dCBESUQgZnJvbSBOYW1lU2VydmVyIExpc3QgKi8KIAkJCUNUZW50cnkgPSAqY3RwdHIrKzsKQEAgLTQ0MiwxMCArNDQzLDggQEAKIAkJaWYgKHBoYmEtPmZjX25zX3JldHJ5IDwgTFBGQ19NQVhfTlNfUkVUUlkpIHsKIAkJCXBoYmEtPmZjX25zX3JldHJ5Kys7CiAJCQkvKiBDVCBjb21tYW5kIGlzIGJlaW5nIHJldHJpZWQgKi8KLQkJCW5kbHAgPQotCQkJICAgIGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfVU5NQVBQRUQsCi0JCQkJCSAgICAgIE5hbWVTZXJ2ZXJfRElEKTsKLQkJCWlmIChuZGxwKSB7CisJCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYSwgTmFtZVNlcnZlcl9ESUQpOworCQkJaWYgKG5kbHAgJiYgbmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfVU5NQVBQRURfTk9ERSkgewogCQkJCWlmIChscGZjX25zX2NtZChwaGJhLCBuZGxwLCBTTElfQ1ROU19HSURfRlQpID09CiAJCQkJICAgIDApIHsKIAkJCQkJZ290byBvdXQ7CkBAIC03MjksNyArNzI4LDcgQEAKIAl1aW50MTZfdCBmZG1pX2NtZCA9IENUY21kLT5Db21tYW5kUmVzcG9uc2UuYml0cy5DbWRSc3A7CiAJdWludDE2X3QgZmRtaV9yc3AgPSBDVHJzcC0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuQ21kUnNwOwogCi0JbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLCBGRE1JX0RJRCk7CisJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIEZETUlfRElEKTsKIAlpZiAoZmRtaV9yc3AgPT0gYmUxNl90b19jcHUoU0xJX0NUX1JFU1BPTlNFX0ZTX1JKVCkpIHsKIAkJLyogRkRNSSByc3AgZmFpbGVkICovCiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLApAQCAtMTAzOSw2ICsxMDM4LDkgQEAKIAkJCQljYXNlIExBXzRHSFpfTElOSzoKIAkJCQkJYWUtPnVuLlBvcnRTcGVlZCA9IEhCQV9QT1JUU1BFRURfNEdCSVQ7CiAJCQkJYnJlYWs7CisJCQkJY2FzZSBMQV84R0haX0xJTks6CisJCQkJCWFlLT51bi5Qb3J0U3BlZWQgPSBIQkFfUE9SVFNQRUVEXzhHQklUOworCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6CiAJCQkJCWFlLT51bi5Qb3J0U3BlZWQgPQogCQkJCQkJSEJBX1BPUlRTUEVFRF9VTktOT1dOOwpAQCAtMTE2MSw3ICsxMTYzLDcgQEAKIHsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKIAotCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOTFBfU0VBUkNIX0FMTCwgRkRNSV9ESUQpOworCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBGRE1JX0RJRCk7CiAJaWYgKG5kbHApIHsKIAkJaWYgKGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZVswXSAhPSAnXDAnKSB7CiAJCQlscGZjX2ZkbWlfY21kKHBoYmEsIG5kbHAsIFNMSV9NR01UX0RIQkEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kaXNjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaAppbmRleCA5NzY2ZjkwLi40OTgwNTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMzEsNiArMzEsNyBAQAogLyogd29ya2VyIHRocmVhZCBldmVudHMgKi8KIGVudW0gbHBmY193b3JrX3R5cGUgewogCUxQRkNfRVZUX09OTElORSwKKwlMUEZDX0VWVF9PRkZMSU5FX1BSRVAsCiAJTFBGQ19FVlRfT0ZGTElORSwKIAlMUEZDX0VWVF9XQVJNX1NUQVJULAogCUxQRkNfRVZUX0tJTEwsCkBAIC02OCw3ICs2OSw2IEBACiAJdWludDE2X3QJbmxwX21heGZyYW1lOwkJLyogTWF4IFJDViBmcmFtZSBzaXplICovCiAJdWludDhfdAkJbmxwX2NsYXNzX3N1cDsJCS8qIFN1cHBvcnRlZCBDbGFzc2VzICovCiAJdWludDhfdCAgICAgICAgIG5scF9yZXRyeTsJCS8qIHVzZWQgZm9yIEVMUyByZXRyaWVzICovCi0JdWludDhfdCAgICAgICAgIG5scF9kaXNjX3JlZmNudDsJLyogdXNlZCBmb3IgRFNNICovCiAJdWludDhfdCAgICAgICAgIG5scF9mY3BfaW5mbzsJICAgICAgICAvKiBjbGFzcyBpbmZvLCBiaXRzIDAtMyAqLwogI2RlZmluZSBOTFBfRkNQXzJfREVWSUNFICAgMHgxMAkJCS8qIEZDUC0yIGRldmljZSAqLwogCkBAIC03OSwyMCArNzksMTAgQEAKIAlzdHJ1Y3QgbHBmY193b3JrX2V2dCBlbHNfcmV0cnlfZXZ0OwogCXVuc2lnbmVkIGxvbmcgbGFzdF9yYW1wX3VwX3RpbWU7ICAgICAgICAvKiBqaWZmeSBvZiBsYXN0IHJhbXAgdXAgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfcV9mdWxsX3RpbWU7CQkvKiBqaWZmeSBvZiBsYXN0IHF1ZXVlIGZ1bGwgKi8KKwlzdHJ1Y3Qga3JlZiAgICAga3JlZjsKIH07CiAKIC8qIERlZmluZXMgZm9yIG5scF9mbGFnICh1aW50MzIpICovCi0jZGVmaW5lIE5MUF9OT19MSVNUICAgICAgICAweDAJCS8qIEluZGljYXRlcyBpbW1lZGlhdGVseSBmcmVlIG5vZGUgKi8KLSNkZWZpbmUgTkxQX1VOVVNFRF9MSVNUICAgIDB4MQkJLyogRmxnIHRvIGluZGljYXRlIG5vZGUgd2lsbCBiZSBmcmVlZCAqLwotI2RlZmluZSBOTFBfUExPR0lfTElTVCAgICAgMHgyCQkvKiBGbGcgdG8gaW5kaWNhdGUgc2VudCBQTE9HSSAqLwotI2RlZmluZSBOTFBfQURJU0NfTElTVCAgICAgMHgzCQkvKiBGbGcgdG8gaW5kaWNhdGUgc2VudCBBRElTQyAqLwotI2RlZmluZSBOTFBfUkVHTE9HSU5fTElTVCAgMHg0CQkvKiBGbGcgdG8gaW5kaWNhdGUgc2VudCBSRUdfTE9HSU4gKi8KLSNkZWZpbmUgTkxQX1BSTElfTElTVCAgICAgIDB4NQkJLyogRmxnIHRvIGluZGljYXRlIHNlbnQgUFJMSSAqLwotI2RlZmluZSBOTFBfVU5NQVBQRURfTElTVCAgMHg2CQkvKiBOb2RlIGlzIG5vdyB1bm1hcHBlZCAqLwotI2RlZmluZSBOTFBfTUFQUEVEX0xJU1QgICAgMHg3CQkvKiBOb2RlIGlzIG5vdyBtYXBwZWQgKi8KLSNkZWZpbmUgTkxQX05QUl9MSVNUICAgICAgIDB4OAkJLyogTm9kZSBpcyBpbiBOUG9ydCBSZWNvdmVyeSBzdGF0ZSAqLwotI2RlZmluZSBOTFBfSlVTVF9EUSAgICAgICAgMHg5CQkvKiBqdXN0IGRlcXVlIG5kbHAgaW4gbHBmY19ubHBfbGlzdCAqLwotI2RlZmluZSBOTFBfTElTVF9NQVNLICAgICAgMHhmCQkvKiBtYXNrIHRvIHNlZSB3aGF0IGxpc3Qgbm9kZSBpcyBvbiAqLwogI2RlZmluZSBOTFBfUExPR0lfU05EICAgICAgMHgyMAkJLyogc2VudCBQTE9HSSByZXF1ZXN0IGZvciB0aGlzIGVudHJ5ICovCiAjZGVmaW5lIE5MUF9QUkxJX1NORCAgICAgICAweDQwCQkvKiBzZW50IFBSTEkgcmVxdWVzdCBmb3IgdGhpcyBlbnRyeSAqLwogI2RlZmluZSBOTFBfQURJU0NfU05EICAgICAgMHg4MAkJLyogc2VudCBBRElTQyByZXF1ZXN0IGZvciB0aGlzIGVudHJ5ICovCkBAIC0xMDgsMjAgKzk4LDggQEAKIAkJCQkJICAgQUNDICovCiAjZGVmaW5lIE5MUF9OUFJfQURJU0MgICAgICAweDIwMDAwMDAJLyogSXNzdWUgQURJU0Mgd2hlbiBkcSdlZCBmcm9tCiAJCQkJCSAgIE5QUiBsaXN0ICovCi0jZGVmaW5lIE5MUF9ERUxBWV9SRU1PVkUgICAweDQwMDAwMDAJLyogRGVmZXIgcmVtb3ZhbCB0aWxsIGVuZCBvZiBEU00gKi8KICNkZWZpbmUgTkxQX05PREVWX1JFTU9WRSAgIDB4ODAwMDAwMAkvKiBEZWZlciByZW1vdmFsIHRpbGwgZGlzY292ZXJ5IGVuZHMgKi8KIAotLyogRGVmaW5lcyBmb3IgbGlzdCBzZWFyY2hzICovCi0jZGVmaW5lIE5MUF9TRUFSQ0hfTUFQUEVEICAgIDB4MQkvKiBzZWFyY2ggbWFwcGVkICovCi0jZGVmaW5lIE5MUF9TRUFSQ0hfVU5NQVBQRUQgIDB4MgkvKiBzZWFyY2ggdW5tYXBwZWQgKi8KLSNkZWZpbmUgTkxQX1NFQVJDSF9QTE9HSSAgICAgMHg0CS8qIHNlYXJjaCBwbG9naSAqLwotI2RlZmluZSBOTFBfU0VBUkNIX0FESVNDICAgICAweDgJLyogc2VhcmNoIGFkaXNjICovCi0jZGVmaW5lIE5MUF9TRUFSQ0hfUkVHTE9HSU4gIDB4MTAJLyogc2VhcmNoIHJlZ2xvZ2luICovCi0jZGVmaW5lIE5MUF9TRUFSQ0hfUFJMSSAgICAgIDB4MjAJLyogc2VhcmNoIHBybGkgKi8KLSNkZWZpbmUgTkxQX1NFQVJDSF9OUFIgICAgICAgMHg0MAkvKiBzZWFyY2ggbnByICovCi0jZGVmaW5lIE5MUF9TRUFSQ0hfVU5VU0VEICAgIDB4ODAJLyogc2VhcmNoIG1hcHBlZCAqLwotI2RlZmluZSBOTFBfU0VBUkNIX0FMTCAgICAgICAweGZmCS8qIHNlYXJjaCBhbGwgbGlzdHMgKi8KLQogLyogVGhlcmUgYXJlIDQgZGlmZmVyZW50IGRvdWJsZSBsaW5rZWQgbGlzdHMgbm9kZWxpc3QgZW50cmllcyBjYW4gcmVzaWRlIG9uLgogICogVGhlIFBvcnQgTG9naW4gKFBMT0dJKSBsaXN0IGFuZCBBZGRyZXNzIERpc2NvdmVyeSAoQURJU0MpIGxpc3QgYXJlIHVzZWQKICAqIHdoZW4gTGluayBVcCBkaXNjb3Zlcnkgb3IgUmVnaXN0ZXJlZCBTdGF0ZSBDaGFuZ2UgTm90aWZpY2F0aW9uIChSU0NOKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggYTVmMzNhMC4uNjM4YjNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IENocmlzdG9waCBIZWxsd2lnICAgICAgICAgICAgICAqCkBAIC0xODIsNiArMTgyLDcgQEAKIAkJaWNtZC0+dW4uZWxzcmVxNjQuYmRsLmJkZVNpemUgPSAoMiAqIHNpemVvZiAoc3RydWN0IHVscF9iZGU2NCkpOwogCQlpY21kLT51bi5lbHNyZXE2NC5yZW1vdGVJRCA9IGRpZDsJLyogRElEICovCiAJCWljbWQtPnVscENvbW1hbmQgPSBDTURfRUxTX1JFUVVFU1Q2NF9DUjsKKwkJaWNtZC0+dWxwVGltZW91dCA9IHBoYmEtPmZjX3JhdG92ICogMjsKIAl9IGVsc2UgewogCQlpY21kLT51bi5lbHNyZXE2NC5iZGwuYmRlU2l6ZSA9IHNpemVvZiAoc3RydWN0IHVscF9iZGU2NCk7CiAJCWljbWQtPnVscENvbW1hbmQgPSBDTURfWE1JVF9FTFNfUlNQNjRfQ1g7CkBAIC0yMDgsOSArMjA5LDkgQEAKIAl9CiAKIAkvKiBTYXZlIGZvciBjb21wbGV0aW9uIHNvIHdlIGNhbiByZWxlYXNlIHRoZXNlIHJlc291cmNlcyAqLwotCWVsc2lvY2ItPmNvbnRleHQxID0gKHVpbnQ4X3QgKikgbmRscDsKLQllbHNpb2NiLT5jb250ZXh0MiA9ICh1aW50OF90ICopIHBjbWQ7Ci0JZWxzaW9jYi0+Y29udGV4dDMgPSAodWludDhfdCAqKSBwYnVmbGlzdDsKKwllbHNpb2NiLT5jb250ZXh0MSA9IGxwZmNfbmxwX2dldChuZGxwKTsKKwllbHNpb2NiLT5jb250ZXh0MiA9IHBjbWQ7CisJZWxzaW9jYi0+Y29udGV4dDMgPSBwYnVmbGlzdDsKIAllbHNpb2NiLT5yZXRyeSA9IHJldHJ5OwogCWVsc2lvY2ItPmRydnJUaW1lb3V0ID0gKHBoYmEtPmZjX3JhdG92IDw8IDEpICsgTFBGQ19EUlZSX1RJTUVPVVQ7CiAKQEAgLTIyMiwxNiArMjIzLDE2IEBACiAJCS8qIFhtaXQgRUxTIGNvbW1hbmQgPGVsc0NtZD4gdG8gcmVtb3RlIE5QT1JUIDxkaWQ+ICovCiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCiAJCQkJIiVkOjAxMTYgWG1pdCBFTFMgY29tbWFuZCB4JXggdG8gcmVtb3RlICIKLQkJCQkiTlBPUlQgeCV4IERhdGE6IHgleCB4JXhcbiIsCisJCQkJIk5QT1JUIHgleCBJL08gdGFnOiB4JXgsIEhCQSBzdGF0ZTogeCV4XG4iLAogCQkJCXBoYmEtPmJyZF9ubywgZWxzY21kLAotCQkJCWRpZCwgaWNtZC0+dWxwSW9UYWcsIHBoYmEtPmhiYV9zdGF0ZSk7CisJCQkJZGlkLCBlbHNpb2NiLT5pb3RhZywgcGhiYS0+aGJhX3N0YXRlKTsKIAl9IGVsc2UgewogCQkvKiBYbWl0IEVMUyByZXNwb25zZSA8ZWxzQ21kPiB0byByZW1vdGUgTlBPUlQgPGRpZD4gKi8KIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywKIAkJCQkiJWQ6MDExNyBYbWl0IEVMUyByZXNwb25zZSB4JXggdG8gcmVtb3RlICIKLQkJCQkiTlBPUlQgeCV4IERhdGE6IHgleCB4JXhcbiIsCisJCQkJIk5QT1JUIHgleCBJL08gdGFnOiB4JXgsIHNpemU6IHgleFxuIiwKIAkJCQlwaGJhLT5icmRfbm8sIGVsc2NtZCwKLQkJCQluZGxwLT5ubHBfRElELCBpY21kLT51bHBJb1RhZywgY21kU2l6ZSk7CisJCQkJbmRscC0+bmxwX0RJRCwgZWxzaW9jYi0+aW90YWcsIGNtZFNpemUpOwogCX0KIAogCXJldHVybiBlbHNpb2NiOwpAQCAtMzA0LDcgKzMwNSw3IEBACiAJCWdvdG8gZmFpbF9mcmVlX21ib3g7CiAKIAltYm94LT5tYm94X2NtcGwgPSBscGZjX21ieF9jbXBsX2ZhYnJpY19yZWdfbG9naW47Ci0JbWJveC0+Y29udGV4dDIgPSBuZGxwOworCW1ib3gtPmNvbnRleHQyID0gbHBmY19ubHBfZ2V0KG5kbHApOwogCiAJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3gsIE1CWF9OT1dBSVQgfCBNQlhfU1RPUF9JT0NCKTsKIAlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkKQEAgLTMxMyw2ICszMTQsNyBAQAogCXJldHVybiAwOwogCiAgZmFpbF9pc3N1ZV9yZWdfbG9naW46CisJbHBmY19ubHBfcHV0KG5kbHApOwogCW1wID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBtYm94LT5jb250ZXh0MTsKIAlscGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwogCWtmcmVlKG1wKTsKQEAgLTM2OCw5ICszNzAsOSBAQAogCQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCQkJZ290byBmYWlsOwogCQl9Ci0JCW1lbXBvb2xfZnJlZShuZGxwLCBwaGJhLT5ubHBfbWVtX3Bvb2wpOworCQlscGZjX25scF9wdXQobmRscCk7CiAKLQkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLCBQVDJQVF9SZW1vdGVJRCk7CisJCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBQVDJQVF9SZW1vdGVJRCk7CiAJCWlmICghbmRscCkgewogCQkJLyoKIAkJCSAqIENhbm5vdCBmaW5kIGV4aXN0aW5nIEZhYnJpYyBuZGxwLCBzbyBhbGxvY2F0ZSBhCkBAIC0zODcsMTIgKzM4OSwxMSBAQAogCQkJCXNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CiAJCW1lbWNweSgmbmRscC0+bmxwX25vZGVuYW1lLCAmc3AtPm5vZGVOYW1lLAogCQkJCXNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7Ci0JCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7Ci0JCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKKwkJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfTlBSX05PREUpOwogCQluZGxwLT5ubHBfZmxhZyB8PSBOTFBfTlBSXzJCX0RJU0M7CiAJfSBlbHNlIHsKIAkJLyogVGhpcyBzaWRlIHdpbGwgd2FpdCBmb3IgdGhlIFBMT0dJICovCi0JCW1lbXBvb2xfZnJlZSggbmRscCwgcGhiYS0+bmxwX21lbV9wb29sKTsKKwkJbHBmY19ubHBfcHV0KG5kbHApOwogCX0KIAogCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKQEAgLTQwNyw4ICs0MDgsOCBAQAogfQogCiBzdGF0aWMgdm9pZAotbHBmY19jbXBsX2Vsc19mbG9naShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAotCQkgICAgc3RydWN0IGxwZmNfaW9jYnEgKiBjbWRpb2NiLCBzdHJ1Y3QgbHBmY19pb2NicSAqIHJzcGlvY2IpCitscGZjX2NtcGxfZWxzX2Zsb2dpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCisJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKIHsKIAlJT0NCX3QgKmlyc3AgPSAmcnNwaW9jYi0+aW9jYjsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IGNtZGlvY2ItPmNvbnRleHQxOwpAQCAtNDE4LDcgKzQxOSw3IEBACiAKIAkvKiBDaGVjayB0byBzZWUgaWYgbGluayB3ZW50IGRvd24gZHVyaW5nIGRpc2NvdmVyeSAqLwogCWlmIChscGZjX2Vsc19jaGtfbGF0dChwaGJhKSkgewotCQlscGZjX25scF9yZW1vdmUocGhiYSwgbmRscCk7CisJCWxwZmNfbmxwX3B1dChuZGxwKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC00MzMsMTMgKzQzNCwxMiBAQAogCQlwaGJhLT5mY19mbGFnICY9IH4oRkNfRkFCUklDIHwgRkNfUFVCTElDX0xPT1ApOwogCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAotCQkvKiBJZiBwcml2YXRlIGxvb3AsIHRoZW4gYWxsb3cgbWF4IG91dHN0YW5kdGluZyBlbHMgdG8gYmUKKwkJLyogSWYgcHJpdmF0ZSBsb29wLCB0aGVuIGFsbG93IG1heCBvdXRzdGFuZGluZyBlbHMgdG8gYmUKIAkJICogTFBGQ19NQVhfRElTQ19USFJFQURTICgzMikuIFNjYW5uaW5nIGluIHRoZSBjYXNlIG9mIG5vCiAJCSAqIGFscGEgbWFwIHdvdWxkIHRha2UgdG9vIGxvbmcgb3RoZXJ3aXNlLgogCQkgKi8KIAkJaWYgKHBoYmEtPmFscGFfbWFwWzBdID09IDApIHsKLQkJCXBoYmEtPmNmZ19kaXNjb3ZlcnlfdGhyZWFkcyA9Ci0JCQkgICAgTFBGQ19NQVhfRElTQ19USFJFQURTOworCQkJcGhiYS0+Y2ZnX2Rpc2NvdmVyeV90aHJlYWRzID0gTFBGQ19NQVhfRElTQ19USFJFQURTOwogCQl9CiAKIAkJLyogRkxPR0kgZmFpbHVyZSAqLwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAJfQogCiBmbG9naWZhaWw6Ci0JbHBmY19ubHBfcmVtb3ZlKHBoYmEsIG5kbHApOworCWxwZmNfbmxwX3B1dChuZGxwKTsKIAogCWlmIChpcnNwLT51bHBTdGF0dXMgIT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCB8fAogCSAgICAoaXJzcC0+dW4udWxwV29yZFs0XSAhPSBJT0VSUl9TTElfQUJPUlRFRCAmJgpAQCAtNTgyLDI0ICs1ODIsOCBAQAogCQlpY21kID0gJmlvY2ItPmlvY2I7CiAJCWlmIChpY21kLT51bHBDb21tYW5kID09IENNRF9FTFNfUkVRVUVTVDY0X0NSKSB7CiAJCQluZGxwID0gKHN0cnVjdCBscGZjX25vZGVsaXN0ICopKGlvY2ItPmNvbnRleHQxKTsKLQkJCWlmIChuZGxwICYmIChuZGxwLT5ubHBfRElEID09IEZhYnJpY19ESUQpKSB7Ci0JCQkJbGlzdF9kZWwoJmlvY2ItPmxpc3QpOwotCQkJCXByaW5nLT50eGNtcGxxX2NudC0tOwotCi0JCQkJaWYgKChpY21kLT51bi5lbHNyZXE2NC5iZGwudWxwSW9UYWczMikpIHsKLQkJCQkJbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWczMgotCQkJCQkJKHBoYmEsIHByaW5nLCBpb2NiKTsKLQkJCQl9Ci0JCQkJaWYgKGlvY2ItPmlvY2JfY21wbCkgewotCQkJCQlpY21kLT51bHBTdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOwotCQkJCQlpY21kLT51bi51bHBXb3JkWzRdID0KLQkJCQkJICAgIElPRVJSX1NMSV9BQk9SVEVEOwotCQkJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCQkJKGlvY2ItPmlvY2JfY21wbCkgKHBoYmEsIGlvY2IsIGlvY2IpOwotCQkJCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCQkJfSBlbHNlCi0JCQkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgaW9jYik7Ci0JCQl9CisJCQlpZiAobmRscCAmJiAobmRscC0+bmxwX0RJRCA9PSBGYWJyaWNfRElEKSkKKwkJCQlscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZyhwaGJhLCBwcmluZywgaW9jYik7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC02MDgsMTIgKzU5MiwxMiBAQAogfQogCiBpbnQKLWxwZmNfaW5pdGlhbF9mbG9naShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQorbHBmY19pbml0aWFsX2Zsb2dpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKIAogCS8qIEZpcnN0IGxvb2sgZm9yIHRoZSBGYWJyaWMgbmRscCAqLwotCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOTFBfU0VBUkNIX0FMTCwgRmFicmljX0RJRCk7CisJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIEZhYnJpY19ESUQpOwogCWlmICghbmRscCkgewogCQkvKiBDYW5ub3QgZmluZCBleGlzdGluZyBGYWJyaWMgbmRscCwgc28gYWxsb2NhdGUgYSBuZXcgb25lICovCiAJCW5kbHAgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm5scF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CkBAIC02MjEsMTAgKzYwNSwxMCBAQAogCQkJcmV0dXJuIDA7CiAJCWxwZmNfbmxwX2luaXQocGhiYSwgbmRscCwgRmFicmljX0RJRCk7CiAJfSBlbHNlIHsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfSlVTVF9EUSk7CisJCWxwZmNfZGVxdWV1ZV9ub2RlKHBoYmEsIG5kbHApOwogCX0KIAlpZiAobHBmY19pc3N1ZV9lbHNfZmxvZ2kocGhiYSwgbmRscCwgMCkpIHsKLQkJbWVtcG9vbF9mcmVlKCBuZGxwLCBwaGJhLT5ubHBfbWVtX3Bvb2wpOworCQlscGZjX25scF9wdXQobmRscCk7CiAJfQogCXJldHVybiAxOwogfQpAQCAtNjUzLDcgKzYzNyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqCi1scGZjX3Bsb2dpX2NvbmZpcm1fbnBvcnQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfZG1hYnVmICpwcnNwLAorbHBmY19wbG9naV9jb25maXJtX25wb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfZG1hYnVmICpwcnNwLAogCQkJIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQogewogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZXdfbmRscDsKQEAgLTY3MCwxMiArNjU0LDEyIEBACiAKIAlscCA9ICh1aW50MzJfdCAqKSBwcnNwLT52aXJ0OwogCXNwID0gKHN0cnVjdCBzZXJ2X3Bhcm0gKikgKCh1aW50OF90ICopIGxwICsgc2l6ZW9mICh1aW50MzJfdCkpOwotCW1lbXNldChuYW1lLCAwLCBzaXplb2YgKHN0cnVjdCBscGZjX25hbWUpKTsKKwltZW1zZXQobmFtZSwgMCwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKIAotCS8qIE5vdyB3ZSB0byBmaW5kIG91dCBpZiB0aGUgTlBvcnQgd2UgYXJlIGxvZ2dpbmcgaW50bywgbWF0Y2hlcyB0aGUgV1dQTgorCS8qIE5vdyB3ZSBmaW5kIG91dCBpZiB0aGUgTlBvcnQgd2UgYXJlIGxvZ2dpbmcgaW50bywgbWF0Y2hlcyB0aGUgV1dQTgogCSAqIHdlIGhhdmUgZm9yIHRoYXQgbmRscC4gSWYgbm90LCB3ZSBoYXZlIHNvbWUgd29yayB0byBkby4KIAkgKi8KLQluZXdfbmRscCA9IGxwZmNfZmluZG5vZGVfd3dwbihwaGJhLCBOTFBfU0VBUkNIX0FMTCwgJnNwLT5wb3J0TmFtZSk7CisJbmV3X25kbHAgPSBscGZjX2ZpbmRub2RlX3d3cG4ocGhiYSwgJnNwLT5wb3J0TmFtZSk7CiAKIAlpZiAobmV3X25kbHAgPT0gbmRscCkKIAkJcmV0dXJuIG5kbHA7CkBAIC02OTUsMTggKzY3OSwxNSBAQAogCWxwZmNfdW5yZWdfcnBpKHBoYmEsIG5ld19uZGxwKTsKIAluZXdfbmRscC0+bmxwX0RJRCA9IG5kbHAtPm5scF9ESUQ7CiAJbmV3X25kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3ByZXZfc3RhdGU7Ci0JbmV3X25kbHAtPm5scF9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKLQlscGZjX25scF9saXN0KHBoYmEsIG5ld19uZGxwLCBuZGxwLT5ubHBfZmxhZyAmIE5MUF9MSVNUX01BU0spOworCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZXdfbmRscCwgbmRscC0+bmxwX3N0YXRlKTsKIAogCS8qIE1vdmUgdGhpcyBiYWNrIHRvIE5QUiBsaXN0ICovCi0JaWYgKG1lbWNtcCgmbmRscC0+bmxwX3BvcnRuYW1lLCBuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpID09IDApIHsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7Ci0JfQorCWlmIChtZW1jbXAoJm5kbHAtPm5scF9wb3J0bmFtZSwgbmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKSA9PSAwKQorCQlscGZjX2Ryb3Bfbm9kZShwaGJhLCBuZGxwKTsKIAllbHNlIHsKIAkJbHBmY191bnJlZ19ycGkocGhiYSwgbmRscCk7CiAJCW5kbHAtPm5scF9ESUQgPSAwOyAvKiBUd28gbmRscHMgY2Fubm90IGhhdmUgdGhlIHNhbWUgZGlkICovCi0JCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7Ci0JCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKKwkJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfTlBSX05PREUpOwogCX0KIAlyZXR1cm4gbmV3X25kbHA7CiB9CkBAIC03MjAsMTMgKzcwMSwxMSBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqcHJzcDsKIAlpbnQgZGlzYywgcmMsIGRpZCwgdHlwZTsKIAotCiAJLyogd2UgcGFzcyBjbWRpb2NiIHRvIHN0YXRlIG1hY2hpbmUgd2hpY2ggbmVlZHMgcnNwaW9jYiBhcyB3ZWxsICovCiAJY21kaW9jYi0+Y29udGV4dF91bi5yc3BfaW9jYiA9IHJzcGlvY2I7CiAKIAlpcnNwID0gJnJzcGlvY2ItPmlvY2I7Ci0JbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLAotCQkJCQkJaXJzcC0+dW4uZWxzcmVxNjQucmVtb3RlSUQpOworCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBpcnNwLT51bi5lbHNyZXE2NC5yZW1vdGVJRCk7CiAJaWYgKCFuZGxwKQogCQlnb3RvIG91dDsKIApAQCAtMTM1NCw3ICsxMzMzLDcgQEAKIAllbHNpb2NiID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDEsIGNtZHNpemUsIHJldHJ5LCBuZGxwLAogCQkJCQkJbmRscC0+bmxwX0RJRCwgRUxTX0NNRF9TQ1IpOwogCWlmICghZWxzaW9jYikgewotCQltZW1wb29sX2ZyZWUoIG5kbHAsIHBoYmEtPm5scF9tZW1fcG9vbCk7CisJCWxwZmNfbmxwX3B1dChuZGxwKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0xMzczLDEyICsxMzUyLDEyIEBACiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWlmIChscGZjX3NsaV9pc3N1ZV9pb2NiKHBoYmEsIHByaW5nLCBlbHNpb2NiLCAwKSA9PSBJT0NCX0VSUk9SKSB7CiAJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQltZW1wb29sX2ZyZWUoIG5kbHAsIHBoYmEtPm5scF9tZW1fcG9vbCk7CisJCWxwZmNfbmxwX3B1dChuZGxwKTsKIAkJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGVsc2lvY2IpOwogCQlyZXR1cm4gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JbWVtcG9vbF9mcmVlKCBuZGxwLCBwaGJhLT5ubHBfbWVtX3Bvb2wpOworCWxwZmNfbmxwX3B1dChuZGxwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQwNyw3ICsxMzg2LDcgQEAKIAllbHNpb2NiID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDEsIGNtZHNpemUsIHJldHJ5LCBuZGxwLAogCQkJCQkJbmRscC0+bmxwX0RJRCwgRUxTX0NNRF9STklEKTsKIAlpZiAoIWVsc2lvY2IpIHsKLQkJbWVtcG9vbF9mcmVlKCBuZGxwLCBwaGJhLT5ubHBfbWVtX3Bvb2wpOworCQlscGZjX25scF9wdXQobmRscCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTQyOCw3ICsxNDA3LDcgQEAKIAogCW1lbWNweSgmZnAtPlJwb3J0TmFtZSwgJnBoYmEtPmZjX3BvcnRuYW1lLCBzaXplb2YgKHN0cnVjdCBscGZjX25hbWUpKTsKIAltZW1jcHkoJmZwLT5Sbm9kZU5hbWUsICZwaGJhLT5mY19ub2RlbmFtZSwgc2l6ZW9mIChzdHJ1Y3QgbHBmY19uYW1lKSk7Ci0JaWYgKChvbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLCBucG9ydGlkKSkpIHsKKwlpZiAoKG9uZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYSwgbnBvcnRpZCkpKSB7CiAJCW1lbWNweSgmZnAtPk9wb3J0TmFtZSwgJm9uZGxwLT5ubHBfcG9ydG5hbWUsCiAJCSAgICAgICBzaXplb2YgKHN0cnVjdCBscGZjX25hbWUpKTsKIAkJbWVtY3B5KCZmcC0+T25vZGVOYW1lLCAmb25kbHAtPm5scF9ub2RlbmFtZSwKQEAgLTE0NDAsMTIgKzE0MTksMTIgQEAKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJaWYgKGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgcHJpbmcsIGVsc2lvY2IsIDApID09IElPQ0JfRVJST1IpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCW1lbXBvb2xfZnJlZSggbmRscCwgcGhiYS0+bmxwX21lbV9wb29sKTsKKwkJbHBmY19ubHBfcHV0KG5kbHApOwogCQlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgZWxzaW9jYik7CiAJCXJldHVybiAxOwogCX0KIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQltZW1wb29sX2ZyZWUoIG5kbHAsIHBoYmEtPm5scF9tZW1fcG9vbCk7CisJbHBmY19ubHBfcHV0KG5kbHApOwogCXJldHVybiAwOwogfQogCkBAIC0xNTU0LDI5ICsxNTMzLDI1IEBACiAJY2FzZSBFTFNfQ01EX1BMT0dJOgogCQlpZighbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgbmRscC0+bmxwX0RJRCwgcmV0cnkpKSB7CiAJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKLQkJCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfUExPR0lfSVNTVUU7Ci0JCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9QTE9HSV9MSVNUKTsKKwkJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX1BMT0dJX0lTU1VFKTsKIAkJfQogCQlicmVhazsKIAljYXNlIEVMU19DTURfQURJU0M6CiAJCWlmICghbHBmY19pc3N1ZV9lbHNfYWRpc2MocGhiYSwgbmRscCwgcmV0cnkpKSB7CiAJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKLQkJCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfQURJU0NfSVNTVUU7Ci0JCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9BRElTQ19MSVNUKTsKKwkJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX0FESVNDX0lTU1VFKTsKIAkJfQogCQlicmVhazsKIAljYXNlIEVMU19DTURfUFJMSToKIAkJaWYgKCFscGZjX2lzc3VlX2Vsc19wcmxpKHBoYmEsIG5kbHAsIHJldHJ5KSkgewogCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7Ci0JCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BSTElfSVNTVUU7Ci0JCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9QUkxJX0xJU1QpOworCQkJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfUFJMSV9JU1NVRSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBFTFNfQ01EX0xPR086CiAJCWlmICghbHBmY19pc3N1ZV9lbHNfbG9nbyhwaGJhLCBuZGxwLCByZXRyeSkpIHsKIAkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOwotCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKLQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKKwkJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX05QUl9OT0RFKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xNjE0LDEyICsxNTg5LDEyIEBACiAJCWNtZCA9ICplbHNjbWQrKzsKIAl9CiAKLQlpZihuZGxwKQorCWlmIChuZGxwKQogCQlkaWQgPSBuZGxwLT5ubHBfRElEOwogCWVsc2UgewogCQkvKiBXZSBzaG91bGQgb25seSBoaXQgdGhpcyBjYXNlIGZvciByZXRyeWluZyBQTE9HSSAqLwogCQlkaWQgPSBpcnNwLT51bi5lbHNyZXE2NC5yZW1vdGVJRDsKLQkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLCBkaWQpOworCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYSwgZGlkKTsKIAkJaWYgKCFuZGxwICYmIChjbWQgIT0gRUxTX0NNRF9QTE9HSSkpCiAJCQlyZXR1cm4gMTsKIAl9CkBAIC0xNzQ2LDggKzE3MjEsNyBAQAogCQkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1RNTzsKIAogCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7Ci0JCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwotCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOworCQkJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfTlBSX05PREUpOwogCQkJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gY21kOwogCiAJCQlyZXR1cm4gMTsKQEAgLTE3NTksMjcgKzE3MzMsMjQgQEAKIAkJY2FzZSBFTFNfQ01EX1BMT0dJOgogCQkJaWYgKG5kbHApIHsKIAkJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKLQkJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOwotCQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1BMT0dJX0xJU1QpOworCQkJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLAorCQkJCQkJICAgTkxQX1NURV9QTE9HSV9JU1NVRSk7CiAJCQl9CiAJCQlscGZjX2lzc3VlX2Vsc19wbG9naShwaGJhLCBkaWQsIGNtZGlvY2ItPnJldHJ5KTsKIAkJCXJldHVybiAxOwogCQljYXNlIEVMU19DTURfQURJU0M6CiAJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKLQkJCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfQURJU0NfSVNTVUU7Ci0JCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9BRElTQ19MSVNUKTsKKwkJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX0FESVNDX0lTU1VFKTsKIAkJCWxwZmNfaXNzdWVfZWxzX2FkaXNjKHBoYmEsIG5kbHAsIGNtZGlvY2ItPnJldHJ5KTsKIAkJCXJldHVybiAxOwogCQljYXNlIEVMU19DTURfUFJMSToKIAkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOwotCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9QUkxJX0lTU1VFOwotCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUFJMSV9MSVNUKTsKKwkJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX1BSTElfSVNTVUUpOwogCQkJbHBmY19pc3N1ZV9lbHNfcHJsaShwaGJhLCBuZGxwLCBjbWRpb2NiLT5yZXRyeSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSBFTFNfQ01EX0xPR086CiAJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKLQkJCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7Ci0JCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CisJCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9OUFJfTk9ERSk7CiAJCQlscGZjX2lzc3VlX2Vsc19sb2dvKHBoYmEsIG5kbHAsIGNtZGlvY2ItPnJldHJ5KTsKIAkJCXJldHVybiAxOwogCQl9CkBAIC0xNzk2LDEwICsxNzY3LDE0IEBACiB9CiAKIGludAotbHBmY19lbHNfZnJlZV9pb2NiKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICogZWxzaW9jYikKK2xwZmNfZWxzX2ZyZWVfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICplbHNpb2NiKQogewogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYnVmX3B0ciwgKmJ1Zl9wdHIxOwogCisJaWYgKGVsc2lvY2ItPmNvbnRleHQxKSB7CisJCWxwZmNfbmxwX3B1dChlbHNpb2NiLT5jb250ZXh0MSk7CisJCWVsc2lvY2ItPmNvbnRleHQxID0gTlVMTDsKKwl9CiAJLyogY29udGV4dDIgID0gY21kLCAgY29udGV4dDItPm5leHQgPSByc3AsIGNvbnRleHQzID0gYnBsICovCiAJaWYgKGVsc2lvY2ItPmNvbnRleHQyKSB7CiAJCWJ1Zl9wdHIxID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBlbHNpb2NiLT5jb250ZXh0MjsKQEAgLTE4NDMsNyArMTgxOCw3IEBACiAKIAlzd2l0Y2ggKG5kbHAtPm5scF9zdGF0ZSkgewogCWNhc2UgTkxQX1NURV9VTlVTRURfTk9ERToJLyogbm9kZSBpcyBqdXN0IGFsbG9jYXRlZCAqLwotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwkJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CiAJCWJyZWFrOwogCWNhc2UgTkxQX1NURV9OUFJfTk9ERToJCS8qIE5Qb3J0IFJlY292ZXJ5IG1vZGUgKi8KIAkJbHBmY191bnJlZ19ycGkocGhiYSwgbmRscCk7CkBAIC0xODU2LDggKzE4MzEsOCBAQAogfQogCiBzdGF0aWMgdm9pZAotbHBmY19jbXBsX2Vsc19hY2Moc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBjbWRpb2NiLAotCQkgIHN0cnVjdCBscGZjX2lvY2JxICogcnNwaW9jYikKK2xwZmNfY21wbF9lbHNfYWNjKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCisJCSAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCiB7CiAJSU9DQl90ICppcnNwOwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwpAQCAtMTg3MiwxNCArMTg0NywxNCBAQAogCiAKIAkvKiBDaGVjayB0byBzZWUgaWYgbGluayB3ZW50IGRvd24gZHVyaW5nIGRpc2NvdmVyeSAqLwotCWlmICgobHBmY19lbHNfY2hrX2xhdHQocGhiYSkpIHx8ICFuZGxwKSB7CisJaWYgKGxwZmNfZWxzX2Noa19sYXR0KHBoYmEpIHx8ICFuZGxwKSB7CiAJCWlmIChtYm94KSB7CiAJCQltcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgbWJveC0+Y29udGV4dDE7CiAJCQlpZiAobXApIHsKIAkJCQlscGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwogCQkJCWtmcmVlKG1wKTsKIAkJCX0KLQkJCW1lbXBvb2xfZnJlZSggbWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCX0KIAkJZ290byBvdXQ7CiAJfQpAQCAtMTg5OSwxNSArMTg3NCwxNSBAQAogCQkgICAgJiYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0FDQ19SRUdMT0dJTikpIHsKIAkJCWxwZmNfdW5yZWdfcnBpKHBoYmEsIG5kbHApOwogCQkJbWJveC0+bWJveF9jbXBsID0gbHBmY19tYnhfY21wbF9yZWdfbG9naW47Ci0JCQltYm94LT5jb250ZXh0MiA9IG5kbHA7CisJCQltYm94LT5jb250ZXh0MiA9IGxwZmNfbmxwX2dldChuZGxwKTsKIAkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOwotCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9SRUdfTE9HSU5fSVNTVUU7Ci0JCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9SRUdMT0dJTl9MSVNUKTsKKwkJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX1JFR19MT0dJTl9JU1NVRSk7CiAJCQlpZiAobHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LAogCQkJCQkJKE1CWF9OT1dBSVQgfCBNQlhfU1RPUF9JT0NCKSkKIAkJCSAgICAhPSBNQlhfTk9UX0ZJTklTSEVEKSB7CiAJCQkJZ290byBvdXQ7CiAJCQl9CisJCQlscGZjX25scF9wdXQobmRscCk7CiAJCQkvKiBOT1RFOiB3ZSBzaG91bGQgaGF2ZSBtZXNzYWdlcyBmb3IgdW5zdWNjZXNzZnVsCiAJCQkgICByZWdsb2dpbiAqLwogCQl9IGVsc2UgewpAQCAtMTkxNyw3ICsxODkyLDcgQEAKIAkJCSAgICAgICAoaXJzcC0+dW4udWxwV29yZFs0XSA9PSBJT0VSUl9MSU5LX0RPV04pIHx8CiAJCQkgICAgICAgKGlyc3AtPnVuLnVscFdvcmRbNF0gPT0gSU9FUlJfU0xJX0RPV04pKSkpIHsKIAkJCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfQUNDX1JFR0xPR0lOKSB7Ci0JCQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQkJCQlscGZjX2Ryb3Bfbm9kZShwaGJhLCBuZGxwKTsKIAkJCQkJbmRscCA9IE5VTEw7CiAJCQkJfQogCQkJfQpAQCAtMjAxMiwxNSArMTk4NywxNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAobmV3bm9kZSkKKwlpZiAobmV3bm9kZSkgeworCQlscGZjX25scF9wdXQobmRscCk7CiAJCWVsc2lvY2ItPmNvbnRleHQxID0gTlVMTDsKKwl9CiAKIAkvKiBYbWl0IEVMUyBBQ0MgcmVzcG9uc2UgdGFnIDx1bHBJb1RhZz4gKi8KIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLAotCQkJIiVkOjAxMjggWG1pdCBFTFMgQUNDIHJlc3BvbnNlIHRhZyB4JXggIgotCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleCB4JXhcbiIsCi0JCQlwaGJhLT5icmRfbm8sCi0JCQllbHNpb2NiLT5pb2NiLnVscElvVGFnLAorCQkJIiVkOjAxMjggWG1pdCBFTFMgQUNDIHJlc3BvbnNlIHRhZyB4JXgsIFhSSTogeCV4LCAiCisJCQkiRElEOiB4JXgsIG5scF9mbGFnOiB4JXggbmxwX3N0YXRlOiB4JXggUlBJOiB4JXhcbiIsCisJCQlwaGJhLT5icmRfbm8sIGVsc2lvY2ItPmlvdGFnLAogCQkJZWxzaW9jYi0+aW9jYi51bHBDb250ZXh0LCBuZGxwLT5ubHBfRElELAogCQkJbmRscC0+bmxwX2ZsYWcsIG5kbHAtPm5scF9zdGF0ZSwgbmRscC0+bmxwX3JwaSk7CiAKQEAgLTIwNzcsMTAgKzIwNTMsOSBAQAogCiAJLyogWG1pdCBFTFMgUkpUIDxlcnI+IHJlc3BvbnNlIHRhZyA8dWxwSW9UYWc+ICovCiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywKLQkJCSIlZDowMTI5IFhtaXQgRUxTIFJKVCB4JXggcmVzcG9uc2UgdGFnIHgleCAiCi0JCQkiRGF0YTogeCV4IHgleCB4JXggeCV4IHgleFxuIiwKLQkJCXBoYmEtPmJyZF9ubywKLQkJCXJlamVjdEVycm9yLCBlbHNpb2NiLT5pb2NiLnVscElvVGFnLAorCQkJIiVkOjAxMjkgWG1pdCBFTFMgUkpUIHgleCByZXNwb25zZSB0YWcgeCV4IHhyaSB4JXgsICIKKwkJCSJkaWQgeCV4LCBubHBfZmxhZyB4JXgsIG5scF9zdGF0ZSB4JXgsIHJwaSB4JXhcbiIsCisJCQlwaGJhLT5icmRfbm8sIHJlamVjdEVycm9yLCBlbHNpb2NiLT5pb3RhZywKIAkJCWVsc2lvY2ItPmlvY2IudWxwQ29udGV4dCwgbmRscC0+bmxwX0RJRCwKIAkJCW5kbHAtPm5scF9mbGFnLCBuZGxwLT5ubHBfc3RhdGUsIG5kbHAtPm5scF9ycGkpOwogCkBAIC0yMTE5LDE4ICsyMDk0LDE4IEBACiAJaWYgKCFlbHNpb2NiKQogCQlyZXR1cm4gMTsKIAotCS8qIFhtaXQgQURJU0MgQUNDIHJlc3BvbnNlIHRhZyA8dWxwSW9UYWc+ICovCi0JbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywKLQkJCSIlZDowMTMwIFhtaXQgQURJU0MgQUNDIHJlc3BvbnNlIHRhZyB4JXggIgotCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleCB4JXhcbiIsCi0JCQlwaGJhLT5icmRfbm8sCi0JCQllbHNpb2NiLT5pb2NiLnVscElvVGFnLAotCQkJZWxzaW9jYi0+aW9jYi51bHBDb250ZXh0LCBuZGxwLT5ubHBfRElELAotCQkJbmRscC0+bmxwX2ZsYWcsIG5kbHAtPm5scF9zdGF0ZSwgbmRscC0+bmxwX3JwaSk7Ci0KIAlpY21kID0gJmVsc2lvY2ItPmlvY2I7CiAJb2xkY21kID0gJm9sZGlvY2ItPmlvY2I7CiAJaWNtZC0+dWxwQ29udGV4dCA9IG9sZGNtZC0+dWxwQ29udGV4dDsJLyogWHJpICovCisKKwkvKiBYbWl0IEFESVNDIEFDQyByZXNwb25zZSB0YWcgPHVscElvVGFnPiAqLworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCisJCQkiJWQ6MDEzMCBYbWl0IEFESVNDIEFDQyByZXNwb25zZSBpb3RhZyB4JXggeHJpOiAiCisJCQkieCV4LCBkaWQgeCV4LCBubHBfZmxhZyB4JXgsIG5scF9zdGF0ZSB4JXggcnBpIHgleFxuIiwKKwkJCXBoYmEtPmJyZF9ubywgZWxzaW9jYi0+aW90YWcsCisJCQllbHNpb2NiLT5pb2NiLnVscENvbnRleHQsIG5kbHAtPm5scF9ESUQsCisJCQluZGxwLT5ubHBfZmxhZywgbmRscC0+bmxwX3N0YXRlLCBuZGxwLT5ubHBfcnBpKTsKKwogCXBjbWQgPSAodWludDhfdCAqKSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgZWxzaW9jYi0+Y29udGV4dDIpLT52aXJ0KTsKIAogCSooKHVpbnQzMl90ICopIChwY21kKSkgPSBFTFNfQ01EX0FDQzsKQEAgLTIxNTUsOCArMjEzMCw4IEBACiB9CiAKIGludAotbHBmY19lbHNfcnNwX3BybGlfYWNjKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCi0JCSAgICAgIHN0cnVjdCBscGZjX2lvY2JxICogb2xkaW9jYiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwKQorbHBmY19lbHNfcnNwX3BybGlfYWNjKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKm9sZGlvY2IsCisJCSAgICAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQogewogCVBSTEkgKm5wcjsKIAlscGZjX3ZwZF90ICp2cGQ7CkBAIC0yMTc4LDE4ICsyMTUzLDE4IEBACiAJaWYgKCFlbHNpb2NiKQogCQlyZXR1cm4gMTsKIAotCS8qIFhtaXQgUFJMSSBBQ0MgcmVzcG9uc2UgdGFnIDx1bHBJb1RhZz4gKi8KLQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLAotCQkJIiVkOjAxMzEgWG1pdCBQUkxJIEFDQyByZXNwb25zZSB0YWcgeCV4ICIKLQkJCSJEYXRhOiB4JXggeCV4IHgleCB4JXggeCV4XG4iLAotCQkJcGhiYS0+YnJkX25vLAotCQkJZWxzaW9jYi0+aW9jYi51bHBJb1RhZywKLQkJCWVsc2lvY2ItPmlvY2IudWxwQ29udGV4dCwgbmRscC0+bmxwX0RJRCwKLQkJCW5kbHAtPm5scF9mbGFnLCBuZGxwLT5ubHBfc3RhdGUsIG5kbHAtPm5scF9ycGkpOwotCiAJaWNtZCA9ICZlbHNpb2NiLT5pb2NiOwogCW9sZGNtZCA9ICZvbGRpb2NiLT5pb2NiOwogCWljbWQtPnVscENvbnRleHQgPSBvbGRjbWQtPnVscENvbnRleHQ7CS8qIFhyaSAqLworCisJLyogWG1pdCBQUkxJIEFDQyByZXNwb25zZSB0YWcgPHVscElvVGFnPiAqLworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCisJCQkiJWQ6MDEzMSBYbWl0IFBSTEkgQUNDIHJlc3BvbnNlIHRhZyB4JXggeHJpIHgleCwgIgorCQkJImRpZCB4JXgsIG5scF9mbGFnIHgleCwgbmxwX3N0YXRlIHgleCwgcnBpIHgleFxuIiwKKwkJCXBoYmEtPmJyZF9ubywgZWxzaW9jYi0+aW90YWcsCisJCQllbHNpb2NiLT5pb2NiLnVscENvbnRleHQsIG5kbHAtPm5scF9ESUQsCisJCQluZGxwLT5ubHBfZmxhZywgbmRscC0+bmxwX3N0YXRlLCBuZGxwLT5ubHBfcnBpKTsKKwogCXBjbWQgPSAodWludDhfdCAqKSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgZWxzaW9jYi0+Y29udGV4dDIpLT52aXJ0KTsKIAogCSooKHVpbnQzMl90ICopIChwY21kKSkgPSAoRUxTX0NNRF9BQ0MgfCAoRUxTX0NNRF9QUkxJICYgfkVMU19SU1BfTUFTSykpOwpAQCAtMjIzMiw5ICsyMjA3LDggQEAKIH0KIAogc3RhdGljIGludAotbHBmY19lbHNfcnNwX3JuaWRfYWNjKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCi0JCSAgICAgIHVpbnQ4X3QgZm9ybWF0LAotCQkgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqIG9sZGlvY2IsIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCkKK2xwZmNfZWxzX3JzcF9ybmlkX2FjYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQ4X3QgZm9ybWF0LAorCQkgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqb2xkaW9jYiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCiB7CiAJUk5JRCAqcm47CiAJSU9DQl90ICppY21kOwpAQCAtMjI1OSwxNyArMjIzMywxNyBAQAogCWlmICghZWxzaW9jYikKIAkJcmV0dXJuIDE7CiAKLQkvKiBYbWl0IFJOSUQgQUNDIHJlc3BvbnNlIHRhZyA8dWxwSW9UYWc+ICovCi0JbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywKLQkJCSIlZDowMTMyIFhtaXQgUk5JRCBBQ0MgcmVzcG9uc2UgdGFnIHgleCAiCi0JCQkiRGF0YTogeCV4XG4iLAotCQkJcGhiYS0+YnJkX25vLAotCQkJZWxzaW9jYi0+aW9jYi51bHBJb1RhZywKLQkJCWVsc2lvY2ItPmlvY2IudWxwQ29udGV4dCk7Ci0KIAlpY21kID0gJmVsc2lvY2ItPmlvY2I7CiAJb2xkY21kID0gJm9sZGlvY2ItPmlvY2I7CiAJaWNtZC0+dWxwQ29udGV4dCA9IG9sZGNtZC0+dWxwQ29udGV4dDsJLyogWHJpICovCisKKwkvKiBYbWl0IFJOSUQgQUNDIHJlc3BvbnNlIHRhZyA8dWxwSW9UYWc+ICovCisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywKKwkJCSIlZDowMTMyIFhtaXQgUk5JRCBBQ0MgcmVzcG9uc2UgdGFnIHgleCAiCisJCQkieHJpIHgleFxuIiwKKwkJCXBoYmEtPmJyZF9ubywgZWxzaW9jYi0+aW90YWcsCisJCQllbHNpb2NiLT5pb2NiLnVscENvbnRleHQpOworCiAJcGNtZCA9ICh1aW50OF90ICopICgoKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBlbHNpb2NiLT5jb250ZXh0MiktPnZpcnQpOwogCiAJKigodWludDMyX3QgKikgKHBjbWQpKSA9IEVMU19DTURfQUNDOwpAQCAtMjMwMSw2ICsyMjc1LDcgQEAKIAogCXBoYmEtPmZjX3N0YXQuZWxzWG1pdEFDQysrOwogCWVsc2lvY2ItPmlvY2JfY21wbCA9IGxwZmNfY21wbF9lbHNfYWNjOworCWxwZmNfbmxwX3B1dChuZGxwKTsKIAllbHNpb2NiLT5jb250ZXh0MSA9IE5VTEw7ICAvKiBEb24ndCBuZWVkIG5kbHAgZm9yIGNtcGwsCiAJCQkJICAgICogaXQgY291bGQgYmUgZnJlZWQgKi8KIApAQCAtMjMxNSwzMiArMjI5MCwzMSBAQAogfQogCiBpbnQKLWxwZmNfZWxzX2Rpc2NfYWRpc2Moc3RydWN0IGxwZmNfaGJhICogcGhiYSkKK2xwZmNfZWxzX2Rpc2NfYWRpc2Moc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCWludCBzZW50YWRpc2M7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsICpuZXh0X25kbHA7CiAKIAlzZW50YWRpc2MgPSAwOwotCS8qIGdvIHRocnUgTlBSIGxpc3QgYW5kIGlzc3VlIGFueSByZW1haW5pbmcgRUxTIEFESVNDcyAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZwaGJhLT5mY19ucHJfbGlzdCwKLQkJCW5scF9saXN0cCkgewotCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSXzJCX0RJU0MpIHsKLQkJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfQURJU0MpIHsKLQkJCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl9BRElTQzsKLQkJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKLQkJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX0FESVNDX0lTU1VFOwotCQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwKLQkJCQkJTkxQX0FESVNDX0xJU1QpOwotCQkJCWxwZmNfaXNzdWVfZWxzX2FkaXNjKHBoYmEsIG5kbHAsIDApOwotCQkJCXNlbnRhZGlzYysrOwotCQkJCXBoYmEtPm51bV9kaXNjX25vZGVzKys7Ci0JCQkJaWYgKHBoYmEtPm51bV9kaXNjX25vZGVzID49Ci0JCQkJICAgIHBoYmEtPmNmZ19kaXNjb3ZlcnlfdGhyZWFkcykgewotCQkJCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCQkJCXBoYmEtPmZjX2ZsYWcgfD0gRkNfTkxQX01PUkU7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJCQlicmVhazsKLQkJCQl9CisJLyogZ28gdGhydSBOUFIgbm9kZXMgYW5kIGlzc3VlIGFueSByZW1haW5pbmcgRUxTIEFESVNDcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZwaGJhLT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCWlmIChuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9OUFJfTk9ERSAmJgorCQkgICAgKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl8yQl9ESVNDKSAhPSAwICYmCisJCSAgICAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSX0FESVNDKSAhPSAwKSB7CisJCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl9BRElTQzsKKwkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7CisJCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9BRElTQ19JU1NVRSk7CisJCQlscGZjX2lzc3VlX2Vsc19hZGlzYyhwaGJhLCBuZGxwLCAwKTsKKwkJCXNlbnRhZGlzYysrOworCQkJcGhiYS0+bnVtX2Rpc2Nfbm9kZXMrKzsKKwkJCWlmIChwaGJhLT5udW1fZGlzY19ub2RlcyA+PQorCQkJICAgIHBoYmEtPmNmZ19kaXNjb3ZlcnlfdGhyZWFkcykgeworCQkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJCQlwaGJhLT5mY19mbGFnIHw9IEZDX05MUF9NT1JFOworCQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQpAQCAtMjM2MCwyNCArMjMzNCwyMiBAQAogCiAJc2VudHBsb2dpID0gMDsKIAkvKiBnbyB0aHJ1IE5QUiBsaXN0IGFuZCBpc3N1ZSBhbnkgcmVtYWluaW5nIEVMUyBQTE9HSXMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfbnByX2xpc3QsCi0JCQkJbmxwX2xpc3RwKSB7Ci0JCWlmICgobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSXzJCX0RJU0MpICYmCi0JCSAgICghKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykpKSB7Ci0JCQlpZiAoIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfQURJU0MpKSB7Ci0JCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7Ci0JCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9QTE9HSV9JU1NVRTsKLQkJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9QTE9HSV9MSVNUKTsKLQkJCQlscGZjX2lzc3VlX2Vsc19wbG9naShwaGJhLCBuZGxwLT5ubHBfRElELCAwKTsKLQkJCQlzZW50cGxvZ2krKzsKLQkJCQlwaGJhLT5udW1fZGlzY19ub2RlcysrOwotCQkJCWlmIChwaGJhLT5udW1fZGlzY19ub2RlcyA+PQotCQkJCSAgICBwaGJhLT5jZmdfZGlzY292ZXJ5X3RocmVhZHMpIHsKLQkJCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJCQlwaGJhLT5mY19mbGFnIHw9IEZDX05MUF9NT1JFOwotCQkJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZwaGJhLT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCWlmIChuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9OUFJfTk9ERSAmJgorCQkgICAgKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl8yQl9ESVNDKSAhPSAwICYmCisJCSAgICAobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVMQVlfVE1PKSA9PSAwICYmCisJCSAgICAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSX0FESVNDKSA9PSAwKSB7CisJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKKwkJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX1BMT0dJX0lTU1VFKTsKKwkJCWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHBoYmEsIG5kbHAtPm5scF9ESUQsIDApOworCQkJc2VudHBsb2dpKys7CisJCQlwaGJhLT5udW1fZGlzY19ub2RlcysrOworCQkJaWYgKHBoYmEtPm51bV9kaXNjX25vZGVzID49CisJCQkgICAgcGhiYS0+Y2ZnX2Rpc2NvdmVyeV90aHJlYWRzKSB7CisJCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQkJCXBoYmEtPmZjX2ZsYWcgfD0gRkNfTkxQX01PUkU7CisJCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CkBAIC0yNDc5LDQyICsyNDUxLDMwIEBACiB9CiAKIHN0YXRpYyBpbnQKLWxwZmNfcnNjbl9yZWNvdmVyeV9jaGVjayhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQorbHBmY19yc2NuX3JlY292ZXJ5X2NoZWNrKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKLQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IE5VTEwsICpuZXh0X25kbHA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdHA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9saXN0WzddOwotCWludCBpOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTDsKIAogCS8qIExvb2sgYXQgYWxsIG5vZGVzIGVmZmVjdGVkIGJ5IHBlbmRpbmcgUlNDTnMgYW5kIG1vdmUKLQkgKiB0aGVtIHRvIE5QUiBsaXN0LgorCSAqIHRoZW0gdG8gTlBSIHN0YXRlLgogCSAqLwotCW5vZGVfbGlzdFswXSA9ICZwaGJhLT5mY19ucHJfbGlzdDsgIC8qIE1VU1QgZG8gdGhpcyBsaXN0IGZpcnN0ICovCi0Jbm9kZV9saXN0WzFdID0gJnBoYmEtPmZjX25scG1hcF9saXN0OwotCW5vZGVfbGlzdFsyXSA9ICZwaGJhLT5mY19ubHB1bm1hcF9saXN0OwotCW5vZGVfbGlzdFszXSA9ICZwaGJhLT5mY19wcmxpX2xpc3Q7Ci0Jbm9kZV9saXN0WzRdID0gJnBoYmEtPmZjX3JlZ2xvZ2luX2xpc3Q7Ci0Jbm9kZV9saXN0WzVdID0gJnBoYmEtPmZjX2FkaXNjX2xpc3Q7Ci0Jbm9kZV9saXN0WzZdID0gJnBoYmEtPmZjX3Bsb2dpX2xpc3Q7Ci0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQlsaXN0cCA9IG5vZGVfbGlzdFtpXTsKLQkJaWYgKGxpc3RfZW1wdHkobGlzdHApKQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZGxwLCAmcGhiYS0+ZmNfbm9kZXMsIG5scF9saXN0cCkgeworCQlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfVU5VU0VEX05PREUgfHwKKwkJICAgIGxwZmNfcnNjbl9wYXlsb2FkX2NoZWNrKHBoYmEsIG5kbHAtPm5scF9ESUQpID09IDApCiAJCQljb250aW51ZTsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCBsaXN0cCwgbmxwX2xpc3RwKSB7Ci0JCQlpZiAoIShscGZjX3JzY25fcGF5bG9hZF9jaGVjayhwaGJhLCBuZGxwLT5ubHBfRElEKSkpCi0JCQkJY29udGludWU7Ci0KLQkJCWxwZmNfZGlzY19zdGF0ZV9tYWNoaW5lKHBoYmEsIG5kbHAsIE5VTEwsCisJCWxwZmNfZGlzY19zdGF0ZV9tYWNoaW5lKHBoYmEsIG5kbHAsIE5VTEwsCiAJCQkJCU5MUF9FVlRfREVWSUNFX1JFQ09WRVJZKTsKIAotCQkJLyogTWFrZSBzdXJlIE5MUF9ERUxBWV9UTU8gaXMgTk9UIHJ1bm5pbmcKLQkJCSAqIGFmdGVyIGEgZGV2aWNlIHJlY292ZXJ5IGV2ZW50LgotCQkJICovCi0JCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVMQVlfVE1PKQotCQkJCWxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3RtbyhwaGJhLCBuZGxwKTsKLQkJfQorCQkvKgorCQkgKiBNYWtlIHN1cmUgTkxQX0RFTEFZX1RNTyBpcyBOT1QgcnVubmluZyBhZnRlciBhIGRldmljZQorCQkgKiByZWNvdmVyeSBldmVudC4KKwkJICovCisJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pCisJCQlscGZjX2NhbmNlbF9yZXRyeV9kZWxheV90bW8ocGhiYSwgbmRscCk7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2MzksOCArMjU5OSw4IEBACiAKIAkvKiBUbyBwcm9jZXNzIFJTQ04sIGZpcnN0IGNvbXBhcmUgUlNDTiBkYXRhIHdpdGggTmFtZVNlcnZlciAqLwogCXBoYmEtPmZjX25zX3JldHJ5ID0gMDsKLQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYSwgTkxQX1NFQVJDSF9VTk1BUFBFRCwgTmFtZVNlcnZlcl9ESUQpOwotCWlmIChuZGxwKSB7CisJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5hbWVTZXJ2ZXJfRElEKTsKKwlpZiAobmRscCAmJiBuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9VTk1BUFBFRF9OT0RFKSB7CiAJCS8qIEdvb2QgbmRscCwgaXNzdWUgQ1QgUmVxdWVzdCB0byBOYW1lU2VydmVyICovCiAJCWlmIChscGZjX25zX2NtZChwaGJhLCBuZGxwLCBTTElfQ1ROU19HSURfRlQpID09IDApIHsKIAkJCS8qIFdhaXQgZm9yIE5hbWVTZXJ2ZXIgcXVlcnkgY21wbCBiZWZvcmUgd2UgY2FuCkBAIC0yNjUwLDcgKzI2MTAsNyBAQAogCX0gZWxzZSB7CiAJCS8qIElmIGxvZ2luIHRvIE5hbWVTZXJ2ZXIgZG9lcyBub3QgZXhpc3QsIGlzc3VlIG9uZSAqLwogCQkvKiBHb29kIHN0YXR1cywgaXNzdWUgUExPR0kgdG8gTmFtZVNlcnZlciAqLwotCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYSwgTkxQX1NFQVJDSF9BTEwsIE5hbWVTZXJ2ZXJfRElEKTsKKwkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5hbWVTZXJ2ZXJfRElEKTsKIAkJaWYgKG5kbHApIHsKIAkJCS8qIFdhaXQgZm9yIE5hbWVTZXJ2ZXIgbG9naW4gY21wbCBiZWZvcmUgd2UgY2FuCiAJCQkgICBjb250aW51ZSAqLwpAQCAtMjY2NCw4ICsyNjI0LDcgQEAKIAkJCWxwZmNfbmxwX2luaXQocGhiYSwgbmRscCwgTmFtZVNlcnZlcl9ESUQpOwogCQkJbmRscC0+bmxwX3R5cGUgfD0gTkxQX0ZBQlJJQzsKIAkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOwotCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9QTE9HSV9JU1NVRTsKLQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1BMT0dJX0xJU1QpOworCQkJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfUExPR0lfSVNTVUUpOwogCQkJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgTmFtZVNlcnZlcl9ESUQsIDApOwogCQkJLyogV2FpdCBmb3IgTmFtZVNlcnZlciBsb2dpbiBjbXBsIGJlZm9yZSB3ZSBjYW4KIAkJCSAgIGNvbnRpbnVlICovCkBAIC0yNzM0LDggKzI2OTMsOSBAQAogCQkJbWJveC0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKIAkJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveAogCQkJCShwaGJhLCBtYm94LCAoTUJYX05PV0FJVCB8IE1CWF9TVE9QX0lPQ0IpKTsKKwkJCWxwZmNfc2V0X2xvb3BiYWNrX2ZsYWcocGhiYSk7CiAJCQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgewotCQkJCW1lbXBvb2xfZnJlZSggbWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCQkJfQogCQkJcmV0dXJuIDE7CiAJCX0gZWxzZSBpZiAocmMgPiAwKSB7CS8qIGdyZWF0ZXIgdGhhbiAqLwpAQCAtMjgwMCw4ICsyNzYwLDggQEAKIH0KIAogc3RhdGljIGludAotbHBmY19lbHNfcmN2X2xpcnIoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBjbWRpb2NiLAotCQkgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwKQorbHBmY19lbHNfcmN2X2xpcnIoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKKwkJIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQogewogCXN0cnVjdCBsc19yanQgc3RhdDsKIApAQCAtMjgxNSw3ICsyNzc1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWxwZmNfZWxzX3JzcF9ycHNfYWNjKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYikKK2xwZmNfZWxzX3JzcF9ycHNfYWNjKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIpCiB7CiAJc3RydWN0IGxwZmNfc2xpICpwc2xpOwogCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZzsKQEAgLTI4MzgsMTQgKzI3OTgsMTUgQEAKIAlwbWItPmNvbnRleHQyID0gTlVMTDsKIAogCWlmIChtYi0+bWJ4U3RhdHVzKSB7Ci0JCW1lbXBvb2xfZnJlZSggcG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCXJldHVybjsKIAl9CiAKIAljbWRzaXplID0gc2l6ZW9mKFJQU19SU1ApICsgc2l6ZW9mKHVpbnQzMl90KTsKLQltZW1wb29sX2ZyZWUoIHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAwLCBjbWRzaXplLCBscGZjX21heF9lbHNfdHJpZXMsIG5kbHAsCiAJCQkJCQluZGxwLT5ubHBfRElELCBFTFNfQ01EX0FDQyk7CisJbHBmY19ubHBfcHV0KG5kbHApOwogCWlmICghZWxzaW9jYikKIAkJcmV0dXJuOwogCkBAIC0yODc1LDE1ICsyODM2LDE1IEBACiAKIAkvKiBYbWl0IEVMUyBSUFMgQUNDIHJlc3BvbnNlIHRhZyA8dWxwSW9UYWc+ICovCiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywKLQkJCSIlZDowMTE4IFhtaXQgRUxTIFJQUyBBQ0MgcmVzcG9uc2UgdGFnIHgleCAiCi0JCQkiRGF0YTogeCV4IHgleCB4JXggeCV4IHgleFxuIiwKLQkJCXBoYmEtPmJyZF9ubywKLQkJCWVsc2lvY2ItPmlvY2IudWxwSW9UYWcsCisJCQkiJWQ6MDExOCBYbWl0IEVMUyBSUFMgQUNDIHJlc3BvbnNlIHRhZyB4JXggeHJpIHgleCwgIgorCQkJImRpZCB4JXgsIG5scF9mbGFnIHgleCwgbmxwX3N0YXRlIHgleCwgcnBpIHgleFxuIiwKKwkJCXBoYmEtPmJyZF9ubywgZWxzaW9jYi0+aW90YWcsCiAJCQllbHNpb2NiLT5pb2NiLnVscENvbnRleHQsIG5kbHAtPm5scF9ESUQsCiAJCQluZGxwLT5ubHBfZmxhZywgbmRscC0+bmxwX3N0YXRlLCBuZGxwLT5ubHBfcnBpKTsKIAogCWVsc2lvY2ItPmlvY2JfY21wbCA9IGxwZmNfY21wbF9lbHNfYWNjOwogCXBoYmEtPmZjX3N0YXQuZWxzWG1pdEFDQysrOworCiAJaWYgKGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgcHJpbmcsIGVsc2lvY2IsIDApID09IElPQ0JfRVJST1IpIHsKIAkJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGVsc2lvY2IpOwogCX0KQEAgLTI5MjMsMTMgKzI4ODQsMTQgQEAKIAkJCWxwZmNfcmVhZF9sbmtfc3RhdChwaGJhLCBtYm94KTsKIAkJCW1ib3gtPmNvbnRleHQxID0KIAkJCSAgICAodm9pZCAqKSgodW5zaWduZWQgbG9uZyljbWRpb2NiLT5pb2NiLnVscENvbnRleHQpOwotCQkJbWJveC0+Y29udGV4dDIgPSBuZGxwOworCQkJbWJveC0+Y29udGV4dDIgPSBscGZjX25scF9nZXQobmRscCk7CiAJCQltYm94LT5tYm94X2NtcGwgPSBscGZjX2Vsc19yc3BfcnBzX2FjYzsKIAkJCWlmIChscGZjX3NsaV9pc3N1ZV9tYm94IChwaGJhLCBtYm94LAogCQkJICAgIChNQlhfTk9XQUlUIHwgTUJYX1NUT1BfSU9DQikpICE9IE1CWF9OT1RfRklOSVNIRUQpIHsKIAkJCQkvKiBNYm94IGNvbXBsZXRpb24gd2lsbCBzZW5kIEVMUyBSZXNwb25zZSAqLwogCQkJCXJldHVybiAwOwogCQkJfQorCQkJbHBmY19ubHBfcHV0KG5kbHApOwogCQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCQl9CiAJfQpAQCAtMjk4NCwxMCArMjk0Niw5IEBACiAKIAkvKiBYbWl0IEVMUyBSUEwgQUNDIHJlc3BvbnNlIHRhZyA8dWxwSW9UYWc+ICovCiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywKLQkJCSIlZDowMTIwIFhtaXQgRUxTIFJQTCBBQ0MgcmVzcG9uc2UgdGFnIHgleCAiCi0JCQkiRGF0YTogeCV4IHgleCB4JXggeCV4IHgleFxuIiwKLQkJCXBoYmEtPmJyZF9ubywKLQkJCWVsc2lvY2ItPmlvY2IudWxwSW9UYWcsCisJCQkiJWQ6MDEyMCBYbWl0IEVMUyBSUEwgQUNDIHJlc3BvbnNlIHRhZyB4JXggeHJpIHgleCwgIgorCQkJImRpZCB4JXgsIG5scF9mbGFnIHgleCwgbmxwX3N0YXRlIHgleCwgcnBpIHgleFxuIiwKKwkJCXBoYmEtPmJyZF9ubywgZWxzaW9jYi0+aW90YWcsCiAJCQllbHNpb2NiLT5pb2NiLnVscENvbnRleHQsIG5kbHAtPm5scF9ESUQsCiAJCQluZGxwLT5ubHBfZmxhZywgbmRscC0+bmxwX3N0YXRlLCBuZGxwLT5ubHBfcnBpKTsKIApAQCAtMzA5MSw4ICszMDUyLDggQEAKIAkJCS8qIExvZyBiYWNrIGludG8gdGhlIG5vZGUgYmVmb3JlIHNlbmRpbmcgdGhlIEZBUlAuICovCiAJCQlpZiAoZnAtPlJmbGFncyAmIEZBUlBfUkVRVUVTVF9QTE9HSSkgewogCQkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOwotCQkJCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfUExPR0lfSVNTVUU7Ci0JCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUExPR0lfTElTVCk7CisJCQkJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsCisJCQkJCQkgICBOTFBfU1RFX1BMT0dJX0lTU1VFKTsKIAkJCQlscGZjX2lzc3VlX2Vsc19wbG9naShwaGJhLCBuZGxwLT5ubHBfRElELCAwKTsKIAkJCX0KIApAQCAtMzE2OSwxNCArMzEzMCwxNSBAQAogCQkJICovCiAKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsCi0JCQkJJnBoYmEtPmZjX25wcl9saXN0LCBubHBfbGlzdHApIHsKLQorCQkJCQkJICZwaGJhLT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCQkJaWYgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX05QUl9OT0RFKQorCQkJCQljb250aW51ZTsKIAkJCQlpZiAobmRscC0+bmxwX3R5cGUgJiBOTFBfRkFCUklDKSB7CiAJCQkJCS8qCiAJCQkJCSAqIENsZWFuIHVwIG9sZCBGYWJyaWMsIE5hbWVzZXJ2ZXIgYW5kCiAJCQkJCSAqIG90aGVyIE5MUF9GQUJSSUMgbG9naW5zCiAJCQkJCSAqLwotCQkJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwkJCQkJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CiAJCQkJfSBlbHNlIGlmICghKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl9BRElTQykpIHsKIAkJCQkJLyogRmFpbCBvdXRzdGFuZGluZyBJL08gbm93IHNpbmNlIHRoaXMKIAkJCQkJICogZGV2aWNlIGlzIG1hcmtlZCBmb3IgUExPR0kKQEAgLTMxOTMsMjAgKzMxNTUsMjIgQEAKIAkJLyogRGlzY292ZXJ5IG5vdCBuZWVkZWQsCiAJCSAqIG1vdmUgdGhlIG5vZGVzIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLgogCQkgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnBoYmEtPmZjX25wcl9saXN0LAotCQkJbmxwX2xpc3RwKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZwaGJhLT5mY19ub2RlcywKKwkJCQkJIG5scF9saXN0cCkgeworCQkJaWYgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX05QUl9OT0RFKQorCQkJCWNvbnRpbnVlOwogCiAJCQlzd2l0Y2ggKG5kbHAtPm5scF9wcmV2X3N0YXRlKSB7CiAJCQljYXNlIE5MUF9TVEVfVU5NQVBQRURfTk9ERToKIAkJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7Ci0JCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9VTk1BUFBFRF9OT0RFOwotCQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1VOTUFQUEVEX0xJU1QpOworCQkJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLAorCQkJCQkJICAgTkxQX1NURV9VTk1BUFBFRF9OT0RFKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBOTFBfU1RFX01BUFBFRF9OT0RFOgogCQkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKLQkJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX01BUFBFRF9OT0RFOwotCQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX01BUFBFRF9MSVNUKTsKKwkJCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwKKwkJCQkJCSAgIE5MUF9TVEVfTUFQUEVEX05PREUpOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgpAQCAtMzI0Niw5ICszMjEwLDggQEAKIAlzdHJ1Y3QgbHBmY19pb2NicSAqdG1wX2lvY2IsICpwaW9jYjsKIAlJT0NCX3QgKmNtZCA9IE5VTEw7CiAJc3RydWN0IGxwZmNfZG1hYnVmICpwY21kOwotCXN0cnVjdCBsaXN0X2hlYWQgKmRscDsKIAl1aW50MzJfdCAqZWxzY21kOwotCXVpbnQzMl90IGVsc19jb21tYW5kOworCXVpbnQzMl90IGVsc19jb21tYW5kPTA7CiAJdWludDMyX3QgdGltZW91dDsKIAl1aW50MzJfdCByZW1vdGVfSUQ7CiAKQEAgLTMyNjMsMTcgKzMyMjYsMjAgQEAKIAl0aW1lb3V0ID0gKHVpbnQzMl90KShwaGJhLT5mY19yYXRvdiA8PCAxKTsKIAogCXByaW5nID0gJnBoYmEtPnNsaS5yaW5nW0xQRkNfRUxTX1JJTkddOwotCWRscCA9ICZwcmluZy0+dHhjbXBscTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwaW9jYiwgdG1wX2lvY2IsICZwcmluZy0+dHhjbXBscSwgbGlzdCkgewogCQljbWQgPSAmcGlvY2ItPmlvY2I7CiAKLQkJaWYgKHBpb2NiLT5pb2NiX2ZsYWcgJiBMUEZDX0lPX0xJQkRGQykgeworCQlpZiAoKHBpb2NiLT5pb2NiX2ZsYWcgJiBMUEZDX0lPX0xJQkRGQykgfHwKKwkJCShwaW9jYi0+aW9jYi51bHBDb21tYW5kID09IENNRF9BQk9SVF9YUklfQ04pIHx8CisJCQkocGlvY2ItPmlvY2IudWxwQ29tbWFuZCA9PSBDTURfQ0xPU0VfWFJJX0NOKSkgewogCQkJY29udGludWU7CiAJCX0KIAkJcGNtZCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgcGlvY2ItPmNvbnRleHQyOwotCQllbHNjbWQgPSAodWludDMyX3QgKikgKHBjbWQtPnZpcnQpOwotCQllbHNfY29tbWFuZCA9ICplbHNjbWQ7CisJCWlmIChwY21kKSB7CisJCQllbHNjbWQgPSAodWludDMyX3QgKikgKHBjbWQtPnZpcnQpOworCQkJZWxzX2NvbW1hbmQgPSAqZWxzY21kOworCQl9CiAKIAkJaWYgKChlbHNfY29tbWFuZCA9PSBFTFNfQ01EX0ZBUlApCiAJCSAgICB8fCAoZWxzX2NvbW1hbmQgPT0gRUxTX0NNRF9GQVJQUikpIHsKQEAgLTMyODksMTkgKzMyNTUsMTAgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJbGlzdF9kZWwoJnBpb2NiLT5saXN0KTsKLQkJcHJpbmctPnR4Y21wbHFfY250LS07Ci0KIAkJaWYgKGNtZC0+dWxwQ29tbWFuZCA9PSBDTURfR0VOX1JFUVVFU1Q2NF9DUikgewogCQkJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7Ci0JCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCW5kbHAgPSBscGZjX2ZpbmRub2RlX3JwaShwaGJhLCBjbWQtPnVscENvbnRleHQpOwotCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQkJbmRscCA9IF9fbHBmY19maW5kbm9kZV9ycGkocGhiYSwgY21kLT51bHBDb250ZXh0KTsKIAkJCXJlbW90ZV9JRCA9IG5kbHAtPm5scF9ESUQ7Ci0JCQlpZiAoY21kLT51bi5lbHNyZXE2NC5iZGwudWxwSW9UYWczMikgewotCQkJCWxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnMzIocGhiYSwKLQkJCQkJcHJpbmcsIHBpb2NiKTsKLQkJCX0KIAkJfSBlbHNlIHsKIAkJCXJlbW90ZV9JRCA9IGNtZC0+dW4uZWxzcmVxNjQucmVtb3RlSUQ7CiAJCX0KQEAgLTMzMTMsMTcgKzMyNzAsNyBAQAogCQkJCXBoYmEtPmJyZF9ubywgZWxzX2NvbW1hbmQsCiAJCQkJcmVtb3RlX0lELCBjbWQtPnVscENvbW1hbmQsIGNtZC0+dWxwSW9UYWcpOwogCi0JCS8qCi0JCSAqIFRoZSBpb2NiIGhhcyB0aW1lZCBvdXQ7IGFib3J0IGl0LgotCQkgKi8KLQkJaWYgKHBpb2NiLT5pb2NiX2NtcGwpIHsKLQkJCWNtZC0+dWxwU3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCWNtZC0+dW4udWxwV29yZFs0XSA9IElPRVJSX1NMSV9BQk9SVEVEOwotCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCQkocGlvY2ItPmlvY2JfY21wbCkgKHBoYmEsIHBpb2NiLCBwaW9jYik7Ci0JCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCX0gZWxzZQotCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBwaW9jYik7CisJCWxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnKHBoYmEsIHByaW5nLCBwaW9jYik7CiAJfQogCWlmIChwaGJhLT5zbGkucmluZ1tMUEZDX0VMU19SSU5HXS50eGNtcGxxX2NudCkKIAkJbW9kX3RpbWVyKCZwaGJhLT5lbHNfdG1vZnVuYywgamlmZmllcyArIEhaICogdGltZW91dCk7CkBAIC0zMzMyLDE2ICszMjc5LDEzIEBACiB9CiAKIHZvaWQKLWxwZmNfZWxzX2ZsdXNoX2NtZChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQorbHBmY19lbHNfZmx1c2hfY21kKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKLQlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmc7CisJTElTVF9IRUFEKGNvbXBsZXRpb25zKTsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcgPSAmcGhiYS0+c2xpLnJpbmdbTFBGQ19FTFNfUklOR107CiAJc3RydWN0IGxwZmNfaW9jYnEgKnRtcF9pb2NiLCAqcGlvY2I7CiAJSU9DQl90ICpjbWQgPSBOVUxMOwotCXN0cnVjdCBscGZjX2RtYWJ1ZiAqcGNtZDsKLQl1aW50MzJfdCAqZWxzY21kOwotCXVpbnQzMl90IGVsc19jb21tYW5kOwogCi0JcHJpbmcgPSAmcGhiYS0+c2xpLnJpbmdbTFBGQ19FTFNfUklOR107CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwaW9jYiwgdG1wX2lvY2IsICZwcmluZy0+dHhxLCBsaXN0KSB7CiAJCWNtZCA9ICZwaW9jYi0+aW9jYjsKQEAgLTMzNTEsMjkgKzMyOTUsMTUgQEAKIAkJfQogCiAJCS8qIERvIG5vdCBmbHVzaCBvdXQgdGhlIFFVRV9SSU5HIGFuZCBBQk9SVC9DTE9TRSBpb2NicyAqLwotCQlpZiAoKGNtZC0+dWxwQ29tbWFuZCA9PSBDTURfUVVFX1JJTkdfQlVGX0NOKSB8fAotCQkgICAgKGNtZC0+dWxwQ29tbWFuZCA9PSBDTURfUVVFX1JJTkdfQlVGNjRfQ04pIHx8Ci0JCSAgICAoY21kLT51bHBDb21tYW5kID09IENNRF9DTE9TRV9YUklfQ04pIHx8Ci0JCSAgICAoY21kLT51bHBDb21tYW5kID09IENNRF9BQk9SVF9YUklfQ04pKSB7CisJCWlmIChjbWQtPnVscENvbW1hbmQgPT0gQ01EX1FVRV9SSU5HX0JVRl9DTiB8fAorCQkgICAgY21kLT51bHBDb21tYW5kID09IENNRF9RVUVfUklOR19CVUY2NF9DTiB8fAorCQkgICAgY21kLT51bHBDb21tYW5kID09IENNRF9DTE9TRV9YUklfQ04gfHwKKwkJICAgIGNtZC0+dWxwQ29tbWFuZCA9PSBDTURfQUJPUlRfWFJJX0NOKQogCQkJY29udGludWU7Ci0JCX0KIAotCQlwY21kID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBwaW9jYi0+Y29udGV4dDI7Ci0JCWVsc2NtZCA9ICh1aW50MzJfdCAqKSAocGNtZC0+dmlydCk7Ci0JCWVsc19jb21tYW5kID0gKmVsc2NtZDsKKwkJbGlzdF9tb3ZlX3RhaWwoJnBpb2NiLT5saXN0LCAmY29tcGxldGlvbnMpOworCQlwcmluZy0+dHhxX2NudC0tOwogCi0JCWxpc3RfZGVsKCZwaW9jYi0+bGlzdCk7Ci0JCXByaW5nLT50eGNtcGxxX2NudC0tOwotCi0JCWNtZC0+dWxwU3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJY21kLT51bi51bHBXb3JkWzRdID0gSU9FUlJfU0xJX0FCT1JURUQ7Ci0KLQkJaWYgKHBpb2NiLT5pb2NiX2NtcGwpIHsKLQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJKHBpb2NiLT5pb2NiX2NtcGwpIChwaGJhLCBwaW9jYiwgcGlvY2IpOwotCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQl9IGVsc2UKLQkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcGlvY2IpOwogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwaW9jYiwgdG1wX2lvY2IsICZwcmluZy0+dHhjbXBscSwgbGlzdCkgewpAQCAtMzM4MiwyNCArMzMxMiwyNCBAQAogCQlpZiAocGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fTElCREZDKSB7CiAJCQljb250aW51ZTsKIAkJfQotCQlwY21kID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBwaW9jYi0+Y29udGV4dDI7Ci0JCWVsc2NtZCA9ICh1aW50MzJfdCAqKSAocGNtZC0+dmlydCk7Ci0JCWVsc19jb21tYW5kID0gKmVsc2NtZDsKIAorCQlscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZyhwaGJhLCBwcmluZywgcGlvY2IpOworCX0KKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKworCXdoaWxlKCFsaXN0X2VtcHR5KCZjb21wbGV0aW9ucykpIHsKKwkJcGlvY2IgPSBsaXN0X2dldF9maXJzdCgmY29tcGxldGlvbnMsIHN0cnVjdCBscGZjX2lvY2JxLCBsaXN0KTsKKwkJY21kID0gJnBpb2NiLT5pb2NiOwogCQlsaXN0X2RlbCgmcGlvY2ItPmxpc3QpOwotCQlwcmluZy0+dHhjbXBscV9jbnQtLTsKLQotCQljbWQtPnVscFN0YXR1cyA9IElPU1RBVF9MT0NBTF9SRUpFQ1Q7Ci0JCWNtZC0+dW4udWxwV29yZFs0XSA9IElPRVJSX1NMSV9BQk9SVEVEOwogCiAJCWlmIChwaW9jYi0+aW9jYl9jbXBsKSB7Ci0JCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJCWNtZC0+dWxwU3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKKwkJCWNtZC0+dW4udWxwV29yZFs0XSA9IElPRVJSX1NMSV9BQk9SVEVEOwogCQkJKHBpb2NiLT5pb2NiX2NtcGwpIChwaGJhLCBwaW9jYiwgcGlvY2IpOwotCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQl9IGVsc2UKIAkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcGlvY2IpOwogCX0KLQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwogCXJldHVybjsKIH0KIApAQCAtMzQ2OCw3ICszMzk4LDcgQEAKIAl9CiAKIAlkaWQgPSBpY21kLT51bi5yY3ZlbHMucmVtb3RlSUQ7Ci0JbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLCBkaWQpOworCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBkaWQpOwogCWlmICghbmRscCkgewogCQkvKiBDYW5ub3QgZmluZCBleGlzdGluZyBGYWJyaWMgbmRscCwgc28gYWxsb2NhdGUgYSBuZXcgb25lICovCiAJCW5kbHAgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm5scF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CkBAIC0zNDg0LDEyICszNDE0LDEzIEBACiAJCWlmICgoZGlkICYgRmFicmljX0RJRF9NQVNLKSA9PSBGYWJyaWNfRElEX01BU0spIHsKIAkJCW5kbHAtPm5scF90eXBlIHw9IE5MUF9GQUJSSUM7CiAJCX0KLQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9VTlVTRURfTk9ERTsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfVU5VU0VEX0xJU1QpOworCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9VTlVTRURfTk9ERSk7CiAJfQogCiAJcGhiYS0+ZmNfc3RhdC5lbHNSY3ZGcmFtZSsrOwotCWVsc2lvY2ItPmNvbnRleHQxID0gbmRscDsKKwlpZiAoZWxzaW9jYi0+Y29udGV4dDEpCisJCWxwZmNfbmxwX3B1dChlbHNpb2NiLT5jb250ZXh0MSk7CisJZWxzaW9jYi0+Y29udGV4dDEgPSBscGZjX25scF9nZXQobmRscCk7CiAJZWxzaW9jYi0+Y29udGV4dDIgPSBtcDsKIAogCWlmICgoY21kICYgRUxTX0NNRF9NQVNLKSA9PSBFTFNfQ01EX1JTQ04pIHsKQEAgLTM1MTMsOSArMzQ0NCw4IEBACiAJY2FzZSBFTFNfQ01EX0ZMT0dJOgogCQlwaGJhLT5mY19zdGF0LmVsc1JjdkZMT0dJKys7CiAJCWxwZmNfZWxzX3Jjdl9mbG9naShwaGJhLCBlbHNpb2NiLCBuZGxwLCBuZXdub2RlKTsKLQkJaWYgKG5ld25vZGUpIHsKLQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOwotCQl9CisJCWlmIChuZXdub2RlKQorCQkJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CiAJCWJyZWFrOwogCWNhc2UgRUxTX0NNRF9MT0dPOgogCQlwaGJhLT5mY19zdGF0LmVsc1JjdkxPR08rKzsKQEAgLTM1MzYsOSArMzQ2Niw4IEBACiAJY2FzZSBFTFNfQ01EX1JTQ046CiAJCXBoYmEtPmZjX3N0YXQuZWxzUmN2UlNDTisrOwogCQlscGZjX2Vsc19yY3ZfcnNjbihwaGJhLCBlbHNpb2NiLCBuZGxwLCBuZXdub2RlKTsKLQkJaWYgKG5ld25vZGUpIHsKLQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOwotCQl9CisJCWlmIChuZXdub2RlKQorCQkJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CiAJCWJyZWFrOwogCWNhc2UgRUxTX0NNRF9BRElTQzoKIAkJcGhiYS0+ZmNfc3RhdC5lbHNSY3ZBRElTQysrOwpAQCAtMzU3OSwzMCArMzUwOCwyNiBAQAogCWNhc2UgRUxTX0NNRF9MSVJSOgogCQlwaGJhLT5mY19zdGF0LmVsc1JjdkxJUlIrKzsKIAkJbHBmY19lbHNfcmN2X2xpcnIocGhiYSwgZWxzaW9jYiwgbmRscCk7Ci0JCWlmIChuZXdub2RlKSB7Ci0JCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKLQkJfQorCQlpZiAobmV3bm9kZSkKKwkJCWxwZmNfZHJvcF9ub2RlKHBoYmEsIG5kbHApOwogCQlicmVhazsKIAljYXNlIEVMU19DTURfUlBTOgogCQlwaGJhLT5mY19zdGF0LmVsc1JjdlJQUysrOwogCQlscGZjX2Vsc19yY3ZfcnBzKHBoYmEsIGVsc2lvY2IsIG5kbHApOwotCQlpZiAobmV3bm9kZSkgewotCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7Ci0JCX0KKwkJaWYgKG5ld25vZGUpCisJCQlscGZjX2Ryb3Bfbm9kZShwaGJhLCBuZGxwKTsKIAkJYnJlYWs7CiAJY2FzZSBFTFNfQ01EX1JQTDoKIAkJcGhiYS0+ZmNfc3RhdC5lbHNSY3ZSUEwrKzsKIAkJbHBmY19lbHNfcmN2X3JwbChwaGJhLCBlbHNpb2NiLCBuZGxwKTsKLQkJaWYgKG5ld25vZGUpIHsKLQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOwotCQl9CisJCWlmIChuZXdub2RlKQorCQkJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CiAJCWJyZWFrOwogCWNhc2UgRUxTX0NNRF9STklEOgogCQlwaGJhLT5mY19zdGF0LmVsc1JjdlJOSUQrKzsKIAkJbHBmY19lbHNfcmN2X3JuaWQocGhiYSwgZWxzaW9jYiwgbmRscCk7Ci0JCWlmIChuZXdub2RlKSB7Ci0JCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKLQkJfQorCQlpZiAobmV3bm9kZSkKKwkJCWxwZmNfZHJvcF9ub2RlKHBoYmEsIG5kbHApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBVbnN1cHBvcnRlZCBFTFMgY29tbWFuZCwgcmVqZWN0ICovCkBAIC0zNjEyLDkgKzM1MzcsOCBAQAogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19FTFMsCiAJCQkJIiVkOjAxMTUgVW5rbm93biBFTFMgY29tbWFuZCB4JXggcmVjZWl2ZWQgZnJvbSAiCiAJCQkJIk5QT1JUIHgleFxuIiwgcGhiYS0+YnJkX25vLCBjbWQsIGRpZCk7Ci0JCWlmIChuZXdub2RlKSB7Ci0JCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKLQkJfQorCQlpZiAobmV3bm9kZSkKKwkJCWxwZmNfZHJvcF9ub2RlKHBoYmEsIG5kbHApOwogCQlicmVhazsKIAl9CiAKQEAgLTM2MjcsNiArMzU1MSw4IEBACiAJCWxwZmNfZWxzX3JzcF9yZWplY3QocGhiYSwgc3RhdC51bi5sc1JqdEVycm9yLCBlbHNpb2NiLCBuZGxwKTsKIAl9CiAKKwlscGZjX25scF9wdXQoZWxzaW9jYi0+Y29udGV4dDEpOworCWVsc2lvY2ItPmNvbnRleHQxID0gTlVMTDsKIAlpZiAoZWxzaW9jYi0+Y29udGV4dDIpIHsKIAkJbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKIAkJa2ZyZWUobXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwppbmRleCBjMzk1NjRlLi42MWNhYThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtMTA5LDYgKzEwOSw5IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfTUFQUEVEX05PREUpCisJCXJldHVybjsKKwogCW5hbWUgPSAodWludDhfdCAqKSZuZGxwLT5ubHBfcG9ydG5hbWU7CiAJcGhiYSA9IG5kbHAtPm5scF9waGJhOwogCkBAIC0xNDcsMTEgKzE1MCwxNyBAQAogCQkJCW5kbHAtPm5scF9zdGF0ZSwgbmRscC0+bmxwX3JwaSk7CiAJfQogCi0JbmRscC0+cnBvcnQgPSBOVUxMOwotCXJkYXRhLT5wbm9kZSA9IE5VTEw7Ci0KLQlpZiAoIShwaGJhLT5mY19mbGFnICYgRkNfVU5MT0FESU5HKSkKKwlpZiAoIShwaGJhLT5mY19mbGFnICYgRkNfVU5MT0FESU5HKSAmJgorCSAgICAhKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykgJiYKKwkgICAgIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykgJiYKKwkgICAgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX1VOTUFQUEVEX05PREUpKQogCQlscGZjX2Rpc2Nfc3RhdGVfbWFjaGluZShwaGJhLCBuZGxwLCBOVUxMLCBOTFBfRVZUX0RFVklDRV9STSk7CisJZWxzZSB7CisJCXJkYXRhLT5wbm9kZSA9IE5VTEw7CisJCW5kbHAtPnJwb3J0ID0gTlVMTDsKKwkJbHBmY19ubHBfcHV0KG5kbHApOworCQlwdXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKKwl9CiAKIAlyZXR1cm47CiB9CkBAIC0xODIsMjkgKzE5MSwzNSBAQAogCQkJCSooaW50ICopKGV2dHAtPmV2dF9hcmcxKSAgPSAwOwogCQkJY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uICopKGV2dHAtPmV2dF9hcmcyKSk7CiAJCQlicmVhazsKLQkJY2FzZSBMUEZDX0VWVF9PRkZMSU5FOgorCQljYXNlIExQRkNfRVZUX09GRkxJTkVfUFJFUDoKIAkJCWlmIChwaGJhLT5oYmFfc3RhdGUgPj0gTFBGQ19MSU5LX0RPV04pCi0JCQkJbHBmY19vZmZsaW5lKHBoYmEpOworCQkJCWxwZmNfb2ZmbGluZV9wcmVwKHBoYmEpOworCQkJKihpbnQgKikoZXZ0cC0+ZXZ0X2FyZzEpID0gMDsKKwkJCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiAqKShldnRwLT5ldnRfYXJnMikpOworCQkJYnJlYWs7CisJCWNhc2UgTFBGQ19FVlRfT0ZGTElORToKKwkJCWxwZmNfb2ZmbGluZShwaGJhKTsKIAkJCWxwZmNfc2xpX2JyZHJlc3RhcnQocGhiYSk7CiAJCQkqKGludCAqKShldnRwLT5ldnRfYXJnMSkgPQotCQkJCWxwZmNfc2xpX2JyZHJlYWR5KHBoYmEsSFNfRkZSRFkgfCBIU19NQlJEWSk7CisJCQkJbHBmY19zbGlfYnJkcmVhZHkocGhiYSwgSFNfRkZSRFkgfCBIU19NQlJEWSk7CisJCQlscGZjX3VuYmxvY2tfbWdtdF9pbyhwaGJhKTsKIAkJCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiAqKShldnRwLT5ldnRfYXJnMikpOwogCQkJYnJlYWs7CiAJCWNhc2UgTFBGQ19FVlRfV0FSTV9TVEFSVDoKLQkJCWlmIChwaGJhLT5oYmFfc3RhdGUgPj0gTFBGQ19MSU5LX0RPV04pCi0JCQkJbHBmY19vZmZsaW5lKHBoYmEpOworCQkJbHBmY19vZmZsaW5lKHBoYmEpOwogCQkJbHBmY19yZXNldF9iYXJyaWVyKHBoYmEpOwogCQkJbHBmY19zbGlfYnJkcmVzZXQocGhiYSk7CiAJCQlscGZjX2hiYV9kb3duX3Bvc3QocGhiYSk7CiAJCQkqKGludCAqKShldnRwLT5ldnRfYXJnMSkgPQogCQkJCWxwZmNfc2xpX2JyZHJlYWR5KHBoYmEsIEhTX01CUkRZKTsKKwkJCWxwZmNfdW5ibG9ja19tZ210X2lvKHBoYmEpOwogCQkJY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uICopKGV2dHAtPmV2dF9hcmcyKSk7CiAJCQlicmVhazsKIAkJY2FzZSBMUEZDX0VWVF9LSUxMOgotCQkJaWYgKHBoYmEtPmhiYV9zdGF0ZSA+PSBMUEZDX0xJTktfRE9XTikKLQkJCQlscGZjX29mZmxpbmUocGhiYSk7CisJCQlscGZjX29mZmxpbmUocGhiYSk7CiAJCQkqKGludCAqKShldnRwLT5ldnRfYXJnMSkKIAkJCQk9IChwaGJhLT5zdG9wcGVkKSA/IDAgOiBscGZjX3NsaV9icmRraWxsKHBoYmEpOworCQkJbHBmY191bmJsb2NrX21nbXRfaW8ocGhiYSk7CiAJCQljb21wbGV0ZSgoc3RydWN0IGNvbXBsZXRpb24gKikoZXZ0cC0+ZXZ0X2FyZzIpKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zNTksMTMgKzM3NCwxMiBAQAogfQogCiBpbnQKLWxwZmNfbGlua2Rvd24oc3RydWN0IGxwZmNfaGJhICogcGhiYSkKK2xwZmNfbGlua2Rvd24oc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCXN0cnVjdCBscGZjX3NsaSAgICAgICAqcHNsaTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAgKm5kbHAsICpuZXh0X25kbHA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdHAsICpub2RlX2xpc3RbN107Ci0JTFBGQ19NQk9YUV90ICAgICAqbWI7Ci0JaW50ICAgICAgICAgICAgICAgcmMsIGk7CisJTFBGQ19NQk9YUV90ICAgICAgICAgICptYjsKKwlpbnQgICAgICAgICAgICAgICAgICAgcmM7CiAKIAlwc2xpID0gJnBoYmEtPnNsaTsKIAkvKiBzeXNmcyBvciBzZWxlY3RpdmUgcmVzZXQgbWF5IGNhbGwgdGhpcyByb3V0aW5lIHRvIGNsZWFuIHVwICovCkBAIC0zOTcsMzEgKzQxMSwxNiBAQAogCS8qIENsZWFudXAgYW55IG91dHN0YW5kaW5nIEVMUyBjb21tYW5kcyAqLwogCWxwZmNfZWxzX2ZsdXNoX2NtZChwaGJhKTsKIAotCS8qIElzc3VlIGEgTElOSyBET1dOIGV2ZW50IHRvIGFsbCBub2RlcyAqLwotCW5vZGVfbGlzdFswXSA9ICZwaGJhLT5mY19ucHJfbGlzdDsgIC8qIE1VU1QgZG8gdGhpcyBsaXN0IGZpcnN0ICovCi0Jbm9kZV9saXN0WzFdID0gJnBoYmEtPmZjX25scG1hcF9saXN0OwotCW5vZGVfbGlzdFsyXSA9ICZwaGJhLT5mY19ubHB1bm1hcF9saXN0OwotCW5vZGVfbGlzdFszXSA9ICZwaGJhLT5mY19wcmxpX2xpc3Q7Ci0Jbm9kZV9saXN0WzRdID0gJnBoYmEtPmZjX3JlZ2xvZ2luX2xpc3Q7Ci0Jbm9kZV9saXN0WzVdID0gJnBoYmEtPmZjX2FkaXNjX2xpc3Q7Ci0Jbm9kZV9saXN0WzZdID0gJnBoYmEtPmZjX3Bsb2dpX2xpc3Q7Ci0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQlsaXN0cCA9IG5vZGVfbGlzdFtpXTsKLQkJaWYgKGxpc3RfZW1wdHkobGlzdHApKQotCQkJY29udGludWU7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgbGlzdHAsIG5scF9saXN0cCkgewotCisJLyoKKwkgKiBJc3N1ZSBhIExJTksgRE9XTiBldmVudCB0byBhbGwgbm9kZXMuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnBoYmEtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJCQkvKiBmcmVlIGFueSBuZGxwJ3Mgb24gdW51c2VkIGxpc3QgKi8KKwkJaWYgKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX1VOVVNFRF9OT0RFKQorCQkJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CisJCWVsc2UJCS8qIG90aGVyd2lzZSwgZm9yY2Ugbm9kZSByZWNvdmVyeS4gKi8KIAkJCXJjID0gbHBmY19kaXNjX3N0YXRlX21hY2hpbmUocGhiYSwgbmRscCwgTlVMTCwKLQkJCQkJICAgICBOTFBfRVZUX0RFVklDRV9SRUNPVkVSWSk7Ci0KLQkJfQotCX0KLQotCS8qIGZyZWUgYW55IG5kbHAncyBvbiB1bnVzZWQgbGlzdCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZwaGJhLT5mY191bnVzZWRfbGlzdCwKLQkJCQlubHBfbGlzdHApIHsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJCQkJCQkgICAgIE5MUF9FVlRfREVWSUNFX1JFQ09WRVJZKTsKIAl9CiAKIAkvKiBTZXR1cCBteURJRCBmb3IgbGluayB1cCBpZiB3ZSBhcmUgaW4gcHQycHQgbW9kZSAqLwpAQCAtNDUyLDExICs0NTEsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1scGZjX2xpbmt1cChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQorbHBmY19saW5rdXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLCAqbmV4dF9uZGxwOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RwLCAqbm9kZV9saXN0WzddOwotCWludCBpOwogCiAJZmNfaG9zdF9wb3N0X2V2ZW50KHBoYmEtPmhvc3QsIGZjX2dldF9ldmVudF9udW1iZXIoKSwKIAkJCUZDSF9FVlRfTElOS1VQLCAwKTsKQEAgLTQ3MCwyOSArNDY3LDIwIEBACiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKIAotCW5vZGVfbGlzdFswXSA9ICZwaGJhLT5mY19wbG9naV9saXN0OwotCW5vZGVfbGlzdFsxXSA9ICZwaGJhLT5mY19hZGlzY19saXN0OwotCW5vZGVfbGlzdFsyXSA9ICZwaGJhLT5mY19yZWdsb2dpbl9saXN0OwotCW5vZGVfbGlzdFszXSA9ICZwaGJhLT5mY19wcmxpX2xpc3Q7Ci0Jbm9kZV9saXN0WzRdID0gJnBoYmEtPmZjX25scHVubWFwX2xpc3Q7Ci0Jbm9kZV9saXN0WzVdID0gJnBoYmEtPmZjX25scG1hcF9saXN0OwotCW5vZGVfbGlzdFs2XSA9ICZwaGJhLT5mY19ucHJfbGlzdDsKLQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7Ci0JCWxpc3RwID0gbm9kZV9saXN0W2ldOwotCQlpZiAobGlzdF9lbXB0eShsaXN0cCkpCi0JCQljb250aW51ZTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCBsaXN0cCwgbmxwX2xpc3RwKSB7Ci0JCQlpZiAocGhiYS0+ZmNfZmxhZyAmIEZDX0xCSVQpIHsKKwlpZiAocGhiYS0+ZmNfZmxhZyAmIEZDX0xCSVQpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZGxwLCAmcGhiYS0+ZmNfbm9kZXMsIG5scF9saXN0cCkgeworCQkJaWYgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX1VOVVNFRF9OT0RFKSB7CiAJCQkJaWYgKG5kbHAtPm5scF90eXBlICYgTkxQX0ZBQlJJQykgewotCQkJCQkvKiBPbiBMaW5rdXAgaXRzIHNhZmUgdG8gY2xlYW4gdXAgdGhlCisJCQkJCS8qCisJCQkJCSAqIE9uIExpbmt1cCBpdHMgc2FmZSB0byBjbGVhbiB1cCB0aGUKIAkJCQkJICogbmRscCBmcm9tIEZhYnJpYyBjb25uZWN0aW9ucy4KIAkJCQkJICovCi0JCQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwKLQkJCQkJCQlOTFBfVU5VU0VEX0xJU1QpOworCQkJCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwKKwkJCQkJCQkgICBOTFBfU1RFX1VOVVNFRF9OT0RFKTsKIAkJCQl9IGVsc2UgaWYgKCEobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSX0FESVNDKSkgewotCQkJCQkvKiBGYWlsIG91dHN0YW5kaW5nIElPIG5vdyBzaW5jZSBkZXZpY2UKLQkJCQkJICogaXMgbWFya2VkIGZvciBQTE9HSS4KKwkJCQkJLyoKKwkJCQkJICogRmFpbCBvdXRzdGFuZGluZyBJTyBub3cgc2luY2UKKwkJCQkJICogZGV2aWNlIGlzIG1hcmtlZCBmb3IgUExPR0kuCiAJCQkJCSAqLwogCQkJCQlscGZjX3VucmVnX3JwaShwaGJhLCBuZGxwKTsKIAkJCQl9CkBAIC01MDEsOSArNDg5LDEwIEBACiAJfQogCiAJLyogZnJlZSBhbnkgbmRscCdzIG9uIHVudXNlZCBsaXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnBoYmEtPmZjX3VudXNlZF9saXN0LAotCQkJCW5scF9saXN0cCkgewotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfbm9kZXMsCisJCQkJIG5scF9saXN0cCkgeworCQlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfVU5VU0VEX05PREUpCisJCQlscGZjX2Ryb3Bfbm9kZShwaGJhLCBuZGxwKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTczNCw2ICs3MjMsOSBAQAogCQljYXNlIExBXzRHSFpfTElOSzoKIAkJCXBoYmEtPmZjX2xpbmtzcGVlZCA9IExBXzRHSFpfTElOSzsKIAkJCWJyZWFrOworCQljYXNlIExBXzhHSFpfTElOSzoKKwkJCXBoYmEtPmZjX2xpbmtzcGVlZCA9IExBXzhHSFpfTElOSzsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGhiYS0+ZmNfbGlua3NwZWVkID0gTEFfVU5LTldfTElOSzsKIAkJCWJyZWFrOwpAQCAtODg5LDEyICs4ODEsMjEgQEAKIAogCWlmIChsYS0+YXR0VHlwZSA9PSBBVF9MSU5LX1VQKSB7CiAJCXBoYmEtPmZjX3N0YXQuTGlua1VwKys7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJTktfRVZFTlQsCisJCWlmIChwaGJhLT5mY19mbGFnICYgRkNfTE9PUEJBQ0tfTU9ERSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0xJTktfRVZFTlQsCisJCQkJIiVkOjEzMDYgTGluayBVcCBFdmVudCBpbiBsb29wIGJhY2sgbW9kZSAiCisJCQkJIngleCByZWNlaXZlZCBEYXRhOiB4JXggeCV4IHgleCB4JXhcbiIsCisJCQkJcGhiYS0+YnJkX25vLCBsYS0+ZXZlbnRUYWcsIHBoYmEtPmZjX2V2ZW50VGFnLAorCQkJCWxhLT5ncmFudGVkX0FMX1BBLCBsYS0+VWxua1NwZWVkLAorCQkJCXBoYmEtPmFscGFfbWFwWzBdKTsKKwkJfSBlbHNlIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJTktfRVZFTlQsCiAJCQkJIiVkOjEzMDMgTGluayBVcCBFdmVudCB4JXggcmVjZWl2ZWQgIgogCQkJCSJEYXRhOiB4JXggeCV4IHgleCB4JXhcbiIsCiAJCQkJcGhiYS0+YnJkX25vLCBsYS0+ZXZlbnRUYWcsIHBoYmEtPmZjX2V2ZW50VGFnLAogCQkJCWxhLT5ncmFudGVkX0FMX1BBLCBsYS0+VWxua1NwZWVkLAogCQkJCXBoYmEtPmFscGFfbWFwWzBdKTsKKwkJfQogCQlscGZjX21ieF9wcm9jZXNzX2xpbmtfdXAocGhiYSwgbGEpOwogCX0gZWxzZSB7CiAJCXBoYmEtPmZjX3N0YXQuTGlua0Rvd24rKzsKQEAgLTk0MCw2ICs5NDEsNyBAQAogCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIG1wLT52aXJ0LCBtcC0+cGh5cyk7CiAJa2ZyZWUobXApOwogCW1lbXBvb2xfZnJlZSggcG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwlscGZjX25scF9wdXQobmRscCk7CiAKIAlyZXR1cm47CiB9CkBAIC05NjYsMTEgKzk2OCwxNCBAQAogCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKikgcG1iLT5jb250ZXh0MjsKIAltcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgKHBtYi0+Y29udGV4dDEpOwogCisJcG1iLT5jb250ZXh0MSA9IE5VTEw7CisJcG1iLT5jb250ZXh0MiA9IE5VTEw7CisKIAlpZiAobWItPm1ieFN0YXR1cykgewogCQlscGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwogCQlrZnJlZShtcCk7Ci0JCW1lbXBvb2xfZnJlZSggcG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKLQkJbWVtcG9vbF9mcmVlKCBuZGxwLCBwaGJhLT5ubHBfbWVtX3Bvb2wpOworCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJbHBmY19ubHBfcHV0KG5kbHApOwogCiAJCS8qIEZMT0dJIGZhaWxlZCwgc28ganVzdCB1c2UgbG9vcCBtYXAgdG8gbWFrZSBkaXNjb3ZlcnkgbGlzdCAqLwogCQlscGZjX2Rpc2NfbGlzdF9sb29wbWFwKHBoYmEpOwpAQCAtOTgwLDEyICs5ODUsMTEgQEAKIAkJcmV0dXJuOwogCX0KIAotCXBtYi0+Y29udGV4dDEgPSBOVUxMOwotCiAJbmRscC0+bmxwX3JwaSA9IG1iLT51bi52YXJXb3Jkc1swXTsKIAluZGxwLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOwotCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfVU5NQVBQRURfTk9ERTsKLQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9VTk1BUFBFRF9MSVNUKTsKKwlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9VTk1BUFBFRF9OT0RFKTsKKworCWxwZmNfbmxwX3B1dChuZGxwKTsJLyogRHJvcCB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIG1ib3ggKi8KIAogCWlmIChwaGJhLT5oYmFfc3RhdGUgPT0gTFBGQ19GQUJSSUNfQ0ZHX0xJTkspIHsKIAkJLyogVGhpcyBOUG9ydCBoYXMgYmVlbiBhc3NpZ25lZCBhbiBOUG9ydF9JRCBieSB0aGUgZmFicmljIGFzIGEKQEAgLTk5Niw3ICsxMDAwLDcgQEAKIAkJICovCiAJCWxwZmNfaXNzdWVfZWxzX3NjcihwaGJhLCBTQ1JfRElELCAwKTsKIAotCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYSwgTkxQX1NFQVJDSF9BTEwsIE5hbWVTZXJ2ZXJfRElEKTsKKwkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5hbWVTZXJ2ZXJfRElEKTsKIAkJaWYgKCFuZGxwKSB7CiAJCQkvKiBBbGxvY2F0ZSBhIG5ldyBub2RlIGluc3RhbmNlLiBJZiB0aGUgcG9vbCBpcyBlbXB0eSwKIAkJCSAqIHN0YXJ0IHRoZSBkaXNjb3ZlcnkgcHJvY2VzcyBhbmQgc2tpcCB0aGUgTmFtZXNlcnZlcgpAQCAtMTAwOCwxNSArMTAxMiwxNCBAQAogCQkJCWxwZmNfZGlzY19zdGFydChwaGJhKTsKIAkJCQlscGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwogCQkJCWtmcmVlKG1wKTsKLQkJCQltZW1wb29sX2ZyZWUoIHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCQkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCQkJcmV0dXJuOwogCQkJfSBlbHNlIHsKIAkJCQlscGZjX25scF9pbml0KHBoYmEsIG5kbHAsIE5hbWVTZXJ2ZXJfRElEKTsKIAkJCQluZGxwLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOwogCQkJfQogCQl9Ci0JCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfUExPR0lfSVNTVUU7Ci0JCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1BMT0dJX0xJU1QpOworCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9QTE9HSV9JU1NVRSk7CiAJCWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHBoYmEsIE5hbWVTZXJ2ZXJfRElELCAwKTsKIAkJaWYgKHBoYmEtPmNmZ19mZG1pX29uKSB7CiAJCQluZGxwX2ZkbWkgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm5scF9tZW1fcG9vbCwKQEAgLTEwMzIsNyArMTAzNSw3IEBACiAKIAlscGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwogCWtmcmVlKG1wKTsKLQltZW1wb29sX2ZyZWUoIHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuOwogfQogCkBAIC0xMDU3LDEwICsxMDYwLDExIEBACiAJbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChwbWItPmNvbnRleHQxKTsKIAogCWlmIChtYi0+bWJ4U3RhdHVzKSB7CisJCWxwZmNfbmxwX3B1dChuZGxwKTsKIAkJbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKIAkJa2ZyZWUobXApOwotCQltZW1wb29sX2ZyZWUoIHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CiAKIAkJLyogUmVnTG9naW4gZmFpbGVkLCBzbyBqdXN0IHVzZSBsb29wIG1hcCB0byBtYWtlIGRpc2NvdmVyeQogCQkgICBsaXN0ICovCkBAIC0xMDc1LDggKzEwNzksNyBAQAogCiAJbmRscC0+bmxwX3JwaSA9IG1iLT51bi52YXJXb3Jkc1swXTsKIAluZGxwLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOwotCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfVU5NQVBQRURfTk9ERTsKLQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9VTk1BUFBFRF9MSVNUKTsKKwlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9VTk1BUFBFRF9OT0RFKTsKIAogCWlmIChwaGJhLT5oYmFfc3RhdGUgPCBMUEZDX0hCQV9SRUFEWSkgewogCQkvKiBMaW5rIHVwIGRpc2NvdmVyeSByZXF1aXJlcyBGYWJyaWIgcmVnaXN0cmF0aW9uLiAqLwpAQCAtMTA5Myw2ICsxMDk2LDcgQEAKIAkJbHBmY19kaXNjX3N0YXJ0KHBoYmEpOwogCX0KIAorCWxwZmNfbmxwX3B1dChuZGxwKTsKIAlscGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwogCWtmcmVlKG1wKTsKIAltZW1wb29sX2ZyZWUoIHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CkBAIC0xMTAxLDggKzExMDUsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbHBmY19yZWdpc3Rlcl9yZW1vdGVfcG9ydChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAotCQkJICAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCkKK2xwZmNfcmVnaXN0ZXJfcmVtb3RlX3BvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhOwpAQCAtMTExNCw4ICsxMTE3LDE5IEBACiAJcnBvcnRfaWRzLnBvcnRfaWQgPSBuZGxwLT5ubHBfRElEOwogCXJwb3J0X2lkcy5yb2xlcyA9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTjsKIAorCS8qCisJICogV2UgbGVhdmUgb3VyIG5vZGUgcG9pbnRlciBpbiBycG9ydC0+ZGRfZGF0YSB3aGVuIHdlIHVucmVnaXN0ZXIgYQorCSAqIEZDUCB0YXJnZXQgcG9ydC4gIEJ1dCBmY19yZW1vdGVfcG9ydF9hZGQgemVyb3MgdGhlIHNwYWNlIHRvIHdoaWNoCisJICogcnBvcnQtPmRkX2RhdGEgcG9pbnRzLiAgU28sIGlmIHdlJ3JlIHJldXNpbmcgYSBwcmV2aW91c2x5CisJICogcmVnaXN0ZXJlZCBwb3J0LCBkcm9wIHRoZSByZWZlcmVuY2UgdGhhdCB3ZSB0b29rIHRoZSBsYXN0IHRpbWUgd2UKKwkgKiByZWdpc3RlcmVkIHRoZSBwb3J0LgorCSAqLworCWlmIChuZGxwLT5ycG9ydCAmJiBuZGxwLT5ycG9ydC0+ZGRfZGF0YSAmJgorCSAgICAqKHN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKiopIG5kbHAtPnJwb3J0LT5kZF9kYXRhKSB7CisJCWxwZmNfbmxwX3B1dChuZGxwKTsKKwl9CiAJbmRscC0+cnBvcnQgPSBycG9ydCA9IGZjX3JlbW90ZV9wb3J0X2FkZChwaGJhLT5ob3N0LCAwLCAmcnBvcnRfaWRzKTsKLQlpZiAoIXJwb3J0KSB7CisJaWYgKCFycG9ydCB8fCAhZ2V0X2RldmljZSgmcnBvcnQtPmRldikpIHsKIAkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwaGJhLT5wY2lkZXYtPmRldiwKIAkJCSAgICJXYXJuaW5nOiBmY19yZW1vdGVfcG9ydF9hZGQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwpAQCAtMTEyNSw3ICsxMTM5LDcgQEAKIAlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9IG5kbHAtPm5scF9tYXhmcmFtZTsKIAlycG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgPSBuZGxwLT5ubHBfY2xhc3Nfc3VwOwogCXJkYXRhID0gcnBvcnQtPmRkX2RhdGE7Ci0JcmRhdGEtPnBub2RlID0gbmRscDsKKwlyZGF0YS0+cG5vZGUgPSBscGZjX25scF9nZXQobmRscCk7CiAKIAlpZiAobmRscC0+bmxwX3R5cGUgJiBOTFBfRkNQX1RBUkdFVCkKIAkJcnBvcnRfaWRzLnJvbGVzIHw9IEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVDsKQEAgLTExNDUsOCArMTE1OSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1scGZjX3VucmVnaXN0ZXJfcmVtb3RlX3BvcnQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwKLQkJCSAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHApCitscGZjX3VucmVnaXN0ZXJfcmVtb3RlX3BvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gbmRscC0+cnBvcnQ7CiAJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKQEAgLTExNTQsNiArMTE2Nyw4IEBACiAJaWYgKHJwb3J0LT5zY3NpX3RhcmdldF9pZCA9PSAtMSkgewogCQluZGxwLT5ycG9ydCA9IE5VTEw7CiAJCXJkYXRhLT5wbm9kZSA9IE5VTEw7CisJCWxwZmNfbmxwX3B1dChuZGxwKTsKKwkJcHV0X2RldmljZSgmcnBvcnQtPmRldik7CiAJfQogCiAJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKHJwb3J0KTsKQEAgLTExNjEsMTc4ICsxMTc2LDcwIEBACiAJcmV0dXJuOwogfQogCi1pbnQKLWxwZmNfbmxwX2xpc3Qoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBubHAsIGludCBsaXN0KQorc3RhdGljIHZvaWQKK2xwZmNfbmxwX2NvdW50ZXJzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHN0YXRlLCBpbnQgY291bnQpCiB7Ci0JZW51bSB7IG5vbmUsIHVubWFwcGVkLCBtYXBwZWQgfSBycG9ydF9hZGQgPSBub25lLCBycG9ydF9kZWwgPSBub25lOwotCXN0cnVjdCBscGZjX3NsaSAgICAgICpwc2xpOwotCi0JcHNsaSA9ICZwaGJhLT5zbGk7Ci0JLyogU2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB3ZSBhcmUgbm90IG1vdmluZyB0byAvIGZyb20gdGhlIHNhbWUgbGlzdCAqLwotCWlmICgobmxwLT5ubHBfZmxhZyAmIE5MUF9MSVNUX01BU0spID09IGxpc3QpCi0JCWlmIChsaXN0ICE9IE5MUF9OT19MSVNUKQotCQkJcmV0dXJuIDA7Ci0KIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0Jc3dpdGNoIChubHAtPm5scF9mbGFnICYgTkxQX0xJU1RfTUFTSykgewotCWNhc2UgTkxQX05PX0xJU1Q6IC8qIE5vdCBvbiBhbnkgbGlzdCAqLworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIE5MUF9TVEVfVU5VU0VEX05PREU6CisJCXBoYmEtPmZjX3VudXNlZF9jbnQgKz0gY291bnQ7CiAJCWJyZWFrOwotCWNhc2UgTkxQX1VOVVNFRF9MSVNUOgotCQlwaGJhLT5mY191bnVzZWRfY250LS07Ci0JCWxpc3RfZGVsKCZubHAtPm5scF9saXN0cCk7CisJY2FzZSBOTFBfU1RFX1BMT0dJX0lTU1VFOgorCQlwaGJhLT5mY19wbG9naV9jbnQgKz0gY291bnQ7CiAJCWJyZWFrOwotCWNhc2UgTkxQX1BMT0dJX0xJU1Q6Ci0JCXBoYmEtPmZjX3Bsb2dpX2NudC0tOwotCQlsaXN0X2RlbCgmbmxwLT5ubHBfbGlzdHApOworCWNhc2UgTkxQX1NURV9BRElTQ19JU1NVRToKKwkJcGhiYS0+ZmNfYWRpc2NfY250ICs9IGNvdW50OwogCQlicmVhazsKLQljYXNlIE5MUF9BRElTQ19MSVNUOgotCQlwaGJhLT5mY19hZGlzY19jbnQtLTsKLQkJbGlzdF9kZWwoJm5scC0+bmxwX2xpc3RwKTsKKwljYXNlIE5MUF9TVEVfUkVHX0xPR0lOX0lTU1VFOgorCQlwaGJhLT5mY19yZWdsb2dpbl9jbnQgKz0gY291bnQ7CiAJCWJyZWFrOwotCWNhc2UgTkxQX1JFR0xPR0lOX0xJU1Q6Ci0JCXBoYmEtPmZjX3JlZ2xvZ2luX2NudC0tOwotCQlsaXN0X2RlbCgmbmxwLT5ubHBfbGlzdHApOworCWNhc2UgTkxQX1NURV9QUkxJX0lTU1VFOgorCQlwaGJhLT5mY19wcmxpX2NudCArPSBjb3VudDsKIAkJYnJlYWs7Ci0JY2FzZSBOTFBfUFJMSV9MSVNUOgotCQlwaGJhLT5mY19wcmxpX2NudC0tOwotCQlsaXN0X2RlbCgmbmxwLT5ubHBfbGlzdHApOworCWNhc2UgTkxQX1NURV9VTk1BUFBFRF9OT0RFOgorCQlwaGJhLT5mY191bm1hcF9jbnQgKz0gY291bnQ7CiAJCWJyZWFrOwotCWNhc2UgTkxQX1VOTUFQUEVEX0xJU1Q6Ci0JCXBoYmEtPmZjX3VubWFwX2NudC0tOwotCQlsaXN0X2RlbCgmbmxwLT5ubHBfbGlzdHApOwotCQlubHAtPm5scF9mbGFnICY9IH5OTFBfVEdUX05PX1NDU0lJRDsKLQkJbmxwLT5ubHBfdHlwZSAmPSB+TkxQX0ZDX05PREU7Ci0JCXBoYmEtPm5wb3J0X2V2ZW50X2NudCsrOwotCQlpZiAobmxwLT5ycG9ydCkKLQkJCXJwb3J0X2RlbCA9IHVubWFwcGVkOworCWNhc2UgTkxQX1NURV9NQVBQRURfTk9ERToKKwkJcGhiYS0+ZmNfbWFwX2NudCArPSBjb3VudDsKIAkJYnJlYWs7Ci0JY2FzZSBOTFBfTUFQUEVEX0xJU1Q6Ci0JCXBoYmEtPmZjX21hcF9jbnQtLTsKLQkJbGlzdF9kZWwoJm5scC0+bmxwX2xpc3RwKTsKLQkJcGhiYS0+bnBvcnRfZXZlbnRfY250Kys7Ci0JCWlmIChubHAtPnJwb3J0KQotCQkJcnBvcnRfZGVsID0gbWFwcGVkOwotCQlicmVhazsKLQljYXNlIE5MUF9OUFJfTElTVDoKLQkJcGhiYS0+ZmNfbnByX2NudC0tOwotCQlsaXN0X2RlbCgmbmxwLT5ubHBfbGlzdHApOwotCQkvKiBTdG9wIGRlbGF5IHRtbyBpZiB0YWtpbmcgbm9kZSBvZmYgTlBSIGxpc3QgKi8KLQkJaWYgKChubHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykgJiYKLQkJICAgKGxpc3QgIT0gTkxQX05QUl9MSVNUKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCQlscGZjX2NhbmNlbF9yZXRyeV9kZWxheV90bW8ocGhiYSwgbmxwKTsKLQkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJfQorCWNhc2UgTkxQX1NURV9OUFJfTk9ERToKKwkJcGhiYS0+ZmNfbnByX2NudCArPSBjb3VudDsKIAkJYnJlYWs7CiAJfQotCi0JbmxwLT5ubHBfZmxhZyAmPSB+TkxQX0xJU1RfTUFTSzsKLQotCS8qIEFkZCBOUG9ydCA8ZGlkPiB0byA8bnVtPiBsaXN0ICovCi0JbHBmY19wcmludGZfbG9nKHBoYmEsCi0JCQlLRVJOX0lORk8sCi0JCQlMT0dfTk9ERSwKLQkJCSIlZDowOTA0IEFkZCBOUG9ydCB4JXggdG8gJWQgbGlzdCBEYXRhOiB4JXhcbiIsCi0JCQlwaGJhLT5icmRfbm8sCi0JCQlubHAtPm5scF9ESUQsIGxpc3QsIG5scC0+bmxwX2ZsYWcpOwotCi0Jc3dpdGNoIChsaXN0KSB7Ci0JY2FzZSBOTFBfTk9fTElTVDogLyogTm8gbGlzdCwganVzdCByZW1vdmUgaXQgKi8KLQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCWxwZmNfbmxwX3JlbW92ZShwaGJhLCBubHApOwotCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCS8qIGFzIG5vZGUgcmVtb3ZlZCAtIHN0b3AgZnVydGhlciB0cmFuc3BvcnQgY2FsbHMgKi8KLQkJcnBvcnRfZGVsID0gbm9uZTsKLQkJYnJlYWs7Ci0JY2FzZSBOTFBfVU5VU0VEX0xJU1Q6Ci0JCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKLQkJLyogUHV0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIHVudXNlZCBsaXN0ICovCi0JCWxpc3RfYWRkX3RhaWwoJm5scC0+bmxwX2xpc3RwLCAmcGhiYS0+ZmNfdW51c2VkX2xpc3QpOwotCQlwaGJhLT5mY191bnVzZWRfY250Kys7Ci0JCWJyZWFrOwotCWNhc2UgTkxQX1BMT0dJX0xJU1Q6Ci0JCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKLQkJLyogUHV0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIHBsb2dpIGxpc3QgKi8KLQkJbGlzdF9hZGRfdGFpbCgmbmxwLT5ubHBfbGlzdHAsICZwaGJhLT5mY19wbG9naV9saXN0KTsKLQkJcGhiYS0+ZmNfcGxvZ2lfY250Kys7Ci0JCWJyZWFrOwotCWNhc2UgTkxQX0FESVNDX0xJU1Q6Ci0JCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKLQkJLyogUHV0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIGFkaXNjIGxpc3QgKi8KLQkJbGlzdF9hZGRfdGFpbCgmbmxwLT5ubHBfbGlzdHAsICZwaGJhLT5mY19hZGlzY19saXN0KTsKLQkJcGhiYS0+ZmNfYWRpc2NfY250Kys7Ci0JCWJyZWFrOwotCWNhc2UgTkxQX1JFR0xPR0lOX0xJU1Q6Ci0JCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKLQkJLyogUHV0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIHJlZ2xvZ2luIGxpc3QgKi8KLQkJbGlzdF9hZGRfdGFpbCgmbmxwLT5ubHBfbGlzdHAsICZwaGJhLT5mY19yZWdsb2dpbl9saXN0KTsKLQkJcGhiYS0+ZmNfcmVnbG9naW5fY250Kys7Ci0JCWJyZWFrOwotCWNhc2UgTkxQX1BSTElfTElTVDoKLQkJbmxwLT5ubHBfZmxhZyB8PSBsaXN0OwotCQkvKiBQdXQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgcHJsaSBsaXN0ICovCi0JCWxpc3RfYWRkX3RhaWwoJm5scC0+bmxwX2xpc3RwLCAmcGhiYS0+ZmNfcHJsaV9saXN0KTsKLQkJcGhiYS0+ZmNfcHJsaV9jbnQrKzsKLQkJYnJlYWs7Ci0JY2FzZSBOTFBfVU5NQVBQRURfTElTVDoKLQkJcnBvcnRfYWRkID0gdW5tYXBwZWQ7Ci0JCS8qIGVuc3VyZSBhbGwgdmVzdGlnZXMgb2YgIm1hcHBlZCIgc2lnbmlmaWNhbmNlIGFyZSBnb25lICovCi0JCW5scC0+bmxwX3R5cGUgJj0gfihOTFBfRkNQX1RBUkdFVCB8IE5MUF9GQ1BfSU5JVElBVE9SKTsKLQkJbmxwLT5ubHBfZmxhZyB8PSBsaXN0OwotCQkvKiBQdXQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgdW5tYXAgbGlzdCAqLwotCQlsaXN0X2FkZF90YWlsKCZubHAtPm5scF9saXN0cCwgJnBoYmEtPmZjX25scHVubWFwX2xpc3QpOwotCQlwaGJhLT5mY191bm1hcF9jbnQrKzsKLQkJcGhiYS0+bnBvcnRfZXZlbnRfY250Kys7Ci0JCW5scC0+bmxwX2ZsYWcgJj0gfk5MUF9OT0RFVl9SRU1PVkU7Ci0JCW5scC0+bmxwX3R5cGUgfD0gTkxQX0ZDX05PREU7Ci0JCWJyZWFrOwotCWNhc2UgTkxQX01BUFBFRF9MSVNUOgotCQlycG9ydF9hZGQgPSBtYXBwZWQ7Ci0JCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKLQkJLyogUHV0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIG1hcCBsaXN0ICovCi0JCWxpc3RfYWRkX3RhaWwoJm5scC0+bmxwX2xpc3RwLCAmcGhiYS0+ZmNfbmxwbWFwX2xpc3QpOwotCQlwaGJhLT5mY19tYXBfY250Kys7Ci0JCXBoYmEtPm5wb3J0X2V2ZW50X2NudCsrOwotCQlubHAtPm5scF9mbGFnICY9IH5OTFBfTk9ERVZfUkVNT1ZFOwotCQlicmVhazsKLQljYXNlIE5MUF9OUFJfTElTVDoKLQkJbmxwLT5ubHBfZmxhZyB8PSBsaXN0OwotCQkvKiBQdXQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgbnByIGxpc3QgKi8KLQkJbGlzdF9hZGRfdGFpbCgmbmxwLT5ubHBfbGlzdHAsICZwaGJhLT5mY19ucHJfbGlzdCk7Ci0JCXBoYmEtPmZjX25wcl9jbnQrKzsKLQotCQlubHAtPm5scF9mbGFnICY9IH5OTFBfUkNWX1BMT0dJOwotCQlicmVhazsKLQljYXNlIE5MUF9KVVNUX0RROgotCQlicmVhazsKLQl9Ci0KIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKK30KIAotCS8qCi0JICogV2UgbWFrZSBhbGwgdGhlIGNhbGxzIGludG8gdGhlIHRyYW5zcG9ydCBhZnRlciB3ZSBoYXZlCi0JICogbW92ZWQgdGhlIG5vZGUgYmV0d2VlbiBsaXN0cy4gVGhpcyBzbyB0aGF0IHdlIGRvbid0Ci0JICogcmVsZWFzZSB0aGUgbG9jayB3aGlsZSBpbi1iZXR3ZWVuIGxpc3RzLgotCSAqLworc3RhdGljIHZvaWQKK2xwZmNfbmxwX3N0YXRlX2NsZWFudXAoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKKwkJICAgICAgIGludCBvbGRfc3RhdGUsIGludCBuZXdfc3RhdGUpCit7CisJaWYgKG5ld19zdGF0ZSA9PSBOTFBfU1RFX1VOTUFQUEVEX05PREUpIHsKKwkJbmRscC0+bmxwX3R5cGUgJj0gfihOTFBfRkNQX1RBUkdFVCB8IE5MUF9GQ1BfSU5JVElBVE9SKTsKKwkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OT0RFVl9SRU1PVkU7CisJCW5kbHAtPm5scF90eXBlIHw9IE5MUF9GQ19OT0RFOworCX0KKwlpZiAobmV3X3N0YXRlID09IE5MUF9TVEVfTUFQUEVEX05PREUpCisJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTk9ERVZfUkVNT1ZFOworCWlmIChuZXdfc3RhdGUgPT0gTkxQX1NURV9OUFJfTk9ERSkKKwkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9SQ1ZfUExPR0k7CiAKLQkvKiBEb24ndCB1cGNhbGwgbWlkbGF5ZXIgaWYgd2UncmUgdW5sb2FkaW5nICovCi0JaWYgKCEocGhiYS0+ZmNfZmxhZyAmIEZDX1VOTE9BRElORykpIHsKLQkJLyoKLQkJICogV2UgcmV2YWxpZGF0ZSB0aGUgcnBvcnQgcG9pbnRlciBhcyB0aGUgImFkZCIgZnVuY3Rpb24KLQkJICogbWF5IGhhdmUgcmVtb3ZlZCB0aGUgcmVtb3RlIHBvcnQuCi0JCSAqLwotCQlpZiAoKHJwb3J0X2RlbCAhPSBub25lKSAmJiBubHAtPnJwb3J0KQotCQkJbHBmY191bnJlZ2lzdGVyX3JlbW90ZV9wb3J0KHBoYmEsIG5scCk7CisJLyogVHJhbnNwb3J0IGludGVyZmFjZSAqLworCWlmIChuZGxwLT5ycG9ydCAmJiAob2xkX3N0YXRlID09IE5MUF9TVEVfTUFQUEVEX05PREUgfHwKKwkJCSAgICBvbGRfc3RhdGUgPT0gTkxQX1NURV9VTk1BUFBFRF9OT0RFKSkgeworCQlwaGJhLT5ucG9ydF9ldmVudF9jbnQrKzsKKwkJbHBmY191bnJlZ2lzdGVyX3JlbW90ZV9wb3J0KHBoYmEsIG5kbHApOworCX0KIAotCQlpZiAocnBvcnRfYWRkICE9IG5vbmUpIHsKKwlpZiAobmV3X3N0YXRlID09ICBOTFBfU1RFX01BUFBFRF9OT0RFIHx8CisJICAgIG5ld19zdGF0ZSA9PSBOTFBfU1RFX1VOTUFQUEVEX05PREUpIHsKKwkJcGhiYS0+bnBvcnRfZXZlbnRfY250Kys7CiAJCQkvKgogCQkJICogVGVsbCB0aGUgZmMgdHJhbnNwb3J0IGFib3V0IHRoZSBwb3J0LCBpZiB3ZSBoYXZlbid0CiAJCQkgKiBhbHJlYWR5LiBJZiB3ZSBoYXZlLCBhbmQgaXQncyBhIHNjc2kgZW50aXR5LCBiZQogCQkJICogc3VyZSB0byB1bmJsb2NrIGFueSBhdHRhY2hlZCBzY3NpIGRldmljZXMKIAkJCSAqLwotCQkJaWYgKCghbmxwLT5ycG9ydCkgfHwgKG5scC0+cnBvcnQtPnBvcnRfc3RhdGUgPT0KLQkJCQkJRkNfUE9SVFNUQVRFX0JMT0NLRUQpKQotCQkJCWxwZmNfcmVnaXN0ZXJfcmVtb3RlX3BvcnQocGhiYSwgbmxwKTsKKwkJCWxwZmNfcmVnaXN0ZXJfcmVtb3RlX3BvcnQocGhiYSwgbmRscCk7CisJfQogCiAJCQkvKgogCQkJICogaWYgd2UgYWRkZWQgdG8gTWFwcGVkIGxpc3QsIGJ1dCB0aGUgcmVtb3RlIHBvcnQKQEAgLTEzNDAsMTkgKzEyNDcsOTUgQEAKIAkJCSAqIG91ciBwcmVzZW50YWJsZSByYW5nZSAtIG1vdmUgdGhlIG5vZGUgdG8gdGhlCiAJCQkgKiBVbm1hcHBlZCBMaXN0CiAJCQkgKi8KLQkJCWlmICgocnBvcnRfYWRkID09IG1hcHBlZCkgJiYKLQkJCSAgICAoKCFubHAtPnJwb3J0KSB8fAotCQkJICAgICAobmxwLT5ycG9ydC0+c2NzaV90YXJnZXRfaWQgPT0gLTEpIHx8Ci0JCQkgICAgIChubHAtPnJwb3J0LT5zY3NpX3RhcmdldF9pZCA+PSBMUEZDX01BWF9UQVJHRVQpKSkgewotCQkJCW5scC0+bmxwX3N0YXRlID0gTkxQX1NURV9VTk1BUFBFRF9OT0RFOwotCQkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCQlubHAtPm5scF9mbGFnIHw9IE5MUF9UR1RfTk9fU0NTSUlEOwotCQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmxwLCBOTFBfVU5NQVBQRURfTElTVCk7Ci0JCQl9Ci0JCX0KKwlpZiAobmV3X3N0YXRlID09IE5MUF9TVEVfTUFQUEVEX05PREUgJiYKKwkgICAgKCFuZGxwLT5ycG9ydCB8fAorCSAgICAgbmRscC0+cnBvcnQtPnNjc2lfdGFyZ2V0X2lkID09IC0xIHx8CisJICAgICBuZGxwLT5ycG9ydC0+c2NzaV90YXJnZXRfaWQgPj0gTFBGQ19NQVhfVEFSR0VUKSkgeworCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9UR1RfTk9fU0NTSUlEOworCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfVU5NQVBQRURfTk9ERSk7CiAJfQotCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqCitscGZjX25scF9zdGF0ZV9uYW1lKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBzdGF0ZSkKK3sKKwlzdGF0aWMgY2hhciAqc3RhdGVzW10gPSB7CisJCVtOTFBfU1RFX1VOVVNFRF9OT0RFXSA9ICJVTlVTRUQiLAorCQlbTkxQX1NURV9QTE9HSV9JU1NVRV0gPSAiUExPR0kiLAorCQlbTkxQX1NURV9BRElTQ19JU1NVRV0gPSAiQURJU0MiLAorCQlbTkxQX1NURV9SRUdfTE9HSU5fSVNTVUVdID0gIlJFR0xPR0lOIiwKKwkJW05MUF9TVEVfUFJMSV9JU1NVRV0gPSAiUFJMSSIsCisJCVtOTFBfU1RFX1VOTUFQUEVEX05PREVdID0gIlVOTUFQUEVEIiwKKwkJW05MUF9TVEVfTUFQUEVEX05PREVdID0gIk1BUFBFRCIsCisJCVtOTFBfU1RFX05QUl9OT0RFXSA9ICJOUFIiLAorCX07CisKKwlpZiAoc3RhdGUgPCBBUlJBWV9TSVpFKHN0YXRlcykgJiYgc3RhdGVzW3N0YXRlXSkKKwkJc3RybGNweShidWZmZXIsIHN0YXRlc1tzdGF0ZV0sIHNpemUpOworCWVsc2UKKwkJc25wcmludGYoYnVmZmVyLCBzaXplLCAidW5rbm93biAoJWQpIiwgc3RhdGUpOworCXJldHVybiBidWZmZXI7Cit9CisKK3ZvaWQKK2xwZmNfbmxwX3NldF9zdGF0ZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLCBpbnQgc3RhdGUpCit7CisJaW50ICBvbGRfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7CisJY2hhciBuYW1lMVsxNl0sIG5hbWUyWzE2XTsKKworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19OT0RFLAorCQkJIiVkOjA5MDQgTlBvcnQgc3RhdGUgdHJhbnNpdGlvbiB4JTA2eCwgJXMgLT4gJXNcbiIsCisJCQlwaGJhLT5icmRfbm8sCisJCQluZGxwLT5ubHBfRElELAorCQkJbHBmY19ubHBfc3RhdGVfbmFtZShuYW1lMSwgc2l6ZW9mKG5hbWUxKSwgb2xkX3N0YXRlKSwKKwkJCWxwZmNfbmxwX3N0YXRlX25hbWUobmFtZTIsIHNpemVvZihuYW1lMiksIHN0YXRlKSk7CisJaWYgKG9sZF9zdGF0ZSA9PSBOTFBfU1RFX05QUl9OT0RFICYmCisJICAgIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pICE9IDAgJiYKKwkgICAgc3RhdGUgIT0gTkxQX1NURV9OUFJfTk9ERSkKKwkJbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vKHBoYmEsIG5kbHApOworCWlmIChvbGRfc3RhdGUgPT0gTkxQX1NURV9VTk1BUFBFRF9OT0RFKSB7CisJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfVEdUX05PX1NDU0lJRDsKKwkJbmRscC0+bmxwX3R5cGUgJj0gfk5MUF9GQ19OT0RFOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZuZGxwLT5ubHBfbGlzdHApKSB7CisJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJbGlzdF9hZGRfdGFpbCgmbmRscC0+bmxwX2xpc3RwLCAmcGhiYS0+ZmNfbm9kZXMpOworCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwl9IGVsc2UgaWYgKG9sZF9zdGF0ZSkKKwkJbHBmY19ubHBfY291bnRlcnMocGhiYSwgb2xkX3N0YXRlLCAtMSk7CisKKwluZGxwLT5ubHBfc3RhdGUgPSBzdGF0ZTsKKwlscGZjX25scF9jb3VudGVycyhwaGJhLCBzdGF0ZSwgMSk7CisJbHBmY19ubHBfc3RhdGVfY2xlYW51cChwaGJhLCBuZGxwLCBvbGRfc3RhdGUsIHN0YXRlKTsKK30KKwordm9pZAorbHBmY19kZXF1ZXVlX25vZGUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKK3sKKwlpZiAoKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykgIT0gMCkKKwkJbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vKHBoYmEsIG5kbHApOworCWlmIChuZGxwLT5ubHBfc3RhdGUgJiYgIWxpc3RfZW1wdHkoJm5kbHAtPm5scF9saXN0cCkpCisJCWxwZmNfbmxwX2NvdW50ZXJzKHBoYmEsIG5kbHAtPm5scF9zdGF0ZSwgLTEpOworCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZuZGxwLT5ubHBfbGlzdHApOworCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCWxwZmNfbmxwX3N0YXRlX2NsZWFudXAocGhiYSwgbmRscCwgbmRscC0+bmxwX3N0YXRlLCAwKTsKK30KKwordm9pZAorbHBmY19kcm9wX25vZGUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKK3sKKwlpZiAoKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykgIT0gMCkKKwkJbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vKHBoYmEsIG5kbHApOworCWlmIChuZGxwLT5ubHBfc3RhdGUgJiYgIWxpc3RfZW1wdHkoJm5kbHAtPm5scF9saXN0cCkpCisJCWxwZmNfbmxwX2NvdW50ZXJzKHBoYmEsIG5kbHAtPm5scF9zdGF0ZSwgLTEpOworCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZuZGxwLT5ubHBfbGlzdHApOworCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCWxwZmNfbmxwX3B1dChuZGxwKTsKIH0KIAogLyoKQEAgLTE0NjQsNiArMTQ0Nyw3IEBACiBzdGF0aWMgaW50CiBscGZjX25vX3JwaShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHApCiB7CisJTElTVF9IRUFEKGNvbXBsZXRpb25zKTsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGk7CiAJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nOwogCXN0cnVjdCBscGZjX2lvY2JxICppb2NiLCAqbmV4dF9pb2NiOwpAQCAtMTQ5MiwyOSArMTQ3NiwyOSBAQAogCQkJCSAgICAgKHBoYmEsIHByaW5nLCBpb2NiLCBuZGxwKSkpIHsKIAkJCQkJLyogSXQgbWF0Y2hlcywgc28gZGVxdWUgYW5kIGNhbGwgY29tcGwKIAkJCQkJICAgd2l0aCBhbiBlcnJvciAqLwotCQkJCQlsaXN0X2RlbCgmaW9jYi0+bGlzdCk7CisJCQkJCWxpc3RfbW92ZV90YWlsKCZpb2NiLT5saXN0LAorCQkJCQkJICAgICAgICZjb21wbGV0aW9ucyk7CiAJCQkJCXByaW5nLT50eHFfY250LS07Ci0JCQkJCWlmIChpb2NiLT5pb2NiX2NtcGwpIHsKLQkJCQkJCWljbWQgPSAmaW9jYi0+aW9jYjsKLQkJCQkJCWljbWQtPnVscFN0YXR1cyA9Ci0JCQkJCQkgICAgSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCQkJCWljbWQtPnVuLnVscFdvcmRbNF0gPQotCQkJCQkJICAgIElPRVJSX1NMSV9BQk9SVEVEOwotCQkJCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPgotCQkJCQkJCQlob3N0X2xvY2spOwotCQkJCQkJKGlvY2ItPmlvY2JfY21wbCkgKHBoYmEsCi0JCQkJCQkJCSAgIGlvY2IsIGlvY2IpOwotCQkJCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT4KLQkJCQkJCQkgICAgICBob3N0X2xvY2spOwotCQkJCQl9IGVsc2UKLQkJCQkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwKLQkJCQkJCQkJICAgICAgIGlvY2IpOwogCQkJCX0KIAkJCX0KIAkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCiAJCX0KIAl9CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmNvbXBsZXRpb25zKSkgeworCQlpb2NiID0gbGlzdF9nZXRfZmlyc3QoJmNvbXBsZXRpb25zLCBzdHJ1Y3QgbHBmY19pb2NicSwgbGlzdCk7CisJCWxpc3RfZGVsKCZpb2NiLT5saXN0KTsKKworCQlpZiAoaW9jYi0+aW9jYl9jbXBsKSB7CisJCQlpY21kID0gJmlvY2ItPmlvY2I7CisJCQlpY21kLT51bHBTdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOworCQkJaWNtZC0+dW4udWxwV29yZFs0XSA9IElPRVJSX1NMSV9BQk9SVEVEOworCQkJKGlvY2ItPmlvY2JfY21wbCkgKHBoYmEsIGlvY2IsIGlvY2IpOworCQl9IGVsc2UKKwkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgaW9jYik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1NTQsNyArMTUzOCw3IEBACiAgKiBzbyBpdCBjYW4gYmUgZnJlZWQuCiAgKi8KIHN0YXRpYyBpbnQKLWxwZmNfZnJlZW5vZGUoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwKQorbHBmY19jbGVhbnVwX25vZGUoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwKQogewogCUxQRkNfTUJPWFFfdCAgICAgICAqbWI7CiAJTFBGQ19NQk9YUV90ICAgICAgICpuZXh0bWI7CkBAIC0xNTY3LDE3ICsxNTUxLDcgQEAKIAkJCXBoYmEtPmJyZF9ubywgbmRscC0+bmxwX0RJRCwgbmRscC0+bmxwX2ZsYWcsCiAJCQluZGxwLT5ubHBfc3RhdGUsIG5kbHAtPm5scF9ycGkpOwogCi0JbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfSlVTVF9EUSk7Ci0KLQkvKgotCSAqIGlmIHVubG9hZGluZyB0aGUgZHJpdmVyIC0ganVzdCBsZWF2ZSB0aGUgcmVtb3RlIHBvcnQgaW4gcGxhY2UuCi0JICogVGhlIGRyaXZlciB1bmxvYWQgd2lsbCBmb3JjZSB0aGUgYXR0YWNoZWQgZGV2aWNlcyB0byBkZXRhY2gKLQkgKiBhbmQgZmx1c2ggY2FjaGUncyB3L28gZ2VuZXJhdGluZyBmbHVzaCBlcnJvcnMuCi0JICovCi0JaWYgKChuZGxwLT5ycG9ydCkgJiYgIShwaGJhLT5mY19mbGFnICYgRkNfVU5MT0FESU5HKSkgewotCQlscGZjX3VucmVnaXN0ZXJfcmVtb3RlX3BvcnQocGhiYSwgbmRscCk7Ci0JCW5kbHAtPm5scF9zaWQgPSBOTFBfTk9fU0lEOwotCX0KKwlscGZjX2RlcXVldWVfbm9kZShwaGJhLCBuZGxwKTsKIAogCS8qIGNsZWFudXAgYW55IG5kbHAgb24gbWJveCBxIHdhaXRpbmcgZm9yIHJlZ2xvZ2luIGNtcGwgKi8KIAlpZiAoKG1iID0gcGhiYS0+c2xpLm1ib3hfYWN0aXZlKSkgewpAQCAtMTU5OSwxMSArMTU3MywxMiBAQAogCQkJfQogCQkJbGlzdF9kZWwoJm1iLT5saXN0KTsKIAkJCW1lbXBvb2xfZnJlZShtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCQlscGZjX25scF9wdXQobmRscCk7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKLQlscGZjX2Vsc19hYm9ydChwaGJhLG5kbHAsMCk7CisJbHBmY19lbHNfYWJvcnQocGhiYSxuZGxwKTsKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9ERUxBWV9UTU87CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC0xNjI0LDI3ICsxNTk5LDI3IEBACiAgKiBJZiB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB1c2luZyB0aGUgbmxwIGluIHRoZSBkaXNjb3Zlcnkgc3RhdGUKICAqIG1hY2hpbmUsIGRlZmVyIHRoZSBmcmVlIHRpbGwgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgc3RhdGUgbWFjaGluZS4KICAqLwotaW50Ci1scGZjX25scF9yZW1vdmUoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwKQorc3RhdGljIHZvaWQKK2xwZmNfbmxwX3JlbW92ZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQogeworCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhOwogCiAJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykgewogCQlscGZjX2NhbmNlbF9yZXRyeV9kZWxheV90bW8ocGhiYSwgbmRscCk7CiAJfQogCi0JaWYgKG5kbHAtPm5scF9kaXNjX3JlZmNudCkgewotCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9ERUxBWV9SRU1PVkU7Ci0JCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCX0gZWxzZSB7Ci0JCWxwZmNfZnJlZW5vZGUocGhiYSwgbmRscCk7Ci0JCW1lbXBvb2xfZnJlZSggbmRscCwgcGhiYS0+bmxwX21lbV9wb29sKTsKKwlscGZjX2NsZWFudXBfbm9kZShwaGJhLCBuZGxwKTsKKworCWlmICgobmRscC0+cnBvcnQpICYmICEocGhiYS0+ZmNfZmxhZyAmIEZDX1VOTE9BRElORykpIHsKKwkJcHV0X2RldmljZSgmbmRscC0+cnBvcnQtPmRldik7CisJCXJkYXRhID0gbmRscC0+cnBvcnQtPmRkX2RhdGE7CisJCXJkYXRhLT5wbm9kZSA9IE5VTEw7CisJCW5kbHAtPnJwb3J0ID0gTlVMTDsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLWxwZmNfbWF0Y2hkaWQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLCB1aW50MzJfdCBkaWQpCitscGZjX21hdGNoZGlkKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsIHVpbnQzMl90IGRpZCkKIHsKIAlEX0lEIG15ZGlkOwogCURfSUQgbmRscGRpZDsKQEAgLTE2OTMsNTcgKzE2NjgsMzYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogU2VhcmNoIGZvciBhIG5vZGVsaXN0IGVudHJ5IG9uIGEgc3BlY2lmaWMgbGlzdCAqLworLyogU2VhcmNoIGZvciBhIG5vZGVsaXN0IGVudHJ5ICovCiBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqCi1scGZjX2ZpbmRub2RlX2RpZChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCB1aW50MzJfdCBvcmRlciwgdWludDMyX3QgZGlkKQorbHBmY19maW5kbm9kZV9kaWQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCBkaWQpCiB7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdHNbXT17JnBoYmEtPmZjX25scHVubWFwX2xpc3QsCi0JCQkJICAgJnBoYmEtPmZjX25scG1hcF9saXN0LAotCQkJCSAgICZwaGJhLT5mY19wbG9naV9saXN0LAotCQkJCSAgICZwaGJhLT5mY19hZGlzY19saXN0LAotCQkJCSAgICZwaGJhLT5mY19yZWdsb2dpbl9saXN0LAotCQkJCSAgICZwaGJhLT5mY19wcmxpX2xpc3QsCi0JCQkJICAgJnBoYmEtPmZjX25wcl9saXN0LAotCQkJCSAgICZwaGJhLT5mY191bnVzZWRfbGlzdH07Ci0JdWludDMyX3Qgc2VhcmNoW109e05MUF9TRUFSQ0hfVU5NQVBQRUQsCi0JCQkgICBOTFBfU0VBUkNIX01BUFBFRCwKLQkJCSAgIE5MUF9TRUFSQ0hfUExPR0ksCi0JCQkgICBOTFBfU0VBUkNIX0FESVNDLAotCQkJICAgTkxQX1NFQVJDSF9SRUdMT0dJTiwKLQkJCSAgIE5MUF9TRUFSQ0hfUFJMSSwKLQkJCSAgIE5MUF9TRUFSQ0hfTlBSLAotCQkJICAgTkxQX1NFQVJDSF9VTlVTRUR9OwotCWludCBpOwogCXVpbnQzMl90IGRhdGExOwogCiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxpc3RzKTsgaSsrICkgewotCQlpZiAoIShvcmRlciAmIHNlYXJjaFtpXSkpCi0JCQljb250aW51ZTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZGxwLCBsaXN0c1tpXSwgbmxwX2xpc3RwKSB7Ci0JCQlpZiAobHBmY19tYXRjaGRpZChwaGJhLCBuZGxwLCBkaWQpKSB7Ci0JCQkJZGF0YTEgPSAoKCh1aW50MzJfdCkgbmRscC0+bmxwX3N0YXRlIDw8IDI0KSB8Ci0JCQkJCSAoKHVpbnQzMl90KSBuZGxwLT5ubHBfeHJpIDw8IDE2KSB8Ci0JCQkJCSAoKHVpbnQzMl90KSBuZGxwLT5ubHBfdHlwZSA8PCA4KSB8Ci0JCQkJCSAoKHVpbnQzMl90KSBuZGxwLT5ubHBfcnBpICYgMHhmZikpOwotCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19OT0RFLAotCQkJCQkJIiVkOjA5MjkgRklORCBub2RlIERJRCAiCi0JCQkJCQkiIERhdGE6IHglcCB4JXggeCV4IHgleFxuIiwKLQkJCQkJCXBoYmEtPmJyZF9ubywKLQkJCQkJCW5kbHAsIG5kbHAtPm5scF9ESUQsCi0JCQkJCQluZGxwLT5ubHBfZmxhZywgZGF0YTEpOwotCQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJCXJldHVybiBuZGxwOwotCQkJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkobmRscCwgJnBoYmEtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJaWYgKGxwZmNfbWF0Y2hkaWQocGhiYSwgbmRscCwgZGlkKSkgeworCQkJZGF0YTEgPSAoKCh1aW50MzJfdCkgbmRscC0+bmxwX3N0YXRlIDw8IDI0KSB8CisJCQkJICgodWludDMyX3QpIG5kbHAtPm5scF94cmkgPDwgMTYpIHwKKwkJCQkgKCh1aW50MzJfdCkgbmRscC0+bmxwX3R5cGUgPDwgOCkgfAorCQkJCSAoKHVpbnQzMl90KSBuZGxwLT5ubHBfcnBpICYgMHhmZikpOworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX05PREUsCisJCQkJCSIlZDowOTI5IEZJTkQgbm9kZSBESUQgIgorCQkJCQkiIERhdGE6IHglcCB4JXggeCV4IHgleFxuIiwKKwkJCQkJcGhiYS0+YnJkX25vLAorCQkJCQluZGxwLCBuZGxwLT5ubHBfRElELAorCQkJCQluZGxwLT5ubHBfZmxhZywgZGF0YTEpOworCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQlyZXR1cm4gbmRscDsKIAkJfQogCX0KIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAogCS8qIEZJTkQgbm9kZSBkaWQgPGRpZD4gTk9UIEZPVU5EICovCiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX05PREUsCi0JCQkiJWQ6MDkzMiBGSU5EIG5vZGUgZGlkIHgleCBOT1QgRk9VTkQgRGF0YTogeCV4XG4iLAotCQkJcGhiYS0+YnJkX25vLCBkaWQsIG9yZGVyKTsKKwkJCSIlZDowOTMyIEZJTkQgbm9kZSBkaWQgeCV4IE5PVCBGT1VORC5cbiIsCisJCQlwaGJhLT5icmRfbm8sIGRpZCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE3NTEsOSArMTcwNSw4IEBACiBscGZjX3NldHVwX2Rpc2Nfbm9kZShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCB1aW50MzJfdCBkaWQpCiB7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7Ci0JdWludDMyX3QgZmxnOwogCi0JbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLCBkaWQpOworCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBkaWQpOwogCWlmICghbmRscCkgewogCQlpZiAoKHBoYmEtPmZjX2ZsYWcgJiBGQ19SU0NOX01PREUpICYmCiAJCSAgICgobHBmY19yc2NuX3BheWxvYWRfY2hlY2socGhiYSwgZGlkKSA9PSAwKSkpCkBAIC0xNzYzLDggKzE3MTYsNyBAQAogCQlpZiAoIW5kbHApCiAJCQlyZXR1cm4gTlVMTDsKIAkJbHBmY19ubHBfaW5pdChwaGJhLCBuZGxwLCBkaWQpOwotCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CisJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX05QUl9OT0RFKTsKIAkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX05QUl8yQl9ESVNDOwogCQlyZXR1cm4gbmRscDsKIAl9CkBAIC0xNzgwLDExICsxNzMyLDEwIEBACiAJCX0gZWxzZQogCQkJbmRscCA9IE5VTEw7CiAJfSBlbHNlIHsKLQkJZmxnID0gbmRscC0+bmxwX2ZsYWcgJiBOTFBfTElTVF9NQVNLOwotCQlpZiAoKGZsZyA9PSBOTFBfQURJU0NfTElTVCkgfHwgKGZsZyA9PSBOTFBfUExPR0lfTElTVCkpCisJCWlmIChuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9BRElTQ19JU1NVRSB8fAorCQkgICAgbmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfUExPR0lfSVNTVUUpCiAJCQlyZXR1cm4gTlVMTDsKLQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOworCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9OUFJfTk9ERSk7CiAJCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9OUFJfMkJfRElTQzsKIAl9CiAJcmV0dXJuIG5kbHA7CkBAIC0xODQyLDggKzE3OTMsOSBAQAogCXN0cnVjdCBscGZjX3NsaSAqcHNsaTsKIAlMUEZDX01CT1hRX3QgKm1ib3g7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsICpuZXh0X25kbHA7Ci0JdWludDMyX3QgZGlkX2NoYW5nZWQsIG51bV9zZW50OworCXVpbnQzMl90IG51bV9zZW50OwogCXVpbnQzMl90IGNsZWFyX2xhX3BlbmRpbmc7CisJaW50IGRpZF9jaGFuZ2VkOwogCWludCByYzsKIAogCXBzbGkgPSAmcGhiYS0+c2xpOwpAQCAtMTg3NywxNCArMTgyOSwxMyBAQAogCQkJcGhiYS0+ZmNfcGxvZ2lfY250LCBwaGJhLT5mY19hZGlzY19jbnQpOwogCiAJLyogSWYgb3VyIGRpZCBjaGFuZ2VkLCB3ZSBNVVNUIGRvIFBMT0dJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnBoYmEtPmZjX25wcl9saXN0LAotCQkJCW5scF9saXN0cCkgewotCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSXzJCX0RJU0MpIHsKLQkJCWlmIChkaWRfY2hhbmdlZCkgewotCQkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl9BRElTQzsKLQkJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfbm9kZXMsIG5scF9saXN0cCkgeworCQlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfTlBSX05PREUgJiYKKwkJICAgIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykgIT0gMCAmJgorCQkgICAgZGlkX2NoYW5nZWQpIHsKKwkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSX0FESVNDOworCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCX0KIAl9CiAKQEAgLTE5NDQsMTEgKzE4OTUsMTEgQEAKIHN0YXRpYyB2b2lkCiBscGZjX2ZyZWVfdHgoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwKQogeworCUxJU1RfSEVBRChjb21wbGV0aW9ucyk7CiAJc3RydWN0IGxwZmNfc2xpICpwc2xpOwogCUlPQ0JfdCAgICAgKmljbWQ7CiAJc3RydWN0IGxwZmNfaW9jYnEgICAgKmlvY2IsICpuZXh0X2lvY2I7CiAJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nOwotCXN0cnVjdCBscGZjX2RtYWJ1ZiAgICptcDsKIAogCXBzbGkgPSAmcGhiYS0+c2xpOwogCXByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CkBAIC0xOTU2LDYgKzE5MDcsNyBAQAogCS8qIEVycm9yIG1hdGNoaW5nIGlvY2Igb24gdHhxIG9yIHR4Y21wbHEKIAkgKiBGaXJzdCBjaGVjayB0aGUgdHhxLgogCSAqLworCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW9jYiwgbmV4dF9pb2NiLCAmcHJpbmctPnR4cSwgbGlzdCkgewogCQlpZiAoaW9jYi0+Y29udGV4dDEgIT0gbmRscCkgewogCQkJY29udGludWU7CkBAIC0xOTY0LDkgKzE5MTYsOCBAQAogCQlpZiAoKGljbWQtPnVscENvbW1hbmQgPT0gQ01EX0VMU19SRVFVRVNUNjRfQ1IpIHx8CiAJCSAgICAoaWNtZC0+dWxwQ29tbWFuZCA9PSBDTURfWE1JVF9FTFNfUlNQNjRfQ1gpKSB7CiAKLQkJCWxpc3RfZGVsKCZpb2NiLT5saXN0KTsKKwkJCWxpc3RfbW92ZV90YWlsKCZpb2NiLT5saXN0LCAmY29tcGxldGlvbnMpOwogCQkJcHJpbmctPnR4cV9jbnQtLTsKLQkJCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBpb2NiKTsKIAkJfQogCX0KIApAQCAtMTk3OCw0NCArMTkyOSwyMyBAQAogCQlpY21kID0gJmlvY2ItPmlvY2I7CiAJCWlmICgoaWNtZC0+dWxwQ29tbWFuZCA9PSBDTURfRUxTX1JFUVVFU1Q2NF9DUikgfHwKIAkJICAgIChpY21kLT51bHBDb21tYW5kID09IENNRF9YTUlUX0VMU19SU1A2NF9DWCkpIHsKLQotCQkJaW9jYi0+aW9jYl9jbXBsID0gTlVMTDsKLQkJCS8qIGNvbnRleHQyID0gY21kLCBjb250ZXh0Mi0+bmV4dCA9IHJzcCwgY29udGV4dDMgPQotCQkJICAgYnBsICovCi0JCQlpZiAoaW9jYi0+Y29udGV4dDIpIHsKLQkJCQkvKiBGcmVlIHRoZSByZXNwb25zZSBJT0NCIGJlZm9yZSBoYW5kbGluZyB0aGUKLQkJCQkgICBjb21tYW5kLiAqLwotCi0JCQkJbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChpb2NiLT5jb250ZXh0Mik7Ci0JCQkJbXAgPSBsaXN0X2dldF9maXJzdCgmbXAtPmxpc3QsCi0JCQkJCQkgICAgc3RydWN0IGxwZmNfZG1hYnVmLAotCQkJCQkJICAgIGxpc3QpOwotCQkJCWlmIChtcCkgewotCQkJCQkvKiBEZWxheSBiZWZvcmUgcmVsZWFzaW5nIHJzcCBidWZmZXIgdG8KLQkJCQkJICogZ2l2ZSBVTlJFRyBtYm94IGEgY2hhbmNlIHRvIHRha2UKLQkJCQkJICogZWZmZWN0LgotCQkJCQkgKi8KLQkJCQkJbGlzdF9hZGQoJm1wLT5saXN0LAotCQkJCQkJJnBoYmEtPmZyZWVidWZMaXN0KTsKLQkJCQl9Ci0JCQkJbHBmY19tYnVmX2ZyZWUocGhiYSwKLQkJCQkJICAgICAgICgoc3RydWN0IGxwZmNfZG1hYnVmICopCi0JCQkJCQlpb2NiLT5jb250ZXh0MiktPnZpcnQsCi0JCQkJCSAgICAgICAoKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKQotCQkJCQkJaW9jYi0+Y29udGV4dDIpLT5waHlzKTsKLQkJCQlrZnJlZShpb2NiLT5jb250ZXh0Mik7Ci0JCQl9Ci0KLQkJCWlmIChpb2NiLT5jb250ZXh0MykgewotCQkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsCi0JCQkJCSAgICAgICAoKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKQotCQkJCQkJaW9jYi0+Y29udGV4dDMpLT52aXJ0LAotCQkJCQkgICAgICAgKChzdHJ1Y3QgbHBmY19kbWFidWYgKikKLQkJCQkJCWlvY2ItPmNvbnRleHQzKS0+cGh5cyk7Ci0JCQkJa2ZyZWUoaW9jYi0+Y29udGV4dDMpOwotCQkJfQorCQkJbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcocGhiYSwgcHJpbmcsIGlvY2IpOwogCQl9CiAJfQorCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjb21wbGV0aW9ucykpIHsKKwkJaW9jYiA9IGxpc3RfZ2V0X2ZpcnN0KCZjb21wbGV0aW9ucywgc3RydWN0IGxwZmNfaW9jYnEsIGxpc3QpOworCQlsaXN0X2RlbCgmaW9jYi0+bGlzdCk7CisKKwkJaWYgKGlvY2ItPmlvY2JfY21wbCkgeworCQkJaWNtZCA9ICZpb2NiLT5pb2NiOworCQkJaWNtZC0+dWxwU3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKKwkJCWljbWQtPnVuLnVscFdvcmRbNF0gPSBJT0VSUl9TTElfQUJPUlRFRDsKKwkJCShpb2NiLT5pb2NiX2NtcGwpIChwaGJhLCBpb2NiLCBpb2NiKTsKKwkJfSBlbHNlCisJCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGlvY2IpOworCX0KIAogCXJldHVybjsKIH0KQEAgLTIwMjUsMjEgKzE5NTUsMTYgQEAKIHsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwgKm5leHRfbmRscDsKIAotCWlmIChwaGJhLT5mY19wbG9naV9jbnQpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnBoYmEtPmZjX3Bsb2dpX2xpc3QsCi0JCQkJCW5scF9saXN0cCkgewotCQkJbHBmY19mcmVlX3R4KHBoYmEsIG5kbHApOwotCQkJbHBmY19ubHBfcmVtb3ZlKHBoYmEsIG5kbHApOworCWlmIChwaGJhLT5mY19wbG9naV9jbnQgfHwgcGhiYS0+ZmNfYWRpc2NfY250KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZwaGJhLT5mY19ub2RlcywKKwkJCQkJIG5scF9saXN0cCkgeworCQkJaWYgKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX1BMT0dJX0lTU1VFIHx8CisJCQkgICAgbmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfQURJU0NfSVNTVUUpIHsKKwkJCQlscGZjX2ZyZWVfdHgocGhiYSwgbmRscCk7CisJCQkJbHBmY19ubHBfcHV0KG5kbHApOworCQkJfQogCQl9CiAJfQotCWlmIChwaGJhLT5mY19hZGlzY19jbnQpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnBoYmEtPmZjX2FkaXNjX2xpc3QsCi0JCQkJCW5scF9saXN0cCkgewotCQkJbHBmY19mcmVlX3R4KHBoYmEsIG5kbHApOwotCQkJbHBmY19ubHBfcmVtb3ZlKHBoYmEsIG5kbHApOwotCQl9Ci0JfQotCXJldHVybjsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjEwOCwxMSArMjAzMywxMyBAQAogCQkJCSBwaGJhLT5icmRfbm8pOwogCiAJCS8qIFN0YXJ0IGRpc2NvdmVyeSBieSBzZW5kaW5nIEZMT0dJLCBjbGVhbiB1cCBvbGQgcnBpcyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfbnByX2xpc3QsCi0JCQkJCW5scF9saXN0cCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfbm9kZXMsCisJCQkJCSBubHBfbGlzdHApIHsKKwkJCWlmIChuZGxwLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9OUFJfTk9ERSkKKwkJCQljb250aW51ZTsKIAkJCWlmIChuZGxwLT5ubHBfdHlwZSAmIE5MUF9GQUJSSUMpIHsKIAkJCQkvKiBDbGVhbiB1cCB0aGUgbmRscCBvbiBGYWJyaWMgY29ubmVjdGlvbnMgKi8KLQkJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwkJCQlscGZjX2Ryb3Bfbm9kZShwaGJhLCBuZGxwKTsKIAkJCX0gZWxzZSBpZiAoIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfQURJU0MpKSB7CiAJCQkJLyogRmFpbCBvdXRzdGFuZGluZyBJTyBub3cgc2luY2UgZGV2aWNlCiAJCQkJICogaXMgbWFya2VkIGZvciBQTE9HSS4KQEAgLTIxNTMsOSArMjA4MCw5IEBACiAJCQkJImxvZ2luXG4iLCBwaGJhLT5icmRfbm8pOwogCiAJCS8qIE5leHQgbG9vayBmb3IgTmFtZVNlcnZlciBuZGxwICovCi0JCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOTFBfU0VBUkNIX0FMTCwgTmFtZVNlcnZlcl9ESUQpOworCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYSwgTmFtZVNlcnZlcl9ESUQpOwogCQlpZiAobmRscCkKLQkJCWxwZmNfbmxwX3JlbW92ZShwaGJhLCBuZGxwKTsKKwkJCWxwZmNfbmxwX3B1dChuZGxwKTsKIAkJLyogU3RhcnQgZGlzY292ZXJ5ICovCiAJCWxwZmNfZGlzY19zdGFydChwaGJhKTsKIAkJYnJlYWs7CkBAIC0yMTY4LDkgKzIwOTUsOCBAQAogCQkJCXBoYmEtPmJyZF9ubywKIAkJCQlwaGJhLT5mY19uc19yZXRyeSwgTFBGQ19NQVhfTlNfUkVUUlkpOwogCi0JCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOTFBfU0VBUkNIX1VOTUFQUEVELAotCQkJCQkJCQlOYW1lU2VydmVyX0RJRCk7Ci0JCWlmIChuZGxwKSB7CisJCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOYW1lU2VydmVyX0RJRCk7CisJCWlmIChuZGxwICYmIG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX1VOTUFQUEVEX05PREUpIHsKIAkJCWlmIChwaGJhLT5mY19uc19yZXRyeSA8IExQRkNfTUFYX05TX1JFVFJZKSB7CiAJCQkJLyogVHJ5IGl0IG9uZSBtb3JlIHRpbWUgKi8KIAkJCQlyYyA9IGxwZmNfbnNfY21kKHBoYmEsIG5kbHAsIFNMSV9DVE5TX0dJRF9GVCk7CkBAIC0yMjIwLDYgKzIxNDYsNyBAQAogCQlpbml0bGlua21ib3gtPm1iLnVuLnZhckluaXRMbmsubGlwc3JfQUxfUEEgPSAwOwogCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgaW5pdGxpbmttYm94LAogCQkJCQkgKE1CWF9OT1dBSVQgfCBNQlhfU1RPUF9JT0NCKSk7CisJCWxwZmNfc2V0X2xvb3BiYWNrX2ZsYWcocGhiYSk7CiAJCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKQogCQkJbWVtcG9vbF9mcmVlKGluaXRsaW5rbWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAKQEAgLTIzMTcsOCArMjI0NCw3IEBACiAKIAluZGxwLT5ubHBfcnBpID0gbWItPnVuLnZhcldvcmRzWzBdOwogCW5kbHAtPm5scF90eXBlIHw9IE5MUF9GQUJSSUM7Ci0JbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9VTk1BUFBFRF9OT0RFOwotCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1VOTUFQUEVEX0xJU1QpOworCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX1VOTUFQUEVEX05PREUpOwogCiAJLyogU3RhcnQgaXNzdWluZyBGYWJyaWMtRGV2aWNlIE1hbmFnZW1lbnQgSW50ZXJmYWNlIChGRE1JKQogCSAqIGNvbW1hbmQgdG8gMHhmZmZmZmEgKEZETUkgd2VsbCBrbm93biBwb3J0KQpAQCAtMjMzMyw4NyArMjI1OSwxMDAgQEAKIAkJbW9kX3RpbWVyKCZwaGJhLT5mY19mZG1pdG1vLCBqaWZmaWVzICsgSFogKiA2MCk7CiAJfQogCisJCQkJLyogTWFpbGJveCB0b29rIGEgcmVmZXJlbmNlIHRvIHRoZSBub2RlICovCisJbHBmY19ubHBfcHV0KG5kbHApOwogCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIG1wLT52aXJ0LCBtcC0+cGh5cyk7CiAJa2ZyZWUobXApOwotCW1lbXBvb2xfZnJlZSggcG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAogCXJldHVybjsKIH0KIAorc3RhdGljIGludAorbHBmY19maWx0ZXJfYnlfcnBpKHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLCB2b2lkICpwYXJhbSkKK3sKKwl1aW50MTZfdCAqcnBpID0gcGFyYW07CisKKwlyZXR1cm4gbmRscC0+bmxwX3JwaSA9PSAqcnBpOworfQorCitzdGF0aWMgaW50CitscGZjX2ZpbHRlcl9ieV93d3BuKHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLCB2b2lkICpwYXJhbSkKK3sKKwlyZXR1cm4gbWVtY21wKCZuZGxwLT5ubHBfcG9ydG5hbWUsIHBhcmFtLAorCQkgICAgICBzaXplb2YobmRscC0+bmxwX3BvcnRuYW1lKSkgPT0gMDsKK30KKwogLyoKLSAqIFRoaXMgcm91dGluZSBsb29rcyB1cCB0aGUgbmRscCAgbGlzdHMKLSAqIGZvciB0aGUgZ2l2ZW4gUlBJLiBJZiBycGkgZm91bmQKLSAqIGl0IHJldHVybiB0aGUgbm9kZSBsaXN0IHBvaW50ZXIKLSAqIGVsc2UgcmV0dXJuIE5VTEwuCisgKiBTZWFyY2ggbm9kZSBsaXN0cyBmb3IgYSByZW1vdGUgcG9ydCBtYXRjaGluZyBmaWx0ZXIgY3JpdGVyaWEKKyAqIENhbGxlciBuZWVkcyB0byBob2xkIGhvc3RfbG9jayBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCiAgKi8KIHN0cnVjdCBscGZjX25vZGVsaXN0ICoKLWxwZmNfZmluZG5vZGVfcnBpKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHVpbnQxNl90IHJwaSkKK19fbHBmY19maW5kX25vZGUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBub2RlX2ZpbHRlciBmaWx0ZXIsIHZvaWQgKnBhcmFtKQogewogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwotCXN0cnVjdCBsaXN0X2hlYWQgKiBsaXN0c1tdPXsmcGhiYS0+ZmNfbmxwdW5tYXBfbGlzdCwKLQkJCQkgICAgJnBoYmEtPmZjX25scG1hcF9saXN0LAotCQkJCSAgICAmcGhiYS0+ZmNfcGxvZ2lfbGlzdCwKLQkJCQkgICAgJnBoYmEtPmZjX2FkaXNjX2xpc3QsCi0JCQkJICAgICZwaGJhLT5mY19yZWdsb2dpbl9saXN0fTsKLQlpbnQgaTsKIAotCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsaXN0cyk7IGkrKyApCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkobmRscCwgbGlzdHNbaV0sIG5scF9saXN0cCkKLQkJCWlmIChuZGxwLT5ubHBfcnBpID09IHJwaSkgewotCQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJCXJldHVybiBuZGxwOwotCQkJfQotCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkobmRscCwgJnBoYmEtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJaWYgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX1VOVVNFRF9OT0RFICYmCisJCSAgICBmaWx0ZXIobmRscCwgcGFyYW0pKQorCQkJcmV0dXJuIG5kbHA7CisJfQogCXJldHVybiBOVUxMOwogfQogCiAvKgotICogVGhpcyByb3V0aW5lIGxvb2tzIHVwIHRoZSBuZGxwICBsaXN0cwotICogZm9yIHRoZSBnaXZlbiBXV1BOLiBJZiBXV1BOIGZvdW5kCi0gKiBpdCByZXR1cm4gdGhlIG5vZGUgbGlzdCBwb2ludGVyCi0gKiBlbHNlIHJldHVybiBOVUxMLgorICogU2VhcmNoIG5vZGUgbGlzdHMgZm9yIGEgcmVtb3RlIHBvcnQgbWF0Y2hpbmcgZmlsdGVyIGNyaXRlcmlhCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB3aGVuIHRoZSBjYWxsZXIgZG9lcyBOT1QgaGF2ZSBob3N0X2xvY2suCiAgKi8KIHN0cnVjdCBscGZjX25vZGVsaXN0ICoKLWxwZmNfZmluZG5vZGVfd3dwbihzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCB1aW50MzJfdCBvcmRlciwKLQkJICAgc3RydWN0IGxwZmNfbmFtZSAqIHd3cG4pCitscGZjX2ZpbmRfbm9kZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIG5vZGVfZmlsdGVyIGZpbHRlciwgdm9pZCAqcGFyYW0pCiB7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIGxpc3RzW109eyZwaGJhLT5mY19ubHB1bm1hcF9saXN0LAotCQkJCSAgICAmcGhiYS0+ZmNfbmxwbWFwX2xpc3QsCi0JCQkJICAgICZwaGJhLT5mY19ucHJfbGlzdCwKLQkJCQkgICAgJnBoYmEtPmZjX3Bsb2dpX2xpc3QsCi0JCQkJICAgICZwaGJhLT5mY19hZGlzY19saXN0LAotCQkJCSAgICAmcGhiYS0+ZmNfcmVnbG9naW5fbGlzdCwKLQkJCQkgICAgJnBoYmEtPmZjX3BybGlfbGlzdH07Ci0JdWludDMyX3Qgc2VhcmNoW109e05MUF9TRUFSQ0hfVU5NQVBQRUQsCi0JCQkgICBOTFBfU0VBUkNIX01BUFBFRCwKLQkJCSAgIE5MUF9TRUFSQ0hfTlBSLAotCQkJICAgTkxQX1NFQVJDSF9QTE9HSSwKLQkJCSAgIE5MUF9TRUFSQ0hfQURJU0MsCi0JCQkgICBOTFBfU0VBUkNIX1JFR0xPR0lOLAotCQkJICAgTkxQX1NFQVJDSF9QUkxJfTsKLQlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsaXN0cyk7IGkrKyApIHsKLQkJaWYgKCEob3JkZXIgJiBzZWFyY2hbaV0pKQotCQkJY29udGludWU7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkobmRscCwgbGlzdHNbaV0sIG5scF9saXN0cCkgewotCQkJaWYgKG1lbWNtcCgmbmRscC0+bmxwX3BvcnRuYW1lLCB3d3BuLAotCQkJCSAgIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSkgPT0gMCkgewotCQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJCXJldHVybiBuZGxwOwotCQkJfQotCQl9Ci0JfQorCW5kbHAgPSBfX2xwZmNfZmluZF9ub2RlKHBoYmEsIGZpbHRlciwgcGFyYW0pOworCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCXJldHVybiBuZGxwOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGxvb2tzIHVwIHRoZSBuZGxwIGxpc3RzIGZvciB0aGUgZ2l2ZW4gUlBJLiBJZiBycGkgZm91bmQgaXQKKyAqIHJldHVybnMgdGhlIG5vZGUgbGlzdCBwb2ludGVyIGVsc2UgcmV0dXJuIE5VTEwuCisgKi8KK3N0cnVjdCBscGZjX25vZGVsaXN0ICoKK19fbHBmY19maW5kbm9kZV9ycGkoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCBycGkpCit7CisJcmV0dXJuIF9fbHBmY19maW5kX25vZGUocGhiYSwgbHBmY19maWx0ZXJfYnlfcnBpLCAmcnBpKTsKK30KKworc3RydWN0IGxwZmNfbm9kZWxpc3QgKgorbHBmY19maW5kbm9kZV9ycGkoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgdWludDE2X3QgcnBpKQoreworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCisJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCW5kbHAgPSBfX2xwZmNfZmluZG5vZGVfcnBpKHBoYmEsIHJwaSk7CisJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJcmV0dXJuIG5kbHA7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgbG9va3MgdXAgdGhlIG5kbHAgbGlzdHMgZm9yIHRoZSBnaXZlbiBXV1BOLiBJZiBXV1BOIGZvdW5kIGl0CisgKiByZXR1cm5zIHRoZSBub2RlIGxpc3QgcG9pbnRlciBlbHNlIHJldHVybiBOVUxMLgorICovCitzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqCitscGZjX2ZpbmRub2RlX3d3cG4oc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19uYW1lICp3d3BuKQoreworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCisJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCW5kbHAgPSBfX2xwZmNfZmluZF9ub2RlKHBoYmEsIGxwZmNfZmlsdGVyX2J5X3d3cG4sIHd3cG4pOwogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCXJldHVybiBOVUxMOwogfQogCiB2b2lkCi1scGZjX25scF9pbml0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwKLQkJIHVpbnQzMl90IGRpZCkKK2xwZmNfbmxwX2luaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwgdWludDMyX3QgZGlkKQogewogCW1lbXNldChuZGxwLCAwLCBzaXplb2YgKHN0cnVjdCBscGZjX25vZGVsaXN0KSk7CiAJSU5JVF9MSVNUX0hFQUQoJm5kbHAtPmVsc19yZXRyeV9ldnQuZXZ0X2xpc3RwKTsKQEAgLTI0MjMsNSArMjM2MiwzMCBAQAogCW5kbHAtPm5scF9ESUQgPSBkaWQ7CiAJbmRscC0+bmxwX3BoYmEgPSBwaGJhOwogCW5kbHAtPm5scF9zaWQgPSBOTFBfTk9fU0lEOworCUlOSVRfTElTVF9IRUFEKCZuZGxwLT5ubHBfbGlzdHApOworCWtyZWZfaW5pdCgmbmRscC0+a3JlZik7CiAJcmV0dXJuOwogfQorCit2b2lkCitscGZjX25scF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBscGZjX25vZGVsaXN0LAorCQkJCQkJICBrcmVmKTsKKwlscGZjX25scF9yZW1vdmUobmRscC0+bmxwX3BoYmEsIG5kbHApOworCW1lbXBvb2xfZnJlZShuZGxwLCBuZGxwLT5ubHBfcGhiYS0+bmxwX21lbV9wb29sKTsKK30KKworc3RydWN0IGxwZmNfbm9kZWxpc3QgKgorbHBmY19ubHBfZ2V0KHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQoreworCWlmIChuZGxwKQorCQlrcmVmX2dldCgmbmRscC0+a3JlZik7CisJcmV0dXJuIG5kbHA7Cit9CisKK2ludAorbHBmY19ubHBfcHV0KHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQoreworCXJldHVybiBuZGxwID8ga3JlZl9wdXQoJm5kbHAtPmtyZWYsIGxwZmNfbmxwX3JlbGVhc2UpIDogMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAppbmRleCBmNzljYjYxLi4yNjIzYTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0xMDc4LDYgKzEwNzgsOCBAQAogLyogU3RhcnQgRmlyZUZseSBSZWdpc3RlciBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VNVUxFWCAgICAgICAgMHgxMGRmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRklSRUZMWSAgICAgICAweDFhZTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TQVRfU01CICAgICAgIDB4ZjAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NBVF9NSUQgICAgICAgMHhmMDE1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkZMWSAgICAgICAgICAweGYwOTUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QRkxZICAgICAgICAgIDB4ZjA5OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xQMTAxICAgICAgICAgMHhmMGExCkBAIC0xMDg5LDYgKzEwOTEsOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FUFRVTkUgICAgICAgMHhmMGY1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVQVFVORV9TQ1NQICAweGYwZjYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVBUVU5FX0RDU1AgIDB4ZjBmNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NBVCAgICAgICAgICAgMHhmMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0FUX1NDU1AgICAgICAweGYxMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TQVRfRENTUCAgICAgIDB4ZjExMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVUEVSRkxZICAgICAgMHhmNzAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRFJBR09ORkxZICAgICAweGY4MDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DRU5UQVVSICAgICAgIDB4ZjkwMApAQCAtMTA5OCw2ICsxMTAzLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MUDEwMDAwUyAgICAgIDB4ZmMwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xQMTEwMDBTICAgICAgMHhmYzEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFBFMTEwMDBTICAgICAweGZjMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TQVRfUyAgICAgICAgIDB4ZmM0MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hFTElPUyAgICAgICAgMHhmZDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSEVMSU9TX1NDU1AgICAweGZkMTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IRUxJT1NfRENTUCAgIDB4ZmQxMgpAQCAtMTExOCw2ICsxMTI0LDcgQEAKICNkZWZpbmUgSEVMSU9TX0pFREVDX0lEICAgICAgICAgICAgIDB4MDM2NAogI2RlZmluZSBaRVBIWVJfSkVERUNfSUQgICAgICAgICAgICAgMHgwNTc3CiAjZGVmaW5lIFZJUEVSX0pFREVDX0lEICAgICAgICAgICAgICAweDQ4MzgKKyNkZWZpbmUgU0FUVVJOX0pFREVDX0lEICAgICAgICAgICAgIDB4MTAwNAogCiAjZGVmaW5lIEpFREVDX0lEX01BU0sgICAgICAgICAgICAgICAweDBGRkZGMDAwCiAjZGVmaW5lIEpFREVDX0lEX1NISUZUICAgICAgICAgICAgICAxMgpAQCAtMTU2NSw3ICsxNTcyLDcgQEAKICNkZWZpbmUgTElOS19TUEVFRF8xRyAgIDEgICAgICAgLyogMSBHaWdhYmF1ZCAqLwogI2RlZmluZSBMSU5LX1NQRUVEXzJHICAgMiAgICAgICAvKiAyIEdpZ2FiYXVkICovCiAjZGVmaW5lIExJTktfU1BFRURfNEcgICA0ICAgICAgIC8qIDQgR2lnYWJhdWQgKi8KLSNkZWZpbmUgTElOS19TUEVFRF84RyAgIDggICAgICAgLyogNCBHaWdhYmF1ZCAqLworI2RlZmluZSBMSU5LX1NQRUVEXzhHICAgOCAgICAgICAvKiA4IEdpZ2FiYXVkICovCiAjZGVmaW5lIExJTktfU1BFRURfMTBHICAgMTYgICAgICAvKiAxMCBHaWdhYmF1ZCAqLwogCiB9IElOSVRfTElOS19WQVI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCmluZGV4IGRjZjYxMDYuLmRjYjRiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IENocmlzdG9waCBIZWxsd2lnICAgICAgICAgICAgICAqCkBAIC0zODYsMTIgKzM4NiwxMiBAQAogCSAqIFNldHVwIHRoZSByaW5nIDAgKGVscykgIHRpbWVvdXQgaGFuZGxlcgogCSAqLwogCXRpbWVvdXQgPSBwaGJhLT5mY19yYXRvdiA8PCAxOwotCXBoYmEtPmVsc190bW9mdW5jLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogKiB0aW1lb3V0OwotCWFkZF90aW1lcigmcGhiYS0+ZWxzX3Rtb2Z1bmMpOworCW1vZF90aW1lcigmcGhiYS0+ZWxzX3Rtb2Z1bmMsIGppZmZpZXMgKyBIWiAqIHRpbWVvdXQpOwogCiAJbHBmY19pbml0X2xpbmsocGhiYSwgcG1iLCBwaGJhLT5jZmdfdG9wb2xvZ3ksIHBoYmEtPmNmZ19saW5rX3NwZWVkKTsKIAlwbWItPm1ib3hfY21wbCA9IGxwZmNfc2xpX2RlZl9tYm94X2NtcGw7CiAJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX05PV0FJVCk7CisJbHBmY19zZXRfbG9vcGJhY2tfZmxhZyhwaGJhKTsKIAlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsCiAJCQkJS0VSTl9FUlIsCkBAIC00MTgsMzMgKzQxOCw2IEBACiAJcmV0dXJuICgwKTsKIH0KIAotc3RhdGljIGludAotbHBmY19kaXNjb3Zlcnlfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCi17Ci0JaW50IGkgPSAwOwotCi0Jd2hpbGUgKChwaGJhLT5oYmFfc3RhdGUgIT0gTFBGQ19IQkFfUkVBRFkpIHx8Ci0JICAgICAgIChwaGJhLT5udW1fZGlzY19ub2RlcykgfHwgKHBoYmEtPmZjX3BybGlfc2VudCkgfHwKLQkgICAgICAgKChwaGJhLT5mY19tYXBfY250ID09IDApICYmIChpPDIpKSB8fAotCSAgICAgICAocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19TTElfTUJPWF9BQ1RJVkUpKSB7Ci0JCS8qIENoZWNrIGV2ZXJ5IHNlY29uZCBmb3IgMzAgcmV0cmllcy4gKi8KLQkJaSsrOwotCQlpZiAoaSA+IDMwKSB7Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQotCQlpZiAoKGkgPj0gMTUpICYmIChwaGJhLT5oYmFfc3RhdGUgPD0gTFBGQ19MSU5LX0RPV04pKSB7Ci0JCQkvKiBUaGUgbGluayBpcyBkb3duLiAgU2V0IGxpbmtkb3duIHRpbWVvdXQgKi8KLQkJCXJldHVybiAtRVRJTUVET1VUOwotCQl9Ci0KLQkJLyogRGVsYXkgZm9yIDEgc2Vjb25kIHRvIGdpdmUgZGlzY292ZXJ5IHRpbWUgdG8gY29tcGxldGUuICovCi0JCW1zbGVlcCgxMDAwKTsKLQotCX0KLQotCXJldHVybiAwOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIGxwZmNfaGJhX2Rvd25fcHJlcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01NTAsMTIgKzUyMywxNSBAQAogCQkgKiBUaGVyZSB3YXMgYSBmaXJtd2FyZSBlcnJvci4gIFRha2UgdGhlIGhiYSBvZmZsaW5lIGFuZCB0aGVuCiAJCSAqIGF0dGVtcHQgdG8gcmVzdGFydCBpdC4KIAkJICovCisJCWxwZmNfb2ZmbGluZV9wcmVwKHBoYmEpOwogCQlscGZjX29mZmxpbmUocGhiYSk7CiAJCWxwZmNfc2xpX2JyZHJlc3RhcnQocGhiYSk7CiAJCWlmIChscGZjX29ubGluZShwaGJhKSA9PSAwKSB7CS8qIEluaXRpYWxpemUgdGhlIEhCQSAqLwogCQkJbW9kX3RpbWVyKCZwaGJhLT5mY19lc3RhYnRtbywgamlmZmllcyArIEhaICogNjApOworCQkJbHBmY191bmJsb2NrX21nbXRfaW8ocGhiYSk7CiAJCQlyZXR1cm47CiAJCX0KKwkJbHBmY191bmJsb2NrX21nbXRfaW8ocGhiYSk7CiAJfSBlbHNlIHsKIAkJLyogVGhlIGlmIGNsYXVzZSBhYm92ZSBmb3JjZXMgdGhpcyBjb2RlIHBhdGggd2hlbiB0aGUgc3RhdHVzCiAJCSAqIGZhaWx1cmUgaXMgYSB2YWx1ZSBvdGhlciB0aGFuIEZGRVI2LiAgRG8gbm90IGNhbGwgdGhlIG9mZmxpbmUKQEAgLTU3Myw3ICs1NDksOSBAQAogCQkJCVNDU0lfTkxfVklEX1RZUEVfUENJIHwgUENJX1ZFTkRPUl9JRF9FTVVMRVgpOwogCiAJCXBzbGktPnNsaV9mbGFnICY9IH5MUEZDX1NMSTJfQUNUSVZFOworCQlscGZjX29mZmxpbmVfcHJlcChwaGJhKTsKIAkJbHBmY19vZmZsaW5lKHBoYmEpOworCQlscGZjX3VuYmxvY2tfbWdtdF9pbyhwaGJhKTsKIAkJcGhiYS0+aGJhX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CiAJCWxwZmNfaGJhX2Rvd25fcG9zdChwaGJhKTsKIAl9CkBAIC02MzMsNyArNjExLDcgQEAKIGxwZmNfaGFuZGxlX2xhdHRfZnJlZV9tcDoKIAlrZnJlZShtcCk7CiBscGZjX2hhbmRsZV9sYXR0X2ZyZWVfcG1iOgotCWtmcmVlKHBtYik7CisJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiBscGZjX2hhbmRsZV9sYXR0X2Vycl9leGl0OgogCS8qIEVuYWJsZSBMaW5rIGF0dGVudGlvbiBpbnRlcnJ1cHRzICovCiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtOTI1LDYgKzkwMywyNCBAQAogCQltID0gKHR5cGVvZihtKSl7IkxQZTExMDAwLVMiLCBtYXhfc3BlZWQsCiAJCQkiUENJZSJ9OwogCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfU0FUOgorCQltID0gKHR5cGVvZihtKSl7IkxQZTEyMDAwIiwgbWF4X3NwZWVkLCAiUENJZSJ9OworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfU0FUX01JRDoKKwkJbSA9ICh0eXBlb2YobSkpeyJMUGUxMjUwIiwgbWF4X3NwZWVkLCAiUENJZSJ9OworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfU0FUX1NNQjoKKwkJbSA9ICh0eXBlb2YobSkpeyJMUGUxMjEiLCBtYXhfc3BlZWQsICJQQ0llIn07CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9TQVRfRENTUDoKKwkJbSA9ICh0eXBlb2YobSkpeyJMUGUxMjAwMi1TUCIsIG1heF9zcGVlZCwgIlBDSWUifTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1NBVF9TQ1NQOgorCQltID0gKHR5cGVvZihtKSl7IkxQZTEyMDAwLVNQIiwgbWF4X3NwZWVkLCAiUENJZSJ9OworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfU0FUX1M6CisJCW0gPSAodHlwZW9mKG0pKXsiTFBlMTIwMDAtUyIsIG1heF9zcGVlZCwgIlBDSWUifTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbSA9ICh0eXBlb2YobSkpeyBOVUxMIH07CiAJCWJyZWFrOwpAQCAtMTE3NCw2OSArMTE3MCwxNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbHBmY19jbGVhbnVwKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHVpbnQzMl90IHNhdmVfYmluZCkKK2xwZmNfY2xlYW51cChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQogewogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLCAqbmV4dF9uZGxwOwogCiAJLyogY2xlYW4gdXAgcGhiYSAtIGxwZmMgc3BlY2lmaWMgKi8KIAlscGZjX2Nhbl9kaXNjdG1vKHBoYmEpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZwaGJhLT5mY19ubHB1bm1hcF9saXN0LAotCQkJCW5scF9saXN0cCkgewotCQlscGZjX25scF9yZW1vdmUocGhiYSwgbmRscCk7Ci0JfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZwaGJhLT5mY19ub2RlcywgbmxwX2xpc3RwKQorCQlscGZjX25scF9wdXQobmRscCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfbmxwbWFwX2xpc3QsCi0JCQkJIG5scF9saXN0cCkgewotCQlscGZjX25scF9yZW1vdmUocGhiYSwgbmRscCk7Ci0JfQorCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mY19ub2Rlcyk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfdW51c2VkX2xpc3QsCi0JCQkJbmxwX2xpc3RwKSB7Ci0JCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZwaGJhLT5mY19wbG9naV9saXN0LAotCQkJCW5scF9saXN0cCkgewotCQlscGZjX25scF9yZW1vdmUocGhiYSwgbmRscCk7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnBoYmEtPmZjX2FkaXNjX2xpc3QsCi0JCQkJbmxwX2xpc3RwKSB7Ci0JCWxwZmNfbmxwX3JlbW92ZShwaGJhLCBuZGxwKTsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfcmVnbG9naW5fbGlzdCwKLQkJCQlubHBfbGlzdHApIHsKLQkJbHBmY19ubHBfcmVtb3ZlKHBoYmEsIG5kbHApOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZwaGJhLT5mY19wcmxpX2xpc3QsCi0JCQkJbmxwX2xpc3RwKSB7Ci0JCWxwZmNfbmxwX3JlbW92ZShwaGJhLCBuZGxwKTsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfbnByX2xpc3QsCi0JCQkJbmxwX2xpc3RwKSB7Ci0JCWxwZmNfbmxwX3JlbW92ZShwaGJhLCBuZGxwKTsKLQl9Ci0KLQlJTklUX0xJU1RfSEVBRCgmcGhiYS0+ZmNfbmxwbWFwX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mY19ubHB1bm1hcF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcGhiYS0+ZmNfdW51c2VkX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mY19wbG9naV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcGhiYS0+ZmNfYWRpc2NfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnBoYmEtPmZjX3JlZ2xvZ2luX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mY19wcmxpX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mY19ucHJfbGlzdCk7Ci0KLQlwaGJhLT5mY19tYXBfY250ICAgPSAwOwotCXBoYmEtPmZjX3VubWFwX2NudCA9IDA7Ci0JcGhiYS0+ZmNfcGxvZ2lfY250ID0gMDsKLQlwaGJhLT5mY19hZGlzY19jbnQgPSAwOwotCXBoYmEtPmZjX3JlZ2xvZ2luX2NudCA9IDA7Ci0JcGhiYS0+ZmNfcHJsaV9jbnQgID0gMDsKLQlwaGJhLT5mY19ucHJfY250ICAgPSAwOwotCXBoYmEtPmZjX3VudXNlZF9jbnQ9IDA7CiAJcmV0dXJuOwogfQogCkBAIC0xMjYyLDIxICsxMjA2LDYgQEAKIHsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOwogCi0JLyogSW5zdGVhZCBvZiBhIHRpbWVyLCB0aGlzIGhhcyBiZWVuIGNvbnZlcnRlZCB0byBhCi0JICogZGVmZXJyZWQgcHJvY2VkZGluZyBsaXN0LgotCSAqLwotCXdoaWxlICghbGlzdF9lbXB0eSgmcGhiYS0+ZnJlZWJ1Zkxpc3QpKSB7Ci0KLQkJc3RydWN0IGxwZmNfZG1hYnVmICptcCA9IE5VTEw7Ci0KLQkJbGlzdF9yZW1vdmVfaGVhZCgoJnBoYmEtPmZyZWVidWZMaXN0KSwgbXAsCi0JCQkJIHN0cnVjdCBscGZjX2RtYWJ1ZiwgbGlzdCk7Ci0JCWlmIChtcCkgewotCQkJbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKLQkJCWtmcmVlKG1wKTsKLQkJfQotCX0KLQogCWRlbF90aW1lcl9zeW5jKCZwaGJhLT5mY3BfcG9sbF90aW1lcik7CiAJZGVsX3RpbWVyX3N5bmMoJnBoYmEtPmZjX2VzdGFidG1vKTsKIAlkZWxfdGltZXJfc3luYygmcGhiYS0+ZmNfZGlzY3Rtbyk7CkBAIC0xMzAyLDYwICsxMjMxLDc2IEBACiAJCSAgICAgICAiJWQ6MDQ1OCBCcmluZyBBZGFwdGVyIG9ubGluZVxuIiwKIAkJICAgICAgIHBoYmEtPmJyZF9ubyk7CiAKLQlpZiAoIWxwZmNfc2xpX3F1ZXVlX3NldHVwKHBoYmEpKQotCQlyZXR1cm4gMTsKKwlscGZjX2Jsb2NrX21nbXRfaW8ocGhiYSk7CiAKLQlpZiAobHBmY19zbGlfaGJhX3NldHVwKHBoYmEpKQkvKiBJbml0aWFsaXplIHRoZSBIQkEgKi8KKwlpZiAoIWxwZmNfc2xpX3F1ZXVlX3NldHVwKHBoYmEpKSB7CisJCWxwZmNfdW5ibG9ja19tZ210X2lvKHBoYmEpOwogCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAobHBmY19zbGlfaGJhX3NldHVwKHBoYmEpKSB7CS8qIEluaXRpYWxpemUgdGhlIEhCQSAqLworCQlscGZjX3VuYmxvY2tfbWdtdF9pbyhwaGJhKTsKKwkJcmV0dXJuIDE7CisJfQogCiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX09GRkxJTkVfTU9ERTsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAorCWxwZmNfdW5ibG9ja19tZ210X2lvKHBoYmEpOwogCXJldHVybiAwOwogfQogCi1pbnQKLWxwZmNfb2ZmbGluZShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQordm9pZAorbHBmY19ibG9ja19tZ210X2lvKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7Ci0Jc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nOwotCXN0cnVjdCBscGZjX3NsaSAqcHNsaTsKIAl1bnNpZ25lZCBsb25nIGlmbGFnOwotCWludCBpOwotCWludCBjbnQgPSAwOwogCi0JaWYgKCFwaGJhKQotCQlyZXR1cm4gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGlmbGFnKTsKKwlwaGJhLT5mY19mbGFnIHw9IEZDX0JMT0NLX01HTVRfSU87CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGlmbGFnKTsKK30KKwordm9pZAorbHBmY191bmJsb2NrX21nbXRfaW8oc3RydWN0IGxwZmNfaGJhICogcGhiYSkKK3sKKwl1bnNpZ25lZCBsb25nIGlmbGFnOworCisJc3Bpbl9sb2NrX2lycXNhdmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBpZmxhZyk7CisJcGhiYS0+ZmNfZmxhZyAmPSB+RkNfQkxPQ0tfTUdNVF9JTzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgaWZsYWcpOworfQorCit2b2lkCitscGZjX29mZmxpbmVfcHJlcChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQoreworCXN0cnVjdCBscGZjX25vZGVsaXN0ICAqbmRscCwgKm5leHRfbmRscDsKIAogCWlmIChwaGJhLT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCi0JcHNsaSA9ICZwaGJhLT5zbGk7CisJbHBmY19ibG9ja19tZ210X2lvKHBoYmEpOwogCiAJbHBmY19saW5rZG93bihwaGJhKTsKKworCS8qIElzc3VlIGFuIHVucmVnX2xvZ2luIHRvIGFsbCBub2RlcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsICZwaGJhLT5mY19ub2RlcywgbmxwX2xpc3RwKQorCQlpZiAobmRscC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfVU5VU0VEX05PREUpCisJCQlscGZjX3VucmVnX3JwaShwaGJhLCBuZGxwKTsKKwogCWxwZmNfc2xpX2ZsdXNoX21ib3hfcXVldWUocGhiYSk7Cit9CiAKLQlmb3IgKGkgPSAwOyBpIDwgcHNsaS0+bnVtX3JpbmdzOyBpKyspIHsKLQkJcHJpbmcgPSAmcHNsaS0+cmluZ1tpXTsKLQkJLyogVGhlIGxpbmtkb3duIGV2ZW50IHRha2VzIDMwIHNlY29uZHMgdG8gdGltZW91dC4gKi8KLQkJd2hpbGUgKHByaW5nLT50eGNtcGxxX2NudCkgewotCQkJbWRlbGF5KDEwKTsKLQkJCWlmIChjbnQrKyA+IDMwMDApIHsKLQkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwKLQkJCQkJS0VSTl9XQVJOSU5HLCBMT0dfSU5JVCwKLQkJCQkJIiVkOjA0NjYgT3V0c3RhbmRpbmcgSU8gd2hlbiAiCi0JCQkJCSJicmluZ2luZyBBZGFwdGVyIG9mZmxpbmVcbiIsCi0JCQkJCXBoYmEtPmJyZF9ubyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Cit2b2lkCitscGZjX29mZmxpbmUoc3RydWN0IGxwZmNfaGJhICogcGhiYSkKK3sKKwl1bnNpZ25lZCBsb25nIGlmbGFnOwogCisJaWYgKHBoYmEtPmZjX2ZsYWcgJiBGQ19PRkZMSU5FX01PREUpCisJCXJldHVybjsKIAogCS8qIHN0b3AgYWxsIHRpbWVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBoYmEgKi8KIAlscGZjX3N0b3BfdGltZXIocGhiYSk7Ci0JcGhiYS0+d29ya19oYmFfZXZlbnRzID0gMDsKLQlwaGJhLT53b3JrX2hhID0gMDsKIAogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAogCQkgICAgICAgS0VSTl9XQVJOSU5HLApAQCAtMTM2NiwxMSArMTMxMSwxMiBAQAogCS8qIEJyaW5nIGRvd24gdGhlIFNMSSBMYXllciBhbmQgY2xlYW51cC4gIFRoZSBIQkEgaXMgb2ZmbGluZQogCSAgIG5vdy4gICovCiAJbHBmY19zbGlfaGJhX2Rvd24ocGhiYSk7Ci0JbHBmY19jbGVhbnVwKHBoYmEsIDEpOworCWxwZmNfY2xlYW51cChwaGJhKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGlmbGFnKTsKKwlwaGJhLT53b3JrX2hiYV9ldmVudHMgPSAwOworCXBoYmEtPndvcmtfaGEgPSAwOwogCXBoYmEtPmZjX2ZsYWcgfD0gRkNfT0ZGTElORV9NT0RFOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBpZmxhZyk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE0MDcsNiArMTM1MywxNTYgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBscGZjX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXVuc2lnbmVkIGxvbmcgaWZsYWc7CisKKwlscGZjX2ZyZWVfc3lzZnNfYXR0cihwaGJhKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgaWZsYWcpOworCXBoYmEtPmZjX2ZsYWcgfD0gRkNfVU5MT0FESU5HOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGlmbGFnKTsKKworCWZjX3JlbW92ZV9ob3N0KHBoYmEtPmhvc3QpOworCXNjc2lfcmVtb3ZlX2hvc3QocGhiYS0+aG9zdCk7CisKKwlrdGhyZWFkX3N0b3AocGhiYS0+d29ya2VyX3RocmVhZCk7CisKKwkvKgorCSAqIEJyaW5nIGRvd24gdGhlIFNMSSBMYXllci4gVGhpcyBzdGVwIGRpc2FibGUgYWxsIGludGVycnVwdHMsCisJICogY2xlYXJzIHRoZSByaW5ncywgZGlzY2FyZHMgYWxsIG1haWxib3ggY29tbWFuZHMsIGFuZCByZXNldHMKKwkgKiB0aGUgSEJBLgorCSAqLworCWxwZmNfc2xpX2hiYV9kb3duKHBoYmEpOworCWxwZmNfc2xpX2JyZHJlc3RhcnQocGhiYSk7CisKKwkvKiBSZWxlYXNlIHRoZSBpcnEgcmVzZXJ2YXRpb24gKi8KKwlmcmVlX2lycShwaGJhLT5wY2lkZXYtPmlycSwgcGhiYSk7CisJcGNpX2Rpc2FibGVfbXNpKHBoYmEtPnBjaWRldik7CisKKwlscGZjX2NsZWFudXAocGhiYSk7CisJbHBmY19zdG9wX3RpbWVyKHBoYmEpOworCXBoYmEtPndvcmtfaGJhX2V2ZW50cyA9IDA7CisKKwkvKgorCSAqIENhbGwgc2NzaV9mcmVlIGJlZm9yZSBtZW1fZnJlZSBzaW5jZSBzY3NpIGJ1ZnMgYXJlIHJlbGVhc2VkIHRvIHRoZWlyCisJICogY29ycmVzcG9uZGluZyBwb29scyBoZXJlLgorCSAqLworCWxwZmNfc2NzaV9mcmVlKHBoYmEpOworCWxwZmNfbWVtX2ZyZWUocGhiYSk7CisKKwkvKiBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggU0xJMiBpbnRlcmZhY2UgKi8KKwlkbWFfZnJlZV9jb2hlcmVudCgmcGhiYS0+cGNpZGV2LT5kZXYsIFNMSTJfU0xJTV9TSVpFLAorCQkJICBwaGJhLT5zbGltMnAsIHBoYmEtPnNsaW0ycF9tYXBwaW5nKTsKKworCS8qIHVubWFwIGFkYXB0ZXIgU0xJTSBhbmQgQ29udHJvbCBSZWdpc3RlcnMgKi8KKwlpb3VubWFwKHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCk7CisJaW91bm1hcChwaGJhLT5zbGltX21lbW1hcF9wKTsKKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGhiYS0+cGNpZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGhiYS0+cGNpZGV2KTsKKworCWlkcl9yZW1vdmUoJmxwZmNfaGJhX2luZGV4LCBwaGJhLT5icmRfbm8pOworCXNjc2lfaG9zdF9wdXQocGhiYS0+aG9zdCk7Cit9CisKK3ZvaWQgbHBmY19zY2FuX3N0YXJ0KHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCit7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGE7CisKKwlpZiAobHBmY19hbGxvY19zeXNmc19hdHRyKHBoYmEpKQorCQlnb3RvIGVycm9yOworCisJcGhiYS0+TUJzbGltYWRkciA9IHBoYmEtPnNsaW1fbWVtbWFwX3A7CisJcGhiYS0+SEFyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgSEFfUkVHX09GRlNFVDsKKwlwaGJhLT5DQXJlZ2FkZHIgPSBwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3AgKyBDQV9SRUdfT0ZGU0VUOworCXBoYmEtPkhTcmVnYWRkciA9IHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCArIEhTX1JFR19PRkZTRVQ7CisJcGhiYS0+SENyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgSENfUkVHX09GRlNFVDsKKworCWlmIChscGZjX3NsaV9oYmFfc2V0dXAocGhiYSkpCisJCWdvdG8gZXJyb3I7CisKKwkvKgorCSAqIGhiYSBzZXR1cCBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBoYmFfcXVldWVfZGVwdGggc28gd2UgbmVlZCB0byBhZGp1c3QKKwkgKiB0aGUgdmFsdWUgb2YgY2FuX3F1ZXVlLgorCSAqLworCWhvc3QtPmNhbl9xdWV1ZSA9IHBoYmEtPmNmZ19oYmFfcXVldWVfZGVwdGggLSAxMDsKKwlyZXR1cm47CisKK2Vycm9yOgorCWxwZmNfcmVtb3ZlX2RldmljZShwaGJhKTsKK30KKworaW50IGxwZmNfc2Nhbl9maW5pc2hlZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdW5zaWduZWQgbG9uZyB0aW1lKQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilzaG9zdC0+aG9zdGRhdGE7CisKKwlpZiAoIXBoYmEtPmhvc3QpCisJCXJldHVybiAxOworCWlmICh0aW1lID49IDMwICogSFopCisJCWdvdG8gZmluaXNoZWQ7CisKKwlpZiAocGhiYS0+aGJhX3N0YXRlICE9IExQRkNfSEJBX1JFQURZKQorCQlyZXR1cm4gMDsKKwlpZiAocGhiYS0+bnVtX2Rpc2Nfbm9kZXMgfHwgcGhiYS0+ZmNfcHJsaV9zZW50KQorCQlyZXR1cm4gMDsKKwlpZiAoKHBoYmEtPmZjX21hcF9jbnQgPT0gMCkgJiYgKHRpbWUgPCAyICogSFopKQorCQlyZXR1cm4gMDsKKwlpZiAocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19TTElfTUJPWF9BQ1RJVkUpCisJCXJldHVybiAwOworCWlmICgocGhiYS0+aGJhX3N0YXRlID4gTFBGQ19MSU5LX0RPV04pIHx8ICh0aW1lIDwgMTUgKiBIWikpCisJCXJldHVybiAwOworCitmaW5pc2hlZDoKKwlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgeworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlscGZjX3BvbGxfc3RhcnRfdGltZXIocGhiYSk7CisJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwl9CisKKwkvKgorCSAqIHNldCBmaXhlZCBob3N0IGF0dHJpYnV0ZXMKKwkgKiBNdXN0IGRvbmUgYWZ0ZXIgbHBmY19zbGlfaGJhX3NldHVwKCkKKwkgKi8KKworCWZjX2hvc3Rfbm9kZV9uYW1lKHNob3N0KSA9IHd3bl90b191NjQocGhiYS0+ZmNfbm9kZW5hbWUudS53d24pOworCWZjX2hvc3RfcG9ydF9uYW1lKHNob3N0KSA9IHd3bl90b191NjQocGhiYS0+ZmNfcG9ydG5hbWUudS53d24pOworCWZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMoc2hvc3QpID0gRkNfQ09TX0NMQVNTMzsKKworCW1lbXNldChmY19ob3N0X3N1cHBvcnRlZF9mYzRzKHNob3N0KSwgMCwKKwkJc2l6ZW9mKGZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoc2hvc3QpKSk7CisJZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhzaG9zdClbMl0gPSAxOworCWZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoc2hvc3QpWzddID0gMTsKKworCWxwZmNfZ2V0X2hiYV9zeW1fbm9kZV9uYW1lKHBoYmEsIGZjX2hvc3Rfc3ltYm9saWNfbmFtZShzaG9zdCkpOworCisJZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKHNob3N0KSA9IDA7CisJaWYgKHBoYmEtPmxtdCAmIExNVF8xMEdiKQorCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoc2hvc3QpIHw9IEZDX1BPUlRTUEVFRF8xMEdCSVQ7CisJaWYgKHBoYmEtPmxtdCAmIExNVF80R2IpCisJCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyhzaG9zdCkgfD0gRkNfUE9SVFNQRUVEXzRHQklUOworCWlmIChwaGJhLT5sbXQgJiBMTVRfMkdiKQorCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoc2hvc3QpIHw9IEZDX1BPUlRTUEVFRF8yR0JJVDsKKwlpZiAocGhiYS0+bG10ICYgTE1UXzFHYikKKwkJZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKHNob3N0KSB8PSBGQ19QT1JUU1BFRURfMUdCSVQ7CisKKwlmY19ob3N0X21heGZyYW1lX3NpemUoc2hvc3QpID0KKwkJKCgoKHVpbnQzMl90KSBwaGJhLT5mY19zcGFyYW0uY21uLmJiUmN2U2l6ZU1zYiAmIDB4MEYpIDw8IDgpIHwKKwkJICh1aW50MzJfdCkgcGhiYS0+ZmNfc3BhcmFtLmNtbi5iYlJjdlNpemVMc2IpOworCisJLyogVGhpcyB2YWx1ZSBpcyBhbHNvIHVuY2hhbmdpbmcgKi8KKwltZW1zZXQoZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdCksIDAsCisJCXNpemVvZihmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KSkpOworCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzJdID0gMTsKKwlmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KVs3XSA9IDE7CisKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX0xPQURJTkc7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCisJcmV0dXJuIDE7Cit9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBscGZjX3BjaV9wcm9iZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwaWQpCkBAIC0xNDQ1LDkgKzE1NDEsNiBAQAogCQlnb3RvIG91dF9wdXRfaG9zdDsKIAogCWhvc3QtPnVuaXF1ZV9pZCA9IHBoYmEtPmJyZF9ubzsKLQlJTklUX0xJU1RfSEVBRCgmcGhiYS0+Y3Ryc3BidWZsaXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcGhiYS0+cm5pZHJzcGJ1Zmxpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mcmVlYnVmTGlzdCk7CiAKIAkvKiBJbml0aWFsaXplIHRpbWVycyB1c2VkIGJ5IGRyaXZlciAqLwogCWluaXRfdGltZXIoJnBoYmEtPmZjX2VzdGFidG1vKTsKQEAgLTE0ODIsMTYgKzE1NzUsNyBAQAogCWhvc3QtPm1heF9sdW4gPSBwaGJhLT5jZmdfbWF4X2x1bnM7CiAJaG9zdC0+dGhpc19pZCA9IC0xOwogCi0JLyogSW5pdGlhbGl6ZSBhbGwgaW50ZXJuYWxseSBtYW5hZ2VkIGxpc3RzLiAqLwotCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mY19ubHBtYXBfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnBoYmEtPmZjX25scHVubWFwX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mY191bnVzZWRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnBoYmEtPmZjX3Bsb2dpX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mY19hZGlzY19saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcGhiYS0+ZmNfcmVnbG9naW5fbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnBoYmEtPmZjX3BybGlfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnBoYmEtPmZjX25wcl9saXN0KTsKLQorCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5mY19ub2Rlcyk7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAlyZXR2YWwgPSBwY2lfc2V0X213aShwZGV2KTsKQEAgLTE2MDksMTMgKzE2OTMsNiBAQAogCiAJaG9zdC0+dHJhbnNwb3J0dCA9IGxwZmNfdHJhbnNwb3J0X3RlbXBsYXRlOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKLQllcnJvciA9IHNjc2lfYWRkX2hvc3QoaG9zdCwgJnBkZXYtPmRldik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9rdGhyZWFkX3N0b3A7Ci0KLQllcnJvciA9IGxwZmNfYWxsb2Nfc3lzZnNfYXR0cihwaGJhKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JlbW92ZV9ob3N0OwogCiAJaWYgKHBoYmEtPmNmZ191c2VfbXNpKSB7CiAJCWVycm9yID0gcGNpX2VuYWJsZV9tc2kocGhiYS0+cGNpZGV2KTsKQEAgLTE2MzEsNzMgKzE3MDgsMTUgQEAKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKIAkJCSIlZDowNDUxIEVuYWJsZSBpbnRlcnJ1cHQgaGFuZGxlciBmYWlsZWRcbiIsCiAJCQlwaGJhLT5icmRfbm8pOwotCQlnb3RvIG91dF9mcmVlX3N5c2ZzX2F0dHI7CisJCWdvdG8gb3V0X2t0aHJlYWRfc3RvcDsKIAl9Ci0JcGhiYS0+TUJzbGltYWRkciA9IHBoYmEtPnNsaW1fbWVtbWFwX3A7Ci0JcGhiYS0+SEFyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgSEFfUkVHX09GRlNFVDsKLQlwaGJhLT5DQXJlZ2FkZHIgPSBwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3AgKyBDQV9SRUdfT0ZGU0VUOwotCXBoYmEtPkhTcmVnYWRkciA9IHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCArIEhTX1JFR19PRkZTRVQ7Ci0JcGhiYS0+SENyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgSENfUkVHX09GRlNFVDsKIAotCWVycm9yID0gbHBmY19zbGlfaGJhX3NldHVwKHBoYmEpOwotCWlmIChlcnJvcikgewotCQllcnJvciA9IC1FTk9ERVY7CisJZXJyb3IgPSBzY3NpX2FkZF9ob3N0KGhvc3QsICZwZGV2LT5kZXYpOworCWlmIChlcnJvcikKIAkJZ290byBvdXRfZnJlZV9pcnE7Ci0JfQogCi0JLyoKLQkgKiBoYmEgc2V0dXAgbWF5IGhhdmUgY2hhbmdlZCB0aGUgaGJhX3F1ZXVlX2RlcHRoIHNvIHdlIG5lZWQgdG8gYWRqdXN0Ci0JICogdGhlIHZhbHVlIG9mIGNhbl9xdWV1ZS4KLQkgKi8KLQlob3N0LT5jYW5fcXVldWUgPSBwaGJhLT5jZmdfaGJhX3F1ZXVlX2RlcHRoIC0gMTA7CisJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CiAKLQlscGZjX2Rpc2NvdmVyeV93YWl0KHBoYmEpOwotCi0JaWYgKHBoYmEtPmNmZ19wb2xsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpIHsKLQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQlscGZjX3BvbGxfc3RhcnRfdGltZXIocGhiYSk7Ci0JCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCX0KLQotCS8qCi0JICogc2V0IGZpeGVkIGhvc3QgYXR0cmlidXRlcwotCSAqIE11c3QgZG9uZSBhZnRlciBscGZjX3NsaV9oYmFfc2V0dXAoKQotCSAqLwotCi0JZmNfaG9zdF9ub2RlX25hbWUoaG9zdCkgPSB3d25fdG9fdTY0KHBoYmEtPmZjX25vZGVuYW1lLnUud3duKTsKLQlmY19ob3N0X3BvcnRfbmFtZShob3N0KSA9IHd3bl90b191NjQocGhiYS0+ZmNfcG9ydG5hbWUudS53d24pOwotCWZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMoaG9zdCkgPSBGQ19DT1NfQ0xBU1MzOwotCi0JbWVtc2V0KGZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoaG9zdCksIDAsCi0JCXNpemVvZihmY19ob3N0X3N1cHBvcnRlZF9mYzRzKGhvc3QpKSk7Ci0JZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KVsyXSA9IDE7Ci0JZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KVs3XSA9IDE7Ci0KLQlscGZjX2dldF9oYmFfc3ltX25vZGVfbmFtZShwaGJhLCBmY19ob3N0X3N5bWJvbGljX25hbWUoaG9zdCkpOwotCi0JZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKGhvc3QpID0gMDsKLQlpZiAocGhiYS0+bG10ICYgTE1UXzEwR2IpCi0JCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyhob3N0KSB8PSBGQ19QT1JUU1BFRURfMTBHQklUOwotCWlmIChwaGJhLT5sbXQgJiBMTVRfNEdiKQotCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoaG9zdCkgfD0gRkNfUE9SVFNQRUVEXzRHQklUOwotCWlmIChwaGJhLT5sbXQgJiBMTVRfMkdiKQotCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoaG9zdCkgfD0gRkNfUE9SVFNQRUVEXzJHQklUOwotCWlmIChwaGJhLT5sbXQgJiBMTVRfMUdiKQotCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoaG9zdCkgfD0gRkNfUE9SVFNQRUVEXzFHQklUOwotCi0JZmNfaG9zdF9tYXhmcmFtZV9zaXplKGhvc3QpID0KLQkJKCgoKHVpbnQzMl90KSBwaGJhLT5mY19zcGFyYW0uY21uLmJiUmN2U2l6ZU1zYiAmIDB4MEYpIDw8IDgpIHwKLQkJICh1aW50MzJfdCkgcGhiYS0+ZmNfc3BhcmFtLmNtbi5iYlJjdlNpemVMc2IpOwotCi0JLyogVGhpcyB2YWx1ZSBpcyBhbHNvIHVuY2hhbmdpbmcgKi8KLQltZW1zZXQoZmNfaG9zdF9hY3RpdmVfZmM0cyhob3N0KSwgMCwKLQkJc2l6ZW9mKGZjX2hvc3RfYWN0aXZlX2ZjNHMoaG9zdCkpKTsKLQlmY19ob3N0X2FjdGl2ZV9mYzRzKGhvc3QpWzJdID0gMTsKLQlmY19ob3N0X2FjdGl2ZV9mYzRzKGhvc3QpWzddID0gMTsKLQotCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlwaGJhLT5mY19mbGFnICY9IH5GQ19MT0FESU5HOwotCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCXJldHVybiAwOwogCiBvdXRfZnJlZV9pcnE6CkBAIC0xNzA1LDExICsxNzI0LDYgQEAKIAlwaGJhLT53b3JrX2hiYV9ldmVudHMgPSAwOwogCWZyZWVfaXJxKHBoYmEtPnBjaWRldi0+aXJxLCBwaGJhKTsKIAlwY2lfZGlzYWJsZV9tc2kocGhiYS0+cGNpZGV2KTsKLW91dF9mcmVlX3N5c2ZzX2F0dHI6Ci0JbHBmY19mcmVlX3N5c2ZzX2F0dHIocGhiYSk7Ci1vdXRfcmVtb3ZlX2hvc3Q6Ci0JZmNfcmVtb3ZlX2hvc3QocGhiYS0+aG9zdCk7Ci0Jc2NzaV9yZW1vdmVfaG9zdChwaGJhLT5ob3N0KTsKIG91dF9rdGhyZWFkX3N0b3A6CiAJa3RocmVhZF9zdG9wKHBoYmEtPndvcmtlcl90aHJlYWQpOwogb3V0X2ZyZWVfaW9jYnE6CkBAIC0xNzQ3LDU2ICsxNzYxLDggQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGxwZmNfaGJhICAgICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKWhvc3QtPmhvc3RkYXRhOwotCXVuc2lnbmVkIGxvbmcgaWZsYWc7CiAKLQlscGZjX2ZyZWVfc3lzZnNfYXR0cihwaGJhKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgaWZsYWcpOwotCXBoYmEtPmZjX2ZsYWcgfD0gRkNfVU5MT0FESU5HOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGlmbGFnKTsKLQotCWZjX3JlbW92ZV9ob3N0KHBoYmEtPmhvc3QpOwotCXNjc2lfcmVtb3ZlX2hvc3QocGhiYS0+aG9zdCk7Ci0KLQlrdGhyZWFkX3N0b3AocGhiYS0+d29ya2VyX3RocmVhZCk7Ci0KLQkvKgotCSAqIEJyaW5nIGRvd24gdGhlIFNMSSBMYXllci4gVGhpcyBzdGVwIGRpc2FibGUgYWxsIGludGVycnVwdHMsCi0JICogY2xlYXJzIHRoZSByaW5ncywgZGlzY2FyZHMgYWxsIG1haWxib3ggY29tbWFuZHMsIGFuZCByZXNldHMKLQkgKiB0aGUgSEJBLgotCSAqLwotCWxwZmNfc2xpX2hiYV9kb3duKHBoYmEpOwotCWxwZmNfc2xpX2JyZHJlc3RhcnQocGhiYSk7Ci0KLQkvKiBSZWxlYXNlIHRoZSBpcnEgcmVzZXJ2YXRpb24gKi8KLQlmcmVlX2lycShwaGJhLT5wY2lkZXYtPmlycSwgcGhiYSk7Ci0JcGNpX2Rpc2FibGVfbXNpKHBoYmEtPnBjaWRldik7Ci0KLQlscGZjX2NsZWFudXAocGhiYSwgMCk7Ci0JbHBmY19zdG9wX3RpbWVyKHBoYmEpOwotCXBoYmEtPndvcmtfaGJhX2V2ZW50cyA9IDA7Ci0KLQkvKgotCSAqIENhbGwgc2NzaV9mcmVlIGJlZm9yZSBtZW1fZnJlZSBzaW5jZSBzY3NpIGJ1ZnMgYXJlIHJlbGVhc2VkIHRvIHRoZWlyCi0JICogY29ycmVzcG9uZGluZyBwb29scyBoZXJlLgotCSAqLwotCWxwZmNfc2NzaV9mcmVlKHBoYmEpOwotCWxwZmNfbWVtX2ZyZWUocGhiYSk7Ci0KLQkvKiBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggU0xJMiBpbnRlcmZhY2UgKi8KLQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBTTEkyX1NMSU1fU0laRSwKLQkJCSAgcGhiYS0+c2xpbTJwLCBwaGJhLT5zbGltMnBfbWFwcGluZyk7Ci0KLQkvKiB1bm1hcCBhZGFwdGVyIFNMSU0gYW5kIENvbnRyb2wgUmVnaXN0ZXJzICovCi0JaW91bm1hcChwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3ApOwotCWlvdW5tYXAocGhiYS0+c2xpbV9tZW1tYXBfcCk7Ci0KLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBoYmEtPnBjaWRldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBoYmEtPnBjaWRldik7Ci0KLQlpZHJfcmVtb3ZlKCZscGZjX2hiYV9pbmRleCwgcGhiYS0+YnJkX25vKTsKLQlzY3NpX2hvc3RfcHV0KHBoYmEtPmhvc3QpOworCWxwZmNfcmVtb3ZlX2RldmljZShwaGJhKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIH0KQEAgLTE5NDEsNiArMTkwNywxOCBAQAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9MUEUxMTAwMFMsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1NBVCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfU0FUX01JRCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfU0FUX1NNQiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfU0FUX0RDU1AsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1NBVF9TQ1NQLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9TQVRfUywKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IDAgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwppbmRleCA0ZDAxNmMyLi44MDQxYzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtMjEyLDYgKzIxMiw3IEBACiAJCQljYXNlIExJTktfU1BFRURfMUc6CiAJCQljYXNlIExJTktfU1BFRURfMkc6CiAJCQljYXNlIExJTktfU1BFRURfNEc6CisJCQljYXNlIExJTktfU1BFRURfOEc6CiAJCQkJbWItPnVuLnZhckluaXRMbmsubGlua19mbGFncyB8PQogCQkJCQkJCUZMQUdTX0xJTktfU1BFRUQ7CiAJCQkJbWItPnVuLnZhckluaXRMbmsubGlua19zcGVlZCA9IGxpbmtzcGVlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCmluZGV4IDBjN2U3MzEuLmIzMDk4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtMTY4LDE0ICsxNjgsMTMgQEAKICAqIHJvdXRpbmUgZWZmZWN0aXZlbHkgcmVzdWx0cyBpbiBhICJzb2Z0d2FyZSBhYm9ydCIuCiAgKi8KIGludAotbHBmY19lbHNfYWJvcnQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLAotCWludCBzZW5kX2FidHMpCitscGZjX2Vsc19hYm9ydChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHApCiB7CisJTElTVF9IRUFEKGNvbXBsZXRpb25zKTsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGk7CiAJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nOwogCXN0cnVjdCBscGZjX2lvY2JxICppb2NiLCAqbmV4dF9pb2NiOwotCUlPQ0JfdCAqaWNtZDsKLQlpbnQgICAgZm91bmQgPSAwOworCUlPQ0JfdCAqY21kOwogCiAJLyogQWJvcnQgb3V0c3RhbmRpbmcgSS9PIG9uIE5Qb3J0IDxubHBfRElEPiAqLwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19ESVNDT1ZFUlksCkBAIC0xODgsNzUgKzE4NywzOSBAQAogCXByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CiAKIAkvKiBGaXJzdCBjaGVjayB0aGUgdHhxICovCi0JZG8gewotCQlmb3VuZCA9IDA7Ci0JCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlvY2IsIG5leHRfaW9jYiwgJnByaW5nLT50eHEsIGxpc3QpIHsKLQkJCS8qIENoZWNrIHRvIHNlZSBpZiBpb2NiIG1hdGNoZXMgdGhlIG5wb3J0IHdlIGFyZSBsb29raW5nCi0JCQkgICBmb3IgKi8KLQkJCWlmICgobHBmY19jaGVja19zbGlfbmRscChwaGJhLCBwcmluZywgaW9jYiwgbmRscCkpKSB7Ci0JCQkJZm91bmQgPSAxOwotCQkJCS8qIEl0IG1hdGNoZXMsIHNvIGRlcXVlIGFuZCBjYWxsIGNvbXBsIHdpdGggYW4KLQkJCQkgICBlcnJvciAqLwotCQkJCWxpc3RfZGVsKCZpb2NiLT5saXN0KTsKLQkJCQlwcmluZy0+dHhxX2NudC0tOwotCQkJCWlmIChpb2NiLT5pb2NiX2NtcGwpIHsKLQkJCQkJaWNtZCA9ICZpb2NiLT5pb2NiOwotCQkJCQlpY21kLT51bHBTdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOwotCQkJCQlpY21kLT51bi51bHBXb3JkWzRdID0gSU9FUlJfU0xJX0FCT1JURUQ7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJCQkoaW9jYi0+aW9jYl9jbXBsKSAocGhiYSwgaW9jYiwgaW9jYik7Ci0JCQkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCQl9IGVsc2UKLQkJCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBpb2NiKTsKLQkJCQlicmVhazsKLQkJCX0KKwlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlvY2IsIG5leHRfaW9jYiwgJnByaW5nLT50eHEsIGxpc3QpIHsKKwkJLyogQ2hlY2sgdG8gc2VlIGlmIGlvY2IgbWF0Y2hlcyB0aGUgbnBvcnQgd2UgYXJlIGxvb2tpbmcKKwkJICAgZm9yICovCisJCWlmIChscGZjX2NoZWNrX3NsaV9uZGxwKHBoYmEsIHByaW5nLCBpb2NiLCBuZGxwKSkgeworCQkJLyogSXQgbWF0Y2hlcywgc28gZGVxdWUgYW5kIGNhbGwgY29tcGwgd2l0aCBhbgorCQkJICAgZXJyb3IgKi8KKwkJCWxpc3RfbW92ZV90YWlsKCZpb2NiLT5saXN0LCAmY29tcGxldGlvbnMpOworCQkJcHJpbmctPnR4cV9jbnQtLTsKIAkJfQotCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQl9IHdoaWxlIChmb3VuZCk7CisJfQogCi0JLyogRXZlcnl0aGluZyBvbiB0eGNtcGxxIHdpbGwgYmUgcmV0dXJuZWQgYnkgZmlybXdhcmUKLQkgKiB3aXRoIGEgbm8gcnBpIC8gbGlua2Rvd24gLyBhYm9ydCBlcnJvci4gIEZvciByaW5nIDAsCi0JICogRUxTIGRpc2NvdmVyeSwgd2Ugd2FudCB0byBnZXQgcmlkIG9mIGl0IHJpZ2h0IGhlcmUuCi0JICovCiAJLyogTmV4dCBjaGVjayB0aGUgdHhjbXBscSAqLwotCWRvIHsKLQkJZm91bmQgPSAwOwotCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpb2NiLCBuZXh0X2lvY2IsICZwcmluZy0+dHhjbXBscSwKLQkJCQkJIGxpc3QpIHsKLQkJCS8qIENoZWNrIHRvIHNlZSBpZiBpb2NiIG1hdGNoZXMgdGhlIG5wb3J0IHdlIGFyZSBsb29raW5nCi0JCQkgICBmb3IgKi8KLQkJCWlmICgobHBmY19jaGVja19zbGlfbmRscCAocGhiYSwgcHJpbmcsIGlvY2IsIG5kbHApKSkgewotCQkJCWZvdW5kID0gMTsKLQkJCQkvKiBJdCBtYXRjaGVzLCBzbyBkZXF1ZSBhbmQgY2FsbCBjb21wbCB3aXRoIGFuCi0JCQkJICAgZXJyb3IgKi8KLQkJCQlsaXN0X2RlbCgmaW9jYi0+bGlzdCk7Ci0JCQkJcHJpbmctPnR4Y21wbHFfY250LS07CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlvY2IsIG5leHRfaW9jYiwgJnByaW5nLT50eGNtcGxxLCBsaXN0KSB7CisJCS8qIENoZWNrIHRvIHNlZSBpZiBpb2NiIG1hdGNoZXMgdGhlIG5wb3J0IHdlIGFyZSBsb29raW5nCisJCSAgIGZvciAqLworCQlpZiAobHBmY19jaGVja19zbGlfbmRscChwaGJhLCBwcmluZywgaW9jYiwgbmRscCkpCisJCQlscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZyhwaGJhLCBwcmluZywgaW9jYik7CisJfQorCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCi0JCQkJaWNtZCA9ICZpb2NiLT5pb2NiOwotCQkJCS8qIElmIHRoZSBkcml2ZXIgaXMgY29tcGxldGluZyBhbiBFTFMKLQkJCQkgKiBjb21tYW5kIGVhcmx5LCBmbHVzaCBpdCBvdXQgb2YgdGhlIGZpcm13YXJlLgotCQkJCSAqLwotCQkJCWlmIChzZW5kX2FidHMgJiYKLQkJCQkgICAoaWNtZC0+dWxwQ29tbWFuZCA9PSBDTURfRUxTX1JFUVVFU1Q2NF9DUikgJiYKLQkJCQkgICAoaWNtZC0+dW4uZWxzcmVxNjQuYmRsLnVscElvVGFnMzIpKSB7Ci0JCQkJCWxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnMzIocGhiYSwKLQkJCQkJCQkgICAgIHByaW5nLCBpb2NiKTsKLQkJCQl9Ci0JCQkJaWYgKGlvY2ItPmlvY2JfY21wbCkgewotCQkJCQlpY21kLT51bHBTdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOwotCQkJCQlpY21kLT51bi51bHBXb3JkWzRdID0gSU9FUlJfU0xJX0FCT1JURUQ7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJCQkoaW9jYi0+aW9jYl9jbXBsKSAocGhiYSwgaW9jYiwgaW9jYik7Ci0JCQkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCQl9IGVsc2UKLQkJCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBpb2NiKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQl9IHdoaWxlKGZvdW5kKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmNvbXBsZXRpb25zKSkgeworCQlpb2NiID0gbGlzdF9nZXRfZmlyc3QoJmNvbXBsZXRpb25zLCBzdHJ1Y3QgbHBmY19pb2NicSwgbGlzdCk7CisJCWNtZCA9ICZpb2NiLT5pb2NiOworCQlsaXN0X2RlbCgmaW9jYi0+bGlzdCk7CisKKwkJaWYgKGlvY2ItPmlvY2JfY21wbCkgeworCQkJY21kLT51bHBTdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOworCQkJY21kLT51bi51bHBXb3JkWzRdID0gSU9FUlJfU0xJX0FCT1JURUQ7CisJCQkoaW9jYi0+aW9jYl9jbXBsKSAocGhiYSwgaW9jYiwgaW9jYik7CisJCX0gZWxzZQorCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBpb2NiKTsKKwl9CiAKIAkvKiBJZiB3ZSBhcmUgZGVsYXlpbmcgaXNzdWluZyBhbiBFTFMgY29tbWFuZCwgY2FuY2VsIGl0ICovCiAJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykKQEAgLTM5MCw3ICszNTMsMTAgQEAKIAkgKiBxdWV1ZSB0aGlzIG1ib3ggY29tbWFuZCB0byBiZSBwcm9jZXNzZWQgbGF0ZXIuCiAJICovCiAJbWJveC0+bWJveF9jbXBsID0gbHBmY19tYnhfY21wbF9yZWdfbG9naW47Ci0JbWJveC0+Y29udGV4dDIgID0gbmRscDsKKwkvKgorCSAqIG1ib3gtPmNvbnRleHQyID0gbHBmY19ubHBfZ2V0KG5kbHApIGRlZmVycmVkIHVudGlsIG1haWxib3gKKwkgKiBjb21tYW5kIGlzc3VlZCBpbiBscGZjX2NtcGxfZWxzX2FjYygpLgorCSAqLwogCW5kbHAtPm5scF9mbGFnIHw9IChOTFBfQUNDX1JFR0xPR0lOIHwgTkxQX1JDVl9QTE9HSSk7CiAKIAkvKgpAQCAtNDA0LDcgKzM3MCw3IEBACiAJICovCiAJaWYgKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX1BMT0dJX0lTU1VFKSB7CiAJCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIFBMT0dJICovCi0JCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOworCQlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwKTsKIAl9CiAKIAlscGZjX2Vsc19yc3BfYWNjKHBoYmEsIEVMU19DTURfUExPR0ksIGNtZGlvY2IsIG5kbHAsIG1ib3gsIDApOwpAQCAtNDcxLDggKzQzNyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gRUxTX0NNRF9QTE9HSTsKIAluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKLQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwotCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKKwlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9OUFJfTk9ERSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUwMiwxMiArNDY3LDEwIEBACiAKIAkJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gRUxTX0NNRF9QTE9HSTsKIAkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7Ci0JCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7Ci0JCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKKwkJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfTlBSX05PREUpOwogCX0gZWxzZSB7CiAJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOwotCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1VOVVNFRF9OT0RFOwotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9VTlVTRURfTElTVCk7CisJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX1VOVVNFRF9OT0RFKTsKIAl9CiAKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC02MDEsMTEgKzU2NCwxMCBAQAogCiAJaWYgKGxwZmNfcmN2X3Bsb2dpKHBoYmEsIG5kbHAsIGNtZGlvY2IpKSB7CiAJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9VTlVTRURfTk9ERTsKLQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9VTlVTRURfTk9ERTsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfVU5VU0VEX0xJU1QpOworCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9VTlVTRURfTk9ERSk7CiAJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiAJfQotCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCWxwZmNfZHJvcF9ub2RlKHBoYmEsIG5kbHApOwogCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CiB9CiAKQEAgLTYxNCw3ICs1NzYsNyBAQAogCQkJIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwgdm9pZCAqYXJnLCB1aW50MzJfdCBldnQpCiB7CiAJbHBmY19pc3N1ZV9lbHNfbG9nbyhwaGJhLCBuZGxwLCAwKTsKLQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9VTlVTRURfTElTVCk7CisJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfVU5VU0VEX05PREUpOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKQEAgLTYzMCw3ICs1OTIsNyBAQAogCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9MT0dPX0FDQzsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlscGZjX2Vsc19yc3BfYWNjKHBoYmEsIEVMU19DTURfQUNDLCBjbWRpb2NiLCBuZGxwLCBOVUxMLCAwKTsKLQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9VTlVTRURfTElTVCk7CisJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfVU5VU0VEX05PREUpOwogCiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KQEAgLTYzOSw3ICs2MDEsNyBAQAogbHBmY19jbXBsX2xvZ29fdW51c2VkX25vZGUoc3RydWN0IGxwZmNfaGJhICogcGhiYSwKIAkJCSAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLCB2b2lkICphcmcsIHVpbnQzMl90IGV2dCkKIHsKLQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwlscGZjX2Ryb3Bfbm9kZShwaGJhLCBuZGxwKTsKIAlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOwogfQogCkBAIC02NDcsNyArNjA5LDcgQEAKIGxwZmNfZGV2aWNlX3JtX3VudXNlZF9ub2RlKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCiAJCQkgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywgdWludDMyX3QgZXZ0KQogewotCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCWxwZmNfZHJvcF9ub2RlKHBoYmEsIG5kbHApOwogCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CiB9CiAKQEAgLTY5Nyw3ICs2NTksNyBAQAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCiAJLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgUExPR0kgKi8KLQlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAxKTsKKwlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwKTsKIAogCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYiwgRUxTX0NNRF9MT0dPKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwpAQCAtNzEyLDcgKzY3NCw3IEBACiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAKIAkvKiBzb2Z0d2FyZSBhYm9ydCBvdXRzdGFuZGluZyBQTE9HSSAqLwotCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOworCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHApOwogCiAJaWYgKGV2dCA9PSBOTFBfRVZUX1JDVl9MT0dPKSB7CiAJCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9BQ0MsIGNtZGlvY2IsIG5kbHAsIE5VTEwsIDApOwpAQCAtNzI3LDggKzY4OSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gRUxTX0NNRF9QTE9HSTsKIAluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfUExPR0lfSVNTVUU7Ci0JbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKLQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CisJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfTlBSX05PREUpOwogCiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KQEAgLTgwMywzMiArNzY0LDI2IEBACiAJCWdvdG8gb3V0OwogCiAJbHBmY191bnJlZ19ycGkocGhiYSwgbmRscCk7Ci0JaWYgKGxwZmNfcmVnX2xvZ2luCi0JICAgIChwaGJhLCBpcnNwLT51bi5lbHNyZXE2NC5yZW1vdGVJRCwKLQkgICAgICh1aW50OF90ICopIHNwLCBtYm94LCAwKSA9PSAwKSB7CisJaWYgKGxwZmNfcmVnX2xvZ2luKHBoYmEsIGlyc3AtPnVuLmVsc3JlcTY0LnJlbW90ZUlELCAodWludDhfdCAqKSBzcCwKKwkJCSAgIG1ib3gsIDApID09IDApIHsKIAkJc3dpdGNoIChuZGxwLT5ubHBfRElEKSB7CiAJCWNhc2UgTmFtZVNlcnZlcl9ESUQ6Ci0JCQltYm94LT5tYm94X2NtcGwgPQotCQkJCWxwZmNfbWJ4X2NtcGxfbnNfcmVnX2xvZ2luOworCQkJbWJveC0+bWJveF9jbXBsID0gbHBmY19tYnhfY21wbF9uc19yZWdfbG9naW47CiAJCQlicmVhazsKIAkJY2FzZSBGRE1JX0RJRDoKLQkJCW1ib3gtPm1ib3hfY21wbCA9Ci0JCQkJbHBmY19tYnhfY21wbF9mZG1pX3JlZ19sb2dpbjsKKwkJCW1ib3gtPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfZmRtaV9yZWdfbG9naW47CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCW1ib3gtPm1ib3hfY21wbCA9Ci0JCQkJbHBmY19tYnhfY21wbF9yZWdfbG9naW47CisJCQltYm94LT5tYm94X2NtcGwgPSBscGZjX21ieF9jbXBsX3JlZ19sb2dpbjsKIAkJfQotCQltYm94LT5jb250ZXh0MiA9IG5kbHA7CisJCW1ib3gtPmNvbnRleHQyID0gbHBmY19ubHBfZ2V0KG5kbHApOwogCQlpZiAobHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LAogCQkJCQkoTUJYX05PV0FJVCB8IE1CWF9TVE9QX0lPQ0IpKQogCQkgICAgIT0gTUJYX05PVF9GSU5JU0hFRCkgewotCQkJbmRscC0+bmxwX3N0YXRlID0KLQkJCQlOTFBfU1RFX1JFR19MT0dJTl9JU1NVRTsKLQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwKLQkJCQkgICAgICBOTFBfUkVHTE9HSU5fTElTVCk7CisJCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9SRUdfTE9HSU5fSVNTVUUpOwogCQkJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIAkJfQorCQlscGZjX25scF9wdXQobmRscCk7CiAJCW1wID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKW1ib3gtPmNvbnRleHQxOwogCQlscGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwogCQlrZnJlZShtcCk7CkBAIC04NDEsNyArNzk2LDcgQEAKICBvdXQ6CiAJLyogRnJlZSB0aGlzIG5vZGUgc2luY2UgdGhlIGRyaXZlciBjYW5ub3QgbG9naW4gb3IgaGFzIHRoZSB3cm9uZwogCSAgIHNwYXJtICovCi0JbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CiAJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKIH0KIApAQCAtODU1LDkgKzgxMCw5IEBACiAJfQogCWVsc2UgewogCQkvKiBzb2Z0d2FyZSBhYm9ydCBvdXRzdGFuZGluZyBQTE9HSSAqLwotCQlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAxKTsKKwkJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCk7CiAKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJCWxwZmNfZHJvcF9ub2RlKHBoYmEsIG5kbHApOwogCQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOwogCX0KIH0KQEAgLTg2OCwxMSArODIzLDEwIEBACiAJCQkgICAgdWludDMyX3QgZXZ0KQogewogCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIFBMT0dJICovCi0JbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CisJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCk7CiAKIAluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfUExPR0lfSVNTVUU7Ci0JbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKLQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CisJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfTlBSX05PREUpOwogCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAluZGxwLT5ubHBfZmxhZyAmPSB+KE5MUF9OT0RFVl9SRU1PVkUgfCBOTFBfTlBSXzJCX0RJU0MpOwogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtODg4LDcgKzg0Miw3IEBACiAJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2I7CiAKIAkvKiBzb2Z0d2FyZSBhYm9ydCBvdXRzdGFuZGluZyBBRElTQyAqLwotCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOworCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHApOwogCiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAKQEAgLTg5Niw4ICs4NTAsNyBAQAogCQlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogCX0KIAluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfQURJU0NfSVNTVUU7Ci0JbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9QTE9HSV9JU1NVRTsKLQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9QTE9HSV9MSVNUKTsKKwlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9QTE9HSV9JU1NVRSk7CiAJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgbmRscC0+bmxwX0RJRCwgMCk7CiAKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwpAQCAtOTI2LDcgKzg3OSw3IEBACiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAKIAkvKiBzb2Z0d2FyZSBhYm9ydCBvdXRzdGFuZGluZyBBRElTQyAqLwotCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDApOworCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHApOwogCiAJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiLCBFTFNfQ01EX0xPR08pOwogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CkBAIC05ODcsMjAgKzk0MCwxNyBAQAogCQltZW1zZXQoJm5kbHAtPm5scF9wb3J0bmFtZSwgMCwgc2l6ZW9mIChzdHJ1Y3QgbHBmY19uYW1lKSk7CiAKIAkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX0FESVNDX0lTU1VFOwotCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CisJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX05QUl9OT0RFKTsKIAkJbHBmY191bnJlZ19ycGkocGhiYSwgbmRscCk7CiAJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiAJfQogCiAJaWYgKG5kbHAtPm5scF90eXBlICYgTkxQX0ZDUF9UQVJHRVQpIHsKIAkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX0FESVNDX0lTU1VFOwotCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX01BUFBFRF9OT0RFOwotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9NQVBQRURfTElTVCk7CisJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX01BUFBFRF9OT0RFKTsKIAl9IGVsc2UgewogCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfQURJU0NfSVNTVUU7Ci0JCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfVU5NQVBQRURfTk9ERTsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfVU5NQVBQRURfTElTVCk7CisJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX1VOTUFQUEVEX05PREUpOwogCX0KIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQpAQCAtMTAxNiw5ICs5NjYsOSBAQAogCX0KIAllbHNlIHsKIAkJLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgQURJU0MgKi8KLQkJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CisJCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHApOwogCi0JCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQlscGZjX2Ryb3Bfbm9kZShwaGJhLCBuZGxwKTsKIAkJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKIAl9CiB9CkBAIC0xMDI5LDExICs5NzksMTAgQEAKIAkJCSAgICB1aW50MzJfdCBldnQpCiB7CiAJLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgQURJU0MgKi8KLQlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAxKTsKKwlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwKTsKIAogCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9BRElTQ19JU1NVRTsKLQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwotCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKKwlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9OUFJfTk9ERSk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCW5kbHAtPm5scF9mbGFnICY9IH4oTkxQX05PREVWX1JFTU9WRSB8IE5MUF9OUFJfMkJfRElTQyk7CiAJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX05QUl9BRElTQzsKQEAgLTEwNzQsOSArMTAyMywzNiBAQAogCQkJICAgICB1aW50MzJfdCBldnQpCiB7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2I7CisJTFBGQ19NQk9YUV90CSAgKm1iOworCUxQRkNfTUJPWFFfdAkgICpuZXh0bWI7CisJc3RydWN0IGxwZmNfZG1hYnVmICptcDsKIAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCisJLyogY2xlYW51cCBhbnkgbmRscCBvbiBtYm94IHEgd2FpdGluZyBmb3IgcmVnbG9naW4gY21wbCAqLworCWlmICgobWIgPSBwaGJhLT5zbGkubWJveF9hY3RpdmUpKSB7CisJCWlmICgobWItPm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSAmJgorCQkgICAobmRscCA9PSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKikgbWItPmNvbnRleHQyKSkgeworCQkJbWItPmNvbnRleHQyID0gTlVMTDsKKwkJCW1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOworCQl9CisJfQorCisJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYiwgbmV4dG1iLCAmcGhiYS0+c2xpLm1ib3hxLCBsaXN0KSB7CisJCWlmICgobWItPm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSAmJgorCQkgICAobmRscCA9PSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKikgbWItPmNvbnRleHQyKSkgeworCQkJbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChtYi0+Y29udGV4dDEpOworCQkJaWYgKG1wKSB7CisJCQkJbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKKwkJCQlrZnJlZShtcCk7CisJCQl9CisJCQlsaXN0X2RlbCgmbWItPmxpc3QpOworCQkJbWVtcG9vbF9mcmVlKG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwogCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYiwgRUxTX0NNRF9MT0dPKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQpAQCAtMTEzMyw4ICsxMTA5LDcgQEAKIAkJICovCiAJCWlmIChtYi0+bWJ4U3RhdHVzID09IE1CWEVSUl9SUElfRlVMTCkgewogCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX1VOVVNFRF9OT0RFOwotCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9VTlVTRURfTk9ERTsKLQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1VOVVNFRF9MSVNUKTsKKwkJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX1VOVVNFRF9OT0RFKTsKIAkJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiAJCX0KIApAQCAtMTE0Nyw4ICsxMTIyLDcgQEAKIAogCQlscGZjX2lzc3VlX2Vsc19sb2dvKHBoYmEsIG5kbHAsIDApOwogCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfUkVHX0xPR0lOX0lTU1VFOwotCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CisJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX05QUl9OT0RFKTsKIAkJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIAl9CiAKQEAgLTExNTcsMTMgKzExMzEsMTEgQEAKIAkvKiBPbmx5IGlmIHdlIGFyZSBub3QgYSBmYWJyaWMgbnBvcnQgZG8gd2UgaXNzdWUgUFJMSSAqLwogCWlmICghKG5kbHAtPm5scF90eXBlICYgTkxQX0ZBQlJJQykpIHsKIAkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX1JFR19MT0dJTl9JU1NVRTsKLQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9QUkxJX0lTU1VFOwotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9QUkxJX0xJU1QpOworCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9QUkxJX0lTU1VFKTsKIAkJbHBmY19pc3N1ZV9lbHNfcHJsaShwaGJhLCBuZGxwLCAwKTsKIAl9IGVsc2UgewogCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfUkVHX0xPR0lOX0lTU1VFOwotCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1VOTUFQUEVEX05PREU7Ci0JCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1VOTUFQUEVEX0xJU1QpOworCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9VTk1BUFBFRF9OT0RFKTsKIAl9CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KQEAgLTExNzgsNyArMTE1MCw3IEBACiAJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiAJfQogCWVsc2UgewotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwkJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CiAJCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CiAJfQogfQpAQCAtMTE4OSw4ICsxMTYxLDcgQEAKIAkJCSAgICAgICB1aW50MzJfdCBldnQpCiB7CiAJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX1JFR19MT0dJTl9JU1NVRTsKLQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwotCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKKwlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9OUFJfTk9ERSk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCW5kbHAtPm5scF9mbGFnICY9IH4oTkxQX05PREVWX1JFTU9WRSB8IE5MUF9OUFJfMkJfRElTQyk7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC0xMjMwLDcgKzEyMDEsNyBAQAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCiAJLyogU29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgUFJMSSBiZWZvcmUgc2VuZGluZyBhY2MgKi8KLQlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAxKTsKKwlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwKTsKIAogCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYiwgRUxTX0NNRF9MT0dPKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwpAQCAtMTI3OSw4ICsxMjUwLDcgQEAKIAlpcnNwID0gJnJzcGlvY2ItPmlvY2I7CiAJaWYgKGlyc3AtPnVscFN0YXR1cykgewogCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfUFJMSV9JU1NVRTsKLQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9VTk1BUFBFRF9OT0RFOwotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9VTk1BUFBFRF9MSVNUKTsKKwkJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfVU5NQVBQRURfTk9ERSk7CiAJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiAJfQogCkBAIC0xMjk4LDggKzEyNjgsNyBAQAogCX0KIAogCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9QUkxJX0lTU1VFOwotCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTUFQUEVEX05PREU7Ci0JbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTUFQUEVEX0xJU1QpOworCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX01BUFBFRF9OT0RFKTsKIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC0xMzMwLDkgKzEyOTksOSBAQAogCX0KIAllbHNlIHsKIAkJLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgUExPR0kgKi8KLQkJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CisJCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHApOwogCi0JCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQlscGZjX2Ryb3Bfbm9kZShwaGJhLCBuZGxwKTsKIAkJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKIAl9CiB9CkBAIC0xMzU5LDExICsxMzI4LDEwIEBACiAJCQkgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywgdWludDMyX3QgZXZ0KQogewogCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIFBSTEkgKi8KLQlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAxKTsKKwlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwKTsKIAogCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9QUkxJX0lTU1VFOwotCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7Ci0JbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOworCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX05QUl9OT0RFKTsKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJbmRscC0+bmxwX2ZsYWcgJj0gfihOTFBfTk9ERVZfUkVNT1ZFIHwgTkxQX05QUl8yQl9ESVNDKTsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKQEAgLTE0MzYsOCArMTQwNCw3IEBACiAJCQkgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywgdWludDMyX3QgZXZ0KQogewogCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9VTk1BUFBFRF9OT0RFOwotCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7Ci0JbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOworCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX05QUl9OT0RFKTsKIAluZGxwLT5ubHBfZmxhZyAmPSB+KE5MUF9OT0RFVl9SRU1PVkUgfCBOTFBfTlBSXzJCX0RJU0MpOwogCWxwZmNfZGlzY19zZXRfYWRpc2MocGhiYSwgbmRscCk7CiAKQEAgLTE1MTgsOCArMTQ4NSw3IEBACiAJCQkgICAgdWludDMyX3QgZXZ0KQogewogCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9NQVBQRURfTk9ERTsKLQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwotCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKKwlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9OUFJfTk9ERSk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCW5kbHAtPm5scF9mbGFnICY9IH4oTkxQX05PREVWX1JFTU9WRSB8IE5MUF9OUFJfMkJfRElTQyk7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC0xNTUxLDggKzE1MTcsNyBAQAogCS8qIHNlbmQgUExPR0kgaW1tZWRpYXRlbHksIG1vdmUgdG8gUExPR0kgaXNzdWUgc3RhdGUgKi8KIAlpZiAoIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pKSB7CiAJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKLQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9QTE9HSV9JU1NVRTsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUExPR0lfTElTVCk7CisJCWxwZmNfbmxwX3NldF9zdGF0ZShwaGJhLCBuZGxwLCBOTFBfU1RFX1BMT0dJX0lTU1VFKTsKIAkJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgbmRscC0+bmxwX0RJRCwgMCk7CiAJfQogCkBAIC0xNTgwLDE2ICsxNTQ1LDEzIEBACiAJCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl9BRElTQzsKIAkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwotCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9BRElTQ19JU1NVRTsKLQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX0FESVNDX0xJU1QpOworCQkJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfQURJU0NfSVNTVUUpOwogCQkJbHBmY19pc3N1ZV9lbHNfYWRpc2MocGhiYSwgbmRscCwgMCk7CiAJCX0gZWxzZSB7CiAJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7Ci0JCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOwotCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUExPR0lfTElTVCk7CisJCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9QTE9HSV9JU1NVRSk7CiAJCQlscGZjX2lzc3VlX2Vsc19wbG9naShwaGJhLCBuZGxwLT5ubHBfRElELCAwKTsKIAkJfQotCiAJfQogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CkBAIC0xNjI3LDEzICsxNTg5LDExIEBACiAJCSEobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSXzJCX0RJU0MpKXsKIAkJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl9BRElTQykgewogCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwotCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9BRElTQ19JU1NVRTsKLQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX0FESVNDX0xJU1QpOworCQkJbHBmY19ubHBfc2V0X3N0YXRlKHBoYmEsIG5kbHAsIE5MUF9TVEVfQURJU0NfSVNTVUUpOwogCQkJbHBmY19pc3N1ZV9lbHNfYWRpc2MocGhiYSwgbmRscCwgMCk7CiAJCX0gZWxzZSB7CiAJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7Ci0JCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOwotCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUExPR0lfTElTVCk7CisJCQlscGZjX25scF9zZXRfc3RhdGUocGhiYSwgbmRscCwgTkxQX1NURV9QTE9HSV9JU1NVRSk7CiAJCQlscGZjX2lzc3VlX2Vsc19wbG9naShwaGJhLCBuZGxwLT5ubHBfRElELCAwKTsKIAkJfQogCX0KQEAgLTE2ODIsNyArMTY0Miw3IEBACiAKIAlpcnNwID0gJnJzcGlvY2ItPmlvY2I7CiAJaWYgKGlyc3AtPnVscFN0YXR1cykgewotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwkJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CiAJCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CiAJfQogCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CkBAIC0xNzAwLDcgKzE2NjAsNyBAQAogCiAJaXJzcCA9ICZyc3Bpb2NiLT5pb2NiOwogCWlmIChpcnNwLT51bHBTdGF0dXMgJiYgKG5kbHAtPm5scF9mbGFnICYgTkxQX05PREVWX1JFTU9WRSkpIHsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJCWxwZmNfZHJvcF9ub2RlKHBoYmEsIG5kbHApOwogCQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOwogCX0KIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwpAQCAtMTcyOCw3ICsxNjg4LDcgQEAKIAogCWlyc3AgPSAmcnNwaW9jYi0+aW9jYjsKIAlpZiAoaXJzcC0+dWxwU3RhdHVzICYmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OT0RFVl9SRU1PVkUpKSB7Ci0JCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQlscGZjX2Ryb3Bfbm9kZShwaGJhLCBuZGxwKTsKIAkJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKIAl9CiAJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKQEAgLTE3NDksNyArMTcwOSw3IEBACiAJCW5kbHAtPm5scF9ycGkgPSBtYi0+dW4udmFyV29yZHNbMF07CiAJZWxzZSB7CiAJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OT0RFVl9SRU1PVkUpIHsKLQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQkJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CiAJCQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOwogCQl9CiAJfQpAQCAtMTc2NSw3ICsxNzI1LDcgQEAKIAkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX05PREVWX1JFTU9WRTsKIAkJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIAl9Ci0JbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJbHBmY19kcm9wX25vZGUocGhiYSwgbmRscCk7CiAJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKIH0KIApAQCAtMTk2NCw3ICsxOTI0LDcgQEAKIAl1aW50MzJfdCgqZnVuYykgKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqLCB2b2lkICosCiAJCQkgdWludDMyX3QpOwogCi0JbmRscC0+bmxwX2Rpc2NfcmVmY250Kys7CisJbHBmY19ubHBfZ2V0KG5kbHApOwogCWN1cl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKIAogCS8qIERTTSBpbiBldmVudCA8ZXZ0PiBvbiBOUG9ydCA8bmxwX0RJRD4gaW4gc3RhdGUgPGN1cl9zdGF0ZT4gKi8KQEAgLTE5ODcsMTggKzE5NDcsNyBAQAogCQkgICAgICAgcGhiYS0+YnJkX25vLAogCQkgICAgICAgcmMsIG5kbHAtPm5scF9ESUQsIG5kbHAtPm5scF9mbGFnKTsKIAotCW5kbHAtPm5scF9kaXNjX3JlZmNudC0tOworCWxwZmNfbmxwX3B1dChuZGxwKTsKIAotCS8qIENoZWNrIHRvIHNlZSBpZiBuZGxwIHJlbW92YWwgaXMgZGVmZXJyZWQgKi8KLQlpZiAoKG5kbHAtPm5scF9kaXNjX3JlZmNudCA9PSAwKQotCSAgICAmJiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVMQVlfUkVNT1ZFKSkgewotCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfREVMQVlfUkVNT1ZFOwotCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJbHBmY19ubHBfcmVtb3ZlKHBoYmEsIG5kbHApOwotCQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOwotCX0KLQlpZiAocmMgPT0gTkxQX1NURV9GUkVFRF9OT0RFKQotCQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggYzNlNjhlMC4uOWExMmQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTE0Niw2ICsxNDYsMTAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5zY3NpX2J1Zl9saXN0X2xvY2ssIGlmbGFnKTsKIAlsaXN0X3JlbW92ZV9oZWFkKHNjc2lfYnVmX2xpc3QsIGxwZmNfY21kLCBzdHJ1Y3QgbHBmY19zY3NpX2J1ZiwgbGlzdCk7CisJaWYgKGxwZmNfY21kKSB7CisJCWxwZmNfY21kLT5zZWdfY250ID0gMDsKKwkJbHBmY19jbWQtPm5vbnNnX3BoeXMgPSAwOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5zY3NpX2J1Zl9saXN0X2xvY2ssIGlmbGFnKTsKIAlyZXR1cm4gIGxwZmNfY21kOwogfQpAQCAtMjg4LDEzICsyOTIsMTMgQEAKIH0KIAogc3RhdGljIHZvaWQKLWxwZmNfaGFuZGxlX2ZjcF9lcnIoc3RydWN0IGxwZmNfc2NzaV9idWYgKmxwZmNfY21kKQorbHBmY19oYW5kbGVfZmNwX2VycihzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqbHBmY19jbWQsIHN0cnVjdCBscGZjX2lvY2JxICpyc3BfaW9jYikKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gbHBmY19jbWQtPnBDbWQ7CiAJc3RydWN0IGZjcF9jbW5kICpmY3BjbWQgPSBscGZjX2NtZC0+ZmNwX2NtbmQ7CiAJc3RydWN0IGZjcF9yc3AgKmZjcHJzcCA9IGxwZmNfY21kLT5mY3BfcnNwOwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IGxwZmNfY21kLT5zY3NpX2hiYTsKLQl1aW50MzJfdCBmY3BpX3Bhcm0gPSBscGZjX2NtZC0+Y3VyX2lvY2JxLmlvY2IudW4uZmNwaS5mY3BpX3Bhcm07CisJdWludDMyX3QgZmNwaV9wYXJtID0gcnNwX2lvY2ItPmlvY2IudW4uZmNwaS5mY3BpX3Bhcm07CiAJdWludDMyX3QgcmVzcF9pbmZvID0gZmNwcnNwLT5yc3BTdGF0dXMyOwogCXVpbnQzMl90IHNjc2lfc3RhdHVzID0gZmNwcnNwLT5yc3BTdGF0dXMzOwogCXVpbnQzMl90ICpscDsKQEAgLTM1Niw2ICszNjAsMjQgQEAKIAkJCQlmY3BpX3Bhcm0sIGNtbmQtPmNtbmRbMF0sIGNtbmQtPnVuZGVyZmxvdyk7CiAKIAkJLyoKKwkJICogSWYgdGhlcmUgaXMgYW4gdW5kZXIgcnVuIGNoZWNrIGlmIHVuZGVyIHJ1biByZXBvcnRlZCBieQorCQkgKiBzdG9yYWdlIGFycmF5IGlzIHNhbWUgYXMgdGhlIHVuZGVyIHJ1biByZXBvcnRlZCBieSBIQkEuCisJCSAqIElmIHRoaXMgaXMgbm90IHNhbWUsIHRoZXJlIGlzIGEgZHJvcHBlZCBmcmFtZS4KKwkJICovCisJCWlmICgoY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSAmJgorCQkJZmNwaV9wYXJtICYmCisJCQkoY21uZC0+cmVzaWQgIT0gZmNwaV9wYXJtKSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywKKwkJCQlMT0dfRkNQIHwgTE9HX0ZDUF9FUlJPUiwKKwkJCQkiJWQ6MDczNSBGQ1AgUmVhZCBDaGVjayBFcnJvciBhbmQgVW5kZXJydW4gIgorCQkJCSJEYXRhOiB4JXggeCV4IHgleCB4JXhcbiIsIHBoYmEtPmJyZF9ubywKKwkJCQliZTMyX3RvX2NwdShmY3BjbWQtPmZjcERsKSwKKwkJCQljbW5kLT5yZXNpZCwKKwkJCQlmY3BpX3Bhcm0sIGNtbmQtPmNtbmRbMF0pOworCQkJY21uZC0+cmVzaWQgPSBjbW5kLT5yZXF1ZXN0X2J1ZmZsZW47CisJCQlob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKKwkJfQorCQkvKgogCQkgKiBUaGUgY21uZC0+dW5kZXJmbG93IGlzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IG11c3QKIAkJICogYmUgdHJhbnNmZXJlZCBmb3IgdGhpcyBjb21tYW5kLiAgUHJvdmlkZWQgYSBzZW5zZSBjb25kaXRpb24KIAkJICogaXMgbm90IHByZXNlbnQsIG1ha2Ugc3VyZSB0aGUgYWN0dWFsIGFtb3VudCB0cmFuc2ZlcnJlZCBpcyBhdApAQCAtNDM1LDcgKzQ1Nyw3IEBACiAJCXN3aXRjaCAobHBmY19jbWQtPnN0YXR1cykgewogCQljYXNlIElPU1RBVF9GQ1BfUlNQX0VSUk9SOgogCQkJLyogQ2FsbCBGQ1AgUlNQIGhhbmRsZXIgdG8gZGV0ZXJtaW5lIHJlc3VsdCAqLwotCQkJbHBmY19oYW5kbGVfZmNwX2VycihscGZjX2NtZCk7CisJCQlscGZjX2hhbmRsZV9mY3BfZXJyKGxwZmNfY21kLHBJb2NiT3V0KTsKIAkJCWJyZWFrOwogCQljYXNlIElPU1RBVF9OUE9SVF9CU1k6CiAJCWNhc2UgSU9TVEFUX0ZBQlJJQ19CU1k6CkBAIC00NjYsMTAgKzQ4OCwxMCBAQAogCiAJcmVzdWx0ID0gY21kLT5yZXN1bHQ7CiAJc2RldiA9IGNtZC0+ZGV2aWNlOworCWxwZmNfc2NzaV91bnByZXBfZG1hX2J1ZihwaGJhLCBscGZjX2NtZCk7CiAJY21kLT5zY3NpX2RvbmUoY21kKTsKIAogCWlmIChwaGJhLT5jZmdfcG9sbCAmIEVOQUJMRV9GQ1BfUklOR19QT0xMSU5HKSB7Ci0JCWxwZmNfc2NzaV91bnByZXBfZG1hX2J1ZihwaGJhLCBscGZjX2NtZCk7CiAJCWxwZmNfcmVsZWFzZV9zY3NpX2J1ZihwaGJhLCBscGZjX2NtZCk7CiAJCXJldHVybjsKIAl9CkBAIC01MjcsNyArNTQ5LDYgQEAKIAkJfQogCX0KIAotCWxwZmNfc2NzaV91bnByZXBfZG1hX2J1ZihwaGJhLCBscGZjX2NtZCk7CiAJbHBmY19yZWxlYXNlX3Njc2lfYnVmKHBoYmEsIGxwZmNfY21kKTsKIH0KIApAQCAtNjcwLDYgKzY5MSwxOCBAQAogCXJldHVybiAoMSk7CiB9CiAKK3N0YXRpYyB2b2lkCitscGZjX3Rza21nbXRfZGVmX2NtcGwoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxKQoreworCXN0cnVjdCBscGZjX3Njc2lfYnVmICpscGZjX2NtZCA9CisJCShzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqKSBjbWRpb2NicS0+Y29udGV4dDE7CisJaWYgKGxwZmNfY21kKQorCQlscGZjX3JlbGVhc2Vfc2NzaV9idWYocGhiYSwgbHBmY19jbWQpOworCXJldHVybjsKK30KKwogc3RhdGljIGludAogbHBmY19zY3NpX3RndF9yZXNldChzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqIGxwZmNfY21kLCBzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAogCQkgICAgdW5zaWduZWQgIHRndF9pZCwgdW5zaWduZWQgaW50IGx1biwKQEAgLTcwNiw4ICs3MzksOSBAQAogCQkJCSAgICAgICAmcGhiYS0+c2xpLnJpbmdbcGhiYS0+c2xpLmZjcF9yaW5nXSwKIAkJCQkgICAgICAgaW9jYnEsIGlvY2JxcnNwLCBscGZjX2NtZC0+dGltZW91dCk7CiAJaWYgKHJldCAhPSBJT0NCX1NVQ0NFU1MpIHsKKwkJaWYgKHJldCA9PSBJT0NCX1RJTUVET1VUKQorCQkJaW9jYnEtPmlvY2JfY21wbCA9IGxwZmNfdHNrbWdtdF9kZWZfY21wbDsKIAkJbHBmY19jbWQtPnN0YXR1cyA9IElPU1RBVF9EUklWRVJfUkVKRUNUOwotCQlyZXQgPSBGQUlMRUQ7CiAJfSBlbHNlIHsKIAkJcmV0ID0gU1VDQ0VTUzsKIAkJbHBmY19jbWQtPnJlc3VsdCA9IGlvY2JxcnNwLT5pb2NiLnVuLnVscFdvcmRbNF07CkBAIC05NzQsNyArMTAwOCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWxwZmNfcmVzZXRfbHVuX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKK2xwZmNfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNtbmQtPmRldmljZS0+aG9zdDsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopc2hvc3QtPmhvc3RkYXRhOwpAQCAtOTg0LDYgKzEwMTgsNyBAQAogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpwbm9kZSA9IHJkYXRhLT5wbm9kZTsKIAl1aW50MzJfdCBjbWRfcmVzdWx0ID0gMCwgY21kX3N0YXR1cyA9IDA7CiAJaW50IHJldCA9IEZBSUxFRDsKKwlpbnQgaW9jYl9zdGF0dXMgPSBJT0NCX1NVQ0NFU1M7CiAJaW50IGNudCwgbG9vcGNudDsKIAogCWxwZmNfYmxvY2tfZXJyb3JfaGFuZGxlcihjbW5kKTsKQEAgLTk5NSw3ICsxMDMwLDcgQEAKIAkgKi8KIAl3aGlsZSAoIDEgKSB7CiAJCWlmICghcG5vZGUpCi0JCQlyZXR1cm4gRkFJTEVEOworCQkJZ290byBvdXQ7CiAKIAkJaWYgKHBub2RlLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9NQVBQRURfTk9ERSkgewogCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC0xMDEzLDcgKzEwNDgsNyBAQAogCQkJfQogCQkJcG5vZGUgPSByZGF0YS0+cG5vZGU7CiAJCQlpZiAoIXBub2RlKQotCQkJCXJldHVybiBGQUlMRUQ7CisJCQkJZ290byBvdXQ7CiAJCX0KIAkJaWYgKHBub2RlLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9NQVBQRURfTk9ERSkKIAkJCWJyZWFrOwpAQCAtMTAyOCw3ICsxMDYzLDcgQEAKIAlscGZjX2NtZC0+cmRhdGEgPSByZGF0YTsKIAogCXJldCA9IGxwZmNfc2NzaV9wcmVwX3Rhc2tfbWdtdF9jbWQocGhiYSwgbHBmY19jbWQsIGNtbmQtPmRldmljZS0+bHVuLAotCQkJCQkgICBGQ1BfTFVOX1JFU0VUKTsKKwkJCQkJICAgRkNQX1RBUkdFVF9SRVNFVCk7CiAJaWYgKCFyZXQpCiAJCWdvdG8gb3V0X2ZyZWVfc2NzaV9idWY7CiAKQEAgLTEwNDAsMTYgKzEwNzUsMjEgQEAKIAkJZ290byBvdXRfZnJlZV9zY3NpX2J1ZjsKIAogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19GQ1AsCi0JCQkiJWQ6MDcwMyBJc3N1ZSBMVU4gUmVzZXQgdG8gVEdUICVkIExVTiAlZCAiCi0JCQkiRGF0YTogeCV4IHgleFxuIiwgcGhiYS0+YnJkX25vLCBjbW5kLT5kZXZpY2UtPmlkLAorCQkJIiVkOjA3MDMgSXNzdWUgdGFyZ2V0IHJlc2V0IHRvIFRHVCAlZCBMVU4gJWQgcnBpIHgleCAiCisJCQkibmxwX2ZsYWcgeCV4XG4iLCBwaGJhLT5icmRfbm8sIGNtbmQtPmRldmljZS0+aWQsCiAJCQljbW5kLT5kZXZpY2UtPmx1biwgcG5vZGUtPm5scF9ycGksIHBub2RlLT5ubHBfZmxhZyk7CiAKLQlyZXQgPSBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQocGhiYSwKKwlpb2NiX3N0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLAogCQkJCSAgICAgICAmcGhiYS0+c2xpLnJpbmdbcGhiYS0+c2xpLmZjcF9yaW5nXSwKIAkJCQkgICAgICAgaW9jYnEsIGlvY2JxcnNwLCBscGZjX2NtZC0+dGltZW91dCk7Ci0JaWYgKHJldCA9PSBJT0NCX1NVQ0NFU1MpCi0JCXJldCA9IFNVQ0NFU1M7CiAKKwlpZiAoaW9jYl9zdGF0dXMgPT0gSU9DQl9USU1FRE9VVCkKKwkJaW9jYnEtPmlvY2JfY21wbCA9IGxwZmNfdHNrbWdtdF9kZWZfY21wbDsKKworCWlmIChpb2NiX3N0YXR1cyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldCA9IFNVQ0NFU1M7CisJZWxzZQorCQlyZXQgPSBpb2NiX3N0YXR1czsKIAogCWNtZF9yZXN1bHQgPSBpb2NicXJzcC0+aW9jYi51bi51bHBXb3JkWzRdOwogCWNtZF9zdGF0dXMgPSBpb2NicXJzcC0+aW9jYi51bHBTdGF0dXM7CkBAIC0xMDg3LDE4ICsxMTI3LDE5IEBACiAKIAlpZiAoY250KSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0ZDUCwKLQkJCSIlZDowNzE5IExVTiBSZXNldCBJL08gZmx1c2ggZmFpbHVyZTogY250IHgleFxuIiwKKwkJCSIlZDowNzE5IGRldmljZSByZXNldCBJL08gZmx1c2ggZmFpbHVyZTogY250IHgleFxuIiwKIAkJCXBoYmEtPmJyZF9ubywgY250KTsKIAkJcmV0ID0gRkFJTEVEOwogCX0KIAogb3V0X2ZyZWVfc2NzaV9idWY6Ci0JbHBmY19yZWxlYXNlX3Njc2lfYnVmKHBoYmEsIGxwZmNfY21kKTsKLQorCWlmIChpb2NiX3N0YXR1cyAhPSBJT0NCX1RJTUVET1VUKSB7CisJCWxwZmNfcmVsZWFzZV9zY3NpX2J1ZihwaGJhLCBscGZjX2NtZCk7CisJfQogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0ZDUCwKLQkJCSIlZDowNzEzIFNDU0kgbGF5ZXIgaXNzdWVkIExVTiByZXNldCAoJWQsICVkKSAiCi0JCQkiRGF0YTogeCV4IHgleCB4JXhcbiIsCi0JCQlwaGJhLT5icmRfbm8sIGNtbmQtPmRldmljZS0+aWQsY21uZC0+ZGV2aWNlLT5sdW4sCisJCQkiJWQ6MDcxMyBTQ1NJIGxheWVyIGlzc3VlZCBkZXZpY2UgcmVzZXQgKCVkLCAlZCkgIgorCQkJInJldHVybiB4JXggc3RhdHVzIHgleCByZXN1bHQgeCV4XG4iLAorCQkJcGhiYS0+YnJkX25vLCBjbW5kLT5kZXZpY2UtPmlkLCBjbW5kLT5kZXZpY2UtPmx1biwKIAkJCXJldCwgY21kX3N0YXR1cywgY21kX3Jlc3VsdCk7CiAKIG91dDoKQEAgLTExMDcsNyArMTE0OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWxwZmNfcmVzZXRfYnVzX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKK2xwZmNfYnVzX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNtbmQtPmRldmljZS0+aG9zdDsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopc2hvc3QtPmhvc3RkYXRhOwpAQCAtMTEzNCwxMCArMTE3NSwxMiBAQAogCSAqIGZhaWwsIHRoaXMgcm91dGluZSByZXR1cm5zIGZhaWx1cmUgdG8gdGhlIG1pZGxheWVyLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBMUEZDX01BWF9UQVJHRVQ7IGkrKykgewotCQkvKiBTZWFyY2ggdGhlIG1hcHBlZCBsaXN0IGZvciB0aGlzIHRhcmdldCBJRCAqLworCQkvKiBTZWFyY2ggZm9yIG1hcHBlZCBub2RlIGJ5IHRhcmdldCBJRCAqLwogCQltYXRjaCA9IDA7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkobmRscCwgJnBoYmEtPmZjX25scG1hcF9saXN0LCBubHBfbGlzdHApIHsKLQkJCWlmICgoaSA9PSBuZGxwLT5ubHBfc2lkKSAmJiBuZGxwLT5ycG9ydCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5kbHAsICZwaGJhLT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCQlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfTUFQUEVEX05PREUgJiYKKwkJCSAgICBpID09IG5kbHAtPm5scF9zaWQgJiYKKwkJCSAgICBuZGxwLT5ycG9ydCkgewogCQkJCW1hdGNoID0gMTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTExNTIsMTMgKzExOTUsMTcgQEAKIAkJCQkiJWQ6MDcwMCBCdXMgUmVzZXQgb24gdGFyZ2V0ICVkIGZhaWxlZFxuIiwKIAkJCQlwaGJhLT5icmRfbm8sIGkpOwogCQkJZXJyX2NvdW50Kys7CisJCQlicmVhazsKIAkJfQogCX0KIAorCWlmIChyZXQgIT0gSU9DQl9USU1FRE9VVCkKKwkJbHBmY19yZWxlYXNlX3Njc2lfYnVmKHBoYmEsIGxwZmNfY21kKTsKKwogCWlmIChlcnJfY291bnQgPT0gMCkKIAkJcmV0ID0gU1VDQ0VTUzsKLQotCWxwZmNfcmVsZWFzZV9zY3NpX2J1ZihwaGJhLCBscGZjX2NtZCk7CisJZWxzZQorCQlyZXQgPSBGQUlMRUQ7CiAKIAkvKgogCSAqIEFsbCBvdXRzdGFuZGluZyB0eGNtcGxxIEkvT3Mgc2hvdWxkIGhhdmUgYmVlbiBhYm9ydGVkIGJ5CkBAIC0xMjk5LDExICsxMzQ2LDEzIEBACiAJLmluZm8JCQk9IGxwZmNfaW5mbywKIAkucXVldWVjb21tYW5kCQk9IGxwZmNfcXVldWVjb21tYW5kLAogCS5laF9hYm9ydF9oYW5kbGVyCT0gbHBmY19hYm9ydF9oYW5kbGVyLAotCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcj0gbHBmY19yZXNldF9sdW5faGFuZGxlciwKLQkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIJPSBscGZjX3Jlc2V0X2J1c19oYW5kbGVyLAorCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcj0gbHBmY19kZXZpY2VfcmVzZXRfaGFuZGxlciwKKwkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIJPSBscGZjX2J1c19yZXNldF9oYW5kbGVyLAogCS5zbGF2ZV9hbGxvYwkJPSBscGZjX3NsYXZlX2FsbG9jLAogCS5zbGF2ZV9jb25maWd1cmUJPSBscGZjX3NsYXZlX2NvbmZpZ3VyZSwKIAkuc2xhdmVfZGVzdHJveQkJPSBscGZjX3NsYXZlX2Rlc3Ryb3ksCisJLnNjYW5fZmluaXNoZWQJCT0gbHBmY19zY2FuX2ZpbmlzaGVkLAorCS5zY2FuX3N0YXJ0CQk9IGxwZmNfc2Nhbl9zdGFydCwKIAkudGhpc19pZAkJPSAtMSwKIAkuc2dfdGFibGVzaXplCQk9IExQRkNfU0dfU0VHX0NOVCwKIAkuY21kX3Blcl9sdW4JCT0gTFBGQ19DTURfUEVSX0xVTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IDlmYjY5NjAuLmExZTcyMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtNTI4LDYgKzUyOCw3IEBACiAJICogSWYgcGRvbmVfcSBpcyBlbXB0eSwgdGhlIGRyaXZlciB0aHJlYWQgZ2F2ZSB1cCB3YWl0aW5nIGFuZAogCSAqIGNvbnRpbnVlZCBydW5uaW5nLgogCSAqLworCXBtYm94cS0+bWJveF9mbGFnIHw9IExQRkNfTUJYX1dBS0U7CiAJcGRvbmVfcSA9ICh3YWl0X3F1ZXVlX2hlYWRfdCAqKSBwbWJveHEtPmNvbnRleHQxOwogCWlmIChwZG9uZV9xKQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUocGRvbmVfcSk7CkBAIC01MzgsMTEgKzUzOSwzMiBAQAogbHBmY19zbGlfZGVmX21ib3hfY21wbChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIpCiB7CiAJc3RydWN0IGxwZmNfZG1hYnVmICptcDsKKwl1aW50MTZfdCBycGk7CisJaW50IHJjOworCiAJbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChwbWItPmNvbnRleHQxKTsKKwogCWlmIChtcCkgewogCQlscGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwogCQlrZnJlZShtcCk7CiAJfQorCisJLyoKKwkgKiBJZiBhIFJFR19MT0dJTiBzdWNjZWVkZWQgIGFmdGVyIG5vZGUgaXMgZGVzdHJveWVkIG9yIG5vZGUKKwkgKiBpcyBpbiByZS1kaXNjb3ZlcnkgZHJpdmVyIG5lZWQgdG8gY2xlYW51cCB0aGUgUlBJLgorCSAqLworCWlmICghKHBoYmEtPmZjX2ZsYWcgJiBGQ19VTkxPQURJTkcpICYmCisJCShwbWItPm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSAmJgorCQkoIXBtYi0+bWIubWJ4U3RhdHVzKSkgeworCisJCXJwaSA9IHBtYi0+bWIudW4udmFyV29yZHNbMF07CisJCWxwZmNfdW5yZWdfbG9naW4ocGhiYSwgcnBpLCBwbWIpOworCQlwbWItPm1ib3hfY21wbD1scGZjX3NsaV9kZWZfbWJveF9jbXBsOworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKKwkJaWYgKHJjICE9IE1CWF9OT1RfRklOSVNIRUQpCisJCQlyZXR1cm47CisJfQorCiAJbWVtcG9vbF9mcmVlKCBwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCXJldHVybjsKIH0KQEAgLTY5MywyNSArNzE1LDggQEAKIAkJfSBlbHNlIHsKIAkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQkJLyogVHVybiBvbiBJT0NCIHByb2Nlc3NpbmcgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBwaGJhLT5zbGkubnVtX3JpbmdzOyBpKyspIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBwaGJhLT5zbGkubnVtX3JpbmdzOyBpKyspCiAJCQkJbHBmY19zbGlfdHVybl9vbl9yaW5nKHBoYmEsIGkpOwotCQkJfQotCi0JCQkvKiBGcmVlIGFueSBscGZjX2RtYWJ1ZidzIHdhaXRpbmcgZm9yIG1ib3ggY21kIGNtcGxzICovCi0JCQl3aGlsZSAoIWxpc3RfZW1wdHkoJnBoYmEtPmZyZWVidWZMaXN0KSkgewotCQkJCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXA7Ci0KLQkJCQltcCA9IE5VTEw7Ci0JCQkJbGlzdF9yZW1vdmVfaGVhZCgoJnBoYmEtPmZyZWVidWZMaXN0KSwKLQkJCQkJCSBtcCwKLQkJCQkJCSBzdHJ1Y3QgbHBmY19kbWFidWYsCi0JCQkJCQkgbGlzdCk7Ci0JCQkJaWYgKG1wKSB7Ci0JCQkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIG1wLT52aXJ0LAotCQkJCQkJICAgICAgIG1wLT5waHlzKTsKLQkJCQkJa2ZyZWUobXApOwotCQkJCX0KLQkJCX0KIAkJfQogCiAJfSB3aGlsZSAocHJvY2Vzc19uZXh0KTsKQEAgLTgzMyw2ICs4MzgsMTQgQEAKIAkJCSAqIEFsbCBvdGhlciBhcmUgcGFzc2VkIHRvIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrLgogCQkJICovCiAJCQlpZiAocHJpbmctPnJpbmdubyA9PSBMUEZDX0VMU19SSU5HKSB7CisJCQkJaWYgKGNtZGlvY2JwLT5pb2NiX2ZsYWcgJiBMUEZDX0RSSVZFUl9BQk9SVEVEKSB7CisJCQkJCWNtZGlvY2JwLT5pb2NiX2ZsYWcgJj0KKwkJCQkJCX5MUEZDX0RSSVZFUl9BQk9SVEVEOworCQkJCQlzYXZlcS0+aW9jYi51bHBTdGF0dXMgPQorCQkJCQkJSU9TVEFUX0xPQ0FMX1JFSkVDVDsKKwkJCQkJc2F2ZXEtPmlvY2IudW4udWxwV29yZFs0XSA9CisJCQkJCQlJT0VSUl9TTElfQUJPUlRFRDsKKwkJCQl9CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssCiAJCQkJCQkgICAgICAgaWZsYWcpOwogCQkJCShjbWRpb2NicC0+aW9jYl9jbXBsKSAocGhiYSwgY21kaW9jYnAsIHNhdmVxKTsKQEAgLTE0NjQsOCArMTQ3Nyw5IEBACiBpbnQKIGxwZmNfc2xpX2Fib3J0X2lvY2JfcmluZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZykKIHsKKwlMSVNUX0hFQUQoY29tcGxldGlvbnMpOwogCXN0cnVjdCBscGZjX2lvY2JxICppb2NiLCAqbmV4dF9pb2NiOwotCUlPQ0JfdCAqaWNtZCA9IE5VTEwsICpjbWQgPSBOVUxMOworCUlPQ0JfdCAqY21kID0gTlVMTDsKIAlpbnQgZXJyY250OwogCiAJZXJyY250ID0gMDsKQEAgLTE0NzQsNDYgKzE0ODgsMjggQEAKIAkgKiBGaXJzdCBkbyB0aGUgdHhxLgogCSAqLwogCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW9jYiwgbmV4dF9pb2NiLCAmcHJpbmctPnR4cSwgbGlzdCkgewotCQlsaXN0X2RlbF9pbml0KCZpb2NiLT5saXN0KTsKLQkJaWYgKGlvY2ItPmlvY2JfY21wbCkgewotCQkJaWNtZCA9ICZpb2NiLT5pb2NiOwotCQkJaWNtZC0+dWxwU3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCWljbWQtPnVuLnVscFdvcmRbNF0gPSBJT0VSUl9TTElfQUJPUlRFRDsKLQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJKGlvY2ItPmlvY2JfY21wbCkgKHBoYmEsIGlvY2IsIGlvY2IpOwotCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQl9IGVsc2UKLQkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgaW9jYik7Ci0JfQorCWxpc3Rfc3BsaWNlX2luaXQoJnByaW5nLT50eHEsICZjb21wbGV0aW9ucyk7CiAJcHJpbmctPnR4cV9jbnQgPSAwOwotCUlOSVRfTElTVF9IRUFEKCYocHJpbmctPnR4cSkpOwogCiAJLyogTmV4dCBpc3N1ZSBBQlRTIGZvciBldmVyeXRoaW5nIG9uIHRoZSB0eGNtcGxxICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlvY2IsIG5leHRfaW9jYiwgJnByaW5nLT50eGNtcGxxLCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlvY2IsIG5leHRfaW9jYiwgJnByaW5nLT50eGNtcGxxLCBsaXN0KQorCQlscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZyhwaGJhLCBwcmluZywgaW9jYik7CisKKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmY29tcGxldGlvbnMpKSB7CisJCWlvY2IgPSBsaXN0X2dldF9maXJzdCgmY29tcGxldGlvbnMsIHN0cnVjdCBscGZjX2lvY2JxLCBsaXN0KTsKIAkJY21kID0gJmlvY2ItPmlvY2I7Ci0KLQkJLyoKLQkJICogSW1lZGlhdGUgYWJvcnQgb2YgSU9DQiwgZGVxdWUgYW5kIGNhbGwgY29tcGwKLQkJICovCi0KLQkJbGlzdF9kZWxfaW5pdCgmaW9jYi0+bGlzdCk7Ci0JCXByaW5nLT50eGNtcGxxX2NudC0tOworCQlsaXN0X2RlbCgmaW9jYi0+bGlzdCk7CiAKIAkJaWYgKGlvY2ItPmlvY2JfY21wbCkgewogCQkJY21kLT51bHBTdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOwogCQkJY21kLT51bi51bHBXb3JkWzRdID0gSU9FUlJfU0xJX0FCT1JURUQ7Ci0JCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJCShpb2NiLT5pb2NiX2NtcGwpIChwaGJhLCBpb2NiLCBpb2NiKTsKLQkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJfSBlbHNlCiAJCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGlvY2IpOwogCX0KIAotCUlOSVRfTElTVF9IRUFEKCZwcmluZy0+dHhjbXBscSk7Ci0JcHJpbmctPnR4Y21wbHFfY250ID0gMDsKLQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQogCXJldHVybiBlcnJjbnQ7CiB9CiAKQEAgLTE1ODgsNiArMTU4NCw3IEBACiAJaGNfY29weSA9IHJlYWRsKHBoYmEtPkhDcmVnYWRkcik7CiAJd3JpdGVsKChoY19jb3B5ICYgfkhDX0VSSU5UX0VOQSksIHBoYmEtPkhDcmVnYWRkcik7CiAJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwlwaGJhLT5mY19mbGFnIHw9IEZDX0lHTk9SRV9FUkFUVDsKIAogCWlmIChyZWFkbChwaGJhLT5IQXJlZ2FkZHIpICYgSEFfRVJBVFQpIHsKIAkJLyogQ2xlYXIgQ2hpcCBlcnJvciBiaXQgKi8KQEAgLTE2MzAsNiArMTYyNyw3IEBACiAJfQogCiByZXN0b3JlX2hjOgorCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX0lHTk9SRV9FUkFUVDsKIAl3cml0ZWwoaGNfY29weSwgcGhiYS0+SENyZWdhZGRyKTsKIAlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLwogfQpAQCAtMTY2NSw2ICsxNjYzLDcgQEAKIAlzdGF0dXMgJj0gfkhDX0VSSU5UX0VOQTsKIAl3cml0ZWwoc3RhdHVzLCBwaGJhLT5IQ3JlZ2FkZHIpOwogCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCisJcGhiYS0+ZmNfZmxhZyB8PSBGQ19JR05PUkVfRVJBVFQ7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKIAlscGZjX2tpbGxfYm9hcmQocGhiYSwgcG1iKTsKQEAgLTE2NzQsNiArMTY3Myw5IEBACiAJaWYgKHJldHZhbCAhPSBNQlhfU1VDQ0VTUykgewogCQlpZiAocmV0dmFsICE9IE1CWF9CVVNZKQogCQkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJcGhiYS0+ZmNfZmxhZyAmPSB+RkNfSUdOT1JFX0VSQVRUOworCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0xNzAwLDYgKzE3MDIsNyBAQAogCX0KIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJcHNsaS0+c2xpX2ZsYWcgJj0gfkxQRkNfU0xJX01CT1hfQUNUSVZFOworCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX0lHTk9SRV9FUkFUVDsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAogCXBzbGktPm1ib3hfYWN0aXZlID0gTlVMTDsKQEAgLTE5ODUsNDIgKzE5ODgsNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQKLWxwZmNfbWJveF9hYm9ydChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQotewotCUxQRkNfTUJPWFFfdCAqcG1ib3g7Ci0JTUFJTEJPWF90ICptYjsKLQotCWlmIChwaGJhLT5zbGkubWJveF9hY3RpdmUpIHsKLQkJZGVsX3RpbWVyX3N5bmMoJnBoYmEtPnNsaS5tYm94X3Rtbyk7Ci0JCXBoYmEtPndvcmtfaGJhX2V2ZW50cyAmPSB+V09SS0VSX01CT1hfVE1POwotCQlwbWJveCA9IHBoYmEtPnNsaS5tYm94X2FjdGl2ZTsKLQkJbWIgPSAmcG1ib3gtPm1iOwotCQlwaGJhLT5zbGkubWJveF9hY3RpdmUgPSBOVUxMOwotCQlpZiAocG1ib3gtPm1ib3hfY21wbCkgewotCQkJbWItPm1ieFN0YXR1cyA9IE1CWF9OT1RfRklOSVNIRUQ7Ci0JCQkocG1ib3gtPm1ib3hfY21wbCkgKHBoYmEsIHBtYm94KTsKLQkJfQotCQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfU0xJX01CT1hfQUNUSVZFOwotCX0KLQotCS8qIEFib3J0IGFsbCB0aGUgbm9uIGFjdGl2ZSBtYWlsYm94IGNvbW1hbmRzLiAqLwotCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlwbWJveCA9IGxwZmNfbWJveF9nZXQocGhiYSk7Ci0Jd2hpbGUgKHBtYm94KSB7Ci0JCW1iID0gJnBtYm94LT5tYjsKLQkJaWYgKHBtYm94LT5tYm94X2NtcGwpIHsKLQkJCW1iLT5tYnhTdGF0dXMgPSBNQlhfTk9UX0ZJTklTSEVEOwotCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCQkocG1ib3gtPm1ib3hfY21wbCkgKHBoYmEsIHBtYm94KTsKLQkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJfQotCQlwbWJveCA9IGxwZmNfbWJveF9nZXQocGhiYSk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCXJldHVybjsKLX0KLQogLyohIGxwZmNfbWJveF90aW1lb3V0CiAgKgogICogXHByZQpAQCAtMjA1NSw2ICsyMDIyLDggQEAKIHsKIAlMUEZDX01CT1hRX3QgKnBtYm94OwogCU1BSUxCT1hfdCAqbWI7CisJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmc7CiAKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJaWYgKCEocGhiYS0+d29ya19oYmFfZXZlbnRzICYgV09SS0VSX01CT1hfVE1PKSkgewpAQCAtMjA2Miw4ICsyMDMxLDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCXBoYmEtPndvcmtfaGJhX2V2ZW50cyAmPSB+V09SS0VSX01CT1hfVE1POwotCiAJcG1ib3ggPSBwaGJhLT5zbGkubWJveF9hY3RpdmU7CiAJbWIgPSAmcG1ib3gtPm1iOwogCkBAIC0yMDc4LDE3ICsyMDQ1LDMyIEBACiAJCXBoYmEtPnNsaS5zbGlfZmxhZywKIAkJcGhiYS0+c2xpLm1ib3hfYWN0aXZlKTsKIAotCXBoYmEtPnNsaS5tYm94X2FjdGl2ZSA9IE5VTEw7Ci0JaWYgKHBtYm94LT5tYm94X2NtcGwpIHsKLQkJbWItPm1ieFN0YXR1cyA9IE1CWF9OT1RfRklOSVNIRUQ7Ci0JCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkocG1ib3gtPm1ib3hfY21wbCkgKHBoYmEsIHBtYm94KTsKLQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCX0KLQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfU0xJX01CT1hfQUNUSVZFOwotCisJLyogU2V0dGluZyBzdGF0ZSB1bmtub3duIHNvIGxwZmNfc2xpX2Fib3J0X2lvY2JfcmluZworCSAqIHdvdWxkIGdldCBJT0NCX0VSUk9SIGZyb20gbHBmY19zbGlfaXNzdWVfaW9jYiwgYWxsb3dpbmcKKwkgKiBpdCB0byBmYWlsIGFsbCBvdXN0YW5kaW5nIFNDU0kgSU8uCisJICovCisJcGhiYS0+aGJhX3N0YXRlID0gTFBGQ19TVEFURV9VTktOT1dOOworCXBoYmEtPndvcmtfaGJhX2V2ZW50cyAmPSB+V09SS0VSX01CT1hfVE1POworCXBoYmEtPmZjX2ZsYWcgfD0gRkNfRVNUQUJMSVNIX0xJTks7CisJcHNsaS0+c2xpX2ZsYWcgJj0gfkxQRkNfU0xJMl9BQ1RJVkU7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JbHBmY19tYm94X2Fib3J0KHBoYmEpOworCisJcHJpbmcgPSAmcHNsaS0+cmluZ1twc2xpLT5mY3BfcmluZ107CisJbHBmY19zbGlfYWJvcnRfaW9jYl9yaW5nKHBoYmEsIHByaW5nKTsKKworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX01CT1ggfCBMT0dfU0xJLAorCQkJIiVkOjAzMTYgUmVzZXR0aW5nIGJvYXJkIGR1ZSB0byBtYWlsYm94IHRpbWVvdXRcbiIsCisJCQlwaGJhLT5icmRfbm8pOworCS8qCisJICogbHBmY19vZmZsaW5lIGNhbGxzIGxwZmNfc2xpX2hiYV9kb3duIHdoaWNoIHdpbGwgY2xlYW4gdXAKKwkgKiBvbiBvdXN0YW5kaW5nIG1haWxib3ggY29tbWFuZHMuCisJICovCisJbHBmY19vZmZsaW5lX3ByZXAocGhiYSk7CisJbHBmY19vZmZsaW5lKHBoYmEpOworCWxwZmNfc2xpX2JyZHJlc3RhcnQocGhiYSk7CisJaWYgKGxwZmNfb25saW5lKHBoYmEpID09IDApCQkvKiBJbml0aWFsaXplIHRoZSBIQkEgKi8KKwkJbW9kX3RpbWVyKCZwaGJhLT5mY19lc3RhYnRtbywgamlmZmllcyArIEhaICogNjApOworCWxwZmNfdW5ibG9ja19tZ210X2lvKHBoYmEpOwogCXJldHVybjsKIH0KIApAQCAtMjMyMCw5ICsyMzAyLDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLAogCQkJCQkgICAgICAgZHJ2cl9mbGFnKTsKIAotCQkJLyogQ2FuIGJlIGluIGludGVycnVwdCBjb250ZXh0LCBkbyBub3Qgc2xlZXAgKi8KLQkJCS8qIChvciBtaWdodCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkKSAqLwotCQkJbWRlbGF5KDEpOworCQkJbXNsZWVwKDEpOwogCiAJCQlzcGluX2xvY2tfaXJxc2F2ZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGRydnJfZmxhZyk7CiAKQEAgLTI0MzAsNyArMjQxMCw3IEBACiAKIAlpZiAodW5saWtlbHkocGhiYS0+aGJhX3N0YXRlID09IExQRkNfTElOS19ET1dOKSkgewogCQkvKgotCQkgKiBPbmx5IENSRUFURV9YUkksIENMT1NFX1hSSSwgQUJPUlRfWFJJLCBhbmQgUVVFX1JJTkdfQlVGCisJCSAqIE9ubHkgQ1JFQVRFX1hSSSwgQ0xPU0VfWFJJLCBhbmQgUVVFX1JJTkdfQlVGCiAJCSAqIGNhbiBiZSBpc3N1ZWQgaWYgdGhlIGxpbmsgaXMgbm90IHVwLgogCQkgKi8KIAkJc3dpdGNoIChwaW9jYi0+aW9jYi51bHBDb21tYW5kKSB7CkBAIC0yNDQ0LDYgKzI0MjQsOCBAQAogCQkJCXBpb2NiLT5pb2NiX2NtcGwgPSBOVUxMOwogCQkJLypGQUxMVEhST1VHSCovCiAJCWNhc2UgQ01EX0NSRUFURV9YUklfQ1I6CisJCWNhc2UgQ01EX0NMT1NFX1hSSV9DTjoKKwkJY2FzZSBDTURfQ0xPU0VfWFJJX0NYOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGlvY2JfYnVzeTsKQEAgLTI2MzcsMTEgKzI2MTksMTIgQEAKIGludAogbHBmY19zbGlfaGJhX2Rvd24oc3RydWN0IGxwZmNfaGJhICogcGhiYSkKIHsKKwlMSVNUX0hFQUQoY29tcGxldGlvbnMpOwogCXN0cnVjdCBscGZjX3NsaSAqcHNsaTsKIAlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmc7CiAJTFBGQ19NQk9YUV90ICpwbWI7Ci0Jc3RydWN0IGxwZmNfaW9jYnEgKmlvY2IsICpuZXh0X2lvY2I7Ci0JSU9DQl90ICppY21kID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqaW9jYjsKKwlJT0NCX3QgKmNtZCA9IE5VTEw7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKQEAgLTI2NDksNyArMjYzMiw2IEBACiAJbHBmY19oYmFfZG93bl9wcmVwKHBoYmEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgcHNsaS0+bnVtX3JpbmdzOyBpKyspIHsKIAkJcHJpbmcgPSAmcHNsaS0+cmluZ1tpXTsKIAkJcHJpbmctPmZsYWcgfD0gTFBGQ19ERUZFUlJFRF9SSU5HX0VWRU5UOwpAQCAtMjY1OCwyOCArMjY0MCwyNSBAQAogCQkgKiBFcnJvciBldmVyeXRoaW5nIG9uIHRoZSB0eHEgc2luY2UgdGhlc2UgaW9jYnMgaGF2ZSBub3QgYmVlbgogCQkgKiBnaXZlbiB0byB0aGUgRlcgeWV0LgogCQkgKi8KKwkJbGlzdF9zcGxpY2VfaW5pdCgmcHJpbmctPnR4cSwgJmNvbXBsZXRpb25zKTsKIAkJcHJpbmctPnR4cV9jbnQgPSAwOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpb2NiLCBuZXh0X2lvY2IsICZwcmluZy0+dHhxLCBsaXN0KSB7Ci0JCQlsaXN0X2RlbF9pbml0KCZpb2NiLT5saXN0KTsKLQkJCWlmIChpb2NiLT5pb2NiX2NtcGwpIHsKLQkJCQlpY21kID0gJmlvY2ItPmlvY2I7Ci0JCQkJaWNtZC0+dWxwU3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCQlpY21kLT51bi51bHBXb3JkWzRdID0gSU9FUlJfU0xJX0RPV047Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssCi0JCQkJCQkgICAgICAgZmxhZ3MpOwotCQkJCShpb2NiLT5pb2NiX2NtcGwpIChwaGJhLCBpb2NiLCBpb2NiKTsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQkJCX0gZWxzZQotCQkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgaW9jYik7Ci0JCX0KLQotCQlJTklUX0xJU1RfSEVBRCgmKHByaW5nLT50eHEpKTsKLQogCX0KLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmNvbXBsZXRpb25zKSkgeworCQlpb2NiID0gbGlzdF9nZXRfZmlyc3QoJmNvbXBsZXRpb25zLCBzdHJ1Y3QgbHBmY19pb2NicSwgbGlzdCk7CisJCWNtZCA9ICZpb2NiLT5pb2NiOworCQlsaXN0X2RlbCgmaW9jYi0+bGlzdCk7CisKKwkJaWYgKGlvY2ItPmlvY2JfY21wbCkgeworCQkJY21kLT51bHBTdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOworCQkJY21kLT51bi51bHBXb3JkWzRdID0gSU9FUlJfU0xJX0RPV047CisJCQkoaW9jYi0+aW9jYl9jbXBsKSAocGhiYSwgaW9jYiwgaW9jYik7CisJCX0gZWxzZQorCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBpb2NiKTsKKwl9CisKIAkvKiBSZXR1cm4gYW55IGFjdGl2ZSBtYm94IGNtZHMgKi8KIAlkZWxfdGltZXJfc3luYygmcHNsaS0+bWJveF90bW8pOwogCXNwaW5fbG9ja19pcnFzYXZlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwpAQCAtMjc2OCw4NSArMjc0NywxMzggQEAKIH0KIAogc3RhdGljIHZvaWQKLWxwZmNfc2xpX2Fib3J0X2Vsc3JlcV9jbXBsKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICogY21kaW9jYiwKLQkJCSAgIHN0cnVjdCBscGZjX2lvY2JxICogcnNwaW9jYikKK2xwZmNfc2xpX2Fib3J0X2Vsc19jbXBsKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICogY21kaW9jYiwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICogcnNwaW9jYikKIHsKLQlzdHJ1Y3QgbHBmY19kbWFidWYgKmJ1Zl9wdHIsICpidWZfcHRyMTsKLQkvKiBGcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBFTFNfUkVRVUVTVDY0IElPQ0IgdGhlIGRyaXZlcgotCSAqIGp1c3QgYWJvcnRlZC4KLQkgKiBJbiB0aGlzIGNhc2UsIGNvbnRleHQyICA9IGNtZCwgIGNvbnRleHQyLT5uZXh0ID0gcnNwLCBjb250ZXh0MyA9IGJwbAotCSAqLwotCWlmIChjbWRpb2NiLT5jb250ZXh0MikgewotCQlidWZfcHRyMSA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgY21kaW9jYi0+Y29udGV4dDI7CisJSU9DQl90ICppcnNwOworCXVpbnQxNl90IGFib3J0X2lvdGFnLCBhYm9ydF9jb250ZXh0OworCXN0cnVjdCBscGZjX2lvY2JxICphYm9ydF9pb2NiLCAqcnNwX2FiX2lvY2I7CisJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nID0gJnBoYmEtPnNsaS5yaW5nW0xQRkNfRUxTX1JJTkddOwogCi0JCS8qIEZyZWUgdGhlIHJlc3BvbnNlIElPQ0IgYmVmb3JlIGNvbXBsZXRpbmcgdGhlIGFib3J0Ci0JCSAgIGNvbW1hbmQuICAqLwotCQlidWZfcHRyID0gTlVMTDsKLQkJbGlzdF9yZW1vdmVfaGVhZCgoJmJ1Zl9wdHIxLT5saXN0KSwgYnVmX3B0ciwKLQkJCQkgc3RydWN0IGxwZmNfZG1hYnVmLCBsaXN0KTsKLQkJaWYgKGJ1Zl9wdHIpIHsKLQkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGJ1Zl9wdHItPnZpcnQsIGJ1Zl9wdHItPnBoeXMpOwotCQkJa2ZyZWUoYnVmX3B0cik7CisJYWJvcnRfaW9jYiA9IE5VTEw7CisJaXJzcCA9ICZyc3Bpb2NiLT5pb2NiOworCisJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCisJaWYgKGlyc3AtPnVscFN0YXR1cykgeworCQlhYm9ydF9jb250ZXh0ID0gY21kaW9jYi0+aW9jYi51bi5hY3hyaS5hYm9ydENvbnRleHRUYWc7CisJCWFib3J0X2lvdGFnID0gY21kaW9jYi0+aW9jYi51bi5hY3hyaS5hYm9ydElvVGFnOworCisJCWlmIChhYm9ydF9pb3RhZyAhPSAwICYmIGFib3J0X2lvdGFnIDw9IHBoYmEtPnNsaS5sYXN0X2lvdGFnKQorCQkJYWJvcnRfaW9jYiA9IHBoYmEtPnNsaS5pb2NicV9sb29rdXBbYWJvcnRfaW90YWddOworCisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKKwkJCQkiJWQ6MDMyNyBDYW5ub3QgYWJvcnQgZWxzIGlvY2IgJXAiCisJCQkJIiB3aXRoIHRhZyAleCBjb250ZXh0ICV4XG4iLAorCQkJCXBoYmEtPmJyZF9ubywgYWJvcnRfaW9jYiwKKwkJCQlhYm9ydF9pb3RhZywgYWJvcnRfY29udGV4dCk7CisKKwkJLyoKKwkJICogbWFrZSBzdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGlvY2JxIGJlZm9yZSB0YWtpbmcgaXQKKwkJICogb2ZmIHRoZSB0eGNtcGxxIGFuZCB0cnkgdG8gY2FsbCBjb21wbGV0aW9uIHJvdXRpbmUuCisJCSAqLworCQlpZiAoYWJvcnRfaW9jYiAmJgorCQkgICAgYWJvcnRfaW9jYi0+aW9jYi51bHBDb250ZXh0ID09IGFib3J0X2NvbnRleHQgJiYKKwkJICAgIGFib3J0X2lvY2ItPmlvY2JfZmxhZyAmIExQRkNfRFJJVkVSX0FCT1JURUQpIHsKKwkJCWxpc3RfZGVsKCZhYm9ydF9pb2NiLT5saXN0KTsKKwkJCXByaW5nLT50eGNtcGxxX2NudC0tOworCisJCQlyc3BfYWJfaW9jYiA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKKwkJCWlmIChyc3BfYWJfaW9jYiA9PSBOVUxMKQorCQkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgYWJvcnRfaW9jYik7CisJCQllbHNlIHsKKwkJCQlhYm9ydF9pb2NiLT5pb2NiX2ZsYWcgJj0KKwkJCQkJfkxQRkNfRFJJVkVSX0FCT1JURUQ7CisJCQkJcnNwX2FiX2lvY2ItPmlvY2IudWxwU3RhdHVzID0KKwkJCQkJSU9TVEFUX0xPQ0FMX1JFSkVDVDsKKwkJCQlyc3BfYWJfaW9jYi0+aW9jYi51bi51bHBXb3JkWzRdID0KKwkJCQkJSU9FUlJfU0xJX0FCT1JURUQ7CisJCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQkJKGFib3J0X2lvY2ItPmlvY2JfY21wbCkKKwkJCQkJKHBoYmEsIGFib3J0X2lvY2IsIHJzcF9hYl9pb2NiKTsKKwkJCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3BfYWJfaW9jYik7CisJCQl9CiAJCX0KLQkJbHBmY19tYnVmX2ZyZWUocGhiYSwgYnVmX3B0cjEtPnZpcnQsIGJ1Zl9wdHIxLT5waHlzKTsKLQkJa2ZyZWUoYnVmX3B0cjEpOwotCX0KLQotCWlmIChjbWRpb2NiLT5jb250ZXh0MykgewotCQlidWZfcHRyID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBjbWRpb2NiLT5jb250ZXh0MzsKLQkJbHBmY19tYnVmX2ZyZWUocGhiYSwgYnVmX3B0ci0+dmlydCwgYnVmX3B0ci0+cGh5cyk7Ci0JCWtmcmVlKGJ1Zl9wdHIpOwogCX0KIAogCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYik7CisJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJcmV0dXJuOwogfQogCiBpbnQKLWxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnMzIoc3RydWN0IGxwZmNfaGJhICogcGhiYSwKLQkJCSAgICAgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiBwcmluZywKLQkJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKiBjbWRpb2NiKQorbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcoc3RydWN0IGxwZmNfaGJhICogcGhiYSwKKwkJCSAgIHN0cnVjdCBscGZjX3NsaV9yaW5nICogcHJpbmcsCisJCQkgICBzdHJ1Y3QgbHBmY19pb2NicSAqIGNtZGlvY2IpCiB7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmFidHNpb2NicDsKIAlJT0NCX3QgKmljbWQgPSBOVUxMOwogCUlPQ0JfdCAqaWFidCA9IE5VTEw7CisJaW50IHJldHZhbCA9IElPQ0JfRVJST1I7CisKKwkvKiBUaGVyZSBhcmUgY2VydGFpbiBjb21tYW5kIHR5cGVzIHdlIGRvbid0IHdhbnQKKwkgKiB0byBhYm9ydC4KKwkgKi8KKwlpY21kID0gJmNtZGlvY2ItPmlvY2I7CisJaWYgKChpY21kLT51bHBDb21tYW5kID09IENNRF9BQk9SVF9YUklfQ04pIHx8CisJICAgIChpY21kLT51bHBDb21tYW5kID09IENNRF9DTE9TRV9YUklfQ04pKQorCQlyZXR1cm4gMDsKKworCS8qIElmIHdlJ3JlIHVubG9hZGluZywgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgc28gd2UKKwkgKiBuZWVkIHRvIGNsZWFudXAgdGhlIGlvY2IgaGVyZS4KKwkgKi8KKwlpZiAocGhiYS0+ZmNfZmxhZyAmIEZDX1VOTE9BRElORykKKwkJZ290byBhYm9ydF9pb3RhZ19leGl0OwogCiAJLyogaXNzdWUgQUJUUyBmb3IgdGhpcyBJT0NCIGJhc2VkIG9uIGlvdGFnICovCiAJYWJ0c2lvY2JwID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOwogCWlmIChhYnRzaW9jYnAgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKKwkvKiBUaGlzIHNpZ25hbHMgdGhlIHJlc3BvbnNlIHRvIHNldCB0aGUgY29ycmVjdCBzdGF0dXMKKwkgKiBiZWZvcmUgY2FsbGluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyLgorCSAqLworCWNtZGlvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX0RSSVZFUl9BQk9SVEVEOworCiAJaWFidCA9ICZhYnRzaW9jYnAtPmlvY2I7Ci0JaWNtZCA9ICZjbWRpb2NiLT5pb2NiOwotCXN3aXRjaCAoaWNtZC0+dWxwQ29tbWFuZCkgewotCWNhc2UgQ01EX0VMU19SRVFVRVNUNjRfQ1I6Ci0JCS8qIEV2ZW4gdGhvdWdoIHdlIGFib3J0IHRoZSBFTFMgY29tbWFuZCwgdGhlIGZpcm13YXJlIG1heSBhY2Nlc3MKLQkJICogdGhlIEJQTCBvciBvdGhlciByZXNvdXJjZXMgYmVmb3JlIGl0IHByb2Nlc3NlcyBvdXIKLQkJICogQUJPUlRfTVhSSTY0LiBUaHVzIHdlIG11c3QgZGVsYXkgcmV1c2luZyB0aGUgY21kaW9jYgotCQkgKiByZXNvdXJjZXMgdGlsbCB0aGUgYWN0dWFsIGFib3J0IHJlcXVlc3QgY29tcGxldGVzLgotCQkgKi8KLQkJYWJ0c2lvY2JwLT5jb250ZXh0MSA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKWljbWQtPnVscENvbW1hbmQpOwotCQlhYnRzaW9jYnAtPmNvbnRleHQyID0gY21kaW9jYi0+Y29udGV4dDI7Ci0JCWFidHNpb2NicC0+Y29udGV4dDMgPSBjbWRpb2NiLT5jb250ZXh0MzsKLQkJY21kaW9jYi0+Y29udGV4dDIgPSBOVUxMOwotCQljbWRpb2NiLT5jb250ZXh0MyA9IE5VTEw7Ci0JCWFidHNpb2NicC0+aW9jYl9jbXBsID0gbHBmY19zbGlfYWJvcnRfZWxzcmVxX2NtcGw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgYWJ0c2lvY2JwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWFidC0+dW4uYW14cmkuYWJvcnRUeXBlID0gQUJPUlRfVFlQRV9BQlRTOwotCWlhYnQtPnVuLmFteHJpLmlvdGFnMzIgPSBpY21kLT51bi5lbHNyZXE2NC5iZGwudWxwSW9UYWczMjsKLQorCWlhYnQtPnVuLmFjeHJpLmFib3J0VHlwZSA9IEFCT1JUX1RZUEVfQUJUUzsKKwlpYWJ0LT51bi5hY3hyaS5hYm9ydENvbnRleHRUYWcgPSBpY21kLT51bHBDb250ZXh0OworCWlhYnQtPnVuLmFjeHJpLmFib3J0SW9UYWcgPSBpY21kLT51bHBJb1RhZzsKIAlpYWJ0LT51bHBMZSA9IDE7Ci0JaWFidC0+dWxwQ2xhc3MgPSBDTEFTUzM7Ci0JaWFidC0+dWxwQ29tbWFuZCA9IENNRF9BQk9SVF9NWFJJNjRfQ047CisJaWFidC0+dWxwQ2xhc3MgPSBpY21kLT51bHBDbGFzczsKIAotCWlmIChscGZjX3NsaV9pc3N1ZV9pb2NiKHBoYmEsIHByaW5nLCBhYnRzaW9jYnAsIDApID09IElPQ0JfRVJST1IpIHsKLQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBhYnRzaW9jYnApOwotCQlyZXR1cm4gMDsKKwlpZiAocGhiYS0+aGJhX3N0YXRlID49IExQRkNfTElOS19VUCkKKwkJaWFidC0+dWxwQ29tbWFuZCA9IENNRF9BQk9SVF9YUklfQ047CisJZWxzZQorCQlpYWJ0LT51bHBDb21tYW5kID0gQ01EX0NMT1NFX1hSSV9DTjsKKworCWFidHNpb2NicC0+aW9jYl9jbXBsID0gbHBmY19zbGlfYWJvcnRfZWxzX2NtcGw7CisKKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfU0xJLAorCQkJIiVkOjAzMzkgQWJvcnQgeHJpIHgleCwgb3JpZ2luYWwgaW90YWcgeCV4LCBhYm9ydCAiCisJCQkiY21kIGlvdGFnIHgleFxuIiwKKwkJCXBoYmEtPmJyZF9ubywgaWFidC0+dW4uYWN4cmkuYWJvcnRDb250ZXh0VGFnLAorCQkJaWFidC0+dW4uYWN4cmkuYWJvcnRJb1RhZywgYWJ0c2lvY2JwLT5pb3RhZyk7CisJcmV0dmFsID0gbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCBwcmluZywgYWJ0c2lvY2JwLCAwKTsKKworYWJvcnRfaW90YWdfZXhpdDoKKworCS8qIElmIHdlIGNvdWxkIG5vdCBpc3N1ZSBhbiBhYm9ydCBkZXF1ZXVlIHRoZSBpb2NiIGFuZCBoYW5kbGUKKwkgKiB0aGUgY29tcGxldGlvbiBoZXJlLgorCSAqLworCWlmIChyZXR2YWwgPT0gSU9DQl9FUlJPUikgeworCQlsaXN0X2RlbCgmY21kaW9jYi0+bGlzdCk7CisJCXByaW5nLT50eGNtcGxxX2NudC0tOworCisJCWlmIChjbWRpb2NiLT5pb2NiX2NtcGwpIHsKKwkJCWljbWQtPnVscFN0YXR1cyA9IElPU1RBVF9MT0NBTF9SRUpFQ1Q7CisJCQlpY21kLT51bi51bHBXb3JkWzRdID0gSU9FUlJfU0xJX0FCT1JURUQ7CisJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJCShjbWRpb2NiLT5pb2NiX2NtcGwpIChwaGJhLCBjbWRpb2NiLCBjbWRpb2NiKTsKKwkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJfSBlbHNlCisJCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2IpOwogCX0KIAogCXJldHVybiAxOwpAQCAtMjkxOCw5ICsyOTUwLDExIEBACiBscGZjX3NsaV9hYm9ydF9mY3BfY21wbChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqIGNtZGlvY2IsCiAJCQkgICBzdHJ1Y3QgbHBmY19pb2NicSAqIHJzcGlvY2IpCiB7Ci0Jc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBpZmxhZ3MpOwogCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYik7Ci0Jc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGlmbGFncyk7CiAJcmV0dXJuOwogfQogCkBAIC0zMDQzLDIyICszMDc3LDIyIEBACiAJCQkJdGltZW91dF9yZXEpOwogCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKLQkJaWYgKHRpbWVsZWZ0ID09IDApIHsKKwkJaWYgKHBpb2NiLT5pb2NiX2ZsYWcgJiBMUEZDX0lPX1dBS0UpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19TTEksCisJCQkJCSIlZDowMzMxIElPQ0Igd2FrZSBzaWduYWxlZFxuIiwKKwkJCQkJcGhiYS0+YnJkX25vKTsKKwkJfSBlbHNlIGlmICh0aW1lbGVmdCA9PSAwKSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCiAJCQkJCSIlZDowMzM4IElPQ0Igd2FpdCB0aW1lb3V0IGVycm9yIC0gbm8gIgogCQkJCQkid2FrZSByZXNwb25zZSBEYXRhIHgleFxuIiwKIAkJCQkJcGhiYS0+YnJkX25vLCB0aW1lb3V0KTsKIAkJCXJldHZhbCA9IElPQ0JfVElNRURPVVQ7Ci0JCX0gZWxzZSBpZiAoIShwaW9jYi0+aW9jYl9mbGFnICYgTFBGQ19JT19XQUtFKSkgeworCQl9IGVsc2UgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAogCQkJCQkiJWQ6MDMzMCBJT0NCIHdha2UgTk9UIHNldCwgIgogCQkJCQkiRGF0YSB4JXggeCVseFxuIiwgcGhiYS0+YnJkX25vLAogCQkJCQl0aW1lb3V0LCAodGltZWxlZnQgLyBqaWZmaWVzKSk7CiAJCQlyZXR2YWwgPSBJT0NCX1RJTUVET1VUOwotCQl9IGVsc2UgewotCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX1NMSSwKLQkJCQkJIiVkOjAzMzEgSU9DQiB3YWtlIHNpZ25hbGVkXG4iLAotCQkJCQlwaGJhLT5icmRfbm8pOwogCQl9CiAJfSBlbHNlIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX1NMSSwKQEAgLTMwODcsOCArMzEyMSw2IEBACiAJCQkgdWludDMyX3QgdGltZW91dCkKIHsKIAlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRF9PTlNUQUNLKGRvbmVfcSk7Ci0JREVDTEFSRV9XQUlUUVVFVUUod3FfZW50cnksIGN1cnJlbnQpOwotCXVpbnQzMl90IHRpbWVsZWZ0ID0gMDsKIAlpbnQgcmV0dmFsOwogCiAJLyogVGhlIGNhbGxlciBtdXN0IGxlYXZlIGNvbnRleHQxIGVtcHR5LiAqLwpAQCAtMzEwMSwyNyArMzEzMywyNSBAQAogCS8qIHNldHVwIGNvbnRleHQgZmllbGQgdG8gcGFzcyB3YWl0X3F1ZXVlIHBvaW50ZXIgdG8gd2FrZSBmdW5jdGlvbiAgKi8KIAlwbWJveHEtPmNvbnRleHQxID0gJmRvbmVfcTsKIAotCS8qIHN0YXJ0IHRvIHNsZWVwIGJlZm9yZSB3ZSB3YWl0LCB0byBhdm9pZCByYWNlcyAqLwotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JYWRkX3dhaXRfcXVldWUoJmRvbmVfcSwgJndxX2VudHJ5KTsKLQogCS8qIG5vdyBpc3N1ZSB0aGUgY29tbWFuZCAqLwogCXJldHZhbCA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1ib3hxLCBNQlhfTk9XQUlUKTsKIAogCWlmIChyZXR2YWwgPT0gTUJYX0JVU1kgfHwgcmV0dmFsID09IE1CWF9TVUNDRVNTKSB7Ci0JCXRpbWVsZWZ0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0ICogSFopOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChkb25lX3EsCisJCQkJcG1ib3hxLT5tYm94X2ZsYWcgJiBMUEZDX01CWF9XQUtFLAorCQkJCXRpbWVvdXQgKiBIWik7CisKIAkJcG1ib3hxLT5jb250ZXh0MSA9IE5VTEw7Ci0JCS8qIGlmIHNjaGVkdWxlX3RpbWVvdXQgcmV0dXJucyAwLCB3ZSB0aW1lZCBvdXQgYW5kIHdlcmUgbm90Ci0JCSAgIHdva2VuIHVwICovCi0JCWlmICgodGltZWxlZnQgPT0gMCkgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlyZXR2YWwgPSBNQlhfVElNRU9VVDsKLQkJZWxzZQorCQkvKgorCQkgKiBpZiBMUEZDX01CWF9XQUtFIGZsYWcgaXMgc2V0IHRoZSBtYWlsYm94IGlzIGNvbXBsZXRlZAorCQkgKiBlbHNlIGRvIG5vdCBmcmVlIHRoZSByZXNvdXJjZXMuCisJCSAqLworCQlpZiAocG1ib3hxLT5tYm94X2ZsYWcgJiBMUEZDX01CWF9XQUtFKQogCQkJcmV0dmFsID0gTUJYX1NVQ0NFU1M7CisJCWVsc2UKKwkJCXJldHZhbCA9IE1CWF9USU1FT1VUOwogCX0KIAotCi0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmZG9uZV9xLCAmd3FfZW50cnkpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTMxODQsNiArMzIxNCwxMSBAQAogCSAqLwogCXNwaW5fbG9jayhwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWhhX2NvcHkgPSByZWFkbChwaGJhLT5IQXJlZ2FkZHIpOworCS8qIElmIHNvbWVib2R5IGlzIHdhaXRpbmcgdG8gaGFuZGxlIGFuIGVyYXR0IGRvbid0IHByb2Nlc3MgaXQKKwkgKiBoZXJlLiAgVGhlIGJyZGtpbGwgZnVuY3Rpb24gd2lsbCBkbyB0aGlzLgorCSAqLworCWlmIChwaGJhLT5mY19mbGFnICYgRkNfSUdOT1JFX0VSQVRUKQorCQloYV9jb3B5ICY9IH5IQV9FUkFUVDsKIAl3cml0ZWwoKGhhX2NvcHkgJiB+KEhBX0xBVFQgfCBIQV9FUkFUVCkpLCBwaGJhLT5IQXJlZ2FkZHIpOwogCXJlYWRsKHBoYmEtPkhBcmVnYWRkcik7IC8qIGZsdXNoICovCiAJc3Bpbl91bmxvY2socGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCmluZGV4IGE0MzU0OTkuLjQxYzM4ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMzksOSArMzksMTAgQEAKIAlJT0NCX3QgaW9jYjsJCS8qIElPQ0IgY21kICovCiAJdWludDhfdCByZXRyeTsJCS8qIHJldHJ5IGNvdW50ZXIgZm9yIElPQ0IgY21kIC0gaWYgbmVlZGVkICovCiAJdWludDhfdCBpb2NiX2ZsYWc7Ci0jZGVmaW5lIExQRkNfSU9fTElCREZDCTEJLyogbGliZGZjIGlvY2IgKi8KLSNkZWZpbmUgTFBGQ19JT19XQUtFCTIJLyogSGlnaCBQcmlvcml0eSBRdWV1ZSBzaWduYWwgZmxhZyAqLwotI2RlZmluZSBMUEZDX0lPX0ZDUAk0CS8qIEZDUCBjb21tYW5kIC0tIGlvY2JxIGluIHNjc2lfYnVmICovCisjZGVmaW5lIExQRkNfSU9fTElCREZDCQkxCS8qIGxpYmRmYyBpb2NiICovCisjZGVmaW5lIExQRkNfSU9fV0FLRQkJMgkvKiBIaWdoIFByaW9yaXR5IFF1ZXVlIHNpZ25hbCBmbGFnICovCisjZGVmaW5lIExQRkNfSU9fRkNQCQk0CS8qIEZDUCBjb21tYW5kIC0tIGlvY2JxIGluIHNjc2lfYnVmICovCisjZGVmaW5lIExQRkNfRFJJVkVSX0FCT1JURUQJOAkvKiBkcml2ZXIgYWJvcnRlZCB0aGlzIHJlcXVlc3QgKi8KIAogCXVpbnQ4X3QgYWJvcnRfY291bnQ7CiAJdWludDhfdCByc3ZkMjsKQEAgLTY3LDYgKzY4LDggQEAKICNkZWZpbmUgSU9DQl9FUlJPUiAgICAgICAgICAyCiAjZGVmaW5lIElPQ0JfVElNRURPVVQgICAgICAgMwogCisjZGVmaW5lIExQRkNfTUJYX1dBS0UJMQorCiB0eXBlZGVmIHN0cnVjdCBscGZjTWJveHEgewogCS8qIE1CT1hRcyBhcmUgdXNlZCBpbiBzaW5nbGUgbGlua2VkIGxpc3RzICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBwdHIgdG8gbmV4dCBtYWlsYm94IGNvbW1hbmQgKi8KQEAgLTc1LDYgKzc4LDcgQEAKIAl2b2lkICpjb250ZXh0MjsJCS8qIGNhbGxlciBjb250ZXh0IGluZm9ybWF0aW9uICovCiAKIAl2b2lkICgqbWJveF9jbXBsKSAoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjTWJveHEgKik7CisJdWludDhfdCBtYm94X2ZsYWc7CiAKIH0gTFBGQ19NQk9YUV90OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCmluZGV4IGE2MWVmM2QxLi45MmE5MTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMTgsMTIgKzE4LDEyIEBACiAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4xLjExIgorI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjEuMTIiCiAKICNkZWZpbmUgTFBGQ19EUklWRVJfTkFNRSAibHBmYyIKIAogI2RlZmluZSBMUEZDX01PRFVMRV9ERVNDICJFbXVsZXggTGlnaHRQdWxzZSBGaWJyZSBDaGFubmVsIFNDU0kgZHJpdmVyICIgXAogCQlMUEZDX0RSSVZFUl9WRVJTSU9OCi0jZGVmaW5lIExQRkNfQ09QWVJJR0hUICJDb3B5cmlnaHQoYykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIgorI2RlZmluZSBMUEZDX0NPUFlSSUdIVCAiQ29weXJpZ2h0KGMpIDIwMDQtMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiIKIAogI2RlZmluZSBERkNfQVBJX1ZFUlNJT04gIjAuMC4wIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21hYzUzYzk0LmMgYi9kcml2ZXJzL3Njc2kvbWFjNTNjOTQuYwppbmRleCA3NTNkODgzLi41ODA2ZWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWFjNTNjOTQuYworKysgYi9kcml2ZXJzL3Njc2kvbWFjNTNjOTQuYwpAQCAtNDcxLDcgKzQ3MSw3IEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCi0gICAgICAgCWNsa3Byb3AgPSBnZXRfcHJvcGVydHkobm9kZSwgImNsb2NrLWZyZXF1ZW5jeSIsICZwcm9wbGVuKTsKKwljbGtwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJjbG9jay1mcmVxdWVuY3kiLCAmcHJvcGxlbik7CiAgICAgICAgCWlmIChjbGtwcm9wID09IE5VTEwgfHwgcHJvcGxlbiAhPSBzaXplb2YoaW50KSkgewogICAgICAgIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IGNsb2NrIGZyZXF1ZW5jeSwgIgogICAgICAgIAkJICAgICAgICJhc3N1bWluZyAyNU1IelxuIiwgbm9kZS0+ZnVsbF9uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKaW5kZXggN2ZjNmUwNi4uM2NjZTc1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKQEAgLTE3NTQsNyArMTc1NCw4IEBACiAJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IDEwMDAwOyBjb3VudGVyKyspIHsKIAkJaWYgKCFtYm94LT5tX2luLmJ1c3kpCiAJCQlyZXR1cm4gMDsKLQkJdWRlbGF5KDEwMCk7IHlpZWxkKCk7CisJCXVkZWxheSgxMDApOworCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJcmV0dXJuIC0xOwkJLyogZ2l2ZSB1cCBhZnRlciAxIHNlY29uZCAqLwogfQpAQCAtMzE3Nyw3ICszMTc4LDEwIEBACiAKIAlyZXR1cm4gbGVuOwogfQotCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1lZ2FfY3JlYXRlX3Byb2NfZW50cnkoaW50IGluZGV4LCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCkKK3sKK30KICNlbmRpZgogCiAKQEAgLTQzNDIsNyArNDM0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLQorI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAvKioKICAqIG1lZ2FfYWRhcGlucSgpCiAgKiBAYWRhcHRlciAtIHBvaW50ZXIgdG8gb3VyIHNvZnQgc3RhdGUKQEAgLTQ0NDcsNyArNDQ1MSw3IEBACiAKIAlyZXR1cm4gcnZhbDsKIH0KLQorI2VuZGlmCiAKIC8qKgogICogbWVnYV9pbnRlcm5hbF9jb21tYW5kKCkKQEAgLTQ5NjUsNyArNDk2OSw2IEBACiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoYWRhcHRlcl90ICopaG9zdC0+aG9zdGRhdGE7Ci0JY2hhcglidWZbMTJdID0geyAwIH07CiAKIAlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOwogCkBAIC01MDExLDggKzUwMTQsMTEgQEAKIAkJcmVtb3ZlX3Byb2NfZW50cnkoInJhaWRkcml2ZXMtMzAtMzkiLAogCQkJCWFkYXB0ZXItPmNvbnRyb2xsZXJfcHJvY19kaXJfZW50cnkpOwogI2VuZGlmCi0JCXNwcmludGYoYnVmLCAiaGJhJWQiLCBhZGFwdGVyLT5ob3N0LT5ob3N0X25vKTsKLQkJcmVtb3ZlX3Byb2NfZW50cnkoYnVmLCBtZWdhX3Byb2NfZGlyX2VudHJ5KTsKKwkJeworCQkJY2hhcglidWZbMTJdID0geyAwIH07CisJCQlzcHJpbnRmKGJ1ZiwgImhiYSVkIiwgYWRhcHRlci0+aG9zdC0+aG9zdF9ubyk7CisJCQlyZW1vdmVfcHJvY19lbnRyeShidWYsIG1lZ2FfcHJvY19kaXJfZW50cnkpOworCQl9CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmgKaW5kZXggYzZlNzQ2NC4uZWU3MGJkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmgKQEAgLTEwMDIsNyArMTAwMiw2IEBACiBzdGF0aWMgaW50IG1lZ2FyYWlkX2Fib3J0X2FuZF9yZXNldChhZGFwdGVyX3QgKiwgU2NzaV9DbW5kICosIGludCk7CiBzdGF0aWMgaW50IG1lZ2FyYWlkX2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgc3RydWN0IGJsb2NrX2RldmljZSAqLAogCQlzZWN0b3JfdCwgaW50IFtdKTsKLXN0YXRpYyBpbnQgbWVnYV9wcmludF9pbnF1aXJ5KGNoYXIgKiwgY2hhciAqKTsKIAogc3RhdGljIGludCBtZWdhX2J1aWxkX3NnbGlzdCAoYWRhcHRlcl90ICphZGFwdGVyLCBzY2JfdCAqc2NiLAogCQkJICAgICAgdTMyICpidWZmZXIsIHUzMiAqbGVuZ3RoKTsKQEAgLTEwMjQsNiArMTAyMyw3IEBACiBzdGF0aWMgaW50IG1lZ2FfaXNfYmlvc19lbmFibGVkIChhZGFwdGVyX3QgKik7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludCBtZWdhX3ByaW50X2lucXVpcnkoY2hhciAqLCBjaGFyICopOwogc3RhdGljIHZvaWQgbWVnYV9jcmVhdGVfcHJvY19lbnRyeShpbnQsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKTsKIHN0YXRpYyBpbnQgcHJvY19yZWFkX2NvbmZpZyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOwogc3RhdGljIGludCBwcm9jX3JlYWRfc3RhdChjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOwpAQCAtMTA0MCwxMCArMTA0MCwxMCBAQAogc3RhdGljIGludCBwcm9jX3JkcnZfMzAoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsKIHN0YXRpYyBpbnQgcHJvY19yZHJ2XzQwKGNoYXIgKiwgY2hhciAqKiwgb2ZmX3QsIGludCwgaW50ICosIHZvaWQgKik7CiBzdGF0aWMgaW50IHByb2NfcmRydihhZGFwdGVyX3QgKiwgY2hhciAqLCBpbnQsIGludCk7Ci0jZW5kaWYKIAogc3RhdGljIGludCBtZWdhX2FkYXBpbnEoYWRhcHRlcl90ICosIGRtYV9hZGRyX3QpOwogc3RhdGljIGludCBtZWdhX2ludGVybmFsX2Rldl9pbnF1aXJ5KGFkYXB0ZXJfdCAqLCB1OCwgdTgsIGRtYV9hZGRyX3QpOworI2VuZGlmCiAKIHN0YXRpYyBpbnQgbWVnYV9zdXBwb3J0X2V4dF9jZGIoYWRhcHRlcl90ICopOwogc3RhdGljIG1lZ2FfcGFzc3RocnUqIG1lZ2FfcHJlcGFyZV9wYXNzdGhydShhZGFwdGVyX3QgKiwgc2NiX3QgKiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tbS5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmMKaW5kZXggZjMzYTY3OC4uODRkOWMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqCiAgKiBDb21tb24gbWFuYWdlbWVudCBtb2R1bGUKICAqLwotCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJtZWdhcmFpZF9tbS5oIgogCiAKQEAgLTYwLDcgKzYwLDcgQEAKIEVYUE9SVF9TWU1CT0wobXJhaWRfbW1fYWRhcHRlcl9hcHBfaGFuZGxlKTsKIAogc3RhdGljIGludCBtYWpvcm5vOwotc3RhdGljIHVpbnQzMl90IGRydnJfdmVyCT0gMHgwMjIwMDIwNjsKK3N0YXRpYyB1aW50MzJfdCBkcnZyX3Zlcgk9IDB4MDIyMDAyMDc7CiAKIHN0YXRpYyBpbnQgYWRhcHRlcnNfY291bnRfZzsKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGFkYXB0ZXJzX2xpc3RfZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwppbmRleCA3YTgxMjY3Li5lMmNmMTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKgkgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqIEZJTEUJCTogbWVnYXJhaWRfc2FzLmMKLSAqIFZlcnNpb24JOiB2MDAuMDAuMDMuMTAtcmMxCisgKiBWZXJzaW9uCTogdjAwLjAwLjAzLjEwLXJjNQogICoKICAqIEF1dGhvcnM6CiAgKgkoZW1haWwtaWQgOiBtZWdhcmFpZGxpbnV4QGxzaS5jb20pCkBAIC04ODYsNiArODg2LDcgQEAKIAkJZ290byBvdXRfcmV0dXJuX2NtZDsKIAogCWNtZC0+c2NtZCA9IHNjbWQ7CisJc2NtZC0+U0NwLnB0ciA9IChjaGFyICopY21kOwogCiAJLyoKIAkgKiBJc3N1ZSB0aGUgY29tbWFuZCB0byB0aGUgRlcKQEAgLTkxOSw3ICs5MjAsNyBAQAogCSAqIFRoZSBSQUlEIGZpcm13YXJlIG1heSByZXF1aXJlIGV4dGVuZGVkIHRpbWVvdXRzLgogCSAqLwogCWlmIChzZGV2LT5jaGFubmVsID49IE1FR0FTQVNfTUFYX1BEX0NIQU5ORUxTKQotCQlzZGV2LT50aW1lb3V0ID0gOTAgKiBIWjsKKwkJc2Rldi0+dGltZW91dCA9IE1FR0FTQVNfREVGQVVMVF9DTURfVElNRU9VVCAqIEhaOwogCXJldHVybiAwOwogfQogCkBAIC05ODEsOCArOTgyLDggQEAKIAogCWluc3RhbmNlID0gKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICopc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAotCXNjbWRfcHJpbnRrKEtFUk5fTk9USUNFLCBzY21kLCAibWVnYXNhczogUkVTRVQgLSVsZCBjbWQ9JXhcbiIsCi0JICAgICAgIHNjbWQtPnNlcmlhbF9udW1iZXIsIHNjbWQtPmNtbmRbMF0pOworCXNjbWRfcHJpbnRrKEtFUk5fTk9USUNFLCBzY21kLCAibWVnYXNhczogUkVTRVQgLSVsZCBjbWQ9JXggcmV0cmllcz0leFxuIiwKKwkJIHNjbWQtPnNlcmlhbF9udW1iZXIsIHNjbWQtPmNtbmRbMF0sIHNjbWQtPnJldHJpZXMpOwogCiAJaWYgKGluc3RhbmNlLT5od19jcml0X2Vycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogY2Fubm90IHJlY292ZXIgZnJvbSBwcmV2aW91cyByZXNldCAiCkBAIC0xMDAwLDYgKzEwMDEsMzkgQEAKIH0KIAogLyoqCisgKiBtZWdhc2FzX3Jlc2V0X3RpbWVyIC0gcXVpZXNjZSB0aGUgYWRhcHRlciBpZiByZXF1aXJlZAorICogQHNjbWQ6CQlzY3NpIGNtbmQKKyAqCisgKiBTZXRzIHRoZSBGVyBidXN5IGZsYWcgYW5kIHJlZHVjZXMgdGhlIGhvc3QtPmNhbl9xdWV1ZSBpZiB0aGUKKyAqIGNtZCBoYXMgbm90IGJlZW4gY29tcGxldGVkIHdpdGhpbiB0aGUgdGltZW91dCBwZXJpb2QuCisgKi8KK3N0YXRpYyBlbnVtCitzY3NpX2VoX3RpbWVyX3JldHVybiBtZWdhc2FzX3Jlc2V0X3RpbWVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQgPSAoc3RydWN0IG1lZ2FzYXNfY21kICopc2NtZC0+U0NwLnB0cjsKKwlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHNjbWQtPmppZmZpZXNfYXRfYWxsb2MgKworCQkJCShNRUdBU0FTX0RFRkFVTFRfQ01EX1RJTUVPVVQgKiAyKSAqIEhaKSkgeworCQlyZXR1cm4gRUhfTk9UX0hBTkRMRUQ7CisJfQorCisJaW5zdGFuY2UgPSBjbWQtPmluc3RhbmNlOworCWlmICghKGluc3RhbmNlLT5mbGFnICYgTUVHQVNBU19GV19CVVNZKSkgeworCQkvKiBGVyBpcyBidXN5LCB0aHJvdHRsZSBJTyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZShpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisKKwkJaW5zdGFuY2UtPmhvc3QtPmNhbl9xdWV1ZSA9IDE2OworCQlpbnN0YW5jZS0+bGFzdF90aW1lID0gamlmZmllczsKKwkJaW5zdGFuY2UtPmZsYWcgfD0gTUVHQVNBU19GV19CVVNZOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCX0KKwlyZXR1cm4gRUhfUkVTRVRfVElNRVI7Cit9CisKKy8qKgogICogbWVnYXNhc19yZXNldF9kZXZpY2UgLQlEZXZpY2UgcmVzZXQgaGFuZGxlciBlbnRyeSBwb2ludAogICovCiBzdGF0aWMgaW50IG1lZ2FzYXNfcmVzZXRfZGV2aWNlKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCkBAIC0xMTEyLDYgKzExNDYsNyBAQAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IG1lZ2FzYXNfcmVzZXRfZGV2aWNlLAogCS5laF9idXNfcmVzZXRfaGFuZGxlciA9IG1lZ2FzYXNfcmVzZXRfYnVzX2hvc3QsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlciA9IG1lZ2FzYXNfcmVzZXRfYnVzX2hvc3QsCisJLmVoX3RpbWVkX291dCA9IG1lZ2FzYXNfcmVzZXRfdGltZXIsCiAJLmJpb3NfcGFyYW0gPSBtZWdhc2FzX2Jpb3NfcGFyYW0sCiAJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCiB9OwpAQCAtMTIxNSw5ICsxMjUwLDggQEAKIAlpbnQgZXhjZXB0aW9uID0gMDsKIAlzdHJ1Y3QgbWVnYXNhc19oZWFkZXIgKmhkciA9ICZjbWQtPmZyYW1lLT5oZHI7CiAKLQlpZiAoY21kLT5zY21kKSB7Ci0JCWNtZC0+c2NtZC0+U0NwLnB0ciA9IChjaGFyICopMDsKLQl9CisJaWYgKGNtZC0+c2NtZCkKKwkJY21kLT5zY21kLT5TQ3AucHRyID0gTlVMTDsKIAogCXN3aXRjaCAoaGRyLT5jbWQpIHsKIApAQCAtMTgwNiw2ICsxODQwLDcgQEAKIAl1MzIgY29udGV4dDsKIAlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKIAlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UgPSAoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKilpbnN0YW5jZV9hZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBJZiB3ZSBoYXZlIGFscmVhZHkgZGVjbGFyZWQgYWRhcHRlciBkZWFkLCBkb25vdCBjb21wbGV0ZSBjbWRzICovCiAJaWYgKGluc3RhbmNlLT5od19jcml0X2Vycm9yKQpAQCAtMTgyOCw2ICsxODYzLDIyIEBACiAJfQogCiAJKmluc3RhbmNlLT5jb25zdW1lciA9IHByb2R1Y2VyOworCisJLyoKKwkgKiBDaGVjayBpZiB3ZSBjYW4gcmVzdG9yZSBjYW5fcXVldWUKKwkgKi8KKwlpZiAoaW5zdGFuY2UtPmZsYWcgJiBNRUdBU0FTX0ZXX0JVU1kKKwkJJiYgdGltZV9hZnRlcihqaWZmaWVzLCBpbnN0YW5jZS0+bGFzdF90aW1lICsgNSAqIEhaKQorCQkmJiBhdG9taWNfcmVhZCgmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nKSA8IDE3KSB7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlpbnN0YW5jZS0+ZmxhZyAmPSB+TUVHQVNBU19GV19CVVNZOworCQlpbnN0YW5jZS0+aG9zdC0+Y2FuX3F1ZXVlID0KKwkJCQlpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgLSBNRUdBU0FTX0lOVF9DTURTOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCX0KKwogfQogCiAvKioKQEAgLTIzOTgsNiArMjQ0OSw4IEBACiAJaW5zdGFuY2UtPmluaXRfaWQgPSBNRUdBU0FTX0RFRkFVTFRfSU5JVF9JRDsKIAogCW1lZ2FzYXNfZGJnX2x2bCA9IDA7CisJaW5zdGFuY2UtPmZsYWcgPSAwOworCWluc3RhbmNlLT5sYXN0X3RpbWUgPSAwOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIE1GSSBGaXJtd2FyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCmluZGV4IGU4NjI5OTIuLjRkZmZjOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKQEAgLTE4LDkgKzE4LDkgQEAKIC8qCiAgKiBNZWdhUkFJRCBTQVMgRHJpdmVyIG1ldGEgZGF0YQogICovCi0jZGVmaW5lIE1FR0FTQVNfVkVSU0lPTgkJCQkiMDAuMDAuMDMuMTAtcmMxIgotI2RlZmluZSBNRUdBU0FTX1JFTERBVEUJCQkJIkZlYiAxNCwgMjAwNyIKLSNkZWZpbmUgTUVHQVNBU19FWFRfVkVSU0lPTgkJCSJXZWQgRmViIDE0IDEwOjE0OjI1IFBTVCAyMDA3IgorI2RlZmluZSBNRUdBU0FTX1ZFUlNJT04JCQkJIjAwLjAwLjAzLjEwLXJjNSIKKyNkZWZpbmUgTUVHQVNBU19SRUxEQVRFCQkJCSJNYXkgMTcsIDIwMDciCisjZGVmaW5lIE1FR0FTQVNfRVhUX1ZFUlNJT04JCQkiVGh1IE1heSAxNyAxMDowOTozMiBQRFQgMjAwNyIKIAogLyoKICAqIERldmljZSBJRHMKQEAgLTUzOSw2ICs1MzksOCBAQAogCiAjZGVmaW5lIE1FR0FTQVNfREJHX0xWTAkJCQkxCiAKKyNkZWZpbmUgTUVHQVNBU19GV19CVVNZCQkJCTEKKwogLyoKICAqIFdoZW4gU0NTSSBtaWQtbGF5ZXIgY2FsbHMgZHJpdmVyJ3MgcmVzZXQgcm91dGluZSwgZHJpdmVyIHdhaXRzIGZvcgogICogTUVHQVNBU19SRVNFVF9XQUlUX1RJTUUgc2Vjb25kcyBmb3IgYWxsIG91dHN0YW5kaW5nIElPIHRvIGNvbXBsZXRlLiBOb3RlCkBAIC01NDksOCArNTUxLDggQEAKICNkZWZpbmUgTUVHQVNBU19SRVNFVF9XQUlUX1RJTUUJCQkxODAKICNkZWZpbmUgTUVHQVNBU19JTlRFUk5BTF9DTURfV0FJVF9USU1FCQkxODAKICNkZWZpbmUJTUVHQVNBU19SRVNFVF9OT1RJQ0VfSU5URVJWQUwJCTUKLQogI2RlZmluZSBNRUdBU0FTX0lPQ1RMX0NNRAkJCTAKKyNkZWZpbmUgTUVHQVNBU19ERUZBVUxUX0NNRF9USU1FT1VUCQk5MAogCiAvKgogICogRlcgcmVwb3J0cyB0aGUgbWF4aW11bSBvZiBudW1iZXIgb2YgY29tbWFuZHMgdGhhdCBpdCBjYW4gYWNjZXB0IChtYXhpbXVtCkBAIC0xMDczLDcgKzEwNzUsNiBAQAogCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdfc2V0OwogCiAJczggaW5pdF9pZDsKLQl1OCByZXNlcnZlZFszXTsKIAogCXUxNiBtYXhfbnVtX3NnZTsKIAl1MTYgbWF4X2Z3X2NtZHM7CkBAIC0xMTA0LDYgKzExMDUsOSBAQAogCiAJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGUgKmluc3RhbmNldDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaXNyX3Rhc2tsZXQ7CisKKwl1OCBmbGFnOworCXVuc2lnbmVkIGxvbmcgbGFzdF90aW1lOwogfTsKIAogI2RlZmluZSBNRUdBU0FTX0lTX0xPR0lDQUwoc2NwKQkJCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZXNoLmMgYi9kcml2ZXJzL3Njc2kvbWVzaC5jCmluZGV4IDFmZDNjNzUuLmU2NGQxYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZXNoLmMKKysrIGIvZHJpdmVycy9zY3NpL21lc2guYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAgKiBEcml2ZXIgaXMgdG9vIG1lc3N5LCB3ZSBuZWVkIGEgZmV3IHByb3RvdHlwZXMuLi4KICAqLwogc3RhdGljIHZvaWQgbWVzaF9kb25lKHN0cnVjdCBtZXNoX3N0YXRlICptcywgaW50IHN0YXJ0X25leHQpOwotc3RhdGljIHZvaWQgbWVzaF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyB2b2lkIG1lc2hfaW50ZXJydXB0KHN0cnVjdCBtZXNoX3N0YXRlICptcyk7CiBzdGF0aWMgdm9pZCBjbWRfY29tcGxldGUoc3RydWN0IG1lc2hfc3RhdGUgKm1zKTsKIHN0YXRpYyB2b2lkIHNldF9kbWFfY21kcyhzdHJ1Y3QgbWVzaF9zdGF0ZSAqbXMsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiBzdGF0aWMgdm9pZCBoYWx0X2RtYShzdHJ1Y3QgbWVzaF9zdGF0ZSAqbXMpOwpAQCAtNDY2LDcgKzQ2Niw3IEBACiAJCQkJZGxvZyhtcywgImludHIgYjQgYXJiLCBpbnRyL2V4Yy9lcnIvZmM9JS44eCIsCiAJCQkJICAgICBNS1dPUkQobXItPmludGVycnVwdCwgbXItPmV4Y2VwdGlvbiwKIAkJCQkJICAgIG1yLT5lcnJvciwgbXItPmZpZm9fY291bnQpKTsKLQkJCQltZXNoX2ludGVycnVwdCgwLCAodm9pZCAqKW1zKTsKKwkJCQltZXNoX2ludGVycnVwdChtcyk7CiAJCQkJaWYgKG1zLT5waGFzZSAhPSBhcmJpdHJhdGluZykKIAkJCQkJcmV0dXJuOwogCQkJfQpAQCAtNTA0LDcgKzUwNCw3IEBACiAJCWRsb2cobXMsICJpbnRyIGFmdGVyIGRpc3Jlc2VsLCBpbnRyL2V4Yy9lcnIvZmM9JS44eCIsCiAJCSAgICAgTUtXT1JEKG1yLT5pbnRlcnJ1cHQsIG1yLT5leGNlcHRpb24sCiAJCQkgICAgbXItPmVycm9yLCBtci0+Zmlmb19jb3VudCkpOwotCQltZXNoX2ludGVycnVwdCgwLCAodm9pZCAqKW1zKTsKKwkJbWVzaF9pbnRlcnJ1cHQobXMpOwogCQlpZiAobXMtPnBoYXNlICE9IGFyYml0cmF0aW5nKQogCQkJcmV0dXJuOwogCQlkbG9nKG1zLCAiYWZ0ZXIgaW50ciBhZnRlciBkaXNyZXNlbCwgaW50ci9leGMvZXJyL2ZjPSUuOHgiLApAQCAtMTAxOCwxMCArMTAxOCwxMSBAQAogc3RhdGljIGlycXJldHVybl90IGRvX21lc2hfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBTY3NpX0hvc3QgKmRldiA9ICgoc3RydWN0IG1lc2hfc3RhdGUgKilkZXZfaWQpLT5ob3N0OworCXN0cnVjdCBtZXNoX3N0YXRlICptcyA9IGRldl9pZDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpkZXYgPSBtcy0+aG9zdDsKIAkKIAlzcGluX2xvY2tfaXJxc2F2ZShkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwotCW1lc2hfaW50ZXJydXB0KGlycSwgZGV2X2lkKTsKKwltZXNoX2ludGVycnVwdChtcyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE2NjEsOSArMTY2Miw4IEBACiAgKiBoYW5kbGVyIChkb19tZXNoX2ludGVycnVwdCkgb3IgYnkgb3RoZXIgZnVuY3Rpb25zIGluCiAgKiBleGNlcHRpb25hbCBjaXJjdW1zdGFuY2VzCiAgKi8KLXN0YXRpYyB2b2lkIG1lc2hfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyB2b2lkIG1lc2hfaW50ZXJydXB0KHN0cnVjdCBtZXNoX3N0YXRlICptcykKIHsKLQlzdHJ1Y3QgbWVzaF9zdGF0ZSAqbXMgPSAoc3RydWN0IG1lc2hfc3RhdGUgKikgZGV2X2lkOwogCXZvbGF0aWxlIHN0cnVjdCBtZXNoX3JlZ3MgX19pb21lbSAqbXIgPSBtcy0+bWVzaDsKIAlpbnQgaW50cjsKIApAQCAtMTk0Nyw3ICsxOTQ3LDcgQEAKIAkgICAgICAgCW1zLT50Z3RzW3RndF0uY3VycmVudF9yZXEgPSBOVUxMOwogICAgICAgIAl9CiAKLQlpZiAoKGNmcCA9IGdldF9wcm9wZXJ0eShtZXNoLCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCkpKQorCWlmICgoY2ZwID0gb2ZfZ2V0X3Byb3BlcnR5KG1lc2gsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKSkpCiAgICAgICAgCQltcy0+Y2xrX2ZyZXEgPSAqY2ZwOwogCWVsc2UgewogICAgICAgIAkJcHJpbnRrKEtFUk5fSU5GTyAibWVzaDogYXNzdW1pbmcgNTBNSHogY2xvY2sgZnJlcXVlbmN5XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbHV0by5jIGIvZHJpdmVycy9zY3NpL3BsdXRvLmMKaW5kZXggM2IyZTFhNS4uZDk1M2Q0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BsdXRvLmMKKysrIGIvZHJpdmVycy9zY3NpL3BsdXRvLmMKQEAgLTQsNiArNCw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNTAsMTYgKzUxLDEwIEBACiB9ICpmY3MgX19pbml0ZGF0YTsKIHN0YXRpYyBpbnQgZmNzY291bnQgX19pbml0ZGF0YSA9IDA7CiBzdGF0aWMgYXRvbWljX3QgZmNzcyBfX2luaXRkYXRhID0gQVRPTUlDX0lOSVQoMCk7Ci1ERUNMQVJFX01VVEVYX0xPQ0tFRChmY19zZW0pOworc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihmY19kZXRlY3RfY29tcGxldGUpOwogCiBzdGF0aWMgaW50IHBsdXRvX2VuY29kZV9hZGRyKFNjc2lfQ21uZCAqU0NwbnQsIHUxNiAqYWRkciwgZmNfY2hhbm5lbCAqZmMsIGZjcF9jbW5kICpmY21kKTsKIAotc3RhdGljIHZvaWQgX19pbml0IHBsdXRvX2RldGVjdF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlQTE5EKCgiVGltZW91dFxuIikpCi0JdXAoJmZjX3NlbSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBwbHV0b19kZXRlY3RfZG9uZShTY3NpX0NtbmQgKlNDcG50KQogewogCS8qIERvIG5vdGhpbmcgKi8KQEAgLTY5LDcgKzY0LDcgQEAKIHsKIAlQTE5EKCgiRGV0ZWN0IGRvbmUgJTA4bHhcbiIsIChsb25nKVNDcG50KSkKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCAoJmZjc3MpKQotCQl1cCgmZmNfc2VtKTsKKwkJY29tcGxldGUoJmZjX2RldGVjdF9jb21wbGV0ZSk7CiB9CiAKIGludCBwbHV0b19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2UpCkBAIC05Niw3ICs5MSw2IEBACiAJaW50IGksIHJldHJ5LCBucGx1dG9zOwogCWZjX2NoYW5uZWwgKmZjOwogCXN0cnVjdCBzY3NpX2RldmljZSBkZXY7Ci0JREVGSU5FX1RJTUVSKGZjX3RpbWVyLCBwbHV0b19kZXRlY3RfdGltZW91dCwgMCwgMCk7CiAKIAl0cG50LT5wcm9jX25hbWUgPSAicGx1dG8iOwogCWZjc2NvdW50ID0gMDsKQEAgLTE4NywxNSArMTgxLDExIEBACiAJCQl9CiAJCX0KIAkgICAgCi0JCWZjX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTAgKiBIWjsKLQkJYWRkX3RpbWVyKCZmY190aW1lcik7Ci0JCQotCQlkb3duKCZmY19zZW0pOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmZjX2RldGVjdF9jb21wbGV0ZSwgMTAgKiBIWik7CiAJCVBMTkQoKCJXb2tlbiB1cFxuIikpCiAJCWlmICghYXRvbWljX3JlYWQoJmZjc3MpKQogCQkJYnJlYWs7IC8qIEFsbCBmYyBjaGFubmVscyBoYXZlIGFuc3dlcmVkIHVzICovCiAJfQotCWRlbF90aW1lcl9zeW5jKCZmY190aW1lcik7CiAKIAlQTE5EKCgiRmluaXNoZWQgc2VhcmNoXG4iKSkKIAlmb3IgKGkgPSAwLCBucGx1dG9zID0gMDsgaSA8IGZjc2NvdW50OyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCmluZGV4IDY3NzdlOGEuLjU0ZDhiZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTEyODAuYwpAQCAtNDI5Myw3ICs0MjkzLDcgQEAKIAloYS0+ZGV2bnVtID0gZGV2bnVtOwkvKiBzcGVjaWZpZXMgbWljcm9jb2RlIGxvYWQgYWRkcmVzcyAqLwogCiAjaWZkZWYgUUxBXzY0QklUX1BUUgotCWlmIChwY2lfc2V0X2RtYV9tYXNrKGhhLT5wZGV2LCAoZG1hX2FkZHJfdCkgfiAwVUxMKSkgeworCWlmIChwY2lfc2V0X2RtYV9tYXNrKGhhLT5wZGV2LCBETUFfNjRCSVRfTUFTSykpIHsKIAkJaWYgKHBjaV9zZXRfZG1hX21hc2soaGEtPnBkZXYsIERNQV8zMkJJVF9NQVNLKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSglbGkpOiBVbmFibGUgdG8gc2V0IGEgIgogCQkJICAgICAgICJzdWl0YWJsZSBETUEgbWFzayAtIGFib3J0aW5nXG4iLCBoYS0+aG9zdF9ubyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwppbmRleCAzZTI5NmFiLi4yYTQ1YWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKQEAgLTEzLDcgKzEzLDYgQEAKIAogI2lmZGVmIENPTkZJR19TUEFSQwogI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3BibS5oPgogI2VuZGlmCiAKIC8qIFhYWChoY2gpOiB0aGlzIGlzIHVnbHksIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHB1bGwgaW4gZXhpb2N0bC5oICovCkBAIC0xMzAsMTggKzEyOSwxNyBAQAogaW50CiBxbGEyMTAwX3BjaV9jb25maWcoc2NzaV9xbGFfaG9zdF90ICpoYSkKIHsKLQl1aW50MTZfdCB3LCBtd2k7CisJaW50IHJldDsKKwl1aW50MTZfdCB3OwogCXVpbnQzMl90IGQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yeHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3A7CiAKIAlwY2lfc2V0X21hc3RlcihoYS0+cGRldik7Ci0JbXdpID0gMDsKLQlpZiAocGNpX3NldF9td2koaGEtPnBkZXYpKQotCQltd2kgPSBQQ0lfQ09NTUFORF9JTlZBTElEQVRFOworCXJldCA9IHBjaV9zZXRfbXdpKGhhLT5wZGV2KTsKIAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhhLT5wZGV2LCBQQ0lfQ09NTUFORCwgJncpOwotCXcgfD0gbXdpIHwgKFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX1NFUlIpOworCXcgfD0gKFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX1NFUlIpOwogCXBjaV93cml0ZV9jb25maWdfd29yZChoYS0+cGRldiwgUENJX0NPTU1BTkQsIHcpOwogCiAJLyogUmVzZXQgZXhwYW5zaW9uIFJPTSBhZGRyZXNzIGRlY29kZSBlbmFibGUgKi8KQEAgLTE2NiwyMiArMTY0LDIyIEBACiBpbnQKIHFsYTIzMDBfcGNpX2NvbmZpZyhzY3NpX3FsYV9ob3N0X3QgKmhhKQogewotCXVpbnQxNl90CXcsIG13aTsKKwlpbnQJCXJldDsKKwl1aW50MTZfdAl3OwogCXVpbnQzMl90CWQ7CiAJdW5zaWduZWQgbG9uZyAgIGZsYWdzID0gMDsKIAl1aW50MzJfdAljbnQ7CiAJc3RydWN0IGRldmljZV9yZWdfMnh4eCBfX2lvbWVtICpyZWcgPSAmaGEtPmlvYmFzZS0+aXNwOwogCiAJcGNpX3NldF9tYXN0ZXIoaGEtPnBkZXYpOwotCW13aSA9IDA7Ci0JaWYgKHBjaV9zZXRfbXdpKGhhLT5wZGV2KSkKLQkJbXdpID0gUENJX0NPTU1BTkRfSU5WQUxJREFURTsKKwlyZXQgPSBwY2lfc2V0X213aShoYS0+cGRldik7CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChoYS0+cGRldiwgUENJX0NPTU1BTkQsICZ3KTsKLQl3IHw9IG13aSB8IChQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9TRVJSKTsKKwl3IHw9IChQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9TRVJSKTsKIAogCWlmIChJU19RTEEyMzIyKGhhKSB8fCBJU19RTEE2MzIyKGhhKSkKIAkJdyAmPSB+UENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFOworCXBjaV93cml0ZV9jb25maWdfd29yZChoYS0+cGRldiwgUENJX0NPTU1BTkQsIHcpOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGEgMjMwMCBjYXJkIGFuZCBub3QgMjMxMiwgcmVzZXQgdGhlCkBAIC0yMTAsNyArMjA4LDcgQEAKIAkJaGEtPmZiX3JldiA9IFJEX0ZCX0NNRF9SRUcoaGEsIHJlZyk7CiAKIAkJaWYgKGhhLT5mYl9yZXYgPT0gRlBNXzIzMDApCi0JCQl3ICY9IH5QQ0lfQ09NTUFORF9JTlZBTElEQVRFOworCQkJcGNpX2NsZWFyX213aShoYS0+cGRldik7CiAKIAkJLyogRGVzZWxlY3QgRlBNIHJlZ2lzdGVycy4gKi8KIAkJV1JUX1JFR19XT1JEKCZyZWctPmN0cmxfc3RhdHVzLCAweDApOwpAQCAtMjI3LDcgKzIyNSw2IEBACiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAl9Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGhhLT5wZGV2LCBQQ0lfQ09NTUFORCwgdyk7CiAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaGEtPnBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweDgwKTsKIApAQCAtMjUzLDE5ICsyNTAsMTggQEAKIGludAogcWxhMjR4eF9wY2lfY29uZmlnKHNjc2lfcWxhX2hvc3RfdCAqaGEpCiB7Ci0JdWludDE2X3QgdywgbXdpOworCWludCByZXQ7CisJdWludDE2X3QgdzsKIAl1aW50MzJfdCBkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXN0cnVjdCBkZXZpY2VfcmVnXzI0eHggX19pb21lbSAqcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDI0OwogCWludCBwY2l4X2NtZF9yZWcsIHBjaWVfZGN0bF9yZWc7CiAKIAlwY2lfc2V0X21hc3RlcihoYS0+cGRldik7Ci0JbXdpID0gMDsKLQlpZiAocGNpX3NldF9td2koaGEtPnBkZXYpKQotCQltd2kgPSBQQ0lfQ09NTUFORF9JTlZBTElEQVRFOworCXJldCA9IHBjaV9zZXRfbXdpKGhhLT5wZGV2KTsKIAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhhLT5wZGV2LCBQQ0lfQ09NTUFORCwgJncpOwotCXcgfD0gbXdpIHwgKFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX1NFUlIpOworCXcgfD0gKFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX1NFUlIpOwogCXcgJj0gflBDSV9DT01NQU5EX0lOVFhfRElTQUJMRTsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaGEtPnBkZXYsIFBDSV9DT01NQU5ELCB3KTsKIApAQCAtMTQwMCw5ICsxMzk2LDggQEAKIHsKICNpZmRlZiBDT05GSUdfU1BBUkMKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGhhLT5wZGV2OwotCXN0cnVjdCBwY2lkZXZfY29va2llICpwY3AgPSBwZGV2LT5zeXNkYXRhOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBwY3AtPnByb21fbm9kZTsKLQl1OCAqdmFsOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7CisJY29uc3QgdTggKnZhbDsKIAlpbnQgbGVuOwogCiAJdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicG9ydC13d24iLCAmbGVuKTsKQEAgLTMzNzMsOSArMzM2OCw4IEBACiB7CiAjaWZkZWYgQ09ORklHX1NQQVJDCiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBoYS0+cGRldjsKLQlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGNwID0gcGRldi0+c3lzZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gcGNwLT5wcm9tX25vZGU7Ci0JdTggKnZhbDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOworCWNvbnN0IHU4ICp2YWw7CiAJaW50IGxlbjsKIAogCXZhbCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInBvcnQtd3duIiwgJmxlbik7CkBAIC0zOTMxLDYgKzM5MjUsOCBAQAogCiAJaWYgKCFJU19RTEEyNFhYKGhhKSAmJiAhSVNfUUxBNTRYWChoYSkpCiAJCXJldHVybjsKKwlpZiAoIWhhLT5md19tYWpvcl92ZXJzaW9uKQorCQlyZXR1cm47CiAKIAlyZXQgPSBxbGEyeDAwX3N0b3BfZmlybXdhcmUoaGEpOwogCWZvciAocmV0cmllcyA9IDU7IHJldCAhPSBRTEFfU1VDQ0VTUyAmJiByZXRyaWVzIDsgcmV0cmllcy0tKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKaW5kZXggZDQ4ODU2MS4uY2E0NjM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwpAQCAtMTcyNiw2ICsxNzI2LDE3IEBACiAJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCSAgICAiTVNJLVg6IEZhbGxpbmcgYmFjay10byBJTlRhIG1vZGUgLS0gJWQuXG4iLCByZXQpOwogc2tpcF9tc2l4OgorCisJaWYgKCFJU19RTEEyNFhYKGhhKSkKKwkJZ290byBza2lwX21zaTsKKworCXJldCA9IHBjaV9lbmFibGVfbXNpKGhhLT5wZGV2KTsKKwlpZiAoIXJldCkgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiTVNJOiBFbmFibGVkLlxuIikpOworCQloYS0+ZmxhZ3MubXNpX2VuYWJsZWQgPSAxOworCX0KK3NraXBfbXNpOgorCiAJcmV0ID0gcmVxdWVzdF9pcnEoaGEtPnBkZXYtPmlycSwgaGEtPmlzcF9vcHMuaW50cl9oYW5kbGVyLAogCSAgICBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCBRTEEyWFhYX0RSSVZFUl9OQU1FLCBoYSk7CiAJaWYgKCFyZXQpIHsKQEAgLTE3NDYsNiArMTc1Nyw4IEBACiAKIAlpZiAoaGEtPmZsYWdzLm1zaXhfZW5hYmxlZCkKIAkJcWxhMjR4eF9kaXNhYmxlX21zaXgoaGEpOwotCWVsc2UgaWYgKGhhLT5mbGFncy5pbnRhX2VuYWJsZWQpCisJZWxzZSBpZiAoaGEtPmZsYWdzLmludGFfZW5hYmxlZCkgewogCQlmcmVlX2lycShoYS0+aG9zdC0+aXJxLCBoYSk7CisJCXBjaV9kaXNhYmxlX21zaShoYS0+cGRldik7CisJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCBiNzg5MTlhLi5kZDA3NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtMzYsNyArMzYsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhxbDJ4bG9naW50aW1lb3V0LAogCQkiTG9naW4gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLiIpOwogCi1pbnQgcWxwb3J0X2Rvd25fcmV0cnkgPSAzMDsKK2ludCBxbHBvcnRfZG93bl9yZXRyeTsKIG1vZHVsZV9wYXJhbShxbHBvcnRfZG93bl9yZXRyeSwgaW50LCBTX0lSVUdPfFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhxbHBvcnRfZG93bl9yZXRyeSwKIAkJIk1heGltdW0gbnVtYmVyIG9mIGNvbW1hbmQgcmV0cmllcyB0byBhIHBvcnQgdGhhdCByZXR1cm5zICIKQEAgLTE1NzcsOSArMTU3Nyw3IEBACiAJCWdvdG8gcHJvYmVfZmFpbGVkOwogCX0KIAotCWlmIChxbGEyeDAwX2luaXRpYWxpemVfYWRhcHRlcihoYSkgJiYKLQkgICAgIShoYS0+ZGV2aWNlX2ZsYWdzICYgREZMR19OT19DQUJMRSkpIHsKLQorCWlmIChxbGEyeDAwX2luaXRpYWxpemVfYWRhcHRlcihoYSkpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCQkgICAgIkZhaWxlZCB0byBpbml0aWFsaXplIGFkYXB0ZXJcbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCBkYzg1NDk1Li5jMzc1YTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKQEAgLTcsNyArNyw3IEBACiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMS4wNy1rNiIKKyNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDEuMDctazciCiAKICNkZWZpbmUgUUxBX0RSSVZFUl9NQUpPUl9WRVIJOAogI2RlZmluZSBRTEFfRFJJVkVSX01JTk9SX1ZFUgkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGJnLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGJnLmMKaW5kZXggN2I0ZTA3Ny4uNjQzN2QwMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9kYmcuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGJnLmMKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSAicWw0X2RlZi5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KIAorI2lmIDAKKwogc3RhdGljIHZvaWQgcWxhNHh4eF9wcmludF9zcmJfaW5mbyhzdHJ1Y3Qgc3JiICogc3JiKQogewogCXByaW50aygiJXM6IHNyYiA9IDB4JXAsIGZsYWdzPTB4JTAyeFxuIiwgX19mdW5jX18sIHNyYiwgc3JiLT5mbGFncyk7CkBAIC0xOTUsMyArMTk3LDUgQEAKIAlpZiAoY250ICUgMTYpCiAJCXByaW50ayhLRVJOX0RFQlVHICJcbiIpOwogfQorCisjZW5kaWYgIC8qICAwICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2dsYmwuaCBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9nbGJsLmgKaW5kZXggZTAyMWViNS4uNWIwMGNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2dsYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZ2xibC5oCkBAIC00Myw4ICs0Myw2IEBACiAJCQkgICAgdWludDE2X3QgKnRjcF9zb3VyY2VfcG9ydF9udW0sCiAJCQkgICAgdWludDE2X3QgKmNvbm5lY3Rpb25faWQpOwogCi1zdHJ1Y3QgZGRiX2VudHJ5ICogcWxhNHh4eF9hbGxvY19kZGIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSwKLQkJCQkgICAgIHVpbnQzMl90IGZ3X2RkYl9pbmRleCk7CiBpbnQgcWxhNHh4eF9zZXRfZGRiX2VudHJ5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEsIHVpbnQxNl90IGZ3X2RkYl9pbmRleCwKIAkJCSAgZG1hX2FkZHJfdCBmd19kZGJfZW50cnlfZG1hKTsKIApAQCAtNTUsMTggKzUzLDExIEBACiBzdHJ1Y3QgZGRiX2VudHJ5ICpxbGE0eHh4X2FsbG9jX3Nlc3Moc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKIGludCBxbGE0eHh4X2FkZF9zZXNzKHN0cnVjdCBkZGJfZW50cnkgKik7CiB2b2lkIHFsYTR4eHhfZGVzdHJveV9zZXNzKHN0cnVjdCBkZGJfZW50cnkgKmRkYl9lbnRyeSk7Ci1pbnQgcWxhNHh4eF9jb25uX2Nsb3NlX3Nlc3NfbG9nb3V0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEsCi0JCQkJICAgdWludDE2X3QgZndfZGRiX2luZGV4LAotCQkJCSAgIHVpbnQxNl90IGNvbm5lY3Rpb25faWQsCi0JCQkJICAgdWludDE2X3Qgb3B0aW9uKTsKLWludCBxbGE0eHh4X2NsZWFyX2RhdGFiYXNlX2VudHJ5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEsCi0JCQkJIHVpbnQxNl90IGZ3X2RkYl9pbmRleCk7CiBpbnQgcWxhNHh4eF9pc19udnJhbV9jb25maWd1cmF0aW9uX3ZhbGlkKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEpOwogaW50IHFsYTR4eHhfZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSk7CiB2b2lkIHFsYTR4eHhfaW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqIGhhLAogCQkJCSAgICAgICB1aW50MzJfdCBpbnRyX3N0YXR1cyk7CiBpbnQgcWxhNHh4eF9pbml0X3JpbmdzKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICogaGEpOwotdm9pZCBxbGE0eHh4X2R1bXBfYnVmZmVyKHZvaWQgKmIsIHVpbnQzMl90IHNpemUpOwogc3RydWN0IHNyYiAqIHFsYTR4eHhfZGVsX2Zyb21fYWN0aXZlX2FycmF5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgdWludDMyX3QgaW5kZXgpOwogdm9pZCBxbGE0eHh4X3NyYl9jb21wbChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIHN0cnVjdCBzcmIgKnNyYik7CiBpbnQgcWxhNHh4eF9yZWluaXRpYWxpemVfZGRiX2xpc3Qoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYwppbmRleCBiOTA3YjA2Li42MzY1ZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKQEAgLTcsOSArNyw4IEBACiAKICNpbmNsdWRlICJxbDRfZGVmLmgiCiAKLS8qCi0gKiBRTG9naWMgSVNQNHh4eCBIYXJkd2FyZSBTdXBwb3J0IEZ1bmN0aW9uIFByb3RvdHlwZXMuCi0gKi8KK3N0YXRpYyBzdHJ1Y3QgZGRiX2VudHJ5ICogcWxhNHh4eF9hbGxvY19kZGIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAorCQkJCQkgICAgdWludDMyX3QgZndfZGRiX2luZGV4KTsKIAogc3RhdGljIHZvaWQgcWw0eHh4X3NldF9tYWNfbnVtYmVyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKIHsKQEAgLTQ4LDcgKzQ3LDggQEAKICAqIFRoaXMgcm91dGluZSBkZWFsbG9jYXRlcyBhbmQgdW5saW5rcyB0aGUgc3BlY2lmaWVkIGRkYl9lbnRyeSBmcm9tIHRoZQogICogYWRhcHRlcidzCiAgKiovCi12b2lkIHFsYTR4eHhfZnJlZV9kZGIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCBzdHJ1Y3QgZGRiX2VudHJ5ICpkZGJfZW50cnkpCitzdGF0aWMgdm9pZCBxbGE0eHh4X2ZyZWVfZGRiKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKKwkJCSAgICAgc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5KQogewogCS8qIFJlbW92ZSBkZXZpY2UgZW50cnkgZnJvbSBsaXN0ICovCiAJbGlzdF9kZWxfaW5pdCgmZGRiX2VudHJ5LT5saXN0KTsKQEAgLTM3MCw5ICszNzAsOSBAQAogICogbXVzdCBiZSBpbml0aWFsaXplZCBwcmlvciB0bwljYWxsaW5nIHRoaXMgcm91dGluZQogICoKICAqKi8KLWludCBxbGE0eHh4X3VwZGF0ZV9kZGJfZW50cnkoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAotCQkJICAgICBzdHJ1Y3QgZGRiX2VudHJ5ICpkZGJfZW50cnksCi0JCQkgICAgIHVpbnQzMl90IGZ3X2RkYl9pbmRleCkKK3N0YXRpYyBpbnQgcWxhNHh4eF91cGRhdGVfZGRiX2VudHJ5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKKwkJCQkgICAgc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5LAorCQkJCSAgICB1aW50MzJfdCBmd19kZGJfaW5kZXgpCiB7CiAJc3RydWN0IGRldl9kYl9lbnRyeSAqZndfZGRiX2VudHJ5ID0gTlVMTDsKIAlkbWFfYWRkcl90IGZ3X2RkYl9lbnRyeV9kbWE7CkBAIC00NTAsOCArNDUwLDggQEAKICAqIFRoaXMgcm91dGluZSBhbGxvY2F0ZXMgYSBkZGJfZW50cnksIGl0aXRpYWxpemVzIHNvbWUgdmFsdWVzLCBhbmQKICAqIGluc2VydHMgaXQgaW50byB0aGUgZGRiIGxpc3QuCiAgKiovCi1zdHJ1Y3QgZGRiX2VudHJ5ICogcWxhNHh4eF9hbGxvY19kZGIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLAotCQkJCSAgICAgdWludDMyX3QgZndfZGRiX2luZGV4KQorc3RhdGljIHN0cnVjdCBkZGJfZW50cnkgKiBxbGE0eHh4X2FsbG9jX2RkYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCisJCQkJCSAgICB1aW50MzJfdCBmd19kZGJfaW5kZXgpCiB7CiAJc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lvY2IuYwppbmRleCBkNDFjZTM4Li5hMjE2YTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pb2NiLmMKQEAgLTE5LDggKzE5LDggQEAKICAqCS0gYWR2YW5jZXMgdGhlIHJlcXVlc3RfaW4gcG9pbnRlcgogICoJLSBjaGVja3MgZm9yIHF1ZXVlIGZ1bGwKICAqKi8KLWludCBxbGE0eHh4X2dldF9yZXFfcGt0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKLQkJCXN0cnVjdCBxdWV1ZV9lbnRyeSAqKnF1ZXVlX2VudHJ5KQorc3RhdGljIGludCBxbGE0eHh4X2dldF9yZXFfcGt0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKKwkJCSAgICAgICBzdHJ1Y3QgcXVldWVfZW50cnkgKipxdWV1ZV9lbnRyeSkKIHsKIAl1aW50MTZfdCByZXF1ZXN0X2luOwogCXVpbnQ4X3Qgc3RhdHVzID0gUUxBX1NVQ0NFU1M7CkBAIC02Miw4ICs2Miw4IEBACiAgKgogICogVGhpcyByb3V0aW5lIGlzc3VlcyBhIG1hcmtlciBJT0NCLgogICoqLwotaW50IHFsYTR4eHhfc2VuZF9tYXJrZXJfaW9jYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCi0JCQkgICAgIHN0cnVjdCBkZGJfZW50cnkgKmRkYl9lbnRyeSwgaW50IGx1bikKK3N0YXRpYyBpbnQgcWxhNHh4eF9zZW5kX21hcmtlcl9pb2NiKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKKwkJCQkgICAgc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5LCBpbnQgbHVuKQogewogCXN0cnVjdCBtYXJrZXJfZW50cnkgKm1hcmtlcl9lbnRyeTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKQEAgLTk2LDcgKzk2LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdHJ1Y3QgY29udGludWF0aW9uX3QxX2VudHJ5KiBxbGE0eHh4X2FsbG9jX2NvbnRfZW50cnkoCitzdGF0aWMgc3RydWN0IGNvbnRpbnVhdGlvbl90MV9lbnRyeSogcWxhNHh4eF9hbGxvY19jb250X2VudHJ5KAogCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKIHsKIAlzdHJ1Y3QgY29udGludWF0aW9uX3QxX2VudHJ5ICpjb250X2VudHJ5OwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJcmV0dXJuIGNvbnRfZW50cnk7CiB9CiAKLXVpbnQxNl90IHFsYTR4eHhfY2FsY19yZXF1ZXN0X2VudHJpZXModWludDE2X3QgZHNkcykKK3N0YXRpYyB1aW50MTZfdCBxbGE0eHh4X2NhbGNfcmVxdWVzdF9lbnRyaWVzKHVpbnQxNl90IGRzZHMpCiB7CiAJdWludDE2X3QgaW9jYnM7CiAKQEAgLTEzMyw5ICsxMzMsOSBAQAogCXJldHVybiBpb2NiczsKIH0KIAotdm9pZCBxbGE0eHh4X2J1aWxkX3Njc2lfaW9jYnMoc3RydWN0IHNyYiAqc3JiLAotCQkJICAgICAgc3RydWN0IGNvbW1hbmRfdDNfZW50cnkgKmNtZF9lbnRyeSwKLQkJCSAgICAgIHVpbnQxNl90IHRvdF9kc2RzKQorc3RhdGljIHZvaWQgcWxhNHh4eF9idWlsZF9zY3NpX2lvY2JzKHN0cnVjdCBzcmIgKnNyYiwKKwkJCQkgICAgIHN0cnVjdCBjb21tYW5kX3QzX2VudHJ5ICpjbWRfZW50cnksCisJCQkJICAgICB1aW50MTZfdCB0b3RfZHNkcykKIHsKIAlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGE7CiAJdWludDE2X3QgYXZhaWxfZHNkczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9tYnguYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9tYnguYwppbmRleCA3ZjI4NjU3Li5mMTE2ZmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbWJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X21ieC5jCkBAIC0yMCw5ICsyMCw5IEBACiAgKiBJZiBvdXRDb3VudCBpcyAwLCB0aGlzIHJvdXRpbmUgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBXSVRIT1VUIHdhaXRpbmcKICAqIGZvciB0aGUgbWFpbGJveCBjb21tYW5kIHRvIGNvbXBsZXRlLgogICoqLwotaW50IHFsYTR4eHhfbWFpbGJveF9jb21tYW5kKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgdWludDhfdCBpbkNvdW50LAotCQkJICAgIHVpbnQ4X3Qgb3V0Q291bnQsIHVpbnQzMl90ICptYnhfY21kLAotCQkJICAgIHVpbnQzMl90ICptYnhfc3RzKQorc3RhdGljIGludCBxbGE0eHh4X21haWxib3hfY29tbWFuZChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIHVpbnQ4X3QgaW5Db3VudCwKKwkJCQkgICB1aW50OF90IG91dENvdW50LCB1aW50MzJfdCAqbWJ4X2NtZCwKKwkJCQkgICB1aW50MzJfdCAqbWJ4X3N0cykKIHsKIAlpbnQgc3RhdHVzID0gUUxBX0VSUk9SOwogCXVpbnQ4X3QgaTsKQEAgLTE3MCw2ICsxNzAsOCBAQAogfQogCiAKKyNpZiAwCisKIC8qKgogICogcWxhNHh4eF9pc3N1ZV9pb2NiIC0gaXNzdWUgbWFpbGJveCBpb2NiIGNvbW1hbmQKICAqIEBoYTogYWRhcHRlciBzdGF0ZSBwb2ludGVyLgpAQCAtMjQzLDYgKzI0NSw4IEBACiAJcmV0dXJuIFFMQV9TVUNDRVNTOwogfQogCisjZW5kaWYgIC8qICAwICAqLworCiAvKioKICAqIHFsYTR4eHhfaW5pdGlhbGl6ZV9md19jYiAtIGluaXRpYWxpemVzIGZpcm13YXJlIGNvbnRyb2wgYmxvY2suCiAgKiBAaGE6IFBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KQEAgLTU3MCw2ICs1NzQsNyBAQAogCXJldHVybiBxbGE0eHh4X21haWxib3hfY29tbWFuZChoYSwgNCwgMSwgJm1ib3hfY21kWzBdLCAmbWJveF9zdHNbMF0pOwogfQogCisjaWYgMAogaW50IHFsYTR4eHhfY29ubl9vcGVuX3Nlc3Npb25fbG9naW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKiBoYSwKIAkJCQkgICAgdWludDE2X3QgZndfZGRiX2luZGV4KQogewpAQCAtNTk0LDYgKzU5OSw3IEBACiAKIAkJcmV0dXJuIHN0YXR1czsKIH0KKyNlbmRpZiAgLyogIDAgICovCiAKIC8qKgogICogcWxhNHh4eF9nZXRfY3Jhc2hfcmVjb3JkIC0gcmV0cmlldmVzIGNyYXNoIHJlY29yZC4KQEAgLTY0OSw2ICs2NTUsNyBAQAogCQkJCSAgY3Jhc2hfcmVjb3JkLCBjcmFzaF9yZWNvcmRfZG1hKTsKIH0KIAorI2lmIDAKIC8qKgogICogcWxhNHh4eF9nZXRfY29ubl9ldmVudF9sb2cgLSByZXRyaWV2ZXMgY29ubmVjdGlvbiBldmVudCBsb2cKICAqIEBoYTogUG9pbnRlciB0byBob3N0IGFkYXB0ZXIgc3RydWN0dXJlLgpAQCAtNzM4LDYgKzc0NSw3IEBACiAJCWRtYV9mcmVlX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCBldmVudF9sb2dfc2l6ZSwgZXZlbnRfbG9nLAogCQkJCSAgZXZlbnRfbG9nX2RtYSk7CiB9CisjZW5kaWYgIC8qICAwICAqLwogCiAvKioKICAqIHFsYTR4eHhfcmVzZXRfbHVuIC0gaXNzdWVzIExVTiBSZXNldApAQCAtODM0LDcgKzg0Miw4IEBACiAJcmV0dXJuIFFMQV9TVUNDRVNTOwogfQogCi1pbnQgcWxhNHh4eF9nZXRfZGVmYXVsdF9kZGIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCBkbWFfYWRkcl90IGRtYV9hZGRyKQorc3RhdGljIGludCBxbGE0eHh4X2dldF9kZWZhdWx0X2RkYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCisJCQkJICAgZG1hX2FkZHJfdCBkbWFfYWRkcikKIHsKIAl1aW50MzJfdCBtYm94X2NtZFtNQk9YX1JFR19DT1VOVF07CiAJdWludDMyX3QgbWJveF9zdHNbTUJPWF9SRUdfQ09VTlRdOwpAQCAtODU1LDcgKzg2NCw3IEBACiAJcmV0dXJuIFFMQV9TVUNDRVNTOwogfQogCi1pbnQgcWxhNHh4eF9yZXFfZGRiX2VudHJ5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgdWludDMyX3QgKmRkYl9pbmRleCkKK3N0YXRpYyBpbnQgcWxhNHh4eF9yZXFfZGRiX2VudHJ5KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgdWludDMyX3QgKmRkYl9pbmRleCkKIHsKIAl1aW50MzJfdCBtYm94X2NtZFtNQk9YX1JFR19DT1VOVF07CiAJdWludDMyX3QgbWJveF9zdHNbTUJPWF9SRUdfQ09VTlRdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwppbmRleCAwYmZkZGY4Li5kYTIxZjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwpAQCAtMTQsNyArMTQsNyBAQAogLyoKICAqIERyaXZlciB2ZXJzaW9uCiAgKi8KLWNoYXIgcWxhNHh4eF92ZXJzaW9uX3N0cls0MF07CitzdGF0aWMgY2hhciBxbGE0eHh4X3ZlcnNpb25fc3RyWzQwXTsKIAogLyoKICAqIFNSQiBhbGxvY2F0aW9uIGNhY2hlCkBAIC00NSw4ICs0NSw3IEBACiAvKgogICogU0NTSSBob3N0IHRlbXBsYXRlIGVudHJ5IHBvaW50cwogICovCi0KLXZvaWQgcWxhNHh4eF9jb25maWdfZG1hX2FkZHJlc3Npbmcoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKTsKK3N0YXRpYyB2b2lkIHFsYTR4eHhfY29uZmlnX2RtYV9hZGRyZXNzaW5nKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSk7CiAKIC8qCiAgKiBpU0NTSSB0ZW1wbGF0ZSBlbnRyeSBwb2ludHMKQEAgLTEzNTIsNyArMTM1MSw3IEBACiAgKiBBdCBleGl0LCB0aGUgQGhhJ3MgZmxhZ3MuZW5hYmxlXzY0Yml0X2FkZHJlc3Npbmcgc2V0IHRvIGluZGljYXRlZAogICogc3VwcG9ydGVkIGFkZHJlc3NpbmcgbWV0aG9kLgogICovCi12b2lkIHFsYTR4eHhfY29uZmlnX2RtYV9hZGRyZXNzaW5nKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3N0YXRpYyB2b2lkIHFsYTR4eHhfY29uZmlnX2RtYV9hZGRyZXNzaW5nKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKIHsKIAlpbnQgcmV0dmFsOwogCkBAIC0xNjI3LDcgKzE2MjYsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBxbGE0eHh4X3BjaV90YmwpOwogCi1zdHJ1Y3QgcGNpX2RyaXZlciBxbGE0eHh4X3BjaV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcWxhNHh4eF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9IERSSVZFUl9OQU1FLAogCS5pZF90YWJsZQk9IHFsYTR4eHhfcGNpX3RibCwKIAkucHJvYmUJCT0gcWxhNHh4eF9wcm9iZV9hZGFwdGVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggM2UyOTMwYi4uMDYyMjlmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYwppbmRleCBjZTYzMDQ0Li4xOGRkNWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCkBAIC0yMDksNiArMjA5LDcgQEAKIAl7IlBJT05FRVIiLCAiQ0QtUk9NIERSTS02MDJYIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU4gfCBCTElTVF9TSU5HTEVMVU59LAogCXsiUElPTkVFUiIsICJDRC1ST00gRFJNLTYwNFgiLCBOVUxMLCBCTElTVF9GT1JDRUxVTiB8IEJMSVNUX1NJTkdMRUxVTn0sCiAJeyJQSU9ORUVSIiwgIkNELVJPTSBEUk0tNjI0WCIsIE5VTEwsIEJMSVNUX0ZPUkNFTFVOIHwgQkxJU1RfU0lOR0xFTFVOfSwKKwl7IlByb21pc2UiLCAiIiwgTlVMTCwgQkxJU1RfU1BBUlNFTFVOfSwKIAl7IlJFR0FMIiwgIkNEQy00WCIsIE5VTEwsIEJMSVNUX01BWDVMVU4gfCBCTElTVF9TSU5HTEVMVU59LAogCXsiU2FuRGlzayIsICJJbWFnZU1hdGUgQ0YtU0QxIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU59LAogCXsiU0VBR0FURSIsICJTVDM0NTU1TiIsICIwOTMwIiwgQkxJU1RfTk9UUX0sCS8qIENob2tlcyBvbiB0YWdnZWQgSU5RVUlSWSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggMzk2M2U3MC4uZTgzNTBjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAic2NzaV9sb2dnaW5nLmgiCiAKICNkZWZpbmUgU0VOU0VfVElNRU9VVAkJKDEwKkhaKQotI2RlZmluZSBTVEFSVF9VTklUX1RJTUVPVVQJKDMwKkhaKQogCiAvKgogICogVGhlc2Ugc2hvdWxkICpwcm9iYWJseSogYmUgaGFuZGxlZCBieSB0aGUgaG9zdCBpdHNlbGYuCkBAIC05MzYsNyArOTM1LDcgQEAKIAogCQlmb3IgKGkgPSAwOyBydG4gPT0gTkVFRFNfUkVUUlkgJiYgaSA8IDI7IGkrKykKIAkJCXJ0biA9IHNjc2lfc2VuZF9laF9jbW5kKHNjbWQsIHN0dV9jb21tYW5kLCA2LAotCQkJCQkJU1RBUlRfVU5JVF9USU1FT1VULCAwKTsKKwkJCQkJCXNjbWQtPmRldmljZS0+dGltZW91dCwgMCk7CiAKIAkJaWYgKHJ0biA9PSBTVUNDRVNTKQogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDYxZmJjZGMuLjFmNWEwN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0xNzMsNyArMTczLDcgQEAKICAqIEByZXRyaWVzOgludW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgcmVxdWVzdAogICogQGZsYWdzOglvciBpbnRvIHJlcXVlc3QgZmxhZ3M7CiAgKgotICogcmV0dXJucyB0aGUgcmVxLT5lcnJvcnMgdmFsdWUgd2hpY2ggaXMgdGhlIHRoZSBzY3NpX2NtbmQgcmVzdWx0CisgKiByZXR1cm5zIHRoZSByZXEtPmVycm9ycyB2YWx1ZSB3aGljaCBpcyB0aGUgc2NzaV9jbW5kIHJlc3VsdAogICogZmllbGQuCiAgKiovCiBpbnQgc2NzaV9leGVjdXRlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgY29uc3QgdW5zaWduZWQgY2hhciAqY21kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCAxNGM0ZjA2Li5iNGQxZWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtMTcxOCwzMSArMTcxOCwxMiBAQAogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZjX3Jwb3J0LCBzdGd0X2RlbGV0ZV93b3JrKTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKIAotCS8qCi0JICogSW52b2x2ZSB0aGUgTExERCBpZiBwb3NzaWJsZS4gQWxsIGlvIG9uIHRoZSBycG9ydCBpcyB0bwotCSAqIGJlIHRlcm1pbmF0ZWQsIGVpdGhlciBhcyBwYXJ0IG9mIHRoZSBkZXZfbG9zc190bW8gY2FsbGJhY2sKLQkgKiBwcm9jZXNzaW5nLCBvciB2aWEgdGhlIHRlcm1pbmF0ZV9ycG9ydF9pbyBmdW5jdGlvbi4KLQkgKi8KLQlpZiAoaS0+Zi0+ZGV2X2xvc3NfdG1vX2NhbGxiaykKLQkJaS0+Zi0+ZGV2X2xvc3NfdG1vX2NhbGxiayhycG9ydCk7Ci0JZWxzZSBpZiAoaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKQorCS8qIEludm9sdmUgdGhlIExMREQgaWYgcG9zc2libGUgdG8gdGVybWluYXRlIGFsbCBpbyBvbiB0aGUgcnBvcnQuICovCisJaWYgKGktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbykKIAkJaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQlpZiAocnBvcnQtPmZsYWdzICYgRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQlpZiAoIWNhbmNlbF9kZWxheWVkX3dvcmsoJnJwb3J0LT5mYWlsX2lvX3dvcmspKQotCQkJZmNfZmx1c2hfZGV2bG9zcyhzaG9zdCk7Ci0JCWlmICghY2FuY2VsX2RlbGF5ZWRfd29yaygmcnBvcnQtPmRldl9sb3NzX3dvcmspKQotCQkJZmNfZmx1c2hfZGV2bG9zcyhzaG9zdCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQkJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkc7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCiAJc2NzaV9yZW1vdmVfdGFyZ2V0KCZycG9ydC0+ZGV2KTsKIH0KIApAQCAtMTc2MCw2ICsxNzQxLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcnBvcnQtPmRldjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKIAlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qCiAJICogaWYgYSBzY2FuIGlzIHBlbmRpbmcsIGZsdXNoIHRoZSBTQ1NJIEhvc3Qgd29ya19xIHNvIHRoYXQgCkBAIC0xNzY4LDEzICsxNzUwLDM3IEBACiAJaWYgKHJwb3J0LT5mbGFncyAmIEZDX1JQT1JUX1NDQU5fUEVORElORykKIAkJc2NzaV9mbHVzaF93b3JrKHNob3N0KTsKIAorCS8qIGludm9sdmUgdGhlIExMREQgdG8gdGVybWluYXRlIGFsbCBwZW5kaW5nIGkvbyAqLworCWlmIChpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8pCisJCWktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7CisKKwkvKgorCSAqIENhbmNlbCBhbnkgb3V0c3RhbmRpbmcgdGltZXJzLiBUaGVzZSBzaG91bGQgcmVhbGx5IGV4aXN0CisJICogb25seSB3aGVuIHJtbW9kJ2luZyB0aGUgTExERCBhbmQgd2UncmUgYXNraW5nIGZvcgorCSAqIGltbWVkaWF0ZSB0ZXJtaW5hdGlvbiBvZiB0aGUgcnBvcnRzCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCWlmIChycG9ydC0+ZmxhZ3MgJiBGQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWlmICghY2FuY2VsX2RlbGF5ZWRfd29yaygmcnBvcnQtPmZhaWxfaW9fd29yaykpCisJCQlmY19mbHVzaF9kZXZsb3NzKHNob3N0KTsKKwkJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZycG9ydC0+ZGV2X2xvc3Nfd29yaykpCisJCQlmY19mbHVzaF9kZXZsb3NzKHNob3N0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0RFVkxPU1NfUEVORElORzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisKIAkvKiBEZWxldGUgU0NTSSB0YXJnZXQgYW5kIHNkZXZzICovCiAJaWYgKHJwb3J0LT5zY3NpX3RhcmdldF9pZCAhPSAtMSkKIAkJZmNfc3RhcmdldF9kZWxldGUoJnJwb3J0LT5zdGd0X2RlbGV0ZV93b3JrKTsKLQllbHNlIGlmIChpLT5mLT5kZXZfbG9zc190bW9fY2FsbGJrKQorCisJLyoKKwkgKiBOb3RpZnkgdGhlIGRyaXZlciB0aGF0IHRoZSBycG9ydCBpcyBub3cgZGVhZC4gVGhlIExMREQgd2lsbAorCSAqIGFsc28gZ3VhcmFudGVlIHRoYXQgYW55IGNvbW11bmljYXRpb24gdG8gdGhlIHJwb3J0IGlzIHRlcm1pbmF0ZWQKKwkgKi8KKwlpZiAoaS0+Zi0+ZGV2X2xvc3NfdG1vX2NhbGxiaykKIAkJaS0+Zi0+ZGV2X2xvc3NfdG1vX2NhbGxiayhycG9ydCk7Ci0JZWxzZSBpZiAoaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKQotCQlpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwogCiAJdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoZGV2KTsKIAlkZXZpY2VfZGVsKGRldik7CkBAIC0xOTYzLDggKzE5NjksNiBAQAogCQkJfQogCiAJCQlpZiAobWF0Y2gpIHsKLQkJCQlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrID0KLQkJCQkJCQkmcnBvcnQtPmRldl9sb3NzX3dvcms7CiAKIAkJCQltZW1jcHkoJnJwb3J0LT5ub2RlX25hbWUsICZpZHMtPm5vZGVfbmFtZSwKIAkJCQkJc2l6ZW9mKHJwb3J0LT5ub2RlX25hbWUpKTsKQEAgLTE5ODIsNDYgKzE5ODYsNjEgQEAKIAkJCQkJCWZjaS0+Zi0+ZGRfZmNycG9ydF9zaXplKTsKIAogCQkJCS8qCi0JCQkJICogSWYgd2Ugd2VyZSBibG9ja2VkLCB3ZSB3ZXJlIGEgdGFyZ2V0LgotCQkJCSAqIElmIG5vIGxvbmdlciBhIHRhcmdldCwgd2UgbGVhdmUgdGhlIHRpbWVyCi0JCQkJICogcnVubmluZyBpbiBjYXNlIHRoZSBwb3J0IGNoYW5nZXMgcm9sZXMKLQkJCQkgKiBwcmlvciB0byB0aGUgdGltZXIgZXhwaXJpbmcuIElmIHRoZSB0aW1lcgotCQkJCSAqIGZpcmVzLCB0aGUgdGFyZ2V0IHdpbGwgYmUgdG9ybiBkb3duLgorCQkJCSAqIElmIHdlIHdlcmUgbm90IGEgdGFyZ2V0LCBjYW5jZWwgdGhlCisJCQkJICogaW8gdGVybWluYXRlIGFuZCBycG9ydCB0aW1lcnMsIGFuZAorCQkJCSAqIHdlJ3JlIGRvbmUuCisJCQkJICoKKwkJCQkgKiBJZiB3ZSB3ZXJlIGEgdGFyZ2V0LCBidXQgb3VyIG5ldyByb2xlCisJCQkJICogZG9lc24ndCBpbmRpY2F0ZSBhIHRhcmdldCwgbGVhdmUgdGhlCisJCQkJICogdGltZXJzIHJ1bm5pbmcgZXhwZWN0aW5nIHRoZSByb2xlIHRvCisJCQkJICogY2hhbmdlIGFzIHRoZSB0YXJnZXQgZnVsbHkgbG9ncyBpbi4gSWYKKwkJCQkgKiBpdCBkb2Vzbid0LCB0aGUgdGFyZ2V0IHdpbGwgYmUgdG9ybiBkb3duLgorCQkJCSAqCisJCQkJICogSWYgd2Ugd2VyZSBhIHRhcmdldCwgYW5kIG91ciByb2xlIHNob3dzCisJCQkJICogd2UncmUgc3RpbGwgYSB0YXJnZXQsIGNhbmNlbCB0aGUgdGltZXJzCisJCQkJICogYW5kIGtpY2sgb2ZmIGEgc2Nhbi4KIAkJCQkgKi8KLQkJCQlpZiAoIShpZHMtPnJvbGVzICYgRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUKSkKKworCQkJCS8qIHdhcyBhIHRhcmdldCwgbm90IGluIHJvbGVzICovCisJCQkJaWYgKChycG9ydC0+c2NzaV90YXJnZXRfaWQgIT0gLTEpICYmCisJCQkJICAgICghKGlkcy0+cm9sZXMgJiBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQpKSkKIAkJCQkJcmV0dXJuIHJwb3J0OwogCi0JCQkJLyogcmVzdGFydCB0aGUgdGFyZ2V0ICovCi0KIAkJCQkvKgotCQkJCSAqIFN0b3AgdGhlIHRhcmdldCB0aW1lcnMgZmlyc3QuIFRha2Ugbm8gYWN0aW9uCi0JCQkJICogb24gdGhlIGRlbF90aW1lciBmYWlsdXJlIGFzIHRoZSBzdGF0ZQotCQkJCSAqIG1hY2hpbmUgc3RhdGUgY2hhbmdlIHdpbGwgdmFsaWRhdGUgdGhlCi0JCQkJICogdHJhbnNhY3Rpb24uCisJCQkJICogU3RvcCB0aGUgZmFpbCBpbyBhbmQgZGV2X2xvc3MgdGltZXJzLgorCQkJCSAqIElmIHRoZXkgZmx1c2gsIHRoZSBwb3J0X3N0YXRlIHdpbGwKKwkJCQkgKiBiZSBjaGVja2VkIGFuZCB3aWxsIE5PT1AgdGhlIGZ1bmN0aW9uLgogCQkJCSAqLwogCQkJCWlmICghY2FuY2VsX2RlbGF5ZWRfd29yaygmcnBvcnQtPmZhaWxfaW9fd29yaykpCiAJCQkJCWZjX2ZsdXNoX2Rldmxvc3Moc2hvc3QpOwotCQkJCWlmICghY2FuY2VsX2RlbGF5ZWRfd29yayh3b3JrKSkKKwkJCQlpZiAoIWNhbmNlbF9kZWxheWVkX3dvcmsoJnJwb3J0LT5kZXZfbG9zc193b3JrKSkKIAkJCQkJZmNfZmx1c2hfZGV2bG9zcyhzaG9zdCk7CiAKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAkJCQlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0RFVkxPU1NfUEVORElORzsKIAotCQkJCS8qIGluaXRpYXRlIGEgc2NhbiBvZiB0aGUgdGFyZ2V0ICovCi0JCQkJcnBvcnQtPmZsYWdzIHw9IEZDX1JQT1JUX1NDQU5fUEVORElORzsKLQkJCQlzY3NpX3F1ZXVlX3dvcmsoc2hvc3QsICZycG9ydC0+c2Nhbl93b3JrKTsKLQotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi0JCQkJc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7CisJCQkJLyogaWYgdGFyZ2V0LCBpbml0aWF0ZSBhIHNjYW4gKi8KKwkJCQlpZiAocnBvcnQtPnNjc2lfdGFyZ2V0X2lkICE9IC0xKSB7CisJCQkJCXJwb3J0LT5mbGFncyB8PSBGQ19SUE9SVF9TQ0FOX1BFTkRJTkc7CisJCQkJCXNjc2lfcXVldWVfd29yayhzaG9zdCwKKwkJCQkJCQkmcnBvcnQtPnNjYW5fd29yayk7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywKKwkJCQkJCQlmbGFncyk7CisJCQkJCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnJwb3J0LT5kZXYpOworCQkJCX0gZWxzZQorCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssCisJCQkJCQkJZmxhZ3MpOwogCiAJCQkJcmV0dXJuIHJwb3J0OwogCQkJfQogCQl9CiAJfQogCi0JLyogU2VhcmNoIHRoZSBiaW5kaW5ncyBhcnJheSAqLworCS8qCisJICogU2VhcmNoIHRoZSBiaW5kaW5ncyBhcnJheQorCSAqIE5vdGU6IGlmIG5ldmVyIGEgRkNQIHRhcmdldCwgeW91IHdvbid0IGJlIG9uIHRoaXMgbGlzdAorCSAqLwogCWlmIChmY19ob3N0LT50Z3RpZF9iaW5kX3R5cGUgIT0gRkNfVEdUSURfQklORF9OT05FKSB7CiAKIAkJLyogc2VhcmNoIGZvciBhIG1hdGNoaW5nIGNvbnNpc3RlbnQgYmluZGluZyAqLwpAQCAtMjE1OCwxNSArMjE3NywyNCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCi0JLyogSWYgbm8gc2NzaSB0YXJnZXQgaWQgbWFwcGluZywgZGVsZXRlIGl0ICovCi0JaWYgKHJwb3J0LT5zY3NpX3RhcmdldF9pZCA9PSAtMSkgewotCQlsaXN0X2RlbCgmcnBvcnQtPnBlZXJzKTsKLQkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfREVMRVRFRDsKLQkJZmNfcXVldWVfd29yayhzaG9zdCwgJnJwb3J0LT5ycG9ydF9kZWxldGVfd29yayk7CisJaWYgKHJwb3J0LT5wb3J0X3N0YXRlICE9IEZDX1BPUlRTVEFURV9PTkxJTkUpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKKwkvKgorCSAqIEluIHRoZSBwYXN0LCB3ZSBpZiB0aGlzIHdhcyBub3QgYW4gRkNQLVRhcmdldCwgd2Ugd291bGQKKwkgKiB1bmNvbmRpdGlvbmFsbHkganVzdCBqdW1wIHRvIGRlbGV0aW5nIHRoZSBycG9ydC4KKwkgKiBIb3dldmVyLCBycG9ydHMgY2FuIGJlIHVzZWQgYXMgbm9kZSBjb250YWluZXJzIGJ5IHRoZSBMTERELAorCSAqIGFuZCBpdHMgbm90IGFwcHJvcHJpYXRlIHRvIGp1c3QgdGVybWluYXRlIHRoZSBycG9ydCBhdCB0aGUKKwkgKiBmaXJzdCBzaWduIG9mIGEgbG9zcyBpbiBjb25uZWN0aXZpdHkuIFRoZSBMTEREIG1heSB3YW50IHRvCisJICogc2VuZCBFTFMgdHJhZmZpYyB0byByZS12YWxpZGF0ZSB0aGUgbG9naW4uIElmIHRoZSBycG9ydCBpcworCSAqIGltbWVkaWF0ZWx5IGRlbGV0ZWQsIGl0IG1ha2VzIGl0IGluYXBwcm9wcmlhdGUgZm9yIGEgbm9kZQorCSAqIGNvbnRhaW5lci4KKwkgKiBTby4uLiB3ZSBub3cgdW5jb25kaXRpb25hbGx5IHdhaXQgZGV2X2xvc3NfdG1vIGJlZm9yZQorCSAqIGRlc3Ryb3lpbmcgYW4gcnBvcnQuCisJICovCisKIAlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9CTE9DS0VEOwogCiAJcnBvcnQtPmZsYWdzIHw9IEZDX1JQT1JUX0RFVkxPU1NfUEVORElORzsKQEAgLTIyNjMsMTEgKzIyOTEsMTEgQEAKIEVYUE9SVF9TWU1CT0woZmNfcmVtb3RlX3BvcnRfcm9sZWNoZyk7CiAKIC8qKgotICogZmNfdGltZW91dF9kZWxldGVkX3Jwb3J0IC0gVGltZW91dCBoYW5kbGVyIGZvciBhIGRlbGV0ZWQgcmVtb3RlIHBvcnQgdGhhdAotICogICAgICAgICAgICAgICAgICAgICAgIHdhcyBhIFNDU0kgdGFyZ2V0ICh0aHVzIHdhcyBibG9ja2VkKSwgYW5kIGZhaWxlZAotICogICAgICAgICAgICAgICAgICAgICAgIHRvIHJldHVybiBpbiB0aGUgYWxsb3RlZCB0aW1lLgorICogZmNfdGltZW91dF9kZWxldGVkX3Jwb3J0IC0gVGltZW91dCBoYW5kbGVyIGZvciBhIGRlbGV0ZWQgcmVtb3RlIHBvcnQsCisgKiAJCQl3aGljaCB3ZSBibG9ja2VkLCBhbmQgaGFzIG5vdyBmYWlsZWQgdG8gcmV0dXJuCisgKiAJCQlpbiB0aGUgYWxsb3R0ZWQgdGltZS4KICAqIAotICogQHdvcms6CXJwb3J0IHRhcmdldCB0aGF0IGZhaWxlZCB0byByZWFwcGVhciBpbiB0aGUgYWxsb3RlZCB0aW1lLgorICogQHdvcms6CXJwb3J0IHRhcmdldCB0aGF0IGZhaWxlZCB0byByZWFwcGVhciBpbiB0aGUgYWxsb3R0ZWQgdGltZS4KICAqKi8KIHN0YXRpYyB2b2lkCiBmY190aW1lb3V0X2RlbGV0ZWRfcnBvcnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMjI4MywxMCArMjMxMSwxMiBAQAogCXJwb3J0LT5mbGFncyAmPSB+RkNfUlBPUlRfREVWTE9TU19QRU5ESU5HOwogCiAJLyoKLQkgKiBJZiB0aGUgcG9ydCBpcyBPTkxJTkUsIHRoZW4gaXQgY2FtZSBiYWNrLiBWYWxpZGF0ZSBpdCdzIHN0aWxsIGFuCi0JICogRkNQIHRhcmdldC4gSWYgbm90LCB0ZWFyIGRvd24gdGhlIHNjc2lfdGFyZ2V0IG9uIGl0LgorCSAqIElmIHRoZSBwb3J0IGlzIE9OTElORSwgdGhlbiBpdCBjYW1lIGJhY2suIElmIGl0IHdhcyBhIFNDU0kKKwkgKiB0YXJnZXQsIHZhbGlkYXRlIGl0IHN0aWxsIGlzLiBJZiBub3QsIHRlYXIgZG93biB0aGUKKwkgKiBzY3NpX3RhcmdldCBvbiBpdC4KIAkgKi8KIAlpZiAoKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9PTkxJTkUpICYmCisJICAgIChycG9ydC0+c2NzaV90YXJnZXRfaWQgIT0gLTEpICYmCiAJICAgICEocnBvcnQtPnJvbGVzICYgRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUKSkgewogCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcnBvcnQtPmRldiwKIAkJCSJibG9ja2VkIEZDIHJlbW90ZSBwb3J0IHRpbWUgb3V0OiBubyBsb25nZXIiCkBAIC0yMjk3LDE4ICsyMzI3LDI0IEBACiAJCXJldHVybjsKIAl9CiAKKwkvKiBOT09QIHN0YXRlIC0gd2UncmUgZmx1c2hpbmcgd29ya3EncyAqLwogCWlmIChycG9ydC0+cG9ydF9zdGF0ZSAhPSBGQ19QT1JUU1RBVEVfQkxPQ0tFRCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnJwb3J0LT5kZXYsCi0JCQkiYmxvY2tlZCBGQyByZW1vdGUgcG9ydCB0aW1lIG91dDogbGVhdmluZyB0YXJnZXQgYWxvbmVcbiIpOworCQkJImJsb2NrZWQgRkMgcmVtb3RlIHBvcnQgdGltZSBvdXQ6IGxlYXZpbmciCisJCQkiIHJwb3J0JXMgYWxvbmVcbiIsCisJCQkocnBvcnQtPnNjc2lfdGFyZ2V0X2lkICE9IC0xKSA/ICAiIGFuZCBzdGFyZ2V0IiA6ICIiKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChmY19ob3N0LT50Z3RpZF9iaW5kX3R5cGUgPT0gRkNfVEdUSURfQklORF9OT05FKSB7CisJaWYgKChmY19ob3N0LT50Z3RpZF9iaW5kX3R5cGUgPT0gRkNfVEdUSURfQklORF9OT05FKSB8fAorCSAgICAocnBvcnQtPnNjc2lfdGFyZ2V0X2lkID09IC0xKSkgewogCQlsaXN0X2RlbCgmcnBvcnQtPnBlZXJzKTsKIAkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfREVMRVRFRDsKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnJwb3J0LT5kZXYsCi0JCQkiYmxvY2tlZCBGQyByZW1vdGUgcG9ydCB0aW1lIG91dDogcmVtb3ZpbmcgdGFyZ2V0XG4iKTsKKwkJCSJibG9ja2VkIEZDIHJlbW90ZSBwb3J0IHRpbWUgb3V0OiByZW1vdmluZyIKKwkJCSIgcnBvcnQlc1xuIiwKKwkJCShycG9ydC0+c2NzaV90YXJnZXRfaWQgIT0gLTEpID8gICIgYW5kIHN0YXJnZXQiIDogIiIpOwogCQlmY19xdWV1ZV93b3JrKHNob3N0LCAmcnBvcnQtPnJwb3J0X2RlbGV0ZV93b3JrKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggMDBlNDY2Ni4uM2Q4YzljYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTE3ODksNyArMTc4OSw3IEBACiBzdGF0aWMgaW50IHNkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKIAlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gc2NzaV9kaXNrX2dldF9mcm9tX2RldihkZXYpOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoIXNka3ApCiAJCXJldHVybiAwOwkvKiB0aGlzIGNhbiBoYXBwZW4gKi8KQEAgLTE3OTgsMzAgKzE3OTgsMzQgQEAKIAkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLCAiU3luY2hyb25pemluZyBTQ1NJIGNhY2hlXG4iKTsKIAkJcmV0ID0gc2Rfc3luY19jYWNoZShzZGtwKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKG1lc2cuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCAmJgogCSAgICBzZGtwLT5kZXZpY2UtPm1hbmFnZV9zdGFydF9zdG9wKSB7CiAJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIlN0b3BwaW5nIGRpc2tcbiIpOwogCQlyZXQgPSBzZF9zdGFydF9zdG9wX2RldmljZShzZGtwLCAwKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0dXJuIDA7Citkb25lOgorCXNjc2lfZGlza19wdXQoc2RrcCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzZF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSBzY3NpX2Rpc2tfZ2V0X2Zyb21fZGV2KGRldik7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoIXNka3AtPmRldmljZS0+bWFuYWdlX3N0YXJ0X3N0b3ApCi0JCXJldHVybiAwOworCQlnb3RvIGRvbmU7CiAKIAlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJTdGFydGluZyBkaXNrXG4iKTsKKwlyZXQgPSBzZF9zdGFydF9zdG9wX2RldmljZShzZGtwLCAxKTsKIAotCXJldHVybiBzZF9zdGFydF9zdG9wX2RldmljZShzZGtwLCAxKTsKK2RvbmU6CisJc2NzaV9kaXNrX3B1dChzZGtwKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggNTcwOTc3Yy4uMGM2OTFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnaXdkOTMuYyBiL2RyaXZlcnMvc2NzaS9zZ2l3ZDkzLmMKaW5kZXggYTE1NzUyYi4uZWVmODI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnaXdkOTMuYworKysgYi9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jCkBAIC02LDg3ICs2LDQ5IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQW5kcmV3IFIuIEJha2VyIChhbmRyZXdiQHVhYi5lZHUpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgRmxvcmlhbiBMb2hvZmYgKGZsb0ByZmM4MjIub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzIFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMDcgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQogICogCiAgKiAoSW4gYWxsIHRydXRoLCBKZWQgU2NoaW1tZWwgd3JvdGUgYWxsIHRoaXMgY29kZS4pCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorCisjdW5kZWYgREVCVUcKKwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCi0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9zZ2lhbGliLmg+Ci0jaW5jbHVkZSA8YXNtL3NnaS9zZ2kuaD4KLSNpbmNsdWRlIDxhc20vc2dpL21jLmg+CiAjaW5jbHVkZSA8YXNtL3NnaS9ocGMzLmg+CiAjaW5jbHVkZSA8YXNtL3NnaS9pcDIyLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZ2kvd2QuaD4KIAogI2luY2x1ZGUgInNjc2kuaCIKLSNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgIndkMzNjOTMuaCIKIAotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLQotI2lmIDAKLSNkZWZpbmUgRFBSSU5USyhhcmdzLi4uKQlwcmludGsoYXJncykKLSNlbHNlCi0jZGVmaW5lIERQUklOVEsoYXJncy4uLikKLSNlbmRpZgotCi0jZGVmaW5lIEhEQVRBKHB0cikgKChzdHJ1Y3QgaXAyMl9ob3N0ZGF0YSAqKSgocHRyKS0+aG9zdGRhdGEpKQotCiBzdHJ1Y3QgaXAyMl9ob3N0ZGF0YSB7CiAJc3RydWN0IFdEMzNDOTNfaG9zdGRhdGEgd2g7CiAJc3RydWN0IGhwY19kYXRhIHsKIAkJZG1hX2FkZHJfdCAgICAgIGRtYTsKLQkJdm9pZCAgICAgICAgICAgICogY3B1OworCQl2b2lkCQkqY3B1OwogCX0gaGQ7CiB9OwogCisjZGVmaW5lIGhvc3RfdG9faG9zdGRhdGEoaG9zdCkgKChzdHJ1Y3QgaXAyMl9ob3N0ZGF0YSAqKSgoaG9zdCktPmhvc3RkYXRhKSkKKwogc3RydWN0IGhwY19jaHVuayB7CiAJc3RydWN0IGhwY19kbWFfZGVzYyBkZXNjOwogCXUzMiBfcGFkZGluZzsJLyogYWxpZ24gdG8gcXVhZHdvcmQgYm91bmRhcnkgKi8KIH07CiAKLXN0cnVjdCBTY3NpX0hvc3QgKnNnaXdkOTNfaG9zdDsKLXN0cnVjdCBTY3NpX0hvc3QgKnNnaXdkOTNfaG9zdDE7Ci0KLS8qIFd1ZmYgd3VmZiwgd3VmZiwgd2QzM2M5My5jLCB3dWZmIHd1ZmYsIG9iamVjdCBvcmllbnRlZCwgYm93IHdvdy4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV93ZDMzYzkzX2NvdW50KGNvbnN0IHdkMzNjOTNfcmVncyByZWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlKQotewotCSpyZWdzLlNBU1IgPSBXRF9UUkFOU0ZFUl9DT1VOVF9NU0I7Ci0JbWIoKTsKLQkqcmVncy5TQ01EID0gKCh2YWx1ZSA+PiAxNikgJiAweGZmKTsKLQkqcmVncy5TQ01EID0gKCh2YWx1ZSA+PiAgOCkgJiAweGZmKTsKLQkqcmVncy5TQ01EID0gKCh2YWx1ZSA+PiAgMCkgJiAweGZmKTsKLQltYigpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF93ZDMzYzkzX2NvdW50KGNvbnN0IHdkMzNjOTNfcmVncyByZWdzKQotewotCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0KLQkqcmVncy5TQVNSID0gV0RfVFJBTlNGRVJfQ09VTlRfTVNCOwotCW1iKCk7Ci0JdmFsdWUgPSAgKCgqcmVncy5TQ01EICYgMHhmZikgPDwgMTYpOwotCXZhbHVlIHw9ICgoKnJlZ3MuU0NNRCAmIDB4ZmYpIDw8ICA4KTsKLQl2YWx1ZSB8PSAoKCpyZWdzLlNDTUQgJiAweGZmKSA8PCAgMCk7Ci0JbWIoKTsKLQlyZXR1cm4gdmFsdWU7Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCBzZ2l3ZDkzX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKiBob3N0ID0gKHN0cnVjdCBTY3NpX0hvc3QgKikgZGV2X2lkOworCXN0cnVjdCBTY3NpX0hvc3QgKiBob3N0ID0gZGV2X2lkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKQEAgLTEzMSwxMiArOTMsMTIgQEAKIAogc3RhdGljIGludCBkbWFfc2V0dXAoc3RydWN0IHNjc2lfY21uZCAqY21kLCBpbnQgZGF0YWlucCkKIHsKLQlzdHJ1Y3QgaXAyMl9ob3N0ZGF0YSAqaGRhdGEgPSBIREFUQShjbWQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IGlwMjJfaG9zdGRhdGEgKmhkYXRhID0gaG9zdF90b19ob3N0ZGF0YShjbWQtPmRldmljZS0+aG9zdCk7CiAJc3RydWN0IGhwYzNfc2NzaXJlZ3MgKmhyZWdzID0KIAkJKHN0cnVjdCBocGMzX3Njc2lyZWdzICopIGNtZC0+ZGV2aWNlLT5ob3N0LT5iYXNlOwogCXN0cnVjdCBocGNfY2h1bmsgKmhjcCA9IChzdHJ1Y3QgaHBjX2NodW5rICopIGhkYXRhLT5oZC5jcHU7CiAKLQlEUFJJTlRLKCJkbWFfc2V0dXA6IGRhdGFpbnA8JWQ+IGhjcDwlcD4gIiwgZGF0YWlucCwgaGNwKTsKKwlwcl9kZWJ1ZygiZG1hX3NldHVwOiBkYXRhaW5wPCVkPiBoY3A8JXA+ICIsIGRhdGFpbnAsIGhjcCk7CiAKIAloZGF0YS0+d2guZG1hX2RpciA9IGRhdGFpbnA7CiAKQEAgLTE1MSw3ICsxMTMsNyBAQAogCiAJZmlsbF9ocGNfZW50cmllcyhoY3AsIGNtZCwgZGF0YWlucCk7CiAKLQlEUFJJTlRLKCIgSFBDR09cbiIpOworCXByX2RlYnVnKCIgSFBDR09cbiIpOwogCiAJLyogU3RhcnQgdXAgdGhlIEhQQy4gKi8KIAlocmVncy0+bmRwdHIgPSBoZGF0YS0+aGQuZG1hOwpAQCAtMTY2LDcgKzEyOCw3IEBACiBzdGF0aWMgdm9pZCBkbWFfc3RvcChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsCiAJCSAgICAgaW50IHN0YXR1cykKIHsKLQlzdHJ1Y3QgaXAyMl9ob3N0ZGF0YSAqaGRhdGEgPSBIREFUQShpbnN0YW5jZSk7CisJc3RydWN0IGlwMjJfaG9zdGRhdGEgKmhkYXRhID0gaG9zdF90b19ob3N0ZGF0YShpbnN0YW5jZSk7CiAJc3RydWN0IGhwYzNfc2NzaXJlZ3MgKmhyZWdzOwogCiAJaWYgKCFTQ3BudCkKQEAgLTE3NCw3ICsxMzYsNyBAQAogCiAJaHJlZ3MgPSAoc3RydWN0IGhwYzNfc2NzaXJlZ3MgKikgU0NwbnQtPmRldmljZS0+aG9zdC0+YmFzZTsKIAotCURQUklOVEsoImRtYV9zdG9wOiBzdGF0dXM8JWQ+ICIsIHN0YXR1cyk7CisJcHJfZGVidWcoImRtYV9zdG9wOiBzdGF0dXM8JWQ+ICIsIHN0YXR1cyk7CiAKIAkvKiBGaXJzdCBzdG9wIHRoZSBIUEMgYW5kIGZsdXNoIGl0J3MgRklGTy4gKi8KIAlpZiAoaGRhdGEtPndoLmRtYV9kaXIpIHsKQEAgLTE4Niw3ICsxNDgsNyBAQAogCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgU0NwbnQtPlNDcC5kbWFfaGFuZGxlLCBTQ3BudC0+U0NwLnRoaXNfcmVzaWR1YWwsCiAJICAgICAgICAgICAgICAgICBTQ3BudC0+c2NfZGF0YV9kaXJlY3Rpb24pOwogCi0JRFBSSU5USygiXG4iKTsKKwlwcl9kZWJ1ZygiXG4iKTsKIH0KIAogdm9pZCBzZ2l3ZDkzX3Jlc2V0KHVuc2lnbmVkIGxvbmcgYmFzZSkKQEAgLTIxNiw5NiArMTc4LDYgQEAKIAloY3AtPmRlc2MucG5leHQgPSBoZC0+ZG1hOwogfQogCi1zdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqIF9faW5pdCBzZ2l3ZDkzX3NldHVwX3Njc2koCi0Jc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqU0dJYmxvd3MsIGludCB1bml0LCBpbnQgaXJxLAotCXN0cnVjdCBocGMzX3Njc2lyZWdzICpocmVncywgdW5zaWduZWQgY2hhciAqd2RyZWdzKQotewotCXN0cnVjdCBpcDIyX2hvc3RkYXRhICpoZGF0YTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwotCXdkMzNjOTNfcmVncyByZWdzOwotCi0JaG9zdCA9IHNjc2lfcmVnaXN0ZXIoU0dJYmxvd3MsIHNpemVvZihzdHJ1Y3QgaXAyMl9ob3N0ZGF0YSkpOwotCWlmICghaG9zdCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlob3N0LT5iYXNlID0gKHVuc2lnbmVkIGxvbmcpIGhyZWdzOwotCWhvc3QtPmlycSA9IGlycTsKLQotCWhkYXRhID0gSERBVEEoaG9zdCk7Ci0JaGRhdGEtPmhkLmNwdSA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBQQUdFX1NJWkUsICZoZGF0YS0+aGQuZG1hLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFoZGF0YS0+aGQuY3B1KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInNnaXdkOTM6IENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKLQkJICAgICAgICJob3N0ICVkIGJ1ZmZlci5cbiIsIHVuaXQpOwotCQlnb3RvIG91dF91bnJlZ2lzdGVyOwotCX0KLQlpbml0X2hwY19jaGFpbigmaGRhdGEtPmhkKTsKLQotCXJlZ3MuU0FTUiA9IHdkcmVncyArIDM7Ci0JcmVncy5TQ01EID0gd2RyZWdzICsgNzsKLQotCXdkMzNjOTNfaW5pdChob3N0LCByZWdzLCBkbWFfc2V0dXAsIGRtYV9zdG9wLCBXRDMzQzkzX0ZTX01IWigyMCkpOwotCi0JaWYgKGhkYXRhLT53aC5ub19zeW5jID09IDB4ZmYpCi0JCWhkYXRhLT53aC5ub19zeW5jID0gMDsKLQotCWlmIChyZXF1ZXN0X2lycShpcnEsIHNnaXdkOTNfaW50ciwgMCwgIlNHSSBXRDkzIiwgKHZvaWQgKikgaG9zdCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2dpd2Q5MzogQ291bGQgbm90IHJlZ2lzdGVyIGlycSAlZCAiCi0JCSAgICAgICAiZm9yIGhvc3QgJWQuXG4iLCBpcnEsIHVuaXQpOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQlyZXR1cm4gaG9zdDsKLQotb3V0X2ZyZWU6Ci0JZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgUEFHRV9TSVpFLCBoZGF0YS0+aGQuY3B1LCBoZGF0YS0+aGQuZG1hKTsKLQl3ZDMzYzkzX3JlbGVhc2UoKTsKLQotb3V0X3VucmVnaXN0ZXI6Ci0Jc2NzaV91bnJlZ2lzdGVyKGhvc3QpOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNnaXdkOTNfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKlNHSWJsb3dzKQotewotCWludCBmb3VuZCA9IDA7Ci0KLQlTR0libG93cy0+cHJvY19uYW1lID0gIlNHSVdEOTMiOwotCXNnaXdkOTNfaG9zdCA9IHNnaXdkOTNfc2V0dXBfc2NzaShTR0libG93cywgMCwgU0dJX1dEOTNfMF9JUlEsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZocGMzYzAtPnNjc2lfY2hhbjAsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopaHBjM2MwLT5zY3NpMF9leHQpOwotCWlmIChzZ2l3ZDkzX2hvc3QpCi0JCWZvdW5kKys7Ci0KLQkvKiBTZXQgdXAgc2Vjb25kIGNvbnRyb2xsZXIgb24gdGhlIEluZGlnbzIgKi8KLQlpZiAoaXAyMl9pc19mdWxsaG91c2UoKSkgewotCQlzZ2l3ZDkzX2hvc3QxID0gc2dpd2Q5M19zZXR1cF9zY3NpKFNHSWJsb3dzLCAxLCBTR0lfV0Q5M18xX0lSUSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAmaHBjM2MwLT5zY3NpX2NoYW4xLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopaHBjM2MwLT5zY3NpMV9leHQpOwotCQlpZiAoc2dpd2Q5M19ob3N0MSkKLQkJCWZvdW5kKys7Ci0JfQotCi0JcmV0dXJuIGZvdW5kOwotfQotCi1zdGF0aWMgaW50IHNnaXdkOTNfcmVsZWFzZShzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgaXAyMl9ob3N0ZGF0YSAqaGRhdGEgPSBIREFUQShpbnN0YW5jZSk7Ci0JaW50IGlycSA9IDA7Ci0KLQlpZiAoc2dpd2Q5M19ob3N0ICYmIHNnaXdkOTNfaG9zdCA9PSBpbnN0YW5jZSkKLQkJaXJxID0gU0dJX1dEOTNfMF9JUlE7Ci0JZWxzZSBpZiAoc2dpd2Q5M19ob3N0MSAmJiBzZ2l3ZDkzX2hvc3QxID09IGluc3RhbmNlKQotCQlpcnEgPSBTR0lfV0Q5M18xX0lSUTsKLQotCWZyZWVfaXJxKGlycSwgc2dpd2Q5M19pbnRyKTsKLQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBQQUdFX1NJWkUsIGhkYXRhLT5oZC5jcHUsIGhkYXRhLT5oZC5kbWEpOwotCXdkMzNjOTNfcmVsZWFzZSgpOwotCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBpbnQgc2dpd2Q5M19idXNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCS8qIEZJWE1FIHBlcmZvcm0gYnVzLXNwZWNpZmljIHJlc2V0ICovCkBAIC0zMjUsMTEgKzE5NywxMCBAQAogICogYXJndW1lbnRzIG5vdCB3aXRoIHBvaW50ZXJzLiAgU28gdGhpcyBpcyBnb2luZyB0byBibG93IHVwIGJlYXV0eWZ1bGx5CiAgKiBvbiA2NC1iaXQgc3lzdGVtcyB3aXRoIG1lbW9yeSBvdXRzaWRlIHRoZSBjb21wYXQgYWRkcmVzcyBzcGFjZXMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNnaXdkOTNfdGVtcGxhdGUgPSB7CisJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLnByb2NfbmFtZQkJPSAiU0dJV0Q5MyIsCiAJLm5hbWUJCQk9ICJTR0kgV0Q5MyIsCi0JLmRldGVjdAkJCT0gc2dpd2Q5M19kZXRlY3QsCi0JLnJlbGVhc2UJCT0gc2dpd2Q5M19yZWxlYXNlLAogCS5xdWV1ZWNvbW1hbmQJCT0gd2QzM2M5M19xdWV1ZWNvbW1hbmQsCiAJLmVoX2Fib3J0X2hhbmRsZXIJPSB3ZDMzYzkzX2Fib3J0LAogCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IHNnaXdkOTNfYnVzX3Jlc2V0LApAQCAtMzQwLDQgKzIxMSwxMDkgQEAKIAkuY21kX3Blcl9sdW4JCT0gOCwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRElTQUJMRV9DTFVTVEVSSU5HLAogfTsKLSNpbmNsdWRlICJzY3NpX21vZHVsZS5jIgorCitzdGF0aWMgaW50IF9faW5pdCBzZ2l3ZDkzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNnaXdkOTNfcGxhdGZvcm1fZGF0YSAqcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBjaGFyICp3ZHJlZ3MgPSBwZC0+d2RyZWdzOworCXN0cnVjdCBocGMzX3Njc2lyZWdzICpocmVncyA9IHBkLT5ocmVnczsKKwlzdHJ1Y3QgaXAyMl9ob3N0ZGF0YSAqaGRhdGE7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKKwl3ZDMzYzkzX3JlZ3MgcmVnczsKKwl1bnNpZ25lZCBpbnQgdW5pdCA9IHBkLT51bml0OworCXVuc2lnbmVkIGludCBpcnEgPSBwZC0+aXJxOworCWludCBlcnI7CisKKwlob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZzZ2l3ZDkzX3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGlwMjJfaG9zdGRhdGEpKTsKKwlpZiAoIWhvc3QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaG9zdC0+YmFzZSA9ICh1bnNpZ25lZCBsb25nKSBocmVnczsKKwlob3N0LT5pcnEgPSBpcnE7CisKKwloZGF0YSA9IGhvc3RfdG9faG9zdGRhdGEoaG9zdCk7CisJaGRhdGEtPmhkLmNwdSA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBQQUdFX1NJWkUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGRhdGEtPmhkLmRtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZGF0YS0+aGQuY3B1KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNnaXdkOTM6IENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKKwkJICAgICAgICJob3N0ICVkIGJ1ZmZlci5cbiIsIHVuaXQpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9wdXQ7CisJfQorCisJaW5pdF9ocGNfY2hhaW4oJmhkYXRhLT5oZCk7CisKKwlyZWdzLlNBU1IgPSB3ZHJlZ3MgKyAzOworCXJlZ3MuU0NNRCA9IHdkcmVncyArIDc7CisKKwl3ZDMzYzkzX2luaXQoaG9zdCwgcmVncywgZG1hX3NldHVwLCBkbWFfc3RvcCwgV0QzM0M5M19GU19NSFooMjApKTsKKworCWlmIChoZGF0YS0+d2gubm9fc3luYyA9PSAweGZmKQorCQloZGF0YS0+d2gubm9fc3luYyA9IDA7CisKKwllcnIgPSByZXF1ZXN0X2lycShpcnEsIHNnaXdkOTNfaW50ciwgMCwgIlNHSSBXRDkzIiwgaG9zdCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZ2l3ZDkzOiBDb3VsZCBub3QgcmVnaXN0ZXIgaXJxICVkICIKKwkJICAgICAgICJmb3IgaG9zdCAlZC5cbiIsIGlycSwgdW5pdCk7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CisKKwllcnIgPSBzY3NpX2FkZF9ob3N0KGhvc3QsIE5VTEwpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2lycTsKKworCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOworCisJcmV0dXJuIDA7CisKK291dF9pcnE6CisJZnJlZV9pcnEoaXJxLCBob3N0KTsKK291dF9mcmVlOgorCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFBBR0VfU0laRSwgaGRhdGEtPmhkLmNwdSwgaGRhdGEtPmhkLmRtYSk7CitvdXRfcHV0OgorCXNjc2lfaG9zdF9wdXQoaG9zdCk7CitvdXQ6CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2dpd2Q5M19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGlwMjJfaG9zdGRhdGEgKmhkYXRhID0gKHN0cnVjdCBpcDIyX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBzZ2l3ZDkzX3BsYXRmb3JtX2RhdGEgKnBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOworCWZyZWVfaXJxKHBkLT5pcnEsIGhvc3QpOworCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIFBBR0VfU0laRSwgaGRhdGEtPmhkLmNwdSwgaGRhdGEtPmhkLmRtYSk7CisJc2NzaV9ob3N0X3B1dChob3N0KTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2dpd2Q5M19kcml2ZXIgPSB7CisJLnByb2JlICA9IHNnaXdkOTNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNnaXdkOTNfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSAgID0gInNnaXdkOTMiCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgc2dpd2Q5M19tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNnaXdkOTNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNnaXdkOTNfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNnaXdkOTNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2dpd2Q5M19tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChzZ2l3ZDkzX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTR0kgV0QzM0M5MyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zbmlfNTNjNzEwLmMgYi9kcml2ZXJzL3Njc2kvc25pXzUzYzcxMC5jCmluZGV4IDZiYzUwNTEuLmE3ZGZiNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zbmlfNTNjNzEwLmMKKysrIGIvZHJpdmVycy9zY3NpL3NuaV81M2M3MTAuYwpAQCAtOTgsNyArOTgsNyBAQAogCWhvc3QtPnRoaXNfaWQgPSA3OwogCWhvc3QtPmJhc2UgPSBiYXNlOwogCWhvc3QtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKLQlpZihyZXF1ZXN0X2lycShob3N0LT5pcnEsIE5DUl83MDBfaW50ciwgU0FfU0hJUlEsICJzbmlybTcxMCIsIGhvc3QpKSB7CisJaWYocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBOQ1JfNzAwX2ludHIsIElSUUZfU0hBUkVELCAic25pcm03MTAiLCBob3N0KSkgewogCQlwcmludGsoS0VSTl9FUlIgInNuaXJtNzEwOiByZXF1ZXN0X2lycSBmYWlsZWQhXG4iKTsKIAkJZ290byBvdXRfcHV0X2hvc3Q7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0ZXguYyBiL2RyaXZlcnMvc2NzaS9zdGV4LmMKaW5kZXggNjliZTEzMi4uOWFjODNhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0ZXguYworKysgYi9kcml2ZXJzL3Njc2kvc3RleC5jCkBAIC0zMiwxMSArMzIsMTIgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAic3RleCIKLSNkZWZpbmUgU1RfRFJJVkVSX1ZFUlNJT04gIjMuMS4wLjEiCisjZGVmaW5lIFNUX0RSSVZFUl9WRVJTSU9OICIzLjYuMDAwMC4xIgogI2RlZmluZSBTVF9WRVJfTUFKT1IgCQkzCi0jZGVmaW5lIFNUX1ZFUl9NSU5PUiAJCTEKKyNkZWZpbmUgU1RfVkVSX01JTk9SIAkJNgogI2RlZmluZSBTVF9PRU0gCQkJMAogI2RlZmluZSBTVF9CVUlMRF9WRVIgCQkxCiAKQEAgLTExMywxMCArMTE0LDYgQEAKIAlTR19DRl82NEIJCQkJPSAweDQwLAkvKiA2NCBiaXQgaXRlbSAqLwogCVNHX0NGX0hPU1QJCQkJPSAweDIwLAkvKiBzZyBpbiBob3N0IG1lbW9yeSAqLwogCi0JU1RfTUFYX0FSUkFZX1NVUFBPUlRFRAkJCT0gMTYsCi0JU1RfTUFYX1RBUkdFVF9OVU0JCQk9IChTVF9NQVhfQVJSQVlfU1VQUE9SVEVEKzEpLAotCVNUX01BWF9MVU5fUEVSX1RBUkdFVAkJCT0gMTYsCi0KIAlzdF9zaGFzdGEJCQkJPSAwLAogCXN0X3ZzYwkJCQkJPSAxLAogCXN0X3ZzYzEJCQkJCT0gMiwKQEAgLTU4Niw3ICs1ODMsNyBAQAogCXUxNiB0YWc7CiAJaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCWlkID0gY21kLT5kZXZpY2UtPmlkOwotCWx1biA9IGNtZC0+ZGV2aWNlLT5jaGFubmVsOyAvKiBmaXJtd2FyZSBsdW4gaXNzdWUgd29yayBhcm91bmQgKi8KKwlsdW4gPSBjbWQtPmRldmljZS0+bHVuOwogCWhiYSA9IChzdHJ1Y3Qgc3RfaGJhICopICZob3N0LT5ob3N0ZGF0YVswXTsKIAogCXN3aXRjaCAoY21kLT5jbW5kWzBdKSB7CkBAIC02MDUsOCArNjAyLDI2IEBACiAJCQlzdGV4X2ludmFsaWRfZmllbGQoY21kLCBkb25lKTsKIAkJcmV0dXJuIDA7CiAJfQorCWNhc2UgUkVQT1JUX0xVTlM6CisJCS8qCisJCSAqIFRoZSBzaGFzdGEgZmlybXdhcmUgZG9lcyBub3QgcmVwb3J0IGFjdHVhbCBsdW5zIGluIHRoZQorCQkgKiB0YXJnZXQsIHNvIGZhaWwgdGhlIGNvbW1hbmQgdG8gZm9yY2Ugc2VxdWVudGlhbCBsdW4gc2Nhbi4KKwkJICogQWxzbywgdGhlIGNvbnNvbGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBjb21tYW5kLgorCQkgKi8KKwkJaWYgKGhiYS0+Y2FyZHR5cGUgPT0gc3Rfc2hhc3RhIHx8IGlkID09IGhvc3QtPm1heF9pZCAtIDEpIHsKKwkJCXN0ZXhfaW52YWxpZF9maWVsZChjbWQsIGRvbmUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBURVNUX1VOSVRfUkVBRFk6CisJCWlmIChpZCA9PSBob3N0LT5tYXhfaWQgLSAxKSB7CisJCQljbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNiB8IENPTU1BTkRfQ09NUExFVEUgPDwgODsKKwkJCWRvbmUoY21kKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOwogCWNhc2UgSU5RVUlSWToKLQkJaWYgKGlkICE9IFNUX01BWF9BUlJBWV9TVVBQT1JURUQpCisJCWlmIChpZCAhPSBob3N0LT5tYXhfaWQgLSAxKQogCQkJYnJlYWs7CiAJCWlmIChsdW4gPT0gMCAmJiAoY21kLT5jbW5kWzFdICYgSU5RVUlSWV9FVlBEKSA9PSAwKSB7CiAJCQlzdGV4X2RpcmVjdF9jb3B5KGNtZCwgY29uc29sZV9pbnFfcGFnZSwKQEAgLTYyNCw3ICs2MzksNyBAQAogCQkJdmVyLm9lbSA9IFNUX09FTTsKIAkJCXZlci5idWlsZCA9IFNUX0JVSUxEX1ZFUjsKIAkJCXZlci5zaWduYXR1cmVbMF0gPSBQQVNTVEhSVV9TSUdOQVRVUkU7Ci0JCQl2ZXIuY29uc29sZV9pZCA9IFNUX01BWF9BUlJBWV9TVVBQT1JURUQ7CisJCQl2ZXIuY29uc29sZV9pZCA9IGhvc3QtPm1heF9pZCAtIDE7CiAJCQl2ZXIuaG9zdF9ubyA9IGhiYS0+aG9zdC0+aG9zdF9ubzsKIAkJCWNtZC0+cmVzdWx0ID0gc3RleF9kaXJlY3RfY29weShjbWQsICZ2ZXIsIHNpemVvZih2ZXIpKSA/CiAJCQkJRElEX09LIDw8IDE2IHwgQ09NTUFORF9DT01QTEVURSA8PCA4IDoKQEAgLTY0NSwxMyArNjYwLDggQEAKIAogCXJlcSA9IHN0ZXhfYWxsb2NfcmVxKGhiYSk7CiAKLQlpZiAoaGJhLT5jYXJkdHlwZSA9PSBzdF95b3NlbWl0ZSkgewotCQlyZXEtPmx1biA9IGx1biAqIChTVF9NQVhfVEFSR0VUX05VTSAtIDEpICsgaWQ7Ci0JCXJlcS0+dGFyZ2V0ID0gMDsKLQl9IGVsc2UgewotCQlyZXEtPmx1biA9IGx1bjsKLQkJcmVxLT50YXJnZXQgPSBpZDsKLQl9CisJcmVxLT5sdW4gPSBsdW47CisJcmVxLT50YXJnZXQgPSBpZDsKIAogCS8qIGNkYiAqLwogCW1lbWNweShyZXEtPmNkYiwgY21kLT5jbW5kLCBTVEVYX0NEQl9MRU5HVEgpOwpAQCAtNzY3LDE4ICs3NzcsNiBAQAogCQkJY2NiLT5zcmJfc3RhdHVzID0gU1JCX1NUQVRVU19TRUxFQ1RJT05fVElNRU9VVDsKIAkJZWxzZQogCQkJY2NiLT5zcmJfc3RhdHVzID0gU1JCX1NUQVRVU19TVUNDRVNTOwotCX0gZWxzZSBpZiAoY2NiLT5jbWQtPmNtbmRbMF0gPT0gUkVQT1JUX0xVTlMpIHsKLQkJdTggKnJlcG9ydF9sdW5fZGF0YSA9ICh1OCAqKWhiYS0+Y29weV9idWZmZXI7Ci0KLQkJY291bnQgPSBTVEVYX0VYVFJBX1NJWkU7Ci0JCXN0ZXhfaW50ZXJuYWxfY29weShjY2ItPmNtZCwgcmVwb3J0X2x1bl9kYXRhLAotCQkJJmNvdW50LCBjY2ItPnNnX2NvdW50LCBTVF9GUk9NX0NNRCk7Ci0JCWlmIChyZXBvcnRfbHVuX2RhdGFbMl0gfHwgcmVwb3J0X2x1bl9kYXRhWzNdKSB7Ci0JCQlyZXBvcnRfbHVuX2RhdGFbMl0gPSAweDAwOwotCQkJcmVwb3J0X2x1bl9kYXRhWzNdID0gMHgwODsKLQkJCXN0ZXhfaW50ZXJuYWxfY29weShjY2ItPmNtZCwgcmVwb3J0X2x1bl9kYXRhLAotCQkJCSZjb3VudCwgY2NiLT5zZ19jb3VudCwgU1RfVE9fQ01EKTsKLQkJfQogCX0KIH0KIApAQCAtOTk1LDYgKzk5MywxMSBAQAogCXUzMiBkYXRhOwogCWludCByZXN1bHQgPSBTVUNDRVNTOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCSIoJXMpOiBhYm9ydGluZyBjb21tYW5kXG4iLCBwY2lfbmFtZShoYmEtPnBkZXYpKTsKKwlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKKwogCWJhc2UgPSBoYmEtPm1taW9fYmFzZTsKIAlzcGluX2xvY2tfaXJxc2F2ZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlpZiAodGFnIDwgaG9zdC0+Y2FuX3F1ZXVlICYmIGhiYS0+Y2NiW3RhZ10uY21kID09IGNtZCkKQEAgLTEwNTEsNyArMTA1NCwxMiBAQAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGJ1cy0+c2VsZiwgUENJX0JSSURHRV9DT05UUk9MLCAmcGNpX2JjdGwpOwogCXBjaV9iY3RsIHw9IFBDSV9CUklER0VfQ1RMX0JVU19SRVNFVDsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoYnVzLT5zZWxmLCBQQ0lfQlJJREdFX0NPTlRST0wsIHBjaV9iY3RsKTsKLQltc2xlZXAoMSk7CisKKwkvKgorCSAqIDEgbXMgbWF5IGJlIGVub3VnaCBmb3IgOC1wb3J0IGNvbnRyb2xsZXJzLiBCdXQgMTYtcG9ydCBjb250cm9sbGVycworCSAqIHJlcXVpcmUgbW9yZSB0aW1lIHRvIGZpbmlzaCBidXMgcmVzZXQuIFVzZSAxMDAgbXMgaGVyZSBmb3Igc2FmZXR5CisJICovCisJbXNsZWVwKDEwMCk7CiAJcGNpX2JjdGwgJj0gflBDSV9CUklER0VfQ1RMX0JVU19SRVNFVDsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoYnVzLT5zZWxmLCBQQ0lfQlJJREdFX0NPTlRST0wsIHBjaV9iY3RsKTsKIApAQCAtMTA3NSw2ICsxMDgzLDEwIEBACiAJdW5zaWduZWQgbG9uZyBiZWZvcmU7CiAJaGJhID0gKHN0cnVjdCBzdF9oYmEgKikgJmNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKIAorCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKKwkJIiglcyk6IHJlc2V0dGluZyBob3N0XG4iLCBwY2lfbmFtZShoYmEtPnBkZXYpKTsKKwlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKKwogCWhiYS0+bXVfc3RhdHVzID0gTVVfU1RBVEVfUkVTRVRUSU5HOwogCiAJaWYgKGhiYS0+Y2FyZHR5cGUgPT0gc3Rfc2hhc3RhKQpAQCAtMTE5NCw3ICsxMjA2LDcgQEAKIAkJZ290byBvdXRfc2NzaV9ob3N0X3B1dDsKIAl9CiAKLQloYmEtPm1taW9fYmFzZSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAorCWhiYS0+bW1pb19iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKIAkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CiAJaWYgKCAhaGJhLT5tbWlvX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIoJXMpOiBtZW1vcnkgbWFwIGZhaWxlZFxuIiwKQEAgLTEyMjksMTIgKzEyNDEsMTggQEAKIAloYmEtPmNvcHlfYnVmZmVyID0gaGJhLT5kbWFfbWVtICsgTVVfQlVGRkVSX1NJWkU7CiAJaGJhLT5tdV9zdGF0dXMgPSBNVV9TVEFURV9TVEFSVElORzsKIAotCS8qIGZpcm13YXJlIHVzZXMgaWQvbHVuIHBhaXIgZm9yIGEgbG9naWNhbCBkcml2ZSwgYnV0IGx1biB3b3VsZCBiZQotCSAgIGFsd2F5cyAwIGlmIENPTkZJR19TQ1NJX01VTFRJX0xVTiBub3QgY29uZmlndXJlZCwgc28gd2UgdXNlCi0JICAgY2hhbm5lbCB0byBtYXAgbHVuIGhlcmUgKi8KLQlob3N0LT5tYXhfY2hhbm5lbCA9IFNUX01BWF9MVU5fUEVSX1RBUkdFVCAtIDE7Ci0JaG9zdC0+bWF4X2lkID0gU1RfTUFYX1RBUkdFVF9OVU07Ci0JaG9zdC0+bWF4X2x1biA9IDE7CisJaWYgKGhiYS0+Y2FyZHR5cGUgPT0gc3Rfc2hhc3RhKSB7CisJCWhvc3QtPm1heF9sdW4gPSA4OworCQlob3N0LT5tYXhfaWQgPSAxNiArIDE7CisJfSBlbHNlIGlmIChoYmEtPmNhcmR0eXBlID09IHN0X3lvc2VtaXRlKSB7CisJCWhvc3QtPm1heF9sdW4gPSAxMjg7CisJCWhvc3QtPm1heF9pZCA9IDEgKyAxOworCX0gZWxzZSB7CisJCS8qIHN0X3ZzYyBhbmQgc3RfdnNjMSAqLworCQlob3N0LT5tYXhfbHVuID0gMTsKKwkJaG9zdC0+bWF4X2lkID0gMTI4ICsgMTsKKwl9CisJaG9zdC0+bWF4X2NoYW5uZWwgPSAwOwogCWhvc3QtPnVuaXF1ZV9pZCA9IGhvc3QtPmhvc3Rfbm87CiAJaG9zdC0+bWF4X2NtZF9sZW4gPSBTVEVYX0NEQl9MRU5HVEg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS90bXNjc2ltLmMgYi9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jCmluZGV4IDMxNTg5NDkuLmU3Yjg1ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS90bXNjc2ltLmMKKysrIGIvZHJpdmVycy9zY3NpL3Rtc2NzaW0uYwpAQCAtMzUxLDYgKzM1MSwyNyBAQAogICogKERDQnMsIFNSQnMsIFF1ZXVlaW5nKQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgaW5saW5lIGRjMzkwX3N0YXJ0X3NlZ21lbnQoc3RydWN0IGRjMzkwX3NyYiogcFNSQikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBzZ2wgPSBwU1JCLT5wU2VnbWVudExpc3Q7CisKKwkvKiBzdGFydCBuZXcgc2cgc2VnbWVudCAqLworCXBTUkItPlNHQnVzQWRkciA9IHNnX2RtYV9hZGRyZXNzKHBzZ2wpOworCXBTUkItPlNHVG9CZVhmZXJMZW4gPSBzZ19kbWFfbGVuKHBzZ2wpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmxpbmUgZGMzOTBfYWR2YW5jZV9zZWdtZW50KHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHUzMiByZXNpZHVlKQoreworCXVuc2lnbmVkIGxvbmcgeGZlciA9IHBTUkItPlNHVG9CZVhmZXJMZW4gLSByZXNpZHVlOworCisJLyogeGZlciBtb3JlIGJ5dGVzIHRyYW5zZmVycmVkICovCisJcFNSQi0+U0dCdXNBZGRyICs9IHhmZXI7CisJcFNSQi0+VG90YWxYZmVycmVkTGVuICs9IHhmZXI7CisJcFNSQi0+U0dUb0JlWGZlckxlbiA9IHJlc2lkdWU7CisKKwlyZXR1cm4geGZlcjsKK30KKwogc3RhdGljIHN0cnVjdCBkYzM5MF9kY2IgX19pbmxpbmVfXyAqZGMzOTBfZmluZERDQiAoIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHU4IGlkLCB1OCBsdW4pCiB7CiAgICBzdHJ1Y3QgZGMzOTBfZGNiKiBwRENCID0gcEFDQi0+cExpbmtEQ0I7IGlmICghcERDQikgcmV0dXJuIE5VTEw7CkBAIC02MjUsNzAgKzY0Niw2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLS8vI2RlZmluZSBETUFfSU5UIEVOX0RNQV9JTlQgLyp8IEVOX1BBR0VfSU5UKi8KLSNkZWZpbmUgRE1BX0lOVCAwCi0KLSNpZiBETUFfSU5UCi0vKiBUaGlzIGlzIHNpbWlsYXIgdG8gQU01M0M5NzQuYyAuLi4gKi8KLXN0YXRpYyB1OCAKLWRjMzkwX2RtYV9pbnRyIChzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCKQotewotICBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCOwotICB1OCBkc3RhdGU7Ci0gIERFQlVHMCh1MTYgcHN0YXRlOyBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHBBQ0ItPnBkZXYpOwotICAKLSAgREVCVUcwKHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9TVEFUVVMsICZwc3RhdGUpKTsKLSAgREVCVUcwKGlmIChwc3RhdGUgJiAoUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SIHwgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkpKVwKLQl7IHByaW50ayhLRVJOX1dBUk5JTkcgIkRDMzkwOiBQQ0kgc3RhdGUgPSAlMDR4IVxuIiwgcHN0YXRlKTsgXAotCSAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9TVEFUVVMsIChQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IgfCBQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSkpO30pOwotCi0gIGRzdGF0ZSA9IERDMzkwX3JlYWQ4IChETUFfU3RhdHVzKTsgCi0KLSAgaWYgKCEgcEFDQi0+cEFjdGl2ZURDQiB8fCAhIHBBQ0ItPnBBY3RpdmVEQ0ItPnBBY3RpdmVTUkIpIHJldHVybiBkc3RhdGU7Ci0gIGVsc2UgcFNSQiAgPSBwQUNCLT5wQWN0aXZlRENCLT5wQWN0aXZlU1JCOwotICAKLSAgaWYgKGRzdGF0ZSAmIChETUFfWEZFUl9BQk9SVCB8IERNQV9YRkVSX0VSUk9SIHwgUE9XRVJfRE9XTiB8IFBDSV9NU19BQk9SVCkpCi0gICAgewotCXByaW50ayAoS0VSTl9FUlIgIkRDMzkwOiBETUEgZXJyb3IgKCUwMngpIVxuIiwgZHN0YXRlKTsKLQlyZXR1cm4gZHN0YXRlOwotICAgIH0KLSAgaWYgKGRzdGF0ZSAmIERNQV9YRkVSX0RPTkUpCi0gICAgewotCXUzMiByZXNpZHVhbCwgeGZlckNudDsgaW50IGN0ciA9IDYwMDAwMDA7Ci0JaWYgKCEgKERDMzkwX3JlYWQ4IChETUFfQ21kKSAmIFJFQURfRElSRUNUSU9OKSkKLQkgIHsKLQkgICAgZG8KLQkgICAgICB7Ci0JCURFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIkRDMzkwOiByZWFkIHJlc2lkdWFsIGJ5dGVzIC4uLiBcbiIpKTsKLQkJZHN0YXRlID0gREMzOTBfcmVhZDggKERNQV9TdGF0dXMpOwotCQlyZXNpZHVhbCA9IERDMzkwX3JlYWQ4IChDdGNSZWdfTG93KSB8IERDMzkwX3JlYWQ4IChDdGNSZWdfTWlkKSA8PCA4IHwKLQkJICBEQzM5MF9yZWFkOCAoQ3RjUmVnX0hpZ2gpIDw8IDE2OwotCQlyZXNpZHVhbCArPSBEQzM5MF9yZWFkOCAoQ3VycmVudF9GaWZvKSAmIDB4MWY7Ci0JICAgICAgfSB3aGlsZSAocmVzaWR1YWwgJiYgISAoZHN0YXRlICYgU0NTSV9JTlRFUlJVUFQpICYmIC0tY3RyKTsKLQkgICAgaWYgKCFjdHIpIHByaW50ayAoS0VSTl9DUklUICJEQzM5MDogZG1hX2ludHI6IERNQSBhYm9ydGVkIHVuZmluaXNoZWQ6ICUwNnggYnl0ZXMgcmVtYWluISFcbiIsIERDMzkwX3JlYWQzMiAoRE1BX1drX0J5dGVDbnRyKSk7Ci0JICAgIC8qIHJlc2lkdWFsID0gIC4uLiAqLwotCSAgfQotCWVsc2UKLQkgICAgcmVzaWR1YWwgPSAwOwotCQotCS8qID8/PyAqLwotCQotCXhmZXJDbnQgPSBwU1JCLT5TR1RvQmVYZmVyTGVuIC0gcmVzaWR1YWw7Ci0JcFNSQi0+U0dCdXNBZGRyICs9IHhmZXJDbnQ7Ci0JcFNSQi0+VG90YWxYZmVycmVkTGVuICs9IHhmZXJDbnQ7Ci0JcFNSQi0+U0dUb0JlWGZlckxlbiA9IHJlc2lkdWFsOwotIyBpZmRlZiBEQzM5MF9ERUJVRzAKLQlwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IERNQTogcmVzaWR1YWwgPSAlaSwgeGZlciA9ICVpXG4iLCAKLQkJKHVuc2lnbmVkIGludClyZXNpZHVhbCwgKHVuc2lnbmVkIGludCl4ZmVyQ250KTsKLSMgZW5kaWYKLQkKLQlEQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCk7Ci0gICAgfQotICBkYzM5MF9sYXN0c3RhdHVzICY9IH4weGZmMDAwMDAwOyBkYzM5MF9sYXN0c3RhdHVzIHw9IGRzdGF0ZSA8PCAyNDsKLSAgcmV0dXJuIGRzdGF0ZTsKLX0KLSNlbmRpZgotCiAKIHN0YXRpYyB2b2lkIF9faW5saW5lX18KIGRjMzkwX0ludmFsaWRDbWQoc3RydWN0IGRjMzkwX2FjYiogcEFDQikKQEAgLTcwOCw5ICs2NjUsNiBAQAogICAgIHU4ICBwaGFzZTsKICAgICB2b2lkICAgKCpzdGF0ZVYpKCBzdHJ1Y3QgZGMzOTBfYWNiKiwgc3RydWN0IGRjMzkwX3NyYiosIHU4ICopOwogICAgIHU4ICBpc3RhdGUsIGlzdGF0dXM7Ci0jaWYgRE1BX0lOVAotICAgIHU4ICBkc3RhdHVzOwotI2VuZGlmCiAKICAgICBzc3RhdHVzID0gREMzOTBfcmVhZDggKFNjc2lfU3RhdHVzKTsKICAgICBpZiggIShzc3RhdHVzICYgSU5URVJSVVBUKSApCkBAIC03MTgsMjIgKzY3Miw5IEBACiAKICAgICBERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICJzc3RhdHVzPSUwMngsIiwgc3N0YXR1cykpOwogCi0jaWYgRE1BX0lOVAotICAgIHNwaW5fbG9ja19pcnEocEFDQi0+cFNjc2lIb3N0LT5ob3N0X2xvY2spOwotICAgIGRzdGF0dXMgPSBkYzM5MF9kbWFfaW50ciAocEFDQik7Ci0gICAgc3Bpbl91bmxvY2tfaXJxKHBBQ0ItPnBTY3NpSG9zdC0+aG9zdF9sb2NrKTsKLQotICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgImRzdGF0dXM9JTAyeCwiLCBkc3RhdHVzKSk7Ci0gICAgaWYgKCEgKGRzdGF0dXMgJiBTQ1NJX0lOVEVSUlVQVCkpCi0gICAgICB7Ci0JREVCVUcwKHByaW50ayAoS0VSTl9XQVJOSU5HICJEQzM5MCBJbnQgdy9vIFNDU0kgYWN0aW9ucyAob25seSBETUE/KVxuIikpOwotCXJldHVybiBJUlFfTk9ORTsKLSAgICAgIH0KLSNlbHNlCiAgICAgLy9EQzM5MF93cml0ZTMyIChETUFfU2NzaUJ1c0N0cmwsIFdSVF9FUkFTRV9ETUFfU1RBVCB8IEVOX0lOVF9PTl9QQ0lfQUJPUlQpOwogICAgIC8vZHN0YXR1cyA9IERDMzkwX3JlYWQ4IChETUFfU3RhdHVzKTsKICAgICAvL0RDMzkwX3dyaXRlMzIgKERNQV9TY3NpQnVzQ3RybCwgRU5fSU5UX09OX1BDSV9BQk9SVCk7Ci0jZW5kaWYKIAogICAgIHNwaW5fbG9ja19pcnEocEFDQi0+cFNjc2lIb3N0LT5ob3N0X2xvY2spOwogCkBAIC04MjEsMTEgKzc2MiwxMCBAQAogfQogCiBzdGF0aWMgdm9pZAotZGMzOTBfRGF0YU91dF8wKCBzdHJ1Y3QgZGMzOTBfYWNiKiBwQUNCLCBzdHJ1Y3QgZGMzOTBfc3JiKiBwU1JCLCB1OCAqcHNzdGF0dXMpCitkYzM5MF9EYXRhT3V0XzAoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQogewogICAgIHU4ICAgc3N0YXR1czsKLSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBzZ2w7Ci0gICAgdTMyICAgIFJlc2lkQ250LCB4ZmVyQ250OworICAgIHUzMiAgUmVzaWRDbnQ7CiAgICAgdTggICBkc3RhdGUgPSAwOwogCiAgICAgc3N0YXR1cyA9ICpwc3N0YXR1czsKQEAgLTg1Niw0MiArNzk2LDM1IEBACiAJICAgIGlmKCBwU1JCLT5TR0luZGV4IDwgcFNSQi0+U0djb3VudCApCiAJICAgIHsKIAkJcFNSQi0+cFNlZ21lbnRMaXN0Kys7Ci0JCXBzZ2wgPSBwU1JCLT5wU2VnbWVudExpc3Q7CiAKLQkJcFNSQi0+U0dCdXNBZGRyID0gY3B1X3RvX2xlMzIocGNpX2RtYV9sbzMyKHNnX2RtYV9hZGRyZXNzKHBzZ2wpKSk7Ci0JCXBTUkItPlNHVG9CZVhmZXJMZW4gPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHBzZ2wpKTsKKwkJZGMzOTBfc3RhcnRfc2VnbWVudChwU1JCKTsKIAkgICAgfQogCSAgICBlbHNlCiAJCXBTUkItPlNHVG9CZVhmZXJMZW4gPSAwOwogCX0KIAllbHNlCiAJewotCSAgICBSZXNpZENudCAgPSAodTMyKSBEQzM5MF9yZWFkOCAoQ3VycmVudF9GaWZvKSAmIDB4MWY7Ci0JICAgIFJlc2lkQ250IHw9ICh1MzIpIERDMzkwX3JlYWQ4IChDdGNSZWdfSGlnaCkgPDwgMTY7Ci0JICAgIFJlc2lkQ250IHw9ICh1MzIpIERDMzkwX3JlYWQ4IChDdGNSZWdfTWlkKSA8PCA4OyAKLQkgICAgUmVzaWRDbnQgKz0gKHUzMikgREMzOTBfcmVhZDggKEN0Y1JlZ19Mb3cpOworCSAgICBSZXNpZENudCA9ICgodTMyKSBEQzM5MF9yZWFkOCAoQ3VycmVudF9GaWZvKSAmIDB4MWYpICsKKwkJICAgICgoKHUzMikgREMzOTBfcmVhZDggKEN0Y1JlZ19IaWdoKSA8PCAxNikgfAorCQkgICAgICgodTMyKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX01pZCkgPDwgOCkgfAorCQkgICAgICh1MzIpIERDMzkwX3JlYWQ4IChDdGNSZWdfTG93KSk7CiAKLQkgICAgeGZlckNudCA9IHBTUkItPlNHVG9CZVhmZXJMZW4gLSBSZXNpZENudDsKLQkgICAgcFNSQi0+U0dCdXNBZGRyICs9IHhmZXJDbnQ7Ci0JICAgIHBTUkItPlRvdGFsWGZlcnJlZExlbiArPSB4ZmVyQ250OwotCSAgICBwU1JCLT5TR1RvQmVYZmVyTGVuID0gUmVzaWRDbnQ7CisJICAgIGRjMzkwX2FkdmFuY2Vfc2VnbWVudChwU1JCLCBSZXNpZENudCk7CiAJfQogICAgIH0KICAgICBpZiAoKCpwc3N0YXR1cyAmIDcpICE9IFNDU0lfREFUQV9PVVQpCiAgICAgewotCSAgICBEQzM5MF93cml0ZTggKERNQV9DbWQsIFdSSVRFX0RJUkVDVElPTitETUFfSURMRV9DTUQpOyAvKiB8IERNQV9JTlQgKi8KKwkgICAgREMzOTBfd3JpdGU4IChETUFfQ21kLCBXUklURV9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsKIAkgICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7CiAgICAgfQkgICAgCiB9CiAKIHN0YXRpYyB2b2lkCi1kYzM5MF9EYXRhSW5fMCggc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQorZGMzOTBfRGF0YUluXzAoc3RydWN0IGRjMzkwX2FjYiogcEFDQiwgc3RydWN0IGRjMzkwX3NyYiogcFNSQiwgdTggKnBzc3RhdHVzKQogewogICAgIHU4ICAgc3N0YXR1cywgcmVzaWR1YWwsIGJ2YWw7Ci0gICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpwc2dsOwotICAgIHUzMiAgICBSZXNpZENudCwgaTsKKyAgICB1MzIgIFJlc2lkQ250LCBpOwogICAgIHVuc2lnbmVkIGxvbmcgICB4ZmVyQ250OwotICAgIHU4ICAgICAgKnB0cjsKIAogICAgIHNzdGF0dXMgPSAqcHNzdGF0dXM7CiAKQEAgLTkyMiwxOSArODU1LDE3IEBACiAJICAgIERFQlVHMShSZXNpZENudCA9ICgodW5zaWduZWQgbG9uZykgREMzOTBfcmVhZDggKEN0Y1JlZ19IaWdoKSA8PCAxNikJXAogCQkrICgodW5zaWduZWQgbG9uZykgREMzOTBfcmVhZDggKEN0Y1JlZ19NaWQpIDw8IDgpCQlcCiAJCSsgKCh1bnNpZ25lZCBsb25nKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX0xvdykpKTsKLQkgICAgREVCVUcxKHByaW50ayAoS0VSTl9ERUJVRyAiQ291bnRfMl9aZXJvIChSZXNpZENudD0laSxUb0JlWGZlcj0lbGkpLCIsIFJlc2lkQ250LCBwU1JCLT5TR1RvQmVYZmVyTGVuKSk7CisJICAgIERFQlVHMShwcmludGsgKEtFUk5fREVCVUcgIkNvdW50XzJfWmVybyAoUmVzaWRDbnQ9JXUsVG9CZVhmZXI9JWx1KSwiLCBSZXNpZENudCwgcFNSQi0+U0dUb0JlWGZlckxlbikpOwogCi0JICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsgLyogfCBETUFfSU5UICovCisJICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsKIAogCSAgICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gKz0gcFNSQi0+U0dUb0JlWGZlckxlbjsKIAkgICAgcFNSQi0+U0dJbmRleCsrOwogCSAgICBpZiggcFNSQi0+U0dJbmRleCA8IHBTUkItPlNHY291bnQgKQogCSAgICB7CiAJCXBTUkItPnBTZWdtZW50TGlzdCsrOwotCQlwc2dsID0gcFNSQi0+cFNlZ21lbnRMaXN0OwogCi0JCXBTUkItPlNHQnVzQWRkciA9IGNwdV90b19sZTMyKHBjaV9kbWFfbG8zMihzZ19kbWFfYWRkcmVzcyhwc2dsKSkpOwotCQlwU1JCLT5TR1RvQmVYZmVyTGVuID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihwc2dsKSk7CisJCWRjMzkwX3N0YXJ0X3NlZ21lbnQocFNSQik7CiAJICAgIH0KIAkgICAgZWxzZQogCQlwU1JCLT5TR1RvQmVYZmVyTGVuID0gMDsKQEAgLTk3Myw0NyArOTA0LDQ1IEBACiAJICAgIH0KIAkgICAgLyogSXQgc2VlbXMgYSBETUEgQmxhc3QgYWJvcnQgaXNuJ3QgdGhhdCBiYWQgLi4uICovCiAJICAgIGlmICghaSkgcHJpbnRrIChLRVJOX0VSUiAiREMzOTA6IERNQSBCbGFzdCBhYm9ydGVkIHVuZmluaXNoZWQhXG4iKTsKLQkgICAgLy9EQzM5MF93cml0ZTggKERNQV9DbWQsIFJFQURfRElSRUNUSU9OK0RNQV9JRExFX0NNRCk7IC8qIHwgRE1BX0lOVCAqLwotCSAgICBkYzM5MF9sYXN0c3RhdHVzICY9IH4weGZmMDAwMDAwOyBkYzM5MF9sYXN0c3RhdHVzIHw9IGJ2YWwgPDwgMjQ7CisJICAgIC8vREMzOTBfd3JpdGU4IChETUFfQ21kLCBSRUFEX0RJUkVDVElPTitETUFfSURMRV9DTUQpOworCSAgICBkYzM5MF9sYXN0c3RhdHVzICY9IH4weGZmMDAwMDAwOworCSAgICBkYzM5MF9sYXN0c3RhdHVzIHw9IGJ2YWwgPDwgMjQ7CiAKIAkgICAgREVCVUcxKHByaW50ayAoS0VSTl9ERUJVRyAiQmxhc3Q6IFJlYWQgJWkgdGltZXMgRE1BX1N0YXR1cyAlMDJ4IiwgMHhhMDAwLWksIGJ2YWwpKTsKLQkgICAgUmVzaWRDbnQgPSAodTMyKSBEQzM5MF9yZWFkOCAoQ3RjUmVnX0hpZ2gpOwotCSAgICBSZXNpZENudCA8PD0gODsKLQkgICAgUmVzaWRDbnQgfD0gKHUzMikgREMzOTBfcmVhZDggKEN0Y1JlZ19NaWQpOwotCSAgICBSZXNpZENudCA8PD0gODsKLQkgICAgUmVzaWRDbnQgfD0gKHUzMikgREMzOTBfcmVhZDggKEN0Y1JlZ19Mb3cpOworCSAgICBSZXNpZENudCA9ICgoKHUzMikgREMzOTBfcmVhZDggKEN0Y1JlZ19IaWdoKSA8PCAxNikgfAorCQkJKCh1MzIpIERDMzkwX3JlYWQ4IChDdGNSZWdfTWlkKSA8PCA4KSkgfAorCQkgICAgKHUzMikgREMzOTBfcmVhZDggKEN0Y1JlZ19Mb3cpOwogCi0JICAgIHhmZXJDbnQgPSBwU1JCLT5TR1RvQmVYZmVyTGVuIC0gUmVzaWRDbnQ7Ci0JICAgIHBTUkItPlNHQnVzQWRkciArPSB4ZmVyQ250OwotCSAgICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gKz0geGZlckNudDsKLQkgICAgcFNSQi0+U0dUb0JlWGZlckxlbiA9IFJlc2lkQ250OworCSAgICB4ZmVyQ250ID0gZGMzOTBfYWR2YW5jZV9zZWdtZW50KHBTUkIsIFJlc2lkQ250KTsKIAotCSAgICBpZiggcmVzaWR1YWwgKQotCSAgICB7Ci0JCXN0YXRpYyBpbnQgZmVlZGJhY2tfcmVxdWVzdGVkOworCSAgICBpZiAocmVzaWR1YWwpIHsKKwkJc2l6ZV90IGNvdW50ID0gMTsKKwkJc2l6ZV90IG9mZnNldCA9IHBTUkItPlNHQnVzQWRkciAtIHNnX2RtYV9hZGRyZXNzKHBTUkItPnBTZWdtZW50TGlzdCk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXU4ICpwdHI7CisKIAkJYnZhbCA9IERDMzkwX3JlYWQ4IChTY3NpRmlmbyk7CSAgICAvKiBnZXQgb25lIHJlc2lkdWFsIGJ5dGUgKi8KIAotCQlpZiAoIWZlZWRiYWNrX3JlcXVlc3RlZCkgewotCQkJZmVlZGJhY2tfcmVxdWVzdGVkID0gMTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBQbGVhc2UsIGNvbnRhY3QgPGxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnPiAiCi0JCQkgICAgICAgInRvIGhlbHAgaW1wcm92ZSBzdXBwb3J0IGZvciB5b3VyIHN5c3RlbS5cbiIsIF9fRklMRV9fKTsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlwdHIgPSBzY3NpX2ttYXBfYXRvbWljX3NnKHBTUkItPnBTZWdtZW50TGlzdCwgcFNSQi0+U0djb3VudCwgJm9mZnNldCwgJmNvdW50KTsKKwkJaWYgKGxpa2VseShwdHIpKSB7CisJCQkqKHB0ciArIG9mZnNldCkgPSBidmFsOworCQkJc2NzaV9rdW5tYXBfYXRvbWljX3NnKHB0cik7CiAJCX0KKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlXQVJOX09OKCFwdHIpOwogCi0JCXB0ciA9ICh1OCAqKSBidXNfdG9fdmlydCggcFNSQi0+U0dCdXNBZGRyICk7Ci0JCSpwdHIgPSBidmFsOwotCQlwU1JCLT5TR0J1c0FkZHIrKzsgeGZlckNudCsrOwotCQlwU1JCLT5Ub3RhbFhmZXJyZWRMZW4rKzsKLQkJcFNSQi0+U0dUb0JlWGZlckxlbi0tOworCQkvKiAxIG1vcmUgYnl0ZSByZWFkICovCisJCXhmZXJDbnQgKz0gZGMzOTBfYWR2YW5jZV9zZWdtZW50KHBTUkIsIHBTUkItPlNHVG9CZVhmZXJMZW4gLSAxKTsKIAkgICAgfQotCSAgICBERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICJYZmVyZWQ6ICVsaSwgVG90YWw6ICVsaSwgUmVtYWluaW5nOiAlbGlcbiIsIHhmZXJDbnQsXAorCSAgICBERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICJYZmVyZWQ6ICVsdSwgVG90YWw6ICVsdSwgUmVtYWluaW5nOiAlbHVcbiIsIHhmZXJDbnQsXAogCQkJICAgcFNSQi0+VG90YWxYZmVycmVkTGVuLCBwU1JCLT5TR1RvQmVYZmVyTGVuKSk7Ci0KIAl9CiAgICAgfQogICAgIGlmICgoKnBzc3RhdHVzICYgNykgIT0gU0NTSV9EQVRBX0lOKQogICAgIHsKIAkgICAgREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7Ci0JICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsgLyogfCBETUFfSU5UICovCisJICAgIERDMzkwX3dyaXRlOCAoRE1BX0NtZCwgUkVBRF9ESVJFQ1RJT04rRE1BX0lETEVfQ01EKTsKICAgICB9CiB9CiAKQEAgLTEyMTYsNyArMTE0NSw3IEBACiAKIAogLyogaGFuZGxlIFJFU1RPUkVfUFRSICovCi0vKiBJIHByZXN1bWUsIHRoaXMgY29tbWFuZCBpcyBhbHJlYWR5IG1hcHBlZCwgc28sIGhhdmUgdG8gcmVtYXAuICovCisvKiBUaGlzIGRvZXNuJ3QgbG9vayB2ZXJ5IGhlYWx0aHkuLi4gdG8tYmUtZml4ZWQgKi8KIHN0YXRpYyB2b2lkIAogZGMzOTBfcmVzdG9yZV9wdHIgKHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIpCiB7CkBAIC0xMjI1LDYgKzExNTQsNyBAQAogICAgIHBTUkItPlRvdGFsWGZlcnJlZExlbiA9IDA7CiAgICAgcFNSQi0+U0dJbmRleCA9IDA7CiAgICAgaWYgKHBjbWQtPnVzZV9zZykgeworCXNpemVfdCBzYXZlZDsKIAlwU1JCLT5wU2VnbWVudExpc3QgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopcGNtZC0+cmVxdWVzdF9idWZmZXI7CiAJcHNnbCA9IHBTUkItPnBTZWdtZW50TGlzdDsKIAkvL2RjMzkwX3BjaV9zeW5jKHBTUkIpOwpAQCAtMTIzNiwxNSArMTE2NiwxNiBAQAogCSAgICBpZiggcFNSQi0+U0dJbmRleCA8IHBTUkItPlNHY291bnQgKQogCSAgICB7CiAJCXBTUkItPnBTZWdtZW50TGlzdCsrOwotCQlwc2dsID0gcFNSQi0+cFNlZ21lbnRMaXN0OwotCQlwU1JCLT5TR0J1c0FkZHIgPSBjcHVfdG9fbGUzMihwY2lfZG1hX2xvMzIoc2dfZG1hX2FkZHJlc3MocHNnbCkpKTsKLQkJcFNSQi0+U0dUb0JlWGZlckxlbiA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4ocHNnbCkpOworCisJCWRjMzkwX3N0YXJ0X3NlZ21lbnQocFNSQik7CiAJICAgIH0KIAkgICAgZWxzZQogCQlwU1JCLT5TR1RvQmVYZmVyTGVuID0gMDsKIAl9Ci0JcFNSQi0+U0dUb0JlWGZlckxlbiAtPSAocFNSQi0+U2F2ZWRfUHRyIC0gcFNSQi0+VG90YWxYZmVycmVkTGVuKTsKLQlwU1JCLT5TR0J1c0FkZHIgKz0gKHBTUkItPlNhdmVkX1B0ciAtIHBTUkItPlRvdGFsWGZlcnJlZExlbik7CisKKwlzYXZlZCA9IHBTUkItPlNhdmVkX1B0ciAtIHBTUkItPlRvdGFsWGZlcnJlZExlbjsKKwlwU1JCLT5TR1RvQmVYZmVyTGVuIC09IHNhdmVkOworCXBTUkItPlNHQnVzQWRkciArPSBzYXZlZDsKIAlwcmludGsgKEtFUk5fSU5GTyAiREMzOTA6IFBvaW50ZXIgcmVzdG9yZWQuIFNlZ21lbnQgJWksIFRvdGFsICVsaSwgQnVzICUwOGx4XG4iLAogCQlwU1JCLT5TR0luZGV4LCBwU1JCLT5TYXZlZF9QdHIsIHBTUkItPlNHQnVzQWRkcik7CiAKQEAgLTEzNjUsNyArMTI5Niw2IEBACiBzdGF0aWMgdm9pZAogZGMzOTBfRGF0YUlPX0NvbW0oIHN0cnVjdCBkYzM5MF9hY2IqIHBBQ0IsIHN0cnVjdCBkYzM5MF9zcmIqIHBTUkIsIHU4IGlvRGlyKQogewotICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqcHNnbDsKICAgICB1bnNpZ25lZCBsb25nICBsdmFsOwogICAgIHN0cnVjdCBkYzM5MF9kY2IqICAgcERDQiA9IHBBQ0ItPnBBY3RpdmVEQ0I7CiAKQEAgLTEzOTEsMTIgKzEzMjEsMTEgQEAKIAogICAgIGlmKCBwU1JCLT5TR0luZGV4IDwgcFNSQi0+U0djb3VudCApCiAgICAgewotCURDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EIHwgaW9EaXIgLyogfCBETUFfSU5UICovKTsKKwlEQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCB8IGlvRGlyKTsKIAlpZiggIXBTUkItPlNHVG9CZVhmZXJMZW4gKQogCXsKLQkgICAgcHNnbCA9IHBTUkItPnBTZWdtZW50TGlzdDsKLQkgICAgcFNSQi0+U0dCdXNBZGRyID0gY3B1X3RvX2xlMzIocGNpX2RtYV9sbzMyKHNnX2RtYV9hZGRyZXNzKHBzZ2wpKSk7Ci0JICAgIHBTUkItPlNHVG9CZVhmZXJMZW4gPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHBzZ2wpKTsKKwkgICAgZGMzOTBfc3RhcnRfc2VnbWVudChwU1JCKTsKKwogCSAgICBERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICIgREMzOTA6IE5leHQgU0cgc2VnbWVudC4iKSk7CiAJfQogCWx2YWwgPSBwU1JCLT5TR1RvQmVYZmVyTGVuOwpAQCAtMTQxMCwxMiArMTMzOSwxMiBAQAogCURDMzkwX3dyaXRlMzIgKERNQV9YZmVyQ250LCBwU1JCLT5TR1RvQmVYZmVyTGVuKTsKIAlEQzM5MF93cml0ZTMyIChETUFfWGZlckFkZHIsIHBTUkItPlNHQnVzQWRkcik7CiAKLQkvL0RDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EIHwgaW9EaXIpOyAvKiB8IERNQV9JTlQ7ICovCisJLy9EQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCB8IGlvRGlyKTsKIAlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9EQVRBX1hGRVI7CiAKIAlEQzM5MF93cml0ZTggKFNjc2lDbWQsIERNQV9DT01NQU5EK0lORk9fWEZFUl9DTUQpOwogCi0JREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfU1RBUlRfQ01EIHwgaW9EaXIgfCBETUFfSU5UKTsKKwlEQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9TVEFSVF9DTUQgfCBpb0Rpcik7CiAJLy9ERUJVRzEoREMzOTBfd3JpdGUzMiAoRE1BX1Njc2lCdXNDdHJsLCBXUlRfRVJBU0VfRE1BX1NUQVQgfCBFTl9JTlRfT05fUENJX0FCT1JUKSk7CiAJLy9ERUJVRzEocHJpbnRrIChLRVJOX0RFQlVHICJEQzM5MDogRE1BX1N0YXR1czogJTAyeFxuIiwgREMzOTBfcmVhZDggKERNQV9TdGF0dXMpKSk7CiAJLy9ERUJVRzEoREMzOTBfd3JpdGUzMiAoRE1BX1Njc2lCdXNDdHJsLCBFTl9JTlRfT05fUENJX0FCT1JUKSk7CkBAIC0xNDM2LDggKzEzNjUsOCBAQAogCXBTUkItPlNSQlN0YXRlIHw9IFNSQl9YRkVSUEFEOwogCURDMzkwX3dyaXRlOCAoU2NzaUNtZCwgRE1BX0NPTU1BTkQrWEZFUl9QQURfQllURSk7CiAvKgotCURDMzkwX3dyaXRlOCAoRE1BX0NtZCwgRE1BX0lETEVfQ01EIHwgaW9EaXIpOyAvLyB8IERNQV9JTlQ7Ci0JREMzOTBfd3JpdGU4IChETUFfQ21kLCBETUFfU1RBUlRfQ01EIHwgaW9EaXIgfCBETUFfSU5UKTsKKwlEQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9JRExFX0NNRCB8IGlvRGlyKTsKKwlEQzM5MF93cml0ZTggKERNQV9DbWQsIERNQV9TVEFSVF9DTUQgfCBpb0Rpcik7CiAqLwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS90bXNjc2ltLmggYi9kcml2ZXJzL3Njc2kvdG1zY3NpbS5oCmluZGV4IDliNjZmYTguLmMzZDhjODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS90bXNjc2ltLmgKKysrIGIvZHJpdmVycy9zY3NpL3Rtc2NzaW0uaApAQCAtMTksMTQgKzE5LDYgQEAKIAogI2RlZmluZSBTRUxfVElNRU9VVAkJMTUzCS8qIDI1MCBtcyBzZWxlY3Rpb24gdGltZW91dCAoQCA0MCBNSHopICovCiAKLSNkZWZpbmUgcGNpX2RtYV9sbzMyKGEpCQkJKGEgJiAweGZmZmZmZmZmKQotCi10eXBlZGVmIHU4CQlVQ0hBUjsJLyogIDggYml0cyAqLwotdHlwZWRlZiB1MTYJCVVTSE9SVDsJLyogMTYgYml0cyAqLwotdHlwZWRlZiB1MzIJCVVJTlQ7CS8qIDMyIGJpdHMgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZwlVTE9ORzsJLyogMzIvNjQgYml0cyAqLwotCi0KIC8qCiA7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDsgU0NTSSBSZXF1ZXN0IEJsb2NrCkBAIC00Myw3ICszNSw5IEBACiAKIHN0cnVjdCBzY2F0dGVybGlzdCBTZWdtZW50eDsJLyogbWFrZSBhIG9uZSBlbnRyeSBvZiBTL0cgbGlzdCB0YWJsZSAqLwogCi11bnNpZ25lZCBsb25nCVNHQnVzQWRkcjsJLyo7YSBzZWdtZW50IHN0YXJ0aW5nIGFkZHJlc3MgYXMgc2VlbiBieSBBTTUzQzk3NEEqLwordW5zaWduZWQgbG9uZwlTR0J1c0FkZHI7CS8qO2Egc2VnbWVudCBzdGFydGluZyBhZGRyZXNzIGFzIHNlZW4gYnkgQU01M0M5NzRBCisJCQkJICBpbiBDUFUgZW5kaWFubmVzcy4gV2UncmUgb25seSBnZXR0aW5nIDMyLWJpdCBidXMKKwkJCQkgIGFkZHJlc3NlcyBieSBkZWZhdWx0ICovCiB1bnNpZ25lZCBsb25nCVNHVG9CZVhmZXJMZW47CS8qOyB0byBiZSB4ZmVyIGxlbmd0aCAqLwogdW5zaWduZWQgbG9uZwlUb3RhbFhmZXJyZWRMZW47CiB1bnNpZ25lZCBsb25nCVNhdmVkVG90WExlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCBjOTgzMmQ5Li5jODRkYWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCkBAIC04OTQsNyArODk0LDcgQEAKIAkJCXF1b3QgPSBzZXJpYWxfZGxfcmVhZCh1cCk7CiAJCQlxdW90IDw8PSAzOwogCi0JCQlzdGF0dXMxID0gc2VyaWFsX2luKHVwLCAweDA0KTsgLyogRVhDUjEgKi8KKwkJCXN0YXR1czEgPSBzZXJpYWxfaW4odXAsIDB4MDQpOyAvKiBFWENSMiAqLwogCQkJc3RhdHVzMSAmPSB+MHhCMDsgLyogRGlzYWJsZSBMT0NLLCBtYXNrIG91dCBQUkVTTFswMV0gKi8KIAkJCXN0YXR1czEgfD0gMHgxMDsgIC8qIDEuNjI1IGRpdmlzb3IgZm9yIGJhdWRfYmFzZSAtLT4gOTIxNjAwICovCiAJCQlzZXJpYWxfb3V0cCh1cCwgMHgwNCwgc3RhdHVzMSk7CkBAIC05OTQsNyArOTk0LDYgQEAKIAkgKiBiZSBmcm9iYmluZyB0aGUgY2hpcHMgSVJRIGVuYWJsZSByZWdpc3RlciB0byBzZWUgaWYgaXQgZXhpc3RzLgogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7Ci0vLwlzYXZlX2ZsYWdzKGZsYWdzKTsgY2xpKCk7CiAKIAl1cC0+Y2FwYWJpbGl0aWVzID0gMDsKIAl1cC0+YnVncyA9IDA7CkBAIC0xMTUxLDcgKzExNTAsNiBAQAogCiAgb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKLS8vCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogCURFQlVHX0FVVE9DT05GKCJ0eXBlPSVzXG4iLCB1YXJ0X2NvbmZpZ1t1cC0+cG9ydC50eXBlXS5uYW1lKTsKIH0KIApAQCAtMjYxOSw3ICsyNjE3LDIyIEBACiAgKi8KIHZvaWQgc2VyaWFsODI1MF9yZXN1bWVfcG9ydChpbnQgbGluZSkKIHsKLQl1YXJ0X3Jlc3VtZV9wb3J0KCZzZXJpYWw4MjUwX3JlZywgJnNlcmlhbDgyNTBfcG9ydHNbbGluZV0ucG9ydCk7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9ICZzZXJpYWw4MjUwX3BvcnRzW2xpbmVdOworCisJaWYgKHVwLT5jYXBhYmlsaXRpZXMgJiBVQVJUX05BVFNFTUkpIHsKKwkJdW5zaWduZWQgY2hhciB0bXA7CisKKwkJLyogRW5zdXJlIGl0J3Mgc3RpbGwgaW4gaGlnaCBzcGVlZCBtb2RlICovCisJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgMHhFMCk7CisKKwkJdG1wID0gc2VyaWFsX2luKHVwLCAweDA0KTsgLyogRVhDUjIgKi8KKwkJdG1wICY9IH4weEIwOyAvKiBEaXNhYmxlIExPQ0ssIG1hc2sgb3V0IFBSRVNMWzAxXSAqLworCQl0bXAgfD0gMHgxMDsgIC8qIDEuNjI1IGRpdmlzb3IgZm9yIGJhdWRfYmFzZSAtLT4gOTIxNjAwICovCisJCXNlcmlhbF9vdXRwKHVwLCAweDA0LCB0bXApOworCisJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgMCk7CisJfQorCXVhcnRfcmVzdW1lX3BvcnQoJnNlcmlhbDgyNTBfcmVnLCAmdXAtPnBvcnQpOwogfQogCiAvKgpAQCAtMjY5Niw3ICsyNzA5LDcgQEAKIAkJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9ICZzZXJpYWw4MjUwX3BvcnRzW2ldOwogCiAJCWlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiB1cC0+cG9ydC5kZXYgPT0gJmRldi0+ZGV2KQotCQkJdWFydF9yZXN1bWVfcG9ydCgmc2VyaWFsODI1MF9yZWcsICZ1cC0+cG9ydCk7CisJCQlzZXJpYWw4MjUwX3Jlc3VtZV9wb3J0KGkpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9hY29ybi5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9hY29ybi5jCmluZGV4IDU2MmJhNzQuLmIwY2U4YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfYWNvcm4uYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2Fjb3JuLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAlpbmZvLT5udW1fcG9ydHMgPSB0eXBlLT5udW1fcG9ydHM7CiAKIAlidXNfYWRkciA9IGVjYXJkX3Jlc291cmNlX3N0YXJ0KGVjLCB0eXBlLT50eXBlKTsKLQlpbmZvLT52YWRkciA9IGlvcmVtYXAoYnVzX2FkZHIsIGVjYXJkX3Jlc291cmNlX2xlbihlYywgdHlwZS0+dHlwZSkpOworCWluZm8tPnZhZGRyID0gZWNhcmRtX2lvbWFwKGVjLCB0eXBlLT50eXBlLCAwLCAwKTsKIAlpZiAoIWluZm8tPnZhZGRyKSB7CiAJCWtmcmVlKGluZm8pOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTkxLDcgKzkxLDYgQEAKIAkJaWYgKGluZm8tPnBvcnRzW2ldID4gMCkKIAkJCXNlcmlhbDgyNTBfdW5yZWdpc3Rlcl9wb3J0KGluZm8tPnBvcnRzW2ldKTsKIAotCWlvdW5tYXAoaW5mby0+dmFkZHIpOwogCWtmcmVlKGluZm8pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCA5MjRlOWJkLi4zMTVlYTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTUsNiArNSw3IEBACiAjCiAKIG1lbnUgIlNlcmlhbCBkcml2ZXJzIgorCWRlcGVuZHMgb24gSEFTX0lPTUVNCiAKICMKICMgVGhlIG5ldyA4MjUwLzE2NTUwIHNlcmlhbCBkcml2ZXJzCkBAIC03MywxNyArNzQsMjEgQEAKIAlkZXBlbmRzIG9uIFNFUklBTF84MjUwICYmIFBDSQogCWRlZmF1bHQgU0VSSUFMXzgyNTAKIAloZWxwCi0JICBUaGlzIGJ1aWxkcyBzdGFuZGFyZCBQQ0kgc2VyaWFsIHN1cHBvcnQuIFlvdSBtYXkgYmUgYWJsZSB0bwotCSAgZGlzYWJsZSB0aGlzIGZlYXR1cmUgaWYgeW91IG9ubHkgbmVlZCBsZWdhY3kgc2VyaWFsIHN1cHBvcnQuCi0JICBTYXZlcyBhYm91dCA5Sy4KKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgUENJIHNlcmlhbCBwb3J0cy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgODI1MF9wY2kuCiAKIGNvbmZpZyBTRVJJQUxfODI1MF9QTlAKIAl0cmlzdGF0ZSAiODI1MC8xNjU1MCBQTlAgZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBTRVJJQUxfODI1MCAmJiBQTlAKIAlkZWZhdWx0IFNFUklBTF84MjUwCiAJaGVscAotCSAgVGhpcyBidWlsZHMgc3RhbmRhcmQgUE5QIHNlcmlhbCBzdXBwb3J0LiBZb3UgbWF5IGJlIGFibGUgdG8KLQkgIGRpc2FibGUgdGhpcyBmZWF0dXJlIGlmIHlvdSBvbmx5IG5lZWQgbGVnYWN5IHNlcmlhbCBzdXBwb3J0LgorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBzZXJpYWwgcG9ydHMgZGVzY3JpYmVkIGJ5IFBOUEJJT1Mgb3IgQUNQSS4KKwkgIFRoZXNlIGFyZSB0eXBpY2FsbHkgcG9ydHMgYnVpbHQgaW50byB0aGUgc3lzdGVtIGJvYXJkLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCA4MjUwX3BucC4KIAogY29uZmlnIFNFUklBTF84MjUwX0hQMzAwCiAJdHJpc3RhdGUKQEAgLTM1NCw2ICszNTksMjMgQEAKIAogCSAgU2F5IFkgaWYgeW91IGhhdmUgYW4gZXh0ZXJuYWwgODI1MC8xNkM1NTAgVUFSVC4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBTRVJJQUxfS1M4Njk1CisJYm9vbCAiTWljcmVsIEtTODY5NSAoQ2VudGF1cikgc2VyaWFsIHBvcnQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfS1M4Njk1CisJc2VsZWN0IFNFUklBTF9DT1JFCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIHRoZSBNaWNyZWwgQ2VudGF1ciBLUzg2OTUgVUFSVC4gIFNheSBZIGhlcmUuCisKK2NvbmZpZyBTRVJJQUxfS1M4Njk1X0NPTlNPTEUKKwlib29sICJTdXBwb3J0IGZvciBjb25zb2xlIG9uIEtTODY5NSAoQ2VudGF1cikgc2VyaWFsIHBvcnQiCisJZGVwZW5kcyBvbiBTRVJJQUxfS1M4Njk1PXkKKwlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdpc2ggdG8gdXNlIGEgS1M4Njk1IChDZW50YXVyKSBVQVJUIGFzIHRoZQorCSAgc3lzdGVtIGNvbnNvbGUgKHRoZSBzeXN0ZW0gY29uc29sZSBpcyB0aGUgZGV2aWNlIHdoaWNoCisJICByZWNlaXZlcyBhbGwga2VybmVsIG1lc3NhZ2VzIGFuZCB3YXJuaW5ncyBhbmQgd2hpY2ggYWxsb3dzCisJICBsb2dpbnMgaW4gc2luZ2xlIHVzZXIgbW9kZSkuCisKIGNvbmZpZyBTRVJJQUxfQ0xQUzcxMVgKIAl0cmlzdGF0ZSAiQ0xQUzcxMVggc2VyaWFsIHBvcnQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSTSAmJiBBUkNIX0NMUFM3MTFYCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCmluZGV4IDQ5NTliY2IuLjA4YWQwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCkBAIC02MSwzICs2MSw0IEBACiBvYmotJChDT05GSUdfU0VSSUFMX1VBUlRMSVRFKSArPSB1YXJ0bGl0ZS5vCiBvYmotJChDT05GSUdfU0VSSUFMX05FVFgpICs9IG5ldHgtc2VyaWFsLm8KIG9iai0kKENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0pICs9IG9mX3NlcmlhbC5vCitvYmotJChDT05GSUdfU0VSSUFMX0tTODY5NSkgKz0gc2VyaWFsX2tzODY5NS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKaW5kZXggMWE5YTI0Yi4uMDBkMTI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwpAQCAtMTY3LDggKzE2Nyw5IEBACiAJaWdub3JlX2NoYXI6CiAJCXN0YXR1cyA9IHJlYWRiKHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxeF9GUik7CiAJfQorCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKIAl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCXJldHVybjsKKwlzcGluX2xvY2soJnBvcnQtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBwbDAxMF90eF9jaGFycyhzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwppbmRleCA0NDYzOWU3Li45NTQwNzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCkBAIC0xNTMsOCArMTUzLDkgQEAKIAlpZ25vcmVfY2hhcjoKIAkJc3RhdHVzID0gcmVhZHcodWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDF4X0ZSKTsKIAl9CisJc3Bpbl91bmxvY2soJnVhcC0+cG9ydC5sb2NrKTsKIAl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCXJldHVybjsKKwlzcGluX2xvY2soJnVhcC0+cG9ydC5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgcGwwMTFfdHhfY2hhcnMoc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9iZmluXzV4eC5jIGIvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYwppbmRleCA0MDgzOTBmLi43ODdkYzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9iZmluXzV4eC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKQEAgLTYsOCArNiw2IEBACiAgKiBDcmVhdGVkOgogICogRGVzY3JpcHRpb246ICBEcml2ZXIgZm9yIGJsYWNrZmluIDV4eCBzZXJpYWwgcG9ydHMKICAqCi0gKiBSZXY6ICAgICAgICAgICRJZDogYmZpbl81eHguYyx2IDEuMTkgMjAwNi8wOS8yNCAwMjozMzo1MyBhdWJyZXkgRXhwICQKLSAqCiAgKiBNb2RpZmllZDoKICAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDYgQW5hbG9nIERldmljZXMgSW5jLgogICoKQEAgLTE1Miw3ICsxNTAsNyBAQAogCiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9yeF9jaGFycyhzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdWFydC0+cG9ydC5pbmZvP3VhcnQtPnBvcnQuaW5mby0+dHR5OjA7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVhcnQtPnBvcnQuaW5mby0+dHR5OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGNoLCBmbGc7CiAjaWZkZWYgQkY1MzNfRkFNSUxZCiAJc3RhdGljIGludCBpbl9icmVhayA9IDA7CkBAIC0xNzMsOCArMTcxLDEwIEBACiAJCWlmIChjaCAhPSAwKSB7CiAJCQlpbl9icmVhayA9IDA7CiAJCQljaCA9IFVBUlRfR0VUX0NIQVIodWFydCk7Ci0JCX0KLQkJcmV0dXJuOworCQkJaWYgKGJmaW5fcmV2aWQoKSA8IDUpCisJCQkJcmV0dXJuOworCQl9IGVsc2UKKwkJCXJldHVybjsKIAl9CiAjZW5kaWYKIApAQCAtMTg1LDI3ICsxODUsMzIgQEAKIAkJdWFydC0+cG9ydC5pY291bnQuYnJrKys7CiAJCWlmICh1YXJ0X2hhbmRsZV9icmVhaygmdWFydC0+cG9ydCkpCiAJCQlnb3RvIGlnbm9yZV9jaGFyOwotCQlmbGcgPSBUVFlfQlJFQUs7Ci0JfSBlbHNlIGlmIChzdGF0dXMgJiBQRSkgewotCQlmbGcgPSBUVFlfUEFSSVRZOworCX0KKwlpZiAoc3RhdHVzICYgUEUpCiAJCXVhcnQtPnBvcnQuaWNvdW50LnBhcml0eSsrOwotCX0gZWxzZSBpZiAoc3RhdHVzICYgT0UpIHsKLQkJZmxnID0gVFRZX09WRVJSVU47CisJaWYgKHN0YXR1cyAmIE9FKQogCQl1YXJ0LT5wb3J0Lmljb3VudC5vdmVycnVuKys7Ci0JfSBlbHNlIGlmIChzdGF0dXMgJiBGRSkgewotCQlmbGcgPSBUVFlfRlJBTUU7CisJaWYgKHN0YXR1cyAmIEZFKQogCQl1YXJ0LT5wb3J0Lmljb3VudC5mcmFtZSsrOwotCX0gZWxzZQorCisJc3RhdHVzICY9IHVhcnQtPnBvcnQucmVhZF9zdGF0dXNfbWFzazsKKworCWlmIChzdGF0dXMgJiBCSSkKKwkJZmxnID0gVFRZX0JSRUFLOworCWVsc2UgaWYgKHN0YXR1cyAmIFBFKQorCQlmbGcgPSBUVFlfUEFSSVRZOworCWVsc2UgaWYgKHN0YXR1cyAmIEZFKQorCQlmbGcgPSBUVFlfRlJBTUU7CisJZWxzZQogCQlmbGcgPSBUVFlfTk9STUFMOwogCiAJaWYgKHVhcnRfaGFuZGxlX3N5c3JxX2NoYXIoJnVhcnQtPnBvcnQsIGNoKSkKIAkJZ290byBpZ25vcmVfY2hhcjsKLQlpZiAodHR5KQotCQl1YXJ0X2luc2VydF9jaGFyKCZ1YXJ0LT5wb3J0LCBzdGF0dXMsIDIsIGNoLCBmbGcpOwogCi1pZ25vcmVfY2hhcjoKLQlpZiAodHR5KQotCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCXVhcnRfaW5zZXJ0X2NoYXIoJnVhcnQtPnBvcnQsIHN0YXR1cywgT0UsIGNoLCBmbGcpOworCisgaWdub3JlX2NoYXI6CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIH0KIAogc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfdHhfY2hhcnMoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCkBAIC0yNDAsMjQgKzI0NSwyOSBAQAogCQliZmluX3NlcmlhbF9zdG9wX3R4KCZ1YXJ0LT5wb3J0KTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGJmaW5fc2VyaWFsX2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgYmZpbl9zZXJpYWxfcnhfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IGRldl9pZDsKLQl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAKIAlzcGluX2xvY2soJnVhcnQtPnBvcnQubG9jayk7Ci0Jc3RhdHVzID0gVUFSVF9HRVRfSUlSKHVhcnQpOwotCWRvIHsKLQkJaWYgKChzdGF0dXMgJiBJSVJfU1RBVFVTKSA9PSBJSVJfVFhfUkVBRFkpCi0JCQliZmluX3NlcmlhbF90eF9jaGFycyh1YXJ0KTsKLQkJaWYgKChzdGF0dXMgJiBJSVJfU1RBVFVTKSA9PSBJSVJfUlhfUkVBRFkpCi0JCQliZmluX3NlcmlhbF9yeF9jaGFycyh1YXJ0KTsKLQkJc3RhdHVzID0gVUFSVF9HRVRfSUlSKHVhcnQpOwotCX0gd2hpbGUgKHN0YXR1cyAmIChJSVJfVFhfUkVBRFkgfCBJSVJfUlhfUkVBRFkpKTsKKwl3aGlsZSAoKFVBUlRfR0VUX0lJUih1YXJ0KSAmIElJUl9TVEFUVVMpID09IElJUl9SWF9SRUFEWSkKKwkJYmZpbl9zZXJpYWxfcnhfY2hhcnModWFydCk7CiAJc3Bpbl91bmxvY2soJnVhcnQtPnBvcnQubG9jayk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QgYmZpbl9zZXJpYWxfdHhfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IGRldl9pZDsKKworCXNwaW5fbG9jaygmdWFydC0+cG9ydC5sb2NrKTsKKwl3aGlsZSAoKFVBUlRfR0VUX0lJUih1YXJ0KSAmIElJUl9TVEFUVVMpID09IElJUl9UWF9SRUFEWSkKKwkJYmZpbl9zZXJpYWxfdHhfY2hhcnModWFydCk7CisJc3Bpbl91bmxvY2soJnVhcnQtPnBvcnQubG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKIHN0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX2RvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0LCBjdHNfd29ya3F1ZXVlKTsKQEAgLTMxOSw3ICszMjksNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVhcnQtPnBvcnQubG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9kbWFfcnhfY2hhcnMoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKiB1YXJ0KQorc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfZG1hX3J4X2NoYXJzKHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1YXJ0LT5wb3J0LmluZm8tPnR0eTsKIAlpbnQgaSwgZmxnLCBzdGF0dXM7CkBAIC0zMzEsMjUgKzM0MSwzMiBAQAogCQl1YXJ0LT5wb3J0Lmljb3VudC5icmsrKzsKIAkJaWYgKHVhcnRfaGFuZGxlX2JyZWFrKCZ1YXJ0LT5wb3J0KSkKIAkJCWdvdG8gZG1hX2lnbm9yZV9jaGFyOwotCQlmbGcgPSBUVFlfQlJFQUs7Ci0JfSBlbHNlIGlmIChzdGF0dXMgJiBQRSkgewotCQlmbGcgPSBUVFlfUEFSSVRZOworCX0KKwlpZiAoc3RhdHVzICYgUEUpCiAJCXVhcnQtPnBvcnQuaWNvdW50LnBhcml0eSsrOwotCX0gZWxzZSBpZiAoc3RhdHVzICYgT0UpIHsKLQkJZmxnID0gVFRZX09WRVJSVU47CisJaWYgKHN0YXR1cyAmIE9FKQogCQl1YXJ0LT5wb3J0Lmljb3VudC5vdmVycnVuKys7Ci0JfSBlbHNlIGlmIChzdGF0dXMgJiBGRSkgewotCQlmbGcgPSBUVFlfRlJBTUU7CisJaWYgKHN0YXR1cyAmIEZFKQogCQl1YXJ0LT5wb3J0Lmljb3VudC5mcmFtZSsrOwotCX0gZWxzZQorCisJc3RhdHVzICY9IHVhcnQtPnBvcnQucmVhZF9zdGF0dXNfbWFzazsKKworCWlmIChzdGF0dXMgJiBCSSkKKwkJZmxnID0gVFRZX0JSRUFLOworCWVsc2UgaWYgKHN0YXR1cyAmIFBFKQorCQlmbGcgPSBUVFlfUEFSSVRZOworCWVsc2UgaWYgKHN0YXR1cyAmIEZFKQorCQlmbGcgPSBUVFlfRlJBTUU7CisJZWxzZQogCQlmbGcgPSBUVFlfTk9STUFMOwogCiAJZm9yIChpID0gdWFydC0+cnhfZG1hX2J1Zi5oZWFkOyBpIDwgdWFydC0+cnhfZG1hX2J1Zi50YWlsOyBpKyspIHsKIAkJaWYgKHVhcnRfaGFuZGxlX3N5c3JxX2NoYXIoJnVhcnQtPnBvcnQsIHVhcnQtPnJ4X2RtYV9idWYuYnVmW2ldKSkKIAkJCWdvdG8gZG1hX2lnbm9yZV9jaGFyOwotCQl1YXJ0X2luc2VydF9jaGFyKCZ1YXJ0LT5wb3J0LCBzdGF0dXMsIDIsIHVhcnQtPnJ4X2RtYV9idWYuYnVmW2ldLCBmbGcpOworCQl1YXJ0X2luc2VydF9jaGFyKCZ1YXJ0LT5wb3J0LCBzdGF0dXMsIE9FLCB1YXJ0LT5yeF9kbWFfYnVmLmJ1ZltpXSwgZmxnKTsKIAl9Ci1kbWFfaWdub3JlX2NoYXI6CisKKyBkbWFfaWdub3JlX2NoYXI6CiAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIH0KIApAQCAtNTQ1LDE0ICs1NjIsMTQgQEAKIAlhZGRfdGltZXIoJih1YXJ0LT5yeF9kbWFfdGltZXIpKTsKICNlbHNlCiAJaWYgKHJlcXVlc3RfaXJxCi0JICAgICh1YXJ0LT5wb3J0LmlycSwgYmZpbl9zZXJpYWxfaW50LCBJUlFGX0RJU0FCTEVELAorCSAgICAodWFydC0+cG9ydC5pcnEsIGJmaW5fc2VyaWFsX3J4X2ludCwgSVJRRl9ESVNBQkxFRCwKIAkgICAgICJCRklOX1VBUlRfUlgiLCB1YXJ0KSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVuYWJsZSB0byBhdHRhY2ggQmxhY2tGaW4gVUFSVCBSWCBpbnRlcnJ1cHRcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWlmIChyZXF1ZXN0X2lycQotCSAgICAodWFydC0+cG9ydC5pcnErMSwgYmZpbl9zZXJpYWxfaW50LCBJUlFGX0RJU0FCTEVELAorCSAgICAodWFydC0+cG9ydC5pcnErMSwgYmZpbl9zZXJpYWxfdHhfaW50LCBJUlFGX0RJU0FCTEVELAogCSAgICAgIkJGSU5fVUFSVF9UWCIsIHVhcnQpKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiVW5hYmxlIHRvIGF0dGFjaCBCbGFja0ZpbiBVQVJUIFRYIGludGVycnVwdFxuIik7CiAJCWZyZWVfaXJxKHVhcnQtPnBvcnQuaXJxLCB1YXJ0KTsKQEAgLTYxNCwxMyArNjMxLDI3IEBACiAJCQlsY3IgfD0gRVBTOwogCX0KIAotCS8qIFRoZXNlIGNvbnRyb2xzIGFyZSBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcG9ydCAqLwotCXRlcm1pb3MtPmNfaWZsYWcgfD0gSU5QQ0sgfCBCUktJTlQgfCBQQVJNUks7Ci0JdGVybWlvcy0+Y19pZmxhZyAmPSB+KElHTlBBUiB8IElHTkJSSyk7CisJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IE9FOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSU5QQ0spCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gKEZFIHwgUEUpOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgKEJSS0lOVCB8IFBBUk1SSykpCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gQkk7CiAKLQkvKiBUaGVzZSBjb250cm9scyBhcmUgbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHBvcnQgKi8KLQl0ZXJtaW9zLT5jX2lmbGFnIHw9IElOUENLIHwgQlJLSU5UIHwgUEFSTVJLOwotCXRlcm1pb3MtPmNfaWZsYWcgJj0gfihJR05QQVIgfCBJR05CUkspOworCS8qCisJICogQ2hhcmFjdGVycyB0byBpZ25vcmUKKwkgKi8KKwlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgPSAwOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQorCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gRkUgfCBQRTsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTkJSSykgeworCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gQkk7CisJCS8qCisJCSAqIElmIHdlJ3JlIGlnbm9yaW5nIHBhcml0eSBhbmQgYnJlYWsgaW5kaWNhdG9ycywKKwkJICogaWdub3JlIG92ZXJydW5zIHRvbyAoZm9yIHJlYWwgcmF3IHN1cHBvcnQpLgorCQkgKi8KKwkJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJR05QQVIpCisJCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gT0U7CisJfQogCiAJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsvMTYpOwogCXF1b3QgPSB1YXJ0X2dldF9kaXZpc29yKHBvcnQsIGJhdWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaCBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0LmgKaW5kZXggNjk3MTVlNS4uYThmODk0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydC5oCkBAIC04OCw3ICs4OCw3IEBACiAKIC8qIHRoZXNlIGFyZSBsb2NhdGVkIGluIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXMgKi8KIHZvaWQgY3BtX2xpbmVfY3JfY21kKGludCBsaW5lLCBpbnQgY21kKTsKLWludCBfX2luaXQgY3BtX3VhcnRfaW5pdF9wb3J0ZGVzYyh2b2lkKTsKK2ludCBjcG1fdWFydF9pbml0X3BvcnRkZXNjKHZvaWQpOwogaW50IGNwbV91YXJ0X2FsbG9jYnVmKHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICpwaW5mbywgdW5zaWduZWQgaW50IGlzX2Nvbik7CiB2b2lkIGNwbV91YXJ0X2ZyZWVidWYoc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBpbmZvKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCmluZGV4IDdhM2I5N2YuLmI2M2ZmOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKQEAgLTQ4Miw3ICs0ODIsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBjcG1fdWFydF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAotCQkJCSBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywgc3RydWN0IHRlcm1pb3MgKm9sZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewogCWludCBiYXVkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC05MzQsNyArOTM1LDcgQEAKIAkJCS5pcnEJCT0gU01DMV9JUlEsCiAJCQkub3BzCQk9ICZjcG1fdWFydF9wb3BzLAogCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5sb2NrCQk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkJCS5sb2NrCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGNwbV91YXJ0X3BvcnRzW1VBUlRfU01DMV0ucG9ydC5sb2NrKSwKIAkJfSwKIAkJLmZsYWdzID0gRkxBR19TTUMsCiAJCS50eF9ucmZpZm9zID0gVFhfTlVNX0ZJRk8sCkBAIC05NDgsNyArOTQ5LDcgQEAKIAkJCS5pcnEJCT0gU01DMl9JUlEsCiAJCQkub3BzCQk9ICZjcG1fdWFydF9wb3BzLAogCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5sb2NrCQk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkJCS5sb2NrCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGNwbV91YXJ0X3BvcnRzW1VBUlRfU01DMl0ucG9ydC5sb2NrKSwKIAkJfSwKIAkJLmZsYWdzID0gRkxBR19TTUMsCiAJCS50eF9ucmZpZm9zID0gVFhfTlVNX0ZJRk8sCkBAIC05NjUsNyArOTY2LDcgQEAKIAkJCS5pcnEJCT0gU0NDMV9JUlEsCiAJCQkub3BzCQk9ICZjcG1fdWFydF9wb3BzLAogCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5sb2NrCQk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkJCS5sb2NrCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGNwbV91YXJ0X3BvcnRzW1VBUlRfU0NDMV0ucG9ydC5sb2NrKSwKIAkJfSwKIAkJLnR4X25yZmlmb3MgPSBUWF9OVU1fRklGTywKIAkJLnR4X2ZpZm9zaXplID0gVFhfQlVGX1NJWkUsCkBAIC05NzksNyArOTgwLDcgQEAKIAkJCS5pcnEJCT0gU0NDMl9JUlEsCiAJCQkub3BzCQk9ICZjcG1fdWFydF9wb3BzLAogCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5sb2NrCQk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkJCS5sb2NrCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGNwbV91YXJ0X3BvcnRzW1VBUlRfU0NDMl0ucG9ydC5sb2NrKSwKIAkJfSwKIAkJLnR4X25yZmlmb3MgPSBUWF9OVU1fRklGTywKIAkJLnR4X2ZpZm9zaXplID0gVFhfQlVGX1NJWkUsCkBAIC05OTMsNyArOTk0LDcgQEAKIAkJCS5pcnEJCT0gU0NDM19JUlEsCiAJCQkub3BzCQk9ICZjcG1fdWFydF9wb3BzLAogCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5sb2NrCQk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkJCS5sb2NrCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGNwbV91YXJ0X3BvcnRzW1VBUlRfU0NDM10ucG9ydC5sb2NrKSwKIAkJfSwKIAkJLnR4X25yZmlmb3MgPSBUWF9OVU1fRklGTywKIAkJLnR4X2ZpZm9zaXplID0gVFhfQlVGX1NJWkUsCkBAIC0xMDA3LDcgKzEwMDgsNyBAQAogCQkJLmlycQkJPSBTQ0M0X0lSUSwKIAkJCS5vcHMJCT0gJmNwbV91YXJ0X3BvcHMsCiAJCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLmxvY2sJCT0gU1BJTl9MT0NLX1VOTE9DS0VELAorCQkJLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoY3BtX3VhcnRfcG9ydHNbVUFSVF9TQ0M0XS5wb3J0LmxvY2spLAogCQl9LAogCQkudHhfbnJmaWZvcyA9IFRYX05VTV9GSUZPLAogCQkudHhfZmlmb3NpemUgPSBUWF9CVUZfU0laRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYwppbmRleCA5MjVmYjYwLi44YzYzMjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIHsKIAlpbnQgZHBtZW1zeiwgbWVtc3o7CiAJdTggKmRwX21lbTsKLQl1aW50IGRwX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGRwX29mZnNldDsKIAl1OCAqbWVtX2FkZHI7CiAJZG1hX2FkZHJfdCBkbWFfYWRkciA9IDA7CiAKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiAJZHBtZW1zeiA9IHNpemVvZihjYmRfdCkgKiAocGluZm8tPnJ4X25yZmlmb3MgKyBwaW5mby0+dHhfbnJmaWZvcyk7CiAJZHBfb2Zmc2V0ID0gY3BtX2RwYWxsb2MoZHBtZW1zeiwgOCk7Ci0JaWYgKElTX0RQRVJSKGRwX29mZnNldCkpIHsKKwlpZiAoSVNfRVJSX1ZBTFVFKGRwX29mZnNldCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiY3BtX3VhcnRfY3BtMS5jOiBjb3VsZCBub3QgYWxsb2NhdGUgYnVmZmVyIGRlc2NyaXB0b3JzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xODUsNyArMTg1LDcgQEAKIH0KIAogLyogU2V0dXAgYW55IGR5bmFtaWMgcGFyYW1zIGluIHRoZSB1YXJ0IGRlc2MgKi8KLWludCBfX2luaXQgY3BtX3VhcnRfaW5pdF9wb3J0ZGVzYyh2b2lkKQoraW50IGNwbV91YXJ0X2luaXRfcG9ydGRlc2Modm9pZCkKIHsKIAlwcl9kZWJ1ZygiQ1BNIHVhcnRbLV06aW5pdCBwb3J0ZGVzY1xuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYwppbmRleCBmYTQ1NTk5Li43YjYxZDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIHsKIAlpbnQgZHBtZW1zeiwgbWVtc3o7CiAJdTggKmRwX21lbTsKLQl1aW50IGRwX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGRwX29mZnNldDsKIAl1OCAqbWVtX2FkZHI7CiAJZG1hX2FkZHJfdCBkbWFfYWRkciA9IDA7CiAKQEAgLTIzMCw3ICsyMzAsNyBAQAogCiAJZHBtZW1zeiA9IHNpemVvZihjYmRfdCkgKiAocGluZm8tPnJ4X25yZmlmb3MgKyBwaW5mby0+dHhfbnJmaWZvcyk7CiAJZHBfb2Zmc2V0ID0gY3BtX2RwYWxsb2MoZHBtZW1zeiwgOCk7Ci0JaWYgKElTX0RQRVJSKGRwX29mZnNldCkpIHsKKwlpZiAoSVNfRVJSX1ZBTFVFKGRwX29mZnNldCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiY3BtX3VhcnRfY3BtLmM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBidWZmZXIgZGVzY3JpcHRvcnNcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI4Miw3ICsyODIsNyBAQAogfQogCiAvKiBTZXR1cCBhbnkgZHluYW1pYyBwYXJhbXMgaW4gdGhlIHVhcnQgZGVzYyAqLwotaW50IF9faW5pdCBjcG1fdWFydF9pbml0X3BvcnRkZXNjKHZvaWQpCitpbnQgY3BtX3VhcnRfaW5pdF9wb3J0ZGVzYyh2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9DUE1fU01DMSkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0NQTV9TTUMyKQogCXUxNiAqYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2ljb20uYyBiL2RyaXZlcnMvc2VyaWFsL2ljb20uYwppbmRleCAyNDZjNTU3Li45ZDMxMDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaWNvbS5jCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KQEAgLTcwLDMzICs2OSw0MCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWNvbV9wY2lfdGFibGVbXSA9IHsKIAl7Ci0JICAgICAgLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSUJNLAotCSAgICAgIC5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0RFVl9JRF8xLAotCSAgICAgIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAotCSAgICAgIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAotCSAgICAgIC5kcml2ZXJfZGF0YSA9IEFEQVBURVJfVjEsCi0JIH0sCisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lCTSwKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fREVWX0lEXzEsCisJCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhID0gQURBUFRFUl9WMSwKKwl9LAogCXsKLQkgICAgICAudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JQk0sCi0JICAgICAgLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fREVWX0lEXzIsCi0JICAgICAgLnN1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSUJNLAotCSAgICAgIC5zdWJkZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX1YyX1RXT19QT1JUU19SVlgsCi0JICAgICAgLmRyaXZlcl9kYXRhID0gQURBUFRFUl9WMiwKLQkgfSwKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSUJNLAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9JQk1fSUNPTV9ERVZfSURfMiwKKwkJLnN1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSUJNLAorCQkuc3ViZGV2aWNlID0gUENJX0RFVklDRV9JRF9JQk1fSUNPTV9WMl9UV09fUE9SVFNfUlZYLAorCQkuZHJpdmVyX2RhdGEgPSBBREFQVEVSX1YyLAorCX0sCiAJewotCSAgICAgIC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lCTSwKLQkgICAgICAuZGV2aWNlID0gUENJX0RFVklDRV9JRF9JQk1fSUNPTV9ERVZfSURfMiwKLQkgICAgICAuc3VidmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JQk0sCi0JICAgICAgLnN1YmRldmljZSA9IFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fVjJfT05FX1BPUlRfUlZYX09ORV9QT1JUX01ETSwKLQkgICAgICAuZHJpdmVyX2RhdGEgPSBBREFQVEVSX1YyLAotCSB9LAorCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JQk0sCisJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0RFVl9JRF8yLAorCQkuc3VidmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JQk0sCisJCS5zdWJkZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX1YyX09ORV9QT1JUX1JWWF9PTkVfUE9SVF9NRE0sCisJCS5kcml2ZXJfZGF0YSA9IEFEQVBURVJfVjIsCisJfSwKIAl7Ci0JICAgICAgLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSUJNLAotCSAgICAgIC5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0RFVl9JRF8yLAotCSAgICAgIC5zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lCTSwKLQkgICAgICAuc3ViZGV2aWNlID0gUENJX0RFVklDRV9JRF9JQk1fSUNPTV9GT1VSX1BPUlRfTU9ERUwsCi0JICAgICAgLmRyaXZlcl9kYXRhID0gQURBUFRFUl9WMiwKLQkgfSwKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSUJNLAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9JQk1fSUNPTV9ERVZfSURfMiwKKwkJLnN1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSUJNLAorCQkuc3ViZGV2aWNlID0gUENJX0RFVklDRV9JRF9JQk1fSUNPTV9GT1VSX1BPUlRfTU9ERUwsCisJCS5kcml2ZXJfZGF0YSA9IEFEQVBURVJfVjIsCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lCTSwKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fREVWX0lEXzIsCisJCS5zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lCTSwKKwkJLnN1YmRldmljZSA9IFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fVjJfT05FX1BPUlRfUlZYX09ORV9QT1JUX01ETV9QQ0lFLAorCQkuZHJpdmVyX2RhdGEgPSBBREFQVEVSX1YyLAorCX0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX25lby5jCmluZGV4IDhiZThkYTMuLmIyZDZmNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fbmVvLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9uZW8uYwpAQCAtNTgxLDggKzU4MSwxMyBAQAogCQlyZXR1cm47CiAKIAkvKiBTY3J1YiBvZmYgbG93ZXIgYml0cy4gVGhleSBzaWduaWZ5IGRlbHRhJ3MsIHdoaWNoIEkgZG9uJ3QgY2FyZSBhYm91dCAqLwotCW1zaWduYWxzICY9IDB4ZjA7CisJLyogS2VlcCBERENEIGFuZCBERFNSIHRob3VnaCAqLworCW1zaWduYWxzICY9IDB4Zjg7CiAKKwlpZiAobXNpZ25hbHMgJiBVQVJUX01TUl9ERENEKQorCQl1YXJ0X2hhbmRsZV9kY2RfY2hhbmdlKCZjaC0+dWFydF9wb3J0LCBtc2lnbmFscyAmIFVBUlRfTVNSX0RDRCk7CisJaWYgKG1zaWduYWxzICYgVUFSVF9NU1JfRERTUikKKwkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmY2gtPnVhcnRfcG9ydCwgbXNpZ25hbHMgJiBVQVJUX01TUl9DVFMpOwogCWlmIChtc2lnbmFscyAmIFVBUlRfTVNSX0RDRCkKIAkJY2gtPmNoX21pc3RhdCB8PSBVQVJUX01TUl9EQ0Q7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMKaW5kZXggYmUyMmJiZC4uMjgxZjIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYworKysgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCkBAIC00NDgsNiArNDQ4LDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWJyZC0+Y2hhbm5lbHNbaV0tPnVhcnRfcG9ydC5pcnEgPSBicmQtPmlycTsKKwkJYnJkLT5jaGFubmVsc1tpXS0+dWFydF9wb3J0LnVhcnRjbGsgPSAxNDc0NTYwMDsKIAkJYnJkLT5jaGFubmVsc1tpXS0+dWFydF9wb3J0LnR5cGUgPSBQT1JUX0pTTTsKIAkJYnJkLT5jaGFubmVsc1tpXS0+dWFydF9wb3J0LmlvdHlwZSA9IFVQSU9fTUVNOwogCQlicmQtPmNoYW5uZWxzW2ldLT51YXJ0X3BvcnQubWVtYmFzZSA9IGJyZC0+cmVfbWFwX21lbWJhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IDhkMjRjZDUuLjM1ZjhiODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC0yNTcsOSArMjU3LDEwIEBACiB7CiAJc3RydWN0IG1wYzUyeHhfcHNjIF9faW9tZW0gKnBzYyA9IFBTQyhwb3J0KTsKIAotCS8qIFNodXQgZG93biB0aGUgcG9ydCwgaW50ZXJydXB0IGFuZCBhbGwgKi8KKwkvKiBTaHV0IGRvd24gdGhlIHBvcnQuICBMZWF2ZSBUWCBhY3RpdmUgaWYgb24gYSBjb25zb2xlIHBvcnQgKi8KIAlvdXRfOCgmcHNjLT5jb21tYW5kLE1QQzUyeHhfUFNDX1JTVF9SWCk7Ci0Jb3V0XzgoJnBzYy0+Y29tbWFuZCxNUEM1Mnh4X1BTQ19SU1RfVFgpOworCWlmICghdWFydF9jb25zb2xlKHBvcnQpKQorCQlvdXRfOCgmcHNjLT5jb21tYW5kLE1QQzUyeHhfUFNDX1JTVF9UWCk7CiAKIAlwb3J0LT5yZWFkX3N0YXR1c19tYXNrID0gMDsKIAlvdXRfYmUxNigmcHNjLT5tcGM1Mnh4X3BzY19pbXIscG9ydC0+cmVhZF9zdGF0dXNfbWFzayk7CkBAIC0xMDY5LDcgKzEwNzAsNyBAQAogCQkJY29udGludWU7CiAKIAkJLyogSXMgYSBwYXJ0aWN1bGFyIGRldmljZSBudW1iZXIgcmVxdWVzdGVkPyAqLwotCQlkZXZubyA9IGdldF9wcm9wZXJ0eShucCwgInBvcnQtbnVtYmVyIiwgTlVMTCk7CisJCWRldm5vID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicG9ydC1udW1iZXIiLCBOVUxMKTsKIAkJbXBjNTJ4eF91YXJ0X29mX2Fzc2lnbihvZl9ub2RlX2dldChucCksIGRldm5vID8gKmRldm5vIDogLTEpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvb2Zfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9vZl9zZXJpYWwuYwppbmRleCAzMzZkMGY0Li43ZmZkYWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9vZl9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9vZl9zZXJpYWwuYwpAQCAtMjksOCArMjksOCBAQAogCWludCByZXQ7CiAKIAltZW1zZXQocG9ydCwgMCwgc2l6ZW9mICpwb3J0KTsKLQlzcGQgPSBnZXRfcHJvcGVydHkobnAsICJjdXJyZW50LXNwZWVkIiwgTlVMTCk7Ci0JY2xrID0gZ2V0X3Byb3BlcnR5KG5wLCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7CisJc3BkID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY3VycmVudC1zcGVlZCIsIE5VTEwpOworCWNsayA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOwogCWlmICghY2xrKSB7CiAJCWRldl93YXJuKCZvZmRldi0+ZGV2LCAibm8gY2xvY2stZnJlcXVlbmN5IHByb3BlcnR5IHNldFxuIik7CiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCmluZGV4IGJlOGQ3NTcuLjBmYTlmNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKQEAgLTE0NTAsMTQgKzE0NTAsMTQgQEAKIAkvKgogCSAqIERldGVjdCBwb3J0IHR5cGUKIAkgKi8KLQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJjb2JhbHQiKSkKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJjb2JhbHQiKSkKIAkJdWFwLT5mbGFncyB8PSBQTUFDWklMT0dfRkxBR19JU19JTlRNT0RFTTsKLQljb25uID0gZ2V0X3Byb3BlcnR5KG5wLCAiQUFQTCxjb25uZWN0b3IiLCAmbGVuKTsKKwljb25uID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiQUFQTCxjb25uZWN0b3IiLCAmbGVuKTsKIAlpZiAoY29ubiAmJiAoc3RyY21wKGNvbm4sICJpbmZyYXJlZCIpID09IDApKQogCQl1YXAtPmZsYWdzIHw9IFBNQUNaSUxPR19GTEFHX0lTX0lSREE7CiAJdWFwLT5wb3J0X3R5cGUgPSBQTUFDX1NDQ19BU1lOQzsKIAkvKiAxOTk5IFBvd2VyYm9vayBHMyBoYXMgc2xvdC1uYW1lcyBwcm9wZXJ0eSBpbnN0ZWFkICovCi0Jc2xvdHMgPSBnZXRfcHJvcGVydHkobnAsICJzbG90LW5hbWVzIiwgJmxlbik7CisJc2xvdHMgPSBvZl9nZXRfcHJvcGVydHkobnAsICJzbG90LW5hbWVzIiwgJmxlbik7CiAJaWYgKHNsb3RzICYmIHNsb3RzLT5jb3VudCA+IDApIHsKIAkJaWYgKHN0cmNtcChzbG90cy0+bmFtZSwgIklyREEiKSA9PSAwKQogCQkJdWFwLT5mbGFncyB8PSBQTUFDWklMT0dfRkxBR19JU19JUkRBOwpAQCAtMTQ3MSw3ICsxNDcxLDcgQEAKIAkJCW9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJpMmMtbW9kZW0iKTsKIAkJaWYgKGkyY19tb2RlbSkgewogCQkJY29uc3QgY2hhciogbWlkID0KLQkJCQlnZXRfcHJvcGVydHkoaTJjX21vZGVtLCAibW9kZW0taWQiLCBOVUxMKTsKKwkJCQlvZl9nZXRfcHJvcGVydHkoaTJjX21vZGVtLCAibW9kZW0taWQiLCBOVUxMKTsKIAkJCWlmIChtaWQpIHN3aXRjaCgqbWlkKSB7CiAJCQljYXNlIDB4MDQgOgogCQkJY2FzZSAweDA1IDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwppbmRleCAzYmE5MjA4Li4xMGJjMDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCkBAIC05NTcsNyArOTU3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgczNjMjR4eF9zZXJpYWxfcG9ydHNbTlJfUE9SVFNdID0gewogCVswXSA9IHsKIAkJLnBvcnQgPSB7Ci0JCQkubG9jawkJPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJCQkubG9jawkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChzM2MyNHh4X3NlcmlhbF9wb3J0c1swXS5wb3J0LmxvY2spLAogCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKIAkJCS5pcnEJCT0gSVJRX1MzQ1VBUlRfUlgwLAogCQkJLnVhcnRjbGsJPSAwLApAQCAtOTY5LDcgKzk2OSw3IEBACiAJfSwKIAlbMV0gPSB7CiAJCS5wb3J0ID0gewotCQkJLmxvY2sJCT0gU1BJTl9MT0NLX1VOTE9DS0VELAorCQkJLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoczNjMjR4eF9zZXJpYWxfcG9ydHNbMV0ucG9ydC5sb2NrKSwKIAkJCS5pb3R5cGUJCT0gVVBJT19NRU0sCiAJCQkuaXJxCQk9IElSUV9TM0NVQVJUX1JYMSwKIAkJCS51YXJ0Y2xrCT0gMCwKQEAgLTk4Myw3ICs5ODMsNyBAQAogCiAJWzJdID0gewogCQkucG9ydCA9IHsKLQkJCS5sb2NrCQk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkJCS5sb2NrCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHMzYzI0eHhfc2VyaWFsX3BvcnRzWzJdLnBvcnQubG9jayksCiAJCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkJLmlycQkJPSBJUlFfUzNDVUFSVF9SWDIsCiAJCQkudWFydGNsawk9IDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyMWFmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9rczg2OTUuYwpAQCAtMCwwICsxLDY1NyBAQAorLyoKKyAqICBkcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMKKyAqCisgKiAgRHJpdmVyIGZvciBLUzg2OTUgc2VyaWFsIHBvcnRzCisgKgorICogIEJhc2VkIG9uIGRyaXZlcnMvc2VyaWFsL3NlcmlhbF9hbWJhLmMsIGJ5IEthbSBMZWUuCisgKgorICogIENvcHlyaWdodCAyMDAyLTIwMDUgTWljcmVsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtdWFydC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaXJxLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfS1M4Njk1X0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQorI2RlZmluZSBTVVBQT1JUX1NZU1JRCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisKKworI2RlZmluZSBTRVJJQUxfS1M4Njk1X01BSk9SCTIwNAorI2RlZmluZSBTRVJJQUxfS1M4Njk1X01JTk9SCTE2CisjZGVmaW5lIFNFUklBTF9LUzg2OTVfREVWTkFNRQkidHR5QU0iCisKKyNkZWZpbmUgU0VSSUFMX0tTODY5NV9OUgkxCisKKy8qCisgKiBBY2Nlc3MgbWFjcm9zIGZvciB0aGUgS1M4Njk1IFVBUlQKKyAqLworI2RlZmluZSBVQVJUX0dFVF9DSEFSKHApCShfX3Jhd19yZWFkbCgocCktPm1lbWJhc2UgKyBLUzg2OTVfVVJSQikgJiAweEZGKQorI2RlZmluZSBVQVJUX1BVVF9DSEFSKHAsIGMpCV9fcmF3X3dyaXRlbCgoYyksIChwKS0+bWVtYmFzZSArIEtTODY5NV9VUlRIKQorI2RlZmluZSBVQVJUX0dFVF9GQ1IocCkJCV9fcmF3X3JlYWRsKChwKS0+bWVtYmFzZSArIEtTODY5NV9VUkZDKQorI2RlZmluZSBVQVJUX1BVVF9GQ1IocCwgYykJX19yYXdfd3JpdGVsKChjKSwgKHApLT5tZW1iYXNlICsgS1M4Njk1X1VSRkMpCisjZGVmaW5lIFVBUlRfR0VUX01TUihwKQkJX19yYXdfcmVhZGwoKHApLT5tZW1iYXNlICsgS1M4Njk1X1VSTVMpCisjZGVmaW5lIFVBUlRfR0VUX0xTUihwKQkJX19yYXdfcmVhZGwoKHApLT5tZW1iYXNlICsgS1M4Njk1X1VSTFMpCisjZGVmaW5lIFVBUlRfR0VUX0xDUihwKQkJX19yYXdfcmVhZGwoKHApLT5tZW1iYXNlICsgS1M4Njk1X1VSTEMpCisjZGVmaW5lIFVBUlRfUFVUX0xDUihwLCBjKQlfX3Jhd193cml0ZWwoKGMpLCAocCktPm1lbWJhc2UgKyBLUzg2OTVfVVJMQykKKyNkZWZpbmUgVUFSVF9HRVRfTUNSKHApCQlfX3Jhd19yZWFkbCgocCktPm1lbWJhc2UgKyBLUzg2OTVfVVJNQykKKyNkZWZpbmUgVUFSVF9QVVRfTUNSKHAsIGMpCV9fcmF3X3dyaXRlbCgoYyksIChwKS0+bWVtYmFzZSArIEtTODY5NV9VUk1DKQorI2RlZmluZSBVQVJUX0dFVF9CUkRSKHApCV9fcmF3X3JlYWRsKChwKS0+bWVtYmFzZSArIEtTODY5NV9VUkJEKQorI2RlZmluZSBVQVJUX1BVVF9CUkRSKHAsIGMpCV9fcmF3X3dyaXRlbCgoYyksIChwKS0+bWVtYmFzZSArIEtTODY5NV9VUkJEKQorCisjZGVmaW5lIEtTODY5NV9DTFJfVFhfSU5UKCkJX19yYXdfd3JpdGVsKDEgPDwgS1M4Njk1X0lSUV9VQVJUX1RYLCBLUzg2OTVfSVJRX1ZBICsgS1M4Njk1X0lOVFNUKQorCisjZGVmaW5lIFVBUlRfRFVNTVlfTFNSX1JYCTB4MTAwCisjZGVmaW5lIFVBUlRfUE9SVF9TSVpFCQkoS1M4Njk1X1VTUiAtIEtTODY5NV9VUlJCICsgNCkKKworI2RlZmluZSB0eF9lbmFibGVkKHBvcnQpICgocG9ydCktPnVudXNlZFswXSkKKyNkZWZpbmUgcnhfZW5hYmxlZChwb3J0KSAoKHBvcnQpLT51bnVzZWRbMV0pCisKKworI2lmZGVmIFNVUFBPUlRfU1lTUlEKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBrczg2OTVfY29uc29sZTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBrczg2OTV1YXJ0X3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpZiAodHhfZW5hYmxlZChwb3J0KSkgeworCQlkaXNhYmxlX2lycShLUzg2OTVfSVJRX1VBUlRfVFgpOworCQl0eF9lbmFibGVkKHBvcnQpID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGtzODY5NXVhcnRfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpZiAoIXR4X2VuYWJsZWQocG9ydCkpIHsKKwkJZW5hYmxlX2lycShLUzg2OTVfSVJRX1VBUlRfVFgpOworCQl0eF9lbmFibGVkKHBvcnQpID0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGtzODY5NXVhcnRfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWlmIChyeF9lbmFibGVkKHBvcnQpKSB7CisJCWRpc2FibGVfaXJxKEtTODY5NV9JUlFfVUFSVF9SWCk7CisJCXJ4X2VuYWJsZWQocG9ydCkgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQga3M4Njk1dWFydF9lbmFibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwllbmFibGVfaXJxKEtTODY5NV9JUlFfVUFSVF9NT0RFTV9TVEFUVVMpOworfQorCitzdGF0aWMgdm9pZCBrczg2OTV1YXJ0X2Rpc2FibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlkaXNhYmxlX2lycShLUzg2OTVfSVJRX1VBUlRfTU9ERU1fU1RBVFVTKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGtzODY5NXVhcnRfcnhfY2hhcnMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPmluZm8tPnR0eTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBjaCwgbHNyLCBmbGcsIG1heF9jb3VudCA9IDI1NjsKKworCXN0YXR1cyA9IFVBUlRfR0VUX0xTUihwb3J0KTsJCS8qIGNsZWFycyBwZW5kaW5nIExTUiBpbnRlcnJ1cHRzICovCisJd2hpbGUgKChzdGF0dXMgJiBVUkxTX1VSRFIpICYmIG1heF9jb3VudC0tKSB7CisJCWNoID0gVUFSVF9HRVRfQ0hBUihwb3J0KTsKKwkJZmxnID0gVFRZX05PUk1BTDsKKworCQlwb3J0LT5pY291bnQucngrKzsKKworCQkvKgorCQkgKiBOb3RlIHRoYXQgdGhlIGVycm9yIGhhbmRsaW5nIGNvZGUgaXMKKwkJICogb3V0IG9mIHRoZSBtYWluIGV4ZWN1dGlvbiBwYXRoCisJCSAqLworCQlsc3IgPSBVQVJUX0dFVF9MU1IocG9ydCkgfCBVQVJUX0RVTU1ZX0xTUl9SWDsKKwkJaWYgKHVubGlrZWx5KGxzciAmIChVUkxTX1VSQkkgfCBVUkxTX1VSUEUgfCBVUkxTX1VSRkUgfCBVUkxTX1VSUk9FKSkpIHsKKwkJCWlmIChsc3IgJiBVUkxTX1VSQkkpIHsKKwkJCQlsc3IgJj0gfihVUkxTX1VSRkUgfCBVUkxTX1VSUEUpOworCQkJCXBvcnQtPmljb3VudC5icmsrKzsKKwkJCQlpZiAodWFydF9oYW5kbGVfYnJlYWsocG9ydCkpCisJCQkJCWdvdG8gaWdub3JlX2NoYXI7CisJCQl9CisJCQlpZiAobHNyICYgVVJMU19VUlBFKQorCQkJCXBvcnQtPmljb3VudC5wYXJpdHkrKzsKKwkJCWlmIChsc3IgJiBVUkxTX1VSRkUpCisJCQkJcG9ydC0+aWNvdW50LmZyYW1lKys7CisJCQlpZiAobHNyICYgVVJMU19VUlJPRSkKKwkJCQlwb3J0LT5pY291bnQub3ZlcnJ1bisrOworCisJCQlsc3IgJj0gcG9ydC0+cmVhZF9zdGF0dXNfbWFzazsKKworCQkJaWYgKGxzciAmIFVSTFNfVVJCSSkKKwkJCQlmbGcgPSBUVFlfQlJFQUs7CisJCQllbHNlIGlmIChsc3IgJiBVUkxTX1VSUEUpCisJCQkJZmxnID0gVFRZX1BBUklUWTsKKwkJCWVsc2UgaWYgKGxzciAmIFVSTFNfVVJGRSkKKwkJCQlmbGcgPSBUVFlfRlJBTUU7CisJCX0KKworCQlpZiAodWFydF9oYW5kbGVfc3lzcnFfY2hhcihwb3J0LCBjaCkpCisJCQlnb3RvIGlnbm9yZV9jaGFyOworCisJCXVhcnRfaW5zZXJ0X2NoYXIocG9ydCwgbHNyLCBVUkxTX1VSUk9FLCBjaCwgZmxnKTsKKworaWdub3JlX2NoYXI6CisJCXN0YXR1cyA9IFVBUlRfR0VUX0xTUihwb3J0KTsKKwl9CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3Qga3M4Njk1dWFydF90eF9jaGFycyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGRldl9pZDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisKKwlpZiAocG9ydC0+eF9jaGFyKSB7CisJCUtTODY5NV9DTFJfVFhfSU5UKCk7CisJCVVBUlRfUFVUX0NIQVIocG9ydCwgcG9ydC0+eF9jaGFyKTsKKwkJcG9ydC0+aWNvdW50LnR4Kys7CisJCXBvcnQtPnhfY2hhciA9IDA7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAodWFydF90eF9zdG9wcGVkKHBvcnQpIHx8IHVhcnRfY2lyY19lbXB0eSh4bWl0KSkgeworCQlrczg2OTV1YXJ0X3N0b3BfdHgocG9ydCk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwljb3VudCA9IDE2OwkvKiBmaWZvIHNpemUgKi8KKwl3aGlsZSAoIXVhcnRfY2lyY19lbXB0eSh4bWl0KSAmJiAoY291bnQtLSA+IDApKSB7CisJCUtTODY5NV9DTFJfVFhfSU5UKCk7CisJCVVBUlRfUFVUX0NIQVIocG9ydCwgeG1pdC0+YnVmW3htaXQtPnRhaWxdKTsKKworCQl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyAxKSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOworCQlwb3J0LT5pY291bnQudHgrKzsKKwl9CisKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworCisJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKKwkJa3M4Njk1dWFydF9zdG9wX3R4KHBvcnQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qga3M4Njk1dWFydF9tb2RlbV9zdGF0dXMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCS8qCisJICogY2xlYXIgbW9kZW0gaW50ZXJydXB0IGJ5IHJlYWRpbmcgTVNSCisJICovCisJc3RhdHVzID0gVUFSVF9HRVRfTVNSKHBvcnQpOworCisJaWYgKHN0YXR1cyAmIFVSTVNfVVJERENEKQorCQl1YXJ0X2hhbmRsZV9kY2RfY2hhbmdlKHBvcnQsIHN0YXR1cyAmIFVSTVNfVVJERENEKTsKKworCWlmIChzdGF0dXMgJiBVUk1TX1VSRERTVCkKKwkJcG9ydC0+aWNvdW50LmRzcisrOworCisJaWYgKHN0YXR1cyAmIFVSTVNfVVJEQ1RTKQorCQl1YXJ0X2hhbmRsZV9jdHNfY2hhbmdlKHBvcnQsIHN0YXR1cyAmIFVSTVNfVVJEQ1RTKTsKKworCWlmIChzdGF0dXMgJiBVUk1TX1VSVEVSSSkKKwkJcG9ydC0+aWNvdW50LnJuZysrOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5pbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQga3M4Njk1dWFydF90eF9lbXB0eShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiAoVUFSVF9HRVRfTFNSKHBvcnQpICYgVVJMU19VUlRFKSA/IFRJT0NTRVJfVEVNVCA6IDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQga3M4Njk1dWFydF9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJc3RhdHVzID0gVUFSVF9HRVRfTVNSKHBvcnQpOworCWlmIChzdGF0dXMgJiBVUk1TX1VSRENEKQorCQlyZXN1bHQgfD0gVElPQ01fQ0FSOworCWlmIChzdGF0dXMgJiBVUk1TX1VSRFNSKQorCQlyZXN1bHQgfD0gVElPQ01fRFNSOworCWlmIChzdGF0dXMgJiBVUk1TX1VSQ1RTKQorCQlyZXN1bHQgfD0gVElPQ01fQ1RTOworCWlmIChzdGF0dXMgJiBVUk1TX1VSUkkpCisJCXJlc3VsdCB8PSBUSU9DTV9SSTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGtzODY5NXVhcnRfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVfaW50IG1jdHJsKQoreworCXVuc2lnbmVkIGludCBtY3I7CisKKwltY3IgPSBVQVJUX0dFVF9NQ1IocG9ydCk7CisJaWYgKG1jdHJsICYgVElPQ01fUlRTKQorCQltY3IgfD0gVVJNQ19VUlJUUzsKKwllbHNlCisJCW1jciAmPSB+VVJNQ19VUlJUUzsKKworCWlmIChtY3RybCAmIFRJT0NNX0RUUikKKwkJbWNyIHw9IFVSTUNfVVJEVFI7CisJZWxzZQorCQltY3IgJj0gflVSTUNfVVJEVFI7CisKKwlVQVJUX1BVVF9NQ1IocG9ydCwgbWNyKTsKK30KKworc3RhdGljIHZvaWQga3M4Njk1dWFydF9icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQoreworCXVuc2lnbmVkIGludCBsY3I7CisKKwlsY3IgPSBVQVJUX0dFVF9MQ1IocG9ydCk7CisKKwlpZiAoYnJlYWtfc3RhdGUgPT0gLTEpCisJCWxjciB8PSBVUkxDX1VSU0JDOworCWVsc2UKKwkJbGNyICY9IH5VUkxDX1VSU0JDOworCisJVUFSVF9QVVRfTENSKHBvcnQsIGxjcik7Cit9CisKK3N0YXRpYyBpbnQga3M4Njk1dWFydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJaW50IHJldHZhbDsKKworCXNldF9pcnFfZmxhZ3MoS1M4Njk1X0lSUV9VQVJUX1RYLCBJUlFGX1ZBTElEIHwgSVJRRl9OT0FVVE9FTik7CisJdHhfZW5hYmxlZChwb3J0KSA9IDA7CisJcnhfZW5hYmxlZChwb3J0KSA9IDE7CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBJUlEKKwkgKi8KKwlyZXR2YWwgPSByZXF1ZXN0X2lycShLUzg2OTVfSVJRX1VBUlRfVFgsIGtzODY5NXVhcnRfdHhfY2hhcnMsIElSUUZfRElTQUJMRUQsICJVQVJUIFRYIiwgcG9ydCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfdHg7CisKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShLUzg2OTVfSVJRX1VBUlRfUlgsIGtzODY5NXVhcnRfcnhfY2hhcnMsIElSUUZfRElTQUJMRUQsICJVQVJUIFJYIiwgcG9ydCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfcng7CisKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShLUzg2OTVfSVJRX1VBUlRfTElORV9TVEFUVVMsIGtzODY5NXVhcnRfcnhfY2hhcnMsIElSUUZfRElTQUJMRUQsICJVQVJUIExpbmVTdGF0dXMiLCBwb3J0KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9sczsKKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKEtTODY5NV9JUlFfVUFSVF9NT0RFTV9TVEFUVVMsIGtzODY5NXVhcnRfbW9kZW1fc3RhdHVzLCBJUlFGX0RJU0FCTEVELCAiVUFSVCBNb2RlbVN0YXR1cyIsIHBvcnQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX21zOworCisJcmV0dXJuIDA7CisKK2Vycl9tczoKKwlmcmVlX2lycShLUzg2OTVfSVJRX1VBUlRfTElORV9TVEFUVVMsIHBvcnQpOworZXJyX2xzOgorCWZyZWVfaXJxKEtTODY5NV9JUlFfVUFSVF9SWCwgcG9ydCk7CitlcnJfcng6CisJZnJlZV9pcnEoS1M4Njk1X0lSUV9VQVJUX1RYLCBwb3J0KTsKK2Vycl90eDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBrczg2OTV1YXJ0X3NodXRkb3duKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJLyoKKwkgKiBGcmVlIHRoZSBpbnRlcnJ1cHQKKwkgKi8KKwlmcmVlX2lycShLUzg2OTVfSVJRX1VBUlRfUlgsIHBvcnQpOworCWZyZWVfaXJxKEtTODY5NV9JUlFfVUFSVF9UWCwgcG9ydCk7CisJZnJlZV9pcnEoS1M4Njk1X0lSUV9VQVJUX01PREVNX1NUQVRVUywgcG9ydCk7CisJZnJlZV9pcnEoS1M4Njk1X0lSUV9VQVJUX0xJTkVfU1RBVFVTLCBwb3J0KTsKKworCS8qIGRpc2FibGUgYnJlYWsgY29uZGl0aW9uIGFuZCBmaWZvcyAqLworCVVBUlRfUFVUX0xDUihwb3J0LCBVQVJUX0dFVF9MQ1IocG9ydCkgJiB+VVJMQ19VUlNCQyk7CisJVUFSVF9QVVRfRkNSKHBvcnQsIFVBUlRfR0VUX0ZDUihwb3J0KSAmIH5VUkZDX1VSRkUpOworfQorCitzdGF0aWMgdm9pZCBrczg2OTV1YXJ0X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywgc3RydWN0IGt0ZXJtaW9zICpvbGQpCit7CisJdW5zaWduZWQgaW50IGxjciwgZmNyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBiYXVkLCBxdW90OworCisJLyoKKwkgKiBBc2sgdGhlIGNvcmUgdG8gY2FsY3VsYXRlIHRoZSBkaXZpc29yIGZvciB1cy4KKwkgKi8KKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgcG9ydC0+dWFydGNsay8xNik7CisJcXVvdCA9IHVhcnRfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCk7CisKKwlzd2l0Y2ggKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU0laRSkgeworCWNhc2UgQ1M1OgorCQlsY3IgPSBVUkNMXzU7CisJCWJyZWFrOworCWNhc2UgQ1M2OgorCQlsY3IgPSBVUkNMXzY7CisJCWJyZWFrOworCWNhc2UgQ1M3OgorCQlsY3IgPSBVUkNMXzc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxjciA9IFVSQ0xfODsKKwkJYnJlYWs7CisJfQorCisJLyogc3RvcCBiaXRzICovCisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU1RPUEIpCisJCWxjciB8PSBVUkxDX1VSU0I7CisKKwkvKiBwYXJpdHkgKi8KKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIFBBUkVOQikgeworCQlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENNU1BBUikgewkvKiBNYXJrIG9yIFNwYWNlIHBhcml0eSAqLworCQkJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJPREQpCisJCQkJbGNyIHw9IFVSUEVfTUFSSzsKKwkJCWVsc2UKKwkJCQlsY3IgfD0gVVJQRV9TUEFDRTsKKwkJfQorCQllbHNlIGlmICh0ZXJtaW9zLT5jX2NmbGFnICYgUEFST0REKQorCQkJbGNyIHw9IFVSUEVfT0REOworCQllbHNlCisJCQlsY3IgfD0gVVJQRV9FVkVOOworCX0KKworCWlmIChwb3J0LT5maWZvc2l6ZSA+IDEpCisJCWZjciA9IFVSRkNfVVJGUlRfOCB8IFVSRkNfVVJURlIgfCBVUkZDX1VSUkZSIHwgVVJGQ19VUkZFOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogVXBkYXRlIHRoZSBwZXItcG9ydCB0aW1lb3V0LgorCSAqLworCXVhcnRfdXBkYXRlX3RpbWVvdXQocG9ydCwgdGVybWlvcy0+Y19jZmxhZywgYmF1ZCk7CisKKwlwb3J0LT5yZWFkX3N0YXR1c19tYXNrID0gVVJMU19VUlJPRTsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElOUENLKQorCQlwb3J0LT5yZWFkX3N0YXR1c19tYXNrIHw9IChVUkxTX1VSRkUgfCBVUkxTX1VSUEUpOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgKEJSS0lOVCB8IFBBUk1SSykpCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gVVJMU19VUkJJOworCisJLyoKKwkgKiBDaGFyYWN0ZXJzIHRvIGlnbm9yZQorCSAqLworCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayA9IDA7CisJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJR05QQVIpCisJCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSAoVVJMU19VUkZFIHwgVVJMU19VUlBFKTsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTkJSSykgeworCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gVVJMU19VUkJJOworCQkvKgorCQkgKiBJZiB3ZSdyZSBpZ25vcmluZyBwYXJpdHkgYW5kIGJyZWFrIGluZGljYXRvcnMsCisJCSAqIGlnbm9yZSBvdmVycnVucyB0b28gKGZvciByZWFsIHJhdyBzdXBwb3J0KS4KKwkJICovCisJCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQorCQkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVSTFNfVVJST0U7CisJfQorCisJLyoKKwkgKiBJZ25vcmUgYWxsIGNoYXJhY3RlcnMgaWYgQ1JFQUQgaXMgbm90IHNldC4KKwkgKi8KKwlpZiAoKHRlcm1pb3MtPmNfY2ZsYWcgJiBDUkVBRCkgPT0gMCkKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfRFVNTVlfTFNSX1JYOworCisJLyogZmlyc3QsIGRpc2FibGUgZXZlcnl0aGluZyAqLworCWlmIChVQVJUX0VOQUJMRV9NUyhwb3J0LCB0ZXJtaW9zLT5jX2NmbGFnKSkKKwkJa3M4Njk1dWFydF9lbmFibGVfbXMocG9ydCk7CisJZWxzZQorCQlrczg2OTV1YXJ0X2Rpc2FibGVfbXMocG9ydCk7CisKKwkvKiBTZXQgYmF1ZCByYXRlICovCisJVUFSVF9QVVRfQlJEUihwb3J0LCBxdW90KTsKKworCVVBUlRfUFVUX0xDUihwb3J0LCBsY3IpOworCVVBUlRfUFVUX0ZDUihwb3J0LCBmY3IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqa3M4Njk1dWFydF90eXBlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIHBvcnQtPnR5cGUgPT0gUE9SVF9LUzg2OTUgPyAiS1M4Njk1IiA6IE5VTEw7Cit9CisKKy8qCisgKiBSZWxlYXNlIHRoZSBtZW1vcnkgcmVnaW9uKHMpIGJlaW5nIHVzZWQgYnkgJ3BvcnQnCisgKi8KK3N0YXRpYyB2b2lkIGtzODY5NXVhcnRfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIFVBUlRfUE9SVF9TSVpFKTsKK30KKworLyoKKyAqIFJlcXVlc3QgdGhlIG1lbW9yeSByZWdpb24ocykgYmVpbmcgdXNlZCBieSAncG9ydCcKKyAqLworc3RhdGljIGludCBrczg2OTV1YXJ0X3JlcXVlc3RfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiByZXF1ZXN0X21lbV9yZWdpb24ocG9ydC0+bWFwYmFzZSwgVUFSVF9QT1JUX1NJWkUsCisJCQkic2VyaWFsX2tzODY5NSIpICE9IE5VTEwgPyAwIDogLUVCVVNZOworfQorCisvKgorICogQ29uZmlndXJlL2F1dG9jb25maWd1cmUgdGhlIHBvcnQuCisgKi8KK3N0YXRpYyB2b2lkIGtzODY5NXVhcnRfY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFVBUlRfQ09ORklHX1RZUEUpIHsKKwkJcG9ydC0+dHlwZSA9IFBPUlRfS1M4Njk1OworCQlrczg2OTV1YXJ0X3JlcXVlc3RfcG9ydChwb3J0KTsKKwl9Cit9CisKKy8qCisgKiB2ZXJpZnkgdGhlIG5ldyBzZXJpYWxfc3RydWN0IChmb3IgVElPQ1NTRVJJQUwpLgorICovCitzdGF0aWMgaW50IGtzODY5NXVhcnRfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzZXItPnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHNlci0+dHlwZSAhPSBQT1JUX0tTODY5NSkKKwkJcmV0ID0gLUVJTlZBTDsKKwlpZiAoc2VyLT5pcnEgIT0gcG9ydC0+aXJxKQorCQlyZXQgPSAtRUlOVkFMOworCWlmIChzZXItPmJhdWRfYmFzZSA8IDk2MDApCisJCXJldCA9IC1FSU5WQUw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCB1YXJ0X29wcyBrczg2OTV1YXJ0X3BvcHMgPSB7CisJLnR4X2VtcHR5CT0ga3M4Njk1dWFydF90eF9lbXB0eSwKKwkuc2V0X21jdHJsCT0ga3M4Njk1dWFydF9zZXRfbWN0cmwsCisJLmdldF9tY3RybAk9IGtzODY5NXVhcnRfZ2V0X21jdHJsLAorCS5zdG9wX3R4CT0ga3M4Njk1dWFydF9zdG9wX3R4LAorCS5zdGFydF90eAk9IGtzODY5NXVhcnRfc3RhcnRfdHgsCisJLnN0b3BfcngJPSBrczg2OTV1YXJ0X3N0b3BfcngsCisJLmVuYWJsZV9tcwk9IGtzODY5NXVhcnRfZW5hYmxlX21zLAorCS5icmVha19jdGwJPSBrczg2OTV1YXJ0X2JyZWFrX2N0bCwKKwkuc3RhcnR1cAk9IGtzODY5NXVhcnRfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBrczg2OTV1YXJ0X3NodXRkb3duLAorCS5zZXRfdGVybWlvcwk9IGtzODY5NXVhcnRfc2V0X3Rlcm1pb3MsCisJLnR5cGUJCT0ga3M4Njk1dWFydF90eXBlLAorCS5yZWxlYXNlX3BvcnQJPSBrczg2OTV1YXJ0X3JlbGVhc2VfcG9ydCwKKwkucmVxdWVzdF9wb3J0CT0ga3M4Njk1dWFydF9yZXF1ZXN0X3BvcnQsCisJLmNvbmZpZ19wb3J0CT0ga3M4Njk1dWFydF9jb25maWdfcG9ydCwKKwkudmVyaWZ5X3BvcnQJPSBrczg2OTV1YXJ0X3ZlcmlmeV9wb3J0LAorfTsKKworc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQga3M4Njk1dWFydF9wb3J0c1tTRVJJQUxfS1M4Njk1X05SXSA9IHsKKwl7CisJCS5tZW1iYXNlCT0gKHZvaWQgKikgS1M4Njk1X1VBUlRfVkEsCisJCS5tYXBiYXNlCT0gS1M4Njk1X1VBUlRfVkEsCisJCS5pb3R5cGUJCT0gU0VSSUFMX0lPX01FTSwKKwkJLmlycQkJPSBLUzg2OTVfSVJRX1VBUlRfVFgsCisJCS51YXJ0Y2xrCT0gQ0xPQ0tfVElDS19SQVRFICogMTYsCisJCS5maWZvc2l6ZQk9IDE2LAorCQkub3BzCQk9ICZrczg2OTV1YXJ0X3BvcHMsCisJCS5mbGFncwkJPSBBU1lOQ19CT09UX0FVVE9DT05GLAorCQkubGluZQkJPSAwLAorCX0KK307CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0tTODY5NV9DT05TT0xFCitzdGF0aWMgdm9pZCBrczg2OTVfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKK3sKKwl3aGlsZSAoIShVQVJUX0dFVF9MU1IocG9ydCkgJiBVUkxTX1VSVEhSRSkpCisJCWJhcnJpZXIoKTsKKworCVVBUlRfUFVUX0NIQVIocG9ydCwgY2gpOworfQorCitzdGF0aWMgdm9pZCBrczg2OTVfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVfaW50IGNvdW50KQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBrczg2OTV1YXJ0X3BvcnRzICsgY28tPmluZGV4OworCisJdWFydF9jb25zb2xlX3dyaXRlKHBvcnQsIHMsIGNvdW50LCBrczg2OTVfY29uc29sZV9wdXRjaGFyKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGtzODY5NV9jb25zb2xlX2dldF9vcHRpb25zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCAqYmF1ZCwgaW50ICpwYXJpdHksIGludCAqYml0cykKK3sKKwl1bnNpZ25lZCBpbnQgbGNyOworCisJbGNyID0gVUFSVF9HRVRfTENSKHBvcnQpOworCisJc3dpdGNoIChsY3IgJiBVUkxDX1BBUklUWSkgeworCQljYXNlIFVSUEVfT0REOgorCQkJKnBhcml0eSA9ICdvJzsKKwkJCWJyZWFrOworCQljYXNlIFVSUEVfRVZFTjoKKwkJCSpwYXJpdHkgPSAnZSc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCSpwYXJpdHkgPSAnbic7CisJfQorCisJc3dpdGNoIChsY3IgJiBVUkxDX1VSQ0wpIHsKKwkJY2FzZSBVUkNMXzU6CisJCQkqYml0cyA9IDU7CisJCQlicmVhazsKKwkJY2FzZSBVUkNMXzY6CisJCQkqYml0cyA9IDY7CisJCQlicmVhazsKKwkJY2FzZSBVUkNMXzc6CisJCQkqYml0cyA9IDc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCSpiaXRzID0gODsKKwl9CisKKwkqYmF1ZCA9IHBvcnQtPnVhcnRjbGsgLyAoVUFSVF9HRVRfQlJEUihwb3J0KSAmIDB4MEZGRik7CisJKmJhdWQgLz0gMTY7CisJKmJhdWQgJj0gMHhGRkZGRkZGMDsKK30KKworc3RhdGljIGludCBfX2luaXQga3M4Njk1X2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisJaW50IGJhdWQgPSAxMTUyMDA7CisJaW50IGJpdHMgPSA4OworCWludCBwYXJpdHkgPSAnbic7CisJaW50IGZsb3cgPSAnbic7CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgYW4gaW52YWxpZCB1YXJ0IG51bWJlciBoYXMgYmVlbiBzcGVjaWZpZWQsIGFuZAorCSAqIGlmIHNvLCBzZWFyY2ggZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgcG9ydCB0aGF0IGRvZXMgaGF2ZQorCSAqIGNvbnNvbGUgc3VwcG9ydC4KKwkgKi8KKwlwb3J0ID0gdWFydF9nZXRfY29uc29sZShrczg2OTV1YXJ0X3BvcnRzLCBTRVJJQUxfS1M4Njk1X05SLCBjbyk7CisKKwlpZiAob3B0aW9ucykKKwkJdWFydF9wYXJzZV9vcHRpb25zKG9wdGlvbnMsICZiYXVkLCAmcGFyaXR5LCAmYml0cywgJmZsb3cpOworCWVsc2UKKwkJa3M4Njk1X2NvbnNvbGVfZ2V0X29wdGlvbnMocG9ydCwgJmJhdWQsICZwYXJpdHksICZiaXRzKTsKKworCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKHBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOworfQorCitzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIGtzODY5NV9yZWc7CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBrczg2OTVfY29uc29sZSA9IHsKKwkubmFtZQkJPSBTRVJJQUxfS1M4Njk1X0RFVk5BTUUsCisJLndyaXRlCQk9IGtzODY5NV9jb25zb2xlX3dyaXRlLAorCS5kZXZpY2UJCT0gdWFydF9jb25zb2xlX2RldmljZSwKKwkuc2V0dXAJCT0ga3M4Njk1X2NvbnNvbGVfc2V0dXAsCisJLmZsYWdzCQk9IENPTl9QUklOVEJVRkZFUiwKKwkuaW5kZXgJCT0gLTEsCisJLmRhdGEJCT0gJmtzODY5NV9yZWcsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBrczg2OTVfY29uc29sZV9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfY29uc29sZSgma3M4Njk1X2NvbnNvbGUpOworCXJldHVybiAwOworfQorCitjb25zb2xlX2luaXRjYWxsKGtzODY5NV9jb25zb2xlX2luaXQpOworCisjZGVmaW5lIEtTODY5NV9DT05TT0xFCSZrczg2OTVfY29uc29sZQorI2Vsc2UKKyNkZWZpbmUgS1M4Njk1X0NPTlNPTEUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIga3M4Njk1X3JlZyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5kcml2ZXJfbmFtZQkJPSAic2VyaWFsX2tzODY5NSIsCisJLmRldl9uYW1lCQk9IFNFUklBTF9LUzg2OTVfREVWTkFNRSwKKwkubWFqb3IJCQk9IFNFUklBTF9LUzg2OTVfTUFKT1IsCisJLm1pbm9yCQkJPSBTRVJJQUxfS1M4Njk1X01JTk9SLAorCS5ucgkJCT0gU0VSSUFMX0tTODY5NV9OUiwKKwkuY29ucwkJCT0gS1M4Njk1X0NPTlNPTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBrczg2OTV1YXJ0X2luaXQodm9pZCkKK3sKKwlpbnQgaSwgcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiU2VyaWFsOiBNaWNyZWwgS1M4Njk1IFVBUlQgZHJpdmVyXG4iKTsKKworCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZrczg2OTVfcmVnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IFNFUklBTF9LUzg2OTVfTlI7IGkrKykKKwkJdWFydF9hZGRfb25lX3BvcnQoJmtzODY5NV9yZWcsICZrczg2OTV1YXJ0X3BvcnRzWzBdKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQga3M4Njk1dWFydF9leGl0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0VSSUFMX0tTODY5NV9OUjsgaSsrKQorCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgma3M4Njk1X3JlZywgJmtzODY5NXVhcnRfcG9ydHNbMF0pOworCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmtzODY5NV9yZWcpOworfQorCittb2R1bGVfaW5pdChrczg2OTV1YXJ0X2luaXQpOworbW9kdWxlX2V4aXQoa3M4Njk1dWFydF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJLUzg2OTUgc2VyaWFsIHBvcnQgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNaWNyZWwgSW5jLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKaW5kZXggNTA5YWNlNy4uMWRlYjU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCkBAIC0xNSwzMSArMTUsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogIFNlcmlhbCBkcml2ZXIgZm9yIFRYMzkyNy9UWDQ5MjcvVFg0OTI1L1RYNDkzOCBpbnRlcm5hbCBTSU8gY29udHJvbGxlcgotICoKLSAqICBSZXZpc2lvbiBIaXN0b3J5OgotICoJMC4zMAlJbml0aWFsIHJldmlzaW9uLiAoUmVuYW1lZCBmcm9tIHNlcmlhbF90eHg5MjcuYykKLSAqCTAuMzEJVXNlIHNhdmVfZmxhZ3MgaW5zdGVhZCBvZiBsb2NhbF9pcnFfc2F2ZS4KLSAqCTAuMzIJU3VwcG9ydCBTQ0xLLgotICoJMC4zMwlTd2l0Y2ggVFhYOV9UVFlfTkFNRSBieSBDT05GSUdfU0VSSUFMX1RYWDlfU1REU0VSSUFMLgotICoJCVN1cHBvcnQgVElPQ1NFUkdFVExTUi4KLSAqCTAuMzQJU3VwcG9ydCBzbG93IGJhdWRyYXRlLgotICoJMC40MAlNZXJnZSBjb2RlcyBmcm9tIG1haW5zdHJlYW0ga2VybmVsICgyLjQuMjIpLgotICoJMC40MQlGaXggY29uc29sZSBjaGVja2luZyBpbiByc19zaHV0ZG93bl9wb3J0KCkuCi0gKgkJRGlzYWJsZSBmbG93LWNvbnRyb2wgaW4gc2VyaWFsX2NvbnNvbGVfd3JpdGUoKS4KLSAqCTAuNDIJRml4IG1pbm9yIGNvbXBpbGVyIHdhcm5pbmcuCi0gKgkxLjAwCUtlcm5lbCAyLjYuICBDb252ZXJ0ZWQgdG8gbmV3IHNlcmlhbCBjb3JlIChiYXNlZCBvbiA4MjUwLmMpLgotICoJMS4wMQlTZXQgZmlmb3NpemUgdG8gbWFrZSB0eF9lbXByeSBjYWxsZWQgcHJvcGVybHkuCi0gKgkJVXNlIHN0YW5kYXJkIHVhcnRfZ2V0X2Rpdmlzb3IuCi0gKgkxLjAyCUNsZWFudXAuIChpbXBvcnQgODI1MC5jIGNoYW5nZXMpCi0gKgkxLjAzCUZpeCBsb3ctbGF0ZW5jeSBtb2RlLiAoaW1wb3J0IDgyNTAuYyBjaGFuZ2VzKQotICoJMS4wNAlSZW1vdmUgdXNhZ2Ugb2YgZGVwcmVjYXRlZCBmdW5jdGlvbnMsIGNsZWFudXAuCi0gKgkxLjA1CU1vcmUgc3RyaWN0IGNoZWNrIGluIHZlcmlmeV9wb3J0LiAgQ2xlYW51cC4KLSAqCTEuMDYJRG8gbm90IGluc2VydCBhIGNoYXIgY2F1c2VkIHByZXZpb3VzIG92ZXJydW4uCi0gKgkJRml4IHNvbWUgc3Bpbl9sb2Nrcy4KLSAqCQlEbyBub3QgY2FsbCB1YXJ0X2FkZF9vbmVfcG9ydCBmb3IgYWJzZW50IHBvcnRzLgotICoJMS4wNwlVc2UgQ09ORklHX1NFUklBTF9UWFg5X05SX1VBUlRTLiAgQ2xlYW51cC4KLSAqCTEuMDgJVXNlIHBsYXRmb3JtX2RldmljZS4KLSAqCQlGaXggYW5kIGNsZWFudXAgc3VzcGVuZC9yZXN1bWUvaW5pdGlhbGl6YXRpb24gY29kZXMuCiAgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQpAQCAtNjIsNyArMzcsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0YXRpYyBjaGFyICpzZXJpYWxfdmVyc2lvbiA9ICIxLjA4IjsKK3N0YXRpYyBjaGFyICpzZXJpYWxfdmVyc2lvbiA9ICIxLjA5IjsKIHN0YXRpYyBjaGFyICpzZXJpYWxfbmFtZSA9ICJUWDM5LzQ5IFNlcmlhbCBkcml2ZXIiOwogCiAjZGVmaW5lIFBBU1NfTElNSVQJMjU2CkBAIC03MCwxMyArNDUsMTQgQEAKICNpZiAhZGVmaW5lZChDT05GSUdfU0VSSUFMX1RYWDlfU1REU0VSSUFMKQogLyogInR0eVMiIGlzIHVzZWQgZm9yIHN0YW5kYXJkIHNlcmlhbCBkcml2ZXIgKi8KICNkZWZpbmUgVFhYOV9UVFlfTkFNRSAidHR5VFgiCi0jZGVmaW5lIFRYWDlfVFRZX01JTk9SX1NUQVJUCSg2NCArIDY0KQkvKiB0dHlUWDAoMTI4KSwgdHR5VFgxKDEyOSkgKi8KKyNkZWZpbmUgVFhYOV9UVFlfTUlOT1JfU1RBUlQJMTk2CisjZGVmaW5lIFRYWDlfVFRZX01BSk9SCTIwNAogI2Vsc2UKIC8qIGFjdHMgbGlrZSBzdGFuZGFyZCBzZXJpYWwgZHJpdmVyICovCiAjZGVmaW5lIFRYWDlfVFRZX05BTUUgInR0eVMiCiAjZGVmaW5lIFRYWDlfVFRZX01JTk9SX1NUQVJUCTY0Ci0jZW5kaWYKICNkZWZpbmUgVFhYOV9UVFlfTUFKT1IJVFRZX01BSk9SCisjZW5kaWYKIAogLyogZmxhZyBhbGlhc2VzICovCiAjZGVmaW5lIFVQRl9UWFg5X0hBVkVfQ1RTX0xJTkUJVVBGX0JVR0dZX1VBUlQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bmNvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bmNvcmUuYwppbmRleCBlMzVkOWFiLi5iNDViYTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3VuY29yZS5jCkBAIC0zMCw5ICszMCw5IEBACiBzdW5zZXJpYWxfY29uc29sZV90ZXJtaW9zKHN0cnVjdCBjb25zb2xlICpjb24pCiB7CiAJY2hhciBtb2RlWzE2XSwgYnVmWzE2XSwgKnM7Ci0JY2hhciAqbW9kZV9wcm9wID0gInR0eVgtbW9kZSI7Ci0JY2hhciAqY2RfcHJvcCA9ICJ0dHlYLWlnbm9yZS1jZCI7Ci0JY2hhciAqZHRyX3Byb3AgPSAidHR5WC1ydHMtZHRyLW9mZiI7CisJY2hhciBtb2RlX3Byb3BbXSA9ICJ0dHlYLW1vZGUiOworCWNoYXIgY2RfcHJvcFtdICAgPSAidHR5WC1pZ25vcmUtY2QiOworCWNoYXIgZHRyX3Byb3BbXSAgPSAidHR5WC1ydHMtZHRyLW9mZiI7CiAJY2hhciAqc3NwX2NvbnNvbGVfbW9kZXNfcHJvcCA9ICJzc3AtY29uc29sZS1tb2RlcyI7CiAJaW50IGJhdWQsIGJpdHMsIHN0b3AsIGNmbGFnOwogCWNoYXIgcGFyaXR5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3VuaHYuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMKaW5kZXggNDBkNDg1Ni4uOTY1NTdlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3VuaHYuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5odi5jCkBAIC0xLDYgKzEsNiBAQAogLyogc3VuaHYuYzogU2VyaWFsIGRyaXZlciBmb3IgU1VONFYgaHlwZXJ2aXNvciBjb25zb2xlLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTM1LDU3ICszNSw1MSBAQAogI2RlZmluZSBDT05fQlJFQUsJKChsb25nKS0xKQogI2RlZmluZSBDT05fSFVQCQkoKGxvbmcpLTIpCiAKLXN0YXRpYyBpbmxpbmUgbG9uZyBoeXBlcnZpc29yX2Nvbl9nZXRjaGFyKGxvbmcgKnN0YXR1cykKLXsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGZ1bmMgYXNtKCIlbzUiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzAgYXNtKCIlbzAiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzEgYXNtKCIlbzEiKTsKLQotCWZ1bmMgPSBIVl9GQVNUX0NPTlNfR0VUQ0hBUjsKLQlhcmcwID0gMDsKLQlhcmcxID0gMDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygidGEJJTYiCi0JCQkgICAgIDogIj0mciIgKGZ1bmMpLCAiPSZyIiAoYXJnMCksICI9JnIiIChhcmcxKQotCQkJICAgICA6ICIwIiAoZnVuYyksICIxIiAoYXJnMCksICIyIiAoYXJnMSksCi0JCQkgICAgICAgImkiIChIVl9GQVNUX1RSQVApKTsKLQotCSpzdGF0dXMgPSBhcmcwOwotCi0JcmV0dXJuIChsb25nKSBhcmcxOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgaHlwZXJ2aXNvcl9jb25fcHV0Y2hhcihsb25nIGNoKQotewotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgZnVuYyBhc20oIiVvNSIpOwotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgYXJnMCBhc20oIiVvMCIpOwotCi0JZnVuYyA9IEhWX0ZBU1RfQ09OU19QVVRDSEFSOwotCWFyZzAgPSBjaDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygidGEJJTQiCi0JCQkgICAgIDogIj0mciIgKGZ1bmMpLCAiPSZyIiAoYXJnMCkKLQkJCSAgICAgOiAiMCIgKGZ1bmMpLCAiMSIgKGFyZzApLCAiaSIgKEhWX0ZBU1RfVFJBUCkpOwotCi0JcmV0dXJuIChsb25nKSBhcmcwOwotfQotCiAjZGVmaW5lIElHTk9SRV9CUkVBSwkweDEKICNkZWZpbmUgSUdOT1JFX0FMTAkweDIKIAorc3RhdGljIGNoYXIgKmNvbl93cml0ZV9wYWdlOworc3RhdGljIGNoYXIgKmNvbl9yZWFkX3BhZ2U7CisKIHN0YXRpYyBpbnQgaHVuZ191cCA9IDA7CiAKLXN0YXRpYyBzdHJ1Y3QgdHR5X3N0cnVjdCAqcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgdHJhbnNtaXRfY2hhcnNfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgY2lyY19idWYgKnhtaXQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IE5VTEw7CisJd2hpbGUgKCF1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpIHsKKwkJbG9uZyBzdGF0dXMgPSBzdW40dl9jb25fcHV0Y2hhcih4bWl0LT5idWZbeG1pdC0+dGFpbF0pOworCisJCWlmIChzdGF0dXMgIT0gSFZfRU9LKQorCQkJYnJlYWs7CisKKwkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKwkJcG9ydC0+aWNvdW50LnR4Kys7CisJfQorfQorCitzdGF0aWMgdm9pZCB0cmFuc21pdF9jaGFyc193cml0ZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgY2lyY19idWYgKnhtaXQpCit7CisJd2hpbGUgKCF1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpIHsKKwkJdW5zaWduZWQgbG9uZyByYSA9IF9fcGEoeG1pdC0+YnVmICsgeG1pdC0+dGFpbCk7CisJCXVuc2lnbmVkIGxvbmcgbGVuLCBzdGF0dXMsIHNlbnQ7CisKKwkJbGVuID0gQ0lSQ19DTlRfVE9fRU5EKHhtaXQtPmhlYWQsIHhtaXQtPnRhaWwsCisJCQkJICAgICAgVUFSVF9YTUlUX1NJWkUpOworCQlzdGF0dXMgPSBzdW40dl9jb25fd3JpdGUocmEsIGxlbiwgJnNlbnQpOworCQlpZiAoc3RhdHVzICE9IEhWX0VPSykKKwkJCWJyZWFrOworCQl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyBzZW50KSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOworCQlwb3J0LT5pY291bnQudHggKz0gc2VudDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVjZWl2ZV9jaGFyc19nZXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CiAJaW50IHNhd19jb25zb2xlX2JyayA9IDA7CiAJaW50IGxpbWl0ID0gMTAwMDA7CiAKLQlpZiAocG9ydC0+aW5mbyAhPSBOVUxMKQkJLyogVW5vcGVuZWQgc2VyaWFsIGNvbnNvbGUgKi8KLQkJdHR5ID0gcG9ydC0+aW5mby0+dHR5OwotCiAJd2hpbGUgKGxpbWl0LS0gPiAwKSB7CiAJCWxvbmcgc3RhdHVzOwotCQlsb25nIGMgPSBoeXBlcnZpc29yX2Nvbl9nZXRjaGFyKCZzdGF0dXMpOwotCQl1bnNpZ25lZCBjaGFyIGZsYWc7CisJCWxvbmcgYyA9IHN1bjR2X2Nvbl9nZXRjaGFyKCZzdGF0dXMpOwogCiAJCWlmIChzdGF0dXMgPT0gSFZfRVdPVUxEQkxPQ0spCiAJCQlicmVhazsKQEAgLTExMCwyNyArMTA0LDkwIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWZsYWcgPSBUVFlfTk9STUFMOwogCQlwb3J0LT5pY291bnQucngrKzsKLQkJaWYgKGMgPT0gQ09OX0JSRUFLKSB7Ci0JCQlwb3J0LT5pY291bnQuYnJrKys7Ci0JCQlpZiAodWFydF9oYW5kbGVfYnJlYWsocG9ydCkpCi0JCQkJY29udGludWU7Ci0JCQlmbGFnID0gVFRZX0JSRUFLOwotCQl9CiAKIAkJaWYgKHVhcnRfaGFuZGxlX3N5c3JxX2NoYXIocG9ydCwgYykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoKHBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayAmIElHTk9SRV9BTEwpIHx8Ci0JCSAgICAoKHBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayAmIElHTk9SRV9CUkVBSykgJiYKLQkJICAgICAoYyA9PSBDT05fQlJFQUspKSkKLQkJCWNvbnRpbnVlOwotCi0JCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgYywgZmxhZyk7CisJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgYywgVFRZX05PUk1BTCk7CiAJfQogCi0JaWYgKHNhd19jb25zb2xlX2JyaykKKwlyZXR1cm4gc2F3X2NvbnNvbGVfYnJrOworfQorCitzdGF0aWMgaW50IHJlY2VpdmVfY2hhcnNfcmVhZChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCWludCBzYXdfY29uc29sZV9icmsgPSAwOworCWludCBsaW1pdCA9IDEwMDAwOworCisJd2hpbGUgKGxpbWl0LS0gPiAwKSB7CisJCXVuc2lnbmVkIGxvbmcgcmEgPSBfX3BhKGNvbl9yZWFkX3BhZ2UpOworCQl1bnNpZ25lZCBsb25nIGJ5dGVzX3JlYWQsIGk7CisJCWxvbmcgc3RhdCA9IHN1bjR2X2Nvbl9yZWFkKHJhLCBQQUdFX1NJWkUsICZieXRlc19yZWFkKTsKKworCQlpZiAoc3RhdCAhPSBIVl9FT0spIHsKKwkJCWJ5dGVzX3JlYWQgPSAwOworCisJCQlpZiAoc3RhdCA9PSBDT05fQlJFQUspIHsKKwkJCQlpZiAodWFydF9oYW5kbGVfYnJlYWsocG9ydCkpCisJCQkJCWNvbnRpbnVlOworCQkJCXNhd19jb25zb2xlX2JyayA9IDE7CisJCQkJKmNvbl9yZWFkX3BhZ2UgPSAwOworCQkJCWJ5dGVzX3JlYWQgPSAxOworCQkJfSBlbHNlIGlmIChzdGF0ID09IENPTl9IVVApIHsKKwkJCQlodW5nX3VwID0gMTsKKwkJCQl1YXJ0X2hhbmRsZV9kY2RfY2hhbmdlKHBvcnQsIDApOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQkvKiBIVl9FV09VTERCTE9DSywgZXRjLiAgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChodW5nX3VwKSB7CisJCQlodW5nX3VwID0gMDsKKwkJCXVhcnRfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgMSk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgYnl0ZXNfcmVhZDsgaSsrKQorCQkJdWFydF9oYW5kbGVfc3lzcnFfY2hhcihwb3J0LCBjb25fcmVhZF9wYWdlW2ldKTsKKworCQlpZiAodHR5ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlwb3J0LT5pY291bnQucnggKz0gYnl0ZXNfcmVhZDsKKworCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgY29uX3JlYWRfcGFnZSwgYnl0ZXNfcmVhZCk7CisJfQorCisJcmV0dXJuIHNhd19jb25zb2xlX2JyazsKK30KKworc3RydWN0IHN1bmh2X29wcyB7CisJdm9pZCAoKnRyYW5zbWl0X2NoYXJzKShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgY2lyY19idWYgKnhtaXQpOworCWludCAoKnJlY2VpdmVfY2hhcnMpKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworfTsKKworc3RhdGljIHN0cnVjdCBzdW5odl9vcHMgYnljaGFyX29wcyA9IHsKKwkudHJhbnNtaXRfY2hhcnMgPSB0cmFuc21pdF9jaGFyc19wdXRjaGFyLAorCS5yZWNlaXZlX2NoYXJzID0gcmVjZWl2ZV9jaGFyc19nZXRjaGFyLAorfTsKKworc3RhdGljIHN0cnVjdCBzdW5odl9vcHMgYnl3cml0ZV9vcHMgPSB7CisJLnRyYW5zbWl0X2NoYXJzID0gdHJhbnNtaXRfY2hhcnNfd3JpdGUsCisJLnJlY2VpdmVfY2hhcnMgPSByZWNlaXZlX2NoYXJzX3JlYWQsCit9OworCitzdGF0aWMgc3RydWN0IHN1bmh2X29wcyAqc3VuaHZfb3BzID0gJmJ5Y2hhcl9vcHM7CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X3N0cnVjdCAqcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBOVUxMOworCisJaWYgKHBvcnQtPmluZm8gIT0gTlVMTCkJCS8qIFVub3BlbmVkIHNlcmlhbCBjb25zb2xlICovCisJCXR0eSA9IHBvcnQtPmluZm8tPnR0eTsKKworCWlmIChzdW5odl9vcHMtPnJlY2VpdmVfY2hhcnMocG9ydCwgdHR5KSkKIAkJc3VuX2RvX2JyZWFrKCk7CiAKIAlyZXR1cm4gdHR5OwpAQCAtMTQ3LDE1ICsyMDQsNyBAQAogCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKHBvcnQpKQogCQlyZXR1cm47CiAKLQl3aGlsZSAoIXVhcnRfY2lyY19lbXB0eSh4bWl0KSkgewotCQlsb25nIHN0YXR1cyA9IGh5cGVydmlzb3JfY29uX3B1dGNoYXIoeG1pdC0+YnVmW3htaXQtPnRhaWxdKTsKLQotCQlpZiAoc3RhdHVzICE9IEhWX0VPSykKLQkJCWJyZWFrOwotCi0JCXhtaXQtPnRhaWwgPSAoeG1pdC0+dGFpbCArIDEpICYgKFVBUlRfWE1JVF9TSVpFIC0gMSk7Ci0JCXBvcnQtPmljb3VudC50eCsrOwotCX0KKwlzdW5odl9vcHMtPnRyYW5zbWl0X2NoYXJzKHBvcnQsIHhtaXQpOwogCiAJaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHhtaXQpIDwgV0FLRVVQX0NIQVJTKQogCQl1YXJ0X3dyaXRlX3dha2V1cChwb3J0KTsKQEAgLTIxMiw3ICsyNjEsNyBAQAogCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OwogCiAJd2hpbGUgKCF1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpIHsKLQkJbG9uZyBzdGF0dXMgPSBoeXBlcnZpc29yX2Nvbl9wdXRjaGFyKHhtaXQtPmJ1Zlt4bWl0LT50YWlsXSk7CisJCWxvbmcgc3RhdHVzID0gc3VuNHZfY29uX3B1dGNoYXIoeG1pdC0+YnVmW3htaXQtPnRhaWxdKTsKIAogCQlpZiAoc3RhdHVzICE9IEhWX0VPSykKIAkJCWJyZWFrOwpAQCAtMjMxLDkgKzI4MCwxMCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKIAl3aGlsZSAobGltaXQtLSA+IDApIHsKLQkJbG9uZyBzdGF0dXMgPSBoeXBlcnZpc29yX2Nvbl9wdXRjaGFyKGNoKTsKKwkJbG9uZyBzdGF0dXMgPSBzdW40dl9jb25fcHV0Y2hhcihjaCk7CiAJCWlmIChzdGF0dXMgPT0gSFZfRU9LKQogCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CkBAIC0yNTQsMTUgKzMwNCwxNSBAQAogewogCWlmIChicmVha19zdGF0ZSkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlpbnQgbGltaXQgPSAxMDAwMDAwOworCQlpbnQgbGltaXQgPSAxMDAwMDsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJCXdoaWxlIChsaW1pdC0tID4gMCkgewotCQkJbG9uZyBzdGF0dXMgPSBoeXBlcnZpc29yX2Nvbl9wdXRjaGFyKENPTl9CUkVBSyk7CisJCQlsb25nIHN0YXR1cyA9IHN1bjR2X2Nvbl9wdXRjaGFyKENPTl9CUkVBSyk7CiAJCQlpZiAoc3RhdHVzID09IEhWX0VPSykKIAkJCQlicmVhazsKLQkJCXVkZWxheSgyKTsKKwkJCXVkZWxheSgxKTsKIAkJfQogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKQEAgLTM1OSwzOCArNDA5LDk5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0ICpzdW5odl9wb3J0OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3VuaHZfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGNoYXIgYykKKy8qIENvcHkgJ3MnIGludG8gdGhlIGNvbl93cml0ZV9wYWdlLCBkZWNvZGluZyAiXG4iIGludG8KKyAqICJcclxuIiBhbG9uZyB0aGUgd2F5LiAgV2UgaGF2ZSB0byByZXR1cm4gdHdvIGxlbmd0aHMKKyAqIGJlY2F1c2UgdGhlIGNhbGxlciBuZWVkcyB0byBrbm93IGhvdyBtdWNoIHRvIGFkdmFuY2UKKyAqICdzJyBhbmQgYWxzbyBob3cgbWFueSBieXRlcyB0byBvdXRwdXQgdmlhIGNvbl93cml0ZV9wYWdlLgorICovCitzdGF0aWMgaW50IGZpbGxfY29uX3dyaXRlX3BhZ2UoY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IG4sCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqcGFnZV9ieXRlcykKIHsKKwljb25zdCBjaGFyICpvcmlnX3MgPSBzOworCWNoYXIgKnAgPSBjb25fd3JpdGVfcGFnZTsKKwlpbnQgbGVmdCA9IFBBR0VfU0laRTsKKworCXdoaWxlIChuLS0pIHsKKwkJaWYgKCpzID09ICdcbicpIHsKKwkJCWlmIChsZWZ0IDwgMikKKwkJCQlicmVhazsKKwkJCSpwKysgPSAnXHInOworCQkJbGVmdC0tOworCQl9IGVsc2UgaWYgKGxlZnQgPCAxKQorCQkJYnJlYWs7CisJCSpwKysgPSAqcysrOworCQlsZWZ0LS07CisJfQorCSpwYWdlX2J5dGVzID0gcCAtIGNvbl93cml0ZV9wYWdlOworCXJldHVybiBzIC0gb3JpZ19zOworfQorCitzdGF0aWMgdm9pZCBzdW5odl9jb25zb2xlX3dyaXRlX3BhZ2VkKHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIG4pCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN1bmh2X3BvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbGltaXQgPSAxMDAwMDAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAobiA+IDApIHsKKwkJdW5zaWduZWQgbG9uZyByYSA9IF9fcGEoY29uX3dyaXRlX3BhZ2UpOworCQl1bnNpZ25lZCBsb25nIHBhZ2VfYnl0ZXM7CisJCXVuc2lnbmVkIGludCBjcHkgPSBmaWxsX2Nvbl93cml0ZV9wYWdlKHMsIG4sCisJCQkJCQkgICAgICAgJnBhZ2VfYnl0ZXMpOwogCi0Jd2hpbGUgKGxpbWl0LS0gPiAwKSB7Ci0JCWxvbmcgc3RhdHVzID0gaHlwZXJ2aXNvcl9jb25fcHV0Y2hhcihjKTsKLQkJaWYgKHN0YXR1cyA9PSBIVl9FT0spCi0JCQlicmVhazsKLQkJdWRlbGF5KDIpOworCQluIC09IGNweTsKKwkJcyArPSBjcHk7CisJCXdoaWxlIChwYWdlX2J5dGVzID4gMCkgeworCQkJdW5zaWduZWQgbG9uZyB3cml0dGVuOworCQkJaW50IGxpbWl0ID0gMTAwMDAwMDsKKworCQkJd2hpbGUgKGxpbWl0LS0pIHsKKwkJCQl1bnNpZ25lZCBsb25nIHN0YXQ7CisKKwkJCQlzdGF0ID0gc3VuNHZfY29uX3dyaXRlKHJhLCBwYWdlX2J5dGVzLAorCQkJCQkJICAgICAgICZ3cml0dGVuKTsKKwkJCQlpZiAoc3RhdCA9PSBIVl9FT0spCisJCQkJCWJyZWFrOworCQkJCXVkZWxheSgxKTsKKwkJCX0KKwkJCWlmIChsaW1pdCA8PSAwKQorCQkJCWJyZWFrOworCQkJcGFnZV9ieXRlcyAtPSB3cml0dGVuOworCQkJcmEgKz0gd3JpdHRlbjsKKwkJfQogCX0KLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgc3VuaHZfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBuKQorc3RhdGljIGlubGluZSB2b2lkIHN1bmh2X2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBjaGFyIGMpCit7CisJaW50IGxpbWl0ID0gMTAwMDAwMDsKKworCXdoaWxlIChsaW1pdC0tID4gMCkgeworCQlsb25nIHN0YXR1cyA9IHN1bjR2X2Nvbl9wdXRjaGFyKGMpOworCQlpZiAoc3RhdHVzID09IEhWX0VPSykKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdW5odl9jb25zb2xlX3dyaXRlX2J5Y2hhcihzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBuKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdW5odl9wb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKIAkJaWYgKCpzID09ICdcbicpCiAJCQlzdW5odl9jb25zb2xlX3B1dGNoYXIocG9ydCwgJ1xyJyk7CiAJCXN1bmh2X2NvbnNvbGVfcHV0Y2hhcihwb3J0LCAqcysrKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbnNvbGUgc3VuaHZfY29uc29sZSA9IHsKIAkubmFtZQk9CSJ0dHlIViIsCi0JLndyaXRlCT0Jc3VuaHZfY29uc29sZV93cml0ZSwKKwkud3JpdGUJPQlzdW5odl9jb25zb2xlX3dyaXRlX2J5Y2hhciwKIAkuZGV2aWNlCT0JdWFydF9jb25zb2xlX2RldmljZSwKIAkuZmxhZ3MJPQlDT05fUFJJTlRCVUZGRVIsCiAJLmluZGV4CT0JLTEsCkBAIC00MTAsNiArNTIxLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGh2X3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGxvbmcgbWlub3I7CiAJaW50IGVycjsKIAogCWlmIChvcC0+aXJxc1swXSA9PSAweGZmZmZmZmZmKQpAQCAtNDE5LDYgKzUzMSwyMiBAQAogCWlmICh1bmxpa2VseSghcG9ydCkpCiAJCXJldHVybiAtRU5PTUVNOwogCisJbWlub3IgPSAxOworCWlmIChzdW40dl9odmFwaV9yZWdpc3RlcihIVl9HUlBfQ09SRSwgMSwgJm1pbm9yKSA9PSAwICYmCisJICAgIG1pbm9yID49IDEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJY29uX3dyaXRlX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY29uX3dyaXRlX3BhZ2UpCisJCQlnb3RvIG91dF9mcmVlX3BvcnQ7CisKKwkJY29uX3JlYWRfcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjb25fcmVhZF9wYWdlKQorCQkJZ290byBvdXRfZnJlZV9jb25fd3JpdGVfcGFnZTsKKworCQlzdW5odl9jb25zb2xlLndyaXRlID0gc3VuaHZfY29uc29sZV93cml0ZV9wYWdlZDsKKwkJc3VuaHZfb3BzID0gJmJ5d3JpdGVfb3BzOworCX0KKwogCXN1bmh2X3BvcnQgPSBwb3J0OwogCiAJcG9ydC0+bGluZSA9IDA7CkBAIC00MzcsNyArNTY1LDcgQEAKIAogCWVyciA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZzdW5odl9yZWcpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZyZWVfcG9ydDsKKwkJZ290byBvdXRfZnJlZV9jb25fcmVhZF9wYWdlOwogCiAJc3VuaHZfcmVnLnR0eV9kcml2ZXItPm5hbWVfYmFzZSA9IHN1bmh2X3JlZy5taW5vciAtIDY0OwogCXN1bnNlcmlhbF9jdXJyZW50X21pbm9yICs9IDE7CkBAIC00NjMsNiArNTkxLDEyIEBACiAJc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3IgLT0gMTsKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzdW5odl9yZWcpOwogCitvdXRfZnJlZV9jb25fcmVhZF9wYWdlOgorCWtmcmVlKGNvbl9yZWFkX3BhZ2UpOworCitvdXRfZnJlZV9jb25fd3JpdGVfcGFnZToKKwlrZnJlZShjb25fd3JpdGVfcGFnZSk7CisKIG91dF9mcmVlX3BvcnQ6CiAJa2ZyZWUocG9ydCk7CiAJc3VuaHZfcG9ydCA9IE5VTEw7CkBAIC00OTMsNiArNjI3LDEwIEBACiAJCS5uYW1lID0gImNvbnNvbGUiLAogCQkuY29tcGF0aWJsZSA9ICJxY24iLAogCX0sCisJeworCQkubmFtZSA9ICJjb25zb2xlIiwKKwkJLmNvbXBhdGlibGUgPSAiU1VOVyxzdW40di1jb25zb2xlIiwKKwl9LAogCXt9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGh2X21hdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCmluZGV4IGRhNzMyMDUuLjE1YjZlMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYwpAQCAtOTIsNiArOTIsOCBAQAogI2RlZmluZSBTVU5aSUxPR19GTEFHX1JFR1NfSEVMRAkJMHgwMDAwMDA0MAogI2RlZmluZSBTVU5aSUxPR19GTEFHX1RYX1NUT1BQRUQJMHgwMDAwMDA4MAogI2RlZmluZSBTVU5aSUxPR19GTEFHX1RYX0FDVElWRQkJMHgwMDAwMDEwMAorI2RlZmluZSBTVU5aSUxPR19GTEFHX0VTQ0MJCTB4MDAwMDAyMDAKKyNkZWZpbmUgU1VOWklMT0dfRkxBR19JU1JfSEFORExFUgkweDAwMDAwNDAwCiAKIAl1bnNpZ25lZCBpbnQgY2ZsYWc7CiAKQEAgLTE3NCw5ICsxNzYsMTEgQEAKIC8qIFRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBUWCBpcyBub3QgYnVzeS4gIFRoZSBVQVJUCiAgKiBwb3J0IGxvY2sgbXVzdCBiZSBoZWxkIGFuZCBsb2NhbCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogICovCi1zdGF0aWMgdm9pZCBfX2xvYWRfenNyZWdzKHN0cnVjdCB6aWxvZ19jaGFubmVsIF9faW9tZW0gKmNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgKnJlZ3MpCitzdGF0aWMgaW50IF9fbG9hZF96c3JlZ3Moc3RydWN0IHppbG9nX2NoYW5uZWwgX19pb21lbSAqY2hhbm5lbCwgdW5zaWduZWQgY2hhciAqcmVncykKIHsKIAlpbnQgaTsKKwlpbnQgZXNjYzsKKwl1bnNpZ25lZCBjaGFyIHIxNTsKIAogCS8qIExldCBwZW5kaW5nIHRyYW5zbWl0cyBmaW5pc2guICAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKQEAgLTIyOSwxMSArMjMzLDI1IEBACiAJd3JpdGVfenNyZWcoY2hhbm5lbCwgUjE0LCByZWdzW1IxNF0pOwogCiAJLyogRXh0ZXJuYWwgc3RhdHVzIGludGVycnVwdCBjb250cm9sLiAgKi8KLQl3cml0ZV96c3JlZyhjaGFubmVsLCBSMTUsIHJlZ3NbUjE1XSk7CisJd3JpdGVfenNyZWcoY2hhbm5lbCwgUjE1LCAocmVnc1tSMTVdIHwgV1I3cEVOKSAmIH5GSUZPRU4pOworCisJLyogRVNDQyBFeHRlbnNpb24gUmVnaXN0ZXIgKi8KKwlyMTUgPSByZWFkX3pzcmVnKGNoYW5uZWwsIFIxNSk7CisJaWYgKHIxNSAmIDB4MDEpCXsKKwkJd3JpdGVfenNyZWcoY2hhbm5lbCwgUjcsICByZWdzW1I3cF0pOworCisJCS8qIEV4dGVybmFsIHN0YXR1cyBpbnRlcnJ1cHQgYW5kIEZJRk8gY29udHJvbC4gICovCisJCXdyaXRlX3pzcmVnKGNoYW5uZWwsIFIxNSwgcmVnc1tSMTVdICYgfldSN3BFTik7CisJCWVzY2MgPSAxOworCX0gZWxzZSB7CisJCSAvKiBDbGVhciBGSUZPIGJpdCBjYXNlIGl0IGlzIGFuIGlzc3VlICovCisJCXJlZ3NbUjE1XSAmPSB+RklGT0VOOworCQllc2NjID0gMDsKKwl9CiAKIAkvKiBSZXNldCBleHRlcm5hbCBzdGF0dXMgaW50ZXJydXB0cy4gICovCi0Jd3JpdGVfenNyZWcoY2hhbm5lbCwgUjAsIFJFU19FWFRfSU5UKTsKLQl3cml0ZV96c3JlZyhjaGFubmVsLCBSMCwgUkVTX0VYVF9JTlQpOworCXdyaXRlX3pzcmVnKGNoYW5uZWwsIFIwLCBSRVNfRVhUX0lOVCk7IC8qIEZpcnN0IExhdGNoICAqLworCXdyaXRlX3pzcmVnKGNoYW5uZWwsIFIwLCBSRVNfRVhUX0lOVCk7IC8qIFNlY29uZCBMYXRjaCAqLwogCiAJLyogUmV3cml0ZSBSMy9SNSwgdGhpcyB0aW1lIHdpdGhvdXQgZW5hYmxlcyBtYXNrZWQuICAqLwogCXdyaXRlX3pzcmVnKGNoYW5uZWwsIFIzLCByZWdzW1IzXSk7CkBAIC0yNDEsNiArMjU5LDggQEAKIAogCS8qIFJld3JpdGUgUjEsIHRoaXMgdGltZSB3aXRob3V0IElSUSBlbmFibGVkIG1hc2tlZC4gICovCiAJd3JpdGVfenNyZWcoY2hhbm5lbCwgUjEsIHJlZ3NbUjFdKTsKKworCXJldHVybiBlc2NjOwogfQogCiAvKiBSZXByb2dyYW0gdGhlIFppbG9nIGNoYW5uZWwgSFcgcmVnaXN0ZXJzIHdpdGggdGhlIGNvcGllcyBmb3VuZCBpbiB0aGUKQEAgLTczMSw3ICs3NTEsNyBAQAogCQl1cC0+Y3VycmVnc1tSMTVdID0gbmV3X3JlZzsKIAogCQkvKiBOT1RFOiBOb3Qgc3ViamVjdCB0byAndHJhbnNtaXR0ZXIgYWN0aXZlJyBydWxlLiAgKi8gCi0JCXdyaXRlX3pzcmVnKGNoYW5uZWwsIFIxNSwgdXAtPmN1cnJlZ3NbUjE1XSk7CisJCXdyaXRlX3pzcmVnKGNoYW5uZWwsIFIxNSwgdXAtPmN1cnJlZ3NbUjE1XSAmIH5XUjdwRU4pOwogCX0KIH0KIApAQCAtODYxLDQ0ICs4ODEsNDQgQEAKIAl1cC0+Y3VycmVnc1tSMTRdID0gQlJTUkMgfCBCUkVOQUI7CiAKIAkvKiBDaGFyYWN0ZXIgc2l6ZSwgc3RvcCBiaXRzLCBhbmQgcGFyaXR5LiAqLwotCXVwLT5jdXJyZWdzWzNdICY9IH5SeE5fTUFTSzsKLQl1cC0+Y3VycmVnc1s1XSAmPSB+VHhOX01BU0s7CisJdXAtPmN1cnJlZ3NbUjNdICY9IH5SeE5fTUFTSzsKKwl1cC0+Y3VycmVnc1tSNV0gJj0gflR4Tl9NQVNLOwogCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewogCWNhc2UgQ1M1OgotCQl1cC0+Y3VycmVnc1szXSB8PSBSeDU7Ci0JCXVwLT5jdXJyZWdzWzVdIHw9IFR4NTsKKwkJdXAtPmN1cnJlZ3NbUjNdIHw9IFJ4NTsKKwkJdXAtPmN1cnJlZ3NbUjVdIHw9IFR4NTsKIAkJdXAtPnBhcml0eV9tYXNrID0gMHgxZjsKIAkJYnJlYWs7CiAJY2FzZSBDUzY6Ci0JCXVwLT5jdXJyZWdzWzNdIHw9IFJ4NjsKLQkJdXAtPmN1cnJlZ3NbNV0gfD0gVHg2OworCQl1cC0+Y3VycmVnc1tSM10gfD0gUng2OworCQl1cC0+Y3VycmVnc1tSNV0gfD0gVHg2OwogCQl1cC0+cGFyaXR5X21hc2sgPSAweDNmOwogCQlicmVhazsKIAljYXNlIENTNzoKLQkJdXAtPmN1cnJlZ3NbM10gfD0gUng3OwotCQl1cC0+Y3VycmVnc1s1XSB8PSBUeDc7CisJCXVwLT5jdXJyZWdzW1IzXSB8PSBSeDc7CisJCXVwLT5jdXJyZWdzW1I1XSB8PSBUeDc7CiAJCXVwLT5wYXJpdHlfbWFzayA9IDB4N2Y7CiAJCWJyZWFrOwogCWNhc2UgQ1M4OgogCWRlZmF1bHQ6Ci0JCXVwLT5jdXJyZWdzWzNdIHw9IFJ4ODsKLQkJdXAtPmN1cnJlZ3NbNV0gfD0gVHg4OworCQl1cC0+Y3VycmVnc1tSM10gfD0gUng4OworCQl1cC0+Y3VycmVnc1tSNV0gfD0gVHg4OwogCQl1cC0+cGFyaXR5X21hc2sgPSAweGZmOwogCQlicmVhazsKIAl9OwotCXVwLT5jdXJyZWdzWzRdICY9IH4weDBjOworCXVwLT5jdXJyZWdzW1I0XSAmPSB+MHgwYzsKIAlpZiAoY2ZsYWcgJiBDU1RPUEIpCi0JCXVwLT5jdXJyZWdzWzRdIHw9IFNCMjsKKwkJdXAtPmN1cnJlZ3NbUjRdIHw9IFNCMjsKIAllbHNlCi0JCXVwLT5jdXJyZWdzWzRdIHw9IFNCMTsKKwkJdXAtPmN1cnJlZ3NbUjRdIHw9IFNCMTsKIAlpZiAoY2ZsYWcgJiBQQVJFTkIpCi0JCXVwLT5jdXJyZWdzWzRdIHw9IFBBUl9FTkFCOworCQl1cC0+Y3VycmVnc1tSNF0gfD0gUEFSX0VOQUI7CiAJZWxzZQotCQl1cC0+Y3VycmVnc1s0XSAmPSB+UEFSX0VOQUI7CisJCXVwLT5jdXJyZWdzW1I0XSAmPSB+UEFSX0VOQUI7CiAJaWYgKCEoY2ZsYWcgJiBQQVJPREQpKQotCQl1cC0+Y3VycmVnc1s0XSB8PSBQQVJfRVZFTjsKKwkJdXAtPmN1cnJlZ3NbUjRdIHw9IFBBUl9FVkVOOwogCWVsc2UKLQkJdXAtPmN1cnJlZ3NbNF0gJj0gflBBUl9FVkVOOworCQl1cC0+Y3VycmVnc1tSNF0gJj0gflBBUl9FVkVOOwogCiAJdXAtPnBvcnQucmVhZF9zdGF0dXNfbWFzayA9IFJ4X09WUjsKIAlpZiAoaWZsYWcgJiBJTlBDSykKQEAgLTk1Miw3ICs5NzIsOSBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqc3Vuemlsb2dfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXJldHVybiAienMiOworCXN0cnVjdCB1YXJ0X3N1bnppbG9nX3BvcnQgKnVwID0gVUFSVF9aSUxPRyhwb3J0KTsKKworCXJldHVybiAodXAtPmZsYWdzICYgU1VOWklMT0dfRkxBR19FU0NDKSA/ICJ6cyAoRVNDQykiIDogInpzIjsKIH0KIAogLyogV2UgZG8gbm90IHJlcXVlc3QvcmVsZWFzZSBtYXBwaW5ncyBvZiB0aGUgcmVnaXN0ZXJzIGhlcmUsIHRoaXMKQEAgLTExNzAsNyArMTE5Miw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCi0JdXAtPmN1cnJlZ3NbUjE1XSA9IEJSS0lFOworCXVwLT5jdXJyZWdzW1IxNV0gfD0gQlJLSUU7CiAJc3Vuemlsb2dfY29udmVydF90b196cyh1cCwgY29uLT5jZmxhZywgMCwgYnJnKTsKIAogCXN1bnppbG9nX3NldF9tY3RybCgmdXAtPnBvcnQsIFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7CkBAIC0xMjE3LDcgKzEyMzksNyBAQAogI2RlZmluZSBTVU5aSUxPR19DT05TT0xFKCkJKE5VTEwpCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgX19pbml0IHN1bnppbG9nX2luaXRfa2JkbXMoc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCAqdXAsIGludCBjaGFubmVsKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHN1bnppbG9nX2luaXRfa2JkbXMoc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCAqdXAsIGludCBjaGFubmVsKQogewogCWludCBiYXVkLCBicmc7CiAKQEAgLTEyMjksNyArMTI1MSw3IEBACiAJCWJhdWQgPSA0ODAwOwogCX0KIAotCXVwLT5jdXJyZWdzW1IxNV0gPSBCUktJRTsKKwl1cC0+Y3VycmVnc1tSMTVdIHw9IEJSS0lFOwogCWJyZyA9IEJQU19UT19CUkcoYmF1ZCwgWlNfQ0xPQ0sgLyBaU19DTE9DS19ESVZJU09SKTsKIAlzdW56aWxvZ19jb252ZXJ0X3RvX3pzKHVwLCB1cC0+Y2ZsYWcsIDAsIGJyZyk7CiAJc3Vuemlsb2dfc2V0X21jdHJsKCZ1cC0+cG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKQEAgLTEyMzcsNyArMTI1OSw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSU8KLXN0YXRpYyB2b2lkIF9faW5pdCBzdW56aWxvZ19yZWdpc3Rlcl9zZXJpbyhzdHJ1Y3QgdWFydF9zdW56aWxvZ19wb3J0ICp1cCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzdW56aWxvZ19yZWdpc3Rlcl9zZXJpbyhzdHJ1Y3QgdWFydF9zdW56aWxvZ19wb3J0ICp1cCkKIHsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvID0gJnVwLT5zZXJpbzsKIApAQCAtMTI4Myw4ICsxMzA1LDE4IEBACiAKIAlpZiAodXAtPmZsYWdzICYgKFNVTlpJTE9HX0ZMQUdfQ09OU19LRVlCIHwKIAkJCSBTVU5aSUxPR19GTEFHX0NPTlNfTU9VU0UpKSB7CisJCXVwLT5jdXJyZWdzW1IxXSA9IEVYVF9JTlRfRU5BQiB8IElOVF9BTExfUnggfCBUeElOVF9FTkFCOworCQl1cC0+Y3VycmVnc1tSNF0gPSBQQVJfRVZFTiB8IFgxNkNMSyB8IFNCMTsKKwkJdXAtPmN1cnJlZ3NbUjNdID0gUnhFTkFCIHwgUng4OworCQl1cC0+Y3VycmVnc1tSNV0gPSBUeEVOQUIgfCBUeDg7CisJCXVwLT5jdXJyZWdzW1I2XSA9IDB4MDA7IC8qIFNETEMgQWRkcmVzcyAqLworCQl1cC0+Y3VycmVnc1tSN10gPSAweDdFOyAvKiBTRExDIEZsYWcgICAgKi8KKwkJdXAtPmN1cnJlZ3NbUjldID0gTlY7CisJCXVwLT5jdXJyZWdzW1I3cF0gPSAweDAwOwogCQlzdW56aWxvZ19pbml0X2tiZG1zKHVwLCB1cC0+cG9ydC5saW5lKTsKLQkJdXAtPmN1cnJlZ3NbUjldIHw9IChOViB8IE1JRSk7CisJCS8qIE9ubHkgZW5hYmxlIGludGVycnVwdHMgaWYgYW4gSVNSIGhhbmRsZXIgYXZhaWxhYmxlICovCisJCWlmICh1cC0+ZmxhZ3MgJiBTVU5aSUxPR19GTEFHX0lTUl9IQU5ETEVSKQorCQkJdXAtPmN1cnJlZ3NbUjldIHw9IE1JRTsKIAkJd3JpdGVfenNyZWcoY2hhbm5lbCwgUjksIHVwLT5jdXJyZWdzW1I5XSk7CiAJfSBlbHNlIHsKIAkJLyogTm9ybWFsIHNlcmlhbCBUVFkuICovCkBAIC0xMjkzLDcgKzEzMjUsOSBAQAogCQl1cC0+Y3VycmVnc1tSNF0gPSBQQVJfRVZFTiB8IFgxNkNMSyB8IFNCMTsKIAkJdXAtPmN1cnJlZ3NbUjNdID0gUnhFTkFCIHwgUng4OwogCQl1cC0+Y3VycmVnc1tSNV0gPSBUeEVOQUIgfCBUeDg7Ci0JCXVwLT5jdXJyZWdzW1I5XSA9IE5WIHwgTUlFOworCQl1cC0+Y3VycmVnc1tSNl0gPSAweDAwOyAvKiBTRExDIEFkZHJlc3MgKi8KKwkJdXAtPmN1cnJlZ3NbUjddID0gMHg3RTsgLyogU0RMQyBGbGFnICAgICovCisJCXVwLT5jdXJyZWdzW1I5XSA9IE5WOwogCQl1cC0+Y3VycmVnc1tSMTBdID0gTlJaOwogCQl1cC0+Y3VycmVnc1tSMTFdID0gVENCUiB8IFJDQlI7CiAJCWJhdWQgPSA5NjAwOwpAQCAtMTMwMSw3ICsxMzM1LDE0IEBACiAJCXVwLT5jdXJyZWdzW1IxMl0gPSAoYnJnICYgMHhmZik7CiAJCXVwLT5jdXJyZWdzW1IxM10gPSAoYnJnID4+IDgpICYgMHhmZjsKIAkJdXAtPmN1cnJlZ3NbUjE0XSA9IEJSU1JDIHwgQlJFTkFCOwotCQlfX2xvYWRfenNyZWdzKGNoYW5uZWwsIHVwLT5jdXJyZWdzKTsKKwkJdXAtPmN1cnJlZ3NbUjE1XSA9IEZJRk9FTjsgLyogVXNlIEZJRk8gaWYgb24gRVNDQyAqLworCQl1cC0+Y3VycmVnc1tSN3BdID0gVHhGSUZPX0xWTCB8IFJ4RklGT19MVkw7CisJCWlmIChfX2xvYWRfenNyZWdzKGNoYW5uZWwsIHVwLT5jdXJyZWdzKSkgeworCQkJdXAtPmZsYWdzIHw9IFNVTlpJTE9HX0ZMQUdfRVNDQzsKKwkJfQorCQkvKiBPbmx5IGVuYWJsZSBpbnRlcnJ1cHRzIGlmIGFuIElTUiBoYW5kbGVyIGF2YWlsYWJsZSAqLworCQlpZiAodXAtPmZsYWdzICYgU1VOWklMT0dfRkxBR19JU1JfSEFORExFUikKKwkJCXVwLT5jdXJyZWdzW1I5XSB8PSBNSUU7CiAJCXdyaXRlX3pzcmVnKGNoYW5uZWwsIFI5LCB1cC0+Y3VycmVnc1tSOV0pOwogCX0KIApAQCAtMTM5MCwxMiArMTQzMSwxNCBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBLZXlib2FyZCBhdCBNTUlPICVseCAoaXJxID0gJWQpICIKLQkJICAgICAgICJpcyBhIHpzXG4iLAotCQkgICAgICAgb3AtPmRldi5idXNfaWQsIHVwWzBdLnBvcnQubWFwYmFzZSwgb3AtPmlycXNbMF0pOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogTW91c2UgYXQgTU1JTyAlbHggKGlycSA9ICVkKSAiCi0JCSAgICAgICAiaXMgYSB6c1xuIiwKLQkJICAgICAgIG9wLT5kZXYuYnVzX2lkLCB1cFsxXS5wb3J0Lm1hcGJhc2UsIG9wLT5pcnFzWzBdKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEtleWJvYXJkIGF0IE1NSU8gMHglbHggKGlycSA9ICVkKSAiCisJCSAgICAgICAiaXMgYSAlc1xuIiwKKwkJICAgICAgIG9wLT5kZXYuYnVzX2lkLCB1cFswXS5wb3J0Lm1hcGJhc2UsIG9wLT5pcnFzWzBdLAorCQkgICAgICAgc3Vuemlsb2dfdHlwZSAoJnVwWzBdLnBvcnQpKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1vdXNlIGF0IE1NSU8gMHglbHggKGlycSA9ICVkKSAiCisJCSAgICAgICAiaXMgYSAlc1xuIiwKKwkJICAgICAgIG9wLT5kZXYuYnVzX2lkLCB1cFsxXS5wb3J0Lm1hcGJhc2UsIG9wLT5pcnFzWzBdLAorCQkgICAgICAgc3Vuemlsb2dfdHlwZSAoJnVwWzFdLnBvcnQpKTsKIAl9CiAKIAlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsICZ1cFswXSk7CkBAIC0xNDg3LDEwICsxNTMwLDIzIEBACiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfdWFydDsKIAogCWlmICh6aWxvZ19pcnEgIT0gLTEpIHsKKwkJc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCAqdXAgPSBzdW56aWxvZ19pcnFfY2hhaW47CiAJCWVyciA9IHJlcXVlc3RfaXJxKHppbG9nX2lycSwgc3Vuemlsb2dfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkgICJ6cyIsIHN1bnppbG9nX2lycV9jaGFpbik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF91bnJlZ2lzdGVyX2RyaXZlcjsKKworCQkvKiBFbmFibGUgSW50ZXJydXB0cyAqLworCQl3aGlsZSAodXApIHsKKwkJCXN0cnVjdCB6aWxvZ19jaGFubmVsIF9faW9tZW0gKmNoYW5uZWw7CisKKwkJCS8qIHByaW50ayAoS0VSTl9JTkZPICJFbmFibGUgSVJRIGZvciBaSUxPRyBIYXJkd2FyZSAlcFxuIiwgdXApOyAqLworCQkJY2hhbm5lbCAgICAgICAgICA9IFpJTE9HX0NIQU5ORUxfRlJPTV9QT1JUKCZ1cC0+cG9ydCk7CisJCQl1cC0+ZmxhZ3MgICAgICAgfD0gU1VOWklMT0dfRkxBR19JU1JfSEFORExFUjsKKwkJCXVwLT5jdXJyZWdzW1I5XSB8PSBNSUU7CisJCQl3cml0ZV96c3JlZyhjaGFubmVsLCBSOSwgdXAtPmN1cnJlZ3NbUjldKTsKKwkJCXVwID0gdXAtPm5leHQ7CisJCX0KIAl9CiAKIG91dDoKQEAgLTE1MTUsNiArMTU3MSwyMCBAQAogCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZ6c19kcml2ZXIpOwogCiAJaWYgKHppbG9nX2lycSAhPSAtMSkgeworCQlzdHJ1Y3QgdWFydF9zdW56aWxvZ19wb3J0ICp1cCA9IHN1bnppbG9nX2lycV9jaGFpbjsKKworCQkvKiBEaXNhYmxlIEludGVycnVwdHMgKi8KKwkJd2hpbGUgKHVwKSB7CisJCQlzdHJ1Y3Qgemlsb2dfY2hhbm5lbCBfX2lvbWVtICpjaGFubmVsOworCisJCQkvKiBwcmludGsgKEtFUk5fSU5GTyAiRGlzYWJsZSBJUlEgZm9yIFpJTE9HIEhhcmR3YXJlICVwXG4iLCB1cCk7ICovCisJCQljaGFubmVsICAgICAgICAgID0gWklMT0dfQ0hBTk5FTF9GUk9NX1BPUlQoJnVwLT5wb3J0KTsKKwkJCXVwLT5mbGFncyAgICAgICAmPSB+U1VOWklMT0dfRkxBR19JU1JfSEFORExFUjsKKwkJCXVwLT5jdXJyZWdzW1I5XSAmPSB+TUlFOworCQkJd3JpdGVfenNyZWcoY2hhbm5lbCwgUjksIHVwLT5jdXJyZWdzW1I5XSk7CisJCQl1cCA9IHVwLT5uZXh0OworCQl9CisKIAkJZnJlZV9pcnEoemlsb2dfaXJxLCBzdW56aWxvZ19pcnFfY2hhaW4pOwogCQl6aWxvZ19pcnEgPSAtMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5oIGIvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuaAppbmRleCA3OTM5YjZkLi41ZGVjN2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmgKQEAgLTEzLDcgKzEzLDggQEAKIAlzdHJ1Y3Qgemlsb2dfY2hhbm5lbCBjaGFubmVsQTsKIH07CiAKLSNkZWZpbmUgTlVNX1pTUkVHUyAgICAxNgorI2RlZmluZQlOVU1fWlNSRUdTCTE3CisjZGVmaW5lCVI3cAkJMTYgLyogV3JpdHRlbiBhcyBSNyB3aXRoIFAxNSBiaXQgMCBzZXQgKi8KIAogLyogQ29udmVyc2lvbiByb3V0aW5lcyB0by9mcm9tIGJyZyB0aW1lIGNvbnN0YW50cyBmcm9tL3RvIGJpdHMKICAqIHBlciBzZWNvbmQuCkBAIC0xMjcsNiArMTI4LDE1IEBACiAKIC8qIFdyaXRlIFJlZ2lzdGVyIDcgKFN5bmMgYml0cyA4LTE1L1NETEMgMDExMTExMTApICovCiAKKy8qIFdyaXRlIFJlZ2lzdGVyIDcnIChFU0NDIE9ubHkpICovCisjZGVmaW5lCUFVVE9fVHhGTEFHCTEJLyogQXV0b21hdGljIFR4IFNETEMgRmxhZyAqLworI2RlZmluZQlBVVRPX0VPTV9SU1QJMgkvKiBBdXRvbWF0aWMgRU9NIFJlc2V0ICovCisjZGVmaW5lCUFVVE9uUlRTCTQJLyogQXV0b21hdGljIC9SVFMgcGluIGRlYWN0aXZhdGlvbiAqLworI2RlZmluZQlSeEZJRk9fTFZMCTgJLyogUmVjZWl2ZSBGSUZPIGludGVycnVwdCBsZXZlbCAqLworI2RlZmluZQluRFRSblJFUQkweDEwCS8qIC9EVFIvUkVRIHRpbWluZyAqLworI2RlZmluZQlUeEZJRk9fTFZMCTB4MjAJLyogVHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQgbGV2ZWwgKi8KKyNkZWZpbmUJRVhUX1JEX0VOCTB4NDAJLyogRXh0ZW5kZWQgcmVhZCByZWdpc3RlciBlbmFibGUgKi8KKwogLyogV3JpdGUgUmVnaXN0ZXIgOCAodHJhbnNtaXQgYnVmZmVyKSAqLwogCiAvKiBXcml0ZSBSZWdpc3RlciA5IChNYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wpICovCkBAIC0xMzUsNiArMTQ1LDcgQEAKICNkZWZpbmUJRExDCTQJLyogRGlzYWJsZSBMb3dlciBDaGFpbiAqLwogI2RlZmluZQlNSUUJOAkvKiBNYXN0ZXIgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZQlTVEFUSEkJMHgxMAkvKiBTdGF0dXMgaGlnaCAqLworI2RlZmluZQlTV0lBQ0sgIDB4MjAgICAgLyogU29mdHdhcmUgSW50ZXJydXB0IEFjayAobm90IG9uIE5NT1MpICovCiAjZGVmaW5lCU5PUkVTRVQJMAkvKiBObyByZXNldCBvbiB3cml0ZSB0byBSOSAqLwogI2RlZmluZQlDSFJCCTB4NDAJLyogUmVzZXQgY2hhbm5lbCBCICovCiAjZGVmaW5lCUNIUkEJMHg4MAkvKiBSZXNldCBjaGFubmVsIEEgKi8KQEAgLTE4Nyw3ICsxOTgsOSBAQAogI2RlZmluZQlTTlJaSQkweGUwCS8qIFNldCBOUlpJIG1vZGUgKi8KIAogLyogV3JpdGUgUmVnaXN0ZXIgMTUgKGV4dGVybmFsL3N0YXR1cyBpbnRlcnJ1cHQgY29udHJvbCkgKi8KKyNkZWZpbmUJV1I3cEVOCTEJLyogV1I3JyBFbmFibGUgKEVTQ0Mgb25seSkgKi8KICNkZWZpbmUJWkNJRQkyCS8qIFplcm8gY291bnQgSUUgKi8KKyNkZWZpbmUJRklGT0VOCTQJLyogRklGTyBFbmFibGUgKEVTQ0Mgb25seSkgKi8KICNkZWZpbmUJRENESUUJOAkvKiBEQ0QgSUUgKi8KICNkZWZpbmUJU1lOQ0lFCTB4MTAJLyogU3luYy9odW50IElFICovCiAjZGVmaW5lCUNUU0lFCTB4MjAJLyogQ1RTIElFICovCkBAIC0yNDEsNiArMjU0LDEwIEBACiAjZGVmaW5lCUNIQVR4SVAJMHgxMAkJLyogQ2hhbm5lbCBBIFR4IElQICovCiAjZGVmaW5lCUNIQVJ4SVAJMHgyMAkJLyogQ2hhbm5lbCBBIFJ4IElQICovCiAKKy8qIFJlYWQgUmVnaXN0ZXIgNiAoTFNCIGZyYW1lIGJ5dGUgY291bnQgW05vdCBvbiBOTU9TXSkgKi8KKworLyogUmVhZCBSZWdpc3RlciA3IChNU0IgZnJhbWUgYnl0ZSBjb3VudCBhbmQgRklGTyBzdGF0dXMgW05vdCBvbiBOTU9TXSkgKi8KKwogLyogUmVhZCBSZWdpc3RlciA4IChyZWNlaXZlIGRhdGEgcmVnaXN0ZXIpICovCiAKIC8qIFJlYWQgUmVnaXN0ZXIgMTAgIChtaXNjIHN0YXR1cyBiaXRzKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvS2NvbmZpZyBiL2RyaXZlcnMvc3BpL0tjb25maWcKaW5kZXggNGEwMTJkOWEuLjVlM2Y3NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9zcGkvS2NvbmZpZwpAQCAtNiw2ICs2LDcgQEAKICMgZnVsbHkgYXBwcm9wcmlhdGUgdGhlcmUsIHNvIGl0J2QgbmVlZCBzb21lIHRob3VnaHQgdG8gZG8gd2VsbC4KICMKIG1lbnUgIlNQSSBzdXBwb3J0IgorCWRlcGVuZHMgb24gSEFTX0lPTUVNCiAKIGNvbmZpZyBTUEkKIAlib29sICJTUEkgc3VwcG9ydCIKQEAgLTY0LDYgKzY1LDE3IEBACiAJaGVscAogCSAgVGhpcyBpcyB0aGUgU1BJIGNvbnRyb2xsZXIgbWFzdGVyIGRyaXZlciBmb3IgQmxhY2tmaW4gNXh4IHByb2Nlc3Nvci4KIAorY29uZmlnIFNQSV9BVTE1NTAKKwl0cmlzdGF0ZSAiQXUxNTUwL0F1MTJ4MCBTUEkgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgKFNPQ19BVTE1NTAgfHwgU09DX0FVMTIwMCkgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFNQSV9CSVRCQU5HCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlCisJICBBdTE1NTAgU1BJIGNvbnRyb2xsZXIgKG1heSBhbHNvIHdvcmsgd2l0aCBBdTEyMDAsQXUxMjEwLEF1MTI1MCkuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGF1MTU1MF9zcGkuCisKIGNvbmZpZyBTUElfQklUQkFORwogCXRyaXN0YXRlICJCaXRiYW5naW5nIFNQSSBtYXN0ZXIiCiAJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIEVYUEVSSU1FTlRBTApAQCAtOTUsNiArMTA3LDEzIEBACiAJICBUaGlzIGVuYWJsZXMgdXNpbmcgdGhlIEZyZWVzY2FsZSBpTVggU1BJIGNvbnRyb2xsZXIgaW4gbWFzdGVyCiAJICBtb2RlLgogCitjb25maWcgU1BJX01QQzUyeHhfUFNDCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBNUEM1Mnh4IFBTQyBTUEkgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgUFBDX01QQzUyeHggJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHVzaW5nIHRoZSBGcmVlc2NhbGUgTVBDNTJ4eCBQcm9ncmFtbWFibGUgU2VyaWFsCisJICBDb250cm9sbGVyIGluIG1hc3RlciBTUEkgbW9kZS4KKwogY29uZmlnIFNQSV9NUEM4M3h4CiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBNUEM4M3h4IFNQSSBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gU1BJX01BU1RFUiAmJiBQUENfODN4eCAmJiBFWFBFUklNRU5UQUwKQEAgLTE1OSw2ICsxNzgsMTUgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGF0MjUuCiAKK2NvbmZpZyBTUElfU1BJREVWCisJdHJpc3RhdGUgIlVzZXIgbW9kZSBTUEkgZGV2aWNlIGRyaXZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gU1BJX01BU1RFUiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBUaGlzIHN1cHBvcnRzIHVzZXIgbW9kZSBTUEkgcHJvdG9jb2wgZHJpdmVycy4KKworCSAgTm90ZSB0aGF0IHRoaXMgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGlzIEVYUEVSSU1FTlRBTAorCSAgYW5kIGhlbmNlIFNVQkpFQ1QgVE8gQ0hBTkdFIFdJVEhPVVQgTk9USUNFIHdoaWxlIGl0IHN0YWJpbGl6ZXMuCisKICMKICMgQWRkIG5ldyBTUEkgcHJvdG9jb2wgbWFzdGVycyBpbiBhbHBoYWJldGljYWwgb3JkZXIgYWJvdmUgdGhpcyBsaW5lCiAjCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCmluZGV4IGE5NWFkZTguLjU3ODhkODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCkBAIC0xNCwxMCArMTQsMTIgQEAKIG9iai0kKENPTkZJR19TUElfQVRNRUwpCQkJKz0gYXRtZWxfc3BpLm8KIG9iai0kKENPTkZJR19TUElfQkZJTikJCQkrPSBzcGlfYmZpbjV4eC5vCiBvYmotJChDT05GSUdfU1BJX0JJVEJBTkcpCQkrPSBzcGlfYml0YmFuZy5vCitvYmotJChDT05GSUdfU1BJX0FVMTU1MCkJCSs9IGF1MTU1MF9zcGkubwogb2JqLSQoQ09ORklHX1NQSV9CVVRURVJGTFkpCQkrPSBzcGlfYnV0dGVyZmx5Lm8KIG9iai0kKENPTkZJR19TUElfSU1YKQkJCSs9IHNwaV9pbXgubwogb2JqLSQoQ09ORklHX1NQSV9QWEEyWFgpCQkrPSBweGEyeHhfc3BpLm8KIG9iai0kKENPTkZJR19TUElfT01BUF9VV0lSRSkJCSs9IG9tYXBfdXdpcmUubworb2JqLSQoQ09ORklHX1NQSV9NUEM1Mnh4X1BTQykJCSs9IG1wYzUyeHhfcHNjX3NwaS5vCiBvYmotJChDT05GSUdfU1BJX01QQzgzeHgpCQkrPSBzcGlfbXBjODN4eC5vCiBvYmotJChDT05GSUdfU1BJX1MzQzI0WFhfR1BJTykJCSs9IHNwaV9zM2MyNHh4X2dwaW8ubwogb2JqLSQoQ09ORklHX1NQSV9TM0MyNFhYKQkJKz0gc3BpX3MzYzI0eHgubwpAQCAtMjUsNiArMjcsNyBAQAogCiAjIFNQSSBwcm90b2NvbCBkcml2ZXJzIChkZXZpY2UvbGluayBvbiBidXMpCiBvYmotJChDT05GSUdfU1BJX0FUMjUpCQkrPSBhdDI1Lm8KK29iai0kKENPTkZJR19TUElfU1BJREVWKQkrPSBzcGlkZXYubwogIyAJLi4uIGFkZCBhYm92ZSB0aGlzIGxpbmUgLi4uCiAKICMgU1BJIHNsYXZlIGNvbnRyb2xsZXIgZHJpdmVycyAodXBzdHJlYW0gbGluaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKaW5kZXggNjZlN2JjOS4uOGIyNjAxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKQEAgLTIyLDEwICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9BVDkxCiAjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgImF0bWVsX3NwaS5oIgogCkBAIC0xMTYsMTYgKzExMywxNiBAQAogCiAJbGVuID0gYXMtPnJlbWFpbmluZ19ieXRlczsKIAotCXR4X2RtYSA9IHhmZXItPnR4X2RtYTsKLQlyeF9kbWEgPSB4ZmVyLT5yeF9kbWE7CisJdHhfZG1hID0geGZlci0+dHhfZG1hICsgeGZlci0+bGVuIC0gbGVuOworCXJ4X2RtYSA9IHhmZXItPnJ4X2RtYSArIHhmZXItPmxlbiAtIGxlbjsKIAogCS8qIHVzZSBzY3JhdGNoIGJ1ZmZlciBvbmx5IHdoZW4gcnggb3IgdHggZGF0YSBpcyB1bnNwZWNpZmllZCAqLwotCWlmIChyeF9kbWEgPT0gSU5WQUxJRF9ETUFfQUREUkVTUykgeworCWlmICgheGZlci0+cnhfYnVmKSB7CiAJCXJ4X2RtYSA9IGFzLT5idWZmZXJfZG1hOwogCQlpZiAobGVuID4gQlVGRkVSX1NJWkUpCiAJCQlsZW4gPSBCVUZGRVJfU0laRTsKIAl9Ci0JaWYgKHR4X2RtYSA9PSBJTlZBTElEX0RNQV9BRERSRVNTKSB7CisJaWYgKCF4ZmVyLT50eF9idWYpIHsKIAkJdHhfZG1hID0gYXMtPmJ1ZmZlcl9kbWE7CiAJCWlmIChsZW4gPiBCVUZGRVJfU0laRSkKIAkJCWxlbiA9IEJVRkZFUl9TSVpFOwpAQCAtNTUyLDEwICs1NDksOCBAQAogCQlnb3RvIG91dF9mcmVlX2J1ZmZlcjsKIAlhcy0+aXJxID0gaXJxOwogCWFzLT5jbGsgPSBjbGs7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MQogCWlmICghY3B1X2lzX2F0OTFybTkyMDAoKSkKIAkJYXMtPm5ld18xID0gMTsKLSNlbmRpZgogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdG1lbF9zcGlfaW50ZXJydXB0LCAwLAogCQkJcGRldi0+ZGV2LmJ1c19pZCwgbWFzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYyBiL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTJiMWFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvYXUxNTUwX3NwaS5jCkBAIC0wLDAgKzEsOTc0IEBACisvKgorICogYXUxNTUwX3NwaS5jIC0gYXUxNTUwIHBzYyBzcGkgY29udHJvbGxlciBkcml2ZXIKKyAqIG1heSB3b3JrIGFsc28gd2l0aCBhdTEyMDAsIGF1MTIxMCwgYXUxMjUwCisgKiB3aWxsIG5vdCB3b3JrIG9uIGF1MTAwMCwgYXUxMTAwIGFuZCBhdTE1MDAgKG5vIGZ1bGwgc3BpIGNvbnRyb2xsZXIgdGhlcmUpCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEFUUk9OIGVsZWN0cm9uaWMgR21iSAorICogQXV0aG9yOiBKYW4gTmlraXRlbmtvIDxqYW4ubmlraXRlbmtvQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxNTUwX3NwaS5oPgorCitzdGF0aWMgdW5zaWduZWQgdXNlZG1hID0gMTsKK21vZHVsZV9wYXJhbSh1c2VkbWEsIHVpbnQsIDA2NDQpOworCisvKgorI2RlZmluZSBBVTE1NTBfU1BJX0RFQlVHX0xPT1BCQUNLCisqLworCisKKyNkZWZpbmUgQVUxNTUwX1NQSV9EQkRNQV9ERVNDUklQVE9SUyAxCisjZGVmaW5lIEFVMTU1MF9TUElfRE1BX1JYVE1QX01JTlNJWkUgMjA0OFUKKworc3RydWN0IGF1MTU1MF9zcGkgeworCXN0cnVjdCBzcGlfYml0YmFuZyBiaXRiYW5nOworCisJdm9sYXRpbGUgcHNjX3NwaV90IF9faW9tZW0gKnJlZ3M7CisJaW50IGlycTsKKwl1bnNpZ25lZCBmcmVxX21heDsKKwl1bnNpZ25lZCBmcmVxX21pbjsKKworCXVuc2lnbmVkIGxlbjsKKwl1bnNpZ25lZCB0eF9jb3VudDsKKwl1bnNpZ25lZCByeF9jb3VudDsKKwljb25zdCB1OCAqdHg7CisJdTggKnJ4OworCisJdm9pZCAoKnJ4X3dvcmQpKHN0cnVjdCBhdTE1NTBfc3BpICpodyk7CisJdm9pZCAoKnR4X3dvcmQpKHN0cnVjdCBhdTE1NTBfc3BpICpodyk7CisJaW50ICgqdHhyeF9idWZzKShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KTsKKwlpcnFyZXR1cm5fdCAoKmlycV9jYWxsYmFjaykoc3RydWN0IGF1MTU1MF9zcGkgKmh3KTsKKworCXN0cnVjdCBjb21wbGV0aW9uIG1hc3Rlcl9kb25lOworCisJdW5zaWduZWQgdXNlZG1hOworCXUzMiBkbWFfdHhfaWQ7CisJdTMyIGRtYV9yeF9pZDsKKwl1MzIgZG1hX3R4X2NoOworCXUzMiBkbWFfcnhfY2g7CisKKwl1OCAqZG1hX3J4X3RtcGJ1ZjsKKwl1bnNpZ25lZCBkbWFfcnhfdG1wYnVmX3NpemU7CisJdTMyIGRtYV9yeF90bXBidWZfYWRkcjsKKworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBhdTE1NTBfc3BpX2luZm8gKnBkYXRhOworfTsKKworCisvKiB3ZSB1c2UgYW4gOC1iaXQgbWVtb3J5IGRldmljZSBmb3IgZG1hIHRyYW5zZmVycyB0by9mcm9tIHNwaSBmaWZvICovCitzdGF0aWMgZGJkZXZfdGFiX3QgYXUxNTUwX3NwaV9tZW1fZGJkZXYgPQoreworCS5kZXZfaWQJCQk9IERCRE1BX01FTV9DSEFOLAorCS5kZXZfZmxhZ3MJCT0gREVWX0ZMQUdTX0FOWVVTRXxERVZfRkxBR1NfU1lOQywKKwkuZGV2X3RzaXplCQk9IDAsCisJLmRldl9kZXZ3aWR0aAkJPSA4LAorCS5kZXZfcGh5c2FkZHIJCT0gMHgwMDAwMDAwMCwKKwkuZGV2X2ludGxldmVsCQk9IDAsCisJLmRldl9pbnRwb2xhcml0eQk9IDAKK307CisKK3N0YXRpYyB2b2lkIGF1MTU1MF9zcGlfYml0c19oYW5kbGVyc19zZXQoc3RydWN0IGF1MTU1MF9zcGkgKmh3LCBpbnQgYnB3KTsKKworCisvKioKKyAqICBjb21wdXRlIEJSRyBhbmQgRElWIGJpdHMgdG8gc2V0dXAgc3BpIGNsb2NrIGJhc2VkIG9uIG1haW4gaW5wdXQgY2xvY2sgcmF0ZQorICogIHRoYXQgd2FzIHNwZWNpZmllZCBpbiBwbGF0Zm9ybSBkYXRhIHN0cnVjdHVyZQorICogIGFjY29yZGluZyB0byBhdTE1NTAgZGF0YXNoZWV0OgorICogICAgcHNjX3RlbXBjbGsgPSBwc2NfbWFpbmNsayAvICgyIDw8IERJVikKKyAqICAgIHNwaWNsayA9IHBzY190ZW1wY2xrIC8gKDIgKiAoQlJHICsgMSkpCisgKiAgICBCUkcgdmFsaWQgcmFuZ2UgaXMgNC4uNjMKKyAqICAgIERJViB2YWxpZCByYW5nZSBpcyAwLi4zCisgKi8KK3N0YXRpYyB1MzIgYXUxNTUwX3NwaV9iYXVkY2ZnKHN0cnVjdCBhdTE1NTBfc3BpICpodywgdW5zaWduZWQgc3BlZWRfaHopCit7CisJdTMyIG1haW5jbGtfaHogPSBody0+cGRhdGEtPm1haW5jbGtfaHo7CisJdTMyIGRpdiwgYnJnOworCisJZm9yIChkaXYgPSAwOyBkaXYgPCA0OyBkaXYrKykgeworCQlicmcgPSBtYWluY2xrX2h6IC8gc3BlZWRfaHogLyAoNCA8PCBkaXYpOworCQkvKiBub3cgd2UgaGF2ZSBCUkcrMSBpbiBicmcsIHNvIGNvdW50IHdpdGggdGhhdCAqLworCQlpZiAoYnJnIDwgKDQgKyAxKSkgeworCQkJYnJnID0gKDQgKyAxKTsJLyogc3BlZWRfaHogdG9vIGJpZyAqLworCQkJYnJlYWs7CQkvKiBzZXQgbG93ZXN0IGJyZyAoZGl2IGlzID09IDApICovCisJCX0KKwkJaWYgKGJyZyA8PSAoNjMgKyAxKSkKKwkJCWJyZWFrOwkJLyogd2UgaGF2ZSB2YWxpZCBicmcgYW5kIGRpdiAqLworCX0KKwlpZiAoZGl2ID09IDQpIHsKKwkJZGl2ID0gMzsJCS8qIHNwZWVkX2h6IHRvbyBzbWFsbCAqLworCQlicmcgPSAoNjMgKyAxKTsJCS8qIHNldCBoaWdoZXN0IGJyZyBhbmQgZGl2ICovCisJfQorCWJyZy0tOworCXJldHVybiBQU0NfU1BJQ0ZHX1NFVF9CQVVEKGJyZykgfCBQU0NfU1BJQ0ZHX1NFVF9ESVYoZGl2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF1MTU1MF9zcGlfbWFza19hY2tfYWxsKHN0cnVjdCBhdTE1NTBfc3BpICpodykKK3sKKwlody0+cmVncy0+cHNjX3NwaW1zayA9CisJCSAgUFNDX1NQSU1TS19NTSB8IFBTQ19TUElNU0tfUlIgfCBQU0NfU1BJTVNLX1JPCisJCXwgUFNDX1NQSU1TS19SVSB8IFBTQ19TUElNU0tfVFIgfCBQU0NfU1BJTVNLX1RPCisJCXwgUFNDX1NQSU1TS19UVSB8IFBTQ19TUElNU0tfU0QgfCBQU0NfU1BJTVNLX01EOworCWF1X3N5bmMoKTsKKworCWh3LT5yZWdzLT5wc2Nfc3BpZXZlbnQgPQorCQkgIFBTQ19TUElFVk5UX01NIHwgUFNDX1NQSUVWTlRfUlIgfCBQU0NfU1BJRVZOVF9STworCQl8IFBTQ19TUElFVk5UX1JVIHwgUFNDX1NQSUVWTlRfVFIgfCBQU0NfU1BJRVZOVF9UTworCQl8IFBTQ19TUElFVk5UX1RVIHwgUFNDX1NQSUVWTlRfU0QgfCBQU0NfU1BJRVZOVF9NRDsKKwlhdV9zeW5jKCk7Cit9CisKK3N0YXRpYyB2b2lkIGF1MTU1MF9zcGlfcmVzZXRfZmlmb3Moc3RydWN0IGF1MTU1MF9zcGkgKmh3KQoreworCXUzMiBwY3I7CisKKwlody0+cmVncy0+cHNjX3NwaXBjciA9IFBTQ19TUElQQ1JfUkMgfCBQU0NfU1BJUENSX1RDOworCWF1X3N5bmMoKTsKKwlkbyB7CisJCXBjciA9IGh3LT5yZWdzLT5wc2Nfc3BpcGNyOworCQlhdV9zeW5jKCk7CisJfSB3aGlsZSAocGNyICE9IDApOworfQorCisvKgorICogZG1hIHRyYW5zZmVycyBhcmUgdXNlZCBmb3IgdGhlIG1vc3QgY29tbW9uIHNwaSB3b3JkIHNpemUgb2YgOC1iaXRzCisgKiB3ZSBjYW5ub3QgZWFzaWx5IGNoYW5nZSBhbHJlYWR5IHNldCB1cCBkbWEgY2hhbm5lbHMnIHdpZHRoLCBzbyBpZiB3ZSB3YW50ZWQKKyAqIGRtYSBzdXBwb3J0IGZvciBtb3JlIHRoYW4gOC1iaXQgd29yZHMgKHVwIHRvIDI0IGJpdHMpLCB3ZSB3b3VsZCBuZWVkIHRvCisgKiBzZXR1cCBkbWEgY2hhbm5lbHMgZnJvbSBzY3JhdGNoIG9uIGVhY2ggc3BpIHRyYW5zZmVyLCBiYXNlZCBvbiBiaXRzX3Blcl93b3JkCisgKiBpbnN0ZWFkIHdlIGhhdmUgcHJlIHNldCB1cCA4IGJpdCBkbWEgY2hhbm5lbHMgc3VwcG9ydGluZyBzcGkgNCB0byA4IGJpdHMKKyAqIHRyYW5zZmVycywgYW5kIDkgdG8gMjQgYml0cyBzcGkgdHJhbnNmZXJzIHdpbGwgYmUgZG9uZSBpbiBwaW8gaXJxIGJhc2VkIG1vZGUKKyAqIGNhbGxiYWNrcyB0byBoYW5kbGUgZG1hIG9yIHBpbyBhcmUgc2V0IHVwIGluIGF1MTU1MF9zcGlfYml0c19oYW5kbGVyc19zZXQoKQorICovCitzdGF0aWMgdm9pZCBhdTE1NTBfc3BpX2NoaXBzZWwoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IHZhbHVlKQoreworCXN0cnVjdCBhdTE1NTBfc3BpICpodyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXVuc2lnbmVkIGNzcG9sID0gc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAxIDogMDsKKwl1MzIgY2ZnLCBzdGF0OworCisJc3dpdGNoICh2YWx1ZSkgeworCWNhc2UgQklUQkFOR19DU19JTkFDVElWRToKKwkJaWYgKGh3LT5wZGF0YS0+ZGVhY3RpdmF0ZV9jcykKKwkJCWh3LT5wZGF0YS0+ZGVhY3RpdmF0ZV9jcyhody0+cGRhdGEsIHNwaS0+Y2hpcF9zZWxlY3QsCisJCQkJCWNzcG9sKTsKKwkJYnJlYWs7CisKKwljYXNlIEJJVEJBTkdfQ1NfQUNUSVZFOgorCQlhdTE1NTBfc3BpX2JpdHNfaGFuZGxlcnNfc2V0KGh3LCBzcGktPmJpdHNfcGVyX3dvcmQpOworCisJCWNmZyA9IGh3LT5yZWdzLT5wc2Nfc3BpY2ZnOworCQlhdV9zeW5jKCk7CisJCWh3LT5yZWdzLT5wc2Nfc3BpY2ZnID0gY2ZnICYgflBTQ19TUElDRkdfREVfRU5BQkxFOworCQlhdV9zeW5jKCk7CisKKwkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUE9MKQorCQkJY2ZnIHw9IFBTQ19TUElDRkdfQkk7CisJCWVsc2UKKwkJCWNmZyAmPSB+UFNDX1NQSUNGR19CSTsKKwkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUEhBKQorCQkJY2ZnICY9IH5QU0NfU1BJQ0ZHX0NERTsKKwkJZWxzZQorCQkJY2ZnIHw9IFBTQ19TUElDRkdfQ0RFOworCisJCWlmIChzcGktPm1vZGUgJiBTUElfTFNCX0ZJUlNUKQorCQkJY2ZnIHw9IFBTQ19TUElDRkdfTUxGOworCQllbHNlCisJCQljZmcgJj0gflBTQ19TUElDRkdfTUxGOworCisJCWlmIChody0+dXNlZG1hICYmIHNwaS0+Yml0c19wZXJfd29yZCA8PSA4KQorCQkJY2ZnICY9IH5QU0NfU1BJQ0ZHX0REX0RJU0FCTEU7CisJCWVsc2UKKwkJCWNmZyB8PSBQU0NfU1BJQ0ZHX0REX0RJU0FCTEU7CisJCWNmZyA9IFBTQ19TUElDRkdfQ0xSX0xFTihjZmcpOworCQljZmcgfD0gUFNDX1NQSUNGR19TRVRfTEVOKHNwaS0+Yml0c19wZXJfd29yZCk7CisKKwkJY2ZnID0gUFNDX1NQSUNGR19DTFJfQkFVRChjZmcpOworCQljZmcgJj0gflBTQ19TUElDRkdfU0VUX0RJVigzKTsKKwkJY2ZnIHw9IGF1MTU1MF9zcGlfYmF1ZGNmZyhodywgc3BpLT5tYXhfc3BlZWRfaHopOworCisJCWh3LT5yZWdzLT5wc2Nfc3BpY2ZnID0gY2ZnIHwgUFNDX1NQSUNGR19ERV9FTkFCTEU7CisJCWF1X3N5bmMoKTsKKwkJZG8geworCQkJc3RhdCA9IGh3LT5yZWdzLT5wc2Nfc3Bpc3RhdDsKKwkJCWF1X3N5bmMoKTsKKwkJfSB3aGlsZSAoKHN0YXQgJiBQU0NfU1BJU1RBVF9EUikgPT0gMCk7CisKKwkJaWYgKGh3LT5wZGF0YS0+YWN0aXZhdGVfY3MpCisJCQlody0+cGRhdGEtPmFjdGl2YXRlX2NzKGh3LT5wZGF0YSwgc3BpLT5jaGlwX3NlbGVjdCwKKwkJCQkJY3Nwb2wpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXUxNTUwX3NwaV9zZXR1cHhmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3QgYXUxNTUwX3NwaSAqaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwl1bnNpZ25lZCBicHcsIGh6OworCXUzMiBjZmcsIHN0YXQ7CisKKwlicHcgPSB0ID8gdC0+Yml0c19wZXJfd29yZCA6IHNwaS0+Yml0c19wZXJfd29yZDsKKwloeiA9IHQgPyB0LT5zcGVlZF9oeiA6IHNwaS0+bWF4X3NwZWVkX2h6OworCisJaWYgKGJwdyA8IDQgfHwgYnB3ID4gMjQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJzZXR1cHhmZXI6IGludmFsaWQgYml0c19wZXJfd29yZD0lZFxuIiwKKwkJCWJwdyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoaHogPiBzcGktPm1heF9zcGVlZF9oeiB8fCBoeiA+IGh3LT5mcmVxX21heCB8fCBoeiA8IGh3LT5mcmVxX21pbikgeworCQlkZXZfZXJyKCZzcGktPmRldiwgInNldHVweGZlcjogY2xvY2sgcmF0ZT0lZCBvdXQgb2YgcmFuZ2VcbiIsCisJCQloeik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWF1MTU1MF9zcGlfYml0c19oYW5kbGVyc19zZXQoaHcsIHNwaS0+Yml0c19wZXJfd29yZCk7CisKKwljZmcgPSBody0+cmVncy0+cHNjX3NwaWNmZzsKKwlhdV9zeW5jKCk7CisJaHctPnJlZ3MtPnBzY19zcGljZmcgPSBjZmcgJiB+UFNDX1NQSUNGR19ERV9FTkFCTEU7CisJYXVfc3luYygpOworCisJaWYgKGh3LT51c2VkbWEgJiYgYnB3IDw9IDgpCisJCWNmZyAmPSB+UFNDX1NQSUNGR19ERF9ESVNBQkxFOworCWVsc2UKKwkJY2ZnIHw9IFBTQ19TUElDRkdfRERfRElTQUJMRTsKKwljZmcgPSBQU0NfU1BJQ0ZHX0NMUl9MRU4oY2ZnKTsKKwljZmcgfD0gUFNDX1NQSUNGR19TRVRfTEVOKGJwdyk7CisKKwljZmcgPSBQU0NfU1BJQ0ZHX0NMUl9CQVVEKGNmZyk7CisJY2ZnICY9IH5QU0NfU1BJQ0ZHX1NFVF9ESVYoMyk7CisJY2ZnIHw9IGF1MTU1MF9zcGlfYmF1ZGNmZyhodywgaHopOworCisJaHctPnJlZ3MtPnBzY19zcGljZmcgPSBjZmc7CisJYXVfc3luYygpOworCisJaWYgKGNmZyAmIFBTQ19TUElDRkdfREVfRU5BQkxFKSB7CisJCWRvIHsKKwkJCXN0YXQgPSBody0+cmVncy0+cHNjX3NwaXN0YXQ7CisJCQlhdV9zeW5jKCk7CisJCX0gd2hpbGUgKChzdGF0ICYgUFNDX1NQSVNUQVRfRFIpID09IDApOworCX0KKworCWF1MTU1MF9zcGlfcmVzZXRfZmlmb3MoaHcpOworCWF1MTU1MF9zcGlfbWFza19hY2tfYWxsKGh3KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTE1NTBfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGF1MTU1MF9zcGkgKmh3ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisKKwlpZiAoc3BpLT5iaXRzX3Blcl93b3JkID09IDApCisJCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CisJaWYgKHNwaS0+Yml0c19wZXJfd29yZCA8IDQgfHwgc3BpLT5iaXRzX3Blcl93b3JkID4gMjQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJzZXR1cDogaW52YWxpZCBiaXRzX3Blcl93b3JkPSVkXG4iLAorCQkJc3BpLT5iaXRzX3Blcl93b3JkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHNwaS0+bWF4X3NwZWVkX2h6ID09IDApCisJCXNwaS0+bWF4X3NwZWVkX2h6ID0gaHctPmZyZXFfbWF4OworCWlmIChzcGktPm1heF9zcGVlZF9oeiA+IGh3LT5mcmVxX21heAorCQkJfHwgc3BpLT5tYXhfc3BlZWRfaHogPCBody0+ZnJlcV9taW4pCisJCXJldHVybiAtRUlOVkFMOworCS8qCisJICogTk9URTogY2Fubm90IGNoYW5nZSBzcGVlZCBhbmQgb3RoZXIgaHcgc2V0dGluZ3MgaW1tZWRpYXRlbHksCisJICogICAgICAgb3RoZXJ3aXNlIHNoYXJpbmcgb2Ygc3BpIGJ1cyBpcyBub3QgcG9zc2libGUsCisJICogICAgICAgc28gZG8gbm90IGNhbGwgc2V0dXB4ZmVyKHNwaSwgTlVMTCkgaGVyZQorCSAqLworCXJldHVybiAwOworfQorCisvKgorICogZm9yIGRtYSBzcGkgdHJhbnNmZXJzLCB3ZSBoYXZlIHRvIHNldHVwIHJ4IGNoYW5uZWwsIG90aGVyd2lzZSB0aGVyZSBpcworICogbm8gcmVsaWFibGUgd2F5IGhvdyB0byByZWNvZ25pemUgdGhhdCBzcGkgdHJhbnNmZXIgaXMgZG9uZQorICogZG1hIGNvbXBsZXRlIGNhbGxiYWNrcyBhcmUgY2FsbGVkIGJlZm9yZSByZWFsIHNwaSB0cmFuc2ZlciBpcyBmaW5pc2hlZAorICogYW5kIGlmIG9ubHkgdHggZG1hIGNoYW5uZWwgaXMgc2V0IHVwIChhbmQgcnggZmlmbyBvdmVyZmxvdyBldmVudCBtYXNrZWQpCisgKiBzcGkgbWFzdGVyIGRvbmUgZXZlbnQgaXJxIGlzIG5vdCBnZW5lcmF0ZWQgdW5sZXNzIHJ4IGZpZm8gaXMgZW1wdHkgKGVtcHRpZWQpCisgKiBzbyB3ZSBuZWVkIHJ4IHRtcCBidWZmZXIgdG8gdXNlIGZvciByeCBkbWEgaWYgdXNlciBkb2VzIG5vdCBwcm92aWRlIG9uZQorICovCitzdGF0aWMgaW50IGF1MTU1MF9zcGlfZG1hX3J4dG1wX2FsbG9jKHN0cnVjdCBhdTE1NTBfc3BpICpodywgdW5zaWduZWQgc2l6ZSkKK3sKKwlody0+ZG1hX3J4X3RtcGJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFody0+ZG1hX3J4X3RtcGJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJaHctPmRtYV9yeF90bXBidWZfc2l6ZSA9IHNpemU7CisJaHctPmRtYV9yeF90bXBidWZfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGh3LT5kZXYsIGh3LT5kbWFfcnhfdG1wYnVmLAorCQkJc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoaHctPmRtYV9yeF90bXBidWZfYWRkcikpIHsKKwkJa2ZyZWUoaHctPmRtYV9yeF90bXBidWYpOworCQlody0+ZG1hX3J4X3RtcGJ1ZiA9IDA7CisJCWh3LT5kbWFfcnhfdG1wYnVmX3NpemUgPSAwOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF1MTU1MF9zcGlfZG1hX3J4dG1wX2ZyZWUoc3RydWN0IGF1MTU1MF9zcGkgKmh3KQoreworCWRtYV91bm1hcF9zaW5nbGUoaHctPmRldiwgaHctPmRtYV9yeF90bXBidWZfYWRkciwKKwkJCWh3LT5kbWFfcnhfdG1wYnVmX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CisJa2ZyZWUoaHctPmRtYV9yeF90bXBidWYpOworCWh3LT5kbWFfcnhfdG1wYnVmID0gMDsKKwlody0+ZG1hX3J4X3RtcGJ1Zl9zaXplID0gMDsKK30KKworc3RhdGljIGludCBhdTE1NTBfc3BpX2RtYV90eHJ4YihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBhdTE1NTBfc3BpICpodyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCWRtYV9hZGRyX3QgZG1hX3R4X2FkZHI7CisJZG1hX2FkZHJfdCBkbWFfcnhfYWRkcjsKKwl1MzIgcmVzOworCisJaHctPmxlbiA9IHQtPmxlbjsKKwlody0+dHhfY291bnQgPSAwOworCWh3LT5yeF9jb3VudCA9IDA7CisKKwlody0+dHggPSB0LT50eF9idWY7CisJaHctPnJ4ID0gdC0+cnhfYnVmOworCWRtYV90eF9hZGRyID0gdC0+dHhfZG1hOworCWRtYV9yeF9hZGRyID0gdC0+cnhfZG1hOworCisJLyoKKwkgKiBjaGVjayBpZiBidWZmZXJzIGFyZSBhbHJlYWR5IGRtYSBtYXBwZWQsIG1hcCB0aGVtIG90aGVyd2lzZQorCSAqIHVzZSByeCBidWZmZXIgaW4gcGxhY2Ugb2YgdHggaWYgdHggYnVmZmVyIHdhcyBub3QgcHJvdmlkZWQKKwkgKiB1c2UgdGVtcCByeCBidWZmZXIgKHByZWFsbG9jYXRlZCBvciByZWFsbG9jIHRvIGZpdCkgZm9yIHJ4IGRtYQorCSAqLworCWlmICh0LT5yeF9idWYpIHsKKwkJaWYgKHQtPnJ4X2RtYSA9PSAwKSB7CS8qIGlmIERNQV9BRERSX0lOVkFMSUQsIG1hcCBpdCAqLworCQkJZG1hX3J4X2FkZHIgPSBkbWFfbWFwX3NpbmdsZShody0+ZGV2LAorCQkJCQkodm9pZCAqKXQtPnJ4X2J1ZiwKKwkJCQkJdC0+bGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRtYV9yeF9hZGRyKSkKKwkJCQlkZXZfZXJyKGh3LT5kZXYsICJyeCBkbWEgbWFwIGVycm9yXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICh0LT5sZW4gPiBody0+ZG1hX3J4X3RtcGJ1Zl9zaXplKSB7CisJCQlpbnQgcmV0OworCisJCQlhdTE1NTBfc3BpX2RtYV9yeHRtcF9mcmVlKGh3KTsKKwkJCXJldCA9IGF1MTU1MF9zcGlfZG1hX3J4dG1wX2FsbG9jKGh3LCBtYXgodC0+bGVuLAorCQkJCQlBVTE1NTBfU1BJX0RNQV9SWFRNUF9NSU5TSVpFKSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCWh3LT5yeCA9IGh3LT5kbWFfcnhfdG1wYnVmOworCQlkbWFfcnhfYWRkciA9IGh3LT5kbWFfcnhfdG1wYnVmX2FkZHI7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGh3LT5kZXYsIGRtYV9yeF9hZGRyLAorCQkJdC0+bGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCX0KKwlpZiAodC0+dHhfYnVmKSB7CisJCWlmICh0LT50eF9kbWEgPT0gMCkgewkvKiBpZiBETUFfQUREUl9JTlZBTElELCBtYXAgaXQgKi8KKwkJCWRtYV90eF9hZGRyID0gZG1hX21hcF9zaW5nbGUoaHctPmRldiwKKwkJCQkJKHZvaWQgKil0LT50eF9idWYsCisJCQkJCXQtPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZG1hX3R4X2FkZHIpKQorCQkJCWRldl9lcnIoaHctPmRldiwgInR4IGRtYSBtYXAgZXJyb3JcbiIpOworCQl9CisJfSBlbHNlIHsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoaHctPmRldiwgZG1hX3J4X2FkZHIsCisJCQkJdC0+bGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWh3LT50eCA9IGh3LT5yeDsKKwl9CisKKwkvKiBwdXQgYnVmZmVycyBvbiB0aGUgcmluZyAqLworCXJlcyA9IGF1MXh4eF9kYmRtYV9wdXRfZGVzdChody0+ZG1hX3J4X2NoLCBody0+cngsIHQtPmxlbik7CisJaWYgKCFyZXMpCisJCWRldl9lcnIoaHctPmRldiwgInJ4IGRtYSBwdXQgZGVzdCBlcnJvclxuIik7CisKKwlyZXMgPSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShody0+ZG1hX3R4X2NoLCAodm9pZCAqKWh3LT50eCwgdC0+bGVuKTsKKwlpZiAoIXJlcykKKwkJZGV2X2Vycihody0+ZGV2LCAidHggZG1hIHB1dCBzb3VyY2UgZXJyb3JcbiIpOworCisJYXUxeHh4X2RiZG1hX3N0YXJ0KGh3LT5kbWFfcnhfY2gpOworCWF1MXh4eF9kYmRtYV9zdGFydChody0+ZG1hX3R4X2NoKTsKKworCS8qIGJ5IGRlZmF1bHQgZW5hYmxlIG5lYXJseSBhbGwgZXZlbnRzIGludGVycnVwdCAqLworCWh3LT5yZWdzLT5wc2Nfc3BpbXNrID0gUFNDX1NQSU1TS19TRDsKKwlhdV9zeW5jKCk7CisKKwkvKiBzdGFydCB0aGUgdHJhbnNmZXIgKi8KKwlody0+cmVncy0+cHNjX3NwaXBjciA9IFBTQ19TUElQQ1JfTVM7CisJYXVfc3luYygpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmaHctPm1hc3Rlcl9kb25lKTsKKworCWF1MXh4eF9kYmRtYV9zdG9wKGh3LT5kbWFfdHhfY2gpOworCWF1MXh4eF9kYmRtYV9zdG9wKGh3LT5kbWFfcnhfY2gpOworCisJaWYgKCF0LT5yeF9idWYpIHsKKwkJLyogdXNpbmcgdGhlIHRlbXBvcmFsIHByZWFsbG9jYXRlZCBhbmQgcHJlbWFwcGVkIGJ1ZmZlciAqLworCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShody0+ZGV2LCBkbWFfcnhfYWRkciwgdC0+bGVuLAorCQkJRE1BX0ZST01fREVWSUNFKTsKKwl9CisJLyogdW5tYXAgYnVmZmVycyBpZiBtYXBwZWQgYWJvdmUgKi8KKwlpZiAodC0+cnhfYnVmICYmIHQtPnJ4X2RtYSA9PSAwICkKKwkJZG1hX3VubWFwX3NpbmdsZShody0+ZGV2LCBkbWFfcnhfYWRkciwgdC0+bGVuLAorCQkJRE1BX0ZST01fREVWSUNFKTsKKwlpZiAodC0+dHhfYnVmICYmIHQtPnR4X2RtYSA9PSAwICkKKwkJZG1hX3VubWFwX3NpbmdsZShody0+ZGV2LCBkbWFfdHhfYWRkciwgdC0+bGVuLAorCQkJRE1BX1RPX0RFVklDRSk7CisKKwlyZXR1cm4gaHctPnJ4X2NvdW50IDwgaHctPnR4X2NvdW50ID8gaHctPnJ4X2NvdW50IDogaHctPnR4X2NvdW50OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXUxNTUwX3NwaV9kbWFfaXJxX2NhbGxiYWNrKHN0cnVjdCBhdTE1NTBfc3BpICpodykKK3sKKwl1MzIgc3RhdCwgZXZudDsKKworCXN0YXQgPSBody0+cmVncy0+cHNjX3NwaXN0YXQ7CisJZXZudCA9IGh3LT5yZWdzLT5wc2Nfc3BpZXZlbnQ7CisJYXVfc3luYygpOworCWlmICgoc3RhdCAmIFBTQ19TUElTVEFUX0RJKSA9PSAwKSB7CisJCWRldl9lcnIoaHctPmRldiwgIlVuZXhwZWN0ZWQgSVJRIVxuIik7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlpZiAoKGV2bnQgJiAoUFNDX1NQSUVWTlRfTU0gfCBQU0NfU1BJRVZOVF9STworCQkJCXwgUFNDX1NQSUVWTlRfUlUgfCBQU0NfU1BJRVZOVF9UTworCQkJCXwgUFNDX1NQSUVWTlRfVFUgfCBQU0NfU1BJRVZOVF9TRCkpCisJCQkhPSAwKSB7CisJCS8qCisJCSAqIGR1ZSB0byBhbiBzcGkgZXJyb3Igd2UgY29uc2lkZXIgdHJhbnNmZXIgYXMgZG9uZSwKKwkJICogc28gbWFzayBhbGwgZXZlbnRzIHVudGlsIGJlZm9yZSBuZXh0IHRyYW5zZmVyIHN0YXJ0CisJCSAqIGFuZCBzdG9wIHRoZSBwb3NzaWJseSBydW5uaW5nIGRtYSBpbW1lZGlhdGVsbHkKKwkJICovCisJCWF1MTU1MF9zcGlfbWFza19hY2tfYWxsKGh3KTsKKwkJYXUxeHh4X2RiZG1hX3N0b3AoaHctPmRtYV9yeF9jaCk7CisJCWF1MXh4eF9kYmRtYV9zdG9wKGh3LT5kbWFfdHhfY2gpOworCisJCS8qIGdldCBudW1iZXIgb2YgdHJhbnNmZXJlZCBieXRlcyAqLworCQlody0+cnhfY291bnQgPSBody0+bGVuIC0gYXUxeHh4X2dldF9kbWFfcmVzaWR1ZShody0+ZG1hX3J4X2NoKTsKKwkJaHctPnR4X2NvdW50ID0gaHctPmxlbiAtIGF1MXh4eF9nZXRfZG1hX3Jlc2lkdWUoaHctPmRtYV90eF9jaCk7CisKKwkJYXUxeHh4X2RiZG1hX3Jlc2V0KGh3LT5kbWFfcnhfY2gpOworCQlhdTF4eHhfZGJkbWFfcmVzZXQoaHctPmRtYV90eF9jaCk7CisJCWF1MTU1MF9zcGlfcmVzZXRfZmlmb3MoaHcpOworCisJCWRldl9lcnIoaHctPmRldiwKKwkJCSJVbmV4cGVjdGVkIFNQSSBlcnJvcjogZXZlbnQ9MHgleCBzdGF0PTB4JXghXG4iLAorCQkJZXZudCwgc3RhdCk7CisKKwkJY29tcGxldGUoJmh3LT5tYXN0ZXJfZG9uZSk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoKGV2bnQgJiBQU0NfU1BJRVZOVF9NRCkgIT0gMCkgeworCQkvKiB0cmFuc2ZlciBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICovCisJCWF1MTU1MF9zcGlfbWFza19hY2tfYWxsKGh3KTsKKwkJaHctPnJ4X2NvdW50ID0gaHctPmxlbjsKKwkJaHctPnR4X2NvdW50ID0gaHctPmxlbjsKKwkJY29tcGxldGUoJmh3LT5tYXN0ZXJfZG9uZSk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisvKiByb3V0aW5lcyB0byBoYW5kbGUgZGlmZmVyZW50IHdvcmQgc2l6ZXMgaW4gcGlvIG1vZGUgKi8KKyNkZWZpbmUgQVUxNTUwX1NQSV9SWF9XT1JEKHNpemUsIG1hc2spCQkJCQlcCitzdGF0aWMgdm9pZCBhdTE1NTBfc3BpX3J4X3dvcmRfIyNzaXplKHN0cnVjdCBhdTE1NTBfc3BpICpodykJCVwKK3sJCQkJCQkJCQlcCisJdTMyIGZpZm93b3JkID0gaHctPnJlZ3MtPnBzY19zcGl0eHJ4ICYgKHUzMikobWFzayk7CQlcCisJYXVfc3luYygpOwkJCQkJCQlcCisJaWYgKGh3LT5yeCkgewkJCQkJCQlcCisJCSoodSMjc2l6ZSAqKWh3LT5yeCA9ICh1IyNzaXplKWZpZm93b3JkOwkJCVwKKwkJaHctPnJ4ICs9IChzaXplKSAvIDg7CQkJCQlcCisJfQkJCQkJCQkJXAorCWh3LT5yeF9jb3VudCArPSAoc2l6ZSkgLyA4OwkJCQkJXAorfQorCisjZGVmaW5lIEFVMTU1MF9TUElfVFhfV09SRChzaXplLCBtYXNrKQkJCQkJXAorc3RhdGljIHZvaWQgYXUxNTUwX3NwaV90eF93b3JkXyMjc2l6ZShzdHJ1Y3QgYXUxNTUwX3NwaSAqaHcpCQlcCit7CQkJCQkJCQkJXAorCXUzMiBmaWZvd29yZCA9IDA7CQkJCQkJXAorCWlmIChody0+dHgpIHsJCQkJCQkJXAorCQlmaWZvd29yZCA9ICoodSMjc2l6ZSAqKWh3LT50eCAmICh1MzIpKG1hc2spOwkJXAorCQlody0+dHggKz0gKHNpemUpIC8gODsJCQkJCVwKKwl9CQkJCQkJCQlcCisJaHctPnR4X2NvdW50ICs9IChzaXplKSAvIDg7CQkJCQlcCisJaWYgKGh3LT50eF9jb3VudCA+PSBody0+bGVuKQkJCQkJXAorCQlmaWZvd29yZCB8PSBQU0NfU1BJVFhSWF9MQzsJCQkJXAorCWh3LT5yZWdzLT5wc2Nfc3BpdHhyeCA9IGZpZm93b3JkOwkJCQlcCisJYXVfc3luYygpOwkJCQkJCQlcCit9CisKK0FVMTU1MF9TUElfUlhfV09SRCg4LDB4ZmYpCitBVTE1NTBfU1BJX1JYX1dPUkQoMTYsMHhmZmZmKQorQVUxNTUwX1NQSV9SWF9XT1JEKDMyLDB4ZmZmZmZmKQorQVUxNTUwX1NQSV9UWF9XT1JEKDgsMHhmZikKK0FVMTU1MF9TUElfVFhfV09SRCgxNiwweGZmZmYpCitBVTE1NTBfU1BJX1RYX1dPUkQoMzIsMHhmZmZmZmYpCisKK3N0YXRpYyBpbnQgYXUxNTUwX3NwaV9waW9fdHhyeGIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwl1MzIgc3RhdCwgbWFzazsKKwlzdHJ1Y3QgYXUxNTUwX3NwaSAqaHcgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCWh3LT50eCA9IHQtPnR4X2J1ZjsKKwlody0+cnggPSB0LT5yeF9idWY7CisJaHctPmxlbiA9IHQtPmxlbjsKKwlody0+dHhfY291bnQgPSAwOworCWh3LT5yeF9jb3VudCA9IDA7CisKKwkvKiBieSBkZWZhdWx0IGVuYWJsZSBuZWFybHkgYWxsIGV2ZW50cyBhZnRlciBmaWxsaW5nIHR4IGZpZm8gKi8KKwltYXNrID0gUFNDX1NQSU1TS19TRDsKKworCS8qIGZpbGwgdGhlIHRyYW5zbWl0IEZJRk8gKi8KKwl3aGlsZSAoaHctPnR4X2NvdW50IDwgaHctPmxlbikgeworCisJCWh3LT50eF93b3JkKGh3KTsKKworCQlpZiAoaHctPnR4X2NvdW50ID49IGh3LT5sZW4pIHsKKwkJCS8qIG1hc2sgdHggZmlmbyByZXF1ZXN0IGludGVycnVwdCBhcyB3ZSBhcmUgZG9uZSAqLworCQkJbWFzayB8PSBQU0NfU1BJTVNLX1RSOworCQl9CisKKwkJc3RhdCA9IGh3LT5yZWdzLT5wc2Nfc3Bpc3RhdDsKKwkJYXVfc3luYygpOworCQlpZiAoc3RhdCAmIFBTQ19TUElTVEFUX1RGKQorCQkJYnJlYWs7CisJfQorCisJLyogZW5hYmxlIGV2ZW50IGludGVycnVwdHMgKi8KKwlody0+cmVncy0+cHNjX3NwaW1zayA9IG1hc2s7CisJYXVfc3luYygpOworCisJLyogc3RhcnQgdGhlIHRyYW5zZmVyICovCisJaHctPnJlZ3MtPnBzY19zcGlwY3IgPSBQU0NfU1BJUENSX01TOworCWF1X3N5bmMoKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmh3LT5tYXN0ZXJfZG9uZSk7CisKKwlyZXR1cm4gaHctPnJ4X2NvdW50IDwgaHctPnR4X2NvdW50ID8gaHctPnJ4X2NvdW50IDogaHctPnR4X2NvdW50OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXUxNTUwX3NwaV9waW9faXJxX2NhbGxiYWNrKHN0cnVjdCBhdTE1NTBfc3BpICpodykKK3sKKwlpbnQgYnVzeTsKKwl1MzIgc3RhdCwgZXZudDsKKworCXN0YXQgPSBody0+cmVncy0+cHNjX3NwaXN0YXQ7CisJZXZudCA9IGh3LT5yZWdzLT5wc2Nfc3BpZXZlbnQ7CisJYXVfc3luYygpOworCWlmICgoc3RhdCAmIFBTQ19TUElTVEFUX0RJKSA9PSAwKSB7CisJCWRldl9lcnIoaHctPmRldiwgIlVuZXhwZWN0ZWQgSVJRIVxuIik7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlpZiAoKGV2bnQgJiAoUFNDX1NQSUVWTlRfTU0gfCBQU0NfU1BJRVZOVF9STworCQkJCXwgUFNDX1NQSUVWTlRfUlUgfCBQU0NfU1BJRVZOVF9UTworCQkJCXwgUFNDX1NQSUVWTlRfVFUgfCBQU0NfU1BJRVZOVF9TRCkpCisJCQkhPSAwKSB7CisJCWRldl9lcnIoaHctPmRldiwKKwkJCSJVbmV4cGVjdGVkIFNQSSBlcnJvcjogZXZlbnQ9MHgleCBzdGF0PTB4JXghXG4iLAorCQkJZXZudCwgc3RhdCk7CisJCS8qCisJCSAqIGR1ZSB0byBhbiBlcnJvciB3ZSBjb25zaWRlciB0cmFuc2ZlciBhcyBkb25lLAorCQkgKiBzbyBtYXNrIGFsbCBldmVudHMgdW50aWwgYmVmb3JlIG5leHQgdHJhbnNmZXIgc3RhcnQKKwkJICovCisJCWF1MTU1MF9zcGlfbWFza19hY2tfYWxsKGh3KTsKKwkJYXUxNTUwX3NwaV9yZXNldF9maWZvcyhodyk7CisJCWNvbXBsZXRlKCZody0+bWFzdGVyX2RvbmUpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJLyoKKwkgKiB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVhZCBmcm9tIHJ4IGZpZm8KKwkgKiBvciB0aGVyZSBpcyBhIHNwYWNlIHRvIHdyaXRlIHRvIHR4IGZpZm86CisJICovCisJZG8geworCQlidXN5ID0gMDsKKwkJc3RhdCA9IGh3LT5yZWdzLT5wc2Nfc3Bpc3RhdDsKKwkJYXVfc3luYygpOworCisJCWlmICgoc3RhdCAmIFBTQ19TUElTVEFUX1JFKSA9PSAwICYmIGh3LT5yeF9jb3VudCA8IGh3LT5sZW4pIHsKKwkJCWh3LT5yeF93b3JkKGh3KTsKKwkJCS8qIGFjayB0aGUgcmVjZWl2ZSByZXF1ZXN0IGV2ZW50ICovCisJCQlody0+cmVncy0+cHNjX3NwaWV2ZW50ID0gUFNDX1NQSUVWTlRfUlI7CisJCQlhdV9zeW5jKCk7CisJCQlidXN5ID0gMTsKKwkJfQorCisJCWlmICgoc3RhdCAmIFBTQ19TUElTVEFUX1RGKSA9PSAwICYmIGh3LT50eF9jb3VudCA8IGh3LT5sZW4pIHsKKwkJCWh3LT50eF93b3JkKGh3KTsKKwkJCS8qIGFjayB0aGUgdHJhbnNtaXQgcmVxdWVzdCBldmVudCAqLworCQkJaHctPnJlZ3MtPnBzY19zcGlldmVudCA9IFBTQ19TUElFVk5UX1RSOworCQkJYXVfc3luYygpOworCQkJYnVzeSA9IDE7CisJCX0KKwl9IHdoaWxlIChidXN5KTsKKworCWV2bnQgPSBody0+cmVncy0+cHNjX3NwaWV2ZW50OworCWF1X3N5bmMoKTsKKworCWlmIChody0+cnhfY291bnQgPj0gaHctPmxlbiB8fCAoZXZudCAmIFBTQ19TUElFVk5UX01EKSAhPSAwKSB7CisJCS8qIHRyYW5zZmVyIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKi8KKwkJYXUxNTUwX3NwaV9tYXNrX2Fja19hbGwoaHcpOworCQljb21wbGV0ZSgmaHctPm1hc3Rlcl9kb25lKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGF1MTU1MF9zcGlfdHhyeF9idWZzKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IGF1MTU1MF9zcGkgKmh3ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJcmV0dXJuIGh3LT50eHJ4X2J1ZnMoc3BpLCB0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IGF1MTU1MF9zcGlfaXJxKGludCBpcnEsIHZvaWQgKmRldiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGF1MTU1MF9zcGkgKmh3ID0gZGV2OworCXJldHVybiBody0+aXJxX2NhbGxiYWNrKGh3KTsKK30KKworc3RhdGljIHZvaWQgYXUxNTUwX3NwaV9iaXRzX2hhbmRsZXJzX3NldChzdHJ1Y3QgYXUxNTUwX3NwaSAqaHcsIGludCBicHcpCit7CisJaWYgKGJwdyA8PSA4KSB7CisJCWlmIChody0+dXNlZG1hKSB7CisJCQlody0+dHhyeF9idWZzID0gJmF1MTU1MF9zcGlfZG1hX3R4cnhiOworCQkJaHctPmlycV9jYWxsYmFjayA9ICZhdTE1NTBfc3BpX2RtYV9pcnFfY2FsbGJhY2s7CisJCX0gZWxzZSB7CisJCQlody0+cnhfd29yZCA9ICZhdTE1NTBfc3BpX3J4X3dvcmRfODsKKwkJCWh3LT50eF93b3JkID0gJmF1MTU1MF9zcGlfdHhfd29yZF84OworCQkJaHctPnR4cnhfYnVmcyA9ICZhdTE1NTBfc3BpX3Bpb190eHJ4YjsKKwkJCWh3LT5pcnFfY2FsbGJhY2sgPSAmYXUxNTUwX3NwaV9waW9faXJxX2NhbGxiYWNrOworCQl9CisJfSBlbHNlIGlmIChicHcgPD0gMTYpIHsKKwkJaHctPnJ4X3dvcmQgPSAmYXUxNTUwX3NwaV9yeF93b3JkXzE2OworCQlody0+dHhfd29yZCA9ICZhdTE1NTBfc3BpX3R4X3dvcmRfMTY7CisJCWh3LT50eHJ4X2J1ZnMgPSAmYXUxNTUwX3NwaV9waW9fdHhyeGI7CisJCWh3LT5pcnFfY2FsbGJhY2sgPSAmYXUxNTUwX3NwaV9waW9faXJxX2NhbGxiYWNrOworCX0gZWxzZSB7CisJCWh3LT5yeF93b3JkID0gJmF1MTU1MF9zcGlfcnhfd29yZF8zMjsKKwkJaHctPnR4X3dvcmQgPSAmYXUxNTUwX3NwaV90eF93b3JkXzMyOworCQlody0+dHhyeF9idWZzID0gJmF1MTU1MF9zcGlfcGlvX3R4cnhiOworCQlody0+aXJxX2NhbGxiYWNrID0gJmF1MTU1MF9zcGlfcGlvX2lycV9jYWxsYmFjazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdTE1NTBfc3BpX3NldHVwX3BzY19hc19zcGkoc3RydWN0IGF1MTU1MF9zcGkgKmh3KQoreworCXUzMiBzdGF0LCBjZmc7CisKKwkvKiBzZXQgdXAgdGhlIFBTQyBmb3IgU1BJIG1vZGUgKi8KKwlody0+cmVncy0+cHNjX2N0cmwgPSBQU0NfQ1RSTF9ESVNBQkxFOworCWF1X3N5bmMoKTsKKwlody0+cmVncy0+cHNjX3NlbCA9IFBTQ19TRUxfUFNfU1BJTU9ERTsKKwlhdV9zeW5jKCk7CisKKwlody0+cmVncy0+cHNjX3NwaWNmZyA9IDA7CisJYXVfc3luYygpOworCisJaHctPnJlZ3MtPnBzY19jdHJsID0gUFNDX0NUUkxfRU5BQkxFOworCWF1X3N5bmMoKTsKKworCWRvIHsKKwkJc3RhdCA9IGh3LT5yZWdzLT5wc2Nfc3Bpc3RhdDsKKwkJYXVfc3luYygpOworCX0gd2hpbGUgKChzdGF0ICYgUFNDX1NQSVNUQVRfU1IpID09IDApOworCisKKwljZmcgPSBody0+dXNlZG1hID8gMCA6IFBTQ19TUElDRkdfRERfRElTQUJMRTsKKwljZmcgfD0gUFNDX1NQSUNGR19TRVRfTEVOKDgpOworCWNmZyB8PSBQU0NfU1BJQ0ZHX1JUX0ZJRk84IHwgUFNDX1NQSUNGR19UVF9GSUZPODsKKwkvKiB1c2UgbWluaW1hbCBhbGxvd2VkIGJyZyBhbmQgZGl2IHZhbHVlcyBhcyBpbml0aWFsIHNldHRpbmc6ICovCisJY2ZnIHw9IFBTQ19TUElDRkdfU0VUX0JBVUQoNCkgfCBQU0NfU1BJQ0ZHX1NFVF9ESVYoMCk7CisKKyNpZmRlZiBBVTE1NTBfU1BJX0RFQlVHX0xPT1BCQUNLCisJY2ZnIHw9IFBTQ19TUElDRkdfTEI7CisjZW5kaWYKKworCWh3LT5yZWdzLT5wc2Nfc3BpY2ZnID0gY2ZnOworCWF1X3N5bmMoKTsKKworCWF1MTU1MF9zcGlfbWFza19hY2tfYWxsKGh3KTsKKworCWh3LT5yZWdzLT5wc2Nfc3BpY2ZnIHw9IFBTQ19TUElDRkdfREVfRU5BQkxFOworCWF1X3N5bmMoKTsKKworCWRvIHsKKwkJc3RhdCA9IGh3LT5yZWdzLT5wc2Nfc3Bpc3RhdDsKKwkJYXVfc3luYygpOworCX0gd2hpbGUgKChzdGF0ICYgUFNDX1NQSVNUQVRfRFIpID09IDApOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGF1MTU1MF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYXUxNTUwX3NwaSAqaHc7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlpbnQgZXJyID0gMDsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBhdTE1NTBfc3BpKSk7CisJaWYgKG1hc3RlciA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIG1lbW9yeSBmb3Igc3BpX21hc3RlclxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX25vbWVtOworCX0KKworCWh3ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJaHctPm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG1hc3Rlcik7CisJaHctPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaHctPmRldiA9ICZwZGV2LT5kZXY7CisKKwlpZiAoaHctPnBkYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gcGxhdGZvcm0gZGF0YSBzdXBwbGllZFxuIik7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX25vX3BkYXRhOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKKworCWluaXRfY29tcGxldGlvbigmaHctPm1hc3Rlcl9kb25lKTsKKworCWh3LT5iaXRiYW5nLm1hc3RlciA9IGh3LT5tYXN0ZXI7CisJaHctPmJpdGJhbmcuc2V0dXBfdHJhbnNmZXIgPSBhdTE1NTBfc3BpX3NldHVweGZlcjsKKwlody0+Yml0YmFuZy5jaGlwc2VsZWN0ID0gYXUxNTUwX3NwaV9jaGlwc2VsOworCWh3LT5iaXRiYW5nLm1hc3Rlci0+c2V0dXAgPSBhdTE1NTBfc3BpX3NldHVwOworCWh3LT5iaXRiYW5nLnR4cnhfYnVmcyA9IGF1MTU1MF9zcGlfdHhyeF9idWZzOworCisJc3dpdGNoIChody0+cGRhdGEtPmJ1c19udW0pIHsKKwljYXNlIDA6CisJCWh3LT5pcnEgPSBBVTE1NTBfUFNDMF9JTlQ7CisJCWh3LT5yZWdzID0gKHZvbGF0aWxlIHBzY19zcGlfdCAqKVBTQzBfQkFTRV9BRERSOworCQlody0+ZG1hX3J4X2lkID0gRFNDUl9DTUQwX1BTQzBfUlg7CisJCWh3LT5kbWFfdHhfaWQgPSBEU0NSX0NNRDBfUFNDMF9UWDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlody0+aXJxID0gQVUxNTUwX1BTQzFfSU5UOworCQlody0+cmVncyA9ICh2b2xhdGlsZSBwc2Nfc3BpX3QgKilQU0MxX0JBU0VfQUREUjsKKwkJaHctPmRtYV9yeF9pZCA9IERTQ1JfQ01EMF9QU0MxX1JYOworCQlody0+ZG1hX3R4X2lkID0gRFNDUl9DTUQwX1BTQzFfVFg7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaHctPmlycSA9IEFVMTU1MF9QU0MyX0lOVDsKKwkJaHctPnJlZ3MgPSAodm9sYXRpbGUgcHNjX3NwaV90ICopUFNDMl9CQVNFX0FERFI7CisJCWh3LT5kbWFfcnhfaWQgPSBEU0NSX0NNRDBfUFNDMl9SWDsKKwkJaHctPmRtYV90eF9pZCA9IERTQ1JfQ01EMF9QU0MyX1RYOworCQlicmVhazsKKwljYXNlIDM6CisJCWh3LT5pcnEgPSBBVTE1NTBfUFNDM19JTlQ7CisJCWh3LT5yZWdzID0gKHZvbGF0aWxlIHBzY19zcGlfdCAqKVBTQzNfQkFTRV9BRERSOworCQlody0+ZG1hX3J4X2lkID0gRFNDUl9DTUQwX1BTQzNfUlg7CisJCWh3LT5kbWFfdHhfaWQgPSBEU0NSX0NNRDBfUFNDM19UWDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiV3JvbmcgYnVzX251bSBvZiBTUElcbiIpOworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGVycl9ub19wZGF0YTsKKwl9CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKCh1bnNpZ25lZCBsb25nKWh3LT5yZWdzLCBzaXplb2YocHNjX3NwaV90KSwKKwkJCXBkZXYtPm5hbWUpID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlc2VydmUgaW9tZW0gcmVnaW9uXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9ub19pb3JlczsKKwl9CisKKworCWlmICh1c2VkbWEpIHsKKwkJaWYgKHBkZXYtPmRldi5kbWFfbWFzayA9PSBOVUxMKQorCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm5vIGRtYSBtYXNrXG4iKTsKKwkJZWxzZQorCQkJaHctPnVzZWRtYSA9IDE7CisJfQorCisJaWYgKGh3LT51c2VkbWEpIHsKKwkJLyoKKwkJICogY3JlYXRlIG1lbW9yeSBkZXZpY2Ugd2l0aCA4IGJpdHMgZGV2X2RldndpZHRoCisJCSAqIG5lZWRlZCBmb3IgcHJvcGVyIGJ5dGUgb3JkZXJpbmcgdG8gc3BpIGZpZm8KKwkJICovCisJCWludCBtZW1pZCA9IGF1MXh4eF9kZG1hX2FkZF9kZXZpY2UoJmF1MTU1MF9zcGlfbWVtX2RiZGV2KTsKKwkJaWYgKCFtZW1pZCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJDYW5ub3QgY3JlYXRlIGRtYSA4IGJpdCBtZW0gZGV2aWNlXG4iKTsKKwkJCWVyciA9IC1FTlhJTzsKKwkJCWdvdG8gZXJyX2RtYV9hZGRfZGV2OworCQl9CisKKwkJaHctPmRtYV90eF9jaCA9IGF1MXh4eF9kYmRtYV9jaGFuX2FsbG9jKG1lbWlkLAorCQkJaHctPmRtYV90eF9pZCwgTlVMTCwgKHZvaWQgKilodyk7CisJCWlmIChody0+ZG1hX3R4X2NoID09IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiQ2Fubm90IGFsbG9jYXRlIHR4IGRtYSBjaGFubmVsXG4iKTsKKwkJCWVyciA9IC1FTlhJTzsKKwkJCWdvdG8gZXJyX25vX3R4ZG1hOworCQl9CisJCWF1MXh4eF9kYmRtYV9zZXRfZGV2d2lkdGgoaHctPmRtYV90eF9jaCwgOCk7CisJCWlmIChhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyhody0+ZG1hX3R4X2NoLAorCQkJQVUxNTUwX1NQSV9EQkRNQV9ERVNDUklQVE9SUykgPT0gMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJDYW5ub3QgYWxsb2NhdGUgdHggZG1hIGRlc2NyaXB0b3JzXG4iKTsKKwkJCWVyciA9IC1FTlhJTzsKKwkJCWdvdG8gZXJyX25vX3R4ZG1hX2Rlc2NyOworCQl9CisKKworCQlody0+ZG1hX3J4X2NoID0gYXUxeHh4X2RiZG1hX2NoYW5fYWxsb2MoaHctPmRtYV9yeF9pZCwKKwkJCW1lbWlkLCBOVUxMLCAodm9pZCAqKWh3KTsKKwkJaWYgKGh3LT5kbWFfcnhfY2ggPT0gMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJDYW5ub3QgYWxsb2NhdGUgcnggZG1hIGNoYW5uZWxcbiIpOworCQkJZXJyID0gLUVOWElPOworCQkJZ290byBlcnJfbm9fcnhkbWE7CisJCX0KKwkJYXUxeHh4X2RiZG1hX3NldF9kZXZ3aWR0aChody0+ZG1hX3J4X2NoLCA4KTsKKwkJaWYgKGF1MXh4eF9kYmRtYV9yaW5nX2FsbG9jKGh3LT5kbWFfcnhfY2gsCisJCQlBVTE1NTBfU1BJX0RCRE1BX0RFU0NSSVBUT1JTKSA9PSAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIkNhbm5vdCBhbGxvY2F0ZSByeCBkbWEgZGVzY3JpcHRvcnNcbiIpOworCQkJZXJyID0gLUVOWElPOworCQkJZ290byBlcnJfbm9fcnhkbWFfZGVzY3I7CisJCX0KKworCQllcnIgPSBhdTE1NTBfc3BpX2RtYV9yeHRtcF9hbGxvYyhodywKKwkJCUFVMTU1MF9TUElfRE1BX1JYVE1QX01JTlNJWkUpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJDYW5ub3QgYWxsb2NhdGUgaW5pdGlhbCByeCBkbWEgdG1wIGJ1ZmZlclxuIik7CisJCQlnb3RvIGVycl9kbWFfcnh0bXBfYWxsb2M7CisJCX0KKwl9CisKKwlhdTE1NTBfc3BpX2JpdHNfaGFuZGxlcnNfc2V0KGh3LCA4KTsKKworCWVyciA9IHJlcXVlc3RfaXJxKGh3LT5pcnEsIGF1MTU1MF9zcGlfaXJxLCAwLCBwZGV2LT5uYW1lLCBodyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgY2xhaW0gSVJRXG4iKTsKKwkJZ290byBlcnJfbm9faXJxOworCX0KKworCW1hc3Rlci0+YnVzX251bSA9IGh3LT5wZGF0YS0+YnVzX251bTsKKwltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gaHctPnBkYXRhLT5udW1fY2hpcHNlbGVjdDsKKworCS8qCisJICogIHByZWNvbXB1dGUgdmFsaWQgcmFuZ2UgZm9yIHNwaSBmcmVxIC0gZnJvbSBhdTE1NTAgZGF0YXNoZWV0OgorCSAqICAgIHBzY190ZW1wY2xrID0gcHNjX21haW5jbGsgLyAoMiA8PCBESVYpCisJICogICAgc3BpY2xrID0gcHNjX3RlbXBjbGsgLyAoMiAqIChCUkcgKyAxKSkKKwkgKiAgICBCUkcgdmFsaWQgcmFuZ2UgaXMgNC4uNjMKKwkgKiAgICBESVYgdmFsaWQgcmFuZ2UgaXMgMC4uMworCSAqICByb3VuZCB0aGUgbWluIGFuZCBtYXggZnJlcXVlbmNpZXMgdG8gdmFsdWVzIHRoYXQgd291bGQgc3RpbGwKKwkgKiAgcHJvZHVjZSB2YWxpZCBicmcgYW5kIGRpdgorCSAqLworCXsKKwkJaW50IG1pbl9kaXYgPSAoMiA8PCAwKSAqICgyICogKDQgKyAxKSk7CisJCWludCBtYXhfZGl2ID0gKDIgPDwgMykgKiAoMiAqICg2MyArIDEpKTsKKwkJaHctPmZyZXFfbWF4ID0gaHctPnBkYXRhLT5tYWluY2xrX2h6IC8gbWluX2RpdjsKKwkJaHctPmZyZXFfbWluID0gaHctPnBkYXRhLT5tYWluY2xrX2h6IC8gKG1heF9kaXYgKyAxKSArIDE7CisJfQorCisJYXUxNTUwX3NwaV9zZXR1cF9wc2NfYXNfc3BpKGh3KTsKKworCWVyciA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZody0+Yml0YmFuZyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgU1BJIG1hc3RlclxuIik7CisJCWdvdG8gZXJyX3JlZ2lzdGVyOworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCSJzcGkgbWFzdGVyIHJlZ2lzdGVyZWQ6IGJ1c19udW09JWQgbnVtX2NoaXBzZWxlY3Q9JWRcbiIsCisJCW1hc3Rlci0+YnVzX251bSwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdCk7CisKKwlyZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyOgorCWZyZWVfaXJxKGh3LT5pcnEsIGh3KTsKKworZXJyX25vX2lycToKKwlhdTE1NTBfc3BpX2RtYV9yeHRtcF9mcmVlKGh3KTsKKworZXJyX2RtYV9yeHRtcF9hbGxvYzoKK2Vycl9ub19yeGRtYV9kZXNjcjoKKwlpZiAoaHctPnVzZWRtYSkKKwkJYXUxeHh4X2RiZG1hX2NoYW5fZnJlZShody0+ZG1hX3J4X2NoKTsKKworZXJyX25vX3J4ZG1hOgorZXJyX25vX3R4ZG1hX2Rlc2NyOgorCWlmIChody0+dXNlZG1hKQorCQlhdTF4eHhfZGJkbWFfY2hhbl9mcmVlKGh3LT5kbWFfdHhfY2gpOworCitlcnJfbm9fdHhkbWE6CitlcnJfZG1hX2FkZF9kZXY6CisJcmVsZWFzZV9tZW1fcmVnaW9uKCh1bnNpZ25lZCBsb25nKWh3LT5yZWdzLCBzaXplb2YocHNjX3NwaV90KSk7CisKK2Vycl9ub19pb3JlczoKK2Vycl9ub19wZGF0YToKKwlzcGlfbWFzdGVyX3B1dChody0+bWFzdGVyKTsKKworZXJyX25vbWVtOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGF1MTU1MF9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGF1MTU1MF9zcGkgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAic3BpIG1hc3RlciByZW1vdmU6IGJ1c19udW09JWRcbiIsCisJCWh3LT5tYXN0ZXItPmJ1c19udW0pOworCisJc3BpX2JpdGJhbmdfc3RvcCgmaHctPmJpdGJhbmcpOworCWZyZWVfaXJxKGh3LT5pcnEsIGh3KTsKKwlyZWxlYXNlX21lbV9yZWdpb24oKHVuc2lnbmVkIGxvbmcpaHctPnJlZ3MsIHNpemVvZihwc2Nfc3BpX3QpKTsKKworCWlmIChody0+dXNlZG1hKSB7CisJCWF1MTU1MF9zcGlfZG1hX3J4dG1wX2ZyZWUoaHcpOworCQlhdTF4eHhfZGJkbWFfY2hhbl9mcmVlKGh3LT5kbWFfcnhfY2gpOworCQlhdTF4eHhfZGJkbWFfY2hhbl9mcmVlKGh3LT5kbWFfdHhfY2gpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJc3BpX21hc3Rlcl9wdXQoaHctPm1hc3Rlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MTU1MF9zcGlfZHJ2ID0geworCS5yZW1vdmUgPSBfX2V4aXRfcChhdTE1NTBfc3BpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYXUxNTUwLXNwaSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdTE1NTBfc3BpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZhdTE1NTBfc3BpX2RydiwgYXUxNTUwX3NwaV9wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChhdTE1NTBfc3BpX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXUxNTUwX3NwaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTU1MF9zcGlfZHJ2KTsKK30KK21vZHVsZV9leGl0KGF1MTU1MF9zcGlfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQXUxNTUwIFBTQyBTUEkgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJKYW4gTmlraXRlbmtvIDxqYW4ubmlraXRlbmtvQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmMzZiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogTVBDNTJ4eCBTUEMgaW4gU1BJIG1vZGUgZHJpdmVyLgorICoKKyAqIE1haW50YWluZXI6IERyYWdvcyBDYXJwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRPUFRJQ0EgUGhvdG9uaWNzIEFHLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorI2luY2x1ZGUgPGFzbS9vZl9wbGF0Zm9ybS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CisjaW5jbHVkZSA8YXNtL21wYzUyeHhfcHNjLmg+CisKKyNkZWZpbmUgTUNMSyAyMDAwMDAwMCAvKiBQU0MgcG9ydCBNQ2xrIGluIGh6ICovCisKK3N0cnVjdCBtcGM1Mnh4X3BzY19zcGkgeworCS8qIGZzbF9zcGlfcGxhdGZvcm0gZGF0YSAqLworCXZvaWQgKCphY3RpdmF0ZV9jcykodTgsIHU4KTsKKwl2b2lkICgqZGVhY3RpdmF0ZV9jcykodTgsIHU4KTsKKwl1MzIgc3lzY2xrOworCisJLyogZHJpdmVyIGludGVybmFsIGRhdGEgKi8KKwlzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqcHNjOworCXVuc2lnbmVkIGludCBpcnE7CisJdTggYml0c19wZXJfd29yZDsKKwl1OCBidXN5OworCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7CisJc3BpbmxvY2tfdCBsb2NrOworCisJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKK307CisKKy8qIGNvbnRyb2xsZXIgc3RhdGUgKi8KK3N0cnVjdCBtcGM1Mnh4X3BzY19zcGlfY3MgeworCWludCBiaXRzX3Blcl93b3JkOworCWludCBzcGVlZF9oejsKK307CisKKy8qIHNldCBjbG9jayBmcmVxLCBjbG9jayByYW1wLCBiaXRzIHBlciB3b3JrCisgKiBpZiB0IGlzIE5VTEwgdGhlbiByZXNldCB0aGUgdmFsdWVzIHRvIHRoZSBkZWZhdWx0IHZhbHVlcworICovCitzdGF0aWMgaW50IG1wYzUyeHhfcHNjX3NwaV90cmFuc2Zlcl9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBtcGM1Mnh4X3BzY19zcGlfY3MgKmNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOworCisJY3MtPnNwZWVkX2h6ID0gKHQgJiYgdC0+c3BlZWRfaHopCisJCQk/IHQtPnNwZWVkX2h6IDogc3BpLT5tYXhfc3BlZWRfaHo7CisJY3MtPmJpdHNfcGVyX3dvcmQgPSAodCAmJiB0LT5iaXRzX3Blcl93b3JkKQorCQkJPyB0LT5iaXRzX3Blcl93b3JkIDogc3BpLT5iaXRzX3Blcl93b3JkOworCWNzLT5iaXRzX3Blcl93b3JkID0gKChjcy0+Yml0c19wZXJfd29yZCArIDcpIC8gOCkgKiA4OworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtcGM1Mnh4X3BzY19zcGlfYWN0aXZhdGVfY3Moc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9wc2Nfc3BpX2NzICpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsKKwlzdHJ1Y3QgbXBjNTJ4eF9wc2Nfc3BpICptcHMgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqcHNjID0gbXBzLT5wc2M7CisJdTMyIHNpY3I7CisJdTE2IGNjcjsKKworCXNpY3IgPSBpbl9iZTMyKCZwc2MtPnNpY3IpOworCisJLyogU2V0IGNsb2NrIHBoYXNlIGFuZCBwb2xhcml0eSAqLworCWlmIChzcGktPm1vZGUgJiBTUElfQ1BIQSkKKwkJc2ljciB8PSAweDAwMDAxMDAwOworCWVsc2UKKwkJc2ljciAmPSB+MHgwMDAwMTAwMDsKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCisJCXNpY3IgfD0gMHgwMDAwMjAwMDsKKwllbHNlCisJCXNpY3IgJj0gfjB4MDAwMDIwMDA7CisKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0xTQl9GSVJTVCkKKwkJc2ljciB8PSAweDEwMDAwMDAwOworCWVsc2UKKwkJc2ljciAmPSB+MHgxMDAwMDAwMDsKKwlvdXRfYmUzMigmcHNjLT5zaWNyLCBzaWNyKTsKKworCS8qIFNldCBjbG9jayBmcmVxdWVuY3kgYW5kIGJpdHMgcGVyIHdvcmQKKwkgKiBCZWNhdXNlIHBzYy0+Y2NyIGlzIGRlZmluZWQgYXMgMTZiaXQgcmVnaXN0ZXIgaW5zdGVhZCBvZiAzMmJpdAorCSAqIGp1c3Qgc2V0IHRoZSBsb3dlciBieXRlIG9mIEJpdENsa0RpdgorCSAqLworCWNjciA9IGluX2JlMTYoJnBzYy0+Y2NyKTsKKwljY3IgJj0gMHhGRjAwOworCWlmIChjcy0+c3BlZWRfaHopCisJCWNjciB8PSAoTUNMSyAvIGNzLT5zcGVlZF9oeiAtIDEpICYgMHhGRjsKKwllbHNlIC8qIGJ5IGRlZmF1bHQgU1BJIENsayAxTUh6ICovCisJCWNjciB8PSAoTUNMSyAvIDEwMDAwMDAgLSAxKSAmIDB4RkY7CisJb3V0X2JlMTYoJnBzYy0+Y2NyLCBjY3IpOworCW1wcy0+Yml0c19wZXJfd29yZCA9IGNzLT5iaXRzX3Blcl93b3JkOworCisJaWYgKG1wcy0+YWN0aXZhdGVfY3MpCisJCW1wcy0+YWN0aXZhdGVfY3Moc3BpLT5jaGlwX3NlbGVjdCwKKwkJCQkoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpID8gMSA6IDApOworfQorCitzdGF0aWMgdm9pZCBtcGM1Mnh4X3BzY19zcGlfZGVhY3RpdmF0ZV9jcyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBtcGM1Mnh4X3BzY19zcGkgKm1wcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJaWYgKG1wcy0+ZGVhY3RpdmF0ZV9jcykKKwkJbXBzLT5kZWFjdGl2YXRlX2NzKHNwaS0+Y2hpcF9zZWxlY3QsCisJCQkJKHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKSA/IDEgOiAwKTsKK30KKworI2RlZmluZSBNUEM1Mnh4X1BTQ19CVUZTSVpFIChNUEM1Mnh4X1BTQ19SRk5VTV9NQVNLICsgMSkKKy8qIHdha2UgdXAgd2hlbiA4MCUgZmlmbyBmdWxsICovCisjZGVmaW5lIE1QQzUyeHhfUFNDX1JGQUxBUk0gKE1QQzUyeHhfUFNDX0JVRlNJWkUgKiAyMCAvIDEwMCkKKworc3RhdGljIGludCBtcGM1Mnh4X3BzY19zcGlfdHJhbnNmZXJfcnh0eChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9wc2Nfc3BpICptcHMgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqcHNjID0gbXBzLT5wc2M7CisJdW5zaWduZWQgcmIgPSAwOwkvKiBudW1iZXIgb2YgYnl0ZXMgcmVjZWlldmVkICovCisJdW5zaWduZWQgc2IgPSAwOwkvKiBudW1iZXIgb2YgYnl0ZXMgc2VudCAqLworCXVuc2lnbmVkIGNoYXIgKnJ4X2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopdC0+cnhfYnVmOworCXVuc2lnbmVkIGNoYXIgKnR4X2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopdC0+dHhfYnVmOworCXVuc2lnbmVkIHJmYWxhcm07CisJdW5zaWduZWQgc2VuZF9hdF9vbmNlID0gTVBDNTJ4eF9QU0NfQlVGU0laRTsKKwl1bnNpZ25lZCByZWN2X2F0X29uY2U7CisJdW5zaWduZWQgYnB3ID0gbXBzLT5iaXRzX3Blcl93b3JkIC8gODsKKworCWlmICghdC0+dHhfYnVmICYmICF0LT5yeF9idWYgJiYgdC0+bGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGVuYWJsZSB0cmFuc21pdGVyL3JlY2VpdmVyICovCisJb3V0XzgoJnBzYy0+Y29tbWFuZCwgTVBDNTJ4eF9QU0NfVFhfRU5BQkxFIHwgTVBDNTJ4eF9QU0NfUlhfRU5BQkxFKTsKKwl3aGlsZSAocmIgPCB0LT5sZW4pIHsKKwkJaWYgKHQtPmxlbiAtIHJiID4gTVBDNTJ4eF9QU0NfQlVGU0laRSkgeworCQkJcmZhbGFybSA9IE1QQzUyeHhfUFNDX1JGQUxBUk07CisJCX0gZWxzZSB7CisJCQlzZW5kX2F0X29uY2UgPSB0LT5sZW4gLSBzYjsKKwkJCXJmYWxhcm0gPSBNUEM1Mnh4X1BTQ19CVUZTSVpFIC0gKHQtPmxlbiAtIHJiKTsKKwkJfQorCisJCWRldl9kYmcoJnNwaS0+ZGV2LCAic2VuZCAlZCBieXRlcy4uLlxuIiwgc2VuZF9hdF9vbmNlKTsKKwkJaWYgKHR4X2J1ZikgeworCQkJZm9yICg7IHNlbmRfYXRfb25jZTsgc2IrKywgc2VuZF9hdF9vbmNlLS0pIHsKKwkJCQkvKiBzZXQgRU9GIGZsYWcgKi8KKwkJCQlpZiAobXBzLT5iaXRzX3Blcl93b3JkCisJCQkJCQkmJiAoc2IgKyAxKSAlIGJwdyA9PSAwKQorCQkJCQlvdXRfOCgmcHNjLT5pcmNyMiwgMHgwMSk7CisJCQkJb3V0XzgoJnBzYy0+bXBjNTJ4eF9wc2NfYnVmZmVyXzgsIHR4X2J1ZltzYl0pOworCQkJfQorCQl9IGVsc2UgeworCQkJZm9yICg7IHNlbmRfYXRfb25jZTsgc2IrKywgc2VuZF9hdF9vbmNlLS0pIHsKKwkJCQkvKiBzZXQgRU9GIGZsYWcgKi8KKwkJCQlpZiAobXBzLT5iaXRzX3Blcl93b3JkCisJCQkJCQkmJiAoKHNiICsgMSkgJSBicHcpID09IDApCisJCQkJCW91dF84KCZwc2MtPmlyY3IyLCAweDAxKTsKKwkJCQlvdXRfOCgmcHNjLT5tcGM1Mnh4X3BzY19idWZmZXJfOCwgMCk7CisJCQl9CisJCX0KKworCisJCS8qIGVuYWJsZSBpbnRlcnVwdHMgYW5kIHdhaXQgZm9yIHdha2UgdXAKKwkJICogaWYganVzdCBvbmUgYnl0ZSBpcyBleHBlY3RlZCB0aGUgUnggRklGTyBnZW5lcmVyYXRlcyBubworCQkgKiBGRlVMTCBpbnRlcnJ1cHQsIHNvIGFjdGl2YXRlIHRoZSBSeFJEWSBpbnRlcnJ1cHQKKwkJICovCisJCW91dF84KCZwc2MtPmNvbW1hbmQsIE1QQzUyeHhfUFNDX1NFTF9NT0RFX1JFR18xKTsKKwkJaWYgKHQtPmxlbiAtIHJiID09IDEpIHsKKwkJCW91dF84KCZwc2MtPm1vZGUsIDApOworCQl9IGVsc2UgeworCQkJb3V0XzgoJnBzYy0+bW9kZSwgTVBDNTJ4eF9QU0NfTU9ERV9GRlVMTCk7CisJCQlvdXRfYmUxNigmcHNjLT5yZmFsYXJtLCByZmFsYXJtKTsKKwkJfQorCQlvdXRfYmUxNigmcHNjLT5tcGM1Mnh4X3BzY19pbXIsIE1QQzUyeHhfUFNDX0lNUl9SWFJEWSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1wcy0+ZG9uZSk7CisJCXJlY3ZfYXRfb25jZSA9IGluX2JlMTYoJnBzYy0+cmZudW0pOworCQlkZXZfZGJnKCZzcGktPmRldiwgIiVkIGJ5dGVzIHJlY2VpdmVkXG4iLCByZWN2X2F0X29uY2UpOworCisJCXNlbmRfYXRfb25jZSA9IHJlY3ZfYXRfb25jZTsKKwkJaWYgKHJ4X2J1ZikgeworCQkJZm9yICg7IHJlY3ZfYXRfb25jZTsgcmIrKywgcmVjdl9hdF9vbmNlLS0pCisJCQkJcnhfYnVmW3JiXSA9IGluXzgoJnBzYy0+bXBjNTJ4eF9wc2NfYnVmZmVyXzgpOworCQl9IGVsc2UgeworCQkJZm9yICg7IHJlY3ZfYXRfb25jZTsgcmIrKywgcmVjdl9hdF9vbmNlLS0pCisJCQkJaW5fOCgmcHNjLT5tcGM1Mnh4X3BzY19idWZmZXJfOCk7CisJCX0KKwl9CisJLyogZGlzYWJsZSB0cmFuc21pdGVyL3JlY2VpdmVyICovCisJb3V0XzgoJnBzYy0+Y29tbWFuZCwgTVBDNTJ4eF9QU0NfVFhfRElTQUJMRSB8IE1QQzUyeHhfUFNDX1JYX0RJU0FCTEUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzUyeHhfcHNjX3NwaV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9wc2Nfc3BpICptcHMgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1wYzUyeHhfcHNjX3NwaSwgd29yayk7CisKKwlzcGluX2xvY2tfaXJxKCZtcHMtPmxvY2spOworCW1wcy0+YnVzeSA9IDE7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZtcHMtPnF1ZXVlKSkgeworCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm07CisJCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CisJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQgPSBOVUxMOworCQl1bnNpZ25lZCBjc19jaGFuZ2U7CisJCWludCBzdGF0dXM7CisKKwkJbSA9IGNvbnRhaW5lcl9vZihtcHMtPnF1ZXVlLm5leHQsIHN0cnVjdCBzcGlfbWVzc2FnZSwgcXVldWUpOworCQlsaXN0X2RlbF9pbml0KCZtLT5xdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycSgmbXBzLT5sb2NrKTsKKworCQlzcGkgPSBtLT5zcGk7CisJCWNzX2NoYW5nZSA9IDE7CisJCXN0YXR1cyA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkgKHQsICZtLT50cmFuc2ZlcnMsIHRyYW5zZmVyX2xpc3QpIHsKKwkJCWlmICh0LT5iaXRzX3Blcl93b3JkIHx8IHQtPnNwZWVkX2h6KSB7CisJCQkJc3RhdHVzID0gbXBjNTJ4eF9wc2Nfc3BpX3RyYW5zZmVyX3NldHVwKHNwaSwgdCk7CisJCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoY3NfY2hhbmdlKQorCQkJCW1wYzUyeHhfcHNjX3NwaV9hY3RpdmF0ZV9jcyhzcGkpOworCQkJY3NfY2hhbmdlID0gdC0+Y3NfY2hhbmdlOworCisJCQlzdGF0dXMgPSBtcGM1Mnh4X3BzY19zcGlfdHJhbnNmZXJfcnh0eChzcGksIHQpOworCQkJaWYgKHN0YXR1cykKKwkJCQlicmVhazsKKwkJCW0tPmFjdHVhbF9sZW5ndGggKz0gdC0+bGVuOworCisJCQlpZiAodC0+ZGVsYXlfdXNlY3MpCisJCQkJdWRlbGF5KHQtPmRlbGF5X3VzZWNzKTsKKworCQkJaWYgKGNzX2NoYW5nZSkKKwkJCQltcGM1Mnh4X3BzY19zcGlfZGVhY3RpdmF0ZV9jcyhzcGkpOworCQl9CisKKwkJbS0+c3RhdHVzID0gc3RhdHVzOworCQltLT5jb21wbGV0ZShtLT5jb250ZXh0KTsKKworCQlpZiAoc3RhdHVzIHx8ICFjc19jaGFuZ2UpCisJCQltcGM1Mnh4X3BzY19zcGlfZGVhY3RpdmF0ZV9jcyhzcGkpOworCisJCW1wYzUyeHhfcHNjX3NwaV90cmFuc2Zlcl9zZXR1cChzcGksIE5VTEwpOworCisJCXNwaW5fbG9ja19pcnEoJm1wcy0+bG9jayk7CisJfQorCW1wcy0+YnVzeSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKCZtcHMtPmxvY2spOworfQorCitzdGF0aWMgaW50IG1wYzUyeHhfcHNjX3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBtcGM1Mnh4X3BzY19zcGkgKm1wcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXN0cnVjdCBtcGM1Mnh4X3BzY19zcGlfY3MgKmNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoc3BpLT5iaXRzX3Blcl93b3JkJTgpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFjcykgeworCQljcyA9IGt6YWxsb2Moc2l6ZW9mICpjcywgR0ZQX0tFUk5FTCk7CisJCWlmICghY3MpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJc3BpLT5jb250cm9sbGVyX3N0YXRlID0gY3M7CisJfQorCisJY3MtPmJpdHNfcGVyX3dvcmQgPSBzcGktPmJpdHNfcGVyX3dvcmQ7CisJY3MtPnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXBzLT5sb2NrLCBmbGFncyk7CisJaWYgKCFtcHMtPmJ1c3kpCisJCW1wYzUyeHhfcHNjX3NwaV9kZWFjdGl2YXRlX2NzKHNwaSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBzLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1Mnh4X3BzY19zcGlfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJc3RydWN0IHNwaV9tZXNzYWdlICptKQoreworCXN0cnVjdCBtcGM1Mnh4X3BzY19zcGkgKm1wcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwltLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXBzLT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmbS0+cXVldWUsICZtcHMtPnF1ZXVlKTsKKwlxdWV1ZV93b3JrKG1wcy0+d29ya3F1ZXVlLCAmbXBzLT53b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcHMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtcGM1Mnh4X3BzY19zcGlfY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWtmcmVlKHNwaS0+Y29udHJvbGxlcl9zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTJ4eF9wc2Nfc3BpX3BvcnRfY29uZmlnKGludCBwc2NfaWQsIHN0cnVjdCBtcGM1Mnh4X3BzY19zcGkgKm1wcykKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9jZG0gX19pb21lbSAqY2RtOworCXN0cnVjdCBtcGM1Mnh4X2dwaW8gX19pb21lbSAqZ3BpbzsKKwlzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqcHNjID0gbXBzLT5wc2M7CisJdTMyIHVsOworCXUzMiBtY2xrZW5fZGl2OworCWludCByZXQgPSAwOworCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorCWNkbSA9IG1wYzUyeHhfZmluZF9hbmRfbWFwKCJtcGM1MjAwLWNkbSIpOworCWdwaW8gPSBtcGM1Mnh4X2ZpbmRfYW5kX21hcCgibXBjNTIwMC1ncGlvIik7CisjZWxzZQorCWNkbSA9IGlvcmVtYXAoTVBDNTJ4eF9QQShNUEM1Mnh4X0NETV9PRkZTRVQpLCBNUEM1Mnh4X0NETV9TSVpFKTsKKwlncGlvID0gaW9yZW1hcChNUEM1Mnh4X1BBKE1QQzUyeHhfR1BJT19PRkZTRVQpLCBNUEM1Mnh4X0dQSU9fU0laRSk7CisjZW5kaWYKKwlpZiAoIWNkbSB8fCAhZ3BpbykgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIG1hcHBpbmcgQ0RNL0dQSU9cbiIpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIHVubWFwX3JlZ3M7CisJfQorCisJLyogZGVmYXVsdCBzeXNjbGsgaXMgNTEyTUh6ICovCisJbWNsa2VuX2RpdiA9IDB4ODAwMCB8CisJCSgoKG1wcy0+c3lzY2xrID8gbXBzLT5zeXNjbGsgOiA1MTIwMDAwMDApIC8gTUNMSykgJiAweDFGRik7CisKKwlzd2l0Y2ggKHBzY19pZCkgeworCWNhc2UgMToKKwkJdWwgPSBpbl9iZTMyKCZncGlvLT5wb3J0X2NvbmZpZyk7CisJCXVsICY9IDB4RkZGRkZGRjg7CisJCXVsIHw9IDB4MDAwMDAwMDY7CisJCW91dF9iZTMyKCZncGlvLT5wb3J0X2NvbmZpZywgdWwpOworCQlvdXRfYmUxNigmY2RtLT5tY2xrZW5fZGl2X3BzYzEsIG1jbGtlbl9kaXYpOworCQl1bCA9IGluX2JlMzIoJmNkbS0+Y2xrX2VuYWJsZXMpOworCQl1bCB8PSAweDAwMDAwMDIwOworCQlvdXRfYmUzMigmY2RtLT5jbGtfZW5hYmxlcywgdWwpOworCQlicmVhazsKKwljYXNlIDI6CisJCXVsID0gaW5fYmUzMigmZ3Bpby0+cG9ydF9jb25maWcpOworCQl1bCAmPSAweEZGRkZGRjhGOworCQl1bCB8PSAweDAwMDAwMDYwOworCQlvdXRfYmUzMigmZ3Bpby0+cG9ydF9jb25maWcsIHVsKTsKKwkJb3V0X2JlMTYoJmNkbS0+bWNsa2VuX2Rpdl9wc2MyLCBtY2xrZW5fZGl2KTsKKwkJdWwgPSBpbl9iZTMyKCZjZG0tPmNsa19lbmFibGVzKTsKKwkJdWwgfD0gMHgwMDAwMDA0MDsKKwkJb3V0X2JlMzIoJmNkbS0+Y2xrX2VuYWJsZXMsIHVsKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl1bCA9IGluX2JlMzIoJmdwaW8tPnBvcnRfY29uZmlnKTsKKwkJdWwgJj0gMHhGRkZGRjBGRjsKKwkJdWwgfD0gMHgwMDAwMDYwMDsKKwkJb3V0X2JlMzIoJmdwaW8tPnBvcnRfY29uZmlnLCB1bCk7CisJCW91dF9iZTE2KCZjZG0tPm1jbGtlbl9kaXZfcHNjMywgbWNsa2VuX2Rpdik7CisJCXVsID0gaW5fYmUzMigmY2RtLT5jbGtfZW5hYmxlcyk7CisJCXVsIHw9IDB4MDAwMDAwODA7CisJCW91dF9iZTMyKCZjZG0tPmNsa19lbmFibGVzLCB1bCk7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJdWwgPSBpbl9iZTMyKCZncGlvLT5wb3J0X2NvbmZpZyk7CisJCXVsICY9IDB4RkY4RkZGRkY7CisJCXVsIHw9IDB4MDA3MDAwMDA7CisJCW91dF9iZTMyKCZncGlvLT5wb3J0X2NvbmZpZywgdWwpOworCQlvdXRfYmUxNigmY2RtLT5tY2xrZW5fZGl2X3BzYzYsIG1jbGtlbl9kaXYpOworCQl1bCA9IGluX2JlMzIoJmNkbS0+Y2xrX2VuYWJsZXMpOworCQl1bCB8PSAweDAwMDAwMDEwOworCQlvdXRfYmUzMigmY2RtLT5jbGtfZW5hYmxlcywgdWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHVubWFwX3JlZ3M7CisJfQorCisJLyogUmVzZXQgdGhlIFBTQyBpbnRvIGEga25vd24gc3RhdGUgKi8KKwlvdXRfOCgmcHNjLT5jb21tYW5kLCBNUEM1Mnh4X1BTQ19SU1RfUlgpOworCW91dF84KCZwc2MtPmNvbW1hbmQsIE1QQzUyeHhfUFNDX1JTVF9UWCk7CisJb3V0XzgoJnBzYy0+Y29tbWFuZCwgTVBDNTJ4eF9QU0NfVFhfRElTQUJMRSB8IE1QQzUyeHhfUFNDX1JYX0RJU0FCTEUpOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzLCBpbnRlcnJ1cHRzIGFyZSBiYXNlZCBvbiBhbGFybSBsZXZlbCAqLworCW91dF9iZTE2KCZwc2MtPm1wYzUyeHhfcHNjX2ltciwgMCk7CisJb3V0XzgoJnBzYy0+Y29tbWFuZCwgTVBDNTJ4eF9QU0NfU0VMX01PREVfUkVHXzEpOworCW91dF84KCZwc2MtPnJmY250bCwgMCk7CisJb3V0XzgoJnBzYy0+bW9kZSwgTVBDNTJ4eF9QU0NfTU9ERV9GRlVMTCk7CisKKwkvKiBDb25maWd1cmUgOGJpdCBjb2RlYyBtb2RlIGFzIGEgU1BJIG1hc3RlciBhbmQgdXNlIEVPRiBmbGFncyAqLworCS8qIFNJQ1JfU0lNX0NPREVDOHxTSUNSX0dFTkNMS3xTSUNSX1NQSXxTSUNSX01TVFJ8U0lDUl9VU0VFT0YgKi8KKwlvdXRfYmUzMigmcHNjLT5zaWNyLCAweDAxODBDODAwKTsKKwlvdXRfYmUxNigmcHNjLT5jY3IsIDB4MDcwRik7IC8qIGJ5IGRlZmF1bHQgU1BJIENsayAxTUh6ICovCisKKwkvKiBTZXQgMm1zIERUTCBkZWxheSAqLworCW91dF84KCZwc2MtPmN0dXIsIDB4MDApOworCW91dF84KCZwc2MtPmN0bHIsIDB4ODQpOworCisJbXBzLT5iaXRzX3Blcl93b3JkID0gODsKKwordW5tYXBfcmVnczoKKwlpZiAoY2RtKQorCQlpb3VubWFwKGNkbSk7CisJaWYgKGdwaW8pCisJCWlvdW5tYXAoZ3Bpbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXBjNTJ4eF9wc2Nfc3BpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG1wYzUyeHhfcHNjX3NwaSAqbXBzID0gKHN0cnVjdCBtcGM1Mnh4X3BzY19zcGkgKilkZXZfaWQ7CisJc3RydWN0IG1wYzUyeHhfcHNjIF9faW9tZW0gKnBzYyA9IG1wcy0+cHNjOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHQgYW5kIHdha2UgdXAgdGhlIHdvcmsgcXVldWUgKi8KKwlpZiAoaW5fYmUxNigmcHNjLT5tcGM1Mnh4X3BzY19pc3IpICYgTVBDNTJ4eF9QU0NfSU1SX1JYUkRZKSB7CisJCW91dF9iZTE2KCZwc2MtPm1wYzUyeHhfcHNjX2ltciwgMCk7CisJCWNvbXBsZXRlKCZtcHMtPmRvbmUpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCXJldHVybiBJUlFfTk9ORTsKK30KKworLyogYnVzX251bSBpcyB1c2VkIG9ubHkgZm9yIHRoZSBjYXNlIGRldi0+cGxhdGZvcm1fZGF0YSA9PSBOVUxMICovCitzdGF0aWMgaW50IF9faW5pdCBtcGM1Mnh4X3BzY19zcGlfZG9fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgcmVnYWRkciwKKwkJCQl1MzIgc2l6ZSwgdW5zaWduZWQgaW50IGlycSwgczE2IGJ1c19udW0pCit7CisJc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1wYzUyeHhfcHNjX3NwaSAqbXBzOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJaW50IHJldDsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoZGV2LCBzaXplb2YgKm1wcyk7CisJaWYgKG1hc3RlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1hc3Rlcik7CisJbXBzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJbXBzLT5pcnEgPSBpcnE7CisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJZGV2X3dhcm4oZGV2LCAicHJvYmUgY2FsbGVkIHdpdGhvdXQgcGxhdGZvcm0gZGF0YSwgbm8gIgorCQkJCSIoZGUpYWN0aXZhdGVfY3MgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWRcbiIpOworCQltcHMtPmFjdGl2YXRlX2NzID0gTlVMTDsKKwkJbXBzLT5kZWFjdGl2YXRlX2NzID0gTlVMTDsKKwkJbXBzLT5zeXNjbGsgPSAwOworCQltYXN0ZXItPmJ1c19udW0gPSBidXNfbnVtOworCQltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gMjU1OworCX0gZWxzZSB7CisJCW1wcy0+YWN0aXZhdGVfY3MgPSBwZGF0YS0+YWN0aXZhdGVfY3M7CisJCW1wcy0+ZGVhY3RpdmF0ZV9jcyA9IHBkYXRhLT5kZWFjdGl2YXRlX2NzOworCQltcHMtPnN5c2NsayA9IHBkYXRhLT5zeXNjbGs7CisJCW1hc3Rlci0+YnVzX251bSA9IHBkYXRhLT5idXNfbnVtOworCQltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gcGRhdGEtPm1heF9jaGlwc2VsZWN0OworCX0KKwltYXN0ZXItPnNldHVwID0gbXBjNTJ4eF9wc2Nfc3BpX3NldHVwOworCW1hc3Rlci0+dHJhbnNmZXIgPSBtcGM1Mnh4X3BzY19zcGlfdHJhbnNmZXI7CisJbWFzdGVyLT5jbGVhbnVwID0gbXBjNTJ4eF9wc2Nfc3BpX2NsZWFudXA7CisKKwltcHMtPnBzYyA9IGlvcmVtYXAocmVnYWRkciwgc2l6ZSk7CisJaWYgKCFtcHMtPnBzYykgeworCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBpb3JlbWFwIEkvTyBwb3J0IHJhbmdlXG4iKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBmcmVlX21hc3RlcjsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShtcHMtPmlycSwgbXBjNTJ4eF9wc2Nfc3BpX2lzciwgMCwgIm1wYzUyeHgtcHNjLXNwaSIsCisJCQkJbXBzKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfbWFzdGVyOworCisJcmV0ID0gbXBjNTJ4eF9wc2Nfc3BpX3BvcnRfY29uZmlnKG1hc3Rlci0+YnVzX251bSwgbXBzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmcmVlX2lycTsKKworCXNwaW5fbG9ja19pbml0KCZtcHMtPmxvY2spOworCWluaXRfY29tcGxldGlvbigmbXBzLT5kb25lKTsKKwlJTklUX1dPUksoJm1wcy0+d29yaywgbXBjNTJ4eF9wc2Nfc3BpX3dvcmspOworCUlOSVRfTElTVF9IRUFEKCZtcHMtPnF1ZXVlKTsKKworCW1wcy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCisJCW1hc3Rlci0+Y2Rldi5kZXYtPmJ1c19pZCk7CisJaWYgKG1wcy0+d29ya3F1ZXVlID09IE5VTEwpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGZyZWVfaXJxOworCX0KKworCXJldCA9IHNwaV9yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB1bnJlZ19tYXN0ZXI7CisKKwlyZXR1cm4gcmV0OworCit1bnJlZ19tYXN0ZXI6CisJZGVzdHJveV93b3JrcXVldWUobXBzLT53b3JrcXVldWUpOworZnJlZV9pcnE6CisJZnJlZV9pcnEobXBzLT5pcnEsIG1wcyk7CitmcmVlX21hc3RlcjoKKwlpZiAobXBzLT5wc2MpCisJCWlvdW5tYXAobXBzLT5wc2MpOworCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBtcGM1Mnh4X3BzY19zcGlfZG9fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUyeHhfcHNjX3NwaSAqbXBzID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJZmx1c2hfd29ya3F1ZXVlKG1wcy0+d29ya3F1ZXVlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShtcHMtPndvcmtxdWV1ZSk7CisJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisJZnJlZV9pcnEobXBzLT5pcnEsIG1wcyk7CisJaWYgKG1wcy0+cHNjKQorCQlpb3VubWFwKG1wcy0+cHNjKTsKKworCXJldHVybiAwOworfQorCisjaWYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKK3N0YXRpYyBpbnQgX19pbml0IG1wYzUyeHhfcHNjX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3dpdGNoKGRldi0+aWQpIHsKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgMzoKKwljYXNlIDY6CisJCXJldHVybiBtcGM1Mnh4X3BzY19zcGlfZG9fcHJvYmUoJmRldi0+ZGV2LAorCQkJTVBDNTJ4eF9QQShNUEM1Mnh4X1BTQ3hfT0ZGU0VUKGRldi0+aWQpKSwKKwkJCU1QQzUyeHhfUFNDX1NJWkUsIHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKSwgZGV2LT5pZCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IF9fZXhpdCBtcGM1Mnh4X3BzY19zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbXBjNTJ4eF9wc2Nfc3BpX2RvX3JlbW92ZSgmZGV2LT5kZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcGM1Mnh4X3BzY19zcGlfcGxhdGZvcm1fZHJpdmVyID0geworCS5yZW1vdmUgPSBfX2V4aXRfcChtcGM1Mnh4X3BzY19zcGlfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtcGM1Mnh4LXBzYy1zcGkiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXBjNTJ4eF9wc2Nfc3BpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZtcGM1Mnh4X3BzY19zcGlfcGxhdGZvcm1fZHJpdmVyLAorCQkJbXBjNTJ4eF9wc2Nfc3BpX3Byb2JlKTsKK30KK21vZHVsZV9pbml0KG1wYzUyeHhfcHNjX3NwaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1wYzUyeHhfcHNjX3NwaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wYzUyeHhfcHNjX3NwaV9wbGF0Zm9ybV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobXBjNTJ4eF9wc2Nfc3BpX2V4aXQpOworCisjZWxzZQkvKiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpICovCisKK3N0YXRpYyBpbnQgX19pbml0IG1wYzUyeHhfcHNjX3NwaV9vZl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwljb25zdCB1MzIgKnJlZ2FkZHJfcDsKKwl1NjQgcmVnYWRkcjY0LCBzaXplNjQ7CisJczE2IGlkID0gLTE7CisKKwlyZWdhZGRyX3AgPSBvZl9nZXRfYWRkcmVzcyhvcC0+bm9kZSwgMCwgJnNpemU2NCwgTlVMTCk7CisJaWYgKCFyZWdhZGRyX3ApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIFBTQyBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJlZ2FkZHI2NCA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG9wLT5ub2RlLCByZWdhZGRyX3ApOworCisJLyogZ2V0IFBTQyBpZCAoMS4uNiwgdXNlZCBieSBwb3J0X2NvbmZpZykgKi8KKwlpZiAob3AtPmRldi5wbGF0Zm9ybV9kYXRhID09IE5VTEwpIHsKKwkJY29uc3QgdTMyICpwc2NfbnVtcDsKKworCQlwc2NfbnVtcCA9IG9mX2dldF9wcm9wZXJ0eShvcC0+bm9kZSwgImNlbGwtaW5kZXgiLCBOVUxMKTsKKwkJaWYgKCFwc2NfbnVtcCB8fCAqcHNjX251bXAgPiA1KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIm1wYzUyeHhfcHNjX3NwaTogRGV2aWNlIG5vZGUgJXMgaGFzIGludmFsaWQgIgorCQkJCQkiY2VsbC1pbmRleCBwcm9wZXJ0eVxuIiwgb3AtPm5vZGUtPmZ1bGxfbmFtZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZCA9ICpwc2NfbnVtcCArIDE7CisJfQorCisJcmV0dXJuIG1wYzUyeHhfcHNjX3NwaV9kb19wcm9iZSgmb3AtPmRldiwgKHUzMilyZWdhZGRyNjQsICh1MzIpc2l6ZTY0LAorCQkJCQlpcnFfb2ZfcGFyc2VfYW5kX21hcChvcC0+bm9kZSwgMCksIGlkKTsKK30KKworc3RhdGljIGludCBfX2V4aXQgbXBjNTJ4eF9wc2Nfc3BpX29mX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3sKKwlyZXR1cm4gbXBjNTJ4eF9wc2Nfc3BpX2RvX3JlbW92ZSgmb3AtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfcHNjX3NwaV9vZl9tYXRjaFtdID0geworCXsgLnR5cGUgPSAic3BpIiwgLmNvbXBhdGlibGUgPSAibXBjNTIwMC1wc2Mtc3BpIiwgfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1wYzUyeHhfcHNjX3NwaV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG1wYzUyeHhfcHNjX3NwaV9vZl9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAibXBjNTJ4eC1wc2Mtc3BpIiwKKwkubWF0Y2hfdGFibGUgPSBtcGM1Mnh4X3BzY19zcGlfb2ZfbWF0Y2gsCisJLnByb2JlID0gbXBjNTJ4eF9wc2Nfc3BpX29mX3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcChtcGM1Mnh4X3BzY19zcGlfb2ZfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtcGM1Mnh4LXBzYy1zcGkiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXBjNTJ4eF9wc2Nfc3BpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X3BzY19zcGlfb2ZfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KG1wYzUyeHhfcHNjX3NwaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1wYzUyeHhfcHNjX3NwaV9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfcHNjX3NwaV9vZl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobXBjNTJ4eF9wc2Nfc3BpX2V4aXQpOworCisjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKSAqLworCitNT0RVTEVfQVVUSE9SKCJEcmFnb3MgQ2FycCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNUEM1Mnh4IFBTQyBTUEkgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMgYi9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKaW5kZXggOTZmNjJiMi4uOTUxODNlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwpAQCAtMzU4LDExICszNTgsMTEgQEAKIAlzd2l0Y2ggKHNwaS0+bW9kZSAmIChTUElfQ1BPTCB8IFNQSV9DUEhBKSkgewogCWNhc2UgU1BJX01PREVfMDoKIAljYXNlIFNQSV9NT0RFXzM6Ci0JCWZsYWdzIHw9IFVXSVJFX1dSSVRFX1JJU0lOR19FREdFIHwgVVdJUkVfUkVBRF9GQUxMSU5HX0VER0U7CisJCWZsYWdzIHw9IFVXSVJFX1dSSVRFX0ZBTExJTkdfRURHRSB8IFVXSVJFX1JFQURfUklTSU5HX0VER0U7CiAJCWJyZWFrOwogCWNhc2UgU1BJX01PREVfMToKIAljYXNlIFNQSV9NT0RFXzI6Ci0JCWZsYWdzIHw9IFVXSVJFX1dSSVRFX0ZBTExJTkdfRURHRSB8IFVXSVJFX1JFQURfUklTSU5HX0VER0U7CisJCWZsYWdzIHw9IFVXSVJFX1dSSVRFX1JJU0lOR19FREdFIHwgVVdJUkVfUkVBRF9GQUxMSU5HX0VER0U7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGkuYwppbmRleCA2NjU3MzMxLi40ODMxZWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGkuYwpAQCAtMTUyLDYgKzE1MiwxMSBAQAogCXNkcnYtPnNodXRkb3duKHRvX3NwaV9kZXZpY2UoZGV2KSk7CiB9CiAKKy8qKgorICogc3BpX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgU1BJIGRyaXZlcgorICogQHNkcnY6IHRoZSBkcml2ZXIgdG8gcmVnaXN0ZXIKKyAqIENvbnRleHQ6IGNhbiBzbGVlcAorICovCiBpbnQgc3BpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc3BpX2RyaXZlciAqc2RydikKIHsKIAlzZHJ2LT5kcml2ZXIuYnVzID0gJnNwaV9idXNfdHlwZTsKQEAgLTE4Myw3ICsxODgsMTMgQEAKIHN0YXRpYyBERUNMQVJFX01VVEVYKGJvYXJkX2xvY2spOwogCiAKLS8qIE9uIHR5cGljYWwgbWFpbmJvYXJkcywgdGhpcyBpcyBwdXJlbHkgaW50ZXJuYWw7IGFuZCBpdCdzIG5vdCBuZWVkZWQKKy8qKgorICogc3BpX25ld19kZXZpY2UgLSBpbnN0YW50aWF0ZSBvbmUgbmV3IFNQSSBkZXZpY2UKKyAqIEBtYXN0ZXI6IENvbnRyb2xsZXIgdG8gd2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZAorICogQGNoaXA6IERlc2NyaWJlcyB0aGUgU1BJIGRldmljZQorICogQ29udGV4dDogY2FuIHNsZWVwCisgKgorICogT24gdHlwaWNhbCBtYWluYm9hcmRzLCB0aGlzIGlzIHB1cmVseSBpbnRlcm5hbDsgYW5kIGl0J3Mgbm90IG5lZWRlZAogICogYWZ0ZXIgYm9hcmQgaW5pdCBjcmVhdGVzIHRoZSBoYXJkLXdpcmVkIGRldmljZXMuICBTb21lIGRldmVsb3BtZW50CiAgKiBwbGF0Zm9ybXMgbWF5IG5vdCBiZSBhYmxlIHRvIHVzZSBzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyB0aG91Z2gsIGFuZAogICogdGhpcyBpcyBleHBvcnRlZCBzbyB0aGF0IGZvciBleGFtcGxlIGEgVVNCIG9yIHBhcnBvcnQgYmFzZWQgYWRhcHRlcgpAQCAtMjUxLDcgKzI2MiwxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3BpX25ld19kZXZpY2UpOwogCi0vKgorLyoqCisgKiBzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyAtIHJlZ2lzdGVyIFNQSSBkZXZpY2VzIGZvciBhIGdpdmVuIGJvYXJkCisgKiBAaW5mbzogYXJyYXkgb2YgY2hpcCBkZXNjcmlwdG9ycworICogQG46IGhvdyBtYW55IGRlc2NyaXB0b3JzIGFyZSBwcm92aWRlZAorICogQ29udGV4dDogY2FuIHNsZWVwCisgKgogICogQm9hcmQtc3BlY2lmaWMgZWFybHkgaW5pdCBjb2RlIGNhbGxzIHRoaXMgKHByb2JhYmx5IGR1cmluZyBhcmNoX2luaXRjYWxsKQogICogd2l0aCBzZWdtZW50cyBvZiB0aGUgU1BJIGRldmljZSB0YWJsZS4gIEFueSBkZXZpY2Ugbm9kZXMgYXJlIGNyZWF0ZWQgbGF0ZXIsCiAgKiBhZnRlciB0aGUgcmVsZXZhbnQgcGFyZW50IFNQSSBjb250cm9sbGVyIChidXNfbnVtKSBpcyBkZWZpbmVkLiAgV2Uga2VlcApAQCAtMzM3LDkgKzM1MywxMCBAQAogLyoqCiAgKiBzcGlfYWxsb2NfbWFzdGVyIC0gYWxsb2NhdGUgU1BJIG1hc3RlciBjb250cm9sbGVyCiAgKiBAZGV2OiB0aGUgY29udHJvbGxlciwgcG9zc2libHkgdXNpbmcgdGhlIHBsYXRmb3JtX2J1cwotICogQHNpemU6IGhvdyBtdWNoIGRyaXZlci1wcml2YXRlIGRhdGEgdG8gcHJlYWxsb2NhdGU7IHRoZSBwb2ludGVyIHRvIHRoaXMKKyAqIEBzaXplOiBob3cgbXVjaCB6ZXJvZWQgZHJpdmVyLXByaXZhdGUgZGF0YSB0byBhbGxvY2F0ZTsgdGhlIHBvaW50ZXIgdG8gdGhpcwogICoJbWVtb3J5IGlzIGluIHRoZSBjbGFzc19kYXRhIGZpZWxkIG9mIHRoZSByZXR1cm5lZCBjbGFzc19kZXZpY2UsCiAgKglhY2Nlc3NpYmxlIHdpdGggc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YSgpLgorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogVGhpcyBjYWxsIGlzIHVzZWQgb25seSBieSBTUEkgbWFzdGVyIGNvbnRyb2xsZXIgZHJpdmVycywgd2hpY2ggYXJlIHRoZQogICogb25seSBvbmVzIGRpcmVjdGx5IHRvdWNoaW5nIGNoaXAgcmVnaXN0ZXJzLiAgSXQncyBob3cgdGhleSBhbGxvY2F0ZQpAQCAtMzc1LDYgKzM5Miw3IEBACiAvKioKICAqIHNwaV9yZWdpc3Rlcl9tYXN0ZXIgLSByZWdpc3RlciBTUEkgbWFzdGVyIGNvbnRyb2xsZXIKICAqIEBtYXN0ZXI6IGluaXRpYWxpemVkIG1hc3Rlciwgb3JpZ2luYWxseSBmcm9tIHNwaV9hbGxvY19tYXN0ZXIoKQorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogU1BJIG1hc3RlciBjb250cm9sbGVycyBjb25uZWN0IHRvIHRoZWlyIGRyaXZlcnMgdXNpbmcgc29tZSBub24tU1BJIGJ1cywKICAqIHN1Y2ggYXMgdGhlIHBsYXRmb3JtIGJ1cy4gIFRoZSBmaW5hbCBzdGFnZSBvZiBwcm9iZSgpIGluIHRoYXQgY29kZQpAQCAtMzkzLDcgKzQxMSw3IEBACiAgKi8KIGludCBzcGlfcmVnaXN0ZXJfbWFzdGVyKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIpCiB7Ci0Jc3RhdGljIGF0b21pY190CQlkeW5fYnVzX2lkID0gQVRPTUlDX0lOSVQoKDE8PDE2KSAtIDEpOworCXN0YXRpYyBhdG9taWNfdAkJZHluX2J1c19pZCA9IEFUT01JQ19JTklUKCgxPDwxNSkgLSAxKTsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2ID0gbWFzdGVyLT5jZGV2LmRldjsKIAlpbnQJCQlzdGF0dXMgPSAtRU5PREVWOwogCWludAkJCWR5bmFtaWMgPSAwOwpAQCAtNDM3LDYgKzQ1NSw3IEBACiAvKioKICAqIHNwaV91bnJlZ2lzdGVyX21hc3RlciAtIHVucmVnaXN0ZXIgU1BJIG1hc3RlciBjb250cm9sbGVyCiAgKiBAbWFzdGVyOiB0aGUgbWFzdGVyIGJlaW5nIHVucmVnaXN0ZXJlZAorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogVGhpcyBjYWxsIGlzIHVzZWQgb25seSBieSBTUEkgbWFzdGVyIGNvbnRyb2xsZXIgZHJpdmVycywgd2hpY2ggYXJlIHRoZQogICogb25seSBvbmVzIGRpcmVjdGx5IHRvdWNoaW5nIGNoaXAgcmVnaXN0ZXJzLgpAQCAtNDU1LDYgKzQ3NCw3IEBACiAvKioKICAqIHNwaV9idXNudW1fdG9fbWFzdGVyIC0gbG9vayB1cCBtYXN0ZXIgYXNzb2NpYXRlZCB3aXRoIGJ1c19udW0KICAqIEBidXNfbnVtOiB0aGUgbWFzdGVyJ3MgYnVzIG51bWJlcgorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogVGhpcyBjYWxsIG1heSBiZSB1c2VkIHdpdGggZGV2aWNlcyB0aGF0IGFyZSByZWdpc3RlcmVkIGFmdGVyCiAgKiBhcmNoIGluaXQgdGltZS4gIEl0IHJldHVybnMgYSByZWZjb3VudGVkIHBvaW50ZXIgdG8gdGhlIHJlbGV2YW50CkBAIC00OTIsNiArNTEyLDcgQEAKICAqIHNwaV9zeW5jIC0gYmxvY2tpbmcvc3luY2hyb25vdXMgU1BJIGRhdGEgdHJhbnNmZXJzCiAgKiBAc3BpOiBkZXZpY2Ugd2l0aCB3aGljaCBkYXRhIHdpbGwgYmUgZXhjaGFuZ2VkCiAgKiBAbWVzc2FnZTogZGVzY3JpYmVzIHRoZSBkYXRhIHRyYW5zZmVycworICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogVGhpcyBjYWxsIG1heSBvbmx5IGJlIHVzZWQgZnJvbSBhIGNvbnRleHQgdGhhdCBtYXkgc2xlZXAuICBUaGUgc2xlZXAKICAqIGlzIG5vbi1pbnRlcnJ1cHRpYmxlLCBhbmQgaGFzIG5vIHRpbWVvdXQuICBMb3ctb3ZlcmhlYWQgY29udHJvbGxlcgpAQCAtNTA4LDcgKzUyOSw3IEBACiAgKgogICogVGhlIHJldHVybiB2YWx1ZSBpcyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlIG1lc3NhZ2UgY291bGQgbm90IGJlCiAgKiBzdWJtaXR0ZWQsIGVsc2UgemVyby4gIFdoZW4gdGhlIHZhbHVlIGlzIHplcm8sIHRoZW4gbWVzc2FnZS0+c3RhdHVzIGlzCi0gKiBhbHNvIGRlZmluZWQ6ICBpdCdzIHRoZSBjb21wbGV0aW9uIGNvZGUgZm9yIHRoZSB0cmFuc2ZlciwgZWl0aGVyIHplcm8KKyAqIGFsc28gZGVmaW5lZDsgIGl0J3MgdGhlIGNvbXBsZXRpb24gY29kZSBmb3IgdGhlIHRyYW5zZmVyLCBlaXRoZXIgemVybwogICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGZyb20gdGhlIGNvbnRyb2xsZXIgZHJpdmVyLgogICovCiBpbnQgc3BpX3N5bmMoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV9tZXNzYWdlICptZXNzYWdlKQpAQCAtNTM4LDYgKzU1OSw3IEBACiAgKiBAbl90eDogc2l6ZSBvZiB0eGJ1ZiwgaW4gYnl0ZXMKICAqIEByeGJ1ZjogYnVmZmVyIGludG8gd2hpY2ggZGF0YSB3aWxsIGJlIHJlYWQKICAqIEBuX3J4OiBzaXplIG9mIHJ4YnVmLCBpbiBieXRlcyAobmVlZCBub3QgYmUgZG1hLXNhZmUpCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCiAgKiBUaGlzIHBlcmZvcm1zIGEgaGFsZiBkdXBsZXggTWljcm9XaXJlIHN0eWxlIHRyYW5zYWN0aW9uIHdpdGggdGhlCiAgKiBkZXZpY2UsIHNlbmRpbmcgdHhidWYgYW5kIHRoZW4gcmVhZGluZyByeGJ1Zi4gIFRoZSByZXR1cm4gdmFsdWUKQEAgLTU0NSw3ICs1NjcsOCBAQAogICogVGhpcyBjYWxsIG1heSBvbmx5IGJlIHVzZWQgZnJvbSBhIGNvbnRleHQgdGhhdCBtYXkgc2xlZXAuCiAgKgogICogUGFyYW1ldGVycyB0byB0aGlzIHJvdXRpbmUgYXJlIGFsd2F5cyBjb3BpZWQgdXNpbmcgYSBzbWFsbCBidWZmZXI7Ci0gKiBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgb3IgYnVsayB0cmFuc2ZlciBjb2RlIHNob3VsZCBpbnN0ZWFkIHVzZQorICogcG9ydGFibGUgY29kZSBzaG91bGQgbmV2ZXIgdXNlIHRoaXMgZm9yIG1vcmUgdGhhbiAzMiBieXRlcy4KKyAqIFBlcmZvcm1hbmNlLXNlbnNpdGl2ZSBvciBidWxrIHRyYW5zZmVyIGNvZGUgc2hvdWxkIGluc3RlYWQgdXNlCiAgKiBzcGlfe2FzeW5jLHN5bmN9KCkgY2FsbHMgd2l0aCBkbWEtc2FmZSBidWZmZXJzLgogICovCiBpbnQgc3BpX3dyaXRlX3RoZW5fcmVhZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKaW5kZXggY2UzYzBjZS4uN2QyZDllYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAogCXU4IGNoaXBfc2VsZWN0X251bTsKIAl1OCBuX2J5dGVzOwotCXUzMiB3aWR0aDsJCS8qIDAgb3IgMSAqLworCXU4IHdpZHRoOwkJLyogMCBvciAxICovCiAJdTggZW5hYmxlX2RtYTsKIAl1OCBiaXRzX3Blcl93b3JkOwkvKiA4IG9yIDE2ICovCiAJdTggY3NfY2hhbmdlX3Blcl93b3JkOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJdm9pZCAoKmR1cGxleCkgKHN0cnVjdCBkcml2ZXJfZGF0YSAqKTsKIH07CiAKLXZvaWQgYmZpbl9zcGlfZW5hYmxlKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCitzdGF0aWMgdm9pZCBiZmluX3NwaV9lbmFibGUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKIAl1MTYgY3I7CiAKQEAgLTE0NSw3ICsxNDUsNyBAQAogCVNTWU5DKCk7CiB9CiAKLXZvaWQgYmZpbl9zcGlfZGlzYWJsZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQorc3RhdGljIHZvaWQgYmZpbl9zcGlfZGlzYWJsZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQogewogCXUxNiBjcjsKIApAQCAtMTYzLDkgKzE2Myw2IEBACiAJaWYgKChzY2xrICUgKDIgKiBzcGVlZF9oeikpID4gMCkKIAkJc3BpX2JhdWQrKzsKIAotCXByX2RlYnVnKCJzY2xrID0gJWxkLCBzcGVlZF9oeiA9ICVkLCBzcGlfYmF1ZCA9ICVkXG4iLCBzY2xrLCBzcGVlZF9oeiwKLQkJIHNwaV9iYXVkKTsKLQogCXJldHVybiBzcGlfYmF1ZDsKIH0KIApAQCAtMTkwLDExICsxODcsMTIgQEAKIAkvKiBDbGVhciBzdGF0dXMgYW5kIGRpc2FibGUgY2xvY2sgKi8KIAl3cml0ZV9TVEFUKEJJVF9TVEFUX0NMUik7CiAJYmZpbl9zcGlfZGlzYWJsZShkcnZfZGF0YSk7Ci0JcHJfZGVidWcoInJlc3RvcmluZyBzcGkgY3RsIHN0YXRlXG4iKTsKKwlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAicmVzdG9yaW5nIHNwaSBjdGwgc3RhdGVcbiIpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQkY1MzQpIHx8IGRlZmluZWQoQ09ORklHX0JGNTM2KSB8fCBkZWZpbmVkKENPTkZJR19CRjUzNykKLQlwcl9kZWJ1ZygiY2hpcCBzZWxlY3QgbnVtYmVyIGlzICVkXG4iLCBjaGlwLT5jaGlwX3NlbGVjdF9udW0pOwotCisJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwgCisJCSJjaGlwIHNlbGVjdCBudW1iZXIgaXMgJWRcbiIsIGNoaXAtPmNoaXBfc2VsZWN0X251bSk7CisJCiAJc3dpdGNoIChjaGlwLT5jaGlwX3NlbGVjdF9udW0pIHsKIAljYXNlIDE6CiAJCWJmaW5fd3JpdGVfUE9SVEZfRkVSKGJmaW5fcmVhZF9QT1JURl9GRVIoKSB8IDB4M2MwMCk7CkBAIC0yODAsNyArMjc4LDggQEAKIAogc3RhdGljIHZvaWQgdThfd3JpdGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7Ci0JcHJfZGVidWcoImNyOC1zIGlzIDB4JXhcbiIsIHJlYWRfU1RBVCgpKTsKKwlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAKKwkJImNyOC1zIGlzIDB4JXhcbiIsIHJlYWRfU1RBVCgpKTsKIAl3aGlsZSAoZHJ2X2RhdGEtPnR4IDwgZHJ2X2RhdGEtPnR4X2VuZCkgewogCQl3cml0ZV9UREJSKCoodTggKikgKGRydl9kYXRhLT50eCkpOwogCQl3aGlsZSAocmVhZF9TVEFUKCkgJiBCSVRfU1RBVF9UWFMpCkBAIC0zMTgsNyArMzE3LDggQEAKIAogc3RhdGljIHZvaWQgdThfcmVhZGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7Ci0JcHJfZGVidWcoImNyLTggaXMgMHgleFxuIiwgcmVhZF9TVEFUKCkpOworCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsIAorCQkiY3ItOCBpcyAweCV4XG4iLCByZWFkX1NUQVQoKSk7CiAKIAkvKiBjbGVhciBUREJSIGJ1ZmZlciBiZWZvcmUgcmVhZChlbHNlIGl0IHdpbGwgYmUgc2hpZnRlZCBvdXQpICovCiAJd3JpdGVfVERCUigweEZGRkYpOwpAQCAtNDA0LDcgKzQwNCw5IEBACiAKIHN0YXRpYyB2b2lkIHUxNl93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKLQlwcl9kZWJ1ZygiY3IxNiBpcyAweCV4XG4iLCByZWFkX1NUQVQoKSk7CisJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwgCisJCSJjcjE2IGlzIDB4JXhcbiIsIHJlYWRfU1RBVCgpKTsKKwogCXdoaWxlIChkcnZfZGF0YS0+dHggPCBkcnZfZGF0YS0+dHhfZW5kKSB7CiAJCXdyaXRlX1REQlIoKih1MTYgKikgKGRydl9kYXRhLT50eCkpOwogCQl3aGlsZSAoKHJlYWRfU1RBVCgpICYgQklUX1NUQVRfVFhTKSkKQEAgLTQ0Miw3ICs0NDQsOCBAQAogCiBzdGF0aWMgdm9pZCB1MTZfcmVhZGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7Ci0JcHJfZGVidWcoImNyLTE2IGlzIDB4JXhcbiIsIHJlYWRfU1RBVCgpKTsKKwlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAorCQkiY3ItMTYgaXMgMHgleFxuIiwgcmVhZF9TVEFUKCkpOwogCWR1bW15X3JlYWQoKTsKIAogCXdoaWxlIChkcnZfZGF0YS0+cnggPCAoZHJ2X2RhdGEtPnJ4X2VuZCAtIDIpKSB7CkBAIC01NzEsMTIgKzU3NCwxMiBAQAogCQltc2ctPmNvbXBsZXRlKG1zZy0+Y29udGV4dCk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSAoc3RydWN0IGRyaXZlcl9kYXRhICopZGV2X2lkOwogCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7CiAKLQlwcl9kZWJ1ZygiaW4gZG1hX2lycV9oYW5kbGVyXG4iKTsKKwlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAiaW4gZG1hX2lycV9oYW5kbGVyXG4iKTsKIAljbGVhcl9kbWFfaXJxc3RhdChDSF9TUEkpOwogCiAJLyoKQEAgLTYwNCw3ICs2MDcsOSBAQAogCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7CiAKIAkvKiBmcmVlIHRoZSBpcnEgaGFuZGxlciBiZWZvcmUgbmV4dCB0cmFuc2ZlciAqLwotCXByX2RlYnVnKCJkaXNhYmxlIGRtYSBjaGFubmVsIGlycSVkXG4iLCBDSF9TUEkpOworCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCSJkaXNhYmxlIGRtYSBjaGFubmVsIGlycSVkXG4iLAorCQlDSF9TUEkpOwogCWRtYV9kaXNhYmxlX2lycShDSF9TUEkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNjE3LDcgKzYyMiw4IEBACiAJc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIgPSBOVUxMOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnByZXZpb3VzID0gTlVMTDsKIAlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwID0gTlVMTDsKLQl1MTYgY3IsIHdpZHRoLCBkbWFfd2lkdGgsIGRtYV9jb25maWc7CisJdTggd2lkdGg7CisJdTE2IGNyLCBkbWFfd2lkdGgsIGRtYV9jb25maWc7CiAJdTMyIHRyYW5mX3N1Y2Nlc3MgPSAxOwogCiAJLyogR2V0IGN1cnJlbnQgc3RhdGUgaW5mb3JtYXRpb24gKi8KQEAgLTY2Miw4ICs2NjgsOCBAQAogCWlmICh0cmFuc2Zlci0+dHhfYnVmICE9IE5VTEwpIHsKIAkJZHJ2X2RhdGEtPnR4ID0gKHZvaWQgKil0cmFuc2Zlci0+dHhfYnVmOwogCQlkcnZfZGF0YS0+dHhfZW5kID0gZHJ2X2RhdGEtPnR4ICsgdHJhbnNmZXItPmxlbjsKLQkJcHJfZGVidWcoInR4X2J1ZiBpcyAlcCwgdHhfZW5kIGlzICVwXG4iLCB0cmFuc2Zlci0+dHhfYnVmLAotCQkJIGRydl9kYXRhLT50eF9lbmQpOworCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAidHhfYnVmIGlzICVwLCB0eF9lbmQgaXMgJXBcbiIsCisJCQl0cmFuc2Zlci0+dHhfYnVmLCBkcnZfZGF0YS0+dHhfZW5kKTsKIAl9IGVsc2UgewogCQlkcnZfZGF0YS0+dHggPSBOVUxMOwogCX0KQEAgLTY3MSw4ICs2NzcsOCBAQAogCWlmICh0cmFuc2Zlci0+cnhfYnVmICE9IE5VTEwpIHsKIAkJZHJ2X2RhdGEtPnJ4ID0gdHJhbnNmZXItPnJ4X2J1ZjsKIAkJZHJ2X2RhdGEtPnJ4X2VuZCA9IGRydl9kYXRhLT5yeCArIHRyYW5zZmVyLT5sZW47Ci0JCXByX2RlYnVnKCJyeF9idWYgaXMgJXAsIHJ4X2VuZCBpcyAlcFxuIiwgdHJhbnNmZXItPnJ4X2J1ZiwKLQkJCSBkcnZfZGF0YS0+cnhfZW5kKTsKKwkJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwgInJ4X2J1ZiBpcyAlcCwgcnhfZW5kIGlzICVwXG4iLAorCQkJdHJhbnNmZXItPnJ4X2J1ZiwgZHJ2X2RhdGEtPnJ4X2VuZCk7CiAJfSBlbHNlIHsKIAkJZHJ2X2RhdGEtPnJ4ID0gTlVMTDsKIAl9CkBAIC02OTAsOSArNjk2LDkgQEAKIAlkcnZfZGF0YS0+d3JpdGUgPSBkcnZfZGF0YS0+dHggPyBjaGlwLT53cml0ZSA6IG51bGxfd3JpdGVyOwogCWRydl9kYXRhLT5yZWFkID0gZHJ2X2RhdGEtPnJ4ID8gY2hpcC0+cmVhZCA6IG51bGxfcmVhZGVyOwogCWRydl9kYXRhLT5kdXBsZXggPSBjaGlwLT5kdXBsZXggPyBjaGlwLT5kdXBsZXggOiBudWxsX3dyaXRlcjsKLQlwcl9kZWJ1ZwotCSAgICAoInRyYW5zZmVyOiBkcnZfZGF0YS0+d3JpdGUgaXMgJXAsIGNoaXAtPndyaXRlIGlzICVwLCBudWxsX3dyIGlzICVwXG4iLAotCSAgICAgZHJ2X2RhdGEtPndyaXRlLCBjaGlwLT53cml0ZSwgbnVsbF93cml0ZXIpOworCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCSJ0cmFuc2ZlcjogZHJ2X2RhdGEtPndyaXRlIGlzICVwLCBjaGlwLT53cml0ZSBpcyAlcCwgbnVsbF93ciBpcyAlcFxuIiwKKyAgIAkJZHJ2X2RhdGEtPndyaXRlLCBjaGlwLT53cml0ZSwgbnVsbF93cml0ZXIpOwogCiAJLyogc3BlZWQgYW5kIHdpZHRoIGhhcyBiZWVuIHNldCBvbiBwZXIgbWVzc2FnZSAqLwogCW1lc3NhZ2UtPnN0YXRlID0gUlVOTklOR19TVEFURTsKQEAgLTcwNiw4ICs3MTIsOSBAQAogCX0KIAl3cml0ZV9GTEFHKGNoaXAtPmZsYWcpOwogCi0JcHJfZGVidWcoIm5vdyBwdW1waW5nIGEgdHJhbnNmZXI6IHdpZHRoIGlzICVkLCBsZW4gaXMgJWRcbiIsIHdpZHRoLAotCQkgdHJhbnNmZXItPmxlbik7CisJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwKKwkJIm5vdyBwdW1waW5nIGEgdHJhbnNmZXI6IHdpZHRoIGlzICVkLCBsZW4gaXMgJWRcbiIsCisJCXdpZHRoLCB0cmFuc2Zlci0+bGVuKTsKIAogCS8qCiAJICogVHJ5IHRvIG1hcCBkbWEgYnVmZmVyIGFuZCBkbyBhIGRtYSB0cmFuc2ZlciBpZgpAQCAtNzIyLDcgKzcyOSw3IEBACiAJCWJmaW5fc3BpX2Rpc2FibGUoZHJ2X2RhdGEpOwogCiAJCS8qIGNvbmZpZyBkbWEgY2hhbm5lbCAqLwotCQlwcl9kZWJ1ZygiZG9pbmcgZG1hIHRyYW5zZmVyXG4iKTsKKwkJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwgImRvaW5nIGRtYSB0cmFuc2ZlclxuIik7CiAJCWlmICh3aWR0aCA9PSBDRkdfU1BJX1dPUkRTSVpFMTYpIHsKIAkJCXNldF9kbWFfeF9jb3VudChDSF9TUEksIGRydl9kYXRhLT5sZW4pOwogCQkJc2V0X2RtYV94X21vZGlmeShDSF9TUEksIDIpOwpAQCAtNzM4LDcgKzc0NSw4IEBACiAKIAkJLyogZGlydHkgaGFjayBmb3IgYXV0b2J1ZmZlciBETUEgbW9kZSAqLwogCQlpZiAoZHJ2X2RhdGEtPnR4X2RtYSA9PSAweEZGRkYpIHsKLQkJCXByX2RlYnVnKCJkb2luZyBhdXRvYnVmZmVyIERNQSBvdXQuXG4iKTsKKwkJCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkJImRvaW5nIGF1dG9idWZmZXIgRE1BIG91dC5cbiIpOwogCiAJCQkvKiBubyBpcnEgaW4gYXV0b2J1ZmZlciBtb2RlICovCiAJCQlkbWFfY29uZmlnID0KQEAgLTc1OCw3ICs3NjYsNyBAQAogCQkvKiBJbiBkbWEgbW9kZSwgcnggb3IgdHggbXVzdCBiZSBOVUxMIGluIG9uZSB0cmFuc2ZlciAqLwogCQlpZiAoZHJ2X2RhdGEtPnJ4ICE9IE5VTEwpIHsKIAkJCS8qIHNldCB0cmFuc2ZlciBtb2RlLCBhbmQgZW5hYmxlIFNQSSAqLwotCQkJcHJfZGVidWcoImRvaW5nIERNQSBpbi5cbiIpOworCQkJZGV2X2RiZygmZHJ2X2RhdGEtPnBkZXYtPmRldiwgImRvaW5nIERNQSBpbi5cbiIpOwogCiAJCQkvKiBkaXNhYmxlIFNQSSBiZWZvcmUgd3JpdGUgdG8gVERCUiAqLwogCQkJd3JpdGVfQ1RSTChjciAmIH5CSVRfQ1RMX0VOQUJMRSk7CkBAIC03ODEsNyArNzg5LDcgQEAKIAkJCS8qIHNldCB0cmFuc2ZlciBtb2RlLCBhbmQgZW5hYmxlIFNQSSAqLwogCQkJd3JpdGVfQ1RSTChjcik7CiAJCX0gZWxzZSBpZiAoZHJ2X2RhdGEtPnR4ICE9IE5VTEwpIHsKLQkJCXByX2RlYnVnKCJkb2luZyBETUEgb3V0LlxuIik7CisJCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAiZG9pbmcgRE1BIG91dC5cbiIpOwogCiAJCQkvKiBzdGFydCBkbWEgKi8KIAkJCWRtYV9lbmFibGVfaXJxKENIX1NQSSk7CkBAIC03OTYsNyArODA0LDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCS8qIElPIG1vZGUgd3JpdGUgdGhlbiByZWFkICovCi0JCXByX2RlYnVnKCJkb2luZyBJTyB0cmFuc2ZlclxuIik7CisJCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsICJkb2luZyBJTyB0cmFuc2ZlclxuIik7CiAKIAkJd3JpdGVfU1RBVChCSVRfU1RBVF9DTFIpOwogCkBAIC04MDQsMTEgKzgxMiwxMSBAQAogCQkJLyogZnVsbCBkdXBsZXggbW9kZSAqLwogCQkJQlVHX09OKChkcnZfZGF0YS0+dHhfZW5kIC0gZHJ2X2RhdGEtPnR4KSAhPQogCQkJICAgICAgIChkcnZfZGF0YS0+cnhfZW5kIC0gZHJ2X2RhdGEtPnJ4KSk7Ci0JCQljciA9IChyZWFkX0NUUkwoKSAmICh+QklUX0NUTF9USU1PRCkpOwkvKiBjbGVhciB0aGUgVElNT0QgYml0cyAqLwotCQkJY3IgfD0KLQkJCSAgICBDRkdfU1BJX1dSSVRFIHwgKHdpZHRoIDw8IDgpIHwgKENGR19TUElfRU5BQkxFIDw8Ci0JCQkJCQkJICAgIDE0KTsKLQkJCXByX2RlYnVnKCJJTyBkdXBsZXg6IGNyIGlzIDB4JXhcbiIsIGNyKTsKKwkJCWNyID0gKHJlYWRfQ1RSTCgpICYgKH5CSVRfQ1RMX1RJTU9EKSk7CQorCQkJY3IgfD0gQ0ZHX1NQSV9XUklURSB8ICh3aWR0aCA8PCA4KSB8CisJCQkJKENGR19TUElfRU5BQkxFIDw8IDE0KTsKKwkJCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkJIklPIGR1cGxleDogY3IgaXMgMHgleFxuIiwgY3IpOwogCiAJCQl3cml0ZV9DVFJMKGNyKTsKIAkJCVNTWU5DKCk7CkBAIC04MTksMTEgKzgyNywxMSBAQAogCQkJCXRyYW5mX3N1Y2Nlc3MgPSAwOwogCQl9IGVsc2UgaWYgKGRydl9kYXRhLT50eCAhPSBOVUxMKSB7CiAJCQkvKiB3cml0ZSBvbmx5IGhhbGYgZHVwbGV4ICovCi0JCQljciA9IChyZWFkX0NUUkwoKSAmICh+QklUX0NUTF9USU1PRCkpOwkvKiBjbGVhciB0aGUgVElNT0QgYml0cyAqLwotCQkJY3IgfD0KLQkJCSAgICBDRkdfU1BJX1dSSVRFIHwgKHdpZHRoIDw8IDgpIHwgKENGR19TUElfRU5BQkxFIDw8Ci0JCQkJCQkJICAgIDE0KTsKLQkJCXByX2RlYnVnKCJJTyB3cml0ZTogY3IgaXMgMHgleFxuIiwgY3IpOworCQkJY3IgPSAocmVhZF9DVFJMKCkgJiAofkJJVF9DVExfVElNT0QpKTsKKwkJCWNyIHw9IENGR19TUElfV1JJVEUgfCAod2lkdGggPDwgOCkgfAorCQkJCShDRkdfU1BJX0VOQUJMRSA8PCAxNCk7CisJCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAKKwkJCQkiSU8gd3JpdGU6IGNyIGlzIDB4JXhcbiIsIGNyKTsKIAogCQkJd3JpdGVfQ1RSTChjcik7CiAJCQlTU1lOQygpOwpAQCAtODM0LDExICs4NDIsMTEgQEAKIAkJCQl0cmFuZl9zdWNjZXNzID0gMDsKIAkJfSBlbHNlIGlmIChkcnZfZGF0YS0+cnggIT0gTlVMTCkgewogCQkJLyogcmVhZCBvbmx5IGhhbGYgZHVwbGV4ICovCi0JCQljciA9IChyZWFkX0NUUkwoKSAmICh+QklUX0NUTF9USU1PRCkpOwkvKiBjbGVhcmUgdGhlIFRJTU9EIGJpdHMgKi8KLQkJCWNyIHw9Ci0JCQkgICAgQ0ZHX1NQSV9SRUFEIHwgKHdpZHRoIDw8IDgpIHwgKENGR19TUElfRU5BQkxFIDw8Ci0JCQkJCQkJICAgMTQpOwotCQkJcHJfZGVidWcoIklPIHJlYWQ6IGNyIGlzIDB4JXhcbiIsIGNyKTsKKwkJCWNyID0gKHJlYWRfQ1RSTCgpICYgKH5CSVRfQ1RMX1RJTU9EKSk7CisJCQljciB8PSBDRkdfU1BJX1JFQUQgfCAod2lkdGggPDwgOCkgfAorCQkJCShDRkdfU1BJX0VOQUJMRSA8PCAxNCk7CisJCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAKKwkJCQkiSU8gcmVhZDogY3IgaXMgMHgleFxuIiwgY3IpOwogCiAJCQl3cml0ZV9DVFJMKGNyKTsKIAkJCVNTWU5DKCk7CkBAIC04NDksNyArODU3LDggQEAKIAkJfQogCiAJCWlmICghdHJhbmZfc3VjY2VzcykgewotCQkJcHJfZGVidWcoIklPIHdyaXRlIGVycm9yIVxuIik7CisJCQlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAKKwkJCQkiSU8gd3JpdGUgZXJyb3IhXG4iKTsKIAkJCW1lc3NhZ2UtPnN0YXRlID0gRVJST1JfU1RBVEU7CiAJCX0gZWxzZSB7CiAJCQkvKiBVcGRhdGUgdG90YWwgYnl0ZSB0cmFuc2ZlcmVkICovCkBAIC04OTksMTEgKzkwOCwxNCBAQAogCS8qIFNldHVwIHRoZSBTU1AgdXNpbmcgdGhlIHBlciBjaGlwIGNvbmZpZ3VyYXRpb24gKi8KIAlkcnZfZGF0YS0+Y3VyX2NoaXAgPSBzcGlfZ2V0X2N0bGRhdGEoZHJ2X2RhdGEtPmN1cl9tc2ctPnNwaSk7CiAJcmVzdG9yZV9zdGF0ZShkcnZfZGF0YSk7Ci0JcHJfZGVidWcKLQkgICAgKCJnb3QgYSBtZXNzYWdlIHRvIHB1bXAsIHN0YXRlIGlzIHNldCB0bzogYmF1ZCAlZCwgZmxhZyAweCV4LCBjdGwgMHgleFxuIiwKLQkgICAgIGRydl9kYXRhLT5jdXJfY2hpcC0+YmF1ZCwgZHJ2X2RhdGEtPmN1cl9jaGlwLT5mbGFnLAotCSAgICAgZHJ2X2RhdGEtPmN1cl9jaGlwLT5jdGxfcmVnKTsKLQlwcl9kZWJ1ZygidGhlIGZpcnN0IHRyYW5zZmVyIGxlbiBpcyAlZFxuIiwgZHJ2X2RhdGEtPmN1cl90cmFuc2Zlci0+bGVuKTsKKwlkZXZfZGJnKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAorCQkiZ290IGEgbWVzc2FnZSB0byBwdW1wLCBzdGF0ZSBpcyBzZXQgdG86IGJhdWQgJWQsIGZsYWcgMHgleCwgY3RsIDB4JXhcbiIsCisgICAJCWRydl9kYXRhLT5jdXJfY2hpcC0+YmF1ZCwgZHJ2X2RhdGEtPmN1cl9jaGlwLT5mbGFnLAorICAgCQlkcnZfZGF0YS0+Y3VyX2NoaXAtPmN0bF9yZWcpOworCQorCWRldl9kYmcoJmRydl9kYXRhLT5wZGV2LT5kZXYsIAorCQkidGhlIGZpcnN0IHRyYW5zZmVyIGxlbiBpcyAlZFxuIiwKKwkJZHJ2X2RhdGEtPmN1cl90cmFuc2Zlci0+bGVuKTsKIAogCS8qIE1hcmsgYXMgYnVzeSBhbmQgbGF1bmNoIHRyYW5zZmVycyAqLwogCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7CkBAIC05MzIsNyArOTQ0LDcgQEAKIAltc2ctPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAltc2ctPnN0YXRlID0gU1RBUlRfU1RBVEU7CiAKLQlwcl9kZWJ1ZygiYWRkaW5nIGFuIG1zZyBpbiB0cmFuc2ZlcigpIFxuIik7CisJZGV2X2RiZygmc3BpLT5kZXYsICJhZGRpbmcgYW4gbXNnIGluIHRyYW5zZmVyKCkgXG4iKTsKIAlsaXN0X2FkZF90YWlsKCZtc2ctPnF1ZXVlLCAmZHJ2X2RhdGEtPnF1ZXVlKTsKIAogCWlmIChkcnZfZGF0YS0+cnVuID09IFFVRVVFX1JVTk5JTkcgJiYgIWRydl9kYXRhLT5idXN5KQpAQCAtMTAwMiwxMyArMTAxNCwxMyBAQAogCWlmIChjaGlwLT5lbmFibGVfZG1hICYmICFkbWFfcmVxdWVzdGVkKSB7CiAJCS8qIHJlZ2lzdGVyIGRtYSBpcnEgaGFuZGxlciAqLwogCQlpZiAocmVxdWVzdF9kbWEoQ0hfU1BJLCAiQkY1M3hfU1BJX0RNQSIpIDwgMCkgewotCQkJcHJfZGVidWcKLQkJCSAgICAoIlVuYWJsZSB0byByZXF1ZXN0IEJsYWNrRmluIFNQSSBETUEgY2hhbm5lbFxuIik7CisJCQlkZXZfZGJnKCZzcGktPmRldiwKKwkJCQkiVW5hYmxlIHRvIHJlcXVlc3QgQmxhY2tGaW4gU1BJIERNQSBjaGFubmVsXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWlmIChzZXRfZG1hX2NhbGxiYWNrKENIX1NQSSwgKHZvaWQgKilkbWFfaXJxX2hhbmRsZXIsIGRydl9kYXRhKQogCQkgICAgPCAwKSB7Ci0JCQlwcl9kZWJ1ZygiVW5hYmxlIHRvIHNldCBkbWEgY2FsbGJhY2tcbiIpOworCQkJZGV2X2RiZygmc3BpLT5kZXYsICJVbmFibGUgdG8gc2V0IGRtYSBjYWxsYmFja1xuIik7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9CiAJCWRtYV9kaXNhYmxlX2lycShDSF9TUEkpOwpAQCAtMTA1NCw5ICsxMDY2LDkgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcHJfZGVidWcoInNldHVwIHNwaSBjaGlwICVzLCB3aWR0aCBpcyAlZCwgZG1hIGlzICVkLCIsCisJZGV2X2RiZygmc3BpLT5kZXYsICJzZXR1cCBzcGkgY2hpcCAlcywgd2lkdGggaXMgJWQsIGRtYSBpcyAlZCwiLAogCQkJc3BpLT5tb2RhbGlhcywgY2hpcC0+d2lkdGgsIGNoaXAtPmVuYWJsZV9kbWEpOwotCXByX2RlYnVnKCJjdGxfcmVnIGlzIDB4JXgsIGZsYWdfcmVnIGlzIDB4JXhcbiIsCisJZGV2X2RiZygmc3BpLT5kZXYsICJjdGxfcmVnIGlzIDB4JXgsIGZsYWdfcmVnIGlzIDB4JXhcbiIsCiAJCQljaGlwLT5jdGxfcmVnLCBjaGlwLT5mbGFnKTsKIAogCXNwaV9zZXRfY3RsZGF0YShzcGksIGNoaXApOwpAQCAtMTA2OCw3ICsxMDgwLDcgQEAKICAqIGNhbGxiYWNrIGZvciBzcGkgZnJhbWV3b3JrLgogICogY2xlYW4gZHJpdmVyIHNwZWNpZmljIGRhdGEKICAqLwotc3RhdGljIHZvaWQgY2xlYW51cChjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorc3RhdGljIHZvaWQgY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBjaGlwX2RhdGEgKmNoaXAgPSBzcGlfZ2V0X2N0bGRhdGEoKHN0cnVjdCBzcGlfZGV2aWNlICopc3BpKTsKIApAQCAtMTIwNyw3ICsxMjE5LDcgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmxlbSByZWdpc3RlcmluZyBzcGkgbWFzdGVyXG4iKTsKIAkJZ290byBvdXRfZXJyb3JfcXVldWVfYWxsb2M7CiAJfQotCXByX2RlYnVnKCJjb250cm9sbGVyIHByb2JlIHN1Y2Nlc3NmdWxseVxuIik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiY29udHJvbGxlciBwcm9iZSBzdWNjZXNzZnVsbHlcbiIpOwogCXJldHVybiBzdGF0dXM7CiAKICAgICAgIG91dF9lcnJvcl9xdWV1ZV9hbGxvYzoKQEAgLTEyODcsMjcgKzEyOTksMjMgQEAKICNlbmRpZgkJCQkvKiBDT05GSUdfUE0gKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmZpbjV4eF9zcGlfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCSAgIC5uYW1lID0gImJmaW4tc3BpLW1hc3RlciIsCi0JCSAgIC5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAotCQkgICB9LAotCS5wcm9iZSA9IGJmaW41eHhfc3BpX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChiZmluNXh4X3NwaV9yZW1vdmUpLAotCS5zdXNwZW5kID0gYmZpbjV4eF9zcGlfc3VzcGVuZCwKLQkucmVzdW1lID0gYmZpbjV4eF9zcGlfcmVzdW1lLAorCS5kcml2ZXIgCT0geworCQkubmFtZQk9ICJiZmluLXNwaS1tYXN0ZXIiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kCT0gYmZpbjV4eF9zcGlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGJmaW41eHhfc3BpX3Jlc3VtZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGJmaW41eHhfc3BpX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBiZmluNXh4X3NwaV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYmZpbjV4eF9zcGlfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZiZmluNXh4X3NwaV9kcml2ZXIsIGJmaW41eHhfc3BpX3Byb2JlKTsKIH0KLQogbW9kdWxlX2luaXQoYmZpbjV4eF9zcGlfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBiZmluNXh4X3NwaV9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJmaW41eHhfc3BpX2RyaXZlcik7CiB9Ci0KIG1vZHVsZV9leGl0KGJmaW41eHhfc3BpX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2J1dHRlcmZseS5jIGIvZHJpdmVycy9zcGkvc3BpX2J1dHRlcmZseS5jCmluZGV4IDMxMjk4N2EuLjBlZTJiMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9idXR0ZXJmbHkuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfYnV0dGVyZmx5LmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNDAsOCArNDAsNiBAQAogICogYW5kIHVzZSB0aGlzIGN1c3RvbSBwYXJhbGxlbCBwb3J0IGNhYmxlLgogICovCiAKLSN1bmRlZglIQVZFX1VTSQkvKiBueWV0ICovCi0KIAogLyogREFUQSBvdXRwdXQgYml0cyAocGlucyAyLi45ID09IEQwLi5ENykgKi8KICNkZWZpbmUJYnV0dGVyZmx5X25yZXNldCAoMSA8PCAxKQkJLyogcGluIDMgKi8KQEAgLTQ5LDE5ICs0NywxMyBAQAogI2RlZmluZQlzcGlfc2NrX2JpdAkoMSA8PCAwKQkJLyogcGluIDIgKi8KICNkZWZpbmUJc3BpX21vc2lfYml0CSgxIDw8IDcpCQkvKiBwaW4gOSAqLwogCi0jZGVmaW5lCXVzaV9zY2tfYml0CSgxIDw8IDMpCQkvKiBwaW4gNSAqLwotI2RlZmluZQl1c2lfbW9zaV9iaXQJKDEgPDwgNCkJCS8qIHBpbiA2ICovCi0KICNkZWZpbmUJdmNjX2JpdHMJKCgxIDw8IDYpIHwgKDEgPDwgNSkpCS8qIHBpbnMgNywgOCAqLwogCiAvKiBTVEFUVVMgaW5wdXQgYml0cyAqLwogI2RlZmluZQlzcGlfbWlzb19iaXQJUEFSUE9SVF9TVEFUVVNfQlVTWQkvKiBwaW4gMTEgKi8KIAotI2RlZmluZQl1c2lfbWlzb19iaXQJUEFSUE9SVF9TVEFUVVNfUEFQRVJPVVQJLyogcGluIDEyICovCi0KIC8qIENPTlRST0wgb3V0cHV0IGJpdHMgKi8KICNkZWZpbmUJc3BpX2NzX2JpdAlQQVJQT1JUX0NPTlRST0xfU0VMRUNUCS8qIHBpbiAxNyAqLwotLyogVVNJIHVzZXMgbm8gY2hpcHNlbGVjdCAqLwogCiAKIApAQCAtNzAsMTUgKzYyLDYgQEAKIAlyZXR1cm4gc3BpLT5jb250cm9sbGVyX2RhdGE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX3VzaWRldihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotI2lmZGVmCUhBVkVfVVNJCi0JcmV0dXJuIHNwaS0+Y2hpcF9zZWxlY3QgIT0gMTsKLSNlbHNlCi0JcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQogCiBzdHJ1Y3QgYnV0dGVyZmx5IHsKIAkvKiBSRVZJU0lUIC4uLiBmb3Igbm93LCB0aGlzIG11c3QgYmUgZmlyc3QgKi8KQEAgLTk3LDIzICs4MCwxMyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKgotICogdGhlc2Ugcm91dGluZXMgbWF5IGJlIHNsb3dlciB0aGFuIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXkncmUgaGlkaW5nCi0gKiB0aGUgZmFjdCB0aGF0IHRoZXJlIGFyZSB0d28gZGlmZmVyZW50IFNQSSBidXNzZXMgb24gdGhpcyBjYWJsZTogb25lCi0gKiB0byB0aGUgRGF0YUZsYXNoIGNoaXAgKG9yIEFWUiBTUEkgY29udHJvbGxlciksIHRoZSBvdGhlciB0byB0aGUKLSAqIEFWUiBVU0kgY29udHJvbGxlci4KLSAqLwotCiBzdGF0aWMgaW5saW5lIHZvaWQKIHNldHNjayhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgaXNfb24pCiB7CiAJc3RydWN0IGJ1dHRlcmZseQkqcHAgPSBzcGlkZXZfdG9fcHAoc3BpKTsKIAl1OAkJCWJpdCwgYnl0ZSA9IHBwLT5sYXN0Ynl0ZTsKIAotCWlmIChpc191c2lkZXYoc3BpKSkKLQkJYml0ID0gdXNpX3Nja19iaXQ7Ci0JZWxzZQotCQliaXQgPSBzcGlfc2NrX2JpdDsKKwliaXQgPSBzcGlfc2NrX2JpdDsKIAogCWlmIChpc19vbikKIAkJYnl0ZSB8PSBiaXQ7CkBAIC0xMjksMTAgKzEwMiw3IEBACiAJc3RydWN0IGJ1dHRlcmZseQkqcHAgPSBzcGlkZXZfdG9fcHAoc3BpKTsKIAl1OAkJCWJpdCwgYnl0ZSA9IHBwLT5sYXN0Ynl0ZTsKIAotCWlmIChpc191c2lkZXYoc3BpKSkKLQkJYml0ID0gdXNpX21vc2lfYml0OwotCWVsc2UKLQkJYml0ID0gc3BpX21vc2lfYml0OworCWJpdCA9IHNwaV9tb3NpX2JpdDsKIAogCWlmIChpc19vbikKIAkJYnl0ZSB8PSBiaXQ7CkBAIC0xNDgsMTAgKzExOCw3IEBACiAJaW50CQkJdmFsdWU7CiAJdTgJCQliaXQ7CiAKLQlpZiAoaXNfdXNpZGV2KHNwaSkpCi0JCWJpdCA9IHVzaV9taXNvX2JpdDsKLQllbHNlCi0JCWJpdCA9IHNwaV9taXNvX2JpdDsKKwliaXQgPSBzcGlfbWlzb19iaXQ7CiAKIAkvKiBvbmx5IFNUQVRVU19CVVNZIGlzIE5PVCBuZWdhdGVkICovCiAJdmFsdWUgPSAhKHBhcnBvcnRfcmVhZF9zdGF0dXMocHAtPnBvcnQpICYgYml0KTsKQEAgLTE2NiwxMCArMTMzLDYgQEAKIAlpZiAodmFsdWUgIT0gQklUQkFOR19DU19JTkFDVElWRSkKIAkJc2V0c2NrKHNwaSwgc3BpLT5tb2RlICYgU1BJX0NQT0wpOwogCi0JLyogbm8gY2hpcHNlbGVjdCBvbiB0aGlzIFVTSSBsaW5rIGNvbmZpZyAqLwotCWlmIChpc191c2lkZXYoc3BpKSkKLQkJcmV0dXJuOwotCiAJLyogaGVyZSwgdmFsdWUgPT0gImFjdGl2YXRlIG9yIG5vdCI7CiAJICogbW9zdCBQQVJQT1JUX0NPTlRST0xfKiBiaXRzIGFyZSBuZWdhdGVkLCBzbyB3ZSBtdXN0CiAJICogbW9ycGggaXQgdG8gdmFsdWUgPT0gImJpdCB2YWx1ZSB0byB3cml0ZSBpbiBjb250cm9sIHJlZ2lzdGVyIgpAQCAtMjM3LDI0ICsyMDAsMTYgQEAKIAlpbnQJCQlzdGF0dXM7CiAJc3RydWN0IGJ1dHRlcmZseQkqcHA7CiAJc3RydWN0IHNwaV9tYXN0ZXIJKm1hc3RlcjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OworCXN0cnVjdCBkZXZpY2UJCSpkZXYgPSBwLT5waHlzcG9ydC0+ZGV2OwogCi0JaWYgKGJ1dHRlcmZseSkKKwlpZiAoYnV0dGVyZmx5IHx8ICFkZXYpCiAJCXJldHVybjsKIAogCS8qIFJFVklTSVQ6ICB0aGlzIGp1c3QgX2Fzc3VtZXNfIGEgYnV0dGVyZmx5IGlzIHRoZXJlIC4uLiBubyBwcm9iZSwKIAkgKiBhbmQgbm8gd2F5IHRvIGJlIHNlbGVjdGl2ZSBhYm91dCB3aGF0IGl0IGJpbmRzIHRvLgogCSAqLwogCi0JLyogRklYTUUgd2hlcmUgc2hvdWxkIG1hc3Rlci0+Y2Rldi5kZXYgY29tZSBmcm9tPwotCSAqIGUuZy4gL3N5cy9idXMvcG5wMC8wMDowYiwgc29tZSBQQ0kgdGhpbmcsIGV0YwotCSAqIHNldHRpbmcgdXAgYSBwbGF0Zm9ybSBkZXZpY2UgbGlrZSB0aGlzIGlzIGFuIHVnbHkga2x1Z2UuLi4KLQkgKi8KLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiYnV0dGVyZmx5IiwgLTEsIE5VTEwsIDApOwotCWlmIChJU19FUlIocGRldikpCi0JCXJldHVybjsKLQotCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mICpwcCk7CisJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcihkZXYsIHNpemVvZiAqcHApOwogCWlmICghbWFzdGVyKSB7CiAJCXN0YXR1cyA9IC1FTk9NRU07CiAJCWdvdG8gZG9uZTsKQEAgLTMwMCw3ICsyNTUsNyBAQAogCXBhcnBvcnRfZnJvYl9jb250cm9sKHBwLT5wb3J0LCBzcGlfY3NfYml0LCAwKTsKIAogCS8qIHN0YWJpbGl6ZSBwb3dlciB3aXRoIGNoaXAgaW4gcmVzZXQgKG5SRVNFVCksIGFuZAotCSAqIGJvdGggc3BpX3Nja19iaXQgYW5kIHVzaV9zY2tfYml0IGNsZWFyIChDUE9MPTApCisJICogc3BpX3Nja19iaXQgY2xlYXIgKENQT0w9MCkKIAkgKi8KIAlwcC0+bGFzdGJ5dGUgfD0gdmNjX2JpdHM7CiAJcGFycG9ydF93cml0ZV9kYXRhKHBwLT5wb3J0LCBwcC0+bGFzdGJ5dGUpOwpAQCAtMzM0LDIzICsyODksNiBAQAogCQlwcl9kZWJ1ZygiJXM6IGRhdGFmbGFzaCBhdCAlc1xuIiwgcC0+bmFtZSwKIAkJCQlwcC0+ZGF0YWZsYXNoLT5kZXYuYnVzX2lkKTsKIAotI2lmZGVmCUhBVkVfVVNJCi0JLyogQnVzIDIgaXMgb25seSBmb3IgdGFsa2luZyB0byB0aGUgQVZSLCBhbmQgaXQgY2FuIHdvcmsgbm8KLQkgKiBtYXR0ZXIgd2hvIG1hc3RlcnMgYnVzIDE7IG5lZWRzIGFwcHJvcHJpYXRlIEFWUiBmaXJtd2FyZS4KLQkgKi8KLQlwcC0+aW5mb1sxXS5tYXhfc3BlZWRfaHogPSAxMCAvKiA/PyAqLyAqIDEwMDAgKiAxMDAwOwotCXN0cmNweShwcC0+aW5mb1sxXS5tb2RhbGlhcywgImJ1dHRlcmZseSIpOwotCS8vIHBwLT5pbmZvWzFdLnBsYXRmb3JtX2RhdGEgPSAuLi4gVEJEIC4uLiA7Ci0JcHAtPmluZm9bMV0uY2hpcF9zZWxlY3QgPSAyLAotCXBwLT5pbmZvWzFdLmNvbnRyb2xsZXJfZGF0YSA9IHBwOwotCXBwLT5idXR0ZXJmbHkgPSBzcGlfbmV3X2RldmljZShwcC0+Yml0YmFuZy5tYXN0ZXIsICZwcC0+aW5mb1sxXSk7Ci0JaWYgKHBwLT5idXR0ZXJmbHkpCi0JCXByX2RlYnVnKCIlczogYnV0dGVyZmx5IGF0ICVzXG4iLCBwLT5uYW1lLAotCQkJCXBwLT5idXR0ZXJmbHktPmRldi5idXNfaWQpOwotCi0JLyogRklYTUUgc2V0dXAgQUNLIGZvciB0aGUgSVJRIGxpbmUgLi4uICAqLwotI2VuZGlmCi0KIAkvLyBkZXZfaW5mbyhfd2hhdD9fLCAuLi4pCiAJcHJfaW5mbygiJXM6IEFWUiBCdXR0ZXJmbHlcbiIsIHAtPm5hbWUpOwogCWJ1dHRlcmZseSA9IHBwOwpAQCAtMzY2LDE0ICszMDQsMTIgQEAKIGNsZWFuMDoKIAkodm9pZCkgc3BpX21hc3Rlcl9wdXQocHAtPmJpdGJhbmcubWFzdGVyKTsKIGRvbmU6Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiAJcHJfZGVidWcoIiVzOiBidXR0ZXJmbHkgcHJvYmUsIGZhaWwgJWRcbiIsIHAtPm5hbWUsIHN0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJ1dHRlcmZseV9kZXRhY2goc3RydWN0IHBhcnBvcnQgKnApCiB7CiAJc3RydWN0IGJ1dHRlcmZseQkqcHA7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKIAlpbnQJCQlzdGF0dXM7CiAKIAkvKiBGSVhNRSB0aGlzIGdsb2JhbCBpcyB1Z2x5IC4uLiBidXQsIGhvdyB0byBxdWlja2x5IGdldCBmcm9tCkBAIC0zODYsNyArMzIyLDYgQEAKIAlidXR0ZXJmbHkgPSBOVUxMOwogCiAJLyogc3RvcCgpIHVucmVnaXN0ZXJzIGNoaWxkIGRldmljZXMgdG9vICovCi0JcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShwcC0+Yml0YmFuZy5tYXN0ZXItPmNkZXYuZGV2KTsKIAlzdGF0dXMgPSBzcGlfYml0YmFuZ19zdG9wKCZwcC0+Yml0YmFuZyk7CiAKIAkvKiB0dXJuIG9mZiBWQ0MgKi8KQEAgLTM5Nyw4ICszMzIsNiBAQAogCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UocHAtPnBkKTsKIAogCSh2b2lkKSBzcGlfbWFzdGVyX3B1dChwcC0+Yml0YmFuZy5tYXN0ZXIpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFycG9ydF9kcml2ZXIgYnV0dGVyZmx5X2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwppbmRleCA1MWRhYTIxLi42NTZiZTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAkJCQkJCQkzMi43NjggS0h6IENsb2NrICovCiAKIC8qIFNQSSBETUEgUmVnaXN0ZXIgQml0IEZpZWxkcyAmIE1hc2tzICovCi0jZGVmaW5lIFNQSV9ETUFfUkhETUEJKDB4RiA8PCA0KQkvKiBSWEZJRk8gSGFsZiBTdGF0dXMgKi8KKyNkZWZpbmUgU1BJX0RNQV9SSERNQQkoMHgxIDw8IDQpCS8qIFJYRklGTyBIYWxmIFN0YXR1cyAqLwogI2RlZmluZSBTUElfRE1BX1JGRE1BCSgweDEgPDwgNSkgICAgICAvKiBSWEZJRk8gRnVsbCBTdGF0dXMgKi8KICNkZWZpbmUgU1BJX0RNQV9URURNQQkoMHgxIDw8IDYpICAgICAgLyogVFhGSUZPIEVtcHR5IFN0YXR1cyAqLwogI2RlZmluZSBTUElfRE1BX1RIRE1BCSgweDEgPDwgNykgICAgICAvKiBUWEZJRk8gSGFsZiBTdGF0dXMgKi8KQEAgLTEzNTUsNiArMTM1NSw3IEBACiAJCXNwaS0+Yml0c19wZXJfd29yZCwKIAkJc3BpX3NwZWVkX2h6KFNQSV9DT05UUk9MX0RBVEFSQVRFX01JTiksCiAJCXNwaS0+bWF4X3NwZWVkX2h6KTsKKwlyZXR1cm4gc3RhdHVzOwogCiBlcnJfZmlyc3Rfc2V0dXA6CiAJa2ZyZWUoY2hpcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlkZXYuYyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNDI0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwpAQCAtMCwwICsxLDU4NSBAQAorLyoKKyAqIHNwaWRldi5jIC0tIHNpbXBsZSBzeW5jaHJvbm91cyB1c2Vyc3BhY2UgaW50ZXJmYWNlIHRvIFNQSSBkZXZpY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNXQVBQCisgKglBbmRyZWEgUGF0ZXJuaWFuaSA8YS5wYXRlcm5pYW5pQHN3YXBwLWVuZy5pdD4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBCcm93bmVsbCAoc2ltcGxpZmljYXRpb24sIGNsZWFudXApCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaWRldi5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworCisvKgorICogVGhpcyBzdXBwb3J0cyBhY2NjZXNzIHRvIFNQSSBkZXZpY2VzIHVzaW5nIG5vcm1hbCB1c2Vyc3BhY2UgSS9PIGNhbGxzLgorICogTm90ZSB0aGF0IHdoaWxlIHRyYWRpdGlvbmFsIFVOSVgvUE9TSVggSS9PIHNlbWFudGljcyBhcmUgaGFsZiBkdXBsZXgsCisgKiBhbmQgb2Z0ZW4gbWFzayBtZXNzYWdlIGJvdW5kYXJpZXMsIGZ1bGwgU1BJIHN1cHBvcnQgcmVxdWlyZXMgZnVsbCBkdXBsZXgKKyAqIHRyYW5zZmVycy4gIFRoZXJlIGFyZSBzZXZlcmFsIGtpbmRzIG9mIG9mIGludGVybmFsIG1lc3NhZ2UgYm91bmRhcmllcyB0bworICogaGFuZGxlIGNoaXBzZWxlY3QgbWFuYWdlbWVudCBhbmQgb3RoZXIgcHJvdG9jb2wgb3B0aW9ucy4KKyAqCisgKiBTUEkgaGFzIGEgY2hhcmFjdGVyIG1ham9yIG51bWJlciBhc3NpZ25lZC4gIFdlIGFsbG9jYXRlIG1pbm9yIG51bWJlcnMKKyAqIGR5bmFtaWNhbGx5IHVzaW5nIGEgYml0bWFzay4gIFlvdSBtdXN0IHVzZSBob3RwbHVnIHRvb2xzLCBzdWNoIGFzIHVkZXYKKyAqIChvciBtZGV2IHdpdGggYnVzeWJveCkgdG8gY3JlYXRlIGFuZCBkZXN0cm95IHRoZSAvZGV2L3NwaWRldkIuQyBkZXZpY2UKKyAqIG5vZGVzLCBzaW5jZSB0aGVyZSBpcyBubyBmaXhlZCBhc3NvY2lhdGlvbiBvZiBtaW5vciBudW1iZXJzIHdpdGggYW55CisgKiBwYXJ0aWN1bGFyIFNQSSBidXMgb3IgZGV2aWNlLgorICovCisjZGVmaW5lIFNQSURFVl9NQUpPUgkJCTE1MwkvKiBhc3NpZ25lZCAqLworI2RlZmluZSBOX1NQSV9NSU5PUlMJCQkzMgkvKiAuLi4gdXAgdG8gMjU2ICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCW1pbm9yc1tOX1NQSV9NSU5PUlMgLyBCSVRTX1BFUl9MT05HXTsKKworCisvKiBCaXQgbWFza3MgZm9yIHNwaV9kZXZpY2UubW9kZSBtYW5hZ2VtZW50ICovCisjZGVmaW5lIFNQSV9NT0RFX01BU0sJCQkoU1BJX0NQSEEgfCBTUElfQ1BPTCkKKworCitzdHJ1Y3Qgc3BpZGV2X2RhdGEgeworCXN0cnVjdCBkZXZpY2UJCWRldjsKKwlzdHJ1Y3Qgc3BpX2RldmljZQkqc3BpOworCXN0cnVjdCBsaXN0X2hlYWQJZGV2aWNlX2VudHJ5OworCisJc3RydWN0IG11dGV4CQlidWZfbG9jazsKKwl1bnNpZ25lZAkJdXNlcnM7CisJdTgJCQkqYnVmZmVyOworfTsKKworc3RhdGljIExJU1RfSEVBRChkZXZpY2VfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGRldmljZV9saXN0X2xvY2spOworCitzdGF0aWMgdW5zaWduZWQgYnVmc2l6ID0gNDA5NjsKK21vZHVsZV9wYXJhbShidWZzaXosIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhidWZzaXosICJkYXRhIGJ5dGVzIGluIGJpZ2dlc3Qgc3VwcG9ydGVkIFNQSSBtZXNzYWdlIik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFJlYWQtb25seSBtZXNzYWdlIHdpdGggY3VycmVudCBkZXZpY2Ugc2V0dXAgKi8KK3N0YXRpYyBzc2l6ZV90CitzcGlkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQoreworCXN0cnVjdCBzcGlkZXZfZGF0YQkqc3BpZGV2OworCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGk7CisJc3NpemVfdAkJCXN0YXR1cyA9IDA7CisKKwkvKiBjaGlwc2VsZWN0IG9ubHkgdG9nZ2xlcyBhdCBzdGFydCBvciBlbmQgb2Ygb3BlcmF0aW9uICovCisJaWYgKGNvdW50ID4gYnVmc2l6KQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJc3BpZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXNwaSA9IHNwaWRldi0+c3BpOworCisJbXV0ZXhfbG9jaygmc3BpZGV2LT5idWZfbG9jayk7CisJc3RhdHVzID0gc3BpX3JlYWQoc3BpLCBzcGlkZXYtPmJ1ZmZlciwgY291bnQpOworCWlmIChzdGF0dXMgPT0gMCkgeworCQl1bnNpZ25lZCBsb25nCW1pc3Npbmc7CisKKwkJbWlzc2luZyA9IGNvcHlfdG9fdXNlcihidWYsIHNwaWRldi0+YnVmZmVyLCBjb3VudCk7CisJCWlmIChjb3VudCAmJiBtaXNzaW5nID09IGNvdW50KQorCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJc3RhdHVzID0gY291bnQgLSBtaXNzaW5nOworCX0KKwltdXRleF91bmxvY2soJnNwaWRldi0+YnVmX2xvY2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogV3JpdGUtb25seSBtZXNzYWdlIHdpdGggY3VycmVudCBkZXZpY2Ugc2V0dXAgKi8KK3N0YXRpYyBzc2l6ZV90CitzcGlkZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpmX3BvcykKK3sKKwlzdHJ1Y3Qgc3BpZGV2X2RhdGEJKnNwaWRldjsKKwlzdHJ1Y3Qgc3BpX2RldmljZQkqc3BpOworCXNzaXplX3QJCQlzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcJCW1pc3Npbmc7CisKKwkvKiBjaGlwc2VsZWN0IG9ubHkgdG9nZ2xlcyBhdCBzdGFydCBvciBlbmQgb2Ygb3BlcmF0aW9uICovCisJaWYgKGNvdW50ID4gYnVmc2l6KQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJc3BpZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXNwaSA9IHNwaWRldi0+c3BpOworCisJbXV0ZXhfbG9jaygmc3BpZGV2LT5idWZfbG9jayk7CisJbWlzc2luZyA9IGNvcHlfZnJvbV91c2VyKHNwaWRldi0+YnVmZmVyLCBidWYsIGNvdW50KTsKKwlpZiAobWlzc2luZyA9PSAwKSB7CisJCXN0YXR1cyA9IHNwaV93cml0ZShzcGksIHNwaWRldi0+YnVmZmVyLCBjb3VudCk7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXN0YXR1cyA9IGNvdW50OworCX0gZWxzZQorCQlzdGF0dXMgPSAtRUZBVUxUOworCW11dGV4X3VubG9jaygmc3BpZGV2LT5idWZfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHNwaWRldl9tZXNzYWdlKHN0cnVjdCBzcGlkZXZfZGF0YSAqc3BpZGV2LAorCQlzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlciAqdV94ZmVycywgdW5zaWduZWQgbl94ZmVycykKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbXNnOworCXN0cnVjdCBzcGlfdHJhbnNmZXIJKmtfeGZlcnM7CisJc3RydWN0IHNwaV90cmFuc2Zlcgkqa190bXA7CisJc3RydWN0IHNwaV9pb2NfdHJhbnNmZXIgKnVfdG1wOworCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGkgPSBzcGlkZXYtPnNwaTsKKwl1bnNpZ25lZAkJbiwgdG90YWw7CisJdTgJCQkqYnVmOworCWludAkJCXN0YXR1cyA9IC1FRkFVTFQ7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOworCWtfeGZlcnMgPSBrY2FsbG9jKG5feGZlcnMsIHNpemVvZigqa190bXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoa194ZmVycyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIENvbnN0cnVjdCBzcGlfbWVzc2FnZSwgY29weWluZyBhbnkgdHggZGF0YSB0byBib3VuY2UgYnVmZmVyLgorCSAqIFdlIHdhbGsgdGhlIGFycmF5IG9mIHVzZXItcHJvdmlkZWQgdHJhbnNmZXJzLCB1c2luZyBlYWNoIG9uZQorCSAqIHRvIGluaXRpYWxpemUgYSBrZXJuZWwgdmVyc2lvbiBvZiB0aGUgc2FtZSB0cmFuc2Zlci4KKwkgKi8KKwltdXRleF9sb2NrKCZzcGlkZXYtPmJ1Zl9sb2NrKTsKKwlidWYgPSBzcGlkZXYtPmJ1ZmZlcjsKKwl0b3RhbCA9IDA7CisJZm9yIChuID0gbl94ZmVycywga190bXAgPSBrX3hmZXJzLCB1X3RtcCA9IHVfeGZlcnM7CisJCQluOworCQkJbi0tLCBrX3RtcCsrLCB1X3RtcCsrKSB7CisJCWtfdG1wLT5sZW4gPSB1X3RtcC0+bGVuOworCisJCXRvdGFsICs9IGtfdG1wLT5sZW47CisJCWlmICh0b3RhbCA+IGJ1ZnNpeikgeworCQkJc3RhdHVzID0gLUVNU0dTSVpFOworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKHVfdG1wLT5yeF9idWYpIHsKKwkJCWtfdG1wLT5yeF9idWYgPSBidWY7CisJCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVfdG1wLT5yeF9idWYsIHVfdG1wLT5sZW4pKQorCQkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAodV90bXAtPnR4X2J1ZikgeworCQkJa190bXAtPnR4X2J1ZiA9IGJ1ZjsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIChjb25zdCB1OCBfX3VzZXIgKil1X3RtcC0+dHhfYnVmLAorCQkJCQl1X3RtcC0+bGVuKSkKKwkJCQlnb3RvIGRvbmU7CisJCX0KKwkJYnVmICs9IGtfdG1wLT5sZW47CisKKwkJa190bXAtPmNzX2NoYW5nZSA9ICEhdV90bXAtPmNzX2NoYW5nZTsKKwkJa190bXAtPmJpdHNfcGVyX3dvcmQgPSB1X3RtcC0+Yml0c19wZXJfd29yZDsKKwkJa190bXAtPmRlbGF5X3VzZWNzID0gdV90bXAtPmRlbGF5X3VzZWNzOworCQlrX3RtcC0+c3BlZWRfaHogPSB1X3RtcC0+c3BlZWRfaHo7CisjaWZkZWYgVkVSQk9TRQorCQlkZXZfZGJnKCZzcGktPmRldiwKKwkJCSIgIHhmZXIgbGVuICV6ZCAlcyVzJXMlZGJpdHMgJXUgdXNlYyAldUh6XG4iLAorCQkJdV90bXAtPmxlbiwKKwkJCXVfdG1wLT5yeF9idWYgPyAicnggIiA6ICIiLAorCQkJdV90bXAtPnR4X2J1ZiA/ICJ0eCAiIDogIiIsCisJCQl1X3RtcC0+Y3NfY2hhbmdlID8gImNzICIgOiAiIiwKKwkJCXVfdG1wLT5iaXRzX3Blcl93b3JkID8gOiBzcGktPmJpdHNfcGVyX3dvcmQsCisJCQl1X3RtcC0+ZGVsYXlfdXNlY3MsCisJCQl1X3RtcC0+c3BlZWRfaHogPyA6IHNwaS0+bWF4X3NwZWVkX2h6KTsKKyNlbmRpZgorCQlzcGlfbWVzc2FnZV9hZGRfdGFpbChrX3RtcCwgJm1zZyk7CisJfQorCisJc3RhdHVzID0gc3BpX3N5bmMoc3BpLCAmbXNnKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBkb25lOworCisJLyogY29weSBhbnkgcnggZGF0YSBvdXQgb2YgYm91bmNlIGJ1ZmZlciAqLworCWJ1ZiA9IHNwaWRldi0+YnVmZmVyOworCWZvciAobiA9IG5feGZlcnMsIHVfdG1wID0gdV94ZmVyczsgbjsgbi0tLCB1X3RtcCsrKSB7CisJCWlmICh1X3RtcC0+cnhfYnVmKSB7CisJCQlpZiAoX19jb3B5X3RvX3VzZXIoKHU4IF9fdXNlciAqKXVfdG1wLT5yeF9idWYsIGJ1ZiwKKwkJCQkJdV90bXAtPmxlbikpIHsKKwkJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCQlidWYgKz0gdV90bXAtPmxlbjsKKwl9CisJc3RhdHVzID0gdG90YWw7CisKK2RvbmU6CisJbXV0ZXhfdW5sb2NrKCZzcGlkZXYtPmJ1Zl9sb2NrKTsKKwlrZnJlZShrX3hmZXJzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50CitzcGlkZXZfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludAkJCWVyciA9IDA7CisJaW50CQkJcmV0dmFsID0gMDsKKwlzdHJ1Y3Qgc3BpZGV2X2RhdGEJKnNwaWRldjsKKwlzdHJ1Y3Qgc3BpX2RldmljZQkqc3BpOworCXUzMgkJCXRtcDsKKwl1bnNpZ25lZAkJbl9pb2M7CisJc3RydWN0IHNwaV9pb2NfdHJhbnNmZXIJKmlvYzsKKworCS8qIENoZWNrIHR5cGUgYW5kIGNvbW1hbmQgbnVtYmVyICovCisJaWYgKF9JT0NfVFlQRShjbWQpICE9IFNQSV9JT0NfTUFHSUMpCisJCXJldHVybiAtRU5PVFRZOworCisJLyogQ2hlY2sgYWNjZXNzIGRpcmVjdGlvbiBvbmNlIGhlcmU7IGRvbid0IHJlcGVhdCBiZWxvdy4KKwkgKiBJT0NfRElSIGlzIGZyb20gdGhlIHVzZXIgcGVyc3BlY3RpdmUsIHdoaWxlIGFjY2Vzc19vayBpcworCSAqIGZyb20gdGhlIGtlcm5lbCBwZXJzcGVjdGl2ZTsgc28gdGhleSBsb29rIHJldmVyc2VkLgorCSAqLworCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19SRUFEKQorCQllcnIgPSAhYWNjZXNzX29rKFZFUklGWV9XUklURSwKKwkJCQkodm9pZCBfX3VzZXIgKilhcmcsIF9JT0NfU0laRShjbWQpKTsKKwlpZiAoZXJyID09IDAgJiYgX0lPQ19ESVIoY21kKSAmIF9JT0NfV1JJVEUpCisJCWVyciA9ICFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsCisJCQkJKHZvaWQgX191c2VyICopYXJnLCBfSU9DX1NJWkUoY21kKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzcGlkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3BpID0gc3BpZGV2LT5zcGk7CisKKwlzd2l0Y2ggKGNtZCkgeworCS8qIHJlYWQgcmVxdWVzdHMgKi8KKwljYXNlIFNQSV9JT0NfUkRfTU9ERToKKwkJcmV0dmFsID0gX19wdXRfdXNlcihzcGktPm1vZGUgJiBTUElfTU9ERV9NQVNLLAorCQkJCQkoX191OCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKwljYXNlIFNQSV9JT0NfUkRfTFNCX0ZJUlNUOgorCQlyZXR2YWwgPSBfX3B1dF91c2VyKChzcGktPm1vZGUgJiBTUElfTFNCX0ZJUlNUKSA/ICAxIDogMCwKKwkJCQkJKF9fdTggX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBTUElfSU9DX1JEX0JJVFNfUEVSX1dPUkQ6CisJCXJldHZhbCA9IF9fcHV0X3VzZXIoc3BpLT5iaXRzX3Blcl93b3JkLCAoX191OCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKwljYXNlIFNQSV9JT0NfUkRfTUFYX1NQRUVEX0haOgorCQlyZXR2YWwgPSBfX3B1dF91c2VyKHNwaS0+bWF4X3NwZWVkX2h6LCAoX191MzIgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwkvKiB3cml0ZSByZXF1ZXN0cyAqLworCWNhc2UgU1BJX0lPQ19XUl9NT0RFOgorCQlyZXR2YWwgPSBfX2dldF91c2VyKHRtcCwgKHU4IF9fdXNlciAqKWFyZyk7CisJCWlmIChyZXR2YWwgPT0gMCkgeworCQkJdTgJc2F2ZSA9IHNwaS0+bW9kZTsKKworCQkJaWYgKHRtcCAmIH5TUElfTU9ERV9NQVNLKSB7CisJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJdG1wIHw9IHNwaS0+bW9kZSAmIH5TUElfTU9ERV9NQVNLOworCQkJc3BpLT5tb2RlID0gKHU4KXRtcDsKKwkJCXJldHZhbCA9IHNwaV9zZXR1cChzcGkpOworCQkJaWYgKHJldHZhbCA8IDApCisJCQkJc3BpLT5tb2RlID0gc2F2ZTsKKwkJCWVsc2UKKwkJCQlkZXZfZGJnKCZzcGktPmRldiwgInNwaSBtb2RlICUwMnhcbiIsIHRtcCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTUElfSU9DX1dSX0xTQl9GSVJTVDoKKwkJcmV0dmFsID0gX19nZXRfdXNlcih0bXAsIChfX3U4IF9fdXNlciAqKWFyZyk7CisJCWlmIChyZXR2YWwgPT0gMCkgeworCQkJdTgJc2F2ZSA9IHNwaS0+bW9kZTsKKworCQkJaWYgKHRtcCkKKwkJCQlzcGktPm1vZGUgfD0gU1BJX0xTQl9GSVJTVDsKKwkJCWVsc2UKKwkJCQlzcGktPm1vZGUgJj0gflNQSV9MU0JfRklSU1Q7CisJCQlyZXR2YWwgPSBzcGlfc2V0dXAoc3BpKTsKKwkJCWlmIChyZXR2YWwgPCAwKQorCQkJCXNwaS0+bW9kZSA9IHNhdmU7CisJCQllbHNlCisJCQkJZGV2X2RiZygmc3BpLT5kZXYsICIlY3NiIGZpcnN0XG4iLAorCQkJCQkJdG1wID8gJ2wnIDogJ20nKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNQSV9JT0NfV1JfQklUU19QRVJfV09SRDoKKwkJcmV0dmFsID0gX19nZXRfdXNlcih0bXAsIChfX3U4IF9fdXNlciAqKWFyZyk7CisJCWlmIChyZXR2YWwgPT0gMCkgeworCQkJdTgJc2F2ZSA9IHNwaS0+Yml0c19wZXJfd29yZDsKKworCQkJc3BpLT5iaXRzX3Blcl93b3JkID0gdG1wOworCQkJcmV0dmFsID0gc3BpX3NldHVwKHNwaSk7CisJCQlpZiAocmV0dmFsIDwgMCkKKwkJCQlzcGktPmJpdHNfcGVyX3dvcmQgPSBzYXZlOworCQkJZWxzZQorCQkJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cyBwZXIgd29yZFxuIiwgdG1wKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNQSV9JT0NfV1JfTUFYX1NQRUVEX0haOgorCQlyZXR2YWwgPSBfX2dldF91c2VyKHRtcCwgKF9fdTMyIF9fdXNlciAqKWFyZyk7CisJCWlmIChyZXR2YWwgPT0gMCkgeworCQkJdTMyCXNhdmUgPSBzcGktPm1heF9zcGVlZF9oejsKKworCQkJc3BpLT5tYXhfc3BlZWRfaHogPSB0bXA7CisJCQlyZXR2YWwgPSBzcGlfc2V0dXAoc3BpKTsKKwkJCWlmIChyZXR2YWwgPCAwKQorCQkJCXNwaS0+bWF4X3NwZWVkX2h6ID0gc2F2ZTsKKwkJCWVsc2UKKwkJCQlkZXZfZGJnKCZzcGktPmRldiwgIiVkIEh6IChtYXgpXG4iLCB0bXApOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogc2VnbWVudGVkIGFuZC9vciBmdWxsLWR1cGxleCBJL08gcmVxdWVzdCAqLworCQlpZiAoX0lPQ19OUihjbWQpICE9IF9JT0NfTlIoU1BJX0lPQ19NRVNTQUdFKDApKQorCQkJCXx8IF9JT0NfRElSKGNtZCkgIT0gX0lPQ19XUklURSkKKwkJCXJldHVybiAtRU5PVFRZOworCisJCXRtcCA9IF9JT0NfU0laRShjbWQpOworCQlpZiAoKHRtcCAlIHNpemVvZihzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlcikpICE9IDApIHsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQluX2lvYyA9IHRtcCAvIHNpemVvZihzdHJ1Y3Qgc3BpX2lvY190cmFuc2Zlcik7CisJCWlmIChuX2lvYyA9PSAwKQorCQkJYnJlYWs7CisKKwkJLyogY29weSBpbnRvIHNjcmF0Y2ggYXJlYSAqLworCQlpb2MgPSBrbWFsbG9jKHRtcCwgR0ZQX0tFUk5FTCk7CisJCWlmICghaW9jKSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKF9fY29weV9mcm9tX3VzZXIoaW9jLCAodm9pZCBfX3VzZXIgKilhcmcsIHRtcCkpIHsKKwkJCWtmcmVlKGlvYyk7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQkvKiB0cmFuc2xhdGUgdG8gc3BpX21lc3NhZ2UsIGV4ZWN1dGUgKi8KKwkJcmV0dmFsID0gc3BpZGV2X21lc3NhZ2Uoc3BpZGV2LCBpb2MsIG5faW9jKTsKKwkJa2ZyZWUoaW9jKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgc3BpZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHNwaWRldl9kYXRhCSpzcGlkZXY7CisJaW50CQkJc3RhdHVzID0gLUVOWElPOworCisJbXV0ZXhfbG9jaygmZGV2aWNlX2xpc3RfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwaWRldiwgJmRldmljZV9saXN0LCBkZXZpY2VfZW50cnkpIHsKKwkJaWYgKHNwaWRldi0+ZGV2LmRldnQgPT0gaW5vZGUtPmlfcmRldikgeworCQkJc3RhdHVzID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChzdGF0dXMgPT0gMCkgeworCQlpZiAoIXNwaWRldi0+YnVmZmVyKSB7CisJCQlzcGlkZXYtPmJ1ZmZlciA9IGttYWxsb2MoYnVmc2l6LCBHRlBfS0VSTkVMKTsKKwkJCWlmICghc3BpZGV2LT5idWZmZXIpIHsKKwkJCQlkZXZfZGJnKCZzcGlkZXYtPnNwaS0+ZGV2LCAib3Blbi9FTk9NRU1cbiIpOworCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQl9CisJCX0KKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlzcGlkZXYtPnVzZXJzKys7CisJCQlmaWxwLT5wcml2YXRlX2RhdGEgPSBzcGlkZXY7CisJCQlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxwKTsKKwkJfQorCX0gZWxzZQorCQlwcl9kZWJ1Zygic3BpZGV2OiBub3RoaW5nIGZvciBtaW5vciAlZFxuIiwgaW1pbm9yKGlub2RlKSk7CisKKwltdXRleF91bmxvY2soJmRldmljZV9saXN0X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgc3BpZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHNwaWRldl9kYXRhCSpzcGlkZXY7CisJaW50CQkJc3RhdHVzID0gMDsKKworCW11dGV4X2xvY2soJmRldmljZV9saXN0X2xvY2spOworCXNwaWRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXNwaWRldi0+dXNlcnMtLTsKKwlpZiAoIXNwaWRldi0+dXNlcnMpIHsKKwkJa2ZyZWUoc3BpZGV2LT5idWZmZXIpOworCQlzcGlkZXYtPmJ1ZmZlciA9IE5VTEw7CisJfQorCW11dGV4X3VubG9jaygmZGV2aWNlX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcGlkZXZfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkvKiBSRVZJU0lUIHN3aXRjaCB0byBhaW8gcHJpbWl0aXZlcywgc28gdGhhdCB1c2Vyc3BhY2UKKwkgKiBnZXRzIG1vcmUgY29tcGxldGUgQVBJIGNvdmVyYWdlLiAgSXQnbGwgc2ltcGxpZnkgdGhpbmdzCisJICogdG9vLCBleGNlcHQgZm9yIHRoZSBsb2NraW5nLgorCSAqLworCS53cml0ZSA9CXNwaWRldl93cml0ZSwKKwkucmVhZCA9CQlzcGlkZXZfcmVhZCwKKwkuaW9jdGwgPQlzcGlkZXZfaW9jdGwsCisJLm9wZW4gPQkJc3BpZGV2X29wZW4sCisJLnJlbGVhc2UgPQlzcGlkZXZfcmVsZWFzZSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRoZSBtYWluIHJlYXNvbiB0byBoYXZlIHRoaXMgY2xhc3MgaXMgdG8gbWFrZSBtZGV2L3VkZXYgY3JlYXRlIHRoZQorICogL2Rldi9zcGlkZXZCLkMgY2hhcmFjdGVyIGRldmljZSBub2RlcyBleHBvc2luZyBvdXIgdXNlcnNwYWNlIEFQSS4KKyAqIEl0IGFsc28gc2ltcGxpZmllcyBtZW1vcnkgbWFuYWdlbWVudC4KKyAqLworCitzdGF0aWMgdm9pZCBzcGlkZXZfY2xhc3NkZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNwaWRldl9kYXRhCSpzcGlkZXY7CisKKwlzcGlkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3BpZGV2X2RhdGEsIGRldik7CisJa2ZyZWUoc3BpZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzcyBzcGlkZXZfY2xhc3MgPSB7CisJLm5hbWUJCT0gInNwaWRldiIsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5kZXZfcmVsZWFzZQk9IHNwaWRldl9jbGFzc2Rldl9yZWxlYXNlLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBzcGlkZXZfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc3BpZGV2X2RhdGEJKnNwaWRldjsKKwlpbnQJCQlzdGF0dXM7CisJdW5zaWduZWQgbG9uZwkJbWlub3I7CisKKwkvKiBBbGxvY2F0ZSBkcml2ZXIgZGF0YSAqLworCXNwaWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpzcGlkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNwaWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBJbml0aWFsaXplIHRoZSBkcml2ZXIgZGF0YSAqLworCXNwaWRldi0+c3BpID0gc3BpOworCW11dGV4X2luaXQoJnNwaWRldi0+YnVmX2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnNwaWRldi0+ZGV2aWNlX2VudHJ5KTsKKworCS8qIElmIHdlIGNhbiBhbGxvY2F0ZSBhIG1pbm9yIG51bWJlciwgaG9vayB1cCB0aGlzIGRldmljZS4KKwkgKiBSZXVzaW5nIG1pbm9ycyBpcyBmaW5lIHNvIGxvbmcgYXMgdWRldiBvciBtZGV2IGlzIHdvcmtpbmcuCisJICovCisJbXV0ZXhfbG9jaygmZGV2aWNlX2xpc3RfbG9jayk7CisJbWlub3IgPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1pbm9ycywgTl9TUElfTUlOT1JTKTsKKwlpZiAobWlub3IgPCBOX1NQSV9NSU5PUlMpIHsKKwkJc3BpZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OworCQlzcGlkZXYtPmRldi5jbGFzcyA9ICZzcGlkZXZfY2xhc3M7CisJCXNwaWRldi0+ZGV2LmRldnQgPSBNS0RFVihTUElERVZfTUFKT1IsIG1pbm9yKTsKKwkJc25wcmludGYoc3BpZGV2LT5kZXYuYnVzX2lkLCBzaXplb2Ygc3BpZGV2LT5kZXYuYnVzX2lkLAorCQkJCSJzcGlkZXYlZC4lZCIsCisJCQkJc3BpLT5tYXN0ZXItPmJ1c19udW0sIHNwaS0+Y2hpcF9zZWxlY3QpOworCQlzdGF0dXMgPSBkZXZpY2VfcmVnaXN0ZXIoJnNwaWRldi0+ZGV2KTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKCZzcGktPmRldiwgIm5vIG1pbm9yIG51bWJlciBhdmFpbGFibGUhXG4iKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwl9CisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCXNldF9iaXQobWlub3IsIG1pbm9ycyk7CisJCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHNwaWRldik7CisJCWxpc3RfYWRkKCZzcGlkZXYtPmRldmljZV9lbnRyeSwgJmRldmljZV9saXN0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXZpY2VfbGlzdF9sb2NrKTsKKworCWlmIChzdGF0dXMgIT0gMCkKKwkJa2ZyZWUoc3BpZGV2KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgc3BpZGV2X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzcGlkZXZfZGF0YQkqc3BpZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwltdXRleF9sb2NrKCZkZXZpY2VfbGlzdF9sb2NrKTsKKworCWxpc3RfZGVsKCZzcGlkZXYtPmRldmljZV9lbnRyeSk7CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7CisJY2xlYXJfYml0KE1JTk9SKHNwaWRldi0+ZGV2LmRldnQpLCBtaW5vcnMpOworCWRldmljZV91bnJlZ2lzdGVyKCZzcGlkZXYtPmRldik7CisKKwltdXRleF91bmxvY2soJmRldmljZV9saXN0X2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBzcGlkZXZfc3BpID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0JCSJzcGlkZXYiLAorCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9CXNwaWRldl9wcm9iZSwKKwkucmVtb3ZlID0JX19kZXZleGl0X3Aoc3BpZGV2X3JlbW92ZSksCisKKwkvKiBOT1RFOiAgc3VzcGVuZC9yZXN1bWUgbWV0aG9kcyBhcmUgbm90IG5lY2Vzc2FyeSBoZXJlLgorCSAqIFdlIGRvbid0IGRvIGFueXRoaW5nIGV4Y2VwdCBwYXNzIHRoZSByZXF1ZXN0cyB0by9mcm9tCisJICogdGhlIHVuZGVybHlpbmcgY29udHJvbGxlci4gIFRoZSByZWZyaWdlcmF0b3IgaGFuZGxlcworCSAqIG1vc3QgaXNzdWVzOyB0aGUgY29udHJvbGxlciBkcml2ZXIgaGFuZGxlcyB0aGUgcmVzdC4KKwkgKi8KK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IHNwaWRldl9pbml0KHZvaWQpCit7CisJaW50IHN0YXR1czsKKworCS8qIENsYWltIG91ciAyNTYgcmVzZXJ2ZWQgZGV2aWNlIG51bWJlcnMuICBUaGVuIHJlZ2lzdGVyIGEgY2xhc3MKKwkgKiB0aGF0IHdpbGwga2V5IHVkZXYvbWRldiB0byBhZGQvcmVtb3ZlIC9kZXYgbm9kZXMuICBMYXN0LCByZWdpc3RlcgorCSAqIHRoZSBkcml2ZXIgd2hpY2ggbWFuYWdlcyB0aG9zZSBkZXZpY2UgbnVtYmVycy4KKwkgKi8KKwlCVUlMRF9CVUdfT04oTl9TUElfTUlOT1JTID4gMjU2KTsKKwlzdGF0dXMgPSByZWdpc3Rlcl9jaHJkZXYoU1BJREVWX01BSk9SLCAic3BpIiwgJnNwaWRldl9mb3BzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXN0YXR1cyA9IGNsYXNzX3JlZ2lzdGVyKCZzcGlkZXZfY2xhc3MpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaS5kcml2ZXIubmFtZSk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJc3RhdHVzID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmc3BpZGV2X3NwaSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJY2xhc3NfdW5yZWdpc3Rlcigmc3BpZGV2X2NsYXNzKTsKKwkJdW5yZWdpc3Rlcl9jaHJkZXYoU1BJREVWX01BSk9SLCBzcGlkZXZfc3BpLmRyaXZlci5uYW1lKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KK21vZHVsZV9pbml0KHNwaWRldl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNwaWRldl9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZzcGlkZXZfc3BpKTsKKwljbGFzc191bnJlZ2lzdGVyKCZzcGlkZXZfY2xhc3MpOworCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaS5kcml2ZXIubmFtZSk7Cit9Cittb2R1bGVfZXhpdChzcGlkZXZfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFuZHJlYSBQYXRlcm5pYW5pLCA8YS5wYXRlcm5pYW5pQHN3YXBwLWVuZy5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVXNlciBtb2RlIFNQSSBkZXZpY2UgaW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9LY29uZmlnIGIvZHJpdmVycy90ZWxlcGhvbnkvS2NvbmZpZwppbmRleCA3NjI1YjE4Li5kZDFkNmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlbGVwaG9ueS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdGVsZXBob255L0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAjCiAKIG1lbnUgIlRlbGVwaG9ueSBTdXBwb3J0IgorCWRlcGVuZHMgb24gSEFTX0lPTUVNCiAKIGNvbmZpZyBQSE9ORQogCXRyaXN0YXRlICJMaW51eCB0ZWxlcGhvbnkgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5jIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKaW5kZXggNzFjYjY0ZS4uYzdiMGEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKKysrIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKQEAgLTc2OTIsNyArNzY5Miw3IEBACiAJSVhKICpqID0gTlVMTDsKIAogCWZvciAoaSA9IDA7IGkgPCBJWEpNQVggLSAqY250OyBpKyspIHsKLQkJcGNpID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfUVVJQ0tORVQsCisJCXBjaSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfUVVJQ0tORVQsCiAJCQkJICAgICAgUENJX0RFVklDRV9JRF9RVUlDS05FVF9YSiwgcGNpKTsKIAkJaWYgKCFwY2kpCiAJCQlicmVhazsKQEAgLTc3MTIsNiArNzcxMiw3IEBACiAJCQlwcmludGsoS0VSTl9JTkZPICJpeGo6IGZvdW5kIEludGVybmV0IFBob25lSkFDSyBQQ0kgYXQgMHgleFxuIiwgai0+RFNQYmFzZSk7CiAJCSsrKmNudDsKIAl9CisJcGNpX2Rldl9wdXQocGNpKTsKIAlyZXR1cm4gcHJvYmU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9LY29uZmlnCmluZGV4IGI4NDdiYmMuLjE1NDk5YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvS2NvbmZpZwpAQCAtMyw2ICszLDcgQEAKICMKIAogbWVudSAiVVNCIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0KIAogIyBIb3N0LXNpZGUgVVNCIGRlcGVuZHMgb24gaGF2aW5nIGEgaG9zdCBjb250cm9sbGVyCiAjIE5PVEU6ICBkdW1teV9oY2QgaXMgYWx3YXlzIGFuIG9wdGlvbiwgYnV0IGl0J3MgaWdub3JlZCBoZXJlIC4uLgpAQCAtODcsOCArODgsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy91c2IvbmV0L0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy91c2IvbW9uL0tjb25maWciCiAKIGNvbW1lbnQgIlVTQiBwb3J0IGRyaXZlcnMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCmluZGV4IDBlZjA5MGIuLjcyNDY0YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCkBAIC0yMywxMyArMjMsNiBAQAogb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFKQkrPSBzdG9yYWdlLwogb2JqLSQoQ09ORklHX1VTQikJCSs9IHN0b3JhZ2UvCiAKLW9iai0kKENPTkZJR19VU0JfQ0FUQykJCSs9IG5ldC8KLW9iai0kKENPTkZJR19VU0JfS0FXRVRIKQkrPSBuZXQvCi1vYmotJChDT05GSUdfVVNCX1BFR0FTVVMpCSs9IG5ldC8KLW9iai0kKENPTkZJR19VU0JfUlRMODE1MCkJKz0gbmV0Lwotb2JqLSQoQ09ORklHX1VTQl9VU0JORVQpCSs9IG5ldC8KLW9iai0kKENPTkZJR19VU0JfWkQxMjAxKQkrPSBuZXQvCi0KIG9iai0kKENPTkZJR19VU0JfTURDODAwKQkrPSBpbWFnZS8KIG9iai0kKENPTkZJR19VU0JfTUlDUk9URUspCSs9IGltYWdlLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKaW5kZXggYjNmNzc5Zi4uMTFlOWIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYwpAQCAtNzcsNyArNzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgpAQCAtMTAzNCw3ICsxMDMzLDcgQEAKIAogc3RhdGljIGludCB1c2JhdG1faGVhdnlfaW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKmluc3RhbmNlKQogewotCWludCByZXQgPSBrZXJuZWxfdGhyZWFkKHVzYmF0bV9kb19oZWF2eV9pbml0LCBpbnN0YW5jZSwgQ0xPTkVfS0VSTkVMKTsKKwlpbnQgcmV0ID0ga2VybmVsX3RocmVhZCh1c2JhdG1fZG9faGVhdnlfaW5pdCwgaW5zdGFuY2UsIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMpOwogCiAJaWYgKHJldCA8IDApIHsKIAkJdXNiX2VycihpbnN0YW5jZSwgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIGtlcm5lbF90aHJlYWQgKCVkKSFcbiIsIF9fZnVuY19fLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IDE0ZGUzYjEuLjAwODFjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTU5LDcgKzU5LDYgQEAKICNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCmluZGV4IDY1ODRjZjAuLjdiMWVkZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTAwNCw3ICsxMDAzLDcgQEAKIAkJCQl1c2JscC0+d3JpdGVidWYsIHVzYmxwLT53cml0ZXVyYi0+dHJhbnNmZXJfZG1hKTsKIAkJaWYgKHVzYmxwLT5yZWFkYnVmKQogCQkJdXNiX2J1ZmZlcl9mcmVlICh1c2JscC0+ZGV2LCBVU0JMUF9CVUZfU0laRSwKLQkJCQl1c2JscC0+cmVhZGJ1ZiwgdXNibHAtPndyaXRldXJiLT50cmFuc2Zlcl9kbWEpOworCQkJCXVzYmxwLT5yZWFkYnVmLCB1c2JscC0+cmVhZHVyYi0+dHJhbnNmZXJfZG1hKTsKIAkJa2ZyZWUodXNibHAtPnN0YXR1c2J1Zik7CiAJCWtmcmVlKHVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nKTsKIAkJdXNiX2ZyZWVfdXJiKHVzYmxwLT53cml0ZXVyYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jIGIvZHJpdmVycy91c2IvY29yZS9jb25maWcuYwppbmRleCBiZmIzNzMxLi4yZDRmZDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKQEAgLTE4NSwxMCArMTg1LDEyIEBACiAJCW51bV9lcCA9IFVTQl9NQVhFTkRQT0lOVFM7CiAJfQogCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCkgKiBudW1fZXA7Ci0JYWx0LT5lbmRwb2ludCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFsdC0+ZW5kcG9pbnQpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChudW1fZXAgPiAwKSB7CS8qIENhbid0IGFsbG9jYXRlIDAgYnl0ZXMgKi8KKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCkgKiBudW1fZXA7CisJCWFsdC0+ZW5kcG9pbnQgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghYWx0LT5lbmRwb2ludCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KIAogCS8qIFBhcnNlIGFsbCB0aGUgZW5kcG9pbnQgZGVzY3JpcHRvcnMgKi8KIAluID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCmluZGV4IGI5ZjdmOTAuLjI2MTk5ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwpAQCAtOTgzLDcgKzk4MywxMCBAQAogCiAjZWxzZQogCi0jZGVmaW5lIGF1dG9zdXNwZW5kX2NoZWNrKHVkZXYpCQkwCitzdGF0aWMgaW5saW5lIGludCBhdXRvc3VzcGVuZF9jaGVjayhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlyZXR1cm4gMDsKK30KIAogI2VuZGlmCS8qIENPTkZJR19VU0JfU1VTUEVORCAqLwogCkBAIC0xMDQxLDcgKzEwNDQsNiBAQAogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCWdvdG8gZG9uZTsKIAl9Ci0JY2FuY2VsX2RlbGF5ZWRfd29yaygmdWRldi0+YXV0b3N1c3BlbmQpOwogCiAJLyogU3VzcGVuZCBhbGwgdGhlIGludGVyZmFjZXMgYW5kIHRoZW4gdWRldiBpdHNlbGYgKi8KIAlpZiAodWRldi0+YWN0Y29uZmlnKSB7CkBAIC0xMDYyLDkgKzEwNjQsMTYgQEAKIAkJCXVzYl9yZXN1bWVfaW50ZXJmYWNlKGludGYpOwogCQl9CiAKKwkJLyogVHJ5IGFub3RoZXIgYXV0b3N1c3BlbmQgd2hlbiB0aGUgaW50ZXJmYWNlcyBhcmVuJ3QgYnVzeSAqLworCQlpZiAodWRldi0+YXV0b19wbSkKKwkJCWF1dG9zdXNwZW5kX2NoZWNrKHVkZXYpOworCiAJLyogSWYgdGhlIHN1c3BlbmQgc3VjY2VlZGVkLCBwcm9wYWdhdGUgaXQgdXAgdGhlIHRyZWUgKi8KLQl9IGVsc2UgaWYgKHBhcmVudCkKLQkJdXNiX2F1dG9zdXNwZW5kX2RldmljZShwYXJlbnQpOworCX0gZWxzZSB7CisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnVkZXYtPmF1dG9zdXNwZW5kKTsKKwkJaWYgKHBhcmVudCkKKwkJCXVzYl9hdXRvc3VzcGVuZF9kZXZpY2UocGFyZW50KTsKKwl9CiAKICBkb25lOgogCS8vIGRldl9kYmcoJnVkZXYtPmRldiwgIiVzOiBzdGF0dXMgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKQEAgLTE0NzUsNiArMTQ4NCw3IEBACiAJdXNiX3BtX2xvY2sodWRldik7CiAJdWRldi0+YXV0b19wbSA9IDA7CiAJc3RhdHVzID0gdXNiX3Jlc3VtZV9ib3RoKHVkZXYpOworCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7CiAJdXNiX3BtX3VubG9jayh1ZGV2KTsKIAogCS8qIE5vdyB0aGF0IHRoZSBkZXZpY2UgaXMgYXdha2UsIHdlIGNhbiBzdGFydCB0cnlpbmcgdG8gYXV0b3N1c3BlbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDQwY2Y4ODIuLjg5NjllNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMTAxOCw4ICsxMDE4LDggQEAKIAkJYXRvbWljX2RlYyAoJnVyYi0+dXNlX2NvdW50KTsKIAkJaWYgKHVyYi0+cmVqZWN0KQogCQkJd2FrZV91cCAoJnVzYl9raWxsX3VyYl9xdWV1ZSk7Ci0JCXVzYl9wdXRfdXJiICh1cmIpOwogCQl1c2Jtb25fdXJiX3N1Ym1pdF9lcnJvcigmaGNkLT5zZWxmLCB1cmIsIHN0YXR1cyk7CisJCXVzYl9wdXRfdXJiICh1cmIpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTE3NSwxMCArMTE3NSw2IEBACiAJc3RydWN0IHVyYgkJKnVyYjsKIAogCWhjZCA9IGJ1c190b19oY2QodWRldi0+YnVzKTsKLQotCVdBUk5fT04gKCFIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSAmJiBoY2QtPnN0YXRlICE9IEhDX1NUQVRFX0hBTFQgJiYKLQkJCXVkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7Ci0KIAlsb2NhbF9pcnFfZGlzYWJsZSAoKTsKIAogCS8qIGVwIGlzIGFscmVhZHkgZ29uZSBmcm9tIHVkZXYtPmVwX3tpbixvdXR9W107IG5vIG1vcmUgc3VibWl0cyAqLwpAQCAtMTY4NSw3ICsxNjgxLDcgQEAKIAlzcGluX3VubG9ja19pcnEgKCZoY2Rfcm9vdF9odWJfbG9jayk7CiAKICNpZmRlZiBDT05GSUdfUE0KLQlmbHVzaF93b3JrcXVldWUoa3N1c3BlbmRfdXNiX3dxKTsKKwljYW5jZWxfd29ya19zeW5jKCZoY2QtPndha2V1cF93b3JrKTsKICNlbmRpZgogCiAJbXV0ZXhfbG9jaygmdXNiX2J1c19saXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggYmRlMjlhYi4uMjRmMTBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2JkZXZpY2VfZnMuaD4KQEAgLTExNTksNiArMTE1OCwzMCBAQAogCX0KIH0KIAorI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCitzdGF0aWMgdm9pZCB1c2Jfc3RvcF9wbShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwkvKiBTeW5jaHJvbml6ZSB3aXRoIHRoZSBrc3VzcGVuZCB0aHJlYWQgdG8gcHJldmVudCBhbnkgbW9yZQorCSAqIGF1dG9zdXNwZW5kIHJlcXVlc3RzIGZyb20gYmVpbmcgc3VibWl0dGVkLCBhbmQgZGVjcmVtZW50CisJICogdGhlIHBhcmVudCdzIGNvdW50IG9mIHVuc3VzcGVuZGVkIGNoaWxkcmVuLgorCSAqLworCXVzYl9wbV9sb2NrKHVkZXYpOworCWlmICh1ZGV2LT5wYXJlbnQgJiYgIXVkZXYtPmRpc2Nvbl9zdXNwZW5kZWQpCisJCXVzYl9hdXRvc3VzcGVuZF9kZXZpY2UodWRldi0+cGFyZW50KTsKKwl1c2JfcG1fdW5sb2NrKHVkZXYpOworCisJLyogU3RvcCBhbnkgYXV0b3N1c3BlbmQgcmVxdWVzdHMgYWxyZWFkeSBzdWJtaXR0ZWQgKi8KKwljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZ1ZGV2LT5hdXRvc3VzcGVuZCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jfc3RvcF9wbShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sgfQorCisjZW5kaWYKKwogLyoqCiAgKiB1c2JfZGlzY29ubmVjdCAtIGRpc2Nvbm5lY3QgYSBkZXZpY2UgKHVzYmNvcmUtaW50ZXJuYWwpCiAgKiBAcGRldjogcG9pbnRlciB0byBkZXZpY2UgYmVpbmcgZGlzY29ubmVjdGVkCkBAIC0xMjI1LDEzICsxMjQ4LDcgQEAKIAkqcGRldiA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CiAKLQkvKiBEZWNyZW1lbnQgdGhlIHBhcmVudCdzIGNvdW50IG9mIHVuc3VzcGVuZGVkIGNoaWxkcmVuICovCi0JaWYgKHVkZXYtPnBhcmVudCkgewotCQl1c2JfcG1fbG9jayh1ZGV2KTsKLQkJaWYgKCF1ZGV2LT5kaXNjb25fc3VzcGVuZGVkKQotCQkJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2LT5wYXJlbnQpOwotCQl1c2JfcG1fdW5sb2NrKHVkZXYpOwotCX0KKwl1c2Jfc3RvcF9wbSh1ZGV2KTsKIAogCXB1dF9kZXZpY2UoJnVkZXYtPmRldik7CiB9CkBAIC0yMjAyLDE0ICsyMjE5LDkgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAotCQkJLyogVXNlIGEgc2hvcnQgdGltZW91dCB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLAotCQkJICogc28gdGhhdCByZWNhbGNpdHJhbnQgZnVsbC1zcGVlZCBkZXZpY2VzIHdpdGgKLQkJCSAqIDgtIG9yIDE2LWJ5dGUgZXAwLW1heHBhY2tldHMgd29uJ3Qgc2xvdyB0aGluZ3MKLQkJCSAqIGRvd24gdHJlbWVuZG91c2x5IGJ5IE5BS2luZyB0aGUgdW5leHBlY3RlZGx5Ci0JCQkgKiBlYXJseSBzdGF0dXMgc3RhZ2UuICBBbHNvLCByZXRyeSBvbiBhbGwgZXJyb3JzOwotCQkJICogc29tZSBkZXZpY2VzIGFyZSBmbGFrZXkuCi0JCQkgKiAyNTUgaXMgZm9yIFdVU0IgZGV2aWNlcywgd2UgYWN0dWFsbHkgbmVlZCB0byB1c2UgNTEyLgotCQkJICogV1VTQjEuMFs0LjguMV0uCisJCQkvKiBSZXRyeSBvbiBhbGwgZXJyb3JzOyBzb21lIGRldmljZXMgYXJlIGZsYWtleS4KKwkJCSAqIDI1NSBpcyBmb3IgV1VTQiBkZXZpY2VzLCB3ZSBhY3R1YWxseSBuZWVkIHRvIHVzZQorCQkJICogNTEyIChXVVNCMS4wWzQuOC4xXSkuCiAJCQkgKi8KIAkJCWZvciAoaiA9IDA7IGogPCAzOyArK2opIHsKIAkJCQlidWYtPmJNYXhQYWNrZXRTaXplMCA9IDA7CkBAIC0yMjE3LDcgKzIyMjksNyBAQAogCQkJCQlVU0JfUkVRX0dFVF9ERVNDUklQVE9SLCBVU0JfRElSX0lOLAogCQkJCQlVU0JfRFRfREVWSUNFIDw8IDgsIDAsCiAJCQkJCWJ1ZiwgR0VUX0RFU0NSSVBUT1JfQlVGU0laRSwKLQkJCQkJKGkgPyBVU0JfQ1RSTF9HRVRfVElNRU9VVCA6IDEwMDApKTsKKwkJCQkJVVNCX0NUUkxfR0VUX1RJTUVPVVQpOwogCQkJCXN3aXRjaCAoYnVmLT5iTWF4UGFja2V0U2l6ZTApIHsKIAkJCQljYXNlIDg6IGNhc2UgMTY6IGNhc2UgMzI6IGNhc2UgNjQ6IGNhc2UgMjU1OgogCQkJCQlpZiAoYnVmLT5iRGVzY3JpcHRvclR5cGUgPT0KQEAgLTI0MjcsMTAgKzI0MzksMTAgQEAKIAogCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04pIHsKIAkJc3RhdHVzID0gaHViX3BvcnRfZGVib3VuY2UoaHViLCBwb3J0MSk7Ci0JCWlmIChzdGF0dXMgPCAwICYmIHByaW50a19yYXRlbGltaXQoKSkgewotCQkJZGV2X2VyciAoaHViX2RldiwKLQkJCQkiY29ubmVjdC1kZWJvdW5jZSBmYWlsZWQsIHBvcnQgJWQgZGlzYWJsZWRcbiIsCi0JCQkJcG9ydDEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQlkZXZfZXJyIChodWJfZGV2LCAiY29ubmVjdC1kZWJvdW5jZSBmYWlsZWQsICIKKwkJCQkJCSJwb3J0ICVkIGRpc2FibGVkXG4iLCBwb3J0MSk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJcG9ydHN0YXR1cyA9IHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwppbmRleCBjZGRmYzYyLi5jZDRmMTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC91c2JkZXZpY2VfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwppbmRleCBiNzQzNDc4Li5mOWZlZDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpAQCAtMjIxLDE1ICsyMjEsMTAgQEAKIAogCWlmICgoZXAtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CiAJCQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKLQkJaW50IGludGVydmFsOwotCi0JCWlmICh1c2JfZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKLQkJCWludGVydmFsID0gMSA8PCBtaW4oMTUsIGVwLT5kZXNjLmJJbnRlcnZhbCAtIDEpOwotCQllbHNlCi0JCQlpbnRlcnZhbCA9IGVwLT5kZXNjLmJJbnRlcnZhbDsKIAkJcGlwZSA9IChwaXBlICYgfigzIDw8IDMwKSkgfCAoUElQRV9JTlRFUlJVUFQgPDwgMzApOwogCQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgdXNiX2RldiwgcGlwZSwgZGF0YSwgbGVuLAotCQkJCXVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCwgaW50ZXJ2YWwpOworCQkJCXVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCwKKwkJCQllcC0+ZGVzYy5iSW50ZXJ2YWwpOwogCX0gZWxzZQogCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwKIAkJCQl1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IGU3Yzk4MjMuLmJlMzdjODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTIzMiwxMiArMjMyLDE1IEBACiAJaW50IGxlbiA9IGNvdW50OwogCWNoYXIgKmNwOwogCWludCByYyA9IDA7CisJaW50IG9sZF9hdXRvc3VzcGVuZF9kaXNhYmxlZCwgb2xkX2F1dG9yZXN1bWVfZGlzYWJsZWQ7CiAKIAljcCA9IG1lbWNocihidWYsICdcbicsIGNvdW50KTsKIAlpZiAoY3ApCiAJCWxlbiA9IGNwIC0gYnVmOwogCiAJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCW9sZF9hdXRvc3VzcGVuZF9kaXNhYmxlZCA9IHVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkOworCW9sZF9hdXRvcmVzdW1lX2Rpc2FibGVkID0gdWRldi0+YXV0b3Jlc3VtZV9kaXNhYmxlZDsKIAogCS8qIFNldHRpbmcgdGhlIGZsYWdzIHdpdGhvdXQgY2FsbGluZyB1c2JfcG1fbG9jayBpcyBhIHN1YmplY3QgdG8KIAkgKiByYWNlcywgYnV0IHdobyBjYXJlcy4uLgpAQCAtMjYzLDYgKzI2NiwxMCBAQAogCX0gZWxzZQogCQlyYyA9IC1FSU5WQUw7CiAKKwlpZiAocmMpIHsKKwkJdWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQgPSBvbGRfYXV0b3N1c3BlbmRfZGlzYWJsZWQ7CisJCXVkZXYtPmF1dG9yZXN1bWVfZGlzYWJsZWQgPSBvbGRfYXV0b3Jlc3VtZV9kaXNhYmxlZDsKKwl9CiAJdXNiX3VubG9ja19kZXZpY2UodWRldik7CiAJcmV0dXJuIChyYyA8IDAgPyByYyA6IGNvdW50KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IGRmZDFiNWMuLjRhNjI5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpAQCAtMTg1LDEwICsxODQsNiBAQAogCiAJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKIAotI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnVkZXYtPmF1dG9zdXNwZW5kKTsKLQlmbHVzaF93b3JrcXVldWUoa3N1c3BlbmRfdXNiX3dxKTsKLSNlbmRpZgogCXVzYl9kZXN0cm95X2NvbmZpZ3VyYXRpb24odWRldik7CiAJdXNiX3B1dF9oY2QoYnVzX3RvX2hjZCh1ZGV2LT5idXMpKTsKIAlrZnJlZSh1ZGV2LT5wcm9kdWN0KTsKQEAgLTIwNiw3ICsyMDEsMTEgQEAKIAogc3RhdGljIGludCBrc3VzcGVuZF91c2JfaW5pdCh2b2lkKQogewotCWtzdXNwZW5kX3VzYl93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrc3VzcGVuZF91c2JkIik7CisJLyogVGhpcyB3b3JrcXVldWUgaXMgc3VwcG9zZWQgdG8gYmUgYm90aCBmcmVlemFibGUgYW5kCisJICogc2luZ2xldGhyZWFkZWQuICBJdHMgam9iIGRvZXNuJ3QganVzdGlmeSBydW5uaW5nIG9uIG1vcmUKKwkgKiB0aGFuIG9uZSBDUFUuCisJICovCisJa3N1c3BlbmRfdXNiX3dxID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKCJrc3VzcGVuZF91c2JkIik7CiAJaWYgKCFrc3VzcGVuZF91c2Jfd3EpCiAJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCA4MDY1ZjJiLi5mNzcxYTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMjEwLDcgKzIxMCw3IEBACiAKIGNvbmZpZyBVU0JfR0FER0VUX0FUOTEKIAlib29sZWFuICJBVDkxIFVTQiBEZXZpY2UgUG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfQVQ5MQorCWRlcGVuZHMgb24gQVJDSF9BVDkxICYmICFBUkNIX0FUOTFTQU05UkwKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCWhlbHAKIAkgICBNYW55IEF0bWVsIEFUOTEgcHJvY2Vzc29ycyAoc3VjaCBhcyB0aGUgQVQ5MVJNMjAwMCkgaGF2ZSBhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCmluZGV4IDJhNmUzMTYuLmJhMTYzZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggN2Q3OTA5Yy4uZmNiNTUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggMWRkOGI1Ny4uMzI1YmY3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKaW5kZXggMTU3MDU0ZS4uM2NhMmIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwpAQCAtMjI4LDEzICsyMjgsMTUgQEAKIAogCS8qIENvbmZpZyBQSFkgaW50ZXJmYWNlICovCiAJcG9ydGN0cmwgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPnBvcnRzYzEpOwotCXBvcnRjdHJsICY9IH5QT1JUU0NYX1BIWV9UWVBFX1NFTDsKKwlwb3J0Y3RybCAmPSB+KFBPUlRTQ1hfUEhZX1RZUEVfU0VMICYgUE9SVFNDWF9QT1JUX1dJRFRIKTsKIAlzd2l0Y2ggKHVkYy0+cGh5X21vZGUpIHsKIAljYXNlIEZTTF9VU0IyX1BIWV9VTFBJOgogCQlwb3J0Y3RybCB8PSBQT1JUU0NYX1BUU19VTFBJOwogCQlicmVhazsKLQljYXNlIEZTTF9VU0IyX1BIWV9VVE1JOgogCWNhc2UgRlNMX1VTQjJfUEhZX1VUTUlfV0lERToKKwkJcG9ydGN0cmwgfD0gUE9SVFNDWF9QVFdfMTZCSVQ7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgRlNMX1VTQjJfUEhZX1VUTUk6CiAJCXBvcnRjdHJsIHw9IFBPUlRTQ1hfUFRTX1VUTUk7CiAJCWJyZWFrOwogCWNhc2UgRlNMX1VTQjJfUEhZX1NFUklBTDoKQEAgLTYyNSw3ICs2MjcsNyBAQAogCXN0cnVjdCBmc2xfZXAgKmVwOwogCiAJaWYgKCFfZXApCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm47CiAKIAllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBmc2xfZXAsIGVwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwppbmRleCA2NWM5MWQzLi5hZTkzMWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCmluZGV4IDQ5ZDczNzcuLjUyNzc5YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwpAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwppbmRleCBlNTUyNjY4Li5mODQ3YzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKaW5kZXggOGM4NWUzMy4uNzA3ODM3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCkBAIC02Nyw3ICs2Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCmluZGV4IGE1MjQ4MDUuLmM3YTdjNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKQEAgLTE5Myw2ICsxOTMsMTkgQEAKIAlvdXRfYmUzMihub25fZWhjaSArIEZTTF9TT0NfVVNCX0NUUkwsIDB4MDAwMDAwMDQpOwogCW91dF9iZTMyKG5vbl9laGNpICsgRlNMX1NPQ19VU0JfU05PT1AxLCAweDAwMDAwMDFiKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQorCS8qCisJICogVHVybiBvbiBjYWNoZSBzbm9vcGluZyBoYXJkd2FyZSwgc2luY2Ugc29tZSBQb3dlclBDIHBsYXRmb3JtcworCSAqIHdob2xseSByZWx5IG9uIGhhcmR3YXJlIHRvIGRlYWwgd2l0aCBjYWNoZSBjb2hlcmVudAorCSAqLworCisJLyogU2V0dXAgU25vb3BpbmcgZm9yIGFsbCB0aGUgNEdCIHNwYWNlICovCisJLyogU05PT1AxIHN0YXJ0cyBmcm9tIDB4MCwgc2l6ZSAyRyAqLworCW91dF9iZTMyKG5vbl9laGNpICsgRlNMX1NPQ19VU0JfU05PT1AxLCAweDAgfCBTTk9PUF9TSVpFXzJHQik7CisJLyogU05PT1AyIHN0YXJ0cyBmcm9tIDB4ODAwMDAwMDAsIHNpemUgMkcgKi8KKwlvdXRfYmUzMihub25fZWhjaSArIEZTTF9TT0NfVVNCX1NOT09QMiwgMHg4MDAwMDAwMCB8IFNOT09QX1NJWkVfMkdCKTsKKyNlbmRpZgorCiAJaWYgKHBkYXRhLT5vcGVyYXRpbmdfbW9kZSA9PSBGU0xfVVNCMl9EUl9IT1NUKQogCQltcGM4M3h4X3NldHVwX3BoeShlaGNpLCBwZGF0YS0+cGh5X21vZGUsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmggYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmgKaW5kZXggZjI4NzM2YS4uYjVlNTlkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuaApAQCAtMzQsNCArMzQsNSBAQAogI2RlZmluZSBGU0xfU09DX1VTQl9QUklDVFJMCTB4NDBjCS8qIE5PVEU6IGJpZy1lbmRpYW4gKi8KICNkZWZpbmUgRlNMX1NPQ19VU0JfU0lDVFJMCTB4NDEwCS8qIE5PVEU6IGJpZy1lbmRpYW4gKi8KICNkZWZpbmUgRlNMX1NPQ19VU0JfQ1RSTAkweDUwMAkvKiBOT1RFOiBiaWctZW5kaWFuICovCisjZGVmaW5lIFNOT09QX1NJWkVfMkdCCQkweDFlCiAjZW5kaWYJCQkJLyogX0VIQ0lfRlNMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCBjNzQ1OGY3Li4wOTlhZmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBzMy5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBzMy5jCmluZGV4IDkzMTA3NDUuLjM3YjgzYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wczMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcHMzLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogbW1pbyBtYXBwZWRfYWRkciAlbHhoXG4iLCBfX2Z1bmNfXywKIAkJX19MSU5FX18sIGRldi0+bV9yZWdpb24tPmxwYXJfYWRkcik7CiAKLQlyZXN1bHQgPSBwczNfYWxsb2NfaW9faXJxKFBTM19CSU5ESU5HX0NQVV9BTlksIGRldi0+aW50ZXJydXB0X2lkLCAmdmlycSk7CisJcmVzdWx0ID0gcHMzX2lvX2lycV9zZXR1cChQUzNfQklORElOR19DUFVfQU5ZLCBkZXYtPmludGVycnVwdF9pZCwgJnZpcnEpOwogCiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogcHMzX2NvbnN0cnVjdF9pb19pcnEoJWQpIGZhaWxlZC5cbiIsCkBAIC0xNTUsNyArMTU1LDcgQEAKIGZhaWxfaW9yZW1hcDoKIAl1c2JfcHV0X2hjZChoY2QpOwogZmFpbF9jcmVhdGVfaGNkOgotCXBzM19mcmVlX2lvX2lycSh2aXJxKTsKKwlwczNfaW9faXJxX2Rlc3Ryb3kodmlycSk7CiBmYWlsX2lycToKIAlwczNfZnJlZV9tbWlvX3JlZ2lvbihkZXYtPm1fcmVnaW9uKTsKIGZhaWxfbW1pbzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCBlOGJiZThiLi5hNjY2MzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCmluZGV4IDc5NzA1NjAuLmNhNjJjYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQkvKiBUb3NoaWJhIHBvcnRlZ2UgNDAwMCAqLwogCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfQUwsCiAJCS5kZXZpY2UJCT0gMHg1MjM3LAotCQkuc3VidmVuZG9yCT0gUENJX1ZFTkRPUl9JRF9UT1NISUJBXzIsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfVkVORE9SX0lEX1RPU0hJQkEsCiAJCS5zdWJkZXZpY2UJPSAweDAwMDQsCiAJCS5kcml2ZXJfZGF0YQk9ICh1bnNpZ25lZCBsb25nKSBicm9rZW5fc3VzcGVuZCwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1vZi5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1vZi5jCmluZGV4IDA4ZTIzN2MuLmM0M2I2NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtb2YuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLW9mLmMKQEAgLTk3LDggKzk3LDggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpc19iaWdlbmRpYW4gPQotCQlkZXZpY2VfaXNfY29tcGF0aWJsZShkbiwgIm9oY2ktYmlnZW5kaWFuIikgfHwKLQkJZGV2aWNlX2lzX2NvbXBhdGlibGUoZG4sICJvaGNpLWJlIik7CisJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKGRuLCAib2hjaS1iaWdlbmRpYW4iKSB8fAorCQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkbiwgIm9oY2ktYmUiKTsKIAogCWRldl9kYmcoJm9wLT5kZXYsICJpbml0aWFsaXppbmcgUFBDLU9GIFVTQiBDb250cm9sbGVyXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBzMy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBzMy5jCmluZGV4IGM4NDlmNzIuLmQ3Y2YwNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wczMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHMzLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogbW1pbyBtYXBwZWRfYWRkciAlbHhoXG4iLCBfX2Z1bmNfXywKIAkJX19MSU5FX18sIGRldi0+bV9yZWdpb24tPmxwYXJfYWRkcik7CiAKLQlyZXN1bHQgPSBwczNfYWxsb2NfaW9faXJxKFBTM19CSU5ESU5HX0NQVV9BTlksIGRldi0+aW50ZXJydXB0X2lkLCAmdmlycSk7CisJcmVzdWx0ID0gcHMzX2lvX2lycV9zZXR1cChQUzNfQklORElOR19DUFVfQU5ZLCBkZXYtPmludGVycnVwdF9pZCwgJnZpcnEpOwogCiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogcHMzX2NvbnN0cnVjdF9pb19pcnEoJWQpIGZhaWxlZC5cbiIsCkBAIC0xNTcsNyArMTU3LDcgQEAKIGZhaWxfaW9yZW1hcDoKIAl1c2JfcHV0X2hjZChoY2QpOwogZmFpbF9jcmVhdGVfaGNkOgotCXBzM19mcmVlX2lvX2lycSh2aXJxKTsKKwlwczNfaW9faXJxX2Rlc3Ryb3kodmlycSk7CiBmYWlsX2lycToKIAlwczNfZnJlZV9tbWlvX3JlZ2lvbihkZXYtPm1fcmVnaW9uKTsKIGZhaWxfbW1pbzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKaW5kZXggMjA4NjE2NS4uYzIyNTE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNkZWZpbmUgRUhDSV9VU0JTVFMJCTQJCS8qIHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZSBFSENJX1VTQlNUU19IQUxURUQJKDEgPDwgMTIpCS8qIEhDSGFsdGVkIGJpdCAqLwogI2RlZmluZSBFSENJX1VTQklOVFIJCTgJCS8qIGludGVycnVwdCByZWdpc3RlciAqLworI2RlZmluZSBFSENJX0NPTkZJR0ZMQUcJCTB4NDAJCS8qIGNvbmZpZ3VyZWQgZmxhZyByZWdpc3RlciAqLwogI2RlZmluZSBFSENJX1VTQkxFR1NVUAkJMAkJLyogbGVnYWN5IHN1cHBvcnQgcmVnaXN0ZXIgKi8KICNkZWZpbmUgRUhDSV9VU0JMRUdTVVBfQklPUwkoMSA8PCAxNikJLyogQklPUyBzZW1hcGhvcmUgKi8KICNkZWZpbmUgRUhDSV9VU0JMRUdTVVBfT1MJKDEgPDwgMjQpCS8qIE9TIHNlbWFwaG9yZSAqLwpAQCAtMjE2LDYgKzIxNyw3IEBACiAJdTMyCWhjY19wYXJhbXMsIHZhbDsKIAl1OAlvZmZzZXQsIGNhcF9sZW5ndGg7CiAJaW50CWNvdW50ID0gMjU2LzQ7CisJaW50CXRyaWVkX2hhbmRvZmYgPSAwOwogCiAJaWYgKCFtbWlvX3Jlc291cmNlX2VuYWJsZWQocGRldiwgMCkpCiAJCXJldHVybjsKQEAgLTI3Myw2ICsyNzUsNyBAQAogCQkJICovCiAJCQltc2VjID0gNTAwMDsKIAkJCXdoaWxlICgoY2FwICYgRUhDSV9VU0JMRUdTVVBfQklPUykgJiYgKG1zZWMgPiAwKSkgeworCQkJCXRyaWVkX2hhbmRvZmYgPSAxOwogCQkJCW1zbGVlcCgxMCk7CiAJCQkJbXNlYyAtPSAxMDsKIAkJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgb2Zmc2V0LCAmY2FwKTsKQEAgLTI5Miw2ICsyOTUsMTIgQEAKIAkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwKIAkJCQkJb2Zmc2V0ICsgRUhDSV9VU0JMRUdDVExTVFMsCiAJCQkJCTApOworCisJCQkvKiBJZiB0aGUgQklPUyBldmVyIG93bmVkIHRoZSBjb250cm9sbGVyIHRoZW4gd2UKKwkJCSAqIGNhbid0IGV4cGVjdCBhbnkgcG93ZXIgc2Vzc2lvbnMgdG8gcmVtYWluIGludGFjdC4KKwkJCSAqLworCQkJaWYgKHRyaWVkX2hhbmRvZmYpCisJCQkJd3JpdGVsKDAsIG9wX3JlZ19iYXNlICsgRUhDSV9DT05GSUdGTEFHKTsKIAkJCWJyZWFrOwogCQljYXNlIDA6CQkJLyogaWxsZWdhbCByZXNlcnZlZCBjYXBhYmlsaXR5ICovCiAJCQljYXAgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggNWZhNTY0Ny4uNGNmYTNmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jCmluZGV4IGE3ZmEwZDcuLmU5OGRmMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdTEzMi1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3UxMzItaGNkLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtNTgsNiArNTcsMTMgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCisKKwkvKiBGSVhNRSBvaGNpLmggaXMgT05MWSBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBPSENJIGRyaXZlci4KKwkgKiBJZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHN0dWZmIGxpa2UgdGhpcywgeW91IG5lZWQgdG8gc3BsaXQKKwkgKiBvdXQgc2hhcmVhYmxlIHN0dWZmIChyZWdpc3RlciBkZWNsYXJhdGlvbnM/KSBpbnRvIGl0cyBvd24KKwkgKiBmaWxlLCBtYXliZSBuYW1lIDxsaW51eC91c2Ivb2hjaS5oPgorCSAqLworCiAjaW5jbHVkZSAib2hjaS5oIgogI2RlZmluZSBPSENJX0NPTlRST0xfSU5JVCBPSENJX0NUUkxfQ0JTUgogI2RlZmluZSBPSENJX0lOVFJfSU5JVCAoT0hDSV9JTlRSX01JRSB8IE9IQ0lfSU5UUl9VRSB8IE9IQ0lfSU5UUl9SRCB8IFwKQEAgLTE3NCwxMSArMTgwLDYgQEAKICAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqY3Vycl9lbmRwOwogICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrIHNjaGVkdWxlcjsKIH07Ci0jZGVmaW5lIE9IQ0lfUVVJUktfQU1ENzU2IDB4MDEKLSNkZWZpbmUgT0hDSV9RVUlSS19TVVBFUklPIDB4MDIKLSNkZWZpbmUgT0hDSV9RVUlSS19JTklUUkVTRVQgMHgwNAotI2RlZmluZSBPSENJX0JJR19FTkRJQU4gMHgwOAotI2RlZmluZSBPSENJX1FVSVJLX1pGTUlDUk8gMHgxMAogc3RydWN0IHUxMzIgewogICAgICAgICBzdHJ1Y3Qga3JlZiBrcmVmOwogICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHUxMzJfbGlzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKaW5kZXggZDMwOGFmZC4uMzY1MDJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKQEAgLTk0LDcgKzk0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCmluZGV4IDg5NmNiMmIuLjUxYmQ4MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwpAQCAtMTI4LDcgKzEyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwppbmRleCBiNTMzMmU2Li5jYWMxNTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMKQEAgLTEzMDcsNyArMTMwNyw3IEBACiB9CiAKIAotLyogcmVtb3ZlIGEgc2VydmljZSBmcm9tIHRoZSB0aGUgZGV2aWNlCisvKiByZW1vdmUgYSBzZXJ2aWNlIGZyb20gdGhlIGRldmljZQogICAgc2NwLT5pZCBtdXN0IGJlIHNldCEgKi8KIHN0YXRpYyB2b2lkIGF1ZXJzd2FsZF9yZW1vdmVzZXJ2aWNlIChwYXVlcnN3YWxkX3QgY3AsIHBhdWVyc2Nvbl90IHNjcCkKIHsKQEAgLTE4MjIsMTYgKzE4MjIsMTAgQEAKIAlwYXVlcnN3YWxkX3QgY3A7CiAJZGJnKCJyZWxlYXNlIik7CiAKLQkvKiBnZXQgdGhlIG11dGV4ZXMgKi8KLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY2NwLT5tdXRleCkpIHsKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQl9CisJZG93bigmY2NwLT5tdXRleCk7CiAJY3AgPSBjY3AtPmF1ZXJkZXY7CiAJaWYgKGNwKSB7Ci0JCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjcC0+bXV0ZXgpKSB7Ci0JCQl1cCAoJmNjcC0+bXV0ZXgpOwotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJfQorCQlkb3duKCZjcC0+bXV0ZXgpOwogCQkvKiByZW1vdmUgYW4gb3BlbiBzZXJ2aWNlICovCiAJCWF1ZXJzd2FsZF9yZW1vdmVzZXJ2aWNlIChjcCwgJmNjcC0+c2NvbnRleHQpOwogCQkvKiBkZXRhY2ggZnJvbSBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCmluZGV4IGUyMTcyZTUuLmUwZjEyMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYwpAQCAtNzMsNiArNzMsMTMgQEAKICNpbmNsdWRlICJ1c2JfdTEzMi5oIgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCisKKwkvKiBGSVhNRSBvaGNpLmggaXMgT05MWSBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBPSENJIGRyaXZlci4KKwkgKiBJZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHN0dWZmIGxpa2UgdGhpcywgeW91IG5lZWQgdG8gc3BsaXQKKwkgKiBvdXQgc2hhcmVhYmxlIHN0dWZmIChyZWdpc3RlciBkZWNsYXJhdGlvbnM/KSBpbnRvIGl0cyBvd24KKwkgKiBmaWxlLCBtYXliZSBuYW1lIDxsaW51eC91c2Ivb2hjaS5oPgorCSAqLworCiAjaW5jbHVkZSAiLi4vaG9zdC9vaGNpLmgiCiAvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlcyovCiAjZGVmaW5lIFVTQl9GVERJX0VMQU5fVkVORE9SX0lEIDB4MDQwMwpAQCAtMjMwMCwxMCArMjMwNyw3IEBACiAgICAgICAgIG9mZnNldG9mKHN0cnVjdCBvaGNpX3JlZ3MsIG1lbWJlciksIDAsIGRhdGEpOwogI2RlZmluZSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBtZW1iZXIsIGRhdGEpIGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgXAogICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgb2hjaV9yZWdzLCBtZW1iZXIpLCAwLCBkYXRhKTsKLSNkZWZpbmUgT0hDSV9RVUlSS19BTUQ3NTYgMHgwMQotI2RlZmluZSBPSENJX1FVSVJLX1NVUEVSSU8gMHgwMgotI2RlZmluZSBPSENJX1FVSVJLX0lOSVRSRVNFVCAweDA0Ci0jZGVmaW5lIE9IQ0lfQklHX0VORElBTiAweDA4CisKICNkZWZpbmUgT0hDSV9DT05UUk9MX0lOSVQgT0hDSV9DVFJMX0NCU1IKICNkZWZpbmUgT0hDSV9JTlRSX0lOSVQgKE9IQ0lfSU5UUl9NSUUgfCBPSENJX0lOVFJfVUUgfCBPSENJX0lOVFJfUkQgfCBcCiAgICAgICAgIE9IQ0lfSU5UUl9XREgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCmluZGV4IDE1YzcwYmQuLjhkMGUzNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKaW5kZXggMTE1NTViZC4uN2JhZDQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYwpAQCAtMTY1LDYgKzE2NSw4IEBACiAJc2l6ZV90CQkJaW50ZXJydXB0X2luX2VuZHBvaW50X3NpemU7CiAJaW50CQkJaW50ZXJydXB0X2luX3J1bm5pbmc7CiAJaW50CQkJaW50ZXJydXB0X2luX2RvbmU7CisJaW50CQkJYnVmZmVyX292ZXJmbG93OworCXNwaW5sb2NrX3QJCXJic2w7CiAKIAljaGFyKgkJCWludGVycnVwdF9vdXRfYnVmZmVyOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciogaW50ZXJydXB0X291dF9lbmRwb2ludDsKQEAgLTIzMCwxMCArMjMyLDEyIEBACiAJCX0gZWxzZSB7CiAJCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogbm9uemVybyBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAogCQkJCSBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJCXNwaW5fbG9jaygmZGV2LT5yYnNsKTsKIAkJCWdvdG8gcmVzdWJtaXQ7IC8qIG1heWJlIHdlIGNhbiByZWNvdmVyICovCiAJCX0KIAl9CiAKKwlzcGluX2xvY2soJmRldi0+cmJzbCk7CiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApIHsKIAkJbmV4dF9yaW5nX2hlYWQgPSAoZGV2LT5yaW5nX2hlYWQrMSkgJSByaW5nX2J1ZmZlcl9zaXplOwogCQlpZiAobmV4dF9yaW5nX2hlYWQgIT0gZGV2LT5yaW5nX3RhaWwpIHsKQEAgLTI0NCwyMSArMjQ4LDI1IEBACiAJCQlkZXYtPnJpbmdfaGVhZCA9IG5leHRfcmluZ19oZWFkOwogCQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IHJlY2VpdmVkICVkIGJ5dGVzXG4iLAogCQkJCSBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCX0gZWxzZQorCQl9IGVsc2UgewogCQkJZGV2X3dhcm4oJmRldi0+aW50Zi0+ZGV2LAogCQkJCSAiUmluZyBidWZmZXIgb3ZlcmZsb3csICVkIGJ5dGVzIGRyb3BwZWRcbiIsCiAJCQkJIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQlkZXYtPmJ1ZmZlcl9vdmVyZmxvdyA9IDE7CisJCX0KIAl9CiAKIHJlc3VibWl0OgogCS8qIHJlc3VibWl0IGlmIHdlJ3JlIHN0aWxsIHJ1bm5pbmcgKi8KLQlpZiAoZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZyAmJiBkZXYtPmludGYpIHsKKwlpZiAoZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZyAmJiAhZGV2LT5idWZmZXJfb3ZlcmZsb3cgJiYgZGV2LT5pbnRmKSB7CiAJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChyZXR2YWwpCisJCWlmIChyZXR2YWwpIHsKIAkJCWRldl9lcnIoJmRldi0+aW50Zi0+ZGV2LAogCQkJCSJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgKCVkKVxuIiwgcmV0dmFsKTsKKwkJCWRldi0+YnVmZmVyX292ZXJmbG93ID0gMTsKKwkJfQogCX0KLQorCXNwaW5fdW5sb2NrKCZkZXYtPnJic2wpOwogZXhpdDoKIAlkZXYtPmludGVycnVwdF9pbl9kb25lID0gMTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+cmVhZF93YWl0KTsKQEAgLTMzMCw2ICszMzgsNyBAQAogCS8qIGluaXRpYWxpemUgaW4gZGlyZWN0aW9uICovCiAJZGV2LT5yaW5nX2hlYWQgPSAwOwogCWRldi0+cmluZ190YWlsID0gMDsKKwlkZXYtPmJ1ZmZlcl9vdmVyZmxvdyA9IDA7CiAJdXNiX2ZpbGxfaW50X3VyYihkZXYtPmludGVycnVwdF9pbl91cmIsCiAJCQkgaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpLAogCQkJIHVzYl9yY3ZpbnRwaXBlKGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSwKQEAgLTQzOSw2ICs0NDgsNyBAQAogCXNpemVfdCAqYWN0dWFsX2J1ZmZlcjsKIAlzaXplX3QgYnl0ZXNfdG9fcmVhZDsKIAlpbnQgcmV0dmFsID0gMDsKKwlpbnQgcnY7CiAKIAlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKQEAgLTQ2MCw3ICs0NzAsMTAgQEAKIAl9CiAKIAkvKiB3YWl0IGZvciBkYXRhICovCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5yYnNsKTsKIAlpZiAoZGV2LT5yaW5nX2hlYWQgPT0gZGV2LT5yaW5nX3RhaWwpIHsKKwkJZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5yYnNsKTsKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CiAJCQlyZXR2YWwgPSAtRUFHQUlOOwogCQkJZ290byB1bmxvY2tfZXhpdDsKQEAgLTQ2OCw2ICs0ODEsOCBAQAogCQlyZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2LT5yZWFkX3dhaXQsIGRldi0+aW50ZXJydXB0X2luX2RvbmUpOwogCQlpZiAocmV0dmFsIDwgMCkKIAkJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnJic2wpOwogCX0KIAogCS8qIGFjdHVhbF9idWZmZXIgY29udGFpbnMgYWN0dWFsX2xlbmd0aCArIGludGVycnVwdF9pbl9idWZmZXIgKi8KQEAgLTQ4Niw2ICs1MDEsMTcgQEAKIAogCXJldHZhbCA9IGJ5dGVzX3RvX3JlYWQ7CiAKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnJic2wpOworCWlmIChkZXYtPmJ1ZmZlcl9vdmVyZmxvdykgeworCQlkZXYtPmJ1ZmZlcl9vdmVyZmxvdyA9IDA7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5yYnNsKTsKKwkJcnYgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocnYgPCAwKQorCQkJZGV2LT5idWZmZXJfb3ZlcmZsb3cgPSAxOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5yYnNsKTsKKwl9CisKIHVubG9ja19leGl0OgogCS8qIHVubG9jayB0aGUgZGV2aWNlICovCiAJdXAoJmRldi0+c2VtKTsKQEAgLTYzNSw2ICs2NjEsNyBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCWluaXRfTVVURVgoJmRldi0+c2VtKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5yYnNsKTsKIAlkZXYtPmludGYgPSBpbnRmOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+cmVhZF93YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndyaXRlX3dhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKaW5kZXggNWRjZTc5Ny4uMTcxM2UxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCkBAIC04MCw3ICs4MCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwppbmRleCBmZGY2ODQ3Li44OGY2YWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAogI2luY2x1ZGUgInJpbzUwMF91c2IuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9jb24uYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9jb24uYwppbmRleCAxNzMwZDg2Li41OTQ3YWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfY29uLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2Nvbi5jCkBAIC02Miw3ICs2Miw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VsZWN0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC0zMjIsNyArMzIxLDcgQEAKIC8qIGludGVyZmFjZSByb3V0aW5lICovCiBzdGF0aWMgdTgKIHNpc3VzYmNvbl9idWlsZF9hdHRyKHN0cnVjdCB2Y19kYXRhICpjLCB1OCBjb2xvciwgdTggaW50ZW5zaXR5LAotCQkJICAgIHU4IGJsaW5rLCB1OCB1bmRlcmxpbmUsIHU4IHJldmVyc2UpCisJCQkgICAgdTggYmxpbmssIHU4IHVuZGVybGluZSwgdTggcmV2ZXJzZSwgdTggdW51c2VkKQogewogCXU4IGF0dHIgPSBjb2xvcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYwppbmRleCA4YTFkZjJjLi44OTc3ZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYwpAQCAtOSw3ICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwppbmRleCBiYTVkMWRjLi4zZWZlNjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpAQCAtNTU4LDcgKzU1OCw3IEBACiAJdHJpc3RhdGUgIlVTQiBEZWJ1Z2dpbmcgRGV2aWNlIgogCWRlcGVuZHMgb24gVVNCX1NFUklBTAogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBVU0IgZGVidWdnaW5nIGRldmljZSB1c2VkIHRvIHJlY2lldmUKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBVU0IgZGVidWdnaW5nIGRldmljZSB1c2VkIHRvIHJlY2VpdmUKIAkgIGRlYnVnZ2luZyBkYXRhIGZyb20gYW5vdGhlciBtYWNoaW5lLiAgVGhlIG1vc3QgY29tbW9uIG9mIHRoZXNlCiAJICBkZXZpY2VzIGlzIHRoZSBOZXRDaGlwIFR1cmJvQ09OTkVDVCBkZXZpY2UuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKaW5kZXggYjY3NTczNS4uZmJjOGMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKQEAgLTksNyArOSw3IEBACiAgKiBUaGUgZGV2aWNlIHdvcmtzIGFzIGFuIHN0YW5kYXJkIENEQyBkZXZpY2UsIGl0IGhhcyAyIGludGVyZmFjZXMsIHRoZSBmaXJzdAogICogb25lIGlzIGZvciBmaXJtd2FyZSBhY2Nlc3MgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIHNlcmlhbCBvbmUuCiAgKiBUaGUgcHJvdG9jb2wgaXMgdmVyeSBzaW1wbHksIHRoZXJlIGFyZSB0d28gcG9zaWJpbGl0aWVzIHJlYWRpbmcgb3Igd3JpdGluZy4KLSAqIFdoZW4gd3JpdHRpbmcgdGhlIGZpcnN0IHVyYiBtdXN0IGhhdmUgYSBIZWFkZXIgdGhhdCBzdGFydHMgd2l0aCAweDIwIDB4MjkgdGhlCisgKiBXaGVuIHdyaXRpbmcgdGhlIGZpcnN0IHVyYiBtdXN0IGhhdmUgYSBIZWFkZXIgdGhhdCBzdGFydHMgd2l0aCAweDIwIDB4MjkgdGhlCiAgKiBuZXh0IHR3byBieXRlcyBtdXN0IHNheSBob3cgbXVjaCBkYXRhIHdpbGwgYmUgc2VuZGVkLgogICogV2hlbiByZWFkaW5nIHRoZSBwcm9jZXNzIGlzIGFsbW9zdCBlcXVhbCBleGNlcHQgdGhhdCB0aGUgaGVhZGVyIHN0YXJ0cyB3aXRoCiAgKiAweDAwIDB4MjAuCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBidWZmZXI6IFRoZSBGaXJzdCBhbmQgU2Vjb25kIGJ5dGUgaXMgdXNlZCBmb3IgYSBIZWFkZXIsIHRoZSBUaGlyZCBhbmQgRm91cnRoCiAgKiB0ZWxscyB0aGUgIGRldmljZSB0aGUgYW1vdW50IG9mIGluZm9ybWF0aW9uIHRoZSBwYWNrYWdlIGhvbGRzLgogICogUGFja2FnZXMgYXJlIDYwIGJ5dGVzIGxvbmcgSGVhZGVyIFN0dWZmLgotICogV2hlbiB3cml0dGluZyB0byB0aGUgZGV2aWNlIHRoZSBmaXJzdCB0d28gYnl0ZXMgb2YgdGhlIGhlYWRlciBhcmUgMHgyMCAweDI5CisgKiBXaGVuIHdyaXRpbmcgdG8gdGhlIGRldmljZSB0aGUgZmlyc3QgdHdvIGJ5dGVzIG9mIHRoZSBoZWFkZXIgYXJlIDB4MjAgMHgyOQogICogV2hlbiByZWFkaW5nIHRoZSBieXRlcyBhcmUgMHgwMCAweDIwLCBvciAweDAwIDB4MTAsIHRoZXJlIGlzIGFuIHN0cmFuZ2UKICAqIHNpdHVhdGlvbiwgd2hlbiB0b28gbXVjaCBkYXRhIGFycml2ZXMgdG8gdGhlIGRldmljZSBiZWNhdXNlIGl0IHNlbmRzIHRoZSBkYXRhCiAgKiBidXQgd2l0aCBvdXQgdGhlIGhlYWRlci4gSSB3aWxsIHVzZSBhIHNpbXBseSBoYWNrIHRvIG92ZXJyaWRlIHRoaXMgc2l0dWF0aW9uLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMKaW5kZXggZWEyMTc1Yi4uZmU0MzcxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYXJrMzExNi5jCkBAIC02Myw3ICs2Myw4IEBACiAJCQkJIHJlcXVlc3QsIHJlcXVlc3R0eXBlLCB2YWx1ZSwgaW5kZXgsCiAJCQkJIGJ1ZiwgMHgwMDAwMDAxLCAxMDAwKTsKIAlpZiAocmVzdWx0KQotCQlkYmcoIiUwM2QgPCAlZCBieXRlcyBbMHglMDJYXSIsIHNlcSwgcmVzdWx0LCBidWZbMF0pOworCQlkYmcoIiUwM2QgPCAlZCBieXRlcyBbMHglMDJYXSIsIHNlcSwgcmVzdWx0LAorCQkgICAgKCh1bnNpZ25lZCBjaGFyICopYnVmKVswXSk7CiAJZWxzZQogCQlkYmcoIiUwM2QgPCAwIGJ5dGVzIiwgc2VxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggOTVhMTgwNS4uMjM1MzY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTI3MywxMiArMjczLDE4IEBACiAKIC8qIHN0cnVjdCBmdGRpX3Npb19xdWlyayBpcyB1c2VkIGJ5IGRldmljZXMgcmVxdWlyaW5nIHNwZWNpYWwgYXR0ZW50aW9uLiAqLwogc3RydWN0IGZ0ZGlfc2lvX3F1aXJrIHsKKwlpbnQgKCpwcm9iZSkoc3RydWN0IHVzYl9zZXJpYWwgKik7CiAJdm9pZCAoKnNldHVwKShzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsgLyogU3BlY2lhbCBzZXR0aW5ncyBkdXJpbmcgc3RhcnR1cC4gKi8KIH07CiAKK3N0YXRpYyBpbnQgICBmdGRpX29saW1leF9wcm9iZQkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQgIGZ0ZGlfVVNCX1VJUlRfc2V0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIHZvaWQgIGZ0ZGlfSEVfVElSQTFfc2V0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogCitzdGF0aWMgc3RydWN0IGZ0ZGlfc2lvX3F1aXJrIGZ0ZGlfb2xpbWV4X3F1aXJrID0geworCS5wcm9iZQk9IGZ0ZGlfb2xpbWV4X3Byb2JlLAorfTsKKwogc3RhdGljIHN0cnVjdCBmdGRpX3Npb19xdWlyayBmdGRpX1VTQl9VSVJUX3F1aXJrID0gewogCS5zZXR1cCA9IGZ0ZGlfVVNCX1VJUlRfc2V0dXAsCiB9OwpAQCAtMzE5LDYgKzMyNSw3IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzhVMjIzMkNfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9NSUNST19DSEFNRUxFT05fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9SRUxBSVNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9PUEVORENDX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoSU5URVJCSU9NRVRSSUNTX1ZJRCwgSU5URVJCSU9NRVRSSUNTX0lPQk9BUkRfUElEKSB9LAogCXsgVVNCX0RFVklDRShJTlRFUkJJT01FVFJJQ1NfVklELCBJTlRFUkJJT01FVFJJQ1NfTUlOSV9JT0JPQVJEX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfWEZfNjMyX1BJRCkgfSwKQEAgLTUyNSw2ICs1MzIsOSBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzVV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEVMRUtUT1JfVklELCBFTEVLVE9SX0ZUMzIzUl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFRFTExEVVNfVklELCBURUxMRFVTX1RFTExTVElDS19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX01BWFNUUkVBTV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKE9MSU1FWF9WSUQsIE9MSU1FWF9BUk1fVVNCX09DRF9QSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfb2xpbWV4X3F1aXJrIH0sCiAJeyB9LAkJCQkJLyogT3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTY2OSw3ICs2NzksNyBAQAogCiAvKgogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBVdGxpdHkgZnVuY3Rpb25zCisgKiBVdGlsaXR5IGZ1bmN0aW9ucwogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIApAQCAtMTE3MSw5ICsxMTgxLDE3IEBACiAvKiBQcm9iZSBmdW5jdGlvbiB0byBjaGVjayBmb3Igc3BlY2lhbCBkZXZpY2VzICovCiBzdGF0aWMgaW50IGZ0ZGlfc2lvX3Byb2JlIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IGZ0ZGlfc2lvX3F1aXJrICpxdWlyayA9IChzdHJ1Y3QgZnRkaV9zaW9fcXVpcmsgKilpZC0+ZHJpdmVyX2luZm87CisKKwlpZiAocXVpcmsgJiYgcXVpcmstPnByb2JlKSB7CisJCWludCByZXQgPSBxdWlyay0+cHJvYmUoc2VyaWFsKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgKHZvaWQgKilpZC0+ZHJpdmVyX2luZm8pOwogCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBmdGRpX3Npb19wb3J0X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCkBAIC0xMjY4LDYgKzEyODYsMjQgQEAKIAlwcml2LT5mb3JjZV9ydHNjdHMgPSAxOwogfSAvKiBmdGRpX0hFX1RJUkExX3NldHVwICovCiAKKy8qCisgKiBGaXJzdCBwb3J0IG9uIE9saW1leCBhcm0tdXNiLW9jZCBpcyByZXNlcnZlZCBmb3IgSlRBRyBpbnRlcmZhY2UKKyAqIGFuZCBjYW4gYmUgYWNjZXNzZWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcgb3Blbm9jZC4KKyAqLworc3RhdGljIGludCBmdGRpX29saW1leF9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2VyaWFsLT5kZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHNlcmlhbC0+aW50ZXJmYWNlOworCisJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsKKworCWlmIChpbnRlcmZhY2UgPT0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF0pIHsKKwkJaW5mbygiSWdub3JpbmcgcmVzZXJ2ZWQgc2VyaWFsIHBvcnQgb24gT2xpbWV4IGFybS11c2Itb2NkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CiAKIC8qIGZ0ZGlfc2h1dGRvd24gaXMgY2FsbGVkIGZyb20gdXNic2VyaWFsOnVzYl9zZXJpYWxfZGlzY29ubmVjdAogICogICBpdCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNiIGRldmljZSBpcyBkaXNjb25uZWN0ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKaW5kZXggNzdhZDBhMC4uMzNhZWU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKQEAgLTYwLDYgKzYwLDkgQEAKIC8qIERNWDRBTEwgRE1YIEludGVyZmFjZXMgKi8KICNkZWZpbmUgRlRESV9ETVg0QUxMIDB4Qzg1MAogCisvKiBPcGVuRENDICh3d3cub3BlbmRjYy5kZSkgcHJvZHVjdCBpZCAqLworI2RlZmluZSBGVERJX09QRU5EQ0NfUElECTB4QkZEOAorCiAvKiB3d3cuY3J5c3RhbGZvbnR6LmNvbSBkZXZpY2VzIC0gdGhhbnggZm9yIHByb3ZpZGluZyBmcmVlIGRldmljZXMgZm9yIGV2YWx1YXRpb24gISAqLwogLyogdGhleSB1c2UgdGhlIGZ0ZGkgY2hpcHNldCBmb3IgdGhlIFVTQiBpbnRlcmZhY2UgYW5kIHRoZSB2ZW5kb3IgaWQgaXMgdGhlIHNhbWUgKi8KICNkZWZpbmUgRlRESV9YRl82MzJfUElEIDB4RkMwOAkvKiA2MzI6IDE2eDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KQEAgLTUxOCw2ICs1MjEsMTUgQEAKICNkZWZpbmUgRlRESV9JQlNfUEVET19QSUQJMHhmZjNlICAvKiBJQlMgUEVETy1Nb2RlbSAoUkYgbW9kZW0gODY4LjM1IE1IeikgKi8KICNkZWZpbmUgRlRESV9JQlNfUFJPRF9QSUQJMHhmZjNmICAvKiBmdXR1cmUgZGV2aWNlICovCiAKKy8qCisgKiAgTWF4U3RyZWFtIGRldmljZXMJd3d3Lm1heHN0cmVhbS5uZXQKKyAqLworI2RlZmluZSBGVERJX01BWFNUUkVBTV9QSUQJMHhFRTE4CS8qIFhiZWUgUEtHLVUgTW9kdWxlICovCisKKy8qIE9saW1leCAqLworI2RlZmluZSBPTElNRVhfVklECQkJMHgxNUJBCisjZGVmaW5lIE9MSU1FWF9BUk1fVVNCX09DRF9QSUQJCTB4MDAwMworCiAvKiBDb21tYW5kcyAqLwogI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KICNkZWZpbmUgRlRESV9TSU9fTU9ERU1fQ1RSTCAJMSAvKiBTZXQgdGhlIG1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKaW5kZXggMThmNzRhYy4uNDgwN2Y5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKQEAgLTI0NjUsNyArMjQ2NSw3IEBACiAJICAgICgoZWRnZV9zZXJpYWwtPmlzX2VwaWMpICYmCiAJICAgICAoIWVkZ2Vfc2VyaWFsLT5lcGljX2Rlc2NyaXB0b3IuU3VwcG9ydHMuSU9TUFdyaXRlTUNSKSAmJgogCSAgICAgKHJlZ051bSA9PSBNQ1IpKSkgewotCQlkYmcoIlNlbmRDbWRXcml0ZVVhcnRSZWcgLSBOb3Qgd3JpdHRpbmcgdG8gTUNSIFJlZ2lzdGVyIik7CisJCWRiZygiU2VuZENtZFdyaXRlVWFydFJlZyAtIE5vdCB3cml0aW5nIHRvIE1DUiBSZWdpc3RlciIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI0NzMsNyArMjQ3Myw3IEBACiAJICAgICgoZWRnZV9zZXJpYWwtPmlzX2VwaWMpICYmCiAJICAgICAoIWVkZ2Vfc2VyaWFsLT5lcGljX2Rlc2NyaXB0b3IuU3VwcG9ydHMuSU9TUFdyaXRlTENSKSAmJgogCSAgICAgKHJlZ051bSA9PSBMQ1IpKSkgewotCQlkYmcgKCJTZW5kQ21kV3JpdGVVYXJ0UmVnIC0gTm90IHdyaXR0aW5nIHRvIExDUiBSZWdpc3RlciIpOworCQlkYmcgKCJTZW5kQ21kV3JpdGVVYXJ0UmVnIC0gTm90IHdyaXRpbmcgdG8gTENSIFJlZ2lzdGVyIik7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKaW5kZXggMjM2NmU3Yi4uMzY2MjBjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCkBAIC03NjksMTEgKzc2OSw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIW1vczc4NDBfcG9ydCkgewotCQlkYmcoIiVzIiwgIk5VTEwgbW9zNzg0MF9wb3J0IHBvaW50ZXIgXG4iKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2sobW9zNzg0MF9wb3J0LT5wb3J0LCBfX0ZVTkNUSU9OX18pKSB7CiAJCWRiZygiJXMiLCAiUG9ydCBQYXJhbm9pYSBmYWlsZWQgXG4iKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKaW5kZXggNGFkZmFiOS4uMDBhZmMxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCkBAIC0xNjUsMTIgKzE2NSwxMCBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsCSpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqd3BvcnQ7Ci0Jc3RydWN0IG9tbmluZXRfZGF0YQkqb2QgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50CQkJcmVzdWx0ID0gMDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCi0Jb2QgPSBrbWFsbG9jKCBzaXplb2Yoc3RydWN0IG9tbmluZXRfZGF0YSksIEdGUF9LRVJORUwgKTsKIAl3cG9ydCA9IHNlcmlhbC0+cG9ydFsxXTsKIAl3cG9ydC0+dHR5ID0gcG9ydC0+dHR5OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggOGMzZjU1Yi4uODlmMDY3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMTY1LDcgKzE2NSw2IEBACiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIDB4MTQxMCkgfSwgLyogTm92YXRlbCBVNzQwICovCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIDB4MTQyMCkgfSwgLyogTm92YXRlbCBFVTg3MCAqLwogCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCAweDE0MzApIH0sIC8qIE5vdmF0ZWwgTWVybGluIFhVODcwIEhTRFBBLzNHICovCi0JeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIDB4MTQzMCkgfSwgLyogTm92YXRlbCBYVTg3MCAqLwogCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCAweDIxMDApIH0sIC8qIE5vdmF0ZWwgRVY2MjAgQ0RNQS9FVi1ETyAqLwogCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCAweDIxMTApIH0sIC8qIE5vdmF0ZWwgTWVybGluIEVTNjIwIC8gTWVybGluIEVTNzIwIC8gT3ZhdGlvbiBVNzIwICovCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIDB4MjEzMCkgfSwgLyogTm92YXRlbCBNZXJsaW4gRVM2MjAgU00gQnVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKaW5kZXggNjQ0NjA3ZC4uYWMxODI5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwpAQCAtMzUsNiArMzUsNyBAQAogCXsgVVNCX0RFVklDRSgweDExOTksIDB4MDIxOCkgfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNTcyMCAqLwogCXsgVVNCX0RFVklDRSgweDExOTksIDB4MDAyMCkgfSwJLyogU2llcnJhIFdpcmVsZXNzIE1DNTcyNSAqLwogCXsgVVNCX0RFVklDRSgweDExOTksIDB4MDAxOSkgfSwJLyogU2llcnJhIFdpcmVsZXNzIEFpckNhcmQgNTk1ICovCisJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHgwMTIwKSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgQWlyQ2FyZCA1OTVVICovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHgwMDIxKSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgQWlyQ2FyZCA1OTdFICovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHg2ODAyKSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM4NzU1ICovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHg2ODA0KSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM4NzU1ICovCkBAIC02MCw2ICs2MSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHgwMjE4KSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM1NzIwICovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHgwMDIwKSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgTUM1NzI1ICovCiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHgwMDE5KSB9LAkvKiBTaWVycmEgV2lyZWxlc3MgQWlyQ2FyZCA1OTUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDAxMjApIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBBaXJDYXJkIDU5NVUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDAwMjEpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBBaXJDYXJkIDU5N0UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDY4MDIpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzg3NTUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDY4MDQpIH0sCS8qIFNpZXJyYSBXaXJlbGVzcyBNQzg3NTUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IDc2MzkwMjIuLjg3ZjM3ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYwppbmRleCA2ZDNkYWQzLi5kMzUzNjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCkBAIC04NCw3ICs4NCw3IEBACiAKIHN0YXRpYyBpbnQgdXNiX29uZXRvdWNoX29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQogewotCXN0cnVjdCB1c2Jfb25ldG91Y2ggKm9uZXRvdWNoID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCB1c2Jfb25ldG91Y2ggKm9uZXRvdWNoID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKIAogCW9uZXRvdWNoLT5pc19vcGVuID0gMTsKIAlvbmV0b3VjaC0+aXJxLT5kZXYgPSBvbmV0b3VjaC0+dWRldjsKQEAgLTk4LDcgKzk4LDcgQEAKIAogc3RhdGljIHZvaWQgdXNiX29uZXRvdWNoX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX29uZXRvdWNoICpvbmV0b3VjaCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdXNiX29uZXRvdWNoICpvbmV0b3VjaCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAKIAl1c2Jfa2lsbF91cmIob25ldG91Y2gtPmlycSk7CiAJb25ldG91Y2gtPmlzX29wZW4gPSAwOwpAQCAtMTg1LDEzICsxODUsMTQgQEAKIAlpbnB1dF9kZXYtPm5hbWUgPSBvbmV0b3VjaC0+bmFtZTsKIAlpbnB1dF9kZXYtPnBoeXMgPSBvbmV0b3VjaC0+cGh5czsKIAl1c2JfdG9faW5wdXRfaWQodWRldiwgJmlucHV0X2Rldi0+aWQpOwotCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSAmdWRldi0+ZGV2OworCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZ1ZGV2LT5kZXY7CiAKIAlzZXRfYml0KEVWX0tFWSwgaW5wdXRfZGV2LT5ldmJpdCk7CiAJc2V0X2JpdChPTkVUT1VDSF9CVVRUT04sIGlucHV0X2Rldi0+a2V5Yml0KTsKIAljbGVhcl9iaXQoMCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCi0JaW5wdXRfZGV2LT5wcml2YXRlID0gb25ldG91Y2g7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBvbmV0b3VjaCk7CisKIAlpbnB1dF9kZXYtPm9wZW4gPSB1c2Jfb25ldG91Y2hfb3BlbjsKIAlpbnB1dF9kZXYtPmNsb3NlID0gdXNiX29uZXRvdWNoX2Nsb3NlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCA4YjMxNDVhYi4uZDIzMGVlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0xMTc5LDE0ICsxMTc5LDIwIEBACiAgICAgICAgICAgICAgICAgVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAgICAgICAgICAgICAgICAgVVNfRkxfRklYX0lOUVVJUlkgKSwKIAotLyogVGhpcyBpcyBhIHZpcnR1YWwgd2luZG93cyBkcml2ZXIgQ0QsIHdoaWNoIHRoZSB6ZDEyMTFydyBkcml2ZXIgYXV0b21hdGljYWxseQotICogY29udmVydHMgaW50byBhIFdMQU4gZGV2aWNlLiAqLworLyogVGhlc2UgYXJlIHZpcnR1YWwgd2luZG93cyBkcml2ZXIgQ0RzLCB3aGljaCB0aGUgemQxMjExcncgZHJpdmVyIGF1dG9tYXRpY2FsbHkKKyAqIGNvbnZlcnRzIGludG8gYSBXTEFOIGRldmljZXMuICovCiBVTlVTVUFMX0RFViggMHgwYWNlLCAweDIwMTEsIDB4MDEwMSwgMHgwMTAxLAogICAgICAgICAgICAgICAgICJaeVhFTCIsCiAgICAgICAgICAgICAgICAgIkctMjIwRiBVU0ItV0xBTiBJbnN0YWxsIiwKICAgICAgICAgICAgICAgICBVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKICAgICAgICAgICAgICAgICBVU19GTF9JR05PUkVfREVWSUNFICksCiAKK1VOVVNVQUxfREVWKCAweDBhY2UsIDB4MjBmZiwgMHgwMTAxLCAweDAxMDEsCisJCSJTaXRlQ29tIiwKKwkJIldMLTExNyBVU0ItV0xBTiBJbnN0YWxsIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9ERVZJQ0UgKSwKKwogI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKIFVOVVNVQUxfREVWKCAgMHgwYmY2LCAweGEwMDEsIDB4MDEwMCwgMHgwMTEwLAogCQkiQVRJIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCmluZGV4IDIxZjNkZGIuLjZkYWMxZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaApAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYl91c3VhbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCAzNDRjMzc1Li40MDNkYWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC0zLDggKzMsMTQgQEAKICMKIAogbWVudSAiR3JhcGhpY3Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhBU19JT01FTQogCiBzb3VyY2UgImRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvdmlkZW8vZGlzcGxheS9LY29uZmlnIgorCitjb25maWcgVkdBU1RBVEUKKyAgICAgICB0cmlzdGF0ZQorICAgICAgIGRlZmF1bHQgbgogCiBjb25maWcgRkIKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgZnJhbWUgYnVmZmVyIGRldmljZXMiCkBAIC05MCw2ICs5Niw0MyBAQAogCSAgYmxpdHRpbmcuIFRoaXMgaXMgdXNlZCBieSBkcml2ZXJzIHRoYXQgZG9uJ3QgcHJvdmlkZSB0aGVpciBvd24KIAkgIChhY2NlbGVyYXRlZCkgdmVyc2lvbi4KIAorY29uZmlnIEZCX1NZU19GSUxMUkVDVAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBGQgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIEluY2x1ZGUgdGhlIHN5c19maWxscmVjdCBmdW5jdGlvbiBmb3IgZ2VuZXJpYyBzb2Z0d2FyZSByZWN0YW5nbGUKKwkgIGZpbGxpbmcuIFRoaXMgaXMgdXNlZCBieSBkcml2ZXJzIHRoYXQgZG9uJ3QgcHJvdmlkZSB0aGVpciBvd24KKwkgIChhY2NlbGVyYXRlZCkgdmVyc2lvbiBhbmQgdGhlIGZyYW1lYnVmZmVyIGlzIGluIHN5c3RlbSBSQU0uCisKK2NvbmZpZyBGQl9TWVNfQ09QWUFSRUEKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gRkIKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBJbmNsdWRlIHRoZSBzeXNfY29weWFyZWEgZnVuY3Rpb24gZm9yIGdlbmVyaWMgc29mdHdhcmUgYXJlYSBjb3B5aW5nLgorCSAgVGhpcyBpcyB1c2VkIGJ5IGRyaXZlcnMgdGhhdCBkb24ndCBwcm92aWRlIHRoZWlyIG93biAoYWNjZWxlcmF0ZWQpCisJICB2ZXJzaW9uIGFuZCB0aGUgZnJhbWVidWZmZXIgaXMgaW4gc3lzdGVtIFJBTS4KKworY29uZmlnIEZCX1NZU19JTUFHRUJMSVQKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gRkIKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBJbmNsdWRlIHRoZSBzeXNfaW1hZ2VibGl0IGZ1bmN0aW9uIGZvciBnZW5lcmljIHNvZnR3YXJlIGltYWdlCisJICBibGl0dGluZy4gVGhpcyBpcyB1c2VkIGJ5IGRyaXZlcnMgdGhhdCBkb24ndCBwcm92aWRlIHRoZWlyIG93bgorCSAgKGFjY2VsZXJhdGVkKSB2ZXJzaW9uIGFuZCB0aGUgZnJhbWVidWZmZXIgaXMgaW4gc3lzdGVtIFJBTS4KKworY29uZmlnIEZCX1NZU19GT1BTCisgICAgICAgdHJpc3RhdGUKKyAgICAgICBkZXBlbmRzIG9uIEZCCisgICAgICAgZGVmYXVsdCBuCisKK2NvbmZpZyBGQl9ERUZFUlJFRF9JTworCWJvb2wKKwlkZXBlbmRzIG9uIEZCCisJZGVmYXVsdCB5CisKIGNvbmZpZyBGQl9TVkdBTElCCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIEZCCkBAIC0zNzUsOSArNDE4LDEwIEBACiBjb25maWcgRkJfQVJDCiAJdHJpc3RhdGUgIkFyYyBNb25vY2hyb21lIExDRCBib2FyZCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgWDg2Ci0Jc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAotCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKLQlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9TWVNfRklMTFJFQ1QKKwlzZWxlY3QgRkJfU1lTX0NPUFlBUkVBCisJc2VsZWN0IEZCX1NZU19JTUFHRUJMSVQKKwlzZWxlY3QgRkJfU1lTX0ZPUFMKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFyYyBNb25vY2hyb21lIExDRCBib2FyZC4gVGhlIGJvYXJkCiAJICBpcyBiYXNlZCBvbiB0aGUgS1MtMTA4IGxjZCBjb250cm9sbGVyIGFuZCBpcyB0eXBpY2FsbHkgYSBtYXRyaXgKQEAgLTQ3NSw2ICs1MTksOCBAQAogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgVkdBU1RBVEUKKwlzZWxlY3QgRk9OVF84eDE2IGlmIEZSQU1FQlVGRkVSX0NPTlNPTEUKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgVkdBIDE2IGNvbG9yIGdyYXBoaWMKIAkgIGNhcmRzLiBTYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGEgY2FyZC4KQEAgLTUxOSwxNSArNTY1LDI1IEBACiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBGQl9UR0EKLQl0cmlzdGF0ZSAiVEdBIGZyYW1lYnVmZmVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQiAmJiBBTFBIQQorCXRyaXN0YXRlICJUR0EvU0ZCKyBmcmFtZWJ1ZmZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkIgJiYgKEFMUEhBIHx8IFRDKQogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKIAlzZWxlY3QgQklUUkVWRVJTRQotCWhlbHAKLQkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciBnZW5lcmljIFRHQSBncmFwaGljCi0JICBjYXJkcy4gU2F5IFkgaWYgeW91IGhhdmUgb25lIG9mIHRob3NlLgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciBnZW5lcmljIFRHQSBhbmQgU0ZCKworCSAgZ3JhcGhpYyBjYXJkcy4gIFRoZXNlIGluY2x1ZGUgREVDIFpMWHAtRTEsIC1FMiBhbmQgLUUzIFBDSSBjYXJkcywKKwkgIGFsc28ga25vd24gYXMgUEJYR0EtQSwgLUIgYW5kIC1DLCBhbmQgREVDIFpMWC1FMSwgLUUyIGFuZCAtRTMKKwkgIFRVUkJPY2hhbm5lbCBjYXJkcywgYWxzbyBrbm93biBhcyBQTUFHRC1BLCAtQiBhbmQgLUMuCisKKwkgIER1ZSB0byBoYXJkd2FyZSBsaW1pdGF0aW9ucyBaTFgtRTIgYW5kIEUzIGNhcmRzIGFyZSBub3Qgc3VwcG9ydGVkCisJICBmb3IgREVDc3RhdGlvbiA1MDAwLzIwMCBzeXN0ZW1zLiAgQWRkaXRpb25hbGx5IGR1ZSB0byBmaXJtd2FyZQorCSAgbGltaXRhdGlvbnMgdGhlc2UgY2FyZHMgbWF5IGNhdXNlIHRyb3VibGVzIHdpdGggYm9vdGluZyBERUNzdGF0aW9uCisJICA1MDAwLzI0MCBhbmQgLzI2MCBzeXN0ZW1zLCBidXQgYXJlIGZ1bGx5IHN1cHBvcnRlZCB1bmRlciBMaW51eCBpZgorCSAgeW91IG1hbmFnZSB0byBnZXQgaXQgZ29pbmcuIDstKQorCisJICBTYXkgWSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhvc2UuCiAKIGNvbmZpZyBGQl9WRVNBCiAJYm9vbCAiVkVTQSBWR0EgZ3JhcGhpY3Mgc3VwcG9ydCIKQEAgLTU1MSw2ICs2MDcsMjEgQEAKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIEludGVsLWJhc2VkIE1hY2ludG9zaAogCitjb25maWcgRkJfSEVDVUJBCisgICAgICAgdHJpc3RhdGUgIkhlY3ViYSBib2FyZCBzdXBwb3J0IgorICAgICAgIGRlcGVuZHMgb24gRkIgJiYgWDg2ICYmIE1NVQorICAgICAgIHNlbGVjdCBGQl9TWVNfRklMTFJFQ1QKKyAgICAgICBzZWxlY3QgRkJfU1lTX0NPUFlBUkVBCisgICAgICAgc2VsZWN0IEZCX1NZU19JTUFHRUJMSVQKKyAgICAgICBzZWxlY3QgRkJfU1lTX0ZPUFMKKyAgICAgICBzZWxlY3QgRkJfREVGRVJSRURfSU8KKyAgICAgICBoZWxwCisgICAgICAgICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEhlY3ViYSBib2FyZC4gVGhpcyBkcml2ZXIgd2FzIHRlc3RlZAorICAgICAgICAgd2l0aCBhbiBFLUluayA4MDB4NjAwIGRpc3BsYXkgYW5kIHg4NiBTQkNzIHRocm91Z2ggYSAxNiBiaXQgR1BJTworICAgICAgICAgaW50ZXJmYWNlICg4IGJpdCBkYXRhLCA0IGJpdCBjb250cm9sKS4gSWYgeW91IGFudGljcGF0ZSB1c2luZworICAgICAgICAgdGhpcyBkcml2ZXIsIHNheSBZIG9yIE07IG90aGVyd2lzZSBzYXkgTi4gWW91IG11c3Qgc3BlY2lmeSB0aGUKKyAgICAgICAgIEdQSU8gSU8gYWRkcmVzcyB0byBiZSB1c2VkIGZvciBzZXR0aW5nIGNvbnRyb2wgYW5kIGRhdGEuCisKIGNvbmZpZyBGQl9IR0EKIAl0cmlzdGF0ZSAiSGVyY3VsZXMgbW9ubyBncmFwaGljcyBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgWDg2CkBAIC02MzMsNiArNzA0LDkxIEBACiAJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIENHc2l4IChHWCwgVHVyYm9HWCkKIAkgIGZyYW1lIGJ1ZmZlci4KIAorY29uZmlnIEZCX0ZGQgorCWJvb2wgIkNyZWF0b3IvQ3JlYXRvcjNEL0VsaXRlM0Qgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCX1NCVVMgJiYgU1BBUkM2NAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciB0aGUgQ3JlYXRvciwgQ3JlYXRvcjNELAorCSAgYW5kIEVsaXRlM0QgZ3JhcGhpY3MgYm9hcmRzLgorCitjb25maWcgRkJfVENYCisJYm9vbCAiVENYIChTUzQvU1M1IG9ubHkpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQl9TQlVTCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciB0aGUgVENYIDI0LzhiaXQgZnJhbWUKKwkgIGJ1ZmZlci4KKworY29uZmlnIEZCX0NHMTQKKwlib29sICJDR2ZvdXJ0ZWVuIChTWCkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCX1NCVVMKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJaGVscAorCSAgVGhpcyBpcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIHRoZSBDR2ZvdXJ0ZWVuIGZyYW1lCisJICBidWZmZXIgb24gRGVza3RvcCBTUEFSQ3N5c3RlbXMgd2l0aCB0aGUgU1ggZ3JhcGhpY3Mgb3B0aW9uLgorCitjb25maWcgRkJfUDkxMDAKKwlib29sICJQOTEwMCAoU3BhcmNib29rIDMgb25seSkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCX1NCVVMKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJaGVscAorCSAgVGhpcyBpcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIHRoZSBQOTEwMCBjYXJkCisJICBzdXBwb3J0ZWQgb24gU3BhcmNib29rIDMgbWFjaGluZXMuCisKK2NvbmZpZyBGQl9MRU8KKwlib29sICJMZW8gKFpYKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkJfU0JVUworCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwloZWxwCisJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIFNCVVMtYmFzZWQgU3VuIFpYCisJICAobGVvKSBmcmFtZSBidWZmZXIgY2FyZHMuCisKK2NvbmZpZyBGQl9JR0EKKwlib29sICJJR0EgMTY4eCBkaXNwbGF5IHN1cHBvcnQiCisJZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBTUEFSQzMyCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGZyYW1lYnVmZmVyIGRldmljZSBmb3IgdGhlIElOVEVSR1JBUEhJQ1MgMTY4MCBhbmQKKwkgIHN1Y2Nlc3NvciBmcmFtZSBidWZmZXIgY2FyZHMuCisKK2NvbmZpZyBGQl9YVlI1MDAKKwlib29sICJTdW4gWFZSLTUwMCAzRExBQlMgV2lsZGNhdCBzdXBwb3J0IgorCWRlcGVuZHMgb24gKEZCID0geSkgJiYgUENJICYmIFNQQVJDNjQKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJaGVscAorCSAgVGhpcyBpcyB0aGUgZnJhbWVidWZmZXIgZGV2aWNlIGZvciB0aGUgU3VuIFhWUi01MDAgYW5kIHNpbWlsYXIKKwkgIGdyYXBoaWNzIGNhcmRzIGJhc2VkIHVwb24gdGhlIDNETEFCUyBXaWxkY2F0IGNoaXBzZXQuICBUaGUgZHJpdmVyCisJICBvbmx5IHdvcmtzIG9uIHNwYXJjNjQgc3lzdGVtcyB3aGVyZSB0aGUgc3lzdGVtIGZpcndtYXJlIGhhcworCSAgbW9zdGx5IGluaXRpYWxpemVkIHRoZSBjYXJkIGFscmVhZHkuICBJdCBpcyB0cmVhdGVkIGFzIGEKKwkgIGNvbXBsZXRlbHkgZHVtYiBmcmFtZWJ1ZmZlciBkZXZpY2UuCisKK2NvbmZpZyBGQl9YVlIyNTAwCisJYm9vbCAiU3VuIFhWUi0yNTAwIDNETEFCUyBXaWxkY2F0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBQQ0kgJiYgU1BBUkM2NAorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwloZWxwCisJICBUaGlzIGlzIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgZm9yIHRoZSBTdW4gWFZSLTI1MDAgYW5kIHNpbWlsYXIKKwkgIGdyYXBoaWNzIGNhcmRzIGJhc2VkIHVwb24gdGhlIDNETEFCUyBXaWxkY2F0IGNoaXBzZXQuICBUaGUgZHJpdmVyCisJICBvbmx5IHdvcmtzIG9uIHNwYXJjNjQgc3lzdGVtcyB3aGVyZSB0aGUgc3lzdGVtIGZpcndtYXJlIGhhcworCSAgbW9zdGx5IGluaXRpYWxpemVkIHRoZSBjYXJkIGFscmVhZHkuICBJdCBpcyB0cmVhdGVkIGFzIGEKKwkgIGNvbXBsZXRlbHkgZHVtYiBmcmFtZWJ1ZmZlciBkZXZpY2UuCisKIGNvbmZpZyBGQl9QVlIyCiAJdHJpc3RhdGUgIk5FQyBQb3dlclZSIDIgZGlzcGxheSBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgU0hfRFJFQU1DQVNUCkBAIC02NzcsNiArODMzLDIyIEBACiAJICB3b3JraW5nIHdpdGggUzFEMTM4MDYpLiBQcm9kdWN0IHNwZWNzIGF0CiAJICA8aHR0cDovL3d3dy5lcmQuZXBzb24uY29tL3ZkYy9odG1sL2xlZ2FjeV8xM3h4eC5odG0+CiAKK2NvbmZpZyBGQl9BVE1FTAorCXRyaXN0YXRlICJBVDkxL0FUMzIgTENEIENvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCICYmIChBUkNIX0FUOTFTQU05MjYxIHx8IEFSQ0hfQVQ5MVNBTTkyNjMgfHwgQVZSMzIpCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQVQ5MS9BVDMyIExDRCBDb250cm9sbGVyLgorCitjb25maWcgRkJfSU5UU1JBTQorCWJvb2wgIkZyYW1lIEJ1ZmZlciBpbiBpbnRlcm5hbCBTUkFNIgorCWRlcGVuZHMgb24gRkJfQVRNRUwgJiYgQVJDSF9BVDkxU0FNOTI2MQorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIG1hcCBGcmFtZSBCdWZmZXIgaW4gaW50ZXJuYWwgU1JBTS4gU2F5IE4gaWYgeW91IHdhbnQKKwkgIHRvIGxldCBmcmFtZSBidWZmZXIgaW4gZXh0ZXJuYWwgU0RSQU0uCisKIGNvbmZpZyBGQl9OVklESUEKIAl0cmlzdGF0ZSAiblZpZGlhIEZyYW1lYnVmZmVyIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBQQ0kKQEAgLTY4Niw2ICs4NTgsNyBAQAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAogCXNlbGVjdCBCSVRSRVZFUlNFCisJc2VsZWN0IFZHQVNUQVRFCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgZ3JhcGhpY3MgYm9hcmRzIHdpdGggdGhlIG5WaWRpYSBjaGlwcywgVE5UCiAJICBhbmQgbmV3ZXIuIEZvciB2ZXJ5IG9sZCBjaGlwc2V0cywgc3VjaCBhcyB0aGUgUklWQTEyOCwgdGhlbiB1c2UKQEAgLTcwOCw2ICs4ODEsMTUgQEAKIAkgIGluZGVwZW5kZW50bHkgdmFsaWRhdGUgdmlkZW8gbW9kZSBwYXJhbWV0ZXJzLCB5b3Ugc2hvdWxkIHNheSBZCiAJICBoZXJlLgogCitjb25maWcgRkJfTlZJRElBX0RFQlVHCisJYm9vbCAiTG90cyBvZiBkZWJ1ZyBvdXRwdXQiCisJZGVwZW5kcyBvbiBGQl9OVklESUEKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBuVmlkaWEgZHJpdmVyIHRvIG91dHB1dCBhbGwgc29ydHMKKwkgIG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byBwcm92aWRlIHRvIHRoZSBtYWludGFpbmVyIHdoZW4KKwkgIHNvbWV0aGluZyBnb2VzIHdyb25nLgorCiBjb25maWcgRkJfTlZJRElBX0JBQ0tMSUdIVAogCWJvb2wgIlN1cHBvcnQgZm9yIGJhY2tsaWdodCBjb250cm9sIgogCWRlcGVuZHMgb24gRkJfTlZJRElBCkBAIC03MjQsNiArOTA2LDcgQEAKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKIAlzZWxlY3QgQklUUkVWRVJTRQorCXNlbGVjdCBWR0FTVEFURQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGdyYXBoaWNzIGJvYXJkcyB3aXRoIHRoZSBuVmlkaWEgUml2YS9HZWZvcmNlCiAJICBjaGlwcy4KQEAgLTc0Niw3ICs5MjksNyBAQAogCSAgaGVyZS4KIAogY29uZmlnIEZCX1JJVkFfREVCVUcKLQlib29sICJMb3RzIG9mIGRlYnVnIG91dHB1dCBmcm9tIFJpdmEoblZpZGlhKSBkcml2ZXIiCisJYm9vbCAiTG90cyBvZiBkZWJ1ZyBvdXRwdXQiCiAJZGVwZW5kcyBvbiBGQl9SSVZBCiAJZGVmYXVsdCBuCiAJaGVscApAQCAtNzcwLDYgKzk1Myw3IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBWR0FTVEFURQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBvbi1ib2FyZCBncmFwaGljcyBidWlsdCBpbiB0byB0aGUgSW50ZWwgODEwIAogICAgICAgICAgIGFuZCA4MTUgY2hpcHNldHMuICBTYXkgWSBpZiB5b3UgaGF2ZSBhbmQgcGxhbiB0byB1c2Ugc3VjaCBhIGJvYXJkLgpAQCAtODA5LDYgKzk5MywyMiBAQAogCXNlbGVjdCBGQl9EREMKIAloZWxwCiAKK2NvbmZpZyBGQl9MRTgwNTc4CisJdHJpc3RhdGUgIkludGVsIExFODA1NzggKFZlcm1pbGlvbikgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCICYmIFBDSSAmJiBYODYKKwlzZWxlY3QgRkJfTU9ERV9IRUxQRVJTCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBMRTgwNTc4IChWZXJtaWxpb24gUmFuZ2UpIGNoaXBzZXQKKworY29uZmlnIEZCX0NBUklMTE9fUkFOQ0gKKwl0cmlzdGF0ZSAiSW50ZWwgQ2FyaWxsbyBSYW5jaCBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkJfTEU4MDU3OCAmJiBGQiAmJiBQQ0kgJiYgWDg2CisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIExFODA1NzggKENhcmlsbG8gUmFuY2gpIGJvYXJkCisKIGNvbmZpZyBGQl9JTlRFTAogCXRyaXN0YXRlICJJbnRlbCA4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzk0NUcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEZCICYmIEVYUEVSSU1FTlRBTCAmJiBQQ0kgJiYgWDg2CkBAIC0xMDgwLDcgKzEyODAsNyBAQAogY29uZmlnIEZCX0FUWV9DVAogCWJvb2wgIk1hY2g2NCBDVC9WVC9HVC9MVCAoaW5jbC4gM0QgUkFHRSkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBGQl9BVFkKLQlkZWZhdWx0IHkgaWYgU1BBUkM2NCAmJiBGQl9QQ0kKKwlkZWZhdWx0IHkgaWYgU1BBUkM2NCAmJiBQQ0kKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdXNlIG9mIEFUSSdzIDY0LWJpdCBSYWdlIGJvYXJkcyAob3Igb3RoZXIKIAkgIGJvYXJkcyBiYXNlZCBvbiB0aGUgTWFjaDY0IENULCBWVCwgR1QsIGFuZCBMVCBjaGlwc2V0cykgYXMgYQpAQCAtMTEyMCw2ICsxMzIwLDggQEAKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAogCXNlbGVjdCBGQl9USUxFQkxJVFRJTkcKIAlzZWxlY3QgRkJfU1ZHQUxJQgorCXNlbGVjdCBWR0FTVEFURQorCXNlbGVjdCBGT05UXzh4MTYgaWYgRlJBTUVCVUZGRVJfQ09OU09MRQogCS0tLWhlbHAtLS0KIAkgIERyaXZlciBmb3IgZ3JhcGhpY3MgYm9hcmRzIHdpdGggUzMgVHJpbyAvIFMzIFZpcmdlIGNoaXAuCiAKQEAgLTExMzAsNiArMTMzMiw3IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBWR0FTVEFURQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIG5vdGVib29rcyBhbmQgY29tcHV0ZXJzIHdpdGggUzMgU2F2YWdlIFBDSS9BR1AKIAkgIGNoaXBzLgpAQCAtMTE5Niw2ICsxMzk5LDcgQEAKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJc2VsZWN0IFZHQVNUQVRFCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgbm90ZWJvb2tzIHdpdGggTmVvTWFnaWMgUENJIGNoaXBzLgogCSAgU2F5IFkgaWYgeW91IGhhdmUgc3VjaCBhIGdyYXBoaWNzIGNhcmQuIApAQCAtMTI1NSw2ICsxNDU5LDIwIEBACiAJICBQbGVhc2UgcmVhZCB0aGUgPGZpbGU6RG9jdW1lbnRhdGlvbi9mYi9SRUFETUUtc3N0ZmIudHh0PiBmb3Igc3VwcG9ydGVkCiAJICBvcHRpb25zIGFuZCBvdGhlciBpbXBvcnRhbnQgaW5mbyAgc3VwcG9ydC4KIAorY29uZmlnIEZCX1ZUODYyMworCXRyaXN0YXRlICJWSUEgVlQ4NjIzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQiAmJiBQQ0kKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJc2VsZWN0IEZCX1RJTEVCTElUVElORworCXNlbGVjdCBGQl9TVkdBTElCCisJc2VsZWN0IFZHQVNUQVRFCisJc2VsZWN0IEZPTlRfOHgxNiBpZiBGUkFNRUJVRkZFUl9DT05TT0xFCisJLS0taGVscC0tLQorCSAgRHJpdmVyIGZvciBDYXN0bGVSb2NrIGludGVncmF0ZWQgZ3JhcGhpY3MgY29yZSBpbiB0aGUKKwkgIFZJQSBWVDg2MjMgW0Fwb2xsbyBDTEUyNjZdIGNoaXBzZXQuCisKIGNvbmZpZyBGQl9DWUJMQQogCXRyaXN0YXRlICJDeWJlcmJsYWRlL2kxIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBQQ0kgJiYgWDg2XzMyICYmICE2NEJJVApAQCAtMTMwOCw5ICsxNTI2LDI2IEBACiAJVGhpcyB3aWxsIGNvbXBpbGUgdGhlIFRyaWRlbnQgZnJhbWUgYnVmZmVyIGRldmljZSB3aXRoCiAJYWNjZWxlcmF0aW9uIGZ1bmN0aW9ucy4KIAorY29uZmlnIEZCX0FSSworCXRyaXN0YXRlICJBUksgMjAwMFBWIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQiAmJiBQQ0kKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJc2VsZWN0IEZCX1RJTEVCTElUVElORworCXNlbGVjdCBGQl9TVkdBTElCCisJc2VsZWN0IFZHQVNUQVRFCisJc2VsZWN0IEZPTlRfOHgxNiBpZiBGUkFNRUJVRkZFUl9DT05TT0xFCisJLS0taGVscC0tLQorCSAgRHJpdmVyIGZvciBQQ0kgZ3JhcGhpY3MgYm9hcmRzIHdpdGggQVJLIDIwMDBQViBjaGlwCisJICBhbmQgSUNTIDUzNDIgUkFNREFDLgorCiBjb25maWcgRkJfUE0zCi0JdHJpc3RhdGUgIlBlcm1lZGlhMyBzdXBwb3J0IgotCWRlcGVuZHMgb24gRkIgJiYgUENJICYmIEJST0tFTgorCXRyaXN0YXRlICJQZXJtZWRpYTMgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEZCICYmIFBDSSAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIHRoZSAzRExhYnMgUGVybWVkaWEzCiAJICBjaGlwc2V0LCB1c2VkIGluIEZvcm1hYyBQcm9Gb3JtYW5jZSBJSUksIDNETGFicyBPeHlnZW4gVlgxICYKQEAgLTEzMzQsOTUgKzE1NjksNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvdmlkZW8vZ2VvZGUvS2NvbmZpZyIKIAotY29uZmlnIEZCX0ZGQgotCWJvb2wgIkNyZWF0b3IvQ3JlYXRvcjNEL0VsaXRlM0Qgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEZCX1NCVVMgJiYgU1BBUkM2NAotCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKLQlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAotCWhlbHAKLQkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciB0aGUgQ3JlYXRvciwgQ3JlYXRvcjNELAotCSAgYW5kIEVsaXRlM0QgZ3JhcGhpY3MgYm9hcmRzLgotCi1jb25maWcgRkJfVENYCi0JYm9vbCAiVENYIChTUzQvU1M1IG9ubHkpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQl9TQlVTCi0Jc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAotCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKLQlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAotCWhlbHAKLQkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciB0aGUgVENYIDI0LzhiaXQgZnJhbWUKLQkgIGJ1ZmZlci4KLQotY29uZmlnIEZCX0NHMTQKLQlib29sICJDR2ZvdXJ0ZWVuIChTWCkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEZCX1NCVVMKLQlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCi0Jc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQotCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCi0JaGVscAotCSAgVGhpcyBpcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIHRoZSBDR2ZvdXJ0ZWVuIGZyYW1lCi0JICBidWZmZXIgb24gRGVza3RvcCBTUEFSQ3N5c3RlbXMgd2l0aCB0aGUgU1ggZ3JhcGhpY3Mgb3B0aW9uLgotCi1jb25maWcgRkJfUDkxMDAKLQlib29sICJQOTEwMCAoU3BhcmNib29rIDMgb25seSkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEZCX1NCVVMKLQlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCi0Jc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQotCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCi0JaGVscAotCSAgVGhpcyBpcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIHRoZSBQOTEwMCBjYXJkCi0JICBzdXBwb3J0ZWQgb24gU3BhcmNib29rIDMgbWFjaGluZXMuCi0KLWNvbmZpZyBGQl9MRU8KLQlib29sICJMZW8gKFpYKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gRkJfU0JVUwotCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKLQlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCi0Jc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIFNCVVMtYmFzZWQgU3VuIFpYCi0JICAobGVvKSBmcmFtZSBidWZmZXIgY2FyZHMuCi0KLWNvbmZpZyBGQl9YVlI1MDAKLQlib29sICJTdW4gWFZSLTUwMCAzRExBQlMgV2lsZGNhdCBzdXBwb3J0IgotCWRlcGVuZHMgb24gRkIgJiYgUENJICYmIFNQQVJDNjQKLQlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCi0Jc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQotCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCi0JaGVscAotCSAgVGhpcyBpcyB0aGUgZnJhbWVidWZmZXIgZGV2aWNlIGZvciB0aGUgU3VuIFhWUi01MDAgYW5kIHNpbWlsYXIKLQkgIGdyYXBoaWNzIGNhcmRzIGJhc2VkIHVwb24gdGhlIDNETEFCUyBXaWxkY2F0IGNoaXBzZXQuICBUaGUgZHJpdmVyCi0JICBvbmx5IHdvcmtzIG9uIHNwYXJjNjQgc3lzdGVtcyB3aGVyZSB0aGUgc3lzdGVtIGZpcndtYXJlIGhhcwotCSAgbW9zdGx5IGluaXRpYWxpemVkIHRoZSBjYXJkIGFscmVhZHkuICBJdCBpcyB0cmVhdGVkIGFzIGEKLQkgIGNvbXBsZXRlbHkgZHVtYiBmcmFtZWJ1ZmZlciBkZXZpY2UuCi0KLWNvbmZpZyBGQl9YVlIyNTAwCi0JYm9vbCAiU3VuIFhWUi0yNTAwIDNETEFCUyBXaWxkY2F0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQiAmJiBQQ0kgJiYgU1BBUkM2NAotCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKLQlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCi0Jc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgZm9yIHRoZSBTdW4gWFZSLTI1MDAgYW5kIHNpbWlsYXIKLQkgIGdyYXBoaWNzIGNhcmRzIGJhc2VkIHVwb24gdGhlIDNETEFCUyBXaWxkY2F0IGNoaXBzZXQuICBUaGUgZHJpdmVyCi0JICBvbmx5IHdvcmtzIG9uIHNwYXJjNjQgc3lzdGVtcyB3aGVyZSB0aGUgc3lzdGVtIGZpcndtYXJlIGhhcwotCSAgbW9zdGx5IGluaXRpYWxpemVkIHRoZSBjYXJkIGFscmVhZHkuICBJdCBpcyB0cmVhdGVkIGFzIGEKLQkgIGNvbXBsZXRlbHkgZHVtYiBmcmFtZWJ1ZmZlciBkZXZpY2UuCi0KLWNvbmZpZyBGQl9QQ0kKLQlib29sICJQQ0kgZnJhbWVidWZmZXJzIgotCWRlcGVuZHMgb24gKEZCID0geSkgJiYgUENJICYmIFNQQVJDCi0KLWNvbmZpZyBGQl9JR0EKLQlib29sICJJR0EgMTY4eCBkaXNwbGF5IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTUEFSQzMyICYmIEZCX1BDSQotCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKLQlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCi0Jc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgZm9yIHRoZSBJTlRFUkdSQVBISUNTIDE2ODAgYW5kCi0JICBzdWNjZXNzb3IgZnJhbWUgYnVmZmVyIGNhcmRzLgotCiBjb25maWcgRkJfSElUCiAJdHJpc3RhdGUgIkhENjQ0NjEgRnJhbWUgQnVmZmVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBIRDY0NDYxCkBAIC0xNjQ2LDkgKzE3OTIsMTAgQEAKIGNvbmZpZyBGQl9QUzMKIAlib29sICJQUzMgR1BVIGZyYW1lYnVmZmVyIGRyaXZlciIKIAlkZXBlbmRzIG9uIChGQiA9IHkpICYmIFBTM19QUzNBVgotCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKLQlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCi0Jc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgRkJfU1lTX0ZJTExSRUNUCisJc2VsZWN0IEZCX1NZU19DT1BZQVJFQQorCXNlbGVjdCBGQl9TWVNfSU1BR0VCTElUCisJc2VsZWN0IEZCX1NZU19GT1BTCiAJLS0taGVscC0tLQogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgdmlydHVhbCBmcmFtZSBidWZmZXIgaW4gdGhlIFBTMyBwbGF0Zm9ybS4KIApAQCAtMTY2MiwxMyArMTgwOSwyNSBAQAogCSAgVGhlIGRlZmF1bHQgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUKIAkgIHVzaW5nIHRoZSAicHMzZmIiIG9wdGlvbiAoZS5nLiAicHMzZmI9OU0iKTsKIAotY29uZmlnIEZCX1ZJUlRVQUwKLQl0cmlzdGF0ZSAiVmlydHVhbCBGcmFtZSBCdWZmZXIgc3VwcG9ydCAoT05MWSBGT1IgVEVTVElORyEpIgotCWRlcGVuZHMgb24gRkIKK2NvbmZpZyBGQl9YSUxJTlgKKwl0cmlzdGF0ZSAiWGlsaW54IGZyYW1lIGJ1ZmZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkIgJiYgWElMSU5YX1ZJUlRFWAogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKIAktLS1oZWxwLS0tCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggTUwzMDAvTUw0MDMgcmVmZXJlbmNlIGRlc2lnbgorCSAgZnJhbWVidWZmZXIuIE1MMzAwIGNhcnJpZXMgYSA2NDAqNDgwIExDRCBkaXNwbGF5IG9uIHRoZSBib2FyZCwKKwkgIE1MNDAzIHVzZXMgYSBzdGFuZGFyZCBEQjE1IFZHQSBjb25uZWN0b3IuCisKK2NvbmZpZyBGQl9WSVJUVUFMCisJdHJpc3RhdGUgIlZpcnR1YWwgRnJhbWUgQnVmZmVyIHN1cHBvcnQgKE9OTFkgRk9SIFRFU1RJTkchKSIKKwlkZXBlbmRzIG9uIEZCCisJc2VsZWN0IEZCX1NZU19GSUxMUkVDVAorCXNlbGVjdCBGQl9TWVNfQ09QWUFSRUEKKwlzZWxlY3QgRkJfU1lTX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9TWVNfRk9QUworCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBgdmlydHVhbCcgZnJhbWUgYnVmZmVyIGRldmljZS4gSXQgb3BlcmF0ZXMgb24gYSBjaHVuayBvZgogCSAgdW5zd2FwcGFibGUga2VybmVsIG1lbW9yeSBpbnN0ZWFkIG9mIG9uIHRoZSBtZW1vcnkgb2YgYSBncmFwaGljcwogCSAgYm9hcmQuIFRoaXMgbWVhbnMgeW91IGNhbm5vdCBzZWUgYW55IG91dHB1dCBzZW50IHRvIHRoaXMgZnJhbWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCmluZGV4IDU1ODQ3M2QuLmJkOGIwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIAogIyBFYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVuYWJsZXMgYSBsaXN0IG9mIGZpbGVzLgogCitvYmotJChDT05GSUdfVkdBU1RBVEUpICAgICAgICAgICAgKz0gdmdhc3RhdGUubwogb2JqLXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IGZiX25vdGlmeS5vCiBvYmotJChDT05GSUdfRkIpICAgICAgICAgICAgICAgICAgKz0gZmIubwogZmIteSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IGZibWVtLm8gZmJtb24ubyBmYmNtYXAubyBmYnN5c2ZzLm8gXApAQCAtMTIsMTQgKzEzLDE5IEBACiAKIG9iai0kKENPTkZJR19WVCkJCSAgKz0gY29uc29sZS8KIG9iai0kKENPTkZJR19MT0dPKQkJICArPSBsb2dvLwotb2JqLXkJCQkJICArPSBiYWNrbGlnaHQvCitvYmoteQkJCQkgICs9IGJhY2tsaWdodC8gZGlzcGxheS8KIAogb2JqLSQoQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCkgICs9IGNmYmZpbGxyZWN0Lm8KIG9iai0kKENPTkZJR19GQl9DRkJfQ09QWUFSRUEpICArPSBjZmJjb3B5YXJlYS5vCiBvYmotJChDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCkgKz0gY2ZiaW1nYmx0Lm8KK29iai0kKENPTkZJR19GQl9TWVNfRklMTFJFQ1QpICArPSBzeXNmaWxscmVjdC5vCitvYmotJChDT05GSUdfRkJfU1lTX0NPUFlBUkVBKSAgKz0gc3lzY29weWFyZWEubworb2JqLSQoQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQpICs9IHN5c2ltZ2JsdC5vCitvYmotJChDT05GSUdfRkJfU1lTX0ZPUFMpICAgICAgKz0gZmJfc3lzX2ZvcHMubwogb2JqLSQoQ09ORklHX0ZCX1NWR0FMSUIpICAgICAgICs9IHN2Z2FsaWIubwogb2JqLSQoQ09ORklHX0ZCX01BQ01PREVTKSAgICAgICs9IG1hY21vZGVzLm8KIG9iai0kKENPTkZJR19GQl9EREMpICAgICAgICAgICArPSBmYl9kZGMubworb2JqLSQoQ09ORklHX0ZCX0RFRkVSUkVEX0lPKSAgICs9IGZiX2RlZmlvLm8KIAogIyBIYXJkd2FyZSBzcGVjaWZpYyBkcml2ZXJzIGdvIGZpcnN0CiBvYmotJChDT05GSUdfRkJfQU1JR0EpICAgICAgICAgICAgKz0gYW1pZmIubyBjMnAubwpAQCAtMzAsNyArMzYsNyBAQAogb2JqLSQoQ09ORklHX0ZCX1BNMykJCSAgKz0gcG0zZmIubwogCiBvYmotJChDT05GSUdfRkJfTUFUUk9YKQkJICArPSBtYXRyb3gvCi1vYmotJChDT05GSUdfRkJfUklWQSkJCSAgKz0gcml2YS8gdmdhc3RhdGUubworb2JqLSQoQ09ORklHX0ZCX1JJVkEpCQkgICs9IHJpdmEvCiBvYmotJChDT05GSUdfRkJfTlZJRElBKQkJICArPSBudmlkaWEvCiBvYmotJChDT05GSUdfRkJfQVRZKQkJICArPSBhdHkvIG1hY21vZGVzLm8KIG9iai0kKENPTkZJR19GQl9BVFkxMjgpCQkgICs9IGF0eS8gbWFjbW9kZXMubwpAQCAtNDAsOCArNDYsNyBAQAogb2JqLSQoQ09ORklHX0ZCX1NBVkFHRSkJCSAgKz0gc2F2YWdlLwogb2JqLSQoQ09ORklHX0ZCX0dFT0RFKQkJICArPSBnZW9kZS8KIG9iai0kKENPTkZJR19GQl9NQlgpCQkgICs9IG1ieC8KLW9iai0kKENPTkZJR19GQl9JODEwKSAgICAgICAgICAgICArPSB2Z2FzdGF0ZS5vCi1vYmotJChDT05GSUdfRkJfTkVPTUFHSUMpICAgICAgICAgKz0gbmVvZmIubyB2Z2FzdGF0ZS5vCitvYmotJChDT05GSUdfRkJfTkVPTUFHSUMpICAgICAgICAgKz0gbmVvZmIubwogb2JqLSQoQ09ORklHX0ZCXzNERlgpICAgICAgICAgICAgICs9IHRkZnhmYi5vCiBvYmotJChDT05GSUdfRkJfQ09OVFJPTCkgICAgICAgICAgKz0gY29udHJvbGZiLm8KIG9iai0kKENPTkZJR19GQl9QTEFUSU5VTSkgICAgICAgICArPSBwbGF0aW51bWZiLm8KQEAgLTQ5LDkgKzU0LDEyIEBACiBvYmotJChDT05GSUdfRkJfQ1Q2NTU1MCkgICAgICAgICAgKz0gY2hpcHNmYi5vCiBvYmotJChDT05GSUdfRkJfSU1TVFQpICAgICAgICAgICAgKz0gaW1zdHRmYi5vCiBvYmotJChDT05GSUdfRkJfRk0yKSAgICAgICAgICAgICAgKz0gZm0yZmIubworb2JqLSQoQ09ORklHX0ZCX1ZUODYyMykgICAgICAgICAgICs9IHZ0ODYyM2ZiLm8KIG9iai0kKENPTkZJR19GQl9DWUJMQSkgICAgICAgICAgICArPSBjeWJsYWZiLm8KIG9iai0kKENPTkZJR19GQl9UUklERU5UKSAgICAgICAgICArPSB0cmlkZW50ZmIubwotb2JqLSQoQ09ORklHX0ZCX1MzKSAgICAgICAgICAgICAgICs9IHMzZmIubyB2Z2FzdGF0ZS5vCitvYmotJChDT05GSUdfRkJfTEU4MDU3OCkgICAgICAgICAgKz0gdmVybWlsaW9uLworb2JqLSQoQ09ORklHX0ZCX1MzKSAgICAgICAgICAgICAgICs9IHMzZmIubworb2JqLSQoQ09ORklHX0ZCX0FSSykgICAgICAgICAgICAgICs9IGFya2ZiLm8KIG9iai0kKENPTkZJR19GQl9TVEkpICAgICAgICAgICAgICArPSBzdGlmYi5vCiBvYmotJChDT05GSUdfRkJfRkZCKSAgICAgICAgICAgICAgKz0gZmZiLm8gc2J1c2xpYi5vCiBvYmotJChDT05GSUdfRkJfQ0c2KSAgICAgICAgICAgICAgKz0gY2c2Lm8gc2J1c2xpYi5vCkBAIC02Niw2ICs3NCw3IEBACiBvYmotJChDT05GSUdfRkJfQVRBUkkpICAgICAgICAgICAgKz0gYXRhZmIubyBjMnAubyBhdGFmYl9tZmIubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRhZmJfaXBsYW4ycDIubyBhdGFmYl9pcGxhbjJwNC5vIGF0YWZiX2lwbGFuMnA4Lm8KIG9iai0kKENPTkZJR19GQl9NQUMpICAgICAgICAgICAgICArPSBtYWNmYi5vCitvYmotJChDT05GSUdfRkJfSEVDVUJBKSAgICAgICAgICAgKz0gaGVjdWJhZmIubwogb2JqLSQoQ09ORklHX0ZCX0hHQSkgICAgICAgICAgICAgICs9IGhnYWZiLm8KIG9iai0kKENPTkZJR19GQl9YVlI1MDApICAgICAgICAgICArPSBzdW54dnI1MDAubwogb2JqLSQoQ09ORklHX0ZCX1hWUjI1MDApICAgICAgICAgICs9IHN1bnh2cjI1MDAubwpAQCAtNzgsNiArODcsNyBAQAogb2JqLSQoQ09ORklHX0ZCX1NBMTEwMCkgICAgICAgICAgICs9IHNhMTEwMGZiLm8KIG9iai0kKENPTkZJR19GQl9ISVQpICAgICAgICAgICAgICArPSBoaXRmYi5vCiBvYmotJChDT05GSUdfRkJfRVBTT04xMzU1KQkgICs9IGVwc29uMTM1NWZiLm8KK29iai0kKENPTkZJR19GQl9BVE1FTCkJCSAgKz0gYXRtZWxfbGNkZmIubwogb2JqLSQoQ09ORklHX0ZCX1BWUjIpICAgICAgICAgICAgICs9IHB2cjJmYi5vCiBvYmotJChDT05GSUdfRkJfVk9PRE9PMSkgICAgICAgICAgKz0gc3N0ZmIubwogb2JqLSQoQ09ORklHX0ZCX0FSTUNMQ0QpCSAgKz0gYW1iYS1jbGNkLm8KQEAgLTEwMiwxMSArMTEyLDEyIEBACiBvYmotJChDT05GSUdfRkJfSUJNX0dYVDQ1MDApCSAgKz0gZ3h0NDUwMC5vCiBvYmotJChDT05GSUdfRkJfUFMzKQkJICArPSBwczNmYi5vCiBvYmotJChDT05GSUdfRkJfU001MDEpICAgICAgICAgICAgKz0gc201MDFmYi5vCitvYmotJChDT05GSUdfRkJfWElMSU5YKSAgICAgICAgICAgKz0geGlsaW54ZmIubwogCiAjIFBsYXRmb3JtIG9yIGZhbGxiYWNrIGRyaXZlcnMgZ28gaGVyZQogb2JqLSQoQ09ORklHX0ZCX1ZFU0EpICAgICAgICAgICAgICs9IHZlc2FmYi5vCiBvYmotJChDT05GSUdfRkJfSU1BQykgICAgICAgICAgICAgKz0gaW1hY2ZiLm8KLW9iai0kKENPTkZJR19GQl9WR0ExNikgICAgICAgICAgICArPSB2Z2ExNmZiLm8gdmdhc3RhdGUubworb2JqLSQoQ09ORklHX0ZCX1ZHQTE2KSAgICAgICAgICAgICs9IHZnYTE2ZmIubwogb2JqLSQoQ09ORklHX0ZCX09GKSAgICAgICAgICAgICAgICs9IG9mZmIubwogCiAjIHRoZSB0ZXN0IGZyYW1lYnVmZmVyIGlzIGxhc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwppbmRleCAzMGE4MzY5Ny4uZGIxNWJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hcmNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwpAQCAtMjYyLDcgKzI2Miw4IEBACiAJa3MxMDhfc2V0X3lhZGRyKHBhciwgY2hpcGluZGV4LCB1cHBlci84KTsKIAogCWxpbmVzaXplID0gcGFyLT5pbmZvLT52YXIueHJlcy84OwotCXNyYyA9IHBhci0+aW5mby0+c2NyZWVuX2Jhc2UgKyAobGVmdC84KSArICh1cHBlciAqIGxpbmVzaXplKTsKKwlzcmMgPSAodW5zaWduZWQgY2hhciBfX2ZvcmNlICopIHBhci0+aW5mby0+c2NyZWVuX2Jhc2UgKyAobGVmdC84KSArCisJCSh1cHBlciAqIGxpbmVzaXplKTsKIAlrczEwOF9zZXRfeGFkZHIocGFyLCBjaGlwaW5kZXgsIGxlZnQpOwogCiAJYml0bWFzaz0xOwpAQCAtMzY4LDcgKzM2OSw3IEBACiB7CiAJc3RydWN0IGFyY2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCi0JY2ZiX2ZpbGxyZWN0KGluZm8sIHJlY3QpOworCXN5c19maWxscmVjdChpbmZvLCByZWN0KTsKIAogCS8qIHVwZGF0ZSB0aGUgcGh5c2ljYWwgbGNkICovCiAJYXJjZmJfbGNkX3VwZGF0ZShwYXIsIHJlY3QtPmR4LCByZWN0LT5keSwgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CkBAIC0zNzksNyArMzgwLDcgQEAKIHsKIAlzdHJ1Y3QgYXJjZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAKLQljZmJfY29weWFyZWEoaW5mbywgYXJlYSk7CisJc3lzX2NvcHlhcmVhKGluZm8sIGFyZWEpOwogCiAJLyogdXBkYXRlIHRoZSBwaHlzaWNhbCBsY2QgKi8KIAlhcmNmYl9sY2RfdXBkYXRlKHBhciwgYXJlYS0+ZHgsIGFyZWEtPmR5LCBhcmVhLT53aWR0aCwgYXJlYS0+aGVpZ2h0KTsKQEAgLTM4OSw3ICszOTAsNyBAQAogewogCXN0cnVjdCBhcmNmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCXN5c19pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwogCiAJLyogdXBkYXRlIHRoZSBwaHlzaWNhbCBsY2QgKi8KIAlhcmNmYl9sY2RfdXBkYXRlKHBhciwgaW1hZ2UtPmR4LCBpbWFnZS0+ZHksIGltYWdlLT53aWR0aCwKQEAgLTQzOSwxNCArNDQwLDExIEBACiAgKiB0aGUgZmIuIGl0J3MgaW5lZmZpY2llbnQgZm9yIHRoZW0gdG8gZG8gYW55dGhpbmcgbGVzcyB0aGFuIDY0KjgKICAqIHdyaXRlcyBzaW5jZSB3ZSB1cGRhdGUgdGhlIGxjZCBpbiBlYWNoIHdyaXRlKCkgYW55d2F5LgogICovCi1zdGF0aWMgc3NpemVfdCBhcmNmYl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkJCWxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IGFyY2ZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJLyogbW9kZGVkIGZyb20gZXBzb24gMTM1NSAqLwogCi0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlpbnQgZmJpZHg7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm87CiAJdW5zaWduZWQgbG9uZyBwOwogCWludCBlcnI9LUVJTlZBTDsKIAl1bnNpZ25lZCBpbnQgZmJtZW1sZW5ndGgseCx5LHcsaCwgYml0cHBvcywgc3RhcnRwb3MsIGVuZHBvcywgYml0Y291bnQ7CkBAIC00NTQsMTMgKzQ1Miw2IEBACiAJdW5zaWduZWQgaW50IHhyZXM7CiAKIAlwID0gKnBwb3M7Ci0JaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCWZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlpbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0KLQlpZiAoIWluZm8gfHwgIWluZm8tPnNjcmVlbl9iYXNlKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXBhciA9IGluZm8tPnBhcjsKIAl4cmVzID0gaW5mby0+dmFyLnhyZXM7CiAJZmJtZW1sZW5ndGggPSAoeHJlcyAqIGluZm8tPnZhci55cmVzKS84OwpAQCAtNDc3LDcgKzQ2OCw3IEBACiAJaWYgKGNvdW50KSB7CiAJCWNoYXIgKmJhc2VfYWRkcjsKIAotCQliYXNlX2FkZHIgPSBpbmZvLT5zY3JlZW5fYmFzZTsKKwkJYmFzZV9hZGRyID0gKGNoYXIgX19mb3JjZSAqKWluZm8tPnNjcmVlbl9iYXNlOwogCQljb3VudCAtPSBjb3B5X2Zyb21fdXNlcihiYXNlX2FkZHIgKyBwLCBidWYsIGNvdW50KTsKIAkJKnBwb3MgKz0gY291bnQ7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC01MDMsNiArNDk0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIGFyY2ZiX29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmZiX29wZW4JPSBhcmNmYl9vcGVuLAorCS5mYl9yZWFkICAgICAgICA9IGZiX3N5c19yZWFkLAogCS5mYl93cml0ZQk9IGFyY2ZiX3dyaXRlLAogCS5mYl9yZWxlYXNlCT0gYXJjZmJfcmVsZWFzZSwKIAkuZmJfcGFuX2Rpc3BsYXkJPSBhcmNmYl9wYW5fZGlzcGxheSwKQEAgLTYwMyw3ICs1OTUsNyBAQAogCiAJaWYgKGluZm8pIHsKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKLQkJdmZyZWUoaW5mby0+c2NyZWVuX2Jhc2UpOworCQl2ZnJlZSgodm9pZCBfX2ZvcmNlICopaW5mby0+c2NyZWVuX2Jhc2UpOwogCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXJrZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXJrZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTFiMDdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9hcmtmYi5jCkBAIC0wLDAgKzEsMTIwMSBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL2Fya2ZiLmMgLS0gRnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIEFSSyAyMDAwUFYKKyAqICB3aXRoIElDUyA1MzQyIGRhYyAoaXQgaXMgZWFzeSB0byBhZGQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IGRhY3MpLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgT25kcmVqIFphamljZWsgPHNhbnRpYWdvQGNyZnJlZW5ldC5vcmc+CisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICoKKyAqICBDb2RlIGlzIGJhc2VkIG9uIHMzZmIKKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N2Z2EuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPiAvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGFjcXVpcmVfY29uc29sZV9zZW0oKSAqLworI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgorCisjaWZkZWYgQ09ORklHX01UUlIKKyNpbmNsdWRlIDxhc20vbXRyci5oPgorI2VuZGlmCisKK3N0cnVjdCBhcmtmYl9pbmZvIHsKKwlpbnQgbWNsa19mcmVxOworCWludCBtdHJyX3JlZzsKKworCXN0cnVjdCBkYWNfaW5mbyAqZGFjOworCXN0cnVjdCB2Z2FzdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9sb2NrOworCXVuc2lnbmVkIGludCByZWZfY291bnQ7CisJdTMyIHBzZXVkb19wYWxldHRlWzE2XTsKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3ZnYV9mYl9mb3JtYXQgYXJrZmJfZm9ybWF0c1tdID0geworCXsgMCwgIHswLCA2LCAwfSwgIHswLCA2LCAwfSwgIHswLCA2LCAwfSwgezAsIDAsIDB9LCAwLAorCQlGQl9UWVBFX1RFWFQsIEZCX0FVWF9URVhUX1NWR0FfU1RFUDQsCUZCX1ZJU1VBTF9QU0VVRE9DT0xPUiwgOCwgOH0sCisJeyA0LCAgezAsIDYsIDB9LCAgezAsIDYsIDB9LCAgezAsIDYsIDB9LCB7MCwgMCwgMH0sIDAsCisJCUZCX1RZUEVfUEFDS0VEX1BJWEVMUywgMCwJCUZCX1ZJU1VBTF9QU0VVRE9DT0xPUiwgOCwgMTZ9LAorCXsgNCwgIHswLCA2LCAwfSwgIHswLCA2LCAwfSwgIHswLCA2LCAwfSwgezAsIDAsIDB9LCAxLAorCQlGQl9UWVBFX0lOVEVSTEVBVkVEX1BMQU5FUywgMSwJCUZCX1ZJU1VBTF9QU0VVRE9DT0xPUiwgOCwgMTZ9LAorCXsgOCwgIHswLCA2LCAwfSwgIHswLCA2LCAwfSwgIHswLCA2LCAwfSwgezAsIDAsIDB9LCAwLAorCQlGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsIDAsCQlGQl9WSVNVQUxfUFNFVURPQ09MT1IsIDgsIDh9LAorCXsxNiwgIHsxMCwgNSwgMH0sIHs1LCA1LCAwfSwgIHswLCA1LCAwfSwgezAsIDAsIDB9LCAwLAorCQlGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsIDAsCQlGQl9WSVNVQUxfVFJVRUNPTE9SLCA0LCA0fSwKKwl7MTYsICB7MTEsIDUsIDB9LCB7NSwgNiwgMH0sICB7MCwgNSwgMH0sIHswLCAwLCAwfSwgMCwKKwkJRkJfVFlQRV9QQUNLRURfUElYRUxTLCAwLAkJRkJfVklTVUFMX1RSVUVDT0xPUiwgNCwgNH0sCisJezI0LCAgezE2LCA4LCAwfSwgezgsIDgsIDB9LCAgezAsIDgsIDB9LCB7MCwgMCwgMH0sIDAsCisJCUZCX1RZUEVfUEFDS0VEX1BJWEVMUywgMCwJCUZCX1ZJU1VBTF9UUlVFQ09MT1IsIDgsIDh9LAorCXszMiwgIHsxNiwgOCwgMH0sIHs4LCA4LCAwfSwgIHswLCA4LCAwfSwgezAsIDAsIDB9LCAwLAorCQlGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsIDAsCQlGQl9WSVNVQUxfVFJVRUNPTE9SLCAyLCAyfSwKKwlTVkdBX0ZPUk1BVF9FTkQKK307CisKKworLyogQ1JUIHRpbWluZyByZWdpc3RlciBzZXRzICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmdhX3JlZ3NldCBhcmtfaF90b3RhbF9yZWdzW10gICAgICAgID0ge3sweDAwLCAwLCA3fSwgezB4NDEsIDcsIDd9LCBWR0FfUkVHU0VUX0VORH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHZnYV9yZWdzZXQgYXJrX2hfZGlzcGxheV9yZWdzW10gICAgICA9IHt7MHgwMSwgMCwgN30sIHsweDQxLCA2LCA2fSwgVkdBX1JFR1NFVF9FTkR9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB2Z2FfcmVnc2V0IGFya19oX2JsYW5rX3N0YXJ0X3JlZ3NbXSAgPSB7ezB4MDIsIDAsIDd9LCB7MHg0MSwgNSwgNX0sIFZHQV9SRUdTRVRfRU5EfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmdhX3JlZ3NldCBhcmtfaF9ibGFua19lbmRfcmVnc1tdICAgID0ge3sweDAzLCAwLCA0fSwgezB4MDUsIDcsIDcJfSwgVkdBX1JFR1NFVF9FTkR9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB2Z2FfcmVnc2V0IGFya19oX3N5bmNfc3RhcnRfcmVnc1tdICAgPSB7ezB4MDQsIDAsIDd9LCB7MHg0MSwgNCwgNH0sIFZHQV9SRUdTRVRfRU5EfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmdhX3JlZ3NldCBhcmtfaF9zeW5jX2VuZF9yZWdzW10gICAgID0ge3sweDA1LCAwLCA0fSwgVkdBX1JFR1NFVF9FTkR9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZnYV9yZWdzZXQgYXJrX3ZfdG90YWxfcmVnc1tdICAgICAgICA9IHt7MHgwNiwgMCwgN30sIHsweDA3LCAwLCAwfSwgezB4MDcsIDUsIDV9LCB7MHg0MCwgNywgN30sIFZHQV9SRUdTRVRfRU5EfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmdhX3JlZ3NldCBhcmtfdl9kaXNwbGF5X3JlZ3NbXSAgICAgID0ge3sweDEyLCAwLCA3fSwgezB4MDcsIDEsIDF9LCB7MHgwNywgNiwgNn0sIHsweDQwLCA2LCA2fSwgVkdBX1JFR1NFVF9FTkR9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB2Z2FfcmVnc2V0IGFya192X2JsYW5rX3N0YXJ0X3JlZ3NbXSAgPSB7ezB4MTUsIDAsIDd9LCB7MHgwNywgMywgM30sIHsweDA5LCA1LCA1fSwgezB4NDAsIDUsIDV9LCBWR0FfUkVHU0VUX0VORH07CisvLyBjb25zdCBzdHJ1Y3QgdmdhX3JlZ3NldCBhcmtfdl9ibGFua19lbmRfcmVnc1tdICAgID0ge3sweDE2LCAwLCA2fSwgVkdBX1JFR1NFVF9FTkR9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB2Z2FfcmVnc2V0IGFya192X2JsYW5rX2VuZF9yZWdzW10gICAgPSB7ezB4MTYsIDAsIDd9LCBWR0FfUkVHU0VUX0VORH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHZnYV9yZWdzZXQgYXJrX3Zfc3luY19zdGFydF9yZWdzW10gICA9IHt7MHgxMCwgMCwgN30sIHsweDA3LCAyLCAyfSwgezB4MDcsIDcsIDd9LCB7MHg0MCwgNCwgNH0sIFZHQV9SRUdTRVRfRU5EfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmdhX3JlZ3NldCBhcmtfdl9zeW5jX2VuZF9yZWdzW10gICAgID0ge3sweDExLCAwLCAzfSwgVkdBX1JFR1NFVF9FTkR9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZnYV9yZWdzZXQgYXJrX2xpbmVfY29tcGFyZV9yZWdzW10gICA9IHt7MHgxOCwgMCwgN30sIHsweDA3LCA0LCA0fSwgezB4MDksIDYsIDZ9LCBWR0FfUkVHU0VUX0VORH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHZnYV9yZWdzZXQgYXJrX3N0YXJ0X2FkZHJlc3NfcmVnc1tdICA9IHt7MHgwZCwgMCwgN30sIHsweDBjLCAwLCA3fSwgezB4NDAsIDAsIDJ9LCBWR0FfUkVHU0VUX0VORH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHZnYV9yZWdzZXQgYXJrX29mZnNldF9yZWdzW10gICAgICAgICA9IHt7MHgxMywgMCwgN30sIHsweDQxLCAzLCAzfSwgVkdBX1JFR1NFVF9FTkR9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN2Z2FfdGltaW5nX3JlZ3MgYXJrX3RpbWluZ19yZWdzICAgICA9IHsKKwlhcmtfaF90b3RhbF9yZWdzLCBhcmtfaF9kaXNwbGF5X3JlZ3MsIGFya19oX2JsYW5rX3N0YXJ0X3JlZ3MsCisJYXJrX2hfYmxhbmtfZW5kX3JlZ3MsIGFya19oX3N5bmNfc3RhcnRfcmVncywgYXJrX2hfc3luY19lbmRfcmVncywKKwlhcmtfdl90b3RhbF9yZWdzLCBhcmtfdl9kaXNwbGF5X3JlZ3MsIGFya192X2JsYW5rX3N0YXJ0X3JlZ3MsCisJYXJrX3ZfYmxhbmtfZW5kX3JlZ3MsIGFya192X3N5bmNfc3RhcnRfcmVncywgYXJrX3Zfc3luY19lbmRfcmVncywKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCisKK3N0YXRpYyBjaGFyICptb2RlID0gIjY0MHg0ODAtOEA2MCI7CisKKyNpZmRlZiBDT05GSUdfTVRSUgorc3RhdGljIGludCBtdHJyID0gMTsKKyNlbmRpZgorCitNT0RVTEVfQVVUSE9SKCIoYykgMjAwNyBPbmRyZWogWmFqaWNlayA8c2FudGlhZ29AY3JmcmVlbmV0Lm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiZmJkZXYgZHJpdmVyIGZvciBBUksgMjAwMFBWIik7CisKK21vZHVsZV9wYXJhbShtb2RlLCBjaGFycCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1vZGUsICJEZWZhdWx0IHZpZGVvIG1vZGUgKCc2NDB4NDgwLThANjAnLCBldGMpIik7CisKKyNpZmRlZiBDT05GSUdfTVRSUgorbW9kdWxlX3BhcmFtKG10cnIsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG10cnIsICJFbmFibGUgd3JpdGUtY29tYmluaW5nIHdpdGggTVRSUiAoMT1lbmFibGUsIDA9ZGlzYWJsZSwgZGVmYXVsdD0xKSIpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgdGhyZXNob2xkID0gNDsKKworbW9kdWxlX3BhcmFtKHRocmVzaG9sZCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModGhyZXNob2xkLCAiRklGTyB0aHJlc2hvbGQiKTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworc3RhdGljIHZvaWQgYXJrZmJfc2V0dGlsZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3RpbGVtYXAgKm1hcCkKK3sKKwljb25zdCB1OCAqZm9udCA9IG1hcC0+ZGF0YTsKKwl1OCBfX2lvbWVtICpmYiA9ICh1OCBfX2lvbWVtICopaW5mby0+c2NyZWVuX2Jhc2U7CisJaW50IGksIGM7CisKKwlpZiAoKG1hcC0+d2lkdGggIT0gOCkgfHwgKG1hcC0+aGVpZ2h0ICE9IDE2KSB8fAorCSAgICAobWFwLT5kZXB0aCAhPSAxKSB8fCAobWFwLT5sZW5ndGggIT0gMjU2KSkgeworCSAgICAJcHJpbnRrKEtFUk5fRVJSICJmYiVkOiB1bnN1cHBvcnRlZCBmb250IHBhcmFtZXRlcnM6IHdpZHRoICVkLCAiCisJCSAgICAgICAiaGVpZ2h0ICVkLCBkZXB0aCAlZCwgbGVuZ3RoICVkXG4iLCBpbmZvLT5ub2RlLAorCQkgICAgICAgbWFwLT53aWR0aCwgbWFwLT5oZWlnaHQsIG1hcC0+ZGVwdGgsIG1hcC0+bGVuZ3RoKTsKKwkJcmV0dXJuOworCX0KKworCWZiICs9IDI7CisJZm9yIChjID0gMDsgYyA8IG1hcC0+bGVuZ3RoOyBjKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG1hcC0+aGVpZ2h0OyBpKyspIHsKKwkJCWZiX3dyaXRlYihmb250W2ldLCAmZmJbaSAqIDRdKTsKKwkJCWZiX3dyaXRlYihmb250W2ldLCAmZmJbaSAqIDQgKyAoMTI4ICogOCldKTsKKwkJfQorCQlmYiArPSAxMjg7CisKKwkJaWYgKChjICUgOCkgPT0gNykKKwkJCWZiICs9IDEyOCo4OworCisJCWZvbnQgKz0gbWFwLT5oZWlnaHQ7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGZiX3RpbGVfb3BzIGFya2ZiX3RpbGVfb3BzID0geworCS5mYl9zZXR0aWxlCT0gYXJrZmJfc2V0dGlsZSwKKwkuZmJfdGlsZWNvcHkJPSBzdmdhX3RpbGVjb3B5LAorCS5mYl90aWxlZmlsbCAgICA9IHN2Z2FfdGlsZWZpbGwsCisJLmZiX3RpbGVibGl0ICAgID0gc3ZnYV90aWxlYmxpdCwKKwkuZmJfdGlsZWN1cnNvciAgPSBzdmdhX3RpbGVjdXJzb3IsCisJLmZiX2dldF90aWxlbWF4ID0gc3ZnYV9nZXRfdGlsZW1heCwKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qIGltYWdlIGRhdGEgaXMgTVNCLWZpcnN0LCBmYiBzdHJ1Y3R1cmUgaXMgTVNCLWZpcnN0IHRvbyAqLworc3RhdGljIGlubGluZSB1MzIgZXhwYW5kX2NvbG9yKHUzMiBjKQoreworCXJldHVybiAoKGMgJiAxKSB8ICgoYyAmIDIpIDw8IDcpIHwgKChjICYgNCkgPDwgMTQpIHwgKChjICYgOCkgPDwgMjEpKSAqIDB4RkY7Cit9CisKKy8qIGFya2ZiX2lwbGFuX2ltYWdlYmxpdCBzaWxlbnRseSBhc3N1bWVzIHRoYXQgYWxtb3N0IGV2ZXJ5dGhpbmcgaXMgOC1waXhlbCBhbGlnbmVkICovCitzdGF0aWMgdm9pZCBhcmtmYl9pcGxhbl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJdTMyIGZnID0gZXhwYW5kX2NvbG9yKGltYWdlLT5mZ19jb2xvcik7CisJdTMyIGJnID0gZXhwYW5kX2NvbG9yKGltYWdlLT5iZ19jb2xvcik7CisJY29uc3QgdTggKnNyYzEsICpzcmM7CisJdTggX19pb21lbSAqZHN0MTsKKwl1MzIgX19pb21lbSAqZHN0OworCXUzMiB2YWw7CisJaW50IHgsIHk7CisKKwlzcmMxID0gaW1hZ2UtPmRhdGE7CisJZHN0MSA9IGluZm8tPnNjcmVlbl9iYXNlICsgKGltYWdlLT5keSAqIGluZm8tPmZpeC5saW5lX2xlbmd0aCkKKwkJICsgKChpbWFnZS0+ZHggLyA4KSAqIDQpOworCisJZm9yICh5ID0gMDsgeSA8IGltYWdlLT5oZWlnaHQ7IHkrKykgeworCQlzcmMgPSBzcmMxOworCQlkc3QgPSAodTMyIF9faW9tZW0gKikgZHN0MTsKKwkJZm9yICh4ID0gMDsgeCA8IGltYWdlLT53aWR0aDsgeCArPSA4KSB7CisJCQl2YWwgPSAqKHNyYysrKSAqIDB4MDEwMTAxMDE7CisJCQl2YWwgPSAodmFsICYgZmcpIHwgKH52YWwgJiBiZyk7CisJCQlmYl93cml0ZWwodmFsLCBkc3QrKyk7CisJCX0KKwkJc3JjMSArPSBpbWFnZS0+d2lkdGggLyA4OworCQlkc3QxICs9IGluZm8tPmZpeC5saW5lX2xlbmd0aDsKKwl9CisKK30KKworLyogYXJrZmJfaXBsYW5fZmlsbHJlY3Qgc2lsZW50bHkgYXNzdW1lcyB0aGF0IGFsbW9zdCBldmVyeXRoaW5nIGlzIDgtcGl4ZWwgYWxpZ25lZCAqLworc3RhdGljIHZvaWQgYXJrZmJfaXBsYW5fZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwl1MzIgZmcgPSBleHBhbmRfY29sb3IocmVjdC0+Y29sb3IpOworCXU4IF9faW9tZW0gKmRzdDE7CisJdTMyIF9faW9tZW0gKmRzdDsKKwlpbnQgeCwgeTsKKworCWRzdDEgPSBpbmZvLT5zY3JlZW5fYmFzZSArIChyZWN0LT5keSAqIGluZm8tPmZpeC5saW5lX2xlbmd0aCkKKwkJICsgKChyZWN0LT5keCAvIDgpICogNCk7CisKKwlmb3IgKHkgPSAwOyB5IDwgcmVjdC0+aGVpZ2h0OyB5KyspIHsKKwkJZHN0ID0gKHUzMiBfX2lvbWVtICopIGRzdDE7CisJCWZvciAoeCA9IDA7IHggPCByZWN0LT53aWR0aDsgeCArPSA4KSB7CisJCQlmYl93cml0ZWwoZmcsIGRzdCsrKTsKKwkJfQorCQlkc3QxICs9IGluZm8tPmZpeC5saW5lX2xlbmd0aDsKKwl9CisKK30KKworCisvKiBpbWFnZSBkYXRhIGlzIE1TQi1maXJzdCwgZmIgc3RydWN0dXJlIGlzIGhpZ2gtbmliYmxlLWluLWxvdy1ieXRlLWZpcnN0ICovCitzdGF0aWMgaW5saW5lIHUzMiBleHBhbmRfcGl4ZWwodTMyIGMpCit7CisJcmV0dXJuICgoKGMgJiAgMSkgPDwgMjQpIHwgKChjICYgIDIpIDw8IDI3KSB8ICgoYyAmICA0KSA8PCAxNCkgfCAoKGMgJiAgIDgpIDw8IDE3KSB8CisJCSgoYyAmIDE2KSA8PCAgNCkgfCAoKGMgJiAzMikgPDwgIDcpIHwgKChjICYgNjQpID4+ICA2KSB8ICgoYyAmIDEyOCkgPj4gIDMpKSAqIDB4RjsKK30KKworLyogYXJrZmJfY2ZiNF9pbWFnZWJsaXQgc2lsZW50bHkgYXNzdW1lcyB0aGF0IGFsbW9zdCBldmVyeXRoaW5nIGlzIDgtcGl4ZWwgYWxpZ25lZCAqLworc3RhdGljIHZvaWQgYXJrZmJfY2ZiNF9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJdTMyIGZnID0gaW1hZ2UtPmZnX2NvbG9yICogMHgxMTExMTExMTsKKwl1MzIgYmcgPSBpbWFnZS0+YmdfY29sb3IgKiAweDExMTExMTExOworCWNvbnN0IHU4ICpzcmMxLCAqc3JjOworCXU4IF9faW9tZW0gKmRzdDE7CisJdTMyIF9faW9tZW0gKmRzdDsKKwl1MzIgdmFsOworCWludCB4LCB5OworCisJc3JjMSA9IGltYWdlLT5kYXRhOworCWRzdDEgPSBpbmZvLT5zY3JlZW5fYmFzZSArIChpbWFnZS0+ZHkgKiBpbmZvLT5maXgubGluZV9sZW5ndGgpCisJCSArICgoaW1hZ2UtPmR4IC8gOCkgKiA0KTsKKworCWZvciAoeSA9IDA7IHkgPCBpbWFnZS0+aGVpZ2h0OyB5KyspIHsKKwkJc3JjID0gc3JjMTsKKwkJZHN0ID0gKHUzMiBfX2lvbWVtICopIGRzdDE7CisJCWZvciAoeCA9IDA7IHggPCBpbWFnZS0+d2lkdGg7IHggKz0gOCkgeworCQkJdmFsID0gZXhwYW5kX3BpeGVsKCooc3JjKyspKTsKKwkJCXZhbCA9ICh2YWwgJiBmZykgfCAofnZhbCAmIGJnKTsKKwkJCWZiX3dyaXRlbCh2YWwsIGRzdCsrKTsKKwkJfQorCQlzcmMxICs9IGltYWdlLT53aWR0aCAvIDg7CisJCWRzdDEgKz0gaW5mby0+Zml4LmxpbmVfbGVuZ3RoOworCX0KKworfQorCitzdGF0aWMgdm9pZCBhcmtmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJaWYgKChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gNCkgJiYgKGltYWdlLT5kZXB0aCA9PSAxKQorCSAgICAmJiAoKGltYWdlLT53aWR0aCAlIDgpID09IDApICYmICgoaW1hZ2UtPmR4ICUgOCkgPT0gMCkpIHsKKwkJaWYgKGluZm8tPmZpeC50eXBlID09IEZCX1RZUEVfSU5URVJMRUFWRURfUExBTkVTKQorCQkJYXJrZmJfaXBsYW5faW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwkJZWxzZQorCQkJYXJrZmJfY2ZiNF9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCX0gZWxzZQorCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKK30KKworc3RhdGljIHZvaWQgYXJrZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwlpZiAoKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSA0KQorCSAgICAmJiAoKHJlY3QtPndpZHRoICUgOCkgPT0gMCkgJiYgKChyZWN0LT5keCAlIDgpID09IDApCisJICAgICYmIChpbmZvLT5maXgudHlwZSA9PSBGQl9UWVBFX0lOVEVSTEVBVkVEX1BMQU5FUykpCisJCWFya2ZiX2lwbGFuX2ZpbGxyZWN0KGluZm8sIHJlY3QpOworCSBlbHNlCisJCWNmYl9maWxscmVjdChpbmZvLCByZWN0KTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworZW51bQoreworCURBQ19QU0VVRE84XzgsCisJREFDX1JHQjE1NTVfOCwKKwlEQUNfUkdCMDU2NV84LAorCURBQ19SR0IwODg4XzgsCisJREFDX1JHQjg4ODhfOCwKKwlEQUNfUFNFVURPOF8xNiwKKwlEQUNfUkdCMTU1NV8xNiwKKwlEQUNfUkdCMDU2NV8xNiwKKwlEQUNfUkdCMDg4OF8xNiwKKwlEQUNfUkdCODg4OF8xNiwKKwlEQUNfTUFYCit9OworCitzdHJ1Y3QgZGFjX29wcyB7CisJaW50ICgqZGFjX2dldF9tb2RlKShzdHJ1Y3QgZGFjX2luZm8gKmluZm8pOworCWludCAoKmRhY19zZXRfbW9kZSkoc3RydWN0IGRhY19pbmZvICppbmZvLCBpbnQgbW9kZSk7CisJaW50ICgqZGFjX2dldF9mcmVxKShzdHJ1Y3QgZGFjX2luZm8gKmluZm8sIGludCBjaGFubmVsKTsKKwlpbnQgKCpkYWNfc2V0X2ZyZXEpKHN0cnVjdCBkYWNfaW5mbyAqaW5mbywgaW50IGNoYW5uZWwsIHUzMiBmcmVxKTsKKwl2b2lkICgqZGFjX3JlbGVhc2UpKHN0cnVjdCBkYWNfaW5mbyAqaW5mbyk7Cit9OworCit0eXBlZGVmIHZvaWQgKCpkYWNfcmVhZF9yZWdzX3QpKHZvaWQgKmRhdGEsIHU4ICpjb2RlLCBpbnQgY291bnQpOwordHlwZWRlZiB2b2lkICgqZGFjX3dyaXRlX3JlZ3NfdCkodm9pZCAqZGF0YSwgdTggKmNvZGUsIGludCBjb3VudCk7CisKK3N0cnVjdCBkYWNfaW5mbworeworCXN0cnVjdCBkYWNfb3BzICpkYWNvcHM7CisJZGFjX3JlYWRfcmVnc190IGRhY19yZWFkX3JlZ3M7CisJZGFjX3dyaXRlX3JlZ3NfdCBkYWNfd3JpdGVfcmVnczsKKwl2b2lkICpkYXRhOworfTsKKworCitzdGF0aWMgaW5saW5lIHU4IGRhY19yZWFkX3JlZyhzdHJ1Y3QgZGFjX2luZm8gKmluZm8sIHU4IHJlZykKK3sKKwl1OCBjb2RlWzJdID0ge3JlZywgMH07CisJaW5mby0+ZGFjX3JlYWRfcmVncyhpbmZvLT5kYXRhLCBjb2RlLCAxKTsKKwlyZXR1cm4gY29kZVsxXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRhY19yZWFkX3JlZ3Moc3RydWN0IGRhY19pbmZvICppbmZvLCB1OCAqY29kZSwgaW50IGNvdW50KQoreworCWluZm8tPmRhY19yZWFkX3JlZ3MoaW5mby0+ZGF0YSwgY29kZSwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGFjX3dyaXRlX3JlZyhzdHJ1Y3QgZGFjX2luZm8gKmluZm8sIHU4IHJlZywgdTggdmFsKQoreworCXU4IGNvZGVbMl0gPSB7cmVnLCB2YWx9OworCWluZm8tPmRhY193cml0ZV9yZWdzKGluZm8tPmRhdGEsIGNvZGUsIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGFjX3dyaXRlX3JlZ3Moc3RydWN0IGRhY19pbmZvICppbmZvLCB1OCAqY29kZSwgaW50IGNvdW50KQoreworCWluZm8tPmRhY193cml0ZV9yZWdzKGluZm8tPmRhdGEsIGNvZGUsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGFjX3NldF9tb2RlKHN0cnVjdCBkYWNfaW5mbyAqaW5mbywgaW50IG1vZGUpCit7CisJcmV0dXJuIGluZm8tPmRhY29wcy0+ZGFjX3NldF9tb2RlKGluZm8sIG1vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkYWNfc2V0X2ZyZXEoc3RydWN0IGRhY19pbmZvICppbmZvLCBpbnQgY2hhbm5lbCwgdTMyIGZyZXEpCit7CisJcmV0dXJuIGluZm8tPmRhY29wcy0+ZGFjX3NldF9mcmVxKGluZm8sIGNoYW5uZWwsIGZyZXEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGFjX3JlbGVhc2Uoc3RydWN0IGRhY19pbmZvICppbmZvKQoreworCWluZm8tPmRhY29wcy0+ZGFjX3JlbGVhc2UoaW5mbyk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qIElDUzUzNDIgREFDICovCisKK3N0cnVjdCBpY3M1MzQyX2luZm8KK3sKKwlzdHJ1Y3QgZGFjX2luZm8gZGFjOworCXU4IG1vZGU7Cit9OworCisjZGVmaW5lIERBQ19QQVIoaW5mbykgKChzdHJ1Y3QgaWNzNTM0Ml9pbmZvICopIGluZm8pCisKKy8qIExTQiBpcyBzZXQgdG8gZGlzdGluZ3Vpc2ggdW51c2VkIHNsb3RzICovCitzdGF0aWMgY29uc3QgdTggaWNzNTM0Ml9tb2RlX3RhYmxlW0RBQ19NQVhdID0geworCVtEQUNfUFNFVURPOF84XSAgPSAweDAxLCBbREFDX1JHQjE1NTVfOF0gID0gMHgyMSwgW0RBQ19SR0IwNTY1XzhdICA9IDB4NjEsCisJW0RBQ19SR0IwODg4XzhdICA9IDB4NDEsIFtEQUNfUFNFVURPOF8xNl0gPSAweDExLCBbREFDX1JHQjE1NTVfMTZdID0gMHgzMSwKKwlbREFDX1JHQjA1NjVfMTZdID0gMHg1MSwgW0RBQ19SR0IwODg4XzE2XSA9IDB4OTEsIFtEQUNfUkdCODg4OF8xNl0gPSAweDcxCit9OworCitzdGF0aWMgaW50IGljczUzNDJfc2V0X21vZGUoc3RydWN0IGRhY19pbmZvICppbmZvLCBpbnQgbW9kZSkKK3sKKwl1OCBjb2RlOworCisJaWYgKG1vZGUgPj0gREFDX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb2RlID0gaWNzNTM0Ml9tb2RlX3RhYmxlW21vZGVdOworCisJaWYgKCEgY29kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYWNfd3JpdGVfcmVnKGluZm8sIDYsIGNvZGUgJiAweEYwKTsKKwlEQUNfUEFSKGluZm8pLT5tb2RlID0gbW9kZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN2Z2FfcGxsIGljczUzNDJfcGxsID0gezMsIDEyOSwgMywgMzMsIDAsIDMsCisJNjAwMDAsIDI1MDAwMCwgMTQzMTh9OworCisvKiBwZDQgLSBhbGxvdyBvbmx5IHBvc2RpdmlkZXIgNCAocj0yKSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdmdhX3BsbCBpY3M1MzQyX3BsbF9wZDQgPSB7MywgMTI5LCAzLCAzMywgMiwgMiwKKwk2MDAwMCwgMzM1MDAwLCAxNDMxOH07CisKKy8qIDI3MCBNSHogc2hvdWxkIGJlIHVwcGVyIGJvdW5kIGZvciBWQ08gY2xvY2sgYWNjb3JkaW5nIHRvIHNwZWNzLAorICAgYnV0IHRoYXQgaXMgdG9vIHJlc3RyaWN0aXZlIGluIHBkNCBjYXNlICovCisKK3N0YXRpYyBpbnQgaWNzNTM0Ml9zZXRfZnJlcShzdHJ1Y3QgZGFjX2luZm8gKmluZm8sIGludCBjaGFubmVsLCB1MzIgZnJlcSkKK3sKKwl1MTYgbSwgbiwgcjsKKworCS8qIG9ubHkgcG9zdGRpdmlkZXIgNCAocj0yKSBpcyB2YWxpZCBpbiBtb2RlIERBQ19QU0VVRE84XzE2ICovCisJaW50IHJ2ID0gc3ZnYV9jb21wdXRlX3BsbCgoREFDX1BBUihpbmZvKS0+bW9kZSA9PSBEQUNfUFNFVURPOF8xNikKKwkJCQkgID8gJmljczUzNDJfcGxsX3BkNCA6ICZpY3M1MzQyX3BsbCwKKwkJCQkgIGZyZXEsICZtLCAmbiwgJnIsIDApOworCisJaWYgKHJ2IDwgMCkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQl1OCBjb2RlWzZdID0gezQsIDMsIDUsIG0tMiwgNSwgKG4tMikgfCAociA8PCA1KX07CisJCWRhY193cml0ZV9yZWdzKGluZm8sIGNvZGUsIDMpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGljczUzNDJfcmVsZWFzZShzdHJ1Y3QgZGFjX2luZm8gKmluZm8pCit7CisJaWNzNTM0Ml9zZXRfbW9kZShpbmZvLCBEQUNfUFNFVURPOF84KTsKKwlrZnJlZShpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBkYWNfb3BzIGljczUzNDJfb3BzID0geworCS5kYWNfc2V0X21vZGUJPSBpY3M1MzQyX3NldF9tb2RlLAorCS5kYWNfc2V0X2ZyZXEJPSBpY3M1MzQyX3NldF9mcmVxLAorCS5kYWNfcmVsZWFzZQk9IGljczUzNDJfcmVsZWFzZQorfTsKKworCitzdGF0aWMgc3RydWN0IGRhY19pbmZvICogaWNzNTM0Ml9pbml0KGRhY19yZWFkX3JlZ3NfdCBkcnIsIGRhY193cml0ZV9yZWdzX3QgZHdyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkYWNfaW5mbyAqaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpY3M1MzQyX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCWlmICghIGluZm8pCisJCXJldHVybiBOVUxMOworCisJaW5mby0+ZGFjb3BzID0gJmljczUzNDJfb3BzOworCWluZm8tPmRhY19yZWFkX3JlZ3MgPSBkcnI7CisJaW5mby0+ZGFjX3dyaXRlX3JlZ3MgPSBkd3I7CisJaW5mby0+ZGF0YSA9IGRhdGE7CisJREFDX1BBUihpbmZvKS0+bW9kZSA9IERBQ19QU0VVRE84Xzg7IC8qIGVzdGltYXRpb24gKi8KKwlyZXR1cm4gaW5mbzsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGRhY19yZWdzWzRdID0gezB4M2M4LCAweDNjOSwgMHgzYzYsIDB4M2M3fTsKKworc3RhdGljIHZvaWQgYXJrX2RhY19yZWFkX3JlZ3Modm9pZCAqZGF0YSwgdTggKmNvZGUsIGludCBjb3VudCkKK3sKKwl1OCByZWd2YWwgPSB2Z2FfcnNlcShOVUxMLCAweDFDKTsKKworCXdoaWxlIChjb3VudCAhPSAwKQorCXsKKwkJdmdhX3dzZXEoTlVMTCwgMHgxQywgcmVndmFsIHwgKGNvZGVbMF0gJiA0KSA/IDB4ODAgOiAwKTsKKwkJY29kZVsxXSA9IHZnYV9yKE5VTEwsIGRhY19yZWdzW2NvZGVbMF0gJiAzXSk7CisJCWNvdW50LS07CisJCWNvZGUgKz0gMjsKKwl9CisKKwl2Z2Ffd3NlcShOVUxMLCAweDFDLCByZWd2YWwpOworfQorCitzdGF0aWMgdm9pZCBhcmtfZGFjX3dyaXRlX3JlZ3Modm9pZCAqZGF0YSwgdTggKmNvZGUsIGludCBjb3VudCkKK3sKKwl1OCByZWd2YWwgPSB2Z2FfcnNlcShOVUxMLCAweDFDKTsKKworCXdoaWxlIChjb3VudCAhPSAwKQorCXsKKwkJdmdhX3dzZXEoTlVMTCwgMHgxQywgcmVndmFsIHwgKGNvZGVbMF0gJiA0KSA/IDB4ODAgOiAwKTsKKwkJdmdhX3coTlVMTCwgZGFjX3JlZ3NbY29kZVswXSAmIDNdLCBjb2RlWzFdKTsKKwkJY291bnQtLTsKKwkJY29kZSArPSAyOworCX0KKworCXZnYV93c2VxKE5VTEwsIDB4MUMsIHJlZ3ZhbCk7Cit9CisKKworc3RhdGljIHZvaWQgYXJrX3NldF9waXhjbG9jayhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdTMyIHBpeGNsb2NrKQoreworCXN0cnVjdCBhcmtmYl9pbmZvICpwYXIgPSBpbmZvLT5wYXI7CisJdTggcmVndmFsOworCisJaW50IHJ2ID0gZGFjX3NldF9mcmVxKHBhci0+ZGFjLCAwLCAxMDAwMDAwMDAwIC8gcGl4Y2xvY2spOworCWlmIChydiA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYiVkOiBjYW5ub3Qgc2V0IHJlcXVlc3RlZCBwaXhjbG9jaywga2VlcGluZyBvbGQgdmFsdWVcbiIsIGluZm8tPm5vZGUpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IFZHQSBtaXNjIHJlZ2lzdGVyICAqLworCXJlZ3ZhbCA9IHZnYV9yKE5VTEwsIFZHQV9NSVNfUik7CisJdmdhX3coTlVMTCwgVkdBX01JU19XLCByZWd2YWwgfCBWR0FfTUlTX0VOQl9QTExfTE9BRCk7Cit9CisKKworLyogT3BlbiBmcmFtZWJ1ZmZlciAqLworCitzdGF0aWMgaW50IGFya2ZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCXN0cnVjdCBhcmtmYl9pbmZvICpwYXIgPSBpbmZvLT5wYXI7CisKKwltdXRleF9sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKKwlpZiAocGFyLT5yZWZfY291bnQgPT0gMCkgeworCQltZW1zZXQoJihwYXItPnN0YXRlKSwgMCwgc2l6ZW9mKHN0cnVjdCB2Z2FzdGF0ZSkpOworCQlwYXItPnN0YXRlLmZsYWdzID0gVkdBX1NBVkVfTU9ERSB8IFZHQV9TQVZFX0ZPTlRTIHwgVkdBX1NBVkVfQ01BUDsKKwkJcGFyLT5zdGF0ZS5udW1fY3J0YyA9IDB4NjA7CisJCXBhci0+c3RhdGUubnVtX3NlcSA9IDB4MzA7CisJCXNhdmVfdmdhKCYocGFyLT5zdGF0ZSkpOworCX0KKworCXBhci0+cmVmX2NvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKKworCXJldHVybiAwOworfQorCisvKiBDbG9zZSBmcmFtZWJ1ZmZlciAqLworCitzdGF0aWMgaW50IGFya2ZiX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCXN0cnVjdCBhcmtmYl9pbmZvICpwYXIgPSBpbmZvLT5wYXI7CisKKwltdXRleF9sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKKwlpZiAocGFyLT5yZWZfY291bnQgPT0gMCkgeworCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocGFyLT5yZWZfY291bnQgPT0gMSkgeworCQlyZXN0b3JlX3ZnYSgmKHBhci0+c3RhdGUpKTsKKwkJZGFjX3NldF9tb2RlKHBhci0+ZGFjLCBEQUNfUFNFVURPOF84KTsKKwl9CisKKwlwYXItPnJlZl9jb3VudC0tOworCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVmFsaWRhdGUgcGFzc2VkIGluIHZhciAqLworCitzdGF0aWMgaW50IGFya2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IHJ2LCBtZW0sIHN0ZXA7CisKKwkvKiBGaW5kIGFwcHJvcHJpYXRlIGZvcm1hdCAqLworCXJ2ID0gc3ZnYV9tYXRjaF9mb3JtYXQgKGFya2ZiX2Zvcm1hdHMsIHZhciwgTlVMTCk7CisJaWYgKHJ2IDwgMCkKKwl7CisJCXByaW50ayhLRVJOX0VSUiAiZmIlZDogdW5zdXBwb3J0ZWQgbW9kZSByZXF1ZXN0ZWRcbiIsIGluZm8tPm5vZGUpOworCQlyZXR1cm4gcnY7CisJfQorCisJLyogRG8gbm90IGFsbG93IHRvIGhhdmUgcmVhbCByZXNvdWx1dGlvbiBsYXJnZXIgdGhhbiB2aXJ0dWFsICovCisJaWYgKHZhci0+eHJlcyA+IHZhci0+eHJlc192aXJ0dWFsKQorCQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKKworCWlmICh2YXItPnlyZXMgPiB2YXItPnlyZXNfdmlydHVhbCkKKwkJdmFyLT55cmVzX3ZpcnR1YWwgPSB2YXItPnlyZXM7CisKKwkvKiBSb3VuZCB1cCB4cmVzX3ZpcnR1YWwgdG8gaGF2ZSBwcm9wZXIgYWxpZ25tZW50IG9mIGxpbmVzICovCisJc3RlcCA9IGFya2ZiX2Zvcm1hdHNbcnZdLnhyZXNzdGVwIC0gMTsKKwl2YXItPnhyZXNfdmlydHVhbCA9ICh2YXItPnhyZXNfdmlydHVhbCtzdGVwKSAmIH5zdGVwOworCisKKwkvKiBDaGVjayB3aGV0aGVyIGhhdmUgZW5vdWdoIG1lbW9yeSAqLworCW1lbSA9ICgodmFyLT5iaXRzX3Blcl9waXhlbCAqIHZhci0+eHJlc192aXJ0dWFsKSA+PiAzKSAqIHZhci0+eXJlc192aXJ0dWFsOworCWlmIChtZW0gPiBpbmZvLT5zY3JlZW5fc2l6ZSkKKwl7CisJCXByaW50ayhLRVJOX0VSUiAiZmIlZDogbm90IGVub3VnaCBmcmFtZWJ1ZmZlciBtZW1vcnkgKCVkIGtCIHJlcXVlc3RlZCAsICVkIGtCIGF2YWlsYWJsZSlcbiIsIGluZm8tPm5vZGUsIG1lbSA+PiAxMCwgKHVuc2lnbmVkIGludCkgKGluZm8tPnNjcmVlbl9zaXplID4+IDEwKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJ2ID0gc3ZnYV9jaGVja190aW1pbmdzICgmYXJrX3RpbWluZ19yZWdzLCB2YXIsIGluZm8tPm5vZGUpOworCWlmIChydiA8IDApCisJeworCQlwcmludGsoS0VSTl9FUlIgImZiJWQ6IGludmFsaWQgdGltaW5ncyByZXF1ZXN0ZWRcbiIsIGluZm8tPm5vZGUpOworCQlyZXR1cm4gcnY7CisJfQorCisJLyogSW50ZXJsYWNlZCBtb2RlIGlzIGJyb2tlbiAqLworCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyogU2V0IHZpZGVvIG1vZGUgZnJvbSBwYXIgKi8KKworc3RhdGljIGludCBhcmtmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBhcmtmYl9pbmZvICpwYXIgPSBpbmZvLT5wYXI7CisJdTMyIHZhbHVlLCBtb2RlLCBobXVsLCBoZGl2LCBvZmZzZXRfdmFsdWUsIHNjcmVlbl9zaXplOworCXUzMiBicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7CisJdTggcmVndmFsOworCisJaWYgKGJwcCAhPSAwKSB7CisJCWluZm8tPmZpeC55cGFuc3RlcCA9IDE7CisJCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IChpbmZvLT52YXIueHJlc192aXJ0dWFsICogYnBwKSAvIDg7CisKKwkJaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19NSVNDX1RJTEVCTElUVElORzsKKwkJaW5mby0+dGlsZW9wcyA9IE5VTEw7CisKKwkJLyogaW4gNGJwcCBzdXBwb3J0cyA4cCB3aWRlIHRpbGVzIG9ubHksIGFueSB0aWxlcyBvdGhlcndpc2UgKi8KKwkJaW5mby0+cGl4bWFwLmJsaXRfeCA9IChicHAgPT0gNCkgPyAoMSA8PCAoOCAtIDEpKSA6ICh+KHUzMikwKTsKKwkJaW5mby0+cGl4bWFwLmJsaXRfeSA9IH4odTMyKTA7CisKKwkJb2Zmc2V0X3ZhbHVlID0gKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKiBicHApIC8gNjQ7CisJCXNjcmVlbl9zaXplID0gaW5mby0+dmFyLnlyZXNfdmlydHVhbCAqIGluZm8tPmZpeC5saW5lX2xlbmd0aDsKKwl9IGVsc2UgeworCQlpbmZvLT5maXgueXBhbnN0ZXAgPSAxNjsKKwkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gMDsKKworCQlpbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19USUxFQkxJVFRJTkc7CisJCWluZm8tPnRpbGVvcHMgPSAmYXJrZmJfdGlsZV9vcHM7CisKKwkJLyogc3VwcG9ydHMgOHgxNiB0aWxlcyBvbmx5ICovCisJCWluZm8tPnBpeG1hcC5ibGl0X3ggPSAxIDw8ICg4IC0gMSk7CisJCWluZm8tPnBpeG1hcC5ibGl0X3kgPSAxIDw8ICgxNiAtIDEpOworCisJCW9mZnNldF92YWx1ZSA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWwgLyAxNjsKKwkJc2NyZWVuX3NpemUgPSAoaW5mby0+dmFyLnhyZXNfdmlydHVhbCAqIGluZm8tPnZhci55cmVzX3ZpcnR1YWwpIC8gNjQ7CisJfQorCisJaW5mby0+dmFyLnhvZmZzZXQgPSAwOworCWluZm8tPnZhci55b2Zmc2V0ID0gMDsKKwlpbmZvLT52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisKKwkvKiBVbmxvY2sgcmVnaXN0ZXJzICovCisJc3ZnYV93Y3J0X21hc2soMHgxMSwgMHgwMCwgMHg4MCk7CisKKwkvKiBCbGFuayBzY3JlZW4gYW5kIHR1cm4gb2ZmIHN5bmMgKi8KKwlzdmdhX3dzZXFfbWFzaygweDAxLCAweDIwLCAweDIwKTsKKwlzdmdhX3djcnRfbWFzaygweDE3LCAweDAwLCAweDgwKTsKKworCS8qIFNldCBkZWZhdWx0IHZhbHVlcyAqLworCXN2Z2Ffc2V0X2RlZmF1bHRfZ2Z4X3JlZ3MoKTsKKwlzdmdhX3NldF9kZWZhdWx0X2F0Y19yZWdzKCk7CisJc3ZnYV9zZXRfZGVmYXVsdF9zZXFfcmVncygpOworCXN2Z2Ffc2V0X2RlZmF1bHRfY3J0X3JlZ3MoKTsKKwlzdmdhX3djcnRfbXVsdGkoYXJrX2xpbmVfY29tcGFyZV9yZWdzLCAweEZGRkZGRkZGKTsKKwlzdmdhX3djcnRfbXVsdGkoYXJrX3N0YXJ0X2FkZHJlc3NfcmVncywgMCk7CisKKwkvKiBBUksgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KKwlzdmdhX3dzZXFfbWFzaygweDEwLCAweDFGLCAweDFGKTsgLyogZW5hYmxlIGxpbmVhciBmcmFtZWJ1ZmZlciBhbmQgZnVsbCBtZW1vcnkgYWNjZXNzICovCisJc3ZnYV93c2VxX21hc2soMHgxMiwgMHgwMywgMHgwMyk7IC8qIDQgTUIgbGluZWFyIGZyYW1lYnVmZmVyIHNpemUgKi8KKworCXZnYV93c2VxKE5VTEwsIDB4MTMsIGluZm8tPmZpeC5zbWVtX3N0YXJ0ID4+IDE2KTsKKwl2Z2Ffd3NlcShOVUxMLCAweDE0LCBpbmZvLT5maXguc21lbV9zdGFydCA+PiAyNCk7CisJdmdhX3dzZXEoTlVMTCwgMHgxNSwgMCk7CisJdmdhX3dzZXEoTlVMTCwgMHgxNiwgMCk7CisKKwkvKiBTZXQgdGhlIEZJRk8gdGhyZXNob2xkIHJlZ2lzdGVyICovCisJLyogSXQgaXMgZmFzY2luYXRpbmcgd2F5IHRvIHN0b3JlIDUtYml0IHZhbHVlIGluIDgtYml0IHJlZ2lzdGVyICovCisJcmVndmFsID0gMHgxMCB8ICgodGhyZXNob2xkICYgMHgwRSkgPj4gMSkgfCAodGhyZXNob2xkICYgMHgwMSkgPDwgNyB8ICh0aHJlc2hvbGQgJiAweDEwKSA8PCAxOworCXZnYV93c2VxKE5VTEwsIDB4MTgsIHJlZ3ZhbCk7CisKKwkvKiBTZXQgdGhlIG9mZnNldCByZWdpc3RlciAqLworCXByX2RlYnVnKCJmYiVkOiBvZmZzZXQgcmVnaXN0ZXIgICAgICAgOiAlZFxuIiwgaW5mby0+bm9kZSwgb2Zmc2V0X3ZhbHVlKTsKKwlzdmdhX3djcnRfbXVsdGkoYXJrX29mZnNldF9yZWdzLCBvZmZzZXRfdmFsdWUpOworCisJLyogZml4IGZvciBoaS1yZXMgdGV4dG1vZGUgKi8KKwlzdmdhX3djcnRfbWFzaygweDQwLCAweDA4LCAweDA4KTsKKworCWlmIChpbmZvLT52YXIudm1vZGUgJiBGQl9WTU9ERV9ET1VCTEUpCisJCXN2Z2Ffd2NydF9tYXNrKDB4MDksIDB4ODAsIDB4ODApOworCWVsc2UKKwkJc3ZnYV93Y3J0X21hc2soMHgwOSwgMHgwMCwgMHg4MCk7CisKKwlpZiAoaW5mby0+dmFyLnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkKKwkJc3ZnYV93Y3J0X21hc2soMHg0NCwgMHgwNCwgMHgwNCk7CisJZWxzZQorCQlzdmdhX3djcnRfbWFzaygweDQ0LCAweDAwLCAweDA0KTsKKworCWhtdWwgPSAxOworCWhkaXYgPSAxOworCW1vZGUgPSBzdmdhX21hdGNoX2Zvcm1hdChhcmtmYl9mb3JtYXRzLCAmKGluZm8tPnZhciksICYoaW5mby0+Zml4KSk7CisKKwkvKiBTZXQgbW9kZS1zcGVjaWZpYyByZWdpc3RlciB2YWx1ZXMgKi8KKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDA6CisJCXByX2RlYnVnKCJmYiVkOiB0ZXh0IG1vZGVcbiIsIGluZm8tPm5vZGUpOworCQlzdmdhX3NldF90ZXh0bW9kZV92Z2FfcmVncygpOworCisJCXZnYV93c2VxKE5VTEwsIDB4MTEsIDB4MTApOyAvKiBiYXNpYyBWR0EgbW9kZSAqLworCQlzdmdhX3djcnRfbWFzaygweDQ2LCAweDAwLCAweDA0KTsgLyogOGJpdCBwaXhlbCBwYXRoICovCisJCWRhY19zZXRfbW9kZShwYXItPmRhYywgREFDX1BTRVVETzhfOCk7CisKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwcl9kZWJ1ZygiZmIlZDogNCBiaXQgcHNldWRvY29sb3JcbiIsIGluZm8tPm5vZGUpOworCQl2Z2Ffd2dmeChOVUxMLCBWR0FfR0ZYX01PREUsIDB4NDApOworCisJCXZnYV93c2VxKE5VTEwsIDB4MTEsIDB4MTApOyAvKiBiYXNpYyBWR0EgbW9kZSAqLworCQlzdmdhX3djcnRfbWFzaygweDQ2LCAweDAwLCAweDA0KTsgLyogOGJpdCBwaXhlbCBwYXRoICovCisJCWRhY19zZXRfbW9kZShwYXItPmRhYywgREFDX1BTRVVETzhfOCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJfZGVidWcoImZiJWQ6IDQgYml0IHBzZXVkb2NvbG9yLCBwbGFuYXJcbiIsIGluZm8tPm5vZGUpOworCisJCXZnYV93c2VxKE5VTEwsIDB4MTEsIDB4MTApOyAvKiBiYXNpYyBWR0EgbW9kZSAqLworCQlzdmdhX3djcnRfbWFzaygweDQ2LCAweDAwLCAweDA0KTsgLyogOGJpdCBwaXhlbCBwYXRoICovCisJCWRhY19zZXRfbW9kZShwYXItPmRhYywgREFDX1BTRVVETzhfOCk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcHJfZGVidWcoImZiJWQ6IDggYml0IHBzZXVkb2NvbG9yXG4iLCBpbmZvLT5ub2RlKTsKKworCQl2Z2Ffd3NlcShOVUxMLCAweDExLCAweDE2KTsgLyogOGJwcCBhY2NlbCBtb2RlICovCisKKwkJaWYgKGluZm8tPnZhci5waXhjbG9jayA+IDIwMDAwKSB7CisJCQlwcl9kZWJ1ZygiZmIlZDogbm90IHVzaW5nIG11bHRpcGxleFxuIiwgaW5mby0+bm9kZSk7CisJCQlzdmdhX3djcnRfbWFzaygweDQ2LCAweDAwLCAweDA0KTsgLyogOGJpdCBwaXhlbCBwYXRoICovCisJCQlkYWNfc2V0X21vZGUocGFyLT5kYWMsIERBQ19QU0VVRE84XzgpOworCQl9IGVsc2UgeworCQkJcHJfZGVidWcoImZiJWQ6IHVzaW5nIG11bHRpcGxleFxuIiwgaW5mby0+bm9kZSk7CisJCQlzdmdhX3djcnRfbWFzaygweDQ2LCAweDA0LCAweDA0KTsgLyogMTZiaXQgcGl4ZWwgcGF0aCAqLworCQkJZGFjX3NldF9tb2RlKHBhci0+ZGFjLCBEQUNfUFNFVURPOF8xNik7CisJCQloZGl2ID0gMjsKKwkJfQorCQlicmVhazsKKwljYXNlIDQ6CisJCXByX2RlYnVnKCJmYiVkOiA1LzUvNSB0cnVlY29sb3JcbiIsIGluZm8tPm5vZGUpOworCisJCXZnYV93c2VxKE5VTEwsIDB4MTEsIDB4MUEpOyAvKiAxNmJwcCBhY2NlbCBtb2RlICovCisJCXN2Z2Ffd2NydF9tYXNrKDB4NDYsIDB4MDQsIDB4MDQpOyAvKiAxNmJpdCBwaXhlbCBwYXRoICovCisJCWRhY19zZXRfbW9kZShwYXItPmRhYywgREFDX1JHQjE1NTVfMTYpOworCQlicmVhazsKKwljYXNlIDU6CisJCXByX2RlYnVnKCJmYiVkOiA1LzYvNSB0cnVlY29sb3JcbiIsIGluZm8tPm5vZGUpOworCisJCXZnYV93c2VxKE5VTEwsIDB4MTEsIDB4MUEpOyAvKiAxNmJwcCBhY2NlbCBtb2RlICovCisJCXN2Z2Ffd2NydF9tYXNrKDB4NDYsIDB4MDQsIDB4MDQpOyAvKiAxNmJpdCBwaXhlbCBwYXRoICovCisJCWRhY19zZXRfbW9kZShwYXItPmRhYywgREFDX1JHQjA1NjVfMTYpOworCQlicmVhazsKKwljYXNlIDY6CisJCXByX2RlYnVnKCJmYiVkOiA4LzgvOCB0cnVlY29sb3JcbiIsIGluZm8tPm5vZGUpOworCisJCXZnYV93c2VxKE5VTEwsIDB4MTEsIDB4MTYpOyAvKiA4YnBwIGFjY2VsIG1vZGUgPz8/ICovCisJCXN2Z2Ffd2NydF9tYXNrKDB4NDYsIDB4MDQsIDB4MDQpOyAvKiAxNmJpdCBwaXhlbCBwYXRoICovCisJCWRhY19zZXRfbW9kZShwYXItPmRhYywgREFDX1JHQjA4ODhfMTYpOworCQlobXVsID0gMzsKKwkJaGRpdiA9IDI7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJcHJfZGVidWcoImZiJWQ6IDgvOC84LzggdHJ1ZWNvbG9yXG4iLCBpbmZvLT5ub2RlKTsKKworCQl2Z2Ffd3NlcShOVUxMLCAweDExLCAweDFFKTsgLyogMzJicHAgYWNjZWwgbW9kZSAqLworCQlzdmdhX3djcnRfbWFzaygweDQ2LCAweDA0LCAweDA0KTsgLyogMTZiaXQgcGl4ZWwgcGF0aCAqLworCQlkYWNfc2V0X21vZGUocGFyLT5kYWMsIERBQ19SR0I4ODg4XzE2KTsKKwkJaG11bCA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiZmIlZDogdW5zdXBwb3J0ZWQgbW9kZSAtIGJ1Z1xuIiwgaW5mby0+bm9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFya19zZXRfcGl4Y2xvY2soaW5mbywgKGhkaXYgKiBpbmZvLT52YXIucGl4Y2xvY2spIC8gaG11bCk7CisJc3ZnYV9zZXRfdGltaW5ncygmYXJrX3RpbWluZ19yZWdzLCAmKGluZm8tPnZhciksIGhtdWwsIGhkaXYsCisJCQkgKGluZm8tPnZhci52bW9kZSAmIEZCX1ZNT0RFX0RPVUJMRSkgICAgID8gMiA6IDEsCisJCQkgKGluZm8tPnZhci52bW9kZSAmIEZCX1ZNT0RFX0lOVEVSTEFDRUQpID8gMiA6IDEsCisJCQkgIGhtdWwsIGluZm8tPm5vZGUpOworCisJLyogU2V0IGludGVybGFjZWQgbW9kZSBzdGFydC9lbmQgcmVnaXN0ZXIgKi8KKwl2YWx1ZSA9IGluZm8tPnZhci54cmVzICsgaW5mby0+dmFyLmxlZnRfbWFyZ2luICsgaW5mby0+dmFyLnJpZ2h0X21hcmdpbiArIGluZm8tPnZhci5oc3luY19sZW47CisJdmFsdWUgPSAoKHZhbHVlICogaG11bCAvIGhkaXYpIC8gOCkgLSA1OworCXZnYV93Y3J0KE5VTEwsIDB4NDIsICh2YWx1ZSArIDEpIC8gMik7CisKKwltZW1zZXRfaW8oaW5mby0+c2NyZWVuX2Jhc2UsIDB4MDAsIHNjcmVlbl9zaXplKTsKKwkvKiBEZXZpY2UgYW5kIHNjcmVlbiBiYWNrIG9uICovCisJc3ZnYV93Y3J0X21hc2soMHgxNywgMHg4MCwgMHg4MCk7CisJc3ZnYV93c2VxX21hc2soMHgwMSwgMHgwMCwgMHgyMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogU2V0IGEgY29sb3VyIHJlZ2lzdGVyICovCisKK3N0YXRpYyBpbnQgYXJrZmJfc2V0Y29scmVnKHVfaW50IHJlZ25vLCB1X2ludCByZWQsIHVfaW50IGdyZWVuLCB1X2ludCBibHVlLAorCQkJCXVfaW50IHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmZiKQoreworCXN3aXRjaCAoZmItPnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMDoKKwljYXNlIDQ6CisJCWlmIChyZWdubyA+PSAxNikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICgoZmItPnZhci5iaXRzX3Blcl9waXhlbCA9PSA0KSAmJgorCQkgICAgKGZiLT52YXIubm9uc3RkID09IDApKSB7CisJCQlvdXRiKDB4RjAsIFZHQV9QRUxfTVNLKTsKKwkJCW91dGIocmVnbm8qMTYsIFZHQV9QRUxfSVcpOworCQl9IGVsc2UgeworCQkJb3V0YigweDBGLCBWR0FfUEVMX01TSyk7CisJCQlvdXRiKHJlZ25vLCBWR0FfUEVMX0lXKTsKKwkJfQorCQlvdXRiKHJlZCA+PiAxMCwgVkdBX1BFTF9EKTsKKwkJb3V0YihncmVlbiA+PiAxMCwgVkdBX1BFTF9EKTsKKwkJb3V0YihibHVlID4+IDEwLCBWR0FfUEVMX0QpOworCQlicmVhazsKKwljYXNlIDg6CisJCWlmIChyZWdubyA+PSAyNTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlvdXRiKDB4RkYsIFZHQV9QRUxfTVNLKTsKKwkJb3V0YihyZWdubywgVkdBX1BFTF9JVyk7CisJCW91dGIocmVkID4+IDEwLCBWR0FfUEVMX0QpOworCQlvdXRiKGdyZWVuID4+IDEwLCBWR0FfUEVMX0QpOworCQlvdXRiKGJsdWUgPj4gMTAsIFZHQV9QRUxfRCk7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCWlmIChyZWdubyA+PSAxNikKKwkJCXJldHVybiAwOworCisJCWlmIChmYi0+dmFyLmdyZWVuLmxlbmd0aCA9PSA1KQorCQkJKCh1MzIqKWZiLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0gKChyZWQgJiAweEY4MDApID4+IDEpIHwKKwkJCQkoKGdyZWVuICYgMHhGODAwKSA+PiA2KSB8ICgoYmx1ZSAmIDB4RjgwMCkgPj4gMTEpOworCQllbHNlIGlmIChmYi0+dmFyLmdyZWVuLmxlbmd0aCA9PSA2KQorCQkJKCh1MzIqKWZiLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0gKHJlZCAmIDB4RjgwMCkgfAorCQkJCSgoZ3JlZW4gJiAweEZDMDApID4+IDUpIHwgKChibHVlICYgMHhGODAwKSA+PiAxMSk7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIDI0OgorCWNhc2UgMzI6CisJCWlmIChyZWdubyA+PSAxNikKKwkJCXJldHVybiAwOworCisJCSgodTMyKilmYi0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9ICgocmVkICYgMHhGRjAwKSA8PCA4KSB8CisJCQkoZ3JlZW4gJiAweEZGMDApIHwgKChibHVlICYgMHhGRjAwKSA+PiA4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFNldCB0aGUgZGlzcGxheSBibGFua2luZyBzdGF0ZSAqLworCitzdGF0aWMgaW50IGFya2ZiX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzd2l0Y2ggKGJsYW5rX21vZGUpIHsKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCXByX2RlYnVnKCJmYiVkOiB1bmJsYW5rXG4iLCBpbmZvLT5ub2RlKTsKKwkJc3ZnYV93c2VxX21hc2soMHgwMSwgMHgwMCwgMHgyMCk7CisJCXN2Z2Ffd2NydF9tYXNrKDB4MTcsIDB4ODAsIDB4ODApOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX05PUk1BTDoKKwkJcHJfZGVidWcoImZiJWQ6IGJsYW5rXG4iLCBpbmZvLT5ub2RlKTsKKwkJc3ZnYV93c2VxX21hc2soMHgwMSwgMHgyMCwgMHgyMCk7CisJCXN2Z2Ffd2NydF9tYXNrKDB4MTcsIDB4ODAsIDB4ODApOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgorCQlwcl9kZWJ1ZygiZmIlZDogc3luYyBkb3duXG4iLCBpbmZvLT5ub2RlKTsKKwkJc3ZnYV93c2VxX21hc2soMHgwMSwgMHgyMCwgMHgyMCk7CisJCXN2Z2Ffd2NydF9tYXNrKDB4MTcsIDB4MDAsIDB4ODApOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyogUGFuIHRoZSBkaXNwbGF5ICovCisKK3N0YXRpYyBpbnQgYXJrZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCAqLworCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDApIHsKKwkJb2Zmc2V0ID0gKHZhci0+eW9mZnNldCAvIDE2KSAqICh2YXItPnhyZXNfdmlydHVhbCAvIDIpICsgKHZhci0+eG9mZnNldCAvIDIpOworCQlvZmZzZXQgPSBvZmZzZXQgPj4gMjsKKwl9IGVsc2UgeworCQlvZmZzZXQgPSAodmFyLT55b2Zmc2V0ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoKSArCisJCQkgKHZhci0+eG9mZnNldCAqIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4KTsKKwkJb2Zmc2V0ID0gb2Zmc2V0ID4+ICgodmFyLT5iaXRzX3Blcl9waXhlbCA9PSA0KSA/IDIgOiAzKTsKKwl9CisKKwkvKiBTZXQgdGhlIG9mZnNldCAqLworCXN2Z2Ffd2NydF9tdWx0aShhcmtfc3RhcnRfYWRkcmVzc19yZWdzLCBvZmZzZXQpOworCisJcmV0dXJuIDA7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qIEZyYW1lIGJ1ZmZlciBvcGVyYXRpb25zICovCisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIGFya2ZiX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmZiX29wZW4JPSBhcmtmYl9vcGVuLAorCS5mYl9yZWxlYXNlCT0gYXJrZmJfcmVsZWFzZSwKKwkuZmJfY2hlY2tfdmFyCT0gYXJrZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyCT0gYXJrZmJfc2V0X3BhciwKKwkuZmJfc2V0Y29scmVnCT0gYXJrZmJfc2V0Y29scmVnLAorCS5mYl9ibGFuawk9IGFya2ZiX2JsYW5rLAorCS5mYl9wYW5fZGlzcGxheQk9IGFya2ZiX3Bhbl9kaXNwbGF5LAorCS5mYl9maWxscmVjdAk9IGFya2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0CT0gYXJrZmJfaW1hZ2VibGl0LAorCS5mYl9nZXRfY2FwcyAgICA9IHN2Z2FfZ2V0X2NhcHMsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiBQQ0kgcHJvYmUgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGFya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCBhcmtmYl9pbmZvICpwYXI7CisJaW50IHJjOworCXU4IHJlZ3ZhbDsKKworCS8qIElnbm9yZSBzZWNvbmRhcnkgVkdBIGRldmljZSBiZWNhdXNlIHRoZXJlIGlzIG5vIFZHQSBhcmJpdHJhdGlvbiAqLworCWlmICghIHN2Z2FfcHJpbWFyeV9kZXZpY2UoZGV2KSkgeworCQlkZXZfaW5mbygmKGRldi0+ZGV2KSwgImlnbm9yaW5nIHNlY29uZGFyeSBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhbmQgZmlsbCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBhcmtmYl9pbmZvKSwgTlVMTCk7CisJaWYgKCEgaW5mbykgeworCQlkZXZfZXJyKCYoZGV2LT5kZXYpLCAiY2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBhciA9IGluZm8tPnBhcjsKKwltdXRleF9pbml0KCZwYXItPm9wZW5fbG9jayk7CisKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19QQVJUSUFMX1BBTl9PSyB8IEZCSU5GT19IV0FDQ0VMX1lQQU47CisJaW5mby0+ZmJvcHMgPSAmYXJrZmJfb3BzOworCisJLyogUHJlcGFyZSBQQ0kgZGV2aWNlICovCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChyYyA8IDApIHsKKwkJZGV2X2VycigmKGRldi0+ZGV2KSwgImNhbm5vdCBlbmFibGUgUENJIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2VuYWJsZV9kZXZpY2U7CisJfQorCisJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgImFya2ZiIik7CisJaWYgKHJjIDwgMCkgeworCQlkZXZfZXJyKCYoZGV2LT5kZXYpLCAiY2Fubm90IHJlc2VydmUgZnJhbWVidWZmZXIgcmVnaW9uXG4iKTsKKwkJZ290byBlcnJfcmVxdWVzdF9yZWdpb25zOworCX0KKworCXBhci0+ZGFjID0gaWNzNTM0Ml9pbml0KGFya19kYWNfcmVhZF9yZWdzLCBhcmtfZGFjX3dyaXRlX3JlZ3MsIGluZm8pOworCWlmICghIHBhci0+ZGFjKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZGV2X2VycigmKGRldi0+ZGV2KSwgIlJBTURBQyBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9kYWM7CisJfQorCisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwlpbmZvLT5maXguc21lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCk7CisKKwkvKiBNYXAgcGh5c2ljYWwgSU8gbWVtb3J5IGFkZHJlc3MgaW50byBrZXJuZWwgc3BhY2UgKi8KKwlpbmZvLT5zY3JlZW5fYmFzZSA9IHBjaV9pb21hcChkZXYsIDAsIDApOworCWlmICghIGluZm8tPnNjcmVlbl9iYXNlKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZGV2X2VycigmKGRldi0+ZGV2KSwgImlvbWFwIGZvciBmcmFtZWJ1ZmZlciBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9pb21hcDsKKwl9CisKKwkvKiBGSVhNRSBnZXQgbWVtc2l6ZSAqLworCXJlZ3ZhbCA9IHZnYV9yc2VxKE5VTEwsIDB4MTApOworCWluZm8tPnNjcmVlbl9zaXplID0gKDEgPDwgKHJlZ3ZhbCA+PiA2KSkgPDwgMjA7CisJaW5mby0+Zml4LnNtZW1fbGVuID0gaW5mby0+c2NyZWVuX3NpemU7CisKKwlzdHJjcHkoaW5mby0+Zml4LmlkLCAiQVJLIDIwMDBQViIpOworCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gMDsKKwlpbmZvLT5maXgubW1pb19sZW4gPSAwOworCWluZm8tPmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7CisJaW5mby0+Zml4LnlwYW5zdGVwID0gMDsKKwlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9OT05FOworCWluZm8tPnBzZXVkb19wYWxldHRlID0gKHZvaWQqKSAocGFyLT5wc2V1ZG9fcGFsZXR0ZSk7CisKKwkvKiBQcmVwYXJlIHN0YXJ0dXAgbW9kZSAqLworCXJjID0gZmJfZmluZF9tb2RlKCYoaW5mby0+dmFyKSwgaW5mbywgbW9kZSwgTlVMTCwgMCwgTlVMTCwgOCk7CisJaWYgKCEgKChyYyA9PSAxKSB8fCAocmMgPT0gMikpKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZGV2X2VycigmKGRldi0+ZGV2KSwgIm1vZGUgJXMgbm90IGZvdW5kXG4iLCBtb2RlKTsKKwkJZ290byBlcnJfZmluZF9tb2RlOworCX0KKworCXJjID0gZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKTsKKwlpZiAocmMgPCAwKSB7CisJCWRldl9lcnIoJihkZXYtPmRldiksICJjYW5ub3QgYWxsb2NhdGUgY29sb3JtYXBcbiIpOworCQlnb3RvIGVycl9hbGxvY19jbWFwOworCX0KKworCXJjID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJaWYgKHJjIDwgMCkgeworCQlkZXZfZXJyKCYoZGV2LT5kZXYpLCAiY2Fubm90IHJlZ2lzdGVyIGZyYW1lYnVnZ2VyXG4iKTsKKwkJZ290byBlcnJfcmVnX2ZiOworCX0KKworCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIG9uICVzLCAlZCBNQiBSQU1cbiIsIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwKKwkJIHBjaV9uYW1lKGRldiksIGluZm8tPmZpeC5zbWVtX2xlbiA+PiAyMCk7CisKKwkvKiBSZWNvcmQgYSByZWZlcmVuY2UgdG8gdGhlIGRyaXZlciBkYXRhICovCisJcGNpX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisKKyNpZmRlZiBDT05GSUdfTVRSUgorCWlmIChtdHJyKSB7CisJCXBhci0+bXRycl9yZWcgPSAtMTsKKwkJcGFyLT5tdHJyX3JlZyA9IG10cnJfYWRkKGluZm8tPmZpeC5zbWVtX3N0YXJ0LCBpbmZvLT5maXguc21lbV9sZW4sIE1UUlJfVFlQRV9XUkNPTUIsIDEpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7CisKKwkvKiBFcnJvciBoYW5kbGluZyAqLworZXJyX3JlZ19mYjoKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworZXJyX2FsbG9jX2NtYXA6CitlcnJfZmluZF9tb2RlOgorCXBjaV9pb3VubWFwKGRldiwgaW5mby0+c2NyZWVuX2Jhc2UpOworZXJyX2lvbWFwOgorCWRhY19yZWxlYXNlKHBhci0+ZGFjKTsKK2Vycl9kYWM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworZXJyX3JlcXVlc3RfcmVnaW9uczoKKy8qCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOyAqLworZXJyX2VuYWJsZV9kZXZpY2U6CisJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIFBDSSByZW1vdmUgKi8KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGFya19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpbmZvKSB7CisJCXN0cnVjdCBhcmtmYl9pbmZvICpwYXIgPSBpbmZvLT5wYXI7CisKKyNpZmRlZiBDT05GSUdfTVRSUgorCQlpZiAocGFyLT5tdHJyX3JlZyA+PSAwKSB7CisJCQltdHJyX2RlbChwYXItPm10cnJfcmVnLCAwLCAwKTsKKwkJCXBhci0+bXRycl9yZWcgPSAtMTsKKwkJfQorI2VuZGlmCisKKwkJZGFjX3JlbGVhc2UocGFyLT5kYWMpOworCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCisJCXBjaV9pb3VubWFwKGRldiwgaW5mby0+c2NyZWVuX2Jhc2UpOworCQlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CisvKgkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7ICovCisKKwkJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJfQorfQorCisKKyNpZmRlZiBDT05GSUdfUE0KKy8qIFBDSSBzdXNwZW5kICovCisKK3N0YXRpYyBpbnQgYXJrX3BjaV9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXJrZmJfaW5mbyAqcGFyID0gaW5mby0+cGFyOworCisJZGV2X2luZm8oJihkZXYtPmRldiksICJzdXNwZW5kXG4iKTsKKworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwltdXRleF9sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKKworCWlmICgoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB8fCAocGFyLT5yZWZfY291bnQgPT0gMCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKKwkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKKworCXBjaV9zYXZlX3N0YXRlKGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBzdGF0ZSkpOworCisJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKKwlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKiBQQ0kgcmVzdW1lICovCisKK3N0YXRpYyBpbnQgYXJrX3BjaV9yZXN1bWUgKHN0cnVjdCBwY2lfZGV2KiBkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXJrZmJfaW5mbyAqcGFyID0gaW5mby0+cGFyOworCisJZGV2X2luZm8oJihkZXYtPmRldiksICJyZXN1bWVcbiIpOworCisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOworCisJaWYgKHBhci0+cmVmX2NvdW50ID09IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKKwkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikpCisJCWdvdG8gZmFpbDsKKworCXBjaV9zZXRfbWFzdGVyKGRldik7CisKKwlhcmtmYl9zZXRfcGFyKGluZm8pOworCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOworCisJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKK2ZhaWw6CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYXJrX3BjaV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgYXJrX3BjaV9yZXN1bWUgTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCisvKiBMaXN0IG9mIGJvYXJkcyB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gc3VwcG9ydCAqLworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXJrX2RldmljZXNbXSBfX2RldmluaXRkYXRhID0geworCXtQQ0lfREVWSUNFKDB4RUREOCwgMHhBMDk5KX0sCisJezAsIDAsIDAsIDAsIDAsIDAsIDB9Cit9OworCisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhcmtfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhcmtmYl9wY2lfZHJpdmVyID0geworCS5uYW1lCQk9ICJhcmtmYiIsCisJLmlkX3RhYmxlCT0gYXJrX2RldmljZXMsCisJLnByb2JlCQk9IGFya19wY2lfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhcmtfcGNpX3JlbW92ZSksCisJLnN1c3BlbmQJPSBhcmtfcGNpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhcmtfcGNpX3Jlc3VtZSwKK307CisKKy8qIENsZWFudXAgKi8KKworc3RhdGljIHZvaWQgX19leGl0IGFya2ZiX2NsZWFudXAodm9pZCkKK3sKKwlwcl9kZWJ1ZygiYXJrZmI6IGNsZWFuaW5nIHVwXG4iKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFya2ZiX3BjaV9kcml2ZXIpOworfQorCisvKiBEcml2ZXIgSW5pdGlhbGlzYXRpb24gKi8KKworc3RhdGljIGludCBfX2luaXQgYXJrZmJfaW5pdCh2b2lkKQoreworCisjaWZuZGVmIE1PRFVMRQorCWNoYXIgKm9wdGlvbiA9IE5VTEw7CisKKwlpZiAoZmJfZ2V0X29wdGlvbnMoImFya2ZiIiwgJm9wdGlvbikpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG9wdGlvbiAmJiAqb3B0aW9uKQorCQltb2RlID0gb3B0aW9uOworI2VuZGlmCisKKwlwcl9kZWJ1ZygiYXJrZmI6IGluaXRpYWxpemluZ1xuIik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFya2ZiX3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhcmtmYl9pbml0KTsKK21vZHVsZV9leGl0KGFya2ZiX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZDViZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKQEAgLTAsMCArMSw3NTIgQEAKKy8qCisgKiAgRHJpdmVyIGZvciBBVDkxL0FUMzIgTENEIENvbnRyb2xsZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KKworI2RlZmluZSBsY2RjX3JlYWRsKHNpbmZvLCByZWcpCQlfX3Jhd19yZWFkbCgoc2luZm8pLT5tbWlvKyhyZWcpKQorI2RlZmluZSBsY2RjX3dyaXRlbChzaW5mbywgcmVnLCB2YWwpCV9fcmF3X3dyaXRlbCgodmFsKSwgKHNpbmZvKS0+bW1pbysocmVnKSkKKworLyogY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgQVRNRUxfTENEQ19DVkFMX0RFRkFVTFQJCTB4YzgKKyNkZWZpbmUgQVRNRUxfTENEQ19ETUFfQlVSU1RfTEVOCTgKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMpCisjZGVmaW5lIEFUTUVMX0xDRENfRklGT19TSVpFCQkyMDQ4CisjZWxzZQorI2RlZmluZSBBVE1FTF9MQ0RDX0ZJRk9fU0laRQkJNTEyCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MSkKKyNkZWZpbmUJQVRNRUxfTENERkJfRkJJTkZPX0RFRkFVTFQJRkJJTkZPX0RFRkFVTFQKKworc3RhdGljIGlubGluZSB2b2lkIGF0bWVsX2xjZGZiX3VwZGF0ZV9kbWEyZChzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyAqc2luZm8sCisJCQkJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCit9CisjZWxpZiBkZWZpbmVkKENPTkZJR19BVlIzMikKKyNkZWZpbmUJQVRNRUxfTENERkJfRkJJTkZPX0RFRkFVTFQJKEZCSU5GT19ERUZBVUxUIFwKKwkJCQkJfCBGQklORk9fUEFSVElBTF9QQU5fT0sgXAorCQkJCQl8IEZCSU5GT19IV0FDQ0VMX1hQQU4gXAorCQkJCQl8IEZCSU5GT19IV0FDQ0VMX1lQQU4pCisKK3N0YXRpYyB2b2lkIGF0bWVsX2xjZGZiX3VwZGF0ZV9kbWEyZChzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyAqc2luZm8sCisJCQkJICAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwl1MzIgZG1hMmRjZmc7CisJdTMyIHBpeGVsb2ZmOworCisJcGl4ZWxvZmYgPSAodmFyLT54b2Zmc2V0ICogdmFyLT5iaXRzX3Blcl9waXhlbCkgJiAweDFmOworCisJZG1hMmRjZmcgPSAoKHZhci0+eHJlc192aXJ0dWFsIC0gdmFyLT54cmVzKSAqIHZhci0+Yml0c19wZXJfcGl4ZWwpIC8gODsKKwlkbWEyZGNmZyB8PSBwaXhlbG9mZiA8PCBBVE1FTF9MQ0RDX1BJWEVMT0ZGX09GRlNFVDsKKwlsY2RjX3dyaXRlbChzaW5mbywgQVRNRUxfTENEQ19ETUEyRENGRywgZG1hMmRjZmcpOworCisJLyogVXBkYXRlIGNvbmZpZ3VyYXRpb24gKi8KKwlsY2RjX3dyaXRlbChzaW5mbywgQVRNRUxfTENEQ19ETUFDT04sCisJCSAgICBsY2RjX3JlYWRsKHNpbmZvLCBBVE1FTF9MQ0RDX0RNQUNPTikKKwkJICAgIHwgQVRNRUxfTENEQ19ETUFVUERUKTsKK30KKyNlbmRpZgorCisKK3N0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gYXRtZWxfbGNkZmJfZml4IF9faW5pdGRhdGEgPSB7CisJLnR5cGUJCT0gRkJfVFlQRV9QQUNLRURfUElYRUxTLAorCS52aXN1YWwJCT0gRkJfVklTVUFMX1RSVUVDT0xPUiwKKwkueHBhbnN0ZXAJPSAwLAorCS55cGFuc3RlcAk9IDAsCisJLnl3cmFwc3RlcAk9IDAsCisJLmFjY2VsCQk9IEZCX0FDQ0VMX05PTkUsCit9OworCisKK3N0YXRpYyB2b2lkIGF0bWVsX2xjZGZiX3VwZGF0ZV9kbWEoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCit7CisJc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gKnNpbmZvID0gaW5mby0+cGFyOworCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4ID0gJmluZm8tPmZpeDsKKwl1bnNpZ25lZCBsb25nIGRtYV9hZGRyOworCisJZG1hX2FkZHIgPSAoZml4LT5zbWVtX3N0YXJ0ICsgdmFyLT55b2Zmc2V0ICogZml4LT5saW5lX2xlbmd0aAorCQkgICAgKyB2YXItPnhvZmZzZXQgKiB2YXItPmJpdHNfcGVyX3BpeGVsIC8gOCk7CisKKwlkbWFfYWRkciAmPSB+M1VMOworCisJLyogU2V0IGZyYW1lYnVmZmVyIERNQSBiYXNlIGFkZHJlc3MgYW5kIHBpeGVsIG9mZnNldCAqLworCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX0RNQUJBRERSMSwgZG1hX2FkZHIpOworCisJYXRtZWxfbGNkZmJfdXBkYXRlX2RtYTJkKHNpbmZvLCB2YXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRtZWxfbGNkZmJfZnJlZV92aWRlb19tZW1vcnkoc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gKnNpbmZvKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gc2luZm8tPmluZm87CisKKwlkbWFfZnJlZV93cml0ZWNvbWJpbmUoaW5mby0+ZGV2aWNlLCBpbmZvLT5maXguc21lbV9sZW4sCisJCQkJaW5mby0+c2NyZWVuX2Jhc2UsIGluZm8tPmZpeC5zbWVtX3N0YXJ0KTsKK30KKworLyoqCisgKglhdG1lbF9sY2RmYl9hbGxvY192aWRlb19tZW1vcnkgLSBBbGxvY2F0ZSBmcmFtZWJ1ZmZlciBtZW1vcnkKKyAqCUBzaW5mbzogdGhlIGZyYW1lIGJ1ZmZlciB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yCisgKi8KK3N0YXRpYyBpbnQgYXRtZWxfbGNkZmJfYWxsb2NfdmlkZW9fbWVtb3J5KHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvICpzaW5mbykKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHNpbmZvLT5pbmZvOworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKKworCWluZm8tPmZpeC5zbWVtX2xlbiA9ICh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+eXJlc192aXJ0dWFsCisJCQkgICAgKiAoKHZhci0+Yml0c19wZXJfcGl4ZWwgKyA3KSAvIDgpKTsKKworCWluZm8tPnNjcmVlbl9iYXNlID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZShpbmZvLT5kZXZpY2UsIGluZm8tPmZpeC5zbWVtX2xlbiwKKwkJCQkJKGRtYV9hZGRyX3QgKikmaW5mby0+Zml4LnNtZW1fc3RhcnQsIEdGUF9LRVJORUwpOworCisJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgICAgIGF0bWVsX2xjZGZiX2NoZWNrX3ZhciAtIFZhbGlkYXRlcyBhIHZhciBwYXNzZWQgaW4uCisgKiAgICAgIEB2YXI6IGZyYW1lIGJ1ZmZlciB2YXJpYWJsZSBzY3JlZW4gc3RydWN0dXJlCisgKiAgICAgIEBpbmZvOiBmcmFtZSBidWZmZXIgc3RydWN0dXJlIHRoYXQgcmVwcmVzZW50cyBhIHNpbmdsZSBmcmFtZSBidWZmZXIKKyAqCisgKglDaGVja3MgdG8gc2VlIGlmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyB0aGUgc3RhdGUgcmVxdWVzdGVkIGJ5CisgKgl2YXIgcGFzc2VkIGluLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFsdGVyIHRoZSBoYXJkd2FyZQorICoJc3RhdGUhISEgIFRoaXMgbWVhbnMgdGhlIGRhdGEgc3RvcmVkIGluIHN0cnVjdCBmYl9pbmZvIGFuZAorICoJc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gZG8gbm90IGNoYW5nZS4gVGhpcyBpbmNsdWRlcyB0aGUgdmFyCisgKglpbnNpZGUgb2Ygc3RydWN0IGZiX2luZm8uICBEbyBOT1QgY2hhbmdlIHRoZXNlLiBUaGlzIGZ1bmN0aW9uCisgKgljYW4gYmUgY2FsbGVkIG9uIGl0cyBvd24gaWYgd2UgaW50ZW50IHRvIG9ubHkgdGVzdCBhIG1vZGUgYW5kCisgKglub3QgYWN0dWFsbHkgc2V0IGl0LiBUaGUgc3R1ZmYgaW4gbW9kZWRiLmMgaXMgYSBleGFtcGxlIG9mCisgKgl0aGlzLiBJZiB0aGUgdmFyIHBhc3NlZCBpbiBpcyBzbGlnaHRseSBvZmYgYnkgd2hhdCB0aGUKKyAqCWhhcmR3YXJlIGNhbiBzdXBwb3J0IHRoZW4gd2UgYWx0ZXIgdGhlIHZhciBQQVNTRUQgaW4gdG8gd2hhdAorICoJd2UgY2FuIGRvLiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IG1vZGUgY2hhbmdlIGEKKyAqCS1FSU5WQUwgd2lsbCBiZSByZXR1cm5lZCBieSB0aGUgdXBwZXIgbGF5ZXJzLiBZb3UgZG9uJ3QgbmVlZAorICoJdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdGhlbi4gSWYgeW91IGhhcmR3YXJlIGRvZXNuJ3QKKyAqCXN1cHBvcnQgY2hhbmdpbmcgdGhlIHJlc29sdXRpb24gdGhlbiB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICoJbmVlZGVkLiBJbiB0aGlzIGNhc2UgdGhlIGRyaXZlciB3b3VsZCBqdXN0IHByb3ZpZGUgYSB2YXIgdGhhdAorICoJcmVwcmVzZW50cyB0aGUgc3RhdGljIHN0YXRlIHRoZSBzY3JlZW4gaXMgaW4uCisgKgorICoJUmV0dXJucyBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvciwgb3IgemVybyBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IGF0bWVsX2xjZGZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaW5mby0+ZGV2aWNlOworCXN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvICpzaW5mbyA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBsb25nIGNsa192YWx1ZV9raHo7CisKKwljbGtfdmFsdWVfa2h6ID0gY2xrX2dldF9yYXRlKHNpbmZvLT5sY2RjX2NsaykgLyAxMDAwOworCisJZGV2X2RiZyhkZXYsICIlczpcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKGRldiwgIiAgcmVzb2x1dGlvbjogJXV4JXVcbiIsIHZhci0+eHJlcywgdmFyLT55cmVzKTsKKwlkZXZfZGJnKGRldiwgIiAgcGl4Y2xrOiAgICAgJWx1IEtIelxuIiwgUElDT1MyS0haKHZhci0+cGl4Y2xvY2spKTsKKwlkZXZfZGJnKGRldiwgIiAgYnBwOiAgICAgICAgJXVcbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOworCWRldl9kYmcoZGV2LCAiICBjbGs6ICAgICAgICAlbHUgS0h6XG4iLCBjbGtfdmFsdWVfa2h6KTsKKworCWlmICgoUElDT1MyS0haKHZhci0+cGl4Y2xvY2spICogdmFyLT5iaXRzX3Blcl9waXhlbCAvIDgpID4gY2xrX3ZhbHVlX2toeikgeworCQlkZXZfZXJyKGRldiwgIiVsdSBLSHogcGl4ZWwgY2xvY2sgaXMgdG9vIGZhc3RcbiIsIFBJQ09TMktIWih2YXItPnBpeGNsb2NrKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZvcmNlIHNhbWUgYWxpZ25tZW50IGZvciBlYWNoIGxpbmUgKi8KKwl2YXItPnhyZXMgPSAodmFyLT54cmVzICsgMykgJiB+M1VMOworCXZhci0+eHJlc192aXJ0dWFsID0gKHZhci0+eHJlc192aXJ0dWFsICsgMykgJiB+M1VMOworCisJdmFyLT5yZWQubXNiX3JpZ2h0ID0gdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSB2YXItPmJsdWUubXNiX3JpZ2h0ID0gMDsKKwl2YXItPnRyYW5zcC5tc2JfcmlnaHQgPSAwOworCXZhci0+dHJhbnNwLm9mZnNldCA9IHZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisJdmFyLT54b2Zmc2V0ID0gdmFyLT55b2Zmc2V0ID0gMDsKKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMjoKKwljYXNlIDQ6CisJY2FzZSA4OgorCQl2YXItPnJlZC5vZmZzZXQgPSB2YXItPmdyZWVuLm9mZnNldCA9IHZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSB2YXItPmdyZWVuLmxlbmd0aCA9IHZhci0+Ymx1ZS5sZW5ndGgKKwkJCT0gdmFyLT5iaXRzX3Blcl9waXhlbDsKKwkJYnJlYWs7CisJY2FzZSAxNToKKwljYXNlIDE2OgorCQl2YXItPnJlZC5vZmZzZXQgPSAwOworCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAxMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gdmFyLT5ncmVlbi5sZW5ndGggPSB2YXItPmJsdWUubGVuZ3RoID0gNTsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwljYXNlIDMyOgorCQl2YXItPnJlZC5vZmZzZXQgPSAwOworCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAxNjsKKwkJdmFyLT5yZWQubGVuZ3RoID0gdmFyLT5ncmVlbi5sZW5ndGggPSB2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJjb2xvciBkZXB0aCAlZCBub3Qgc3VwcG9ydGVkXG4iLAorCQkJCQl2YXItPmJpdHNfcGVyX3BpeGVsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogICAgICBhdG1lbF9sY2RmYl9zZXRfcGFyIC0gQWx0ZXJzIHRoZSBoYXJkd2FyZSBzdGF0ZS4KKyAqICAgICAgQGluZm86IGZyYW1lIGJ1ZmZlciBzdHJ1Y3R1cmUgdGhhdCByZXByZXNlbnRzIGEgc2luZ2xlIGZyYW1lIGJ1ZmZlcgorICoKKyAqCVVzaW5nIHRoZSBmYl92YXJfc2NyZWVuaW5mbyBpbiBmYl9pbmZvIHdlIHNldCB0aGUgcmVzb2x1dGlvbgorICoJb2YgdGhlIHRoaXMgcGFydGljdWxhciBmcmFtZWJ1ZmZlci4gVGhpcyBmdW5jdGlvbiBhbHRlcnMgdGhlCisgKglwYXIgQU5EIHRoZSBmYl9maXhfc2NyZWVuaW5mbyBzdG9yZWQgaW4gZmJfaW5mby4gSXQgZG9lc24ndAorICoJbm90IGFsdGVyIHZhciBpbiBmYl9pbmZvIHNpbmNlIHdlIGFyZSB1c2luZyB0aGF0IGRhdGEuIFRoaXMKKyAqCW1lYW5zIHdlIGRlcGVuZCBvbiB0aGUgZGF0YSBpbiB2YXIgaW5zaWRlIGZiX2luZm8gdG8gYmUKKyAqCXN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUuICBhdG1lbF9sY2RmYl9jaGVja192YXIgaXMgYWx3YXlzIGNhbGxlZAorICoJYmVmb3JlIGF0bWVsX2xjZGZiX3NldF9wYXIgdG8gZW5zdXJlIHRoaXMuICBBZ2FpbiBpZiB5b3UgY2FuJ3QKKyAqCWNoYW5nZSB0aGUgcmVzb2x1dGlvbiB5b3UgZG9uJ3QgbmVlZCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqLworc3RhdGljIGludCBhdG1lbF9sY2RmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvICpzaW5mbyA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgY2xrX3ZhbHVlX2toejsKKworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiJXM6XG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIgICogcmVzb2x1dGlvbjogJXV4JXUgKCV1eCV1IHZpcnR1YWwpXG4iLAorCQkgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzLAorCQkgaW5mby0+dmFyLnhyZXNfdmlydHVhbCwgaW5mby0+dmFyLnlyZXNfdmlydHVhbCk7CisKKwkvKiBUdXJuIG9mZiB0aGUgTENEIGNvbnRyb2xsZXIgYW5kIHRoZSBETUEgY29udHJvbGxlciAqLworCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX1BXUkNPTiwgc2luZm8tPmd1YXJkX3RpbWUgPDwgQVRNRUxfTENEQ19HVUFSRFRfT0ZGU0VUKTsKKworCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX0RNQUNPTiwgMCk7CisKKwlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIDw9IDgpCisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7CisJZWxzZQorCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKworCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIC8gOCk7CisKKwkvKiBSZS1pbml0aWFsaXplIHRoZSBETUEgZW5naW5lLi4uICovCisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIgICogdXBkYXRlIERNQSBlbmdpbmVcbiIpOworCWF0bWVsX2xjZGZiX3VwZGF0ZV9kbWEoaW5mbywgJmluZm8tPnZhcik7CisKKwkvKiAuLi5zZXQgZnJhbWUgc2l6ZSBhbmQgYnVyc3QgbGVuZ3RoID0gOCB3b3JkcyAoPykgKi8KKwl2YWx1ZSA9IChpbmZvLT52YXIueXJlcyAqIGluZm8tPnZhci54cmVzICogaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSAvIDMyOworCXZhbHVlIHw9ICgoQVRNRUxfTENEQ19ETUFfQlVSU1RfTEVOIC0gMSkgPDwgQVRNRUxfTENEQ19CTEVOR1RIX09GRlNFVCk7CisJbGNkY193cml0ZWwoc2luZm8sIEFUTUVMX0xDRENfRE1BRlJNQ0ZHLCB2YWx1ZSk7CisKKwkvKiBOb3csIHRoZSBMQ0RDIGNvcmUuLi4gKi8KKworCS8qIFNldCBwaXhlbCBjbG9jayAqLworCWNsa192YWx1ZV9raHogPSBjbGtfZ2V0X3JhdGUoc2luZm8tPmxjZGNfY2xrKSAvIDEwMDA7CisKKwl2YWx1ZSA9IGNsa192YWx1ZV9raHogLyBQSUNPUzJLSFooaW5mby0+dmFyLnBpeGNsb2NrKTsKKworCWlmIChjbGtfdmFsdWVfa2h6ICUgUElDT1MyS0haKGluZm8tPnZhci5waXhjbG9jaykpCisJCXZhbHVlKys7CisKKwl2YWx1ZSA9ICh2YWx1ZSAvIDIpIC0gMTsKKworCWlmICh2YWx1ZSA8PSAwKSB7CisJCWRldl9ub3RpY2UoaW5mby0+ZGV2aWNlLCAiQnlwYXNzaW5nIHBpeGVsIGNsb2NrIGRpdmlkZXJcbiIpOworCQlsY2RjX3dyaXRlbChzaW5mbywgQVRNRUxfTENEQ19MQ0RDT04xLCBBVE1FTF9MQ0RDX0JZUEFTUyk7CisJfSBlbHNlCisJCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX0xDRENPTjEsIHZhbHVlIDw8IEFUTUVMX0xDRENfQ0xLVkFMX09GRlNFVCk7CisKKwkvKiBJbml0aWFsaXplIGNvbnRyb2wgcmVnaXN0ZXIgMiAqLworCXZhbHVlID0gc2luZm8tPmRlZmF1bHRfbGNkY29uMjsKKworCWlmICghKGluZm8tPnZhci5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpKQorCQl2YWx1ZSB8PSBBVE1FTF9MQ0RDX0lOVkxJTkVfSU5WRVJURUQ7CisJaWYgKCEoaW5mby0+dmFyLnN5bmMgJiBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QpKQorCQl2YWx1ZSB8PSBBVE1FTF9MQ0RDX0lOVkZSQU1FX0lOVkVSVEVEOworCisJc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwkJY2FzZSAxOgl2YWx1ZSB8PSBBVE1FTF9MQ0RDX1BJWEVMU0laRV8xOyBicmVhazsKKwkJY2FzZSAyOiB2YWx1ZSB8PSBBVE1FTF9MQ0RDX1BJWEVMU0laRV8yOyBicmVhazsKKwkJY2FzZSA0OiB2YWx1ZSB8PSBBVE1FTF9MQ0RDX1BJWEVMU0laRV80OyBicmVhazsKKwkJY2FzZSA4OiB2YWx1ZSB8PSBBVE1FTF9MQ0RDX1BJWEVMU0laRV84OyBicmVhazsKKwkJY2FzZSAxNTogLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgMTY6IHZhbHVlIHw9IEFUTUVMX0xDRENfUElYRUxTSVpFXzE2OyBicmVhazsKKwkJY2FzZSAyNDogdmFsdWUgfD0gQVRNRUxfTENEQ19QSVhFTFNJWkVfMjQ7IGJyZWFrOworCQljYXNlIDMyOiB2YWx1ZSB8PSBBVE1FTF9MQ0RDX1BJWEVMU0laRV8zMjsgYnJlYWs7CisJCWRlZmF1bHQ6IEJVRygpOyBicmVhazsKKwl9CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIgICogTENEQ09OMiA9ICUwOGx4XG4iLCB2YWx1ZSk7CisJbGNkY193cml0ZWwoc2luZm8sIEFUTUVMX0xDRENfTENEQ09OMiwgdmFsdWUpOworCisJLyogVmVydGljYWwgdGltaW5nICovCisJdmFsdWUgPSAoaW5mby0+dmFyLnZzeW5jX2xlbiAtIDEpIDw8IEFUTUVMX0xDRENfVlBXX09GRlNFVDsKKwl2YWx1ZSB8PSBpbmZvLT52YXIudXBwZXJfbWFyZ2luIDw8IEFUTUVMX0xDRENfVkJQX09GRlNFVDsKKwl2YWx1ZSB8PSBpbmZvLT52YXIubG93ZXJfbWFyZ2luOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiICAqIExDRFRJTTEgPSAlMDhseFxuIiwgdmFsdWUpOworCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX1RJTTEsIHZhbHVlKTsKKworCS8qIEhvcml6b250YWwgdGltaW5nICovCisJdmFsdWUgPSAoaW5mby0+dmFyLnJpZ2h0X21hcmdpbiAtIDEpIDw8IEFUTUVMX0xDRENfSEZQX09GRlNFVDsKKwl2YWx1ZSB8PSAoaW5mby0+dmFyLmhzeW5jX2xlbiAtIDEpIDw8IEFUTUVMX0xDRENfSFBXX09GRlNFVDsKKwl2YWx1ZSB8PSAoaW5mby0+dmFyLmxlZnRfbWFyZ2luIC0gMSk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIgICogTENEVElNMiA9ICUwOGx4XG4iLCB2YWx1ZSk7CisJbGNkY193cml0ZWwoc2luZm8sIEFUTUVMX0xDRENfVElNMiwgdmFsdWUpOworCisJLyogRGlzcGxheSBzaXplICovCisJdmFsdWUgPSAoaW5mby0+dmFyLnhyZXMgLSAxKSA8PCBBVE1FTF9MQ0RDX0hPWlZBTF9PRkZTRVQ7CisJdmFsdWUgfD0gaW5mby0+dmFyLnlyZXMgLSAxOworCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX0xDREZSTUNGRywgdmFsdWUpOworCisJLyogRklGTyBUaHJlc2hvbGQ6IFVzZSBmb3JtdWxhIGZyb20gZGF0YSBzaGVldCAqLworCXZhbHVlID0gQVRNRUxfTENEQ19GSUZPX1NJWkUgLSAoMiAqIEFUTUVMX0xDRENfRE1BX0JVUlNUX0xFTiArIDMpOworCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX0ZJRk8sIHZhbHVlKTsKKworCS8qIFRvZ2dsZSBMQ0RfTU9ERSBldmVyeSBmcmFtZSAqLworCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX01WQUwsIDApOworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX0lEUiwgfjBVTCk7CisKKwkvKiBTZXQgY29udHJhc3QgKi8KKwl2YWx1ZSA9IEFUTUVMX0xDRENfUFNfRElWOCB8IEFUTUVMX0xDRENfUE9MX1BPU0lUSVZFIHwgQVRNRUxfTENEQ19FTkFfUFdNRU5BQkxFOworCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX0NPTlRSQVNUX0NUUiwgdmFsdWUpOworCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX0NPTlRSQVNUX1ZBTCwgQVRNRUxfTENEQ19DVkFMX0RFRkFVTFQpOworCS8qIC4uLndhaXQgZm9yIERNQSBlbmdpbmUgdG8gYmVjb21lIGlkbGUuLi4gKi8KKwl3aGlsZSAobGNkY19yZWFkbChzaW5mbywgQVRNRUxfTENEQ19ETUFDT04pICYgQVRNRUxfTENEQ19ETUFCVVNZKQorCQltc2xlZXAoMTApOworCisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIgICogcmUtZW5hYmxlIERNQSBlbmdpbmVcbiIpOworCS8qIC4uLmFuZCBlbmFibGUgaXQgd2l0aCB1cGRhdGVkIGNvbmZpZ3VyYXRpb24gKi8KKwlsY2RjX3dyaXRlbChzaW5mbywgQVRNRUxfTENEQ19ETUFDT04sIHNpbmZvLT5kZWZhdWx0X2RtYWNvbik7CisKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIiAgKiByZS1lbmFibGUgTENEQyBjb3JlXG4iKTsKKwlsY2RjX3dyaXRlbChzaW5mbywgQVRNRUxfTENEQ19QV1JDT04sCisJCShzaW5mby0+Z3VhcmRfdGltZSA8PCBBVE1FTF9MQ0RDX0dVQVJEVF9PRkZTRVQpIHwgQVRNRUxfTENEQ19QV1IpOworCisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIgICogRE9ORVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2hhbl90b19maWVsZCh1bnNpZ25lZCBpbnQgY2hhbiwgY29uc3Qgc3RydWN0IGZiX2JpdGZpZWxkICpiZikKK3sKKwljaGFuICY9IDB4ZmZmZjsKKwljaGFuID4+PSAxNiAtIGJmLT5sZW5ndGg7CisJcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKK30KKworLyoqCisgKiAgCWF0bWVsX2xjZGZiX3NldGNvbHJlZyAtIE9wdGlvbmFsIGZ1bmN0aW9uLiBTZXRzIGEgY29sb3IgcmVnaXN0ZXIuCisgKiAgICAgIEByZWdubzogV2hpY2ggcmVnaXN0ZXIgaW4gdGhlIENMVVQgd2UgYXJlIHByb2dyYW1taW5nCisgKiAgICAgIEByZWQ6IFRoZSByZWQgdmFsdWUgd2hpY2ggY2FuIGJlIHVwIHRvIDE2IGJpdHMgd2lkZQorICoJQGdyZWVuOiBUaGUgZ3JlZW4gdmFsdWUgd2hpY2ggY2FuIGJlIHVwIHRvIDE2IGJpdHMgd2lkZQorICoJQGJsdWU6ICBUaGUgYmx1ZSB2YWx1ZSB3aGljaCBjYW4gYmUgdXAgdG8gMTYgYml0cyB3aWRlLgorICoJQHRyYW5zcDogSWYgc3VwcG9ydGVkIHRoZSBhbHBoYSB2YWx1ZSB3aGljaCBjYW4gYmUgdXAgdG8gMTYgYml0cyB3aWRlLgorICogICAgICBAaW5mbzogZnJhbWUgYnVmZmVyIGluZm8gc3RydWN0dXJlCisgKgorICogIAlTZXQgYSBzaW5nbGUgY29sb3IgcmVnaXN0ZXIuIFRoZSB2YWx1ZXMgc3VwcGxpZWQgaGF2ZSBhIDE2IGJpdAorICogIAltYWduaXR1ZGUgd2hpY2ggbmVlZHMgdG8gYmUgc2NhbGVkIGluIHRoaXMgZnVuY3Rpb24gZm9yIHRoZSBoYXJkd2FyZS4KKyAqCVRoaW5ncyB0byB0YWtlIGludG8gY29uc2lkZXJhdGlvbiBhcmUgaG93IG1hbnkgY29sb3IgcmVnaXN0ZXJzLCBpZgorICoJYW55LCBhcmUgc3VwcG9ydGVkIHdpdGggdGhlIGN1cnJlbnQgY29sb3IgdmlzdWFsLiBXaXRoIHRydWVjb2xvciBtb2RlCisgKglubyBjb2xvciBwYWxldHRlcyBhcmUgc3VwcG9ydGVkLiBIZXJlIGEgcHN1ZWRvIHBhbGV0dGUgaXMgY3JlYXRlZAorICoJd2hpY2ggd2Ugc3RvcmUgdGhlIHZhbHVlIGluIHBzZXVkb19wYWxldHRlIGluIHN0cnVjdCBmYl9pbmZvLiBGb3IKKyAqCXBzZXVkb2NvbG9yIG1vZGUgd2UgaGF2ZSBhIGxpbWl0ZWQgY29sb3IgcGFsZXR0ZS4gVG8gZGVhbCB3aXRoIHRoaXMKKyAqCXdlIGNhbiBwcm9ncmFtIHdoYXQgY29sb3IgaXMgZGlzcGxheWVkIGZvciBhIHBhcnRpY3VsYXIgcGl4ZWwgdmFsdWUuCisgKglEaXJlY3RDb2xvciBpcyBzaW1pbGFyIGluIHRoYXQgd2UgY2FuIHByb2dyYW0gZWFjaCBjb2xvciBmaWVsZC4gSWYKKyAqCXdlIGhhdmUgYSBzdGF0aWMgY29sb3JtYXAgd2UgZG9uJ3QgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKglSZXR1cm5zIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLCBvciB6ZXJvIG9uIHN1Y2Nlc3MuIEluIGFuCisgKglpZGVhbCB3b3JsZCwgdGhpcyB3b3VsZCBoYXZlIGJlZW4gdGhlIGNhc2UsIGJ1dCBhcyBpdCB0dXJucworICoJb3V0LCB0aGUgb3RoZXIgZHJpdmVycyByZXR1cm4gMSBvbiBmYWlsdXJlLCBzbyB0aGF0J3Mgd2hhdAorICoJd2UncmUgZ29pbmcgdG8gZG8uCisgKi8KK3N0YXRpYyBpbnQgYXRtZWxfbGNkZmJfc2V0Y29scmVnKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gKnNpbmZvID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGludCB2YWw7CisJdTMyICpwYWw7CisJaW50IHJldCA9IDE7CisKKwlpZiAoaW5mby0+dmFyLmdyYXlzY2FsZSkKKwkJcmVkID0gZ3JlZW4gPSBibHVlID0gKDE5NTk1ICogcmVkICsgMzg0NzAgKiBncmVlbgorCQkJCSAgICAgICsgNzQ3MSAqIGJsdWUpID4+IDE2OworCisJc3dpdGNoIChpbmZvLT5maXgudmlzdWFsKSB7CisJY2FzZSBGQl9WSVNVQUxfVFJVRUNPTE9SOgorCQlpZiAocmVnbm8gPCAxNikgeworCQkJcGFsID0gaW5mby0+cHNldWRvX3BhbGV0dGU7CisKKwkJCXZhbCAgPSBjaGFuX3RvX2ZpZWxkKHJlZCwgJmluZm8tPnZhci5yZWQpOworCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoZ3JlZW4sICZpbmZvLT52YXIuZ3JlZW4pOworCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoYmx1ZSwgJmluZm8tPnZhci5ibHVlKTsKKworCQkJcGFsW3JlZ25vXSA9IHZhbDsKKwkJCXJldCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKKwkJaWYgKHJlZ25vIDwgMjU2KSB7CisJCQl2YWwgID0gKChyZWQgICA+PiAxMSkgJiAweDAwMWYpOworCQkJdmFsIHw9ICgoZ3JlZW4gPj4gIDYpICYgMHgwM2UwKTsKKwkJCXZhbCB8PSAoKGJsdWUgID4+ICAxKSAmIDB4N2MwMCk7CisKKwkJCS8qCisJCQkgKiBUT0RPOiBpbnRlbnNpdHkgYml0LiBNYXliZSBzb21ldGhpbmcgbGlrZQorCQkJICogICB+KHJlZFsxMF0gXiBncmVlblsxMF0gXiBibHVlWzEwXSkgJiAxCisJCQkgKi8KKworCQkJbGNkY193cml0ZWwoc2luZm8sIEFUTUVMX0xDRENfTFVUKHJlZ25vKSwgdmFsKTsKKwkJCXJldCA9IDA7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdG1lbF9sY2RmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlhdG1lbF9sY2RmYl91cGRhdGVfZG1hKGluZm8sIHZhcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgYXRtZWxfbGNkZmJfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyCT0gYXRtZWxfbGNkZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyCT0gYXRtZWxfbGNkZmJfc2V0X3BhciwKKwkuZmJfc2V0Y29scmVnCT0gYXRtZWxfbGNkZmJfc2V0Y29scmVnLAorCS5mYl9wYW5fZGlzcGxheQk9IGF0bWVsX2xjZGZiX3Bhbl9kaXNwbGF5LAorCS5mYl9maWxscmVjdAk9IGNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBjZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgYXRtZWxfbGNkZmJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9pZDsKKwlzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyAqc2luZm8gPSBpbmZvLT5wYXI7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IGxjZGNfcmVhZGwoc2luZm8sIEFUTUVMX0xDRENfSVNSKTsKKwlsY2RjX3dyaXRlbChzaW5mbywgQVRNRUxfTENEQ19JRFIsIHN0YXR1cyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhdG1lbF9sY2RmYl9pbml0X2ZiaW5mbyhzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyAqc2luZm8pCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBzaW5mby0+aW5mbzsKKwlpbnQgcmV0ID0gMDsKKworCW1lbXNldF9pbyhpbmZvLT5zY3JlZW5fYmFzZSwgMCwgaW5mby0+Zml4LnNtZW1fbGVuKTsKKwlpbmZvLT52YXIuYWN0aXZhdGUgfD0gRkJfQUNUSVZBVEVfRk9SQ0UgfCBGQl9BQ1RJVkFURV9OT1c7CisKKwlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsCisJICAgICAgICIlbHVLaUIgZnJhbWUgYnVmZmVyIGF0ICUwOGx4IChtYXBwZWQgYXQgJXApXG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZylpbmZvLT5maXguc21lbV9sZW4gLyAxMDI0LAorCSAgICAgICAodW5zaWduZWQgbG9uZylpbmZvLT5maXguc21lbV9zdGFydCwKKwkgICAgICAgaW5mby0+c2NyZWVuX2Jhc2UpOworCisJLyogQWxsb2NhdGUgY29sb3JtYXAgKi8KKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGluZm8tPmRldmljZSwgIkFsbG9jIGNvbG9yIG1hcCBmYWlsZWRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfbGNkZmJfc3RhcnRfY2xvY2soc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gKnNpbmZvKQoreworCWlmIChzaW5mby0+YnVzX2NsaykKKwkJY2xrX2VuYWJsZShzaW5mby0+YnVzX2Nsayk7CisJY2xrX2VuYWJsZShzaW5mby0+bGNkY19jbGspOworfQorCitzdGF0aWMgdm9pZCBhdG1lbF9sY2RmYl9zdG9wX2Nsb2NrKHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvICpzaW5mbykKK3sKKwlpZiAoc2luZm8tPmJ1c19jbGspCisJCWNsa19kaXNhYmxlKHNpbmZvLT5idXNfY2xrKTsKKwljbGtfZGlzYWJsZShzaW5mby0+bGNkY19jbGspOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGF0bWVsX2xjZGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyAqc2luZm87CisJc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gKnBkYXRhX3NpbmZvOworCXN0cnVjdCByZXNvdXJjZSAqcmVncyA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICptYXAgPSBOVUxMOworCWludCByZXQ7CisKKwlkZXZfZGJnKGRldiwgIiVzIEJFR0lOXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXQgPSAtRU5PTUVNOworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGF0bWVsX2xjZGZiX2luZm8pLCBkZXYpOworCWlmICghaW5mbykgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlzaW5mbyA9IGluZm8tPnBhcjsKKworCWlmIChkZXYtPnBsYXRmb3JtX2RhdGEpIHsKKwkJcGRhdGFfc2luZm8gPSAoc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gKilkZXYtPnBsYXRmb3JtX2RhdGE7CisJCXNpbmZvLT5kZWZhdWx0X2JwcCA9IHBkYXRhX3NpbmZvLT5kZWZhdWx0X2JwcDsKKwkJc2luZm8tPmRlZmF1bHRfZG1hY29uID0gcGRhdGFfc2luZm8tPmRlZmF1bHRfZG1hY29uOworCQlzaW5mby0+ZGVmYXVsdF9sY2Rjb24yID0gcGRhdGFfc2luZm8tPmRlZmF1bHRfbGNkY29uMjsKKwkJc2luZm8tPmRlZmF1bHRfbW9uc3BlY3MgPSBwZGF0YV9zaW5mby0+ZGVmYXVsdF9tb25zcGVjczsKKwkJc2luZm8tPmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wgPSBwZGF0YV9zaW5mby0+YXRtZWxfbGNkZmJfcG93ZXJfY29udHJvbDsKKwkJc2luZm8tPmd1YXJkX3RpbWUgPSBwZGF0YV9zaW5mby0+Z3VhcmRfdGltZTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4iKTsKKwkJZ290byBmcmVlX2luZm87CisJfQorCXNpbmZvLT5pbmZvID0gaW5mbzsKKwlzaW5mby0+cGRldiA9IHBkZXY7CisKKwlzdHJjcHkoaW5mby0+Zml4LmlkLCBzaW5mby0+cGRldi0+bmFtZSk7CisJaW5mby0+ZmxhZ3MgPSBBVE1FTF9MQ0RGQl9GQklORk9fREVGQVVMVDsKKwlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHNpbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKKwlpbmZvLT5mYm9wcyA9ICZhdG1lbF9sY2RmYl9vcHM7CisKKwltZW1jcHkoJmluZm8tPm1vbnNwZWNzLCBzaW5mby0+ZGVmYXVsdF9tb25zcGVjcywgc2l6ZW9mKGluZm8tPm1vbnNwZWNzKSk7CisJaW5mby0+Zml4ID0gYXRtZWxfbGNkZmJfZml4OworCisJLyogRW5hYmxlIExDREMgQ2xvY2tzICovCisJaWYgKGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8IGNwdV9pc19hdDMyYXA3MDAwKCkpIHsKKwkJc2luZm8tPmJ1c19jbGsgPSBjbGtfZ2V0KGRldiwgImhjazEiKTsKKwkJaWYgKElTX0VSUihzaW5mby0+YnVzX2NsaykpIHsKKwkJCXJldCA9IFBUUl9FUlIoc2luZm8tPmJ1c19jbGspOworCQkJZ290byBmcmVlX2luZm87CisJCX0KKwl9CisJc2luZm8tPmxjZGNfY2xrID0gY2xrX2dldChkZXYsICJsY2RjX2NsayIpOworCWlmIChJU19FUlIoc2luZm8tPmxjZGNfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKHNpbmZvLT5sY2RjX2Nsayk7CisJCWdvdG8gcHV0X2J1c19jbGs7CisJfQorCWF0bWVsX2xjZGZiX3N0YXJ0X2Nsb2NrKHNpbmZvKTsKKworCXJldCA9IGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBOVUxMLCBpbmZvLT5tb25zcGVjcy5tb2RlZGIsCisJCQlpbmZvLT5tb25zcGVjcy5tb2RlZGJfbGVuLCBpbmZvLT5tb25zcGVjcy5tb2RlZGIsCisJCQlzaW5mby0+ZGVmYXVsdF9icHApOworCWlmICghcmV0KSB7CisJCWRldl9lcnIoZGV2LCAibm8gc3VpdGFibGUgdmlkZW8gbW9kZSBmb3VuZFxuIik7CisJCWdvdG8gc3RvcF9jbGs7CisJfQorCisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlZ3MpIHsKKwkJZGV2X2VycihkZXYsICJyZXNvdXJjZXMgdW51c2FibGVcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gc3RvcF9jbGs7CisJfQorCisJc2luZm8tPmlycV9iYXNlID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoc2luZm8tPmlycV9iYXNlIDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBnZXQgaXJxXG4iKTsKKwkJcmV0ID0gc2luZm8tPmlycV9iYXNlOworCQlnb3RvIHN0b3BfY2xrOworCX0KKworCS8qIEluaXRpYWxpemUgdmlkZW8gbWVtb3J5ICovCisJbWFwID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlpZiAobWFwKSB7CisJCS8qIHVzZSBhIHByZS1hbGxvY2F0ZWQgbWVtb3J5IGJ1ZmZlciAqLworCQlpbmZvLT5maXguc21lbV9zdGFydCA9IG1hcC0+c3RhcnQ7CisJCWluZm8tPmZpeC5zbWVtX2xlbiA9IG1hcC0+ZW5kIC0gbWFwLT5zdGFydCArIDE7CisJCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGluZm8tPmZpeC5zbWVtX3N0YXJ0LAorCQkJCQlpbmZvLT5maXguc21lbV9sZW4sIHBkZXYtPm5hbWUpKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIHN0b3BfY2xrOworCQl9CisKKwkJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwKGluZm8tPmZpeC5zbWVtX3N0YXJ0LCBpbmZvLT5maXguc21lbV9sZW4pOworCQlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKQorCQkJZ290byByZWxlYXNlX2ludG1lbTsKKwl9IGVsc2UgeworCQkvKiBhbG9jYXRlIG1lbW9yeSBidWZmZXIgKi8KKwkJcmV0ID0gYXRtZWxfbGNkZmJfYWxsb2NfdmlkZW9fbWVtb3J5KHNpbmZvKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiY2Fubm90IGFsbG9jYXRlIGZyYW1lYnVmZmVyOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gc3RvcF9jbGs7CisJCX0KKwl9CisKKwkvKiBMQ0RDIHJlZ2lzdGVycyAqLworCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gcmVncy0+c3RhcnQ7CisJaW5mby0+Zml4Lm1taW9fbGVuID0gcmVncy0+ZW5kIC0gcmVncy0+c3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW5mby0+Zml4Lm1taW9fc3RhcnQsCisJCQkJaW5mby0+Zml4Lm1taW9fbGVuLCBwZGV2LT5uYW1lKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZnJlZV9mYjsKKwl9CisKKwlzaW5mby0+bW1pbyA9IGlvcmVtYXAoaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CisJaWYgKCFzaW5mby0+bW1pbykgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBtYXAgTENEQyByZWdpc3RlcnNcbiIpOworCQlnb3RvIHJlbGVhc2VfbWVtOworCX0KKworCS8qIGludGVycnVwdCAqLworCXJldCA9IHJlcXVlc3RfaXJxKHNpbmZvLT5pcnFfYmFzZSwgYXRtZWxfbGNkZmJfaW50ZXJydXB0LCAwLCBwZGV2LT5uYW1lLCBpbmZvKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byB1bm1hcF9tbWlvOworCX0KKworCXJldCA9IGF0bWVsX2xjZGZiX2luaXRfZmJpbmZvKHNpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImluaXQgZmJpbmZvIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gdW5yZWdpc3Rlcl9pcnFzOworCX0KKworCS8qCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb3VyIGNvbG91ciBiaXRmaWVsZAorCSAqIGRlc2NyaXB0b3JzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGlzZWQuCisJICovCisJYXRtZWxfbGNkZmJfY2hlY2tfdmFyKCZpbmZvLT52YXIsIGluZm8pOworCisJcmV0ID0gZmJfc2V0X3ZhcihpbmZvLCAmaW5mby0+dmFyKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKGRldiwgInVuYWJsZSB0byBzZXQgZGlzcGxheSBwYXJhbWV0ZXJzXG4iKTsKKwkJZ290byBmcmVlX2NtYXA7CisJfQorCisJZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisKKwkvKgorCSAqIFRlbGwgdGhlIHdvcmxkIHRoYXQgd2UncmUgcmVhZHkgdG8gZ28KKwkgKi8KKwlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBmcmFtZWJ1ZmZlciBkZXZpY2U6ICVkXG4iLCByZXQpOworCQlnb3RvIGZyZWVfY21hcDsKKwl9CisKKwkvKiBQb3dlciB1cCB0aGUgTENEQyBzY3JlZW4gKi8KKwlpZiAoc2luZm8tPmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wpCisJCXNpbmZvLT5hdG1lbF9sY2RmYl9wb3dlcl9jb250cm9sKDEpOworCisJZGV2X2luZm8oZGV2LCAiZmIlZDogQXRtZWwgTENEQyBhdCAweCUwOGx4IChtYXBwZWQgYXQgJXApLCBpcnEgJWx1XG4iLAorCQkgICAgICAgaW5mby0+bm9kZSwgaW5mby0+Zml4Lm1taW9fc3RhcnQsIHNpbmZvLT5tbWlvLCBzaW5mby0+aXJxX2Jhc2UpOworCisJcmV0dXJuIDA7CisKKworZnJlZV9jbWFwOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7Cit1bnJlZ2lzdGVyX2lycXM6CisJZnJlZV9pcnEoc2luZm8tPmlycV9iYXNlLCBpbmZvKTsKK3VubWFwX21taW86CisJaW91bm1hcChzaW5mby0+bW1pbyk7CityZWxlYXNlX21lbToKKyAJcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOworZnJlZV9mYjoKKwlpZiAobWFwKQorCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKKwllbHNlCisJCWF0bWVsX2xjZGZiX2ZyZWVfdmlkZW9fbWVtb3J5KHNpbmZvKTsKKworcmVsZWFzZV9pbnRtZW06CisJaWYgKG1hcCkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmZpeC5zbWVtX3N0YXJ0LCBpbmZvLT5maXguc21lbV9sZW4pOworc3RvcF9jbGs6CisJYXRtZWxfbGNkZmJfc3RvcF9jbG9jayhzaW5mbyk7CisJY2xrX3B1dChzaW5mby0+bGNkY19jbGspOworcHV0X2J1c19jbGs6CisJaWYgKHNpbmZvLT5idXNfY2xrKQorCQljbGtfcHV0KHNpbmZvLT5idXNfY2xrKTsKK2ZyZWVfaW5mbzoKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworb3V0OgorCWRldl9kYmcoZGV2LCAiJXMgRkFJTEVEXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2V4aXQgYXRtZWxfbGNkZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvICpzaW5mbyA9IGluZm8tPnBhcjsKKworCWlmICghc2luZm8pCisJCXJldHVybiAwOworCisJaWYgKHNpbmZvLT5hdG1lbF9sY2RmYl9wb3dlcl9jb250cm9sKQorCQlzaW5mby0+YXRtZWxfbGNkZmJfcG93ZXJfY29udHJvbCgwKTsKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCWF0bWVsX2xjZGZiX3N0b3BfY2xvY2soc2luZm8pOworCWNsa19wdXQoc2luZm8tPmxjZGNfY2xrKTsKKwlpZiAoc2luZm8tPmJ1c19jbGspCisJCWNsa19wdXQoc2luZm8tPmJ1c19jbGspOworCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisJZnJlZV9pcnEoc2luZm8tPmlycV9iYXNlLCBpbmZvKTsKKwlpb3VubWFwKHNpbmZvLT5tbWlvKTsKKyAJcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOworCWlmIChwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpKSB7CisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOworCQlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+Zml4LnNtZW1fc3RhcnQsIGluZm8tPmZpeC5zbWVtX2xlbik7CisJfSBlbHNlIHsKKwkJYXRtZWxfbGNkZmJfZnJlZV92aWRlb19tZW1vcnkoc2luZm8pOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtZWxfbGNkZmJfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19leGl0X3AoYXRtZWxfbGNkZmJfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYXRtZWxfbGNkZmIiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXRtZWxfbGNkZmJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmF0bWVsX2xjZGZiX2RyaXZlciwgYXRtZWxfbGNkZmJfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRtZWxfbGNkZmJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1lbF9sY2RmYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhdG1lbF9sY2RmYl9pbml0KTsKK21vZHVsZV9leGl0KGF0bWVsX2xjZGZiX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFUOTEvQVQzMiBMQ0QgQ29udHJvbGxlciBmcmFtZWJ1ZmZlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk5pY29sYXMgRmVycmUgPG5pY29sYXMuZmVycmVAcmZvLmF0bWVsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0aV9pZHMuaCBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0aV9pZHMuaAppbmRleCAzOWFiNDgzLi45MGU3ZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdGlfaWRzLmgKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXRpX2lkcy5oCkBAIC0yMDksNCArMjA5LDQgQEAKICNkZWZpbmUgUENJX0NISVBfUjQyM181RDU3ICAgICAgICAgICAgICAweDVENTcKICNkZWZpbmUgUENJX0NISVBfUlMzNTBfNzgzNCAgICAgICAgICAgICAweDc4MzQKICNkZWZpbmUgUENJX0NISVBfUlMzNTBfNzgzNSAgICAgICAgICAgICAweDc4MzUKLQorI2RlZmluZSBQQ0lfQ0hJUF9SUzQ4MF81OTU1ICAgICAgICAgICAgIDB4NTk1NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKaW5kZXggZTg2ZDdlMC4uN2ZlYTRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCkBAIC0yMTY1LDE4ICsyMTY1LDI5IEBACiBzdGF0aWMgaW50IGF0eTEyOGZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmZiKQogewogCXN0cnVjdCBhdHkxMjhmYl9wYXIgKnBhciA9IGZiLT5wYXI7Ci0JdTggc3RhdGUgPSAwOworCXU4IHN0YXRlOwogCiAJaWYgKHBhci0+bG9ja19ibGFuayB8fCBwYXItPmFzbGVlcCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoYmxhbmsgJiBGQl9CTEFOS19WU1lOQ19TVVNQRU5EKQotCQlzdGF0ZSB8PSAyOwotCWlmIChibGFuayAmIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQpCi0JCXN0YXRlIHw9IDE7Ci0JaWYgKGJsYW5rICYgRkJfQkxBTktfUE9XRVJET1dOKQotCQlzdGF0ZSB8PSA0OwotCisJc3dpdGNoIChibGFuaykgeworCWNhc2UgRkJfQkxBTktfTk9STUFMOgorCQlzdGF0ZSA9IDQ7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKKwkJc3RhdGUgPSA2OworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJCXN0YXRlID0gNTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CisJCXN0YXRlID0gNzsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19VTkJMQU5LOgorCWRlZmF1bHQ6CisJCXN0YXRlID0gMDsKKwkJYnJlYWs7CisJfQogCWF0eV9zdF84KENSVENfRVhUX0NOVEwrMSwgc3RhdGUpOwogCiAJaWYgKHBhci0+Y2hpcF9nZW4gPT0gcmFnZV9NMykgewpAQCAtMjQzMCw3ICsyNDQxLDcgQEAKIAl3YWl0X2Zvcl9pZGxlKHBhcik7CiAKIAkvKiBCbGFuayBkaXNwbGF5IGFuZCBMQ0QgKi8KLQlhdHkxMjhmYl9ibGFuayhWRVNBX1BPV0VSRE9XTiwgaW5mbyk7CisJYXR5MTI4ZmJfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOLCBpbmZvKTsKIAogCS8qIFNsZWVwICovCiAJcGFyLT5hc2xlZXAgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IDg1MTRmMmEuLjhkMzQ1NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTgwLDggKzgwLDkgQEAKICNpbmNsdWRlICIuLi9tYWNtb2Rlcy5oIgogI2VuZGlmCiAjaWZkZWYgX19zcGFyY19fCi0jaW5jbHVkZSA8YXNtL3BibS5oPgogI2luY2x1ZGUgPGFzbS9mYmlvLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FEQl9QTVUKQEAgLTIyOTcsMjAgKzIyOTgsNiBAQAogCQlwYXItPnBsbF9saW1pdHMueGNsayA9IDUzOwogCX0KICNlbmRpZgotCWlmIChwbGwpCi0JCXBhci0+cGxsX2xpbWl0cy5wbGxfbWF4ID0gcGxsOwotCWlmIChtY2xrKQotCQlwYXItPnBsbF9saW1pdHMubWNsayA9IG1jbGs7Ci0JaWYgKHhjbGspCi0JCXBhci0+cGxsX2xpbWl0cy54Y2xrID0geGNsazsKLQotCWF0eV9jYWxjX21lbV9yZWZyZXNoKHBhciwgcGFyLT5wbGxfbGltaXRzLnhjbGspOwotCXBhci0+cGxsX3BlciA9IDEwMDAwMDAvcGFyLT5wbGxfbGltaXRzLnBsbF9tYXg7Ci0JcGFyLT5tY2xrX3BlciA9IDEwMDAwMDAvcGFyLT5wbGxfbGltaXRzLm1jbGs7Ci0JcGFyLT54Y2xrX3BlciA9IDEwMDAwMDAvcGFyLT5wbGxfbGltaXRzLnhjbGs7Ci0KLQlwYXItPnJlZl9jbGtfcGVyID0gMTAwMDAwMDAwMDAwMFVMTCAvIDE0MzE4MTgwOwotCXh0YWwgPSAiMTQuMzE4MTgiOwogCiAjaWZkZWYgQ09ORklHX0ZCX0FUWV9HWAogCWlmICghTTY0X0hBUyhJTlRFR1JBVEVEKSkgewpAQCAtMjMzOCw2ICsyMzI1LDcgQEAKIAkJY2FzZSBEQUNfSUJNUkdCNTE0OgogCQkJcGFyLT5kYWNfb3BzID0gJmF0eV9kYWNfaWJtNTE0OwogCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0FUQVJJCiAJCWNhc2UgREFDX0FUSTY4ODYwX0I6CiAJCWNhc2UgREFDX0FUSTY4ODYwX0M6CiAJCQlwYXItPmRhY19vcHMgPSAmYXR5X2RhY19hdGk2ODg2MGI7CkBAIC0yMzQ2LDYgKzIzMzQsNyBAQAogCQljYXNlIERBQ19BVFQyMUM0OTg6CiAJCQlwYXItPmRhY19vcHMgPSAmYXR5X2RhY19hdHQyMWM0OTg7CiAJCQlicmVhazsKKyNlbmRpZgogCQlkZWZhdWx0OgogCQkJUFJJTlRLSSgiYXR5X2luaXQ6IERBQyB0eXBlIG5vdCBpbXBsZW1lbnRlZCB5ZXQhXG4iKTsKIAkJCXBhci0+ZGFjX29wcyA9ICZhdHlfZGFjX3Vuc3VwcG9ydGVkOwpAQCAtMjM4OSw4ICsyMzc4LDI5IEBACiAJCS8qIGZvciBtYW55IGNoaXBzLCB0aGUgbWNsayBpcyA2NyBNSHogZm9yIFNEUkFNLCA2MyBNSHogb3RoZXJ3aXNlICovCiAJCWlmIChwYXItPnBsbF9saW1pdHMubWNsayA9PSA2NyAmJiBwYXItPnJhbV90eXBlIDwgU0RSQU0pCiAJCQlwYXItPnBsbF9saW1pdHMubWNsayA9IDYzOworCQkvKiBNb2JpbGl0eSArIDMyYml0IG1lbW9yeSBpbnRlcmZhY2UgbmVlZCBoYWx2ZWQgWENMSy4gKi8KKwkJaWYgKE02NF9IQVMoTU9CSUxfQlVTKSAmJiBwYXItPnJhbV90eXBlID09IFNEUkFNMzIpCisJCQlwYXItPnBsbF9saW1pdHMueGNsayA9IChwYXItPnBsbF9saW1pdHMueGNsayArIDEpID4+IDE7CiAJfQorI2VuZGlmCiAKKwkvKiBBbGxvdyBjb21tYW5kIGxpbmUgdG8gb3ZlcnJpZGUgY2xvY2tzLiAqLworCWlmIChwbGwpCisJCXBhci0+cGxsX2xpbWl0cy5wbGxfbWF4ID0gcGxsOworCWlmIChtY2xrKQorCQlwYXItPnBsbF9saW1pdHMubWNsayA9IG1jbGs7CisJaWYgKHhjbGspCisJCXBhci0+cGxsX2xpbWl0cy54Y2xrID0geGNsazsKKworCWF0eV9jYWxjX21lbV9yZWZyZXNoKHBhciwgcGFyLT5wbGxfbGltaXRzLnhjbGspOworCXBhci0+cGxsX3BlciA9IDEwMDAwMDAvcGFyLT5wbGxfbGltaXRzLnBsbF9tYXg7CisJcGFyLT5tY2xrX3BlciA9IDEwMDAwMDAvcGFyLT5wbGxfbGltaXRzLm1jbGs7CisJcGFyLT54Y2xrX3BlciA9IDEwMDAwMDAvcGFyLT5wbGxfbGltaXRzLnhjbGs7CisKKwlwYXItPnJlZl9jbGtfcGVyID0gMTAwMDAwMDAwMDAwMFVMTCAvIDE0MzE4MTgwOworCXh0YWwgPSAiMTQuMzE4MTgiOworCisjaWZkZWYgQ09ORklHX0ZCX0FUWV9DVAogCWlmIChNNjRfSEFTKEdUQl9EU1ApKSB7CiAJCXU4IHBsbF9yZWZfZGl2ID0gYXR5X2xkX3BsbF9jdChQTExfUkVGX0RJViwgcGFyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2N0LmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9tYWNoNjRfY3QuYwppbmRleCAxZmRjZmRiLi5jYzllOTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9tYWNoNjRfY3QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9tYWNoNjRfY3QuYwpAQCAtNjA4LDEyICs2MDgsMTAgQEAKIAkJYXR5X3N0X3BsbF9jdChTQ0xLX0ZCX0RJViwgcGxsLT5jdC5zY2xrX2ZiX2RpdiwgcGFyKTsKIAkJYXR5X3N0X3BsbF9jdChTUExMX0NOVEwyLCBwbGwtPmN0LnNwbGxfY250bDIsIHBhcik7CiAJCS8qCi0JCSAqIFRoZSBzY2xrIGhhcyBiZWVuIHN0YXJ0ZWQuIEhvd2V2ZXIsIEkgYmVsaWV2ZSB0aGUgZmlyc3QgY2xvY2sKLQkJICogdGlja3MgaXQgZ2VuZXJhdGVzIGFyZSBub3QgdmVyeSBzdGFibGUuIEhvcGUgdGhpcyBwcmltaXRpdmUgbG9vcAotCQkgKiBoZWxwcyBmb3IgUmFnZSBNb2JpbGl0aWVzIHRoYXQgc29tZXRpbWVzIGNyYXNoIHdoZW4KLQkJICogd2Ugc3dpdGNoIHRvIHNjbGsuIChEYW5pZWwgTWFudGlvbmUsIDEzLTA1LTIwMDMpCisJCSAqIFNDTEsgaGFzIGJlZW4gc3RhcnRlZC4gV2FpdCBmb3IgdGhlIFBMTCB0byBsb2NrLiA1IG1zCisJCSAqIHNob3VsZCBiZSBlbm91Z2ggYWNjb3JkaW5nIHRvIG1hY2g2NCBwcm9ncmFtbWVyJ3MgZ3VpZGUuCiAJCSAqLwotCQl1ZGVsYXkoNTAwKTsKKwkJbWRlbGF5KDUpOwogCX0KIAogCWF0eV9zdF9wbGxfY3QoUExMX1JFRl9ESVYsIHBsbC0+Y3QucGxsX3JlZl9kaXYsIHBhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9tYWNoNjRfY3Vyc29yLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9tYWNoNjRfY3Vyc29yLmMKaW5kZXggMmE3ZjM4MS4uZmUyYzZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2N1cnNvci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdXJzb3IuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpZmRlZiBfX3NwYXJjX18KLSNpbmNsdWRlIDxhc20vcGJtLmg+CiAjaW5jbHVkZSA8YXNtL2ZiaW8uaD4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYwppbmRleCBhNGIzZmQxLi4yY2UwNTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKQEAgLTEwMCw2ICsxMDAsOCBAQAogCXsgUENJX1ZFTkRPUl9JRF9BVEksIGlkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAoZmxhZ3MpIHwgKENISVBfRkFNSUxZXyMjZmFtaWx5KSB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCByYWRlb25mYl9wY2lfdGFibGVbXSA9IHsKKyAgICAgICAgLyogUmFkZW9uIFhwcmVzcyAyMDBtICovCisJQ0hJUF9ERUYoUENJX0NISVBfUlM0ODBfNTk1NSwgICBSUzQ4MCwgIENISVBfSEFTX0NSVEMyIHwgQ0hJUF9JU19JR1AgfCBDSElQX0lTX01PQklMSVRZKSwKIAkvKiBNb2JpbGl0eSBNNiAqLwogCUNISVBfREVGKFBDSV9DSElQX1JBREVPTl9MWSwgCVJWMTAwLAlDSElQX0hBU19DUlRDMiB8IENISVBfSVNfTU9CSUxJVFkpLAogCUNISVBfREVGKFBDSV9DSElQX1JBREVPTl9MWiwJUlYxMDAsCUNISVBfSEFTX0NSVEMyIHwgQ0hJUF9JU19NT0JJTElUWSksCkBAIC00MjIsNyArNDI0LDcgQEAKIAogCWlmIChkcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl2YWwgPSBnZXRfcHJvcGVydHkoZHAsICJBVFksUmVmQ0xLIiwgTlVMTCk7CisJdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiQVRZLFJlZkNMSyIsIE5VTEwpOwogCWlmICghdmFsIHx8ICEqdmFsKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJhZGVvbmZiOiBObyBBVFksUmVmQ0xLIHByb3BlcnR5ICFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQzMCwxMSArNDMyLDExIEBACiAKIAlyaW5mby0+cGxsLnJlZl9jbGsgPSAoKnZhbCkgLyAxMDsKIAotCXZhbCA9IGdldF9wcm9wZXJ0eShkcCwgIkFUWSxTQ0xLIiwgTlVMTCk7CisJdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiQVRZLFNDTEsiLCBOVUxMKTsKIAlpZiAodmFsICYmICp2YWwpCiAJCXJpbmZvLT5wbGwuc2NsayA9ICgqdmFsKSAvIDEwOwogCi0JdmFsID0gZ2V0X3Byb3BlcnR5KGRwLCAiQVRZLE1DTEsiLCBOVUxMKTsKKwl2YWwgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJBVFksTUNMSyIsIE5VTEwpOwogCWlmICh2YWwgJiYgKnZhbCkKIAkJcmluZm8tPnBsbC5tY2xrID0gKCp2YWwpIC8gMTA7CiAKQEAgLTE5OTQsNyArMTk5Niw4IEBACiAJLyogZnJhbWVidWZmZXIgc2l6ZSAqLwogICAgICAgICBpZiAoKHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlMxMDApIHx8CiAgICAgICAgICAgICAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SUzIwMCkgfHwKLSAgICAgICAgICAgIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JTMzAwKSkgeworICAgICAgICAgICAgKHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlMzMDApIHx8CisJICAgIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JTNDgwKSApIHsKICAgICAgICAgICB1MzIgdG9tID0gSU5SRUcoTkJfVE9NKTsKICAgICAgICAgICB0bXAgPSAoKCgodG9tID4+IDE2KSAtICh0b20gJiAweGZmZmYpICsgMSkgPDwgNikgKiAxMDI0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX21vbml0b3IuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9tb25pdG9yLmMKaW5kZXggNzM3YjVjMC4uMjAzMGVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX21vbml0b3IuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fbW9uaXRvci5jCkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIGludCBpLCBtdCA9IE1UX05PTkU7ICAKIAkKIAlSVFJBQ0UoImFuYWx5emluZyBPRiBwcm9wZXJ0aWVzLi4uXG4iKTsKLQlwbXQgPSBnZXRfcHJvcGVydHkoZHAsICJkaXNwbGF5LXR5cGUiLCBOVUxMKTsKKwlwbXQgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJkaXNwbGF5LXR5cGUiLCBOVUxMKTsKIAlpZiAoIXBtdCkKIAkJcmV0dXJuIE1UX05PTkU7CiAJUlRSQUNFKCJkaXNwbGF5LXR5cGU6ICVzXG4iLCBwbXQpOwpAQCAtODksNyArODksNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IHByb3BuYW1lc1tpXSAhPSBOVUxMOyArK2kpIHsKLQkJcGVkaWQgPSBnZXRfcHJvcGVydHkoZHAsIHByb3BuYW1lc1tpXSwgTlVMTCk7CisJCXBlZGlkID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCBwcm9wbmFtZXNbaV0sIE5VTEwpOwogCQlpZiAocGVkaWQgIT0gTlVMTCkKIAkJCWJyZWFrOwogCX0KQEAgLTk4LDkgKzk4LDEwIEBACiAJICogc2luZ2xlLWhlYWQgY2FyZHMgaGF2ZSBoZG5vID09IC0xIGFuZCBza2lwIHRoaXMgc3RlcAogCSAqLwogCWlmIChwZWRpZCA9PSBOVUxMICYmIGRwLT5wYXJlbnQgJiYgKGhkbm8gIT0gLTEpKQotCQlwZWRpZCA9IGdldF9wcm9wZXJ0eShkcC0+cGFyZW50LCAoaGRubyA9PSAwKSA/ICJFRElEMSIgOiAiRURJRDIiLCBOVUxMKTsKKwkJcGVkaWQgPSBvZl9nZXRfcHJvcGVydHkoZHAtPnBhcmVudCwKKwkJCQkoaGRubyA9PSAwKSA/ICJFRElEMSIgOiAiRURJRDIiLCBOVUxMKTsKIAlpZiAocGVkaWQgPT0gTlVMTCAmJiBkcC0+cGFyZW50ICYmIChoZG5vID09IDApKQotCQlwZWRpZCA9IGdldF9wcm9wZXJ0eShkcC0+cGFyZW50LCAiRURJRCIsIE5VTEwpOworCQlwZWRpZCA9IG9mX2dldF9wcm9wZXJ0eShkcC0+cGFyZW50LCAiRURJRCIsIE5VTEwpOwogCWlmIChwZWRpZCA9PSBOVUxMKQogCQlyZXR1cm4gbXQ7CiAKQEAgLTEzMCw3ICsxMzEsNyBAQAogCQlkbyB7CiAJCQlpZiAoIWRwKQogCQkJCXJldHVybiBNVF9OT05FOwotCQkJcG5hbWUgPSBnZXRfcHJvcGVydHkoZHAsICJuYW1lIiwgTlVMTCk7CisJCQlwbmFtZSA9IG9mX2dldF9wcm9wZXJ0eShkcCwgIm5hbWUiLCBOVUxMKTsKIAkJCWlmICghcG5hbWUpCiAJCQkJcmV0dXJuIE1UX05PTkU7CiAJCQlsZW4gPSBzdHJsZW4ocG5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwppbmRleCBjNDExMjkzLi5iZTFkNTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwpAQCAtMTI5MCw3ICsxMjkwLDcgQEAKIAkJaWYgKHJpbmZvLT5vZl9ub2RlICE9IE5VTEwpIHsKIAkJCWludCBzaXplOwogCi0JCQltcnRhYmxlID0gZ2V0X3Byb3BlcnR5KHJpbmZvLT5vZl9ub2RlLCAiQVRZLE1SVCIsICZzaXplKTsKKwkJCW1ydGFibGUgPSBvZl9nZXRfcHJvcGVydHkocmluZm8tPm9mX25vZGUsICJBVFksTVJUIiwgJnNpemUpOwogCQkJaWYgKG1ydGFibGUpCiAJCQkJbXJ0YWJsZV9zaXplID0gc2l6ZSA+PiAyOwogCQkJZWxzZQpAQCAtMjgyNiwxMSArMjgyNiwxNSBAQAogCXJpbmZvLT5wbV9yZWcgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHJpbmZvLT5wZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKIAogCS8qIEVuYWJsZS9EaXNhYmxlIGR5bmFtaWMgY2xvY2tzOiBUT0RPIGFkZCBzeXNmcyBhY2Nlc3MgKi8KLQlyaW5mby0+ZHluY2xrID0gZHluY2xrOwotCWlmIChkeW5jbGsgPT0gMSkgeworCWlmIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JTNDgwKQorCQlyaW5mby0+ZHluY2xrID0gLTE7CisJZWxzZQorCQlyaW5mby0+ZHluY2xrID0gZHluY2xrOworCisJaWYgKHJpbmZvLT5keW5jbGsgPT0gMSkgewogCQlyYWRlb25fcG1fZW5hYmxlX2R5bmFtaWNfbW9kZShyaW5mbyk7CiAJCXByaW50aygicmFkZW9uZmI6IER5bmFtaWMgQ2xvY2sgUG93ZXIgTWFuYWdlbWVudCBlbmFibGVkXG4iKTsKLQl9IGVsc2UgaWYgKGR5bmNsayA9PSAwKSB7CisJfSBlbHNlIGlmIChyaW5mby0+ZHluY2xrID09IDApIHsKIAkJcmFkZW9uX3BtX2Rpc2FibGVfZHluYW1pY19tb2RlKHJpbmZvKTsKIAkJcHJpbnRrKCJyYWRlb25mYjogRHluYW1pYyBDbG9jayBQb3dlciBNYW5hZ2VtZW50IGRpc2FibGVkXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25mYi5oIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaAppbmRleCAzMTkwMDAzLi43ZWJmZmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25mYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbmZiLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKIAlDSElQX0ZBTUlMWV9SVjM1MCwKIAlDSElQX0ZBTUlMWV9SVjM4MCwgICAgLyogUlYzNzAvUlYzODAvTTIyL00yNCAqLwogCUNISVBfRkFNSUxZX1I0MjAsICAgICAvKiBSNDIwL1I0MjMvTTE4ICovCisJQ0hJUF9GQU1JTFlfUlM0ODAsCiAJQ0hJUF9GQU1JTFlfTEFTVCwKIH07CiAKQEAgLTY0LDcgKzY1LDggQEAKIAkJCQkoKHJpbmZvKS0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JWMzUwKSB8fCBcCiAJCQkJKChyaW5mbyktPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SMzUwKSAgfHwgXAogCQkJCSgocmluZm8pLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlYzODApIHx8IFwKLQkJCQkoKHJpbmZvKS0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1I0MjApKQorCQkJCSgocmluZm8pLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUjQyMCkgIHx8IFwKKwkJICAgICAgICAgICAgICAgICgocmluZm8pLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlM0ODApICkKIAogLyoKICAqIENoaXAgZmxhZ3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCmluZGV4IDQ3ZDE1YjUuLmZiZWY2NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZwpAQCAtNjMsMyArNjMsMTEgQEAKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBhIEZyb250cGF0aCBQcm9HZWFyIHNheSBZIHRvIGVuYWJsZSB0aGUKIAkgIGJhY2tsaWdodCBkcml2ZXIuCisKK2NvbmZpZyBCQUNLTElHSFRfQ0FSSUxMT19SQU5DSAorCXRyaXN0YXRlICJJbnRlbCBDYXJpbGxvIFJhbmNoIEJhY2tsaWdodCBEcml2ZXIiCisJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFICYmIExDRF9DTEFTU19ERVZJQ0UgJiYgUENJICYmIFg4NiAmJiBGQl9MRTgwNTc4CisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IGhhdmUgYSBJbnRlbCBMRTgwNTc4IChDYXJpbGxvIFJhbmNoKSBzYXkgWSB0byBlbmFibGUgdGhlCisJICBiYWNrbGlnaHQgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQppbmRleCAwYzNjZTQ2Li5jNmUyMjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQpAQCAtNiwzICs2LDQgQEAKIG9iai0kKENPTkZJR19CQUNLTElHSFRfSFA2ODApCSs9IGhwNjgwX2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfTE9DT01PKQkrPSBsb2NvbW9sY2Qubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9QUk9HRUFSKSArPSBwcm9nZWFyX2JsLm8KK29iai0kKENPTkZJR19CQUNLTElHSFRfQ0FSSUxMT19SQU5DSCkgKz0gY3JfYmxsY2QubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY3JfYmxsY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NyX2JsbGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliYmMzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NyX2JsbGNkLmMKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIEludGVsIENvcnAuIDIwMDcuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIEludGVsIGZ1bmRlZCBUdW5nc3RlbiBHcmFwaGljcyAoaHR0cDovL3d3dy50dW5nc3RlbmdyYXBoaWNzLmNvbSkgdG8KKyAqIGRldmVsb3AgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIENhcmlsbG8gUmFuY2ggdmlkZW8gc3Vic3lzdGVtIGRyaXZlci4KKyAqIFRoZSBDYXJpbGxvIFJhbmNoIHZpZGVvIHN1YnN5c3RlbSBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsKKyAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGUgQ2FyaWxsbyBSYW5jaCB2aWRlbyBzdWJzeXN0ZW0gZHJpdmVyIGlzIGRpc3RyaWJ1dGVkCisgKiBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBkcml2ZXI7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQXV0aG9yczoKKyAqICAgVGhvbWFzIEhlbGxzdHJvbSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KKyAqICAgQWxhbiBIb3VyaWhhbmUgPGFsYW5oLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9sY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisvKiBUaGUgTFZEUy0gYW5kIHBhbmVsIHBvd2VyIGNvbnRyb2xzIHNpdHMgb24gdGhlCisgKiBHUElPIHBvcnQgb2YgdGhlIElTQSBicmlkZ2UuCisgKi8KKworI2RlZmluZSBDUlZNTF9ERVZJQ0VfTFBDICAgIDB4MjdCOAorI2RlZmluZSBDUlZNTF9SRUdfR1BJT0JBUiAgIDB4NDgKKyNkZWZpbmUgQ1JWTUxfUkVHX0dQSU9FTiAgICAweDRDCisjZGVmaW5lIENSVk1MX0dQSU9FTl9CSVQgICAgKDEgPDwgNCkKKyNkZWZpbmUgQ1JWTUxfUEFORUxfUE9SVCAgICAweDM4CisjZGVmaW5lIENSVk1MX0xWRFNfT04gICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDUlZNTF9QQU5FTF9PTiAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JWTUxfQkFDS0xJR0hUX09GRiAweDAwMDAwMDA0CisKKy8qIFRoZSBQTEwgQ2xvY2sgcmVnaXN0ZXIgc2l0cyBvbiBIb3N0IGJyaWRnZSAqLworI2RlZmluZSBDUlZNTF9ERVZJQ0VfTUNIICAgMHg1MDAxCisjZGVmaW5lIENSVk1MX1JFR19NQ0hCQVIgICAweDQ0CisjZGVmaW5lIENSVk1MX1JFR19NQ0hFTiAgICAweDU0CisjZGVmaW5lIENSVk1MX01DSEVOX0JJVCAgICAoMSA8PCAyOCkKKyNkZWZpbmUgQ1JWTUxfTUNITUFQX1NJWkUgIDQwOTYKKyNkZWZpbmUgQ1JWTUxfUkVHX0NMT0NLICAgIDB4YzNjCisjZGVmaW5lIENSVk1MX0NMT0NLX1NISUZUICA4CisjZGVmaW5lIENSVk1MX0NMT0NLX01BU0sgICAweDAwMDAwZjAwCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbHBjX2RldjsKK3N0YXRpYyB1MzIgZ3Bpb19iYXI7CisKK3N0cnVjdCBjcl9wYW5lbCB7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmNyX2JhY2tsaWdodF9kZXZpY2U7CisJc3RydWN0IGxjZF9kZXZpY2UgKmNyX2xjZF9kZXZpY2U7Cit9OworCitzdGF0aWMgaW50IGNyX2JhY2tsaWdodF9zZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlpbnQgaW50ZW5zaXR5ID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CisJdTMyIGFkZHIgPSBncGlvX2JhciArIENSVk1MX1BBTkVMX1BPUlQ7CisJdTMyIGN1ciA9IGlubChhZGRyKTsKKworCWlmIChiZC0+cHJvcHMucG93ZXIgPT0gRkJfQkxBTktfVU5CTEFOSykKKwkJaW50ZW5zaXR5ID0gRkJfQkxBTktfVU5CTEFOSzsKKwlpZiAoYmQtPnByb3BzLmZiX2JsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspCisJCWludGVuc2l0eSA9IEZCX0JMQU5LX1VOQkxBTks7CisJaWYgKGJkLT5wcm9wcy5wb3dlciA9PSBGQl9CTEFOS19QT1dFUkRPV04pCisJCWludGVuc2l0eSA9IEZCX0JMQU5LX1BPV0VSRE9XTjsKKwlpZiAoYmQtPnByb3BzLmZiX2JsYW5rID09IEZCX0JMQU5LX1BPV0VSRE9XTikKKwkJaW50ZW5zaXR5ID0gRkJfQkxBTktfUE9XRVJET1dOOworCisJaWYgKGludGVuc2l0eSA9PSBGQl9CTEFOS19VTkJMQU5LKSB7IC8qIEZVTEwgT04gKi8KKwkJY3VyICY9IH5DUlZNTF9CQUNLTElHSFRfT0ZGOworCQlvdXRsKGN1ciwgYWRkcik7CisJfSBlbHNlIGlmIChpbnRlbnNpdHkgPT0gRkJfQkxBTktfUE9XRVJET1dOKSB7IC8qIE9GRiAqLworCQljdXIgfD0gQ1JWTUxfQkFDS0xJR0hUX09GRjsKKwkJb3V0bChjdXIsIGFkZHIpOworCX0gLyogYW55dGhpbmcgZWxzZSwgZG9uJ3QgYm90aGVyICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcl9iYWNrbGlnaHRfZ2V0X2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJdTMyIGFkZHIgPSBncGlvX2JhciArIENSVk1MX1BBTkVMX1BPUlQ7CisJdTMyIGN1ciA9IGlubChhZGRyKTsKKwl1OCBpbnRlbnNpdHk7CisKKwlpZiAoY3VyICYgQ1JWTUxfQkFDS0xJR0hUX09GRikKKwkJaW50ZW5zaXR5ID0gRkJfQkxBTktfUE9XRVJET1dOOworCWVsc2UKKwkJaW50ZW5zaXR5ID0gRkJfQkxBTktfVU5CTEFOSzsKKworCXJldHVybiBpbnRlbnNpdHk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBjcl9iYWNrbGlnaHRfb3BzID0geworCS5nZXRfYnJpZ2h0bmVzcyA9IGNyX2JhY2tsaWdodF9nZXRfaW50ZW5zaXR5LAorCS51cGRhdGVfc3RhdHVzID0gY3JfYmFja2xpZ2h0X3NldF9pbnRlbnNpdHksCit9OworCitzdGF0aWMgdm9pZCBjcl9wYW5lbF9vbih2b2lkKQoreworCXUzMiBhZGRyID0gZ3Bpb19iYXIgKyBDUlZNTF9QQU5FTF9QT1JUOworCXUzMiBjdXIgPSBpbmwoYWRkcik7CisKKwlpZiAoIShjdXIgJiBDUlZNTF9QQU5FTF9PTikpIHsKKwkJLyogTWFrZSBzdXJlIExWRFMgY29udHJvbGxlciBpcyBkb3duLiAqLworCQlpZiAoY3VyICYgMHgwMDAwMDAwMSkgeworCQkJY3VyICY9IH5DUlZNTF9MVkRTX09OOworCQkJb3V0bChjdXIsIGFkZHIpOworCQl9CisJCS8qIFBvd2VyIHVwIFBhbmVsICovCisJCXNjaGVkdWxlX3RpbWVvdXQoSFogLyAxMCk7CisJCWN1ciB8PSBDUlZNTF9QQU5FTF9PTjsKKwkJb3V0bChjdXIsIGFkZHIpOworCX0KKworCS8qIFBvd2VyIHVwIExWRFMgY29udHJvbGxlciAqLworCisJaWYgKCEoY3VyICYgQ1JWTUxfTFZEU19PTikpIHsKKwkJc2NoZWR1bGVfdGltZW91dChIWiAvIDEwKTsKKwkJb3V0bChjdXIgfCBDUlZNTF9MVkRTX09OLCBhZGRyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNyX3BhbmVsX29mZih2b2lkKQoreworCXUzMiBhZGRyID0gZ3Bpb19iYXIgKyBDUlZNTF9QQU5FTF9QT1JUOworCXUzMiBjdXIgPSBpbmwoYWRkcik7CisKKwkvKiBQb3dlciBkb3duIExWRFMgY29udHJvbGxlciBmaXJzdCB0byBhdm9pZCBoaWdoIGN1cnJlbnRzICovCisJaWYgKGN1ciAmIENSVk1MX0xWRFNfT04pIHsKKwkJY3VyICY9IH5DUlZNTF9MVkRTX09OOworCQlvdXRsKGN1ciwgYWRkcik7CisJfQorCWlmIChjdXIgJiBDUlZNTF9QQU5FTF9PTikgeworCQlzY2hlZHVsZV90aW1lb3V0KEhaIC8gMTApOworCQlvdXRsKGN1ciAmIH5DUlZNTF9QQU5FTF9PTiwgYWRkcik7CisJfQorfQorCitzdGF0aWMgaW50IGNyX2xjZF9zZXRfcG93ZXIoc3RydWN0IGxjZF9kZXZpY2UgKmxkLCBpbnQgcG93ZXIpCit7CisJaWYgKHBvd2VyID09IEZCX0JMQU5LX1VOQkxBTkspCisJCWNyX3BhbmVsX29uKCk7CisJaWYgKHBvd2VyID09IEZCX0JMQU5LX1BPV0VSRE9XTikKKwkJY3JfcGFuZWxfb2ZmKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsY2Rfb3BzIGNyX2xjZF9vcHMgPSB7CisJLnNldF9wb3dlciA9IGNyX2xjZF9zZXRfcG93ZXIsCit9OworCitzdGF0aWMgaW50IGNyX2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjcl9wYW5lbCAqY3JwOworCXU4IGRldl9lbjsKKworCWNycCA9IGt6YWxsb2Moc2l6ZW9mKGNycCksIEdGUF9LRVJORUwpOworCWlmIChjcnAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlscGNfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwKKwkJCQkJQ1JWTUxfREVWSUNFX0xQQywgTlVMTCk7CisJaWYgKCFscGNfZGV2KSB7CisJCXByaW50aygiSU5URUwgQ0FSSUxMTyBSQU5DSCBMUEMgbm90IGZvdW5kLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGxwY19kZXYsIENSVk1MX1JFR19HUElPRU4sICZkZXZfZW4pOworCWlmICghKGRldl9lbiAmIENSVk1MX0dQSU9FTl9CSVQpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkNhcmlsbG8gUmFuY2ggR1BJTyBkZXZpY2Ugd2FzIG5vdCBlbmFibGVkLlxuIik7CisJCXBjaV9kZXZfcHV0KGxwY19kZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljcnAtPmNyX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJjci1iYWNrbGlnaHQiLAorCQkJCQkJCSAgICAgJnBkZXYtPmRldiwgTlVMTCwKKwkJCQkJCQkgICAgICZjcl9iYWNrbGlnaHRfb3BzKTsKKwlpZiAoSVNfRVJSKGNycC0+Y3JfYmFja2xpZ2h0X2RldmljZSkpIHsKKwkJcGNpX2Rldl9wdXQobHBjX2Rldik7CisJCXJldHVybiBQVFJfRVJSKGNycC0+Y3JfYmFja2xpZ2h0X2RldmljZSk7CisJfQorCisJY3JwLT5jcl9sY2RfZGV2aWNlID0gbGNkX2RldmljZV9yZWdpc3RlcigiY3ItbGNkIiwKKwkJCQkJCQkmcGRldi0+ZGV2LAorCQkJCQkJCSZjcl9sY2Rfb3BzKTsKKworCWlmIChJU19FUlIoY3JwLT5jcl9sY2RfZGV2aWNlKSkgeworCQlwY2lfZGV2X3B1dChscGNfZGV2KTsKKwkJcmV0dXJuIFBUUl9FUlIoY3JwLT5jcl9iYWNrbGlnaHRfZGV2aWNlKTsKKwl9CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQobHBjX2RldiwgQ1JWTUxfUkVHX0dQSU9CQVIsCisJCQkgICAgICAmZ3Bpb19iYXIpOworCWdwaW9fYmFyICY9IH4weDNGOworCisJY3JwLT5jcl9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisJY3JwLT5jcl9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5icmlnaHRuZXNzID0gMDsKKwljcnAtPmNyX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0gMDsKKwljcl9iYWNrbGlnaHRfc2V0X2ludGVuc2l0eShjcnAtPmNyX2JhY2tsaWdodF9kZXZpY2UpOworCisJY3JfbGNkX3NldF9wb3dlcihjcnAtPmNyX2xjZF9kZXZpY2UsIEZCX0JMQU5LX1VOQkxBTkspOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY3JwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNyX2JhY2tsaWdodF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY3JfcGFuZWwgKmNycCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWNycC0+Y3JfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047CisJY3JwLT5jcl9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5icmlnaHRuZXNzID0gMDsKKwljcnAtPmNyX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0gMDsKKwljcl9iYWNrbGlnaHRfc2V0X2ludGVuc2l0eShjcnAtPmNyX2JhY2tsaWdodF9kZXZpY2UpOworCWNyX2xjZF9zZXRfcG93ZXIoY3JwLT5jcl9sY2RfZGV2aWNlLCBGQl9CTEFOS19QT1dFUkRPV04pOworCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihjcnAtPmNyX2JhY2tsaWdodF9kZXZpY2UpOworCWxjZF9kZXZpY2VfdW5yZWdpc3RlcihjcnAtPmNyX2xjZF9kZXZpY2UpOworCXBjaV9kZXZfcHV0KGxwY19kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNyX2JhY2tsaWdodF9kcml2ZXIgPSB7CisJLnByb2JlID0gY3JfYmFja2xpZ2h0X3Byb2JlLAorCS5yZW1vdmUgPSBjcl9iYWNrbGlnaHRfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gImNyX2JhY2tsaWdodCIsCisJCSAgIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqY3JwOworCitzdGF0aWMgaW50IF9faW5pdCBjcl9iYWNrbGlnaHRfaW5pdCh2b2lkKQoreworCWludCByZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNyX2JhY2tsaWdodF9kcml2ZXIpOworCisJaWYgKCFyZXQpIHsKKwkJY3JwID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJjcl9iYWNrbGlnaHQiLCAtMSk7CisJCWlmICghY3JwKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChjcnApOworCisJCWlmIChyZXQpIHsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQoY3JwKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjcl9iYWNrbGlnaHRfZHJpdmVyKTsKKwkJfQorCX0KKworCXByaW50aygiQ2FyaWxsbyBSYW5jaCBCYWNrbGlnaHQgRHJpdmVyIEluaXRpYWxpemVkLlxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3JfYmFja2xpZ2h0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihjcnApOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjcl9iYWNrbGlnaHRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY3JfYmFja2xpZ2h0X2luaXQpOworbW9kdWxlX2V4aXQoY3JfYmFja2xpZ2h0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJUdW5nc3RlbiBHcmFwaGljcyBJbmMuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNhcmlsbG8gUmFuY2ggQmFja2xpZ2h0IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jZmJjb3B5YXJlYS5jIGIvZHJpdmVycy92aWRlby9jZmJjb3B5YXJlYS5jCmluZGV4IDZmYWVhNDAuLjAzMjIxMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2ZiY29weWFyZWEuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NmYmNvcHlhcmVhLmMKQEAgLTIyLDggKzIyLDYgQEAKICAqICBoZWxwIG1vdmluZyBzb21lIHJlZHVuZGFudCBjb21wdXRhdGlvbnMgYW5kIGJyYW5jaGVzIG91dCBvZiB0aGUgbG9vcCwgdG9vLgogICovCiAKLQotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0zMSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgImZiX2RyYXcuaCIKIAogI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKICMgIGRlZmluZSBGQl9XUklURUwgZmJfd3JpdGVsCkBAIC00MSwxNyArNDAsNiBAQAogI2VuZGlmCiAKICAgICAvKgotICAgICAqICBDb21wb3NlIHR3byB2YWx1ZXMsIHVzaW5nIGEgYml0bWFzayBhcyBkZWNpc2lvbiB2YWx1ZQotICAgICAqICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGEgJiBtYXNrKSB8IChiICYgfm1hc2spCi0gICAgICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotY29tcCh1bnNpZ25lZCBsb25nIGEsIHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyBtYXNrKQotewotICAgIHJldHVybiAoKGEgXiBiKSAmIG1hc2spIF4gYjsKLX0KLQotICAgIC8qCiAgICAgICogIEdlbmVyaWMgYml0d2lzZSBjb3B5IGFsZ29yaXRobQogICAgICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NmYmZpbGxyZWN0LmMgYi9kcml2ZXJzL3ZpZGVvL2NmYmZpbGxyZWN0LmMKaW5kZXggZjAwYjUwYS4uNzE2MjNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jZmJmaWxscmVjdC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2ZiZmlsbHJlY3QuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSAiZmJfZHJhdy5oIgogCiAjaWYgQklUU19QRVJfTE9ORyA9PSAzMgogIyAgZGVmaW5lIEZCX1dSSVRFTCBmYl93cml0ZWwKQEAgLTMxLDczICszMiw2IEBACiAjZW5kaWYKIAogICAgIC8qCi0gICAgICogIENvbXBvc2UgdHdvIHZhbHVlcywgdXNpbmcgYSBiaXRtYXNrIGFzIGRlY2lzaW9uIHZhbHVlCi0gICAgICogIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYSAmIG1hc2spIHwgKGIgJiB+bWFzaykKLSAgICAgKi8KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1jb21wKHVuc2lnbmVkIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nIG1hc2spCi17Ci0gICAgcmV0dXJuICgoYSBeIGIpICYgbWFzaykgXiBiOwotfQotCi0gICAgLyoKLSAgICAgKiAgQ3JlYXRlIGEgcGF0dGVybiB3aXRoIHRoZSBnaXZlbiBwaXhlbCdzIGNvbG9yCi0gICAgICovCi0KLSNpZiBCSVRTX1BFUl9MT05HID09IDY0Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLXBpeGVsX3RvX3BhdCggdTMyIGJwcCwgdTMyIHBpeGVsKQotewotCXN3aXRjaCAoYnBwKSB7Ci0JY2FzZSAxOgotCQlyZXR1cm4gMHhmZmZmZmZmZmZmZmZmZmZmdWwqcGl4ZWw7Ci0JY2FzZSAyOgotCQlyZXR1cm4gMHg1NTU1NTU1NTU1NTU1NTU1dWwqcGl4ZWw7Ci0JY2FzZSA0OgotCQlyZXR1cm4gMHgxMTExMTExMTExMTExMTExdWwqcGl4ZWw7Ci0JY2FzZSA4OgotCQlyZXR1cm4gMHgwMTAxMDEwMTAxMDEwMTAxdWwqcGl4ZWw7Ci0JY2FzZSAxMjoKLQkJcmV0dXJuIDB4MDAwMTAwMTAwMTAwMTAwMXVsKnBpeGVsOwotCWNhc2UgMTY6Ci0JCXJldHVybiAweDAwMDEwMDAxMDAwMTAwMDF1bCpwaXhlbDsKLQljYXNlIDI0OgotCQlyZXR1cm4gMHgwMDAwMDAwMDAxMDAwMDAxdWwqcGl4ZWw7Ci0JY2FzZSAzMjoKLQkJcmV0dXJuIDB4MDAwMDAwMDEwMDAwMDAwMXVsKnBpeGVsOwotCWRlZmF1bHQ6Ci0JCXBhbmljKCJwaXhlbF90b19wYXQoKTogdW5zdXBwb3J0ZWQgcGl4ZWxmb3JtYXRcbiIpOwotICAgIH0KLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLXBpeGVsX3RvX3BhdCggdTMyIGJwcCwgdTMyIHBpeGVsKQotewotCXN3aXRjaCAoYnBwKSB7Ci0JY2FzZSAxOgotCQlyZXR1cm4gMHhmZmZmZmZmZnVsKnBpeGVsOwotCWNhc2UgMjoKLQkJcmV0dXJuIDB4NTU1NTU1NTV1bCpwaXhlbDsKLQljYXNlIDQ6Ci0JCXJldHVybiAweDExMTExMTExdWwqcGl4ZWw7Ci0JY2FzZSA4OgotCQlyZXR1cm4gMHgwMTAxMDEwMXVsKnBpeGVsOwotCWNhc2UgMTI6Ci0JCXJldHVybiAweDAwMDAxMDAxdWwqcGl4ZWw7Ci0JY2FzZSAxNjoKLQkJcmV0dXJuIDB4MDAwMTAwMDF1bCpwaXhlbDsKLQljYXNlIDI0OgotCQlyZXR1cm4gMHgwMDAwMDAwMXVsKnBpeGVsOwotCWNhc2UgMzI6Ci0JCXJldHVybiAweDAwMDAwMDAxdWwqcGl4ZWw7Ci0JZGVmYXVsdDoKLQkJcGFuaWMoInBpeGVsX3RvX3BhdCgpOiB1bnN1cHBvcnRlZCBwaXhlbGZvcm1hdFxuIik7Ci0gICAgfQotfQotI2VuZGlmCi0KLSAgICAvKgogICAgICAqICBBbGlnbmVkIHBhdHRlcm4gZmlsbCB1c2luZyAzMi82NC1iaXQgbWVtb3J5IGFjY2Vzc2VzCiAgICAgICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYyBiL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYwppbmRleCAyYzRiYzYyLi44MjY5ZDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jaXJydXNmYi5jCkBAIC05OCwxNSArOTgsNiBAQAogI2RlZmluZSBhc3NlcnQoZXhwcikKICNlbmRpZgogCi0jaWZkZWYgVFJVRQotI3VuZGVmIFRSVUUKLSNlbmRpZgotI2lmZGVmIEZBTFNFCi0jdW5kZWYgRkFMU0UKLSNlbmRpZgotI2RlZmluZSBUUlVFICAxCi0jZGVmaW5lIEZBTFNFIDAKLQogI2RlZmluZSBNQl8gKDEwMjQqMTAyNCkKICNkZWZpbmUgS0JfICgxMDI0KQogCkBAIC0xNDYsOSArMTM3LDkgQEAKIAljaGFyICpuYW1lOwkJLyogQVNDSUkgbmFtZSBvZiBjaGlwc2V0ICovCiAJbG9uZyBtYXhjbG9ja1s1XTsJCS8qIG1heGltdW0gdmlkZW8gY2xvY2sgKi8KIAkvKiBmb3IgIDEvNGJwcCwgOGJwcCAxNS8xNmJwcCwgMjRicHAsIDMyYnBwIC0gbnVtYmVycyBmcm9tIHhvcmcgY29kZSAqLwotCXVuc2lnbmVkIGluaXRfc3IwNyA6IDE7CS8qIGluaXQgU1IwNyBkdXJpbmcgaW5pdF92Z2FjaGlwKCkgKi8KLQl1bnNpZ25lZCBpbml0X3NyMWYgOiAxOyAvKiB3cml0ZSBTUjFGIGR1cmluZyBpbml0X3ZnYWNoaXAoKSAqLwotCXVuc2lnbmVkIHNjcm5fc3RhcnRfYml0MTkgOiAxOyAvKiBjb25zdHJ1Y3QgYml0IDE5IG9mIHNjcmVlbiBzdGFydCBhZGRyZXNzICovCisJYm9vbCBpbml0X3NyMDcgOiAxOyAvKiBpbml0IFNSMDcgZHVyaW5nIGluaXRfdmdhY2hpcCgpICovCisJYm9vbCBpbml0X3NyMWYgOiAxOyAvKiB3cml0ZSBTUjFGIGR1cmluZyBpbml0X3ZnYWNoaXAoKSAqLworCWJvb2wgc2Nybl9zdGFydF9iaXQxOSA6IDE7IC8qIGNvbnN0cnVjdCBiaXQgMTkgb2Ygc2NyZWVuIHN0YXJ0IGFkZHJlc3MgKi8KIAogCS8qIGluaXRpYWwgU1IwNyB2YWx1ZSwgdGhlbiBmb3IgZWFjaCBtb2RlICovCiAJdW5zaWduZWQgY2hhciBzcjA3OwpAQCAtMTY2LDkgKzE1Nyw5IEBACiAJCQkvKiB0aGUgU0Q2NC9QNCBoYXZlIGEgaGlnaGVyIG1heC4gdmlkZW9jbG9jayAqLwogCQkJMTQwMDAwLCAxNDAwMDAsIDE0MDAwMCwgMTQwMDAwLCAxNDAwMDAsCiAJCX0sCi0JCS5pbml0X3NyMDcJCT0gVFJVRSwKLQkJLmluaXRfc3IxZgkJPSBUUlVFLAotCQkuc2Nybl9zdGFydF9iaXQxOQk9IFRSVUUsCisJCS5pbml0X3NyMDcJCT0gdHJ1ZSwKKwkJLmluaXRfc3IxZgkJPSB0cnVlLAorCQkuc2Nybl9zdGFydF9iaXQxOQk9IHRydWUsCiAJCS5zcjA3CQkJPSAweEYwLAogCQkuc3IwN18xYnBwCQk9IDB4RjAsCiAJCS5zcjA3XzhicHAJCT0gMHhGMSwKQEAgLTE4MCw5ICsxNzEsOSBAQAogCQkJLyogZ3Vlc3MgKi8KIAkJCTkwMDAwLCA5MDAwMCwgOTAwMDAsIDkwMDAwLCA5MDAwMAogCQl9LAotCQkuaW5pdF9zcjA3CQk9IFRSVUUsCi0JCS5pbml0X3NyMWYJCT0gVFJVRSwKLQkJLnNjcm5fc3RhcnRfYml0MTkJPSBGQUxTRSwKKwkJLmluaXRfc3IwNwkJPSB0cnVlLAorCQkuaW5pdF9zcjFmCQk9IHRydWUsCisJCS5zY3JuX3N0YXJ0X2JpdDE5CT0gZmFsc2UsCiAJCS5zcjA3CQkJPSAweDgwLAogCQkuc3IwN18xYnBwCQk9IDB4ODAsCiAJCS5zcjA3XzhicHAJCT0gMHg4MSwKQEAgLTE5NCw5ICsxODUsOSBAQAogCQkJLyogZ3Vlc3MgKi8KIAkJCTkwMDAwLCA5MDAwMCwgOTAwMDAsIDkwMDAwLCA5MDAwMAogCQl9LAotCQkuaW5pdF9zcjA3CQk9IFRSVUUsCi0JCS5pbml0X3NyMWYJCT0gVFJVRSwKLQkJLnNjcm5fc3RhcnRfYml0MTkJPSBGQUxTRSwKKwkJLmluaXRfc3IwNwkJPSB0cnVlLAorCQkuaW5pdF9zcjFmCQk9IHRydWUsCisJCS5zY3JuX3N0YXJ0X2JpdDE5CT0gZmFsc2UsCiAJCS5zcjA3CQkJPSAweDIwLAogCQkuc3IwN18xYnBwCQk9IDB4MjAsCiAJCS5zcjA3XzhicHAJCT0gMHgyMSwKQEAgLTIwOCw5ICsxOTksOSBAQAogCQkJLyogZ3Vlc3MgKi8KIAkJCTkwMDAwLCA5MDAwMCwgOTAwMDAsIDkwMDAwLCA5MDAwMAogCQl9LAotCQkuaW5pdF9zcjA3CQk9IFRSVUUsCi0JCS5pbml0X3NyMWYJCT0gVFJVRSwKLQkJLnNjcm5fc3RhcnRfYml0MTkJPSBGQUxTRSwKKwkJLmluaXRfc3IwNwkJPSB0cnVlLAorCQkuaW5pdF9zcjFmCQk9IHRydWUsCisJCS5zY3JuX3N0YXJ0X2JpdDE5CT0gZmFsc2UsCiAJCS5zcjA3CQkJPSAweDgwLAogCQkuc3IwN18xYnBwCQk9IDB4ODAsCiAJCS5zcjA3XzhicHAJCT0gMHg4MSwKQEAgLTIyMSw5ICsyMTIsOSBAQAogCQkubWF4Y2xvY2sJCT0gewogCQkJMTM1MTAwLCAxMzUxMDAsIDg1NTAwLCA4NTUwMCwgMAogCQl9LAotCQkuaW5pdF9zcjA3CQk9IFRSVUUsCi0JCS5pbml0X3NyMWYJCT0gRkFMU0UsCi0JCS5zY3JuX3N0YXJ0X2JpdDE5CT0gVFJVRSwKKwkJLmluaXRfc3IwNwkJPSB0cnVlLAorCQkuaW5pdF9zcjFmCQk9IGZhbHNlLAorCQkuc2Nybl9zdGFydF9iaXQxOQk9IHRydWUsCiAJCS5zcjA3CQkJPSAweDIwLAogCQkuc3IwN18xYnBwCQk9IDB4MjAsCiAJCS5zcjA3XzhicHAJCT0gMHgyMSwKQEAgLTIzNSw5ICsyMjYsOSBAQAogCQkJLyogZm9yIHRoZSBHRDU0MzAuICBHRDU0NDYgY2FuIGRvIG1vcmUuLi4gKi8KIAkJCTg1NTAwLCA4NTUwMCwgNTAwMDAsIDI4NTAwLCAwCiAJCX0sCi0JCS5pbml0X3NyMDcJCT0gVFJVRSwKLQkJLmluaXRfc3IxZgkJPSBUUlVFLAotCQkuc2Nybl9zdGFydF9iaXQxOQk9IFRSVUUsCisJCS5pbml0X3NyMDcJCT0gdHJ1ZSwKKwkJLmluaXRfc3IxZgkJPSB0cnVlLAorCQkuc2Nybl9zdGFydF9iaXQxOQk9IHRydWUsCiAJCS5zcjA3CQkJPSAweEEwLAogCQkuc3IwN18xYnBwCQk9IDB4QTEsCiAJCS5zcjA3XzFicHBfbXV4CQk9IDB4QTcsCkBAIC0yNTAsOSArMjQxLDkgQEAKIAkJLm1heGNsb2NrCQk9IHsKIAkJCTEzNTEwMCwgMjAwMDAwLCAyMDAwMDAsIDEzNTEwMCwgMTM1MTAwCiAJCX0sCi0JCS5pbml0X3NyMDcJCT0gVFJVRSwKLQkJLmluaXRfc3IxZgkJPSBUUlVFLAotCQkuc2Nybl9zdGFydF9iaXQxOQk9IFRSVUUsCisJCS5pbml0X3NyMDcJCT0gdHJ1ZSwKKwkJLmluaXRfc3IxZgkJPSB0cnVlLAorCQkuc2Nybl9zdGFydF9iaXQxOQk9IHRydWUsCiAJCS5zcjA3CQkJPSAweDEwLAogCQkuc3IwN18xYnBwCQk9IDB4MTEsCiAJCS5zcjA3XzhicHAJCT0gMHgxMSwKQEAgLTI2NCw5ICsyNTUsOSBAQAogCQkJLyogZ3Vlc3MgKi8KIAkJCTEzNTEwMCwgMTM1MTAwLCAxMzUxMDAsIDEzNTEwMCwgMTM1MTAwLAogCQl9LAotCQkuaW5pdF9zcjA3CQk9IEZBTFNFLAotCQkuaW5pdF9zcjFmCQk9IEZBTFNFLAotCQkuc2Nybl9zdGFydF9iaXQxOQk9IFRSVUUsCisJCS5pbml0X3NyMDcJCT0gZmFsc2UsCisJCS5pbml0X3NyMWYJCT0gZmFsc2UsCisJCS5zY3JuX3N0YXJ0X2JpdDE5CT0gdHJ1ZSwKIAl9CiB9OwogCkBAIC04MTUsNyArODA2LDcgQEAKIAogCWRlZmF1bHQ6CiAJCURQUklOVEsoIlVuc3VwcG9ydGVkIGJwcCBzaXplOiAlZFxuIiwgdmFyLT5iaXRzX3Blcl9waXhlbCk7Ci0JCWFzc2VydCAoRkFMU0UpOworCQlhc3NlcnQoZmFsc2UpOwogCQkvKiBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KIAkJYnJlYWs7CiAJfQpAQCAtODg2LDcgKzg3Nyw3IEBACiAKIAlkZWZhdWx0OgogCQlEUFJJTlRLKCJVbnN1cHBvcnRlZCBicHAgc2l6ZTogJWRcbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOwotCQlhc3NlcnQgKEZBTFNFKTsKKwkJYXNzZXJ0KGZhbHNlKTsKIAkJLyogc2hvdWxkIG5ldmVyIG9jY3VyICovCiAJCWJyZWFrOwogCX0KQEAgLTMyMDMsNyArMzE5NCw3IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIHNob3VsZCBuZXZlciBvY2N1ciAqLwotCQkJYXNzZXJ0IChGQUxTRSk7CisJCQlhc3NlcnQoZmFsc2UpOwogCQkJYnJlYWs7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZwppbmRleCBhYTM5MzVkLi42M2I4NWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZwpAQCAtMTksMTMgKzE5LDYgQEAKIAogCSAgU2F5IFkuCiAKLSMJaWYgWyAiJENPTkZJR19QQ0kiID0gInkiIC1hICIkQ09ORklHX1ZHQV9DT05TT0xFIiA9ICJ5IiBdOyB0aGVuCi0jCSAgIGJvb2wgJyAgIEFsbG93IFZHQSBvbiBhbnkgYnVzPycgQ09ORklHX1ZHQV9IT1NFCi0jCSAgIGlmIFsgIiRDT05GSUdfVkdBX0hPU0UiID0gInkiIF07IHRoZW4KLSMJICAgICAgZGVmaW5lX2Jvb2wgQ09ORklHX0RVTU1ZX0NPTlNPTEUgeQotIwkgICBmaQotIwlmaQotCiBjb25maWcgVkdBQ09OX1NPRlRfU0NST0xMQkFDSwogICAgICAgIGJvb2wgIkVuYWJsZSBTY3JvbGxiYWNrIEJ1ZmZlciBpbiBTeXN0ZW0gUkFNIgogICAgICAgIGRlcGVuZHMgb24gVkdBX0NPTlNPTEUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKaW5kZXggMDQyOWZkMi4uNzM4MTNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKQEAgLTEwNyw3ICsxMDcsOSBAQAogCiBzdGF0aWMgc2lnbmVkIGNoYXIgY29uMmZiX21hcFtNQVhfTlJfQ09OU09MRVNdOwogc3RhdGljIHNpZ25lZCBjaGFyIGNvbjJmYl9tYXBfYm9vdFtNQVhfTlJfQ09OU09MRVNdOworI2lmbmRlZiBNT0RVTEUKIHN0YXRpYyBpbnQgbG9nb19oZWlnaHQ7CisjZW5kaWYKIHN0YXRpYyBpbnQgbG9nb19saW5lczsKIC8qIGxvZ29fc2hvd24gaXMgYW4gaW5kZXggdG8gdmNfY29ucyB3aGVuID49IDA7IG90aGVyd2lzZSBmb2xsb3dzIEZCQ09OX0xPR08KICAgIGVudW1zLiAgKi8KQEAgLTU3Niw2ICs1NzgsMTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCisjaWZkZWYgTU9EVUxFCitzdGF0aWMgdm9pZCBmYmNvbl9wcmVwYXJlX2xvZ28oc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCSAgICAgICBpbnQgY29scywgaW50IHJvd3MsIGludCBuZXdfY29scywgaW50IG5ld19yb3dzKQoreworCWxvZ29fc2hvd24gPSBGQkNPTl9MT0dPX0RPTlRTSE9XOworfQorI2Vsc2UKIHN0YXRpYyB2b2lkIGZiY29uX3ByZXBhcmVfbG9nbyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAogCQkJICAgICAgIGludCBjb2xzLCBpbnQgcm93cywgaW50IG5ld19jb2xzLCBpbnQgbmV3X3Jvd3MpCiB7CkBAIC01ODQsNiArNTkzLDExIEBACiAJaW50IGNudCwgZXJhc2UgPSB2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwgc3RlcDsKIAl1bnNpZ25lZCBzaG9ydCAqc2F2ZSA9IE5VTEwsICpyLCAqcTsKIAorCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19NT0RVTEUpIHsKKwkJbG9nb19zaG93biA9IEZCQ09OX0xPR09fRE9OVFNIT1c7CisJCXJldHVybjsKKwl9CisKIAkvKgogCSAqIHJlbW92ZSB1bmRlcmxpbmUgYXR0cmlidXRlIGZyb20gZXJhc2UgY2hhcmFjdGVyCiAJICogaWYgYmxhY2sgYW5kIHdoaXRlIGZyYW1lYnVmZmVyLgpAQCAtNjE4LDggKzYzMiwxMyBAQAogCQkJciAtPSBjb2xzOwogCQl9CiAJCWlmICghc2F2ZSkgewotCQkJdmMtPnZjX3kgKz0gbG9nb19saW5lczsKLQkJCXZjLT52Y19wb3MgKz0gbG9nb19saW5lcyAqIHZjLT52Y19zaXplX3JvdzsKKwkJCWludCBsaW5lczsKKwkJCWlmICh2Yy0+dmNfeSArIGxvZ29fbGluZXMgPj0gcm93cykKKwkJCQlsaW5lcyA9IHJvd3MgLSB2Yy0+dmNfeSAtIDE7CisJCQllbHNlCisJCQkJbGluZXMgPSBsb2dvX2xpbmVzOworCQkJdmMtPnZjX3kgKz0gbGluZXM7CisJCQl2Yy0+dmNfcG9zICs9IGxpbmVzICogdmMtPnZjX3NpemVfcm93OwogCQl9CiAJfQogCXNjcl9tZW1zZXR3KCh1bnNpZ25lZCBzaG9ydCAqKSB2Yy0+dmNfb3JpZ2luLApAQCAtNjUwLDYgKzY2OSw3IEBACiAJCXZjLT52Y190b3AgPSBsb2dvX2xpbmVzOwogCX0KIH0KKyNlbmRpZiAvKiBNT0RVTEUgKi8KIAogI2lmZGVmIENPTkZJR19GQl9USUxFQkxJVFRJTkcKIHN0YXRpYyB2b2lkIHNldF9ibGl0dGluZ190eXBlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8pCkBAIC02NjUsNiArNjg1LDE3IEBACiAJCWZiY29uX3NldF9iaXRvcHMob3BzKTsKIAl9CiB9CisKK3N0YXRpYyBpbnQgZmJjb25faW52YWxpZF9jaGFyY291bnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGNoYXJjb3VudCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19NSVNDX1RJTEVCTElUVElORyAmJgorCSAgICBpbmZvLT50aWxlb3BzLT5mYl9nZXRfdGlsZW1heChpbmZvKSA8IGNoYXJjb3VudCkKKwkJZXJyID0gMTsKKworCXJldHVybiBlcnI7Cit9CiAjZWxzZQogc3RhdGljIHZvaWQgc2V0X2JsaXR0aW5nX3R5cGUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKQEAgLTY3NSw2ICs3MDYsMTIgQEAKIAlmYmNvbl9zZXRfcm90YXRpb24oaW5mbyk7CiAJZmJjb25fc2V0X2JpdG9wcyhvcHMpOwogfQorCitzdGF0aWMgaW50IGZiY29uX2ludmFsaWRfY2hhcmNvdW50KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBjaGFyY291bnQpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfTUlTQ19USUxFQkxJVFRJTkcgKi8KIAogCkBAIC05NjgsNyArMTAwNSw5IEBACiAJaWYgKCFwLT5mb250ZGF0YSkgewogCQlpZiAoIWZvbnRuYW1lWzBdIHx8ICEoZm9udCA9IGZpbmRfZm9udChmb250bmFtZSkpKQogCQkJZm9udCA9IGdldF9kZWZhdWx0X2ZvbnQoaW5mby0+dmFyLnhyZXMsCi0JCQkJCQlpbmZvLT52YXIueXJlcyk7CisJCQkJCQlpbmZvLT52YXIueXJlcywKKwkJCQkJCWluZm8tPnBpeG1hcC5ibGl0X3gsCisJCQkJCQlpbmZvLT5waXhtYXAuYmxpdF95KTsKIAkJdmMtPnZjX2ZvbnQud2lkdGggPSBmb250LT53aWR0aDsKIAkJdmMtPnZjX2ZvbnQuaGVpZ2h0ID0gZm9udC0+aGVpZ2h0OwogCQl2Yy0+dmNfZm9udC5kYXRhID0gKHZvaWQgKikocC0+Zm9udGRhdGEgPSBmb250LT5kYXRhKTsKQEAgLTEwODgsNyArMTEyNyw5IEBACiAKIAkJCWlmICghZm9udG5hbWVbMF0gfHwgIShmb250ID0gZmluZF9mb250KGZvbnRuYW1lKSkpCiAJCQkJZm9udCA9IGdldF9kZWZhdWx0X2ZvbnQoaW5mby0+dmFyLnhyZXMsCi0JCQkJCQkJaW5mby0+dmFyLnlyZXMpOworCQkJCQkJCWluZm8tPnZhci55cmVzLAorCQkJCQkJCWluZm8tPnBpeG1hcC5ibGl0X3gsCisJCQkJCQkJaW5mby0+cGl4bWFwLmJsaXRfeSk7CiAJCQl2Yy0+dmNfZm9udC53aWR0aCA9IGZvbnQtPndpZHRoOwogCQkJdmMtPnZjX2ZvbnQuaGVpZ2h0ID0gZm9udC0+aGVpZ2h0OwogCQkJdmMtPnZjX2ZvbnQuZGF0YSA9ICh2b2lkICopKHAtPmZvbnRkYXRhID0gZm9udC0+ZGF0YSk7CkBAIC0xMzA1LDcgKzEzNDYsNyBAQAogCWludCB5OwogIAlpbnQgYyA9IHNjcl9yZWFkdygodTE2ICopIHZjLT52Y19wb3MpOwogCi0JaWYgKGZiY29uX2lzX2luYWN0aXZlKHZjLCBpbmZvKSkKKwlpZiAoZmJjb25faXNfaW5hY3RpdmUodmMsIGluZm8pIHx8IHZjLT52Y19kZWNjbSAhPSAxKQogCQlyZXR1cm47CiAKIAlvcHMtPmN1cnNvcl9mbGFzaCA9IChtb2RlID09IENNX0VSQVNFKSA/IDAgOiAxOwpAQCAtMjQ3NSw2ICsyNTE2LDcgQEAKIAogc3RhdGljIGludCBmYmNvbl9zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBjb25zb2xlX2ZvbnQgKmZvbnQsIHVuc2lnbmVkIGZsYWdzKQogeworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW3ZjLT52Y19udW1dXTsKIAl1bnNpZ25lZCBjaGFyY291bnQgPSBmb250LT5jaGFyY291bnQ7CiAJaW50IHcgPSBmb250LT53aWR0aDsKIAlpbnQgaCA9IGZvbnQtPmhlaWdodDsKQEAgLTI0ODgsNiArMjUzMCwxNSBAQAogCWlmIChjaGFyY291bnQgIT0gMjU2ICYmIGNoYXJjb3VudCAhPSA1MTIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogTWFrZSBzdXJlIGRyYXdpbmcgZW5naW5lIGNhbiBoYW5kbGUgdGhlIGZvbnQgKi8KKwlpZiAoIShpbmZvLT5waXhtYXAuYmxpdF94ICYgKDEgPDwgKGZvbnQtPndpZHRoIC0gMSkpKSB8fAorCSAgICAhKGluZm8tPnBpeG1hcC5ibGl0X3kgJiAoMSA8PCAoZm9udC0+aGVpZ2h0IC0gMSkpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBNYWtlIHN1cmUgZHJpdmVyIGNhbiBoYW5kbGUgdGhlIGZvbnQgbGVuZ3RoICovCisJaWYgKGZiY29uX2ludmFsaWRfY2hhcmNvdW50KGluZm8sIGNoYXJjb3VudCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJc2l6ZSA9IGggKiBwaXRjaCAqIGNoYXJjb3VudDsKIAogCW5ld19kYXRhID0ga21hbGxvYyhGT05UX0VYVFJBX1dPUkRTICogc2l6ZW9mKGludCkgKyBzaXplLCBHRlBfVVNFUik7CkBAIC0yNTMyLDcgKzI1ODMsOCBAQAogCWNvbnN0IHN0cnVjdCBmb250X2Rlc2MgKmY7CiAKIAlpZiAoIW5hbWUpCi0JCWYgPSBnZXRfZGVmYXVsdF9mb250KGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcyk7CisJCWYgPSBnZXRfZGVmYXVsdF9mb250KGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcywKKwkJCQkgICAgIGluZm8tPnBpeG1hcC5ibGl0X3gsIGluZm8tPnBpeG1hcC5ibGl0X3kpOwogCWVsc2UgaWYgKCEoZiA9IGZpbmRfZm9udChuYW1lKSkpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC0yODI5LDcgKzI4ODEsNyBAQAogCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAlzdHJ1Y3QgdmNfZGF0YSAqdmM7CiAJc3RydWN0IGRpc3BsYXkgKnA7Ci0JaW50IGksIHJvd3MsIGNvbHM7CisJaW50IGksIHJvd3MsIGNvbHMsIGZnID0gLTE7CiAKIAlpZiAoIW9wcyB8fCBvcHMtPmN1cnJjb24gPCAwKQogCQlyZXR1cm47CkBAIC0yODQwLDM0ICsyODkyLDIzIEBACiAJCSAgICByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbaV1dICE9IGluZm8pCiAJCQljb250aW51ZTsKIAorCQlpZiAoQ09OX0lTX1ZJU0lCTEUodmMpKSB7CisJCQlmZyA9IGk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCXAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKIAkJc2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pOwogCQl2YXJfdG9fZGlzcGxheShwLCAmaW5mby0+dmFyLCBpbmZvKTsKLQkJY29scyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcyk7Ci0JCXJvd3MgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueXJlcywgaW5mby0+dmFyLnhyZXMpOworCQljb2xzID0gRkJDT05fU1dBUChwLT5yb3RhdGUsIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcyk7CisJCXJvd3MgPSBGQkNPTl9TV0FQKHAtPnJvdGF0ZSwgaW5mby0+dmFyLnlyZXMsIGluZm8tPnZhci54cmVzKTsKIAkJY29scyAvPSB2Yy0+dmNfZm9udC53aWR0aDsKIAkJcm93cyAvPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CiAJCXZjX3Jlc2l6ZSh2YywgY29scywgcm93cyk7Ci0KLQkJaWYgKENPTl9JU19WSVNJQkxFKHZjKSkgewotCQkJdXBkYXRlc2Nyb2xsbW9kZShwLCBpbmZvLCB2Yyk7Ci0JCQlzY3JvbGxiYWNrX21heCA9IDA7Ci0JCQlzY3JvbGxiYWNrX2N1cnJlbnQgPSAwOwotCi0JCQlpZiAoIWZiY29uX2lzX2luYWN0aXZlKHZjLCBpbmZvKSkgewotCQkJICAgIG9wcy0+dmFyLnhvZmZzZXQgPSBvcHMtPnZhci55b2Zmc2V0ID0KLQkJCQlwLT55c2Nyb2xsID0gMDsKLQkJCSAgICBvcHMtPnVwZGF0ZV9zdGFydChpbmZvKTsKLQkJCX0KLQotCQkJZmJjb25fc2V0X3BhbGV0dGUodmMsIGNvbG9yX3RhYmxlKTsKLQkJCXVwZGF0ZV9zY3JlZW4odmMpOwotCQkJaWYgKHNvZnRiYWNrX2J1ZikKLQkJCQlmYmNvbl91cGRhdGVfc29mdGJhY2sodmMpOwotCQl9CiAJfQogCi0Jb3BzLT5wID0gJmZiX2Rpc3BsYXlbb3BzLT5jdXJyY29uXTsKKwlpZiAoZmcgIT0gLTEpCisJCWZiY29uX21vZGVjaGFuZ2VkKGluZm8pOwogfQogCiBzdGF0aWMgaW50IGZiY29uX21vZGVfZGVsZXRlZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKQEAgLTMwMDIsNiArMzA0Myw0MiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgZmJjb25fZ2V0X3JlcXVpcmVtZW50KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGZiX2JsaXRfY2FwcyAqY2FwcykKK3sKKwlzdHJ1Y3QgdmNfZGF0YSAqdmM7CisJc3RydWN0IGRpc3BsYXkgKnA7CisKKwlpZiAoY2Fwcy0+ZmxhZ3MpIHsKKwkJaW50IGksIGNoYXJjbnQ7CisKKwkJZm9yIChpID0gZmlyc3RfZmJfdmM7IGkgPD0gbGFzdF9mYl92YzsgaSsrKSB7CisJCQl2YyA9IHZjX2NvbnNbaV0uZDsKKwkJCWlmICh2YyAmJiB2Yy0+dmNfbW9kZSA9PSBLRF9URVhUICYmCisJCQkgICAgaW5mby0+bm9kZSA9PSBjb24yZmJfbWFwW2ldKSB7CisJCQkJcCA9ICZmYl9kaXNwbGF5W2ldOworCQkJCWNhcHMtPnggfD0gMSA8PCAodmMtPnZjX2ZvbnQud2lkdGggLSAxKTsKKwkJCQljYXBzLT55IHw9IDEgPDwgKHZjLT52Y19mb250LmhlaWdodCAtIDEpOworCQkJCWNoYXJjbnQgPSAocC0+dXNlcmZvbnQpID8KKwkJCQkJRk5UQ0hBUkNOVChwLT5mb250ZGF0YSkgOiAyNTY7CisJCQkJaWYgKGNhcHMtPmxlbiA8IGNoYXJjbnQpCisJCQkJCWNhcHMtPmxlbiA9IGNoYXJjbnQ7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQl2YyA9IHZjX2NvbnNbZmdfY29uc29sZV0uZDsKKworCQlpZiAodmMgJiYgdmMtPnZjX21vZGUgPT0gS0RfVEVYVCAmJgorCQkgICAgaW5mby0+bm9kZSA9PSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdKSB7CisJCQlwID0gJmZiX2Rpc3BsYXlbZmdfY29uc29sZV07CisJCQljYXBzLT54ID0gMSA8PCAodmMtPnZjX2ZvbnQud2lkdGggLSAxKTsKKwkJCWNhcHMtPnkgPSAxIDw8ICh2Yy0+dmNfZm9udC5oZWlnaHQgLSAxKTsKKwkJCWNhcHMtPmxlbiA9IChwLT51c2VyZm9udCkgPworCQkJCUZOVENIQVJDTlQocC0+Zm9udGRhdGEpIDogMjU2OworCQl9CisJfQorfQorCiBzdGF0aWMgaW50IGZiY29uX2V2ZW50X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCiB7CkBAIC0zMDA5LDYgKzMwODYsNyBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZXZlbnQtPmluZm87CiAJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsKIAlzdHJ1Y3QgZmJfY29uMmZibWFwICpjb24yZmI7CisJc3RydWN0IGZiX2JsaXRfY2FwcyAqY2FwczsKIAlpbnQgcmV0ID0gMDsKIAogCS8qCkBAIC0zMDU3LDYgKzMxMzUsMTAgQEAKIAljYXNlIEZCX0VWRU5UX05FV19NT0RFTElTVDoKIAkJZmJjb25fbmV3X21vZGVsaXN0KGluZm8pOwogCQlicmVhazsKKwljYXNlIEZCX0VWRU5UX0dFVF9SRVE6CisJCWNhcHMgPSBldmVudC0+ZGF0YTsKKwkJZmJjb25fZ2V0X3JlcXVpcmVtZW50KGluZm8sIGNhcHMpOworCQlicmVhazsKIAl9CiAKIGRvbmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uaCBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5oCmluZGV4IDcxZjI0ZTAuLjhlNmVmNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5oCkBAIC0xNzYsNyArMTc2LDYgQEAKICNlbmRpZgogZXh0ZXJuIHZvaWQgZmJjb25fc2V0X2JpdG9wcyhzdHJ1Y3QgZmJjb25fb3BzICpvcHMpOwogZXh0ZXJuIGludCAgc29mdF9jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9jdXJzb3IgKmN1cnNvcik7Ci1leHRlcm4gc3RydWN0IGNsYXNzICpmYl9jbGFzczsKIAogI2RlZmluZSBGQkNPTl9BVFRSSUJVVEVfVU5ERVJMSU5FIDEKICNkZWZpbmUgRkJDT05fQVRUUklCVVRFX1JFVkVSU0UgICAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udHMuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jCmluZGV4IGM5NjA3MjguLmE2ODI4ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250cy5jCkBAIC05OCw2ICs5OCw4IEBACiAgKglnZXRfZGVmYXVsdF9mb250IC0gZ2V0IGRlZmF1bHQgZm9udAogICoJQHhyZXM6IHNjcmVlbiBzaXplIG9mIFgKICAqCUB5cmVzOiBzY3JlZW4gc2l6ZSBvZiBZCisgKiAgICAgIEBmb250X3c6IGJpdCBhcnJheSBvZiBzdXBwb3J0ZWQgd2lkdGhzICgxIC0gMzIpCisgKiAgICAgIEBmb250X2g6IGJpdCBhcnJheSBvZiBzdXBwb3J0ZWQgaGVpZ2h0cyAoMSAtIDMyKQogICoKICAqCUdldCB0aGUgZGVmYXVsdCBmb250IGZvciBhIHNwZWNpZmllZCBzY3JlZW4gc2l6ZS4KICAqCURpbWVuc2lvbnMgYXJlIGluIHBpeGVscy4KQEAgLTEwNyw3ICsxMDksOCBAQAogICoKICAqLwogCi1jb25zdCBzdHJ1Y3QgZm9udF9kZXNjICpnZXRfZGVmYXVsdF9mb250KGludCB4cmVzLCBpbnQgeXJlcykKK2NvbnN0IHN0cnVjdCBmb250X2Rlc2MgKmdldF9kZWZhdWx0X2ZvbnQoaW50IHhyZXMsIGludCB5cmVzLCB1MzIgZm9udF93LAorCQkJCQkgdTMyIGZvbnRfaCkKIHsKICAgICBpbnQgaSwgYywgY2M7CiAgICAgY29uc3Qgc3RydWN0IGZvbnRfZGVzYyAqZiwgKmc7CkBAIC0xMjksNiArMTMyLDExIEBACiAjZW5kaWYKIAlpZiAoKHlyZXMgPCA0MDApID09IChmLT5oZWlnaHQgPD0gOCkpCiAJICAgIGMgKz0gMTAwMDsKKworCWlmICghKGZvbnRfdyAmICgxIDw8IChmLT53aWR0aCAtIDEpKSkgfHwKKwkgICAgIShmb250X3cgJiAoMSA8PCAoZi0+aGVpZ2h0IC0gMSkpKSkKKwkgICAgYyArPSAxMDAwOworCiAJaWYgKGMgPiBjYykgewogCSAgICBjYyA9IGM7CiAJICAgIGcgPSBmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL21kYWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL21kYWNvbi5jCmluZGV4IDEyNGVjYmUuLmJkOGQ5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9tZGFjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvbWRhY29uLmMKQEAgLTM4NCw3ICszODQsNyBAQAogfQogCiBzdGF0aWMgdTggbWRhY29uX2J1aWxkX2F0dHIoc3RydWN0IHZjX2RhdGEgKmMsIHU4IGNvbG9yLCB1OCBpbnRlbnNpdHksIAotCQkJICAgIHU4IGJsaW5rLCB1OCB1bmRlcmxpbmUsIHU4IHJldmVyc2UpCisJCQkgICAgdTggYmxpbmssIHU4IHVuZGVybGluZSwgdTggcmV2ZXJzZSwgdTggaXRhbGljKQogewogCS8qIFRoZSBhdHRyaWJ1dGUgaXMganVzdCBhIGJpdCB2ZWN0b3I6CiAJICoKQEAgLTM5Nyw2ICszOTcsNyBAQAogCXJldHVybiAoaW50ZW5zaXR5ICYgMykgfAogCQkoKHVuZGVybGluZSAmIDEpIDw8IDIpIHwKIAkJKChyZXZlcnNlICAgJiAxKSA8PCAzKSB8CisJCSghIWl0YWxpYyA8PCA0KSB8CiAJCSgoYmxpbmsgICAgICYgMSkgPDwgNyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9wcm9tY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvcHJvbWNvbi5jCmluZGV4IGI3OGVhYzYuLmFlMDJlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9wcm9tY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3Byb21jb24uYwpAQCAtNTQ4LDcgKzU0OCw4IEBACiB9CiAKICNpZiAhKFBST01DT05fQ09MT1IpCi1zdGF0aWMgdTggcHJvbWNvbl9idWlsZF9hdHRyKHN0cnVjdCB2Y19kYXRhICpjb25wLCB1OCBfY29sb3IsIHU4IF9pbnRlbnNpdHksIHU4IF9ibGluaywgdTggX3VuZGVybGluZSwgdTggX3JldmVyc2UpCitzdGF0aWMgdTggcHJvbWNvbl9idWlsZF9hdHRyKHN0cnVjdCB2Y19kYXRhICpjb25wLCB1OCBfY29sb3IsIHU4IF9pbnRlbnNpdHksCisgICAgdTggX2JsaW5rLCB1OCBfdW5kZXJsaW5lLCB1OCBfcmV2ZXJzZSwgdTggX2l0YWxpYykKIHsKIAlyZXR1cm4gKF9yZXZlcnNlKSA/IDB4ZiA6IDB4NzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zb2Z0Y3Vyc29yLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc29mdGN1cnNvci5jCmluZGV4IGY1NzdiZDguLjAzY2ZiN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zb2Z0Y3Vyc29yLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3NvZnRjdXJzb3IuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9kcml2ZXJzL3ZpZGVvL3NvZnRjdXJzb3IuYworICogbGludXgvZHJpdmVycy92aWRlby9jb25zb2xlL3NvZnRjdXJzb3IuYwogICoKICAqIEdlbmVyaWMgc29mdHdhcmUgY3Vyc29yIGZvciBmcmFtZSBidWZmZXIgZGV2aWNlcwogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb24uYwppbmRleCA1N2IyMWU1Li42N2E2ODJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc3RpY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3N0aWNvbi5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIH0KIAogc3RhdGljIHU4IHN0aWNvbl9idWlsZF9hdHRyKHN0cnVjdCB2Y19kYXRhICpjb25wLCB1OCBjb2xvciwgdTggaW50ZW5zLAotCQkJICAgIHU4IGJsaW5rLCB1OCB1bmRlcmxpbmUsIHU4IHJldmVyc2UpCisJCQkgICAgdTggYmxpbmssIHU4IHVuZGVybGluZSwgdTggcmV2ZXJzZSwgdTggaXRhbGljKQogewogICAgIHU4IGF0dHIgPSAoKGNvbG9yICYgMHg3MCkgPj4gMSkgfCAoKGNvbG9yICYgNykpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc3RpY29yZS5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3N0aWNvcmUuYwppbmRleCA4OGU3MDM4Li43MTdiMzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc3RpY29yZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb3JlLmMKQEAgLTQ5NSw3ICs0OTUsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAlmYmZvbnQgPSBmaW5kX2ZvbnQoZmJmb250X25hbWUpOwogCWlmICghZmJmb250KQotCQlmYmZvbnQgPSBnZXRfZGVmYXVsdF9mb250KDEwMjQsNzY4KTsKKwkJZmJmb250ID0gZ2V0X2RlZmF1bHRfZm9udCgxMDI0LDc2OCwgfih1MzIpMCwgfih1MzIpMCk7CiAJaWYgKCFmYmZvbnQpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKaW5kZXggM2U2N2MzNC4uZjQ2ZmU5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwpAQCAtODYsOCArODYsNiBAQAogc3RhdGljIHZvaWQgdmdhY29uX3NhdmVfc2NyZWVuKHN0cnVjdCB2Y19kYXRhICpjKTsKIHN0YXRpYyBpbnQgdmdhY29uX3Njcm9sbChzdHJ1Y3QgdmNfZGF0YSAqYywgaW50IHQsIGludCBiLCBpbnQgZGlyLAogCQkJIGludCBsaW5lcyk7Ci1zdGF0aWMgdTggdmdhY29uX2J1aWxkX2F0dHIoc3RydWN0IHZjX2RhdGEgKmMsIHU4IGNvbG9yLCB1OCBpbnRlbnNpdHksCi0JCQkgICAgdTggYmxpbmssIHU4IHVuZGVybGluZSwgdTggcmV2ZXJzZSk7CiBzdGF0aWMgdm9pZCB2Z2Fjb25faW52ZXJ0X3JlZ2lvbihzdHJ1Y3QgdmNfZGF0YSAqYywgdTE2ICogcCwgaW50IGNvdW50KTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZnYWNvbl91bmlfcGFnZWRpclsyXTsKIApAQCAtMzcwLDkgKzM2OCwxNCBAQAogI2VuZGlmCiAJfQogCisJLyogU0NSRUVOX0lORk8gaW5pdGlhbGl6ZWQ/ICovCisJaWYgKChPUklHX1ZJREVPX01PREUgID09IDApICYmCisJICAgIChPUklHX1ZJREVPX0xJTkVTID09IDApICYmCisJICAgIChPUklHX1ZJREVPX0NPTFMgID09IDApKQorCQlnb3RvIG5vX3ZnYTsKKwogCS8qIFZHQTE2IG1vZGVzIGFyZSBub3QgaGFuZGxlZCBieSBWR0FDT04gKi8KLQlpZiAoKE9SSUdfVklERU9fTU9ERSA9PSAweDAwKSB8fAkvKiBTQ1JFRU5fSU5GTyBub3QgaW5pdGlhbGl6ZWQgKi8KLQkgICAgKE9SSUdfVklERU9fTU9ERSA9PSAweDBEKSB8fAkvKiAzMjB4MjAwLzQgKi8KKwlpZiAoKE9SSUdfVklERU9fTU9ERSA9PSAweDBEKSB8fAkvKiAzMjB4MjAwLzQgKi8KIAkgICAgKE9SSUdfVklERU9fTU9ERSA9PSAweDBFKSB8fAkvKiA2NDB4MjAwLzQgKi8KIAkgICAgKE9SSUdfVklERU9fTU9ERSA9PSAweDEwKSB8fAkvKiA2NDB4MzUwLzQgKi8KIAkgICAgKE9SSUdfVklERU9fTU9ERSA9PSAweDEyKSB8fAkvKiA2NDB4NDgwLzQgKi8KQEAgLTU3OCwxMiArNTgxLDE0IEBACiB9CiAKIHN0YXRpYyB1OCB2Z2Fjb25fYnVpbGRfYXR0cihzdHJ1Y3QgdmNfZGF0YSAqYywgdTggY29sb3IsIHU4IGludGVuc2l0eSwKLQkJCSAgICB1OCBibGluaywgdTggdW5kZXJsaW5lLCB1OCByZXZlcnNlKQorCQkJICAgIHU4IGJsaW5rLCB1OCB1bmRlcmxpbmUsIHU4IHJldmVyc2UsIHU4IGl0YWxpYykKIHsKIAl1OCBhdHRyID0gY29sb3I7CiAKIAlpZiAodmdhX2Nhbl9kb19jb2xvcikgewotCQlpZiAodW5kZXJsaW5lKQorCQlpZiAoaXRhbGljKQorCQkJYXR0ciA9IChhdHRyICYgMHhGMCkgfCBjLT52Y19pdGNvbG9yOworCQllbHNlIGlmICh1bmRlcmxpbmUpCiAJCQlhdHRyID0gKGF0dHIgJiAweGYwKSB8IGMtPnZjX3VsY29sb3I7CiAJCWVsc2UgaWYgKGludGVuc2l0eSA9PSAwKQogCQkJYXR0ciA9IChhdHRyICYgMHhmMCkgfCBjLT52Y19oYWxmY29sb3I7CkBAIC01OTcsNyArNjAyLDkgQEAKIAlpZiAoaW50ZW5zaXR5ID09IDIpCiAJCWF0dHIgXj0gMHgwODsKIAlpZiAoIXZnYV9jYW5fZG9fY29sb3IpIHsKLQkJaWYgKHVuZGVybGluZSkKKwkJaWYgKGl0YWxpYykKKwkJCWF0dHIgPSAoYXR0ciAmIDB4RjgpIHwgMHgwMjsKKwkJZWxzZSBpZiAodW5kZXJsaW5lKQogCQkJYXR0ciA9IChhdHRyICYgMHhmOCkgfCAweDAxOwogCQllbHNlIGlmIChpbnRlbnNpdHkgPT0gMCkKIAkJCWF0dHIgPSAoYXR0ciAmIDB4ZjApIHwgMHgwODsKQEAgLTY1OCw2ICs2NjUsOSBAQAogCiBzdGF0aWMgdm9pZCB2Z2Fjb25fY3Vyc29yKHN0cnVjdCB2Y19kYXRhICpjLCBpbnQgbW9kZSkKIHsKKwlpZiAoYy0+dmNfbW9kZSAhPSBLRF9URVhUKQorCQlyZXR1cm47CisKIAl2Z2Fjb25fcmVzdG9yZV9zY3JlZW4oYyk7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKQEAgLTEzMTYsNyArMTMyNiw3IEBACiAJdW5zaWduZWQgbG9uZyBvbGRvOwogCXVuc2lnbmVkIGludCBkZWx0YTsKIAotCWlmICh0IHx8IGIgIT0gYy0+dmNfcm93cyB8fCB2Z2FfaXNfZ2Z4KQorCWlmICh0IHx8IGIgIT0gYy0+dmNfcm93cyB8fCB2Z2FfaXNfZ2Z4IHx8IGMtPnZjX21vZGUgIT0gS0RfVEVYVCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXZnYV9oYXJkc2Nyb2xsX2VuYWJsZWQgfHwgbGluZXMgPj0gYy0+dmNfcm93cyAvIDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Rpc3BsYXkvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vZGlzcGxheS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OWFmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2Rpc3BsYXkvS2NvbmZpZwpAQCAtMCwwICsxLDI0IEBACisjCisjIERpc3BsYXkgZHJpdmVycyBjb25maWd1cmF0aW9uCisjCisKK21lbnUgIkRpc3BsYXkgZGV2aWNlIHN1cHBvcnQiCisKK2NvbmZpZyBESVNQTEFZX1NVUFBPUlQKKwl0cmlzdGF0ZSAiRGlzcGxheSBwYW5lbC9tb25pdG9yIHN1cHBvcnQiCisJLS0taGVscC0tLQorCSAgVGhpcyBmcmFtZXdvcmsgYWRkcyBzdXBwb3J0IGZvciBsb3ctbGV2ZWwgY29udHJvbCBvZiBhIGRpc3BsYXkuCisJICBUaGlzIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHBvd2VyLgorCisJICBFbmFibGUgdGhpcyB0byBiZSBhYmxlIHRvIGNob29zZSB0aGUgZHJpdmVycyBmb3IgY29udHJvbGxpbmcgdGhlCisJICBwaHlzaWNhbCBkaXNwbGF5IHBhbmVsL21vbml0b3Igb24gc29tZSBwbGF0Zm9ybXMuIFRoaXMgbm90IG9ubHkKKwkgIGNvdmVycyBMQ0QgZGlzcGxheXMgZm9yIFBEQXMgYnV0IGFsc28gb3RoZXIgdHlwZXMgb2YgZGlzcGxheXMKKwkgIHN1Y2ggYXMgQ1JULCBUVm91dCBldGMuCisKKwkgIFRvIGhhdmUgc3VwcG9ydCBmb3IgeW91ciBzcGVjaWZpYyBkaXNwbGF5IHBhbmVsIHlvdSB3aWxsIGhhdmUgdG8KKwkgIHNlbGVjdCB0aGUgcHJvcGVyIGRyaXZlcnMgd2hpY2ggZGVwZW5kIG9uIHRoaXMgb3B0aW9uLgorCitjb21tZW50ICJEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBESVNQTEFZX1NVUFBPUlQKKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kaXNwbGF5L01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9kaXNwbGF5L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZWE4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2Rpc3BsYXkvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjIERpc3BsYXkgZHJpdmVycworCitkaXNwbGF5LW9ianMJCQkJOj0gZGlzcGxheS1zeXNmcy5vCisKK29iai0kKENPTkZJR19ESVNQTEFZX1NVUFBPUlQpCQkrPSBkaXNwbGF5Lm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kaXNwbGF5L2Rpc3BsYXktc3lzZnMuYyBiL2RyaXZlcnMvdmlkZW8vZGlzcGxheS9kaXNwbGF5LXN5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0NzcxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vZGlzcGxheS9kaXNwbGF5LXN5c2ZzLmMKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiAgZGlzcGxheS1zeXNmcy5jIC0gRGlzcGxheSBvdXRwdXQgZHJpdmVyIHN5c2ZzIGludGVyZmFjZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSmFtZXMgU2ltbW9ucyA8anNpbW1vbnNAaW5mcmFkZWFkLm9yZz4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Rpc3BsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCitzdGF0aWMgc3NpemVfdCBkaXNwbGF5X3Nob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGlzcGxheV9kZXZpY2UgKmRzcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBkc3AtPm5hbWUpOworfQorCitzdGF0aWMgc3NpemVfdCBkaXNwbGF5X3Nob3dfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGlzcGxheV9kZXZpY2UgKmRzcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBkc3AtPnR5cGUpOworfQorCitzdGF0aWMgc3NpemVfdCBkaXNwbGF5X3Nob3dfY29udHJhc3Qoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRpc3BsYXlfZGV2aWNlICpkc3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzc2l6ZV90IHJjID0gLUVOWElPOworCisJbXV0ZXhfbG9jaygmZHNwLT5sb2NrKTsKKwlpZiAobGlrZWx5KGRzcC0+ZHJpdmVyKSAmJiBkc3AtPmRyaXZlci0+Z2V0X2NvbnRyYXN0KQorCQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGRzcC0+ZHJpdmVyLT5nZXRfY29udHJhc3QoZHNwKSk7CisJbXV0ZXhfdW5sb2NrKCZkc3AtPmxvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIHNzaXplX3QgZGlzcGxheV9zdG9yZV9jb250cmFzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZGlzcGxheV9kZXZpY2UgKmRzcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNzaXplX3QgcmV0ID0gLUVJTlZBTCwgc2l6ZTsKKwlpbnQgY29udHJhc3Q7CisJY2hhciAqZW5kcDsKKworCWNvbnRyYXN0ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7CisJc2l6ZSA9IGVuZHAgLSBidWY7CisKKwlpZiAoKmVuZHAgJiYgaXNzcGFjZSgqZW5kcCkpCisJCXNpemUrKzsKKworCWlmIChzaXplICE9IGNvdW50KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZHNwLT5sb2NrKTsKKwlpZiAobGlrZWx5KGRzcC0+ZHJpdmVyICYmIGRzcC0+ZHJpdmVyLT5zZXRfY29udHJhc3QpKSB7CisJCXByX2RlYnVnKCJkaXNwbGF5OiBzZXQgY29udHJhc3QgdG8gJWRcbiIsIGNvbnRyYXN0KTsKKwkJZHNwLT5kcml2ZXItPnNldF9jb250cmFzdChkc3AsIGNvbnRyYXN0KTsKKwkJcmV0ID0gY291bnQ7CisJfQorCW11dGV4X3VubG9jaygmZHNwLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBkaXNwbGF5X3Nob3dfbWF4X2NvbnRyYXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGlzcGxheV9kZXZpY2UgKmRzcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNzaXplX3QgcmMgPSAtRU5YSU87CisKKwltdXRleF9sb2NrKCZkc3AtPmxvY2spOworCWlmIChsaWtlbHkoZHNwLT5kcml2ZXIpKQorCQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGRzcC0+ZHJpdmVyLT5tYXhfY29udHJhc3QpOworCW11dGV4X3VubG9jaygmZHNwLT5sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkaXNwbGF5X2F0dHJzW10gPSB7CisJX19BVFRSKG5hbWUsIFNfSVJVR08sIGRpc3BsYXlfc2hvd19uYW1lLCBOVUxMKSwKKwlfX0FUVFIodHlwZSwgU19JUlVHTywgZGlzcGxheV9zaG93X3R5cGUsIE5VTEwpLAorCV9fQVRUUihjb250cmFzdCwgU19JUlVHTyB8IFNfSVdVU1IsIGRpc3BsYXlfc2hvd19jb250cmFzdCwgZGlzcGxheV9zdG9yZV9jb250cmFzdCksCisJX19BVFRSKG1heF9jb250cmFzdCwgU19JUlVHTywgZGlzcGxheV9zaG93X21heF9jb250cmFzdCwgTlVMTCksCit9OworCitzdGF0aWMgaW50IGRpc3BsYXlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZGlzcGxheV9kZXZpY2UgKmRzcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbXV0ZXhfbG9jaygmZHNwLT5sb2NrKTsKKwlpZiAobGlrZWx5KGRzcC0+ZHJpdmVyLT5zdXNwZW5kKSkKKwkJZHNwLT5kcml2ZXItPnN1c3BlbmQoZHNwLCBzdGF0ZSk7CisJbXV0ZXhfdW5sb2NrKCZkc3AtPmxvY2spOworCXJldHVybiAwOworfTsKKworc3RhdGljIGludCBkaXNwbGF5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRpc3BsYXlfZGV2aWNlICpkc3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCW11dGV4X2xvY2soJmRzcC0+bG9jayk7CisJaWYgKGxpa2VseShkc3AtPmRyaXZlci0+cmVzdW1lKSkKKwkJZHNwLT5kcml2ZXItPnJlc3VtZShkc3ApOworCW11dGV4X3VubG9jaygmZHNwLT5sb2NrKTsKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggYWxsb2NhdGVkX2RzcF9sb2NrOworc3RhdGljIERFRklORV9JRFIoYWxsb2NhdGVkX2RzcCk7CitzdGF0aWMgc3RydWN0IGNsYXNzICpkaXNwbGF5X2NsYXNzOworCitzdHJ1Y3QgZGlzcGxheV9kZXZpY2UgKmRpc3BsYXlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkaXNwbGF5X2RyaXZlciAqZHJpdmVyLAorCQkJCQkJc3RydWN0IGRldmljZSAqcGFyZW50LCB2b2lkICpkZXZkYXRhKQoreworCXN0cnVjdCBkaXNwbGF5X2RldmljZSAqbmV3X2RldiA9IE5VTEw7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAodW5saWtlbHkoIWRyaXZlcikpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwltdXRleF9sb2NrKCZhbGxvY2F0ZWRfZHNwX2xvY2spOworCXJldCA9IGlkcl9wcmVfZ2V0KCZhbGxvY2F0ZWRfZHNwLCBHRlBfS0VSTkVMKTsKKwltdXRleF91bmxvY2soJmFsbG9jYXRlZF9kc3BfbG9jayk7CisJaWYgKCFyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwluZXdfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRpc3BsYXlfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxpa2VseShuZXdfZGV2KSAmJiB1bmxpa2VseShkcml2ZXItPnByb2JlKG5ld19kZXYsIGRldmRhdGEpKSkgeworCQkvLyBSZXNlcnZlIHRoZSBpbmRleCBmb3IgdGhpcyBkaXNwbGF5CisJCW11dGV4X2xvY2soJmFsbG9jYXRlZF9kc3BfbG9jayk7CisJCXJldCA9IGlkcl9nZXRfbmV3KCZhbGxvY2F0ZWRfZHNwLCBuZXdfZGV2LCAmbmV3X2Rldi0+aWR4KTsKKwkJbXV0ZXhfdW5sb2NrKCZhbGxvY2F0ZWRfZHNwX2xvY2spOworCisJCWlmICghcmV0KSB7CisJCQluZXdfZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKGRpc3BsYXlfY2xhc3MsIHBhcmVudCwgMCwKKwkJCQkJCSJkaXNwbGF5JWQiLCBuZXdfZGV2LT5pZHgpOworCQkJaWYgKCFJU19FUlIobmV3X2Rldi0+ZGV2KSkgeworCQkJCWRldl9zZXRfZHJ2ZGF0YShuZXdfZGV2LT5kZXYsIG5ld19kZXYpOworCQkJCW5ld19kZXYtPnBhcmVudCA9IHBhcmVudDsKKwkJCQluZXdfZGV2LT5kcml2ZXIgPSBkcml2ZXI7CisJCQkJbXV0ZXhfaW5pdCgmbmV3X2Rldi0+bG9jayk7CisJCQkJcmV0dXJuIG5ld19kZXY7CisJCQl9CisJCQltdXRleF9sb2NrKCZhbGxvY2F0ZWRfZHNwX2xvY2spOworCQkJaWRyX3JlbW92ZSgmYWxsb2NhdGVkX2RzcCwgbmV3X2Rldi0+aWR4KTsKKwkJCW11dGV4X3VubG9jaygmYWxsb2NhdGVkX2RzcF9sb2NrKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwl9CisJa2ZyZWUobmV3X2Rldik7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KK0VYUE9SVF9TWU1CT0woZGlzcGxheV9kZXZpY2VfcmVnaXN0ZXIpOworCit2b2lkIGRpc3BsYXlfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGRpc3BsYXlfZGV2aWNlICpkZGV2KQoreworCWlmICghZGRldikKKwkJcmV0dXJuOworCS8vIEZyZWUgZGV2aWNlCisJbXV0ZXhfbG9jaygmZGRldi0+bG9jayk7CisJZGV2aWNlX3VucmVnaXN0ZXIoZGRldi0+ZGV2KTsKKwltdXRleF91bmxvY2soJmRkZXYtPmxvY2spOworCS8vIE1hcmsgZGV2aWNlIGluZGV4IGFzIGF2YWxpYWJsZQorCW11dGV4X2xvY2soJmFsbG9jYXRlZF9kc3BfbG9jayk7CisJaWRyX3JlbW92ZSgmYWxsb2NhdGVkX2RzcCwgZGRldi0+aWR4KTsKKwltdXRleF91bmxvY2soJmFsbG9jYXRlZF9kc3BfbG9jayk7CisJa2ZyZWUoZGRldik7Cit9CitFWFBPUlRfU1lNQk9MKGRpc3BsYXlfZGV2aWNlX3VucmVnaXN0ZXIpOworCitzdGF0aWMgaW50IF9faW5pdCBkaXNwbGF5X2NsYXNzX2luaXQodm9pZCkKK3sKKwlkaXNwbGF5X2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAiZGlzcGxheSIpOworCWlmIChJU19FUlIoZGlzcGxheV9jbGFzcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gY3JlYXRlIGRpc3BsYXkgY2xhc3NcbiIpOworCQlkaXNwbGF5X2NsYXNzID0gTlVMTDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRpc3BsYXlfY2xhc3MtPmRldl9hdHRycyA9IGRpc3BsYXlfYXR0cnM7CisJZGlzcGxheV9jbGFzcy0+c3VzcGVuZCA9IGRpc3BsYXlfc3VzcGVuZDsKKwlkaXNwbGF5X2NsYXNzLT5yZXN1bWUgPSBkaXNwbGF5X3Jlc3VtZTsKKwltdXRleF9pbml0KCZhbGxvY2F0ZWRfZHNwX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZGlzcGxheV9jbGFzc19leGl0KHZvaWQpCit7CisJY2xhc3NfZGVzdHJveShkaXNwbGF5X2NsYXNzKTsKK30KKworbW9kdWxlX2luaXQoZGlzcGxheV9jbGFzc19pbml0KTsKK21vZHVsZV9leGl0KGRpc3BsYXlfY2xhc3NfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRGlzcGxheSBIYXJkd2FyZSBoYW5kbGluZyIpOworTU9EVUxFX0FVVEhPUigiSmFtZXMgU2ltbW9ucyA8anNpbW1vbnNAaW5mcmFkZWFkLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9lcHNvbjEzNTVmYi5jIGIvZHJpdmVycy92aWRlby9lcHNvbjEzNTVmYi5jCmluZGV4IDI5ZTA3YzEuLmNhMmM1NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Vwc29uMTM1NWZiLmMKQEAgLTQwMywxNyArNDAzLDEwIEBACiAKIAogc3RhdGljIHNzaXplX3QKLWVwc29uMTM1NWZiX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKQorZXBzb24xMzU1ZmJfcmVhZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOwogCXVuc2lnbmVkIGxvbmcgcCA9ICpwcG9zOwogCi0JLyogZnJvbSBmYm1lbS5jIGV4Y2VwdCBmb3Igb3VyIG93biBjb3B5XypfdXNlciAqLwotCWlmICghaW5mbyB8fCAhaW5mby0+c2NyZWVuX2Jhc2UpCi0JCXJldHVybiAtRU5PREVWOwotCiAJaWYgKHAgPj0gaW5mby0+Zml4LnNtZW1fbGVuKQogCQlyZXR1cm4gMDsKIAlpZiAoY291bnQgPj0gaW5mby0+Zml4LnNtZW1fbGVuKQpAQCAtNDM0LDIwICs0MjcsMTMgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWVwc29uMTM1NWZiX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsCitlcHNvbjEzNTVmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYnVmLAogCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CiAJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7CiAJaW50IGVycjsKIAogCS8qIGZyb20gZmJtZW0uYyBleGNlcHQgZm9yIG91ciBvd24gY29weV8qX3VzZXIgKi8KLQlpZiAoIWluZm8gfHwgIWluZm8tPnNjcmVlbl9iYXNlKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIGZyb20gZmJtZW0uYyBleGNlcHQgZm9yIG91ciBvd24gY29weV8qX3VzZXIgKi8KIAlpZiAocCA+IGluZm8tPmZpeC5zbWVtX2xlbikKIAkJcmV0dXJuIC1FTk9TUEM7CiAJaWYgKGNvdW50ID49IGluZm8tPmZpeC5zbWVtX2xlbikKQEAgLTY1MCw5ICs2MzYsMTAgQEAKIAl9CiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBlcHNvbjEzNTVfcGFyKSArIHNpemVvZih1MzIpICogMjU2LCAmZGV2LT5kZXYpOwotCWlmICghaW5mbykKKwlpZiAoIWluZm8pIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGJhaWw7CisJfQogCiAJZGVmYXVsdF9wYXIgPSBpbmZvLT5wYXI7CiAJZGVmYXVsdF9wYXItPnJlZ19hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAoRVBTT04xMzU1RkJfUkVHU19QSFlTLCBFUFNPTjEzNTVGQl9SRUdTX0xFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4NjQzZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYwpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEpheWEgS3VtYXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyogdG8gc3VwcG9ydCBkZWZlcnJlZCBJTyAqLworI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisKKy8qIHRoaXMgaXMgdG8gZmluZCBhbmQgcmV0dXJuIHRoZSB2bWFsbG9jLWVkIGZiIHBhZ2VzICovCitzdGF0aWMgc3RydWN0IHBhZ2UqIGZiX2RlZmVycmVkX2lvX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJdW5zaWduZWQgbG9uZyB2YWRkciwgaW50ICp0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJLyogaW5mby0+c2NyZWVuX2Jhc2UgaXMgaW4gU3lzdGVtIFJBTSAqLworCXZvaWQgKnNjcmVlbl9iYXNlID0gKHZvaWQgX19mb3JjZSAqKSBpbmZvLT5zY3JlZW5fYmFzZTsKKworCW9mZnNldCA9ICh2YWRkciAtIHZtYS0+dm1fc3RhcnQpICsgKHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCk7CisJaWYgKG9mZnNldCA+PSBpbmZvLT5maXguc21lbV9sZW4pCisJCXJldHVybiBOT1BBR0VfU0lHQlVTOworCisJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShzY3JlZW5fYmFzZSArIG9mZnNldCk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gTk9QQUdFX09PTTsKKworCWdldF9wYWdlKHBhZ2UpOworCWlmICh0eXBlKQorCQkqdHlwZSA9IFZNX0ZBVUxUX01JTk9SOworCXJldHVybiBwYWdlOworfQorCitpbnQgZmJfZGVmZXJyZWRfaW9fZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJLyogS2lsbCBvZmYgdGhlIGRlbGF5ZWQgd29yayAqLworCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmluZm8tPmRlZmVycmVkX3dvcmspOworCisJLyogUnVuIGl0IGltbWVkaWF0ZWx5ICovCisJcmV0dXJuIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaW5mby0+ZGVmZXJyZWRfd29yaywgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmYl9kZWZlcnJlZF9pb19mc3luYyk7CisKKy8qIHZtX29wcy0+cGFnZV9ta3dyaXRlIGhhbmRsZXIgKi8KK3N0YXRpYyBpbnQgZmJfZGVmZXJyZWRfaW9fbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3RydWN0IGZiX2RlZmVycmVkX2lvICpmYmRlZmlvID0gaW5mby0+ZmJkZWZpbzsKKworCS8qIHRoaXMgaXMgYSBjYWxsYmFjayB3ZSBnZXQgd2hlbiB1c2Vyc3BhY2UgZmlyc3QgdHJpZXMgdG8KKwl3cml0ZSB0byB0aGUgcGFnZS4gd2Ugc2NoZWR1bGUgYSB3b3JrcXVldWUuIHRoYXQgd29ya3F1ZXVlCisJd2lsbCBldmVudHVhbGx5IG1rY2xlYW4gdGhlIHRvdWNoZWQgcGFnZXMgYW5kIGV4ZWN1dGUgdGhlCisJZGVmZXJyZWQgZnJhbWVidWZmZXIgSU8uIHRoZW4gaWYgdXNlcnNwYWNlIHRvdWNoZXMgYSBwYWdlCisJYWdhaW4sIHdlIHJlcGVhdCB0aGUgc2FtZSBzY2hlbWUgKi8KKworCS8qIHByb3RlY3QgYWdhaW5zdCB0aGUgd29ya3F1ZXVlIGNoYW5naW5nIHRoZSBwYWdlIGxpc3QgKi8KKwltdXRleF9sb2NrKCZmYmRlZmlvLT5sb2NrKTsKKwlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmZmJkZWZpby0+cGFnZWxpc3QpOworCW11dGV4X3VubG9jaygmZmJkZWZpby0+bG9jayk7CisKKwkvKiBjb21lIGJhY2sgYWZ0ZXIgZGVsYXkgdG8gcHJvY2VzcyB0aGUgZGVmZXJyZWQgSU8gKi8KKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmluZm8tPmRlZmVycmVkX3dvcmssIGZiZGVmaW8tPmRlbGF5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBmYl9kZWZlcnJlZF9pb192bV9vcHMgPSB7CisJLm5vcGFnZSAgIAk9IGZiX2RlZmVycmVkX2lvX25vcGFnZSwKKwkucGFnZV9ta3dyaXRlCT0gZmJfZGVmZXJyZWRfaW9fbWt3cml0ZSwKK307CisKK3N0YXRpYyBpbnQgZmJfZGVmZXJyZWRfaW9fbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdm1hLT52bV9vcHMgPSAmZmJfZGVmZXJyZWRfaW9fdm1fb3BzOworCXZtYS0+dm1fZmxhZ3MgfD0gKCBWTV9JTyB8IFZNX1JFU0VSVkVEIHwgVk1fRE9OVEVYUEFORCApOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gaW5mbzsKKwlyZXR1cm4gMDsKK30KKworLyogd29ya3F1ZXVlIGNhbGxiYWNrICovCitzdGF0aWMgdm9pZCBmYl9kZWZlcnJlZF9pb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZmJfaW5mbywKKwkJCQkJCWRlZmVycmVkX3dvcmsud29yayk7CisJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CisJc3RydWN0IHBhZ2UgKmN1cjsKKwlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gKmZiZGVmaW8gPSBpbmZvLT5mYmRlZmlvOworCisJLyogaGVyZSB3ZSBta2NsZWFuIHRoZSBwYWdlcywgdGhlbiBkbyBhbGwgZGVmZXJyZWQgSU8gKi8KKwltdXRleF9sb2NrKCZmYmRlZmlvLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgJmZiZGVmaW8tPnBhZ2VsaXN0LCBscnUpIHsKKwkJbG9ja19wYWdlKGN1cik7CisJCXBhZ2VfbWtjbGVhbihjdXIpOworCQl1bmxvY2tfcGFnZShjdXIpOworCX0KKworCS8qIGRyaXZlcidzIGNhbGxiYWNrIHdpdGggcGFnZWxpc3QgKi8KKwlmYmRlZmlvLT5kZWZlcnJlZF9pbyhpbmZvLCAmZmJkZWZpby0+cGFnZWxpc3QpOworCisJLyogY2xlYXIgdGhlIGxpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJmZiZGVmaW8tPnBhZ2VsaXN0KSB7CisJCWxpc3RfZGVsKG5vZGUpOworCX0KKwltdXRleF91bmxvY2soJmZiZGVmaW8tPmxvY2spOworfQorCit2b2lkIGZiX2RlZmVycmVkX2lvX2luaXQoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGZiX2RlZmVycmVkX2lvICpmYmRlZmlvID0gaW5mby0+ZmJkZWZpbzsKKworCUJVR19PTighZmJkZWZpbyk7CisJbXV0ZXhfaW5pdCgmZmJkZWZpby0+bG9jayk7CisJaW5mby0+ZmJvcHMtPmZiX21tYXAgPSBmYl9kZWZlcnJlZF9pb19tbWFwOworCUlOSVRfREVMQVlFRF9XT1JLKCZpbmZvLT5kZWZlcnJlZF93b3JrLCBmYl9kZWZlcnJlZF9pb193b3JrKTsKKwlJTklUX0xJU1RfSEVBRCgmZmJkZWZpby0+cGFnZWxpc3QpOworCWlmIChmYmRlZmlvLT5kZWxheSA9PSAwKSAvKiBzZXQgYSBkZWZhdWx0IG9mIDEgcyAqLworCQlmYmRlZmlvLT5kZWxheSA9IEhaOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZmJfZGVmZXJyZWRfaW9faW5pdCk7CisKK3ZvaWQgZmJfZGVmZXJyZWRfaW9fY2xlYW51cChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gKmZiZGVmaW8gPSBpbmZvLT5mYmRlZmlvOworCisJQlVHX09OKCFmYmRlZmlvKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZpbmZvLT5kZWZlcnJlZF93b3JrKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZmJfZGVmZXJyZWRfaW9fY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJfZHJhdy5oIGIvZHJpdmVycy92aWRlby9mYl9kcmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVjNDUyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJfZHJhdy5oCkBAIC0wLDAgKzEsNzIgQEAKKyNpZm5kZWYgX0ZCX0RSQVdfSAorI2RlZmluZSBfRkJfRFJBV19ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworICAgIC8qCisgICAgICogIENvbXBvc2UgdHdvIHZhbHVlcywgdXNpbmcgYSBiaXRtYXNrIGFzIGRlY2lzaW9uIHZhbHVlCisgICAgICogIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYSAmIG1hc2spIHwgKGIgJiB+bWFzaykKKyAgICAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitjb21wKHVuc2lnbmVkIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgcmV0dXJuICgoYSBeIGIpICYgbWFzaykgXiBiOworfQorCisgICAgLyoKKyAgICAgKiAgQ3JlYXRlIGEgcGF0dGVybiB3aXRoIHRoZSBnaXZlbiBwaXhlbCdzIGNvbG9yCisgICAgICovCisKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3BpeGVsX3RvX3BhdCggdTMyIGJwcCwgdTMyIHBpeGVsKQoreworCXN3aXRjaCAoYnBwKSB7CisJY2FzZSAxOgorCQlyZXR1cm4gMHhmZmZmZmZmZmZmZmZmZmZmdWwqcGl4ZWw7CisJY2FzZSAyOgorCQlyZXR1cm4gMHg1NTU1NTU1NTU1NTU1NTU1dWwqcGl4ZWw7CisJY2FzZSA0OgorCQlyZXR1cm4gMHgxMTExMTExMTExMTExMTExdWwqcGl4ZWw7CisJY2FzZSA4OgorCQlyZXR1cm4gMHgwMTAxMDEwMTAxMDEwMTAxdWwqcGl4ZWw7CisJY2FzZSAxMjoKKwkJcmV0dXJuIDB4MDAwMTAwMTAwMTAwMTAwMXVsKnBpeGVsOworCWNhc2UgMTY6CisJCXJldHVybiAweDAwMDEwMDAxMDAwMTAwMDF1bCpwaXhlbDsKKwljYXNlIDI0OgorCQlyZXR1cm4gMHgwMDAwMDAwMDAxMDAwMDAxdWwqcGl4ZWw7CisJY2FzZSAzMjoKKwkJcmV0dXJuIDB4MDAwMDAwMDEwMDAwMDAwMXVsKnBpeGVsOworCWRlZmF1bHQ6CisJCXBhbmljKCJwaXhlbF90b19wYXQoKTogdW5zdXBwb3J0ZWQgcGl4ZWxmb3JtYXRcbiIpOworICAgIH0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3BpeGVsX3RvX3BhdCggdTMyIGJwcCwgdTMyIHBpeGVsKQoreworCXN3aXRjaCAoYnBwKSB7CisJY2FzZSAxOgorCQlyZXR1cm4gMHhmZmZmZmZmZnVsKnBpeGVsOworCWNhc2UgMjoKKwkJcmV0dXJuIDB4NTU1NTU1NTV1bCpwaXhlbDsKKwljYXNlIDQ6CisJCXJldHVybiAweDExMTExMTExdWwqcGl4ZWw7CisJY2FzZSA4OgorCQlyZXR1cm4gMHgwMTAxMDEwMXVsKnBpeGVsOworCWNhc2UgMTI6CisJCXJldHVybiAweDAwMDAxMDAxdWwqcGl4ZWw7CisJY2FzZSAxNjoKKwkJcmV0dXJuIDB4MDAwMTAwMDF1bCpwaXhlbDsKKwljYXNlIDI0OgorCQlyZXR1cm4gMHgwMDAwMDAwMXVsKnBpeGVsOworCWNhc2UgMzI6CisJCXJldHVybiAweDAwMDAwMDAxdWwqcGl4ZWw7CisJZGVmYXVsdDoKKwkJcGFuaWMoInBpeGVsX3RvX3BhdCgpOiB1bnN1cHBvcnRlZCBwaXhlbGZvcm1hdFxuIik7CisgICAgfQorfQorI2VuZGlmCisjZW5kaWYgLyogRkJfRFJBV19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiX3N5c19mb3BzLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiX3N5c19mb3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyNTM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJfc3lzX2ZvcHMuYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvdmlkZW8vZmJfc3lzX3JlYWQuYyAtIEdlbmVyaWMgZmlsZSBvcGVyYXRpb25zIHdoZXJlCisgKiBmcmFtZWJ1ZmZlciBpcyBpbiBzeXN0ZW0gUkFNCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFudG9uaW5vIERhcGxhcyA8YWRhcGxhc0Bwb2wubmV0PgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKK3NzaXplX3QgZmJfc3lzX3JlYWQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJICAgIGxvZmZfdCAqcHBvcykKK3sKKwl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKKwl2b2lkICpzcmM7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm4gLUVQRVJNOworCisJdG90YWxfc2l6ZSA9IGluZm8tPnNjcmVlbl9zaXplOworCisJaWYgKHRvdGFsX3NpemUgPT0gMCkKKwkJdG90YWxfc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKworCWlmIChwID49IHRvdGFsX3NpemUpCisJCXJldHVybiAwOworCisJaWYgKGNvdW50ID49IHRvdGFsX3NpemUpCisJCWNvdW50ID0gdG90YWxfc2l6ZTsKKworCWlmIChjb3VudCArIHAgPiB0b3RhbF9zaXplKQorCQljb3VudCA9IHRvdGFsX3NpemUgLSBwOworCisJc3JjID0gKHZvaWQgX19mb3JjZSAqKShpbmZvLT5zY3JlZW5fYmFzZSArIHApOworCisJaWYgKGluZm8tPmZib3BzLT5mYl9zeW5jKQorCQlpbmZvLT5mYm9wcy0+ZmJfc3luYyhpbmZvKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBzcmMsIGNvdW50KSkKKwkJZXJyID0gLUVGQVVMVDsKKworCWlmICAoIWVycikKKwkJKnBwb3MgKz0gY291bnQ7CisKKwlyZXR1cm4gKGVycikgPyBlcnIgOiBjb3VudDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZiX3N5c19yZWFkKTsKKworc3NpemVfdCBmYl9zeXNfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7CisJdm9pZCAqZHN0OworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgdG90YWxfc2l6ZTsKKworCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKKwkJcmV0dXJuIC1FUEVSTTsKKworCXRvdGFsX3NpemUgPSBpbmZvLT5zY3JlZW5fc2l6ZTsKKworCWlmICh0b3RhbF9zaXplID09IDApCisJCXRvdGFsX3NpemUgPSBpbmZvLT5maXguc21lbV9sZW47CisKKwlpZiAocCA+IHRvdGFsX3NpemUpCisJCXJldHVybiAtRUZCSUc7CisKKwlpZiAoY291bnQgPiB0b3RhbF9zaXplKSB7CisJCWVyciA9IC1FRkJJRzsKKwkJY291bnQgPSB0b3RhbF9zaXplOworCX0KKworCWlmIChjb3VudCArIHAgPiB0b3RhbF9zaXplKSB7CisJCWlmICghZXJyKQorCQkJZXJyID0gLUVOT1NQQzsKKworCQljb3VudCA9IHRvdGFsX3NpemUgLSBwOworCX0KKworCWRzdCA9ICh2b2lkIF9fZm9yY2UgKikgKGluZm8tPnNjcmVlbl9iYXNlICsgcCk7CisKKwlpZiAoaW5mby0+ZmJvcHMtPmZiX3N5bmMpCisJCWluZm8tPmZib3BzLT5mYl9zeW5jKGluZm8pOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGRzdCwgYnVmLCBjb3VudCkpCisJCWVyciA9IC1FRkFVTFQ7CisKKwlpZiAgKCFlcnIpCisJCSpwcG9zICs9IGNvdW50OworCisJcmV0dXJuIChlcnIpID8gZXJyIDogY291bnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmYl9zeXNfd3JpdGUpOworCitNT0RVTEVfQVVUSE9SKCJBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXNAcG9sLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBmaWxlIHJlYWQgKGZiIGluIHN5c3RlbSBSQU0pIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggMjgyMjUyNi4uMzhjMmUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMzU0LDU5ICszNTQsNTkgQEAKIAlpZiAocm90YXRlID09IEZCX1JPVEFURV9VRCkgewogCQlmYl9yb3RhdGVfbG9nb191ZChpbWFnZS0+ZGF0YSwgZHN0LCBpbWFnZS0+d2lkdGgsCiAJCQkJICBpbWFnZS0+aGVpZ2h0KTsKLQkJaW1hZ2UtPmR4ID0gaW5mby0+dmFyLnhyZXMgLSBpbWFnZS0+d2lkdGg7Ci0JCWltYWdlLT5keSA9IGluZm8tPnZhci55cmVzIC0gaW1hZ2UtPmhlaWdodDsKKwkJaW1hZ2UtPmR4ID0gaW5mby0+dmFyLnhyZXMgLSBpbWFnZS0+d2lkdGggLSBpbWFnZS0+ZHg7CisJCWltYWdlLT5keSA9IGluZm8tPnZhci55cmVzIC0gaW1hZ2UtPmhlaWdodCAtIGltYWdlLT5keTsKIAl9IGVsc2UgaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfQ1cpIHsKIAkJZmJfcm90YXRlX2xvZ29fY3coaW1hZ2UtPmRhdGEsIGRzdCwgaW1hZ2UtPndpZHRoLAogCQkJCSAgaW1hZ2UtPmhlaWdodCk7CiAJCXRtcCA9IGltYWdlLT53aWR0aDsKIAkJaW1hZ2UtPndpZHRoID0gaW1hZ2UtPmhlaWdodDsKIAkJaW1hZ2UtPmhlaWdodCA9IHRtcDsKLQkJaW1hZ2UtPmR4ID0gaW5mby0+dmFyLnhyZXMgLSBpbWFnZS0+d2lkdGg7CisJCXRtcCA9IGltYWdlLT5keTsKKwkJaW1hZ2UtPmR5ID0gaW1hZ2UtPmR4OworCQlpbWFnZS0+ZHggPSBpbmZvLT52YXIueHJlcyAtIGltYWdlLT53aWR0aCAtIHRtcDsKIAl9IGVsc2UgaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfQ0NXKSB7CiAJCWZiX3JvdGF0ZV9sb2dvX2NjdyhpbWFnZS0+ZGF0YSwgZHN0LCBpbWFnZS0+d2lkdGgsCiAJCQkJICAgaW1hZ2UtPmhlaWdodCk7CiAJCXRtcCA9IGltYWdlLT53aWR0aDsKIAkJaW1hZ2UtPndpZHRoID0gaW1hZ2UtPmhlaWdodDsKIAkJaW1hZ2UtPmhlaWdodCA9IHRtcDsKLQkJaW1hZ2UtPmR5ID0gaW5mby0+dmFyLnlyZXMgLSBpbWFnZS0+aGVpZ2h0OworCQl0bXAgPSBpbWFnZS0+ZHg7CisJCWltYWdlLT5keCA9IGltYWdlLT5keTsKKwkJaW1hZ2UtPmR5ID0gaW5mby0+dmFyLnlyZXMgLSBpbWFnZS0+aGVpZ2h0IC0gdG1wOwogCX0KIAogCWltYWdlLT5kYXRhID0gZHN0OwogfQogCiBzdGF0aWMgdm9pZCBmYl9kb19zaG93X2xvZ28oc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UsCi0JCQkgICAgaW50IHJvdGF0ZSkKKwkJCSAgICBpbnQgcm90YXRlLCB1bnNpZ25lZCBpbnQgbnVtKQogewotCWludCB4OworCXVuc2lnbmVkIGludCB4OwogCiAJaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfVVIpIHsKLQkJZm9yICh4ID0gMDsgeCA8IG51bV9vbmxpbmVfY3B1cygpICYmCi0JCQkgICAgIHggKiAoZmJfbG9nby5sb2dvLT53aWR0aCArIDgpIDw9Ci0JCQkgICAgIGluZm8tPnZhci54cmVzIC0gZmJfbG9nby5sb2dvLT53aWR0aDsgeCsrKSB7CisJCWZvciAoeCA9IDA7CisJCSAgICAgeCA8IG51bSAmJiBpbWFnZS0+ZHggKyBpbWFnZS0+d2lkdGggPD0gaW5mby0+dmFyLnhyZXM7CisJCSAgICAgeCsrKSB7CiAJCQlpbmZvLT5mYm9wcy0+ZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKLQkJCWltYWdlLT5keCArPSBmYl9sb2dvLmxvZ28tPndpZHRoICsgODsKKwkJCWltYWdlLT5keCArPSBpbWFnZS0+d2lkdGggKyA4OwogCQl9CiAJfSBlbHNlIGlmIChyb3RhdGUgPT0gRkJfUk9UQVRFX1VEKSB7Ci0JCWZvciAoeCA9IDA7IHggPCBudW1fb25saW5lX2NwdXMoKSAmJgotCQkJICAgICB4ICogKGZiX2xvZ28ubG9nby0+d2lkdGggKyA4KSA8PQotCQkJICAgICBpbmZvLT52YXIueHJlcyAtIGZiX2xvZ28ubG9nby0+d2lkdGg7IHgrKykgeworCQlmb3IgKHggPSAwOyB4IDwgbnVtICYmIGltYWdlLT5keCA+PSAwOyB4KyspIHsKIAkJCWluZm8tPmZib3BzLT5mYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwotCQkJaW1hZ2UtPmR4IC09IGZiX2xvZ28ubG9nby0+d2lkdGggKyA4OworCQkJaW1hZ2UtPmR4IC09IGltYWdlLT53aWR0aCArIDg7CiAJCX0KIAl9IGVsc2UgaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfQ1cpIHsKLQkJZm9yICh4ID0gMDsgeCA8IG51bV9vbmxpbmVfY3B1cygpICYmCi0JCQkgICAgIHggKiAoZmJfbG9nby5sb2dvLT53aWR0aCArIDgpIDw9Ci0JCQkgICAgIGluZm8tPnZhci55cmVzIC0gZmJfbG9nby5sb2dvLT53aWR0aDsgeCsrKSB7CisJCWZvciAoeCA9IDA7CisJCSAgICAgeCA8IG51bSAmJiBpbWFnZS0+ZHkgKyBpbWFnZS0+aGVpZ2h0IDw9IGluZm8tPnZhci55cmVzOworCQkgICAgIHgrKykgewogCQkJaW5mby0+ZmJvcHMtPmZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7Ci0JCQlpbWFnZS0+ZHkgKz0gZmJfbG9nby5sb2dvLT53aWR0aCArIDg7CisJCQlpbWFnZS0+ZHkgKz0gaW1hZ2UtPmhlaWdodCArIDg7CiAJCX0KIAl9IGVsc2UgaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfQ0NXKSB7Ci0JCWZvciAoeCA9IDA7IHggPCBudW1fb25saW5lX2NwdXMoKSAmJgotCQkJICAgICB4ICogKGZiX2xvZ28ubG9nby0+d2lkdGggKyA4KSA8PQotCQkJICAgICBpbmZvLT52YXIueXJlcyAtIGZiX2xvZ28ubG9nby0+d2lkdGg7IHgrKykgeworCQlmb3IgKHggPSAwOyB4IDwgbnVtICYmIGltYWdlLT5keSA+PSAwOyB4KyspIHsKIAkJCWluZm8tPmZib3BzLT5mYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwotCQkJaW1hZ2UtPmR5IC09IGZiX2xvZ28ubG9nby0+d2lkdGggKyA4OworCQkJaW1hZ2UtPmR5IC09IGltYWdlLT5oZWlnaHQgKyA4OwogCQl9CiAJfQogfQpAQCAtNDE4LDcgKzQxOCw4IEBACiAKIAltZW1zZXQoJmZiX2xvZ28sIDAsIHNpemVvZihzdHJ1Y3QgbG9nb19kYXRhKSk7CiAKLQlpZiAoaW5mby0+ZmxhZ3MgJiBGQklORk9fTUlTQ19USUxFQkxJVFRJTkcpCisJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX01JU0NfVElMRUJMSVRUSU5HIHx8CisJICAgIGluZm8tPmZsYWdzICYgRkJJTkZPX01PRFVMRSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfRElSRUNUQ09MT1IpIHsKQEAgLTQ4Myw3ICs0ODQsOCBAQAogCXN0cnVjdCBmYl9pbWFnZSBpbWFnZTsKIAogCS8qIFJldHVybiBpZiB0aGUgZnJhbWUgYnVmZmVyIGlzIG5vdCBtYXBwZWQgb3Igc3VzcGVuZGVkICovCi0JaWYgKGZiX2xvZ28ubG9nbyA9PSBOVUxMIHx8IGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCWlmIChmYl9sb2dvLmxvZ28gPT0gTlVMTCB8fCBpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORyB8fAorCSAgICBpbmZvLT5mbGFncyAmIEZCSU5GT19NT0RVTEUpCiAJCXJldHVybiAwOwogCiAJaW1hZ2UuZGVwdGggPSA4OwpAQCAtNTMyLDcgKzUzNCw3IEBACiAJCQlmYl9yb3RhdGVfbG9nbyhpbmZvLCBsb2dvX3JvdGF0ZSwgJmltYWdlLCByb3RhdGUpOwogCX0KIAotCWZiX2RvX3Nob3dfbG9nbyhpbmZvLCAmaW1hZ2UsIHJvdGF0ZSk7CisJZmJfZG9fc2hvd19sb2dvKGluZm8sICZpbWFnZSwgcm90YXRlLCBudW1fb25saW5lX2NwdXMoKSk7CiAKIAlrZnJlZShwYWxldHRlKTsKIAlpZiAoc2F2ZWRfcHNldWRvX3BhbGV0dGUgIT0gTlVMTCkKQEAgLTU4Niw3ICs1ODgsNyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKGluZm8tPmZib3BzLT5mYl9yZWFkKQotCQlyZXR1cm4gaW5mby0+ZmJvcHMtPmZiX3JlYWQoZmlsZSwgYnVmLCBjb3VudCwgcHBvcyk7CisJCXJldHVybiBpbmZvLT5mYm9wcy0+ZmJfcmVhZChpbmZvLCBidWYsIGNvdW50LCBwcG9zKTsKIAkKIAl0b3RhbF9zaXplID0gaW5mby0+c2NyZWVuX3NpemU7CiAKQEAgLTY2MSw3ICs2NjMsNyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKGluZm8tPmZib3BzLT5mYl93cml0ZSkKLQkJcmV0dXJuIGluZm8tPmZib3BzLT5mYl93cml0ZShmaWxlLCBidWYsIGNvdW50LCBwcG9zKTsKKwkJcmV0dXJuIGluZm8tPmZib3BzLT5mYl93cml0ZShpbmZvLCBidWYsIGNvdW50LCBwcG9zKTsKIAkKIAl0b3RhbF9zaXplID0gaW5mby0+c2NyZWVuX3NpemU7CiAKQEAgLTc3MSwxNCArNzczLDM3IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZiX2NoZWNrX2NhcHMoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJIHUzMiBhY3RpdmF0ZSkKK3sKKwlzdHJ1Y3QgZmJfZXZlbnQgZXZlbnQ7CisJc3RydWN0IGZiX2JsaXRfY2FwcyBjYXBzLCBmYmNhcHM7CisJaW50IGVyciA9IDA7CisKKwltZW1zZXQoJmNhcHMsIDAsIHNpemVvZihjYXBzKSk7CisJbWVtc2V0KCZmYmNhcHMsIDAsIHNpemVvZihmYmNhcHMpKTsKKwljYXBzLmZsYWdzID0gKGFjdGl2YXRlICYgRkJfQUNUSVZBVEVfQUxMKSA/IDEgOiAwOworCWV2ZW50LmluZm8gPSBpbmZvOworCWV2ZW50LmRhdGEgPSAmY2FwczsKKwlmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX0dFVF9SRVEsICZldmVudCk7CisJaW5mby0+ZmJvcHMtPmZiX2dldF9jYXBzKGluZm8sICZmYmNhcHMsIHZhcik7CisKKwlpZiAoKChmYmNhcHMueCBeIGNhcHMueCkgJiBjYXBzLngpIHx8CisJICAgICgoZmJjYXBzLnkgXiBjYXBzLnkpICYgY2Fwcy55KSB8fAorCSAgICAoZmJjYXBzLmxlbiA8IGNhcHMubGVuKSkKKwkJZXJyID0gLUVJTlZBTDsKKworCXJldHVybiBlcnI7Cit9CisKIGludAogZmJfc2V0X3ZhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCiB7Ci0JaW50IGVyciwgZmxhZ3MgPSBpbmZvLT5mbGFnczsKKwlpbnQgZmxhZ3MgPSBpbmZvLT5mbGFnczsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICh2YXItPmFjdGl2YXRlICYgRkJfQUNUSVZBVEVfSU5WX01PREUpIHsKIAkJc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlMSwgbW9kZTI7Ci0JCWludCByZXQgPSAwOwogCiAJCWZiX3Zhcl90b192aWRlb21vZGUoJm1vZGUxLCB2YXIpOwogCQlmYl92YXJfdG9fdmlkZW9tb2RlKCZtb2RlMiwgJmluZm8tPnZhcik7CkBAIC03OTYsNDAgKzgyMSw1MSBAQAogCQlpZiAoIXJldCkKIAkJICAgIGZiX2RlbGV0ZV92aWRlb21vZGUoJm1vZGUxLCAmaW5mby0+bW9kZWxpc3QpOwogCi0JCXJldHVybiByZXQ7CisKKwkJcmV0ID0gKHJldCkgPyAtRUlOVkFMIDogMDsKKwkJZ290byBkb25lOwogCX0KIAogCWlmICgodmFyLT5hY3RpdmF0ZSAmIEZCX0FDVElWQVRFX0ZPUkNFKSB8fAogCSAgICBtZW1jbXAoJmluZm8tPnZhciwgdmFyLCBzaXplb2Yoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvKSkpIHsKKwkJdTMyIGFjdGl2YXRlID0gdmFyLT5hY3RpdmF0ZTsKKwogCQlpZiAoIWluZm8tPmZib3BzLT5mYl9jaGVja192YXIpIHsKIAkJCSp2YXIgPSBpbmZvLT52YXI7Ci0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCi0JCWlmICgoZXJyID0gaW5mby0+ZmJvcHMtPmZiX2NoZWNrX3Zhcih2YXIsIGluZm8pKSkKLQkJCXJldHVybiBlcnI7CisJCXJldCA9IGluZm8tPmZib3BzLT5mYl9jaGVja192YXIodmFyLCBpbmZvKTsKKworCQlpZiAocmV0KQorCQkJZ290byBkb25lOwogCiAJCWlmICgodmFyLT5hY3RpdmF0ZSAmIEZCX0FDVElWQVRFX01BU0spID09IEZCX0FDVElWQVRFX05PVykgewogCQkJc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlOwotCQkJaW50IGVyciA9IDA7CisKKwkJCWlmIChpbmZvLT5mYm9wcy0+ZmJfZ2V0X2NhcHMpIHsKKwkJCQlyZXQgPSBmYl9jaGVja19jYXBzKGluZm8sIHZhciwgYWN0aXZhdGUpOworCisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBkb25lOworCQkJfQogCiAJCQlpbmZvLT52YXIgPSAqdmFyOworCiAJCQlpZiAoaW5mby0+ZmJvcHMtPmZiX3NldF9wYXIpCiAJCQkJaW5mby0+ZmJvcHMtPmZiX3NldF9wYXIoaW5mbyk7CiAKIAkJCWZiX3Bhbl9kaXNwbGF5KGluZm8sICZpbmZvLT52YXIpOwotCiAJCQlmYl9zZXRfY21hcCgmaW5mby0+Y21hcCwgaW5mbyk7Ci0KIAkJCWZiX3Zhcl90b192aWRlb21vZGUoJm1vZGUsICZpbmZvLT52YXIpOwogCiAJCQlpZiAoaW5mby0+bW9kZWxpc3QucHJldiAmJiBpbmZvLT5tb2RlbGlzdC5uZXh0ICYmCiAJCQkgICAgIWxpc3RfZW1wdHkoJmluZm8tPm1vZGVsaXN0KSkKLQkJCQllcnIgPSBmYl9hZGRfdmlkZW9tb2RlKCZtb2RlLCAmaW5mby0+bW9kZWxpc3QpOworCQkJCXJldCA9IGZiX2FkZF92aWRlb21vZGUoJm1vZGUsICZpbmZvLT5tb2RlbGlzdCk7CiAKLQkJCWlmICghZXJyICYmIChmbGFncyAmIEZCSU5GT19NSVNDX1VTRVJFVkVOVCkpIHsKKwkJCWlmICghcmV0ICYmIChmbGFncyAmIEZCSU5GT19NSVNDX1VTRVJFVkVOVCkpIHsKIAkJCQlzdHJ1Y3QgZmJfZXZlbnQgZXZlbnQ7Ci0JCQkJaW50IGV2bnQgPSAodmFyLT5hY3RpdmF0ZSAmIEZCX0FDVElWQVRFX0FMTCkgPworCQkJCWludCBldm50ID0gKGFjdGl2YXRlICYgRkJfQUNUSVZBVEVfQUxMKSA/CiAJCQkJCUZCX0VWRU5UX01PREVfQ0hBTkdFX0FMTCA6CiAJCQkJCUZCX0VWRU5UX01PREVfQ0hBTkdFOwogCkBAIC04MzksNyArODc1LDkgQEAKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gMDsKKworIGRvbmU6CisJcmV0dXJuIHJldDsKIH0KIAogaW50CkBAIC0xMTk4LDYgKzEyMzYsMTAgQEAKIAlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9OT19DQUNIRTsKICNlbGlmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX3NoX18pIHx8IGRlZmluZWQoX19tMzJyX18pCiAJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0+dm1fcGFnZV9wcm90KTsKKyNlbGlmIGRlZmluZWQoX19hdnIzMl9fKQorCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QoKHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpCisJCQkJICAgICAgJiB+X1BBR0VfQ0FDSEFCTEUpCisJCQkJICAgICB8IChfUEFHRV9CVUZGRVIgfCBfUEFHRV9ESVJUWSkpOwogI2VsaWYgZGVmaW5lZChfX2lhNjRfXykKIAlpZiAoZWZpX3JhbmdlX2lzX3djKHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkpCiAJCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWEtPnZtX3BhZ2VfcHJvdCk7CkBAIC0xMjY2LDYgKzEzMDgsOSBAQAogI2lmZGVmIEhBVkVfQVJDSF9GQl9VTk1BUFBFRF9BUkVBCiAJLmdldF91bm1hcHBlZF9hcmVhID0gZ2V0X2ZiX3VubWFwcGVkX2FyZWEsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfRkJfREVGRVJSRURfSU8KKwkuZnN5bmMgPQlmYl9kZWZlcnJlZF9pb19mc3luYywKKyNlbmRpZgogfTsKIAogc3RydWN0IGNsYXNzICpmYl9jbGFzczsKQEAgLTEzMTYsNiArMTM2MSwxMiBAQAogCX0JCiAJZmJfaW5mby0+cGl4bWFwLm9mZnNldCA9IDA7CiAKKwlpZiAoIWZiX2luZm8tPnBpeG1hcC5ibGl0X3gpCisJCWZiX2luZm8tPnBpeG1hcC5ibGl0X3ggPSB+KHUzMikwOworCisJaWYgKCFmYl9pbmZvLT5waXhtYXAuYmxpdF95KQorCQlmYl9pbmZvLT5waXhtYXAuYmxpdF95ID0gfih1MzIpMDsKKwogCWlmICghZmJfaW5mby0+bW9kZWxpc3QucHJldiB8fCAhZmJfaW5mby0+bW9kZWxpc3QubmV4dCkKIAkJSU5JVF9MSVNUX0hFQUQoJmZiX2luZm8tPm1vZGVsaXN0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1vbi5jIGIvZHJpdmVycy92aWRlby9mYm1vbi5jCmluZGV4IDZiMzg1YzMuLjQzOGI5NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibW9uLmMKQEAgLTQ4LDggKzQ4LDkgQEAKICNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAotI2RlZmluZSBGQk1PTl9GSVhfSEVBREVSIDEKLSNkZWZpbmUgRkJNT05fRklYX0lOUFVUICAyCisjZGVmaW5lIEZCTU9OX0ZJWF9IRUFERVIgIDEKKyNkZWZpbmUgRkJNT05fRklYX0lOUFVUICAgMgorI2RlZmluZSBGQk1PTl9GSVhfVElNSU5HUyAzCiAKICNpZmRlZiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTCiBzdHJ1Y3QgYnJva2VuX2VkaWQgewpAQCAtNzEsNiArNzIsMTIgQEAKIAkJLm1vZGVsICAgICAgICA9IDB4NWE0NCwKIAkJLmZpeCAgICAgICAgICA9IEZCTU9OX0ZJWF9JTlBVVCwKIAl9LAorCS8qIFNoYXJwIFVYR0E/ICovCisJeworCQkubWFudWZhY3R1cmVyID0gIlNIUCIsCisJCS5tb2RlbCAgICAgICAgPSAweDEzOGUsCisJCS5maXggICAgICAgICAgPSBGQk1PTl9GSVhfVElNSU5HUywKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZWRpZF92MV9oZWFkZXJbXSA9IHsgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwKQEAgLTg3LDYgKzk0LDU1IEBACiAgIHdoaWxlIChpLS0gJiYgKCotLXMgPT0gMHgyMCkpICpzID0gMDsKIH0KIAorc3RhdGljIGludCBlZGlkX2lzX3NlcmlhbF9ibG9jayh1bnNpZ25lZCBjaGFyICpibG9jaykKK3sKKwlpZiAoKGJsb2NrWzBdID09IDB4MDApICYmIChibG9ja1sxXSA9PSAweDAwKSAmJgorCSAgICAoYmxvY2tbMl0gPT0gMHgwMCkgJiYgKGJsb2NrWzNdID09IDB4ZmYpICYmCisJICAgIChibG9ja1s0XSA9PSAweDAwKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZGlkX2lzX2FzY2lpX2Jsb2NrKHVuc2lnbmVkIGNoYXIgKmJsb2NrKQoreworCWlmICgoYmxvY2tbMF0gPT0gMHgwMCkgJiYgKGJsb2NrWzFdID09IDB4MDApICYmCisJICAgIChibG9ja1syXSA9PSAweDAwKSAmJiAoYmxvY2tbM10gPT0gMHhmZSkgJiYKKwkgICAgKGJsb2NrWzRdID09IDB4MDApKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVkaWRfaXNfbGltaXRzX2Jsb2NrKHVuc2lnbmVkIGNoYXIgKmJsb2NrKQoreworCWlmICgoYmxvY2tbMF0gPT0gMHgwMCkgJiYgKGJsb2NrWzFdID09IDB4MDApICYmCisJICAgIChibG9ja1syXSA9PSAweDAwKSAmJiAoYmxvY2tbM10gPT0gMHhmZCkgJiYKKwkgICAgKGJsb2NrWzRdID09IDB4MDApKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVkaWRfaXNfbW9uaXRvcl9ibG9jayh1bnNpZ25lZCBjaGFyICpibG9jaykKK3sKKwlpZiAoKGJsb2NrWzBdID09IDB4MDApICYmIChibG9ja1sxXSA9PSAweDAwKSAmJgorCSAgICAoYmxvY2tbMl0gPT0gMHgwMCkgJiYgKGJsb2NrWzNdID09IDB4ZmMpICYmCisJICAgIChibG9ja1s0XSA9PSAweDAwKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZGlkX2lzX3RpbWluZ19ibG9jayh1bnNpZ25lZCBjaGFyICpibG9jaykKK3sKKwlpZiAoKGJsb2NrWzBdICE9IDB4MDApIHx8IChibG9ja1sxXSAhPSAweDAwKSB8fAorCSAgICAoYmxvY2tbMl0gIT0gMHgwMCkgfHwgKGJsb2NrWzRdICE9IDB4MDApKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGNoZWNrX2VkaWQodW5zaWduZWQgY2hhciAqZWRpZCkKIHsKIAl1bnNpZ25lZCBjaGFyICpibG9jayA9IGVkaWQgKyBJRF9NQU5VRkFDVFVSRVJfTkFNRSwgbWFudWZhY3R1cmVyWzRdOwpAQCAtMTA0LDkgKzE2MCw2IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnJva2VuZGIpOyBpKyspIHsKIAkJaWYgKCFzdHJuY21wKG1hbnVmYWN0dXJlciwgYnJva2VuZGJbaV0ubWFudWZhY3R1cmVyLCA0KSAmJgogCQkJYnJva2VuZGJbaV0ubW9kZWwgPT0gbW9kZWwpIHsKLQkJCXByaW50aygiZmJtb246IFRoZSBFRElEIEJsb2NrIG9mICIKLQkJCSAgICAgICAiTWFudWZhY3R1cmVyOiAlcyBNb2RlbDogMHgleCBpcyBrbm93biB0byAiCi0JCQkgICAgICAgImJlIGJyb2tlbixcbiIsICBtYW51ZmFjdHVyZXIsIG1vZGVsKTsKICAJCQlmaXggPSBicm9rZW5kYltpXS5maXg7CiAgCQkJYnJlYWs7CiAJCX0KQEAgLTExNSw4ICsxNjgsMTAgQEAKIAlzd2l0Y2ggKGZpeCkgewogCWNhc2UgRkJNT05fRklYX0hFQURFUjoKIAkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkJaWYgKGVkaWRbaV0gIT0gZWRpZF92MV9oZWFkZXJbaV0pCisJCQlpZiAoZWRpZFtpXSAhPSBlZGlkX3YxX2hlYWRlcltpXSkgewogCQkJCXJldCA9IGZpeDsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCQlicmVhazsKIAljYXNlIEZCTU9OX0ZJWF9JTlBVVDoKQEAgLTEyNiwxNCArMTgxLDM0IEBACiAJCWlmIChiWzRdICYgMHgwMSAmJiBiWzBdICYgMHg4MCkKIAkJCXJldCA9IGZpeDsKIAkJYnJlYWs7CisJY2FzZSBGQk1PTl9GSVhfVElNSU5HUzoKKwkJYiA9IGVkaWQgKyBERVRBSUxFRF9USU1JTkdfREVTQ1JJUFRJT05TX1NUQVJUOworCQlyZXQgPSBmaXg7CisKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJaWYgKGVkaWRfaXNfbGltaXRzX2Jsb2NrKGIpKSB7CisJCQkJcmV0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYiArPSBERVRBSUxFRF9USU1JTkdfREVTQ1JJUFRJT05fU0laRTsKKwkJfQorCisJCWJyZWFrOwogCX0KIAorCWlmIChyZXQpCisJCXByaW50aygiZmJtb246IFRoZSBFRElEIEJsb2NrIG9mICIKKwkJICAgICAgICJNYW51ZmFjdHVyZXI6ICVzIE1vZGVsOiAweCV4IGlzIGtub3duIHRvICIKKwkJICAgICAgICJiZSBicm9rZW4sXG4iLCAgbWFudWZhY3R1cmVyLCBtb2RlbCk7CisKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBmaXhfZWRpZCh1bnNpZ25lZCBjaGFyICplZGlkLCBpbnQgZml4KQogewotCXVuc2lnbmVkIGNoYXIgKmI7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqYiwgY3N1bSA9IDA7CiAKIAlzd2l0Y2ggKGZpeCkgewogCWNhc2UgRkJNT05fRklYX0hFQURFUjoKQEAgLTE0NSw2ICsyMjAsMzcgQEAKIAkJYiA9IGVkaWQgKyBFRElEX1NUUlVDVF9ESVNQTEFZOwogCQliWzBdICY9IH4weDgwOwogCQllZGlkWzEyN10gKz0gMHg4MDsKKwkJYnJlYWs7CisJY2FzZSBGQk1PTl9GSVhfVElNSU5HUzoKKwkJcHJpbnRrKCJmYm1vbjogdHJ5aW5nIHRvIGZpeCBtb25pdG9yIHRpbWluZ3NcbiIpOworCQliID0gZWRpZCArIERFVEFJTEVEX1RJTUlOR19ERVNDUklQVElPTlNfU1RBUlQ7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCWlmICghKGVkaWRfaXNfc2VyaWFsX2Jsb2NrKGIpIHx8CisJCQkgICAgICBlZGlkX2lzX2FzY2lpX2Jsb2NrKGIpIHx8CisJCQkgICAgICBlZGlkX2lzX21vbml0b3JfYmxvY2soYikgfHwKKwkJCSAgICAgIGVkaWRfaXNfdGltaW5nX2Jsb2NrKGIpKSkgeworCQkJCWJbMF0gPSAweDAwOworCQkJCWJbMV0gPSAweDAwOworCQkJCWJbMl0gPSAweDAwOworCQkJCWJbM10gPSAweGZkOworCQkJCWJbNF0gPSAweDAwOworCQkJCWJbNV0gPSA2MDsgICAvKiB2Zm1pbiAqLworCQkJCWJbNl0gPSA2MDsgICAvKiB2Zm1heCAqLworCQkJCWJbN10gPSAzMDsgICAvKiBoZm1pbiAqLworCQkJCWJbOF0gPSA3NTsgICAvKiBoZm1heCAqLworCQkJCWJbOV0gPSAxNzsgICAvKiBwaXhjbG9jayAtIDE3MCBNSHoqLworCQkJCWJbMTBdID0gMDsgICAvKiBHVEYgKi8KKwkJCQlicmVhazsKKwkJCX0KKworCQkJYiArPSBERVRBSUxFRF9USU1JTkdfREVTQ1JJUFRJT05fU0laRTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBFRElEX0xFTkdUSCAtIDE7IGkrKykKKwkJCWNzdW0gKz0gZWRpZFtpXTsKKworCQllZGlkWzEyN10gPSAyNTYgLSBjc3VtOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTI3Myw0NiArMzc5LDYgQEAKIAlEUFJJTlRLKCJXaGl0ZVk6ICAgMC4lMDNkXG4iLCBzcGVjcy0+Y2hyb21hLndoaXRleSk7CiB9CiAKLXN0YXRpYyBpbnQgZWRpZF9pc19zZXJpYWxfYmxvY2sodW5zaWduZWQgY2hhciAqYmxvY2spCi17Ci0JaWYgKChibG9ja1swXSA9PSAweDAwKSAmJiAoYmxvY2tbMV0gPT0gMHgwMCkgJiYgCi0JICAgIChibG9ja1syXSA9PSAweDAwKSAmJiAoYmxvY2tbM10gPT0gMHhmZikgJiYKLQkgICAgKGJsb2NrWzRdID09IDB4MDApKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGVkaWRfaXNfYXNjaWlfYmxvY2sodW5zaWduZWQgY2hhciAqYmxvY2spCi17Ci0JaWYgKChibG9ja1swXSA9PSAweDAwKSAmJiAoYmxvY2tbMV0gPT0gMHgwMCkgJiYgCi0JICAgIChibG9ja1syXSA9PSAweDAwKSAmJiAoYmxvY2tbM10gPT0gMHhmZSkgJiYKLQkgICAgKGJsb2NrWzRdID09IDB4MDApKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGVkaWRfaXNfbGltaXRzX2Jsb2NrKHVuc2lnbmVkIGNoYXIgKmJsb2NrKQotewotCWlmICgoYmxvY2tbMF0gPT0gMHgwMCkgJiYgKGJsb2NrWzFdID09IDB4MDApICYmIAotCSAgICAoYmxvY2tbMl0gPT0gMHgwMCkgJiYgKGJsb2NrWzNdID09IDB4ZmQpICYmCi0JICAgIChibG9ja1s0XSA9PSAweDAwKSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBlZGlkX2lzX21vbml0b3JfYmxvY2sodW5zaWduZWQgY2hhciAqYmxvY2spCi17Ci0JaWYgKChibG9ja1swXSA9PSAweDAwKSAmJiAoYmxvY2tbMV0gPT0gMHgwMCkgJiYgCi0JICAgIChibG9ja1syXSA9PSAweDAwKSAmJiAoYmxvY2tbM10gPT0gMHhmYykgJiYKLQkgICAgKGJsb2NrWzRdID09IDB4MDApKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBjYWxjX21vZGVfdGltaW5ncyhpbnQgeHJlcywgaW50IHlyZXMsIGludCByZWZyZXNoLAogCQkJICAgICAgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSkKIHsKQEAgLTc5NSwxNSArODYxLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZWRpZF9pc190aW1pbmdfYmxvY2sodW5zaWduZWQgY2hhciAqYmxvY2spCi17Ci0JaWYgKChibG9ja1swXSAhPSAweDAwKSB8fCAoYmxvY2tbMV0gIT0gMHgwMCkgfHwKLQkgICAgKGJsb2NrWzJdICE9IDB4MDApIHx8IChibG9ja1s0XSAhPSAweDAwKSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQogaW50IGZiX3BhcnNlX2VkaWQodW5zaWduZWQgY2hhciAqZWRpZCwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Zic3lzZnMuYyBiL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCmluZGV4IDQwYzgwYzguLmQ0YTJjMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkLCVkXG4iLCBmYl9pbmZvLT52YXIueG9mZnNldCwKLQkJCWZiX2luZm8tPnZhci54b2Zmc2V0KTsKKwkJCWZiX2luZm8tPnZhci55b2Zmc2V0KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldmljZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaGVjdWJhZmIuYyBiL2RyaXZlcnMvdmlkZW8vaGVjdWJhZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmZjYjUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9oZWN1YmFmYi5jCkBAIC0wLDAgKzEsNDcxIEBACisvKgorICogbGludXgvZHJpdmVycy92aWRlby9oZWN1YmFmYi5jIC0tIEZCIGRyaXZlciBmb3IgSGVjdWJhIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIEpheWEgS3VtYXIKKyAqIFRoaXMgd29yayB3YXMgc3BvbnNvcmVkIGJ5IENJUyhNKSBTZG4gQmhkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogTGF5b3V0IGlzIGJhc2VkIG9uIHNrZWxldG9uZmIuYyBieSBKYW1lcyBTaW1tb25zIGFuZCBHZWVydCBVeXR0ZXJob2V2ZW4uCisgKiBUaGlzIHdvcmsgd2FzIHBvc3NpYmxlIGJlY2F1c2Ugb2YgYXBvbGxvIGRpc3BsYXkgY29kZSBmcm9tIEUtSW5rJ3Mgd2Vic2l0ZQorICogaHR0cDovL3N1cHBvcnQuZWluay5jb20vY29tbXVuaXR5CisgKiBBbGwgaW5mb3JtYXRpb24gdXNlZCB0byB3cml0ZSB0aGlzIGNvZGUgaXMgZnJvbSBwdWJsaWMgbWF0ZXJpYWwgbWFkZQorICogYXZhaWxhYmxlIGJ5IEUtSW5rIG9uIGl0cyBzdXBwb3J0IHNpdGUuIFNvbWUgY29tbWFuZHMgc3VjaCBhcyAweEE0CisgKiB3ZXJlIGZvdW5kIGJ5IGxvb3BpbmcgdGhyb3VnaCBjbWQ9MHgwMCB0aHJ1IDB4RkYgYW5kIHN1cHBseWluZyByYW5kb20KKyAqIHZhbHVlcy4gVGhlcmUgYXJlIG90aGVyIGNvbW1hbmRzIHRoYXQgdGhlIGRpc3BsYXkgaXMgY2FwYWJsZSBvZiwKKyAqIGJleW9uZCB0aGUgNSB1c2VkIGhlcmUgYnV0IHRoZXkgYXJlIG1vcmUgY29tcGxleC4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyB3cml0dGVuIHRvIGJlIHVzZWQgd2l0aCB0aGUgSGVjdWJhIGRpc3BsYXkgY29udHJvbGxlcgorICogYm9hcmQsIGFuZCB0ZXN0ZWQgd2l0aCB0aGUgRUluayA4MDB4NjAwIGRpc3BsYXkgaW4gMSBiaXQgbW9kZS4KKyAqIFRoZSBpbnRlcmZhY2UgYmV0d2VlbiBIZWN1YmEgYW5kIHRoZSBob3N0IGlzIFRUTCBiYXNlZCBHUElPLiBUaGUKKyAqIEdQSU8gcmVxdWlyZW1lbnRzIGFyZSA4IHdyaXRhYmxlIGRhdGEgbGluZXMgYW5kIDYgbGluZXMgZm9yIGNvbnRyb2wuCisgKiBPbmx5IDQgb2YgdGhlIGNvbnRyb2xzIGFyZSBhY3R1YWxseSB1c2VkIGhlcmUgYnV0IDYgZm9yIGZ1dHVyZSB1c2UuCisgKiBUaGUgZHJpdmVyIHJlcXVpcmVzIHRoZSBJTyBhZGRyZXNzZXMgZm9yIGRhdGEgYW5kIGNvbnRyb2wgR1BJTyBhdAorICogbG9hZCB0aW1lLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSB0aGlzIGRpc3BsYXkgd2l0aCBhIHN0YW5kYXJkCisgKiBQQyBwYXJhbGxlbCBwb3J0LgorICoKKyAqIEdlbmVyYWwgbm90ZXM6CisgKiAtIFVzZXIgbXVzdCBzZXQgaGVjdWJhZmJfZW5hYmxlPTEgdG8gZW5hYmxlIGl0CisgKiAtIFVzZXIgbXVzdCBzZXQgZGlvX2FkZHI9MHhJT0FERFIgY2lvX2FkZHI9MHhJT0FERFIgYzJpb19hZGRyPTB4SU9BRERSCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisvKiBBcG9sbG8gY29udHJvbGxlciBzcGVjaWZpYyBkZWZpbmVzICovCisjZGVmaW5lIEFQT0xMT19TVEFSVF9ORVdfSU1HCTB4QTAKKyNkZWZpbmUgQVBPTExPX1NUT1BfSU1HX0RBVEEJMHhBMQorI2RlZmluZSBBUE9MTE9fRElTUExBWV9JTUcJMHhBMgorI2RlZmluZSBBUE9MTE9fRVJBU0VfRElTUExBWQkweEEzCisjZGVmaW5lIEFQT0xMT19JTklUX0RJU1BMQVkJMHhBNAorCisvKiBIZWN1YmEgaW50ZXJmYWNlIHNwZWNpZmljIGRlZmluZXMgKi8KKy8qIFdVUCBpcyBpbnZlcnRlZCwgQ0QgaXMgaW52ZXJ0ZWQsIERTIGlzIGludmVydGVkICovCisjZGVmaW5lIEhDQl9OV1VQX0JJVAkweDAxCisjZGVmaW5lIEhDQl9ORFNfQklUIAkweDAyCisjZGVmaW5lIEhDQl9SV19CSVQgCTB4MDQKKyNkZWZpbmUgSENCX05DRF9CSVQgCTB4MDgKKyNkZWZpbmUgSENCX0FDS19CSVQgCTB4ODAKKworLyogRGlzcGxheSBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUFlfVyA2MDAKKyNkZWZpbmUgRFBZX0ggODAwCisKK3N0cnVjdCBoZWN1YmFmYl9wYXIgeworCXVuc2lnbmVkIGxvbmcgZGlvX2FkZHI7CisJdW5zaWduZWQgbG9uZyBjaW9fYWRkcjsKKwl1bnNpZ25lZCBsb25nIGMyaW9fYWRkcjsKKwl1bnNpZ25lZCBjaGFyIGN0bDsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwl1bnNpZ25lZCBpbnQgaXJxOworfTsKKworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBoZWN1YmFmYl9maXggX19kZXZpbml0ZGF0YSA9IHsKKwkuaWQgPQkJImhlY3ViYWZiIiwKKwkudHlwZSA9CQlGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLnZpc3VhbCA9CUZCX1ZJU1VBTF9NT05PMDEsCisJLnhwYW5zdGVwID0JMCwKKwkueXBhbnN0ZXAgPQkwLAorCS55d3JhcHN0ZXAgPQkwLAorCS5hY2NlbCA9CUZCX0FDQ0VMX05PTkUsCit9OworCitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGhlY3ViYWZiX3ZhciBfX2RldmluaXRkYXRhID0geworCS54cmVzCQk9IERQWV9XLAorCS55cmVzCQk9IERQWV9ILAorCS54cmVzX3ZpcnR1YWwJPSBEUFlfVywKKwkueXJlc192aXJ0dWFsCT0gRFBZX0gsCisJLmJpdHNfcGVyX3BpeGVsCT0gMSwKKwkubm9uc3RkCQk9IDEsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkaW9fYWRkcjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNpb19hZGRyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgYzJpb19hZGRyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3BsYXNodmFsOworc3RhdGljIHVuc2lnbmVkIGludCBub3NwbGFzaDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGVjdWJhZmJfZW5hYmxlOworc3RhdGljIHVuc2lnbmVkIGludCBpcnE7CisKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChoZWN1YmFmYl93YWl0cSk7CisKK3N0YXRpYyB2b2lkIGhjYl9zZXRfY3RsKHN0cnVjdCBoZWN1YmFmYl9wYXIgKnBhcikKK3sKKwlvdXRiKHBhci0+Y3RsLCBwYXItPmNpb19hZGRyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaGNiX2dldF9jdGwoc3RydWN0IGhlY3ViYWZiX3BhciAqcGFyKQoreworCXJldHVybiBpbmIocGFyLT5jMmlvX2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBoY2Jfc2V0X2RhdGEoc3RydWN0IGhlY3ViYWZiX3BhciAqcGFyLCB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCW91dGIodmFsdWUsIHBhci0+ZGlvX2FkZHIpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhcG9sbG9faW5pdF9jb250cm9sKHN0cnVjdCBoZWN1YmFmYl9wYXIgKnBhcikKK3sKKwl1bnNpZ25lZCBjaGFyIGN0bDsKKwkvKiBmb3IgaW5pdCwgd2Ugd2FudCB0aGUgZm9sbG93aW5nIHNldHVwIHRvIGJlIHNldDoKKwlXVVAgPSBsbworCUFDSyA9IGhpCisJRFMgPSBoaQorCVJXID0gaGkKKwlDRCA9IGxvCisJKi8KKworCS8qIHdyaXRlIFdVUCB0byBsbywgRFMgdG8gaGksIFJXIHRvIGhpLCBDRCB0byBsbyAqLworCXBhci0+Y3RsID0gSENCX05XVVBfQklUIHwgSENCX1JXX0JJVCB8IEhDQl9OQ0RfQklUIDsKKwlwYXItPmN0bCAmPSB+SENCX05EU19CSVQ7CisJaGNiX3NldF9jdGwocGFyKTsKKworCS8qIGNoZWNrIEFDSyBpcyBub3QgbG8gKi8KKwljdGwgPSBoY2JfZ2V0X2N0bChwYXIpOworCWlmICgoY3RsICYgSENCX0FDS19CSVQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbCBiZWNhdXNlIEFDSyBpcyBhbHJlYWR5IGxvd1xuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhjYl93YWl0X2Zvcl9hY2soc3RydWN0IGhlY3ViYWZiX3BhciAqcGFyKQoreworCisJaW50IHRpbWVvdXQ7CisJdW5zaWduZWQgY2hhciBjdGw7CisKKwl0aW1lb3V0PTUwMDsKKwlkbyB7CisJCWN0bCA9IGhjYl9nZXRfY3RsKHBhcik7CisJCWlmICgoY3RsICYgSENCX0FDS19CSVQpKQorCQkJcmV0dXJuOworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAodGltZW91dC0tKTsKKwlwcmludGsoS0VSTl9FUlIgInRpbWVkIG91dCB3YWl0aW5nIGZvciBhY2tcbiIpOworfQorCitzdGF0aWMgdm9pZCBoY2Jfd2FpdF9mb3JfYWNrX2NsZWFyKHN0cnVjdCBoZWN1YmFmYl9wYXIgKnBhcikKK3sKKworCWludCB0aW1lb3V0OworCXVuc2lnbmVkIGNoYXIgY3RsOworCisJdGltZW91dD01MDA7CisJZG8geworCQljdGwgPSBoY2JfZ2V0X2N0bChwYXIpOworCQlpZiAoIShjdGwgJiBIQ0JfQUNLX0JJVCkpCisJCQlyZXR1cm47CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlICh0aW1lb3V0LS0pOworCXByaW50ayhLRVJOX0VSUiAidGltZWQgb3V0IHdhaXRpbmcgZm9yIGNsZWFyXG4iKTsKK30KKworc3RhdGljIHZvaWQgYXBvbGxvX3NlbmRfZGF0YShzdHJ1Y3QgaGVjdWJhZmJfcGFyICpwYXIsIHVuc2lnbmVkIGNoYXIgZGF0YSkKK3sKKwkvKiBzZXQgZGF0YSAqLworCWhjYl9zZXRfZGF0YShwYXIsIGRhdGEpOworCisJLyogc2V0IERTIGxvdyAqLworCXBhci0+Y3RsIHw9IEhDQl9ORFNfQklUOworCWhjYl9zZXRfY3RsKHBhcik7CisKKwloY2Jfd2FpdF9mb3JfYWNrKHBhcik7CisKKwkvKiBzZXQgRFMgaGkgKi8KKwlwYXItPmN0bCAmPSB+KEhDQl9ORFNfQklUKTsKKwloY2Jfc2V0X2N0bChwYXIpOworCisJaGNiX3dhaXRfZm9yX2Fja19jbGVhcihwYXIpOworfQorCitzdGF0aWMgdm9pZCBhcG9sbG9fc2VuZF9jb21tYW5kKHN0cnVjdCBoZWN1YmFmYl9wYXIgKnBhciwgdW5zaWduZWQgY2hhciBkYXRhKQoreworCS8qIGNvbW1hbmQgc28gc2V0IENEIHRvIGhpZ2ggKi8KKwlwYXItPmN0bCAmPSB+KEhDQl9OQ0RfQklUKTsKKwloY2Jfc2V0X2N0bChwYXIpOworCisJLyogYWN0dWFsbHkgc3Ryb2JlIHdpdGggY29tbWFuZCAqLworCWFwb2xsb19zZW5kX2RhdGEocGFyLCBkYXRhKTsKKworCS8qIGNsZWFyIENEIGJhY2sgdG8gbG93ICovCisJcGFyLT5jdGwgfD0gKEhDQl9OQ0RfQklUKTsKKwloY2Jfc2V0X2N0bChwYXIpOworfQorCisvKiBtYWluIGhlY3ViYWZiIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgdm9pZCBoZWN1YmFmYl9kcHlfdXBkYXRlKHN0cnVjdCBoZWN1YmFmYl9wYXIgKnBhcikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSAodW5zaWduZWQgY2hhciBfX2ZvcmNlICopcGFyLT5pbmZvLT5zY3JlZW5fYmFzZTsKKworCWFwb2xsb19zZW5kX2NvbW1hbmQocGFyLCAweEEwKTsKKworCWZvciAoaT0wOyBpIDwgKERQWV9XKkRQWV9ILzgpOyBpKyspIHsKKwkJYXBvbGxvX3NlbmRfZGF0YShwYXIsICooYnVmKyspKTsKKwl9CisKKwlhcG9sbG9fc2VuZF9jb21tYW5kKHBhciwgMHhBMSk7CisJYXBvbGxvX3NlbmRfY29tbWFuZChwYXIsIDB4QTIpOworfQorCisvKiB0aGlzIGlzIGNhbGxlZCBiYWNrIGZyb20gdGhlIGRlZmVycmVkIGlvIHdvcmtxdWV1ZSAqLworc3RhdGljIHZvaWQgaGVjdWJhZmJfZHB5X2RlZmVycmVkX2lvKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQoreworCWhlY3ViYWZiX2RweV91cGRhdGUoaW5mby0+cGFyKTsKK30KKworc3RhdGljIHZvaWQgaGVjdWJhZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQoreworCXN0cnVjdCBoZWN1YmFmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCXN5c19maWxscmVjdChpbmZvLCByZWN0KTsKKworCWhlY3ViYWZiX2RweV91cGRhdGUocGFyKTsKK30KKworc3RhdGljIHZvaWQgaGVjdWJhZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCXN0cnVjdCBoZWN1YmFmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCXN5c19jb3B5YXJlYShpbmZvLCBhcmVhKTsKKworCWhlY3ViYWZiX2RweV91cGRhdGUocGFyKTsKK30KKworc3RhdGljIHZvaWQgaGVjdWJhZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCWNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJc3RydWN0IGhlY3ViYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJc3lzX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisKKwloZWN1YmFmYl9kcHlfdXBkYXRlKHBhcik7Cit9CisKKy8qCisgKiB0aGlzIGlzIHRoZSBzbG93IHBhdGggZnJvbSB1c2Vyc3BhY2UuIHRoZXkgY2FuIHNlZWsgYW5kIHdyaXRlIHRvCisgKiB0aGUgZmIuIGl0J3MgaW5lZmZpY2llbnQgdG8gZG8gYW55dGhpbmcgbGVzcyB0aGFuIGEgZnVsbCBzY3JlZW4gZHJhdworICovCitzdGF0aWMgc3NpemVfdCBoZWN1YmFmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwl1bnNpZ25lZCBsb25nIHA7CisJaW50IGVycj0tRUlOVkFMOworCXN0cnVjdCBoZWN1YmFmYl9wYXIgKnBhcjsKKwl1bnNpZ25lZCBpbnQgeHJlczsKKwl1bnNpZ25lZCBpbnQgZmJtZW1sZW5ndGg7CisKKwlwID0gKnBwb3M7CisJcGFyID0gaW5mby0+cGFyOworCXhyZXMgPSBpbmZvLT52YXIueHJlczsKKwlmYm1lbWxlbmd0aCA9ICh4cmVzICogaW5mby0+dmFyLnlyZXMpLzg7CisKKwlpZiAocCA+IGZibWVtbGVuZ3RoKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWVyciA9IDA7CisJaWYgKChjb3VudCArIHApID4gZmJtZW1sZW5ndGgpIHsKKwkJY291bnQgPSBmYm1lbWxlbmd0aCAtIHA7CisJCWVyciA9IC1FTk9TUEM7CisJfQorCisJaWYgKGNvdW50KSB7CisJCWNoYXIgKmJhc2VfYWRkcjsKKworCQliYXNlX2FkZHIgPSAoY2hhciBfX2ZvcmNlICopaW5mby0+c2NyZWVuX2Jhc2U7CisJCWNvdW50IC09IGNvcHlfZnJvbV91c2VyKGJhc2VfYWRkciArIHAsIGJ1ZiwgY291bnQpOworCQkqcHBvcyArPSBjb3VudDsKKwkJZXJyID0gLUVGQVVMVDsKKwl9CisKKwloZWN1YmFmYl9kcHlfdXBkYXRlKHBhcik7CisKKwlpZiAoY291bnQpCisJCXJldHVybiBjb3VudDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIGhlY3ViYWZiX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmZiX3JlYWQgICAgICAgID0gZmJfc3lzX3JlYWQsCisJLmZiX3dyaXRlCT0gaGVjdWJhZmJfd3JpdGUsCisJLmZiX2ZpbGxyZWN0CT0gaGVjdWJhZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gaGVjdWJhZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdAk9IGhlY3ViYWZiX2ltYWdlYmxpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gaGVjdWJhZmJfZGVmaW8gPSB7CisJLmRlbGF5CQk9IEhaLAorCS5kZWZlcnJlZF9pbwk9IGhlY3ViYWZiX2RweV9kZWZlcnJlZF9pbywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhlY3ViYWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlpbnQgdmlkZW9tZW1vcnlzaXplOworCXVuc2lnbmVkIGNoYXIgKnZpZGVvbWVtb3J5OworCXN0cnVjdCBoZWN1YmFmYl9wYXIgKnBhcjsKKworCXZpZGVvbWVtb3J5c2l6ZSA9IChEUFlfVypEUFlfSCkvODsKKworCWlmICghKHZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCW1lbXNldCh2aWRlb21lbW9yeSwgMCwgdmlkZW9tZW1vcnlzaXplKTsKKworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGhlY3ViYWZiX3BhciksICZkZXYtPmRldik7CisJaWYgKCFpbmZvKQorCQlnb3RvIGVycjsKKworCWluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgX19pb21lbSAqKSB2aWRlb21lbW9yeTsKKwlpbmZvLT5mYm9wcyA9ICZoZWN1YmFmYl9vcHM7CisKKwlpbmZvLT52YXIgPSBoZWN1YmFmYl92YXI7CisJaW5mby0+Zml4ID0gaGVjdWJhZmJfZml4OworCWluZm8tPmZpeC5zbWVtX2xlbiA9IHZpZGVvbWVtb3J5c2l6ZTsKKwlwYXIgPSBpbmZvLT5wYXI7CisJcGFyLT5pbmZvID0gaW5mbzsKKworCWlmICghZGlvX2FkZHIgfHwgIWNpb19hZGRyIHx8ICFjMmlvX2FkZHIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibm8gSU8gYWRkcmVzc2VzIHN1cHBsaWVkXG4iKTsKKwkJZ290byBlcnIxOworCX0KKwlwYXItPmRpb19hZGRyID0gZGlvX2FkZHI7CisJcGFyLT5jaW9fYWRkciA9IGNpb19hZGRyOworCXBhci0+YzJpb19hZGRyID0gYzJpb19hZGRyOworCWluZm8tPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKKworCWluZm8tPmZiZGVmaW8gPSAmaGVjdWJhZmJfZGVmaW87CisJZmJfZGVmZXJyZWRfaW9faW5pdChpbmZvKTsKKworCXJldHZhbCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGVycjE7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAgImZiJWQ6IEhlY3ViYSBmcmFtZSBidWZmZXIgZGV2aWNlLCB1c2luZyAlZEsgb2YgdmlkZW8gbWVtb3J5XG4iLAorCSAgICAgICBpbmZvLT5ub2RlLCB2aWRlb21lbW9yeXNpemUgPj4gMTApOworCisJLyogdGhpcyBpbml0cyB0aGUgZHB5ICovCisJYXBvbGxvX2luaXRfY29udHJvbChwYXIpOworCisJYXBvbGxvX3NlbmRfY29tbWFuZChwYXIsIEFQT0xMT19JTklUX0RJU1BMQVkpOworCWFwb2xsb19zZW5kX2RhdGEocGFyLCAweDgxKTsKKworCS8qIGhhdmUgdG8gd2FpdCB3aGlsZSBkaXNwbGF5IHJlc2V0cyAqLworCXVkZWxheSgxMDAwKTsKKworCS8qIGlmIHdlIHdlcmUgdG9sZCB0byBzcGxhc2ggdGhlIHNjcmVlbiwgd2UganVzdCBjbGVhciBpdCAqLworCWlmICghbm9zcGxhc2gpIHsKKwkJYXBvbGxvX3NlbmRfY29tbWFuZChwYXIsIEFQT0xMT19FUkFTRV9ESVNQTEFZKTsKKwkJYXBvbGxvX3NlbmRfZGF0YShwYXIsIHNwbGFzaHZhbCk7CisJfQorCisJcmV0dXJuIDA7CitlcnIxOgorCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CitlcnI6CisJdmZyZWUodmlkZW9tZW1vcnkpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGhlY3ViYWZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGluZm8pIHsKKwkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChpbmZvKTsKKwkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwkJdmZyZWUoKHZvaWQgX19mb3JjZSAqKWluZm8tPnNjcmVlbl9iYXNlKTsKKwkJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhlY3ViYWZiX2RyaXZlciA9IHsKKwkucHJvYmUJPSBoZWN1YmFmYl9wcm9iZSwKKwkucmVtb3ZlID0gaGVjdWJhZmJfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImhlY3ViYWZiIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmhlY3ViYWZiX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgaGVjdWJhZmJfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIWhlY3ViYWZiX2VuYWJsZSkgeworCQlwcmludGsoS0VSTl9FUlIgIlVzZSBoZWN1YmFmYl9lbmFibGUgdG8gZW5hYmxlIHRoZSBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaGVjdWJhZmJfZHJpdmVyKTsKKwlpZiAoIXJldCkgeworCQloZWN1YmFmYl9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImhlY3ViYWZiIiwgMCk7CisJCWlmIChoZWN1YmFmYl9kZXZpY2UpCisJCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGhlY3ViYWZiX2RldmljZSk7CisJCWVsc2UKKwkJCXJldCA9IC1FTk9NRU07CisKKwkJaWYgKHJldCkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChoZWN1YmFmYl9kZXZpY2UpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmhlY3ViYWZiX2RyaXZlcik7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaGVjdWJhZmJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGhlY3ViYWZiX2RldmljZSk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmhlY3ViYWZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9wYXJhbShub3NwbGFzaCwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vc3BsYXNoLCAiRGlzYWJsZSBkb2luZyB0aGUgc3BsYXNoIHNjcmVlbiIpOworbW9kdWxlX3BhcmFtKGhlY3ViYWZiX2VuYWJsZSwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGhlY3ViYWZiX2VuYWJsZSwgIkVuYWJsZSBjb21tdW5pY2F0aW9uIHdpdGggSGVjdWJhIGJvYXJkIik7Cittb2R1bGVfcGFyYW0oZGlvX2FkZHIsIHVsb25nLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGlvX2FkZHIsICJJTyBhZGRyZXNzIGZvciBkYXRhLCBlZzogMHg0ODAiKTsKK21vZHVsZV9wYXJhbShjaW9fYWRkciwgdWxvbmcsIDApOworTU9EVUxFX1BBUk1fREVTQyhjaW9fYWRkciwgIklPIGFkZHJlc3MgZm9yIGNvbnRyb2wsIGVnOiAweDQwMCIpOworbW9kdWxlX3BhcmFtKGMyaW9fYWRkciwgdWxvbmcsIDApOworTU9EVUxFX1BBUk1fREVTQyhjMmlvX2FkZHIsICJJTyBhZGRyZXNzIGZvciBzZWNvbmRhcnkgY29udHJvbCwgZWc6IDB4NDA4Iik7Cittb2R1bGVfcGFyYW0oc3BsYXNodmFsLCB1bG9uZywgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNwbGFzaHZhbCwgIlNwbGFzaCBwYXR0ZXJuOiAweDAwIGlzIGJsYWNrLCAweDAxIGlzIHdoaXRlIik7Cittb2R1bGVfcGFyYW0oaXJxLCB1aW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRIGZvciB0aGUgSGVjdWJhIGJvYXJkIik7CisKK21vZHVsZV9pbml0KGhlY3ViYWZiX2luaXQpOworbW9kdWxlX2V4aXQoaGVjdWJhZmJfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiZmJkZXYgZHJpdmVyIGZvciBIZWN1YmEgYm9hcmQiKTsKK01PRFVMRV9BVVRIT1IoIkpheWEgS3VtYXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwLmggYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMC5oCmluZGV4IGFhNjVmZmMuLjg4OWU0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwLmgKKysrIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTAuaApAQCAtMTMzLDcgKzEzMyw3IEBACiAvKiBNYXNrcyAoQU5EIG9wcykgYW5kIE9SJ3MgKi8KICNkZWZpbmUgRkJfU1RBUlRfTUFTSyAgICAgICAgICAgICAgICgweDNmIDw8ICgzMiAtIDYpKQogI2RlZmluZSBNTUlPX0FERFJfTUFTSyAgICAgICAgICAgICAgKDB4MUZGRiA8PCAoMzIgLSAxMykpCi0jZGVmaW5lIEZSRVFfTUFTSyAgICAgICAgICAgICAgICAgICAweDFFRgorI2RlZmluZSBGUkVRX01BU0sgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKICNkZWZpbmUgU0NSX09GRiAgICAgICAgICAgICAgICAgICAgIDB4MjAKICNkZWZpbmUgRFJBTV9PTiAgICAgICAgICAgICAgICAgICAgIDB4MDggICAgICAgICAgICAKICNkZWZpbmUgRFJBTV9PRkYgICAgICAgICAgICAgICAgICAgIDB4RTcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYwppbmRleCA3ZTc2MDE5Li4xYTdkNzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCkBAIC0xNzE3LDcgKzE3MTcsNyBAQAogICogQGluZm86IHBvaW50ZXIgdG8gZGV2aWNlIHNwZWNpZmljIGluZm8gc3RydWN0dXJlCiAgKgogICogREVTQ1JJUFRJT046Ci0gKiBTZXRzIHRoZSB0aGUgdXNlciBtb25pdG9yJ3MgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwKKyAqIFNldHMgdGhlIHVzZXIgbW9uaXRvcidzIGhvcml6b250YWwgYW5kIHZlcnRpY2FsCiAgKiBmcmVxdWVuY3kgbGltaXRzCiAgKi8KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpODEwX2luaXRfbW9uc3BlY3Moc3RydWN0IGZiX2luZm8gKmluZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKaW5kZXggMjY3YzFmZi4uYTEyNTg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbXhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwpAQCAtMzk0LDI2ICszOTQsMTggQEAKIAogCS8qIGluaXRpYWxpemUgR1BJT3MgKi8KIAlpbXhfZ3Bpb19tb2RlKFBENl9QRl9MU0NMSyk7Ci0JaW14X2dwaW9fbW9kZShQRDEwX1BGX1NQTF9TUFIpOwogCWlteF9ncGlvX21vZGUoUEQxMV9QRl9DT05UUkFTVCk7CiAJaW14X2dwaW9fbW9kZShQRDE0X1BGX0ZMTV9WU1lOQyk7CiAJaW14X2dwaW9fbW9kZShQRDEzX1BGX0xQX0hTWU5DKTsKLQlpbXhfZ3Bpb19tb2RlKFBEN19QRl9SRVYpOwotCWlteF9ncGlvX21vZGUoUEQ4X1BGX0NMUyk7Ci0KLSNpZm5kZWYgQ09ORklHX01BQ0hfUElNWDEKLQkvKiBvbiBQaU1YMSB1c2VkIGFzIGJ1ZmZlcnMgZW5hYmxlIHNpZ25hbAotCSAqLwotCWlteF9ncGlvX21vZGUoUEQ5X1BGX1BTKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19NQUNIX01YMUZTMgotCS8qIG9uIG14MWZzMiB0aGlzIHBpbiBpcyB1c2VkIHRvIChkZSlhY3RpdmF0ZSB0aGUgZGlzcGxheSwgc28gd2UgbmVlZAotCSAqIGl0IGFzIGEgbm9ybWFsIGdwaW8KLQkgKi8KIAlpbXhfZ3Bpb19tb2RlKFBEMTJfUEZfQUNEX09FKTsKLSNlbmRpZgogCisJLyogVGhlc2UgYXJlIG9ubHkgbmVlZGVkIGZvciBTaGFycCBIUiBURlQgZGlzcGxheXMgKi8KKwlpZiAoZmJpLT5wY3IgJiBQQ1JfU0hBUlApIHsKKwkJaW14X2dwaW9fbW9kZShQRDdfUEZfUkVWKTsKKwkJaW14X2dwaW9fbW9kZShQRDhfUEZfQ0xTKTsKKwkJaW14X2dwaW9fbW9kZShQRDlfUEZfUFMpOworCQlpbXhfZ3Bpb19tb2RlKFBEMTBfUEZfU1BMX1NQUik7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC00NzYsNyArNDY4LDYgQEAKIAogCWluZm8tPmZib3BzCQkJPSAmaW14ZmJfb3BzOwogCWluZm8tPmZsYWdzCQkJPSBGQklORk9fRkxBR19ERUZBVUxUOwotCWluZm8tPnBzZXVkb19wYWxldHRlCQk9IChmYmkgKyAxKTsKIAogCWZiaS0+cmdiW1JHQl8xNl0JCT0gJmRlZl9yZ2JfMTY7CiAJZmJpLT5yZ2JbUkdCXzhdCQkJPSAmZGVmX3JnYl84OwpAQCAtNDk5LDYgKzQ5MCw3IEBACiAJaW5mby0+dmFyLnN5bmMJCQk9IGluZi0+c3luYzsKIAlpbmZvLT52YXIuZ3JheXNjYWxlCQk9IGluZi0+Y21hcF9ncmV5c2NhbGU7CiAJZmJpLT5jbWFwX2ludmVyc2UJCT0gaW5mLT5jbWFwX2ludmVyc2U7CisJZmJpLT5jbWFwX3N0YXRpYwkJPSBpbmYtPmNtYXBfc3RhdGljOwogCWZiaS0+cGNyCQkJPSBpbmYtPnBjcjsKIAlmYmktPmxzY3IxCQkJPSBpbmYtPmxzY3IxOwogCWZiaS0+ZG1hY3IJCQk9IGluZi0+ZG1hY3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKaW5kZXggYzFlYjE4Yi4uMTZiYzhkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYwpAQCAtMTQyOCw2ICsxNDI4LDI0IEBACiBzdGF0aWMgdm9pZCByZXNldF9zdGF0ZShzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyk7CiBzdGF0aWMgdm9pZCBkb19mbHVzaChzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyk7CiAKK3N0YXRpYyAgdTMyIGdldF9yaW5nX3NwYWNlKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvKQoreworCXUzMiByaW5nX3NwYWNlOworCisJaWYgKGRpbmZvLT5yaW5nX3RhaWwgPj0gZGluZm8tPnJpbmdfaGVhZCkKKwkJcmluZ19zcGFjZSA9IGRpbmZvLT5yaW5nLnNpemUgLQorCQkJKGRpbmZvLT5yaW5nX3RhaWwgLSBkaW5mby0+cmluZ19oZWFkKTsKKwllbHNlCisJCXJpbmdfc3BhY2UgPSBkaW5mby0+cmluZ19oZWFkIC0gZGluZm8tPnJpbmdfdGFpbDsKKworCWlmIChyaW5nX3NwYWNlID4gUklOR19NSU5fRlJFRSkKKwkJcmluZ19zcGFjZSAtPSBSSU5HX01JTl9GUkVFOworCWVsc2UKKwkJcmluZ19zcGFjZSA9IDA7CisKKwlyZXR1cm4gcmluZ19zcGFjZTsKK30KKwogc3RhdGljIGludAogd2FpdF9yaW5nKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvLCBpbnQgbikKIHsKQEAgLTE0NDIsMTMgKzE0NjAsOCBAQAogCWVuZCA9IGppZmZpZXMgKyAoSFogKiAzKTsKIAl3aGlsZSAoZGluZm8tPnJpbmdfc3BhY2UgPCBuKSB7CiAJCWRpbmZvLT5yaW5nX2hlYWQgPSBJTlJFRyhQUklfUklOR19IRUFEKSAmIFJJTkdfSEVBRF9NQVNLOwotCQlpZiAoZGluZm8tPnJpbmdfdGFpbCArIFJJTkdfTUlOX0ZSRUUgPCBkaW5mby0+cmluZ19oZWFkKQotCQkJZGluZm8tPnJpbmdfc3BhY2UgPSBkaW5mby0+cmluZ19oZWFkCi0JCQkJLSAoZGluZm8tPnJpbmdfdGFpbCArIFJJTkdfTUlOX0ZSRUUpOwotCQllbHNlCi0JCQlkaW5mby0+cmluZ19zcGFjZSA9IChkaW5mby0+cmluZy5zaXplICsKLQkJCQkJICAgICBkaW5mby0+cmluZ19oZWFkKQotCQkJCS0gKGRpbmZvLT5yaW5nX3RhaWwgKyBSSU5HX01JTl9GUkVFKTsKKwkJZGluZm8tPnJpbmdfc3BhY2UgPSBnZXRfcmluZ19zcGFjZShkaW5mbyk7CisKIAkJaWYgKGRpbmZvLT5yaW5nX2hlYWQgIT0gbGFzdF9oZWFkKSB7CiAJCQllbmQgPSBqaWZmaWVzICsgKEhaICogMyk7CiAJCQlsYXN0X2hlYWQgPSBkaW5mby0+cmluZ19oZWFkOwpAQCAtMTUxMywxMiArMTUyNiw3IEBACiAKIAlkaW5mby0+cmluZ19oZWFkID0gSU5SRUcoUFJJX1JJTkdfSEVBRCkgJiBSSU5HX0hFQURfTUFTSzsKIAlkaW5mby0+cmluZ190YWlsID0gSU5SRUcoUFJJX1JJTkdfVEFJTCkgJiBSSU5HX1RBSUxfTUFTSzsKLQlpZiAoZGluZm8tPnJpbmdfdGFpbCArIFJJTkdfTUlOX0ZSRUUgPCBkaW5mby0+cmluZ19oZWFkKQotCQlkaW5mby0+cmluZ19zcGFjZSA9IGRpbmZvLT5yaW5nX2hlYWQKLQkJCS0gKGRpbmZvLT5yaW5nX3RhaWwgKyBSSU5HX01JTl9GUkVFKTsKLQllbHNlCi0JCWRpbmZvLT5yaW5nX3NwYWNlID0gKGRpbmZvLT5yaW5nLnNpemUgKyBkaW5mby0+cmluZ19oZWFkKQotCQkJLSAoZGluZm8tPnJpbmdfdGFpbCArIFJJTkdfTUlOX0ZSRUUpOworCWRpbmZvLT5yaW5nX3NwYWNlID0gZ2V0X3Jpbmdfc3BhY2UoZGluZm8pOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9sb2dvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vS2NvbmZpZwppbmRleCBmMGU2NTEyLi45Mzk3YmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2xvZ28vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2xvZ28vS2NvbmZpZwpAQCAtMiw3MyArMiw2OSBAQAogIyBMb2dvIGNvbmZpZ3VyYXRpb24KICMKIAotbWVudSAiTG9nbyBjb25maWd1cmF0aW9uIgotCi1jb25maWcgTE9HTworbWVudWNvbmZpZyBMT0dPCiAJYm9vbCAiQm9vdHVwIGxvZ28iCiAJZGVwZW5kcyBvbiBGQiB8fCBTR0lfTkVXUE9SVF9DT05TT0xFCiAJaGVscAogCSAgRW5hYmxlIGFuZCBzZWxlY3QgZnJhbWUgYnVmZmVyIGJvb3R1cCBsb2dvcy4KIAoraWYgTE9HTworCiBjb25maWcgTE9HT19MSU5VWF9NT05PCiAJYm9vbCAiU3RhbmRhcmQgYmxhY2sgYW5kIHdoaXRlIExpbnV4IGxvZ28iCi0JZGVwZW5kcyBvbiBMT0dPCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBMT0dPX0xJTlVYX1ZHQTE2CiAJYm9vbCAiU3RhbmRhcmQgMTYtY29sb3IgTGludXggbG9nbyIKLQlkZXBlbmRzIG9uIExPR08KIAlkZWZhdWx0IHkKIAogY29uZmlnIExPR09fTElOVVhfQ0xVVDIyNAogCWJvb2wgIlN0YW5kYXJkIDIyNC1jb2xvciBMaW51eCBsb2dvIgotCWRlcGVuZHMgb24gTE9HTwogCWRlZmF1bHQgeQogCiBjb25maWcgTE9HT19ERUNfQ0xVVDIyNAogCWJvb2wgIjIyNC1jb2xvciBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBMaW51eCBsb2dvIgotCWRlcGVuZHMgb24gTE9HTyAmJiAoTUFDSF9ERUNTVEFUSU9OIHx8IEFMUEhBKQorCWRlcGVuZHMgb24gTUFDSF9ERUNTVEFUSU9OIHx8IEFMUEhBCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBMT0dPX01BQ19DTFVUMjI0CiAJYm9vbCAiMjI0LWNvbG9yIE1hY2ludG9zaCBMaW51eCBsb2dvIgotCWRlcGVuZHMgb24gTE9HTyAmJiBNQUMKKwlkZXBlbmRzIG9uIE1BQwogCWRlZmF1bHQgeQogCiBjb25maWcgTE9HT19QQVJJU0NfQ0xVVDIyNAogCWJvb2wgIjIyNC1jb2xvciBQQS1SSVNDIExpbnV4IGxvZ28iCi0JZGVwZW5kcyBvbiBMT0dPICYmIFBBUklTQworCWRlcGVuZHMgb24gUEFSSVNDCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBMT0dPX1NHSV9DTFVUMjI0CiAJYm9vbCAiMjI0LWNvbG9yIFNHSSBMaW51eCBsb2dvIgotCWRlcGVuZHMgb24gTE9HTyAmJiAoU0dJX0lQMjIgfHwgU0dJX0lQMjcgfHwgU0dJX0lQMzIgfHwgWDg2X1ZJU1dTKQorCWRlcGVuZHMgb24gU0dJX0lQMjIgfHwgU0dJX0lQMjcgfHwgU0dJX0lQMzIgfHwgWDg2X1ZJU1dTCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBMT0dPX1NVTl9DTFVUMjI0CiAJYm9vbCAiMjI0LWNvbG9yIFN1biBMaW51eCBsb2dvIgotCWRlcGVuZHMgb24gTE9HTyAmJiBTUEFSQworCWRlcGVuZHMgb24gU1BBUkMKIAlkZWZhdWx0IHkKIAogY29uZmlnIExPR09fU1VQRVJIX01PTk8KIAlib29sICJCbGFjayBhbmQgd2hpdGUgU3VwZXJIIExpbnV4IGxvZ28iCi0JZGVwZW5kcyBvbiBMT0dPICYmIFNVUEVSSAorCWRlcGVuZHMgb24gU1VQRVJICiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBMT0dPX1NVUEVSSF9WR0ExNgogCWJvb2wgIjE2LWNvbG9yIFN1cGVySCBMaW51eCBsb2dvIgotCWRlcGVuZHMgb24gTE9HTyAmJiBTVVBFUkgKKwlkZXBlbmRzIG9uIFNVUEVSSAogCWRlZmF1bHQgeQogCiBjb25maWcgTE9HT19TVVBFUkhfQ0xVVDIyNAogCWJvb2wgIjIyNC1jb2xvciBTdXBlckggTGludXggbG9nbyIKLQlkZXBlbmRzIG9uIExPR08gJiYgU1VQRVJICisJZGVwZW5kcyBvbiBTVVBFUkgKIAlkZWZhdWx0IHkKIAogY29uZmlnIExPR09fTTMyUl9DTFVUMjI0CiAJYm9vbCAiMjI0LWNvbG9yIE0zMlIgTGludXggbG9nbyIKLQlkZXBlbmRzIG9uIExPR08gJiYgTTMyUgorCWRlcGVuZHMgb24gTTMyUgogCWRlZmF1bHQgeQogCi1lbmRtZW51Ci0KK2VuZGlmICMgTE9HTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfVGkzMDI2LmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9UaTMwMjYuYwppbmRleCBhNTY5MGE1Li45NDQ1Y2RiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9UaTMwMjYuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9UaTMwMjYuYwpAQCAtNzIsNyArNzIsNyBAQAogICogICAgIChjKSAxOTk4IEdlcmQgS25vcnIgPGtyYXhlbEBjcy50dS1iZXJsaW4uZGU+CiAgKgogICogKGZvbGxvd2luZyBhdXRob3IgaXMgbm90IGluIGFueSByZWxhdGlvbiB3aXRoIHRoaXMgY29kZSwgYnV0IGhpcyBpZGVhcwotICogIHdlcmUgdXNlZCB3aGVuIHdyaXR0aW5nIHRoaXMgZHJpdmVyKQorICogIHdlcmUgdXNlZCB3aGVuIHdyaXRpbmcgdGhpcyBkcml2ZXIpCiAgKgogICoJCSBGcmVlVkJFL0FGIChNYXRyb3gpLCAiU2hhd24gSGFyZ3JlYXZlcyIgPHNoYXduQHRhbHVsYS5kZW1vbi5jby51az4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9hY2NlbC5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYWNjZWwuYwppbmRleCBhNWM4MjVkLi5jNTdhYWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9hY2NlbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2FjY2VsLmMKQEAgLTcwLDcgKzcwLDcgQEAKICAqICAgICAoYykgMTk5OCBHZXJkIEtub3JyIDxrcmF4ZWxAY3MudHUtYmVybGluLmRlPgogICoKICAqIChmb2xsb3dpbmcgYXV0aG9yIGlzIG5vdCBpbiBhbnkgcmVsYXRpb24gd2l0aCB0aGlzIGNvZGUsIGJ1dCBoaXMgaWRlYXMKLSAqICB3ZXJlIHVzZWQgd2hlbiB3cml0dGluZyB0aGlzIGRyaXZlcikKKyAqICB3ZXJlIHVzZWQgd2hlbiB3cml0aW5nIHRoaXMgZHJpdmVyKQogICoKICAqCQkgRnJlZVZCRS9BRiAoTWF0cm94KSwgIlNoYXduIEhhcmdyZWF2ZXMiIDxzaGF3bkB0YWx1bGEuZGVtb24uY28udWs+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCmluZGV4IGNiMmFhNDAuLmM4NTU5YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKQEAgLTkzLDcgKzkzLDcgQEAKICAqICAgICAoYykgMTk5OCBHZXJkIEtub3JyIDxrcmF4ZWxAY3MudHUtYmVybGluLmRlPgogICoKICAqIChmb2xsb3dpbmcgYXV0aG9yIGlzIG5vdCBpbiBhbnkgcmVsYXRpb24gd2l0aCB0aGlzIGNvZGUsIGJ1dCBoaXMgaWRlYXMKLSAqICB3ZXJlIHVzZWQgd2hlbiB3cml0dGluZyB0aGlzIGRyaXZlcikKKyAqICB3ZXJlIHVzZWQgd2hlbiB3cml0aW5nIHRoaXMgZHJpdmVyKQogICoKICAqCQkgRnJlZVZCRS9BRiAoTWF0cm94KSwgIlNoYXduIEhhcmdyZWF2ZXMiIDxzaGF3bkB0YWx1bGEuZGVtb24uY28udWs+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfbWlzYy5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfbWlzYy5jCmluZGV4IDE4ODg2YjYuLjU5NDhlNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX21pc2MuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9taXNjLmMKQEAgLTc4LDcgKzc4LDcgQEAKICAqICAgICAoYykgMTk5OCBHZXJkIEtub3JyIDxrcmF4ZWxAY3MudHUtYmVybGluLmRlPgogICoKICAqIChmb2xsb3dpbmcgYXV0aG9yIGlzIG5vdCBpbiBhbnkgcmVsYXRpb24gd2l0aCB0aGlzIGNvZGUsIGJ1dCBoaXMgaWRlYXMKLSAqICB3ZXJlIHVzZWQgd2hlbiB3cml0dGluZyB0aGlzIGRyaXZlcikKKyAqICB3ZXJlIHVzZWQgd2hlbiB3cml0aW5nIHRoaXMgZHJpdmVyKQogICoKICAqCQkgRnJlZVZCRS9BRiAoTWF0cm94KSwgIlNoYXduIEhhcmdyZWF2ZXMiIDxzaGF3bkB0YWx1bGEuZGVtb24uY28udWs+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tb2RlZGIuYyBiL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKaW5kZXggM2U1MTc5NC4uMzc0MWFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tb2RlZGIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCkBAIC0zOTUsNyArMzk1LDcgQEAKIAogICAgIGZvciAoOzsgbmFtZSsrKSB7CiAJc3dpdGNoICgqbmFtZSkgewotCSAgICBjYXNlICcwJy4uLic5JzoKKwkgICAgY2FzZSAnMCcgLi4uICc5JzoKIAkJdmFsID0gMTAqdmFsKygqbmFtZS0nMCcpOwogCQlicmVhazsKIAkgICAgZGVmYXVsdDoKQEAgLTU0OCw3ICs1NDgsNyBAQAogCQkgICAgfSBlbHNlCiAJCQlnb3RvIGRvbmU7CiAJCSAgICBicmVhazsKLQkJY2FzZSAnMCcuLi4nOSc6CisJCWNhc2UgJzAnIC4uLiAnOSc6CiAJCSAgICBicmVhazsKIAkJY2FzZSAnTSc6CiAJCSAgICBpZiAoIXlyZXNfc3BlY2lmaWVkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9uZW9mYi5jIGIvZHJpdmVycy92aWRlby9uZW9mYi5jCmluZGV4IDM5NWNjZWQuLjczMWQ3YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbmVvZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL25lb2ZiLmMKQEAgLTY2NSw2ICs2NjUsNyBAQAogCXZhci0+cmVkLm1zYl9yaWdodCA9IDA7CiAJdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSAwOwogCXZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOworCXZhci0+dHJhbnNwLm1zYl9yaWdodCA9IDA7CiAKIAlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDg6CQkvKiBQU0VVRE9DT0xPVVIsIDI1NiAqLwpAQCAtMTI4NSwzNCArMTI4NiwzNiBAQAogCWlmIChyZWdubyA+PSBmYi0+Y21hcC5sZW4gfHwgcmVnbm8gPiAyNTUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3dpdGNoIChmYi0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7Ci0JY2FzZSA4OgorCWlmIChmYi0+dmFyLmJpdHNfcGVyX3BpeGVsIDw9IDgpIHsKIAkJb3V0YihyZWdubywgMHgzYzgpOwogCiAJCW91dGIocmVkID4+IDEwLCAweDNjOSk7CiAJCW91dGIoZ3JlZW4gPj4gMTAsIDB4M2M5KTsKIAkJb3V0YihibHVlID4+IDEwLCAweDNjOSk7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCSgodTMyICopIGZiLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0KKwl9IGVsc2UgaWYgKHJlZ25vIDwgMTYpIHsKKwkJc3dpdGNoIChmYi0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJCWNhc2UgMTY6CisJCQkoKHUzMiAqKSBmYi0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9CiAJCQkJKChyZWQgJiAweGY4MDApKSB8ICgoZ3JlZW4gJiAweGZjMDApID4+IDUpIHwKIAkJCQkoKGJsdWUgJiAweGY4MDApID4+IDExKTsKLQkJYnJlYWs7Ci0JY2FzZSAyNDoKLQkJKCh1MzIgKikgZmItPnBzZXVkb19wYWxldHRlKVtyZWdub10gPQorCQkJYnJlYWs7CisJCWNhc2UgMjQ6CisJCQkoKHUzMiAqKSBmYi0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9CiAJCQkJKChyZWQgJiAweGZmMDApIDw8IDgpIHwgKChncmVlbiAmIDB4ZmYwMCkpIHwKIAkJCQkoKGJsdWUgJiAweGZmMDApID4+IDgpOwotCQlicmVhazsKKwkJCWJyZWFrOwogI2lmZGVmIE5PXzMyQklUX1NVUFBPUlRfWUVUCi0JY2FzZSAzMjoKLQkJKCh1MzIgKikgZmItPnBzZXVkb19wYWxldHRlKVtyZWdub10gPQorCQljYXNlIDMyOgorCQkJKCh1MzIgKikgZmItPnBzZXVkb19wYWxldHRlKVtyZWdub10gPQogCQkJCSgodHJhbnNwICYgMHhmZjAwKSA8PCAxNikgfCAoKHJlZCAmIDB4ZmYwMCkgPDwgOCkgfAogCQkJCSgoZ3JlZW4gJiAweGZmMDApKSB8ICgoYmx1ZSAmIDB4ZmYwMCkgPj4gOCk7Ci0JCWJyZWFrOworCQkJYnJlYWs7CiAjZW5kaWYKLQlkZWZhdWx0OgotCQlyZXR1cm4gMTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAxOworCQl9CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2FjY2VsLmMgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9hY2NlbC5jCmluZGV4IDllZmI4YTMuLmZhNDgyMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2FjY2VsLmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfYWNjZWwuYwpAQCAtNjksMjcgKzY5LDM4IEBACiAJMHg1QSwJCQkvKiBpbnZlcnQgKi8KIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBOVkZsdXNoKHN0cnVjdCBudmlkaWFfcGFyICpwYXIpCitzdGF0aWMgaW5saW5lIHZvaWQgbnZpZGlhZmJfc2FmZV9tb2RlKHN0cnVjdCBmYl9pbmZvICppbmZvKQogeworCXN0cnVjdCBudmlkaWFfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CisJaW5mby0+cGl4bWFwLnNjYW5fYWxpZ24gPSAxOworCXBhci0+bG9ja3VwID0gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIE5WRmx1c2goc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IG52aWRpYV9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAlpbnQgY291bnQgPSAxMDAwMDAwMDAwOwogCiAJd2hpbGUgKC0tY291bnQgJiYgUkVBRF9HRVQocGFyKSAhPSBwYXItPmRtYVB1dCkgOwogCiAJaWYgKCFjb3VudCkgewogCQlwcmludGsoIm52aWRpYWZiOiBETUEgRmx1c2ggbG9ja3VwXG4iKTsKLQkJcGFyLT5sb2NrdXAgPSAxOworCQludmlkaWFmYl9zYWZlX21vZGUoaW5mbyk7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgTlZTeW5jKHN0cnVjdCBudmlkaWFfcGFyICpwYXIpCitzdGF0aWMgaW5saW5lIHZvaWQgTlZTeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQogeworCXN0cnVjdCBudmlkaWFfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJaW50IGNvdW50ID0gMTAwMDAwMDAwMDsKIAogCXdoaWxlICgtLWNvdW50ICYmIE5WX1JEMzIocGFyLT5QR1JBUEgsIDB4MDcwMCkpIDsKIAogCWlmICghY291bnQpIHsKIAkJcHJpbnRrKCJudmlkaWFmYjogRE1BIFN5bmMgbG9ja3VwXG4iKTsKLQkJcGFyLT5sb2NrdXAgPSAxOworCQludmlkaWFmYl9zYWZlX21vZGUoaW5mbyk7CiAJfQogfQogCkBAIC0xMDEsOCArMTEyLDkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIE5WRG1hV2FpdChzdHJ1Y3QgbnZpZGlhX3BhciAqcGFyLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIE5WRG1hV2FpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHNpemUpCiB7CisJc3RydWN0IG52aWRpYV9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAlpbnQgZG1hR2V0OwogCWludCBjb3VudCA9IDEwMDAwMDAwMDAsIGNudDsKIAlzaXplKys7CkBAIC0xMzUsMzQgKzE0NywzOCBAQAogCX0KIAogCWlmICghY291bnQpIHsKLQkJcHJpbnRrKCJETUEgV2FpdCBMb2NrdXBcbiIpOwotCQlwYXItPmxvY2t1cCA9IDE7CisJCXByaW50aygibnZpZGlhZmI6IERNQSBXYWl0IExvY2t1cFxuIik7CisJCW52aWRpYWZiX3NhZmVfbW9kZShpbmZvKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIE5WU2V0UGF0dGVybihzdHJ1Y3QgbnZpZGlhX3BhciAqcGFyLCB1MzIgY2xyMCwgdTMyIGNscjEsCitzdGF0aWMgdm9pZCBOVlNldFBhdHRlcm4oc3RydWN0IGZiX2luZm8gKmluZm8sIHUzMiBjbHIwLCB1MzIgY2xyMSwKIAkJCSB1MzIgcGF0MCwgdTMyIHBhdDEpCiB7Ci0JTlZEbWFTdGFydChwYXIsIFBBVFRFUk5fQ09MT1JfMCwgNCk7CisJc3RydWN0IG52aWRpYV9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCU5WRG1hU3RhcnQoaW5mbywgcGFyLCBQQVRURVJOX0NPTE9SXzAsIDQpOwogCU5WRG1hTmV4dChwYXIsIGNscjApOwogCU5WRG1hTmV4dChwYXIsIGNscjEpOwogCU5WRG1hTmV4dChwYXIsIHBhdDApOwogCU5WRG1hTmV4dChwYXIsIHBhdDEpOwogfQogCi1zdGF0aWMgdm9pZCBOVlNldFJvcFNvbGlkKHN0cnVjdCBudmlkaWFfcGFyICpwYXIsIHUzMiByb3AsIHUzMiBwbGFuZW1hc2spCitzdGF0aWMgdm9pZCBOVlNldFJvcFNvbGlkKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1MzIgcm9wLCB1MzIgcGxhbmVtYXNrKQogeworCXN0cnVjdCBudmlkaWFfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKIAlpZiAocGxhbmVtYXNrICE9IH4wKSB7Ci0JCU5WU2V0UGF0dGVybihwYXIsIDAsIHBsYW5lbWFzaywgfjAsIH4wKTsKKwkJTlZTZXRQYXR0ZXJuKGluZm8sIDAsIHBsYW5lbWFzaywgfjAsIH4wKTsKIAkJaWYgKHBhci0+Y3VycmVudFJvcCAhPSAocm9wICsgMzIpKSB7Ci0JCQlOVkRtYVN0YXJ0KHBhciwgUk9QX1NFVCwgMSk7CisJCQlOVkRtYVN0YXJ0KGluZm8sIHBhciwgUk9QX1NFVCwgMSk7CiAJCQlOVkRtYU5leHQocGFyLCBOVkNvcHlST1BfUE1bcm9wXSk7CiAJCQlwYXItPmN1cnJlbnRSb3AgPSByb3AgKyAzMjsKIAkJfQogCX0gZWxzZSBpZiAocGFyLT5jdXJyZW50Um9wICE9IHJvcCkgewogCQlpZiAocGFyLT5jdXJyZW50Um9wID49IDE2KQotCQkJTlZTZXRQYXR0ZXJuKHBhciwgfjAsIH4wLCB+MCwgfjApOwotCQlOVkRtYVN0YXJ0KHBhciwgUk9QX1NFVCwgMSk7CisJCQlOVlNldFBhdHRlcm4oaW5mbywgfjAsIH4wLCB+MCwgfjApOworCQlOVkRtYVN0YXJ0KGluZm8sIHBhciwgUk9QX1NFVCwgMSk7CiAJCU5WRG1hTmV4dChwYXIsIE5WQ29weVJPUFtyb3BdKTsKIAkJcGFyLT5jdXJyZW50Um9wID0gcm9wOwogCX0KQEAgLTE3NSw3ICsxOTEsNyBAQAogCWludCBoID0geTIgLSB5MSArIDE7CiAJaW50IHcgPSB4MiAtIHgxICsgMTsKIAotCU5WRG1hU3RhcnQocGFyLCBDTElQX1BPSU5ULCAyKTsKKwlOVkRtYVN0YXJ0KGluZm8sIHBhciwgQ0xJUF9QT0lOVCwgMik7CiAJTlZEbWFOZXh0KHBhciwgKHkxIDw8IDE2KSB8IHgxKTsKIAlOVkRtYU5leHQocGFyLCAoaCA8PCAxNikgfCB3KTsKIH0KQEAgLTIzNywyMyArMjUzLDIzIEBACiAJCWJyZWFrOwogCX0KIAotCU5WRG1hU3RhcnQocGFyLCBTVVJGQUNFX0ZPUk1BVCwgNCk7CisJTlZEbWFTdGFydChpbmZvLCBwYXIsIFNVUkZBQ0VfRk9STUFULCA0KTsKIAlOVkRtYU5leHQocGFyLCBzdXJmYWNlRm9ybWF0KTsKIAlOVkRtYU5leHQocGFyLCBwaXRjaCB8IChwaXRjaCA8PCAxNikpOwogCU5WRG1hTmV4dChwYXIsIDApOwogCU5WRG1hTmV4dChwYXIsIDApOwogCi0JTlZEbWFTdGFydChwYXIsIFBBVFRFUk5fRk9STUFULCAxKTsKKwlOVkRtYVN0YXJ0KGluZm8sIHBhciwgUEFUVEVSTl9GT1JNQVQsIDEpOwogCU5WRG1hTmV4dChwYXIsIHBhdHRlcm5Gb3JtYXQpOwogCi0JTlZEbWFTdGFydChwYXIsIFJFQ1RfRk9STUFULCAxKTsKKwlOVkRtYVN0YXJ0KGluZm8sIHBhciwgUkVDVF9GT1JNQVQsIDEpOwogCU5WRG1hTmV4dChwYXIsIHJlY3RGb3JtYXQpOwogCi0JTlZEbWFTdGFydChwYXIsIExJTkVfRk9STUFULCAxKTsKKwlOVkRtYVN0YXJ0KGluZm8sIHBhciwgTElORV9GT1JNQVQsIDEpOwogCU5WRG1hTmV4dChwYXIsIGxpbmVGb3JtYXQpOwogCiAJcGFyLT5jdXJyZW50Um9wID0gfjA7CS8qIHNldCB0byBzb21ldGhpbmcgaW52YWxpZCAqLwotCU5WU2V0Um9wU29saWQocGFyLCBST1BfQ09QWSwgfjApOworCU5WU2V0Um9wU29saWQoaW5mbywgUk9QX0NPUFksIH4wKTsKIAogCU5WU2V0Q2xpcHBpbmdSZWN0YW5nbGUoaW5mbywgMCwgMCwgaW5mby0+dmFyLnhyZXNfdmlydHVhbCwKIAkJCSAgICAgICBpbmZvLT52YXIueXJlc192aXJ0dWFsKTsKQEAgLTI2OSwxMCArMjg1LDEwIEBACiAJCXJldHVybiAwOwogCiAJaWYgKCFwYXItPmxvY2t1cCkKLQkJTlZGbHVzaChwYXIpOworCQlOVkZsdXNoKGluZm8pOwogCiAJaWYgKCFwYXItPmxvY2t1cCkKLQkJTlZTeW5jKHBhcik7CisJCU5WU3luYyhpbmZvKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjg3LDcgKzMwMyw3IEBACiAJaWYgKHBhci0+bG9ja3VwKQogCQlyZXR1cm4gY2ZiX2NvcHlhcmVhKGluZm8sIHJlZ2lvbik7CiAKLQlOVkRtYVN0YXJ0KHBhciwgQkxJVF9QT0lOVF9TUkMsIDMpOworCU5WRG1hU3RhcnQoaW5mbywgcGFyLCBCTElUX1BPSU5UX1NSQywgMyk7CiAJTlZEbWFOZXh0KHBhciwgKHJlZ2lvbi0+c3kgPDwgMTYpIHwgcmVnaW9uLT5zeCk7CiAJTlZEbWFOZXh0KHBhciwgKHJlZ2lvbi0+ZHkgPDwgMTYpIHwgcmVnaW9uLT5keCk7CiAJTlZEbWFOZXh0KHBhciwgKHJlZ2lvbi0+aGVpZ2h0IDw8IDE2KSB8IHJlZ2lvbi0+d2lkdGgpOwpAQCAtMzEyLDE5ICszMjgsMTkgQEAKIAkJY29sb3IgPSAoKHUzMiAqKSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVjdC0+Y29sb3JdOwogCiAJaWYgKHJlY3QtPnJvcCAhPSBST1BfQ09QWSkKLQkJTlZTZXRSb3BTb2xpZChwYXIsIHJlY3QtPnJvcCwgfjApOworCQlOVlNldFJvcFNvbGlkKGluZm8sIHJlY3QtPnJvcCwgfjApOwogCi0JTlZEbWFTdGFydChwYXIsIFJFQ1RfU09MSURfQ09MT1IsIDEpOworCU5WRG1hU3RhcnQoaW5mbywgcGFyLCBSRUNUX1NPTElEX0NPTE9SLCAxKTsKIAlOVkRtYU5leHQocGFyLCBjb2xvcik7CiAKLQlOVkRtYVN0YXJ0KHBhciwgUkVDVF9TT0xJRF9SRUNUUygwKSwgMik7CisJTlZEbWFTdGFydChpbmZvLCBwYXIsIFJFQ1RfU09MSURfUkVDVFMoMCksIDIpOwogCU5WRG1hTmV4dChwYXIsIChyZWN0LT5keCA8PCAxNikgfCByZWN0LT5keSk7CiAJTlZEbWFOZXh0KHBhciwgKHJlY3QtPndpZHRoIDw8IDE2KSB8IHJlY3QtPmhlaWdodCk7CiAKIAlOVkRtYUtpY2tvZmYocGFyKTsKIAogCWlmIChyZWN0LT5yb3AgIT0gUk9QX0NPUFkpCi0JCU5WU2V0Um9wU29saWQocGFyLCBST1BfQ09QWSwgfjApOworCQlOVlNldFJvcFNvbGlkKGluZm8sIFJPUF9DT1BZLCB+MCk7CiB9CiAKIHN0YXRpYyB2b2lkIG52aWRpYWZiX21vbm9fY29sb3JfZXhwYW5kKHN0cnVjdCBmYl9pbmZvICppbmZvLApAQCAtMzQ2LDcgKzM2Miw3IEBACiAJCWJnID0gKCh1MzIgKikgaW5mby0+cHNldWRvX3BhbGV0dGUpW2ltYWdlLT5iZ19jb2xvcl0gfCBtYXNrOwogCX0KIAotCU5WRG1hU3RhcnQocGFyLCBSRUNUX0VYUEFORF9UV09fQ09MT1JfQ0xJUCwgNyk7CisJTlZEbWFTdGFydChpbmZvLCBwYXIsIFJFQ1RfRVhQQU5EX1RXT19DT0xPUl9DTElQLCA3KTsKIAlOVkRtYU5leHQocGFyLCAoaW1hZ2UtPmR5IDw8IDE2KSB8IChpbWFnZS0+ZHggJiAweGZmZmYpKTsKIAlOVkRtYU5leHQocGFyLCAoKGltYWdlLT5keSArIGltYWdlLT5oZWlnaHQpIDw8IDE2KSB8CiAJCSAgKChpbWFnZS0+ZHggKyBpbWFnZS0+d2lkdGgpICYgMHhmZmZmKSk7CkBAIC0zNTcsNyArMzczLDcgQEAKIAlOVkRtYU5leHQocGFyLCAoaW1hZ2UtPmR5IDw8IDE2KSB8IChpbWFnZS0+ZHggJiAweGZmZmYpKTsKIAogCXdoaWxlIChkc2l6ZSA+PSBSRUNUX0VYUEFORF9UV09fQ09MT1JfREFUQV9NQVhfRFdPUkRTKSB7Ci0JCU5WRG1hU3RhcnQocGFyLCBSRUNUX0VYUEFORF9UV09fQ09MT1JfREFUQSgwKSwKKwkJTlZEbWFTdGFydChpbmZvLCBwYXIsIFJFQ1RfRVhQQU5EX1RXT19DT0xPUl9EQVRBKDApLAogCQkJICAgUkVDVF9FWFBBTkRfVFdPX0NPTE9SX0RBVEFfTUFYX0RXT1JEUyk7CiAKIAkJZm9yIChqID0gUkVDVF9FWFBBTkRfVFdPX0NPTE9SX0RBVEFfTUFYX0RXT1JEUzsgai0tOykgewpAQCAtMzcwLDcgKzM4Niw3IEBACiAJfQogCiAJaWYgKGRzaXplKSB7Ci0JCU5WRG1hU3RhcnQocGFyLCBSRUNUX0VYUEFORF9UV09fQ09MT1JfREFUQSgwKSwgZHNpemUpOworCQlOVkRtYVN0YXJ0KGluZm8sIHBhciwgUkVDVF9FWFBBTkRfVFdPX0NPTE9SX0RBVEEoMCksIGRzaXplKTsKIAogCQlmb3IgKGogPSBkc2l6ZTsgai0tOykgewogCQkJdG1wID0gZGF0YVtrKytdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfaHcuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2h3LmMKaW5kZXggZWE0MjYxMS4uYWZmMTFiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfaHcuYworKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9ody5jCkBAIC0xNTAsNyArMTUwLDggQEAKIAkJTSA9IHBsbCAmIDB4RkY7CiAJCU4gPSAocGxsID4+IDgpICYgMHhGRjsKIAkJaWYgKCgocGFyLT5DaGlwc2V0ICYgMHhmZmYwKSA9PSAweDAyOTApIHx8Ci0JCQkJKChwYXItPkNoaXBzZXQgJiAweGZmZjApID09IDB4MDM5MCkpIHsKKwkJCSgocGFyLT5DaGlwc2V0ICYgMHhmZmYwKSA9PSAweDAzOTApIHx8CisJCQkoKHBhci0+Q2hpcHNldCAmIDB4ZmZmMCkgPT0gMHgwMkUwKSkgewogCQkJTUIgPSAxOwogCQkJTkIgPSAxOwogCQl9IGVsc2UgewpAQCAtNjg2LDcgKzY4Nyw3IEBACiAKIAlpZiAoKHBhci0+Q2hpcHNldCAmIDB4MEZGMCkgPT0gMHgwMUEwKSB7CiAJCXVuc2lnbmVkIGludCB1TUNsa1Bvc3REaXY7Ci0JCWRldiA9IHBjaV9maW5kX3Nsb3QoMCwgMyk7CisJCWRldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KDAsIDMpOwogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDZDLCAmdU1DbGtQb3N0RGl2KTsKIAkJdU1DbGtQb3N0RGl2ID0gKHVNQ2xrUG9zdERpdiA+PiA4KSAmIDB4ZjsKIApAQCAtNjk0LDExICs2OTUsMTEgQEAKIAkJCXVNQ2xrUG9zdERpdiA9IDQ7CiAJCU1DbGsgPSA0MDAwMDAgLyB1TUNsa1Bvc3REaXY7CiAJfSBlbHNlIHsKLQkJZGV2ID0gcGNpX2ZpbmRfc2xvdCgwLCA1KTsKKwkJZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgNSk7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NGMsICZNQ2xrKTsKIAkJTUNsayAvPSAxMDAwOwogCX0KLQorCXBjaV9kZXZfcHV0KGRldik7CiAJcGxsID0gTlZfUkQzMihwYXItPlBSQU1EQUMwLCAweDA1MDApOwogCU0gPSAocGxsID4+IDApICYgMHhGRjsKIAlOID0gKHBsbCA+PiA4KSAmIDB4RkY7CkBAIC03MDcsMTkgKzcwOCwyMSBAQAogCXNpbV9kYXRhLnBpeF9icHAgPSAoY2hhcilwaXhlbERlcHRoOwogCXNpbV9kYXRhLmVuYWJsZV92aWRlbyA9IDA7CiAJc2ltX2RhdGEuZW5hYmxlX21wID0gMDsKLQlwY2lfZmluZF9zbG90KDAsIDEpOworCWRldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KDAsIDEpOwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4N0MsICZzaW1fZGF0YS5tZW1vcnlfdHlwZSk7CisJcGNpX2Rldl9wdXQoZGV2KTsKIAlzaW1fZGF0YS5tZW1vcnlfdHlwZSA9IChzaW1fZGF0YS5tZW1vcnlfdHlwZSA+PiAxMikgJiAxOwogCXNpbV9kYXRhLm1lbW9yeV93aWR0aCA9IDY0OwogCi0JZGV2ID0gcGNpX2ZpbmRfc2xvdCgwLCAzKTsKKwlkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCAzKTsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAwLCAmbWVtY3RybCk7CisJcGNpX2Rldl9wdXQoZGV2KTsKIAltZW1jdHJsID4+PSAxNjsKIAogCWlmICgobWVtY3RybCA9PSAweDFBOSkgfHwgKG1lbWN0cmwgPT0gMHgxQUIpIHx8IChtZW1jdHJsID09IDB4MUVEKSkgewogCQlpbnQgZGltbVszXTsKIAotCQlwY2lfZmluZF9zbG90KDAsIDIpOworCQlkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCAyKTsKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgJmRpbW1bMF0pOwogCQlkaW1tWzBdID0gKGRpbW1bMF0gPj4gOCkgJiAweDRmOwogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCAmZGltbVsxXSk7CkBAIC03MzEsNiArNzM0LDcgQEAKIAkJCXByaW50aygibnZpZGlhZmI6IHlvdXIgbkZvcmNlIERJTU1zIGFyZSBub3QgYXJyYW5nZWQgIgogCQkJICAgICAgICJpbiBvcHRpbWFsIGJhbmtzIVxuIik7CiAJCX0KKwkJcGNpX2Rldl9wdXQoZGV2KTsKIAl9CiAKIAlzaW1fZGF0YS5tZW1fbGF0ZW5jeSA9IDM7CkBAIC05NjAsNiArOTY0LDcgQEAKIAogCQlpZiAoKChwYXItPkNoaXBzZXQgJiAweGZmZjApID09IDB4MDA5MCkgfHwKIAkJICAgICgocGFyLT5DaGlwc2V0ICYgMHhmZmYwKSA9PSAweDAxRDApIHx8CisJCSAgICAoKHBhci0+Q2hpcHNldCAmIDB4ZmZmMCkgPT0gMHgwMkUwKSB8fAogCQkgICAgKChwYXItPkNoaXBzZXQgJiAweGZmZjApID09IDB4MDI5MCkpCiAJCQlyZWdpb25zID0gMTU7CiAJCWZvcihpID0gMDsgaSA8IHJlZ2lvbnM7IGkrKykgewpAQCAtMTI3Miw2ICsxMjc3LDcgQEAKIAkJCQkJCTB4MDAxMDAwMDApOwogCQkJCQlicmVhazsKIAkJCQljYXNlIDB4MDA5MDoKKwkJCQljYXNlIDB4MDJFMDoKIAkJCQljYXNlIDB4MDI5MDoKIAkJCQkJTlZfV1IzMihwYXItPlBSQU1EQUMsIDB4MDYwOCwKIAkJCQkJCU5WX1JEMzIocGFyLT5QUkFNREFDLCAweDA2MDgpIHwKQEAgLTEzNDksNiArMTM1NSw3IEBACiAJCQl9IGVsc2UgewogCQkJCWlmICgoKHBhci0+Q2hpcHNldCAmIDB4ZmZmMCkgPT0gMHgwMDkwKSB8fAogCQkJCSAgICAoKHBhci0+Q2hpcHNldCAmIDB4ZmZmMCkgPT0gMHgwMUQwKSB8fAorCQkJCSAgICAoKHBhci0+Q2hpcHNldCAmIDB4ZmZmMCkgPT0gMHgwMkUwKSB8fAogCQkJCSAgICAoKHBhci0+Q2hpcHNldCAmIDB4ZmZmMCkgPT0gMHgwMjkwKSkgewogCQkJCQlmb3IgKGkgPSAwOyBpIDwgNjA7IGkrKykgewogCQkJCQkJTlZfV1IzMihwYXItPlBHUkFQSCwKQEAgLTE0MDAsNiArMTQwNyw3IEBACiAJCQkJfSBlbHNlIHsKIAkJCQkJaWYgKChwYXItPkNoaXBzZXQgJiAweGZmZjApID09IDB4MDA5MCB8fAogCQkJCQkgICAgKHBhci0+Q2hpcHNldCAmIDB4ZmZmMCkgPT0gMHgwMUQwIHx8CisJCQkJCSAgICAocGFyLT5DaGlwc2V0ICYgMHhmZmYwKSA9PSAweDAyRTAgfHwKIAkJCQkJICAgIChwYXItPkNoaXBzZXQgJiAweGZmZjApID09IDB4MDI5MCkgewogCQkJCQkJTlZfV1IzMihwYXItPlBHUkFQSCwgMHgwREYwLAogCQkJCQkJCU5WX1JEMzIocGFyLT5QRkIsIDB4MDIwMCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfaTJjLmMgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9pMmMuYwppbmRleCBiODU4ODk3Li5hZmU0NTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9pMmMuYwpAQCAtMzAsMTYgKzMwLDE0IEBACiAJc3RydWN0IG52aWRpYV9wYXIgKnBhciA9IGNoYW4tPnBhcjsKIAl1MzIgdmFsOwogCi0JVkdBX1dSMDgocGFyLT5QQ0lPLCAweDNkNCwgY2hhbi0+ZGRjX2Jhc2UgKyAxKTsKLQl2YWwgPSBWR0FfUkQwOChwYXItPlBDSU8sIDB4M2Q1KSAmIDB4ZjA7CisJdmFsID0gTlZSZWFkQ3J0YyhwYXIsIGNoYW4tPmRkY19iYXNlICsgMSkgJiAweGYwOwogCiAJaWYgKHN0YXRlKQogCQl2YWwgfD0gMHgyMDsKIAllbHNlCiAJCXZhbCAmPSB+MHgyMDsKIAotCVZHQV9XUjA4KHBhci0+UENJTywgMHgzZDQsIGNoYW4tPmRkY19iYXNlICsgMSk7Ci0JVkdBX1dSMDgocGFyLT5QQ0lPLCAweDNkNSwgdmFsIHwgMHgxKTsKKwlOVldyaXRlQ3J0YyhwYXIsIGNoYW4tPmRkY19iYXNlICsgMSwgdmFsIHwgMHgwMSk7CiB9CiAKIHN0YXRpYyB2b2lkIG52aWRpYV9ncGlvX3NldHNkYSh2b2lkICpkYXRhLCBpbnQgc3RhdGUpCkBAIC00OCwxNiArNDYsMTQgQEAKIAlzdHJ1Y3QgbnZpZGlhX3BhciAqcGFyID0gY2hhbi0+cGFyOwogCXUzMiB2YWw7CiAKLQlWR0FfV1IwOChwYXItPlBDSU8sIDB4M2Q0LCBjaGFuLT5kZGNfYmFzZSArIDEpOwotCXZhbCA9IFZHQV9SRDA4KHBhci0+UENJTywgMHgzZDUpICYgMHhmMDsKKwl2YWwgPSBOVlJlYWRDcnRjKHBhciwgY2hhbi0+ZGRjX2Jhc2UgKyAxKSAmIDB4ZjA7CiAKIAlpZiAoc3RhdGUpCiAJCXZhbCB8PSAweDEwOwogCWVsc2UKIAkJdmFsICY9IH4weDEwOwogCi0JVkdBX1dSMDgocGFyLT5QQ0lPLCAweDNkNCwgY2hhbi0+ZGRjX2Jhc2UgKyAxKTsKLQlWR0FfV1IwOChwYXItPlBDSU8sIDB4M2Q1LCB2YWwgfCAweDEpOworCU5WV3JpdGVDcnRjKHBhciwgY2hhbi0+ZGRjX2Jhc2UgKyAxLCB2YWwgfCAweDAxKTsKIH0KIAogc3RhdGljIGludCBudmlkaWFfZ3Bpb19nZXRzY2wodm9pZCAqZGF0YSkKQEAgLTY2LDEyICs2Miw5IEBACiAJc3RydWN0IG52aWRpYV9wYXIgKnBhciA9IGNoYW4tPnBhcjsKIAl1MzIgdmFsID0gMDsKIAotCVZHQV9XUjA4KHBhci0+UENJTywgMHgzZDQsIGNoYW4tPmRkY19iYXNlKTsKLQlpZiAoVkdBX1JEMDgocGFyLT5QQ0lPLCAweDNkNSkgJiAweDA0KQorCWlmIChOVlJlYWRDcnRjKHBhciwgY2hhbi0+ZGRjX2Jhc2UpICYgMHgwNCkKIAkJdmFsID0gMTsKIAotCXZhbCA9IFZHQV9SRDA4KHBhci0+UENJTywgMHgzZDUpOwotCiAJcmV0dXJuIHZhbDsKIH0KIApAQCAtODEsMjAgKzc0LDIxIEBACiAJc3RydWN0IG52aWRpYV9wYXIgKnBhciA9IGNoYW4tPnBhcjsKIAl1MzIgdmFsID0gMDsKIAotCVZHQV9XUjA4KHBhci0+UENJTywgMHgzZDQsIGNoYW4tPmRkY19iYXNlKTsKLQlpZiAoVkdBX1JEMDgocGFyLT5QQ0lPLCAweDNkNSkgJiAweDA4KQorCWlmIChOVlJlYWRDcnRjKHBhciwgY2hhbi0+ZGRjX2Jhc2UpICYgMHgwOCkKIAkJdmFsID0gMTsKIAogCXJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBpbnQgbnZpZGlhX3NldHVwX2kyY19idXMoc3RydWN0IG52aWRpYV9pMmNfY2hhbiAqY2hhbiwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBpbnQgbnZpZGlhX3NldHVwX2kyY19idXMoc3RydWN0IG52aWRpYV9pMmNfY2hhbiAqY2hhbiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQl1bnNpZ25lZCBpbnQgaTJjX2NsYXNzKQogewogCWludCByYzsKIAogCXN0cmNweShjaGFuLT5hZGFwdGVyLm5hbWUsIG5hbWUpOwogCWNoYW4tPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKIAljaGFuLT5hZGFwdGVyLmlkID0gSTJDX0hXX0JfTlZJRElBOworCWNoYW4tPmFkYXB0ZXIuY2xhc3MgPSBpMmNfY2xhc3M7CiAJY2hhbi0+YWRhcHRlci5hbGdvX2RhdGEgPSAmY2hhbi0+YWxnbzsKIAljaGFuLT5hZGFwdGVyLmRldi5wYXJlbnQgPSAmY2hhbi0+cGFyLT5wY2lfZGV2LT5kZXY7CiAJY2hhbi0+YWxnby5zZXRzZGEgPSBudmlkaWFfZ3Bpb19zZXRzZGE7CkBAIC0xMjcsODMgKzEyMSwzOSBAQAogCiB2b2lkIG52aWRpYV9jcmVhdGVfaTJjX2J1c3NlcyhzdHJ1Y3QgbnZpZGlhX3BhciAqcGFyKQogewotCXBhci0+YnVzID0gMzsKLQogCXBhci0+Y2hhblswXS5wYXIgPSBwYXI7CiAJcGFyLT5jaGFuWzFdLnBhciA9IHBhcjsKIAlwYXItPmNoYW5bMl0ucGFyID0gcGFyOwogCi0JcGFyLT5jaGFuWzBdLmRkY19iYXNlID0gMHgzZTsKLQludmlkaWFfc2V0dXBfaTJjX2J1cygmcGFyLT5jaGFuWzBdLCAibnZpZGlhICMwIik7CisJcGFyLT5jaGFuWzBdLmRkY19iYXNlID0gMHgzNjsKKyAJbnZpZGlhX3NldHVwX2kyY19idXMoJnBhci0+Y2hhblswXSwgIm52aWRpYSAjMCIsIEkyQ19DTEFTU19IV01PTik7CiAKLQlwYXItPmNoYW5bMV0uZGRjX2Jhc2UgPSAweDM2OwotCW52aWRpYV9zZXR1cF9pMmNfYnVzKCZwYXItPmNoYW5bMV0sICJudmlkaWEgIzEiKTsKKwlwYXItPmNoYW5bMV0uZGRjX2Jhc2UgPSAweDNlOworIAludmlkaWFfc2V0dXBfaTJjX2J1cygmcGFyLT5jaGFuWzFdLCAibnZpZGlhICMxIiwgMCk7CiAKIAlwYXItPmNoYW5bMl0uZGRjX2Jhc2UgPSAweDUwOwotCW52aWRpYV9zZXR1cF9pMmNfYnVzKCZwYXItPmNoYW5bMl0sICJudmlkaWEgIzIiKTsKKyAJbnZpZGlhX3NldHVwX2kyY19idXMoJnBhci0+Y2hhblsyXSwgIm52aWRpYSAjMiIsIDApOwogfQogCiB2b2lkIG52aWRpYV9kZWxldGVfaTJjX2J1c3NlcyhzdHJ1Y3QgbnZpZGlhX3BhciAqcGFyKQogewotCWlmIChwYXItPmNoYW5bMF0ucGFyKQotCQlpMmNfZGVsX2FkYXB0ZXIoJnBhci0+Y2hhblswXS5hZGFwdGVyKTsKLQlwYXItPmNoYW5bMF0ucGFyID0gTlVMTDsKKwlpbnQgaTsKIAotCWlmIChwYXItPmNoYW5bMV0ucGFyKQotCQlpMmNfZGVsX2FkYXB0ZXIoJnBhci0+Y2hhblsxXS5hZGFwdGVyKTsKLQlwYXItPmNoYW5bMV0ucGFyID0gTlVMTDsKLQotCWlmIChwYXItPmNoYW5bMl0ucGFyKQotCQlpMmNfZGVsX2FkYXB0ZXIoJnBhci0+Y2hhblsyXS5hZGFwdGVyKTsKLQlwYXItPmNoYW5bMl0ucGFyID0gTlVMTDsKLQotfQotCi1zdGF0aWMgdTggKm52aWRpYV9kb19wcm9iZV9pMmNfZWRpZChzdHJ1Y3QgbnZpZGlhX2kyY19jaGFuICpjaGFuKQotewotCXU4IHN0YXJ0ID0gMHgwOwotCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKLQkJewotCQkgLmFkZHIgPSAweDUwLAotCQkgLmxlbiA9IDEsCi0JCSAuYnVmID0gJnN0YXJ0LAotCQkgfSwgewotCQkgICAgIC5hZGRyID0gMHg1MCwKLQkJICAgICAuZmxhZ3MgPSBJMkNfTV9SRCwKLQkJICAgICAubGVuID0gRURJRF9MRU5HVEgsCi0JCSAgICAgfSwKLQl9OwotCXU4ICpidWY7Ci0KLQlpZiAoIWNoYW4tPnBhcikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlidWYgPSBrbWFsbG9jKEVESURfTEVOR1RILCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlkZXZfd2FybigmY2hhbi0+cGFyLT5wY2lfZGV2LT5kZXYsICJPdXQgb2YgbWVtb3J5IVxuIik7Ci0JCXJldHVybiBOVUxMOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKCFwYXItPmNoYW5baV0ucGFyKQorCQkJY29udGludWU7CisJCWkyY19kZWxfYWRhcHRlcigmcGFyLT5jaGFuW2ldLmFkYXB0ZXIpOworCQlwYXItPmNoYW5baV0ucGFyID0gTlVMTDsKIAl9Ci0JbXNnc1sxXS5idWYgPSBidWY7Ci0KLQlpZiAoaTJjX3RyYW5zZmVyKCZjaGFuLT5hZGFwdGVyLCBtc2dzLCAyKSA9PSAyKQotCQlyZXR1cm4gYnVmOwotCWRldl9kYmcoJmNoYW4tPnBhci0+cGNpX2Rldi0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgRURJRCBibG9jay5cbiIpOwotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIE5VTEw7CiB9CiAKIGludCBudmlkaWFfcHJvYmVfaTJjX2Nvbm5lY3RvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IGNvbm4sIHU4ICoqb3V0X2VkaWQpCiB7CiAJc3RydWN0IG52aWRpYV9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAl1OCAqZWRpZCA9IE5VTEw7Ci0JaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCS8qIERvIHRoZSByZWFsIHdvcmsgKi8KLQkJZWRpZCA9IG52aWRpYV9kb19wcm9iZV9pMmNfZWRpZCgmcGFyLT5jaGFuW2Nvbm4gLSAxXSk7Ci0JCWlmIChlZGlkKQotCQkJYnJlYWs7Ci0JfQorCWlmIChwYXItPmNoYW5bY29ubiAtIDFdLnBhcikKKwkJZWRpZCA9IGZiX2RkY19yZWFkKCZwYXItPmNoYW5bY29ubiAtIDFdLmFkYXB0ZXIpOwogCiAJaWYgKCFlZGlkICYmIGNvbm4gPT0gMSkgewogCQkvKiB0cnkgdG8gZ2V0IGZyb20gZmlybXdhcmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2xvY2FsLmggYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9sb2NhbC5oCmluZGV4IGUwMDlkMjQuLjY4ZTUwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2xvY2FsLmgKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfbG9jYWwuaApAQCAtNzMsOSArNzMsOSBAQAogI2RlZmluZSBOVkRtYU5leHQocGFyLCBkYXRhKSBcCiAgICAgIE5WX1dSMzIoJihwYXIpLT5kbWFCYXNlWyhwYXIpLT5kbWFDdXJyZW50KytdLCAwLCAoZGF0YSkpCiAKLSNkZWZpbmUgTlZEbWFTdGFydChwYXIsIHRhZywgc2l6ZSkgeyAgICAgICAgICBcCisjZGVmaW5lIE5WRG1hU3RhcnQoaW5mbywgcGFyLCB0YWcsIHNpemUpIHsgICAgXAogICAgICBpZigocGFyKS0+ZG1hRnJlZSA8PSAoc2l6ZSkpICAgICAgICAgICAgIFwKLSAgICAgICAgTlZEbWFXYWl0KHBhciwgc2l6ZSk7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIE5WRG1hV2FpdChpbmZvLCBzaXplKTsgICAgICAgICAgICAgICAgXAogICAgICBOVkRtYU5leHQocGFyLCAoKHNpemUpIDw8IDE4KSB8ICh0YWcpKTsgIFwKICAgICAgKHBhciktPmRtYUZyZWUgLT0gKChzaXplKSArIDEpOyAgICAgICAgICBcCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9vZi5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfb2YuYwppbmRleCAxNjNhNzc0Li43M2FmZDdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9vZi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X29mLmMKQEAgLTQ2LDE1ICs0NiwxNSBAQAogCiAJCWZvciAoZHAgPSBOVUxMOwogCQkgICAgIChkcCA9IG9mX2dldF9uZXh0X2NoaWxkKHBhcmVudCwgZHApKSAhPSBOVUxMOykgewotCQkJcG5hbWUgPSBnZXRfcHJvcGVydHkoZHAsICJuYW1lIiwgTlVMTCk7CisJCQlwbmFtZSA9IG9mX2dldF9wcm9wZXJ0eShkcCwgIm5hbWUiLCBOVUxMKTsKIAkJCWlmICghcG5hbWUpCiAJCQkJY29udGludWU7CiAJCQlsZW4gPSBzdHJsZW4ocG5hbWUpOwogCQkJaWYgKChwbmFtZVtsZW4tMV0gPT0gJ0EnICYmIGNvbm4gPT0gMSkgfHwKIAkJCSAgICAocG5hbWVbbGVuLTFdID09ICdCJyAmJiBjb25uID09IDIpKSB7CiAJCQkJZm9yIChpID0gMDsgcHJvcG5hbWVzW2ldICE9IE5VTEw7ICsraSkgewotCQkJCQlwZWRpZCA9IGdldF9wcm9wZXJ0eShkcCwgcHJvcG5hbWVzW2ldLAotCQkJCQkJCSAgICAgTlVMTCk7CisJCQkJCXBlZGlkID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLAorCQkJCQkJCXByb3BuYW1lc1tpXSwgTlVMTCk7CiAJCQkJCWlmIChwZWRpZCAhPSBOVUxMKQogCQkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtNjUsNyArNjUsNyBAQAogCX0KIAlpZiAocGVkaWQgPT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBwcm9wbmFtZXNbaV0gIT0gTlVMTDsgKytpKSB7Ci0JCQlwZWRpZCA9IGdldF9wcm9wZXJ0eShwYXJlbnQsIHByb3BuYW1lc1tpXSwgTlVMTCk7CisJCQlwZWRpZCA9IG9mX2dldF9wcm9wZXJ0eShwYXJlbnQsIHByb3BuYW1lc1tpXSwgTlVMTCk7CiAJCQlpZiAocGVkaWQgIT0gTlVMTCkKIAkJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfc2V0dXAuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X3NldHVwLmMKaW5kZXggZWFiM2UyOC4uNzA3ZTJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfc2V0dXAuYworKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9zZXR1cC5jCkBAIC0yNjEsNyArMjYxLDcgQEAKIAl9CiAjZW5kaWYKIAotCWRldiA9IHBjaV9maW5kX3Nsb3QoMCwgMSk7CisJZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgMSk7CiAJaWYgKChwYXItPkNoaXBzZXQgJiAweGZmZmYpID09IDB4MDFhMCkgewogCQlpbnQgYW10ID0gMDsKIApAQCAtMjc2LDYgKzI3Niw3IEBACiAJCXBhci0+UmFtQW1vdW50S0J5dGVzID0KIAkJICAgIChOVl9SRDMyKHBhci0+UEZCLCAweDAyMEMpICYgMHhGRkYwMDAwMCkgPj4gMTA7CiAJfQorCXBjaV9kZXZfcHV0KGRldik7CiAKIAlwYXItPkNyeXN0YWxGcmVxS0h6ID0gKE5WX1JEMzIocGFyLT5QRVhUREVWLCAweDAwMDApICYgKDEgPDwgNikpID8KIAkgICAgMTQzMTggOiAxMzUwMDsKQEAgLTY1Niw3ICs2NTcsNyBAQAogCXBhci0+TFZEUyA9IDA7CiAJaWYgKHBhci0+RmxhdFBhbmVsICYmIHBhci0+dHdvSGVhZHMpIHsKIAkJTlZfV1IzMihwYXItPlBSQU1EQUMwLCAweDA4QjAsIDB4MDAwMTAwMDQpOwotCQlpZiAocGFyLT5QUkFNREFDMFsweDA4YjRdICYgMSkKKwkJaWYgKE5WX1JEMzIocGFyLT5QUkFNREFDMCwgMHgwOGI0KSAmIDEpCiAJCQlwYXItPkxWRFMgPSAxOwogCQlwcmludGsoIm52aWRpYWZiOiBQYW5lbCBpcyAlc1xuIiwgcGFyLT5MVkRTID8gIkxWRFMiIDogIlRNRFMiKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl90eXBlLmggYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl90eXBlLmgKaW5kZXggODZlNjVkZS4uMzhmN2NjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfdHlwZS5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X3R5cGUuaApAQCAtNCw4ICs0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDx2aWRlby92Z2EuaD4KIAogI2RlZmluZSBOVl9BUkNIXzA0ICAweDA0CiAjZGVmaW5lIE5WX0FSQ0hfMTAgIDB4MTAKQEAgLTk0LDEzICs5NSwxNSBAQAogc3RydWN0IG52aWRpYV9wYXIgewogCVJJVkFfSFdfU1RBVEUgU2F2ZWRSZWc7CiAJUklWQV9IV19TVEFURSBNb2RlUmVnOworCVJJVkFfSFdfU1RBVEUgaW5pdGlhbF9zdGF0ZTsKIAlSSVZBX0hXX1NUQVRFICpDdXJyZW50U3RhdGU7CisJc3RydWN0IHZnYXN0YXRlIHZnYXN0YXRlOworCXN0cnVjdCBtdXRleCBvcGVuX2xvY2s7CiAJdTMyIHBzZXVkb19wYWxldHRlWzE2XTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAl1MzIgQXJjaGl0ZWN0dXJlOwogCXUzMiBDdXJzb3JTdGFydDsKIAlpbnQgQ2hpcHNldDsKLQlpbnQgYnVzOwogCXVuc2lnbmVkIGxvbmcgRmJBZGRyZXNzOwogCXU4IF9faW9tZW0gKkZiU3RhcnQ7CiAJdTMyIEZiTWFwU2l6ZTsKQEAgLTE0Myw2ICsxNDYsNyBAQAogCWludCBCbGVuZGluZ1Bvc3NpYmxlOwogCXUzMiBwYWxldHRlRW5hYmxlZDsKIAl1MzIgZm9yY2VDUlRDOworCXUzMiBvcGVuX2NvdW50OwogCXU4IEREQ0Jhc2U7CiAjaWZkZWYgQ09ORklHX01UUlIKIAlzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYwppbmRleCBiOTdlYzY5Li40MWY2MzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYworKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYwpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIm52X3Byb3RvLmgiCiAjaW5jbHVkZSAibnZfZG1hLmgiCiAKLSN1bmRlZiBDT05GSUdfRkJfTlZJRElBX0RFQlVHCiAjaWZkZWYgQ09ORklHX0ZCX05WSURJQV9ERUJVRwogI2RlZmluZSBOVlRSQUNFICAgICAgICAgIHByaW50awogI2Vsc2UKQEAgLTIwMCw3ICsxOTksNyBAQAogICAgcmV0dXJuIHR3ZWFrOwogfQogCi1zdGF0aWMgdm9pZCBudmlkaWFfdmdhX3Byb3RlY3Qoc3RydWN0IG52aWRpYV9wYXIgKnBhciwgaW50IG9uKQorc3RhdGljIHZvaWQgbnZpZGlhX3NjcmVlbl9vZmYoc3RydWN0IG52aWRpYV9wYXIgKnBhciwgaW50IG9uKQogewogCXVuc2lnbmVkIGNoYXIgdG1wOwogCkBAIC02NDksNyArNjQ4LDcgQEAKIAkJTlZMb2NrVW5sb2NrKHBhciwgMCk7CiAJfQogCi0JbnZpZGlhX3ZnYV9wcm90ZWN0KHBhciwgMSk7CisJbnZpZGlhX3NjcmVlbl9vZmYocGFyLCAxKTsKIAogCW52aWRpYV93cml0ZV9yZWdzKHBhciwgJnBhci0+TW9kZVJlZyk7CiAJTlZTZXRTdGFydEFkZHJlc3MocGFyLCAwKTsKQEAgLTY4Nyw3ICs2ODYsNyBAQAogCiAJcGFyLT5jdXJzb3JfcmVzZXQgPSAxOwogCi0JbnZpZGlhX3ZnYV9wcm90ZWN0KHBhciwgMCk7CisJbnZpZGlhX3NjcmVlbl9vZmYocGFyLCAwKTsKIAogI2lmZGVmIENPTkZJR19CT09UWF9URVhUCiAJLyogVXBkYXRlIGRlYnVnIHRleHQgZW5naW5lICovCkBAIC02OTYsNiArNjk1LDcgQEAKIAkJCSAgICAgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsLCBpbmZvLT5maXgubGluZV9sZW5ndGgpOwogI2VuZGlmCiAKKwlOVkxvY2tVbmxvY2socGFyLCAwKTsKIAlOVlRSQUNFX0xFQVZFKCk7CiAJcmV0dXJuIDA7CiB9CkBAIC05NDgsOCArOTQ4LDgwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBCZWNhdXNlIHRoZSBWR0EgcmVnaXN0ZXJzIGFyZSBub3QgbWFwcGVkIGxpbmVhcmx5IGluIGl0cyBNTUlPIHNwYWNlLAorICogcmVzdHJpY3QgVkdBIHJlZ2lzdGVyIHNhdmluZyBhbmQgcmVzdG9yZSB0byB4ODYgb25seSwgd2hlcmUgbGVnYWN5IFZHQSBJTworICogYWNjZXNzIGlzIGxlZ2FsLiBDb25zZXF1ZW50bHksIHdlIG11c3QgYWxzbyBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHRoZQorICogcHJpbWFyeSBkaXNwbGF5LgorICovCisjaWZkZWYgQ09ORklHX1g4Ngorc3RhdGljIHZvaWQgc2F2ZV92Z2FfeDg2KHN0cnVjdCBudmlkaWFfcGFyICpwYXIpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM9ICZwYXItPnBjaV9kZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdOworCisJaWYgKHJlcyAmJiByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9ST01fU0hBRE9XKSB7CisJCW1lbXNldCgmcGFyLT52Z2FzdGF0ZSwgMCwgc2l6ZW9mKHBhci0+dmdhc3RhdGUpKTsKKwkJcGFyLT52Z2FzdGF0ZS5mbGFncyA9IFZHQV9TQVZFX01PREUgfCBWR0FfU0FWRV9GT05UUyB8CisJCQlWR0FfU0FWRV9DTUFQOworCQlzYXZlX3ZnYSgmcGFyLT52Z2FzdGF0ZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZXN0b3JlX3ZnYV94ODYoc3RydWN0IG52aWRpYV9wYXIgKnBhcikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcz0gJnBhci0+cGNpX2Rldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV07CisKKwlpZiAocmVzICYmIHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1JPTV9TSEFET1cpCisJCXJlc3RvcmVfdmdhKCZwYXItPnZnYXN0YXRlKTsKK30KKyNlbHNlCisjZGVmaW5lIHNhdmVfdmdhX3g4Nih4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgcmVzdG9yZV92Z2FfeDg2KHgpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmIC8qIFg4NiAqLworCitzdGF0aWMgaW50IG52aWRpYWZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCXN0cnVjdCBudmlkaWFfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwltdXRleF9sb2NrKCZwYXItPm9wZW5fbG9jayk7CisKKwlpZiAoIXBhci0+b3Blbl9jb3VudCkgeworCQlzYXZlX3ZnYV94ODYocGFyKTsKKwkJbnZpZGlhX3NhdmVfdmdhKHBhciwgJnBhci0+aW5pdGlhbF9zdGF0ZSk7CisJfQorCisJcGFyLT5vcGVuX2NvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCZwYXItPm9wZW5fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnZpZGlhZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJc3RydWN0IG52aWRpYV9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwlpbnQgZXJyID0gMDsKKworCW11dGV4X2xvY2soJnBhci0+b3Blbl9sb2NrKTsKKworCWlmICghcGFyLT5vcGVuX2NvdW50KSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAocGFyLT5vcGVuX2NvdW50ID09IDEpIHsKKwkJbnZpZGlhX3dyaXRlX3JlZ3MocGFyLCAmcGFyLT5pbml0aWFsX3N0YXRlKTsKKwkJcmVzdG9yZV92Z2FfeDg2KHBhcik7CisJfQorCisJcGFyLT5vcGVuX2NvdW50LS07Citkb25lOgorCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIG52aWRpYV9mYl9vcHMgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLmZiX29wZW4gICAgICAgID0gbnZpZGlhZmJfb3BlbiwKKwkuZmJfcmVsZWFzZSAgICAgPSBudmlkaWFmYl9yZWxlYXNlLAogCS5mYl9jaGVja192YXIgICA9IG52aWRpYWZiX2NoZWNrX3ZhciwKIAkuZmJfc2V0X3BhciAgICAgPSBudmlkaWFmYl9zZXRfcGFyLAogCS5mYl9zZXRjb2xyZWcgICA9IG52aWRpYWZiX3NldGNvbHJlZywKQEAgLTExNzAsNiArMTI0Miw3IEBACiAJY2FzZSAweDAxNDA6CQkvKiBHZUZvcmNlIDY2MDAgKi8KIAljYXNlIDB4MDE2MDoJCS8qIEdlRm9yY2UgNjIwMCAqLwogCWNhc2UgMHgwMUQwOgkJLyogR2VGb3JjZSA3MjAwLCA3MzAwLCA3NDAwICovCisJY2FzZSAweDAyRTA6CQkvKiBHZUZvcmNlIDczMDAgR1QgKi8KIAljYXNlIDB4MDA5MDoJCS8qIEdlRm9yY2UgNzgwMCAqLwogCWNhc2UgMHgwMjEwOgkJLyogR2VGb3JjZSA2ODAwICovCiAJY2FzZSAweDAyMjA6CQkvKiBHZUZvcmNlIDYyMDAgKi8KQEAgLTEyMDcsNyArMTI4MCw3IEBACiAKIAlwYXIgPSBpbmZvLT5wYXI7CiAJcGFyLT5wY2lfZGV2ID0gcGQ7Ci0KKwltdXRleF9pbml0KCZwYXItPm9wZW5fbG9jayk7CiAJaW5mby0+cGl4bWFwLmFkZHIgPSBremFsbG9jKDggKiAxMDI0LCBHRlBfS0VSTkVMKTsKIAogCWlmIChpbmZvLT5waXhtYXAuYWRkciA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vZmZiLmMgYi9kcml2ZXJzL3ZpZGVvL29mZmIuYwppbmRleCA5NTc2YTU1Li44ODViNDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29mZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL29mZmIuYwpAQCAtMzIyLDggKzMyMiw4IEBACiAJCQkgICAgaW9yZW1hcChiYXNlICsgMHg3ZmYwMDAsIDB4MTAwMCkgKyAweGNjMDsKIAkJCXBhci0+Y21hcF9kYXRhID0gcGFyLT5jbWFwX2FkciArIDE7CiAJCQlwYXItPmNtYXBfdHlwZSA9IGNtYXBfbTY0OwotCQl9IGVsc2UgaWYgKGRwICYmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkcCwgInBjaTEwMTQsYjciKSB8fAotCQkJCSAgZGV2aWNlX2lzX2NvbXBhdGlibGUoZHAsICJwY2kxMDE0LDIxYyIpKSkgeworCQl9IGVsc2UgaWYgKGRwICYmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkcCwgInBjaTEwMTQsYjciKSB8fAorCQkJCSAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZHAsICJwY2kxMDE0LDIxYyIpKSkgewogCQkJcGFyLT5jbWFwX2FkciA9IG9mZmJfbWFwX3JlZyhkcCwgMCwgMHg2MDAwLCAweDEwMDApOwogCQkJaWYgKHBhci0+Y21hcF9hZHIpCiAJCQkJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX2d4dDIwMDA7CkBAIC00MjUsMjcgKzQyNSwyNyBAQAogCWNvbnN0IHUzMiAqcHAsICphZGRycCwgKnVwOwogCXU2NCBhc2l6ZTsKIAotCXBwID0gZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdHgtZGVwdGgiLCAmbGVuKTsKKwlwcCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImxpbnV4LGJvb3R4LWRlcHRoIiwgJmxlbik7CiAJaWYgKHBwID09IE5VTEwpCi0JCXBwID0gZ2V0X3Byb3BlcnR5KGRwLCAiZGVwdGgiLCAmbGVuKTsKKwkJcHAgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJkZXB0aCIsICZsZW4pOwogCWlmIChwcCAmJiBsZW4gPT0gc2l6ZW9mKHUzMikpCiAJCWRlcHRoID0gKnBwOwogCi0JcHAgPSBnZXRfcHJvcGVydHkoZHAsICJsaW51eCxib290eC13aWR0aCIsICZsZW4pOworCXBwID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdHgtd2lkdGgiLCAmbGVuKTsKIAlpZiAocHAgPT0gTlVMTCkKLQkJcHAgPSBnZXRfcHJvcGVydHkoZHAsICJ3aWR0aCIsICZsZW4pOworCQlwcCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgIndpZHRoIiwgJmxlbik7CiAJaWYgKHBwICYmIGxlbiA9PSBzaXplb2YodTMyKSkKIAkJd2lkdGggPSAqcHA7CiAKLQlwcCA9IGdldF9wcm9wZXJ0eShkcCwgImxpbnV4LGJvb3R4LWhlaWdodCIsICZsZW4pOworCXBwID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdHgtaGVpZ2h0IiwgJmxlbik7CiAJaWYgKHBwID09IE5VTEwpCi0JCXBwID0gZ2V0X3Byb3BlcnR5KGRwLCAiaGVpZ2h0IiwgJmxlbik7CisJCXBwID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiaGVpZ2h0IiwgJmxlbik7CiAJaWYgKHBwICYmIGxlbiA9PSBzaXplb2YodTMyKSkKIAkJaGVpZ2h0ID0gKnBwOwogCi0JcHAgPSBnZXRfcHJvcGVydHkoZHAsICJsaW51eCxib290eC1saW5lYnl0ZXMiLCAmbGVuKTsKKwlwcCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImxpbnV4LGJvb3R4LWxpbmVieXRlcyIsICZsZW4pOwogCWlmIChwcCA9PSBOVUxMKQotCQlwcCA9IGdldF9wcm9wZXJ0eShkcCwgImxpbmVieXRlcyIsICZsZW4pOworCQlwcCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImxpbmVieXRlcyIsICZsZW4pOwogCWlmIChwcCAmJiBsZW4gPT0gc2l6ZW9mKHUzMikgJiYgKCpwcCAhPSAweGZmZmZmZmZmdSkpCiAJCXBpdGNoID0gKnBwOwogCWVsc2UKQEAgLTQ2Myw5ICs0NjMsOSBAQAogCSAqIHJhbmdlcyBhbmQgcGljayBvbmUgdGhhdCBpcyBib3RoIGJpZyBlbm91Z2ggYW5kIGlmIHBvc3NpYmxlIGVuY2xvc2VzCiAJICogdGhlICJhZGRyZXNzIiBwcm9wZXJ0eS4gSWYgbm9uZSBtYXRjaCwgd2UgcGljayB0aGUgYmlnZ2VzdAogCSAqLwotCXVwID0gZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdHgtYWRkciIsICZsZW4pOworCXVwID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdHgtYWRkciIsICZsZW4pOwogCWlmICh1cCA9PSBOVUxMKQotCQl1cCA9IGdldF9wcm9wZXJ0eShkcCwgImFkZHJlc3MiLCAmbGVuKTsKKwkJdXAgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJhZGRyZXNzIiwgJmxlbik7CiAJaWYgKHVwICYmIGxlbiA9PSBzaXplb2YodTMyKSkKIAkJYWRkcl9wcm9wID0gKnVwOwogCkBAIC01MjEsNyArNTIxLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBDaGVjayBpZiB3ZSBoYXZlIGEgTWFjT1MgZGlzcGxheSB3aXRob3V0IGEgbm9kZSBzcGVjICovCi0JaWYgKGdldF9wcm9wZXJ0eShvZl9jaG9zZW4sICJsaW51eCxib290eC1ub3NjcmVlbiIsIE5VTEwpICE9IE5VTEwpIHsKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwgImxpbnV4LGJvb3R4LW5vc2NyZWVuIiwgTlVMTCkgIT0gTlVMTCkgewogCQkvKiBUaGUgb2xkIGNvZGUgdHJpZWQgdG8gd29yayBvdXQgd2hpY2ggbm9kZSB3YXMgdGhlIE1hY09TCiAJCSAqIGRpc3BsYXkgYmFzZWQgb24gdGhlIGFkZHJlc3MuIEknbSBkcm9wcGluZyB0aGF0IHNpbmNlIHRoZQogCQkgKiBsYWNrIG9mIGEgbm9kZSBzcGVjIG9ubHkgaGFwcGVucyB3aXRoIG9sZCBCb290WCB2ZXJzaW9ucwpAQCAtNTMyLDE0ICs1MzIsMTQgQEAKIAl9CiAKIAlmb3IgKGRwID0gTlVMTDsgKGRwID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoZHAsICJkaXNwbGF5IikpOykgewotCQlpZiAoZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsb3BlbmVkIiwgTlVMTCkgJiYKLQkJICAgIGdldF9wcm9wZXJ0eShkcCwgImxpbnV4LGJvb3QtZGlzcGxheSIsIE5VTEwpKSB7CisJCWlmIChvZl9nZXRfcHJvcGVydHkoZHAsICJsaW51eCxvcGVuZWQiLCBOVUxMKSAmJgorCQkgICAgb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdC1kaXNwbGF5IiwgTlVMTCkpIHsKIAkJCWJvb3RfZGlzcCA9IGRwOwogCQkJb2ZmYl9pbml0X25vZHJpdmVyKGRwLCAwKTsKIAkJfQogCX0KIAlmb3IgKGRwID0gTlVMTDsgKGRwID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoZHAsICJkaXNwbGF5IikpOykgewotCQlpZiAoZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsb3BlbmVkIiwgTlVMTCkgJiYKKwkJaWYgKG9mX2dldF9wcm9wZXJ0eShkcCwgImxpbnV4LG9wZW5lZCIsIE5VTEwpICYmCiAJCSAgICBkcCAhPSBib290X2Rpc3ApCiAJCQlvZmZiX2luaXRfbm9kcml2ZXIoZHAsIDApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG0yZmIuYyBiL2RyaXZlcnMvdmlkZW8vcG0yZmIuYwppbmRleCBhNTYwYTIyLi4wYTA0NDgzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbTJmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcG0yZmIuYwpAQCAtODEsOCArODEsNiBAQAogc3RydWN0IHBtMmZiX3BhcgogewogCXBtMnR5cGVfdAl0eXBlOwkJLyogQm9hcmQgdHlwZSAqLwotCXUzMgkJZmJfc2l6ZTsJLyogZnJhbWVidWZmZXIgbWVtb3J5IHNpemUgKi8KLQl1bnNpZ25lZCBjaGFyCV9faW9tZW0gKnZfZmI7ICAvKiB2aXJ0dWFsIGFkZHJlc3Mgb2YgZnJhbWUgYnVmZmVyICovCiAJdW5zaWduZWQgY2hhcglfX2lvbWVtICp2X3JlZ3M7LyogdmlydHVhbCBhZGRyZXNzIG9mIHBfcmVncyAqLwogCXUzMiAJICAgCW1lbWNsb2NrOwkvKiBtZW1jbG9jayAqLwogCXUzMgkJdmlkZW87CQkvKiB2aWRlbyBmbGFncyBiZWZvcmUgYmxhbmtpbmcgKi8KQEAgLTEwMyw3ICsxMDEsNyBAQAogCS54cGFuc3RlcCA9CTEsCiAJLnlwYW5zdGVwID0JMSwKIAkueXdyYXBzdGVwID0JMCwgCi0JLmFjY2VsID0JRkJfQUNDRUxfTk9ORSwKKwkuYWNjZWwgPQlGQl9BQ0NFTF8zRExBQlNfUEVSTUVESUEyLAogfTsKIAogLyoKQEAgLTE4NSwxNSArMTgzLDE3IEBACiAJCWluZGV4ID0gUE0yVlJfUkRfSU5ERVhFRF9EQVRBOwogCQlicmVhazsKIAl9CQotCW1iKCk7CisJd21iKCk7CiAJcG0yX1dSKHAsIGluZGV4LCB2KTsKKwl3bWIoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBtMnZfUkRBQ19XUihzdHJ1Y3QgcG0yZmJfcGFyKiBwLCBzMzIgaWR4LCB1MzIgdikKIHsKIAlwbTJfV1IocCwgUE0yVlJfUkRfSU5ERVhfTE9XLCBpZHggJiAweGZmKTsKLQltYigpOworCXdtYigpOwogCXBtMl9XUihwLCBQTTJWUl9SRF9JTkRFWEVEX0RBVEEsIHYpOworCXdtYigpOwogfQogCiAjaWZkZWYgQ09ORklHX0ZCX1BNMl9GSUZPX0RJU0NPTk5FQ1QKQEAgLTMwMiwxMCArMzAyLDEwIEBACiAJczMyIGRlbHRhID0gMTAwMDsKIAogCSptbSA9ICpubiA9ICpwcCA9IDA7Ci0JZm9yIChuID0gMTsgbjsgbisrKSB7Ci0JCWZvciAoIG0gPSAxOyBtOyBtKyspIHsKKwlmb3IgKCBtID0gMTsgbSA8IDEyODsgbSsrKSB7CisJCWZvciAobiA9IDIgKiBtICsgMTsgbjsgbisrKSB7CiAJCQlmb3IgKCBwID0gMDsgcCA8IDI7IHArKykgewotCQkJCWYgPSBQTTJfUkVGRVJFTkNFX0NMT0NLICogbiAvIChtICogKDEgPDwgKHAgKyAxKSkpOworCQkJCWYgPSAoIFBNMl9SRUZFUkVOQ0VfQ0xPQ0sgPj4gKCBwICsgMSApKSAqIG4gLyBtOwogCQkJCWlmICggY2xrID4gZiAtIGRlbHRhICYmIGNsayA8IGYgKyBkZWx0YSApIHsKIAkJCQkJZGVsdGEgPSAoIGNsayA+IGYgKSA/IGNsayAtIGYgOiBmIC0gY2xrOwogCQkJCQkqbW09bTsKQEAgLTQ2MiwyMSArNDYyLDM4IEBACiAJaW50IGk7CiAJdW5zaWduZWQgY2hhciBtLCBuLCBwOwogCi0JcG0yX21ucChjbGssICZtLCAmbiwgJnApOwotCVdBSVRfRklGTyhwYXIsIDEwKTsKLQlwbTJfUkRBQ19XUihwYXIsIFBNMklfUkRfTUVNT1JZX0NMT0NLXzMsIDYpOwotCXdtYigpOwotCXBtMl9SREFDX1dSKHBhciwgUE0ySV9SRF9NRU1PUllfQ0xPQ0tfMSwgbSk7Ci0JcG0yX1JEQUNfV1IocGFyLCBQTTJJX1JEX01FTU9SWV9DTE9DS18yLCBuKTsKLQl3bWIoKTsKLQlwbTJfUkRBQ19XUihwYXIsIFBNMklfUkRfTUVNT1JZX0NMT0NLXzMsIDh8cCk7Ci0Jd21iKCk7Ci0JcG0yX1JEQUNfUkQocGFyLCBQTTJJX1JEX01FTU9SWV9DTE9DS19TVEFUVVMpOwotCXJtYigpOwotCWZvciAoaSA9IDI1NjsKLQkgICAgIGkgJiYgIShwbTJfUkQocGFyLCBQTTJSX1JEX0lOREVYRURfREFUQSkgJiBQTTJGX1BMTF9MT0NLRUQpOwotCSAgICAgaS0tKQotCQk7CisJc3dpdGNoIChwYXItPnR5cGUpIHsKKwljYXNlIFBNMl9UWVBFX1BFUk1FRElBMlY6CisJCXBtMnZfbW5wKGNsay8yLCAmbSwgJm4sICZwKTsKKwkJV0FJVF9GSUZPKHBhciwgOCk7CisJCXBtMl9XUihwYXIsIFBNMlZSX1JEX0lOREVYX0hJR0gsIFBNMlZJX1JEX01DTEtfQ09OVFJPTCA+PiA4KTsKKwkJcG0ydl9SREFDX1dSKHBhciwgUE0yVklfUkRfTUNMS19DT05UUk9MLCAwKTsKKwkJcG0ydl9SREFDX1dSKHBhciwgUE0yVklfUkRfTUNMS19QUkVTQ0FMRSwgbSk7CisJCXBtMnZfUkRBQ19XUihwYXIsIFBNMlZJX1JEX01DTEtfRkVFREJBQ0ssIG4pOworCQlwbTJ2X1JEQUNfV1IocGFyLCBQTTJWSV9SRF9NQ0xLX1BPU1RTQ0FMRSwgcCk7CisJCXBtMnZfUkRBQ19XUihwYXIsIFBNMlZJX1JEX01DTEtfQ09OVFJPTCwgMSk7CisJCXJtYigpOworCQlmb3IgKGkgPSAyNTY7CisJCSAgICAgaSAmJiAhKHBtMl9SREFDX1JEKHBhciwgUE0yVklfUkRfTUNMS19DT05UUk9MKSAmIDIpOworCQkgICAgIGktLSkKKwkJCTsKKwkJcG0yX1dSKHBhciwgUE0yVlJfUkRfSU5ERVhfSElHSCwgMCk7CisJCWJyZWFrOworCWNhc2UgUE0yX1RZUEVfUEVSTUVESUEyOgorCQlwbTJfbW5wKGNsaywgJm0sICZuLCAmcCk7CisJCVdBSVRfRklGTyhwYXIsIDEwKTsKKwkJcG0yX1JEQUNfV1IocGFyLCBQTTJJX1JEX01FTU9SWV9DTE9DS18zLCA2KTsKKwkJcG0yX1JEQUNfV1IocGFyLCBQTTJJX1JEX01FTU9SWV9DTE9DS18xLCBtKTsKKwkJcG0yX1JEQUNfV1IocGFyLCBQTTJJX1JEX01FTU9SWV9DTE9DS18yLCBuKTsKKwkJcG0yX1JEQUNfV1IocGFyLCBQTTJJX1JEX01FTU9SWV9DTE9DS18zLCA4fHApOworCQlwbTJfUkRBQ19SRChwYXIsIFBNMklfUkRfTUVNT1JZX0NMT0NLX1NUQVRVUyk7CisJCXJtYigpOworCQlmb3IgKGkgPSAyNTY7CisJCSAgICAgaSAmJiAhKHBtMl9SRChwYXIsIFBNMlJfUkRfSU5ERVhFRF9EQVRBKSAmIFBNMkZfUExMX0xPQ0tFRCk7CisJCSAgICAgaS0tKQorCQkJOworCQlicmVhazsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9waXhjbG9jayhzdHJ1Y3QgcG0yZmJfcGFyKiBwYXIsIHUzMiBjbGspCkBAIC00ODksMTIgKzUwNiw5IEBACiAJCXBtMl9tbnAoY2xrLCAmbSwgJm4sICZwKTsKIAkJV0FJVF9GSUZPKHBhciwgOCk7CiAJCXBtMl9SREFDX1dSKHBhciwgUE0ySV9SRF9QSVhFTF9DTE9DS19BMywgMCk7Ci0JCXdtYigpOwogCQlwbTJfUkRBQ19XUihwYXIsIFBNMklfUkRfUElYRUxfQ0xPQ0tfQTEsIG0pOwogCQlwbTJfUkRBQ19XUihwYXIsIFBNMklfUkRfUElYRUxfQ0xPQ0tfQTIsIG4pOwotCQl3bWIoKTsKIAkJcG0yX1JEQUNfV1IocGFyLCBQTTJJX1JEX1BJWEVMX0NMT0NLX0EzLCA4fHApOwotCQl3bWIoKTsKIAkJcG0yX1JEQUNfUkQocGFyLCBQTTJJX1JEX1BJWEVMX0NMT0NLX1NUQVRVUyk7CiAJCXJtYigpOwogCQlmb3IgKGkgPSAyNTY7CkBAIC02MjMsNiArNjM3LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCXN3aXRjaCh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CiAJY2FzZSA4OgogCQl2YXItPnJlZC5sZW5ndGggPSB2YXItPmdyZWVuLmxlbmd0aCA9IHZhci0+Ymx1ZS5sZW5ndGggPSA4OwpAQCAtMTAxNyw2ICsxMDMzLDEzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBtMmZiX3N5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHBtMmZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJV0FJVF9GSUZPKHBhciwgMSk7CisJcG0yX1dSKHBhciwgUE0yUl9TWU5DLCAwKTsKKwltYigpOworCWRvIHsKKwkJd2hpbGUgKHBtMl9SRChwYXIsIFBNMlJfT1VUX0ZJRk9fV09SRFMpID09IDApCisJCQl1ZGVsYXkoMTApOworCQlybWIoKTsKKwl9IHdoaWxlIChwbTJfUkQocGFyLCBQTTJSX09VVF9GSUZPKSAhPSBQTTJUQUcoUE0yUl9TWU5DKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGJsb2NrIG9wZXJhdGlvbi4gY29weT0wOiByZWN0YW5nbGUgZmlsbCwgY29weT0xOiByZWN0YW5nbGUgY29weS4KKyAqLworc3RhdGljIHZvaWQgcG0yZmJfYmxvY2tfb3Aoc3RydWN0IGZiX2luZm8qIGluZm8sIGludCBjb3B5LAorCQkJCXMzMiB4c3JjLCBzMzIgeXNyYywKKwkJCQlzMzIgeCwgczMyIHksIHMzMiB3LCBzMzIgaCwKKwkJCQl1MzIgY29sb3IpIHsKKwlzdHJ1Y3QgcG0yZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwlpZiAoIXcgfHwgIWgpCisJCXJldHVybjsKKwlXQUlUX0ZJRk8ocGFyLCA1KTsKKwlwbTJfV1IocGFyLCBQTTJSX0NPTkZJRywgUE0yRl9DT05GSUdfRkJfV1JJVEVfRU5BQkxFIHwKKwkJUE0yRl9DT05GSUdfRkJfUkVBRF9TT1VSQ0VfRU5BQkxFKTsKKwlpZiAoY29weSkKKwkJcG0yX1dSKHBhciwgUE0yUl9GQl9TT1VSQ0VfREVMVEEsCisJCQkoKHlzcmMteSkgJiAweGZmZikgPDwgMTYgfCAoKHhzcmMteCkgJiAweGZmZikpOworCWVsc2UKKwkJcG0yX1dSKHBhciwgUE0yUl9GQl9CTE9DS19DT0xPUiwgY29sb3IpOworCXBtMl9XUihwYXIsIFBNMlJfUkVDVEFOR0xFX09SSUdJTiwgKHkgPDwgMTYpIHwgeCk7CisJcG0yX1dSKHBhciwgUE0yUl9SRUNUQU5HTEVfU0laRSwgKGggPDwgMTYpIHwgdyk7CisJd21iKCk7CisJcG0yX1dSKHBhciwgUE0yUl9SRU5ERVIsUE0yRl9SRU5ERVJfUkVDVEFOR0xFIHwKKwkJCQkoeDx4c3JjID8gUE0yRl9JTkNSRUFTRV9YIDogMCkgfAorCQkJCSh5PHlzcmMgPyBQTTJGX0lOQ1JFQVNFX1kgOiAwKSB8CisJCQkJKGNvcHkgPyAwIDogUE0yRl9SRU5ERVJfRkFTVEZJTEwpKTsKK30KKworc3RhdGljIHZvaWQgcG0yZmJfZmlsbHJlY3QgKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCWNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVnaW9uKQoreworCXN0cnVjdCBmYl9maWxscmVjdCBtb2RkZWQ7CisJaW50IHZ4cmVzLCB2eXJlczsKKwl1MzIgY29sb3IgPSAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SKSA/CisJCSgodTMyKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnaW9uLT5jb2xvcl0gOiByZWdpb24tPmNvbG9yOworCisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm47CisJaWYgKChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSB8fAorCQlyZWdpb24tPnJvcCAhPSBST1BfQ09QWSApIHsKKwkJY2ZiX2ZpbGxyZWN0KGluZm8sIHJlZ2lvbik7CisJCXJldHVybjsKKwl9CisKKwl2eHJlcyA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWw7CisJdnlyZXMgPSBpbmZvLT52YXIueXJlc192aXJ0dWFsOworCisJbWVtY3B5KCZtb2RkZWQsIHJlZ2lvbiwgc2l6ZW9mKHN0cnVjdCBmYl9maWxscmVjdCkpOworCisJaWYoIW1vZGRlZC53aWR0aCB8fCAhbW9kZGVkLmhlaWdodCB8fAorCSAgIG1vZGRlZC5keCA+PSB2eHJlcyB8fCBtb2RkZWQuZHkgPj0gdnlyZXMpCisJCXJldHVybjsKKworCWlmKG1vZGRlZC5keCArIG1vZGRlZC53aWR0aCAgPiB2eHJlcykKKwkJbW9kZGVkLndpZHRoICA9IHZ4cmVzIC0gbW9kZGVkLmR4OworCWlmKG1vZGRlZC5keSArIG1vZGRlZC5oZWlnaHQgPiB2eXJlcykKKwkJbW9kZGVkLmhlaWdodCA9IHZ5cmVzIC0gbW9kZGVkLmR5OworCisJaWYoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDgpCisJCWNvbG9yIHw9IGNvbG9yIDw8IDg7CisJaWYoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIDw9IDE2KQorCQljb2xvciB8PSBjb2xvciA8PCAxNjsKKworCWlmKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCAhPSAyNCkKKwkJcG0yZmJfYmxvY2tfb3AoaW5mbywgMCwgMCwgMCwKKwkJCQltb2RkZWQuZHgsIG1vZGRlZC5keSwKKwkJCQltb2RkZWQud2lkdGgsIG1vZGRlZC5oZWlnaHQsIGNvbG9yKTsKKwllbHNlCisJCWNmYl9maWxscmVjdChpbmZvLCByZWdpb24pOworfQorCitzdGF0aWMgdm9pZCBwbTJmYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQljb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCit7CisJc3RydWN0IGZiX2NvcHlhcmVhIG1vZGRlZDsKKwl1MzIgdnhyZXMsIHZ5cmVzOworCisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm47CisJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpIHsKKwkJY2ZiX2NvcHlhcmVhKGluZm8sIGFyZWEpOworCQlyZXR1cm47CisJfQorCisJbWVtY3B5KCZtb2RkZWQsIGFyZWEsIHNpemVvZihzdHJ1Y3QgZmJfY29weWFyZWEpKTsKKworCXZ4cmVzID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbDsKKwl2eXJlcyA9IGluZm8tPnZhci55cmVzX3ZpcnR1YWw7CisKKwlpZighbW9kZGVkLndpZHRoIHx8ICFtb2RkZWQuaGVpZ2h0IHx8CisJICAgbW9kZGVkLnN4ID49IHZ4cmVzIHx8IG1vZGRlZC5zeSA+PSB2eXJlcyB8fAorCSAgIG1vZGRlZC5keCA+PSB2eHJlcyB8fCBtb2RkZWQuZHkgPj0gdnlyZXMpCisJCXJldHVybjsKKworCWlmKG1vZGRlZC5zeCArIG1vZGRlZC53aWR0aCA+IHZ4cmVzKQorCQltb2RkZWQud2lkdGggPSB2eHJlcyAtIG1vZGRlZC5zeDsKKwlpZihtb2RkZWQuZHggKyBtb2RkZWQud2lkdGggPiB2eHJlcykKKwkJbW9kZGVkLndpZHRoID0gdnhyZXMgLSBtb2RkZWQuZHg7CisJaWYobW9kZGVkLnN5ICsgbW9kZGVkLmhlaWdodCA+IHZ5cmVzKQorCQltb2RkZWQuaGVpZ2h0ID0gdnlyZXMgLSBtb2RkZWQuc3k7CisJaWYobW9kZGVkLmR5ICsgbW9kZGVkLmhlaWdodCA+IHZ5cmVzKQorCQltb2RkZWQuaGVpZ2h0ID0gdnlyZXMgLSBtb2RkZWQuZHk7CisKKwlwbTJmYl9ibG9ja19vcChpbmZvLCAxLCBtb2RkZWQuc3gsIG1vZGRlZC5zeSwKKwkJCW1vZGRlZC5keCwgbW9kZGVkLmR5LAorCQkJbW9kZGVkLndpZHRoLCBtb2RkZWQuaGVpZ2h0LCAwKTsKK30KKwogLyogLS0tLS0tLS0tLS0tIEhhcmR3YXJlIEluZGVwZW5kZW50IEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0gKi8KIAogLyoKQEAgLTEwMzAsOSArMTE3MCwxMCBAQAogCS5mYl9zZXRjb2xyZWcJPSBwbTJmYl9zZXRjb2xyZWcsCiAJLmZiX2JsYW5rCT0gcG0yZmJfYmxhbmssCiAJLmZiX3Bhbl9kaXNwbGF5CT0gcG0yZmJfcGFuX2Rpc3BsYXksCi0JLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKKwkuZmJfZmlsbHJlY3QJPSBwbTJmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBwbTJmYl9jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKKwkuZmJfc3luYwk9IHBtMmZiX3N5bmMsCiB9OwogCiAvKgpAQCAtMTExOSwzOCArMTI2MCw0NyBAQAogCiAJaWYoZGVmYXVsdF9wYXItPm1lbV9jb250cm9sID09IDAgJiYKIAkJZGVmYXVsdF9wYXItPmJvb3RfYWRkcmVzcyA9PSAweDMxICYmCi0JCWRlZmF1bHRfcGFyLT5tZW1fY29uZmlnID09IDB4MjU5ZmZmZmYgJiYKLQkJcGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwNDggJiYKLQkJcGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDBhMzEpIHsKLQkJRFBSSU5USygic3Vic3lzdGVtX3ZlbmRvcjogJTA0eCwgc3Vic3lzdGVtX2RldmljZTogJTA0eFxuIiwKLQkJCXBkZXYtPnN1YnN5c3RlbV92ZW5kb3IsIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwotCQlEUFJJTlRLKCJXZSBoYXZlIG5vdCBiZWVuIGluaXRpYWxpemVkIGJ5IFZHQSBCSU9TICIKLQkJCSJhbmQgYXJlIHJ1bm5pbmcgb24gYW4gRWxzYSBXaW5uZXIgMjAwMCBPZmZpY2VcbiIpOwotCQlEUFJJTlRLKCJJbml0aWFsaXppbmcgY2FyZCB0aW1pbmdzIG1hbnVhbGx5Li4uXG4iKTsKKwkJZGVmYXVsdF9wYXItPm1lbV9jb25maWcgPT0gMHgyNTlmZmZmZikgeworCQlkZWZhdWx0X3Bhci0+bWVtY2xvY2sgPSBDVlBQQ19NRU1DTE9DSzsKIAkJZGVmYXVsdF9wYXItPm1lbV9jb250cm9sPTA7CiAJCWRlZmF1bHRfcGFyLT5ib290X2FkZHJlc3M9MHgyMDsKIAkJZGVmYXVsdF9wYXItPm1lbV9jb25maWc9MHhlNjAwMjAyMTsKLQkJZGVmYXVsdF9wYXItPm1lbWNsb2NrPTEwMDAwMDsKKwkJaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDQ4ICYmCisJCQlwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MGEzMSkgeworCQkJRFBSSU5USygic3Vic3lzdGVtX3ZlbmRvcjogJTA0eCwgc3Vic3lzdGVtX2RldmljZTogJTA0eFxuIiwKKwkJCQlwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJCURQUklOVEsoIldlIGhhdmUgbm90IGJlZW4gaW5pdGlhbGl6ZWQgYnkgVkdBIEJJT1MgIgorCQkJCSJhbmQgYXJlIHJ1bm5pbmcgb24gYW4gRWxzYSBXaW5uZXIgMjAwMCBPZmZpY2VcbiIpOworCQkJRFBSSU5USygiSW5pdGlhbGl6aW5nIGNhcmQgdGltaW5ncyBtYW51YWxseS4uLlxuIik7CisJCQlkZWZhdWx0X3Bhci0+bWVtY2xvY2s9NzAwMDA7CisJCX0KKwkJaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgzZDNkICYmCisJCQlwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDEwMCkgeworCQkJRFBSSU5USygic3Vic3lzdGVtX3ZlbmRvcjogJTA0eCwgc3Vic3lzdGVtX2RldmljZTogJTA0eFxuIiwKKwkJCQlwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJCURQUklOVEsoIldlIGhhdmUgbm90IGJlZW4gaW5pdGlhbGl6ZWQgYnkgVkdBIEJJT1MgIgorCQkJCSJhbmQgYXJlIHJ1bm5pbmcgb24gYW4gM2RsYWJzIHJlZmVyZW5jZSBib2FyZFxuIik7CisJCQlEUFJJTlRLKCJJbml0aWFsaXppbmcgY2FyZCB0aW1pbmdzIG1hbnVhbGx5Li4uXG4iKTsKKwkJCWRlZmF1bHRfcGFyLT5tZW1jbG9jaz03NDg5NDsKKwkJfQogCX0KIAogCS8qIE5vdyB3b3JrIG91dCBob3cgYmlnIGxmYiBpcyBnb2luZyB0byBiZS4gKi8KIAlzd2l0Y2goZGVmYXVsdF9wYXItPm1lbV9jb25maWcgJiBQTTJGX01FTV9DT05GSUdfUkFNX01BU0spIHsKIAljYXNlIFBNMkZfTUVNX0JBTktTXzE6Ci0JCWRlZmF1bHRfcGFyLT5mYl9zaXplPTB4MjAwMDAwOworCQlwbTJmYl9maXguc21lbV9sZW49MHgyMDAwMDA7CiAJCWJyZWFrOwogCWNhc2UgUE0yRl9NRU1fQkFOS1NfMjoKLQkJZGVmYXVsdF9wYXItPmZiX3NpemU9MHg0MDAwMDA7CisJCXBtMmZiX2ZpeC5zbWVtX2xlbj0weDQwMDAwMDsKIAkJYnJlYWs7CiAJY2FzZSBQTTJGX01FTV9CQU5LU18zOgotCQlkZWZhdWx0X3Bhci0+ZmJfc2l6ZT0weDYwMDAwMDsKKwkJcG0yZmJfZml4LnNtZW1fbGVuPTB4NjAwMDAwOwogCQlicmVhazsKIAljYXNlIFBNMkZfTUVNX0JBTktTXzQ6Ci0JCWRlZmF1bHRfcGFyLT5mYl9zaXplPTB4ODAwMDAwOworCQlwbTJmYl9maXguc21lbV9sZW49MHg4MDAwMDA7CiAJCWJyZWFrOwogCX0KLQlkZWZhdWx0X3Bhci0+bWVtY2xvY2sgPSBDVlBQQ19NRU1DTE9DSzsKIAlwbTJmYl9maXguc21lbV9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKLQlwbTJmYl9maXguc21lbV9sZW4gPSBkZWZhdWx0X3Bhci0+ZmJfc2l6ZTsKIAogCS8qIExpbmVhciBmcmFtZSBidWZmZXIgLSByZXF1ZXN0IHJlZ2lvbiBhbmQgbWFwIGl0LiAqLwogCWlmICggIXJlcXVlc3RfbWVtX3JlZ2lvbihwbTJmYl9maXguc21lbV9zdGFydCwgcG0yZmJfZml4LnNtZW1fbGVuLApAQCAtMTE1OCw5ICsxMzA4LDkgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicG0yZmI6IENhbid0IHJlc2VydmUgc21lbS5cbiIpOwogCQlnb3RvIGVycl9leGl0X21taW87CiAJfQotCWluZm8tPnNjcmVlbl9iYXNlID0gZGVmYXVsdF9wYXItPnZfZmIgPQorCWluZm8tPnNjcmVlbl9iYXNlID0KIAkJaW9yZW1hcF9ub2NhY2hlKHBtMmZiX2ZpeC5zbWVtX3N0YXJ0LCBwbTJmYl9maXguc21lbV9sZW4pOwotCWlmICggIWRlZmF1bHRfcGFyLT52X2ZiICkgeworCWlmICggIWluZm8tPnNjcmVlbl9iYXNlICkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbTJmYjogQ2FuJ3QgaW9yZW1hcCBzbWVtIGFyZWEuXG4iKTsKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKHBtMmZiX2ZpeC5zbWVtX3N0YXJ0LCBwbTJmYl9maXguc21lbV9sZW4pOwogCQlnb3RvIGVycl9leGl0X21taW87CkBAIC0xMTcwLDcgKzEzMjAsOSBAQAogCWluZm8tPmZpeAkJPSBwbTJmYl9maXg7IAkKIAlpbmZvLT5wc2V1ZG9fcGFsZXR0ZQk9IGRlZmF1bHRfcGFyLT5wYWxldHRlOwogCWluZm8tPmZsYWdzCQk9IEZCSU5GT19ERUZBVUxUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQklORk9fSFdBQ0NFTF9ZUEFOOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZCSU5GT19IV0FDQ0VMX1lQQU4gfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1Q7CiAKIAlpZiAoIW1vZGUpCiAJCW1vZGUgPSAiNjQweDQ4MEA2MCI7CkBAIC0xMTgwLDEzICsxMzMyLDEzIEBACiAJCWluZm8tPnZhciA9IHBtMmZiX3ZhcjsKIAogCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApIDwgMCkKLQkJZ290byBlcnJfZXhpdF9hbGw7Ci0KLQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKQogCQlnb3RvIGVycl9leGl0X2JvdGg7CiAKKwlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKQorCQlnb3RvIGVycl9leGl0X2FsbDsKKwogCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2UsIG1lbW9yeSA9ICVkSy5cbiIsCi0JICAgICAgIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZGVmYXVsdF9wYXItPmZiX3NpemUgLyAxMDI0KTsKKwkgICAgICAgaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCBwbTJmYl9maXguc21lbV9sZW4gLyAxMDI0KTsKIAogCS8qCiAJICogT3VyIGRyaXZlciBkYXRhCkBAIC0xMjQyLDYgKzEzOTQsOSBAQAogCXsgUENJX1ZFTkRPUl9JRF8zRExBQlMsIFBDSV9ERVZJQ0VfSURfM0RMQUJTX1BFUk1FRElBMlYsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZIDw8IDE2LAogCSAgMHhmZjAwMDAsIDAgfSwKKwl7IFBDSV9WRU5ET1JfSURfM0RMQUJTLCBQQ0lfREVWSUNFX0lEXzNETEFCU19QRVJNRURJQTJWLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX05PVF9ERUZJTkVEX1ZHQSA8PCA4LAorCSAgMHhmZjAwLCAwIH0sCiAJeyAwLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BtM2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BtM2ZiLmMKaW5kZXggYmQ3ODdlOC4uYjUyZTg4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbTNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcG0zZmIuYwpAQCAtMSw1NSArMSwyNSBAQAogLyoKICAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL3BtM2ZiLmMgLS0gM0RMYWJzIFBlcm1lZGlhMyBmcmFtZSBidWZmZXIgZGV2aWNlCi0gKiAgCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIFJvbWFpbiBEb2xiZWF1IDxkb2xiZWF1QGlyaXNhLmZyPgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUm9tYWluIERvbGJlYXUgPHJvbWFpbkBkb2xiZWF1Lm9yZz4uCisgKgorICogIFBvcnRlZCB0byAyLjYga2VybmVsIG9uIDEgTWF5IDIwMDcgYnkgS3J6eXN6dG9mIEhlbHQgPGtyenlzenRvZi5oMUB3cC5wbD4KKyAqCWJhc2VkIG9uIHBtMmZiLmMKKyAqCiAgKiAgQmFzZWQgb24gY29kZSB3cml0dGVuIGJ5OgotICogICAgICAgICAgIFN2ZW4gTHV0aGVyLCA8bHV0aGVyQGRwdC1pbmZvLnUtc3RyYXNiZy5mcj4KLSAqICAgICAgICAgICBBbGFuIEhvdXJpaGFuZSwgPGFsYW5oQGZhaXJsaXRlLmRlbW9uLmNvLnVrPgotICogICAgICAgICAgIFJ1c3NlbGwgS2luZywgPHJta0Bhcm0ubGludXgub3JnLnVrPgorICoJICAgU3ZlbiBMdXRoZXIsIDxsdXRoZXJAZHB0LWluZm8udS1zdHJhc2JnLmZyPgorICoJICAgQWxhbiBIb3VyaWhhbmUsIDxhbGFuaEBmYWlybGl0ZS5kZW1vbi5jby51az4KKyAqCSAgIFJ1c3NlbGwgS2luZywgPHJta0Bhcm0ubGludXgub3JnLnVrPgogICogIEJhc2VkIG9uIGxpbnV4L2RyaXZlcnMvdmlkZW8vc2tlbGV0b25mYi5jOgogICoJQ29weXJpZ2h0IChDKSAxOTk3IEdlZXJ0IFV5dHRlcmhvZXZlbgogICogIEJhc2VkIG9uIGxpbnV4L2RyaXZlci92aWRlby9wbTJmYi5jOgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMTk5OSBJbGFyaW8gTmFyZGlub2NjaGkgKG5hcmRpbm9jQENTLlVuaUJPLklUKQotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTkgSmFrdWIgSmVsaW5layAoamFrdWJAcmVkaGF0LmNvbSkKKyAqCUNvcHlyaWdodCAoQykgMTk5OC0xOTk5IElsYXJpbyBOYXJkaW5vY2NoaSAobmFyZGlub2NAQ1MuVW5pQk8uSVQpCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgSmFrdWIgSmVsaW5layAoamFrdWJAcmVkaGF0LmNvbSkKICAqCiAgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgogICogIG1vcmUgZGV0YWlscy4KICAqCi0gKiAgJEhlYWRlcjogL2N2c3Jvb3QvbGludXgvZHJpdmVycy92aWRlby9wbTNmYi5jLHYgMS4xIDIwMDIvMDIvMjUgMTk6MTE6MDYgbWFyY2VsbyBFeHAgJAotICoKLSAqICBDSEFOR0VMT0c6Ci0gKiAgTW9uIEZlYiAxMSAxMDozNTo0OCBNRVQgMjAwMiwgdiAxLjQuMTFCOiBDb3NtZXRpYyB1cGRhdGUuCi0gKiAgV2VkIEphbiAyMyAxNDoxNjo1OSBNRVQgMjAwMiwgdiAxLjQuMTE6IFByZWxpbWluYXJ5IDIuNS54IHN1cHBvcnQsIHBhdGNoIGZvciAyLjUuMi4KLSAqICBXZWQgTm92IDI4IDExOjA4OjI5IE1FVCAyMDAxLCB2IDEuNC4xMDogcG90ZW50aWFsIGJ1ZyBmaXggZm9yIFNEUkFNLWJhc2VkIGJvYXJkLCBwYXRjaCBmb3IgMi40LjE2LgotICogIFRodSBTZXAgMjAgMTA6MjQ6NDIgTUVUIERTVCAyMDAxLCB2IDEuNC45OiBzeW5jIGJ1ZyBmaXgsIHByZWxpbWluYXJ5IGZsYXRwYW5lbCBzdXBwb3J0LCBiZXR0ZXIgdGltaW5ncy4KLSAqICBUdWUgQXVnIDI4IDEwOjEzOjAxIE1FVCBEU1QgMjAwMSwgdiAxLjQuODogbWVtb3J5IHRpbWluZ3MgY2hlY2ssIG1pbm9yIGJ1ZyBmaXhlcy4KLSAqICBXZWQgSnVsIDE4IDE5OjA2OjE0IENFU1QgMjAwMSwgdiAxLjQuNzogTW9kZSBmaXggKDgwMHg2MDAtMTAwLCAxMDI0eDc2OC0xMDAgY2hhbmdlZCksIHVzaW5nIEhXIHBhbm5pbmcgKyBhY2NlbCBidWcgZml4LgotICogIE1vbiBKdW4gMjUgMTA6MzM6NTYgTUVUIERTVCAyMDAxLCB2IDEuNC42OiBEZXB0aCAxMiBmaXgsIGNoaXAgcmVzZXQgaW9jdGwsIG1vdmVkIG1lbW9yeSBlcmFzZSBpb2N0bCB0byBERUJVRy4KLSAqICBXZWQgSnVuIDIwIDExOjEzOjA4IE1FVCBEU1QgMjAwMSwgdiAxLjQuNTogRml4ZWQgbWlzc2luZyBibGlua2luZyBjdXJzb3IgaW4gOGJwcCwgY29kZSBjbGVhbmluZywgbWVtb3J5IGVyYXNlIElPQ1RMLgotICogIE1vbiBKdW4gMTggMTY6MDA6MjcgQ0VTVCAyMDAxLCB2IDEuNC40OiBEZXB0aCAxMiAoUkdCQSA0NDQ0KSBzdXBwb3J0LCBjb2RlIGNsZWFuaW5nLgotICogIEZyaSBKdW4gMTUgMTM6NTM6MDEgQ0VTVCAyMDAxLCB2IDEuNC4zOiBSZW1vdmVkIHdhcm5pbmdzLCBkZXB0aCAxNSBzdXBwb3J0LCBhZGQgJ2RlcHRoJyBvcHRpb24uCi0gKiAgVGh1IEp1biAxNCAxMDoxMzo1MiBNRVQgRFNUIDIwMDEsIHYgMS40LjI6IEZpeGVkIGRlcHRoIHN3aXRjaGluZyBidWcsIHByZWxpbWluYXJ5IDE1YnBwIChSR0I1NTUxKSBzdXBwb3J0LgotICogIFRodSBBcHIgMTIgMTE6MTY6NDUgTUVUIERTVCAyMDAxLCB2IDEuNC4xQjogRG9jIHVwZGF0ZXMuCi0gKiAgRnJpIEFwciAgNiAxMToxMjo1MyBNRVQgRFNUIDIwMDEsIHYgMS40LjE6IENvbmZpZ3VyZS5oZWxwLCBtaW5vciBjbGVhbnVwCi0gKiAgVGh1IE1hciAyOSAxMDo1Njo1MCBNRVQgRFNUIDIwMDEsIHYgMS40LjA6IE1vZHVsZSAmIG1vZHVsZSBvcHRpb25zIHN1cHBvcnQgKG5vdGU6IGxpbnV4IHBhdGNoIGNoYW5nZWQsIDIuMi4xOSBhZGRlZCkuCi0gKiAgVGh1IE1hciAxNSAxNTozMDozMSBNRVQgMjAwMSwgdiAxLjMuMjogRml4ZWQgbWlycm9yaW5nIGJ1ZyBvbiBsaXR0bGUtZW5kaWFuLgotICogIFdlZCBNYXIgMTQgMjE6MjU6NTQgQ0VUIDIwMDEsIHYgMS4zLjE6IEZpeGVkIGJ1ZyBpbiBCbG9ja01vdmUgKF9ibW92KS4KLSAqICBUdWUgTWFyIDEzIDEwOjUzOjE5IE1FVCAyMDAxLCB2IDEuMy4wOiBDaGFyYWN0ZXIgZHJhd2luZyBoYXJkd2FyZSBzdXBwb3J0IChpbiBhbGwgd2lkdGggYmV0d2VlbiAxIGFuZCAxNiksIGZpeGVzLgotICogIFRodSBNYXIgIDggMTA6MjA6MTYgTUVUIDIwMDEsIHYgMS4yLjI6IEJldHRlciBKMjAwMCBzdXBwb3J0LCAiZm9udDoiIG9wdGlvbi4KLSAqICBUdWUgTWFyICA2IDIxOjI1OjA0IENFVCAyMDAxLCB2IDEuMi4xOiBCZXR0ZXIgYWNjZWxlcmF0aW9uIHN1cHBvcnQuCi0gKiAgTW9uIE1hciAgNSAyMTo1NDoxNyBDRVQgMjAwMSwgdiAxLjIuMDogUGFydGlhbCBhY2NlbGVyYXRpb24gc3VwcG9ydCAoY2xlYXIgJiBibW92ZSkKLSAqICBNb24gTWFyICA1IDEyOjUyOjE1IENFVCAyMDAxLCB2IDEuMS4zOiBCaWcgcGFuX2Rpc3BsYXkgZml4LgotICogIFN1biBNYXIgIDQgMjI6MjE6NTAgQ0VUIDIwMDEsIHYgMS4xLjI6IChudW1lcm91cykgYnVnIGZpeGVzLgotICogIEZyaSBNYXIgIDIgMTU6NTQ6MDcgQ0VUIDIwMDEsIHYgMS4xLjE6IE1pZ2h0IGhhdmUgQXBwaWFuIEoyMDAwIHN1cHBvcnQsIHJlc291cmNlIG1hbmdlbWVudCBpbiAyLjQKLSAqICBXZWQgRmViIDI4IDE4OjIxOjM1IENFVCAyMDAxLCB2IDEuMS4wOiBNaWdodCBoYXZlIG11bHRpcGxlIGJvYXJkcyBzdXBwb3J0IChhZGRlZCwgYnV0IG5vdCB5ZXN0IHRlc3RlZCkKLSAqICBUdWUgRmViIDI3IDE3OjMxOjEyIENFVCAyMDAxLCB2IDEuMC42OiBmaXhlcyBib290LXRpbWUgbW9kZSBzZWxlY3QsIGFkZCBtb3JlIGRlZmF1bHQgbW9kZQotICogIFR1ZSBGZWIgMjcgMTQ6MDE6MzYgQ0VUIDIwMDEsIHYgMS4wLjU6IGZpeGVzICgxLjAuNCB3YXMgYnJva2VuIGZvciAyLjIpLCBjbGVhbmluZyB1cAotICogIE1vbiBGZWIgMjYgMjM6MTc6MzYgQ0VUIDIwMDEsIHYgMS4wLjQ6IHByZWxpbWluYXJ5IDIuNC54IHN1cHBvcnQsIGRyb3BwZWQgKHVzZWxlc3Mgb24gcG0zKSBwYXJ0aWFsIHByb2R1Y3QsIG1vcmUgT0YgZml4Ci0gKiAgTW9uIEZlYiAyNiAyMDo1OTowNSBDRVQgMjAwMSwgdiAxLjAuMzogTm8gbW9yZSBzaGFkb3cgcmVnaXN0ZXIgKGFuZCB3YXN0ZWQgbWVtb3J5KSwgZW5kaWFuZXNzIGZpeCwgdXNlIE9GLXByZXNldCByZXNvbHV0aW9uIGJ5IGRlZmF1bHQKLSAqICBXZWQgRmViIDIxIDIyOjA5OjMwIENFVCAyMDAxLCB2IDEuMC4yOiBDb2RlIGNsZWFuaW5nIGZvciBmdXR1cmUgbXVsdGlib2FyZCBzdXBwb3J0LCBiZXR0ZXIgT0Ygc3VwcG9ydCwgYnVncyBmaXgKLSAqICBXZWQgRmViIDIxIDE5OjU4OjU2IENFVCAyMDAxLCB2IDEuMC4xOiBPcGVuRmlybXdhcmUgc3VwcG9ydCwgZml4ZWQgbWVtb3J5IGRldGVjdGlvbiwgYmV0dGVyIGRlYnVnIHN1cHBvcnQsIGNvZGUgY2xlYW5pbmcKLSAqICBXZWQgRmViIDIxIDE0OjQ3OjA2IENFVCAyMDAxLCB2IDEuMC4wOiBGaXJzdCB3b3JraW5nIHZlcnNpb24KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC01OCwxMDU3ICsyOCwyMjIgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCi0jaW5jbHVkZSA8dmlkZW8vZmJjb24uaD4KLSNpbmNsdWRlIDx2aWRlby9mYmNvbi1tZmIuaD4KLSNpbmNsdWRlIDx2aWRlby9mYmNvbi1jZmIyLmg+Ci0jaW5jbHVkZSA8dmlkZW8vZmJjb24tY2ZiNC5oPgotI2luY2x1ZGUgPHZpZGVvL2ZiY29uLWNmYjguaD4KLSNpbmNsdWRlIDx2aWRlby9mYmNvbi1jZmIxNi5oPgotI2luY2x1ZGUgPHZpZGVvL2ZiY29uLWNmYjI0Lmg+Ci0jaW5jbHVkZSA8dmlkZW8vZmJjb24tY2ZiMzIuaD4KICNpbmNsdWRlIDx2aWRlby9wbTNmYi5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2lmZGVmIENPTkZJR19GQl9PRgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaWYgIWRlZmluZWQoQ09ORklHX1BDSSkKKyNlcnJvciAiT25seSBnZW5lcmljIFBDSSBjYXJkcyBzdXBwb3J0ZWQuIgogI2VuZGlmCiAKLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qICoqKioqIFRoZSB2YXJpb3VzICJnbG9iYWwiIGRhdGEgKioqKiogKi8KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQotLyogdGhvc2Ugd2lsbCBuZWVkIGEgcmV3b3JrIGZvciBtdWx0aXBsZSBib2FyZCBzdXBwb3J0ICovCi0vKiBEcml2ZXIgbmFtZSAqLwotc3RhdGljIGNvbnN0IGNoYXIgcGVybWVkaWEzX25hbWVbMTZdID0gIlBlcm1lZGlhMyI7Ci0KLS8qIHRoZSBmYl9wYXIgc3RydWN0LCBtYW5kYXRvcnkgKi8KLXN0cnVjdCBwbTNmYl9wYXIgewotCXUzMiBwaXhjbG9jazsJCS8qIHBpeGNsb2NrIGluIEtIeiAqLwotCi0JdTMyIHdpZHRoOwkJLyogd2lkdGggb2YgdmlydHVhbCBzY3JlZW4gKi8KLQl1MzIgaGVpZ2h0OwkJLyogaGVpZ2h0IG9mIHZpcnR1YWwgc2NyZWVuICovCi0KLQl1MzIgaHNzdGFydDsJCS8qIGhvcml6LiBzeW5jIHN0YXJ0ICovCi0JdTMyIGhzZW5kOwkJLyogaG9yaXouIHN5bmMgZW5kICovCi0JdTMyIGhiZW5kOwkJLyogaG9yaXouIGJsYW5rIGVuZCAoYWxzbyBnYXRlIGVuZCkgKi8KLQl1MzIgaHRvdGFsOwkJLyogdG90YWwgd2lkdGggKHcvIHN5bmMgJiBibGFuaykgKi8KLQotCXUzMiB2c3N0YXJ0OwkJLyogdmVydC4gc3luYyBzdGFydCAqLwotCXUzMiB2c2VuZDsJCS8qIHZlcnQuIHN5bmMgZW5kICovCi0JdTMyIHZiZW5kOwkJLyogdmVydC4gYmxhbmsgZW5kICovCi0JdTMyIHZ0b3RhbDsJCS8qIHRvdGFsIGhlaWdodCAody8gc3luYyAmIGJsYW5rKSAqLwotCi0JdTMyIHN0cmlkZTsJCS8qIHNjcmVlbiBzdHJpZGUgKi8KLQl1MzIgYmFzZTsJCS8qIHNjcmVlbiBiYXNlICh4b2Zmc2V0K3lvZmZzZXQpIGluIDEyOCBiaXRzIHVuaXQgKi8KLQkvKiBOT1RFIDogdW5saWtlIG90aGVyIHBtMyBzdHVmZiBhYm92ZSwgc3RvcmVkICphZnRlciogc2hpZnRicHAuIGRvbid0IGFzayAqLwotCXUzMiBkZXB0aDsJCS8qIHNjcmVlbiBkZXB0aCAoOCwgMTIsIDE1LCAxNiBvciAzMikgKi8KLQl1MzIgdmlkZW87CQkvKiB2aWRlbyBjb250cm9sIChoc3luYyx2c3luYykgKi8KLX07Ci0KLS8qIG1lbW9yeSB0aW1pbmdzICovCi1zdHJ1Y3QgcG0zZmJfdGltaW5ncwotewotCXVuc2lnbmVkIGxvbmcgY2FwczsKLQl1bnNpZ25lZCBsb25nIHRpbWluZ3M7Ci0JdW5zaWduZWQgbG9uZyBjb250cm9sOwotCXVuc2lnbmVkIGxvbmcgcmVmcmVzaDsKLQl1bnNpZ25lZCBsb25nIHBvd2VyZG93bjsKLX07Ci10eXBlZGVmIGVudW0gcG0zZmJfdGltaW5nX3Jlc3VsdCB7IHBtM2ZiX3RpbWluZ19vaywgcG0zZmJfdGltaW5nX3Byb2JsZW0sIHBtM2ZiX3RpbWluZ19yZXRyeSB9IHBtM2ZiX3RpbWluZ19yZXN1bHQ7Ci0jZGVmaW5lIFBNM0ZCX1VOS05PV05fVElNSU5HX1ZBTFVFICgodW5zaWduZWQgbG9uZyktMSkKLSNkZWZpbmUgUE0zRkJfVU5LTk9XTl9USU1JTkdTIHsgUE0zRkJfVU5LTk9XTl9USU1JTkdfVkFMVUUsIFBNM0ZCX1VOS05PV05fVElNSU5HX1ZBTFVFLCBQTTNGQl9VTktOT1dOX1RJTUlOR19WQUxVRSwgUE0zRkJfVU5LTk9XTl9USU1JTkdfVkFMVUUsIFBNM0ZCX1VOS05PV05fVElNSU5HX1ZBTFVFIH0KLQotLyogdGhlIGZiX2luZm8gc3RydWN0LCBtYW5kYXRvcnkgKi8KLXN0cnVjdCBwbTNmYl9pbmZvIHsKLQlzdHJ1Y3QgZmJfaW5mb19nZW4gZ2VuOwotCXVuc2lnbmVkIGxvbmcgYm9hcmRfbnVtOyAvKiBpbnRlcm5hbCBib2FyZCBudW1iZXIgKi8KLQl1bnNpZ25lZCBsb25nIHVzZV9jdXJyZW50OwotCXN0cnVjdCBwbTNmYl9wYXIgKmN1cnJlbnRfcGFyOwotCXN0cnVjdCBwY2lfZGV2ICpkZXY7ICAgIC8qIFBDSSBkZXZpY2UgKi8KLQl1bnNpZ25lZCBsb25nIGJvYXJkX3R5cGU7IC8qIGluZGV4IGluIHRoZSBjYXJkYmFzZSAqLwotCXVuc2lnbmVkIGNoYXIgKmZiX2Jhc2U7CS8qIGZyYW1lYnVmZmVyIG1lbW9yeSBiYXNlICovCi0JdTMyIGZiX3NpemU7CQkvKiBmcmFtZWJ1ZmZlciBtZW1vcnkgc2l6ZSAqLwotCXVuc2lnbmVkIGNoYXIgKnBfZmI7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZnJhbWUgYnVmZmVyICovCi0JdW5zaWduZWQgY2hhciAqdl9mYjsJLyogdmlydHVhbCBhZGRyZXNzIG9mIGZyYW1lIGJ1ZmZlciAqLwotCXVuc2lnbmVkIGNoYXIgKnBJT0Jhc2U7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgcmVnaXN0ZXJzIHJlZ2lvbiwgbXVzdCBiZSByZ19iYXNlIG9yIHJnX2Jhc2UrUE0yX1JFR1NfU0laRSBkZXBlbmRpbmcgb24gdGhlIGhvc3QgZW5kaWFubmVzcyAqLwotCXVuc2lnbmVkIGNoYXIgKnZJT0Jhc2U7CS8qIGFkZHJlc3Mgb2YgcmVnaXN0ZXJzIGFmdGVyIGlvcmVtYXAoKSAqLwotCXN0cnVjdCB7Ci0JCXU4IHRyYW5zcDsKLQkJdTggcmVkOwotCQl1OCBncmVlbjsKLQkJdTggYmx1ZTsKLQl9IHBhbGV0dGVbMjU2XTsKLQl1bmlvbiB7Ci0jaWZkZWYgRkJDT05fSEFTX0NGQjE2Ci0JCXUxNiBjbWFwMTJbMTZdOyAvKiBSR0JBIDQ0NDQgKi8KLQkJdTE2IGNtYXAxNVsxNl07IC8qIFJHQkEgNTU1MSAqLwotCQl1MTYgY21hcDE2WzE2XTsgLyogUkdCQSA1NjUwICovCisjdW5kZWYgUE0zRkJfTUFTVEVSX0RFQlVHCisjaWZkZWYgUE0zRkJfTUFTVEVSX0RFQlVHCisjZGVmaW5lIERQUklOVEsoYSxiLi4uKQlwcmludGsoS0VSTl9ERUJVRyAicG0zZmI6ICVzOiAiIGEsIF9fRlVOQ1RJT05fXyAsICMjIGIpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGEsYi4uLikKICNlbmRpZgotI2lmZGVmIEZCQ09OX0hBU19DRkIzMgotCQl1MzIgY21hcDMyWzE2XTsKLSNlbmRpZgotCX0gY21hcDsKLQlzdHJ1Y3QgcG0zZmJfdGltaW5ncyBtZW10OworCisvKgorICogRHJpdmVyIGRhdGEKKyAqLworc3RhdGljIGNoYXIgKm1vZGVfb3B0aW9uIF9fZGV2aW5pdGRhdGE7CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBoYXJkd2FyZSBzdGF0ZSBvZiB0aGUgZ3JhcGhpY3MgY2FyZC4gTm9ybWFsbHkKKyAqIHlvdSBwbGFjZSB0aGlzIGluIGEgaGVhZGVyIGZpbGUgaW4gbGludXgvaW5jbHVkZS92aWRlby4gVGhpcyBmaWxlIHVzdWFsbHkKKyAqIGFsc28gaW5jbHVkZXMgcmVnaXN0ZXIgaW5mb3JtYXRpb24uIFRoYXQgYWxsb3dzIG90aGVyIGRyaXZlciBzdWJzeXN0ZW1zCisgKiBhbmQgdXNlcmxhbmQgYXBwbGljYXRpb25zIHRoZSBhYmlsaXR5IHRvIHVzZSB0aGUgc2FtZSBoZWFkZXIgZmlsZSB0bworICogYXZvaWQgZHVwbGljYXRlIHdvcmsgYW5kIGVhc3kgcG9ydGluZyBvZiBzb2Z0d2FyZS4KKyAqLworc3RydWN0IHBtM19wYXIgeworCXVuc2lnbmVkIGNoYXIJX19pb21lbSAqdl9yZWdzOy8qIHZpcnR1YWwgYWRkcmVzcyBvZiBwX3JlZ3MgKi8KKwl1MzIJCXZpZGVvOwkJLyogdmlkZW8gZmxhZ3MgYmVmb3JlIGJsYW5raW5nICovCisJdTMyCQliYXNlOwkJLyogc2NyZWVuIGJhc2UgKHhvZmZzZXQreW9mZnNldCkgaW4gMTI4IGJpdHMgdW5pdCAqLworCXUzMgkJcGFsZXR0ZVsxNl07CiB9OwogCi0vKiByZWd1bGFyIHJlc29sdXRpb24gZGF0YWJhc2UqLwotc3RhdGljIHN0cnVjdCB7Ci0JY2hhciBuYW1lWzE2XTsKLQlzdHJ1Y3QgcG0zZmJfcGFyIHVzZXJfbW9kZTsKLX0gbW9kZV9iYXNlW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCSJkZWZhdWx0LTgwMHg2MDAiLCB7Ci0JNDk1MDAsIDgwMCwgNjAwLCAxNiwgOTYsIDI1NiwgMTA1NiwgMSwgNCwgMjUsIDYyNSwKLQkJCSAgICA4MDAsIDAsIDgsCi0JCQkgICAgUE0zVmlkZW9Db250cm9sX0VOQUJMRSB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9ISUdICi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwgUE0zVmlkZW9Db250cm9sX1BJWEVMU0laRV84QklUfX0sIHsKLQkJIjEwMjR4NzY4LTc0IiwgewotCTc4NzUyLCAxMDI0LCA3NjgsIDMyLCAxMjgsIDMwNCwgMTMyOCwgMSwgNCwgMzgsCi0JCQkgICAgODA2LCAxMDI0LCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LCB7Ci0JCSIxMDI0eDc2OC03NC0zMiIsIHsKLQkJCTc4NzUyLCAxMDI0LCA3NjgsIDMyLCAxMjgsIDMwNCwgMTMyOCwgMSwgNCwgMzgsCi0JCQk4MDYsIDEwMjQsIDAsIDMyLAotCQkJUE0zVmlkZW9Db250cm9sX0VOQUJMRSB8Ci0JCQlQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0hJR0gKLQkJCXwKLQkJCVBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfSElHSAotCQkJfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzMyQklUfX0sCi0vKiBHZW5lcmF0ZWQgbW9kZSA6ICIxNjAweDEwMjQiLCBmb3IgdGhlIFNHSSAxNjAwU1cgZmxhdCBwYW5lbCovCi0JewotCQkiU0dJMTYwMFNXIiwgewotCQkJMTA4MDAwLCAxNjAwLCAxMDI0LCAxNiwgNTYsIDEwNCwgMTcwNCwgMywgNiwgMzIsCi0JCQkxMDU2LCAxNjAwLCAwLCA4LAotCQkJUE0zVmlkZW9Db250cm9sX0VOQUJMRXwKLQkJCVBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfTE9XfFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfTE9XfAotCQkJUE0zVmlkZW9Db250cm9sX1BJWEVMU0laRV8zMkJJVH19LCAKLS8qICMjIyMjIGF1dG8tZ2VuZXJhdGVkIG1vZGUsIGJ5IGZidGltaW5nczJwbTMgKi8KLS8qIEdlbmVyYXRlZCBtb2RlIDogIjY0MHg0ODAtNjAiICovCi0JewotCQkiNjQweDQ4MC02MCIsIHsKLQkyNTE3NCwgNjQwLCA0ODAsIDE2LCAxMTIsIDE2MCwgODAwLCAxMCwgMTIsIDQ1LAotCQkJICAgIDUyNSwgNjQwLCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwKLS8qIEdlbmVyYXRlZCBtb2RlIDogIjY0MHg0ODAtNzIiICovCi0JewotCQkiNjQweDQ4MC03MiIsIHsKLQkzMTE5OSwgNjQwLCA0ODAsIDI0LCA2NCwgMTkyLCA4MzIsIDksIDEyLCA0MCwgNTIwLAotCQkJICAgIDY0MCwgMCwgOCwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfRU5BQkxFIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0xPVwotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0xPVwotCQkJICAgIHwgUE0zVmlkZW9Db250cm9sX1BJWEVMU0laRV84QklUfX0sCi0vKiBHZW5lcmF0ZWQgbW9kZSA6ICI2NDB4NDgwLTc1IiAqLwotCXsKLQkJIjY0MHg0ODAtNzUiLCB7Ci0JMzE0OTksIDY0MCwgNDgwLCAxNiwgODAsIDIwMCwgODQwLCAxLCA0LCAyMCwgNTAwLAotCQkJICAgIDY0MCwgMCwgOCwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfRU5BQkxFIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0xPVwotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0xPVwotCQkJICAgIHwgUE0zVmlkZW9Db250cm9sX1BJWEVMU0laRV84QklUfX0sCi0vKiBHZW5lcmF0ZWQgbW9kZSA6ICI2NDB4NDgwLTkwIiAqLwotCXsKLQkJIjY0MHg0ODAtOTAiLCB7Ci0JMzk5MDksIDY0MCwgNDgwLCAzMiwgNzIsIDE5MiwgODMyLCAyNSwgMzksIDUzLCA1MzMsCi0JCQkgICAgNjQwLCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwKLS8qIEdlbmVyYXRlZCBtb2RlIDogIjY0MHg0ODAtMTAwIiAqLwotCXsKLQkJIjY0MHg0ODAtMTAwIiwgewotCTQ0ODk5LCA2NDAsIDQ4MCwgMzIsIDE2MCwgMjA4LCA4NDgsIDIyLCAzNCwgNTEsCi0JCQkgICAgNTMxLCA2NDAsIDAsIDgsCi0JCQkgICAgUE0zVmlkZW9Db250cm9sX0VOQUJMRSB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9MT1cKLQkJCSAgICB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9MT1cKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiODAweDYwMC00OC1sYWNlIiAqLwotLyogSU5URVJMQUNFRCBOT1QgU1VQUE9SVEVECi0gIHsiODAweDYwMC00OC1sYWNlIiwgezM1OTk5LCA4MDAsIDYwMCwgODAsIDIwOCwgMjY0LCAxMDY0LCAxMSwgMjMsIDEwMiwgNzAyLCA4MDAsIDAsIDgsIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEV8UE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9ISUdIfFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfSElHSHxQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwgCi0gICBJTlRFUkxBQ0VEIE5PVCBTVVBQT1JURUQgKi8KLS8qIEdlbmVyYXRlZCBtb2RlIDogIjgwMHg2MDAtNTYiICovCi0JewotCQkiODAweDYwMC01NiIsIHsKLQkzNTk5OSwgODAwLCA2MDAsIDI0LCA5NiwgMjI0LCAxMDI0LCAxLCAzLCAyNSwgNjI1LAotCQkJICAgIDgwMCwgMCwgOCwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfRU5BQkxFIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9ISUdICi0JCQkgICAgfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwKLS8qIEdlbmVyYXRlZCBtb2RlIDogIjgwMHg2MDAtNjAiICovCi0JewotCQkiODAweDYwMC02MCIsIHsKLQk0MDAwMCwgODAwLCA2MDAsIDQwLCAxNjgsIDI1NiwgMTA1NiwgMSwgNSwgMjgsIDYyOCwKLQkJCSAgICA4MDAsIDAsIDgsCi0JCQkgICAgUE0zVmlkZW9Db250cm9sX0VOQUJMRSB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9ISUdICi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwgUE0zVmlkZW9Db250cm9sX1BJWEVMU0laRV84QklUfX0sCi0vKiBHZW5lcmF0ZWQgbW9kZSA6ICI4MDB4NjAwLTcwIiAqLwotCXsKLQkJIjgwMHg2MDAtNzAiLCB7Ci0JNDQ4OTksIDgwMCwgNjAwLCAyNCwgMTY4LCAyMDgsIDEwMDgsIDksIDIxLCAzNiwKLQkJCSAgICA2MzYsIDgwMCwgMCwgOCwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfRU5BQkxFIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9MT1cKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiODAweDYwMC03MiIgKi8KLQl7Ci0JCSI4MDB4NjAwLTcyIiwgewotCTUwMDAwLCA4MDAsIDYwMCwgNTYsIDE3NiwgMjQwLCAxMDQwLCAzNywgNDMsIDY2LAotCQkJICAgIDY2NiwgODAwLCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiODAweDYwMC03NSIgKi8KLQl7Ci0JCSI4MDB4NjAwLTc1IiwgewotCTQ5NDk3LCA4MDAsIDYwMCwgMTYsIDk2LCAyNTYsIDEwNTYsIDEsIDQsIDI1LCA2MjUsCi0JCQkgICAgODAwLCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiODAweDYwMC05MCIgKi8KLQl7Ci0JCSI4MDB4NjAwLTkwIiwgewotCTU2NjM3LCA4MDAsIDYwMCwgOCwgNzIsIDE5MiwgOTkyLCA4LCAxOSwgMzUsIDYzNSwKLQkJCSAgICA4MDAsIDAsIDgsCi0JCQkgICAgUE0zVmlkZW9Db250cm9sX0VOQUJMRSB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9ISUdICi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwgUE0zVmlkZW9Db250cm9sX1BJWEVMU0laRV84QklUfX0sCi0vKiBHZW5lcmF0ZWQgbW9kZSA6ICI4MDB4NjAwLTEwMCIsIGZyb20gL2V0Yy9mYi5tb2RlcyAqLwotLyogRElTQUJMRUQsIGhzc3RhcnQgPT0gMAotCXsKLQkJIjgwMHg2MDAtMTAwIiwgewotCTY3NDk5LCA4MDAsIDYwMCwgMCwgNjQsIDI4MCwgMTA4MCwgNywgMTEsIDI1LCA2MjUsCi0JCQkgICAgODAwLCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotKi8KLS8qIEdlbmVyYXRlZCBtb2RlIDogIjgwMHg2MDAtMTAwIiwgZnJvbSA/Pz8gKi8KLQl7Ci0JCSI4MDB4NjAwLTEwMCIsIHsKLQkJCTY5NjUwLCA4MDAsIDYwMCwgNjQsIDEyOCwgMjg4LCAxMDg4LCA0LCAxMCwgNDAsIDY0MCwgODAwLCAwLCA4LAotCQkJUE0zVmlkZW9Db250cm9sX0VOQUJMRXxQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0xPV3wKLQkJCVBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfTE9XfFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiMTAyNHg3NjgtNDMtbGFjZSIgKi8KLS8qIElOVEVSTEFDRUQgTk9UIFNVUFBPUlRFRAotICB7IjEwMjR4NzY4LTQzLWxhY2UiLCB7NDQ4OTksIDEwMjQsIDc2OCwgOCwgMTg0LCAyNDAsIDEyNjQsIDEsIDksIDQ5LCA4MTcsIDEwMjQsIDAsIDgsIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEV8UE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9ISUdIfFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfSElHSHxQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwgCi0gICBJTlRFUkxBQ0VEIE5PVCBTVVBQT1JURUQgKi8KLS8qIEdlbmVyYXRlZCBtb2RlIDogIjEwMjR4NzY4LTYwIiAqLwotCXsKLQkJIjEwMjR4NzY4LTYwIiwgewotCTY0OTk4LCAxMDI0LCA3NjgsIDI0LCAxNjAsIDMyMCwgMTM0NCwgMywgOSwgMzgsCi0JCQkgICAgODA2LCAxMDI0LCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwKLS8qIEdlbmVyYXRlZCBtb2RlIDogIjEwMjR4NzY4LTcwIiAqLwotCXsKLQkJIjEwMjR4NzY4LTcwIiwgewotCTc0OTk2LCAxMDI0LCA3NjgsIDI0LCAxNjAsIDMwNCwgMTMyOCwgMywgOSwgMzgsCi0JCQkgICAgODA2LCAxMDI0LCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwKLS8qIEdlbmVyYXRlZCBtb2RlIDogIjEwMjR4NzY4LTcyIiAqLwotCXsKLQkJIjEwMjR4NzY4LTcyIiwgewotCTc0OTk2LCAxMDIyNCwgNzY4LCAyNCwgMTYwLCAyNjQsIDEwNDg4LCAzLCA5LCAzOCwKLQkJCSAgICA4MDYsIDEwMjI0LCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwKLS8qIEdlbmVyYXRlZCBtb2RlIDogIjEwMjR4NzY4LTc1IiAqLwotCXsKLQkJIjEwMjR4NzY4LTc1IiwgewotCTc4NzQ2LCAxMDI0LCA3NjgsIDE2LCAxMTIsIDI4OCwgMTMxMiwgMSwgNCwgMzIsCi0JCQkgICAgODAwLCAxMDI0LCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiMTAyNHg3NjgtOTAiICovCi0JewotCQkiMTAyNHg3NjgtOTAiLCB7Ci0JMTAwMDAwLCAxMDI0LCA3NjgsIDAsIDk2LCAyODgsIDEzMTIsIDIxLCAzNiwgNzcsCi0JCQkgICAgODQ1LCAxMDI0LCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwKLS8qIEdlbmVyYXRlZCBtb2RlIDogIjEwMjR4NzY4LTEwMCIsIGZyb20gL2V0Yy9mYi5tb2RlcyAqLwotLyogRElTQUJMRUQsIHZzc3RhcnQgPT0gMAotCXsKLQkJIjEwMjR4NzY4LTEwMCIsIHsKLQkxMDk5OTgsIDEwMjQsIDc2OCwgMCwgODgsIDM2OCwgMTM5MiwgMCwgOCwgMjQsIDc5MiwKLQkJCSAgICAxMDI0LCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwKLSovCi0vKiBHZW5lcmF0ZWQgbW9kZSA6ICIxMDI0eDc2OC0xMDAiLCBmcm9tID8/PyAqLwotCXsKLQkJIjEwMjR4NzY4LTEwMCIsIHsKLQkJCTExNTUwMCwgMTAyNCwgNzY4LCAzMiwgMjI0LCA0MTYsIDE0NDAsIDMsIDEzLCAzNCwgODAyLCAxMDI0LCAwLCA4LAotCQkJUE0zVmlkZW9Db250cm9sX0VOQUJMRXxQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0xPV3wKLQkJCVBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfTE9XfFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiMTE1Mng4NjQtNDMtbGFjZSIgKi8KLS8qIElOVEVSTEFDRUQgTk9UIFNVUFBPUlRFRAotICB7IjExNTJ4ODY0LTQzLWxhY2UiLCB7NjQ5OTgsIDExNTIsIDg2NCwgNzIsIDIwMCwgMjY0LCAxNDE2LCA3OCwgODcsIDE5MSwgMTA1NSwgMTE1MiwgMCwgOCwgUE0zVmlkZW9Db250cm9sX0VOQUJMRXxQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0hJR0h8UE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9ISUdIfFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LCAKLSAgIElOVEVSTEFDRUQgTk9UIFNVUFBPUlRFRCAqLwotLyogR2VuZXJhdGVkIG1vZGUgOiAiMTE1Mng4NjQtNDctbGFjZSIgKi8KLS8qIElOVEVSTEFDRUQgTk9UIFNVUFBPUlRFRAotICB7IjExNTJ4ODY0LTQ3LWxhY2UiLCB7NjQ5OTgsIDExNTIsIDg2NCwgODgsIDIxNiwgMjk2LCAxNDQ4LCAzMCwgMzksIDgzLCA5NDcsIDExNTIsIDAsIDgsIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEV8UE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9ISUdIfFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfSElHSHxQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwgCi0gICBJTlRFUkxBQ0VEIE5PVCBTVVBQT1JURUQgKi8KLS8qIEdlbmVyYXRlZCBtb2RlIDogIjExNTJ4ODY0LTYwIiAqLwotCXsKLQkJIjExNTJ4ODY0LTYwIiwgewotCTgwMDAwLCAxMTUyLCA4NjQsIDY0LCAxNzYsIDMwNCwgMTQ1NiwgNiwgMTEsIDUyLAotCQkJICAgIDkxNiwgMTE1MiwgMCwgOCwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfRU5BQkxFIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9ISUdICi0JCQkgICAgfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwKLS8qIEdlbmVyYXRlZCBtb2RlIDogIjExNTJ4ODY0LTcwIiAqLwotCXsKLQkJIjExNTJ4ODY0LTcwIiwgewotCTEwMDAwMCwgMTE1MiwgODY0LCA0MCwgMTkyLCAzNjAsIDE1MTIsIDEzLCAyNCwgODEsCi0JCQkgICAgOTQ1LCAxMTUyLCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiMTE1Mng4NjQtNzUiICovCi0JewotCQkiMTE1Mng4NjQtNzUiLCB7Ci0JMTA5OTk4LCAxMTUyLCA4NjQsIDI0LCAxNjgsIDMxMiwgMTQ2NCwgNDUsIDUzLCAxMzgsCi0JCQkgICAgMTAwMiwgMTE1MiwgMCwgOCwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfRU5BQkxFIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9ISUdICi0JCQkgICAgfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwKLS8qIEdlbmVyYXRlZCBtb2RlIDogIjExNTJ4ODY0LTgwIiAqLwotCXsKLQkJIjExNTJ4ODY0LTgwIiwgewotCTEwOTk5OCwgMTE1MiwgODY0LCAxNiwgMTI4LCAyODgsIDE0NDAsIDMwLCAzNywgOTQsCi0JCQkgICAgOTU4LCAxMTUyLCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiMTI4MHgxMDI0LTQzLWxhY2UiICovCi0vKiBJTlRFUkxBQ0VEIE5PVCBTVVBQT1JURUQKLSAgeyIxMjgweDEwMjQtNDMtbGFjZSIsIHs4MDAwMCwgMTAyNCwgMTAyNCwgODAsIDE2MCwgMzIwLCAxMzQ0LCA1MCwgNjAsIDEyNSwgMTE0OSwgMTAyNCwgMCwgOCwgUE0zVmlkZW9Db250cm9sX0VOQUJMRXxQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0hJR0h8UE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9ISUdIfFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LCAKLSAgIElOVEVSTEFDRUQgTk9UIFNVUFBPUlRFRCAqLwotLyogR2VuZXJhdGVkIG1vZGUgOiAiMTI4MHgxMDI0LTQ3LWxhY2UiICovCi0vKiBJTlRFUkxBQ0VEIE5PVCBTVVBQT1JURUQKLSAgeyIxMjgweDEwMjQtNDctbGFjZSIsIHs4MDAwMCwgMTI4MCwgMTAyNCwgODAsIDE2MCwgMzIwLCAxNjAwLCAxLCAxMSwgMjksIDEwNTMsIDEyODAsIDAsIDgsIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEV8UE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9ISUdIfFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfSElHSHxQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwgCi0gICBJTlRFUkxBQ0VEIE5PVCBTVVBQT1JURUQgKi8KLS8qIEdlbmVyYXRlZCBtb2RlIDogIjEyODB4MTAyNC02MCIgKi8KLQl7Ci0JCSIxMjgweDEwMjQtNjAiLCB7Ci0JMTA3OTkxLCAxMjgwLCAxMDI0LCA0OCwgMTYwLCA0MDgsIDE2ODgsIDEsIDQsIDQyLAotCQkJICAgIDEwNjYsIDEyODAsIDAsIDgsCi0JCQkgICAgUE0zVmlkZW9Db250cm9sX0VOQUJMRSB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9ISUdICi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwgUE0zVmlkZW9Db250cm9sX1BJWEVMU0laRV84QklUfX0sCi0vKiBHZW5lcmF0ZWQgbW9kZSA6ICIxMjgweDEwMjQtNzAiICovCi0JewotCQkiMTI4MHgxMDI0LTcwIiwgewotCTEyNTk5MiwgMTI4MCwgMTAyNCwgODAsIDE5MiwgNDA4LCAxNjg4LCAxLCA2LCA0MiwKLQkJCSAgICAxMDY2LCAxMjgwLCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiMTI4MHgxMDI0LTc0IiAqLwotCXsKLQkJIjEyODB4MTAyNC03NCIsIHsKLQkxMzQ5ODksIDEyODAsIDEwMjQsIDMyLCAxNzYsIDQzMiwgMTcxMiwgMCwgMzAsIDQwLAotCQkJICAgIDEwNjQsIDEyODAsIDAsIDgsCi0JCQkgICAgUE0zVmlkZW9Db250cm9sX0VOQUJMRSB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9ISUdICi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwgUE0zVmlkZW9Db250cm9sX1BJWEVMU0laRV84QklUfX0sCi0vKiBHZW5lcmF0ZWQgbW9kZSA6ICIxMjgweDEwMjQtNzUiICovCi0JewotCQkiMTI4MHgxMDI0LTc1IiwgewotCTEzNDk4OSwgMTI4MCwgMTAyNCwgMTYsIDE2MCwgNDA4LCAxNjg4LCAxLCA0LCA0MiwKLQkJCSAgICAxMDY2LCAxMjgwLCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSAotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiMTYwMHgxMjAwLTYwIiAqLwotCXsKLQkJIjE2MDB4MTIwMC02MCIsIHsKLQkxNTU5ODEsIDE2MDAsIDEyMDAsIDMyLCAxOTIsIDQ0OCwgMjA0OCwgMTAsIDE4LCA3MCwKLQkJCSAgICAxMjcwLCAxNjAwLCAwLCA4LAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfAotCQkJICAgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfTE9XCi0JCQkgICAgfCBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzhCSVR9fSwKLS8qIEdlbmVyYXRlZCBtb2RlIDogIjE2MDB4MTIwMC02NiIgKi8KLQl7Ci0JCSIxNjAweDEyMDAtNjYiLCB7Ci0JMTcxOTk4LCAxNjAwLCAxMjAwLCA0MCwgMTc2LCA0ODAsIDIwODAsIDMsIDYsIDUzLAotCQkJICAgIDEyNTMsIDE2MDAsIDAsIDgsCi0JCQkgICAgUE0zVmlkZW9Db250cm9sX0VOQUJMRSB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9MT1cKLQkJCSAgICB8Ci0JCQkgICAgUE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9MT1cKLQkJCSAgICB8IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVH19LAotLyogR2VuZXJhdGVkIG1vZGUgOiAiMTYwMHgxMjAwLTc2IiAqLwotCXsKLQkJIjE2MDB4MTIwMC03NiIsIHsKLQkxOTc5ODAsIDE2MDAsIDEyMDAsIDQwLCAxNzYsIDQ4MCwgMjA4MCwgMywgOCwgNTAsCi0JCQkgICAgMTI1MCwgMTYwMCwgMCwgOCwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfRU5BQkxFIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0xPVwotCQkJICAgIHwKLQkJCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0xPVwotCQkJICAgIHwgUE0zVmlkZW9Db250cm9sX1BJWEVMU0laRV84QklUfX0sCi0vKiAjIyMjIyBlbmQgb2YgYXV0by1nZW5lcmF0ZWQgbW9kZSAqLwotCXsKLQkiXDAiLH0KKy8qCisgKiBIZXJlIHdlIGRlZmluZSB0aGUgZGVmYXVsdCBzdHJ1Y3RzIGZiX2ZpeF9zY3JlZW5pbmZvIGFuZCBmYl92YXJfc2NyZWVuaW5mbworICogaWYgd2UgZG9uJ3QgdXNlIG1vZGVkYi4gSWYgd2UgZG8gdXNlIG1vZGVkYiBzZWUgcG0zZmJfaW5pdCBob3cgdG8gdXNlIGl0CisgKiB0byBnZXQgYSBmYl92YXJfc2NyZWVuaW5mby4gT3RoZXJ3aXNlIGRlZmluZSBhIGRlZmF1bHQgdmFyIGFzIHdlbGwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gcG0zZmJfZml4IF9fZGV2aW5pdGRhdGEgPSB7CisJLmlkID0JCSJQZXJtZWRpYTMiLAorCS50eXBlID0JCUZCX1RZUEVfUEFDS0VEX1BJWEVMUywKKwkudmlzdWFsID0JRkJfVklTVUFMX1BTRVVET0NPTE9SLAorCS54cGFuc3RlcCA9CTEsCisJLnlwYW5zdGVwID0JMSwKKwkueXdyYXBzdGVwID0JMCwKKwkuYWNjZWwgPQlGQl9BQ0NFTF9OT05FLAogfTsKIAotLyogbW9yZSBtYW5kYXRvcnkgc3R1ZmYgKHNlZSBza2VsZXRvbmZiLmMgKyBmcmFtZWJ1ZmZlciBkcml2ZXIgSE9XVE8gKi8KLXN0YXRpYyBzdHJ1Y3QgcG0zZmJfaW5mbyBmYl9pbmZvW1BNM19NQVhfQk9BUkRdOwotc3RhdGljIHN0cnVjdCBwbTNmYl9wYXIgY3VycmVudF9wYXJbUE0zX01BWF9CT0FSRF07Ci1zdGF0aWMgaW50IGN1cnJlbnRfcGFyX3ZhbGlkW1BNM19NQVhfQk9BUkRdOwotLyogdG8gYWxsb3cgZXhwbGljaXQgZmlsdGVyaW5nIG9mIGJvYXJkICovCi1zaG9ydCBidXNbUE0zX01BWF9CT0FSRF07Ci1zaG9ydCBzbG90W1BNM19NQVhfQk9BUkRdOwotc2hvcnQgZnVuY1tQTTNfTUFYX0JPQVJEXTsKLXNob3J0IGRpc2FibGVbUE0zX01BWF9CT0FSRF07Ci1zaG9ydCBub2FjY2VsW1BNM19NQVhfQk9BUkRdOwotY2hhciBmb250bltQTTNfTUFYX0JPQVJEXVtQTTNfRk9OVE5BTUVfU0laRV07Ci1zaG9ydCBkZXB0aFtQTTNfTUFYX0JPQVJEXTsKLXNob3J0IGZsYXRwYW5lbFtQTTNfTUFYX0JPQVJEXTsKLXN0YXRpYyBzdHJ1Y3QgZGlzcGxheSBkaXNwW1BNM19NQVhfQk9BUkRdOwotc3RhdGljIGNoYXIgZ19vcHRpb25zW1BNM19PUFRJT05TX1NJWkVdIF9faW5pdGRhdGEgPSAicG0zZmIsZHVtbXkiOwotc2hvcnQgcHJpbnR0aW1pbmdzID0gMDsKLXNob3J0IGZvcmNlc2l6ZVtQTTNfTUFYX0JPQVJEXTsKKy8qCisgKiBVdGlsaXR5IGZ1bmN0aW9ucworICovCiAKLS8qICoqKioqKioqKioqKioqKioqKioqKiAqLwotLyogKioqKiogcHJvdG90eXBlICoqKioqICovCi0vKiAqKioqKioqKioqKioqKioqKioqKiogKi8KLS8qIGNhcmQtc3BlY2lmaWMgKi8KLXN0YXRpYyB2b2lkIHBtM2ZiX2oyMDAwX3NldHVwKHN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8pOwotLyogcGVybWVkaWEzLXNwZWNpZmljICovCi1zdGF0aWMgcG0zZmJfdGltaW5nX3Jlc3VsdCBwbTNmYl9wcmVzZXJ2ZV9tZW1vcnlfdGltaW5ncyhzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvKTsKLXN0YXRpYyBwbTNmYl90aW1pbmdfcmVzdWx0IHBtM2ZiX3RyeV9tZW1vcnlfdGltaW5ncyhzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvKTsKLXN0YXRpYyB2b2lkIHBtM2ZiX3dyaXRlX21lbW9yeV90aW1pbmdzKHN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8pOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcG0zZmJfcmVhZF9kYWNfcmVnKHN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8sCi0JCQkJCXVuc2lnbmVkIGxvbmcgcik7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwbTNmYl9DYWxjdWxhdGVDbG9jayhzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvLCB1bnNpZ25lZCBsb25nIHJlcWNsb2NrLAkvKiBJbiBrSHogdW5pdHMgKi8KLQkJCQkJICB1bnNpZ25lZCBsb25nIHJlZmNsb2NrLAkvKiBJbiBrSHogdW5pdHMgKi8KLQkJCQkJICB1bnNpZ25lZCBjaGFyICpwcmVzY2FsZSwJLyogQ2xrUHJlU2NhbGUgKi8KLQkJCQkJICB1bnNpZ25lZCBjaGFyICpmZWVkYmFjaywJLyogQ2xrRmVlZEJhY2tTY2FsZSAqLwotCQkJCQkgIHVuc2lnbmVkIGNoYXIgKnBvc3RzY2FsZQotCQkJCQkgIC8qIENsa1Bvc3RTY2FsZSAqLyApOwotc3RhdGljIHZvaWQgcG0zZmJfY2xlYXJfbWVtb3J5KHN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8sIHUzMiBjYyk7Ci1zdGF0aWMgdm9pZCBwbTNmYl9jbGVhcl9jb2xvcm1hcChzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvLCB1bnNpZ25lZCBjaGFyIHIsIHVuc2lnbmVkIGNoYXIgZywgdW5zaWduZWQgY2hhciBiKTsKLXN0YXRpYyB2b2lkIHBtM2ZiX2NvbW1vbl9pbml0KHN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8pOwotc3RhdGljIGludCBwbTNmYl9TaGlmdGJwcChzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvLAotCQkJICB1bnNpZ25lZCBsb25nIGRlcHRoLCBpbnQgdik7Ci1zdGF0aWMgaW50IHBtM2ZiX1Vuc2hpZnRicHAoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbywKLQkJCSAgICB1bnNpZ25lZCBsb25nIGRlcHRoLCBpbnQgdik7Ci1zdGF0aWMgdm9pZCBwbTNmYl9tYXBJTyhzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvKTsKLXN0YXRpYyB2b2lkIHBtM2ZiX3VubWFwSU8oc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbyk7Ci0jaWYgZGVmaW5lZChQTTNGQl9NQVNURVJfREVCVUcpICYmIChQTTNGQl9NQVNURVJfREVCVUcgPj0gMikKLXN0YXRpYyB2b2lkIHBtM2ZiX3Nob3dfY3VyX21vZGUoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbyk7Ci0jZW5kaWYKLXN0YXRpYyB2b2lkIHBtM2ZiX3Nob3dfY3VyX3RpbWluZyhzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvKTsKLXN0YXRpYyB2b2lkIHBtM2ZiX3dyaXRlX21vZGUoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbyk7Ci1zdGF0aWMgdm9pZCBwbTNmYl9yZWFkX21vZGUoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbywKLQkJCSAgICBzdHJ1Y3QgcG0zZmJfcGFyICpjdXJwYXIpOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcG0zZmJfc2l6ZV9tZW1vcnkoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbyk7Ci0vKiBhY2NlbGVyYXRlZCBwZXJtZWRpYTMtc3BlY2lmaWMgKi8KLSNpZmRlZiBQTTNGQl9VU0VfQUNDRUwKLXN0YXRpYyB2b2lkIHBtM2ZiX3dhaXRfcG0zKHN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8pOwotc3RhdGljIHZvaWQgcG0zZmJfaW5pdF9lbmdpbmUoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbyk7Ci0jaWZkZWYgRkJDT05fSEFTX0NGQjMyCi1zdGF0aWMgdm9pZCBwbTNmYl9jZmIzMl9jbGVhcihzdHJ1Y3QgdmNfZGF0YSAqY29ucCwKLQkJCSAgICAgIHN0cnVjdCBkaXNwbGF5ICpwLAotCQkJICAgICAgaW50IHN5LCBpbnQgc3gsIGludCBoZWlnaHQsIGludCB3aWR0aCk7Ci1zdGF0aWMgdm9pZCBwbTNmYl9jZmIzMl9jbGVhcl9tYXJnaW5zKHN0cnVjdCB2Y19kYXRhICpjb25wLAotCQkJCSAgICAgIHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgYm90dG9tX29ubHkpOwotI2VuZGlmIC8qIEZCQ09OX0hBU19DRkIzMiAqLwotI2lmZGVmIEZCQ09OX0hBU19DRkIxNgotc3RhdGljIHZvaWQgcG0zZmJfY2ZiMTZfY2xlYXIoc3RydWN0IHZjX2RhdGEgKmNvbnAsCi0JCQkgICAgICBzdHJ1Y3QgZGlzcGxheSAqcCwKLQkJCSAgICAgIGludCBzeSwgaW50IHN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOwotc3RhdGljIHZvaWQgcG0zZmJfY2ZiMTZfY2xlYXJfbWFyZ2lucyhzdHJ1Y3QgdmNfZGF0YSAqY29ucCwKLQkJCQkgICAgICBzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IGJvdHRvbV9vbmx5KTsKLSNlbmRpZiAvKiBGQkNPTl9IQVNfQ0ZCMTYgKi8KLSNpZmRlZiBGQkNPTl9IQVNfQ0ZCOAotc3RhdGljIHZvaWQgcG0zZmJfY2ZiOF9jbGVhcihzdHJ1Y3QgdmNfZGF0YSAqY29ucCwKLQkJCSAgICAgc3RydWN0IGRpc3BsYXkgKnAsCi0JCQkgICAgIGludCBzeSwgaW50IHN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOwotc3RhdGljIHZvaWQgcG0zZmJfY2ZiOF9jbGVhcl9tYXJnaW5zKHN0cnVjdCB2Y19kYXRhICpjb25wLAotCQkJCSAgICAgc3RydWN0IGRpc3BsYXkgKnAsIGludCBib3R0b21fb25seSk7Ci0jZW5kaWYgLyogRkJDT05fSEFTX0NGQjggKi8KLSNpZiBkZWZpbmVkKEZCQ09OX0hBU19DRkI4KSB8fCBkZWZpbmVkKEZCQ09OX0hBU19DRkIxNikgfHwgZGVmaW5lZChGQkNPTl9IQVNfQ0ZCMzIpCi1zdGF0aWMgdm9pZCBwbTNmYl9jZmJYX2Jtb3ZlKHN0cnVjdCBkaXNwbGF5ICpwLAotCQkJICAgICBpbnQgc3ksIGludCBzeCwKLQkJCSAgICAgaW50IGR5LCBpbnQgZHgsIGludCBoZWlnaHQsIGludCB3aWR0aCk7Ci1zdGF0aWMgdm9pZCBwbTNmYl9jZmJYX3B1dGMoc3RydWN0IHZjX2RhdGEgKmNvbnAsIHN0cnVjdCBkaXNwbGF5ICpwLAotCQkJICAgIGludCBjLCBpbnQgeXksIGludCB4eCk7Ci1zdGF0aWMgdm9pZCBwbTNmYl9jZmJYX3B1dGNzKHN0cnVjdCB2Y19kYXRhICpjb25wLCBzdHJ1Y3QgZGlzcGxheSAqcCwKLQkJCSAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnMsIGludCBjb3VudCwgaW50IHl5LAotCQkJICAgICBpbnQgeHgpOwotc3RhdGljIHZvaWQgcG0zZmJfY2ZiWF9yZXZjKHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgeHgsIGludCB5eSk7Ci0jZW5kaWYgLyogRkJDT05fSEFTX0NGQjggfHwgRkJDT05fSEFTX0NGQjE2IHx8IEZCQ09OX0hBU19DRkIzMiAqLwotI2VuZGlmIC8qIFBNM0ZCX1VTRV9BQ0NFTCAqLwotLyogcHJlLWluaXQgKi8KLXN0YXRpYyB2b2lkIHBtM2ZiX21vZGVfc2V0dXAoY2hhciAqbW9kZSwgdW5zaWduZWQgbG9uZyBib2FyZF9udW0pOwotc3RhdGljIHZvaWQgcG0zZmJfcGNpaWRfc2V0dXAoY2hhciAqcGNpaWQsIHVuc2lnbmVkIGxvbmcgYm9hcmRfbnVtKTsKLXN0YXRpYyBjaGFyICpwbTNmYl9ib2FyZG51bV9zZXR1cChjaGFyICpvcHRpb25zLCB1bnNpZ25lZCBsb25nICpibik7Ci1zdGF0aWMgdm9pZCBwbTNmYl9yZWFsX3NldHVwKGNoYXIgKm9wdGlvbnMpOwotLyogZmJkZXYgKi8KLXN0YXRpYyBpbnQgcG0zZmJfZW5jb2RlX2ZpeChzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwKLQkJCSAgICBjb25zdCB2b2lkICpwYXIsIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbyk7Ci1zdGF0aWMgaW50IHBtM2ZiX2RlY29kZV92YXIoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgdm9pZCAqcGFyLCBzdHJ1Y3QgZmJfaW5mb19nZW4gKmluZm8pOwotc3RhdGljIHZvaWQgcG0zZmJfZW5jb2RlX2RlcHRoKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBsb25nIGQpOwotc3RhdGljIGludCBwbTNmYl9lbmNvZGVfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJICAgIGNvbnN0IHZvaWQgKnBhciwgc3RydWN0IGZiX2luZm9fZ2VuICppbmZvKTsKLXN0YXRpYyB2b2lkIHBtM2ZiX2dldF9wYXIodm9pZCAqcGFyLCBzdHJ1Y3QgZmJfaW5mb19nZW4gKmluZm8pOwotc3RhdGljIHZvaWQgcG0zZmJfc2V0X3Bhcihjb25zdCB2b2lkICpwYXIsIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbyk7Ci1zdGF0aWMgdm9pZCBwbTNmYl9zZXRfY29sb3Ioc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbywKLQkJCSAgICB1bnNpZ25lZCBjaGFyIHJlZ25vLCB1bnNpZ25lZCBjaGFyIHIsCi0JCQkgICAgdW5zaWduZWQgY2hhciBnLCB1bnNpZ25lZCBjaGFyIGIpOwotc3RhdGljIGludCBwbTNmYl9nZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkICpyZWQsIHVuc2lnbmVkICpncmVlbiwKLQkJCSAgIHVuc2lnbmVkICpibHVlLCB1bnNpZ25lZCAqdHJhbnNwLAotCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotc3RhdGljIGludCBwbTNmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0JCQkgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IHBtM2ZiX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mb19nZW4gKmluZm8pOwotc3RhdGljIHZvaWQgcG0zZmJfc2V0X2Rpc3AoY29uc3Qgdm9pZCAqcGFyLCBzdHJ1Y3QgZGlzcGxheSAqZGlzcCwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbyk7Ci1zdGF0aWMgdm9pZCBwbTNmYl9kZXRlY3Qodm9pZCk7Ci1zdGF0aWMgaW50IHBtM2ZiX3Bhbl9kaXNwbGF5KGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJICAgICBzdHJ1Y3QgZmJfaW5mb19nZW4gKmluZm8pOwotc3RhdGljIGludCBwbTNmYl9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdV9pbnQgY21kLCB1X2xvbmcgYXJnKTsKLQotCi0vKiB0aGUgc3RydWN0IHRoYXQgaG9sZCB0aGVtIHRvZ2V0aGVyICovCi1zdHJ1Y3QgZmJnZW5faHdzd2l0Y2ggcG0zZmJfc3dpdGNoID0gewotCXBtM2ZiX2RldGVjdCwgcG0zZmJfZW5jb2RlX2ZpeCwgcG0zZmJfZGVjb2RlX3ZhciwgcG0zZmJfZW5jb2RlX3ZhciwKLQlwbTNmYl9nZXRfcGFyLCBwbTNmYl9zZXRfcGFyLCBwbTNmYl9nZXRjb2xyZWcsIAotCXBtM2ZiX3Bhbl9kaXNwbGF5LCBwbTNmYl9ibGFuaywgcG0zZmJfc2V0X2Rpc3AKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHBtM2ZiX29wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkuZmJfZ2V0X2ZpeCA9CWZiZ2VuX2dldF9maXgsCi0JLmZiX2dldF92YXIgPQlmYmdlbl9nZXRfdmFyLAotCS5mYl9zZXRfdmFyID0JZmJnZW5fc2V0X3ZhciwKLQkuZmJfZ2V0X2NtYXAgPQlmYmdlbl9nZXRfY21hcCwKLQkuZmJfc2V0X2NtYXAgPQlmYmdlbl9zZXRfY21hcCwKLQkuZmJfc2V0Y29scmVnID0JcG0zZmJfc2V0Y29scmVnLAotCS5mYl9wYW5fZGlzcGxheSA9ZmJnZW5fcGFuX2Rpc3BsYXksCi0JLmZiX2JsYW5rID0JZmJnZW5fYmxhbmssCi0JLmZiX2lvY3RsID0JcG0zZmJfaW9jdGwsCi19OwotCi0jaWZkZWYgUE0zRkJfVVNFX0FDQ0VMCi0jaWZkZWYgRkJDT05fSEFTX0NGQjMyCi1zdGF0aWMgc3RydWN0IGRpc3BsYXlfc3dpdGNoIHBtM2ZiX2NmYjMyID0gewotCWZiY29uX2NmYjMyX3NldHVwLCBwbTNmYl9jZmJYX2Jtb3ZlLCBwbTNmYl9jZmIzMl9jbGVhciwKLQlwbTNmYl9jZmJYX3B1dGMsIHBtM2ZiX2NmYlhfcHV0Y3MsIHBtM2ZiX2NmYlhfcmV2YywKLQlOVUxMIC8qIGN1cnNvcigpICovICwgTlVMTCAvKiBzZXRfZm9udCgpICovICwKLQlwbTNmYl9jZmIzMl9jbGVhcl9tYXJnaW5zLAotCUZPTlRXSURUSFJBTkdFKDEsIDE2KQkvKiB0cnVlIG9ubHkgaWYgYWNjZWxlcmF0ZWQuLi4gKi8KLX07Ci0jZW5kaWYgLyogRkJDT05fSEFTX0NGQjMyICovCi0jaWZkZWYgRkJDT05fSEFTX0NGQjE2Ci1zdGF0aWMgc3RydWN0IGRpc3BsYXlfc3dpdGNoIHBtM2ZiX2NmYjE2ID0gewotCWZiY29uX2NmYjE2X3NldHVwLCBwbTNmYl9jZmJYX2Jtb3ZlLCBwbTNmYl9jZmIxNl9jbGVhciwKLQlwbTNmYl9jZmJYX3B1dGMsIHBtM2ZiX2NmYlhfcHV0Y3MsIHBtM2ZiX2NmYlhfcmV2YywKLQlOVUxMIC8qIGN1cnNvcigpICovICwgTlVMTCAvKiBzZXRfZm9udCgpICovICwKLQlwbTNmYl9jZmIxNl9jbGVhcl9tYXJnaW5zLAotCUZPTlRXSURUSFJBTkdFKDEsIDE2KQkvKiB0cnVlIG9ubHkgaWYgYWNjZWxlcmF0ZWQuLi4gKi8KLX07Ci0jZW5kaWYgLyogRkJDT05fSEFTX0NGQjE2ICovCi0jaWZkZWYgRkJDT05fSEFTX0NGQjgKLXN0YXRpYyBzdHJ1Y3QgZGlzcGxheV9zd2l0Y2ggcG0zZmJfY2ZiOCA9IHsKLQlmYmNvbl9jZmI4X3NldHVwLCBwbTNmYl9jZmJYX2Jtb3ZlLCBwbTNmYl9jZmI4X2NsZWFyLAotCXBtM2ZiX2NmYlhfcHV0YywgcG0zZmJfY2ZiWF9wdXRjcywgcG0zZmJfY2ZiWF9yZXZjLAotCU5VTEwgLyogY3Vyc29yKCkgKi8gLCBOVUxMIC8qIHNldF9mb250KCkgKi8gLAotCXBtM2ZiX2NmYjhfY2xlYXJfbWFyZ2lucywKLQlGT05UV0lEVEhSQU5HRSgxLCAxNikJLyogdHJ1ZSBvbmx5IGlmIGFjY2VsZXJhdGVkLi4uICovCi19OwotI2VuZGlmIC8qIEZCQ09OX0hBU19DRkI4ICovCi0jZW5kaWYgLyogUE0zRkJfVVNFX0FDQ0VMICovCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotLyogKioqKiogY2FyZC1zcGVjaWZpYyBkYXRhICoqKioqICovCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLXN0cnVjdCBwbTNmYl9jYXJkX3RpbWluZ3MgewotCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsgLyogMCBmb3IgbGFzdCB2YWx1ZSAoaS5lLiBkZWZhdWx0KSAqLwotCXN0cnVjdCBwbTNmYl90aW1pbmdzIG1lbXQ7Ci19OwotCi1zdGF0aWMgc3RydWN0IHBtM2ZiX2NhcmRfdGltaW5ncyB0X0Zvcm1hY1Byb0Zvcm1hbmNlM1tdID0gewotCXsgMTYsIHsgMHgwMmUzMTFiOCwgMHgwNjEwMDIwNSwgMHgwODAwMDAwMiwgMHgwMDAwMDA3OSwgMHgwMDAwMDAwMH0gfSwKLQl7IDAsIHsgMHgwMmUzMTFiOCwgMHgwNjEwMDIwNSwgMHgwODAwMDAwMiwgMHgwMDAwMDA3OSwgMHgwMDAwMDAwMH0gfSAvKiBmcm9tIDE2IE1CIFBGMyAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBwbTNmYl9jYXJkX3RpbWluZ3MgdF9BcHBpYW5KZXJvbmltbzIwMDBbXSA9IHsKLQl7IDMyLCB7IDB4MDJlMzExQjgsIDB4MDc0MjQ5MDUsIDB4MGMwMDAwMDMsIDB4MDAwMDAwNjEsIDB4MDAwMDAwMDB9IH0sCi0JeyAwLCB7IDB4MDJlMzExQjgsIDB4MDc0MjQ5MDUsIDB4MGMwMDAwMDMsIDB4MDAwMDAwNjEsIDB4MDAwMDAwMDB9IH0gLyogZnJvbSAzMk1CIEoyMDAwICovCi19OwotCi1zdGF0aWMgc3RydWN0IHBtM2ZiX2NhcmRfdGltaW5ncyB0XzNETGFic094eWdlblZYMVtdID0gewotCXsgMzIsIHsgMHgzMGUzMTFiOCwgMHgwODUwMTIwNCwgMHgwODAwMDAwMiwgMHgwMDAwMDA2YiwgMHgwMDAwMDAwMH0gfSwKLQl7IDAsIHsgMHgzMGUzMTFiOCwgMHgwODUwMTIwNCwgMHgwODAwMDAwMiwgMHgwMDAwMDA2YiwgMHgwMDAwMDAwMH0gfSAvKiBmcm9tIDMyTUIgVlgxICovCi19OwotCi1zdGF0aWMgc3RydWN0IHsKLQkJY2hhciBjYXJkbmFtZVszMl07IC8qIHJlY29nbml6ZWQgY2FyZCBuYW1lICovCi0JCXUxNiBzdWJ2ZW5kb3I7IC8qIHN1YnZlbmRvciBvZiB0aGUgY2FyZCAqLwotCQl1MTYgc3ViZGV2aWNlOyAvKiBzdWJkZXZpY2Ugb2YgdGhlIGNhcmQgKi8KLQkJdTggIGZ1bmM7IC8qIGZ1bmN0aW9uIG9mIHRoZSBjYXJkIHRvIHdoaWNoIHRoZSBleHRyYSBpbml0IGFwcGx5ICovCi0JCXZvaWQgKCpzcGVjaWZpY19zZXR1cCkoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbyk7IC8qIGNhcmQvZnVuYyBzcGVjaWZpYyBzZXR1cCwgZG9uZSBiZWZvcmUgX2FueV8gRkIgYWNjZXNzICovCi0Jc3RydWN0IHBtM2ZiX2NhcmRfdGltaW5ncyAqY19tZW10OyAvKiBkZWZhdWxzIHRpbWluZ3MgZm9yIHRoZSBib2FyZHMgKi8KLX0gY2FyZGJhc2VbXSA9IHsKLQl7ICJVbmtub3duIFBlcm1lZGlhMyBib2FyZCIsIDB4RkZGRiwgMHhGRkZGLCAweEZGLCBOVUxMLCBOVUxMIH0sCi0JeyAiQXBwaWFuIEplcm9uaW1vIDIwMDAgaGVhZCAxIiwgMHgxMDk3LCAweDNkMzIsIDEsIE5VTEwsCi0JICB0X0FwcGlhbkplcm9uaW1vMjAwMAotCX0sCi0JeyAiQXBwaWFuIEplcm9uaW1vIDIwMDAgaGVhZCAyIiwgMHgxMDk3LCAweDNkMzIsIDIsIHBtM2ZiX2oyMDAwX3NldHVwLAotCSAgdF9BcHBpYW5KZXJvbmltbzIwMDAKLQl9LAotCXsgIkZvcm1hYyBQcm9Gb3JtYW5jZSAzIiwgUENJX1ZFTkRPUl9JRF8zRExBQlMsIDB4MDAwYSwgMCwgTlVMTCwgLyogRm9ybWFjIHVzZSAzRExhYnMgSUQgPyE/ICovCi0JICB0X0Zvcm1hY1Byb0Zvcm1hbmNlMwotCX0sCi0JeyAiM0RMYWJzIFBlcm1lZGlhMyBDcmVhdGUhIiwgUENJX1ZFTkRPUl9JRF8zRExBQlMsIDB4MDEyNywgMCwgTlVMTCwgTlVMTCB9LAotCXsgIjNETGFicyBPeHlnZW4gVlgxIFBDSSIsIFBDSV9WRU5ET1JfSURfM0RMQUJTLCAweDAxMjEsIDAsIE5VTEwsCi0JICB0XzNETGFic094eWdlblZYMQotCX0sCi0JeyAiM0RMYWJzIE94eWdlbiBWWDEgQUdQIiwgUENJX1ZFTkRPUl9JRF8zRExBQlMsIDB4MDEyNSwgMCwgTlVMTCwgTlVMTCB9LAotCXsgIjNETGFicyBPeHlnZW4gVlgxLTE2IEFHUCIsIFBDSV9WRU5ET1JfSURfM0RMQUJTLCAweDAxNDAsIDAsIE5VTEwsIE5VTEwgfSwKLQl7ICIzRExhYnMgT3h5Z2VuIFZYMS0xNjAwU1cgUENJIiwgUENJX1ZFTkRPUl9JRF8zRExBQlMsIDB4MDgwMCwgMCwgTlVMTCwgTlVMTCB9LAotCXsgIlwwIiwgMHgwLCAweDAsIDAsIE5VTEwsIE5VTEwgfQotfTsKLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotLyogKioqKiogY2FyZC1zcGVjaWZpYyBmdW5jdGlvbiAqKioqKiAqLwotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotc3RhdGljIHZvaWQgcG0zZmJfajIwMDBfc2V0dXAoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbykKLXsgICAgICAgLyogdGhlIGFwcGlhbiBqMjAwMCByZXF1aXJlIG1vcmUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNlY29uZCBoZWFkICovCi0JLyogbF9mYl9pbmZvIG11c3QgcG9pbnQgdG8gdGhlIF9zZWNvbmRfIGhlYWQgb2YgdGhlIEoyMDAwICovCi0JCi0JRFRSQUNFOwotCi0JbF9mYl9pbmZvLT5tZW10ID0gdF9BcHBpYW5KZXJvbmltbzIwMDBbMF0ubWVtdDsgLyogMzIgTUIsIGZpcnN0IGFuZCBvbmx5IGoyMDAwID8gKi8KLQkKLQlwbTNmYl93cml0ZV9tZW1vcnlfdGltaW5ncyhsX2ZiX2luZm8pOworc3RhdGljIGlubGluZSB1MzIgUE0zX1JFQURfUkVHKHN0cnVjdCBwbTNfcGFyICpwYXIsIHMzMiBvZmYpCit7CisJcmV0dXJuIGZiX3JlYWRsKHBhci0+dl9yZWdzICsgb2ZmKTsKIH0KIAotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0vKiAqKioqKiBwZXJtZWRpYTMtc3BlY2lmaWMgZnVuY3Rpb24gKioqKiogKi8KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotc3RhdGljIHBtM2ZiX3RpbWluZ19yZXN1bHQgcG0zZmJfcHJlc2VydmVfbWVtb3J5X3RpbWluZ3Moc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbykKK3N0YXRpYyBpbmxpbmUgdm9pZCBQTTNfV1JJVEVfUkVHKHN0cnVjdCBwbTNfcGFyICpwYXIsIHMzMiBvZmYsIHUzMiB2KQogewotCWxfZmJfaW5mby0+bWVtdC5jYXBzID0gUE0zX1JFQURfUkVHKFBNM0xvY2FsTWVtQ2Fwcyk7Ci0JbF9mYl9pbmZvLT5tZW10LnRpbWluZ3MgPSBQTTNfUkVBRF9SRUcoUE0zTG9jYWxNZW1UaW1pbmdzKTsKLQlsX2ZiX2luZm8tPm1lbXQuY29udHJvbCA9IFBNM19SRUFEX1JFRyhQTTNMb2NhbE1lbUNvbnRyb2wpOwotCWxfZmJfaW5mby0+bWVtdC5yZWZyZXNoID0gUE0zX1JFQURfUkVHKFBNM0xvY2FsTWVtUmVmcmVzaCk7Ci0JbF9mYl9pbmZvLT5tZW10LnBvd2VyZG93biA9IFBNM19SRUFEX1JFRyhQTTNMb2NhbE1lbVBvd2VyRG93bik7Ci0KLQlpZiAoKGxfZmJfaW5mby0+bWVtdC5jYXBzID09IFBNM0ZCX1VOS05PV05fVElNSU5HX1ZBTFVFKSB8fAotCSAgICAobF9mYl9pbmZvLT5tZW10LnRpbWluZ3MgPT0gUE0zRkJfVU5LTk9XTl9USU1JTkdfVkFMVUUpIHx8Ci0JICAgIChsX2ZiX2luZm8tPm1lbXQuY29udHJvbCA9PSBQTTNGQl9VTktOT1dOX1RJTUlOR19WQUxVRSkgfHwKLQkgICAgKGxfZmJfaW5mby0+bWVtdC5yZWZyZXNoID09IFBNM0ZCX1VOS05PV05fVElNSU5HX1ZBTFVFKSB8fAotCSAgICAobF9mYl9pbmZvLT5tZW10LnBvd2VyZG93biA9PSBQTTNGQl9VTktOT1dOX1RJTUlOR19WQUxVRSkpCi0JewotCQlwcmludGsoS0VSTl9FUlIgInBtM2ZiOiBpbnZhbGlkIG1lbW9yeSB0aW1pbmdzIGluIHBlcm1lZGlhMyBib2FyZCAjJWxkXG4iLCBsX2ZiX2luZm8tPmJvYXJkX251bSk7Ci0JCXJldHVybihwbTNmYl90cnlfbWVtb3J5X3RpbWluZ3MobF9mYl9pbmZvKSk7Ci0JfQotCXJldHVybihwbTNmYl90aW1pbmdfb2spOworCWZiX3dyaXRlbCh2LCBwYXItPnZfcmVncyArIG9mZik7CiB9CiAKLXN0YXRpYyBwbTNmYl90aW1pbmdfcmVzdWx0IHBtM2ZiX3RyeV9tZW1vcnlfdGltaW5ncyhzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvKQorc3RhdGljIGlubGluZSB2b2lkIFBNM19XQUlUKHN0cnVjdCBwbTNfcGFyICpwYXIsIHUzMiBuKQogewotCWlmIChjYXJkYmFzZVtsX2ZiX2luZm8tPmJvYXJkX3R5cGVdLmNfbWVtdCkKLQl7Ci0JCWludCBpID0gMCwgZG9uZSA9IDA7Ci0JCXdoaWxlICghZG9uZSkKLQkJewotCQkJaWYgKChjYXJkYmFzZVtsX2ZiX2luZm8tPmJvYXJkX3R5cGVdLmNfbWVtdFtpXS5tZW1zaXplID09IGxfZmJfaW5mby0+ZmJfc2l6ZSkKLQkJCSAgICB8fCAhKGNhcmRiYXNlW2xfZmJfaW5mby0+Ym9hcmRfdHlwZV0uY19tZW10W2ldLm1lbXNpemUpKQotCQkJeyAvKiB3aWxsIHVzZSB0aGUgMC1zaXplZCB0aW1pbmdzIGJ5IGRlZmF1bHQgKi8KLQkJCQlkb25lID0gMTsKLQkJCQlsX2ZiX2luZm8tPm1lbXQgPSBjYXJkYmFzZVtsX2ZiX2luZm8tPmJvYXJkX3R5cGVdLmNfbWVtdFtpXS5tZW10OwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgICJwbTNmYjogdHJ5aW5nIHRvIHVzZSBwcmVkZWZpbmVkIG1lbW9yeSB0aW1pbmdzIGZvciBwZXJtZWRpYTMgYm9hcmQgIyVsZCAoJXMsICVsZCBNQilcbiIsCi0JCQkJICAgICAgIGxfZmJfaW5mby0+Ym9hcmRfbnVtLAotCQkJCSAgICAgICBjYXJkYmFzZVtsX2ZiX2luZm8tPmJvYXJkX3R5cGVdLmNhcmRuYW1lLAotCQkJCSAgICAgICBjYXJkYmFzZVtsX2ZiX2luZm8tPmJvYXJkX3R5cGVdLmNfbWVtdFtpXS5tZW1zaXplKTsKLQkJCQlwbTNmYl93cml0ZV9tZW1vcnlfdGltaW5ncyhsX2ZiX2luZm8pOwotCQkJCXJldHVybihwbTNmYl90aW1pbmdfcmV0cnkpOwotCQkJfQotCQkJaSsrOwotCQl9Ci0JfSBlbHNlCi0JCXJldHVybihwbTNmYl90aW1pbmdfcHJvYmxlbSk7Ci0JcmV0dXJuKHBtM2ZiX3RpbWluZ19vayk7CisJd2hpbGUgKFBNM19SRUFEX1JFRyhwYXIsIFBNM0luRklGT1NwYWNlKSA8IG4pOwogfQogCi1zdGF0aWMgdm9pZCBwbTNmYl93cml0ZV9tZW1vcnlfdGltaW5ncyhzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvKQorc3RhdGljIGlubGluZSB2b2lkIFBNM19XUklURV9EQUNfUkVHKHN0cnVjdCBwbTNfcGFyICpwYXIsIHVuc2lnbmVkIHIsIHU4IHYpCiB7Ci0JdW5zaWduZWQgY2hhciBtLCBuLCBwOwotCXVuc2lnbmVkIGxvbmcgY2xvY2t1c2VkOwotCQotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNMb2NhbE1lbUNhcHMsIGxfZmJfaW5mby0+bWVtdC5jYXBzKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zTG9jYWxNZW1UaW1pbmdzLCBsX2ZiX2luZm8tPm1lbXQudGltaW5ncyk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0xvY2FsTWVtQ29udHJvbCwgbF9mYl9pbmZvLT5tZW10LmNvbnRyb2wpOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNMb2NhbE1lbVJlZnJlc2gsIGxfZmJfaW5mby0+bWVtdC5yZWZyZXNoKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zTG9jYWxNZW1Qb3dlckRvd24sIGxfZmJfaW5mby0+bWVtdC5wb3dlcmRvd24pOwotCi0JY2xvY2t1c2VkID0KLQkgICAgcG0zZmJfQ2FsY3VsYXRlQ2xvY2sobF9mYl9pbmZvLCAyICogMTA1MDAwLCBQTTNfUkVGX0NMT0NLLCAmbSwKLQkJCQkgJm4sICZwKTsKLQotCVBNM19XUklURV9EQUNfUkVHKFBNM1JEX0tDbGtQcmVTY2FsZSwgbSk7Ci0JUE0zX1dSSVRFX0RBQ19SRUcoUE0zUkRfS0Nsa0ZlZWRiYWNrU2NhbGUsIG4pOwotCVBNM19XUklURV9EQUNfUkVHKFBNM1JEX0tDbGtQb3N0U2NhbGUsIHApOwotCVBNM19XUklURV9EQUNfUkVHKFBNM1JEX0tDbGtDb250cm9sLAotCQkJICBQTTNSRF9LQ2xrQ29udHJvbF9TVEFURV9SVU4gfAotCQkJICBQTTNSRF9LQ2xrQ29udHJvbF9TT1VSQ0VfUExMIHwKLQkJCSAgUE0zUkRfS0Nsa0NvbnRyb2xfRU5BQkxFKTsKLQlQTTNfV1JJVEVfREFDX1JFRyhQTTNSRF9NQ2xrQ29udHJvbCwKLQkJCSAgUE0zUkRfTUNsa0NvbnRyb2xfU1RBVEVfUlVOIHwKLQkJCSAgUE0zUkRfTUNsa0NvbnRyb2xfU09VUkNFX0tDTEsgfAotCQkJICBQTTNSRF9NQ2xrQ29udHJvbF9FTkFCTEUpOwotCVBNM19XUklURV9EQUNfUkVHKFBNM1JEX1NDbGtDb250cm9sLAotCQkJICBQTTNSRF9TQ2xrQ29udHJvbF9TVEFURV9SVU4gfAotCQkJICBQTTNSRF9TQ2xrQ29udHJvbF9TT1VSQ0VfUENMSyB8Ci0JCQkgIFBNM1JEX1NDbGtDb250cm9sX0VOQUJMRSk7CisJUE0zX1dBSVQocGFyLCAzKTsKKwlQTTNfV1JJVEVfUkVHKHBhciwgUE0zUkRfSW5kZXhIaWdoLCAociA+PiA4KSAmIDB4ZmYpOworCVBNM19XUklURV9SRUcocGFyLCBQTTNSRF9JbmRleExvdywgciAmIDB4ZmYpOworCXdtYigpOworCVBNM19XUklURV9SRUcocGFyLCBQTTNSRF9JbmRleGVkRGF0YSwgdik7CisJd21iKCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBtM2ZiX3JlYWRfZGFjX3JlZyhzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvLAotCQkJCQl1bnNpZ25lZCBsb25nIHIpCitzdGF0aWMgaW5saW5lIHZvaWQgcG0zZmJfc2V0X2NvbG9yKHN0cnVjdCBwbTNfcGFyICpwYXIsIHVuc2lnbmVkIGNoYXIgcmVnbm8sCisJCQl1bnNpZ25lZCBjaGFyIHIsIHVuc2lnbmVkIGNoYXIgZywgdW5zaWduZWQgY2hhciBiKQogewotCURBU1NFUlQoKGxfZmJfaW5mby0+dklPQmFzZSAhPSAodW5zaWduZWQgY2hhciAqKSAoLTEpKSwKLQkJImxfZmJfaW5mby0+dklPQmFzZSBtYXBwZWQgaW4gcmVhZCBkYWMgcmVnXG4iKTsKLQlQTTNfU0VUX0lOREVYKHIpOwotCW1iKCk7Ci0JcmV0dXJuIChQTTNfUkVBRF9SRUcoUE0zUkRfSW5kZXhlZERhdGEpKTsKKwlQTTNfV0FJVChwYXIsIDQpOworCVBNM19XUklURV9SRUcocGFyLCBQTTNSRF9QYWxldHRlV3JpdGVBZGRyZXNzLCByZWdubyk7CisJd21iKCk7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM1JEX1BhbGV0dGVEYXRhLCByKTsKKwl3bWIoKTsKKwlQTTNfV1JJVEVfUkVHKHBhciwgUE0zUkRfUGFsZXR0ZURhdGEsIGcpOworCXdtYigpOworCVBNM19XUklURV9SRUcocGFyLCBQTTNSRF9QYWxldHRlRGF0YSwgYik7CisJd21iKCk7Cit9CisKK3N0YXRpYyB2b2lkIHBtM2ZiX2NsZWFyX2NvbG9ybWFwKHN0cnVjdCBwbTNfcGFyICpwYXIsCisJCQl1bnNpZ25lZCBjaGFyIHIsIHVuc2lnbmVkIGNoYXIgZywgdW5zaWduZWQgY2hhciBiKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDI1NiA7IGkrKykKKwkJcG0zZmJfc2V0X2NvbG9yKHBhciwgaSwgciwgZywgYik7CisKIH0KIAogLyogQ2FsY3VsYXRpbmcgdmFyaW91cyBjbG9jayBwYXJhbWV0ZXIgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBtM2ZiX0NhbGN1bGF0ZUNsb2NrKHN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8sIHVuc2lnbmVkIGxvbmcgcmVxY2xvY2ssCS8qIEluIGtIeiB1bml0cyAqLwotCQkJCQkgIHVuc2lnbmVkIGxvbmcgcmVmY2xvY2ssCS8qIEluIGtIeiB1bml0cyAqLwotCQkJCQkgIHVuc2lnbmVkIGNoYXIgKnByZXNjYWxlLAkvKiBDbGtQcmVTY2FsZSAqLwotCQkJCQkgIHVuc2lnbmVkIGNoYXIgKmZlZWRiYWNrLAkvKiBDbGtGZWVkQmFja1NjYWxlICovCi0JCQkJCSAgdW5zaWduZWQgY2hhciAqcG9zdHNjYWxlCi0JCQkJCSAgLyogQ2xrUG9zdFNjYWxlICovICkKK3N0YXRpYyB2b2lkIHBtM2ZiX2NhbGN1bGF0ZV9jbG9jayh1bnNpZ25lZCBsb25nIHJlcWNsb2NrLAorCQkJCXVuc2lnbmVkIGNoYXIgKnByZXNjYWxlLAorCQkJCXVuc2lnbmVkIGNoYXIgKmZlZWRiYWNrLAorCQkJCXVuc2lnbmVkIGNoYXIgKnBvc3RzY2FsZSkKIHsKIAlpbnQgZiwgcHJlLCBwb3N0OwogCXVuc2lnbmVkIGxvbmcgZnJlcTsKIAlsb25nIGZyZXFlcnIgPSAxMDAwOwotCXVuc2lnbmVkIGxvbmcgYWN0dWFsY2xvY2sgPSAwOwotCi0JRFRSQUNFOworCWxvbmcgY3VycmVycjsKIAogCWZvciAoZiA9IDE7IGYgPCAyNTY7IGYrKykgewogCQlmb3IgKHByZSA9IDE7IHByZSA8IDI1NjsgcHJlKyspIHsKIAkJCWZvciAocG9zdCA9IDA7IHBvc3QgPCA1OyBwb3N0KyspIHsKLQkJCQlmcmVxID0KLQkJCQkgICAgKCgyICogcmVmY2xvY2sgKiBmKSAvCi0JCQkJICAgICAocHJlICogKDEgPDwgcG9zdCkpKTsKLQkJCQlpZiAoKHJlcWNsb2NrID4gZnJlcSAtIGZyZXFlcnIpCi0JCQkJICAgICYmIChyZXFjbG9jayA8IGZyZXEgKyBmcmVxZXJyKSkgewotCQkJCQlmcmVxZXJyID0KLQkJCQkJICAgIChyZXFjbG9jayA+Ci0JCQkJCSAgICAgZnJlcSkgPyByZXFjbG9jayAtCi0JCQkJCSAgICBmcmVxIDogZnJlcSAtIHJlcWNsb2NrOworCQkJCWZyZXEgPSAoKDIqUE0zX1JFRl9DTE9DSyAqIGYpID4+IHBvc3QpIC8gcHJlOworCQkJCWN1cnJlcnIgPSAocmVxY2xvY2sgPiBmcmVxKQorCQkJCQk/IHJlcWNsb2NrIC0gZnJlcQorCQkJCQk6IGZyZXEgLSByZXFjbG9jazsKKwkJCQlpZiAoY3VycmVyciA8IGZyZXFlcnIpIHsKKwkJCQkJZnJlcWVyciA9IGN1cnJlcnI7CiAJCQkJCSpmZWVkYmFjayA9IGY7CiAJCQkJCSpwcmVzY2FsZSA9IHByZTsKIAkJCQkJKnBvc3RzY2FsZSA9IHBvc3Q7Ci0JCQkJCWFjdHVhbGNsb2NrID0gZnJlcTsKIAkJCQl9CiAJCQl9CiAJCX0KIAl9Ci0KLQlyZXR1cm4gKGFjdHVhbGNsb2NrKTsKIH0KIAotc3RhdGljIGludCBwbTNmYl9TaGlmdGJwcChzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvLAotCQkJICB1bnNpZ25lZCBsb25nIGRlcHRoLCBpbnQgdikKK3N0YXRpYyBpbmxpbmUgaW50IHBtM2ZiX2RlcHRoKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQogewotCURUUkFDRTsKLQkKLQlzd2l0Y2ggKGRlcHRoKSB7CisJaWYgKCB2YXItPmJpdHNfcGVyX3BpeGVsID09IDE2ICkKKwkJcmV0dXJuIHZhci0+cmVkLmxlbmd0aCArIHZhci0+Z3JlZW4ubGVuZ3RoCisJCQkrIHZhci0+Ymx1ZS5sZW5ndGg7CisKKwlyZXR1cm4gdmFyLT5iaXRzX3Blcl9waXhlbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG0zZmJfc2hpZnRfYnBwKHVuc2lnbmVkIGJwcCwgaW50IHYpCit7CisJc3dpdGNoIChicHApIHsKIAljYXNlIDg6CiAJCXJldHVybiAodiA+PiA0KTsKLQljYXNlIDEyOgotCWNhc2UgMTU6CiAJY2FzZSAxNjoKIAkJcmV0dXJuICh2ID4+IDMpOwogCWNhc2UgMzI6CiAJCXJldHVybiAodiA+PiAyKTsKIAl9Ci0JRFBSSU5USygxLCAiVW5zdXBwb3J0ZWQgZGVwdGggJWxkXG4iLCBkZXB0aCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIGludCBwbTNmYl9VbnNoaWZ0YnBwKHN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8sCi0JCQkgICAgdW5zaWduZWQgbG9uZyBkZXB0aCwgaW50IHYpCi17Ci0JRFRSQUNFOwotCi0Jc3dpdGNoIChkZXB0aCkgewotCWNhc2UgODoKLQkJcmV0dXJuICh2IDw8IDQpOwotCWNhc2UgMTI6CQotCWNhc2UgMTU6Ci0JY2FzZSAxNjoKLQkJcmV0dXJuICh2IDw8IDMpOwotCWNhc2UgMzI6Ci0JCXJldHVybiAodiA8PCAyKTsKLQl9Ci0JRFBSSU5USygxLCAiVW5zdXBwb3J0ZWQgZGVwdGggJWxkXG4iLCBkZXB0aCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQgcG0zZmJfbWFwSU8oc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbykKLXsKLQlEVFJBQ0U7Ci0KLQlsX2ZiX2luZm8tPnZJT0Jhc2UgPQotCSAgICBpb3JlbWFwKCh1bnNpZ25lZCBsb25nKSBsX2ZiX2luZm8tPnBJT0Jhc2UsIFBNM19SRUdTX1NJWkUpOwotCWxfZmJfaW5mby0+dl9mYiA9Ci0JICAgIGlvcmVtYXAoKHVuc2lnbmVkIGxvbmcpIGxfZmJfaW5mby0+cF9mYiwgbF9mYl9pbmZvLT5mYl9zaXplKTsKLQlEUFJJTlRLKDIsICJJTyBtYXBwaW5nIDogSU9CYXNlICVseCAvICVseCwgZmIgJWx4IC8gJWx4XG4iLAotCQkodW5zaWduZWQgbG9uZykgbF9mYl9pbmZvLT5wSU9CYXNlLAotCQkodW5zaWduZWQgbG9uZykgbF9mYl9pbmZvLT52SU9CYXNlLAotCQkodW5zaWduZWQgbG9uZykgbF9mYl9pbmZvLT5wX2ZiLAotCQkodW5zaWduZWQgbG9uZykgbF9mYl9pbmZvLT52X2ZiKTsKLX0KLQotc3RhdGljIHZvaWQgcG0zZmJfdW5tYXBJTyhzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvKQotewotCURUUkFDRTsKLQotCWlvdW5tYXAobF9mYl9pbmZvLT52SU9CYXNlKTsKLQlpb3VubWFwKGxfZmJfaW5mby0+dl9mYik7Ci0JbF9mYl9pbmZvLT52SU9CYXNlID0gKHVuc2lnbmVkIGNoYXIgKikgLTE7Ci0JbF9mYl9pbmZvLT52X2ZiID0gKHVuc2lnbmVkIGNoYXIgKikgLTE7Ci19Ci0KLSNpZiBkZWZpbmVkKFBNM0ZCX01BU1RFUl9ERUJVRykgJiYgKFBNM0ZCX01BU1RFUl9ERUJVRyA+PSAyKQotc3RhdGljIHZvaWQgcG0zZmJfc2hvd19jdXJfbW9kZShzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvKQotewotCURQUklOVEsoMiwgIlBNM0FwZXJ0dXJlMDogMHglMDh4XG4iLCBQTTNfUkVBRF9SRUcoUE0zQXBlcnR1cmUwKSk7Ci0JRFBSSU5USygyLCAiUE0zQXBlcnR1cmUxOiAweCUwOHhcbiIsIFBNM19SRUFEX1JFRyhQTTNBcGVydHVyZTEpKTsKLQlEUFJJTlRLKDIsICJQTTNCeUFwZXJ0dXJlMU1vZGU6IDB4JTA4eFxuIiwKLQkJUE0zX1JFQURfUkVHKFBNM0J5QXBlcnR1cmUxTW9kZSkpOwotCURQUklOVEsoMiwgIlBNM0J5QXBlcnR1cmUyTW9kZTogMHglMDh4XG4iLAotCQlQTTNfUkVBRF9SRUcoUE0zQnlBcGVydHVyZTJNb2RlKSk7Ci0JRFBSSU5USygyLCAiUE0zQ2hpcENvbmZpZzogMHglMDh4XG4iLCBQTTNfUkVBRF9SRUcoUE0zQ2hpcENvbmZpZykpOwotCURQUklOVEsoMiwgIlBNM0ZJRk9EaXM6IDB4JTA4eFxuIiwgUE0zX1JFQURfUkVHKFBNM0ZJRk9EaXMpKTsKLQlEUFJJTlRLKDIsICJQTTNIVG90YWw6IDB4JTA4eFxuIiwgUE0zX1JFQURfUkVHKFBNM0hUb3RhbCkpOwotCURQUklOVEsoMiwgIlBNM0hiRW5kOiAweCUwOHhcbiIsIFBNM19SRUFEX1JFRyhQTTNIYkVuZCkpOwotCURQUklOVEsoMiwgIlBNM0hnRW5kOiAweCUwOHhcbiIsIFBNM19SRUFEX1JFRyhQTTNIZ0VuZCkpOwotCURQUklOVEsoMiwgIlBNM0hzRW5kOiAweCUwOHhcbiIsIFBNM19SRUFEX1JFRyhQTTNIc0VuZCkpOwotCURQUklOVEsoMiwgIlBNM0hzU3RhcnQ6IDB4JTA4eFxuIiwgUE0zX1JFQURfUkVHKFBNM0hzU3RhcnQpKTsKLQlEUFJJTlRLKDIsICJQTTNNZW1CeXBhc3NXcml0ZU1hc2s6IDB4JTA4eFxuIiwKLQkJUE0zX1JFQURfUkVHKFBNM01lbUJ5cGFzc1dyaXRlTWFzaykpOwotCURQUklOVEsoMiwgIlBNM1JEX0luZGV4Q29udHJvbDogMHglMDh4XG4iLAotCQlQTTNfUkVBRF9SRUcoUE0zUkRfSW5kZXhDb250cm9sKSk7Ci0JRFBSSU5USygyLCAiUE0zU2NyZWVuQmFzZTogMHglMDh4XG4iLCBQTTNfUkVBRF9SRUcoUE0zU2NyZWVuQmFzZSkpOwotCURQUklOVEsoMiwgIlBNM1NjcmVlblN0cmlkZTogMHglMDh4XG4iLAotCQlQTTNfUkVBRF9SRUcoUE0zU2NyZWVuU3RyaWRlKSk7Ci0JRFBSSU5USygyLCAiUE0zVkNsa0N0bDogMHglMDh4XG4iLCBQTTNfUkVBRF9SRUcoUE0zVkNsa0N0bCkpOwotCURQUklOVEsoMiwgIlBNM1ZUb3RhbDogMHglMDh4XG4iLCBQTTNfUkVBRF9SRUcoUE0zVlRvdGFsKSk7Ci0JRFBSSU5USygyLCAiUE0zVmJFbmQ6IDB4JTA4eFxuIiwgUE0zX1JFQURfUkVHKFBNM1ZiRW5kKSk7Ci0JRFBSSU5USygyLCAiUE0zVmlkZW9Db250cm9sOiAweCUwOHhcbiIsCi0JCVBNM19SRUFEX1JFRyhQTTNWaWRlb0NvbnRyb2wpKTsKLQlEUFJJTlRLKDIsICJQTTNWc0VuZDogMHglMDh4XG4iLCBQTTNfUkVBRF9SRUcoUE0zVnNFbmQpKTsKLQlEUFJJTlRLKDIsICJQTTNWc1N0YXJ0OiAweCUwOHhcbiIsIFBNM19SRUFEX1JFRyhQTTNWc1N0YXJ0KSk7Ci0KLQlEUFJJTlRLKDIsICJQTTNSRF9Db2xvckZvcm1hdDogJWxkXG4iLAotCQlQTTNfUkVBRF9EQUNfUkVHKFBNM1JEX0NvbG9yRm9ybWF0KSk7Ci0JRFBSSU5USygyLCAiUE0zUkRfREFDQ29udHJvbDogJWxkXG4iLAotCQlQTTNfUkVBRF9EQUNfUkVHKFBNM1JEX0RBQ0NvbnRyb2wpKTsKLQlEUFJJTlRLKDIsICJQTTNSRF9EQ2xrMEZlZWRiYWNrU2NhbGU6ICVsZFxuIiwKLQkJUE0zX1JFQURfREFDX1JFRyhQTTNSRF9EQ2xrMEZlZWRiYWNrU2NhbGUpKTsKLQlEUFJJTlRLKDIsICJQTTNSRF9EQ2xrMFBvc3RTY2FsZTogJWxkXG4iLAotCQlQTTNfUkVBRF9EQUNfUkVHKFBNM1JEX0RDbGswUG9zdFNjYWxlKSk7Ci0JRFBSSU5USygyLCAiUE0zUkRfRENsazBQcmVTY2FsZTogJWxkXG4iLAotCQlQTTNfUkVBRF9EQUNfUkVHKFBNM1JEX0RDbGswUHJlU2NhbGUpKTsKLQlEUFJJTlRLKDIsICJbbm90IHNldF0gUE0zUkRfSW5kZXhDb250cm9sOiAlbGRcbiIsCi0JCVBNM19SRUFEX0RBQ19SRUcoUE0zUkRfSW5kZXhDb250cm9sKSk7Ci0JRFBSSU5USygyLCAiUE0zUkRfTWlzY0NvbnRyb2w6ICVsZFxuIiwKLQkJUE0zX1JFQURfREFDX1JFRyhQTTNSRF9NaXNjQ29udHJvbCkpOwotCURQUklOVEsoMiwgIlBNM1JEX1BpeGVsU2l6ZTogJWxkXG4iLAotCQlQTTNfUkVBRF9EQUNfUkVHKFBNM1JEX1BpeGVsU2l6ZSkpOwotCURQUklOVEsoMiwgIlBNM1JEX1N5bmNDb250cm9sOiAlbGRcbiIsCi0JCVBNM19SRUFEX0RBQ19SRUcoUE0zUkRfU3luY0NvbnRyb2wpKTsKLX0KLQotI2VuZGlmIC8qIGRlZmluZWQoUE0zRkJfTUFTVEVSX0RFQlVHKSAmJiAoUE0zRkJfTUFTVEVSX0RFQlVHID49IDIpICovCi1zdGF0aWMgdm9pZCBwbTNmYl9zaG93X2N1cl90aW1pbmcoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbykKLXsKLQl1MTYgc3VidmVuZG9yLCBzdWJkZXZpY2U7Ci0KLQlpZiAoKCFwY2lfcmVhZF9jb25maWdfd29yZAotCSAgICAgKGxfZmJfaW5mby0+ZGV2LCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwgJnN1YnZlbmRvcikpCi0JICAgICYmCi0JICAgICghcGNpX3JlYWRfY29uZmlnX3dvcmQKLQkgICAgIChsX2ZiX2luZm8tPmRldiwgUENJX1NVQlNZU1RFTV9JRCwgJnN1YmRldmljZSkpKSB7Ci0JCS8qIHdlbGwsIG5vdGhpbmcuLi4gKi8KLQl9IGVsc2UgewotCQlzdWJ2ZW5kb3IgPSBzdWJkZXZpY2UgPSAodTE2KS0xOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gInBtM2ZiOiBtZW1vcnkgdGltaW5ncyBmb3IgYm9hcmQgIyVsZCAoc3VidmVuZG9yOiAweCVoeCwgc3ViZGV2aWNlOiAweCVoeClcbiIsIGxfZmJfaW5mby0+Ym9hcmRfbnVtLCBzdWJ2ZW5kb3IsIHN1YmRldmljZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiIFBNM0xvY2FsTWVtQ2FwczogMHglMDh4XG4iLAotCSAgICAgICBQTTNfUkVBRF9SRUcoUE0zTG9jYWxNZW1DYXBzKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiIFBNM0xvY2FsTWVtVGltaW5nczogMHglMDh4XG4iLAotCSAgICAgICBQTTNfUkVBRF9SRUcoUE0zTG9jYWxNZW1UaW1pbmdzKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiIFBNM0xvY2FsTWVtQ29udHJvbDogMHglMDh4XG4iLAotCSAgICAgICBQTTNfUkVBRF9SRUcoUE0zTG9jYWxNZW1Db250cm9sKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiIFBNM0xvY2FsTWVtUmVmcmVzaDogMHglMDh4XG4iLAotCSAgICAgICBQTTNfUkVBRF9SRUcoUE0zTG9jYWxNZW1SZWZyZXNoKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiIFBNM0xvY2FsTWVtUG93ZXJEb3duOiAweCUwOHhcbiIsCi0JICAgICAgIFBNM19SRUFEX1JFRyhQTTNMb2NhbE1lbVBvd2VyRG93bikpOworCURQUklOVEsoIlVuc3VwcG9ydGVkIGRlcHRoICV1XG4iLCBicHApOworCXJldHVybiAwOwogfQogCiAvKiB3cml0ZSB0aGUgbW9kZSB0byByZWdpc3RlcnMgKi8KLXN0YXRpYyB2b2lkIHBtM2ZiX3dyaXRlX21vZGUoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbykKK3N0YXRpYyB2b2lkIHBtM2ZiX3dyaXRlX21vZGUoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CisJc3RydWN0IHBtM19wYXIgKnBhciA9IGluZm8tPnBhcjsKIAljaGFyIHRlbXBzeW5jID0gMHgwMCwgdGVtcG1pc2MgPSAweDAwOwotCURUUkFDRTsKKwljb25zdCB1MzIgaHNzdGFydCA9IGluZm8tPnZhci5yaWdodF9tYXJnaW47CisJY29uc3QgdTMyIGhzZW5kID0gaHNzdGFydCArIGluZm8tPnZhci5oc3luY19sZW47CisJY29uc3QgdTMyIGhiZW5kID0gaHNlbmQgKyBpbmZvLT52YXIubGVmdF9tYXJnaW47CisJY29uc3QgdTMyIHhyZXMgPSAoaW5mby0+dmFyLnhyZXMgKyAzMSkgJiB+MzE7CisJY29uc3QgdTMyIGh0b3RhbCA9IHhyZXMgKyBoYmVuZDsKKwljb25zdCB1MzIgdnNzdGFydCA9IGluZm8tPnZhci5sb3dlcl9tYXJnaW47CisJY29uc3QgdTMyIHZzZW5kID0gdnNzdGFydCArIGluZm8tPnZhci52c3luY19sZW47CisJY29uc3QgdTMyIHZiZW5kID0gdnNlbmQgKyBpbmZvLT52YXIudXBwZXJfbWFyZ2luOworCWNvbnN0IHUzMiB2dG90YWwgPSBpbmZvLT52YXIueXJlcyArIHZiZW5kOworCWNvbnN0IHUzMiB3aWR0aCA9IChpbmZvLT52YXIueHJlc192aXJ0dWFsICsgNykgJiB+NzsKKwljb25zdCB1bnNpZ25lZCBicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7CiAKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zTWVtQnlwYXNzV3JpdGVNYXNrLCAweGZmZmZmZmZmKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zQXBlcnR1cmUwLCAweDAwMDAwMDAwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zQXBlcnR1cmUxLCAweDAwMDAwMDAwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zRklGT0RpcywgMHgwMDAwMDAwNyk7CisJUE0zX1dBSVQocGFyLCAyMCk7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM01lbUJ5cGFzc1dyaXRlTWFzaywgMHhmZmZmZmZmZik7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM0FwZXJ0dXJlMCwgMHgwMDAwMDAwMCk7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM0FwZXJ0dXJlMSwgMHgwMDAwMDAwMCk7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM0ZJRk9EaXMsIDB4MDAwMDAwMDcpOwogCi0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0hUb3RhbCwKLQkJCSAgIHBtM2ZiX1NoaWZ0YnBwKGxfZmJfaW5mbywKLQkJCQkJICBsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5kZXB0aCwKLQkJCQkJICBsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5odG90YWwgLQotCQkJCQkgIDEpKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zSHNFbmQsCi0JCQkgICBwbTNmYl9TaGlmdGJwcChsX2ZiX2luZm8sCi0JCQkJCSAgbF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGgsCi0JCQkJCSAgbF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+aHNlbmQpKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zSHNTdGFydCwKLQkJCSAgIHBtM2ZiX1NoaWZ0YnBwKGxfZmJfaW5mbywKLQkJCQkJICBsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5kZXB0aCwKLQkJCQkJICBsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT4KLQkJCQkJICBoc3N0YXJ0KSk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0hiRW5kLAotCQkJICAgcG0zZmJfU2hpZnRicHAobF9mYl9pbmZvLAotCQkJCQkgIGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoLAotCQkJCQkgIGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmhiZW5kKSk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0hnRW5kLAotCQkJICAgcG0zZmJfU2hpZnRicHAobF9mYl9pbmZvLAotCQkJCQkgIGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoLAotCQkJCQkgIGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmhiZW5kKSk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1NjcmVlblN0cmlkZSwKLQkJCSAgIHBtM2ZiX1NoaWZ0YnBwKGxfZmJfaW5mbywKLQkJCQkJICBsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5kZXB0aCwKLQkJCQkJICBsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5zdHJpZGUpKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zVlRvdGFsLCBsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT52dG90YWwgLSAxKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zVnNFbmQsIGxfZmJfaW5mby0+Y3VycmVudF9wYXItPnZzZW5kIC0gMSk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1ZzU3RhcnQsCi0JCQkgICBsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT52c3N0YXJ0IC0gMSk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1ZiRW5kLCBsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT52YmVuZCk7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM0hUb3RhbCwKKwkJCSAgIHBtM2ZiX3NoaWZ0X2JwcChicHAsIGh0b3RhbCAtIDEpKTsKKwlQTTNfV1JJVEVfUkVHKHBhciwgUE0zSHNFbmQsCisJCQkgICBwbTNmYl9zaGlmdF9icHAoYnBwLCBoc2VuZCkpOworCVBNM19XUklURV9SRUcocGFyLCBQTTNIc1N0YXJ0LAorCQkJICAgcG0zZmJfc2hpZnRfYnBwKGJwcCwgaHNzdGFydCkpOworCVBNM19XUklURV9SRUcocGFyLCBQTTNIYkVuZCwKKwkJCSAgIHBtM2ZiX3NoaWZ0X2JwcChicHAsIGhiZW5kKSk7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM0hnRW5kLAorCQkJICAgcG0zZmJfc2hpZnRfYnBwKGJwcCwgaGJlbmQpKTsKKwlQTTNfV1JJVEVfUkVHKHBhciwgUE0zU2NyZWVuU3RyaWRlLAorCQkJICAgcG0zZmJfc2hpZnRfYnBwKGJwcCwgd2lkdGgpKTsKKwlQTTNfV1JJVEVfUkVHKHBhciwgUE0zVlRvdGFsLCB2dG90YWwgLSAxKTsKKwlQTTNfV1JJVEVfUkVHKHBhciwgUE0zVnNFbmQsIHZzZW5kIC0gMSk7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM1ZzU3RhcnQsIHZzc3RhcnQgLSAxKTsKKwlQTTNfV1JJVEVfUkVHKHBhciwgUE0zVmJFbmQsIHZiZW5kKTsKIAotCXN3aXRjaCAobF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGgpIHsKKwlzd2l0Y2ggKGJwcCkgewogCWNhc2UgODoKLQkJUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0J5QXBlcnR1cmUxTW9kZSwKKwkJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM0J5QXBlcnR1cmUxTW9kZSwKIAkJCQkgICBQTTNCeUFwZXJ0dXJlTW9kZV9QSVhFTFNJWkVfOEJJVCk7Ci0JCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNCeUFwZXJ0dXJlMk1vZGUsCisJCVBNM19XUklURV9SRUcocGFyLCBQTTNCeUFwZXJ0dXJlMk1vZGUsCiAJCQkJICAgUE0zQnlBcGVydHVyZU1vZGVfUElYRUxTSVpFXzhCSVQpOwogCQlicmVhazsKIAotCWNhc2UgMTI6Ci0JY2FzZSAxNToKIAljYXNlIDE2OgogI2lmbmRlZiBfX0JJR19FTkRJQU4KLQkJUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0J5QXBlcnR1cmUxTW9kZSwKKwkJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM0J5QXBlcnR1cmUxTW9kZSwKIAkJCQkgICBQTTNCeUFwZXJ0dXJlTW9kZV9QSVhFTFNJWkVfMTZCSVQpOwotCQlQTTNfU0xPV19XUklURV9SRUcoUE0zQnlBcGVydHVyZTJNb2RlLAorCQlQTTNfV1JJVEVfUkVHKHBhciwgUE0zQnlBcGVydHVyZTJNb2RlLAogCQkJCSAgIFBNM0J5QXBlcnR1cmVNb2RlX1BJWEVMU0laRV8xNkJJVCk7CiAjZWxzZQotCQlQTTNfU0xPV19XUklURV9SRUcoUE0zQnlBcGVydHVyZTFNb2RlLAorCQlQTTNfV1JJVEVfUkVHKHBhciwgUE0zQnlBcGVydHVyZTFNb2RlLAogCQkJCSAgIFBNM0J5QXBlcnR1cmVNb2RlX1BJWEVMU0laRV8xNkJJVCB8CiAJCQkJICAgUE0zQnlBcGVydHVyZU1vZGVfQllURVNXQVBfQkFEQyk7Ci0JCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNCeUFwZXJ0dXJlMk1vZGUsCisJCVBNM19XUklURV9SRUcocGFyLCBQTTNCeUFwZXJ0dXJlMk1vZGUsCiAJCQkJICAgUE0zQnlBcGVydHVyZU1vZGVfUElYRUxTSVpFXzE2QklUIHwKIAkJCQkgICBQTTNCeUFwZXJ0dXJlTW9kZV9CWVRFU1dBUF9CQURDKTsKICNlbmRpZiAvKiAhIF9fQklHX0VORElBTiAqLwpAQCAtMTExNiwyMyArMjUxLDIyIEBACiAKIAljYXNlIDMyOgogI2lmbmRlZiBfX0JJR19FTkRJQU4KLQkJUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0J5QXBlcnR1cmUxTW9kZSwKKwkJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM0J5QXBlcnR1cmUxTW9kZSwKIAkJCQkgICBQTTNCeUFwZXJ0dXJlTW9kZV9QSVhFTFNJWkVfMzJCSVQpOwotCQlQTTNfU0xPV19XUklURV9SRUcoUE0zQnlBcGVydHVyZTJNb2RlLAorCQlQTTNfV1JJVEVfUkVHKHBhciwgUE0zQnlBcGVydHVyZTJNb2RlLAogCQkJCSAgIFBNM0J5QXBlcnR1cmVNb2RlX1BJWEVMU0laRV8zMkJJVCk7CiAjZWxzZQotCQlQTTNfU0xPV19XUklURV9SRUcoUE0zQnlBcGVydHVyZTFNb2RlLAorCQlQTTNfV1JJVEVfUkVHKHBhciwgUE0zQnlBcGVydHVyZTFNb2RlLAogCQkJCSAgIFBNM0J5QXBlcnR1cmVNb2RlX1BJWEVMU0laRV8zMkJJVCB8CiAJCQkJICAgUE0zQnlBcGVydHVyZU1vZGVfQllURVNXQVBfRENCQSk7Ci0JCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNCeUFwZXJ0dXJlMk1vZGUsCisJCVBNM19XUklURV9SRUcocGFyLCBQTTNCeUFwZXJ0dXJlMk1vZGUsCiAJCQkJICAgUE0zQnlBcGVydHVyZU1vZGVfUElYRUxTSVpFXzMyQklUIHwKIAkJCQkgICBQTTNCeUFwZXJ0dXJlTW9kZV9CWVRFU1dBUF9EQ0JBKTsKICNlbmRpZiAvKiAhIF9fQklHX0VORElBTiAqLwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCURQUklOVEsoMSwgIlVuc3VwcG9ydGVkIGRlcHRoICVkXG4iLAotCQkJbF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGgpOworCQlEUFJJTlRLKCJVbnN1cHBvcnRlZCBkZXB0aCAlZFxuIiwgYnBwKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMTQzLDk1ICsyNzcsODcgQEAKIAkgKiBzeW5jIG9wdGlvbnMgaW4gUE0zUkRfU3luY0NvbnRyb2wuICAtLXJtawogCSAqLwogCXsKLQkJdW5zaWduZWQgaW50IHZpZGVvID0gbF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+dmlkZW87CisJCXVuc2lnbmVkIGludCB2aWRlbyA9IHBhci0+dmlkZW87CiAKIAkJdmlkZW8gJj0gfihQTTNWaWRlb0NvbnRyb2xfSFNZTkNfTUFTSyB8CiAJCQkgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfTUFTSyk7CiAJCXZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSCB8CiAJCQkgUE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9ISUdIOwotCQlQTTNfU0xPV19XUklURV9SRUcoUE0zVmlkZW9Db250cm9sLCB2aWRlbyk7CisJCVBNM19XUklURV9SRUcocGFyLCBQTTNWaWRlb0NvbnRyb2wsIHZpZGVvKTsKIAl9Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1ZDbGtDdGwsCi0JCQkgICAoUE0zX1JFQURfUkVHKFBNM1ZDbGtDdGwpICYgMHhGRkZGRkZGQykpOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNTY3JlZW5CYXNlLCBsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5iYXNlKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zQ2hpcENvbmZpZywKLQkJCSAgIChQTTNfUkVBRF9SRUcoUE0zQ2hpcENvbmZpZykgJiAweEZGRkZGRkZEKSk7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM1ZDbGtDdGwsCisJCQkgICAoUE0zX1JFQURfUkVHKHBhciwgUE0zVkNsa0N0bCkgJiAweEZGRkZGRkZDKSk7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM1NjcmVlbkJhc2UsIHBhci0+YmFzZSk7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM0NoaXBDb25maWcsCisJCQkgICAoUE0zX1JFQURfUkVHKHBhciwgUE0zQ2hpcENvbmZpZykgJiAweEZGRkZGRkZEKSk7CiAKKwl3bWIoKTsKIAl7Ci0JCXVuc2lnbmVkIGNoYXIgbTsJLyogQ2xrUHJlU2NhbGUgKi8KLQkJdW5zaWduZWQgY2hhciBuOwkvKiBDbGtGZWVkQmFja1NjYWxlICovCi0JCXVuc2lnbmVkIGNoYXIgcDsJLyogQ2xrUG9zdFNjYWxlICovCi0JCSh2b2lkKXBtM2ZiX0NhbGN1bGF0ZUNsb2NrKGxfZmJfaW5mbywgbF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+cGl4Y2xvY2ssIFBNM19SRUZfQ0xPQ0ssICZtLCAmbiwgJnApOworCQl1bnNpZ25lZCBjaGFyIHVuaW5pdGlhbGl6ZWRfdmFyKG0pOwkvKiBDbGtQcmVTY2FsZSAqLworCQl1bnNpZ25lZCBjaGFyIHVuaW5pdGlhbGl6ZWRfdmFyKG4pOwkvKiBDbGtGZWVkQmFja1NjYWxlICovCisJCXVuc2lnbmVkIGNoYXIgdW5pbml0aWFsaXplZF92YXIocCk7CS8qIENsa1Bvc3RTY2FsZSAqLworCQl1bnNpZ25lZCBsb25nIHBpeGNsb2NrID0gUElDT1MyS0haKGluZm8tPnZhci5waXhjbG9jayk7CiAKLQkJRFBSSU5USygyLAotCQkJIlBpeGNsb2NrOiAlZCwgUHJlOiAlZCwgRmVlZGJhY2s6ICVkLCBQb3N0OiAlZFxuIiwKLQkJCWxfZmJfaW5mby0+Y3VycmVudF9wYXItPnBpeGNsb2NrLCAoaW50KSBtLCAoaW50KSBuLAotCQkJKGludCkgcCk7CisJCSh2b2lkKXBtM2ZiX2NhbGN1bGF0ZV9jbG9jayhwaXhjbG9jaywgJm0sICZuLCAmcCk7CiAKLQkJUE0zX1dSSVRFX0RBQ19SRUcoUE0zUkRfRENsazBQcmVTY2FsZSwgbSk7Ci0JCVBNM19XUklURV9EQUNfUkVHKFBNM1JEX0RDbGswRmVlZGJhY2tTY2FsZSwgbik7Ci0JCVBNM19XUklURV9EQUNfUkVHKFBNM1JEX0RDbGswUG9zdFNjYWxlLCBwKTsKKwkJRFBSSU5USygiUGl4Y2xvY2s6ICVsZCwgUHJlOiAlZCwgRmVlZGJhY2s6ICVkLCBQb3N0OiAlZFxuIiwKKwkJCXBpeGNsb2NrLCAoaW50KSBtLCAoaW50KSBuLCAoaW50KSBwKTsKKworCQlQTTNfV1JJVEVfREFDX1JFRyhwYXIsIFBNM1JEX0RDbGswUHJlU2NhbGUsIG0pOworCQlQTTNfV1JJVEVfREFDX1JFRyhwYXIsIFBNM1JEX0RDbGswRmVlZGJhY2tTY2FsZSwgbik7CisJCVBNM19XUklURV9EQUNfUkVHKHBhciwgUE0zUkRfRENsazBQb3N0U2NhbGUsIHApOwogCX0KIAkvKgotCSAgIFBNM19XUklURV9EQUNfUkVHKFBNM1JEX0luZGV4Q29udHJvbCwgMHgwMCk7CisJICAgUE0zX1dSSVRFX0RBQ19SRUcocGFyLCBQTTNSRF9JbmRleENvbnRyb2wsIDB4MDApOwogCSAqLwogCS8qCi0JICAgUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1JEX0luZGV4Q29udHJvbCwgMHgwMCk7CisJICAgUE0zX1NMT1dfV1JJVEVfUkVHKHBhciwgUE0zUkRfSW5kZXhDb250cm9sLCAweDAwKTsKIAkgKi8KLQlpZiAoKGxfZmJfaW5mby0+Y3VycmVudF9wYXItPnZpZGVvICYgUE0zVmlkZW9Db250cm9sX0hTWU5DX01BU0spID09CisJaWYgKChwYXItPnZpZGVvICYgUE0zVmlkZW9Db250cm9sX0hTWU5DX01BU0spID09CiAJICAgIFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSCkKIAkJdGVtcHN5bmMgfD0gUE0zUkRfU3luY0NvbnRyb2xfSFNZTkNfQUNUSVZFX0hJR0g7Ci0JaWYgKChsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT52aWRlbyAmIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19NQVNLKSA9PQorCWlmICgocGFyLT52aWRlbyAmIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19NQVNLKSA9PQogCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gpCiAJCXRlbXBzeW5jIHw9IFBNM1JEX1N5bmNDb250cm9sX1ZTWU5DX0FDVElWRV9ISUdIOwotCQotCVBNM19XUklURV9EQUNfUkVHKFBNM1JEX1N5bmNDb250cm9sLCB0ZW1wc3luYyk7Ci0JRFBSSU5USygyLCAiUE0zUkRfU3luY0NvbnRyb2w6ICVkXG4iLCB0ZW1wc3luYyk7Ci0JCi0JaWYgKGZsYXRwYW5lbFtsX2ZiX2luZm8tPmJvYXJkX251bV0pCi0JewotCQlQTTNfV1JJVEVfREFDX1JFRyhQTTNSRF9EQUNDb250cm9sLCBQTTNSRF9EQUNDb250cm9sX0JMQU5LX1BFREVTVEFMX0VOQUJMRSk7Ci0JCVBNM19XQUlUKDIpOwotCQlQTTNfV1JJVEVfUkVHKFBNM1ZTQ29uZmlndXJhdGlvbiwgMHgwNik7Ci0JCVBNM19XUklURV9SRUcoMHg1YTAwLCAxIDw8IDE0KTsgLyogYmxhY2sgbWFnaWMuLi4gKi8KLQkJdGVtcG1pc2MgPSBQTTNSRF9NaXNjQ29udHJvbF9WU0JfT1VUUFVUX0VOQUJMRTsKLQl9Ci0JZWxzZQotCQlQTTNfV1JJVEVfREFDX1JFRyhQTTNSRF9EQUNDb250cm9sLCAweDAwKTsKIAotCXN3aXRjaCAobF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGgpIHsKKwlQTTNfV1JJVEVfREFDX1JFRyhwYXIsIFBNM1JEX1N5bmNDb250cm9sLCB0ZW1wc3luYyk7CisJRFBSSU5USygiUE0zUkRfU3luY0NvbnRyb2w6ICVkXG4iLCB0ZW1wc3luYyk7CisKKwlQTTNfV1JJVEVfREFDX1JFRyhwYXIsIFBNM1JEX0RBQ0NvbnRyb2wsIDB4MDApOworCisJc3dpdGNoIChwbTNmYl9kZXB0aCgmaW5mby0+dmFyKSkgewogCWNhc2UgODoKLQkJUE0zX1dSSVRFX0RBQ19SRUcoUE0zUkRfUGl4ZWxTaXplLAorCQlQTTNfV1JJVEVfREFDX1JFRyhwYXIsIFBNM1JEX1BpeGVsU2l6ZSwKIAkJCQkgIFBNM1JEX1BpeGVsU2l6ZV84X0JJVF9QSVhFTFMpOwotCQlQTTNfV1JJVEVfREFDX1JFRyhQTTNSRF9Db2xvckZvcm1hdCwKKwkJUE0zX1dSSVRFX0RBQ19SRUcocGFyLCBQTTNSRF9Db2xvckZvcm1hdCwKIAkJCQkgIFBNM1JEX0NvbG9yRm9ybWF0X0NJOF9DT0xPUiB8CiAJCQkJICBQTTNSRF9Db2xvckZvcm1hdF9DT0xPUl9PUkRFUl9CTFVFX0xPVyk7CiAJCXRlbXBtaXNjIHw9IFBNM1JEX01pc2NDb250cm9sX0hJR0hDT0xPUl9SRVNfRU5BQkxFOwogCQlicmVhazsKIAljYXNlIDEyOgotCQlQTTNfV1JJVEVfREFDX1JFRyhQTTNSRF9QaXhlbFNpemUsCisJCVBNM19XUklURV9EQUNfUkVHKHBhciwgUE0zUkRfUGl4ZWxTaXplLAogCQkJCSAgUE0zUkRfUGl4ZWxTaXplXzE2X0JJVF9QSVhFTFMpOwotCQlQTTNfV1JJVEVfREFDX1JFRyhQTTNSRF9Db2xvckZvcm1hdCwKKwkJUE0zX1dSSVRFX0RBQ19SRUcocGFyLCBQTTNSRF9Db2xvckZvcm1hdCwKIAkJCQkgIFBNM1JEX0NvbG9yRm9ybWF0XzQ0NDRfQ09MT1IgfAogCQkJCSAgUE0zUkRfQ29sb3JGb3JtYXRfQ09MT1JfT1JERVJfQkxVRV9MT1cgfAogCQkJCSAgUE0zUkRfQ29sb3JGb3JtYXRfTElORUFSX0NPTE9SX0VYVF9FTkFCTEUpOwogCQl0ZW1wbWlzYyB8PSBQTTNSRF9NaXNjQ29udHJvbF9ESVJFQ1RDT0xPUl9FTkFCTEUgfAogCQkJUE0zUkRfTWlzY0NvbnRyb2xfSElHSENPTE9SX1JFU19FTkFCTEU7Ci0JCWJyZWFrOwkJCisJCWJyZWFrOwogCWNhc2UgMTU6Ci0JCVBNM19XUklURV9EQUNfUkVHKFBNM1JEX1BpeGVsU2l6ZSwKKwkJUE0zX1dSSVRFX0RBQ19SRUcocGFyLCBQTTNSRF9QaXhlbFNpemUsCiAJCQkJICBQTTNSRF9QaXhlbFNpemVfMTZfQklUX1BJWEVMUyk7Ci0JCVBNM19XUklURV9EQUNfUkVHKFBNM1JEX0NvbG9yRm9ybWF0LAorCQlQTTNfV1JJVEVfREFDX1JFRyhwYXIsIFBNM1JEX0NvbG9yRm9ybWF0LAogCQkJCSAgUE0zUkRfQ29sb3JGb3JtYXRfNTU1MV9GUk9OVF9DT0xPUiB8CiAJCQkJICBQTTNSRF9Db2xvckZvcm1hdF9DT0xPUl9PUkRFUl9CTFVFX0xPVyB8CiAJCQkJICBQTTNSRF9Db2xvckZvcm1hdF9MSU5FQVJfQ09MT1JfRVhUX0VOQUJMRSk7CiAJCXRlbXBtaXNjIHw9IFBNM1JEX01pc2NDb250cm9sX0RJUkVDVENPTE9SX0VOQUJMRSB8CiAJCQlQTTNSRF9NaXNjQ29udHJvbF9ISUdIQ09MT1JfUkVTX0VOQUJMRTsKLQkJYnJlYWs7CQkKKwkJYnJlYWs7CiAJY2FzZSAxNjoKLQkJUE0zX1dSSVRFX0RBQ19SRUcoUE0zUkRfUGl4ZWxTaXplLAorCQlQTTNfV1JJVEVfREFDX1JFRyhwYXIsIFBNM1JEX1BpeGVsU2l6ZSwKIAkJCQkgIFBNM1JEX1BpeGVsU2l6ZV8xNl9CSVRfUElYRUxTKTsKLQkJUE0zX1dSSVRFX0RBQ19SRUcoUE0zUkRfQ29sb3JGb3JtYXQsCisJCVBNM19XUklURV9EQUNfUkVHKHBhciwgUE0zUkRfQ29sb3JGb3JtYXQsCiAJCQkJICBQTTNSRF9Db2xvckZvcm1hdF81NjVfRlJPTlRfQ09MT1IgfAogCQkJCSAgUE0zUkRfQ29sb3JGb3JtYXRfQ09MT1JfT1JERVJfQkxVRV9MT1cgfAogCQkJCSAgUE0zUkRfQ29sb3JGb3JtYXRfTElORUFSX0NPTE9SX0VYVF9FTkFCTEUpOwpAQCAtMTIzOSwxOTM2ICszNjUsMjY0IEBACiAJCQlQTTNSRF9NaXNjQ29udHJvbF9ISUdIQ09MT1JfUkVTX0VOQUJMRTsKIAkJYnJlYWs7CiAJY2FzZSAzMjoKLQkJUE0zX1dSSVRFX0RBQ19SRUcoUE0zUkRfUGl4ZWxTaXplLAorCQlQTTNfV1JJVEVfREFDX1JFRyhwYXIsIFBNM1JEX1BpeGVsU2l6ZSwKIAkJCQkgIFBNM1JEX1BpeGVsU2l6ZV8zMl9CSVRfUElYRUxTKTsKLQkJUE0zX1dSSVRFX0RBQ19SRUcoUE0zUkRfQ29sb3JGb3JtYXQsCisJCVBNM19XUklURV9EQUNfUkVHKHBhciwgUE0zUkRfQ29sb3JGb3JtYXQsCiAJCQkJICBQTTNSRF9Db2xvckZvcm1hdF84ODg4X0NPTE9SIHwKIAkJCQkgIFBNM1JEX0NvbG9yRm9ybWF0X0NPTE9SX09SREVSX0JMVUVfTE9XKTsKIAkJdGVtcG1pc2MgfD0gUE0zUkRfTWlzY0NvbnRyb2xfRElSRUNUQ09MT1JfRU5BQkxFIHwKIAkJCVBNM1JEX01pc2NDb250cm9sX0hJR0hDT0xPUl9SRVNfRU5BQkxFOwogCQlicmVhazsKIAl9Ci0JUE0zX1dSSVRFX0RBQ19SRUcoUE0zUkRfTWlzY0NvbnRyb2wsIHRlbXBtaXNjKTsKLQkKLQlQTTNfU0hPV19DVVJfTU9ERTsKKwlQTTNfV1JJVEVfREFDX1JFRyhwYXIsIFBNM1JEX01pc2NDb250cm9sLCB0ZW1wbWlzYyk7CiB9CiAKLXN0YXRpYyB2b2lkIHBtM2ZiX3JlYWRfbW9kZShzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvLAotCQkJICAgIHN0cnVjdCBwbTNmYl9wYXIgKmN1cnBhcikKKy8qCisgKiBoYXJkd2FyZSBpbmRlcGVuZGVudCBmdW5jdGlvbnMKKyAqLworaW50IHBtM2ZiX2luaXQodm9pZCk7CisKK3N0YXRpYyBpbnQgcG0zZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQl1bnNpZ25lZCBsb25nIHBpeHNpemUxLCBwaXhzaXplMiwgY2xvY2t1c2VkOwotCXVuc2lnbmVkIGxvbmcgcHJlLCBmZWVkYmFjaywgcG9zdDsKKwl1MzIgbHBpdGNoOworCXVuc2lnbmVkIGJwcCA9IHZhci0+cmVkLmxlbmd0aCArIHZhci0+Z3JlZW4ubGVuZ3RoCisJCQkrIHZhci0+Ymx1ZS5sZW5ndGggKyB2YXItPnRyYW5zcC5sZW5ndGg7CiAKLQlEVFJBQ0U7CisJaWYgKCBicHAgIT0gdmFyLT5iaXRzX3Blcl9waXhlbCApIHsKKwkJLyogc2V0IHByZWRlZmluZWQgbW9kZSBmb3IgYml0c19wZXJfcGl4ZWwgc2V0dGluZ3MgKi8KIAotCWNsb2NrdXNlZCA9IFBNM19SRUFEX1JFRyhQTTNWQ2xrQ3RsKTsKLQotCXN3aXRjaCAoY2xvY2t1c2VkKSB7Ci0JY2FzZSAzOgotCQlwcmUgPSBQTTNfUkVBRF9EQUNfUkVHKFBNM1JEX0RDbGszUHJlU2NhbGUpOwotCQlmZWVkYmFjayA9IFBNM19SRUFEX0RBQ19SRUcoUE0zUkRfRENsazNGZWVkYmFja1NjYWxlKTsKLQkJcG9zdCA9IFBNM19SRUFEX0RBQ19SRUcoUE0zUkRfRENsazNQb3N0U2NhbGUpOwotCi0JCURQUklOVEsoMiwKLQkJCSJEQ2xrMyBwYXJhbWV0ZXI6IFByZTogJWxkLCBGZWVkYmFjazogJWxkLCBQb3N0OiAlbGQgOyBnaXZpbmcgcGl4Y2xvY2s6ICVsZFxuIiwKLQkJCXByZSwgZmVlZGJhY2ssIHBvc3QsIFBNM19TQ0FMRV9UT19DTE9DSyhwcmUsCi0JCQkJCQkJCWZlZWRiYWNrLAotCQkJCQkJCQlwb3N0KSk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcHJlID0gUE0zX1JFQURfREFDX1JFRyhQTTNSRF9EQ2xrMlByZVNjYWxlKTsKLQkJZmVlZGJhY2sgPSBQTTNfUkVBRF9EQUNfUkVHKFBNM1JEX0RDbGsyRmVlZGJhY2tTY2FsZSk7Ci0JCXBvc3QgPSBQTTNfUkVBRF9EQUNfUkVHKFBNM1JEX0RDbGsyUG9zdFNjYWxlKTsKLQotCQlEUFJJTlRLKDIsCi0JCQkiRENsazIgcGFyYW1ldGVyOiBQcmU6ICVsZCwgRmVlZGJhY2s6ICVsZCwgUG9zdDogJWxkIDsgZ2l2aW5nIHBpeGNsb2NrOiAlbGRcbiIsCi0JCQlwcmUsIGZlZWRiYWNrLCBwb3N0LCBQTTNfU0NBTEVfVE9fQ0xPQ0socHJlLAotCQkJCQkJCQlmZWVkYmFjaywKLQkJCQkJCQkJcG9zdCkpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXByZSA9IFBNM19SRUFEX0RBQ19SRUcoUE0zUkRfRENsazFQcmVTY2FsZSk7Ci0JCWZlZWRiYWNrID0gUE0zX1JFQURfREFDX1JFRyhQTTNSRF9EQ2xrMUZlZWRiYWNrU2NhbGUpOwotCQlwb3N0ID0gUE0zX1JFQURfREFDX1JFRyhQTTNSRF9EQ2xrMVBvc3RTY2FsZSk7Ci0KLQkJRFBSSU5USygyLAotCQkJIkRDbGsxIHBhcmFtZXRlcjogUHJlOiAlbGQsIEZlZWRiYWNrOiAlbGQsIFBvc3Q6ICVsZCA7IGdpdmluZyBwaXhjbG9jazogJWxkXG4iLAotCQkJcHJlLCBmZWVkYmFjaywgcG9zdCwgUE0zX1NDQUxFX1RPX0NMT0NLKHByZSwKLQkJCQkJCQkJZmVlZGJhY2ssCi0JCQkJCQkJCXBvc3QpKTsKLQkJYnJlYWs7Ci0JY2FzZSAwOgotCQlwcmUgPSBQTTNfUkVBRF9EQUNfUkVHKFBNM1JEX0RDbGswUHJlU2NhbGUpOwotCQlmZWVkYmFjayA9IFBNM19SRUFEX0RBQ19SRUcoUE0zUkRfRENsazBGZWVkYmFja1NjYWxlKTsKLQkJcG9zdCA9IFBNM19SRUFEX0RBQ19SRUcoUE0zUkRfRENsazBQb3N0U2NhbGUpOwotCi0JCURQUklOVEsoMiwKLQkJCSJEQ2xrMCBwYXJhbWV0ZXI6IFByZTogJWxkLCBGZWVkYmFjazogJWxkLCBQb3N0OiAlbGQgOyBnaXZpbmcgcGl4Y2xvY2s6ICVsZFxuIiwKLQkJCXByZSwgZmVlZGJhY2ssIHBvc3QsIFBNM19TQ0FMRV9UT19DTE9DSyhwcmUsCi0JCQkJCQkJCWZlZWRiYWNrLAotCQkJCQkJCQlwb3N0KSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByZSA9IGZlZWRiYWNrID0gcG9zdCA9IDA7Ci0JCURQUklOVEsoMSwgIlVua25vd2sgRCBjbG9jayB1c2VkIDogJWxkXG4iLCBjbG9ja3VzZWQpOwotCQlicmVhazsKLQl9Ci0KLQljdXJwYXItPnBpeGNsb2NrID0gUE0zX1NDQUxFX1RPX0NMT0NLKHByZSwgZmVlZGJhY2ssIHBvc3QpOwotCi0JcGl4c2l6ZTEgPQotCSAgICBQTTNCeUFwZXJ0dXJlTW9kZV9QSVhFTFNJWkVfTUFTSyAmCi0JICAgIChQTTNfUkVBRF9SRUcoUE0zQnlBcGVydHVyZTFNb2RlKSk7Ci0JcGl4c2l6ZTIgPQotCSAgICBQTTNCeUFwZXJ0dXJlTW9kZV9QSVhFTFNJWkVfTUFTSyAmCi0JICAgIChQTTNfUkVBRF9SRUcoUE0zQnlBcGVydHVyZTJNb2RlKSk7Ci0KLQlEQVNTRVJUKChwaXhzaXplMSA9PSBwaXhzaXplMiksCi0JCSJwaXhzaXplIHRoZSBzYW1lIGluIGJvdGggYXBlcnR1cmVcbiIpOwotCi0JaWYgKHBpeHNpemUxICYgUE0zQnlBcGVydHVyZU1vZGVfUElYRUxTSVpFXzMyQklUKQotCQljdXJwYXItPmRlcHRoID0gMzI7Ci0JZWxzZSBpZiAocGl4c2l6ZTEgJiBQTTNCeUFwZXJ0dXJlTW9kZV9QSVhFTFNJWkVfMTZCSVQpCi0JewotCQljdXJwYXItPmRlcHRoID0gMTY7Ci0JfQotCWVsc2UKLQkJY3VycGFyLT5kZXB0aCA9IDg7Ci0KLQkvKiBub3Qgc3VyZSBpZiBJIG5lZWQgdG8gYWRkIG9uZSBvbiB0aGUgbmV4dCA7IGl0IGdpdmUgYmV0dGVyIHJlc3VsdCB3aXRoICovCi0JY3VycGFyLT5odG90YWwgPQotCSAgICBwbTNmYl9VbnNoaWZ0YnBwKGxfZmJfaW5mbywgY3VycGFyLT5kZXB0aCwKLQkJCSAgICAgMSArIFBNM19SRUFEX1JFRyhQTTNIVG90YWwpKTsKLQljdXJwYXItPmhzZW5kID0KLQkgICAgcG0zZmJfVW5zaGlmdGJwcChsX2ZiX2luZm8sIGN1cnBhci0+ZGVwdGgsCi0JCQkgICAgIFBNM19SRUFEX1JFRyhQTTNIc0VuZCkpOwotCWN1cnBhci0+aHNzdGFydCA9Ci0JICAgIHBtM2ZiX1Vuc2hpZnRicHAobF9mYl9pbmZvLCBjdXJwYXItPmRlcHRoLAotCQkJICAgICBQTTNfUkVBRF9SRUcoUE0zSHNTdGFydCkpOwotCWN1cnBhci0+aGJlbmQgPQotCSAgICBwbTNmYl9VbnNoaWZ0YnBwKGxfZmJfaW5mbywgY3VycGFyLT5kZXB0aCwKLQkJCSAgICAgUE0zX1JFQURfUkVHKFBNM0hiRW5kKSk7Ci0KLQljdXJwYXItPnN0cmlkZSA9Ci0JICAgIHBtM2ZiX1Vuc2hpZnRicHAobF9mYl9pbmZvLCBjdXJwYXItPmRlcHRoLAotCQkJICAgICBQTTNfUkVBRF9SRUcoUE0zU2NyZWVuU3RyaWRlKSk7Ci0KLQljdXJwYXItPnZ0b3RhbCA9IDEgKyBQTTNfUkVBRF9SRUcoUE0zVlRvdGFsKTsKLQljdXJwYXItPnZzZW5kID0gMSArIFBNM19SRUFEX1JFRyhQTTNWc0VuZCk7Ci0JY3VycGFyLT52c3N0YXJ0ID0gMSArIFBNM19SRUFEX1JFRyhQTTNWc1N0YXJ0KTsKLQljdXJwYXItPnZiZW5kID0gUE0zX1JFQURfUkVHKFBNM1ZiRW5kKTsKLQotCWN1cnBhci0+dmlkZW8gPSBQTTNfUkVBRF9SRUcoUE0zVmlkZW9Db250cm9sKTsKLQotCWN1cnBhci0+YmFzZSA9IFBNM19SRUFEX1JFRyhQTTNTY3JlZW5CYXNlKTsKLQljdXJwYXItPndpZHRoID0gY3VycGFyLT5odG90YWwgLSBjdXJwYXItPmhiZW5kOyAvKiBtYWtlIHZpcnR1YWwgPT0gZGlzcGxheWVkIHJlc29sdXRpb24gKi8KLQljdXJwYXItPmhlaWdodCA9IGN1cnBhci0+dnRvdGFsIC0gY3VycGFyLT52YmVuZDsKLQotCURQUklOVEsoMiwgIkZvdW5kIDogJWQgKiAlZCwgJWQgS2h6LCBzdHJpZGUgaXMgJTA4eFxuIiwKLQkJY3VycGFyLT53aWR0aCwgY3VycGFyLT5oZWlnaHQsIGN1cnBhci0+cGl4Y2xvY2ssCi0JCWN1cnBhci0+c3RyaWRlKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgcG0zZmJfc2l6ZV9tZW1vcnkoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbykKLXsKLQl1bnNpZ25lZCBsb25nIG1lbXNpemUgPSAwLCB0ZW1wQnlwYXNzLCBpLCB0ZW1wMSwgdGVtcDI7Ci0JdTE2IHN1YnZlbmRvciwgc3ViZGV2aWNlOwotCXBtM2ZiX3RpbWluZ19yZXN1bHQgcHRyOwotCi0JRFRSQUNFOwotCi0JbF9mYl9pbmZvLT5mYl9zaXplID0gNjQgKiAxMDI0ICogMTAyNDsJLyogcG0zIGFwZXJ0dXJlIGFsd2F5cyA2NCBNQiAqLwotCXBtM2ZiX21hcElPKGxfZmJfaW5mbyk7CS8qIHRlbXBvcmFyeSBtYXAgSU8gKi8KLQotCURBU1NFUlQoKGxfZmJfaW5mby0+dklPQmFzZSAhPSBOVUxMKSwKLQkJIklPIHN1Y2Nlc3NmdWxseSBtYXBwZWQgYmVmb3JlIG1lbSBkZXRlY3RcbiIpOwotCURBU1NFUlQoKGxfZmJfaW5mby0+dl9mYiAhPSBOVUxMKSwKLQkJIkZCIHN1Y2Nlc3NmdWxseSBtYXBwZWQgYmVmb3JlIG1lbSBkZXRlY3RcbiIpOwotCi0JLyogY2FyZC1zcGVjaWZpYyBzdHVmZiwgKmJlZm9yZSogYWNjZXNzaW5nICphbnkqIEZCIG1lbW9yeSAqLwotCWlmICgoIXBjaV9yZWFkX2NvbmZpZ193b3JkCi0JICAgICAobF9mYl9pbmZvLT5kZXYsIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELCAmc3VidmVuZG9yKSkKLQkgICAgJiYKLQkgICAgKCFwY2lfcmVhZF9jb25maWdfd29yZAotCSAgICAgKGxfZmJfaW5mby0+ZGV2LCBQQ0lfU1VCU1lTVEVNX0lELCAmc3ViZGV2aWNlKSkpIHsKLQkJaSA9IDA7IGxfZmJfaW5mby0+Ym9hcmRfdHlwZSA9IDA7Ci0JCXdoaWxlICgoY2FyZGJhc2VbaV0uY2FyZG5hbWVbMF0pICYmICEobF9mYl9pbmZvLT5ib2FyZF90eXBlKSkgewotCQkJaWYgKChjYXJkYmFzZVtpXS5zdWJ2ZW5kb3IgPT0gc3VidmVuZG9yKSAmJgotCQkJICAgIChjYXJkYmFzZVtpXS5zdWJkZXZpY2UgPT0gc3ViZGV2aWNlKSAmJgotCQkJICAgIChjYXJkYmFzZVtpXS5mdW5jID09IFBDSV9GVU5DKGxfZmJfaW5mby0+ZGV2LT5kZXZmbikpKSB7Ci0JCQkJRFBSSU5USygyLCAiQ2FyZCAjJWxkIGlzIGFuICVzXG4iLAotCQkJCQlsX2ZiX2luZm8tPmJvYXJkX251bSwKLQkJCQkJY2FyZGJhc2VbaV0uY2FyZG5hbWUpOwotCQkJCWlmIChjYXJkYmFzZVtpXS5zcGVjaWZpY19zZXR1cCkKLQkJCQkJY2FyZGJhc2VbaV0uc3BlY2lmaWNfc2V0dXAobF9mYl9pbmZvKTsKLQkJCQlsX2ZiX2luZm8tPmJvYXJkX3R5cGUgPSBpOwotCQkJfQotCQkJaSsrOwotCQl9Ci0JCWlmICghbF9mYl9pbmZvLT5ib2FyZF90eXBlKSB7Ci0JCQlEUFJJTlRLKDEsICJDYXJkICMlbGQgaXMgYW4gdW5rbm93biAweCUwNHggLyAweCUwNHhcbiIsCi0JCQkJbF9mYl9pbmZvLT5ib2FyZF9udW0sIHN1YnZlbmRvciwgc3ViZGV2aWNlKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicG0zZmI6IEVycm9yOiBwY2lfcmVhZF9jb25maWdfd29yZCBmYWlsZWQsIGJvYXJkICMlbGRcbiIsCi0JCSAgICAgICBsX2ZiX2luZm8tPmJvYXJkX251bSk7Ci0JfQotCi0JaWYgKHByaW50dGltaW5ncykKLQkJcG0zZmJfc2hvd19jdXJfdGltaW5nKGxfZmJfaW5mbyk7Ci0JCi0JLyogY2FyZC1zcGVjaWZpYyBzZXR1cCBpcyBkb25lLCB3ZSBwcmVzZXJ2ZSB0aGUgZmluYWwKLSAgICAgICAgICAgbWVtb3J5IHRpbWluZyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqLwotCWlmICgocHRyID0gcG0zZmJfcHJlc2VydmVfbWVtb3J5X3RpbWluZ3MobF9mYl9pbmZvKSkgPT0gcG0zZmJfdGltaW5nX3Byb2JsZW0pIHsgLyogbWVtb3J5IHRpbWluZ3Mgd2VyZSB3cm9uZyAhIG9vcHMuLi4uICovCi0JCXJldHVybigwKTsKLQl9Ci0JCi0JdGVtcEJ5cGFzcyA9IFBNM19SRUFEX1JFRyhQTTNNZW1CeXBhc3NXcml0ZU1hc2spOwotCi0JRFBSSU5USygyLCAiUE0zTWVtQnlwYXNzV3JpdGVNYXNrIHdhczogMHglMDhseFxuIiwgdGVtcEJ5cGFzcyk7Ci0KLQlQTTNfU0xPV19XUklURV9SRUcoUE0zTWVtQnlwYXNzV3JpdGVNYXNrLCAweEZGRkZGRkZGKTsKLQotCS8qIHBtMyBzcGxpdCB1cCBtZW1vcnksIHJlcGxpY2F0ZXMsIGFuZCBkbyBhIGxvdCBvZiBuYXN0eSBzdHVmZiBJTUhPIDstKSAqLwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCWZiX3dyaXRlbChpICogMHgwMDM0NTY3OCwKLQkJCSAgKGxfZmJfaW5mby0+dl9mYiArIChpICogMTA0ODU3NikpKTsKLQkJbWIoKTsKLQkJdGVtcDEgPSBmYl9yZWFkbCgobF9mYl9pbmZvLT52X2ZiICsgKGkgKiAxMDQ4NTc2KSkpOwotCi0JCS8qIExldCdzIGNoZWNrIGZvciB3cmFwb3Zlciwgd3JpdGUgd2lsbCBmYWlsIGF0IDE2TUIgYm91bmRhcnkgKi8KLQkJaWYgKHRlbXAxID09IChpICogMHgwMDM0NTY3OCkpCi0JCQltZW1zaXplID0gaTsKLQkJZWxzZQotCQkJYnJlYWs7Ci0JfQotCi0JRFBSSU5USygyLCAiRmlyc3QgZGV0ZWN0IHBhc3MgYWxyZWFkeSBnb3QgJWxkIE1CXG4iLCBtZW1zaXplICsgMSk7Ci0KLQlpZiAobWVtc2l6ZSA9PSBpKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCQkvKiBDbGVhciBmaXJzdCAzMk1CIDsgMCBpcyAwLCBubyBuZWVkIHRvIGJ5dGVzd2FwICovCi0JCQl3cml0ZWwoMHgwMDAwMDAwLAotCQkJICAgICAgIChsX2ZiX2luZm8tPnZfZmIgKyAoaSAqIDEwNDg1NzYpKSk7Ci0JCQltYigpOwotCQl9Ci0KLQkJZm9yIChpID0gMzI7IGkgPCA2NDsgaSsrKSB7Ci0JCQlmYl93cml0ZWwoaSAqIDB4MDAzNDU2NzgsCi0JCQkJICAobF9mYl9pbmZvLT52X2ZiICsgKGkgKiAxMDQ4NTc2KSkpOwotCQkJbWIoKTsKLQkJCXRlbXAxID0KLQkJCSAgICBmYl9yZWFkbCgobF9mYl9pbmZvLT52X2ZiICsgKGkgKiAxMDQ4NTc2KSkpOwotCQkJdGVtcDIgPQotCQkJICAgIGZiX3JlYWRsKChsX2ZiX2luZm8tPnZfZmIgKwotCQkJCSAgICAgICgoaSAtIDMyKSAqIDEwNDg1NzYpKSk7Ci0JCQlpZiAoKHRlbXAxID09IChpICogMHgwMDM0NTY3OCkpICYmICh0ZW1wMiA9PSAwKSkJLyogZGlmZmVyZW50IHZhbHVlLCBkaWZmZXJlbnQgUkFNLi4uICovCi0JCQkJbWVtc2l6ZSA9IGk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlEUFJJTlRLKDIsICJTZWNvbmQgZGV0ZWN0IHBhc3MgZ290ICVsZCBNQlxuIiwgbWVtc2l6ZSArIDEpOwotCi0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM01lbUJ5cGFzc1dyaXRlTWFzaywgdGVtcEJ5cGFzcyk7Ci0KLQlwbTNmYl91bm1hcElPKGxfZmJfaW5mbyk7Ci0JbWVtc2l6ZSA9IDEwNDg1NzYgKiAobWVtc2l6ZSArIDEpOwotCi0JRFBSSU5USygyLCAiUmV0dXJuaW5nIDB4JTA4bHggYnl0ZXNcbiIsIG1lbXNpemUpOwotCi0JaWYgKGZvcmNlc2l6ZVtsX2ZiX2luZm8tPmJvYXJkX251bV0gJiYgKChmb3JjZXNpemVbbF9mYl9pbmZvLT5ib2FyZF9udW1dICogMTA0ODU3NikgIT0gbWVtc2l6ZSkpCi0JewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbTNmYjogbWlzbWF0Y2ggYmV0d2VlbiBwcm9iZWQgKCVsZCBNQikgYW5kIHNwZWNpZmllZCAoJWhkIE1CKSBtZW1vcnkgc2l6ZSwgdXNpbmcgU1BFQ0lGSUVEICFcbiIsIG1lbXNpemUsIGZvcmNlc2l6ZVtsX2ZiX2luZm8tPmJvYXJkX251bV0pOwotCQltZW1zaXplID0gMTA0ODU3NiAqIGZvcmNlc2l6ZVtsX2ZiX2luZm8tPmJvYXJkX251bV07Ci0JfQotCQotCWxfZmJfaW5mby0+ZmJfc2l6ZSA9IG1lbXNpemU7Ci0JCi0JaWYgKHB0ciA9PSBwbTNmYl90aW1pbmdfcmV0cnkpCi0JewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbTNmYjogcmV0cnlpbmcgbWVtb3J5IHRpbWluZ3MgY2hlY2siKTsKLQkJaWYgKHBtM2ZiX3RyeV9tZW1vcnlfdGltaW5ncyhsX2ZiX2luZm8pID09IHBtM2ZiX3RpbWluZ19wcm9ibGVtKQotCQkJcmV0dXJuKDApOwotCX0KLQkKLQlyZXR1cm4gKG1lbXNpemUpOwotfQotCi1zdGF0aWMgdm9pZCBwbTNmYl9jbGVhcl9tZW1vcnkoc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbywgdTMyIGNjKQotewotCWludCBpOwotCi0JRFRSQUNFOwotCi0JZm9yIChpID0gMDsgaSA8IChsX2ZiX2luZm8tPmZiX3NpemUgLyBzaXplb2YodTMyKSkgOyBpKyspIC8qIGNsZWFyIGVudGlyZSBGQiBtZW1vcnkgdG8gYmxhY2sgKi8KLQl7Ci0JCWZiX3dyaXRlbChjYywgKGxfZmJfaW5mby0+dl9mYiArIChpICogc2l6ZW9mKHUzMikpKSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwbTNmYl9jbGVhcl9jb2xvcm1hcChzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvLCB1bnNpZ25lZCBjaGFyIHIsIHVuc2lnbmVkIGNoYXIgZywgdW5zaWduZWQgY2hhciBiKQotewotCWludCBpOwotCi0JRFRSQUNFOwotCi0JZm9yIChpID0gMDsgaSA8IDI1NiA7IGkrKykgLyogZmlsbCBjb2xvciBtYXAgd2l0aCB3aGl0ZSAqLwotCQlwbTNmYl9zZXRfY29sb3IobF9mYl9pbmZvLCBpLCByLCBnLCBiKTsKLQotfQotCi0vKiBjb21tb24gaW5pdGlhbGlzYXRpb24gKi8KLXN0YXRpYyB2b2lkIHBtM2ZiX2NvbW1vbl9pbml0KHN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8pCi17Ci0JRFRSQUNFOwotCi0JRFBSSU5USygyLCAiSW5pdGlhbGl6aW5nIGJvYXJkICMlbGQgQCAlbHhcbiIsIGxfZmJfaW5mby0+Ym9hcmRfbnVtLAotCQkodW5zaWduZWQgbG9uZykgbF9mYl9pbmZvKTsKLQotCXN0cmNweShsX2ZiX2luZm8tPmdlbi5pbmZvLm1vZGVuYW1lLCBwZXJtZWRpYTNfbmFtZSk7Ci0JZGlzcFtsX2ZiX2luZm8tPmJvYXJkX251bV0uc2Nyb2xsbW9kZSA9IDA7CS8qIFNDUk9MTF9ZTk9NT1ZFOyAqLy8qIDAgbWVhbnMgImxldCBmYmNvbiBjaG9vc2UiICovCi0JbF9mYl9pbmZvLT5nZW4ucGFyc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG0zZmJfcGFyKTsKLQlsX2ZiX2luZm8tPmdlbi5pbmZvLmNoYW5nZXZhciA9IE5VTEw7Ci0JbF9mYl9pbmZvLT5nZW4uaW5mby5mYm9wcyA9ICZwbTNmYl9vcHM7Ci0JbF9mYl9pbmZvLT5nZW4uaW5mby5kaXNwID0gJihkaXNwW2xfZmJfaW5mby0+Ym9hcmRfbnVtXSk7Ci0JaWYgKGZvbnRuW2xfZmJfaW5mby0+Ym9hcmRfbnVtXVswXSkKLQkJc3RyY3B5KGxfZmJfaW5mby0+Z2VuLmluZm8uZm9udG5hbWUsCi0JCSAgICAgICBmb250bltsX2ZiX2luZm8tPmJvYXJkX251bV0pOwotCWxfZmJfaW5mby0+Z2VuLmluZm8uc3dpdGNoX2NvbiA9ICZmYmdlbl9zd2l0Y2g7Ci0JbF9mYl9pbmZvLT5nZW4uaW5mby51cGRhdGV2YXIgPSAmZmJnZW5fdXBkYXRlX3ZhcjsJLyogKi8KLQlsX2ZiX2luZm8tPmdlbi5pbmZvLmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKLQotCXBtM2ZiX21hcElPKGxfZmJfaW5mbyk7Ci0KLQlwbTNmYl9jbGVhcl9tZW1vcnkobF9mYl9pbmZvLCAwKTsKLQlwbTNmYl9jbGVhcl9jb2xvcm1hcChsX2ZiX2luZm8sIDAsIDAsIDApOwotCi0JKHZvaWQpIGZiZ2VuX2dldF92YXIoJihkaXNwW2xfZmJfaW5mby0+Ym9hcmRfbnVtXSkudmFyLCAtMSwKLQkJCSAgICAgJmxfZmJfaW5mby0+Z2VuLmluZm8pOwotCi0JaWYgKGRlcHRoW2xfZmJfaW5mby0+Ym9hcmRfbnVtXSkgLyogb3ZlcnJpZGUgbW9kZS1kZWZpbmVkIGRlcHRoICovCi0JewotCQlwbTNmYl9lbmNvZGVfZGVwdGgoJihkaXNwW2xfZmJfaW5mby0+Ym9hcmRfbnVtXSkudmFyLCBkZXB0aFtsX2ZiX2luZm8tPmJvYXJkX251bV0pOwotCQkoZGlzcFtsX2ZiX2luZm8tPmJvYXJkX251bV0pLnZhci5iaXRzX3Blcl9waXhlbCA9IGRlcHRoMmJwcChkZXB0aFtsX2ZiX2luZm8tPmJvYXJkX251bV0pOwotCX0KLQotCSh2b2lkKSBmYmdlbl9kb19zZXRfdmFyKCYoZGlzcFtsX2ZiX2luZm8tPmJvYXJkX251bV0pLnZhciwgMSwKLQkJCQkmbF9mYl9pbmZvLT5nZW4pOwotCi0JZmJnZW5fc2V0X2Rpc3AoLTEsICZsX2ZiX2luZm8tPmdlbik7Ci0KLQlkb19pbnN0YWxsX2NtYXAoMCwgJmxfZmJfaW5mby0+Z2VuLmluZm8pOwotCi0JaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZsX2ZiX2luZm8tPmdlbi5pbmZvKSA8IDApIHsKLQkJRFBSSU5USygxLCAiQ291bGRuJ3QgcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JUE0zX1dSSVRFX0RBQ19SRUcoUE0zUkRfQ3Vyc29yTW9kZSwKLQkJCSAgUE0zUkRfQ3Vyc29yTW9kZV9DVVJTT1JfRElTQUJMRSk7Ci0JCi0JUE0zX1NIT1dfQ1VSX01PREU7Ci0JCi0JcG0zZmJfd3JpdGVfbW9kZShsX2ZiX2luZm8pOwotCQotCXByaW50aygiZmIlZDogJXMsIHVzaW5nICV1SyBvZiB2aWRlbyBtZW1vcnkgKCVzKVxuIiwKLQkgICAgICAgbF9mYl9pbmZvLT5nZW4uaW5mby5ub2RlLAotCSAgICAgICBwZXJtZWRpYTNfbmFtZSwgKHUzMikgKGxfZmJfaW5mby0+ZmJfc2l6ZSA+PiAxMCksCi0JICAgICAgIGNhcmRiYXNlW2xfZmJfaW5mby0+Ym9hcmRfdHlwZV0uY2FyZG5hbWUpOwotfQotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0vKiAqKioqKiBhY2NlbGVyYXRlZCBwZXJtZWRpYTMtc3BlY2lmaWMgZnVuY3Rpb25zICoqKioqICovCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0jaWZkZWYgUE0zRkJfVVNFX0FDQ0VMCi1zdGF0aWMgdm9pZCBwbTNmYl93YWl0X3BtMyhzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvKQotewotCURUUkFDRTsKLQotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNGaWx0ZXJNb2RlLCBQTTNGaWx0ZXJNb2RlU3luYyk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1N5bmMsIDApOwotCW1iKCk7Ci0JZG8gewotCQl3aGlsZSAoKFBNM19SRUFEX1JFRyhQTTNPdXRGSUZPV29yZHMpKSA9PSAwKTsKLQkJcm1iKCk7Ci0JfSB3aGlsZSAoKFBNM19SRUFEX1JFRyhQTTNPdXRwdXRGaWZvKSkgIT0gUE0zU3luY19UYWcpOwotfQotCi1zdGF0aWMgdm9pZCBwbTNmYl9pbml0X2VuZ2luZShzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvKQotewotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNGaWx0ZXJNb2RlLCBQTTNGaWx0ZXJNb2RlU3luYyk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1N0YXRpc3RpY01vZGUsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0RlbHRhTW9kZSwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zUmFzdGVyaXplck1vZGUsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1NjaXNzb3JNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNMaW5lU3RpcHBsZU1vZGUsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0FyZWFTdGlwcGxlTW9kZSwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zR0lETW9kZSwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zRGVwdGhNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNTdGVuY2lsTW9kZSwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zU3RlbmNpbERhdGEsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0NvbG9yRERBTW9kZSwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zVGV4dHVyZUNvb3JkTW9kZSwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zVGV4dHVyZUluZGV4TW9kZTAsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1RleHR1cmVJbmRleE1vZGUxLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNUZXh0dXJlUmVhZE1vZGUsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0xVVE1vZGUsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1RleHR1cmVGaWx0ZXJNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNUZXh0dXJlQ29tcG9zaXRlTW9kZSwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zVGV4dHVyZUFwcGxpY2F0aW9uTW9kZSwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zVGV4dHVyZUNvbXBvc2l0ZUNvbG9yTW9kZTEsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1RleHR1cmVDb21wb3NpdGVBbHBoYU1vZGUxLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNUZXh0dXJlQ29tcG9zaXRlQ29sb3JNb2RlMCwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zVGV4dHVyZUNvbXBvc2l0ZUFscGhhTW9kZTAsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0ZvZ01vZGUsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0Nocm9tYVRlc3RNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNBbHBoYVRlc3RNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNBbnRpYWxpYXNNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNZVVZNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNBbHBoYUJsZW5kQ29sb3JNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNBbHBoYUJsZW5kQWxwaGFNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNEaXRoZXJNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNMb2dpY2FsT3BNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNSb3V0ZXJNb2RlLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNXaW5kb3csIDB4MCk7Ci0KLQlQTTNfU0xPV19XUklURV9SRUcoUE0zQ29uZmlnMkQsIDB4MCk7Ci0KLQlQTTNfU0xPV19XUklURV9SRUcoUE0zU3BhbkNvbG9yTWFzaywgMHhmZmZmZmZmZik7Ci0KLQlQTTNfU0xPV19XUklURV9SRUcoUE0zWEJpYXMsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1lCaWFzLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNEZWx0YUNvbnRyb2wsIDB4MCk7Ci0KLQlQTTNfU0xPV19XUklURV9SRUcoUE0zQml0TWFza1BhdHRlcm4sIDB4ZmZmZmZmZmYpOwotCi0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0ZCRGVzdFJlYWRFbmFibGVzLAotCQkJICAgUE0zRkJEZXN0UmVhZEVuYWJsZXNfRSgweGZmKSB8Ci0JCQkgICBQTTNGQkRlc3RSZWFkRW5hYmxlc19SKDB4ZmYpIHwKLQkJCSAgIFBNM0ZCRGVzdFJlYWRFbmFibGVzX1JlZmVyZW5jZUFscGhhKDB4ZmYpKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zRkJEZXN0UmVhZEJ1ZmZlckFkZHIwLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNGQkRlc3RSZWFkQnVmZmVyT2Zmc2V0MCwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zRkJEZXN0UmVhZEJ1ZmZlcldpZHRoMCwKLQkJCSAgIFBNM0ZCRGVzdFJlYWRCdWZmZXJXaWR0aF9XaWR0aChsX2ZiX2luZm8tPgotCQkJCQkJCSAgY3VycmVudF9wYXItPgotCQkJCQkJCSAgd2lkdGgpKTsKLQotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNGQkRlc3RSZWFkTW9kZSwKLQkJCSAgIFBNM0ZCRGVzdFJlYWRNb2RlX1JlYWRFbmFibGUgfAotCQkJICAgUE0zRkJEZXN0UmVhZE1vZGVfRW5hYmxlMCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0ZCU291cmNlUmVhZEJ1ZmZlckFkZHIsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0ZCU291cmNlUmVhZEJ1ZmZlck9mZnNldCwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zRkJTb3VyY2VSZWFkQnVmZmVyV2lkdGgsCi0JCQkgICBQTTNGQlNvdXJjZVJlYWRCdWZmZXJXaWR0aF9XaWR0aChsX2ZiX2luZm8tPgotCQkJCQkJCSAgICBjdXJyZW50X3Bhci0+Ci0JCQkJCQkJICAgIHdpZHRoKSk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0ZCU291cmNlUmVhZE1vZGUsCi0JCQkgICBQTTNGQlNvdXJjZVJlYWRNb2RlX0Jsb2NraW5nIHwKLQkJCSAgIFBNM0ZCU291cmNlUmVhZE1vZGVfUmVhZEVuYWJsZSk7Ci0KLQl7Ci0JCXVuc2lnbmVkIGxvbmcgcm0gPSAxOwotCQlzd2l0Y2ggKGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoKSB7CisJCXN3aXRjaCh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CiAJCWNhc2UgODoKLQkJCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNQaXhlbFNpemUsCi0JCQkJCSAgIFBNM1BpeGVsU2l6ZV9HTE9CQUxfOEJJVCk7CisJCQl2YXItPnJlZC5sZW5ndGggPSB2YXItPmdyZWVuLmxlbmd0aCA9IHZhci0+Ymx1ZS5sZW5ndGggPSA4OworCQkJdmFyLT5yZWQub2Zmc2V0ID0gdmFyLT5ncmVlbi5vZmZzZXQgPSB2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CisJCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCQkJYnJlYWs7Ci0JCWNhc2UgMTI6Ci0JCWNhc2UgMTU6CiAJCWNhc2UgMTY6Ci0JCQlQTTNfU0xPV19XUklURV9SRUcoUE0zUGl4ZWxTaXplLAotCQkJCQkgICBQTTNQaXhlbFNpemVfR0xPQkFMXzE2QklUKTsKKwkJCXZhci0+cmVkLmxlbmd0aCA9IHZhci0+Ymx1ZS5sZW5ndGggPSA1OworCQkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OworCQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIDMyOgotCQkJUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1BpeGVsU2l6ZSwKLQkJCQkJICAgUE0zUGl4ZWxTaXplX0dMT0JBTF8zMkJJVCk7CisJCQl2YXItPnJlZC5sZW5ndGggPSB2YXItPmdyZWVuLmxlbmd0aCA9IHZhci0+Ymx1ZS5sZW5ndGggPSA4OworCQkJdmFyLT50cmFuc3AubGVuZ3RoID0gODsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJRFBSSU5USygxLCAiVW5zdXBwb3J0ZWQgZGVwdGggJWRcbiIsCi0JCQkJbF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGgpOwotCQkJYnJlYWs7CisJCQlEUFJJTlRLKCJkZXB0aCBub3Qgc3VwcG9ydGVkOiAldVxuIiwgdmFyLT5iaXRzX3Blcl9waXhlbCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlQTTNfU0xPV19XUklURV9SRUcoUE0zUmFzdGVyaXplck1vZGUsIHJtKTsKIAl9Ci0KLQlQTTNfU0xPV19XUklURV9SRUcoUE0zRkJTb2Z0d2FyZVdyaXRlTWFzaywgMHhmZmZmZmZmZik7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0ZCSGFyZHdhcmVXcml0ZU1hc2ssIDB4ZmZmZmZmZmYpOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNGQldyaXRlTW9kZSwKLQkJCSAgIFBNM0ZCV3JpdGVNb2RlX1dyaXRlRW5hYmxlIHwKLQkJCSAgIFBNM0ZCV3JpdGVNb2RlX09wYXF1ZVNwYW4gfAotCQkJICAgUE0zRkJXcml0ZU1vZGVfRW5hYmxlMCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0ZCV3JpdGVCdWZmZXJBZGRyMCwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zRkJXcml0ZUJ1ZmZlck9mZnNldDAsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0ZCV3JpdGVCdWZmZXJXaWR0aDAsCi0JCQkgICBQTTNGQldyaXRlQnVmZmVyV2lkdGhfV2lkdGgobF9mYl9pbmZvLT4KLQkJCQkJCSAgICAgICBjdXJyZW50X3Bhci0+Ci0JCQkJCQkgICAgICAgd2lkdGgpKTsKLQotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNTaXplT2ZGcmFtZWJ1ZmZlciwgMHgwKTsKKwkvKiBpdCBpcyBhc3N1bWVkIEJHUkEgb3JkZXIgKi8KKwlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA+IDggKQogCXsKLQkJdW5zaWduZWQgbG9uZyBzb2ZiID0gKDhVTCAqIGxfZmJfaW5mby0+ZmJfc2l6ZSkgLwotCQkJKChkZXB0aDJicHAobF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGgpKQotCQkJICogbF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+d2lkdGgpOwkvKiBzaXplIGluIGxpbmVzIG9mIEZCICovCi0JCWlmIChzb2ZiID4gNDA5NSkKLQkJCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNTaXplT2ZGcmFtZWJ1ZmZlciwgNDA5NSk7Ci0JCWVsc2UKLQkJCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNTaXplT2ZGcmFtZWJ1ZmZlciwgc29mYik7Ci0JCQotCQlzd2l0Y2ggKGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoKSB7Ci0JCWNhc2UgODoKLQkJCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNEaXRoZXJNb2RlLAotCQkJCQkgICAoMSA8PCAxMCkgfCAoMiA8PCAzKSk7Ci0JCQlicmVhazsKLQkJY2FzZSAxMjoKLQkJY2FzZSAxNToKLQkJY2FzZSAxNjoKLQkJCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNEaXRoZXJNb2RlLAotCQkJCQkgICAoMSA8PCAxMCkgfCAoMSA8PCAzKSk7Ci0JCQlicmVhazsKLQkJY2FzZSAzMjoKLQkJCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNEaXRoZXJNb2RlLAotCQkJCQkgICAoMSA8PCAxMCkgfCAoMCA8PCAzKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCURQUklOVEsoMSwgIlVuc3VwcG9ydGVkIGRlcHRoICVkXG4iLAotCQkJCWxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM2RYRG9tLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNkWFN1YiwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zZFksICgxIDw8IDE2KSk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1N0YXJ0WERvbSwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zU3RhcnRYU3ViLCAweDApOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNTdGFydFksIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0NvdW50LCAweDApOwotCQotLyogRGlzYWJsZSBMb2NhbEJ1ZmZlci4gYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSAqLwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNMQkRlc3RSZWFkTW9kZSwgMHgwKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zTEJEZXN0UmVhZEVuYWJsZXMsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0xCU291cmNlUmVhZE1vZGUsIDB4MCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0xCV3JpdGVNb2RlLCAweDApOwotCQotCXBtM2ZiX3dhaXRfcG0zKGxfZmJfaW5mbyk7Ci19Ci0KLSNpZmRlZiBGQkNPTl9IQVNfQ0ZCMzIKLXN0YXRpYyB2b2lkIHBtM2ZiX2NmYjMyX2NsZWFyKHN0cnVjdCB2Y19kYXRhICpjb25wLAotCQkJICAgICAgc3RydWN0IGRpc3BsYXkgKnAsCi0JCQkgICAgICBpbnQgc3ksIGludCBzeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQotewotCXN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8gPSAoc3RydWN0IHBtM2ZiX2luZm8gKikgcC0+ZmJfaW5mbzsKLQl1MzIgYzsKLQotCURUUkFDRTsKLQotCXN4ID0gc3ggKiBmb250d2lkdGgocCk7Ci0Jd2lkdGggPSB3aWR0aCAqIGZvbnR3aWR0aChwKTsKLQlzeSA9IHN5ICogZm9udGhlaWdodChwKTsKLQloZWlnaHQgPSBoZWlnaHQgKiBmb250aGVpZ2h0KHApOwotCWMgPSAoKHUzMiAqKSBwLT5kaXNwc3dfZGF0YSlbYXR0cl9iZ2NvbF9lYyhwLCBjb25wKV07Ci0KLQkvKiBibG9jayBmaWxscyBpbiAzMmJwcCBhcmUgaGFyZCwgYnV0IGluIGxvdyByZXMgKHdpZHRoIDw9IDE2MDAgOi0pCi0JICAgd2UgY2FuIHVzZSAxNmJwcCBvcGVyYXRpb25zLCBidXQgbm90IGlmIE5vV3JpdGVNYXNrIGlzIG9uIChTRFJBTSkgICovCi0JaWYgKChsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT53aWR0aCA+IDE2MDApIHx8Ci0JICAgIChsX2ZiX2luZm8tPm1lbXQuY2FwcyAmIFBNM0xvY2FsTWVtQ2Fwc19Ob1dyaXRlTWFzaykpIHsKLQkJUE0zX1dBSVQoNCk7Ci0KLQkJUE0zX1dSSVRFX1JFRyhQTTNDb25maWcyRCwKLQkJCQkJICBQTTNDb25maWcyRF9Vc2VDb25zdGFudFNvdXJjZSB8Ci0JCQkJCSAgUE0zQ29uZmlnMkRfRm9yZWdyb3VuZFJPUEVuYWJsZSB8Ci0JCQkJCSAgKFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1AoMHgzKSkgfAkvKiBPeDMgaXMgR1hjb3B5ICovCi0JCQkJCSAgUE0zQ29uZmlnMkRfRkJXcml0ZUVuYWJsZSk7Ci0KLQkJUE0zX1dSSVRFX1JFRyhQTTNGb3JlZ3JvdW5kQ29sb3IsIGMpOwotCi0JCVBNM19XUklURV9SRUcoUE0zUmVjdGFuZ2xlUG9zaXRpb24sCi0JCQkgICAgICAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWE9mZnNldChzeCkpIHwKLQkJCSAgICAgIChQTTNSZWN0YW5nbGVQb3NpdGlvbl9ZT2Zmc2V0KHN5KSkpOwotCi0JCVBNM19XUklURV9SRUcoUE0zUmVuZGVyMkQsCi0JCQkgICAgICBQTTNSZW5kZXIyRF9YUG9zaXRpdmUgfAotCQkJICAgICAgUE0zUmVuZGVyMkRfWVBvc2l0aXZlIHwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX09wZXJhdGlvbl9Ob3JtYWwgfAotCQkJICAgICAgUE0zUmVuZGVyMkRfU3Bhbk9wZXJhdGlvbiB8Ci0JCQkgICAgICAoUE0zUmVuZGVyMkRfV2lkdGgod2lkdGgpKSB8Ci0JCQkgICAgICAoUE0zUmVuZGVyMkRfSGVpZ2h0KGhlaWdodCkpKTsKLQl9IGVsc2UgewotCQlQTTNfV0FJVCg4KTsKLQotCQlQTTNfV1JJVEVfUkVHKFBNM0ZCQmxvY2tDb2xvciwgYyk7Ci0KLQkJUE0zX1dSSVRFX1JFRyhQTTNQaXhlbFNpemUsIFBNM1BpeGVsU2l6ZV9HTE9CQUxfMTZCSVQpOwotCi0JCVBNM19XUklURV9SRUcoUE0zRkJXcml0ZUJ1ZmZlcldpZHRoMCwKLQkJCSAgICAgIFBNM0ZCV3JpdGVCdWZmZXJXaWR0aF9XaWR0aChsX2ZiX2luZm8tPgotCQkJCQkJCSAgY3VycmVudF9wYXItPgotCQkJCQkJCSAgd2lkdGggPDwgMSkpOwotCi0JCVBNM19XUklURV9SRUcoUE0zQ29uZmlnMkQsCi0JCQkJCSAgUE0zQ29uZmlnMkRfVXNlQ29uc3RhbnRTb3VyY2UgfAotCQkJCQkgIFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1BFbmFibGUgfAotCQkJCQkgIChQTTNDb25maWcyRF9Gb3JlZ3JvdW5kUk9QKDB4MykpIHwJLyogT3gzIGlzIEdYY29weSAqLwotCQkJCQkgIFBNM0NvbmZpZzJEX0ZCV3JpdGVFbmFibGUpOwotCi0JCVBNM19XUklURV9SRUcoUE0zUmVjdGFuZ2xlUG9zaXRpb24sCi0JCQkgICAgICAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWE9mZnNldChzeCA8PCAxKSkgfAotCQkJICAgICAgKFBNM1JlY3RhbmdsZVBvc2l0aW9uX1lPZmZzZXQoc3kpKSk7Ci0KLQkJUE0zX1dSSVRFX1JFRyhQTTNSZW5kZXIyRCwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX1hQb3NpdGl2ZSB8Ci0JCQkgICAgICBQTTNSZW5kZXIyRF9ZUG9zaXRpdmUgfAotCQkJICAgICAgUE0zUmVuZGVyMkRfT3BlcmF0aW9uX05vcm1hbCB8Ci0JCQkgICAgICAoUE0zUmVuZGVyMkRfV2lkdGgod2lkdGggPDwgMSkpIHwKLQkJCSAgICAgIChQTTNSZW5kZXIyRF9IZWlnaHQoaGVpZ2h0KSkpOwotCi0JCVBNM19XUklURV9SRUcoUE0zRkJXcml0ZUJ1ZmZlcldpZHRoMCwKLQkJCSAgICAgIFBNM0ZCV3JpdGVCdWZmZXJXaWR0aF9XaWR0aChsX2ZiX2luZm8tPgotCQkJCQkJCSAgY3VycmVudF9wYXItPgotCQkJCQkJCSAgd2lkdGgpKTsKLQotCQlQTTNfV1JJVEVfUkVHKFBNM1BpeGVsU2l6ZSwgUE0zUGl4ZWxTaXplX0dMT0JBTF8zMkJJVCk7Ci0JfQotCi0JcG0zZmJfd2FpdF9wbTMobF9mYl9pbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgcG0zZmJfY2ZiMzJfY2xlYXJfbWFyZ2lucyhzdHJ1Y3QgdmNfZGF0YSAqY29ucCwKLQkJCQkgICAgICBzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IGJvdHRvbV9vbmx5KQotewotCXN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8gPSAoc3RydWN0IHBtM2ZiX2luZm8gKikgcC0+ZmJfaW5mbzsKLQlpbnQgc3gsIHN5OwotCXUzMiBjOwotCi0JRFRSQUNFOwotCi0Jc3ggPSBjb25wLT52Y19jb2xzICogZm9udHdpZHRoKHApOwkvKiByaWdodCBtYXJnaW4gKi8KLQlzeSA9IGNvbnAtPnZjX3Jvd3MgKiBmb250aGVpZ2h0KHApOwkvKiBib3R0b20gbWFyZ2luICovCi0JYyA9ICgodTMyICopIHAtPmRpc3Bzd19kYXRhKVthdHRyX2JnY29sX2VjKHAsIGNvbnApXTsKLQotCWlmICghYm90dG9tX29ubHkpIHsJLyogcmlnaHQgbWFyZ2luIHRvcC0+Ym90dG9tICovCi0JCVBNM19XQUlUKDQpOwotCi0JCVBNM19XUklURV9SRUcoUE0zQ29uZmlnMkQsCi0JCQkJCSAgUE0zQ29uZmlnMkRfVXNlQ29uc3RhbnRTb3VyY2UgfAotCQkJCQkgIFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1BFbmFibGUgfAotCQkJCQkgIChQTTNDb25maWcyRF9Gb3JlZ3JvdW5kUk9QKDB4MykpIHwJLyogT3gzIGlzIEdYY29weSAqLwotCQkJCQkgIFBNM0NvbmZpZzJEX0ZCV3JpdGVFbmFibGUpOwotCi0JCVBNM19XUklURV9SRUcoUE0zRm9yZWdyb3VuZENvbG9yLCBjKTsKLQotCQlQTTNfV1JJVEVfUkVHKFBNM1JlY3RhbmdsZVBvc2l0aW9uLAotCQkJICAgICAgKFBNM1JlY3RhbmdsZVBvc2l0aW9uX1hPZmZzZXQKLQkJCSAgICAgICAocC0+dmFyLnhvZmZzZXQgKwotCQkJCXN4KSkgfCAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWU9mZnNldChwLT4KLQkJCQkJCQkJICAgICB2YXIuCi0JCQkJCQkJCSAgICAgeW9mZnNldCkpKTsKLQotCQlQTTNfV1JJVEVfUkVHKFBNM1JlbmRlcjJELAotCQkJICAgICAgUE0zUmVuZGVyMkRfWFBvc2l0aXZlIHwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX1lQb3NpdGl2ZSB8Ci0JCQkgICAgICBQTTNSZW5kZXIyRF9PcGVyYXRpb25fTm9ybWFsIHwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX1NwYW5PcGVyYXRpb24gfAotCQkJICAgICAgKFBNM1JlbmRlcjJEX1dpZHRoKHAtPnZhci54cmVzIC0gc3gpKSB8Ci0JCQkgICAgICAoUE0zUmVuZGVyMkRfSGVpZ2h0KHAtPnZhci55cmVzKSkpOwotCX0KLQotCS8qIGJvdHRvbSBtYXJnaW4gbGVmdCAtPiByaWdodCAqLwotCVBNM19XQUlUKDQpOwotCi0JUE0zX1dSSVRFX1JFRyhQTTNDb25maWcyRCwKLQkJCQkgIFBNM0NvbmZpZzJEX1VzZUNvbnN0YW50U291cmNlIHwKLQkJCQkgIFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1BFbmFibGUgfAotCQkJCSAgKFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1AoMHgzKSkgfAkvKiBPeDMgaXMgR1hjb3B5ICovCi0JCQkJICBQTTNDb25maWcyRF9GQldyaXRlRW5hYmxlKTsKLQotCVBNM19XUklURV9SRUcoUE0zRm9yZWdyb3VuZENvbG9yLCBjKTsKLQotCVBNM19XUklURV9SRUcoUE0zUmVjdGFuZ2xlUG9zaXRpb24sCi0JCSAgICAgIChQTTNSZWN0YW5nbGVQb3NpdGlvbl9YT2Zmc2V0KHAtPnZhci54b2Zmc2V0KSkgfAotCQkgICAgICAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWU9mZnNldChwLT52YXIueW9mZnNldCArIHN5KSkpOwotCi0JUE0zX1dSSVRFX1JFRyhQTTNSZW5kZXIyRCwKLQkJICAgICAgUE0zUmVuZGVyMkRfWFBvc2l0aXZlIHwKLQkJICAgICAgUE0zUmVuZGVyMkRfWVBvc2l0aXZlIHwKLQkJICAgICAgUE0zUmVuZGVyMkRfT3BlcmF0aW9uX05vcm1hbCB8Ci0JCSAgICAgIFBNM1JlbmRlcjJEX1NwYW5PcGVyYXRpb24gfAotCQkgICAgICAoUE0zUmVuZGVyMkRfV2lkdGgocC0+dmFyLnhyZXMpKSB8Ci0JCSAgICAgIChQTTNSZW5kZXIyRF9IZWlnaHQocC0+dmFyLnlyZXMgLSBzeSkpKTsKLQotCXBtM2ZiX3dhaXRfcG0zKGxfZmJfaW5mbyk7Ci19Ci0jZW5kaWYgLyogRkJDT05fSEFTX0NGQjMyICovCi0jaWZkZWYgRkJDT05fSEFTX0NGQjE2Ci1zdGF0aWMgdm9pZCBwbTNmYl9jZmIxNl9jbGVhcihzdHJ1Y3QgdmNfZGF0YSAqY29ucCwKLQkJCSAgICAgIHN0cnVjdCBkaXNwbGF5ICpwLAotCQkJICAgICAgaW50IHN5LCBpbnQgc3gsIGludCBoZWlnaHQsIGludCB3aWR0aCkKLXsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvID0gKHN0cnVjdCBwbTNmYl9pbmZvICopIHAtPmZiX2luZm87Ci0JdTMyIGM7Ci0KLQlEVFJBQ0U7Ci0KLQlzeCA9IHN4ICogZm9udHdpZHRoKHApOwotCXdpZHRoID0gd2lkdGggKiBmb250d2lkdGgocCk7Ci0Jc3kgPSBzeSAqIGZvbnRoZWlnaHQocCk7Ci0JaGVpZ2h0ID0gaGVpZ2h0ICogZm9udGhlaWdodChwKTsKLQljID0gKCh1MTYgKikgcC0+ZGlzcHN3X2RhdGEpW2F0dHJfYmdjb2xfZWMocCwgY29ucCldOwotCWMgPSBjIHwgKGMgPDwgMTYpOwotCi0JUE0zX1dBSVQoNCk7Ci0KLQlpZiAobF9mYl9pbmZvLT5tZW10LmNhcHMgJiBQTTNMb2NhbE1lbUNhcHNfTm9Xcml0ZU1hc2spCi0JCVBNM19XUklURV9SRUcoUE0zRm9yZWdyb3VuZENvbG9yLCBjKTsKLQllbHNlCi0JCVBNM19XUklURV9SRUcoUE0zRkJCbG9ja0NvbG9yLCBjKTsKLQotCVBNM19XUklURV9SRUcoUE0zQ29uZmlnMkQsCi0JCQkJICBQTTNDb25maWcyRF9Vc2VDb25zdGFudFNvdXJjZSB8Ci0JCQkJICBQTTNDb25maWcyRF9Gb3JlZ3JvdW5kUk9QRW5hYmxlIHwKLQkJCQkgIChQTTNDb25maWcyRF9Gb3JlZ3JvdW5kUk9QKDB4MykpIHwJLyogT3gzIGlzIEdYY29weSAqLwotCQkJCSAgUE0zQ29uZmlnMkRfRkJXcml0ZUVuYWJsZSk7Ci0KLQlQTTNfV1JJVEVfUkVHKFBNM1JlY3RhbmdsZVBvc2l0aW9uLAotCQkgICAgICAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWE9mZnNldChzeCkpIHwKLQkJICAgICAgKFBNM1JlY3RhbmdsZVBvc2l0aW9uX1lPZmZzZXQoc3kpKSk7Ci0JCi0JaWYgKGxfZmJfaW5mby0+bWVtdC5jYXBzICYgUE0zTG9jYWxNZW1DYXBzX05vV3JpdGVNYXNrKQotCQlQTTNfV1JJVEVfUkVHKFBNM1JlbmRlcjJELAotCQkJICAgICAgUE0zUmVuZGVyMkRfWFBvc2l0aXZlIHwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX1lQb3NpdGl2ZSB8Ci0JCQkgICAgICBQTTNSZW5kZXIyRF9PcGVyYXRpb25fTm9ybWFsIHwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX1NwYW5PcGVyYXRpb24gfAotCQkJICAgICAgKFBNM1JlbmRlcjJEX1dpZHRoKHdpZHRoKSkgfAotCQkJICAgICAgKFBNM1JlbmRlcjJEX0hlaWdodChoZWlnaHQpKSk7Ci0JZWxzZQotCQlQTTNfV1JJVEVfUkVHKFBNM1JlbmRlcjJELAotCQkJICAgICAgUE0zUmVuZGVyMkRfWFBvc2l0aXZlIHwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX1lQb3NpdGl2ZSB8Ci0JCQkgICAgICBQTTNSZW5kZXIyRF9PcGVyYXRpb25fTm9ybWFsIHwKLQkJCSAgICAgIChQTTNSZW5kZXIyRF9XaWR0aCh3aWR0aCkpIHwKLQkJCSAgICAgIChQTTNSZW5kZXIyRF9IZWlnaHQoaGVpZ2h0KSkpOwotCQotCXBtM2ZiX3dhaXRfcG0zKGxfZmJfaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBtM2ZiX2NmYjE2X2NsZWFyX21hcmdpbnMoc3RydWN0IHZjX2RhdGEgKmNvbnAsCi0JCQkJICAgICAgc3RydWN0IGRpc3BsYXkgKnAsIGludCBib3R0b21fb25seSkKLXsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvID0gKHN0cnVjdCBwbTNmYl9pbmZvICopIHAtPmZiX2luZm87Ci0JaW50IHN4LCBzeTsKLQl1MzIgYzsKLQotCURUUkFDRTsKLQotCXN4ID0gY29ucC0+dmNfY29scyAqIGZvbnR3aWR0aChwKTsJLyogcmlnaHQgbWFyZ2luICovCi0Jc3kgPSBjb25wLT52Y19yb3dzICogZm9udGhlaWdodChwKTsJLyogYm90dG9tIG1hcmdpbiAqLwotCWMgPSAoKHUxNiAqKSBwLT5kaXNwc3dfZGF0YSlbYXR0cl9iZ2NvbF9lYyhwLCBjb25wKV07Ci0JYyA9IGMgfCAoYyA8PCAxNik7Ci0KLQlpZiAoIWJvdHRvbV9vbmx5KSB7CS8qIHJpZ2h0IG1hcmdpbiB0b3AtPmJvdHRvbSAqLwotCQlQTTNfV0FJVCg0KTsKLQotCQlQTTNfV1JJVEVfUkVHKFBNM0NvbmZpZzJELAotCQkJCQkgIFBNM0NvbmZpZzJEX1VzZUNvbnN0YW50U291cmNlIHwKLQkJCQkJICBQTTNDb25maWcyRF9Gb3JlZ3JvdW5kUk9QRW5hYmxlIHwKLQkJCQkJICAoUE0zQ29uZmlnMkRfRm9yZWdyb3VuZFJPUCgweDMpKSB8CS8qIE94MyBpcyBHWGNvcHkgKi8KLQkJCQkJICBQTTNDb25maWcyRF9GQldyaXRlRW5hYmxlKTsKLQkJCi0JCWlmIChsX2ZiX2luZm8tPm1lbXQuY2FwcyAmIFBNM0xvY2FsTWVtQ2Fwc19Ob1dyaXRlTWFzaykKLQkJCVBNM19XUklURV9SRUcoUE0zRm9yZWdyb3VuZENvbG9yLCBjKTsKLQkJZWxzZQotCQkJUE0zX1dSSVRFX1JFRyhQTTNGQkJsb2NrQ29sb3IsIGMpOwotCQkKLQkJUE0zX1dSSVRFX1JFRyhQTTNSZWN0YW5nbGVQb3NpdGlvbiwKLQkJCSAgICAgIChQTTNSZWN0YW5nbGVQb3NpdGlvbl9YT2Zmc2V0Ci0JCQkgICAgICAgKHAtPnZhci54b2Zmc2V0ICsKLQkJCQlzeCkpIHwgKFBNM1JlY3RhbmdsZVBvc2l0aW9uX1lPZmZzZXQocC0+Ci0JCQkJCQkJCSAgICAgdmFyLgotCQkJCQkJCQkgICAgIHlvZmZzZXQpKSk7Ci0JCWlmIChsX2ZiX2luZm8tPm1lbXQuY2FwcyAmIFBNM0xvY2FsTWVtQ2Fwc19Ob1dyaXRlTWFzaykKLQkJCVBNM19XUklURV9SRUcoUE0zUmVuZGVyMkQsCi0JCQkJICAgICAgUE0zUmVuZGVyMkRfWFBvc2l0aXZlIHwKLQkJCQkgICAgICBQTTNSZW5kZXIyRF9ZUG9zaXRpdmUgfAotCQkJCSAgICAgIFBNM1JlbmRlcjJEX09wZXJhdGlvbl9Ob3JtYWwgfAotCQkJCSAgICAgIFBNM1JlbmRlcjJEX1NwYW5PcGVyYXRpb24gfAotCQkJCSAgICAgIChQTTNSZW5kZXIyRF9XaWR0aChwLT52YXIueHJlcyAtIHN4KSkgfAotCQkJCSAgICAgIChQTTNSZW5kZXIyRF9IZWlnaHQocC0+dmFyLnlyZXMpKSk7Ci0JCWVsc2UKLQkJCVBNM19XUklURV9SRUcoUE0zUmVuZGVyMkQsCi0JCQkJICAgICAgUE0zUmVuZGVyMkRfWFBvc2l0aXZlIHwKLQkJCQkgICAgICBQTTNSZW5kZXIyRF9ZUG9zaXRpdmUgfAotCQkJCSAgICAgIFBNM1JlbmRlcjJEX09wZXJhdGlvbl9Ob3JtYWwgfAotCQkJCSAgICAgIChQTTNSZW5kZXIyRF9XaWR0aChwLT52YXIueHJlcyAtIHN4KSkgfAotCQkJCSAgICAgIChQTTNSZW5kZXIyRF9IZWlnaHQocC0+dmFyLnlyZXMpKSk7Ci0JfQotCQotCS8qIGJvdHRvbSBtYXJnaW4gbGVmdCAtPiByaWdodCAqLwotCVBNM19XQUlUKDQpOwotCQotCVBNM19XUklURV9SRUcoUE0zQ29uZmlnMkQsCi0JCSAgICAgIFBNM0NvbmZpZzJEX1VzZUNvbnN0YW50U291cmNlIHwKLQkJICAgICAgUE0zQ29uZmlnMkRfRm9yZWdyb3VuZFJPUEVuYWJsZSB8Ci0JCSAgICAgIChQTTNDb25maWcyRF9Gb3JlZ3JvdW5kUk9QKDB4MykpIHwJLyogT3gzIGlzIEdYY29weSAqLwotCQkgICAgICBQTTNDb25maWcyRF9GQldyaXRlRW5hYmxlKTsKLQkKLQlpZiAobF9mYl9pbmZvLT5tZW10LmNhcHMgJiBQTTNMb2NhbE1lbUNhcHNfTm9Xcml0ZU1hc2spCi0JCVBNM19XUklURV9SRUcoUE0zRm9yZWdyb3VuZENvbG9yLCBjKTsKLQllbHNlCi0JCVBNM19XUklURV9SRUcoUE0zRkJCbG9ja0NvbG9yLCBjKTsKLQkKLQkKLQlQTTNfV1JJVEVfUkVHKFBNM1JlY3RhbmdsZVBvc2l0aW9uLAotCQkgICAgICAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWE9mZnNldChwLT52YXIueG9mZnNldCkpIHwKLQkJICAgICAgKFBNM1JlY3RhbmdsZVBvc2l0aW9uX1lPZmZzZXQocC0+dmFyLnlvZmZzZXQgKyBzeSkpKTsKLQkKLQlpZiAobF9mYl9pbmZvLT5tZW10LmNhcHMgJiBQTTNMb2NhbE1lbUNhcHNfTm9Xcml0ZU1hc2spCi0JCVBNM19XUklURV9SRUcoUE0zUmVuZGVyMkQsCi0JCQkgICAgICBQTTNSZW5kZXIyRF9YUG9zaXRpdmUgfAotCQkJICAgICAgUE0zUmVuZGVyMkRfWVBvc2l0aXZlIHwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX09wZXJhdGlvbl9Ob3JtYWwgfAotCQkJICAgICAgUE0zUmVuZGVyMkRfU3Bhbk9wZXJhdGlvbiB8Ci0JCQkgICAgICAoUE0zUmVuZGVyMkRfV2lkdGgocC0+dmFyLnhyZXMpKSB8Ci0JCQkgICAgICAoUE0zUmVuZGVyMkRfSGVpZ2h0KHAtPnZhci55cmVzIC0gc3kpKSk7Ci0JZWxzZQotCQlQTTNfV1JJVEVfUkVHKFBNM1JlbmRlcjJELAotCQkJICAgICAgUE0zUmVuZGVyMkRfWFBvc2l0aXZlIHwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX1lQb3NpdGl2ZSB8Ci0JCQkgICAgICBQTTNSZW5kZXIyRF9PcGVyYXRpb25fTm9ybWFsIHwKLQkJCSAgICAgIChQTTNSZW5kZXIyRF9XaWR0aChwLT52YXIueHJlcykpIHwKLQkJCSAgICAgIChQTTNSZW5kZXIyRF9IZWlnaHQocC0+dmFyLnlyZXMgLSBzeSkpKTsKLQotCXBtM2ZiX3dhaXRfcG0zKGxfZmJfaW5mbyk7Ci19Ci0jZW5kaWYgLyogRkJDT05fSEFTX0NGQjE2ICovCi0jaWZkZWYgRkJDT05fSEFTX0NGQjgKLXN0YXRpYyB2b2lkIHBtM2ZiX2NmYjhfY2xlYXIoc3RydWN0IHZjX2RhdGEgKmNvbnAsCi0JCQkgICAgIHN0cnVjdCBkaXNwbGF5ICpwLAotCQkJICAgICBpbnQgc3ksIGludCBzeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQotewotCXN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8gPSAoc3RydWN0IHBtM2ZiX2luZm8gKikgcC0+ZmJfaW5mbzsKLQl1MzIgYzsKLQotCURUUkFDRTsKLQotCXN4ID0gc3ggKiBmb250d2lkdGgocCk7Ci0Jd2lkdGggPSB3aWR0aCAqIGZvbnR3aWR0aChwKTsKLQlzeSA9IHN5ICogZm9udGhlaWdodChwKTsKLQloZWlnaHQgPSBoZWlnaHQgKiBmb250aGVpZ2h0KHApOwotCi0JYyA9IGF0dHJfYmdjb2xfZWMocCwgY29ucCk7Ci0JYyB8PSBjIDw8IDg7Ci0JYyB8PSBjIDw8IDE2OwotCi0JUE0zX1dBSVQoNCk7Ci0KLQlQTTNfV1JJVEVfUkVHKFBNM0NvbmZpZzJELAotCQkJCSAgUE0zQ29uZmlnMkRfVXNlQ29uc3RhbnRTb3VyY2UgfAotCQkJCSAgUE0zQ29uZmlnMkRfRm9yZWdyb3VuZFJPUEVuYWJsZSB8Ci0JCQkJICAoUE0zQ29uZmlnMkRfRm9yZWdyb3VuZFJPUCgweDMpKSB8CS8qIE94MyBpcyBHWGNvcHkgKi8KLQkJCQkgIFBNM0NvbmZpZzJEX0ZCV3JpdGVFbmFibGUpOwotCi0JUE0zX1dSSVRFX1JFRyhQTTNGb3JlZ3JvdW5kQ29sb3IsIGMpOwotCi0JUE0zX1dSSVRFX1JFRyhQTTNSZWN0YW5nbGVQb3NpdGlvbiwKLQkJICAgICAgKFBNM1JlY3RhbmdsZVBvc2l0aW9uX1hPZmZzZXQoc3gpKSB8Ci0JCSAgICAgIChQTTNSZWN0YW5nbGVQb3NpdGlvbl9ZT2Zmc2V0KHN5KSkpOwotCi0JUE0zX1dSSVRFX1JFRyhQTTNSZW5kZXIyRCwKLQkJICAgICAgUE0zUmVuZGVyMkRfWFBvc2l0aXZlIHwKLQkJICAgICAgUE0zUmVuZGVyMkRfWVBvc2l0aXZlIHwKLQkJICAgICAgUE0zUmVuZGVyMkRfT3BlcmF0aW9uX05vcm1hbCB8Ci0JCSAgICAgIFBNM1JlbmRlcjJEX1NwYW5PcGVyYXRpb24gfAotCQkgICAgICAoUE0zUmVuZGVyMkRfV2lkdGgod2lkdGgpKSB8Ci0JCSAgICAgIChQTTNSZW5kZXIyRF9IZWlnaHQoaGVpZ2h0KSkpOwotCi0JcG0zZmJfd2FpdF9wbTMobF9mYl9pbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgcG0zZmJfY2ZiOF9jbGVhcl9tYXJnaW5zKHN0cnVjdCB2Y19kYXRhICpjb25wLAotCQkJCSAgICAgc3RydWN0IGRpc3BsYXkgKnAsIGludCBib3R0b21fb25seSkKLXsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvID0gKHN0cnVjdCBwbTNmYl9pbmZvICopIHAtPmZiX2luZm87Ci0JaW50IHN4LCBzeTsKLQl1MzIgYzsKLQotCURUUkFDRTsKLQotCXN4ID0gY29ucC0+dmNfY29scyAqIGZvbnR3aWR0aChwKTsJLyogcmlnaHQgbWFyZ2luICovCi0Jc3kgPSBjb25wLT52Y19yb3dzICogZm9udGhlaWdodChwKTsJLyogYm90dG9tIG1hcmdpbiAqLwotCWMgPSBhdHRyX2JnY29sX2VjKHAsIGNvbnApOwotCWMgfD0gYyA8PCA4OwotCWMgfD0gYyA8PCAxNjsKLQotCWlmICghYm90dG9tX29ubHkpIHsJLyogcmlnaHQgbWFyZ2luIHRvcC0+Ym90dG9tICovCi0JCVBNM19XQUlUKDQpOwotCi0JCVBNM19XUklURV9SRUcoUE0zQ29uZmlnMkQsCi0JCQkJCSAgUE0zQ29uZmlnMkRfVXNlQ29uc3RhbnRTb3VyY2UgfAotCQkJCQkgIFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1BFbmFibGUgfAotCQkJCQkgIChQTTNDb25maWcyRF9Gb3JlZ3JvdW5kUk9QKDB4MykpIHwJLyogT3gzIGlzIEdYY29weSAqLwotCQkJCQkgIFBNM0NvbmZpZzJEX0ZCV3JpdGVFbmFibGUpOwotCi0JCVBNM19XUklURV9SRUcoUE0zRm9yZWdyb3VuZENvbG9yLCBjKTsKLQotCQlQTTNfV1JJVEVfUkVHKFBNM1JlY3RhbmdsZVBvc2l0aW9uLAotCQkJICAgICAgKFBNM1JlY3RhbmdsZVBvc2l0aW9uX1hPZmZzZXQKLQkJCSAgICAgICAocC0+dmFyLnhvZmZzZXQgKwotCQkJCXN4KSkgfCAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWU9mZnNldChwLT4KLQkJCQkJCQkJICAgICB2YXIuCi0JCQkJCQkJCSAgICAgeW9mZnNldCkpKTsKLQotCQlQTTNfV1JJVEVfUkVHKFBNM1JlbmRlcjJELAotCQkJICAgICAgUE0zUmVuZGVyMkRfWFBvc2l0aXZlIHwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX1lQb3NpdGl2ZSB8Ci0JCQkgICAgICBQTTNSZW5kZXIyRF9PcGVyYXRpb25fTm9ybWFsIHwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX1NwYW5PcGVyYXRpb24gfAotCQkJICAgICAgKFBNM1JlbmRlcjJEX1dpZHRoKHAtPnZhci54cmVzIC0gc3gpKSB8Ci0JCQkgICAgICAoUE0zUmVuZGVyMkRfSGVpZ2h0KHAtPnZhci55cmVzKSkpOwotCX0KLQotCS8qIGJvdHRvbSBtYXJnaW4gbGVmdCAtPiByaWdodCAqLwotCVBNM19XQUlUKDQpOwotCi0JUE0zX1dSSVRFX1JFRyhQTTNDb25maWcyRCwKLQkJCQkgIFBNM0NvbmZpZzJEX1VzZUNvbnN0YW50U291cmNlIHwKLQkJCQkgIFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1BFbmFibGUgfAotCQkJCSAgKFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1AoMHgzKSkgfAkvKiBPeDMgaXMgR1hjb3B5ICovCi0JCQkJICBQTTNDb25maWcyRF9GQldyaXRlRW5hYmxlKTsKLQotCVBNM19XUklURV9SRUcoUE0zRm9yZWdyb3VuZENvbG9yLCBjKTsKLQotCVBNM19XUklURV9SRUcoUE0zUmVjdGFuZ2xlUG9zaXRpb24sCi0JCSAgICAgIChQTTNSZWN0YW5nbGVQb3NpdGlvbl9YT2Zmc2V0KHAtPnZhci54b2Zmc2V0KSkgfAotCQkgICAgICAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWU9mZnNldChwLT52YXIueW9mZnNldCArIHN5KSkpOwotCi0JUE0zX1dSSVRFX1JFRyhQTTNSZW5kZXIyRCwKLQkJICAgICAgUE0zUmVuZGVyMkRfWFBvc2l0aXZlIHwKLQkJICAgICAgUE0zUmVuZGVyMkRfWVBvc2l0aXZlIHwKLQkJICAgICAgUE0zUmVuZGVyMkRfT3BlcmF0aW9uX05vcm1hbCB8Ci0JCSAgICAgIFBNM1JlbmRlcjJEX1NwYW5PcGVyYXRpb24gfAotCQkgICAgICAoUE0zUmVuZGVyMkRfV2lkdGgocC0+dmFyLnhyZXMpKSB8Ci0JCSAgICAgIChQTTNSZW5kZXIyRF9IZWlnaHQocC0+dmFyLnlyZXMgLSBzeSkpKTsKLQotCXBtM2ZiX3dhaXRfcG0zKGxfZmJfaW5mbyk7Ci19Ci0jZW5kaWYgLyogRkJDT05fSEFTX0NGQjggKi8KLSNpZiBkZWZpbmVkKEZCQ09OX0hBU19DRkI4KSB8fCBkZWZpbmVkKEZCQ09OX0hBU19DRkIxNikgfHwgZGVmaW5lZChGQkNPTl9IQVNfQ0ZCMzIpCi1zdGF0aWMgdm9pZCBwbTNmYl9jZmJYX2Jtb3ZlKHN0cnVjdCBkaXNwbGF5ICpwLAotCQkJICAgICBpbnQgc3ksIGludCBzeCwKLQkJCSAgICAgaW50IGR5LCBpbnQgZHgsIGludCBoZWlnaHQsIGludCB3aWR0aCkKLXsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvID0gKHN0cnVjdCBwbTNmYl9pbmZvICopIHAtPmZiX2luZm87Ci0JaW50IHhfYWxpZ24sIG9feCwgb195OwotCi0JRFRSQUNFOwotCi0Jc3ggPSBzeCAqIGZvbnR3aWR0aChwKTsKLQlkeCA9IGR4ICogZm9udHdpZHRoKHApOwotCXdpZHRoID0gd2lkdGggKiBmb250d2lkdGgocCk7Ci0Jc3kgPSBzeSAqIGZvbnRoZWlnaHQocCk7Ci0JZHkgPSBkeSAqIGZvbnRoZWlnaHQocCk7Ci0JaGVpZ2h0ID0gaGVpZ2h0ICogZm9udGhlaWdodChwKTsKLQotCW9feCA9IHN4IC0gZHg7CQkvKihzeCA+IGR4ICkgPyAoc3ggLSBkeCkgOiAoZHggLSBzeCk7ICovCi0Jb195ID0gc3kgLSBkeTsJCS8qKHN5ID4gZHkgKSA/IChzeSAtIGR5KSA6IChkeSAtIHN5KTsgKi8KLQotCXhfYWxpZ24gPSAoc3ggJiAweDFmKTsKLQotCVBNM19XQUlUKDYpOwotCi0JUE0zX1dSSVRFX1JFRyhQTTNDb25maWcyRCwKLQkJCQkgIFBNM0NvbmZpZzJEX1VzZXJTY2lzc29yRW5hYmxlIHwKLQkJCQkgIFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1BFbmFibGUgfAotCQkJCSAgUE0zQ29uZmlnMkRfQmxvY2tpbmcgfAotCQkJCSAgKFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1AoMHgzKSkgfAkvKiBPeDMgaXMgR1hjb3B5ICovCi0JCQkJICBQTTNDb25maWcyRF9GQldyaXRlRW5hYmxlKTsKLQotCVBNM19XUklURV9SRUcoUE0zU2Npc3Nvck1pblhZLAotCQkgICAgICAoKGR5ICYgMHgwZmZmKSA8PCAxNikgfCAoZHggJiAweDBmZmYpKTsKLQlQTTNfV1JJVEVfUkVHKFBNM1NjaXNzb3JNYXhYWSwKLQkJCQkgICgoKGR5ICsgaGVpZ2h0KSAmIDB4MGZmZikgPDwgMTYpIHwKLQkJCQkgICgoZHggKyB3aWR0aCkgJiAweDBmZmYpKTsKLQotCVBNM19XUklURV9SRUcoUE0zRkJTb3VyY2VSZWFkQnVmZmVyT2Zmc2V0LAotCQkgICAgICBQTTNGQlNvdXJjZVJlYWRCdWZmZXJPZmZzZXRfWE9mZnNldChvX3gpIHwKLQkJICAgICAgUE0zRkJTb3VyY2VSZWFkQnVmZmVyT2Zmc2V0X1lPZmZzZXQob195KSk7Ci0KLQlQTTNfV1JJVEVfUkVHKFBNM1JlY3RhbmdsZVBvc2l0aW9uLAotCQkgICAgICAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWE9mZnNldChkeCAtIHhfYWxpZ24pKSB8Ci0JCSAgICAgIChQTTNSZWN0YW5nbGVQb3NpdGlvbl9ZT2Zmc2V0KGR5KSkpOwotCi0JUE0zX1dSSVRFX1JFRyhQTTNSZW5kZXIyRCwKLQkJICAgICAgKChzeCA+IGR4KSA/IFBNM1JlbmRlcjJEX1hQb3NpdGl2ZSA6IDApIHwKLQkJICAgICAgKChzeSA+IGR5KSA/IFBNM1JlbmRlcjJEX1lQb3NpdGl2ZSA6IDApIHwKLQkJICAgICAgUE0zUmVuZGVyMkRfT3BlcmF0aW9uX05vcm1hbCB8Ci0JCSAgICAgIFBNM1JlbmRlcjJEX1NwYW5PcGVyYXRpb24gfAotCQkgICAgICBQTTNSZW5kZXIyRF9GQlNvdXJjZVJlYWRFbmFibGUgfAotCQkgICAgICAoUE0zUmVuZGVyMkRfV2lkdGgod2lkdGggKyB4X2FsaWduKSkgfAotCQkgICAgICAoUE0zUmVuZGVyMkRfSGVpZ2h0KGhlaWdodCkpKTsKLQotCXBtM2ZiX3dhaXRfcG0zKGxfZmJfaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBtM2ZiX2NmYlhfcHV0YyhzdHJ1Y3QgdmNfZGF0YSAqY29ucCwgc3RydWN0IGRpc3BsYXkgKnAsCi0JCQkgICAgaW50IGMsIGludCB5eSwgaW50IHh4KQotewotCXN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8gPSAoc3RydWN0IHBtM2ZiX2luZm8gKikgcC0+ZmJfaW5mbzsKLQl1OCAqY2RhdCwgYXN4ID0gMCwgYXN5ID0gMCwgb194ID0gMCwgb195ID0gMDsKLQl1MzIgZmd4LCBiZ3gsIGxkYXQ7Ci0JaW50IHN4LCBzeSwgaTsKLQotCURUUkFDRTsKLQotCWlmIChsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5kZXB0aCA9PSA4KQotCQlmZ3ggPSBhdHRyX2ZnY29sKHAsIGMpOwotCWVsc2UgaWYgKGRlcHRoMmJwcChsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5kZXB0aCkgPT0gMTYpCi0JCWZneCA9ICgodTE2ICopIHAtPmRpc3Bzd19kYXRhKVthdHRyX2ZnY29sKHAsIGMpXTsKLQllbHNlCi0JCWZneCA9ICgodTMyICopIHAtPmRpc3Bzd19kYXRhKVthdHRyX2ZnY29sKHAsIGMpXTsKLQotCVBNM19DT0xPUihmZ3gpOwotCi0JaWYgKGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoID09IDgpCi0JCWJneCA9IGF0dHJfYmdjb2wocCwgYyk7Ci0JZWxzZSBpZiAoZGVwdGgyYnBwKGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoKSA9PSAxNikKLQkJYmd4ID0gKCh1MTYgKikgcC0+ZGlzcHN3X2RhdGEpW2F0dHJfYmdjb2wocCwgYyldOwotCWVsc2UKLQkJYmd4ID0gKCh1MzIgKikgcC0+ZGlzcHN3X2RhdGEpW2F0dHJfYmdjb2wocCwgYyldOwotCi0JUE0zX0NPTE9SKGJneCk7Ci0KLQlQTTNfV0FJVCg0KTsKLQotCVBNM19XUklURV9SRUcoUE0zQ29uZmlnMkQsCi0JCQkJICBQTTNDb25maWcyRF9Vc2VDb25zdGFudFNvdXJjZSB8Ci0JCQkJICBQTTNDb25maWcyRF9Gb3JlZ3JvdW5kUk9QRW5hYmxlIHwKLQkJCQkgIChQTTNDb25maWcyRF9Gb3JlZ3JvdW5kUk9QKDB4MykpIHwJLyogT3gzIGlzIEdYY29weSAqLwotCQkJCSAgUE0zQ29uZmlnMkRfRkJXcml0ZUVuYWJsZSB8IFBNM0NvbmZpZzJEX09wYXF1ZVNwYW4pOwotCi0JUE0zX1dSSVRFX1JFRyhQTTNGb3JlZ3JvdW5kQ29sb3IsIGZneCk7Ci0JUE0zX1dSSVRFX1JFRyhQTTNGaWxsQmFja2dyb3VuZENvbG9yLCBiZ3gpOwotCi0JLyogV0FSTklORyA6IGFkZHJlc3Mgc2VsZWN0IFggbmVlZCB0byBzcGVjaWZ5IDggYml0cyBmb3IgZm9udHdpZHRoIDw9IDggKi8KLQkvKiBhbmQgMTYgYml0cyBmb3IgZm9udHdpZHRoIDw9IDE2ICovCi0JLyogc2FtZSBpbiBfcHV0Y3MsIHNhbWUgZm9yIFkgYW5kIGZvbnRoZWlnaHQgKi8KLQlpZiAoZm9udHdpZHRoKHApIDw9IDgpCi0JCWFzeCA9IDI7Ci0JZWxzZSBpZiAoZm9udHdpZHRoKHApIDw9IDE2KQotCQlhc3ggPSAzOwkvKiBsb29rIE9LICovCi0JaWYgKGZvbnRoZWlnaHQocCkgPD0gOCkKLQkJYXN5ID0gMjsKLQllbHNlIGlmIChmb250aGVpZ2h0KHApIDw9IDE2KQotCQlhc3kgPSAzOwkvKiBsb29rIE9LICovCi0JZWxzZSBpZiAoZm9udGhlaWdodChwKSA8PSAzMikKLQkJYXN5ID0gNDsJLyogbG9vayBPSyAqLwotCi0Jc3ggPSB4eCAqIGZvbnR3aWR0aChwKTsKLQlzeSA9IHl5ICogZm9udGhlaWdodChwKTsKLQotCWlmIChmb250d2lkdGgocCkgPD0gOCkKLQkJb194ID0gKDggLSAoc3ggJiAweDcpKSAmIDB4NzsKLQllbHNlIGlmIChmb250d2lkdGgocCkgPD0gMTYpCi0JCW9feCA9ICgxNiAtIChzeCAmIDB4RikpICYgMHhGOwotCWlmIChmb250aGVpZ2h0KHApIDw9IDgpCi0JCW9feSA9ICg4IC0gKHN5ICYgMHg3KSkgJiAweDc7Ci0JZWxzZSBpZiAoZm9udGhlaWdodChwKSA8PSAxNikKLQkJb195ID0gKDE2IC0gKHN5ICYgMHhGKSkgJiAweEY7Ci0JZWxzZSBpZiAoZm9udGhlaWdodChwKSA8PSAzMikKLQkJb195ID0gKDMyIC0gKHN5ICYgMHgxRikpICYgMHgxRjsKLQotCVBNM19XUklURV9SRUcoUE0zQXJlYVN0aXBwbGVNb2RlLCAob194IDw8IDcpIHwgKG9feSA8PCAxMikgfAkvKiB4X29mZnNldCwgeV9vZmZzZXQgaW4gcGF0dGVybiAqLwotCQkgICAgICAoMSA8PCAxOCkgfAkvKiBCRSAqLwotCQkgICAgICAxIHwgKGFzeCA8PCAxKSB8IChhc3kgPDwgNCkgfAkvKiBhZGRyZXNzIHNlbGVjdCB4L3kgKi8KLQkJICAgICAgKDEgPDwgMjApKTsJLyogT3BhcXVlU3BhbiAqLwotCi0JaWYgKGZvbnR3aWR0aChwKSA8PSA4KSB7Ci0JCWNkYXQgPSBwLT5mb250ZGF0YSArIChjICYgcC0+Y2hhcm1hc2spICogZm9udGhlaWdodChwKTsKLQl9IGVsc2UgewotCQljZGF0ID0KLQkJICAgIHAtPmZvbnRkYXRhICsKLQkJICAgICgoYyAmIHAtPmNoYXJtYXNrKSAqIChmb250aGVpZ2h0KHApIDw8IDEpKTsKLQl9Ci0KLQlQTTNfV0FJVCgyICsgZm9udGhlaWdodChwKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZm9udGhlaWdodChwKTsgaSsrKSB7CS8qIGFzc3VtZSBmb250aGVpZ2h0IDw9IDMyICovCi0JCWlmIChmb250d2lkdGgocCkgPD0gOCkgewotCQkJbGRhdCA9ICpjZGF0Kys7Ci0JCX0gZWxzZSB7CS8qIGFzc3VtZSBmb250d2lkdGggPD0gMTYgQVRNICovCi0KLQkJCWxkYXQgPSAoKCpjZGF0KyspIDw8IDgpOwotCQkJbGRhdCB8PSAqY2RhdCsrOwotCQl9Ci0JCVBNM19XUklURV9SRUcoQXJlYVN0aXBwbGVQYXR0ZXJuX2luZGV4ZWQoaSksIGxkYXQpOwotCX0KLQotCVBNM19XUklURV9SRUcoUE0zUmVjdGFuZ2xlUG9zaXRpb24sCi0JCSAgICAgIChQTTNSZWN0YW5nbGVQb3NpdGlvbl9YT2Zmc2V0KHN4KSkgfAotCQkgICAgICAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWU9mZnNldChzeSkpKTsKLQotCVBNM19XUklURV9SRUcoUE0zUmVuZGVyMkQsCi0JCSAgICAgIFBNM1JlbmRlcjJEX0FyZWFTdGlwcGxlRW5hYmxlIHwKLQkJICAgICAgUE0zUmVuZGVyMkRfWFBvc2l0aXZlIHwKLQkJICAgICAgUE0zUmVuZGVyMkRfWVBvc2l0aXZlIHwKLQkJICAgICAgUE0zUmVuZGVyMkRfT3BlcmF0aW9uX05vcm1hbCB8Ci0JCSAgICAgIFBNM1JlbmRlcjJEX1NwYW5PcGVyYXRpb24gfAotCQkgICAgICAoUE0zUmVuZGVyMkRfV2lkdGgoZm9udHdpZHRoKHApKSkgfAotCQkgICAgICAoUE0zUmVuZGVyMkRfSGVpZ2h0KGZvbnRoZWlnaHQocCkpKSk7Ci0KLQlwbTNmYl93YWl0X3BtMyhsX2ZiX2luZm8pOwotfQotCi1zdGF0aWMgdm9pZCBwbTNmYl9jZmJYX3B1dGNzKHN0cnVjdCB2Y19kYXRhICpjb25wLCBzdHJ1Y3QgZGlzcGxheSAqcCwKLQkJCSAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnMsIGludCBjb3VudCwgaW50IHl5LAotCQkJICAgICBpbnQgeHgpCi17Ci0Jc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbyA9IChzdHJ1Y3QgcG0zZmJfaW5mbyAqKSBwLT5mYl9pbmZvOwotCXU4ICpjZGF0LCBhc3ggPSAwLCBhc3kgPSAwLCBvX3ggPSAwLCBvX3kgPSAwOwotCXUzMiBmZ3gsIGJneCwgbGRhdDsKLQlpbnQgc3gsIHN5LCBpLCBqOwotCXUxNiBzYzsKLQotCURUUkFDRTsKLQotCXNjID0gc2NyX3JlYWR3KHMpOwotCWlmIChsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5kZXB0aCA9PSA4KQotCQlmZ3ggPSBhdHRyX2ZnY29sKHAsIHNjKTsKLQllbHNlIGlmIChkZXB0aDJicHAobF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGgpID09IDE2KQotCQlmZ3ggPSAoKHUxNiAqKSBwLT5kaXNwc3dfZGF0YSlbYXR0cl9mZ2NvbChwLCBzYyldOwotCWVsc2UKLQkJZmd4ID0gKCh1MzIgKikgcC0+ZGlzcHN3X2RhdGEpW2F0dHJfZmdjb2wocCwgc2MpXTsKLQkKLQlQTTNfQ09MT1IoZmd4KTsKLQkKLQlpZiAobF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGggPT0gOCkKLQkJYmd4ID0gYXR0cl9iZ2NvbChwLCBzYyk7Ci0JZWxzZSBpZiAoZGVwdGgyYnBwKGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoKSA9PSAxNikKLQkJYmd4ID0gKCh1MTYgKikgcC0+ZGlzcHN3X2RhdGEpW2F0dHJfYmdjb2wocCwgc2MpXTsKLQllbHNlCi0JCWJneCA9ICgodTMyICopIHAtPmRpc3Bzd19kYXRhKVthdHRyX2JnY29sKHAsIHNjKV07Ci0JCi0JUE0zX0NPTE9SKGJneCk7Ci0KLQlQTTNfV0FJVCg0KTsKLQotCVBNM19XUklURV9SRUcoUE0zQ29uZmlnMkQsCi0JCQkJICBQTTNDb25maWcyRF9Vc2VDb25zdGFudFNvdXJjZSB8Ci0JCQkJICBQTTNDb25maWcyRF9Gb3JlZ3JvdW5kUk9QRW5hYmxlIHwKLQkJCQkgIChQTTNDb25maWcyRF9Gb3JlZ3JvdW5kUk9QKDB4MykpIHwJLyogT3gzIGlzIEdYY29weSAqLwotCQkJCSAgUE0zQ29uZmlnMkRfRkJXcml0ZUVuYWJsZSB8Ci0JCQkJICBQTTNDb25maWcyRF9PcGFxdWVTcGFuKTsKLQotCVBNM19XUklURV9SRUcoUE0zRm9yZWdyb3VuZENvbG9yLCBmZ3gpOwotCVBNM19XUklURV9SRUcoUE0zRmlsbEJhY2tncm91bmRDb2xvciwgYmd4KTsKLQotCS8qIFdBUk5JTkcgOiBhZGRyZXNzIHNlbGVjdCBYIG5lZWQgdG8gc3BlY2lmeSA4IGJpdHMgZm9yIGZvbnR3aWR0aCA8PSA4ICovCi0JLyogYW5kIDE2IGJpdHMgZm9yIGZvbnR3aWR0aCA8PSAxNiAqLwotCS8qIHNhbWUgaW4gX3B1dGMsIHNhbWUgZm9yIFkgYW5kIGZvbnRoZWlnaHQgKi8KLQlpZiAoZm9udHdpZHRoKHApIDw9IDgpCi0JCWFzeCA9IDI7Ci0JZWxzZSBpZiAoZm9udHdpZHRoKHApIDw9IDE2KQotCQlhc3ggPSAzOwkvKiBsb29rIE9LICovCi0JaWYgKGZvbnRoZWlnaHQocCkgPD0gOCkKLQkJYXN5ID0gMjsKLQllbHNlIGlmIChmb250aGVpZ2h0KHApIDw9IDE2KQotCQlhc3kgPSAzOwkvKiBsb29rIE9LICovCi0JZWxzZSBpZiAoZm9udGhlaWdodChwKSA8PSAzMikKLQkJYXN5ID0gNDsJLyogbG9vayBPSyAqLwotCi0Jc3kgPSB5eSAqIGZvbnRoZWlnaHQocCk7Ci0KLQlpZiAoZm9udGhlaWdodChwKSA8PSA4KQotCQlvX3kgPSAoOCAtIChzeSAmIDB4NykpICYgMHg3OwotCWVsc2UgaWYgKGZvbnRoZWlnaHQocCkgPD0gMTYpCi0JCW9feSA9ICgxNiAtIChzeSAmIDB4RikpICYgMHhGOwotCWVsc2UgaWYgKGZvbnRoZWlnaHQocCkgPD0gMzIpCi0JCW9feSA9ICgzMiAtIChzeSAmIDB4MUYpKSAmIDB4MUY7Ci0KLQlmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykgewotCQlzYyA9IHNjcl9yZWFkdyhzICsgaik7Ci0JCWlmIChmb250d2lkdGgocCkgPD0gOCkKLQkJCWNkYXQgPSBwLT5mb250ZGF0YSArCi0JCQkJKHNjICYgcC0+Y2hhcm1hc2spICogZm9udGhlaWdodChwKTsKLQkJZWxzZQotCQkJY2RhdCA9IHAtPmZvbnRkYXRhICsKLQkJCQkoKHNjICYgcC0+Y2hhcm1hc2spICogZm9udGhlaWdodChwKSA8PCAxKTsKLQkJCi0JCXN4ID0gKHh4ICsgaikgKiBmb250d2lkdGgocCk7Ci0KLQkJaWYgKGZvbnR3aWR0aChwKSA8PSA4KQotCQkJb194ID0gKDggLSAoc3ggJiAweDcpKSAmIDB4NzsKLQkJZWxzZSBpZiAoZm9udHdpZHRoKHApIDw9IDE2KQotCQkJb194ID0gKDE2IC0gKHN4ICYgMHhGKSkgJiAweEY7Ci0KLQkJUE0zX1dBSVQoMyArIGZvbnRoZWlnaHQocCkpOwotCi0JCVBNM19XUklURV9SRUcoUE0zQXJlYVN0aXBwbGVNb2RlLCAob194IDw8IDcpIHwgKG9feSA8PCAxMikgfCAvKiB4X29mZnNldCwgeV9vZmZzZXQgaW4gcGF0dGVybiAqLwotCQkJICAgICAgKDEgPDwgMTgpIHwgLyogQkUgKi8KLQkJCSAgICAgIDEgfCAoYXN4IDw8IDEpIHwgKGFzeSA8PCA0KSB8IC8qIGFkZHJlc3Mgc2VsZWN0IHgveSAqLwotCQkJICAgICAgKDEgPDwgMjApKTsgLyogT3BhcXVlU3BhbiAqLwotCi0JCWZvciAoaSA9IDA7IGkgPCBmb250aGVpZ2h0KHApOyBpKyspIHsgLyogYXNzdW1lIGZvbnRoZWlnaHQgPD0gMzIgKi8KLQkJCWlmIChmb250d2lkdGgocCkgPD0gOCkgewotCQkJCWxkYXQgPSAqY2RhdCsrOwotCQkJfSBlbHNlIHsgLyogYXNzdW1lIGZvbnR3aWR0aCA8PSAxNiBBVE0gKi8KLQkJCQlsZGF0ID0gKCgqY2RhdCsrKSA8PCA4KTsKLQkJCQlsZGF0IHw9ICpjZGF0Kys7Ci0JCQl9Ci0JCQlQTTNfV1JJVEVfUkVHKEFyZWFTdGlwcGxlUGF0dGVybl9pbmRleGVkKGkpLCBsZGF0KTsKLQkJfQotCi0JCVBNM19XUklURV9SRUcoUE0zUmVjdGFuZ2xlUG9zaXRpb24sCi0JCQkgICAgICAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWE9mZnNldChzeCkpIHwKLQkJCSAgICAgIChQTTNSZWN0YW5nbGVQb3NpdGlvbl9ZT2Zmc2V0KHN5KSkpOwotCi0JCVBNM19XUklURV9SRUcoUE0zUmVuZGVyMkQsCi0JCQkgICAgICBQTTNSZW5kZXIyRF9BcmVhU3RpcHBsZUVuYWJsZSB8Ci0JCQkgICAgICBQTTNSZW5kZXIyRF9YUG9zaXRpdmUgfAotCQkJICAgICAgUE0zUmVuZGVyMkRfWVBvc2l0aXZlIHwKLQkJCSAgICAgIFBNM1JlbmRlcjJEX09wZXJhdGlvbl9Ob3JtYWwgfAotCQkJICAgICAgUE0zUmVuZGVyMkRfU3Bhbk9wZXJhdGlvbiB8Ci0JCQkgICAgICAoUE0zUmVuZGVyMkRfV2lkdGgoZm9udHdpZHRoKHApKSkgfAotCQkJICAgICAgKFBNM1JlbmRlcjJEX0hlaWdodChmb250aGVpZ2h0KHApKSkpOwotCX0KLQlwbTNmYl93YWl0X3BtMyhsX2ZiX2luZm8pOwotfQotCi1zdGF0aWMgdm9pZCBwbTNmYl9jZmJYX3JldmMoc3RydWN0IGRpc3BsYXkgKnAsIGludCB4eCwgaW50IHl5KQotewotCXN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8gPSAoc3RydWN0IHBtM2ZiX2luZm8gKikgcC0+ZmJfaW5mbzsKLQotCXh4ID0geHggKiBmb250d2lkdGgocCk7Ci0JeXkgPSB5eSAqIGZvbnRoZWlnaHQocCk7Ci0KLQlpZiAobF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGggPT0gOCkKLQl7Ci0JCWlmIChsX2ZiX2luZm8tPm1lbXQuY2FwcyAmIFBNM0xvY2FsTWVtQ2Fwc19Ob1dyaXRlTWFzaykKLQkJCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNGQlNvZnR3YXJlV3JpdGVNYXNrLCAweDBGMEYwRjBGKTsKLQkJZWxzZQotCQkJUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0ZCSGFyZHdhcmVXcml0ZU1hc2ssIDB4MEYwRjBGMEYpOwotCX0KLQotCVBNM19XQUlUKDMpOwotCi0JUE0zX1dSSVRFX1JFRyhQTTNDb25maWcyRCwKLQkJCQkgIFBNM0NvbmZpZzJEX1VzZUNvbnN0YW50U291cmNlIHwKLQkJCQkgIFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1BFbmFibGUgfAotCQkJCSAgKFBNM0NvbmZpZzJEX0ZvcmVncm91bmRST1AoMHhhKSkgfAkvKiBPeGEgaXMgR1hpbnZlcnQgKi8KLQkJCQkgIFBNM0NvbmZpZzJEX0ZCRGVzdFJlYWRFbmFibGUgfAotCQkJCSAgUE0zQ29uZmlnMkRfRkJXcml0ZUVuYWJsZSk7Ci0KLQlQTTNfV1JJVEVfUkVHKFBNM1JlY3RhbmdsZVBvc2l0aW9uLAotCQkgICAgICAoUE0zUmVjdGFuZ2xlUG9zaXRpb25fWE9mZnNldCh4eCkpIHwKLQkJICAgICAgKFBNM1JlY3RhbmdsZVBvc2l0aW9uX1lPZmZzZXQoeXkpKSk7Ci0KLQlQTTNfV1JJVEVfUkVHKFBNM1JlbmRlcjJELAotCQkgICAgICBQTTNSZW5kZXIyRF9YUG9zaXRpdmUgfAotCQkgICAgICBQTTNSZW5kZXIyRF9ZUG9zaXRpdmUgfAotCQkgICAgICBQTTNSZW5kZXIyRF9PcGVyYXRpb25fTm9ybWFsIHwKLQkJICAgICAgUE0zUmVuZGVyMkRfU3Bhbk9wZXJhdGlvbiB8Ci0JCSAgICAgIChQTTNSZW5kZXIyRF9XaWR0aChmb250d2lkdGgocCkpKSB8Ci0JCSAgICAgIChQTTNSZW5kZXIyRF9IZWlnaHQoZm9udGhlaWdodChwKSkpKTsKLQotCXBtM2ZiX3dhaXRfcG0zKGxfZmJfaW5mbyk7Ci0KLQlpZiAobF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGggPT0gOCkKLQl7Ci0JCWlmIChsX2ZiX2luZm8tPm1lbXQuY2FwcyAmIFBNM0xvY2FsTWVtQ2Fwc19Ob1dyaXRlTWFzaykKLQkJCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNGQlNvZnR3YXJlV3JpdGVNYXNrLCAweEZGRkZGRkZGKTsKLQkJZWxzZQotCQkJUE0zX1NMT1dfV1JJVEVfUkVHKFBNM0ZCSGFyZHdhcmVXcml0ZU1hc2ssIDB4RkZGRkZGRkYpOwotCX0KLX0KLQotI2VuZGlmIC8qIEZCQ09OX0hBU19DRkI4IHx8IEZCQ09OX0hBU19DRkIxNiB8fCBGQkNPTl9IQVNfQ0ZCMzIgKi8KLSNlbmRpZiAvKiBQTTNGQl9VU0VfQUNDRUwgKi8KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0vKiAqKioqKiBwcmUtaW5pdCBib2FyZChzKSBzZXR1cCAqKioqKiAqLwotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQotc3RhdGljIHZvaWQgcG0zZmJfbW9kZV9zZXR1cChjaGFyICptb2RlLCB1bnNpZ25lZCBsb25nIGJvYXJkX251bSkKLXsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvID0gJihmYl9pbmZvW2JvYXJkX251bV0pOwotCXN0cnVjdCBwbTNmYl9wYXIgKmxfZmJfcGFyID0gJihjdXJyZW50X3Bhcltib2FyZF9udW1dKTsKLQl1bnNpZ25lZCBsb25nIGkgPSAwOwotCi0JY3VycmVudF9wYXJfdmFsaWRbYm9hcmRfbnVtXSA9IDA7Ci0KLQlpZiAoIXN0cm5jbXAobW9kZSwgImN1cnJlbnQiLCA3KSkgewotCQlsX2ZiX2luZm8tPnVzZV9jdXJyZW50ID0gMTsJLyogZGVmYXVsdCB3LyBPcGVuRmlybXdhcmUgKi8KLQl9IGVsc2UgewotCQl3aGlsZSAoKG1vZGVfYmFzZVtpXS5uYW1lWzBdKQotCQkgICAgICAgJiYgKCFjdXJyZW50X3Bhcl92YWxpZFtib2FyZF9udW1dKSkgewotCQkJaWYgKCEKLQkJCSAgICAoc3RybmNtcAotCQkJICAgICAobW9kZSwgbW9kZV9iYXNlW2ldLm5hbWUsCi0JCQkgICAgICBzdHJsZW4obW9kZV9iYXNlW2ldLm5hbWUpKSkpIHsKLQkJCQltZW1jcHkobF9mYl9wYXIsICYobW9kZV9iYXNlW2ldLnVzZXJfbW9kZSksCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcG0zZmJfcGFyKSk7Ci0JCQkJY3VycmVudF9wYXJfdmFsaWRbYm9hcmRfbnVtXSA9IDE7Ci0JCQkJRFBSSU5USygyLCAiTW9kZSBzZXQgdG8gJXNcbiIsCi0JCQkJCW1vZGVfYmFzZVtpXS5uYW1lKTsKLQkJCX0KLQkJCWkrKzsKLQkJfQotCQlEQVNTRVJUKGN1cnJlbnRfcGFyX3ZhbGlkW2JvYXJkX251bV0sCi0JCQkiVmFsaWQgbW9kZSBvbiBjb21tYW5kIGxpbmVcbiIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcG0zZmJfcGNpaWRfc2V0dXAoY2hhciAqcGNpaWQsIHVuc2lnbmVkIGxvbmcgYm9hcmRfbnVtKQotewotCXNob3J0IGxfYnVzID0gLTEsIGxfc2xvdCA9IC0xLCBsX2Z1bmMgPSAtMTsKLQljaGFyICpuZXh0OwotCi0JaWYgKHBjaWlkKSB7Ci0JCWxfYnVzID0gc2ltcGxlX3N0cnRvdWwocGNpaWQsICZuZXh0LCAxMCk7Ci0JCWlmIChuZXh0ICYmIChuZXh0WzBdID09ICc6JykpIHsKLQkJCXBjaWlkID0gbmV4dCArIDE7Ci0JCQlsX3Nsb3QgPSBzaW1wbGVfc3RydG91bChwY2lpZCwgJm5leHQsIDEwKTsKLQkJCWlmIChuZXh0ICYmIChuZXh0WzBdID09ICc6JykpIHsKLQkJCQlwY2lpZCA9IG5leHQgKyAxOwotCQkJCWxfZnVuYyA9Ci0JCQkJICAgIHNpbXBsZV9zdHJ0b3VsKHBjaWlkLCAoY2hhciAqKikgTlVMTCwKLQkJCQkJCSAgIDEwKTsKLQkJCX0KLQkJfQotCX0gZWxzZQotCQlyZXR1cm47Ci0KLQlpZiAoKGxfYnVzID49IDApICYmIChsX3Nsb3QgPj0gMCkgJiYgKGxfZnVuYyA+PSAwKSkgewotCQlidXNbYm9hcmRfbnVtXSA9IGxfYnVzOwotCQlzbG90W2JvYXJkX251bV0gPSBsX3Nsb3Q7Ci0JCWZ1bmNbYm9hcmRfbnVtXSA9IGxfZnVuYzsKLQkJRFBSSU5USygyLCAiQm9hcmQgIyVsZCB3aWxsIGJlIFBjaUlkOiAlaGQ6JWhkOiVoZFxuIiwKLQkJCWJvYXJkX251bSwgbF9idXMsIGxfc2xvdCwgbF9mdW5jKTsKLQl9IGVsc2UgewotCQlEUFJJTlRLKDEsICJJbnZhbGlkIFBjaUlkOiAlaGQ6JWhkOiVoZCBmb3IgYm9hcmQgIyVsZFxuIiwKLQkJCWxfYnVzLCBsX3Nsb3QsIGxfZnVuYywgYm9hcmRfbnVtKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHBtM2ZiX2ZvbnRfc2V0dXAoY2hhciAqbGYsIHVuc2lnbmVkIGxvbmcgYm9hcmRfbnVtKQotewotCXVuc2lnbmVkIGxvbmcgbGZzID0gc3RybGVuKGxmKTsKLQotCWlmIChsZnMgPiAoUE0zX0ZPTlROQU1FX1NJWkUgLSAxKSkgewotCQlEUFJJTlRLKDEsICJGb250bmFtZSAlcyB0b28gbG9uZ1xuIiwgbGYpOwotCQlyZXR1cm47Ci0JfQotCXN0cmxjcHkoZm9udG5bYm9hcmRfbnVtXSwgbGYsIGxmcyArIDEpOwotfQotCi1zdGF0aWMgdm9pZCBwbTNmYl9ib290ZGVwdGhfc2V0dXAoY2hhciAqYmRzLCB1bnNpZ25lZCBsb25nIGJvYXJkX251bSkKLXsKLQl1bnNpZ25lZCBsb25nIGJkID0gc2ltcGxlX3N0cnRvdWwoYmRzLCAoY2hhciAqKikgTlVMTCwgMTApOwotCi0JaWYgKCEoZGVwdGhfc3VwcG9ydGVkKGJkKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicG0zZmI6IGlnbm9yaW5nIGludmFsaWQgZGVwdGggJXMgZm9yIGJvYXJkICMlbGRcbiIsCi0JCSAgICAgICBiZHMsIGJvYXJkX251bSk7Ci0JCXJldHVybjsKLQl9Ci0JZGVwdGhbYm9hcmRfbnVtXSA9IGJkOwotfQotCi1zdGF0aWMgdm9pZCBwbTNmYl9mb3JjZXNpemVfc2V0dXAoY2hhciAqYmRzLCB1bnNpZ25lZCBsb25nIGJvYXJkX251bSkKLXsKLQl1bnNpZ25lZCBsb25nIGJkID0gc2ltcGxlX3N0cnRvdWwoYmRzLCAoY2hhciAqKikgTlVMTCwgMTApOwotCi0JaWYgKGJkID4gNjQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicG0zZmI6IGlnbm9yaW5nIGludmFsaWQgbWVtb3J5IHNpemUgJXMgZm9yIGJvYXJkICMlbGRcbiIsCi0JCSAgICAgICBiZHMsIGJvYXJkX251bSk7Ci0JCXJldHVybjsKLQl9Ci0JZm9yY2VzaXplW2JvYXJkX251bV0gPSBiZDsKLX0KLQotc3RhdGljIGNoYXIgKnBtM2ZiX2JvYXJkbnVtX3NldHVwKGNoYXIgKm9wdGlvbnMsIHVuc2lnbmVkIGxvbmcgKmJuKQotewotCWNoYXIgKm5leHQ7Ci0KLQlpZiAoIShpc2RpZ2l0KG9wdGlvbnNbMF0pKSkgewotCQkoKmJuKSA9IDA7Ci0JCXJldHVybiAob3B0aW9ucyk7Ci0JfQotCi0JKCpibikgPSBzaW1wbGVfc3RydG91bChvcHRpb25zLCAmbmV4dCwgMTApOwotCi0JaWYgKG5leHQgJiYgKG5leHRbMF0gPT0gJzonKSAmJiAoKCpibikgPj0gMCkKLQkgICAgJiYgKCgqYm4pIDw9IFBNM19NQVhfQk9BUkQpKSB7Ci0JCURQUklOVEsoMiwgIkJvYXJkX251bSBzZWVuIGFzICVsZFxuIiwgKCpibikpOwotCQlyZXR1cm4gKG5leHQgKyAxKTsKLQl9IGVsc2UgewotCQkoKmJuKSA9IDA7Ci0JCURQUklOVEsoMiwgIkJvYXJkX251bSBkZWZhdWx0IHRvICVsZFxuIiwgKCpibikpOwotCQlyZXR1cm4gKG9wdGlvbnMpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcG0zZmJfcmVhbF9zZXR1cChjaGFyICpvcHRpb25zKQotewotCWNoYXIgKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBpLCBibjsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvOwotCi0JRFRSQUNFOwotCi0JRFBSSU5USygyLCAiT3B0aW9ucyA6ICVzXG4iLCBvcHRpb25zKTsKLQotCWZvciAoaSA9IDA7IGkgPCBQTTNfTUFYX0JPQVJEOyBpKyspIHsKLQkJbF9mYl9pbmZvID0gJihmYl9pbmZvW2ldKTsKLQkJbWVtc2V0KGxfZmJfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBwbTNmYl9pbmZvKSk7Ci0JCWxfZmJfaW5mby0+Z2VuLmZiaHcgPSAmcG0zZmJfc3dpdGNoOwotCQlsX2ZiX2luZm8tPmJvYXJkX251bSA9IGk7Ci0JCWN1cnJlbnRfcGFyX3ZhbGlkW2ldID0gMDsKLQkJc2xvdFtpXSA9IC0xOwotCQlmdW5jW2ldID0gLTE7Ci0JCWJ1c1tpXSA9IC0xOwotCQlkaXNhYmxlW2ldID0gMDsKLQkJbm9hY2NlbFtpXSA9IDA7Ci0JCWZvbnRuW2ldWzBdID0gJ1wwJzsKLQkJZGVwdGhbaV0gPSAwOwotCQlsX2ZiX2luZm8tPmN1cnJlbnRfcGFyID0gJihjdXJyZW50X3BhcltpXSk7Ci0JfQotCi0JLyogZWF0IHVwIHByZWZpeCBwbTNmYiBhbmQgd2hhdGV2ZXIgaXMgdXNlZCBhcyBzZXBhcmF0b3IgaS5lLiA6LD0gKi8KLQlpZiAoIXN0cm5jbXAob3B0aW9ucywgInBtM2ZiIiwgNSkpIHsKLQkJb3B0aW9ucyArPSA1OwotCQl3aGlsZSAoKCgqb3B0aW9ucykgPT0gJywnKSB8fCAoKCpvcHRpb25zKSA9PSAnOicpCi0JCSAgICAgICB8fCAoKCpvcHRpb25zKSA9PSAnPScpKQotCQkJb3B0aW9ucysrOwotCX0KLQotCXdoaWxlIChvcHRpb25zKSB7Ci0JCWJuID0gMDsKLQkJaWYgKChuZXh0ID0gc3RyY2hyKG9wdGlvbnMsICcsJykpKSB7Ci0JCQkoKm5leHQpID0gJ1wwJzsKLQkJCW5leHQrKzsKLQkJfQotCi0JCWlmICghc3RybmNtcChvcHRpb25zLCAibW9kZToiLCA1KSkgewotCQkJb3B0aW9ucyA9IHBtM2ZiX2JvYXJkbnVtX3NldHVwKG9wdGlvbnMgKyA1LCAmYm4pOwotCQkJRFBSSU5USygyLCAiU2V0dGluZyBtb2RlIGZvciBib2FyZCAjJWxkXG4iLCBibik7Ci0JCQlwbTNmYl9tb2RlX3NldHVwKG9wdGlvbnMsIGJuKTsKLQkJfSBlbHNlIGlmICghc3RybmNtcChvcHRpb25zLCAib2ZmOiIsIDQpKSB7Ci0JCQlvcHRpb25zID0gcG0zZmJfYm9hcmRudW1fc2V0dXAob3B0aW9ucyArIDQsICZibik7Ci0JCQlEUFJJTlRLKDIsICJEaXNhYmxpbmcgYm9hcmQgIyVsZFxuIiwgYm4pOwotCQkJZGlzYWJsZVtibl0gPSAxOwotCQl9IGVsc2UgaWYgKCFzdHJuY21wKG9wdGlvbnMsICJvZmYiLCAzKSkgewkvKiBkaXNhYmxlIGV2ZXJ5dGhpbmcgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBQTTNfTUFYX0JPQVJEOyBpKyspCi0JCQkJZGlzYWJsZVtpXSA9IDE7Ci0JCX0gZWxzZSBpZiAoIXN0cm5jbXAob3B0aW9ucywgImRpc2FibGU6IiwgOCkpIHsKLQkJCW9wdGlvbnMgPSBwbTNmYl9ib2FyZG51bV9zZXR1cChvcHRpb25zICsgOCwgJmJuKTsKLQkJCURQUklOVEsoMiwgIkRpc2FibGluZyBib2FyZCAjJWxkXG4iLCBibik7Ci0JCQlkaXNhYmxlW2JuXSA9IDE7Ci0JCX0gZWxzZSBpZiAoIXN0cm5jbXAob3B0aW9ucywgInBjaWlkOiIsIDYpKSB7Ci0JCQlvcHRpb25zID0gcG0zZmJfYm9hcmRudW1fc2V0dXAob3B0aW9ucyArIDYsICZibik7Ci0JCQlEUFJJTlRLKDIsICJTZXR0aW5nIFBjaUlEIGZvciBib2FyZCAjJWxkXG4iLCBibik7Ci0JCQlwbTNmYl9wY2lpZF9zZXR1cChvcHRpb25zLCBibik7Ci0JCX0gZWxzZSBpZiAoIXN0cm5jbXAob3B0aW9ucywgIm5vYWNjZWw6IiwgOCkpIHsKLQkJCW9wdGlvbnMgPSBwbTNmYl9ib2FyZG51bV9zZXR1cChvcHRpb25zICsgOCwgJmJuKTsKLQkJCW5vYWNjZWxbYm5dID0gMTsKLQkJfSBlbHNlIGlmICghc3RybmNtcChvcHRpb25zLCAiZm9udDoiLCA1KSkgewotCQkJb3B0aW9ucyA9IHBtM2ZiX2JvYXJkbnVtX3NldHVwKG9wdGlvbnMgKyA1LCAmYm4pOwotCQkJcG0zZmJfZm9udF9zZXR1cChvcHRpb25zLCBibik7Ci0JCX0gZWxzZSBpZiAoIXN0cm5jbXAob3B0aW9ucywgImRlcHRoOiIsIDYpKSB7Ci0JCQlvcHRpb25zID0gcG0zZmJfYm9hcmRudW1fc2V0dXAob3B0aW9ucyArIDYsICZibik7Ci0JCQlwbTNmYl9ib290ZGVwdGhfc2V0dXAob3B0aW9ucywgYm4pOwotCQl9IGVsc2UgaWYgKCFzdHJuY21wKG9wdGlvbnMsICJwcmludHRpbWluZ3MiLCAxMikpIHsKLQkJCXByaW50dGltaW5ncyA9IDE7Ci0JCX0gZWxzZSBpZiAoIXN0cm5jbXAob3B0aW9ucywgImZsYXRwYW5lbDoiLCAxMCkpIHsKLQkJCW9wdGlvbnMgPSBwbTNmYl9ib2FyZG51bV9zZXR1cChvcHRpb25zICsgMTAsICZibik7Ci0JCQlmbGF0cGFuZWxbYm5dID0gMTsKLQkJfSBlbHNlIGlmICghc3RybmNtcChvcHRpb25zLCAiZm9yY2VzaXplOiIsIDEwKSkgewotCQkJb3B0aW9ucyA9IHBtM2ZiX2JvYXJkbnVtX3NldHVwKG9wdGlvbnMgKyAxMCwgJmJuKTsKLQkJCXBtM2ZiX2ZvcmNlc2l6ZV9zZXR1cChvcHRpb25zLCBibik7Ci0JCX0KLQkJb3B0aW9ucyA9IG5leHQ7Ci0JfQotfQotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0vKiAqKioqKiBmcmFtZWJ1ZmZlciBBUEkgc3RhbmRhcmQgZnVuY3Rpb25zICoqKioqICovCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLXN0YXRpYyBpbnQgcG0zZmJfZW5jb2RlX2ZpeChzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwKLQkJCSAgICBjb25zdCB2b2lkICpwYXIsIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbykKLXsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvID0gKHN0cnVjdCBwbTNmYl9pbmZvICopIGluZm87Ci0Jc3RydWN0IHBtM2ZiX3BhciAqcCA9IChzdHJ1Y3QgcG0zZmJfcGFyICopIHBhcjsKLQotCURUUkFDRTsKLQotCXN0cmNweShmaXgtPmlkLCBwZXJtZWRpYTNfbmFtZSk7Ci0JZml4LT5zbWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpbF9mYl9pbmZvLT5wX2ZiOwotCWZpeC0+c21lbV9sZW4gPSBsX2ZiX2luZm8tPmZiX3NpemU7Ci0JZml4LT5tbWlvX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpbF9mYl9pbmZvLT5wSU9CYXNlOwotCWZpeC0+bW1pb19sZW4gPSBQTTNfUkVHU19TSVpFOwotI2lmZGVmIFBNM0ZCX1VTRV9BQ0NFTAotCWlmICghKG5vYWNjZWxbbF9mYl9pbmZvLT5ib2FyZF9udW1dKSkKLQkJZml4LT5hY2NlbCA9IEZCX0FDQ0VMXzNETEFCU19QRVJNRURJQTM7Ci0JZWxzZQotI2VuZGlmIC8qIFBNM0ZCX1VTRV9BQ0NFTCAqLwotCQlmaXgtPmFjY2VsID0gRkJfQUNDRUxfTk9ORTsKLQlmaXgtPnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7Ci0JZml4LT52aXN1YWwgPQotCSAgICAocC0+ZGVwdGggPT0gOCkgPyBGQl9WSVNVQUxfUFNFVURPQ09MT1IgOiBGQl9WSVNVQUxfVFJVRUNPTE9SOwotCWlmIChjdXJyZW50X3Bhcl92YWxpZFtsX2ZiX2luZm8tPmJvYXJkX251bV0pCi0JCWZpeC0+bGluZV9sZW5ndGggPQotCQkJbF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+d2lkdGggKgotCQkJZGVwdGgyQnlQUChsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5kZXB0aCk7Ci0JZWxzZQotCQlmaXgtPmxpbmVfbGVuZ3RoID0gMDsKLQlmaXgtPnhwYW5zdGVwID0gNjQgLyBkZXB0aDJicHAocC0+ZGVwdGgpOwotCWZpeC0+eXBhbnN0ZXAgPSAxOwotCWZpeC0+eXdyYXBzdGVwID0gMDsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW50IHBtM2ZiX2RlY29kZV92YXIoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgdm9pZCAqcGFyLCBzdHJ1Y3QgZmJfaW5mb19nZW4gKmluZm8pCi17Ci0Jc3RydWN0IHBtM2ZiX2luZm8gKmxfZmJfaW5mbyA9IChzdHJ1Y3QgcG0zZmJfaW5mbyAqKSBpbmZvOwotCXN0cnVjdCBwbTNmYl9wYXIgKnAgPSAoc3RydWN0IHBtM2ZiX3BhciAqKSBwYXI7Ci0Jc3RydWN0IHBtM2ZiX3BhciB0ZW1wX3A7Ci0JdTMyIHhyZXM7Ci0KLQlEVFJBQ0U7Ci0KLQlEQVNTRVJUKCh2YXIgIT0gTlVMTCksICJmYl92YXJfc2NyZWVuaW5mbyogbm90IE5VTEwiKTsKLQlEQVNTRVJUKChwICE9IE5VTEwpLCAicG0zZmJfcGFyKiBub3QgTlVMTCIpOwotCURBU1NFUlQoKGxfZmJfaW5mbyAhPSBOVUxMKSwgInBtM2ZiX2luZm8qIG5vdCBOVUxMIik7Ci0KLQltZW1zZXQoJnRlbXBfcCwgMCwgc2l6ZW9mKHN0cnVjdCBwbTNmYl9wYXIpKTsKLQl0ZW1wX3Aud2lkdGggPSAodmFyLT54cmVzX3ZpcnR1YWwgKyA3KSAmIH43OwotCXRlbXBfcC5oZWlnaHQgPSB2YXItPnlyZXNfdmlydHVhbDsKLQotCWlmICghKGRlcHRoX3N1cHBvcnRlZCh2YXItPmJpdHNfcGVyX3BpeGVsKSkpIC8qIHJvdW5kIHVuc3VwcG9ydGVkIHVwIHRvIGEgbXVsdGlwbGUgb2YgOCAqLwotCQl0ZW1wX3AuZGVwdGggPSBkZXB0aDJicHAodmFyLT5iaXRzX3Blcl9waXhlbCk7Ci0JZWxzZQotCQl0ZW1wX3AuZGVwdGggPSB2YXItPmJpdHNfcGVyX3BpeGVsOwotCi0JdGVtcF9wLmRlcHRoID0gKHRlbXBfcC5kZXB0aCA+IDMyKSA/IDMyIDogdGVtcF9wLmRlcHRoOyAvKiBtYXggMzIgKi8KLQl0ZW1wX3AuZGVwdGggPSAodGVtcF9wLmRlcHRoID09IDI0KSA/IDMyIDogdGVtcF9wLmRlcHRoOyAvKiAyNCB1bnN1cHBvcnRlZCwgcm91bmQtdXAgdG8gMzIgKi8KLQotCWlmICgodGVtcF9wLmRlcHRoID09IDE2KSAmJiAodmFyLT5yZWQubGVuZ3RoID09IDUpICYmICh2YXItPmdyZWVuLmxlbmd0aCA9PSA1KSAmJiAodmFyLT5ibHVlLmxlbmd0aCA9PSA1KSkKLQkJdGVtcF9wLmRlcHRoID0gMTU7IC8qIFJHQkEgNTU1MSBpcyBzdG9yZWQgYXMgZGVwdGggMTUgKi8KLQotCWlmICgodGVtcF9wLmRlcHRoID09IDE2KSAmJiAodmFyLT5yZWQubGVuZ3RoID09IDQpICYmICh2YXItPmdyZWVuLmxlbmd0aCA9PSA0KSAmJiAodmFyLT5ibHVlLmxlbmd0aCA9PSA0KSkKLQkJdGVtcF9wLmRlcHRoID0gMTI7IC8qIFJHQkEgNDQ0NCAgaXMgc3RvcmVkIGFzIGRlcHRoIDEyICovCi0KLQotCURQUklOVEsoMiwKLQkJInhyZXM6ICVkLCB5cmVzOiAlZCwgdnhyZXM6ICVkLCB2eXJlczogJWQgOyB4b2Zmc2V0OiVkLCB5b2Zmc2V0OiAlZFxuIiwKLQkJdmFyLT54cmVzLCB2YXItPnlyZXMsIHZhci0+eHJlc192aXJ0dWFsLCB2YXItPnlyZXNfdmlydHVhbCwKLQkJdmFyLT54b2Zmc2V0LCB2YXItPnlvZmZzZXQpOwotCi0JeHJlcyA9ICh2YXItPnhyZXMgKyAzMSkgJiB+MzE7Ci0JaWYgKHRlbXBfcC53aWR0aCA8IHhyZXMgKyB2YXItPnhvZmZzZXQpCi0JCXRlbXBfcC53aWR0aCA9IHhyZXMgKyB2YXItPnhvZmZzZXQ7Ci0JaWYgKHRlbXBfcC5oZWlnaHQgPCB2YXItPnlyZXMgKyB2YXItPnlvZmZzZXQpCi0JCXRlbXBfcC5oZWlnaHQgPSB2YXItPnlyZXMgKyB2YXItPnlvZmZzZXQ7Ci0KLQlpZiAodGVtcF9wLndpZHRoID4gMjA0OCkgewotCQlEUFJJTlRLKDEsICJ2aXJ0dWFsIHdpZHRoIG5vdCBzdXBwb3J0ZWQ6ICV1XG4iLAotCQkJdGVtcF9wLndpZHRoKTsKLQkJcmV0dXJuICgtRUlOVkFMKTsKLQl9Ci0JaWYgKHZhci0+eXJlcyA8IDIwMCkgewotCQlEUFJJTlRLKDEsICJoZWlnaHQgbm90IHN1cHBvcnRlZDogJXVcbiIsICh1MzIpIHZhci0+eXJlcyk7Ci0JCXJldHVybiAoLUVJTlZBTCk7Ci0JfQotCWlmICh0ZW1wX3AuaGVpZ2h0IDwgMjAwIHx8IHRlbXBfcC5oZWlnaHQgPiA0MDk1KSB7Ci0JCURQUklOVEsoMSwgInZpcnR1YWwgaGVpZ2h0IG5vdCBzdXBwb3J0ZWQ6ICV1XG4iLAotCQkJdGVtcF9wLmhlaWdodCk7Ci0JCXJldHVybiAoLUVJTlZBTCk7Ci0JfQotCWlmICghKGRlcHRoX3N1cHBvcnRlZCh0ZW1wX3AuZGVwdGgpKSkgewotCQlEUFJJTlRLKDEsICJkZXB0aCBub3Qgc3VwcG9ydGVkOiAldVxuIiwgdGVtcF9wLmRlcHRoKTsKLQkJcmV0dXJuICgtRUlOVkFMKTsKLQl9Ci0JaWYgKCh0ZW1wX3Aud2lkdGggKiB0ZW1wX3AuaGVpZ2h0ICogZGVwdGgyQnlQUCh0ZW1wX3AuZGVwdGgpKSA+Ci0JICAgIGxfZmJfaW5mby0+ZmJfc2l6ZSkgewotCQlEUFJJTlRLKDEsICJubyBtZW1vcnkgZm9yIHNjcmVlbiAoJXV4JXV4JXUpXG4iLAotCQkJdGVtcF9wLndpZHRoLCB0ZW1wX3AuaGVpZ2h0LCB0ZW1wX3AuZGVwdGgpOwotCQlyZXR1cm4gKC1FSU5WQUwpOwotCX0KLQotCWlmICgoIXZhci0+cGl4Y2xvY2spIHx8Ci0JICAgICghdmFyLT5yaWdodF9tYXJnaW4pIHx8Ci0JICAgICghdmFyLT5oc3luY19sZW4pIHx8Ci0JICAgICghdmFyLT5sZWZ0X21hcmdpbikgfHwKLQkgICAgKCF2YXItPmxvd2VyX21hcmdpbikgfHwKLQkgICAgKCF2YXItPnZzeW5jX2xlbikgfHwgKCF2YXItPnVwcGVyX21hcmdpbikKLQkgICAgKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaSA9IDAsIGRvbmUgPSAwOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbTNmYjogcmVmdXNpbmcgdG8gdXNlIGEgbGlrZWx5IHdyb25nIHRpbWluZ1xuIik7Ci0KLQkJd2hpbGUgKChtb2RlX2Jhc2VbaV0udXNlcl9tb2RlLndpZHRoKSAmJiAhZG9uZSkgewotCQkJaWYgKChtb2RlX2Jhc2VbaV0udXNlcl9tb2RlLndpZHRoID09IHRlbXBfcC53aWR0aCkKLQkJCSAgICAmJiAobW9kZV9iYXNlW2ldLnVzZXJfbW9kZS5oZWlnaHQgPT0KLQkJCQl0ZW1wX3AuaGVpZ2h0KSkgewotCQkJCXByaW50ayhLRVJOX05PVElDRSAicG0zZmI6IHVzaW5nIGNsb3NlIG1hdGNoICVzXG4iLAotCQkJCSAgICAgICBtb2RlX2Jhc2VbaV0ubmFtZSk7Ci0JCQkJdGVtcF9wID0gbW9kZV9iYXNlW2ldLnVzZXJfbW9kZTsKLQkJCQlkb25lID0gMTsKLQkJCX0KLQkJCWkrKzsKLQkJfQotCQlpZiAoIWRvbmUpCi0JCQlyZXR1cm4gKC1FSU5WQUwpOwotCX0gZWxzZSB7Ci0JCXRlbXBfcC5waXhjbG9jayA9IFBJQ09TMktIWih2YXItPnBpeGNsb2NrKTsKLQkJaWYgKHRlbXBfcC5waXhjbG9jayA+IFBNM19NQVhfUElYQ0xPQ0spIHsKLQkJCURQUklOVEsoMSwgInBpeGNsb2NrIHRvbyBoaWdoICgldUtIeilcbiIsCi0JCQkJdGVtcF9wLnBpeGNsb2NrKTsKLQkJCXJldHVybiAoLUVJTlZBTCk7Ci0JCX0KLQotCQl0ZW1wX3AuaHNzdGFydCA9IHZhci0+cmlnaHRfbWFyZ2luOwotCQl0ZW1wX3AuaHNlbmQgPSB2YXItPnJpZ2h0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuOwotCQl0ZW1wX3AuaGJlbmQgPQotCQkgICAgdmFyLT5yaWdodF9tYXJnaW4gKyB2YXItPmhzeW5jX2xlbiArIHZhci0+bGVmdF9tYXJnaW47Ci0JCXRlbXBfcC5odG90YWwgPSB4cmVzICsgdGVtcF9wLmhiZW5kOwotCi0JCXRlbXBfcC52c3N0YXJ0ID0gdmFyLT5sb3dlcl9tYXJnaW47Ci0JCXRlbXBfcC52c2VuZCA9IHZhci0+bG93ZXJfbWFyZ2luICsgdmFyLT52c3luY19sZW47Ci0JCXRlbXBfcC52YmVuZCA9Ci0JCSAgICB2YXItPmxvd2VyX21hcmdpbiArIHZhci0+dnN5bmNfbGVuICsgdmFyLT51cHBlcl9tYXJnaW47Ci0JCXRlbXBfcC52dG90YWwgPSB2YXItPnlyZXMgKyB0ZW1wX3AudmJlbmQ7Ci0KLQkJdGVtcF9wLnN0cmlkZSA9IHRlbXBfcC53aWR0aDsKLQotCQlEUFJJTlRLKDIsICJVc2luZyAlZCAqICVkLCAlZCBLaHosIHN0cmlkZSBpcyAlMDh4XG4iLAotCQkJdGVtcF9wLndpZHRoLCB0ZW1wX3AuaGVpZ2h0LCB0ZW1wX3AucGl4Y2xvY2ssCi0JCQl0ZW1wX3Auc3RyaWRlKTsKLQotCQl0ZW1wX3AuYmFzZSA9Ci0JCSAgICBwbTNmYl9TaGlmdGJwcChsX2ZiX2luZm8sIHRlbXBfcC5kZXB0aCwKLQkJCQkgICAodmFyLT55b2Zmc2V0ICogeHJlcykgKyB2YXItPnhvZmZzZXQpOwotCi0JCXRlbXBfcC52aWRlbyA9IDA7Ci0KLQkJaWYgKHZhci0+c3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUKQotCQkJdGVtcF9wLnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSDsKLQkJZWxzZQotCQkJdGVtcF9wLnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfTE9XOwotCi0JCWlmICh2YXItPnN5bmMgJiBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QpCi0JCQl0ZW1wX3AudmlkZW8gfD0gUE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9ISUdIOwotCQllbHNlCi0JCQl0ZW1wX3AudmlkZW8gfD0gUE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9MT1c7Ci0KLQkJaWYgKCh2YXItPnZtb2RlICYgRkJfVk1PREVfTUFTSykgPT0gRkJfVk1PREVfSU5URVJMQUNFRCkgewotCQkJRFBSSU5USygxLCAiSW50ZXJsYWNlZCBtb2RlIG5vdCBzdXBwb3J0ZWRcblxuIik7Ci0JCQlyZXR1cm4gKC1FSU5WQUwpOwotCQl9Ci0KLQkJaWYgKCh2YXItPnZtb2RlICYgRkJfVk1PREVfTUFTSykgPT0gRkJfVk1PREVfRE9VQkxFKQotCQkJdGVtcF9wLnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9MSU5FX0RPVUJMRV9PTjsKLQkJZWxzZQotCQkJdGVtcF9wLnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9MSU5FX0RPVUJMRV9PRkY7Ci0KLQkJaWYgKHZhci0+YWN0aXZhdGUgPT0gRkJfQUNUSVZBVEVfTk9XKQotCQkJdGVtcF9wLnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9FTkFCTEU7Ci0JCWVsc2UgewotCQkJdGVtcF9wLnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9ESVNBQkxFOwotCQkJRFBSSU5USygyLCAiUE0zVmlkZW8gZGlzYWJsZWRcbiIpOwotCQl9Ci0KLQkJc3dpdGNoICh0ZW1wX3AuZGVwdGgpIHsKLQkJY2FzZSA4OgotCQkJdGVtcF9wLnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVDsKLQkJCWJyZWFrOwotCQljYXNlIDEyOgotCQljYXNlIDE1OgotCQljYXNlIDE2OgotCQkJdGVtcF9wLnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfMTZCSVQ7Ci0JCQlicmVhazsKLQkJY2FzZSAzMjoKLQkJCXRlbXBfcC52aWRlbyB8PSBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzMyQklUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEUFJJTlRLKDEsICJVbnN1cHBvcnRlZCBkZXB0aFxuIik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQkoKnApID0gdGVtcF9wOwotCi0jaWZkZWYgUE0zRkJfVVNFX0FDQ0VMCi0JaWYgKHZhci0+YWNjZWxfZmxhZ3MgJiBGQl9BQ0NFTEZfVEVYVCkKLQkJbm9hY2NlbFtsX2ZiX2luZm8tPmJvYXJkX251bV0gPSAwOwotCWVsc2UKLQkJbm9hY2NlbFtsX2ZiX2luZm8tPmJvYXJkX251bV0gPSAxOwotI2VuZGlmIC8qIFBNM0ZCX1VTRV9BQ0NFTCAqLwotCi0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQgcG0zZmJfZW5jb2RlX2RlcHRoKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBsb25nIGQpCi17Ci0Jc3dpdGNoIChkKSB7Ci0JY2FzZSA4OgotCQl2YXItPnJlZC5sZW5ndGggPSB2YXItPmdyZWVuLmxlbmd0aCA9IHZhci0+Ymx1ZS5sZW5ndGggPSA4OwotCQl2YXItPnJlZC5vZmZzZXQgPSB2YXItPmdyZWVuLm9mZnNldCA9IHZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSB2YXItPnRyYW5zcC5sZW5ndGggPSAwOwotCQlicmVhazsKLQotCWNhc2UgMTI6Ci0JCXZhci0+cmVkLm9mZnNldCA9IDg7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IDQ7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNDsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA0OwogCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5ibHVlLmxlbmd0aCA9IDQ7Ci0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDEyOwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSA0OwotCQlicmVhazsKLQotCWNhc2UgMTU6Ci0JCXZhci0+cmVkLm9mZnNldCA9IDEwOwotCQl2YXItPnJlZC5sZW5ndGggPSA1OwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gNTsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA1OwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAxNTsKLQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMTsKLQkJYnJlYWs7Ci0KLQljYXNlIDE2OgotCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKLQkJdmFyLT5yZWQubGVuZ3RoID0gNTsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIDMyOgotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAyNDsKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IHZhci0+Z3JlZW4ubGVuZ3RoID0KLQkJCXZhci0+Ymx1ZS5sZW5ndGggPSB2YXItPnRyYW5zcC5sZW5ndGggPSA4OwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCURQUklOVEsoMSwgIlVuc3VwcG9ydGVkIGRlcHRoICVsZFxuIiwgZCk7Ci0JCWJyZWFrOworCQl2YXItPmdyZWVuLm9mZnNldCA9IHZhci0+Ymx1ZS5sZW5ndGg7CisJCXZhci0+cmVkLm9mZnNldCA9IHZhci0+Z3JlZW4ub2Zmc2V0ICsgdmFyLT5ncmVlbi5sZW5ndGg7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IHZhci0+cmVkLm9mZnNldCArIHZhci0+cmVkLmxlbmd0aDsKIAl9Ci19Ci0KLXN0YXRpYyBpbnQgcG0zZmJfZW5jb2RlX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJCSAgICBjb25zdCB2b2lkICpwYXIsIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbykKLXsKLQlzdHJ1Y3QgcG0zZmJfcGFyICpwID0gKHN0cnVjdCBwbTNmYl9wYXIgKikgcGFyOwotCXN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8gPSAoc3RydWN0IHBtM2ZiX2luZm8gKikgaW5mbzsKLQotCXUzMiBiYXNlOwotCi0JRFRSQUNFOwotCi0JREFTU0VSVCgodmFyICE9IE5VTEwpLCAiZmJfdmFyX3NjcmVlbmluZm8qIG5vdCBOVUxMIik7Ci0JREFTU0VSVCgocCAhPSBOVUxMKSwgInBtM2ZiX3Bhciogbm90IE5VTEwiKTsKLQlEQVNTRVJUKChpbmZvICE9IE5VTEwpLCAiZmJfaW5mb19nZW4qIG5vdCBOVUxMIik7Ci0KLQltZW1zZXQodmFyLCAwLCBzaXplb2Yoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvKSk7Ci0KLSNpZmRlZiBQTTNGQl9VU0VfQUNDRUwKLQlpZiAoIShub2FjY2VsW2xfZmJfaW5mby0+Ym9hcmRfbnVtXSkpCi0JCXZhci0+YWNjZWxfZmxhZ3MgfD0gRkJfQUNDRUxGX1RFWFQ7Ci0jZW5kaWYgLyogUE0zRkJfVVNFX0FDQ0VMICovCi0KLQl2YXItPnhyZXNfdmlydHVhbCA9IHAtPndpZHRoOwotCXZhci0+eXJlc192aXJ0dWFsID0gcC0+aGVpZ2h0OwotCXZhci0+eHJlcyA9IHAtPmh0b3RhbCAtIHAtPmhiZW5kOwotCXZhci0+eXJlcyA9IHAtPnZ0b3RhbCAtIHAtPnZiZW5kOwotCi0JRFBSSU5USygyLCAieHJlcyA9ICVkLCB5cmVzIDogJWRcbiIsIHZhci0+eHJlcywgdmFyLT55cmVzKTsKLQotCXZhci0+cmlnaHRfbWFyZ2luID0gcC0+aHNzdGFydDsKLQl2YXItPmhzeW5jX2xlbiA9IHAtPmhzZW5kIC0gcC0+aHNzdGFydDsKLQl2YXItPmxlZnRfbWFyZ2luID0gcC0+aGJlbmQgLSBwLT5oc2VuZDsKLQl2YXItPmxvd2VyX21hcmdpbiA9IHAtPnZzc3RhcnQ7Ci0JdmFyLT52c3luY19sZW4gPSBwLT52c2VuZCAtIHAtPnZzc3RhcnQ7Ci0JdmFyLT51cHBlcl9tYXJnaW4gPSBwLT52YmVuZCAtIHAtPnZzZW5kOwotCXZhci0+Yml0c19wZXJfcGl4ZWwgPSBkZXB0aDJicHAocC0+ZGVwdGgpOwotCQotCXBtM2ZiX2VuY29kZV9kZXB0aCh2YXIsIHAtPmRlcHRoKTsKLQotCWJhc2UgPSBwbTNmYl9VbnNoaWZ0YnBwKGxfZmJfaW5mbywgcC0+ZGVwdGgsIHAtPmJhc2UpOwotCi0JdmFyLT54b2Zmc2V0ID0gYmFzZSAlIHZhci0+eHJlczsKLQl2YXItPnlvZmZzZXQgPSBiYXNlIC8gdmFyLT54cmVzOwotCiAJdmFyLT5oZWlnaHQgPSB2YXItPndpZHRoID0gLTE7CiAKLQl2YXItPnBpeGNsb2NrID0gS0haMlBJQ09TKHAtPnBpeGNsb2NrKTsKLQotCWlmICgocC0+dmlkZW8gJiBQTTNWaWRlb0NvbnRyb2xfSFNZTkNfTUFTSykgPT0KLQkgICAgUE0zVmlkZW9Db250cm9sX0hTWU5DX0FDVElWRV9ISUdIKQotCQl2YXItPnN5bmMgfD0gRkJfU1lOQ19IT1JfSElHSF9BQ1Q7Ci0JaWYgKChwLT52aWRlbyAmIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19NQVNLKSA9PQotCSAgICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0gpCi0JCXZhci0+c3luYyB8PSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1Q7Ci0JaWYgKHAtPnZpZGVvICYgUE0zVmlkZW9Db250cm9sX0xJTkVfRE9VQkxFX09OKQotCQl2YXItPnZtb2RlID0gRkJfVk1PREVfRE9VQkxFOwotCi0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQgcG0zZmJfZ2V0X3Bhcih2b2lkICpwYXIsIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbykKLXsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvID0gKHN0cnVjdCBwbTNmYl9pbmZvICopIGluZm87Ci0KLQlEVFJBQ0U7Ci0KLQlpZiAoIWN1cnJlbnRfcGFyX3ZhbGlkW2xfZmJfaW5mby0+Ym9hcmRfbnVtXSkgewotCQlpZiAobF9mYl9pbmZvLT51c2VfY3VycmVudCkKLQkJCXBtM2ZiX3JlYWRfbW9kZShsX2ZiX2luZm8sIGxfZmJfaW5mby0+Y3VycmVudF9wYXIpOwotCQllbHNlCi0JCQltZW1jcHkobF9mYl9pbmZvLT5jdXJyZW50X3BhciwKLQkJCSAgICAgICAmKG1vZGVfYmFzZVswXS51c2VyX21vZGUpLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcG0zZmJfcGFyKSk7Ci0JCWN1cnJlbnRfcGFyX3ZhbGlkW2xfZmJfaW5mby0+Ym9hcmRfbnVtXSA9IDE7CisJaWYgKHZhci0+eHJlcyAhPSB2YXItPnhyZXNfdmlydHVhbCkgeworCQlEUFJJTlRLKCJ2aXJ0dWFsIHggcmVzb2x1dGlvbiAhPSBwaHlzaWNhbCB4IHJlc29sdXRpb24gbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQkqKChzdHJ1Y3QgcG0zZmJfcGFyICopIHBhcikgPSAqKGxfZmJfaW5mby0+Y3VycmVudF9wYXIpOwotfQogCi1zdGF0aWMgdm9pZCBwbTNmYl9zZXRfcGFyKGNvbnN0IHZvaWQgKnBhciwgc3RydWN0IGZiX2luZm9fZ2VuICppbmZvKQotewotCXN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8gPSAoc3RydWN0IHBtM2ZiX2luZm8gKikgaW5mbzsKLQotCURUUkFDRTsKLQotCSoobF9mYl9pbmZvLT5jdXJyZW50X3BhcikgPSAqKChzdHJ1Y3QgcG0zZmJfcGFyICopIHBhcik7Ci0JY3VycmVudF9wYXJfdmFsaWRbbF9mYl9pbmZvLT5ib2FyZF9udW1dID0gMTsKLQotCXBtM2ZiX3dyaXRlX21vZGUobF9mYl9pbmZvKTsKLQotI2lmZGVmIFBNM0ZCX1VTRV9BQ0NFTAotCXBtM2ZiX2luaXRfZW5naW5lKGxfZmJfaW5mbyk7Ci0jZW5kaWYgLyogUE0zRkJfVVNFX0FDQ0VMICovCi19Ci0KLXN0YXRpYyB2b2lkIHBtM2ZiX3NldF9jb2xvcihzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvLAotCQkJICAgIHVuc2lnbmVkIGNoYXIgcmVnbm8sIHVuc2lnbmVkIGNoYXIgciwKLQkJCSAgICB1bnNpZ25lZCBjaGFyIGcsIHVuc2lnbmVkIGNoYXIgYikKLXsKLQlEVFJBQ0U7Ci0KLQlQTTNfU0xPV19XUklURV9SRUcoUE0zUkRfUGFsZXR0ZVdyaXRlQWRkcmVzcywgcmVnbm8pOwotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNSRF9QYWxldHRlRGF0YSwgcik7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1JEX1BhbGV0dGVEYXRhLCBnKTsKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zUkRfUGFsZXR0ZURhdGEsIGIpOwotfQotCi1zdGF0aWMgaW50IHBtM2ZiX2dldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgKnJlZCwgdW5zaWduZWQgKmdyZWVuLAotCQkJICAgdW5zaWduZWQgKmJsdWUsIHVuc2lnbmVkICp0cmFuc3AsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvID0gKHN0cnVjdCBwbTNmYl9pbmZvICopIGluZm87Ci0KLQlEVFJBQ0U7Ci0KLQlpZiAocmVnbm8gPCAyNTYpIHsKLQkJKnJlZCA9Ci0JCSAgICBsX2ZiX2luZm8tPnBhbGV0dGVbcmVnbm9dLnJlZCA8PCA4IHwgbF9mYl9pbmZvLT4KLQkJICAgIHBhbGV0dGVbcmVnbm9dLnJlZDsKLQkJKmdyZWVuID0KLQkJICAgIGxfZmJfaW5mby0+cGFsZXR0ZVtyZWdub10uZ3JlZW4gPDwgOCB8IGxfZmJfaW5mby0+Ci0JCSAgICBwYWxldHRlW3JlZ25vXS5ncmVlbjsKLQkJKmJsdWUgPQotCQkgICAgbF9mYl9pbmZvLT5wYWxldHRlW3JlZ25vXS5ibHVlIDw8IDggfCBsX2ZiX2luZm8tPgotCQkgICAgcGFsZXR0ZVtyZWdub10uYmx1ZTsKLQkJKnRyYW5zcCA9Ci0JCSAgICBsX2ZiX2luZm8tPnBhbGV0dGVbcmVnbm9dLnRyYW5zcCA8PCA4IHwgbF9mYl9pbmZvLT4KLQkJICAgIHBhbGV0dGVbcmVnbm9dLnRyYW5zcDsKKwlpZiAodmFyLT55cmVzID4gdmFyLT55cmVzX3ZpcnR1YWwpIHsKKwkJRFBSSU5USygidmlydHVhbCB5IHJlc29sdXRpb24gPCBwaHlzaWNhbCB5IHJlc29sdXRpb24gbm90IHBvc3NpYmxlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiAocmVnbm8gPiAyNTUpOworCisJaWYgKHZhci0+eG9mZnNldCkgeworCQlEUFJJTlRLKCJ4b2Zmc2V0IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9NQVNLKSA9PSBGQl9WTU9ERV9JTlRFUkxBQ0VEKSB7CisJCURQUklOVEsoImludGVybGFjZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmFyLT54cmVzID0gKHZhci0+eHJlcyArIDMxKSAmIH4zMTsgLyogY291bGQgc29tZXRpbWVzIGJlIDggKi8KKwlscGl0Y2ggPSB2YXItPnhyZXMgKiAoKHZhci0+Yml0c19wZXJfcGl4ZWwgKyA3KT4+Myk7CisKKwlpZiAodmFyLT54cmVzIDwgMjAwIHx8IHZhci0+eHJlcyA+IDIwNDgpIHsKKwkJRFBSSU5USygid2lkdGggbm90IHN1cHBvcnRlZDogJXVcbiIsIHZhci0+eHJlcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2YXItPnlyZXMgPCAyMDAgfHwgdmFyLT55cmVzID4gNDA5NSkgeworCQlEUFJJTlRLKCJoZWlnaHQgbm90IHN1cHBvcnRlZDogJXVcbiIsIHZhci0+eXJlcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChscGl0Y2ggKiB2YXItPnlyZXNfdmlydHVhbCA+IGluZm8tPmZpeC5zbWVtX2xlbikgeworCQlEUFJJTlRLKCJubyBtZW1vcnkgZm9yIHNjcmVlbiAoJXV4JXV4JXUpXG4iLAorCQkJdmFyLT54cmVzLCB2YXItPnlyZXNfdmlydHVhbCwgdmFyLT5iaXRzX3Blcl9waXhlbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChQSUNPUzJLSFoodmFyLT5waXhjbG9jaykgPiBQTTNfTUFYX1BJWENMT0NLKSB7CisJCURQUklOVEsoInBpeGNsb2NrIHRvbyBoaWdoICglbGRLSHopXG4iLCBQSUNPUzJLSFoodmFyLT5waXhjbG9jaykpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2YXItPmFjY2VsX2ZsYWdzID0gMDsJLyogQ2FuJ3QgbW1hcCBpZiB0aGlzIGlzIG9uICovCisKKwlEUFJJTlRLKCJDaGVja2luZyBncmFwaGljcyBtb2RlIGF0ICVkeCVkIGRlcHRoICVkXG4iLAorCQl2YXItPnhyZXMsIHZhci0+eXJlcywgdmFyLT5iaXRzX3Blcl9waXhlbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG0zZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcG0zX3BhciAqcGFyID0gaW5mby0+cGFyOworCWNvbnN0IHUzMiB4cmVzID0gKGluZm8tPnZhci54cmVzICsgMzEpICYgfjMxOworCWNvbnN0IHVuc2lnbmVkIGJwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKKworCXBhci0+YmFzZSA9IHBtM2ZiX3NoaWZ0X2JwcChicHAsKGluZm8tPnZhci55b2Zmc2V0ICogeHJlcykKKwkJCQkJKyBpbmZvLT52YXIueG9mZnNldCk7CisJcGFyLT52aWRlbyA9IDA7CisKKwlpZiAoaW5mby0+dmFyLnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkKKwkJcGFyLT52aWRlbyB8PSBQTTNWaWRlb0NvbnRyb2xfSFNZTkNfQUNUSVZFX0hJR0g7CisJZWxzZQorCQlwYXItPnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfTE9XOworCisJaWYgKGluZm8tPnZhci5zeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUKQorCQlwYXItPnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19BQ1RJVkVfSElHSDsKKwllbHNlCisJCXBhci0+dmlkZW8gfD0gUE0zVmlkZW9Db250cm9sX1ZTWU5DX0FDVElWRV9MT1c7CisKKwlpZiAoKGluZm8tPnZhci52bW9kZSAmIEZCX1ZNT0RFX01BU0spID09IEZCX1ZNT0RFX0RPVUJMRSkKKwkJcGFyLT52aWRlbyB8PSBQTTNWaWRlb0NvbnRyb2xfTElORV9ET1VCTEVfT047CisJZWxzZQorCQlwYXItPnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9MSU5FX0RPVUJMRV9PRkY7CisKKwlpZiAoKGluZm8tPnZhci5hY3RpdmF0ZSAmIEZCX0FDVElWQVRFX01BU0spID09IEZCX0FDVElWQVRFX05PVykKKwkJcGFyLT52aWRlbyB8PSBQTTNWaWRlb0NvbnRyb2xfRU5BQkxFOworCWVsc2UgeworCQlwYXItPnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9ESVNBQkxFOworCQlEUFJJTlRLKCJQTTNWaWRlbyBkaXNhYmxlZFxuIik7CisJfQorCXN3aXRjaCAoYnBwKSB7CisJY2FzZSA4OgorCQlwYXItPnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfOEJJVDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJcGFyLT52aWRlbyB8PSBQTTNWaWRlb0NvbnRyb2xfUElYRUxTSVpFXzE2QklUOworCQlicmVhazsKKwljYXNlIDMyOgorCQlwYXItPnZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9QSVhFTFNJWkVfMzJCSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQUklOVEsoIlVuc3VwcG9ydGVkIGRlcHRoXG4iKTsKKwkJYnJlYWs7CisJfQorCisJaW5mby0+Zml4LnZpc3VhbCA9CisJCShicHAgPT0gOCkgPyBGQl9WSVNVQUxfUFNFVURPQ09MT1IgOiBGQl9WSVNVQUxfVFJVRUNPTE9SOworCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9ICgoaW5mby0+dmFyLnhyZXNfdmlydHVhbCArIDcpICAmIH43KQorCQkJCQkqIGJwcCAvIDg7CisKKy8qCXBtM2ZiX2NsZWFyX21lbW9yeShpbmZvLCAwKTsqLworCXBtM2ZiX2NsZWFyX2NvbG9ybWFwKHBhciwgMCwgMCwgMCk7CisJUE0zX1dSSVRFX0RBQ19SRUcocGFyLCBQTTNSRF9DdXJzb3JNb2RlLAorCQkJICBQTTNSRF9DdXJzb3JNb2RlX0NVUlNPUl9ESVNBQkxFKTsKKwlwbTNmYl93cml0ZV9tb2RlKGluZm8pOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBtM2ZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKIAkJCSAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwKIAkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8gPSAoc3RydWN0IHBtM2ZiX2luZm8gKikgaW5mbzsKKwlzdHJ1Y3QgcG0zX3BhciAqcGFyID0gaW5mby0+cGFyOwogCi0JRFRSQUNFOworCWlmIChyZWdubyA+PSAyNTYpICAvKiBuby4gb2YgaHcgcmVnaXN0ZXJzICovCisJICAgcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAocmVnbm8gPCAxNikgewotCQlzd2l0Y2ggKGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoKSB7Ci0jaWZkZWYgRkJDT05fSEFTX0NGQjgKKwkvKiBncmF5c2NhbGUgd29ya3Mgb25seSBwYXJ0aWFsbHkgdW5kZXIgZGlyZWN0Y29sb3IgKi8KKwlpZiAoaW5mby0+dmFyLmdyYXlzY2FsZSkgeworCSAgIC8qIGdyYXlzY2FsZSA9IDAuMzAqUiArIDAuNTkqRyArIDAuMTEqQiAqLworCSAgIHJlZCA9IGdyZWVuID0gYmx1ZSA9IChyZWQgKiA3NyArIGdyZWVuICogMTUxICsgYmx1ZSAqIDI4KSA+PiA4OworCX0KKworCS8qIERpcmVjdGNvbG9yOgorCSAqICAgdmFyLT57Y29sb3J9Lm9mZnNldCBjb250YWlucyBzdGFydCBvZiBiaXRmaWVsZAorCSAqICAgdmFyLT57Y29sb3J9Lmxlbmd0aCBjb250YWlucyBsZW5ndGggb2YgYml0ZmllbGQKKwkgKiAgIHtoYXJkd2FyZXNwZWNpZmljfSBjb250YWlucyB3aWR0aCBvZiBEQUMKKwkgKiAgIHBzZXVkb19wYWxldHRlW1hdIGlzIHByb2dyYW1tZWQgdG8gKFggPDwgcmVkLm9mZnNldCkgfAorCSAqCQkJCQkoWCA8PCBncmVlbi5vZmZzZXQpIHwKKwkgKgkJCQkJKFggPDwgYmx1ZS5vZmZzZXQpCisJICogICBSQU1EQUNbWF0gaXMgcHJvZ3JhbW1lZCB0byAocmVkLCBncmVlbiwgYmx1ZSkKKwkgKiAgIGNvbG9yIGRlcHRoID0gU1VNKHZhci0+e2NvbG9yfS5sZW5ndGgpCisJICoKKwkgKiBQc2V1ZG9jb2xvcjoKKwkgKgl2YXItPntjb2xvcn0ub2Zmc2V0IGlzIDAKKwkgKgl2YXItPntjb2xvcn0ubGVuZ3RoIGNvbnRhaW5zIHdpZHRoIG9mIERBQyBvciB0aGUgbnVtYmVyIG9mIHVuaXF1ZQorCSAqCQkJY29sb3JzIGF2YWlsYWJsZSAoY29sb3IgZGVwdGgpCisJICoJcHNldWRvX3BhbGV0dGUgaXMgbm90IHVzZWQKKwkgKglSQU1EQUNbWF0gaXMgcHJvZ3JhbW1lZCB0byAocmVkLCBncmVlbiwgYmx1ZSkKKwkgKgljb2xvciBkZXB0aCA9IHZhci0+e2NvbG9yfS5sZW5ndGgKKwkgKi8KKworCS8qCisJICogVGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgdGhlIGNvbG9yIGlzIGNvbnZlcnRlZCB0byBzb21ldGhpbmcgdGhhdAorCSAqIGlzIGFjY2VwdGFibGUgYnkgdGhlIGhhcmR3YXJlLgorCSAqLworI2RlZmluZSBDTlZUX1RPSFcodmFsLHdpZHRoKSAoKCgodmFsKTw8KHdpZHRoKSkrMHg3RkZGLSh2YWwpKT4+MTYpCisJcmVkID0gQ05WVF9UT0hXKHJlZCwgaW5mby0+dmFyLnJlZC5sZW5ndGgpOworCWdyZWVuID0gQ05WVF9UT0hXKGdyZWVuLCBpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoKTsKKwlibHVlID0gQ05WVF9UT0hXKGJsdWUsIGluZm8tPnZhci5ibHVlLmxlbmd0aCk7CisJdHJhbnNwID0gQ05WVF9UT0hXKHRyYW5zcCwgaW5mby0+dmFyLnRyYW5zcC5sZW5ndGgpOworI3VuZGVmIENOVlRfVE9IVworCisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUiB8fAorCWluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX0RJUkVDVENPTE9SKSB7CisJCXUzMiB2OworCisJCWlmIChyZWdubyA+PSAxNikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXYgPSAocmVkIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8CisJCQkoZ3JlZW4gPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAorCQkJKGJsdWUgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KSB8CisJCQkodHJhbnNwIDw8IGluZm8tPnZhci50cmFuc3Aub2Zmc2V0KTsKKworCQlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgewogCQljYXNlIDg6CiAJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIEZCQ09OX0hBU19DRkIxNgotCQljYXNlIDEyOgotCQkJbF9mYl9pbmZvLT5jbWFwLmNtYXAxMltyZWdub10gPQotCQkJCSgoKHUzMikgcmVkICYgMHhmMDAwKSA+PiA0KSB8Ci0JCQkJKCgodTMyKSBncmVlbiAmIDB4ZjAwMCkgPj4gOCkgfAotCQkJCSgoKHUzMikgYmx1ZSAmIDB4ZjAwMCkgPj4gMTIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAxNToKLQkJCWxfZmJfaW5mby0+Y21hcC5jbWFwMTVbcmVnbm9dID0KLQkJCQkoKCh1MzIpIHJlZCAmIDB4ZjgwMCkgPj4gMSkgfAotCQkJCSgoKHUzMikgZ3JlZW4gJiAweGY4MDApID4+IDYpIHwKLQkJCQkoKCh1MzIpIGJsdWUgJiAweGY4MDApID4+IDExKTsKLQkJCWJyZWFrOwotCiAJCWNhc2UgMTY6Ci0JCQlsX2ZiX2luZm8tPmNtYXAuY21hcDE2W3JlZ25vXSA9Ci0JCQkgICAgKCh1MzIpIHJlZCAmIDB4ZjgwMCkgfAotCQkJICAgICgoKHUzMikgZ3JlZW4gJiAweGZjMDApID4+IDUpIHwKLQkJCSAgICAoKCh1MzIpIGJsdWUgJiAweGY4MDApID4+IDExKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgRkJDT05fSEFTX0NGQjMyCiAJCWNhc2UgMzI6Ci0JCQlsX2ZiX2luZm8tPmNtYXAuY21hcDMyW3JlZ25vXSA9Ci0JCQkgICAgKCgodTMyKSB0cmFuc3AgJiAweGZmMDApIDw8IDE2KSB8Ci0JCQkgICAgKCgodTMyKSByZWQgJiAweGZmMDApIDw8IDgpIHwKLQkJCSAgICAoKCh1MzIpIGdyZWVuICYgMHhmZjAwKSkgfAotCQkJICAgICgoKHUzMikgYmx1ZSAmIDB4ZmYwMCkgPj4gOCk7Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJRFBSSU5USygxLCAiYmFkIGRlcHRoICV1XG4iLAotCQkJCWxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoKTsKKwkJCSgodTMyKikoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPSB2OwogCQkJYnJlYWs7CiAJCX0KKwkJcmV0dXJuIDA7CiAJfQotCWlmIChyZWdubyA8IDI1NikgewotCQlsX2ZiX2luZm8tPnBhbGV0dGVbcmVnbm9dLnJlZCA9IHJlZCA+PiA4OwotCQlsX2ZiX2luZm8tPnBhbGV0dGVbcmVnbm9dLmdyZWVuID0gZ3JlZW4gPj4gODsKLQkJbF9mYl9pbmZvLT5wYWxldHRlW3JlZ25vXS5ibHVlID0gYmx1ZSA+PiA4OwotCQlsX2ZiX2luZm8tPnBhbGV0dGVbcmVnbm9dLnRyYW5zcCA9IHRyYW5zcCA+PiA4OwotCQlpZiAobF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGggPT0gOCkKLQkJCXBtM2ZiX3NldF9jb2xvcihsX2ZiX2luZm8sIHJlZ25vLCByZWQgPj4gOCwKLQkJCQkJZ3JlZW4gPj4gOCwgYmx1ZSA+PiA4KTsKLQl9Ci0JcmV0dXJuIChyZWdubyA+IDI1NSk7CisJZWxzZSBpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfUFNFVURPQ09MT1IpCisJCXBtM2ZiX3NldF9jb2xvcihwYXIsIHJlZ25vLCByZWQsIGdyZWVuLCBibHVlKTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBtM2ZiX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mb19nZW4gKmluZm8pCitzdGF0aWMgaW50IHBtM2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJCSBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvID0gKHN0cnVjdCBwbTNmYl9pbmZvICopIGluZm87Ci0JdTMyIHZpZGVvOworCXN0cnVjdCBwbTNfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJY29uc3QgdTMyIHhyZXMgPSAodmFyLT54cmVzICsgMzEpICYgfjMxOwogCi0JRFRSQUNFOworCXBhci0+YmFzZSA9IHBtM2ZiX3NoaWZ0X2JwcCh2YXItPmJpdHNfcGVyX3BpeGVsLAorCQkJCQkodmFyLT55b2Zmc2V0ICogeHJlcykKKwkJCQkJKyB2YXItPnhvZmZzZXQpOworCVBNM19XQUlUKHBhciwgMSk7CisJUE0zX1dSSVRFX1JFRyhwYXIsIFBNM1NjcmVlbkJhc2UsIHBhci0+YmFzZSk7CisJcmV0dXJuIDA7Cit9CiAKLQlpZiAoIWN1cnJlbnRfcGFyX3ZhbGlkW2xfZmJfaW5mby0+Ym9hcmRfbnVtXSkKLQkJcmV0dXJuICgxKTsKLQotCXZpZGVvID0gbF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+dmlkZW87CitzdGF0aWMgaW50IHBtM2ZiX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcG0zX3BhciAqcGFyID0gaW5mby0+cGFyOworCXUzMiB2aWRlbyA9IHBhci0+dmlkZW87CiAKIAkvKgogCSAqIE94eWdlbiBWWDEgLSBpdCBhcHBlYXJzIHRoYXQgc2V0dGluZyBQTTNWaWRlb0NvbnRyb2wgYW5kCkBAIC0zMTgxLDQ1NCArNjM1LDM0NCBAQAogCXZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9IU1lOQ19BQ1RJVkVfSElHSCB8CiAJCSBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfQUNUSVZFX0hJR0g7CiAKLQlpZiAoYmxhbmtfbW9kZSA+IDApIHsKLQkJc3dpdGNoIChibGFua19tb2RlIC0gMSkgewotCi0JCWNhc2UgVkVTQV9OT19CTEFOS0lORzoJLyogRklYTUUgKi8KLQkJCXZpZGVvID0gdmlkZW8gJiB+KFBNM1ZpZGVvQ29udHJvbF9FTkFCTEUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWRVNBX0hTWU5DX1NVU1BFTkQ6Ci0JCQl2aWRlbyA9IHZpZGVvICYgfihQTTNWaWRlb0NvbnRyb2xfSFNZTkNfTUFTSyB8Ci0JCQkJCSAgUE0zVmlkZW9Db250cm9sX0JMQU5LX0FDVElWRV9MT1cpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVkVTQV9WU1lOQ19TVVNQRU5EOgotCQkJdmlkZW8gPSB2aWRlbyAmIH4oUE0zVmlkZW9Db250cm9sX1ZTWU5DX01BU0sgfAotCQkJCQkgIFBNM1ZpZGVvQ29udHJvbF9CTEFOS19BQ1RJVkVfTE9XKTsKLQkJCWJyZWFrOwotCQljYXNlIFZFU0FfUE9XRVJET1dOOgotCQkJdmlkZW8gPSB2aWRlbyAmIH4oUE0zVmlkZW9Db250cm9sX0hTWU5DX01BU0sgfAotCQkJCQkgIFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19NQVNLIHwKLQkJCQkJICBQTTNWaWRlb0NvbnRyb2xfQkxBTktfQUNUSVZFX0xPVyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCURQUklOVEsoMSwgIlVuc3VwcG9ydGVkIGJsYW5raW5nICVkXG4iLAotCQkJCWJsYW5rX21vZGUpOwotCQkJcmV0dXJuICgxKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1ZpZGVvQ29udHJvbCwgdmlkZW8pOwotCi0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQgcG0zZmJfc2V0X2Rpc3AoY29uc3Qgdm9pZCAqcGFyLCBzdHJ1Y3QgZGlzcGxheSAqZGlzcCwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbykKLXsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvID0gKHN0cnVjdCBwbTNmYl9pbmZvICopIGluZm87Ci0Jc3RydWN0IHBtM2ZiX3BhciAqcCA9IChzdHJ1Y3QgcG0zZmJfcGFyICopIHBhcjsKLQl1MzIgZmxhZ3M7Ci0KLQlEVFJBQ0U7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaW5mby0+aW5mby5zY3JlZW5fYmFzZSA9IGxfZmJfaW5mby0+dl9mYjsKLQlzd2l0Y2ggKHAtPmRlcHRoKSB7Ci0jaWZkZWYgRkJDT05fSEFTX0NGQjgKLQljYXNlIDg6Ci0jaWZkZWYgUE0zRkJfVVNFX0FDQ0VMCi0JCWlmICghKG5vYWNjZWxbbF9mYl9pbmZvLT5ib2FyZF9udW1dKSkKLQkJCWRpc3AtPmRpc3BzdyA9ICZwbTNmYl9jZmI4OwotCQllbHNlCi0jZW5kaWYgLyogUE0zRkJfVVNFX0FDQ0VMICovCi0JCQlkaXNwLT5kaXNwc3cgPSAmZmJjb25fY2ZiODsKKwlzd2l0Y2ggKGJsYW5rX21vZGUpIHsKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCXZpZGVvIHw9IFBNM1ZpZGVvQ29udHJvbF9FTkFCTEU7CiAJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgRkJDT05fSEFTX0NGQjE2Ci0JY2FzZSAxMjoKLSNpZmRlZiBQTTNGQl9VU0VfQUNDRUwKLQkJaWYgKCEobm9hY2NlbFtsX2ZiX2luZm8tPmJvYXJkX251bV0pKQotCQkJZGlzcC0+ZGlzcHN3ID0gJnBtM2ZiX2NmYjE2OwotCQllbHNlCi0jZW5kaWYgLyogUE0zRkJfVVNFX0FDQ0VMICovCi0JCQlkaXNwLT5kaXNwc3cgPSAmZmJjb25fY2ZiMTY7Ci0JCWRpc3AtPmRpc3Bzd19kYXRhID0gbF9mYl9pbmZvLT5jbWFwLmNtYXAxMjsKKwljYXNlIEZCX0JMQU5LX05PUk1BTDoKKwkJdmlkZW8gJj0gfihQTTNWaWRlb0NvbnRyb2xfRU5BQkxFKTsKIAkJYnJlYWs7Ci0JY2FzZSAxNToKLSNpZmRlZiBQTTNGQl9VU0VfQUNDRUwKLQkJaWYgKCEobm9hY2NlbFtsX2ZiX2luZm8tPmJvYXJkX251bV0pKQotCQkJZGlzcC0+ZGlzcHN3ID0gJnBtM2ZiX2NmYjE2OwotCQllbHNlCi0jZW5kaWYgLyogUE0zRkJfVVNFX0FDQ0VMICovCi0JCQlkaXNwLT5kaXNwc3cgPSAmZmJjb25fY2ZiMTY7Ci0JCWRpc3AtPmRpc3Bzd19kYXRhID0gbF9mYl9pbmZvLT5jbWFwLmNtYXAxNTsKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJCXZpZGVvICY9IH4oUE0zVmlkZW9Db250cm9sX0hTWU5DX01BU0sgfAorCQkJICBQTTNWaWRlb0NvbnRyb2xfQkxBTktfQUNUSVZFX0xPVyk7CiAJCWJyZWFrOwotCWNhc2UgMTY6Ci0jaWZkZWYgUE0zRkJfVVNFX0FDQ0VMCi0JCWlmICghKG5vYWNjZWxbbF9mYl9pbmZvLT5ib2FyZF9udW1dKSkKLQkJCWRpc3AtPmRpc3BzdyA9ICZwbTNmYl9jZmIxNjsKLQkJZWxzZQotI2VuZGlmIC8qIFBNM0ZCX1VTRV9BQ0NFTCAqLwotCQkJZGlzcC0+ZGlzcHN3ID0gJmZiY29uX2NmYjE2OwotCQlkaXNwLT5kaXNwc3dfZGF0YSA9IGxfZmJfaW5mby0+Y21hcC5jbWFwMTY7CisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgorCQl2aWRlbyAmPSB+KFBNM1ZpZGVvQ29udHJvbF9WU1lOQ19NQVNLIHwKKwkJCSAgUE0zVmlkZW9Db250cm9sX0JMQU5LX0FDVElWRV9MT1cpOwogCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIEZCQ09OX0hBU19DRkIzMgotCWNhc2UgMzI6Ci0jaWZkZWYgUE0zRkJfVVNFX0FDQ0VMCi0JCWlmICghKG5vYWNjZWxbbF9mYl9pbmZvLT5ib2FyZF9udW1dKSkKLQkJCWRpc3AtPmRpc3BzdyA9ICZwbTNmYl9jZmIzMjsKLQkJZWxzZQotI2VuZGlmIC8qIFBNM0ZCX1VTRV9BQ0NFTCAqLwotCQkJZGlzcC0+ZGlzcHN3ID0gJmZiY29uX2NmYjMyOwotCQlkaXNwLT5kaXNwc3dfZGF0YSA9IGxfZmJfaW5mby0+Y21hcC5jbWFwMzI7CisJY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CisJCXZpZGVvICY9IH4oUE0zVmlkZW9Db250cm9sX0hTWU5DX01BU0sgfAorCQkJICBQTTNWaWRlb0NvbnRyb2xfVlNZTkNfTUFTSyB8CisJCQkgIFBNM1ZpZGVvQ29udHJvbF9CTEFOS19BQ1RJVkVfTE9XKTsKIAkJYnJlYWs7Ci0jZW5kaWYgLyogRkJDT05fSEFTX0NGQjMyICovCiAJZGVmYXVsdDoKLQkJZGlzcC0+ZGlzcHN3ID0gJmZiY29uX2R1bW15OwotCQlEUFJJTlRLKDEsICJJbnZhbGlkIGRlcHRoLCB1c2luZyBmYmNvbl9kdW1teVxuIik7Ci0JCWJyZWFrOwotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qICovCi1zdGF0aWMgdm9pZCBwbTNmYl9kZXRlY3Qodm9pZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2X2FycmF5W1BNM19NQVhfQk9BUkRdOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwotCXN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8gPSAmKGZiX2luZm9bMF0pOwotCXVuc2lnbmVkIGxvbmcgaSwgaiwgZG9uZTsKLQotCURUUkFDRTsKLQotCWZvciAoaSA9IDA7IGkgPCBQTTNfTUFYX0JPQVJEOyBpKyspIHsKLQkJZGV2X2FycmF5W2ldID0gTlVMTDsKLQkJZmJfaW5mb1tpXS5kZXYgPSBOVUxMOworCQlEUFJJTlRLKCJVbnN1cHBvcnRlZCBibGFua2luZyAlZFxuIiwgYmxhbmtfbW9kZSk7CisJCXJldHVybiAxOwogCX0KIAotCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfM0RMQUJTLAotCQkJICAgIFBDSV9ERVZJQ0VfSURfM0RMQUJTX1BFUk1FRElBMywgZGV2KTsKLQotCWZvciAoaSA9IDA7ICgoaSA8IFBNM19NQVhfQk9BUkQpICYmIGRldik7IGkrKykgewotCQlkZXZfYXJyYXlbaV0gPSBkZXY7Ci0JCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfM0RMQUJTLAotCQkJCSAgICBQQ0lfREVWSUNFX0lEXzNETEFCU19QRVJNRURJQTMsIGRldik7Ci0JfQotCi0JaWYgKGRldikgewkJLyogbW9yZSB0aGFuIFBNM19NQVhfQk9BUkQgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicG0zZmI6IFdhcm5pbmc6IG1vcmUgdGhhbiAlZCBib2FyZHMgZm91bmRcbiIsCi0JCSAgICAgICBQTTNfTUFYX0JPQVJEKTsKLQl9Ci0KLQlpZiAoIWRldl9hcnJheVswXSkgewkvKiBub3QgYSBzaW5nbGUgYm9hcmQsIGFib3J0ICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBhbGxvY2F0ZSB1c2VyLWRlZmluZWQgYm9hcmRzICovCi0JZm9yIChpID0gMDsgaSA8IFBNM19NQVhfQk9BUkQ7IGkrKykgewotCQlpZiAoKGJ1c1tpXSA+PSAwKSAmJiAoc2xvdFtpXSA+PSAwKSAmJiAoZnVuY1tpXSA+PSAwKSkgewotCQkJZm9yIChqID0gMDsgaiA8IFBNM19NQVhfQk9BUkQ7IGorKykgewotCQkJCWlmICgoZGV2X2FycmF5W2pdICE9IE5VTEwpICYmCi0JCQkJICAgIChkZXZfYXJyYXlbal0tPmJ1cy0+bnVtYmVyID09IGJ1c1tpXSkKLQkJCQkgICAgJiYgKFBDSV9TTE9UKGRldl9hcnJheVtqXS0+ZGV2Zm4pID09Ci0JCQkJCXNsb3RbaV0pCi0JCQkJICAgICYmIChQQ0lfRlVOQyhkZXZfYXJyYXlbal0tPmRldmZuKSA9PQotCQkJCQlmdW5jW2ldKSkgewotCQkJCQlmYl9pbmZvW2ldLmRldiA9IGRldl9hcnJheVtqXTsKLQkJCQkJZGV2X2FycmF5W2pdID0gTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogYWxsb2NhdGUgcmVtYWluaW5nIGJvYXJkcyAqLwotCWZvciAoaSA9IDA7IGkgPCBQTTNfTUFYX0JPQVJEOyBpKyspIHsKLQkJaWYgKGZiX2luZm9baV0uZGV2ID09IE5VTEwpIHsKLQkJCWRvbmUgPSAwOwotCQkJZm9yIChqID0gMDsgKChqIDwgUE0zX01BWF9CT0FSRCkgJiYgKCFkb25lKSk7IGorKykgewotCQkJCWlmIChkZXZfYXJyYXlbal0gIT0gTlVMTCkgewotCQkJCQlmYl9pbmZvW2ldLmRldiA9IGRldl9hcnJheVtqXTsKLQkJCQkJZGV2X2FycmF5W2pdID0gTlVMTDsKLQkJCQkJZG9uZSA9IDE7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyogYXQgdGhhdCBwb2ludCwgYWxsIFBDSSBQZXJtZWRpYTMgYXJlIGRldGVjdGVkIGFuZCBhbGxvY2F0ZWQgKi8KLQkvKiBub3csIGluaXRpYWxpemUuLi4gb3Igbm90ICovCi0JZm9yIChpID0gMDsgaSA8IFBNM19NQVhfQk9BUkQ7IGkrKykgewotCQlsX2ZiX2luZm8gPSAmKGZiX2luZm9baV0pOwotCQlpZiAobF9mYl9pbmZvLT5kZXYgJiYgIWRpc2FibGVbaV0pIHsJLyogUENJIGRldmljZSB3YXMgZm91bmQgYW5kIG5vdCBkaXNhYmxlZCBieSB1c2VyICovCi0JCQlEUFJJTlRLKDIsCi0JCQkJImZvdW5kIEAlbHggVmVuZG9yICVseCBEZXZpY2UgJWx4IDsgYmFzZSBAIDogJWx4IC0gJWx4IC0gJWx4IC0gJWx4IC0gJWx4IC0gJWx4LCBpcnEgJWxkXG4iLAotCQkJCSh1bnNpZ25lZCBsb25nKSBsX2ZiX2luZm8tPmRldiwKLQkJCQkodW5zaWduZWQgbG9uZykgbF9mYl9pbmZvLT5kZXYtPnZlbmRvciwKLQkJCQkodW5zaWduZWQgbG9uZykgbF9mYl9pbmZvLT5kZXYtPmRldmljZSwKLQkJCQkodW5zaWduZWQgbG9uZykKLQkJCQlwY2lfcmVzb3VyY2Vfc3RhcnQobF9mYl9pbmZvLT5kZXYsIDApLAotCQkJCSh1bnNpZ25lZCBsb25nKQotCQkJCXBjaV9yZXNvdXJjZV9zdGFydChsX2ZiX2luZm8tPmRldiwgMSksCi0JCQkJKHVuc2lnbmVkIGxvbmcpCi0JCQkJcGNpX3Jlc291cmNlX3N0YXJ0KGxfZmJfaW5mby0+ZGV2LCAyKSwKLQkJCQkodW5zaWduZWQgbG9uZykKLQkJCQlwY2lfcmVzb3VyY2Vfc3RhcnQobF9mYl9pbmZvLT5kZXYsIDMpLAotCQkJCSh1bnNpZ25lZCBsb25nKQotCQkJCXBjaV9yZXNvdXJjZV9zdGFydChsX2ZiX2luZm8tPmRldiwgNCksCi0JCQkJKHVuc2lnbmVkIGxvbmcpCi0JCQkJcGNpX3Jlc291cmNlX3N0YXJ0KGxfZmJfaW5mby0+ZGV2LCA1KSwKLQkJCQkodW5zaWduZWQgbG9uZykgbF9mYl9pbmZvLT5kZXYtPmlycSk7Ci0KLQkJCWxfZmJfaW5mby0+cElPQmFzZSA9Ci0JCQkgICAgKHVuc2lnbmVkIGNoYXIgKikKLQkJCSAgICBwY2lfcmVzb3VyY2Vfc3RhcnQobF9mYl9pbmZvLT5kZXYsIDApOwotI2lmZGVmIF9fQklHX0VORElBTgotCQkJbF9mYl9pbmZvLT5wSU9CYXNlICs9IFBNM19SRUdTX1NJWkU7Ci0jZW5kaWYKLQkJCWxfZmJfaW5mby0+dklPQmFzZSA9ICh1bnNpZ25lZCBjaGFyICopIC0xOwotCQkJbF9mYl9pbmZvLT5wX2ZiID0KLQkJCSAgICAodW5zaWduZWQgY2hhciAqKQotCQkJICAgIHBjaV9yZXNvdXJjZV9zdGFydChsX2ZiX2luZm8tPmRldiwgMSk7Ci0JCQlsX2ZiX2luZm8tPnZfZmIgPSAodW5zaWduZWQgY2hhciAqKSAtMTsKLQotCQkJCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uCi0JCQkgICAgKCh1bnNpZ25lZCBsb25nKWxfZmJfaW5mby0+cF9mYiwgNjQgKiAxMDI0ICogMTAyNCwgLyogcmVxdWVzdCBmdWxsIGFwZXJ0dXJlIHNpemUgKi8KLQkJCSAgICAgInBtM2ZiIikpIHsKLQkJCQlwcmludGsKLQkJCQkgICAgKEtFUk5fRVJSICJwbTNmYjogRXJyb3I6IGNvdWxkbid0IHJlcXVlc3QgZnJhbWVidWZmZXIgbWVtb3J5LCBib2FyZCAjJWxkXG4iLAotCQkJCSAgICAgbF9mYl9pbmZvLT5ib2FyZF9udW0pOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24KLQkJCSAgICAoKHVuc2lnbmVkIGxvbmcpbF9mYl9pbmZvLT5wSU9CYXNlLCBQTTNfUkVHU19TSVpFLAotCQkJICAgICAicG0zZmIgSS9PIHJlZ3MiKSkgewotCQkJCXByaW50awotCQkJCSAgICAoS0VSTl9FUlIgInBtM2ZiOiBFcnJvcjogY291bGRuJ3QgcmVxdWVzdCBJT2Jhc2UgbWVtb3J5LCBib2FyZCAjJWxkXG4iLAotCQkJCSAgICAgbF9mYl9pbmZvLT5ib2FyZF9udW0pOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGZvcmNlc2l6ZVtsX2ZiX2luZm8tPmJvYXJkX251bV0pCi0JCQkJbF9mYl9pbmZvLT5mYl9zaXplID0gZm9yY2VzaXplW2xfZmJfaW5mby0+Ym9hcmRfbnVtXTsKLQotCQkJbF9mYl9pbmZvLT5mYl9zaXplID0KLQkJCSAgICBwbTNmYl9zaXplX21lbW9yeShsX2ZiX2luZm8pOwotCQkJCWlmIChsX2ZiX2luZm8tPmZiX3NpemUpIHsKLQkJCQkodm9pZCkgcGNpX2VuYWJsZV9kZXZpY2UobF9mYl9pbmZvLT5kZXYpOwotCQkJCXBtM2ZiX2NvbW1vbl9pbml0KGxfZmJfaW5mbyk7Ci0JCQl9IGVsc2UKLQkJCQlwcmludGsoS0VSTl9FUlIgInBtM2ZiOiBtZW1vcnkgcHJvYmxlbSwgbm90IGVuYWJsaW5nIGJvYXJkICMlbGRcbiIsIGxfZmJfaW5mby0+Ym9hcmRfbnVtKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBwbTNmYl9wYW5fZGlzcGxheShjb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJCSAgICAgc3RydWN0IGZiX2luZm9fZ2VuICppbmZvKQotewotCXN0cnVjdCBwbTNmYl9pbmZvICpsX2ZiX2luZm8gPSAoc3RydWN0IHBtM2ZiX2luZm8gKikgaW5mbzsKLQotCURUUkFDRTsKLQotCWlmICghY3VycmVudF9wYXJfdmFsaWRbbF9mYl9pbmZvLT5ib2FyZF9udW1dKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWxfZmJfaW5mby0+Y3VycmVudF9wYXItPmJhc2UgPQkvKiBpbiAxMjggYml0cyBjaHVuayAtIGkuZS4gQUZURVIgU2hpZnRicHAgKi8KLQkgICAgcG0zZmJfU2hpZnRicHAobF9mYl9pbmZvLAotCQkJICAgbF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGgsCi0JCQkgICAodmFyLT55b2Zmc2V0ICogbF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+d2lkdGgpICsKLQkJCSAgIHZhci0+eG9mZnNldCk7Ci0JUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1NjcmVlbkJhc2UsIGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmJhc2UpOworCVBNM19XQUlUKHBhciwgMSk7CisJUE0zX1dSSVRFX1JFRyhwYXIsUE0zVmlkZW9Db250cm9sLCB2aWRlbyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcG0zZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVfaW50IGNtZCwgdV9sb25nIGFyZykKKwkvKgorCSAqICBGcmFtZSBidWZmZXIgb3BlcmF0aW9ucworCSAqLworCitzdGF0aWMgc3RydWN0IGZiX29wcyBwbTNmYl9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVja192YXIJPSBwbTNmYl9jaGVja192YXIsCisJLmZiX3NldF9wYXIJPSBwbTNmYl9zZXRfcGFyLAorCS5mYl9zZXRjb2xyZWcJPSBwbTNmYl9zZXRjb2xyZWcsCisJLmZiX3Bhbl9kaXNwbGF5CT0gcG0zZmJfcGFuX2Rpc3BsYXksCisJLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKKwkuZmJfYmxhbmsJPSBwbTNmYl9ibGFuaywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qCisJICogIEluaXRpYWxpemF0aW9uCisJICovCisKKy8qIG1taW8gcmVnaXN0ZXIgYXJlIGFscmVhZHkgbWFwcGVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgKi8KKy8qIHRoZSBwbTNmYl9maXguc21lbV9zdGFydCBpcyBhbHNvIHNldCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcG0zZmJfc2l6ZV9tZW1vcnkoc3RydWN0IHBtM19wYXIgKnBhcikKIHsKLQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvID0gKHN0cnVjdCBwbTNmYl9pbmZvICopIGluZm87Ci0JdTMyIGNtLCBpOwotI2lmZGVmIFBNM0ZCX01BU1RFUl9ERUJVRwotCWNoYXIgY2NbM107Ci0jZW5kaWYgLyogUE0zRkJfTUFTVEVSX0RFQlVHICovCisJdW5zaWduZWQgbG9uZwltZW1zaXplID0gMCwgdGVtcEJ5cGFzcywgaSwgdGVtcDEsIHRlbXAyOworCXVuc2lnbmVkIGNoYXIJX19pb21lbSAqc2NyZWVuX21lbTsKIAotCXN3aXRjaChjbWQpCisJcG0zZmJfZml4LnNtZW1fbGVuID0gNjQgKiAxMDI0bCAqIDEwMjQ7IC8qIHJlcXVlc3QgZnVsbCBhcGVydHVyZSBzaXplICovCisJLyogTGluZWFyIGZyYW1lIGJ1ZmZlciAtIHJlcXVlc3QgcmVnaW9uIGFuZCBtYXAgaXQuICovCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocG0zZmJfZml4LnNtZW1fc3RhcnQsIHBtM2ZiX2ZpeC5zbWVtX2xlbiwKKwkJCQkgInBtM2ZiIHNtZW0iKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbTNmYjogQ2FuJ3QgcmVzZXJ2ZSBzbWVtLlxuIik7CisJCXJldHVybiAwOworCX0KKwlzY3JlZW5fbWVtID0KKwkJaW9yZW1hcF9ub2NhY2hlKHBtM2ZiX2ZpeC5zbWVtX3N0YXJ0LCBwbTNmYl9maXguc21lbV9sZW4pOworCWlmICghc2NyZWVuX21lbSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbTNmYjogQ2FuJ3QgaW9yZW1hcCBzbWVtIGFyZWEuXG4iKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHBtM2ZiX2ZpeC5zbWVtX3N0YXJ0LCBwbTNmYl9maXguc21lbV9sZW4pOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBUT0RPOiBjYXJkLXNwZWNpZmljIHN0dWZmLCAqYmVmb3JlKiBhY2Nlc3NpbmcgKmFueSogRkIgbWVtb3J5ICovCisJLyogRm9yIEFwcGlhbiBKZXJvbmltbyAyMDAwIGJvYXJkIHNlY29uZCBoZWFkICovCisKKwl0ZW1wQnlwYXNzID0gUE0zX1JFQURfUkVHKHBhciwgUE0zTWVtQnlwYXNzV3JpdGVNYXNrKTsKKworCURQUklOVEsoIlBNM01lbUJ5cGFzc1dyaXRlTWFzayB3YXM6IDB4JTA4bHhcbiIsIHRlbXBCeXBhc3MpOworCisJUE0zX1dBSVQocGFyLCAxKTsKKwlQTTNfV1JJVEVfUkVHKHBhciwgUE0zTWVtQnlwYXNzV3JpdGVNYXNrLCAweEZGRkZGRkZGKTsKKworCS8qIHBtMyBzcGxpdCB1cCBtZW1vcnksIHJlcGxpY2F0ZXMsIGFuZCBkbyBhIGxvdCBvZiBuYXN0eSBzdHVmZiBJTUhPIDstKSAqLworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWZiX3dyaXRlbChpICogMHgwMDM0NTY3OCwKKwkJCSAgKHNjcmVlbl9tZW0gKyAoaSAqIDEwNDg1NzYpKSk7CisJCW1iKCk7CisJCXRlbXAxID0gZmJfcmVhZGwoKHNjcmVlbl9tZW0gKyAoaSAqIDEwNDg1NzYpKSk7CisKKwkJLyogTGV0J3MgY2hlY2sgZm9yIHdyYXBvdmVyLCB3cml0ZSB3aWxsIGZhaWwgYXQgMTZNQiBib3VuZGFyeSAqLworCQlpZiAodGVtcDEgPT0gKGkgKiAweDAwMzQ1Njc4KSkKKwkJCW1lbXNpemUgPSBpOworCQllbHNlCisJCQlicmVhazsKKwl9CisKKwlEUFJJTlRLKCJGaXJzdCBkZXRlY3QgcGFzcyBhbHJlYWR5IGdvdCAlbGQgTUJcbiIsIG1lbXNpemUgKyAxKTsKKworCWlmIChtZW1zaXplICsgMSA9PSBpKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQkvKiBDbGVhciBmaXJzdCAzMk1CIDsgMCBpcyAwLCBubyBuZWVkIHRvIGJ5dGVzd2FwICovCisJCQl3cml0ZWwoMHgwMDAwMDAwLCAoc2NyZWVuX21lbSArIChpICogMTA0ODU3NikpKTsKKwkJfQorCQl3bWIoKTsKKworCQlmb3IgKGkgPSAzMjsgaSA8IDY0OyBpKyspIHsKKwkJCWZiX3dyaXRlbChpICogMHgwMDM0NTY3OCwKKwkJCQkgIChzY3JlZW5fbWVtICsgKGkgKiAxMDQ4NTc2KSkpOworCQkJbWIoKTsKKwkJCXRlbXAxID0KKwkJCSAgICBmYl9yZWFkbCgoc2NyZWVuX21lbSArIChpICogMTA0ODU3NikpKTsKKwkJCXRlbXAyID0KKwkJCSAgICBmYl9yZWFkbCgoc2NyZWVuX21lbSArICgoaSAtIDMyKSAqIDEwNDg1NzYpKSk7CisJCQkvKiBkaWZmZXJlbnQgdmFsdWUsIGRpZmZlcmVudCBSQU0uLi4gKi8KKwkJCWlmICgodGVtcDEgPT0gKGkgKiAweDAwMzQ1Njc4KSkgJiYgKHRlbXAyID09IDApKQorCQkJCW1lbXNpemUgPSBpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCURQUklOVEsoIlNlY29uZCBkZXRlY3QgcGFzcyBnb3QgJWxkIE1CXG4iLCBtZW1zaXplICsgMSk7CisKKwlQTTNfV0FJVChwYXIsIDEpOworCVBNM19XUklURV9SRUcocGFyLCBQTTNNZW1CeXBhc3NXcml0ZU1hc2ssIHRlbXBCeXBhc3MpOworCisJaW91bm1hcChzY3JlZW5fbWVtKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocG0zZmJfZml4LnNtZW1fc3RhcnQsIHBtM2ZiX2ZpeC5zbWVtX2xlbik7CisJbWVtc2l6ZSA9IDEwNDg1NzYgKiAobWVtc2l6ZSArIDEpOworCisJRFBSSU5USygiUmV0dXJuaW5nIDB4JTA4bHggYnl0ZXNcbiIsIG1lbXNpemUpOworCisJcmV0dXJuIG1lbXNpemU7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBtM2ZiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCBwbTNfcGFyICpwYXI7CisJc3RydWN0IGRldmljZSogZGV2aWNlID0gJmRldi0+ZGV2OyAvKiBmb3IgcGNpIGRyaXZlcnMgKi8KKwlpbnQgZXJyLCByZXR2YWwgPSAtRU5YSU87CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAicG0zZmI6IENhbid0IGVuYWJsZSBQQ0kgZGV2OiAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJLyoKKwkgKiBEeW5hbWljYWxseSBhbGxvY2F0ZSBpbmZvIGFuZCBwYXIKKwkgKi8KKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbTNfcGFyKSwgZGV2aWNlKTsKKworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisJcGFyID0gaW5mby0+cGFyOworCisJLyoKKwkgKiBIZXJlIHdlIHNldCB0aGUgc2NyZWVuX2Jhc2UgdG8gdGhlIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKKwkgKiBmb3IgdGhlIGZyYW1lYnVmZmVyLgorCSAqLworCXBtM2ZiX2ZpeC5tbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisJcG0zZmJfZml4Lm1taW9fbGVuID0gUE0zX1JFR1NfU0laRTsKKworCS8qIFJlZ2lzdGVycyAtIHJlcXVlc3QgcmVnaW9uIGFuZCBtYXAgaXQuICovCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocG0zZmJfZml4Lm1taW9fc3RhcnQsIHBtM2ZiX2ZpeC5tbWlvX2xlbiwKKwkJCQkgInBtM2ZiIHJlZ2Jhc2UiKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbTNmYjogQ2FuJ3QgcmVzZXJ2ZSByZWdiYXNlLlxuIik7CisJCWdvdG8gZXJyX2V4aXRfbmVpdGhlcjsKKwl9CisJcGFyLT52X3JlZ3MgPQorCQlpb3JlbWFwX25vY2FjaGUocG0zZmJfZml4Lm1taW9fc3RhcnQsIHBtM2ZiX2ZpeC5tbWlvX2xlbik7CisJaWYgKCFwYXItPnZfcmVncykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbTNmYjogQ2FuJ3QgcmVtYXAgJXMgcmVnaXN0ZXIgYXJlYS5cbiIsCisJCQlwbTNmYl9maXguaWQpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocG0zZmJfZml4Lm1taW9fc3RhcnQsIHBtM2ZiX2ZpeC5tbWlvX2xlbik7CisJCWdvdG8gZXJyX2V4aXRfbmVpdGhlcjsKKwl9CisKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwlwbTNmYl9maXgubW1pb19zdGFydCArPSBQTTNfUkVHU19TSVpFOworCURQUklOVEsoIkFkanVzdGluZyByZWdpc3RlciBiYXNlIGZvciBiaWctZW5kaWFuLlxuIik7CisjZW5kaWYKKwkvKiBMaW5lYXIgZnJhbWUgYnVmZmVyIC0gcmVxdWVzdCByZWdpb24gYW5kIG1hcCBpdC4gKi8KKwlwbTNmYl9maXguc21lbV9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDEpOworCXBtM2ZiX2ZpeC5zbWVtX2xlbiA9IHBtM2ZiX3NpemVfbWVtb3J5KHBhcik7CisJaWYgKCFwbTNmYl9maXguc21lbV9sZW4pCiAJewotI2lmZGVmIFBNM0ZCX01BU1RFUl9ERUJVRwotCWNhc2UgUE0zRkJJT19DTEVBUk1FTU9SWToKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjbSwgKHZvaWQgKilhcmcsIHNpemVvZih1MzIpKSkKLQkJCXJldHVybigtRUZBVUxUKTsKLQkJcG0zZmJfY2xlYXJfbWVtb3J5KGxfZmJfaW5mbywgY20pOwotCQlyZXR1cm4oMCk7Ci0JCWJyZWFrOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbTNmYjogQ2FuJ3QgZmluZCBtZW1vcnkgb24gYm9hcmQuXG4iKTsKKwkJZ290byBlcnJfZXhpdF9tbWlvOworCX0KKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwbTNmYl9maXguc21lbV9zdGFydCwgcG0zZmJfZml4LnNtZW1fbGVuLAorCQkJCSAicG0zZmIgc21lbSIpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBtM2ZiOiBDYW4ndCByZXNlcnZlIHNtZW0uXG4iKTsKKwkJZ290byBlcnJfZXhpdF9tbWlvOworCX0KKwlpbmZvLT5zY3JlZW5fYmFzZSA9CisJCWlvcmVtYXBfbm9jYWNoZShwbTNmYl9maXguc21lbV9zdGFydCwgcG0zZmJfZml4LnNtZW1fbGVuKTsKKwlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBtM2ZiOiBDYW4ndCBpb3JlbWFwIHNtZW0gYXJlYS5cbiIpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocG0zZmJfZml4LnNtZW1fc3RhcnQsIHBtM2ZiX2ZpeC5zbWVtX2xlbik7CisJCWdvdG8gZXJyX2V4aXRfbW1pbzsKKwl9CisJaW5mby0+c2NyZWVuX3NpemUgPSBwbTNmYl9maXguc21lbV9sZW47CiAKLQljYXNlIFBNM0ZCSU9fQ0xFQVJDTUFQOgotCQlpZiAoY29weV9mcm9tX3VzZXIoY2MsICh2b2lkKilhcmcsIDMgKiBzaXplb2YoY2hhcikpKQotCQkJcmV0dXJuKC1FRkFVTFQpOwotCQlwbTNmYl9jbGVhcl9jb2xvcm1hcChsX2ZiX2luZm8sIGNjWzBdLCBjY1sxXSwgY2NbMl0pOwotCQlyZXR1cm4oMCk7Ci0JCWJyZWFrOwotI2VuZGlmIC8qIFBNM0ZCX01BU1RFUl9ERUJVRyAqLworCWluZm8tPmZib3BzID0gJnBtM2ZiX29wczsKIAotCWNhc2UgUE0zRkJJT19SRVNFVENISVA6Ci0JCWNtID0gMTsKLQkJUE0zX1NMT1dfV1JJVEVfUkVHKFBNM1Jlc2V0U3RhdHVzLCAxKTsKLQkJZm9yIChpID0gMCA7IChpIDwgMTAwMDApICYmIGNtIDsgaSsrKQotCQl7Ci0JCQlQTTNfREVMQVkoMTApOwotCQkJY20gPSBQTTNfUkVBRF9SRUcoUE0zUmVzZXRTdGF0dXMpOwotCQl9Ci0JCWlmIChjbSkKLQkJewotCQkJcHJpbnRrKEtFUk5fRVJSICJwbTNmYjogY2hpcCByZXNldCBmYWlsZWQgd2l0aCBzdGF0dXMgMHgleFxuIiwgY20pOwotCQkJcmV0dXJuKC1FSU8pOwotCQl9Ci0JCS8qIGZpcnN0IHRoaW5nIGZpcnN0LCByZWxvYWQgbWVtb3J5IHRpbWluZ3MgKi8KLQkJcG0zZmJfd3JpdGVfbWVtb3J5X3RpbWluZ3MobF9mYl9pbmZvKTsKLSNpZmRlZiBQTTNGQl9VU0VfQUNDRUwKLQkJcG0zZmJfaW5pdF9lbmdpbmUobF9mYl9pbmZvKTsKLSNlbmRpZiAvKiBQTTNGQl9VU0VfQUNDRUwgKi8KLQkJcG0zZmJfd3JpdGVfbW9kZShsX2ZiX2luZm8pOwotCQlyZXR1cm4oMCk7Ci0JCWJyZWFrOworCXBhci0+dmlkZW8gPSBQTTNfUkVBRF9SRUcocGFyLCBQTTNWaWRlb0NvbnRyb2wpOwogCi0JZGVmYXVsdDoKLQkJRFBSSU5USygyLCAidW5rbm93biBpb2N0bDogJWQgKCV4KVxuIiwgY21kLCBjbWQpOwotCQlyZXR1cm4oLUVJTlZBTCk7CisJaW5mby0+Zml4ID0gcG0zZmJfZml4OworCWluZm8tPnBzZXVkb19wYWxldHRlID0gcGFyLT5wYWxldHRlOworCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7LyogfCBGQklORk9fSFdBQ0NFTF9ZUEFOOyovCisKKwkvKgorCSAqIFRoaXMgc2hvdWxkIGdpdmUgYSByZWFzb25hYmxlIGRlZmF1bHQgdmlkZW8gbW9kZS4gVGhlIGZvbGxvd2luZyBpcworCSAqIGRvbmUgd2hlbiB3ZSBjYW4gc2V0IGEgdmlkZW8gbW9kZS4KKwkgKi8KKwlpZiAoIW1vZGVfb3B0aW9uKQorCQltb2RlX29wdGlvbiA9ICI2NDB4NDgwQDYwIjsKKworCXJldHZhbCA9IGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBtb2RlX29wdGlvbiwgTlVMTCwgMCwgTlVMTCwgOCk7CisKKwlpZiAoIXJldHZhbCB8fCByZXR2YWwgPT0gNCkgeworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycl9leGl0X2JvdGg7CisJfQorCisJaWYgKGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkgPCAwKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2V4aXRfYm90aDsKKwl9CisKKwkvKgorCSAqIEZvciBkcml2ZXJzIHRoYXQgY2FuLi4uCisJICovCisJcG0zZmJfY2hlY2tfdmFyKCZpbmZvLT52YXIsIGluZm8pOworCisJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pIDwgMCkgeworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycl9leGl0X2FsbDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwgaW5mby0+bm9kZSwKKwkgICBpbmZvLT5maXguaWQpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXJldHVybiAwOworCisgZXJyX2V4aXRfYWxsOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisgZXJyX2V4aXRfYm90aDoKKwlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocG0zZmJfZml4LnNtZW1fc3RhcnQsIHBtM2ZiX2ZpeC5zbWVtX2xlbik7CisgZXJyX2V4aXRfbW1pbzoKKwlpb3VubWFwKHBhci0+dl9yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocG0zZmJfZml4Lm1taW9fc3RhcnQsIHBtM2ZiX2ZpeC5tbWlvX2xlbik7CisgZXJyX2V4aXRfbmVpdGhlcjoKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCXJldHVybiByZXR2YWw7Cit9CisKKwkvKgorCSAqICBDbGVhbnVwCisJICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcG0zZmJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpbmZvKSB7CisJCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4ID0gJmluZm8tPmZpeDsKKwkJc3RydWN0IHBtM19wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOworCQlyZWxlYXNlX21lbV9yZWdpb24oZml4LT5zbWVtX3N0YXJ0LCBmaXgtPnNtZW1fbGVuKTsKKwkJaW91bm1hcChwYXItPnZfcmVncyk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihmaXgtPm1taW9fc3RhcnQsIGZpeC0+bW1pb19sZW4pOworCisJCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCX0KIH0KIAotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0vKiAqKioqKiBzdGFuZGFyZCBGQiBBUEkgaW5pdCBmdW5jdGlvbnMgKioqKiogKi8KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBtM2ZiX2lkX3RhYmxlW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEXzNETEFCUywgMHgwYSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7IDAsIH0KK307CiAKLWludCBfX2luaXQgcG0zZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKKy8qIEZvciBQQ0kgZHJpdmVycyAqLworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBtM2ZiX2RyaXZlciA9IHsKKwkubmFtZSA9CQkicG0zZmIiLAorCS5pZF90YWJsZSA9CXBtM2ZiX2lkX3RhYmxlLAorCS5wcm9iZSA9CXBtM2ZiX3Byb2JlLAorCS5yZW1vdmUgPQlfX2RldmV4aXRfcChwbTNmYl9yZW1vdmUpLAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBtM2ZiX2lkX3RhYmxlKTsKKworI2lmbmRlZiBNT0RVTEUKKwkvKgorCSAqICBTZXR1cAorCSAqLworCisvKgorICogT25seSBuZWNlc3NhcnkgaWYgeW91ciBkcml2ZXIgdGFrZXMgc3BlY2lhbCBvcHRpb25zLAorICogb3RoZXJ3aXNlIHdlIGZhbGwgYmFjayBvbiB0aGUgZ2VuZXJpYyBmYl9zZXR1cCgpLgorICovCitzdGF0aWMgaW50IF9faW5pdCBwbTNmYl9zZXR1cChjaGFyICpvcHRpb25zKQogewotCWxvbmcgb3BzaSA9IHN0cmxlbihvcHRpb25zKTsKLQotCURUUkFDRTsKLQotCW1lbWNweShnX29wdGlvbnMsIG9wdGlvbnMsCi0JICAgICAgICgob3BzaSArIDEpID4KLQkJUE0zX09QVElPTlNfU0laRSkgPyBQTTNfT1BUSU9OU19TSVpFIDogKG9wc2kgKyAxKSk7Ci0JZ19vcHRpb25zW1BNM19PUFRJT05TX1NJWkUgLSAxXSA9IDA7Ci0KLQlyZXR1cm4gKDApOworCS8qIFBhcnNlIHVzZXIgc3BlZmljaWVkIG9wdGlvbnMgKGB2aWRlbz1wbTNmYjonKSAqLworCXJldHVybiAwOwogfQorI2VuZGlmIC8qIE1PRFVMRSAqLwogCiBpbnQgX19pbml0IHBtM2ZiX2luaXQodm9pZCkKIHsKLQlEVFJBQ0U7CisJLyoKKwkgKiAgRm9yIGtlcm5lbCBib290IG9wdGlvbnMgKGluICd2aWRlbz1wbTNmYjo8b3B0aW9ucz4nIGZvcm1hdCkKKwkgKi8KKyNpZm5kZWYgTU9EVUxFCisJY2hhciAqb3B0aW9uID0gTlVMTDsKIAotCURQUklOVEsoMiwgIlRoaXMgaXMgcG0zZmIuYywgQ1ZTIHZlcnNpb246ICRIZWFkZXI6IC9jdnNyb290L2xpbnV4L2RyaXZlcnMvdmlkZW8vcG0zZmIuYyx2IDEuMSAyMDAyLzAyLzI1IDE5OjExOjA2IG1hcmNlbG8gRXhwICQiKTsKKwlpZiAoZmJfZ2V0X29wdGlvbnMoInBtM2ZiIiwgJm9wdGlvbikpCisJCXJldHVybiAtRU5PREVWOworCXBtM2ZiX3NldHVwKG9wdGlvbik7CisjZW5kaWYKIAotCXBtM2ZiX3JlYWxfc2V0dXAoZ19vcHRpb25zKTsKLQotCXBtM2ZiX2RldGVjdCgpOwotCi0JaWYgKCFmYl9pbmZvWzBdLmRldikgewkvKiBub3QgZXZlbiBvbmUgYm9hcmQgPz8/ICovCi0JCURQUklOVEsoMSwgIk5vIFBDSSBQZXJtZWRpYTMgYm9hcmQgZGV0ZWN0ZWRcbiIpOwotCX0KLQlyZXR1cm4gKDApOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwbTNmYl9kcml2ZXIpOwogfQogCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0vKiAqKioqIE1vZHVsZSBzdXBwb3J0ICoqKioqICovCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLSNpZmRlZiBNT0RVTEUKLU1PRFVMRV9BVVRIT1IoIlJvbWFpbiBEb2xiZWF1Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlBlcm1lZGlhMyBmcmFtZWJ1ZmZlciBkZXZpY2UgZHJpdmVyIik7Ci1zdGF0aWMgY2hhciAqbW9kZVtQTTNfTUFYX0JPQVJEXTsKLW1vZHVsZV9wYXJhbV9hcnJheShtb2RlLCBjaGFycCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1vZGUsInZpZGVvIG1vZGUiKTsKLW1vZHVsZV9wYXJhbV9hcnJheShkaXNhYmxlLCBzaG9ydCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGUsImRpc2FibGUgYm9hcmQiKTsKLXN0YXRpYyBzaG9ydCBvZmZbUE0zX01BWF9CT0FSRF07Ci1tb2R1bGVfcGFyYW1fYXJyYXkob2ZmLCBzaG9ydCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG9mZiwiZGlzYWJsZSBib2FyZCIpOwotc3RhdGljIGNoYXIgKnBjaWlkW1BNM19NQVhfQk9BUkRdOwotbW9kdWxlX3BhcmFtX2FycmF5KHBjaWlkLCBjaGFycCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBjaWlkLCJib2FyZCBQQ0kgSWQiKTsKLW1vZHVsZV9wYXJhbV9hcnJheShub2FjY2VsLCBzaG9ydCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vYWNjZWwsImRpc2FibGUgYWNjZWwiKTsKLXN0YXRpYyBjaGFyICpmb250W1BNM19NQVhfQk9BUkRdOwotbW9kdWxlX3BhcmFtX2FycmF5KGZvbnQsIGNoYXJwLCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZm9udCwiY2hvb3NlIGZvbnQiKTsKLW1vZHVsZV9wYXJhbShkZXB0aCwgc2hvcnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkZXB0aCwiYm9vdC10aW1lIGRlcHRoIik7Ci1tb2R1bGVfcGFyYW0ocHJpbnR0aW1pbmdzLCBzaG9ydCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHByaW50dGltaW5ncywgInByaW50IHRoZSBtZW1vcnkgdGltaW5ncyBvZiB0aGUgY2FyZChzKSIpOwotbW9kdWxlX3BhcmFtKGZvcmNlc2l6ZSwgc2hvcnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmb3JjZXNpemUsICJmb3JjZSBzcGVjaWZpZWQgbWVtb3J5IHNpemUiKTsKLS8qCi1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiUGVybWVkaWEzIFBDSSBib2FyZHMiKQotTU9EVUxFX0dFTkVSSUNfVEFCTEUoZ3R5cGUsbmFtZSkKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodHlwZSxuYW1lKQotKi8KLQotdm9pZCBwbTNmYl9idWlsZF9vcHRpb25zKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcG0zZmJfZXhpdCh2b2lkKQogewotCWludCBpOwotCWNoYXIgdHNbMTI4XTsKLQotCXN0cmNweShnX29wdGlvbnMsICJwbTNmYiIpOwotCWZvciAoaSA9IDA7IGkgPCBQTTNfTUFYX0JPQVJEIDsgaSsrKQotCXsKLQkJaWYgKG1vZGVbaV0pCi0JCXsKLQkJCXNwcmludGYodHMsICIsbW9kZTolZDolcyIsIGksIG1vZGVbaV0pOwotCQkJc3RybmNhdChnX29wdGlvbnMsIHRzLCBQTTNfT1BUSU9OU19TSVpFIC0gc3RybGVuKGdfb3B0aW9ucykpOwotCQl9Ci0JCWlmIChkaXNhYmxlW2ldIHx8IG9mZltpXSkKLQkJewotCQkJc3ByaW50Zih0cywgIixkaXNhYmxlOiVkOiIsIGkpOwotCQkJc3RybmNhdChnX29wdGlvbnMsIHRzLCBQTTNfT1BUSU9OU19TSVpFIC0gc3RybGVuKGdfb3B0aW9ucykpOwotCQl9Ci0JCWlmIChwY2lpZFtpXSkKLQkJewotCQkJc3ByaW50Zih0cywgIixwY2lpZDolZDolcyIsIGksIHBjaWlkW2ldKTsKLQkJCXN0cm5jYXQoZ19vcHRpb25zLCB0cywgUE0zX09QVElPTlNfU0laRSAtIHN0cmxlbihnX29wdGlvbnMpKTsKLQkJfQotCQlpZiAobm9hY2NlbFtpXSkKLQkJewotCQkJc3ByaW50Zih0cywgIixub2FjY2VsOiVkOiIsIGkpOwotCQkJc3RybmNhdChnX29wdGlvbnMsIHRzLCBQTTNfT1BUSU9OU19TSVpFIC0gc3RybGVuKGdfb3B0aW9ucykpOwotCQl9Ci0JCWlmIChmb250W2ldKQotCQl7Ci0JCQlzcHJpbnRmKHRzLCAiLGZvbnQ6JWQ6JXMiLCBpLCBmb250W2ldKTsKLQkJCXN0cm5jYXQoZ19vcHRpb25zLCB0cywgUE0zX09QVElPTlNfU0laRSAtIHN0cmxlbihnX29wdGlvbnMpKTsKLQkJfQotCQlpZiAoZGVwdGhbaV0pCi0JCXsKLQkJCXNwcmludGYodHMsICIsZGVwdGg6JWQ6JWQiLCBpLCBkZXB0aFtpXSk7Ci0JCQlzdHJuY2F0KGdfb3B0aW9ucywgdHMsIFBNM19PUFRJT05TX1NJWkUgLSBzdHJsZW4oZ19vcHRpb25zKSk7Ci0JCX0KLQl9Ci0JZ19vcHRpb25zW1BNM19PUFRJT05TX1NJWkUgLSAxXSA9ICdcMCc7Ci0JRFBSSU5USygxLCAicG0zZmIgdXNlIG9wdGlvbnM6ICVzXG4iLCBnX29wdGlvbnMpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcG0zZmJfZHJpdmVyKTsKIH0KIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCi17Ci0JRFRSQUNFOworbW9kdWxlX2luaXQocG0zZmJfaW5pdCk7Cittb2R1bGVfZXhpdChwbTNmYl9leGl0KTsKIAotCXBtM2ZiX2J1aWxkX29wdGlvbnMoKTsKLQotCXBtM2ZiX2luaXQoKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JRFRSQUNFOwotCXsKLQkJdW5zaWduZWQgbG9uZyBpOwotCQlzdHJ1Y3QgcG0zZmJfaW5mbyAqbF9mYl9pbmZvOwotCQlmb3IgKGkgPSAwOyBpIDwgUE0zX01BWF9CT0FSRDsgaSsrKSB7Ci0JCQlsX2ZiX2luZm8gPSAmKGZiX2luZm9baV0pOwotCQkJcGNpX2Rldl9wdXQobF9mYl9pbmZvLT5kZXYpOwotCQkJaWYgKGxfZmJfaW5mby0+ZGV2ICE9IE5VTEwgICYmICEoZGlzYWJsZVtsX2ZiX2luZm8tPmJvYXJkX251bV0pKSB7Ci0JCQkJaWYgKGxfZmJfaW5mby0+dklPQmFzZSAhPSAodW5zaWduZWQgY2hhciAqKSAtMSkgewotCQkJCQlwbTNmYl91bm1hcElPKGxfZmJfaW5mbyk7Ci0JCQkJCXJlbGVhc2VfbWVtX3JlZ2lvbihsX2ZiX2luZm8tPnBfZmIsCi0JCQkJCQkgICBsX2ZiX2luZm8tPmZiX3NpemUpOwotCQkJCQlyZWxlYXNlX21lbV9yZWdpb24obF9mYl9pbmZvLT5wSU9CYXNlLAotCQkJCQkJICAgUE0zX1JFR1NfU0laRSk7Ci0JCQkJfQotCQkJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmxfZmJfaW5mby0+Z2VuLmluZm8pOwotCQkJfQotCQl9Ci0JfQotfQotI2VuZGlmIC8qIE1PRFVMRSAqLworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wczNmYi5jIGIvZHJpdmVycy92aWRlby9wczNmYi5jCmluZGV4IDA3ZDE5NzkuLjljZjkyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHMzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKQEAgLTg5OCw4ICs4OTgsOCBAQAogCX0KIAogCXBzM2ZiLmRldiA9IGRldjsKLQllcnJvciA9IHBzM19hbGxvY19pcnEoUFMzX0JJTkRJTkdfQ1BVX0FOWSwgZGluZm8tPmlycS5pcnFfb3V0bGV0LAotCQkJICAgICAgJnBzM2ZiLmlycV9ubyk7CisJZXJyb3IgPSBwczNfaXJxX3BsdWdfc2V0dXAoUFMzX0JJTkRJTkdfQ1BVX0FOWSwgZGluZm8tPmlycS5pcnFfb3V0bGV0LAorCQkJCSAgICZwczNmYi5pcnFfbm8pOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwczNfYWxsb2NfaXJxIGZhaWxlZCAlZFxuIiwgX19mdW5jX18sCiAJCSAgICAgICBlcnJvcik7CkBAIC05MTEsNyArOTExLDcgQEAKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVxdWVzdF9pcnEgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywKIAkJICAgICAgIGVycm9yKTsKLQkJcHMzX2ZyZWVfaXJxKHBzM2ZiLmlycV9ubyk7CisJCXBzM19pcnFfcGx1Z19kZXN0cm95KHBzM2ZiLmlycV9ubyk7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKQEAgLTk1MSwxMiArOTUxLDE0IEBACiBzdGF0aWMgc3RydWN0IGZiX29wcyBwczNmYl9vcHMgPSB7CiAJLmZiX29wZW4JPSBwczNmYl9vcGVuLAogCS5mYl9yZWxlYXNlCT0gcHMzZmJfcmVsZWFzZSwKKwkuZmJfcmVhZCAgICAgICAgPSBmYl9zeXNfcmVhZCwKKwkuZmJfd3JpdGUgICAgICAgPSBmYl9zeXNfd3JpdGUsCiAJLmZiX2NoZWNrX3Zhcgk9IHBzM2ZiX2NoZWNrX3ZhciwKIAkuZmJfc2V0X3Bhcgk9IHBzM2ZiX3NldF9wYXIsCiAJLmZiX3NldGNvbHJlZwk9IHBzM2ZiX3NldGNvbHJlZywKLQkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCi0JLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlhcmVhLAotCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9maWxscmVjdAk9IHN5c19maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBzeXNfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdAk9IHN5c19pbWFnZWJsaXQsCiAJLmZiX21tYXAJPSBwczNmYl9tbWFwLAogCS5mYl9ibGFuawk9IHBzM2ZiX2JsYW5rLAogCS5mYl9pb2N0bAk9IHBzM2ZiX2lvY3RsLApAQCAtMTA4Myw3ICsxMDg1LDcgQEAKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogZXJyX2ZyZWVfaXJxOgogCWZyZWVfaXJxKHBzM2ZiLmlycV9ubywgcHMzZmIuZGV2KTsKLQlwczNfZnJlZV9pcnEocHMzZmIuaXJxX25vKTsKKwlwczNfaXJxX3BsdWdfZGVzdHJveShwczNmYi5pcnFfbm8pOwogZXJyX2lvdW5tYXBfZGluZm86CiAJaW91bm1hcCgodTggX19pb21lbSAqKXBzM2ZiLmRpbmZvKTsKIGVycl9ncHVfY29udGV4dF9mcmVlOgpAQCAtMTA5OSw3ICsxMTAxLDcgQEAKIAlwczNmYl9mbGlwX2N0bCgwKTsJLyogZmxpcCBvZmYgKi8KIAlwczNmYi5kaW5mby0+aXJxLm1hc2sgPSAwOwogCWZyZWVfaXJxKHBzM2ZiLmlycV9ubywgcHMzZmIuZGV2KTsKLQlwczNfZnJlZV9pcnEocHMzZmIuaXJxX25vKTsKKwlwczNfaXJxX3BsdWdfZGVzdHJveShwczNmYi5pcnFfbm8pOwogCWlvdW5tYXAoKHU4IF9faW9tZW0gKilwczNmYi5kaW5mbyk7CiB9CiAKQEAgLTExMTQsNyArMTExNiw3IEBACiAJfQogCWlmIChwczNmYi5pcnFfbm8pIHsKIAkJZnJlZV9pcnEocHMzZmIuaXJxX25vLCBwczNmYi5kZXYpOwotCQlwczNfZnJlZV9pcnEocHMzZmIuaXJxX25vKTsKKwkJcHMzX2lycV9wbHVnX2Rlc3Ryb3kocHMzZmIuaXJxX25vKTsKIAl9CiAJaW91bm1hcCgodTggX19pb21lbSAqKXBzM2ZiLmRpbmZvKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wdnIyZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKaW5kZXggYTkzNjE4Yi4uZGYyOTA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wdnIyZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIHN0YXRpYyBpbnQgcHZyMl9nZXRfcGFyYW0oY29uc3Qgc3RydWN0IHB2cjJfcGFyYW1zICpwLCBjb25zdCBjaGFyICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwsIGludCBzaXplKTsKICNpZmRlZiBDT05GSUdfU0hfRE1BCi1zdGF0aWMgc3NpemVfdCBwdnIyZmJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHB2cjJmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKICNlbmRpZgogCkBAIC02NzQsNyArNjc0LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TSF9ETUEKLXN0YXRpYyBzc2l6ZV90IHB2cjJmYl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAorc3RhdGljIHNzaXplX3QgcHZyMmZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBkc3QsIHN0YXJ0LCBlbmQsIGxlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwppbmRleCAwYjE5NWYzLi44MWU1NzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5jCkBAIC0xMjAzLDcgKzEyMDMsNyBAQAogCQkJCQl9IGVsc2UKIAkJCQkJCWdvdG8gZG9uZTsKIAkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnMCcuLi4nOSc6CisJCQkJY2FzZSAnMCcgLi4uICc5JzoKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKIAkJCQkJZ290byBkb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMgYi9kcml2ZXJzL3ZpZGVvL3JpdmEvZmJkZXYuYwppbmRleCBkN2VjZThkLi4wZmU1NDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3JpdmEvZmJkZXYuYworKysgYi9kcml2ZXJzL3ZpZGVvL3JpdmEvZmJkZXYuYwpAQCAtMzE3LDE1ICszMTcsMTUgQEAKIAllbHNlCiAJCWxldmVsID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CiAKLQl0bXBfcG1jID0gcGFyLT5yaXZhLlBNQ1sweDEwRjAvNF0gJiAweDAwMDBGRkZGOwotCXRtcF9wY3J0ID0gcGFyLT5yaXZhLlBDUlRDMFsweDA4MUMvNF0gJiAweEZGRkZGRkZDOworCXRtcF9wbWMgPSBOVl9SRDMyKHBhci0+cml2YS5QTUMsIDB4MTBGMCkgJiAweDAwMDBGRkZGOworCXRtcF9wY3J0ID0gTlZfUkQzMihwYXItPnJpdmEuUENSVEMwLCAweDA4MUMpICYgMHhGRkZGRkZGQzsKIAlpZihsZXZlbCA+IDApIHsKIAkJdG1wX3BjcnQgfD0gMHgxOwogCQl0bXBfcG1jIHw9ICgxIDw8IDMxKTsgLyogYmFja2xpZ2h0IGJpdCAqLwogCQl0bXBfcG1jIHw9IHJpdmFfYmxfZ2V0X2xldmVsX2JyaWdodG5lc3MocGFyLCBsZXZlbCkgPDwgMTY7IC8qIGxldmVsICovCiAJfQotCXBhci0+cml2YS5QQ1JUQzBbMHgwODFDLzRdID0gdG1wX3BjcnQ7Ci0JcGFyLT5yaXZhLlBNQ1sweDEwRjAvNF0gPSB0bXBfcG1jOworCU5WX1dSMzIocGFyLT5yaXZhLlBDUlRDMCwgMHgwODFDLCB0bXBfcGNydCk7CisJTlZfV1IzMihwYXItPnJpdmEuUE1DLCAweDEwRjAsIHRtcF9wbWMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzYwLDEzICsxNzYwLDEzIEBACiAJTlZUUkFDRV9FTlRFUigpOwogCWRwID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkKTsKIAlmb3IgKDsgZHAgIT0gTlVMTDsgZHAgPSBkcC0+Y2hpbGQpIHsKLQkJZGlzcHR5cGUgPSBnZXRfcHJvcGVydHkoZHAsICJkaXNwbGF5LXR5cGUiLCBOVUxMKTsKKwkJZGlzcHR5cGUgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJkaXNwbGF5LXR5cGUiLCBOVUxMKTsKIAkJaWYgKGRpc3B0eXBlID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJaWYgKHN0cm5jbXAoZGlzcHR5cGUsICJMQ0QiLCAzKSAhPSAwKQogCQkJY29udGludWU7CiAJCWZvciAoaSA9IDA7IHByb3BuYW1lc1tpXSAhPSBOVUxMOyArK2kpIHsKLQkJCXBlZGlkID0gZ2V0X3Byb3BlcnR5KGRwLCBwcm9wbmFtZXNbaV0sIE5VTEwpOworCQkJcGVkaWQgPSBvZl9nZXRfcHJvcGVydHkoZHAsIHByb3BuYW1lc1tpXSwgTlVMTCk7CiAJCQlpZiAocGVkaWQgIT0gTlVMTCkgewogCQkJCXBhci0+RURJRCA9ICh1bnNpZ25lZCBjaGFyICopcGVkaWQ7CiAJCQkJTlZUUkFDRSgiTENEIGZvdW5kLlxuIik7CkBAIC0xNzg4LDggKzE3ODgsMTAgQEAKIAogCU5WVFJBQ0VfRU5URVIoKTsKIAlyaXZhX2NyZWF0ZV9pMmNfYnVzc2VzKHBhcik7Ci0JZm9yIChpID0gMDsgaSA8IHBhci0+YnVzOyBpKyspIHsKLQkJcml2YV9wcm9iZV9pMmNfY29ubmVjdG9yKHBhciwgaSsxLCAmcGFyLT5FRElEKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmICghcGFyLT5jaGFuW2ldLnBhcikKKwkJCWNvbnRpbnVlOworCQlyaXZhX3Byb2JlX2kyY19jb25uZWN0b3IocGFyLCBpLCAmcGFyLT5FRElEKTsKIAkJaWYgKHBhci0+RURJRCAmJiAhZmJfcGFyc2VfZWRpZChwYXItPkVESUQsICZ2YXIpKSB7CiAJCQlwcmludGsoUEZYICJGb3VuZCBFRElEIEJsb2NrIGZyb20gQlVTICVpXG4iLCBpKTsKIAkJCWJyZWFrOwpAQCAtMjEwNCw3ICsyMTA2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgcml2YWZiX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGQpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcml2YWZiX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGQpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGQpOwogCXN0cnVjdCByaXZhX3BhciAqcGFyID0gaW5mby0+cGFyOwpAQCAtMjE4NSw3ICsyMTg3LDcgQEAKIAkubmFtZQkJPSAicml2YWZiIiwKIAkuaWRfdGFibGUJPSByaXZhZmJfcGNpX3RibCwKIAkucHJvYmUJCT0gcml2YWZiX3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3Aocml2YWZiX3JlbW92ZSksCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChyaXZhZmJfcmVtb3ZlKSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9yaXZhL252NHJlZi5oIGIvZHJpdmVycy92aWRlby9yaXZhL252NHJlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjVmOTExLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdmlkZW8vcml2YS9udjRyZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0NDUgKzAsMCBAQAotIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi18KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp8Ci18KiAgICAgICBDb3B5cmlnaHQgMTk5My0xOTk4IE5WSURJQSwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICp8Ci18KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp8Ci18KiAgICAgTk9USUNFIFRPIFVTRVI6ICAgVGhlIHNvdXJjZSBjb2RlICBpcyBjb3B5cmlnaHRlZCB1bmRlciAgVS5TLiBhbmQgICAgICp8Ci18KiAgICAgaW50ZXJuYXRpb25hbCBsYXdzLiAgVXNlcnMgYW5kIHBvc3Nlc3NvcnMgb2YgdGhpcyBzb3VyY2UgY29kZSBhcmUgICAgICp8Ci18KiAgICAgaGVyZWJ5IGdyYW50ZWQgYSBub25leGNsdXNpdmUsICByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gICAgICp8Ci18KiAgICAgdXNlIHRoaXMgY29kZSBpbiBpbmRpdmlkdWFsIGFuZCBjb21tZXJjaWFsIHNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICp8Ci18KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp8Ci18KiAgICAgQW55IHVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIG11c3QgaW5jbHVkZSwgIGluIHRoZSB1c2VyIGRvY3VtZW50YS0gICAgICp8Ci18KiAgICAgdGlvbiBhbmQgIGludGVybmFsIGNvbW1lbnRzIHRvIHRoZSBjb2RlLCAgbm90aWNlcyB0byB0aGUgZW5kIHVzZXIgICAgICp8Ci18KiAgICAgYXMgZm9sbG93czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp8Ci18KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp8Ci18KiAgICAgICBDb3B5cmlnaHQgMTk5My0xOTk4IE5WSURJQSwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICp8Ci18KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp8Ci18KiAgICAgTlZJRElBLCBDT1JQT1JBVElPTiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTiBBQk9VVCBUSEUgU1VJVEFCSUxJVFkgICAgICp8Ci18KiAgICAgT0YgIFRISVMgU09VUkNFICBDT0RFICBGT1IgQU5ZIFBVUlBPU0UuICBJVCBJUyAgUFJPVklERUQgICJBUyBJUyIgICAgICp8Ci18KiAgICAgV0lUSE9VVCBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuICBOVklESUEsIENPUlBPUi0gICAgICp8Ci18KiAgICAgQVRJT04gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTICBXSVRIIFJFR0FSRCAgVE8gVEhJUyBTT1VSQ0UgQ09ERSwgICAgICp8Ci18KiAgICAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBOT05JTkZSSU5HRS0gICAgICp8Ci18KiAgICAgTUVOVCwgIEFORCBGSVRORVNTICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICAgSU4gTk8gRVZFTlQgU0hBTEwgICAgICp8Ci18KiAgICAgTlZJRElBLCBDT1JQT1JBVElPTiAgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgIElORElSRUNULCAgSU5DSS0gICAgICp8Ci18KiAgICAgREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsICBPUiBBTlkgREFNQUdFUyAgV0hBVFNPRVZFUiBSRS0gICAgICp8Ci18KiAgICAgU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCAgREFUQSBPUiBQUk9GSVRTLCAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gICAgICp8Ci18KiAgICAgT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCAgQVJJU0lORyBPVVQgT0YgICAgICp8Ci18KiAgICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT1VSQ0UgQ09ERS4gICAgICp8Ci18KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp8Ci18KiAgICAgVS5TLiBHb3Zlcm5tZW50ICBFbmQgIFVzZXJzLiAgIFRoaXMgc291cmNlIGNvZGUgIGlzIGEgImNvbW1lcmNpYWwgICAgICp8Ci18KiAgICAgaXRlbSwiICBhcyB0aGF0ICB0ZXJtIGlzICBkZWZpbmVkIGF0ICA0OCBDLkYuUi4gMi4xMDEgKE9DVCAxOTk1KSwgICAgICp8Ci18KiAgICAgY29uc2lzdGluZyAgb2YgImNvbW1lcmNpYWwgIGNvbXB1dGVyICBzb2Z0d2FyZSIgIGFuZCAgImNvbW1lcmNpYWwgICAgICp8Ci18KiAgICAgY29tcHV0ZXIgIHNvZnR3YXJlICBkb2N1bWVudGF0aW9uLCIgIGFzIHN1Y2ggIHRlcm1zICBhcmUgIHVzZWQgaW4gICAgICp8Ci18KiAgICAgNDggQy5GLlIuIDEyLjIxMiAoU0VQVCAxOTk1KSAgYW5kIGlzIHByb3ZpZGVkIHRvIHRoZSBVLlMuIEdvdmVybi0gICAgICp8Ci18KiAgICAgbWVudCBvbmx5IGFzICBhIGNvbW1lcmNpYWwgZW5kIGl0ZW0uICAgQ29uc2lzdGVudCB3aXRoICA0OCBDLkYuUi4gICAgICp8Ci18KiAgICAgMTIuMjEyIGFuZCAgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAgMjI3LjcyMDItNCAoSlVORSAxOTk1KSwgICAgICp8Ci18KiAgICAgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgIGFjcXVpcmUgdGhlIHNvdXJjZSBjb2RlICB3aXRoIG9ubHkgICAgICp8Ci18KiAgICAgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp8Ci18KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp8Ci0gXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIEdQTCBsaWNlbnNpbmcgbm90ZSAtLSBuVmlkaWEgaXMgYWxsb3dpbmcgYSBsaWJlcmFsIGludGVycHJldGF0aW9uIG9mCi0gKiB0aGUgZG9jdW1lbnRhdGlvbiByZXN0cmljdGlvbiBhYm92ZSwgdG8gbWVyZWx5IHNheSB0aGF0IHRoaXMgblZpZGlhJ3MKLSAqIGNvcHlyaWdodCBhbmQgZGlzY2xhaW1lciBzaG91bGQgYmUgaW5jbHVkZWQgd2l0aCBhbGwgY29kZSBkZXJpdmVkCi0gKiBmcm9tIHRoaXMgc291cmNlLiAgLS0gSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPiwgMDEvTm92Lzk5IAotICovCi0KLSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAotfCogICAgICAgICAgICBNb2RpZmllZCAxOTk5IGJ5IEZyZWRyaWsgUmVpdGUgKGZyZWRyaWtAcmVpdGUuY29tKSAgICAgICAgICAgICAqfAotIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBfX05WNFJFRl9IX18KLSNkZWZpbmUgX19OVjRSRUZfSF9fCi0KLS8qIE1hZ2ljIHZhbHVlcyB0byBsb2NrL3VubG9jayBleHRlbmRlZCByZWdzICovCi0jZGVmaW5lIE5WX0NJT19TUl9MT0NLX0lOREVYCQkJCSAgICAgMHgwMDAwMDAxRiAvKiAgICAgICAqLwotI2RlZmluZSBOVl9DSU9fU1JfVU5MT0NLX1JXX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTcgLyogICAgICAgKi8KLSNkZWZpbmUgTlZfQ0lPX1NSX1VOTE9DS19ST19WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc1IC8qICAgICAgICovCi0jZGVmaW5lIE5WX0NJT19TUl9MT0NLX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5OSAvKiAgICAgICAqLwotCi0jZGVmaW5lIFVOTE9DS19FWFRfTUFHSUMgMHg1NwotI2RlZmluZSBMT0NLX0VYVF9NQUdJQyAweDk5IC8qIEFueSB2YWx1ZSBvdGhlciB0aGFuIDB4NTcgd2lsbCBkbyAqLwotCi0jZGVmaW5lIExPQ0tfRVhUX0lOREVYIDB4NgotCi0jZGVmaW5lIE5WX1BDUlRDX0hPUklaX1RPVEFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBOVl9QQ1JUQ19IT1JJWl9ESVNQTEFZX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgTlZfUENSVENfSE9SSVpfQkxBTktfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyCi0KLSNkZWZpbmUgTlZfUENSVENfSE9SSVpfQkxBTktfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzCi0jZGVmaW5lIE5WX1BDUlRDX0hPUklaX0JMQU5LX0VORF9FVlJBICAgICAgICAgICAgICAgICAgICAgICAgNzo3Ci0jZGVmaW5lIE5WX1BDUlRDX0hPUklaX0JMQU5LX0VORF9ESVNQTEFZX0VORF9TS0VXICAgICAgICAgICAgNjo1Ci0jZGVmaW5lIE5WX1BDUlRDX0hPUklaX0JMQU5LX0VORF9IT1JJWl9CTEFOS19FTkQgICAgICAgICAgICAgNDowCi0KLSNkZWZpbmUgTlZfUENSVENfSE9SSVpfUkVUUkFDRV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweDA0Ci0KLSNkZWZpbmUgTlZfUENSVENfSE9SSVpfUkVUUkFDRV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1Ci0jZGVmaW5lIE5WX1BDUlRDX0hPUklaX1JFVFJBQ0VfRU5EX0hPUklaX0JMQU5LX0VORF81ICAgICAgICAgNzo3Ci0jZGVmaW5lIE5WX1BDUlRDX0hPUklaX1JFVFJBQ0VfRU5EX0hPUklaX1JFVFJBQ0VfU0tFVyAgICAgICAgNjo1Ci0jZGVmaW5lIE5WX1BDUlRDX0hPUklaX1JFVFJBQ0VfRU5EX0hPUklaX1JFVFJBQ0VfRU5EICAgICAgICAgNDowCi0KLSNkZWZpbmUgTlZfUENSVENfVkVSVF9UT1RBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2Ci0KLSNkZWZpbmUgTlZfUENSVENfT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3Ci0jZGVmaW5lIE5WX1BDUlRDX09WRVJGTE9XX1ZFUlRfUkVUUkFDRV9TVEFSVF85ICAgICAgICAgICAgICAgNzo3Ci0jZGVmaW5lIE5WX1BDUlRDX09WRVJGTE9XX1ZFUlRfRElTUExBWV9FTkRfOSAgICAgICAgICAgICAgICAgNjo2Ci0jZGVmaW5lIE5WX1BDUlRDX09WRVJGTE9XX1ZFUlRfVE9UQUxfOSAgICAgICAgICAgICAgICAgICAgICAgNTo1Ci0jZGVmaW5lIE5WX1BDUlRDX09WRVJGTE9XX0xJTkVfQ09NUEFSRV84ICAgICAgICAgICAgICAgICAgICAgNDo0Ci0jZGVmaW5lIE5WX1BDUlRDX09WRVJGTE9XX1ZFUlRfQkxBTktfU1RBUlRfOCAgICAgICAgICAgICAgICAgMzozCi0jZGVmaW5lIE5WX1BDUlRDX09WRVJGTE9XX1ZFUlRfUkVUUkFDRV9TVEFSVF84ICAgICAgICAgICAgICAgMjoyCi0jZGVmaW5lIE5WX1BDUlRDX09WRVJGTE9XX1ZFUlRfRElTUExBWV9FTkRfOCAgICAgICAgICAgICAgICAgMToxCi0jZGVmaW5lIE5WX1BDUlRDX09WRVJGTE9XX1ZFUlRfVE9UQUxfOCAgICAgICAgICAgICAgICAgICAgICAgMDowCi0KLSNkZWZpbmUgTlZfUENSVENfUFJFU0VUX1JPV19TQ0FOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4Ci0KLSNkZWZpbmUgTlZfUENSVENfTUFYX1NDQU5fTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5Ci0jZGVmaW5lIE5WX1BDUlRDX01BWF9TQ0FOX0xJTkVfRE9VQkxFX1NDQU4gICAgICAgICAgICAgICAgICAgNzo3Ci0jZGVmaW5lIE5WX1BDUlRDX01BWF9TQ0FOX0xJTkVfTElORV9DT01QQVJFXzkgICAgICAgICAgICAgICAgNjo2Ci0jZGVmaW5lIE5WX1BDUlRDX01BWF9TQ0FOX0xJTkVfVkVSVF9CTEFOS19TVEFSVF85ICAgICAgICAgICAgNTo1Ci0jZGVmaW5lIE5WX1BDUlRDX01BWF9TQ0FOX0xJTkVfTUFYX1NDQU5fTElORSAgICAgICAgICAgICAgICAgNDowCi0KLSNkZWZpbmUgTlZfUENSVENfQ1VSU09SX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBCi0jZGVmaW5lIE5WX1BDUlRDX0NVUlNPUl9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQgotI2RlZmluZSBOVl9QQ1JUQ19TVEFSVF9BRERSX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMKLSNkZWZpbmUgTlZfUENSVENfU1RBUlRfQUREUl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBECi0jZGVmaW5lIE5WX1BDUlRDX0NVUlNPUl9MT0NBVElPTl9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgMHgwRQotI2RlZmluZSBOVl9QQ1JUQ19DVVJTT1JfTE9DQVRJT05fTE9XICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYKLQotI2RlZmluZSBOVl9QQ1JUQ19WRVJUX1JFVFJBQ0VfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgTlZfUENSVENfVkVSVF9SRVRSQUNFX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExCi0jZGVmaW5lIE5WX1BDUlRDX1ZFUlRfRElTUExBWV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMgotI2RlZmluZSBOVl9QQ1JUQ19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTMKLSNkZWZpbmUgTlZfUENSVENfVU5ERVJMSU5FX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0Ci0jZGVmaW5lIE5WX1BDUlRDX1ZFUlRfQkxBTktfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNQotI2RlZmluZSBOVl9QQ1JUQ19WRVJUX0JMQU5LX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTYKLSNkZWZpbmUgTlZfUENSVENfTU9ERV9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3Ci0jZGVmaW5lIE5WX1BDUlRDX0xJTkVfQ09NUEFSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOAotCi0vKiBFeHRlbmRlZCBvZmZzZXQgYW5kIHN0YXJ0IGFkZHJlc3MgKi8KLSNkZWZpbmUgTlZfUENSVENfUkVQQUlOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5Ci0jZGVmaW5lIE5WX1BDUlRDX1JFUEFJTlQwX09GRlNFVF8xMF84ICAgICAgICAgICAgICAgICAgICAgICAgNzo1IAotI2RlZmluZSBOVl9QQ1JUQ19SRVBBSU5UMF9TVEFSVF9BRERSXzIwXzE2ICAgICAgICAgICAgICAgICAgIDQ6MAotCi0vKiBIb3Jpem9uYWwgZXh0ZW5kZWQgYml0cyAqLwotI2RlZmluZSBOVl9QQ1JUQ19IT1JJWl9FWFRSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmQKLSNkZWZpbmUgTlZfUENSVENfSE9SSVpfRVhUUkFfSU5URVJfSEFMRl9TVEFSVF84ICAgICAgICAgICAgICA0OjQKLSNkZWZpbmUgTlZfUENSVENfSE9SSVpfRVhUUkFfSE9SSVpfUkVUUkFDRV9TVEFSVF84ICAgICAgICAgICAzOjMKLSNkZWZpbmUgTlZfUENSVENfSE9SSVpfRVhUUkFfSE9SSVpfQkxBTktfU1RBUlRfOCAgICAgICAgICAgICAyOjIKLSNkZWZpbmUgTlZfUENSVENfSE9SSVpfRVhUUkFfRElTUExBWV9FTkRfOCAgICAgICAgICAgICAgICAgICAxOjEKLSNkZWZpbmUgTlZfUENSVENfSE9SSVpfRVhUUkFfRElTUExBWV9UT1RBTF84ICAgICAgICAgICAgICAgICAwOjAKLQotLyogQXNzb3J0ZWQgZXh0cmEgYml0cyAqLwotI2RlZmluZSBOVl9QQ1JUQ19FWFRSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUKLSNkZWZpbmUgTlZfUENSVENfRVhUUkFfT0ZGU0VUXzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OjUKLSNkZWZpbmUgTlZfUENSVENfRVhUUkFfSE9SSVpfQkxBTktfRU5EXzYgICAgICAgICAgICAgICAgICAgICA0OjQKLSNkZWZpbmUgTlZfUENSVENfRVhUUkFfVkVSVF9CTEFOS19TVEFSVF8xMCAgICAgICAgICAgICAgICAgICAzOjMKLSNkZWZpbmUgTlZfUENSVENfRVhUUkFfVkVSVF9SRVRSQUNFX1NUQVJUXzEwICAgICAgICAgICAgICAgICAyOjIKLSNkZWZpbmUgTlZfUENSVENfRVhUUkFfVkVSVF9ESVNQTEFZX0VORF8xMCAgICAgICAgICAgICAgICAgICAxOjEKLSNkZWZpbmUgTlZfUENSVENfRVhUUkFfVkVSVF9UT1RBTF8xMCAgICAgICAgICAgICAgICAgICAgICAgICAwOjAKLQotLyogQ29udHJvbHMgaG93IG11Y2ggZGF0YSB0aGUgcmVmcmVzaCBmaWZvIHJlcXVlc3RzICovCi0jZGVmaW5lIE5WX1BDUlRDX0ZJRk9fQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxYgotI2RlZmluZSBOVl9QQ1JUQ19GSUZPX0NPTlRST0xfVU5ERVJGTE9XX1dBUk4gICAgICAgICAgICAgICAgIDc6NwotI2RlZmluZSBOVl9QQ1JUQ19GSUZPX0NPTlRST0xfQlVSU1RfTEVOR1RIICAgICAgICAgICAgICAgICAgIDI6MAotI2RlZmluZSBOVl9QQ1JUQ19GSUZPX0NPTlRST0xfQlVSU1RfTEVOR1RIXzggICAgICAgICAgICAgICAgIDB4MAotI2RlZmluZSBOVl9QQ1JUQ19GSUZPX0NPTlRST0xfQlVSU1RfTEVOR1RIXzMyICAgICAgICAgICAgICAgIDB4MQotI2RlZmluZSBOVl9QQ1JUQ19GSUZPX0NPTlRST0xfQlVSU1RfTEVOR1RIXzY0ICAgICAgICAgICAgICAgIDB4MgotI2RlZmluZSBOVl9QQ1JUQ19GSUZPX0NPTlRST0xfQlVSU1RfTEVOR1RIXzEyOCAgICAgICAgICAgICAgIDB4MwotI2RlZmluZSBOVl9QQ1JUQ19GSUZPX0NPTlRST0xfQlVSU1RfTEVOR1RIXzI1NiAgICAgICAgICAgICAgIDB4NAotCi0vKiBXaGVuIHRoZSBmaWZvIG9jY3VwYW5jeSBmYWxscyBiZWxvdyAqdHdpY2UqIHRoZSB3YXRlcm1hcmssCi0gKiB0aGUgcmVmcmVzaCBmaWZvIHdpbGwgc3RhcnQgdG8gYmUgcmVmaWxsZWQuIElmIHRoaXMgdmFsdWUgaXMgCi0gKiB0b28gbG93LCB5b3Ugd2lsbCBnZXQganVuayBvbiB0aGUgc2NyZWVuLiBUb28gaGlnaCwgYW5kIHBlcmZvcm1hbmNlCi0gKiB3aWxsIHN1ZmZlci4gV2F0ZXJtYXJrIGluIHVuaXRzIG9mIDggYnl0ZXMKLSAqLwotI2RlZmluZSBOVl9QQ1JUQ19GSUZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgTlZfUENSVENfRklGT19SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OjcKLSNkZWZpbmUgTlZfUENSVENfRklGT19XQVRFUk1BUksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OjAKLQotLyogVmFyaW91cyBmbGFncyAqLwotI2RlZmluZSBOVl9QQ1JUQ19SRVBBSU5UMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWEKLSNkZWZpbmUgTlZfUENSVENfUkVQQUlOVDFfSFNZTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OjcKLSNkZWZpbmUgTlZfUENSVENfUkVQQUlOVDFfSFlTTkNfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIE5WX1BDUlRDX1JFUEFJTlQxX0hZU05DX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBOVl9QQ1JUQ19SRVBBSU5UMV9WU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY6NgotI2RlZmluZSBOVl9QQ1JUQ19SRVBBSU5UMV9WWVNOQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgTlZfUENSVENfUkVQQUlOVDFfVllTTkNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIE5WX1BDUlRDX1JFUEFJTlQxX0NPTVBBVElCTEVfVEVYVCAgICAgICAgICAgICAgICAgICAgNDo0Ci0jZGVmaW5lIE5WX1BDUlRDX1JFUEFJTlQxX0NPTVBBVElCTEVfVEVYVF9FTkFCTEUgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBOVl9QQ1JUQ19SRVBBSU5UMV9DT01QQVRJQkxFX1RFWFRfRElTQUJMRSAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgTlZfUENSVENfUkVQQUlOVDFfTEFSR0VfU0NSRUVOICAgICAgICAgICAgICAgICAgICAgICAyOjIgCi0jZGVmaW5lIE5WX1BDUlRDX1JFUEFJTlQxX0xBUkdFX1NDUkVFTl9ESVNBQkxFICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBOVl9QQ1JUQ19SRVBBSU5UMV9MQVJHRV9TQ1JFRU5fRU5BQkxFICAgICAgICAgICAgICAgIDB4MDAgLyogPj0xMjgwICovCi0jZGVmaW5lIE5WX1BDUlRDX1JFUEFJTlQxX1BBTEVUVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMToxCi0jZGVmaW5lIE5WX1BDUlRDX1JFUEFJTlQxX1BBTEVUVEVfV0lEVEhfOEJJVFMgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBOVl9QQ1JUQ19SRVBBSU5UMV9QQUxFVFRFX1dJRFRIXzZCSVRTICAgICAgICAgICAgICAgIDB4MDEKLQotI2RlZmluZSBOVl9QQ1JUQ19HUkNVUlNPUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAKLSNkZWZpbmUgTlZfUENSVENfR1JDVVJTT1IwX1NUQVJUX0FERFJfMjFfMTYgICAgICAgICAgICAgICAgICA1OjAKLQotI2RlZmluZSBOVl9QQ1JUQ19HUkNVUlNPUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzEKLSNkZWZpbmUgTlZfUENSVENfR1JDVVJTT1IxX1NUQVJUX0FERFJfMTVfMTEgICAgICAgICAgICAgICAgICA3OjMKLSNkZWZpbmUgTlZfUENSVENfR1JDVVJTT1IxX1NDQU5fREJMICAgICAgICAgICAgICAgICAgICAgICAgICAxOjEKLSNkZWZpbmUgTlZfUENSVENfR1JDVVJTT1IxX1NDQU5fREJMX0RJU0FCTEUgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE5WX1BDUlRDX0dSQ1VSU09SMV9TQ0FOX0RCTF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBOVl9QQ1JUQ19HUkNVUlNPUjFfQ1VSU09SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6MAotI2RlZmluZSBOVl9QQ1JUQ19HUkNVUlNPUjFfQ1VSU09SX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgIDAgCi0jZGVmaW5lIE5WX1BDUlRDX0dSQ1VSU09SMV9DVVJTT1JfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgMQotCi0vKiBDb250cm9scyB3aGF0IHRoZSBmb3JtYXQgb2YgdGhlIGZyYW1lYnVmZmVyIGlzICovCi0jZGVmaW5lIE5WX1BDUlRDX1BJWEVMICAgICAgICAgICAgICAgICAgICAgICAweDI4Ci0jZGVmaW5lIE5WX1BDUlRDX1BJWEVMX01PREUgICAgICAgICAgICAgICAgICA3OjcKLSNkZWZpbmUgTlZfUENSVENfUElYRUxfTU9ERV9UViAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgTlZfUENSVENfUElYRUxfTU9ERV9WR0EgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgTlZfUENSVENfUElYRUxfVFZfTU9ERSAgICAgICAgICAgICAgIDY6NgotI2RlZmluZSBOVl9QQ1JUQ19QSVhFTF9UVl9NT0RFX05UU0MgICAgICAgICAgMHgwMAotI2RlZmluZSBOVl9QQ1JUQ19QSVhFTF9UVl9NT0RFX1BBTCAgICAgICAgICAgMHgwMQotI2RlZmluZSBOVl9QQ1JUQ19QSVhFTF9UVl9IT1JJWl9BREpVU1QgICAgICAgNTozCi0jZGVmaW5lIE5WX1BDUlRDX1BJWEVMX0ZPUk1BVCAgICAgICAgICAgICAgICAxOjAKLSNkZWZpbmUgTlZfUENSVENfUElYRUxfRk9STUFUX1ZHQSAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgTlZfUENSVENfUElYRUxfRk9STUFUXzhCUFAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgTlZfUENSVENfUElYRUxfRk9STUFUXzE2QlBQICAgICAgICAgIDB4MDIKLSNkZWZpbmUgTlZfUENSVENfUElYRUxfRk9STUFUXzMyQlBQICAgICAgICAgIDB4MDMKLQotLyogUkFNREFDIHJlZ2lzdGVycyBhbmQgZmllbGRzICovCi0jZGVmaW5lIE5WX1BSQU1EQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDY4MEZGRjoweDAwNjgwMDAwIC8qIFJXLS1EICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR1JDVVJTT1JfU1RBUlRfUE9TICAgICAgICAgICAgICAgICAgICAweDAwNjgwMzAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR1JDVVJTT1JfU1RBUlRfUE9TX1ggICAgICAgICAgICAgICAgICAgICAgICAxMTowIC8qIFJXWFNGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR1JDVVJTT1JfU1RBUlRfUE9TX1kgICAgICAgICAgICAgICAgICAgICAgIDI3OjE2IC8qIFJXWFNGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfTlZQTExfQ09FRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNjgwNTAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfTlZQTExfQ09FRkZfTURJViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfTlZQTExfQ09FRkZfTkRJViAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTo4IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfTlZQTExfQ09FRkZfUERJViAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfTVBMTF9DT0VGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNjgwNTA0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfTVBMTF9DT0VGRl9NRElWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfTVBMTF9DT0VGRl9ORElWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTo4IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfTVBMTF9DT0VGRl9QRElWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfVlBMTF9DT0VGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNjgwNTA4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfVlBMTF9DT0VGRl9NRElWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfVlBMTF9DT0VGRl9ORElWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTo4IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfVlBMTF9DT0VGRl9QRElWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAweDAwNjgwNTBDIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9ETExfQllQQVNTICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9ETExfQllQQVNTX0ZBTFNFICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9ETExfQllQQVNTX1RSVUUgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9NUExMX1NPVVJDRSAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9NUExMX1NPVVJDRV9ERUZBVUxUICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9NUExMX1NPVVJDRV9QUk9HICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9NUExMX0JZUEFTUyAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9NUExMX0JZUEFTU19GQUxTRSAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9NUExMX0JZUEFTU19UUlVFICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9WUExMX1NPVVJDRSAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9WUExMX1NPVVJDRV9ERUZBVUxUICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9WUExMX1NPVVJDRV9QUk9HICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9WUExMX0JZUEFTUyAgICAgICAgICAgICAgIDIwOjIwIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9WUExMX0JZUEFTU19GQUxTRSAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9WUExMX0JZUEFTU19UUlVFICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9QQ0xLX1NPVVJDRSAgICAgICAgICAgICAgIDI1OjI0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9QQ0xLX1NPVVJDRV9WUExMICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9QQ0xLX1NPVVJDRV9WSVAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9QQ0xLX1NPVVJDRV9YVEFMT1NDICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9WQ0xLX1JBVElPICAgICAgICAgICAgICAgIDI4OjI4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9WQ0xLX1JBVElPX0RCMSAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfUExMX0NPRUZGX1NFTEVDVF9WQ0xLX1JBVElPX0RCMiAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAweDAwNjgwNjAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0ZGX0NPRUZGICAgICAgICAgICAgICAgICAgICAgMTowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0ZGX0NPRUZGX0RFRiAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0lEQ19NT0RFICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0lEQ19NT0RFX0dBTU1BICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0lEQ19NT0RFX0lOREVYICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX1ZHQV9TVEFURSAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX1ZHQV9TVEFURV9OT1RTRSAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX1ZHQV9TVEFURV9TRUwgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MXzU2NV9NT0RFICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MXzU2NV9NT0RFX05PVFNFTCAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MXzU2NV9NT0RFX1NFTCAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0JMS19QRURTVEwgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0JMS19QRURTVExfT0ZGICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0JMS19QRURTVExfT04gICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX1RFUk1JTkFUSU9OICAgICAgICAgICAgICAgIDE3OjE3IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX1RFUk1JTkFUSU9OXzM3T0hNICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX1RFUk1JTkFUSU9OXzc1T0hNICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0JQQyAgICAgICAgICAgICAgICAgICAgICAgIDIwOjIwIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0JQQ182QklUUyAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0JQQ184QklUUyAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0RBQ19TTEVFUCAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0RBQ19TTEVFUF9ESVMgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX0RBQ19TTEVFUF9FTiAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX1BBTEVUVEVfQ0xLICAgICAgICAgICAgICAgIDI4OjI4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX1BBTEVUVEVfQ0xLX0VOICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BSQU1EQUNfR0VORVJBTF9DT05UUk9MX1BBTEVUVEVfQ0xLX0RJUyAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0KLS8qIE1hc3RlciBDb250cm9sICovCi0jZGVmaW5lIE5WX1BNQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEZGRjoweDAwMDAwMDAwIC8qIFJXLS1EICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLTRSICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfTUlOT1JfUkVWSVNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgMzowIC8qIEMtLVZGICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfTUlOT1JfUkVWSVNJT05fMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIEMtLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfTUFKT1JfUkVWSVNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgNzo0IC8qIEMtLVZGICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfTUFKT1JfUkVWSVNJT05fQSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIEMtLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfTUFKT1JfUkVWSVNJT05fQiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC0tLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfSU1QTEVNRU5UQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAxMTo4IC8qIEMtLVZGICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfSU1QTEVNRU5UQVRJT05fTlY0XzAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIEMtLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfQVJDSElURUNUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OjEyIC8qIEMtLVZGICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfQVJDSElURUNUVVJFX05WMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIC0tLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfQVJDSElURUNUVVJFX05WMSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC0tLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfQVJDSElURUNUVVJFX05WMiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIC0tLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfQVJDSElURUNUVVJFX05WMyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIC0tLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfQVJDSElURUNUVVJFX05WNCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIEMtLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfRklCX1JFVklTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5OjE2IC8qIEMtLVZGICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfRklCX1JFVklTSU9OXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIEMtLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfTUFTS19SRVZJU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzOjIwIC8qIEMtLVZGICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfTUFTS19SRVZJU0lPTl9BICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIEMtLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfTUFTS19SRVZJU0lPTl9CICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC0tLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfTUFOVUZBQ1RVUkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3OjI0IC8qIEMtLVVGICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfTUFOVUZBQ1RVUkVSX05WSURJQSAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIEMtLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfRk9VTkRSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjI4IC8qIEMtLVZGICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfRk9VTkRSWV9TR1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIC0tLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfRk9VTkRSWV9IRUxJT1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC0tLS1WICovCi0jZGVmaW5lIE5WX1BNQ19CT09UXzBfRk9VTkRSWV9UU01DICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIEMtLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUE1FRElBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUE1FRElBX05PVF9QRU5ESU5HICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUE1FRElBX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUEZJRk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUEZJRk9fTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUEZJRk9fUEVORElORyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUEdSQVBIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUEdSQVBIX05PVF9QRU5ESU5HICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUEdSQVBIX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUFZJREVPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUFZJREVPX05PVF9QRU5ESU5HICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUFZJREVPX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUFRJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOjIwIC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUFRJTUVSX05PVF9QRU5ESU5HICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUFRJTUVSX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUENSVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUENSVENfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUENSVENfUEVORElORyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUEJVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OjI4IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUEJVU19OT1RfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfUEJVU19QRU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfU09GVFdBUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfU09GVFdBUkVfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSXzBfU09GVFdBUkVfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSX0VOXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTQwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSX0VOXzBfSU5UQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSX0VOXzBfSU5UQV9ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSX0VOXzBfSU5UQV9IQVJEV0FSRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSX0VOXzBfSU5UQV9TT0ZUV0FSRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSX1JFQURfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTYwIC8qIFItLTRSICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSX1JFQURfMF9JTlRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSX1JFQURfMF9JTlRBX0xPVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19JTlRSX1JFQURfMF9JTlRBX0hJR0ggICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUE1FRElBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUE1FRElBX0RJU0FCTEVEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUE1FRElBX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUEZJRk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUEZJRk9fRElTQUJMRUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUEZJRk9fRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUEdSQVBIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUEdSQVBIX0RJU0FCTEVEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUEdSQVBIX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUFBNSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUFBNSV9ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUFBNSV9FTkFCTEVEICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUEZCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOjIwIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUEZCX0RJU0FCTEVEICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUEZCX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUENSVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUENSVENfRElTQUJMRUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUENSVENfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUFZJREVPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OjI4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUFZJREVPX0RJU0FCTEVEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BNQ19FTkFCTEVfUFZJREVPX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0KLS8qIGRldl90aW1lci5yZWYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5RkZGOjB4MDAwMDkwMDAgLyogUlctLUQgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0lOVFJfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDkxMDAgLyogUlctNFIgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0lOVFJfMF9BTEFSTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOjAgLyogUldYVkYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0lOVFJfMF9BTEFSTV9OT1RfUEVORElORyAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUi0tLVYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0lOVFJfMF9BTEFSTV9QRU5ESU5HICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUi0tLVYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0lOVFJfMF9BTEFSTV9SRVNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogLVctLVYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0lOVFJfRU5fMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDkxNDAgLyogUlctNFIgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0lOVFJfRU5fMF9BTEFSTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOjAgLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0lOVFJfRU5fMF9BTEFSTV9ESVNBQkxFRCAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0lOVFJfRU5fMF9BTEFSTV9FTkFCTEVEICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX05VTUVSQVRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDkyMDAgLyogUlctNFIgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX05VTUVSQVRPUl9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OjAgLyogUldJVUYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX05VTUVSQVRPUl9WQUxVRV8wICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0RFTk9NSU5BVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDkyMTAgLyogUlctNFIgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0RFTk9NSU5BVE9SX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OjAgLyogUldJVUYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0RFTk9NSU5BVE9SX1ZBTFVFXzAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX1RJTUVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk0MDAgLyogUlctNFIgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX1RJTUVfMF9OU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjUgLyogUldYVUYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX1RJTUVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk0MTAgLyogUlctNFIgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX1RJTUVfMV9OU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OjAgLyogUldYVUYgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0FMQVJNXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk0MjAgLyogUlctNFIgKi8KLSNkZWZpbmUgTlZfUFRJTUVSX0FMQVJNXzBfTlNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjUgLyogUldYVUYgKi8KLQotLyogZGV2X2ZpZm8ucmVmICovCi0jZGVmaW5lIE5WX1BGSUZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM0ZGRjoweDAwMDAyMDAwIC8qIFJXLS1EICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFTEFZXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDQwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFTEFZXzBfV0FJVF9SRVRSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFTEFZXzBfV0FJVF9SRVRSWV8wICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9USU1FU0xJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDQ0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9USU1FU0xJQ0VfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAxNjowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9USU1FU0xJQ0VfU0VMRUNUXzEgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9USU1FU0xJQ0VfU0VMRUNUXzE2SyAgICAgICAgICAgICAgICAweDAwMDAzZmZmIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9USU1FU0xJQ0VfU0VMRUNUXzMySyAgICAgICAgICAgICAgICAweDAwMDA3ZmZmIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9USU1FU0xJQ0VfU0VMRUNUXzY0SyAgICAgICAgICAgICAgICAweDAwMDBmZmZmIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9USU1FU0xJQ0VfU0VMRUNUXzEyOEsgICAgICAgICAgICAgICAweDAwMDFmZmZmIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9USU1FU0xJQ0VfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9USU1FU0xJQ0VfVElNRU9VVF9ESVNBQkxFRCAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9USU1FU0xJQ0VfVElNRU9VVF9FTkFCTEVEICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1BJT19USU1FU0xJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDQ4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX1BJT19USU1FU0xJQ0VfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAxNjowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX1BJT19USU1FU0xJQ0VfU0VMRUNUXzEgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1BJT19USU1FU0xJQ0VfU0VMRUNUXzE2SyAgICAgICAgICAgICAgICAweDAwMDAzZmZmIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1BJT19USU1FU0xJQ0VfU0VMRUNUXzMySyAgICAgICAgICAgICAgICAweDAwMDA3ZmZmIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1BJT19USU1FU0xJQ0VfU0VMRUNUXzY0SyAgICAgICAgICAgICAgICAweDAwMDBmZmZmIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1BJT19USU1FU0xJQ0VfU0VMRUNUXzEyOEsgICAgICAgICAgICAgICAweDAwMDFmZmZmIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1BJT19USU1FU0xJQ0VfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX1BJT19USU1FU0xJQ0VfVElNRU9VVF9ESVNBQkxFRCAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1BJT19USU1FU0xJQ0VfVElNRU9VVF9FTkFCTEVEICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1RJTUVTTElDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDRDIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX1RJTUVTTElDRV9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX1RJTUVTTElDRV9USU1FUl9FWFBJUkVEICAgICAgICAgICAgICAgICAweDAwMDNGRkZGIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX05FWFRfQ0hBTk5FTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDUwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX05FWFRfQ0hBTk5FTF9DSElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX05FWFRfQ0hBTk5FTF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX05FWFRfQ0hBTk5FTF9NT0RFX1BJTyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX05FWFRfQ0hBTk5FTF9NT0RFX0RNQSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX05FWFRfQ0hBTk5FTF9TV0lUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX05FWFRfQ0hBTk5FTF9TV0lUQ0hfTk9UX1BFTkRJTkcgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX05FWFRfQ0hBTk5FTF9TV0lUQ0hfUEVORElORyAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFQlVHXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDgwIC8qIFItLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFQlVHXzBfQ0FDSEVfRVJST1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFQlVHXzBfQ0FDSEVfRVJST1IwX05PVF9QRU5ESU5HICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFQlVHXzBfQ0FDSEVfRVJST1IwX1BFTkRJTkcgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFQlVHXzBfQ0FDSEVfRVJST1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFQlVHXzBfQ0FDSEVfRVJST1IxX05PVF9QRU5ESU5HICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFQlVHXzBfQ0FDSEVfRVJST1IxX1BFTkRJTkcgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9DQUNIRV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9DQUNIRV9FUlJPUl9OT1RfUEVORElORyAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9DQUNIRV9FUlJPUl9QRU5ESU5HICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9DQUNIRV9FUlJPUl9SRVNFVCAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9SVU5PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9SVU5PVVRfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9SVU5PVVRfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9SVU5PVVRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9SVU5PVVRfT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9SVU5PVVRfT1ZFUkZMT1dfTk9UX1BFTkRJTkcgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9SVU5PVVRfT1ZFUkZMT1dfUEVORElORyAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9SVU5PVVRfT1ZFUkZMT1dfUkVTRVQgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9ETUFfUFVTSEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9ETUFfUFVTSEVSX05PVF9QRU5ESU5HICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9ETUFfUFVTSEVSX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9ETUFfUFVTSEVSX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9ETUFfUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9ETUFfUFRfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9ETUFfUFRfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfMF9ETUFfUFRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMTQwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9DQUNIRV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9DQUNIRV9FUlJPUl9ESVNBQkxFRCAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9DQUNIRV9FUlJPUl9FTkFCTEVEICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9SVU5PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9SVU5PVVRfRElTQUJMRUQgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9SVU5PVVRfRU5BQkxFRCAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9SVU5PVVRfT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9SVU5PVVRfT1ZFUkZMT1dfRElTQUJMRUQgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9SVU5PVVRfT1ZFUkZMT1dfRU5BQkxFRCAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9ETUFfUFVTSEVSICAgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9ETUFfUFVTSEVSX0RJU0FCTEVEICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9ETUFfUFVTSEVSX0VOQUJMRUQgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9ETUFfUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9ETUFfUFRfRElTQUJMRUQgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0lOVFJfRU5fMF9ETUFfUFRfRU5BQkxFRCAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjEwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo0IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX0JBU0VfQUREUkVTU18xMDAwMCAgICAgICAgICAgICAgICAweDAwMDAwMDEwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3OjE2IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX1NJWkVfNEsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX1NJWkVfOEsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX1NJWkVfMTZLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX1NJWkVfMzJLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX1NFQVJDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1OjI0IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX1NFQVJDSF8xNiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX1NFQVJDSF8zMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX1NFQVJDSF82NCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUhUX1NFQVJDSF8xMjggICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUZDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjE0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUZDX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODoxIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTUZDX0JBU0VfQUREUkVTU18xMTAwMCAgICAgICAgICAgICAgICAweDAwMDAwMDg4IC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMjE4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTVJPX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODoxIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTVJPX0JBU0VfQUREUkVTU18xMTIwMCAgICAgICAgICAgICAgICAweDAwMDAwMDg5IC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTVJPX0JBU0VfQUREUkVTU18xMjAwMCAgICAgICAgICAgICAgICAweDAwMDAwMDkwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTVJPX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTVJPX1NJWkVfNTEyICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JBTVJPX1NJWkVfOEsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNTAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFU19SRUFTU0lHTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFU19SRUFTU0lHTl9ESVNBQkxFRCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFU19SRUFTU0lHTl9FTkFCTEVEICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFU19ETUFfU1VTUEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFU19ETUFfU1VTUEVORF9JRExFICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFU19ETUFfU1VTUEVORF9CVVNZICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNTA0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8wX1BJTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8wX0RNQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMToxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xX1BJTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xX0RNQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjoyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8yX1BJTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8yX0RNQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzozIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8zX1BJTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8zX0RNQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF80X1BJTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF80X0RNQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTo1IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF81X1BJTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF81X0RNQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjo2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF82X1BJTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF82X0RNQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzo3IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF83X1BJTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF83X0RNQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF84X1BJTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF84X0RNQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTo5IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF85X1BJTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF85X0RNQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOjEwIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xMF9QSU8gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xMF9ETUEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOjExIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xMV9QSU8gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xMV9ETUEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xMl9QSU8gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xMl9ETUEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOjEzIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xM19QSU8gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xM19ETUEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OjE0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xNF9QSU8gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xNF9ETUEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OjE1IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xNV9QSU8gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX01PREVfQ0hBTk5FTF8xNV9ETUEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNTA4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzBfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzBfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMToxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzFfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzFfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjoyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzJfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzJfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzozIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzNfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzNfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzRfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzRfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTo1IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzVfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzVfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjo2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzZfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzZfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzo3IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzdfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzdfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzhfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzhfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTo5IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzlfTk9UX1BFTkRJTkcgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzlfUEVORElORyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOjEwIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzEwX05PVF9QRU5ESU5HICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzEwX1BFTkRJTkcgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOjExIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzExX05PVF9QRU5ESU5HICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzExX1BFTkRJTkcgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzEyX05PVF9QRU5ESU5HICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzEyX1BFTkRJTkcgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOjEzIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzEzX05PVF9QRU5ESU5HICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzEzX1BFTkRJTkcgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OjE0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzE0X05PVF9QRU5ESU5HICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzE0X1BFTkRJTkcgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OjE1IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzE1X05PVF9QRU5ESU5HICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RNQV9DSEFOTkVMXzE1X1BFTkRJTkcgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNTBDIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8wXzEyNF9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8wXzUxMl9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMToxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xXzEyNF9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xXzUxMl9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjoyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8yXzEyNF9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8yXzUxMl9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzozIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8zXzEyNF9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8zXzUxMl9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF80XzEyNF9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF80XzUxMl9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTo1IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF81XzEyNF9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF81XzUxMl9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjo2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF82XzEyNF9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF82XzUxMl9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzo3IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF83XzEyNF9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF83XzUxMl9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF84XzEyNF9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF84XzUxMl9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTo5IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF85XzEyNF9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF85XzUxMl9CWVRFUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOjEwIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xMF8xMjRfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xMF81MTJfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOjExIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xMV8xMjRfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xMV81MTJfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xMl8xMjRfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xMl81MTJfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOjEzIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xM18xMjRfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xM181MTJfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OjE0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xNF8xMjRfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xNF81MTJfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OjE1IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xNV8xMjRfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1NJWkVfQ0hBTk5FTF8xNV81MTJfQllURVMgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVVNIMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVVNIMF9BQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVVNIMF9BQ0NFU1NfRElTQUJMRUQgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVVNIMF9BQ0NFU1NfRU5BQkxFRCAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVVNIMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVVNIMF9BQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVVNIMF9BQ0NFU1NfRElTQUJMRUQgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVVNIMF9BQ0NFU1NfRU5BQkxFRCAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVVNIMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDA0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVVNIMV9DSElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVVNIMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjA0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVVNIMV9DSElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVVNIMV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVVNIMV9NT0RFX1BJTyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVVNIMV9NT0RFX0RNQSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjIwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9BQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9BQ0NFU1NfRElTQUJMRUQgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9BQ0NFU1NfRU5BQkxFRCAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9TVEFURV9JRExFICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9TVEFURV9CVVNZICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9CVUZGRVJfTk9UX0VNUFRZICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9CVUZGRVJfRU1QVFkgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9TVEFUVVNfUlVOTklORyAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVTSF9TVEFUVVNfU1VTUEVOREVEICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0ggICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjI0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJRyAgICAgICAgICAgICAgICAgICAgICAgICAgNzozIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR184X0JZVEVTICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xNl9CWVRFUyAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18yNF9CWVRFUyAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18zMl9CWVRFUyAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR180MF9CWVRFUyAgICAgICAgICAweDAwMDAwMDA0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR180OF9CWVRFUyAgICAgICAgICAweDAwMDAwMDA1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR181Nl9CWVRFUyAgICAgICAgICAweDAwMDAwMDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR182NF9CWVRFUyAgICAgICAgICAweDAwMDAwMDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR183Ml9CWVRFUyAgICAgICAgICAweDAwMDAwMDA4IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR184MF9CWVRFUyAgICAgICAgICAweDAwMDAwMDA5IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR184OF9CWVRFUyAgICAgICAgICAweDAwMDAwMDBBIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR185Nl9CWVRFUyAgICAgICAgICAweDAwMDAwMDBCIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xMDRfQllURVMgICAgICAgICAweDAwMDAwMDBDIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xMTJfQllURVMgICAgICAgICAweDAwMDAwMDBEIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xMjBfQllURVMgICAgICAgICAweDAwMDAwMDBFIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xMjhfQllURVMgICAgICAgICAweDAwMDAwMDBGIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xMzZfQllURVMgICAgICAgICAweDAwMDAwMDEwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xNDRfQllURVMgICAgICAgICAweDAwMDAwMDExIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xNTJfQllURVMgICAgICAgICAweDAwMDAwMDEyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xNjBfQllURVMgICAgICAgICAweDAwMDAwMDEzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xNjhfQllURVMgICAgICAgICAweDAwMDAwMDE0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xNzZfQllURVMgICAgICAgICAweDAwMDAwMDE1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xODRfQllURVMgICAgICAgICAweDAwMDAwMDE2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18xOTJfQllURVMgICAgICAgICAweDAwMDAwMDE3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18yMDBfQllURVMgICAgICAgICAweDAwMDAwMDE4IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18yMDhfQllURVMgICAgICAgICAweDAwMDAwMDE5IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18yMTZfQllURVMgICAgICAgICAweDAwMDAwMDFBIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18yMjRfQllURVMgICAgICAgICAweDAwMDAwMDFCIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18yMzJfQllURVMgICAgICAgICAweDAwMDAwMDFDIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18yNDBfQllURVMgICAgICAgICAweDAwMDAwMDFEIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18yNDhfQllURVMgICAgICAgICAweDAwMDAwMDFFIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfVFJJR18yNTZfQllURVMgICAgICAgICAweDAwMDAwMDFGIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDE1OjEzIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfU0laRV8zMl9CWVRFUyAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfU0laRV82NF9CWVRFUyAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfU0laRV85Nl9CWVRFUyAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfU0laRV8xMjhfQllURVMgICAgICAgICAweDAwMDAwMDAzIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfU0laRV8xNjBfQllURVMgICAgICAgICAweDAwMDAwMDA0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfU0laRV8xOTJfQllURVMgICAgICAgICAweDAwMDAwMDA1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfU0laRV8yMjRfQllURVMgICAgICAgICAweDAwMDAwMDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfU0laRV8yNTZfQllURVMgICAgICAgICAweDAwMDAwMDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVMgICAgICAgICAgICAgICAgICAgIDE5OjE2IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfMCAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfMSAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfMiAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfMyAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfNCAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfNSAgICAgICAgICAgICAweDAwMDAwMDA1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfNiAgICAgICAgICAgICAweDAwMDAwMDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfNyAgICAgICAgICAgICAweDAwMDAwMDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfOCAgICAgICAgICAgICAweDAwMDAwMDA4IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfOSAgICAgICAgICAgICAweDAwMDAwMDA5IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfMTAgICAgICAgICAgICAweDAwMDAwMDBBIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfMTEgICAgICAgICAgICAweDAwMDAwMDBCIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfMTIgICAgICAgICAgICAweDAwMDAwMDBDIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfMTMgICAgICAgICAgICAweDAwMDAwMDBEIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfMTQgICAgICAgICAgICAweDAwMDAwMDBFIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfRkVUQ0hfTUFYX1JFUVNfMTUgICAgICAgICAgICAweDAwMDAwMDBGIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjQwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfUFVUX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAyODoyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfR0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjQ0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfR0VUX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAyODoyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjI4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfU1RBVEVfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAxMjoyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfU1RBVEVfU1VCQ0hBTk5FTCAgICAgICAgICAgICAgICAgIDE1OjEzIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfU1RBVEVfTUVUSE9EX0NPVU5UICAgICAgICAgICAgICAgIDI4OjE4IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfU1RBVEVfTUVUSE9EX0NPVU5UXzAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfU1RBVEVfRVJST1IgICAgICAgICAgICAgICAgICAgICAgIDMxOjMwIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfU1RBVEVfRVJST1JfTk9ORSAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfU1RBVEVfRVJST1JfTk9OX0NBQ0hFICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfU1RBVEVfRVJST1JfUkVTRVJWRURfQ01EICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfU1RBVEVfRVJST1JfUFJPVEVDVElPTiAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfSU5TVEFOQ0UgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjJDIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfSU5TVEFOQ0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAxNTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjMwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX0FESlVTVCAgICAgICAgICAgICAgICAgICAgICAgICAxMToyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX1BBR0VfVEFCTEUgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX1BBR0VfVEFCTEVfTk9UX1BSRVNFTlQgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX1BBR0VfVEFCTEVfUFJFU0VOVCAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX1BBR0VfRU5UUlkgICAgICAgICAgICAgICAgICAgIDEzOjEzIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX1BBR0VfRU5UUllfTk9UX0xJTkVBUiAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX1BBR0VfRU5UUllfTElORUFSICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX1RBUkdFVF9OT0RFICAgICAgICAgICAgICAgICAgIDE3OjE2IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX1RBUkdFVF9OT0RFX1BDSSAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX1RBUkdFVF9OT0RFX0FHUCAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX0FUX0lORk8gICAgICAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX0FUX0lORk9fSU5WQUxJRCAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfQ1RMX0FUX0lORk9fVkFMSUQgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfTElNSVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjM0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfTElNSVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAyODoyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfVExCX1RBRyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjM4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfVExCX1RBR19BRERSRVNTICAgICAgICAgICAgICAgICAgIDI4OjEyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfVExCX1RBR19TVEFURSAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfVExCX1RBR19TVEFURV9JTlZBTElEICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfVExCX1RBR19TVEFURV9WQUxJRCAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfVExCX1BURSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjNDIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9ETUFfVExCX1BURV9GUkFNRV9BRERSRVNTICAgICAgICAgICAgIDMxOjEyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDUwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9BQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9BQ0NFU1NfRElTQUJMRUQgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9BQ0NFU1NfRU5BQkxFRCAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9IQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9IQVNIX1NVQ0NFRURFRCAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9IQVNIX0ZBSUxFRCAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9ERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9ERVZJQ0VfSEFSRFdBUkUgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9ERVZJQ0VfU09GVFdBUkUgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9IQVNIX1NUQVRFICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9IQVNIX1NUQVRFX0lETEUgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMF9IQVNIX1NUQVRFX0JVU1kgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjUwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9BQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9BQ0NFU1NfRElTQUJMRUQgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9BQ0NFU1NfRU5BQkxFRCAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9IQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9IQVNIX1NVQ0NFRURFRCAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9IQVNIX0ZBSUxFRCAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9ERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9ERVZJQ0VfSEFSRFdBUkUgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9ERVZJQ0VfU09GVFdBUkUgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9IQVNIX1NUQVRFICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9IQVNIX1NUQVRFX0lETEUgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMF9IQVNIX1NUQVRFX0JVU1kgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDU0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMV9FTkdJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMV9FTkdJTkVfU1cgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMV9FTkdJTkVfR1JBUEhJQ1MgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVUxMMV9FTkdJTkVfRFZEICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjU0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMV9FTkdJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMV9FTkdJTkVfU1cgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMV9FTkdJTkVfR1JBUEhJQ1MgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVUxMMV9FTkdJTkVfRFZEICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9IQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDU4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9IQVNIX0lOU1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAxNTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9IQVNIX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9IQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjU4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9IQVNIX0lOU1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAxNTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9IQVNIX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDE0IC8qIFItLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9TVEFUVVNfTE9XX01BUksgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9TVEFUVVNfTE9XX01BUktfTk9UX0VNUFRZICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9TVEFUVVNfTE9XX01BUktfRU1QVFkgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9TVEFUVVNfSElHSF9NQVJLICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9TVEFUVVNfSElHSF9NQVJLX05PVF9GVUxMICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9TVEFUVVNfSElHSF9NQVJLX0ZVTEwgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjE0IC8qIFItLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9TVEFUVVNfTE9XX01BUksgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9TVEFUVVNfTE9XX01BUktfTk9UX0VNUFRZICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9TVEFUVVNfTE9XX01BUktfRU1QVFkgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9TVEFUVVNfSElHSF9NQVJLICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9TVEFUVVNfSElHSF9NQVJLX05PVF9GVUxMICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9TVEFUVVNfSElHSF9NQVJLX0ZVTEwgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9TVEFUVVMxICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjE4IC8qIFItLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9TVEFUVVMxX1JBTk9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9TVEFUVVMxX1JBTk9VVF9GQUxTRSAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9TVEFUVVMxX1JBTk9VVF9UUlVFICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDEwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9QVVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjoyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjEwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9QVVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOToyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9HRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDcwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9HRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjoyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9HRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjcwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9HRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOToyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDgwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMF9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMF9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMF9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTo0IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMV9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMV9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMV9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTo4IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMl9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMl9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMl9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOjEyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfM19TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfM19HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfM19EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3OjE2IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNF9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNF9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNF9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOjIwIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNV9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNV9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNV9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1OjI0IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNl9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNl9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNl9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5OjI4IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfN19TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfN19HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9FTkdJTkVfN19EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMjgwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMF9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMF9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMF9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTo0IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMV9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMV9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMV9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTo4IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMl9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMl9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMl9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOjEyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfM19TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfM19HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfM19EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3OjE2IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNF9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNF9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNF9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOjIwIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNV9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNV9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNV9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1OjI0IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNl9TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNl9HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNl9EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5OjI4IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfN19TVyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfN19HUkFQSElDUyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9FTkdJTkVfN19EVkQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9NRVRIT0QoaSkgICAgICAgICAgICAgICAgKDB4MDAwMDMxMDArKGkpKjgpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9NRVRIT0RfX1NJWkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9NRVRIT0RfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAxMjoyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9NRVRIT0RfU1VCQ0hBTk5FTCAgICAgICAgICAgICAgICAgICAgIDE1OjEzIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9NRVRIT0QoaSkgICAgICAgICAgICAgICAgKDB4MDAwMDM4MDArKGkpKjgpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9NRVRIT0RfX1NJWkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgMTI4IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9NRVRIT0RfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAxMjoyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9NRVRIT0RfU1VCQ0hBTk5FTCAgICAgICAgICAgICAgICAgICAgIDE1OjEzIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9NRVRIT0RfQUxJQVMoaSkgICAgICAgICAgKDB4MDAwMDNDMDArKGkpKjgpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9NRVRIT0RfQUxJQVNfX1NJWkVfMSAgICAgICAgICAgICAgICAgICAgMTI4IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9EQVRBKGkpICAgICAgICAgICAgICAgICAgKDB4MDAwMDMxMDQrKGkpKjgpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9EQVRBX19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMF9EQVRBX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9EQVRBKGkpICAgICAgICAgICAgICAgICAgKDB4MDAwMDM4MDQrKGkpKjgpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9EQVRBX19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI4IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9EQVRBX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9EQVRBX0FMSUFTKGkpICAgICAgICAgICAgKDB4MDAwMDNDMDQrKGkpKjgpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BGSUZPX0NBQ0hFMV9EQVRBX0FMSUFTX19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgMTI4IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFVklDRShpKSAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDI4MDArKGkpKjQpIC8qIFItLTRBICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFVklDRV9fU0laRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI4IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFVklDRV9DSElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzowIC8qIFItLVVGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFVklDRV9TV0lUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFVklDRV9TV0lUQ0hfVU5BVkFJTEFCTEUgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX0RFVklDRV9TV0lUQ0hfQVZBSUxBQkxFICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDAwIC8qIFItLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9TVEFUVVNfUkFOT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9TVEFUVVNfUkFOT1VUX0ZBTFNFICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9TVEFUVVNfUkFOT1VUX1RSVUUgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9TVEFUVVNfTE9XX01BUksgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9TVEFUVVNfTE9XX01BUktfTk9UX0VNUFRZICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9TVEFUVVNfTE9XX01BUktfRU1QVFkgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9TVEFUVVNfSElHSF9NQVJLICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9TVEFUVVNfSElHSF9NQVJLX05PVF9GVUxMICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9TVEFUVVNfSElHSF9NQVJLX0ZVTEwgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9QVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDEwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9QVVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjozIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9QVVRfQUREUkVTU19fU0laRV8wICAgICAgICAgICAgICAgICAgICAgODozIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9QVVRfQUREUkVTU19fU0laRV8xICAgICAgICAgICAgICAgICAgICAxMjozIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9HRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNDIwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BGSUZPX1JVTk9VVF9HRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzozIC8qIFJXWFVGICovCi0vKiBkZXZfZ3JhcGhpY3MucmVmICovCi0jZGVmaW5lIE5WX1BHUkFQSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMUZGRjoweDAwNDAwMDAwIC8qIFJXLS1EICovCi0jZGVmaW5lIE5WX1BHUkFQSF9ERUJVR18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDgwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9ERUJVR18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDg0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9ERUJVR18yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDg4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9ERUJVR18zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDhDIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMTAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX05PVElGWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX05PVElGWV9OT1RfUEVORElORyAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX05PVElGWV9QRU5ESU5HICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX05PVElGWV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1DICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX01JU1NJTkdfSFcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX01JU1NJTkdfSFdfTk9UX1BFTkRJTkcgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX01JU1NJTkdfSFdfUEVORElORyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX01JU1NJTkdfSFdfUkVTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1DICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX1RMQl9QUkVTRU5UX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX1RMQl9QUkVTRU5UX0FfTk9UX1BFTkRJTkcgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX1RMQl9QUkVTRU5UX0FfUEVORElORyAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX1RMQl9QUkVTRU5UX0FfUkVTRVQgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1DICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX1RMQl9QUkVTRU5UX0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTo5IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX1RMQl9QUkVTRU5UX0JfTk9UX1BFTkRJTkcgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX1RMQl9QUkVTRU5UX0JfUEVORElORyAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX1RMQl9QUkVTRU5UX0JfUkVTRVQgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1DICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0NPTlRFWFRfU1dJVENIICAgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0NPTlRFWFRfU1dJVENIX05PVF9QRU5ESU5HICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0NPTlRFWFRfU1dJVENIX1BFTkRJTkcgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0NPTlRFWFRfU1dJVENIX1JFU0VUICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1DICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0JVRkZFUl9OT1RJRlkgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0JVRkZFUl9OT1RJRllfTk9UX1BFTkRJTkcgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0JVRkZFUl9OT1RJRllfUEVORElORyAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0JVRkZFUl9OT1RJRllfUkVTRVQgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1DICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMTA0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX1NUQVRFX0lOX1VTRSAgICAgICAgICAgICAgICAgICAgICAgIDExOjExIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX1NUQVRFX0lOX1VTRV9OT1RfUEVORElORyAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX1NUQVRFX0lOX1VTRV9QRU5ESU5HICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX0lOVkFMSURfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX0lOVkFMSURfU1RBVEVfTk9UX1BFTkRJTkcgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX0lOVkFMSURfU1RBVEVfUEVORElORyAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX0JBRF9BUkdVTUVOVCAgICAgICAgICAgICAgICAgICAgICAgIDEzOjEzIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX0JBRF9BUkdVTUVOVF9OT1RfUEVORElORyAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX0JBRF9BUkdVTUVOVF9QRU5ESU5HICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX1BST1RFQ1RJT05fRkFVTFQgICAgICAgICAgICAgICAgICAgIDE0OjE0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX1BST1RFQ1RJT05fRkFVTFRfTk9UX1BFTkRJTkcgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU1RBVFVTX1BST1RFQ1RJT05fRkFVTFRfUEVORElORyAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMTA4IC8qIFItLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX05PVElGSUNBVElPTl9OT1RfUEVORElORyAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX05PVElGSUNBVElPTl9QRU5ESU5HICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RBVEFfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMToxIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RBVEFfRVJST1JfTk9UX1BFTkRJTkcgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RBVEFfRVJST1JfUEVORElORyAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1BST1RFQ1RJT05fRVJST1IgICAgICAgICAgICAgICAgICAgICAgMjoyIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1BST1RFQ1RJT05fRVJST1JfTk9UX1BFTkRJTkcgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1BST1RFQ1RJT05fRVJST1JfUEVORElORyAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1JBTkdFX0VYQ0VQVElPTiAgICAgICAgICAgICAgICAgICAgICAgMzozIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1JBTkdFX0VYQ0VQVElPTl9OT1RfUEVORElORyAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1JBTkdFX0VYQ0VQVElPTl9QRU5ESU5HICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0xJTUlUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0xJTUlUX0NPTE9SX05PVF9QRU5ESU5HICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0xJTUlUX0NPTE9SX1BFTkRJTkcgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0xJTUlUX1pFVEFfICAgICAgICAgICAgICAgICAgICAgICAgICAgNTo1IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0xJTUlUX1pFVEFfTk9UX1BFTkRJTkcgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0xJTUlUX1pFVEFfUEVORElORyAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0lMTEVHQUxfTVRIRCAgICAgICAgICAgICAgICAgICAgICAgICAgNjo2IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0lMTEVHQUxfTVRIRF9OT1RfUEVORElORyAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0lMTEVHQUxfTVRIRF9QRU5ESU5HICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RNQV9SX1BST1RFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgNzo3IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RNQV9SX1BST1RFQ1RJT05fTk9UX1BFTkRJTkcgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RNQV9SX1BST1RFQ1RJT05fUEVORElORyAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RNQV9XX1BST1RFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RNQV9XX1BST1RFQ1RJT05fTk9UX1BFTkRJTkcgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RNQV9XX1BST1RFQ1RJT05fUEVORElORyAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0ZPUk1BVF9FWENFUFRJT04gICAgICAgICAgICAgICAgICAgICAgOTo5IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0ZPUk1BVF9FWENFUFRJT05fTk9UX1BFTkRJTkcgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0ZPUk1BVF9FWENFUFRJT05fUEVORElORyAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1BBVENIX0VYQ0VQVElPTiAgICAgICAgICAgICAgICAgICAgIDEwOjEwIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1BBVENIX0VYQ0VQVElPTl9OT1RfUEVORElORyAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1BBVENIX0VYQ0VQVElPTl9QRU5ESU5HICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1NUQVRFX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgIDExOjExIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1NUQVRFX0lOVkFMSURfTk9UX1BFTkRJTkcgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX1NUQVRFX0lOVkFMSURfUEVORElORyAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RPVUJMRV9OT1RJRlkgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RPVUJMRV9OT1RJRllfTk9UX1BFTkRJTkcgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0RPVUJMRV9OT1RJRllfUEVORElORyAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX05PVElGWV9JTl9VU0UgICAgICAgICAgICAgICAgICAgICAgIDEzOjEzIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX05PVElGWV9JTl9VU0VfTk9UX1BFTkRJTkcgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX05PVElGWV9JTl9VU0VfUEVORElORyAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX01FVEhPRF9DTlQgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OjE0IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX01FVEhPRF9DTlRfTk9UX1BFTkRJTkcgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX01FVEhPRF9DTlRfUEVORElORyAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0JGUl9OT1RJRklDQVRJT04gICAgICAgICAgICAgICAgICAgIDE1OjE1IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0JGUl9OT1RJRklDQVRJT05fTk9UX1BFTkRJTkcgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OU09VUkNFX0JGUl9OT1RJRklDQVRJT05fUEVORElORyAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMTQwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX05PVElGWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX05PVElGWV9ESVNBQkxFRCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX05PVElGWV9FTkFCTEVEICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX01JU1NJTkdfSFcgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX01JU1NJTkdfSFdfRElTQUJMRUQgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX01JU1NJTkdfSFdfRU5BQkxFRCAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX1RMQl9QUkVTRU5UX0EgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX1RMQl9QUkVTRU5UX0FfRElTQUJMRUQgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX1RMQl9QUkVTRU5UX0FfRU5BQkxFRCAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX1RMQl9QUkVTRU5UX0IgICAgICAgICAgICAgICAgICAgICAgICAgOTo5IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX1RMQl9QUkVTRU5UX0JfRElTQUJMRUQgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX1RMQl9QUkVTRU5UX0JfRU5BQkxFRCAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX0NPTlRFWFRfU1dJVENIICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX0NPTlRFWFRfU1dJVENIX0RJU0FCTEVEICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX0NPTlRFWFRfU1dJVENIX0VOQUJMRUQgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX0JVRkZFUl9OT1RJRlkgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX0JVRkZFUl9OT1RJRllfRElTQUJMRUQgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9JTlRSX0VOX0JVRkZFUl9OT1RJRllfRU5BQkxFRCAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMTYwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9HUkNMQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgNzowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9DSFJPTUFfS0VZICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9DSFJPTUFfS0VZX0RJU0FCTEUgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9DSFJPTUFfS0VZX0VOQUJMRSAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9VU0VSX0NMSVAgICAgICAgICAgICAgICAgICAgICAgIDEzOjEzIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9VU0VSX0NMSVBfRElTQUJMRSAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9VU0VSX0NMSVBfRU5BQkxFICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9TV0laWkxFICAgICAgICAgICAgICAgICAgICAgICAgIDE0OjE0IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9TV0laWkxFX0RJU0FCTEUgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9TV0laWkxFX0VOQUJMRSAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9QQVRDSF9DT05GSUcgICAgICAgICAgICAgICAgICAgIDE3OjE1IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9QQVRDSF9DT05GSUdfU1JDQ09QWV9BTkQgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9QQVRDSF9DT05GSUdfUk9QX0FORCAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9QQVRDSF9DT05GSUdfQkxFTkRfQU5EICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9QQVRDSF9DT05GSUdfU1JDQ09QWSAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9QQVRDSF9DT05GSUdfU1JDQ09QWV9QUkUgICAweDAwMDAwMDA0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9QQVRDSF9DT05GSUdfQkxFTkRfUFJFICAgICAweDAwMDAwMDA1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9QQVRDSF9TVEFUVVMgICAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9QQVRDSF9TVEFUVVNfSU5WQUxJRCAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9QQVRDSF9TVEFUVVNfVkFMSUQgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9DT05URVhUX1NVUkZBQ0UgICAgICAgICAgICAgICAgIDI1OjI1IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9DT05URVhUX1NVUkZBQ0VfSU5WQUxJRCAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9DT05URVhUX1NVUkZBQ0VfVkFMSUQgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9WT0xBVElMRV9SRVNFVCAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIENXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9WT0xBVElMRV9SRVNFVF9JR05PUkUgICAgICAweDAwMDAwMDAwIC8qIENXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMV9WT0xBVElMRV9SRVNFVF9FTkFCTEVEICAgICAweDAwMDAwMDAxIC8qIC1XLS1UICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMTY0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9NT05PX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgICAgMTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9NT05PX0ZPUk1BVF9JTlZBTElEICAgICAgICAgICAgICAweDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9NT05PX0ZPUk1BVF9DR0E2X00xICAgICAgICAgICAgICAweDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9NT05PX0ZPUk1BVF9MRV9NMSAgICAgICAgICAgICAgICAweDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVQgICAgICAgICAgICAgICAgICAgICAxMzo4IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfSU5WQUxJRCAgICAgICAgICAgICAweDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWTggICAgICAgICAgICAgICAweDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWDE2QThZOCAgICAgICAgICAweDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWDI0WTggICAgICAgICAgICAweDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfQTFSNUc1QjUgICAgICAgICAweDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWDFSNUc1QjUgICAgICAgICAweDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWDE2QTFSNUc1QjUgICAgICAweDA4IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWDE3UjVHNUI1ICAgICAgICAweDA5IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfUjVHNkI1ICAgICAgICAgICAweDBBIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfQTE2UjVHNkI1ICAgICAgICAweDBCIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWDE2UjVHNkI1ICAgICAgICAweDBDIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfQThSOEc4QjggICAgICAgICAweDBEIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWDhSOEc4QjggICAgICAgICAweDBFIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWTE2ICAgICAgICAgICAgICAweDBGIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfQTE2WTE2ICAgICAgICAgICAweDEwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWDE2WTE2ICAgICAgICAgICAweDExIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfVjhZQjhVOFlBOCAgICAgICAweDEyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWUI4VjhZQThVOCAgICAgICAweDEzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9DT0xPUl9GT1JNQVRfTEVfWTMyICAgICAgICAgICAgICAweDE0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9OT1RJRllfSU5TVEFOQ0UgICAgICAgICAgICAgICAgIDMxOjE2IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMl9OT1RJRllfSU5TVEFOQ0VfSU5WQUxJRCAgICAgICAgMHgwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMTY4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIM19ETUFfSU5TVEFOQ0VfMCAgICAgICAgICAgICAgICAgICAxNTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIM19ETUFfSU5TVEFOQ0VfMF9JTlZBTElEICAgICAgICAgMHgwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIM19ETUFfSU5TVEFOQ0VfMSAgICAgICAgICAgICAgICAgIDMxOjE2IC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENIM19ETUFfSU5TVEFOQ0VfMV9JTlZBTElEICAgICAgICAgMHgwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENINCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMTZDIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENINF9VU0VSX0lOU1RBTkNFICAgICAgICAgICAgICAgICAgICAxNTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfU1dJVENINF9VU0VSX0lOU1RBTkNFX0lOVkFMSUQgICAgICAgICAgMHgwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUxKGkpICAgICAgICAgICAgICAgICAgKDB4MDA0MDAxODArKGkpKjQpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUxX19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUxX0dSQ0xBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUxX0NIUk9NQV9LRVkgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUxX1VTRVJfQ0xJUCAgICAgICAgICAgICAgICAgICAgICAgIDEzOjEzIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUxX1NXSVpaTEUgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OjE0IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUxX1BBVENIX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgIDE5OjE1IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUxX1NQQVJFMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOjIwIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUxX1BBVENIX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUxX0NPTlRFWFRfU1VSRkFDRSAgICAgICAgICAgICAgICAgIDI1OjI1IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUyKGkpICAgICAgICAgICAgICAgICAgKDB4MDA0MDAxYTArKGkpKjQpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUyX19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUyX01PTk9fRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUyX0NPTE9SX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgICAxMzo4IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUyX05PVElGWV9JTlNUQU5DRSAgICAgICAgICAgICAgICAgIDMxOjE2IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUzKGkpICAgICAgICAgICAgICAgICAgKDB4MDA0MDAxYzArKGkpKjQpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUzX19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUzX0RNQV9JTlNUQU5DRV8wICAgICAgICAgICAgICAgICAgICAxNTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEUzX0RNQV9JTlNUQU5DRV8xICAgICAgICAgICAgICAgICAgIDMxOjE2IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEU0KGkpICAgICAgICAgICAgICAgICAgKDB4MDA0MDAxZTArKGkpKjQpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEU0X19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ0FDSEU0X1VTRVJfSU5TVEFOQ0UgICAgICAgICAgICAgICAgICAgICAxNTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMTcwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9NSU5JTVVNX1RJTUUgICAgICAgICAgICAgICAgICAgICAgMTowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9NSU5JTVVNX1RJTUVfMzNVUyAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9NSU5JTVVNX1RJTUVfMjYyVVMgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9NSU5JTVVNX1RJTUVfMk1TICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9NSU5JTVVNX1RJTUVfMTdNUyAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9USU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9USU1FX0VYUElSRUQgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9USU1FX05PVF9FWFBJUkVEICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9DSElEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9DSElEX0lOVkFMSUQgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9DSElEX1ZBTElEICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9DSEFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOjIwIC8qIFItLVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9DSEFOR0VfVU5BVkFJTEFCTEUgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9DSEFOR0VfQVZBSUxBQkxFICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9TV0lUQ0hJTkcgICAgICAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9TV0lUQ0hJTkdfSURMRSAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9TV0lUQ0hJTkdfQlVTWSAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9ERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OjI4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9ERVZJQ0VfRElTQUJMRUQgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfQ09OVFJPTF9ERVZJQ0VfRU5BQkxFRCAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfVVNFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMTc0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfVVNFUl9TVUJDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OjEzIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfVVNFUl9TVUJDSF8wICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfVVNFUl9DSElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3OjI0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DVFhfVVNFUl9DSElEXzAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GSUZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzIwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GSUZPX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GSUZPX0FDQ0VTU19ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GSUZPX0FDQ0VTU19FTkFCTEVEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMChpKSAgICAgICAgICAgICAgKDB4MDA0MDA3MzArKGkpKjQpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9fU0laRV8xICAgICAgICAgICAgICAgICAgICAgICAgICA0IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9UQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9UQUdfTVRIRCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9UQUdfQ0hTVyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9TVUJDSCAgICAgICAgICAgICAgICAgICAgICAgICAgMzoxIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9TVUJDSF8wICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9TVUJDSF8xICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9TVUJDSF8yICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9TVUJDSF8zICAgICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9TVUJDSF80ICAgICAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9TVUJDSF81ICAgICAgICAgICAgICAgICAweDAwMDAwMDA1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9TVUJDSF82ICAgICAgICAgICAgICAgICAweDAwMDAwMDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9TVUJDSF83ICAgICAgICAgICAgICAgICAweDAwMDAwMDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9NVEhEICAgICAgICAgICAgICAgICAgICAgICAgICAxNDo0IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMF9NVEhEX0NUWF9TV0lUQ0ggICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMShpKSAgICAgICAgICAgICAgKDB4MDA0MDA3NDArKGkpKjQpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMV9fU0laRV8xICAgICAgICAgICAgICAgICAgICAgICAgICA0IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fMV9BUkdVTUVOVCAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fUFRSICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzUwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fUFRSX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgMjowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fUFRSX1dSSVRFXzAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fUFRSX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgNjo0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX0ZJRk9fUFRSX1JFQURfMCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzU0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVEFUVVNfSU5WQUxJRCAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVEFUVVNfVkFMSUQgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9NVEhEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMToxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9NVEhEX0NUWF9TV0lUQ0ggICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVUJDSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVUJDSF8wICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVUJDSF8xICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVUJDSF8yICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVUJDSF8zICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVUJDSF80ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVUJDSF81ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVUJDSF82ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9TVUJDSF83ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4OjE1IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzIgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzMgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzYgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzggICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzkgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA5IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzEwICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzExICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzEyICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzEzICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBEIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzE0ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEXzE1ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDE5OjE5IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEX1NUQVRVU19JTlZBTElEICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9DSElEX1NUQVRVU19WQUxJRCAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9EICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzU4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9EX0FSR1VNRU5UICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GRklOVEZDX1NUMl9EX0FSR1VNRU5UXzAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzAwIC8qIFItLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfU1RBVEVfSURMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfU1RBVEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfWFlfTE9HSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfWFlfTE9HSUNfSURMRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfWFlfTE9HSUNfQlVTWSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTo1IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRkVfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUkFTVEVSSVpFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjo2IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUkFTVEVSSVpFUl9JRExFICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUkFTVEVSSVpFUl9CVVNZICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9OT1RJRlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9OT1RJRllfSURMRSAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9OT1RJRllfQlVTWSAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9SRUdJU1RFUl9JRExFICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9SRUdJU1RFUl9CVVNZICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9ETUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9ETUFfSURMRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9ETUFfQlVTWSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRE1BX0VOR0lORSAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3OjE3IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRE1BX0VOR0lORV9JRExFICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRE1BX0VOR0lORV9CVVNZICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRE1BX05PVElGWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOjIwIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRE1BX05PVElGWV9JRExFICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRE1BX05PVElGWV9CVVNZICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRE1BX0JVRkZFUl9OT1RJRlkgICAgICAgICAgICAgICAgICAgIDIxOjIxIC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRE1BX0JVRkZFUl9OT1RJRllfSURMRSAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRE1BX0JVRkZFUl9OT1RJRllfQlVTWSAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRDNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRDNEX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfRDNEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfQ0FDSEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1OjI1IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfQ0FDSEVfSURMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfQ0FDSEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfTElHSFRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OjI2IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfTElHSFRJTkdfSURMRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfTElHSFRJTkdfQlVTWSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUFJFUk9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3OjI3IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUFJFUk9QX0lETEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUFJFUk9QX0JVU1kgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUk9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OjI4IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUk9QX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUk9QX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9VU0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5OjI5IC8qIFItSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9VU0VSX0lETEUgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFUVVNfUE9SVF9VU0VSX0JVU1kgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9UUkFQUEVEX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzA0IC8qIFItLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9UUkFQUEVEX0FERFJfTVRIRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjoyIC8qIFItWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9UUkFQUEVEX0FERFJfU1VCQ0ggICAgICAgICAgICAgICAgICAgICAgICAgIDE1OjEzIC8qIFItWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9UUkFQUEVEX0FERFJfQ0hJRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3OjI0IC8qIFItWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9UUkFQUEVEX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzA4IC8qIFItLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9UUkFQUEVEX0RBVEFfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzBDIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVVJGQUNFX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVVJGQUNFX1RZUEVfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVVJGQUNFX1RZUEVfTk9OX1NXSVpaTEUgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVVJGQUNFX1RZUEVfU1dJWlpMRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzE0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfQlVGRkVSX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfQlVGRkVSX1JFUV9OT1RfUEVORElORyAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfQlVGRkVSX1JFUV9QRU5ESU5HICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfQlVGRkVSX1NUWUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfQlVGRkVSX1NUWUxFX1dSSVRFX09OTFkgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfQlVGRkVSX1NUWUxFX1dSSVRFX1RIRU5fQVdBS0VOICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfUkVRX05PVF9QRU5ESU5HICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfUkVRX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfU1RZTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOjIwIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfU1RZTEVfV1JJVEVfT05MWSAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9OT1RJRllfU1RZTEVfV1JJVEVfVEhFTl9BV0FLRU4gICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUKGkpICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDA2NDArKGkpKjQpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUX19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUX0xJTkFEUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUX0xJTkFEUlNfMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjQwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMF9fQUxJQVNfMSAgICAgICAgICAgIE5WX1BHUkFQSF9CT0ZGU0VUKDApIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMF9MSU5BRFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMF9MSU5BRFJTXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjQ0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMV9fQUxJQVNfMSAgICAgICAgICAgIE5WX1BHUkFQSF9CT0ZGU0VUKDEpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMV9MSU5BRFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMV9MSU5BRFJTXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjQ4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMl9fQUxJQVNfMSAgICAgICAgICAgIE5WX1BHUkFQSF9CT0ZGU0VUKDIpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMl9MSU5BRFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMl9MSU5BRFJTXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjRDIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUM19fQUxJQVNfMSAgICAgICAgICAgIE5WX1BHUkFQSF9CT0ZGU0VUKDMpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUM19MSU5BRFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUM19MSU5BRFJTXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjUwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUNF9fQUxJQVNfMSAgICAgICAgICAgIE5WX1BHUkFQSF9CT0ZGU0VUKDQpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUNF9MSU5BRFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUNF9MSU5BRFJTXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjU0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUNV9fQUxJQVNfMSAgICAgICAgICAgIE5WX1BHUkFQSF9CT0ZGU0VUKDUpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUNV9MSU5BRFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CT0ZGU0VUNV9MSU5BRFJTXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRShpKSAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDA2NTgrKGkpKjQpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRV9fU0laRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRV9MSU5BRFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRV9MSU5BRFJTXzAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjU4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTBfX0FMSUFTXzEgICAgICAgICAgICAgICAgTlZfUEdSQVBIX0JCQVNFKDApIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTBfTElOQURSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTBfTElOQURSU18wICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjVjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTFfX0FMSUFTXzEgICAgICAgICAgICAgICAgTlZfUEdSQVBIX0JCQVNFKDEpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTFfTElOQURSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTFfTElOQURSU18wICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjYwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTJfX0FMSUFTXzEgICAgICAgICAgICAgICAgTlZfUEdSQVBIX0JCQVNFKDIpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTJfTElOQURSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTJfTElOQURSU18wICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjY0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTNfX0FMSUFTXzEgICAgICAgICAgICAgICAgTlZfUEdSQVBIX0JCQVNFKDMpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTNfTElOQURSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTNfTElOQURSU18wICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjY4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTRfX0FMSUFTXzEgICAgICAgICAgICAgICAgTlZfUEdSQVBIX0JCQVNFKDQpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTRfTElOQURSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTRfTElOQURSU18wICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjZDIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTVfX0FMSUFTXzEgICAgICAgICAgICAgICAgTlZfUEdSQVBIX0JCQVNFKDUpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTVfTElOQURSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CQkFTRTVfTElOQURSU18wICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0goaSkgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDA2NzArKGkpKjQpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0hfX1NJWkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0hfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0hfVkFMVUVfMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjcwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gwX19BTElBU18xICAgICAgICAgICAgICBOVl9QR1JBUEhfQlBJVENIKDApIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gwX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gwX1ZBTFVFXzAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjc0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gxX19BTElBU18xICAgICAgICAgICAgICBOVl9QR1JBUEhfQlBJVENIKDEpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gxX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gxX1ZBTFVFXzAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjc4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gyX19BTElBU18xICAgICAgICAgICAgICBOVl9QR1JBUEhfQlBJVENIKDIpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gyX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gyX1ZBTFVFXzAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjdDIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gzX19BTElBU18xICAgICAgICAgICAgICBOVl9QR1JBUEhfQlBJVENIKDMpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gzX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0gzX1ZBTFVFXzAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0g0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjgwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0g0X19BTElBU18xICAgICAgICAgICAgICBOVl9QR1JBUEhfQlBJVENIKDQpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0g0X1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjowIC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElUQ0g0X1ZBTFVFXzAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQoaSkgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDA2ODQrKGkpKjQpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVRfX1NJWkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVRfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVRfVFlQRV9JTl9NRU1PUlkgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVRfVFlQRV9OVUxMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjg0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQwX19BTElBU18xICAgICAgICAgICAgICBOVl9QR1JBUEhfQkxJTUlUKDApIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQwX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQwX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQwX1RZUEVfSU5fTUVNT1JZICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQwX1RZUEVfTlVMTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjg4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQxX19BTElBU18xICAgICAgICAgICAgICBOVl9QR1JBUEhfQkxJTUlUKDEpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQxX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQxX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQxX1RZUEVfSU5fTUVNT1JZICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQxX1RZUEVfTlVMTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjhjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQyX19BTElBU18xICAgICAgICAgICAgICBOVl9QR1JBUEhfQkxJTUlUKDIpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQyX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQyX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQyX1RZUEVfSU5fTUVNT1JZICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQyX1RZUEVfTlVMTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjkwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQzX19BTElBU18xICAgICAgICAgICAgICBOVl9QR1JBUEhfQkxJTUlUKDMpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQzX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQzX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQzX1RZUEVfSU5fTUVNT1JZICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQzX1RZUEVfTlVMTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjk0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ0X19BTElBU18xICAgICAgICAgICAgICBOVl9QR1JBUEhfQkxJTUlUKDQpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ0X1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ0X1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ0X1RZUEVfSU5fTUVNT1JZICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ0X1RZUEVfTlVMTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjk4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ1X19BTElBU18xICAgICAgICAgICAgICBOVl9QR1JBUEhfQkxJTUlUKDUpIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ1X1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ1X1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ1X1RZUEVfSU5fTUVNT1JZICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTElNSVQ1X1RZUEVfTlVMTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CU1dJWlpMRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjljIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CU1dJWlpMRTJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5OjE2IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CU1dJWlpMRTJfV0lEVEhfMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CU1dJWlpMRTJfSEVJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3OjI0IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CU1dJWlpMRTJfSEVJR0hUXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CU1dJWlpMRTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNmEwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CU1dJWlpMRTVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5OjE2IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CU1dJWlpMRTVfV0lEVEhfMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CU1dJWlpMRTVfSEVJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3OjI0IC8qIFJXSVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CU1dJWlpMRTVfSEVJR0hUXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzI0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX0lOVkFMSUQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1k4ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1gxUjVHNUI1X1oxUjVHNUI1ICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1gxUjVHNUI1X08xUjVHNUI1ICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX0ExUjVHNUI1ICAgICAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1I1RzZCNSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1kxNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1g4UjhHOEI4X1o4UjhHOEI4ICAgICAgICAweDAwMDAwMDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1g4UjhHOEI4X08xWjdSOEc4QjggICAgICAweDAwMDAwMDA4IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1gxQTdSOEc4QjhfWjFBN1I4RzhCOCAgICAweDAwMDAwMDA5IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1gxQTdSOEc4QjhfTzFBN1I4RzhCOCAgICAweDAwMDAwMDBhIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1g4UjhHOEI4X084UjhHOEI4ICAgICAgICAweDAwMDAwMDBiIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX0E4UjhHOEI4ICAgICAgICAgICAgICAgICAweDAwMDAwMDBjIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1kzMiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBkIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1Y4WUI4VThZQTggICAgICAgICAgICAgICAweDAwMDAwMDBlIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgwX1lCOFY4WUE4VTggICAgICAgICAgICAgICAweDAwMDAwMDBmIC8qIFJXLS1WICovIAotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6NCAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9JTlZBTElEICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9ZOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9YMVI1RzVCNV9aMVI1RzVCNSAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9YMVI1RzVCNV9PMVI1RzVCNSAgICAgICAgMHgwMDAwMDAwMyAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9BMVI1RzVCNSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9SNUc2QjUgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9ZMTYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9YOFI4RzhCOF9aOFI4RzhCOCAgICAgICAgMHgwMDAwMDAwNyAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9YOFI4RzhCOF9PMVo3UjhHOEI4ICAgICAgMHgwMDAwMDAwOCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9YMUE3UjhHOEI4X1oxQTdSOEc4QjggICAgMHgwMDAwMDAwOSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9YMUE3UjhHOEI4X08xQTdSOEc4QjggICAgMHgwMDAwMDAwYSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9YOFI4RzhCOF9POFI4RzhCOCAgICAgICAgMHgwMDAwMDAwYiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9BOFI4RzhCOCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYyAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9ZMzIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9WOFlCOFU4WUE4ICAgICAgICAgICAgICAgMHgwMDAwMDAwZSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRIMV9ZQjhWOFlBOFU4ICAgICAgICAgICAgICAgMHgwMDAwMDAwZiAvKiBSVy0tViAqLyAKLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOjggLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfSU5WQUxJRCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfWTggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfWDFSNUc1QjVfWjFSNUc1QjUgICAgICAgIDB4MDAwMDAwMDIgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfWDFSNUc1QjVfTzFSNUc1QjUgICAgICAgIDB4MDAwMDAwMDMgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfQTFSNUc1QjUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfUjVHNkI1ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfWTE2ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfWDhSOEc4QjhfWjhSOEc4QjggICAgICAgIDB4MDAwMDAwMDcgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfWDhSOEc4QjhfTzFaN1I4RzhCOCAgICAgIDB4MDAwMDAwMDggLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfWDFBN1I4RzhCOF9aMUE3UjhHOEI4ICAgIDB4MDAwMDAwMDkgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfWDFBN1I4RzhCOF9PMUE3UjhHOEI4ICAgIDB4MDAwMDAwMGEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfWDhSOEc4QjhfTzhSOEc4QjggICAgICAgIDB4MDAwMDAwMGIgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfQThSOEc4QjggICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfWTMyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGQgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfVjhZQjhVOFlBOCAgICAgICAgICAgICAgIDB4MDAwMDAwMGUgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDJfWUI4VjhZQThVOCAgICAgICAgICAgICAgIDB4MDAwMDAwMGYgLyogUlctLVYgKi8gCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX0lOVkFMSUQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1k4ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1gxUjVHNUI1X1oxUjVHNUI1ICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1gxUjVHNUI1X08xUjVHNUI1ICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX0ExUjVHNUI1ICAgICAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1I1RzZCNSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1kxNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1g4UjhHOEI4X1o4UjhHOEI4ICAgICAgICAweDAwMDAwMDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1g4UjhHOEI4X08xWjdSOEc4QjggICAgICAweDAwMDAwMDA4IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1gxQTdSOEc4QjhfWjFBN1I4RzhCOCAgICAweDAwMDAwMDA5IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1gxQTdSOEc4QjhfTzFBN1I4RzhCOCAgICAweDAwMDAwMDBhIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1g4UjhHOEI4X084UjhHOEI4ICAgICAgICAweDAwMDAwMDBiIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX0E4UjhHOEI4ICAgICAgICAgICAgICAgICAweDAwMDAwMDBjIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1kzMiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBkIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1Y4WUI4VThZQTggICAgICAgICAgICAgICAweDAwMDAwMDBlIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CUElYRUxfREVQVEgzX1lCOFY4WUE4VTggICAgICAgICAgICAgICAweDAwMDAwMDBmIC8qIFJXLS1WICovIAotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOToxNiAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9JTlZBTElEICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9ZOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9YMVI1RzVCNV9aMVI1RzVCNSAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9YMVI1RzVCNV9PMVI1RzVCNSAgICAgICAgMHgwMDAwMDAwMyAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9BMVI1RzVCNSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9SNUc2QjUgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9ZMTYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9YOFI4RzhCOF9aOFI4RzhCOCAgICAgICAgMHgwMDAwMDAwNyAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9YOFI4RzhCOF9PMVo3UjhHOEI4ICAgICAgMHgwMDAwMDAwOCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9YMUE3UjhHOEI4X1oxQTdSOEc4QjggICAgMHgwMDAwMDAwOSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9YMUE3UjhHOEI4X08xQTdSOEc4QjggICAgMHgwMDAwMDAwYSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9YOFI4RzhCOF9POFI4RzhCOCAgICAgICAgMHgwMDAwMDAwYiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9BOFI4RzhCOCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYyAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9ZMzIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9WOFlCOFU4WUE4ICAgICAgICAgICAgICAgMHgwMDAwMDAwZSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQlBJWEVMX0RFUFRINF9ZQjhWOFlBOFU4ICAgICAgICAgICAgICAgMHgwMDAwMDAwZiAvKiBSVy0tViAqLyAKLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM6MjAgLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfSU5WQUxJRCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfWTggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfWDFSNUc1QjVfWjFSNUc1QjUgICAgICAgIDB4MDAwMDAwMDIgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfWDFSNUc1QjVfTzFSNUc1QjUgICAgICAgIDB4MDAwMDAwMDMgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfQTFSNUc1QjUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfUjVHNkI1ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfWTE2ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfWDhSOEc4QjhfWjhSOEc4QjggICAgICAgIDB4MDAwMDAwMDcgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfWDhSOEc4QjhfTzFaN1I4RzhCOCAgICAgIDB4MDAwMDAwMDggLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfWDFBN1I4RzhCOF9aMUE3UjhHOEI4ICAgIDB4MDAwMDAwMDkgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfWDFBN1I4RzhCOF9PMUE3UjhHOEI4ICAgIDB4MDAwMDAwMGEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfWDhSOEc4QjhfTzhSOEc4QjggICAgICAgIDB4MDAwMDAwMGIgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfQThSOEc4QjggICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfWTMyICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGQgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfVjhZQjhVOFlBOCAgICAgICAgICAgICAgIDB4MDAwMDAwMGUgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEdSQVBIX0JQSVhFTF9ERVBUSDVfWUI4VjhZQThVOCAgICAgICAgICAgICAgIDB4MDAwMDAwMGYgLyogUlctLVYgKi8gCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjEwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWF9BRFJTICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWF9BRFJTXzAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWF9CTElUICAgICAgICAgICAgICAgICAgICAgICAgIDI5OjI5IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWF9CTElUX05PX1ZJT0wgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWF9CTElUX1ZJT0wgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWF9MSU1JVCAgICAgICAgICAgICAgICAgICAgICAgIDMwOjMwIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWF9MSU1JVF9OT19WSU9MICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWF9MSU1JVF9WSU9MICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWF9PVlJGTFcgICAgICAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWF9PVlJGTFdfTk9fVklPTCAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1BJWF9PVlJGTFdfVklPTCAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1ogICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjE0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1pfQURSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1pfQURSU18wICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1pfTElNSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDMwOjMwIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1pfTElNSVRfTk9fVklPTCAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1pfTElNSVRfVklPTCAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1pfT1ZSRkxXICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjMxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1pfT1ZSRkxXX05PX1ZJT0wgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9MSU1JVF9WSU9MX1pfT1ZSRkxXX1ZJT0wgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzEwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfMF9JTlZBTElEICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfMF9WQUxJRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMToxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfMV9JTlZBTElEICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfMV9WQUxJRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjoyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfMl9JTlZBTElEICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfMl9WQUxJRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzozIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfM19JTlZBTElEICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfM19WQUxJRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfNF9JTlZBTElEICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfNF9WQUxJRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTo1IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfNV9JTlZBTElEICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9CVUZGRVJfNV9WQUxJRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8wX0lOVkFMSUQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8wX1ZBTElEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTo5IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8xX0lOVkFMSUQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8xX1ZBTElEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOjEwIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8yX0lOVkFMSUQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8yX1ZBTElEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOjExIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8zX0lOVkFMSUQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF8zX1ZBTElEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOjEyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF80X0lOVkFMSUQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QSVRDSF80X1ZBTElEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DSFJPTUFfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DSFJPTUFfQ09MT1JfSU5WQUxJRCAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DSFJPTUFfQ09MT1JfVkFMSUQgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DSFJPTUFfQ09MT1JGTVQgICAgICAgICAgICAgICAgICAgICAgIDE3OjE3IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DSFJPTUFfQ09MT1JGTVRfSU5WQUxJRCAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DSFJPTUFfQ09MT1JGTVRfVkFMSUQgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DUEFUVEVSTl9DT0xPUkZNVCAgICAgICAgICAgICAgICAgICAgIDIwOjIwIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DUEFUVEVSTl9DT0xPUkZNVF9JTlZBTElEICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DUEFUVEVSTl9DT0xPUkZNVF9WQUxJRCAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DUEFUVEVSTl9NT05PRk1UICAgICAgICAgICAgICAgICAgICAgIDIxOjIxIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DUEFUVEVSTl9NT05PRk1UX0lOVkFMSUQgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DUEFUVEVSTl9NT05PRk1UX1ZBTElEICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DUEFUVEVSTl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgIDIyOjIyIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DUEFUVEVSTl9TRUxFQ1RfSU5WQUxJRCAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9DUEFUVEVSTl9TRUxFQ1RfVkFMSUQgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX0NPTE9SMCAgICAgICAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX0NPTE9SMF9JTlZBTElEICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX0NPTE9SMF9WQUxJRCAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX0NPTE9SMSAgICAgICAgICAgICAgICAgICAgICAgIDI1OjI1IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX0NPTE9SMV9JTlZBTElEICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX0NPTE9SMV9WQUxJRCAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX1BBVFQwICAgICAgICAgICAgICAgICAgICAgICAgIDI2OjI2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX1BBVFQwX0lOVkFMSUQgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX1BBVFQwX1ZBTElEICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX1BBVFQxICAgICAgICAgICAgICAgICAgICAgICAgIDI3OjI3IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX1BBVFQxX0lOVkFMSUQgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVEFURV9QQVRURVJOX1BBVFQxX1ZBTElEICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzI4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9JTkRFWF9CQU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjoyIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9JTkRFWF9CQU5LXzEwICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9JTkRFWF9CQU5LXzMyICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9JTkRFWF9BRFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjozIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9JTkRFWF9BRFJTXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9JTkRFWF9BRFJTXzEwMjQgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9JTkRFWF9PUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OjEzIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9JTkRFWF9PUF9XUl9DQUNIRSAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9JTkRFWF9PUF9SRF9DQUNIRSAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9JTkRFWF9PUF9SRF9JTkRFWCAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9SQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzJjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DQUNIRV9SQU1fVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9ETUFfUElUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzYwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9ETUFfUElUQ0hfUzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTowIC8qIFJXWFNGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9ETUFfUElUQ0hfUzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOjE2IC8qIFJXWFNGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EVkRfQ09MT1JGTVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzY0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EVkRfQ09MT1JGTVRfSU1BR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTowIC8qIFJXTlZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EVkRfQ09MT1JGTVRfSU1BR0VfRk9STUFUX0lOVkFMSUQgICAgICAgICAgICAweDAwIC8qIFJXTi1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EVkRfQ09MT1JGTVRfSU1BR0VfRk9STUFUX0xFX1Y4WUI4VThZQTggICAgICAweDEyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EVkRfQ09MT1JGTVRfSU1BR0VfRk9STUFUX0xFX1lCOFY4WUE4VTggICAgICAweDEzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EVkRfQ09MT1JGTVRfT1ZMWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTo4IC8qIFJXTlZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EVkRfQ09MT1JGTVRfT1ZMWV9GT1JNQVRfSU5WQUxJRCAgICAgICAgICAgICAweDAwIC8qIFJXTi1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EVkRfQ09MT1JGTVRfT1ZMWV9GT1JNQVRfTEVfQThZOFU4VjggICAgICAgICAweDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EVkRfQ09MT1JGTVRfT1ZMWV9GT1JNQVRfTEVfQTRWNllCNkE0VTZZQTYgICAweDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EVkRfQ09MT1JGTVRfT1ZMWV9GT1JNQVRfVFJBTlNQQVJFTlQgICAgICAgICAweDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TQ0FMRURfRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNzY4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TQ0FMRURfRk9STUFUX09SSUdJTiAgICAgICAgICAgICAgICAgICAgICAgIDE3OjE2IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TQ0FMRURfRk9STUFUX09SSUdJTl9JTlZBTElEICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TQ0FMRURfRk9STUFUX09SSUdJTl9DRU5URVIgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TQ0FMRURfRk9STUFUX09SSUdJTl9DT1JORVIgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TQ0FMRURfRk9STUFUX0lOVEVSUE9MQVRPUiAgICAgICAgICAgICAgICAgIDI0OjI0IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TQ0FMRURfRk9STUFUX0lOVEVSUE9MQVRPUl9aT0ggICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TQ0FMRURfRk9STUFUX0lOVEVSUE9MQVRPUl9GT0ggICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRUX0NPTE9SMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRUX0NPTE9SMF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRUX0NPTE9SMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODA0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRUX0NPTE9SMV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRUX0NPTE9SUkFNKGkpICAgICAgICAgICAgICAgKDB4MDA0MDA5MDArKGkpKjQpIC8qIFItLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRUX0NPTE9SUkFNX19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgIDY0IC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRUX0NPTE9SUkFNX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFItLVVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRURVJOKGkpICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDA4MDgrKGkpKjQpIC8qIFJXLTRBICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRURVJOX19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRURVJOX0JJVE1BUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRURVJOX1NIQVBFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODEwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRURVJOX1NIQVBFX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRURVJOX1NIQVBFX1ZBTFVFXzhYXzhZICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRURVJOX1NIQVBFX1ZBTFVFXzY0WF8xWSAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRURVJOX1NIQVBFX1ZBTFVFXzFYXzY0WSAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRURVJOX1NIQVBFX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRURVJOX1NIQVBFX1NFTEVDVF8yQ09MT1IgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9QQVRURVJOX1NIQVBFX1NFTEVDVF9GVUxMQ09MT1IgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9NT05PX0NPTE9SMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjAwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9NT05PX0NPTE9SMF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9ST1AzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjA0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9ST1AzX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DSFJPTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODE0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DSFJPTUFfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CRVRBX0FORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjA4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CRVRBX0FORF9WQUxVRV9GUkFDVElPTiAgICAgICAgICAgICAgICAgICAgIDMwOjIzIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CRVRBX1BSRU1VTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjBjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CRVRBX1BSRU1VTFRfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFVGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DT05UUk9MMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODE4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DT05UUk9MMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODFjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9DT05UUk9MMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODIwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9CTEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODI0IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODI4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWF9BRFJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjowIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWF9BRFJTXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDo4IC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWF9TRUxFQ1RfQURSU18wICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWF9TRUxFQ1RfQURSU18xICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWF9TRUxFQ1RfREFUQV8wICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWF9TRUxFQ1RfREFUQV8xICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWF9TRUxFQ1RfV0VfMCAgICAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWF9TRUxFQ1RfV0VfMSAgICAgICAgICAgICAgICAweDAwMDAwMDA1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWF9TRUxFQ1RfQUxQSEFfMCAgICAgICAgICAgICAweDAwMDAwMDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9JTkRFWF9TRUxFQ1RfQUxQSEFfMSAgICAgICAgICAgICAweDAwMDAwMDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODJjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9EQVRBX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BRFJTXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODJjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BRFJTXzBfX0FMSUFTXzEgICAgICAgIE5WX1BHUkFQSF9EUFJBTV9EQVRBIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BRFJTXzBfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BRFJTXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODJjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BRFJTXzFfX0FMSUFTXzEgICAgICAgIE5WX1BHUkFQSF9EUFJBTV9EQVRBIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BRFJTXzFfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9EQVRBXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODJjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9EQVRBXzBfX0FMSUFTXzEgICAgICAgIE5WX1BHUkFQSF9EUFJBTV9EQVRBIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9EQVRBXzBfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9EQVRBXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODJjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9EQVRBXzFfX0FMSUFTXzEgICAgICAgIE5WX1BHUkFQSF9EUFJBTV9EQVRBIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9EQVRBXzFfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9XRV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODJjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9XRV8wX19BTElBU18xICAgICAgICAgIE5WX1BHUkFQSF9EUFJBTV9EQVRBIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9XRV8wX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9XRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODJjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9XRV8xX19BTElBU18xICAgICAgICAgIE5WX1BHUkFQSF9EUFJBTV9EQVRBIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9XRV8xX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BTFBIQV8wICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODJjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BTFBIQV8wX19BTElBU18xICAgICAgIE5WX1BHUkFQSF9EUFJBTV9EQVRBIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BTFBIQV8wX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BTFBIQV8xICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODJjIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BTFBIQV8xX19BTElBU18xICAgICAgIE5WX1BHUkFQSF9EUFJBTV9EQVRBIC8qICAgICAgICovCi0jZGVmaW5lIE5WX1BHUkFQSF9EUFJBTV9BTFBIQV8xX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAzMTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVE9SRURfRk1UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODMwIC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVE9SRURfRk1UX01PTk8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTowIC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVE9SRURfRk1UX1BBVFQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzo4IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVE9SRURfRk1UX1BBVFQxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOjE2IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9TVE9SRURfRk1UX0NIUk9NQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5OjI0IC8qIFJXWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwNjE4IC8qIFJXLTRSICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1JPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjowIC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1JPUF9ZOCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1JPUF9SR0IxNSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1JPUF9SR0IxNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1JPUF9ZMTYgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1JPUF9JTlZBTElEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1JPUF9SR0IyNCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1IC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1JPUF9SR0IzMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2IC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1JPUF9ZMzIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3IC8qIC1XLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTo0IC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19JTlZBTElEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9ZOCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9YMTZBOFk4ICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9YMjRZOCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9BMVI1RzVCNSAgICAgICAgICAgICAgICAweDAwMDAwMDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9YMVI1RzVCNSAgICAgICAgICAgICAgICAweDAwMDAwMDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9YMTZBMVI1RzVCNSAgICAgICAgICAgICAweDAwMDAwMDA4IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9YMTdSNUc1QjUgICAgICAgICAgICAgICAweDAwMDAwMDA5IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9SNUc2QjUgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9BMTZSNUc2QjUgICAgICAgICAgICAgICAweDAwMDAwMDBCIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9YMTZSNUc2QjUgICAgICAgICAgICAgICAweDAwMDAwMDBDIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9BOFI4RzhCOCAgICAgICAgICAgICAgICAweDAwMDAwMDBEIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9YOFI4RzhCOCAgICAgICAgICAgICAgICAweDAwMDAwMDBFIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9ZMTYgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9BMTZZMTYgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9YMTZZMTYgICAgICAgICAgICAgICAgICAweDAwMDAwMDExIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9WOFlCOFU4WUE4ICAgICAgICAgICAgICAweDAwMDAwMDEyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9ZQjhWOFlBOFU4ICAgICAgICAgICAgICAweDAwMDAwMDEzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX1NSQ19MRV9ZMzIgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OjEyIC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1k4ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1gxUjVHNUI1X1oxUjVHNUI1ICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1gxUjVHNUI1X08xUjVHNUI1ICAgICAgICAgICAweDAwMDAwMDAzIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX0ExUjVHNUI1ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1I1RzZCNSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1kxNiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1g4UjhHOEI4X1o4UjhHOEI4ICAgICAgICAgICAweDAwMDAwMDA3IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1g4UjhHOEI4X08xWjdSOEc4QjggICAgICAgICAweDAwMDAwMDA4IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1gxQTdSOEc4QjhfWjFBN1I4RzhCOCAgICAgICAweDAwMDAwMDA5IC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1gxQTdSOEc4QjhfTzFBN1I4RzhCOCAgICAgICAweDAwMDAwMDBhIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1g4UjhHOEI4X084UjhHOEI4ICAgICAgICAgICAweDAwMDAwMDBiIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX0E4UjhHOEI4ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1kzMiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBkIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1Y4WUI4VThZQTggICAgICAgICAgICAgICAgICAweDAwMDAwMDBlIC8qIFJXLS1WICovCi0jZGVmaW5lIE5WX1BHUkFQSF9GT1JNQVRTX0ZCX1lCOFY4WUE4VTggICAgICAgICAgICAgICAgICAweDAwMDAwMDBmIC8qIFJXLS1WICovIAotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1hfUkFNKGkpICAgICAgICAgICAgICAgICAgICgweDAwNDAwNDAwKyhpKSo0KSAvKiBSVy00QSAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1hfUkFNX19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiAvKiAgICAgICAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1hfUkFNX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9SQU1fQlBPUlQoaSkgICAgICAgICAgICAgICAgICgweDAwNDAwYzAwKyhpKSo0KSAvKiBSLS00QSAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9SQU1fQlBPUlRfX1NJWkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiAvKiAgICAgICAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9SQU1fQlBPUlRfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSLS1VRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1lfUkFNKGkpICAgICAgICAgICAgICAgICAgICgweDAwNDAwNDgwKyhpKSo0KSAvKiBSVy00QSAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1lfUkFNX19TSVpFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiAvKiAgICAgICAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1lfUkFNX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9SQU1fQlBPUlQoaSkgICAgICAgICAgICAgICAgICgweDAwNDAwYzgwKyhpKSo0KSAvKiBSLS00QSAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9SQU1fQlBPUlRfX1NJWkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiAvKiAgICAgICAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9SQU1fQlBPUlRfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSLS1VRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUxNCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzBfQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgMTc6MCAvKiBSV0JVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzBfQ09VTlRFUl8wICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ItViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzBfRElNRU5TSU9OICAgICAgICAgICAgICAgICAgICAyMDoyMCAvKiBSV1ZWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzBfRElNRU5TSU9OX05PTlpFUk8gICAgICAgMHgwMDAwMDAwMCAvKiBSV1YtViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzBfRElNRU5TSU9OX1pFUk8gICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzBfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAzMToyOCAvKiBSV0JVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzBfSU5ERVhfMCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ItViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUxOCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfSU5JVElBTCAgICAgICAgICAgICAgICAgICAgICAgIDA6MCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfSU5JVElBTF9ORUVERUQgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfSU5JVElBTF9ET05FICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfWFRSQUNMSVBYICAgICAgICAgICAgICAgICAgICAgIDQ6NCAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfWFRSQUNMSVBYX05PVE5VTEwgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfWFRSQUNMSVBYX05VTEwgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfWFRSQUNMSVBZICAgICAgICAgICAgICAgICAgICAgIDU6NSAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfWFRSQUNMSVBZX05PVE5VTEwgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfWFRSQUNMSVBZX05VTEwgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfU0VMX1hJTUFYICAgICAgICAgICAgICAgICAgICAxMjoxMiAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfU0VMX1hJTUFYX1VVTUFYICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfU0VMX1hJTUFYX0lNQUdFTUFYICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfU0VMX1lJTUFYICAgICAgICAgICAgICAgICAgICAxNjoxNiAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfU0VMX1lJTUFYX1VVTUFYICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfU0VMX1lJTUFYX0lNQUdFTUFYICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfU0VMX1hYVFJBICAgICAgICAgICAgICAgICAgICAyMDoyMCAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfU0VMX1hYVFJBX0NMSVBNQVggICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzFfU0VMX1hYVFJBX0lNQUdFTUFYICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUxQyAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfSEFORE9GRiAgICAgICAgICAgICAgICAgICAgICAgIDA6MCAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfSEFORE9GRl9ESVNBQkxFICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfSEFORE9GRl9FTkFCTEUgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfWFRSQUNMSVBYICAgICAgICAgICAgICAgICAgICAgIDQ6NCAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfWFRSQUNMSVBYX05PVE5VTEwgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfWFRSQUNMSVBYX05VTEwgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfWFRSQUNMSVBZICAgICAgICAgICAgICAgICAgICAgIDU6NSAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfWFRSQUNMSVBZX05PVE5VTEwgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfWFRSQUNMSVBZX05VTEwgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfU0VMX1hJTUFYICAgICAgICAgICAgICAgICAgICAxMjoxMiAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfU0VMX1hJTUFYX1VDTUFYICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfU0VMX1hJTUFYX0lNQUdFTUFYICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfU0VMX1lJTUFYICAgICAgICAgICAgICAgICAgICAxNjoxNiAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfU0VMX1lJTUFYX1VDTUFYICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfU0VMX1lJTUFYX0lNQUdFTUFYICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfU0VMX1hYVFJBICAgICAgICAgICAgICAgICAgICAyMDoyMCAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfU0VMX1hYVFJBX0NMSVBNQVggICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzJfU0VMX1hYVFJBX0lNQUdFTUFYICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUyMCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfV0RJTVlfRVFfMCAgICAgICAgICAgICAgICAgICAgIDA6MCAvKiBSV1hWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfV0RJTVlfRVFfMF9OVUxMICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfV0RJTVlfRVFfMF9UUlVFICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfUkVMT0FEX1dESU1ZICAgICAgICAgICAgICAgICAgIDQ6NCAvKiBSV1hWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfUkVMT0FEX1dESU1ZX05VTEwgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfUkVMT0FEX1dESU1ZX1RSVUUgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfUkVMT0FEX1dYICAgICAgICAgICAgICAgICAgICAgIDg6OCAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfUkVMT0FEX1dYX05VTEwgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfUkVMT0FEX1dYX1RSVUUgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfVEVYVF9BTEcgICAgICAgICAgICAgICAgICAgICAxMjoxMiAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfVEVYVF9BTEdfTlVMTCAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfVEVYVF9BTEdfVFJVRSAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfVEVYVF9ESU1YICAgICAgICAgICAgICAgICAgICAyMjoxNiAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfVEVYVF9ESU1YXzAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfVEVYVF9XRElNWCAgICAgICAgICAgICAgICAgICAzMDoyNCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWFlfTE9HSUNfTUlTQzNfVEVYVF9XRElNWF8wICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUwMCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0JJVDMzXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6MCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0JJVDMzXzBfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0JJVDMzXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6MSAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0JJVDMzXzFfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0JJVDMzXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI6MiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0JJVDMzXzJfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0JJVDMzXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6MyAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0JJVDMzXzNfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX1JBTkdFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ6NCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX1JBTkdFXzBfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX1JBTkdFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6NSAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX1JBTkdFXzFfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX1JBTkdFXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY6NiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX1JBTkdFXzJfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX1JBTkdFXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6NyAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX1JBTkdFXzNfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0FEREVSX09VVFBVVCAgICAgICAgICAgICAgICAgICAgICAgICAyOToyOCAvKiBSV1hWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0FEREVSX09VVFBVVF9FUV8wICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0FEREVSX09VVFBVVF9MVF8wICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWF9NSVNDX0FEREVSX09VVFBVVF9HVF8wICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUwNCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0JJVDMzXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6MCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0JJVDMzXzBfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0JJVDMzXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6MSAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0JJVDMzXzFfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0JJVDMzXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI6MiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0JJVDMzXzJfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0JJVDMzXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6MyAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0JJVDMzXzNfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX1JBTkdFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ6NCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX1JBTkdFXzBfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX1JBTkdFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6NSAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX1JBTkdFXzFfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX1JBTkdFXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY6NiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX1JBTkdFXzJfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX1JBTkdFXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6NyAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX1JBTkdFXzNfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0FEREVSX09VVFBVVCAgICAgICAgICAgICAgICAgICAgICAgICAyOToyOCAvKiBSV1hWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0FEREVSX09VVFBVVF9FUV8wICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0FEREVSX09VVFBVVF9MVF8wICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfWV9NSVNDX0FEREVSX09VVFBVVF9HVF8wICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQX1hNSU4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUzQyAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQX1hNSU5fVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgMTU6MCAvKiBSV1hTRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQX1hNQVggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU0NCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQX1hNQVhfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgMTc6MCAvKiBSV1hTRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQX1lNSU4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU0MCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQX1lNSU5fVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgMTU6MCAvKiBSV1hTRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQX1lNQVggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU0OCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQX1lNQVhfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgMTc6MCAvKiBSV1hTRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQQV9YTUlOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU2MCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQQV9YTUlOX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgMTU6MCAvKiBSV1hTRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQQV9YTUFYICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU2OCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQQV9YTUFYX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgMTc6MCAvKiBSV1hTRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQQV9ZTUlOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU2NCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQQV9ZTUlOX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgMTU6MCAvKiBSV1hTRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQQV9ZTUFYICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU2QyAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX1VDTElQQV9ZTUFYX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgMTc6MCAvKiBSV1hTRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfU09VUkNFX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUwQyAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfU09VUkNFX0NPTE9SX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfU09VUkNFX0NPTE9SX1ZBTFVFXzAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUwOCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX1ZMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6MCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX1ZMRF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODoyOCAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBfTUlOX05PX0VSUk9SICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBfTUlOX09OTFkgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBBX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOToyOSAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBBX01JTl9OT19FUlJPUiAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBBX01JTl9PTkxZICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDozMCAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBfTUFYX05PX0VSUk9SICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBfTUFYX09OTFkgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBBX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTozMSAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBBX01BWF9OT19FUlJPUiAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQxX0NMSVBBX01BWF9PTkxZICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU3OCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQyX1ZMRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjg6MCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfVkFMSUQyX1ZMRDJfMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX0lDTElQX1hNQVggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUzNCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX0lDTElQX1hNQVhfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgMTc6MCAvKiBSV1hTRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX0lDTElQX1lNQVggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUzOCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQUJTX0lDTElQX1lNQVhfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgMTc6MCAvKiBSV1hTRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUyNCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMF9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6MCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMF9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMF9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMF9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6MiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMF9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMF9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMF9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMV9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6NCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMV9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMV9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMV9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMV9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6NiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMV9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMV9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMV9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk6OCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMl9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMl9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMl9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAxMToxMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMl9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMl9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQMl9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQM19NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMzoxMiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQM19NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQM19NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQM19NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQM19NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAxNToxNCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQM19NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQM19NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQM19NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNF9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAxNzoxNiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNF9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNF9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNF9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAxOToxOCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNF9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNF9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNF9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNV9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAyMToyMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNV9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNV9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNV9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNV9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAyMzoyMiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNV9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNV9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNV9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAyNToyNCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNl9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNl9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNl9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAyNzoyNiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNl9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNl9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQNl9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQN19NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAyOToyOCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQN19NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQN19NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQN19NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQN19NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAzMTozMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQN19NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQN19NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMF9DTElQN19NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUyOCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOF9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6MCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOF9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOF9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOF9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6MiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOF9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOF9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOF9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOV9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6NCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOV9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOV9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOV9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOV9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6NiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOV9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOV9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQOV9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTBfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk6OCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTBfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTBfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTBfTUlOX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTBfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAxMToxMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTBfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTBfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTBfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTFfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAxMzoxMiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTFfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTFfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTFNSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTFfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAxNToxNCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTFfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTFfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTFfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAxNzoxNiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTJfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTJfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTJfTUlOX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAxOToxOCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTJfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTJfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTJfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTNfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAyMToyMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTNfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTNfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTNfTUlOX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTNfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAyMzoyMiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTNfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTNfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTNfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTRfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAyNToyNCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTRfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTRfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTRfTUlOX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTRfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAyNzoyNiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTRfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTRfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTRfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTVfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAyOToyOCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTVfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTVfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTVfTUlOX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTVfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAzMTozMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTVfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTVfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFhfMV9DTElQMTVfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUyYyAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMF9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6MCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMF9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMF9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMF9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6MiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMF9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMF9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMF9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMV9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6NCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMV9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMV9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMV9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMV9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6NiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMV9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMV9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMV9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk6OCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMl9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMl9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMl9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAxMToxMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMl9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMl9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQMl9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQM19NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMzoxMiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQM19NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQM19NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQM19NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQM19NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAxNToxNCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQM19NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQM19NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQM19NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNF9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAxNzoxNiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNF9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNF9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNF9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAxOToxOCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNF9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNF9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNF9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNV9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAyMToyMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNV9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNV9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNV9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNV9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAyMzoyMiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNV9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNV9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNV9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNl9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAyNToyNCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNl9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNl9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNl9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNl9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAyNzoyNiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNl9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNl9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQNl9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQN19NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAyOToyOCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQN19NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQN19NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQN19NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQN19NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAzMTozMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQN19NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQN19NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMF9DTElQN19NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUzMCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOF9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6MCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOF9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOF9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOF9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6MiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOF9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOF9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOF9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOV9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6NCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOV9NSU5fR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOV9NSU5fTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOV9NSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOV9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6NiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOV9NQVhfTFQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOV9NQVhfR1QgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQOV9NQVhfRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTBfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk6OCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTBfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTBfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTBfTUlOX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTBfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAxMToxMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTBfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTBfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTBfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTFfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAxMzoxMiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTFfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTFfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTFNSU5fRVEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTFfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAxNToxNCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTFfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTFfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTFfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTJfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAxNzoxNiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTJfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTJfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTJfTUlOX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTJfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAxOToxOCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTJfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTJfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTJfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTNfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAyMToyMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTNfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTNfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTNfTUlOX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTNfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAyMzoyMiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTNfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTNfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTNfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTRfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAyNToyNCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTRfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTRfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTRfTUlOX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTRfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAyNzoyNiAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTRfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTRfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTRfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTVfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAyOToyOCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTVfTUlOX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTVfTUlOX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTVfTUlOX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTVfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAzMTozMCAvKiBSV05WRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTVfTUFYX0xUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTVfTUFYX0dUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSV04tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfQ0xJUFlfMV9DTElQMTVfTUFYX0VRICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfTUlTQzI0XzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDUxMCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfTUlTQzI0XzBfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfTUlTQzI0XzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU3MCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfTUlTQzI0XzFfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfTUlTQzI0XzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU3NCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfTUlTQzI0XzJfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfUEFTU1RIUlVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU3QyAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfUEFTU1RIUlVfMF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfUEFTU1RIUlVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU4MCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfUEFTU1RIUlVfMV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfUEFTU1RIUlVfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDU4NCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfUEFTU1RIUlVfMl9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfVV9SQU0oaSkgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwZDAwKyhpKSo0KSAvKiBSVy00QSAqLwotI2RlZmluZSBOVl9QR1JBUEhfVV9SQU1fX1NJWkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiAvKiAgICAgICAqLwotI2RlZmluZSBOVl9QR1JBUEhfVV9SQU1fVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6NiAvKiBSV1hGRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfVl9SQU0oaSkgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwZDQwKyhpKSo0KSAvKiBSVy00QSAqLwotI2RlZmluZSBOVl9QR1JBUEhfVl9SQU1fX1NJWkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiAvKiAgICAgICAqLwotI2RlZmluZSBOVl9QR1JBUEhfVl9SQU1fVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6NiAvKiBSV1hGRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfTV9SQU0oaSkgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwZDgwKyhpKSo0KSAvKiBSVy00QSAqLwotI2RlZmluZSBOVl9QR1JBUEhfTV9SQU1fX1NJWkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiAvKiAgICAgICAqLwotI2RlZmluZSBOVl9QR1JBUEhfTV9SQU1fVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6NiAvKiBSV1hGRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1NUQVJUXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTAwMCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1NUQVJUXzBfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1NUQVJUXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTAwNCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1NUQVJUXzFfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTAwOCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0xFTkdUSF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX01JU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTAwQyAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX01JU0NfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX01JU0NfRk1UX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODoxNiAvKiBSV1hWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX01JU0NfRk1UX0RTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjoyMCAvKiBSV1hWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0RBVEFfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTAyMCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0RBVEFfMF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0RBVEFfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTAyNCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0RBVEFfMV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTAzMCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNX0FTU0lTVF9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6MCAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNX0FTU0lTVF9BX05PVF9QRU5ESU5HICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSLUktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNX0FTU0lTVF9BX1BFTkRJTkcgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSLS0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNX0FTU0lTVF9BX1JFU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiAtVy0tQyAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNX0FTU0lTVF9CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6MSAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNX0FTU0lTVF9CX05PVF9QRU5ESU5HICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBSLUktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNX0FTU0lTVF9CX1BFTkRJTkcgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSLS0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNX0FTU0lTVF9CX1JFU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiAtVy0tQyAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNX1dSSVRFX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ6NCAvKiBDV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNX1dSSVRFX1JFUV9OT1RfUEVORElORyAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBDV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX1JNX1dSSVRFX1JFUV9QRU5ESU5HICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiAtVy0tVCAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfWExBVEVfSU5TVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA0MCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfWExBVEVfSU5TVF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgMTU6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA0NCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTF9QQUdFX1RBQkxFICAgICAgICAgICAgICAgICAgICAxMjoxMiAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTF9QQUdFX1RBQkxFX05PVF9QUkVTRU5UICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTF9QQUdFX1RBQkxFX1BSRVNFTlQgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTF9QQUdFX0VOVFJZICAgICAgICAgICAgICAgICAgICAxMzoxMyAvKiBSV1hWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTF9QQUdFX0VOVFJZX05PVF9MSU5FQVIgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTF9QQUdFX0VOVFJZX0xJTkVBUiAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTF9UQVJHRVRfTk9ERSAgICAgICAgICAgICAgICAgICAxNzoxNiAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTF9UQVJHRVRfTk9ERV9OVk0gICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTF9UQVJHRVRfTk9ERV9QQ0kgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTF9UQVJHRVRfTk9ERV9BR1AgICAgICAgICAgMHgwMDAwMDAwMyAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQ09OVFJPTF9BREpVU1QgICAgICAgICAgICAgICAgICAgICAgICAzMToyMCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfTElNSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA0OCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfTElNSVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfVExCX1BURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA0QyAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfVExCX1BURV9BQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgIDE6MSAvKiBSV1hWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfVExCX1BURV9BQ0NFU1NfUkVBRF9PTkxZICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfVExCX1BURV9BQ0NFU1NfUkVBRF9XUklURSAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfVExCX1BURV9GUkFNRV9BRERSRVNTICAgICAgICAgICAgICAgICAzMToxMiAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfVExCX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA1MCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfVExCX1RBR19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAzMToxMiAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQURKX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA1NCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfQURKX09GRlNFVF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA1OCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfT0ZGU0VUX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA1QyAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfU0laRV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfWV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA2MCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0FfWV9TSVpFX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfWExBVEVfSU5TVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA4MCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfWExBVEVfSU5TVF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgMTU6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA4NCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTF9QQUdFX1RBQkxFICAgICAgICAgICAgICAgICAgICAxMjoxMiAvKiBSV0lWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTF9QQUdFX1RBQkxFX05PVF9QUkVTRU5UICAgMHgwMDAwMDAwMCAvKiBSV0ktViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTF9QQUdFX1RBQkxFX1BSRVNFTlQgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTF9QQUdFX0VOVFJZICAgICAgICAgICAgICAgICAgICAxMzoxMyAvKiBSV1hWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTF9QQUdFX0VOVFJZX05PVF9MSU5FQVIgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTF9QQUdFX0VOVFJZX0xJTkVBUiAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTF9UQVJHRVRfTk9ERSAgICAgICAgICAgICAgICAgICAxNzoxNiAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTF9UQVJHRVRfTk9ERV9OVk0gICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTF9UQVJHRVRfTk9ERV9QQ0kgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTF9UQVJHRVRfTk9ERV9BR1AgICAgICAgICAgMHgwMDAwMDAwMyAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQ09OVFJPTF9BREpVU1QgICAgICAgICAgICAgICAgICAgICAgICAzMToyMCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfTElNSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA4OCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfTElNSVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfVExCX1BURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA4QyAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfVExCX1BURV9BQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgIDE6MSAvKiBSV1hWRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfVExCX1BURV9BQ0NFU1NfUkVBRF9PTkxZICAgICAgICAgMHgwMDAwMDAwMCAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfVExCX1BURV9BQ0NFU1NfUkVBRF9XUklURSAgICAgICAgMHgwMDAwMDAwMSAvKiBSVy0tViAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfVExCX1BURV9GUkFNRV9BRERSRVNTICAgICAgICAgICAgICAgICAzMToxMiAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfVExCX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA5MCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfVExCX1RBR19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAzMToxMiAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQURKX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA5NCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfQURKX09GRlNFVF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA5OCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfT0ZGU0VUX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTA5QyAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfU0laRV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ6MCAvKiBSV1hVRiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfWV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMTBBMCAvKiBSVy00UiAqLwotI2RlZmluZSBOVl9QR1JBUEhfRE1BX0JfWV9TSVpFX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA6MCAvKiBSV1hVRiAqLwotCi0vKiBGcmFtZWJ1ZmZlciByZWdpc3RlcnMgKi8KLSNkZWZpbmUgTlZfUEZCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwRkZGOjB4MDAxMDAwMDAgLyogUlctLUQgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAgLyogUlctNFIgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fQU1PVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOjAgLyogUlctVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fQU1PVU5UXzMyTUIgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fQU1PVU5UXzRNQiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fQU1PVU5UXzhNQiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fQU1PVU5UXzE2TUIgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fV0lEVEhfMTI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOjIgLyogUlctVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fV0lEVEhfMTI4X09GRiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fV0lEVEhfMTI4X09OICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OjMgLyogUlctVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fVFlQRV8yNTZLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fVFlQRV81MTJLXzJCQU5LICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fVFlQRV81MTJLXzRCQU5LICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0JPT1RfMF9SQU1fVFlQRV8xMDI0S18yQkFOSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDMgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAyMDAgLyogUlctNFIgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OjAgLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RZUEVfT0xEMTAyNF9GSVhFRF84QlBQICAgICAgICAgIDB4MDAwMDAxMjAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RZUEVfT0xEMTAyNF9GSVhFRF8xNkJQUCAgICAgICAgIDB4MDAwMDAyMjAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RZUEVfT0xEMTAyNF9GSVhFRF8zMkJQUCAgICAgICAgIDB4MDAwMDAzMjAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RZUEVfT0xEMTAyNF9WQVJfOEJQUCAgICAgICAgICAgIDB4MDAwMDQxMjAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RZUEVfT0xEMTAyNF9WQVJfMTZCUFAgICAgICAgICAgIDB4MDAwMDQyMjAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RZUEVfT0xEMTAyNF9WQVJfMzJCUFAgICAgICAgICAgIDB4MDAwMDQzMjAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RZUEVfVEVUUklTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RZUEVfTk9USUxJTkcgICAgICAgICAgICAgICAgICAgIDB4MDAwMDExMTQgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6MTUgLyogUldJLUYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19NT0RFX1BBU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19NT0RFXzEgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19NT0RFXzIgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19NT0RFXzMgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19NT0RFXzQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19NT0RFXzUgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19NT0RFXzYgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19NT0RFXzcgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTk6MTggLyogUldJLUYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19TSElGVF8wICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19TSElGVF8xICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RFVFJJU19TSElGVF8yICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX0JBTktfU1dBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6MjAgLyogUldJLUYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX0JBTktfU1dBUF9PRkYgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX0JBTktfU1dBUF8xTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX0JBTktfU1dBUF8yTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX0JBTktfU1dBUF80TSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1VOVVNFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM6MjMgLyogUlctVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1NDUkFNQkxFX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk6MjkgLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1NDUkFNQkxFX0VOX0lOSVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1NDUkFNQkxFX0FDVElWRSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1BSQU1JTl9XUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjg6MjggLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1BSQU1JTl9XUl9JTklUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1BSQU1JTl9XUl9ESVNBQkxFRCAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1BSQU1JTl9XUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMjc6MjQgLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1BSQU1JTl9XUl9NQVNLX0lOSVQgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1BSQU1JTl9XUl9NQVNLX0NMRUFSICAgICAgICAgICAgIDB4MDAwMDAwMGYgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAyMDQgLyogUlctNFIgKi8KLSNkZWZpbmUgTlZfUEZCX1JUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAzMDAgLyogUlctNFIgKi8KLSNkZWZpbmUgTlZfUEZCX1JUTF9IICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOjAgLyogUldJVUYgKi8KLSNkZWZpbmUgTlZfUEZCX1JUTF9IX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX1JUTF9NQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOjEgLyogUldJVUYgKi8KLSNkZWZpbmUgTlZfUEZCX1JUTF9NQ19ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX1JUTF9WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOjIgLyogUldJVUYgKi8KLSNkZWZpbmUgTlZfUEZCX1JUTF9WX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX1JUTF9HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOjMgLyogUldJVUYgKi8KLSNkZWZpbmUgTlZfUEZCX1JUTF9HX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX1JUTF9HQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OjQgLyogUldJVUYgKi8KLSNkZWZpbmUgTlZfUEZCX1JUTF9HQl9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OjAgLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fMzIwX1BJWEVMUyAgICAgICAgICAgIDB4MDAwMDAwMGEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fNDAwX1BJWEVMUyAgICAgICAgICAgIDB4MDAwMDAwMGQgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fNDgwX1BJWEVMUyAgICAgICAgICAgIDB4MDAwMDAwMGYgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fNTEyX1BJWEVMUyAgICAgICAgICAgIDB4MDAwMDAwMTAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fNjQwX1BJWEVMUyAgICAgICAgICAgIDB4MDAwMDAwMTQgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fODAwX1BJWEVMUyAgICAgICAgICAgIDB4MDAwMDAwMTkgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fOTYwX1BJWEVMUyAgICAgICAgICAgIDB4MDAwMDAwMWUgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fMTAyNF9QSVhFTFMgICAgICAgICAgIDB4MDAwMDAwMjAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fMTE1Ml9QSVhFTFMgICAgICAgICAgIDB4MDAwMDAwMjQgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fMTI4MF9QSVhFTFMgICAgICAgICAgIDB4MDAwMDAwMjggLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fMTYwMF9QSVhFTFMgICAgICAgICAgIDB4MDAwMDAwMzIgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1JFU09MVVRJT05fREVGQVVMVCAgICAgICAgICAgICAgIDB4MDAwMDAwMTQgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1BJWEVMX0RFUFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OjggLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1BJWEVMX0RFUFRIXzhfQklUUyAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1BJWEVMX0RFUFRIXzE2X0JJVFMgICAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1BJWEVMX0RFUFRIXzMyX0JJVFMgICAgICAgICAgICAgIDB4MDAwMDAwMDMgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1BJWEVMX0RFUFRIX0RFRkFVTFQgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RJTElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI6MTIgLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RJTElOR19FTkFCTEVEICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18wX1RJTElOR19ESVNBQkxFRCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18xX1NHUkFNMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOjMgLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18xX1NHUkFNMTAwX0VOQUJMRUQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUldJLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0NPTkZJR18xX1NHUkFNMTAwX0RJU0FCTEVEICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0RFQlVHXzBfQ0tFX0FMV0FZU09OICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk6MjkgLyogUldJVkYgKi8KLSNkZWZpbmUgTlZfUEZCX0RFQlVHXzBfQ0tFX0FMV0FZU09OX09GRiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogUlctLVYgKi8KLSNkZWZpbmUgTlZfUEZCX0RFQlVHXzBfQ0tFX0FMV0FZU09OX09OICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogUldJLVYgKi8KLQotI2RlZmluZSBOVl9QRVhUREVWICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDFGRkY6MHgwMDEwMTAwMCAvKiBSVy0tRCAqLwotI2RlZmluZSBOVl9QRVhUREVWX0JPT1RfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMTAwMCAvKiBSLS00UiAqLwotI2RlZmluZSBOVl9QRVhUREVWX0JPT1RfMF9TVFJBUF9CVVNfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgIDA6MCAvKiBSLVhWRiAqLwotI2RlZmluZSBOVl9QRVhUREVWX0JPT1RfMF9TVFJBUF9CVVNfU1BFRURfMzNNSFogICAgICAgICAgMHgwMDAwMDAwMCAvKiBSLS0tViAqLwotI2RlZmluZSBOVl9QRVhUREVWX0JPT1RfMF9TVFJBUF9CVVNfU1BFRURfNjZNSFogICAgICAgICAgMHgwMDAwMDAwMSAvKiBSLS0tViAqLwotI2RlZmluZSBOVl9QRVhUREVWX0JPT1RfMF9TVFJBUF9TVUJfVkVORE9SICAgICAgICAgICAgICAgICAgICAgIDE6MSAvKiBSLVhWRiAqLwotI2RlZmluZSBOVl9QRVhUREVWX0JPT1RfMF9TVFJBUF9TVUJfVkVORE9SX05PX0JJT1MgICAgICAgMHgwMDAwMDAwMCAvKiBSLS0tViAqLwotI2RlZmluZSBOVl9QRVhUREVWX0JPT1RfMF9TVFJBUF9TVUJfVkVORE9SX0JJT1MgICAgICAgICAgMHgwMDAwMDAwMSAvKiBSLS0tViAqLwotI2RlZmluZSBOVl9QRVhUREVWX0JPT1RfMF9TVFJBUF9SQU1fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgIDM6MiAvKiBSLVhWRiAqLwotI2RlZmluZSBOVl9QRVhUREVWX0JPT1RfMF9TVFJBUF9SQU1fVFlQRV9TR1JBTV8yNTZLICAgICAgMHgwMDAwMDAwMCAvKiBSLS0tViAqLwotI2RlZmluZSBOVl9QRVhUREVWX0JPT1RfMF9TVFJBUF9SQU1fVFlQRV9TR1JBTV81MTJLXzJCQU5LIDB4MDAwMDAwMDEgLyogUi0tLVYgKi8KLSNkZWZpbmUgTlZfUEVYVERFVl9CT09UXzBfU1RSQVBfUkFNX1RZUEVfU0dSQU1fNTEyS180QkFOSyAweDAwMDAwMDAyIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX1JBTV9UWVBFXzEwMjRLXzJCQU5LICAgICAweDAwMDAwMDAzIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX1JBTV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNDo0IC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX1JBTV9XSURUSF82NCAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX1JBTV9XSURUSF8xMjggICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX0JVU19UWVBFICAgICAgICAgICAgICAgICAgICAgICAgNTo1IC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX0JVU19UWVBFX1BDSSAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX0JVU19UWVBFX0FHUCAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX0NSWVNUQUwgICAgICAgICAgICAgICAgICAgICAgICAgNjo2IC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX0NSWVNUQUxfMTM1MDBLICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX0NSWVNUQUxfMTQzMTgxODAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX1RWTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgODo3IC8qIFItWFZGICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX1RWTU9ERV9TRUNBTSAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX1RWTU9ERV9OVFNDICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX1RWTU9ERV9QQUwgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX1RWTU9ERV9ESVNBQkxFRCAgICAgICAgICAweDAwMDAwMDAzIC8qIFItLS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX09WRVJXUklURSAgICAgICAgICAgICAgICAgICAgIDExOjExIC8qIFJXSVZGICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX09WRVJXUklURV9ESVNBQkxFRCAgICAgICAweDAwMDAwMDAwIC8qIFJXSS1WICovCi0jZGVmaW5lIE5WX1BFWFRERVZfQk9PVF8wX1NUUkFQX09WRVJXUklURV9FTkFCTEVEICAgICAgICAweDAwMDAwMDAxIC8qIFJXLS1WICovCi0KLS8qIEV4dHJhcyAqLwotI2RlZmluZSBOVl9QUkFNSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3RkZGRkY6MHgwMDcwMDAwMCAvKiBSVy0tTSAqLwotLyojZGVmaW5lIE5WX1BSQU1JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEZGRkZGRjoweDAwQzAwMDAwKi8KLSNkZWZpbmUgTlZfUE5WTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRkZGRkZGOjB4MDEwMDAwMDAgLyogUlctLU0gKi8KLS8qI2RlZmluZSBOVl9QTlZNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBCRkZGRkY6MHgwMDgwMDAwMCovCi0jZGVmaW5lIE5WX0NIQU4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwZmZmZjoweDAwODAwMDAwCi0KLS8qIEZJRk8gc3ViY2hhbm5lbHMgKi8KLSNkZWZpbmUgTlZfVVJPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQzCi0jZGVmaW5lIE5WX1VDSFJPTUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1NwotI2RlZmluZSBOVl9VQ0xJUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkKLSNkZWZpbmUgTlZfVVBBVFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4Ci0jZGVmaW5lIE5WX1VMSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1QwotI2RlZmluZSBOVl9VVFJJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NUQKLSNkZWZpbmUgTlZfVVJFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDVFCi0jZGVmaW5lIE5WX1VCTElUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1RgotI2RlZmluZSBOVl9VR0xZUEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEIKLQotI2VuZGlmIC8qX19OVjRSRUZfSF9fKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9yaXZhL252X2RyaXZlci5jIGIvZHJpdmVycy92aWRlby9yaXZhL252X2RyaXZlci5jCmluZGV4IGJlNjMwYTAuLmExMTAyNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcml2YS9udl9kcml2ZXIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3JpdmEvbnZfZHJpdmVyLmMKQEAgLTIzMSwxMiArMjMxLDE0IEBACiAJY2FzZSBOVl9BUkNIXzMwOgogCQlpZihjaGlwc2V0ID09IE5WX0NISVBfSUdFRk9SQ0UyKSB7CiAKLQkJCWRldiA9IHBjaV9maW5kX3Nsb3QoMCwgMSk7CisJCQlkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCAxKTsKIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4N0MsICZhbXQpOworCQkJcGNpX2Rldl9wdXQoZGV2KTsKIAkJCW1lbWxlbiA9ICgoKGFtdCA+PiA2KSAmIDMxKSArIDEpICogMTAyNDsKIAkJfSBlbHNlIGlmIChjaGlwc2V0ID09IE5WX0NISVBfMHgwMUYwKSB7Ci0JCQlkZXYgPSBwY2lfZmluZF9zbG90KDAsIDEpOworCQkJZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgMSk7CiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDg0LCAmYW10KTsKKwkJCXBjaV9kZXZfcHV0KGRldik7CiAJCQltZW1sZW4gPSAoKChhbXQgPj4gNCkgJiAxMjcpICsgMSkgKiAxMDI0OwogCQl9IGVsc2UgewogCQkJc3dpdGNoICgoTlZfUkQzMihjaGlwLT5QRkIsIDB4MDAwMDAyMEMpID4+IDIwKSAmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3JpdmEvcml2YV9ody5jIGIvZHJpdmVycy92aWRlby9yaXZhL3JpdmFfaHcuYwppbmRleCBlMGI4YzUyLi43MGJmZDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3JpdmEvcml2YV9ody5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhX2h3LmMKQEAgLTExMTgsOCArMTExOCw5IEBACiAgICAgdW5zaWduZWQgaW50IHVNQ2xrUG9zdERpdjsKICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCi0gICAgZGV2ID0gcGNpX2ZpbmRfc2xvdCgwLCAzKTsKKyAgICBkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCAzKTsKICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDZDLCAmdU1DbGtQb3N0RGl2KTsKKyAgICBwY2lfZGV2X3B1dChkZXYpOwogICAgIHVNQ2xrUG9zdERpdiA9ICh1TUNsa1Bvc3REaXYgPj4gOCkgJiAweGY7CiAKICAgICBpZighdU1DbGtQb3N0RGl2KSB1TUNsa1Bvc3REaXYgPSA0OwpAQCAtMTEzMiw4ICsxMTMzLDkgQEAKICAgICBzaW1fZGF0YS5lbmFibGVfdmlkZW8gICA9IDA7CiAgICAgc2ltX2RhdGEuZW5hYmxlX21wICAgICAgPSAwOwogCi0gICAgZGV2ID0gcGNpX2ZpbmRfc2xvdCgwLCAxKTsKKyAgICBkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCAxKTsKICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDdDLCAmc2ltX2RhdGEubWVtb3J5X3R5cGUpOworICAgIHBjaV9kZXZfcHV0KGRldik7CiAgICAgc2ltX2RhdGEubWVtb3J5X3R5cGUgICAgPSAoc2ltX2RhdGEubWVtb3J5X3R5cGUgPj4gMTIpICYgMTsKIAogICAgIHNpbV9kYXRhLm1lbW9yeV93aWR0aCAgID0gNjQ7CkBAIC0yMTEyLDEyICsyMTE0LDE0IEBACiAgICAgICogRmlsbCBpbiBjaGlwIGNvbmZpZ3VyYXRpb24uCiAgICAgICovCiAgICAgaWYoY2hpcHNldCA9PSBOVl9DSElQX0lHRUZPUkNFMikgewotICAgICAgICBkZXYgPSBwY2lfZmluZF9zbG90KDAsIDEpOworICAgICAgICBkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCAxKTsKICAgICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg3QywgJmFtdCk7CisgICAgICAgIHBjaV9kZXZfcHV0KGRldik7CiAgICAgICAgIGNoaXAtPlJhbUFtb3VudEtCeXRlcyA9ICgoKGFtdCA+PiA2KSAmIDMxKSArIDEpICogMTAyNDsKICAgICB9IGVsc2UgaWYoY2hpcHNldCA9PSBOVl9DSElQXzB4MDFGMCkgewotICAgICAgICBkZXYgPSBwY2lfZmluZF9zbG90KDAsIDEpOworICAgICAgICBkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCAxKTsKICAgICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg4NCwgJmFtdCk7CisgICAgICAgIHBjaV9kZXZfcHV0KGRldik7CiAgICAgICAgIGNoaXAtPlJhbUFtb3VudEtCeXRlcyA9ICgoKGFtdCA+PiA0KSAmIDEyNykgKyAxKSAqIDEwMjQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3dpdGNoICgoTlZfUkQzMihjaGlwLT5QRkIsIDB4MDAwMDAyMEMpID4+IDIwKSAmIDB4MDAwMDAwRkYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3JpdmEvcml2YWZiLWkyYy5jIGIvZHJpdmVycy92aWRlby9yaXZhL3JpdmFmYi1pMmMuYwppbmRleCAwNDA1ZTgzLi5hMGUyMmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3JpdmEvcml2YWZiLWkyYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhZmItaTJjLmMKQEAgLTcwLDggKzcwLDYgQEAKIAlpZiAoVkdBX1JEMDgocGFyLT5yaXZhLlBDSU8sIDB4M2Q1KSAmIDB4MDQpCiAJCXZhbCA9IDE7CiAKLQl2YWwgPSBWR0FfUkQwOChwYXItPnJpdmEuUENJTywgMHgzZDUpOwotCiAJcmV0dXJuIHZhbDsKIH0KIApAQCAtODgsMTMgKzg2LDE2IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIGludCByaXZhX3NldHVwX2kyY19idXMoc3RydWN0IHJpdmFfaTJjX2NoYW4gKmNoYW4sIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW50IF9fZGV2aW5pdCByaXZhX3NldHVwX2kyY19idXMoc3RydWN0IHJpdmFfaTJjX2NoYW4gKmNoYW4sCisJCQkJCWNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCXVuc2lnbmVkIGludCBpMmNfY2xhc3MpCiB7CiAJaW50IHJjOwogCiAJc3RyY3B5KGNoYW4tPmFkYXB0ZXIubmFtZSwgbmFtZSk7CiAJY2hhbi0+YWRhcHRlci5vd25lcgkJPSBUSElTX01PRFVMRTsKIAljaGFuLT5hZGFwdGVyLmlkCQk9IEkyQ19IV19CX1JJVkE7CisJY2hhbi0+YWRhcHRlci5jbGFzcwkJPSBpMmNfY2xhc3M7CiAJY2hhbi0+YWRhcHRlci5hbGdvX2RhdGEJCT0gJmNoYW4tPmFsZ287CiAJY2hhbi0+YWRhcHRlci5kZXYucGFyZW50CT0gJmNoYW4tPnBhci0+cGRldi0+ZGV2OwogCWNoYW4tPmFsZ28uc2V0c2RhCQk9IHJpdmFfZ3Bpb19zZXRzZGE7CkBAIC0xMjQsNDIgKzEyNSwzOCBAQAogCXJldHVybiByYzsKIH0KIAotdm9pZCByaXZhX2NyZWF0ZV9pMmNfYnVzc2VzKHN0cnVjdCByaXZhX3BhciAqcGFyKQordm9pZCBfX2RldmluaXQgcml2YV9jcmVhdGVfaTJjX2J1c3NlcyhzdHJ1Y3Qgcml2YV9wYXIgKnBhcikKIHsKLQlwYXItPmJ1cyA9IDM7Ci0KIAlwYXItPmNoYW5bMF0ucGFyCT0gcGFyOwogCXBhci0+Y2hhblsxXS5wYXIJPSBwYXI7CiAJcGFyLT5jaGFuWzJdLnBhciAgICAgICAgPSBwYXI7CiAKLQlwYXItPmNoYW5bMF0uZGRjX2Jhc2UgPSAweDNlOwotCXBhci0+Y2hhblsxXS5kZGNfYmFzZSA9IDB4MzY7CisJcGFyLT5jaGFuWzBdLmRkY19iYXNlID0gMHgzNjsKKwlwYXItPmNoYW5bMV0uZGRjX2Jhc2UgPSAweDNlOwogCXBhci0+Y2hhblsyXS5kZGNfYmFzZSA9IDB4NTA7Ci0Jcml2YV9zZXR1cF9pMmNfYnVzKCZwYXItPmNoYW5bMF0sICJCVVMxIik7Ci0Jcml2YV9zZXR1cF9pMmNfYnVzKCZwYXItPmNoYW5bMV0sICJCVVMyIik7Ci0Jcml2YV9zZXR1cF9pMmNfYnVzKCZwYXItPmNoYW5bMl0sICJCVVMzIik7CisJcml2YV9zZXR1cF9pMmNfYnVzKCZwYXItPmNoYW5bMF0sICJCVVMxIiwgSTJDX0NMQVNTX0hXTU9OKTsKKwlyaXZhX3NldHVwX2kyY19idXMoJnBhci0+Y2hhblsxXSwgIkJVUzIiLCAwKTsKKwlyaXZhX3NldHVwX2kyY19idXMoJnBhci0+Y2hhblsyXSwgIkJVUzMiLCAwKTsKIH0KIAogdm9pZCByaXZhX2RlbGV0ZV9pMmNfYnVzc2VzKHN0cnVjdCByaXZhX3BhciAqcGFyKQogewotCWlmIChwYXItPmNoYW5bMF0ucGFyKQotCQlpMmNfZGVsX2FkYXB0ZXIoJnBhci0+Y2hhblswXS5hZGFwdGVyKTsKLQlwYXItPmNoYW5bMF0ucGFyID0gTlVMTDsKKwlpbnQgaTsKIAotCWlmIChwYXItPmNoYW5bMV0ucGFyKQotCQlpMmNfZGVsX2FkYXB0ZXIoJnBhci0+Y2hhblsxXS5hZGFwdGVyKTsKLQlwYXItPmNoYW5bMV0ucGFyID0gTlVMTDsKLQotCWlmIChwYXItPmNoYW5bMl0ucGFyKQotCQlpMmNfZGVsX2FkYXB0ZXIoJnBhci0+Y2hhblsyXS5hZGFwdGVyKTsKLQlwYXItPmNoYW5bMl0ucGFyID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmICghcGFyLT5jaGFuW2ldLnBhcikKKwkJCWNvbnRpbnVlOworCQlpMmNfZGVsX2FkYXB0ZXIoJnBhci0+Y2hhbltpXS5hZGFwdGVyKTsKKwkJcGFyLT5jaGFuW2ldLnBhciA9IE5VTEw7CisJfQogfQogCi1pbnQgcml2YV9wcm9iZV9pMmNfY29ubmVjdG9yKHN0cnVjdCByaXZhX3BhciAqcGFyLCBpbnQgY29ubiwgdTggKipvdXRfZWRpZCkKK2ludCBfX2RldmluaXQgcml2YV9wcm9iZV9pMmNfY29ubmVjdG9yKHN0cnVjdCByaXZhX3BhciAqcGFyLCBpbnQgY29ubiwgdTggKipvdXRfZWRpZCkKIHsKIAl1OCAqZWRpZCA9IE5VTEw7CiAKLQllZGlkID0gZmJfZGRjX3JlYWQoJnBhci0+Y2hhbltjb25uLTFdLmFkYXB0ZXIpOworCWlmIChwYXItPmNoYW5bY29ubl0ucGFyKQorCQllZGlkID0gZmJfZGRjX3JlYWQoJnBhci0+Y2hhbltjb25uXS5hZGFwdGVyKTsKIAogCWlmIChvdXRfZWRpZCkKIAkJKm91dF9lZGlkID0gZWRpZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhZmIuaCBiL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhZmIuaAppbmRleCA0OGVhZDZkLi5kOWYxMDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3JpdmEvcml2YWZiLmgKKysrIGIvZHJpdmVycy92aWRlby9yaXZhL3JpdmFmYi5oCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CiAKICNpbmNsdWRlICJyaXZhX2h3LmgiCkBAIC02MSw3ICs2MCw2IEBACiAJQm9vbCBTZWNvbmRDUlRDOwogCWludCBGbGF0UGFuZWw7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0JaW50IGJ1czsKIAlpbnQgY3Vyc29yX3Jlc2V0OwogI2lmZGVmIENPTkZJR19NVFJSCiAJc3RydWN0IHsgaW50IHZyYW07IGludCB2cmFtX3ZhbGlkOyB9IG10cnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzZmIuYyBiL2RyaXZlcnMvdmlkZW8vczNmYi5jCmluZGV4IDMwOTFiMjAuLmQxMTczNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNmYi5jCkBAIC02NSw3ICs2NSw3IEBACiAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdmdhX3BsbCBzM19wbGwgPSB7MywgMTI5LCAzLCAzMywgMCwgMywKLQk2MDAwMCwgMjQwMDAwLCAxNDMxOH07CisJMzUwMDAsIDI0MDAwMCwgMTQzMTh9OwogCiBzdGF0aWMgY29uc3QgaW50IHMzX21lbXNpemVzW10gPSB7NDA5NiwgMCwgMzA3MiwgODE5MiwgMjA0OCwgNjE0NCwgMTAyNCwgNTEyfTsKIApAQCAtMTY0LDcgKzE2NCw3IEBACiBzdGF0aWMgdm9pZCBzM2ZiX3NldHRpbGVfZmFzdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3RpbGVtYXAgKm1hcCkKIHsKIAljb25zdCB1OCAqZm9udCA9IG1hcC0+ZGF0YTsKLQl1OCogZmIgPSAodTggKikgaW5mby0+c2NyZWVuX2Jhc2U7CisJdTggX19pb21lbSAqZmIgPSAodTggX19pb21lbSAqKSBpbmZvLT5zY3JlZW5fYmFzZTsKIAlpbnQgaSwgYzsKIAogCWlmICgobWFwLT53aWR0aCAhPSA4KSB8fCAobWFwLT5oZWlnaHQgIT0gMTYpIHx8CkBAIC0xNzcsMjAgKzE3NywxOSBAQAogCWZiICs9IDI7CiAJZm9yIChpID0gMDsgaSA8IG1hcC0+aGVpZ2h0OyBpKyspIHsKIAkJZm9yIChjID0gMDsgYyA8IG1hcC0+bGVuZ3RoOyBjKyspIHsKLQkJCWZiW2MgKiA0XSA9IGZvbnRbYyAqIG1hcC0+aGVpZ2h0ICsgaV07CisJCQlmYl93cml0ZWIoZm9udFtjICogbWFwLT5oZWlnaHQgKyBpXSwgZmIgKyBjICogNCk7CiAJCX0KIAkJZmIgKz0gMTAyNDsKIAl9CiB9CiAKLQotCiBzdGF0aWMgc3RydWN0IGZiX3RpbGVfb3BzIHMzZmJfdGlsZV9vcHMgPSB7CiAJLmZiX3NldHRpbGUJPSBzdmdhX3NldHRpbGUsCiAJLmZiX3RpbGVjb3B5CT0gc3ZnYV90aWxlY29weSwKIAkuZmJfdGlsZWZpbGwgICAgPSBzdmdhX3RpbGVmaWxsLAogCS5mYl90aWxlYmxpdCAgICA9IHN2Z2FfdGlsZWJsaXQsCiAJLmZiX3RpbGVjdXJzb3IgID0gc3ZnYV90aWxlY3Vyc29yLAorCS5mYl9nZXRfdGlsZW1heCA9IHN2Z2FfZ2V0X3RpbGVtYXgsCiB9OwogCiBzdGF0aWMgc3RydWN0IGZiX3RpbGVfb3BzIHMzZmJfZmFzdF90aWxlX29wcyA9IHsKQEAgLTE5OSw2ICsxOTgsNyBAQAogCS5mYl90aWxlZmlsbCAgICA9IHN2Z2FfdGlsZWZpbGwsCiAJLmZiX3RpbGVibGl0ICAgID0gc3ZnYV90aWxlYmxpdCwKIAkuZmJfdGlsZWN1cnNvciAgPSBzdmdhX3RpbGVjdXJzb3IsCisJLmZiX2dldF90aWxlbWF4ID0gc3ZnYV9nZXRfdGlsZW1heCwKIH07CiAKIApAQCAtMzI2LDggKzMyNiwxMyBAQAogewogCXUxNiBtLCBuLCByOwogCXU4IHJlZ3ZhbDsKKwlpbnQgcnY7CiAKLQlzdmdhX2NvbXB1dGVfcGxsKCZzM19wbGwsIDEwMDAwMDAwMDAgLyBwaXhjbG9jaywgJm0sICZuLCAmciwgaW5mby0+bm9kZSk7CisJcnYgPSBzdmdhX2NvbXB1dGVfcGxsKCZzM19wbGwsIDEwMDAwMDAwMDAgLyBwaXhjbG9jaywgJm0sICZuLCAmciwgaW5mby0+bm9kZSk7CisJaWYgKHJ2IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZiJWQ6IGNhbm5vdCBzZXQgcmVxdWVzdGVkIHBpeGNsb2NrLCBrZWVwaW5nIG9sZCB2YWx1ZVxuIiwgaW5mby0+bm9kZSk7CisJCXJldHVybjsKKwl9CiAKIAkvKiBTZXQgVkdBIG1pc2MgcmVnaXN0ZXIgICovCiAJcmVndmFsID0gdmdhX3IoTlVMTCwgVkdBX01JU19SKTsKQEAgLTQ0OSw2ICs0NTQsMTAgQEAKIAkJaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19NSVNDX1RJTEVCTElUVElORzsKIAkJaW5mby0+dGlsZW9wcyA9IE5VTEw7CiAKKwkJLyogaW4gNGJwcCBzdXBwb3J0cyA4cCB3aWRlIHRpbGVzIG9ubHksIGFueSB0aWxlcyBvdGhlcndpc2UgKi8KKwkJaW5mby0+cGl4bWFwLmJsaXRfeCA9IChicHAgPT0gNCkgPyAoMSA8PCAoOCAtIDEpKSA6ICh+KHUzMikwKTsKKwkJaW5mby0+cGl4bWFwLmJsaXRfeSA9IH4odTMyKTA7CisKIAkJb2Zmc2V0X3ZhbHVlID0gKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKiBicHApIC8gNjQ7CiAJCXNjcmVlbl9zaXplID0gaW5mby0+dmFyLnlyZXNfdmlydHVhbCAqIGluZm8tPmZpeC5saW5lX2xlbmd0aDsKIAl9IGVsc2UgewpAQCAtNDU4LDYgKzQ2NywxMCBAQAogCQlpbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19USUxFQkxJVFRJTkc7CiAJCWluZm8tPnRpbGVvcHMgPSBmYXN0dGV4dCA/ICZzM2ZiX2Zhc3RfdGlsZV9vcHMgOiAmczNmYl90aWxlX29wczsKIAorCQkvKiBzdXBwb3J0cyA4eDE2IHRpbGVzIG9ubHkgKi8KKwkJaW5mby0+cGl4bWFwLmJsaXRfeCA9IDEgPDwgKDggLSAxKTsKKwkJaW5mby0+cGl4bWFwLmJsaXRfeSA9IDEgPDwgKDE2IC0gMSk7CisKIAkJb2Zmc2V0X3ZhbHVlID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCAvIDE2OwogCQlzY3JlZW5fc2l6ZSA9IChpbmZvLT52YXIueHJlc192aXJ0dWFsICogaW5mby0+dmFyLnlyZXNfdmlydHVhbCkgLyA2NDsKIAl9CkBAIC02NTYsNyArNjY5LDcgQEAKIAl2YWx1ZSA9ICgodmFsdWUgKiBobXVsKSAvIDgpIC0gNTsKIAl2Z2Ffd2NydChOVUxMLCAweDNDLCAodmFsdWUgKyAxKSAvIDIpOwogCi0JbWVtc2V0KCh1OCopaW5mby0+c2NyZWVuX2Jhc2UsIDB4MDAsIHNjcmVlbl9zaXplKTsKKwltZW1zZXRfaW8oaW5mby0+c2NyZWVuX2Jhc2UsIDB4MDAsIHNjcmVlbl9zaXplKTsKIAkvKiBEZXZpY2UgYW5kIHNjcmVlbiBiYWNrIG9uICovCiAJc3ZnYV93Y3J0X21hc2soMHgxNywgMHg4MCwgMHg4MCk7CiAJc3ZnYV93c2VxX21hc2soMHgwMSwgMHgwMCwgMHgyMCk7CkBAIC02OTksNyArNzEyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSAxNjoKIAkJaWYgKHJlZ25vID49IDE2KQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gMDsKIAogCQlpZiAoZmItPnZhci5ncmVlbi5sZW5ndGggPT0gNSkKIAkJCSgodTMyKilmYi0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9ICgocmVkICYgMHhGODAwKSA+PiAxKSB8CkBAIC03MTIsOSArNzI1LDkgQEAKIAljYXNlIDI0OgogCWNhc2UgMzI6CiAJCWlmIChyZWdubyA+PSAxNikKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIDA7CiAKLQkJKCh1MzIqKWZiLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0gKCh0cmFuc3AgJiAweEZGMDApIDw8IDE2KSB8ICgocmVkICYgMHhGRjAwKSA8PCA4KSB8CisJCSgodTMyKilmYi0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9ICgocmVkICYgMHhGRjAwKSA8PCA4KSB8CiAJCQkoZ3JlZW4gJiAweEZGMDApIHwgKChibHVlICYgMHhGRjAwKSA+PiA4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTc2NywxMiArNzgwLDYgQEAKIAogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAKLQkvKiBWYWxpZGF0ZSB0aGUgb2Zmc2V0cyAqLwotCWlmICgodmFyLT54b2Zmc2V0ICsgdmFyLT54cmVzKSA+IHZhci0+eHJlc192aXJ0dWFsKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKHZhci0+eW9mZnNldCArIHZhci0+eXJlcykgPiB2YXItPnlyZXNfdmlydHVhbCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCAqLwogCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDApIHsKIAkJb2Zmc2V0ID0gKHZhci0+eW9mZnNldCAvIDE2KSAqICh2YXItPnhyZXNfdmlydHVhbCAvIDIpICsgKHZhci0+eG9mZnNldCAvIDIpOwpAQCAtODA1LDYgKzgxMiw3IEBACiAJLmZiX2ZpbGxyZWN0CT0gczNmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEJPSBjZmJfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdAk9IHMzZmJfaW1hZ2VibGl0LAorCS5mYl9nZXRfY2FwcyAgICA9IHN2Z2FfZ2V0X2NhcHMsCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMDYxLDYgKzEwNjksNyBAQAogewogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHMzZmJfaW5mbyAqcGFyID0gaW5mby0+cGFyOworCWludCBlcnI7CiAKIAlkZXZfaW5mbygmKGRldi0+ZGV2KSwgInJlc3VtZVxuIik7CiAKQEAgLTEwNzUsNyArMTA4NCwxMyBAQAogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKLQlwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKGVycikgeworCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOworCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWRldl9lcnIoJihkZXYtPmRldiksICJlcnJvciAlZCBlbmFibGluZyBkZXZpY2UgZm9yIHJlc3VtZVxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAJcGNpX3NldF9tYXN0ZXIoZGV2KTsKIAogCXMzZmJfc2V0X3BhcihpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLWkyYy5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmItaTJjLmMKaW5kZXggOGRiMDY2Yy4uMzVjMWNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmItaTJjLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmItaTJjLmMKQEAgLTQxLDEwICs0MSw2IEBACiAjZGVmaW5lIFNBVkFHRTRfSTJDX1NDTF9JTgkweDAwMDAwMDA4CiAjZGVmaW5lIFNBVkFHRTRfSTJDX1NEQV9JTgkweDAwMDAwMDEwCiAKLSNkZWZpbmUgU0VUX0NSX0lYKGJhc2UsIHZhbCkJd3JpdGViKCh2YWwpLCBiYXNlICsgMHg4MDAwICsgVkdBX0NSX0lYKQotI2RlZmluZSBTRVRfQ1JfREFUQShiYXNlLCB2YWwpCXdyaXRlYigodmFsKSwgYmFzZSArIDB4ODAwMCArIFZHQV9DUl9EQVRBKQotI2RlZmluZSBHRVRfQ1JfREFUQShiYXNlKQlyZWFkYihiYXNlICsgMHg4MDAwICsgVkdBX0NSX0RBVEEpCi0KIHN0YXRpYyB2b2lkIHNhdmFnZTRfZ3Bpb19zZXRzY2wodm9pZCAqZGF0YSwgaW50IHZhbCkKIHsKIAlzdHJ1Y3Qgc2F2YWdlZmJfaTJjX2NoYW4gKmNoYW4gPSBkYXRhOwpAQCAtOTIsMTUgKzg4LDE1IEBACiAJc3RydWN0IHNhdmFnZWZiX2kyY19jaGFuICpjaGFuID0gZGF0YTsKIAl1MzIJCQkgIHI7CiAKLQlTRVRfQ1JfSVgoY2hhbi0+aW9hZGRyLCBjaGFuLT5yZWcpOwotCXIgPSBHRVRfQ1JfREFUQShjaGFuLT5pb2FkZHIpOworCXIgPSBWR0FyQ1IoY2hhbi0+cmVnLCBjaGFuLT5wYXIpOwogCXIgfD0gUFJPU0FWQUdFX0kyQ19FTkFCOwogCWlmICh2YWwpIHsKIAkJciB8PSBQUk9TQVZBR0VfSTJDX1NDTF9PVVQ7CiAJfSBlbHNlIHsKIAkJciAmPSB+UFJPU0FWQUdFX0kyQ19TQ0xfT1VUOwogCX0KLQlTRVRfQ1JfREFUQShjaGFuLT5pb2FkZHIsIHIpOworCisJVkdBd0NSKGNoYW4tPnJlZywgciwgY2hhbi0+cGFyKTsKIH0KIAogc3RhdGljIHZvaWQgcHJvc2F2YWdlX2dwaW9fc2V0c2RhKHZvaWQqIGRhdGEsIGludCB2YWwpCkBAIC0xMDgsMzEgKzEwNCwyOSBAQAogCXN0cnVjdCBzYXZhZ2VmYl9pMmNfY2hhbiAqY2hhbiA9IGRhdGE7CiAJdW5zaWduZWQgaW50IHI7CiAKLQlTRVRfQ1JfSVgoY2hhbi0+aW9hZGRyLCBjaGFuLT5yZWcpOwotCXIgPSBHRVRfQ1JfREFUQShjaGFuLT5pb2FkZHIpOworCXIgPSBWR0FyQ1IoY2hhbi0+cmVnLCBjaGFuLT5wYXIpOwogCXIgfD0gUFJPU0FWQUdFX0kyQ19FTkFCOwogCWlmICh2YWwpIHsKIAkJciB8PSBQUk9TQVZBR0VfSTJDX1NEQV9PVVQ7CiAJfSBlbHNlIHsKIAkJciAmPSB+UFJPU0FWQUdFX0kyQ19TREFfT1VUOwogCX0KLQlTRVRfQ1JfREFUQShjaGFuLT5pb2FkZHIsIHIpOworCisJVkdBd0NSKGNoYW4tPnJlZywgciwgY2hhbi0+cGFyKTsKIH0KIAogc3RhdGljIGludCBwcm9zYXZhZ2VfZ3Bpb19nZXRzY2wodm9pZCogZGF0YSkKIHsKIAlzdHJ1Y3Qgc2F2YWdlZmJfaTJjX2NoYW4gKmNoYW4gPSBkYXRhOwogCi0JU0VUX0NSX0lYKGNoYW4tPmlvYWRkciwgY2hhbi0+cmVnKTsKLQlyZXR1cm4gKDAgIT0gKEdFVF9DUl9EQVRBKGNoYW4tPmlvYWRkcikgJiBQUk9TQVZBR0VfSTJDX1NDTF9JTikpOworCXJldHVybiAoVkdBckNSKGNoYW4tPnJlZywgY2hhbi0+cGFyKSAmIFBST1NBVkFHRV9JMkNfU0NMX0lOKSA/IDEgOiAwOwogfQogCiBzdGF0aWMgaW50IHByb3NhdmFnZV9ncGlvX2dldHNkYSh2b2lkKiBkYXRhKQogewogCXN0cnVjdCBzYXZhZ2VmYl9pMmNfY2hhbiAqY2hhbiA9IGRhdGE7CiAKLQlTRVRfQ1JfSVgoY2hhbi0+aW9hZGRyLCBjaGFuLT5yZWcpOwotCXJldHVybiAoMCAhPSAoR0VUX0NSX0RBVEEoY2hhbi0+aW9hZGRyKSAmIFBST1NBVkFHRV9JMkNfU0RBX0lOKSk7CisJcmV0dXJuIChWR0FyQ1IoY2hhbi0+cmVnLCBjaGFuLT5wYXIpICYgUFJPU0FWQUdFX0kyQ19TREFfSU4pID8gMSA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgc2F2YWdlX3NldHVwX2kyY19idXMoc3RydWN0IHNhdmFnZWZiX2kyY19jaGFuICpjaGFuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmIuaCBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLmgKaW5kZXggZTY0OGE2Yy4uOGJmZGZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi5oCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDx2aWRlby92Z2EuaD4KICNpbmNsdWRlICIuLi9lZGlkLmgiCiAKICNpZmRlZiBTQVZBR0VGQl9ERUJVRwpAQCAtMTg5LDggKzE5MSwxMiBAQAogCXN0cnVjdCBzYXZhZ2VmYl9pMmNfY2hhbiBjaGFuOwogCXN0cnVjdCBzYXZhZ2VfcmVnIHN0YXRlOwogCXN0cnVjdCBzYXZhZ2VfcmVnIHNhdmU7CisJc3RydWN0IHNhdmFnZV9yZWcgaW5pdGlhbDsKKwlzdHJ1Y3Qgdmdhc3RhdGUgdmdhc3RhdGU7CisJc3RydWN0IG11dGV4IG9wZW5fbG9jazsKIAl1bnNpZ25lZCBjaGFyICAgKmVkaWQ7CiAJdTMyIHBzZXVkb19wYWxldHRlWzE2XTsKKwl1MzIgb3Blbl9jb3VudDsKIAlpbnQgcGFsZXR0ZUVuYWJsZWQ7CiAJaW50IHBtX3N0YXRlOwogCWludCBkaXNwbGF5X3R5cGU7CkBAIC0yMDMsNyArMjA5LDcgQEAKIAlpbnQgY2xvY2tbNF07CiAJaW50IE1DTEssIFJFRkNMSywgTENEY2xrOwogCXN0cnVjdCB7Ci0JCXU4ICAgX19pb21lbSAqdmJhc2U7CisJCXZvaWQgICBfX2lvbWVtICp2YmFzZTsKIAkJdTMyICAgIHBiYXNlOwogCQl1MzIgICAgbGVuOwogI2lmZGVmIENPTkZJR19NVFJSCkBAIC0yMTIsNyArMjE4LDcgQEAKIAl9IHZpZGVvOwogCiAJc3RydWN0IHsKLQkJdm9sYXRpbGUgdTggIF9faW9tZW0gKnZiYXNlOworCQl2b2lkICBfX2lvbWVtICp2YmFzZTsKIAkJdTMyICAgICAgICAgICBwYmFzZTsKIAkJdTMyICAgICAgICAgICBsZW47CiAJfSBtbWlvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwppbmRleCAwMTY2ZWMyLi4zZDc1MDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwpAQCAtMTYyMyw4ICsxNjIzLDQ2IEBACiAJc2F2YWdlZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgaW5mbyk7CiB9CiAKK3N0YXRpYyBpbnQgc2F2YWdlZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJc3RydWN0IHNhdmFnZWZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJbXV0ZXhfbG9jaygmcGFyLT5vcGVuX2xvY2spOworCisJaWYgKCFwYXItPm9wZW5fY291bnQpIHsKKwkJbWVtc2V0KCZwYXItPnZnYXN0YXRlLCAwLCBzaXplb2YocGFyLT52Z2FzdGF0ZSkpOworCQlwYXItPnZnYXN0YXRlLmZsYWdzID0gVkdBX1NBVkVfQ01BUCB8IFZHQV9TQVZFX0ZPTlRTIHwKKwkJCVZHQV9TQVZFX01PREU7CisJCXBhci0+dmdhc3RhdGUudmdhYmFzZSA9IHBhci0+bW1pby52YmFzZSArIDB4ODAwMDsKKwkJc2F2ZV92Z2EoJnBhci0+dmdhc3RhdGUpOworCQlzYXZhZ2VfZ2V0X2RlZmF1bHRfcGFyKHBhciwgJnBhci0+aW5pdGlhbCk7CisJfQorCisJcGFyLT5vcGVuX2NvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCZwYXItPm9wZW5fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2F2YWdlZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJc3RydWN0IHNhdmFnZWZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJbXV0ZXhfbG9jaygmcGFyLT5vcGVuX2xvY2spOworCisJaWYgKHBhci0+b3Blbl9jb3VudCA9PSAxKSB7CisJCXNhdmFnZV9zZXRfZGVmYXVsdF9wYXIocGFyLCAmcGFyLT5pbml0aWFsKTsKKwkJcmVzdG9yZV92Z2EoJnBhci0+dmdhc3RhdGUpOworCX0KKworCXBhci0+b3Blbl9jb3VudC0tOworCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGZiX29wcyBzYXZhZ2VmYl9vcHMgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLmZiX29wZW4gICAgICAgID0gc2F2YWdlZmJfb3BlbiwKKwkuZmJfcmVsZWFzZSAgICAgPSBzYXZhZ2VmYl9yZWxlYXNlLAogCS5mYl9jaGVja192YXIgICA9IHNhdmFnZWZiX2NoZWNrX3ZhciwKIAkuZmJfc2V0X3BhciAgICAgPSBzYXZhZ2VmYl9zZXRfcGFyLAogCS5mYl9zZXRjb2xyZWcgICA9IHNhdmFnZWZiX3NldGNvbHJlZywKQEAgLTIxNzMsNiArMjIxMSw3IEBACiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAlwYXIgPSBpbmZvLT5wYXI7CisJbXV0ZXhfaW5pdCgmcGFyLT5vcGVuX2xvY2spOwogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CiAJaWYgKGVycikKIAkJZ290byBmYWlsZWRfZW5hYmxlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaXMvb3NkZWYuaCBiL2RyaXZlcnMvdmlkZW8vc2lzL29zZGVmLmgKaW5kZXggZDA0OGJkMy4uYzE0OTI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaXMvb3NkZWYuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3Npcy9vc2RlZi5oCkBAIC01OCw5ICs1OCw2IEBACiAjZGVmaW5lIFNJU19MSU5VWF9LRVJORUwJCS8qIExpbnV4IGtlcm5lbCBmcmFtZWJ1ZmZlciAqLwogI3VuZGVmICBTSVNfWE9SR19YRjg2CQkJLyogWEZyZWU4Ni9YLm9yZyAqLwogCi0jdW5kZWYgU0lTX0xJTlVYX0tFUk5FTF8yNAotI3VuZGVmIFNJU19MSU5VWF9LRVJORUxfMjYKLQogI2lmZGVmIE91dFBvcnRCeXRlCiAjdW5kZWYgT3V0UG9ydEJ5dGUKICNlbmRpZgpAQCAtMTAwLDggKzk3LDYgQEAKICNkZWZpbmUgU0lTMzE1SAogI2VuZGlmCiAKLSNkZWZpbmUgU0lTX0xJTlVYX0tFUk5FTF8yNgotCiAjaWYgIWRlZmluZWQoU0lTMzAwKSAmJiAhZGVmaW5lZChTSVMzMTVIKQogI3dhcm5pbmcgTmVpdGhlciBDT05GSUdfRkJfU0lTXzMwMCBub3IgQ09ORklHX0ZCX1NJU18zMTUgaXMgc2V0CiAjd2FybmluZyBzaXNmYiB3aWxsIG5vdCB3b3JrIQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaXMvc2lzLmggYi9kcml2ZXJzL3ZpZGVvL3Npcy9zaXMuaAppbmRleCA3ZDVlZTIxLi5kNWUyZDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXMuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3Npcy9zaXMuaApAQCAtMjcsMTEgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlICJvc2RlZi5oIgotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKICNpbmNsdWRlIDx2aWRlby9zaXNmYi5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9zaXNmYi5oPgotI2VuZGlmCiAKICNpbmNsdWRlICJ2Z2F0eXBlcy5oIgogI2luY2x1ZGUgInZzdHJ1Y3QuaCIKQEAgLTQwLDMzICszNiwxNyBAQAogI2RlZmluZSBWRVJfTUlOT1IJCTgKICNkZWZpbmUgVkVSX0xFVkVMCQk5CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNkZWZpbmUgU0lTX1BDSV9HRVRfQ0xBU1MoYSwgYikgcGNpX2dldF9jbGFzcyhhLCBiKQotI2RlZmluZSBTSVNfUENJX0dFVF9ERVZJQ0UoYSxiLGMpIHBjaV9nZXRfZGV2aWNlKGEsYixjKQotI2RlZmluZSBTSVNfUENJX0dFVF9TTE9UKGEsYikgcGNpX2dldF9zbG90KGEsYikKLSNkZWZpbmUgU0lTX1BDSV9QVVRfREVWSUNFKGEpIHBjaV9kZXZfcHV0KGEpCisKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxMCkKICNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CiAjZGVmaW5lIFNJU19PTERfQ09ORklHX0NPTVBBVAogI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2RlZmluZSBTSVNfTkVXX0NPTkZJR19DT01QQVQKICNlbmRpZgogI2VuZGlmCS8qIENPTkZJR19DT01QQVQgKi8KLSNlbHNlICAvKiAyLjQgKi8KLSNkZWZpbmUgU0lTX1BDSV9HRVRfQ0xBU1MoYSwgYikgcGNpX2ZpbmRfY2xhc3MoYSwgYikKLSNkZWZpbmUgU0lTX1BDSV9HRVRfREVWSUNFKGEsYixjKSBwY2lfZmluZF9kZXZpY2UoYSxiLGMpCi0jZGVmaW5lIFNJU19QQ0lfR0VUX1NMT1QoYSxiKSBwY2lfZmluZF9zbG90KGEsYikKLSNkZWZpbmUgU0lTX1BDSV9QVVRfREVWSUNFKGEpCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNCwxOSkKLSNpZmRlZiBfX3g4Nl82NF9fCS8qIFNob3VsZG4ndCB3ZSBjaGVjayBmb3IgQ09ORklHX0lBMzJfRU1VTEFUSU9OIGhlcmU/ICovCi0jaW5jbHVkZSA8YXNtL2lvY3RsMzIuaD4KLSNkZWZpbmUgU0lTX09MRF9DT05GSUdfQ09NUEFUCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmIC8qIDIuNCAqLworCiAjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDgpCiAjZGVmaW5lIFNJU19JT1RZUEUxIHZvaWQgX19pb21lbQogI2RlZmluZSBTSVNfSU9UWVBFMiBfX2lvbWVtCkBAIC00OTgsMjYgKzQ3OCw4IEBACiAKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gZGVmYXVsdF92YXI7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIHNpc2ZiX2ZpeDsKIAl1MzIJCXBzZXVkb19wYWxldHRlWzE3XTsKLSNlbmRpZgotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0Jc3RydWN0IGRpc3BsYXkJCSBzaXNfZGlzcDsKLQlzdHJ1Y3QgZGlzcGxheV9zd2l0Y2ggCSBzaXNmYl9zdzsKLQlzdHJ1Y3QgewotCQl1MTYgcmVkLCBncmVlbiwgYmx1ZSwgcGFkOwotCX0JCXNpc19wYWxldHRlWzI1Nl07Ci0JdW5pb24gewotI2lmZGVmIEZCQ09OX0hBU19DRkIxNgotCQl1MTYgY2ZiMTZbMTZdOwotI2VuZGlmCi0jaWZkZWYgRkJDT05fSEFTX0NGQjMyCi0JCXUzMiBjZmIzMlsxNl07Ci0jZW5kaWYKLQl9CQlzaXNfZmJjb25fY21hcDsKLSNlbmRpZgogCiAJc3RydWN0IHNpc2ZiX21vbml0b3IgewogCQl1MTYgaG1pbjsKQEAgLTUzOCwxMCArNTAwLDYgQEAKIAogCWludAkJbW5pOwkvKiBNb2RlIG51bWJlciBpbmRleCAqLwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JaW50CQljdXJyY29uOwotI2VuZGlmCi0KIAl1bnNpZ25lZCBsb25nCXZpZGVvX3NpemU7CiAJdW5zaWduZWQgbG9uZwl2aWRlb19iYXNlOwogCXVuc2lnbmVkIGxvbmcJbW1pb19zaXplOwpAQCAtNTc4LDkgKzUzNiw2IEBACiAJaW50CQlzaXNmYl90dnBsdWc7CiAJaW50CQlzaXNmYl90dnN0ZDsKIAlpbnQJCXNpc2ZiX25vY3J0MnJhdGU7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JaW50CQlzaXNmYl9pbnZlcnNlOwotI2VuZGlmCiAKIAl1MzIJCWhlYXBzdGFydDsJCS8qIG9mZnNldCAgKi8KIAlTSVNfSU9UWVBFMQkqc2lzZmJfaGVhcF9zdGFydDsJLyogYWRkcmVzcyAqLwpAQCAtNjQ2LDkgKzYwMSw3IEBACiAJaW50CQltb2RlY2hhbmdlZDsKIAl1bnNpZ25lZCBjaGFyCW1vZGVwcmVjaGFuZ2U7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJdTgJCXNpc2ZiX2xhc3RyYXRlc1sxMjhdOwotI2VuZGlmCiAKIAlpbnQJCW5ld3JvbTsKIAlpbnQJCWhhdmVYR0lST007CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jIGIvZHJpdmVycy92aWRlby9zaXMvc2lzX21haW4uYwppbmRleCAwMTE5N2Q3Li5hMzBlMWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npc19tYWluLmMKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMTk0OCw3ICsxOTQ3LDcgQEAKIAlkZWZhdWx0OglyZXR1cm4gTlVMTDsKIAl9CiAJZm9yKGkgPSAwOyBpIDwgbmJyaWRnZW51bTsgaSsrKSB7Ci0JCWlmKChwZGV2ID0gU0lTX1BDSV9HRVRfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksCisJCWlmKChwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TSSwKIAkJCQluYnJpZGdlaWRzW25icmlkZ2VpZHgraV0sIE5VTEwpKSkKIAkJCWJyZWFrOwogCX0KQEAgLTQ2MTMsOSArNDYxMiw5IEBACiAJdW5zaWduZWQgc2hvcnQgdGVtcDsKIAlpbnQgcmV0ID0gMDsKIAotCXdoaWxlKChwZGV2ID0gU0lTX1BDSV9HRVRfQ0xBU1MoUENJX0NMQVNTX0JSSURHRV9IT1NULCBwZGV2KSkpIHsKKwl3aGlsZSgocGRldiA9IHBjaV9nZXRfY2xhc3MoUENJX0NMQVNTX0JSSURHRV9IT1NULCBwZGV2KSkpIHsKIAkJdGVtcCA9IHBkZXYtPnZlbmRvcjsKLQkJU0lTX1BDSV9QVVRfREVWSUNFKHBkZXYpOworCQlwY2lfZGV2X3B1dChwZGV2KTsKIAkJaWYodGVtcCA9PSBwY2l2ZW5kb3IpIHsKIAkJCXJldCA9IDE7CiAJCQlicmVhazsKQEAgLTUxNTQsMjQgKzUxNTMsMjQgQEAKIAkJCWlmKHJlZyAmIDB4ODApIHYyIHw9IDB4ODA7CiAJCQl2MiB8PSAweDAxOwogCi0JCQlpZigobXlwZGV2ID0gU0lTX1BDSV9HRVRfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIDB4MDczMCwgTlVMTCkpKSB7Ci0JCQkJU0lTX1BDSV9QVVRfREVWSUNFKG15cGRldik7CisJCQlpZigobXlwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TSSwgMHgwNzMwLCBOVUxMKSkpIHsKKwkJCQlwY2lfZGV2X3B1dChteXBkZXYpOwogCQkJCWlmKCgodjIgJiAweDA2KSA9PSAyKSB8fCAoKHYyICYgMHgwNikgPT0gNCkpCiAJCQkJCXYyICY9IDB4Zjk7CiAJCQkJdjIgfD0gMHgwODsKIAkJCQl2MSAmPSAweGZlOwogCQkJfSBlbHNlIHsKLQkJCQlteXBkZXYgPSBTSVNfUENJX0dFVF9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSSwgMHgwNzM1LCBOVUxMKTsKKwkJCQlteXBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NJLCAweDA3MzUsIE5VTEwpOwogCQkJCWlmKCFteXBkZXYpCi0JCQkJCW15cGRldiA9IFNJU19QQ0lfR0VUX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJLCAweDA2NDUsIE5VTEwpOworCQkJCQlteXBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NJLCAweDA2NDUsIE5VTEwpOwogCQkJCWlmKCFteXBkZXYpCi0JCQkJCW15cGRldiA9IFNJU19QQ0lfR0VUX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJLCAweDA2NTAsIE5VTEwpOworCQkJCQlteXBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NJLCAweDA2NTAsIE5VTEwpOwogCQkJCWlmKG15cGRldikgewogCQkJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQobXlwZGV2LCAweDk0LCAmcmVnZCk7CiAJCQkJCXJlZ2QgJj0gMHhmZmZmZmVmZjsKIAkJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChteXBkZXYsIDB4OTQsIHJlZ2QpOwogCQkJCQl2MSAmPSAweGZlOwotCQkJCQlTSVNfUENJX1BVVF9ERVZJQ0UobXlwZGV2KTsKKwkJCQkJcGNpX2Rldl9wdXQobXlwZGV2KTsKIAkJCQl9IGVsc2UgaWYoc2lzZmJfZmluZF9ob3N0X2JyaWRnZShpdmlkZW8sIHBkZXYsIFBDSV9WRU5ET1JfSURfU0kpKSB7CiAJCQkJCXYxICY9IDB4ZmU7CiAJCQkJfSBlbHNlIGlmKHNpc2ZiX2ZpbmRfaG9zdF9icmlkZ2UoaXZpZGVvLCBwZGV2LCAweDExMDYpIHx8CkBAIC01MTk0LDEzICs1MTkzLDEzIEBACiAJCQlpZiggKCEodjEgJiAweDAyKSkgJiYgKHYyICYgMHgzMCkgJiYgKHJlZ2QgPCAweGNmKSApCiAJCQkJc2V0U0lTSURYUkVHKFNJU0NSLCAweDVmLCAweGYxLCAweDAxKTsKIAotCQkJaWYoKG15cGRldiA9IFNJU19QQ0lfR0VUX0RFVklDRSgweDEwZGUsIDB4MDFlMCwgTlVMTCkpKSB7CisJCQlpZigobXlwZGV2ID0gcGNpX2dldF9kZXZpY2UoMHgxMGRlLCAweDAxZTAsIE5VTEwpKSkgewogCQkJCS8qIFRPRE86IHNldCBDUjVmICYweGYxIHwgMHgwMSBmb3IgdmVyc2lvbiA2NTcwCiAJCQkJICogb2YgbmZvcmNlIDIgUk9NCiAJCQkJICovCiAJCQkJaWYoMCkKIAkJCQkJc2V0U0lTSURYUkVHKFNJU0NSLCAweDVmLCAweGYxLCAweDAxKTsKLQkJCQlTSVNfUENJX1BVVF9ERVZJQ0UobXlwZGV2KTsKKwkJCQlwY2lfZGV2X3B1dChteXBkZXYpOwogCQkJfQogCQl9CiAKQEAgLTUyMzYsOSArNTIzNSw5IEBACiAJCXNldFNJU0lEWFJFRyhTSVNDUiwgMHg3NSwgMHhlMCwgYmlvc1sweDRmZl0gJiAweDFmKTsKIAkJc2V0U0lTSURYUkVHKFNJU0NSLCAweDc2LCAweGUwLCBiaW9zWzB4NTAwXSAmIDB4MWYpOwogCQl2MSA9IGJpb3NbMHg1MDFdOwotCQlpZigobXlwZGV2ID0gU0lTX1BDSV9HRVRfREVWSUNFKDB4ODA4NiwgMHgyNTMwLCBOVUxMKSkpIHsKKwkJaWYoKG15cGRldiA9IHBjaV9nZXRfZGV2aWNlKDB4ODA4NiwgMHgyNTMwLCBOVUxMKSkpIHsKIAkJCXYxID0gMHhmMDsKLQkJCVNJU19QQ0lfUFVUX0RFVklDRShteXBkZXYpOworCQkJcGNpX2Rldl9wdXQobXlwZGV2KTsKIAkJfQogCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4NzcsIHYxKTsKIAl9CkBAIC01OTQ3LDcgKzU5NDYsNyBAQAogCiAJaWYoIWl2aWRlby0+c2lzdmdhX2VuYWJsZWQpIHsKIAkJaWYocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKLQkJCWlmKGl2aWRlby0+bmJyaWRnZSkgU0lTX1BDSV9QVVRfREVWSUNFKGl2aWRlby0+bmJyaWRnZSk7CisJCQlpZihpdmlkZW8tPm5icmlkZ2UpIHBjaV9kZXZfcHV0KGl2aWRlby0+bmJyaWRnZSk7CiAJCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJCQlrZnJlZShzaXNfZmJfaW5mbyk7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTU5NzQsNyArNTk3Myw3IEBACiAJCQkJCSJyZXF1aXJpbmcgQ2hyb250ZWwvR1BJTyBzZXR1cFxuIiwKIAkJCQkJbXljaHN3dGFibGVbaV0udmVuZG9yTmFtZSwKIAkJCQkJbXljaHN3dGFibGVbaV0uY2FyZE5hbWUpOwotCQkJCWl2aWRlby0+bHBjZGV2ID0gU0lTX1BDSV9HRVRfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIDB4MDAwOCwgTlVMTCk7CisJCQkJaXZpZGVvLT5scGNkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NJLCAweDAwMDgsIE5VTEwpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaSsrOwpAQCAtNTk4NCw3ICs1OTgzLDcgQEAKIAogI2lmZGVmIENPTkZJR19GQl9TSVNfMzE1CiAJaWYoKGl2aWRlby0+Y2hpcCA9PSBTSVNfNzYwKSAmJiAoaXZpZGVvLT5uYnJpZGdlKSkgewotCQlpdmlkZW8tPmxwY2RldiA9IFNJU19QQ0lfR0VUX1NMT1QoaXZpZGVvLT5uYnJpZGdlLT5idXMsICgyIDw8IDMpKTsKKwkJaXZpZGVvLT5scGNkZXYgPSBwY2lfZ2V0X3Nsb3QoaXZpZGVvLT5uYnJpZGdlLT5idXMsICgyIDw8IDMpKTsKIAl9CiAjZW5kaWYKIApAQCAtNjE0OSw5ICs2MTQ4LDkgQEAKIGVycm9yXzI6CXJlbGVhc2VfbWVtX3JlZ2lvbihpdmlkZW8tPm1taW9fYmFzZSwgaXZpZGVvLT5tbWlvX3NpemUpOwogZXJyb3JfMzoJdmZyZWUoaXZpZGVvLT5iaW9zX2FiYXNlKTsKIAkJaWYoaXZpZGVvLT5scGNkZXYpCi0JCQlTSVNfUENJX1BVVF9ERVZJQ0UoaXZpZGVvLT5scGNkZXYpOworCQkJcGNpX2Rldl9wdXQoaXZpZGVvLT5scGNkZXYpOwogCQlpZihpdmlkZW8tPm5icmlkZ2UpCi0JCQlTSVNfUENJX1BVVF9ERVZJQ0UoaXZpZGVvLT5uYnJpZGdlKTsKKwkJCXBjaV9kZXZfcHV0KGl2aWRlby0+bmJyaWRnZSk7CiAJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAkJaWYoIWl2aWRlby0+c2lzdmdhX2VuYWJsZWQpCiAJCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC02MzMxLDcwICs2MzMwLDYgQEAKIAogCQlzaXNmYl9zZXRfdnBhcm1zKGl2aWRlbyk7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQotCQkvKiAtLS0tLS0tLS0tLS0tLS0tIEZvciAyLjQ6IE5vdyBzd2l0Y2ggdGhlIG1vZGUgLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQkJcHJpbnRrKEtFUk5fSU5GTyAic2lzZmI6IFNldHRpbmcgbW9kZSAlZHglZHglZCAoJWRIeilcbiIsCi0JCQlpdmlkZW8tPnZpZGVvX3dpZHRoLCBpdmlkZW8tPnZpZGVvX2hlaWdodCwgaXZpZGVvLT52aWRlb19icHAsCi0JCQlpdmlkZW8tPnJlZnJlc2hfcmF0ZSk7Ci0KLQkJLyogRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGFjY2VsZXJhdGlvbiBpcyB0byBiZQotCQkgKiB1c2VkLiBOZWVkIHRvIGtub3cgYmVmb3JlIHByZS9wb3N0X3NldF9tb2RlKCkKLQkJICovCi0JCWl2aWRlby0+YWNjZWwgPSAwOwotCQlpdmlkZW8tPmRlZmF1bHRfdmFyLmFjY2VsX2ZsYWdzICY9IH5GQl9BQ0NFTEZfVEVYVDsKLQkJaWYoaXZpZGVvLT5zaXNmYl9hY2NlbCkgewotCQkJaXZpZGVvLT5hY2NlbCA9IC0xOwotCQkJaXZpZGVvLT5kZWZhdWx0X3Zhci5hY2NlbF9mbGFncyB8PSBGQl9BQ0NFTEZfVEVYVDsKLQkJfQotCi0JCS8qIE5vdyBzd2l0Y2ggdGhlIG1vZGUgKi8KLQkJc2lzZmJfcHJlX3NldG1vZGUoaXZpZGVvKTsKLQotCQlpZihTaVNTZXRNb2RlKCZpdmlkZW8tPlNpU19QciwgaXZpZGVvLT5tb2RlX25vKSA9PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInNpc2ZiOiBGYXRhbCBlcnJvcjogU2V0dGluZyBtb2RlWzB4JXhdIGZhaWxlZFxuIiwKLQkJCQkJCQkJCWl2aWRlby0+bW9kZV9ubyk7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJaW91bm1hcChpdmlkZW8tPm1taW9fdmJhc2UpOwotCQkJZ290byBlcnJvcl8wOwotCQl9Ci0KLQkJb3V0U0lTSURYUkVHKFNJU1NSLCBJTkRfU0lTX1BBU1NXT1JELCBTSVNfUEFTU1dPUkQpOwotCi0JCXNpc2ZiX3Bvc3Rfc2V0bW9kZShpdmlkZW8pOwotCi0JCS8qIE1heGltaXplIHJlZ2FyZGxlc3Mgb2Ygc2lzZmJfbWF4IGF0IHN0YXJ0dXAgKi8KLQkJaXZpZGVvLT5kZWZhdWx0X3Zhci55cmVzX3ZpcnR1YWwgPSAzMjc2NzsKLQotCQkvKiBGb3JjZSByZXNldCBvZiB4IHZpcnR1YWwgaW4gY3J0Y190b192YXIgKi8KLQkJaXZpZGVvLT5kZWZhdWx0X3Zhci54cmVzX3ZpcnR1YWwgPSAwOwotCi0JCS8qIENvcHkgbW9kZSB0aW1pbmcgdG8gdmFyICovCi0JCXNpc2ZiX2NydGNfdG9fdmFyKGl2aWRlbywgJml2aWRlby0+ZGVmYXVsdF92YXIpOwotCi0JCS8qIEZpbmQgb3V0IGFib3V0IHNjcmVlbiBwaXRjaCAqLwotCQlzaXNmYl9jYWxjX3BpdGNoKGl2aWRlbywgJml2aWRlby0+ZGVmYXVsdF92YXIpOwotCQlzaXNmYl9zZXRfcGl0Y2goaXZpZGVvKTsKLQotCQkvKiBJbml0IHRoZSBhY2NlbGVyYXRvciAoZG9lcyBub3RoaW5nIGN1cnJlbnRseSkgKi8KLQkJc2lzZmJfaW5pdGFjY2VsKGl2aWRlbyk7Ci0KLQkJLyogSW5pdCBzb21lIGZiaW5mbyBlbnRyaWVzICovCi0JCXNpc19mYl9pbmZvLT5ub2RlICA9IC0xOwotCQlzaXNfZmJfaW5mby0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOwotCQlzaXNfZmJfaW5mby0+ZmJvcHMgPSAmc2lzZmJfb3BzOwotCQlzaXNfZmJfaW5mby0+ZGlzcCAgPSAmaXZpZGVvLT5zaXNfZGlzcDsKLQkJc2lzX2ZiX2luZm8tPmJsYW5rID0gJnNpc2ZiX2JsYW5rOwotCQlzaXNfZmJfaW5mby0+c3dpdGNoX2NvbiA9ICZzaXNmYl9zd2l0Y2g7Ci0JCXNpc19mYl9pbmZvLT51cGRhdGV2YXIgID0gJnNpc2ZiX3VwZGF0ZV92YXI7Ci0JCXNpc19mYl9pbmZvLT5jaGFuZ2V2YXIgID0gTlVMTDsKLQkJc3RyY3B5KHNpc19mYl9pbmZvLT5mb250bmFtZSwgc2lzZmJfZm9udG5hbWUpOwotCi0JCXNpc2ZiX3NldF9kaXNwKC0xLCAmaXZpZGVvLT5kZWZhdWx0X3Zhciwgc2lzX2ZiX2luZm8pOwotCi0jZWxzZQkJLyogLS0tLS0tLS0tIEZvciAyLjY6IFNldHVwIGEgc29tZXdoYXQgc2FuZSBkZWZhdWx0IHZhciAtLS0tLS0tLS0tLS0gKi8KLQogCQlwcmludGsoS0VSTl9JTkZPICJzaXNmYjogRGVmYXVsdCBtb2RlIGlzICVkeCVkeCVkICglZEh6KVxuIiwKIAkJCWl2aWRlby0+dmlkZW9fd2lkdGgsIGl2aWRlby0+dmlkZW9faGVpZ2h0LCBpdmlkZW8tPnZpZGVvX2JwcCwKIAkJCWl2aWRlby0+cmVmcmVzaF9yYXRlKTsKQEAgLTY0NTQsNyArNjM4OSw2IEBACiAJCXNpc19mYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IGl2aWRlby0+cHNldWRvX3BhbGV0dGU7CiAKIAkJZmJfYWxsb2NfY21hcCgmc2lzX2ZiX2luZm8tPmNtYXAsIDI1NiAsIDApOwotI2VuZGlmCQkvKiAyLjYgKi8KIAogCQlwcmludGsoS0VSTl9ERUJVRyAic2lzZmI6IEluaXRpYWwgdmJmbGFncyAweCV4XG4iLCAoaW50KWl2aWRlby0+dmJmbGFncyk7CiAKQEAgLTY1NjQsMTAgKzY0OTgsMTAgQEAKIAl2ZnJlZShpdmlkZW8tPmJpb3NfYWJhc2UpOwogCiAJaWYoaXZpZGVvLT5scGNkZXYpCi0JCVNJU19QQ0lfUFVUX0RFVklDRShpdmlkZW8tPmxwY2Rldik7CisJCXBjaV9kZXZfcHV0KGl2aWRlby0+bHBjZGV2KTsKIAogCWlmKGl2aWRlby0+bmJyaWRnZSkKLQkJU0lTX1BDSV9QVVRfREVWSUNFKGl2aWRlby0+bmJyaWRnZSk7CisJCXBjaV9kZXZfcHV0KGl2aWRlby0+bmJyaWRnZSk7CiAKICNpZmRlZiBDT05GSUdfTVRSUgogCS8qIFJlbGVhc2UgTVRSUiByZWdpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2tlbGV0b25mYi5jIGIvZHJpdmVycy92aWRlby9za2VsZXRvbmZiLmMKaW5kZXggYmI5NmNiNi4uNjQ3NzllNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9za2VsZXRvbmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9za2VsZXRvbmZiLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqICBvZiBpdC4gCiAgKgogICogIEZpcnN0IHRoZSByb2xlcyBvZiBzdHJ1Y3QgZmJfaW5mbyBhbmQgc3RydWN0IGRpc3BsYXkgaGF2ZSBjaGFuZ2VkLiBTdHJ1Y3QKLSAqICBkaXNwbGF5IHdpbGwgZ28gYXdheS4gVGhlIHdheSB0aGUgdGhlIG5ldyBmcmFtZWJ1ZmZlciBjb25zb2xlIGNvZGUgd2lsbAorICogIGRpc3BsYXkgd2lsbCBnbyBhd2F5LiBUaGUgd2F5IHRoZSBuZXcgZnJhbWVidWZmZXIgY29uc29sZSBjb2RlIHdpbGwKICAqICB3b3JrIGlzIHRoYXQgaXQgd2lsbCBhY3QgdG8gdHJhbnNsYXRlIGRhdGEgYWJvdXQgdGhlIHR0eS9jb25zb2xlIGluIAogICogIHN0cnVjdCB2Y19kYXRhIHRvIGRhdGEgaW4gYSBkZXZpY2UgaW5kZXBlbmRlbnQgd2F5IGluIHN0cnVjdCBmYl9pbmZvLiBUaGVuCiAgKiAgdmFyaW91cyBmdW5jdGlvbnMgaW4gc3RydWN0IGZiX29wcyB3aWxsIGJlIGNhbGxlZCB0byBzdG9yZSB0aGUgZGV2aWNlIApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKICAgICAvKgogICAgICAqICBUaGlzIGlzIGp1c3Qgc2ltcGxlIHNhbXBsZSBjb2RlLgpAQCAtNjAsNiArNjEsMTEgQEAKICAgICAgKi8KIAogLyoKKyAqIERyaXZlciBkYXRhCisgKi8KK3N0YXRpYyBjaGFyICptb2RlX29wdGlvbiBfX2RldmluaXRkYXRhOworCisvKgogICogIElmIHlvdXIgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGJvYXJkcywgeW91IHNob3VsZCBtYWtlIHRoZSAgCiAgKiAgYmVsb3cgZGF0YSB0eXBlcyBhcnJheXMsIG9yIGFsbG9jYXRlIHRoZW0gZHluYW1pY2FsbHkgKHVzaW5nIGttYWxsb2MoKSkuIAogICovIApAQCAtNzgsNyArODQsNyBAQAogICogaWYgd2UgZG9uJ3QgdXNlIG1vZGVkYi4gSWYgd2UgZG8gdXNlIG1vZGVkYiBzZWUgeHh4ZmJfaW5pdCBob3cgdG8gdXNlIGl0CiAgKiB0byBnZXQgYSBmYl92YXJfc2NyZWVuaW5mby4gT3RoZXJ3aXNlIGRlZmluZSBhIGRlZmF1bHQgdmFyIGFzIHdlbGwuIAogICovCi1zdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIHh4eGZiX2ZpeCBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyB4eHhmYl9maXggX19kZXZpbml0ZGF0YSA9IHsKIAkuaWQgPQkJIkZCJ3MgbmFtZSIsIAogCS50eXBlID0JCUZCX1RZUEVfUEFDS0VEX1BJWEVMUywKIAkudmlzdWFsID0JRkJfVklTVUFMX1BTRVVET0NPTE9SLApAQCAtMTI2LDcgKzEzMiw2IEBACiBzdGF0aWMgc3RydWN0IHh4eF9wYXIgX19pbml0ZGF0YSBjdXJyZW50X3BhcjsKIAogaW50IHh4eGZiX2luaXQodm9pZCk7Ci1pbnQgeHh4ZmJfc2V0dXAoY2hhciopOwogCiAvKioKICAqCXh4eGZiX29wZW4gLSBPcHRpb25hbCBmdW5jdGlvbi4gQ2FsbGVkIHdoZW4gdGhlIGZyYW1lYnVmZmVyIGlzCkBAIC0xNDIsNyArMTQ3LDcgQEAKICAqCiAgKglSZXR1cm5zIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLCBvciB6ZXJvIG9uIHN1Y2Nlc3MuCiAgKi8KLXN0YXRpYyBpbnQgeHh4ZmJfb3Blbihjb25zdCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCitzdGF0aWMgaW50IHh4eGZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQogewogICAgIHJldHVybiAwOwogfQpAQCAtMTYxLDcgKzE2Niw3IEBACiAgKgogICoJUmV0dXJucyBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvciwgb3IgemVybyBvbiBzdWNjZXNzLgogICovCi1zdGF0aWMgaW50IHh4eGZiX3JlbGVhc2UoY29uc3Qgc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQorc3RhdGljIGludCB4eHhmYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKIHsKICAgICByZXR1cm4gMDsKIH0KQEAgLTI3OCw3ICsyODMsNyBAQAogICovCiBzdGF0aWMgaW50IHh4eGZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKIAkJCSAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwKLQkJCSAgIGNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvKQorCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAgICAgaWYgKHJlZ25vID49IDI1NikgIC8qIG5vLiBvZiBodyByZWdpc3RlcnMgKi8KICAgICAgICByZXR1cm4gLUVJTlZBTDsKQEAgLTQxNiw3ICs0MjEsNyBAQAogICogICAgICBSZXR1cm5zIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLCBvciB6ZXJvIG9uIHN1Y2Nlc3MuCiAgKi8KIHN0YXRpYyBpbnQgeHh4ZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvKQorCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKICAgICAvKgogICAgICAqIElmIHlvdXIgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBwYW5uaW5nLCBfZG9fIF9ub3RfIGltcGxlbWVudCB0aGlzCkBAIC00NTQsNyArNDU5LDcgQEAKICAqICAgICAgUmV0dXJuICEwIGZvciBhbnkgbW9kZXMgdGhhdCBhcmUgdW5pbXBsZW1lbnRlZC4KICAqCiAgKi8KLXN0YXRpYyBpbnQgeHh4ZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIGNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIGludCB4eHhmYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAgICAgLyogLi4uICovCiAgICAgcmV0dXJuIDA7CkBAIC00ODMsNyArNDg4LDcgQEAKICAqCWRlcGVuZGluZyBvbiB0aGUgcmFzdGVyaW5nIG9wZXJhdGlvbiB3aXRoIHRoZSB2YWx1ZSBvZiBjb2xvciB3aGljaAogICoJaXMgaW4gdGhlIGN1cnJlbnQgY29sb3IgZGVwdGggZm9ybWF0LgogICovCi12b2lkIHh4ZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKnAsIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVnaW9uKQordm9pZCB4eHhmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqcCwgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWdpb24pCiB7CiAvKglNZWFuaW5nIG9mIHN0cnVjdCBmYl9maWxscmVjdAogICoKQEAgLTYyMywxOSArNjI4LDYgQEAKIH0KIAogLyoqCi0gKgl4eHhmYl9wb2xsIC0gTk9UIGEgcmVxdWlyZWQgZnVuY3Rpb24uIFRoZSBwdXJwb3NlIG9mIHRoaXMKLSAqCQkgICAgIGZ1bmN0aW9uIGlzIHRvIHByb3ZpZGUgYSB3YXkgZm9yIHNvbWUgcHJvY2VzcwotICoJCSAgICAgdG8gd2FpdCB1bnRpbCBhIHNwZWNpZmljIGhhcmR3YXJlIGV2ZW50IG9jY3VycwotICoJCSAgICAgZm9yIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UuCi0gKiAJCQkJIAotICogICAgICBAaW5mbzogZnJhbWUgYnVmZmVyIHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgYSBzaW5nbGUgZnJhbWUgYnVmZmVyCi0gKglAd2FpdDogcG9sbCB0YWJsZSB3aGVyZSB3ZSBzdG9yZSBwcm9jZXNzIHRoYXQgYXdhaXQgYSBldmVudC4gICAgIAotICovCi12b2lkIHh4eGZiX3BvbGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHBvbGxfdGFibGUgKndhaXQpCi17Ci19Ci0KLS8qKgogICoJeHh4ZmJfc3luYyAtIE5PVCBhIHJlcXVpcmVkIGZ1bmN0aW9uLiBOb3JtYWxseSB0aGUgYWNjZWwgZW5naW5lIAogICoJCSAgICAgZm9yIGEgZ3JhcGhpY3MgY2FyZCB0YWtlIGEgc3BlY2lmaWMgYW1vdW50IG9mIHRpbWUuCiAgKgkJICAgICBPZnRlbiB3ZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBhY2NlbGVyYXRvciB0byBmaW5pc2gKQEAgLTY0NywyMSArNjM5LDQ5IEBACiAgKiAgICAgIElmIHRoZSBkcml2ZXIgaGFzIGltcGxlbWVudGVkIGl0cyBvd24gaGFyZHdhcmUtYmFzZWQgZHJhd2luZyBmdW5jdGlvbiwKICAqICAgICAgaW1wbGVtZW50aW5nIHRoaXMgZnVuY3Rpb24gaXMgaGlnaGx5IHJlY29tbWVuZGVkLgogICovCi12b2lkIHh4eGZiX3N5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pCitpbnQgeHh4ZmJfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKKwlyZXR1cm4gMDsKIH0KIAogICAgIC8qCisgICAgICogIEZyYW1lIGJ1ZmZlciBvcGVyYXRpb25zCisgICAgICovCisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHh4eGZiX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmZiX29wZW4JPSB4eHhmYl9vcGVuLAorCS5mYl9yZWFkCT0geHh4ZmJfcmVhZCwKKwkuZmJfd3JpdGUJPSB4eHhmYl93cml0ZSwKKwkuZmJfcmVsZWFzZQk9IHh4eGZiX3JlbGVhc2UsCisJLmZiX2NoZWNrX3Zhcgk9IHh4eGZiX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3Bhcgk9IHh4eGZiX3NldF9wYXIsCisJLmZiX3NldGNvbHJlZwk9IHh4eGZiX3NldGNvbHJlZywKKwkuZmJfYmxhbmsJPSB4eHhmYl9ibGFuaywKKwkuZmJfcGFuX2Rpc3BsYXkJPSB4eHhmYl9wYW5fZGlzcGxheSwKKwkuZmJfZmlsbHJlY3QJPSB4eHhmYl9maWxscmVjdCwgCS8qIE5lZWRlZCAhISEgKi8KKwkuZmJfY29weWFyZWEJPSB4eHhmYl9jb3B5YXJlYSwJLyogTmVlZGVkICEhISAqLworCS5mYl9pbWFnZWJsaXQJPSB4eHhmYl9pbWFnZWJsaXQsCS8qIE5lZWRlZCAhISEgKi8KKwkuZmJfY3Vyc29yCT0geHh4ZmJfY3Vyc29yLAkJLyogT3B0aW9uYWwgISEhICovCisJLmZiX3JvdGF0ZQk9IHh4eGZiX3JvdGF0ZSwKKwkuZmJfc3luYwk9IHh4eGZiX3N5bmMsCisJLmZiX2lvY3RsCT0geHh4ZmJfaW9jdGwsCisJLmZiX21tYXAJPSB4eHhmYl9tbWFwLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgLyoKICAgICAgKiAgSW5pdGlhbGl6YXRpb24KICAgICAgKi8KIAogLyogc3RhdGljIGludCBfX2luaXQgeHhmYl9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKSAtLSBmb3IgcGxhdGZvcm0gZGV2cyAqLwotc3RhdGljIGludCBfX2luaXQgeHh4ZmJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJCSAgICAgIGNvbnN0X3N0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB4eHhmYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKICAgICBzdHJ1Y3QgeHh4X3BhciAqcGFyOwotICAgIHN0cnVjdCBkZXZpY2UgPSAmZGV2LT5kZXY7IC8qIGZvciBwY2kgZHJpdmVycyAqLworICAgIHN0cnVjdCBkZXZpY2UqIGRldmljZSA9ICZkZXYtPmRldjsgLyogZm9yIHBjaSBkcml2ZXJzICovCiAgICAgaW50IGNtYXBfbGVuLCByZXR2YWw7CQogICAgCiAgICAgLyoKQEAgLTY4NCw3ICs3MDQsNyBAQAogICAgIGluZm8tPnNjcmVlbl9iYXNlID0gZnJhbWVidWZmZXJfdmlydHVhbF9tZW1vcnk7CiAgICAgaW5mby0+ZmJvcHMgPSAmeHh4ZmJfb3BzOwogICAgIGluZm8tPmZpeCA9IHh4eGZiX2ZpeDsgLyogdGhpcyB3aWxsIGJlIHRoZSBvbmx5IHRpbWUgeHh4ZmJfZml4IHdpbGwgYmUKLQkJCSAgICAqIHVzZWQsIHNvIG1hcmsgaXQgYXMgX19pbml0ZGF0YQorCQkJICAgICogdXNlZCwgc28gbWFyayBpdCBhcyBfX2RldmluaXRkYXRhCiAJCQkgICAgKi8KICAgICBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHBzZXVkb19wYWxldHRlOyAvKiBUaGUgcHNldWRvcGFsZXR0ZSBpcyBhbgogCQkJCQkgICAgKiAxNi1tZW1iZXIgYXJyYXkKQEAgLTc2MCw3ICs3ODAsNyBAQAogICAgICAqCiAgICAgICogTk9URTogVGhpcyBmaWVsZCBpcyBjdXJyZW50bHkgdW51c2VkLgogICAgICAqLwotICAgIGluZm8tPnBpeG1hcC5zY2FuX2FsaWduID0gMzIKKyAgICBpbmZvLT5waXhtYXAuc2Nhbl9hbGlnbiA9IDMyOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEVuZCBvcHRpb25hbCBzdGFnZSAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICAgICAvKgpAQCAtNzcwLDEzICs3OTAsMTMgQEAKICAgICBpZiAoIW1vZGVfb3B0aW9uKQogCW1vZGVfb3B0aW9uID0gIjY0MHg0ODBANjAiOwkgCQogCi0gICAgcmV0dmFsID0gZmJfZmluZF9tb2RlKGluZm8tPnZhciwgaW5mbywgbW9kZV9vcHRpb24sIE5VTEwsIDAsIE5VTEwsIDgpOworICAgIHJldHZhbCA9IGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBtb2RlX29wdGlvbiwgTlVMTCwgMCwgTlVMTCwgOCk7CiAgIAogICAgIGlmICghcmV0dmFsIHx8IHJldHZhbCA9PSA0KQogCXJldHVybiAtRUlOVkFMOwkJCQogCiAgICAgLyogVGhpcyBoYXMgdG8gYmVlbiBkb25lICEhISAqLwkKLSAgICBmYl9hbGxvY19jbWFwKGluZm8tPmNtYXAsIGNtYXBfbGVuLCAwKTsKKyAgICBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCBjbWFwX2xlbiwgMCk7CiAJCiAgICAgLyogCiAgICAgICogVGhlIGZvbGxvd2luZyBpcyBkb25lIGluIHRoZSBjYXNlIG9mIGhhdmluZyBoYXJkd2FyZSB3aXRoIGEgc3RhdGljIApAQCAtODExLDM0ICs4MzEsNzcgQEAKICAgICAvKgogICAgICAqICBDbGVhbnVwCiAgICAgICovCi0vKiBzdGF0aWMgdm9pZCBfX2V4aXQgeHh4ZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkgKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCB4eHhmYl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKKy8qIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB4eHhmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKSAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IHh4eGZiX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZfZGF0YShkZXYpOwotCS8qIG9yIGRldl9nZXRfZHJ2X2RhdGEoZGV2aWNlKTsgKi8KKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCS8qIG9yIGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOyAqLwogCiAJaWYgKGluZm8pIHsKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKLQkJZmJfZGVhbGxvY19jbWFwKCZpbmZvLmNtYXApOworCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCQkvKiAuLi4gKi8KIAkJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIAl9Cit9CiAKKyNpZmRlZiBDT05GSUdfUENJCisjaWZkZWYgQ09ORklHX1BNCisvKioKKyAqCXh4eGZiX3N1c3BlbmQgLSBPcHRpb25hbCBidXQgcmVjb21tZW5kZWQgZnVuY3Rpb24uIFN1c3BlbmQgdGhlIGRldmljZS4KKyAqCUBkZXY6IFBDSSBkZXZpY2UKKyAqCUBtc2c6IHRoZSBzdXNwZW5kIGV2ZW50IGNvZGUuCisgKgorICogICAgICBTZWUgRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICovCitzdGF0aWMgaW50IHh4eGZiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB4eHhmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCS8qIHN1c3BlbmQgaGVyZSAqLwogCXJldHVybiAwOwogfQogCi0jaWYgQ09ORklHX1BDSQorLyoqCisgKgl4eHhmYl9yZXN1bWUgLSBPcHRpb25hbCBidXQgcmVjb21tZW5kZWQgZnVuY3Rpb24uIFJlc3VtZSB0aGUgZGV2aWNlLgorICoJQGRldjogUENJIGRldmljZQorICoKKyAqICAgICAgU2VlIERvY3VtZW50YXRpb24vcG93ZXIvZGV2aWNlcy50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqLworc3RhdGljIGludCB4eHhmYl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB4eHhmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCS8qIHJlc3VtZSBoZXJlICovCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB4eHhmYl9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgeHh4ZmJfcmVzdW1lIE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHh4eGZiX2lkX3RhYmxlW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEX1hYWCwgUENJX0RFVklDRV9JRF9YWFgsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZIDw8IDE2LAorCSAgUENJX0NMQVNTX01BU0ssIDAgfSwKKwl7IDAsIH0KK307CisKIC8qIEZvciBQQ0kgZHJpdmVycyAqLwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHh4eGZiX2RyaXZlciA9IHsKIAkubmFtZSA9CQkieHh4ZmIiLAotCS5pZF90YWJsZSA9CXh4eGZiX2RldmljZXMsCisJLmlkX3RhYmxlID0JeHh4ZmJfaWRfdGFibGUsCiAJLnByb2JlID0JeHh4ZmJfcHJvYmUsCiAJLnJlbW92ZSA9CV9fZGV2ZXhpdF9wKHh4eGZiX3JlbW92ZSksCi0JLnN1c3BlbmQgPSAgICAgIHh4eGZiX3N1c3BlbmQsIC8qIG9wdGlvbmFsICovCi0JLnJlc3VtZSA9ICAgICAgIHh4eGZiX3Jlc3VtZSwgIC8qIG9wdGlvbmFsICovCisJLnN1c3BlbmQgPSAgICAgIHh4eGZiX3N1c3BlbmQsIC8qIG9wdGlvbmFsIGJ1dCByZWNvbW1lbmRlZCAqLworCS5yZXN1bWUgPSAgICAgICB4eHhmYl9yZXN1bWUsICAvKiBvcHRpb25hbCBidXQgcmVjb21tZW5kZWQgKi8KIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHh4eGZiX2luaXQodm9pZCkKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB4eHhmYl9pZF90YWJsZSk7CisKK2ludCBfX2luaXQgeHh4ZmJfaW5pdCh2b2lkKQogewogCS8qCiAJICogIEZvciBrZXJuZWwgYm9vdCBvcHRpb25zIChpbiAndmlkZW89eHh4ZmI6PG9wdGlvbnM+JyBmb3JtYXQpCkBAIC04NTgsMjIgKzkyMSw3NCBAQAogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmeHh4ZmJfZHJpdmVyKTsKIH0KLSNlbHNlCisjZWxzZSAvKiBub24gUENJLCBwbGF0Zm9ybSBkcml2ZXJzICovCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAvKiBmb3IgcGxhdGZvcm0gZGV2aWNlcyAqLworCisjaWZkZWYgQ09ORklHX1BNCisvKioKKyAqCXh4eGZiX3N1c3BlbmQgLSBPcHRpb25hbCBidXQgcmVjb21tZW5kZWQgZnVuY3Rpb24uIFN1c3BlbmQgdGhlIGRldmljZS4KKyAqCUBkZXY6IHBsYXRmb3JtIGRldmljZQorICoJQG1zZzogdGhlIHN1c3BlbmQgZXZlbnQgY29kZS4KKyAqCisgKiAgICAgIFNlZSBEb2N1bWVudGF0aW9uL3Bvd2VyL2RldmljZXMudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uCisgKi8KK3N0YXRpYyBpbnQgeHh4ZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB4eHhmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCS8qIHN1c3BlbmQgaGVyZSAqLworCXJldHVybiAwOworfQorCisvKioKKyAqCXh4eGZiX3Jlc3VtZSAtIE9wdGlvbmFsIGJ1dCByZWNvbW1lbmRlZCBmdW5jdGlvbi4gUmVzdW1lIHRoZSBkZXZpY2UuCisgKglAZGV2OiBwbGF0Zm9ybSBkZXZpY2UKKyAqCisgKiAgICAgIFNlZSBEb2N1bWVudGF0aW9uL3Bvd2VyL2RldmljZXMudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uCisgKi8KK3N0YXRpYyBpbnQgeHh4ZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHh4eGZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJLyogcmVzdW1lIGhlcmUgKi8KKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHh4eGZiX3N1c3BlbmQgTlVMTAorI2RlZmluZSB4eHhmYl9yZXN1bWUgTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCiBzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgeHh4ZmJfZHJpdmVyID0gewogCS5uYW1lID0gInh4eGZiIiwKIAkuYnVzICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKIAkucHJvYmUgPSB4eHhmYl9wcm9iZSwKIAkucmVtb3ZlID0geHh4ZmJfcmVtb3ZlLAotCS5zdXNwZW5kID0geHh4ZmJfc3VzcGVuZCwgLyogb3B0aW9uYWwgKi8KLQkucmVzdW1lID0geHh4ZmJfcmVzdW1lLCAgIC8qIG9wdGlvbmFsICovCisJLnN1c3BlbmQgPSB4eHhmYl9zdXNwZW5kLCAvKiBvcHRpb25hbCBidXQgcmVjb21tZW5kZWQgKi8KKwkucmVzdW1lID0geHh4ZmJfcmVzdW1lLCAgIC8qIG9wdGlvbmFsIGJ1dCByZWNvbW1lbmRlZCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgeHh4ZmJfZGV2aWNlID0gewogCS5uYW1lID0gInh4eGZiIiwKIH07CiAKKyNpZm5kZWYgTU9EVUxFCisgICAgLyoKKyAgICAgKiAgU2V0dXAKKyAgICAgKi8KKworLyoKKyAqIE9ubHkgbmVjZXNzYXJ5IGlmIHlvdXIgZHJpdmVyIHRha2VzIHNwZWNpYWwgb3B0aW9ucywKKyAqIG90aGVyd2lzZSB3ZSBmYWxsIGJhY2sgb24gdGhlIGdlbmVyaWMgZmJfc2V0dXAoKS4KKyAqLworaW50IF9faW5pdCB4eHhmYl9zZXR1cChjaGFyICpvcHRpb25zKQoreworICAgIC8qIFBhcnNlIHVzZXIgc3BlZmljaWVkIG9wdGlvbnMgKGB2aWRlbz14eHhmYjonKSAqLworfQorI2VuZGlmIC8qIE1PRFVMRSAqLworCiBzdGF0aWMgaW50IF9faW5pdCB4eHhmYl9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTkwMyw0OCArMTAxOCw3IEBACiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnh4eGZiX2RldmljZSk7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJnh4eGZiX2RyaXZlcik7CiB9Ci0jZW5kaWYKLQotICAgIC8qCi0gICAgICogIFNldHVwCi0gICAgICovCi0KLS8qIAotICogT25seSBuZWNlc3NhcnkgaWYgeW91ciBkcml2ZXIgdGFrZXMgc3BlY2lhbCBvcHRpb25zLAotICogb3RoZXJ3aXNlIHdlIGZhbGwgYmFjayBvbiB0aGUgZ2VuZXJpYyBmYl9zZXR1cCgpLgotICovCi1pbnQgX19pbml0IHh4eGZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCi17Ci0gICAgLyogUGFyc2UgdXNlciBzcGVmaWNpZWQgb3B0aW9ucyAoYHZpZGVvPXh4eGZiOicpICovCi19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotICAgIC8qCi0gICAgICogIEZyYW1lIGJ1ZmZlciBvcGVyYXRpb25zCi0gICAgICovCi0KLXN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHh4eGZiX29wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmZiX29wZW4JPSB4eHhmYl9vcGVuLAotCS5mYl9yZWFkCT0geHh4ZmJfcmVhZCwKLQkuZmJfd3JpdGUJPSB4eHhmYl93cml0ZSwKLQkuZmJfcmVsZWFzZQk9IHh4eGZiX3JlbGVhc2UsCi0JLmZiX2NoZWNrX3Zhcgk9IHh4eGZiX2NoZWNrX3ZhciwKLQkuZmJfc2V0X3Bhcgk9IHh4eGZiX3NldF9wYXIsCQotCS5mYl9zZXRjb2xyZWcJPSB4eHhmYl9zZXRjb2xyZWcsCi0JLmZiX2JsYW5rCT0geHh4ZmJfYmxhbmssCi0JLmZiX3Bhbl9kaXNwbGF5CT0geHh4ZmJfcGFuX2Rpc3BsYXksCQotCS5mYl9maWxscmVjdAk9IHh4eGZiX2ZpbGxyZWN0LCAJLyogTmVlZGVkICEhISAqLyAKLQkuZmJfY29weWFyZWEJPSB4eHhmYl9jb3B5YXJlYSwJLyogTmVlZGVkICEhISAqLyAKLQkuZmJfaW1hZ2VibGl0CT0geHh4ZmJfaW1hZ2VibGl0LAkvKiBOZWVkZWQgISEhICovCi0JLmZiX2N1cnNvcgk9IHh4eGZiX2N1cnNvciwJCS8qIE9wdGlvbmFsICEhISAqLwotCS5mYl9yb3RhdGUJPSB4eHhmYl9yb3RhdGUsCi0JLmZiX3BvbGwJPSB4eHhmYl9wb2xsLAotCS5mYl9zeW5jCT0geHh4ZmJfc3luYywKLQkuZmJfaW9jdGwJPSB4eHhmYl9pb2N0bCwKLQkuZmJfbW1hcAk9IHh4eGZiX21tYXAsCQotfTsKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtOTU0LDYgKzEwMjgsNiBAQAogICAgICAqLwogCiBtb2R1bGVfaW5pdCh4eHhmYl9pbml0KTsKLW1vZHVsZV9leGl0KHh4eGZiX2NsZWFudXApOworbW9kdWxlX2V4aXQoeHh4ZmJfcmVtb3ZlKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zbTUwMWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwppbmRleCAwYTQ0YzQ0Li5jODZkZjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwpAQCAtOTg5LDcgKzk4OSw3IEBACiAJCQkoKGluZm8tPmNtYXAuZ3JlZW5bZmdfY29sXSAmIDB4RkMpIDw8IDMpIHwKIAkJCSgoaW5mby0+Y21hcC5ibHVlW2ZnX2NvbF0gJiAweEY4KSA+PiAzKTsKIAotCQlkZXZfZGJnKGZiaS0+ZGV2LCAiZmdjb2wgJTA4eCwgYmdjb2wgJTA4eFxuIiwgZmcsIGJnKTsKKwkJZGV2X2RiZyhmYmktPmRldiwgImZnY29sICUwOGx4LCBiZ2NvbCAlMDhseFxuIiwgZmcsIGJnKTsKIAogCQl3cml0ZWwoYmcsIGJhc2UgKyBTTTUwMV9PRkZfSFdDX0NPTE9SXzFfMik7CiAJCXdyaXRlbChmZywgYmFzZSArIFNNNTAxX09GRl9IV0NfQ09MT1JfMyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3N2Z2FsaWIuYyBiL2RyaXZlcnMvdmlkZW8vc3ZnYWxpYi5jCmluZGV4IDY4YjMwZDkuLjI1ZGY5MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc3ZnYWxpYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc3ZnYWxpYi5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIHZvaWQgc3ZnYV9zZXR0aWxlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfdGlsZW1hcCAqbWFwKQogewogCWNvbnN0IHU4ICpmb250ID0gbWFwLT5kYXRhOwotCXU4KiBmYiA9ICh1OCAqKSBpbmZvLT5zY3JlZW5fYmFzZTsKKwl1OCBfX2lvbWVtICpmYiA9ICh1OCBfX2lvbWVtICopaW5mby0+c2NyZWVuX2Jhc2U7CiAJaW50IGksIGM7CiAKIAlpZiAoKG1hcC0+d2lkdGggIT0gOCkgfHwgKG1hcC0+aGVpZ2h0ICE9IDE2KSB8fApAQCAtMjA3LDcgKzIwNyw4IEBACiAJZmIgKz0gMjsKIAlmb3IgKGMgPSAwOyBjIDwgbWFwLT5sZW5ndGg7IGMrKykgewogCQlmb3IgKGkgPSAwOyBpIDwgbWFwLT5oZWlnaHQ7IGkrKykgewotCQkJZmJbaSAqIDRdID0gZm9udFtpXTsKKwkJCWZiX3dyaXRlYihmb250W2ldLCBmYiArIGkgKiA0KTsKKy8vCQkJZmJbaSAqIDRdID0gZm9udFtpXTsKIAkJfQogCQlmYiArPSAxMjg7CiAJCWZvbnQgKz0gbWFwLT5oZWlnaHQ7CkBAIC0yMjEsOCArMjIyLDggQEAKIAkvKiAgY29sc3RyaWRlIGlzIGhhbHZlZCBpbiB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgdTE2IGFyZSB1c2VkICovCiAJaW50IGNvbHN0cmlkZSA9IDEgPDwgKGluZm8tPmZpeC50eXBlX2F1eCAmIEZCX0FVWF9URVhUX1NWR0FfTUFTSyk7CiAJaW50IHJvd3N0cmlkZSA9IGNvbHN0cmlkZSAqIChpbmZvLT52YXIueHJlc192aXJ0dWFsIC8gOCk7Ci0JdTE2ICpmYiA9ICh1MTYgKikgaW5mby0+c2NyZWVuX2Jhc2U7Ci0JdTE2ICpzcmMsICpkc3Q7CisJdTE2IF9faW9tZW0gKmZiID0gKHUxNiBfX2lvbWVtICopIGluZm8tPnNjcmVlbl9iYXNlOworCXUxNiBfX2lvbWVtICpzcmMsICpkc3Q7CiAKIAlpZiAoKGFyZWEtPnN5ID4gYXJlYS0+ZHkpIHx8CiAJICAgICgoYXJlYS0+c3kgPT0gYXJlYS0+ZHkpICYmIChhcmVhLT5zeCA+IGFyZWEtPmR4KSkpIHsKQEAgLTIzOSwxMCArMjQwLDExIEBACiAJICAgIH0KIAogCWZvciAoZHkgPSAwOyBkeSA8IGFyZWEtPmhlaWdodDsgZHkrKykgewotCQl1MTYqIHNyYzIgPSBzcmM7Ci0JCXUxNiogZHN0MiA9IGRzdDsKKwkJdTE2IF9faW9tZW0gKnNyYzIgPSBzcmM7CisJCXUxNiBfX2lvbWVtICpkc3QyID0gZHN0OwogCQlmb3IgKGR4ID0gMDsgZHggPCBhcmVhLT53aWR0aDsgZHgrKykgewotCQkJKmRzdDIgPSAqc3JjMjsKKwkJCWZiX3dyaXRldyhmYl9yZWFkdyhzcmMyKSwgZHN0Mik7CisvLwkJCSpkc3QyID0gKnNyYzI7CiAJCQlzcmMyICs9IGNvbHN0cmlkZTsKIAkJCWRzdDIgKz0gY29sc3RyaWRlOwogCQl9CkBAIC0yNTgsMTQgKzI2MCwxNCBAQAogCWludCBjb2xzdHJpZGUgPSAyIDw8IChpbmZvLT5maXgudHlwZV9hdXggJiBGQl9BVVhfVEVYVF9TVkdBX01BU0spOwogCWludCByb3dzdHJpZGUgPSBjb2xzdHJpZGUgKiAoaW5mby0+dmFyLnhyZXNfdmlydHVhbCAvIDgpOwogCWludCBhdHRyID0gKDB4MEYgJiByZWN0LT5iZykgPDwgNCB8ICgweDBGICYgcmVjdC0+ZmcpOwotCXU4ICAqZmIgPSAodTggKikgaW5mby0+c2NyZWVuX2Jhc2U7CisJdTggX19pb21lbSAqZmIgPSAodTggX19pb21lbSAqKWluZm8tPnNjcmVlbl9iYXNlOwogCWZiICs9IHJlY3QtPnN4ICogY29sc3RyaWRlICsgcmVjdC0+c3kgKiByb3dzdHJpZGU7CiAKIAlmb3IgKGR5ID0gMDsgZHkgPCByZWN0LT5oZWlnaHQ7IGR5KyspIHsKLQkJdTgqIGZiMiA9IGZiOworCQl1OCBfX2lvbWVtICpmYjIgPSBmYjsKIAkJZm9yIChkeCA9IDA7IGR4IDwgcmVjdC0+d2lkdGg7IGR4KyspIHsKLQkJCWZiMlswXSA9IHJlY3QtPmluZGV4OwotCQkJZmIyWzFdID0gYXR0cjsKKwkJCWZiX3dyaXRlYihyZWN0LT5pbmRleCwgZmIyKTsKKwkJCWZiX3dyaXRlYihhdHRyLCBmYjIgKyAxKTsKIAkJCWZiMiArPSBjb2xzdHJpZGU7CiAJCX0KIAkJZmIgKz0gcm93c3RyaWRlOwpAQCAtMjc5LDE1ICsyODEsMTUgQEAKIAlpbnQgY29sc3RyaWRlID0gMiA8PCAoaW5mby0+Zml4LnR5cGVfYXV4ICYgRkJfQVVYX1RFWFRfU1ZHQV9NQVNLKTsKIAlpbnQgcm93c3RyaWRlID0gY29sc3RyaWRlICogKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgLyA4KTsKIAlpbnQgYXR0ciA9ICgweDBGICYgYmxpdC0+YmcpIDw8IDQgfCAoMHgwRiAmIGJsaXQtPmZnKTsKLQl1OCogZmIgPSAodTggKikgaW5mby0+c2NyZWVuX2Jhc2U7CisJdTggX19pb21lbSAqZmIgPSAodTggX19pb21lbSAqKWluZm8tPnNjcmVlbl9iYXNlOwogCWZiICs9IGJsaXQtPnN4ICogY29sc3RyaWRlICsgYmxpdC0+c3kgKiByb3dzdHJpZGU7CiAKIAlpPTA7CiAJZm9yIChkeT0wOyBkeSA8IGJsaXQtPmhlaWdodDsgZHkgKyspIHsKLQkJdTgqIGZiMiA9IGZiOworCQl1OCBfX2lvbWVtICpmYjIgPSBmYjsKIAkJZm9yIChkeCA9IDA7IGR4IDwgYmxpdC0+d2lkdGg7IGR4ICsrKSB7Ci0JCQlmYjJbMF0gPSBibGl0LT5pbmRpY2VzW2ldOwotCQkJZmIyWzFdID0gYXR0cjsKKwkJCWZiX3dyaXRlYihibGl0LT5pbmRpY2VzW2ldLCBmYjIpOworCQkJZmJfd3JpdGViKGF0dHIsIGZiMiArIDEpOwogCQkJZmIyICs9IGNvbHN0cmlkZTsKIAkJCWkgKys7CiAJCQlpZiAoaSA9PSBibGl0LT5sZW5ndGgpIHJldHVybjsKQEAgLTM0MCw2ICszNDIsMjggQEAKIAl2Z2Ffd2NydChOVUxMLCAweDBBLCBjcyk7IC8qIHNldCBjdXJzb3Igc3RhcnQgYW5kIGVuYWJsZSBpdCAqLwogfQogCitpbnQgc3ZnYV9nZXRfdGlsZW1heChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gMjU2OworfQorCisvKiBHZXQgY2FwYWJpbGl0aWVzIG9mIGFjY2VsZXJhdG9yIGJhc2VkIG9uIHRoZSBtb2RlICovCisKK3ZvaWQgc3ZnYV9nZXRfY2FwcyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2JsaXRfY2FwcyAqY2FwcywKKwkJICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCit7CisJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMCkgeworCQkvKiBjYW4gb25seSBzdXBwb3J0IDI1NiA4eDE2IGJpdG1hcCAqLworCQljYXBzLT54ID0gMSA8PCAoOCAtIDEpOworCQljYXBzLT55ID0gMSA8PCAoMTYgLSAxKTsKKwkJY2Fwcy0+bGVuID0gMjU2OworCX0gZWxzZSB7CisJCWNhcHMtPnggPSAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSA0KSA/IDEgPDwgKDggLSAxKSA6IH4odTMyKTA7CisJCWNhcHMtPnkgPSB+KHUzMikwOworCQljYXBzLT5sZW4gPSB+KHUzMikwOworCX0KK30KK0VYUE9SVF9TWU1CT0woc3ZnYV9nZXRfY2Fwcyk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtNjIxLDYgKzY0NSw3IEBACiBFWFBPUlRfU1lNQk9MKHN2Z2FfdGlsZWZpbGwpOwogRVhQT1JUX1NZTUJPTChzdmdhX3RpbGVibGl0KTsKIEVYUE9SVF9TWU1CT0woc3ZnYV90aWxlY3Vyc29yKTsKK0VYUE9SVF9TWU1CT0woc3ZnYV9nZXRfdGlsZW1heCk7CiAKIEVYUE9SVF9TWU1CT0woc3ZnYV9jb21wdXRlX3BsbCk7CiBFWFBPUlRfU1lNQk9MKHN2Z2FfY2hlY2tfdGltaW5ncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3N5c2NvcHlhcmVhLmMgYi9kcml2ZXJzL3ZpZGVvL3N5c2NvcHlhcmVhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhZjEwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vc3lzY29weWFyZWEuYwpAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqICBHZW5lcmljIEJpdCBCbG9jayBUcmFuc2ZlciBmb3IgZnJhbWUgYnVmZmVycyBsb2NhdGVkIGluIHN5c3RlbSBSQU0gd2l0aAorICogIHBhY2tlZCBwaXhlbHMgb2YgYW55IGRlcHRoLgorICoKKyAqICBCYXNlZCBhbG1vc3QgZW50aXJlbHkgZnJvbSBjZmJjb3B5YXJlYS5jICh3aGljaCBpcyBiYXNlZCBhbG1vc3QgZW50aXJlbHkKKyAqICBvbiBHZWVydCBVeXR0ZXJob2V2ZW4ncyBjb3B5YXJlYSByb3V0aW5lKQorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAgMjAwNyBBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXNAcG9sLm5ldD4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSAiZmJfZHJhdy5oIgorCisgICAgLyoKKyAgICAgKiAgR2VuZXJpYyBiaXR3aXNlIGNvcHkgYWxnb3JpdGhtCisgICAgICovCisKK3N0YXRpYyB2b2lkCitiaXRjcHkodW5zaWduZWQgbG9uZyAqZHN0LCBpbnQgZHN0X2lkeCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLAorCWludCBzcmNfaWR4LCBpbnQgYml0cywgdW5zaWduZWQgbikKK3sKKwl1bnNpZ25lZCBsb25nIGZpcnN0LCBsYXN0OworCWludCBjb25zdCBzaGlmdCA9IGRzdF9pZHgtc3JjX2lkeDsKKwlpbnQgbGVmdCwgcmlnaHQ7CisKKwlmaXJzdCA9IEZCX1NISUZUX0hJR0gofjBVTCwgZHN0X2lkeCk7CisJbGFzdCA9IH4oRkJfU0hJRlRfSElHSCh+MFVMLCAoZHN0X2lkeCtuKSAlIGJpdHMpKTsKKworCWlmICghc2hpZnQpIHsKKwkJLyogU2FtZSBhbGlnbm1lbnQgZm9yIHNvdXJjZSBhbmQgZGVzdCAqLworCQlpZiAoZHN0X2lkeCtuIDw9IGJpdHMpIHsKKwkJCS8qIFNpbmdsZSB3b3JkICovCisJCQlpZiAobGFzdCkKKwkJCQlmaXJzdCAmPSBsYXN0OworCQkJKmRzdCA9IGNvbXAoKnNyYywgKmRzdCwgZmlyc3QpOworCQl9IGVsc2UgeworCQkJLyogTXVsdGlwbGUgZGVzdGluYXRpb24gd29yZHMgKi8KKwkJCS8qIExlYWRpbmcgYml0cyAqLworIAkJCWlmIChmaXJzdCAhPSB+MFVMKSB7CisJCQkJKmRzdCA9IGNvbXAoKnNyYywgKmRzdCwgZmlyc3QpOworCQkJCWRzdCsrOworCQkJCXNyYysrOworCQkJCW4gLT0gYml0cyAtIGRzdF9pZHg7CisJCQl9CisKKwkJCS8qIE1haW4gY2h1bmsgKi8KKwkJCW4gLz0gYml0czsKKwkJCXdoaWxlIChuID49IDgpIHsKKwkJCQkqZHN0KysgPSAqc3JjKys7CisJCQkJKmRzdCsrID0gKnNyYysrOworCQkJCSpkc3QrKyA9ICpzcmMrKzsKKwkJCQkqZHN0KysgPSAqc3JjKys7CisJCQkJKmRzdCsrID0gKnNyYysrOworCQkJCSpkc3QrKyA9ICpzcmMrKzsKKwkJCQkqZHN0KysgPSAqc3JjKys7CisJCQkJKmRzdCsrID0gKnNyYysrOworCQkJCW4gLT0gODsKKwkJCX0KKwkJCXdoaWxlIChuLS0pCisJCQkJKmRzdCsrID0gKnNyYysrOworCisJCQkvKiBUcmFpbGluZyBiaXRzICovCisJCQlpZiAobGFzdCkKKwkJCQkqZHN0ID0gY29tcCgqc3JjLCAqZHN0LCBsYXN0KTsKKwkJfQorCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgZDAsIGQxOworCQlpbnQgbTsKKworCQkvKiBEaWZmZXJlbnQgYWxpZ25tZW50IGZvciBzb3VyY2UgYW5kIGRlc3QgKi8KKwkJcmlnaHQgPSBzaGlmdCAmIChiaXRzIC0gMSk7CisJCWxlZnQgPSAtc2hpZnQgJiAoYml0cyAtIDEpOworCisJCWlmIChkc3RfaWR4K24gPD0gYml0cykgeworCQkJLyogU2luZ2xlIGRlc3RpbmF0aW9uIHdvcmQgKi8KKwkJCWlmIChsYXN0KQorCQkJCWZpcnN0ICY9IGxhc3Q7CisJCQlpZiAoc2hpZnQgPiAwKSB7CisJCQkJLyogU2luZ2xlIHNvdXJjZSB3b3JkICovCisJCQkJKmRzdCA9IGNvbXAoKnNyYyA+PiByaWdodCwgKmRzdCwgZmlyc3QpOworCQkJfSBlbHNlIGlmIChzcmNfaWR4K24gPD0gYml0cykgeworCQkJCS8qIFNpbmdsZSBzb3VyY2Ugd29yZCAqLworCQkJCSpkc3QgPSBjb21wKCpzcmMgPDwgbGVmdCwgKmRzdCwgZmlyc3QpOworCQkJfSBlbHNlIHsKKwkJCQkvKiAyIHNvdXJjZSB3b3JkcyAqLworCQkJCWQwID0gKnNyYysrOworCQkJCWQxID0gKnNyYzsKKwkJCQkqZHN0ID0gY29tcChkMCA8PCBsZWZ0IHwgZDEgPj4gcmlnaHQsICpkc3QsCisJCQkJCSAgICBmaXJzdCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBNdWx0aXBsZSBkZXN0aW5hdGlvbiB3b3JkcyAqLworCQkJLyoqIFdlIG11c3QgYWx3YXlzIHJlbWVtYmVyIHRoZSBsYXN0IHZhbHVlIHJlYWQsCisJCQkgICAgYmVjYXVzZSBpbiBjYXNlIFNSQyBhbmQgRFNUIG92ZXJsYXAgYml0d2lzZSAoZS5nLgorCQkJICAgIHdoZW4gbW92aW5nIGp1c3Qgb25lIHBpeGVsIGluIDFicHApLCB3ZSBhbHdheXMKKwkJCSAgICBjb2xsZWN0IG9uZSBmdWxsIGxvbmcgZm9yIERTVCBhbmQgdGhhdCBtaWdodAorCQkJICAgIG92ZXJsYXAgd2l0aCB0aGUgY3VycmVudCBsb25nIGZyb20gU1JDLiBXZSBzdG9yZQorCQkJICAgIHRoaXMgdmFsdWUgaW4gJ2QwJy4gKi8KKwkJCWQwID0gKnNyYysrOworCQkJLyogTGVhZGluZyBiaXRzICovCisJCQlpZiAoc2hpZnQgPiAwKSB7CisJCQkJLyogU2luZ2xlIHNvdXJjZSB3b3JkICovCisJCQkJKmRzdCA9IGNvbXAoZDAgPj4gcmlnaHQsICpkc3QsIGZpcnN0KTsKKwkJCQlkc3QrKzsKKwkJCQluIC09IGJpdHMgLSBkc3RfaWR4OworCQkJfSBlbHNlIHsKKwkJCQkvKiAyIHNvdXJjZSB3b3JkcyAqLworCQkJCWQxID0gKnNyYysrOworCQkJCSpkc3QgPSBjb21wKGQwIDw8IGxlZnQgfCAqZHN0ID4+IHJpZ2h0LCAqZHN0LCBmaXJzdCk7CisJCQkJZDAgPSBkMTsKKwkJCQlkc3QrKzsKKwkJCQluIC09IGJpdHMgLSBkc3RfaWR4OworCQkJfQorCisJCQkvKiBNYWluIGNodW5rICovCisJCQltID0gbiAlIGJpdHM7CisJCQluIC89IGJpdHM7CisJCQl3aGlsZSAobiA+PSA0KSB7CisJCQkJZDEgPSAqc3JjKys7CisJCQkJKmRzdCsrID0gZDAgPDwgbGVmdCB8IGQxID4+IHJpZ2h0OworCQkJCWQwID0gZDE7CisJCQkJZDEgPSAqc3JjKys7CisJCQkJKmRzdCsrID0gZDAgPDwgbGVmdCB8IGQxID4+IHJpZ2h0OworCQkJCWQwID0gZDE7CisJCQkJZDEgPSAqc3JjKys7CisJCQkJKmRzdCsrID0gZDAgPDwgbGVmdCB8IGQxID4+IHJpZ2h0OworCQkJCWQwID0gZDE7CisJCQkJZDEgPSAqc3JjKys7CisJCQkJKmRzdCsrID0gZDAgPDwgbGVmdCB8IGQxID4+IHJpZ2h0OworCQkJCWQwID0gZDE7CisJCQkJbiAtPSA0OworCQkJfQorCQkJd2hpbGUgKG4tLSkgeworCQkJCWQxID0gKnNyYysrOworCQkJCSpkc3QrKyA9IGQwIDw8IGxlZnQgfCBkMSA+PiByaWdodDsKKwkJCQlkMCA9IGQxOworCQkJfQorCisJCQkvKiBUcmFpbGluZyBiaXRzICovCisJCQlpZiAobGFzdCkgeworCQkJCWlmIChtIDw9IHJpZ2h0KSB7CisJCQkJCS8qIFNpbmdsZSBzb3VyY2Ugd29yZCAqLworCQkJCQkqZHN0ID0gY29tcChkMCA8PCBsZWZ0LCAqZHN0LCBsYXN0KTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiAyIHNvdXJjZSB3b3JkcyAqLworIAkJCQkJZDEgPSAqc3JjOworCQkJCQkqZHN0ID0gY29tcChkMCA8PCBsZWZ0IHwgZDEgPj4gcmlnaHQsCisJCQkJCQkgICAgKmRzdCwgbGFzdCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCisgICAgLyoKKyAgICAgKiAgR2VuZXJpYyBiaXR3aXNlIGNvcHkgYWxnb3JpdGhtLCBvcGVyYXRpbmcgYmFja3dhcmQKKyAgICAgKi8KKworc3RhdGljIHZvaWQKK2JpdGNweV9yZXYodW5zaWduZWQgbG9uZyAqZHN0LCBpbnQgZHN0X2lkeCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLAorCSAgIGludCBzcmNfaWR4LCBpbnQgYml0cywgdW5zaWduZWQgbikKK3sKKwl1bnNpZ25lZCBsb25nIGZpcnN0LCBsYXN0OworCWludCBzaGlmdDsKKworCWRzdCArPSAobi0xKS9iaXRzOworCXNyYyArPSAobi0xKS9iaXRzOworCWlmICgobi0xKSAlIGJpdHMpIHsKKwkJZHN0X2lkeCArPSAobi0xKSAlIGJpdHM7CisJCWRzdCArPSBkc3RfaWR4ID4+IChmZnMoYml0cykgLSAxKTsKKwkJZHN0X2lkeCAmPSBiaXRzIC0gMTsKKwkJc3JjX2lkeCArPSAobi0xKSAlIGJpdHM7CisJCXNyYyArPSBzcmNfaWR4ID4+IChmZnMoYml0cykgLSAxKTsKKwkJc3JjX2lkeCAmPSBiaXRzIC0gMTsKKwl9CisKKwlzaGlmdCA9IGRzdF9pZHgtc3JjX2lkeDsKKworCWZpcnN0ID0gRkJfU0hJRlRfTE9XKH4wVUwsIGJpdHMgLSAxIC0gZHN0X2lkeCk7CisJbGFzdCA9IH4oRkJfU0hJRlRfTE9XKH4wVUwsIGJpdHMgLSAxIC0gKChkc3RfaWR4LW4pICUgYml0cykpKTsKKworCWlmICghc2hpZnQpIHsKKwkJLyogU2FtZSBhbGlnbm1lbnQgZm9yIHNvdXJjZSBhbmQgZGVzdCAqLworCQlpZiAoKHVuc2lnbmVkIGxvbmcpZHN0X2lkeCsxID49IG4pIHsKKwkJCS8qIFNpbmdsZSB3b3JkICovCisJCQlpZiAobGFzdCkKKwkJCQlmaXJzdCAmPSBsYXN0OworCQkJKmRzdCA9IGNvbXAoKnNyYywgKmRzdCwgZmlyc3QpOworCQl9IGVsc2UgeworCQkJLyogTXVsdGlwbGUgZGVzdGluYXRpb24gd29yZHMgKi8KKworCQkJLyogTGVhZGluZyBiaXRzICovCisJCQlpZiAoZmlyc3QgIT0gfjBVTCkgeworCQkJCSpkc3QgPSBjb21wKCpzcmMsICpkc3QsIGZpcnN0KTsKKwkJCQlkc3QtLTsKKwkJCQlzcmMtLTsKKwkJCQluIC09IGRzdF9pZHgrMTsKKwkJCX0KKworCQkJLyogTWFpbiBjaHVuayAqLworCQkJbiAvPSBiaXRzOworCQkJd2hpbGUgKG4gPj0gOCkgeworCQkJCSpkc3QtLSA9ICpzcmMtLTsKKwkJCQkqZHN0LS0gPSAqc3JjLS07CisJCQkJKmRzdC0tID0gKnNyYy0tOworCQkJCSpkc3QtLSA9ICpzcmMtLTsKKwkJCQkqZHN0LS0gPSAqc3JjLS07CisJCQkJKmRzdC0tID0gKnNyYy0tOworCQkJCSpkc3QtLSA9ICpzcmMtLTsKKwkJCQkqZHN0LS0gPSAqc3JjLS07CisJCQkJbiAtPSA4OworCQkJfQorCQkJd2hpbGUgKG4tLSkKKwkJCQkqZHN0LS0gPSAqc3JjLS07CisJCQkvKiBUcmFpbGluZyBiaXRzICovCisJCQlpZiAobGFzdCkKKwkJCQkqZHN0ID0gY29tcCgqc3JjLCAqZHN0LCBsYXN0KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIERpZmZlcmVudCBhbGlnbm1lbnQgZm9yIHNvdXJjZSBhbmQgZGVzdCAqLworCisJCWludCBjb25zdCBsZWZ0ID0gLXNoaWZ0ICYgKGJpdHMtMSk7CisJCWludCBjb25zdCByaWdodCA9IHNoaWZ0ICYgKGJpdHMtMSk7CisKKwkJaWYgKCh1bnNpZ25lZCBsb25nKWRzdF9pZHgrMSA+PSBuKSB7CisJCQkvKiBTaW5nbGUgZGVzdGluYXRpb24gd29yZCAqLworCQkJaWYgKGxhc3QpCisJCQkJZmlyc3QgJj0gbGFzdDsKKwkJCWlmIChzaGlmdCA8IDApIHsKKwkJCQkvKiBTaW5nbGUgc291cmNlIHdvcmQgKi8KKwkJCQkqZHN0ID0gY29tcCgqc3JjIDw8IGxlZnQsICpkc3QsIGZpcnN0KTsKKwkJCX0gZWxzZSBpZiAoMSsodW5zaWduZWQgbG9uZylzcmNfaWR4ID49IG4pIHsKKwkJCQkvKiBTaW5nbGUgc291cmNlIHdvcmQgKi8KKwkJCQkqZHN0ID0gY29tcCgqc3JjID4+IHJpZ2h0LCAqZHN0LCBmaXJzdCk7CisJCQl9IGVsc2UgeworCQkJCS8qIDIgc291cmNlIHdvcmRzICovCisJCQkJKmRzdCA9IGNvbXAoKnNyYyA+PiByaWdodCB8ICooc3JjLTEpIDw8IGxlZnQsCisJCQkJCSAgICAqZHN0LCBmaXJzdCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBNdWx0aXBsZSBkZXN0aW5hdGlvbiB3b3JkcyAqLworCQkJLyoqIFdlIG11c3QgYWx3YXlzIHJlbWVtYmVyIHRoZSBsYXN0IHZhbHVlIHJlYWQsCisJCQkgICAgYmVjYXVzZSBpbiBjYXNlIFNSQyBhbmQgRFNUIG92ZXJsYXAgYml0d2lzZSAoZS5nLgorCQkJICAgIHdoZW4gbW92aW5nIGp1c3Qgb25lIHBpeGVsIGluIDFicHApLCB3ZSBhbHdheXMKKwkJCSAgICBjb2xsZWN0IG9uZSBmdWxsIGxvbmcgZm9yIERTVCBhbmQgdGhhdCBtaWdodAorCQkJICAgIG92ZXJsYXAgd2l0aCB0aGUgY3VycmVudCBsb25nIGZyb20gU1JDLiBXZSBzdG9yZQorCQkJICAgIHRoaXMgdmFsdWUgaW4gJ2QwJy4gKi8KKwkJCXVuc2lnbmVkIGxvbmcgZDAsIGQxOworCQkJaW50IG07CisKKwkJCWQwID0gKnNyYy0tOworCQkJLyogTGVhZGluZyBiaXRzICovCisJCQlpZiAoc2hpZnQgPCAwKSB7CisJCQkJLyogU2luZ2xlIHNvdXJjZSB3b3JkICovCisJCQkJKmRzdCA9IGNvbXAoZDAgPDwgbGVmdCwgKmRzdCwgZmlyc3QpOworCQkJfSBlbHNlIHsKKwkJCQkvKiAyIHNvdXJjZSB3b3JkcyAqLworCQkJCWQxID0gKnNyYy0tOworCQkJCSpkc3QgPSBjb21wKGQwID4+IHJpZ2h0IHwgZDEgPDwgbGVmdCwgKmRzdCwKKwkJCQkJICAgIGZpcnN0KTsKKwkJCQlkMCA9IGQxOworCQkJfQorCQkJZHN0LS07CisJCQluIC09IGRzdF9pZHgrMTsKKworCQkJLyogTWFpbiBjaHVuayAqLworCQkJbSA9IG4gJSBiaXRzOworCQkJbiAvPSBiaXRzOworCQkJd2hpbGUgKG4gPj0gNCkgeworCQkJCWQxID0gKnNyYy0tOworCQkJCSpkc3QtLSA9IGQwID4+IHJpZ2h0IHwgZDEgPDwgbGVmdDsKKwkJCQlkMCA9IGQxOworCQkJCWQxID0gKnNyYy0tOworCQkJCSpkc3QtLSA9IGQwID4+IHJpZ2h0IHwgZDEgPDwgbGVmdDsKKwkJCQlkMCA9IGQxOworCQkJCWQxID0gKnNyYy0tOworCQkJCSpkc3QtLSA9IGQwID4+IHJpZ2h0IHwgZDEgPDwgbGVmdDsKKwkJCQlkMCA9IGQxOworCQkJCWQxID0gKnNyYy0tOworCQkJCSpkc3QtLSA9IGQwID4+IHJpZ2h0IHwgZDEgPDwgbGVmdDsKKwkJCQlkMCA9IGQxOworCQkJCW4gLT0gNDsKKwkJCX0KKwkJCXdoaWxlIChuLS0pIHsKKwkJCQlkMSA9ICpzcmMtLTsKKwkJCQkqZHN0LS0gPSBkMCA+PiByaWdodCB8IGQxIDw8IGxlZnQ7CisJCQkJZDAgPSBkMTsKKwkJCX0KKworCQkJLyogVHJhaWxpbmcgYml0cyAqLworCQkJaWYgKGxhc3QpIHsKKwkJCQlpZiAobSA8PSBsZWZ0KSB7CisJCQkJCS8qIFNpbmdsZSBzb3VyY2Ugd29yZCAqLworCQkJCQkqZHN0ID0gY29tcChkMCA+PiByaWdodCwgKmRzdCwgbGFzdCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogMiBzb3VyY2Ugd29yZHMgKi8KKwkJCQkJZDEgPSAqc3JjOworCQkJCQkqZHN0ID0gY29tcChkMCA+PiByaWdodCB8IGQxIDw8IGxlZnQsCisJCQkJCQkgICAgKmRzdCwgbGFzdCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCit2b2lkIHN5c19jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqcCwgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCXUzMiBkeCA9IGFyZWEtPmR4LCBkeSA9IGFyZWEtPmR5LCBzeCA9IGFyZWEtPnN4LCBzeSA9IGFyZWEtPnN5OworCXUzMiBoZWlnaHQgPSBhcmVhLT5oZWlnaHQsIHdpZHRoID0gYXJlYS0+d2lkdGg7CisJdW5zaWduZWQgbG9uZyBjb25zdCBiaXRzX3Blcl9saW5lID0gcC0+Zml4LmxpbmVfbGVuZ3RoKjh1OworCXVuc2lnbmVkIGxvbmcgKmRzdCA9IE5VTEwsICpzcmMgPSBOVUxMOworCWludCBiaXRzID0gQklUU19QRVJfTE9ORywgYnl0ZXMgPSBiaXRzID4+IDM7CisJaW50IGRzdF9pZHggPSAwLCBzcmNfaWR4ID0gMCwgcmV2X2NvcHkgPSAwOworCisJaWYgKHAtPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm47CisKKwkvKiBpZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0YXJnZXQgYXJlYSBtaWdodCBvdmVybGFwIHdpdGggdGhlIGVuZCBvZgorCXRoZSBzb3VyY2UgYXJlYSwgYmUgaGF2ZSB0byBjb3B5IHRoZSBhcmVhIHJldmVyc2UuICovCisJaWYgKChkeSA9PSBzeSAmJiBkeCA+IHN4KSB8fCAoZHkgPiBzeSkpIHsKKwkJZHkgKz0gaGVpZ2h0OworCQlzeSArPSBoZWlnaHQ7CisJCXJldl9jb3B5ID0gMTsKKwl9CisKKwkvKiBzcGxpdCB0aGUgYmFzZSBvZiB0aGUgZnJhbWVidWZmZXIgaW50byBhIGxvbmctYWxpZ25lZCBhZGRyZXNzIGFuZAorCSAgIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYml0ICovCisJZHN0ID0gc3JjID0gKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpcC0+c2NyZWVuX2Jhc2UgJgorCQkJCSAgICAgIH4oYnl0ZXMtMSkpOworCWRzdF9pZHggPSBzcmNfaWR4ID0gOCooKHVuc2lnbmVkIGxvbmcpcC0+c2NyZWVuX2Jhc2UgJiAoYnl0ZXMtMSkpOworCS8qIGFkZCBvZmZzZXQgb2Ygc291cmNlIGFuZCB0YXJnZXQgYXJlYSAqLworCWRzdF9pZHggKz0gZHkqYml0c19wZXJfbGluZSArIGR4KnAtPnZhci5iaXRzX3Blcl9waXhlbDsKKwlzcmNfaWR4ICs9IHN5KmJpdHNfcGVyX2xpbmUgKyBzeCpwLT52YXIuYml0c19wZXJfcGl4ZWw7CisKKwlpZiAocC0+ZmJvcHMtPmZiX3N5bmMpCisJCXAtPmZib3BzLT5mYl9zeW5jKHApOworCisJaWYgKHJldl9jb3B5KSB7CisJCXdoaWxlIChoZWlnaHQtLSkgeworCQkJZHN0X2lkeCAtPSBiaXRzX3Blcl9saW5lOworCQkJc3JjX2lkeCAtPSBiaXRzX3Blcl9saW5lOworCQkJZHN0ICs9IGRzdF9pZHggPj4gKGZmcyhiaXRzKSAtIDEpOworCQkJZHN0X2lkeCAmPSAoYnl0ZXMgLSAxKTsKKwkJCXNyYyArPSBzcmNfaWR4ID4+IChmZnMoYml0cykgLSAxKTsKKwkJCXNyY19pZHggJj0gKGJ5dGVzIC0gMSk7CisJCQliaXRjcHlfcmV2KGRzdCwgZHN0X2lkeCwgc3JjLCBzcmNfaWR4LCBiaXRzLAorCQkJCXdpZHRoKnAtPnZhci5iaXRzX3Blcl9waXhlbCk7CisJCX0KKwl9IGVsc2UgeworCQl3aGlsZSAoaGVpZ2h0LS0pIHsKKwkJCWRzdCArPSBkc3RfaWR4ID4+IChmZnMoYml0cykgLSAxKTsKKwkJCWRzdF9pZHggJj0gKGJ5dGVzIC0gMSk7CisJCQlzcmMgKz0gc3JjX2lkeCA+PiAoZmZzKGJpdHMpIC0gMSk7CisJCQlzcmNfaWR4ICY9IChieXRlcyAtIDEpOworCQkJYml0Y3B5KGRzdCwgZHN0X2lkeCwgc3JjLCBzcmNfaWR4LCBiaXRzLAorCQkJCXdpZHRoKnAtPnZhci5iaXRzX3Blcl9waXhlbCk7CisJCQlkc3RfaWR4ICs9IGJpdHNfcGVyX2xpbmU7CisJCQlzcmNfaWR4ICs9IGJpdHNfcGVyX2xpbmU7CisJCX0KKwl9Cit9CisKK0VYUE9SVF9TWU1CT0woc3lzX2NvcHlhcmVhKTsKKworTU9EVUxFX0FVVEhPUigiQW50b25pbm8gRGFwbGFzIDxhZGFwbGFzQHBvbC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgY29weWFyZWEgKHN5cy10by1zeXMpIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc3lzZmlsbHJlY3QuYyBiL2RyaXZlcnMvdmlkZW8vc3lzZmlsbHJlY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjYxZTllCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9zeXNmaWxscmVjdC5jCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogIEdlbmVyaWMgZmlsbHJlY3QgZm9yIGZyYW1lIGJ1ZmZlcnMgaW4gc3lzdGVtIFJBTSB3aXRoIHBhY2tlZCBwaXhlbHMgb2YKKyAqICBhbnkgZGVwdGguCisgKgorICogIEJhc2VkIGFsbW9zdCBlbnRpcmVseSBmcm9tIGNmYmZpbGxyZWN0LmMgKHdoaWNoIGlzIGJhc2VkIGFsbW9zdCBlbnRpcmVseQorICogIG9uIEdlZXJ0IFV5dHRlcmhvZXZlbidzIGZpbGxyZWN0IHJvdXRpbmUpCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpICAyMDA3IEFudG9uaW5vIERhcGxhcyA8YWRhcGxhc0Bwb2wubmV0PgorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSAiZmJfZHJhdy5oIgorCisgICAgLyoKKyAgICAgKiAgQWxpZ25lZCBwYXR0ZXJuIGZpbGwgdXNpbmcgMzIvNjQtYml0IG1lbW9yeSBhY2Nlc3NlcworICAgICAqLworCitzdGF0aWMgdm9pZAorYml0ZmlsbF9hbGlnbmVkKHVuc2lnbmVkIGxvbmcgKmRzdCwgaW50IGRzdF9pZHgsIHVuc2lnbmVkIGxvbmcgcGF0LAorCQl1bnNpZ25lZCBuLCBpbnQgYml0cykKK3sKKwl1bnNpZ25lZCBsb25nIGZpcnN0LCBsYXN0OworCisJaWYgKCFuKQorCQlyZXR1cm47CisKKwlmaXJzdCA9IEZCX1NISUZUX0hJR0gofjBVTCwgZHN0X2lkeCk7CisJbGFzdCA9IH4oRkJfU0hJRlRfSElHSCh+MFVMLCAoZHN0X2lkeCtuKSAlIGJpdHMpKTsKKworCWlmIChkc3RfaWR4K24gPD0gYml0cykgeworCQkvKiBTaW5nbGUgd29yZCAqLworCQlpZiAobGFzdCkKKwkJCWZpcnN0ICY9IGxhc3Q7CisJCSpkc3QgPSBjb21wKHBhdCwgKmRzdCwgZmlyc3QpOworCX0gZWxzZSB7CisJCS8qIE11bHRpcGxlIGRlc3RpbmF0aW9uIHdvcmRzICovCisKKwkJLyogTGVhZGluZyBiaXRzICovCisgCQlpZiAoZmlyc3QhPSB+MFVMKSB7CisJCQkqZHN0ID0gY29tcChwYXQsICpkc3QsIGZpcnN0KTsKKwkJCWRzdCsrOworCQkJbiAtPSBiaXRzIC0gZHN0X2lkeDsKKwkJfQorCisJCS8qIE1haW4gY2h1bmsgKi8KKwkJbiAvPSBiaXRzOworCQl3aGlsZSAobiA+PSA4KSB7CisJCQkqZHN0KysgPSBwYXQ7CisJCQkqZHN0KysgPSBwYXQ7CisJCQkqZHN0KysgPSBwYXQ7CisJCQkqZHN0KysgPSBwYXQ7CisJCQkqZHN0KysgPSBwYXQ7CisJCQkqZHN0KysgPSBwYXQ7CisJCQkqZHN0KysgPSBwYXQ7CisJCQkqZHN0KysgPSBwYXQ7CisJCQluIC09IDg7CisJCX0KKwkJd2hpbGUgKG4tLSkKKwkJCSpkc3QrKyA9IHBhdDsKKwkJLyogVHJhaWxpbmcgYml0cyAqLworCQlpZiAobGFzdCkKKwkJCSpkc3QgPSBjb21wKHBhdCwgKmRzdCwgbGFzdCk7CisJfQorfQorCisKKyAgICAvKgorICAgICAqICBVbmFsaWduZWQgZ2VuZXJpYyBwYXR0ZXJuIGZpbGwgdXNpbmcgMzIvNjQtYml0IG1lbW9yeSBhY2Nlc3NlcworICAgICAqICBUaGUgcGF0dGVybiBtdXN0IGhhdmUgYmVlbiBleHBhbmRlZCB0byBhIGZ1bGwgMzIvNjQtYml0IHZhbHVlCisgICAgICogIExlZnQvcmlnaHQgYXJlIHRoZSBhcHByb3ByaWF0ZSBzaGlmdHMgdG8gY29udmVydCB0byB0aGUgcGF0dGVybiB0byBiZQorICAgICAqICB1c2VkIGZvciB0aGUgbmV4dCAzMi82NC1iaXQgd29yZAorICAgICAqLworCitzdGF0aWMgdm9pZAorYml0ZmlsbF91bmFsaWduZWQodW5zaWduZWQgbG9uZyAqZHN0LCBpbnQgZHN0X2lkeCwgdW5zaWduZWQgbG9uZyBwYXQsCisJCSAgaW50IGxlZnQsIGludCByaWdodCwgdW5zaWduZWQgbiwgaW50IGJpdHMpCit7CisJdW5zaWduZWQgbG9uZyBmaXJzdCwgbGFzdDsKKworCWlmICghbikKKwkJcmV0dXJuOworCisJZmlyc3QgPSBGQl9TSElGVF9ISUdIKH4wVUwsIGRzdF9pZHgpOworCWxhc3QgPSB+KEZCX1NISUZUX0hJR0gofjBVTCwgKGRzdF9pZHgrbikgJSBiaXRzKSk7CisKKwlpZiAoZHN0X2lkeCtuIDw9IGJpdHMpIHsKKwkJLyogU2luZ2xlIHdvcmQgKi8KKwkJaWYgKGxhc3QpCisJCQlmaXJzdCAmPSBsYXN0OworCQkqZHN0ID0gY29tcChwYXQsICpkc3QsIGZpcnN0KTsKKwl9IGVsc2UgeworCQkvKiBNdWx0aXBsZSBkZXN0aW5hdGlvbiB3b3JkcyAqLworCQkvKiBMZWFkaW5nIGJpdHMgKi8KKwkJaWYgKGZpcnN0KSB7CisJCQkqZHN0ID0gY29tcChwYXQsICpkc3QsIGZpcnN0KTsKKwkJCWRzdCsrOworCQkJcGF0ID0gcGF0IDw8IGxlZnQgfCBwYXQgPj4gcmlnaHQ7CisJCQluIC09IGJpdHMgLSBkc3RfaWR4OworCQl9CisKKwkJLyogTWFpbiBjaHVuayAqLworCQluIC89IGJpdHM7CisJCXdoaWxlIChuID49IDQpIHsKKwkJCSpkc3QrKyA9IHBhdDsKKwkJCXBhdCA9IHBhdCA8PCBsZWZ0IHwgcGF0ID4+IHJpZ2h0OworCQkJKmRzdCsrID0gcGF0OworCQkJcGF0ID0gcGF0IDw8IGxlZnQgfCBwYXQgPj4gcmlnaHQ7CisJCQkqZHN0KysgPSBwYXQ7CisJCQlwYXQgPSBwYXQgPDwgbGVmdCB8IHBhdCA+PiByaWdodDsKKwkJCSpkc3QrKyA9IHBhdDsKKwkJCXBhdCA9IHBhdCA8PCBsZWZ0IHwgcGF0ID4+IHJpZ2h0OworCQkJbiAtPSA0OworCQl9CisJCXdoaWxlIChuLS0pIHsKKwkJCSpkc3QrKyA9IHBhdDsKKwkJCXBhdCA9IHBhdCA8PCBsZWZ0IHwgcGF0ID4+IHJpZ2h0OworCQl9CisKKwkJLyogVHJhaWxpbmcgYml0cyAqLworCQlpZiAobGFzdCkKKwkJCSpkc3QgPSBjb21wKHBhdCwgKmRzdCwgZmlyc3QpOworCX0KK30KKworICAgIC8qCisgICAgICogIEFsaWduZWQgcGF0dGVybiBpbnZlcnQgdXNpbmcgMzIvNjQtYml0IG1lbW9yeSBhY2Nlc3NlcworICAgICAqLworc3RhdGljIHZvaWQKK2JpdGZpbGxfYWxpZ25lZF9yZXYodW5zaWduZWQgbG9uZyAqZHN0LCBpbnQgZHN0X2lkeCwgdW5zaWduZWQgbG9uZyBwYXQsCisJCSAgICB1bnNpZ25lZCBuLCBpbnQgYml0cykKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCA9IHBhdDsKKwl1bnNpZ25lZCBsb25nIGZpcnN0LCBsYXN0OworCisJaWYgKCFuKQorCQlyZXR1cm47CisKKwlmaXJzdCA9IEZCX1NISUZUX0hJR0gofjBVTCwgZHN0X2lkeCk7CisJbGFzdCA9IH4oRkJfU0hJRlRfSElHSCh+MFVMLCAoZHN0X2lkeCtuKSAlIGJpdHMpKTsKKworCWlmIChkc3RfaWR4K24gPD0gYml0cykgeworCQkvKiBTaW5nbGUgd29yZCAqLworCQlpZiAobGFzdCkKKwkJCWZpcnN0ICY9IGxhc3Q7CisJCSpkc3QgPSBjb21wKCpkc3QgXiB2YWwsICpkc3QsIGZpcnN0KTsKKwl9IGVsc2UgeworCQkvKiBNdWx0aXBsZSBkZXN0aW5hdGlvbiB3b3JkcyAqLworCQkvKiBMZWFkaW5nIGJpdHMgKi8KKwkJaWYgKGZpcnN0IT0wVUwpIHsKKwkJCSpkc3QgPSBjb21wKCpkc3QgXiB2YWwsICpkc3QsIGZpcnN0KTsKKwkJCWRzdCsrOworCQkJbiAtPSBiaXRzIC0gZHN0X2lkeDsKKwkJfQorCisJCS8qIE1haW4gY2h1bmsgKi8KKwkJbiAvPSBiaXRzOworCQl3aGlsZSAobiA+PSA4KSB7CisJCQkqZHN0KysgXj0gdmFsOworCQkJKmRzdCsrIF49IHZhbDsKKwkJCSpkc3QrKyBePSB2YWw7CisJCQkqZHN0KysgXj0gdmFsOworCQkJKmRzdCsrIF49IHZhbDsKKwkJCSpkc3QrKyBePSB2YWw7CisJCQkqZHN0KysgXj0gdmFsOworCQkJKmRzdCsrIF49IHZhbDsKKwkJCW4gLT0gODsKKwkJfQorCQl3aGlsZSAobi0tKQorCQkJKmRzdCsrIF49IHZhbDsKKwkJLyogVHJhaWxpbmcgYml0cyAqLworCQlpZiAobGFzdCkKKwkJCSpkc3QgPSBjb21wKCpkc3QgXiB2YWwsICpkc3QsIGxhc3QpOworCX0KK30KKworCisgICAgLyoKKyAgICAgKiAgVW5hbGlnbmVkIGdlbmVyaWMgcGF0dGVybiBpbnZlcnQgdXNpbmcgMzIvNjQtYml0IG1lbW9yeSBhY2Nlc3NlcworICAgICAqICBUaGUgcGF0dGVybiBtdXN0IGhhdmUgYmVlbiBleHBhbmRlZCB0byBhIGZ1bGwgMzIvNjQtYml0IHZhbHVlCisgICAgICogIExlZnQvcmlnaHQgYXJlIHRoZSBhcHByb3ByaWF0ZSBzaGlmdHMgdG8gY29udmVydCB0byB0aGUgcGF0dGVybiB0byBiZQorICAgICAqICB1c2VkIGZvciB0aGUgbmV4dCAzMi82NC1iaXQgd29yZAorICAgICAqLworCitzdGF0aWMgdm9pZAorYml0ZmlsbF91bmFsaWduZWRfcmV2KHVuc2lnbmVkIGxvbmcgKmRzdCwgaW50IGRzdF9pZHgsIHVuc2lnbmVkIGxvbmcgcGF0LAorCQkJaW50IGxlZnQsIGludCByaWdodCwgdW5zaWduZWQgbiwgaW50IGJpdHMpCit7CisJdW5zaWduZWQgbG9uZyBmaXJzdCwgbGFzdDsKKworCWlmICghbikKKwkJcmV0dXJuOworCisJZmlyc3QgPSBGQl9TSElGVF9ISUdIKH4wVUwsIGRzdF9pZHgpOworCWxhc3QgPSB+KEZCX1NISUZUX0hJR0gofjBVTCwgKGRzdF9pZHgrbikgJSBiaXRzKSk7CisKKwlpZiAoZHN0X2lkeCtuIDw9IGJpdHMpIHsKKwkJLyogU2luZ2xlIHdvcmQgKi8KKwkJaWYgKGxhc3QpCisJCQlmaXJzdCAmPSBsYXN0OworCQkqZHN0ID0gY29tcCgqZHN0IF4gcGF0LCAqZHN0LCBmaXJzdCk7CisJfSBlbHNlIHsKKwkJLyogTXVsdGlwbGUgZGVzdGluYXRpb24gd29yZHMgKi8KKworCQkvKiBMZWFkaW5nIGJpdHMgKi8KKwkJaWYgKGZpcnN0ICE9IDBVTCkgeworCQkJKmRzdCA9IGNvbXAoKmRzdCBeIHBhdCwgKmRzdCwgZmlyc3QpOworCQkJZHN0Kys7CisJCQlwYXQgPSBwYXQgPDwgbGVmdCB8IHBhdCA+PiByaWdodDsKKwkJCW4gLT0gYml0cyAtIGRzdF9pZHg7CisJCX0KKworCQkvKiBNYWluIGNodW5rICovCisJCW4gLz0gYml0czsKKwkJd2hpbGUgKG4gPj0gNCkgeworCQkJKmRzdCsrIF49IHBhdDsKKwkJCXBhdCA9IHBhdCA8PCBsZWZ0IHwgcGF0ID4+IHJpZ2h0OworCQkJKmRzdCsrIF49IHBhdDsKKwkJCXBhdCA9IHBhdCA8PCBsZWZ0IHwgcGF0ID4+IHJpZ2h0OworCQkJKmRzdCsrIF49IHBhdDsKKwkJCXBhdCA9IHBhdCA8PCBsZWZ0IHwgcGF0ID4+IHJpZ2h0OworCQkJKmRzdCsrIF49IHBhdDsKKwkJCXBhdCA9IHBhdCA8PCBsZWZ0IHwgcGF0ID4+IHJpZ2h0OworCQkJbiAtPSA0OworCQl9CisJCXdoaWxlIChuLS0pIHsKKwkJCSpkc3QgXj0gcGF0OworCQkJcGF0ID0gcGF0IDw8IGxlZnQgfCBwYXQgPj4gcmlnaHQ7CisJCX0KKworCQkvKiBUcmFpbGluZyBiaXRzICovCisJCWlmIChsYXN0KQorCQkJKmRzdCA9IGNvbXAoKmRzdCBeIHBhdCwgKmRzdCwgbGFzdCk7CisJfQorfQorCit2b2lkIHN5c19maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqcCwgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQoreworCXVuc2lnbmVkIGxvbmcgcGF0LCBmZzsKKwl1bnNpZ25lZCBsb25nIHdpZHRoID0gcmVjdC0+d2lkdGgsIGhlaWdodCA9IHJlY3QtPmhlaWdodDsKKwlpbnQgYml0cyA9IEJJVFNfUEVSX0xPTkcsIGJ5dGVzID0gYml0cyA+PiAzOworCXUzMiBicHAgPSBwLT52YXIuYml0c19wZXJfcGl4ZWw7CisJdW5zaWduZWQgbG9uZyAqZHN0OworCWludCBkc3RfaWR4LCBsZWZ0OworCisJaWYgKHAtPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm47CisKKwlpZiAocC0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SIHx8CisJICAgIHAtPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX0RJUkVDVENPTE9SICkKKwkJZmcgPSAoKHUzMiAqKSAocC0+cHNldWRvX3BhbGV0dGUpKVtyZWN0LT5jb2xvcl07CisJZWxzZQorCQlmZyA9IHJlY3QtPmNvbG9yOworCisJcGF0ID0gcGl4ZWxfdG9fcGF0KCBicHAsIGZnKTsKKworCWRzdCA9ICh1bnNpZ25lZCBsb25nICopKCh1bnNpZ25lZCBsb25nKXAtPnNjcmVlbl9iYXNlICYgfihieXRlcy0xKSk7CisJZHN0X2lkeCA9ICgodW5zaWduZWQgbG9uZylwLT5zY3JlZW5fYmFzZSAmIChieXRlcyAtIDEpKSo4OworCWRzdF9pZHggKz0gcmVjdC0+ZHkqcC0+Zml4LmxpbmVfbGVuZ3RoKjgrcmVjdC0+ZHgqYnBwOworCS8qIEZJWE1FIEZvciBub3cgd2Ugc3VwcG9ydCAxLTMyIGJwcCBvbmx5ICovCisJbGVmdCA9IGJpdHMgJSBicHA7CisJaWYgKHAtPmZib3BzLT5mYl9zeW5jKQorCQlwLT5mYm9wcy0+ZmJfc3luYyhwKTsKKwlpZiAoIWxlZnQpIHsKKwkJdm9pZCAoKmZpbGxfb3AzMikodW5zaWduZWQgbG9uZyAqZHN0LCBpbnQgZHN0X2lkeCwKKwkJICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwYXQsIHVuc2lnbmVkIG4sIGludCBiaXRzKSA9CisJCQlOVUxMOworCisJCXN3aXRjaCAocmVjdC0+cm9wKSB7CisJCWNhc2UgUk9QX1hPUjoKKwkJCWZpbGxfb3AzMiA9IGJpdGZpbGxfYWxpZ25lZF9yZXY7CisJCQlicmVhazsKKwkJY2FzZSBST1BfQ09QWToKKwkJCWZpbGxfb3AzMiA9IGJpdGZpbGxfYWxpZ25lZDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCBLRVJOX0VSUiAiY2ZiX2ZpbGxyZWN0KCk6IHVua25vd24gcm9wLCAiCisJCQkJImRlZmF1bHRpbmcgdG8gUk9QX0NPUFlcbiIpOworCQkJZmlsbF9vcDMyID0gYml0ZmlsbF9hbGlnbmVkOworCQkJYnJlYWs7CisJCX0KKwkJd2hpbGUgKGhlaWdodC0tKSB7CisJCQlkc3QgKz0gZHN0X2lkeCA+PiAoZmZzKGJpdHMpIC0gMSk7CisJCQlkc3RfaWR4ICY9IChiaXRzIC0gMSk7CisJCQlmaWxsX29wMzIoZHN0LCBkc3RfaWR4LCBwYXQsIHdpZHRoKmJwcCwgYml0cyk7CisJCQlkc3RfaWR4ICs9IHAtPmZpeC5saW5lX2xlbmd0aCo4OworCQl9CisJfSBlbHNlIHsKKwkJaW50IHJpZ2h0OworCQlpbnQgcjsKKwkJaW50IHJvdCA9IChsZWZ0LWRzdF9pZHgpICUgYnBwOworCQl2b2lkICgqZmlsbF9vcCkodW5zaWduZWQgbG9uZyAqZHN0LCBpbnQgZHN0X2lkeCwKKwkJICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGF0LCBpbnQgbGVmdCwgaW50IHJpZ2h0LAorCQkgICAgICAgICAgICAgICAgdW5zaWduZWQgbiwgaW50IGJpdHMpID0gTlVMTDsKKworCQkvKiByb3RhdGUgcGF0dGVybiB0byBjb3JyZWN0IHN0YXJ0IHBvc2l0aW9uICovCisJCXBhdCA9IHBhdCA8PCByb3QgfCBwYXQgPj4gKGJwcC1yb3QpOworCisJCXJpZ2h0ID0gYnBwLWxlZnQ7CisJCXN3aXRjaCAocmVjdC0+cm9wKSB7CisJCWNhc2UgUk9QX1hPUjoKKwkJCWZpbGxfb3AgPSBiaXRmaWxsX3VuYWxpZ25lZF9yZXY7CisJCQlicmVhazsKKwkJY2FzZSBST1BfQ09QWToKKwkJCWZpbGxfb3AgPSBiaXRmaWxsX3VuYWxpZ25lZDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJjZmJfZmlsbHJlY3QoKTogdW5rbm93biByb3AsICIKKwkJCQkiZGVmYXVsdGluZyB0byBST1BfQ09QWVxuIik7CisJCQlmaWxsX29wID0gYml0ZmlsbF91bmFsaWduZWQ7CisJCQlicmVhazsKKwkJfQorCQl3aGlsZSAoaGVpZ2h0LS0pIHsKKwkJCWRzdCArPSBkc3RfaWR4ID4+IChmZnMoYml0cykgLSAxKTsKKwkJCWRzdF9pZHggJj0gKGJpdHMgLSAxKTsKKwkJCWZpbGxfb3AoZHN0LCBkc3RfaWR4LCBwYXQsIGxlZnQsIHJpZ2h0LAorCQkJCXdpZHRoKmJwcCwgYml0cyk7CisJCQlyID0gKHAtPmZpeC5saW5lX2xlbmd0aCo4KSAlIGJwcDsKKwkJCXBhdCA9IHBhdCA8PCAoYnBwLXIpIHwgcGF0ID4+IHI7CisJCQlkc3RfaWR4ICs9IHAtPmZpeC5saW5lX2xlbmd0aCo4OworCQl9CisJfQorfQorCitFWFBPUlRfU1lNQk9MKHN5c19maWxscmVjdCk7CisKK01PRFVMRV9BVVRIT1IoIkFudG9uaW5vIERhcGxhcyA8YWRhcGxhc0Bwb2wubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIGZpbGwgcmVjdGFuZ2xlIChzeXMtdG8tc3lzKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zeXNpbWdibHQuYyBiL2RyaXZlcnMvdmlkZW8vc3lzaW1nYmx0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ3ZTdlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vc3lzaW1nYmx0LmMKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiAgR2VuZXJpYyAxLWJpdCBvciA4LWJpdCBzb3VyY2UgdG8gMS0zMiBiaXQgZGVzdGluYXRpb24gZXhwYW5zaW9uCisgKiAgZm9yIGZyYW1lIGJ1ZmZlciBsb2NhdGVkIGluIHN5c3RlbSBSQU0gd2l0aCBwYWNrZWQgcGl4ZWxzIG9mIGFueSBkZXB0aC4KKyAqCisgKiAgQmFzZWQgYWxtb3N0IGVudGlyZWx5IG9uIGNmYmltZ2JsdC5jCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpICBBcHJpbCAyMDA3IEFudG9uaW5vIERhcGxhcyA8YWRhcGxhc0Bwb2wubmV0PgorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LF9fRlVOQ1RJT05fXywjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHUzMiBjZmJfdGFiOFtdID0geworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDBmZiwweDAwMDBmZjAwLDB4MDAwMGZmZmYsCisgICAgMHgwMGZmMDAwMCwweDAwZmYwMGZmLDB4MDBmZmZmMDAsMHgwMGZmZmZmZiwKKyAgICAweGZmMDAwMDAwLDB4ZmYwMDAwZmYsMHhmZjAwZmYwMCwweGZmMDBmZmZmLAorICAgIDB4ZmZmZjAwMDAsMHhmZmZmMDBmZiwweGZmZmZmZjAwLDB4ZmZmZmZmZmYKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorICAgIDB4MDAwMDAwMDAsMHhmZjAwMDAwMCwweDAwZmYwMDAwLDB4ZmZmZjAwMDAsCisgICAgMHgwMDAwZmYwMCwweGZmMDBmZjAwLDB4MDBmZmZmMDAsMHhmZmZmZmYwMCwKKyAgICAweDAwMDAwMGZmLDB4ZmYwMDAwZmYsMHgwMGZmMDBmZiwweGZmZmYwMGZmLAorICAgIDB4MDAwMGZmZmYsMHhmZjAwZmZmZiwweDAwZmZmZmZmLDB4ZmZmZmZmZmYKKyNlbHNlCisjZXJyb3IgRklYTUU6IE5vIGVuZGlhbm5lc3M/PworI2VuZGlmCit9OworCitzdGF0aWMgY29uc3QgdTMyIGNmYl90YWIxNltdID0geworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorICAgIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4ZmZmZjAwMDAsIDB4ZmZmZmZmZmYKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorICAgIDB4MDAwMDAwMDAsIDB4ZmZmZjAwMDAsIDB4MDAwMGZmZmYsIDB4ZmZmZmZmZmYKKyNlbHNlCisjZXJyb3IgRklYTUU6IE5vIGVuZGlhbm5lc3M/PworI2VuZGlmCit9OworCitzdGF0aWMgY29uc3QgdTMyIGNmYl90YWIzMltdID0geworCTB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYKK307CisKK3N0YXRpYyB2b2lkIGNvbG9yX2ltYWdlYmxpdChjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlLCBzdHJ1Y3QgZmJfaW5mbyAqcCwKKwkJCSAgICB2b2lkICpkc3QxLCB1MzIgc3RhcnRfaW5kZXgsIHUzMiBwaXRjaF9pbmRleCkKK3sKKwkvKiBEcmF3IHRoZSBwZW5ndWluICovCisJdTMyICpkc3QsICpkc3QyOworCXUzMiBjb2xvciA9IDAsIHZhbCwgc2hpZnQ7CisJaW50IGksIG4sIGJwcCA9IHAtPnZhci5iaXRzX3Blcl9waXhlbDsKKwl1MzIgbnVsbF9iaXRzID0gMzIgLSBicHA7CisJdTMyICpwYWxldHRlID0gKHUzMiAqKSBwLT5wc2V1ZG9fcGFsZXR0ZTsKKwljb25zdCB1OCAqc3JjID0gaW1hZ2UtPmRhdGE7CisKKwlkc3QyID0gZHN0MTsKKwlmb3IgKGkgPSBpbWFnZS0+aGVpZ2h0OyBpLS07ICkgeworCQluID0gaW1hZ2UtPndpZHRoOworCQlkc3QgPSBkc3QxOworCQlzaGlmdCA9IDA7CisJCXZhbCA9IDA7CisKKwkJaWYgKHN0YXJ0X2luZGV4KSB7CisJCQl1MzIgc3RhcnRfbWFzayA9IH4oRkJfU0hJRlRfSElHSCh+KHUzMikwLAorCQkJCQkJCSBzdGFydF9pbmRleCkpOworCQkJdmFsID0gKmRzdCAmIHN0YXJ0X21hc2s7CisJCQlzaGlmdCA9IHN0YXJ0X2luZGV4OworCQl9CisJCXdoaWxlIChuLS0pIHsKKwkJCWlmIChwLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IgfHwKKwkJCSAgICBwLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUiApCisJCQkJY29sb3IgPSBwYWxldHRlWypzcmNdOworCQkJZWxzZQorCQkJCWNvbG9yID0gKnNyYzsKKwkJCWNvbG9yIDw8PSBGQl9MRUZUX1BPUyhicHApOworCQkJdmFsIHw9IEZCX1NISUZUX0hJR0goY29sb3IsIHNoaWZ0KTsKKwkJCWlmIChzaGlmdCA+PSBudWxsX2JpdHMpIHsKKwkJCQkqZHN0KysgPSB2YWw7CisKKwkJCQl2YWwgPSAoc2hpZnQgPT0gbnVsbF9iaXRzKSA/IDAgOgorCQkJCQlGQl9TSElGVF9MT1coY29sb3IsIDMyIC0gc2hpZnQpOworCQkJfQorCQkJc2hpZnQgKz0gYnBwOworCQkJc2hpZnQgJj0gKDMyIC0gMSk7CisJCQlzcmMrKzsKKwkJfQorCQlpZiAoc2hpZnQpIHsKKwkJCXUzMiBlbmRfbWFzayA9IEZCX1NISUZUX0hJR0gofih1MzIpMCwgc2hpZnQpOworCisJCQkqZHN0ICY9IGVuZF9tYXNrOworCQkJKmRzdCB8PSB2YWw7CisJCX0KKwkJZHN0MSArPSBwLT5maXgubGluZV9sZW5ndGg7CisJCWlmIChwaXRjaF9pbmRleCkgeworCQkJZHN0MiArPSBwLT5maXgubGluZV9sZW5ndGg7CisJCQlkc3QxID0gKHU4ICopKChsb25nKWRzdDIgJiB+KHNpemVvZih1MzIpIC0gMSkpOworCisJCQlzdGFydF9pbmRleCArPSBwaXRjaF9pbmRleDsKKwkJCXN0YXJ0X2luZGV4ICY9IDMyIC0gMTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc2xvd19pbWFnZWJsaXQoY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSwgc3RydWN0IGZiX2luZm8gKnAsCisJCQkJICB2b2lkICpkc3QxLCB1MzIgZmdjb2xvciwgdTMyIGJnY29sb3IsCisJCQkJICB1MzIgc3RhcnRfaW5kZXgsIHUzMiBwaXRjaF9pbmRleCkKK3sKKwl1MzIgc2hpZnQsIGNvbG9yID0gMCwgYnBwID0gcC0+dmFyLmJpdHNfcGVyX3BpeGVsOworCXUzMiAqZHN0LCAqZHN0MjsKKwl1MzIgdmFsLCBwaXRjaCA9IHAtPmZpeC5saW5lX2xlbmd0aDsKKwl1MzIgbnVsbF9iaXRzID0gMzIgLSBicHA7CisJdTMyIHNwaXRjaCA9IChpbWFnZS0+d2lkdGgrNykvODsKKwljb25zdCB1OCAqc3JjID0gaW1hZ2UtPmRhdGEsICpzOworCXUzMiBpLCBqLCBsOworCisJZHN0MiA9IGRzdDE7CisJZmdjb2xvciA8PD0gRkJfTEVGVF9QT1MoYnBwKTsKKwliZ2NvbG9yIDw8PSBGQl9MRUZUX1BPUyhicHApOworCisJZm9yIChpID0gaW1hZ2UtPmhlaWdodDsgaS0tOyApIHsKKwkJc2hpZnQgPSB2YWwgPSAwOworCQlsID0gODsKKwkJaiA9IGltYWdlLT53aWR0aDsKKwkJZHN0ID0gZHN0MTsKKwkJcyA9IHNyYzsKKworCQkvKiB3cml0ZSBsZWFkaW5nIGJpdHMgKi8KKwkJaWYgKHN0YXJ0X2luZGV4KSB7CisJCQl1MzIgc3RhcnRfbWFzayA9IH4oRkJfU0hJRlRfSElHSCh+KHUzMikwLHN0YXJ0X2luZGV4KSk7CisJCQl2YWwgPSAqZHN0ICYgc3RhcnRfbWFzazsKKwkJCXNoaWZ0ID0gc3RhcnRfaW5kZXg7CisJCX0KKworCQl3aGlsZSAoai0tKSB7CisJCQlsLS07CisJCQljb2xvciA9ICgqcyAmICgxIDw8IGwpKSA/IGZnY29sb3IgOiBiZ2NvbG9yOworCQkJdmFsIHw9IEZCX1NISUZUX0hJR0goY29sb3IsIHNoaWZ0KTsKKworCQkJLyogRGlkIHRoZSBiaXRzaGlmdCBzcGlsbCBiaXRzIHRvIHRoZSBuZXh0IGxvbmc/ICovCisJCQlpZiAoc2hpZnQgPj0gbnVsbF9iaXRzKSB7CisJCQkJKmRzdCsrID0gdmFsOworCQkJCXZhbCA9IChzaGlmdCA9PSBudWxsX2JpdHMpID8gMCA6CisJCQkJCUZCX1NISUZUX0xPVyhjb2xvciwzMiAtIHNoaWZ0KTsKKwkJCX0KKwkJCXNoaWZ0ICs9IGJwcDsKKwkJCXNoaWZ0ICY9ICgzMiAtIDEpOworCQkJaWYgKCFsKSB7IGwgPSA4OyBzKys7IH07CisJCX0KKworCQkvKiB3cml0ZSB0cmFpbGluZyBiaXRzICovCisgCQlpZiAoc2hpZnQpIHsKKwkJCXUzMiBlbmRfbWFzayA9IEZCX1NISUZUX0hJR0gofih1MzIpMCwgc2hpZnQpOworCisJCQkqZHN0ICY9IGVuZF9tYXNrOworCQkJKmRzdCB8PSB2YWw7CisJCX0KKworCQlkc3QxICs9IHBpdGNoOworCQlzcmMgKz0gc3BpdGNoOworCQlpZiAocGl0Y2hfaW5kZXgpIHsKKwkJCWRzdDIgKz0gcGl0Y2g7CisJCQlkc3QxID0gKHU4ICopKChsb25nKWRzdDIgJiB+KHNpemVvZih1MzIpIC0gMSkpOworCQkJc3RhcnRfaW5kZXggKz0gcGl0Y2hfaW5kZXg7CisJCQlzdGFydF9pbmRleCAmPSAzMiAtIDE7CisJCX0KKworCX0KK30KKworLyoKKyAqIGZhc3RfaW1hZ2VibGl0IC0gb3B0aW1pemVkIG1vbm9jaHJvbWUgY29sb3IgZXhwYW5zaW9uCisgKgorICogT25seSBpZjogIGJpdHNfcGVyX3BpeGVsID09IDgsIDE2LCBvciAzMgorICogICAgICAgICAgIGltYWdlLT53aWR0aCBpcyBkaXZpc2libGUgYnkgcGl4ZWwvZHdvcmQgKHBwdyk7CisgKiAgICAgICAgICAgZml4LT5saW5lX2xlZ3RoIGlzIGRpdmlzaWJsZSBieSA0OworICogICAgICAgICAgIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc2NhbmxpbmUgaXMgZHdvcmQgYWxpZ25lZAorICovCitzdGF0aWMgdm9pZCBmYXN0X2ltYWdlYmxpdChjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlLCBzdHJ1Y3QgZmJfaW5mbyAqcCwKKwkJCQkgIHZvaWQgKmRzdDEsIHUzMiBmZ2NvbG9yLCB1MzIgYmdjb2xvcikKK3sKKwl1MzIgZmd4ID0gZmdjb2xvciwgYmd4ID0gYmdjb2xvciwgYnBwID0gcC0+dmFyLmJpdHNfcGVyX3BpeGVsOworCXUzMiBwcHcgPSAzMi9icHAsIHNwaXRjaCA9IChpbWFnZS0+d2lkdGggKyA3KS84OworCXUzMiBiaXRfbWFzaywgZW5kX21hc2ssIGVvcngsIHNoaWZ0OworCWNvbnN0IGNoYXIgKnMgPSBpbWFnZS0+ZGF0YSwgKnNyYzsKKwl1MzIgKmRzdDsKKwljb25zdCB1MzIgKnRhYiA9IE5VTEw7CisJaW50IGksIGosIGs7CisKKwlzd2l0Y2ggKGJwcCkgeworCWNhc2UgODoKKwkJdGFiID0gY2ZiX3RhYjg7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXRhYiA9IGNmYl90YWIxNjsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwlkZWZhdWx0OgorCQl0YWIgPSBjZmJfdGFiMzI7CisJCWJyZWFrOworCX0KKworCWZvciAoaSA9IHBwdy0xOyBpLS07ICkgeworCQlmZ3ggPDw9IGJwcDsKKwkJYmd4IDw8PSBicHA7CisJCWZneCB8PSBmZ2NvbG9yOworCQliZ3ggfD0gYmdjb2xvcjsKKwl9CisKKwliaXRfbWFzayA9ICgxIDw8IHBwdykgLSAxOworCWVvcnggPSBmZ3ggXiBiZ3g7CisJayA9IGltYWdlLT53aWR0aC9wcHc7CisKKwlmb3IgKGkgPSBpbWFnZS0+aGVpZ2h0OyBpLS07ICkgeworCQlkc3QgPSBkc3QxOworCQlzaGlmdCA9IDg7CisJCXNyYyA9IHM7CisKKwkJZm9yIChqID0gazsgai0tOyApIHsKKwkJCXNoaWZ0IC09IHBwdzsKKwkJCWVuZF9tYXNrID0gdGFiWygqc3JjID4+IHNoaWZ0KSAmIGJpdF9tYXNrXTsKKwkJCSpkc3QrKyA9IChlbmRfbWFzayAmIGVvcngpIF4gYmd4OworCQkJaWYgKCFzaGlmdCkgeworCQkJCXNoaWZ0ID0gODsKKwkJCQlzcmMrKzsKKwkJCX0KKwkJfQorCQlkc3QxICs9IHAtPmZpeC5saW5lX2xlbmd0aDsKKwkJcyArPSBzcGl0Y2g7CisJfQorfQorCit2b2lkIHN5c19pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKnAsIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJdTMyIGZnY29sb3IsIGJnY29sb3IsIHN0YXJ0X2luZGV4LCBiaXRzdGFydCwgcGl0Y2hfaW5kZXggPSAwOworCXUzMiBicGwgPSBzaXplb2YodTMyKSwgYnBwID0gcC0+dmFyLmJpdHNfcGVyX3BpeGVsOworCXUzMiB3aWR0aCA9IGltYWdlLT53aWR0aDsKKwl1MzIgZHggPSBpbWFnZS0+ZHgsIGR5ID0gaW1hZ2UtPmR5OworCXZvaWQgKmRzdDE7CisKKwlpZiAocC0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybjsKKworCWJpdHN0YXJ0ID0gKGR5ICogcC0+Zml4LmxpbmVfbGVuZ3RoICogOCkgKyAoZHggKiBicHApOworCXN0YXJ0X2luZGV4ID0gYml0c3RhcnQgJiAoMzIgLSAxKTsKKwlwaXRjaF9pbmRleCA9IChwLT5maXgubGluZV9sZW5ndGggJiAoYnBsIC0gMSkpICogODsKKworCWJpdHN0YXJ0IC89IDg7CisJYml0c3RhcnQgJj0gfihicGwgLSAxKTsKKwlkc3QxID0gKHZvaWQgX19mb3JjZSAqKXAtPnNjcmVlbl9iYXNlICsgYml0c3RhcnQ7CisKKwlpZiAocC0+ZmJvcHMtPmZiX3N5bmMpCisJCXAtPmZib3BzLT5mYl9zeW5jKHApOworCisJaWYgKGltYWdlLT5kZXB0aCA9PSAxKSB7CisJCWlmIChwLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IgfHwKKwkJICAgIHAtPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX0RJUkVDVENPTE9SKSB7CisJCQlmZ2NvbG9yID0gKCh1MzIqKShwLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5mZ19jb2xvcl07CisJCQliZ2NvbG9yID0gKCh1MzIqKShwLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5iZ19jb2xvcl07CisJCX0gZWxzZSB7CisJCQlmZ2NvbG9yID0gaW1hZ2UtPmZnX2NvbG9yOworCQkJYmdjb2xvciA9IGltYWdlLT5iZ19jb2xvcjsKKwkJfQorCisJCWlmICgzMiAlIGJwcCA9PSAwICYmICFzdGFydF9pbmRleCAmJiAhcGl0Y2hfaW5kZXggJiYKKwkJICAgICgod2lkdGggJiAoMzIvYnBwLTEpKSA9PSAwKSAmJgorCQkgICAgYnBwID49IDggJiYgYnBwIDw9IDMyKQorCQkJZmFzdF9pbWFnZWJsaXQoaW1hZ2UsIHAsIGRzdDEsIGZnY29sb3IsIGJnY29sb3IpOworCQllbHNlCisJCQlzbG93X2ltYWdlYmxpdChpbWFnZSwgcCwgZHN0MSwgZmdjb2xvciwgYmdjb2xvciwKKwkJCQkJc3RhcnRfaW5kZXgsIHBpdGNoX2luZGV4KTsKKwl9IGVsc2UKKwkJY29sb3JfaW1hZ2VibGl0KGltYWdlLCBwLCBkc3QxLCBzdGFydF9pbmRleCwgcGl0Y2hfaW5kZXgpOworfQorCitFWFBPUlRfU1lNQk9MKHN5c19pbWFnZWJsaXQpOworCitNT0RVTEVfQVVUSE9SKCJBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXNAcG9sLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiMS1iaXQvOC1iaXQgdG8gMS0zMiBiaXQgY29sb3IgZXhwYW5zaW9uIChzeXMtdG8tc3lzKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RnYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RnYWZiLmMKaW5kZXggNzQ3OGQwZS4uZjBmZGU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90Z2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdGdhZmIuYwpAQCAtNSwyNyArNSw0NSBAQAogICoJQ29weXJpZ2h0IChDKSAxOTk3IEdlZXJ0IFV5dHRlcmhvZXZlbgogICoJQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgTWFydGluIEx1Y2luYSwgVG9tIFplcnVjaGEKICAqCUNvcHlyaWdodCAoQykgMjAwMiBSaWNoYXJkIEhlbmRlcnNvbgorICoJQ29weXJpZ2h0IChDKSAyMDA2IE1hY2llaiBXLiBSb3p5Y2tpCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKICAqICBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbGVjdGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdHJldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90Yy5oPgorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CisKICNpbmNsdWRlIDx2aWRlby90Z2FmYi5oPgogCisjaWZkZWYgQ09ORklHX1BDSQorI2RlZmluZSBUR0FfQlVTX1BDSShkZXYpIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQorI2Vsc2UKKyNkZWZpbmUgVEdBX0JVU19QQ0koZGV2KSAwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19UQworI2RlZmluZSBUR0FfQlVTX1RDKGRldikgKGRldi0+YnVzID09ICZ0Y19idXNfdHlwZSkKKyNlbHNlCisjZGVmaW5lIFRHQV9CVVNfVEMoZGV2KSAwCisjZW5kaWYKKwogLyoKICAqIExvY2FsIGZ1bmN0aW9ucy4KICAqLwpAQCAtNDEsMTQgKzU5LDE5IEBACiBzdGF0aWMgdm9pZCB0Z2FmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKiwgY29uc3Qgc3RydWN0IGZiX2ltYWdlICopOwogc3RhdGljIHZvaWQgdGdhZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKiwgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICopOwogc3RhdGljIHZvaWQgdGdhZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKiwgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICopOworc3RhdGljIGludCB0Z2FmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB0Z2FmYl9wY2lfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKiwKLQkJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKik7Ci1zdGF0aWMgdm9pZCBfX2RldmV4aXQgdGdhZmJfcGNpX3VucmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKik7CitzdGF0aWMgaW50IF9fZGV2aW5pdCB0Z2FmYl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgX19kZXZleGl0IHRnYWZiX3VucmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKm1vZGVfb3B0aW9uID0gIjY0MHg0ODBANjAiOworc3RhdGljIGNvbnN0IGNoYXIgKm1vZGVfb3B0aW9uOworc3RhdGljIGNvbnN0IGNoYXIgKm1vZGVfb3B0aW9uX3BjaSA9ICI2NDB4NDgwQDYwIjsKK3N0YXRpYyBjb25zdCBjaGFyICptb2RlX29wdGlvbl90YyA9ICIxMjgweDEwMjRANzIiOwogCiAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0Z2FmYl9wY2lfZHJpdmVyOworc3RhdGljIHN0cnVjdCB0Y19kcml2ZXIgdGdhZmJfdGNfZHJpdmVyOworCiAvKgogICogIEZyYW1lIGJ1ZmZlciBvcGVyYXRpb25zCiAgKi8KQEAgLTU5LDE1ICs4MiwyMCBAQAogCS5mYl9zZXRfcGFyCQk9IHRnYWZiX3NldF9wYXIsCiAJLmZiX3NldGNvbHJlZwkJPSB0Z2FmYl9zZXRjb2xyZWcsCiAJLmZiX2JsYW5rCQk9IHRnYWZiX2JsYW5rLAorCS5mYl9wYW5fZGlzcGxheQkJPSB0Z2FmYl9wYW5fZGlzcGxheSwKIAkuZmJfZmlsbHJlY3QJCT0gdGdhZmJfZmlsbHJlY3QsCiAJLmZiX2NvcHlhcmVhCQk9IHRnYWZiX2NvcHlhcmVhLAogCS5mYl9pbWFnZWJsaXQJCT0gdGdhZmJfaW1hZ2VibGl0LAogfTsKIAogCisjaWZkZWYgQ09ORklHX1BDSQogLyoKICAqICBQQ0kgcmVnaXN0cmF0aW9uIG9wZXJhdGlvbnMKICAqLworc3RhdGljIGludCBfX2RldmluaXQgdGdhZmJfcGNpX3JlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICosCisJCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICopOworc3RhdGljIHZvaWQgX19kZXZleGl0IHRnYWZiX3BjaV91bnJlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICopOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY29uc3QgdGdhZmJfcGNpX3RhYmxlW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfREVDLCBQQ0lfREVWSUNFX0lEX0RFQ19UR0EpIH0sCkBAIC03NSwxMyArMTAzLDY4IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHRnYWZiX3BjaV90YWJsZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0Z2FmYl9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdGdhZmJfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJCT0gInRnYWZiIiwKIAkuaWRfdGFibGUJCT0gdGdhZmJfcGNpX3RhYmxlLAogCS5wcm9iZQkJCT0gdGdhZmJfcGNpX3JlZ2lzdGVyLAogCS5yZW1vdmUJCQk9IF9fZGV2ZXhpdF9wKHRnYWZiX3BjaV91bnJlZ2lzdGVyKSwKIH07CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0Cit0Z2FmYl9wY2lfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIHRnYWZiX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQKK3RnYWZiX3BjaV91bnJlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXRnYWZiX3VucmVnaXN0ZXIoJnBkZXYtPmRldik7Cit9CisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCisjaWZkZWYgQ09ORklHX1RDCisvKgorICogIFRDIHJlZ2lzdHJhdGlvbiBvcGVyYXRpb25zCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHRnYWZiX3RjX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKik7CitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0Z2FmYl90Y191bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKik7CisKK3N0YXRpYyBzdHJ1Y3QgdGNfZGV2aWNlX2lkIGNvbnN0IHRnYWZiX3RjX3RhYmxlW10gPSB7CisJeyAiREVDICAgICAiLCAiUE1BR0QtQUEiIH0sCisJeyAiREVDICAgICAiLCAiUE1BR0QgICAiIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh0YywgdGdhZmJfdGNfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHRjX2RyaXZlciB0Z2FmYl90Y19kcml2ZXIgPSB7CisJLmlkX3RhYmxlCQk9IHRnYWZiX3RjX3RhYmxlLAorCS5kcml2ZXIJCQk9IHsKKwkJLm5hbWUJCT0gInRnYWZiIiwKKwkJLmJ1cwkJPSAmdGNfYnVzX3R5cGUsCisJCS5wcm9iZQkJPSB0Z2FmYl90Y19yZWdpc3RlciwKKwkJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0Z2FmYl90Y191bnJlZ2lzdGVyKSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQKK3RnYWZiX3RjX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgc3RhdHVzID0gdGdhZmJfcmVnaXN0ZXIoZGV2KTsKKwlpZiAoIXN0YXR1cykKKwkJZ2V0X2RldmljZShkZXYpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0Cit0Z2FmYl90Y191bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwdXRfZGV2aWNlKGRldik7CisJdGdhZmJfdW5yZWdpc3RlcihkZXYpOworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19UQyAqLworCiAKIC8qKgogICogICAgICB0Z2FmYl9jaGVja192YXIgLSBPcHRpb25hbCBmdW5jdGlvbi4gIFZhbGlkYXRlcyBhIHZhciBwYXNzZWQgaW4uCkBAIC0xMzIsMTAgKzIxNSwxMCBAQAogdGdhZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGRlZXBfcHJlc2V0c1s0XSA9IHsKLQkJMHgwMDAxNDAwMCwKLQkJMHgwMDAxNDQwZCwKKwkJMHgwMDAwNDAwMCwKKwkJMHgwMDAwNDQwZCwKIAkJMHhmZmZmZmZmZiwKLQkJMHgwMDAxNDQxZAorCQkweDAwMDA0NDFkCiAJfTsKIAlzdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IHJhc3Rlcm9wX3ByZXNldHNbNF0gPSB7CiAJCTB4MDAwMDAwMDMsCkBAIC0xNTcsNiArMjQwLDggQEAKIAl9OwogCiAJc3RydWN0IHRnYV9wYXIgKnBhciA9IChzdHJ1Y3QgdGdhX3BhciAqKSBpbmZvLT5wYXI7CisJaW50IHRnYV9idXNfcGNpID0gVEdBX0JVU19QQ0kocGFyLT5kZXYpOworCWludCB0Z2FfYnVzX3RjID0gVEdBX0JVU19UQyhwYXItPmRldik7CiAJdTMyIGh0aW1pbmdzLCB2dGltaW5ncywgcGxsX2ZyZXE7CiAJdTggdGdhX3R5cGU7CiAJaW50IGk7CkBAIC0yMjEsNyArMzA2LDcgQEAKIAlUR0FfV1JJVEVfUkVHKHBhciwgdnRpbWluZ3MsIFRHQV9WRVJUX1JFRyk7CiAKIAkvKiBJbml0YWxpc2UgUkFNREFDLiAqLwotCWlmICh0Z2FfdHlwZSA9PSBUR0FfVFlQRV84UExBTkUpIHsKKwlpZiAodGdhX3R5cGUgPT0gVEdBX1RZUEVfOFBMQU5FICYmIHRnYV9idXNfcGNpKSB7CiAKIAkJLyogSW5pdCBCVDQ4NSBSQU1EQUMgcmVnaXN0ZXJzLiAgKi8KIAkJQlQ0ODVfV1JJVEUocGFyLCAweGEyIHwgKHBhci0+c3luY19vbl9ncmVlbiA/IDB4OCA6IDB4MCksCkBAIC0yMzYsMjEgKzMyMSw3IEBACiAJCUJUNDg1X1dSSVRFKHBhciwgMHgwMCwgQlQ0ODVfQUREUl9QQUxfV1JJVEUpOwogCQlUR0FfV1JJVEVfUkVHKHBhciwgQlQ0ODVfREFUQV9QQUwsIFRHQV9SQU1EQUNfU0VUVVBfUkVHKTsKIAotI2lmZGVmIENPTkZJR19IV19DT05TT0xFCi0JCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCQlpbnQgaiA9IGNvbG9yX3RhYmxlW2ldOwotCi0JCQlUR0FfV1JJVEVfUkVHKHBhciwgZGVmYXVsdF9yZWRbal18KEJUNDg1X0RBVEFfUEFMPDw4KSwKLQkJCQkgICAgICBUR0FfUkFNREFDX1JFRyk7Ci0JCQlUR0FfV1JJVEVfUkVHKHBhciwgZGVmYXVsdF9ncm5bal18KEJUNDg1X0RBVEFfUEFMPDw4KSwKLQkJCQkgICAgICBUR0FfUkFNREFDX1JFRyk7Ci0JCQlUR0FfV1JJVEVfUkVHKHBhciwgZGVmYXVsdF9ibHVbal18KEJUNDg1X0RBVEFfUEFMPDw4KSwKLQkJCQkgICAgICBUR0FfUkFNREFDX1JFRyk7Ci0JCX0KLQkJZm9yIChpID0gMDsgaSA8IDI0MCAqIDM7IGkgKz0gNCkgewotI2Vsc2UKIAkJZm9yIChpID0gMDsgaSA8IDI1NiAqIDM7IGkgKz0gNCkgewotI2VuZGlmCiAJCQlUR0FfV1JJVEVfUkVHKHBhciwgMHg1NSB8IChCVDQ4NV9EQVRBX1BBTCA8PCA4KSwKIAkJCQkgICAgICBUR0FfUkFNREFDX1JFRyk7CiAJCQlUR0FfV1JJVEVfUkVHKHBhciwgMHgwMCB8IChCVDQ4NV9EQVRBX1BBTCA8PCA4KSwKQEAgLTI2MSw2ICszMzIsMjcgQEAKIAkJCQkgICAgICBUR0FfUkFNREFDX1JFRyk7CiAJCX0KIAorCX0gZWxzZSBpZiAodGdhX3R5cGUgPT0gVEdBX1RZUEVfOFBMQU5FICYmIHRnYV9idXNfdGMpIHsKKworCQkvKiBJbml0IEJUNDU5IFJBTURBQyByZWdpc3RlcnMuICAqLworCQlCVDQ1OV9XUklURShwYXIsIEJUNDU5X1JFR19BQ0MsIEJUNDU5X0NNRF9SRUdfMCwgMHg0MCk7CisJCUJUNDU5X1dSSVRFKHBhciwgQlQ0NTlfUkVHX0FDQywgQlQ0NTlfQ01EX1JFR18xLCAweDAwKTsKKwkJQlQ0NTlfV1JJVEUocGFyLCBCVDQ1OV9SRUdfQUNDLCBCVDQ1OV9DTURfUkVHXzIsCisJCQkgICAgKHBhci0+c3luY19vbl9ncmVlbiA/IDB4YzAgOiAweDQwKSk7CisKKwkJQlQ0NTlfV1JJVEUocGFyLCBCVDQ1OV9SRUdfQUNDLCBCVDQ1OV9DVVJfQ01EX1JFRywgMHgwMCk7CisKKwkJLyogRmlsbCB0aGUgcGFsZXR0ZS4gICovCisJCUJUNDU5X0xPQURfQUREUihwYXIsIDB4MDAwMCk7CisJCVRHQV9XUklURV9SRUcocGFyLCBCVDQ1OV9QQUxFVFRFIDw8IDIsIFRHQV9SQU1EQUNfU0VUVVBfUkVHKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMjU2ICogMzsgaSArPSA0KSB7CisJCQlUR0FfV1JJVEVfUkVHKHBhciwgMHg1NSwgVEdBX1JBTURBQ19SRUcpOworCQkJVEdBX1dSSVRFX1JFRyhwYXIsIDB4MDAsIFRHQV9SQU1EQUNfUkVHKTsKKwkJCVRHQV9XUklURV9SRUcocGFyLCAweDAwLCBUR0FfUkFNREFDX1JFRyk7CisJCQlUR0FfV1JJVEVfUkVHKHBhciwgMHgwMCwgVEdBX1JBTURBQ19SRUcpOworCQl9CisKIAl9IGVsc2UgeyAvKiAyNC1wbGFuZSBvciAyNHBsdXNaICovCiAKIAkJLyogSW5pdCBCVDQ2MyBSQU1EQUMgcmVnaXN0ZXJzLiAgKi8KQEAgLTQzMSw2ICs1MjMsOCBAQAogCQl1bnNpZ25lZCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCB0Z2FfcGFyICpwYXIgPSAoc3RydWN0IHRnYV9wYXIgKikgaW5mby0+cGFyOworCWludCB0Z2FfYnVzX3BjaSA9IFRHQV9CVVNfUENJKHBhci0+ZGV2KTsKKwlpbnQgdGdhX2J1c190YyA9IFRHQV9CVVNfVEMocGFyLT5kZXYpOwogCiAJaWYgKHJlZ25vID4gMjU1KQogCQlyZXR1cm4gMTsKQEAgLTQzOCwxMiArNTMyLDE4IEBACiAJZ3JlZW4gPj49IDg7CiAJYmx1ZSA+Pj0gODsKIAotCWlmIChwYXItPnRnYV90eXBlID09IFRHQV9UWVBFXzhQTEFORSkgeworCWlmIChwYXItPnRnYV90eXBlID09IFRHQV9UWVBFXzhQTEFORSAmJiB0Z2FfYnVzX3BjaSkgewogCQlCVDQ4NV9XUklURShwYXIsIHJlZ25vLCBCVDQ4NV9BRERSX1BBTF9XUklURSk7CiAJCVRHQV9XUklURV9SRUcocGFyLCBCVDQ4NV9EQVRBX1BBTCwgVEdBX1JBTURBQ19TRVRVUF9SRUcpOwogCQlUR0FfV1JJVEVfUkVHKHBhciwgcmVkfChCVDQ4NV9EQVRBX1BBTDw8OCksVEdBX1JBTURBQ19SRUcpOwogCQlUR0FfV1JJVEVfUkVHKHBhciwgZ3JlZW58KEJUNDg1X0RBVEFfUEFMPDw4KSxUR0FfUkFNREFDX1JFRyk7CiAJCVRHQV9XUklURV9SRUcocGFyLCBibHVlfChCVDQ4NV9EQVRBX1BBTDw8OCksVEdBX1JBTURBQ19SRUcpOworCX0gZWxzZSBpZiAocGFyLT50Z2FfdHlwZSA9PSBUR0FfVFlQRV84UExBTkUgJiYgdGdhX2J1c190YykgeworCQlCVDQ1OV9MT0FEX0FERFIocGFyLCByZWdubyk7CisJCVRHQV9XUklURV9SRUcocGFyLCBCVDQ1OV9QQUxFVFRFIDw8IDIsIFRHQV9SQU1EQUNfU0VUVVBfUkVHKTsKKwkJVEdBX1dSSVRFX1JFRyhwYXIsIHJlZCwgVEdBX1JBTURBQ19SRUcpOworCQlUR0FfV1JJVEVfUkVHKHBhciwgZ3JlZW4sIFRHQV9SQU1EQUNfUkVHKTsKKwkJVEdBX1dSSVRFX1JFRyhwYXIsIGJsdWUsIFRHQV9SQU1EQUNfUkVHKTsKIAl9IGVsc2UgewogCQlpZiAocmVnbm8gPCAxNikgewogCQkJdTMyIHZhbHVlID0gKHJlZ25vIDw8IDE2KSB8IChyZWdubyA8PCA4KSB8IHJlZ25vOwpAQCAtNTIzLDE2ICs2MjMsOCBAQAogICogIEFjY2VsZXJhdGlvbi4KICAqLwogCi0vKioKLSAqICAgICAgdGdhZmJfaW1hZ2VibGl0IC0gUkVRVUlSRUQgZnVuY3Rpb24uIENhbiB1c2UgZ2VuZXJpYyByb3V0aW5lcyBpZgotICogICAgICAgICAgICAgICAgICAgICAgICBub24gYWNjbGVyYXRlZCBoYXJkd2FyZSBhbmQgcGFja2VkIHBpeGVsIGJhc2VkLgotICogICAgICAgICAgICAgICAgICAgICAgICBDb3BpZXMgYSBpbWFnZSBmcm9tIHN5c3RlbSBtZW1vcnkgdG8gdGhlIHNjcmVlbi4gCi0gKgotICogICAgICBAaW5mbzogZnJhbWUgYnVmZmVyIHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgYSBzaW5nbGUgZnJhbWUgYnVmZmVyCi0gKiAgICAgIEBpbWFnZTogc3RydWN0dXJlIGRlZmluaW5nIHRoZSBpbWFnZS4KLSAqLwogc3RhdGljIHZvaWQKLXRnYWZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKK3RnYWZiX21vbm9faW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQogewogCXN0cnVjdCB0Z2FfcGFyICpwYXIgPSAoc3RydWN0IHRnYV9wYXIgKikgaW5mby0+cGFyOwogCXUzMiBmZ2NvbG9yLCBiZ2NvbG9yLCBkeCwgZHksIHdpZHRoLCBoZWlnaHQsIHZ4cmVzLCB2eXJlcywgcGl4ZWxtYXNrOwpAQCAtNTQyLDYgKzYzNCwxNyBAQAogCXZvaWQgX19pb21lbSAqcmVnc19iYXNlOwogCXZvaWQgX19pb21lbSAqZmJfYmFzZTsKIAorCWlzOGJwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSA4OworCisJLyogRm9yIGNvcGllcyB0aGF0IGFyZW4ndCBwaXhlbCBleHBhbnNpb24sIHRoZXJlJ3MgbGl0dGxlIHdlCisJICAgY2FuIGRvIGJldHRlciB0aGFuIHRoZSBnZW5lcmljIGNvZGUuICAqLworCS8qID8/PyBUaGVyZSBpcyBhIERNQSB3cml0ZSBtb2RlOyBJIHdvbmRlciBpZiB0aGF0IGNvdWxkIGJlCisJICAgbWFkZSB0byBwdWxsIHRoZSBkYXRhIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4uLiAgKi8KKwlpZiAoaW1hZ2UtPmRlcHRoID4gMSkgeworCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwkJcmV0dXJuOworCX0KKwogCWR4ID0gaW1hZ2UtPmR4OwogCWR5ID0gaW1hZ2UtPmR5OwogCXdpZHRoID0gaW1hZ2UtPndpZHRoOwpAQCAtNTU5LDE4ICs2NjIsOCBAQAogCWlmIChkeSArIGhlaWdodCA+IHZ5cmVzKQogCQloZWlnaHQgPSB2eXJlcyAtIGR5OwogCi0JLyogRm9yIGNvcGllcyB0aGF0IGFyZW4ndCBwaXhlbCBleHBhbnNpb24sIHRoZXJlJ3MgbGl0dGxlIHdlCi0JICAgY2FuIGRvIGJldHRlciB0aGFuIHRoZSBnZW5lcmljIGNvZGUuICAqLwotCS8qID8/PyBUaGVyZSBpcyBhIERNQSB3cml0ZSBtb2RlOyBJIHdvbmRlciBpZiB0aGF0IGNvdWxkIGJlCi0JICAgbWFkZSB0byBwdWxsIHRoZSBkYXRhIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4uLiAgKi8KLQlpZiAoaW1hZ2UtPmRlcHRoID4gMSkgewotCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKLQkJcmV0dXJuOwotCX0KLQogCXJlZ3NfYmFzZSA9IHBhci0+dGdhX3JlZ3NfYmFzZTsKIAlmYl9iYXNlID0gcGFyLT50Z2FfZmJfYmFzZTsKLQlpczhicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gODsKIAogCS8qIEV4cGFuZCB0aGUgY29sb3IgdmFsdWVzIHRvIGZpbGwgMzItYml0cy4gICovCiAJLyogPz8/IFdvdWxkIGJlIG5pY2UgdG8gbm90aWNlIGNvbG91ciBjaGFuZ2VzIGVsc2V3aGVyZSwgc28KQEAgLTc0OCw2ICs4NDEsODUgQEAKIAkJICAgICByZWdzX2Jhc2UgKyBUR0FfTU9ERV9SRUcpOwogfQogCitzdGF0aWMgdm9pZAordGdhZmJfY2x1dF9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJc3RydWN0IHRnYV9wYXIgKnBhciA9IChzdHJ1Y3QgdGdhX3BhciAqKSBpbmZvLT5wYXI7CisJdTMyIGNvbG9yLCBkeCwgZHksIHdpZHRoLCBoZWlnaHQsIHZ4cmVzLCB2eXJlczsKKwl1MzIgKnBhbGV0dGUgPSAoKHUzMiAqKWluZm8tPnBzZXVkb19wYWxldHRlKTsKKwl1bnNpZ25lZCBsb25nIHBvcywgbGluZV9sZW5ndGgsIGksIGo7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YTsKKwl2b2lkICpyZWdzX2Jhc2UsICpmYl9iYXNlOworCisJZHggPSBpbWFnZS0+ZHg7CisJZHkgPSBpbWFnZS0+ZHk7CisJd2lkdGggPSBpbWFnZS0+d2lkdGg7CisJaGVpZ2h0ID0gaW1hZ2UtPmhlaWdodDsKKwl2eHJlcyA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWw7CisJdnlyZXMgPSBpbmZvLT52YXIueXJlc192aXJ0dWFsOworCWxpbmVfbGVuZ3RoID0gaW5mby0+Zml4LmxpbmVfbGVuZ3RoOworCisJLyogQ3JvcCB0aGUgaW1hZ2UgdG8gdGhlIHNjcmVlbi4gICovCisJaWYgKGR4ID4gdnhyZXMgfHwgZHkgPiB2eXJlcykKKwkJcmV0dXJuOworCWlmIChkeCArIHdpZHRoID4gdnhyZXMpCisJCXdpZHRoID0gdnhyZXMgLSBkeDsKKwlpZiAoZHkgKyBoZWlnaHQgPiB2eXJlcykKKwkJaGVpZ2h0ID0gdnlyZXMgLSBkeTsKKworCXJlZ3NfYmFzZSA9IHBhci0+dGdhX3JlZ3NfYmFzZTsKKwlmYl9iYXNlID0gcGFyLT50Z2FfZmJfYmFzZTsKKworCXBvcyA9IGR5ICogbGluZV9sZW5ndGggKyAoZHggKiA0KTsKKwlkYXRhID0gaW1hZ2UtPmRhdGE7CisKKwkvKiBOb3cgY29weSB0aGUgaW1hZ2UsIGNvbG9yX2V4cGFuZGluZyB2aWEgdGhlIHBhbGV0dGUuICovCisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7CisJCQljb2xvciA9IHBhbGV0dGVbKmRhdGErK107CisJCQlfX3Jhd193cml0ZWwoY29sb3IsIGZiX2Jhc2UgKyBwb3MgKyBqKjQpOworCQl9CisJCXBvcyArPSBsaW5lX2xlbmd0aDsKKwl9Cit9CisKKy8qKgorICogICAgICB0Z2FmYl9pbWFnZWJsaXQgLSBSRVFVSVJFRCBmdW5jdGlvbi4gQ2FuIHVzZSBnZW5lcmljIHJvdXRpbmVzIGlmCisgKiAgICAgICAgICAgICAgICAgICAgICAgIG5vbiBhY2NsZXJhdGVkIGhhcmR3YXJlIGFuZCBwYWNrZWQgcGl4ZWwgYmFzZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgIENvcGllcyBhIGltYWdlIGZyb20gc3lzdGVtIG1lbW9yeSB0byB0aGUgc2NyZWVuLgorICoKKyAqICAgICAgQGluZm86IGZyYW1lIGJ1ZmZlciBzdHJ1Y3R1cmUgdGhhdCByZXByZXNlbnRzIGEgc2luZ2xlIGZyYW1lIGJ1ZmZlcgorICogICAgICBAaW1hZ2U6IHN0cnVjdHVyZSBkZWZpbmluZyB0aGUgaW1hZ2UuCisgKi8KK3N0YXRpYyB2b2lkCit0Z2FmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJdW5zaWduZWQgaW50IGlzOGJwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSA4OworCisJLyogSWYgYSBtb25vIGltYWdlLCByZWdhcmRsZXNzIG9mIEZCIGRlcHRoLCBnbyBkbyBpdC4gKi8KKwlpZiAoaW1hZ2UtPmRlcHRoID09IDEpIHsKKwkJdGdhZmJfbW9ub19pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCQlyZXR1cm47CisJfQorCisJLyogRm9yIGNvcGllcyB0aGF0IGFyZW4ndCBwaXhlbCBleHBhbnNpb24sIHRoZXJlJ3MgbGl0dGxlIHdlCisJICAgY2FuIGRvIGJldHRlciB0aGFuIHRoZSBnZW5lcmljIGNvZGUuICAqLworCS8qID8/PyBUaGVyZSBpcyBhIERNQSB3cml0ZSBtb2RlOyBJIHdvbmRlciBpZiB0aGF0IGNvdWxkIGJlCisJICAgbWFkZSB0byBwdWxsIHRoZSBkYXRhIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4uLiAgKi8KKwlpZiAoaW1hZ2UtPmRlcHRoID09IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIElmIDI0LXBsYW5lIEZCIGFuZCB0aGUgaW1hZ2UgaXMgOC1wbGFuZSB3aXRoIENMVVQsIHdlIGNhbiBkbyBpdC4gKi8KKwlpZiAoIWlzOGJwcCAmJiBpbWFnZS0+ZGVwdGggPT0gOCkgeworCQl0Z2FmYl9jbHV0X2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTaWxlbnRseSByZXR1cm4uLi4gKi8KK30KKwogLyoqCiAgKiAgICAgIHRnYWZiX2ZpbGxyZWN0IC0gUkVRVUlSRUQgZnVuY3Rpb24uIENhbiB1c2UgZ2VuZXJpYyByb3V0aW5lcyBpZiAKICAqICAgICAgICAgICAgICAgICAgICAgICBub24gYWNjbGVyYXRlZCBoYXJkd2FyZSBhbmQgcGFja2VkIHBpeGVsIGJhc2VkLgpAQCAtMTMwOSwxOCArMTQ4MSwyOSBAQAogdGdhZmJfaW5pdF9maXgoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHRnYV9wYXIgKnBhciA9IChzdHJ1Y3QgdGdhX3BhciAqKWluZm8tPnBhcjsKKwlpbnQgdGdhX2J1c19wY2kgPSBUR0FfQlVTX1BDSShwYXItPmRldik7CisJaW50IHRnYV9idXNfdGMgPSBUR0FfQlVTX1RDKHBhci0+ZGV2KTsKIAl1OCB0Z2FfdHlwZSA9IHBhci0+dGdhX3R5cGU7Ci0JY29uc3QgY2hhciAqdGdhX3R5cGVfbmFtZTsKKwljb25zdCBjaGFyICp0Z2FfdHlwZV9uYW1lID0gTlVMTDsKIAogCXN3aXRjaCAodGdhX3R5cGUpIHsKIAljYXNlIFRHQV9UWVBFXzhQTEFORToKLQkJdGdhX3R5cGVfbmFtZSA9ICJEaWdpdGFsIFpMWHAtRTEiOworCQlpZiAodGdhX2J1c19wY2kpCisJCQl0Z2FfdHlwZV9uYW1lID0gIkRpZ2l0YWwgWkxYcC1FMSI7CisJCWlmICh0Z2FfYnVzX3RjKQorCQkJdGdhX3R5cGVfbmFtZSA9ICJEaWdpdGFsIFpMWC1FMSI7CiAJCWJyZWFrOwogCWNhc2UgVEdBX1RZUEVfMjRQTEFORToKLQkJdGdhX3R5cGVfbmFtZSA9ICJEaWdpdGFsIFpMWHAtRTIiOworCQlpZiAodGdhX2J1c19wY2kpCisJCQl0Z2FfdHlwZV9uYW1lID0gIkRpZ2l0YWwgWkxYcC1FMiI7CisJCWlmICh0Z2FfYnVzX3RjKQorCQkJdGdhX3R5cGVfbmFtZSA9ICJEaWdpdGFsIFpMWC1FMiI7CiAJCWJyZWFrOwogCWNhc2UgVEdBX1RZUEVfMjRQTFVTWjoKLQkJdGdhX3R5cGVfbmFtZSA9ICJEaWdpdGFsIFpMWHAtRTMiOworCQlpZiAodGdhX2J1c19wY2kpCisJCQl0Z2FfdHlwZV9uYW1lID0gIkRpZ2l0YWwgWkxYcC1FMyI7CisJCWlmICh0Z2FfYnVzX3RjKQorCQkJdGdhX3R5cGVfbmFtZSA9ICJEaWdpdGFsIFpMWC1FMyI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXRnYV90eXBlX25hbWUgPSAiVW5rbm93biI7CkBAIC0xMzQ2LDExICsxNTI5LDM3IEBACiAJaW5mby0+Zml4Lnl3cmFwc3RlcCA9IDA7CiAKIAlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9ERUNfVEdBOworCisJLyoKKwkgKiBUaGVzZSBhcmUgbmVlZGVkIGJ5IGZiX3NldF9sb2dvX3RydWVwYWxldHRlKCksIHNvIHdlCisJICogc2V0IHRoZW0gaGVyZSBmb3IgMjQtcGxhbmUgY2FyZHMuCisJICovCisJaWYgKHRnYV90eXBlICE9IFRHQV9UWVBFXzhQTEFORSkgeworCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IDg7CisJCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA4OworCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA4OworCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDE2OworCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gODsKKwkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKKwl9CiB9CiAKLXN0YXRpYyBfX2RldmluaXQgaW50Ci10Z2FmYl9wY2lfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IHRnYWZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKKwkvKiBXZSBqdXN0IHVzZSB0aGlzIHRvIGNhdGNoIHN3aXRjaGVzIG91dCBvZiBncmFwaGljcyBtb2RlLiAqLworCXRnYWZiX3NldF9wYXIoaW5mbyk7IC8qIEEgYml0IG9mIG92ZXJraWxsIGZvciBCQVNFX0FERFIgcmVzZXQuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0Cit0Z2FmYl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgbW9kZWRiX3RjID0geworCQkvKiAxMjgweDEwMjQgQCA3MiBIeiwgNzYuOCBrSHogaHN5bmMgKi8KKwkJIjEyODB4MTAyNEA3MiIsIDAsIDEyODAsIDEwMjQsIDc2NDUsIDIyNCwgMjgsIDMzLCAzLCAxNjAsIDMsCisJCUZCX1NZTkNfT05fR1JFRU4sIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKKwl9OworCiAJc3RhdGljIHVuc2lnbmVkIGludCBjb25zdCBmYl9vZmZzZXRfcHJlc2V0c1s0XSA9IHsKIAkJVEdBXzhQTEFORV9GQl9PRkZTRVQsCiAJCVRHQV8yNFBMQU5FX0ZCX09GRlNFVCwKQEAgLTEzNTgsNDAgKzE1NjcsNTEgQEAKIAkJVEdBXzI0UExVU1pfRkJfT0ZGU0VUCiAJfTsKIAorCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGVkYl90Z2EgPSBOVUxMOworCXJlc291cmNlX3NpemVfdCBiYXIwX3N0YXJ0ID0gMCwgYmFyMF9sZW4gPSAwOworCWNvbnN0IGNoYXIgKm1vZGVfb3B0aW9uX3RnYSA9IE5VTEw7CisJaW50IHRnYV9idXNfcGNpID0gVEdBX0JVU19QQ0koZGV2KTsKKwlpbnQgdGdhX2J1c190YyA9IFRHQV9CVVNfVEMoZGV2KTsKKwl1bnNpZ25lZCBpbnQgbW9kZWRic2l6ZV90Z2EgPSAwOwogCXZvaWQgX19pb21lbSAqbWVtX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBiYXIwX3N0YXJ0LCBiYXIwX2xlbjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgdGdhX3BhciAqcGFyOwogCXU4IHRnYV90eXBlOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAkvKiBFbmFibGUgZGV2aWNlIGluIFBDSSBjb25maWcuICAqLwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCWlmICh0Z2FfYnVzX3BjaSAmJiBwY2lfZW5hYmxlX2RldmljZSh0b19wY2lfZGV2KGRldikpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidGdhZmI6IENhbm5vdCBlbmFibGUgUENJIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIEFsbG9jYXRlIHRoZSBmYiBhbmQgcGFyIHN0cnVjdHVyZXMuICAqLwotCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHRnYV9wYXIpLCAmcGRldi0+ZGV2KTsKKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCB0Z2FfcGFyKSwgZGV2KTsKIAlpZiAoIWluZm8pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0Z2FmYjogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXBhciA9IGluZm8tPnBhcjsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CiAKIAkvKiBSZXF1ZXN0IHRoZSBtZW0gcmVnaW9ucy4gICovCi0JYmFyMF9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQliYXIwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CiAJcmV0ID0gLUVOT0RFVjsKKwlpZiAodGdhX2J1c19wY2kpIHsKKwkJYmFyMF9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydCh0b19wY2lfZGV2KGRldiksIDApOworCQliYXIwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4odG9fcGNpX2RldihkZXYpLCAwKTsKKwl9CisJaWYgKHRnYV9idXNfdGMpIHsKKwkJYmFyMF9zdGFydCA9IHRvX3RjX2RldihkZXYpLT5yZXNvdXJjZS5zdGFydDsKKwkJYmFyMF9sZW4gPSB0b190Y19kZXYoZGV2KS0+cmVzb3VyY2UuZW5kIC0gYmFyMF9zdGFydCArIDE7CisJfQogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uIChiYXIwX3N0YXJ0LCBiYXIwX2xlbiwgInRnYWZiIikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0Z2FmYjogY2Fubm90IHJlc2VydmUgRkIgcmVnaW9uXG4iKTsKIAkJZ290byBlcnIwOwogCX0KIAogCS8qIE1hcCB0aGUgZnJhbWVidWZmZXIuICAqLwotCW1lbV9iYXNlID0gaW9yZW1hcChiYXIwX3N0YXJ0LCBiYXIwX2xlbik7CisJbWVtX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoYmFyMF9zdGFydCwgYmFyMF9sZW4pOwogCWlmICghbWVtX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0Z2FmYjogQ2Fubm90IG1hcCBNTUlPXG4iKTsKIAkJZ290byBlcnIxOwpAQCAtMTM5OSwxMiArMTYxOSwxNiBAQAogCiAJLyogR3JhYiBpbmZvIGFib3V0IHRoZSBjYXJkLiAgKi8KIAl0Z2FfdHlwZSA9IChyZWFkbChtZW1fYmFzZSkgPj4gMTIpICYgMHgwZjsKLQlwYXItPnBkZXYgPSBwZGV2OworCXBhci0+ZGV2ID0gZGV2OwogCXBhci0+dGdhX21lbV9iYXNlID0gbWVtX2Jhc2U7CiAJcGFyLT50Z2FfZmJfYmFzZSA9IG1lbV9iYXNlICsgZmJfb2Zmc2V0X3ByZXNldHNbdGdhX3R5cGVdOwogCXBhci0+dGdhX3JlZ3NfYmFzZSA9IG1lbV9iYXNlICsgVEdBX1JFR1NfT0ZGU0VUOwogCXBhci0+dGdhX3R5cGUgPSB0Z2FfdHlwZTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZwYXItPnRnYV9jaGlwX3Jldik7CisJaWYgKHRnYV9idXNfcGNpKQorCQlwY2lfcmVhZF9jb25maWdfYnl0ZSh0b19wY2lfZGV2KGRldiksIFBDSV9SRVZJU0lPTl9JRCwKKwkJCQkgICAgICZwYXItPnRnYV9jaGlwX3Jldik7CisJaWYgKHRnYV9idXNfdGMpCisJCXBhci0+dGdhX2NoaXBfcmV2ID0gVEdBX1JFQURfUkVHKHBhciwgVEdBX1NUQVJUX1JFRykgJiAweGZmOwogCiAJLyogU2V0dXAgZnJhbWVidWZmZXIuICAqLwogCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSB8CkBAIC0xNDE0LDggKzE2MzgsMTcgQEAKIAlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9ICh2b2lkICopKHBhciArIDEpOwogCiAJLyogVGhpcyBzaG91bGQgZ2l2ZSBhIHJlYXNvbmFibGUgZGVmYXVsdCB2aWRlbyBtb2RlLiAgKi8KLQotCXJldCA9IGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBtb2RlX29wdGlvbiwgTlVMTCwgMCwgTlVMTCwKKwlpZiAodGdhX2J1c19wY2kpIHsKKwkJbW9kZV9vcHRpb25fdGdhID0gbW9kZV9vcHRpb25fcGNpOworCX0KKwlpZiAodGdhX2J1c190YykgeworCQltb2RlX29wdGlvbl90Z2EgPSBtb2RlX29wdGlvbl90YzsKKwkJbW9kZWRiX3RnYSA9ICZtb2RlZGJfdGM7CisJCW1vZGVkYnNpemVfdGdhID0gMTsKKwl9CisJcmV0ID0gZmJfZmluZF9tb2RlKCZpbmZvLT52YXIsIGluZm8sCisJCQkgICBtb2RlX29wdGlvbiA/IG1vZGVfb3B0aW9uIDogbW9kZV9vcHRpb25fdGdhLAorCQkJICAgbW9kZWRiX3RnYSwgbW9kZWRic2l6ZV90Z2EsIE5VTEwsCiAJCQkgICB0Z2FfdHlwZSA9PSBUR0FfVFlQRV84UExBTkUgPyA4IDogMzIpOwogCWlmIChyZXQgPT0gMCB8fCByZXQgPT0gNCkgewogCQlwcmludGsoS0VSTl9FUlIgInRnYWZiOiBDb3VsZCBub3QgZmluZCB2YWxpZCB2aWRlbyBtb2RlXG4iKTsKQEAgLTE0MzgsMTMgKzE2NzEsMTkgQEAKIAkJZ290byBlcnIxOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gInRnYWZiOiBEQzIxMDMwIFtUR0FdIGRldGVjdGVkLCByZXY9MHglMDJ4XG4iLAotCSAgICAgICBwYXItPnRnYV9jaGlwX3Jldik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAidGdhZmI6IGF0IFBDSSBidXMgJWQsIGRldmljZSAlZCwgZnVuY3Rpb24gJWRcbiIsCi0JICAgICAgIHBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksCi0JICAgICAgIFBDSV9GVU5DKHBkZXYtPmRldmZuKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZSBhdCAweCVseFxuIiwKLQkgICAgICAgaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCBiYXIwX3N0YXJ0KTsKKwlpZiAodGdhX2J1c19wY2kpIHsKKwkJcHJfaW5mbygidGdhZmI6IERDMjEwMzAgW1RHQV0gZGV0ZWN0ZWQsIHJldj0weCUwMnhcbiIsCisJCQlwYXItPnRnYV9jaGlwX3Jldik7CisJCXByX2luZm8oInRnYWZiOiBhdCBQQ0kgYnVzICVkLCBkZXZpY2UgJWQsIGZ1bmN0aW9uICVkXG4iLAorCQkJdG9fcGNpX2RldihkZXYpLT5idXMtPm51bWJlciwKKwkJCVBDSV9TTE9UKHRvX3BjaV9kZXYoZGV2KS0+ZGV2Zm4pLAorCQkJUENJX0ZVTkModG9fcGNpX2RldihkZXYpLT5kZXZmbikpOworCX0KKwlpZiAodGdhX2J1c190YykKKwkJcHJfaW5mbygidGdhZmI6IFNGQisgZGV0ZWN0ZWQsIHJldj0weCUwMnhcbiIsCisJCQlwYXItPnRnYV9jaGlwX3Jldik7CisJcHJfaW5mbygiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZSBhdCAweCVseFxuIiwKKwkJaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCAobG9uZyliYXIwX3N0YXJ0KTsKIAogCXJldHVybiAwOwogCkBAIC0xNDU4LDI1ICsxNjk3LDM5IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdAotdGdhZmJfcGNpX3VucmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit0Z2FmYl91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgdGdhX3BhciAqcGFyID0gaW5mby0+cGFyOworCXJlc291cmNlX3NpemVfdCBiYXIwX3N0YXJ0ID0gMCwgYmFyMF9sZW4gPSAwOworCWludCB0Z2FfYnVzX3BjaSA9IFRHQV9CVVNfUENJKGRldik7CisJaW50IHRnYV9idXNfdGMgPSBUR0FfQlVTX1RDKGRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBOVUxMOworCXN0cnVjdCB0Z2FfcGFyICpwYXI7CiAKKwlpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaWYgKCFpbmZvKQogCQlyZXR1cm47CisKKwlwYXIgPSBpbmZvLT5wYXI7CiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCWlvdW5tYXAocGFyLT50Z2FfbWVtX2Jhc2UpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCi0JCQkgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwlpZiAodGdhX2J1c19wY2kpIHsKKwkJYmFyMF9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydCh0b19wY2lfZGV2KGRldiksIDApOworCQliYXIwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4odG9fcGNpX2RldihkZXYpLCAwKTsKKwl9CisJaWYgKHRnYV9idXNfdGMpIHsKKwkJYmFyMF9zdGFydCA9IHRvX3RjX2RldihkZXYpLT5yZXNvdXJjZS5zdGFydDsKKwkJYmFyMF9sZW4gPSB0b190Y19kZXYoZGV2KS0+cmVzb3VyY2UuZW5kIC0gYmFyMF9zdGFydCArIDE7CisJfQorCXJlbGVhc2VfbWVtX3JlZ2lvbihiYXIwX3N0YXJ0LCBiYXIwX2xlbik7CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0CiB0Z2FmYl9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ0Z2FmYl9kcml2ZXIpOworCXRjX3VucmVnaXN0ZXJfZHJpdmVyKCZ0Z2FmYl90Y19kcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdGdhZmJfcGNpX2RyaXZlcik7CiB9CiAKICNpZm5kZWYgTU9EVUxFCkBAIC0xNTA1LDYgKzE3NTgsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQKIHRnYWZiX2luaXQodm9pZCkKIHsKKwlpbnQgc3RhdHVzOwogI2lmbmRlZiBNT0RVTEUKIAljaGFyICpvcHRpb24gPSBOVUxMOwogCkBAIC0xNTEyLDcgKzE3NjYsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJdGdhZmJfc2V0dXAob3B0aW9uKTsKICNlbmRpZgotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ0Z2FmYl9kcml2ZXIpOworCXN0YXR1cyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnRnYWZiX3BjaV9kcml2ZXIpOworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSB0Y19yZWdpc3Rlcl9kcml2ZXIoJnRnYWZiX3RjX2RyaXZlcik7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKQEAgLTE1MjIsNSArMTc3OSw1IEBACiBtb2R1bGVfaW5pdCh0Z2FmYl9pbml0KTsKIG1vZHVsZV9leGl0KHRnYWZiX2V4aXQpOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oImZyYW1lYnVmZmVyIGRyaXZlciBmb3IgVEdBIGNoaXBzZXQiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnJhbWVidWZmZXIgZHJpdmVyIGZvciBUR0EvU0ZCKyBjaGlwc2V0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Zlcm1pbGlvbi9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vdmVybWlsaW9uL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjFhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3Zlcm1pbGlvbi9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK29iai0kKENPTkZJR19GQl9MRTgwNTc4KSArPSB2bWxmYi5vCitvYmotJChDT05GSUdfRkJfQ0FSSUxMT19SQU5DSCkgKz0gY3J2bWwubworCit2bWxmYi1vYmpzIDo9IHZlcm1pbGlvbi5vCitjcnZtbC1vYmpzIDo9IGNyX3BsbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Zlcm1pbGlvbi9jcl9wbGwuYyBiL2RyaXZlcnMvdmlkZW8vdmVybWlsaW9uL2NyX3BsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYzZlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3Zlcm1pbGlvbi9jcl9wbGwuYwpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgSW50ZWwgQ29ycC4gMjAwNy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogSW50ZWwgZnVuZGVkIFR1bmdzdGVuIEdyYXBoaWNzIChodHRwOi8vd3d3LnR1bmdzdGVuZ3JhcGhpY3MuY29tKSB0bworICogZGV2ZWxvcCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQ2FyaWxsbyBSYW5jaCB2aWRlbyBzdWJzeXN0ZW0gZHJpdmVyLgorICogVGhlIENhcmlsbG8gUmFuY2ggdmlkZW8gc3Vic3lzdGVtIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOworICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoZSBDYXJpbGxvIFJhbmNoIHZpZGVvIHN1YnN5c3RlbSBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQKKyAqIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGRyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBdXRob3JzOgorICogICBUaG9tYXMgSGVsbHN0cm9tIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICogICBBbGFuIEhvdXJpaGFuZSA8YWxhbmgtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSAidmVybWlsaW9uLmgiCisKKy8qIFRoZSBQTEwgQ2xvY2sgcmVnaXN0ZXIgc2l0cyBvbiBIb3N0IGJyaWRnZSAqLworI2RlZmluZSBDUlZNTF9ERVZJQ0VfTUNIICAgMHg1MDAxCisjZGVmaW5lIENSVk1MX1JFR19NQ0hCQVIgICAweDQ0CisjZGVmaW5lIENSVk1MX1JFR19NQ0hFTiAgICAweDU0CisjZGVmaW5lIENSVk1MX01DSEVOX0JJVCAgICAoMSA8PCAyOCkKKyNkZWZpbmUgQ1JWTUxfTUNITUFQX1NJWkUgIDQwOTYKKyNkZWZpbmUgQ1JWTUxfUkVHX0NMT0NLICAgIDB4YzNjCisjZGVmaW5lIENSVk1MX0NMT0NLX1NISUZUICA4CisjZGVmaW5lIENSVk1MX0NMT0NLX01BU0sgICAweDAwMDAwZjAwCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbWNoX2RldjsKK3N0YXRpYyB1MzIgbWNoX2JhcjsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm1jaF9yZWdzX2Jhc2U7CitzdGF0aWMgdTMyIHNhdmVkX2Nsb2NrOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY3J2bWxfY2xvY2tzW10gPSB7CisJNjc1MCwKKwkxMzUwMCwKKwkyNzAwMCwKKwkyOTcwMCwKKwkzNzEyNSwKKwk1NDAwMCwKKwk1OTQwMCwKKwk3NDI1MCwKKwkxMjAwMDAKKwkgICAgLyoKKwkgICAgICogVGhlcmUgYXJlIG1vcmUgY2xvY2tzLCBidXQgdGhleSBhcmUgZGlzYWJsZWQgb24gdGhlIENSIGJvYXJkLgorCSAgICAgKi8KK307CisKK3N0YXRpYyBjb25zdCB1MzIgY3J2bWxfY2xvY2tfYml0c1tdID0geworCTB4MGEsCisJMHgwOSwKKwkweDA4LAorCTB4MDcsCisJMHgwNiwKKwkweDA1LAorCTB4MDQsCisJMHgwMywKKwkweDBiCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY3J2bWxfbnVtX2Nsb2NrcyA9IEFSUkFZX1NJWkUoY3J2bWxfY2xvY2tzKTsKKworc3RhdGljIGludCBjcnZtbF9zeXNfcmVzdG9yZShzdHJ1Y3Qgdm1sX3N5cyAqc3lzKQoreworCXZvaWQgX19pb21lbSAqY2xvY2tfcmVnID0gbWNoX3JlZ3NfYmFzZSArIENSVk1MX1JFR19DTE9DSzsKKworCWlvd3JpdGUzMihzYXZlZF9jbG9jaywgY2xvY2tfcmVnKTsKKwlpb3JlYWQzMihjbG9ja19yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3J2bWxfc3lzX3NhdmUoc3RydWN0IHZtbF9zeXMgKnN5cykKK3sKKwl2b2lkIF9faW9tZW0gKmNsb2NrX3JlZyA9IG1jaF9yZWdzX2Jhc2UgKyBDUlZNTF9SRUdfQ0xPQ0s7CisKKwlzYXZlZF9jbG9jayA9IGlvcmVhZDMyKGNsb2NrX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcnZtbF9uZWFyZXN0X2luZGV4KGNvbnN0IHN0cnVjdCB2bWxfc3lzICpzeXMsIGludCBjbG9jaykKK3sKKwlpbnQgaTsKKwlpbnQgY3VyX2luZGV4ID0gMDsKKwlpbnQgY3VyX2RpZmY7CisJaW50IGRpZmY7CisKKwljdXJfZGlmZiA9IGNsb2NrIC0gY3J2bWxfY2xvY2tzWzBdOworCWN1cl9kaWZmID0gKGN1cl9kaWZmIDwgMCkgPyAtY3VyX2RpZmYgOiBjdXJfZGlmZjsKKwlmb3IgKGkgPSAxOyBpIDwgY3J2bWxfbnVtX2Nsb2NrczsgKytpKSB7CisJCWRpZmYgPSBjbG9jayAtIGNydm1sX2Nsb2Nrc1tpXTsKKwkJZGlmZiA9IChkaWZmIDwgMCkgPyAtZGlmZiA6IGRpZmY7CisJCWlmIChkaWZmIDwgY3VyX2RpZmYpIHsKKwkJCWN1cl9pbmRleCA9IGk7CisJCQljdXJfZGlmZiA9IGRpZmY7CisJCX0KKwl9CisJcmV0dXJuIGN1cl9pbmRleDsKK30KKworc3RhdGljIGludCBjcnZtbF9uZWFyZXN0X2Nsb2NrKGNvbnN0IHN0cnVjdCB2bWxfc3lzICpzeXMsIGludCBjbG9jaykKK3sKKwlyZXR1cm4gY3J2bWxfY2xvY2tzW2Nydm1sX25lYXJlc3RfaW5kZXgoc3lzLCBjbG9jayldOworfQorCitzdGF0aWMgaW50IGNydm1sX3NldF9jbG9jayhzdHJ1Y3Qgdm1sX3N5cyAqc3lzLCBpbnQgY2xvY2spCit7CisJdm9pZCBfX2lvbWVtICpjbG9ja19yZWcgPSBtY2hfcmVnc19iYXNlICsgQ1JWTUxfUkVHX0NMT0NLOworCWludCBpbmRleDsKKwl1MzIgY2xvY2tfdmFsOworCisJaW5kZXggPSBjcnZtbF9uZWFyZXN0X2luZGV4KHN5cywgY2xvY2spOworCisJaWYgKGNydm1sX2Nsb2Nrc1tpbmRleF0gIT0gY2xvY2spCisJCXJldHVybiAtRUlOVkFMOworCisJY2xvY2tfdmFsID0gaW9yZWFkMzIoY2xvY2tfcmVnKSAmIH5DUlZNTF9DTE9DS19NQVNLOworCWNsb2NrX3ZhbCA9IGNydm1sX2Nsb2NrX2JpdHNbaW5kZXhdIDw8IENSVk1MX0NMT0NLX1NISUZUOworCWlvd3JpdGUzMihjbG9ja192YWwsIGNsb2NrX3JlZyk7CisJaW9yZWFkMzIoY2xvY2tfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHZtbF9zeXMgY3JfcGxsX29wcyA9IHsKKwkubmFtZSA9ICJDYXJpbGxvIFJhbmNoIiwKKwkuc2F2ZSA9IGNydm1sX3N5c19zYXZlLAorCS5yZXN0b3JlID0gY3J2bWxfc3lzX3Jlc3RvcmUsCisJLnNldF9jbG9jayA9IGNydm1sX3NldF9jbG9jaywKKwkubmVhcmVzdF9jbG9jayA9IGNydm1sX25lYXJlc3RfY2xvY2ssCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjcl9wbGxfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisJdTMyIGRldl9lbjsKKworCW1jaF9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAorCQkJCQlDUlZNTF9ERVZJQ0VfTUNILCBOVUxMKTsKKwlpZiAoIW1jaF9kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiQ291bGQgbm90IGZpbmQgQ2FyaWxsbyBSYW5jaCBNQ0ggZGV2aWNlLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChtY2hfZGV2LCBDUlZNTF9SRUdfTUNIRU4sICZkZXZfZW4pOworCWlmICghKGRldl9lbiAmIENSVk1MX01DSEVOX0JJVCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiQ2FyaWxsbyBSYW5jaCBNQ0ggZGV2aWNlIHdhcyBub3QgZW5hYmxlZC5cbiIpOworCQlwY2lfZGV2X3B1dChtY2hfZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG1jaF9kZXYsIENSVk1MX1JFR19NQ0hCQVIsCisJCQkgICAgICAmbWNoX2Jhcik7CisJbWNoX3JlZ3NfYmFzZSA9CisJICAgIGlvcmVtYXBfbm9jYWNoZShtY2hfYmFyLCBDUlZNTF9NQ0hNQVBfU0laRSk7CisJaWYgKCFtY2hfcmVnc19iYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkNhcmlsbG8gUmFuY2ggTUNIIGRldmljZSB3YXMgbm90IGVuYWJsZWQuXG4iKTsKKwkJcGNpX2Rldl9wdXQobWNoX2Rldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWVyciA9IHZtbGZiX3JlZ2lzdGVyX3N1YnN5cygmY3JfcGxsX29wcyk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJDYXJpbGxvIFJhbmNoIGZhaWxlZCB0byBpbml0aWFsaXplIHZtbF9zeXMuXG4iKTsKKwkJcGNpX2Rldl9wdXQobWNoX2Rldik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcl9wbGxfZXhpdCh2b2lkKQoreworCXZtbGZiX3VucmVnaXN0ZXJfc3Vic3lzKCZjcl9wbGxfb3BzKTsKKworCWlvdW5tYXAobWNoX3JlZ3NfYmFzZSk7CisJcGNpX2Rldl9wdXQobWNoX2Rldik7Cit9CisKK21vZHVsZV9pbml0KGNyX3BsbF9pbml0KTsKK21vZHVsZV9leGl0KGNyX3BsbF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVHVuZ3N0ZW4gR3JhcGhpY3MgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDYXJpbGxvIFJhbmNoIFBMTCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmVybWlsaW9uL3Zlcm1pbGlvbi5jIGIvZHJpdmVycy92aWRlby92ZXJtaWxpb24vdmVybWlsaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1MzFjOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmVybWlsaW9uL3Zlcm1pbGlvbi5jCkBAIC0wLDAgKzEsMTE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgSW50ZWwgQ29ycC4gMjAwNy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogSW50ZWwgZnVuZGVkIFR1bmdzdGVuIEdyYXBoaWNzIChodHRwOi8vd3d3LnR1bmdzdGVuZ3JhcGhpY3MuY29tKSB0bworICogZGV2ZWxvcCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgVmVybWlsaW9uIFJhbmdlIGZiIGRyaXZlci4KKyAqIFRoZSBWZXJtaWxpb24gUmFuZ2UgZmIgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7CisgKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhlIFZlcm1pbGlvbiBSYW5nZSBmYiBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQKKyAqIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGRyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBdXRob3JzOgorICogICBUaG9tYXMgSGVsbHN0cvZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICogICBNaWNoZWwgRORuemVyIDxtaWNoZWwtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICogICBBbGFuIEhvdXJpaGFuZSA8YWxhbmgtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyogI2RlZmluZSBWRVJNSUxJT05fREVCVUcgKi8KKworI2luY2x1ZGUgInZlcm1pbGlvbi5oIgorCisjZGVmaW5lIE1PRFVMRV9OQU1FICJ2bWxmYiIKKworI2RlZmluZSBWTUxfVE9IVyhfdmFsLCBfd2lkdGgpICgoKChfdmFsKSA8PCAoX3dpZHRoKSkgKyAweDdGRkYgLSAoX3ZhbCkpID4+IDE2KQorCitzdGF0aWMgc3RydWN0IG11dGV4IHZtbF9tdXRleDsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGdsb2JhbF9ub19tb2RlOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFsX2hhc19tb2RlOworc3RhdGljIHN0cnVjdCBmYl9vcHMgdm1sZmJfb3BzOworc3RhdGljIHN0cnVjdCB2bWxfc3lzICpzdWJzeXMgPSBOVUxMOworc3RhdGljIGNoYXIgKnZtbF9kZWZhdWx0X21vZGUgPSAiMTAyNHg3NjhANjAiOworc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgZGVmYXVsdG1vZGUgPSB7CisJTlVMTCwgNjAsIDEwMjQsIDc2OCwgMTI4OTYsIDE0NCwgMjQsIDI5LCAzLCAxMzYsIDYsCisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAorfTsKKworc3RhdGljIHUzMiB2bWxfbWVtX3JlcXVlc3RlZCA9ICgxMCAqIDEwMjQgKiAxMDI0KTsKK3N0YXRpYyB1MzIgdm1sX21lbV9jb250aWcgPSAoNCAqIDEwMjQgKiAxMDI0KTsKK3N0YXRpYyB1MzIgdm1sX21lbV9taW4gPSAoNCAqIDEwMjQgKiAxMDI0KTsKKworc3RhdGljIHUzMiB2bWxfY2xvY2tzW10gPSB7CisJNjc1MCwKKwkxMzUwMCwKKwkyNzAwMCwKKwkyOTcwMCwKKwkzNzEyNSwKKwk1NDAwMCwKKwk1OTQwMCwKKwk3NDI1MCwKKwkxMjAwMDAsCisJMTQ4NTAwCit9OworCitzdGF0aWMgdTMyIHZtbF9udW1fY2xvY2tzID0gQVJSQVlfU0laRSh2bWxfY2xvY2tzKTsKKworLyoKKyAqIEFsbG9jYXRlIGEgY29udGlndW91cyB2cmFtIGFyZWEgYW5kIG1ha2UgaXRzIGxpbmVhciBrZXJuZWwgbWFwCisgKiB1bmNhY2hlZC4KKyAqLworCitzdGF0aWMgaW50IHZtbGZiX2FsbG9jX3ZyYW1fYXJlYShzdHJ1Y3QgdnJhbV9hcmVhICp2YSwgdW5zaWduZWQgbWF4X29yZGVyLAorCQkJCSB1bnNpZ25lZCBtaW5fb3JkZXIpCit7CisJZ2ZwX3QgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBpOworCXBncHJvdF90IHdjX3BhZ2Vwcm90OworCisJd2NfcGFnZXByb3QgPSBQQUdFX0tFUk5FTF9OT0NBQ0hFOworCW1heF9vcmRlcisrOworCWRvIHsKKwkJLyoKKwkJICogUmVhbGx5IHRyeSBoYXJkIHRvIGdldCB0aGUgbmVlZGVkIG1lbW9yeS4KKwkJICogV2UgbmVlZCBtZW1vcnkgYmVsb3cgdGhlIGZpcnN0IDMyTUIsIHNvIHdlCisJCSAqIGFkZCB0aGUgX19HRlBfRE1BIGZsYWcgdGhhdCBndWFyYW50ZWVzIHRoYXQgd2UgYXJlCisJCSAqIGJlbG93IHRoZSBmaXJzdCAxNk1CLgorCQkgKi8KKworCQlmbGFncyA9IF9fR0ZQX0RNQSB8IF9fR0ZQX0hJR0g7CisJCXZhLT5sb2dpY2FsID0KKwkJCSBfX2dldF9mcmVlX3BhZ2VzKGZsYWdzLCAtLW1heF9vcmRlcik7CisJfSB3aGlsZSAodmEtPmxvZ2ljYWwgPT0gMCAmJiBtYXhfb3JkZXIgPiBtaW5fb3JkZXIpOworCisJaWYgKCF2YS0+bG9naWNhbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2YS0+cGh5cyA9IHZpcnRfdG9fcGh5cygodm9pZCAqKXZhLT5sb2dpY2FsKTsKKwl2YS0+c2l6ZSA9IFBBR0VfU0laRSA8PCBtYXhfb3JkZXI7CisJdmEtPm9yZGVyID0gbWF4X29yZGVyOworCisJLyoKKwkgKiBJdCBzZWVtcyBsaWtlIF9fZ2V0X2ZyZWVfcGFnZXMgb25seSB1cHMgdGhlIHVzYWdlIGNvdW50CisJICogb2YgdGhlIGZpcnN0IHBhZ2UuIFRoaXMgZG9lc24ndCB3b3JrIHdpdGggbm9wYWdlIG1hcHBpbmcsIHNvCisJICogdXAgdGhlIHVzYWdlIGNvdW50IG9uY2UgbW9yZS4KKwkgKi8KKworCW1lbXNldCgodm9pZCAqKXZhLT5sb2dpY2FsLCAweDAwLCB2YS0+c2l6ZSk7CisJZm9yIChpID0gdmEtPmxvZ2ljYWw7IGkgPCB2YS0+bG9naWNhbCArIHZhLT5zaXplOyBpICs9IFBBR0VfU0laRSkgeworCQlnZXRfcGFnZSh2aXJ0X3RvX3BhZ2UoaSkpOworCX0KKworCS8qCisJICogQ2hhbmdlIGNhY2hpbmcgcG9saWN5IG9mIHRoZSBsaW5lYXIga2VybmVsIG1hcCB0byBhdm9pZAorCSAqIG1hcHBpbmcgdHlwZSBjb25mbGljdHMgd2l0aCB1c2VyLXNwYWNlIG1hcHBpbmdzLgorCSAqIFRoZSBmaXJzdCBnbG9iYWxfZmx1c2hfdGxiKCkgaXMgcmVhbGx5IG9ubHkgdGhlcmUgdG8gZG8gYSBnbG9iYWwKKwkgKiB3YmludmQoKS4KKwkgKi8KKworCWdsb2JhbF9mbHVzaF90bGIoKTsKKwljaGFuZ2VfcGFnZV9hdHRyKHZpcnRfdG9fcGFnZSh2YS0+bG9naWNhbCksIHZhLT5zaXplID4+IFBBR0VfU0hJRlQsCisJCQkgd2NfcGFnZXByb3QpOworCWdsb2JhbF9mbHVzaF90bGIoKTsKKworCXByaW50ayhLRVJOX0RFQlVHIE1PRFVMRV9OQU1FCisJICAgICAgICI6IEFsbG9jYXRlZCAlbGQgYnl0ZXMgdnJhbSBhcmVhIGF0IDB4JTA4bHhcbiIsCisJICAgICAgIHZhLT5zaXplLCB2YS0+cGh5cyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZyZWUgYSBjb250aWd1b3VzIHZyYW0gYXJlYSBhbmQgcmVzZXQgaXRzIGxpbmVhciBrZXJuZWwgbWFwCisgKiBtYXBwaW5nIHR5cGUuCisgKi8KKworc3RhdGljIHZvaWQgdm1sZmJfZnJlZV92cmFtX2FyZWEoc3RydWN0IHZyYW1fYXJlYSAqdmEpCit7CisJdW5zaWduZWQgbG9uZyBqOworCisJaWYgKHZhLT5sb2dpY2FsKSB7CisKKwkJLyoKKwkJICogUmVzZXQgdGhlIGxpbmVhciBrZXJuZWwgbWFwIGNhY2hpbmcgcG9saWN5LgorCQkgKi8KKworCQljaGFuZ2VfcGFnZV9hdHRyKHZpcnRfdG9fcGFnZSh2YS0+bG9naWNhbCksCisJCQkJIHZhLT5zaXplID4+IFBBR0VfU0hJRlQsIFBBR0VfS0VSTkVMKTsKKwkJZ2xvYmFsX2ZsdXNoX3RsYigpOworCisJCS8qCisJCSAqIERlY3JlYXNlIHRoZSB1c2FnZSBjb3VudCBvbiB0aGUgcGFnZXMgd2UndmUgdXNlZAorCQkgKiB0byBjb21wZW5zYXRlIGZvciB1cHBpbmcgd2hlbiBhbGxvY2F0aW5nLgorCQkgKi8KKworCQlmb3IgKGogPSB2YS0+bG9naWNhbDsgaiA8IHZhLT5sb2dpY2FsICsgdmEtPnNpemU7CisJCSAgICAgaiArPSBQQUdFX1NJWkUpIHsKKwkJCSh2b2lkKXB1dF9wYWdlX3Rlc3R6ZXJvKHZpcnRfdG9fcGFnZShqKSk7CisJCX0KKworCQlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRQorCQkgICAgICAgIjogRnJlZWluZyAlbGQgYnl0ZXMgdnJhbSBhcmVhIGF0IDB4JTA4bHhcbiIsCisJCSAgICAgICB2YS0+c2l6ZSwgdmEtPnBoeXMpOworCQlmcmVlX3BhZ2VzKHZhLT5sb2dpY2FsLCB2YS0+b3JkZXIpOworCisJCXZhLT5sb2dpY2FsID0gMDsKKwl9Cit9CisKKy8qCisgKiBGcmVlIGFsbG9jYXRlZCB2cmFtLgorICovCisKK3N0YXRpYyB2b2lkIHZtbGZiX2ZyZWVfdnJhbShzdHJ1Y3Qgdm1sX2luZm8gKnZpbmZvKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHZpbmZvLT5udW1fYXJlYXM7ICsraSkgeworCQl2bWxmYl9mcmVlX3ZyYW1fYXJlYSgmdmluZm8tPnZyYW1baV0pOworCX0KKwl2aW5mby0+bnVtX2FyZWFzID0gMDsKK30KKworLyoKKyAqIEFsbG9jYXRlIHZyYW0uIEN1cnJlbnRseSB3ZSB0cnkgdG8gYWxsb2NhdGUgY29udGlndW91cyBhcmVhcyBmcm9tIHRoZQorICogX19HRlBfRE1BIHpvbmUgYW5kIHB1enpsZSB0aGVtIHRvZ2V0aGVyLiBBIGJldHRlciBhcHByb2FjaCB3b3VsZCBiZSB0bworICogYWxsb2NhdGUgb25lIGNvbnRpZ3VvdXMgYXJlYSBmb3Igc2Nhbm91dCBhbmQgdXNlIG9uZS1wYWdlIGFsbG9jYXRpb25zIGZvcgorICogb2Zmc2NyZWVuIGFyZWFzLiBUaGlzIHJlcXVpcmVzIHVzZXItc3BhY2UgYW5kIEdQVSB2aXJ0dWFsIG1hcHBpbmdzLgorICovCisKK3N0YXRpYyBpbnQgdm1sZmJfYWxsb2NfdnJhbShzdHJ1Y3Qgdm1sX2luZm8gKnZpbmZvLAorCQkJICAgIHNpemVfdCByZXF1ZXN0ZWQsCisJCQkgICAgc2l6ZV90IG1pbl90b3RhbCwgc2l6ZV90IG1pbl9jb250aWcpCit7CisJaW50IGksIGo7CisJaW50IG9yZGVyOworCWludCBjb250aWd1b3VzOworCWludCBlcnI7CisJc3RydWN0IHZyYW1fYXJlYSAqdmE7CisJc3RydWN0IHZyYW1fYXJlYSAqdmEyOworCisJdmluZm8tPm51bV9hcmVhcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IFZNTF9WUkFNX0FSRUFTOyArK2kpIHsKKwkJdmEgPSAmdmluZm8tPnZyYW1baV07CisJCW9yZGVyID0gMDsKKworCQl3aGlsZSAocmVxdWVzdGVkID4gKFBBR0VfU0laRSA8PCBvcmRlcikgJiYgb3JkZXIgPCBNQVhfT1JERVIpCisJCQlvcmRlcisrOworCisJCWVyciA9IHZtbGZiX2FsbG9jX3ZyYW1fYXJlYSh2YSwgb3JkZXIsIDApOworCisJCWlmIChlcnIpCisJCQlicmVhazsKKworCQlpZiAoaSA9PSAwKSB7CisJCQl2aW5mby0+dnJhbV9zdGFydCA9IHZhLT5waHlzOworCQkJdmluZm8tPnZyYW1fbG9naWNhbCA9ICh2b2lkIF9faW9tZW0gKikgdmEtPmxvZ2ljYWw7CisJCQl2aW5mby0+dnJhbV9jb250aWdfc2l6ZSA9IHZhLT5zaXplOworCQkJdmluZm8tPm51bV9hcmVhcyA9IDE7CisJCX0gZWxzZSB7CisJCQljb250aWd1b3VzID0gMDsKKworCQkJZm9yIChqID0gMDsgaiA8IGk7ICsraikgeworCQkJCXZhMiA9ICZ2aW5mby0+dnJhbVtqXTsKKwkJCQlpZiAodmEtPnBoeXMgKyB2YS0+c2l6ZSA9PSB2YTItPnBoeXMgfHwKKwkJCQkgICAgdmEyLT5waHlzICsgdmEyLT5zaXplID09IHZhLT5waHlzKSB7CisJCQkJCWNvbnRpZ3VvdXMgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjb250aWd1b3VzKSB7CisJCQkJdmluZm8tPm51bV9hcmVhcysrOworCQkJCWlmICh2YS0+cGh5cyA8IHZpbmZvLT52cmFtX3N0YXJ0KSB7CisJCQkJCXZpbmZvLT52cmFtX3N0YXJ0ID0gdmEtPnBoeXM7CisJCQkJCXZpbmZvLT52cmFtX2xvZ2ljYWwgPQorCQkJCQkJKHZvaWQgX19pb21lbSAqKXZhLT5sb2dpY2FsOworCQkJCX0KKwkJCQl2aW5mby0+dnJhbV9jb250aWdfc2l6ZSArPSB2YS0+c2l6ZTsKKwkJCX0gZWxzZSB7CisJCQkJdm1sZmJfZnJlZV92cmFtX2FyZWEodmEpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKHJlcXVlc3RlZCA8IHZhLT5zaXplKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCXJlcXVlc3RlZCAtPSB2YS0+c2l6ZTsKKwl9CisKKwlpZiAodmluZm8tPnZyYW1fY29udGlnX3NpemUgPiBtaW5fdG90YWwgJiYKKwkgICAgdmluZm8tPnZyYW1fY29udGlnX3NpemUgPiBtaW5fY29udGlnKSB7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUKKwkJICAgICAgICI6IENvbnRpZ3VvdXMgdnJhbTogJWxkIGJ5dGVzIGF0IHBoeXNpY2FsIDB4JTA4bHguXG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpdmluZm8tPnZyYW1fY29udGlnX3NpemUsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyl2aW5mby0+dnJhbV9zdGFydCk7CisKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpbnRrKEtFUk5fRVJSIE1PRFVMRV9OQU1FCisJICAgICAgICI6IENvdWxkIG5vdCBhbGxvY2F0ZSByZXF1ZXN0ZWQgbWluaW1hbCBhbW91bnQgb2YgdnJhbS5cbiIpOworCisJdm1sZmJfZnJlZV92cmFtKHZpbmZvKTsKKworCXJldHVybiAtRU5PTUVNOworfQorCisvKgorICogRmluZCB0aGUgR1BVIHRvIHVzZSB3aXRoIG91ciBkaXNwbGF5IGNvbnRyb2xsZXIuCisgKi8KKworc3RhdGljIGludCB2bWxmYl9nZXRfZ3B1KHN0cnVjdCB2bWxfcGFyICpwYXIpCit7CisJbXV0ZXhfbG9jaygmdm1sX211dGV4KTsKKworCXBhci0+Z3B1ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgVk1MX0RFVklDRV9HUFUsIE5VTEwpOworCisJaWYgKCFwYXItPmdwdSkgeworCQltdXRleF91bmxvY2soJnZtbF9tdXRleCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW11dGV4X3VubG9jaygmdm1sX211dGV4KTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwYXItPmdwdSkgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCisvKgorICogRmluZCBhIGNvbnRpZ3VvdXMgdnJhbSBhcmVhIHRoYXQgY29udGFpbnMgYSBnaXZlbiBvZmZzZXQgZnJvbSB2cmFtIHN0YXJ0LgorICovCitzdGF0aWMgaW50IHZtbGZiX3ZyYW1fb2Zmc2V0KHN0cnVjdCB2bWxfaW5mbyAqdmluZm8sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgYW9mZnNldDsKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IHZpbmZvLT5udW1fYXJlYXM7ICsraSkgeworCQlhb2Zmc2V0ID0gb2Zmc2V0IC0gKHZpbmZvLT52cmFtW2ldLnBoeXMgLSB2aW5mby0+dnJhbV9zdGFydCk7CisKKwkJaWYgKGFvZmZzZXQgPCB2aW5mby0+dnJhbVtpXS5zaXplKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogUmVtYXAgdGhlIE1NSU8gcmVnaXN0ZXIgc3BhY2VzIG9mIHRoZSBWREMgYW5kIHRoZSBHUFUuCisgKi8KKworc3RhdGljIGludCB2bWxmYl9lbmFibGVfbW1pbyhzdHJ1Y3Qgdm1sX3BhciAqcGFyKQoreworCWludCBlcnI7CisKKwlwYXItPnZkY19tZW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwYXItPnZkYywgMCk7CisJcGFyLT52ZGNfbWVtX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBhci0+dmRjLCAwKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwYXItPnZkY19tZW1fYmFzZSwgcGFyLT52ZGNfbWVtX3NpemUsICJ2bWxmYiIpKSB7CisJCXByaW50ayhLRVJOX0VSUiBNT0RVTEVfTkFNRQorCQkgICAgICAgIjogQ291bGQgbm90IGNsYWltIGRpc3BsYXkgY29udHJvbGxlciBNTUlPLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXBhci0+dmRjX21lbSA9IGlvcmVtYXBfbm9jYWNoZShwYXItPnZkY19tZW1fYmFzZSwgcGFyLT52ZGNfbWVtX3NpemUpOworCWlmIChwYXItPnZkY19tZW0gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgTU9EVUxFX05BTUUKKwkJICAgICAgICI6IENvdWxkIG5vdCBtYXAgZGlzcGxheSBjb250cm9sbGVyIE1NSU8uXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyXzA7CisJfQorCisJcGFyLT5ncHVfbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGFyLT5ncHUsIDApOworCXBhci0+Z3B1X21lbV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihwYXItPmdwdSwgMCk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocGFyLT5ncHVfbWVtX2Jhc2UsIHBhci0+Z3B1X21lbV9zaXplLCAidm1sZmIiKSkgeworCQlwcmludGsoS0VSTl9FUlIgTU9EVUxFX05BTUUgIjogQ291bGQgbm90IGNsYWltIEdQVSBNTUlPLlxuIik7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXRfZXJyXzE7CisJfQorCXBhci0+Z3B1X21lbSA9IGlvcmVtYXBfbm9jYWNoZShwYXItPmdwdV9tZW1fYmFzZSwgcGFyLT5ncHVfbWVtX3NpemUpOworCWlmIChwYXItPmdwdV9tZW0gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgTU9EVUxFX05BTUUgIjogQ291bGQgbm90IG1hcCBHUFUgTU1JTy5cbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnJfMjsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2Vycl8yOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihwYXItPmdwdV9tZW1fYmFzZSwgcGFyLT5ncHVfbWVtX3NpemUpOworb3V0X2Vycl8xOgorCWlvdW5tYXAocGFyLT52ZGNfbWVtKTsKK291dF9lcnJfMDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocGFyLT52ZGNfbWVtX2Jhc2UsIHBhci0+dmRjX21lbV9zaXplKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogVW5tYXAgdGhlIFZEQyBhbmQgR1BVIHJlZ2lzdGVyIHNwYWNlcy4KKyAqLworCitzdGF0aWMgdm9pZCB2bWxmYl9kaXNhYmxlX21taW8oc3RydWN0IHZtbF9wYXIgKnBhcikKK3sKKwlpb3VubWFwKHBhci0+Z3B1X21lbSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHBhci0+Z3B1X21lbV9iYXNlLCBwYXItPmdwdV9tZW1fc2l6ZSk7CisJaW91bm1hcChwYXItPnZkY19tZW0pOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwYXItPnZkY19tZW1fYmFzZSwgcGFyLT52ZGNfbWVtX3NpemUpOworfQorCisvKgorICogUmVsZWFzZSBhbmQgdW5pbml0IHRoZSBWREMgYW5kIEdQVS4KKyAqLworCitzdGF0aWMgdm9pZCB2bWxmYl9yZWxlYXNlX2RldmljZXMoc3RydWN0IHZtbF9wYXIgKnBhcikKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGFyLT5yZWZjb3VudCkpIHsKKwkJcGNpX3NldF9kcnZkYXRhKHBhci0+dmRjLCBOVUxMKTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBhci0+Z3B1KTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBhci0+dmRjKTsKKwl9Cit9CisKKy8qCisgKiBGcmVlIHVwIGFsbG9jYXRlZCByZXNvdXJjZXMgZm9yIGEgZGV2aWNlLgorICovCisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2bWxfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCB2bWxfaW5mbyAqdmluZm87CisJc3RydWN0IHZtbF9wYXIgKnBhcjsKKworCWluZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoaW5mbykgeworCQl2aW5mbyA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3Qgdm1sX2luZm8sIGluZm8pOworCQlwYXIgPSB2aW5mby0+cGFyOworCQltdXRleF9sb2NrKCZ2bWxfbXV0ZXgpOworCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCQl2bWxmYl9mcmVlX3ZyYW0odmluZm8pOworCQl2bWxmYl9kaXNhYmxlX21taW8ocGFyKTsKKwkJdm1sZmJfcmVsZWFzZV9kZXZpY2VzKHBhcik7CisJCWtmcmVlKHZpbmZvKTsKKwkJa2ZyZWUocGFyKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2bWxfbXV0ZXgpOworCX0KK30KKworc3RhdGljIHZvaWQgdm1sZmJfc2V0X3ByZWZfcGl4ZWxfZm9ybWF0KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMTY6CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDU7CisJCXZhci0+cmVkLm9mZnNldCA9IDEwOworCQl2YXItPnJlZC5sZW5ndGggPSA1OworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAxNTsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA4OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7CisJCXZhci0+cmVkLmxlbmd0aCA9IDg7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDI0OworCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwl2YXItPmJsdWUubXNiX3JpZ2h0ID0gdmFyLT5ncmVlbi5tc2JfcmlnaHQgPQorCSAgICB2YXItPnJlZC5tc2JfcmlnaHQgPSB2YXItPnRyYW5zcC5tc2JfcmlnaHQgPSAwOworfQorCisvKgorICogRGV2aWNlIGluaXRpYWxpemF0aW9uLgorICogV2UgaW5pdGlhbGl6ZSBvbmUgdm1sX3BhciBzdHJ1Y3QgcGVyIGRldmljZSBhbmQgb25lIHZtbF9pbmZvCisgKiBzdHJ1Y3QgcGVyIHBpcGUuIEN1cnJlbnRseSB3ZSBoYXZlIG9ubHkgb25lIHBpcGUuCisgKi8KKworc3RhdGljIGludCBfX2RldmluaXQgdm1sX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgdm1sX2luZm8gKnZpbmZvOworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCB2bWxfcGFyICpwYXI7CisJaW50IGVyciA9IDA7CisKKwlwYXIgPSBremFsbG9jKHNpemVvZigqcGFyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBhciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXZpbmZvID0ga3phbGxvYyhzaXplb2YoKnZpbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHZpbmZvID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyXzA7CisJfQorCisJdmluZm8tPnBhciA9IHBhcjsKKwlwYXItPnZkYyA9IGRldjsKKwlhdG9taWNfc2V0KCZwYXItPnJlZmNvdW50LCAxKTsKKworCXN3aXRjaCAoaWQtPmRldmljZSkgeworCWNhc2UgVk1MX0RFVklDRV9WREM6CisJCWlmICgoZXJyID0gdm1sZmJfZ2V0X2dwdShwYXIpKSkKKwkJCWdvdG8gb3V0X2Vycl8xOworCQlwY2lfc2V0X2RydmRhdGEoZGV2LCAmdmluZm8tPmluZm8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dF9lcnJfMTsKKwkJYnJlYWs7CisJfQorCisJaW5mbyA9ICZ2aW5mby0+aW5mbzsKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX1BBUlRJQUxfUEFOX09LOworCisJZXJyID0gdm1sZmJfZW5hYmxlX21taW8ocGFyKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9lcnJfMjsKKworCWVyciA9IHZtbGZiX2FsbG9jX3ZyYW0odmluZm8sIHZtbF9tZW1fcmVxdWVzdGVkLAorCQkJICAgICAgIHZtbF9tZW1fY29udGlnLCB2bWxfbWVtX21pbik7CisJaWYgKGVycikKKwkJZ290byBvdXRfZXJyXzM7CisKKwlzdHJjcHkoaW5mby0+Zml4LmlkLCAiVmVybWlsaW9uIFJhbmdlIik7CisJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSAwOworCWluZm8tPmZpeC5tbWlvX2xlbiA9IDA7CisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSB2aW5mby0+dnJhbV9zdGFydDsKKwlpbmZvLT5maXguc21lbV9sZW4gPSB2aW5mby0+dnJhbV9jb250aWdfc2l6ZTsKKwlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwlpbmZvLT5maXgueXBhbnN0ZXAgPSAxOworCWluZm8tPmZpeC54cGFuc3RlcCA9IDE7CisJaW5mby0+Zml4Lnl3cmFwc3RlcCA9IDA7CisJaW5mby0+Zml4LmFjY2VsID0gRkJfQUNDRUxfTk9ORTsKKwlpbmZvLT5zY3JlZW5fYmFzZSA9IHZpbmZvLT52cmFtX2xvZ2ljYWw7CisJaW5mby0+cHNldWRvX3BhbGV0dGUgPSB2aW5mby0+cHNldWRvX3BhbGV0dGU7CisJaW5mby0+cGFyID0gcGFyOworCWluZm8tPmZib3BzID0gJnZtbGZiX29wczsKKwlpbmZvLT5kZXZpY2UgPSAmZGV2LT5kZXY7CisKKwlJTklUX0xJU1RfSEVBRCgmdmluZm8tPmhlYWQpOworCXZpbmZvLT5waXBlX2Rpc2FibGVkID0gMTsKKwl2aW5mby0+Y3VyX2JsYW5rX21vZGUgPSBGQl9CTEFOS19VTkJMQU5LOworCisJaW5mby0+dmFyLmdyYXlzY2FsZSA9IDA7CisJaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID0gMTY7CisJdm1sZmJfc2V0X3ByZWZfcGl4ZWxfZm9ybWF0KCZpbmZvLT52YXIpOworCisJaWYgKCFmYl9maW5kX21vZGUKKwkgICAgKCZpbmZvLT52YXIsIGluZm8sIHZtbF9kZWZhdWx0X21vZGUsIE5VTEwsIDAsICZkZWZhdWx0bW9kZSwgMTYpKSB7CisJCXByaW50ayhLRVJOX0VSUiBNT0RVTEVfTkFNRSAiOiBDb3VsZCBub3QgZmluZCBpbml0aWFsIG1vZGVcbiIpOworCX0KKworCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDEpIDwgMCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnJfNDsKKwl9CisKKwllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBNT0RVTEVfTkFNRSAiOiBSZWdpc3RlciBmcmFtZWJ1ZmZlciBlcnJvci5cbiIpOworCQlnb3RvIG91dF9lcnJfNTsKKwl9CisKKwlwcmludGsoIkluaXRpYWxpemVkIHZtbGZiXG4iKTsKKworCXJldHVybiAwOworCitvdXRfZXJyXzU6CisJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKK291dF9lcnJfNDoKKwl2bWxmYl9mcmVlX3ZyYW0odmluZm8pOworb3V0X2Vycl8zOgorCXZtbGZiX2Rpc2FibGVfbW1pbyhwYXIpOworb3V0X2Vycl8yOgorCXZtbGZiX3JlbGVhc2VfZGV2aWNlcyhwYXIpOworb3V0X2Vycl8xOgorCWtmcmVlKHZpbmZvKTsKK291dF9lcnJfMDoKKwlrZnJlZShwYXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdm1sZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJLyoKKwkgKiBTYXZlIHJlZ2lzdGVycyBoZXJlPworCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtbGZiX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCS8qCisJICogUmVzdG9yZSByZWdpc3RlcnMgaGVyZS4KKwkgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtbF9uZWFyZXN0X2Nsb2NrKGludCBjbG9jaykKK3sKKworCWludCBpOworCWludCBjdXJfaW5kZXg7CisJaW50IGN1cl9kaWZmOworCWludCBkaWZmOworCisJY3VyX2luZGV4ID0gMDsKKwljdXJfZGlmZiA9IGNsb2NrIC0gdm1sX2Nsb2Nrc1swXTsKKwljdXJfZGlmZiA9IChjdXJfZGlmZiA8IDApID8gLWN1cl9kaWZmIDogY3VyX2RpZmY7CisJZm9yIChpID0gMTsgaSA8IHZtbF9udW1fY2xvY2tzOyArK2kpIHsKKwkJZGlmZiA9IGNsb2NrIC0gdm1sX2Nsb2Nrc1tpXTsKKwkJZGlmZiA9IChkaWZmIDwgMCkgPyAtZGlmZiA6IGRpZmY7CisJCWlmIChkaWZmIDwgY3VyX2RpZmYpIHsKKwkJCWN1cl9pbmRleCA9IGk7CisJCQljdXJfZGlmZiA9IGRpZmY7CisJCX0KKwl9CisJcmV0dXJuIHZtbF9jbG9ja3NbY3VyX2luZGV4XTsKK30KKworc3RhdGljIGludCB2bWxmYl9jaGVja192YXJfbG9ja2VkKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJCSAgc3RydWN0IHZtbF9pbmZvICp2aW5mbykKK3sKKwl1MzIgcGl0Y2g7CisJdTY0IG1lbTsKKwlpbnQgbmVhcmVzdF9jbG9jazsKKwlpbnQgY2xvY2s7CisJaW50IGNsb2NrX2RpZmY7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHY7CisKKwl2ID0gKnZhcjsKKwljbG9jayA9IFBJQ09TMktIWih2YXItPnBpeGNsb2NrKTsKKworCWlmIChzdWJzeXMgJiYgc3Vic3lzLT5uZWFyZXN0X2Nsb2NrKSB7CisJCW5lYXJlc3RfY2xvY2sgPSBzdWJzeXMtPm5lYXJlc3RfY2xvY2soc3Vic3lzLCBjbG9jayk7CisJfSBlbHNlIHsKKwkJbmVhcmVzdF9jbG9jayA9IHZtbF9uZWFyZXN0X2Nsb2NrKGNsb2NrKTsKKwl9CisKKwkvKgorCSAqIEFjY2VwdCBhIDIwJSBkaWZmLgorCSAqLworCisJY2xvY2tfZGlmZiA9IG5lYXJlc3RfY2xvY2sgLSBjbG9jazsKKwljbG9ja19kaWZmID0gKGNsb2NrX2RpZmYgPCAwKSA/IC1jbG9ja19kaWZmIDogY2xvY2tfZGlmZjsKKwlpZiAoY2xvY2tfZGlmZiA+IGNsb2NrIC8gNSkgeworI2lmIDAKKwkJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogRGlmZiBmYWlsdXJlLiAlZCAlZFxuIixjbG9ja19kaWZmLGNsb2NrKTsKKyNlbmRpZgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2LnBpeGNsb2NrID0gS0haMlBJQ09TKG5lYXJlc3RfY2xvY2spOworCisJaWYgKHZhci0+eHJlcyA+IFZNTF9NQVhfWFJFUyB8fCB2YXItPnlyZXMgPiBWTUxfTUFYX1lSRVMpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogUmVzb2x1dGlvbiBmYWlsdXJlLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPiBWTUxfTUFYX1hSRVNfVklSVFVBTCkgeworCQlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRQorCQkgICAgICAgIjogVmlydHVhbCByZXNvbHV0aW9uIGZhaWx1cmUuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXN3aXRjaCAodi5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMCAuLi4gMTY6CisJCXYuYml0c19wZXJfcGl4ZWwgPSAxNjsKKwkJYnJlYWs7CisJY2FzZSAxNyAuLi4gMzI6CisJCXYuYml0c19wZXJfcGl4ZWwgPSAzMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogSW52YWxpZCBicHA6ICVkLlxuIiwKKwkJICAgICAgIHZhci0+Yml0c19wZXJfcGl4ZWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwaXRjaCA9IF9fQUxJR05fTUFTSygodmFyLT54cmVzICogdmFyLT5iaXRzX3Blcl9waXhlbCkgPj4gMywgMHgzRik7CisJbWVtID0gcGl0Y2ggKiB2YXItPnlyZXNfdmlydHVhbDsKKwlpZiAobWVtID4gdmluZm8tPnZyYW1fY29udGlnX3NpemUpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3dpdGNoICh2LmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSAxNjoKKwkJaWYgKHZhci0+Ymx1ZS5vZmZzZXQgIT0gMCB8fAorCQkgICAgdmFyLT5ibHVlLmxlbmd0aCAhPSA1IHx8CisJCSAgICB2YXItPmdyZWVuLm9mZnNldCAhPSA1IHx8CisJCSAgICB2YXItPmdyZWVuLmxlbmd0aCAhPSA1IHx8CisJCSAgICB2YXItPnJlZC5vZmZzZXQgIT0gMTAgfHwKKwkJICAgIHZhci0+cmVkLmxlbmd0aCAhPSA1IHx8CisJCSAgICB2YXItPnRyYW5zcC5vZmZzZXQgIT0gMTUgfHwgdmFyLT50cmFuc3AubGVuZ3RoICE9IDEpIHsKKwkJCXZtbGZiX3NldF9wcmVmX3BpeGVsX2Zvcm1hdCgmdik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJaWYgKHZhci0+Ymx1ZS5vZmZzZXQgIT0gMCB8fAorCQkgICAgdmFyLT5ibHVlLmxlbmd0aCAhPSA4IHx8CisJCSAgICB2YXItPmdyZWVuLm9mZnNldCAhPSA4IHx8CisJCSAgICB2YXItPmdyZWVuLmxlbmd0aCAhPSA4IHx8CisJCSAgICB2YXItPnJlZC5vZmZzZXQgIT0gMTYgfHwKKwkJICAgIHZhci0+cmVkLmxlbmd0aCAhPSA4IHx8CisJCSAgICAodmFyLT50cmFuc3AubGVuZ3RoICE9IDAgJiYgdmFyLT50cmFuc3AubGVuZ3RoICE9IDgpIHx8CisJCSAgICAodmFyLT50cmFuc3AubGVuZ3RoID09IDggJiYgdmFyLT50cmFuc3Aub2Zmc2V0ICE9IDI0KSkgeworCQkJdm1sZmJfc2V0X3ByZWZfcGl4ZWxfZm9ybWF0KCZ2KTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqdmFyID0gdjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtbGZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHZtbF9pbmZvICp2aW5mbyA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3Qgdm1sX2luZm8sIGluZm8pOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ2bWxfbXV0ZXgpOworCXJldCA9IHZtbGZiX2NoZWNrX3Zhcl9sb2NrZWQodmFyLCB2aW5mbyk7CisJbXV0ZXhfdW5sb2NrKCZ2bWxfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdm1sX3dhaXRfdmJsYW5rKHN0cnVjdCB2bWxfaW5mbyAqdmluZm8pCit7CisJLyogV2FpdCBmb3IgdmJsYW5rLiBGb3Igbm93LCBqdXN0IHdhaXQgZm9yIGEgNTBIeiBjeWNsZSAoMjBtcykpICovCisJbWRlbGF5KDIwKTsKK30KKworc3RhdGljIHZvaWQgdm1sZmJfZGlzYWJsZV9waXBlKHN0cnVjdCB2bWxfaW5mbyAqdmluZm8pCit7CisJc3RydWN0IHZtbF9wYXIgKnBhciA9IHZpbmZvLT5wYXI7CisKKwkvKiBEaXNhYmxlIHRoZSBNRFZPIHBhZCAqLworCVZNTF9XUklURTMyKHBhciwgVk1MX1JDT01QU1RBVCwgMCk7CisJd2hpbGUgKCEoVk1MX1JFQUQzMihwYXIsIFZNTF9SQ09NUFNUQVQpICYgVk1MX01EVk9fVkRDX0lfUkNPTVApKSA7CisKKwkvKiBEaXNhYmxlIGRpc3BsYXkgcGxhbmVzICovCisJVk1MX1dSSVRFMzIocGFyLCBWTUxfRFNQQ0NOVFIsCisJCSAgICBWTUxfUkVBRDMyKHBhciwgVk1MX0RTUENDTlRSKSAmIH5WTUxfR0ZYX0VOQUJMRSk7CisJKHZvaWQpVk1MX1JFQUQzMihwYXIsIFZNTF9EU1BDQ05UUik7CisJLyogV2FpdCBmb3IgdmJsYW5rIGZvciB0aGUgZGlzYWJsZSB0byB0YWtlIGVmZmVjdCAqLworCXZtbF93YWl0X3ZibGFuayh2aW5mbyk7CisKKwkvKiBOZXh0LCBkaXNhYmxlIGRpc3BsYXkgcGlwZXMgKi8KKwlWTUxfV1JJVEUzMihwYXIsIFZNTF9QSVBFQUNPTkYsIDApOworCSh2b2lkKVZNTF9SRUFEMzIocGFyLCBWTUxfUElQRUFDT05GKTsKKworCXZpbmZvLT5waXBlX2Rpc2FibGVkID0gMTsKK30KKworI2lmZGVmIFZFUk1JTElPTl9ERUJVRworc3RhdGljIHZvaWQgdm1sX2R1bXBfcmVncyhzdHJ1Y3Qgdm1sX2luZm8gKnZpbmZvKQoreworCXN0cnVjdCB2bWxfcGFyICpwYXIgPSB2aW5mby0+cGFyOworCisJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogTW9kZXNldHRpbmcgcmVnaXN0ZXIgZHVtcDpcbiIpOworCXByaW50ayhLRVJOX0RFQlVHIE1PRFVMRV9OQU1FICI6IFx0SFRPVEFMX0EgICAgICAgICA6IDB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkKVZNTF9SRUFEMzIocGFyLCBWTUxfSFRPVEFMX0EpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRSAiOiBcdEhCTEFOS19BICAgICAgICAgOiAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZClWTUxfUkVBRDMyKHBhciwgVk1MX0hCTEFOS19BKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogXHRIU1lOQ19BICAgICAgICAgIDogMHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQpVk1MX1JFQUQzMihwYXIsIFZNTF9IU1lOQ19BKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogXHRWVE9UQUxfQSAgICAgICAgIDogMHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQpVk1MX1JFQUQzMihwYXIsIFZNTF9WVE9UQUxfQSkpOworCXByaW50ayhLRVJOX0RFQlVHIE1PRFVMRV9OQU1FICI6IFx0VkJMQU5LX0EgICAgICAgICA6IDB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkKVZNTF9SRUFEMzIocGFyLCBWTUxfVkJMQU5LX0EpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRSAiOiBcdFZTWU5DX0EgICAgICAgICAgOiAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZClWTUxfUkVBRDMyKHBhciwgVk1MX1ZTWU5DX0EpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRSAiOiBcdERTUENTVFJJREUgICAgICAgOiAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZClWTUxfUkVBRDMyKHBhciwgVk1MX0RTUENTVFJJREUpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRSAiOiBcdERTUENTSVpFICAgICAgICAgOiAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZClWTUxfUkVBRDMyKHBhciwgVk1MX0RTUENTSVpFKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogXHREU1BDUE9TICAgICAgICAgIDogMHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQpVk1MX1JFQUQzMihwYXIsIFZNTF9EU1BDUE9TKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogXHREU1BBUkIgICAgICAgICAgIDogMHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQpVk1MX1JFQUQzMihwYXIsIFZNTF9EU1BBUkIpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRSAiOiBcdERTUENBRERSICAgICAgICAgOiAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZClWTUxfUkVBRDMyKHBhciwgVk1MX0RTUENBRERSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogXHRCQ0xSUEFUX0EgICAgICAgIDogMHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQpVk1MX1JFQUQzMihwYXIsIFZNTF9CQ0xSUEFUX0EpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRSAiOiBcdENBTlZTQ0xSX0EgICAgICAgOiAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZClWTUxfUkVBRDMyKHBhciwgVk1MX0NBTlZTQ0xSX0EpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRSAiOiBcdFBJUEVBU1JDICAgICAgICAgOiAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZClWTUxfUkVBRDMyKHBhciwgVk1MX1BJUEVBU1JDKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogXHRQSVBFQUNPTkYgICAgICAgIDogMHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQpVk1MX1JFQUQzMihwYXIsIFZNTF9QSVBFQUNPTkYpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRSAiOiBcdERTUENDTlRSICAgICAgICAgOiAweCUwOHhcbiIsCisJICAgICAgICh1bnNpZ25lZClWTUxfUkVBRDMyKHBhciwgVk1MX0RTUENDTlRSKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogXHRSQ09NUFNUQVQgICAgICAgIDogMHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQpVk1MX1JFQUQzMihwYXIsIFZNTF9SQ09NUFNUQVQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRSAiOiBFbmQgb2YgbW9kZXNldHRpbmcgcmVnaXN0ZXIgZHVtcC5cbiIpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgdm1sZmJfc2V0X3Bhcl9sb2NrZWQoc3RydWN0IHZtbF9pbmZvICp2aW5mbykKK3sKKwlzdHJ1Y3Qgdm1sX3BhciAqcGFyID0gdmluZm8tPnBhcjsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9ICZ2aW5mby0+aW5mbzsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7CisJdTMyIGh0b3RhbCwgaGFjdGl2ZSwgaGJsYW5rX3N0YXJ0LCBoYmxhbmtfZW5kLCBoc3luY19zdGFydCwgaHN5bmNfZW5kOworCXUzMiB2dG90YWwsIHZhY3RpdmUsIHZibGFua19zdGFydCwgdmJsYW5rX2VuZCwgdnN5bmNfc3RhcnQsIHZzeW5jX2VuZDsKKwl1MzIgZHNwY250cjsKKwlpbnQgY2xvY2s7CisKKwl2aW5mby0+Ynl0ZXNfcGVyX3BpeGVsID0gdmFyLT5iaXRzX3Blcl9waXhlbCA+PiAzOworCXZpbmZvLT5zdHJpZGUgPQorCSAgICBfX0FMSUdOX01BU0sodmFyLT54cmVzX3ZpcnR1YWwgKiB2aW5mby0+Ynl0ZXNfcGVyX3BpeGVsLCAweDNGKTsKKwlpbmZvLT5maXgubGluZV9sZW5ndGggPSB2aW5mby0+c3RyaWRlOworCisJaWYgKCFzdWJzeXMpCisJCXJldHVybiAwOworCisJaHRvdGFsID0KKwkgICAgdmFyLT54cmVzICsgdmFyLT5yaWdodF9tYXJnaW4gKyB2YXItPmhzeW5jX2xlbiArIHZhci0+bGVmdF9tYXJnaW47CisJaGFjdGl2ZSA9IHZhci0+eHJlczsKKwloYmxhbmtfc3RhcnQgPSB2YXItPnhyZXM7CisJaGJsYW5rX2VuZCA9IGh0b3RhbDsKKwloc3luY19zdGFydCA9IGhhY3RpdmUgKyB2YXItPnJpZ2h0X21hcmdpbjsKKwloc3luY19lbmQgPSBoc3luY19zdGFydCArIHZhci0+aHN5bmNfbGVuOworCisJdnRvdGFsID0KKwkgICAgdmFyLT55cmVzICsgdmFyLT5sb3dlcl9tYXJnaW4gKyB2YXItPnZzeW5jX2xlbiArIHZhci0+dXBwZXJfbWFyZ2luOworCXZhY3RpdmUgPSB2YXItPnlyZXM7CisJdmJsYW5rX3N0YXJ0ID0gdmFyLT55cmVzOworCXZibGFua19lbmQgPSB2dG90YWw7CisJdnN5bmNfc3RhcnQgPSB2YWN0aXZlICsgdmFyLT5sb3dlcl9tYXJnaW47CisJdnN5bmNfZW5kID0gdnN5bmNfc3RhcnQgKyB2YXItPnZzeW5jX2xlbjsKKworCWRzcGNudHIgPSBWTUxfR0ZYX0VOQUJMRSB8IFZNTF9HRlhfR0FNTUFCWVBBU1M7CisJY2xvY2sgPSBQSUNPUzJLSFoodmFyLT5waXhjbG9jayk7CisKKwlpZiAoc3Vic3lzLT5uZWFyZXN0X2Nsb2NrKSB7CisJCWNsb2NrID0gc3Vic3lzLT5uZWFyZXN0X2Nsb2NrKHN1YnN5cywgY2xvY2spOworCX0gZWxzZSB7CisJCWNsb2NrID0gdm1sX25lYXJlc3RfY2xvY2soY2xvY2spOworCX0KKwlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRQorCSAgICAgICAiOiBTZXQgbW9kZSBIZnJlcSA6ICVkIGtIeiwgVmZyZXEgOiAlZCBIei5cbiIsIGNsb2NrIC8gaHRvdGFsLAorCSAgICAgICAoKGNsb2NrIC8gaHRvdGFsKSAqIDEwMDApIC8gdnRvdGFsKTsKKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMTY6CisJCWRzcGNudHIgfD0gVk1MX0dGWF9BUkdCMTU1NTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJaWYgKHZhci0+dHJhbnNwLmxlbmd0aCA9PSA4KQorCQkJZHNwY250ciB8PSBWTUxfR0ZYX0FSR0I4ODg4IHwgVk1MX0dGWF9BTFBIQU1VTFQ7CisJCWVsc2UKKwkJCWRzcGNudHIgfD0gVk1MX0dGWF9SR0IwODg4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2bWxmYl9kaXNhYmxlX3BpcGUodmluZm8pOworCW1iKCk7CisKKwlpZiAoc3Vic3lzLT5zZXRfY2xvY2spCisJCXN1YnN5cy0+c2V0X2Nsb2NrKHN1YnN5cywgY2xvY2spOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlWTUxfV1JJVEUzMihwYXIsIFZNTF9IVE9UQUxfQSwgKChodG90YWwgLSAxKSA8PCAxNikgfCAoaGFjdGl2ZSAtIDEpKTsKKwlWTUxfV1JJVEUzMihwYXIsIFZNTF9IQkxBTktfQSwKKwkJICAgICgoaGJsYW5rX2VuZCAtIDEpIDw8IDE2KSB8IChoYmxhbmtfc3RhcnQgLSAxKSk7CisJVk1MX1dSSVRFMzIocGFyLCBWTUxfSFNZTkNfQSwKKwkJICAgICgoaHN5bmNfZW5kIC0gMSkgPDwgMTYpIHwgKGhzeW5jX3N0YXJ0IC0gMSkpOworCVZNTF9XUklURTMyKHBhciwgVk1MX1ZUT1RBTF9BLCAoKHZ0b3RhbCAtIDEpIDw8IDE2KSB8ICh2YWN0aXZlIC0gMSkpOworCVZNTF9XUklURTMyKHBhciwgVk1MX1ZCTEFOS19BLAorCQkgICAgKCh2YmxhbmtfZW5kIC0gMSkgPDwgMTYpIHwgKHZibGFua19zdGFydCAtIDEpKTsKKwlWTUxfV1JJVEUzMihwYXIsIFZNTF9WU1lOQ19BLAorCQkgICAgKCh2c3luY19lbmQgLSAxKSA8PCAxNikgfCAodnN5bmNfc3RhcnQgLSAxKSk7CisJVk1MX1dSSVRFMzIocGFyLCBWTUxfRFNQQ1NUUklERSwgdmluZm8tPnN0cmlkZSk7CisJVk1MX1dSSVRFMzIocGFyLCBWTUxfRFNQQ1NJWkUsCisJCSAgICAoKHZhci0+eXJlcyAtIDEpIDw8IDE2KSB8ICh2YXItPnhyZXMgLSAxKSk7CisJVk1MX1dSSVRFMzIocGFyLCBWTUxfRFNQQ1BPUywgMHgwMDAwMDAwMCk7CisJVk1MX1dSSVRFMzIocGFyLCBWTUxfRFNQQVJCLCBWTUxfRklGT19ERUZBVUxUKTsKKwlWTUxfV1JJVEUzMihwYXIsIFZNTF9CQ0xSUEFUX0EsIDB4MDAwMDAwMDApOworCVZNTF9XUklURTMyKHBhciwgVk1MX0NBTlZTQ0xSX0EsIDB4MDAwMDAwMDApOworCVZNTF9XUklURTMyKHBhciwgVk1MX1BJUEVBU1JDLAorCQkgICAgKCh2YXItPnhyZXMgLSAxKSA8PCAxNikgfCAodmFyLT55cmVzIC0gMSkpOworCisJd21iKCk7CisJVk1MX1dSSVRFMzIocGFyLCBWTUxfUElQRUFDT05GLCBWTUxfUElQRV9FTkFCTEUpOworCXdtYigpOworCVZNTF9XUklURTMyKHBhciwgVk1MX0RTUENDTlRSLCBkc3BjbnRyKTsKKwl3bWIoKTsKKwlWTUxfV1JJVEUzMihwYXIsIFZNTF9EU1BDQUREUiwgKHUzMikgdmluZm8tPnZyYW1fc3RhcnQgKworCQkgICAgdmFyLT55b2Zmc2V0ICogdmluZm8tPnN0cmlkZSArCisJCSAgICB2YXItPnhvZmZzZXQgKiB2aW5mby0+Ynl0ZXNfcGVyX3BpeGVsKTsKKworCVZNTF9XUklURTMyKHBhciwgVk1MX1JDT01QU1RBVCwgVk1MX01EVk9fUEFEX0VOQUJMRSk7CisKKwl3aGlsZSAoIShWTUxfUkVBRDMyKHBhciwgVk1MX1JDT01QU1RBVCkgJgorCQkgKFZNTF9NRFZPX1ZEQ19JX1JDT01QIHwgVk1MX01EVk9fUEFEX0VOQUJMRSkpKSA7CisKKwl2aW5mby0+cGlwZV9kaXNhYmxlZCA9IDA7CisjaWZkZWYgVkVSTUlMSU9OX0RFQlVHCisJdm1sX2R1bXBfcmVncyh2aW5mbyk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtbGZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHZtbF9pbmZvICp2aW5mbyA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3Qgdm1sX2luZm8sIGluZm8pOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ2bWxfbXV0ZXgpOworCWxpc3RfZGVsKCZ2aW5mby0+aGVhZCk7CisJbGlzdF9hZGQoJnZpbmZvLT5oZWFkLCAoc3Vic3lzKSA/ICZnbG9iYWxfaGFzX21vZGUgOiAmZ2xvYmFsX25vX21vZGUpOworCXJldCA9IHZtbGZiX3NldF9wYXJfbG9ja2VkKHZpbmZvKTsKKworCW11dGV4X3VubG9jaygmdm1sX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZtbGZiX2JsYW5rX2xvY2tlZChzdHJ1Y3Qgdm1sX2luZm8gKnZpbmZvKQoreworCXN0cnVjdCB2bWxfcGFyICpwYXIgPSB2aW5mby0+cGFyOworCXUzMiBjdXIgPSBWTUxfUkVBRDMyKHBhciwgVk1MX1BJUEVBQ09ORik7CisKKwlzd2l0Y2ggKHZpbmZvLT5jdXJfYmxhbmtfbW9kZSkgeworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJaWYgKHZpbmZvLT5waXBlX2Rpc2FibGVkKSB7CisJCQl2bWxmYl9zZXRfcGFyX2xvY2tlZCh2aW5mbyk7CisJCX0KKwkJVk1MX1dSSVRFMzIocGFyLCBWTUxfUElQRUFDT05GLCBjdXIgJiB+Vk1MX1BJUEVfRk9SQ0VfQk9SREVSKTsKKwkJKHZvaWQpVk1MX1JFQUQzMihwYXIsIFZNTF9QSVBFQUNPTkYpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX05PUk1BTDoKKwkJaWYgKHZpbmZvLT5waXBlX2Rpc2FibGVkKSB7CisJCQl2bWxmYl9zZXRfcGFyX2xvY2tlZCh2aW5mbyk7CisJCX0KKwkJVk1MX1dSSVRFMzIocGFyLCBWTUxfUElQRUFDT05GLCBjdXIgfCBWTUxfUElQRV9GT1JDRV9CT1JERVIpOworCQkodm9pZClWTUxfUkVBRDMyKHBhciwgVk1MX1BJUEVBQ09ORik7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJCWlmICghdmluZm8tPnBpcGVfZGlzYWJsZWQpIHsKKwkJCXZtbGZiX2Rpc2FibGVfcGlwZSh2aW5mbyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CisJCWlmICghdmluZm8tPnBpcGVfZGlzYWJsZWQpIHsKKwkJCXZtbGZiX2Rpc2FibGVfcGlwZSh2aW5mbyk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm1sZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCB2bWxfaW5mbyAqdmluZm8gPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHZtbF9pbmZvLCBpbmZvKTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmdm1sX211dGV4KTsKKwl2aW5mby0+Y3VyX2JsYW5rX21vZGUgPSBibGFua19tb2RlOworCXJldCA9IHZtbGZiX2JsYW5rX2xvY2tlZCh2aW5mbyk7CisJbXV0ZXhfdW5sb2NrKCZ2bWxfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdm1sZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCB2bWxfaW5mbyAqdmluZm8gPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHZtbF9pbmZvLCBpbmZvKTsKKwlzdHJ1Y3Qgdm1sX3BhciAqcGFyID0gdmluZm8tPnBhcjsKKworCW11dGV4X2xvY2soJnZtbF9tdXRleCk7CisJVk1MX1dSSVRFMzIocGFyLCBWTUxfRFNQQ0FERFIsICh1MzIpIHZpbmZvLT52cmFtX3N0YXJ0ICsKKwkJICAgIHZhci0+eW9mZnNldCAqIHZpbmZvLT5zdHJpZGUgKworCQkgICAgdmFyLT54b2Zmc2V0ICogdmluZm8tPmJ5dGVzX3Blcl9waXhlbCk7CisJKHZvaWQpVk1MX1JFQUQzMihwYXIsIFZNTF9EU1BDQUREUik7CisJbXV0ZXhfdW5sb2NrKCZ2bWxfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm1sZmJfc2V0Y29scmVnKHVfaW50IHJlZ25vLCB1X2ludCByZWQsIHVfaW50IGdyZWVuLCB1X2ludCBibHVlLAorCQkJICAgdV9pbnQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwl1MzIgdjsKKworCWlmIChyZWdubyA+PSAxNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5mby0+dmFyLmdyYXlzY2FsZSkgeworCQlyZWQgPSBncmVlbiA9IGJsdWUgPSAocmVkICogNzcgKyBncmVlbiAqIDE1MSArIGJsdWUgKiAyOCkgPj4gODsKKwl9CisKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCAhPSBGQl9WSVNVQUxfVFJVRUNPTE9SKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlZCA9IFZNTF9UT0hXKHJlZCwgaW5mby0+dmFyLnJlZC5sZW5ndGgpOworCWJsdWUgPSBWTUxfVE9IVyhibHVlLCBpbmZvLT52YXIuYmx1ZS5sZW5ndGgpOworCWdyZWVuID0gVk1MX1RPSFcoZ3JlZW4sIGluZm8tPnZhci5ncmVlbi5sZW5ndGgpOworCXRyYW5zcCA9IFZNTF9UT0hXKHRyYW5zcCwgaW5mby0+dmFyLnRyYW5zcC5sZW5ndGgpOworCisJdiA9IChyZWQgPDwgaW5mby0+dmFyLnJlZC5vZmZzZXQpIHwKKwkgICAgKGdyZWVuIDw8IGluZm8tPnZhci5ncmVlbi5vZmZzZXQpIHwKKwkgICAgKGJsdWUgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KSB8CisJICAgICh0cmFuc3AgPDwgaW5mby0+dmFyLnRyYW5zcC5vZmZzZXQpOworCisJc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDE2OgorCQkoKHUzMiAqKSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0gdjsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwljYXNlIDMyOgorCQkoKHUzMiAqKSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0gdjsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtbGZiX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCB2bWxfaW5mbyAqdmluZm8gPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHZtbF9pbmZvLCBpbmZvKTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJaW50IHJldDsKKworCWlmICh2bWEtPnZtX3Bnb2ZmID4gKH4wVUwgPj4gUEFHRV9TSElGVCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChvZmZzZXQgKyBzaXplID4gdmluZm8tPnZyYW1fY29udGlnX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IHZtbGZiX3ZyYW1fb2Zmc2V0KHZpbmZvLCBvZmZzZXQpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCW9mZnNldCArPSB2aW5mby0+dnJhbV9zdGFydDsKKwlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9QQ0Q7CisJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJj0gfl9QQUdFX1BXVDsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEIHwgVk1fSU87CisJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIG9mZnNldCA+PiBQQUdFX1NISUZULAorCQkJCQkJc2l6ZSwgdm1hLT52bV9wYWdlX3Byb3QpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2bWxmYl9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtbGZiX2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKQoreworCXJldHVybiAtRUlOVkFMOwkvKiBqdXN0IHRvIGZvcmNlIHNvZnRfY3Vyc29yKCkgY2FsbCAqLworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyB2bWxmYl9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmZiX29wZW4gPSB2bWxmYl9vcGVuLAorCS5mYl9yZWxlYXNlID0gdm1sZmJfcmVsZWFzZSwKKwkuZmJfY2hlY2tfdmFyID0gdm1sZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyID0gdm1sZmJfc2V0X3BhciwKKwkuZmJfYmxhbmsgPSB2bWxmYl9ibGFuaywKKwkuZmJfcGFuX2Rpc3BsYXkgPSB2bWxmYl9wYW5fZGlzcGxheSwKKwkuZmJfZmlsbHJlY3QgPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gY2ZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9jdXJzb3IgPSB2bWxmYl9jdXJzb3IsCisJLmZiX3N5bmMgPSB2bWxmYl9zeW5jLAorCS5mYl9tbWFwID0gdm1sZmJfbW1hcCwKKwkuZmJfc2V0Y29scmVnID0gdm1sZmJfc2V0Y29scmVnCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdm1sX2lkc1tdID0geworCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFZNTF9ERVZJQ0VfVkRDKX0sCisJezB9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdm1sZmJfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9ICJ2bWxmYiIsCisJLmlkX3RhYmxlID0gdm1sX2lkcywKKwkucHJvYmUgPSB2bWxfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh2bWxfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2bWxmYl9jbGVhbnVwKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ2bWxmYl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIGludCBfX2luaXQgdm1sZmJfaW5pdCh2b2lkKQoreworCisjaWZuZGVmIE1PRFVMRQorCWNoYXIgKm9wdGlvbiA9IE5VTEw7CisKKwlpZiAoZmJfZ2V0X29wdGlvbnMoTU9EVUxFX05BTUUsICZvcHRpb24pKQorCQlyZXR1cm4gLUVOT0RFVjsKKyNlbmRpZgorCisJcHJpbnRrKEtFUk5fREVCVUcgTU9EVUxFX05BTUUgIjogaW5pdGlhbGl6aW5nXG4iKTsKKwltdXRleF9pbml0KCZ2bWxfbXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZnbG9iYWxfbm9fbW9kZSk7CisJSU5JVF9MSVNUX0hFQUQoJmdsb2JhbF9oYXNfbW9kZSk7CisKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdm1sZmJfcGNpX2RyaXZlcik7Cit9CisKK2ludCB2bWxmYl9yZWdpc3Rlcl9zdWJzeXMoc3RydWN0IHZtbF9zeXMgKnN5cykKK3sKKwlzdHJ1Y3Qgdm1sX2luZm8gKmVudHJ5OworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJdTMyIHNhdmVfYWN0aXZhdGU7CisKKwltdXRleF9sb2NrKCZ2bWxfbXV0ZXgpOworCWlmIChzdWJzeXMgIT0gTlVMTCkgeworCQlzdWJzeXMtPnJlc3RvcmUoc3Vic3lzKTsKKwl9CisJc3Vic3lzID0gc3lzOworCXN1YnN5cy0+c2F2ZShzdWJzeXMpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHJlc3RhcnQgbGlzdCB0cmF2ZXJzYWwgZm9yIGVhY2ggaXRlbSwgc2luY2Ugd2UKKwkgKiByZWxlYXNlIHRoZSBsaXN0IG11dGV4IGluIHRoZSBsb29wLgorCSAqLworCisJbGlzdCA9IGdsb2JhbF9ub19tb2RlLm5leHQ7CisJd2hpbGUgKGxpc3QgIT0gJmdsb2JhbF9ub19tb2RlKSB7CisJCWxpc3RfZGVsX2luaXQobGlzdCk7CisJCWVudHJ5ID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgdm1sX2luZm8sIGhlYWQpOworCisJCS8qCisJCSAqIEZpcnN0LCB0cnkgdGhlIGN1cnJlbnQgbW9kZSB3aGljaCBtaWdodCBub3QgYmUKKwkJICogY29tcGxldGVseSB2YWxpZGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBwaXhlbCBjbG9jay4KKwkJICovCisKKwkJaWYgKCF2bWxmYl9jaGVja192YXJfbG9ja2VkKCZlbnRyeS0+aW5mby52YXIsIGVudHJ5KSkgeworCQkJdm1sZmJfc2V0X3Bhcl9sb2NrZWQoZW50cnkpOworCQkJbGlzdF9hZGRfdGFpbChsaXN0LCAmZ2xvYmFsX2hhc19tb2RlKTsKKwkJfSBlbHNlIHsKKworCQkJLyoKKwkJCSAqIERpZG4ndCB3b3JrLiBUcnkgdG8gZmluZCBhbm90aGVyIG1vZGUsCisJCQkgKiB0aGF0IG1hdGNoZXMgdGhpcyBzdWJzeXMuCisJCQkgKi8KKworCQkJbXV0ZXhfdW5sb2NrKCZ2bWxfbXV0ZXgpOworCQkJc2F2ZV9hY3RpdmF0ZSA9IGVudHJ5LT5pbmZvLnZhci5hY3RpdmF0ZTsKKwkJCWVudHJ5LT5pbmZvLnZhci5iaXRzX3Blcl9waXhlbCA9IDE2OworCQkJdm1sZmJfc2V0X3ByZWZfcGl4ZWxfZm9ybWF0KCZlbnRyeS0+aW5mby52YXIpOworCQkJaWYgKGZiX2ZpbmRfbW9kZSgmZW50cnktPmluZm8udmFyLAorCQkJCQkgJmVudHJ5LT5pbmZvLAorCQkJCQkgdm1sX2RlZmF1bHRfbW9kZSwgTlVMTCwgMCwgTlVMTCwgMTYpKSB7CisJCQkJZW50cnktPmluZm8udmFyLmFjdGl2YXRlIHw9CisJCQkJICAgIEZCX0FDVElWQVRFX0ZPUkNFIHwgRkJfQUNUSVZBVEVfTk9XOworCQkJCWZiX3NldF92YXIoJmVudHJ5LT5pbmZvLCAmZW50cnktPmluZm8udmFyKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSIE1PRFVMRV9OQU1FCisJCQkJICAgICAgICI6IFNvcnJ5LiBubyBtb2RlIGZvdW5kIGZvciB0aGlzIHN1YnN5cy5cbiIpOworCQkJfQorCQkJZW50cnktPmluZm8udmFyLmFjdGl2YXRlID0gc2F2ZV9hY3RpdmF0ZTsKKwkJCW11dGV4X2xvY2soJnZtbF9tdXRleCk7CisJCX0KKwkJdm1sZmJfYmxhbmtfbG9ja2VkKGVudHJ5KTsKKwkJbGlzdCA9IGdsb2JhbF9ub19tb2RlLm5leHQ7CisJfQorCW11dGV4X3VubG9jaygmdm1sX211dGV4KTsKKworCXByaW50ayhLRVJOX0RFQlVHIE1PRFVMRV9OQU1FICI6IFJlZ2lzdGVyZWQgJXMgc3Vic3lzdGVtLlxuIiwKKwkJCQlzdWJzeXMtPm5hbWUgPyBzdWJzeXMtPm5hbWUgOiAidW5rbm93biIpOworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh2bWxmYl9yZWdpc3Rlcl9zdWJzeXMpOworCit2b2lkIHZtbGZiX3VucmVnaXN0ZXJfc3Vic3lzKHN0cnVjdCB2bWxfc3lzICpzeXMpCit7CisJc3RydWN0IHZtbF9pbmZvICplbnRyeSwgKm5leHQ7CisKKwltdXRleF9sb2NrKCZ2bWxfbXV0ZXgpOworCWlmIChzdWJzeXMgIT0gc3lzKSB7CisJCW11dGV4X3VubG9jaygmdm1sX211dGV4KTsKKwkJcmV0dXJuOworCX0KKwlzdWJzeXMtPnJlc3RvcmUoc3Vic3lzKTsKKwlzdWJzeXMgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgJmdsb2JhbF9oYXNfbW9kZSwgaGVhZCkgeworCQlwcmludGsoS0VSTl9ERUJVRyBNT0RVTEVfTkFNRSAiOiBzdWJzeXMgZGlzYWJsZSBwaXBlXG4iKTsKKwkJdm1sZmJfZGlzYWJsZV9waXBlKGVudHJ5KTsKKwkJbGlzdF9kZWwoJmVudHJ5LT5oZWFkKTsKKwkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmhlYWQsICZnbG9iYWxfbm9fbW9kZSk7CisJfQorCW11dGV4X3VubG9jaygmdm1sX211dGV4KTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodm1sZmJfdW5yZWdpc3Rlcl9zdWJzeXMpOworCittb2R1bGVfaW5pdCh2bWxmYl9pbml0KTsKK21vZHVsZV9leGl0KHZtbGZiX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCJUdW5nc3RlbiBHcmFwaGljcyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbml0aWFsaXphdGlvbiBvZiB0aGUgVmVybWlsaW9uIGRpc3BsYXkgZGV2aWNlcyIpOworTU9EVUxFX1ZFUlNJT04oIjEuMC4wIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Zlcm1pbGlvbi92ZXJtaWxpb24uaCBiL2RyaXZlcnMvdmlkZW8vdmVybWlsaW9uL3Zlcm1pbGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzY2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3Zlcm1pbGlvbi92ZXJtaWxpb24uaApAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgSW50ZWwgQ29ycC4gMjAwNy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogSW50ZWwgZnVuZGVkIFR1bmdzdGVuIEdyYXBoaWNzIChodHRwOi8vd3d3LnR1bmdzdGVuZ3JhcGhpY3MuY29tKSB0bworICogZGV2ZWxvcCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgVmVybWlsaW9uIFJhbmdlIGZiIGRyaXZlci4KKyAqIFRoZSBWZXJtaWxpb24gUmFuZ2UgZmIgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7CisgKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhlIFZlcm1pbGlvbiBSYW5nZSBmYiBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQKKyAqIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGRyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBdXRob3JzOgorICogICBUaG9tYXMgSGVsbHN0cvZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICovCisKKyNpZm5kZWYgX1ZFUk1JTElPTl9IXworI2RlZmluZSBfVkVSTUlMSU9OX0hfCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNkZWZpbmUgVk1MX0RFVklDRV9HUFUgMHg1MDAyCisjZGVmaW5lIFZNTF9ERVZJQ0VfVkRDIDB4NTAwOQorCisjZGVmaW5lIFZNTF9WUkFNX0FSRUFTIDMKKyNkZWZpbmUgVk1MX01BWF9YUkVTIDEwMjQKKyNkZWZpbmUgVk1MX01BWF9ZUkVTIDc2OAorI2RlZmluZSBWTUxfTUFYX1hSRVNfVklSVFVBTCAxMDQwCisKKy8qCisgKiBEaXNwbGF5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzOgorICovCisKKy8qIERpc3BsYXkgY29udHJvbGxlciAxMC1iaXQgY29sb3IgcmVwcmVzZW50YXRpb24gKi8KKworI2RlZmluZSBWTUxfUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4M0ZGMDAwMDAKKyNkZWZpbmUgVk1MX1JfU0hJRlQgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBWTUxfR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwRkZDMDAKKyNkZWZpbmUgVk1MX0dfU0hJRlQgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBWTUxfQl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzRkYKKyNkZWZpbmUgVk1MX0JfU0hJRlQgICAgICAgICAgICAgICAgICAwCisKKy8qIEdyYXBoaWNzIHBsYW5lIGNvbnRyb2wgKi8KKyNkZWZpbmUgVk1MX0RTUENDTlRSICAgICAgICAgICAgICAgICAweDAwMDcyMTgwCisjZGVmaW5lIFZNTF9HRlhfRU5BQkxFICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBWTUxfR0ZYX0dBTU1BQllQQVNTICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgVk1MX0dGWF9BUkdCMTU1NSAgICAgICAgICAgICAweDBDMDAwMDAwCisjZGVmaW5lIFZNTF9HRlhfUkdCMDg4OCAgICAgICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBWTUxfR0ZYX0FSR0I4ODg4ICAgICAgICAgICAgIDB4MUMwMDAwMDAKKyNkZWZpbmUgVk1MX0dGWF9BTFBIQUNPTlNUICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFZNTF9HRlhfQUxQSEFNVUxUICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBWTUxfR0ZYX0NPTlNUX0FMUEhBICAgICAgICAgIDB4MDAwMDAwRkYKKworLyogR3JhcGhpY3MgcGxhbmUgc3RhcnQgYWRkcmVzcy4gUGl4ZWwgYWxpZ25lZC4gKi8KKyNkZWZpbmUgVk1MX0RTUENBRERSICAgICAgICAgICAgICAgICAweDAwMDcyMTg0CisKKy8qIEdyYXBoaWNzIHBsYW5lIHN0cmlkZSByZWdpc3Rlci4gKi8KKyNkZWZpbmUgVk1MX0RTUENTVFJJREUgICAgICAgICAgICAgICAweDAwMDcyMTg4CisKKy8qIEdyYXBoaWNzIHBsYW5lIHBvc2l0aW9uIHJlZ2lzdGVyLiAqLworI2RlZmluZSBWTUxfRFNQQ1BPUyAgICAgICAgICAgICAgICAgIDB4MDAwNzIxOEMKKyNkZWZpbmUgVk1MX1BPU19ZTUFTSyAgICAgICAgICAgICAgICAweDBGRkYwMDAwCisjZGVmaW5lIFZNTF9QT1NfWVNISUZUICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVk1MX1BPU19YTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwRkZGCisjZGVmaW5lIFZNTF9QT1NfWFNISUZUICAgICAgICAgICAgICAgMAorCisvKiBHcmFwaGljcyBwbGFuZSBoZWlnaHQgYW5kIHdpZHRoICovCisjZGVmaW5lIFZNTF9EU1BDU0laRSAgICAgICAgICAgICAgICAgMHgwMDA3MjE5MAorI2RlZmluZSBWTUxfU0laRV9ITUFTSyAgICAgICAgICAgICAgIDB4MEZGRjAwMDAKKyNkZWZpbmUgVk1MX1NJWkVfSFNISUZUICAgICAgICAgICAgICAxNgorI2RlZmluZSBWTUxfU0lTRV9XTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDBGRkYKKyNkZWZpbmUgVk1MX1NJWkVfV1NISUZUICAgICAgICAgICAgICAwCisKKy8qIEdyYXBoaWNzIHBsYW5lIGdhbW1hIGNvcnJlY3Rpb24gbG9va3VwIHRhYmxlIHJlZ2lzdGVycyAoMTI5ICogMzIgYml0cykgKi8KKyNkZWZpbmUgVk1MX0RTUENHQU1MVVQgICAgICAgICAgICAgICAweDAwMDcyMjAwCisKKy8qIFBpeGVsIHZpZGVvIG91dHB1dCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIFZNTF9QVk9DT05GSUcgICAgICAgICAgICAgICAgMHgwMDA2MTE0MAorI2RlZmluZSBWTUxfQ09ORklHX0JBU0UgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgVk1MX0NPTkZJR19QSVhFTF9TV0FQICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIFZNTF9DT05GSUdfREVfSU5WICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBWTUxfQ09ORklHX0hSRUZfSU5WICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgVk1MX0NPTkZJR19WUkVGX0lOViAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIFZNTF9DT05GSUdfQ0xLX0lOViAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBWTUxfQ09ORklHX0NMS19ESVYyICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgVk1MX0NPTkZJR19FU1RSQl9JTlYgICAgICAgICAweDAwMDA4MDAwCisKKy8qIFBpcGUgQSBIb3Jpem9udGFsIHRvdGFsIHJlZ2lzdGVyICovCisjZGVmaW5lIFZNTF9IVE9UQUxfQSAgICAgICAgICAgICAgICAgMHgwMDA2MDAwMAorI2RlZmluZSBWTUxfSFRPVEFMX01BU0sgICAgICAgICAgICAgIDB4MUZGRjAwMDAKKyNkZWZpbmUgVk1MX0hUT1RBTF9TSElGVCAgICAgICAgICAgICAxNgorI2RlZmluZSBWTUxfSFRPVEFMX1ZBTCAgICAgICAgICAgICAgIDgxOTIKKyNkZWZpbmUgVk1MX0hBQ1RJVkVfTUFTSyAgICAgICAgICAgICAweDAwMDAwN0ZGCisjZGVmaW5lIFZNTF9IQUNUSVZFX1NISUZUICAgICAgICAgICAgMAorI2RlZmluZSBWTUxfSEFDVElWRV9WQUwgICAgICAgICAgICAgIDQwOTYKKworLyogUGlwZSBBIEhvcml6b250YWwgQmxhbmsgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVk1MX0hCTEFOS19BICAgICAgICAgICAgICAgICAweDAwMDYwMDA0CisjZGVmaW5lIFZNTF9IQkxBTktfRU5EX01BU0sgICAgICAgICAgMHgxRkZGMDAwMAorI2RlZmluZSBWTUxfSEJMQU5LX0VORF9TSElGVCAgICAgICAgIDE2CisjZGVmaW5lIFZNTF9IQkxBTktfRU5EX1ZBTCAgICAgICAgICAgODE5MgorI2RlZmluZSBWTUxfSEJMQU5LX1NUQVJUX01BU0sgICAgICAgIDB4MDAwMDFGRkYKKyNkZWZpbmUgVk1MX0hCTEFOS19TVEFSVF9TSElGVCAgICAgICAwCisjZGVmaW5lIFZNTF9IQkxBTktfU1RBUlRfVkFMICAgICAgICAgODE5MgorCisvKiBQaXBlIEEgSG9yaXpvbnRhbCBTeW5jIHJlZ2lzdGVyICovCisjZGVmaW5lIFZNTF9IU1lOQ19BICAgICAgICAgICAgICAgICAgMHgwMDA2MDAwOAorI2RlZmluZSBWTUxfSFNZTkNfRU5EX01BU0sgICAgICAgICAgIDB4MUZGRjAwMDAKKyNkZWZpbmUgVk1MX0hTWU5DX0VORF9TSElGVCAgICAgICAgICAxNgorI2RlZmluZSBWTUxfSFNZTkNfRU5EX1ZBTCAgICAgICAgICAgIDgxOTIKKyNkZWZpbmUgVk1MX0hTWU5DX1NUQVJUX01BU0sgICAgICAgICAweDAwMDAxRkZGCisjZGVmaW5lIFZNTF9IU1lOQ19TVEFSVF9TSElGVCAgICAgICAgMAorI2RlZmluZSBWTUxfSFNZTkNfU1RBUlRfVkFMICAgICAgICAgIDgxOTIKKworLyogUGlwZSBBIFZlcnRpY2FsIHRvdGFsIHJlZ2lzdGVyICovCisjZGVmaW5lIFZNTF9WVE9UQUxfQSAgICAgICAgICAgICAgICAgMHgwMDA2MDAwQworI2RlZmluZSBWTUxfVlRPVEFMX01BU0sgICAgICAgICAgICAgIDB4MUZGRjAwMDAKKyNkZWZpbmUgVk1MX1ZUT1RBTF9TSElGVCAgICAgICAgICAgICAxNgorI2RlZmluZSBWTUxfVlRPVEFMX1ZBTCAgICAgICAgICAgICAgIDgxOTIKKyNkZWZpbmUgVk1MX1ZBQ1RJVkVfTUFTSyAgICAgICAgICAgICAweDAwMDAwN0ZGCisjZGVmaW5lIFZNTF9WQUNUSVZFX1NISUZUICAgICAgICAgICAgMAorI2RlZmluZSBWTUxfVkFDVElWRV9WQUwgICAgICAgICAgICAgIDQwOTYKKworLyogUGlwZSBBIFZlcnRpY2FsIEJsYW5rIHJlZ2lzdGVyICovCisjZGVmaW5lIFZNTF9WQkxBTktfQSAgICAgICAgICAgICAgICAgMHgwMDA2MDAxMAorI2RlZmluZSBWTUxfVkJMQU5LX0VORF9NQVNLICAgICAgICAgIDB4MUZGRjAwMDAKKyNkZWZpbmUgVk1MX1ZCTEFOS19FTkRfU0hJRlQgICAgICAgICAxNgorI2RlZmluZSBWTUxfVkJMQU5LX0VORF9WQUwgICAgICAgICAgIDgxOTIKKyNkZWZpbmUgVk1MX1ZCTEFOS19TVEFSVF9NQVNLICAgICAgICAweDAwMDAxRkZGCisjZGVmaW5lIFZNTF9WQkxBTktfU1RBUlRfU0hJRlQgICAgICAgMAorI2RlZmluZSBWTUxfVkJMQU5LX1NUQVJUX1ZBTCAgICAgICAgIDgxOTIKKworLyogUGlwZSBBIFZlcnRpY2FsIFN5bmMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVk1MX1ZTWU5DX0EgICAgICAgICAgICAgICAgICAweDAwMDYwMDE0CisjZGVmaW5lIFZNTF9WU1lOQ19FTkRfTUFTSyAgICAgICAgICAgMHgxRkZGMDAwMAorI2RlZmluZSBWTUxfVlNZTkNfRU5EX1NISUZUICAgICAgICAgIDE2CisjZGVmaW5lIFZNTF9WU1lOQ19FTkRfVkFMICAgICAgICAgICAgODE5MgorI2RlZmluZSBWTUxfVlNZTkNfU1RBUlRfTUFTSyAgICAgICAgIDB4MDAwMDFGRkYKKyNkZWZpbmUgVk1MX1ZTWU5DX1NUQVJUX1NISUZUICAgICAgICAwCisjZGVmaW5lIFZNTF9WU1lOQ19TVEFSVF9WQUwgICAgICAgICAgODE5MgorCisvKiBQaXBlIEEgU291cmNlIEltYWdlIHNpemUgKG1pbnVzIG9uZSAtIGVxdWFsIHRvIGFjdGl2ZSBzaXplKQorICogUHJvZ3JhbW1hYmxlIHdoaWxlIHBpcGUgaXMgZW5hYmxlZC4KKyAqLworI2RlZmluZSBWTUxfUElQRUFTUkMgICAgICAgICAgICAgICAgIDB4MDAwNjAwMUMKKyNkZWZpbmUgVk1MX1BJUEVBU1JDX0hNQVNLICAgICAgICAgICAweDBGRkYwMDAwCisjZGVmaW5lIFZNTF9QSVBFQVNSQ19IU0hJRlQgICAgICAgICAgMTYKKyNkZWZpbmUgVk1MX1BJUEVBU1JDX1ZNQVNLICAgICAgICAgICAweDAwMDAwRkZGCisjZGVmaW5lIFZNTF9QSVBFQVNSQ19WU0hJRlQgICAgICAgICAgMAorCisvKiBQaXBlIEEgQm9yZGVyIENvbG9yIFBhdHRlcm4gcmVnaXN0ZXIgKDEwIGJpdCBjb2xvcikgKi8KKyNkZWZpbmUgVk1MX0JDTFJQQVRfQSAgICAgICAgICAgICAgICAweDAwMDYwMDIwCisKKy8qIFBpcGUgQSBDYW52YXMgQ29sb3IgcmVnaXN0ZXIgICgxMCBiaXQgY29sb3IpICovCisjZGVmaW5lIFZNTF9DQU5WU0NMUl9BICAgICAgICAgICAgICAgMHgwMDA2MDAyNAorCisvKiBQaXBlIEEgQ29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBWTUxfUElQRUFDT05GICAgICAgICAgICAgICAgIDB4MDAwNzAwMDgKKyNkZWZpbmUgVk1MX1BJUEVfQkFTRSAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZNTF9QSVBFX0VOQUJMRSAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBWTUxfUElQRV9GT1JDRV9CT1JERVIgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgVk1MX1BJUEVfUExBTkVTX09GRiAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFZNTF9QSVBFX0FSR0JfT1VUUFVUX01PREUgICAgMHgwMDA0MDAwMAorCisvKiBQaXBlIEEgRklGTyBzZXR0aW5nICovCisjZGVmaW5lIFZNTF9EU1BBUkIgICAgICAgICAgICAgICAgICAgMHgwMDA3MDAzMAorI2RlZmluZSBWTUxfRklGT19ERUZBVUxUICAgICAgICAgICAgIDB4MDAwMDFEOUMKKworLyogTURWTyByY29tcCBzdGF0dXMgJiBwYWRzIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVk1MX1JDT01QU1RBVCAgICAgICAgICAgICAgICAweDAwMDcwMDQ4CisjZGVmaW5lIFZNTF9NRFZPX1ZEQ19JX1JDT01QICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBWTUxfTURWT19QT1dFUlNBVkVfT0ZGICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVk1MX01EVk9fUEFEX0VOQUJMRSAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFZNTF9NRFZPX1BVTExET1dOX0VOQUJMRSAgICAgMHgwMDAwMDAwMQorCitzdHJ1Y3Qgdm1sX3BhciB7CisJc3RydWN0IHBjaV9kZXYgKnZkYzsKKwl1NjQgdmRjX21lbV9iYXNlOworCXU2NCB2ZGNfbWVtX3NpemU7CisJY2hhciBfX2lvbWVtICp2ZGNfbWVtOworCisJc3RydWN0IHBjaV9kZXYgKmdwdTsKKwl1NjQgZ3B1X21lbV9iYXNlOworCXU2NCBncHVfbWVtX3NpemU7CisJY2hhciBfX2lvbWVtICpncHVfbWVtOworCisJYXRvbWljX3QgcmVmY291bnQ7Cit9OworCitzdHJ1Y3QgdnJhbV9hcmVhIHsKKwl1bnNpZ25lZCBsb25nIGxvZ2ljYWw7CisJdW5zaWduZWQgbG9uZyBwaHlzOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBvcmRlcjsKK307CisKK3N0cnVjdCB2bWxfaW5mbyB7CisJc3RydWN0IGZiX2luZm8gaW5mbzsKKwlzdHJ1Y3Qgdm1sX3BhciAqcGFyOworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKKwlzdHJ1Y3QgdnJhbV9hcmVhIHZyYW1bVk1MX1ZSQU1fQVJFQVNdOworCXU2NCB2cmFtX3N0YXJ0OworCXU2NCB2cmFtX2NvbnRpZ19zaXplOworCXUzMiBudW1fYXJlYXM7CisJdm9pZCBfX2lvbWVtICp2cmFtX2xvZ2ljYWw7CisJdTMyIHBzZXVkb19wYWxldHRlWzE2XTsKKwl1MzIgc3RyaWRlOworCXUzMiBieXRlc19wZXJfcGl4ZWw7CisJYXRvbWljX3Qgdm1hczsKKwlpbnQgY3VyX2JsYW5rX21vZGU7CisJaW50IHBpcGVfZGlzYWJsZWQ7Cit9OworCisvKgorICogU3Vic3lzdGVtCisgKi8KKworc3RydWN0IHZtbF9zeXMgeworCWNoYXIgKm5hbWU7CisKKwkvKgorCSAqIFNhdmUgLyBSZXN0b3JlOworCSAqLworCisJaW50ICgqc2F2ZSkgKHN0cnVjdCB2bWxfc3lzICogc3lzKTsKKwlpbnQgKCpyZXN0b3JlKSAoc3RydWN0IHZtbF9zeXMgKiBzeXMpOworCisJLyoKKwkgKiBQTEwgcHJvZ3JhbW1pbmc7CisJICovCisKKwlpbnQgKCpzZXRfY2xvY2spIChzdHJ1Y3Qgdm1sX3N5cyAqIHN5cywgaW50IGNsb2NrKTsKKwlpbnQgKCpuZWFyZXN0X2Nsb2NrKSAoY29uc3Qgc3RydWN0IHZtbF9zeXMgKiBzeXMsIGludCBjbG9jayk7Cit9OworCitleHRlcm4gaW50IHZtbGZiX3JlZ2lzdGVyX3N1YnN5cyhzdHJ1Y3Qgdm1sX3N5cyAqc3lzKTsKK2V4dGVybiB2b2lkIHZtbGZiX3VucmVnaXN0ZXJfc3Vic3lzKHN0cnVjdCB2bWxfc3lzICpzeXMpOworCisjZGVmaW5lIFZNTF9SRUFEMzIoX3BhciwgX29mZnNldCkgXAorCShpb3JlYWQzMigoX3BhciktPnZkY19tZW0gKyAoX29mZnNldCkpKQorI2RlZmluZSBWTUxfV1JJVEUzMihfcGFyLCBfb2Zmc2V0LCBfdmFsdWUpCQkJCVwKKwlpb3dyaXRlMzIoX3ZhbHVlLCAoX3BhciktPnZkY19tZW0gKyAoX29mZnNldCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmZiLmMKaW5kZXggYTliOTliMC4uNjRlZTc4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZmYi5jCkBAIC04NCwxMyArODQsMTUgQEAKIAkJICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIAogc3RhdGljIHN0cnVjdCBmYl9vcHMgdmZiX29wcyA9IHsKKwkuZmJfcmVhZCAgICAgICAgPSBmYl9zeXNfcmVhZCwKKwkuZmJfd3JpdGUgICAgICAgPSBmYl9zeXNfd3JpdGUsCiAJLmZiX2NoZWNrX3Zhcgk9IHZmYl9jaGVja192YXIsCiAJLmZiX3NldF9wYXIJPSB2ZmJfc2V0X3BhciwKIAkuZmJfc2V0Y29scmVnCT0gdmZiX3NldGNvbHJlZywKIAkuZmJfcGFuX2Rpc3BsYXkJPSB2ZmJfcGFuX2Rpc3BsYXksCi0JLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKLQkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKKwkuZmJfZmlsbHJlY3QJPSBzeXNfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gc3lzX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQJPSBzeXNfaW1hZ2VibGl0LAogCS5mYl9tbWFwCT0gdmZiX21tYXAsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCmluZGV4IGVjNGM3ZGMuLjJhMTRkMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCkBAIC0xMzc4LDYgKzEzNzgsOCBAQAogCWluZm8tPmZib3BzID0gJnZnYTE2ZmJfb3BzOwogCWluZm8tPnZhciA9IHZnYTE2ZmJfZGVmaW5lZDsKIAlpbmZvLT5maXggPSB2Z2ExNmZiX2ZpeDsKKwkvKiBzdXBwb3J0cyByZWN0YW5nbGVzIHdpdGggd2lkdGhzIG9mIG11bHRpcGxlcyBvZiA4ICovCisJaW5mby0+cGl4bWFwLmJsaXRfeCA9IDEgPDwgNyB8IDEgPDwgMTUgfCAxIDw8IDIzIHwgMSA8PCAzMTsKIAlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQgfAogCQlGQklORk9fSFdBQ0NFTF9ZUEFOOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZnYXN0YXRlLmMgYi9kcml2ZXJzL3ZpZGVvL3ZnYXN0YXRlLmMKaW5kZXggZDk0ZWZhZi4uYjkxYzQ2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92Z2FzdGF0ZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmdhc3RhdGUuYwpAQCAtNTAsMjMgKzUwLDI4IEBACiAJc3RydWN0IHJlZ3N0YXRlICpzYXZlZCA9IChzdHJ1Y3QgcmVnc3RhdGUgKikgc3RhdGUtPnZpZHN0YXRlOwogCWludCBpOwogCXU4IG1pc2MsIGF0dHIxMCwgZ3I0LCBncjUsIGdyNiwgc2VxMSwgc2VxMiwgc2VxNDsKKwl1bnNpZ25lZCBzaG9ydCBpb2Jhc2U7CiAKIAkvKiBpZiBpbiBncmFwaGljcyBtb2RlLCBubyBuZWVkIHRvIHNhdmUgKi8KKwltaXNjID0gdmdhX3Ioc3RhdGUtPnZnYWJhc2UsIFZHQV9NSVNfUik7CisJaW9iYXNlID0gKG1pc2MgJiAxKSA/IDB4M2QwIDogMHgzYjA7CisKKwl2Z2FfcihzdGF0ZS0+dmdhYmFzZSwgaW9iYXNlICsgMHhhKTsKKwl2Z2FfdyhzdGF0ZS0+dmdhYmFzZSwgVkdBX0FUVF9XLCAweDAwKTsKIAlhdHRyMTAgPSB2Z2FfcmF0dHIoc3RhdGUtPnZnYWJhc2UsIDB4MTApOworCXZnYV9yKHN0YXRlLT52Z2FiYXNlLCBpb2Jhc2UgKyAweGEpOworCXZnYV93KHN0YXRlLT52Z2FiYXNlLCBWR0FfQVRUX1csIDB4MjApOworCiAJaWYgKGF0dHIxMCAmIDEpCiAJCXJldHVybjsKLQkKKwogCS8qIHNhdmUgcmVncyAqLwotCW1pc2MgPSB2Z2FfcihzdGF0ZS0+dmdhYmFzZSwgVkdBX01JU19SKTsKIAlncjQgPSB2Z2FfcmdmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9QTEFORV9SRUFEKTsKIAlncjUgPSB2Z2FfcmdmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9NT0RFKTsKIAlncjYgPSB2Z2FfcmdmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9NSVNDKTsKIAlzZXEyID0gdmdhX3JzZXEoc3RhdGUtPnZnYWJhc2UsIFZHQV9TRVFfUExBTkVfV1JJVEUpOwogCXNlcTQgPSB2Z2FfcnNlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9NRU1PUllfTU9ERSk7CiAJCi0JLyogZm9yY2UgZ3JhcGhpY3MgbW9kZSAqLwotCXZnYV93KHN0YXRlLT52Z2FiYXNlLCBWR0FfTUlTX1csIG1pc2MgfCAxKTsKLQogCS8qIGJsYW5rIHNjcmVlbiAqLwogCXNlcTEgPSB2Z2FfcnNlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9DTE9DS19NT0RFKTsKIAl2Z2Ffd3NlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9SRVNFVCwgMHgxKTsKQEAgLTExNSwxNSArMTIwLDEyIEBACiAJfQogCiAJLyogcmVzdG9yZSByZWdzICovCi0JdmdhX3dhdHRyKHN0YXRlLT52Z2FiYXNlLCAweDEwLCBhdHRyMTApOwotCiAJdmdhX3dzZXEoc3RhdGUtPnZnYWJhc2UsIFZHQV9TRVFfUExBTkVfV1JJVEUsIHNlcTIpOwogCXZnYV93c2VxKHN0YXRlLT52Z2FiYXNlLCBWR0FfU0VRX01FTU9SWV9NT0RFLCBzZXE0KTsKIAogCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX1BMQU5FX1JFQUQsIGdyNCk7CiAJdmdhX3dnZngoc3RhdGUtPnZnYWJhc2UsIFZHQV9HRlhfTU9ERSwgZ3I1KTsKIAl2Z2Ffd2dmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9NSVNDLCBncjYpOwotCXZnYV93KHN0YXRlLT52Z2FiYXNlLCBWR0FfTUlTX1csIG1pc2MpOwogCiAJLyogdW5ibGFuayBzY3JlZW4gKi8KIAl2Z2Ffd3NlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9SRVNFVCwgMHgxKTsKQEAgLTEzNywxMSArMTM5LDEwIEBACiB7CiAJc3RydWN0IHJlZ3N0YXRlICpzYXZlZCA9IChzdHJ1Y3QgcmVnc3RhdGUgKikgc3RhdGUtPnZpZHN0YXRlOwogCWludCBpOwotCXU4IG1pc2MsIGdyMSwgZ3IzLCBncjQsIGdyNSwgZ3I2LCBncjg7IAorCXU4IGdyMSwgZ3IzLCBncjQsIGdyNSwgZ3I2LCBncjg7CiAJdTggc2VxMSwgc2VxMiwgc2VxNDsKIAogCS8qIHNhdmUgcmVncyAqLwotCW1pc2MgPSB2Z2FfcihzdGF0ZS0+dmdhYmFzZSwgVkdBX01JU19SKTsKIAlncjEgPSB2Z2FfcmdmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9TUl9FTkFCTEUpOwogCWdyMyA9IHZnYV9yZ2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX0RBVEFfUk9UQVRFKTsKIAlncjQgPSB2Z2FfcmdmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9QTEFORV9SRUFEKTsKQEAgLTE1MSw5ICsxNTIsNiBAQAogCXNlcTIgPSB2Z2FfcnNlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSk7CiAJc2VxNCA9IHZnYV9yc2VxKHN0YXRlLT52Z2FiYXNlLCBWR0FfU0VRX01FTU9SWV9NT0RFKTsKIAkKLQkvKiBmb3JjZSBncmFwaGljcyBtb2RlICovCi0JdmdhX3coc3RhdGUtPnZnYWJhc2UsIFZHQV9NSVNfVywgbWlzYyB8IDEpOwotCiAJLyogYmxhbmsgc2NyZWVuICovCiAJc2VxMSA9IHZnYV9yc2VxKHN0YXRlLT52Z2FiYXNlLCBWR0FfU0VRX0NMT0NLX01PREUpOwogCXZnYV93c2VxKHN0YXRlLT52Z2FiYXNlLCBWR0FfU0VRX1JFU0VULCAweDEpOwpAQCAtMjEzLDggKzIxMSw2IEBACiAJdmdhX3dzZXEoc3RhdGUtPnZnYWJhc2UsIFZHQV9TRVFfUkVTRVQsIDB4Myk7CiAKIAkvKiByZXN0b3JlIHJlZ3MgKi8KLQl2Z2FfdyhzdGF0ZS0+dmdhYmFzZSwgVkdBX01JU19XLCBtaXNjKTsKLQogCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX1NSX0VOQUJMRSwgZ3IxKTsKIAl2Z2Ffd2dmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9EQVRBX1JPVEFURSwgZ3IzKTsKIAl2Z2Ffd2dmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9QTEFORV9SRUFELCBncjQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92dDg2MjNmYi5jIGIvZHJpdmVycy92aWRlby92dDg2MjNmYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYzBiOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3Z0ODYyM2ZiLmMKQEAgLTAsMCArMSw5MjggQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3ZpZGVvL3Z0ODYyM2ZiLmMgLSBmYmRldiBkcml2ZXIgZm9yCisgKiBpbnRlZ3JhdGVkIGdyYXBoaWMgY29yZSBpbiBWSUEgVlQ4NjIzIFtDTEUyNjZdIGNoaXBzZXQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBPbmRyZWogWmFqaWNlayA8c2FudGlhZ29AY3JmcmVlbmV0Lm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogQ29kZSBpcyBiYXNlZCBvbiBzM2ZiLCBzb21lIHBhcnRzIGFyZSBmcm9tIERhdmlkIEJvdWNoZXIncyB2aWFmYgorICogKGh0dHA6Ly9kYXZlc2RvbWFpbi5vcmcudWsvdmlhZmIvKQorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvc3ZnYS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+IC8qIFdoeSBzaG91bGQgZmIgZHJpdmVyIGNhbGwgY29uc29sZSBmdW5jdGlvbnM/IGJlY2F1c2UgYWNxdWlyZV9jb25zb2xlX3NlbSgpICovCisjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CisKKyNpZmRlZiBDT05GSUdfTVRSUgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjZW5kaWYKKworc3RydWN0IHZ0ODYyM2ZiX2luZm8geworCWNoYXIgX19pb21lbSAqbW1pb19iYXNlOworCWludCBtdHJyX3JlZzsKKwlzdHJ1Y3Qgdmdhc3RhdGUgc3RhdGU7CisJc3RydWN0IG11dGV4IG9wZW5fbG9jazsKKwl1bnNpZ25lZCBpbnQgcmVmX2NvdW50OworCXUzMiBwc2V1ZG9fcGFsZXR0ZVsxNl07Cit9OworCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN2Z2FfZmJfZm9ybWF0IHZ0ODYyM2ZiX2Zvcm1hdHNbXSA9IHsKKwl7IDAsICB7MCwgNiwgMH0sICB7MCwgNiwgMH0sICB7MCwgNiwgMH0sIHswLCAwLCAwfSwgMCwKKwkJRkJfVFlQRV9URVhULCBGQl9BVVhfVEVYVF9TVkdBX1NURVA4LAlGQl9WSVNVQUxfUFNFVURPQ09MT1IsIDE2LCAxNn0sCisJeyA0LCAgezAsIDYsIDB9LCAgezAsIDYsIDB9LCAgezAsIDYsIDB9LCB7MCwgMCwgMH0sIDAsCisJCUZCX1RZUEVfUEFDS0VEX1BJWEVMUywgMCwJCUZCX1ZJU1VBTF9QU0VVRE9DT0xPUiwgMTYsIDE2fSwKKwl7IDQsICB7MCwgNiwgMH0sICB7MCwgNiwgMH0sICB7MCwgNiwgMH0sIHswLCAwLCAwfSwgMSwKKwkJRkJfVFlQRV9JTlRFUkxFQVZFRF9QTEFORVMsIDEsCQlGQl9WSVNVQUxfUFNFVURPQ09MT1IsIDE2LCAxNn0sCisJeyA4LCAgezAsIDYsIDB9LCAgezAsIDYsIDB9LCAgezAsIDYsIDB9LCB7MCwgMCwgMH0sIDAsCisJCUZCX1RZUEVfUEFDS0VEX1BJWEVMUywgMCwJCUZCX1ZJU1VBTF9QU0VVRE9DT0xPUiwgOCwgOH0sCisvKgl7MTYsICB7MTAsIDUsIDB9LCB7NSwgNSwgMH0sICB7MCwgNSwgMH0sIHswLCAwLCAwfSwgMCwKKwkJRkJfVFlQRV9QQUNLRURfUElYRUxTLCAwLAkJRkJfVklTVUFMX1RSVUVDT0xPUiwgNCwgNH0sCSovCisJezE2LCAgezExLCA1LCAwfSwgezUsIDYsIDB9LCAgezAsIDUsIDB9LCB7MCwgMCwgMH0sIDAsCisJCUZCX1RZUEVfUEFDS0VEX1BJWEVMUywgMCwJCUZCX1ZJU1VBTF9UUlVFQ09MT1IsIDQsIDR9LAorCXszMiwgIHsxNiwgOCwgMH0sIHs4LCA4LCAwfSwgIHswLCA4LCAwfSwgezAsIDAsIDB9LCAwLAorCQlGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsIDAsCQlGQl9WSVNVQUxfVFJVRUNPTE9SLCAyLCAyfSwKKwlTVkdBX0ZPUk1BVF9FTkQKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3ZnYV9wbGwgdnQ4NjIzX3BsbCA9IHsyLCAxMjcsIDIsIDcsIDAsIDMsCisJNjAwMDAsIDMwMDAwMCwgMTQzMTh9OworCisvKiBDUlQgdGltaW5nIHJlZ2lzdGVyIHNldHMgKi8KKworc3RydWN0IHZnYV9yZWdzZXQgdnQ4NjIzX2hfdG90YWxfcmVnc1tdICAgICAgID0ge3sweDAwLCAwLCA3fSwgezB4MzYsIDMsIDN9LCBWR0FfUkVHU0VUX0VORH07CitzdHJ1Y3QgdmdhX3JlZ3NldCB2dDg2MjNfaF9kaXNwbGF5X3JlZ3NbXSAgICAgPSB7ezB4MDEsIDAsIDd9LCBWR0FfUkVHU0VUX0VORH07CitzdHJ1Y3QgdmdhX3JlZ3NldCB2dDg2MjNfaF9ibGFua19zdGFydF9yZWdzW10gPSB7ezB4MDIsIDAsIDd9LCBWR0FfUkVHU0VUX0VORH07CitzdHJ1Y3QgdmdhX3JlZ3NldCB2dDg2MjNfaF9ibGFua19lbmRfcmVnc1tdICAgPSB7ezB4MDMsIDAsIDR9LCB7MHgwNSwgNywgN30sIHsweDMzLCA1LCA1fSwgVkdBX1JFR1NFVF9FTkR9Oworc3RydWN0IHZnYV9yZWdzZXQgdnQ4NjIzX2hfc3luY19zdGFydF9yZWdzW10gID0ge3sweDA0LCAwLCA3fSwgezB4MzMsIDQsIDR9LCBWR0FfUkVHU0VUX0VORH07CitzdHJ1Y3QgdmdhX3JlZ3NldCB2dDg2MjNfaF9zeW5jX2VuZF9yZWdzW10gICAgPSB7ezB4MDUsIDAsIDR9LCBWR0FfUkVHU0VUX0VORH07CisKK3N0cnVjdCB2Z2FfcmVnc2V0IHZ0ODYyM192X3RvdGFsX3JlZ3NbXSAgICAgICA9IHt7MHgwNiwgMCwgN30sIHsweDA3LCAwLCAwfSwgezB4MDcsIDUsIDV9LCB7MHgzNSwgMCwgMH0sIFZHQV9SRUdTRVRfRU5EfTsKK3N0cnVjdCB2Z2FfcmVnc2V0IHZ0ODYyM192X2Rpc3BsYXlfcmVnc1tdICAgICA9IHt7MHgxMiwgMCwgN30sIHsweDA3LCAxLCAxfSwgezB4MDcsIDYsIDZ9LCB7MHgzNSwgMiwgMn0sIFZHQV9SRUdTRVRfRU5EfTsKK3N0cnVjdCB2Z2FfcmVnc2V0IHZ0ODYyM192X2JsYW5rX3N0YXJ0X3JlZ3NbXSA9IHt7MHgxNSwgMCwgN30sIHsweDA3LCAzLCAzfSwgezB4MDksIDUsIDV9LCB7MHgzNSwgMywgM30sIFZHQV9SRUdTRVRfRU5EfTsKK3N0cnVjdCB2Z2FfcmVnc2V0IHZ0ODYyM192X2JsYW5rX2VuZF9yZWdzW10gICA9IHt7MHgxNiwgMCwgN30sIFZHQV9SRUdTRVRfRU5EfTsKK3N0cnVjdCB2Z2FfcmVnc2V0IHZ0ODYyM192X3N5bmNfc3RhcnRfcmVnc1tdICA9IHt7MHgxMCwgMCwgN30sIHsweDA3LCAyLCAyfSwgezB4MDcsIDcsIDd9LCB7MHgzNSwgMSwgMX0sIFZHQV9SRUdTRVRfRU5EfTsKK3N0cnVjdCB2Z2FfcmVnc2V0IHZ0ODYyM192X3N5bmNfZW5kX3JlZ3NbXSAgICA9IHt7MHgxMSwgMCwgM30sIFZHQV9SRUdTRVRfRU5EfTsKKworc3RydWN0IHZnYV9yZWdzZXQgdnQ4NjIzX29mZnNldF9yZWdzW10gICAgICAgID0ge3sweDEzLCAwLCA3fSwgezB4MzUsIDUsIDd9LCBWR0FfUkVHU0VUX0VORH07CitzdHJ1Y3QgdmdhX3JlZ3NldCB2dDg2MjNfbGluZV9jb21wYXJlX3JlZ3NbXSAgPSB7ezB4MTgsIDAsIDd9LCB7MHgwNywgNCwgNH0sIHsweDA5LCA2LCA2fSwgezB4MzMsIDAsIDJ9LCB7MHgzNSwgNCwgNH0sIFZHQV9SRUdTRVRfRU5EfTsKK3N0cnVjdCB2Z2FfcmVnc2V0IHZ0ODYyM19mZXRjaF9jb3VudF9yZWdzW10gICA9IHt7MHgxQywgMCwgN30sIHsweDFELCAwLCAxfSwgVkdBX1JFR1NFVF9FTkR9Oworc3RydWN0IHZnYV9yZWdzZXQgdnQ4NjIzX3N0YXJ0X2FkZHJlc3NfcmVnc1tdID0ge3sweDBkLCAwLCA3fSwgezB4MGMsIDAsIDd9LCB7MHgzNCwgMCwgN30sIHsweDQ4LCAwLCAxfSwgVkdBX1JFR1NFVF9FTkR9OworCitzdHJ1Y3Qgc3ZnYV90aW1pbmdfcmVncyB2dDg2MjNfdGltaW5nX3JlZ3MgICAgID0geworCXZ0ODYyM19oX3RvdGFsX3JlZ3MsIHZ0ODYyM19oX2Rpc3BsYXlfcmVncywgdnQ4NjIzX2hfYmxhbmtfc3RhcnRfcmVncywKKwl2dDg2MjNfaF9ibGFua19lbmRfcmVncywgdnQ4NjIzX2hfc3luY19zdGFydF9yZWdzLCB2dDg2MjNfaF9zeW5jX2VuZF9yZWdzLAorCXZ0ODYyM192X3RvdGFsX3JlZ3MsIHZ0ODYyM192X2Rpc3BsYXlfcmVncywgdnQ4NjIzX3ZfYmxhbmtfc3RhcnRfcmVncywKKwl2dDg2MjNfdl9ibGFua19lbmRfcmVncywgdnQ4NjIzX3Zfc3luY19zdGFydF9yZWdzLCB2dDg2MjNfdl9zeW5jX2VuZF9yZWdzLAorfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KKworc3RhdGljIGNoYXIgKm1vZGUgPSAiNjQweDQ4MC04QDYwIjsKKworI2lmZGVmIENPTkZJR19NVFJSCitzdGF0aWMgaW50IG10cnIgPSAxOworI2VuZGlmCisKK01PRFVMRV9BVVRIT1IoIihjKSAyMDA2IE9uZHJlaiBaYWppY2VrIDxzYW50aWFnb0BjcmZyZWVuZXQub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJmYmRldiBkcml2ZXIgZm9yIGludGVncmF0ZWQgZ3JhcGhpY3MgY29yZSBpbiBWSUEgVlQ4NjIzIFtDTEUyNjZdIik7CisKK21vZHVsZV9wYXJhbShtb2RlLCBjaGFycCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1vZGUsICJEZWZhdWx0IHZpZGVvIG1vZGUgKCc2NDB4NDgwLThANjAnLCBldGMpIik7CisKKyNpZmRlZiBDT05GSUdfTVRSUgorbW9kdWxlX3BhcmFtKG10cnIsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG10cnIsICJFbmFibGUgd3JpdGUtY29tYmluaW5nIHdpdGggTVRSUiAoMT1lbmFibGUsIDA9ZGlzYWJsZSwgZGVmYXVsdD0xKSIpOworI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKK3N0YXRpYyBzdHJ1Y3QgZmJfdGlsZV9vcHMgdnQ4NjIzZmJfdGlsZV9vcHMgPSB7CisJLmZiX3NldHRpbGUJPSBzdmdhX3NldHRpbGUsCisJLmZiX3RpbGVjb3B5CT0gc3ZnYV90aWxlY29weSwKKwkuZmJfdGlsZWZpbGwgICAgPSBzdmdhX3RpbGVmaWxsLAorCS5mYl90aWxlYmxpdCAgICA9IHN2Z2FfdGlsZWJsaXQsCisJLmZiX3RpbGVjdXJzb3IgID0gc3ZnYV90aWxlY3Vyc29yLAorCS5mYl9nZXRfdGlsZW1heCA9IHN2Z2FfZ2V0X3RpbGVtYXgsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiBpbWFnZSBkYXRhIGlzIE1TQi1maXJzdCwgZmIgc3RydWN0dXJlIGlzIE1TQi1maXJzdCB0b28gKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGV4cGFuZF9jb2xvcih1MzIgYykKK3sKKwlyZXR1cm4gKChjICYgMSkgfCAoKGMgJiAyKSA8PCA3KSB8ICgoYyAmIDQpIDw8IDE0KSB8ICgoYyAmIDgpIDw8IDIxKSkgKiAweEZGOworfQorCisvKiB2dDg2MjNmYl9pcGxhbl9pbWFnZWJsaXQgc2lsZW50bHkgYXNzdW1lcyB0aGF0IGFsbW9zdCBldmVyeXRoaW5nIGlzIDgtcGl4ZWwgYWxpZ25lZCAqLworc3RhdGljIHZvaWQgdnQ4NjIzZmJfaXBsYW5faW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQoreworCXUzMiBmZyA9IGV4cGFuZF9jb2xvcihpbWFnZS0+ZmdfY29sb3IpOworCXUzMiBiZyA9IGV4cGFuZF9jb2xvcihpbWFnZS0+YmdfY29sb3IpOworCWNvbnN0IHU4ICpzcmMxLCAqc3JjOworCXU4IF9faW9tZW0gKmRzdDE7CisJdTMyIF9faW9tZW0gKmRzdDsKKwl1MzIgdmFsOworCWludCB4LCB5OworCisJc3JjMSA9IGltYWdlLT5kYXRhOworCWRzdDEgPSBpbmZvLT5zY3JlZW5fYmFzZSArIChpbWFnZS0+ZHkgKiBpbmZvLT5maXgubGluZV9sZW5ndGgpCisJCSArICgoaW1hZ2UtPmR4IC8gOCkgKiA0KTsKKworCWZvciAoeSA9IDA7IHkgPCBpbWFnZS0+aGVpZ2h0OyB5KyspIHsKKwkJc3JjID0gc3JjMTsKKwkJZHN0ID0gKHUzMiBfX2lvbWVtICopIGRzdDE7CisJCWZvciAoeCA9IDA7IHggPCBpbWFnZS0+d2lkdGg7IHggKz0gOCkgeworCQkJdmFsID0gKihzcmMrKykgKiAweDAxMDEwMTAxOworCQkJdmFsID0gKHZhbCAmIGZnKSB8ICh+dmFsICYgYmcpOworCQkJZmJfd3JpdGVsKHZhbCwgZHN0KyspOworCQl9CisJCXNyYzEgKz0gaW1hZ2UtPndpZHRoIC8gODsKKwkJZHN0MSArPSBpbmZvLT5maXgubGluZV9sZW5ndGg7CisJfQorfQorCisvKiB2dDg2MjNmYl9pcGxhbl9maWxscmVjdCBzaWxlbnRseSBhc3N1bWVzIHRoYXQgYWxtb3N0IGV2ZXJ5dGhpbmcgaXMgOC1waXhlbCBhbGlnbmVkICovCitzdGF0aWMgdm9pZCB2dDg2MjNmYl9pcGxhbl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQoreworCXUzMiBmZyA9IGV4cGFuZF9jb2xvcihyZWN0LT5jb2xvcik7CisJdTggX19pb21lbSAqZHN0MTsKKwl1MzIgX19pb21lbSAqZHN0OworCWludCB4LCB5OworCisJZHN0MSA9IGluZm8tPnNjcmVlbl9iYXNlICsgKHJlY3QtPmR5ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoKQorCQkgKyAoKHJlY3QtPmR4IC8gOCkgKiA0KTsKKworCWZvciAoeSA9IDA7IHkgPCByZWN0LT5oZWlnaHQ7IHkrKykgeworCQlkc3QgPSAodTMyIF9faW9tZW0gKikgZHN0MTsKKwkJZm9yICh4ID0gMDsgeCA8IHJlY3QtPndpZHRoOyB4ICs9IDgpIHsKKwkJCWZiX3dyaXRlbChmZywgZHN0KyspOworCQl9CisJCWRzdDEgKz0gaW5mby0+Zml4LmxpbmVfbGVuZ3RoOworCX0KK30KKworCisvKiBpbWFnZSBkYXRhIGlzIE1TQi1maXJzdCwgZmIgc3RydWN0dXJlIGlzIGhpZ2gtbmliYmxlLWluLWxvdy1ieXRlLWZpcnN0ICovCitzdGF0aWMgaW5saW5lIHUzMiBleHBhbmRfcGl4ZWwodTMyIGMpCit7CisJcmV0dXJuICgoKGMgJiAgMSkgPDwgMjQpIHwgKChjICYgIDIpIDw8IDI3KSB8ICgoYyAmICA0KSA8PCAxNCkgfCAoKGMgJiAgIDgpIDw8IDE3KSB8CisJCSgoYyAmIDE2KSA8PCAgNCkgfCAoKGMgJiAzMikgPDwgIDcpIHwgKChjICYgNjQpID4+ICA2KSB8ICgoYyAmIDEyOCkgPj4gIDMpKSAqIDB4RjsKK30KKworLyogdnQ4NjIzZmJfY2ZiNF9pbWFnZWJsaXQgc2lsZW50bHkgYXNzdW1lcyB0aGF0IGFsbW9zdCBldmVyeXRoaW5nIGlzIDgtcGl4ZWwgYWxpZ25lZCAqLworc3RhdGljIHZvaWQgdnQ4NjIzZmJfY2ZiNF9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCit7CisJdTMyIGZnID0gaW1hZ2UtPmZnX2NvbG9yICogMHgxMTExMTExMTsKKwl1MzIgYmcgPSBpbWFnZS0+YmdfY29sb3IgKiAweDExMTExMTExOworCWNvbnN0IHU4ICpzcmMxLCAqc3JjOworCXU4IF9faW9tZW0gKmRzdDE7CisJdTMyIF9faW9tZW0gKmRzdDsKKwl1MzIgdmFsOworCWludCB4LCB5OworCisJc3JjMSA9IGltYWdlLT5kYXRhOworCWRzdDEgPSBpbmZvLT5zY3JlZW5fYmFzZSArIChpbWFnZS0+ZHkgKiBpbmZvLT5maXgubGluZV9sZW5ndGgpCisJCSArICgoaW1hZ2UtPmR4IC8gOCkgKiA0KTsKKworCWZvciAoeSA9IDA7IHkgPCBpbWFnZS0+aGVpZ2h0OyB5KyspIHsKKwkJc3JjID0gc3JjMTsKKwkJZHN0ID0gKHUzMiBfX2lvbWVtICopIGRzdDE7CisJCWZvciAoeCA9IDA7IHggPCBpbWFnZS0+d2lkdGg7IHggKz0gOCkgeworCQkJdmFsID0gZXhwYW5kX3BpeGVsKCooc3JjKyspKTsKKwkJCXZhbCA9ICh2YWwgJiBmZykgfCAofnZhbCAmIGJnKTsKKwkJCWZiX3dyaXRlbCh2YWwsIGRzdCsrKTsKKwkJfQorCQlzcmMxICs9IGltYWdlLT53aWR0aCAvIDg7CisJCWRzdDEgKz0gaW5mby0+Zml4LmxpbmVfbGVuZ3RoOworCX0KK30KKworc3RhdGljIHZvaWQgdnQ4NjIzZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQoreworCWlmICgoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDQpICYmIChpbWFnZS0+ZGVwdGggPT0gMSkKKwkgICAgJiYgKChpbWFnZS0+d2lkdGggJSA4KSA9PSAwKSAmJiAoKGltYWdlLT5keCAlIDgpID09IDApKSB7CisJCWlmIChpbmZvLT5maXgudHlwZSA9PSBGQl9UWVBFX0lOVEVSTEVBVkVEX1BMQU5FUykKKwkJCXZ0ODYyM2ZiX2lwbGFuX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisJCWVsc2UKKwkJCXZ0ODYyM2ZiX2NmYjRfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwl9IGVsc2UKKwkJY2ZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHZ0ODYyM2ZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCit7CisJaWYgKChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gNCkKKwkgICAgJiYgKChyZWN0LT53aWR0aCAlIDgpID09IDApICYmICgocmVjdC0+ZHggJSA4KSA9PSAwKQorCSAgICAmJiAoaW5mby0+Zml4LnR5cGUgPT0gRkJfVFlQRV9JTlRFUkxFQVZFRF9QTEFORVMpKQorCQl2dDg2MjNmYl9pcGxhbl9maWxscmVjdChpbmZvLCByZWN0KTsKKwkgZWxzZQorCQljZmJfZmlsbHJlY3QoaW5mbywgcmVjdCk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKK3N0YXRpYyB2b2lkIHZ0ODYyM19zZXRfcGl4Y2xvY2soc3RydWN0IGZiX2luZm8gKmluZm8sIHUzMiBwaXhjbG9jaykKK3sKKwl1MTYgbSwgbiwgcjsKKwl1OCByZWd2YWw7CisJaW50IHJ2OworCisJcnYgPSBzdmdhX2NvbXB1dGVfcGxsKCZ2dDg2MjNfcGxsLCAxMDAwMDAwMDAwIC8gcGl4Y2xvY2ssICZtLCAmbiwgJnIsIGluZm8tPm5vZGUpOworCWlmIChydiA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYiVkOiBjYW5ub3Qgc2V0IHJlcXVlc3RlZCBwaXhjbG9jaywga2VlcGluZyBvbGQgdmFsdWVcbiIsIGluZm8tPm5vZGUpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IFZHQSBtaXNjIHJlZ2lzdGVyICAqLworCXJlZ3ZhbCA9IHZnYV9yKE5VTEwsIFZHQV9NSVNfUik7CisJdmdhX3coTlVMTCwgVkdBX01JU19XLCByZWd2YWwgfCBWR0FfTUlTX0VOQl9QTExfTE9BRCk7CisKKwkvKiBTZXQgY2xvY2sgcmVnaXN0ZXJzICovCisJdmdhX3dzZXEoTlVMTCwgMHg0NiwgKG4gIHwgKHIgPDwgNikpKTsKKwl2Z2Ffd3NlcShOVUxMLCAweDQ3LCBtKTsKKworCXVkZWxheSgxMDAwKTsKKworCS8qIFBMTCByZXNldCAqLworCXN2Z2Ffd3NlcV9tYXNrKDB4NDAsIDB4MDIsIDB4MDIpOworCXN2Z2Ffd3NlcV9tYXNrKDB4NDAsIDB4MDAsIDB4MDIpOworfQorCisKK3N0YXRpYyBpbnQgdnQ4NjIzZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJc3RydWN0IHZ0ODYyM2ZiX2luZm8gKnBhciA9IGluZm8tPnBhcjsKKworCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOworCWlmIChwYXItPnJlZl9jb3VudCA9PSAwKSB7CisJCW1lbXNldCgmKHBhci0+c3RhdGUpLCAwLCBzaXplb2Yoc3RydWN0IHZnYXN0YXRlKSk7CisJCXBhci0+c3RhdGUuZmxhZ3MgPSBWR0FfU0FWRV9NT0RFIHwgVkdBX1NBVkVfRk9OVFMgfCBWR0FfU0FWRV9DTUFQOworCQlwYXItPnN0YXRlLm51bV9jcnRjID0gMHhBMjsKKwkJcGFyLT5zdGF0ZS5udW1fc2VxID0gMHg1MDsKKwkJc2F2ZV92Z2EoJihwYXItPnN0YXRlKSk7CisJfQorCisJcGFyLT5yZWZfY291bnQrKzsKKwltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NjIzZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJc3RydWN0IHZ0ODYyM2ZiX2luZm8gKnBhciA9IGluZm8tPnBhcjsKKworCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOworCWlmIChwYXItPnJlZl9jb3VudCA9PSAwKSB7CisJCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwYXItPnJlZl9jb3VudCA9PSAxKQorCQlyZXN0b3JlX3ZnYSgmKHBhci0+c3RhdGUpKTsKKworCXBhci0+cmVmX2NvdW50LS07CisJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ0ODYyM2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IHJ2LCBtZW0sIHN0ZXA7CisKKwkvKiBGaW5kIGFwcHJvcHJpYXRlIGZvcm1hdCAqLworCXJ2ID0gc3ZnYV9tYXRjaF9mb3JtYXQgKHZ0ODYyM2ZiX2Zvcm1hdHMsIHZhciwgTlVMTCk7CisJaWYgKHJ2IDwgMCkKKwl7CisJCXByaW50ayhLRVJOX0VSUiAiZmIlZDogdW5zdXBwb3J0ZWQgbW9kZSByZXF1ZXN0ZWRcbiIsIGluZm8tPm5vZGUpOworCQlyZXR1cm4gcnY7CisJfQorCisJLyogRG8gbm90IGFsbG93IHRvIGhhdmUgcmVhbCByZXNvdWx1dGlvbiBsYXJnZXIgdGhhbiB2aXJ0dWFsICovCisJaWYgKHZhci0+eHJlcyA+IHZhci0+eHJlc192aXJ0dWFsKQorCQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKKworCWlmICh2YXItPnlyZXMgPiB2YXItPnlyZXNfdmlydHVhbCkKKwkJdmFyLT55cmVzX3ZpcnR1YWwgPSB2YXItPnlyZXM7CisKKwkvKiBSb3VuZCB1cCB4cmVzX3ZpcnR1YWwgdG8gaGF2ZSBwcm9wZXIgYWxpZ25tZW50IG9mIGxpbmVzICovCisJc3RlcCA9IHZ0ODYyM2ZiX2Zvcm1hdHNbcnZdLnhyZXNzdGVwIC0gMTsKKwl2YXItPnhyZXNfdmlydHVhbCA9ICh2YXItPnhyZXNfdmlydHVhbCtzdGVwKSAmIH5zdGVwOworCisJLyogQ2hlY2sgd2hldGhlciBoYXZlIGVub3VnaCBtZW1vcnkgKi8KKwltZW0gPSAoKHZhci0+Yml0c19wZXJfcGl4ZWwgKiB2YXItPnhyZXNfdmlydHVhbCkgPj4gMykgKiB2YXItPnlyZXNfdmlydHVhbDsKKwlpZiAobWVtID4gaW5mby0+c2NyZWVuX3NpemUpCisJeworCQlwcmludGsoS0VSTl9FUlIgImZiJWQ6IG5vdCBlbm91Z2ggZnJhbWVidWZmZXIgbWVtb3J5ICglZCBrQiByZXF1ZXN0ZWQgLCAlZCBrQiBhdmFpbGFibGUpXG4iLCBpbmZvLT5ub2RlLCBtZW0gPj4gMTAsICh1bnNpZ25lZCBpbnQpIChpbmZvLT5zY3JlZW5fc2l6ZSA+PiAxMCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUZXh0IG1vZGUgaXMgbGltaXRlZCB0byAyNTYga0Igb2YgbWVtb3J5ICovCisJaWYgKCh2YXItPmJpdHNfcGVyX3BpeGVsID09IDApICYmIChtZW0gPiAoMjU2KjEwMjQpKSkKKwl7CisJCXByaW50ayhLRVJOX0VSUiAiZmIlZDogdGV4dCBmcmFtZWJ1ZmZlciBzaXplIHRvbyBsYXJnZSAoJWQga0IgcmVxdWVzdGVkLCAyNTYga0IgcG9zc2libGUpXG4iLCBpbmZvLT5ub2RlLCBtZW0gPj4gMTApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlydiA9IHN2Z2FfY2hlY2tfdGltaW5ncyAoJnZ0ODYyM190aW1pbmdfcmVncywgdmFyLCBpbmZvLT5ub2RlKTsKKwlpZiAocnYgPCAwKQorCXsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYiVkOiBpbnZhbGlkIHRpbWluZ3MgcmVxdWVzdGVkXG4iLCBpbmZvLT5ub2RlKTsKKwkJcmV0dXJuIHJ2OworCX0KKworCS8qIEludGVybGFjZWQgbW9kZSBub3Qgc3VwcG9ydGVkICovCisJaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9JTlRFUkxBQ0VEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdnQ4NjIzZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwl1MzIgbW9kZSwgb2Zmc2V0X3ZhbHVlLCBmZXRjaF92YWx1ZSwgc2NyZWVuX3NpemU7CisJdTMyIGJwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKKworCWlmIChicHAgIT0gMCkgeworCQlpbmZvLT5maXgueXBhbnN0ZXAgPSAxOworCQlpbmZvLT5maXgubGluZV9sZW5ndGggPSAoaW5mby0+dmFyLnhyZXNfdmlydHVhbCAqIGJwcCkgLyA4OworCisJCWluZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19USUxFQkxJVFRJTkc7CisJCWluZm8tPnRpbGVvcHMgPSBOVUxMOworCisJCS8qIGluIDRicHAgc3VwcG9ydHMgOHAgd2lkZSB0aWxlcyBvbmx5LCBhbnkgdGlsZXMgb3RoZXJ3aXNlICovCisJCWluZm8tPnBpeG1hcC5ibGl0X3ggPSAoYnBwID09IDQpID8gKDEgPDwgKDggLSAxKSkgOiAofih1MzIpMCk7CisJCWluZm8tPnBpeG1hcC5ibGl0X3kgPSB+KHUzMikwOworCisJCW9mZnNldF92YWx1ZSA9IChpbmZvLT52YXIueHJlc192aXJ0dWFsICogYnBwKSAvIDY0OworCQlmZXRjaF92YWx1ZSAgPSAoKGluZm8tPnZhci54cmVzICogYnBwKSAvIDEyOCkgKyA0OworCisJCWlmIChicHAgPT0gNCkKKwkJCWZldGNoX3ZhbHVlICA9IChpbmZvLT52YXIueHJlcyAvIDgpICsgODsgLyogKyAwIGlzIE9LICovCisKKwkJc2NyZWVuX3NpemUgID0gaW5mby0+dmFyLnlyZXNfdmlydHVhbCAqIGluZm8tPmZpeC5saW5lX2xlbmd0aDsKKwl9IGVsc2UgeworCQlpbmZvLT5maXgueXBhbnN0ZXAgPSAxNjsKKwkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gMDsKKworCQlpbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19USUxFQkxJVFRJTkc7CisJCWluZm8tPnRpbGVvcHMgPSAmdnQ4NjIzZmJfdGlsZV9vcHM7CisKKwkJLyogc3VwcG9ydHMgOHgxNiB0aWxlcyBvbmx5ICovCisJCWluZm8tPnBpeG1hcC5ibGl0X3ggPSAxIDw8ICg4IC0gMSk7CisJCWluZm8tPnBpeG1hcC5ibGl0X3kgPSAxIDw8ICgxNiAtIDEpOworCisJCW9mZnNldF92YWx1ZSA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWwgLyAxNjsKKwkJZmV0Y2hfdmFsdWUgID0gKGluZm8tPnZhci54cmVzIC8gOCkgKyA4OworCQlzY3JlZW5fc2l6ZSAgPSAoaW5mby0+dmFyLnhyZXNfdmlydHVhbCAqIGluZm8tPnZhci55cmVzX3ZpcnR1YWwpIC8gNjQ7CisJfQorCisJaW5mby0+dmFyLnhvZmZzZXQgPSAwOworCWluZm8tPnZhci55b2Zmc2V0ID0gMDsKKwlpbmZvLT52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisKKwkvKiBVbmxvY2sgcmVnaXN0ZXJzICovCisJc3ZnYV93c2VxX21hc2soMHgxMCwgMHgwMSwgMHgwMSk7CisJc3ZnYV93Y3J0X21hc2soMHgxMSwgMHgwMCwgMHg4MCk7CisJc3ZnYV93Y3J0X21hc2soMHg0NywgMHgwMCwgMHgwMSk7CisKKwkvKiBEZXZpY2UsIHNjcmVlbiBhbmQgc3luYyBvZmYgKi8KKwlzdmdhX3dzZXFfbWFzaygweDAxLCAweDIwLCAweDIwKTsKKwlzdmdhX3djcnRfbWFzaygweDM2LCAweDMwLCAweDMwKTsKKwlzdmdhX3djcnRfbWFzaygweDE3LCAweDAwLCAweDgwKTsKKworCS8qIFNldCBkZWZhdWx0IHZhbHVlcyAqLworCXN2Z2Ffc2V0X2RlZmF1bHRfZ2Z4X3JlZ3MoKTsKKwlzdmdhX3NldF9kZWZhdWx0X2F0Y19yZWdzKCk7CisJc3ZnYV9zZXRfZGVmYXVsdF9zZXFfcmVncygpOworCXN2Z2Ffc2V0X2RlZmF1bHRfY3J0X3JlZ3MoKTsKKwlzdmdhX3djcnRfbXVsdGkodnQ4NjIzX2xpbmVfY29tcGFyZV9yZWdzLCAweEZGRkZGRkZGKTsKKwlzdmdhX3djcnRfbXVsdGkodnQ4NjIzX3N0YXJ0X2FkZHJlc3NfcmVncywgMCk7CisKKwlzdmdhX3djcnRfbXVsdGkodnQ4NjIzX29mZnNldF9yZWdzLCBvZmZzZXRfdmFsdWUpOworCXN2Z2Ffd3NlcV9tdWx0aSh2dDg2MjNfZmV0Y2hfY291bnRfcmVncywgZmV0Y2hfdmFsdWUpOworCisJaWYgKGluZm8tPnZhci52bW9kZSAmIEZCX1ZNT0RFX0RPVUJMRSkKKwkJc3ZnYV93Y3J0X21hc2soMHgwOSwgMHg4MCwgMHg4MCk7CisJZWxzZQorCQlzdmdhX3djcnRfbWFzaygweDA5LCAweDAwLCAweDgwKTsKKworCXN2Z2Ffd3NlcV9tYXNrKDB4MUUsIDB4RjAsIDB4RjApOyAvLyBESS9EVlAgYnVzCisJc3ZnYV93c2VxX21hc2soMHgyQSwgMHgwRiwgMHgwRik7IC8vIERJL0RWUCBidXMKKwlzdmdhX3dzZXFfbWFzaygweDE2LCAweDA4LCAweEJGKTsgLy8gRklGTyByZWFkIHRyZXNob2xkCisJdmdhX3dzZXEoTlVMTCwgMHgxNywgMHgxRik7ICAgICAgIC8vIEZJRk8gZGVwdGgKKwl2Z2Ffd3NlcShOVUxMLCAweDE4LCAweDRFKTsKKwlzdmdhX3dzZXFfbWFzaygweDFBLCAweDA4LCAweDA4KTsgLy8gZW5hYmxlIE1NSU8gPworCisJdmdhX3djcnQoTlVMTCwgMHgzMiwgMHgwMCk7CisJdmdhX3djcnQoTlVMTCwgMHgzNCwgMHgwMCk7CisJdmdhX3djcnQoTlVMTCwgMHg2QSwgMHg4MCk7CisJdmdhX3djcnQoTlVMTCwgMHg2QSwgMHhDMCk7CisKKwl2Z2Ffd2dmeChOVUxMLCAweDIwLCAweDAwKTsKKwl2Z2Ffd2dmeChOVUxMLCAweDIxLCAweDAwKTsKKwl2Z2Ffd2dmeChOVUxMLCAweDIyLCAweDAwKTsKKworCS8qIFNldCBTUjE1IGFjY29yZGluZyB0byBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwgKi8KKwltb2RlID0gc3ZnYV9tYXRjaF9mb3JtYXQodnQ4NjIzZmJfZm9ybWF0cywgJihpbmZvLT52YXIpLCAmKGluZm8tPmZpeCkpOworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMDoKKwkJcHJfZGVidWcoImZiJWQ6IHRleHQgbW9kZVxuIiwgaW5mby0+bm9kZSk7CisJCXN2Z2Ffc2V0X3RleHRtb2RlX3ZnYV9yZWdzKCk7CisJCXN2Z2Ffd3NlcV9tYXNrKDB4MTUsIDB4MDAsIDB4RkUpOworCQlzdmdhX3djcnRfbWFzaygweDExLCAweDYwLCAweDcwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwcl9kZWJ1ZygiZmIlZDogNCBiaXQgcHNldWRvY29sb3JcbiIsIGluZm8tPm5vZGUpOworCQl2Z2Ffd2dmeChOVUxMLCBWR0FfR0ZYX01PREUsIDB4NDApOworCQlzdmdhX3dzZXFfbWFzaygweDE1LCAweDIwLCAweEZFKTsKKwkJc3ZnYV93Y3J0X21hc2soMHgxMSwgMHgwMCwgMHg3MCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJfZGVidWcoImZiJWQ6IDQgYml0IHBzZXVkb2NvbG9yLCBwbGFuYXJcbiIsIGluZm8tPm5vZGUpOworCQlzdmdhX3dzZXFfbWFzaygweDE1LCAweDAwLCAweEZFKTsKKwkJc3ZnYV93Y3J0X21hc2soMHgxMSwgMHgwMCwgMHg3MCk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcHJfZGVidWcoImZiJWQ6IDggYml0IHBzZXVkb2NvbG9yXG4iLCBpbmZvLT5ub2RlKTsKKwkJc3ZnYV93c2VxX21hc2soMHgxNSwgMHgyMiwgMHhGRSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcHJfZGVidWcoImZiJWQ6IDUvNi81IHRydWVjb2xvclxuIiwgaW5mby0+bm9kZSk7CisJCXN2Z2Ffd3NlcV9tYXNrKDB4MTUsIDB4QjYsIDB4RkUpOworCQlicmVhazsKKwljYXNlIDU6CisJCXByX2RlYnVnKCJmYiVkOiA4LzgvOCB0cnVlY29sb3JcbiIsIGluZm8tPm5vZGUpOworCQlzdmdhX3dzZXFfbWFzaygweDE1LCAweEFFLCAweEZFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJ2dDg2MjNmYjogdW5zdXBwb3J0ZWQgbW9kZSAtIGJ1Z1xuIik7CisJCXJldHVybiAoLUVJTlZBTCk7CisJfQorCisJdnQ4NjIzX3NldF9waXhjbG9jayhpbmZvLCBpbmZvLT52YXIucGl4Y2xvY2spOworCXN2Z2Ffc2V0X3RpbWluZ3MoJnZ0ODYyM190aW1pbmdfcmVncywgJihpbmZvLT52YXIpLCAxLCAxLAorCQkJIChpbmZvLT52YXIudm1vZGUgJiBGQl9WTU9ERV9ET1VCTEUpID8gMiA6IDEsIDEsCisJCQkgMSwgaW5mby0+bm9kZSk7CisKKwltZW1zZXRfaW8oaW5mby0+c2NyZWVuX2Jhc2UsIDB4MDAsIHNjcmVlbl9zaXplKTsKKworCS8qIERldmljZSBhbmQgc2NyZWVuIGJhY2sgb24gKi8KKwlzdmdhX3djcnRfbWFzaygweDE3LCAweDgwLCAweDgwKTsKKwlzdmdhX3djcnRfbWFzaygweDM2LCAweDAwLCAweDMwKTsKKwlzdmdhX3dzZXFfbWFzaygweDAxLCAweDAwLCAweDIwKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdnQ4NjIzZmJfc2V0Y29scmVnKHVfaW50IHJlZ25vLCB1X2ludCByZWQsIHVfaW50IGdyZWVuLCB1X2ludCBibHVlLAorCQkJCXVfaW50IHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmZiKQoreworCXN3aXRjaCAoZmItPnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMDoKKwljYXNlIDQ6CisJCWlmIChyZWdubyA+PSAxNikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW91dGIoMHgwRiwgVkdBX1BFTF9NU0spOworCQlvdXRiKHJlZ25vLCBWR0FfUEVMX0lXKTsKKwkJb3V0YihyZWQgPj4gMTAsIFZHQV9QRUxfRCk7CisJCW91dGIoZ3JlZW4gPj4gMTAsIFZHQV9QRUxfRCk7CisJCW91dGIoYmx1ZSA+PiAxMCwgVkdBX1BFTF9EKTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlpZiAocmVnbm8gPj0gMjU2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJb3V0YigweEZGLCBWR0FfUEVMX01TSyk7CisJCW91dGIocmVnbm8sIFZHQV9QRUxfSVcpOworCQlvdXRiKHJlZCA+PiAxMCwgVkdBX1BFTF9EKTsKKwkJb3V0YihncmVlbiA+PiAxMCwgVkdBX1BFTF9EKTsKKwkJb3V0YihibHVlID4+IDEwLCBWR0FfUEVMX0QpOworCQlicmVhazsKKwljYXNlIDE2OgorCQlpZiAocmVnbm8gPj0gMTYpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoZmItPnZhci5ncmVlbi5sZW5ndGggPT0gNSkKKwkJCSgodTMyKilmYi0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9ICgocmVkICYgMHhGODAwKSA+PiAxKSB8CisJCQkJKChncmVlbiAmIDB4RjgwMCkgPj4gNikgfCAoKGJsdWUgJiAweEY4MDApID4+IDExKTsKKwkJZWxzZSBpZiAoZmItPnZhci5ncmVlbi5sZW5ndGggPT0gNikKKwkJCSgodTMyKilmYi0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9IChyZWQgJiAweEY4MDApIHwKKwkJCQkoKGdyZWVuICYgMHhGQzAwKSA+PiA1KSB8ICgoYmx1ZSAmIDB4RjgwMCkgPj4gMTEpOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwljYXNlIDMyOgorCQlpZiAocmVnbm8gPj0gMTYpCisJCQlyZXR1cm4gMDsKKworCQkvKiAoKHRyYW5zcCAmIDB4RkYwMCkgPDwgMTYpICovCisJCSgodTMyKilmYi0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9ICgocmVkICYgMHhGRjAwKSA8PCA4KSB8CisJCQkoZ3JlZW4gJiAweEZGMDApIHwgKChibHVlICYgMHhGRjAwKSA+PiA4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2dDg2MjNmYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3dpdGNoIChibGFua19tb2RlKSB7CisJY2FzZSBGQl9CTEFOS19VTkJMQU5LOgorCQlwcl9kZWJ1ZygiZmIlZDogdW5ibGFua1xuIiwgaW5mby0+bm9kZSk7CisJCXN2Z2Ffd2NydF9tYXNrKDB4MzYsIDB4MDAsIDB4MzApOworCQlzdmdhX3dzZXFfbWFzaygweDAxLCAweDAwLCAweDIwKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCXByX2RlYnVnKCJmYiVkOiBibGFua1xuIiwgaW5mby0+bm9kZSk7CisJCXN2Z2Ffd2NydF9tYXNrKDB4MzYsIDB4MDAsIDB4MzApOworCQlzdmdhX3dzZXFfbWFzaygweDAxLCAweDIwLCAweDIwKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgorCQlwcl9kZWJ1ZygiZmIlZDogRFBNUyBzdGFuZGJ5IChoc3luYyBvZmYpXG4iLCBpbmZvLT5ub2RlKTsKKwkJc3ZnYV93Y3J0X21hc2soMHgzNiwgMHgxMCwgMHgzMCk7CisJCXN2Z2Ffd3NlcV9tYXNrKDB4MDEsIDB4MjAsIDB4MjApOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6CisJCXByX2RlYnVnKCJmYiVkOiBEUE1TIHN1c3BlbmQgKHZzeW5jIG9mZilcbiIsIGluZm8tPm5vZGUpOworCQlzdmdhX3djcnRfbWFzaygweDM2LCAweDIwLCAweDMwKTsKKwkJc3ZnYV93c2VxX21hc2soMHgwMSwgMHgyMCwgMHgyMCk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgorCQlwcl9kZWJ1ZygiZmIlZDogRFBNUyBvZmYgKG5vIHN5bmMpXG4iLCBpbmZvLT5ub2RlKTsKKwkJc3ZnYV93Y3J0X21hc2soMHgzNiwgMHgzMCwgMHgzMCk7CisJCXN2Z2Ffd3NlcV9tYXNrKDB4MDEsIDB4MjAsIDB4MjApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZ0ODYyM2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgKi8KKwlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAwKSB7CisJCW9mZnNldCA9ICh2YXItPnlvZmZzZXQgLyAxNikgKiB2YXItPnhyZXNfdmlydHVhbCArIHZhci0+eG9mZnNldDsKKwkJb2Zmc2V0ID0gb2Zmc2V0ID4+IDM7CisJfSBlbHNlIHsKKwkJb2Zmc2V0ID0gKHZhci0+eW9mZnNldCAqIGluZm8tPmZpeC5saW5lX2xlbmd0aCkgKworCQkJICh2YXItPnhvZmZzZXQgKiB2YXItPmJpdHNfcGVyX3BpeGVsIC8gOCk7CisJCW9mZnNldCA9IG9mZnNldCA+PiAoKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gNCkgPyAyIDogMSk7CisJfQorCisJLyogU2V0IHRoZSBvZmZzZXQgKi8KKwlzdmdhX3djcnRfbXVsdGkodnQ4NjIzX3N0YXJ0X2FkZHJlc3NfcmVncywgb2Zmc2V0KTsKKworCXJldHVybiAwOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiBGcmFtZSBidWZmZXIgb3BlcmF0aW9ucyAqLworCitzdGF0aWMgc3RydWN0IGZiX29wcyB2dDg2MjNmYl9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl9vcGVuCT0gdnQ4NjIzZmJfb3BlbiwKKwkuZmJfcmVsZWFzZQk9IHZ0ODYyM2ZiX3JlbGVhc2UsCisJLmZiX2NoZWNrX3Zhcgk9IHZ0ODYyM2ZiX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3Bhcgk9IHZ0ODYyM2ZiX3NldF9wYXIsCisJLmZiX3NldGNvbHJlZwk9IHZ0ODYyM2ZiX3NldGNvbHJlZywKKwkuZmJfYmxhbmsJPSB2dDg2MjNmYl9ibGFuaywKKwkuZmJfcGFuX2Rpc3BsYXkJPSB2dDg2MjNmYl9wYW5fZGlzcGxheSwKKwkuZmJfZmlsbHJlY3QJPSB2dDg2MjNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBjZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdAk9IHZ0ODYyM2ZiX2ltYWdlYmxpdCwKKwkuZmJfZ2V0X2NhcHMgICAgPSBzdmdhX2dldF9jYXBzLAorfTsKKworCisvKiBQQ0kgcHJvYmUgKi8KKworc3RhdGljIGludCBfX2RldmluaXQgdnQ4NjIzX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IHZ0ODYyM2ZiX2luZm8gKnBhcjsKKwl1bnNpZ25lZCBpbnQgbWVtc2l6ZTEsIG1lbXNpemUyOworCWludCByYzsKKworCS8qIElnbm9yZSBzZWNvbmRhcnkgVkdBIGRldmljZSBiZWNhdXNlIHRoZXJlIGlzIG5vIFZHQSBhcmJpdHJhdGlvbiAqLworCWlmICghIHN2Z2FfcHJpbWFyeV9kZXZpY2UoZGV2KSkgeworCQlkZXZfaW5mbygmKGRldi0+ZGV2KSwgImlnbm9yaW5nIHNlY29uZGFyeSBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhbmQgZmlsbCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCB2dDg2MjNmYl9pbmZvKSwgTlVMTCk7CisJaWYgKCEgaW5mbykgeworCQlkZXZfZXJyKCYoZGV2LT5kZXYpLCAiY2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBhciA9IGluZm8tPnBhcjsKKwltdXRleF9pbml0KCZwYXItPm9wZW5fbG9jayk7CisKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19QQVJUSUFMX1BBTl9PSyB8IEZCSU5GT19IV0FDQ0VMX1lQQU47CisJaW5mby0+ZmJvcHMgPSAmdnQ4NjIzZmJfb3BzOworCisJLyogUHJlcGFyZSBQQ0kgZGV2aWNlICovCisKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJjIDwgMCkgeworCQlkZXZfZXJyKCYoZGV2LT5kZXYpLCAiY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfZW5hYmxlX2RldmljZTsKKwl9CisKKwlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAidnQ4NjIzZmIiKTsKKwlpZiAocmMgPCAwKSB7CisJCWRldl9lcnIoJihkZXYtPmRldiksICJjYW5ub3QgcmVzZXJ2ZSBmcmFtZWJ1ZmZlciByZWdpb25cbiIpOworCQlnb3RvIGVycl9yZXF1ZXN0X3JlZ2lvbnM7CisJfQorCisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwlpbmZvLT5maXguc21lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCk7CisJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAxKTsKKwlpbmZvLT5maXgubW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMSk7CisKKwkvKiBNYXAgcGh5c2ljYWwgSU8gbWVtb3J5IGFkZHJlc3MgaW50byBrZXJuZWwgc3BhY2UgKi8KKwlpbmZvLT5zY3JlZW5fYmFzZSA9IHBjaV9pb21hcChkZXYsIDAsIDApOworCWlmICghIGluZm8tPnNjcmVlbl9iYXNlKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZGV2X2VycigmKGRldi0+ZGV2KSwgImlvbWFwIGZvciBmcmFtZWJ1ZmZlciBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9pb21hcF8xOworCX0KKworCXBhci0+bW1pb19iYXNlID0gcGNpX2lvbWFwKGRldiwgMSwgMCk7CisJaWYgKCEgcGFyLT5tbWlvX2Jhc2UpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlkZXZfZXJyKCYoZGV2LT5kZXYpLCAiaW9tYXAgZm9yIE1NSU8gZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfaW9tYXBfMjsKKwl9CisKKwkvKiBGaW5kIGhvdyBtYW55IHBoeXNpY2FsIG1lbW9yeSB0aGVyZSBpcyBvbiBjYXJkICovCisJbWVtc2l6ZTEgPSAodmdhX3JzZXEoTlVMTCwgMHgzNCkgKyAxKSA+PiAxOworCW1lbXNpemUyID0gdmdhX3JzZXEoTlVMTCwgMHgzOSkgPDwgMjsKKworCWlmICgoMTYgPD0gbWVtc2l6ZTEpICYmIChtZW1zaXplMSA8PSA2NCkgJiYgKG1lbXNpemUxID09IG1lbXNpemUyKSkKKwkJaW5mby0+c2NyZWVuX3NpemUgPSBtZW1zaXplMSA8PCAyMDsKKwllbHNlIHsKKwkJZGV2X2VycigmKGRldi0+ZGV2KSwgIm1lbW9yeSBzaXplIGRldGVjdGlvbiBmYWlsZWQgKCV4ICV4KSwgc3VwcG9zZSAxNiBNQlxuIiwgbWVtc2l6ZTEsIG1lbXNpemUyKTsKKwkJaW5mby0+c2NyZWVuX3NpemUgPSAxNiA8PCAyMDsKKwl9CisKKwlpbmZvLT5maXguc21lbV9sZW4gPSBpbmZvLT5zY3JlZW5fc2l6ZTsKKwlzdHJjcHkoaW5mby0+Zml4LmlkLCAiVklBIFZUODYyMyIpOworCWluZm8tPmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7CisJaW5mby0+Zml4LnlwYW5zdGVwID0gMDsKKwlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9OT05FOworCWluZm8tPnBzZXVkb19wYWxldHRlID0gKHZvaWQqKXBhci0+cHNldWRvX3BhbGV0dGU7CisKKwkvKiBQcmVwYXJlIHN0YXJ0dXAgbW9kZSAqLworCisJcmMgPSBmYl9maW5kX21vZGUoJihpbmZvLT52YXIpLCBpbmZvLCBtb2RlLCBOVUxMLCAwLCBOVUxMLCA4KTsKKwlpZiAoISAoKHJjID09IDEpIHx8IChyYyA9PSAyKSkpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlkZXZfZXJyKCYoZGV2LT5kZXYpLCAibW9kZSAlcyBub3QgZm91bmRcbiIsIG1vZGUpOworCQlnb3RvIGVycl9maW5kX21vZGU7CisJfQorCisJcmMgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOworCWlmIChyYyA8IDApIHsKKwkJZGV2X2VycigmKGRldi0+ZGV2KSwgImNhbm5vdCBhbGxvY2F0ZSBjb2xvcm1hcFxuIik7CisJCWdvdG8gZXJyX2FsbG9jX2NtYXA7CisJfQorCisJcmMgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwlpZiAocmMgPCAwKSB7CisJCWRldl9lcnIoJihkZXYtPmRldiksICJjYW5ub3QgcmVnaXN0ZXIgZnJhbWVidWdnZXJcbiIpOworCQlnb3RvIGVycl9yZWdfZmI7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgb24gJXMsICVkIE1CIFJBTVxuIiwgaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLAorCQkgcGNpX25hbWUoZGV2KSwgaW5mby0+Zml4LnNtZW1fbGVuID4+IDIwKTsKKworCS8qIFJlY29yZCBhIHJlZmVyZW5jZSB0byB0aGUgZHJpdmVyIGRhdGEgKi8KKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKworI2lmZGVmIENPTkZJR19NVFJSCisJaWYgKG10cnIpIHsKKwkJcGFyLT5tdHJyX3JlZyA9IC0xOworCQlwYXItPm10cnJfcmVnID0gbXRycl9hZGQoaW5mby0+Zml4LnNtZW1fc3RhcnQsIGluZm8tPmZpeC5zbWVtX2xlbiwgTVRSUl9UWVBFX1dSQ09NQiwgMSk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKKworCS8qIEVycm9yIGhhbmRsaW5nICovCitlcnJfcmVnX2ZiOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CitlcnJfYWxsb2NfY21hcDoKK2Vycl9maW5kX21vZGU6CisJcGNpX2lvdW5tYXAoZGV2LCBwYXItPm1taW9fYmFzZSk7CitlcnJfaW9tYXBfMjoKKwlwY2lfaW91bm1hcChkZXYsIGluZm8tPnNjcmVlbl9iYXNlKTsKK2Vycl9pb21hcF8xOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKK2Vycl9yZXF1ZXN0X3JlZ2lvbnM6CisvKglwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsgKi8KK2Vycl9lbmFibGVfZGV2aWNlOgorCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJcmV0dXJuIHJjOworfQorCisvKiBQQ0kgcmVtb3ZlICovCisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2dDg2MjNfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaW5mbykgeworCQlzdHJ1Y3QgdnQ4NjIzZmJfaW5mbyAqcGFyID0gaW5mby0+cGFyOworCisjaWZkZWYgQ09ORklHX01UUlIKKwkJaWYgKHBhci0+bXRycl9yZWcgPj0gMCkgeworCQkJbXRycl9kZWwocGFyLT5tdHJyX3JlZywgMCwgMCk7CisJCQlwYXItPm10cnJfcmVnID0gLTE7CisJCX0KKyNlbmRpZgorCisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisKKwkJcGNpX2lvdW5tYXAoZGV2LCBpbmZvLT5zY3JlZW5fYmFzZSk7CisJCXBjaV9pb3VubWFwKGRldiwgcGFyLT5tbWlvX2Jhc2UpOworCQlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CisvKgkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7ICovCisKKwkJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJfQorfQorCisKKyNpZmRlZiBDT05GSUdfUE0KKy8qIFBDSSBzdXNwZW5kICovCisKK3N0YXRpYyBpbnQgdnQ4NjIzX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2KiBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB2dDg2MjNmYl9pbmZvICpwYXIgPSBpbmZvLT5wYXI7CisKKwlkZXZfaW5mbygmKGRldi0+ZGV2KSwgInN1c3BlbmRcbiIpOworCisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOworCisJaWYgKChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHx8IChwYXItPnJlZl9jb3VudCA9PSAwKSkgeworCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOworCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCXJldHVybiAwOworCX0KKworCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOworCisJcGNpX3NhdmVfc3RhdGUoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CisKKwltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKworCXJldHVybiAwOworfQorCisKKy8qIFBDSSByZXN1bWUgKi8KKworc3RhdGljIGludCB2dDg2MjNfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiogZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHZ0ODYyM2ZiX2luZm8gKnBhciA9IGluZm8tPnBhcjsKKworCWRldl9pbmZvKCYoZGV2LT5kZXYpLCAicmVzdW1lXG4iKTsKKworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwltdXRleF9sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKKworCWlmIChwYXItPnJlZl9jb3VudCA9PSAwKSB7CisJCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CisJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKQorCQlnb3RvIGZhaWw7CisKKwlwY2lfc2V0X21hc3RlcihkZXYpOworCisJdnQ4NjIzZmJfc2V0X3BhcihpbmZvKTsKKwlmYl9zZXRfc3VzcGVuZChpbmZvLCAwKTsKKworCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CitmYWlsOgorCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgdnQ4NjIzX3BjaV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgdnQ4NjIzX3BjaV9yZXN1bWUgTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCisvKiBMaXN0IG9mIGJvYXJkcyB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gc3VwcG9ydCAqLworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnQ4NjIzX2RldmljZXNbXSBfX2RldmluaXRkYXRhID0geworCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCAweDMxMjIpfSwKKwl7MCwgMCwgMCwgMCwgMCwgMCwgMH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB2dDg2MjNfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB2dDg2MjNmYl9wY2lfZHJpdmVyID0geworCS5uYW1lCQk9ICJ2dDg2MjNmYiIsCisJLmlkX3RhYmxlCT0gdnQ4NjIzX2RldmljZXMsCisJLnByb2JlCQk9IHZ0ODYyM19wY2lfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh2dDg2MjNfcGNpX3JlbW92ZSksCisJLnN1c3BlbmQJPSB2dDg2MjNfcGNpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB2dDg2MjNfcGNpX3Jlc3VtZSwKK307CisKKy8qIENsZWFudXAgKi8KKworc3RhdGljIHZvaWQgX19leGl0IHZ0ODYyM2ZiX2NsZWFudXAodm9pZCkKK3sKKwlwcl9kZWJ1ZygidnQ4NjIzZmI6IGNsZWFuaW5nIHVwXG4iKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnZ0ODYyM2ZiX3BjaV9kcml2ZXIpOworfQorCisvKiBEcml2ZXIgSW5pdGlhbGlzYXRpb24gKi8KKworaW50IF9faW5pdCB2dDg2MjNmYl9pbml0KHZvaWQpCit7CisKKyNpZm5kZWYgTU9EVUxFCisJY2hhciAqb3B0aW9uID0gTlVMTDsKKworCWlmIChmYl9nZXRfb3B0aW9ucygidnQ4NjIzZmIiLCAmb3B0aW9uKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAob3B0aW9uICYmICpvcHRpb24pCisJCW1vZGUgPSBvcHRpb247CisjZW5kaWYKKworCXByX2RlYnVnKCJ2dDg2MjNmYjogaW5pdGlhbGl6aW5nXG4iKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdnQ4NjIzZmJfcGNpX2RyaXZlcik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogTW9kdWxhcml6YXRpb24gKi8KKworbW9kdWxlX2luaXQodnQ4NjIzZmJfaW5pdCk7Cittb2R1bGVfZXhpdCh2dDg2MjNmYl9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCmluZGV4IDVmYzg2ZWEuLjAwM2M0OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby93MTAwZmIuYwpAQCAtNjYwLDcgKzY2MCw3IEBACiAJCQllcnIgPSAtRU5PREVWOwogCQkJZ290byBvdXQ7CiAJfQotCXByaW50aygiIGF0IDB4JTA4bHguXG4iLCBtZW0tPnN0YXJ0K1cxMDBfQ0ZHX0JBU0UpOworCXByaW50aygiIGF0IDB4JTA4bHguXG4iLCAodW5zaWduZWQgbG9uZykgbWVtLT5zdGFydCtXMTAwX0NGR19CQVNFKTsKIAogCS8qIFJlbWFwIHRoZSBmcmFtZWJ1ZmZlciAqLwogCXJlbWFwcGVkX2ZidWYgPSBpb3JlbWFwX25vY2FjaGUobWVtLT5zdGFydCtNRU1fV0lORE9XX0JBU0UsIE1FTV9XSU5ET1dfU0laRSk7CkBAIC03NTMsMTAgKzc1MywxNCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2Zhc3RwbGxjbGspOwotCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnX3JlYWQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnX3dyaXRlKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2ZsaXApOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZmFzdHBsbGNsayk7CisJZXJyIHw9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnX3JlYWQpOworCWVyciB8PSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3JlZ193cml0ZSk7CisJZXJyIHw9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZmxpcCk7CisKKwlpZiAoZXJyICE9IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImZiJWQ6IGZhaWxlZCB0byByZWdpc3RlciBhdHRyaWJ1dGVzICglZClcbiIsCisJCQkJaW5mby0+bm9kZSwgZXJyKTsKIAogCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3hpbGlueGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3hpbGlueGZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyOWE4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8veGlsaW54ZmIuYwpAQCAtMCwwICsxLDM4MSBAQAorLyoKKyAqIHhpbGlueGZiLmMKKyAqCisgKiBYaWxpbnggVEZUIExDRCBmcmFtZSBidWZmZXIgZHJpdmVyCisgKgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgIHNvdXJjZUBtdmlzdGEuY29tCisgKgorICogMjAwMi0yMDA3IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkCisgKiAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvKgorICogVGhpcyBkcml2ZXIgd2FzIGJhc2VkIG9uIGF1MTEwMGZiLmMgYnkgTW9udGFWaXN0YSByZXdyaXR0ZW4gZm9yIDIuNgorICogYnkgRW1iZWRkZWQgQWxsZXkgU29sdXRpb25zIDxzb3VyY2VAZW1iZWRkZWRhbGxleS5jb20+LCB3aGljaCBpbiB0dXJuCisgKiB3YXMgYmFzZWQgb24gc2tlbGV0b25mYi5jLCBTa2VsZXRvbiBmb3IgYSBmcmFtZSBidWZmZXIgZGV2aWNlIGJ5CisgKiBHZWVydCBVeXR0ZXJob2V2ZW4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPHN5c2xpYi92aXJ0ZXhfZGV2aWNlcy5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FCQkieGlsaW54ZmIiCisjZGVmaW5lIERSSVZFUl9ERVNDUklQVElPTgkiWGlsaW54IFRGVCBMQ0QgZnJhbWUgYnVmZmVyIGRyaXZlciIKKworLyoKKyAqIFhpbGlueCBjYWxscyBpdCAiUExCIFRGVCBMQ0QgQ29udHJvbGxlciIgdGhvdWdoIGl0IGNhbiBhbHNvIGJlIHVzZWQgZm9yCisgKiB0aGUgVkdBIHBvcnQgb24gdGhlIFhpbGlueCBNTDQweCBib2FyZC4gVGhpcyBpcyBhIGhhcmR3YXJlIGRpc3BsYXkgY29udHJvbGxlcgorICogZm9yIGEgNjQweDQ4MCByZXNvbHV0aW9uIFRGVCBvciBWR0Egc2NyZWVuLgorICoKKyAqIFRoZSBpbnRlcmZhY2UgdG8gdGhlIGZyYW1lYnVmZmVyIGlzIG5pY2UgYW5kIHNpbXBsZS4gIFRoZXJlIGFyZSB0d28KKyAqIGNvbnRyb2wgcmVnaXN0ZXJzLiAgVGhlIGZpcnN0IHRlbGxzIHRoZSBMQ0QgaW50ZXJmYWNlIHdoZXJlIGluIG1lbW9yeQorICogdGhlIGZyYW1lIGJ1ZmZlciBpcyAob25seSB0aGUgMTEgbW9zdCBzaWduaWZpY2FudCBiaXRzIGFyZSB1c2VkLCBzbworICogZG9uJ3Qgc3RhcnQgdGhpbmtpbmcgYWJvdXQgc2Nyb2xsaW5nKS4gIFRoZSBzZWNvbmQgYWxsb3dzIHRoZSBMQ0QgdG8KKyAqIGJlIHR1cm5lZCBvbiBvciBvZmYgYXMgd2VsbCBhcyByb3RhdGVkIDE4MCBkZWdyZWVzLgorICovCisjZGVmaW5lIE5VTV9SRUdTCTIKKyNkZWZpbmUgUkVHX0ZCX0FERFIJMAorI2RlZmluZSBSRUdfQ1RSTAkxCisjZGVmaW5lIFJFR19DVFJMX0VOQUJMRQkgMHgwMDAxCisjZGVmaW5lIFJFR19DVFJMX1JPVEFURQkgMHgwMDAyCisKKy8qCisgKiBUaGUgaGFyZHdhcmUgb25seSBoYW5kbGVzIGEgc2luZ2xlIG1vZGU6IDY0MHg0ODAgMjQgYml0IHRydWUKKyAqIGNvbG9yLiBFYWNoIHBpeGVsIGdldHMgYSB3b3JkICgzMiBiaXRzKSBvZiBtZW1vcnkuICBXaXRoaW4gZWFjaCB3b3JkLAorICogdGhlIDggbW9zdCBzaWduaWZpY2FudCBiaXRzIGFyZSBpZ25vcmVkLCB0aGUgbmV4dCA4IGJpdHMgYXJlIHRoZSByZWQKKyAqIGxldmVsLCB0aGUgbmV4dCA4IGJpdHMgYXJlIHRoZSBncmVlbiBsZXZlbCBhbmQgdGhlIDggbGVhc3QKKyAqIHNpZ25pZmljYW50IGJpdHMgYXJlIHRoZSBibHVlIGxldmVsLiAgRWFjaCByb3cgb2YgdGhlIExDRCB1c2VzIDEwMjQKKyAqIHdvcmRzLCBidXQgb25seSB0aGUgZmlyc3QgNjQwIHBpeGVscyBhcmUgZGlzcGxheWVkIHdpdGggdGhlIG90aGVyIDM4NAorICogd29yZHMgYmVpbmcgaWdub3JlZC4gIFRoZXJlIGFyZSA0ODAgcm93cy4KKyAqLworI2RlZmluZSBCWVRFU19QRVJfUElYRUwJNAorI2RlZmluZSBCSVRTX1BFUl9QSVhFTAkoQllURVNfUEVSX1BJWEVMICogOCkKKyNkZWZpbmUgWFJFUwkJNjQwCisjZGVmaW5lIFlSRVMJCTQ4MAorI2RlZmluZSBYUkVTX1ZJUlRVQUwJMTAyNAorI2RlZmluZSBZUkVTX1ZJUlRVQUwJWVJFUworI2RlZmluZSBMSU5FX0xFTkdUSAkoWFJFU19WSVJUVUFMICogQllURVNfUEVSX1BJWEVMKQorI2RlZmluZSBGQl9TSVpFCQkoWVJFU19WSVJUVUFMICogTElORV9MRU5HVEgpCisKKyNkZWZpbmUgUkVEX1NISUZUCTE2CisjZGVmaW5lIEdSRUVOX1NISUZUCTgKKyNkZWZpbmUgQkxVRV9TSElGVAkwCisKKyNkZWZpbmUgUEFMRVRURV9FTlRSSUVTX05PCTE2CS8qIHBhc3NlZCB0byBmYl9hbGxvY19jbWFwKCkgKi8KKworLyoKKyAqIEhlcmUgYXJlIHRoZSBkZWZhdWx0IGZiX2ZpeF9zY3JlZW5pbmZvIGFuZCBmYl92YXJfc2NyZWVuaW5mbyBzdHJ1Y3R1cmVzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8geGlsaW54X2ZiX2ZpeCBfX2luaXRkYXRhID0geworCS5pZCA9CQkiWGlsaW54IiwKKwkudHlwZSA9CQlGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLnZpc3VhbCA9CUZCX1ZJU1VBTF9UUlVFQ09MT1IsCisJLnNtZW1fbGVuID0JRkJfU0laRSwKKwkubGluZV9sZW5ndGggPQlMSU5FX0xFTkdUSCwKKwkuYWNjZWwgPQlGQl9BQ0NFTF9OT05FCit9OworCitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHhpbGlueF9mYl92YXIgX19pbml0ZGF0YSA9IHsKKwkueHJlcyA9CQkJWFJFUywKKwkueXJlcyA9CQkJWVJFUywKKwkueHJlc192aXJ0dWFsID0JCVhSRVNfVklSVFVBTCwKKwkueXJlc192aXJ0dWFsID0JCVlSRVNfVklSVFVBTCwKKworCS5iaXRzX3Blcl9waXhlbCA9CUJJVFNfUEVSX1BJWEVMLAorCisJLnJlZCA9CQl7IFJFRF9TSElGVCwgOCwgMCB9LAorCS5ncmVlbiA9CXsgR1JFRU5fU0hJRlQsIDgsIDAgfSwKKwkuYmx1ZSA9CQl7IEJMVUVfU0hJRlQsIDgsIDAgfSwKKwkudHJhbnNwID0JeyAwLCAwLCAwIH0sCisKKwkuYWN0aXZhdGUgPQlGQl9BQ1RJVkFURV9OT1cKK307CisKK3N0cnVjdCB4aWxpbnhmYl9kcnZkYXRhIHsKKworCXN0cnVjdCBmYl9pbmZvCWluZm87CQkvKiBGQiBkcml2ZXIgaW5mbyByZWNvcmQgKi8KKworCXUzMgkJcmVnc19waHlzOwkvKiBwaHlzLiBhZGRyZXNzIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVycyAqLworCXUzMiBfX2lvbWVtCSpyZWdzOwkJLyogdmlydC4gYWRkcmVzcyBvZiB0aGUgY29udHJvbCByZWdpc3RlcnMgKi8KKworCXVuc2lnbmVkIGNoYXIgX19pb21lbQkqZmJfdmlydDsJLyogdmlydC4gYWRkcmVzcyBvZiB0aGUgZnJhbWUgYnVmZmVyICovCisJZG1hX2FkZHJfdAlmYl9waHlzOwkvKiBwaHlzLiBhZGRyZXNzIG9mIHRoZSBmcmFtZSBidWZmZXIgKi8KKworCXUzMgkJcmVnX2N0cmxfZGVmYXVsdDsKKworCXUzMgkJcHNldWRvX3BhbGV0dGVbUEFMRVRURV9FTlRSSUVTX05PXTsKKwkJCQkJLyogRmFrZSBwYWxldHRlIG9mIDE2IGNvbG9ycyAqLworfTsKKworI2RlZmluZSB0b194aWxpbnhmYl9kcnZkYXRhKF9pbmZvKSBcCisJY29udGFpbmVyX29mKF9pbmZvLCBzdHJ1Y3QgeGlsaW54ZmJfZHJ2ZGF0YSwgaW5mbykKKworLyoKKyAqIFRoZSBMQ0QgY29udHJvbGxlciBoYXMgRENSIGludGVyZmFjZSB0byBpdHMgcmVnaXN0ZXJzLCBidXQgYWxsCisgKiB0aGUgYm9hcmRzIGFuZCBjb25maWd1cmF0aW9ucyB0aGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCB3aXRoCisgKiB1c2Ugb3BiMmRjciBicmlkZ2UuIFNvIHRoZSByZWdpc3RlcnMgYXJlIHNlZW4gYXMgbWVtb3J5IG1hcHBlZC4KKyAqIFRoaXMgbWFjcm8gaXMgdG8gbWFrZSBpdCBzaW1wbGUgdG8gYWRkIHRoZSBkaXJlY3QgRENSIGFjY2VzcworICogd2hlbiBpdCdzIG5lZWRlZC4KKyAqLworI2RlZmluZSB4aWxpbnhfZmJfb3V0X2JlMzIoZHJpdmVyZGF0YSwgb2Zmc2V0LCB2YWwpIFwKKwlvdXRfYmUzMihkcml2ZXJkYXRhLT5yZWdzICsgb2Zmc2V0LCB2YWwpCisKK3N0YXRpYyBpbnQKK3hpbGlueF9mYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sIHVuc2lnbmVkIGJsdWUsCisJdW5zaWduZWQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKQoreworCXUzMiAqcGFsZXR0ZSA9IGZiaS0+cHNldWRvX3BhbGV0dGU7CisKKwlpZiAocmVnbm8gPj0gUEFMRVRURV9FTlRSSUVTX05PKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmYmktPnZhci5ncmF5c2NhbGUpIHsKKwkJLyogQ29udmVydCBjb2xvciB0byBncmF5c2NhbGUuCisJCSAqIGdyYXlzY2FsZSA9IDAuMzAqUiArIDAuNTkqRyArIDAuMTEqQiAqLworCQlyZWQgPSBncmVlbiA9IGJsdWUgPQorCQkJKHJlZCAqIDc3ICsgZ3JlZW4gKiAxNTEgKyBibHVlICogMjggKyAxMjcpID4+IDg7CisJfQorCisJLyogZmJpLT5maXgudmlzdWFsIGlzIGFsd2F5cyBGQl9WSVNVQUxfVFJVRUNPTE9SICovCisKKwkvKiBXZSBvbmx5IGhhbmRsZSA4IGJpdHMgb2YgZWFjaCBjb2xvci4gKi8KKwlyZWQgPj49IDg7CisJZ3JlZW4gPj49IDg7CisJYmx1ZSA+Pj0gODsKKwlwYWxldHRlW3JlZ25vXSA9IChyZWQgPDwgUkVEX1NISUZUKSB8IChncmVlbiA8PCBHUkVFTl9TSElGVCkgfAorCQkJIChibHVlIDw8IEJMVUVfU0hJRlQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3hpbGlueF9mYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmZiaSkKK3sKKwlzdHJ1Y3QgeGlsaW54ZmJfZHJ2ZGF0YSAqZHJ2ZGF0YSA9IHRvX3hpbGlueGZiX2RydmRhdGEoZmJpKTsKKworCXN3aXRjaCAoYmxhbmtfbW9kZSkgeworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJLyogdHVybiBvbiBwYW5lbCAqLworCQl4aWxpbnhfZmJfb3V0X2JlMzIoZHJ2ZGF0YSwgUkVHX0NUUkwsIGRydmRhdGEtPnJlZ19jdHJsX2RlZmF1bHQpOworCQlicmVhazsKKworCWNhc2UgRkJfQkxBTktfTk9STUFMOgorCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CisJCS8qIHR1cm4gb2ZmIHBhbmVsICovCisJCXhpbGlueF9mYl9vdXRfYmUzMihkcnZkYXRhLCBSRUdfQ1RSTCwgMCk7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisKKwl9CisJcmV0dXJuIDA7IC8qIHN1Y2Nlc3MgKi8KK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgeGlsaW54ZmJfb3BzID0KK3sKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5mYl9zZXRjb2xyZWcJCT0geGlsaW54X2ZiX3NldGNvbHJlZywKKwkuZmJfYmxhbmsJCT0geGlsaW54X2ZiX2JsYW5rLAorCS5mYl9maWxscmVjdAkJPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCQk9IGNmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0CQk9IGNmYl9pbWFnZWJsaXQsCit9OworCisvKiA9PT0gVGhlIGRldmljZSBkcml2ZXIgPT09ICovCisKK3N0YXRpYyBpbnQKK3hpbGlueGZiX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgeGlsaW54ZmJfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IHhpbGlueGZiX2RydmRhdGEgKmRydmRhdGE7CisJc3RydWN0IHJlc291cmNlICpyZWdzX3JlczsKKwlpbnQgcmV0dmFsOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkbid0IGZpbmQgcGxhdGZvcm0gZGF0YS5cbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlkcnZkYXRhID0ga3phbGxvYyhzaXplb2YoKmRydmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRydmRhdGEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBhbGxvY2F0ZSBkZXZpY2UgcHJpdmF0ZSByZWNvcmRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGV2X3NldF9kcnZkYXRhKGRldiwgZHJ2ZGF0YSk7CisKKwkvKiBNYXAgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzIGluICovCisJcmVnc19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJaWYgKCFyZWdzX3JlcyB8fCAocmVnc19yZXMtPmVuZCAtIHJlZ3NfcmVzLT5zdGFydCArIDEgPCA4KSkgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkbid0IGdldCByZWdpc3RlcnMgcmVzb3VyY2VcbiIpOworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGZhaWxlZDE7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVnc19yZXMtPnN0YXJ0LCA4LCBEUklWRVJfTkFNRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiQ291bGRuJ3QgbG9jayBtZW1vcnkgcmVnaW9uIGF0IDB4JTA4WFxuIiwKKwkJICAgICAgIHJlZ3NfcmVzLT5zdGFydCk7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBmYWlsZWQxOworCX0KKwlkcnZkYXRhLT5yZWdzID0gKHUzMiBfX2lvbWVtKikgaW9yZW1hcChyZWdzX3Jlcy0+c3RhcnQsIDgpOworCWRydmRhdGEtPnJlZ3NfcGh5cyA9IHJlZ3NfcmVzLT5zdGFydDsKKworCS8qIEFsbG9jYXRlIHRoZSBmcmFtZWJ1ZmZlciBtZW1vcnkgKi8KKwlkcnZkYXRhLT5mYl92aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgUEFHRV9BTElHTihGQl9TSVpFKSwKKwkJCQkmZHJ2ZGF0YS0+ZmJfcGh5cywgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcnZkYXRhLT5mYl92aXJ0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGFsbG9jYXRlIGZyYW1lIGJ1ZmZlciBtZW1vcnlcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZDI7CisJfQorCisJLyogQ2xlYXIgKHR1cm4gdG8gYmxhY2spIHRoZSBmcmFtZWJ1ZmZlciAqLworCW1lbXNldF9pbygodm9pZCAqKSBkcnZkYXRhLT5mYl92aXJ0LCAwLCBGQl9TSVpFKTsKKworCS8qIFRlbGwgdGhlIGhhcmR3YXJlIHdoZXJlIHRoZSBmcmFtZSBidWZmZXIgaXMgKi8KKwl4aWxpbnhfZmJfb3V0X2JlMzIoZHJ2ZGF0YSwgUkVHX0ZCX0FERFIsIGRydmRhdGEtPmZiX3BoeXMpOworCisJLyogVHVybiBvbiB0aGUgZGlzcGxheSAqLworCWlmIChwZGF0YS0+cm90YXRlX3NjcmVlbikgeworCQlkcnZkYXRhLT5yZWdfY3RybF9kZWZhdWx0ID0gUkVHX0NUUkxfRU5BQkxFIHwgUkVHX0NUUkxfUk9UQVRFOworCX0gZWxzZSB7CisJCWRydmRhdGEtPnJlZ19jdHJsX2RlZmF1bHQgPSBSRUdfQ1RSTF9FTkFCTEU7CisJfQorCXhpbGlueF9mYl9vdXRfYmUzMihkcnZkYXRhLCBSRUdfQ1RSTCwgZHJ2ZGF0YS0+cmVnX2N0cmxfZGVmYXVsdCk7CisKKwkvKiBGaWxsIHN0cnVjdCBmYl9pbmZvICovCisJZHJ2ZGF0YS0+aW5mby5kZXZpY2UgPSBkZXY7CisJZHJ2ZGF0YS0+aW5mby5zY3JlZW5fYmFzZSA9IGRydmRhdGEtPmZiX3ZpcnQ7CisJZHJ2ZGF0YS0+aW5mby5mYm9wcyA9ICZ4aWxpbnhmYl9vcHM7CisJZHJ2ZGF0YS0+aW5mby5maXggPSB4aWxpbnhfZmJfZml4OworCWRydmRhdGEtPmluZm8uZml4LnNtZW1fc3RhcnQgPSBkcnZkYXRhLT5mYl9waHlzOworCWRydmRhdGEtPmluZm8ucHNldWRvX3BhbGV0dGUgPSBkcnZkYXRhLT5wc2V1ZG9fcGFsZXR0ZTsKKworCWlmIChmYl9hbGxvY19jbWFwKCZkcnZkYXRhLT5pbmZvLmNtYXAsIFBBTEVUVEVfRU5UUklFU19OTywgMCkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbCB0byBhbGxvY2F0ZSBjb2xvcm1hcCAoJWQgZW50cmllcylcbiIsCisJCQlQQUxFVFRFX0VOVFJJRVNfTk8pOworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGZhaWxlZDM7CisJfQorCisJZHJ2ZGF0YS0+aW5mby5mbGFncyA9IEZCSU5GT19ERUZBVUxUOworCXhpbGlueF9mYl92YXIuaGVpZ2h0ID0gcGRhdGEtPnNjcmVlbl9oZWlnaHRfbW07CisJeGlsaW54X2ZiX3Zhci53aWR0aCA9IHBkYXRhLT5zY3JlZW5fd2lkdGhfbW07CisJZHJ2ZGF0YS0+aW5mby52YXIgPSB4aWxpbnhfZmJfdmFyOworCisJLyogUmVnaXN0ZXIgbmV3IGZyYW1lIGJ1ZmZlciAqLworCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZHJ2ZGF0YS0+aW5mbykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHJlZ2lzdGVyIGZyYW1lIGJ1ZmZlclxuIik7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbGVkNDsKKwl9CisKKwlyZXR1cm4gMDsJLyogc3VjY2VzcyAqLworCitmYWlsZWQ0OgorCWZiX2RlYWxsb2NfY21hcCgmZHJ2ZGF0YS0+aW5mby5jbWFwKTsKKworZmFpbGVkMzoKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYsIFBBR0VfQUxJR04oRkJfU0laRSksIGRydmRhdGEtPmZiX3ZpcnQsCisJCWRydmRhdGEtPmZiX3BoeXMpOworCisJLyogVHVybiBvZmYgdGhlIGRpc3BsYXkgKi8KKwl4aWxpbnhfZmJfb3V0X2JlMzIoZHJ2ZGF0YSwgUkVHX0NUUkwsIDApOworCWlvdW5tYXAoZHJ2ZGF0YS0+cmVncyk7CisKK2ZhaWxlZDI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlZ3NfcmVzLT5zdGFydCwgOCk7CisKK2ZhaWxlZDE6CisJa2ZyZWUoZHJ2ZGF0YSk7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50Cit4aWxpbnhmYl9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgeGlsaW54ZmJfZHJ2ZGF0YSAqZHJ2ZGF0YTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRydmRhdGEgPSAoc3RydWN0IHhpbGlueGZiX2RydmRhdGEgKikgZGV2X2dldF9kcnZkYXRhKGRldik7CisKKyNpZiAhZGVmaW5lZChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTE9HTykKKwl4aWxpbnhfZmJfYmxhbmsoVkVTQV9QT1dFUkRPV04sICZkcnZkYXRhLT5pbmZvKTsKKyNlbmRpZgorCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZHJ2ZGF0YS0+aW5mbyk7CisKKwlmYl9kZWFsbG9jX2NtYXAoJmRydmRhdGEtPmluZm8uY21hcCk7CisKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYsIFBBR0VfQUxJR04oRkJfU0laRSksIGRydmRhdGEtPmZiX3ZpcnQsCisJCWRydmRhdGEtPmZiX3BoeXMpOworCisJLyogVHVybiBvZmYgdGhlIGRpc3BsYXkgKi8KKwl4aWxpbnhfZmJfb3V0X2JlMzIoZHJ2ZGF0YSwgUkVHX0NUUkwsIDApOworCWlvdW5tYXAoZHJ2ZGF0YS0+cmVncyk7CisKKwlyZWxlYXNlX21lbV9yZWdpb24oZHJ2ZGF0YS0+cmVnc19waHlzLCA4KTsKKworCWtmcmVlKGRydmRhdGEpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHhpbGlueGZiX2RyaXZlciA9IHsKKwkubmFtZQkJPSBEUklWRVJfTkFNRSwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKworCS5wcm9iZQkJPSB4aWxpbnhmYl9kcnZfcHJvYmUsCisJLnJlbW92ZQkJPSB4aWxpbnhmYl9kcnZfcmVtb3ZlCit9OworCitzdGF0aWMgaW50IF9faW5pdAoreGlsaW54ZmJfaW5pdCh2b2lkKQoreworCS8qCisJICogTm8ga2VybmVsIGJvb3Qgb3B0aW9ucyB1c2VkLAorCSAqIHNvIHdlIGp1c3QgbmVlZCB0byByZWdpc3RlciB0aGUgZHJpdmVyCisJICovCisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmeGlsaW54ZmJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit4aWxpbnhmYl9jbGVhbnVwKHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJnhpbGlueGZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHhpbGlueGZiX2luaXQpOworbW9kdWxlX2V4aXQoeGlsaW54ZmJfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIk1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDUklQVElPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL0tjb25maWcgYi9kcml2ZXJzL3cxL0tjb25maWcKaW5kZXggYzI4N2E5YS4uY2E3NWIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdzEvS2NvbmZpZwpAQCAtMSw0ICsxLDUgQEAKIG1lbnUgIkRhbGxhcydzIDEtd2lyZSBidXMiCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0KIAogY29uZmlnIFcxCiAJdHJpc3RhdGUgIkRhbGxhcydzIDEtd2lyZSBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL0tjb25maWcgYi9kcml2ZXJzL3cxL21hc3RlcnMvS2NvbmZpZwppbmRleCAyZmI0MjU1Li44Zjc3OTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvS2NvbmZpZwpAQCAtMzUsNSArMzUsMTMgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGRzMjQ4Mi4KIAorY29uZmlnIFcxX01BU1RFUl9EUzFXTQorCXRyaXN0YXRlICJNYXhpbSBEUzFXTSAxLXdpcmUgYnVzbWFzdGVyIgorCWRlcGVuZHMgb24gVzEgJiYgQVJNCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIERTMVdNIDEtd2lyZSBkcml2ZXIsIHN1Y2ggYXMgdGhhdAorCSAgaW4gSFAgaVBBUSBkZXZpY2VzIGxpa2UgaDV4eHgsIGgyMjAwLCBhbmQgQVNJQzMtYmFzZWQgbGlrZQorCSAgaHg0NzAwLgorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9NYWtlZmlsZSBiL2RyaXZlcnMvdzEvbWFzdGVycy9NYWtlZmlsZQppbmRleCA0Y2VlMjU2Li4xMTU1MWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogb2JqLSQoQ09ORklHX1cxX01BU1RFUl9NQVRST1gpCQkrPSBtYXRyb3hfdzEubwogb2JqLSQoQ09ORklHX1cxX01BU1RFUl9EUzI0OTApCQkrPSBkczI0OTAubwogb2JqLSQoQ09ORklHX1cxX01BU1RFUl9EUzI0ODIpCQkrPSBkczI0ODIubwotCitvYmotJChDT05GSUdfVzFfTUFTVEVSX0RTMVdNKQkJKz0gZHMxd20ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL2RzMXdtLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHMxd20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjNiYzczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMXdtLmMKQEAgLTAsMCArMSw0NjggQEAKKy8qCisgKiAxLXdpcmUgYnVzbWFzdGVyIGRyaXZlciBmb3IgRFMxV00gYW5kIEFTSUNzIHdpdGggZW1iZWRkZWQgRFMxV01zCisgKiBzdWNoIGFzIEhQIGlQQVFzIChpbmNsdWRpbmcgaDV4eHgsIGgyMjAwLCBhbmQgZGV2aWNlcyB3aXRoIEFTSUMzCisgKiBsaWtlIGh4NDcwMCkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUsIFN6YWJvbGNzIEd5dXJrbyA8c3phYm9sY3MuZ3l1cmtvQHRsdC5odT4KKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA3LCBNYXR0IFJlaW1lciA8bXJlaW1lckB2cG9wLm5ldD4KKyAqCisgKiBVc2UgY29uc2lzdGVudCB3aXRoIHRoZSBHTlUgR1BMIGlzIHBlcm1pdHRlZCwKKyAqIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBwcmVzZXJ2ZWQgaW4gaXRzIGVudGlyZXR5IGluIGFsbCBjb3BpZXMgYW5kIGRlcml2ZWQgd29ya3MuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kczF3bS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICIuLi93MS5oIgorI2luY2x1ZGUgIi4uL3cxX2ludC5oIgorCisKKyNkZWZpbmUgRFMxV01fQ01ECTB4MDAJLyogUi9XIDQgYml0cyBjb21tYW5kICovCisjZGVmaW5lIERTMVdNX0RBVEEJMHgwMQkvKiBSL1cgOCBiaXRzLCB0cmFuc21pdC9yZWNlaXZlIGJ1ZmZlciAqLworI2RlZmluZSBEUzFXTV9JTlQJMHgwMgkvKiBSL1cgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBEUzFXTV9JTlRfRU4JMHgwMwkvKiBSL1cgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBEUzFXTV9DTEtESVYJMHgwNAkvKiBSL1cgNSBiaXRzIG9mIGRpdmlzb3IgYW5kIHByZS1zY2FsZSAqLworCisjZGVmaW5lIERTMVdNX0NNRF8xV19SRVNFVCAgKDEgPDwgMCkJLyogZm9yY2UgcmVzZXQgb24gMS13aXJlIGJ1cyAqLworI2RlZmluZSBEUzFXTV9DTURfU1JBCSAgICAoMSA8PCAxKQkvKiBlbmFibGUgU2VhcmNoIFJPTSBhY2NlbGVyYXRvciBtb2RlICovCisjZGVmaW5lIERTMVdNX0NNRF9EUV9PVVRQVVQgKDEgPDwgMikJLyogd3JpdGUgb25seSAtIGZvcmNlcyBidXMgbG93ICovCisjZGVmaW5lIERTMVdNX0NNRF9EUV9JTlBVVCAgKDEgPDwgMykJLyogcmVhZCBvbmx5IC0gcmVmbGVjdHMgc3RhdGUgb2YgYnVzICovCisjZGVmaW5lIERTMVdNX0NNRF9SU1QJICAgICgxIDw8IDUpCS8qIHNvZnR3YXJlIHJlc2V0ICovCisjZGVmaW5lIERTMVdNX0NNRF9PRAkgICAgKDEgPDwgNykJLyogb3ZlcmRyaXZlICovCisKKyNkZWZpbmUgRFMxV01fSU5UX1BECSAgICAoMSA8PCAwKQkvKiBwcmVzZW5jZSBkZXRlY3QgKi8KKyNkZWZpbmUgRFMxV01fSU5UX1BEUgkgICAgKDEgPDwgMSkJLyogcHJlc2VuY2UgZGV0ZWN0IHJlc3VsdCAqLworI2RlZmluZSBEUzFXTV9JTlRfVEJFCSAgICAoMSA8PCAyKQkvKiB0eCBidWZmZXIgZW1wdHkgKi8KKyNkZWZpbmUgRFMxV01fSU5UX1RTUkUJICAgICgxIDw8IDMpCS8qIHR4IHNoaWZ0IHJlZ2lzdGVyIGVtcHR5ICovCisjZGVmaW5lIERTMVdNX0lOVF9SQkYJICAgICgxIDw8IDQpCS8qIHJ4IGJ1ZmZlciBmdWxsICovCisjZGVmaW5lIERTMVdNX0lOVF9SU1JGCSAgICAoMSA8PCA1KQkvKiByeCBzaGlmdCByZWdpc3RlciBmdWxsICovCisKKyNkZWZpbmUgRFMxV01fSU5URU5fRVBECSAgICAoMSA8PCAwKQkvKiBlbmFibGUgcHJlc2VuY2UgZGV0ZWN0IGludCAqLworI2RlZmluZSBEUzFXTV9JTlRFTl9JQVMJICAgICgxIDw8IDEpCS8qIElOVFIgYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIERTMVdNX0lOVEVOX0VUQkUgICAgKDEgPDwgMikJLyogZW5hYmxlIHR4IGJ1ZmZlciBlbXB0eSBpbnQgKi8KKyNkZWZpbmUgRFMxV01fSU5URU5fRVRNVCAgICAoMSA8PCAzKQkvKiBlbmFibGUgdHggc2hpZnQgcmVnaXN0ZXIgZW1wdHkgaW50ICovCisjZGVmaW5lIERTMVdNX0lOVEVOX0VSQkYgICAgKDEgPDwgNCkJLyogZW5hYmxlIHJ4IGJ1ZmZlciBmdWxsIGludCAqLworI2RlZmluZSBEUzFXTV9JTlRFTl9FUlNSRiAgICgxIDw8IDUpCS8qIGVuYWJsZSByeCBzaGlmdCByZWdpc3RlciBmdWxsIGludCAqLworI2RlZmluZSBEUzFXTV9JTlRFTl9EUU8JICAgICgxIDw8IDYpCS8qIGVuYWJsZSBkaXJlY3QgYnVzIGRyaXZpbmcgb3BzICovCisKKworI2RlZmluZSBEUzFXTV9USU1FT1VUIChIWiAqIDUpCisKK3N0YXRpYyBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgZnJlcTsKKwl1bnNpZ25lZCBsb25nIGRpdmlzb3I7Cit9IGZyZXFbXSA9IHsKKwl7IDQwMDAwMDAsIDB4OCB9LAorCXsgNTAwMDAwMCwgMHgyIH0sCisJeyA2MDAwMDAwLCAweDUgfSwKKwl7IDcwMDAwMDAsIDB4MyB9LAorCXsgODAwMDAwMCwgMHhjIH0sCisJeyAxMDAwMDAwMCwgMHg2IH0sCisJeyAxMjAwMDAwMCwgMHg5IH0sCisJeyAxNDAwMDAwMCwgMHg3IH0sCisJeyAxNjAwMDAwMCwgMHgxMCB9LAorCXsgMjAwMDAwMDAsIDB4YSB9LAorCXsgMjQwMDAwMDAsIDB4ZCB9LAorCXsgMjgwMDAwMDAsIDB4YiB9LAorCXsgMzIwMDAwMDAsIDB4MTQgfSwKKwl7IDQwMDAwMDAwLCAweGUgfSwKKwl7IDQ4MDAwMDAwLCAweDExIH0sCisJeyA1NjAwMDAwMCwgMHhmIH0sCisJeyA2NDAwMDAwMCwgMHgxOCB9LAorCXsgODAwMDAwMDAsIDB4MTIgfSwKKwl7IDk2MDAwMDAwLCAweDE1IH0sCisJeyAxMTIwMDAwMDAsIDB4MTMgfSwKKwl7IDEyODAwMDAwMCwgMHgxYyB9LAorfTsKKworc3RydWN0IGRzMXdtX2RhdGEgeworCXZvaWQJCSptYXA7CisJaW50CQlidXNfc2hpZnQ7IC8qICMgb2Ygc2hpZnRzIHRvIGNhbGMgcmVnaXN0ZXIgb2Zmc2V0cyAqLworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGRzMXdtX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludAkJaXJxOworCWludAkJYWN0aXZlX2hpZ2g7CisJc3RydWN0IGNsawkqY2xrOworCWludAkJc2xhdmVfcHJlc2VudDsKKwl2b2lkCQkqcmVzZXRfY29tcGxldGU7CisJdm9pZAkJKnJlYWRfY29tcGxldGU7CisJdm9pZAkJKndyaXRlX2NvbXBsZXRlOworCXU4CQlyZWFkX2J5dGU7IC8qIGxhc3QgYnl0ZSByZWNlaXZlZCAqLworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGRzMXdtX3dyaXRlX3JlZ2lzdGVyKHN0cnVjdCBkczF3bV9kYXRhICpkczF3bV9kYXRhLCB1MzIgcmVnLAorCQkJCQl1OCB2YWwpCit7CisgICAgICAgIF9fcmF3X3dyaXRlYih2YWwsIGRzMXdtX2RhdGEtPm1hcCArIChyZWcgPDwgZHMxd21fZGF0YS0+YnVzX3NoaWZ0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggZHMxd21fcmVhZF9yZWdpc3RlcihzdHJ1Y3QgZHMxd21fZGF0YSAqZHMxd21fZGF0YSwgdTMyIHJlZykKK3sKKyAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKGRzMXdtX2RhdGEtPm1hcCArIChyZWcgPDwgZHMxd21fZGF0YS0+YnVzX3NoaWZ0KSk7Cit9CisKKworc3RhdGljIGlycXJldHVybl90IGRzMXdtX2lzcihpbnQgaXNyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkczF3bV9kYXRhICpkczF3bV9kYXRhID0gZGF0YTsKKwl1OCBpbnRyID0gZHMxd21fcmVhZF9yZWdpc3RlcihkczF3bV9kYXRhLCBEUzFXTV9JTlQpOworCisJZHMxd21fZGF0YS0+c2xhdmVfcHJlc2VudCA9IChpbnRyICYgRFMxV01fSU5UX1BEUikgPyAwIDogMTsKKworCWlmICgoaW50ciAmIERTMVdNX0lOVF9QRCkgJiYgZHMxd21fZGF0YS0+cmVzZXRfY29tcGxldGUpCisJCWNvbXBsZXRlKGRzMXdtX2RhdGEtPnJlc2V0X2NvbXBsZXRlKTsKKworCWlmICgoaW50ciAmIERTMVdNX0lOVF9UU1JFKSAmJiBkczF3bV9kYXRhLT53cml0ZV9jb21wbGV0ZSkKKwkJY29tcGxldGUoZHMxd21fZGF0YS0+d3JpdGVfY29tcGxldGUpOworCisJaWYgKGludHIgJiBEUzFXTV9JTlRfUkJGKSB7CisJCWRzMXdtX2RhdGEtPnJlYWRfYnl0ZSA9IGRzMXdtX3JlYWRfcmVnaXN0ZXIoZHMxd21fZGF0YSwKKwkJCQkJCQkgICAgRFMxV01fREFUQSk7CisJCWlmIChkczF3bV9kYXRhLT5yZWFkX2NvbXBsZXRlKQorCQkJY29tcGxldGUoZHMxd21fZGF0YS0+cmVhZF9jb21wbGV0ZSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGRzMXdtX3Jlc2V0KHN0cnVjdCBkczF3bV9kYXRhICpkczF3bV9kYXRhKQoreworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0socmVzZXRfZG9uZSk7CisKKwlkczF3bV9kYXRhLT5yZXNldF9jb21wbGV0ZSA9ICZyZXNldF9kb25lOworCisJZHMxd21fd3JpdGVfcmVnaXN0ZXIoZHMxd21fZGF0YSwgRFMxV01fSU5UX0VOLCBEUzFXTV9JTlRFTl9FUEQgfAorCQkoZHMxd21fZGF0YS0+YWN0aXZlX2hpZ2ggPyBEUzFXTV9JTlRFTl9JQVMgOiAwKSk7CisKKwlkczF3bV93cml0ZV9yZWdpc3RlcihkczF3bV9kYXRhLCBEUzFXTV9DTUQsIERTMVdNX0NNRF8xV19SRVNFVCk7CisKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcmVzZXRfZG9uZSwgRFMxV01fVElNRU9VVCk7CisJZHMxd21fZGF0YS0+cmVzZXRfY29tcGxldGUgPSBOVUxMOworCWlmICghdGltZWxlZnQpIHsKKyAgICAgICAgICAgICAgICBkZXZfZGJnKCZkczF3bV9kYXRhLT5wZGV2LT5kZXYsICJyZXNldCBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworCX0KKworCS8qIFdhaXQgZm9yIHRoZSBlbmQgb2YgdGhlIHJlc2V0LiBBY2NvcmRpbmcgdG8gdGhlIHNwZWNzLCB0aGUgdGltZQorCSAqIGZyb20gd2hlbiB0aGUgaW50ZXJydXB0IGlzIGFzc2VydGVkIHRvIHRoZSBlbmQgb2YgdGhlIHJlc2V0IGlzOgorCSAqICAgICB0UlNUSCAgLSB0UERIICAtIHRQREwgLSB0UERJCisJICogICAgIDYyNSB1cyAtIDYwIHVzIC0gMjQwIHVzIC0gMTAwIG5zID0gMzI0LjkgdXMKKwkgKgorCSAqIFdlJ2xsIHdhaXQgYSBiaXQgbG9uZ2VyIGp1c3QgdG8gYmUgc3VyZS4KKwkgKi8KKwl1ZGVsYXkoNTAwKTsKKworCWRzMXdtX3dyaXRlX3JlZ2lzdGVyKGRzMXdtX2RhdGEsIERTMVdNX0lOVF9FTiwKKwkJRFMxV01fSU5URU5fRVJCRiB8IERTMVdNX0lOVEVOX0VUTVQgfCBEUzFXTV9JTlRFTl9FUEQgfAorCQkoZHMxd21fZGF0YS0+YWN0aXZlX2hpZ2ggPyBEUzFXTV9JTlRFTl9JQVMgOiAwKSk7CisKKwlpZiAoIWRzMXdtX2RhdGEtPnNsYXZlX3ByZXNlbnQpIHsKKyAgICAgICAgICAgICAgICBkZXZfZGJnKCZkczF3bV9kYXRhLT5wZGV2LT5kZXYsICJyZXNldDogbm8gZGV2aWNlcyBmb3VuZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkczF3bV93cml0ZShzdHJ1Y3QgZHMxd21fZGF0YSAqZHMxd21fZGF0YSwgdTggZGF0YSkKK3sKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3cml0ZV9kb25lKTsKKwlkczF3bV9kYXRhLT53cml0ZV9jb21wbGV0ZSA9ICZ3cml0ZV9kb25lOworCisJZHMxd21fd3JpdGVfcmVnaXN0ZXIoZHMxd21fZGF0YSwgRFMxV01fREFUQSwgZGF0YSk7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndyaXRlX2RvbmUsIERTMVdNX1RJTUVPVVQpOworCWRzMXdtX2RhdGEtPndyaXRlX2NvbXBsZXRlID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzMXdtX3JlYWQoc3RydWN0IGRzMXdtX2RhdGEgKmRzMXdtX2RhdGEsIHVuc2lnbmVkIGNoYXIgd3JpdGVfZGF0YSkKK3sKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhyZWFkX2RvbmUpOworCWRzMXdtX2RhdGEtPnJlYWRfY29tcGxldGUgPSAmcmVhZF9kb25lOworCisJZHMxd21fd3JpdGUoZHMxd21fZGF0YSwgd3JpdGVfZGF0YSk7CisJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZyZWFkX2RvbmUsIERTMVdNX1RJTUVPVVQpOworCWRzMXdtX2RhdGEtPnJlYWRfY29tcGxldGUgPSBOVUxMOworCisJcmV0dXJuIGRzMXdtX2RhdGEtPnJlYWRfYnl0ZTsKK30KKworc3RhdGljIGludCBkczF3bV9maW5kX2Rpdmlzb3IoaW50IGdjbGspCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmcmVxKTsgaSsrKQorCQlpZiAoZ2NsayA8PSBmcmVxW2ldLmZyZXEpCisJCQlyZXR1cm4gZnJlcVtpXS5kaXZpc29yOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRzMXdtX3VwKHN0cnVjdCBkczF3bV9kYXRhICpkczF3bV9kYXRhKQoreworCWludCBnY2xrLCBkaXZpc29yOworCisJaWYgKGRzMXdtX2RhdGEtPnBkYXRhLT5lbmFibGUpCisJCWRzMXdtX2RhdGEtPnBkYXRhLT5lbmFibGUoZHMxd21fZGF0YS0+cGRldik7CisKKwlnY2xrID0gY2xrX2dldF9yYXRlKGRzMXdtX2RhdGEtPmNsayk7CisJY2xrX2VuYWJsZShkczF3bV9kYXRhLT5jbGspOworCWRpdmlzb3IgPSBkczF3bV9maW5kX2Rpdmlzb3IoZ2Nsayk7CisJaWYgKGRpdmlzb3IgPT0gMCkgeworCQlkZXZfZXJyKCZkczF3bV9kYXRhLT5wZGV2LT5kZXYsCisJCQkibm8gc3VpdGFibGUgZGl2aXNvciBmb3IgJWRIeiBjbG9ja1xuIiwgZ2Nsayk7CisJCXJldHVybjsKKwl9CisJZHMxd21fd3JpdGVfcmVnaXN0ZXIoZHMxd21fZGF0YSwgRFMxV01fQ0xLRElWLCBkaXZpc29yKTsKKworCS8qIExldCB0aGUgdzEgY2xvY2sgc3RhYmlsaXplLiAqLworCW1zbGVlcCgxKTsKKworCWRzMXdtX3Jlc2V0KGRzMXdtX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBkczF3bV9kb3duKHN0cnVjdCBkczF3bV9kYXRhICpkczF3bV9kYXRhKQoreworCWRzMXdtX3Jlc2V0KGRzMXdtX2RhdGEpOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzLiAqLworCWRzMXdtX3dyaXRlX3JlZ2lzdGVyKGRzMXdtX2RhdGEsIERTMVdNX0lOVF9FTiwKKwkJCSAgICAgZHMxd21fZGF0YS0+YWN0aXZlX2hpZ2ggPyBEUzFXTV9JTlRFTl9JQVMgOiAwKTsKKworCWlmIChkczF3bV9kYXRhLT5wZGF0YS0+ZGlzYWJsZSkKKwkJZHMxd21fZGF0YS0+cGRhdGEtPmRpc2FibGUoZHMxd21fZGF0YS0+cGRldik7CisKKwljbGtfZGlzYWJsZShkczF3bV9kYXRhLT5jbGspOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHcxIG1ldGhvZHMgKi8KKworc3RhdGljIHU4IGRzMXdtX3JlYWRfYnl0ZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBkczF3bV9kYXRhICpkczF3bV9kYXRhID0gZGF0YTsKKworCXJldHVybiBkczF3bV9yZWFkKGRzMXdtX2RhdGEsIDB4ZmYpOworfQorCitzdGF0aWMgdm9pZCBkczF3bV93cml0ZV9ieXRlKHZvaWQgKmRhdGEsIHU4IGJ5dGUpCit7CisJc3RydWN0IGRzMXdtX2RhdGEgKmRzMXdtX2RhdGEgPSBkYXRhOworCisJZHMxd21fd3JpdGUoZHMxd21fZGF0YSwgYnl0ZSk7Cit9CisKK3N0YXRpYyB1OCBkczF3bV9yZXNldF9idXModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHMxd21fZGF0YSAqZHMxd21fZGF0YSA9IGRhdGE7CisKKwlkczF3bV9yZXNldChkczF3bV9kYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkczF3bV9zZWFyY2godm9pZCAqZGF0YSwgdTggc2VhcmNoX3R5cGUsCisJCQkgdzFfc2xhdmVfZm91bmRfY2FsbGJhY2sgc2xhdmVfZm91bmQpCit7CisJc3RydWN0IGRzMXdtX2RhdGEgKmRzMXdtX2RhdGEgPSBkYXRhOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgbG9uZyByb21faWQ7CisKKwkvKiBYWFggV2UgbmVlZCB0byBpdGVyYXRlIGZvciBtdWx0aXBsZSBkZXZpY2VzIHBlciB0aGUgRFMxV00gZG9jcy4KKwkgKiBTZWUgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vYXBwbm90ZXMuY2ZtL2FwcG5vdGVfbnVtYmVyLzEyMC4gKi8KKwlpZiAoZHMxd21fcmVzZXQoZHMxd21fZGF0YSkpCisJCXJldHVybjsKKworCWRzMXdtX3dyaXRlKGRzMXdtX2RhdGEsIHNlYXJjaF90eXBlKTsKKwlkczF3bV93cml0ZV9yZWdpc3RlcihkczF3bV9kYXRhLCBEUzFXTV9DTUQsIERTMVdNX0NNRF9TUkEpOworCisJZm9yIChyb21faWQgPSAwLCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKworCQl1bnNpZ25lZCBjaGFyIHJlc3AsIHIsIGQ7CisKKwkJcmVzcCA9IGRzMXdtX3JlYWQoZHMxd21fZGF0YSwgMHgwMCk7CisKKwkJciA9ICgocmVzcCAmIDB4MDIpID4+IDEpIHwKKwkJICAgICgocmVzcCAmIDB4MDgpID4+IDIpIHwKKwkJICAgICgocmVzcCAmIDB4MjApID4+IDMpIHwKKwkJICAgICgocmVzcCAmIDB4ODApID4+IDQpOworCisJCWQgPSAoKHJlc3AgJiAweDAxKSA+PiAwKSB8CisJCSAgICAoKHJlc3AgJiAweDA0KSA+PiAxKSB8CisJCSAgICAoKHJlc3AgJiAweDEwKSA+PiAyKSB8CisJCSAgICAoKHJlc3AgJiAweDQwKSA+PiAzKTsKKworCQlyb21faWQgfD0gKHVuc2lnbmVkIGxvbmcgbG9uZykgciA8PCAoaSAqIDQpOworCisJfQorCWRldl9kYmcoJmRzMXdtX2RhdGEtPnBkZXYtPmRldiwgImZvdW5kIDB4JTA4bGxYIiwgcm9tX2lkKTsKKworCWRzMXdtX3dyaXRlX3JlZ2lzdGVyKGRzMXdtX2RhdGEsIERTMVdNX0NNRCwgfkRTMVdNX0NNRF9TUkEpOworCWRzMXdtX3Jlc2V0KGRzMXdtX2RhdGEpOworCisJc2xhdmVfZm91bmQoZHMxd21fZGF0YSwgcm9tX2lkKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdzFfYnVzX21hc3RlciBkczF3bV9tYXN0ZXIgPSB7CisJLnJlYWRfYnl0ZSAgPSBkczF3bV9yZWFkX2J5dGUsCisJLndyaXRlX2J5dGUgPSBkczF3bV93cml0ZV9ieXRlLAorCS5yZXNldF9idXMgID0gZHMxd21fcmVzZXRfYnVzLAorCS5zZWFyY2gJICAgID0gZHMxd21fc2VhcmNoLAorfTsKKworc3RhdGljIGludCBkczF3bV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkczF3bV9kYXRhICpkczF3bV9kYXRhOworCXN0cnVjdCBkczF3bV9wbGF0Zm9ybV9kYXRhICpwbGF0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlpZiAoIXBkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJZHMxd21fZGF0YSA9IGt6YWxsb2Moc2l6ZW9mICgqZHMxd21fZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZHMxd21fZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkczF3bV9kYXRhKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycjA7CisJfQorCWRzMXdtX2RhdGEtPm1hcCA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKCFkczF3bV9kYXRhLT5tYXApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnIwOworCX0KKwlwbGF0ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJZHMxd21fZGF0YS0+YnVzX3NoaWZ0ID0gcGxhdC0+YnVzX3NoaWZ0OworCWRzMXdtX2RhdGEtPnBkZXYgPSBwZGV2OworCWRzMXdtX2RhdGEtPnBkYXRhID0gcGxhdDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycjE7CisJfQorCWRzMXdtX2RhdGEtPmlycSA9IHJlcy0+c3RhcnQ7CisJZHMxd21fZGF0YS0+YWN0aXZlX2hpZ2ggPSAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFKSA/CisJCTEgOiAwOworCisJc2V0X2lycV90eXBlKGRzMXdtX2RhdGEtPmlycSwgZHMxd21fZGF0YS0+YWN0aXZlX2hpZ2ggPworCQkJSVJRX1RZUEVfRURHRV9SSVNJTkcgOiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpOworCisJcmV0ID0gcmVxdWVzdF9pcnEoZHMxd21fZGF0YS0+aXJxLCBkczF3bV9pc3IsIElSUUZfRElTQUJMRUQsCisJCQkgICJkczF3bSIsIGRzMXdtX2RhdGEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMTsKKworCWRzMXdtX2RhdGEtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImRzMXdtIik7CisJaWYgKCFkczF3bV9kYXRhLT5jbGspIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnIyOworCX0KKworCWRzMXdtX3VwKGRzMXdtX2RhdGEpOworCisJZHMxd21fbWFzdGVyLmRhdGEgPSAodm9pZCAqKWRzMXdtX2RhdGE7CisKKwlyZXQgPSB3MV9hZGRfbWFzdGVyX2RldmljZSgmZHMxd21fbWFzdGVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjM7CisKKwlyZXR1cm4gMDsKKworZXJyMzoKKwlkczF3bV9kb3duKGRzMXdtX2RhdGEpOworCWNsa19wdXQoZHMxd21fZGF0YS0+Y2xrKTsKK2VycjI6CisJZnJlZV9pcnEoZHMxd21fZGF0YS0+aXJxLCBkczF3bV9kYXRhKTsKK2VycjE6CisJaW91bm1hcChkczF3bV9kYXRhLT5tYXApOworZXJyMDoKKwlrZnJlZShkczF3bV9kYXRhKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZHMxd21fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGRzMXdtX2RhdGEgKmRzMXdtX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRzMXdtX2Rvd24oZHMxd21fZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkczF3bV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHMxd21fZGF0YSAqZHMxd21fZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZHMxd21fdXAoZHMxd21fZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGRzMXdtX3N1c3BlbmQgTlVMTAorI2RlZmluZSBkczF3bV9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgZHMxd21fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRzMXdtX2RhdGEgKmRzMXdtX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXcxX3JlbW92ZV9tYXN0ZXJfZGV2aWNlKCZkczF3bV9tYXN0ZXIpOworCWRzMXdtX2Rvd24oZHMxd21fZGF0YSk7CisJY2xrX3B1dChkczF3bV9kYXRhLT5jbGspOworCWZyZWVfaXJxKGRzMXdtX2RhdGEtPmlycSwgZHMxd21fZGF0YSk7CisJaW91bm1hcChkczF3bV9kYXRhLT5tYXApOworCWtmcmVlKGRzMXdtX2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRzMXdtX2RyaXZlciA9IHsKKwkuZHJpdmVyICAgPSB7CisJCS5uYW1lID0gImRzMXdtIiwKKwl9LAorCS5wcm9iZSAgICA9IGRzMXdtX3Byb2JlLAorCS5yZW1vdmUgICA9IGRzMXdtX3JlbW92ZSwKKwkuc3VzcGVuZCAgPSBkczF3bV9zdXNwZW5kLAorCS5yZXN1bWUgICA9IGRzMXdtX3Jlc3VtZQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHMxd21faW5pdCh2b2lkKQoreworCXByaW50aygiRFMxV00gdzEgYnVzbWFzdGVyIGRyaXZlciAtIChjKSAyMDA0IFN6YWJvbGNzIEd5dXJrb1xuIik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHMxd21fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRzMXdtX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHMxd21fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZHMxd21faW5pdCk7Cittb2R1bGVfZXhpdChkczF3bV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiU3phYm9sY3MgR3l1cmtvIDxzemFib2xjcy5neXVya29AdGx0Lmh1PiwgIgorCSAgICAgICJNYXR0IFJlaW1lciA8bXJlaW1lckB2cG9wLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRFMxV00gdzEgYnVzbWFzdGVyIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MS5jIGIvZHJpdmVycy93MS93MS5jCmluZGV4IDYzYzA3MjQuLjdkNjg3NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvdzEuYworKysgYi9kcml2ZXJzL3cxL3cxLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2wtPnJlZ19udW0uaWQpOwogCiAJZGV2X2RiZygmc2wtPmRldiwgIiVzOiByZWdpc3RlcmluZyAlcyBhcyAlcC5cbiIsIF9fZnVuY19fLAotCQkmc2wtPmRldi5idXNfaWRbMF0pOworCQkmc2wtPmRldi5idXNfaWRbMF0sIHNsKTsKIAogCWVyciA9IGRldmljZV9yZWdpc3Rlcigmc2wtPmRldik7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzFfaW50LmMgYi9kcml2ZXJzL3cxL3cxX2ludC5jCmluZGV4IDM1N2EyZTAuLjI1OGRlZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvdzFfaW50LmMKKysrIGIvZHJpdmVycy93MS93MV9pbnQuYwpAQCAtMTAwLDcgKzEwMCw4IEBACiAKICAgICAgICAgLyogdmFsaWRhdGUgbWluaW11bSBmdW5jdGlvbmFsaXR5ICovCiAgICAgICAgIGlmICghKG1hc3Rlci0+dG91Y2hfYml0ICYmIG1hc3Rlci0+cmVzZXRfYnVzKSAmJgotICAgICAgICAgICAgIShtYXN0ZXItPndyaXRlX2JpdCAmJiBtYXN0ZXItPnJlYWRfYml0KSkgeworICAgICAgICAgICAgIShtYXN0ZXItPndyaXRlX2JpdCAmJiBtYXN0ZXItPnJlYWRfYml0KSAmJgorCSAgICAhKG1hc3Rlci0+d3JpdGVfYnl0ZSAmJiBtYXN0ZXItPnJlYWRfYnl0ZSAmJiBtYXN0ZXItPnJlc2V0X2J1cykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ3MV9hZGRfbWFzdGVyX2RldmljZTogaW52YWxpZCBmdW5jdGlvbiBzZXRcbiIpOwogCQlyZXR1cm4oLUVJTlZBTCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19hZGRyLmMgYi9mcy85cC92ZnNfYWRkci5jCmluZGV4IGJlZDQ4ZmEuLjlhYzRmZmU5IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfYWRkci5jCisrKyBiL2ZzLzlwL3Zmc19hZGRyLmMKQEAgLTI5LDEwICsyOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInY5ZnMuaCIKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kZW50cnkuYyBiL2ZzLzlwL3Zmc19kZW50cnkuYwppbmRleCBkZGZmZDhhLi5kOTM5NjA0IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGVudHJ5LmMKKysrIGIvZnMvOXAvdmZzX2RlbnRyeS5jCkBAIC0zMCwxMCArMzAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAidjlmcy5oIgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2Rpci5jIGIvZnMvOXAvdmZzX2Rpci5jCmluZGV4IDMxMjk2ODguLjFkZDg2ZWUgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19kaXIuYworKysgYi9mcy85cC92ZnNfZGlyLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZmlsZS5jIGIvZnMvOXAvdmZzX2ZpbGUuYwppbmRleCBjN2I2NzcyLi42ZTc2NzhlIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZmlsZS5jCisrKyBiL2ZzLzlwL3Zmc19maWxlLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCBiMDFiMGE0Li5jNzZjZDhmIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYworKysgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtMzAsMTAgKzMwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInY5ZnMuaCIKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19zdXBlci5jIGIvZnMvOXAvdmZzX3N1cGVyLmMKaW5kZXggMGVjNDJmNi4uN2JkZjhiMyAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX3N1cGVyLmMKKysrIGIvZnMvOXAvdmZzX3N1cGVyLmMKQEAgLTMxLDEyICszMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJ2OWZzLmgiCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCA4ZWE3YjA0Li4wZmEwYzExIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTMxNCw3ICszMTQsNyBAQAogCiBjb25maWcgUkVJU0VSRlNfUFJPQ19JTkZPCiAJYm9vbCAiU3RhdHMgaW4gL3Byb2MvZnMvcmVpc2VyZnMiCi0JZGVwZW5kcyBvbiBSRUlTRVJGU19GUworCWRlcGVuZHMgb24gUkVJU0VSRlNfRlMgJiYgUFJPQ19GUwogCWhlbHAKIAkgIENyZWF0ZSB1bmRlciAvcHJvYy9mcy9yZWlzZXJmcyBhIGhpZXJhcmNoeSBvZiBmaWxlcywgZGlzcGxheWluZwogCSAgdmFyaW91cyBSZWlzZXJGUyBzdGF0aXN0aWNzIGFuZCBpbnRlcm5hbCBkYXRhIGF0IHRoZSBleHBlbnNlIG9mCkBAIC03MjQsMTAgKzcyNCw2IEBACiAJICBmaWxlIHN5c3RlbSBhbmQgdXNlIEdOVSB0YXIncyBNIG9wdGlvbi4gR05VIHRhciBpcyBhIHByb2dyYW0KIAkgIGF2YWlsYWJsZSBmb3IgVW5peCBhbmQgRE9TICgibWFuIHRhciIgb3IgImluZm8gdGFyIikuCiAKLQkgIEl0IGlzIG5vdyBhbHNvIGJlY29taW5nIHBvc3NpYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGNvbXByZXNzZWQgRkFUCi0JICBmaWxlIHN5c3RlbXM7IHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mYXRfY3ZmLnR4dD4gZm9yCi0JICBkZXRhaWxzLgotCiAJICBUaGUgRkFUIHN1cHBvcnQgd2lsbCBlbmxhcmdlIHlvdXIga2VybmVsIGJ5IGFib3V0IDM3IEtCLiBJZiB1bnN1cmUsCiAJICBzYXkgWS4KIApkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZy5iaW5mbXQgYi9mcy9LY29uZmlnLmJpbmZtdAppbmRleCA3NGM2NDQwLi5kNGZjNjA5IDEwMDY0NAotLS0gYS9mcy9LY29uZmlnLmJpbmZtdAorKysgYi9mcy9LY29uZmlnLmJpbmZtdApAQCAtMzgsNyArMzgsNyBAQAogCiBjb25maWcgQklORk1UX0ZMQVQKIAl0cmlzdGF0ZSAiS2VybmVsIHN1cHBvcnQgZm9yIGZsYXQgYmluYXJpZXMiCi0JZGVwZW5kcyBvbiAhTU1VIHx8IFNVUEVSSAorCWRlcGVuZHMgb24gIU1NVQogCWhlbHAKIAkgIFN1cHBvcnQgdUNsaW51eCBGTEFUIGZvcm1hdCBiaW5hcmllcy4KIApkaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZQppbmRleCA5ZWRmNDExLi43MjBjMjlkIDEwMDY0NAotLS0gYS9mcy9NYWtlZmlsZQorKysgYi9mcy9NYWtlZmlsZQpAQCAtMjIsNiArMjIsMTAgQEAKIG9iai0kKENPTkZJR19JTk9USUZZKQkJKz0gaW5vdGlmeS5vCiBvYmotJChDT05GSUdfSU5PVElGWV9VU0VSKQkrPSBpbm90aWZ5X3VzZXIubwogb2JqLSQoQ09ORklHX0VQT0xMKQkJKz0gZXZlbnRwb2xsLm8KK29iai0kKENPTkZJR19BTk9OX0lOT0RFUykJKz0gYW5vbl9pbm9kZXMubworb2JqLSQoQ09ORklHX1NJR05BTEZEKQkJKz0gc2lnbmFsZmQubworb2JqLSQoQ09ORklHX1RJTUVSRkQpCQkrPSB0aW1lcmZkLm8KK29iai0kKENPTkZJR19FVkVOVEZEKQkJKz0gZXZlbnRmZC5vCiBvYmotJChDT05GSUdfQ09NUEFUKQkJKz0gY29tcGF0Lm8gY29tcGF0X2lvY3RsLm8KIAogbmZzZC0kKENPTkZJR19ORlNEKQkJOj0gbmZzY3RsLm8KZGlmZiAtLWdpdCBhL2ZzL2FkZnMvc3VwZXIuYyBiL2ZzL2FkZnMvc3VwZXIuYwppbmRleCAzMGMyOTY1Li5kZTJlZDVjIDEwMDY0NAotLS0gYS9mcy9hZGZzL3N1cGVyLmMKKysrIGIvZnMvYWRmcy9zdXBlci5jCkBAIC0yMzIsOCArMjMyLDcgQEAKIHsKIAlzdHJ1Y3QgYWRmc19pbm9kZV9pbmZvICplaSA9IChzdHJ1Y3QgYWRmc19pbm9kZV9pbmZvICopIGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKLQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogIAogc3RhdGljIGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmMKaW5kZXggNGFhODA3OS4uYzg3OTY5MCAxMDA2NDQKLS0tIGEvZnMvYWZmcy9maWxlLmMKKysrIGIvZnMvYWZmcy9maWxlLmMKQEAgLTYyOCwxMSArNjI4LDcgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCWlmICh0byA8IFBBR0VfQ0FDSEVfU0laRSkgewotCQljaGFyICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQotCQltZW1zZXQoa2FkZHIgKyB0bywgMCwgUEFHRV9DQUNIRV9TSVpFIC0gdG8pOwotCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCB0bywgUEFHRV9DQUNIRV9TSVpFIC0gdG8sIEtNX1VTRVIwKTsKIAkJaWYgKHNpemUgPiBvZmZzZXQgKyB0bykgewogCQkJaWYgKHNpemUgPCBvZmZzZXQgKyBQQUdFX0NBQ0hFX1NJWkUpCiAJCQkJdG1wID0gc2l6ZSAmIH5QQUdFX0NBQ0hFX01BU0s7CmRpZmYgLS1naXQgYS9mcy9hZmZzL2lub2RlLmMgYi9mcy9hZmZzL2lub2RlLmMKaW5kZXggYzViOWQ3My4uNDYwOWE2YyAxMDA2NDQKLS0tIGEvZnMvYWZmcy9pbm9kZS5jCisrKyBiL2ZzL2FmZnMvaW5vZGUuYwpAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiAgKEMpIDE5OTEgIExpbnVzIFRvcnZhbGRzIC0gbWluaXggZmlsZXN5c3RlbQogICovCi0KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImFmZnMuaCIKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jCmluZGV4IGJlZmY3ZDIuLjZkMGViYzMgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvc3VwZXIuYworKysgYi9mcy9hZmZzL3N1cGVyLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiYWZmcy5oIgogCiBleHRlcm4gc3RydWN0IHRpbWV6b25lIHN5c190ejsKQEAgLTg3LDExICs4OCw5IEBACiB7CiAJc3RydWN0IGFmZnNfaW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IGFmZnNfaW5vZGVfaW5mbyAqKSBmb287CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJaW5pdF9NVVRFWCgmZWktPmlfbGlua19sb2NrKTsKLQkJaW5pdF9NVVRFWCgmZWktPmlfZXh0X2xvY2spOwotCQlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwotCX0KKwlpbml0X01VVEVYKCZlaS0+aV9saW5rX2xvY2spOworCWluaXRfTVVURVgoJmVpLT5pX2V4dF9sb2NrKTsKKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogCiBzdGF0aWMgaW50IGluaXRfaW5vZGVjYWNoZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZnMvYWZzL01ha2VmaWxlIGIvZnMvYWZzL01ha2VmaWxlCmluZGV4IGNmODNlNWQuLjczY2U1NjEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9NYWtlZmlsZQorKysgYi9mcy9hZnMvTWFrZWZpbGUKQEAgLTIyLDYgKzIyLDcgQEAKIAl2bGNsaWVudC5vIFwKIAl2bG9jYXRpb24ubyBcCiAJdm5vZGUubyBcCi0Jdm9sdW1lLm8KKwl2b2x1bWUubyBcCisJd3JpdGUubwogCiBvYmotJChDT05GSUdfQUZTX0ZTKSAgOj0ga2Fmcy5vCmRpZmYgLS1naXQgYS9mcy9hZnMvYWZzLmggYi9mcy9hZnMvYWZzLmgKaW5kZXggNTJkMDc1Mi4uMjQ1MjU3OSAxMDA2NDQKLS0tIGEvZnMvYWZzL2Fmcy5oCisrKyBiL2ZzL2Fmcy9hZnMuaApAQCAtMTYsNiArMTYsOSBAQAogCiAjZGVmaW5lIEFGU19NQVhDRUxMTkFNRQk2NAkJLyogbWF4aW11bSBsZW5ndGggb2YgYSBjZWxsIG5hbWUgKi8KICNkZWZpbmUgQUZTX01BWFZPTE5BTUUJNjQJCS8qIG1heGltdW0gbGVuZ3RoIG9mIGEgdm9sdW1lIG5hbWUgKi8KKyNkZWZpbmUgQUZTTkFNRU1BWAkyNTYJCS8qIG1heGltdW0gbGVuZ3RoIG9mIGEgZmlsZW5hbWUgcGx1cyBOVUwgKi8KKyNkZWZpbmUgQUZTUEFUSE1BWAkxMDI0CQkvKiBtYXhpbXVtIGxlbmd0aCBvZiBhIHBhdGhuYW1lIHBsdXMgTlVMICovCisjZGVmaW5lIEFGU09QQVFVRU1BWAkxMDI0CQkvKiBtYXhpbXVtIGxlbmd0aCBvZiBhbiBvcGFxdWUgZmllbGQgKi8KIAogdHlwZWRlZiB1bnNpZ25lZAkJCWFmc192b2xpZF90OwogdHlwZWRlZiB1bnNpZ25lZAkJCWFmc192bm9kZWlkX3Q7CkBAIC0xNDMsNCArMTQ2LDI0IEBACiAJdGltZV90CQkJY3JlYXRpb247CS8qIHZvbHVtZSBjcmVhdGlvbiB0aW1lICovCiB9OwogCisvKgorICogQUZTIHZvbHVtZSBzdGF0dXMgcmVjb3JkCisgKi8KK3N0cnVjdCBhZnNfdm9sdW1lX3N0YXR1cyB7CisJdTMyCQkJdmlkOwkJLyogdm9sdW1lIElEICovCisJdTMyCQkJcGFyZW50X2lkOwkvKiBwYXJlbnQgdm9sdW1lIElEICovCisJdTgJCQlvbmxpbmU7CQkvKiB0cnVlIGlmIHZvbHVtZSBjdXJyZW50bHkgb25saW5lIGFuZCBhdmFpbGFibGUgKi8KKwl1OAkJCWluX3NlcnZpY2U7CS8qIHRydWUgaWYgdm9sdW1lIGN1cnJlbnRseSBpbiBzZXJ2aWNlICovCisJdTgJCQlibGVzc2VkOwkvKiBzYW1lIGFzIGluX3NlcnZpY2UgKi8KKwl1OAkJCW5lZWRzX3NhbHZhZ2U7CS8qIHRydWUgaWYgY29uc2lzdGVuY3kgY2hlY2tpbmcgcmVxdWlyZWQgKi8KKwl1MzIJCQl0eXBlOwkJLyogdm9sdW1lIHR5cGUgKGFmc192b2x0eXBlX3QpICovCisJdTMyCQkJbWluX3F1b3RhOwkvKiBtaW5pbXVtIHNwYWNlIHNldCBhc2lkZSAoYmxvY2tzKSAqLworCXUzMgkJCW1heF9xdW90YTsJLyogbWF4aW11bSBzcGFjZSB0aGlzIHZvbHVtZSBtYXkgb2NjdXB5IChibG9ja3MpICovCisJdTMyCQkJYmxvY2tzX2luX3VzZTsJLyogc3BhY2UgdGhpcyB2b2x1bWUgY3VycmVudGx5IG9jY3VwaWVzIChibG9ja3MpICovCisJdTMyCQkJcGFydF9ibG9ja3NfYXZhaWw7IC8qIHNwYWNlIGF2YWlsYWJsZSBpbiB2b2x1bWUncyBwYXJ0aXRpb24gKi8KKwl1MzIJCQlwYXJ0X21heF9ibG9ja3M7IC8qIHNpemUgb2Ygdm9sdW1lJ3MgcGFydGl0aW9uICovCit9OworCisjZGVmaW5lIEFGU19CTE9DS19TSVpFCTEwMjQKKwogI2VuZGlmIC8qIEFGU19IICovCmRpZmYgLS1naXQgYS9mcy9hZnMvYWZzX2ZzLmggYi9mcy9hZnMvYWZzX2ZzLmgKaW5kZXggODllMGQxNi4uYTE4YzM3NCAxMDA2NDQKLS0tIGEvZnMvYWZzL2Fmc19mcy5oCisrKyBiL2ZzL2Fmcy9hZnNfZnMuaApAQCAtMTgsNiArMTgsOCBAQAogZW51bSBBRlNfRlNfT3BlcmF0aW9ucyB7CiAJRlNGRVRDSERBVEEJCT0gMTMwLAkvKiBBRlMgRmV0Y2ggZmlsZSBkYXRhICovCiAJRlNGRVRDSFNUQVRVUwkJPSAxMzIsCS8qIEFGUyBGZXRjaCBmaWxlIHN0YXR1cyAqLworCUZTU1RPUkVEQVRBCQk9IDEzMywJLyogQUZTIFN0b3JlIGZpbGUgZGF0YSAqLworCUZTU1RPUkVTVEFUVVMJCT0gMTM1LAkvKiBBRlMgU3RvcmUgZmlsZSBzdGF0dXMgKi8KIAlGU1JFTU9WRUZJTEUJCT0gMTM2LAkvKiBBRlMgUmVtb3ZlIGEgZmlsZSAqLwogCUZTQ1JFQVRFRklMRQkJPSAxMzcsCS8qIEFGUyBDcmVhdGUgYSBmaWxlICovCiAJRlNSRU5BTUUJCT0gMTM4LAkvKiBBRlMgUmVuYW1lIG9yIG1vdmUgYSBmaWxlIG9yIGRpcmVjdG9yeSAqLwpAQCAtMjYsOSArMjgsMTIgQEAKIAlGU01BS0VESVIJCT0gMTQxLAkvKiBBRlMgQ3JlYXRlIGEgZGlyZWN0b3J5ICovCiAJRlNSRU1PVkVESVIJCT0gMTQyLAkvKiBBRlMgUmVtb3ZlIGEgZGlyZWN0b3J5ICovCiAJRlNHSVZFVVBDQUxMQkFDS1MJPSAxNDcsCS8qIEFGUyBEaXNjYXJkIGNhbGxiYWNrIHByb21pc2VzICovCi0JRlNHRVRWT0xVTUVJTkZPCQk9IDE0OCwJLyogQUZTIEdldCByb290IHZvbHVtZSBpbmZvcm1hdGlvbiAqLworCUZTR0VUVk9MVU1FSU5GTwkJPSAxNDgsCS8qIEFGUyBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSB2b2x1bWUgKi8KKwlGU0dFVFZPTFVNRVNUQVRVUwk9IDE0OSwJLyogQUZTIEdldCB2b2x1bWUgc3RhdHVzIGluZm9ybWF0aW9uICovCiAJRlNHRVRST09UVk9MVU1FCQk9IDE1MSwJLyogQUZTIEdldCByb290IHZvbHVtZSBuYW1lICovCiAJRlNMT09LVVAJCT0gMTYxLAkvKiBBRlMgbG9va3VwIGZpbGUgaW4gZGlyZWN0b3J5ICovCisJRlNGRVRDSERBVEE2NAkJPSA2NTUzNywgLyogQUZTIEZldGNoIGZpbGUgZGF0YSAqLworCUZTU1RPUkVEQVRBNjQJCT0gNjU1MzgsIC8qIEFGUyBTdG9yZSBmaWxlIGRhdGEgKi8KIH07CiAKIGVudW0gQUZTX0ZTX0Vycm9ycyB7CmRpZmYgLS1naXQgYS9mcy9hZnMvY2FsbGJhY2suYyBiL2ZzL2Fmcy9jYWxsYmFjay5jCmluZGV4IDliZGJmMzYuLmJhY2Y1MTggMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9jYWxsYmFjay5jCisrKyBiL2ZzL2Fmcy9jYWxsYmFjay5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiB1bnNpZ25lZCBhZnNfdm5vZGVfdXBkYXRlX3RpbWVvdXQgPSAxMDsKQEAgLTQ0LDcgKzQ1LDcgQEAKIAl3aGlsZSAoIVJCX0VNUFRZX1JPT1QoJnNlcnZlci0+Y2JfcHJvbWlzZXMpKSB7CiAJCXZub2RlID0gcmJfZW50cnkoc2VydmVyLT5jYl9wcm9taXNlcy5yYl9ub2RlLAogCQkJCSBzdHJ1Y3QgYWZzX3Zub2RlLCBjYl9wcm9taXNlKTsKLQkJX2RlYnVnKCJVTlBST01JU0UgeyB2aWQ9JXggdm49JXUgdXE9JXV9IiwKKwkJX2RlYnVnKCJVTlBST01JU0UgeyB2aWQ9JXg6JXUgdXE9JXV9IiwKIAkJICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLCB2bm9kZS0+ZmlkLnVuaXF1ZSk7CiAJCXJiX2VyYXNlKCZ2bm9kZS0+Y2JfcHJvbWlzZSwgJnNlcnZlci0+Y2JfcHJvbWlzZXMpOwogCQl2bm9kZS0+Y2JfcHJvbWlzZWQgPSBmYWxzZTsKQEAgLTg0LDExICs4NSw4IEBACiAKIAkJLyogaWYgdGhlIHZub2RlJ3MgZGF0YSB2ZXJzaW9uIG51bWJlciBjaGFuZ2VkIHRoZW4gaXRzIGNvbnRlbnRzCiAJCSAqIGFyZSBkaWZmZXJlbnQgKi8KLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBRlNfVk5PREVfWkFQX0RBVEEsICZ2bm9kZS0+ZmxhZ3MpKSB7Ci0JCQlfZGVidWcoInphcCBkYXRhIHsleDoldX0iLAotCQkJICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlKTsKLQkJCWludmFsaWRhdGVfcmVtb3RlX2lub2RlKCZ2bm9kZS0+dmZzX2lub2RlKTsKLQkJfQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFGU19WTk9ERV9aQVBfREFUQSwgJnZub2RlLT5mbGFncykpCisJCQlhZnNfemFwX2RhdGEodm5vZGUpOwogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvYWZzL2NlbGwuYyBiL2ZzL2Fmcy9jZWxsLmMKaW5kZXggOWIxMzExYS4uMTc1YTU2NyAxMDA2NDQKLS0tIGEvZnMvYWZzL2NlbGwuYworKysgYi9mcy9hZnMvY2VsbC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxrZXlzL3J4cnBjLXR5cGUuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmMKaW5kZXggMGMxZTkwMi4uNTQ2YzU5NSAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpci5jCisrKyBiL2ZzL2Fmcy9kaXIuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApAQCAtNTUsNyArNTYsOCBAQAogCS5ybWRpcgkJPSBhZnNfcm1kaXIsCiAJLnJlbmFtZQkJPSBhZnNfcmVuYW1lLAogCS5wZXJtaXNzaW9uCT0gYWZzX3Blcm1pc3Npb24sCi0JLmdldGF0dHIJPSBhZnNfaW5vZGVfZ2V0YXR0ciwKKwkuZ2V0YXR0cgk9IGFmc19nZXRhdHRyLAorCS5zZXRhdHRyCT0gYWZzX3NldGF0dHIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFmc19mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKQEAgLTQ5MSwxMiArNDkzLDEyIEBACiAKIAl2bm9kZSA9IEFGU19GU19JKGRpcik7CiAKLQlfZW50ZXIoInsleDolZH0sJXB7JXN9LCIsCisJX2VudGVyKCJ7JXg6JXV9LCVweyVzfSwiLAogCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgZGVudHJ5LCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAogCUFTU0VSVENNUChkZW50cnktPmRfaW5vZGUsID09LCBOVUxMKTsKIAotCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiAyNTUpIHsKKwlpZiAoZGVudHJ5LT5kX25hbWUubGVuID49IEFGU05BTUVNQVgpIHsKIAkJX2xlYXZlKCIgPSAtRU5BTUVUT09MT05HIik7CiAJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwogCX0KQEAgLTczMSwxMSArNzMzLDExIEBACiAKIAlkdm5vZGUgPSBBRlNfRlNfSShkaXIpOwogCi0JX2VudGVyKCJ7JXg6JWR9LHslc30sJW8iLAorCV9lbnRlcigieyV4OiV1fSx7JXN9LCVvIiwKIAkgICAgICAgZHZub2RlLT5maWQudmlkLCBkdm5vZGUtPmZpZC52bm9kZSwgZGVudHJ5LT5kX25hbWUubmFtZSwgbW9kZSk7CiAKIAlyZXQgPSAtRU5BTUVUT09MT05HOwotCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiAyNTUpCisJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+PSBBRlNOQU1FTUFYKQogCQlnb3RvIGVycm9yOwogCiAJa2V5ID0gYWZzX3JlcXVlc3Rfa2V5KGR2bm9kZS0+dm9sdW1lLT5jZWxsKTsKQEAgLTc5NiwxMSArNzk4LDExIEBACiAKIAlkdm5vZGUgPSBBRlNfRlNfSShkaXIpOwogCi0JX2VudGVyKCJ7JXg6JWR9LHslc30iLAorCV9lbnRlcigieyV4OiV1fSx7JXN9IiwKIAkgICAgICAgZHZub2RlLT5maWQudmlkLCBkdm5vZGUtPmZpZC52bm9kZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAlyZXQgPSAtRU5BTUVUT09MT05HOwotCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiAyNTUpCisJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+PSBBRlNOQU1FTUFYKQogCQlnb3RvIGVycm9yOwogCiAJa2V5ID0gYWZzX3JlcXVlc3Rfa2V5KGR2bm9kZS0+dm9sdW1lLT5jZWxsKTsKQEAgLTg0MiwxMSArODQ0LDExIEBACiAKIAlkdm5vZGUgPSBBRlNfRlNfSShkaXIpOwogCi0JX2VudGVyKCJ7JXg6JWR9LHslc30iLAorCV9lbnRlcigieyV4OiV1fSx7JXN9IiwKIAkgICAgICAgZHZub2RlLT5maWQudmlkLCBkdm5vZGUtPmZpZC52bm9kZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAlyZXQgPSAtRU5BTUVUT09MT05HOwotCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiAyNTUpCisJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+PSBBRlNOQU1FTUFYKQogCQlnb3RvIGVycm9yOwogCiAJa2V5ID0gYWZzX3JlcXVlc3Rfa2V5KGR2bm9kZS0+dm9sdW1lLT5jZWxsKTsKQEAgLTkxNiwxMSArOTE4LDExIEBACiAKIAlkdm5vZGUgPSBBRlNfRlNfSShkaXIpOwogCi0JX2VudGVyKCJ7JXg6JWR9LHslc30sJW8sIiwKKwlfZW50ZXIoInsleDoldX0seyVzfSwlbywiLAogCSAgICAgICBkdm5vZGUtPmZpZC52aWQsIGR2bm9kZS0+ZmlkLnZub2RlLCBkZW50cnktPmRfbmFtZS5uYW1lLCBtb2RlKTsKIAogCXJldCA9IC1FTkFNRVRPT0xPTkc7Ci0JaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IDI1NSkKKwlpZiAoZGVudHJ5LT5kX25hbWUubGVuID49IEFGU05BTUVNQVgpCiAJCWdvdG8gZXJyb3I7CiAKIAlrZXkgPSBhZnNfcmVxdWVzdF9rZXkoZHZub2RlLT52b2x1bWUtPmNlbGwpOwpAQCAtOTgzLDEzICs5ODUsMTMgQEAKIAl2bm9kZSA9IEFGU19GU19JKGZyb20tPmRfaW5vZGUpOwogCWR2bm9kZSA9IEFGU19GU19JKGRpcik7CiAKLQlfZW50ZXIoInsleDolZH0seyV4OiVkfSx7JXN9IiwKKwlfZW50ZXIoInsleDoldX0seyV4OiV1fSx7JXN9IiwKIAkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsCiAJICAgICAgIGR2bm9kZS0+ZmlkLnZpZCwgZHZub2RlLT5maWQudm5vZGUsCiAJICAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCiAJcmV0ID0gLUVOQU1FVE9PTE9ORzsKLQlpZiAoZGVudHJ5LT5kX25hbWUubGVuID4gMjU1KQorCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPj0gQUZTTkFNRU1BWCkKIAkJZ290byBlcnJvcjsKIAogCWtleSA9IGFmc19yZXF1ZXN0X2tleShkdm5vZGUtPnZvbHVtZS0+Y2VsbCk7CkBAIC0xMDMyLDE2ICsxMDM0LDE2IEBACiAKIAlkdm5vZGUgPSBBRlNfRlNfSShkaXIpOwogCi0JX2VudGVyKCJ7JXg6JWR9LHslc30sJXMiLAorCV9lbnRlcigieyV4OiV1fSx7JXN9LCVzIiwKIAkgICAgICAgZHZub2RlLT5maWQudmlkLCBkdm5vZGUtPmZpZC52bm9kZSwgZGVudHJ5LT5kX25hbWUubmFtZSwKIAkgICAgICAgY29udGVudCk7CiAKIAlyZXQgPSAtRU5BTUVUT09MT05HOwotCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiAyNTUpCisJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+PSBBRlNOQU1FTUFYKQogCQlnb3RvIGVycm9yOwogCiAJcmV0ID0gLUVJTlZBTDsKLQlpZiAoc3RybGVuKGNvbnRlbnQpID4gMTAyMykKKwlpZiAoc3RybGVuKGNvbnRlbnQpID49IEFGU1BBVEhNQVgpCiAJCWdvdG8gZXJyb3I7CiAKIAlrZXkgPSBhZnNfcmVxdWVzdF9rZXkoZHZub2RlLT52b2x1bWUtPmNlbGwpOwpAQCAtMTEwNCwxNCArMTEwNiwxNCBAQAogCW9yaWdfZHZub2RlID0gQUZTX0ZTX0kob2xkX2Rpcik7CiAJbmV3X2R2bm9kZSA9IEFGU19GU19JKG5ld19kaXIpOwogCi0JX2VudGVyKCJ7JXg6JWR9LHsleDolZH0seyV4OiVkfSx7JXN9IiwKKwlfZW50ZXIoInsleDoldX0seyV4OiV1fSx7JXg6JXV9LHslc30iLAogCSAgICAgICBvcmlnX2R2bm9kZS0+ZmlkLnZpZCwgb3JpZ19kdm5vZGUtPmZpZC52bm9kZSwKIAkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsCiAJICAgICAgIG5ld19kdm5vZGUtPmZpZC52aWQsIG5ld19kdm5vZGUtPmZpZC52bm9kZSwKIAkgICAgICAgbmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCiAJcmV0ID0gLUVOQU1FVE9PTE9ORzsKLQlpZiAobmV3X2RlbnRyeS0+ZF9uYW1lLmxlbiA+IDI1NSkKKwlpZiAobmV3X2RlbnRyeS0+ZF9uYW1lLmxlbiA+PSBBRlNOQU1FTUFYKQogCQlnb3RvIGVycm9yOwogCiAJa2V5ID0gYWZzX3JlcXVlc3Rfa2V5KG9yaWdfZHZub2RlLT52b2x1bWUtPmNlbGwpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmMKaW5kZXggYWUyNTY0OS4uOWMwZTcyMSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZpbGUuYworKysgYi9mcy9hZnMvZmlsZS5jCkBAIC0xNSwzMiArMTUsNDMgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotc3RhdGljIGludCBhZnNfZmlsZV9yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpOwotc3RhdGljIHZvaWQgYWZzX2ZpbGVfaW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLXN0YXRpYyBpbnQgYWZzX2ZpbGVfcmVsZWFzZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcF9mbGFncyk7CitzdGF0aWMgaW50IGFmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworc3RhdGljIHZvaWQgYWZzX2ludmFsaWRhdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CitzdGF0aWMgaW50IGFmc19yZWxlYXNlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKK3N0YXRpYyBpbnQgYWZzX2xhdW5kZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkub3BlbgkJPSBhZnNfb3BlbiwKIAkucmVsZWFzZQk9IGFmc19yZWxlYXNlLAogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCiAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAorCS5haW9fd3JpdGUJPSBhZnNfZmlsZV93cml0ZSwKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfcmVhZG9ubHlfbW1hcCwKIAkuc2VuZGZpbGUJPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCisJLmZzeW5jCQk9IGFmc19mc3luYywKIH07CiAKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLmdldGF0dHIJPSBhZnNfaW5vZGVfZ2V0YXR0ciwKKwkuZ2V0YXR0cgk9IGFmc19nZXRhdHRyLAorCS5zZXRhdHRyCT0gYWZzX3NldGF0dHIsCiAJLnBlcm1pc3Npb24JPSBhZnNfcGVybWlzc2lvbiwKIH07CiAKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2ZzX2FvcHMgPSB7Ci0JLnJlYWRwYWdlCT0gYWZzX2ZpbGVfcmVhZHBhZ2UsCi0JLnNldF9wYWdlX2RpcnR5CT0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCi0JLnJlbGVhc2VwYWdlCT0gYWZzX2ZpbGVfcmVsZWFzZXBhZ2UsCi0JLmludmFsaWRhdGVwYWdlCT0gYWZzX2ZpbGVfaW52YWxpZGF0ZXBhZ2UsCisJLnJlYWRwYWdlCT0gYWZzX3JlYWRwYWdlLAorCS5zZXRfcGFnZV9kaXJ0eQk9IGFmc19zZXRfcGFnZV9kaXJ0eSwKKwkubGF1bmRlcl9wYWdlCT0gYWZzX2xhdW5kZXJfcGFnZSwKKwkucmVsZWFzZXBhZ2UJPSBhZnNfcmVsZWFzZXBhZ2UsCisJLmludmFsaWRhdGVwYWdlCT0gYWZzX2ludmFsaWRhdGVwYWdlLAorCS5wcmVwYXJlX3dyaXRlCT0gYWZzX3ByZXBhcmVfd3JpdGUsCisJLmNvbW1pdF93cml0ZQk9IGFmc19jb21taXRfd3JpdGUsCisJLndyaXRlcGFnZQk9IGFmc193cml0ZXBhZ2UsCisJLndyaXRlcGFnZXMJPSBhZnNfd3JpdGVwYWdlcywKIH07CiAKIC8qCkBAIC01Miw3ICs2Myw3IEBACiAJc3RydWN0IGtleSAqa2V5OwogCWludCByZXQ7CiAKLQlfZW50ZXIoInsleDoleH0sIiwgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUpOworCV9lbnRlcigieyV4OiV1fSwiLCB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSk7CiAKIAlrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtPnZvbHVtZS0+Y2VsbCk7CiAJaWYgKElTX0VSUihrZXkpKSB7CkBAIC03OCw3ICs4OSw3IEBACiB7CiAJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7CiAKLQlfZW50ZXIoInsleDoleH0sIiwgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUpOworCV9lbnRlcigieyV4OiV1fSwiLCB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSk7CiAKIAlrZXlfcHV0KGZpbGUtPnByaXZhdGVfZGF0YSk7CiAJX2xlYXZlKCIgPSAwIik7CkBAIC04OSwxMCArMTAwLDEwIEBACiAgKiBkZWFsIHdpdGggbm90aWZpY2F0aW9uIHRoYXQgYSBwYWdlIHdhcyByZWFkIGZyb20gdGhlIGNhY2hlCiAgKi8KICNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgdm9pZCBhZnNfZmlsZV9yZWFkcGFnZV9yZWFkX2NvbXBsZXRlKHZvaWQgKmNvb2tpZV9kYXRhLAotCQkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJCSAgICB2b2lkICpkYXRhLAotCQkJCQkgICAgaW50IGVycm9yKQorc3RhdGljIHZvaWQgYWZzX3JlYWRwYWdlX3JlYWRfY29tcGxldGUodm9pZCAqY29va2llX2RhdGEsCisJCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgICB2b2lkICpkYXRhLAorCQkJCSAgICAgICBpbnQgZXJyb3IpCiB7CiAJX2VudGVyKCIlcCwlcCwlcCwlZCIsIGNvb2tpZV9kYXRhLCBwYWdlLCBkYXRhLCBlcnJvcik7CiAKQEAgLTEwOSwxMCArMTIwLDEwIEBACiAgKiBkZWFsIHdpdGggbm90aWZpY2F0aW9uIHRoYXQgYSBwYWdlIHdhcyB3cml0dGVuIHRvIHRoZSBjYWNoZQogICovCiAjaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIHZvaWQgYWZzX2ZpbGVfcmVhZHBhZ2Vfd3JpdGVfY29tcGxldGUodm9pZCAqY29va2llX2RhdGEsCi0JCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJCSAgICAgdm9pZCAqZGF0YSwKLQkJCQkJICAgICBpbnQgZXJyb3IpCitzdGF0aWMgdm9pZCBhZnNfcmVhZHBhZ2Vfd3JpdGVfY29tcGxldGUodm9pZCAqY29va2llX2RhdGEsCisJCQkJCXN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQl2b2lkICpkYXRhLAorCQkJCQlpbnQgZXJyb3IpCiB7CiAJX2VudGVyKCIlcCwlcCwlcCwlZCIsIGNvb2tpZV9kYXRhLCBwYWdlLCBkYXRhLCBlcnJvcik7CiAKQEAgLTEyMSw5ICsxMzIsOSBAQAogI2VuZGlmCiAKIC8qCi0gKiBBRlMgcmVhZCBwYWdlIGZyb20gZmlsZSAob3Igc3ltbGluaykKKyAqIEFGUyByZWFkIHBhZ2UgZnJvbSBmaWxlLCBkaXJlY3Rvcnkgb3Igc3ltbGluawogICovCi1zdGF0aWMgaW50IGFmc19maWxlX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbnQgYWZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpAQCAtMjE5LDI2ICsyMzAsOSBAQAogfQogCiAvKgotICogZ2V0IGEgcGFnZSBjb29raWUgZm9yIHRoZSBzcGVjaWZpZWQgcGFnZQotICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotaW50IGFmc19jYWNoZV9nZXRfcGFnZV9jb29raWUoc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgICAgICBzdHJ1Y3QgY2FjaGVmc19wYWdlICoqX3BhZ2VfY29va2llKQotewotCWludCByZXQ7Ci0KLQlfZW50ZXIoIiIpOwotCXJldCA9IGNhY2hlZnNfcGFnZV9nZXRfcHJpdmF0ZShwYWdlLF9wYWdlX2Nvb2tpZSwgR0ZQX05PSU8pOwotCi0JX2xlYXZlKCIgPSAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZgotCi0vKgogICogaW52YWxpZGF0ZSBwYXJ0IG9yIGFsbCBvZiBhIHBhZ2UKICAqLwotc3RhdGljIHZvaWQgYWZzX2ZpbGVfaW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQorc3RhdGljIHZvaWQgYWZzX2ludmFsaWRhdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAlpbnQgcmV0ID0gMTsKIApAQCAtMjQ3LDExICsyNDEsNiBAQAogCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAKIAlpZiAoUGFnZVByaXZhdGUocGFnZSkpIHsKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCk7Ci0JCWNhY2hlZnNfdW5jYWNoZV9wYWdlKHZub2RlLT5jYWNoZSxwYWdlKTsKLSNlbmRpZgotCiAJCS8qIFdlIHJlbGVhc2UgYnVmZmVycyBvbmx5IGlmIHRoZSBlbnRpcmUgcGFnZSBpcyBiZWluZwogCQkgKiBpbnZhbGlkYXRlZC4KIAkJICogVGhlIGdldF9ibG9jayBjYWNoZWQgdmFsdWUgaGFzIGJlZW4gdW5jb25kaXRpb25hbGx5CkBAIC0yNzIsMjUgKzI2MSwzMyBAQAogfQogCiAvKgorICogd3JpdGUgYmFjayBhIGRpcnR5IHBhZ2UKKyAqLworc3RhdGljIGludCBhZnNfbGF1bmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCV9lbnRlcigieyVsdX0iLCBwYWdlLT5pbmRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIHJlbGVhc2UgYSBwYWdlIGFuZCBjbGVhbnVwIGl0cyBwcml2YXRlIGRhdGEKICAqLwotc3RhdGljIGludCBhZnNfZmlsZV9yZWxlYXNlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQorc3RhdGljIGludCBhZnNfcmVsZWFzZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcF9mbGFncykKIHsKLQlzdHJ1Y3QgY2FjaGVmc19wYWdlICpwYWdlaW87CisJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KTsKKwlzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqd2I7CiAKLQlfZW50ZXIoInslbHV9LCV4IiwgcGFnZS0+aW5kZXgsIGdmcF9mbGFncyk7CisJX2VudGVyKCJ7eyV4OiV1fVslbHVdLCVseH0sJXgiLAorCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgcGFnZS0+aW5kZXgsIHBhZ2UtPmZsYWdzLAorCSAgICAgICBnZnBfZmxhZ3MpOwogCiAJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKSB7Ci0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCQlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpOwotCQljYWNoZWZzX3VuY2FjaGVfcGFnZSh2bm9kZS0+Y2FjaGUsIHBhZ2UpOwotI2VuZGlmCi0KLQkJcGFnZWlvID0gKHN0cnVjdCBjYWNoZWZzX3BhZ2UgKikgcGFnZV9wcml2YXRlKHBhZ2UpOworCQl3YiA9IChzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqKSBwYWdlX3ByaXZhdGUocGFnZSk7CisJCUFTU0VSVCh3YiAhPSBOVUxMKTsKIAkJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKIAkJQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKLQotCQlrZnJlZShwYWdlaW8pOworCQlhZnNfcHV0X3dyaXRlYmFjayh3Yik7CiAJfQogCiAJX2xlYXZlKCIgPSAwIik7CmRpZmYgLS1naXQgYS9mcy9hZnMvZnNjbGllbnQuYyBiL2ZzL2Fmcy9mc2NsaWVudC5jCmluZGV4IGU1NGU2YzIuLjVkZmYxMzAgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9mc2NsaWVudC5jCisrKyBiL2ZzL2Fmcy9mc2NsaWVudC5jCkBAIC0zMyw4ICszMywxMCBAQAogICovCiBzdGF0aWMgdm9pZCB4ZHJfZGVjb2RlX0FGU0ZldGNoU3RhdHVzKGNvbnN0IF9fYmUzMiAqKl9icCwKIAkJCQkgICAgICBzdHJ1Y3QgYWZzX2ZpbGVfc3RhdHVzICpzdGF0dXMsCi0JCQkJICAgICAgc3RydWN0IGFmc192bm9kZSAqdm5vZGUpCisJCQkJICAgICAgc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCisJCQkJICAgICAgYWZzX2RhdGF2ZXJzaW9uX3QgKnN0b3JlX3ZlcnNpb24pCiB7CisJYWZzX2RhdGF2ZXJzaW9uX3QgZXhwZWN0ZWRfdmVyc2lvbjsKIAljb25zdCBfX2JlMzIgKmJwID0gKl9icDsKIAl1bW9kZV90IG1vZGU7CiAJdTY0IGRhdGFfdmVyc2lvbiwgc2l6ZTsKQEAgLTEwMSw3ICsxMDMsMTEgQEAKIAkJdm5vZGUtPnZmc19pbm9kZS5pX2F0aW1lCT0gdm5vZGUtPnZmc19pbm9kZS5pX2N0aW1lOwogCX0KIAotCWlmIChzdGF0dXMtPmRhdGFfdmVyc2lvbiAhPSBkYXRhX3ZlcnNpb24pIHsKKwlleHBlY3RlZF92ZXJzaW9uID0gc3RhdHVzLT5kYXRhX3ZlcnNpb247CisJaWYgKHN0b3JlX3ZlcnNpb24pCisJCWV4cGVjdGVkX3ZlcnNpb24gPSAqc3RvcmVfdmVyc2lvbjsKKworCWlmIChleHBlY3RlZF92ZXJzaW9uICE9IGRhdGFfdmVyc2lvbikgewogCQlzdGF0dXMtPmRhdGFfdmVyc2lvbiA9IGRhdGFfdmVyc2lvbjsKIAkJaWYgKHZub2RlICYmICF0ZXN0X2JpdChBRlNfVk5PREVfVU5TRVQsICZ2bm9kZS0+ZmxhZ3MpKSB7CiAJCQlfZGVidWcoInZub2RlIG1vZGlmaWVkICVsbHggb24geyV4OiV1fSIsCkBAIC0xMTAsNiArMTE2LDggQEAKIAkJCXNldF9iaXQoQUZTX1ZOT0RFX01PRElGSUVELCAmdm5vZGUtPmZsYWdzKTsKIAkJCXNldF9iaXQoQUZTX1ZOT0RFX1pBUF9EQVRBLCAmdm5vZGUtPmZsYWdzKTsKIAkJfQorCX0gZWxzZSBpZiAoc3RvcmVfdmVyc2lvbikgeworCQlzdGF0dXMtPmRhdGFfdmVyc2lvbiA9IGRhdGFfdmVyc2lvbjsKIAl9CiB9CiAKQEAgLTE1Niw2ICsxNjQsNjcgQEAKIH0KIAogLyoKKyAqIGVuY29kZSB0aGUgcmVxdWVzdGVkIGF0dHJpYnV0ZXMgaW50byBhbiBBRlNTdG9yZVN0YXR1cyBibG9jaworICovCitzdGF0aWMgdm9pZCB4ZHJfZW5jb2RlX0FGU19TdG9yZVN0YXR1cyhfX2JlMzIgKipfYnAsIHN0cnVjdCBpYXR0ciAqYXR0cikKK3sKKwlfX2JlMzIgKmJwID0gKl9icDsKKwl1MzIgbWFzayA9IDAsIG10aW1lID0gMCwgb3duZXIgPSAwLCBncm91cCA9IDAsIG1vZGUgPSAwOworCisJbWFzayA9IDA7CisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NVElNRSkgeworCQltYXNrIHw9IEFGU19TRVRfTVRJTUU7CisJCW10aW1lID0gYXR0ci0+aWFfbXRpbWUudHZfc2VjOworCX0KKworCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfVUlEKSB7CisJCW1hc2sgfD0gQUZTX1NFVF9PV05FUjsKKwkJb3duZXIgPSBhdHRyLT5pYV91aWQ7CisJfQorCisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQpIHsKKwkJbWFzayB8PSBBRlNfU0VUX0dST1VQOworCQlncm91cCA9IGF0dHItPmlhX2dpZDsKKwl9CisKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpIHsKKwkJbWFzayB8PSBBRlNfU0VUX01PREU7CisJCW1vZGUgPSBhdHRyLT5pYV9tb2RlICYgU19JQUxMVUdPOworCX0KKworCSpicCsrID0gaHRvbmwobWFzayk7CisJKmJwKysgPSBodG9ubChtdGltZSk7CisJKmJwKysgPSBodG9ubChvd25lcik7CisJKmJwKysgPSBodG9ubChncm91cCk7CisJKmJwKysgPSBodG9ubChtb2RlKTsKKwkqYnArKyA9IDA7CQkvKiBzZWdtZW50IHNpemUgKi8KKwkqX2JwID0gYnA7Cit9CisKKy8qCisgKiBkZWNvZGUgYW4gQUZTRmV0Y2hWb2x1bWVTdGF0dXMgYmxvY2sKKyAqLworc3RhdGljIHZvaWQgeGRyX2RlY29kZV9BRlNGZXRjaFZvbHVtZVN0YXR1cyhjb25zdCBfX2JlMzIgKipfYnAsCisJCQkJCSAgICBzdHJ1Y3QgYWZzX3ZvbHVtZV9zdGF0dXMgKnZzKQoreworCWNvbnN0IF9fYmUzMiAqYnAgPSAqX2JwOworCisJdnMtPnZpZAkJCT0gbnRvaGwoKmJwKyspOworCXZzLT5wYXJlbnRfaWQJCT0gbnRvaGwoKmJwKyspOworCXZzLT5vbmxpbmUJCT0gbnRvaGwoKmJwKyspOworCXZzLT5pbl9zZXJ2aWNlCQk9IG50b2hsKCpicCsrKTsKKwl2cy0+Ymxlc3NlZAkJPSBudG9obCgqYnArKyk7CisJdnMtPm5lZWRzX3NhbHZhZ2UJPSBudG9obCgqYnArKyk7CisJdnMtPnR5cGUJCT0gbnRvaGwoKmJwKyspOworCXZzLT5taW5fcXVvdGEJCT0gbnRvaGwoKmJwKyspOworCXZzLT5tYXhfcXVvdGEJCT0gbnRvaGwoKmJwKyspOworCXZzLT5ibG9ja3NfaW5fdXNlCT0gbnRvaGwoKmJwKyspOworCXZzLT5wYXJ0X2Jsb2Nrc19hdmFpbAk9IG50b2hsKCpicCsrKTsKKwl2cy0+cGFydF9tYXhfYmxvY2tzCT0gbnRvaGwoKmJwKyspOworCSpfYnAgPSBicDsKK30KKworLyoKICAqIGRlbGl2ZXIgcmVwbHkgZGF0YSB0byBhbiBGUy5GZXRjaFN0YXR1cwogICovCiBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2ZzX2ZldGNoX3N0YXR1cyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsCkBAIC0xNzUsNyArMjQ0LDcgQEAKIAogCS8qIHVubWFyc2hhbGwgdGhlIHJlcGx5IG9uY2Ugd2UndmUgcmVjZWl2ZWQgYWxsIG9mIGl0ICovCiAJYnAgPSBjYWxsLT5idWZmZXI7Ci0JeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsICZ2bm9kZS0+c3RhdHVzLCB2bm9kZSk7CisJeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsICZ2bm9kZS0+c3RhdHVzLCB2bm9kZSwgTlVMTCk7CiAJeGRyX2RlY29kZV9BRlNDYWxsQmFjaygmYnAsIHZub2RlKTsKIAlpZiAoY2FsbC0+cmVwbHkyKQogCQl4ZHJfZGVjb2RlX0FGU1ZvbFN5bmMoJmJwLCBjYWxsLT5yZXBseTIpOwpAQCAtMjA2LDcgKzI3NSw3IEBACiAJc3RydWN0IGFmc19jYWxsICpjYWxsOwogCV9fYmUzMiAqYnA7CiAKLQlfZW50ZXIoIiwleCx7JXg6JWR9LCwiLAorCV9lbnRlcigiLCV4LHsleDoldX0sLCIsCiAJICAgICAgIGtleV9zZXJpYWwoa2V5KSwgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUpOwogCiAJY2FsbCA9IGFmc19hbGxvY19mbGF0X2NhbGwoJmFmc19SWEZTRmV0Y2hTdGF0dXMsIDE2LCAoMjEgKyAzICsgNikgKiA0KTsKQEAgLTI0Nyw5ICszMTYsMzMgQEAKIAljYXNlIDA6CiAJCWNhbGwtPm9mZnNldCA9IDA7CiAJCWNhbGwtPnVubWFyc2hhbGwrKzsKKwkJaWYgKGNhbGwtPm9wZXJhdGlvbl9JRCAhPSBGU0ZFVENIREFUQTY0KSB7CisJCQljYWxsLT51bm1hcnNoYWxsKys7CisJCQlnb3RvIG5vX21zdzsKKwkJfQogCi0JCS8qIGV4dHJhY3QgdGhlIHJldHVybmVkIGRhdGEgbGVuZ3RoICovCisJCS8qIGV4dHJhY3QgdGhlIHVwcGVyIHBhcnQgb2YgdGhlIHJldHVybmVkIGRhdGEgbGVuZ3RoIG9mIGFuCisJCSAqIEZTRkVUQ0hEQVRBNjQgb3AgKHdoaWNoIHNob3VsZCBhbHdheXMgYmUgMCB1c2luZyB0aGlzCisJCSAqIGNsaWVudCkgKi8KIAljYXNlIDE6CisJCV9kZWJ1ZygiZXh0cmFjdCBkYXRhIGxlbmd0aCAoTVNXKSIpOworCQlyZXQgPSBhZnNfZXh0cmFjdF9kYXRhKGNhbGwsIHNrYiwgbGFzdCwgJmNhbGwtPnRtcCwgNCk7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgMDoJCWJyZWFrOworCQljYXNlIC1FQUdBSU46CXJldHVybiAwOworCQlkZWZhdWx0OglyZXR1cm4gcmV0OworCQl9CisKKwkJY2FsbC0+Y291bnQgPSBudG9obChjYWxsLT50bXApOworCQlfZGVidWcoIkRBVEEgbGVuZ3RoIE1TVzogJXUiLCBjYWxsLT5jb3VudCk7CisJCWlmIChjYWxsLT5jb3VudCA+IDApCisJCQlyZXR1cm4gLUVCQURNU0c7CisJCWNhbGwtPm9mZnNldCA9IDA7CisJCWNhbGwtPnVubWFyc2hhbGwrKzsKKworCW5vX21zdzoKKwkJLyogZXh0cmFjdCB0aGUgcmV0dXJuZWQgZGF0YSBsZW5ndGggKi8KKwljYXNlIDI6CiAJCV9kZWJ1ZygiZXh0cmFjdCBkYXRhIGxlbmd0aCIpOwogCQlyZXQgPSBhZnNfZXh0cmFjdF9kYXRhKGNhbGwsIHNrYiwgbGFzdCwgJmNhbGwtPnRtcCwgNCk7CiAJCXN3aXRjaCAocmV0KSB7CkBAIC0yNjUsMzIgKzM1OCwyNyBAQAogCQljYWxsLT5vZmZzZXQgPSAwOwogCQljYWxsLT51bm1hcnNoYWxsKys7CiAKLQkJaWYgKGNhbGwtPmNvdW50IDwgUEFHRV9TSVpFKSB7CisJCS8qIGV4dHJhY3QgdGhlIHJldHVybmVkIGRhdGEgKi8KKwljYXNlIDM6CisJCV9kZWJ1ZygiZXh0cmFjdCBkYXRhIik7CisJCWlmIChjYWxsLT5jb3VudCA+IDApIHsKIAkJCXBhZ2UgPSBjYWxsLT5yZXBseTM7CiAJCQlidWZmZXIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCQltZW1zZXQoYnVmZmVyICsgUEFHRV9TSVpFIC0gY2FsbC0+Y291bnQsIDAsCi0JCQkgICAgICAgY2FsbC0+Y291bnQpOworCQkJcmV0ID0gYWZzX2V4dHJhY3RfZGF0YShjYWxsLCBza2IsIGxhc3QsIGJ1ZmZlciwKKwkJCQkJICAgICAgIGNhbGwtPmNvdW50KTsKIAkJCWt1bm1hcF9hdG9taWMoYnVmZmVyLCBLTV9VU0VSMCk7Ci0JCX0KLQotCQkvKiBleHRyYWN0IHRoZSByZXR1cm5lZCBkYXRhICovCi0JY2FzZSAyOgotCQlfZGVidWcoImV4dHJhY3QgZGF0YSIpOwotCQlwYWdlID0gY2FsbC0+cmVwbHkzOwotCQlidWZmZXIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCXJldCA9IGFmc19leHRyYWN0X2RhdGEoY2FsbCwgc2tiLCBsYXN0LCBidWZmZXIsIGNhbGwtPmNvdW50KTsKLQkJa3VubWFwX2F0b21pYyhidWZmZXIsIEtNX1VTRVIwKTsKLQkJc3dpdGNoIChyZXQpIHsKLQkJY2FzZSAwOgkJYnJlYWs7Ci0JCWNhc2UgLUVBR0FJTjoJcmV0dXJuIDA7Ci0JCWRlZmF1bHQ6CXJldHVybiByZXQ7CisJCQlzd2l0Y2ggKHJldCkgeworCQkJY2FzZSAwOgkJYnJlYWs7CisJCQljYXNlIC1FQUdBSU46CXJldHVybiAwOworCQkJZGVmYXVsdDoJcmV0dXJuIHJldDsKKwkJCX0KIAkJfQogCiAJCWNhbGwtPm9mZnNldCA9IDA7CiAJCWNhbGwtPnVubWFyc2hhbGwrKzsKIAogCQkvKiBleHRyYWN0IHRoZSBtZXRhZGF0YSAqLwotCWNhc2UgMzoKKwljYXNlIDQ6CiAJCXJldCA9IGFmc19leHRyYWN0X2RhdGEoY2FsbCwgc2tiLCBsYXN0LCBjYWxsLT5idWZmZXIsCiAJCQkJICAgICAgICgyMSArIDMgKyA2KSAqIDQpOwogCQlzd2l0Y2ggKHJldCkgewpAQCAtMzAwLDcgKzM4OCw3IEBACiAJCX0KIAogCQlicCA9IGNhbGwtPmJ1ZmZlcjsKLQkJeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsICZ2bm9kZS0+c3RhdHVzLCB2bm9kZSk7CisJCXhkcl9kZWNvZGVfQUZTRmV0Y2hTdGF0dXMoJmJwLCAmdm5vZGUtPnN0YXR1cywgdm5vZGUsIE5VTEwpOwogCQl4ZHJfZGVjb2RlX0FGU0NhbGxCYWNrKCZicCwgdm5vZGUpOwogCQlpZiAoY2FsbC0+cmVwbHkyKQogCQkJeGRyX2RlY29kZV9BRlNWb2xTeW5jKCZicCwgY2FsbC0+cmVwbHkyKTsKQEAgLTMwOCw3ICszOTYsNyBAQAogCQljYWxsLT5vZmZzZXQgPSAwOwogCQljYWxsLT51bm1hcnNoYWxsKys7CiAKLQljYXNlIDQ6CisJY2FzZSA1OgogCQlfZGVidWcoInRyYWlsZXIiKTsKIAkJaWYgKHNrYi0+bGVuICE9IDApCiAJCQlyZXR1cm4gLUVCQURNU0c7CkBAIC0zMTgsNiArNDA2LDE0IEBACiAJaWYgKCFsYXN0KQogCQlyZXR1cm4gMDsKIAorCWlmIChjYWxsLT5jb3VudCA8IFBBR0VfU0laRSkgeworCQlfZGVidWcoImNsZWFyIik7CisJCXBhZ2UgPSBjYWxsLT5yZXBseTM7CisJCWJ1ZmZlciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJbWVtc2V0KGJ1ZmZlciArIGNhbGwtPmNvdW50LCAwLCBQQUdFX1NJWkUgLSBjYWxsLT5jb3VudCk7CisJCWt1bm1hcF9hdG9taWMoYnVmZmVyLCBLTV9VU0VSMCk7CisJfQorCiAJX2xlYXZlKCIgPSAwIFtkb25lXSIpOwogCXJldHVybiAwOwogfQpAQCAtMzMyLDYgKzQyOCw1NiBAQAogCS5kZXN0cnVjdG9yCT0gYWZzX2ZsYXRfY2FsbF9kZXN0cnVjdG9yLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhZnNfY2FsbF90eXBlIGFmc19SWEZTRmV0Y2hEYXRhNjQgPSB7CisJLm5hbWUJCT0gIkZTLkZldGNoRGF0YTY0IiwKKwkuZGVsaXZlcgk9IGFmc19kZWxpdmVyX2ZzX2ZldGNoX2RhdGEsCisJLmFib3J0X3RvX2Vycm9yCT0gYWZzX2Fib3J0X3RvX2Vycm9yLAorCS5kZXN0cnVjdG9yCT0gYWZzX2ZsYXRfY2FsbF9kZXN0cnVjdG9yLAorfTsKKworLyoKKyAqIGZldGNoIGRhdGEgZnJvbSBhIHZlcnkgbGFyZ2UgZmlsZQorICovCitzdGF0aWMgaW50IGFmc19mc19mZXRjaF9kYXRhNjQoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwKKwkJCSAgICAgICBzdHJ1Y3Qga2V5ICprZXksCisJCQkgICAgICAgc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCisJCQkgICAgICAgb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoLAorCQkJICAgICAgIHN0cnVjdCBwYWdlICpidWZmZXIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGFmc193YWl0X21vZGUgKndhaXRfbW9kZSkKK3sKKwlzdHJ1Y3QgYWZzX2NhbGwgKmNhbGw7CisJX19iZTMyICpicDsKKworCV9lbnRlcigiIik7CisKKwlBU1NFUlRDTVAobGVuZ3RoLCA8LCBVTE9OR19NQVgpOworCisJY2FsbCA9IGFmc19hbGxvY19mbGF0X2NhbGwoJmFmc19SWEZTRmV0Y2hEYXRhNjQsIDMyLCAoMjEgKyAzICsgNikgKiA0KTsKKwlpZiAoIWNhbGwpCisJCXJldHVybiAtRU5PTUVNOworCisJY2FsbC0+a2V5ID0ga2V5OworCWNhbGwtPnJlcGx5ID0gdm5vZGU7CisJY2FsbC0+cmVwbHkyID0gTlVMTDsgLyogdm9sc3luYyAqLworCWNhbGwtPnJlcGx5MyA9IGJ1ZmZlcjsKKwljYWxsLT5zZXJ2aWNlX2lkID0gRlNfU0VSVklDRTsKKwljYWxsLT5wb3J0ID0gaHRvbnMoQUZTX0ZTX1BPUlQpOworCWNhbGwtPm9wZXJhdGlvbl9JRCA9IEZTRkVUQ0hEQVRBNjQ7CisKKwkvKiBtYXJzaGFsbCB0aGUgcGFyYW1ldGVycyAqLworCWJwID0gY2FsbC0+cmVxdWVzdDsKKwlicFswXSA9IGh0b25sKEZTRkVUQ0hEQVRBNjQpOworCWJwWzFdID0gaHRvbmwodm5vZGUtPmZpZC52aWQpOworCWJwWzJdID0gaHRvbmwodm5vZGUtPmZpZC52bm9kZSk7CisJYnBbM10gPSBodG9ubCh2bm9kZS0+ZmlkLnVuaXF1ZSk7CisJYnBbNF0gPSBodG9ubCh1cHBlcl8zMl9iaXRzKG9mZnNldCkpOworCWJwWzVdID0gaHRvbmwoKHUzMikgb2Zmc2V0KTsKKwlicFs2XSA9IDA7CisJYnBbN10gPSBodG9ubCgodTMyKSBsZW5ndGgpOworCisJcmV0dXJuIGFmc19tYWtlX2NhbGwoJnNlcnZlci0+YWRkciwgY2FsbCwgR0ZQX05PRlMsIHdhaXRfbW9kZSk7Cit9CisKIC8qCiAgKiBmZXRjaCBkYXRhIGZyb20gYSBmaWxlCiAgKi8KQEAgLTM0NSw2ICs0OTEsMTAgQEAKIAlzdHJ1Y3QgYWZzX2NhbGwgKmNhbGw7CiAJX19iZTMyICpicDsKIAorCWlmICh1cHBlcl8zMl9iaXRzKG9mZnNldCkgfHwgdXBwZXJfMzJfYml0cyhvZmZzZXQgKyBsZW5ndGgpKQorCQlyZXR1cm4gYWZzX2ZzX2ZldGNoX2RhdGE2NChzZXJ2ZXIsIGtleSwgdm5vZGUsIG9mZnNldCwgbGVuZ3RoLAorCQkJCQkgICBidWZmZXIsIHdhaXRfbW9kZSk7CisKIAlfZW50ZXIoIiIpOwogCiAJY2FsbCA9IGFmc19hbGxvY19mbGF0X2NhbGwoJmFmc19SWEZTRmV0Y2hEYXRhLCAyNCwgKDIxICsgMyArIDYpICogNCk7CkBAIC0zNTcsNiArNTA3LDcgQEAKIAljYWxsLT5yZXBseTMgPSBidWZmZXI7CiAJY2FsbC0+c2VydmljZV9pZCA9IEZTX1NFUlZJQ0U7CiAJY2FsbC0+cG9ydCA9IGh0b25zKEFGU19GU19QT1JUKTsKKwljYWxsLT5vcGVyYXRpb25fSUQgPSBGU0ZFVENIREFUQTsKIAogCS8qIG1hcnNoYWxsIHRoZSBwYXJhbWV0ZXJzICovCiAJYnAgPSBjYWxsLT5yZXF1ZXN0OwpAQCAtNDc2LDggKzYyNyw4IEBACiAJLyogdW5tYXJzaGFsbCB0aGUgcmVwbHkgb25jZSB3ZSd2ZSByZWNlaXZlZCBhbGwgb2YgaXQgKi8KIAlicCA9IGNhbGwtPmJ1ZmZlcjsKIAl4ZHJfZGVjb2RlX0FGU0ZpZCgmYnAsIGNhbGwtPnJlcGx5Mik7Ci0JeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsIGNhbGwtPnJlcGx5MywgTlVMTCk7Ci0JeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsICZ2bm9kZS0+c3RhdHVzLCB2bm9kZSk7CisJeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsIGNhbGwtPnJlcGx5MywgTlVMTCwgTlVMTCk7CisJeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsICZ2bm9kZS0+c3RhdHVzLCB2bm9kZSwgTlVMTCk7CiAJeGRyX2RlY29kZV9BRlNDYWxsQmFja19yYXcoJmJwLCBjYWxsLT5yZXBseTQpOwogCS8qIHhkcl9kZWNvZGVfQUZTVm9sU3luYygmYnAsIGNhbGwtPnJlcGx5WCk7ICovCiAKQEAgLTU3NCw3ICs3MjUsNyBAQAogCiAJLyogdW5tYXJzaGFsbCB0aGUgcmVwbHkgb25jZSB3ZSd2ZSByZWNlaXZlZCBhbGwgb2YgaXQgKi8KIAlicCA9IGNhbGwtPmJ1ZmZlcjsKLQl4ZHJfZGVjb2RlX0FGU0ZldGNoU3RhdHVzKCZicCwgJnZub2RlLT5zdGF0dXMsIHZub2RlKTsKKwl4ZHJfZGVjb2RlX0FGU0ZldGNoU3RhdHVzKCZicCwgJnZub2RlLT5zdGF0dXMsIHZub2RlLCBOVUxMKTsKIAkvKiB4ZHJfZGVjb2RlX0FGU1ZvbFN5bmMoJmJwLCBjYWxsLT5yZXBseVgpOyAqLwogCiAJX2xlYXZlKCIgPSAwIFtkb25lXSIpOwpAQCAtNjU3LDggKzgwOCw4IEBACiAKIAkvKiB1bm1hcnNoYWxsIHRoZSByZXBseSBvbmNlIHdlJ3ZlIHJlY2VpdmVkIGFsbCBvZiBpdCAqLwogCWJwID0gY2FsbC0+YnVmZmVyOwotCXhkcl9kZWNvZGVfQUZTRmV0Y2hTdGF0dXMoJmJwLCAmdm5vZGUtPnN0YXR1cywgdm5vZGUpOwotCXhkcl9kZWNvZGVfQUZTRmV0Y2hTdGF0dXMoJmJwLCAmZHZub2RlLT5zdGF0dXMsIGR2bm9kZSk7CisJeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsICZ2bm9kZS0+c3RhdHVzLCB2bm9kZSwgTlVMTCk7CisJeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsICZkdm5vZGUtPnN0YXR1cywgZHZub2RlLCBOVUxMKTsKIAkvKiB4ZHJfZGVjb2RlX0FGU1ZvbFN5bmMoJmJwLCBjYWxsLT5yZXBseVgpOyAqLwogCiAJX2xlYXZlKCIgPSAwIFtkb25lXSIpOwpAQCAtNzQ2LDggKzg5Nyw4IEBACiAJLyogdW5tYXJzaGFsbCB0aGUgcmVwbHkgb25jZSB3ZSd2ZSByZWNlaXZlZCBhbGwgb2YgaXQgKi8KIAlicCA9IGNhbGwtPmJ1ZmZlcjsKIAl4ZHJfZGVjb2RlX0FGU0ZpZCgmYnAsIGNhbGwtPnJlcGx5Mik7Ci0JeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsIGNhbGwtPnJlcGx5MywgTlVMTCk7Ci0JeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsICZ2bm9kZS0+c3RhdHVzLCB2bm9kZSk7CisJeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsIGNhbGwtPnJlcGx5MywgTlVMTCwgTlVMTCk7CisJeGRyX2RlY29kZV9BRlNGZXRjaFN0YXR1cygmYnAsICZ2bm9kZS0+c3RhdHVzLCB2bm9kZSwgTlVMTCk7CiAJLyogeGRyX2RlY29kZV9BRlNWb2xTeW5jKCZicCwgY2FsbC0+cmVwbHlYKTsgKi8KIAogCV9sZWF2ZSgiID0gMCBbZG9uZV0iKTsKQEAgLTg1Miw5ICsxMDAzLDEwIEBACiAKIAkvKiB1bm1hcnNoYWxsIHRoZSByZXBseSBvbmNlIHdlJ3ZlIHJlY2VpdmVkIGFsbCBvZiBpdCAqLwogCWJwID0gY2FsbC0+YnVmZmVyOwotCXhkcl9kZWNvZGVfQUZTRmV0Y2hTdGF0dXMoJmJwLCAmb3JpZ19kdm5vZGUtPnN0YXR1cywgb3JpZ19kdm5vZGUpOworCXhkcl9kZWNvZGVfQUZTRmV0Y2hTdGF0dXMoJmJwLCAmb3JpZ19kdm5vZGUtPnN0YXR1cywgb3JpZ19kdm5vZGUsIE5VTEwpOwogCWlmIChuZXdfZHZub2RlICE9IG9yaWdfZHZub2RlKQotCQl4ZHJfZGVjb2RlX0FGU0ZldGNoU3RhdHVzKCZicCwgJm5ld19kdm5vZGUtPnN0YXR1cywgbmV3X2R2bm9kZSk7CisJCXhkcl9kZWNvZGVfQUZTRmV0Y2hTdGF0dXMoJmJwLCAmbmV3X2R2bm9kZS0+c3RhdHVzLCBuZXdfZHZub2RlLAorCQkJCQkgIE5VTEwpOwogCS8qIHhkcl9kZWNvZGVfQUZTVm9sU3luYygmYnAsIGNhbGwtPnJlcGx5WCk7ICovCiAKIAlfbGVhdmUoIiA9IDAgW2RvbmVdIik7CkBAIC05MzYsMyArMTA4OCw2NjMgQEAKIAogCXJldHVybiBhZnNfbWFrZV9jYWxsKCZzZXJ2ZXItPmFkZHIsIGNhbGwsIEdGUF9OT0ZTLCB3YWl0X21vZGUpOwogfQorCisvKgorICogZGVsaXZlciByZXBseSBkYXRhIHRvIGFuIEZTLlN0b3JlRGF0YQorICovCitzdGF0aWMgaW50IGFmc19kZWxpdmVyX2ZzX3N0b3JlX2RhdGEoc3RydWN0IGFmc19jYWxsICpjYWxsLAorCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBsYXN0KQoreworCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gY2FsbC0+cmVwbHk7CisJY29uc3QgX19iZTMyICpicDsKKworCV9lbnRlcigiLCwldSIsIGxhc3QpOworCisJYWZzX3RyYW5zZmVyX3JlcGx5KGNhbGwsIHNrYik7CisJaWYgKCFsYXN0KSB7CisJCV9sZWF2ZSgiID0gMCBbbW9yZV0iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNhbGwtPnJlcGx5X3NpemUgIT0gY2FsbC0+cmVwbHlfbWF4KSB7CisJCV9sZWF2ZSgiID0gLUVCQURNU0cgWyV1ICE9ICV1XSIsCisJCSAgICAgICBjYWxsLT5yZXBseV9zaXplLCBjYWxsLT5yZXBseV9tYXgpOworCQlyZXR1cm4gLUVCQURNU0c7CisJfQorCisJLyogdW5tYXJzaGFsbCB0aGUgcmVwbHkgb25jZSB3ZSd2ZSByZWNlaXZlZCBhbGwgb2YgaXQgKi8KKwlicCA9IGNhbGwtPmJ1ZmZlcjsKKwl4ZHJfZGVjb2RlX0FGU0ZldGNoU3RhdHVzKCZicCwgJnZub2RlLT5zdGF0dXMsIHZub2RlLAorCQkJCSAgJmNhbGwtPnN0b3JlX3ZlcnNpb24pOworCS8qIHhkcl9kZWNvZGVfQUZTVm9sU3luYygmYnAsIGNhbGwtPnJlcGx5WCk7ICovCisKKwlhZnNfcGFnZXNfd3JpdHRlbl9iYWNrKHZub2RlLCBjYWxsKTsKKworCV9sZWF2ZSgiID0gMCBbZG9uZV0iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZTLlN0b3JlRGF0YSBvcGVyYXRpb24gdHlwZQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmc19jYWxsX3R5cGUgYWZzX1JYRlNTdG9yZURhdGEgPSB7CisJLm5hbWUJCT0gIkZTLlN0b3JlRGF0YSIsCisJLmRlbGl2ZXIJPSBhZnNfZGVsaXZlcl9mc19zdG9yZV9kYXRhLAorCS5hYm9ydF90b19lcnJvcgk9IGFmc19hYm9ydF90b19lcnJvciwKKwkuZGVzdHJ1Y3Rvcgk9IGFmc19mbGF0X2NhbGxfZGVzdHJ1Y3RvciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX2NhbGxfdHlwZSBhZnNfUlhGU1N0b3JlRGF0YTY0ID0geworCS5uYW1lCQk9ICJGUy5TdG9yZURhdGE2NCIsCisJLmRlbGl2ZXIJPSBhZnNfZGVsaXZlcl9mc19zdG9yZV9kYXRhLAorCS5hYm9ydF90b19lcnJvcgk9IGFmc19hYm9ydF90b19lcnJvciwKKwkuZGVzdHJ1Y3Rvcgk9IGFmc19mbGF0X2NhbGxfZGVzdHJ1Y3RvciwKK307CisKKy8qCisgKiBzdG9yZSBhIHNldCBvZiBwYWdlcyB0byBhIHZlcnkgbGFyZ2UgZmlsZQorICovCitzdGF0aWMgaW50IGFmc19mc19zdG9yZV9kYXRhNjQoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwKKwkJCSAgICAgICBzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqd2IsCisJCQkgICAgICAgcGdvZmZfdCBmaXJzdCwgcGdvZmZfdCBsYXN0LAorCQkJICAgICAgIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgdG8sCisJCQkgICAgICAgbG9mZl90IHNpemUsIGxvZmZfdCBwb3MsIGxvZmZfdCBpX3NpemUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGFmc193YWl0X21vZGUgKndhaXRfbW9kZSkKK3sKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IHdiLT52bm9kZTsKKwlzdHJ1Y3QgYWZzX2NhbGwgKmNhbGw7CisJX19iZTMyICpicDsKKworCV9lbnRlcigiLCV4LHsleDoldX0sLCIsCisJICAgICAgIGtleV9zZXJpYWwod2ItPmtleSksIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlKTsKKworCWNhbGwgPSBhZnNfYWxsb2NfZmxhdF9jYWxsKCZhZnNfUlhGU1N0b3JlRGF0YTY0LAorCQkJCSAgICg0ICsgNiArIDMgKiAyKSAqIDQsCisJCQkJICAgKDIxICsgNikgKiA0KTsKKwlpZiAoIWNhbGwpCisJCXJldHVybiAtRU5PTUVNOworCisJY2FsbC0+d2IgPSB3YjsKKwljYWxsLT5rZXkgPSB3Yi0+a2V5OworCWNhbGwtPnJlcGx5ID0gdm5vZGU7CisJY2FsbC0+c2VydmljZV9pZCA9IEZTX1NFUlZJQ0U7CisJY2FsbC0+cG9ydCA9IGh0b25zKEFGU19GU19QT1JUKTsKKwljYWxsLT5tYXBwaW5nID0gdm5vZGUtPnZmc19pbm9kZS5pX21hcHBpbmc7CisJY2FsbC0+Zmlyc3QgPSBmaXJzdDsKKwljYWxsLT5sYXN0ID0gbGFzdDsKKwljYWxsLT5maXJzdF9vZmZzZXQgPSBvZmZzZXQ7CisJY2FsbC0+bGFzdF90byA9IHRvOworCWNhbGwtPnNlbmRfcGFnZXMgPSB0cnVlOworCWNhbGwtPnN0b3JlX3ZlcnNpb24gPSB2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbiArIDE7CisKKwkvKiBtYXJzaGFsbCB0aGUgcGFyYW1ldGVycyAqLworCWJwID0gY2FsbC0+cmVxdWVzdDsKKwkqYnArKyA9IGh0b25sKEZTU1RPUkVEQVRBNjQpOworCSpicCsrID0gaHRvbmwodm5vZGUtPmZpZC52aWQpOworCSpicCsrID0gaHRvbmwodm5vZGUtPmZpZC52bm9kZSk7CisJKmJwKysgPSBodG9ubCh2bm9kZS0+ZmlkLnVuaXF1ZSk7CisKKwkqYnArKyA9IDA7IC8qIG1hc2sgKi8KKwkqYnArKyA9IDA7IC8qIG10aW1lICovCisJKmJwKysgPSAwOyAvKiBvd25lciAqLworCSpicCsrID0gMDsgLyogZ3JvdXAgKi8KKwkqYnArKyA9IDA7IC8qIHVuaXggbW9kZSAqLworCSpicCsrID0gMDsgLyogc2VnbWVudCBzaXplICovCisKKwkqYnArKyA9IGh0b25sKHBvcyA+PiAzMik7CisJKmJwKysgPSBodG9ubCgodTMyKSBwb3MpOworCSpicCsrID0gaHRvbmwoc2l6ZSA+PiAzMik7CisJKmJwKysgPSBodG9ubCgodTMyKSBzaXplKTsKKwkqYnArKyA9IGh0b25sKGlfc2l6ZSA+PiAzMik7CisJKmJwKysgPSBodG9ubCgodTMyKSBpX3NpemUpOworCisJcmV0dXJuIGFmc19tYWtlX2NhbGwoJnNlcnZlci0+YWRkciwgY2FsbCwgR0ZQX05PRlMsIHdhaXRfbW9kZSk7Cit9CisKKy8qCisgKiBzdG9yZSBhIHNldCBvZiBwYWdlcworICovCitpbnQgYWZzX2ZzX3N0b3JlX2RhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGFmc193cml0ZWJhY2sgKndiLAorCQkgICAgICBwZ29mZl90IGZpcnN0LCBwZ29mZl90IGxhc3QsCisJCSAgICAgIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgdG8sCisJCSAgICAgIGNvbnN0IHN0cnVjdCBhZnNfd2FpdF9tb2RlICp3YWl0X21vZGUpCit7CisJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSB3Yi0+dm5vZGU7CisJc3RydWN0IGFmc19jYWxsICpjYWxsOworCWxvZmZfdCBzaXplLCBwb3MsIGlfc2l6ZTsKKwlfX2JlMzIgKmJwOworCisJX2VudGVyKCIsJXgseyV4OiV1fSwsIiwKKwkgICAgICAga2V5X3NlcmlhbCh3Yi0+a2V5KSwgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUpOworCisJc2l6ZSA9IHRvIC0gb2Zmc2V0OworCWlmIChmaXJzdCAhPSBsYXN0KQorCQlzaXplICs9IChsb2ZmX3QpKGxhc3QgLSBmaXJzdCkgPDwgUEFHRV9TSElGVDsKKwlwb3MgPSAobG9mZl90KWZpcnN0IDw8IFBBR0VfU0hJRlQ7CisJcG9zICs9IG9mZnNldDsKKworCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKCZ2bm9kZS0+dmZzX2lub2RlKTsKKwlpZiAocG9zICsgc2l6ZSA+IGlfc2l6ZSkKKwkJaV9zaXplID0gc2l6ZSArIHBvczsKKworCV9kZWJ1Zygic2l6ZSAlbGx4LCBhdCAlbGx4LCBpX3NpemUgJWxseCIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNpemUsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBvcywKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaV9zaXplKTsKKworCWlmIChwb3MgPj4gMzIgfHwgaV9zaXplID4+IDMyIHx8IHNpemUgPj4gMzIgfHwgKHBvcyArIHNpemUpID4+IDMyKQorCQlyZXR1cm4gYWZzX2ZzX3N0b3JlX2RhdGE2NChzZXJ2ZXIsIHdiLCBmaXJzdCwgbGFzdCwgb2Zmc2V0LCB0bywKKwkJCQkJICAgc2l6ZSwgcG9zLCBpX3NpemUsIHdhaXRfbW9kZSk7CisKKwljYWxsID0gYWZzX2FsbG9jX2ZsYXRfY2FsbCgmYWZzX1JYRlNTdG9yZURhdGEsCisJCQkJICAgKDQgKyA2ICsgMykgKiA0LAorCQkJCSAgICgyMSArIDYpICogNCk7CisJaWYgKCFjYWxsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNhbGwtPndiID0gd2I7CisJY2FsbC0+a2V5ID0gd2ItPmtleTsKKwljYWxsLT5yZXBseSA9IHZub2RlOworCWNhbGwtPnNlcnZpY2VfaWQgPSBGU19TRVJWSUNFOworCWNhbGwtPnBvcnQgPSBodG9ucyhBRlNfRlNfUE9SVCk7CisJY2FsbC0+bWFwcGluZyA9IHZub2RlLT52ZnNfaW5vZGUuaV9tYXBwaW5nOworCWNhbGwtPmZpcnN0ID0gZmlyc3Q7CisJY2FsbC0+bGFzdCA9IGxhc3Q7CisJY2FsbC0+Zmlyc3Rfb2Zmc2V0ID0gb2Zmc2V0OworCWNhbGwtPmxhc3RfdG8gPSB0bzsKKwljYWxsLT5zZW5kX3BhZ2VzID0gdHJ1ZTsKKwljYWxsLT5zdG9yZV92ZXJzaW9uID0gdm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb24gKyAxOworCisJLyogbWFyc2hhbGwgdGhlIHBhcmFtZXRlcnMgKi8KKwlicCA9IGNhbGwtPnJlcXVlc3Q7CisJKmJwKysgPSBodG9ubChGU1NUT1JFREFUQSk7CisJKmJwKysgPSBodG9ubCh2bm9kZS0+ZmlkLnZpZCk7CisJKmJwKysgPSBodG9ubCh2bm9kZS0+ZmlkLnZub2RlKTsKKwkqYnArKyA9IGh0b25sKHZub2RlLT5maWQudW5pcXVlKTsKKworCSpicCsrID0gMDsgLyogbWFzayAqLworCSpicCsrID0gMDsgLyogbXRpbWUgKi8KKwkqYnArKyA9IDA7IC8qIG93bmVyICovCisJKmJwKysgPSAwOyAvKiBncm91cCAqLworCSpicCsrID0gMDsgLyogdW5peCBtb2RlICovCisJKmJwKysgPSAwOyAvKiBzZWdtZW50IHNpemUgKi8KKworCSpicCsrID0gaHRvbmwocG9zKTsKKwkqYnArKyA9IGh0b25sKHNpemUpOworCSpicCsrID0gaHRvbmwoaV9zaXplKTsKKworCXJldHVybiBhZnNfbWFrZV9jYWxsKCZzZXJ2ZXItPmFkZHIsIGNhbGwsIEdGUF9OT0ZTLCB3YWl0X21vZGUpOworfQorCisvKgorICogZGVsaXZlciByZXBseSBkYXRhIHRvIGFuIEZTLlN0b3JlU3RhdHVzCisgKi8KK3N0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfZnNfc3RvcmVfc3RhdHVzKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBsYXN0KQoreworCWFmc19kYXRhdmVyc2lvbl90ICpzdG9yZV92ZXJzaW9uOworCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gY2FsbC0+cmVwbHk7CisJY29uc3QgX19iZTMyICpicDsKKworCV9lbnRlcigiLCwldSIsIGxhc3QpOworCisJYWZzX3RyYW5zZmVyX3JlcGx5KGNhbGwsIHNrYik7CisJaWYgKCFsYXN0KSB7CisJCV9sZWF2ZSgiID0gMCBbbW9yZV0iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNhbGwtPnJlcGx5X3NpemUgIT0gY2FsbC0+cmVwbHlfbWF4KSB7CisJCV9sZWF2ZSgiID0gLUVCQURNU0cgWyV1ICE9ICV1XSIsCisJCSAgICAgICBjYWxsLT5yZXBseV9zaXplLCBjYWxsLT5yZXBseV9tYXgpOworCQlyZXR1cm4gLUVCQURNU0c7CisJfQorCisJLyogdW5tYXJzaGFsbCB0aGUgcmVwbHkgb25jZSB3ZSd2ZSByZWNlaXZlZCBhbGwgb2YgaXQgKi8KKwlzdG9yZV92ZXJzaW9uID0gTlVMTDsKKwlpZiAoY2FsbC0+b3BlcmF0aW9uX0lEID09IEZTU1RPUkVEQVRBKQorCQlzdG9yZV92ZXJzaW9uID0gJmNhbGwtPnN0b3JlX3ZlcnNpb247CisKKwlicCA9IGNhbGwtPmJ1ZmZlcjsKKwl4ZHJfZGVjb2RlX0FGU0ZldGNoU3RhdHVzKCZicCwgJnZub2RlLT5zdGF0dXMsIHZub2RlLCBzdG9yZV92ZXJzaW9uKTsKKwkvKiB4ZHJfZGVjb2RlX0FGU1ZvbFN5bmMoJmJwLCBjYWxsLT5yZXBseVgpOyAqLworCisJX2xlYXZlKCIgPSAwIFtkb25lXSIpOworCXJldHVybiAwOworfQorCisvKgorICogRlMuU3RvcmVTdGF0dXMgb3BlcmF0aW9uIHR5cGUKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhZnNfY2FsbF90eXBlIGFmc19SWEZTU3RvcmVTdGF0dXMgPSB7CisJLm5hbWUJCT0gIkZTLlN0b3JlU3RhdHVzIiwKKwkuZGVsaXZlcgk9IGFmc19kZWxpdmVyX2ZzX3N0b3JlX3N0YXR1cywKKwkuYWJvcnRfdG9fZXJyb3IJPSBhZnNfYWJvcnRfdG9fZXJyb3IsCisJLmRlc3RydWN0b3IJPSBhZnNfZmxhdF9jYWxsX2Rlc3RydWN0b3IsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmc19jYWxsX3R5cGUgYWZzX1JYRlNTdG9yZURhdGFfYXNfU3RhdHVzID0geworCS5uYW1lCQk9ICJGUy5TdG9yZURhdGEiLAorCS5kZWxpdmVyCT0gYWZzX2RlbGl2ZXJfZnNfc3RvcmVfc3RhdHVzLAorCS5hYm9ydF90b19lcnJvcgk9IGFmc19hYm9ydF90b19lcnJvciwKKwkuZGVzdHJ1Y3Rvcgk9IGFmc19mbGF0X2NhbGxfZGVzdHJ1Y3RvciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWZzX2NhbGxfdHlwZSBhZnNfUlhGU1N0b3JlRGF0YTY0X2FzX1N0YXR1cyA9IHsKKwkubmFtZQkJPSAiRlMuU3RvcmVEYXRhNjQiLAorCS5kZWxpdmVyCT0gYWZzX2RlbGl2ZXJfZnNfc3RvcmVfc3RhdHVzLAorCS5hYm9ydF90b19lcnJvcgk9IGFmc19hYm9ydF90b19lcnJvciwKKwkuZGVzdHJ1Y3Rvcgk9IGFmc19mbGF0X2NhbGxfZGVzdHJ1Y3RvciwKK307CisKKy8qCisgKiBzZXQgdGhlIGF0dHJpYnV0ZXMgb24gYSB2ZXJ5IGxhcmdlIGZpbGUsIHVzaW5nIEZTLlN0b3JlRGF0YSByYXRoZXIgdGhhbgorICogRlMuU3RvcmVTdGF0dXMgc28gYXMgdG8gYWx0ZXIgdGhlIGZpbGUgc2l6ZSBhbHNvCisgKi8KK3N0YXRpYyBpbnQgYWZzX2ZzX3NldGF0dHJfc2l6ZTY0KHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSwKKwkJCQkgc3RydWN0IGFmc192bm9kZSAqdm5vZGUsIHN0cnVjdCBpYXR0ciAqYXR0ciwKKwkJCQkgY29uc3Qgc3RydWN0IGFmc193YWl0X21vZGUgKndhaXRfbW9kZSkKK3sKKwlzdHJ1Y3QgYWZzX2NhbGwgKmNhbGw7CisJX19iZTMyICpicDsKKworCV9lbnRlcigiLCV4LHsleDoldX0sLCIsCisJICAgICAgIGtleV9zZXJpYWwoa2V5KSwgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUpOworCisJQVNTRVJUKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKTsKKworCWNhbGwgPSBhZnNfYWxsb2NfZmxhdF9jYWxsKCZhZnNfUlhGU1N0b3JlRGF0YTY0X2FzX1N0YXR1cywKKwkJCQkgICAoNCArIDYgKyAzICogMikgKiA0LAorCQkJCSAgICgyMSArIDYpICogNCk7CisJaWYgKCFjYWxsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNhbGwtPmtleSA9IGtleTsKKwljYWxsLT5yZXBseSA9IHZub2RlOworCWNhbGwtPnNlcnZpY2VfaWQgPSBGU19TRVJWSUNFOworCWNhbGwtPnBvcnQgPSBodG9ucyhBRlNfRlNfUE9SVCk7CisJY2FsbC0+c3RvcmVfdmVyc2lvbiA9IHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uICsgMTsKKwljYWxsLT5vcGVyYXRpb25fSUQgPSBGU1NUT1JFREFUQTsKKworCS8qIG1hcnNoYWxsIHRoZSBwYXJhbWV0ZXJzICovCisJYnAgPSBjYWxsLT5yZXF1ZXN0OworCSpicCsrID0gaHRvbmwoRlNTVE9SRURBVEE2NCk7CisJKmJwKysgPSBodG9ubCh2bm9kZS0+ZmlkLnZpZCk7CisJKmJwKysgPSBodG9ubCh2bm9kZS0+ZmlkLnZub2RlKTsKKwkqYnArKyA9IGh0b25sKHZub2RlLT5maWQudW5pcXVlKTsKKworCXhkcl9lbmNvZGVfQUZTX1N0b3JlU3RhdHVzKCZicCwgYXR0cik7CisKKwkqYnArKyA9IDA7CQkJCS8qIHBvc2l0aW9uIG9mIHN0YXJ0IG9mIHdyaXRlICovCisJKmJwKysgPSAwOworCSpicCsrID0gMDsJCQkJLyogc2l6ZSBvZiB3cml0ZSAqLworCSpicCsrID0gMDsKKwkqYnArKyA9IGh0b25sKGF0dHItPmlhX3NpemUgPj4gMzIpOwkvKiBuZXcgZmlsZSBsZW5ndGggKi8KKwkqYnArKyA9IGh0b25sKCh1MzIpIGF0dHItPmlhX3NpemUpOworCisJcmV0dXJuIGFmc19tYWtlX2NhbGwoJnNlcnZlci0+YWRkciwgY2FsbCwgR0ZQX05PRlMsIHdhaXRfbW9kZSk7Cit9CisKKy8qCisgKiBzZXQgdGhlIGF0dHJpYnV0ZXMgb24gYSBmaWxlLCB1c2luZyBGUy5TdG9yZURhdGEgcmF0aGVyIHRoYW4gRlMuU3RvcmVTdGF0dXMKKyAqIHNvIGFzIHRvIGFsdGVyIHRoZSBmaWxlIHNpemUgYWxzbworICovCitzdGF0aWMgaW50IGFmc19mc19zZXRhdHRyX3NpemUoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5LAorCQkJICAgICAgIHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGFmc193YWl0X21vZGUgKndhaXRfbW9kZSkKK3sKKwlzdHJ1Y3QgYWZzX2NhbGwgKmNhbGw7CisJX19iZTMyICpicDsKKworCV9lbnRlcigiLCV4LHsleDoldX0sLCIsCisJICAgICAgIGtleV9zZXJpYWwoa2V5KSwgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUpOworCisJQVNTRVJUKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKTsKKwlpZiAoYXR0ci0+aWFfc2l6ZSA+PiAzMikKKwkJcmV0dXJuIGFmc19mc19zZXRhdHRyX3NpemU2NChzZXJ2ZXIsIGtleSwgdm5vZGUsIGF0dHIsCisJCQkJCSAgICAgd2FpdF9tb2RlKTsKKworCWNhbGwgPSBhZnNfYWxsb2NfZmxhdF9jYWxsKCZhZnNfUlhGU1N0b3JlRGF0YV9hc19TdGF0dXMsCisJCQkJICAgKDQgKyA2ICsgMykgKiA0LAorCQkJCSAgICgyMSArIDYpICogNCk7CisJaWYgKCFjYWxsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNhbGwtPmtleSA9IGtleTsKKwljYWxsLT5yZXBseSA9IHZub2RlOworCWNhbGwtPnNlcnZpY2VfaWQgPSBGU19TRVJWSUNFOworCWNhbGwtPnBvcnQgPSBodG9ucyhBRlNfRlNfUE9SVCk7CisJY2FsbC0+c3RvcmVfdmVyc2lvbiA9IHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uICsgMTsKKwljYWxsLT5vcGVyYXRpb25fSUQgPSBGU1NUT1JFREFUQTsKKworCS8qIG1hcnNoYWxsIHRoZSBwYXJhbWV0ZXJzICovCisJYnAgPSBjYWxsLT5yZXF1ZXN0OworCSpicCsrID0gaHRvbmwoRlNTVE9SRURBVEEpOworCSpicCsrID0gaHRvbmwodm5vZGUtPmZpZC52aWQpOworCSpicCsrID0gaHRvbmwodm5vZGUtPmZpZC52bm9kZSk7CisJKmJwKysgPSBodG9ubCh2bm9kZS0+ZmlkLnVuaXF1ZSk7CisKKwl4ZHJfZW5jb2RlX0FGU19TdG9yZVN0YXR1cygmYnAsIGF0dHIpOworCisJKmJwKysgPSAwOwkJCQkvKiBwb3NpdGlvbiBvZiBzdGFydCBvZiB3cml0ZSAqLworCSpicCsrID0gMDsJCQkJLyogc2l6ZSBvZiB3cml0ZSAqLworCSpicCsrID0gaHRvbmwoYXR0ci0+aWFfc2l6ZSk7CQkvKiBuZXcgZmlsZSBsZW5ndGggKi8KKworCXJldHVybiBhZnNfbWFrZV9jYWxsKCZzZXJ2ZXItPmFkZHIsIGNhbGwsIEdGUF9OT0ZTLCB3YWl0X21vZGUpOworfQorCisvKgorICogc2V0IHRoZSBhdHRyaWJ1dGVzIG9uIGEgZmlsZSwgdXNpbmcgRlMuU3RvcmVEYXRhIGlmIHRoZXJlJ3MgYSBjaGFuZ2UgaW4gZmlsZQorICogc2l6ZSwgYW5kIEZTLlN0b3JlU3RhdHVzIG90aGVyd2lzZQorICovCitpbnQgYWZzX2ZzX3NldGF0dHIoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5LAorCQkgICBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IGlhdHRyICphdHRyLAorCQkgICBjb25zdCBzdHJ1Y3QgYWZzX3dhaXRfbW9kZSAqd2FpdF9tb2RlKQoreworCXN0cnVjdCBhZnNfY2FsbCAqY2FsbDsKKwlfX2JlMzIgKmJwOworCisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKQorCQlyZXR1cm4gYWZzX2ZzX3NldGF0dHJfc2l6ZShzZXJ2ZXIsIGtleSwgdm5vZGUsIGF0dHIsCisJCQkJCSAgIHdhaXRfbW9kZSk7CisKKwlfZW50ZXIoIiwleCx7JXg6JXV9LCwiLAorCSAgICAgICBrZXlfc2VyaWFsKGtleSksIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlKTsKKworCWNhbGwgPSBhZnNfYWxsb2NfZmxhdF9jYWxsKCZhZnNfUlhGU1N0b3JlU3RhdHVzLAorCQkJCSAgICg0ICsgNikgKiA0LAorCQkJCSAgICgyMSArIDYpICogNCk7CisJaWYgKCFjYWxsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNhbGwtPmtleSA9IGtleTsKKwljYWxsLT5yZXBseSA9IHZub2RlOworCWNhbGwtPnNlcnZpY2VfaWQgPSBGU19TRVJWSUNFOworCWNhbGwtPnBvcnQgPSBodG9ucyhBRlNfRlNfUE9SVCk7CisJY2FsbC0+b3BlcmF0aW9uX0lEID0gRlNTVE9SRVNUQVRVUzsKKworCS8qIG1hcnNoYWxsIHRoZSBwYXJhbWV0ZXJzICovCisJYnAgPSBjYWxsLT5yZXF1ZXN0OworCSpicCsrID0gaHRvbmwoRlNTVE9SRVNUQVRVUyk7CisJKmJwKysgPSBodG9ubCh2bm9kZS0+ZmlkLnZpZCk7CisJKmJwKysgPSBodG9ubCh2bm9kZS0+ZmlkLnZub2RlKTsKKwkqYnArKyA9IGh0b25sKHZub2RlLT5maWQudW5pcXVlKTsKKworCXhkcl9lbmNvZGVfQUZTX1N0b3JlU3RhdHVzKCZicCwgYXR0cik7CisKKwlyZXR1cm4gYWZzX21ha2VfY2FsbCgmc2VydmVyLT5hZGRyLCBjYWxsLCBHRlBfTk9GUywgd2FpdF9tb2RlKTsKK30KKworLyoKKyAqIGRlbGl2ZXIgcmVwbHkgZGF0YSB0byBhbiBGUy5HZXRWb2x1bWVTdGF0dXMKKyAqLworc3RhdGljIGludCBhZnNfZGVsaXZlcl9mc19nZXRfdm9sdW1lX3N0YXR1cyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGxhc3QpCit7CisJY29uc3QgX19iZTMyICpicDsKKwljaGFyICpwOworCWludCByZXQ7CisKKwlfZW50ZXIoInsldX0seyV1fSwlZCIsIGNhbGwtPnVubWFyc2hhbGwsIHNrYi0+bGVuLCBsYXN0KTsKKworCXN3aXRjaCAoY2FsbC0+dW5tYXJzaGFsbCkgeworCWNhc2UgMDoKKwkJY2FsbC0+b2Zmc2V0ID0gMDsKKwkJY2FsbC0+dW5tYXJzaGFsbCsrOworCisJCS8qIGV4dHJhY3QgdGhlIHJldHVybmVkIHN0YXR1cyByZWNvcmQgKi8KKwljYXNlIDE6CisJCV9kZWJ1ZygiZXh0cmFjdCBzdGF0dXMiKTsKKwkJcmV0ID0gYWZzX2V4dHJhY3RfZGF0YShjYWxsLCBza2IsIGxhc3QsIGNhbGwtPmJ1ZmZlciwKKwkJCQkgICAgICAgMTIgKiA0KTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAwOgkJYnJlYWs7CisJCWNhc2UgLUVBR0FJTjoJcmV0dXJuIDA7CisJCWRlZmF1bHQ6CXJldHVybiByZXQ7CisJCX0KKworCQlicCA9IGNhbGwtPmJ1ZmZlcjsKKwkJeGRyX2RlY29kZV9BRlNGZXRjaFZvbHVtZVN0YXR1cygmYnAsIGNhbGwtPnJlcGx5Mik7CisJCWNhbGwtPm9mZnNldCA9IDA7CisJCWNhbGwtPnVubWFyc2hhbGwrKzsKKworCQkvKiBleHRyYWN0IHRoZSB2b2x1bWUgbmFtZSBsZW5ndGggKi8KKwljYXNlIDI6CisJCXJldCA9IGFmc19leHRyYWN0X2RhdGEoY2FsbCwgc2tiLCBsYXN0LCAmY2FsbC0+dG1wLCA0KTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAwOgkJYnJlYWs7CisJCWNhc2UgLUVBR0FJTjoJcmV0dXJuIDA7CisJCWRlZmF1bHQ6CXJldHVybiByZXQ7CisJCX0KKworCQljYWxsLT5jb3VudCA9IG50b2hsKGNhbGwtPnRtcCk7CisJCV9kZWJ1Zygidm9sbmFtZSBsZW5ndGg6ICV1IiwgY2FsbC0+Y291bnQpOworCQlpZiAoY2FsbC0+Y291bnQgPj0gQUZTTkFNRU1BWCkKKwkJCXJldHVybiAtRUJBRE1TRzsKKwkJY2FsbC0+b2Zmc2V0ID0gMDsKKwkJY2FsbC0+dW5tYXJzaGFsbCsrOworCisJCS8qIGV4dHJhY3QgdGhlIHZvbHVtZSBuYW1lICovCisJY2FzZSAzOgorCQlfZGVidWcoImV4dHJhY3Qgdm9sbmFtZSIpOworCQlpZiAoY2FsbC0+Y291bnQgPiAwKSB7CisJCQlyZXQgPSBhZnNfZXh0cmFjdF9kYXRhKGNhbGwsIHNrYiwgbGFzdCwgY2FsbC0+cmVwbHkzLAorCQkJCQkgICAgICAgY2FsbC0+Y291bnQpOworCQkJc3dpdGNoIChyZXQpIHsKKwkJCWNhc2UgMDoJCWJyZWFrOworCQkJY2FzZSAtRUFHQUlOOglyZXR1cm4gMDsKKwkJCWRlZmF1bHQ6CXJldHVybiByZXQ7CisJCQl9CisJCX0KKworCQlwID0gY2FsbC0+cmVwbHkzOworCQlwW2NhbGwtPmNvdW50XSA9IDA7CisJCV9kZWJ1Zygidm9sbmFtZSAnJXMnIiwgcCk7CisKKwkJY2FsbC0+b2Zmc2V0ID0gMDsKKwkJY2FsbC0+dW5tYXJzaGFsbCsrOworCisJCS8qIGV4dHJhY3QgdGhlIHZvbHVtZSBuYW1lIHBhZGRpbmcgKi8KKwkJaWYgKChjYWxsLT5jb3VudCAmIDMpID09IDApIHsKKwkJCWNhbGwtPnVubWFyc2hhbGwrKzsKKwkJCWdvdG8gbm9fdm9sbmFtZV9wYWRkaW5nOworCQl9CisJCWNhbGwtPmNvdW50ID0gNCAtIChjYWxsLT5jb3VudCAmIDMpOworCisJY2FzZSA0OgorCQlyZXQgPSBhZnNfZXh0cmFjdF9kYXRhKGNhbGwsIHNrYiwgbGFzdCwgY2FsbC0+YnVmZmVyLAorCQkJCSAgICAgICBjYWxsLT5jb3VudCk7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgMDoJCWJyZWFrOworCQljYXNlIC1FQUdBSU46CXJldHVybiAwOworCQlkZWZhdWx0OglyZXR1cm4gcmV0OworCQl9CisKKwkJY2FsbC0+b2Zmc2V0ID0gMDsKKwkJY2FsbC0+dW5tYXJzaGFsbCsrOworCW5vX3ZvbG5hbWVfcGFkZGluZzoKKworCQkvKiBleHRyYWN0IHRoZSBvZmZsaW5lIG1lc3NhZ2UgbGVuZ3RoICovCisJY2FzZSA1OgorCQlyZXQgPSBhZnNfZXh0cmFjdF9kYXRhKGNhbGwsIHNrYiwgbGFzdCwgJmNhbGwtPnRtcCwgNCk7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgMDoJCWJyZWFrOworCQljYXNlIC1FQUdBSU46CXJldHVybiAwOworCQlkZWZhdWx0OglyZXR1cm4gcmV0OworCQl9CisKKwkJY2FsbC0+Y291bnQgPSBudG9obChjYWxsLT50bXApOworCQlfZGVidWcoIm9mZmxpbmUgbXNnIGxlbmd0aDogJXUiLCBjYWxsLT5jb3VudCk7CisJCWlmIChjYWxsLT5jb3VudCA+PSBBRlNOQU1FTUFYKQorCQkJcmV0dXJuIC1FQkFETVNHOworCQljYWxsLT5vZmZzZXQgPSAwOworCQljYWxsLT51bm1hcnNoYWxsKys7CisKKwkJLyogZXh0cmFjdCB0aGUgb2ZmbGluZSBtZXNzYWdlICovCisJY2FzZSA2OgorCQlfZGVidWcoImV4dHJhY3Qgb2ZmbGluZSIpOworCQlpZiAoY2FsbC0+Y291bnQgPiAwKSB7CisJCQlyZXQgPSBhZnNfZXh0cmFjdF9kYXRhKGNhbGwsIHNrYiwgbGFzdCwgY2FsbC0+cmVwbHkzLAorCQkJCQkgICAgICAgY2FsbC0+Y291bnQpOworCQkJc3dpdGNoIChyZXQpIHsKKwkJCWNhc2UgMDoJCWJyZWFrOworCQkJY2FzZSAtRUFHQUlOOglyZXR1cm4gMDsKKwkJCWRlZmF1bHQ6CXJldHVybiByZXQ7CisJCQl9CisJCX0KKworCQlwID0gY2FsbC0+cmVwbHkzOworCQlwW2NhbGwtPmNvdW50XSA9IDA7CisJCV9kZWJ1Zygib2ZmbGluZSAnJXMnIiwgcCk7CisKKwkJY2FsbC0+b2Zmc2V0ID0gMDsKKwkJY2FsbC0+dW5tYXJzaGFsbCsrOworCisJCS8qIGV4dHJhY3QgdGhlIG9mZmxpbmUgbWVzc2FnZSBwYWRkaW5nICovCisJCWlmICgoY2FsbC0+Y291bnQgJiAzKSA9PSAwKSB7CisJCQljYWxsLT51bm1hcnNoYWxsKys7CisJCQlnb3RvIG5vX29mZmxpbmVfcGFkZGluZzsKKwkJfQorCQljYWxsLT5jb3VudCA9IDQgLSAoY2FsbC0+Y291bnQgJiAzKTsKKworCWNhc2UgNzoKKwkJcmV0ID0gYWZzX2V4dHJhY3RfZGF0YShjYWxsLCBza2IsIGxhc3QsIGNhbGwtPmJ1ZmZlciwKKwkJCQkgICAgICAgY2FsbC0+Y291bnQpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIDA6CQlicmVhazsKKwkJY2FzZSAtRUFHQUlOOglyZXR1cm4gMDsKKwkJZGVmYXVsdDoJcmV0dXJuIHJldDsKKwkJfQorCisJCWNhbGwtPm9mZnNldCA9IDA7CisJCWNhbGwtPnVubWFyc2hhbGwrKzsKKwlub19vZmZsaW5lX3BhZGRpbmc6CisKKwkJLyogZXh0cmFjdCB0aGUgbWVzc2FnZSBvZiB0aGUgZGF5IGxlbmd0aCAqLworCWNhc2UgODoKKwkJcmV0ID0gYWZzX2V4dHJhY3RfZGF0YShjYWxsLCBza2IsIGxhc3QsICZjYWxsLT50bXAsIDQpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIDA6CQlicmVhazsKKwkJY2FzZSAtRUFHQUlOOglyZXR1cm4gMDsKKwkJZGVmYXVsdDoJcmV0dXJuIHJldDsKKwkJfQorCisJCWNhbGwtPmNvdW50ID0gbnRvaGwoY2FsbC0+dG1wKTsKKwkJX2RlYnVnKCJtb3RkIGxlbmd0aDogJXUiLCBjYWxsLT5jb3VudCk7CisJCWlmIChjYWxsLT5jb3VudCA+PSBBRlNOQU1FTUFYKQorCQkJcmV0dXJuIC1FQkFETVNHOworCQljYWxsLT5vZmZzZXQgPSAwOworCQljYWxsLT51bm1hcnNoYWxsKys7CisKKwkJLyogZXh0cmFjdCB0aGUgbWVzc2FnZSBvZiB0aGUgZGF5ICovCisJY2FzZSA5OgorCQlfZGVidWcoImV4dHJhY3QgbW90ZCIpOworCQlpZiAoY2FsbC0+Y291bnQgPiAwKSB7CisJCQlyZXQgPSBhZnNfZXh0cmFjdF9kYXRhKGNhbGwsIHNrYiwgbGFzdCwgY2FsbC0+cmVwbHkzLAorCQkJCQkgICAgICAgY2FsbC0+Y291bnQpOworCQkJc3dpdGNoIChyZXQpIHsKKwkJCWNhc2UgMDoJCWJyZWFrOworCQkJY2FzZSAtRUFHQUlOOglyZXR1cm4gMDsKKwkJCWRlZmF1bHQ6CXJldHVybiByZXQ7CisJCQl9CisJCX0KKworCQlwID0gY2FsbC0+cmVwbHkzOworCQlwW2NhbGwtPmNvdW50XSA9IDA7CisJCV9kZWJ1ZygibW90ZCAnJXMnIiwgcCk7CisKKwkJY2FsbC0+b2Zmc2V0ID0gMDsKKwkJY2FsbC0+dW5tYXJzaGFsbCsrOworCisJCS8qIGV4dHJhY3QgdGhlIG1lc3NhZ2Ugb2YgdGhlIGRheSBwYWRkaW5nICovCisJCWlmICgoY2FsbC0+Y291bnQgJiAzKSA9PSAwKSB7CisJCQljYWxsLT51bm1hcnNoYWxsKys7CisJCQlnb3RvIG5vX21vdGRfcGFkZGluZzsKKwkJfQorCQljYWxsLT5jb3VudCA9IDQgLSAoY2FsbC0+Y291bnQgJiAzKTsKKworCWNhc2UgMTA6CisJCXJldCA9IGFmc19leHRyYWN0X2RhdGEoY2FsbCwgc2tiLCBsYXN0LCBjYWxsLT5idWZmZXIsCisJCQkJICAgICAgIGNhbGwtPmNvdW50KTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAwOgkJYnJlYWs7CisJCWNhc2UgLUVBR0FJTjoJcmV0dXJuIDA7CisJCWRlZmF1bHQ6CXJldHVybiByZXQ7CisJCX0KKworCQljYWxsLT5vZmZzZXQgPSAwOworCQljYWxsLT51bm1hcnNoYWxsKys7CisJbm9fbW90ZF9wYWRkaW5nOgorCisJY2FzZSAxMToKKwkJX2RlYnVnKCJ0cmFpbGVyICVkIiwgc2tiLT5sZW4pOworCQlpZiAoc2tiLT5sZW4gIT0gMCkKKwkJCXJldHVybiAtRUJBRE1TRzsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFsYXN0KQorCQlyZXR1cm4gMDsKKworCV9sZWF2ZSgiID0gMCBbZG9uZV0iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGRlc3Ryb3kgYW4gRlMuR2V0Vm9sdW1lU3RhdHVzIGNhbGwKKyAqLworc3RhdGljIHZvaWQgYWZzX2dldF92b2x1bWVfc3RhdHVzX2NhbGxfZGVzdHJ1Y3RvcihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpCit7CisJa2ZyZWUoY2FsbC0+cmVwbHkzKTsKKwljYWxsLT5yZXBseTMgPSBOVUxMOworCWFmc19mbGF0X2NhbGxfZGVzdHJ1Y3RvcihjYWxsKTsKK30KKworLyoKKyAqIEZTLkdldFZvbHVtZVN0YXR1cyBvcGVyYXRpb24gdHlwZQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmc19jYWxsX3R5cGUgYWZzX1JYRlNHZXRWb2x1bWVTdGF0dXMgPSB7CisJLm5hbWUJCT0gIkZTLkdldFZvbHVtZVN0YXR1cyIsCisJLmRlbGl2ZXIJPSBhZnNfZGVsaXZlcl9mc19nZXRfdm9sdW1lX3N0YXR1cywKKwkuYWJvcnRfdG9fZXJyb3IJPSBhZnNfYWJvcnRfdG9fZXJyb3IsCisJLmRlc3RydWN0b3IJPSBhZnNfZ2V0X3ZvbHVtZV9zdGF0dXNfY2FsbF9kZXN0cnVjdG9yLAorfTsKKworLyoKKyAqIGZldGNoIHRoZSBzdGF0dXMgb2YgYSB2b2x1bWUKKyAqLworaW50IGFmc19mc19nZXRfdm9sdW1lX3N0YXR1cyhzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLAorCQkJICAgICBzdHJ1Y3Qga2V5ICprZXksCisJCQkgICAgIHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAorCQkJICAgICBzdHJ1Y3QgYWZzX3ZvbHVtZV9zdGF0dXMgKnZzLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgYWZzX3dhaXRfbW9kZSAqd2FpdF9tb2RlKQoreworCXN0cnVjdCBhZnNfY2FsbCAqY2FsbDsKKwlfX2JlMzIgKmJwOworCXZvaWQgKnRtcGJ1ZjsKKworCV9lbnRlcigiIik7CisKKwl0bXBidWYgPSBrbWFsbG9jKEFGU09QQVFVRU1BWCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXBidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJY2FsbCA9IGFmc19hbGxvY19mbGF0X2NhbGwoJmFmc19SWEZTR2V0Vm9sdW1lU3RhdHVzLCAyICogNCwgMTIgKiA0KTsKKwlpZiAoIWNhbGwpIHsKKwkJa2ZyZWUodG1wYnVmKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2FsbC0+a2V5ID0ga2V5OworCWNhbGwtPnJlcGx5ID0gdm5vZGU7CisJY2FsbC0+cmVwbHkyID0gdnM7CisJY2FsbC0+cmVwbHkzID0gdG1wYnVmOworCWNhbGwtPnNlcnZpY2VfaWQgPSBGU19TRVJWSUNFOworCWNhbGwtPnBvcnQgPSBodG9ucyhBRlNfRlNfUE9SVCk7CisKKwkvKiBtYXJzaGFsbCB0aGUgcGFyYW1ldGVycyAqLworCWJwID0gY2FsbC0+cmVxdWVzdDsKKwlicFswXSA9IGh0b25sKEZTR0VUVk9MVU1FU1RBVFVTKTsKKwlicFsxXSA9IGh0b25sKHZub2RlLT5maWQudmlkKTsKKworCXJldHVybiBhZnNfbWFrZV9jYWxsKCZzZXJ2ZXItPmFkZHIsIGNhbGwsIEdGUF9OT0ZTLCB3YWl0X21vZGUpOworfQpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCBjMTg0YTRlLi5kMTk2ODQwIDEwMDY0NAotLS0gYS9mcy9hZnMvaW5vZGUuYworKysgYi9mcy9hZnMvaW5vZGUuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0cnVjdCBhZnNfaWdldF9kYXRhIHsKQEAgLTEyNSw3ICsxMjYsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IHJldDsKIAotCV9lbnRlcigiLHsldSwldSwldX0sLCIsIGZpZC0+dmlkLCBmaWQtPnZub2RlLCBmaWQtPnVuaXF1ZSk7CisJX2VudGVyKCIseyV4OiV1LiV1fSwsIiwgZmlkLT52aWQsIGZpZC0+dm5vZGUsIGZpZC0+dW5pcXVlKTsKIAogCWFzID0gc2ItPnNfZnNfaW5mbzsKIAlkYXRhLnZvbHVtZSA9IGFzLT52b2x1bWU7CkBAIC0yMDQsNiArMjA1LDIzIEBACiB9CiAKIC8qCisgKiBtYXJrIHRoZSBkYXRhIGF0dGFjaGVkIHRvIGFuIGlub2RlIGFzIG9ic29sZXRlIGR1ZSB0byBhIHdyaXRlIG9uIHRoZSBzZXJ2ZXIKKyAqIC0gbWlnaHQgYWxzbyB3YW50IHRvIGRpdGNoIGFsbCB0aGUgb3V0c3RhbmRpbmcgd3JpdGVzIGFuZCBkaXJ0eSBwYWdlcworICovCit2b2lkIGFmc196YXBfZGF0YShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSkKK3sKKwlfZW50ZXIoInsleDoldX0iLCB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSk7CisKKwkvKiBudWtlIGFsbCB0aGUgbm9uLWRpcnR5IHBhZ2VzIHRoYXQgYXJlbid0IGxvY2tlZCwgbWFwcGVkIG9yIGJlaW5nCisJICogd3JpdHRlbiBiYWNrIGluIGEgcmVndWxhciBmaWxlIGFuZCBjb21wbGV0ZWx5IGRpc2NhcmQgdGhlIHBhZ2VzIGluIGEKKwkgKiBkaXJlY3Rvcnkgb3Igc3ltbGluayAqLworCWlmIChTX0lTUkVHKHZub2RlLT52ZnNfaW5vZGUuaV9tb2RlKSkKKwkJaW52YWxpZGF0ZV9yZW1vdGVfaW5vZGUoJnZub2RlLT52ZnNfaW5vZGUpOworCWVsc2UKKwkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIodm5vZGUtPnZmc19pbm9kZS5pX21hcHBpbmcpOworfQorCisvKgogICogdmFsaWRhdGUgYSB2bm9kZS9pbm9kZQogICogLSB0aGVyZSBhcmUgc2V2ZXJhbCB0aGluZ3Mgd2UgbmVlZCB0byBjaGVjawogICogICAtIHBhcmVudCBkaXIgZGF0YSBjaGFuZ2VzIChybSwgcm1kaXIsIHJlbmFtZSwgbWtkaXIsIGNyZWF0ZSwgbGluaywKQEAgLTI1OCwxMCArMjc2LDggQEAKIAogCS8qIGlmIHRoZSB2bm9kZSdzIGRhdGEgdmVyc2lvbiBudW1iZXIgY2hhbmdlZCB0aGVuIGl0cyBjb250ZW50cyBhcmUKIAkgKiBkaWZmZXJlbnQgKi8KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFGU19WTk9ERV9aQVBfREFUQSwgJnZub2RlLT5mbGFncykpIHsKLQkJX2RlYnVnKCJ6YXAgZGF0YSB7JXg6JWR9Iiwgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUpOwotCQlpbnZhbGlkYXRlX3JlbW90ZV9pbm9kZSgmdm5vZGUtPnZmc19pbm9kZSk7Ci0JfQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQUZTX1ZOT0RFX1pBUF9EQVRBLCAmdm5vZGUtPmZsYWdzKSkKKwkJYWZzX3phcF9kYXRhKHZub2RlKTsKIAogCWNsZWFyX2JpdChBRlNfVk5PREVfTU9ESUZJRUQsICZ2bm9kZS0+ZmxhZ3MpOwogCW11dGV4X3VubG9jaygmdm5vZGUtPnZhbGlkYXRlX2xvY2spOwpAQCAtMjc4LDcgKzI5NCw3IEBACiAvKgogICogcmVhZCB0aGUgYXR0cmlidXRlcyBvZiBhbiBpbm9kZQogICovCi1pbnQgYWZzX2lub2RlX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKK2ludCBhZnNfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkgICAgICBzdHJ1Y3Qga3N0YXQgKnN0YXQpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTMwMSw3ICszMTcsNyBAQAogCiAJdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7CiAKLQlfZW50ZXIoInsleDolZC4lZH0gdj0ldSB4PSV1IHQ9JXUgfSIsCisJX2VudGVyKCJ7JXg6JXUuJWR9IHY9JXUgeD0ldSB0PSV1IH0iLAogCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwKIAkgICAgICAgdm5vZGUtPmZpZC52bm9kZSwKIAkgICAgICAgdm5vZGUtPmZpZC51bmlxdWUsCkBAIC0zMjMsNiArMzM5LDcgQEAKIAkJdm5vZGUtPnNlcnZlciA9IE5VTEw7CiAJfQogCisJQVNTRVJUKGxpc3RfZW1wdHkoJnZub2RlLT53cml0ZWJhY2tzKSk7CiAJQVNTRVJUKCF2bm9kZS0+Y2JfcHJvbWlzZWQpOwogCiAjaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVApAQCAtMzM5LDMgKzM1Niw0NyBAQAogCiAJX2xlYXZlKCIiKTsKIH0KKworLyoKKyAqIHNldCB0aGUgYXR0cmlidXRlcyBvZiBhbiBpbm9kZQorICovCitpbnQgYWZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShkZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBrZXkgKmtleTsKKwlpbnQgcmV0OworCisJX2VudGVyKCJ7JXg6JXV9LHtuPSVzfSwleCIsCisJICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLCBkZW50cnktPmRfbmFtZS5uYW1lLAorCSAgICAgICBhdHRyLT5pYV92YWxpZCk7CisKKwlpZiAoIShhdHRyLT5pYV92YWxpZCAmIChBVFRSX1NJWkUgfCBBVFRSX01PREUgfCBBVFRSX1VJRCB8IEFUVFJfR0lEIHwKKwkJCQlBVFRSX01USU1FKSkpIHsKKwkJX2xlYXZlKCIgPSAwIFt1bnN1cHBvcnRlZF0iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogZmx1c2ggYW55IGRpcnR5IGRhdGEgb3V0c3RhbmRpbmcgb24gYSByZWd1bGFyIGZpbGUgKi8KKwlpZiAoU19JU1JFRyh2bm9kZS0+dmZzX2lub2RlLmlfbW9kZSkpIHsKKwkJZmlsZW1hcF93cml0ZV9hbmRfd2FpdCh2bm9kZS0+dmZzX2lub2RlLmlfbWFwcGluZyk7CisJCWFmc193cml0ZWJhY2tfYWxsKHZub2RlKTsKKwl9CisKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0ZJTEUpIHsKKwkJa2V5ID0gYXR0ci0+aWFfZmlsZS0+cHJpdmF0ZV9kYXRhOworCX0gZWxzZSB7CisJCWtleSA9IGFmc19yZXF1ZXN0X2tleSh2bm9kZS0+dm9sdW1lLT5jZWxsKTsKKwkJaWYgKElTX0VSUihrZXkpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGtleSk7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJcmV0ID0gYWZzX3Zub2RlX3NldGF0dHIodm5vZGUsIGtleSwgYXR0cik7CisJaWYgKCEoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0ZJTEUpKQorCQlrZXlfcHV0KGtleSk7CisKK2Vycm9yOgorCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IGQ5MGMxNTguLjJjNTVkZDkgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC0xNiwxMSArMTYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9yeHJwYy5oPgogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKICNpbmNsdWRlICJhZnMuaCIKICNpbmNsdWRlICJhZnNfdmwuaCIKIAogI2RlZmluZSBBRlNfQ0VMTF9NQVhfQUREUlMgMTUKIAorc3RydWN0IHBhZ2V2ZWM7CiBzdHJ1Y3QgYWZzX2NhbGw7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC03NSwxMiArNzksMTUgQEAKIAlzdHJ1Y3Qga2V5CQkqa2V5OwkJLyogc2VjdXJpdHkgZm9yIHRoaXMgY2FsbCAqLwogCXN0cnVjdCBhZnNfc2VydmVyCSpzZXJ2ZXI7CS8qIHNlcnZlciBhZmZlY3RlZCBieSBpbmNvbWluZyBDTSBjYWxsICovCiAJdm9pZAkJCSpyZXF1ZXN0OwkvKiByZXF1ZXN0IGRhdGEgKGZpcnN0IHBhcnQpICovCi0Jdm9pZAkJCSpyZXF1ZXN0MjsJLyogcmVxdWVzdCBkYXRhIChzZWNvbmQgcGFydCkgKi8KKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqbWFwcGluZzsJLyogcGFnZSBzZXQgKi8KKwlzdHJ1Y3QgYWZzX3dyaXRlYmFjawkqd2I7CQkvKiB3cml0ZWJhY2sgYmVpbmcgcGVyZm9ybWVkICovCiAJdm9pZAkJCSpidWZmZXI7CS8qIHJlcGx5IHJlY2VpdmUgYnVmZmVyICovCiAJdm9pZAkJCSpyZXBseTsJCS8qIHJlcGx5IGJ1ZmZlciAoZmlyc3QgcGFydCkgKi8KIAl2b2lkCQkJKnJlcGx5MjsJLyogcmVwbHkgYnVmZmVyIChzZWNvbmQgcGFydCkgKi8KIAl2b2lkCQkJKnJlcGx5MzsJLyogcmVwbHkgYnVmZmVyICh0aGlyZCBwYXJ0KSAqLwogCXZvaWQJCQkqcmVwbHk0OwkvKiByZXBseSBidWZmZXIgKGZvdXJ0aCBwYXJ0KSAqLworCXBnb2ZmX3QJCQlmaXJzdDsJCS8qIGZpcnN0IHBhZ2UgaW4gbWFwcGluZyB0byBkZWFsIHdpdGggKi8KKwlwZ29mZl90CQkJbGFzdDsJCS8qIGxhc3QgcGFnZSBpbiBtYXBwaW5nIHRvIGRlYWwgd2l0aCAqLwogCWVudW0gewkJCQkJLyogY2FsbCBzdGF0ZSAqLwogCQlBRlNfQ0FMTF9SRVFVRVNUSU5HLAkvKiByZXF1ZXN0IGlzIGJlaW5nIHNlbnQgZm9yIG91dGdvaW5nIGNhbGwgKi8KIAkJQUZTX0NBTExfQVdBSVRfUkVQTFksCS8qIGF3YWl0aW5nIHJlcGx5IHRvIG91dGdvaW5nIGNhbGwgKi8KQEAgLTk3LDE0ICsxMDQsMTggQEAKIAl1bnNpZ25lZAkJcmVxdWVzdF9zaXplOwkvKiBzaXplIG9mIHJlcXVlc3QgZGF0YSAqLwogCXVuc2lnbmVkCQlyZXBseV9tYXg7CS8qIG1heGltdW0gc2l6ZSBvZiByZXBseSAqLwogCXVuc2lnbmVkCQlyZXBseV9zaXplOwkvKiBjdXJyZW50IHNpemUgb2YgcmVwbHkgKi8KKwl1bnNpZ25lZAkJZmlyc3Rfb2Zmc2V0OwkvKiBvZmZzZXQgaW50byBtYXBwaW5nW2ZpcnN0XSAqLworCXVuc2lnbmVkCQlsYXN0X3RvOwkvKiBhbW91bnQgb2YgbWFwcGluZ1tsYXN0XSAqLwogCXVuc2lnbmVkIHNob3J0CQlvZmZzZXQ7CQkvKiBvZmZzZXQgaW50byByZWNlaXZlZCBkYXRhIHN0b3JlICovCiAJdW5zaWduZWQgY2hhcgkJdW5tYXJzaGFsbDsJLyogdW5tYXJzaGFsbGluZyBwaGFzZSAqLwogCWJvb2wJCQlpbmNvbWluZzsJLyogVCBpZiBpbmNvbWluZyBjYWxsICovCisJYm9vbAkJCXNlbmRfcGFnZXM7CS8qIFQgaWYgZGF0YSBmcm9tIG1hcHBpbmcgc2hvdWxkIGJlIHNlbnQgKi8KIAl1MTYJCQlzZXJ2aWNlX2lkOwkvKiBSeFJQQyBzZXJ2aWNlIElEIHRvIGNhbGwgKi8KIAlfX2JlMTYJCQlwb3J0OwkJLyogdGFyZ2V0IFVEUCBwb3J0ICovCiAJX19iZTMyCQkJb3BlcmF0aW9uX0lEOwkvKiBvcGVyYXRpb24gSUQgZm9yIGFuIGluY29taW5nIGNhbGwgKi8KIAl1MzIJCQljb3VudDsJCS8qIGNvdW50IGZvciB1c2UgaW4gdW5tYXJzaGFsbGluZyAqLwogCV9fYmUzMgkJCXRtcDsJCS8qIHBsYWNlIHRvIGV4dHJhY3QgdGVtcG9yYXJ5IGRhdGEgKi8KKwlhZnNfZGF0YXZlcnNpb25fdAlzdG9yZV92ZXJzaW9uOwkvKiB1cGRhdGVkIHZlcnNpb24gZXhwZWN0ZWQgZnJvbSBzdG9yZSAqLwogfTsKIAogc3RydWN0IGFmc19jYWxsX3R5cGUgewpAQCAtMTI0LDYgKzEzNSwzMiBAQAogfTsKIAogLyoKKyAqIHJlY29yZCBvZiBhbiBvdXRzdGFuZGluZyB3cml0ZWJhY2sgb24gYSB2bm9kZQorICovCitzdHJ1Y3QgYWZzX3dyaXRlYmFjayB7CisJc3RydWN0IGxpc3RfaGVhZAlsaW5rOwkJLyogbGluayBpbiB2bm9kZS0+d3JpdGViYWNrcyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAl3cml0ZXI7CQkvKiB3b3JrIGl0ZW0gdG8gcGVyZm9ybSB0aGUgd3JpdGViYWNrICovCisJc3RydWN0IGFmc192bm9kZQkqdm5vZGU7CQkvKiB2bm9kZSB0byB3aGljaCB0aGlzIHdyaXRlIGFwcGxpZXMgKi8KKwlzdHJ1Y3Qga2V5CQkqa2V5OwkJLyogb3duZXIgb2YgdGhpcyB3cml0ZSAqLworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRxOwkJLyogY29tcGxldGlvbiBhbmQgcmVhZHkgd2FpdCBxdWV1ZSAqLworCXBnb2ZmX3QJCQlmaXJzdDsJCS8qIGZpcnN0IHBhZ2UgaW4gYmF0Y2ggKi8KKwlwZ29mZl90CQkJcG9pbnQ7CQkvKiBsYXN0IHBhZ2UgaW4gY3VycmVudCBzdG9yZSBvcCAqLworCXBnb2ZmX3QJCQlsYXN0OwkJLyogbGFzdCBwYWdlIGluIGJhdGNoIChpbmNsdXNpdmUpICovCisJdW5zaWduZWQJCW9mZnNldF9maXJzdDsJLyogb2Zmc2V0IGludG8gZmlyc3QgcGFnZSBvZiBzdGFydCBvZiB3cml0ZSAqLworCXVuc2lnbmVkCQl0b19sYXN0OwkvKiBvZmZzZXQgaW50byBsYXN0IHBhZ2Ugb2YgZW5kIG9mIHdyaXRlICovCisJaW50CQkJbnVtX2NvbmZsaWN0czsJLyogY291bnQgb2YgY29uZmxpY3Rpbmcgd3JpdGVzIGluIGxpc3QgKi8KKwlpbnQJCQl1c2FnZTsKKwlib29sCQkJY29uZmxpY3RzOwkvKiBUIGlmIGhhcyBkZXBlbmRlbnQgY29uZmxpY3RzICovCisJZW51bSB7CisJCUFGU19XQkFDS19TWU5DSU5HLAkJLyogc3luY2hyb25pc2F0aW9uIGJlaW5nIHBlcmZvcm1lZCAqLworCQlBRlNfV0JBQ0tfUEVORElORywJCS8qIHdyaXRlIHBlbmRpbmcgKi8KKwkJQUZTX1dCQUNLX0NPTkZMSUNUSU5HLAkJLyogY29uZmxpY3Rpbmcgd3JpdGVzIHBvc3RlZCAqLworCQlBRlNfV0JBQ0tfV1JJVElORywJCS8qIHdyaXRpbmcgYmFjayAqLworCQlBRlNfV0JBQ0tfQ09NUExFVEUJCS8qIHRoZSB3cml0ZWJhY2sgcmVjb3JkIGhhcyBiZWVuIHVubGlua2VkICovCisJfSBzdGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CisKKy8qCiAgKiBBRlMgc3VwZXJibG9jayBwcml2YXRlIGRhdGEKICAqIC0gdGhlcmUncyBvbmUgc3VwZXJibG9jayBwZXIgdm9sdW1lCiAgKi8KQEAgLTMwNSw2ICszNDIsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90CXVwZGF0ZV93YWl0cTsJLyogc3RhdHVzIGZldGNoIHdhaXRxdWV1ZSAqLwogCWludAkJCXVwZGF0ZV9jbnQ7CS8qIG51bWJlciBvZiBvdXRzdGFuZGluZyBvcHMgdGhhdCB3aWxsIHVwZGF0ZSB0aGUKIAkJCQkJCSAqIHN0YXR1cyAqLworCXNwaW5sb2NrX3QJCXdyaXRlYmFja19sb2NrOwkvKiBsb2NrIGZvciB3cml0ZWJhY2tzICovCiAJc3BpbmxvY2tfdAkJbG9jazsJCS8qIHdhaXRxdWV1ZS9mbGFncyBsb2NrICovCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAjZGVmaW5lIEFGU19WTk9ERV9DQl9CUk9LRU4JMAkJLyogc2V0IGlmIHZub2RlJ3MgY2FsbGJhY2sgd2FzIGJyb2tlbiAqLwpAQCAtMzE2LDYgKzM1NCw4IEBACiAKIAlsb25nCQkJYWNsX29yZGVyOwkvKiBBQ0wgY2hlY2sgY291bnQgKGNhbGxiYWNrIGJyZWFrIGNvdW50KSAqLwogCisJc3RydWN0IGxpc3RfaGVhZAl3cml0ZWJhY2tzOwkvKiBhbHRlcmF0aW9ucyBpbiBwYWdlY2FjaGUgdGhhdCBuZWVkIHdyaXRpbmcgKi8KKwogCS8qIG91dHN0YW5kaW5nIGNhbGxiYWNrIG5vdGlmaWNhdGlvbiBvbiB0aGlzIGZpbGUgKi8KIAlzdHJ1Y3QgcmJfbm9kZQkJc2VydmVyX3JiOwkvKiBsaW5rIGluIHNlcnZlci0+ZnNfdm5vZGVzICovCiAJc3RydWN0IHJiX25vZGUJCWNiX3Byb21pc2U7CS8qIGxpbmsgaW4gc2VydmVyLT5jYl9wcm9taXNlcyAqLwpAQCAtNDMzLDEwICs0NzMsNiBAQAogZXh0ZXJuIGludCBhZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiBleHRlcm4gaW50IGFmc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLWV4dGVybiBpbnQgYWZzX2NhY2hlX2dldF9wYWdlX2Nvb2tpZShzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgY2FjaGVmc19wYWdlICoqKTsKLSNlbmRpZgotCiAvKgogICogZnNjbGllbnQuYwogICovCkBAIC00NjcsNiArNTAzLDE2IEBACiAJCQkgc3RydWN0IGFmc192bm9kZSAqLCBjb25zdCBjaGFyICosCiAJCQkgc3RydWN0IGFmc192bm9kZSAqLCBjb25zdCBjaGFyICosCiAJCQkgY29uc3Qgc3RydWN0IGFmc193YWl0X21vZGUgKik7CitleHRlcm4gaW50IGFmc19mc19zdG9yZV9kYXRhKHN0cnVjdCBhZnNfc2VydmVyICosIHN0cnVjdCBhZnNfd3JpdGViYWNrICosCisJCQkgICAgIHBnb2ZmX3QsIHBnb2ZmX3QsIHVuc2lnbmVkLCB1bnNpZ25lZCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGFmc193YWl0X21vZGUgKik7CitleHRlcm4gaW50IGFmc19mc19zZXRhdHRyKHN0cnVjdCBhZnNfc2VydmVyICosIHN0cnVjdCBrZXkgKiwKKwkJCSAgc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3QgaWF0dHIgKiwKKwkJCSAgY29uc3Qgc3RydWN0IGFmc193YWl0X21vZGUgKik7CitleHRlcm4gaW50IGFmc19mc19nZXRfdm9sdW1lX3N0YXR1cyhzdHJ1Y3QgYWZzX3NlcnZlciAqLCBzdHJ1Y3Qga2V5ICosCisJCQkJICAgIHN0cnVjdCBhZnNfdm5vZGUgKiwKKwkJCQkgICAgc3RydWN0IGFmc192b2x1bWVfc3RhdHVzICosCisJCQkJICAgIGNvbnN0IHN0cnVjdCBhZnNfd2FpdF9tb2RlICopOwogCiAvKgogICogaW5vZGUuYwpAQCAtNDc0LDEwICs1MjAsMTAgQEAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmFmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga2V5ICosCiAJCQkgICAgICBzdHJ1Y3QgYWZzX2ZpZCAqLCBzdHJ1Y3QgYWZzX2ZpbGVfc3RhdHVzICosCiAJCQkgICAgICBzdHJ1Y3QgYWZzX2NhbGxiYWNrICopOworZXh0ZXJuIHZvaWQgYWZzX3phcF9kYXRhKHN0cnVjdCBhZnNfdm5vZGUgKik7CiBleHRlcm4gaW50IGFmc192YWxpZGF0ZShzdHJ1Y3QgYWZzX3Zub2RlICosIHN0cnVjdCBrZXkgKik7Ci1leHRlcm4gaW50IGFmc19pbm9kZV9nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICosCi0JCQkgICAgIHN0cnVjdCBrc3RhdCAqKTsKLWV4dGVybiB2b2lkIGFmc196YXBfcGVybWl0cyhzdHJ1Y3QgcmN1X2hlYWQgKik7CitleHRlcm4gaW50IGFmc19nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdCAqKTsKK2V4dGVybiBpbnQgYWZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiBleHRlcm4gdm9pZCBhZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICopOwogCiAvKgpAQCAtNTMzLDYgKzU3OSw3IEBACiAgKi8KIGV4dGVybiB2b2lkIGFmc19jbGVhcl9wZXJtaXRzKHN0cnVjdCBhZnNfdm5vZGUgKik7CiBleHRlcm4gdm9pZCBhZnNfY2FjaGVfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBsb25nKTsKK2V4dGVybiB2b2lkIGFmc196YXBfcGVybWl0cyhzdHJ1Y3QgcmN1X2hlYWQgKik7CiBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5KHN0cnVjdCBhZnNfY2VsbCAqKTsKIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICosIGludCwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIApAQCAtNjI5LDYgKzY3NiwxMSBAQAogCQkJICAgICBzdHJ1Y3QgYWZzX2ZpbGVfc3RhdHVzICosIHN0cnVjdCBhZnNfc2VydmVyICoqKTsKIGV4dGVybiBpbnQgYWZzX3Zub2RlX3JlbmFtZShzdHJ1Y3QgYWZzX3Zub2RlICosIHN0cnVjdCBhZnNfdm5vZGUgKiwKIAkJCSAgICBzdHJ1Y3Qga2V5ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgYWZzX3Zub2RlX3N0b3JlX2RhdGEoc3RydWN0IGFmc193cml0ZWJhY2sgKiwgcGdvZmZfdCwgcGdvZmZfdCwKKwkJCQl1bnNpZ25lZCwgdW5zaWduZWQpOworZXh0ZXJuIGludCBhZnNfdm5vZGVfc2V0YXR0cihzdHJ1Y3QgYWZzX3Zub2RlICosIHN0cnVjdCBrZXkgKiwgc3RydWN0IGlhdHRyICopOworZXh0ZXJuIGludCBhZnNfdm5vZGVfZ2V0X3ZvbHVtZV9zdGF0dXMoc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3Qga2V5ICosCisJCQkJICAgICAgIHN0cnVjdCBhZnNfdm9sdW1lX3N0YXR1cyAqKTsKIAogLyoKICAqIHZvbHVtZS5jCkBAIC02NDUsNiArNjk3LDIzIEBACiBleHRlcm4gaW50IGFmc192b2x1bWVfcmVsZWFzZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfdm5vZGUgKiwKIAkJCQkJIHN0cnVjdCBhZnNfc2VydmVyICosIGludCk7CiAKKy8qCisgKiB3cml0ZS5jCisgKi8KK2V4dGVybiBpbnQgYWZzX3NldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICopOworZXh0ZXJuIHZvaWQgYWZzX3B1dF93cml0ZWJhY2soc3RydWN0IGFmc193cml0ZWJhY2sgKik7CitleHRlcm4gaW50IGFmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CitleHRlcm4gaW50IGFmc19jb21taXRfd3JpdGUoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKK2V4dGVybiBpbnQgYWZzX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CitleHRlcm4gaW50IGFmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKK2V4dGVybiBpbnQgYWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgYWZzX3BhZ2VzX3dyaXR0ZW5fYmFjayhzdHJ1Y3QgYWZzX3Zub2RlICosIHN0cnVjdCBhZnNfY2FsbCAqKTsKK2V4dGVybiBzc2l6ZV90IGFmc19maWxlX3dyaXRlKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCk7CitleHRlcm4gaW50IGFmc193cml0ZWJhY2tfYWxsKHN0cnVjdCBhZnNfdm5vZGUgKik7CitleHRlcm4gaW50IGFmc19mc3luYyhzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIGRlYnVnIHRyYWNpbmcKQEAgLTcyNiw2ICs3OTUsMjEgQEAKIAl9CQkJCQkJCQlcCiB9IHdoaWxlKDApCiAKKyNkZWZpbmUgQVNTRVJUUkFOR0UoTCwgT1AxLCBOLCBPUDIsIEgpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSghKChMKSBPUDEgKE4pKSB8fCAhKChOKSBPUDIgKEgpKSkpIHsJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIkFGUzogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CQlcCisJCXByaW50ayhLRVJOX0VSUiAiJWx1ICIjT1AxIiAlbHUgIiNPUDIiICVsdSBpcyBmYWxzZVxuIiwJXAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKEwpLCAodW5zaWduZWQgbG9uZykoTiksCQlcCisJCSAgICAgICAodW5zaWduZWQgbG9uZykoSCkpOwkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiMHglbHggIiNPUDEiIDB4JWx4ICIjT1AyIiAweCVseCBpcyBmYWxzZVxuIiwgXAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKEwpLCAodW5zaWduZWQgbG9uZykoTiksCQlcCisJCSAgICAgICAodW5zaWduZWQgbG9uZykoSCkpOwkJCQlcCisJCUJVRygpOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSgwKQorCiAjZGVmaW5lIEFTU0VSVElGKEMsIFgpCQkJCQkJXAogZG8gewkJCQkJCQkJXAogCWlmICh1bmxpa2VseSgoQykgJiYgIShYKSkpIHsJCQkJXApAQCAtNzU4LDYgKzg0MiwxMCBAQAogZG8gewkJCQkJCVwKIH0gd2hpbGUoMCkKIAorI2RlZmluZSBBU1NFUlRSQU5HRShMLCBPUDEsIE4sIE9QMiwgSCkJCVwKK2RvIHsJCQkJCQlcCit9IHdoaWxlKDApCisKICNkZWZpbmUgQVNTRVJUSUYoQywgWCkJCQkJXAogZG8gewkJCQkJCVwKIH0gd2hpbGUoMCkKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9tYWluLmMgYi9mcy9hZnMvbWFpbi5jCmluZGV4IDgwZWM2ZmQuLmNkMjExOTUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9tYWluLmMKKysrIGIvZnMvYWZzL21haW4uYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiQUZTIENsaWVudCBGaWxlIFN5c3RlbSIpOwpAQCAtMTQ5LDYgKzE1MCw3IEBACiAJYWZzX3Zsb2NhdGlvbl9wdXJnZSgpOwogCWFmc19jZWxsX3B1cmdlKCk7CiAJYWZzX3Byb2NfY2xlYW51cCgpOworCXJjdV9iYXJyaWVyKCk7CiAJcHJpbnRrKEtFUk5fRVJSICJrQUZTOiBmYWlsZWQgdG8gcmVnaXN0ZXI6ICVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNzYsNiArMTc4LDcgQEAKIAljYWNoZWZzX3VucmVnaXN0ZXJfbmV0ZnMoJmFmc19jYWNoZV9uZXRmcyk7CiAjZW5kaWYKIAlhZnNfcHJvY19jbGVhbnVwKCk7CisJcmN1X2JhcnJpZXIoKTsKIH0KIAogbW9kdWxlX2V4aXQoYWZzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL21pc2MuYyBiL2ZzL2Fmcy9taXNjLmMKaW5kZXggY2RiOTc5Mi4uZDFhODg5YyAxMDA2NDQKLS0tIGEvZnMvYWZzL21pc2MuYworKysgYi9mcy9hZnMvbWlzYy5jCkBAIC0yMiw2ICsyMiw3IEBACiB7CiAJc3dpdGNoIChhYm9ydF9jb2RlKSB7CiAJY2FzZSAxMzoJCXJldHVybiAtRUFDQ0VTOworCWNhc2UgMjc6CQlyZXR1cm4gLUVGQklHOwogCWNhc2UgMzA6CQlyZXR1cm4gLUVST0ZTOwogCWNhc2UgVlNBTFZBR0U6CQlyZXR1cm4gLUVJTzsKIAljYXNlIFZOT1ZOT0RFOgkJcmV0dXJuIC1FTk9FTlQ7CmRpZmYgLS1naXQgYS9mcy9hZnMvbW50cHQuYyBiL2ZzL2Fmcy9tbnRwdC5jCmluZGV4IDAzNGZjZmQuLmEzNjg0ZGMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9tbnRwdC5jCisrKyBiL2ZzL2Fmcy9tbnRwdC5jCkBAIC0zNiw3ICszNiw3IEBACiAJLmxvb2t1cAkJPSBhZnNfbW50cHRfbG9va3VwLAogCS5mb2xsb3dfbGluawk9IGFmc19tbnRwdF9mb2xsb3dfbGluaywKIAkucmVhZGxpbmsJPSBwYWdlX3JlYWRsaW5rLAotCS5nZXRhdHRyCT0gYWZzX2lub2RlX2dldGF0dHIsCisJLmdldGF0dHIJPSBhZnNfZ2V0YXR0ciwKIH07CiAKIHN0YXRpYyBMSVNUX0hFQUQoYWZzX3Zmc21vdW50cyk7CkBAIC01OCw3ICs1OCw4IEBACiAJY2hhciAqYnVmOwogCWludCByZXQ7CiAKLQlfZW50ZXIoInsldSwldX0iLCB2bm9kZS0+ZmlkLnZub2RlLCB2bm9kZS0+ZmlkLnVuaXF1ZSk7CisJX2VudGVyKCJ7JXg6JXUsJXV9IiwKKwkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIHZub2RlLT5maWQudW5pcXVlKTsKIAogCS8qIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzeW1saW5rIGludG8gdGhlIHBhZ2VjYWNoZSAqLwogCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShBRlNfVk5PREVfVE9fSSh2bm9kZSktPmlfbWFwcGluZywgMCwgJmZpbGUpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL3Byb2MuYyBiL2ZzL2Fmcy9wcm9jLmMKaW5kZXggZDU2MDFmNi4uMTNkZjUxMiAxMDA2NDQKLS0tIGEvZnMvYWZzL3Byb2MuYworKysgYi9mcy9hZnMvcHJvYy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9yeHJwYy5jIGIvZnMvYWZzL3J4cnBjLmMKaW5kZXggMjIyYzFhMy4uMWIzNmY0NSAxMDA2NDQKLS0tIGEvZnMvYWZzL3J4cnBjLmMKKysrIGIvZnMvYWZzL3J4cnBjLmMKQEAgLTIzNyw2ICsyMzcsNzAgQEAKIH0KIAogLyoKKyAqIGF0dGFjaCB0aGUgZGF0YSBmcm9tIGEgYnVuY2ggb2YgcGFnZXMgb24gYW4gaW5vZGUgdG8gYSBjYWxsCisgKi8KK2ludCBhZnNfc2VuZF9wYWdlcyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IGt2ZWMgKmlvdikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbOF07CisJdW5zaWduZWQgY291bnQsIG4sIGxvb3AsIG9mZnNldCwgdG87CisJcGdvZmZfdCBmaXJzdCA9IGNhbGwtPmZpcnN0LCBsYXN0ID0gY2FsbC0+bGFzdDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIiKTsKKworCW9mZnNldCA9IGNhbGwtPmZpcnN0X29mZnNldDsKKwljYWxsLT5maXJzdF9vZmZzZXQgPSAwOworCisJZG8geworCQlfZGVidWcoImF0dGFjaCAlbHgtJWx4IiwgZmlyc3QsIGxhc3QpOworCisJCWNvdW50ID0gbGFzdCAtIGZpcnN0ICsgMTsKKwkJaWYgKGNvdW50ID4gQVJSQVlfU0laRShwYWdlcykpCisJCQljb3VudCA9IEFSUkFZX1NJWkUocGFnZXMpOworCQluID0gZmluZF9nZXRfcGFnZXNfY29udGlnKGNhbGwtPm1hcHBpbmcsIGZpcnN0LCBjb3VudCwgcGFnZXMpOworCQlBU1NFUlRDTVAobiwgPT0sIGNvdW50KTsKKworCQlsb29wID0gMDsKKwkJZG8geworCQkJbXNnLT5tc2dfZmxhZ3MgPSAwOworCQkJdG8gPSBQQUdFX1NJWkU7CisJCQlpZiAoZmlyc3QgKyBsb29wID49IGxhc3QpCisJCQkJdG8gPSBjYWxsLT5sYXN0X3RvOworCQkJZWxzZQorCQkJCW1zZy0+bXNnX2ZsYWdzID0gTVNHX01PUkU7CisJCQlpb3YtPmlvdl9iYXNlID0ga21hcChwYWdlc1tsb29wXSkgKyBvZmZzZXQ7CisJCQlpb3YtPmlvdl9sZW4gPSB0byAtIG9mZnNldDsKKwkJCW9mZnNldCA9IDA7CisKKwkJCV9kZWJ1ZygiLSByYW5nZSAldS0ldSVzIiwKKwkJCSAgICAgICBvZmZzZXQsIHRvLCBtc2ctPm1zZ19mbGFncyA/ICIgW21vcmVdIiA6ICIiKTsKKwkJCW1zZy0+bXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikgaW92OworCQkJbXNnLT5tc2dfaW92bGVuID0gMTsKKworCQkJLyogaGF2ZSB0byBjaGFuZ2UgdGhlIHN0YXRlICpiZWZvcmUqIHNlbmRpbmcgdGhlIGxhc3QKKwkJCSAqIHBhY2tldCBhcyBSeFJQQyBtaWdodCBnaXZlIHVzIHRoZSByZXBseSBiZWZvcmUgaXQKKwkJCSAqIHJldHVybnMgZnJvbSBzZW5kaW5nIHRoZSByZXF1ZXN0ICovCisJCQlpZiAoZmlyc3QgKyBsb29wID49IGxhc3QpCisJCQkJY2FsbC0+c3RhdGUgPSBBRlNfQ0FMTF9BV0FJVF9SRVBMWTsKKwkJCXJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC0+cnhjYWxsLCBtc2csCisJCQkJCQkgICAgIHRvIC0gb2Zmc2V0KTsKKwkJCWt1bm1hcChwYWdlc1tsb29wXSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlicmVhazsKKwkJfSB3aGlsZSAoKytsb29wIDwgY291bnQpOworCQlmaXJzdCArPSBjb3VudDsKKworCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgY291bnQ7IGxvb3ArKykKKwkJCXB1dF9wYWdlKHBhZ2VzW2xvb3BdKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwl9IHdoaWxlIChmaXJzdCA8PSBsYXN0KTsKKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCiAgKiBpbml0aWF0ZSBhIGNhbGwKICAqLwogaW50IGFmc19tYWtlX2NhbGwoc3RydWN0IGluX2FkZHIgKmFkZHIsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwLApAQCAtMjUzLDggKzMxNyw5IEBACiAJQVNTRVJUKGNhbGwtPnR5cGUgIT0gTlVMTCk7CiAJQVNTRVJUKGNhbGwtPnR5cGUtPm5hbWUgIT0gTlVMTCk7CiAKLQlfZGVidWcoIk1BS0UgJXB7JXN9IFslZF0iLAotCSAgICAgICBjYWxsLCBjYWxsLT50eXBlLT5uYW1lLCBhdG9taWNfcmVhZCgmYWZzX291dHN0YW5kaW5nX2NhbGxzKSk7CisJX2RlYnVnKCJfX19fTUFLRSAlcHslcywleH0gWyVkXV9fX18iLAorCSAgICAgICBjYWxsLCBjYWxsLT50eXBlLT5uYW1lLCBrZXlfc2VyaWFsKGNhbGwtPmtleSksCisJICAgICAgIGF0b21pY19yZWFkKCZhZnNfb3V0c3RhbmRpbmdfY2FsbHMpKTsKIAogCWNhbGwtPndhaXRfbW9kZSA9IHdhaXRfbW9kZTsKIAlJTklUX1dPUksoJmNhbGwtPmFzeW5jX3dvcmssIGFmc19wcm9jZXNzX2FzeW5jX2NhbGwpOwpAQCAtMjg5LDE2ICszNTQsMjMgQEAKIAltc2cubXNnX2lvdmxlbgkJPSAxOwogCW1zZy5tc2dfY29udHJvbAkJPSBOVUxMOwogCW1zZy5tc2dfY29udHJvbGxlbgk9IDA7Ci0JbXNnLm1zZ19mbGFncwkJPSAwOworCW1zZy5tc2dfZmxhZ3MJCT0gKGNhbGwtPnNlbmRfcGFnZXMgPyBNU0dfTU9SRSA6IDApOwogCiAJLyogaGF2ZSB0byBjaGFuZ2UgdGhlIHN0YXRlICpiZWZvcmUqIHNlbmRpbmcgdGhlIGxhc3QgcGFja2V0IGFzIFJ4UlBDCiAJICogbWlnaHQgZ2l2ZSB1cyB0aGUgcmVwbHkgYmVmb3JlIGl0IHJldHVybnMgZnJvbSBzZW5kaW5nIHRoZQogCSAqIHJlcXVlc3QgKi8KLQljYWxsLT5zdGF0ZSA9IEFGU19DQUxMX0FXQUlUX1JFUExZOworCWlmICghY2FsbC0+c2VuZF9wYWdlcykKKwkJY2FsbC0+c3RhdGUgPSBBRlNfQ0FMTF9BV0FJVF9SRVBMWTsKIAlyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4Y2FsbCwgJm1zZywgY2FsbC0+cmVxdWVzdF9zaXplKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcl9kb19hYm9ydDsKIAorCWlmIChjYWxsLT5zZW5kX3BhZ2VzKSB7CisJCXJldCA9IGFmc19zZW5kX3BhZ2VzKGNhbGwsICZtc2csIGlvdik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJvcl9kb19hYm9ydDsKKwl9CisKIAkvKiBhdCB0aGlzIHBvaW50LCBhbiBhc3luYyBjYWxsIG1heSBubyBsb25nZXIgZXhpc3QgYXMgaXQgbWF5IGhhdmUKIAkgKiBhbHJlYWR5IGNvbXBsZXRlZCAqLwogCXJldHVybiB3YWl0X21vZGUtPndhaXQoY2FsbCk7CmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jCmluZGV4IGY5ZjQyNGQuLjU2NmZlNzEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9zZWN1cml0eS5jCisrKyBiL2ZzL2Fmcy9zZWN1cml0eS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGtleXMvcnhycGMtdHlwZS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKQEAgLTEwOSw3ICsxMTAsNyBAQAogewogCXN0cnVjdCBhZnNfcGVybWl0cyAqcGVybWl0czsKIAotCV9lbnRlcigieyV4fSIsIHZub2RlLT5maWQudm5vZGUpOworCV9lbnRlcigieyV4OiV1fSIsIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlKTsKIAogCW11dGV4X2xvY2soJnZub2RlLT5wZXJtaXRzX2xvY2spOwogCXBlcm1pdHMgPSB2bm9kZS0+cGVybWl0czsKQEAgLTEzMiw3ICsxMzMsOCBAQAogCXN0cnVjdCBhZnNfdm5vZGUgKmF1dGhfdm5vZGU7CiAJaW50IGNvdW50LCBsb29wOwogCi0JX2VudGVyKCJ7JXh9LCV4LCVseCIsIHZub2RlLT5maWQudm5vZGUsIGtleV9zZXJpYWwoa2V5KSwgYWNsX29yZGVyKTsKKwlfZW50ZXIoInsleDoldX0sJXgsJWx4IiwKKwkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIGtleV9zZXJpYWwoa2V5KSwgYWNsX29yZGVyKTsKIAogCWF1dGhfdm5vZGUgPSBhZnNfZ2V0X2F1dGhfaW5vZGUodm5vZGUsIGtleSk7CiAJaWYgKElTX0VSUihhdXRoX3Zub2RlKSkgewpAQCAtMjIwLDcgKzIyMiw4IEBACiAJYm9vbCB2YWxpZDsKIAlpbnQgbG9vcCwgcmV0OwogCi0JX2VudGVyKCIiKTsKKwlfZW50ZXIoInsleDoldX0sJXgiLAorCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwga2V5X3NlcmlhbChrZXkpKTsKIAogCWF1dGhfdm5vZGUgPSBhZnNfZ2V0X2F1dGhfaW5vZGUodm5vZGUsIGtleSk7CiAJaWYgKElTX0VSUihhdXRoX3Zub2RlKSkgewpAQCAtMjY4LDkgKzI3MSw5IEBACiAJCQlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KKwkJKl9hY2Nlc3MgPSB2bm9kZS0+c3RhdHVzLmNhbGxlcl9hY2Nlc3M7CiAJfQogCi0JKl9hY2Nlc3MgPSB2bm9kZS0+c3RhdHVzLmNhbGxlcl9hY2Nlc3M7CiAJaXB1dCgmYXV0aF92bm9kZS0+dmZzX2lub2RlKTsKIAlfbGVhdmUoIiA9IDAgW2FjY2VzcyAleF0iLCAqX2FjY2Vzcyk7CiAJcmV0dXJuIDA7CkBAIC0yODgsNyArMjkxLDcgQEAKIAlzdHJ1Y3Qga2V5ICprZXk7CiAJaW50IHJldDsKIAotCV9lbnRlcigie3sleDoleH0sJWx4fSwleCwiLAorCV9lbnRlcigie3sleDoldX0sJWx4fSwleCwiLAogCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgdm5vZGUtPmZsYWdzLCBtYXNrKTsKIAogCWtleSA9IGFmc19yZXF1ZXN0X2tleSh2bm9kZS0+dm9sdW1lLT5jZWxsKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZXJ2ZXIuYyBiL2ZzL2Fmcy9zZXJ2ZXIuYwppbmRleCA5NmJiMjNiLi4yMzFhZTQxIDEwMDY0NAotLS0gYS9mcy9hZnMvc2VydmVyLmMKKysrIGIvZnMvYWZzL3NlcnZlci5jCkBAIC0yNTIsNiArMjUyLDkgQEAKIHsKIAlfZW50ZXIoIiVwIiwgc2VydmVyKTsKIAorCUFTU0VSVElGKHNlcnZlci0+Y2JfYnJlYWtfaGVhZCAhPSBzZXJ2ZXItPmNiX2JyZWFrX3RhaWwsCisJCSBkZWxheWVkX3dvcmtfcGVuZGluZygmc2VydmVyLT5jYl9icmVha193b3JrKSk7CisKIAlBU1NFUlRDTVAoc2VydmVyLT5mc192bm9kZXMucmJfbm9kZSwgPT0sIE5VTEwpOwogCUFTU0VSVENNUChzZXJ2ZXItPmNiX3Byb21pc2VzLnJiX25vZGUsID09LCBOVUxMKTsKIAlBU1NFUlRDTVAoc2VydmVyLT5jYl9icmVha19oZWFkLCA9PSwgc2VydmVyLT5jYl9icmVha190YWlsKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zdXBlci5jIGIvZnMvYWZzL3N1cGVyLmMKaW5kZXggNzAzMGQ3Ni4uMmU4NDk2YiAxMDA2NDQKLS0tIGEvZnMvYWZzL3N1cGVyLmMKKysrIGIvZnMvYWZzL3N1cGVyLmMKQEAgLTIxLDIyICsyMSwyMSBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXRmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogI2RlZmluZSBBRlNfRlNfTUFHSUMgMHg2QjQxNDY1MyAvKiAna0FGUycgKi8KIAogc3RhdGljIHZvaWQgYWZzX2lfaW5pdF9vbmNlKHZvaWQgKmZvbywgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLQogc3RhdGljIGludCBhZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAogCQkgICAgICBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAogCQkgICAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKLQogc3RhdGljIHZvaWQgYWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKLQogc3RhdGljIHZvaWQgYWZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CitzdGF0aWMgaW50IGFmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKTsKIAogc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYWZzX2ZzX3R5cGUgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtNDcsOSArNDYsOSBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGFmc19zdXBlcl9vcHMgPSB7Ci0JLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAorCS5zdGF0ZnMJCT0gYWZzX3N0YXRmcywKIAkuYWxsb2NfaW5vZGUJPSBhZnNfYWxsb2NfaW5vZGUsCi0JLmRyb3BfaW5vZGUJPSBnZW5lcmljX2RlbGV0ZV9pbm9kZSwKKwkud3JpdGVfaW5vZGUJPSBhZnNfd3JpdGVfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBhZnNfZGVzdHJveV9pbm9kZSwKIAkuY2xlYXJfaW5vZGUJPSBhZnNfY2xlYXJfaW5vZGUsCiAJLnVtb3VudF9iZWdpbgk9IGFmc191bW91bnRfYmVnaW4sCkBAIC02Niw3ICs2NSw3IEBACiAJYWZzX29wdF92b2wsCiB9OwogCi1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBhZnNfb3B0aW9uc19saXN0ID0geworc3RhdGljIG1hdGNoX3RhYmxlX3QgYWZzX29wdGlvbnNfbGlzdCA9IHsKIAl7IGFmc19vcHRfY2VsbCwJCSJjZWxsPSVzIgl9LAogCXsgYWZzX29wdF9yd3BhdGgsCSJyd3BhdGgiCX0sCiAJeyBhZnNfb3B0X3ZvbCwJCSJ2b2w9JXMiCX0sCkBAIC00NTMsMTUgKzQ1MiwxNSBAQAogewogCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gX3Zub2RlOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKSB7Ci0JCW1lbXNldCh2bm9kZSwgMCwgc2l6ZW9mKCp2bm9kZSkpOwotCQlpbm9kZV9pbml0X29uY2UoJnZub2RlLT52ZnNfaW5vZGUpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2bm9kZS0+dXBkYXRlX3dhaXRxKTsKLQkJbXV0ZXhfaW5pdCgmdm5vZGUtPnBlcm1pdHNfbG9jayk7Ci0JCW11dGV4X2luaXQoJnZub2RlLT52YWxpZGF0ZV9sb2NrKTsKLQkJc3Bpbl9sb2NrX2luaXQoJnZub2RlLT5sb2NrKTsKLQkJSU5JVF9XT1JLKCZ2bm9kZS0+Y2JfYnJva2VuX3dvcmssIGFmc19icm9rZW5fY2FsbGJhY2tfd29yayk7Ci0JfQorCW1lbXNldCh2bm9kZSwgMCwgc2l6ZW9mKCp2bm9kZSkpOworCWlub2RlX2luaXRfb25jZSgmdm5vZGUtPnZmc19pbm9kZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmdm5vZGUtPnVwZGF0ZV93YWl0cSk7CisJbXV0ZXhfaW5pdCgmdm5vZGUtPnBlcm1pdHNfbG9jayk7CisJbXV0ZXhfaW5pdCgmdm5vZGUtPnZhbGlkYXRlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZ2bm9kZS0+d3JpdGViYWNrX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZ2bm9kZS0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnZub2RlLT53cml0ZWJhY2tzKTsKKwlJTklUX1dPUksoJnZub2RlLT5jYl9icm9rZW5fd29yaywgYWZzX2Jyb2tlbl9jYWxsYmFja193b3JrKTsKIH0KIAogLyoKQEAgLTQ4NSw2ICs0ODQsNyBAQAogCXZub2RlLT5mbGFncwkJPSAxIDw8IEFGU19WTk9ERV9VTlNFVDsKIAl2bm9kZS0+Y2JfcHJvbWlzZWQJPSBmYWxzZTsKIAorCV9sZWF2ZSgiID0gJXAiLCAmdm5vZGUtPnZmc19pbm9kZSk7CiAJcmV0dXJuICZ2bm9kZS0+dmZzX2lub2RlOwogfQogCkBAIC00OTUsNyArNDk1LDcgQEAKIHsKIAlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTsKIAotCV9lbnRlcigieyVsdX0iLCBpbm9kZS0+aV9pbm8pOworCV9lbnRlcigiJXB7JXg6JXV9IiwgaW5vZGUsIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlKTsKIAogCV9kZWJ1ZygiREVTVFJPWSBJTk9ERSAlcCIsIGlub2RlKTsKIApAQCAtNTA0LDMgKzUwNCwzNiBAQAogCWttZW1fY2FjaGVfZnJlZShhZnNfaW5vZGVfY2FjaGVwLCB2bm9kZSk7CiAJYXRvbWljX2RlYygmYWZzX2NvdW50X2FjdGl2ZV9pbm9kZXMpOwogfQorCisvKgorICogcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IGFuIEFGUyB2b2x1bWUKKyAqLworc3RhdGljIGludCBhZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWZzX3ZvbHVtZV9zdGF0dXMgdnM7CisJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShkZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBrZXkgKmtleTsKKwlpbnQgcmV0OworCisJa2V5ID0gYWZzX3JlcXVlc3Rfa2V5KHZub2RlLT52b2x1bWUtPmNlbGwpOworCWlmIChJU19FUlIoa2V5KSkKKwkJcmV0dXJuIFBUUl9FUlIoa2V5KTsKKworCXJldCA9IGFmc192bm9kZV9nZXRfdm9sdW1lX3N0YXR1cyh2bm9kZSwga2V5LCAmdnMpOworCWtleV9wdXQoa2V5KTsKKwlpZiAocmV0IDwgMCkgeworCQlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlidWYtPmZfdHlwZQk9IGRlbnRyeS0+ZF9zYi0+c19tYWdpYzsKKwlidWYtPmZfYnNpemUJPSBBRlNfQkxPQ0tfU0laRTsKKwlidWYtPmZfbmFtZWxlbgk9IEFGU05BTUVNQVggLSAxOworCisJaWYgKHZzLm1heF9xdW90YSA9PSAwKQorCQlidWYtPmZfYmxvY2tzID0gdnMucGFydF9tYXhfYmxvY2tzOworCWVsc2UKKwkJYnVmLT5mX2Jsb2NrcyA9IHZzLm1heF9xdW90YTsKKwlidWYtPmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlID0gYnVmLT5mX2Jsb2NrcyAtIHZzLmJsb2Nrc19pbl91c2U7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mcy9hZnMvdmxvY2F0aW9uLmMgYi9mcy9hZnMvdmxvY2F0aW9uLmMKaW5kZXggMzM3MGNkYi4uMDllM2FkMCAxMDA2NDQKLS0tIGEvZnMvYWZzL3Zsb2NhdGlvbi5jCisrKyBiL2ZzL2Fmcy92bG9jYXRpb24uYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHVuc2lnbmVkIGFmc192bG9jYXRpb25fdGltZW91dCA9IDEwOwkvKiB2b2x1bWUgbG9jYXRpb24gdGltZW91dCBpbiBzZWNvbmRzICovCmRpZmYgLS1naXQgYS9mcy9hZnMvdm5vZGUuYyBiL2ZzL2Fmcy92bm9kZS5jCmluZGV4IGExOTA0YWIuLjIzMmM1NWQgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy92bm9kZS5jCisrKyBiL2ZzL2Fmcy92bm9kZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogI2lmIDAKQEAgLTE3NSwyNCArMTc2LDMzIEBACiB7CiAJc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjsKIAorCV9lbnRlcigieyVwfSIsIHZub2RlLT5zZXJ2ZXIpOworCiAJc2V0X2JpdChBRlNfVk5PREVfREVMRVRFRCwgJnZub2RlLT5mbGFncyk7CiAKIAlzZXJ2ZXIgPSB2bm9kZS0+c2VydmVyOwotCWlmICh2bm9kZS0+Y2JfcHJvbWlzZWQpIHsKLQkJc3Bpbl9sb2NrKCZzZXJ2ZXItPmNiX2xvY2spOworCWlmIChzZXJ2ZXIpIHsKIAkJaWYgKHZub2RlLT5jYl9wcm9taXNlZCkgewotCQkJcmJfZXJhc2UoJnZub2RlLT5jYl9wcm9taXNlLCAmc2VydmVyLT5jYl9wcm9taXNlcyk7Ci0JCQl2bm9kZS0+Y2JfcHJvbWlzZWQgPSBmYWxzZTsKKwkJCXNwaW5fbG9jaygmc2VydmVyLT5jYl9sb2NrKTsKKwkJCWlmICh2bm9kZS0+Y2JfcHJvbWlzZWQpIHsKKwkJCQlyYl9lcmFzZSgmdm5vZGUtPmNiX3Byb21pc2UsCisJCQkJCSAmc2VydmVyLT5jYl9wcm9taXNlcyk7CisJCQkJdm5vZGUtPmNiX3Byb21pc2VkID0gZmFsc2U7CisJCQl9CisJCQlzcGluX3VubG9jaygmc2VydmVyLT5jYl9sb2NrKTsKIAkJfQotCQlzcGluX3VubG9jaygmc2VydmVyLT5jYl9sb2NrKTsKKworCQlzcGluX2xvY2soJnNlcnZlci0+ZnNfbG9jayk7CisJCXJiX2VyYXNlKCZ2bm9kZS0+c2VydmVyX3JiLCAmc2VydmVyLT5mc192bm9kZXMpOworCQlzcGluX3VubG9jaygmc2VydmVyLT5mc19sb2NrKTsKKworCQl2bm9kZS0+c2VydmVyID0gTlVMTDsKKwkJYWZzX3B1dF9zZXJ2ZXIoc2VydmVyKTsKKwl9IGVsc2UgeworCQlBU1NFUlQoIXZub2RlLT5jYl9wcm9taXNlZCk7CiAJfQogCi0Jc3Bpbl9sb2NrKCZ2bm9kZS0+c2VydmVyLT5mc19sb2NrKTsKLQlyYl9lcmFzZSgmdm5vZGUtPnNlcnZlcl9yYiwgJnZub2RlLT5zZXJ2ZXItPmZzX3Zub2Rlcyk7Ci0Jc3Bpbl91bmxvY2soJnZub2RlLT5zZXJ2ZXItPmZzX2xvY2spOwotCi0Jdm5vZGUtPnNlcnZlciA9IE5VTEw7Ci0JYWZzX3B1dF9zZXJ2ZXIoc2VydmVyKTsKKwlfbGVhdmUoIiIpOwogfQogCiAvKgpAQCAtMjI1LDcgKzIzNSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGFmc192bm9kZV9zdGF0dXNfdXBkYXRlX2ZhaWxlZChzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgaW50IHJldCkKIHsKLQlfZW50ZXIoIiVwLCVkIiwgdm5vZGUsIHJldCk7CisJX2VudGVyKCJ7JXg6JXV9LCVkIiwgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIHJldCk7CiAKIAlzcGluX2xvY2soJnZub2RlLT5sb2NrKTsKIApAQCAtMjYxLDcgKzI3MSw3IEBACiAKIAlERUNMQVJFX1dBSVRRVUVVRShteXNlbGYsIGN1cnJlbnQpOwogCi0JX2VudGVyKCIlcyx7JXUsJXUsJXV9IiwKKwlfZW50ZXIoIiVzLHsleDoldS4ldX0iLAogCSAgICAgICB2bm9kZS0+dm9sdW1lLT52bG9jYXRpb24tPnZsZGIubmFtZSwKIAkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIHZub2RlLT5maWQudW5pcXVlKTsKIApAQCAtMzg5LDcgKzM5OSw3IEBACiAJc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjsKIAlpbnQgcmV0OwogCi0JX2VudGVyKCIlc3sldSwldSwldX0sJXgsLCwiLAorCV9lbnRlcigiJXN7JXg6JXUuJXV9LCV4LCwsIiwKIAkgICAgICAgdm5vZGUtPnZvbHVtZS0+dmxvY2F0aW9uLT52bGRiLm5hbWUsCiAJICAgICAgIHZub2RlLT5maWQudmlkLAogCSAgICAgICB2bm9kZS0+ZmlkLnZub2RlLApAQCAtNDQ2LDcgKzQ1Niw3IEBACiAJc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjsKIAlpbnQgcmV0OwogCi0JX2VudGVyKCIlc3sldSwldSwldX0sJXgsJXMsLCIsCisJX2VudGVyKCIlc3sleDoldS4ldX0sJXgsJXMsLCIsCiAJICAgICAgIHZub2RlLT52b2x1bWUtPnZsb2NhdGlvbi0+dmxkYi5uYW1lLAogCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwKIAkgICAgICAgdm5vZGUtPmZpZC52bm9kZSwKQEAgLTUwMiw3ICs1MTIsNyBAQAogCXN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXI7CiAJaW50IHJldDsKIAotCV9lbnRlcigiJXN7JXUsJXUsJXV9LCV4LCVzIiwKKwlfZW50ZXIoIiVzeyV4OiV1LiV1fSwleCwlcyIsCiAJICAgICAgIHZub2RlLT52b2x1bWUtPnZsb2NhdGlvbi0+dmxkYi5uYW1lLAogCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwKIAkgICAgICAgdm5vZGUtPmZpZC52bm9kZSwKQEAgLTU1Nyw3ICs1NjcsNyBAQAogCXN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXI7CiAJaW50IHJldDsKIAotCV9lbnRlcigiJXN7JXUsJXUsJXV9LCVzeyV1LCV1LCV1fSwleCwlcyIsCisJX2VudGVyKCIlc3sleDoldS4ldX0sJXN7JXg6JXUuJXV9LCV4LCVzIiwKIAkgICAgICAgZHZub2RlLT52b2x1bWUtPnZsb2NhdGlvbi0+dmxkYi5uYW1lLAogCSAgICAgICBkdm5vZGUtPmZpZC52aWQsCiAJICAgICAgIGR2bm9kZS0+ZmlkLnZub2RlLApAQCAtNjI4LDcgKzYzOCw3IEBACiAJc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjsKIAlpbnQgcmV0OwogCi0JX2VudGVyKCIlc3sldSwldSwldX0sJXgsJXMsJXMsLCwiLAorCV9lbnRlcigiJXN7JXg6JXUuJXV9LCV4LCVzLCVzLCwsIiwKIAkgICAgICAgdm5vZGUtPnZvbHVtZS0+dmxvY2F0aW9uLT52bGRiLm5hbWUsCiAJICAgICAgIHZub2RlLT5maWQudmlkLAogCSAgICAgICB2bm9kZS0+ZmlkLnZub2RlLApAQCAtNjg3LDcgKzY5Nyw3IEBACiAJc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjsKIAlpbnQgcmV0OwogCi0JX2VudGVyKCIlc3sldSwldSwldX0sJXN7JXUsJXUsJXV9LCV4LCVzLCVzIiwKKwlfZW50ZXIoIiVzeyV4OiV1LiV1fSwlc3sldSwldSwldX0sJXgsJXMsJXMiLAogCSAgICAgICBvcmlnX2R2bm9kZS0+dm9sdW1lLT52bG9jYXRpb24tPnZsZGIubmFtZSwKIAkgICAgICAgb3JpZ19kdm5vZGUtPmZpZC52aWQsCiAJICAgICAgIG9yaWdfZHZub2RlLT5maWQudm5vZGUsCkBAIC03NTMsMyArNzYzLDE2MiBAQAogCV9sZWF2ZSgiID0gJWxkIFtjbnQgJWRdIiwgUFRSX0VSUihzZXJ2ZXIpLCBvcmlnX2R2bm9kZS0+dXBkYXRlX2NudCk7CiAJcmV0dXJuIFBUUl9FUlIoc2VydmVyKTsKIH0KKworLyoKKyAqIHdyaXRlIHRvIGEgZmlsZQorICovCitpbnQgYWZzX3Zub2RlX3N0b3JlX2RhdGEoc3RydWN0IGFmc193cml0ZWJhY2sgKndiLCBwZ29mZl90IGZpcnN0LCBwZ29mZl90IGxhc3QsCisJCQkgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCB0bykKK3sKKwlzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyOworCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gd2ItPnZub2RlOworCWludCByZXQ7CisKKwlfZW50ZXIoIiVzeyV4OiV1LiV1fSwleCwlbHgsJWx4LCV4LCV4IiwKKwkgICAgICAgdm5vZGUtPnZvbHVtZS0+dmxvY2F0aW9uLT52bGRiLm5hbWUsCisJICAgICAgIHZub2RlLT5maWQudmlkLAorCSAgICAgICB2bm9kZS0+ZmlkLnZub2RlLAorCSAgICAgICB2bm9kZS0+ZmlkLnVuaXF1ZSwKKwkgICAgICAga2V5X3NlcmlhbCh3Yi0+a2V5KSwKKwkgICAgICAgZmlyc3QsIGxhc3QsIG9mZnNldCwgdG8pOworCisJLyogdGhpcyBvcCB3aWxsIGZldGNoIHRoZSBzdGF0dXMgKi8KKwlzcGluX2xvY2soJnZub2RlLT5sb2NrKTsKKwl2bm9kZS0+dXBkYXRlX2NudCsrOworCXNwaW5fdW5sb2NrKCZ2bm9kZS0+bG9jayk7CisKKwlkbyB7CisJCS8qIHBpY2sgYSBzZXJ2ZXIgdG8gcXVlcnkgKi8KKwkJc2VydmVyID0gYWZzX3ZvbHVtZV9waWNrX2ZpbGVzZXJ2ZXIodm5vZGUpOworCQlpZiAoSVNfRVJSKHNlcnZlcikpCisJCQlnb3RvIG5vX3NlcnZlcjsKKworCQlfZGVidWcoIlVTSU5HIFNFUlZFUjogJTA4eFxuIiwgbnRvaGwoc2VydmVyLT5hZGRyLnNfYWRkcikpOworCisJCXJldCA9IGFmc19mc19zdG9yZV9kYXRhKHNlcnZlciwgd2IsIGZpcnN0LCBsYXN0LCBvZmZzZXQsIHRvLAorCQkJCQkmYWZzX3N5bmNfY2FsbCk7CisKKwl9IHdoaWxlICghYWZzX3ZvbHVtZV9yZWxlYXNlX2ZpbGVzZXJ2ZXIodm5vZGUsIHNlcnZlciwgcmV0KSk7CisKKwkvKiBhZGp1c3QgdGhlIGZsYWdzICovCisJaWYgKHJldCA9PSAwKSB7CisJCWFmc192bm9kZV9maW5hbGlzZV9zdGF0dXNfdXBkYXRlKHZub2RlLCBzZXJ2ZXIpOworCQlhZnNfcHV0X3NlcnZlcihzZXJ2ZXIpOworCX0gZWxzZSB7CisJCWFmc192bm9kZV9zdGF0dXNfdXBkYXRlX2ZhaWxlZCh2bm9kZSwgcmV0KTsKKwl9CisKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitub19zZXJ2ZXI6CisJc3Bpbl9sb2NrKCZ2bm9kZS0+bG9jayk7CisJdm5vZGUtPnVwZGF0ZV9jbnQtLTsKKwlBU1NFUlRDTVAodm5vZGUtPnVwZGF0ZV9jbnQsID49LCAwKTsKKwlzcGluX3VubG9jaygmdm5vZGUtPmxvY2spOworCXJldHVybiBQVFJfRVJSKHNlcnZlcik7Cit9CisKKy8qCisgKiBzZXQgdGhlIGF0dHJpYnV0ZXMgb24gYSBmaWxlCisgKi8KK2ludCBhZnNfdm5vZGVfc2V0YXR0cihzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IGtleSAqa2V5LAorCQkgICAgICBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjsKKwlpbnQgcmV0OworCisJX2VudGVyKCIlc3sleDoldS4ldX0sJXgiLAorCSAgICAgICB2bm9kZS0+dm9sdW1lLT52bG9jYXRpb24tPnZsZGIubmFtZSwKKwkgICAgICAgdm5vZGUtPmZpZC52aWQsCisJICAgICAgIHZub2RlLT5maWQudm5vZGUsCisJICAgICAgIHZub2RlLT5maWQudW5pcXVlLAorCSAgICAgICBrZXlfc2VyaWFsKGtleSkpOworCisJLyogdGhpcyBvcCB3aWxsIGZldGNoIHRoZSBzdGF0dXMgKi8KKwlzcGluX2xvY2soJnZub2RlLT5sb2NrKTsKKwl2bm9kZS0+dXBkYXRlX2NudCsrOworCXNwaW5fdW5sb2NrKCZ2bm9kZS0+bG9jayk7CisKKwlkbyB7CisJCS8qIHBpY2sgYSBzZXJ2ZXIgdG8gcXVlcnkgKi8KKwkJc2VydmVyID0gYWZzX3ZvbHVtZV9waWNrX2ZpbGVzZXJ2ZXIodm5vZGUpOworCQlpZiAoSVNfRVJSKHNlcnZlcikpCisJCQlnb3RvIG5vX3NlcnZlcjsKKworCQlfZGVidWcoIlVTSU5HIFNFUlZFUjogJTA4eFxuIiwgbnRvaGwoc2VydmVyLT5hZGRyLnNfYWRkcikpOworCisJCXJldCA9IGFmc19mc19zZXRhdHRyKHNlcnZlciwga2V5LCB2bm9kZSwgYXR0ciwgJmFmc19zeW5jX2NhbGwpOworCisJfSB3aGlsZSAoIWFmc192b2x1bWVfcmVsZWFzZV9maWxlc2VydmVyKHZub2RlLCBzZXJ2ZXIsIHJldCkpOworCisJLyogYWRqdXN0IHRoZSBmbGFncyAqLworCWlmIChyZXQgPT0gMCkgeworCQlhZnNfdm5vZGVfZmluYWxpc2Vfc3RhdHVzX3VwZGF0ZSh2bm9kZSwgc2VydmVyKTsKKwkJYWZzX3B1dF9zZXJ2ZXIoc2VydmVyKTsKKwl9IGVsc2UgeworCQlhZnNfdm5vZGVfc3RhdHVzX3VwZGF0ZV9mYWlsZWQodm5vZGUsIHJldCk7CisJfQorCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKKworbm9fc2VydmVyOgorCXNwaW5fbG9jaygmdm5vZGUtPmxvY2spOworCXZub2RlLT51cGRhdGVfY250LS07CisJQVNTRVJUQ01QKHZub2RlLT51cGRhdGVfY250LCA+PSwgMCk7CisJc3Bpbl91bmxvY2soJnZub2RlLT5sb2NrKTsKKwlyZXR1cm4gUFRSX0VSUihzZXJ2ZXIpOworfQorCisvKgorICogZ2V0IHRoZSBzdGF0dXMgb2YgYSB2b2x1bWUKKyAqLworaW50IGFmc192bm9kZV9nZXRfdm9sdW1lX3N0YXR1cyhzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IGtleSAqa2V5LAorCQkJCXN0cnVjdCBhZnNfdm9sdW1lX3N0YXR1cyAqdnMpCit7CisJc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjsKKwlpbnQgcmV0OworCisJX2VudGVyKCIlc3sleDoldS4ldX0sJXgsIiwKKwkgICAgICAgdm5vZGUtPnZvbHVtZS0+dmxvY2F0aW9uLT52bGRiLm5hbWUsCisJICAgICAgIHZub2RlLT5maWQudmlkLAorCSAgICAgICB2bm9kZS0+ZmlkLnZub2RlLAorCSAgICAgICB2bm9kZS0+ZmlkLnVuaXF1ZSwKKwkgICAgICAga2V5X3NlcmlhbChrZXkpKTsKKworCS8qIHRoaXMgb3Agd2lsbCBmZXRjaCB0aGUgc3RhdHVzICovCisJc3Bpbl9sb2NrKCZ2bm9kZS0+bG9jayk7CisJdm5vZGUtPnVwZGF0ZV9jbnQrKzsKKwlzcGluX3VubG9jaygmdm5vZGUtPmxvY2spOworCisJZG8geworCQkvKiBwaWNrIGEgc2VydmVyIHRvIHF1ZXJ5ICovCisJCXNlcnZlciA9IGFmc192b2x1bWVfcGlja19maWxlc2VydmVyKHZub2RlKTsKKwkJaWYgKElTX0VSUihzZXJ2ZXIpKQorCQkJZ290byBub19zZXJ2ZXI7CisKKwkJX2RlYnVnKCJVU0lORyBTRVJWRVI6ICUwOHhcbiIsIG50b2hsKHNlcnZlci0+YWRkci5zX2FkZHIpKTsKKworCQlyZXQgPSBhZnNfZnNfZ2V0X3ZvbHVtZV9zdGF0dXMoc2VydmVyLCBrZXksIHZub2RlLCB2cywgJmFmc19zeW5jX2NhbGwpOworCisJfSB3aGlsZSAoIWFmc192b2x1bWVfcmVsZWFzZV9maWxlc2VydmVyKHZub2RlLCBzZXJ2ZXIsIHJldCkpOworCisJLyogYWRqdXN0IHRoZSBmbGFncyAqLworCWlmIChyZXQgPT0gMCkgeworCQlhZnNfdm5vZGVfZmluYWxpc2Vfc3RhdHVzX3VwZGF0ZSh2bm9kZSwgc2VydmVyKTsKKwkJYWZzX3B1dF9zZXJ2ZXIoc2VydmVyKTsKKwl9IGVsc2UgeworCQlhZnNfdm5vZGVfc3RhdHVzX3VwZGF0ZV9mYWlsZWQodm5vZGUsIHJldCk7CisJfQorCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKKworbm9fc2VydmVyOgorCXNwaW5fbG9jaygmdm5vZGUtPmxvY2spOworCXZub2RlLT51cGRhdGVfY250LS07CisJQVNTRVJUQ01QKHZub2RlLT51cGRhdGVfY250LCA+PSwgMCk7CisJc3Bpbl91bmxvY2soJnZub2RlLT5sb2NrKTsKKwlyZXR1cm4gUFRSX0VSUihzZXJ2ZXIpOworfQpkaWZmIC0tZ2l0IGEvZnMvYWZzL3ZvbHVtZS5jIGIvZnMvYWZzL3ZvbHVtZS5jCmluZGV4IGRkMTYwY2EuLjhiYWIwZTMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy92b2x1bWUuYworKysgYi9mcy9hZnMvdm9sdW1lLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqYWZzX3ZvbHR5cGVzW10gPSB7ICJSL1ciLCAiUi9PIiwgIkJBSyIgfTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy93cml0ZS5jIGIvZnMvYWZzL3dyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzYjkyYQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2Fmcy93cml0ZS5jCkBAIC0wLDAgKzEsODI3IEBACisvKiBoYW5kbGluZyBvZiB3cml0ZXMgdG8gcmVndWxhciBmaWxlcyBhbmQgd3JpdGluZyBiYWNrIHRvIHRoZSBzZXJ2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworc3RhdGljIGludCBhZnNfd3JpdGVfYmFja19mcm9tX2xvY2tlZF9wYWdlKHN0cnVjdCBhZnNfd3JpdGViYWNrICp3YiwKKwkJCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UpOworCisvKgorICogbWFyayBhIHBhZ2UgYXMgaGF2aW5nIGJlZW4gbWFkZSBkaXJ0eSBhbmQgdGh1cyBuZWVkaW5nIHdyaXRlYmFjaworICovCitpbnQgYWZzX3NldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKQoreworCV9lbnRlcigiIik7CisJcmV0dXJuIF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzKHBhZ2UpOworfQorCisvKgorICogdW5saW5rIGEgd3JpdGViYWNrIHJlY29yZCBiZWNhdXNlIGl0cyB1c2FnZSBoYXMgcmVhY2hlZCB6ZXJvCisgKiAtIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHdiLT52bm9kZS0+d3JpdGViYWNrX2xvY2sgaGVsZAorICovCitzdGF0aWMgdm9pZCBhZnNfdW5saW5rX3dyaXRlYmFjayhzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqd2IpCit7CisJc3RydWN0IGFmc193cml0ZWJhY2sgKmZyb250OworCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gd2ItPnZub2RlOworCisJbGlzdF9kZWxfaW5pdCgmd2ItPmxpbmspOworCWlmICghbGlzdF9lbXB0eSgmdm5vZGUtPndyaXRlYmFja3MpKSB7CisJCS8qIGlmIGFuIGZzeW5jIHJpc2VzIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWUgdGhlbiB3YWtlIGl0CisJCSAqIHVwICovCisJCWZyb250ID0gbGlzdF9lbnRyeSh2bm9kZS0+d3JpdGViYWNrcy5uZXh0LAorCQkJCSAgIHN0cnVjdCBhZnNfd3JpdGViYWNrLCBsaW5rKTsKKwkJaWYgKGZyb250LT5zdGF0ZSA9PSBBRlNfV0JBQ0tfU1lOQ0lORykgeworCQkJX2RlYnVnKCJ3YWtlIHVwIHN5bmMiKTsKKwkJCWZyb250LT5zdGF0ZSA9IEFGU19XQkFDS19DT01QTEVURTsKKwkJCXdha2VfdXAoJmZyb250LT53YWl0cSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBmcmVlIGEgd3JpdGViYWNrIHJlY29yZAorICovCitzdGF0aWMgdm9pZCBhZnNfZnJlZV93cml0ZWJhY2soc3RydWN0IGFmc193cml0ZWJhY2sgKndiKQoreworCV9lbnRlcigiIik7CisJa2V5X3B1dCh3Yi0+a2V5KTsKKwlrZnJlZSh3Yik7Cit9CisKKy8qCisgKiBkaXNwb3NlIG9mIGEgcmVmZXJlbmNlIHRvIGEgd3JpdGViYWNrIHJlY29yZAorICovCit2b2lkIGFmc19wdXRfd3JpdGViYWNrKHN0cnVjdCBhZnNfd3JpdGViYWNrICp3YikKK3sKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IHdiLT52bm9kZTsKKworCV9lbnRlcigieyVkfSIsIHdiLT51c2FnZSk7CisKKwlzcGluX2xvY2soJnZub2RlLT53cml0ZWJhY2tfbG9jayk7CisJaWYgKC0td2ItPnVzYWdlID09IDApCisJCWFmc191bmxpbmtfd3JpdGViYWNrKHdiKTsKKwllbHNlCisJCXdiID0gTlVMTDsKKwlzcGluX3VubG9jaygmdm5vZGUtPndyaXRlYmFja19sb2NrKTsKKwlpZiAod2IpCisJCWFmc19mcmVlX3dyaXRlYmFjayh3Yik7Cit9CisKKy8qCisgKiBwYXJ0bHkgb3Igd2hvbGx5IGZpbGwgYSBwYWdlIHRoYXQncyB1bmRlciBwcmVwYXJhdGlvbiBmb3Igd3JpdGluZworICovCitzdGF0aWMgaW50IGFmc19maWxsX3BhZ2Uoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsIHN0cnVjdCBrZXkgKmtleSwKKwkJCSB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpbnQgcmV0OworCisJX2VudGVyKCIsLCV1LCV1Iiwgc3RhcnQsIGxlbik7CisKKwlBU1NFUlRDTVAoc3RhcnQgKyBsZW4sIDw9LCBQQUdFX1NJWkUpOworCisJcmV0ID0gYWZzX3Zub2RlX2ZldGNoX2RhdGEodm5vZGUsIGtleSwgc3RhcnQsIGxlbiwgcGFnZSk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRU5PRU5UKSB7CisJCQlfZGVidWcoImdvdCBOT0VOVCBmcm9tIHNlcnZlciIKKwkJCSAgICAgICAiIC0gbWFya2luZyBmaWxlIGRlbGV0ZWQgYW5kIHN0YWxlIik7CisJCQlzZXRfYml0KEFGU19WTk9ERV9ERUxFVEVELCAmdm5vZGUtPmZsYWdzKTsKKwkJCXJldCA9IC1FU1RBTEU7CisJCX0KKwl9CisKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogcHJlcGFyZSBhIHBhZ2UgZm9yIGJlaW5nIHdyaXR0ZW4gdG8KKyAqLworc3RhdGljIGludCBhZnNfcHJlcGFyZV9wYWdlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICBzdHJ1Y3Qga2V5ICprZXksIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgdG8pCit7CisJdW5zaWduZWQgZW9mLCB0YWlsLCBzdGFydCwgc3RvcCwgbGVuOworCWxvZmZfdCBpX3NpemUsIHBvczsKKwl2b2lkICpwOworCWludCByZXQ7CisKKwlfZW50ZXIoIiIpOworCisJaWYgKG9mZnNldCA9PSAwICYmIHRvID09IFBBR0VfU0laRSkKKwkJcmV0dXJuIDA7CisKKwlwID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCisJaV9zaXplID0gaV9zaXplX3JlYWQoJnZub2RlLT52ZnNfaW5vZGUpOworCXBvcyA9IChsb2ZmX3QpIHBhZ2UtPmluZGV4IDw8IFBBR0VfU0hJRlQ7CisJaWYgKHBvcyA+PSBpX3NpemUpIHsKKwkJLyogcGFydGlhbCB3cml0ZSwgcGFnZSBiZXlvbmQgRU9GICovCisJCV9kZWJ1ZygiYmV5b25kIik7CisJCWlmIChvZmZzZXQgPiAwKQorCQkJbWVtc2V0KHAsIDAsIG9mZnNldCk7CisJCWlmICh0byA8IFBBR0VfU0laRSkKKwkJCW1lbXNldChwICsgdG8sIDAsIFBBR0VfU0laRSAtIHRvKTsKKwkJa3VubWFwX2F0b21pYyhwLCBLTV9VU0VSMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChpX3NpemUgLSBwb3MgPj0gUEFHRV9TSVpFKSB7CisJCS8qIHBhcnRpYWwgd3JpdGUsIHBhZ2UgZW50aXJlbHkgYmVmb3JlIEVPRiAqLworCQlfZGVidWcoImJlZm9yZSIpOworCQl0YWlsID0gZW9mID0gUEFHRV9TSVpFOworCX0gZWxzZSB7CisJCS8qIHBhcnRpYWwgd3JpdGUsIHBhZ2Ugb3ZlcmxhcHMgRU9GICovCisJCWVvZiA9IGlfc2l6ZSAtIHBvczsKKwkJX2RlYnVnKCJvdmVybGFwICV1IiwgZW9mKTsKKwkJdGFpbCA9IG1heChlb2YsIHRvKTsKKwkJaWYgKHRhaWwgPCBQQUdFX1NJWkUpCisJCQltZW1zZXQocCArIHRhaWwsIDAsIFBBR0VfU0laRSAtIHRhaWwpOworCQlpZiAob2Zmc2V0ID4gZW9mKQorCQkJbWVtc2V0KHAgKyBlb2YsIDAsIFBBR0VfU0laRSAtIGVvZik7CisJfQorCisJa3VubWFwX2F0b21pYyhwLCBLTV9VU0VSMCk7CisKKwlyZXQgPSAwOworCWlmIChvZmZzZXQgPiAwIHx8IGVvZiA+IHRvKSB7CisJCS8qIG5lZWQgdG8gZmlsbCBvbmUgb3IgdHdvIGJpdHMgdGhhdCBhcmVuJ3QgZ29pbmcgdG8gYmUgd3JpdHRlbgorCQkgKiAoY292ZXIgYm90aCBmaWxsZXJzIGluIG9uZSByZWFkIGlmIHRoZXJlIGFyZSB0d28pICovCisJCXN0YXJ0ID0gKG9mZnNldCA+IDApID8gMCA6IHRvOworCQlzdG9wID0gKGVvZiA+IHRvKSA/IGVvZiA6IG9mZnNldDsKKwkJbGVuID0gc3RvcCAtIHN0YXJ0OworCQlfZGVidWcoIndyPSV1LSV1IGF2PTAtJXUgcmQ9JXVAJXUiLAorCQkgICAgICAgb2Zmc2V0LCB0bywgZW9mLCBzdGFydCwgbGVuKTsKKwkJcmV0ID0gYWZzX2ZpbGxfcGFnZSh2bm9kZSwga2V5LCBzdGFydCwgbGVuLCBwYWdlKTsKKwl9CisKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogcHJlcGFyZSB0byBwZXJmb3JtIHBhcnQgb2YgYSB3cml0ZSB0byBhIHBhZ2UKKyAqIC0gdGhlIGNhbGxlciBob2xkcyB0aGUgcGFnZSBsb2NrZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBiZWluZyB3cml0dGVuIG91dCBvcgorICogICBtb2RpZmllZCBieSBhbnlvbmUgZWxzZQorICovCitpbnQgYWZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkgICAgICB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHRvKQoreworCXN0cnVjdCBhZnNfd3JpdGViYWNrICpjYW5kaWRhdGUsICp3YjsKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3Qga2V5ICprZXkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcGdvZmZfdCBpbmRleDsKKwlpbnQgcmV0OworCisJX2VudGVyKCJ7JXg6JXV9LHslbHh9LCV1LCV1IiwKKwkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIHBhZ2UtPmluZGV4LCBvZmZzZXQsIHRvKTsKKworCWNhbmRpZGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpjYW5kaWRhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhbmRpZGF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2FuZGlkYXRlLT52bm9kZSA9IHZub2RlOworCWNhbmRpZGF0ZS0+Zmlyc3QgPSBjYW5kaWRhdGUtPmxhc3QgPSBwYWdlLT5pbmRleDsKKwljYW5kaWRhdGUtPm9mZnNldF9maXJzdCA9IG9mZnNldDsKKwljYW5kaWRhdGUtPnRvX2xhc3QgPSB0bzsKKwljYW5kaWRhdGUtPnVzYWdlID0gMTsKKwljYW5kaWRhdGUtPnN0YXRlID0gQUZTX1dCQUNLX1BFTkRJTkc7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FuZGlkYXRlLT53YWl0cSk7CisKKwlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgeworCQlfZGVidWcoIm5vdCB1cCB0byBkYXRlIik7CisJCXJldCA9IGFmc19wcmVwYXJlX3BhZ2Uodm5vZGUsIHBhZ2UsIGtleSwgb2Zmc2V0LCB0byk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlrZnJlZShjYW5kaWRhdGUpOworCQkJX2xlYXZlKCIgPSAlZCBbcHJlcF0iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwordHJ5X2FnYWluOgorCWluZGV4ID0gcGFnZS0+aW5kZXg7CisJc3Bpbl9sb2NrKCZ2bm9kZS0+d3JpdGViYWNrX2xvY2spOworCisJLyogc2VlIGlmIHRoaXMgcGFnZSBpcyBhbHJlYWR5IHBlbmRpbmcgYSB3cml0ZWJhY2sgdW5kZXIgYSBzdWl0YWJsZSBrZXkKKwkgKiAtIGlmIHNvIHdlIGNhbiBqdXN0IGpvaW4gb250byB0aGF0IG9uZSAqLworCXdiID0gKHN0cnVjdCBhZnNfd3JpdGViYWNrICopIHBhZ2VfcHJpdmF0ZShwYWdlKTsKKwlpZiAod2IpIHsKKwkJaWYgKHdiLT5rZXkgPT0ga2V5ICYmIHdiLT5zdGF0ZSA9PSBBRlNfV0JBQ0tfUEVORElORykKKwkJCWdvdG8gc3Vic3VtZV9pbl9jdXJyZW50X3diOworCQlnb3RvIGZsdXNoX2NvbmZsaWN0aW5nX3diOworCX0KKworCWlmIChpbmRleCA+IDApIHsKKwkJLyogc2VlIGlmIHdlIGNhbiBmaW5kIGFuIGFscmVhZHkgcGVuZGluZyB3cml0ZWJhY2sgdGhhdCB3ZSBjYW4KKwkJICogYXBwZW5kIHRoaXMgcGFnZSB0byAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdiLCAmdm5vZGUtPndyaXRlYmFja3MsIGxpbmspIHsKKwkJCWlmICh3Yi0+bGFzdCA9PSBpbmRleCAtIDEgJiYgd2ItPmtleSA9PSBrZXkgJiYKKwkJCSAgICB3Yi0+c3RhdGUgPT0gQUZTX1dCQUNLX1BFTkRJTkcpCisJCQkJZ290byBhcHBlbmRfdG9fcHJldmlvdXNfd2I7CisJCX0KKwl9CisKKwlsaXN0X2FkZF90YWlsKCZjYW5kaWRhdGUtPmxpbmssICZ2bm9kZS0+d3JpdGViYWNrcyk7CisJY2FuZGlkYXRlLT5rZXkgPSBrZXlfZ2V0KGtleSk7CisJc3Bpbl91bmxvY2soJnZub2RlLT53cml0ZWJhY2tfbG9jayk7CisJU2V0UGFnZVByaXZhdGUocGFnZSk7CisJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAodW5zaWduZWQgbG9uZykgY2FuZGlkYXRlKTsKKwlfbGVhdmUoIiA9IDAgW25ld10iKTsKKwlyZXR1cm4gMDsKKworc3Vic3VtZV9pbl9jdXJyZW50X3diOgorCV9kZWJ1Zygic3Vic3VtZSIpOworCUFTU0VSVFJBTkdFKHdiLT5maXJzdCwgPD0sIGluZGV4LCA8PSwgd2ItPmxhc3QpOworCWlmIChpbmRleCA9PSB3Yi0+Zmlyc3QgJiYgb2Zmc2V0IDwgd2ItPm9mZnNldF9maXJzdCkKKwkJd2ItPm9mZnNldF9maXJzdCA9IG9mZnNldDsKKwlpZiAoaW5kZXggPT0gd2ItPmxhc3QgJiYgdG8gPiB3Yi0+dG9fbGFzdCkKKwkJd2ItPnRvX2xhc3QgPSB0bzsKKwlzcGluX3VubG9jaygmdm5vZGUtPndyaXRlYmFja19sb2NrKTsKKwlrZnJlZShjYW5kaWRhdGUpOworCV9sZWF2ZSgiID0gMCBbc3ViXSIpOworCXJldHVybiAwOworCithcHBlbmRfdG9fcHJldmlvdXNfd2I6CisJX2RlYnVnKCJhcHBlbmQgaW50byAlbHgtJWx4Iiwgd2ItPmZpcnN0LCB3Yi0+bGFzdCk7CisJd2ItPnVzYWdlKys7CisJd2ItPmxhc3QrKzsKKwl3Yi0+dG9fbGFzdCA9IHRvOworCXNwaW5fdW5sb2NrKCZ2bm9kZS0+d3JpdGViYWNrX2xvY2spOworCVNldFBhZ2VQcml2YXRlKHBhZ2UpOworCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgKHVuc2lnbmVkIGxvbmcpIHdiKTsKKwlrZnJlZShjYW5kaWRhdGUpOworCV9sZWF2ZSgiID0gMCBbYXBwXSIpOworCXJldHVybiAwOworCisJLyogdGhlIHBhZ2UgaXMgY3VycmVudGx5IGJvdW5kIHRvIGFub3RoZXIgY29udGV4dCwgc28gaWYgaXQncyBkaXJ0eSB3ZQorCSAqIG5lZWQgdG8gZmx1c2ggaXQgYmVmb3JlIHdlIGNhbiB1c2UgdGhlIG5ldyBjb250ZXh0ICovCitmbHVzaF9jb25mbGljdGluZ193YjoKKwlfZGVidWcoImZsdXNoIGNvbmZsaWN0Iik7CisJaWYgKHdiLT5zdGF0ZSA9PSBBRlNfV0JBQ0tfUEVORElORykKKwkJd2ItPnN0YXRlID0gQUZTX1dCQUNLX0NPTkZMSUNUSU5HOworCXNwaW5fdW5sb2NrKCZ2bm9kZS0+d3JpdGViYWNrX2xvY2spOworCWlmIChQYWdlRGlydHkocGFnZSkpIHsKKwkJcmV0ID0gYWZzX3dyaXRlX2JhY2tfZnJvbV9sb2NrZWRfcGFnZSh3YiwgcGFnZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlhZnNfcHV0X3dyaXRlYmFjayhjYW5kaWRhdGUpOworCQkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJLyogdGhlIHBhZ2UgaG9sZHMgYSByZWYgb24gdGhlIHdyaXRlYmFjayByZWNvcmQgKi8KKwlhZnNfcHV0X3dyaXRlYmFjayh3Yik7CisJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKKwlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOworCWdvdG8gdHJ5X2FnYWluOworfQorCisvKgorICogZmluYWxpc2UgcGFydCBvZiBhIHdyaXRlIHRvIGEgcGFnZQorICovCitpbnQgYWZzX2NvbW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCSAgICAgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCB0bykKK3sKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlsb2ZmX3QgaV9zaXplLCBtYXliZV9pX3NpemU7CisKKwlfZW50ZXIoInsleDoldX0seyVseH0sJXUsJXUiLAorCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgcGFnZS0+aW5kZXgsIG9mZnNldCwgdG8pOworCisJbWF5YmVfaV9zaXplID0gKGxvZmZfdCkgcGFnZS0+aW5kZXggPDwgUEFHRV9TSElGVDsKKwltYXliZV9pX3NpemUgKz0gdG87CisKKwlpX3NpemUgPSBpX3NpemVfcmVhZCgmdm5vZGUtPnZmc19pbm9kZSk7CisJaWYgKG1heWJlX2lfc2l6ZSA+IGlfc2l6ZSkgeworCQlzcGluX2xvY2soJnZub2RlLT53cml0ZWJhY2tfbG9jayk7CisJCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKCZ2bm9kZS0+dmZzX2lub2RlKTsKKwkJaWYgKG1heWJlX2lfc2l6ZSA+IGlfc2l6ZSkKKwkJCWlfc2l6ZV93cml0ZSgmdm5vZGUtPnZmc19pbm9kZSwgbWF5YmVfaV9zaXplKTsKKwkJc3Bpbl91bmxvY2soJnZub2RlLT53cml0ZWJhY2tfbG9jayk7CisJfQorCisJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCWlmIChQYWdlRGlydHkocGFnZSkpCisJCV9kZWJ1ZygiZGlydGllZCIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBraWxsIGFsbCB0aGUgcGFnZXMgaW4gdGhlIGdpdmVuIHJhbmdlCisgKi8KK3N0YXRpYyB2b2lkIGFmc19raWxsX3BhZ2VzKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBib29sIGVycm9yLAorCQkJICAgcGdvZmZfdCBmaXJzdCwgcGdvZmZfdCBsYXN0KQoreworCXN0cnVjdCBwYWdldmVjIHB2OworCXVuc2lnbmVkIGNvdW50LCBsb29wOworCisJX2VudGVyKCJ7JXg6JXV9LCVseC0lbHgiLAorCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgZmlyc3QsIGxhc3QpOworCisJcGFnZXZlY19pbml0KCZwdiwgMCk7CisKKwlkbyB7CisJCV9kZWJ1Zygia2lsbCAlbHgtJWx4IiwgZmlyc3QsIGxhc3QpOworCisJCWNvdW50ID0gbGFzdCAtIGZpcnN0ICsgMTsKKwkJaWYgKGNvdW50ID4gUEFHRVZFQ19TSVpFKQorCQkJY291bnQgPSBQQUdFVkVDX1NJWkU7CisJCXB2Lm5yID0gZmluZF9nZXRfcGFnZXNfY29udGlnKHZub2RlLT52ZnNfaW5vZGUuaV9tYXBwaW5nLAorCQkJCQkgICAgICBmaXJzdCwgY291bnQsIHB2LnBhZ2VzKTsKKwkJQVNTRVJUQ01QKHB2Lm5yLCA9PSwgY291bnQpOworCisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBjb3VudDsgbG9vcCsrKSB7CisJCQlDbGVhclBhZ2VVcHRvZGF0ZShwdi5wYWdlc1tsb29wXSk7CisJCQlpZiAoZXJyb3IpCisJCQkJU2V0UGFnZUVycm9yKHB2LnBhZ2VzW2xvb3BdKTsKKwkJCWVuZF9wYWdlX3dyaXRlYmFjayhwdi5wYWdlc1tsb29wXSk7CisJCX0KKworCQlfX3BhZ2V2ZWNfcmVsZWFzZSgmcHYpOworCX0gd2hpbGUgKGZpcnN0IDwgbGFzdCk7CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogc3luY2hyb25vdXNseSB3cml0ZSBiYWNrIHRoZSBsb2NrZWQgcGFnZSBhbmQgYW55IHN1YnNlcXVlbnQgbm9uLWxvY2tlZCBkaXJ0eQorICogcGFnZXMgYWxzbyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIHdyaXRlYmFjayByZWNvcmQKKyAqLworc3RhdGljIGludCBhZnNfd3JpdGVfYmFja19mcm9tX2xvY2tlZF9wYWdlKHN0cnVjdCBhZnNfd3JpdGViYWNrICp3YiwKKwkJCQkJICAgc3RydWN0IHBhZ2UgKnByaW1hcnlfcGFnZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbOF0sICpwYWdlOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJdW5zaWduZWQgbiwgb2Zmc2V0LCB0bzsKKwlwZ29mZl90IHN0YXJ0LCBmaXJzdCwgbGFzdDsKKwlpbnQgbG9vcCwgcmV0OworCisJX2VudGVyKCIsJWx4IiwgcHJpbWFyeV9wYWdlLT5pbmRleCk7CisKKwljb3VudCA9IDE7CisJaWYgKCFjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwcmltYXJ5X3BhZ2UpKQorCQlCVUcoKTsKKwlpZiAodGVzdF9zZXRfcGFnZV93cml0ZWJhY2socHJpbWFyeV9wYWdlKSkKKwkJQlVHKCk7CisKKwkvKiBmaW5kIGFsbCBjb25zZWN1dGl2ZSBsb2NrYWJsZSBkaXJ0eSBwYWdlcywgc3RvcHBpbmcgd2hlbiB3ZSBmaW5kIGEKKwkgKiBwYWdlIHRoYXQgaXMgbm90IGltbWVkaWF0ZWx5IGxvY2thYmxlLCBpcyBub3QgZGlydHkgb3IgaXMgbWlzc2luZywKKwkgKiBvciB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSByYW5nZSAqLworCXN0YXJ0ID0gcHJpbWFyeV9wYWdlLT5pbmRleDsKKwlpZiAoc3RhcnQgPj0gd2ItPmxhc3QpCisJCWdvdG8gbm9fbW9yZTsKKwlzdGFydCsrOworCWRvIHsKKwkJX2RlYnVnKCJtb3JlICVseCBbJWx4XSIsIHN0YXJ0LCBjb3VudCk7CisJCW4gPSB3Yi0+bGFzdCAtIHN0YXJ0ICsgMTsKKwkJaWYgKG4gPiBBUlJBWV9TSVpFKHBhZ2VzKSkKKwkJCW4gPSBBUlJBWV9TSVpFKHBhZ2VzKTsKKwkJbiA9IGZpbmRfZ2V0X3BhZ2VzX2NvbnRpZyh3Yi0+dm5vZGUtPnZmc19pbm9kZS5pX21hcHBpbmcsCisJCQkJCSAgc3RhcnQsIG4sIHBhZ2VzKTsKKwkJX2RlYnVnKCJmZ3BjICV1Iiwgbik7CisJCWlmIChuID09IDApCisJCQlnb3RvIG5vX21vcmU7CisJCWlmIChwYWdlc1swXS0+aW5kZXggIT0gc3RhcnQpIHsKKwkJCWRvIHsKKwkJCQlwdXRfcGFnZShwYWdlc1stLW5dKTsKKwkJCX0gd2hpbGUgKG4gPiAwKTsKKwkJCWdvdG8gbm9fbW9yZTsKKwkJfQorCisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBuOyBsb29wKyspIHsKKwkJCXBhZ2UgPSBwYWdlc1tsb29wXTsKKwkJCWlmIChwYWdlLT5pbmRleCA+IHdiLT5sYXN0KQorCQkJCWJyZWFrOworCQkJaWYgKFRlc3RTZXRQYWdlTG9ja2VkKHBhZ2UpKQorCQkJCWJyZWFrOworCQkJaWYgKCFQYWdlRGlydHkocGFnZSkgfHwKKwkJCSAgICBwYWdlX3ByaXZhdGUocGFnZSkgIT0gKHVuc2lnbmVkIGxvbmcpIHdiKSB7CisJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIWNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpKQorCQkJCUJVRygpOworCQkJaWYgKHRlc3Rfc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpKQorCQkJCUJVRygpOworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlwdXRfcGFnZShwYWdlKTsKKwkJfQorCQljb3VudCArPSBsb29wOworCQlpZiAobG9vcCA8IG4pIHsKKwkJCWZvciAoOyBsb29wIDwgbjsgbG9vcCsrKQorCQkJCXB1dF9wYWdlKHBhZ2VzW2xvb3BdKTsKKwkJCWdvdG8gbm9fbW9yZTsKKwkJfQorCisJCXN0YXJ0ICs9IGxvb3A7CisJfSB3aGlsZSAoc3RhcnQgPD0gd2ItPmxhc3QgJiYgY291bnQgPCA2NTUzNik7CisKK25vX21vcmU6CisJLyogd2Ugbm93IGhhdmUgYSBjb250aWd1b3VzIHNldCBvZiBkaXJ0eSBwYWdlcywgZWFjaCB3aXRoIHdyaXRlYmFjayBzZXQKKwkgKiBhbmQgdGhlIGRpcnR5IG1hcmsgY2xlYXJlZDsgdGhlIGZpcnN0IHBhZ2UgaXMgbG9ja2VkIGFuZCBtdXN0IHJlbWFpbgorCSAqIHNvLCBhbGwgdGhlIHJlc3QgYXJlIHVubG9ja2VkICovCisJZmlyc3QgPSBwcmltYXJ5X3BhZ2UtPmluZGV4OworCWxhc3QgPSBmaXJzdCArIGNvdW50IC0gMTsKKworCW9mZnNldCA9IChmaXJzdCA9PSB3Yi0+Zmlyc3QpID8gd2ItPm9mZnNldF9maXJzdCA6IDA7CisJdG8gPSAobGFzdCA9PSB3Yi0+bGFzdCkgPyB3Yi0+dG9fbGFzdCA6IFBBR0VfU0laRTsKKworCV9kZWJ1Zygid3JpdGUgYmFjayAlbHhbJXUuLl0gdG8gJWx4Wy4uJXVdIiwgZmlyc3QsIG9mZnNldCwgbGFzdCwgdG8pOworCisJcmV0ID0gYWZzX3Zub2RlX3N0b3JlX2RhdGEod2IsIGZpcnN0LCBsYXN0LCBvZmZzZXQsIHRvKTsKKwlpZiAocmV0IDwgMCkgeworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIC1FRFFVT1Q6CisJCWNhc2UgLUVOT1NQQzoKKwkJCXNldF9iaXQoQVNfRU5PU1BDLAorCQkJCSZ3Yi0+dm5vZGUtPnZmc19pbm9kZS5pX21hcHBpbmctPmZsYWdzKTsKKwkJCWJyZWFrOworCQljYXNlIC1FUk9GUzoKKwkJY2FzZSAtRUlPOgorCQljYXNlIC1FUkVNT1RFSU86CisJCWNhc2UgLUVGQklHOgorCQljYXNlIC1FTk9FTlQ6CisJCWNhc2UgLUVOT01FRElVTToKKwkJY2FzZSAtRU5YSU86CisJCQlhZnNfa2lsbF9wYWdlcyh3Yi0+dm5vZGUsIHRydWUsIGZpcnN0LCBsYXN0KTsKKwkJCXNldF9iaXQoQVNfRUlPLCAmd2ItPnZub2RlLT52ZnNfaW5vZGUuaV9tYXBwaW5nLT5mbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSAtRUFDQ0VTOgorCQljYXNlIC1FUEVSTToKKwkJY2FzZSAtRU5PS0VZOgorCQljYXNlIC1FS0VZRVhQSVJFRDoKKwkJY2FzZSAtRUtFWVJFSkVDVEVEOgorCQljYXNlIC1FS0VZUkVWT0tFRDoKKwkJCWFmc19raWxsX3BhZ2VzKHdiLT52bm9kZSwgZmFsc2UsIGZpcnN0LCBsYXN0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBjb3VudDsKKwl9CisKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogd3JpdGUgYSBwYWdlIGJhY2sgdG8gdGhlIHNlcnZlcgorICogLSB0aGUgY2FsbGVyIGxvY2tlZCB0aGUgcGFnZSBmb3IgdXMKKyAqLworaW50IGFmc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBwYWdlLT5tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOworCXN0cnVjdCBhZnNfd3JpdGViYWNrICp3YjsKKwlpbnQgcmV0OworCisJX2VudGVyKCJ7JWx4fSwiLCBwYWdlLT5pbmRleCk7CisKKwl3YiA9IChzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqKSBwYWdlX3ByaXZhdGUocGFnZSk7CisJQVNTRVJUKHdiICE9IE5VTEwpOworCisJcmV0ID0gYWZzX3dyaXRlX2JhY2tfZnJvbV9sb2NrZWRfcGFnZSh3YiwgcGFnZSk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CisJaWYgKHJldCA8IDApIHsKKwkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCXJldHVybiAwOworCX0KKworCXdiYy0+bnJfdG9fd3JpdGUgLT0gcmV0OworCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkKKwkJd2JjLT5lbmNvdW50ZXJlZF9jb25nZXN0aW9uID0gMTsKKworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworfQorCisvKgorICogd3JpdGUgYSByZWdpb24gb2YgcGFnZXMgYmFjayB0byB0aGUgc2VydmVyCisgKi8KK2ludCBhZnNfd3JpdGVwYWdlc19yZWdpb24oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLAorCQkJICBwZ29mZl90IGluZGV4LCBwZ29mZl90IGVuZCwgcGdvZmZfdCAqX25leHQpCit7CisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87CisJc3RydWN0IGFmc193cml0ZWJhY2sgKndiOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQsIG47CisKKwlfZW50ZXIoIiwsJWx4LCVseCwiLCBpbmRleCwgZW5kKTsKKworCWRvIHsKKwkJbiA9IGZpbmRfZ2V0X3BhZ2VzX3RhZyhtYXBwaW5nLCAmaW5kZXgsIFBBR0VDQUNIRV9UQUdfRElSVFksCisJCQkJICAgICAgIDEsICZwYWdlKTsKKwkJaWYgKCFuKQorCQkJYnJlYWs7CisKKwkJX2RlYnVnKCJ3YmFjayAlbHgiLCBwYWdlLT5pbmRleCk7CisKKwkJaWYgKHBhZ2UtPmluZGV4ID4gZW5kKSB7CisJCQkqX25leHQgPSBpbmRleDsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCV9sZWF2ZSgiID0gMCBbJWx4XSIsICpfbmV4dCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIGF0IHRoaXMgcG9pbnQgd2UgaG9sZCBuZWl0aGVyIG1hcHBpbmctPnRyZWVfbG9jayBub3IgbG9jayBvbgorCQkgKiB0aGUgcGFnZSBpdHNlbGY6IHRoZSBwYWdlIG1heSBiZSB0cnVuY2F0ZWQgb3IgaW52YWxpZGF0ZWQKKwkJICogKGNoYW5naW5nIHBhZ2UtPm1hcHBpbmcgdG8gTlVMTCksIG9yIGV2ZW4gc3dpenpsZWQgYmFjayBmcm9tCisJCSAqIHN3YXBwZXJfc3BhY2UgdG8gdG1wZnMgZmlsZSBtYXBwaW5nCisJCSAqLworCQlsb2NrX3BhZ2UocGFnZSk7CisKKwkJaWYgKHBhZ2UtPm1hcHBpbmcgIT0gbWFwcGluZykgeworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh3YmMtPnN5bmNfbW9kZSAhPSBXQl9TWU5DX05PTkUpCisJCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCisJCWlmIChQYWdlV3JpdGViYWNrKHBhZ2UpIHx8ICFQYWdlRGlydHkocGFnZSkpIHsKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJY29udGludWU7CisJCX0KKworCQl3YiA9IChzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqKSBwYWdlX3ByaXZhdGUocGFnZSk7CisJCUFTU0VSVCh3YiAhPSBOVUxMKTsKKworCQlzcGluX2xvY2soJndiLT52bm9kZS0+d3JpdGViYWNrX2xvY2spOworCQl3Yi0+c3RhdGUgPSBBRlNfV0JBQ0tfV1JJVElORzsKKwkJc3Bpbl91bmxvY2soJndiLT52bm9kZS0+d3JpdGViYWNrX2xvY2spOworCisJCXJldCA9IGFmc193cml0ZV9iYWNrX2Zyb21fbG9ja2VkX3BhZ2Uod2IsIHBhZ2UpOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlpZiAocmV0IDwgMCkgeworCQkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJd2JjLT5ucl90b193cml0ZSAtPSByZXQ7CisKKwkJaWYgKHdiYy0+bm9uYmxvY2tpbmcgJiYgYmRpX3dyaXRlX2Nvbmdlc3RlZChiZGkpKSB7CisJCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOworCQkJYnJlYWs7CisJCX0KKworCQljb25kX3Jlc2NoZWQoKTsKKwl9IHdoaWxlIChpbmRleCA8IGVuZCAmJiB3YmMtPm5yX3RvX3dyaXRlID4gMCk7CisKKwkqX25leHQgPSBpbmRleDsKKwlfbGVhdmUoIiA9IDAgWyVseF0iLCAqX25leHQpOworCXJldHVybiAwOworfQorCisvKgorICogd3JpdGUgc29tZSBvZiB0aGUgcGVuZGluZyBkYXRhIGJhY2sgdG8gdGhlIHNlcnZlcgorICovCitpbnQgYWZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCSAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOworCXBnb2ZmX3Qgc3RhcnQsIGVuZCwgbmV4dDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIiKTsKKworCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgeworCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOworCQlfbGVhdmUoIiA9IDAgW2Nvbmdlc3RdIik7CisJCXJldHVybiAwOworCX0KKworCWlmICh3YmMtPnJhbmdlX2N5Y2xpYykgeworCQlzdGFydCA9IG1hcHBpbmctPndyaXRlYmFja19pbmRleDsKKwkJZW5kID0gLTE7CisJCXJldCA9IGFmc193cml0ZXBhZ2VzX3JlZ2lvbihtYXBwaW5nLCB3YmMsIHN0YXJ0LCBlbmQsICZuZXh0KTsKKwkJaWYgKHN0YXJ0ID4gMCAmJiB3YmMtPm5yX3RvX3dyaXRlID4gMCAmJiByZXQgPT0gMCAmJgorCQkgICAgISh3YmMtPm5vbmJsb2NraW5nICYmIHdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbikpCisJCQlyZXQgPSBhZnNfd3JpdGVwYWdlc19yZWdpb24obWFwcGluZywgd2JjLCAwLCBzdGFydCwKKwkJCQkJCSAgICAmbmV4dCk7CisJCW1hcHBpbmctPndyaXRlYmFja19pbmRleCA9IG5leHQ7CisJfSBlbHNlIGlmICh3YmMtPnJhbmdlX3N0YXJ0ID09IDAgJiYgd2JjLT5yYW5nZV9lbmQgPT0gTExPTkdfTUFYKSB7CisJCWVuZCA9IChwZ29mZl90KShMTE9OR19NQVggPj4gUEFHRV9DQUNIRV9TSElGVCk7CisJCXJldCA9IGFmc193cml0ZXBhZ2VzX3JlZ2lvbihtYXBwaW5nLCB3YmMsIDAsIGVuZCwgJm5leHQpOworCQlpZiAod2JjLT5ucl90b193cml0ZSA+IDApCisJCQltYXBwaW5nLT53cml0ZWJhY2tfaW5kZXggPSBuZXh0OworCX0gZWxzZSB7CisJCXN0YXJ0ID0gd2JjLT5yYW5nZV9zdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZUOworCQllbmQgPSB3YmMtPnJhbmdlX2VuZCA+PiBQQUdFX0NBQ0hFX1NISUZUOworCQlyZXQgPSBhZnNfd3JpdGVwYWdlc19yZWdpb24obWFwcGluZywgd2JjLCBzdGFydCwgZW5kLCAmbmV4dCk7CisJfQorCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHdyaXRlIGFuIGlub2RlIGJhY2sKKyAqLworaW50IGFmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc3luYykKK3sKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTsKKwlpbnQgcmV0OworCisJX2VudGVyKCJ7JXg6JXV9LCIsIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlKTsKKworCXJldCA9IDA7CisJaWYgKHN5bmMpIHsKKwkJcmV0ID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCWlmIChyZXQgPCAwKQorCQkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX0RBVEFTWU5DKTsKKwl9CisKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogY29tcGxldGlvbiBvZiB3cml0ZSB0byBzZXJ2ZXIKKyAqLwordm9pZCBhZnNfcGFnZXNfd3JpdHRlbl9iYWNrKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpCit7CisJc3RydWN0IGFmc193cml0ZWJhY2sgKndiID0gY2FsbC0+d2I7CisJc3RydWN0IHBhZ2V2ZWMgcHY7CisJdW5zaWduZWQgY291bnQsIGxvb3A7CisJcGdvZmZfdCBmaXJzdCA9IGNhbGwtPmZpcnN0LCBsYXN0ID0gY2FsbC0+bGFzdDsKKwlib29sIGZyZWVfd2I7CisKKwlfZW50ZXIoInsleDoldX0seyVseC0lbHh9IiwKKwkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIGZpcnN0LCBsYXN0KTsKKworCUFTU0VSVCh3YiAhPSBOVUxMKTsKKworCXBhZ2V2ZWNfaW5pdCgmcHYsIDApOworCisJZG8geworCQlfZGVidWcoImRvbmUgJWx4LSVseCIsIGZpcnN0LCBsYXN0KTsKKworCQljb3VudCA9IGxhc3QgLSBmaXJzdCArIDE7CisJCWlmIChjb3VudCA+IFBBR0VWRUNfU0laRSkKKwkJCWNvdW50ID0gUEFHRVZFQ19TSVpFOworCQlwdi5uciA9IGZpbmRfZ2V0X3BhZ2VzX2NvbnRpZyhjYWxsLT5tYXBwaW5nLCBmaXJzdCwgY291bnQsCisJCQkJCSAgICAgIHB2LnBhZ2VzKTsKKwkJQVNTRVJUQ01QKHB2Lm5yLCA9PSwgY291bnQpOworCisJCXNwaW5fbG9jaygmdm5vZGUtPndyaXRlYmFja19sb2NrKTsKKwkJZm9yIChsb29wID0gMDsgbG9vcCA8IGNvdW50OyBsb29wKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHYucGFnZXNbbG9vcF07CisJCQllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7CisJCQlpZiAocGFnZV9wcml2YXRlKHBhZ2UpID09ICh1bnNpZ25lZCBsb25nKSB3YikgeworCQkJCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7CisJCQkJQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKKwkJCQl3Yi0+dXNhZ2UtLTsKKwkJCX0KKwkJfQorCQlmcmVlX3diID0gZmFsc2U7CisJCWlmICh3Yi0+dXNhZ2UgPT0gMCkgeworCQkJYWZzX3VubGlua193cml0ZWJhY2sod2IpOworCQkJZnJlZV93YiA9IHRydWU7CisJCX0KKwkJc3Bpbl91bmxvY2soJnZub2RlLT53cml0ZWJhY2tfbG9jayk7CisJCWZpcnN0ICs9IGNvdW50OworCQlpZiAoZnJlZV93YikgeworCQkJYWZzX2ZyZWVfd3JpdGViYWNrKHdiKTsKKwkJCXdiID0gTlVMTDsKKwkJfQorCisJCV9fcGFnZXZlY19yZWxlYXNlKCZwdik7CisJfSB3aGlsZSAoZmlyc3QgPD0gbGFzdCk7CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogd3JpdGUgdG8gYW4gQUZTIGZpbGUKKyAqLworc3NpemVfdCBhZnNfZmlsZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnk7CisJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShkZW50cnktPmRfaW5vZGUpOworCXNzaXplX3QgcmVzdWx0OworCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKKwlpbnQgcmV0OworCisJX2VudGVyKCJ7JXguJXV9LHslenV9LCVsdSwiLAorCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgY291bnQsIG5yX3NlZ3MpOworCisJaWYgKElTX1NXQVBGSUxFKCZ2bm9kZS0+dmZzX2lub2RlKSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiQUZTOiBBdHRlbXB0IHRvIHdyaXRlIHRvIGFjdGl2ZSBzd2FwIGZpbGUhXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCXJlc3VsdCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOworCWlmIChJU19FUlJfVkFMVUUocmVzdWx0KSkgeworCQlfbGVhdmUoIiA9ICV6ZCIsIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyogcmV0dXJuIGVycm9yIHZhbHVlcyBmb3IgT19TWU5DIGFuZCBJU19TWU5DKCkgKi8KKwlpZiAoSVNfU1lOQygmdm5vZGUtPnZmc19pbm9kZSkgfHwgaW9jYi0+a2lfZmlscC0+Zl9mbGFncyAmIE9fU1lOQykgeworCQlyZXQgPSBhZnNfZnN5bmMoaW9jYi0+a2lfZmlscCwgZGVudHJ5LCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXN1bHQgPSByZXQ7CisJfQorCisJX2xlYXZlKCIgPSAlemQiLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBmbHVzaCB0aGUgdm5vZGUgdG8gdGhlIGZpbGVzZXJ2ZXIKKyAqLworaW50IGFmc193cml0ZWJhY2tfYWxsKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gdm5vZGUtPnZmc19pbm9kZS5pX21hcHBpbmc7CisJc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKKwkJLmJkaQkJPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLAorCQkuc3luY19tb2RlCT0gV0JfU1lOQ19BTEwsCisJCS5ucl90b193cml0ZQk9IExPTkdfTUFYLAorCQkuZm9yX3dyaXRlcGFnZXMgPSAxLAorCQkucmFuZ2VfY3ljbGljCT0gMSwKKwl9OworCWludCByZXQ7CisKKwlfZW50ZXIoIiIpOworCisJcmV0ID0gbWFwcGluZy0+YV9vcHMtPndyaXRlcGFnZXMobWFwcGluZywgJndiYyk7CisJX19tYXJrX2lub2RlX2RpcnR5KG1hcHBpbmctPmhvc3QsIElfRElSVFlfUEFHRVMpOworCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGZsdXNoIGFueSBkaXJ0eSBwYWdlcyBmb3IgdGhpcyBwcm9jZXNzLCBhbmQgY2hlY2sgZm9yIHdyaXRlIGVycm9ycy4KKyAqIC0gdGhlIHJldHVybiBzdGF0dXMgZnJvbSB0aGlzIGNhbGwgcHJvdmlkZXMgYSByZWxpYWJsZSBpbmRpY2F0aW9uIG9mCisgKiAgIHdoZXRoZXIgYW55IHdyaXRlIGVycm9ycyBvY2N1cnJlZCBmb3IgdGhpcyBwcm9jZXNzLgorICovCitpbnQgYWZzX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKK3sKKwlzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqd2IsICp4d2I7CisJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShkZW50cnktPmRfaW5vZGUpOworCWludCByZXQ7CisKKwlfZW50ZXIoInsleDoldX0se249JXN9LCVkIiwKKwkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJICAgICAgIGRhdGFzeW5jKTsKKworCS8qIHVzZSBhIHdyaXRlYmFjayByZWNvcmQgYXMgYSBtYXJrZXIgaW4gdGhlIHF1ZXVlIC0gd2hlbiB0aGlzIHJlYWNoZXMKKwkgKiB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlLCBhbGwgdGhlIG91dHN0YW5kaW5nIHdyaXRlcyBhcmUgZWl0aGVyCisJICogY29tcGxldGVkIG9yIHJlamVjdGVkICovCisJd2IgPSBremFsbG9jKHNpemVvZigqd2IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdiKQorCQlyZXR1cm4gLUVOT01FTTsKKwl3Yi0+dm5vZGUgPSB2bm9kZTsKKwl3Yi0+Zmlyc3QgPSAwOworCXdiLT5sYXN0ID0gLTE7CisJd2ItPm9mZnNldF9maXJzdCA9IDA7CisJd2ItPnRvX2xhc3QgPSBQQUdFX1NJWkU7CisJd2ItPnVzYWdlID0gMTsKKwl3Yi0+c3RhdGUgPSBBRlNfV0JBQ0tfU1lOQ0lORzsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3Yi0+d2FpdHEpOworCisJc3Bpbl9sb2NrKCZ2bm9kZS0+d3JpdGViYWNrX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoeHdiLCAmdm5vZGUtPndyaXRlYmFja3MsIGxpbmspIHsKKwkJaWYgKHh3Yi0+c3RhdGUgPT0gQUZTX1dCQUNLX1BFTkRJTkcpCisJCQl4d2ItPnN0YXRlID0gQUZTX1dCQUNLX0NPTkZMSUNUSU5HOworCX0KKwlsaXN0X2FkZF90YWlsKCZ3Yi0+bGluaywgJnZub2RlLT53cml0ZWJhY2tzKTsKKwlzcGluX3VubG9jaygmdm5vZGUtPndyaXRlYmFja19sb2NrKTsKKworCS8qIHB1c2ggYWxsIHRoZSBvdXRzdGFuZGluZyB3cml0ZWJhY2tzIHRvIHRoZSBzZXJ2ZXIgKi8KKwlyZXQgPSBhZnNfd3JpdGViYWNrX2FsbCh2bm9kZSk7CisJaWYgKHJldCA8IDApIHsKKwkJYWZzX3B1dF93cml0ZWJhY2sod2IpOworCQlfbGVhdmUoIiA9ICVkIFt3Yl0iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHdhaXQgZm9yIHRoZSBwcmVjZWRpbmcgd3JpdGVzIHRvIGFjdHVhbGx5IGNvbXBsZXRlICovCisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHdiLT53YWl0cSwKKwkJCQkgICAgICAgd2ItPnN0YXRlID09IEFGU19XQkFDS19DT01QTEVURSB8fAorCQkJCSAgICAgICB2bm9kZS0+d3JpdGViYWNrcy5uZXh0ID09ICZ3Yi0+bGluayk7CisJYWZzX3B1dF93cml0ZWJhY2sod2IpOworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IGI5N2FiODAuLmRiZTY5OWUgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCisrKyBiL2ZzL2Fpby5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvZXZlbnRmZC5oPgogCiAjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMzQ2LDEwICszNDcsOSBAQAogCiAJCXdhaXRfZm9yX2FsbF9haW9zKGN0eCk7CiAJCS8qCi0JCSAqIHRoaXMgaXMgYW4gb3ZlcmtpbGwsIGJ1dCBlbnN1cmVzIHdlIGRvbid0IGxlYXZlCi0JCSAqIHRoZSBjdHggb24gdGhlIGFpb193cQorCQkgKiBFbnN1cmUgd2UgZG9uJ3QgbGVhdmUgdGhlIGN0eCBvbiB0aGUgYWlvX3dxCiAJCSAqLwotCQlmbHVzaF93b3JrcXVldWUoYWlvX3dxKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmY3R4LT53cS53b3JrKTsKIAogCQlpZiAoMSAhPSBhdG9taWNfcmVhZCgmY3R4LT51c2VycykpCiAJCQlwcmludGsoS0VSTl9ERUJVRwpAQCAtMzcyLDcgKzM3Miw3IEBACiAJQlVHX09OKGN0eC0+cmVxc19hY3RpdmUpOwogCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmY3R4LT53cSk7Ci0JZmx1c2hfd29ya3F1ZXVlKGFpb193cSk7CisJY2FuY2VsX3dvcmtfc3luYygmY3R4LT53cS53b3JrKTsKIAlhaW9fZnJlZV9yaW5nKGN0eCk7CiAJbW1kcm9wKGN0eC0+bW0pOwogCWN0eC0+bW0gPSBOVUxMOwpAQCAtNDE4LDYgKzQxOCw3IEBACiAJcmVxLT5wcml2YXRlID0gTlVMTDsKIAlyZXEtPmtpX2lvdmVjID0gTlVMTDsKIAlJTklUX0xJU1RfSEVBRCgmcmVxLT5raV9ydW5fbGlzdCk7CisJcmVxLT5raV9ldmVudGZkID0gRVJSX1BUUigtRUlOVkFMKTsKIAogCS8qIENoZWNrIGlmIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGhhcyBlbm91Z2ggZnJlZSBzcGFjZSB0bwogCSAqIGFjY2VwdCBhbiBldmVudCBmcm9tIHRoaXMgaW8uCkBAIC00NTksNiArNDYwLDggQEAKIHsKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmN0eC0+Y3R4X2xvY2spOwogCisJaWYgKCFJU19FUlIocmVxLT5raV9ldmVudGZkKSkKKwkJZnB1dChyZXEtPmtpX2V2ZW50ZmQpOwogCWlmIChyZXEtPmtpX2R0b3IpCiAJCXJlcS0+a2lfZHRvcihyZXEpOwogCWlmIChyZXEtPmtpX2lvdmVjICE9ICZyZXEtPmtpX2lubGluZV92ZWMpCkBAIC05NDMsNiArOTQ2LDE0IEBACiAJCXJldHVybiAxOwogCX0KIAorCS8qCisJICogQ2hlY2sgaWYgdGhlIHVzZXIgYXNrZWQgdXMgdG8gZGVsaXZlciB0aGUgcmVzdWx0IHRocm91Z2ggYW4KKwkgKiBldmVudGZkLiBUaGUgZXZlbnRmZF9zaWduYWwoKSBmdW5jdGlvbiBpcyBzYWZlIHRvIGJlIGNhbGxlZAorCSAqIGZyb20gSVJRIGNvbnRleHQuCisJICovCisJaWYgKCFJU19FUlIoaW9jYi0+a2lfZXZlbnRmZCkpCisJCWV2ZW50ZmRfc2lnbmFsKGlvY2ItPmtpX2V2ZW50ZmQsIDEpOworCiAJaW5mbyA9ICZjdHgtPnJpbmdfaW5mbzsKIAogCS8qIGFkZCBhIGNvbXBsZXRpb24gZXZlbnQgdG8gdGhlIHJpbmcgYnVmZmVyLgpAQCAtMTUyNyw4ICsxNTM4LDcgQEAKIAlzc2l6ZV90IHJldDsKIAogCS8qIGVuZm9yY2UgZm9yd2FyZHMgY29tcGF0aWJpbGl0eSBvbiB1c2VycyAqLwotCWlmICh1bmxpa2VseShpb2NiLT5haW9fcmVzZXJ2ZWQxIHx8IGlvY2ItPmFpb19yZXNlcnZlZDIgfHwKLQkJICAgICBpb2NiLT5haW9fcmVzZXJ2ZWQzKSkgeworCWlmICh1bmxpa2VseShpb2NiLT5haW9fcmVzZXJ2ZWQxIHx8IGlvY2ItPmFpb19yZXNlcnZlZDIpKSB7CiAJCXByX2RlYnVnKCJFSU5WQUw6IGlvX3N1Ym1pdDogcmVzZXJ2ZSBmaWVsZCBzZXRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNTUyLDYgKzE1NjIsMTkgQEAKIAkJZnB1dChmaWxlKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQorCWlmIChpb2NiLT5haW9fZmxhZ3MgJiBJT0NCX0ZMQUdfUkVTRkQpIHsKKwkJLyoKKwkJICogSWYgdGhlIElPQ0JfRkxBR19SRVNGRCBmbGFnIG9mIGFpb19mbGFncyBpcyBzZXQsIGdldCBhbgorCQkgKiBpbnN0YW5jZSBvZiB0aGUgZmlsZSogbm93LiBUaGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgYmUKKwkJICogYW4gZXZlbnRmZCgpIGZkLCBhbmQgd2lsbCBiZSBzaWduYWxlZCBmb3IgZWFjaCBjb21wbGV0ZWQKKwkJICogZXZlbnQgdXNpbmcgdGhlIGV2ZW50ZmRfc2lnbmFsKCkgZnVuY3Rpb24uCisJCSAqLworCQlyZXEtPmtpX2V2ZW50ZmQgPSBldmVudGZkX2ZnZXQoKGludCkgaW9jYi0+YWlvX3Jlc2ZkKTsKKwkJaWYgKHVubGlrZWx5KElTX0VSUihyZXEtPmtpX2V2ZW50ZmQpKSkgeworCQkJcmV0ID0gUFRSX0VSUihyZXEtPmtpX2V2ZW50ZmQpOworCQkJZ290byBvdXRfcHV0X3JlcTsKKwkJfQorCX0KIAogCXJlcS0+a2lfZmlscCA9IGZpbGU7CiAJcmV0ID0gcHV0X3VzZXIocmVxLT5raV9rZXksICZ1c2VyX2lvY2ItPmFpb19rZXkpOwpkaWZmIC0tZ2l0IGEvZnMvYW5vbl9pbm9kZXMuYyBiL2ZzL2Fub25faW5vZGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmZTNhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2Fub25faW5vZGVzLmMKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiAgZnMvYW5vbl9pbm9kZXMuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKiAgVGhhbmtzIHRvIEFybmQgQmVyZ21hbm4gZm9yIGNvZGUgcmV2aWV3IGFuZCBzdWdnZXN0aW9ucy4KKyAqICBNb3JlIGNoYW5nZXMgZm9yIFRob21hcyBHbGVpeG5lciBzdWdnZXN0aW9ucy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqYW5vbl9pbm9kZV9tbnQgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFub25faW5vZGVfaW5vZGU7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhbm9uX2lub2RlX2ZvcHM7CisKK3N0YXRpYyBpbnQgYW5vbl9pbm9kZWZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhLAorCQkJICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCXJldHVybiBnZXRfc2JfcHNldWRvKGZzX3R5cGUsICJhbm9uX2lub2RlOiIsIE5VTEwsIEFOT05fSU5PREVfRlNfTUFHSUMsCisJCQkgICAgIG1udCk7Cit9CisKK3N0YXRpYyBpbnQgYW5vbl9pbm9kZWZzX2RlbGV0ZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCS8qCisJICogV2UgZmFrZWQgdmZzIHRvIGJlbGlldmUgdGhlIGRlbnRyeSB3YXMgaGFzaGVkIHdoZW4gd2UgY3JlYXRlZCBpdC4KKwkgKiBOb3cgd2UgcmVzdG9yZSB0aGUgZmxhZyBzbyB0aGF0IGRwdXQoKSB3aWxsIHdvcmsgY29ycmVjdGx5LgorCSAqLworCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfVU5IQVNIRUQ7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBhbm9uX2lub2RlX2ZzX3R5cGUgPSB7CisJLm5hbWUJCT0gImFub25faW5vZGVmcyIsCisJLmdldF9zYgkJPSBhbm9uX2lub2RlZnNfZ2V0X3NiLAorCS5raWxsX3NiCT0ga2lsbF9hbm9uX3N1cGVyLAorfTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYW5vbl9pbm9kZWZzX2RlbnRyeV9vcGVyYXRpb25zID0geworCS5kX2RlbGV0ZQk9IGFub25faW5vZGVmc19kZWxldGVfZGVudHJ5LAorfTsKKworLyoqCisgKiBhbm9uX2lub2RlX2dldGZkIC0gY3JlYXRlcyBhIG5ldyBmaWxlIGluc3RhbmNlIGJ5IGhvb2tpbmcgaXQgdXAgdG8gYW5kCisgKiAgICAgICAgICAgICAgICAgICAgYW5vbnltb3VzIGlub2RlLCBhbmQgYSBkZW50cnkgdGhhdCBkZXNjcmliZSB0aGUgImNsYXNzIgorICogICAgICAgICAgICAgICAgICAgIG9mIHRoZSBmaWxlCisgKgorICogQHBmZDogICAgIFtvdXRdICAgcG9pbnRlciB0byB0aGUgZmlsZSBkZXNjcmlwdG9yCisgKiBAZHBpbm9kZTogW291dF0gICBwb2ludGVyIHRvIHRoZSBpbm9kZQorICogQHBmaWxlOiAgIFtvdXRdICAgcG9pbnRlciB0byB0aGUgZmlsZSBzdHJ1Y3QKKyAqIEBuYW1lOiAgICBbaW5dICAgIG5hbWUgb2YgdGhlICJjbGFzcyIgb2YgdGhlIG5ldyBmaWxlCisgKiBAZm9wcyAgICAgW2luXSAgICBmaWxlIG9wZXJhdGlvbnMgZm9yIHRoZSBuZXcgZmlsZQorICogQHByaXYgICAgIFtpbl0gICAgcHJpdmF0ZSBkYXRhIGZvciB0aGUgbmV3IGZpbGUgKHdpbGwgYmUgZmlsZSdzIHByaXZhdGVfZGF0YSkKKyAqCisgKiBDcmVhdGVzIGEgbmV3IGZpbGUgYnkgaG9va2luZyBpdCBvbiBhIHNpbmdsZSBpbm9kZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGZpbGVzCisgKiB0aGF0IGRvIG5vdCBuZWVkIHRvIGhhdmUgYSBmdWxsLWZsZWRnZWQgaW5vZGUgaW4gb3JkZXIgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuCisgKiBBbGwgdGhlIGZpbGVzIGNyZWF0ZWQgd2l0aCBhbm9uX2lub2RlX2dldGZkKCkgd2lsbCBzaGFyZSBhIHNpbmdsZSBpbm9kZSwgYnkKKyAqIGhlbmNlIHNhdmluZyBtZW1vcnkgYW5kIGF2b2lkaW5nIGNvZGUgZHVwbGljYXRpb24gZm9yIHRoZSBmaWxlL2lub2RlL2RlbnRyeQorICogc2V0dXAuCisgKi8KK2ludCBhbm9uX2lub2RlX2dldGZkKGludCAqcGZkLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsIHN0cnVjdCBmaWxlICoqcGZpbGUsCisJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKKwkJICAgICB2b2lkICpwcml2KQoreworCXN0cnVjdCBxc3RyIHRoaXM7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJaW50IGVycm9yLCBmZDsKKworCWlmIChJU19FUlIoYW5vbl9pbm9kZV9pbm9kZSkpCisJCXJldHVybiAtRU5PREVWOworCWZpbGUgPSBnZXRfZW1wdHlfZmlscCgpOworCWlmICghZmlsZSkKKwkJcmV0dXJuIC1FTkZJTEU7CisKKwlpbm9kZSA9IGlncmFiKGFub25faW5vZGVfaW5vZGUpOworCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCWVycm9yID0gUFRSX0VSUihpbm9kZSk7CisJCWdvdG8gZXJyX3B1dF9maWxwOworCX0KKworCWVycm9yID0gZ2V0X3VudXNlZF9mZCgpOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gZXJyX2lwdXQ7CisJZmQgPSBlcnJvcjsKKworCS8qCisJICogTGluayB0aGUgaW5vZGUgdG8gYSBkaXJlY3RvcnkgZW50cnkgYnkgY3JlYXRpbmcgYSB1bmlxdWUgbmFtZQorCSAqIHVzaW5nIHRoZSBpbm9kZSBzZXF1ZW5jZSBudW1iZXIuCisJICovCisJZXJyb3IgPSAtRU5PTUVNOworCXRoaXMubmFtZSA9IG5hbWU7CisJdGhpcy5sZW4gPSBzdHJsZW4obmFtZSk7CisJdGhpcy5oYXNoID0gMDsKKwlkZW50cnkgPSBkX2FsbG9jKGFub25faW5vZGVfbW50LT5tbnRfc2ItPnNfcm9vdCwgJnRoaXMpOworCWlmICghZGVudHJ5KQorCQlnb3RvIGVycl9wdXRfdW51c2VkX2ZkOworCWRlbnRyeS0+ZF9vcCA9ICZhbm9uX2lub2RlZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJLyogRG8gbm90IHB1Ymxpc2ggdGhpcyBkZW50cnkgaW5zaWRlIHRoZSBnbG9iYWwgZGVudHJ5IGhhc2ggdGFibGUgKi8KKwlkZW50cnktPmRfZmxhZ3MgJj0gfkRDQUNIRV9VTkhBU0hFRDsKKwlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCisJZmlsZS0+Zl9wYXRoLm1udCA9IG1udGdldChhbm9uX2lub2RlX21udCk7CisJZmlsZS0+Zl9wYXRoLmRlbnRyeSA9IGRlbnRyeTsKKwlmaWxlLT5mX21hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOworCisJZmlsZS0+Zl9wb3MgPSAwOworCWZpbGUtPmZfZmxhZ3MgPSBPX1JEV1I7CisJZmlsZS0+Zl9vcCA9IGZvcHM7CisJZmlsZS0+Zl9tb2RlID0gRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFOworCWZpbGUtPmZfdmVyc2lvbiA9IDA7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcHJpdjsKKworCWZkX2luc3RhbGwoZmQsIGZpbGUpOworCisJKnBmZCA9IGZkOworCSpwaW5vZGUgPSBpbm9kZTsKKwkqcGZpbGUgPSBmaWxlOworCXJldHVybiAwOworCitlcnJfcHV0X3VudXNlZF9mZDoKKwlwdXRfdW51c2VkX2ZkKGZkKTsKK2Vycl9pcHV0OgorCWlwdXQoaW5vZGUpOworZXJyX3B1dF9maWxwOgorCXB1dF9maWxwKGZpbGUpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIEEgc2luZ2xlIGlub2RlIGV4aXN0IGZvciBhbGwgYW5vbl9pbm9kZSBmaWxlcy4gQ29udHJhcnkgdG8gcGlwZXMsCisgKiBhbm9uX2lub2RlIGlub2RlcyBoYXMgbm8gcGVyLWluc3RhbmNlIGRhdGEgYXNzb2NpYXRlZCwgc28gd2UgY2FuIGF2b2lkCisgKiB0aGUgYWxsb2NhdGlvbiBvZiBtdWx0aXBsZSBvZiB0aGVtLgorICovCitzdGF0aWMgc3RydWN0IGlub2RlICphbm9uX2lub2RlX21raW5vZGUodm9pZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKGFub25faW5vZGVfbW50LT5tbnRfc2IpOworCisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpbm9kZS0+aV9mb3AgPSAmYW5vbl9pbm9kZV9mb3BzOworCisJLyoKKwkgKiBNYXJrIHRoZSBpbm9kZSBkaXJ0eSBmcm9tIHRoZSB2ZXJ5IGJlZ2lubmluZywKKwkgKiB0aGF0IHdheSBpdCB3aWxsIG5ldmVyIGJlIG1vdmVkIHRvIHRoZSBkaXJ0eQorCSAqIGxpc3QgYmVjYXVzZSBtYXJrX2lub2RlX2RpcnR5KCkgd2lsbCB0aGluaworCSAqIHRoYXQgaXQgYWxyZWFkeSBfaXNfIG9uIHRoZSBkaXJ0eSBsaXN0LgorCSAqLworCWlub2RlLT5pX3N0YXRlID0gSV9ESVJUWTsKKwlpbm9kZS0+aV9tb2RlID0gU19JUlVTUiB8IFNfSVdVU1I7CisJaW5vZGUtPmlfdWlkID0gY3VycmVudC0+ZnN1aWQ7CisJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+ZnNnaWQ7CisJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCXJldHVybiBpbm9kZTsKK30KKworc3RhdGljIGludCBfX2luaXQgYW5vbl9pbm9kZV9pbml0KHZvaWQpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZhbm9uX2lub2RlX2ZzX3R5cGUpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfZXhpdDsKKwlhbm9uX2lub2RlX21udCA9IGtlcm5fbW91bnQoJmFub25faW5vZGVfZnNfdHlwZSk7CisJaWYgKElTX0VSUihhbm9uX2lub2RlX21udCkpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKGFub25faW5vZGVfbW50KTsKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9maWxlc3lzdGVtOworCX0KKwlhbm9uX2lub2RlX2lub2RlID0gYW5vbl9pbm9kZV9ta2lub2RlKCk7CisJaWYgKElTX0VSUihhbm9uX2lub2RlX2lub2RlKSkgeworCQllcnJvciA9IFBUUl9FUlIoYW5vbl9pbm9kZV9pbm9kZSk7CisJCWdvdG8gZXJyX21udHB1dDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX21udHB1dDoKKwltbnRwdXQoYW5vbl9pbm9kZV9tbnQpOworZXJyX3VucmVnaXN0ZXJfZmlsZXN5c3RlbToKKwl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmFub25faW5vZGVfZnNfdHlwZSk7CitlcnJfZXhpdDoKKwlwYW5pYyhLRVJOX0VSUiAiYW5vbl9pbm9kZV9pbml0KCkgZmFpbGVkICglZClcbiIsIGVycm9yKTsKK30KKworZnNfaW5pdGNhbGwoYW5vbl9pbm9kZV9pbml0KTsKKwpkaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jCmluZGV4IDk3ZGU5NDYuLmEwYTBjN2IgMTAwNjQ0Ci0tLSBhL2ZzL2F0dHIuYworKysgYi9mcy9hdHRyLmMKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzL2F1dG9mc19pLmggYi9mcy9hdXRvZnMvYXV0b2ZzX2kuaAppbmRleCA0ZWY1NDQ0Li44YjRjY2EzIDEwMDY0NAotLS0gYS9mcy9hdXRvZnMvYXV0b2ZzX2kuaAorKysgYi9mcy9hdXRvZnMvYXV0b2ZzX2kuaApAQCAtMTAxLDcgKzEwMSw3IEBACiBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gewogCXUzMiBtYWdpYzsKIAlzdHJ1Y3QgZmlsZSAqcGlwZTsKLQlwaWRfdCBvel9wZ3JwOworCXN0cnVjdCBwaWQgKm96X3BncnA7CiAJaW50IGNhdGF0b25pYzsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCXVuc2lnbmVkIGxvbmcgZXhwX3RpbWVvdXQ7CkBAIC0xMjIsNyArMTIyLDcgQEAKICAgIGZpbGVzeXN0ZW0gd2l0aG91dCAibWFnaWMiLikgKi8KIAogc3RhdGljIGlubGluZSBpbnQgYXV0b2ZzX296X21vZGUoc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkpIHsKLQlyZXR1cm4gc2JpLT5jYXRhdG9uaWMgfHwgcHJvY2Vzc19ncm91cChjdXJyZW50KSA9PSBzYmktPm96X3BncnA7CisJcmV0dXJuIHNiaS0+Y2F0YXRvbmljIHx8IHRhc2tfcGdycChjdXJyZW50KSA9PSBzYmktPm96X3BncnA7CiB9CiAKIC8qIEhhc2ggb3BlcmF0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzL2lub2RlLmMgYi9mcy9hdXRvZnMvaW5vZGUuYwppbmRleCBhYTBiNjFmLi5lNzIwNGQ3IDEwMDY0NAotLS0gYS9mcy9hdXRvZnMvaW5vZGUuYworKysgYi9mcy9hdXRvZnMvaW5vZGUuYwpAQCAtMzQsMTIgKzM0LDE0IEBACiAJaWYgKCFzYmkpCiAJCWdvdG8gb3V0X2tpbGxfc2I7CiAKLQlpZiAoICFzYmktPmNhdGF0b25pYyApCisJaWYgKCFzYmktPmNhdGF0b25pYykKIAkJYXV0b2ZzX2NhdGF0b25pY19tb2RlKHNiaSk7IC8qIEZyZWUgd2FpdCBxdWV1ZXMsIGNsb3NlIHBpcGUgKi8KIAorCXB1dF9waWQoc2JpLT5vel9wZ3JwKTsKKwogCWF1dG9mc19oYXNoX251a2Uoc2JpKTsKLQlmb3IgKCBuID0gMCA7IG4gPCBBVVRPRlNfTUFYX1NZTUxJTktTIDsgbisrICkgewotCQlpZiAoIHRlc3RfYml0KG4sIHNiaS0+c3ltbGlua19iaXRtYXApICkKKwlmb3IgKG4gPSAwOyBuIDwgQVVUT0ZTX01BWF9TWU1MSU5LUzsgbisrKSB7CisJCWlmICh0ZXN0X2JpdChuLCBzYmktPnN5bWxpbmtfYml0bWFwKSkKIAkJCWtmcmVlKHNiaS0+c3ltbGlua1tuXS5kYXRhKTsKIAl9CiAKQEAgLTY5LDcgKzcxLDggQEAKIAl7T3B0X2VyciwgTlVMTH0KIH07CiAKLXN0YXRpYyBpbnQgcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBpbnQgKnBpcGVmZCwgdWlkX3QgKnVpZCwgZ2lkX3QgKmdpZCwgcGlkX3QgKnBncnAsIGludCAqbWlucHJvdG8sIGludCAqbWF4cHJvdG8pCitzdGF0aWMgaW50IHBhcnNlX29wdGlvbnMoY2hhciAqb3B0aW9ucywgaW50ICpwaXBlZmQsIHVpZF90ICp1aWQsIGdpZF90ICpnaWQsCisJCXBpZF90ICpwZ3JwLCBpbnQgKm1pbnByb3RvLCBpbnQgKm1heHByb3RvKQogewogCWNoYXIgKnA7CiAJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOwpAQCAtMTM4LDkgKzE0MSwxMCBAQAogCWludCBwaXBlZmQ7CiAJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmk7CiAJaW50IG1pbnByb3RvLCBtYXhwcm90bzsKKwlwaWRfdCBwZ2lkOwogCiAJc2JpID0ga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOwotCWlmICggIXNiaSApCisJaWYgKCFzYmkpCiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJRFBSSU5USygoImF1dG9mczogc3RhcnRpbmcgdXAsIHNiaSA9ICVwXG4iLHNiaSkpOwogCkBAIC0xNDksNyArMTUzLDYgQEAKIAlzYmktPnBpcGUgPSBOVUxMOwogCXNiaS0+Y2F0YXRvbmljID0gMTsKIAlzYmktPmV4cF90aW1lb3V0ID0gMDsKLQlzYmktPm96X3BncnAgPSBwcm9jZXNzX2dyb3VwKGN1cnJlbnQpOwogCWF1dG9mc19pbml0aWFsaXplX2hhc2goJnNiaS0+ZGlyaGFzaCk7CiAJc2JpLT5xdWV1ZXMgPSBOVUxMOwogCW1lbXNldChzYmktPnN5bWxpbmtfYml0bWFwLCAwLCBzaXplb2YobG9uZykqQVVUT0ZTX1NZTUxJTktfQklUTUFQX0xFTik7CkBAIC0xNjksMjYgKzE3MiwzNiBAQAogCQlnb3RvIGZhaWxfaXB1dDsKIAogCS8qIENhbiB0aGlzIGNhbGwgYmxvY2s/ICAtIFdURiBjYXJlcz8gcyBpcyBsb2NrZWQuICovCi0JaWYgKCBwYXJzZV9vcHRpb25zKGRhdGEsJnBpcGVmZCwmcm9vdF9pbm9kZS0+aV91aWQsJnJvb3RfaW5vZGUtPmlfZ2lkLCZzYmktPm96X3BncnAsJm1pbnByb3RvLCZtYXhwcm90bykgKSB7CisJaWYgKHBhcnNlX29wdGlvbnMoZGF0YSwgJnBpcGVmZCwgJnJvb3RfaW5vZGUtPmlfdWlkLAorCQkJCSZyb290X2lub2RlLT5pX2dpZCwgJnBnaWQsICZtaW5wcm90bywKKwkJCQkmbWF4cHJvdG8pKSB7CiAJCXByaW50aygiYXV0b2ZzOiBjYWxsZWQgd2l0aCBib2d1cyBvcHRpb25zXG4iKTsKIAkJZ290byBmYWlsX2RwdXQ7CiAJfQogCiAJLyogQ291bGRuJ3QgdGhpcyBiZSB0ZXN0ZWQgZWFybGllcj8gKi8KLQlpZiAoIG1pbnByb3RvID4gQVVUT0ZTX1BST1RPX1ZFUlNJT04gfHwgCi0JICAgICBtYXhwcm90byA8IEFVVE9GU19QUk9UT19WRVJTSU9OICkgeworCWlmIChtaW5wcm90byA+IEFVVE9GU19QUk9UT19WRVJTSU9OIHx8CisJICAgICBtYXhwcm90byA8IEFVVE9GU19QUk9UT19WRVJTSU9OKSB7CiAJCXByaW50aygiYXV0b2ZzOiBrZXJuZWwgZG9lcyBub3QgbWF0Y2ggZGFlbW9uIHZlcnNpb25cbiIpOwogCQlnb3RvIGZhaWxfZHB1dDsKIAl9CiAKLQlEUFJJTlRLKCgiYXV0b2ZzOiBwaXBlIGZkID0gJWQsIHBncnAgPSAldVxuIiwgcGlwZWZkLCBzYmktPm96X3BncnApKTsKLQlwaXBlID0gZmdldChwaXBlZmQpOwotCQotCWlmICggIXBpcGUgKSB7Ci0JCXByaW50aygiYXV0b2ZzOiBjb3VsZCBub3Qgb3BlbiBwaXBlIGZpbGUgZGVzY3JpcHRvclxuIik7CisJRFBSSU5USygoImF1dG9mczogcGlwZSBmZCA9ICVkLCBwZ3JwID0gJXVcbiIsIHBpcGVmZCwgcGdpZCkpOworCXNiaS0+b3pfcGdycCA9IGZpbmRfZ2V0X3BpZChwZ2lkKTsKKworCWlmICghc2JpLT5vel9wZ3JwKSB7CisJCXByaW50aygiYXV0b2ZzOiBjb3VsZCBub3QgZmluZCBwcm9jZXNzIGdyb3VwICVkXG4iLCBwZ2lkKTsKIAkJZ290byBmYWlsX2RwdXQ7CiAJfQotCWlmICggIXBpcGUtPmZfb3AgfHwgIXBpcGUtPmZfb3AtPndyaXRlICkKKworCXBpcGUgPSBmZ2V0KHBpcGVmZCk7CisJCisJaWYgKCFwaXBlKSB7CisJCXByaW50aygiYXV0b2ZzOiBjb3VsZCBub3Qgb3BlbiBwaXBlIGZpbGUgZGVzY3JpcHRvclxuIik7CisJCWdvdG8gZmFpbF9wdXRfcGlkOworCX0KKworCWlmICghcGlwZS0+Zl9vcCB8fCAhcGlwZS0+Zl9vcC0+d3JpdGUpCiAJCWdvdG8gZmFpbF9mcHV0OwogCXNiaS0+cGlwZSA9IHBpcGU7CiAJc2JpLT5jYXRhdG9uaWMgPSAwOwpAQCAtMjAyLDYgKzIxNSw4IEBACiBmYWlsX2ZwdXQ6CiAJcHJpbnRrKCJhdXRvZnM6IHBpcGUgZmlsZSBkZXNjcmlwdG9yIGRvZXMgbm90IGNvbnRhaW4gcHJvcGVyIG9wc1xuIik7CiAJZnB1dChwaXBlKTsKK2ZhaWxfcHV0X3BpZDoKKwlwdXRfcGlkKHNiaS0+b3pfcGdycCk7CiBmYWlsX2RwdXQ6CiAJZHB1dChyb290KTsKIAlnb3RvIGZhaWxfZnJlZTsKQEAgLTIzMCw3ICsyNDUsNyBAQAogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCi0JaWYgKCBpbm8gPT0gQVVUT0ZTX1JPT1RfSU5PICkgeworCWlmIChpbm8gPT0gQVVUT0ZTX1JPT1RfSU5PKSB7CiAJCWlub2RlLT5pX21vZGUgPSBTX0lGRElSIHwgU19JUlVHTyB8IFNfSVhVR08gfCBTX0lXVVNSOwogCQlpbm9kZS0+aV9vcCA9ICZhdXRvZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZS0+aV9mb3AgPSAmYXV0b2ZzX3Jvb3Rfb3BlcmF0aW9uczsKQEAgLTI0MSwxMiArMjU2LDEyIEBACiAJaW5vZGUtPmlfdWlkID0gaW5vZGUtPmlfc2ItPnNfcm9vdC0+ZF9pbm9kZS0+aV91aWQ7CiAJaW5vZGUtPmlfZ2lkID0gaW5vZGUtPmlfc2ItPnNfcm9vdC0+ZF9pbm9kZS0+aV9naWQ7CiAJCi0JaWYgKCBpbm8gPj0gQVVUT0ZTX0ZJUlNUX1NZTUxJTksgJiYgaW5vIDwgQVVUT0ZTX0ZJUlNUX0RJUl9JTk8gKSB7CisJaWYgKGlubyA+PSBBVVRPRlNfRklSU1RfU1lNTElOSyAmJiBpbm8gPCBBVVRPRlNfRklSU1RfRElSX0lOTykgewogCQkvKiBTeW1saW5rIGlub2RlIC0gc2hvdWxkIGJlIGluIHN5bWxpbmsgbGlzdCAqLwogCQlzdHJ1Y3QgYXV0b2ZzX3N5bWxpbmsgKnNsOwogCiAJCW4gPSBpbm8gLSBBVVRPRlNfRklSU1RfU1lNTElOSzsKLQkJaWYgKCBuID49IEFVVE9GU19NQVhfU1lNTElOS1MgfHwgIXRlc3RfYml0KG4sc2JpLT5zeW1saW5rX2JpdG1hcCkpIHsKKwkJaWYgKG4gPj0gQVVUT0ZTX01BWF9TWU1MSU5LUyB8fCAhdGVzdF9iaXQobixzYmktPnN5bWxpbmtfYml0bWFwKSkgewogCQkJcHJpbnRrKCJhdXRvZnM6IExvb2tpbmcgZm9yIGJhZCBzeW1saW5rIGlub2RlICV1XG4iLCAodW5zaWduZWQgaW50KSBpbm8pOwogCQkJcmV0dXJuOwogCQl9CmRpZmYgLS1naXQgYS9mcy9hdXRvZnMvcm9vdC5jIGIvZnMvYXV0b2ZzL3Jvb3QuYwppbmRleCBmMjU5NzIwLi5jMTQ4OTUzIDEwMDY0NAotLS0gYS9mcy9hdXRvZnMvcm9vdC5jCisrKyBiL2ZzL2F1dG9mcy9yb290LmMKQEAgLTY3LDggKzY3LDggQEAKIAkJZmlscC0+Zl9wb3MgPSArK25yOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgotCQl3aGlsZSAoIG9uciA9IG5yLCBlbnQgPSBhdXRvZnNfaGFzaF9lbnVtKGRpcmhhc2gsJm5yLGVudCkgKSB7Ci0JCQlpZiAoICFlbnQtPmRlbnRyeSB8fCBkX21vdW50cG9pbnQoZW50LT5kZW50cnkpICkgeworCQl3aGlsZSAob25yID0gbnIsIGVudCA9IGF1dG9mc19oYXNoX2VudW0oZGlyaGFzaCwmbnIsZW50KSkgeworCQkJaWYgKCFlbnQtPmRlbnRyeSB8fCBkX21vdW50cG9pbnQoZW50LT5kZW50cnkpKSB7CiAJCQkJaWYgKGZpbGxkaXIoZGlyZW50LGVudC0+bmFtZSxlbnQtPmxlbixvbnIsZW50LT5pbm8sRFRfVU5LTk9XTikgPCAwKQogCQkJCQlnb3RvIG91dDsKIAkJCQlmaWxwLT5mX3BvcyA9IG5yOwpAQCAtODgsMTAgKzg4LDEwIEBACiAJc3RydWN0IGF1dG9mc19kaXJfZW50ICplbnQ7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlpZiAoICEoZW50ID0gYXV0b2ZzX2hhc2hfbG9va3VwKCZzYmktPmRpcmhhc2gsICZkZW50cnktPmRfbmFtZSkpICkgeworCWlmICghKGVudCA9IGF1dG9mc19oYXNoX2xvb2t1cCgmc2JpLT5kaXJoYXNoLCAmZGVudHJ5LT5kX25hbWUpKSkgewogCQlkbyB7Ci0JCQlpZiAoIHN0YXR1cyAmJiBkZW50cnktPmRfaW5vZGUgKSB7Ci0JCQkJaWYgKCBzdGF0dXMgIT0gLUVOT0VOVCApCisJCQlpZiAoc3RhdHVzICYmIGRlbnRyeS0+ZF9pbm9kZSkgeworCQkJCWlmIChzdGF0dXMgIT0gLUVOT0VOVCkKIAkJCQkJcHJpbnRrKCJhdXRvZnMgd2FybmluZzogbG9va3VwIGZhaWx1cmUgb24gcG9zaXRpdmUgZGVudHJ5LCBzdGF0dXMgPSAlZCwgbmFtZSA9ICVzXG4iLCBzdGF0dXMsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCQkJCXJldHVybiAwOyAvKiBUcnkgdG8gZ2V0IHRoZSBrZXJuZWwgdG8gaW52YWxpZGF0ZSB0aGlzIGRlbnRyeSAqLwogCQkJfQpAQCAtMTA2LDcgKzEwNiw3IEBACiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlzdGF0dXMgPSBhdXRvZnNfd2FpdChzYmksICZkZW50cnktPmRfbmFtZSk7Ci0JCX0gd2hpbGUgKCEoZW50ID0gYXV0b2ZzX2hhc2hfbG9va3VwKCZzYmktPmRpcmhhc2gsICZkZW50cnktPmRfbmFtZSkpICk7CisJCX0gd2hpbGUgKCEoZW50ID0gYXV0b2ZzX2hhc2hfbG9va3VwKCZzYmktPmRpcmhhc2gsICZkZW50cnktPmRfbmFtZSkpKTsKIAl9CiAKIAkvKiBBYnVzZSB0aGlzIGZpZWxkIGFzIGEgcG9pbnRlciB0byB0aGUgZGlyZWN0b3J5IGVudHJ5LCB1c2VkIHRvCkBAIC0xMjQsMTMgKzEyNCwxMyBAQAogCiAJLyogSWYgdGhpcyBpcyBhIGRpcmVjdG9yeSB0aGF0IGlzbid0IGEgbW91bnQgcG9pbnQsIGJpdGNoIGF0IHRoZQogCSAgIGRhZW1vbiBhbmQgZml4IGl0IGluIHVzZXIgc3BhY2UgKi8KLQlpZiAoIFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpICYmICFkX21vdW50cG9pbnQoZGVudHJ5KSApIHsKKwlpZiAoU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkgJiYgIWRfbW91bnRwb2ludChkZW50cnkpKSB7CiAJCXJldHVybiAhYXV0b2ZzX3dhaXQoc2JpLCAmZGVudHJ5LT5kX25hbWUpOwogCX0KIAogCS8qIFdlIGRvbid0IHVwZGF0ZSB0aGUgdXNhZ2VzIGZvciB0aGUgYXV0b2ZzIGRhZW1vbiBpdHNlbGYsIHRoaXMKIAkgICBpcyBuZWNlc3NhcnkgZm9yIHJlY3Vyc2l2ZSBhdXRvZnMgbW91bnRzICovCi0JaWYgKCAhYXV0b2ZzX296X21vZGUoc2JpKSApIHsKKwlpZiAoIWF1dG9mc19vel9tb2RlKHNiaSkpIHsKIAkJYXV0b2ZzX3VwZGF0ZV91c2FnZSgmc2JpLT5kaXJoYXNoLGVudCk7CiAJfQogCkBAIC0xNTcsNyArMTU3LDcgQEAKIAlzYmkgPSBhdXRvZnNfc2JpKGRpci0+aV9zYik7CiAKIAkvKiBQZW5kaW5nIGRlbnRyeSAqLwotCWlmICggZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0FVVE9GU19QRU5ESU5HICkgeworCWlmIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfQVVUT0ZTX1BFTkRJTkcpIHsKIAkJaWYgKGF1dG9mc19vel9tb2RlKHNiaSkpCiAJCQlyZXMgPSAxOwogCQllbHNlCkBAIC0xNzMsNyArMTczLDcgQEAKIAl9CiAJCQogCS8qIENoZWNrIGZvciBhIG5vbi1tb3VudHBvaW50IGRpcmVjdG9yeSAqLwotCWlmICggU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkgJiYgIWRfbW91bnRwb2ludChkZW50cnkpICkgeworCWlmIChTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSAmJiAhZF9tb3VudHBvaW50KGRlbnRyeSkpIHsKIAkJaWYgKGF1dG9mc19vel9tb2RlKHNiaSkpCiAJCQlyZXMgPSAxOwogCQllbHNlCkBAIC0xODMsOSArMTgzLDkgQEAKIAl9CiAKIAkvKiBVcGRhdGUgdGhlIHVzYWdlIGxpc3QgKi8KLQlpZiAoICFhdXRvZnNfb3pfbW9kZShzYmkpICkgeworCWlmICghYXV0b2ZzX296X21vZGUoc2JpKSkgewogCQllbnQgPSAoc3RydWN0IGF1dG9mc19kaXJfZW50ICopIGRlbnRyeS0+ZF90aW1lOwotCQlpZiAoIGVudCApCisJCWlmIChlbnQpCiAJCQlhdXRvZnNfdXBkYXRlX3VzYWdlKCZzYmktPmRpcmhhc2gsZW50KTsKIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMjEzLDggKzIxMywxMCBAQAogCXNiaSA9IGF1dG9mc19zYmkoZGlyLT5pX3NiKTsKIAogCW96X21vZGUgPSBhdXRvZnNfb3pfbW9kZShzYmkpOwotCURQUklOVEsoKCJhdXRvZnNfbG9va3VwOiBwaWQgPSAldSwgcGdycCA9ICV1LCBjYXRhdG9uaWMgPSAlZCwgb3pfbW9kZSA9ICVkXG4iLAotCQkgY3VycmVudC0+cGlkLCBwcm9jZXNzX2dyb3VwKGN1cnJlbnQpLCBzYmktPmNhdGF0b25pYywgb3pfbW9kZSkpOworCURQUklOVEsoKCJhdXRvZnNfbG9va3VwOiBwaWQgPSAldSwgcGdycCA9ICV1LCBjYXRhdG9uaWMgPSAlZCwgIgorCQkJCSJvel9tb2RlID0gJWRcbiIsIHBpZF9ucih0YXNrX3BpZChjdXJyZW50KSksCisJCQkJcHJvY2Vzc19ncm91cChjdXJyZW50KSwgc2JpLT5jYXRhdG9uaWMsCisJCQkJb3pfbW9kZSkpOwogCiAJLyoKIAkgKiBNYXJrIHRoZSBkZW50cnkgaW5jb21wbGV0ZSwgYnV0IGFkZCBpdC4gVGhpcyBpcyBuZWVkZWQgc28KQEAgLTI1OCw3ICsyNjAsNyBAQAogCSAqIGRvZXNuJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciBhbGwgc3lzdGVtIGNhbGxzLCBidXQgaXQgc2hvdWxkCiAJICogYmUgT0sgZm9yIHRoZSBvcGVyYXRpb25zIHdlIHBlcm1pdCBmcm9tIGFuIGF1dG9mcy4KIAkgKi8KLQlpZiAoIGRlbnRyeS0+ZF9pbm9kZSAmJiBkX3VuaGFzaGVkKGRlbnRyeSkgKQorCWlmIChkZW50cnktPmRfaW5vZGUgJiYgZF91bmhhc2hlZChkZW50cnkpKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKIAogCXJldHVybiBOVUxMOwpAQCAtMjc3LDE4ICsyNzksMTggQEAKIAlhdXRvZnNfc2F5KGRlbnRyeS0+ZF9uYW1lLm5hbWUsZGVudHJ5LT5kX25hbWUubGVuKTsKIAogCWxvY2tfa2VybmVsKCk7Ci0JaWYgKCAhYXV0b2ZzX296X21vZGUoc2JpKSApIHsKKwlpZiAoIWF1dG9mc19vel9tb2RlKHNiaSkpIHsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKLQlpZiAoIGF1dG9mc19oYXNoX2xvb2t1cChkaCwgJmRlbnRyeS0+ZF9uYW1lKSApIHsKKwlpZiAoYXV0b2ZzX2hhc2hfbG9va3VwKGRoLCAmZGVudHJ5LT5kX25hbWUpKSB7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJfQogCiAJbiA9IGZpbmRfZmlyc3RfemVyb19iaXQoc2JpLT5zeW1saW5rX2JpdG1hcCxBVVRPRlNfTUFYX1NZTUxJTktTKTsKLQlpZiAoIG4gPj0gQVVUT0ZTX01BWF9TWU1MSU5LUyApIHsKKwlpZiAobiA+PSBBVVRPRlNfTUFYX1NZTUxJTktTKSB7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQpAQCAtMjk3LDE0ICsyOTksMTQgQEAKIAlzbCA9ICZzYmktPnN5bWxpbmtbbl07CiAJc2wtPmxlbiA9IHN0cmxlbihzeW1uYW1lKTsKIAlzbC0+ZGF0YSA9IGttYWxsb2Moc2xzaXplID0gc2wtPmxlbisxLCBHRlBfS0VSTkVMKTsKLQlpZiAoICFzbC0+ZGF0YSApIHsKKwlpZiAoIXNsLT5kYXRhKSB7CiAJCWNsZWFyX2JpdChuLHNiaS0+c3ltbGlua19iaXRtYXApOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAogCWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdXRvZnNfZGlyX2VudCksIEdGUF9LRVJORUwpOwotCWlmICggIWVudCApIHsKKwlpZiAoIWVudCkgewogCQlrZnJlZShzbC0+ZGF0YSk7CiAJCWNsZWFyX2JpdChuLHNiaS0+c3ltbGlua19iaXRtYXApOwogCQl1bmxvY2tfa2VybmVsKCk7CkBAIC0zMTIsNyArMzE0LDcgQEAKIAl9CiAKIAllbnQtPm5hbWUgPSBrbWFsbG9jKGRlbnRyeS0+ZF9uYW1lLmxlbisxLCBHRlBfS0VSTkVMKTsKLQlpZiAoICFlbnQtPm5hbWUgKSB7CisJaWYgKCFlbnQtPm5hbWUpIHsKIAkJa2ZyZWUoc2wtPmRhdGEpOwogCQlrZnJlZShlbnQpOwogCQljbGVhcl9iaXQobixzYmktPnN5bWxpbmtfYml0bWFwKTsKQEAgLTM1NCwyMyArMzU2LDIzIEBACiAKIAkvKiBUaGlzIGFsbG93cyByb290IHRvIHJlbW92ZSBzeW1saW5rcyAqLwogCWxvY2tfa2VybmVsKCk7Ci0JaWYgKCAhYXV0b2ZzX296X21vZGUoc2JpKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSApIHsKKwlpZiAoIWF1dG9mc19vel9tb2RlKHNiaSkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKIAllbnQgPSBhdXRvZnNfaGFzaF9sb29rdXAoZGgsICZkZW50cnktPmRfbmFtZSk7Ci0JaWYgKCAhZW50ICkgeworCWlmICghZW50KSB7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCiAJbiA9IGVudC0+aW5vIC0gQVVUT0ZTX0ZJUlNUX1NZTUxJTks7Ci0JaWYgKCBuID49IEFVVE9GU19NQVhfU1lNTElOS1MgKSB7CisJaWYgKG4gPj0gQVVUT0ZTX01BWF9TWU1MSU5LUykgewogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlTRElSOwkvKiBJdCdzIGEgZGlyZWN0b3J5LCBkdW1teSAqLwogCX0KLQlpZiAoICF0ZXN0X2JpdChuLHNiaS0+c3ltbGlua19iaXRtYXApICkgeworCWlmICghdGVzdF9iaXQobixzYmktPnN5bWxpbmtfYml0bWFwKSkgewogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlOVkFMOwkvKiBOb25leGlzdGVudCBzeW1saW5rPyAgU2hvdWxkbid0IGhhcHBlbiAqLwogCX0KQEAgLTM5MiwyMyArMzk0LDIzIEBACiAJc3RydWN0IGF1dG9mc19kaXJfZW50ICplbnQ7CiAKIAlsb2NrX2tlcm5lbCgpOwotCWlmICggIWF1dG9mc19vel9tb2RlKHNiaSkgKSB7CisJaWYgKCFhdXRvZnNfb3pfbW9kZShzYmkpKSB7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCiAJZW50ID0gYXV0b2ZzX2hhc2hfbG9va3VwKGRoLCAmZGVudHJ5LT5kX25hbWUpOwotCWlmICggIWVudCApIHsKKwlpZiAoIWVudCkgewogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWlmICggKHVuc2lnbmVkIGludCllbnQtPmlubyA8IEFVVE9GU19GSVJTVF9ESVJfSU5PICkgeworCWlmICgodW5zaWduZWQgaW50KWVudC0+aW5vIDwgQVVUT0ZTX0ZJUlNUX0RJUl9JTk8pIHsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT1RESVI7IC8qIE5vdCBhIGRpcmVjdG9yeSAqLwogCX0KIAotCWlmICggZW50LT5kZW50cnkgIT0gZGVudHJ5ICkgeworCWlmIChlbnQtPmRlbnRyeSAhPSBkZW50cnkpIHsKIAkJcHJpbnRrKCJhdXRvZnNfcm1kaXI6IG9kZW50cnkgIT0gZGVudHJ5IGZvciBlbnRyeSAlc1xuIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJfQogCkBAIC00MjksMTggKzQzMSwxOCBAQAogCWlub190IGlubzsKIAogCWxvY2tfa2VybmVsKCk7Ci0JaWYgKCAhYXV0b2ZzX296X21vZGUoc2JpKSApIHsKKwlpZiAoIWF1dG9mc19vel9tb2RlKHNiaSkpIHsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKIAllbnQgPSBhdXRvZnNfaGFzaF9sb29rdXAoZGgsICZkZW50cnktPmRfbmFtZSk7Ci0JaWYgKCBlbnQgKSB7CisJaWYgKGVudCkgewogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUVYSVNUOwogCX0KIAotCWlmICggc2JpLT5uZXh0X2Rpcl9pbm8gPCBBVVRPRlNfRklSU1RfRElSX0lOTyApIHsKKwlpZiAoc2JpLT5uZXh0X2Rpcl9pbm8gPCBBVVRPRlNfRklSU1RfRElSX0lOTykgewogCQlwcmludGsoImF1dG9mczogT3V0IG9mIGlub2RlIG51bWJlcnMgLS0gd2hhdCB0aGUgaGVjayBkaWQgeW91IGRvPz9cbiIpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PU1BDOwpAQCAtNDQ4LDEzICs0NTAsMTMgQEAKIAlpbm8gPSBzYmktPm5leHRfZGlyX2lubysrOwogCiAJZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF1dG9mc19kaXJfZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCAhZW50ICkgeworCWlmICghZW50KSB7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCiAJZW50LT5uYW1lID0ga21hbGxvYyhkZW50cnktPmRfbmFtZS5sZW4rMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCAhZW50LT5uYW1lICkgeworCWlmICghZW50LT5uYW1lKSB7CiAJCWtmcmVlKGVudCk7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9TUEM7CkBAIC00ODMsNyArNDg1LDcgQEAKIAkgICAgcHV0X3VzZXIoc2JpLT5leHBfdGltZW91dCAvIEhaLCBwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoIG50aW1lb3V0ID4gVUxPTkdfTUFYL0haICkKKwlpZiAobnRpbWVvdXQgPiBVTE9OR19NQVgvSFopCiAJCXNiaS0+ZXhwX3RpbWVvdXQgPSAwOwogCWVsc2UKIAkJc2JpLT5leHBfdGltZW91dCA9IG50aW1lb3V0ICogSFo7CkBAIC01MTEsMTUgKzUxMywxNCBAQAogCXBrdC5oZHIucHJvdG9fdmVyc2lvbiA9IEFVVE9GU19QUk9UT19WRVJTSU9OOwogCXBrdC5oZHIudHlwZSA9IGF1dG9mc19wdHlwZV9leHBpcmU7CiAKLQlpZiAoICFzYmktPmV4cF90aW1lb3V0IHx8Ci0JICAgICAhKGVudCA9IGF1dG9mc19leHBpcmUoc2Isc2JpLG1udCkpICkKKwlpZiAoIXNiaS0+ZXhwX3RpbWVvdXQgfHwgIShlbnQgPSBhdXRvZnNfZXhwaXJlKHNiLHNiaSxtbnQpKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAlwa3QubGVuID0gZW50LT5sZW47CiAJbWVtY3B5KHBrdC5uYW1lLCBlbnQtPm5hbWUsIHBrdC5sZW4pOwogCXBrdC5uYW1lW3BrdC5sZW5dID0gJ1wwJzsKIAotCWlmICggY29weV90b191c2VyKHBrdF9wLCAmcGt0LCBzaXplb2Yoc3RydWN0IGF1dG9mc19wYWNrZXRfZXhwaXJlKSkgKQorCWlmIChjb3B5X3RvX3VzZXIocGt0X3AsICZwa3QsIHNpemVvZihzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9leHBpcmUpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKQEAgLTUzNywxMSArNTM4LDExIEBACiAKIAlEUFJJTlRLKCgiYXV0b2ZzX2lvY3RsOiBjbWQgPSAweCUwOHgsIGFyZyA9IDB4JTA4bHgsIHNiaSA9ICVwLCBwZ3JwID0gJXVcbiIsY21kLGFyZyxzYmkscHJvY2Vzc19ncm91cChjdXJyZW50KSkpOwogCi0JaWYgKCBfSU9DX1RZUEUoY21kKSAhPSBfSU9DX1RZUEUoQVVUT0ZTX0lPQ19GSVJTVCkgfHwKLQkgICAgIF9JT0NfTlIoY21kKSAtIF9JT0NfTlIoQVVUT0ZTX0lPQ19GSVJTVCkgPj0gQVVUT0ZTX0lPQ19DT1VOVCApCisJaWYgKF9JT0NfVFlQRShjbWQpICE9IF9JT0NfVFlQRShBVVRPRlNfSU9DX0ZJUlNUKSB8fAorCSAgICAgX0lPQ19OUihjbWQpIC0gX0lPQ19OUihBVVRPRlNfSU9DX0ZJUlNUKSA+PSBBVVRPRlNfSU9DX0NPVU5UKQogCQlyZXR1cm4gLUVOT1RUWTsKIAkKLQlpZiAoICFhdXRvZnNfb3pfbW9kZShzYmkpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pICkKKwlpZiAoIWF1dG9mc19vel9tb2RlKHNiaSkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAJCiAJc3dpdGNoKGNtZCkgewpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9pbm9kZS5jIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCmluZGV4IDI2MDYzZGMuLjY5MjM2NGU4IDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2lub2RlLmMKKysrIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KICNpbmNsdWRlICJhdXRvZnNfaS5oIgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMjE5LDggKzIxOCw3IEBACiB9OwogCiBzdGF0aWMgaW50IHBhcnNlX29wdGlvbnMoY2hhciAqb3B0aW9ucywgaW50ICpwaXBlZmQsIHVpZF90ICp1aWQsIGdpZF90ICpnaWQsCi0JCQkgcGlkX3QgKnBncnAsIHVuc2lnbmVkIGludCAqdHlwZSwKLQkJCSBpbnQgKm1pbnByb3RvLCBpbnQgKm1heHByb3RvKQorCQlwaWRfdCAqcGdycCwgdW5zaWduZWQgaW50ICp0eXBlLCBpbnQgKm1pbnByb3RvLCBpbnQgKm1heHByb3RvKQogewogCWNoYXIgKnA7CiAJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOwpAQCAtMzE1LDcgKzMxMyw3IEBACiAJc3RydWN0IGF1dG9mc19pbmZvICppbm87CiAKIAlzYmkgPSBrbWFsbG9jKHNpemVvZigqc2JpKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCAhc2JpICkKKwlpZiAoIXNiaSkKIAkJZ290byBmYWlsX3VubG9jazsKIAlEUFJJTlRLKCJzdGFydGluZyB1cCwgc2JpID0gJXAiLHNiaSk7CiAKQEAgLTM2NCwxMCArMzYyLDkgQEAKIAlyb290LT5kX2ZzZGF0YSA9IGlubzsKIAogCS8qIENhbiB0aGlzIGNhbGwgYmxvY2s/ICovCi0JaWYgKHBhcnNlX29wdGlvbnMoZGF0YSwgJnBpcGVmZCwKLQkJCSAgJnJvb3RfaW5vZGUtPmlfdWlkLCAmcm9vdF9pbm9kZS0+aV9naWQsCi0JCQkgICZzYmktPm96X3BncnAsICZzYmktPnR5cGUsCi0JCQkgICZzYmktPm1pbl9wcm90bywgJnNiaS0+bWF4X3Byb3RvKSkgeworCWlmIChwYXJzZV9vcHRpb25zKGRhdGEsICZwaXBlZmQsICZyb290X2lub2RlLT5pX3VpZCwgJnJvb3RfaW5vZGUtPmlfZ2lkLAorCQkJCSZzYmktPm96X3BncnAsICZzYmktPnR5cGUsICZzYmktPm1pbl9wcm90bywKKwkJCQkmc2JpLT5tYXhfcHJvdG8pKSB7CiAJCXByaW50aygiYXV0b2ZzOiBjYWxsZWQgd2l0aCBib2d1cyBvcHRpb25zXG4iKTsKIAkJZ290byBmYWlsX2RwdXQ7CiAJfQpAQCAtMzk3LDExICszOTQsMTEgQEAKIAlEUFJJTlRLKCJwaXBlIGZkID0gJWQsIHBncnAgPSAldSIsIHBpcGVmZCwgc2JpLT5vel9wZ3JwKTsKIAlwaXBlID0gZmdldChwaXBlZmQpOwogCQotCWlmICggIXBpcGUgKSB7CisJaWYgKCFwaXBlKSB7CiAJCXByaW50aygiYXV0b2ZzOiBjb3VsZCBub3Qgb3BlbiBwaXBlIGZpbGUgZGVzY3JpcHRvclxuIik7CiAJCWdvdG8gZmFpbF9kcHV0OwogCX0KLQlpZiAoICFwaXBlLT5mX29wIHx8ICFwaXBlLT5mX29wLT53cml0ZSApCisJaWYgKCFwaXBlLT5mX29wIHx8ICFwaXBlLT5mX29wLT53cml0ZSkKIAkJZ290byBmYWlsX2ZwdXQ7CiAJc2JpLT5waXBlID0gcGlwZTsKIAlzYmktPnBpcGVmZCA9IHBpcGVmZDsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvcm9vdC5jIGIvZnMvYXV0b2ZzNC9yb290LmMKaW5kZXggZDBlOWIzYS4uMmQ0YzhhMyAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9yb290LmMKKysrIGIvZnMvYXV0b2ZzNC9yb290LmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlICJhdXRvZnNfaS5oIgogCiBzdGF0aWMgaW50IGF1dG9mczRfZGlyX3N5bWxpbmsoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGNvbnN0IGNoYXIgKik7CkBAIC03NjAsNyArNzU5LDcgQEAKIAlzdHJ1Y3QgYXV0b2ZzX2luZm8gKnBfaW5vOwogCQogCS8qIFRoaXMgYWxsb3dzIHJvb3QgdG8gcmVtb3ZlIHN5bWxpbmtzICovCi0JaWYgKCAhYXV0b2ZzNF9vel9tb2RlKHNiaSkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgKQorCWlmICghYXV0b2ZzNF9vel9tb2RlKHNiaSkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmluby0+Y291bnQpKSB7CkBAIC04MzQsNyArODMzLDcgQEAKIAlzdHJ1Y3QgYXV0b2ZzX2luZm8gKnBfaW5vOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKLQlpZiAoICFhdXRvZnM0X296X21vZGUoc2JpKSApCisJaWYgKCFhdXRvZnM0X296X21vZGUoc2JpKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAlEUFJJTlRLKCJkZW50cnkgJXAsIGNyZWF0aW5nICUuKnMiLApAQCAtODcyLDExICs4NzEsMTEgQEAKIAlpbnQgcnY7CiAJdW5zaWduZWQgbG9uZyBudGltZW91dDsKIAotCWlmICggKHJ2ID0gZ2V0X3VzZXIobnRpbWVvdXQsIHApKSB8fAotCSAgICAgKHJ2ID0gcHV0X3VzZXIoc2JpLT5leHBfdGltZW91dC9IWiwgcCkpICkKKwlpZiAoKHJ2ID0gZ2V0X3VzZXIobnRpbWVvdXQsIHApKSB8fAorCSAgICAgKHJ2ID0gcHV0X3VzZXIoc2JpLT5leHBfdGltZW91dC9IWiwgcCkpKQogCQlyZXR1cm4gcnY7CiAKLQlpZiAoIG50aW1lb3V0ID4gVUxPTkdfTUFYL0haICkKKwlpZiAobnRpbWVvdXQgPiBVTE9OR19NQVgvSFopCiAJCXNiaS0+ZXhwX3RpbWVvdXQgPSAwOwogCWVsc2UKIAkJc2JpLT5leHBfdGltZW91dCA9IG50aW1lb3V0ICogSFo7CkBAIC05MDcsNyArOTA2LDcgQEAKIAlEUFJJTlRLKCJyZXR1cm5pbmcgJWQiLCBzYmktPm5lZWRzX3JlZ2hvc3QpOwogCiAJc3RhdHVzID0gcHV0X3VzZXIoc2JpLT5uZWVkc19yZWdob3N0LCBwKTsKLQlpZiAoIHN0YXR1cyApCisJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIAogCXNiaS0+bmVlZHNfcmVnaG9zdCA9IDA7CkBAIC05NzYsMTEgKzk3NSwxMSBAQAogCURQUklOVEsoImNtZCA9IDB4JTA4eCwgYXJnID0gMHglMDhseCwgc2JpID0gJXAsIHBncnAgPSAldSIsCiAJCWNtZCxhcmcsc2JpLHByb2Nlc3NfZ3JvdXAoY3VycmVudCkpOwogCi0JaWYgKCBfSU9DX1RZUEUoY21kKSAhPSBfSU9DX1RZUEUoQVVUT0ZTX0lPQ19GSVJTVCkgfHwKLQkgICAgIF9JT0NfTlIoY21kKSAtIF9JT0NfTlIoQVVUT0ZTX0lPQ19GSVJTVCkgPj0gQVVUT0ZTX0lPQ19DT1VOVCApCisJaWYgKF9JT0NfVFlQRShjbWQpICE9IF9JT0NfVFlQRShBVVRPRlNfSU9DX0ZJUlNUKSB8fAorCSAgICAgX0lPQ19OUihjbWQpIC0gX0lPQ19OUihBVVRPRlNfSU9DX0ZJUlNUKSA+PSBBVVRPRlNfSU9DX0NPVU5UKQogCQlyZXR1cm4gLUVOT1RUWTsKIAkKLQlpZiAoICFhdXRvZnM0X296X21vZGUoc2JpKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSApCisJaWYgKCFhdXRvZnM0X296X21vZGUoc2JpKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAkKIAlzd2l0Y2goY21kKSB7CmRpZmYgLS1naXQgYS9mcy9iYWRfaW5vZGUuYyBiL2ZzL2JhZF9pbm9kZS5jCmluZGV4IGVmZWFiMmYuLjMyOWVlNDcgMTAwNjQ0Ci0tLSBhL2ZzL2JhZF9pbm9kZS5jCisrKyBiL2ZzL2JhZF9pbm9kZS5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogCmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggZmU5NjEwOC4uYTVjNTE3MSAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtMjkyLDEwICsyOTIsOCBAQAogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKiBmb28sIHN0cnVjdCBrbWVtX2NhY2hlICogY2FjaGVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogICAgICAgICBzdHJ1Y3QgYmVmc19pbm9kZV9pbmZvICpiaSA9IChzdHJ1Y3QgYmVmc19pbm9kZV9pbmZvICopIGZvbzsKLQkKLQkgICAgICAgIGlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikgewotCQkJaW5vZGVfaW5pdF9vbmNlKCZiaS0+dmZzX2lub2RlKTsKLQkJfQorCisJaW5vZGVfaW5pdF9vbmNlKCZiaS0+dmZzX2lub2RlKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmMKaW5kZXggZWRjMDhkOC4uNThjN2JkOSAxMDA2NDQKLS0tIGEvZnMvYmZzL2lub2RlLmMKKysrIGIvZnMvYmZzL2lub2RlLmMKQEAgLTI0OCw4ICsyNDgsNyBAQAogewogCXN0cnVjdCBiZnNfaW5vZGVfaW5mbyAqYmkgPSBmb287CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpCi0JCWlub2RlX2luaXRfb25jZSgmYmktPnZmc19pbm9kZSk7CisJaW5vZGVfaW5pdF9vbmNlKCZiaS0+dmZzX2lub2RlKTsKIH0KICAKIHN0YXRpYyBpbnQgaW5pdF9pbm9kZWNhY2hlKHZvaWQpCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggOWNjNGYwYS4uZmE4ZWEzMyAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtODcxLDYgKzg3MSw4IEBACiAJCQkJZWxmX3Byb3QsIGVsZl9mbGFncyk7CiAJCWlmIChCQURfQUREUihlcnJvcikpIHsKIAkJCXNlbmRfc2lnKFNJR0tJTEwsIGN1cnJlbnQsIDApOworCQkJcmV0dmFsID0gSVNfRVJSKCh2b2lkICopZXJyb3IpID8KKwkJCQlQVFJfRVJSKCh2b2lkKillcnJvcikgOiAtRUlOVkFMOwogCQkJZ290byBvdXRfZnJlZV9kZW50cnk7CiAJCX0KIApAQCAtOTAwLDYgKzkwMiw3IEBACiAJCSAgICBUQVNLX1NJWkUgLSBlbGZfcHBudC0+cF9tZW1zeiA8IGspIHsKIAkJCS8qIHNldF9icmsgY2FuIG5ldmVyIHdvcmsuIEF2b2lkIG92ZXJmbG93cy4gKi8KIAkJCXNlbmRfc2lnKFNJR0tJTEwsIGN1cnJlbnQsIDApOworCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0X2ZyZWVfZGVudHJ5OwogCQl9CiAKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwppbmRleCBmM2RkY2E0Li45ZDYyZmJhIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKKysrIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYtZmRwaWMuaD4KICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZW04Ni5jIGIvZnMvYmluZm10X2VtODYuYwppbmRleCAxZjJkMWFkLi41NzZkZDdkIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZW04Ni5jCisrKyBiL2ZzL2JpbmZtdF9lbTg2LmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jCmluZGV4IGU2ZjU3OTkuLjMzMGZkM2YgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9taXNjLmMKKysrIGIvZnMvYmluZm10X21pc2MuYwpAQCAtMTgsNyArMTgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CkBAIC02NzUsMTkgKzY3NSw4IEBACiBibV9zdGF0dXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQogewogCWNoYXIgKnMgPSBlbmFibGVkID8gImVuYWJsZWQiIDogImRpc2FibGVkIjsKLQlpbnQgbGVuID0gc3RybGVuKHMpOwotCWxvZmZfdCBwb3MgPSAqcHBvczsKIAotCWlmIChwb3MgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAocG9zID49IGxlbikKLQkJcmV0dXJuIDA7Ci0JaWYgKGxlbiA8IHBvcyArIG5ieXRlcykKLQkJbmJ5dGVzID0gbGVuIC0gcG9zOwotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBzICsgcG9zLCBuYnl0ZXMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkqcHBvcyA9IHBvcyArIG5ieXRlczsKLQlyZXR1cm4gbmJ5dGVzOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcHBvcywgcywgc3RybGVuKHMpKTsKIH0KIAogc3RhdGljIHNzaXplX3QgYm1fc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCkBAIC03MjcsOCArNzE2LDggQEAKIHN0YXRpYyBpbnQgYm1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgdm9pZCAqIGRhdGEsIGludCBzaWxlbnQpCiB7CiAJc3RhdGljIHN0cnVjdCB0cmVlX2Rlc2NyIGJtX2ZpbGVzW10gPSB7Ci0JCVsxXSA9IHsic3RhdHVzIiwgJmJtX3N0YXR1c19vcGVyYXRpb25zLCBTX0lXVVNSfFNfSVJVR099LAotCQlbMl0gPSB7InJlZ2lzdGVyIiwgJmJtX3JlZ2lzdGVyX29wZXJhdGlvbnMsIFNfSVdVU1J9LAorCQlbMl0gPSB7InN0YXR1cyIsICZibV9zdGF0dXNfb3BlcmF0aW9ucywgU19JV1VTUnxTX0lSVUdPfSwKKwkJWzNdID0geyJyZWdpc3RlciIsICZibV9yZWdpc3Rlcl9vcGVyYXRpb25zLCBTX0lXVVNSfSwKIAkJLyogbGFzdCBvbmUgKi8geyIifQogCX07CiAJaW50IGVyciA9IHNpbXBsZV9maWxsX3N1cGVyKHNiLCAweDQyNDk0ZTRkLCBibV9maWxlcyk7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfc2NyaXB0LmMgYi9mcy9iaW5mbXRfc2NyaXB0LmMKaW5kZXggMWVkYmNjYS4uMzA0Yzg4NSAxMDA2NDQKLS0tIGEvZnMvYmluZm10X3NjcmlwdC5jCisrKyBiL2ZzL2JpbmZtdF9zY3JpcHQuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KIApkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCBmMDJiN2JkLi5lYTE0ODBhIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCkBAIC02Nyw3ICs2OCw3IEBACiBpbnQgc2V0X2Jsb2Nrc2l6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgc2l6ZSkKIHsKIAkvKiBTaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28sIGFuZCBiZXR3ZWVuIDUxMiBhbmQgUEFHRV9TSVpFICovCi0JaWYgKHNpemUgPiBQQUdFX1NJWkUgfHwgc2l6ZSA8IDUxMiB8fCAoc2l6ZSAmIChzaXplLTEpKSkKKwlpZiAoc2l6ZSA+IFBBR0VfU0laRSB8fCBzaXplIDwgNTEyIHx8ICFpc19wb3dlcl9vZl8yKHNpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFNpemUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgc2l6ZSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSAqLwpAQCAtNDU3LDE3ICs0NTgsMTUgQEAKIAlzdHJ1Y3QgYmRldl9pbm9kZSAqZWkgPSAoc3RydWN0IGJkZXZfaW5vZGUgKikgZm9vOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSAmZWktPmJkZXY7CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJbWVtc2V0KGJkZXYsIDAsIHNpemVvZigqYmRldikpOwotCQltdXRleF9pbml0KCZiZGV2LT5iZF9tdXRleCk7Ci0JCXNlbWFfaW5pdCgmYmRldi0+YmRfbW91bnRfc2VtLCAxKTsKLQkJSU5JVF9MSVNUX0hFQUQoJmJkZXYtPmJkX2lub2Rlcyk7Ci0JCUlOSVRfTElTVF9IRUFEKCZiZGV2LT5iZF9saXN0KTsKKwltZW1zZXQoYmRldiwgMCwgc2l6ZW9mKCpiZGV2KSk7CisJbXV0ZXhfaW5pdCgmYmRldi0+YmRfbXV0ZXgpOworCXNlbWFfaW5pdCgmYmRldi0+YmRfbW91bnRfc2VtLCAxKTsKKwlJTklUX0xJU1RfSEVBRCgmYmRldi0+YmRfaW5vZGVzKTsKKwlJTklUX0xJU1RfSEVBRCgmYmRldi0+YmRfbGlzdCk7CiAjaWZkZWYgQ09ORklHX1NZU0ZTCi0JCUlOSVRfTElTVF9IRUFEKCZiZGV2LT5iZF9ob2xkZXJfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmJkZXYtPmJkX2hvbGRlcl9saXN0KTsKICNlbmRpZgotCQlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwotCX0KKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19iZF9mb3JnZXQoc3RydWN0IGlub2RlICppbm9kZSkKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggN2RiMjRiOS4uYWE2ODIwNiAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CkBAIC05ODIsNyArOTgxLDggQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCi0JcGFnZSA9IGZpbmRfb3JfY3JlYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5kZXgsIEdGUF9OT0ZTKTsKKwlwYWdlID0gZmluZF9vcl9jcmVhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbmRleCwKKwkJbWFwcGluZ19nZnBfbWFzayhpbm9kZS0+aV9tYXBwaW5nKSAmIH5fX0dGUF9GUyk7CiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMTcyNyw2ICsxNzI3LDcgQEAKIAl9IHdoaWxlICgoYmggPSBiaC0+Yl90aGlzX3BhZ2UpICE9IGhlYWQpOwogCVNldFBhZ2VFcnJvcihwYWdlKTsKIAlCVUdfT04oUGFnZVdyaXRlYmFjayhwYWdlKSk7CisJbWFwcGluZ19zZXRfZXJyb3IocGFnZS0+bWFwcGluZywgZXJyKTsKIAlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CiAJZG8gewogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5leHQgPSBiaC0+Yl90aGlzX3BhZ2U7CkBAIC0xODQ2LDEzICsxODQ3LDggQEAKIAkJaWYgKGJsb2NrX3N0YXJ0ID49IHRvKQogCQkJYnJlYWs7CiAJCWlmIChidWZmZXJfbmV3KGJoKSkgewotCQkJdm9pZCAqa2FkZHI7Ci0KIAkJCWNsZWFyX2J1ZmZlcl9uZXcoYmgpOwotCQkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCQltZW1zZXQoa2FkZHIrYmxvY2tfc3RhcnQsIDAsIGJoLT5iX3NpemUpOwotCQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Ci0JCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCBibG9ja19zdGFydCwgYmgtPmJfc2l6ZSwgS01fVVNFUjApOwogCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCX0KQEAgLTE5NDAsMTAgKzE5MzYsOCBAQAogCQkJCQlTZXRQYWdlRXJyb3IocGFnZSk7CiAJCQl9CiAJCQlpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7Ci0JCQkJdm9pZCAqa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCQkJbWVtc2V0KGthZGRyICsgaSAqIGJsb2Nrc2l6ZSwgMCwgYmxvY2tzaXplKTsKLQkJCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQkJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCQkJemVyb191c2VyX3BhZ2UocGFnZSwgaSAqIGJsb2Nrc2l6ZSwgYmxvY2tzaXplLAorCQkJCQkJS01fVVNFUjApOwogCQkJCWlmICghZXJyKQogCQkJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAkJCQljb250aW51ZTsKQEAgLTIwODYsNyArMjA4MCw2IEBACiAJbG9uZyBzdGF0dXM7CiAJdW5zaWduZWQgemVyb2Zyb207CiAJdW5zaWduZWQgYmxvY2tzaXplID0gMSA8PCBpbm9kZS0+aV9ibGtiaXRzOwotCXZvaWQgKmthZGRyOwogCiAJd2hpbGUocGFnZS0+aW5kZXggPiAocGdwb3MgPSAqYnl0ZXM+PlBBR0VfQ0FDSEVfU0hJRlQpKSB7CiAJCXN0YXR1cyA9IC1FTk9NRU07CkBAIC0yMTA4LDEwICsyMTAxLDggQEAKIAkJCQkJCVBBR0VfQ0FDSEVfU0laRSwgZ2V0X2Jsb2NrKTsKIAkJaWYgKHN0YXR1cykKIAkJCWdvdG8gb3V0X3VubWFwOwotCQlrYWRkciA9IGttYXBfYXRvbWljKG5ld19wYWdlLCBLTV9VU0VSMCk7Ci0JCW1lbXNldChrYWRkcit6ZXJvZnJvbSwgMCwgUEFHRV9DQUNIRV9TSVpFLXplcm9mcm9tKTsKLQkJZmx1c2hfZGNhY2hlX3BhZ2UobmV3X3BhZ2UpOwotCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCXplcm9fdXNlcl9wYWdlKG5ld19wYWdlLCB6ZXJvZnJvbSwgUEFHRV9DQUNIRV9TSVpFIC0gemVyb2Zyb20sCisJCQkJS01fVVNFUjApOwogCQlnZW5lcmljX2NvbW1pdF93cml0ZShOVUxMLCBuZXdfcGFnZSwgemVyb2Zyb20sIFBBR0VfQ0FDSEVfU0laRSk7CiAJCXVubG9ja19wYWdlKG5ld19wYWdlKTsKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKG5ld19wYWdlKTsKQEAgLTIxMzgsMTAgKzIxMjksNyBAQAogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0MTsKIAlpZiAoemVyb2Zyb20gPCBvZmZzZXQpIHsKLQkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCW1lbXNldChrYWRkcit6ZXJvZnJvbSwgMCwgb2Zmc2V0LXplcm9mcm9tKTsKLQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Ci0JCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwkJemVyb191c2VyX3BhZ2UocGFnZSwgemVyb2Zyb20sIG9mZnNldCAtIHplcm9mcm9tLCBLTV9VU0VSMCk7CiAJCV9fYmxvY2tfY29tbWl0X3dyaXRlKGlub2RlLCBwYWdlLCB6ZXJvZnJvbSwgb2Zmc2V0KTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yMzQwLDEwICsyMzI4LDcgQEAKIAkgKiBFcnJvciByZWNvdmVyeSBpcyBwcmV0dHkgc2xhY2suICBDbGVhciB0aGUgcGFnZSBhbmQgbWFyayBpdCBkaXJ0eQogCSAqIHNvIHdlJ2xsIGxhdGVyIHplcm8gb3V0IGFueSBibG9ja3Mgd2hpY2ggX3dlcmVfIGFsbG9jYXRlZC4KIAkgKi8KLQlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQltZW1zZXQoa2FkZHIsIDAsIFBBR0VfQ0FDSEVfU0laRSk7Ci0JZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Ci0Ja3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworCXplcm9fdXNlcl9wYWdlKHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSwgS01fVVNFUjApOwogCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAlyZXR1cm4gcmV0OwpAQCAtMjM4Miw3ICsyMzY3LDYgQEAKIAlsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCWNvbnN0IHBnb2ZmX3QgZW5kX2luZGV4ID0gaV9zaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJdW5zaWduZWQgb2Zmc2V0OwotCXZvaWQgKmthZGRyOwogCWludCByZXQ7CiAKIAkvKiBJcyB0aGUgcGFnZSBmdWxseSBpbnNpZGUgaV9zaXplPyAqLwpAQCAtMjQxMywxMCArMjM5Nyw3IEBACiAJICogdGhlICBwYWdlIHNpemUsIHRoZSByZW1haW5pbmcgbWVtb3J5IGlzIHplcm9lZCB3aGVuIG1hcHBlZCwgYW5kCiAJICogd3JpdGVzIHRvIHRoYXQgcmVnaW9uIGFyZSBub3Qgd3JpdHRlbiBvdXQgdG8gdGhlIGZpbGUuIgogCSAqLwotCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCW1lbXNldChrYWRkciArIG9mZnNldCwgMCwgUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0KTsKLQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJemVyb191c2VyX3BhZ2UocGFnZSwgb2Zmc2V0LCBQQUdFX0NBQ0hFX1NJWkUgLSBvZmZzZXQsIEtNX1VTRVIwKTsKIG91dDoKIAlyZXQgPSBtcGFnZV93cml0ZXBhZ2UocGFnZSwgZ2V0X2Jsb2NrLCB3YmMpOwogCWlmIChyZXQgPT0gLUVBR0FJTikKQEAgLTI0MzcsNyArMjQxOCw2IEBACiAJdW5zaWduZWQgdG87CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYV9vcHMgPSBtYXBwaW5nLT5hX29wczsKLQljaGFyICprYWRkcjsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICgob2Zmc2V0ICYgKGJsb2Nrc2l6ZSAtIDEpKSA9PSAwKQpAQCAtMjQ1MSwxMCArMjQzMSw4IEBACiAJdG8gPSAob2Zmc2V0ICsgYmxvY2tzaXplKSAmIH4oYmxvY2tzaXplIC0gMSk7CiAJcmV0ID0gYV9vcHMtPnByZXBhcmVfd3JpdGUoTlVMTCwgcGFnZSwgb2Zmc2V0LCB0byk7CiAJaWYgKHJldCA9PSAwKSB7Ci0JCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCQltZW1zZXQoa2FkZHIgKyBvZmZzZXQsIDAsIFBBR0VfQ0FDSEVfU0laRSAtIG9mZnNldCk7Ci0JCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCXplcm9fdXNlcl9wYWdlKHBhZ2UsIG9mZnNldCwgUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0LAorCQkJCUtNX1VTRVIwKTsKIAkJLyoKIAkJICogSXQgd291bGQgYmUgbW9yZSBjb3JyZWN0IHRvIGNhbGwgYW9wcy0+Y29tbWl0X3dyaXRlKCkKIAkJICogaGVyZSwgYnV0IHRoaXMgaXMgbW9yZSBlZmZpY2llbnQuCkBAIC0yNDgwLDcgKzI0NTgsNiBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jdm9pZCAqa2FkZHI7CiAJaW50IGVycjsKIAogCWJsb2Nrc2l6ZSA9IDEgPDwgaW5vZGUtPmlfYmxrYml0czsKQEAgLTI1MzQsMTEgKzI1MTEsNyBAQAogCQkJZ290byB1bmxvY2s7CiAJfQogCi0Ja2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JbWVtc2V0KGthZGRyICsgb2Zmc2V0LCAwLCBsZW5ndGgpOwotCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQorCXplcm9fdXNlcl9wYWdlKHBhZ2UsIG9mZnNldCwgbGVuZ3RoLCBLTV9VU0VSMCk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWVyciA9IDA7CiAKQEAgLTI1NTksNyArMjUzMiw2IEBACiAJbG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAljb25zdCBwZ29mZl90IGVuZF9pbmRleCA9IGlfc2l6ZSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCXVuc2lnbmVkIG9mZnNldDsKLQl2b2lkICprYWRkcjsKIAogCS8qIElzIHRoZSBwYWdlIGZ1bGx5IGluc2lkZSBpX3NpemU/ICovCiAJaWYgKHBhZ2UtPmluZGV4IDwgZW5kX2luZGV4KQpAQCAtMjU4NSwxMCArMjU1Nyw3IEBACiAJICogdGhlICBwYWdlIHNpemUsIHRoZSByZW1haW5pbmcgbWVtb3J5IGlzIHplcm9lZCB3aGVuIG1hcHBlZCwgYW5kCiAJICogd3JpdGVzIHRvIHRoYXQgcmVnaW9uIGFyZSBub3Qgd3JpdHRlbiBvdXQgdG8gdGhlIGZpbGUuIgogCSAqLwotCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCW1lbXNldChrYWRkciArIG9mZnNldCwgMCwgUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0KTsKLQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJemVyb191c2VyX3BhZ2UocGFnZSwgb2Zmc2V0LCBQQUdFX0NBQ0hFX1NJWkUgLSBvZmZzZXQsIEtNX1VTRVIwKTsKIAlyZXR1cm4gX19ibG9ja193cml0ZV9mdWxsX3BhZ2UoaW5vZGUsIHBhZ2UsIGdldF9ibG9jaywgd2JjKTsKIH0KIApAQCAtMjkzMCw4ICsyODk5LDkgQEAKIAkKIHN0cnVjdCBidWZmZXJfaGVhZCAqYWxsb2NfYnVmZmVyX2hlYWQoZ2ZwX3QgZ2ZwX2ZsYWdzKQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqcmV0ID0ga21lbV9jYWNoZV9hbGxvYyhiaF9jYWNoZXAsIGdmcF9mbGFncyk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZXQgPSBrbWVtX2NhY2hlX3phbGxvYyhiaF9jYWNoZXAsIGdmcF9mbGFncyk7CiAJaWYgKHJldCkgeworCQlJTklUX0xJU1RfSEVBRCgmcmV0LT5iX2Fzc29jX2J1ZmZlcnMpOwogCQlnZXRfY3B1X3ZhcihiaF9hY2NvdW50aW5nKS5ucisrOwogCQlyZWNhbGNfYmhfc3RhdGUoKTsKIAkJcHV0X2NwdV92YXIoYmhfYWNjb3VudGluZyk7CkBAIC0yOTUwLDE3ICsyOTIwLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZnJlZV9idWZmZXJfaGVhZCk7CiAKLXN0YXRpYyB2b2lkCi1pbml0X2J1ZmZlcl9oZWFkKHZvaWQgKmRhdGEsIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKSB7Ci0JCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoID0gKHN0cnVjdCBidWZmZXJfaGVhZCAqKWRhdGE7Ci0KLQkJbWVtc2V0KGJoLCAwLCBzaXplb2YoKmJoKSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZiaC0+Yl9hc3NvY19idWZmZXJzKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGJ1ZmZlcl9leGl0X2NwdShpbnQgY3B1KQogewogCWludCBpOwpAQCAtMjk3OCw3ICsyOTM3LDcgQEAKIHN0YXRpYyBpbnQgYnVmZmVyX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7Ci0JaWYgKGFjdGlvbiA9PSBDUFVfREVBRCkKKwlpZiAoYWN0aW9uID09IENQVV9ERUFEIHx8IGFjdGlvbiA9PSBDUFVfREVBRF9GUk9aRU4pCiAJCWJ1ZmZlcl9leGl0X2NwdSgodW5zaWduZWQgbG9uZyloY3B1KTsKIAlyZXR1cm4gTk9USUZZX09LOwogfQpAQCAtMjk4NywxMiArMjk0Niw4IEBACiB7CiAJaW50IG5ycGFnZXM7CiAKLQliaF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiYnVmZmVyX2hlYWQiLAotCQkJCQlzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkKSwgMCwKLQkJCQkJKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfUEFOSUN8Ci0JCQkJCVNMQUJfTUVNX1NQUkVBRCksCi0JCQkJCWluaXRfYnVmZmVyX2hlYWQsCi0JCQkJCU5VTEwpOworCWJoX2NhY2hlcCA9IEtNRU1fQ0FDSEUoYnVmZmVyX2hlYWQsCisJCQlTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX1BBTklDfFNMQUJfTUVNX1NQUkVBRCk7CiAKIAkvKgogCSAqIExpbWl0IHRoZSBiaCBvY2N1cGFuY3kgdG8gMTAlIG9mIFpPTkVfTk9STUFMCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCA4NTY4ZTEwLi5kMzhjNjliIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTcwMSwxMCArNzAxLDggQEAKIHsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2kgPSBpbm9kZTsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikgewotCQlpbm9kZV9pbml0X29uY2UoJmNpZnNpLT52ZnNfaW5vZGUpOwotCQlJTklUX0xJU1RfSEVBRCgmY2lmc2ktPmxvY2tMaXN0KTsKLQl9CisJaW5vZGVfaW5pdF9vbmNlKCZjaWZzaS0+dmZzX2lub2RlKTsKKwlJTklUX0xJU1RfSEVBRCgmY2lmc2ktPmxvY2tMaXN0KTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCBiNTcwNTMwLi45NGQ1YjQ5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCBiNTM2NGY5MC4uYzA4YmRhOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlICJjaWZzcGR1LmgiCiAjaW5jbHVkZSAiY2lmc2dsb2IuaCIKICNpbmNsdWRlICJjaWZzcHJvdG8uaCIKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvY2FjaGUuYyBiL2ZzL2NvZGEvY2FjaGUuYwppbmRleCA1ZDA1MjcxLi5mY2I4OGZhIDEwMDY0NAotLS0gYS9mcy9jb2RhL2NhY2hlLmMKKysrIGIvZnMvY29kYS9jYWNoZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2NvZGEuaD4KICNpbmNsdWRlIDxsaW51eC9jb2RhX2xpbnV4Lmg+CmRpZmYgLS1naXQgYS9mcy9jb2RhL2lub2RlLmMgYi9mcy9jb2RhL2lub2RlLmMKaW5kZXggMGFhZmYzNi4uZGJmZjFiZCAxMDA2NDQKLS0tIGEvZnMvY29kYS9pbm9kZS5jCisrKyBiL2ZzL2NvZGEvaW5vZGUuYwpAQCAtNjIsOCArNjIsNyBAQAogewogCXN0cnVjdCBjb2RhX2lub2RlX2luZm8gKmVpID0gKHN0cnVjdCBjb2RhX2lub2RlX2luZm8gKikgZm9vOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKQotCQlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOworCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CiB9CiAgCiBpbnQgY29kYV9pbml0X2lub2RlY2FjaGUodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvdXBjYWxsLmMgYi9mcy9jb2RhL3VwY2FsbC5jCmluZGV4IGE1YjVlNjMuLjVmYWFjZGIgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvdXBjYWxsLmMKKysrIGIvZnMvY29kYS91cGNhbGwuYwpAQCAtMTYsNyArMTYsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IDcyZTVlNjkuLjRkYjYyMTYgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMjQsMTAgKzI1LDggQEAKICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgkvKiBmb3IgU0lPQ0RFVlBSSVZBVEUgKi8KICNpbmNsdWRlIDxsaW51eC9zbWIuaD4KICNpbmNsdWRlIDxsaW51eC9zbWJfbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9uY3BfbW91bnQuaD4KQEAgLTQ1LDEzICs0NCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC90c2FjY3Rfa2Vybi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2V2ZW50cG9sbC5oPgogCi0jaW5jbHVkZSA8bmV0L3NvY2suaD4JCS8qIHNpb2NkZXZwcml2YXRlX2lvY3RsICovCi0KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KQEAgLTc5LDMwICs3OCw1NyBAQAogICovCiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c191dGltZShjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHN0cnVjdCBjb21wYXRfdXRpbWJ1ZiBfX3VzZXIgKnQpCiB7Ci0Jc3RydWN0IHRpbWV2YWwgdHZbMl07CisJc3RydWN0IHRpbWVzcGVjIHR2WzJdOwogCiAJaWYgKHQpIHsKIAkJaWYgKGdldF91c2VyKHR2WzBdLnR2X3NlYywgJnQtPmFjdGltZSkgfHwKIAkJICAgIGdldF91c2VyKHR2WzFdLnR2X3NlYywgJnQtPm1vZHRpbWUpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXR2WzBdLnR2X3VzZWMgPSAwOwotCQl0dlsxXS50dl91c2VjID0gMDsKKwkJdHZbMF0udHZfbnNlYyA9IDA7CisJCXR2WzFdLnR2X25zZWMgPSAwOwogCX0KLQlyZXR1cm4gZG9fdXRpbWVzKEFUX0ZEQ1dELCBmaWxlbmFtZSwgdCA/IHR2IDogTlVMTCk7CisJcmV0dXJuIGRvX3V0aW1lcyhBVF9GRENXRCwgZmlsZW5hbWUsIHQgPyB0diA6IE5VTEwsIDApOworfQorCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c191dGltZW5zYXQodW5zaWduZWQgaW50IGRmZCwgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqdCwgaW50IGZsYWdzKQoreworCXN0cnVjdCB0aW1lc3BlYyB0dlsyXTsKKworCWlmICAodCkgeworCQlpZiAoZ2V0X2NvbXBhdF90aW1lc3BlYygmdHZbMF0sICZ0WzBdKSB8fAorCQkgICAgZ2V0X2NvbXBhdF90aW1lc3BlYygmdHZbMV0sICZ0WzFdKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmICgodHZbMF0udHZfbnNlYyA9PSBVVElNRV9PTUlUIHx8IHR2WzBdLnR2X25zZWMgPT0gVVRJTUVfTk9XKQorCQkgICAgJiYgdHZbMF0udHZfc2VjICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCh0dlsxXS50dl9uc2VjID09IFVUSU1FX09NSVQgfHwgdHZbMV0udHZfbnNlYyA9PSBVVElNRV9OT1cpCisJCSAgICAmJiB0dlsxXS50dl9zZWMgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICh0dlswXS50dl9uc2VjID09IFVUSU1FX09NSVQgJiYgdHZbMV0udHZfbnNlYyA9PSBVVElNRV9PTUlUKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiBkb191dGltZXMoZGZkLCBmaWxlbmFtZSwgdCA/IHR2IDogTlVMTCwgZmxhZ3MpOwogfQogCiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19mdXRpbWVzYXQodW5zaWduZWQgaW50IGRmZCwgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0KQogewotCXN0cnVjdCB0aW1ldmFsIHR2WzJdOworCXN0cnVjdCB0aW1lc3BlYyB0dlsyXTsKIAogCWlmICh0KSB7CiAJCWlmIChnZXRfdXNlcih0dlswXS50dl9zZWMsICZ0WzBdLnR2X3NlYykgfHwKLQkJICAgIGdldF91c2VyKHR2WzBdLnR2X3VzZWMsICZ0WzBdLnR2X3VzZWMpIHx8CisJCSAgICBnZXRfdXNlcih0dlswXS50dl9uc2VjLCAmdFswXS50dl91c2VjKSB8fAogCQkgICAgZ2V0X3VzZXIodHZbMV0udHZfc2VjLCAmdFsxXS50dl9zZWMpIHx8Ci0JCSAgICBnZXRfdXNlcih0dlsxXS50dl91c2VjLCAmdFsxXS50dl91c2VjKSkKKwkJICAgIGdldF91c2VyKHR2WzFdLnR2X25zZWMsICZ0WzFdLnR2X3VzZWMpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh0dlswXS50dl9uc2VjID49IDEwMDAwMDAgfHwgdHZbMF0udHZfbnNlYyA8IDAgfHwKKwkJICAgIHR2WzFdLnR2X25zZWMgPj0gMTAwMDAwMCB8fCB0dlsxXS50dl9uc2VjIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQl0dlswXS50dl9uc2VjICo9IDEwMDA7CisJCXR2WzFdLnR2X25zZWMgKj0gMTAwMDsKIAl9Ci0JcmV0dXJuIGRvX3V0aW1lcyhkZmQsIGZpbGVuYW1lLCB0ID8gdHYgOiBOVUxMKTsKKwlyZXR1cm4gZG9fdXRpbWVzKGRmZCwgZmlsZW5hbWUsIHQgPyB0diA6IE5VTEwsIDApOwogfQogCiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c191dGltZXMoY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0KQpAQCAtMzEyLDE2MyArMzM4LDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLS8qIGlvY3RsMzIgc3R1ZmYsIHVzZWQgYnkgc3BhcmM2NCwgcGFyaXNjLCBzMzkweCwgcHBjNjQsIHg4Nl82NCwgTUlQUyAqLwotCi0jZGVmaW5lIElPQ1RMX0hBU0hTSVpFIDI1Ngotc3RhdGljIHN0cnVjdCBpb2N0bF90cmFucyAqaW9jdGwzMl9oYXNoX3RhYmxlW0lPQ1RMX0hBU0hTSVpFXTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlvY3RsMzJfaGFzaCh1bnNpZ25lZCBsb25nIGNtZCkKLXsKLQlyZXR1cm4gKCgoY21kID4+IDYpIF4gKGNtZCA+PiA0KSBeIGNtZCkpICUgSU9DVExfSEFTSFNJWkU7Ci19Ci0KLXN0YXRpYyB2b2lkIGlvY3RsMzJfaW5zZXJ0X3RyYW5zbGF0aW9uKHN0cnVjdCBpb2N0bF90cmFucyAqdHJhbnMpCi17Ci0JdW5zaWduZWQgbG9uZyBoYXNoOwotCXN0cnVjdCBpb2N0bF90cmFucyAqdDsKLQotCWhhc2ggPSBpb2N0bDMyX2hhc2ggKHRyYW5zLT5jbWQpOwotCWlmICghaW9jdGwzMl9oYXNoX3RhYmxlW2hhc2hdKQotCQlpb2N0bDMyX2hhc2hfdGFibGVbaGFzaF0gPSB0cmFuczsKLQllbHNlIHsKLQkJdCA9IGlvY3RsMzJfaGFzaF90YWJsZVtoYXNoXTsKLQkJd2hpbGUgKHQtPm5leHQpCi0JCQl0ID0gdC0+bmV4dDsKLQkJdHJhbnMtPm5leHQgPSBOVUxMOwotCQl0LT5uZXh0ID0gdHJhbnM7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3N5czMyX2lvY3RsKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaW9jdGxfdGFibGVfc2l6ZTsgaSsrKSB7Ci0JCWlmIChpb2N0bF9zdGFydFtpXS5uZXh0ICE9IDApIHsgCi0JCQlwcmludGsoImlvY3RsIHRyYW5zbGF0aW9uICVkIGJhZFxuIixpKTsgCi0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQlpb2N0bDMyX2luc2VydF90cmFuc2xhdGlvbigmaW9jdGxfc3RhcnRbaV0pOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotX19pbml0Y2FsbChpbml0X3N5czMyX2lvY3RsKTsKLQotc3RhdGljIHZvaWQgY29tcGF0X2lvY3RsX2Vycm9yKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmQsCi0JCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWNoYXIgYnVmWzEwXTsKLQljaGFyICpmbiA9ICI/IjsKLQljaGFyICpwYXRoOwotCi0JLyogZmluZCB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlLiAqLwotCXBhdGggPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAocGF0aCkgewotCQlmbiA9IGRfcGF0aChmaWxwLT5mX3BhdGguZGVudHJ5LCBmaWxwLT5mX3BhdGgubW50LCBwYXRoLCBQQUdFX1NJWkUpOwotCQlpZiAoSVNfRVJSKGZuKSkKLQkJCWZuID0gIj8iOwotCX0KLQotCXNwcmludGYoYnVmLCInJWMnIiwgKGNtZD4+X0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSyk7Ci0JaWYgKCFpc3ByaW50KGJ1ZlsxXSkpCi0JCXNwcmludGYoYnVmLCAiJTAyeCIsIGJ1ZlsxXSk7Ci0JY29tcGF0X3ByaW50aygiaW9jdGwzMiglczolZCk6IFVua25vd24gY21kIGZkKCVkKSAiCi0JCQkiY21kKCUwOHgpe3Q6JXM7c3o6JXV9IGFyZyglMDh4KSBvbiAlc1xuIiwKLQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKLQkJCShpbnQpZmQsICh1bnNpZ25lZCBpbnQpY21kLCBidWYsCi0JCQkoY21kID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfU0laRU1BU0ssCi0JCQkodW5zaWduZWQgaW50KWFyZywgZm4pOwotCi0JaWYgKHBhdGgpCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwYXRoKTsKLX0KLQotYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBmaWxlICpmaWxwOwotCWludCBlcnJvciA9IC1FQkFERjsKLQlzdHJ1Y3QgaW9jdGxfdHJhbnMgKnQ7Ci0JaW50IGZwdXRfbmVlZGVkOwotCi0JZmlscCA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7Ci0JaWYgKCFmaWxwKQotCQlnb3RvIG91dDsKLQotCS8qIFJFRC1QRU4gaG93IHNob3VsZCBMU00gbW9kdWxlIGtub3cgaXQncyBoYW5kbGluZyAzMmJpdD8gKi8KLQllcnJvciA9IHNlY3VyaXR5X2ZpbGVfaW9jdGwoZmlscCwgY21kLCBhcmcpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZnB1dDsKLQotCS8qCi0JICogVG8gYWxsb3cgdGhlIGNvbXBhdF9pb2N0bCBoYW5kbGVycyB0byBiZSBzZWxmIGNvbnRhaW5lZAotCSAqIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGNvbW1vbiBpb2N0bHMgaGVyZSBmaXJzdC4KLQkgKiBKdXN0IGhhbmRsZSB0aGVtIHdpdGggdGhlIHN0YW5kYXJkIGhhbmRsZXJzIGJlbG93LgotCSAqLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBGSU9DTEVYOgotCWNhc2UgRklPTkNMRVg6Ci0JY2FzZSBGSU9OQklPOgotCWNhc2UgRklPQVNZTkM6Ci0JY2FzZSBGSU9RU0laRToKLQkJYnJlYWs7Ci0KLQljYXNlIEZJQk1BUDoKLQljYXNlIEZJR0VUQlNaOgotCWNhc2UgRklPTlJFQUQ6Ci0JCWlmIChTX0lTUkVHKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCi0JCQlicmVhazsKLQkJLypGQUxMIFRIUk9VR0gqLwotCi0JZGVmYXVsdDoKLQkJaWYgKGZpbHAtPmZfb3AgJiYgZmlscC0+Zl9vcC0+Y29tcGF0X2lvY3RsKSB7Ci0JCQllcnJvciA9IGZpbHAtPmZfb3AtPmNvbXBhdF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7Ci0JCQlpZiAoZXJyb3IgIT0gLUVOT0lPQ1RMQ01EKQotCQkJCWdvdG8gb3V0X2ZwdXQ7Ci0JCX0KLQotCQlpZiAoIWZpbHAtPmZfb3AgfHwKLQkJICAgICghZmlscC0+Zl9vcC0+aW9jdGwgJiYgIWZpbHAtPmZfb3AtPnVubG9ja2VkX2lvY3RsKSkKLQkJCWdvdG8gZG9faW9jdGw7Ci0JCWJyZWFrOwotCX0KLQotCWZvciAodCA9IGlvY3RsMzJfaGFzaF90YWJsZVtpb2N0bDMyX2hhc2goY21kKV07IHQ7IHQgPSB0LT5uZXh0KSB7Ci0JCWlmICh0LT5jbWQgPT0gY21kKQotCQkJZ290byBmb3VuZF9oYW5kbGVyOwotCX0KLQotCWlmIChTX0lTU09DSyhmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpICYmCi0JICAgIGNtZCA+PSBTSU9DREVWUFJJVkFURSAmJiBjbWQgPD0gKFNJT0NERVZQUklWQVRFICsgMTUpKSB7Ci0JCWVycm9yID0gc2lvY2RldnByaXZhdGVfaW9jdGwoZmQsIGNtZCwgYXJnKTsKLQl9IGVsc2UgewotCQlzdGF0aWMgaW50IGNvdW50OwotCi0JCWlmICgrK2NvdW50IDw9IDUwKQotCQkJY29tcGF0X2lvY3RsX2Vycm9yKGZpbHAsIGZkLCBjbWQsIGFyZyk7Ci0JCWVycm9yID0gLUVJTlZBTDsKLQl9Ci0KLQlnb3RvIG91dF9mcHV0OwotCi0gZm91bmRfaGFuZGxlcjoKLQlpZiAodC0+aGFuZGxlcikgewotCQlsb2NrX2tlcm5lbCgpOwotCQllcnJvciA9IHQtPmhhbmRsZXIoZmQsIGNtZCwgYXJnLCBmaWxwKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlnb3RvIG91dF9mcHV0OwotCX0KLQotIGRvX2lvY3RsOgotCWVycm9yID0gdmZzX2lvY3RsKGZpbHAsIGZkLCBjbWQsIGFyZyk7Ci0gb3V0X2ZwdXQ6Ci0JZnB1dF9saWdodChmaWxwLCBmcHV0X25lZWRlZCk7Ci0gb3V0OgotCXJldHVybiBlcnJvcjsKLX0KLQogc3RhdGljIGludCBnZXRfY29tcGF0X2Zsb2NrKHN0cnVjdCBmbG9jayAqa2ZsLCBzdHJ1Y3QgY29tcGF0X2Zsb2NrIF9fdXNlciAqdWZsKQogewogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1ZmwsIHNpemVvZigqdWZsKSkgfHwKQEAgLTkwMiw4ICs3NzEsNiBAQAogfQogCiAjZGVmaW5lIE5BTUVfT0ZGU0VUKGRlKSAoKGludCkgKChkZSktPmRfbmFtZSAtIChjaGFyIF9fdXNlciAqKSAoZGUpKSkKLSNkZWZpbmUgQ09NUEFUX1JPVU5EX1VQKHgpICgoKHgpK3NpemVvZihjb21wYXRfbG9uZ190KS0xKSAmIFwKLQkJCQl+KHNpemVvZihjb21wYXRfbG9uZ190KS0xKSkKIAogc3RydWN0IGNvbXBhdF9vbGRfbGludXhfZGlyZW50IHsKIAljb21wYXRfdWxvbmdfdAlkX2lubzsKQEAgLTk5MSw3ICs4NTgsNyBAQAogCXN0cnVjdCBjb21wYXRfbGludXhfZGlyZW50IF9fdXNlciAqIGRpcmVudDsKIAlzdHJ1Y3QgY29tcGF0X2dldGRlbnRzX2NhbGxiYWNrICpidWYgPSBfX2J1ZjsKIAljb21wYXRfdWxvbmdfdCBkX2lubzsKLQlpbnQgcmVjbGVuID0gQ09NUEFUX1JPVU5EX1VQKE5BTUVfT0ZGU0VUKGRpcmVudCkgKyBuYW1sZW4gKyAyKTsKKwlpbnQgcmVjbGVuID0gQUxJR04oTkFNRV9PRkZTRVQoZGlyZW50KSArIG5hbWxlbiArIDIsIHNpemVvZihjb21wYXRfbG9uZ190KSk7CiAKIAlidWYtPmVycm9yID0gLUVJTlZBTDsJLyogb25seSB1c2VkIGlmIHdlIGZhaWwuLiAqLwogCWlmIChyZWNsZW4gPiBidWYtPmNvdW50KQpAQCAtMTA2Niw3ICs5MzMsNiBAQAogfQogCiAjaWZuZGVmIF9fQVJDSF9PTUlUX0NPTVBBVF9TWVNfR0VUREVOVFM2NAotI2RlZmluZSBDT01QQVRfUk9VTkRfVVA2NCh4KSAoKCh4KStzaXplb2YodTY0KS0xKSAmIH4oc2l6ZW9mKHU2NCktMSkpCiAKIHN0cnVjdCBjb21wYXRfZ2V0ZGVudHNfY2FsbGJhY2s2NCB7CiAJc3RydWN0IGxpbnV4X2RpcmVudDY0IF9fdXNlciAqY3VycmVudF9kaXI7CkBAIC0xMDgxLDcgKzk0Nyw3IEBACiAJc3RydWN0IGxpbnV4X2RpcmVudDY0IF9fdXNlciAqZGlyZW50OwogCXN0cnVjdCBjb21wYXRfZ2V0ZGVudHNfY2FsbGJhY2s2NCAqYnVmID0gX19idWY7CiAJaW50IGpqID0gTkFNRV9PRkZTRVQoZGlyZW50KTsKLQlpbnQgcmVjbGVuID0gQ09NUEFUX1JPVU5EX1VQNjQoamogKyBuYW1sZW4gKyAxKTsKKwlpbnQgcmVjbGVuID0gQUxJR04oamogKyBuYW1sZW4gKyAxLCBzaXplb2YodTY0KSk7CiAJdTY0IG9mZjsKIAogCWJ1Zi0+ZXJyb3IgPSAtRUlOVkFMOwkvKiBvbmx5IHVzZWQgaWYgd2UgZmFpbC4uICovCkBAIC0xNTk0LDggKzE0NjAsNiBAQAogCiAjZGVmaW5lIF9fQ09NUEFUX05GREJJVFMgICAgICAgKDggKiBzaXplb2YoY29tcGF0X3Vsb25nX3QpKQogCi0jZGVmaW5lIFJPVU5EX1VQKHgseSkgKCgoeCkrKHkpLTEpLyh5KSkKLQogLyoKICAqIE9vbywgbmFzdHkuICBXZSBuZWVkIGhlcmUgdG8gZnJvYiAzMi1iaXQgdW5zaWduZWQgbG9uZ3MgdG8KICAqIDY0LWJpdCB1bnNpZ25lZCBsb25ncy4KQEAgLTE2MDQsNyArMTQ2OCw3IEBACiBpbnQgY29tcGF0X2dldF9mZF9zZXQodW5zaWduZWQgbG9uZyBuciwgY29tcGF0X3Vsb25nX3QgX191c2VyICp1ZmRzZXQsCiAJCQl1bnNpZ25lZCBsb25nICpmZHNldCkKIHsKLQluciA9IFJPVU5EX1VQKG5yLCBfX0NPTVBBVF9ORkRCSVRTKTsKKwluciA9IERJVl9ST1VORF9VUChuciwgX19DT01QQVRfTkZEQklUUyk7CiAJaWYgKHVmZHNldCkgewogCQl1bnNpZ25lZCBsb25nIG9kZDsKIApAQCAtMTYzOCw3ICsxNTAyLDcgQEAKIAkJICAgICAgdW5zaWduZWQgbG9uZyAqZmRzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyBvZGQ7Ci0JbnIgPSBST1VORF9VUChuciwgX19DT01QQVRfTkZEQklUUyk7CisJbnIgPSBESVZfUk9VTkRfVVAobnIsIF9fQ09NUEFUX05GREJJVFMpOwogCiAJaWYgKCF1ZmRzZXQpCiAJCXJldHVybiAwOwpAQCAtMTY4MCw5ICsxNTQ0LDEwIEBACiAJY29tcGF0X3Vsb25nX3QgX191c2VyICpvdXRwLCBjb21wYXRfdWxvbmdfdCBfX3VzZXIgKmV4cCwgczY0ICp0aW1lb3V0KQogewogCWZkX3NldF9iaXRzIGZkczsKLQljaGFyICpiaXRzOworCXZvaWQgKmJpdHM7CiAJaW50IHNpemUsIG1heF9mZHMsIHJldCA9IC1FSU5WQUw7CiAJc3RydWN0IGZkdGFibGUgKmZkdDsKKwlsb25nIHN0YWNrX2Zkc1tTRUxFQ1RfU1RBQ0tfQUxMT0Mvc2l6ZW9mKGxvbmcpXTsKIAogCWlmIChuIDwgMCkKIAkJZ290byBvdXRfbm9mZHM7CkBAIC0xNzAwLDExICsxNTY1LDE0IEBACiAJICogc2luY2Ugd2UgdXNlZCBmZHNldCB3ZSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBpbiB1bml0cyBvZgogCSAqIGxvbmctd29yZHMuCiAJICovCi0JcmV0ID0gLUVOT01FTTsKIAlzaXplID0gRkRTX0JZVEVTKG4pOwotCWJpdHMgPSBrbWFsbG9jKDYgKiBzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJpdHMpCi0JCWdvdG8gb3V0X25vZmRzOworCWJpdHMgPSBzdGFja19mZHM7CisJaWYgKHNpemUgPiBzaXplb2Yoc3RhY2tfZmRzKSAvIDYpIHsKKwkJYml0cyA9IGttYWxsb2MoNiAqIHNpemUsIEdGUF9LRVJORUwpOworCQlyZXQgPSAtRU5PTUVNOworCQlpZiAoIWJpdHMpCisJCQlnb3RvIG91dF9ub2ZkczsKKwl9CiAJZmRzLmluICAgICAgPSAodW5zaWduZWQgbG9uZyAqKSAgYml0czsKIAlmZHMub3V0ICAgICA9ICh1bnNpZ25lZCBsb25nICopIChiaXRzICsgICBzaXplKTsKIAlmZHMuZXggICAgICA9ICh1bnNpZ25lZCBsb25nICopIChiaXRzICsgMipzaXplKTsKQEAgLTE3MzYsNyArMTYwNCw4IEBACiAJICAgIGNvbXBhdF9zZXRfZmRfc2V0KG4sIGV4cCwgZmRzLnJlc19leCkpCiAJCXJldCA9IC1FRkFVTFQ7CiBvdXQ6Ci0Ja2ZyZWUoYml0cyk7CisJaWYgKGJpdHMgIT0gc3RhY2tfZmRzKQorCQlrZnJlZShiaXRzKTsKIG91dF9ub2ZkczoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTc2MCw3ICsxNjI5LDcgQEAKIAkJaWYgKCh1NjQpdHYudHZfc2VjID49ICh1NjQpTUFYX0lOVDY0X1NFQ09ORFMpCiAJCQl0aW1lb3V0ID0gLTE7CS8qIGluZmluaXRlICovCiAJCWVsc2UgewotCQkJdGltZW91dCA9IFJPVU5EX1VQKHR2LnR2X3VzZWMsIDEwMDAwMDAvSFopOworCQkJdGltZW91dCA9IERJVl9ST1VORF9VUCh0di50dl91c2VjLCAxMDAwMDAwL0haKTsKIAkJCXRpbWVvdXQgKz0gdHYudHZfc2VjICogSFo7CiAJCX0KIAl9CkBAIC0xODI4LDcgKzE2OTcsNyBAQAogCWRvIHsKIAkJaWYgKHRzcCkgewogCQkJaWYgKCh1bnNpZ25lZCBsb25nKXRzLnR2X3NlYyA8IE1BWF9TRUxFQ1RfU0VDT05EUykgewotCQkJCXRpbWVvdXQgPSBST1VORF9VUCh0cy50dl9uc2VjLCAxMDAwMDAwMDAwL0haKTsKKwkJCQl0aW1lb3V0ID0gRElWX1JPVU5EX1VQKHRzLnR2X25zZWMsIDEwMDAwMDAwMDAvSFopOwogCQkJCXRpbWVvdXQgKz0gdHMudHZfc2VjICogKHVuc2lnbmVkIGxvbmcpSFo7CiAJCQkJdHMudHZfc2VjID0gMDsKIAkJCQl0cy50dl9uc2VjID0gMDsKQEAgLTE5MjQsNyArMTc5Myw3IEBACiAJCS8qIFdlIGFzc3VtZSB0aGF0IHRzLnR2X3NlYyBpcyBhbHdheXMgbG93ZXIgdGhhbgogCQkgICB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdGhhdCBjYW4gYmUgZXhwcmVzc2VkIGluCiAJCSAgIGFuIHM2NC4gT3RoZXJ3aXNlIHRoZSBjb21waWxlciBiaXRjaGVzIGF0IHVzICovCi0JCXRpbWVvdXQgPSBST1VORF9VUCh0cy50dl9uc2VjLCAxMDAwMDAwMDAwL0haKTsKKwkJdGltZW91dCA9IERJVl9ST1VORF9VUCh0cy50dl9uc2VjLCAxMDAwMDAwMDAwL0haKTsKIAkJdGltZW91dCArPSB0cy50dl9zZWMgKiBIWjsKIAl9CiAKQEAgLTIzMzYsMyArMjIwNSw0NiBAQAogI2VuZGlmIC8qIFRJRl9SRVNUT1JFX1NJR01BU0sgKi8KIAogI2VuZGlmIC8qIENPTkZJR19FUE9MTCAqLworCisjaWZkZWYgQ09ORklHX1NJR05BTEZECisKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NpZ25hbGZkKGludCB1ZmQsCisJCQkJICAgIGNvbnN0IGNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKnNpZ21hc2ssCisJCQkJICAgIGNvbXBhdF9zaXplX3Qgc2lnc2V0c2l6ZSkKK3sKKwljb21wYXRfc2lnc2V0X3Qgc3MzMjsKKwlzaWdzZXRfdCB0bXA7CisJc2lnc2V0X3QgX191c2VyICprc2lnbWFzazsKKworCWlmIChzaWdzZXRzaXplICE9IHNpemVvZihjb21wYXRfc2lnc2V0X3QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY29weV9mcm9tX3VzZXIoJnNzMzIsIHNpZ21hc2ssIHNpemVvZihzczMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCXNpZ3NldF9mcm9tX2NvbXBhdCgmdG1wLCAmc3MzMik7CisJa3NpZ21hc2sgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc2lnc2V0X3QpKTsKKwlpZiAoY29weV90b191c2VyKGtzaWdtYXNrLCAmdG1wLCBzaXplb2Yoc2lnc2V0X3QpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gc3lzX3NpZ25hbGZkKHVmZCwga3NpZ21hc2ssIHNpemVvZihzaWdzZXRfdCkpOworfQorCisjZW5kaWYgLyogQ09ORklHX1NJR05BTEZEICovCisKKyNpZmRlZiBDT05GSUdfVElNRVJGRAorCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c190aW1lcmZkKGludCB1ZmQsIGludCBjbG9ja2lkLCBpbnQgZmxhZ3MsCisJCQkJICAgY29uc3Qgc3RydWN0IGNvbXBhdF9pdGltZXJzcGVjIF9fdXNlciAqdXRtcikKK3sKKwlzdHJ1Y3QgaXRpbWVyc3BlYyB0OworCXN0cnVjdCBpdGltZXJzcGVjIF9fdXNlciAqdXQ7CisKKwlpZiAoZ2V0X2NvbXBhdF9pdGltZXJzcGVjKCZ0LCB1dG1yKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJdXQgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKnV0KSk7CisJaWYgKGNvcHlfdG9fdXNlcih1dCwgJnQsIHNpemVvZih0KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIHN5c190aW1lcmZkKHVmZCwgY2xvY2tpZCwgZmxhZ3MsIHV0KTsKK30KKworI2VuZGlmIC8qIENPTkZJR19USU1FUkZEICovCmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IDQ2NGMwNGEuLjZiNDRjZGMgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2JyaWRnZS5oPgpAQCAtNTgsNyArNTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3R1bi5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwzMi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgpAQCAtNjYsNyArNjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YWxrLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CiAKLSNpbmNsdWRlIDxuZXQvc29jay5oPiAgICAgICAgICAvKiBzaW9jZGV2cHJpdmF0ZV9pb2N0bCAqLwogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2kuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL3JmY29tbS5oPgpAQCAtNDc1LDcgKzQ3Miw3IEBACiAJfTsKIH0KIAotaW50IHNpb2NkZXZwcml2YXRlX2lvY3RsKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHNpb2NkZXZwcml2YXRlX2lvY3RsKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGlmcmVxIF9fdXNlciAqdV9pZnJlcTY0OwogCXN0cnVjdCBpZnJlcTMyIF9fdXNlciAqdV9pZnJlcTMyID0gY29tcGF0X3B0cihhcmcpOwpAQCAtNjg3LDggKzY4NCwxMCBAQAogCWlmICghZXJyKSB7CiAJCWVyciA9IGNvcHlfdG9fdXNlciAodWdlbywgJmdlbywgNCk7CiAJCWVyciB8PSBfX3B1dF91c2VyIChnZW8uc3RhcnQsICZ1Z2VvLT5zdGFydCk7CisJCWlmIChlcnIpCisJCQllcnIgPSAtRUZBVUxUOwogCX0KLQlyZXR1cm4gZXJyID8gLUVGQVVMVCA6IDA7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBoZGlvX2lvY3RsX3RyYW5zKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCkBAIC0xMTk1LDYgKzExOTQsNyBAQAogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHZjX2RhdGEgKnZjOwogCQogCWlmIChmaWxlLT5mX29wLT5pb2N0bCAhPSB0dHlfaW9jdGwpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTIwNSwxMiArMTIwNSwxNiBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogCWlmICh0dHktPmRyaXZlci0+aW9jdGwgIT0gdnRfaW9jdGwpCiAJCXJldHVybiAtRUlOVkFMOwotCQorCisJdmMgPSAoc3RydWN0IHZjX2RhdGEgKil0dHktPmRyaXZlcl9kYXRhOworCWlmICghdmNfY29uc19hbGxvY2F0ZWQodmMtPnZjX251bSkpIAkvKiBpbXBvc3NpYmxlPyAqLworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCiAJLyoKIAkgKiBUbyBoYXZlIHBlcm1pc3Npb25zIHRvIGRvIG1vc3Qgb2YgdGhlIHZ0IGlvY3Rscywgd2UgZWl0aGVyIGhhdmUKLQkgKiB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHR0eSwgb3Igc3VwZXItdXNlci4KKwkgKiB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHR0eSwgb3IgaGF2ZSBDQVBfU1lTX1RUWV9DT05GSUcuCiAJICovCi0JaWYgKGN1cnJlbnQtPnNpZ25hbC0+dHR5ID09IHR0eSB8fCBjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCWlmIChjdXJyZW50LT5zaWduYWwtPnR0eSA9PSB0dHkgfHwgY2FwYWJsZShDQVBfU1lTX1RUWV9DT05GSUcpKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiB9CkBAIC0xMzExLDE2ICsxMzE1LDI4IEBACiAJc3RydWN0IHVuaW1hcGRlc2MzMiB0bXA7CiAJc3RydWN0IHVuaW1hcGRlc2MzMiBfX3VzZXIgKnVzZXJfdWQgPSBjb21wYXRfcHRyKGFyZyk7CiAJaW50IHBlcm0gPSB2dF9jaGVjayhmaWxlKTsKLQkKLQlpZiAocGVybSA8IDApIHJldHVybiBwZXJtOworCXN0cnVjdCB2Y19kYXRhICp2YzsKKworCWlmIChwZXJtIDwgMCkKKwkJcmV0dXJuIHBlcm07CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXJfdWQsIHNpemVvZiB0bXApKQogCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAodG1wLmVudHJpZXMpCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgY29tcGF0X3B0cih0bXAuZW50cmllcyksCisJCQkJdG1wLmVudHJ5X2N0KnNpemVvZihzdHJ1Y3QgdW5pcGFpcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJdmMgPSAoKHN0cnVjdCB0dHlfc3RydWN0ICopZmlsZS0+cHJpdmF0ZV9kYXRhKS0+ZHJpdmVyX2RhdGE7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFBJT19VTklNQVA6Ci0JCWlmICghcGVybSkgcmV0dXJuIC1FUEVSTTsKLQkJcmV0dXJuIGNvbl9zZXRfdW5pbWFwKHZjX2NvbnNbZmdfY29uc29sZV0uZCwgdG1wLmVudHJ5X2N0LCBjb21wYXRfcHRyKHRtcC5lbnRyaWVzKSk7CisJCWlmICghcGVybSkKKwkJCXJldHVybiAtRVBFUk07CisJCXJldHVybiBjb25fc2V0X3VuaW1hcCh2YywgdG1wLmVudHJ5X2N0LAorCQkJCQkJY29tcGF0X3B0cih0bXAuZW50cmllcykpOwogCWNhc2UgR0lPX1VOSU1BUDoKLQkJcmV0dXJuIGNvbl9nZXRfdW5pbWFwKHZjX2NvbnNbZmdfY29uc29sZV0uZCwgdG1wLmVudHJ5X2N0LCAmKHVzZXJfdWQtPmVudHJ5X2N0KSwgY29tcGF0X3B0cih0bXAuZW50cmllcykpOworCQlpZiAoIXBlcm0gJiYgZmdfY29uc29sZSAhPSB2Yy0+dmNfbnVtKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJcmV0dXJuIGNvbl9nZXRfdW5pbWFwKHZjLCB0bXAuZW50cnlfY3QsICYodXNlcl91ZC0+ZW50cnlfY3QpLAorCQkJCQkJY29tcGF0X3B0cih0bXAuZW50cmllcykpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIzODUsNiArMjQwMSwxNiBAQAogCXJldHVybiBzeXNfaW9jdGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpdG4pOwogfQogCisKK3R5cGVkZWYgaW50ICgqaW9jdGxfdHJhbnNfaGFuZGxlcl90KSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKKwkJCQkJdW5zaWduZWQgbG9uZywgc3RydWN0IGZpbGUgKik7CisKK3N0cnVjdCBpb2N0bF90cmFucyB7CisJdW5zaWduZWQgbG9uZyBjbWQ7CisJaW9jdGxfdHJhbnNfaGFuZGxlcl90IGhhbmRsZXI7CisJc3RydWN0IGlvY3RsX3RyYW5zICpuZXh0OworfTsKKwogI2RlZmluZSBIQU5ETEVfSU9DVEwoY21kLGhhbmRsZXIpIFwKIAl7IChjbWQpLCAoaW9jdGxfdHJhbnNfaGFuZGxlcl90KShoYW5kbGVyKSB9LAogCkBAIC0yNDA1LDggKzI0MzEsODM1IEBACiAgICBNb3N0IG90aGVyIHJlYXNvbnMgYXJlIG5vdCB2YWxpZC4gKi8KICNkZWZpbmUgSUdOT1JFX0lPQ1RMKGNtZCkgQ09NUEFUSUJMRV9JT0NUTChjbWQpCiAKLXN0cnVjdCBpb2N0bF90cmFucyBpb2N0bF9zdGFydFtdID0gewotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdF9pb2N0bC5oPgorc3RhdGljIHN0cnVjdCBpb2N0bF90cmFucyBpb2N0bF9zdGFydFtdID0geworLyogY29tcGF0aWJsZSBpb2N0bHMgZmlyc3QgKi8KK0NPTVBBVElCTEVfSU9DVEwoMHg0QjUwKSAgIC8qIEtER0hXQ0xLIC0gbm90IGluIHRoZSBrZXJuZWwsIGJ1dCBkb24ndCBjb21wbGFpbiAqLworQ09NUEFUSUJMRV9JT0NUTCgweDRCNTEpICAgLyogS0RTSFdDTEsgLSBub3QgaW4gdGhlIGtlcm5lbCwgYnV0IGRvbid0IGNvbXBsYWluICovCisKKy8qIEJpZyBUICovCitDT01QQVRJQkxFX0lPQ1RMKFRDR0VUQSkKK0NPTVBBVElCTEVfSU9DVEwoVENTRVRBKQorQ09NUEFUSUJMRV9JT0NUTChUQ1NFVEFXKQorQ09NUEFUSUJMRV9JT0NUTChUQ1NFVEFGKQorQ09NUEFUSUJMRV9JT0NUTChUQ1NCUkspCitVTE9OR19JT0NUTChUQ1NCUktQKQorQ09NUEFUSUJMRV9JT0NUTChUQ1hPTkMpCitDT01QQVRJQkxFX0lPQ1RMKFRDRkxTSCkKK0NPTVBBVElCTEVfSU9DVEwoVENHRVRTKQorQ09NUEFUSUJMRV9JT0NUTChUQ1NFVFMpCitDT01QQVRJQkxFX0lPQ1RMKFRDU0VUU1cpCitDT01QQVRJQkxFX0lPQ1RMKFRDU0VUU0YpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NMSU5VWCkKK0NPTVBBVElCTEVfSU9DVEwoVElPQ1NCUkspCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NDQlJLKQorVUxPTkdfSU9DVEwoVElPQ01JV0FJVCkKK0NPTVBBVElCTEVfSU9DVEwoVElPQ0dJQ09VTlQpCisvKiBMaXR0bGUgdCAqLworQ09NUEFUSUJMRV9JT0NUTChUSU9DR0VURCkKK0NPTVBBVElCTEVfSU9DVEwoVElPQ1NFVEQpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NFWENMKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DTlhDTCkKK0NPTVBBVElCTEVfSU9DVEwoVElPQ0NPTlMpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NHU09GVENBUikKK0NPTVBBVElCTEVfSU9DVEwoVElPQ1NTT0ZUQ0FSKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DU1dJTlNaKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DR1dJTlNaKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DTUdFVCkKK0NPTVBBVElCTEVfSU9DVEwoVElPQ01CSUMpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NNQklTKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DTVNFVCkKK0NPTVBBVElCTEVfSU9DVEwoVElPQ1BLVCkKK0NPTVBBVElCTEVfSU9DVEwoVElPQ05PVFRZKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DU1RJKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DT1VUUSkKK0NPTVBBVElCTEVfSU9DVEwoVElPQ1NQR1JQKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DR1BHUlApCitVTE9OR19JT0NUTChUSU9DU0NUVFkpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NHUFROKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DU1BUTENLKQorQ09NUEFUSUJMRV9JT0NUTChUSU9DU0VSR0VUTFNSKQorLyogTGl0dGxlIGYgKi8KK0NPTVBBVElCTEVfSU9DVEwoRklPQ0xFWCkKK0NPTVBBVElCTEVfSU9DVEwoRklPTkNMRVgpCitDT01QQVRJQkxFX0lPQ1RMKEZJT0FTWU5DKQorQ09NUEFUSUJMRV9JT0NUTChGSU9OQklPKQorQ09NUEFUSUJMRV9JT0NUTChGSU9OUkVBRCkgIC8qIFRoaXMgaXMgYWxzbyBUSU9DSU5RICovCisvKiAweDAwICovCitDT01QQVRJQkxFX0lPQ1RMKEZJQk1BUCkKK0NPTVBBVElCTEVfSU9DVEwoRklHRVRCU1opCisvKiAweDAzIC0tIEhEL0lERSBpb2N0bCdzIHVzZWQgYnkgaGRwYXJtIGFuZCBmcmllbmRzLgorICogICAgICAgICBTb21lIG5lZWQgdHJhbnNsYXRpb25zLCB0aGVzZSBkbyBub3QuCisgKi8KK0NPTVBBVElCTEVfSU9DVEwoSERJT19HRVRfSURFTlRJVFkpCitDT01QQVRJQkxFX0lPQ1RMKEhESU9fRFJJVkVfVEFTSykKK0NPTVBBVElCTEVfSU9DVEwoSERJT19EUklWRV9DTUQpCitVTE9OR19JT0NUTChIRElPX1NFVF9NVUxUQ09VTlQpCitVTE9OR19JT0NUTChIRElPX1NFVF9VTk1BU0tJTlRSKQorVUxPTkdfSU9DVEwoSERJT19TRVRfS0VFUFNFVFRJTkdTKQorVUxPTkdfSU9DVEwoSERJT19TRVRfMzJCSVQpCitVTE9OR19JT0NUTChIRElPX1NFVF9OT1dFUlIpCitVTE9OR19JT0NUTChIRElPX1NFVF9ETUEpCitVTE9OR19JT0NUTChIRElPX1NFVF9QSU9fTU9ERSkKK1VMT05HX0lPQ1RMKEhESU9fU0VUX05JQ0UpCitVTE9OR19JT0NUTChIRElPX1NFVF9XQ0FDSEUpCitVTE9OR19JT0NUTChIRElPX1NFVF9BQ09VU1RJQykKK1VMT05HX0lPQ1RMKEhESU9fU0VUX0JVU1NUQVRFKQorVUxPTkdfSU9DVEwoSERJT19TRVRfQUREUkVTUykKK0NPTVBBVElCTEVfSU9DVEwoSERJT19TQ0FOX0hXSUYpCisvKiAweDMzMCBpcyByZXNlcnZlZCAtLSBpdCB1c2VkIHRvIGJlIEhESU9fR0VUR0VPX0JJRyAqLworQ09NUEFUSUJMRV9JT0NUTCgweDMzMCkKKy8qIDB4MDIgLS0gRmxvcHB5IGlvY3RscyAqLworQ09NUEFUSUJMRV9JT0NUTChGRE1TR09OKQorQ09NUEFUSUJMRV9JT0NUTChGRE1TR09GRikKK0NPTVBBVElCTEVfSU9DVEwoRkRTRVRFTVNHVFJFU0gpCitDT01QQVRJQkxFX0lPQ1RMKEZERkxVU0gpCitDT01QQVRJQkxFX0lPQ1RMKEZEV0VSUk9SQ0xSKQorQ09NUEFUSUJMRV9JT0NUTChGRFNFVE1BWEVSUlMpCitDT01QQVRJQkxFX0lPQ1RMKEZER0VUTUFYRVJSUykKK0NPTVBBVElCTEVfSU9DVEwoRkRHRVREUlZUWVApCitDT01QQVRJQkxFX0lPQ1RMKEZERUpFQ1QpCitDT01QQVRJQkxFX0lPQ1RMKEZEQ0xSUFJNKQorQ09NUEFUSUJMRV9JT0NUTChGREZNVEJFRykKK0NPTVBBVElCTEVfSU9DVEwoRkRGTVRFTkQpCitDT01QQVRJQkxFX0lPQ1RMKEZEUkVTRVQpCitDT01QQVRJQkxFX0lPQ1RMKEZEVFdBRERMRSkKK0NPTVBBVElCTEVfSU9DVEwoRkRGTVRUUkspCitDT01QQVRJQkxFX0lPQ1RMKEZEUkFXQ01EKQorLyogMHgxMiAqLworI2lmZGVmIENPTkZJR19CTE9DSworQ09NUEFUSUJMRV9JT0NUTChCTEtSQVNFVCkKK0NPTVBBVElCTEVfSU9DVEwoQkxLUk9TRVQpCitDT01QQVRJQkxFX0lPQ1RMKEJMS1JPR0VUKQorQ09NUEFUSUJMRV9JT0NUTChCTEtSUlBBUlQpCitDT01QQVRJQkxFX0lPQ1RMKEJMS0ZMU0JVRikKK0NPTVBBVElCTEVfSU9DVEwoQkxLU0VDVFNFVCkKK0NPTVBBVElCTEVfSU9DVEwoQkxLU1NaR0VUKQorQ09NUEFUSUJMRV9JT0NUTChCTEtUUkFDRVNUQVJUKQorQ09NUEFUSUJMRV9JT0NUTChCTEtUUkFDRVNUT1ApCitDT01QQVRJQkxFX0lPQ1RMKEJMS1RSQUNFU0VUVVApCitDT01QQVRJQkxFX0lPQ1RMKEJMS1RSQUNFVEVBUkRPV04pCitVTE9OR19JT0NUTChCTEtSQVNFVCkKK1VMT05HX0lPQ1RMKEJMS0ZSQVNFVCkKKyNlbmRpZgorLyogUkFJRCAqLworQ09NUEFUSUJMRV9JT0NUTChSQUlEX1ZFUlNJT04pCitDT01QQVRJQkxFX0lPQ1RMKEdFVF9BUlJBWV9JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChHRVRfRElTS19JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChQUklOVF9SQUlEX0RFQlVHKQorQ09NUEFUSUJMRV9JT0NUTChSQUlEX0FVVE9SVU4pCitDT01QQVRJQkxFX0lPQ1RMKENMRUFSX0FSUkFZKQorQ09NUEFUSUJMRV9JT0NUTChBRERfTkVXX0RJU0spCitVTE9OR19JT0NUTChIT1RfUkVNT1ZFX0RJU0spCitDT01QQVRJQkxFX0lPQ1RMKFNFVF9BUlJBWV9JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChTRVRfRElTS19JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChXUklURV9SQUlEX0lORk8pCitDT01QQVRJQkxFX0lPQ1RMKFVOUFJPVEVDVF9BUlJBWSkKK0NPTVBBVElCTEVfSU9DVEwoUFJPVEVDVF9BUlJBWSkKK1VMT05HX0lPQ1RMKEhPVF9BRERfRElTSykKK1VMT05HX0lPQ1RMKFNFVF9ESVNLX0ZBVUxUWSkKK0NPTVBBVElCTEVfSU9DVEwoUlVOX0FSUkFZKQorQ09NUEFUSUJMRV9JT0NUTChTVE9QX0FSUkFZKQorQ09NUEFUSUJMRV9JT0NUTChTVE9QX0FSUkFZX1JPKQorQ09NUEFUSUJMRV9JT0NUTChSRVNUQVJUX0FSUkFZX1JXKQorQ09NUEFUSUJMRV9JT0NUTChHRVRfQklUTUFQX0ZJTEUpCitVTE9OR19JT0NUTChTRVRfQklUTUFQX0ZJTEUpCisvKiBETSAqLworQ09NUEFUSUJMRV9JT0NUTChETV9WRVJTSU9OXzMyKQorQ09NUEFUSUJMRV9JT0NUTChETV9SRU1PVkVfQUxMXzMyKQorQ09NUEFUSUJMRV9JT0NUTChETV9MSVNUX0RFVklDRVNfMzIpCitDT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9DUkVBVEVfMzIpCitDT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9SRU1PVkVfMzIpCitDT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9SRU5BTUVfMzIpCitDT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9TVVNQRU5EXzMyKQorQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfU1RBVFVTXzMyKQorQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfV0FJVF8zMikKK0NPTVBBVElCTEVfSU9DVEwoRE1fVEFCTEVfTE9BRF8zMikKK0NPTVBBVElCTEVfSU9DVEwoRE1fVEFCTEVfQ0xFQVJfMzIpCitDT01QQVRJQkxFX0lPQ1RMKERNX1RBQkxFX0RFUFNfMzIpCitDT01QQVRJQkxFX0lPQ1RMKERNX1RBQkxFX1NUQVRVU18zMikKK0NPTVBBVElCTEVfSU9DVEwoRE1fTElTVF9WRVJTSU9OU18zMikKK0NPTVBBVElCTEVfSU9DVEwoRE1fVEFSR0VUX01TR18zMikKK0NPTVBBVElCTEVfSU9DVEwoRE1fREVWX1NFVF9HRU9NRVRSWV8zMikKK0NPTVBBVElCTEVfSU9DVEwoRE1fVkVSU0lPTikKK0NPTVBBVElCTEVfSU9DVEwoRE1fUkVNT1ZFX0FMTCkKK0NPTVBBVElCTEVfSU9DVEwoRE1fTElTVF9ERVZJQ0VTKQorQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfQ1JFQVRFKQorQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfUkVNT1ZFKQorQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfUkVOQU1FKQorQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfU1VTUEVORCkKK0NPTVBBVElCTEVfSU9DVEwoRE1fREVWX1NUQVRVUykKK0NPTVBBVElCTEVfSU9DVEwoRE1fREVWX1dBSVQpCitDT01QQVRJQkxFX0lPQ1RMKERNX1RBQkxFX0xPQUQpCitDT01QQVRJQkxFX0lPQ1RMKERNX1RBQkxFX0NMRUFSKQorQ09NUEFUSUJMRV9JT0NUTChETV9UQUJMRV9ERVBTKQorQ09NUEFUSUJMRV9JT0NUTChETV9UQUJMRV9TVEFUVVMpCitDT01QQVRJQkxFX0lPQ1RMKERNX0xJU1RfVkVSU0lPTlMpCitDT01QQVRJQkxFX0lPQ1RMKERNX1RBUkdFVF9NU0cpCitDT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9TRVRfR0VPTUVUUlkpCisvKiBCaWcgSyAqLworQ09NUEFUSUJMRV9JT0NUTChQSU9fRk9OVCkKK0NPTVBBVElCTEVfSU9DVEwoR0lPX0ZPTlQpCitVTE9OR19JT0NUTChLRFNJR0FDQ0VQVCkKK0NPTVBBVElCTEVfSU9DVEwoS0RHRVRLRVlDT0RFKQorQ09NUEFUSUJMRV9JT0NUTChLRFNFVEtFWUNPREUpCitVTE9OR19JT0NUTChLSU9DU09VTkQpCitVTE9OR19JT0NUTChLRE1LVE9ORSkKK0NPTVBBVElCTEVfSU9DVEwoS0RHS0JUWVBFKQorVUxPTkdfSU9DVEwoS0RTRVRNT0RFKQorQ09NUEFUSUJMRV9JT0NUTChLREdFVE1PREUpCitVTE9OR19JT0NUTChLRFNLQk1PREUpCitDT01QQVRJQkxFX0lPQ1RMKEtER0tCTU9ERSkKK1VMT05HX0lPQ1RMKEtEU0tCTUVUQSkKK0NPTVBBVElCTEVfSU9DVEwoS0RHS0JNRVRBKQorQ09NUEFUSUJMRV9JT0NUTChLREdLQkVOVCkKK0NPTVBBVElCTEVfSU9DVEwoS0RTS0JFTlQpCitDT01QQVRJQkxFX0lPQ1RMKEtER0tCU0VOVCkKK0NPTVBBVElCTEVfSU9DVEwoS0RTS0JTRU5UKQorQ09NUEFUSUJMRV9JT0NUTChLREdLQkRJQUNSKQorQ09NUEFUSUJMRV9JT0NUTChLRFNLQkRJQUNSKQorQ09NUEFUSUJMRV9JT0NUTChLREtCRFJFUCkKK0NPTVBBVElCTEVfSU9DVEwoS0RHS0JMRUQpCitVTE9OR19JT0NUTChLRFNLQkxFRCkKK0NPTVBBVElCTEVfSU9DVEwoS0RHRVRMRUQpCitVTE9OR19JT0NUTChLRFNFVExFRCkKK0NPTVBBVElCTEVfSU9DVEwoR0lPX1NDUk5NQVApCitDT01QQVRJQkxFX0lPQ1RMKFBJT19TQ1JOTUFQKQorQ09NUEFUSUJMRV9JT0NUTChHSU9fVU5JU0NSTk1BUCkKK0NPTVBBVElCTEVfSU9DVEwoUElPX1VOSVNDUk5NQVApCitDT01QQVRJQkxFX0lPQ1RMKFBJT19GT05UUkVTRVQpCitDT01QQVRJQkxFX0lPQ1RMKFBJT19VTklNQVBDTFIpCisvKiBCaWcgUyAqLworQ09NUEFUSUJMRV9JT0NUTChTQ1NJX0lPQ1RMX0dFVF9JRExVTikKK0NPTVBBVElCTEVfSU9DVEwoU0NTSV9JT0NUTF9ET09STE9DSykKK0NPTVBBVElCTEVfSU9DVEwoU0NTSV9JT0NUTF9ET09SVU5MT0NLKQorQ09NUEFUSUJMRV9JT0NUTChTQ1NJX0lPQ1RMX1RFU1RfVU5JVF9SRUFEWSkKK0NPTVBBVElCTEVfSU9DVEwoU0NTSV9JT0NUTF9HRVRfQlVTX05VTUJFUikKK0NPTVBBVElCTEVfSU9DVEwoU0NTSV9JT0NUTF9TRU5EX0NPTU1BTkQpCitDT01QQVRJQkxFX0lPQ1RMKFNDU0lfSU9DVExfUFJPQkVfSE9TVCkKK0NPTVBBVElCTEVfSU9DVEwoU0NTSV9JT0NUTF9HRVRfUENJKQorLyogQmlnIFQgKi8KK0NPTVBBVElCTEVfSU9DVEwoVFVOU0VUTk9DU1VNKQorQ09NUEFUSUJMRV9JT0NUTChUVU5TRVRERUJVRykKK0NPTVBBVElCTEVfSU9DVEwoVFVOU0VUUEVSU0lTVCkKK0NPTVBBVElCTEVfSU9DVEwoVFVOU0VUT1dORVIpCisvKiBCaWcgViAqLworQ09NUEFUSUJMRV9JT0NUTChWVF9TRVRNT0RFKQorQ09NUEFUSUJMRV9JT0NUTChWVF9HRVRNT0RFKQorQ09NUEFUSUJMRV9JT0NUTChWVF9HRVRTVEFURSkKK0NPTVBBVElCTEVfSU9DVEwoVlRfT1BFTlFSWSkKK1VMT05HX0lPQ1RMKFZUX0FDVElWQVRFKQorVUxPTkdfSU9DVEwoVlRfV0FJVEFDVElWRSkKK1VMT05HX0lPQ1RMKFZUX1JFTERJU1ApCitVTE9OR19JT0NUTChWVF9ESVNBTExPQ0FURSkKK0NPTVBBVElCTEVfSU9DVEwoVlRfUkVTSVpFKQorQ09NUEFUSUJMRV9JT0NUTChWVF9SRVNJWkVYKQorQ09NUEFUSUJMRV9JT0NUTChWVF9MT0NLU1dJVENIKQorQ09NUEFUSUJMRV9JT0NUTChWVF9VTkxPQ0tTV0lUQ0gpCitDT01QQVRJQkxFX0lPQ1RMKFZUX0dFVEhJRk9OVE1BU0spCisvKiBMaXR0bGUgcCAoL2Rldi9ydGMsIC9kZXYvZW52Y3RybCwgZXRjLikgKi8KK0NPTVBBVElCTEVfSU9DVEwoUlRDX0FJRV9PTikKK0NPTVBBVElCTEVfSU9DVEwoUlRDX0FJRV9PRkYpCitDT01QQVRJQkxFX0lPQ1RMKFJUQ19VSUVfT04pCitDT01QQVRJQkxFX0lPQ1RMKFJUQ19VSUVfT0ZGKQorQ09NUEFUSUJMRV9JT0NUTChSVENfUElFX09OKQorQ09NUEFUSUJMRV9JT0NUTChSVENfUElFX09GRikKK0NPTVBBVElCTEVfSU9DVEwoUlRDX1dJRV9PTikKK0NPTVBBVElCTEVfSU9DVEwoUlRDX1dJRV9PRkYpCitDT01QQVRJQkxFX0lPQ1RMKFJUQ19BTE1fU0VUKQorQ09NUEFUSUJMRV9JT0NUTChSVENfQUxNX1JFQUQpCitDT01QQVRJQkxFX0lPQ1RMKFJUQ19SRF9USU1FKQorQ09NUEFUSUJMRV9JT0NUTChSVENfU0VUX1RJTUUpCitDT01QQVRJQkxFX0lPQ1RMKFJUQ19XS0FMTV9TRVQpCitDT01QQVRJQkxFX0lPQ1RMKFJUQ19XS0FMTV9SRCkKKy8qCisgKiBUaGVzZSB0d28gYXJlIG9ubHkgZm9yIHRoZSBzYnVzIHJ0YyBkcml2ZXIsIGJ1dAorICogaHdjbG9jayB0cmllcyB0aGVtIG9uIGV2ZXJ5IHJ0YyBkZXZpY2UgZmlyc3Qgd2hlbgorICogcnVubmluZyBvbiBzcGFyYy4gIE9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhlIGVudHJpZXMKKyAqIGFyZSB1c2VsZXNzIGJ1dCBoYXJtbGVzcy4KKyAqLworQ09NUEFUSUJMRV9JT0NUTChfSU9SKCdwJywgMjAsIGludFs3XSkpIC8qIFJUQ0dFVCAqLworQ09NUEFUSUJMRV9JT0NUTChfSU9XKCdwJywgMjEsIGludFs3XSkpIC8qIFJUQ1NFVCAqLworLyogTGl0dGxlIG0gKi8KK0NPTVBBVElCTEVfSU9DVEwoTVRJT0NUT1ApCisvKiBTb2NrZXQgbGV2ZWwgc3R1ZmYgKi8KK0NPTVBBVElCTEVfSU9DVEwoRklPUVNJWkUpCitDT01QQVRJQkxFX0lPQ1RMKEZJT1NFVE9XTikKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NQR1JQKQorQ09NUEFUSUJMRV9JT0NUTChGSU9HRVRPV04pCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHUEdSUCkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0FUTUFSSykKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJRkxJTkspCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTSUZFTkNBUCkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dJRkVOQ0FQKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lGTkFNRSkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NBUlApCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHQVJQKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DREFSUCkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NSQVJQKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR1JBUlApCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NEUkFSUCkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0FERERMQ0kpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NERUxETENJKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR01JSVBIWSkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dNSUlSRUcpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTTUlJUkVHKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lGVkxBTikKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJRlZMQU4pCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NCUkFEREJSKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DQlJERUxCUikKKy8qIFNHIHN0dWZmICovCitDT01QQVRJQkxFX0lPQ1RMKFNHX1NFVF9USU1FT1VUKQorQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfVElNRU9VVCkKK0NPTVBBVElCTEVfSU9DVEwoU0dfRU1VTEFURURfSE9TVCkKK1VMT05HX0lPQ1RMKFNHX1NFVF9UUkFOU0ZPUk0pCitDT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9UUkFOU0ZPUk0pCitDT01QQVRJQkxFX0lPQ1RMKFNHX1NFVF9SRVNFUlZFRF9TSVpFKQorQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfUkVTRVJWRURfU0laRSkKK0NPTVBBVElCTEVfSU9DVEwoU0dfR0VUX1NDU0lfSUQpCitDT01QQVRJQkxFX0lPQ1RMKFNHX1NFVF9GT1JDRV9MT1dfRE1BKQorQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfTE9XX0RNQSkKK0NPTVBBVElCTEVfSU9DVEwoU0dfU0VUX0ZPUkNFX1BBQ0tfSUQpCitDT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9QQUNLX0lEKQorQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfTlVNX1dBSVRJTkcpCitDT01QQVRJQkxFX0lPQ1RMKFNHX1NFVF9ERUJVRykKK0NPTVBBVElCTEVfSU9DVEwoU0dfR0VUX1NHX1RBQkxFU0laRSkKK0NPTVBBVElCTEVfSU9DVEwoU0dfR0VUX0NPTU1BTkRfUSkKK0NPTVBBVElCTEVfSU9DVEwoU0dfU0VUX0NPTU1BTkRfUSkKK0NPTVBBVElCTEVfSU9DVEwoU0dfR0VUX1ZFUlNJT05fTlVNKQorQ09NUEFUSUJMRV9JT0NUTChTR19ORVhUX0NNRF9MRU4pCitDT01QQVRJQkxFX0lPQ1RMKFNHX1NDU0lfUkVTRVQpCitDT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9SRVFVRVNUX1RBQkxFKQorQ09NUEFUSUJMRV9JT0NUTChTR19TRVRfS0VFUF9PUlBIQU4pCitDT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9LRUVQX09SUEhBTikKKy8qIFBQUCBzdHVmZiAqLworQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NHRkxBR1MpCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NGTEFHUykKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DR0FTWU5DTUFQKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NTQVNZTkNNQVApCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dVTklUKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NHUkFTWU5DTUFQKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NTUkFTWU5DTUFQKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NHTVJVKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NTTVJVKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NTTUFYQ0lEKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NHWEFTWU5DTUFQKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NTWEFTWU5DTUFQKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NYRkVSVU5JVCkKKy8qIFBQUElPQ1NDT01QUkVTUyBpcyB0cmFuc2xhdGVkICovCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dOUE1PREUpCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NOUE1PREUpCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dERUJVRykKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DU0RFQlVHKQorLyogUFBQSU9DU1BBU1MgaXMgdHJhbnNsYXRlZCAqLworLyogUFBQSU9DU0FDVElWRSBpcyB0cmFuc2xhdGVkICovCisvKiBQUFBJT0NHSURMRSBpcyB0cmFuc2xhdGVkICovCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ05FV1VOSVQpCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0FUVEFDSCkKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DREVUQUNIKQorQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NTTVJSVSkKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DQ09OTkVDVCkKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DRElTQ09OTikKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DQVRUQ0hBTikKK0NPTVBBVElCTEVfSU9DVEwoUFBQSU9DR0NIQU4pCisvKiBQUFBPWCAqLworQ09NUEFUSUJMRV9JT0NUTChQUFBPRUlPQ1NGV0QpCitDT01QQVRJQkxFX0lPQ1RMKFBQUE9FSU9DREZXRCkKKy8qIExQICovCitDT01QQVRJQkxFX0lPQ1RMKExQR0VUU1RBVFVTKQorLyogcHBkZXYgKi8KK0NPTVBBVElCTEVfSU9DVEwoUFBTRVRNT0RFKQorQ09NUEFUSUJMRV9JT0NUTChQUFJTVEFUVVMpCitDT01QQVRJQkxFX0lPQ1RMKFBQUkNPTlRST0wpCitDT01QQVRJQkxFX0lPQ1RMKFBQV0NPTlRST0wpCitDT01QQVRJQkxFX0lPQ1RMKFBQRkNPTlRST0wpCitDT01QQVRJQkxFX0lPQ1RMKFBQUkRBVEEpCitDT01QQVRJQkxFX0lPQ1RMKFBQV0RBVEEpCitDT01QQVRJQkxFX0lPQ1RMKFBQQ0xBSU0pCitDT01QQVRJQkxFX0lPQ1RMKFBQUkVMRUFTRSkKK0NPTVBBVElCTEVfSU9DVEwoUFBZSUVMRCkKK0NPTVBBVElCTEVfSU9DVEwoUFBFWENMKQorQ09NUEFUSUJMRV9JT0NUTChQUERBVEFESVIpCitDT01QQVRJQkxFX0lPQ1RMKFBQTkVHT1QpCitDT01QQVRJQkxFX0lPQ1RMKFBQV0NUTE9OSVJRKQorQ09NUEFUSUJMRV9JT0NUTChQUENMUklSUSkKK0NPTVBBVElCTEVfSU9DVEwoUFBTRVRQSEFTRSkKK0NPTVBBVElCTEVfSU9DVEwoUFBHRVRNT0RFUykKK0NPTVBBVElCTEVfSU9DVEwoUFBHRVRNT0RFKQorQ09NUEFUSUJMRV9JT0NUTChQUEdFVFBIQVNFKQorQ09NUEFUSUJMRV9JT0NUTChQUEdFVEZMQUdTKQorQ09NUEFUSUJMRV9JT0NUTChQUFNFVEZMQUdTKQorLyogQ0RST00gc3R1ZmYgKi8KK0NPTVBBVElCTEVfSU9DVEwoQ0RST01QQVVTRSkKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01SRVNVTUUpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NUExBWU1TRikKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01QTEFZVFJLSU5EKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVJFQURUT0NIRFIpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NUkVBRFRPQ0VOVFJZKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVNUT1ApCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NU1RBUlQpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NRUpFQ1QpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NVk9MQ1RSTCkKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01TVUJDSE5MKQorVUxPTkdfSU9DVEwoQ0RST01FSkVDVF9TVykKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01NVUxUSVNFU1NJT04pCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NX0dFVF9NQ04pCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NUkVTRVQpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NVk9MUkVBRCkKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01TRUVLKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVBMQVlCTEspCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NQ0xPU0VUUkFZKQorVUxPTkdfSU9DVEwoQ0RST01fU0VUX09QVElPTlMpCitVTE9OR19JT0NUTChDRFJPTV9DTEVBUl9PUFRJT05TKQorVUxPTkdfSU9DVEwoQ0RST01fU0VMRUNUX1NQRUVEKQorVUxPTkdfSU9DVEwoQ0RST01fU0VMRUNUX0RJU0MpCitVTE9OR19JT0NUTChDRFJPTV9NRURJQV9DSEFOR0VEKQorVUxPTkdfSU9DVEwoQ0RST01fRFJJVkVfU1RBVFVTKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTV9ESVNDX1NUQVRVUykKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01fQ0hBTkdFUl9OU0xPVFMpCitVTE9OR19JT0NUTChDRFJPTV9MT0NLRE9PUikKK1VMT05HX0lPQ1RMKENEUk9NX0RFQlVHKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTV9HRVRfQ0FQQUJJTElUWSkKKy8qIElnbm9yZSBjZHJvbS5oIGFib3V0IHRoZXNlIG5leHQgNSBpb2N0bHMsIHRoZXkgYWJzb2x1dGVseSBkbworICogbm90IHRha2UgYSBzdHJ1Y3QgY2Ryb21fcmVhZCwgaW5zdGVhZCB0aGV5IHRha2UgYSBzdHJ1Y3QgY2Ryb21fbXNmCisgKiB3aGljaCBpcyBjb21wYXRpYmxlLgorICovCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NUkVBRE1PREUyKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVJFQURNT0RFMSkKK0NPTVBBVElCTEVfSU9DVEwoQ0RST01SRUFEUkFXKQorQ09NUEFUSUJMRV9JT0NUTChDRFJPTVJFQURDT09LRUQpCitDT01QQVRJQkxFX0lPQ1RMKENEUk9NUkVBREFMTCkKKy8qIERWRCBpb2N0bHMgKi8KK0NPTVBBVElCTEVfSU9DVEwoRFZEX1JFQURfU1RSVUNUKQorQ09NUEFUSUJMRV9JT0NUTChEVkRfV1JJVEVfU1RSVUNUKQorQ09NUEFUSUJMRV9JT0NUTChEVkRfQVVUSCkKKy8qIHBrdGNkdmQgKi8KK0NPTVBBVElCTEVfSU9DVEwoUEFDS0VUX0NUUkxfQ01EKQorLyogQmlnIEEgKi8KKy8qIHNwYXJjIG9ubHkgKi8KKy8qIEJpZyBRIGZvciBzb3VuZC9PU1MgKi8KK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9SRVNFVCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9TWU5DKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU1lOVEhfSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9DVFJMUkFURSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9HRVRPVVRDT1VOVCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9HRVRJTkNPVU5UKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX1BFUkNNT0RFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRk1fTE9BRF9JTlNUUikKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9URVNUTUlESSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9SRVNFVFNBTVBMRVMpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TRVFfTlJTWU5USFMpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TRVFfTlJNSURJUykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX01JRElfSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9USFJFU0hPTEQpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TWU5USF9NRU1BVkwpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9GTV80T1BfRU5BQkxFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX1BBTklDKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX09VVE9GQkFORCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9HRVRUSU1FKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU1lOVEhfSUQpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TWU5USF9DT05UUk9MKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU1lOVEhfUkVNT1ZFU0FNUExFKQorLyogQmlnIFQgZm9yIHNvdW5kL09TUyAqLworQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfVE1SX1RJTUVCQVNFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfVE1SX1NUQVJUKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfVE1SX1NUT1ApCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9UTVJfQ09OVElOVUUpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9UTVJfVEVNUE8pCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9UTVJfU09VUkNFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfVE1SX01FVFJPTk9NRSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1RNUl9TRUxFQ1QpCisvKiBMaXR0bGUgbSBmb3Igc291bmQvT1NTICovCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9NSURJX1BSRVRJTUUpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9NSURJX01QVU1PREUpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9NSURJX01QVUNNRCkKKy8qIEJpZyBQIGZvciBzb3VuZC9PU1MgKi8KK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9SRVNFVCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9TWU5DKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1NQRUVEKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1NURVJFTykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9HRVRCTEtTSVpFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0NIQU5ORUxTKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9QQ01fV1JJVEVfRklMVEVSKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1BPU1QpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfU1VCRElWSURFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1NFVEZSQUdNRU5UKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0dFVEZNVFMpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfU0VURk1UKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0dFVE9TUEFDRSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9HRVRJU1BBQ0UpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfTk9OQkxPQ0spCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfR0VUQ0FQUykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9HRVRUUklHR0VSKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1NFVFRSSUdHRVIpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfR0VUSVBUUikKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9HRVRPUFRSKQorLyogU05EQ1RMX0RTUF9NQVBJTkJVRiwgIFhYWCBuZWVkcyB0cmFuc2xhdGlvbiAqLworLyogU05EQ1RMX0RTUF9NQVBPVVRCVUYsICBYWFggbmVlZHMgdHJhbnNsYXRpb24gKi8KK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9TRVRTWU5DUk8pCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfU0VURFVQTEVYKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0dFVE9ERUxBWSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9QUk9GSUxFKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9QQ01fUkVBRF9SQVRFKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9QQ01fUkVBRF9DSEFOTkVMUykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfUENNX1JFQURfQklUUykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfUENNX1JFQURfRklMVEVSKQorLyogQmlnIEMgZm9yIHNvdW5kL09TUyAqLworQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfQ09QUl9SRVNFVCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfTE9BRCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfUkRBVEEpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9DT1BSX1JDT0RFKQorQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfQ09QUl9XREFUQSkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfV0NPREUpCitDT01QQVRJQkxFX0lPQ1RMKFNORENUTF9DT1BSX1JVTikKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfSEFMVCkKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfU0VORE1TRykKK0NPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfUkNWTVNHKQorLyogQmlnIE0gZm9yIHNvdW5kL09TUyAqLworQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX1ZPTFVNRSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9CQVNTKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX1RSRUJMRSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9TWU5USCkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9QQ00pCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfU1BFQUtFUikKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9MSU5FKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX01JQykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9DRCkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9JTUlYKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX0FMVFBDTSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9SRUNMRVYpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfSUdBSU4pCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfT0dBSU4pCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfTElORTEpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfTElORTIpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfTElORTMpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfRElHSVRBTDEpKQorQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0RJR0lUQUwyKSkKK0NPTVBBVElCTEVfSU9DVEwoTUlYRVJfUkVBRChTT1VORF9NSVhFUl9ESUdJVEFMMykpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUEhPTkVJTikpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUEhPTkVPVVQpKQorQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1ZJREVPKSkKK0NPTVBBVElCTEVfSU9DVEwoTUlYRVJfUkVBRChTT1VORF9NSVhFUl9SQURJTykpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTU9OSVRPUikpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfTVVURSkKKy8qIFNPVU5EX01JWEVSX1JFQURfRU5IQU5DRSwgIHNhbWUgdmFsdWUgYXMgUkVBRF9NVVRFICovCisvKiBTT1VORF9NSVhFUl9SRUFEX0xPVUQsICBzYW1lIHZhbHVlIGFzIFJFQURfTVVURSAqLworQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX1JFQ1NSQykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9ERVZNQVNLKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX1JFQ01BU0spCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfU1RFUkVPREVWUykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9DQVBTKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9WT0xVTUUpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX0JBU1MpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX1RSRUJMRSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfU1lOVEgpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX1BDTSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfU1BFQUtFUikKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfTElORSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfTUlDKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9DRCkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfSU1JWCkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfQUxUUENNKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9SRUNMRVYpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX0lHQUlOKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9PR0FJTikKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfTElORTEpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX0xJTkUyKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9MSU5FMykKK0NPTVBBVElCTEVfSU9DVEwoTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfRElHSVRBTDEpKQorQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9XUklURShTT1VORF9NSVhFUl9ESUdJVEFMMikpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0RJR0lUQUwzKSkKK0NPTVBBVElCTEVfSU9DVEwoTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfUEhPTkVJTikpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1BIT05FT1VUKSkKK0NPTVBBVElCTEVfSU9DVEwoTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfVklERU8pKQorQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9XUklURShTT1VORF9NSVhFUl9SQURJTykpCitDT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX01PTklUT1IpKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9NVVRFKQorLyogU09VTkRfTUlYRVJfV1JJVEVfRU5IQU5DRSwgIHNhbWUgdmFsdWUgYXMgV1JJVEVfTVVURSAqLworLyogU09VTkRfTUlYRVJfV1JJVEVfTE9VRCwgIHNhbWUgdmFsdWUgYXMgV1JJVEVfTVVURSAqLworQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9SRUNTUkMpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX0lORk8pCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX09MRF9NSVhFUl9JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9BQ0NFU1MpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX0FHQykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfM0RTRSkKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUFJJVkFURTEpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1BSSVZBVEUyKQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9QUklWQVRFMykKK0NPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUFJJVkFURTQpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1BSSVZBVEU1KQorQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9HRVRMRVZFTFMpCitDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1NFVExFVkVMUykKK0NPTVBBVElCTEVfSU9DVEwoT1NTX0dFVFZFUlNJT04pCisvKiBBVVRPRlMgKi8KK1VMT05HX0lPQ1RMKEFVVE9GU19JT0NfUkVBRFkpCitVTE9OR19JT0NUTChBVVRPRlNfSU9DX0ZBSUwpCitDT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfQ0FUQVRPTklDKQorQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX1BST1RPVkVSKQorQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX0VYUElSRSkKK0NPTVBBVElCTEVfSU9DVEwoQVVUT0ZTX0lPQ19FWFBJUkVfTVVMVEkpCitDT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfUFJPVE9TVUJWRVIpCitDT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfQVNLUkVHSE9TVCkKK0NPTVBBVElCTEVfSU9DVEwoQVVUT0ZTX0lPQ19UT0dHTEVSRUdIT1NUKQorQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX0FTS1VNT1VOVCkKKy8qIFJhdyBkZXZpY2VzICovCitDT01QQVRJQkxFX0lPQ1RMKFJBV19TRVRCSU5EKQorQ09NUEFUSUJMRV9JT0NUTChSQVdfR0VUQklORCkKKy8qIFNNQiBpb2N0bHMgd2hpY2ggZG8gbm90IG5lZWQgYW55IHRyYW5zbGF0aW9ucyAqLworQ09NUEFUSUJMRV9JT0NUTChTTUJfSU9DX05FV0NPTk4pCisvKiBMaXR0bGUgYSAqLworQ09NUEFUSUJMRV9JT0NUTChBVE1TSUdEX0NUUkwpCitDT01QQVRJQkxFX0lPQ1RMKEFUTUFSUERfQ1RSTCkKK0NPTVBBVElCTEVfSU9DVEwoQVRNTEVDX0NUUkwpCitDT01QQVRJQkxFX0lPQ1RMKEFUTUxFQ19NQ0FTVCkKK0NPTVBBVElCTEVfSU9DVEwoQVRNTEVDX0RBVEEpCitDT01QQVRJQkxFX0lPQ1RMKEFUTV9TRVRTQykKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJRkFUTVRDUCkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ01LQ0xJUCkKK0NPTVBBVElCTEVfSU9DVEwoQVRNQVJQX01LSVApCitDT01QQVRJQkxFX0lPQ1RMKEFUTUFSUF9TRVRFTlRSWSkKK0NPTVBBVElCTEVfSU9DVEwoQVRNQVJQX0VOQ0FQKQorQ09NUEFUSUJMRV9JT0NUTChBVE1UQ1BfQ1JFQVRFKQorQ09NUEFUSUJMRV9JT0NUTChBVE1UQ1BfUkVNT1ZFKQorQ09NUEFUSUJMRV9JT0NUTChBVE1NUENfQ1RSTCkKK0NPTVBBVElCTEVfSU9DVEwoQVRNTVBDX0RBVEEpCisvKiBXYXRjaGRvZyAqLworQ09NUEFUSUJMRV9JT0NUTChXRElPQ19HRVRTVVBQT1JUKQorQ09NUEFUSUJMRV9JT0NUTChXRElPQ19HRVRTVEFUVVMpCitDT01QQVRJQkxFX0lPQ1RMKFdESU9DX0dFVEJPT1RTVEFUVVMpCitDT01QQVRJQkxFX0lPQ1RMKFdESU9DX0dFVFRFTVApCitDT01QQVRJQkxFX0lPQ1RMKFdESU9DX1NFVE9QVElPTlMpCitDT01QQVRJQkxFX0lPQ1RMKFdESU9DX0tFRVBBTElWRSkKK0NPTVBBVElCTEVfSU9DVEwoV0RJT0NfU0VUVElNRU9VVCkKK0NPTVBBVElCTEVfSU9DVEwoV0RJT0NfR0VUVElNRU9VVCkKKy8qIEJpZyBSICovCitDT01QQVRJQkxFX0lPQ1RMKFJOREdFVEVOVENOVCkKK0NPTVBBVElCTEVfSU9DVEwoUk5EQUREVE9FTlRDTlQpCitDT01QQVRJQkxFX0lPQ1RMKFJOREdFVFBPT0wpCitDT01QQVRJQkxFX0lPQ1RMKFJOREFEREVOVFJPUFkpCitDT01QQVRJQkxFX0lPQ1RMKFJORFpBUEVOVENOVCkKK0NPTVBBVElCTEVfSU9DVEwoUk5EQ0xFQVJQT09MKQorLyogQmx1ZXRvb3RoICovCitDT01QQVRJQkxFX0lPQ1RMKEhDSURFVlVQKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lERVZET1dOKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lERVZSRVNFVCkKK0NPTVBBVElCTEVfSU9DVEwoSENJREVWUkVTVEFUKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lHRVRERVZMSVNUKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lHRVRERVZJTkZPKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lHRVRDT05OTElTVCkKK0NPTVBBVElCTEVfSU9DVEwoSENJR0VUQ09OTklORk8pCitDT01QQVRJQkxFX0lPQ1RMKEhDSVNFVFJBVykKK0NPTVBBVElCTEVfSU9DVEwoSENJU0VUU0NBTikKK0NPTVBBVElCTEVfSU9DVEwoSENJU0VUQVVUSCkKK0NPTVBBVElCTEVfSU9DVEwoSENJU0VURU5DUllQVCkKK0NPTVBBVElCTEVfSU9DVEwoSENJU0VUUFRZUEUpCitDT01QQVRJQkxFX0lPQ1RMKEhDSVNFVExJTktQT0wpCitDT01QQVRJQkxFX0lPQ1RMKEhDSVNFVExJTktNT0RFKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lTRVRBQ0xNVFUpCitDT01QQVRJQkxFX0lPQ1RMKEhDSVNFVFNDT01UVSkKK0NPTVBBVElCTEVfSU9DVEwoSENJSU5RVUlSWSkKK0NPTVBBVElCTEVfSU9DVEwoSENJVUFSVFNFVFBST1RPKQorQ09NUEFUSUJMRV9JT0NUTChIQ0lVQVJUR0VUUFJPVE8pCitDT01QQVRJQkxFX0lPQ1RMKFJGQ09NTUNSRUFURURFVikKK0NPTVBBVElCTEVfSU9DVEwoUkZDT01NUkVMRUFTRURFVikKK0NPTVBBVElCTEVfSU9DVEwoUkZDT01NR0VUREVWTElTVCkKK0NPTVBBVElCTEVfSU9DVEwoUkZDT01NR0VUREVWSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoUkZDT01NU1RFQUxETEMpCitDT01QQVRJQkxFX0lPQ1RMKEJORVBDT05OQUREKQorQ09NUEFUSUJMRV9JT0NUTChCTkVQQ09OTkRFTCkKK0NPTVBBVElCTEVfSU9DVEwoQk5FUEdFVENPTk5MSVNUKQorQ09NUEFUSUJMRV9JT0NUTChCTkVQR0VUQ09OTklORk8pCitDT01QQVRJQkxFX0lPQ1RMKENNVFBDT05OQUREKQorQ09NUEFUSUJMRV9JT0NUTChDTVRQQ09OTkRFTCkKK0NPTVBBVElCTEVfSU9DVEwoQ01UUEdFVENPTk5MSVNUKQorQ09NUEFUSUJMRV9JT0NUTChDTVRQR0VUQ09OTklORk8pCitDT01QQVRJQkxFX0lPQ1RMKEhJRFBDT05OQUREKQorQ09NUEFUSUJMRV9JT0NUTChISURQQ09OTkRFTCkKK0NPTVBBVElCTEVfSU9DVEwoSElEUEdFVENPTk5MSVNUKQorQ09NUEFUSUJMRV9JT0NUTChISURQR0VUQ09OTklORk8pCisvKiBDQVBJICovCitDT01QQVRJQkxFX0lPQ1RMKENBUElfUkVHSVNURVIpCitDT01QQVRJQkxFX0lPQ1RMKENBUElfR0VUX01BTlVGQUNUVVJFUikKK0NPTVBBVElCTEVfSU9DVEwoQ0FQSV9HRVRfVkVSU0lPTikKK0NPTVBBVElCTEVfSU9DVEwoQ0FQSV9HRVRfU0VSSUFMKQorQ09NUEFUSUJMRV9JT0NUTChDQVBJX0dFVF9QUk9GSUxFKQorQ09NUEFUSUJMRV9JT0NUTChDQVBJX01BTlVGQUNUVVJFUl9DTUQpCitDT01QQVRJQkxFX0lPQ1RMKENBUElfR0VUX0VSUkNPREUpCitDT01QQVRJQkxFX0lPQ1RMKENBUElfSU5TVEFMTEVEKQorQ09NUEFUSUJMRV9JT0NUTChDQVBJX0dFVF9GTEFHUykKK0NPTVBBVElCTEVfSU9DVEwoQ0FQSV9TRVRfRkxBR1MpCitDT01QQVRJQkxFX0lPQ1RMKENBUElfQ0xSX0ZMQUdTKQorQ09NUEFUSUJMRV9JT0NUTChDQVBJX05DQ0lfT1BFTkNPVU5UKQorQ09NUEFUSUJMRV9JT0NUTChDQVBJX05DQ0lfR0VUVU5JVCkKKy8qIFNpZW1lbnMgR2lnYXNldCAqLworQ09NUEFUSUJMRV9JT0NUTChHSUdBU0VUX1JFRElSKQorQ09NUEFUSUJMRV9JT0NUTChHSUdBU0VUX0NPTkZJRykKK0NPTVBBVElCTEVfSU9DVEwoR0lHQVNFVF9CUktDSEFSUykKK0NPTVBBVElCTEVfSU9DVEwoR0lHQVNFVF9WRVJTSU9OKQorLyogTWlzYy4gKi8KK0NPTVBBVElCTEVfSU9DVEwoMHg0MTU0NTkwMCkJCS8qIEFUWUlPX0NMS1IgKi8KK0NPTVBBVElCTEVfSU9DVEwoMHg0MTU0NTkwMSkJCS8qIEFUWUlPX0NMS1cgKi8KK0NPTVBBVElCTEVfSU9DVEwoUENJSU9DX0NPTlRST0xMRVIpCitDT01QQVRJQkxFX0lPQ1RMKFBDSUlPQ19NTUFQX0lTX0lPKQorQ09NUEFUSUJMRV9JT0NUTChQQ0lJT0NfTU1BUF9JU19NRU0pCitDT01QQVRJQkxFX0lPQ1RMKFBDSUlPQ19XUklURV9DT01CSU5FKQorLyogVVNCICovCitDT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX1JFU0VURVApCitDT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX1NFVElOVEVSRkFDRSkKK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfU0VUQ09ORklHVVJBVElPTikKK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfR0VURFJJVkVSKQorQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19ESVNDQVJEVVJCKQorQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19DTEFJTUlOVEVSRkFDRSkKK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfUkVMRUFTRUlOVEVSRkFDRSkKK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfQ09OTkVDVElORk8pCitDT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX0hVQl9QT1JUSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfUkVTRVQpCitDT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX1NVQk1JVFVSQjMyKQorQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19SRUFQVVJCMzIpCitDT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX1JFQVBVUkJOREVMQVkzMikKK0NPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfQ0xFQVJfSEFMVCkKKy8qIE1URCAqLworQ09NUEFUSUJMRV9JT0NUTChNRU1HRVRJTkZPKQorQ09NUEFUSUJMRV9JT0NUTChNRU1FUkFTRSkKK0NPTVBBVElCTEVfSU9DVEwoTUVNTE9DSykKK0NPTVBBVElCTEVfSU9DVEwoTUVNVU5MT0NLKQorQ09NUEFUSUJMRV9JT0NUTChNRU1HRVRSRUdJT05DT1VOVCkKK0NPTVBBVElCTEVfSU9DVEwoTUVNR0VUUkVHSU9OSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoTUVNR0VUQkFEQkxPQ0spCitDT01QQVRJQkxFX0lPQ1RMKE1FTVNFVEJBREJMT0NLKQorLyogTkJEICovCitVTE9OR19JT0NUTChOQkRfU0VUX1NPQ0spCitVTE9OR19JT0NUTChOQkRfU0VUX0JMS1NJWkUpCitVTE9OR19JT0NUTChOQkRfU0VUX1NJWkUpCitDT01QQVRJQkxFX0lPQ1RMKE5CRF9ET19JVCkKK0NPTVBBVElCTEVfSU9DVEwoTkJEX0NMRUFSX1NPQ0spCitDT01QQVRJQkxFX0lPQ1RMKE5CRF9DTEVBUl9RVUUpCitDT01QQVRJQkxFX0lPQ1RMKE5CRF9QUklOVF9ERUJVRykKK1VMT05HX0lPQ1RMKE5CRF9TRVRfU0laRV9CTE9DS1MpCitDT01QQVRJQkxFX0lPQ1RMKE5CRF9ESVNDT05ORUNUKQorLyogaTJjICovCitDT01QQVRJQkxFX0lPQ1RMKEkyQ19TTEFWRSkKK0NPTVBBVElCTEVfSU9DVEwoSTJDX1NMQVZFX0ZPUkNFKQorQ09NUEFUSUJMRV9JT0NUTChJMkNfVEVOQklUKQorQ09NUEFUSUJMRV9JT0NUTChJMkNfUEVDKQorQ09NUEFUSUJMRV9JT0NUTChJMkNfUkVUUklFUykKK0NPTVBBVElCTEVfSU9DVEwoSTJDX1RJTUVPVVQpCisvKiB3aXJlbGVzcyAqLworQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXQ09NTUlUKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXTkFNRSkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV05XSUQpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdOV0lEKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXRlJFUSkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV0ZSRVEpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdNT0RFKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXTU9ERSkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1NFTlMpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdTRU5TKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXUkFOR0UpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdQUklWKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXUFJJVikKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1NUQVRTKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXU1RBVFMpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdBUCkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV0FQKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXU0NBTikKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1JBVEUpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdSQVRFKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXUlRTKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXUlRTKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXRlJBRykKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV0ZSQUcpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdUWFBPVykKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV1RYUE9XKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXUkVUUlkpCitDT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdSRVRSWSkKK0NPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1BPV0VSKQorQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXUE9XRVIpCisvKiBoaWRkZXYgKi8KK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR1ZFUlNJT04pCitDT01QQVRJQkxFX0lPQ1RMKEhJRElPQ0FQUExJQ0FUSU9OKQorQ09NUEFUSUJMRV9JT0NUTChISURJT0NHREVWSU5GTykKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR1NUUklORykKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DSU5JVFJFUE9SVCkKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR1JFUE9SVCkKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DU1JFUE9SVCkKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR1JFUE9SVElORk8pCitDT01QQVRJQkxFX0lPQ1RMKEhJRElPQ0dGSUVMRElORk8pCitDT01QQVRJQkxFX0lPQ1RMKEhJRElPQ0dVU0FHRSkKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DU1VTQUdFKQorQ09NUEFUSUJMRV9JT0NUTChISURJT0NHVUNPREUpCitDT01QQVRJQkxFX0lPQ1RMKEhJRElPQ0dGTEFHKQorQ09NUEFUSUJMRV9JT0NUTChISURJT0NTRkxBRykKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR0NPTExFQ1RJT05JTkRFWCkKK0NPTVBBVElCTEVfSU9DVEwoSElESU9DR0NPTExFQ1RJT05JTkZPKQorLyogZHZiICovCitDT01QQVRJQkxFX0lPQ1RMKEFVRElPX1NUT1ApCitDT01QQVRJQkxFX0lPQ1RMKEFVRElPX1BMQVkpCitDT01QQVRJQkxFX0lPQ1RMKEFVRElPX1BBVVNFKQorQ09NUEFUSUJMRV9JT0NUTChBVURJT19DT05USU5VRSkKK0NPTVBBVElCTEVfSU9DVEwoQVVESU9fU0VMRUNUX1NPVVJDRSkKK0NPTVBBVElCTEVfSU9DVEwoQVVESU9fU0VUX01VVEUpCitDT01QQVRJQkxFX0lPQ1RMKEFVRElPX1NFVF9BVl9TWU5DKQorQ09NUEFUSUJMRV9JT0NUTChBVURJT19TRVRfQllQQVNTX01PREUpCitDT01QQVRJQkxFX0lPQ1RMKEFVRElPX0NIQU5ORUxfU0VMRUNUKQorQ09NUEFUSUJMRV9JT0NUTChBVURJT19HRVRfU1RBVFVTKQorQ09NUEFUSUJMRV9JT0NUTChBVURJT19HRVRfQ0FQQUJJTElUSUVTKQorQ09NUEFUSUJMRV9JT0NUTChBVURJT19DTEVBUl9CVUZGRVIpCitDT01QQVRJQkxFX0lPQ1RMKEFVRElPX1NFVF9JRCkKK0NPTVBBVElCTEVfSU9DVEwoQVVESU9fU0VUX01JWEVSKQorQ09NUEFUSUJMRV9JT0NUTChBVURJT19TRVRfU1RSRUFNVFlQRSkKK0NPTVBBVElCTEVfSU9DVEwoQVVESU9fU0VUX0VYVF9JRCkKK0NPTVBBVElCTEVfSU9DVEwoQVVESU9fU0VUX0FUVFJJQlVURVMpCitDT01QQVRJQkxFX0lPQ1RMKEFVRElPX1NFVF9LQVJBT0tFKQorQ09NUEFUSUJMRV9JT0NUTChETVhfU1RBUlQpCitDT01QQVRJQkxFX0lPQ1RMKERNWF9TVE9QKQorQ09NUEFUSUJMRV9JT0NUTChETVhfU0VUX0ZJTFRFUikKK0NPTVBBVElCTEVfSU9DVEwoRE1YX1NFVF9QRVNfRklMVEVSKQorQ09NUEFUSUJMRV9JT0NUTChETVhfU0VUX0JVRkZFUl9TSVpFKQorQ09NUEFUSUJMRV9JT0NUTChETVhfR0VUX1BFU19QSURTKQorQ09NUEFUSUJMRV9JT0NUTChETVhfR0VUX0NBUFMpCitDT01QQVRJQkxFX0lPQ1RMKERNWF9TRVRfU09VUkNFKQorQ09NUEFUSUJMRV9JT0NUTChETVhfR0VUX1NUQykKK0NPTVBBVElCTEVfSU9DVEwoRkVfR0VUX0lORk8pCitDT01QQVRJQkxFX0lPQ1RMKEZFX0RJU0VRQ19SRVNFVF9PVkVSTE9BRCkKK0NPTVBBVElCTEVfSU9DVEwoRkVfRElTRVFDX1NFTkRfTUFTVEVSX0NNRCkKK0NPTVBBVElCTEVfSU9DVEwoRkVfRElTRVFDX1JFQ1ZfU0xBVkVfUkVQTFkpCitDT01QQVRJQkxFX0lPQ1RMKEZFX0RJU0VRQ19TRU5EX0JVUlNUKQorQ09NUEFUSUJMRV9JT0NUTChGRV9TRVRfVE9ORSkKK0NPTVBBVElCTEVfSU9DVEwoRkVfU0VUX1ZPTFRBR0UpCitDT01QQVRJQkxFX0lPQ1RMKEZFX0VOQUJMRV9ISUdIX0xOQl9WT0xUQUdFKQorQ09NUEFUSUJMRV9JT0NUTChGRV9SRUFEX1NUQVRVUykKK0NPTVBBVElCTEVfSU9DVEwoRkVfUkVBRF9CRVIpCitDT01QQVRJQkxFX0lPQ1RMKEZFX1JFQURfU0lHTkFMX1NUUkVOR1RIKQorQ09NUEFUSUJMRV9JT0NUTChGRV9SRUFEX1NOUikKK0NPTVBBVElCTEVfSU9DVEwoRkVfUkVBRF9VTkNPUlJFQ1RFRF9CTE9DS1MpCitDT01QQVRJQkxFX0lPQ1RMKEZFX1NFVF9GUk9OVEVORCkKK0NPTVBBVElCTEVfSU9DVEwoRkVfR0VUX0ZST05URU5EKQorQ09NUEFUSUJMRV9JT0NUTChGRV9HRVRfRVZFTlQpCitDT01QQVRJQkxFX0lPQ1RMKEZFX0RJU0hORVRXT1JLX1NFTkRfTEVHQUNZX0NNRCkKK0NPTVBBVElCTEVfSU9DVEwoVklERU9fU1RPUCkKK0NPTVBBVElCTEVfSU9DVEwoVklERU9fUExBWSkKK0NPTVBBVElCTEVfSU9DVEwoVklERU9fRlJFRVpFKQorQ09NUEFUSUJMRV9JT0NUTChWSURFT19DT05USU5VRSkKK0NPTVBBVElCTEVfSU9DVEwoVklERU9fU0VMRUNUX1NPVVJDRSkKK0NPTVBBVElCTEVfSU9DVEwoVklERU9fU0VUX0JMQU5LKQorQ09NUEFUSUJMRV9JT0NUTChWSURFT19HRVRfU1RBVFVTKQorQ09NUEFUSUJMRV9JT0NUTChWSURFT19TRVRfRElTUExBWV9GT1JNQVQpCitDT01QQVRJQkxFX0lPQ1RMKFZJREVPX0ZBU1RfRk9SV0FSRCkKK0NPTVBBVElCTEVfSU9DVEwoVklERU9fU0xPV01PVElPTikKK0NPTVBBVElCTEVfSU9DVEwoVklERU9fR0VUX0NBUEFCSUxJVElFUykKK0NPTVBBVElCTEVfSU9DVEwoVklERU9fQ0xFQVJfQlVGRkVSKQorQ09NUEFUSUJMRV9JT0NUTChWSURFT19TRVRfSUQpCitDT01QQVRJQkxFX0lPQ1RMKFZJREVPX1NFVF9TVFJFQU1UWVBFKQorQ09NUEFUSUJMRV9JT0NUTChWSURFT19TRVRfRk9STUFUKQorQ09NUEFUSUJMRV9JT0NUTChWSURFT19TRVRfU1lTVEVNKQorQ09NUEFUSUJMRV9JT0NUTChWSURFT19TRVRfSElHSExJR0hUKQorQ09NUEFUSUJMRV9JT0NUTChWSURFT19TRVRfU1BVKQorQ09NUEFUSUJMRV9JT0NUTChWSURFT19HRVRfTkFWSSkKK0NPTVBBVElCTEVfSU9DVEwoVklERU9fU0VUX0FUVFJJQlVURVMpCitDT01QQVRJQkxFX0lPQ1RMKFZJREVPX0dFVF9TSVpFKQorQ09NUEFUSUJMRV9JT0NUTChWSURFT19HRVRfRlJBTUVfUkFURSkKKworLyogbm93IHRoaW5ncyB0aGF0IG5lZWQgaGFuZGxlcnMgKi8KIEhBTkRMRV9JT0NUTChNRU1SRUFET09CMzIsIG10ZF9yd19vb2IpCiBIQU5ETEVfSU9DVEwoTUVNV1JJVEVPT0IzMiwgbXRkX3J3X29vYikKICNpZmRlZiBDT05GSUdfTkVUCkBAIC0yNjM4LDQgKzM0OTEsMTU5IEBACiBJR05PUkVfSU9DVEwoVkZBVF9JT0NUTF9SRUFERElSX1NIT1JUMzIpCiB9OwogCi1pbnQgaW9jdGxfdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoaW9jdGxfc3RhcnQpOworI2RlZmluZSBJT0NUTF9IQVNIU0laRSAyNTYKK3N0YXRpYyBzdHJ1Y3QgaW9jdGxfdHJhbnMgKmlvY3RsMzJfaGFzaF90YWJsZVtJT0NUTF9IQVNIU0laRV07CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpb2N0bDMyX2hhc2godW5zaWduZWQgbG9uZyBjbWQpCit7CisJcmV0dXJuICgoKGNtZCA+PiA2KSBeIChjbWQgPj4gNCkgXiBjbWQpKSAlIElPQ1RMX0hBU0hTSVpFOworfQorCitzdGF0aWMgdm9pZCBjb21wYXRfaW9jdGxfZXJyb3Ioc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBmZCwKKwkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJY2hhciBidWZbMTBdOworCWNoYXIgKmZuID0gIj8iOworCWNoYXIgKnBhdGg7CisKKwkvKiBmaW5kIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2UuICovCisJcGF0aCA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmIChwYXRoKSB7CisJCWZuID0gZF9wYXRoKGZpbHAtPmZfcGF0aC5kZW50cnksIGZpbHAtPmZfcGF0aC5tbnQsIHBhdGgsIFBBR0VfU0laRSk7CisJCWlmIChJU19FUlIoZm4pKQorCQkJZm4gPSAiPyI7CisJfQorCisJIHNwcmludGYoYnVmLCInJWMnIiwgKGNtZD4+X0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSyk7CisJaWYgKCFpc3ByaW50KGJ1ZlsxXSkpCisJCXNwcmludGYoYnVmLCAiJTAyeCIsIGJ1ZlsxXSk7CisJY29tcGF0X3ByaW50aygiaW9jdGwzMiglczolZCk6IFVua25vd24gY21kIGZkKCVkKSAiCisJCQkiY21kKCUwOHgpe3Q6JXM7c3o6JXV9IGFyZyglMDh4KSBvbiAlc1xuIiwKKwkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkJCShpbnQpZmQsICh1bnNpZ25lZCBpbnQpY21kLCBidWYsCisJCQkoY21kID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfU0laRU1BU0ssCisJCQkodW5zaWduZWQgaW50KWFyZywgZm4pOworCisJaWYgKHBhdGgpCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwYXRoKTsKK30KKworYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBmaWxlICpmaWxwOworCWludCBlcnJvciA9IC1FQkFERjsKKwlzdHJ1Y3QgaW9jdGxfdHJhbnMgKnQ7CisJaW50IGZwdXRfbmVlZGVkOworCisJZmlscCA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKCFmaWxwKQorCQlnb3RvIG91dDsKKworCS8qIFJFRC1QRU4gaG93IHNob3VsZCBMU00gbW9kdWxlIGtub3cgaXQncyBoYW5kbGluZyAzMmJpdD8gKi8KKwllcnJvciA9IHNlY3VyaXR5X2ZpbGVfaW9jdGwoZmlscCwgY21kLCBhcmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZnB1dDsKKworCS8qCisJICogVG8gYWxsb3cgdGhlIGNvbXBhdF9pb2N0bCBoYW5kbGVycyB0byBiZSBzZWxmIGNvbnRhaW5lZAorCSAqIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGNvbW1vbiBpb2N0bHMgaGVyZSBmaXJzdC4KKwkgKiBKdXN0IGhhbmRsZSB0aGVtIHdpdGggdGhlIHN0YW5kYXJkIGhhbmRsZXJzIGJlbG93LgorCSAqLworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBGSU9DTEVYOgorCWNhc2UgRklPTkNMRVg6CisJY2FzZSBGSU9OQklPOgorCWNhc2UgRklPQVNZTkM6CisJY2FzZSBGSU9RU0laRToKKwkJYnJlYWs7CisKKwljYXNlIEZJQk1BUDoKKwljYXNlIEZJR0VUQlNaOgorCWNhc2UgRklPTlJFQUQ6CisJCWlmIChTX0lTUkVHKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJCQlicmVhazsKKwkJLypGQUxMIFRIUk9VR0gqLworCisJZGVmYXVsdDoKKwkJaWYgKGZpbHAtPmZfb3AgJiYgZmlscC0+Zl9vcC0+Y29tcGF0X2lvY3RsKSB7CisJCQllcnJvciA9IGZpbHAtPmZfb3AtPmNvbXBhdF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CisJCQlpZiAoZXJyb3IgIT0gLUVOT0lPQ1RMQ01EKQorCQkJCWdvdG8gb3V0X2ZwdXQ7CisJCX0KKworCQlpZiAoIWZpbHAtPmZfb3AgfHwKKwkJICAgICghZmlscC0+Zl9vcC0+aW9jdGwgJiYgIWZpbHAtPmZfb3AtPnVubG9ja2VkX2lvY3RsKSkKKwkJCWdvdG8gZG9faW9jdGw7CisJCWJyZWFrOworCX0KKworCWZvciAodCA9IGlvY3RsMzJfaGFzaF90YWJsZVtpb2N0bDMyX2hhc2goY21kKV07IHQ7IHQgPSB0LT5uZXh0KSB7CisJCWlmICh0LT5jbWQgPT0gY21kKQorCQkJZ290byBmb3VuZF9oYW5kbGVyOworCX0KKworI2lmZGVmIENPTkZJR19ORVQKKwlpZiAoU19JU1NPQ0soZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSAmJgorCSAgICBjbWQgPj0gU0lPQ0RFVlBSSVZBVEUgJiYgY21kIDw9IChTSU9DREVWUFJJVkFURSArIDE1KSkgeworCQllcnJvciA9IHNpb2NkZXZwcml2YXRlX2lvY3RsKGZkLCBjbWQsIGFyZyk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCXN0YXRpYyBpbnQgY291bnQ7CisKKwkJaWYgKCsrY291bnQgPD0gNTApCisJCQljb21wYXRfaW9jdGxfZXJyb3IoZmlscCwgZmQsIGNtZCwgYXJnKTsKKwkJZXJyb3IgPSAtRUlOVkFMOworCX0KKworCWdvdG8gb3V0X2ZwdXQ7CisKKyBmb3VuZF9oYW5kbGVyOgorCWlmICh0LT5oYW5kbGVyKSB7CisJCWxvY2tfa2VybmVsKCk7CisJCWVycm9yID0gdC0+aGFuZGxlcihmZCwgY21kLCBhcmcsIGZpbHApOworCQl1bmxvY2tfa2VybmVsKCk7CisJCWdvdG8gb3V0X2ZwdXQ7CisJfQorCisgZG9faW9jdGw6CisJZXJyb3IgPSB2ZnNfaW9jdGwoZmlscCwgZmQsIGNtZCwgYXJnKTsKKyBvdXRfZnB1dDoKKwlmcHV0X2xpZ2h0KGZpbHAsIGZwdXRfbmVlZGVkKTsKKyBvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBpb2N0bDMyX2luc2VydF90cmFuc2xhdGlvbihzdHJ1Y3QgaW9jdGxfdHJhbnMgKnRyYW5zKQoreworCXVuc2lnbmVkIGxvbmcgaGFzaDsKKwlzdHJ1Y3QgaW9jdGxfdHJhbnMgKnQ7CisKKwloYXNoID0gaW9jdGwzMl9oYXNoICh0cmFucy0+Y21kKTsKKwlpZiAoIWlvY3RsMzJfaGFzaF90YWJsZVtoYXNoXSkKKwkJaW9jdGwzMl9oYXNoX3RhYmxlW2hhc2hdID0gdHJhbnM7CisJZWxzZSB7CisJCXQgPSBpb2N0bDMyX2hhc2hfdGFibGVbaGFzaF07CisJCXdoaWxlICh0LT5uZXh0KQorCQkJdCA9IHQtPm5leHQ7CisJCXRyYW5zLT5uZXh0ID0gTlVMTDsKKwkJdC0+bmV4dCA9IHRyYW5zOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgaW5pdF9zeXMzMl9pb2N0bCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW9jdGxfc3RhcnQpOyBpKyspIHsKKwkJaWYgKGlvY3RsX3N0YXJ0W2ldLm5leHQgIT0gMCkgeworCQkJcHJpbnRrKCJpb2N0bCB0cmFuc2xhdGlvbiAlZCBiYWRcbiIsaSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpb2N0bDMyX2luc2VydF90cmFuc2xhdGlvbigmaW9jdGxfc3RhcnRbaV0pOworCX0KKwlyZXR1cm4gMDsKK30KK19faW5pdGNhbGwoaW5pdF9zeXMzMl9pb2N0bCk7CmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9maWxlLmMgYi9mcy9jb25maWdmcy9maWxlLmMKaW5kZXggZDk4YmU1ZS4uMzUyN2M3YyAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvZmlsZS5jCisrKyBiL2ZzL2NvbmZpZ2ZzL2ZpbGUuYwpAQCAtNzcsMzYgKzc3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KLS8qKgotICoJZmx1c2hfcmVhZF9idWZmZXIgLSBwdXNoIGJ1ZmZlciB0byB1c2Vyc3BhY2UuCi0gKglAYnVmZmVyOglkYXRhIGJ1ZmZlciBmb3IgZmlsZS4KLSAqCUB1c2VyYnVmOgl1c2VyLXBhc3NlZCBidWZmZXIuCi0gKglAY291bnQ6CQludW1iZXIgb2YgYnl0ZXMgcmVxdWVzdGVkLgotICoJQHBwb3M6CQlmaWxlIHBvc2l0aW9uLgotICoKLSAqCUNvcHkgdGhlIGJ1ZmZlciB3ZSBmaWxsZWQgaW4gZmlsbF9yZWFkX2J1ZmZlcigpIHRvIHVzZXJzcGFjZS4KLSAqCVRoaXMgaXMgZG9uZSBhdCB0aGUgcmVhZGVyJ3MgbGVpc3VyZSwgY29weWluZyBhbmQgYWR2YW5jaW5nCi0gKgl0aGUgYW1vdW50IHRoZXkgc3BlY2lmeSBlYWNoIHRpbWUuCi0gKglUaGlzIG1heSBiZSBjYWxsZWQgY29udGludW91c2x5IHVudGlsIHRoZSBidWZmZXIgaXMgZW1wdHkuCi0gKi8KLXN0YXRpYyBpbnQgZmx1c2hfcmVhZF9idWZmZXIoc3RydWN0IGNvbmZpZ2ZzX2J1ZmZlciAqIGJ1ZmZlciwgY2hhciBfX3VzZXIgKiBidWYsCi0JCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKLXsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoKnBwb3MgPiBidWZmZXItPmNvdW50KQotCQlyZXR1cm4gMDsKLQotCWlmIChjb3VudCA+IChidWZmZXItPmNvdW50IC0gKnBwb3MpKQotCQljb3VudCA9IGJ1ZmZlci0+Y291bnQgLSAqcHBvczsKLQotCWVycm9yID0gY29weV90b191c2VyKGJ1ZixidWZmZXItPnBhZ2UgKyAqcHBvcyxjb3VudCk7Ci0JaWYgKCFlcnJvcikKLQkJKnBwb3MgKz0gY291bnQ7Ci0JcmV0dXJuIGVycm9yID8gLUVGQVVMVCA6IGNvdW50OwotfQotCiAvKioKICAqCWNvbmZpZ2ZzX3JlYWRfZmlsZSAtIHJlYWQgYW4gYXR0cmlidXRlLgogICoJQGZpbGU6CWZpbGUgcG9pbnRlci4KQEAgLTEzOSw3ICsxMDksOCBAQAogCX0KIAlwcl9kZWJ1ZygiJXM6IGNvdW50ID0gJXpkLCBwcG9zID0gJWxsZCwgYnVmID0gJXNcbiIsCiAJCSBfX0ZVTkNUSU9OX18sIGNvdW50LCAqcHBvcywgYnVmZmVyLT5wYWdlKTsKLQlyZXR2YWwgPSBmbHVzaF9yZWFkX2J1ZmZlcihidWZmZXIsYnVmLGNvdW50LHBwb3MpOworCXJldHZhbCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIGJ1ZmZlci0+cGFnZSwKKwkJCQkJIGJ1ZmZlci0+Y291bnQpOwogb3V0OgogCXVwKCZidWZmZXItPnNlbSk7CiAJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2lub2RlLmMgYi9mcy9jb25maWdmcy9pbm9kZS5jCmluZGV4IDJlYzliZWEuLmRkYzAwM2EgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2lub2RlLmMKKysrIGIvZnMvY29uZmlnZnMvaW5vZGUuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZ2ZzLmg+CiAjaW5jbHVkZSAiY29uZmlnZnNfaW50ZXJuYWwuaCIKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggZDFiZjVkOC4uMGU3M2FhMCAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEyMSw2ICsxMjAsMjggQEAKIAl9CiB9CiAKKy8qKgorICogZF9raWxsIC0ga2lsbCBkZW50cnkgYW5kIHJldHVybiBwYXJlbnQKKyAqIEBkZW50cnk6IGRlbnRyeSB0byBraWxsCisgKgorICogQ2FsbGVkIHdpdGggZGNhY2hlX2xvY2sgYW5kIGRfbG9jaywgcmVsZWFzZXMgYm90aC4gIFRoZSBkZW50cnkgbXVzdAorICogYWxyZWFkeSBiZSB1bmhhc2hlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBMUlUuCisgKgorICogSWYgdGhpcyBpcyB0aGUgcm9vdCBvZiB0aGUgZGVudHJ5IHRyZWUsIHJldHVybiBOVUxMLgorICovCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZF9raWxsKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CisKKwlsaXN0X2RlbCgmZGVudHJ5LT5kX3UuZF9jaGlsZCk7CisJZGVudHJ5X3N0YXQubnJfZGVudHJ5LS07CS8qIEZvciBkX2ZyZWUsIGJlbG93ICovCisJLypkcm9wcyB0aGUgbG9ja3MsIGF0IHRoYXQgcG9pbnQgbm9ib2R5IGNhbiByZWFjaCB0aGlzIGRlbnRyeSAqLworCWRlbnRyeV9pcHV0KGRlbnRyeSk7CisJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKKwlkX2ZyZWUoZGVudHJ5KTsKKwlyZXR1cm4gZGVudHJ5ID09IHBhcmVudCA/IE5VTEwgOiBwYXJlbnQ7Cit9CisKIC8qIAogICogVGhpcyBpcyBkcHV0CiAgKgpAQCAtMTg5LDI4ICsyMTAsMTcgQEAKIAogdW5oYXNoX2l0OgogCV9fZF9kcm9wKGRlbnRyeSk7Ci0KLWtpbGxfaXQ6IHsKLQkJc3RydWN0IGRlbnRyeSAqcGFyZW50OwotCi0JCS8qIElmIGRlbnRyeSB3YXMgb24gZF9scnUgbGlzdAotCQkgKiBkZWxldGUgaXQgZnJvbSB0aGVyZQotCQkgKi8KLSAgCQlpZiAoIWxpc3RfZW1wdHkoJmRlbnRyeS0+ZF9scnUpKSB7Ci0gIAkJCWxpc3RfZGVsKCZkZW50cnktPmRfbHJ1KTsKLSAgCQkJZGVudHJ5X3N0YXQubnJfdW51c2VkLS07Ci0gIAkJfQotICAJCWxpc3RfZGVsKCZkZW50cnktPmRfdS5kX2NoaWxkKTsKLQkJZGVudHJ5X3N0YXQubnJfZGVudHJ5LS07CS8qIEZvciBkX2ZyZWUsIGJlbG93ICovCi0JCS8qZHJvcHMgdGhlIGxvY2tzLCBhdCB0aGF0IHBvaW50IG5vYm9keSBjYW4gcmVhY2ggdGhpcyBkZW50cnkgKi8KLQkJZGVudHJ5X2lwdXQoZGVudHJ5KTsKLQkJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKLQkJZF9mcmVlKGRlbnRyeSk7Ci0JCWlmIChkZW50cnkgPT0gcGFyZW50KQotCQkJcmV0dXJuOwotCQlkZW50cnkgPSBwYXJlbnQ7Ci0JCWdvdG8gcmVwZWF0Owora2lsbF9pdDoKKwkvKiBJZiBkZW50cnkgd2FzIG9uIGRfbHJ1IGxpc3QKKwkgKiBkZWxldGUgaXQgZnJvbSB0aGVyZQorCSAqLworCWlmICghbGlzdF9lbXB0eSgmZGVudHJ5LT5kX2xydSkpIHsKKwkJbGlzdF9kZWwoJmRlbnRyeS0+ZF9scnUpOworCQlkZW50cnlfc3RhdC5ucl91bnVzZWQtLTsKIAl9CisJZGVudHJ5ID0gZF9raWxsKGRlbnRyeSk7CisJaWYgKGRlbnRyeSkKKwkJZ290byByZXBlYXQ7CiB9CiAKIC8qKgpAQCAtMzcxLDIyICszODEsNDAgQEAKICAqIFRocm93IGF3YXkgYSBkZW50cnkgLSBmcmVlIHRoZSBpbm9kZSwgZHB1dCB0aGUgcGFyZW50LiAgVGhpcyByZXF1aXJlcyB0aGF0CiAgKiB0aGUgTFJVIGxpc3QgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkLgogICoKKyAqIElmIHBydW5lX3BhcmVudHMgaXMgdHJ1ZSwgdHJ5IHRvIHBydW5lIGFuY2VzdG9ycyBhcyB3ZWxsLgorICoKICAqIENhbGxlZCB3aXRoIGRjYWNoZV9sb2NrLCBkcm9wcyBpdCBhbmQgdGhlbiByZWdhaW5zLgogICogQ2FsbGVkIHdpdGggZGVudHJ5LT5kX2xvY2sgaGVsZCwgZHJvcHMgaXQuCiAgKi8KLXN0YXRpYyB2b2lkIHBydW5lX29uZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKK3N0YXRpYyB2b2lkIHBydW5lX29uZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgaW50IHBydW5lX3BhcmVudHMpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqIHBhcmVudDsKLQogCV9fZF9kcm9wKGRlbnRyeSk7Ci0JbGlzdF9kZWwoJmRlbnRyeS0+ZF91LmRfY2hpbGQpOwotCWRlbnRyeV9zdGF0Lm5yX2RlbnRyeS0tOwkvKiBGb3IgZF9mcmVlLCBiZWxvdyAqLwotCWRlbnRyeV9pcHV0KGRlbnRyeSk7Ci0JcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKLQlkX2ZyZWUoZGVudHJ5KTsKLQlpZiAocGFyZW50ICE9IGRlbnRyeSkKLQkJZHB1dChwYXJlbnQpOworCWRlbnRyeSA9IGRfa2lsbChkZW50cnkpOworCWlmICghcHJ1bmVfcGFyZW50cykgeworCQlkcHV0KGRlbnRyeSk7CisJCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBQcnVuZSBhbmNlc3RvcnMuICBMb2NraW5nIGlzIHNpbXBsZXIgdGhhbiBpbiBkcHV0KCksCisJICogYmVjYXVzZSBkY2FjaGVfbG9jayBuZWVkcyB0byBiZSB0YWtlbiBhbnl3YXkuCisJICovCiAJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJd2hpbGUgKGRlbnRyeSkgeworCQlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soJmRlbnRyeS0+ZF9jb3VudCwgJmRlbnRyeS0+ZF9sb2NrKSkKKwkJCXJldHVybjsKKworCQlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9kZWxldGUpCisJCQlkZW50cnktPmRfb3AtPmRfZGVsZXRlKGRlbnRyeSk7CisJCWlmICghbGlzdF9lbXB0eSgmZGVudHJ5LT5kX2xydSkpIHsKKwkJCWxpc3RfZGVsKCZkZW50cnktPmRfbHJ1KTsKKwkJCWRlbnRyeV9zdGF0Lm5yX3VudXNlZC0tOworCQl9CisJCV9fZF9kcm9wKGRlbnRyeSk7CisJCWRlbnRyeSA9IGRfa2lsbChkZW50cnkpOworCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwl9CiB9CiAKIC8qKgpAQCAtMzk0LDYgKzQyMiw3IEBACiAgKiBAY291bnQ6IG51bWJlciBvZiBlbnRyaWVzIHRvIHRyeSBhbmQgZnJlZQogICogQHNiOiBpZiBnaXZlbiwgaWdub3JlIGRlbnRyaWVzIGZvciBvdGhlciBzdXBlcmJsb2NrcwogICogICAgICAgICB3aGljaCBhcmUgYmVpbmcgdW5tb3VudGVkLgorICogQHBydW5lX3BhcmVudHM6IGlmIHRydWUsIHRyeSB0byBwcnVuZSBhbmNlc3RvcnMgYXMgd2VsbCBpbiBvbmUgZ28KICAqCiAgKiBTaHJpbmsgdGhlIGRjYWNoZS4gVGhpcyBpcyBkb25lIHdoZW4gd2UgbmVlZAogICogbW9yZSBtZW1vcnksIG9yIHNpbXBseSB3aGVuIHdlIG5lZWQgdG8gdW5tb3VudApAQCAtNDA0LDcgKzQzMyw3IEBACiAgKiBhbGwgdGhlIGRlbnRyaWVzIGFyZSBpbiB1c2UuCiAgKi8KICAKLXN0YXRpYyB2b2lkIHBydW5lX2RjYWNoZShpbnQgY291bnQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCitzdGF0aWMgdm9pZCBwcnVuZV9kY2FjaGUoaW50IGNvdW50LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgcHJ1bmVfcGFyZW50cykKIHsKIAlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAlmb3IgKDsgY291bnQgOyBjb3VudC0tKSB7CkBAIC00NjQsNyArNDkzLDcgQEAKIAkJICogd2l0aG91dCB0YWtpbmcgdGhlIHNfdW1vdW50IGxvY2sgKEkgYWxyZWFkeSBob2xkIGl0KS4KIAkJICovCiAJCWlmIChzYiAmJiBkZW50cnktPmRfc2IgPT0gc2IpIHsKLQkJCXBydW5lX29uZV9kZW50cnkoZGVudHJ5KTsKKwkJCXBydW5lX29uZV9kZW50cnkoZGVudHJ5LCBwcnVuZV9wYXJlbnRzKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCS8qCkBAIC00NzksNyArNTA4LDcgQEAKIAkJc191bW91bnQgPSAmZGVudHJ5LT5kX3NiLT5zX3Vtb3VudDsKIAkJaWYgKGRvd25fcmVhZF90cnlsb2NrKHNfdW1vdW50KSkgewogCQkJaWYgKGRlbnRyeS0+ZF9zYi0+c19yb290ICE9IE5VTEwpIHsKLQkJCQlwcnVuZV9vbmVfZGVudHJ5KGRlbnRyeSk7CisJCQkJcHJ1bmVfb25lX2RlbnRyeShkZW50cnksIHBydW5lX3BhcmVudHMpOwogCQkJCXVwX3JlYWQoc191bW91bnQpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtNTUwLDcgKzU3OSw3IEBACiAJCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQkJY29udGludWU7CiAJCX0KLQkJcHJ1bmVfb25lX2RlbnRyeShkZW50cnkpOworCQlwcnVuZV9vbmVfZGVudHJ5KGRlbnRyeSwgMSk7CiAJCWNvbmRfcmVzY2hlZF9sb2NrKCZkY2FjaGVfbG9jayk7CiAJCWdvdG8gcmVwZWF0OwogCX0KQEAgLTgyOSw3ICs4NTgsNyBAQAogCWludCBmb3VuZDsKIAogCXdoaWxlICgoZm91bmQgPSBzZWxlY3RfcGFyZW50KHBhcmVudCkpICE9IDApCi0JCXBydW5lX2RjYWNoZShmb3VuZCwgcGFyZW50LT5kX3NiKTsKKwkJcHJ1bmVfZGNhY2hlKGZvdW5kLCBwYXJlbnQtPmRfc2IsIDEpOwogfQogCiAvKgpAQCAtODQ5LDcgKzg3OCw3IEBACiAJaWYgKG5yKSB7CiAJCWlmICghKGdmcF9tYXNrICYgX19HRlBfRlMpKQogCQkJcmV0dXJuIC0xOwotCQlwcnVuZV9kY2FjaGUobnIsIE5VTEwpOworCQlwcnVuZV9kY2FjaGUobnIsIE5VTEwsIDEpOwogCX0KIAlyZXR1cm4gKGRlbnRyeV9zdGF0Lm5yX3VudXNlZCAvIDEwMCkgKiBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlOwogfQpAQCAtMTgyMyw2ICsxODUyLDE2IEBACiAJc3RydWN0IHZmc21vdW50ICpyb290bW50OwogCXN0cnVjdCBkZW50cnkgKnJvb3Q7CiAKKwkvKgorCSAqIFdlIGhhdmUgdmFyaW91cyBzeW50aGV0aWMgZmlsZXN5c3RlbXMgdGhhdCBuZXZlciBnZXQgbW91bnRlZC4gIE9uCisJICogdGhlc2UgZmlsZXN5c3RlbXMgZGVudHJpZXMgYXJlIG5ldmVyIHVzZWQgZm9yIGxvb2t1cCBwdXJwb3NlcywgYW5kCisJICogdGh1cyBkb24ndCBuZWVkIHRvIGJlIGhhc2hlZC4gIFRoZXkgYWxzbyBkb24ndCBuZWVkIGEgbmFtZSB1bnRpbCBhCisJICogdXNlciB3YW50cyB0byBpZGVudGlmeSB0aGUgb2JqZWN0IGluIC9wcm9jL3BpZC9mZC8uICBUaGUgbGl0dGxlIGhhY2sKKwkgKiBiZWxvdyBhbGxvd3MgdXMgdG8gZ2VuZXJhdGUgYSBuYW1lIGZvciB0aGVzZSBvYmplY3RzIG9uIGRlbWFuZDoKKwkgKi8KKwlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9kbmFtZSkKKwkJcmV0dXJuIGRlbnRyeS0+ZF9vcC0+ZF9kbmFtZShkZW50cnksIGJ1ZiwgYnVmbGVuKTsKKwogCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCXJvb3RtbnQgPSBtbnRnZXQoY3VycmVudC0+ZnMtPnJvb3RtbnQpOwogCXJvb3QgPSBkZ2V0KGN1cnJlbnQtPmZzLT5yb290KTsKQEAgLTE4MzYsNiArMTg3NSwyNyBAQAogfQogCiAvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBkZW50cnlfb3BlcmF0aW9ucy5kX2RuYW1lKCkgbWVtYmVycworICovCitjaGFyICpkeW5hbWljX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLAorCQkJY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWNoYXIgdGVtcFs2NF07CisJaW50IHN6OworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlzeiA9IHZzbnByaW50Zih0ZW1wLCBzaXplb2YodGVtcCksIGZtdCwgYXJncykgKyAxOworCXZhX2VuZChhcmdzKTsKKworCWlmIChzeiA+IHNpemVvZih0ZW1wKSB8fCBzeiA+IGJ1ZmxlbikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CisKKwlidWZmZXIgKz0gYnVmbGVuIC0gc3o7CisJcmV0dXJuIG1lbWNweShidWZmZXIsIHRlbXAsIHN6KTsKK30KKworLyoKICAqIE5PVEUhIFRoZSB1c2VyLWxldmVsIGxpYnJhcnkgdmVyc2lvbiByZXR1cm5zIGEKICAqIGNoYXJhY3RlciBwb2ludGVyLiBUaGUga2VybmVsIHN5c3RlbSBjYWxsIGp1c3QKICAqIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGZpbGxlZCAod2hpY2gKZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmMKaW5kZXggNjQzZTU3Yi4uMDZlZjlhMiAxMDA2NDQKLS0tIGEvZnMvZGV2cHRzL2lub2RlLmMKKysrIGIvZnMvZGV2cHRzL2lub2RlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZwdHNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgogCiAjZGVmaW5lIERFVlBUU19TVVBFUl9NQUdJQyAweDFjZDEKIApAQCAtMTc4LDggKzE3OSwxMCBAQAogCWlub2RlLT5pX3ByaXZhdGUgPSB0dHk7CiAKIAlkZW50cnkgPSBnZXRfbm9kZShudW1iZXIpOwotCWlmICghSVNfRVJSKGRlbnRyeSkgJiYgIWRlbnRyeS0+ZF9pbm9kZSkKKwlpZiAoIUlTX0VSUihkZW50cnkpICYmICFkZW50cnktPmRfaW5vZGUpIHsKIAkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwkJZnNub3RpZnlfY3JlYXRlKGRldnB0c19yb290LT5kX2lub2RlLCBkZW50cnkpOworCX0KIAogCW11dGV4X3VubG9jaygmZGV2cHRzX3Jvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCmRpZmYgLS1naXQgYS9mcy9kaXJlY3QtaW8uYyBiL2ZzL2RpcmVjdC1pby5jCmluZGV4IGQ5ZDA4MzMuLjg1OTNmM2QgMTAwNjQ0Ci0tLSBhL2ZzL2RpcmVjdC1pby5jCisrKyBiL2ZzL2RpcmVjdC1pby5jCkBAIC00MzksNyArNDM5LDcgQEAKICAqIFdhaXQgb24gYW5kIHByb2Nlc3MgYWxsIGluLWZsaWdodCBCSU9zLiAgVGhpcyBtdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UKICAqIGFsbCBiaW9zIGhhdmUgYmVlbiBpc3N1ZWQgc28gdGhhdCB0aGUgcmVmY291bnQgY2FuIG9ubHkgZGVjcmVhc2UuCiAgKiBUaGlzIGp1c3Qgd2FpdHMgZm9yIGFsbCBiaW9zIHRvIG1ha2UgaXQgdGhyb3VnaCBkaW9fYmlvX2NvbXBsZXRlLiAgSU8KLSAqIGVycm9ycyBhcmUgcHJvcG9nYXRlZCB0aHJvdWdoIGRpby0+aW9fZXJyb3IgYW5kIHNob3VsZCBiZSBwcm9wb2dhdGVkIHZpYQorICogZXJyb3JzIGFyZSBwcm9wYWdhdGVkIHRocm91Z2ggZGlvLT5pb19lcnJvciBhbmQgc2hvdWxkIGJlIHByb3BhZ2F0ZWQgdmlhCiAgKiBkaW9fY29tcGxldGUoKS4KICAqLwogc3RhdGljIHZvaWQgZGlvX2F3YWl0X2NvbXBsZXRpb24oc3RydWN0IGRpbyAqZGlvKQpAQCAtODY3LDcgKzg2Nyw2IEBACiBkb19ob2xlczoKIAkJCS8qIEhhbmRsZSBob2xlcyAqLwogCQkJaWYgKCFidWZmZXJfbWFwcGVkKG1hcF9iaCkpIHsKLQkJCQljaGFyICprYWRkcjsKIAkJCQlsb2ZmX3QgaV9zaXplX2FsaWduZWQ7CiAKIAkJCQkvKiBBS1BNOiBlYXJnaCwgLUVOT1RCTEsgaXMgYSBoYWNrICovCkBAIC04ODgsMTEgKzg4Nyw4IEBACiAJCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQotCQkJCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCQkJCW1lbXNldChrYWRkciArIChibG9ja19pbl9wYWdlIDw8IGJsa2JpdHMpLAotCQkJCQkJMCwgMSA8PCBibGtiaXRzKTsKLQkJCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQkJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCQkJemVyb191c2VyX3BhZ2UocGFnZSwgYmxvY2tfaW5fcGFnZSA8PCBibGtiaXRzLAorCQkJCQkJMSA8PCBibGtiaXRzLCBLTV9VU0VSMCk7CiAJCQkJZGlvLT5ibG9ja19pbl9maWxlKys7CiAJCQkJYmxvY2tfaW5fcGFnZSsrOwogCQkJCWdvdG8gbmV4dF9ibG9jazsKZGlmZiAtLWdpdCBhL2ZzL2RxdW90LmMgYi9mcy9kcXVvdC5jCmluZGV4IDBhNWZlYmMuLjg4MTlkMjggMTAwNjQ0Ci0tLSBhL2ZzL2RxdW90LmMKKysrIGIvZnMvZHF1b3QuYwpAQCAtNjksNyArNjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpAQCAtNDc1LDcgKzQ3NCw3IEBACiAJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKIAkJZGlydHkgPSAmZHFvcHQtPmluZm9bY250XS5kcWlfZGlydHlfbGlzdDsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KGRpcnR5KSkgewotCQkJZHF1b3QgPSBsaXN0X2VudHJ5KGRpcnR5LT5uZXh0LCBzdHJ1Y3QgZHF1b3QsIGRxX2RpcnR5KTsKKwkJCWRxdW90ID0gbGlzdF9maXJzdF9lbnRyeShkaXJ0eSwgc3RydWN0IGRxdW90LCBkcV9kaXJ0eSk7CiAJCQkvKiBEaXJ0eSBhbmQgaW5hY3RpdmUgY2FuIGJlIG9ubHkgYmFkIGRxdW90Li4uICovCiAJCQlpZiAoIXRlc3RfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkgewogCQkJCWNsZWFyX2RxdW90X2RpcnR5KGRxdW90KTsKQEAgLTcyMSw3ICs3MjAsOCBAQAogCiAvKiBSZW1vdmUgcmVmZXJlbmNlcyB0byBkcXVvdHMgZnJvbSBpbm9kZSAtIGFkZCBkcXVvdCB0byBsaXN0IGZvciBmcmVlaW5nIGlmIG5lZWRlZCAqLwogLyogV2UgY2FuJ3QgcmFjZSB3aXRoIGFueWJvZHkgYmVjYXVzZSB3ZSBob2xkIGRxcHRyX3NlbSBmb3Igd3JpdGluZy4uLiAqLwotaW50IHJlbW92ZV9pbm9kZV9kcXVvdF9yZWYoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIHN0cnVjdCBsaXN0X2hlYWQgKnRvZnJlZV9oZWFkKQorc3RhdGljIGludCByZW1vdmVfaW5vZGVfZHF1b3RfcmVmKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqdG9mcmVlX2hlYWQpCiB7CiAJc3RydWN0IGRxdW90ICpkcXVvdCA9IGlub2RlLT5pX2RxdW90W3R5cGVdOwogCkBAIC0xNDIxLDcgKzE0MjEsNyBAQAogCQkJLyogSWYgcXVvdGEgd2FzIHJlZW5hYmxlZCBpbiB0aGUgbWVhbnRpbWUsIHdlIGhhdmUKIAkJCSAqIG5vdGhpbmcgdG8gZG8gKi8KIAkJCWlmICghc2JfaGFzX3F1b3RhX2VuYWJsZWQoc2IsIGNudCkpIHsKLQkJCQltdXRleF9sb2NrKCZ0b3B1dGlub2RlW2NudF0tPmlfbXV0ZXgpOworCQkJCW11dGV4X2xvY2tfbmVzdGVkKCZ0b3B1dGlub2RlW2NudF0tPmlfbXV0ZXgsIElfTVVURVhfUVVPVEEpOwogCQkJCXRvcHV0aW5vZGVbY250XS0+aV9mbGFncyAmPSB+KFNfSU1NVVRBQkxFIHwKIAkJCQkgIFNfTk9BVElNRSB8IFNfTk9RVU9UQSk7CiAJCQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJnRvcHV0aW5vZGVbY250XS0+aV9kYXRhLCAwKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2ZpbGUuYyBiL2ZzL2VjcnlwdGZzL2ZpbGUuYwppbmRleCA3YTdkMjVkLi41OTI4OGQ4IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9maWxlLmMKKysrIGIvZnMvZWNyeXB0ZnMvZmlsZS5jCkBAIC0yOCw2OSArMjgsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RhY2suaD4KICNpbmNsdWRlICJlY3J5cHRmc19rZXJuZWwuaCIKIAogLyoqCi0gKiBlY3J5cHRmc19sbHNlZWsKLSAqIEBmaWxlOiBGaWxlIHdlIGFyZSBzZWVraW5nIGluCi0gKiBAb2Zmc2V0OiBUaGUgb2Zmc2V0IHRvIHNlZWsgdG8KLSAqIEBvcmlnaW46IDIgLSBvZmZzZXQgZnJvbSBpX3NpemU7IDEgLSBvZmZzZXQgZnJvbSBmX3BvcwotICoKLSAqIFJldHVybnMgdGhlIHBvc2l0aW9uIHdlIGhhdmUgc2Vla2VkIHRvLCBvciBuZWdhdGl2ZSBvbiBlcnJvcgotICovCi1zdGF0aWMgbG9mZl90IGVjcnlwdGZzX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKLXsKLQlsb2ZmX3QgcnY7Ci0JbG9mZl90IG5ld19lbmRfcG9zOwotCWludCByYzsKLQlpbnQgZXhwYW5kaW5nX2ZpbGUgPSAwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7Ci0KLQkvKiBJZiBvdXIgb2Zmc2V0IGlzIHBhc3QgdGhlIGVuZCBvZiBvdXIgZmlsZSwgd2UncmUgZ29pbmcgdG8KLQkgKiBuZWVkIHRvIGdyb3cgaXQgc28gd2UgaGF2ZSBhIHZhbGlkIGxlbmd0aCBvZiAwJ3MgKi8KLQluZXdfZW5kX3BvcyA9IG9mZnNldDsKLQlzd2l0Y2ggKG9yaWdpbikgewotCWNhc2UgMjoKLQkJbmV3X2VuZF9wb3MgKz0gaV9zaXplX3JlYWQoaW5vZGUpOwotCQlleHBhbmRpbmdfZmlsZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJbmV3X2VuZF9wb3MgKz0gZmlsZS0+Zl9wb3M7Ci0JCWlmIChuZXdfZW5kX3BvcyA+IGlfc2l6ZV9yZWFkKGlub2RlKSkgewotCQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICJuZXdfZW5kX3Bvcyg9WzB4JS4xNnhdKSAiCi0JCQkJCSI+IGlfc2l6ZV9yZWFkKGlub2RlKSg9WzB4JS4xNnhdKVxuIiwKLQkJCQkJbmV3X2VuZF9wb3MsIGlfc2l6ZV9yZWFkKGlub2RlKSk7Ci0JCQlleHBhbmRpbmdfZmlsZSA9IDE7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKG5ld19lbmRfcG9zID4gaV9zaXplX3JlYWQoaW5vZGUpKSB7Ci0JCQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIm5ld19lbmRfcG9zKD1bMHglLjE2eF0pICIKLQkJCQkJIj4gaV9zaXplX3JlYWQoaW5vZGUpKD1bMHglLjE2eF0pXG4iLAotCQkJCQluZXdfZW5kX3BvcywgaV9zaXplX3JlYWQoaW5vZGUpKTsKLQkJCWV4cGFuZGluZ19maWxlID0gMTsKLQkJfQotCX0KLQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIm5ld19lbmRfcG9zID0gWzB4JS4xNnhdXG4iLCBuZXdfZW5kX3Bvcyk7Ci0JaWYgKGV4cGFuZGluZ19maWxlKSB7Ci0JCXJjID0gZWNyeXB0ZnNfdHJ1bmNhdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgbmV3X2VuZF9wb3MpOwotCQlpZiAocmMpIHsKLQkJCXJ2ID0gcmM7Ci0JCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBvbiBhdHRlbXB0IHRvICIKLQkJCQkJInRydW5jYXRlIHRvIChoaWdoZXIpIG9mZnNldCBbMHglLjE2eF07IgotCQkJCQkiIHJjID0gWyVkXVxuIiwgbmV3X2VuZF9wb3MsIHJjKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCXJ2ID0gZ2VuZXJpY19maWxlX2xsc2VlayhmaWxlLCBvZmZzZXQsIG9yaWdpbik7Ci1vdXQ6Ci0JcmV0dXJuIHJ2OwotfQotCi0vKioKICAqIGVjcnlwdGZzX3JlYWRfdXBkYXRlX2F0aW1lCiAgKgogICogZ2VuZXJpY19maWxlX3JlYWQgdXBkYXRlcyB0aGUgYXRpbWUgb2YgdXBwZXIgbGF5ZXIgaW5vZGUuICBCdXQsIGl0CkBAIC00MjYsNyArMzY4LDcgQEAKIH07CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZWNyeXB0ZnNfbWFpbl9mb3BzID0gewotCS5sbHNlZWsgPSBlY3J5cHRmc19sbHNlZWssCisJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQgPSBkb19zeW5jX3JlYWQsCiAJLmFpb19yZWFkID0gZWNyeXB0ZnNfcmVhZF91cGRhdGVfYXRpbWUsCiAJLndyaXRlID0gZG9fc3luY193cml0ZSwKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21haW4uYyBiL2ZzL2VjcnlwdGZzL21haW4uYwppbmRleCA4Y2JmM2Y2Li42MDYxMjhmIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tYWluLmMKKysrIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCkBAIC01ODMsOCArNTgzLDcgQEAKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKil2cHRyOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKQotCQlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOworCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZWNyeXB0ZnNfY2FjaGVfaW5mbyB7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tZXNzYWdpbmcuYyBiL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jCmluZGV4IDNiYWYyNTMuLmE5ZDg3YzQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jCisrKyBiL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKICAqIDAyMTExLTEzMDcsIFVTQS4KICAqLwotCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJlY3J5cHRmc19rZXJuZWwuaCIKIAogc3RhdGljIExJU1RfSEVBRChlY3J5cHRmc19tc2dfY3R4X2ZyZWVfbGlzdCk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tbWFwLmMgYi9mcy9lY3J5cHRmcy9tbWFwLmMKaW5kZXggMDc3MGM0Yi4uNTVjZWM5OCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbW1hcC5jCisrKyBiL2ZzL2VjcnlwdGZzL21tYXAuYwpAQCAtMzY0LDI0ICszNjQsMjcgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlpbnQgZW5kX2J5dGVfaW5fcGFnZTsKLQljaGFyICpwYWdlX3ZpcnQ7CiAKIAlpZiAoKGlfc2l6ZV9yZWFkKGlub2RlKSAvIFBBR0VfQ0FDSEVfU0laRSkgIT0gcGFnZS0+aW5kZXgpCiAJCWdvdG8gb3V0OwogCWVuZF9ieXRlX2luX3BhZ2UgPSBpX3NpemVfcmVhZChpbm9kZSkgJSBQQUdFX0NBQ0hFX1NJWkU7CiAJaWYgKHRvID4gZW5kX2J5dGVfaW5fcGFnZSkKIAkJZW5kX2J5dGVfaW5fcGFnZSA9IHRvOwotCXBhZ2VfdmlydCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQltZW1zZXQoKHBhZ2VfdmlydCArIGVuZF9ieXRlX2luX3BhZ2UpLCAwLAotCSAgICAgICAoUEFHRV9DQUNIRV9TSVpFIC0gZW5kX2J5dGVfaW5fcGFnZSkpOwotCWt1bm1hcF9hdG9taWMocGFnZV92aXJ0LCBLTV9VU0VSMCk7Ci0JZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJemVyb191c2VyX3BhZ2UocGFnZSwgZW5kX2J5dGVfaW5fcGFnZSwKKwkJUEFHRV9DQUNIRV9TSVpFIC0gZW5kX2J5dGVfaW5fcGFnZSwgS01fVVNFUjApOwogb3V0OgogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVjcnlwdGZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCSAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCisvKioKKyAqIGVDcnlwdGZzIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IGhvbGVzLiBXaGVuIHdyaXRpbmcgYWZ0ZXIgYQorICogc2VlayBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIGVDcnlwdGZzIGZpbGxzIGluIDAncyB0aHJvdWdoIHRvIHRoZQorICogY3VycmVudCBsb2NhdGlvbi4gVGhlIGNvZGUgdG8gZmlsbCBpbiB0aGUgMCdzIHRvIGFsbCB0aGUKKyAqIGludGVybWVkaWF0ZSBwYWdlcyBjYWxscyBlY3J5cHRmc19wcmVwYXJlX3dyaXRlX25vX3RydW5jYXRlKCkuCisgKi8KK3N0YXRpYyBpbnQKK2VjcnlwdGZzX3ByZXBhcmVfd3JpdGVfbm9fdHJ1bmNhdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQogewogCWludCByYyA9IDA7CiAKQEAgLTM5NCw2ICszOTcsMzEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgZWNyeXB0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKK3sKKwlsb2ZmX3QgcG9zOworCWludCByYyA9IDA7CisKKwlpZiAoZnJvbSA9PSAwICYmIHRvID09IFBBR0VfQ0FDSEVfU0laRSkKKwkJZ290byBvdXQ7CS8qIElmIHdlIGFyZSB3cml0aW5nIGEgZnVsbCBwYWdlLCBpdCB3aWxsIGJlCisJCQkJICAgdXAgdG8gZGF0ZS4gKi8KKwlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkKKwkJcmMgPSBlY3J5cHRmc19kb19yZWFkcGFnZShmaWxlLCBwYWdlLCBwYWdlLT5pbmRleCk7CisJcG9zID0gKChsb2ZmX3QpcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCkgKyB0bzsKKwlpZiAocG9zID4gaV9zaXplX3JlYWQocGFnZS0+bWFwcGluZy0+aG9zdCkpIHsKKwkJcmMgPSBlY3J5cHRmc190cnVuY2F0ZShmaWxlLT5mX3BhdGguZGVudHJ5LCBwb3MpOworCQlpZiAocmMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igb24gYXR0ZW1wdCB0byAiCisJCQkgICAgICAgInRydW5jYXRlIHRvIChoaWdoZXIpIG9mZnNldCBbJWxsZF07IgorCQkJICAgICAgICIgcmMgPSBbJWRdXG4iLCBwb3MsIHJjKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorb3V0OgorCXJldHVybiByYzsKK30KKwogaW50IGVjcnlwdGZzX3dyaXRlcGFnZV9hbmRfcmVsZWFzZV9sb3dlcl9wYWdlKHN0cnVjdCBwYWdlICpsb3dlcl9wYWdlLAogCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmxvd2VyX2lub2RlLAogCQkJCQkgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKQEAgLTc0MCw3ICs3NjgsNiBAQAogewogCWludCByYyA9IDA7CiAJc3RydWN0IHBhZ2UgKnRtcF9wYWdlOwotCWNoYXIgKnRtcF9wYWdlX3ZpcnQ7CiAKIAl0bXBfcGFnZSA9IGVjcnlwdGZzX2dldDFwYWdlKGZpbGUsIGluZGV4KTsKIAlpZiAoSVNfRVJSKHRtcF9wYWdlKSkgewpAQCAtNzQ5LDE4ICs3NzYsMTUgQEAKIAkJcmMgPSBQVFJfRVJSKHRtcF9wYWdlKTsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gZWNyeXB0ZnNfcHJlcGFyZV93cml0ZShmaWxlLCB0bXBfcGFnZSwgc3RhcnQsIHN0YXJ0ICsgbnVtX3plcm9zKTsKLQlpZiAocmMpIHsKKwlpZiAoKHJjID0gZWNyeXB0ZnNfcHJlcGFyZV93cml0ZV9ub190cnVuY2F0ZShmaWxlLCB0bXBfcGFnZSwgc3RhcnQsCisJCQkJCQkgICAgIChzdGFydCArIG51bV96ZXJvcykpKSkgewogCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBwcmVwYXJpbmcgdG8gd3JpdGUgemVybydzICIKLQkJCQkidG8gcmVtYWluZGVyIG9mIHBhZ2UgYXQgaW5kZXggWzB4JS4xNnhdXG4iLAorCQkJCSJ0byBwYWdlIGF0IGluZGV4IFsweCUuMTZ4XVxuIiwKIAkJCQlpbmRleCk7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZSh0bXBfcGFnZSk7CiAJCWdvdG8gb3V0OwogCX0KLQl0bXBfcGFnZV92aXJ0ID0ga21hcF9hdG9taWModG1wX3BhZ2UsIEtNX1VTRVIwKTsKLQltZW1zZXQoKChjaGFyICopdG1wX3BhZ2VfdmlydCArIHN0YXJ0KSwgMCwgbnVtX3plcm9zKTsKLQlrdW5tYXBfYXRvbWljKHRtcF9wYWdlX3ZpcnQsIEtNX1VTRVIwKTsKLQlmbHVzaF9kY2FjaGVfcGFnZSh0bXBfcGFnZSk7CisJemVyb191c2VyX3BhZ2UodG1wX3BhZ2UsIHN0YXJ0LCBudW1femVyb3MsIEtNX1VTRVIwKTsKIAlyYyA9IGVjcnlwdGZzX2NvbW1pdF93cml0ZShmaWxlLCB0bXBfcGFnZSwgc3RhcnQsIHN0YXJ0ICsgbnVtX3plcm9zKTsKIAlpZiAocmMgPCAwKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIGF0dGVtcHRpbmcgdG8gd3JpdGUgemVybydzICIKZGlmZiAtLWdpdCBhL2ZzL2Vmcy9zdXBlci5jIGIvZnMvZWZzL3N1cGVyLmMKaW5kZXggYmE3YThiOS4uZTBhNjgzOSAxMDA2NDQKLS0tIGEvZnMvZWZzL3N1cGVyLmMKKysrIGIvZnMvZWZzL3N1cGVyLmMKQEAgLTcyLDggKzcyLDcgQEAKIHsKIAlzdHJ1Y3QgZWZzX2lub2RlX2luZm8gKmVpID0gKHN0cnVjdCBlZnNfaW5vZGVfaW5mbyAqKSBmb287CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpCi0JCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CisJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIH0KICAKIHN0YXRpYyBpbnQgaW5pdF9pbm9kZWNhY2hlKHZvaWQpCmRpZmYgLS1naXQgYS9mcy9ldmVudGZkLmMgYi9mcy9ldmVudGZkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlMTljMAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V2ZW50ZmQuYwpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqICBmcy9ldmVudGZkLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ldmVudGZkLmg+CisKK3N0cnVjdCBldmVudGZkX2N0eCB7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3FoOworCS8qCisJICogRXZlcnkgdGltZSB0aGF0IGEgd3JpdGUoMikgaXMgcGVyZm9ybWVkIG9uIGFuIGV2ZW50ZmQsIHRoZQorCSAqIHZhbHVlIG9mIHRoZSBfX3U2NCBiZWluZyB3cml0dGVuIGlzIGFkZGVkIHRvICJjb3VudCIgYW5kIGEKKwkgKiB3YWtldXAgaXMgcGVyZm9ybWVkIG9uICJ3cWgiLiBBIHJlYWQoMikgd2lsbCByZXR1cm4gdGhlICJjb3VudCIKKwkgKiB2YWx1ZSB0byB1c2Vyc3BhY2UsIGFuZCB3aWxsIHJlc2V0ICJjb3VudCIgdG8gemVyby4gVGhlIGtlcm5lbAorCSAqIHNpemUgZXZlbnRmZF9zaWduYWwoKSBhbHNvLCBhZGRzIHRvIHRoZSAiY291bnQiIGNvdW50ZXIgYW5kCisJICogaXNzdWUgYSB3YWtldXAuCisJICovCisJX191NjQgY291bnQ7Cit9OworCisvKgorICogQWRkcyAibiIgdG8gdGhlIGV2ZW50ZmQgY291bnRlciAiY291bnQiLiBSZXR1cm5zICJuIiBpbiBjYXNlIG9mCisgKiBzdWNjZXNzLCBvciBhIHZhbHVlIGxvd2VyIHRoZW4gIm4iIGluIGNhc2Ugb2YgY291dG5lciBvdmVyZmxvdy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIGJ5IHRoZSBrZXJuZWwgaW4gcGF0aHMKKyAqIHRoYXQgZG8gbm90IGFsbG93IHNsZWVwaW5nLiBJbiB0aGlzIGZ1bmN0aW9uIHdlIGFsbG93IHRoZSBjb3VudGVyCisgKiB0byByZWFjaCB0aGUgVUxMT05HX01BWCB2YWx1ZSwgYW5kIHdlIHNpZ25hbCB0aGlzIGFzIG92ZXJmbG93CisgKiBjb25kaXRpb24gYnkgcmV0dXJpbmluZyBhIFBPTExFUlIgdG8gcG9sbCgyKS4KKyAqLworaW50IGV2ZW50ZmRfc2lnbmFsKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbikKK3sKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG4gPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT53cWgubG9jaywgZmxhZ3MpOworCWlmIChVTExPTkdfTUFYIC0gY3R4LT5jb3VudCA8IG4pCisJCW4gPSAoaW50KSAoVUxMT05HX01BWCAtIGN0eC0+Y291bnQpOworCWN0eC0+Y291bnQgKz0gbjsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmY3R4LT53cWgpKQorCQl3YWtlX3VwX2xvY2tlZCgmY3R4LT53cWgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+d3FoLmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGV2ZW50ZmRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlrZnJlZShmaWxlLT5wcml2YXRlX2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGV2ZW50ZmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgZXZlbnRzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcG9sbF93YWl0KGZpbGUsICZjdHgtPndxaCwgd2FpdCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT53cWgubG9jaywgZmxhZ3MpOworCWlmIChjdHgtPmNvdW50ID4gMCkKKwkJZXZlbnRzIHw9IFBPTExJTjsKKwlpZiAoY3R4LT5jb3VudCA9PSBVTExPTkdfTUFYKQorCQlldmVudHMgfD0gUE9MTEVSUjsKKwlpZiAoVUxMT05HX01BWCAtIDEgPiBjdHgtPmNvdW50KQorCQlldmVudHMgfD0gUE9MTE9VVDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPndxaC5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZXZlbnRzOworfQorCitzdGF0aWMgc3NpemVfdCBldmVudGZkX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSAgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3NpemVfdCByZXM7CisJX191NjQgdWNudDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWlmIChjb3VudCA8IHNpemVvZih1Y250KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3Bpbl9sb2NrX2lycSgmY3R4LT53cWgubG9jayk7CisJcmVzID0gLUVBR0FJTjsKKwl1Y250ID0gY3R4LT5jb3VudDsKKwlpZiAodWNudCA+IDApCisJCXJlcyA9IHNpemVvZih1Y250KTsKKwllbHNlIGlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgeworCQlfX2FkZF93YWl0X3F1ZXVlKCZjdHgtPndxaCwgJndhaXQpOworCQlmb3IgKHJlcyA9IDA7OykgeworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCWlmIChjdHgtPmNvdW50ID4gMCkgeworCQkJCXVjbnQgPSBjdHgtPmNvdW50OworCQkJCXJlcyA9IHNpemVvZih1Y250KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXJlcyA9IC1FUkVTVEFSVFNZUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycSgmY3R4LT53cWgubG9jayk7CisJCQlzY2hlZHVsZSgpOworCQkJc3Bpbl9sb2NrX2lycSgmY3R4LT53cWgubG9jayk7CisJCX0KKwkJX19yZW1vdmVfd2FpdF9xdWV1ZSgmY3R4LT53cWgsICZ3YWl0KTsKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCX0KKwlpZiAocmVzID4gMCkgeworCQljdHgtPmNvdW50ID0gMDsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmN0eC0+d3FoKSkKKwkJCXdha2VfdXBfbG9ja2VkKCZjdHgtPndxaCk7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmY3R4LT53cWgubG9jayk7CisJaWYgKHJlcyA+IDAgJiYgcHV0X3VzZXIodWNudCwgKF9fdTY0IF9fdXNlciAqKSBidWYpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGV2ZW50ZmRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSAgICAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBldmVudGZkX2N0eCAqY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNzaXplX3QgcmVzOworCV9fdTY0IHVjbnQ7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlpZiAoY291bnQgPCBzaXplb2YodWNudCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjb3B5X2Zyb21fdXNlcigmdWNudCwgYnVmLCBzaXplb2YodWNudCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAodWNudCA9PSBVTExPTkdfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzcGluX2xvY2tfaXJxKCZjdHgtPndxaC5sb2NrKTsKKwlyZXMgPSAtRUFHQUlOOworCWlmIChVTExPTkdfTUFYIC0gY3R4LT5jb3VudCA+IHVjbnQpCisJCXJlcyA9IHNpemVvZih1Y250KTsKKwllbHNlIGlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgeworCQlfX2FkZF93YWl0X3F1ZXVlKCZjdHgtPndxaCwgJndhaXQpOworCQlmb3IgKHJlcyA9IDA7OykgeworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCWlmIChVTExPTkdfTUFYIC0gY3R4LT5jb3VudCA+IHVjbnQpIHsKKwkJCQlyZXMgPSBzaXplb2YodWNudCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlyZXMgPSAtRVJFU1RBUlRTWVM7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnEoJmN0eC0+d3FoLmxvY2spOworCQkJc2NoZWR1bGUoKTsKKwkJCXNwaW5fbG9ja19pcnEoJmN0eC0+d3FoLmxvY2spOworCQl9CisJCV9fcmVtb3ZlX3dhaXRfcXVldWUoJmN0eC0+d3FoLCAmd2FpdCk7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwl9CisJaWYgKHJlcyA+IDApIHsKKwkJY3R4LT5jb3VudCArPSB1Y250OworCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmY3R4LT53cWgpKQorCQkJd2FrZV91cF9sb2NrZWQoJmN0eC0+d3FoKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPndxaC5sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV2ZW50ZmRfZm9wcyA9IHsKKwkucmVsZWFzZQk9IGV2ZW50ZmRfcmVsZWFzZSwKKwkucG9sbAkJPSBldmVudGZkX3BvbGwsCisJLnJlYWQJCT0gZXZlbnRmZF9yZWFkLAorCS53cml0ZQkJPSBldmVudGZkX3dyaXRlLAorfTsKKworc3RydWN0IGZpbGUgKmV2ZW50ZmRfZmdldChpbnQgZmQpCit7CisJc3RydWN0IGZpbGUgKmZpbGU7CisKKwlmaWxlID0gZmdldChmZCk7CisJaWYgKCFmaWxlKQorCQlyZXR1cm4gRVJSX1BUUigtRUJBREYpOworCWlmIChmaWxlLT5mX29wICE9ICZldmVudGZkX2ZvcHMpIHsKKwkJZnB1dChmaWxlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJcmV0dXJuIGZpbGU7Cit9CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZXZlbnRmZCh1bnNpZ25lZCBpbnQgY291bnQpCit7CisJaW50IGVycm9yLCBmZDsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJY3R4ID0ga21hbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOworCWlmICghY3R4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN0eC0+d3FoKTsKKwljdHgtPmNvdW50ID0gY291bnQ7CisKKwkvKgorCSAqIFdoZW4gd2UgY2FsbCB0aGlzLCB0aGUgaW5pdGlhbGl6YXRpb24gbXVzdCBiZSBjb21wbGV0ZSwgc2luY2UKKwkgKiBhbm9uX2lub2RlX2dldGZkKCkgd2lsbCBpbnN0YWxsIHRoZSBmZC4KKwkgKi8KKwllcnJvciA9IGFub25faW5vZGVfZ2V0ZmQoJmZkLCAmaW5vZGUsICZmaWxlLCAiW2V2ZW50ZmRdIiwKKwkJCQkgJmV2ZW50ZmRfZm9wcywgY3R4KTsKKwlpZiAoIWVycm9yKQorCQlyZXR1cm4gZmQ7CisKKwlrZnJlZShjdHgpOworCXJldHVybiBlcnJvcjsKK30KKwpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAzYWU2NDRlLi4wYjczY2Q0IDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiAgZnMvZXZlbnRwb2xsLmMgKCBFZmZpY2VudCBldmVudCBwb2xsaW5nIGltcGxlbWVudGF0aW9uICkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEsLi4uLDIwMDYJIERhdmlkZSBMaWJlbnppCisgKiAgZnMvZXZlbnRwb2xsLmMgKEVmZmljZW50IGV2ZW50IHBvbGxpbmcgaW1wbGVtZW50YXRpb24pCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLC4uLiwyMDA3CSBEYXZpZGUgTGliZW56aQogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMSw3ICsxMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTIyLDM0ICsyMSwzMSBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2V2ZW50cG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tbWFuLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLQogCiAvKgogICogTE9DS0lORzoKICAqIFRoZXJlIGFyZSB0aHJlZSBsZXZlbCBvZiBsb2NraW5nIHJlcXVpcmVkIGJ5IGVwb2xsIDoKICAqCiAgKiAxKSBlcG11dGV4IChtdXRleCkKLSAqIDIpIGVwLT5zZW0gKHJ3X3NlbWFwaG9yZSkKLSAqIDMpIGVwLT5sb2NrIChyd19sb2NrKQorICogMikgZXAtPm10eCAobXV0ZXgpCisgKiAzKSBlcC0+bG9jayAoc3BpbmxvY2spCiAgKgogICogVGhlIGFjcXVpcmUgb3JkZXIgaXMgdGhlIG9uZSBsaXN0ZWQgYWJvdmUsIGZyb20gMSB0byAzLgogICogV2UgbmVlZCBhIHNwaW5sb2NrIChlcC0+bG9jaykgYmVjYXVzZSB3ZSBtYW5pcHVsYXRlIG9iamVjdHMKQEAgLTU5LDI1ICs1NSwyMiBAQAogICogYSBzcGlubG9jay4gRHVyaW5nIHRoZSBldmVudCB0cmFuc2ZlciBsb29wIChmcm9tIGtlcm5lbCB0bwogICogdXNlciBzcGFjZSkgd2UgY291bGQgZW5kIHVwIHNsZWVwaW5nIGR1ZSBhIGNvcHlfdG9fdXNlcigpLCBzbwogICogd2UgbmVlZCBhIGxvY2sgdGhhdCB3aWxsIGFsbG93IHVzIHRvIHNsZWVwLiBUaGlzIGxvY2sgaXMgYQotICogcmVhZC13cml0ZSBzZW1hcGhvcmUgKGVwLT5zZW0pLiBJdCBpcyBhY3F1aXJlZCBvbiByZWFkIGR1cmluZwotICogdGhlIGV2ZW50IHRyYW5zZmVyIGxvb3AgYW5kIGluIHdyaXRlIGR1cmluZyBlcG9sbF9jdGwoRVBPTExfQ1RMX0RFTCkKLSAqIGFuZCBkdXJpbmcgZXZlbnRwb2xsX3JlbGVhc2VfZmlsZSgpLiBUaGVuIHdlIGFsc28gbmVlZCBhIGdsb2JhbAotICogc2VtYXBob3JlIHRvIHNlcmlhbGl6ZSBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkgYW5kIGVwX2ZyZWUoKS4KLSAqIFRoaXMgc2VtYXBob3JlIGlzIGFjcXVpcmVkIGJ5IGVwX2ZyZWUoKSBkdXJpbmcgdGhlIGVwb2xsIGZpbGUKKyAqIG11dGV4IChlcC0+bXR4KS4gSXQgaXMgYWNxdWlyZWQgZHVyaW5nIHRoZSBldmVudCB0cmFuc2ZlciBsb29wLAorICogZHVyaW5nIGVwb2xsX2N0bChFUE9MTF9DVExfREVMKSBhbmQgZHVyaW5nIGV2ZW50cG9sbF9yZWxlYXNlX2ZpbGUoKS4KKyAqIFRoZW4gd2UgYWxzbyBuZWVkIGEgZ2xvYmFsIG11dGV4IHRvIHNlcmlhbGl6ZSBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkKKyAqIGFuZCBlcF9mcmVlKCkuCisgKiBUaGlzIG11dGV4IGlzIGFjcXVpcmVkIGJ5IGVwX2ZyZWUoKSBkdXJpbmcgdGhlIGVwb2xsIGZpbGUKICAqIGNsZWFudXAgcGF0aCBhbmQgaXQgaXMgYWxzbyBhY3F1aXJlZCBieSBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkKICAqIGlmIGEgZmlsZSBoYXMgYmVlbiBwdXNoZWQgaW5zaWRlIGFuIGVwb2xsIHNldCBhbmQgaXQgaXMgdGhlbgogICogY2xvc2UoKWQgd2l0aG91dCBhIHByZXZpb3VzIGNhbGwgdG9lcG9sbF9jdGwoRVBPTExfQ1RMX0RFTCkuCi0gKiBJdCBpcyBwb3NzaWJsZSB0byBkcm9wIHRoZSAiZXAtPnNlbSIgYW5kIHRvIHVzZSB0aGUgZ2xvYmFsCi0gKiBzZW1hcGhvcmUgImVwbXV0ZXgiICh0b2dldGhlciB3aXRoICJlcC0+bG9jayIpIHRvIGhhdmUgaXQgd29ya2luZywKLSAqIGJ1dCBoYXZpbmcgImVwLT5zZW0iIHdpbGwgbWFrZSB0aGUgaW50ZXJmYWNlIG1vcmUgc2NhbGFibGUuCisgKiBJdCBpcyBwb3NzaWJsZSB0byBkcm9wIHRoZSAiZXAtPm10eCIgYW5kIHRvIHVzZSB0aGUgZ2xvYmFsCisgKiBtdXRleCAiZXBtdXRleCIgKHRvZ2V0aGVyIHdpdGggImVwLT5sb2NrIikgdG8gaGF2ZSBpdCB3b3JraW5nLAorICogYnV0IGhhdmluZyAiZXAtPm10eCIgd2lsbCBtYWtlIHRoZSBpbnRlcmZhY2UgbW9yZSBzY2FsYWJsZS4KICAqIEV2ZW50cyB0aGF0IHJlcXVpcmUgaG9sZGluZyAiZXBtdXRleCIgYXJlIHZlcnkgcmFyZSwgd2hpbGUgZm9yCi0gKiBub3JtYWwgb3BlcmF0aW9ucyB0aGUgZXBvbGwgcHJpdmF0ZSAiZXAtPnNlbSIgd2lsbCBndWFyYW50ZWUKLSAqIGEgZ3JlYXRlciBzY2FsYWJpbGl0eS4KKyAqIG5vcm1hbCBvcGVyYXRpb25zIHRoZSBlcG9sbCBwcml2YXRlICJlcC0+bXR4IiB3aWxsIGd1YXJhbnRlZQorICogYSBiZXR0ZXIgc2NhbGFiaWxpdHkuCiAgKi8KIAotCi0jZGVmaW5lIEVWRU5UUE9MTEZTX01BR0lDIDB4MDMxMTE5NjUgLyogTXkgYmlydGhkYXkgc2hvdWxkIHdvcmsgZm9yIHRoaXMgOikgKi8KLQogI2RlZmluZSBERUJVR19FUE9MTCAwCiAKICNpZiBERUJVR19FUE9MTCA+IDAKQEAgLTEwNyw2ICsxMDAsNyBAQAogCiAjZGVmaW5lIEVQX01BWF9FVkVOVFMgKElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGVwb2xsX2V2ZW50KSkKIAorI2RlZmluZSBFUF9VTkFDVElWRV9QVFIgKCh2b2lkICopIC0xTCkKIAogc3RydWN0IGVwb2xsX2ZpbGVmZCB7CiAJc3RydWN0IGZpbGUgKmZpbGU7CkBAIC0xMTcsNyArMTExLDcgQEAKICAqIE5vZGUgdGhhdCBpcyBsaW5rZWQgaW50byB0aGUgIndha2VfdGFza19saXN0IiBtZW1iZXIgb2YgdGhlICJzdHJ1Y3QgcG9sbF9zYWZld2FrZSIuCiAgKiBJdCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb24gYWxsIHRhc2tzIHRoYXQgYXJlIGN1cnJlbnRseSBpbnNpZGUgdGhlIHdha2VfdXAoKSBjb2RlCiAgKiB0byAxKSBzaG9ydC1jaXJjdWl0IHRoZSBvbmUgY29taW5nIGZyb20gdGhlIHNhbWUgdGFzayBhbmQgc2FtZSB3YWl0IHF1ZXVlIGhlYWQKLSAqICggbG9vcCApIDIpIGFsbG93IGEgbWF4aW11bSBudW1iZXIgb2YgZXBvbGwgZGVzY3JpcHRvcnMgaW5jbHVzaW9uIG5lc3RpbmcKKyAqIChsb29wKSAyKSBhbGxvdyBhIG1heGltdW0gbnVtYmVyIG9mIGVwb2xsIGRlc2NyaXB0b3JzIGluY2x1c2lvbiBuZXN0aW5nCiAgKiAzKSBsZXQgZ28gdGhlIG9uZXMgY29taW5nIGZyb20gb3RoZXIgdGFza3MuCiAgKi8KIHN0cnVjdCB3YWtlX3Rhc2tfbm9kZSB7CkBAIC0xMzYsMjEgKzEzMCw1NyBAQAogfTsKIAogLyoKKyAqIEVhY2ggZmlsZSBkZXNjcmlwdG9yIGFkZGVkIHRvIHRoZSBldmVudHBvbGwgaW50ZXJmYWNlIHdpbGwKKyAqIGhhdmUgYW4gZW50cnkgb2YgdGhpcyB0eXBlIGxpbmtlZCB0byB0aGUgInJiciIgUkIgdHJlZS4KKyAqLworc3RydWN0IGVwaXRlbSB7CisJLyogUkIgdHJlZSBub2RlIHVzZWQgdG8gbGluayB0aGlzIHN0cnVjdHVyZSB0byB0aGUgZXZlbnRwb2xsIFJCIHRyZWUgKi8KKwlzdHJ1Y3QgcmJfbm9kZSByYm47CisKKwkvKiBMaXN0IGhlYWRlciB1c2VkIHRvIGxpbmsgdGhpcyBzdHJ1Y3R1cmUgdG8gdGhlIGV2ZW50cG9sbCByZWFkeSBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCByZGxsaW5rOworCisJLyoKKwkgKiBXb3JrcyB0b2dldGhlciAic3RydWN0IGV2ZW50cG9sbCItPm92Zmxpc3QgaW4ga2VlcGluZyB0aGUKKwkgKiBzaW5nbGUgbGlua2VkIGNoYWluIG9mIGl0ZW1zLgorCSAqLworCXN0cnVjdCBlcGl0ZW0gKm5leHQ7CisKKwkvKiBUaGUgZmlsZSBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIHRoaXMgaXRlbSByZWZlcnMgdG8gKi8KKwlzdHJ1Y3QgZXBvbGxfZmlsZWZkIGZmZDsKKworCS8qIE51bWJlciBvZiBhY3RpdmUgd2FpdCBxdWV1ZSBhdHRhY2hlZCB0byBwb2xsIG9wZXJhdGlvbnMgKi8KKwlpbnQgbndhaXQ7CisKKwkvKiBMaXN0IGNvbnRhaW5pbmcgcG9sbCB3YWl0IHF1ZXVlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgcHdxbGlzdDsKKworCS8qIFRoZSAiY29udGFpbmVyIiBvZiB0aGlzIGl0ZW0gKi8KKwlzdHJ1Y3QgZXZlbnRwb2xsICplcDsKKworCS8qIExpc3QgaGVhZGVyIHVzZWQgdG8gbGluayB0aGlzIGl0ZW0gdG8gdGhlICJzdHJ1Y3QgZmlsZSIgaXRlbXMgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZmxsaW5rOworCisJLyogVGhlIHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlIHRoZSBpbnRlcmVzdGVkIGV2ZW50cyBhbmQgdGhlIHNvdXJjZSBmZCAqLworCXN0cnVjdCBlcG9sbF9ldmVudCBldmVudDsKK307CisKKy8qCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyBzdG9yZWQgaW5zaWRlIHRoZSAicHJpdmF0ZV9kYXRhIiBtZW1iZXIgb2YgdGhlIGZpbGUKICAqIHN0cnVjdHVyZSBhbmQgcmFwcmVzZW50IHRoZSBtYWluIGRhdGEgc3J1Y3R1cmUgZm9yIHRoZSBldmVudHBvbGwKICAqIGludGVyZmFjZS4KICAqLwogc3RydWN0IGV2ZW50cG9sbCB7CiAJLyogUHJvdGVjdCB0aGUgdGhpcyBzdHJ1Y3R1cmUgYWNjZXNzICovCi0Jcndsb2NrX3QgbG9jazsKKwlzcGlubG9ja190IGxvY2s7CiAKIAkvKgotCSAqIFRoaXMgc2VtYXBob3JlIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgZmlsZXMgYXJlIG5vdCByZW1vdmVkCi0JICogd2hpbGUgZXBvbGwgaXMgdXNpbmcgdGhlbS4gVGhpcyBpcyByZWFkLWhlbGQgZHVyaW5nIHRoZSBldmVudAotCSAqIGNvbGxlY3Rpb24gbG9vcCBhbmQgaXQgaXMgd3JpdGUtaGVsZCBkdXJpbmcgdGhlIGZpbGUgY2xlYW51cAotCSAqIHBhdGgsIHRoZSBlcG9sbCBmaWxlIGV4aXQgY29kZSBhbmQgdGhlIGN0bCBvcGVyYXRpb25zLgorCSAqIFRoaXMgbXV0ZXggaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBmaWxlcyBhcmUgbm90IHJlbW92ZWQKKwkgKiB3aGlsZSBlcG9sbCBpcyB1c2luZyB0aGVtLiBUaGlzIGlzIGhlbGQgZHVyaW5nIHRoZSBldmVudAorCSAqIGNvbGxlY3Rpb24gbG9vcCwgdGhlIGZpbGUgY2xlYW51cCBwYXRoLCB0aGUgZXBvbGwgZmlsZSBleGl0CisJICogY29kZSBhbmQgdGhlIGN0bCBvcGVyYXRpb25zLgogCSAqLwotCXN0cnVjdCByd19zZW1hcGhvcmUgc2VtOworCXN0cnVjdCBtdXRleCBtdHg7CiAKIAkvKiBXYWl0IHF1ZXVlIHVzZWQgYnkgc3lzX2Vwb2xsX3dhaXQoKSAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdxOwpAQCAtMTYxLDggKzE5MSwxNSBAQAogCS8qIExpc3Qgb2YgcmVhZHkgZmlsZSBkZXNjcmlwdG9ycyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcmRsbGlzdDsKIAotCS8qIFJCLVRyZWUgcm9vdCB1c2VkIHRvIHN0b3JlIG1vbml0b3JlZCBmZCBzdHJ1Y3RzICovCisJLyogUkIgdHJlZSByb290IHVzZWQgdG8gc3RvcmUgbW9uaXRvcmVkIGZkIHN0cnVjdHMgKi8KIAlzdHJ1Y3QgcmJfcm9vdCByYnI7CisKKwkvKgorCSAqIFRoaXMgaXMgYSBzaW5nbGUgbGlua2VkIGxpc3QgdGhhdCBjaGFpbnMgYWxsIHRoZSAic3RydWN0IGVwaXRlbSIgdGhhdAorCSAqIGhhcHBlbmVkIHdoaWxlIHRyYW5zZmVyaW5nIHJlYWR5IGV2ZW50cyB0byB1c2Vyc3BhY2Ugdy9vdXQKKwkgKiBob2xkaW5nIC0+bG9jay4KKwkgKi8KKwlzdHJ1Y3QgZXBpdGVtICpvdmZsaXN0OwogfTsKIAogLyogV2FpdCBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgcG9sbCBob29rcyAqLwpAQCAtMTgzLDk5ICsyMjAsMTQgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQ7CiB9OwogCi0vKgotICogRWFjaCBmaWxlIGRlc2NyaXB0b3IgYWRkZWQgdG8gdGhlIGV2ZW50cG9sbCBpbnRlcmZhY2Ugd2lsbAotICogaGF2ZSBhbiBlbnRyeSBvZiB0aGlzIHR5cGUgbGlua2VkIHRvIHRoZSBoYXNoLgotICovCi1zdHJ1Y3QgZXBpdGVtIHsKLQkvKiBSQi1UcmVlIG5vZGUgdXNlZCB0byBsaW5rIHRoaXMgc3RydWN0dXJlIHRvIHRoZSBldmVudHBvbGwgcmItdHJlZSAqLwotCXN0cnVjdCByYl9ub2RlIHJibjsKLQotCS8qIExpc3QgaGVhZGVyIHVzZWQgdG8gbGluayB0aGlzIHN0cnVjdHVyZSB0byB0aGUgZXZlbnRwb2xsIHJlYWR5IGxpc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHJkbGxpbms7Ci0KLQkvKiBUaGUgZmlsZSBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIHRoaXMgaXRlbSByZWZlcnMgdG8gKi8KLQlzdHJ1Y3QgZXBvbGxfZmlsZWZkIGZmZDsKLQotCS8qIE51bWJlciBvZiBhY3RpdmUgd2FpdCBxdWV1ZSBhdHRhY2hlZCB0byBwb2xsIG9wZXJhdGlvbnMgKi8KLQlpbnQgbndhaXQ7Ci0KLQkvKiBMaXN0IGNvbnRhaW5pbmcgcG9sbCB3YWl0IHF1ZXVlcyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgcHdxbGlzdDsKLQotCS8qIFRoZSAiY29udGFpbmVyIiBvZiB0aGlzIGl0ZW0gKi8KLQlzdHJ1Y3QgZXZlbnRwb2xsICplcDsKLQotCS8qIFRoZSBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZSB0aGUgaW50ZXJlc3RlZCBldmVudHMgYW5kIHRoZSBzb3VyY2UgZmQgKi8KLQlzdHJ1Y3QgZXBvbGxfZXZlbnQgZXZlbnQ7Ci0KLQkvKgotCSAqIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgdXNhZ2UgY291bnQgb2YgdGhlIHN0cnVjdHVyZS4gVGhpcyBhdm9pZHMKLQkgKiB0aGF0IHRoZSBzdHJ1Y3R1cmUgd2lsbCBkZXNhcHBlYXIgZnJvbSB1bmRlcm5lYXRoIG91ciBwcm9jZXNzaW5nLgotCSAqLwotCWF0b21pY190IHVzZWNudDsKLQotCS8qIExpc3QgaGVhZGVyIHVzZWQgdG8gbGluayB0aGlzIGl0ZW0gdG8gdGhlICJzdHJ1Y3QgZmlsZSIgaXRlbXMgbGlzdCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgZmxsaW5rOwotCi0JLyogTGlzdCBoZWFkZXIgdXNlZCB0byBsaW5rIHRoZSBpdGVtIHRvIHRoZSB0cmFuc2ZlciBsaXN0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eGxpbms7Ci0KLQkvKgotCSAqIFRoaXMgaXMgdXNlZCBkdXJpbmcgdGhlIGNvbGxlY3Rpb24vdHJhbnNmZXIgb2YgZXZlbnRzIHRvIHVzZXJzcGFjZQotCSAqIHRvIHBpbiBpdGVtcyBlbXB0eSBldmVudHMgc2V0LgotCSAqLwotCXVuc2lnbmVkIGludCByZXZlbnRzOwotfTsKLQogLyogV3JhcHBlciBzdHJ1Y3QgdXNlZCBieSBwb2xsIHF1ZXVlaW5nICovCiBzdHJ1Y3QgZXBfcHF1ZXVlIHsKIAlwb2xsX3RhYmxlIHB0OwogCXN0cnVjdCBlcGl0ZW0gKmVwaTsKIH07CiAKLQotCi1zdGF0aWMgdm9pZCBlcF9wb2xsX3NhZmV3YWtlX2luaXQoc3RydWN0IHBvbGxfc2FmZXdha2UgKnBzdyk7Ci1zdGF0aWMgdm9pZCBlcF9wb2xsX3NhZmV3YWtlKHN0cnVjdCBwb2xsX3NhZmV3YWtlICpwc3csIHdhaXRfcXVldWVfaGVhZF90ICp3cSk7Ci1zdGF0aWMgaW50IGVwX2dldGZkKGludCAqZWZkLCBzdHJ1Y3QgaW5vZGUgKiplaW5vZGUsIHN0cnVjdCBmaWxlICoqZWZpbGUsCi0JCSAgICBzdHJ1Y3QgZXZlbnRwb2xsICplcCk7Ci1zdGF0aWMgaW50IGVwX2FsbG9jKHN0cnVjdCBldmVudHBvbGwgKipwZXApOwotc3RhdGljIHZvaWQgZXBfZnJlZShzdHJ1Y3QgZXZlbnRwb2xsICplcCk7Ci1zdGF0aWMgc3RydWN0IGVwaXRlbSAqZXBfZmluZChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBmZCk7Ci1zdGF0aWMgdm9pZCBlcF91c2VfZXBpdGVtKHN0cnVjdCBlcGl0ZW0gKmVwaSk7Ci1zdGF0aWMgdm9pZCBlcF9yZWxlYXNlX2VwaXRlbShzdHJ1Y3QgZXBpdGVtICplcGkpOwotc3RhdGljIHZvaWQgZXBfcHRhYmxlX3F1ZXVlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsIHdhaXRfcXVldWVfaGVhZF90ICp3aGVhZCwKLQkJCQkgcG9sbF90YWJsZSAqcHQpOwotc3RhdGljIHZvaWQgZXBfcmJ0cmVlX2luc2VydChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpKTsKLXN0YXRpYyBpbnQgZXBfaW5zZXJ0KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmV2ZW50LAotCQkgICAgIHN0cnVjdCBmaWxlICp0ZmlsZSwgaW50IGZkKTsKLXN0YXRpYyBpbnQgZXBfbW9kaWZ5KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksCi0JCSAgICAgc3RydWN0IGVwb2xsX2V2ZW50ICpldmVudCk7Ci1zdGF0aWMgdm9pZCBlcF91bnJlZ2lzdGVyX3BvbGx3YWl0KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGkpOwotc3RhdGljIGludCBlcF91bmxpbmsoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSk7Ci1zdGF0aWMgaW50IGVwX3JlbW92ZShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpKTsKLXN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpOwotc3RhdGljIGludCBlcF9ldmVudHBvbGxfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHVuc2lnbmVkIGludCBlcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCk7Ci1zdGF0aWMgaW50IGVwX2NvbGxlY3RfcmVhZHlfaXRlbXMoc3RydWN0IGV2ZW50cG9sbCAqZXAsCi0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICp0eGxpc3QsIGludCBtYXhldmVudHMpOwotc3RhdGljIGludCBlcF9zZW5kX2V2ZW50cyhzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGxpc3RfaGVhZCAqdHhsaXN0LAotCQkJICBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMpOwotc3RhdGljIHZvaWQgZXBfcmVpbmplY3RfaXRlbXMoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBsaXN0X2hlYWQgKnR4bGlzdCk7Ci1zdGF0aWMgaW50IGVwX2V2ZW50c190cmFuc2ZlcihzdHJ1Y3QgZXZlbnRwb2xsICplcCwKLQkJCSAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cywKLQkJCSAgICAgIGludCBtYXhldmVudHMpOwotc3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsCi0JCSAgIGludCBtYXhldmVudHMsIGxvbmcgdGltZW91dCk7Ci1zdGF0aWMgaW50IGV2ZW50cG9sbGZzX2RlbGV0ZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmVwX2V2ZW50cG9sbF9pbm9kZSh2b2lkKTsKLXN0YXRpYyBpbnQgZXZlbnRwb2xsZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAotCQkJICAgICAgaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwKLQkJCSAgICAgIHZvaWQgKmRhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKLQogLyoKLSAqIFRoaXMgc2VtYXBob3JlIGlzIHVzZWQgdG8gc2VyaWFsaXplIGVwX2ZyZWUoKSBhbmQgZXZlbnRwb2xsX3JlbGVhc2VfZmlsZSgpLgorICogVGhpcyBtdXRleCBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBlcF9mcmVlKCkgYW5kIGV2ZW50cG9sbF9yZWxlYXNlX2ZpbGUoKS4KICAqLwogc3RhdGljIHN0cnVjdCBtdXRleCBlcG11dGV4OwogCkBAIC0yODgsMzkgKzI0MCw4IEBACiAvKiBTbGFiIGNhY2hlIHVzZWQgdG8gYWxsb2NhdGUgInN0cnVjdCBlcHBvbGxfZW50cnkiICovCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnB3cV9jYWNoZSBfX3JlYWRfbW9zdGx5OwogCi0vKiBWaXJ0dWFsIGZzIHVzZWQgdG8gYWxsb2NhdGUgaW5vZGVzIGZvciBldmVudHBvbGwgZmlsZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmV2ZW50cG9sbF9tbnQgX19yZWFkX21vc3RseTsKIAotLyogRmlsZSBjYWxsYmFja3MgdGhhdCBpbXBsZW1lbnQgdGhlIGV2ZW50cG9sbCBmaWxlIGJlaGF2aW91ciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXZlbnRwb2xsX2ZvcHMgPSB7Ci0JLnJlbGVhc2UJPSBlcF9ldmVudHBvbGxfY2xvc2UsCi0JLnBvbGwJCT0gZXBfZXZlbnRwb2xsX3BvbGwKLX07Ci0KLS8qCi0gKiBUaGlzIGlzIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIHZpcnR1YWwgZmlsZSBzeXN0ZW0gZnJvbSB3aGVyZQotICogZXZlbnRwb2xsIGlub2RlcyBhcmUgYWxsb2NhdGVkLgotICovCi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXZlbnRwb2xsX2ZzX3R5cGUgPSB7Ci0JLm5hbWUJCT0gImV2ZW50cG9sbGZzIiwKLQkuZ2V0X3NiCQk9IGV2ZW50cG9sbGZzX2dldF9zYiwKLQkua2lsbF9zYgk9IGtpbGxfYW5vbl9zdXBlciwKLX07Ci0KLS8qIFZlcnkgYmFzaWMgZGlyZWN0b3J5IGVudHJ5IG9wZXJhdGlvbnMgZm9yIHRoZSBldmVudHBvbGwgdmlydHVhbCBmaWxlIHN5c3RlbSAqLwotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBldmVudHBvbGxmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKLQkuZF9kZWxldGUJPSBldmVudHBvbGxmc19kZWxldGVfZGVudHJ5LAotfTsKLQotCi0KLS8qIEZhc3QgdGVzdCB0byBzZWUgaWYgdGhlIGZpbGUgaXMgYW4gZXZlbnBvbGwgZmlsZSAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfZmlsZV9lcG9sbChzdHJ1Y3QgZmlsZSAqZikKLXsKLQlyZXR1cm4gZi0+Zl9vcCA9PSAmZXZlbnRwb2xsX2ZvcHM7Ci19Ci0KLS8qIFNldHVwIHRoZSBzdHJ1Y3R1cmUgdGhhdCBpcyB1c2VkIGFzIGtleSBmb3IgdGhlIHJiLXRyZWUgKi8KKy8qIFNldHVwIHRoZSBzdHJ1Y3R1cmUgdGhhdCBpcyB1c2VkIGFzIGtleSBmb3IgdGhlIFJCIHRyZWUgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBlcF9zZXRfZmZkKHN0cnVjdCBlcG9sbF9maWxlZmQgKmZmZCwKIAkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZmQpCiB7CkBAIC0zMjgsNyArMjQ5LDcgQEAKIAlmZmQtPmZkID0gZmQ7CiB9CiAKLS8qIENvbXBhcmUgcmItdHJlZSBrZXlzICovCisvKiBDb21wYXJlIFJCIHRyZWUga2V5cyAqLwogc3RhdGljIGlubGluZSBpbnQgZXBfY21wX2ZmZChzdHJ1Y3QgZXBvbGxfZmlsZWZkICpwMSwKIAkJCSAgICAgc3RydWN0IGVwb2xsX2ZpbGVmZCAqcDIpCiB7CkBAIC0zMzYsMzYgKzI1NywyNSBAQAogCSAgICAgICAgKHAxLT5maWxlIDwgcDItPmZpbGUgPyAtMSA6IHAxLT5mZCAtIHAyLT5mZCkpOwogfQogCi0vKiBTcGVjaWFsIGluaXRpYWxpemF0aW9uIGZvciB0aGUgcmItdHJlZSBub2RlIHRvIGRldGVjdCBsaW5rYWdlICovCisvKiBTcGVjaWFsIGluaXRpYWxpemF0aW9uIGZvciB0aGUgUkIgdHJlZSBub2RlIHRvIGRldGVjdCBsaW5rYWdlICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZXBfcmJfaW5pdG5vZGUoc3RydWN0IHJiX25vZGUgKm4pCiB7CiAJcmJfc2V0X3BhcmVudChuLCBuKTsKIH0KIAotLyogUmVtb3ZlcyBhIG5vZGUgZnJvbSB0aGUgcmItdHJlZSBhbmQgbWFya3MgaXQgZm9yIGEgZmFzdCBpcy1saW5rZWQgY2hlY2sgKi8KKy8qIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIFJCIHRyZWUgYW5kIG1hcmtzIGl0IGZvciBhIGZhc3QgaXMtbGlua2VkIGNoZWNrICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZXBfcmJfZXJhc2Uoc3RydWN0IHJiX25vZGUgKm4sIHN0cnVjdCByYl9yb290ICpyKQogewogCXJiX2VyYXNlKG4sIHIpOwogCXJiX3NldF9wYXJlbnQobiwgbik7CiB9CiAKLS8qIEZhc3QgY2hlY2sgdG8gdmVyaWZ5IHRoYXQgdGhlIGl0ZW0gaXMgbGlua2VkIHRvIHRoZSBtYWluIHJiLXRyZWUgKi8KKy8qIEZhc3QgY2hlY2sgdG8gdmVyaWZ5IHRoYXQgdGhlIGl0ZW0gaXMgbGlua2VkIHRvIHRoZSBtYWluIFJCIHRyZWUgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGVwX3JiX2xpbmtlZChzdHJ1Y3QgcmJfbm9kZSAqbikKIHsKIAlyZXR1cm4gcmJfcGFyZW50KG4pICE9IG47CiB9CiAKLS8qCi0gKiBSZW1vdmUgdGhlIGl0ZW0gZnJvbSB0aGUgbGlzdCBhbmQgcGVyZm9ybSBpdHMgaW5pdGlhbGl6YXRpb24uCi0gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgdXMgYmVjYXVzZSB3ZSBjYW4gdGVzdCBpZiB0aGUgaXRlbSBpcyBsaW5rZWQKLSAqIHVzaW5nICJlcF9pc19saW5rZWQocCkiLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZXBfbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqcCkKLXsKLQlsaXN0X2RlbChwKTsKLQlJTklUX0xJU1RfSEVBRChwKTsKLX0KLQogLyogVGVsbHMgdXMgaWYgdGhlIGl0ZW0gaXMgY3VycmVudGx5IGxpbmtlZCAqLwogc3RhdGljIGlubGluZSBpbnQgZXBfaXNfbGlua2VkKHN0cnVjdCBsaXN0X2hlYWQgKnApCiB7CkBAIC0zODUsNyArMjk1LDcgQEAKIH0KIAogLyogVGVsbHMgaWYgdGhlIGVwb2xsX2N0bCgyKSBvcGVyYXRpb24gbmVlZHMgYW4gZXZlbnQgY29weSBmcm9tIHVzZXJzcGFjZSAqLwotc3RhdGljIGlubGluZSBpbnQgZXBfb3BfaGFzaF9ldmVudChpbnQgb3ApCitzdGF0aWMgaW5saW5lIGludCBlcF9vcF9oYXNfZXZlbnQoaW50IG9wKQogewogCXJldHVybiBvcCAhPSBFUE9MTF9DVExfREVMOwogfQpAQCAtMzk4LDcgKzMwOCw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJnBzdy0+bG9jayk7CiB9CiAKLQogLyoKICAqIFBlcmZvcm0gYSBzYWZlIHdha2UgdXAgb2YgdGhlIHBvbGwgd2FpdCBsaXN0LiBUaGUgcHJvYmxlbSBpcyB0aGF0CiAgKiB3aXRoIHRoZSBuZXcgY2FsbGJhY2snZCB3YWtlIHVwIHN5c3RlbSwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUKQEAgLTQ1Myw2ICszNjIsMTU3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHN3LT5sb2NrLCBmbGFncyk7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXIgcG9sbCBjYWxsYmFja3MgZnJvbSB0aGUgYXNzb2NpYXRlZCBmaWxlIGRlc2NyaXB0b3IuCisgKiBTaW5jZSB0aGlzIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgaG9sZGluZyAiZXAtPmxvY2siIHRoZSBhdG9taWMgZXhjaGFuZ2UgdHJpY2sKKyAqIHdpbGwgcHJvdGVjdCB1cyBmcm9tIG11bHRpcGxlIHVucmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSkKK3sKKwlpbnQgbndhaXQ7CisJc3RydWN0IGxpc3RfaGVhZCAqbHN0aGVhZCA9ICZlcGktPnB3cWxpc3Q7CisJc3RydWN0IGVwcG9sbF9lbnRyeSAqcHdxOworCisJLyogVGhpcyBpcyBjYWxsZWQgd2l0aG91dCBsb2Nrcywgc28gd2UgbmVlZCB0aGUgYXRvbWljIGV4Y2hhbmdlICovCisJbndhaXQgPSB4Y2hnKCZlcGktPm53YWl0LCAwKTsKKworCWlmIChud2FpdCkgeworCQl3aGlsZSAoIWxpc3RfZW1wdHkobHN0aGVhZCkpIHsKKwkJCXB3cSA9IGxpc3RfZmlyc3RfZW50cnkobHN0aGVhZCwgc3RydWN0IGVwcG9sbF9lbnRyeSwgbGxpbmspOworCisJCQlsaXN0X2RlbF9pbml0KCZwd3EtPmxsaW5rKTsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKHB3cS0+d2hlYWQsICZwd3EtPndhaXQpOworCQkJa21lbV9jYWNoZV9mcmVlKHB3cV9jYWNoZSwgcHdxKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFJlbW92ZXMgYSAic3RydWN0IGVwaXRlbSIgZnJvbSB0aGUgZXZlbnRwb2xsIFJCIHRyZWUgYW5kIGRlYWxsb2NhdGVzCisgKiBhbGwgdGhlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBNdXN0IGJlIGNhbGxlZCB3aXRoICJtdHgiIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQgZXBfcmVtb3ZlKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGVwaS0+ZmZkLmZpbGU7CisKKwkvKgorCSAqIFJlbW92ZXMgcG9sbCB3YWl0IHF1ZXVlIGhvb2tzLiBXZSBfaGF2ZV8gdG8gZG8gdGhpcyB3aXRob3V0IGhvbGRpbmcKKwkgKiB0aGUgImVwLT5sb2NrIiBvdGhlcndpc2UgYSBkZWFkbG9jayBtaWdodCBvY2N1ci4gVGhpcyBiZWNhdXNlIG9mIHRoZQorCSAqIHNlcXVlbmNlIG9mIHRoZSBsb2NrIGFjcXVpc2l0aW9uLiBIZXJlIHdlIGRvICJlcC0+bG9jayIgdGhlbiB0aGUgd2FpdAorCSAqIHF1ZXVlIGhlYWQgbG9jayB3aGVuIHVucmVnaXN0ZXJpbmcgdGhlIHdhaXQgcXVldWUuIFRoZSB3YWtldXAgY2FsbGJhY2sKKwkgKiB3aWxsIHJ1biBieSBob2xkaW5nIHRoZSB3YWl0IHF1ZXVlIGhlYWQgbG9jayBhbmQgd2lsbCBjYWxsIG91ciBjYWxsYmFjaworCSAqIHRoYXQgd2lsbCB0cnkgdG8gZ2V0ICJlcC0+bG9jayIuCisJICovCisJZXBfdW5yZWdpc3Rlcl9wb2xsd2FpdChlcCwgZXBpKTsKKworCS8qIFJlbW92ZSB0aGUgY3VycmVudCBpdGVtIGZyb20gdGhlIGxpc3Qgb2YgZXBvbGwgaG9va3MgKi8KKwlzcGluX2xvY2soJmZpbGUtPmZfZXBfbG9jayk7CisJaWYgKGVwX2lzX2xpbmtlZCgmZXBpLT5mbGxpbmspKQorCQlsaXN0X2RlbF9pbml0KCZlcGktPmZsbGluayk7CisJc3Bpbl91bmxvY2soJmZpbGUtPmZfZXBfbG9jayk7CisKKwlpZiAoZXBfcmJfbGlua2VkKCZlcGktPnJibikpCisJCWVwX3JiX2VyYXNlKCZlcGktPnJibiwgJmVwLT5yYnIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CisJaWYgKGVwX2lzX2xpbmtlZCgmZXBpLT5yZGxsaW5rKSkKKwkJbGlzdF9kZWxfaW5pdCgmZXBpLT5yZGxsaW5rKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOworCisJLyogQXQgdGhpcyBwb2ludCBpdCBpcyBzYWZlIHRvIGZyZWUgdGhlIGV2ZW50cG9sbCBpdGVtICovCisJa21lbV9jYWNoZV9mcmVlKGVwaV9jYWNoZSwgZXBpKTsKKworCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBlcF9yZW1vdmUoJXAsICVwKVxuIiwKKwkJICAgICBjdXJyZW50LCBlcCwgZmlsZSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVwX2ZyZWUoc3RydWN0IGV2ZW50cG9sbCAqZXApCit7CisJc3RydWN0IHJiX25vZGUgKnJicDsKKwlzdHJ1Y3QgZXBpdGVtICplcGk7CisKKwkvKiBXZSBuZWVkIHRvIHJlbGVhc2UgYWxsIHRhc2tzIHdhaXRpbmcgZm9yIHRoZXNlIGZpbGUgKi8KKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPnBvbGxfd2FpdCkpCisJCWVwX3BvbGxfc2FmZXdha2UoJnBzdywgJmVwLT5wb2xsX3dhaXQpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIGxvY2sgdGhpcyBiZWNhdXNlIHdlIGNvdWxkIGJlIGhpdCBieQorCSAqIGV2ZW50cG9sbF9yZWxlYXNlX2ZpbGUoKSB3aGlsZSB3ZSdyZSBmcmVlaW5nIHRoZSAic3RydWN0IGV2ZW50cG9sbCIuCisJICogV2UgZG8gbm90IG5lZWQgdG8gaG9sZCAiZXAtPm10eCIgaGVyZSBiZWNhdXNlIHRoZSBlcG9sbCBmaWxlCisJICogaXMgb24gdGhlIHdheSB0byBiZSByZW1vdmVkIGFuZCBubyBvbmUgaGFzIHJlZmVyZW5jZXMgdG8gaXQKKwkgKiBhbnltb3JlLiBUaGUgb25seSBoaXQgbWlnaHQgY29tZSBmcm9tIGV2ZW50cG9sbF9yZWxlYXNlX2ZpbGUoKSBidXQKKwkgKiBob2xkaW5nICJlcG11dGV4IiBpcyBzdWZmaWNlbnQgaGVyZS4KKwkgKi8KKwltdXRleF9sb2NrKCZlcG11dGV4KTsKKworCS8qCisJICogV2Fsa3MgdGhyb3VnaCB0aGUgd2hvbGUgdHJlZSBieSB1bnJlZ2lzdGVyaW5nIHBvbGwgY2FsbGJhY2tzLgorCSAqLworCWZvciAocmJwID0gcmJfZmlyc3QoJmVwLT5yYnIpOyByYnA7IHJicCA9IHJiX25leHQocmJwKSkgeworCQllcGkgPSByYl9lbnRyeShyYnAsIHN0cnVjdCBlcGl0ZW0sIHJibik7CisKKwkJZXBfdW5yZWdpc3Rlcl9wb2xsd2FpdChlcCwgZXBpKTsKKwl9CisKKwkvKgorCSAqIFdhbGtzIHRocm91Z2ggdGhlIHdob2xlIHRyZWUgYnkgZnJlZWluZyBlYWNoICJzdHJ1Y3QgZXBpdGVtIi4gQXQgdGhpcworCSAqIHBvaW50IHdlIGFyZSBzdXJlIG5vIHBvbGwgY2FsbGJhY2tzIHdpbGwgYmUgbGluZ2VyaW5nIGFyb3VuZCwgYW5kIGFsc28gYnkKKwkgKiBob2xkaW5nICJlcG11dGV4IiB3ZSBjYW4gYmUgc3VyZSB0aGF0IG5vIGZpbGUgY2xlYW51cCBjb2RlIHdpbGwgaGl0CisJICogdXMgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLiBTbyB3ZSBjYW4gYXZvaWQgdGhlIGxvY2sgb24gImVwLT5sb2NrIi4KKwkgKi8KKwl3aGlsZSAoKHJicCA9IHJiX2ZpcnN0KCZlcC0+cmJyKSkgIT0gMCkgeworCQllcGkgPSByYl9lbnRyeShyYnAsIHN0cnVjdCBlcGl0ZW0sIHJibik7CisJCWVwX3JlbW92ZShlcCwgZXBpKTsKKwl9CisKKwltdXRleF91bmxvY2soJmVwbXV0ZXgpOworCW11dGV4X2Rlc3Ryb3koJmVwLT5tdHgpOworCWtmcmVlKGVwKTsKK30KKworc3RhdGljIGludCBlcF9ldmVudHBvbGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZXZlbnRwb2xsICplcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChlcCkKKwkJZXBfZnJlZShlcCk7CisKKwlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogY2xvc2UoKSBlcD0lcFxuIiwgY3VycmVudCwgZXApKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBlcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwl1bnNpZ25lZCBpbnQgcG9sbGZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBldmVudHBvbGwgKmVwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJLyogSW5zZXJ0IGluc2lkZSBvdXIgcG9sbCB3YWl0IHF1ZXVlICovCisJcG9sbF93YWl0KGZpbGUsICZlcC0+cG9sbF93YWl0LCB3YWl0KTsKKworCS8qIENoZWNrIG91ciBjb25kaXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmVwLT5yZGxsaXN0KSkKKwkJcG9sbGZsYWdzID0gUE9MTElOIHwgUE9MTFJETk9STTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHBvbGxmbGFnczsKK30KKworLyogRmlsZSBjYWxsYmFja3MgdGhhdCBpbXBsZW1lbnQgdGhlIGV2ZW50cG9sbCBmaWxlIGJlaGF2aW91ciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXZlbnRwb2xsX2ZvcHMgPSB7CisJLnJlbGVhc2UJPSBlcF9ldmVudHBvbGxfcmVsZWFzZSwKKwkucG9sbAkJPSBlcF9ldmVudHBvbGxfcG9sbAorfTsKKworLyogRmFzdCB0ZXN0IHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBhbiBldmVucG9sbCBmaWxlICovCitzdGF0aWMgaW5saW5lIGludCBpc19maWxlX2Vwb2xsKHN0cnVjdCBmaWxlICpmKQoreworCXJldHVybiBmLT5mX29wID09ICZldmVudHBvbGxfZm9wczsKK30KIAogLyoKICAqIFRoaXMgaXMgY2FsbGVkIGZyb20gZXZlbnRwb2xsX3JlbGVhc2UoKSB0byB1bmxpbmsgZmlsZXMgZnJvbSB0aGUgZXZlbnRwb2xsCkBAIC00NjksMzMgKzUyOSw1NDcgQEAKIAkgKiBXZSBkb24ndCB3YW50IHRvIGdldCAiZmlsZS0+Zl9lcF9sb2NrIiBiZWNhdXNlIGl0IGlzIG5vdAogCSAqIG5lY2Vzc2FyeS4gSXQgaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHdlJ3JlIGluIHRoZSAic3RydWN0IGZpbGUiCiAJICogY2xlYW51cCBwYXRoLCBhbmQgdGhpcyBtZWFucyB0aGF0IG5vb25lIGlzIHVzaW5nIHRoaXMgZmlsZSBhbnltb3JlLgotCSAqIFRoZSBvbmx5IGhpdCBtaWdodCBjb21lIGZyb20gZXBfZnJlZSgpIGJ1dCBieSBob2xkaW5nIHRoZSBzZW1hcGhvcmUKKwkgKiBTbywgZm9yIGV4YW1wbGUsIGVwb2xsX2N0bCgpIGNhbm5vdCBoaXQgaGVyZSBzaWNuZSBpZiB3ZSByZWFjaCB0aGlzCisJICogcG9pbnQsIHRoZSBmaWxlIGNvdW50ZXIgYWxyZWFkeSB3ZW50IHRvIHplcm8gYW5kIGZnZXQoKSB3b3VsZCBmYWlsLgorCSAqIFRoZSBvbmx5IGhpdCBtaWdodCBjb21lIGZyb20gZXBfZnJlZSgpIGJ1dCBieSBob2xkaW5nIHRoZSBtdXRleAogCSAqIHdpbGwgY29ycmVjdGx5IHNlcmlhbGl6ZSB0aGUgb3BlcmF0aW9uLiBXZSBkbyBuZWVkIHRvIGFjcXVpcmUKLQkgKiAiZXAtPnNlbSIgYWZ0ZXIgImVwbXV0ZXgiIGJlY2F1c2UgZXBfcmVtb3ZlKCkgcmVxdWlyZXMgaXQgd2hlbiBjYWxsZWQKKwkgKiAiZXAtPm10eCIgYWZ0ZXIgImVwbXV0ZXgiIGJlY2F1c2UgZXBfcmVtb3ZlKCkgcmVxdWlyZXMgaXQgd2hlbiBjYWxsZWQKIAkgKiBmcm9tIGFueXdoZXJlIGJ1dCBlcF9mcmVlKCkuCiAJICovCiAJbXV0ZXhfbG9jaygmZXBtdXRleCk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkobHN0aGVhZCkpIHsKLQkJZXBpID0gbGlzdF9lbnRyeShsc3RoZWFkLT5uZXh0LCBzdHJ1Y3QgZXBpdGVtLCBmbGxpbmspOworCQllcGkgPSBsaXN0X2ZpcnN0X2VudHJ5KGxzdGhlYWQsIHN0cnVjdCBlcGl0ZW0sIGZsbGluayk7CiAKIAkJZXAgPSBlcGktPmVwOwotCQllcF9saXN0X2RlbCgmZXBpLT5mbGxpbmspOwotCQlkb3duX3dyaXRlKCZlcC0+c2VtKTsKKwkJbGlzdF9kZWxfaW5pdCgmZXBpLT5mbGxpbmspOworCQltdXRleF9sb2NrKCZlcC0+bXR4KTsKIAkJZXBfcmVtb3ZlKGVwLCBlcGkpOwotCQl1cF93cml0ZSgmZXAtPnNlbSk7CisJCW11dGV4X3VubG9jaygmZXAtPm10eCk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZlcG11dGV4KTsKIH0KIAorc3RhdGljIGludCBlcF9hbGxvYyhzdHJ1Y3QgZXZlbnRwb2xsICoqcGVwKQoreworCXN0cnVjdCBldmVudHBvbGwgKmVwID0ga3phbGxvYyhzaXplb2YoKmVwKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWVwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pbml0KCZlcC0+bG9jayk7CisJbXV0ZXhfaW5pdCgmZXAtPm10eCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZXAtPndxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlcC0+cG9sbF93YWl0KTsKKwlJTklUX0xJU1RfSEVBRCgmZXAtPnJkbGxpc3QpOworCWVwLT5yYnIgPSBSQl9ST09UOworCWVwLT5vdmZsaXN0ID0gRVBfVU5BQ1RJVkVfUFRSOworCisJKnBlcCA9IGVwOworCisJRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGVwX2FsbG9jKCkgZXA9JXBcbiIsCisJCSAgICAgY3VycmVudCwgZXApKTsKKwlyZXR1cm4gMDsKK30KIAogLyoKLSAqIEl0IG9wZW5zIGFuIGV2ZW50cG9sbCBmaWxlIGRlc2NyaXB0b3IgYnkgc3VnZ2VzdGluZyBhIHN0b3JhZ2Ugb2YgInNpemUiCi0gKiBmaWxlIGRlc2NyaXB0b3JzLiBUaGUgc2l6ZSBwYXJhbWV0ZXIgaXMganVzdCBhbiBoaW50IGFib3V0IGhvdyB0byBzaXplCi0gKiBkYXRhIHN0cnVjdHVyZXMuIEl0IHdvbid0IHByZXZlbnQgdGhlIHVzZXIgdG8gc3RvcmUgbW9yZSB0aGFuICJzaXplIgotICogZmlsZSBkZXNjcmlwdG9ycyBpbnNpZGUgdGhlIGVwb2xsIGludGVyZmFjZS4gSXQgaXMgdGhlIGtlcm5lbCBwYXJ0IG9mCi0gKiB0aGUgdXNlcnNwYWNlIGVwb2xsX2NyZWF0ZSgyKS4KKyAqIFNlYXJjaCB0aGUgZmlsZSBpbnNpZGUgdGhlIGV2ZW50cG9sbCB0cmVlLiBUaGUgUkIgdHJlZSBvcGVyYXRpb25zCisgKiBhcmUgcHJvdGVjdGVkIGJ5IHRoZSAibXR4IiBtdXRleCwgYW5kIGVwX2ZpbmQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoCisgKiAibXR4IiBoZWxkLgorICovCitzdGF0aWMgc3RydWN0IGVwaXRlbSAqZXBfZmluZChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBmZCkKK3sKKwlpbnQga2NtcDsKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJwOworCXN0cnVjdCBlcGl0ZW0gKmVwaSwgKmVwaXIgPSBOVUxMOworCXN0cnVjdCBlcG9sbF9maWxlZmQgZmZkOworCisJZXBfc2V0X2ZmZCgmZmZkLCBmaWxlLCBmZCk7CisJZm9yIChyYnAgPSBlcC0+cmJyLnJiX25vZGU7IHJicDsgKSB7CisJCWVwaSA9IHJiX2VudHJ5KHJicCwgc3RydWN0IGVwaXRlbSwgcmJuKTsKKwkJa2NtcCA9IGVwX2NtcF9mZmQoJmZmZCwgJmVwaS0+ZmZkKTsKKwkJaWYgKGtjbXAgPiAwKQorCQkJcmJwID0gcmJwLT5yYl9yaWdodDsKKwkJZWxzZSBpZiAoa2NtcCA8IDApCisJCQlyYnAgPSByYnAtPnJiX2xlZnQ7CisJCWVsc2UgeworCQkJZXBpciA9IGVwaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGVwX2ZpbmQoJXApIC0+ICVwXG4iLAorCQkgICAgIGN1cnJlbnQsIGZpbGUsIGVwaXIpKTsKKworCXJldHVybiBlcGlyOworfQorCisvKgorICogVGhpcyBpcyB0aGUgY2FsbGJhY2sgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHdhaXQgcXVldWUgd2FrZXVwCisgKiBtYWNoYW5pc20uIEl0IGlzIGNhbGxlZCBieSB0aGUgc3RvcmVkIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiB0aGV5CisgKiBoYXZlIGV2ZW50cyB0byByZXBvcnQuCisgKi8KK3N0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpCit7CisJaW50IHB3YWtlID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBlcGl0ZW0gKmVwaSA9IGVwX2l0ZW1fZnJvbV93YWl0KHdhaXQpOworCXN0cnVjdCBldmVudHBvbGwgKmVwID0gZXBpLT5lcDsKKworCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBwb2xsX2NhbGxiYWNrKCVwKSBlcGk9JXAgZXA9JXBcbiIsCisJCSAgICAgY3VycmVudCwgZXBpLT5mZmQuZmlsZSwgZXBpLCBlcCkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIElmIHRoZSBldmVudCBtYXNrIGRvZXMgbm90IGNvbnRhaW4gYW55IHBvbGwoMikgZXZlbnQsIHdlIGNvbnNpZGVyIHRoZQorCSAqIGRlc2NyaXB0b3IgdG8gYmUgZGlzYWJsZWQuIFRoaXMgY29uZGl0aW9uIGlzIGxpa2VseSB0aGUgZWZmZWN0IG9mIHRoZQorCSAqIEVQT0xMT05FU0hPVCBiaXQgdGhhdCBkaXNhYmxlcyB0aGUgZGVzY3JpcHRvciB3aGVuIGFuIGV2ZW50IGlzIHJlY2VpdmVkLAorCSAqIHVudGlsIHRoZSBuZXh0IEVQT0xMX0NUTF9NT0Qgd2lsbCBiZSBpc3N1ZWQuCisJICovCisJaWYgKCEoZXBpLT5ldmVudC5ldmVudHMgJiB+RVBfUFJJVkFURV9CSVRTKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgdHJhc2ZlcmluZyBldmVudHMgdG8gdXNlcnNwYWNlLCB3ZSBjYW4gaG9sZCBubyBsb2NrcworCSAqIChiZWNhdXNlIHdlJ3JlIGFjY2Vzc2luZyB1c2VyIG1lbW9yeSwgYW5kIGJlY2F1c2Ugb2YgbGludXggZl9vcC0+cG9sbCgpCisJICogc2VtYW50aWNzKS4gQWxsIHRoZSBldmVudHMgdGhhdCBoYXBwZW5zIGR1cmluZyB0aGF0IHBlcmlvZCBvZiB0aW1lIGFyZQorCSAqIGNoYWluZWQgaW4gZXAtPm92Zmxpc3QgYW5kIHJlcXVldWVkIGxhdGVyIG9uLgorCSAqLworCWlmICh1bmxpa2VseShlcC0+b3ZmbGlzdCAhPSBFUF9VTkFDVElWRV9QVFIpKSB7CisJCWlmIChlcGktPm5leHQgPT0gRVBfVU5BQ1RJVkVfUFRSKSB7CisJCQllcGktPm5leHQgPSBlcC0+b3ZmbGlzdDsKKwkJCWVwLT5vdmZsaXN0ID0gZXBpOworCQl9CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwkvKiBJZiB0aGlzIGZpbGUgaXMgYWxyZWFkeSBpbiB0aGUgcmVhZHkgbGlzdCB3ZSBleGl0IHNvb24gKi8KKwlpZiAoZXBfaXNfbGlua2VkKCZlcGktPnJkbGxpbmspKQorCQlnb3RvIGlzX2xpbmtlZDsKKworCWxpc3RfYWRkX3RhaWwoJmVwaS0+cmRsbGluaywgJmVwLT5yZGxsaXN0KTsKKworaXNfbGlua2VkOgorCS8qCisJICogV2FrZSB1cCAoIGlmIGFjdGl2ZSApIGJvdGggdGhlIGV2ZW50cG9sbCB3YWl0IGxpc3QgYW5kIHRoZSAtPnBvbGwoKQorCSAqIHdhaXQgbGlzdC4KKwkgKi8KKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPndxKSkKKwkJX193YWtlX3VwX2xvY2tlZCgmZXAtPndxLCBUQVNLX1VOSU5URVJSVVBUSUJMRSB8CisJCQkJIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmVwLT5wb2xsX3dhaXQpKQorCQlwd2FrZSsrOworCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CisKKwkvKiBXZSBoYXZlIHRvIGNhbGwgdGhpcyBvdXRzaWRlIHRoZSBsb2NrICovCisJaWYgKHB3YWtlKQorCQllcF9wb2xsX3NhZmV3YWtlKCZwc3csICZlcC0+cG9sbF93YWl0KTsKKworCXJldHVybiAxOworfQorCisvKgorICogVGhpcyBpcyB0aGUgY2FsbGJhY2sgdGhhdCBpcyB1c2VkIHRvIGFkZCBvdXIgd2FpdCBxdWV1ZSB0byB0aGUKKyAqIHRhcmdldCBmaWxlIHdha2V1cCBsaXN0cy4KKyAqLworc3RhdGljIHZvaWQgZXBfcHRhYmxlX3F1ZXVlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsIHdhaXRfcXVldWVfaGVhZF90ICp3aGVhZCwKKwkJCQkgcG9sbF90YWJsZSAqcHQpCit7CisJc3RydWN0IGVwaXRlbSAqZXBpID0gZXBfaXRlbV9mcm9tX2VwcXVldWUocHQpOworCXN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cTsKKworCWlmIChlcGktPm53YWl0ID49IDAgJiYgKHB3cSA9IGttZW1fY2FjaGVfYWxsb2MocHdxX2NhY2hlLCBHRlBfS0VSTkVMKSkpIHsKKwkJaW5pdF93YWl0cXVldWVfZnVuY19lbnRyeSgmcHdxLT53YWl0LCBlcF9wb2xsX2NhbGxiYWNrKTsKKwkJcHdxLT53aGVhZCA9IHdoZWFkOworCQlwd3EtPmJhc2UgPSBlcGk7CisJCWFkZF93YWl0X3F1ZXVlKHdoZWFkLCAmcHdxLT53YWl0KTsKKwkJbGlzdF9hZGRfdGFpbCgmcHdxLT5sbGluaywgJmVwaS0+cHdxbGlzdCk7CisJCWVwaS0+bndhaXQrKzsKKwl9IGVsc2UgeworCQkvKiBXZSBoYXZlIHRvIHNpZ25hbCB0aGF0IGFuIGVycm9yIG9jY3VycmVkICovCisJCWVwaS0+bndhaXQgPSAtMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVwX3JidHJlZV9pbnNlcnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSkKK3sKKwlpbnQga2NtcDsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmZXAtPnJici5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgZXBpdGVtICplcGljOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQllcGljID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgZXBpdGVtLCByYm4pOworCQlrY21wID0gZXBfY21wX2ZmZCgmZXBpLT5mZmQsICZlcGljLT5mZmQpOworCQlpZiAoa2NtcCA+IDApCisJCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXAgPSAmcGFyZW50LT5yYl9sZWZ0OworCX0KKwlyYl9saW5rX25vZGUoJmVwaS0+cmJuLCBwYXJlbnQsIHApOworCXJiX2luc2VydF9jb2xvcigmZXBpLT5yYm4sICZlcC0+cmJyKTsKK30KKworLyoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggIm10eCIgaGVsZC4KKyAqLworc3RhdGljIGludCBlcF9pbnNlcnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXZlbnQsCisJCSAgICAgc3RydWN0IGZpbGUgKnRmaWxlLCBpbnQgZmQpCit7CisJaW50IGVycm9yLCByZXZlbnRzLCBwd2FrZSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZXBpdGVtICplcGk7CisJc3RydWN0IGVwX3BxdWV1ZSBlcHE7CisKKwllcnJvciA9IC1FTk9NRU07CisJaWYgKCEoZXBpID0ga21lbV9jYWNoZV9hbGxvYyhlcGlfY2FjaGUsIEdGUF9LRVJORUwpKSkKKwkJZ290byBlcnJvcl9yZXR1cm47CisKKwkvKiBJdGVtIGluaXRpYWxpemF0aW9uIGZvbGxvdyBoZXJlIC4uLiAqLworCWVwX3JiX2luaXRub2RlKCZlcGktPnJibik7CisJSU5JVF9MSVNUX0hFQUQoJmVwaS0+cmRsbGluayk7CisJSU5JVF9MSVNUX0hFQUQoJmVwaS0+ZmxsaW5rKTsKKwlJTklUX0xJU1RfSEVBRCgmZXBpLT5wd3FsaXN0KTsKKwllcGktPmVwID0gZXA7CisJZXBfc2V0X2ZmZCgmZXBpLT5mZmQsIHRmaWxlLCBmZCk7CisJZXBpLT5ldmVudCA9ICpldmVudDsKKwllcGktPm53YWl0ID0gMDsKKwllcGktPm5leHQgPSBFUF9VTkFDVElWRV9QVFI7CisKKwkvKiBJbml0aWFsaXplIHRoZSBwb2xsIHRhYmxlIHVzaW5nIHRoZSBxdWV1ZSBjYWxsYmFjayAqLworCWVwcS5lcGkgPSBlcGk7CisJaW5pdF9wb2xsX2Z1bmNwdHIoJmVwcS5wdCwgZXBfcHRhYmxlX3F1ZXVlX3Byb2MpOworCisJLyoKKwkgKiBBdHRhY2ggdGhlIGl0ZW0gdG8gdGhlIHBvbGwgaG9va3MgYW5kIGdldCBjdXJyZW50IGV2ZW50IGJpdHMuCisJICogV2UgY2FuIHNhZmVseSB1c2UgdGhlIGZpbGUqIGhlcmUgYmVjYXVzZSBpdHMgdXNhZ2UgY291bnQgaGFzCisJICogYmVlbiBpbmNyZWFzZWQgYnkgdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uLiBOb3RlIHRoYXQgYWZ0ZXIKKwkgKiB0aGlzIG9wZXJhdGlvbiBjb21wbGV0ZXMsIHRoZSBwb2xsIGNhbGxiYWNrIGNhbiBzdGFydCBoaXR0aW5nCisJICogdGhlIG5ldyBpdGVtLgorCSAqLworCXJldmVudHMgPSB0ZmlsZS0+Zl9vcC0+cG9sbCh0ZmlsZSwgJmVwcS5wdCk7CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gY2hlY2sgaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIHRoZSBwb2xsIHdhaXQgcXVldWUKKwkgKiBpbnN0YWxsIHByb2Nlc3MuIE5hbWVseSBhbiBhbGxvY2F0aW9uIGZvciBhIHdhaXQgcXVldWUgZmFpbGVkIGR1ZQorCSAqIGhpZ2ggbWVtb3J5IHByZXNzdXJlLgorCSAqLworCWlmIChlcGktPm53YWl0IDwgMCkKKwkJZ290byBlcnJvcl91bnJlZ2lzdGVyOworCisJLyogQWRkIHRoZSBjdXJyZW50IGl0ZW0gdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIGVwb2xsIGhvb2sgZm9yIHRoaXMgZmlsZSAqLworCXNwaW5fbG9jaygmdGZpbGUtPmZfZXBfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZXBpLT5mbGxpbmssICZ0ZmlsZS0+Zl9lcF9saW5rcyk7CisJc3Bpbl91bmxvY2soJnRmaWxlLT5mX2VwX2xvY2spOworCisJLyoKKwkgKiBBZGQgdGhlIGN1cnJlbnQgaXRlbSB0byB0aGUgUkIgdHJlZS4gQWxsIFJCIHRyZWUgb3BlcmF0aW9ucyBhcmUKKwkgKiBwcm90ZWN0ZWQgYnkgIm10eCIsIGFuZCBlcF9pbnNlcnQoKSBpcyBjYWxsZWQgd2l0aCAibXR4IiBoZWxkLgorCSAqLworCWVwX3JidHJlZV9pbnNlcnQoZXAsIGVwaSk7CisKKwkvKiBXZSBoYXZlIHRvIGRyb3AgdGhlIG5ldyBpdGVtIGluc2lkZSBvdXIgaXRlbSBsaXN0IHRvIGtlZXAgdHJhY2sgb2YgaXQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKKworCS8qIElmIHRoZSBmaWxlIGlzIGFscmVhZHkgInJlYWR5IiB3ZSBkcm9wIGl0IGluc2lkZSB0aGUgcmVhZHkgbGlzdCAqLworCWlmICgocmV2ZW50cyAmIGV2ZW50LT5ldmVudHMpICYmICFlcF9pc19saW5rZWQoJmVwaS0+cmRsbGluaykpIHsKKwkJbGlzdF9hZGRfdGFpbCgmZXBpLT5yZGxsaW5rLCAmZXAtPnJkbGxpc3QpOworCisJCS8qIE5vdGlmeSB3YWl0aW5nIHRhc2tzIHRoYXQgZXZlbnRzIGFyZSBhdmFpbGFibGUgKi8KKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmVwLT53cSkpCisJCQlfX3dha2VfdXBfbG9ja2VkKCZlcC0+d3EsIFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmVwLT5wb2xsX3dhaXQpKQorCQkJcHdha2UrKzsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOworCisJLyogV2UgaGF2ZSB0byBjYWxsIHRoaXMgb3V0c2lkZSB0aGUgbG9jayAqLworCWlmIChwd2FrZSkKKwkJZXBfcG9sbF9zYWZld2FrZSgmcHN3LCAmZXAtPnBvbGxfd2FpdCk7CisKKwlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogZXBfaW5zZXJ0KCVwLCAlcCwgJWQpXG4iLAorCQkgICAgIGN1cnJlbnQsIGVwLCB0ZmlsZSwgZmQpKTsKKworCXJldHVybiAwOworCitlcnJvcl91bnJlZ2lzdGVyOgorCWVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoZXAsIGVwaSk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIGFuIGV2ZW50IGNvdWxkIGhhdmUgYmVlbiBhcnJpdmVkIG9uIHNvbWUKKwkgKiBhbGxvY2F0ZWQgd2FpdCBxdWV1ZS4gTm90ZSB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGVwLT5vdmZsaXN0CisJICogbGlzdCwgc2luY2UgdGhhdCBpcyB1c2VkL2NsZWFuZWQgb25seSBpbnNpZGUgYSBzZWN0aW9uIGJvdW5kIGJ5ICJtdHgiLgorCSAqIEFuZCBlcF9pbnNlcnQoKSBpcyBjYWxsZWQgd2l0aCAibXR4IiBoZWxkLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOworCWlmIChlcF9pc19saW5rZWQoJmVwaS0+cmRsbGluaykpCisJCWxpc3RfZGVsX2luaXQoJmVwaS0+cmRsbGluayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKKworCWttZW1fY2FjaGVfZnJlZShlcGlfY2FjaGUsIGVwaSk7CitlcnJvcl9yZXR1cm46CisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogTW9kaWZ5IHRoZSBpbnRlcmVzdCBldmVudCBtYXNrIGJ5IGRyb3BwaW5nIGFuIGV2ZW50IGlmIHRoZSBuZXcgbWFzaworICogaGFzIGEgbWF0Y2ggaW4gdGhlIGN1cnJlbnQgZmlsZSBzdGF0dXMuIE11c3QgYmUgY2FsbGVkIHdpdGggIm10eCIgaGVsZC4KKyAqLworc3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSwgc3RydWN0IGVwb2xsX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgcHdha2UgPSAwOworCXVuc2lnbmVkIGludCByZXZlbnRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIFNldCB0aGUgbmV3IGV2ZW50IGludGVyZXN0IG1hc2sgYmVmb3JlIGNhbGxpbmcgZl9vcC0+cG9sbCgpLCBvdGhlcndpc2UKKwkgKiBhIHBvdGVudGlhbCByYWNlIG1pZ2h0IG9jY3VyLiBJbiBmYWN0IGlmIHdlIGRvIHRoaXMgb3BlcmF0aW9uIGluc2lkZQorCSAqIHRoZSBsb2NrLCBhbiBldmVudCBtaWdodCBoYXBwZW4gYmV0d2VlbiB0aGUgZl9vcC0+cG9sbCgpIGNhbGwgYW5kIHRoZQorCSAqIG5ldyBldmVudCBzZXQgcmVnaXN0ZXJpbmcuCisJICovCisJZXBpLT5ldmVudC5ldmVudHMgPSBldmVudC0+ZXZlbnRzOworCisJLyoKKwkgKiBHZXQgY3VycmVudCBldmVudCBiaXRzLiBXZSBjYW4gc2FmZWx5IHVzZSB0aGUgZmlsZSogaGVyZSBiZWNhdXNlCisJICogaXRzIHVzYWdlIGNvdW50IGhhcyBiZWVuIGluY3JlYXNlZCBieSB0aGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24uCisJICovCisJcmV2ZW50cyA9IGVwaS0+ZmZkLmZpbGUtPmZfb3AtPnBvbGwoZXBpLT5mZmQuZmlsZSwgTlVMTCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKKworCS8qIENvcHkgdGhlIGRhdGEgbWVtYmVyIGZyb20gaW5zaWRlIHRoZSBsb2NrICovCisJZXBpLT5ldmVudC5kYXRhID0gZXZlbnQtPmRhdGE7CisKKwkvKgorCSAqIElmIHRoZSBpdGVtIGlzICJob3QiIGFuZCBpdCBpcyBub3QgcmVnaXN0ZXJlZCBpbnNpZGUgdGhlIHJlYWR5CisJICogbGlzdCwgcHVzaCBpdCBpbnNpZGUuCisJICovCisJaWYgKHJldmVudHMgJiBldmVudC0+ZXZlbnRzKSB7CisJCWlmICghZXBfaXNfbGlua2VkKCZlcGktPnJkbGxpbmspKSB7CisJCQlsaXN0X2FkZF90YWlsKCZlcGktPnJkbGxpbmssICZlcC0+cmRsbGlzdCk7CisKKwkJCS8qIE5vdGlmeSB3YWl0aW5nIHRhc2tzIHRoYXQgZXZlbnRzIGFyZSBhdmFpbGFibGUgKi8KKwkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZlcC0+d3EpKQorCQkJCV9fd2FrZV91cF9sb2NrZWQoJmVwLT53cSwgVEFTS19VTklOVEVSUlVQVElCTEUgfAorCQkJCQkJIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPnBvbGxfd2FpdCkpCisJCQkJcHdha2UrKzsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOworCisJLyogV2UgaGF2ZSB0byBjYWxsIHRoaXMgb3V0c2lkZSB0aGUgbG9jayAqLworCWlmIChwd2FrZSkKKwkJZXBfcG9sbF9zYWZld2FrZSgmcHN3LCAmZXAtPnBvbGxfd2FpdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcF9zZW5kX2V2ZW50cyhzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLAorCQkJICBpbnQgbWF4ZXZlbnRzKQoreworCWludCBldmVudGNudCwgZXJyb3IgPSAtRUZBVUxULCBwd2FrZSA9IDA7CisJdW5zaWduZWQgaW50IHJldmVudHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZXBpdGVtICplcGksICpuZXBpOworCXN0cnVjdCBsaXN0X2hlYWQgdHhsaXN0OworCisJSU5JVF9MSVNUX0hFQUQoJnR4bGlzdCk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gbG9jayB0aGlzIGJlY2F1c2Ugd2UgY291bGQgYmUgaGl0IGJ5CisJICogZXZlbnRwb2xsX3JlbGVhc2VfZmlsZSgpIGFuZCBlcG9sbF9jdGwoRVBPTExfQ1RMX0RFTCkuCisJICovCisJbXV0ZXhfbG9jaygmZXAtPm10eCk7CisKKwkvKgorCSAqIFN0ZWFsIHRoZSByZWFkeSBsaXN0LCBhbmQgcmUtaW5pdCB0aGUgb3JpZ2luYWwgb25lIHRvIHRoZQorCSAqIGVtcHR5IGxpc3QuIEFsc28sIHNldCBlcC0+b3ZmbGlzdCB0byBOVUxMIHNvIHRoYXQgZXZlbnRzCisJICogaGFwcGVuaW5nIHdoaWxlIGxvb3Bpbmcgdy9vdXQgbG9ja3MsIGFyZSBub3QgbG9zdC4gV2UgY2Fubm90CisJICogaGF2ZSB0aGUgcG9sbCBjYWxsYmFjayB0byBxdWV1ZSBkaXJlY3RseSBvbiBlcC0+cmRsbGlzdCwKKwkgKiBiZWNhdXNlIHdlIGFyZSBkb2luZyBpdCBpbiB0aGUgbG9vcCBiZWxvdywgaW4gYSBsb2NrbGVzcyB3YXkuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CisJbGlzdF9zcGxpY2UoJmVwLT5yZGxsaXN0LCAmdHhsaXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZXAtPnJkbGxpc3QpOworCWVwLT5vdmZsaXN0ID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBXZSBjYW4gbG9vcCB3aXRob3V0IGxvY2sgYmVjYXVzZSB0aGlzIGlzIGEgdGFzayBwcml2YXRlIGxpc3QuCisJICogV2UganVzdCBzcGxpY2UnZCBvdXQgdGhlIGVwLT5yZGxsaXN0IGluIGVwX2NvbGxlY3RfcmVhZHlfaXRlbXMoKS4KKwkgKiBJdGVtcyBjYW5ub3QgdmFuaXNoIGR1cmluZyB0aGUgbG9vcCBiZWNhdXNlIHdlIGFyZSBob2xkaW5nICJtdHgiLgorCSAqLworCWZvciAoZXZlbnRjbnQgPSAwOyAhbGlzdF9lbXB0eSgmdHhsaXN0KSAmJiBldmVudGNudCA8IG1heGV2ZW50czspIHsKKwkJZXBpID0gbGlzdF9maXJzdF9lbnRyeSgmdHhsaXN0LCBzdHJ1Y3QgZXBpdGVtLCByZGxsaW5rKTsKKworCQlsaXN0X2RlbF9pbml0KCZlcGktPnJkbGxpbmspOworCisJCS8qCisJCSAqIEdldCB0aGUgcmVhZHkgZmlsZSBldmVudCBzZXQuIFdlIGNhbiBzYWZlbHkgdXNlIHRoZSBmaWxlCisJCSAqIGJlY2F1c2Ugd2UgYXJlIGhvbGRpbmcgdGhlICJtdHgiIGFuZCB0aGlzIHdpbGwgZ3VhcmFudGVlCisJCSAqIHRoYXQgYm90aCB0aGUgZmlsZSBhbmQgdGhlIGl0ZW0gd2lsbCBub3QgdmFuaXNoLgorCQkgKi8KKwkJcmV2ZW50cyA9IGVwaS0+ZmZkLmZpbGUtPmZfb3AtPnBvbGwoZXBpLT5mZmQuZmlsZSwgTlVMTCk7CisJCXJldmVudHMgJj0gZXBpLT5ldmVudC5ldmVudHM7CisKKwkJLyoKKwkJICogSXMgdGhlIGV2ZW50IG1hc2sgaW50ZXJzZWN0IHRoZSBjYWxsZXItcmVxdWVzdGVkIG9uZSwKKwkJICogZGVsaXZlciB0aGUgZXZlbnQgdG8gdXNlcnNwYWNlLiBBZ2Fpbiwgd2UgYXJlIGhvbGRpbmcKKwkJICogIm10eCIsIHNvIG5vIG9wZXJhdGlvbnMgY29taW5nIGZyb20gdXNlcnNwYWNlIGNhbiBjaGFuZ2UKKwkJICogdGhlIGl0ZW0uCisJCSAqLworCQlpZiAocmV2ZW50cykgeworCQkJaWYgKF9fcHV0X3VzZXIocmV2ZW50cywKKwkJCQkgICAgICAgJmV2ZW50c1tldmVudGNudF0uZXZlbnRzKSB8fAorCQkJICAgIF9fcHV0X3VzZXIoZXBpLT5ldmVudC5kYXRhLAorCQkJCSAgICAgICAmZXZlbnRzW2V2ZW50Y250XS5kYXRhKSkKKwkJCQlnb3RvIGVycnhpdDsKKwkJCWlmIChlcGktPmV2ZW50LmV2ZW50cyAmIEVQT0xMT05FU0hPVCkKKwkJCQllcGktPmV2ZW50LmV2ZW50cyAmPSBFUF9QUklWQVRFX0JJVFM7CisJCQlldmVudGNudCsrOworCQl9CisJCS8qCisJCSAqIEF0IHRoaXMgcG9pbnQsIG5vb25lIGNhbiBpbnNlcnQgaW50byBlcC0+cmRsbGlzdCBiZXNpZGVzCisJCSAqIHVzLiBUaGUgZXBvbGxfY3RsKCkgY2FsbGVycyBhcmUgbG9ja2VkIG91dCBieSB1cyBob2xkaW5nCisJCSAqICJtdHgiIGFuZCB0aGUgcG9sbCBjYWxsYmFjayB3aWxsIHF1ZXVlIHRoZW0gaW4gZXAtPm92Zmxpc3QuCisJCSAqLworCQlpZiAoIShlcGktPmV2ZW50LmV2ZW50cyAmIEVQT0xMRVQpICYmCisJCSAgICAocmV2ZW50cyAmIGVwaS0+ZXZlbnQuZXZlbnRzKSkKKwkJCWxpc3RfYWRkX3RhaWwoJmVwaS0+cmRsbGluaywgJmVwLT5yZGxsaXN0KTsKKwl9CisJZXJyb3IgPSAwOworCitlcnJ4aXQ6CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKKwkvKgorCSAqIER1cmluZyB0aGUgdGltZSB3ZSBzcGVudCBpbiB0aGUgbG9vcCBhYm92ZSwgc29tZSBvdGhlciBldmVudHMKKwkgKiBtaWdodCBoYXZlIGJlZW4gcXVldWVkIGJ5IHRoZSBwb2xsIGNhbGxiYWNrLiBXZSByZS1pbnNlcnQgdGhlbQorCSAqIGhlcmUgKGluIGNhc2UgdGhleSBhcmUgbm90IGFscmVhZHkgcXVldWVkLCBvciB0aGV5J3JlIG9uZS1zaG90KS4KKwkgKi8KKwlmb3IgKG5lcGkgPSBlcC0+b3ZmbGlzdDsgKGVwaSA9IG5lcGkpICE9IE5VTEw7CisJICAgICBuZXBpID0gZXBpLT5uZXh0LCBlcGktPm5leHQgPSBFUF9VTkFDVElWRV9QVFIpIHsKKwkJaWYgKCFlcF9pc19saW5rZWQoJmVwaS0+cmRsbGluaykgJiYKKwkJICAgIChlcGktPmV2ZW50LmV2ZW50cyAmIH5FUF9QUklWQVRFX0JJVFMpKQorCQkJbGlzdF9hZGRfdGFpbCgmZXBpLT5yZGxsaW5rLCAmZXAtPnJkbGxpc3QpOworCX0KKwkvKgorCSAqIFdlIG5lZWQgdG8gc2V0IGJhY2sgZXAtPm92Zmxpc3QgdG8gRVBfVU5BQ1RJVkVfUFRSLCBzbyB0aGF0IGFmdGVyCisJICogcmVsZWFzaW5nIHRoZSBsb2NrLCBldmVudHMgd2lsbCBiZSBxdWV1ZWQgaW4gdGhlIG5vcm1hbCB3YXkgaW5zaWRlCisJICogZXAtPnJkbGxpc3QuCisJICovCisJZXAtPm92Zmxpc3QgPSBFUF9VTkFDVElWRV9QVFI7CisKKwkvKgorCSAqIEluIGNhc2Ugb2YgZXJyb3IgaW4gdGhlIGV2ZW50LXNlbmQgbG9vcCwgb3IgaW4gY2FzZSB0aGUgbnVtYmVyIG9mCisJICogcmVhZHkgZXZlbnRzIGV4Y2VlZHMgdGhlIHVzZXJzcGFjZSBsaW1pdCwgd2UgbmVlZCB0byBzcGxpY2UgdGhlCisJICogInR4bGlzdCIgYmFjayBpbnNpZGUgZXAtPnJkbGxpc3QuCisJICovCisJbGlzdF9zcGxpY2UoJnR4bGlzdCwgJmVwLT5yZGxsaXN0KTsKKworCWlmICghbGlzdF9lbXB0eSgmZXAtPnJkbGxpc3QpKSB7CisJCS8qCisJCSAqIFdha2UgdXAgKGlmIGFjdGl2ZSkgYm90aCB0aGUgZXZlbnRwb2xsIHdhaXQgbGlzdCBhbmQgdGhlIC0+cG9sbCgpCisJCSAqIHdhaXQgbGlzdCAoZGVsYXllZCBhZnRlciB3ZSByZWxlYXNlIHRoZSBsb2NrKS4KKwkJICovCisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZlcC0+d3EpKQorCQkJX193YWtlX3VwX2xvY2tlZCgmZXAtPndxLCBUQVNLX1VOSU5URVJSVVBUSUJMRSB8CisJCQkJCSBUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPnBvbGxfd2FpdCkpCisJCQlwd2FrZSsrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOworCisJbXV0ZXhfdW5sb2NrKCZlcC0+bXR4KTsKKworCS8qIFdlIGhhdmUgdG8gY2FsbCB0aGlzIG91dHNpZGUgdGhlIGxvY2sgKi8KKwlpZiAocHdha2UpCisJCWVwX3BvbGxfc2FmZXdha2UoJnBzdywgJmVwLT5wb2xsX3dhaXQpOworCisJcmV0dXJuIGV2ZW50Y250ID09IDAgPyBlcnJvcjogZXZlbnRjbnQ7Cit9CisKK3N0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLAorCQkgICBpbnQgbWF4ZXZlbnRzLCBsb25nIHRpbWVvdXQpCit7CisJaW50IHJlcywgZWF2YWlsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9uZyBqdGltZW91dDsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSB0aW1lb3V0IGJ5IGNoZWNraW5nIGZvciB0aGUgImluZmluaXRlIiB2YWx1ZSAoIC0xICkKKwkgKiBhbmQgdGhlIG92ZXJmbG93IGNvbmRpdGlvbi4gVGhlIHBhc3NlZCB0aW1lb3V0IGlzIGluIG1pbGxpc2Vjb25kcywKKwkgKiB0aGF0IHdoeSAodCAqIEhaKSAvIDEwMDAuCisJICovCisJanRpbWVvdXQgPSAodGltZW91dCA8IDAgfHwgdGltZW91dCA+PSBFUF9NQVhfTVNUSU1FTykgPworCQlNQVhfU0NIRURVTEVfVElNRU9VVCA6ICh0aW1lb3V0ICogSFogKyA5OTkpIC8gMTAwMDsKKworcmV0cnk6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CisKKwlyZXMgPSAwOworCWlmIChsaXN0X2VtcHR5KCZlcC0+cmRsbGlzdCkpIHsKKwkJLyoKKwkJICogV2UgZG9uJ3QgaGF2ZSBhbnkgYXZhaWxhYmxlIGV2ZW50IHRvIHJldHVybiB0byB0aGUgY2FsbGVyLgorCQkgKiBXZSBuZWVkIHRvIHNsZWVwIGhlcmUsIGFuZCB3ZSB3aWxsIGJlIHdha2UgdXAgYnkKKwkJICogZXBfcG9sbF9jYWxsYmFjaygpIHdoZW4gZXZlbnRzIHdpbGwgYmVjb21lIGF2YWlsYWJsZS4KKwkJICovCisJCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKKwkJd2FpdC5mbGFncyB8PSBXUV9GTEFHX0VYQ0xVU0lWRTsKKwkJX19hZGRfd2FpdF9xdWV1ZSgmZXAtPndxLCAmd2FpdCk7CisKKwkJZm9yICg7OykgeworCQkJLyoKKwkJCSAqIFdlIGRvbid0IHdhbnQgdG8gc2xlZXAgaWYgdGhlIGVwX3BvbGxfY2FsbGJhY2soKSBzZW5kcyB1cworCQkJICogYSB3YWtldXAgaW4gYmV0d2Vlbi4gVGhhdCdzIHdoeSB3ZSBzZXQgdGhlIHRhc2sgc3RhdGUKKwkJCSAqIHRvIFRBU0tfSU5URVJSVVBUSUJMRSBiZWZvcmUgZG9pbmcgdGhlIGNoZWNrcy4KKwkJCSAqLworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmZXAtPnJkbGxpc3QpIHx8ICFqdGltZW91dCkKKwkJCQlicmVhazsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXJlcyA9IC1FSU5UUjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKKwkJCWp0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dChqdGltZW91dCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKKwkJfQorCQlfX3JlbW92ZV93YWl0X3F1ZXVlKCZlcC0+d3EsICZ3YWl0KTsKKworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCX0KKworCS8qIElzIGl0IHdvcnRoIHRvIHRyeSB0byBkaWcgZm9yIGV2ZW50cyA/ICovCisJZWF2YWlsID0gIWxpc3RfZW1wdHkoJmVwLT5yZGxsaXN0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFRyeSB0byB0cmFuc2ZlciBldmVudHMgdG8gdXNlciBzcGFjZS4gSW4gY2FzZSB3ZSBnZXQgMCBldmVudHMgYW5kCisJICogdGhlcmUncyBzdGlsbCB0aW1lb3V0IGxlZnQgb3Zlciwgd2UgZ28gdHJ5aW5nIGFnYWluIGluIHNlYXJjaCBvZgorCSAqIG1vcmUgbHVjay4KKwkgKi8KKwlpZiAoIXJlcyAmJiBlYXZhaWwgJiYKKwkgICAgIShyZXMgPSBlcF9zZW5kX2V2ZW50cyhlcCwgZXZlbnRzLCBtYXhldmVudHMpKSAmJiBqdGltZW91dCkKKwkJZ290byByZXRyeTsKKworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBJdCBvcGVucyBhbiBldmVudHBvbGwgZmlsZSBkZXNjcmlwdG9yLiBUaGUgInNpemUiIHBhcmFtZXRlciBpcyB0aGVyZQorICogZm9yIGhpc3RvcmljYWwgcmVhc29ucywgd2hlbiBlcG9sbCB3YXMgdXNpbmcgYW4gaGFzaCBpbnN0ZWFkIG9mIGFuCisgKiBSQiB0cmVlLiBXaXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgInNpemUiIHBhcmFtZXRlciBpcyBpZ25vcmVkCisgKiAoYmVzaWRlcyBzYW5pdHkgY2hlY2tzKS4KICAqLwogYXNtbGlua2FnZSBsb25nIHN5c19lcG9sbF9jcmVhdGUoaW50IHNpemUpCiB7CkBAIC01MTMsMzkgKzEwODcsMzcgQEAKIAkgKi8KIAllcnJvciA9IC1FSU5WQUw7CiAJaWYgKHNpemUgPD0gMCB8fCAoZXJyb3IgPSBlcF9hbGxvYygmZXApKSAhPSAwKQotCQlnb3RvIGVleGl0XzE7CisJCWdvdG8gZXJyb3JfcmV0dXJuOwogCiAJLyoKIAkgKiBDcmVhdGVzIGFsbCB0aGUgaXRlbXMgbmVlZGVkIHRvIHNldHVwIGFuIGV2ZW50cG9sbCBmaWxlLiBUaGF0IGlzLAogCSAqIGEgZmlsZSBzdHJ1Y3R1cmUsIGFuZCBpbm9kZSBhbmQgYSBmcmVlIGZpbGUgZGVzY3JpcHRvci4KIAkgKi8KLQllcnJvciA9IGVwX2dldGZkKCZmZCwgJmlub2RlLCAmZmlsZSwgZXApOworCWVycm9yID0gYW5vbl9pbm9kZV9nZXRmZCgmZmQsICZpbm9kZSwgJmZpbGUsICJbZXZlbnRwb2xsXSIsCisJCQkJICZldmVudHBvbGxfZm9wcywgZXApOwogCWlmIChlcnJvcikKLQkJZ290byBlZXhpdF8yOworCQlnb3RvIGVycm9yX2ZyZWU7CiAKIAlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogc3lzX2Vwb2xsX2NyZWF0ZSglZCkgPSAlZFxuIiwKIAkJICAgICBjdXJyZW50LCBzaXplLCBmZCkpOwogCiAJcmV0dXJuIGZkOwogCi1lZXhpdF8yOgorZXJyb3JfZnJlZToKIAllcF9mcmVlKGVwKTsKLQlrZnJlZShlcCk7Ci1lZXhpdF8xOgorZXJyb3JfcmV0dXJuOgogCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBzeXNfZXBvbGxfY3JlYXRlKCVkKSA9ICVkXG4iLAogCQkgICAgIGN1cnJlbnQsIHNpemUsIGVycm9yKSk7CiAJcmV0dXJuIGVycm9yOwogfQogCi0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIGNvbnRyb2xsZXIgaW50ZXJmYWNlIGZvcgogICogdGhlIGV2ZW50cG9sbCBmaWxlIHRoYXQgZW5hYmxlcyB0aGUgaW5zZXJ0aW9uL3JlbW92YWwvY2hhbmdlIG9mCi0gKiBmaWxlIGRlc2NyaXB0b3JzIGluc2lkZSB0aGUgaW50ZXJlc3Qgc2V0LiAgSXQgcmVwcmVzZW50cwotICogdGhlIGtlcm5lbCBwYXJ0IG9mIHRoZSB1c2VyIHNwYWNlIGVwb2xsX2N0bCgyKS4KKyAqIGZpbGUgZGVzY3JpcHRvcnMgaW5zaWRlIHRoZSBpbnRlcmVzdCBzZXQuCiAgKi8KLWFzbWxpbmthZ2UgbG9uZwotc3lzX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50KQorYXNtbGlua2FnZSBsb25nIHN5c19lcG9sbF9jdGwoaW50IGVwZmQsIGludCBvcCwgaW50IGZkLAorCQkJICAgICAgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnQpCiB7CiAJaW50IGVycm9yOwogCXN0cnVjdCBmaWxlICpmaWxlLCAqdGZpbGU7CkBAIC01NTcsMjUgKzExMjksMjUgQEAKIAkJICAgICBjdXJyZW50LCBlcGZkLCBvcCwgZmQsIGV2ZW50KSk7CiAKIAllcnJvciA9IC1FRkFVTFQ7Ci0JaWYgKGVwX29wX2hhc2hfZXZlbnQob3ApICYmCisJaWYgKGVwX29wX2hhc19ldmVudChvcCkgJiYKIAkgICAgY29weV9mcm9tX3VzZXIoJmVwZHMsIGV2ZW50LCBzaXplb2Yoc3RydWN0IGVwb2xsX2V2ZW50KSkpCi0JCWdvdG8gZWV4aXRfMTsKKwkJZ290byBlcnJvcl9yZXR1cm47CiAKIAkvKiBHZXQgdGhlICJzdHJ1Y3QgZmlsZSAqIiBmb3IgdGhlIGV2ZW50cG9sbCBmaWxlICovCiAJZXJyb3IgPSAtRUJBREY7CiAJZmlsZSA9IGZnZXQoZXBmZCk7CiAJaWYgKCFmaWxlKQotCQlnb3RvIGVleGl0XzE7CisJCWdvdG8gZXJyb3JfcmV0dXJuOwogCiAJLyogR2V0IHRoZSAic3RydWN0IGZpbGUgKiIgZm9yIHRoZSB0YXJnZXQgZmlsZSAqLwogCXRmaWxlID0gZmdldChmZCk7CiAJaWYgKCF0ZmlsZSkKLQkJZ290byBlZXhpdF8yOworCQlnb3RvIGVycm9yX2ZwdXQ7CiAKIAkvKiBUaGUgdGFyZ2V0IGZpbGUgZGVzY3JpcHRvciBtdXN0IHN1cHBvcnQgcG9sbCAqLwogCWVycm9yID0gLUVQRVJNOwogCWlmICghdGZpbGUtPmZfb3AgfHwgIXRmaWxlLT5mX29wLT5wb2xsKQotCQlnb3RvIGVleGl0XzM7CisJCWdvdG8gZXJyb3JfdGd0X2ZwdXQ7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgZmlsZSBzdHJ1Y3R1cmUgdW5kZXJuZWF0aCB0aGUgZmlsZSBkZXNjcmlwdG9yCkBAIC01ODQsNyArMTE1Niw3IEBACiAJICovCiAJZXJyb3IgPSAtRUlOVkFMOwogCWlmIChmaWxlID09IHRmaWxlIHx8ICFpc19maWxlX2Vwb2xsKGZpbGUpKQotCQlnb3RvIGVleGl0XzM7CisJCWdvdG8gZXJyb3JfdGd0X2ZwdXQ7CiAKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgaXQgaXMgc2FmZSB0byBhc3N1bWUgdGhhdCB0aGUgInByaXZhdGVfZGF0YSIgY29udGFpbnMKQEAgLTU5Miw5ICsxMTY0LDEzIEBACiAJICovCiAJZXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlkb3duX3dyaXRlKCZlcC0+c2VtKTsKKwltdXRleF9sb2NrKCZlcC0+bXR4KTsKIAotCS8qIFRyeSB0byBsb29rdXAgdGhlIGZpbGUgaW5zaWRlIG91ciBoYXNoIHRhYmxlICovCisJLyoKKwkgKiBUcnkgdG8gbG9va3VwIHRoZSBmaWxlIGluc2lkZSBvdXIgUkIgdHJlZSwgU2luY2Ugd2UgZ3JhYmJlZCAibXR4IgorCSAqIGFib3ZlLCB3ZSBjYW4gYmUgc3VyZSB0byBiZSBhYmxlIHRvIHVzZSB0aGUgaXRlbSBsb29rZWQgdXAgYnkKKwkgKiBlcF9maW5kKCkgdGlsbCB3ZSByZWxlYXNlIHRoZSBtdXRleC4KKwkgKi8KIAllcGkgPSBlcF9maW5kKGVwLCB0ZmlsZSwgZmQpOwogCiAJZXJyb3IgPSAtRUlOVkFMOwpAQCAtNjIxLDI4ICsxMTk3LDE5IEBACiAJCQllcnJvciA9IC1FTk9FTlQ7CiAJCWJyZWFrOwogCX0KKwltdXRleF91bmxvY2soJmVwLT5tdHgpOwogCi0JLyoKLQkgKiBUaGUgZnVuY3Rpb24gZXBfZmluZCgpIGluY3JlbWVudHMgdGhlIHVzYWdlIGNvdW50IG9mIHRoZSBzdHJ1Y3R1cmUKLQkgKiBzbywgaWYgdGhpcyBpcyBub3QgTlVMTCwgd2UgbmVlZCB0byByZWxlYXNlIGl0LgotCSAqLwotCWlmIChlcGkpCi0JCWVwX3JlbGVhc2VfZXBpdGVtKGVwaSk7Ci0KLQl1cF93cml0ZSgmZXAtPnNlbSk7Ci0KLWVleGl0XzM6CitlcnJvcl90Z3RfZnB1dDoKIAlmcHV0KHRmaWxlKTsKLWVleGl0XzI6CitlcnJvcl9mcHV0OgogCWZwdXQoZmlsZSk7Ci1lZXhpdF8xOgorZXJyb3JfcmV0dXJuOgogCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBzeXNfZXBvbGxfY3RsKCVkLCAlZCwgJWQsICVwKSA9ICVkXG4iLAogCQkgICAgIGN1cnJlbnQsIGVwZmQsIG9wLCBmZCwgZXZlbnQsIGVycm9yKSk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQogLyoKICAqIEltcGxlbWVudCB0aGUgZXZlbnQgd2FpdCBpbnRlcmZhY2UgZm9yIHRoZSBldmVudHBvbGwgZmlsZS4gSXQgaXMgdGhlIGtlcm5lbAogICogcGFydCBvZiB0aGUgdXNlciBzcGFjZSBlcG9sbF93YWl0KDIpLgpAQCAtNjY0LDE0ICsxMjMxLDE0IEBACiAJLyogVmVyaWZ5IHRoYXQgdGhlIGFyZWEgcGFzc2VkIGJ5IHRoZSB1c2VyIGlzIHdyaXRlYWJsZSAqLwogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZXZlbnRzLCBtYXhldmVudHMgKiBzaXplb2Yoc3RydWN0IGVwb2xsX2V2ZW50KSkpIHsKIAkJZXJyb3IgPSAtRUZBVUxUOwotCQlnb3RvIGVleGl0XzE7CisJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KIAogCS8qIEdldCB0aGUgInN0cnVjdCBmaWxlICoiIGZvciB0aGUgZXZlbnRwb2xsIGZpbGUgKi8KIAllcnJvciA9IC1FQkFERjsKIAlmaWxlID0gZmdldChlcGZkKTsKIAlpZiAoIWZpbGUpCi0JCWdvdG8gZWV4aXRfMTsKKwkJZ290byBlcnJvcl9yZXR1cm47CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgZmlsZSBzdHJ1Y3R1cmUgdW5kZXJuZWF0aCB0aGUgZmQKQEAgLTY3OSw3ICsxMjQ2LDcgQEAKIAkgKi8KIAllcnJvciA9IC1FSU5WQUw7CiAJaWYgKCFpc19maWxlX2Vwb2xsKGZpbGUpKQotCQlnb3RvIGVleGl0XzI7CisJCWdvdG8gZXJyb3JfZnB1dDsKIAogCS8qCiAJICogQXQgdGhpcyBwb2ludCBpdCBpcyBzYWZlIHRvIGFzc3VtZSB0aGF0IHRoZSAicHJpdmF0ZV9kYXRhIiBjb250YWlucwpAQCAtNjkwLDE2ICsxMjU3LDE1IEBACiAJLyogVGltZSB0byBmaXNoIGZvciBldmVudHMgLi4uICovCiAJZXJyb3IgPSBlcF9wb2xsKGVwLCBldmVudHMsIG1heGV2ZW50cywgdGltZW91dCk7CiAKLWVleGl0XzI6CitlcnJvcl9mcHV0OgogCWZwdXQoZmlsZSk7Ci1lZXhpdF8xOgorZXJyb3JfcmV0dXJuOgogCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBzeXNfZXBvbGxfd2FpdCglZCwgJXAsICVkLCAlZCkgPSAlZFxuIiwKIAkJICAgICBjdXJyZW50LCBlcGZkLCBldmVudHMsIG1heGV2ZW50cywgdGltZW91dCwgZXJyb3IpKTsKIAogCXJldHVybiBlcnJvcjsKIH0KIAotCiAjaWZkZWYgVElGX1JFU1RPUkVfU0lHTUFTSwogCiAvKgpAQCAtNzM3LDcgKzEzMDMsNyBAQAogCWlmIChzaWdtYXNrKSB7CiAJCWlmIChlcnJvciA9PSAtRUlOVFIpIHsKIAkJCW1lbWNweSgmY3VycmVudC0+c2F2ZWRfc2lnbWFzaywgJnNpZ3NhdmVkLAotCQkJCXNpemVvZihzaWdzYXZlZCkpOworCQkJICAgICAgIHNpemVvZihzaWdzYXZlZCkpOwogCQkJc2V0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spOwogCQl9IGVsc2UKIAkJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmc2lnc2F2ZWQsIE5VTEwpOwpAQCAtNzQ4LDkxOSArMTMxNCw4IEBACiAKICNlbmRpZiAvKiAjaWZkZWYgVElGX1JFU1RPUkVfU0lHTUFTSyAqLwogCi0KLS8qCi0gKiBDcmVhdGVzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gYmUgdXNlZCBieSB0aGUgZXBvbGwgaW50ZXJmYWNlLgotICovCi1zdGF0aWMgaW50IGVwX2dldGZkKGludCAqZWZkLCBzdHJ1Y3QgaW5vZGUgKiplaW5vZGUsIHN0cnVjdCBmaWxlICoqZWZpbGUsCi0JCSAgICBzdHJ1Y3QgZXZlbnRwb2xsICplcCkKLXsKLQlzdHJ1Y3QgcXN0ciB0aGlzOwotCWNoYXIgbmFtZVszMl07Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGZpbGUgKmZpbGU7Ci0JaW50IGVycm9yLCBmZDsKLQotCS8qIEdldCBhbiByZWFkeSB0byB1c2UgZmlsZSAqLwotCWVycm9yID0gLUVORklMRTsKLQlmaWxlID0gZ2V0X2VtcHR5X2ZpbHAoKTsKLQlpZiAoIWZpbGUpCi0JCWdvdG8gZWV4aXRfMTsKLQotCS8qIEFsbG9jYXRlcyBhbiBpbm9kZSBmcm9tIHRoZSBldmVudHBvbGwgZmlsZSBzeXN0ZW0gKi8KLQlpbm9kZSA9IGVwX2V2ZW50cG9sbF9pbm9kZSgpOwotCWlmIChJU19FUlIoaW5vZGUpKSB7Ci0JCWVycm9yID0gUFRSX0VSUihpbm9kZSk7Ci0JCWdvdG8gZWV4aXRfMjsKLQl9Ci0KLQkvKiBBbGxvY2F0ZXMgYSBmcmVlIGRlc2NyaXB0b3IgdG8gcGx1ZyB0aGUgZmlsZSBvbnRvICovCi0JZXJyb3IgPSBnZXRfdW51c2VkX2ZkKCk7Ci0JaWYgKGVycm9yIDwgMCkKLQkJZ290byBlZXhpdF8zOwotCWZkID0gZXJyb3I7Ci0KLQkvKgotCSAqIExpbmsgdGhlIGlub2RlIHRvIGEgZGlyZWN0b3J5IGVudHJ5IGJ5IGNyZWF0aW5nIGEgdW5pcXVlIG5hbWUKLQkgKiB1c2luZyB0aGUgaW5vZGUgbnVtYmVyLgotCSAqLwotCWVycm9yID0gLUVOT01FTTsKLQlzcHJpbnRmKG5hbWUsICJbJWx1XSIsIGlub2RlLT5pX2lubyk7Ci0JdGhpcy5uYW1lID0gbmFtZTsKLQl0aGlzLmxlbiA9IHN0cmxlbihuYW1lKTsKLQl0aGlzLmhhc2ggPSBpbm9kZS0+aV9pbm87Ci0JZGVudHJ5ID0gZF9hbGxvYyhldmVudHBvbGxfbW50LT5tbnRfc2ItPnNfcm9vdCwgJnRoaXMpOwotCWlmICghZGVudHJ5KQotCQlnb3RvIGVleGl0XzQ7Ci0JZGVudHJ5LT5kX29wID0gJmV2ZW50cG9sbGZzX2RlbnRyeV9vcGVyYXRpb25zOwotCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwotCWZpbGUtPmZfcGF0aC5tbnQgPSBtbnRnZXQoZXZlbnRwb2xsX21udCk7Ci0JZmlsZS0+Zl9wYXRoLmRlbnRyeSA9IGRlbnRyeTsKLQlmaWxlLT5mX21hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwotCi0JZmlsZS0+Zl9wb3MgPSAwOwotCWZpbGUtPmZfZmxhZ3MgPSBPX1JET05MWTsKLQlmaWxlLT5mX29wID0gJmV2ZW50cG9sbF9mb3BzOwotCWZpbGUtPmZfbW9kZSA9IEZNT0RFX1JFQUQ7Ci0JZmlsZS0+Zl92ZXJzaW9uID0gMDsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBlcDsKLQotCS8qIEluc3RhbGwgdGhlIG5ldyBzZXR1cCBmaWxlIGludG8gdGhlIGFsbG9jYXRlZCBmZC4gKi8KLQlmZF9pbnN0YWxsKGZkLCBmaWxlKTsKLQotCSplZmQgPSBmZDsKLQkqZWlub2RlID0gaW5vZGU7Ci0JKmVmaWxlID0gZmlsZTsKLQlyZXR1cm4gMDsKLQotZWV4aXRfNDoKLQlwdXRfdW51c2VkX2ZkKGZkKTsKLWVleGl0XzM6Ci0JaXB1dChpbm9kZSk7Ci1lZXhpdF8yOgotCXB1dF9maWxwKGZpbGUpOwotZWV4aXRfMToKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLQotc3RhdGljIGludCBlcF9hbGxvYyhzdHJ1Y3QgZXZlbnRwb2xsICoqcGVwKQotewotCXN0cnVjdCBldmVudHBvbGwgKmVwID0ga3phbGxvYyhzaXplb2YoKmVwKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWVwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJ3bG9ja19pbml0KCZlcC0+bG9jayk7Ci0JaW5pdF9yd3NlbSgmZXAtPnNlbSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZXAtPndxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlcC0+cG9sbF93YWl0KTsKLQlJTklUX0xJU1RfSEVBRCgmZXAtPnJkbGxpc3QpOwotCWVwLT5yYnIgPSBSQl9ST09UOwotCi0JKnBlcCA9IGVwOwotCi0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGVwX2FsbG9jKCkgZXA9JXBcbiIsCi0JCSAgICAgY3VycmVudCwgZXApKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBlcF9mcmVlKHN0cnVjdCBldmVudHBvbGwgKmVwKQotewotCXN0cnVjdCByYl9ub2RlICpyYnA7Ci0Jc3RydWN0IGVwaXRlbSAqZXBpOwotCi0JLyogV2UgbmVlZCB0byByZWxlYXNlIGFsbCB0YXNrcyB3YWl0aW5nIGZvciB0aGVzZSBmaWxlICovCi0JaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmVwLT5wb2xsX3dhaXQpKQotCQllcF9wb2xsX3NhZmV3YWtlKCZwc3csICZlcC0+cG9sbF93YWl0KTsKLQotCS8qCi0JICogV2UgbmVlZCB0byBsb2NrIHRoaXMgYmVjYXVzZSB3ZSBjb3VsZCBiZSBoaXQgYnkKLQkgKiBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkgd2hpbGUgd2UncmUgZnJlZWluZyB0aGUgInN0cnVjdCBldmVudHBvbGwiLgotCSAqIFdlIGRvIG5vdCBuZWVkIHRvIGhvbGQgImVwLT5zZW0iIGhlcmUgYmVjYXVzZSB0aGUgZXBvbGwgZmlsZQotCSAqIGlzIG9uIHRoZSB3YXkgdG8gYmUgcmVtb3ZlZCBhbmQgbm8gb25lIGhhcyByZWZlcmVuY2VzIHRvIGl0Ci0JICogYW55bW9yZS4gVGhlIG9ubHkgaGl0IG1pZ2h0IGNvbWUgZnJvbSBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkgYnV0Ci0JICogaG9sZGluZyAiZXBtdXRleCIgaXMgc3VmZmljZW50IGhlcmUuCi0JICovCi0JbXV0ZXhfbG9jaygmZXBtdXRleCk7Ci0KLQkvKgotCSAqIFdhbGtzIHRocm91Z2ggdGhlIHdob2xlIHRyZWUgYnkgdW5yZWdpc3RlcmluZyBwb2xsIGNhbGxiYWNrcy4KLQkgKi8KLQlmb3IgKHJicCA9IHJiX2ZpcnN0KCZlcC0+cmJyKTsgcmJwOyByYnAgPSByYl9uZXh0KHJicCkpIHsKLQkJZXBpID0gcmJfZW50cnkocmJwLCBzdHJ1Y3QgZXBpdGVtLCByYm4pOwotCi0JCWVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoZXAsIGVwaSk7Ci0JfQotCi0JLyoKLQkgKiBXYWxrcyB0aHJvdWdoIHRoZSB3aG9sZSBoYXNoIGJ5IGZyZWVpbmcgZWFjaCAic3RydWN0IGVwaXRlbSIuIEF0IHRoaXMKLQkgKiBwb2ludCB3ZSBhcmUgc3VyZSBubyBwb2xsIGNhbGxiYWNrcyB3aWxsIGJlIGxpbmdlcmluZyBhcm91bmQsIGFuZCBhbHNvIGJ5Ci0JICogd3JpdGUtaG9sZGluZyAic2VtIiB3ZSBjYW4gYmUgc3VyZSB0aGF0IG5vIGZpbGUgY2xlYW51cCBjb2RlIHdpbGwgaGl0Ci0JICogdXMgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLiBTbyB3ZSBjYW4gYXZvaWQgdGhlIGxvY2sgb24gImVwLT5sb2NrIi4KLQkgKi8KLQl3aGlsZSAoKHJicCA9IHJiX2ZpcnN0KCZlcC0+cmJyKSkgIT0gMCkgewotCQllcGkgPSByYl9lbnRyeShyYnAsIHN0cnVjdCBlcGl0ZW0sIHJibik7Ci0JCWVwX3JlbW92ZShlcCwgZXBpKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmVwbXV0ZXgpOwotfQotCi0KLS8qCi0gKiBTZWFyY2ggdGhlIGZpbGUgaW5zaWRlIHRoZSBldmVudHBvbGwgaGFzaC4gSXQgYWRkIHVzYWdlIGNvdW50IHRvCi0gKiB0aGUgcmV0dXJuZWQgaXRlbSwgc28gdGhlIGNhbGxlciBtdXN0IGNhbGwgZXBfcmVsZWFzZV9lcGl0ZW0oKQotICogYWZ0ZXIgZmluaXNoZWQgdXNpbmcgdGhlICJzdHJ1Y3QgZXBpdGVtIi4KLSAqLwotc3RhdGljIHN0cnVjdCBlcGl0ZW0gKmVwX2ZpbmQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZmQpCi17Ci0JaW50IGtjbXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmJwOwotCXN0cnVjdCBlcGl0ZW0gKmVwaSwgKmVwaXIgPSBOVUxMOwotCXN0cnVjdCBlcG9sbF9maWxlZmQgZmZkOwotCi0JZXBfc2V0X2ZmZCgmZmZkLCBmaWxlLCBmZCk7Ci0JcmVhZF9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7Ci0JZm9yIChyYnAgPSBlcC0+cmJyLnJiX25vZGU7IHJicDsgKSB7Ci0JCWVwaSA9IHJiX2VudHJ5KHJicCwgc3RydWN0IGVwaXRlbSwgcmJuKTsKLQkJa2NtcCA9IGVwX2NtcF9mZmQoJmZmZCwgJmVwaS0+ZmZkKTsKLQkJaWYgKGtjbXAgPiAwKQotCQkJcmJwID0gcmJwLT5yYl9yaWdodDsKLQkJZWxzZSBpZiAoa2NtcCA8IDApCi0JCQlyYnAgPSByYnAtPnJiX2xlZnQ7Ci0JCWVsc2UgewotCQkJZXBfdXNlX2VwaXRlbShlcGkpOwotCQkJZXBpciA9IGVwaTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7Ci0KLQlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogZXBfZmluZCglcCkgLT4gJXBcbiIsCi0JCSAgICAgY3VycmVudCwgZmlsZSwgZXBpcikpOwotCi0JcmV0dXJuIGVwaXI7Ci19Ci0KLQotLyoKLSAqIEluY3JlbWVudCB0aGUgdXNhZ2UgY291bnQgb2YgdGhlICJzdHJ1Y3QgZXBpdGVtIiBtYWtpbmcgaXQgc3VyZQotICogdGhhdCB0aGUgdXNlciB3aWxsIGhhdmUgYSB2YWxpZCBwb2ludGVyIHRvIHJlZmVyZW5jZS4KLSAqLwotc3RhdGljIHZvaWQgZXBfdXNlX2VwaXRlbShzdHJ1Y3QgZXBpdGVtICplcGkpCi17Ci0KLQlhdG9taWNfaW5jKCZlcGktPnVzZWNudCk7Ci19Ci0KLQotLyoKLSAqIERlY3JlbWVudCAoIHJlbGVhc2UgKSB0aGUgdXNhZ2UgY291bnQgYnkgc2lnbmFsaW5nIHRoYXQgdGhlIHVzZXIKLSAqIGhhcyBmaW5pc2hlZCB1c2luZyB0aGUgc3RydWN0dXJlLiBJdCBtaWdodCBsZWFkIHRvIGZyZWVpbmcgdGhlCi0gKiBzdHJ1Y3R1cmUgaXRzZWxmIGlmIHRoZSBjb3VudCBnb2VzIHRvIHplcm8uCi0gKi8KLXN0YXRpYyB2b2lkIGVwX3JlbGVhc2VfZXBpdGVtKHN0cnVjdCBlcGl0ZW0gKmVwaSkKLXsKLQotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZlcGktPnVzZWNudCkpCi0JCWttZW1fY2FjaGVfZnJlZShlcGlfY2FjaGUsIGVwaSk7Ci19Ci0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIGNhbGxiYWNrIHRoYXQgaXMgdXNlZCB0byBhZGQgb3VyIHdhaXQgcXVldWUgdG8gdGhlCi0gKiB0YXJnZXQgZmlsZSB3YWtldXAgbGlzdHMuCi0gKi8KLXN0YXRpYyB2b2lkIGVwX3B0YWJsZV9xdWV1ZV9wcm9jKHN0cnVjdCBmaWxlICpmaWxlLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQsCi0JCQkJIHBvbGxfdGFibGUgKnB0KQotewotCXN0cnVjdCBlcGl0ZW0gKmVwaSA9IGVwX2l0ZW1fZnJvbV9lcHF1ZXVlKHB0KTsKLQlzdHJ1Y3QgZXBwb2xsX2VudHJ5ICpwd3E7Ci0KLQlpZiAoZXBpLT5ud2FpdCA+PSAwICYmIChwd3EgPSBrbWVtX2NhY2hlX2FsbG9jKHB3cV9jYWNoZSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJnB3cS0+d2FpdCwgZXBfcG9sbF9jYWxsYmFjayk7Ci0JCXB3cS0+d2hlYWQgPSB3aGVhZDsKLQkJcHdxLT5iYXNlID0gZXBpOwotCQlhZGRfd2FpdF9xdWV1ZSh3aGVhZCwgJnB3cS0+d2FpdCk7Ci0JCWxpc3RfYWRkX3RhaWwoJnB3cS0+bGxpbmssICZlcGktPnB3cWxpc3QpOwotCQllcGktPm53YWl0Kys7Ci0JfSBlbHNlIHsKLQkJLyogV2UgaGF2ZSB0byBzaWduYWwgdGhhdCBhbiBlcnJvciBvY2N1cnJlZCAqLwotCQllcGktPm53YWl0ID0gLTE7Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkIGVwX3JidHJlZV9pbnNlcnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSkKLXsKLQlpbnQga2NtcDsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmZXAtPnJici5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgZXBpdGVtICplcGljOwotCi0Jd2hpbGUgKCpwKSB7Ci0JCXBhcmVudCA9ICpwOwotCQllcGljID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgZXBpdGVtLCByYm4pOwotCQlrY21wID0gZXBfY21wX2ZmZCgmZXBpLT5mZmQsICZlcGljLT5mZmQpOwotCQlpZiAoa2NtcCA+IDApCi0JCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7Ci0JCWVsc2UKLQkJCXAgPSAmcGFyZW50LT5yYl9sZWZ0OwotCX0KLQlyYl9saW5rX25vZGUoJmVwaS0+cmJuLCBwYXJlbnQsIHApOwotCXJiX2luc2VydF9jb2xvcigmZXBpLT5yYm4sICZlcC0+cmJyKTsKLX0KLQotCi1zdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50ICpldmVudCwKLQkJICAgICBzdHJ1Y3QgZmlsZSAqdGZpbGUsIGludCBmZCkKLXsKLQlpbnQgZXJyb3IsIHJldmVudHMsIHB3YWtlID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBlcGl0ZW0gKmVwaTsKLQlzdHJ1Y3QgZXBfcHF1ZXVlIGVwcTsKLQotCWVycm9yID0gLUVOT01FTTsKLQlpZiAoIShlcGkgPSBrbWVtX2NhY2hlX2FsbG9jKGVwaV9jYWNoZSwgR0ZQX0tFUk5FTCkpKQotCQlnb3RvIGVleGl0XzE7Ci0KLQkvKiBJdGVtIGluaXRpYWxpemF0aW9uIGZvbGxvdyBoZXJlIC4uLiAqLwotCWVwX3JiX2luaXRub2RlKCZlcGktPnJibik7Ci0JSU5JVF9MSVNUX0hFQUQoJmVwaS0+cmRsbGluayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmVwaS0+ZmxsaW5rKTsKLQlJTklUX0xJU1RfSEVBRCgmZXBpLT50eGxpbmspOwotCUlOSVRfTElTVF9IRUFEKCZlcGktPnB3cWxpc3QpOwotCWVwaS0+ZXAgPSBlcDsKLQllcF9zZXRfZmZkKCZlcGktPmZmZCwgdGZpbGUsIGZkKTsKLQllcGktPmV2ZW50ID0gKmV2ZW50OwotCWF0b21pY19zZXQoJmVwaS0+dXNlY250LCAxKTsKLQllcGktPm53YWl0ID0gMDsKLQotCS8qIEluaXRpYWxpemUgdGhlIHBvbGwgdGFibGUgdXNpbmcgdGhlIHF1ZXVlIGNhbGxiYWNrICovCi0JZXBxLmVwaSA9IGVwaTsKLQlpbml0X3BvbGxfZnVuY3B0cigmZXBxLnB0LCBlcF9wdGFibGVfcXVldWVfcHJvYyk7Ci0KLQkvKgotCSAqIEF0dGFjaCB0aGUgaXRlbSB0byB0aGUgcG9sbCBob29rcyBhbmQgZ2V0IGN1cnJlbnQgZXZlbnQgYml0cy4KLQkgKiBXZSBjYW4gc2FmZWx5IHVzZSB0aGUgZmlsZSogaGVyZSBiZWNhdXNlIGl0cyB1c2FnZSBjb3VudCBoYXMKLQkgKiBiZWVuIGluY3JlYXNlZCBieSB0aGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24uCi0JICovCi0JcmV2ZW50cyA9IHRmaWxlLT5mX29wLT5wb2xsKHRmaWxlLCAmZXBxLnB0KTsKLQotCS8qCi0JICogV2UgaGF2ZSB0byBjaGVjayBpZiBzb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgdGhlIHBvbGwgd2FpdCBxdWV1ZQotCSAqIGluc3RhbGwgcHJvY2Vzcy4gTmFtZWx5IGFuIGFsbG9jYXRpb24gZm9yIGEgd2FpdCBxdWV1ZSBmYWlsZWQgZHVlCi0JICogaGlnaCBtZW1vcnkgcHJlc3N1cmUuCi0JICovCi0JaWYgKGVwaS0+bndhaXQgPCAwKQotCQlnb3RvIGVleGl0XzI7Ci0KLQkvKiBBZGQgdGhlIGN1cnJlbnQgaXRlbSB0byB0aGUgbGlzdCBvZiBhY3RpdmUgZXBvbGwgaG9vayBmb3IgdGhpcyBmaWxlICovCi0Jc3Bpbl9sb2NrKCZ0ZmlsZS0+Zl9lcF9sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZlcGktPmZsbGluaywgJnRmaWxlLT5mX2VwX2xpbmtzKTsKLQlzcGluX3VubG9jaygmdGZpbGUtPmZfZXBfbG9jayk7Ci0KLQkvKiBXZSBoYXZlIHRvIGRyb3AgdGhlIG5ldyBpdGVtIGluc2lkZSBvdXIgaXRlbSBsaXN0IHRvIGtlZXAgdHJhY2sgb2YgaXQgKi8KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBBZGQgdGhlIGN1cnJlbnQgaXRlbSB0byB0aGUgcmItdHJlZSAqLwotCWVwX3JidHJlZV9pbnNlcnQoZXAsIGVwaSk7Ci0KLQkvKiBJZiB0aGUgZmlsZSBpcyBhbHJlYWR5ICJyZWFkeSIgd2UgZHJvcCBpdCBpbnNpZGUgdGhlIHJlYWR5IGxpc3QgKi8KLQlpZiAoKHJldmVudHMgJiBldmVudC0+ZXZlbnRzKSAmJiAhZXBfaXNfbGlua2VkKCZlcGktPnJkbGxpbmspKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmVwaS0+cmRsbGluaywgJmVwLT5yZGxsaXN0KTsKLQotCQkvKiBOb3RpZnkgd2FpdGluZyB0YXNrcyB0aGF0IGV2ZW50cyBhcmUgYXZhaWxhYmxlICovCi0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZlcC0+d3EpKQotCQkJX193YWtlX3VwX2xvY2tlZCgmZXAtPndxLCBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZlcC0+cG9sbF93YWl0KSkKLQkJCXB3YWtlKys7Ci0JfQotCi0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBXZSBoYXZlIHRvIGNhbGwgdGhpcyBvdXRzaWRlIHRoZSBsb2NrICovCi0JaWYgKHB3YWtlKQotCQllcF9wb2xsX3NhZmV3YWtlKCZwc3csICZlcC0+cG9sbF93YWl0KTsKLQotCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBlcF9pbnNlcnQoJXAsICVwLCAlZClcbiIsCi0JCSAgICAgY3VycmVudCwgZXAsIHRmaWxlLCBmZCkpOwotCi0JcmV0dXJuIDA7Ci0KLWVleGl0XzI6Ci0JZXBfdW5yZWdpc3Rlcl9wb2xsd2FpdChlcCwgZXBpKTsKLQotCS8qCi0JICogV2UgbmVlZCB0byBkbyB0aGlzIGJlY2F1c2UgYW4gZXZlbnQgY291bGQgaGF2ZSBiZWVuIGFycml2ZWQgb24gc29tZQotCSAqIGFsbG9jYXRlZCB3YWl0IHF1ZXVlLgotCSAqLwotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKLQlpZiAoZXBfaXNfbGlua2VkKCZlcGktPnJkbGxpbmspKQotCQllcF9saXN0X2RlbCgmZXBpLT5yZGxsaW5rKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKLQotCWttZW1fY2FjaGVfZnJlZShlcGlfY2FjaGUsIGVwaSk7Ci1lZXhpdF8xOgotCXJldHVybiBlcnJvcjsKLX0KLQotCi0vKgotICogTW9kaWZ5IHRoZSBpbnRlcmVzdCBldmVudCBtYXNrIGJ5IGRyb3BwaW5nIGFuIGV2ZW50IGlmIHRoZSBuZXcgbWFzawotICogaGFzIGEgbWF0Y2ggaW4gdGhlIGN1cnJlbnQgZmlsZSBzdGF0dXMuCi0gKi8KLXN0YXRpYyBpbnQgZXBfbW9kaWZ5KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksIHN0cnVjdCBlcG9sbF9ldmVudCAqZXZlbnQpCi17Ci0JaW50IHB3YWtlID0gMDsKLQl1bnNpZ25lZCBpbnQgcmV2ZW50czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiBTZXQgdGhlIG5ldyBldmVudCBpbnRlcmVzdCBtYXNrIGJlZm9yZSBjYWxsaW5nIGZfb3AtPnBvbGwoKSwgb3RoZXJ3aXNlCi0JICogYSBwb3RlbnRpYWwgcmFjZSBtaWdodCBvY2N1ci4gSW4gZmFjdCBpZiB3ZSBkbyB0aGlzIG9wZXJhdGlvbiBpbnNpZGUKLQkgKiB0aGUgbG9jaywgYW4gZXZlbnQgbWlnaHQgaGFwcGVuIGJldHdlZW4gdGhlIGZfb3AtPnBvbGwoKSBjYWxsIGFuZCB0aGUKLQkgKiBuZXcgZXZlbnQgc2V0IHJlZ2lzdGVyaW5nLgotCSAqLwotCWVwaS0+ZXZlbnQuZXZlbnRzID0gZXZlbnQtPmV2ZW50czsKLQotCS8qCi0JICogR2V0IGN1cnJlbnQgZXZlbnQgYml0cy4gV2UgY2FuIHNhZmVseSB1c2UgdGhlIGZpbGUqIGhlcmUgYmVjYXVzZQotCSAqIGl0cyB1c2FnZSBjb3VudCBoYXMgYmVlbiBpbmNyZWFzZWQgYnkgdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uLgotCSAqLwotCXJldmVudHMgPSBlcGktPmZmZC5maWxlLT5mX29wLT5wb2xsKGVwaS0+ZmZkLmZpbGUsIE5VTEwpOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOwotCi0JLyogQ29weSB0aGUgZGF0YSBtZW1iZXIgZnJvbSBpbnNpZGUgdGhlIGxvY2sgKi8KLQllcGktPmV2ZW50LmRhdGEgPSBldmVudC0+ZGF0YTsKLQotCS8qCi0JICogSWYgdGhlIGl0ZW0gaXMgbm90IGxpbmtlZCB0byB0aGUgaGFzaCBpdCBtZWFucyB0aGF0IGl0J3Mgb24gaXRzCi0JICogd2F5IHRvd2FyZCB0aGUgcmVtb3ZhbC4gRG8gbm90aGluZyBpbiB0aGlzIGNhc2UuCi0JICovCi0JaWYgKGVwX3JiX2xpbmtlZCgmZXBpLT5yYm4pKSB7Ci0JCS8qCi0JCSAqIElmIHRoZSBpdGVtIGlzICJob3QiIGFuZCBpdCBpcyBub3QgcmVnaXN0ZXJlZCBpbnNpZGUgdGhlIHJlYWR5Ci0JCSAqIGxpc3QsIHB1c2ggaXQgaW5zaWRlLiBJZiB0aGUgaXRlbSBpcyBub3QgImhvdCIgYW5kIGl0IGlzIGN1cnJlbnRseQotCQkgKiByZWdpc3RlcmVkIGluc2lkZSB0aGUgcmVhZHkgbGlzdCwgdW5saW5rIGl0LgotCQkgKi8KLQkJaWYgKHJldmVudHMgJiBldmVudC0+ZXZlbnRzKSB7Ci0JCQlpZiAoIWVwX2lzX2xpbmtlZCgmZXBpLT5yZGxsaW5rKSkgewotCQkJCWxpc3RfYWRkX3RhaWwoJmVwaS0+cmRsbGluaywgJmVwLT5yZGxsaXN0KTsKLQotCQkJCS8qIE5vdGlmeSB3YWl0aW5nIHRhc2tzIHRoYXQgZXZlbnRzIGFyZSBhdmFpbGFibGUgKi8KLQkJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPndxKSkKLQkJCQkJX193YWtlX3VwX2xvY2tlZCgmZXAtPndxLCBUQVNLX1VOSU5URVJSVVBUSUJMRSB8Ci0JCQkJCQkJIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmVwLT5wb2xsX3dhaXQpKQotCQkJCQlwd2FrZSsrOwotCQkJfQotCQl9Ci0JfQotCi0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBXZSBoYXZlIHRvIGNhbGwgdGhpcyBvdXRzaWRlIHRoZSBsb2NrICovCi0JaWYgKHB3YWtlKQotCQllcF9wb2xsX3NhZmV3YWtlKCZwc3csICZlcC0+cG9sbF93YWl0KTsKLQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXIgcG9sbCBjYWxsYmFja3MgZnJvbSB0aGUgYXNzb2NpYXRlZCBmaWxlIGRlc2NyaXB0b3IuCi0gKiBTaW5jZSB0aGlzIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgaG9sZGluZyAiZXAtPmxvY2siIHRoZSBhdG9taWMgZXhjaGFuZ2UgdHJpY2sKLSAqIHdpbGwgcHJvdGVjdCB1cyBmcm9tIG11bHRpcGxlIHVucmVnaXN0ZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSkKLXsKLQlpbnQgbndhaXQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbHN0aGVhZCA9ICZlcGktPnB3cWxpc3Q7Ci0Jc3RydWN0IGVwcG9sbF9lbnRyeSAqcHdxOwotCi0JLyogVGhpcyBpcyBjYWxsZWQgd2l0aG91dCBsb2Nrcywgc28gd2UgbmVlZCB0aGUgYXRvbWljIGV4Y2hhbmdlICovCi0JbndhaXQgPSB4Y2hnKCZlcGktPm53YWl0LCAwKTsKLQotCWlmIChud2FpdCkgewotCQl3aGlsZSAoIWxpc3RfZW1wdHkobHN0aGVhZCkpIHsKLQkJCXB3cSA9IGxpc3RfZW50cnkobHN0aGVhZC0+bmV4dCwgc3RydWN0IGVwcG9sbF9lbnRyeSwgbGxpbmspOwotCi0JCQllcF9saXN0X2RlbCgmcHdxLT5sbGluayk7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZShwd3EtPndoZWFkLCAmcHdxLT53YWl0KTsKLQkJCWttZW1fY2FjaGVfZnJlZShwd3FfY2FjaGUsIHB3cSk7Ci0JCX0KLQl9Ci19Ci0KLQotLyoKLSAqIFVubGluayB0aGUgInN0cnVjdCBlcGl0ZW0iIGZyb20gYWxsIHBsYWNlcyBpdCBtaWdodCBoYXZlIGJlZW4gaG9va2VkIHVwLgotICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHdyaXRlIElSUSBsb2NrIG9uICJlcC0+bG9jayIuCi0gKi8KLXN0YXRpYyBpbnQgZXBfdW5saW5rKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGkpCi17Ci0JaW50IGVycm9yOwotCi0JLyoKLQkgKiBJdCBjYW4gaGFwcGVuIHRoYXQgdGhpcyBvbmUgaXMgY2FsbGVkIGZvciBhbiBpdGVtIGFscmVhZHkgdW5saW5rZWQuCi0JICogVGhlIGNoZWNrIHByb3RlY3QgdXMgZnJvbSBkb2luZyBhIGRvdWJsZSB1bmxpbmsgKCBjcmFzaCApLgotCSAqLwotCWVycm9yID0gLUVOT0VOVDsKLQlpZiAoIWVwX3JiX2xpbmtlZCgmZXBpLT5yYm4pKQotCQlnb3RvIGVleGl0XzE7Ci0KLQkvKgotCSAqIENsZWFyIHRoZSBldmVudCBtYXNrIGZvciB0aGUgdW5saW5rZWQgaXRlbS4gVGhpcyB3aWxsIGF2b2lkIGl0ZW0KLQkgKiBub3RpZmljYXRpb25zIHRvIGJlIHNlbnQgYWZ0ZXIgdGhlIHVubGluayBvcGVyYXRpb24gZnJvbSBpbnNpZGUKLQkgKiB0aGUga2VybmVsLT51c2Vyc3BhY2UgZXZlbnQgdHJhbnNmZXIgbG9vcC4KLQkgKi8KLQllcGktPmV2ZW50LmV2ZW50cyA9IDA7Ci0KLQkvKgotCSAqIEF0IHRoaXMgcG9pbnQgaXMgc2FmZSB0byBkbyB0aGUgam9iLCB1bmxpbmsgdGhlIGl0ZW0gZnJvbSBvdXIgcmItdHJlZS4KLQkgKiBUaGlzIG9wZXJhdGlvbiB0b2doZXRlciB3aXRoIHRoZSBhYm92ZSBjaGVjayBjbG9zZXMgdGhlIGRvb3IgdG8KLQkgKiBkb3VibGUgdW5saW5rcy4KLQkgKi8KLQllcF9yYl9lcmFzZSgmZXBpLT5yYm4sICZlcC0+cmJyKTsKLQotCS8qCi0JICogSWYgdGhlIGl0ZW0gd2UgYXJlIGdvaW5nIHRvIHJlbW92ZSBpcyBpbnNpZGUgdGhlIHJlYWR5IGZpbGUgZGVzY3JpcHRvcnMKLQkgKiB3ZSB3YW50IHRvIHJlbW92ZSBpdCBmcm9tIHRoaXMgbGlzdCB0byBhdm9pZCBzdGFsZSBldmVudHMuCi0JICovCi0JaWYgKGVwX2lzX2xpbmtlZCgmZXBpLT5yZGxsaW5rKSkKLQkJZXBfbGlzdF9kZWwoJmVwaS0+cmRsbGluayk7Ci0KLQllcnJvciA9IDA7Ci1lZXhpdF8xOgotCi0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGVwX3VubGluayglcCwgJXApID0gJWRcbiIsCi0JCSAgICAgY3VycmVudCwgZXAsIGVwaS0+ZmZkLmZpbGUsIGVycm9yKSk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLQotLyoKLSAqIFJlbW92ZXMgYSAic3RydWN0IGVwaXRlbSIgZnJvbSB0aGUgZXZlbnRwb2xsIGhhc2ggYW5kIGRlYWxsb2NhdGVzCi0gKiBhbGwgdGhlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgotICovCi1zdGF0aWMgaW50IGVwX3JlbW92ZShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpKQotewotCWludCBlcnJvcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBmaWxlICpmaWxlID0gZXBpLT5mZmQuZmlsZTsKLQotCS8qCi0JICogUmVtb3ZlcyBwb2xsIHdhaXQgcXVldWUgaG9va3MuIFdlIF9oYXZlXyB0byBkbyB0aGlzIHdpdGhvdXQgaG9sZGluZwotCSAqIHRoZSAiZXAtPmxvY2siIG90aGVyd2lzZSBhIGRlYWRsb2NrIG1pZ2h0IG9jY3VyLiBUaGlzIGJlY2F1c2Ugb2YgdGhlCi0JICogc2VxdWVuY2Ugb2YgdGhlIGxvY2sgYWNxdWlzaXRpb24uIEhlcmUgd2UgZG8gImVwLT5sb2NrIiB0aGVuIHRoZSB3YWl0Ci0JICogcXVldWUgaGVhZCBsb2NrIHdoZW4gdW5yZWdpc3RlcmluZyB0aGUgd2FpdCBxdWV1ZS4gVGhlIHdha2V1cCBjYWxsYmFjawotCSAqIHdpbGwgcnVuIGJ5IGhvbGRpbmcgdGhlIHdhaXQgcXVldWUgaGVhZCBsb2NrIGFuZCB3aWxsIGNhbGwgb3VyIGNhbGxiYWNrCi0JICogdGhhdCB3aWxsIHRyeSB0byBnZXQgImVwLT5sb2NrIi4KLQkgKi8KLQllcF91bnJlZ2lzdGVyX3BvbGx3YWl0KGVwLCBlcGkpOwotCi0JLyogUmVtb3ZlIHRoZSBjdXJyZW50IGl0ZW0gZnJvbSB0aGUgbGlzdCBvZiBlcG9sbCBob29rcyAqLwotCXNwaW5fbG9jaygmZmlsZS0+Zl9lcF9sb2NrKTsKLQlpZiAoZXBfaXNfbGlua2VkKCZlcGktPmZsbGluaykpCi0JCWVwX2xpc3RfZGVsKCZlcGktPmZsbGluayk7Ci0Jc3Bpbl91bmxvY2soJmZpbGUtPmZfZXBfbG9jayk7Ci0KLQkvKiBXZSBuZWVkIHRvIGFjcXVpcmUgdGhlIHdyaXRlIElSUSBsb2NrIGJlZm9yZSBjYWxsaW5nIGVwX3VubGluaygpICovCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOwotCi0JLyogUmVhbGx5IHVubGluayB0aGUgaXRlbSBmcm9tIHRoZSBoYXNoICovCi0JZXJyb3IgPSBlcF91bmxpbmsoZXAsIGVwaSk7Ci0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChlcnJvcikKLQkJZ290byBlZXhpdF8xOwotCi0JLyogQXQgdGhpcyBwb2ludCBpdCBpcyBzYWZlIHRvIGZyZWUgdGhlIGV2ZW50cG9sbCBpdGVtICovCi0JZXBfcmVsZWFzZV9lcGl0ZW0oZXBpKTsKLQotCWVycm9yID0gMDsKLWVleGl0XzE6Ci0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGVwX3JlbW92ZSglcCwgJXApID0gJWRcbiIsCi0JCSAgICAgY3VycmVudCwgZXAsIGZpbGUsIGVycm9yKSk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB3YWl0IHF1ZXVlIHdha2V1cAotICogbWFjaGFuaXNtLiBJdCBpcyBjYWxsZWQgYnkgdGhlIHN0b3JlZCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gdGhleQotICogaGF2ZSBldmVudHMgdG8gcmVwb3J0LgotICovCi1zdGF0aWMgaW50IGVwX3BvbGxfY2FsbGJhY2sod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KQotewotCWludCBwd2FrZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZXBpdGVtICplcGkgPSBlcF9pdGVtX2Zyb21fd2FpdCh3YWl0KTsKLQlzdHJ1Y3QgZXZlbnRwb2xsICplcCA9IGVwaS0+ZXA7Ci0KLQlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogcG9sbF9jYWxsYmFjayglcCkgZXBpPSVwIGVwPSVwXG4iLAotCQkgICAgIGN1cnJlbnQsIGVwaS0+ZmZkLmZpbGUsIGVwaSwgZXApKTsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogSWYgdGhlIGV2ZW50IG1hc2sgZG9lcyBub3QgY29udGFpbiBhbnkgcG9sbCgyKSBldmVudCwgd2UgY29uc2lkZXIgdGhlCi0JICogZGVzY3JpcHRvciB0byBiZSBkaXNhYmxlZC4gVGhpcyBjb25kaXRpb24gaXMgbGlrZWx5IHRoZSBlZmZlY3Qgb2YgdGhlCi0JICogRVBPTExPTkVTSE9UIGJpdCB0aGF0IGRpc2FibGVzIHRoZSBkZXNjcmlwdG9yIHdoZW4gYW4gZXZlbnQgaXMgcmVjZWl2ZWQsCi0JICogdW50aWwgdGhlIG5leHQgRVBPTExfQ1RMX01PRCB3aWxsIGJlIGlzc3VlZC4KLQkgKi8KLQlpZiAoIShlcGktPmV2ZW50LmV2ZW50cyAmIH5FUF9QUklWQVRFX0JJVFMpKQotCQlnb3RvIGlzX2Rpc2FibGVkOwotCi0JLyogSWYgdGhpcyBmaWxlIGlzIGFscmVhZHkgaW4gdGhlIHJlYWR5IGxpc3Qgd2UgZXhpdCBzb29uICovCi0JaWYgKGVwX2lzX2xpbmtlZCgmZXBpLT5yZGxsaW5rKSkKLQkJZ290byBpc19saW5rZWQ7Ci0KLQlsaXN0X2FkZF90YWlsKCZlcGktPnJkbGxpbmssICZlcC0+cmRsbGlzdCk7Ci0KLWlzX2xpbmtlZDoKLQkvKgotCSAqIFdha2UgdXAgKCBpZiBhY3RpdmUgKSBib3RoIHRoZSBldmVudHBvbGwgd2FpdCBsaXN0IGFuZCB0aGUgLT5wb2xsKCkKLQkgKiB3YWl0IGxpc3QuCi0JICovCi0JaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmVwLT53cSkpCi0JCV9fd2FrZV91cF9sb2NrZWQoJmVwLT53cSwgVEFTS19VTklOVEVSUlVQVElCTEUgfAotCQkJCSBUQVNLX0lOVEVSUlVQVElCTEUpOwotCWlmICh3YWl0cXVldWVfYWN0aXZlKCZlcC0+cG9sbF93YWl0KSkKLQkJcHdha2UrKzsKLQotaXNfZGlzYWJsZWQ6Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBXZSBoYXZlIHRvIGNhbGwgdGhpcyBvdXRzaWRlIHRoZSBsb2NrICovCi0JaWYgKHB3YWtlKQotCQllcF9wb2xsX3NhZmV3YWtlKCZwc3csICZlcC0+cG9sbF93YWl0KTsKLQotCXJldHVybiAxOwotfQotCi0KLXN0YXRpYyBpbnQgZXBfZXZlbnRwb2xsX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBldmVudHBvbGwgKmVwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKGVwKSB7Ci0JCWVwX2ZyZWUoZXApOwotCQlrZnJlZShlcCk7Ci0JfQotCi0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGNsb3NlKCkgZXA9JXBcbiIsIGN1cnJlbnQsIGVwKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGludCBlcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKLXsKLQl1bnNpZ25lZCBpbnQgcG9sbGZsYWdzID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBldmVudHBvbGwgKmVwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JLyogSW5zZXJ0IGluc2lkZSBvdXIgcG9sbCB3YWl0IHF1ZXVlICovCi0JcG9sbF93YWl0KGZpbGUsICZlcC0+cG9sbF93YWl0LCB3YWl0KTsKLQotCS8qIENoZWNrIG91ciBjb25kaXRpb24gKi8KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5yZGxsaXN0KSkKLQkJcG9sbGZsYWdzID0gUE9MTElOIHwgUE9MTFJETk9STTsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHBvbGxmbGFnczsKLX0KLQotCi0vKgotICogU2luY2Ugd2UgaGF2ZSB0byByZWxlYXNlIHRoZSBsb2NrIGR1cmluZyB0aGUgX19jb3B5X3RvX3VzZXIoKSBvcGVyYXRpb24gYW5kCi0gKiBkdXJpbmcgdGhlIGZfb3AtPnBvbGwoKSBjYWxsLCB3ZSB0cnkgdG8gY29sbGVjdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMKLSAqIGJ5IHJlZHVjaW5nIHRoZSBpcnFsb2NrL2lycXVubG9jayBzd2l0Y2hpbmcgcmF0ZS4KLSAqLwotc3RhdGljIGludCBlcF9jb2xsZWN0X3JlYWR5X2l0ZW1zKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgbGlzdF9oZWFkICp0eGxpc3QsIGludCBtYXhldmVudHMpCi17Ci0JaW50IG5lcGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsc3RoZWFkID0gJmVwLT5yZGxsaXN0LCAqbG5rOwotCXN0cnVjdCBlcGl0ZW0gKmVwaTsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKLQotCWZvciAobmVwaSA9IDAsIGxuayA9IGxzdGhlYWQtPm5leHQ7IGxuayAhPSBsc3RoZWFkICYmIG5lcGkgPCBtYXhldmVudHM7KSB7Ci0JCWVwaSA9IGxpc3RfZW50cnkobG5rLCBzdHJ1Y3QgZXBpdGVtLCByZGxsaW5rKTsKLQotCQlsbmsgPSBsbmstPm5leHQ7Ci0KLQkJLyogSWYgdGhpcyBmaWxlIGlzIGFscmVhZHkgaW4gdGhlIHJlYWR5IGxpc3Qgd2UgZXhpdCBzb29uICovCi0JCWlmICghZXBfaXNfbGlua2VkKCZlcGktPnR4bGluaykpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGlzIGluaXRpYWxpemVkIGluIHRoaXMgd2F5IHNvIHRoYXQgdGhlIGRlZmF1bHQKLQkJCSAqIGJlaGF2aW91ciBvZiB0aGUgcmVpbmplY3RpbmcgY29kZSB3aWxsIGJlIHRvIHB1c2ggYmFjawotCQkJICogdGhlIGl0ZW0gaW5zaWRlIHRoZSByZWFkeSBsaXN0LgotCQkJICovCi0JCQllcGktPnJldmVudHMgPSBlcGktPmV2ZW50LmV2ZW50czsKLQotCQkJLyogTGluayB0aGUgcmVhZHkgaXRlbSBpbnRvIHRoZSB0cmFuc2ZlciBsaXN0ICovCi0JCQlsaXN0X2FkZCgmZXBpLT50eGxpbmssIHR4bGlzdCk7Ci0JCQluZXBpKys7Ci0KLQkJCS8qCi0JCQkgKiBVbmxpbmsgdGhlIGl0ZW0gZnJvbSB0aGUgcmVhZHkgbGlzdC4KLQkJCSAqLwotCQkJZXBfbGlzdF9kZWwoJmVwaS0+cmRsbGluayk7Ci0JCX0KLQl9Ci0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiBuZXBpOwotfQotCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgdGhlICJlcC0+bG9jayIgc2luY2UgdGhlIGNhbGwgdG8KLSAqIF9fY29weV90b191c2VyKCkgbWlnaHQgc2xlZXAsIGFuZCBhbHNvIGZfb3AtPnBvbGwoKSBtaWdodCByZWVuYWJsZSB0aGUgSVJRCi0gKiBiZWNhdXNlIG9mIHRoZSB3YXkgcG9sbCgpIGlzIHRyYWRpdGlvbmFsbHkgaW1wbGVtZW50ZWQgaW4gTGludXguCi0gKi8KLXN0YXRpYyBpbnQgZXBfc2VuZF9ldmVudHMoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBsaXN0X2hlYWQgKnR4bGlzdCwKLQkJCSAgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzKQotewotCWludCBldmVudGNudCA9IDA7Ci0JdW5zaWduZWQgaW50IHJldmVudHM7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbG5rOwotCXN0cnVjdCBlcGl0ZW0gKmVwaTsKLQotCS8qCi0JICogV2UgY2FuIGxvb3Agd2l0aG91dCBsb2NrIGJlY2F1c2UgdGhpcyBpcyBhIHRhc2sgcHJpdmF0ZSBsaXN0LgotCSAqIFRoZSB0ZXN0IGRvbmUgZHVyaW5nIHRoZSBjb2xsZWN0aW9uIGxvb3Agd2lsbCBndWFyYW50ZWUgdXMgdGhhdAotCSAqIGFub3RoZXIgdGFzayB3aWxsIG5vdCB0cnkgdG8gY29sbGVjdCB0aGlzIGZpbGUuIEFsc28sIGl0ZW1zCi0JICogY2Fubm90IHZhbmlzaCBkdXJpbmcgdGhlIGxvb3AgYmVjYXVzZSB3ZSBhcmUgaG9sZGluZyAic2VtIi4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoKGxuaywgdHhsaXN0KSB7Ci0JCWVwaSA9IGxpc3RfZW50cnkobG5rLCBzdHJ1Y3QgZXBpdGVtLCB0eGxpbmspOwotCi0JCS8qCi0JCSAqIEdldCB0aGUgcmVhZHkgZmlsZSBldmVudCBzZXQuIFdlIGNhbiBzYWZlbHkgdXNlIHRoZSBmaWxlCi0JCSAqIGJlY2F1c2Ugd2UgYXJlIGhvbGRpbmcgdGhlICJzZW0iIGluIHJlYWQgYW5kIHRoaXMgd2lsbAotCQkgKiBndWFyYW50ZWUgdGhhdCBib3RoIHRoZSBmaWxlIGFuZCB0aGUgaXRlbSB3aWxsIG5vdCB2YW5pc2guCi0JCSAqLwotCQlyZXZlbnRzID0gZXBpLT5mZmQuZmlsZS0+Zl9vcC0+cG9sbChlcGktPmZmZC5maWxlLCBOVUxMKTsKLQotCQkvKgotCQkgKiBTZXQgdGhlIHJldHVybiBldmVudCBzZXQgZm9yIHRoZSBjdXJyZW50IGZpbGUgZGVzY3JpcHRvci4KLQkJICogTm90ZSB0aGF0IG9ubHkgdGhlIHRhc2sgdGFzayB3YXMgc3VjY2Vzc2Z1bGx5IGFibGUgdG8gbGluawotCQkgKiB0aGUgaXRlbSB0byBpdHMgInR4bGlzdCIgd2lsbCB3cml0ZSB0aGlzIGZpZWxkLgotCQkgKi8KLQkJZXBpLT5yZXZlbnRzID0gcmV2ZW50cyAmIGVwaS0+ZXZlbnQuZXZlbnRzOwotCi0JCWlmIChlcGktPnJldmVudHMpIHsKLQkJCWlmIChfX3B1dF91c2VyKGVwaS0+cmV2ZW50cywKLQkJCQkgICAgICAgJmV2ZW50c1tldmVudGNudF0uZXZlbnRzKSB8fAotCQkJICAgIF9fcHV0X3VzZXIoZXBpLT5ldmVudC5kYXRhLAotCQkJCSAgICAgICAmZXZlbnRzW2V2ZW50Y250XS5kYXRhKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmIChlcGktPmV2ZW50LmV2ZW50cyAmIEVQT0xMT05FU0hPVCkKLQkJCQllcGktPmV2ZW50LmV2ZW50cyAmPSBFUF9QUklWQVRFX0JJVFM7Ci0JCQlldmVudGNudCsrOwotCQl9Ci0JfQotCXJldHVybiBldmVudGNudDsKLX0KLQotCi0vKgotICogV2FsayB0aHJvdWdoIHRoZSB0cmFuc2ZlciBsaXN0IHdlIGNvbGxlY3RlZCB3aXRoIGVwX2NvbGxlY3RfcmVhZHlfaXRlbXMoKQotICogYW5kLCBpZiAxKSB0aGUgaXRlbSBpcyBzdGlsbCAiYWxpdmUiIDIpIGl0cyBldmVudCBzZXQgaXMgbm90IGVtcHR5IDMpIGl0J3MKLSAqIG5vdCBhbHJlYWR5IGxpbmtlZCwgbGlua3MgaXQgdG8gdGhlIHJlYWR5IGxpc3QuIFNhbWUgYXMgYWJvdmUsIHdlIGFyZSBob2xkaW5nCi0gKiAic2VtIiBzbyBpdGVtcyBjYW5ub3QgdmFuaXNoIHVuZGVybmVhdGggb3VyIG5vc2UuCi0gKi8KLXN0YXRpYyB2b2lkIGVwX3JlaW5qZWN0X2l0ZW1zKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgbGlzdF9oZWFkICp0eGxpc3QpCi17Ci0JaW50IHJpY250ID0gMCwgcHdha2UgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGVwaXRlbSAqZXBpOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KHR4bGlzdCkpIHsKLQkJZXBpID0gbGlzdF9lbnRyeSh0eGxpc3QtPm5leHQsIHN0cnVjdCBlcGl0ZW0sIHR4bGluayk7Ci0KLQkJLyogVW5saW5rIHRoZSBjdXJyZW50IGl0ZW0gZnJvbSB0aGUgdHJhbnNmZXIgbGlzdCAqLwotCQllcF9saXN0X2RlbCgmZXBpLT50eGxpbmspOwotCi0JCS8qCi0JCSAqIElmIHRoZSBpdGVtIGlzIG5vIG1vcmUgbGlua2VkIHRvIHRoZSBpbnRlcmVzdCBzZXQsIHdlIGRvbid0Ci0JCSAqIGhhdmUgdG8gcHVzaCBpdCBpbnNpZGUgdGhlIHJlYWR5IGxpc3QgYmVjYXVzZSB0aGUgZm9sbG93aW5nCi0JCSAqIGVwX3JlbGVhc2VfZXBpdGVtKCkgaXMgZ29pbmcgdG8gZHJvcCBpdC4gQWxzbywgaWYgdGhlIGN1cnJlbnQKLQkJICogaXRlbSBpcyBzZXQgdG8gaGF2ZSBhbiBFZGdlIFRyaWdnZXJlZCBiZWhhdmlvdXIsIHdlIGRvbid0IGhhdmUKLQkJICogdG8gcHVzaCBpdCBiYWNrIGVpdGhlci4KLQkJICovCi0JCWlmIChlcF9yYl9saW5rZWQoJmVwaS0+cmJuKSAmJiAhKGVwaS0+ZXZlbnQuZXZlbnRzICYgRVBPTExFVCkgJiYKLQkJICAgIChlcGktPnJldmVudHMgJiBlcGktPmV2ZW50LmV2ZW50cykgJiYgIWVwX2lzX2xpbmtlZCgmZXBpLT5yZGxsaW5rKSkgewotCQkJbGlzdF9hZGRfdGFpbCgmZXBpLT5yZGxsaW5rLCAmZXAtPnJkbGxpc3QpOwotCQkJcmljbnQrKzsKLQkJfQotCX0KLQotCWlmIChyaWNudCkgewotCQkvKgotCQkgKiBXYWtlIHVwICggaWYgYWN0aXZlICkgYm90aCB0aGUgZXZlbnRwb2xsIHdhaXQgbGlzdCBhbmQgdGhlIC0+cG9sbCgpCi0JCSAqIHdhaXQgbGlzdC4KLQkJICovCi0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZlcC0+d3EpKQotCQkJX193YWtlX3VwX2xvY2tlZCgmZXAtPndxLCBUQVNLX1VOSU5URVJSVVBUSUJMRSB8Ci0JCQkJCSBUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPnBvbGxfd2FpdCkpCi0JCQlwd2FrZSsrOwotCX0KLQotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwotCi0JLyogV2UgaGF2ZSB0byBjYWxsIHRoaXMgb3V0c2lkZSB0aGUgbG9jayAqLwotCWlmIChwd2FrZSkKLQkJZXBfcG9sbF9zYWZld2FrZSgmcHN3LCAmZXAtPnBvbGxfd2FpdCk7Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIHRyYW5zZmVyIG9mIGV2ZW50cyB0byB1c2VyIHNwYWNlLgotICovCi1zdGF0aWMgaW50IGVwX2V2ZW50c190cmFuc2ZlcihzdHJ1Y3QgZXZlbnRwb2xsICplcCwKLQkJCSAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cywgaW50IG1heGV2ZW50cykKLXsKLQlpbnQgZXZlbnRjbnQgPSAwOwotCXN0cnVjdCBsaXN0X2hlYWQgdHhsaXN0OwotCi0JSU5JVF9MSVNUX0hFQUQoJnR4bGlzdCk7Ci0KLQkvKgotCSAqIFdlIG5lZWQgdG8gbG9jayB0aGlzIGJlY2F1c2Ugd2UgY291bGQgYmUgaGl0IGJ5Ci0JICogZXZlbnRwb2xsX3JlbGVhc2VfZmlsZSgpIGFuZCBlcG9sbF9jdGwoRVBPTExfQ1RMX0RFTCkuCi0JICovCi0JZG93bl9yZWFkKCZlcC0+c2VtKTsKLQotCS8qIENvbGxlY3QvZXh0cmFjdCByZWFkeSBpdGVtcyAqLwotCWlmIChlcF9jb2xsZWN0X3JlYWR5X2l0ZW1zKGVwLCAmdHhsaXN0LCBtYXhldmVudHMpID4gMCkgewotCQkvKiBCdWlsZCByZXN1bHQgc2V0IGluIHVzZXJzcGFjZSAqLwotCQlldmVudGNudCA9IGVwX3NlbmRfZXZlbnRzKGVwLCAmdHhsaXN0LCBldmVudHMpOwotCi0JCS8qIFJlaW5qZWN0IHJlYWR5IGl0ZW1zIGludG8gdGhlIHJlYWR5IGxpc3QgKi8KLQkJZXBfcmVpbmplY3RfaXRlbXMoZXAsICZ0eGxpc3QpOwotCX0KLQotCXVwX3JlYWQoJmVwLT5zZW0pOwotCi0JcmV0dXJuIGV2ZW50Y250OwotfQotCi0KLXN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLAotCQkgICBpbnQgbWF4ZXZlbnRzLCBsb25nIHRpbWVvdXQpCi17Ci0JaW50IHJlcywgZWF2YWlsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBqdGltZW91dDsKLQl3YWl0X3F1ZXVlX3Qgd2FpdDsKLQotCS8qCi0JICogQ2FsY3VsYXRlIHRoZSB0aW1lb3V0IGJ5IGNoZWNraW5nIGZvciB0aGUgImluZmluaXRlIiB2YWx1ZSAoIC0xICkKLQkgKiBhbmQgdGhlIG92ZXJmbG93IGNvbmRpdGlvbi4gVGhlIHBhc3NlZCB0aW1lb3V0IGlzIGluIG1pbGxpc2Vjb25kcywKLQkgKiB0aGF0IHdoeSAodCAqIEhaKSAvIDEwMDAuCi0JICovCi0JanRpbWVvdXQgPSAodGltZW91dCA8IDAgfHwgdGltZW91dCA+PSBFUF9NQVhfTVNUSU1FTykgPwotCQlNQVhfU0NIRURVTEVfVElNRU9VVCA6ICh0aW1lb3V0ICogSFogKyA5OTkpIC8gMTAwMDsKLQotcmV0cnk6Ci0Jd3JpdGVfbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOwotCi0JcmVzID0gMDsKLQlpZiAobGlzdF9lbXB0eSgmZXAtPnJkbGxpc3QpKSB7Ci0JCS8qCi0JCSAqIFdlIGRvbid0IGhhdmUgYW55IGF2YWlsYWJsZSBldmVudCB0byByZXR1cm4gdG8gdGhlIGNhbGxlci4KLQkJICogV2UgbmVlZCB0byBzbGVlcCBoZXJlLCBhbmQgd2Ugd2lsbCBiZSB3YWtlIHVwIGJ5Ci0JCSAqIGVwX3BvbGxfY2FsbGJhY2soKSB3aGVuIGV2ZW50cyB3aWxsIGJlY29tZSBhdmFpbGFibGUuCi0JCSAqLwotCQlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7Ci0JCV9fYWRkX3dhaXRfcXVldWUoJmVwLT53cSwgJndhaXQpOwotCi0JCWZvciAoOzspIHsKLQkJCS8qCi0JCQkgKiBXZSBkb24ndCB3YW50IHRvIHNsZWVwIGlmIHRoZSBlcF9wb2xsX2NhbGxiYWNrKCkgc2VuZHMgdXMKLQkJCSAqIGEgd2FrZXVwIGluIGJldHdlZW4uIFRoYXQncyB3aHkgd2Ugc2V0IHRoZSB0YXNrIHN0YXRlCi0JCQkgKiB0byBUQVNLX0lOVEVSUlVQVElCTEUgYmVmb3JlIGRvaW5nIHRoZSBjaGVja3MuCi0JCQkgKi8KLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5yZGxsaXN0KSB8fCAhanRpbWVvdXQpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCQlyZXMgPSAtRUlOVFI7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwotCQkJanRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KGp0aW1lb3V0KTsKLQkJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKLQkJfQotCQlfX3JlbW92ZV93YWl0X3F1ZXVlKCZlcC0+d3EsICZ3YWl0KTsKLQotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCX0KLQotCS8qIElzIGl0IHdvcnRoIHRvIHRyeSB0byBkaWcgZm9yIGV2ZW50cyA/ICovCi0JZWF2YWlsID0gIWxpc3RfZW1wdHkoJmVwLT5yZGxsaXN0KTsKLQotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBUcnkgdG8gdHJhbnNmZXIgZXZlbnRzIHRvIHVzZXIgc3BhY2UuIEluIGNhc2Ugd2UgZ2V0IDAgZXZlbnRzIGFuZAotCSAqIHRoZXJlJ3Mgc3RpbGwgdGltZW91dCBsZWZ0IG92ZXIsIHdlIGdvIHRyeWluZyBhZ2FpbiBpbiBzZWFyY2ggb2YKLQkgKiBtb3JlIGx1Y2suCi0JICovCi0JaWYgKCFyZXMgJiYgZWF2YWlsICYmCi0JICAgICEocmVzID0gZXBfZXZlbnRzX3RyYW5zZmVyKGVwLCBldmVudHMsIG1heGV2ZW50cykpICYmIGp0aW1lb3V0KQotCQlnb3RvIHJldHJ5OwotCi0JcmV0dXJuIHJlczsKLX0KLQotCi1zdGF0aWMgaW50IGV2ZW50cG9sbGZzX2RlbGV0ZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCi0JcmV0dXJuIDE7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBpbm9kZSAqZXBfZXZlbnRwb2xsX2lub2RlKHZvaWQpCi17Ci0JaW50IGVycm9yID0gLUVOT01FTTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKGV2ZW50cG9sbF9tbnQtPm1udF9zYik7Ci0KLQlpZiAoIWlub2RlKQotCQlnb3RvIGVleGl0XzE7Ci0KLQlpbm9kZS0+aV9mb3AgPSAmZXZlbnRwb2xsX2ZvcHM7Ci0KLQkvKgotCSAqIE1hcmsgdGhlIGlub2RlIGRpcnR5IGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nLAotCSAqIHRoYXQgd2F5IGl0IHdpbGwgbmV2ZXIgYmUgbW92ZWQgdG8gdGhlIGRpcnR5Ci0JICogbGlzdCBiZWNhdXNlIG1hcmtfaW5vZGVfZGlydHkoKSB3aWxsIHRoaW5rCi0JICogdGhhdCBpdCBhbHJlYWR5IF9pc18gb24gdGhlIGRpcnR5IGxpc3QuCi0JICovCi0JaW5vZGUtPmlfc3RhdGUgPSBJX0RJUlRZOwotCWlub2RlLT5pX21vZGUgPSBTX0lSVVNSIHwgU19JV1VTUjsKLQlpbm9kZS0+aV91aWQgPSBjdXJyZW50LT5mc3VpZDsKLQlpbm9kZS0+aV9naWQgPSBjdXJyZW50LT5mc2dpZDsKLQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JcmV0dXJuIGlub2RlOwotCi1lZXhpdF8xOgotCXJldHVybiBFUlJfUFRSKGVycm9yKTsKLX0KLQotCi1zdGF0aWMgaW50Ci1ldmVudHBvbGxmc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsIGludCBmbGFncywKLQkJICAgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQotewotCXJldHVybiBnZXRfc2JfcHNldWRvKGZzX3R5cGUsICJldmVudHBvbGw6IiwgTlVMTCwgRVZFTlRQT0xMRlNfTUFHSUMsCi0JCQkgICAgIG1udCk7Ci19Ci0KLQogc3RhdGljIGludCBfX2luaXQgZXZlbnRwb2xsX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyb3I7Ci0KIAltdXRleF9pbml0KCZlcG11dGV4KTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB1c2VkIHRvIHBlcmZvcm0gc2FmZSBwb2xsIHdhaXQgaGVhZCB3YWtlIHVwcyAqLwpAQCAtMTY3NiwzOSArMTMzMSw3IEBACiAJCQlzaXplb2Yoc3RydWN0IGVwcG9sbF9lbnRyeSksIDAsCiAJCQlFUElfU0xBQl9ERUJVR3xTTEFCX1BBTklDLCBOVUxMLCBOVUxMKTsKIAotCS8qCi0JICogUmVnaXN0ZXIgdGhlIHZpcnR1YWwgZmlsZSBzeXN0ZW0gdGhhdCB3aWxsIGJlIHRoZSBzb3VyY2Ugb2YgaW5vZGVzCi0JICogZm9yIHRoZSBldmVudHBvbGwgZmlsZXMKLQkgKi8KLQllcnJvciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmV2ZW50cG9sbF9mc190eXBlKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZXBhbmljOwotCi0JLyogTW91bnQgdGhlIGFib3ZlIGNvbW1lbnRlZCB2aXJ0dWFsIGZpbGUgc3lzdGVtICovCi0JZXZlbnRwb2xsX21udCA9IGtlcm5fbW91bnQoJmV2ZW50cG9sbF9mc190eXBlKTsKLQllcnJvciA9IFBUUl9FUlIoZXZlbnRwb2xsX21udCk7Ci0JaWYgKElTX0VSUihldmVudHBvbGxfbW50KSkKLQkJZ290byBlcGFuaWM7Ci0KLQlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLlxuIiwKLQkJCWN1cnJlbnQpKTsKIAlyZXR1cm4gMDsKLQotZXBhbmljOgotCXBhbmljKCJldmVudHBvbGxfaW5pdCgpIGZhaWxlZFxuIik7CiB9Citmc19pbml0Y2FsbChldmVudHBvbGxfaW5pdCk7CiAKLQotc3RhdGljIHZvaWQgX19leGl0IGV2ZW50cG9sbF9leGl0KHZvaWQpCi17Ci0JLyogVW5kbyBhbGwgb3BlcmF0aW9ucyBkb25lIGluc2lkZSBldmVudHBvbGxfaW5pdCgpICovCi0JdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZldmVudHBvbGxfZnNfdHlwZSk7Ci0JbW50cHV0KGV2ZW50cG9sbF9tbnQpOwotCWttZW1fY2FjaGVfZGVzdHJveShwd3FfY2FjaGUpOwotCWttZW1fY2FjaGVfZGVzdHJveShlcGlfY2FjaGUpOwotfQotCi1tb2R1bGVfaW5pdChldmVudHBvbGxfaW5pdCk7Ci1tb2R1bGVfZXhpdChldmVudHBvbGxfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCAzMTU1ZTkxLi5mMjA1NjFmIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHNhY2N0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9jbl9wcm9jLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWxmZC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KQEAgLTU5LDcgKzYwLDcgQEAKICNlbmRpZgogCiBpbnQgY29yZV91c2VzX3BpZDsKLWNoYXIgY29yZV9wYXR0ZXJuWzEyOF0gPSAiY29yZSI7CitjaGFyIGNvcmVfcGF0dGVybltDT1JFTkFNRV9NQVhfU0laRV0gPSAiY29yZSI7CiBpbnQgc3VpZF9kdW1wYWJsZSA9IDA7CiAKIEVYUE9SVF9TWU1CT0woc3VpZF9kdW1wYWJsZSk7CkBAIC0xMDAsNiArMTAxLDcgQEAKIAl3aGlsZSAoKnRtcCkgewogCQlpZiAoZm10ID09ICp0bXApIHsKIAkJCSp0bXAgPSBmbXQtPm5leHQ7CisJCQlmbXQtPm5leHQgPSBOVUxMOwogCQkJd3JpdGVfdW5sb2NrKCZiaW5mbXRfbG9jayk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTMyLDYgKzEzNCw5IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAorCWVycm9yID0gLUVBQ0NFUzsKKwlpZiAobmQubW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9FWEVDKQorCQlnb3RvIGV4aXQ7CiAJZXJyb3IgPSAtRUlOVkFMOwogCWlmICghU19JU1JFRyhuZC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCiAJCWdvdG8gZXhpdDsKQEAgLTU4MSw2ICs1ODYsMTMgQEAKIAlpbnQgY291bnQ7CiAKIAkvKgorCSAqIFRlbGwgYWxsIHRoZSBzaWdoYW5kIGxpc3RlbmVycyB0aGF0IHRoaXMgc2lnaGFuZCBoYXMKKwkgKiBiZWVuIGRldGFjaGVkLiBUaGUgc2lnbmFsZmRfZGV0YWNoKCkgZnVuY3Rpb24gZ3JhYnMgdGhlCisJICogc2lnaGFuZCBsb2NrLCBpZiBzaWduYWwgbGlzdGVuZXJzIGFyZSBwcmVzZW50IG9uIHRoZSBzaWdoYW5kLgorCSAqLworCXNpZ25hbGZkX2RldGFjaCh0c2spOworCisJLyoKIAkgKiBJZiB3ZSBkb24ndCBzaGFyZSBzaWdoYW5kbGVycywgdGhlbiB3ZSBhcmVuJ3Qgc2hhcmluZyBhbnl0aGluZwogCSAqIGFuZCB3ZSBjYW4ganVzdCByZS11c2UgaXQgYWxsLgogCSAqLwpAQCAtNzAxLDcgKzcxMyw3IEBACiAJCSAqLwogCQlkZXRhY2hfcGlkKHRzaywgUElEVFlQRV9QSUQpOwogCQl0c2stPnBpZCA9IGxlYWRlci0+cGlkOwotCQlhdHRhY2hfcGlkKHRzaywgUElEVFlQRV9QSUQsICB0c2stPnBpZCk7CisJCWF0dGFjaF9waWQodHNrLCBQSURUWVBFX1BJRCwgIGZpbmRfcGlkKHRzay0+cGlkKSk7CiAJCXRyYW5zZmVyX3BpZChsZWFkZXIsIHRzaywgUElEVFlQRV9QR0lEKTsKIAkJdHJhbnNmZXJfcGlkKGxlYWRlciwgdHNrLCBQSURUWVBFX1NJRCk7CiAJCWxpc3RfcmVwbGFjZV9yY3UoJmxlYWRlci0+dGFza3MsICZ0c2stPnRhc2tzKTsKQEAgLTc1Niw4ICs3NjgsNyBAQAogCQlzcGluX3VubG9jaygmb2xkc2lnaGFuZC0+c2lnbG9jayk7CiAJCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCi0JCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZvbGRzaWdoYW5kLT5jb3VudCkpCi0JCQlrbWVtX2NhY2hlX2ZyZWUoc2lnaGFuZF9jYWNoZXAsIG9sZHNpZ2hhbmQpOworCQlfX2NsZWFudXBfc2lnaGFuZChvbGRzaWdoYW5kKTsKIAl9CiAKIAlCVUdfT04oIXRocmVhZF9ncm91cF9sZWFkZXIodHNrKSk7CkBAIC05ODIsMzMgKzk5Myw1MSBAQAogCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwogCXNlY3VyaXR5X2Jwcm1fcG9zdF9hcHBseV9jcmVkcyhicHJtKTsKIH0KLQogRVhQT1JUX1NZTUJPTChjb21wdXRlX2NyZWRzKTsKIAorLyoKKyAqIEFyZ3VtZW50cyBhcmUgJ1wwJyBzZXBhcmF0ZWQgc3RyaW5ncyBmb3VuZCBhdCB0aGUgbG9jYXRpb24gYnBybS0+cAorICogcG9pbnRzIHRvOyBjaG9wIG9mZiB0aGUgZmlyc3QgYnkgcmVsb2NhdGluZyBicnBtLT5wIHRvIHJpZ2h0IGFmdGVyCisgKiB0aGUgZmlyc3QgJ1wwJyBlbmNvdW50ZXJlZC4KKyAqLwogdm9pZCByZW1vdmVfYXJnX3plcm8oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAlpZiAoYnBybS0+YXJnYykgewotCQl1bnNpZ25lZCBsb25nIG9mZnNldDsKLQkJY2hhciAqIGthZGRyOwotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJY2hhciBjaDsKIAotCQlvZmZzZXQgPSBicHJtLT5wICUgUEFHRV9TSVpFOwotCQlnb3RvIGluc2lkZTsKKwkJZG8geworCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4OworCQkJY2hhciAqa2FkZHI7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCQl3aGlsZSAoYnBybS0+cCsrLCAqKGthZGRyK29mZnNldCsrKSkgewotCQkJaWYgKG9mZnNldCAhPSBQQUdFX1NJWkUpCi0JCQkJY29udGludWU7Ci0JCQlvZmZzZXQgPSAwOwotCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwotaW5zaWRlOgotCQkJcGFnZSA9IGJwcm0tPnBhZ2VbYnBybS0+cC9QQUdFX1NJWkVdOworCQkJb2Zmc2V0ID0gYnBybS0+cCAmIH5QQUdFX01BU0s7CisJCQlpbmRleCA9IGJwcm0tPnAgPj4gUEFHRV9TSElGVDsKKworCQkJcGFnZSA9IGJwcm0tPnBhZ2VbaW5kZXhdOwogCQkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCX0KLQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworCisJCQkvKiBydW4gdGhyb3VnaCBwYWdlIHVudGlsIHdlIHJlYWNoIGVuZCBvciBmaW5kIE5VTCAqLworCQkJZG8geworCQkJCWNoID0gKihrYWRkciArIG9mZnNldCk7CisKKwkJCQkvKiBkaXNjYXJkIHRoYXQgY2hhcmFjdGVyLi4uICovCisJCQkJYnBybS0+cCsrOworCQkJCW9mZnNldCsrOworCQkJfSB3aGlsZSAob2Zmc2V0IDwgUEFHRV9TSVpFICYmIGNoICE9ICdcMCcpOworCisJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisKKwkJCS8qIGZyZWUgdGhlIG9sZCBwYWdlICovCisJCQlpZiAob2Zmc2V0ID09IFBBR0VfU0laRSkgeworCQkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQkJCWJwcm0tPnBhZ2VbaW5kZXhdID0gTlVMTDsKKwkJCX0KKwkJfSB3aGlsZSAoY2ggIT0gJ1wwJyk7CisKIAkJYnBybS0+YXJnYy0tOwogCX0KIH0KLQogRVhQT1JUX1NZTUJPTChyZW1vdmVfYXJnX3plcm8pOwogCiAvKgpAQCAtMTIzOCw4ICsxMjY3LDYgQEAKIAogRVhQT1JUX1NZTUJPTChzZXRfYmluZm10KTsKIAotI2RlZmluZSBDT1JFTkFNRV9NQVhfU0laRSA2NAotCiAvKiBmb3JtYXRfY29yZW5hbWUgd2lsbCBpbnNwZWN0IHRoZSBwYXR0ZXJuIHBhcmFtZXRlciwgYW5kIG91dHB1dCBhCiAgKiBuYW1lIGludG8gY29yZW5hbWUsIHdoaWNoIG11c3QgaGF2ZSBzcGFjZSBmb3IgYXQgbGVhc3QKICAqIENPUkVOQU1FX01BWF9TSVpFIGJ5dGVzIHBsdXMgb25lIGJ5dGUgZm9yIHRoZSB6ZXJvIHRlcm1pbmF0b3IuCkBAIC0xNDY5LDYgKzE0OTYsOCBAQAogCWludCBmbGFnID0gMDsKIAlpbnQgaXNwaXBlID0gMDsKIAorCWF1ZGl0X2NvcmVfZHVtcHMoc2lnbnIpOworCiAJYmluZm10ID0gY3VycmVudC0+YmluZm10OwogCWlmICghYmluZm10IHx8ICFiaW5mbXQtPmNvcmVfZHVtcCkKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZnMvZXhwb3J0ZnMvZXhwZnMuYyBiL2ZzL2V4cG9ydGZzL2V4cGZzLmMKaW5kZXggOTNlNzdjMy4uZTk4ZjZjZCAxMDA2NDQKLS0tIGEvZnMvZXhwb3J0ZnMvZXhwZnMuYworKysgYi9mcy9leHBvcnRmcy9leHBmcy5jCkBAIC0yLDcgKzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KIAogc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGV4cG9ydF9vcF9kZWZhdWx0OwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmMKaW5kZXggMWQxZTdlMy4uMmJmNDlkNyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9kaXIuYworKysgYi9mcy9leHQyL2Rpci5jCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpbmNsdWRlICJleHQyLmgiCiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKIHR5cGVkZWYgc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgZXh0Ml9kaXJlbnQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmgKaW5kZXggZTJhMGVhNS4uOWZkMGVjNSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9leHQyLmgKKysrIGIvZnMvZXh0Mi9leHQyLmgKQEAgLTEzMyw2ICsxMzMsNyBAQAogZXh0ZXJuIHZvaWQgZXh0Ml90cnVuY2F0ZSAoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBleHQyX3NldGF0dHIgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwogZXh0ZXJuIHZvaWQgZXh0Ml9zZXRfaW5vZGVfZmxhZ3Moc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gdm9pZCBleHQyX2dldF9pbm9kZV9mbGFncyhzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICopOwogCiAvKiBpb2N0bC5jICovCiBleHRlcm4gaW50IGV4dDJfaW9jdGwgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCmRpZmYgLS1naXQgYS9mcy9leHQyL2ZzeW5jLmMgYi9mcy9leHQyL2ZzeW5jLmMKaW5kZXggNzgwNmI5ZS4uZmM2NmM5MyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9mc3luYy5jCisrKyBiL2ZzL2V4dDIvZnN5bmMuYwpAQCAtMjMsNyArMjMsNiBAQAogICovCiAKICNpbmNsdWRlICJleHQyLmgiCi0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgkJLyogZm9yIHN5bmNfbWFwcGluZ19idWZmZXJzKCkgKi8KIAogCmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmMKaW5kZXggZGQ0ZTE0Yy4uMDA3OWIyYyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9pbm9kZS5jCisrKyBiL2ZzL2V4dDIvaW5vZGUuYwpAQCAtMTA1NSw2ICsxMDU1LDI1IEBACiAJCWlub2RlLT5pX2ZsYWdzIHw9IFNfRElSU1lOQzsKIH0KIAorLyogUHJvcGFnYXRlIGZsYWdzIGZyb20gaV9mbGFncyB0byBFWFQyX0koaW5vZGUpLT5pX2ZsYWdzICovCit2b2lkIGV4dDJfZ2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBleHQyX2lub2RlX2luZm8gKmVpKQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IGVpLT52ZnNfaW5vZGUuaV9mbGFnczsKKworCWVpLT5pX2ZsYWdzICY9IH4oRVhUMl9TWU5DX0ZMfEVYVDJfQVBQRU5EX0ZMfAorCQkJRVhUMl9JTU1VVEFCTEVfRkx8RVhUMl9OT0FUSU1FX0ZMfEVYVDJfRElSU1lOQ19GTCk7CisJaWYgKGZsYWdzICYgU19TWU5DKQorCQllaS0+aV9mbGFncyB8PSBFWFQyX1NZTkNfRkw7CisJaWYgKGZsYWdzICYgU19BUFBFTkQpCisJCWVpLT5pX2ZsYWdzIHw9IEVYVDJfQVBQRU5EX0ZMOworCWlmIChmbGFncyAmIFNfSU1NVVRBQkxFKQorCQllaS0+aV9mbGFncyB8PSBFWFQyX0lNTVVUQUJMRV9GTDsKKwlpZiAoZmxhZ3MgJiBTX05PQVRJTUUpCisJCWVpLT5pX2ZsYWdzIHw9IEVYVDJfTk9BVElNRV9GTDsKKwlpZiAoZmxhZ3MgJiBTX0RJUlNZTkMpCisJCWVpLT5pX2ZsYWdzIHw9IEVYVDJfRElSU1lOQ19GTDsKK30KKwogdm9pZCBleHQyX3JlYWRfaW5vZGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogewogCXN0cnVjdCBleHQyX2lub2RlX2luZm8gKmVpID0gRVhUMl9JKGlub2RlKTsKQEAgLTEwNzksOSArMTA5OCw5IEBACiAJfQogCWlub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUocmF3X2lub2RlLT5pX2xpbmtzX2NvdW50KTsKIAlpbm9kZS0+aV9zaXplID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX3NpemUpOwotCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9hdGltZSk7Ci0JaW5vZGUtPmlfY3RpbWUudHZfc2VjID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2N0aW1lKTsKLQlpbm9kZS0+aV9tdGltZS50dl9zZWMgPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfbXRpbWUpOworCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IChzaWduZWQpbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2F0aW1lKTsKKwlpbm9kZS0+aV9jdGltZS50dl9zZWMgPSAoc2lnbmVkKWxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9jdGltZSk7CisJaW5vZGUtPmlfbXRpbWUudHZfc2VjID0gKHNpZ25lZClsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfbXRpbWUpOwogCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSBpbm9kZS0+aV9tdGltZS50dl9uc2VjID0gaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9IDA7CiAJZWktPmlfZHRpbWUgPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfZHRpbWUpOwogCS8qIFdlIG5vdyBoYXZlIGVub3VnaCBmaWVsZHMgdG8gY2hlY2sgaWYgdGhlIGlub2RlIHdhcyBhY3RpdmUgb3Igbm90LgpAQCAtMTE4OCw2ICsxMjA3LDcgQEAKIAlpZiAoZWktPmlfc3RhdGUgJiBFWFQyX1NUQVRFX05FVykKIAkJbWVtc2V0KHJhd19pbm9kZSwgMCwgRVhUMl9TQihzYiktPnNfaW5vZGVfc2l6ZSk7CiAKKwlleHQyX2dldF9pbm9kZV9mbGFncyhlaSk7CiAJcmF3X2lub2RlLT5pX21vZGUgPSBjcHVfdG9fbGUxNihpbm9kZS0+aV9tb2RlKTsKIAlpZiAoISh0ZXN0X29wdChzYiwgTk9fVUlEMzIpKSkgewogCQlyYXdfaW5vZGUtPmlfdWlkX2xvdyA9IGNwdV90b19sZTE2KGxvd18xNl9iaXRzKHVpZCkpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pb2N0bC5jIGIvZnMvZXh0Mi9pb2N0bC5jCmluZGV4IDRiMDk5ZDMuLmU4NWM0ODIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaW9jdGwuYworKysgYi9mcy9leHQyL2lvY3RsLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBFWFQyX0lPQ19HRVRGTEFHUzoKKwkJZXh0Ml9nZXRfaW5vZGVfZmxhZ3MoZWkpOwogCQlmbGFncyA9IGVpLT5pX2ZsYWdzICYgRVhUMl9GTF9VU0VSX1ZJU0lCTEU7CiAJCXJldHVybiBwdXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKikgYXJnKTsKIAljYXNlIEVYVDJfSU9DX1NFVEZMQUdTOiB7CmRpZmYgLS1naXQgYS9mcy9leHQyL3N1cGVyLmMgYi9mcy9leHQyL3N1cGVyLmMKaW5kZXggNjg1YTFjMi4uMTYzMzdiZiAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9zdXBlci5jCisrKyBiL2ZzL2V4dDIvc3VwZXIuYwpAQCAtMTYwLDEzICsxNjAsMTEgQEAKIHsKIAlzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IChzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICopIGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikgewotCQlyd2xvY2tfaW5pdCgmZWktPmlfbWV0YV9sb2NrKTsKKwlyd2xvY2tfaW5pdCgmZWktPmlfbWV0YV9sb2NrKTsKICNpZmRlZiBDT05GSUdfRVhUMl9GU19YQVRUUgotCQlpbml0X3J3c2VtKCZlaS0+eGF0dHJfc2VtKTsKKwlpbml0X3J3c2VtKCZlaS0+eGF0dHJfc2VtKTsKICNlbmRpZgotCQlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwotCX0KKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogIAogc3RhdGljIGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYyBiL2ZzL2V4dDIveGF0dHJfc2VjdXJpdHkuYwppbmRleCBhMjY2MTI3Li5lYWEyM2QyIDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyX3NlY3VyaXR5LmMKKysrIGIvZnMvZXh0Mi94YXR0cl9zZWN1cml0eS5jCkBAIC02LDcgKzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9leHQyX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlICJ4YXR0ci5oIgpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0cl90cnVzdGVkLmMgYi9mcy9leHQyL3hhdHRyX3RydXN0ZWQuYwppbmRleCBmMjhhNmE0Li44M2VlMTQ5IDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyX3RydXN0ZWQuYworKysgYi9mcy9leHQyL3hhdHRyX3RydXN0ZWQuYwpAQCAtOSw3ICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnMuaD4KICNpbmNsdWRlICJ4YXR0ci5oIgogCmRpZmYgLS1naXQgYS9mcy9leHQzL2Rpci5jIGIvZnMvZXh0My9kaXIuYwppbmRleCA2NjVhZGVlLi44NTI4Njk4IDEwMDY0NAotLS0gYS9mcy9leHQzL2Rpci5jCisrKyBiL2ZzL2V4dDMvZGlyLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9qYmQuaD4KICNpbmNsdWRlIDxsaW51eC9leHQzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IGE1YjE1MGYuLmE2Y2I2MTcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0M19qYmQuaD4KICNpbmNsdWRlIDxsaW51eC9qYmQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KQEAgLTE3NjgsNyArMTc2Nyw2IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlpbnQgZXJyID0gMDsKLQl2b2lkICprYWRkcjsKIAogCWJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKIAlsZW5ndGggPSBibG9ja3NpemUgLSAob2Zmc2V0ICYgKGJsb2Nrc2l6ZSAtIDEpKTsKQEAgLTE3ODAsMTAgKzE3NzgsNyBAQAogCSAqLwogCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSAmJiB0ZXN0X29wdChpbm9kZS0+aV9zYiwgTk9CSCkgJiYKIAkgICAgIGV4dDNfc2hvdWxkX3dyaXRlYmFja19kYXRhKGlub2RlKSAmJiBQYWdlVXB0b2RhdGUocGFnZSkpIHsKLQkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCW1lbXNldChrYWRkciArIG9mZnNldCwgMCwgbGVuZ3RoKTsKLQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Ci0JCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwkJemVyb191c2VyX3BhZ2UocGFnZSwgb2Zmc2V0LCBsZW5ndGgsIEtNX1VTRVIwKTsKIAkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJCWdvdG8gdW5sb2NrOwogCX0KQEAgLTE4MzYsMTEgKzE4MzEsNyBAQAogCQkJZ290byB1bmxvY2s7CiAJfQogCi0Ja2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JbWVtc2V0KGthZGRyICsgb2Zmc2V0LCAwLCBsZW5ndGgpOwotCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQorCXplcm9fdXNlcl9wYWdlKHBhZ2UsIG9mZnNldCwgbGVuZ3RoLCBLTV9VU0VSMCk7CiAJQlVGRkVSX1RSQUNFKGJoLCAiemVyb2VkIGVuZCBvZiBibG9jayIpOwogCiAJZXJyID0gMDsKQEAgLTI1ODEsNiArMjU3MiwyNSBAQAogCQlpbm9kZS0+aV9mbGFncyB8PSBTX0RJUlNZTkM7CiB9CiAKKy8qIFByb3BhZ2F0ZSBmbGFncyBmcm9tIGlfZmxhZ3MgdG8gRVhUM19JKGlub2RlKS0+aV9mbGFncyAqLwordm9pZCBleHQzX2dldF9pbm9kZV9mbGFncyhzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvICplaSkKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBlaS0+dmZzX2lub2RlLmlfZmxhZ3M7CisKKwllaS0+aV9mbGFncyAmPSB+KEVYVDNfU1lOQ19GTHxFWFQzX0FQUEVORF9GTHwKKwkJCUVYVDNfSU1NVVRBQkxFX0ZMfEVYVDNfTk9BVElNRV9GTHxFWFQzX0RJUlNZTkNfRkwpOworCWlmIChmbGFncyAmIFNfU1lOQykKKwkJZWktPmlfZmxhZ3MgfD0gRVhUM19TWU5DX0ZMOworCWlmIChmbGFncyAmIFNfQVBQRU5EKQorCQllaS0+aV9mbGFncyB8PSBFWFQzX0FQUEVORF9GTDsKKwlpZiAoZmxhZ3MgJiBTX0lNTVVUQUJMRSkKKwkJZWktPmlfZmxhZ3MgfD0gRVhUM19JTU1VVEFCTEVfRkw7CisJaWYgKGZsYWdzICYgU19OT0FUSU1FKQorCQllaS0+aV9mbGFncyB8PSBFWFQzX05PQVRJTUVfRkw7CisJaWYgKGZsYWdzICYgU19ESVJTWU5DKQorCQllaS0+aV9mbGFncyB8PSBFWFQzX0RJUlNZTkNfRkw7Cit9CisKIHZvaWQgZXh0M19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogewogCXN0cnVjdCBleHQzX2lsb2MgaWxvYzsKQEAgLTI2MDgsOSArMjYxOCw5IEBACiAJfQogCWlub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUocmF3X2lub2RlLT5pX2xpbmtzX2NvdW50KTsKIAlpbm9kZS0+aV9zaXplID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX3NpemUpOwotCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9hdGltZSk7Ci0JaW5vZGUtPmlfY3RpbWUudHZfc2VjID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2N0aW1lKTsKLQlpbm9kZS0+aV9tdGltZS50dl9zZWMgPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfbXRpbWUpOworCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IChzaWduZWQpbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2F0aW1lKTsKKwlpbm9kZS0+aV9jdGltZS50dl9zZWMgPSAoc2lnbmVkKWxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9jdGltZSk7CisJaW5vZGUtPmlfbXRpbWUudHZfc2VjID0gKHNpZ25lZClsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfbXRpbWUpOwogCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSBpbm9kZS0+aV9jdGltZS50dl9uc2VjID0gaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IDA7CiAKIAllaS0+aV9zdGF0ZSA9IDA7CkBAIC0yNzM2LDYgKzI3NDYsNyBAQAogCWlmIChlaS0+aV9zdGF0ZSAmIEVYVDNfU1RBVEVfTkVXKQogCQltZW1zZXQocmF3X2lub2RlLCAwLCBFWFQzX1NCKGlub2RlLT5pX3NiKS0+c19pbm9kZV9zaXplKTsKIAorCWV4dDNfZ2V0X2lub2RlX2ZsYWdzKGVpKTsKIAlyYXdfaW5vZGUtPmlfbW9kZSA9IGNwdV90b19sZTE2KGlub2RlLT5pX21vZGUpOwogCWlmKCEodGVzdF9vcHQoaW5vZGUtPmlfc2IsIE5PX1VJRDMyKSkpIHsKIAkJcmF3X2lub2RlLT5pX3VpZF9sb3cgPSBjcHVfdG9fbGUxNihsb3dfMTZfYml0cyhpbm9kZS0+aV91aWQpKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW9jdGwuYyBiL2ZzL2V4dDMvaW9jdGwuYwppbmRleCA5YjgwOTBkLi45NjUwMDZkIDEwMDY0NAotLS0gYS9mcy9leHQzL2lvY3RsLmMKKysrIGIvZnMvZXh0My9pb2N0bC5jCkBAIC0yOCw2ICsyOCw3IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRVhUM19JT0NfR0VURkxBR1M6CisJCWV4dDNfZ2V0X2lub2RlX2ZsYWdzKGVpKTsKIAkJZmxhZ3MgPSBlaS0+aV9mbGFncyAmIEVYVDNfRkxfVVNFUl9WSVNJQkxFOwogCQlyZXR1cm4gcHV0X3VzZXIoZmxhZ3MsIChpbnQgX191c2VyICopIGFyZyk7CiAJY2FzZSBFWFQzX0lPQ19TRVRGTEFHUzogewpkaWZmIC0tZ2l0IGEvZnMvZXh0My9uYW1laS5jIGIvZnMvZXh0My9uYW1laS5jCmluZGV4IDQ5MTU5ZjEuLjliYjA0NmQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvbmFtZWkuYworKysgYi9mcy9leHQzL25hbWVpLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgIm5hbWVpLmgiCiAjaW5jbHVkZSAieGF0dHIuaCIKQEAgLTk2OSw2ICs5NjgsNyBAQAogCQkJCSAgKGJsb2NrPDxFWFQzX0JMT0NLX1NJWkVfQklUUyhzYikpCiAJCQkJCSAgKygoY2hhciAqKWRlIC0gYmgtPmJfZGF0YSkpKSB7CiAJCQkJYnJlbHNlIChiaCk7CisJCQkJKmVyciA9IEVSUl9CQURfRFhfRElSOwogCQkJCWdvdG8gZXJyb3V0OwogCQkJfQogCQkJKnJlc19kaXIgPSBkZTsKQEAgLTExMzQsOSArMTEzNCw5IEBACiAJY2hhciAqZGF0YTEgPSAoKmJoKS0+Yl9kYXRhLCAqZGF0YTI7CiAJdW5zaWduZWQgc3BsaXQ7CiAJc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmRlID0gTlVMTCwgKmRlMjsKLQlpbnQJZXJyOworCWludAllcnIgPSAwOwogCi0JYmgyID0gZXh0M19hcHBlbmQgKGhhbmRsZSwgZGlyLCAmbmV3YmxvY2ssIGVycm9yKTsKKwliaDIgPSBleHQzX2FwcGVuZCAoaGFuZGxlLCBkaXIsICZuZXdibG9jaywgJmVycik7CiAJaWYgKCEoYmgyKSkgewogCQlicmVsc2UoKmJoKTsKIAkJKmJoID0gTlVMTDsKQEAgLTExNDUsMTQgKzExNDUsOSBAQAogCiAJQlVGRkVSX1RSQUNFKCpiaCwgImdldF93cml0ZV9hY2Nlc3MiKTsKIAllcnIgPSBleHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsICpiaCk7Ci0JaWYgKGVycikgewotCWpvdXJuYWxfZXJyb3I6Ci0JCWJyZWxzZSgqYmgpOwotCQlicmVsc2UoYmgyKTsKLQkJKmJoID0gTlVMTDsKLQkJZXh0M19zdGRfZXJyb3IoZGlyLT5pX3NiLCBlcnIpOwotCQlnb3RvIGVycm91dDsKLQl9CisJaWYgKGVycikKKwkJZ290byBqb3VybmFsX2Vycm9yOworCiAJQlVGRkVSX1RSQUNFKGZyYW1lLT5iaCwgImdldF93cml0ZV9hY2Nlc3MiKTsKIAllcnIgPSBleHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGZyYW1lLT5iaCk7CiAJaWYgKGVycikKQEAgLTExOTUsOCArMTE5MCwxNiBAQAogCQlnb3RvIGpvdXJuYWxfZXJyb3I7CiAJYnJlbHNlIChiaDIpOwogCWR4dHJhY2UoZHhfc2hvd19pbmRleCAoImZyYW1lIiwgZnJhbWUtPmVudHJpZXMpKTsKLWVycm91dDoKIAlyZXR1cm4gZGU7CisKK2pvdXJuYWxfZXJyb3I6CisJYnJlbHNlKCpiaCk7CisJYnJlbHNlKGJoMik7CisJKmJoID0gTlVMTDsKKwlleHQzX3N0ZF9lcnJvcihkaXItPmlfc2IsIGVycik7CitlcnJvdXQ6CisJKmVycm9yID0gZXJyOworCXJldHVybiBOVUxMOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvcmVzaXplLmMgYi9mcy9leHQzL3Jlc2l6ZS5jCmluZGV4IGVjZjg5OTAuLjJjOTdlMDkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvcmVzaXplLmMKKysrIGIvZnMvZXh0My9yZXNpemUuYwpAQCAtMTEsNyArMTEsNiBAQAogCiAjZGVmaW5lIEVYVDNGU19ERUJVRwogCi0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9leHQzX2piZC5oPgogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCA1NGQzYzkwLi42ZTMwNjI5IDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC00NjYsMTQgKzQ2NiwxMiBAQAogewogCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpID0gKHN0cnVjdCBleHQzX2lub2RlX2luZm8gKikgZm9vOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZlaS0+aV9vcnBoYW4pOworCUlOSVRfTElTVF9IRUFEKCZlaS0+aV9vcnBoYW4pOwogI2lmZGVmIENPTkZJR19FWFQzX0ZTX1hBVFRSCi0JCWluaXRfcndzZW0oJmVpLT54YXR0cl9zZW0pOworCWluaXRfcndzZW0oJmVpLT54YXR0cl9zZW0pOwogI2VuZGlmCi0JCW11dGV4X2luaXQoJmVpLT50cnVuY2F0ZV9tdXRleCk7Ci0JCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7Ci0JfQorCW11dGV4X2luaXQoJmVpLT50cnVuY2F0ZV9tdXRleCk7CisJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIH0KIAogc3RhdGljIGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDMveGF0dHJfc2VjdXJpdHkuYyBiL2ZzL2V4dDMveGF0dHJfc2VjdXJpdHkuYwppbmRleCBiOWM0MGMxLi44MjFlZmFmIDEwMDY0NAotLS0gYS9mcy9leHQzL3hhdHRyX3NlY3VyaXR5LmMKKysrIGIvZnMvZXh0My94YXR0cl9zZWN1cml0eS5jCkBAIC02LDcgKzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9leHQzX2piZC5oPgogI2luY2x1ZGUgPGxpbnV4L2V4dDNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgpkaWZmIC0tZ2l0IGEvZnMvZXh0My94YXR0cl90cnVzdGVkLmMgYi9mcy9leHQzL3hhdHRyX3RydXN0ZWQuYwppbmRleCA4NmQ5MWYxLi4wMzI3NDk3IDEwMDY0NAotLS0gYS9mcy9leHQzL3hhdHRyX3RydXN0ZWQuYworKysgYi9mcy9leHQzL3hhdHRyX3RydXN0ZWQuYwpAQCAtOSw3ICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2V4dDNfamJkLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0M19mcy5oPgogI2luY2x1ZGUgInhhdHRyLmgiCmRpZmYgLS1naXQgYS9mcy9leHQzL3hhdHRyX3VzZXIuYyBiL2ZzL2V4dDMveGF0dHJfdXNlci5jCmluZGV4IGE4NWEwYTEuLjFhYmQ4ZjkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMveGF0dHJfdXNlci5jCisrKyBiL2ZzL2V4dDMveGF0dHJfdXNlci5jCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9leHQzX2piZC5oPgogI2luY2x1ZGUgPGxpbnV4L2V4dDNfZnMuaD4KICNpbmNsdWRlICJ4YXR0ci5oIgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmMKaW5kZXggOGEyMzQ4My4uM2I2NGJiMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9iYWxsb2MuYworKysgYi9mcy9leHQ0L2JhbGxvYy5jCkBAIC0zMCwxNSArMzAsMTUgQEAKIHZvaWQgZXh0NF9nZXRfZ3JvdXBfbm9fYW5kX29mZnNldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3QgYmxvY2tuciwKIAkJdW5zaWduZWQgbG9uZyAqYmxvY2tncnBwLCBleHQ0X2dycGJsa190ICpvZmZzZXRwKQogewotICAgICAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMgPSBFWFQ0X1NCKHNiKS0+c19lczsKKwlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMgPSBFWFQ0X1NCKHNiKS0+c19lczsKIAlleHQ0X2dycGJsa190IG9mZnNldDsKIAotICAgICAgICBibG9ja25yID0gYmxvY2tuciAtIGxlMzJfdG9fY3B1KGVzLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCWJsb2NrbnIgPSBibG9ja25yIC0gbGUzMl90b19jcHUoZXMtPnNfZmlyc3RfZGF0YV9ibG9jayk7CiAJb2Zmc2V0ID0gZG9fZGl2KGJsb2NrbnIsIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpOwogCWlmIChvZmZzZXRwKQogCQkqb2Zmc2V0cCA9IG9mZnNldDsKIAlpZiAoYmxvY2tncnBwKQotCSAgICAgICAgKmJsb2NrZ3JwcCA9IGJsb2NrbnI7CisJCSpibG9ja2dycHAgPSBibG9ja25yOwogCiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZGlyLmMgYi9mcy9leHQ0L2Rpci5jCmluZGV4IGRhODAzNjguLmU4YWQwNmUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZGlyLmMKKysrIGIvZnMvZXh0NC9kaXIuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2piZDIuaD4KICNpbmNsdWRlIDxsaW51eC9leHQ0X2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCA3OTE2YjUwLi5iOWNlMjQxIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYworKysgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9leHQ0X2piZDIuaD4KICNpbmNsdWRlIDxsaW51eC9qYmQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KQEAgLTM3NSw3ICszNzQsNyBAQAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShpeFstMV0uZWlfYmxvY2spKTsKIAkJCX0KIAkJCUJVR19PTihrICYmIGxlMzJfdG9fY3B1KGl4LT5laV9ibG9jaykKLQkJCQkgICAgICAgICAgIDw9IGxlMzJfdG9fY3B1KGl4Wy0xXS5laV9ibG9jaykpOworCQkJCQkgICA8PSBsZTMyX3RvX2NwdShpeFstMV0uZWlfYmxvY2spKTsKIAkJCWlmIChibG9jayA8IGxlMzJfdG9fY3B1KGl4LT5laV9ibG9jaykpCiAJCQkJYnJlYWs7CiAJCQljaGl4ID0gaXg7CkBAIC00MjQsOCArNDIzLDggQEAKIAogCXBhdGgtPnBfZXh0ID0gbCAtIDE7CiAJZXh0X2RlYnVnKCIgIC0+ICVkOiVsbHU6JWQgIiwKLQkJICAgICAgICBsZTMyX3RvX2NwdShwYXRoLT5wX2V4dC0+ZWVfYmxvY2spLAotCQkgICAgICAgIGV4dF9wYmxvY2socGF0aC0+cF9leHQpLAorCQkJbGUzMl90b19jcHUocGF0aC0+cF9leHQtPmVlX2Jsb2NrKSwKKwkJCWV4dF9wYmxvY2socGF0aC0+cF9leHQpLAogCQkJbGUxNl90b19jcHUocGF0aC0+cF9leHQtPmVlX2xlbikpOwogCiAjaWZkZWYgQ0hFQ0tfQklOU0VBUkNICkBAIC00MzYsNyArNDM1LDcgQEAKIAkJY2hleCA9IGV4ID0gRVhUX0ZJUlNUX0VYVEVOVChlaCk7CiAJCWZvciAoayA9IDA7IGsgPCBsZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcyk7IGsrKywgZXgrKykgewogCQkJQlVHX09OKGsgJiYgbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKQotCQkJCSAgICAgICAgICA8PSBsZTMyX3RvX2NwdShleFstMV0uZWVfYmxvY2spKTsKKwkJCQkJICA8PSBsZTMyX3RvX2NwdShleFstMV0uZWVfYmxvY2spKTsKIAkJCWlmIChibG9jayA8IGxlMzJfdG9fY3B1KGV4LT5lZV9ibG9jaykpCiAJCQkJYnJlYWs7CiAJCQljaGV4ID0gZXg7CkBAIC01NzgsNyArNTc3LDcgQEAKIAljdXJwLT5wX2hkci0+ZWhfZW50cmllcyA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGN1cnAtPnBfaGRyLT5laF9lbnRyaWVzKSsxKTsKIAogCUJVR19PTihsZTE2X3RvX2NwdShjdXJwLT5wX2hkci0+ZWhfZW50cmllcykKLQkgICAgICAgICAgICAgICAgICAgICA+IGxlMTZfdG9fY3B1KGN1cnAtPnBfaGRyLT5laF9tYXgpKTsKKwkJCSAgICAgPiBsZTE2X3RvX2NwdShjdXJwLT5wX2hkci0+ZWhfbWF4KSk7CiAJQlVHX09OKGl4ID4gRVhUX0xBU1RfSU5ERVgoY3VycC0+cF9oZHIpKTsKIAogCWVyciA9IGV4dDRfZXh0X2RpcnR5KGhhbmRsZSwgaW5vZGUsIGN1cnApOwpAQCAtNjIyLDEyICs2MjEsMTIgQEAKIAkJYm9yZGVyID0gcGF0aFtkZXB0aF0ucF9leHRbMV0uZWVfYmxvY2s7CiAJCWV4dF9kZWJ1ZygibGVhZiB3aWxsIGJlIHNwbGl0LiIKIAkJCQkiIG5leHQgbGVhZiBzdGFydHMgYXQgJWRcbiIsCi0JCQkgICAgICAgICAgbGUzMl90b19jcHUoYm9yZGVyKSk7CisJCQkJICBsZTMyX3RvX2NwdShib3JkZXIpKTsKIAl9IGVsc2UgewogCQlib3JkZXIgPSBuZXdleHQtPmVlX2Jsb2NrOwogCQlleHRfZGVidWcoImxlYWYgd2lsbCBiZSBhZGRlZC4iCiAJCQkJIiBuZXh0IGxlYWYgc3RhcnRzIGF0ICVkXG4iLAotCQkJICAgICAgICBsZTMyX3RvX2NwdShib3JkZXIpKTsKKwkJCQlsZTMyX3RvX2NwdShib3JkZXIpKTsKIAl9CiAKIAkvKgpAQCAtNjg1LDkgKzY4NCw5IEBACiAJd2hpbGUgKHBhdGhbZGVwdGhdLnBfZXh0IDw9CiAJCQlFWFRfTUFYX0VYVEVOVChwYXRoW2RlcHRoXS5wX2hkcikpIHsKIAkJZXh0X2RlYnVnKCJtb3ZlICVkOiVsbHU6JWQgaW4gbmV3IGxlYWYgJWxsdVxuIiwKLQkJCSAgICAgICAgbGUzMl90b19jcHUocGF0aFtkZXB0aF0ucF9leHQtPmVlX2Jsb2NrKSwKLQkJCSAgICAgICAgZXh0X3BibG9jayhwYXRoW2RlcHRoXS5wX2V4dCksCi0JCQkgICAgICAgIGxlMTZfdG9fY3B1KHBhdGhbZGVwdGhdLnBfZXh0LT5lZV9sZW4pLAorCQkJCWxlMzJfdG9fY3B1KHBhdGhbZGVwdGhdLnBfZXh0LT5lZV9ibG9jayksCisJCQkJZXh0X3BibG9jayhwYXRoW2RlcHRoXS5wX2V4dCksCisJCQkJbGUxNl90b19jcHUocGF0aFtkZXB0aF0ucF9leHQtPmVlX2xlbiksCiAJCQkJbmV3YmxvY2spOwogCQkvKm1lbW1vdmUoZXgrKywgcGF0aFtkZXB0aF0ucF9leHQrKywKIAkJCQlzaXplb2Yoc3RydWN0IGV4dDRfZXh0ZW50KSk7CkBAIC03NjYsOSArNzY1LDkgQEAKIAkJCQlFWFRfTEFTVF9JTkRFWChwYXRoW2ldLnBfaGRyKSk7CiAJCXdoaWxlIChwYXRoW2ldLnBfaWR4IDw9IEVYVF9NQVhfSU5ERVgocGF0aFtpXS5wX2hkcikpIHsKIAkJCWV4dF9kZWJ1ZygiJWQ6IG1vdmUgJWQ6JWQgaW4gbmV3IGluZGV4ICVsbHVcbiIsIGksCi0JCQkJICAgICAgICBsZTMyX3RvX2NwdShwYXRoW2ldLnBfaWR4LT5laV9ibG9jayksCi0JCQkJICAgICAgICBpZHhfcGJsb2NrKHBhdGhbaV0ucF9pZHgpLAotCQkJCSAgICAgICAgbmV3YmxvY2spOworCQkJCQlsZTMyX3RvX2NwdShwYXRoW2ldLnBfaWR4LT5laV9ibG9jayksCisJCQkJCWlkeF9wYmxvY2socGF0aFtpXS5wX2lkeCksCisJCQkJCW5ld2Jsb2NrKTsKIAkJCS8qbWVtbW92ZSgrK2ZpZHgsIHBhdGhbaV0ucF9pZHgrKywKIAkJCQkJc2l6ZW9mKHN0cnVjdCBleHQ0X2V4dGVudF9pZHgpKTsKIAkJCW5laC0+ZWhfZW50cmllcysrOwpAQCAtMTEyOSw2ICsxMTI4LDU1IEBACiB9CiAKIC8qCisgKiBjaGVjayBpZiBhIHBvcnRpb24gb2YgdGhlICJuZXdleHQiIGV4dGVudCBvdmVybGFwcyB3aXRoIGFuCisgKiBleGlzdGluZyBleHRlbnQuCisgKgorICogSWYgdGhlcmUgaXMgYW4gb3ZlcmxhcCBkaXNjb3ZlcmVkLCBpdCB1cGRhdGVzIHRoZSBsZW5ndGggb2YgdGhlIG5ld2V4dAorICogc3VjaCB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gb3ZlcmxhcCwgYW5kIHRoZW4gcmV0dXJucyAxLgorICogSWYgdGhlcmUgaXMgbm8gb3ZlcmxhcCBmb3VuZCwgaXQgcmV0dXJucyAwLgorICovCit1bnNpZ25lZCBpbnQgZXh0NF9leHRfY2hlY2tfb3ZlcmxhcChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBzdHJ1Y3QgZXh0NF9leHRlbnQgKm5ld2V4dCwKKwkJCQkgICAgc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpCit7CisJdW5zaWduZWQgbG9uZyBiMSwgYjI7CisJdW5zaWduZWQgaW50IGRlcHRoLCBsZW4xOworCXVuc2lnbmVkIGludCByZXQgPSAwOworCisJYjEgPSBsZTMyX3RvX2NwdShuZXdleHQtPmVlX2Jsb2NrKTsKKwlsZW4xID0gbGUxNl90b19jcHUobmV3ZXh0LT5lZV9sZW4pOworCWRlcHRoID0gZXh0X2RlcHRoKGlub2RlKTsKKwlpZiAoIXBhdGhbZGVwdGhdLnBfZXh0KQorCQlnb3RvIG91dDsKKwliMiA9IGxlMzJfdG9fY3B1KHBhdGhbZGVwdGhdLnBfZXh0LT5lZV9ibG9jayk7CisKKwkvKgorCSAqIGdldCB0aGUgbmV4dCBhbGxvY2F0ZWQgYmxvY2sgaWYgdGhlIGV4dGVudCBpbiB0aGUgcGF0aAorCSAqIGlzIGJlZm9yZSB0aGUgcmVxdWVzdGVkIGJsb2NrKHMpIAorCSAqLworCWlmIChiMiA8IGIxKSB7CisJCWIyID0gZXh0NF9leHRfbmV4dF9hbGxvY2F0ZWRfYmxvY2socGF0aCk7CisJCWlmIChiMiA9PSBFWFRfTUFYX0JMT0NLKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogY2hlY2sgZm9yIHdyYXAgdGhyb3VnaCB6ZXJvICovCisJaWYgKGIxICsgbGVuMSA8IGIxKSB7CisJCWxlbjEgPSBFWFRfTUFYX0JMT0NLIC0gYjE7CisJCW5ld2V4dC0+ZWVfbGVuID0gY3B1X3RvX2xlMTYobGVuMSk7CisJCXJldCA9IDE7CisJfQorCisJLyogY2hlY2sgZm9yIG92ZXJsYXAgKi8KKwlpZiAoYjEgKyBsZW4xID4gYjIpIHsKKwkJbmV3ZXh0LT5lZV9sZW4gPSBjcHVfdG9fbGUxNihiMiAtIGIxKTsKKwkJcmV0ID0gMTsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIGV4dDRfZXh0X2luc2VydF9leHRlbnQ6CiAgKiB0cmllcyB0byBtZXJnZSByZXF1c3RlZCBleHRlbnQgaW50byB0aGUgZXhpc3RpbmcgZXh0ZW50IG9yCiAgKiBpbnNlcnRzIHJlcXVlc3RlZCBleHRlbnQgYXMgbmV3IG9uZSBpbnRvIHRoZSB0cmVlLApAQCAtMTIxMywxMiArMTI2MSwxMiBAQAogCWlmICghbmVhcmV4KSB7CiAJCS8qIHRoZXJlIGlzIG5vIGV4dGVudCBpbiB0aGlzIGxlYWYsIGNyZWF0ZSBmaXJzdCBvbmUgKi8KIAkJZXh0X2RlYnVnKCJmaXJzdCBleHRlbnQgaW4gdGhlIGxlYWY6ICVkOiVsbHU6JWRcbiIsCi0JCQkgICAgICAgIGxlMzJfdG9fY3B1KG5ld2V4dC0+ZWVfYmxvY2spLAotCQkJICAgICAgICBleHRfcGJsb2NrKG5ld2V4dCksCi0JCQkgICAgICAgIGxlMTZfdG9fY3B1KG5ld2V4dC0+ZWVfbGVuKSk7CisJCQkJbGUzMl90b19jcHUobmV3ZXh0LT5lZV9ibG9jayksCisJCQkJZXh0X3BibG9jayhuZXdleHQpLAorCQkJCWxlMTZfdG9fY3B1KG5ld2V4dC0+ZWVfbGVuKSk7CiAJCXBhdGhbZGVwdGhdLnBfZXh0ID0gRVhUX0ZJUlNUX0VYVEVOVChlaCk7CiAJfSBlbHNlIGlmIChsZTMyX3RvX2NwdShuZXdleHQtPmVlX2Jsb2NrKQotCQkgICAgICAgICAgID4gbGUzMl90b19jcHUobmVhcmV4LT5lZV9ibG9jaykpIHsKKwkJCSAgID4gbGUzMl90b19jcHUobmVhcmV4LT5lZV9ibG9jaykpIHsKIC8qCQlCVUdfT04obmV3ZXh0LT5lZV9ibG9jayA9PSBuZWFyZXgtPmVlX2Jsb2NrKTsgKi8KIAkJaWYgKG5lYXJleCAhPSBFWFRfTEFTVF9FWFRFTlQoZWgpKSB7CiAJCQlsZW4gPSBFWFRfTUFYX0VYVEVOVChlaCkgLSBuZWFyZXg7CkBAIC0xMjI2LDkgKzEyNzQsOSBAQAogCQkJbGVuID0gbGVuIDwgMCA/IDAgOiBsZW47CiAJCQlleHRfZGVidWcoImluc2VydCAlZDolbGx1OiVkIGFmdGVyOiBuZWFyZXN0IDB4JXAsICIKIAkJCQkJIm1vdmUgJWQgZnJvbSAweCVwIHRvIDB4JXBcbiIsCi0JCQkJICAgICAgICBsZTMyX3RvX2NwdShuZXdleHQtPmVlX2Jsb2NrKSwKLQkJCQkgICAgICAgIGV4dF9wYmxvY2sobmV3ZXh0KSwKLQkJCQkgICAgICAgIGxlMTZfdG9fY3B1KG5ld2V4dC0+ZWVfbGVuKSwKKwkJCQkJbGUzMl90b19jcHUobmV3ZXh0LT5lZV9ibG9jayksCisJCQkJCWV4dF9wYmxvY2sobmV3ZXh0KSwKKwkJCQkJbGUxNl90b19jcHUobmV3ZXh0LT5lZV9sZW4pLAogCQkJCQluZWFyZXgsIGxlbiwgbmVhcmV4ICsgMSwgbmVhcmV4ICsgMik7CiAJCQltZW1tb3ZlKG5lYXJleCArIDIsIG5lYXJleCArIDEsIGxlbik7CiAJCX0KQEAgLTEzNTksOSArMTQwNyw5IEBACiAJCQljYmV4LmVjX3N0YXJ0ID0gMDsKIAkJCWNiZXguZWNfdHlwZSA9IEVYVDRfRVhUX0NBQ0hFX0dBUDsKIAkJfSBlbHNlIHsKLQkJICAgICAgICBjYmV4LmVjX2Jsb2NrID0gbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKTsKLQkJICAgICAgICBjYmV4LmVjX2xlbiA9IGxlMTZfdG9fY3B1KGV4LT5lZV9sZW4pOwotCQkgICAgICAgIGNiZXguZWNfc3RhcnQgPSBleHRfcGJsb2NrKGV4KTsKKwkJCWNiZXguZWNfYmxvY2sgPSBsZTMyX3RvX2NwdShleC0+ZWVfYmxvY2spOworCQkJY2JleC5lY19sZW4gPSBsZTE2X3RvX2NwdShleC0+ZWVfbGVuKTsKKwkJCWNiZXguZWNfc3RhcnQgPSBleHRfcGJsb2NrKGV4KTsKIAkJCWNiZXguZWNfdHlwZSA9IEVYVDRfRVhUX0NBQ0hFX0VYVEVOVDsKIAkJfQogCkBAIC0xNDMyLDE2ICsxNDgwLDE2IEBACiAJCWxlbiA9IGxlMzJfdG9fY3B1KGV4LT5lZV9ibG9jaykgLSBibG9jazsKIAkJZXh0X2RlYnVnKCJjYWNoZSBnYXAoYmVmb3JlKTogJWx1IFslbHU6JWx1XSIsCiAJCQkJKHVuc2lnbmVkIGxvbmcpIGJsb2NrLAotCQkJICAgICAgICAodW5zaWduZWQgbG9uZykgbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKSwKLQkJCSAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGxlMTZfdG9fY3B1KGV4LT5lZV9sZW4pKTsKKwkJCQkodW5zaWduZWQgbG9uZykgbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKSwKKwkJCQkodW5zaWduZWQgbG9uZykgbGUxNl90b19jcHUoZXgtPmVlX2xlbikpOwogCX0gZWxzZSBpZiAoYmxvY2sgPj0gbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKQotCQkgICAgICAgICAgICArIGxlMTZfdG9fY3B1KGV4LT5lZV9sZW4pKSB7Ci0JICAgICAgICBsYmxvY2sgPSBsZTMyX3RvX2NwdShleC0+ZWVfYmxvY2spCi0JCSAgICAgICAgICsgbGUxNl90b19jcHUoZXgtPmVlX2xlbik7CisJCQkgICAgKyBsZTE2X3RvX2NwdShleC0+ZWVfbGVuKSkgeworCQlsYmxvY2sgPSBsZTMyX3RvX2NwdShleC0+ZWVfYmxvY2spCisJCQkgKyBsZTE2X3RvX2NwdShleC0+ZWVfbGVuKTsKIAkJbGVuID0gZXh0NF9leHRfbmV4dF9hbGxvY2F0ZWRfYmxvY2socGF0aCk7CiAJCWV4dF9kZWJ1ZygiY2FjaGUgZ2FwKGFmdGVyKTogWyVsdTolbHVdICVsdSIsCi0JCQkgICAgICAgICh1bnNpZ25lZCBsb25nKSBsZTMyX3RvX2NwdShleC0+ZWVfYmxvY2spLAotCQkJICAgICAgICAodW5zaWduZWQgbG9uZykgbGUxNl90b19jcHUoZXgtPmVlX2xlbiksCisJCQkJKHVuc2lnbmVkIGxvbmcpIGxlMzJfdG9fY3B1KGV4LT5lZV9ibG9jayksCisJCQkJKHVuc2lnbmVkIGxvbmcpIGxlMTZfdG9fY3B1KGV4LT5lZV9sZW4pLAogCQkJCSh1bnNpZ25lZCBsb25nKSBibG9jayk7CiAJCUJVR19PTihsZW4gPT0gbGJsb2NrKTsKIAkJbGVuID0gbGVuIC0gbGJsb2NrOwpAQCAtMTQ2OSw5ICsxNTE3LDkgQEAKIAlCVUdfT04oY2V4LT5lY190eXBlICE9IEVYVDRfRVhUX0NBQ0hFX0dBUCAmJgogCQkJY2V4LT5lY190eXBlICE9IEVYVDRfRVhUX0NBQ0hFX0VYVEVOVCk7CiAJaWYgKGJsb2NrID49IGNleC0+ZWNfYmxvY2sgJiYgYmxvY2sgPCBjZXgtPmVjX2Jsb2NrICsgY2V4LT5lY19sZW4pIHsKLQkgICAgICAgIGV4LT5lZV9ibG9jayA9IGNwdV90b19sZTMyKGNleC0+ZWNfYmxvY2spOworCQlleC0+ZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihjZXgtPmVjX2Jsb2NrKTsKIAkJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBjZXgtPmVjX3N0YXJ0KTsKLQkgICAgICAgIGV4LT5lZV9sZW4gPSBjcHVfdG9fbGUxNihjZXgtPmVjX2xlbik7CisJCWV4LT5lZV9sZW4gPSBjcHVfdG9fbGUxNihjZXgtPmVjX2xlbik7CiAJCWV4dF9kZWJ1ZygiJWx1IGNhY2hlZCBieSAlbHU6JWx1OiVsbHVcbiIsCiAJCQkJKHVuc2lnbmVkIGxvbmcpIGJsb2NrLAogCQkJCSh1bnNpZ25lZCBsb25nKSBjZXgtPmVjX2Jsb2NrLApAQCAtMTk1Nyw5ICsyMDA1LDkgQEAKIAkJCS8qIHdlIHNob3VsZCBhbGxvY2F0ZSByZXF1ZXN0ZWQgYmxvY2sgKi8KIAkJfSBlbHNlIGlmIChnb2FsID09IEVYVDRfRVhUX0NBQ0hFX0VYVEVOVCkgewogCQkJLyogYmxvY2sgaXMgYWxyZWFkeSBhbGxvY2F0ZWQgKi8KLQkJICAgICAgICBuZXdibG9jayA9IGlibG9jawotCQkgICAgICAgICAgICAgICAgICAgLSBsZTMyX3RvX2NwdShuZXdleC5lZV9ibG9jaykKLQkJCSAgICAgICAgICAgKyBleHRfcGJsb2NrKCZuZXdleCk7CisJCQluZXdibG9jayA9IGlibG9jaworCQkJCSAgIC0gbGUzMl90b19jcHUobmV3ZXguZWVfYmxvY2spCisJCQkJICAgKyBleHRfcGJsb2NrKCZuZXdleCk7CiAJCQkvKiBudW1iZXIgb2YgcmVtYWluaW5nIGJsb2NrcyBpbiB0aGUgZXh0ZW50ICovCiAJCQlhbGxvY2F0ZWQgPSBsZTE2X3RvX2NwdShuZXdleC5lZV9sZW4pIC0KIAkJCQkJKGlibG9jayAtIGxlMzJfdG9fY3B1KG5ld2V4LmVlX2Jsb2NrKSk7CkBAIC0xOTg4LDcgKzIwMzYsNyBAQAogCiAJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKIAlpZiAoZXgpIHsKLQkgICAgICAgIHVuc2lnbmVkIGxvbmcgZWVfYmxvY2sgPSBsZTMyX3RvX2NwdShleC0+ZWVfYmxvY2spOworCQl1bnNpZ25lZCBsb25nIGVlX2Jsb2NrID0gbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKTsKIAkJZXh0NF9mc2Jsa190IGVlX3N0YXJ0ID0gZXh0X3BibG9jayhleCk7CiAJCXVuc2lnbmVkIHNob3J0IGVlX2xlbiAgPSBsZTE2X3RvX2NwdShleC0+ZWVfbGVuKTsKIApAQCAtMjAwMSw3ICsyMDQ5LDcgQEAKIAkJaWYgKGVlX2xlbiA+IEVYVF9NQVhfTEVOKQogCQkJZ290byBvdXQyOwogCQkvKiBpZiBmb3VuZCBleHRlbnQgY292ZXJzIGJsb2NrLCBzaW1wbHkgcmV0dXJuIGl0ICovCi0JICAgICAgICBpZiAoaWJsb2NrID49IGVlX2Jsb2NrICYmIGlibG9jayA8IGVlX2Jsb2NrICsgZWVfbGVuKSB7CisJCWlmIChpYmxvY2sgPj0gZWVfYmxvY2sgJiYgaWJsb2NrIDwgZWVfYmxvY2sgKyBlZV9sZW4pIHsKIAkJCW5ld2Jsb2NrID0gaWJsb2NrIC0gZWVfYmxvY2sgKyBlZV9zdGFydDsKIAkJCS8qIG51bWJlciBvZiByZW1haW5pbmcgYmxvY2tzIGluIHRoZSBleHRlbnQgKi8KIAkJCWFsbG9jYXRlZCA9IGVlX2xlbiAtIChpYmxvY2sgLSBlZV9ibG9jayk7CkBAIC0yMDMyLDcgKzIwODAsMTUgQEAKIAogCS8qIGFsbG9jYXRlIG5ldyBibG9jayAqLwogCWdvYWwgPSBleHQ0X2V4dF9maW5kX2dvYWwoaW5vZGUsIHBhdGgsIGlibG9jayk7Ci0JYWxsb2NhdGVkID0gbWF4X2Jsb2NrczsKKworCS8qIENoZWNrIGlmIHdlIGNhbiByZWFsbHkgaW5zZXJ0IChpYmxvY2spOjooaWJsb2NrK21heF9ibG9ja3MpIGV4dGVudCAqLworCW5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoaWJsb2NrKTsKKwluZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihtYXhfYmxvY2tzKTsKKwllcnIgPSBleHQ0X2V4dF9jaGVja19vdmVybGFwKGlub2RlLCAmbmV3ZXgsIHBhdGgpOworCWlmIChlcnIpCisJCWFsbG9jYXRlZCA9IGxlMTZfdG9fY3B1KG5ld2V4LmVlX2xlbik7CisJZWxzZQorCQlhbGxvY2F0ZWQgPSBtYXhfYmxvY2tzOwogCW5ld2Jsb2NrID0gZXh0NF9uZXdfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGdvYWwsICZhbGxvY2F0ZWQsICZlcnIpOwogCWlmICghbmV3YmxvY2spCiAJCWdvdG8gb3V0MjsKQEAgLTIwNDAsMTIgKzIwOTYsMTUgQEAKIAkJCWdvYWwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWQpOwogCiAJLyogdHJ5IHRvIGluc2VydCBuZXcgZXh0ZW50IGludG8gZm91bmQgbGVhZiBhbmQgcmV0dXJuICovCi0JbmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihpYmxvY2spOwogCWV4dDRfZXh0X3N0b3JlX3BibG9jaygmbmV3ZXgsIG5ld2Jsb2NrKTsKIAluZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihhbGxvY2F0ZWQpOwogCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4KTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKKwkJLyogZnJlZSBkYXRhIGJsb2NrcyB3ZSBqdXN0IGFsbG9jYXRlZCAqLworCQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGV4dF9wYmxvY2soJm5ld2V4KSwKKwkJCQkJbGUxNl90b19jcHUobmV3ZXguZWVfbGVuKSk7CiAJCWdvdG8gb3V0MjsKKwl9CiAKIAlpZiAoZXh0ZW5kX2Rpc2tzaXplICYmIGlub2RlLT5pX3NpemUgPiBFWFQ0X0koaW5vZGUpLT5pX2Rpc2tzaXplKQogCQlFWFQ0X0koaW5vZGUpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKQEAgLTIxNTgsMTEgKzIyMTcsMyBAQAogCiAJcmV0dXJuIG5lZWRlZDsKIH0KLQotRVhQT1JUX1NZTUJPTChleHQ0X21hcmtfaW5vZGVfZGlydHkpOwotRVhQT1JUX1NZTUJPTChleHQ0X2V4dF9pbnZhbGlkYXRlX2NhY2hlKTsKLUVYUE9SVF9TWU1CT0woZXh0NF9leHRfaW5zZXJ0X2V4dGVudCk7Ci1FWFBPUlRfU1lNQk9MKGV4dDRfZXh0X3dhbGtfc3BhY2UpOwotRVhQT1JUX1NZTUJPTChleHQ0X2V4dF9maW5kX2dvYWwpOwotRVhQT1JUX1NZTUJPTChleHQ0X2V4dF9jYWxjX2NyZWRpdHNfZm9yX2luc2VydCk7Ci0KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCA4MTBiNmQ2Li4wYmNmNjJhIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKKysrIGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V4dDRfamJkMi5oPgogI2luY2x1ZGUgPGxpbnV4L2piZDIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KQEAgLTI1Niw4ICsyNTUsOCBAQAogICoJQGlub2RlOiBpbm9kZSBpbiBxdWVzdGlvbiAod2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBpdHMgc3VwZXJibG9jaykKICAqCUBpX2Jsb2NrOiBibG9jayBudW1iZXIgdG8gYmUgcGFyc2VkCiAgKglAb2Zmc2V0czogYXJyYXkgdG8gc3RvcmUgdGhlIG9mZnNldHMgaW4KLSAqICAgICAgQGJvdW5kYXJ5OiBzZXQgdGhpcyBub24temVybyBpZiB0aGUgcmVmZXJyZWQtdG8gYmxvY2sgaXMgbGlrZWx5IHRvIGJlCi0gKiAgICAgICAgICAgICBmb2xsb3dlZCAob24gZGlzaykgYnkgYW4gaW5kaXJlY3QgYmxvY2suCisgKglAYm91bmRhcnk6IHNldCB0aGlzIG5vbi16ZXJvIGlmIHRoZSByZWZlcnJlZC10byBibG9jayBpcyBsaWtlbHkgdG8gYmUKKyAqCSAgICAgICBmb2xsb3dlZCAob24gZGlzaykgYnkgYW4gaW5kaXJlY3QgYmxvY2suCiAgKgogICoJVG8gc3RvcmUgdGhlIGxvY2F0aW9ucyBvZiBmaWxlJ3MgZGF0YSBleHQ0IHVzZXMgYSBkYXRhIHN0cnVjdHVyZSBjb21tb24KICAqCWZvciBVTklYIGZpbGVzeXN0ZW1zIC0gdHJlZSBvZiBwb2ludGVycyBhbmNob3JlZCBpbiB0aGUgaW5vZGUsIHdpdGgKQEAgLTI2MTEsOSArMjYxMCw5IEBACiAJfQogCWlub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUocmF3X2lub2RlLT5pX2xpbmtzX2NvdW50KTsKIAlpbm9kZS0+aV9zaXplID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX3NpemUpOwotCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9hdGltZSk7Ci0JaW5vZGUtPmlfY3RpbWUudHZfc2VjID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2N0aW1lKTsKLQlpbm9kZS0+aV9tdGltZS50dl9zZWMgPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfbXRpbWUpOworCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IChzaWduZWQpbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2F0aW1lKTsKKwlpbm9kZS0+aV9jdGltZS50dl9zZWMgPSAoc2lnbmVkKWxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9jdGltZSk7CisJaW5vZGUtPmlfbXRpbWUudHZfc2VjID0gKHNpZ25lZClsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfbXRpbWUpOwogCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSBpbm9kZS0+aV9jdGltZS50dl9uc2VjID0gaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IDA7CiAKIAllaS0+aV9zdGF0ZSA9IDA7CmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmMKaW5kZXggZTdlMWQ3OS4uMjgxMWU1NyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9uYW1laS5jCisrKyBiL2ZzL2V4dDQvbmFtZWkuYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSAibmFtZWkuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgpAQCAtNDcsNyArNDYsNyBAQAogICovCiAjZGVmaW5lIE5BTUVJX1JBX0NIVU5LUyAgMgogI2RlZmluZSBOQU1FSV9SQV9CTE9DS1MgIDQKLSNkZWZpbmUgTkFNRUlfUkFfU0laRSAgICAgICAgKE5BTUVJX1JBX0NIVU5LUyAqIE5BTUVJX1JBX0JMT0NLUykKKyNkZWZpbmUgTkFNRUlfUkFfU0laRQkgICAgIChOQU1FSV9SQV9DSFVOS1MgKiBOQU1FSV9SQV9CTE9DS1MpCiAjZGVmaW5lIE5BTUVJX1JBX0lOREVYKGMsYikgICgoKGMpICogTkFNRUlfUkFfQkxPQ0tTKSArIChiKSkKIAogc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9hcHBlbmQoaGFuZGxlX3QgKmhhbmRsZSwKQEAgLTI0Miw3ICsyNDEsNyBAQAogc3RhdGljIHZvaWQgZHhfc2hvd19pbmRleCAoY2hhciAqIGxhYmVsLCBzdHJ1Y3QgZHhfZW50cnkgKmVudHJpZXMpCiB7CiAJaW50IGksIG4gPSBkeF9nZXRfY291bnQgKGVudHJpZXMpOwotICAgICAgICBwcmludGsoIiVzIGluZGV4ICIsIGxhYmVsKTsKKwlwcmludGsoIiVzIGluZGV4ICIsIGxhYmVsKTsKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAJCXByaW50aygiJXgtPiV1ICIsIGk/IGR4X2dldF9oYXNoKGVudHJpZXMgKyBpKSA6CiAJCQkJMCwgZHhfZ2V0X2Jsb2NrKGVudHJpZXMgKyBpKSk7CkBAIC05NjcsNiArOTY2LDcgQEAKIAkJCQkgIChibG9jazw8RVhUNF9CTE9DS19TSVpFX0JJVFMoc2IpKQogCQkJCQkgICsoKGNoYXIgKilkZSAtIGJoLT5iX2RhdGEpKSkgewogCQkJCWJyZWxzZSAoYmgpOworCQkJCSplcnIgPSBFUlJfQkFEX0RYX0RJUjsKIAkJCQlnb3RvIGVycm91dDsKIAkJCX0KIAkJCSpyZXNfZGlyID0gZGU7CkBAIC0xMTMyLDkgKzExMzIsOSBAQAogCWNoYXIgKmRhdGExID0gKCpiaCktPmJfZGF0YSwgKmRhdGEyOwogCXVuc2lnbmVkIHNwbGl0OwogCXN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpkZSA9IE5VTEwsICpkZTI7Ci0JaW50CWVycjsKKwlpbnQJZXJyID0gMDsKIAotCWJoMiA9IGV4dDRfYXBwZW5kIChoYW5kbGUsIGRpciwgJm5ld2Jsb2NrLCBlcnJvcik7CisJYmgyID0gZXh0NF9hcHBlbmQgKGhhbmRsZSwgZGlyLCAmbmV3YmxvY2ssICZlcnIpOwogCWlmICghKGJoMikpIHsKIAkJYnJlbHNlKCpiaCk7CiAJCSpiaCA9IE5VTEw7CkBAIC0xMTQzLDE0ICsxMTQzLDkgQEAKIAogCUJVRkZFUl9UUkFDRSgqYmgsICJnZXRfd3JpdGVfYWNjZXNzIik7CiAJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCAqYmgpOwotCWlmIChlcnIpIHsKLQlqb3VybmFsX2Vycm9yOgotCQlicmVsc2UoKmJoKTsKLQkJYnJlbHNlKGJoMik7Ci0JCSpiaCA9IE5VTEw7Ci0JCWV4dDRfc3RkX2Vycm9yKGRpci0+aV9zYiwgZXJyKTsKLQkJZ290byBlcnJvdXQ7Ci0JfQorCWlmIChlcnIpCisJCWdvdG8gam91cm5hbF9lcnJvcjsKKwogCUJVRkZFUl9UUkFDRShmcmFtZS0+YmgsICJnZXRfd3JpdGVfYWNjZXNzIik7CiAJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBmcmFtZS0+YmgpOwogCWlmIChlcnIpCkBAIC0xMTkzLDggKzExODgsMTYgQEAKIAkJZ290byBqb3VybmFsX2Vycm9yOwogCWJyZWxzZSAoYmgyKTsKIAlkeHRyYWNlKGR4X3Nob3dfaW5kZXggKCJmcmFtZSIsIGZyYW1lLT5lbnRyaWVzKSk7Ci1lcnJvdXQ6CiAJcmV0dXJuIGRlOworCitqb3VybmFsX2Vycm9yOgorCWJyZWxzZSgqYmgpOworCWJyZWxzZShiaDIpOworCSpiaCA9IE5VTEw7CisJZXh0NF9zdGRfZXJyb3IoZGlyLT5pX3NiLCBlcnIpOworZXJyb3V0OgorCSplcnJvciA9IGVycjsKKwlyZXR1cm4gTlVMTDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuYwppbmRleCBlYTk5ZjZjLi5hYTExZDdkIDEwMDY0NAotLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDQvcmVzaXplLmMKQEAgLTExLDcgKzExLDYgQEAKIAogI2RlZmluZSBFWFQ0RlNfREVCVUcKIAotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0NF9qYmQyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDcxOTEyNjkuLjE3NWI2OGMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTUxNywxNCArNTE3LDEyIEBACiB7CiAJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqKSBmb287CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX29ycGhhbik7CisJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX29ycGhhbik7CiAjaWZkZWYgQ09ORklHX0VYVDRERVZfRlNfWEFUVFIKLQkJaW5pdF9yd3NlbSgmZWktPnhhdHRyX3NlbSk7CisJaW5pdF9yd3NlbSgmZWktPnhhdHRyX3NlbSk7CiAjZW5kaWYKLQkJbXV0ZXhfaW5pdCgmZWktPnRydW5jYXRlX211dGV4KTsKLQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKLQl9CisJbXV0ZXhfaW5pdCgmZWktPnRydW5jYXRlX211dGV4KTsKKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogCiBzdGF0aWMgaW50IGluaXRfaW5vZGVjYWNoZSh2b2lkKQpAQCAtMTk4Nyw3ICsxOTg1LDcgQEAKIAogCWlmIChiZF9jbGFpbShiZGV2LCBzYikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAgIkVYVDQ6IGZhaWxlZCB0byBjbGFpbSBleHRlcm5hbCBqb3VybmFsIGRldmljZS5cbiIpOworCQkJIkVYVDQ6IGZhaWxlZCB0byBjbGFpbSBleHRlcm5hbCBqb3VybmFsIGRldmljZS5cbiIpOwogCQlibGtkZXZfcHV0KGJkZXYpOwogCQlyZXR1cm4gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMgYi9mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMKaW5kZXggYjZhNjg2MS4uZjE3ZWFmMiAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jCisrKyBiL2ZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYwpAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0NF9qYmQyLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0NF9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYyBiL2ZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jCmluZGV4IGI3NmYyZGIuLmUwZjA1YWMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jCisrKyBiL2ZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jCkBAIC05LDcgKzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0NF9qYmQyLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0NF9mcy5oPgogI2luY2x1ZGUgInhhdHRyLmgiCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyX3VzZXIuYyBiL2ZzL2V4dDQveGF0dHJfdXNlci5jCmluZGV4IGM1M2NkZWQuLjdlZDNkOGUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHJfdXNlci5jCisrKyBiL2ZzL2V4dDQveGF0dHJfdXNlci5jCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9leHQ0X2piZDIuaD4KICNpbmNsdWRlIDxsaW51eC9leHQ0X2ZzLmg+CiAjaW5jbHVkZSAieGF0dHIuaCIKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9jYWNoZS5jIGIvZnMvZmF0L2NhY2hlLmMKaW5kZXggMTk1OTE0My4uM2M5YzhhMSAxMDA2NDQKLS0tIGEvZnMvZmF0L2NhY2hlLmMKKysrIGIvZnMvZmF0L2NhY2hlLmMKQEAgLTQwLDggKzQwLDcgQEAKIHsKIAlzdHJ1Y3QgZmF0X2NhY2hlICpjYWNoZSA9IChzdHJ1Y3QgZmF0X2NhY2hlICopZm9vOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKQotCQlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPmNhY2hlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+Y2FjaGVfbGlzdCk7CiB9CiAKIGludCBfX2luaXQgZmF0X2NhY2hlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9kaXIuYyBiL2ZzL2ZhdC9kaXIuYwppbmRleCBjMTZhZjI0Li5jY2YxNjFkIDEwMDY0NAotLS0gYS9mcy9mYXQvZGlyLmMKKysrIGIvZnMvZmF0L2Rpci5jCkBAIC00MjIsNyArNDIyLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGZhdF9zZWFyY2hfbG9uZyk7CiAKIHN0cnVjdCBmYXRfaW9jdGxfZmlsbGRpcl9jYWxsYmFjayB7Ci0Jc3RydWN0IGRpcmVudCBfX3VzZXIgKmRpcmVudDsKKwl2b2lkIF9fdXNlciAqZGlyZW50OwogCWludCByZXN1bHQ7CiAJLyogZm9yIGRpciBpb2N0bCAqLwogCWNvbnN0IGNoYXIgKmxvbmduYW1lOwpAQCAtNjQ3LDYyICs2NDcsODUgQEAKIAlyZXR1cm4gX19mYXRfcmVhZGRpcihpbm9kZSwgZmlscCwgZGlyZW50LCBmaWxsZGlyLCAwLCAwKTsKIH0KIAotc3RhdGljIGludCBmYXRfaW9jdGxfZmlsbGRpcih2b2lkICpfX2J1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVfbGVuLAotCQkJICAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQotewotCXN0cnVjdCBmYXRfaW9jdGxfZmlsbGRpcl9jYWxsYmFjayAqYnVmID0gX19idWY7Ci0Jc3RydWN0IGRpcmVudCBfX3VzZXIgKmQxID0gYnVmLT5kaXJlbnQ7Ci0Jc3RydWN0IGRpcmVudCBfX3VzZXIgKmQyID0gZDEgKyAxOwotCi0JaWYgKGJ1Zi0+cmVzdWx0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlidWYtPnJlc3VsdCsrOwotCi0JaWYgKG5hbWUgIT0gTlVMTCkgewotCQkvKiBkaXJlbnQgaGFzIG9ubHkgc2hvcnQgbmFtZSAqLwotCQlpZiAobmFtZV9sZW4gPj0gc2l6ZW9mKGQxLT5kX25hbWUpKQotCQkJbmFtZV9sZW4gPSBzaXplb2YoZDEtPmRfbmFtZSkgLSAxOwotCi0JCWlmIChwdXRfdXNlcigwLCBkMi0+ZF9uYW1lKQkJCXx8Ci0JCSAgICBwdXRfdXNlcigwLCAmZDItPmRfcmVjbGVuKQkJCXx8Ci0JCSAgICBjb3B5X3RvX3VzZXIoZDEtPmRfbmFtZSwgbmFtZSwgbmFtZV9sZW4pCXx8Ci0JCSAgICBwdXRfdXNlcigwLCBkMS0+ZF9uYW1lICsgbmFtZV9sZW4pCQl8fAotCQkgICAgcHV0X3VzZXIobmFtZV9sZW4sICZkMS0+ZF9yZWNsZW4pKQotCQkJZ290byBlZmF1bHQ7Ci0JfSBlbHNlIHsKLQkJLyogZGlyZW50IGhhcyBzaG9ydCBhbmQgbG9uZyBuYW1lICovCi0JCWNvbnN0IGNoYXIgKmxvbmduYW1lID0gYnVmLT5sb25nbmFtZTsKLQkJaW50IGxvbmdfbGVuID0gYnVmLT5sb25nX2xlbjsKLQkJY29uc3QgY2hhciAqc2hvcnRuYW1lID0gYnVmLT5zaG9ydG5hbWU7Ci0JCWludCBzaG9ydF9sZW4gPSBidWYtPnNob3J0X2xlbjsKLQotCQlpZiAobG9uZ19sZW4gPj0gc2l6ZW9mKGQxLT5kX25hbWUpKQotCQkJbG9uZ19sZW4gPSBzaXplb2YoZDEtPmRfbmFtZSkgLSAxOwotCQlpZiAoc2hvcnRfbGVuID49IHNpemVvZihkMS0+ZF9uYW1lKSkKLQkJCXNob3J0X2xlbiA9IHNpemVvZihkMS0+ZF9uYW1lKSAtIDE7Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcihkMi0+ZF9uYW1lLCBsb25nbmFtZSwgbG9uZ19sZW4pCXx8Ci0JCSAgICBwdXRfdXNlcigwLCBkMi0+ZF9uYW1lICsgbG9uZ19sZW4pCQkJfHwKLQkJICAgIHB1dF91c2VyKGxvbmdfbGVuLCAmZDItPmRfcmVjbGVuKQkJCXx8Ci0JCSAgICBwdXRfdXNlcihpbm8sICZkMi0+ZF9pbm8pCQkJCXx8Ci0JCSAgICBwdXRfdXNlcihvZmZzZXQsICZkMi0+ZF9vZmYpCQkJfHwKLQkJICAgIGNvcHlfdG9fdXNlcihkMS0+ZF9uYW1lLCBzaG9ydG5hbWUsIHNob3J0X2xlbikJfHwKLQkJICAgIHB1dF91c2VyKDAsIGQxLT5kX25hbWUgKyBzaG9ydF9sZW4pCQkJfHwKLQkJICAgIHB1dF91c2VyKHNob3J0X2xlbiwgJmQxLT5kX3JlY2xlbikpCi0JCQlnb3RvIGVmYXVsdDsKLQl9Ci0JcmV0dXJuIDA7Ci1lZmF1bHQ6Ci0JYnVmLT5yZXN1bHQgPSAtRUZBVUxUOwotCXJldHVybiAtRUZBVUxUOworI2RlZmluZSBGQVRfSU9DVExfRklMTERJUl9GVU5DKGZ1bmMsIGRpcmVudF90eXBlKQkJCSAgIFwKK3N0YXRpYyBpbnQgZnVuYyh2b2lkICpfX2J1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVfbGVuLAkJICAgXAorCQkJICAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKSAgXAorewkJCQkJCQkJCSAgIFwKKwlzdHJ1Y3QgZmF0X2lvY3RsX2ZpbGxkaXJfY2FsbGJhY2sgKmJ1ZiA9IF9fYnVmOwkJCSAgIFwKKwlzdHJ1Y3QgZGlyZW50X3R5cGUgX191c2VyICpkMSA9IGJ1Zi0+ZGlyZW50OwkJCSAgIFwKKwlzdHJ1Y3QgZGlyZW50X3R5cGUgX191c2VyICpkMiA9IGQxICsgMTsJCQkJICAgXAorCQkJCQkJCQkJICAgXAorCWlmIChidWYtPnJlc3VsdCkJCQkJCQkgICBcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCSAgIFwKKwlidWYtPnJlc3VsdCsrOwkJCQkJCQkgICBcCisJCQkJCQkJCQkgICBcCisJaWYgKG5hbWUgIT0gTlVMTCkgewkJCQkJCSAgIFwKKwkJLyogZGlyZW50IGhhcyBvbmx5IHNob3J0IG5hbWUgKi8JCQkgICBcCisJCWlmIChuYW1lX2xlbiA+PSBzaXplb2YoZDEtPmRfbmFtZSkpCQkJICAgXAorCQkJbmFtZV9sZW4gPSBzaXplb2YoZDEtPmRfbmFtZSkgLSAxOwkJICAgXAorCQkJCQkJCQkJICAgXAorCQlpZiAocHV0X3VzZXIoMCwgZDItPmRfbmFtZSkJCQl8fAkgICBcCisJCSAgICBwdXRfdXNlcigwLCAmZDItPmRfcmVjbGVuKQkJCXx8CSAgIFwKKwkJICAgIGNvcHlfdG9fdXNlcihkMS0+ZF9uYW1lLCBuYW1lLCBuYW1lX2xlbikJfHwJICAgXAorCQkgICAgcHV0X3VzZXIoMCwgZDEtPmRfbmFtZSArIG5hbWVfbGVuKQkJfHwJICAgXAorCQkgICAgcHV0X3VzZXIobmFtZV9sZW4sICZkMS0+ZF9yZWNsZW4pKQkJCSAgIFwKKwkJCWdvdG8gZWZhdWx0OwkJCQkJICAgXAorCX0gZWxzZSB7CQkJCQkJCSAgIFwKKwkJLyogZGlyZW50IGhhcyBzaG9ydCBhbmQgbG9uZyBuYW1lICovCQkJICAgXAorCQljb25zdCBjaGFyICpsb25nbmFtZSA9IGJ1Zi0+bG9uZ25hbWU7CQkJICAgXAorCQlpbnQgbG9uZ19sZW4gPSBidWYtPmxvbmdfbGVuOwkJCQkgICBcCisJCWNvbnN0IGNoYXIgKnNob3J0bmFtZSA9IGJ1Zi0+c2hvcnRuYW1lOwkJCSAgIFwKKwkJaW50IHNob3J0X2xlbiA9IGJ1Zi0+c2hvcnRfbGVuOwkJCQkgICBcCisJCQkJCQkJCQkgICBcCisJCWlmIChsb25nX2xlbiA+PSBzaXplb2YoZDEtPmRfbmFtZSkpCQkJICAgXAorCQkJbG9uZ19sZW4gPSBzaXplb2YoZDEtPmRfbmFtZSkgLSAxOwkJICAgXAorCQlpZiAoc2hvcnRfbGVuID49IHNpemVvZihkMS0+ZF9uYW1lKSkJCQkgICBcCisJCQlzaG9ydF9sZW4gPSBzaXplb2YoZDEtPmRfbmFtZSkgLSAxOwkJICAgXAorCQkJCQkJCQkJICAgXAorCQlpZiAoY29weV90b191c2VyKGQyLT5kX25hbWUsIGxvbmduYW1lLCBsb25nX2xlbikJfHwgXAorCQkgICAgcHV0X3VzZXIoMCwgZDItPmRfbmFtZSArIGxvbmdfbGVuKQkJCXx8IFwKKwkJICAgIHB1dF91c2VyKGxvbmdfbGVuLCAmZDItPmRfcmVjbGVuKQkJCXx8IFwKKwkJICAgIHB1dF91c2VyKGlubywgJmQyLT5kX2lubykJCQkJfHwgXAorCQkgICAgcHV0X3VzZXIob2Zmc2V0LCAmZDItPmRfb2ZmKQkJCXx8IFwKKwkJICAgIGNvcHlfdG9fdXNlcihkMS0+ZF9uYW1lLCBzaG9ydG5hbWUsIHNob3J0X2xlbikJfHwgXAorCQkgICAgcHV0X3VzZXIoMCwgZDEtPmRfbmFtZSArIHNob3J0X2xlbikJCQl8fCBcCisJCSAgICBwdXRfdXNlcihzaG9ydF9sZW4sICZkMS0+ZF9yZWNsZW4pKQkJCSAgIFwKKwkJCWdvdG8gZWZhdWx0OwkJCQkJICAgXAorCX0JCQkJCQkJCSAgIFwKKwlyZXR1cm4gMDsJCQkJCQkJICAgXAorZWZhdWx0OgkJCQkJCQkJCSAgIFwKKwlidWYtPnJlc3VsdCA9IC1FRkFVTFQ7CQkJCQkJICAgXAorCXJldHVybiAtRUZBVUxUOwkJCQkJCQkgICBcCiB9CiAKLXN0YXRpYyBpbnQgZmF0X2Rpcl9pb2N0bChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwLAotCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorRkFUX0lPQ1RMX0ZJTExESVJfRlVOQyhmYXRfaW9jdGxfZmlsbGRpciwgZGlyZW50KQorCitzdGF0aWMgaW50IGZhdF9pb2N0bF9yZWFkZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgICB2b2lkIF9fdXNlciAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpciwKKwkJCSAgICAgaW50IHNob3J0X29ubHksIGludCBib3RoKQogewogCXN0cnVjdCBmYXRfaW9jdGxfZmlsbGRpcl9jYWxsYmFjayBidWY7Ci0Jc3RydWN0IGRpcmVudCBfX3VzZXIgKmQxOwotCWludCByZXQsIHNob3J0X29ubHksIGJvdGg7CisJaW50IHJldDsKKworCWJ1Zi5kaXJlbnQgPSBkaXJlbnQ7CisJYnVmLnJlc3VsdCA9IDA7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IC1FTk9FTlQ7CisJaWYgKCFJU19ERUFERElSKGlub2RlKSkgeworCQlyZXQgPSBfX2ZhdF9yZWFkZGlyKGlub2RlLCBmaWxwLCAmYnVmLCBmaWxsZGlyLAorCQkJCSAgICBzaG9ydF9vbmx5LCBib3RoKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSBidWYucmVzdWx0OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmF0X2Rpcl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZGlyZW50IF9fdXNlciAqZDEgPSAoc3RydWN0IGRpcmVudCBfX3VzZXIgKilhcmc7CisJaW50IHNob3J0X29ubHksIGJvdGg7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVkZBVF9JT0NUTF9SRUFERElSX1NIT1JUOgpAQCAtNzE3LDcgKzc0MCw2IEBACiAJCXJldHVybiBmYXRfZ2VuZXJpY19pb2N0bChpbm9kZSwgZmlscCwgY21kLCBhcmcpOwogCX0KIAotCWQxID0gKHN0cnVjdCBkaXJlbnQgX191c2VyICopYXJnOwogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZDEsIHNpemVvZihzdHJ1Y3QgZGlyZW50WzJdKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCS8qCkBAIC03MjgsNjkgKzc1MCw0OCBAQAogCWlmIChwdXRfdXNlcigwLCAmZDEtPmRfcmVjbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlidWYuZGlyZW50ID0gZDE7Ci0JYnVmLnJlc3VsdCA9IDA7Ci0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldCA9IC1FTk9FTlQ7Ci0JaWYgKCFJU19ERUFERElSKGlub2RlKSkgewotCQlyZXQgPSBfX2ZhdF9yZWFkZGlyKGlub2RlLCBmaWxwLCAmYnVmLCBmYXRfaW9jdGxfZmlsbGRpciwKLQkJCQkgICAgc2hvcnRfb25seSwgYm90aCk7Ci0JfQotCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gYnVmLnJlc3VsdDsKLQlyZXR1cm4gcmV0OworCXJldHVybiBmYXRfaW9jdGxfcmVhZGRpcihpbm9kZSwgZmlscCwgZDEsIGZhdF9pb2N0bF9maWxsZGlyLAorCQkJCSBzaG9ydF9vbmx5LCBib3RoKTsKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKICNkZWZpbmUJVkZBVF9JT0NUTF9SRUFERElSX0JPVEgzMglfSU9SKCdyJywgMSwgc3RydWN0IGNvbXBhdF9kaXJlbnRbMl0pCiAjZGVmaW5lCVZGQVRfSU9DVExfUkVBRERJUl9TSE9SVDMyCV9JT1IoJ3InLCAyLCBzdHJ1Y3QgY29tcGF0X2RpcmVudFsyXSkKIAotc3RhdGljIGxvbmcgZmF0X2NvbXBhdF9wdXRfZGlyZW50MzIoc3RydWN0IGRpcmVudCAqZCwKLQkJCQkgICAgc3RydWN0IGNvbXBhdF9kaXJlbnQgX191c2VyICpkMzIpCi17Ci0gICAgICAgIGlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZDMyLCBzaXplb2Yoc3RydWN0IGNvbXBhdF9kaXJlbnQpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKK0ZBVF9JT0NUTF9GSUxMRElSX0ZVTkMoZmF0X2NvbXBhdF9pb2N0bF9maWxsZGlyLCBjb21wYXRfZGlyZW50KQogCi0gICAgICAgIF9fcHV0X3VzZXIoZC0+ZF9pbm8sICZkMzItPmRfaW5vKTsKLSAgICAgICAgX19wdXRfdXNlcihkLT5kX29mZiwgJmQzMi0+ZF9vZmYpOwotICAgICAgICBfX3B1dF91c2VyKGQtPmRfcmVjbGVuLCAmZDMyLT5kX3JlY2xlbik7Ci0gICAgICAgIGlmIChfX2NvcHlfdG9fdXNlcihkMzItPmRfbmFtZSwgZC0+ZF9uYW1lLCBkLT5kX3JlY2xlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0gICAgICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgbG9uZyBmYXRfY29tcGF0X2Rpcl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLAorc3RhdGljIGxvbmcgZmF0X2NvbXBhdF9kaXJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGNtZCwKIAkJCQkgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGNvbXBhdF9kaXJlbnQgX191c2VyICpwID0gY29tcGF0X3B0cihhcmcpOwotCWludCByZXQ7Ci0JbW1fc2VnbWVudF90IG9sZGZzID0gZ2V0X2ZzKCk7Ci0Jc3RydWN0IGRpcmVudCBkWzJdOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBjb21wYXRfZGlyZW50IF9fdXNlciAqZDEgPSBjb21wYXRfcHRyKGFyZyk7CisJaW50IHNob3J0X29ubHksIGJvdGg7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVkZBVF9JT0NUTF9SRUFERElSX0JPVEgzMjoKLQkJY21kID0gVkZBVF9JT0NUTF9SRUFERElSX0JPVEg7Ci0JCWJyZWFrOwogCWNhc2UgVkZBVF9JT0NUTF9SRUFERElSX1NIT1JUMzI6Ci0JCWNtZCA9IFZGQVRfSU9DVExfUkVBRERJUl9TSE9SVDsKKwkJc2hvcnRfb25seSA9IDE7CisJCWJvdGggPSAwOworCQlicmVhazsKKwljYXNlIFZGQVRfSU9DVExfUkVBRERJUl9CT1RIMzI6CisJCXNob3J0X29ubHkgPSAwOworCQlib3RoID0gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CiAKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlsb2NrX2tlcm5lbCgpOwotCXJldCA9IGZhdF9kaXJfaW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSAgICBjbWQsICh1bnNpZ25lZCBsb25nKSAmZCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXNldF9mcyhvbGRmcyk7Ci0JaWYgKHJldCA+PSAwKSB7Ci0JCXJldCB8PSBmYXRfY29tcGF0X3B1dF9kaXJlbnQzMigmZFswXSwgcCk7Ci0JCXJldCB8PSBmYXRfY29tcGF0X3B1dF9kaXJlbnQzMigmZFsxXSwgcCArIDEpOwotCX0KLQlyZXR1cm4gcmV0OworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZDEsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2RpcmVudFsyXSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkvKgorCSAqIFllcywgd2UgZG9uJ3QgbmVlZCB0aGlzIHB1dF91c2VyKCkgYWJzb2x1dGVseS4gSG93ZXZlciBvbGQKKwkgKiBjb2RlIGRpZG4ndCByZXR1cm4gdGhlIHJpZ2h0IHZhbHVlLiBTbywgYXBwIHVzZSB0aGlzIHZhbHVlLAorCSAqIGluIG9yZGVyIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgRU9GLgorCSAqLworCWlmIChwdXRfdXNlcigwLCAmZDEtPmRfcmVjbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gZmF0X2lvY3RsX3JlYWRkaXIoaW5vZGUsIGZpbHAsIGQxLCBmYXRfY29tcGF0X2lvY3RsX2ZpbGxkaXIsCisJCQkJIHNob3J0X29ubHksIGJvdGgpOwogfQogI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KIApkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCA2NWNiNTRiLi40Nzk3MjJkIDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYworKysgYi9mcy9mYXQvaW5vZGUuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpZm5kZWYgQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVApAQCAtNDk5LDE0ICs1MDAsMTIgQEAKIHsKIAlzdHJ1Y3QgbXNkb3NfaW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IG1zZG9zX2lub2RlX2luZm8gKilmb287CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJc3Bpbl9sb2NrX2luaXQoJmVpLT5jYWNoZV9scnVfbG9jayk7Ci0JCWVpLT5ucl9jYWNoZXMgPSAwOwotCQllaS0+Y2FjaGVfdmFsaWRfaWQgPSBGQVRfQ0FDSEVfVkFMSUQgKyAxOwotCQlJTklUX0xJU1RfSEVBRCgmZWktPmNhY2hlX2xydSk7Ci0JCUlOSVRfSExJU1RfTk9ERSgmZWktPmlfZmF0X2hhc2gpOwotCQlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwotCX0KKwlzcGluX2xvY2tfaW5pdCgmZWktPmNhY2hlX2xydV9sb2NrKTsKKwllaS0+bnJfY2FjaGVzID0gMDsKKwllaS0+Y2FjaGVfdmFsaWRfaWQgPSBGQVRfQ0FDSEVfVkFMSUQgKyAxOworCUlOSVRfTElTVF9IRUFEKCZlaS0+Y2FjaGVfbHJ1KTsKKwlJTklUX0hMSVNUX05PREUoJmVpLT5pX2ZhdF9oYXNoKTsKKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBmYXRfaW5pdF9pbm9kZWNhY2hlKHZvaWQpCkBAIC04MjQsNiArODIzLDggQEAKIAl9CiAJaWYgKG9wdHMtPm5hbWVfY2hlY2sgIT0gJ24nKQogCQlzZXFfcHJpbnRmKG0sICIsY2hlY2s9JWMiLCBvcHRzLT5uYW1lX2NoZWNrKTsKKwlpZiAob3B0cy0+dXNlZnJlZSkKKwkJc2VxX3B1dHMobSwgIix1c2VmcmVlIik7CiAJaWYgKG9wdHMtPnF1aWV0KQogCQlzZXFfcHV0cyhtLCAiLHF1aWV0Iik7CiAJaWYgKG9wdHMtPnNob3dleGVjKQpAQCAtODQ5LDcgKzg1MCw3IEBACiAKIGVudW0gewogCU9wdF9jaGVja19uLCBPcHRfY2hlY2tfciwgT3B0X2NoZWNrX3MsIE9wdF91aWQsIE9wdF9naWQsCi0JT3B0X3VtYXNrLCBPcHRfZG1hc2ssIE9wdF9mbWFzaywgT3B0X2NvZGVwYWdlLCBPcHRfbm9jYXNlLAorCU9wdF91bWFzaywgT3B0X2RtYXNrLCBPcHRfZm1hc2ssIE9wdF9jb2RlcGFnZSwgT3B0X3VzZWZyZWUsIE9wdF9ub2Nhc2UsCiAJT3B0X3F1aWV0LCBPcHRfc2hvd2V4ZWMsIE9wdF9kZWJ1ZywgT3B0X2ltbXV0YWJsZSwKIAlPcHRfZG90cywgT3B0X25vZG90cywKIAlPcHRfY2hhcnNldCwgT3B0X3Nob3J0bmFtZV9sb3dlciwgT3B0X3Nob3J0bmFtZV93aW45NSwKQEAgLTg3MSw2ICs4NzIsNyBAQAogCXtPcHRfZG1hc2ssICJkbWFzaz0lbyJ9LAogCXtPcHRfZm1hc2ssICJmbWFzaz0lbyJ9LAogCXtPcHRfY29kZXBhZ2UsICJjb2RlcGFnZT0ldSJ9LAorCXtPcHRfdXNlZnJlZSwgInVzZWZyZWUifSwKIAl7T3B0X25vY2FzZSwgIm5vY2FzZSJ9LAogCXtPcHRfcXVpZXQsICJxdWlldCJ9LAogCXtPcHRfc2hvd2V4ZWMsICJzaG93ZXhlYyJ9LApAQCAtOTUwLDcgKzk1Miw3IEBACiAJb3B0cy0+cXVpZXQgPSBvcHRzLT5zaG93ZXhlYyA9IG9wdHMtPnN5c19pbW11dGFibGUgPSBvcHRzLT5kb3RzT0sgPSAgMDsKIAlvcHRzLT51dGY4ID0gb3B0cy0+dW5pY29kZV94bGF0ZSA9IDA7CiAJb3B0cy0+bnVtdGFpbCA9IDE7Ci0Jb3B0cy0+bm9jYXNlID0gMDsKKwlvcHRzLT51c2VmcmVlID0gb3B0cy0+bm9jYXNlID0gMDsKIAkqZGVidWcgPSAwOwogCiAJaWYgKCFvcHRpb25zKQpAQCAtOTc4LDYgKzk4MCw5IEBACiAJCWNhc2UgT3B0X2NoZWNrX246CiAJCQlvcHRzLT5uYW1lX2NoZWNrID0gJ24nOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X3VzZWZyZWU6CisJCQlvcHRzLT51c2VmcmVlID0gMTsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9ub2Nhc2U6CiAJCQlpZiAoIWlzX3ZmYXQpCiAJCQkJb3B0cy0+bm9jYXNlID0gMTsKQEAgLTEyMTcsOCArMTIyMiw3IEBACiAJfQogCWxvZ2ljYWxfc2VjdG9yX3NpemUgPQogCQlsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikmYi0+c2VjdG9yX3NpemUpKTsKLQlpZiAoIWxvZ2ljYWxfc2VjdG9yX3NpemUKLQkgICAgfHwgKGxvZ2ljYWxfc2VjdG9yX3NpemUgJiAobG9naWNhbF9zZWN0b3Jfc2l6ZSAtIDEpKQorCWlmICghaXNfcG93ZXJfb2ZfMihsb2dpY2FsX3NlY3Rvcl9zaXplKQogCSAgICB8fCAobG9naWNhbF9zZWN0b3Jfc2l6ZSA8IDUxMikKIAkgICAgfHwgKFBBR0VfQ0FDSEVfU0laRSA8IGxvZ2ljYWxfc2VjdG9yX3NpemUpKSB7CiAJCWlmICghc2lsZW50KQpAQCAtMTIyOCw4ICsxMjMyLDcgQEAKIAkJZ290byBvdXRfaW52YWxpZDsKIAl9CiAJc2JpLT5zZWNfcGVyX2NsdXMgPSBiLT5zZWNfcGVyX2NsdXM7Ci0JaWYgKCFzYmktPnNlY19wZXJfY2x1cwotCSAgICB8fCAoc2JpLT5zZWNfcGVyX2NsdXMgJiAoc2JpLT5zZWNfcGVyX2NsdXMgLSAxKSkpIHsKKwlpZiAoIWlzX3Bvd2VyX29mXzIoc2JpLT5zZWNfcGVyX2NsdXMpKSB7CiAJCWlmICghc2lsZW50KQogCQkJcHJpbnRrKEtFUk5fRVJSICJGQVQ6IGJvZ3VzIHNlY3RvcnMgcGVyIGNsdXN0ZXIgJXVcbiIsCiAJCQkgICAgICAgc2JpLT5zZWNfcGVyX2NsdXMpOwpAQCAtMTMwNSw3ICsxMzA4LDkgQEAKIAkJCSAgICAgICBsZTMyX3RvX2NwdShmc2luZm8tPnNpZ25hdHVyZTIpLAogCQkJICAgICAgIHNiaS0+ZnNpbmZvX3NlY3Rvcik7CiAJCX0gZWxzZSB7Ci0JCQlzYmktPmZyZWVfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShmc2luZm8tPmZyZWVfY2x1c3RlcnMpOworCQkJaWYgKHNiaS0+b3B0aW9ucy51c2VmcmVlKQorCQkJCXNiaS0+ZnJlZV9jbHVzdGVycyA9CisJCQkJCWxlMzJfdG9fY3B1KGZzaW5mby0+ZnJlZV9jbHVzdGVycyk7CiAJCQlzYmktPnByZXZfZnJlZSA9IGxlMzJfdG9fY3B1KGZzaW5mby0+bmV4dF9jbHVzdGVyKTsKIAkJfQogCmRpZmYgLS1naXQgYS9mcy9maWZvLmMgYi9mcy9maWZvLmMKaW5kZXggNDkwMzViMS4uOTc4NWUzNiAxMDA2NDQKLS0tIGEvZnMvZmlmby5jCisrKyBiL2ZzL2ZpZm8uYwpAQCAtMTEsOCArMTEsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcGlwZV9mc19pLmg+CiAKIHN0YXRpYyB2b2lkIHdhaXRfZm9yX3BhcnRuZXIoc3RydWN0IGlub2RlKiBpbm9kZSwgdW5zaWduZWQgaW50ICpjbnQpCmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggNGMxN2ExOC4uZDE3ZmQ2OSAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCisrKyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXZlbnRwb2xsLmg+CmRpZmYgLS1naXQgYS9mcy9maWxlc3lzdGVtcy5jIGIvZnMvZmlsZXN5c3RlbXMuYwppbmRleCA3YTRmNjFhLi5mMzdmODcyIDEwMDY0NAotLS0gYS9mcy9maWxlc3lzdGVtcy5jCisrKyBiL2ZzL2ZpbGVzeXN0ZW1zLmMKQEAgLTQxLDExICs0MSwxMiBAQAogCW1vZHVsZV9wdXQoZnMtPm93bmVyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICoqZmluZF9maWxlc3lzdGVtKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKipmaW5kX2ZpbGVzeXN0ZW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbGVuKQogewogCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICoqcDsKIAlmb3IgKHA9JmZpbGVfc3lzdGVtczsgKnA7IHA9JigqcCktPm5leHQpCi0JCWlmIChzdHJjbXAoKCpwKS0+bmFtZSxuYW1lKSA9PSAwKQorCQlpZiAoc3RybGVuKCgqcCktPm5hbWUpID09IGxlbiAmJgorCQkgICAgc3RybmNtcCgoKnApLT5uYW1lLCBuYW1lLCBsZW4pID09IDApCiAJCQlicmVhazsKIAlyZXR1cm4gcDsKIH0KQEAgLTY4LDExICs2OSwxMiBAQAogCWludCByZXMgPSAwOwogCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICoqIHA7CiAKKwlCVUdfT04oc3RyY2hyKGZzLT5uYW1lLCAnLicpKTsKIAlpZiAoZnMtPm5leHQpCiAJCXJldHVybiAtRUJVU1k7CiAJSU5JVF9MSVNUX0hFQUQoJmZzLT5mc19zdXBlcnMpOwogCXdyaXRlX2xvY2soJmZpbGVfc3lzdGVtc19sb2NrKTsKLQlwID0gZmluZF9maWxlc3lzdGVtKGZzLT5uYW1lKTsKKwlwID0gZmluZF9maWxlc3lzdGVtKGZzLT5uYW1lLCBzdHJsZW4oZnMtPm5hbWUpKTsKIAlpZiAoKnApCiAJCXJlcyA9IC1FQlVTWTsKIAllbHNlCkBAIC0yMTUsMTkgKzIxNywyNiBAQAogc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmdldF9mc190eXBlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzOworCWNvbnN0IGNoYXIgKmRvdCA9IHN0cmNocihuYW1lLCAnLicpOworCXVuc2lnbmVkIGxlbiA9IGRvdCA/IGRvdCAtIG5hbWUgOiBzdHJsZW4obmFtZSk7CiAKIAlyZWFkX2xvY2soJmZpbGVfc3lzdGVtc19sb2NrKTsKLQlmcyA9ICooZmluZF9maWxlc3lzdGVtKG5hbWUpKTsKKwlmcyA9ICooZmluZF9maWxlc3lzdGVtKG5hbWUsIGxlbikpOwogCWlmIChmcyAmJiAhdHJ5X21vZHVsZV9nZXQoZnMtPm93bmVyKSkKIAkJZnMgPSBOVUxMOwogCXJlYWRfdW5sb2NrKCZmaWxlX3N5c3RlbXNfbG9jayk7Ci0JaWYgKCFmcyAmJiAocmVxdWVzdF9tb2R1bGUoIiVzIiwgbmFtZSkgPT0gMCkpIHsKKwlpZiAoIWZzICYmIChyZXF1ZXN0X21vZHVsZSgiJS4qcyIsIGxlbiwgbmFtZSkgPT0gMCkpIHsKIAkJcmVhZF9sb2NrKCZmaWxlX3N5c3RlbXNfbG9jayk7Ci0JCWZzID0gKihmaW5kX2ZpbGVzeXN0ZW0obmFtZSkpOworCQlmcyA9ICooZmluZF9maWxlc3lzdGVtKG5hbWUsIGxlbikpOwogCQlpZiAoZnMgJiYgIXRyeV9tb2R1bGVfZ2V0KGZzLT5vd25lcikpCiAJCQlmcyA9IE5VTEw7CiAJCXJlYWRfdW5sb2NrKCZmaWxlX3N5c3RlbXNfbG9jayk7CiAJfQorCisJaWYgKGRvdCAmJiBmcyAmJiAhKGZzLT5mc19mbGFncyAmIEZTX0hBU19TVUJUWVBFKSkgeworCQlwdXRfZmlsZXN5c3RlbShmcyk7CisJCWZzID0gTlVMTDsKKwl9CiAJcmV0dXJuIGZzOwogfQogCmRpZmYgLS1naXQgYS9mcy9mcmVldnhmcy92eGZzX2JtYXAuYyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfYm1hcC5jCmluZGV4IDJkNzExMjguLmY4NmZkM2MgMTAwNjQ0Ci0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfYm1hcC5jCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfYm1hcC5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAogCQlicCA9IHNiX2JyZWFkKGlwLT5pX3NiLAogCQkJCWluZGlyICsgKGkgLyBWWEZTX1RZUEVEX1BFUl9CTE9DSyhpcC0+aV9zYikpKTsKLQkJaWYgKCFidWZmZXJfbWFwcGVkKGJwKSkKKwkJaWYgKCFicCB8fCAhYnVmZmVyX21hcHBlZChicCkpCiAJCQlyZXR1cm4gMDsKIAogCQl0eXAgPSAoKHN0cnVjdCB2eGZzX3R5cGVkICopYnAtPmJfZGF0YSkgKwpkaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jIGIvZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jCmluZGV4IDA5OGE5MTUuLmQxZjdjNWIgMTAwNjQ0Ci0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYworKysgYi9mcy9mcmVldnhmcy92eGZzX2lub2RlLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAlvZmZzZXQgPSAoKGlubyAlIChzYnAtPnNfYmxvY2tzaXplIC8gVlhGU19JU0laRSkpICogVlhGU19JU0laRSk7CiAJYnAgPSBzYl9icmVhZChzYnAsIGJsb2NrKTsKIAotCWlmIChidWZmZXJfbWFwcGVkKGJwKSkgeworCWlmIChicCAmJiBidWZmZXJfbWFwcGVkKGJwKSkgewogCQlzdHJ1Y3Qgdnhmc19pbm9kZV9pbmZvCSp2aXA7CiAJCXN0cnVjdCB2eGZzX2Rpbm9kZQkqZGlwOwogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCA4ODkwZWJhLi5iZDVhNzcyIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTQ4NSw3ICs0ODUsNyBAQAogc3RhdGljIGludCBmdXNlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksIGludCBtb2RlLAogCQkgICAgICAgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JaWYgKG5kICYmIChuZC0+ZmxhZ3MgJiBMT09LVVBfQ1JFQVRFKSkgeworCWlmIChuZCAmJiAobmQtPmZsYWdzICYgTE9PS1VQX09QRU4pKSB7CiAJCWludCBlcnIgPSBmdXNlX2NyZWF0ZV9vcGVuKGRpciwgZW50cnksIG1vZGUsIG5kKTsKIAkJaWYgKGVyciAhPSAtRU5PU1lTKQogCQkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggYWNmYWQ2NS4uYWRmNzk5NSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1c2VfZGlyZWN0X2lvX2ZpbGVfb3BlcmF0aW9uczsKIApAQCAtNjA5LDcgKzYxMCw5IEBACiAJc3NpemVfdCByZXM7CiAJLyogRG9uJ3QgYWxsb3cgcGFyYWxsZWwgd3JpdGVzIHRvIHRoZSBzYW1lIGZpbGUgKi8KIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JcmVzID0gZnVzZV9kaXJlY3RfaW8oZmlsZSwgYnVmLCBjb3VudCwgcHBvcywgMSk7CisJcmVzID0gZ2VuZXJpY193cml0ZV9jaGVja3MoZmlsZSwgcHBvcywgJmNvdW50LCAwKTsKKwlpZiAoIXJlcykKKwkJcmVzID0gZnVzZV9kaXJlY3RfaW8oZmlsZSwgYnVmLCBjb3VudCwgcHBvcywgMSk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCBkODAwM2JlLi45ODA0YzBjIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogTU9EVUxFX0FVVEhPUigiTWlrbG9zIFN6ZXJlZGkgPG1pa2xvc0BzemVyZWRpLmh1PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSIpOwpAQCAtNDUzLDYgKzQ1NCw3IEBACiAJLmRlc3Ryb3lfaW5vZGUgID0gZnVzZV9kZXN0cm95X2lub2RlLAogCS5yZWFkX2lub2RlCT0gZnVzZV9yZWFkX2lub2RlLAogCS5jbGVhcl9pbm9kZQk9IGZ1c2VfY2xlYXJfaW5vZGUsCisJLmRyb3BfaW5vZGUJPSBnZW5lcmljX2RlbGV0ZV9pbm9kZSwKIAkucmVtb3VudF9mcwk9IGZ1c2VfcmVtb3VudF9mcywKIAkucHV0X3N1cGVyCT0gZnVzZV9wdXRfc3VwZXIsCiAJLnVtb3VudF9iZWdpbgk9IGZ1c2VfdW1vdW50X2JlZ2luLApAQCAtNjM2LDYgKzYzOCw3IEBACiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZnVzZV9mc190eXBlID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiZnVzZSIsCisJLmZzX2ZsYWdzCT0gRlNfSEFTX1NVQlRZUEUsCiAJLmdldF9zYgkJPSBmdXNlX2dldF9zYiwKIAkua2lsbF9zYgk9IGtpbGxfYW5vbl9zdXBlciwKIH07CkBAIC02NTIsNiArNjU1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBmdXNlYmxrX2ZzX3R5cGUgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJmdXNlYmxrIiwKKwkuZnNfZmxhZ3MJPSBGU19IQVNfU1VCVFlQRSwKIAkuZ2V0X3NiCQk9IGZ1c2VfZ2V0X3NiX2JsaywKIAkua2lsbF9zYgk9IGtpbGxfYmxvY2tfc3VwZXIsCiAJLmZzX2ZsYWdzCT0gRlNfUkVRVUlSRVNfREVWLApAQCAtNjg1LDggKzY4OSw3IEBACiB7CiAJc3RydWN0IGlub2RlICogaW5vZGUgPSBmb287CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpCi0JCWlub2RlX2luaXRfb25jZShpbm9kZSk7CisJaW5vZGVfaW5pdF9vbmNlKGlub2RlKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgZnVzZV9mc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmggYi9mcy9nZnMyL2dsb2NrLmgKaW5kZXggMTE0NzdjYS4uYjNlMTUyZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5oCisrKyBiL2ZzL2dmczIvZ2xvY2suaApAQCAtMTAsNiArMTAsNyBAQAogI2lmbmRlZiBfX0dMT0NLX0RPVF9IX18KICNkZWZpbmUgX19HTE9DS19ET1RfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImluY29yZS5oIgogCiAvKiBGbGFncyBmb3IgbG9jayByZXF1ZXN0czsgdXNlZCBpbiBnZnMyX2hvbGRlciBnaF9mbGFnIGZpZWxkLgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9wcy5jIGIvZnMvZ2ZzMi9nbG9wcy5jCmluZGV4IDM5YzhhZTIuLjdiODI2NTcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuYworKysgYi9mcy9nZnMyL2dsb3BzLmMKQEAgLTE2MywxMCArMTYzLDcgQEAKIAkJaWYgKGlwKSB7CiAJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlwLT5pX2lub2RlLmlfbWFwcGluZzsKIAkJCWludCBlcnJvciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1hcHBpbmcpOwotCQkJaWYgKGVycm9yID09IC1FTk9TUEMpCi0JCQkJc2V0X2JpdChBU19FTk9TUEMsICZtYXBwaW5nLT5mbGFncyk7Ci0JCQllbHNlIGlmIChlcnJvcikKLQkJCQlzZXRfYml0KEFTX0VJTywgJm1hcHBpbmctPmZsYWdzKTsKKwkJCW1hcHBpbmdfc2V0X2Vycm9yKG1hcHBpbmcsIGVycm9yKTsKIAkJfQogCQljbGVhcl9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKTsKIAkJZ2ZzMl9haWxfZW1wdHlfZ2woZ2wpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL25vbG9jay9tYWluLmMgYi9mcy9nZnMyL2xvY2tpbmcvbm9sb2NrL21haW4uYwppbmRleCA1Y2MxZGZhLi4wZDE0OWM4YyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2NraW5nL25vbG9jay9tYWluLmMKKysrIGIvZnMvZ2ZzMi9sb2NraW5nL25vbG9jay9tYWluLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKIHN0cnVjdCBub2xvY2tfbG9ja3NwYWNlIHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWFpbi5jIGIvZnMvZ2ZzMi9tYWluLmMKaW5kZXggZTQ2MDQ4Ny4uNzg3YTBlZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tYWluLmMKKysrIGIvZnMvZ2ZzMi9tYWluLmMKQEAgLTI3LDI5ICsyNywyNyBAQAogc3RhdGljIHZvaWQgZ2ZzMl9pbml0X2lub2RlX29uY2Uodm9pZCAqZm9vLCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IGZvbzsKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJaW5vZGVfaW5pdF9vbmNlKCZpcC0+aV9pbm9kZSk7Ci0JCXNwaW5fbG9ja19pbml0KCZpcC0+aV9zcGluKTsKLQkJaW5pdF9yd3NlbSgmaXAtPmlfcndfbXV0ZXgpOwotCQltZW1zZXQoaXAtPmlfY2FjaGUsIDAsIHNpemVvZihpcC0+aV9jYWNoZSkpOwotCX0KKworCWlub2RlX2luaXRfb25jZSgmaXAtPmlfaW5vZGUpOworCXNwaW5fbG9ja19pbml0KCZpcC0+aV9zcGluKTsKKwlpbml0X3J3c2VtKCZpcC0+aV9yd19tdXRleCk7CisJbWVtc2V0KGlwLT5pX2NhY2hlLCAwLCBzaXplb2YoaXAtPmlfY2FjaGUpKTsKIH0KIAogc3RhdGljIHZvaWQgZ2ZzMl9pbml0X2dsb2NrX29uY2Uodm9pZCAqZm9vLCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IGZvbzsKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJSU5JVF9ITElTVF9OT0RFKCZnbC0+Z2xfbGlzdCk7Ci0JCXNwaW5fbG9ja19pbml0KCZnbC0+Z2xfc3Bpbik7Ci0JCUlOSVRfTElTVF9IRUFEKCZnbC0+Z2xfaG9sZGVycyk7Ci0JCUlOSVRfTElTVF9IRUFEKCZnbC0+Z2xfd2FpdGVyczEpOwotCQlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX3dhaXRlcnMzKTsKLQkJZ2wtPmdsX2x2YiA9IE5VTEw7Ci0JCWF0b21pY19zZXQoJmdsLT5nbF9sdmJfY291bnQsIDApOwotCQlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX3JlY2xhaW0pOwotCQlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2FpbF9saXN0KTsKLQkJYXRvbWljX3NldCgmZ2wtPmdsX2FpbF9jb3VudCwgMCk7Ci0JfQorCisJSU5JVF9ITElTVF9OT0RFKCZnbC0+Z2xfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJmdsLT5nbF9zcGluKTsKKwlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2hvbGRlcnMpOworCUlOSVRfTElTVF9IRUFEKCZnbC0+Z2xfd2FpdGVyczEpOworCUlOSVRfTElTVF9IRUFEKCZnbC0+Z2xfd2FpdGVyczMpOworCWdsLT5nbF9sdmIgPSBOVUxMOworCWF0b21pY19zZXQoJmdsLT5nbF9sdmJfY291bnQsIDApOworCUlOSVRfTElTVF9IRUFEKCZnbC0+Z2xfcmVjbGFpbSk7CisJSU5JVF9MSVNUX0hFQUQoJmdsLT5nbF9haWxfbGlzdCk7CisJYXRvbWljX3NldCgmZ2wtPmdsX2FpbF9jb3VudCwgMCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZGVudHJ5LmMgYi9mcy9nZnMyL29wc19kZW50cnkuYwppbmRleCBjNmJhYzZiLi5hNmZkYzUyIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19kZW50cnkuYworKysgYi9mcy9nZnMyL29wc19kZW50cnkuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19maWxlLmMgYi9mcy9nZnMyL29wc19maWxlLmMKaW5kZXggMzI5YzRkYy4uMDY0ZGY4OCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZmlsZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZpbGUuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0Ml9mcy5oPgpkaWZmIC0tZ2l0IGEvZnMvaGZzL2J0cmVlLmMgYi9mcy9oZnMvYnRyZWUuYwppbmRleCA1ZmQwZWQ3Li44YTNhNjUwIDEwMDY0NAotLS0gYS9mcy9oZnMvYnRyZWUuYworKysgYi9mcy9oZnMvYnRyZWUuYwpAQCAtOSw2ICs5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KIAogI2luY2x1ZGUgImJ0cmVlLmgiCiAKQEAgLTc2LDcgKzc3LDcgQEAKIAl0cmVlLT5kZXB0aCA9IGJlMTZfdG9fY3B1KGhlYWQtPmRlcHRoKTsKIAogCXNpemUgPSB0cmVlLT5ub2RlX3NpemU7Ci0JaWYgKCFzaXplIHx8IHNpemUgJiAoc2l6ZSAtIDEpKQorCWlmICghaXNfcG93ZXJfb2ZfMihzaXplKSkKIAkJZ290byBmYWlsX3BhZ2U7CiAJaWYgKCF0cmVlLT5ub2RlX2NvdW50KQogCQlnb3RvIGZhaWxfcGFnZTsKZGlmZiAtLWdpdCBhL2ZzL2hmcy9pbm9kZS5jIGIvZnMvaGZzL2lub2RlLmMKaW5kZXggZmFmY2JhNS4uOWE5MzRkYiAxMDA2NDQKLS0tIGEvZnMvaGZzL2lub2RlLmMKKysrIGIvZnMvaGZzL2lub2RlLmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJoZnNfZnMuaCIKICNpbmNsdWRlICJidHJlZS5oIgpkaWZmIC0tZ2l0IGEvZnMvaGZzL3N1cGVyLmMgYi9mcy9oZnMvc3VwZXIuYwppbmRleCA0ZjE4ODhmLi45MmNmODc1IDEwMDY0NAotLS0gYS9mcy9oZnMvc3VwZXIuYworKysgYi9mcy9oZnMvc3VwZXIuYwpAQCAtNDM0LDggKzQzNCw3IEBACiB7CiAJc3RydWN0IGhmc19pbm9kZV9pbmZvICppID0gcDsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKLQkJaW5vZGVfaW5pdF9vbmNlKCZpLT52ZnNfaW5vZGUpOworCWlub2RlX2luaXRfb25jZSgmaS0+dmZzX2lub2RlKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9oZnNfZnModm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnRyZWUuYyBiL2ZzL2hmc3BsdXMvYnRyZWUuYwppbmRleCBhOWI5ZTg3Li45MGViYWI3IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2J0cmVlLmMKKysrIGIvZnMvaGZzcGx1cy9idHJlZS5jCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KIAogI2luY2x1ZGUgImhmc3BsdXNfZnMuaCIKICNpbmNsdWRlICJoZnNwbHVzX3Jhdy5oIgpAQCAtNjksNyArNzAsNyBAQAogCX0KIAogCXNpemUgPSB0cmVlLT5ub2RlX3NpemU7Ci0JaWYgKCFzaXplIHx8IHNpemUgJiAoc2l6ZSAtIDEpKQorCWlmICghaXNfcG93ZXJfb2ZfMihzaXplKSkKIAkJZ290byBmYWlsX3BhZ2U7CiAJaWYgKCF0cmVlLT5ub2RlX2NvdW50KQogCQlnb3RvIGZhaWxfcGFnZTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCA2NDIwMTJhLi40NWRhYjVkIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXBhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiaGZzcGx1c19mcy5oIgogI2luY2x1ZGUgImhmc3BsdXNfcmF3LmgiCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmMKaW5kZXggMzdhZmJlYy4uZWJkMWIzOCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9zdXBlci5jCisrKyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwpAQCAtNDcwLDggKzQ3MCw3IEBACiB7CiAJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaSA9IHA7CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpCi0JCWlub2RlX2luaXRfb25jZSgmaS0+dmZzX2lub2RlKTsKKwlpbm9kZV9pbml0X29uY2UoJmktPnZmc19pbm9kZSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfaGZzcGx1c19mcyh2b2lkKQpkaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmcy5oIGIvZnMvaG9zdGZzL2hvc3Rmcy5oCmluZGV4IDcwNTQzYjEuLjA2ZTU5MzAgMTAwNjQ0Ci0tLSBhL2ZzL2hvc3Rmcy9ob3N0ZnMuaAorKysgYi9mcy9ob3N0ZnMvaG9zdGZzLmgKQEAgLTU1LDcgKzU1LDcgQEAKIAkJICAgICBpbnQgKm1vZGVfb3V0LCBpbnQgKm5saW5rX291dCwgaW50ICp1aWRfb3V0LCBpbnQgKmdpZF9vdXQsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBsb25nICpzaXplX291dCwgc3RydWN0IHRpbWVzcGVjICphdGltZV9vdXQsCiAJCSAgICAgc3RydWN0IHRpbWVzcGVjICptdGltZV9vdXQsIHN0cnVjdCB0aW1lc3BlYyAqY3RpbWVfb3V0LAotCQkgICAgIGludCAqYmxrc2l6ZV9vdXQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqYmxvY2tzX291dCk7CisJCSAgICAgaW50ICpibGtzaXplX291dCwgdW5zaWduZWQgbG9uZyBsb25nICpibG9ja3Nfb3V0LCBpbnQgZmQpOwogZXh0ZXJuIGludCBhY2Nlc3NfZmlsZShjaGFyICpwYXRoLCBpbnQgciwgaW50IHcsIGludCB4KTsKIGV4dGVybiBpbnQgb3Blbl9maWxlKGNoYXIgKnBhdGgsIGludCByLCBpbnQgdywgaW50IGFwcGVuZCk7CiBleHRlcm4gaW50IGZpbGVfdHlwZShjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1haiwgaW50ICptaW4pOwpAQCAtNzEsNyArNzEsNyBAQAogZXh0ZXJuIGludCBmc3luY19maWxlKGludCBmZCwgaW50IGRhdGFzeW5jKTsKIGV4dGVybiBpbnQgZmlsZV9jcmVhdGUoY2hhciAqbmFtZSwgaW50IHVyLCBpbnQgdXcsIGludCB1eCwgaW50IGdyLAogCQkgICAgICAgaW50IGd3LCBpbnQgZ3gsIGludCBvciwgaW50IG93LCBpbnQgb3gpOwotZXh0ZXJuIGludCBzZXRfYXR0cihjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3QgaG9zdGZzX2lhdHRyICphdHRycyk7CitleHRlcm4gaW50IHNldF9hdHRyKGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBob3N0ZnNfaWF0dHIgKmF0dHJzLCBpbnQgZmQpOwogZXh0ZXJuIGludCBtYWtlX3N5bWxpbmsoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOwogZXh0ZXJuIGludCB1bmxpbmtfZmlsZShjb25zdCBjaGFyICpmaWxlKTsKIGV4dGVybiBpbnQgZG9fbWtkaXIoY29uc3QgY2hhciAqZmlsZSwgaW50IG1vZGUpOwpAQCAtODcsMTQgKzg3LDMgQEAKIAkJICAgICBsb25nICpzcGFyZV9vdXQpOwogCiAjZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKaW5kZXggZmQzMDFhOS4uODI4NjQ5MSAxMDA2NDQKLS0tIGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKKysrIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDcgSmVmZiBEaWtlIChqZGlrZUB7YWRkdG9pdCxsaW51eC5pbnRlbH0uY29tKQogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogICoKICAqIFBvcnRlZCB0aGUgZmlsZXN5c3RlbSByb3V0aW5lcyB0byAyLjUuCkBAIC0zMSwxNCArMzEsMTQgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaG9zdGZzX2lub2RlX2luZm8gKkhPU1RGU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JcmV0dXJuKGxpc3RfZW50cnkoaW5vZGUsIHN0cnVjdCBob3N0ZnNfaW5vZGVfaW5mbywgdmZzX2lub2RlKSk7CisJcmV0dXJuIGxpc3RfZW50cnkoaW5vZGUsIHN0cnVjdCBob3N0ZnNfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKIH0KIAogI2RlZmluZSBGSUxFX0hPU1RGU19JKGZpbGUpIEhPU1RGU19JKChmaWxlKS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkKIAogaW50IGhvc3Rmc19kX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JcmV0dXJuKDEpOworCXJldHVybiAxOwogfQogCiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaG9zdGZzX2RlbnRyeV9vcHMgPSB7CkBAIC03OSw3ICs3OSw3IEBACiAJCX0KIAkJb3B0aW9ucyA9IHB0cjsKIAl9Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiBfX3VtbF9zZXR1cCgiaG9zdGZzPSIsIGhvc3Rmc19hcmdzLApAQCAtMTEwLDcgKzExMCw4IEBACiAJcm9vdCA9IEhPU1RGU19JKHBhcmVudC0+ZF9pbm9kZSktPmhvc3RfZmlsZW5hbWU7CiAJbGVuICs9IHN0cmxlbihyb290KTsKIAluYW1lID0ga21hbGxvYyhsZW4gKyBleHRyYSArIDEsIEdGUF9LRVJORUwpOwotCWlmKG5hbWUgPT0gTlVMTCkgcmV0dXJuKE5VTEwpOworCWlmKG5hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CiAKIAluYW1lW2xlbl0gPSAnXDAnOwogCXBhcmVudCA9IGRlbnRyeTsKQEAgLTEyMiw3ICsxMjMsNyBAQAogCQlwYXJlbnQgPSBwYXJlbnQtPmRfcGFyZW50OwogCX0KIAlzdHJuY3B5KG5hbWUsIHJvb3QsIHN0cmxlbihyb290KSk7Ci0JcmV0dXJuKG5hbWUpOworCXJldHVybiBuYW1lOwogfQogCiBzdGF0aWMgY2hhciAqaW5vZGVfbmFtZShzdHJ1Y3QgaW5vZGUgKmlubywgaW50IGV4dHJhKQpAQCAtMTMwLDcgKzEzMSw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCiAJZGVudHJ5ID0gbGlzdF9lbnRyeShpbm8tPmlfZGVudHJ5Lm5leHQsIHN0cnVjdCBkZW50cnksIGRfYWxpYXMpOwotCXJldHVybihkZW50cnlfbmFtZShkZW50cnksIGV4dHJhKSk7CisJcmV0dXJuIGRlbnRyeV9uYW1lKGRlbnRyeSwgZXh0cmEpOwogfQogCiBzdGF0aWMgaW50IHJlYWRfbmFtZShzdHJ1Y3QgaW5vZGUgKmlubywgY2hhciAqbmFtZSkKQEAgLTE0NywxNiArMTQ4LDE2IEBACiAKIAllcnIgPSBzdGF0X2ZpbGUobmFtZSwgJmlfaW5vLCAmaV9tb2RlLCAmaV9ubGluaywgJmluby0+aV91aWQsCiAJCQkmaW5vLT5pX2dpZCwgJmlfc2l6ZSwgJmluby0+aV9hdGltZSwgJmluby0+aV9tdGltZSwKLQkJCSZpbm8tPmlfY3RpbWUsICZpX2Jsa3NpemUsICZpX2Jsb2Nrcyk7CisJCQkmaW5vLT5pX2N0aW1lLCAmaV9ibGtzaXplLCAmaV9ibG9ja3MsIC0xKTsKIAlpZihlcnIpCi0JCXJldHVybihlcnIpOworCQlyZXR1cm4gZXJyOwogCiAJaW5vLT5pX2lubyA9IGlfaW5vOwogCWluby0+aV9tb2RlID0gaV9tb2RlOwogCWluby0+aV9ubGluayA9IGlfbmxpbms7CiAJaW5vLT5pX3NpemUgPSBpX3NpemU7CiAJaW5vLT5pX2Jsb2NrcyA9IGlfYmxvY2tzOwotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNoYXIgKmZvbGxvd19saW5rKGNoYXIgKmxpbmspCkBAIC0xODEsMTEgKzE4MiwxMSBAQAogCQlnb3RvIG91dF9mcmVlOwogCiAJaWYoKm5hbWUgPT0gJy8nKQotCQlyZXR1cm4obmFtZSk7CisJCXJldHVybiBuYW1lOwogCiAJZW5kID0gc3RycmNocihsaW5rLCAnLycpOwogCWlmKGVuZCA9PSBOVUxMKQotCQlyZXR1cm4obmFtZSk7CisJCXJldHVybiBuYW1lOwogCiAJKihlbmQgKyAxKSA9ICdcMCc7CiAJbGVuID0gc3RybGVuKGxpbmspICsgc3RybGVuKG5hbWUpICsgMTsKQEAgLTE5OSwxMiArMjAwLDEyIEBACiAJc3ByaW50ZihyZXNvbHZlZCwgIiVzJXMiLCBsaW5rLCBuYW1lKTsKIAlrZnJlZShuYW1lKTsKIAlrZnJlZShsaW5rKTsKLQlyZXR1cm4ocmVzb2x2ZWQpOworCXJldHVybiByZXNvbHZlZDsKIAogIG91dF9mcmVlOgogCWtmcmVlKG5hbWUpOwogIG91dDoKLQlyZXR1cm4oRVJSX1BUUihuKSk7CisJcmV0dXJuIEVSUl9QVFIobik7CiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlubykKQEAgLTIzNCw3ICsyMzUsNyBAQAogCWVyciA9IHJlYWRfbmFtZShpbm8sIG5hbWUpOwogCWtmcmVlKG5hbWUpOwogIG91dDoKLQlyZXR1cm4oZXJyKTsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgaG9zdGZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpzZikKQEAgLTI1NCwxNCArMjU1LDE1IEBACiAJCQkmc2YtPmZfYnNpemUsICZmX2Jsb2NrcywgJmZfYmZyZWUsICZmX2JhdmFpbCwgJmZfZmlsZXMsCiAJCQkmZl9mZnJlZSwgJnNmLT5mX2ZzaWQsIHNpemVvZihzZi0+Zl9mc2lkKSwKIAkJCSZzZi0+Zl9uYW1lbGVuLCBzZi0+Zl9zcGFyZSk7Ci0JaWYoZXJyKSByZXR1cm4oZXJyKTsKKwlpZihlcnIpCisJCXJldHVybiBlcnI7CiAJc2YtPmZfYmxvY2tzID0gZl9ibG9ja3M7CiAJc2YtPmZfYmZyZWUgPSBmX2JmcmVlOwogCXNmLT5mX2JhdmFpbCA9IGZfYmF2YWlsOwogCXNmLT5mX2ZpbGVzID0gZl9maWxlczsKIAlzZi0+Zl9mZnJlZSA9IGZfZmZyZWU7CiAJc2YtPmZfdHlwZSA9IEhPU1RGU19TVVBFUl9NQUdJQzsKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmhvc3Rmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtMjcwLDEzICsyNzIsMTMgQEAKIAogCWhpID0ga21hbGxvYyhzaXplb2YoKmhpKSwgR0ZQX0tFUk5FTCk7CiAJaWYoaGkgPT0gTlVMTCkKLQkJcmV0dXJuKE5VTEwpOworCQlyZXR1cm4gTlVMTDsKIAogCSpoaSA9ICgoc3RydWN0IGhvc3Rmc19pbm9kZV9pbmZvKSB7IC5ob3N0X2ZpbGVuYW1lCT0gTlVMTCwKIAkJCQkJICAgIC5mZAkJCT0gLTEsCiAJCQkJCSAgICAubW9kZQkJPSAwIH0pOwogCWlub2RlX2luaXRfb25jZSgmaGktPnZmc19pbm9kZSk7Ci0JcmV0dXJuKCZoaS0+dmZzX2lub2RlKTsKKwlyZXR1cm4gJmhpLT52ZnNfaW5vZGU7CiB9CiAKIHN0YXRpYyB2b2lkIGhvc3Rmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTMyNSwxMCArMzI3LDEyIEBACiAJaW50IGVycm9yLCBsZW47CiAKIAluYW1lID0gZGVudHJ5X25hbWUoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCk7Ci0JaWYobmFtZSA9PSBOVUxMKSByZXR1cm4oLUVOT01FTSk7CisJaWYobmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAlkaXIgPSBvcGVuX2RpcihuYW1lLCAmZXJyb3IpOwogCWtmcmVlKG5hbWUpOwotCWlmKGRpciA9PSBOVUxMKSByZXR1cm4oLWVycm9yKTsKKwlpZihkaXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1lcnJvcjsKIAluZXh0ID0gZmlsZS0+Zl9wb3M7CiAJd2hpbGUoKG5hbWUgPSByZWFkX2RpcihkaXIsICZuZXh0LCAmaW5vLCAmbGVuKSkgIT0gTlVMTCl7CiAJCWVycm9yID0gKCpmaWxsZGlyKShlbnQsIG5hbWUsIGxlbiwgZmlsZS0+Zl9wb3MsCkBAIC0zMzcsNyArMzQxLDcgQEAKIAkJZmlsZS0+Zl9wb3MgPSBuZXh0OwogCX0KIAljbG9zZV9kaXIoZGlyKTsKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKIGludCBob3N0ZnNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTM0Nyw3ICszNTEsNyBAQAogCiAJbW9kZSA9IGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpOwogCWlmKChtb2RlICYgSE9TVEZTX0koaW5vKS0+bW9kZSkgPT0gbW9kZSkKLQkJcmV0dXJuKDApOworCQlyZXR1cm4gMDsKIAogCS8qIFRoZSBmaWxlIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBvcGVuZWQsIGJ1dCB3aXRoIHRoZSB3cm9uZyBhY2Nlc3MsCiAJICogc28gdGhpcyByZXNldHMgdGhpbmdzIGFuZCByZW9wZW5zIHRoZSBmaWxlIHdpdGggdGhlIG5ldyBhY2Nlc3MuCkBAIC0zNjcsMTQgKzM3MSwxNSBAQAogCiAJbmFtZSA9IGRlbnRyeV9uYW1lKGZpbGUtPmZfcGF0aC5kZW50cnksIDApOwogCWlmKG5hbWUgPT0gTlVMTCkKLQkJcmV0dXJuKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWZkID0gb3Blbl9maWxlKG5hbWUsIHIsIHcsIGFwcGVuZCk7CiAJa2ZyZWUobmFtZSk7Ci0JaWYoZmQgPCAwKSByZXR1cm4oZmQpOworCWlmKGZkIDwgMCkKKwkJcmV0dXJuIGZkOwogCUZJTEVfSE9TVEZTX0koZmlsZSktPmZkID0gZmQ7CiAKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKIGludCBob3N0ZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQpAQCAtNDU4LDcgKzQ2Myw3IEBACiAgb3V0OgogCWt1bm1hcChwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKLQlyZXR1cm4oZXJyKTsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgaG9zdGZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLApAQCAtNDg1LDcgKzQ5MCw3IEBACiAJZXJyID0gMDsKICBvdXQ6CiAJa3VubWFwKHBhZ2UpOwotCXJldHVybihlcnIpOworCXJldHVybiBlcnI7CiB9CiAKIGludCBob3N0ZnNfY29tbWl0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJvbSwKQEAgLTUxMSw3ICs1MTYsNyBAQAogCQlpbm9kZS0+aV9zaXplID0gc3RhcnQ7CiAKIAlrdW5tYXAocGFnZSk7Ci0JcmV0dXJuKGVycik7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaG9zdGZzX2FvcHMgPSB7CkBAIC01NjksNyArNTc0LDcgQEAKIAkJYnJlYWs7CiAJfQogIG91dDoKLQlyZXR1cm4oZXJyKTsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgaG9zdGZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKQEAgLTYwNywxNiArNjEyLDE2IEBACiAJSE9TVEZTX0koaW5vZGUpLT5mZCA9IGZkOwogCUhPU1RGU19JKGlub2RlKS0+bW9kZSA9IEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIAogIG91dF9wdXQ6CiAJaXB1dChpbm9kZSk7CiAgb3V0OgotCXJldHVybihlcnJvcik7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdHJ1Y3QgZGVudHJ5ICpob3N0ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5hbWVpZGF0YSAqbmQpCisJCQkgICAgIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJY2hhciAqbmFtZTsKQEAgLTY0Nyw0NCArNjUyLDQ1IEBACiAKIAlkX2FkZChkZW50cnksIGlub2RlKTsKIAlkZW50cnktPmRfb3AgPSAmaG9zdGZzX2RlbnRyeV9vcHM7Ci0JcmV0dXJuKE5VTEwpOworCXJldHVybiBOVUxMOwogCiAgb3V0X3B1dDoKIAlpcHV0KGlub2RlKTsKICBvdXQ6Ci0JcmV0dXJuKEVSUl9QVFIoZXJyKSk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAogc3RhdGljIGNoYXIgKmlub2RlX2RlbnRyeV9uYW1lKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0gICAgICAgIGNoYXIgKmZpbGU7CisJY2hhciAqZmlsZTsKIAlpbnQgbGVuOwogCiAJZmlsZSA9IGlub2RlX25hbWUoaW5vLCBkZW50cnktPmRfbmFtZS5sZW4gKyAxKTsKLQlpZihmaWxlID09IE5VTEwpIHJldHVybihOVUxMKTsKLSAgICAgICAgc3RyY2F0KGZpbGUsICIvIik7CisJaWYoZmlsZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlzdHJjYXQoZmlsZSwgIi8iKTsKIAlsZW4gPSBzdHJsZW4oZmlsZSk7Ci0gICAgICAgIHN0cm5jYXQoZmlsZSwgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuKTsKKwlzdHJuY2F0KGZpbGUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbik7CiAJZmlsZVtsZW4gKyBkZW50cnktPmRfbmFtZS5sZW5dID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuKGZpbGUpOworCXJldHVybiBmaWxlOwogfQogCiBpbnQgaG9zdGZzX2xpbmsoc3RydWN0IGRlbnRyeSAqdG8sIHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZGVudHJ5ICpmcm9tKQogewotICAgICAgICBjaGFyICpmcm9tX25hbWUsICp0b19uYW1lOwotICAgICAgICBpbnQgZXJyOworCWNoYXIgKmZyb21fbmFtZSwgKnRvX25hbWU7CisJaW50IGVycjsKIAotICAgICAgICBpZigoZnJvbV9uYW1lID0gaW5vZGVfZGVudHJ5X25hbWUoaW5vLCBmcm9tKSkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4oLUVOT01FTSk7Ci0gICAgICAgIHRvX25hbWUgPSBkZW50cnlfbmFtZSh0bywgMCk7CisJaWYoKGZyb21fbmFtZSA9IGlub2RlX2RlbnRyeV9uYW1lKGlubywgZnJvbSkpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXRvX25hbWUgPSBkZW50cnlfbmFtZSh0bywgMCk7CiAJaWYodG9fbmFtZSA9PSBOVUxMKXsKIAkJa2ZyZWUoZnJvbV9uYW1lKTsKLQkJcmV0dXJuKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0gICAgICAgIGVyciA9IGxpbmtfZmlsZSh0b19uYW1lLCBmcm9tX25hbWUpOwotICAgICAgICBrZnJlZShmcm9tX25hbWUpOwotICAgICAgICBrZnJlZSh0b19uYW1lKTsKLSAgICAgICAgcmV0dXJuKGVycik7CisJZXJyID0gbGlua19maWxlKHRvX25hbWUsIGZyb21fbmFtZSk7CisJa2ZyZWUoZnJvbV9uYW1lKTsKKwlrZnJlZSh0b19uYW1lKTsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgaG9zdGZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQpAQCAtNjkyLDEzICs2OTgsMTQgQEAKIAljaGFyICpmaWxlOwogCWludCBlcnI7CiAKLQlpZigoZmlsZSA9IGlub2RlX2RlbnRyeV9uYW1lKGlubywgZGVudHJ5KSkgPT0gTlVMTCkgcmV0dXJuKC1FTk9NRU0pOworCWlmKChmaWxlID0gaW5vZGVfZGVudHJ5X25hbWUoaW5vLCBkZW50cnkpKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAlpZihhcHBlbmQpCi0JCXJldHVybigtRVBFUk0pOworCQlyZXR1cm4gLUVQRVJNOwogCiAJZXJyID0gdW5saW5rX2ZpbGUoZmlsZSk7CiAJa2ZyZWUoZmlsZSk7Ci0JcmV0dXJuKGVycik7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IGhvc3Rmc19zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnRvKQpAQCAtNzA2LDEwICs3MTMsMTEgQEAKIAljaGFyICpmaWxlOwogCWludCBlcnI7CiAKLQlpZigoZmlsZSA9IGlub2RlX2RlbnRyeV9uYW1lKGlubywgZGVudHJ5KSkgPT0gTlVMTCkgcmV0dXJuKC1FTk9NRU0pOworCWlmKChmaWxlID0gaW5vZGVfZGVudHJ5X25hbWUoaW5vLCBkZW50cnkpKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAllcnIgPSBtYWtlX3N5bWxpbmsoZmlsZSwgdG8pOwogCWtmcmVlKGZpbGUpOwotCXJldHVybihlcnIpOworCXJldHVybiBlcnI7CiB9CiAKIGludCBob3N0ZnNfbWtkaXIoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCkBAIC03MTcsMTAgKzcyNSwxMSBAQAogCWNoYXIgKmZpbGU7CiAJaW50IGVycjsKIAotCWlmKChmaWxlID0gaW5vZGVfZGVudHJ5X25hbWUoaW5vLCBkZW50cnkpKSA9PSBOVUxMKSByZXR1cm4oLUVOT01FTSk7CisJaWYoKGZpbGUgPSBpbm9kZV9kZW50cnlfbmFtZShpbm8sIGRlbnRyeSkpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCWVyciA9IGRvX21rZGlyKGZpbGUsIG1vZGUpOwogCWtmcmVlKGZpbGUpOwotCXJldHVybihlcnIpOworCXJldHVybiBlcnI7CiB9CiAKIGludCBob3N0ZnNfcm1kaXIoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKQEAgLTcyOCwxMCArNzM3LDExIEBACiAJY2hhciAqZmlsZTsKIAlpbnQgZXJyOwogCi0JaWYoKGZpbGUgPSBpbm9kZV9kZW50cnlfbmFtZShpbm8sIGRlbnRyeSkpID09IE5VTEwpIHJldHVybigtRU5PTUVNKTsKKwlpZigoZmlsZSA9IGlub2RlX2RlbnRyeV9uYW1lKGlubywgZGVudHJ5KSkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJZXJyID0gZG9fcm1kaXIoZmlsZSk7CiAJa2ZyZWUoZmlsZSk7Ci0JcmV0dXJuKGVycik7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IGhvc3Rmc19ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwgZGV2X3QgZGV2KQpAQCAtNzY0LDE0ICs3NzQsMTQgQEAKIAkJZ290byBvdXRfcHV0OwogCiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiAKICBvdXRfZnJlZToKIAlrZnJlZShuYW1lKTsKICBvdXRfcHV0OgogCWlwdXQoaW5vZGUpOwogIG91dDoKLQlyZXR1cm4oZXJyKTsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgaG9zdGZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKmZyb21faW5vLCBzdHJ1Y3QgZGVudHJ5ICpmcm9tLApAQCAtNzgxLDE1ICs3OTEsMTUgQEAKIAlpbnQgZXJyOwogCiAJaWYoKGZyb21fbmFtZSA9IGlub2RlX2RlbnRyeV9uYW1lKGZyb21faW5vLCBmcm9tKSkgPT0gTlVMTCkKLQkJcmV0dXJuKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAlpZigodG9fbmFtZSA9IGlub2RlX2RlbnRyeV9uYW1lKHRvX2lubywgdG8pKSA9PSBOVUxMKXsKIAkJa2ZyZWUoZnJvbV9uYW1lKTsKLQkJcmV0dXJuKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZXJyID0gcmVuYW1lX2ZpbGUoZnJvbV9uYW1lLCB0b19uYW1lKTsKIAlrZnJlZShmcm9tX25hbWUpOwogCWtmcmVlKHRvX25hbWUpOwotCXJldHVybihlcnIpOworCXJldHVybiBlcnI7CiB9CiAKIGludCBob3N0ZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlubywgaW50IGRlc2lyZWQsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQpAQCAtODAxLDcgKzgxMSw4IEBACiAJaWYgKGRlc2lyZWQgJiBNQVlfV1JJVEUpIHcgPSAxOwogCWlmIChkZXNpcmVkICYgTUFZX0VYRUMpIHggPSAxOwogCW5hbWUgPSBpbm9kZV9uYW1lKGlubywgMCk7Ci0JaWYgKG5hbWUgPT0gTlVMTCkgcmV0dXJuKC1FTk9NRU0pOworCWlmIChuYW1lID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKFNfSVNDSFIoaW5vLT5pX21vZGUpIHx8IFNfSVNCTEsoaW5vLT5pX21vZGUpIHx8CiAJCQlTX0lTRklGTyhpbm8tPmlfbW9kZSkgfHwgU19JU1NPQ0soaW5vLT5pX21vZGUpKQpAQCAtODIwLDYgKzgzMSw4IEBACiAJY2hhciAqbmFtZTsKIAlpbnQgZXJyOwogCisJaW50IGZkID0gSE9TVEZTX0koZGVudHJ5LT5kX2lub2RlKS0+ZmQ7CisKIAllcnIgPSBpbm9kZV9jaGFuZ2Vfb2soZGVudHJ5LT5kX2lub2RlLCBhdHRyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtODYzLDIwICs4NzYsMjEgQEAKIAkJYXR0cnMuaWFfdmFsaWQgfD0gSE9TVEZTX0FUVFJfTVRJTUVfU0VUOwogCX0KIAluYW1lID0gZGVudHJ5X25hbWUoZGVudHJ5LCAwKTsKLQlpZihuYW1lID09IE5VTEwpIHJldHVybigtRU5PTUVNKTsKLQllcnIgPSBzZXRfYXR0cihuYW1lLCAmYXR0cnMpOworCWlmKG5hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc2V0X2F0dHIobmFtZSwgJmF0dHJzLCBmZCk7CiAJa2ZyZWUobmFtZSk7CiAJaWYoZXJyKQotCQlyZXR1cm4oZXJyKTsKKwkJcmV0dXJuIGVycjsKIAotCXJldHVybihpbm9kZV9zZXRhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgYXR0cikpOworCXJldHVybiBpbm9kZV9zZXRhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgYXR0cik7CiB9CiAKIGludCBob3N0ZnNfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCSAgIHN0cnVjdCBrc3RhdCAqc3RhdCkKIHsKIAlnZW5lcmljX2ZpbGxhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgc3RhdCk7Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaG9zdGZzX2lvcHMgPSB7CkBAIC05MTUsNyArOTI5LDggQEAKIAogCWJ1ZmZlciA9IGttYXAocGFnZSk7CiAJbmFtZSA9IGlub2RlX25hbWUocGFnZS0+bWFwcGluZy0+aG9zdCwgMCk7Ci0JaWYobmFtZSA9PSBOVUxMKSByZXR1cm4oLUVOT01FTSk7CisJaWYobmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAllcnIgPSBkb19yZWFkbGluayhuYW1lLCBidWZmZXIsIFBBR0VfQ0FDSEVfU0laRSk7CiAJa2ZyZWUobmFtZSk7CiAJaWYoZXJyID09IFBBR0VfQ0FDSEVfU0laRSkKQEAgLTkyOCw3ICs5NDMsNyBAQAogCX0KIAlrdW5tYXAocGFnZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JcmV0dXJuKGVycik7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaG9zdGZzX2xpbmtfYW9wcyA9IHsKQEAgLTk3OCwyMCArOTkzLDIwIEBACiAKIAllcnIgPSByZWFkX2lub2RlKHJvb3RfaW5vZGUpOwogCWlmKGVycil7Ci0gICAgICAgICAgICAgICAgLyogTm8gaXB1dCBpbiB0aGlzIGNhc2UgYmVjYXVzZSB0aGUgZHB1dCBkb2VzIHRoYXQgZm9yIHVzICovCi0gICAgICAgICAgICAgICAgZHB1dChzYi0+c19yb290KTsKLSAgICAgICAgICAgICAgICBzYi0+c19yb290ID0gTlVMTDsKKwkJLyogTm8gaXB1dCBpbiB0aGlzIGNhc2UgYmVjYXVzZSB0aGUgZHB1dCBkb2VzIHRoYXQgZm9yIHVzICovCisJCWRwdXQoc2ItPnNfcm9vdCk7CisJCXNiLT5zX3Jvb3QgPSBOVUxMOwogCQlnb3RvIG91dDsKLSAgICAgICAgfQorCX0KIAotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIAotIG91dF9wdXQ6Ci0gICAgICAgIGlwdXQocm9vdF9pbm9kZSk7Ci0gb3V0X2ZyZWU6CitvdXRfcHV0OgorCWlwdXQocm9vdF9pbm9kZSk7CitvdXRfZnJlZToKIAlrZnJlZShob3N0X3Jvb3RfcGF0aCk7Ci0gb3V0OgotCXJldHVybihlcnIpOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgaG9zdGZzX3JlYWRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsCkBAIC0xMDExLDcgKzEwMjYsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2hvc3Rmcyh2b2lkKQogewotCXJldHVybihyZWdpc3Rlcl9maWxlc3lzdGVtKCZob3N0ZnNfdHlwZSkpOworCXJldHVybiByZWdpc3Rlcl9maWxlc3lzdGVtKCZob3N0ZnNfdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2hvc3Rmcyh2b2lkKQpAQCAtMTAyMiwxNCArMTAzNywzIEBACiBtb2R1bGVfaW5pdChpbml0X2hvc3RmcykKIG1vZHVsZV9leGl0KGV4aXRfaG9zdGZzKQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmc191c2VyLmMgYi9mcy9ob3N0ZnMvaG9zdGZzX3VzZXIuYwppbmRleCAxZWQ1ZWEzLi41NjI1ZTI0IDEwMDY0NAotLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX3VzZXIuYworKysgYi9mcy9ob3N0ZnMvaG9zdGZzX3VzZXIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgSmVmZiBEaWtlIChqZGlrZUBrYXJheWEuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwNyBKZWZmIERpa2UgKGpkaWtlQHthZGR0b2l0LGxpbnV4LmludGVsfS5jb20pCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAgKi8KIApAQCAtMjEsMTIgKzIxLDE2IEBACiAJICAgICAgaW50ICpubGlua19vdXQsIGludCAqdWlkX291dCwgaW50ICpnaWRfb3V0LAogCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZV9vdXQsIHN0cnVjdCB0aW1lc3BlYyAqYXRpbWVfb3V0LAogCSAgICAgIHN0cnVjdCB0aW1lc3BlYyAqbXRpbWVfb3V0LCBzdHJ1Y3QgdGltZXNwZWMgKmN0aW1lX291dCwKLQkgICAgICBpbnQgKmJsa3NpemVfb3V0LCB1bnNpZ25lZCBsb25nIGxvbmcgKmJsb2Nrc19vdXQpCisJICAgICAgaW50ICpibGtzaXplX291dCwgdW5zaWduZWQgbG9uZyBsb25nICpibG9ja3Nfb3V0LCBpbnQgZmQpCiB7CiAJc3RydWN0IHN0YXQ2NCBidWY7CiAKLQlpZihsc3RhdDY0KHBhdGgsICZidWYpIDwgMCkKLQkJcmV0dXJuKC1lcnJubyk7CisJaWYoZmQgPj0gMCkgeworCQlpZiAoZnN0YXQ2NChmZCwgJmJ1ZikgPCAwKQorCQkJcmV0dXJuIC1lcnJubzsKKwl9IGVsc2UgaWYobHN0YXQ2NChwYXRoLCAmYnVmKSA8IDApIHsKKwkJcmV0dXJuIC1lcnJubzsKKwl9CiAKIAlpZihpbm9kZV9vdXQgIT0gTlVMTCkgKmlub2RlX291dCA9IGJ1Zi5zdF9pbm87CiAJaWYobW9kZV9vdXQgIT0gTlVMTCkgKm1vZGVfb3V0ID0gYnVmLnN0X21vZGU7CkBAIC00OCw3ICs1Miw3IEBACiAJfQogCWlmKGJsa3NpemVfb3V0ICE9IE5VTEwpICpibGtzaXplX291dCA9IGJ1Zi5zdF9ibGtzaXplOwogCWlmKGJsb2Nrc19vdXQgIT0gTlVMTCkgKmJsb2Nrc19vdXQgPSBidWYuc3RfYmxvY2tzOwotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGZpbGVfdHlwZShjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1haiwgaW50ICptaW4pCkBAIC01Niw3ICs2MCw3IEBACiAgCXN0cnVjdCBzdGF0NjQgYnVmOwogCiAJaWYobHN0YXQ2NChwYXRoLCAmYnVmKSA8IDApCi0JCXJldHVybigtZXJybm8pOworCQlyZXR1cm4gLWVycm5vOwogCS8qV2UgY2Fubm90IHBhc3MgcmRldiBhcyBpcyBiZWNhdXNlIGdsaWJjIGFuZCB0aGUga2VybmVsIGRpc2FncmVlCiAJICphYm91dCBpdHMgZGVmaW5pdGlvbi4qLwogCWlmKG1haiAhPSBOVUxMKQpAQCAtNjQsMTMgKzY4LDEzIEBACiAJaWYobWluICE9IE5VTEwpCiAJCSptaW4gPSBtaW5vcihidWYuc3RfcmRldik7CiAKLQlpZihTX0lTRElSKGJ1Zi5zdF9tb2RlKSkgcmV0dXJuKE9TX1RZUEVfRElSKTsKLQllbHNlIGlmKFNfSVNMTksoYnVmLnN0X21vZGUpKSByZXR1cm4oT1NfVFlQRV9TWU1MSU5LKTsKLQllbHNlIGlmKFNfSVNDSFIoYnVmLnN0X21vZGUpKSByZXR1cm4oT1NfVFlQRV9DSEFSREVWKTsKLQllbHNlIGlmKFNfSVNCTEsoYnVmLnN0X21vZGUpKSByZXR1cm4oT1NfVFlQRV9CTE9DS0RFVik7Ci0JZWxzZSBpZihTX0lTRklGTyhidWYuc3RfbW9kZSkpcmV0dXJuKE9TX1RZUEVfRklGTyk7Ci0JZWxzZSBpZihTX0lTU09DSyhidWYuc3RfbW9kZSkpcmV0dXJuKE9TX1RZUEVfU09DSyk7Ci0JZWxzZSByZXR1cm4oT1NfVFlQRV9GSUxFKTsKKwlpZihTX0lTRElSKGJ1Zi5zdF9tb2RlKSkgcmV0dXJuIE9TX1RZUEVfRElSOworCWVsc2UgaWYoU19JU0xOSyhidWYuc3RfbW9kZSkpIHJldHVybiBPU19UWVBFX1NZTUxJTks7CisJZWxzZSBpZihTX0lTQ0hSKGJ1Zi5zdF9tb2RlKSkgcmV0dXJuIE9TX1RZUEVfQ0hBUkRFVjsKKwllbHNlIGlmKFNfSVNCTEsoYnVmLnN0X21vZGUpKSByZXR1cm4gT1NfVFlQRV9CTE9DS0RFVjsKKwllbHNlIGlmKFNfSVNGSUZPKGJ1Zi5zdF9tb2RlKSlyZXR1cm4gT1NfVFlQRV9GSUZPOworCWVsc2UgaWYoU19JU1NPQ0soYnVmLnN0X21vZGUpKXJldHVybiBPU19UWVBFX1NPQ0s7CisJZWxzZSByZXR1cm4gT1NfVFlQRV9GSUxFOwogfQogCiBpbnQgYWNjZXNzX2ZpbGUoY2hhciAqcGF0aCwgaW50IHIsIGludCB3LCBpbnQgeCkKQEAgLTgwLDggKzg0LDkgQEAKIAlpZihyKSBtb2RlID0gUl9PSzsKIAlpZih3KSBtb2RlIHw9IFdfT0s7CiAJaWYoeCkgbW9kZSB8PSBYX09LOwotCWlmKGFjY2VzcyhwYXRoLCBtb2RlKSAhPSAwKSByZXR1cm4oLWVycm5vKTsKLQllbHNlIHJldHVybigwKTsKKwlpZihhY2Nlc3MocGF0aCwgbW9kZSkgIT0gMCkKKwkJcmV0dXJuIC1lcnJubzsKKwllbHNlIHJldHVybiAwOwogfQogCiBpbnQgb3Blbl9maWxlKGNoYXIgKnBhdGgsIGludCByLCBpbnQgdywgaW50IGFwcGVuZCkKQEAgLTk5LDggKzEwNCw5IEBACiAJaWYoYXBwZW5kKQogCQltb2RlIHw9IE9fQVBQRU5EOwogCWZkID0gb3BlbjY0KHBhdGgsIG1vZGUpOwotCWlmKGZkIDwgMCkgcmV0dXJuKC1lcnJubyk7Ci0JZWxzZSByZXR1cm4oZmQpOworCWlmKGZkIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKwllbHNlIHJldHVybiBmZDsKIH0KIAogdm9pZCAqb3Blbl9kaXIoY2hhciAqcGF0aCwgaW50ICplcnJfb3V0KQpAQCAtMTA5LDggKzExNSw5IEBACiAKIAlkaXIgPSBvcGVuZGlyKHBhdGgpOwogCSplcnJfb3V0ID0gZXJybm87Ci0JaWYoZGlyID09IE5VTEwpIHJldHVybihOVUxMKTsKLQlyZXR1cm4oZGlyKTsKKwlpZihkaXIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGRpcjsKIH0KIAogY2hhciAqcmVhZF9kaXIodm9pZCAqc3RyZWFtLCB1bnNpZ25lZCBsb25nIGxvbmcgKnBvcywKQEAgLTEyMSwxMSArMTI4LDEyIEBACiAKIAlzZWVrZGlyKGRpciwgKnBvcyk7CiAJZW50ID0gcmVhZGRpcihkaXIpOwotCWlmKGVudCA9PSBOVUxMKSByZXR1cm4oTlVMTCk7CisJaWYoZW50ID09IE5VTEwpCisJCXJldHVybiBOVUxMOwogCSpsZW5fb3V0ID0gc3RybGVuKGVudC0+ZF9uYW1lKTsKIAkqaW5vX291dCA9IGVudC0+ZF9pbm87CiAJKnBvcyA9IHRlbGxkaXIoZGlyKTsKLQlyZXR1cm4oZW50LT5kX25hbWUpOworCXJldHVybiBlbnQtPmRfbmFtZTsKIH0KIAogaW50IHJlYWRfZmlsZShpbnQgZmQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqb2Zmc2V0LCBjaGFyICpidWYsIGludCBsZW4pCkBAIC0xMzMsOSArMTQxLDEwIEBACiAJaW50IG47CiAKIAluID0gcHJlYWQ2NChmZCwgYnVmLCBsZW4sICpvZmZzZXQpOwotCWlmKG4gPCAwKSByZXR1cm4oLWVycm5vKTsKKwlpZihuIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKIAkqb2Zmc2V0ICs9IG47Ci0JcmV0dXJuKG4pOworCXJldHVybiBuOwogfQogCiBpbnQgd3JpdGVfZmlsZShpbnQgZmQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqb2Zmc2V0LCBjb25zdCBjaGFyICpidWYsIGludCBsZW4pCkBAIC0xNDMsOSArMTUyLDEwIEBACiAJaW50IG47CiAKIAluID0gcHdyaXRlNjQoZmQsIGJ1ZiwgbGVuLCAqb2Zmc2V0KTsKLQlpZihuIDwgMCkgcmV0dXJuKC1lcnJubyk7CisJaWYobiA8IDApCisJCXJldHVybiAtZXJybm87CiAJKm9mZnNldCArPSBuOwotCXJldHVybihuKTsKKwlyZXR1cm4gbjsKIH0KIAogaW50IGxzZWVrX2ZpbGUoaW50IGZkLCBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKQpAQCAtMTU0LDggKzE2NCw4IEBACiAKIAlyZXQgPSBsc2VlazY0KGZkLCBvZmZzZXQsIHdoZW5jZSk7CiAJaWYocmV0IDwgMCkKLQkJcmV0dXJuKC1lcnJubyk7Ci0JcmV0dXJuKDApOworCQlyZXR1cm4gLWVycm5vOworCXJldHVybiAwOwogfQogCiBpbnQgZnN5bmNfZmlsZShpbnQgZmQsIGludCBkYXRhc3luYykKQEAgLTE5OCw2NSArMjA4LDkwIEBACiAJbW9kZSB8PSBveCA/IFNfSVhPVEggOiAwOwogCWZkID0gb3BlbjY0KG5hbWUsIE9fQ1JFQVQgfCBPX1JEV1IsIG1vZGUpOwogCWlmKGZkIDwgMCkKLQkJcmV0dXJuKC1lcnJubyk7Ci0JcmV0dXJuKGZkKTsKKwkJcmV0dXJuIC1lcnJubzsKKwlyZXR1cm4gZmQ7CiB9CiAKLWludCBzZXRfYXR0cihjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3QgaG9zdGZzX2lhdHRyICphdHRycykKK2ludCBzZXRfYXR0cihjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3QgaG9zdGZzX2lhdHRyICphdHRycywgaW50IGZkKQogewotCXN0cnVjdCB1dGltYnVmIGJ1ZjsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lc1syXTsKKwlzdHJ1Y3QgdGltZXNwZWMgYXRpbWVfdHMsIG10aW1lX3RzOwogCWludCBlcnIsIG1hOwogCi0JaWYoYXR0cnMtPmlhX3ZhbGlkICYgSE9TVEZTX0FUVFJfTU9ERSl7Ci0JCWlmKGNobW9kKGZpbGUsIGF0dHJzLT5pYV9tb2RlKSAhPSAwKSByZXR1cm4oLWVycm5vKTsKKwlpZiAoYXR0cnMtPmlhX3ZhbGlkICYgSE9TVEZTX0FUVFJfTU9ERSkgeworCQlpZiAoZmQgPj0gMCkgeworCQkJaWYgKGZjaG1vZChmZCwgYXR0cnMtPmlhX21vZGUpICE9IDApCisJCQkJcmV0dXJuICgtZXJybm8pOworCQl9IGVsc2UgaWYgKGNobW9kKGZpbGUsIGF0dHJzLT5pYV9tb2RlKSAhPSAwKSB7CisJCQlyZXR1cm4gLWVycm5vOworCQl9CiAJfQotCWlmKGF0dHJzLT5pYV92YWxpZCAmIEhPU1RGU19BVFRSX1VJRCl7Ci0JCWlmKGNob3duKGZpbGUsIGF0dHJzLT5pYV91aWQsIC0xKSkgcmV0dXJuKC1lcnJubyk7CisJaWYgKGF0dHJzLT5pYV92YWxpZCAmIEhPU1RGU19BVFRSX1VJRCkgeworCQlpZiAoZmQgPj0gMCkgeworCQkJaWYgKGZjaG93bihmZCwgYXR0cnMtPmlhX3VpZCwgLTEpKQorCQkJCXJldHVybiAtZXJybm87CisJCX0gZWxzZSBpZihjaG93bihmaWxlLCBhdHRycy0+aWFfdWlkLCAtMSkpIHsKKwkJCXJldHVybiAtZXJybm87CisJCX0KIAl9Ci0JaWYoYXR0cnMtPmlhX3ZhbGlkICYgSE9TVEZTX0FUVFJfR0lEKXsKLQkJaWYoY2hvd24oZmlsZSwgLTEsIGF0dHJzLT5pYV9naWQpKSByZXR1cm4oLWVycm5vKTsKKwlpZiAoYXR0cnMtPmlhX3ZhbGlkICYgSE9TVEZTX0FUVFJfR0lEKSB7CisJCWlmIChmZCA+PSAwKSB7CisJCQlpZiAoZmNob3duKGZkLCAtMSwgYXR0cnMtPmlhX2dpZCkpCisJCQkJcmV0dXJuIC1lcnJubzsKKwkJfSBlbHNlIGlmIChjaG93bihmaWxlLCAtMSwgYXR0cnMtPmlhX2dpZCkpIHsKKwkJCXJldHVybiAtZXJybm87CisJCX0KIAl9Ci0JaWYoYXR0cnMtPmlhX3ZhbGlkICYgSE9TVEZTX0FUVFJfU0laRSl7Ci0JCWlmKHRydW5jYXRlKGZpbGUsIGF0dHJzLT5pYV9zaXplKSkgcmV0dXJuKC1lcnJubyk7CisJaWYgKGF0dHJzLT5pYV92YWxpZCAmIEhPU1RGU19BVFRSX1NJWkUpIHsKKwkJaWYgKGZkID49IDApIHsKKwkJCWlmIChmdHJ1bmNhdGUoZmQsIGF0dHJzLT5pYV9zaXplKSkKKwkJCQlyZXR1cm4gLWVycm5vOworCQl9IGVsc2UgaWYgKHRydW5jYXRlKGZpbGUsIGF0dHJzLT5pYV9zaXplKSkgeworCQkJcmV0dXJuIC1lcnJubzsKKwkJfQogCX0KLQltYSA9IEhPU1RGU19BVFRSX0FUSU1FX1NFVCB8IEhPU1RGU19BVFRSX01USU1FX1NFVDsKLQlpZigoYXR0cnMtPmlhX3ZhbGlkICYgbWEpID09IG1hKXsKLQkJYnVmLmFjdGltZSA9IGF0dHJzLT5pYV9hdGltZS50dl9zZWM7Ci0JCWJ1Zi5tb2R0aW1lID0gYXR0cnMtPmlhX210aW1lLnR2X3NlYzsKLQkJaWYodXRpbWUoZmlsZSwgJmJ1ZikgIT0gMCkgcmV0dXJuKC1lcnJubyk7Ci0JfQotCWVsc2UgewotCQlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKLQkJaWYoYXR0cnMtPmlhX3ZhbGlkICYgSE9TVEZTX0FUVFJfQVRJTUVfU0VUKXsKLQkJCWVyciA9IHN0YXRfZmlsZShmaWxlLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCQlOVUxMLCBOVUxMLCAmdHMsIE5VTEwsIE5VTEwsIE5VTEwpOwotCQkJaWYoZXJyICE9IDApCi0JCQkJcmV0dXJuKGVycik7Ci0JCQlidWYuYWN0aW1lID0gYXR0cnMtPmlhX2F0aW1lLnR2X3NlYzsKLQkJCWJ1Zi5tb2R0aW1lID0gdHMudHZfc2VjOwotCQkJaWYodXRpbWUoZmlsZSwgJmJ1ZikgIT0gMCkKLQkJCQlyZXR1cm4oLWVycm5vKTsKKwkvKiBVcGRhdGUgYWNjZXNzZWQgYW5kL29yIG1vZGlmaWVkIHRpbWUsIGluIHR3byBwYXJ0czogZmlyc3Qgc2V0CisJICogdGltZXMgYWNjb3JkaW5nIHRvIHRoZSBjaGFuZ2VzIHRvIHBlcmZvcm0sIGFuZCB0aGVuIGNhbGwgZnV0aW1lcygpCisJICogb3IgdXRpbWVzKCkgdG8gYXBwbHkgdGhlbS4gKi8KKwltYSA9IChIT1NURlNfQVRUUl9BVElNRV9TRVQgfCBIT1NURlNfQVRUUl9NVElNRV9TRVQpOworCWlmIChhdHRycy0+aWFfdmFsaWQgJiBtYSkgeworCQllcnIgPSBzdGF0X2ZpbGUoZmlsZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkmYXRpbWVfdHMsICZtdGltZV90cywgTlVMTCwgTlVMTCwgTlVMTCwgZmQpOworCQlpZiAoZXJyICE9IDApCisJCQlyZXR1cm4gZXJyOworCisJCXRpbWVzWzBdLnR2X3NlYyA9IGF0aW1lX3RzLnR2X3NlYzsKKwkJdGltZXNbMF0udHZfdXNlYyA9IGF0aW1lX3RzLnR2X25zZWMgKiAxMDAwOworCQl0aW1lc1sxXS50dl9zZWMgPSBtdGltZV90cy50dl9zZWM7CisJCXRpbWVzWzFdLnR2X3VzZWMgPSBtdGltZV90cy50dl9uc2VjICogMTAwMDsKKworCQlpZiAoYXR0cnMtPmlhX3ZhbGlkICYgSE9TVEZTX0FUVFJfQVRJTUVfU0VUKSB7CisJCQl0aW1lc1swXS50dl9zZWMgPSBhdHRycy0+aWFfYXRpbWUudHZfc2VjOworCQkJdGltZXNbMF0udHZfdXNlYyA9IGF0dHJzLT5pYV9hdGltZS50dl9uc2VjICogMTAwMDsKIAkJfQotCQlpZihhdHRycy0+aWFfdmFsaWQgJiBIT1NURlNfQVRUUl9NVElNRV9TRVQpewotCQkJZXJyID0gc3RhdF9maWxlKGZpbGUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJCU5VTEwsICZ0cywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JCQlpZihlcnIgIT0gMCkKLQkJCQlyZXR1cm4oZXJyKTsKLQkJCWJ1Zi5hY3RpbWUgPSB0cy50dl9zZWM7Ci0JCQlidWYubW9kdGltZSA9IGF0dHJzLT5pYV9tdGltZS50dl9zZWM7Ci0JCQlpZih1dGltZShmaWxlLCAmYnVmKSAhPSAwKQotCQkJCXJldHVybigtZXJybm8pOworCQlpZiAoYXR0cnMtPmlhX3ZhbGlkICYgSE9TVEZTX0FUVFJfTVRJTUVfU0VUKSB7CisJCQl0aW1lc1sxXS50dl9zZWMgPSBhdHRycy0+aWFfbXRpbWUudHZfc2VjOworCQkJdGltZXNbMV0udHZfdXNlYyA9IGF0dHJzLT5pYV9tdGltZS50dl9uc2VjICogMTAwMDsKKwkJfQorCisJCWlmIChmZCA+PSAwKSB7CisJCQlpZiAoZnV0aW1lcyhmZCwgdGltZXMpICE9IDApCisJCQkJcmV0dXJuIC1lcnJubzsKKwkJfSBlbHNlIGlmICh1dGltZXMoZmlsZSwgdGltZXMpICE9IDApIHsKKwkJCXJldHVybiAtZXJybm87CiAJCX0KIAl9CisKIAlpZihhdHRycy0+aWFfdmFsaWQgJiBIT1NURlNfQVRUUl9DVElNRSkgOwogCWlmKGF0dHJzLT5pYV92YWxpZCAmIChIT1NURlNfQVRUUl9BVElNRSB8IEhPU1RGU19BVFRSX01USU1FKSl7CiAJCWVyciA9IHN0YXRfZmlsZShmaWxlLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCSZhdHRycy0+aWFfYXRpbWUsICZhdHRycy0+aWFfbXRpbWUsIE5VTEwsCi0JCQkJTlVMTCwgTlVMTCk7Ci0JCWlmKGVyciAhPSAwKSByZXR1cm4oZXJyKTsKKwkJCQlOVUxMLCBOVUxMLCBmZCk7CisJCWlmKGVyciAhPSAwKQorCQkJcmV0dXJuIGVycjsKIAl9Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiBpbnQgbWFrZV9zeW1saW5rKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKQpAQCAtMjY0LDggKzI5OSw5IEBACiAJaW50IGVycjsKIAogCWVyciA9IHN5bWxpbmsodG8sIGZyb20pOwotCWlmKGVycikgcmV0dXJuKC1lcnJubyk7Ci0JcmV0dXJuKDApOworCWlmKGVycikKKwkJcmV0dXJuIC1lcnJubzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVubGlua19maWxlKGNvbnN0IGNoYXIgKmZpbGUpCkBAIC0yNzMsOCArMzA5LDkgQEAKIAlpbnQgZXJyOwogCiAJZXJyID0gdW5saW5rKGZpbGUpOwotCWlmKGVycikgcmV0dXJuKC1lcnJubyk7Ci0JcmV0dXJuKDApOworCWlmKGVycikKKwkJcmV0dXJuIC1lcnJubzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGRvX21rZGlyKGNvbnN0IGNoYXIgKmZpbGUsIGludCBtb2RlKQpAQCAtMjgyLDggKzMxOSw5IEBACiAJaW50IGVycjsKIAogCWVyciA9IG1rZGlyKGZpbGUsIG1vZGUpOwotCWlmKGVycikgcmV0dXJuKC1lcnJubyk7Ci0JcmV0dXJuKDApOworCWlmKGVycikKKwkJcmV0dXJuIC1lcnJubzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGRvX3JtZGlyKGNvbnN0IGNoYXIgKmZpbGUpCkBAIC0yOTEsOCArMzI5LDkgQEAKIAlpbnQgZXJyOwogCiAJZXJyID0gcm1kaXIoZmlsZSk7Ci0JaWYoZXJyKSByZXR1cm4oLWVycm5vKTsKLQlyZXR1cm4oMCk7CisJaWYoZXJyKQorCQlyZXR1cm4gLWVycm5vOworCXJldHVybiAwOwogfQogCiBpbnQgZG9fbWtub2QoY29uc3QgY2hhciAqZmlsZSwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBtYWpvciwgdW5zaWduZWQgaW50IG1pbm9yKQpAQCAtMzAwLDggKzMzOSw5IEBACiAJaW50IGVycjsKIAogCWVyciA9IG1rbm9kKGZpbGUsIG1vZGUsIG1ha2VkZXYobWFqb3IsIG1pbm9yKSk7Ci0JaWYoZXJyKSByZXR1cm4oLWVycm5vKTsKLQlyZXR1cm4oMCk7CisJaWYoZXJyKQorCQlyZXR1cm4gLWVycm5vOworCXJldHVybiAwOwogfQogCiBpbnQgbGlua19maWxlKGNvbnN0IGNoYXIgKnRvLCBjb25zdCBjaGFyICpmcm9tKQpAQCAtMzA5LDggKzM0OSw5IEBACiAJaW50IGVycjsKIAogCWVyciA9IGxpbmsodG8sIGZyb20pOwotCWlmKGVycikgcmV0dXJuKC1lcnJubyk7Ci0JcmV0dXJuKDApOworCWlmKGVycikKKwkJcmV0dXJuIC1lcnJubzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGRvX3JlYWRsaW5rKGNoYXIgKmZpbGUsIGNoYXIgKmJ1ZiwgaW50IHNpemUpCkBAIC0zMTksMTAgKzM2MCwxMCBAQAogCiAJbiA9IHJlYWRsaW5rKGZpbGUsIGJ1Ziwgc2l6ZSk7CiAJaWYobiA8IDApCi0JCXJldHVybigtZXJybm8pOworCQlyZXR1cm4gLWVycm5vOwogCWlmKG4gPCBzaXplKQogCQlidWZbbl0gPSAnXDAnOwotCXJldHVybihuKTsKKwlyZXR1cm4gbjsKIH0KIAogaW50IHJlbmFtZV9maWxlKGNoYXIgKmZyb20sIGNoYXIgKnRvKQpAQCAtMzMwLDggKzM3MSw5IEBACiAJaW50IGVycjsKIAogCWVyciA9IHJlbmFtZShmcm9tLCB0byk7Ci0JaWYoZXJyIDwgMCkgcmV0dXJuKC1lcnJubyk7Ci0JcmV0dXJuKDApOworCWlmKGVyciA8IDApCisJCXJldHVybiAtZXJybm87CisJcmV0dXJuIDA7CiB9CiAKIGludCBkb19zdGF0ZnMoY2hhciAqcm9vdCwgbG9uZyAqYnNpemVfb3V0LCBsb25nIGxvbmcgKmJsb2Nrc19vdXQsCkBAIC0zNDQsNyArMzg2LDkgQEAKIAlpbnQgZXJyOwogCiAJZXJyID0gc3RhdGZzNjQocm9vdCwgJmJ1Zik7Ci0JaWYoZXJyIDwgMCkgcmV0dXJuKC1lcnJubyk7CisJaWYoZXJyIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKwogCSpic2l6ZV9vdXQgPSBidWYuZl9ic2l6ZTsKIAkqYmxvY2tzX291dCA9IGJ1Zi5mX2Jsb2NrczsKIAkqYmZyZWVfb3V0ID0gYnVmLmZfYmZyZWU7CkBAIC0zNjAsMTYgKzQwNCw1IEBACiAJc3BhcmVfb3V0WzJdID0gYnVmLmZfc3BhcmVbMl07CiAJc3BhcmVfb3V0WzNdID0gYnVmLmZfc3BhcmVbM107CiAJc3BhcmVfb3V0WzRdID0gYnVmLmZfc3BhcmVbNF07Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9idWZmZXIuYyBiL2ZzL2hwZnMvYnVmZmVyLmMKaW5kZXggYjUyYjczOC4uYjZmY2E1NCAxMDA2NDQKLS0tIGEvZnMvaHBmcy9idWZmZXIuYworKysgYi9mcy9ocGZzL2J1ZmZlci5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqICBnZW5lcmFsIGJ1ZmZlciBpL28KICAqLwotCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJocGZzX2ZuLmgiCiAKIHZvaWQgaHBmc19sb2NrX2NyZWF0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvbmFtZWkuYyBiL2ZzL2hwZnMvbmFtZWkuYwppbmRleCA5OTUzY2Y5Li5kMjU2NTU5IDEwMDY0NAotLS0gYS9mcy9ocGZzL25hbWVpLmMKKysrIGIvZnMvaHBmcy9uYW1laS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqICBhZGRpbmcgJiByZW1vdmluZyBmaWxlcyAmIGRpcmVjdG9yaWVzCiAgKi8KLQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaHBmc19mbi5oIgogCiBzdGF0aWMgaW50IGhwZnNfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCmRpZmYgLS1naXQgYS9mcy9ocGZzL3N1cGVyLmMgYi9mcy9ocGZzL3N1cGVyLmMKaW5kZXggMWI5NWYzOWYuLjI5Y2MzNGEgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvc3VwZXIuYworKysgYi9mcy9ocGZzL3N1cGVyLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKiBNYXJrIHRoZSBmaWxlc3lzdGVtIGRpcnR5LCBzbyB0aGF0IGNoa2RzayBjaGVja3MgaXQgd2hlbiBvcy8yIGJvb3RlZCAqLwogCkBAIC0xNzYsMTEgKzE3Nyw5IEBACiB7CiAJc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqKSBmb287CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJbXV0ZXhfaW5pdCgmZWktPmlfbXV0ZXgpOwotCQltdXRleF9pbml0KCZlaS0+aV9wYXJlbnRfbXV0ZXgpOwotCQlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwotCX0KKwltdXRleF9pbml0KCZlaS0+aV9tdXRleCk7CisJbXV0ZXhfaW5pdCgmZWktPmlfcGFyZW50X211dGV4KTsKKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogIAogc3RhdGljIGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggOTg5NTliOC4uYWEwODNkZCAxMDA2NDQKLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmMKKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKQEAgLTU1Niw4ICs1NTYsNyBAQAogewogCXN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICopZm9vOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKQotCQlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOworCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CiB9CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IGI0Mjk2YmYuLjlhMDEyY2MgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMjEzLDggKzIxMyw3IEBACiB7CiAJc3RydWN0IGlub2RlICogaW5vZGUgPSAoc3RydWN0IGlub2RlICopIGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKLQkJaW5vZGVfaW5pdF9vbmNlKGlub2RlKTsKKwlpbm9kZV9pbml0X29uY2UoaW5vZGUpOwogfQogCiAvKgpAQCAtMjUwLDcgKzI0OSw3IEBACiAJQlVHX09OKGlub2RlLT5pX3N0YXRlICYgSV9DTEVBUik7CiAJd2FpdF9vbl9pbm9kZShpbm9kZSk7CiAJRFFVT1RfRFJPUChpbm9kZSk7Ci0JaWYgKGlub2RlLT5pX3NiICYmIGlub2RlLT5pX3NiLT5zX29wLT5jbGVhcl9pbm9kZSkKKwlpZiAoaW5vZGUtPmlfc2ItPnNfb3AtPmNsZWFyX2lub2RlKQogCQlpbm9kZS0+aV9zYi0+c19vcC0+Y2xlYXJfaW5vZGUoaW5vZGUpOwogCWlmIChTX0lTQkxLKGlub2RlLT5pX21vZGUpICYmIGlub2RlLT5pX2JkZXYpCiAJCWJkX2ZvcmdldChpbm9kZSk7CkBAIC0yNzUsNyArMjc0LDcgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJc3RydWN0IGlub2RlICppbm9kZTsKIAotCQlpbm9kZSA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IGlub2RlLCBpX2xpc3QpOworCQlpbm9kZSA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGlub2RlLCBpX2xpc3QpOwogCQlsaXN0X2RlbCgmaW5vZGUtPmlfbGlzdCk7CiAKIAkJaWYgKGlub2RlLT5pX2RhdGEubnJwYWdlcykKQEAgLTUyNCw3ICs1MjMsMTIgQEAKICAqLwogc3RydWN0IGlub2RlICpuZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2lubzsKKwkvKgorCSAqIE9uIGEgMzJiaXQsIG5vbiBMRlMgc3RhdCgpIGNhbGwsIGdsaWJjIHdpbGwgZ2VuZXJhdGUgYW4gRU9WRVJGTE9XCisJICogZXJyb3IgaWYgc3RfaW5vIHdvbid0IGZpdCBpbiB0YXJnZXQgc3RydWN0IGZpZWxkLiBVc2UgMzJiaXQgY291bnRlcgorCSAqIGhlcmUgdG8gYXR0ZW1wdCB0byBhdm9pZCB0aGF0LgorCSAqLworCXN0YXRpYyB1bnNpZ25lZCBpbnQgbGFzdF9pbm87CiAJc3RydWN0IGlub2RlICogaW5vZGU7CiAKIAlzcGluX2xvY2tfcHJlZmV0Y2goJmlub2RlX2xvY2spOwpAQCAtNjgzLDI3ICs2ODcsMjggQEAKICAqLwogaW5vX3QgaXVuaXF1ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBtYXhfcmVzZXJ2ZWQpCiB7Ci0Jc3RhdGljIGlub190IGNvdW50ZXI7CisJLyoKKwkgKiBPbiBhIDMyYml0LCBub24gTEZTIHN0YXQoKSBjYWxsLCBnbGliYyB3aWxsIGdlbmVyYXRlIGFuIEVPVkVSRkxPVworCSAqIGVycm9yIGlmIHN0X2lubyB3b24ndCBmaXQgaW4gdGFyZ2V0IHN0cnVjdCBmaWVsZC4gVXNlIDMyYml0IGNvdW50ZXIKKwkgKiBoZXJlIHRvIGF0dGVtcHQgdG8gYXZvaWQgdGhhdC4KKwkgKi8KKwlzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50ZXI7CiAJc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqIGhlYWQ7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJaW5vX3QgcmVzOwotCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7Ci1yZXRyeToKLQlpZiAoY291bnRlciA+IG1heF9yZXNlcnZlZCkgewotCQloZWFkID0gaW5vZGVfaGFzaHRhYmxlICsgaGFzaChzYixjb3VudGVyKTsKLQkJcmVzID0gY291bnRlcisrOwotCQlpbm9kZSA9IGZpbmRfaW5vZGVfZmFzdChzYiwgaGVhZCwgcmVzKTsKLQkJaWYgKCFpbm9kZSkgewotCQkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwotCQkJcmV0dXJuIHJlczsKLQkJfQotCX0gZWxzZSB7Ci0JCWNvdW50ZXIgPSBtYXhfcmVzZXJ2ZWQgKyAxOwotCX0KLQlnb3RvIHJldHJ5OwotCQotfQogCisJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKKwlkbyB7CisJCWlmIChjb3VudGVyIDw9IG1heF9yZXNlcnZlZCkKKwkJCWNvdW50ZXIgPSBtYXhfcmVzZXJ2ZWQgKyAxOworCQlyZXMgPSBjb3VudGVyKys7CisJCWhlYWQgPSBpbm9kZV9oYXNodGFibGUgKyBoYXNoKHNiLCByZXMpOworCQlpbm9kZSA9IGZpbmRfaW5vZGVfZmFzdChzYiwgaGVhZCwgcmVzKTsKKwl9IHdoaWxlIChpbm9kZSAhPSBOVUxMKTsKKwlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQogRVhQT1JUX1NZTUJPTChpdW5pcXVlKTsKIAogc3RydWN0IGlub2RlICppZ3JhYihzdHJ1Y3QgaW5vZGUgKmlub2RlKQpAQCAtMTA0MCw3ICsxMDQ1LDcgQEAKIAkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiAoSV9ESVJUWXxJX0xPQ0spKSkKIAkJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgJmlub2RlX3VudXNlZCk7CiAJCWlub2Rlc19zdGF0Lm5yX3VudXNlZCsrOwotCQlpZiAoIXNiIHx8IChzYi0+c19mbGFncyAmIE1TX0FDVElWRSkpIHsKKwkJaWYgKHNiLT5zX2ZsYWdzICYgTVNfQUNUSVZFKSB7CiAJCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAJCQlyZXR1cm47CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2lub3RpZnkuYyBiL2ZzL2lub3RpZnkuYwppbmRleCBmNTA5OWQ4Li43NDU3NTAxIDEwMDY0NAotLS0gYS9mcy9pbm90aWZ5LmMKKysrIGIvZnMvaW5vdGlmeS5jCkBAIC01MDksNyArNTA5LDcgQEAKIAkJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKIAkJCWJyZWFrOwogCQl9Ci0JCXdhdGNoID0gbGlzdF9lbnRyeSh3YXRjaGVzLT5uZXh0LCBzdHJ1Y3QgaW5vdGlmeV93YXRjaCwgaF9saXN0KTsKKwkJd2F0Y2ggPSBsaXN0X2ZpcnN0X2VudHJ5KHdhdGNoZXMsIHN0cnVjdCBpbm90aWZ5X3dhdGNoLCBoX2xpc3QpOwogCQlnZXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7CiAJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKIApkaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmgKaW5kZXggZWEwMDEyNi4uMzkyZThjYyAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAorKysgYi9mcy9pbnRlcm5hbC5oCkBAIC05LDggKzksNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW9jdGwzMi5oPgotCiBzdHJ1Y3Qgc3VwZXJfYmxvY2s7CiAKIC8qCkBAIC00MiwxNCArNDAsNiBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGNocmRldl9pbml0KHZvaWQpOwogCiAvKgotICogY29tcGF0X2lvY3RsLmMKLSAqLwotI2lmZGVmIENPTkZJR19DT01QQVQKLWV4dGVybiBzdHJ1Y3QgaW9jdGxfdHJhbnMgaW9jdGxfc3RhcnRbXTsKLWV4dGVybiBpbnQgaW9jdGxfdGFibGVfc2l6ZTsKLSNlbmRpZgotCi0vKgogICogbmFtZXNwYWNlLmMKICAqLwogZXh0ZXJuIGludCBjb3B5X21vdW50X29wdGlvbnMoY29uc3Qgdm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKZGlmZiAtLWdpdCBhL2ZzL2lvY3RsLmMgYi9mcy9pb2N0bC5jCmluZGV4IGZmNjE3NzIuLjhjOTBjYmMgMTAwNjQ0Ci0tLSBhL2ZzL2lvY3RsLmMKKysrIGIvZnMvaW9jdGwuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CkBAIC0yMCw2ICsyMSw3IEBACiAJCXVuc2lnbmVkIGxvbmcgYXJnKQogewogCWludCBlcnJvciA9IC1FTk9UVFk7CisJdm9pZCAqZjsKIAogCWlmICghZmlscC0+Zl9vcCkKIAkJZ290byBvdXQ7CkBAIC0yOSwxMCArMzEsMTYgQEAKIAkJaWYgKGVycm9yID09IC1FTk9JT0NUTENNRCkKIAkJCWVycm9yID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmIChmaWxwLT5mX29wLT5pb2N0bCkgeworCX0gZWxzZSBpZiAoKGYgPSBmaWxwLT5mX29wLT5pb2N0bCkpIHsKIAkJbG9ja19rZXJuZWwoKTsKLQkJZXJyb3IgPSBmaWxwLT5mX29wLT5pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLAotCQkJCQkgIGZpbHAsIGNtZCwgYXJnKTsKKwkJaWYgKCFmaWxwLT5mX29wLT5pb2N0bCkgeworCQkJcHJpbnRrKCIlczogaW9jdGwgJXAgZGlzYXBwZWFyZWRcbiIsIF9fRlVOQ1RJT05fXywgZik7CisJCQlwcmludF9zeW1ib2woInN5bWJvbDogJXNcbiIsICh1bnNpZ25lZCBsb25nKWYpOworCQkJZHVtcF9zdGFjaygpOworCQl9IGVsc2UgeworCQkJZXJyb3IgPSBmaWxwLT5mX29wLT5pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLAorCQkJCQkJICBmaWxwLCBjbWQsIGFyZyk7CisJCX0KIAkJdW5sb2NrX2tlcm5lbCgpOwogCX0KIApAQCAtNjcsOCArNzUsNiBAQAogCQkJcmV0dXJuIHB1dF91c2VyKHJlcywgcCk7CiAJCX0KIAkJY2FzZSBGSUdFVEJTWjoKLQkJCWlmIChpbm9kZS0+aV9zYiA9PSBOVUxMKQotCQkJCXJldHVybiAtRUJBREY7CiAJCQlyZXR1cm4gcHV0X3VzZXIoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplLCBwKTsKIAkJY2FzZSBGSU9OUkVBRDoKIAkJCXJldHVybiBwdXRfdXNlcihpX3NpemVfcmVhZChpbm9kZSkgLSBmaWxwLT5mX3BvcywgcCk7CmRpZmYgLS1naXQgYS9mcy9pc29mcy9pbm9kZS5jIGIvZnMvaXNvZnMvaW5vZGUuYwppbmRleCBlOTlmN2ZmLi41YzNlZWNmIDEwMDY0NAotLS0gYS9mcy9pc29mcy9pbm9kZS5jCisrKyBiL2ZzL2lzb2ZzL2lub2RlLmMKQEAgLTc3LDggKzc3LDcgQEAKIHsKIAlzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmVpID0gZm9vOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKQotCQlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOworCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CiB9CiAgCiBzdGF0aWMgaW50IGluaXRfaW5vZGVjYWNoZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZnMvamJkL2NoZWNrcG9pbnQuYyBiL2ZzL2piZC9jaGVja3BvaW50LmMKaW5kZXggMDIwOGNjNy4uNDc1NTJkNCAxMDA2NDQKLS0tIGEvZnMvamJkL2NoZWNrcG9pbnQuYworKysgYi9mcy9qYmQvY2hlY2twb2ludC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2ZzL2NoZWNrcG9pbnQuYworICogbGludXgvZnMvamJkL2NoZWNrcG9pbnQuYwogICoKICAqIFdyaXR0ZW4gYnkgU3RlcGhlbiBDLiBUd2VlZGllIDxzY3RAcmVkaGF0LmNvbT4sIDE5OTkKICAqCmRpZmYgLS1naXQgYS9mcy9qYmQvY29tbWl0LmMgYi9mcy9qYmQvY29tbWl0LmMKaW5kZXggYmU0NjQ4Yi4uMWZhY2ZhZiAxMDA2NDQKLS0tIGEvZnMvamJkL2NvbW1pdC5jCisrKyBiL2ZzL2piZC9jb21taXQuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAvKgogICogRGVmYXVsdCBJTyBlbmQgaGFuZGxlciBmb3IgdGVtcG9yYXJ5IEJKX0lPIGJ1ZmZlcl9oZWFkcy4KZGlmZiAtLWdpdCBhL2ZzL2piZC9qb3VybmFsLmMgYi9mcy9qYmQvam91cm5hbC5jCmluZGV4IDEwZmZmOTQuLjQ2ZmU3NDMgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9qb3VybmFsLmMKKysrIGIvZnMvamJkL2pvdXJuYWwuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2piZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgpAQCAtMjExLDEwICsyMTAsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgam91cm5hbF9zdGFydF90aHJlYWQoam91cm5hbF90ICpqb3VybmFsKQorc3RhdGljIGludCBqb3VybmFsX3N0YXJ0X3RocmVhZChqb3VybmFsX3QgKmpvdXJuYWwpCiB7Ci0Ja3RocmVhZF9ydW4oa2pvdXJuYWxkLCBqb3VybmFsLCAia2pvdXJuYWxkIik7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJdCA9IGt0aHJlYWRfcnVuKGtqb3VybmFsZCwgam91cm5hbCwgImtqb3VybmFsZCIpOworCWlmIChJU19FUlIodCkpCisJCXJldHVybiBQVFJfRVJSKHQpOworCiAJd2FpdF9ldmVudChqb3VybmFsLT5qX3dhaXRfZG9uZV9jb21taXQsIGpvdXJuYWwtPmpfdGFzayAhPSAwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgam91cm5hbF9raWxsX3RocmVhZChqb3VybmFsX3QgKmpvdXJuYWwpCkBAIC04NDAsOCArODQ1LDcgQEAKIAogCS8qIEFkZCB0aGUgZHluYW1pYyBmaWVsZHMgYW5kIHdyaXRlIGl0IHRvIGRpc2suICovCiAJam91cm5hbF91cGRhdGVfc3VwZXJibG9jayhqb3VybmFsLCAxKTsKLQlqb3VybmFsX3N0YXJ0X3RocmVhZChqb3VybmFsKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gam91cm5hbF9zdGFydF90aHJlYWQoam91cm5hbCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvamJkL3JlY292ZXJ5LmMgYi9mcy9qYmQvcmVjb3ZlcnkuYwppbmRleCAxMTU2M2ZlLi4yYTVmNGI4IDEwMDY0NAotLS0gYS9mcy9qYmQvcmVjb3ZlcnkuYworKysgYi9mcy9qYmQvcmVjb3ZlcnkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9mcy9yZWNvdmVyeS5jCisgKiBsaW51eC9mcy9qYmQvcmVjb3ZlcnkuYwogICoKICAqIFdyaXR0ZW4gYnkgU3RlcGhlbiBDLiBUd2VlZGllIDxzY3RAcmVkaGF0LmNvbT4sIDE5OTkKICAqCmRpZmYgLS1naXQgYS9mcy9qYmQvcmV2b2tlLmMgYi9mcy9qYmQvcmV2b2tlLmMKaW5kZXggZDIwNGFiMy4uODI0ZTNiNyAxMDA2NDQKLS0tIGEvZnMvamJkL3Jldm9rZS5jCisrKyBiL2ZzL2piZC9yZXZva2UuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9mcy9yZXZva2UuYworICogbGludXgvZnMvamJkL3Jldm9rZS5jCiAgKgogICogV3JpdHRlbiBieSBTdGVwaGVuIEMuIFR3ZWVkaWUgPHNjdEByZWRoYXQuY29tPiwgMjAwMAogICoKQEAgLTY2LDcgKzY2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZnMvamJkL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwppbmRleCBjY2VhZjU3Li43NzJiNjUzIDEwMDY0NAotLS0gYS9mcy9qYmQvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9mcy90cmFuc2FjdGlvbi5jCisgKiBsaW51eC9mcy9qYmQvdHJhbnNhY3Rpb24uYwogICoKICAqIFdyaXR0ZW4gYnkgU3RlcGhlbiBDLiBUd2VlZGllIDxzY3RAcmVkaGF0LmNvbT4sIDE5OTgKICAqCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogCmRpZmYgLS1naXQgYS9mcy9qYmQyL2NoZWNrcG9pbnQuYyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCmluZGV4IDY4MDM5ZmEuLjNmY2NkZTcgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY2hlY2twb2ludC5jCisrKyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2ZzL2NoZWNrcG9pbnQuYworICogbGludXgvZnMvamJkMi9jaGVja3BvaW50LmMKICAqCiAgKiBXcml0dGVuIGJ5IFN0ZXBoZW4gQy4gVHdlZWRpZSA8c2N0QHJlZGhhdC5jb20+LCAxOTk5CiAgKgpkaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmMKaW5kZXggNmJkODAwNS4uMjg1NmUxMSAxMDA2NDQKLS0tIGEvZnMvamJkMi9jb21taXQuYworKysgYi9mcy9qYmQyL2NvbW1pdC5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKIC8qCiAgKiBEZWZhdWx0IElPIGVuZCBoYW5kbGVyIGZvciB0ZW1wb3JhcnkgQkpfSU8gYnVmZmVyX2hlYWRzLgpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCA0NGZjMzJiLi43OGQ2M2I4IDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2piZDIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KQEAgLTIxMSwxMCArMjEwLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGpiZDJfam91cm5hbF9zdGFydF90aHJlYWQoam91cm5hbF90ICpqb3VybmFsKQorc3RhdGljIGludCBqYmQyX2pvdXJuYWxfc3RhcnRfdGhyZWFkKGpvdXJuYWxfdCAqam91cm5hbCkKIHsKLQlrdGhyZWFkX3J1bihram91cm5hbGQyLCBqb3VybmFsLCAia2pvdXJuYWxkMiIpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKworCXQgPSBrdGhyZWFkX3J1bihram91cm5hbGQyLCBqb3VybmFsLCAia2pvdXJuYWxkMiIpOworCWlmIChJU19FUlIodCkpCisJCXJldHVybiBQVFJfRVJSKHQpOworCiAJd2FpdF9ldmVudChqb3VybmFsLT5qX3dhaXRfZG9uZV9jb21taXQsIGpvdXJuYWwtPmpfdGFzayAhPSAwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgam91cm5hbF9raWxsX3RocmVhZChqb3VybmFsX3QgKmpvdXJuYWwpCkBAIC04NDAsOCArODQ1LDcgQEAKIAogCS8qIEFkZCB0aGUgZHluYW1pYyBmaWVsZHMgYW5kIHdyaXRlIGl0IHRvIGRpc2suICovCiAJamJkMl9qb3VybmFsX3VwZGF0ZV9zdXBlcmJsb2NrKGpvdXJuYWwsIDEpOwotCWpiZDJfam91cm5hbF9zdGFydF90aHJlYWQoam91cm5hbCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGpiZDJfam91cm5hbF9zdGFydF90aHJlYWQoam91cm5hbCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvamJkMi9yZWNvdmVyeS5jIGIvZnMvamJkMi9yZWNvdmVyeS5jCmluZGV4IDlmMTBhY2EuLjM5NWM5MmEgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvcmVjb3ZlcnkuYworKysgYi9mcy9qYmQyL3JlY292ZXJ5LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvZnMvcmVjb3ZlcnkuYworICogbGludXgvZnMvamJkMi9yZWNvdmVyeS5jCiAgKgogICogV3JpdHRlbiBieSBTdGVwaGVuIEMuIFR3ZWVkaWUgPHNjdEByZWRoYXQuY29tPiwgMTk5OQogICoKZGlmZiAtLWdpdCBhL2ZzL2piZDIvcmV2b2tlLmMgYi9mcy9qYmQyL3Jldm9rZS5jCmluZGV4IGY1MDY2NDYuLjkyNDZlNzYgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvcmV2b2tlLmMKKysrIGIvZnMvamJkMi9yZXZva2UuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9mcy9yZXZva2UuYworICogbGludXgvZnMvamJkMi9yZXZva2UuYwogICoKICAqIFdyaXR0ZW4gYnkgU3RlcGhlbiBDLiBUd2VlZGllIDxzY3RAcmVkaGF0LmNvbT4sIDIwMDAKICAqCkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwppbmRleCAzYTg3MDAxLi43OTQ2ZmY0IDEwMDY0NAotLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2ZzL3RyYW5zYWN0aW9uLmMKKyAqIGxpbnV4L2ZzL2piZDIvdHJhbnNhY3Rpb24uYwogICoKICAqIFdyaXR0ZW4gYnkgU3RlcGhlbiBDLiBUd2VlZGllIDxzY3RAcmVkaGF0LmNvbT4sIDE5OTgKICAqCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9oaXN0b19taXBzLmggYi9mcy9qZmZzMi9oaXN0b19taXBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhM2RhYzEuLjAwMDAwMDAKLS0tIGEvZnMvamZmczIvaGlzdG9fbWlwcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jZGVmaW5lIEJJVF9ESVZJREVSX01JUFMgMTA0Mwotc3RhdGljIGludCBiaXRzX21pcHNbOF0gPSB7IDI3NywyNDksMjkwLDI2NywyMjksMzQxLDIxMiwyNDF9OyAvKiBtaXBzMzIgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3JlYWRpbm9kZS5jIGIvZnMvamZmczIvcmVhZGlub2RlLmMKaW5kZXggNmFmZjM4OS4uNDg4NGQ1ZSAxMDA2NDQKLS0tIGEvZnMvamZmczIvcmVhZGlub2RlLmMKKysrIGIvZnMvamZmczIvcmVhZGlub2RlLmMKQEAgLTIxOSw5ICsyMTksOSBAQAogCQkJCXN0cnVjdCBqZmZzMl90bXBfZG5vZGVfaW5mbyAqdG4pCiB7CiAJdWludDMyX3QgZm5fZW5kID0gdG4tPmZuLT5vZnMgKyB0bi0+Zm4tPnNpemU7Ci0Jc3RydWN0IGpmZnMyX3RtcF9kbm9kZV9pbmZvICppbnNlcnRfcG9pbnQgPSBOVUxMLCAqdGhpczsKKwlzdHJ1Y3QgamZmczJfdG1wX2Rub2RlX2luZm8gKnRoaXM7CiAKLQlkYmdfcmVhZGlub2RlKCJpbnNlcnQgZnJhZ21lbnQgJSMwNHgtJSMwNHgsIHZlciAldVxuIiwgdG4tPmZuLT5vZnMsIGZuX2VuZCwgdG4tPnZlcnNpb24pOworCWRiZ19yZWFkaW5vZGUoImluc2VydCBmcmFnbWVudCAlIzA0eC0lIzA0eCwgdmVyICV1IGF0ICUwOHhcbiIsIHRuLT5mbi0+b2ZzLCBmbl9lbmQsIHRuLT52ZXJzaW9uLCByZWZfb2Zmc2V0KHRuLT5mbi0+cmF3KSk7CiAKIAkvKiBJZiBhIG5vZGUgaGFzIHplcm8gZHNpemUsIHdlIG9ubHkgaGF2ZSB0byBrZWVwIGlmIGl0IGlmIGl0IG1pZ2h0IGJlIHRoZQogCSAgIG5vZGUgd2l0aCBoaWdoZXN0IHZlcnNpb24gLS0gaS5lLiB0aGUgb25lIHdoaWNoIHdpbGwgZW5kIHVwIGFzIGYtPm1ldGFkYXRhLgpAQCAtMjQwLDI0ICsyNDAsMTcgQEAKIAogCS8qIEZpbmQgdGhlIGVhcmxpZXN0IG5vZGUgd2hpY2ggX21heV8gYmUgcmVsZXZhbnQgdG8gdGhpcyBvbmUgKi8KIAl0aGlzID0gamZmczJfbG9va3VwX3RuKCZyaWktPnRuX3Jvb3QsIHRuLT5mbi0+b2ZzKTsKLQlpZiAoIXRoaXMpIHsKLQkJLyogRmlyc3QgYWRkaXRpb24gdG8gZW1wdHkgdHJlZS4gJERFSVRZIGhvdyBJIGxvdmUgdGhlIGVhc3kgY2FzZXMgKi8KLQkJcmJfbGlua19ub2RlKCZ0bi0+cmIsIE5VTEwsICZyaWktPnRuX3Jvb3QucmJfbm9kZSk7Ci0JCXJiX2luc2VydF9jb2xvcigmdG4tPnJiLCAmcmlpLT50bl9yb290KTsKLQkJZGJnX3JlYWRpbm9kZSgia2VlcCBuZXcgZnJhZ1xuIik7Ci0JCXJldHVybiAwOworCWlmICh0aGlzKSB7CisJCS8qIElmIHRoZSBub2RlIGlzIGNvaW5jaWRlbnQgd2l0aCBhbm90aGVyIGF0IGEgbG93ZXIgYWRkcmVzcywKKwkJICAgYmFjayB1cCB1bnRpbCB0aGUgb3RoZXIgbm9kZSBpcyBmb3VuZC4gSXQgbWF5IGJlIHJlbGV2YW50ICovCisJCXdoaWxlICh0aGlzLT5vdmVybGFwcGVkKQorCQkJdGhpcyA9IHRuX3ByZXYodGhpcyk7CisKKwkJLyogRmlyc3Qgbm9kZSBzaG91bGQgbmV2ZXIgYmUgbWFya2VkIG92ZXJsYXBwZWQgKi8KKwkJQlVHX09OKCF0aGlzKTsKKwkJZGJnX3JlYWRpbm9kZSgiJ3RoaXMnIGZvdW5kICUjMDR4LSUjMDR4ICglcylcbiIsIHRoaXMtPmZuLT5vZnMsIHRoaXMtPmZuLT5vZnMgKyB0aGlzLT5mbi0+c2l6ZSwgdGhpcy0+Zm4gPyAiZGF0YSIgOiAiaG9sZSIpOwogCX0KIAotCS8qIElmIHdlIGFkZCBhIG5ldyBub2RlIGl0J2xsIGJlIHNvbWV3aGVyZSB1bmRlciBoZXJlLiAqLwotCWluc2VydF9wb2ludCA9IHRoaXM7Ci0KLQkvKiBJZiB0aGUgbm9kZSBpcyBjb2luY2lkZW50IHdpdGggYW5vdGhlciBhdCBhIGxvd2VyIGFkZHJlc3MsCi0JICAgYmFjayB1cCB1bnRpbCB0aGUgb3RoZXIgbm9kZSBpcyBmb3VuZC4gSXQgbWF5IGJlIHJlbGV2YW50ICovCi0Jd2hpbGUgKHRuLT5vdmVybGFwcGVkKQotCQl0biA9IHRuX3ByZXYodG4pOwotCi0JZGJnX3JlYWRpbm9kZSgiJ3RoaXMnIGZvdW5kICUjMDR4LSUjMDR4ICglcylcbiIsIHRoaXMtPmZuLT5vZnMsIHRoaXMtPmZuLT5vZnMgKyB0aGlzLT5mbi0+c2l6ZSwgdGhpcy0+Zm4gPyAiZGF0YSIgOiAiaG9sZSIpOwotCiAJd2hpbGUgKHRoaXMpIHsKIAkJaWYgKHRoaXMtPmZuLT5vZnMgPiBmbl9lbmQpCiAJCQlicmVhazsKQEAgLTI3NCwxMSArMjY3LDEwIEBACiAJCQkJcmV0dXJuIDA7CiAJCQl9IGVsc2UgewogCQkJCS8qIFdobyBjYXJlcyBpZiB0aGUgbmV3IG9uZSBpcyBnb29kOyBrZWVwIGl0IGZvciBub3cgYW55d2F5LiAqLwotCQkJCXJiX3JlcGxhY2Vfbm9kZSgmdGhpcy0+cmIsICZ0bi0+cmIsICZyaWktPnRuX3Jvb3QpOwotCQkJCS8qIFNhbWUgb3ZlcmxhcHBpbmcgZnJvbSBpbiBmcm9udCBhbmQgYmVoaW5kICovCi0JCQkJdG4tPm92ZXJsYXBwZWQgPSB0aGlzLT5vdmVybGFwcGVkOwotCQkJCWpmZnMyX2tpbGxfdG4oYywgdGhpcyk7CiAJCQkJZGJnX3JlYWRpbm9kZSgiTGlrZSBuZXcgbm9kZS4gVGhyb3cgYXdheSBvbGRcbiIpOworCQkJCXJiX3JlcGxhY2Vfbm9kZSgmdGhpcy0+cmIsICZ0bi0+cmIsICZyaWktPnRuX3Jvb3QpOworCQkJCWpmZnMyX2tpbGxfdG4oYywgdGhpcyk7CisJCQkJLyogU2FtZSBvdmVybGFwcGluZyBmcm9tIGluIGZyb250IGFuZCBiZWhpbmQgKi8KIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtMjkxLDEzICsyODMsOCBAQAogCQkJCWpmZnMyX2tpbGxfdG4oYywgdG4pOwogCQkJCXJldHVybiAwOwogCQkJfQotCQkJLyogLi4uIGFuZCBpcyBnb29kLiBLaWxsICd0aGlzJy4uLiAqLwotCQkJcmJfcmVwbGFjZV9ub2RlKCZ0aGlzLT5yYiwgJnRuLT5yYiwgJnJpaS0+dG5fcm9vdCk7Ci0JCQl0bi0+b3ZlcmxhcHBlZCA9IHRoaXMtPm92ZXJsYXBwZWQ7Ci0JCQlqZmZzMl9raWxsX3RuKGMsIHRoaXMpOwotCQkJLyogLi4uIGFuZCBhbnkgc3Vic2VxdWVudCBub2RlcyB3aGljaCBhcmUgYWxzbyBvdmVybGFwcGVkICovCi0JCQl0aGlzID0gdG5fbmV4dCh0bik7Ci0JCQl3aGlsZSAodGhpcyAmJiB0aGlzLT5mbi0+b2ZzICsgdGhpcy0+Zm4tPnNpemUgPCBmbl9lbmQpIHsKKwkJCS8qIC4uLiBhbmQgaXMgZ29vZC4gS2lsbCAndGhpcycgYW5kIGFueSBzdWJzZXF1ZW50IG5vZGVzIHdoaWNoIGFyZSBhbHNvIG92ZXJsYXBwZWQgKi8KKwkJCXdoaWxlICh0aGlzICYmIHRoaXMtPmZuLT5vZnMgKyB0aGlzLT5mbi0+c2l6ZSA8PSBmbl9lbmQpIHsKIAkJCQlzdHJ1Y3QgamZmczJfdG1wX2Rub2RlX2luZm8gKm5leHQgPSB0bl9uZXh0KHRoaXMpOwogCQkJCWlmICh0aGlzLT52ZXJzaW9uIDwgdG4tPnZlcnNpb24pIHsKIAkJCQkJdG5fZXJhc2UodGhpcywgJnJpaS0+dG5fcm9vdCk7CkBAIC0zMDgsOCArMjk1LDggQEAKIAkJCQl9CiAJCQkJdGhpcyA9IG5leHQ7CiAJCQl9Ci0JCQlkYmdfcmVhZGlub2RlKCJEb25lIGluc2VydGluZyBuZXdcbiIpOwotCQkJcmV0dXJuIDA7CisJCQlkYmdfcmVhZGlub2RlKCJEb25lIGtpbGxpbmcgb3ZlcmxhcHBlZCBub2Rlc1xuIik7CisJCQljb250aW51ZTsKIAkJfQogCQlpZiAodGhpcy0+dmVyc2lvbiA+IHRuLT52ZXJzaW9uICYmCiAJCSAgICB0aGlzLT5mbi0+b2ZzIDw9IHRuLT5mbi0+b2ZzICYmCkBAIC0zMjEsMjkgKzMwOCwyMSBAQAogCQkJCXJldHVybiAwOwogCQkJfQogCQkJLyogLi4uIGJ1dCAndGhpcycgd2FzIGJhZC4gUmVwbGFjZSBpdC4uLiAqLwotCQkJcmJfcmVwbGFjZV9ub2RlKCZ0aGlzLT5yYiwgJnRuLT5yYiwgJnJpaS0+dG5fcm9vdCk7CiAJCQlkYmdfcmVhZGlub2RlKCJCYWQgQ1JDIG9uIG9sZCBvdmVybGFwcGluZyBub2RlLiBLaWxsIGl0XG4iKTsKKwkJCXRuX2VyYXNlKHRoaXMsICZyaWktPnRuX3Jvb3QpOwogCQkJamZmczJfa2lsbF90bihjLCB0aGlzKTsKLQkJCXJldHVybiAwOworCQkJYnJlYWs7CiAJCX0KLQkJLyogV2Ugd2FudCB0byBiZSBpbnNlcnRlZCB1bmRlciB0aGUgbGFzdCBub2RlIHdoaWNoIGlzCi0JCSAgIGVpdGhlciBhdCBhIGxvd2VyIG9mZnNldCBfb3JfIGhhcyBhIHNtYWxsZXIgcmFuZ2UgKi8KLQkJaWYgKHRoaXMtPmZuLT5vZnMgPCB0bi0+Zm4tPm9mcyB8fAotCQkgICAgKHRoaXMtPmZuLT5vZnMgPT0gdG4tPmZuLT5vZnMgJiYKLQkJICAgICB0aGlzLT5mbi0+c2l6ZSA8PSB0bi0+Zm4tPnNpemUpKQotCQkJaW5zZXJ0X3BvaW50ID0gdGhpczsKIAogCQl0aGlzID0gdG5fbmV4dCh0aGlzKTsKIAl9Ci0JZGJnX3JlYWRpbm9kZSgiaW5zZXJ0X3BvaW50ICVwLCB2ZXIgJWQsIDB4JXgtMHgleCwgb3YgJWRcbiIsCi0JCSAgICAgIGluc2VydF9wb2ludCwgaW5zZXJ0X3BvaW50LT52ZXJzaW9uLCBpbnNlcnRfcG9pbnQtPmZuLT5vZnMsCi0JCSAgICAgIGluc2VydF9wb2ludC0+Zm4tPm9mcytpbnNlcnRfcG9pbnQtPmZuLT5zaXplLAotCQkgICAgICBpbnNlcnRfcG9pbnQtPm92ZXJsYXBwZWQpOworCiAJLyogV2UgbmVpdGhlciBjb21wbGV0ZWx5IG9ic29sZXRlZCBub3Igd2VyZSBjb21wbGV0ZWx5Ci0JICAgb2Jzb2xldGVkIGJ5IGFuIGVhcmxpZXIgbm9kZS4gSW5zZXJ0IHVuZGVyIGluc2VydF9wb2ludCAqLworCSAgIG9ic29sZXRlZCBieSBhbiBlYXJsaWVyIG5vZGUuIEluc2VydCBpbnRvIHRoZSB0cmVlICovCiAJewotCQlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gJmluc2VydF9wb2ludC0+cmI7Ci0JCXN0cnVjdCByYl9ub2RlICoqbGluayA9ICZwYXJlbnQ7CisJCXN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CisJCXN0cnVjdCByYl9ub2RlICoqbGluayA9ICZyaWktPnRuX3Jvb3QucmJfbm9kZTsKKwkJc3RydWN0IGpmZnMyX3RtcF9kbm9kZV9pbmZvICppbnNlcnRfcG9pbnQgPSBOVUxMOwogCiAJCXdoaWxlICgqbGluaykgewogCQkJcGFyZW50ID0gKmxpbms7CkBAIC0zNTksNiArMzM4LDcgQEAKIAkJcmJfbGlua19ub2RlKCZ0bi0+cmIsICZpbnNlcnRfcG9pbnQtPnJiLCBsaW5rKTsKIAkJcmJfaW5zZXJ0X2NvbG9yKCZ0bi0+cmIsICZyaWktPnRuX3Jvb3QpOwogCX0KKwogCS8qIElmIHRoZXJlJ3MgYW55dGhpbmcgYmVoaW5kIHRoYXQgb3ZlcmxhcHMgdXMsIG5vdGUgaXQgKi8KIAl0aGlzID0gdG5fcHJldih0bik7CiAJaWYgKHRoaXMpIHsKQEAgLTQ1Nyw3ICs0MzcsNyBAQAogCXRoaXMgPSB0bl9sYXN0KCZyaWktPnRuX3Jvb3QpOwogCXdoaWxlICh0aGlzKSB7CiAJCWRiZ19yZWFkaW5vZGUoInRuICVwIHZlciAlZCByYW5nZSAweCV4LTB4JXggb3YgJWRcbiIsIHRoaXMsIHRoaXMtPnZlcnNpb24sIHRoaXMtPmZuLT5vZnMsCi0JCQkgICAgIHRoaXMtPmZuLT5vZnMrdGhpcy0+Zm4tPnNpemUsIHRoaXMtPm92ZXJsYXBwZWQpOworCQkJICAgICAgdGhpcy0+Zm4tPm9mcyt0aGlzLT5mbi0+c2l6ZSwgdGhpcy0+b3ZlcmxhcHBlZCk7CiAJCXRoaXMgPSB0bl9wcmV2KHRoaXMpOwogCX0KICNlbmRpZgpAQCAtNDgzLDcgKzQ2Myw3IEBACiAJCQl2ZXJzX25leHQgPSB0bl9wcmV2KHRoaXMpOwogCQkJZWF0X2xhc3QoJnZlcl9yb290LCAmdGhpcy0+cmIpOwogCQkJaWYgKGNoZWNrX3RuX25vZGUoYywgdGhpcykpIHsKLQkJCQlkYmdfcmVhZGlub2RlKCJub2RlIHZlciAleCwgMHgleC0weCV4IGZhaWxlZCBDUkNcbiIsCisJCQkJZGJnX3JlYWRpbm9kZSgibm9kZSB2ZXIgJWQsIDB4JXgtMHgleCBmYWlsZWQgQ1JDXG4iLAogCQkJCQkgICAgIHRoaXMtPnZlcnNpb24sIHRoaXMtPmZuLT5vZnMsCiAJCQkJCSAgICAgdGhpcy0+Zm4tPm9mcyt0aGlzLT5mbi0+c2l6ZSk7CiAJCQkJamZmczJfa2lsbF90bihjLCB0aGlzKTsKQEAgLTQ5Niw3ICs0NzYsNyBAQAogCQkJCQloaWdoX3ZlciA9IHRoaXMtPnZlcnNpb247CiAJCQkJCXJpaS0+bGF0ZXN0X3JlZiA9IHRoaXMtPmZuLT5yYXc7CiAJCQkJfQotCQkJCWRiZ19yZWFkaW5vZGUoIkFkZCAlcCAodiAleCwgMHgleC0weCV4LCBvdiAlZCkgdG8gZnJhZ3RyZWVcbiIsCisJCQkJZGJnX3JlYWRpbm9kZSgiQWRkICVwICh2ICVkLCAweCV4LTB4JXgsIG92ICVkKSB0byBmcmFndHJlZVxuIiwKIAkJCQkJICAgICB0aGlzLCB0aGlzLT52ZXJzaW9uLCB0aGlzLT5mbi0+b2ZzLAogCQkJCQkgICAgIHRoaXMtPmZuLT5vZnMrdGhpcy0+Zm4tPnNpemUsIHRoaXMtPm92ZXJsYXBwZWQpOwogCkBAIC04NTAsNyArODMwLDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAjaWZkZWYgSkZGUzJfREJHX1JFQURJTk9ERV9NRVNTQUdFUwotCWRiZ19yZWFkaW5vZGUoIkFmdGVyIGFkZGluZyB2ZXIgJWQ6XG4iLCB0bi0+dmVyc2lvbik7CisJZGJnX3JlYWRpbm9kZSgiQWZ0ZXIgYWRkaW5nIHZlciAlZDpcbiIsIGplMzJfdG9fY3B1KHJkLT52ZXJzaW9uKSk7CiAJdG4gPSB0bl9maXJzdCgmcmlpLT50bl9yb290KTsKIAl3aGlsZSAodG4pIHsKIAkJZGJnX3JlYWRpbm9kZSgiJXA6IHYgJWQgciAweCV4LTB4JXggb3YgJWRcbiIsCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zdXBlci5jIGIvZnMvamZmczIvc3VwZXIuYwppbmRleCA0NTM2OGY4Li42NDg4YWY0IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9zdXBlci5jCisrKyBiL2ZzL2pmZnMyL3N1cGVyLmMKQEAgLTQ3LDEwICs0Nyw4IEBACiB7CiAJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmVpID0gKHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICopIGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikgewotCQlpbml0X01VVEVYKCZlaS0+c2VtKTsKLQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKLQl9CisJaW5pdF9NVVRFWCgmZWktPnNlbSk7CisJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIH0KIAogc3RhdGljIGludCBqZmZzMl9zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KQpkaWZmIC0tZ2l0IGEvZnMvamZmczIvd2J1Zi5jIGIvZnMvamZmczIvd2J1Zi5jCmluZGV4IGM1NTZlODUuLjkxZDFkMGYgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3didWYuYworKysgYi9mcy9qZmZzMi93YnVmLmMKQEAgLTYzNyw3ICs2MzcsMTAgQEAKIAogCW1lbXNldChjLT53YnVmLDB4ZmYsYy0+d2J1Zl9wYWdlc2l6ZSk7CiAJLyogYWRqdXN0IHdyaXRlIGJ1ZmZlciBvZmZzZXQsIGVsc2Ugd2UgZ2V0IGEgbm9uIGNvbnRpZ3VvdXMgd3JpdGUgYnVnICovCi0JYy0+d2J1Zl9vZnMgKz0gYy0+d2J1Zl9wYWdlc2l6ZTsKKwlpZiAoU0VDVE9SX0FERFIoYy0+d2J1Zl9vZnMpID09IFNFQ1RPUl9BRERSKGMtPndidWZfb2ZzK2MtPndidWZfcGFnZXNpemUpKQorCQljLT53YnVmX29mcyArPSBjLT53YnVmX3BhZ2VzaXplOworCWVsc2UKKwkJYy0+d2J1Zl9vZnMgPSAweGZmZmZmZmZmOwogCWMtPndidWZfbGVuID0gMDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2pmcy9pbm9kZS5jIGIvZnMvamZzL2lub2RlLmMKaW5kZXggZTI4NTAyMi4uMzQ2N2RkZSAxMDA2NDQKLS0tIGEvZnMvamZzL2lub2RlLmMKKysrIGIvZnMvamZzL2lub2RlLmMKQEAgLTU1LDcgKzU1LDYgQEAKIAkJaW5vZGUtPmlfb3AgPSAmamZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIAkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9yZGV2KTsKIAl9Ci0JamZzX3NldF9pbm9kZV9mbGFncyhpbm9kZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9qZnMvaW9jdGwuYyBiL2ZzL2pmcy9pb2N0bC5jCmluZGV4IGVkODE0YjEuLmZlMDYzYWYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9pb2N0bC5jCisrKyBiL2ZzL2pmcy9pb2N0bC5jCkBAIC01OSw2ICs1OSw3IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSkZTX0lPQ19HRVRGTEFHUzoKKwkJamZzX2dldF9pbm9kZV9mbGFncyhqZnNfaW5vZGUpOwogCQlmbGFncyA9IGpmc19pbm9kZS0+bW9kZTIgJiBKRlNfRkxfVVNFUl9WSVNJQkxFOwogCQlmbGFncyA9IGpmc19tYXBfZXh0MihmbGFncywgMCk7CiAJCXJldHVybiBwdXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKikgYXJnKTsKQEAgLTc4LDYgKzc5LDcgQEAKIAkJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJZmxhZ3MgJj0gfkpGU19ESVJTWU5DX0ZMOwogCisJCWpmc19nZXRfaW5vZGVfZmxhZ3MoamZzX2lub2RlKTsKIAkJb2xkZmxhZ3MgPSBqZnNfaW5vZGUtPm1vZGUyOwogCiAJCS8qCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2RtYXAuYyBiL2ZzL2pmcy9qZnNfZG1hcC5jCmluZGV4IDgyYjA1NDQuLmYzYjFlYmIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZG1hcC5jCisrKyBiL2ZzL2pmcy9qZnNfZG1hcC5jCkBAIC0xNTA3LDcgKzE1MDcsNyBAQAogCQlpZiAobDJuYiA8IGJ1ZG1pbikgewogCiAJCQkvKiBzZWFyY2ggdGhlIGxvd2VyIGxldmVsIGRtYXAgY29udHJvbCBwYWdlcyB0byBnZXQKLQkJCSAqIHRoZSBzdGFydGluZyBibG9jayBudW1iZXIgb2YgdGhlIHRoZSBkbWFwIHRoYXQKKwkJCSAqIHRoZSBzdGFydGluZyBibG9jayBudW1iZXIgb2YgdGhlIGRtYXAgdGhhdAogCQkJICogY29udGFpbnMgb3Igc3RhcnRzIG9mZiB0aGUgZnJlZSBzcGFjZS4KIAkJCSAqLwogCQkJaWYgKChyYyA9CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2ltYXAuYyBiL2ZzL2pmcy9qZnNfaW1hcC5jCmluZGV4IGFhNTEyNGIuLmM2NTMwMjIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfaW1hcC5jCisrKyBiL2ZzL2pmcy9qZnNfaW1hcC5jCkBAIC0zODYsNyArMzg2LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JLyogbG9jYXRlIHRoZSB0aGUgZGlzayBpbm9kZSByZXF1ZXN0ZWQgKi8KKwkvKiBsb2NhdGUgdGhlIGRpc2sgaW5vZGUgcmVxdWVzdGVkICovCiAJZHAgPSAoc3RydWN0IGRpbm9kZSAqKSBtcC0+ZGF0YTsKIAlkcCArPSByZWxfaW5vZGU7CiAKQEAgLTE0MDcsNyArMTQwNyw3IEBACiAJaW51bSA9IHBpcC0+aV9pbm8gKyAxOwogCWlubyA9IGludW0gJiAoSU5PU1BFUklBRyAtIDEpOwogCi0JLyogYmFjayBvZmYgdGhlIHRoZSBoaW50IGlmIGl0IGlzIG91dHNpZGUgb2YgdGhlIGlhZyAqLworCS8qIGJhY2sgb2ZmIHRoZSBoaW50IGlmIGl0IGlzIG91dHNpZGUgb2YgdGhlIGlhZyAqLwogCWlmIChpbm8gPT0gMCkKIAkJaW51bSA9IHBpcC0+aV9pbm87CiAKQEAgLTMwNzgsNiArMzA3OCw3IEBACiAKIAlqZnNfaXAtPmZpbGVzZXQgPSBsZTMyX3RvX2NwdShkaXAtPmRpX2ZpbGVzZXQpOwogCWpmc19pcC0+bW9kZTIgPSBsZTMyX3RvX2NwdShkaXAtPmRpX21vZGUpOworCWpmc19zZXRfaW5vZGVfZmxhZ3MoaXApOwogCiAJaXAtPmlfbW9kZSA9IGxlMzJfdG9fY3B1KGRpcC0+ZGlfbW9kZSkgJiAweGZmZmY7CiAJaWYgKHNiaS0+dW1hc2sgIT0gLTEpIHsKQEAgLTMxNzQsNiArMzE3NSw3IEBACiAJCWRpcC0+ZGlfZ2lkID0gY3B1X3RvX2xlMzIoaXAtPmlfZ2lkKTsKIAllbHNlCiAJCWRpcC0+ZGlfZ2lkID0gY3B1X3RvX2xlMzIoamZzX2lwLT5zYXZlZF9naWQpOworCWpmc19nZXRfaW5vZGVfZmxhZ3MoamZzX2lwKTsKIAkvKgogCSAqIG1vZGUyIGlzIG9ubHkgbmVlZGVkIGZvciBzdG9yaW5nIHRoZSBoaWdoZXIgb3JkZXIgYml0cy4KIAkgKiBUcnVzdCBpX21vZGUgZm9yIHRoZSBsb3dlciBvcmRlciBvbmVzCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2lub2RlLmMgYi9mcy9qZnMvamZzX2lub2RlLmMKaW5kZXggNGM2N2VkOS4uZWQ2NTc0YiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbm9kZS5jCisrKyBiL2ZzL2pmcy9qZnNfaW5vZGUuYwpAQCAtNDUsNiArNDUsMjQgQEAKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19TWU5DOwogfQogCit2b2lkIGpmc19nZXRfaW5vZGVfZmxhZ3Moc3RydWN0IGpmc19pbm9kZV9pbmZvICpqZnNfaXApCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gamZzX2lwLT52ZnNfaW5vZGUuaV9mbGFnczsKKworCWpmc19pcC0+bW9kZTIgJj0gfihKRlNfSU1NVVRBQkxFX0ZMIHwgSkZTX0FQUEVORF9GTCB8IEpGU19OT0FUSU1FX0ZMIHwKKwkJCSAgIEpGU19ESVJTWU5DX0ZMIHwgSkZTX1NZTkNfRkwpOworCWlmIChmbGFncyAmIFNfSU1NVVRBQkxFKQorCQlqZnNfaXAtPm1vZGUyIHw9IEpGU19JTU1VVEFCTEVfRkw7CisJaWYgKGZsYWdzICYgU19BUFBFTkQpCisJCWpmc19pcC0+bW9kZTIgfD0gSkZTX0FQUEVORF9GTDsKKwlpZiAoZmxhZ3MgJiBTX05PQVRJTUUpCisJCWpmc19pcC0+bW9kZTIgfD0gSkZTX05PQVRJTUVfRkw7CisJaWYgKGZsYWdzICYgU19ESVJTWU5DKQorCQlqZnNfaXAtPm1vZGUyIHw9IEpGU19ESVJTWU5DX0ZMOworCWlmIChmbGFncyAmIFNfU1lOQykKKwkJamZzX2lwLT5tb2RlMiB8PSBKRlNfU1lOQ19GTDsKK30KKwogLyoKICAqIE5BTUU6CWlhbGxvYygpCiAgKgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbm9kZS5oIGIvZnMvamZzL2pmc19pbm9kZS5oCmluZGV4IDY4MDI4MzcuLjIzNzRiNTkgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfaW5vZGUuaAorKysgYi9mcy9qZnMvamZzX2lub2RlLmgKQEAgLTMxLDYgKzMxLDcgQEAKIGV4dGVybiB2b2lkIGpmc190cnVuY2F0ZV9ub2xvY2soc3RydWN0IGlub2RlICosIGxvZmZfdCk7CiBleHRlcm4gdm9pZCBqZnNfZnJlZV96ZXJvX2xpbmsoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmpmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CitleHRlcm4gdm9pZCBqZnNfZ2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBqZnNfaW5vZGVfaW5mbyAqKTsKIGV4dGVybiB2b2lkIGpmc19zZXRfaW5vZGVfZmxhZ3Moc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBqZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbG9jay5oIGIvZnMvamZzL2pmc19sb2NrLmgKaW5kZXggZGY0OGVjZS4uZWNmMDQ4OCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19sb2NrLmgKKysrIGIvZnMvamZzL2pmc19sb2NrLmgKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkJaW9fc2NoZWR1bGUoKTsJCQkJXAogCQlsb2NrX2NtZDsJCQkJXAogCX0JCQkJCQlcCi0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CQkJXAorCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsJCQlcCiAJcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsJCVwKIH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbG9nbWdyLmMgYi9mcy9qZnMvamZzX2xvZ21nci5jCmluZGV4IDUwNjViYWEuLjQ0YTJmMzMgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbG9nbWdyLmMKKysrIGIvZnMvamZzL2pmc19sb2dtZ3IuYwpAQCAtNjIsNyArNjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CQkvKiBmb3Igc3luY19ibG9ja2RldigpICovCkBAIC0xNTkwLDcgKzE1ODksNyBAQAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCUxPR0dDX1VOTE9DSyhsb2cpOwogCQlzY2hlZHVsZSgpOwotCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlMT0dHQ19MT0NLKGxvZyk7CiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZ0YXJnZXQtPmdjd2FpdCwgJl9fd2FpdCk7CiAJfQpAQCAtMTk2MSw3ICsxOTYwLDcgQEAKIC8qCiAgKiBOQU1FOglsYm1SZWRyaXZlCiAgKgotICogRlVOQ1RJT046CWFkZCBhIGxvZyBidWZmZXIgdG8gdGhlIHRoZSBsb2cgcmVkcml2ZSBsaXN0CisgKiBGVU5DVElPTjoJYWRkIGEgbG9nIGJ1ZmZlciB0byB0aGUgbG9nIHJlZHJpdmUgbGlzdAogICoKICAqIFBBUkFNRVRFUjoKICAqICAgICBicAktIGxvZyBidWZmZXIKQEAgLTIzNTQsMTQgKzIzNTMsMTUgQEAKIAkJCWxibVN0YXJ0SU8oYnApOwogCQkJc3Bpbl9sb2NrX2lycSgmbG9nX3JlZHJpdmVfbG9jayk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZsb2dfcmVkcml2ZV9sb2NrKTsKIAogCQlpZiAoZnJlZXppbmcoY3VycmVudCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbG9nX3JlZHJpdmVfbG9jayk7CiAJCQlyZWZyaWdlcmF0b3IoKTsKIAkJfSBlbHNlIHsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQlzcGluX3VubG9ja19pcnEoJmxvZ19yZWRyaXZlX2xvY2spOwogCQkJc2NoZWR1bGUoKTsKLQkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQl9CiAJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYwppbmRleCA2YjNhY2IwLi40M2Q0ZjY5IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX21ldGFwYWdlLmMKKysrIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCkBAIC0xODQsMTYgKzE4NCwxNCBAQAogewogCXN0cnVjdCBtZXRhcGFnZSAqbXAgPSAoc3RydWN0IG1ldGFwYWdlICopZm9vOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKSB7Ci0JCW1wLT5saWQgPSAwOwotCQltcC0+bHNuID0gMDsKLQkJbXAtPmZsYWcgPSAwOwotCQltcC0+ZGF0YSA9IE5VTEw7Ci0JCW1wLT5jbHNuID0gMDsKLQkJbXAtPmxvZyA9IE5VTEw7Ci0JCXNldF9iaXQoTUVUQV9mcmVlLCAmbXAtPmZsYWcpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtcC0+d2FpdCk7Ci0JfQorCW1wLT5saWQgPSAwOworCW1wLT5sc24gPSAwOworCW1wLT5mbGFnID0gMDsKKwltcC0+ZGF0YSA9IE5VTEw7CisJbXAtPmNsc24gPSAwOworCW1wLT5sb2cgPSBOVUxMOworCXNldF9iaXQoTUVUQV9mcmVlLCAmbXAtPmZsYWcpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1wLT53YWl0KTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmFsbG9jX21ldGFwYWdlKGdmcF90IGdmcF9tYXNrKQpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc190eG5tZ3IuYyBiL2ZzL2pmcy9qZnNfdHhubWdyLmMKaW5kZXggMDM4OTNhYy4uMjU0MzBkMCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc190eG5tZ3IuYworKysgYi9mcy9qZnMvamZzX3R4bm1nci5jCkBAIC00NCw3ICs0NCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMzYsNyArMTM1LDcgQEAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJVFhOX1VOTE9DSygpOwogCWlvX3NjaGVkdWxlKCk7Ci0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKGV2ZW50LCAmd2FpdCk7CiB9CiAKQEAgLTI3OTgsNyArMjc5Nyw3IEBACiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkJTEFaWV9VTkxPQ0soZmxhZ3MpOwogCQkJc2NoZWR1bGUoKTsKLQkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmpmc19jb21taXRfdGhyZWFkX3dhaXQsICZ3cSk7CiAJCX0KIAl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKQEAgLTI5OTAsNyArMjk4OSw3IEBACiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkJVFhOX1VOTE9DSygpOwogCQkJc2NoZWR1bGUoKTsKLQkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQl9CiAJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9zdXBlci5jIGIvZnMvamZzL3N1cGVyLmMKaW5kZXggZWE5ZGMzZS4uMjBlNGFjMSAxMDA2NDQKLS0tIGEvZnMvamZzL3N1cGVyLmMKKysrIGIvZnMvamZzL3N1cGVyLmMKQEAgLTc1MiwyMCArNzUyLDE4IEBACiB7CiAJc3RydWN0IGpmc19pbm9kZV9pbmZvICpqZnNfaXAgPSAoc3RydWN0IGpmc19pbm9kZV9pbmZvICopIGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikgewotCQltZW1zZXQoamZzX2lwLCAwLCBzaXplb2Yoc3RydWN0IGpmc19pbm9kZV9pbmZvKSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZqZnNfaXAtPmFub25faW5vZGVfbGlzdCk7Ci0JCWluaXRfcndzZW0oJmpmc19pcC0+cmR3cmxvY2spOwotCQltdXRleF9pbml0KCZqZnNfaXAtPmNvbW1pdF9tdXRleCk7Ci0JCWluaXRfcndzZW0oJmpmc19pcC0+eGF0dHJfc2VtKTsKLQkJc3Bpbl9sb2NrX2luaXQoJmpmc19pcC0+YWdfbG9jayk7Ci0JCWpmc19pcC0+YWN0aXZlX2FnID0gLTE7CisJbWVtc2V0KGpmc19pcCwgMCwgc2l6ZW9mKHN0cnVjdCBqZnNfaW5vZGVfaW5mbykpOworCUlOSVRfTElTVF9IRUFEKCZqZnNfaXAtPmFub25faW5vZGVfbGlzdCk7CisJaW5pdF9yd3NlbSgmamZzX2lwLT5yZHdybG9jayk7CisJbXV0ZXhfaW5pdCgmamZzX2lwLT5jb21taXRfbXV0ZXgpOworCWluaXRfcndzZW0oJmpmc19pcC0+eGF0dHJfc2VtKTsKKwlzcGluX2xvY2tfaW5pdCgmamZzX2lwLT5hZ19sb2NrKTsKKwlqZnNfaXAtPmFjdGl2ZV9hZyA9IC0xOwogI2lmZGVmIENPTkZJR19KRlNfUE9TSVhfQUNMCi0JCWpmc19pcC0+aV9hY2wgPSBKRlNfQUNMX05PVF9DQUNIRUQ7Ci0JCWpmc19pcC0+aV9kZWZhdWx0X2FjbCA9IEpGU19BQ0xfTk9UX0NBQ0hFRDsKKwlqZnNfaXAtPmlfYWNsID0gSkZTX0FDTF9OT1RfQ0FDSEVEOworCWpmc19pcC0+aV9kZWZhdWx0X2FjbCA9IEpGU19BQ0xfTk9UX0NBQ0hFRDsKICNlbmRpZgotCQlpbm9kZV9pbml0X29uY2UoJmpmc19pcC0+dmZzX2lub2RlKTsKLQl9CisJaW5vZGVfaW5pdF9vbmNlKCZqZnNfaXAtPnZmc19pbm9kZSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfamZzX2ZzKHZvaWQpCmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuYwppbmRleCBkOTM4NDJkLi41Mjk0ZGUxIDEwMDY0NAotLS0gYS9mcy9saWJmcy5jCisrKyBiL2ZzL2xpYmZzLmMKQEAgLTE1OSw3ICsxNTksMTAgQEAKIAkJCQkJY29udGludWU7CiAKIAkJCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCQkJCWlmIChmaWxsZGlyKGRpcmVudCwgbmV4dC0+ZF9uYW1lLm5hbWUsIG5leHQtPmRfbmFtZS5sZW4sIGZpbHAtPmZfcG9zLCBuZXh0LT5kX2lub2RlLT5pX2lubywgZHRfdHlwZShuZXh0LT5kX2lub2RlKSkgPCAwKQorCQkJCWlmIChmaWxsZGlyKGRpcmVudCwgbmV4dC0+ZF9uYW1lLm5hbWUsIAorCQkJCQkgICAgbmV4dC0+ZF9uYW1lLmxlbiwgZmlscC0+Zl9wb3MsIAorCQkJCQkgICAgbmV4dC0+ZF9pbm9kZS0+aV9pbm8sIAorCQkJCQkgICAgZHRfdHlwZShuZXh0LT5kX2lub2RlKSkgPCAwKQogCQkJCQlyZXR1cm4gMDsKIAkJCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAkJCQkvKiBuZXh0IGlzIHN0aWxsIGFsaXZlICovCkBAIC0yMjAsNiArMjIzLDEyIEBACiAJcm9vdCA9IG5ld19pbm9kZShzKTsKIAlpZiAoIXJvb3QpCiAJCWdvdG8gRW5vbWVtOworCS8qCisJICogc2luY2UgdGhpcyBpcyB0aGUgZmlyc3QgaW5vZGUsIG1ha2UgaXQgbnVtYmVyIDEuIE5ldyBpbm9kZXMgY3JlYXRlZAorCSAqIGFmdGVyIHRoaXMgbXVzdCB0YWtlIGNhcmUgbm90IHRvIGNvbGxpZGUgd2l0aCBpdCAoYnkgcGFzc2luZworCSAqIG1heF9yZXNlcnZlZCBvZiAxIHRvIGl1bmlxdWUpLgorCSAqLworCXJvb3QtPmlfaW5vID0gMTsKIAlyb290LT5pX21vZGUgPSBTX0lGRElSIHwgU19JUlVTUiB8IFNfSVdVU1I7CiAJcm9vdC0+aV91aWQgPSByb290LT5pX2dpZCA9IDA7CiAJcm9vdC0+aV9hdGltZSA9IHJvb3QtPmlfbXRpbWUgPSByb290LT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwpAQCAtMzYwLDYgKzM2OSwxMSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogdGhlIGlub2RlcyBjcmVhdGVkIGhlcmUgYXJlIG5vdCBoYXNoZWQuIElmIHlvdSB1c2UgaXVuaXF1ZSB0byBnZW5lcmF0ZQorICogdW5pcXVlIGlub2RlIHZhbHVlcyBsYXRlciBmb3IgdGhpcyBmaWxlc3lzdGVtLCB0aGVuIHlvdSBtdXN0IHRha2UgY2FyZQorICogdG8gcGFzcyBpdCBhbiBhcHByb3ByaWF0ZSBtYXhfcmVzZXJ2ZWQgdmFsdWUgdG8gYXZvaWQgY29sbGlzaW9ucy4KKyAqLwogaW50IHNpbXBsZV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50IG1hZ2ljLCBzdHJ1Y3QgdHJlZV9kZXNjciAqZmlsZXMpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTM3Niw2ICszOTAsMTEgQEAKIAlpbm9kZSA9IG5ld19pbm9kZShzKTsKIAlpZiAoIWlub2RlKQogCQlyZXR1cm4gLUVOT01FTTsKKwkvKgorCSAqIGJlY2F1c2UgdGhlIHJvb3QgaW5vZGUgaXMgMSwgdGhlIGZpbGVzIGFycmF5IG11c3Qgbm90IGNvbnRhaW4gYW4KKwkgKiBlbnRyeSBhdCBpbmRleCAxCisJICovCisJaW5vZGUtPmlfaW5vID0gMTsKIAlpbm9kZS0+aV9tb2RlID0gU19JRkRJUiB8IDA3NTU7CiAJaW5vZGUtPmlfdWlkID0gaW5vZGUtPmlfZ2lkID0gMDsKIAlpbm9kZS0+aV9ibG9ja3MgPSAwOwpAQCAtMzkxLDYgKzQxMCwxMyBAQAogCWZvciAoaSA9IDA7ICFmaWxlcy0+bmFtZSB8fCBmaWxlcy0+bmFtZVswXTsgaSsrLCBmaWxlcysrKSB7CiAJCWlmICghZmlsZXMtPm5hbWUpCiAJCQljb250aW51ZTsKKworCQkvKiB3YXJuIGlmIGl0IHRyaWVzIHRvIGNvbmZsaWN0IHdpdGggdGhlIHJvb3QgaW5vZGUgKi8KKwkJaWYgKHVubGlrZWx5KGkgPT0gMSkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMgcGFzc2VkIGluIGEgZmlsZXMgYXJyYXkiCisJCQkJIndpdGggYW4gaW5kZXggb2YgMSFcbiIsIF9fZnVuY19fLAorCQkJCXMtPnNfdHlwZS0+bmFtZSk7CisKIAkJZGVudHJ5ID0gZF9hbGxvY19uYW1lKHJvb3QsIGZpbGVzLT5uYW1lKTsKIAkJaWYgKCFkZW50cnkpCiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2NsbnRsb2NrLmMgYi9mcy9sb2NrZC9jbG50bG9jay5jCmluZGV4IGY0ZDQ1ZDQuLmQwNzBiMTggMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL2NsbnRsb2NrLmMKKysrIGIvZnMvbG9ja2QvY2xudGxvY2suYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJaWYgKCFob3N0LT5oX3JlY2xhaW1pbmcrKykgewogCQlubG1fZ2V0X2hvc3QoaG9zdCk7CiAJCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7Ci0JCWlmIChrZXJuZWxfdGhyZWFkKHJlY2xhaW1lciwgaG9zdCwgQ0xPTkVfS0VSTkVMKSA8IDApCisJCWlmIChrZXJuZWxfdGhyZWFkKHJlY2xhaW1lciwgaG9zdCwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUykgPCAwKQogCQkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvY2xudHByb2MuYyBiL2ZzL2xvY2tkL2NsbnRwcm9jLmMKaW5kZXggYTVjMDE5ZS4uYTEwMzQzYiAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvY2xudHByb2MuYworKysgYi9mcy9sb2NrZC9jbG50cHJvYy5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9ob3N0LmMgYi9mcy9sb2NrZC9ob3N0LmMKaW5kZXggYWQyMWMwNy4uOTYwNzBiZiAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvaG9zdC5jCisrKyBiL2ZzL2xvY2tkL2hvc3QuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJCQkJCWhvc3QtPmhfbmV4dHJlYmluZCAtIGppZmZpZXMpOwogCQl9CiAJfSBlbHNlIHsKLQkJdW5zaWduZWQgbG9uZyBpbmNyZW1lbnQgPSBubG1zdmNfdGltZW91dCAqIEhaOworCQl1bnNpZ25lZCBsb25nIGluY3JlbWVudCA9IG5sbXN2Y190aW1lb3V0OwogCQlzdHJ1Y3QgcnBjX3RpbWVvdXQgdGltZXBhcm1zID0gewogCQkJLnRvX2luaXR2YWwJPSBpbmNyZW1lbnQsCiAJCQkudG9faW5jcmVtZW50CT0gaW5jcmVtZW50LApkaWZmIC0tZ2l0IGEvZnMvbG9ja2QveGRyLmMgYi9mcy9sb2NrZC94ZHIuYwppbmRleCA5NzAyOTU2Li41MzE2ZTMwIDEwMDY0NAotLS0gYS9mcy9sb2NrZC94ZHIuYworKysgYi9mcy9sb2NrZC94ZHIuYwpAQCAtNTg2LDEwICs1ODYsNiBAQAogCQkucHJvY3MJCT0gbmxtX3Byb2NlZHVyZXMsCiB9OwogCi0jaWZkZWYgCUNPTkZJR19MT0NLRF9WNAotZXh0ZXJuIHN0cnVjdCBycGNfdmVyc2lvbiBubG1fdmVyc2lvbjQ7Ci0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCBycGNfdmVyc2lvbiAqCW5sbV92ZXJzaW9uc1tdID0gewogCVsxXSA9ICZubG1fdmVyc2lvbjEsCiAJWzNdID0gJm5sbV92ZXJzaW9uMywKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3hkcjQuYyBiL2ZzL2xvY2tkL3hkcjQuYwppbmRleCBjZTFlZmRiLi44NDZmYzFkIDEwMDY0NAotLS0gYS9mcy9sb2NrZC94ZHI0LmMKKysrIGIvZnMvbG9ja2QveGRyNC5jCkBAIC0xMjMsNyArMTIzLDggQEAKIG5sbTRfZGVjb2RlX2xvY2soX19iZTMyICpwLCBzdHJ1Y3QgbmxtX2xvY2sgKmxvY2spCiB7CiAJc3RydWN0IGZpbGVfbG9jawkqZmwgPSAmbG9jay0+Zmw7Ci0JX19zNjQJCQlsZW4sIHN0YXJ0LCBlbmQ7CisJX191NjQJCQlsZW4sIHN0YXJ0OworCV9fczY0CQkJZW5kOwogCiAJaWYgKCEocCA9IHhkcl9kZWNvZGVfc3RyaW5nX2lucGxhY2UocCwgJmxvY2stPmNhbGxlciwKIAkJCQkJICAgICZsb2NrLT5sZW4sIE5MTV9NQVhTVFJMRU4pKQpAQCAtNDE3LDcgKzQxOCw4IEBACiAJaWYgKHJlc3AtPnN0YXR1cyA9PSBubG1fbGNrX2RlbmllZCkgewogCQlzdHJ1Y3QgZmlsZV9sb2NrCSpmbCA9ICZyZXNwLT5sb2NrLmZsOwogCQl1MzIJCQlleGNsOwotCQlzNjQJCQlzdGFydCwgZW5kLCBsZW47CisJCV9fdTY0CQkJc3RhcnQsIGxlbjsKKwkJX19zNjQJCQllbmQ7CiAKIAkJbWVtc2V0KCZyZXNwLT5sb2NrLCAwLCBzaXplb2YocmVzcC0+bG9jaykpOwogCQlsb2Nrc19pbml0X2xvY2soZmwpOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggNjcxYTAzNC4uNDMxYThiOCAxMDA2NDQKLS0tIGEvZnMvbG9ja3MuYworKysgYi9mcy9sb2Nrcy5jCkBAIC0yMDMsOSArMjAzLDYgQEAKIHsKIAlzdHJ1Y3QgZmlsZV9sb2NrICpsb2NrID0gKHN0cnVjdCBmaWxlX2xvY2sgKikgZm9vOwogCi0JaWYgKCEoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpKQotCQlyZXR1cm47Ci0KIAlsb2Nrc19pbml0X2xvY2sobG9jayk7CiB9CiAKQEAgLTY2OSw3ICs2NjYsNiBAQAogewogCXN0cnVjdCBmaWxlX2xvY2sgKmNmbDsKIAotCWZsLT5mbF90eXBlID0gRl9VTkxDSzsKIAlsb2NrX2tlcm5lbCgpOwogCWZvciAoY2ZsID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9mbG9jazsgY2ZsOyBjZmwgPSBjZmwtPmZsX25leHQpIHsKIAkJaWYgKCFJU19QT1NJWChjZmwpKQpAQCAtNjgxLDcgKzY3Nyw4IEBACiAJCV9fbG9ja3NfY29weV9sb2NrKGZsLCBjZmwpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAxOwotCX0KKwl9IGVsc2UKKwkJZmwtPmZsX3R5cGUgPSBGX1VOTENLOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MzIsNiArMTYyOSw3IEBACiAJZmxvY2stPmxfbGVuID0gZmwtPmZsX2VuZCA9PSBPRkZTRVRfTUFYID8gMCA6CiAJCWZsLT5mbF9lbmQgLSBmbC0+Zmxfc3RhcnQgKyAxOwogCWZsb2NrLT5sX3doZW5jZSA9IDA7CisJZmxvY2stPmxfdHlwZSA9IGZsLT5mbF90eXBlOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9taW5peC9iaXRtYXAuYyBiL2ZzL21pbml4L2JpdG1hcC5jCmluZGV4IGM0YTU1NGQuLjk5YTEyZjEgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2JpdG1hcC5jCisrKyBiL2ZzL21pbml4L2JpdG1hcC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIHN0YXRpYyBpbnQgbmliYmxlbWFwW10gPSB7IDQsMywzLDIsMywyLDIsMSwzLDIsMiwxLDIsMSwxLDAgfTsKIApkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmMKaW5kZXggMmY0ZDQzYS4uYmU0MDQ0NiAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaW5vZGUuYworKysgYi9mcy9taW5peC9pbm9kZS5jCkBAIC03Myw4ICs3Myw3IEBACiB7CiAJc3RydWN0IG1pbml4X2lub2RlX2luZm8gKmVpID0gKHN0cnVjdCBtaW5peF9pbm9kZV9pbmZvICopIGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKLQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogIAogc3RhdGljIGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL21wYWdlLmMgYi9mcy9tcGFnZS5jCmluZGV4IDY5MmEzZTUuLmMxNjk4ZjIgMTAwNjQ0Ci0tLSBhL2ZzL21wYWdlLmMKKysrIGIvZnMvbXBhZ2UuYwpAQCAtMjg0LDExICsyODQsOSBAQAogCX0KIAogCWlmIChmaXJzdF9ob2xlICE9IGJsb2Nrc19wZXJfcGFnZSkgewotCQljaGFyICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQkJbWVtc2V0KGthZGRyICsgKGZpcnN0X2hvbGUgPDwgYmxrYml0cyksIDAsCi0JCQkJUEFHRV9DQUNIRV9TSVpFIC0gKGZpcnN0X2hvbGUgPDwgYmxrYml0cykpOwotCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCBmaXJzdF9ob2xlIDw8IGJsa2JpdHMsCisJCQkJUEFHRV9DQUNIRV9TSVpFIC0gKGZpcnN0X2hvbGUgPDwgYmxrYml0cyksCisJCQkJS01fVVNFUjApOwogCQlpZiAoZmlyc3RfaG9sZSA9PSAwKSB7CiAJCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKQEAgLTQ1NiwxMSArNDU0LDE4IEBACiAgKiB3cml0dGVuLCBzbyBpdCBjYW4gaW50ZWxsaWdlbnRseSBhbGxvY2F0ZSBhIHN1aXRhYmx5LXNpemVkIEJJTy4gIEZvciBub3csCiAgKiBqdXN0IGFsbG9jYXRlIGZ1bGwtc2l6ZSAoMTYtcGFnZSkgQklPcy4KICAqLwotc3RhdGljIHN0cnVjdCBiaW8gKgotX19tcGFnZV93cml0ZXBhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrLAotCXNlY3Rvcl90ICpsYXN0X2Jsb2NrX2luX2JpbywgaW50ICpyZXQsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLAotCXdyaXRlcGFnZV90IHdyaXRlcGFnZV9mbikKK3N0cnVjdCBtcGFnZV9kYXRhIHsKKwlzdHJ1Y3QgYmlvICpiaW87CisJc2VjdG9yX3QgbGFzdF9ibG9ja19pbl9iaW87CisJZ2V0X2Jsb2NrX3QgKmdldF9ibG9jazsKKwl1bnNpZ25lZCB1c2Vfd3JpdGVwYWdlOworfTsKKworc3RhdGljIGludCBfX21wYWdlX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCisJCQkgICAgIHZvaWQgKmRhdGEpCiB7CisJc3RydWN0IG1wYWdlX2RhdGEgKm1wZCA9IGRhdGE7CisJc3RydWN0IGJpbyAqYmlvID0gbXBkLT5iaW87CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCWNvbnN0IHVuc2lnbmVkIGJsa2JpdHMgPSBpbm9kZS0+aV9ibGtiaXRzOwpAQCAtNDc4LDYgKzQ4Myw3IEBACiAJaW50IGxlbmd0aDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgbWFwX2JoOwogCWxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJaW50IHJldCA9IDA7CiAKIAlpZiAocGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgewogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CkBAIC01NDAsNyArNTQ2LDcgQEAKIAogCQltYXBfYmguYl9zdGF0ZSA9IDA7CiAJCW1hcF9iaC5iX3NpemUgPSAxIDw8IGJsa2JpdHM7Ci0JCWlmIChnZXRfYmxvY2soaW5vZGUsIGJsb2NrX2luX2ZpbGUsICZtYXBfYmgsIDEpKQorCQlpZiAobXBkLT5nZXRfYmxvY2soaW5vZGUsIGJsb2NrX2luX2ZpbGUsICZtYXBfYmgsIDEpKQogCQkJZ290byBjb25mdXNlZDsKIAkJaWYgKGJ1ZmZlcl9uZXcoJm1hcF9iaCkpCiAJCQl1bm1hcF91bmRlcmx5aW5nX21ldGFkYXRhKG1hcF9iaC5iX2JkZXYsCkBAIC01NzYsMjAgKzU4MiwxNyBAQAogCQkgKiB3cml0dGVuIG91dCB0byB0aGUgZmlsZS4iCiAJCSAqLwogCQl1bnNpZ25lZCBvZmZzZXQgPSBpX3NpemUgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7Ci0JCWNoYXIgKmthZGRyOwogCiAJCWlmIChwYWdlLT5pbmRleCA+IGVuZF9pbmRleCB8fCAhb2Zmc2V0KQogCQkJZ290byBjb25mdXNlZDsKLQkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCW1lbXNldChrYWRkciArIG9mZnNldCwgMCwgUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0KTsKLQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Ci0JCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwkJemVyb191c2VyX3BhZ2UocGFnZSwgb2Zmc2V0LCBQQUdFX0NBQ0hFX1NJWkUgLSBvZmZzZXQsCisJCQkJS01fVVNFUjApOwogCX0KIAogCS8qCiAJICogVGhpcyBwYWdlIHdpbGwgZ28gdG8gQklPLiAgRG8gd2UgbmVlZCB0byBzZW5kIHRoaXMgQklPIG9mZiBmaXJzdD8KIAkgKi8KLQlpZiAoYmlvICYmICpsYXN0X2Jsb2NrX2luX2JpbyAhPSBibG9ja3NbMF0gLSAxKQorCWlmIChiaW8gJiYgbXBkLT5sYXN0X2Jsb2NrX2luX2JpbyAhPSBibG9ja3NbMF0gLSAxKQogCQliaW8gPSBtcGFnZV9iaW9fc3VibWl0KFdSSVRFLCBiaW8pOwogCiBhbGxvY19uZXc6CkBAIC02NDYsNyArNjQ5LDcgQEAKIAkJCQkJYm91bmRhcnlfYmxvY2ssIDEgPDwgYmxrYml0cyk7CiAJCX0KIAl9IGVsc2UgewotCQkqbGFzdF9ibG9ja19pbl9iaW8gPSBibG9ja3NbYmxvY2tzX3Blcl9wYWdlIC0gMV07CisJCW1wZC0+bGFzdF9ibG9ja19pbl9iaW8gPSBibG9ja3NbYmxvY2tzX3Blcl9wYWdlIC0gMV07CiAJfQogCWdvdG8gb3V0OwogCkBAIC02NTQsMjMgKzY1NywxOSBAQAogCWlmIChiaW8pCiAJCWJpbyA9IG1wYWdlX2Jpb19zdWJtaXQoV1JJVEUsIGJpbyk7CiAKLQlpZiAod3JpdGVwYWdlX2ZuKSB7Ci0JCSpyZXQgPSAoKndyaXRlcGFnZV9mbikocGFnZSwgd2JjKTsKKwlpZiAobXBkLT51c2Vfd3JpdGVwYWdlKSB7CisJCXJldCA9IG1hcHBpbmctPmFfb3BzLT53cml0ZXBhZ2UocGFnZSwgd2JjKTsKIAl9IGVsc2UgewotCQkqcmV0ID0gLUVBR0FJTjsKKwkJcmV0ID0gLUVBR0FJTjsKIAkJZ290byBvdXQ7CiAJfQogCS8qCiAJICogVGhlIGNhbGxlciBoYXMgYSByZWYgb24gdGhlIGlub2RlLCBzbyAqbWFwcGluZyBpcyBzdGFibGUKIAkgKi8KLQlpZiAoKnJldCkgewotCQlpZiAoKnJldCA9PSAtRU5PU1BDKQotCQkJc2V0X2JpdChBU19FTk9TUEMsICZtYXBwaW5nLT5mbGFncyk7Ci0JCWVsc2UKLQkJCXNldF9iaXQoQVNfRUlPLCAmbWFwcGluZy0+ZmxhZ3MpOwotCX0KKwltYXBwaW5nX3NldF9lcnJvcihtYXBwaW5nLCByZXQpOwogb3V0OgotCXJldHVybiBiaW87CisJbXBkLT5iaW8gPSBiaW87CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC02OTMsMTI3ICs2OTIsMjcgQEAKICAqIHRoZSBjYWxsIHdhcyBtYWRlIGdldCBuZXcgSS9PIHN0YXJ0ZWQgYWdhaW5zdCB0aGVtLiAgSWYgd2JjLT5zeW5jX21vZGUgaXMKICAqIFdCX1NZTkNfQUxMIHRoZW4gd2Ugd2VyZSBjYWxsZWQgZm9yIGRhdGEgaW50ZWdyaXR5IGFuZCB3ZSBtdXN0IHdhaXQgZm9yCiAgKiBleGlzdGluZyBJTyB0byBjb21wbGV0ZS4KLSAqCi0gKiBJZiB5b3UgZml4IHRoaXMgeW91IHNob3VsZCBjaGVjayBnZW5lcmljX3dyaXRlcGFnZXMoKSBhbHNvIQogICovCiBpbnQKIG1wYWdlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spCiB7Ci0Jc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87Ci0Jc3RydWN0IGJpbyAqYmlvID0gTlVMTDsKLQlzZWN0b3JfdCBsYXN0X2Jsb2NrX2luX2JpbyA9IDA7Ci0JaW50IHJldCA9IDA7Ci0JaW50IGRvbmUgPSAwOwotCWludCAoKndyaXRlcGFnZSkoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKLQlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwotCWludCBucl9wYWdlczsKLQlwZ29mZl90IGluZGV4OwotCXBnb2ZmX3QgZW5kOwkJLyogSW5jbHVzaXZlICovCi0JaW50IHNjYW5uZWQgPSAwOwotCWludCByYW5nZV93aG9sZSA9IDA7CisJaW50IHJldDsKIAotCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgewotCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOwotCQlyZXR1cm4gMDsKKwlpZiAoIWdldF9ibG9jaykKKwkJcmV0ID0gZ2VuZXJpY193cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYyk7CisJZWxzZSB7CisJCXN0cnVjdCBtcGFnZV9kYXRhIG1wZCA9IHsKKwkJCS5iaW8gPSBOVUxMLAorCQkJLmxhc3RfYmxvY2tfaW5fYmlvID0gMCwKKwkJCS5nZXRfYmxvY2sgPSBnZXRfYmxvY2ssCisJCQkudXNlX3dyaXRlcGFnZSA9IDEsCisJCX07CisKKwkJcmV0ID0gd3JpdGVfY2FjaGVfcGFnZXMobWFwcGluZywgd2JjLCBfX21wYWdlX3dyaXRlcGFnZSwgJm1wZCk7CisJCWlmIChtcGQuYmlvKQorCQkJbXBhZ2VfYmlvX3N1Ym1pdChXUklURSwgbXBkLmJpbyk7CiAJfQotCi0Jd3JpdGVwYWdlID0gTlVMTDsKLQlpZiAoZ2V0X2Jsb2NrID09IE5VTEwpCi0JCXdyaXRlcGFnZSA9IG1hcHBpbmctPmFfb3BzLT53cml0ZXBhZ2U7Ci0KLQlwYWdldmVjX2luaXQoJnB2ZWMsIDApOwotCWlmICh3YmMtPnJhbmdlX2N5Y2xpYykgewotCQlpbmRleCA9IG1hcHBpbmctPndyaXRlYmFja19pbmRleDsgLyogU3RhcnQgZnJvbSBwcmV2IG9mZnNldCAqLwotCQllbmQgPSAtMTsKLQl9IGVsc2UgewotCQlpbmRleCA9IHdiYy0+cmFuZ2Vfc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQkJZW5kID0gd2JjLT5yYW5nZV9lbmQgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQkJaWYgKHdiYy0+cmFuZ2Vfc3RhcnQgPT0gMCAmJiB3YmMtPnJhbmdlX2VuZCA9PSBMTE9OR19NQVgpCi0JCQlyYW5nZV93aG9sZSA9IDE7Ci0JCXNjYW5uZWQgPSAxOwotCX0KLXJldHJ5OgotCXdoaWxlICghZG9uZSAmJiAoaW5kZXggPD0gZW5kKSAmJgotCQkJKG5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXBfdGFnKCZwdmVjLCBtYXBwaW5nLCAmaW5kZXgsCi0JCQlQQUdFQ0FDSEVfVEFHX0RJUlRZLAotCQkJbWluKGVuZCAtIGluZGV4LCAocGdvZmZfdClQQUdFVkVDX1NJWkUtMSkgKyAxKSkpIHsKLQkJdW5zaWduZWQgaTsKLQotCQlzY2FubmVkID0gMTsKLQkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKLQotCQkJLyoKLQkJCSAqIEF0IHRoaXMgcG9pbnQgd2UgaG9sZCBuZWl0aGVyIG1hcHBpbmctPnRyZWVfbG9jayBub3IKLQkJCSAqIGxvY2sgb24gdGhlIHBhZ2UgaXRzZWxmOiB0aGUgcGFnZSBtYXkgYmUgdHJ1bmNhdGVkIG9yCi0JCQkgKiBpbnZhbGlkYXRlZCAoY2hhbmdpbmcgcGFnZS0+bWFwcGluZyB0byBOVUxMKSwgb3IgZXZlbgotCQkJICogc3dpenpsZWQgYmFjayBmcm9tIHN3YXBwZXJfc3BhY2UgdG8gdG1wZnMgZmlsZQotCQkJICogbWFwcGluZwotCQkJICovCi0KLQkJCWxvY2tfcGFnZShwYWdlKTsKLQotCQkJaWYgKHVubGlrZWx5KHBhZ2UtPm1hcHBpbmcgIT0gbWFwcGluZykpIHsKLQkJCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKCF3YmMtPnJhbmdlX2N5Y2xpYyAmJiBwYWdlLT5pbmRleCA+IGVuZCkgewotCQkJCWRvbmUgPSAxOwotCQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAod2JjLT5zeW5jX21vZGUgIT0gV0JfU1lOQ19OT05FKQotCQkJCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7Ci0KLQkJCWlmIChQYWdlV3JpdGViYWNrKHBhZ2UpIHx8Ci0JCQkJCSFjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwYWdlKSkgewotCQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAod3JpdGVwYWdlKSB7Ci0JCQkJcmV0ID0gKCp3cml0ZXBhZ2UpKHBhZ2UsIHdiYyk7Ci0JCQkJaWYgKHJldCkgewotCQkJCQlpZiAocmV0ID09IC1FTk9TUEMpCi0JCQkJCQlzZXRfYml0KEFTX0VOT1NQQywKLQkJCQkJCQkmbWFwcGluZy0+ZmxhZ3MpOwotCQkJCQllbHNlCi0JCQkJCQlzZXRfYml0KEFTX0VJTywKLQkJCQkJCQkmbWFwcGluZy0+ZmxhZ3MpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJYmlvID0gX19tcGFnZV93cml0ZXBhZ2UoYmlvLCBwYWdlLCBnZXRfYmxvY2ssCi0JCQkJCQkmbGFzdF9ibG9ja19pbl9iaW8sICZyZXQsIHdiYywKLQkJCQkJCXBhZ2UtPm1hcHBpbmctPmFfb3BzLT53cml0ZXBhZ2UpOwotCQkJfQotCQkJaWYgKHVubGlrZWx5KHJldCA9PSBBT1BfV1JJVEVQQUdFX0FDVElWQVRFKSkKLQkJCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJCWlmIChyZXQgfHwgKC0tKHdiYy0+bnJfdG9fd3JpdGUpIDw9IDApKQotCQkJCWRvbmUgPSAxOwotCQkJaWYgKHdiYy0+bm9uYmxvY2tpbmcgJiYgYmRpX3dyaXRlX2Nvbmdlc3RlZChiZGkpKSB7Ci0JCQkJd2JjLT5lbmNvdW50ZXJlZF9jb25nZXN0aW9uID0gMTsKLQkJCQlkb25lID0gMTsKLQkJCX0KLQkJfQotCQlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOwotCQljb25kX3Jlc2NoZWQoKTsKLQl9Ci0JaWYgKCFzY2FubmVkICYmICFkb25lKSB7Ci0JCS8qCi0JCSAqIFdlIGhpdCB0aGUgbGFzdCBwYWdlIGFuZCB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gYmUgZG9uZTogd3JhcAotCQkgKiBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsZQotCQkgKi8KLQkJc2Nhbm5lZCA9IDE7Ci0JCWluZGV4ID0gMDsKLQkJZ290byByZXRyeTsKLQl9Ci0JaWYgKHdiYy0+cmFuZ2VfY3ljbGljIHx8IChyYW5nZV93aG9sZSAmJiB3YmMtPm5yX3RvX3dyaXRlID4gMCkpCi0JCW1hcHBpbmctPndyaXRlYmFja19pbmRleCA9IGluZGV4OwotCWlmIChiaW8pCi0JCW1wYWdlX2Jpb19zdWJtaXQoV1JJVEUsIGJpbyk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wobXBhZ2Vfd3JpdGVwYWdlcyk7CkBAIC04MjEsMTUgKzcyMCwxNSBAQAogaW50IG1wYWdlX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrLAogCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewotCWludCByZXQgPSAwOwotCXN0cnVjdCBiaW8gKmJpbzsKLQlzZWN0b3JfdCBsYXN0X2Jsb2NrX2luX2JpbyA9IDA7Ci0KLQliaW8gPSBfX21wYWdlX3dyaXRlcGFnZShOVUxMLCBwYWdlLCBnZXRfYmxvY2ssCi0JCQkmbGFzdF9ibG9ja19pbl9iaW8sICZyZXQsIHdiYywgTlVMTCk7Ci0JaWYgKGJpbykKLQkJbXBhZ2VfYmlvX3N1Ym1pdChXUklURSwgYmlvKTsKLQorCXN0cnVjdCBtcGFnZV9kYXRhIG1wZCA9IHsKKwkJLmJpbyA9IE5VTEwsCisJCS5sYXN0X2Jsb2NrX2luX2JpbyA9IDAsCisJCS5nZXRfYmxvY2sgPSBnZXRfYmxvY2ssCisJCS51c2Vfd3JpdGVwYWdlID0gMCwKKwl9OworCWludCByZXQgPSBfX21wYWdlX3dyaXRlcGFnZShwYWdlLCB3YmMsICZtcGQpOworCWlmIChtcGQuYmlvKQorCQltcGFnZV9iaW9fc3VibWl0KFdSSVRFLCBtcGQuYmlvKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChtcGFnZV93cml0ZXBhZ2UpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggOTRiMmY2MC4uNWUyZDk4ZCAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgpAQCAtMTE1MywxNCArMTE1MiwxMiBAQAogCiAJCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOwogCX0KLQljdXJyZW50LT50b3RhbF9saW5rX2NvdW50ID0gMDsKLQlyZXR2YWwgPSBsaW5rX3BhdGhfd2FsayhuYW1lLCBuZCk7CisKKwlyZXR2YWwgPSBwYXRoX3dhbGsobmFtZSwgbmQpOwogb3V0OgotCWlmIChsaWtlbHkocmV0dmFsID09IDApKSB7Ci0JCWlmICh1bmxpa2VseSghYXVkaXRfZHVtbXlfY29udGV4dCgpICYmIG5kICYmIG5kLT5kZW50cnkgJiYKKwlpZiAodW5saWtlbHkoIXJldHZhbCAmJiAhYXVkaXRfZHVtbXlfY29udGV4dCgpICYmIG5kLT5kZW50cnkgJiYKIAkJCQluZC0+ZGVudHJ5LT5kX2lub2RlKSkKIAkJYXVkaXRfaW5vZGUobmFtZSwgbmQtPmRlbnRyeS0+ZF9pbm9kZSk7Ci0JfQogb3V0X2ZhaWw6CiAJcmV0dXJuIHJldHZhbDsKIApAQCAtMTM1MCwxNyArMTM0Nyw2IEBACiAJcmV0dXJuIF9fbG9va3VwX2hhc2hfa2VybigmdGhpcywgYmFzZSwgTlVMTCk7CiB9CiAKLS8qCi0gKgluYW1laSgpCi0gKgotICogaXMgdXNlZCBieSBtb3N0IHNpbXBsZSBjb21tYW5kcyB0byBnZXQgdGhlIGlub2RlIG9mIGEgc3BlY2lmaWVkIG5hbWUuCi0gKiBPcGVuLCBsaW5rIGV0YyB1c2UgdGhlaXIgb3duIHJvdXRpbmVzLCBidXQgdGhpcyBpcyBlbm91Z2ggZm9yIHRoaW5ncwotICogbGlrZSAnY2htb2QnIGV0Yy4KLSAqCi0gKiBuYW1laSBleGlzdHMgaW4gdHdvIHZlcnNpb25zOiBuYW1laS9sbmFtZWkuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMKLSAqIHRoYXQgbmFtZWkgZm9sbG93cyBsaW5rcywgd2hpbGUgbG5hbWVpIGRvZXMgbm90LgotICogU01QLXNhZmUKLSAqLwogaW50IGZhc3RjYWxsIF9fdXNlcl93YWxrX2ZkKGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpuYW1lLCB1bnNpZ25lZCBmbGFncywKIAkJCSAgICBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKQEAgLTE3MzMsNyArMTcxOSw3IEBACiAJICogSXQgYWxyZWFkeSBleGlzdHMuCiAJICovCiAJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwotCWF1ZGl0X2lub2RlX3VwZGF0ZShwYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJYXVkaXRfaW5vZGUocGF0aG5hbWUsIHBhdGguZGVudHJ5LT5kX2lub2RlKTsKIAogCWVycm9yID0gLUVFWElTVDsKIAlpZiAoZmxhZyAmIE9fRVhDTCkKZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggZmQ5OTljYS4uYjY5NmUzYSAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTM3Nyw2ICszNzcsMTAgQEAKIAlzZXFfcGF0aChtLCBtbnQsIG1udC0+bW50X3Jvb3QsICIgXHRcblxcIik7CiAJc2VxX3B1dGMobSwgJyAnKTsKIAltYW5nbGUobSwgbW50LT5tbnRfc2ItPnNfdHlwZS0+bmFtZSk7CisJaWYgKG1udC0+bW50X3NiLT5zX3N1YnR5cGUgJiYgbW50LT5tbnRfc2ItPnNfc3VidHlwZVswXSkgeworCQlzZXFfcHV0YyhtLCAnLicpOworCQltYW5nbGUobSwgbW50LT5tbnRfc2ItPnNfc3VidHlwZSk7CisJfQogCXNlcV9wdXRzKG0sIG1udC0+bW50X3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZID8gIiBybyIgOiAiIHJ3Iik7CiAJZm9yIChmc19pbmZvcCA9IGZzX2luZm87IGZzX2luZm9wLT5mbGFnOyBmc19pbmZvcCsrKSB7CiAJCWlmIChtbnQtPm1udF9zYi0+c19mbGFncyAmIGZzX2luZm9wLT5mbGFnKQpAQCAtNDk1LDcgKzQ5OSw3IEBACiB7CiAJc3RydWN0IHZmc21vdW50ICptbnQ7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7Ci0JCW1udCA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IHZmc21vdW50LCBtbnRfaGFzaCk7CisJCW1udCA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IHZmc21vdW50LCBtbnRfaGFzaCk7CiAJCWxpc3RfZGVsX2luaXQoJm1udC0+bW50X2hhc2gpOwogCQlpZiAobW50LT5tbnRfcGFyZW50ICE9IG1udCkgewogCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwpAQCAtODgyLDYgKzg4Niw5IEBACiAJaW50IHJlY3Vyc2UgPSBmbGFnICYgTVNfUkVDOwogCWludCB0eXBlID0gZmxhZyAmIH5NU19SRUM7CiAKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKIAlpZiAobmQtPmRlbnRyeSAhPSBuZC0+bW50LT5tbnRfcm9vdCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTExNzMsNyArMTE4MCw3IEBACiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoZ3JhdmV5YXJkKSkgewogCQlMSVNUX0hFQUQodW1vdW50cyk7Ci0JCW1udCA9IGxpc3RfZW50cnkoZ3JhdmV5YXJkLT5uZXh0LCBzdHJ1Y3QgdmZzbW91bnQsIG1udF9leHBpcmUpOworCQltbnQgPSBsaXN0X2ZpcnN0X2VudHJ5KGdyYXZleWFyZCwgc3RydWN0IHZmc21vdW50LCBtbnRfZXhwaXJlKTsKIAkJbGlzdF9kZWxfaW5pdCgmbW50LT5tbnRfZXhwaXJlKTsKIAogCQkvKiBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgbmFtZXNwYWNlIGlzIGRlYWQgLSBhbGwgdGhlCkBAIC0xNDQxLDEwICsxNDQ4LDkgQEAKICAqIEFsbG9jYXRlIGEgbmV3IG5hbWVzcGFjZSBzdHJ1Y3R1cmUgYW5kIHBvcHVsYXRlIGl0IHdpdGggY29udGVudHMKICAqIGNvcGllZCBmcm9tIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIHBhc3NlZCBpbiB0YXNrIHN0cnVjdHVyZS4KICAqLwotc3RydWN0IG1udF9uYW1lc3BhY2UgKmR1cF9tbnRfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCitzdGF0aWMgc3RydWN0IG1udF9uYW1lc3BhY2UgKmR1cF9tbnRfbnMoc3RydWN0IG1udF9uYW1lc3BhY2UgKm1udF9ucywKIAkJc3RydWN0IGZzX3N0cnVjdCAqZnMpCiB7Ci0Jc3RydWN0IG1udF9uYW1lc3BhY2UgKm1udF9ucyA9IHRzay0+bnNwcm94eS0+bW50X25zOwogCXN0cnVjdCBtbnRfbmFtZXNwYWNlICpuZXdfbnM7CiAJc3RydWN0IHZmc21vdW50ICpyb290bW50ID0gTlVMTCwgKnB3ZG1udCA9IE5VTEwsICphbHRyb290bW50ID0gTlVMTDsKIAlzdHJ1Y3QgdmZzbW91bnQgKnAsICpxOwpAQCAtMTUwOSwzNiArMTUxNSwyMSBAQAogCXJldHVybiBuZXdfbnM7CiB9CiAKLWludCBjb3B5X21udF9ucyhpbnQgZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorc3RydWN0IG1udF9uYW1lc3BhY2UgKmNvcHlfbW50X25zKGludCBmbGFncywgc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zLAorCQlzdHJ1Y3QgZnNfc3RydWN0ICpuZXdfZnMpCiB7Ci0Jc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zID0gdHNrLT5uc3Byb3h5LT5tbnRfbnM7CiAJc3RydWN0IG1udF9uYW1lc3BhY2UgKm5ld19uczsKLQlpbnQgZXJyID0gMDsKIAotCWlmICghbnMpCi0JCXJldHVybiAwOwotCisJQlVHX09OKCFucyk7CiAJZ2V0X21udF9ucyhucyk7CiAKIAlpZiAoIShmbGFncyAmIENMT05FX05FV05TKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBuczsKIAotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewotCQllcnIgPSAtRVBFUk07Ci0JCWdvdG8gb3V0OwotCX0KKwluZXdfbnMgPSBkdXBfbW50X25zKG5zLCBuZXdfZnMpOwogCi0JbmV3X25zID0gZHVwX21udF9ucyh0c2ssIHRzay0+ZnMpOwotCWlmICghbmV3X25zKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCXRzay0+bnNwcm94eS0+bW50X25zID0gbmV3X25zOwotCi1vdXQ6CiAJcHV0X21udF9ucyhucyk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gbmV3X25zOwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX21vdW50KGNoYXIgX191c2VyICogZGV2X25hbWUsIGNoYXIgX191c2VyICogZGlyX25hbWUsCmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9maWxlLmMgYi9mcy9uY3Bmcy9maWxlLmMKaW5kZXggNmIxZjZkMi4uZDMxNTJmOCAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvZmlsZS5jCisrKyBiL2ZzL25jcGZzL2ZpbGUuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uY3BfZnMuaD4KICNpbmNsdWRlICJuY3BsaWJfa2VybmVsLmgiCmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9pbm9kZS5jIGIvZnMvbmNwZnMvaW5vZGUuYwppbmRleCBjMjlmMDBhLi5jZjA2ZWI5IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9pbm9kZS5jCisrKyBiL2ZzL25jcGZzL2lub2RlLmMKQEAgLTYwLDEwICs2MCw4IEBACiB7CiAJc3RydWN0IG5jcF9pbm9kZV9pbmZvICplaSA9IChzdHJ1Y3QgbmNwX2lub2RlX2luZm8gKikgZm9vOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKSB7Ci0JCW11dGV4X2luaXQoJmVpLT5vcGVuX211dGV4KTsKLQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKLQl9CisJbXV0ZXhfaW5pdCgmZWktPm9wZW5fbXV0ZXgpOworCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CiB9CiAgCiBzdGF0aWMgaW50IGluaXRfaW5vZGVjYWNoZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvaW9jdGwuYyBiL2ZzL25jcGZzL2lvY3RsLmMKaW5kZXggODg0M2E4My4uYzY3YjRiZCAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvaW9jdGwuYworKysgYi9mcy9uY3Bmcy9pb2N0bC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uY3BfZnMuaD4KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmggYi9mcy9uZnMvY2FsbGJhY2suaAppbmRleCBkYjNkNzkxLi5jMmJiMTRlIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suaAorKysgYi9mcy9uZnMvY2FsbGJhY2suaApAQCAtMjQsNyArMjQsNyBAQAogfTsKIAogc3RydWN0IGNiX2NvbXBvdW5kX2hkcl9hcmcgewotCWludCB0YWdsZW47CisJdW5zaWduZWQgaW50IHRhZ2xlbjsKIAljb25zdCBjaGFyICp0YWc7CiAJdW5zaWduZWQgaW50IGNhbGxiYWNrX2lkZW50OwogCXVuc2lnbmVkIG5vcHM7CkBAIC0zMiw3ICszMiw3IEBACiAKIHN0cnVjdCBjYl9jb21wb3VuZF9oZHJfcmVzIHsKIAlfX2JlMzIgKnN0YXR1czsKLQlpbnQgdGFnbGVuOworCXVuc2lnbmVkIGludCB0YWdsZW47CiAJY29uc3QgY2hhciAqdGFnOwogCV9fYmUzMiAqbm9wczsKIH07CmRpZmYgLS1naXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMKaW5kZXggNWJkMDNiOS4uODgxZmE0OSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtMTIsNyArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZnNfbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9uZnM0X21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2QvYmluZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L25mc19pZG1hcC5oPgpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RlbGVnYXRpb24uYyBiL2ZzL25mcy9kZWxlZ2F0aW9uLmMKaW5kZXggODQxYzk5YS4uN2YzN2QxYiAxMDA2NDQKLS0tIGEvZnMvbmZzL2RlbGVnYXRpb24uYworKysgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKIH0KIAotaW50IG5mc19kb19leHBpcmVfYWxsX2RlbGVnYXRpb25zKHZvaWQgKnB0cikKK3N0YXRpYyBpbnQgbmZzX2RvX2V4cGlyZV9hbGxfZGVsZWdhdGlvbnModm9pZCAqcHRyKQogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBwdHI7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDYyNWQ4ZTUuLmMyNzI1OGIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTMzLDEyICszMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgIm5mczRfZnMuaCIKICNpbmNsdWRlICJkZWxlZ2F0aW9uLmgiCiAjaW5jbHVkZSAiaW9zdGF0LmgiCiAKLSNkZWZpbmUgTkZTX1BBUkFOT0lBIDEKIC8qICNkZWZpbmUgTkZTX0RFQlVHX1ZFUkJPU0UgMSAqLwogCiBzdGF0aWMgaW50IG5mc19vcGVuZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKQEAgLTYwOCw3ICs2MDgsNyBAQAogCXJldHVybiByZXM7CiB9CiAKLWxvZmZfdCBuZnNfbGxzZWVrX2RpcihzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKK3N0YXRpYyBsb2ZmX3QgbmZzX2xsc2Vla19kaXIoc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCiB7CiAJbXV0ZXhfbG9jaygmZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKQEAgLTYzNCw3ICs2MzQsNyBAQAogICogQWxsIGRpcmVjdG9yeSBvcGVyYXRpb25zIHVuZGVyIE5GUyBhcmUgc3luY2hyb25vdXMsIHNvIGZzeW5jKCkKICAqIGlzIGEgZHVtbXkgb3BlcmF0aW9uLgogICovCi1pbnQgbmZzX2ZzeW5jX2RpcihzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZGF0YXN5bmMpCitzdGF0aWMgaW50IG5mc19mc3luY19kaXIoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQogewogCWRmcHJpbnRrKFZGUywgIk5GUzogZnN5bmNfZGlyKCVzLyVzKSBkYXRhc3luYyAlZFxuIiwKIAkJCWRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lLApAQCAtNjUwLDEyICs2NTAsMTUgQEAKICAqLwogc3RhdGljIGludCBuZnNfY2hlY2tfdmVyaWZpZXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKKwl1bnNpZ25lZCBsb25nIHZlcmY7CisKIAlpZiAoSVNfUk9PVChkZW50cnkpKQogCQlyZXR1cm4gMTsKLQlpZiAoKE5GU19JKGRpciktPmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19JTlZBTElEX0FUVFIpICE9IDAKLQkJCXx8IG5mc19hdHRyaWJ1dGVfdGltZW91dChkaXIpKQorCXZlcmYgPSAodW5zaWduZWQgbG9uZylkZW50cnktPmRfZnNkYXRhOworCWlmIChuZnNfY2FjaGVzX3Vuc3RhYmxlKGRpcikKKwkJCXx8IHZlcmYgIT0gTkZTX0koZGlyKS0+Y2FjaGVfY2hhbmdlX2F0dHJpYnV0ZSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIG5mc192ZXJpZnlfY2hhbmdlX2F0dHJpYnV0ZShkaXIsICh1bnNpZ25lZCBsb25nKWRlbnRyeS0+ZF9mc2RhdGEpOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmZzX3NldF92ZXJpZmllcihzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCB1bnNpZ25lZCBsb25nIHZlcmYpCkBAIC02NjUsOCArNjY4LDcgQEAKIAogc3RhdGljIHZvaWQgbmZzX3JlZnJlc2hfdmVyaWZpZXIoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdW5zaWduZWQgbG9uZyB2ZXJmKQogewotCWlmICh0aW1lX2FmdGVyKHZlcmYsICh1bnNpZ25lZCBsb25nKWRlbnRyeS0+ZF9mc2RhdGEpKQotCQluZnNfc2V0X3ZlcmlmaWVyKGRlbnRyeSwgdmVyZik7CisJbmZzX3NldF92ZXJpZmllcihkZW50cnksIHZlcmYpOwogfQogCiAvKgpAQCAtNzY1LDYgKzc2NywxMCBAQAogCW5mc19pbmNfc3RhdHMoZGlyLCBORlNJT1NfREVOVFJZUkVWQUxJREFURSk7CiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKKwkvKiBSZXZhbGlkYXRlIHBhcmVudCBkaXJlY3RvcnkgYXR0cmlidXRlIGNhY2hlICovCisJaWYgKG5mc19yZXZhbGlkYXRlX2lub2RlKE5GU19TRVJWRVIoZGlyKSwgZGlyKSA8IDApCisJCWdvdG8gb3V0X3phcF9wYXJlbnQ7CisKIAlpZiAoIWlub2RlKSB7CiAJCWlmIChuZnNfbmVnX25lZWRfcmV2YWwoZGlyLCBkZW50cnksIG5kKSkKIAkJCWdvdG8gb3V0X2JhZDsKQEAgLTc3OCwxMCArNzg0LDYgQEAKIAkJZ290byBvdXRfYmFkOwogCX0KIAotCS8qIFJldmFsaWRhdGUgcGFyZW50IGRpcmVjdG9yeSBhdHRyaWJ1dGUgY2FjaGUgKi8KLQlpZiAobmZzX3JldmFsaWRhdGVfaW5vZGUoTkZTX1NFUlZFUihkaXIpLCBkaXIpIDwgMCkKLQkJZ290byBvdXRfemFwX3BhcmVudDsKLQogCS8qIEZvcmNlIGEgZnVsbCBsb29rIHVwIGlmZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBoYXMgY2hhbmdlZCAqLwogCWlmIChuZnNfY2hlY2tfdmVyaWZpZXIoZGlyLCBkZW50cnkpKSB7CiAJCWlmIChuZnNfbG9va3VwX3ZlcmlmeV9pbm9kZShpbm9kZSwgbmQpKQpAQCAtMTM2MCwxMSArMTM2Miw2IEBACiAJCWF0b21pY19yZWFkKCZkZW50cnktPmRfY291bnQpKTsKIAluZnNfaW5jX3N0YXRzKGRpciwgTkZTSU9TX1NJTExZUkVOQU1FKTsKIAotI2lmZGVmIE5GU19QQVJBTk9JQQotaWYgKCFkZW50cnktPmRfaW5vZGUpCi1wcmludGsoIk5GUzogc2lsbHktcmVuYW1pbmcgJXMvJXMsIG5lZ2F0aXZlIGRlbnRyeT8/XG4iLAotZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotI2VuZGlmCiAJLyoKIAkgKiBXZSBkb24ndCBhbGxvdyBhIGRlbnRyeSB0byBiZSBzaWxseS1yZW5hbWVkIHR3aWNlLgogCSAqLwpAQCAtMTY4MSwxNiArMTY3OCw5IEBACiAJCQluZXdfaW5vZGUgPSBOVUxMOwogCQkJLyogaW5zdGFudGlhdGUgdGhlIHJlcGxhY2VtZW50IHRhcmdldCAqLwogCQkJZF9pbnN0YW50aWF0ZShuZXdfZGVudHJ5LCBOVUxMKTsKLQkJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmbmV3X2RlbnRyeS0+ZF9jb3VudCkgPiAxKSB7Ci0JCS8qIGRlbnRyeSBzdGlsbCBidXN5PyAqLwotI2lmZGVmIE5GU19QQVJBTk9JQQotCQkJcHJpbnRrKCJuZnNfcmVuYW1lOiB0YXJnZXQgJXMvJXMgYnVzeSwgZF9jb3VudD0lZFxuIiwKLQkJCSAgICAgICBuZXdfZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsCi0JCQkgICAgICAgbmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkgICAgICAgYXRvbWljX3JlYWQoJm5ld19kZW50cnktPmRfY291bnQpKTsKLSNlbmRpZgorCQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZuZXdfZGVudHJ5LT5kX2NvdW50KSA+IDEpCisJCQkvKiBkZW50cnkgc3RpbGwgYnVzeT8gKi8KIAkJCWdvdG8gb3V0OwotCQl9CiAJfSBlbHNlCiAJCWRyb3BfbmxpbmsobmV3X2lub2RlKTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IDg4OWRlNjAuLjAwZWVlODcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KQEAgLTEyMywxOSArMTIyLDI1IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyB2b2lkIG5mc19kaXJlY3RfZGlydHlfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5wYWdlcykKK3N0YXRpYyB2b2lkIG5mc19kaXJlY3RfZGlydHlfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBnYmFzZSwgc2l6ZV90IGNvdW50KQogewotCWludCBpOworCXVuc2lnbmVkIGludCBucGFnZXM7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuOworCXBhZ2VzICs9IChwZ2Jhc2UgPj4gUEFHRV9TSElGVCk7CisJbnBhZ2VzID0gKGNvdW50ICsgKHBnYmFzZSAmIH5QQUdFX01BU0spICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKIAlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tpXTsKIAkJaWYgKCFQYWdlQ29tcG91bmQocGFnZSkpCi0JCQlzZXRfcGFnZV9kaXJ0eV9sb2NrKHBhZ2UpOworCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBuZnNfZGlyZWN0X3JlbGVhc2VfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5wYWdlcykKK3N0YXRpYyB2b2lkIG5mc19kaXJlY3RfcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnBhZ2VzKQogewotCWludCBpOworCXVuc2lnbmVkIGludCBpOwogCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2VzW2ldKTsKIH0KQEAgLTE2Myw3ICsxNjgsNyBAQAogCXJldHVybiBkcmVxOwogfQogCi1zdGF0aWMgdm9pZCBuZnNfZGlyZWN0X3JlcV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIHZvaWQgbmZzX2RpcmVjdF9yZXFfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgbmZzX2RpcmVjdF9yZXEgKmRyZXEgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG5mc19kaXJlY3RfcmVxLCBrcmVmKTsKIApAQCAtMTcyLDYgKzE3NywxMSBAQAogCWttZW1fY2FjaGVfZnJlZShuZnNfZGlyZWN0X2NhY2hlcCwgZHJlcSk7CiB9CiAKK3N0YXRpYyB2b2lkIG5mc19kaXJlY3RfcmVxX3JlbGVhc2Uoc3RydWN0IG5mc19kaXJlY3RfcmVxICpkcmVxKQoreworCWtyZWZfcHV0KCZkcmVxLT5rcmVmLCBuZnNfZGlyZWN0X3JlcV9mcmVlKTsKK30KKwogLyoKICAqIENvbGxlY3RzIGFuZCByZXR1cm5zIHRoZSBmaW5hbCBlcnJvciB2YWx1ZS9ieXRlLWNvdW50LgogICovCkBAIC0xOTEsNyArMjAxLDYgQEAKIAkJcmVzdWx0ID0gZHJlcS0+Y291bnQ7CiAKIG91dDoKLQlrcmVmX3B1dCgmZHJlcS0+a3JlZiwgbmZzX2RpcmVjdF9yZXFfcmVsZWFzZSk7CiAJcmV0dXJuIChzc2l6ZV90KSByZXN1bHQ7CiB9CiAKQEAgLTIwOSw3ICsyMTgsNyBAQAogCX0KIAljb21wbGV0ZV9hbGwoJmRyZXEtPmNvbXBsZXRpb24pOwogCi0Ja3JlZl9wdXQoJmRyZXEtPmtyZWYsIG5mc19kaXJlY3RfcmVxX3JlbGVhc2UpOworCW5mc19kaXJlY3RfcmVxX3JlbGVhc2UoZHJlcSk7CiB9CiAKIC8qCkBAIC0yMjUsMTcgKzIzNCwxOCBAQAogCWlmIChuZnNfcmVhZHBhZ2VfcmVzdWx0KHRhc2ssIGRhdGEpICE9IDApCiAJCXJldHVybjsKIAotCW5mc19kaXJlY3RfZGlydHlfcGFnZXMoZGF0YS0+cGFnZXZlYywgZGF0YS0+bnBhZ2VzKTsKLQluZnNfZGlyZWN0X3JlbGVhc2VfcGFnZXMoZGF0YS0+cGFnZXZlYywgZGF0YS0+bnBhZ2VzKTsKLQogCXNwaW5fbG9jaygmZHJlcS0+bG9jayk7Ci0KLQlpZiAobGlrZWx5KHRhc2stPnRrX3N0YXR1cyA+PSAwKSkKLQkJZHJlcS0+Y291bnQgKz0gZGF0YS0+cmVzLmNvdW50OwotCWVsc2UKKwlpZiAodW5saWtlbHkodGFzay0+dGtfc3RhdHVzIDwgMCkpIHsKIAkJZHJlcS0+ZXJyb3IgPSB0YXNrLT50a19zdGF0dXM7Ci0KLQlzcGluX3VubG9jaygmZHJlcS0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZkcmVxLT5sb2NrKTsKKwl9IGVsc2UgeworCQlkcmVxLT5jb3VudCArPSBkYXRhLT5yZXMuY291bnQ7CisJCXNwaW5fdW5sb2NrKCZkcmVxLT5sb2NrKTsKKwkJbmZzX2RpcmVjdF9kaXJ0eV9wYWdlcyhkYXRhLT5wYWdldmVjLAorCQkJCWRhdGEtPmFyZ3MucGdiYXNlLAorCQkJCWRhdGEtPnJlcy5jb3VudCk7CisJfQorCW5mc19kaXJlY3RfcmVsZWFzZV9wYWdlcyhkYXRhLT5wYWdldmVjLCBkYXRhLT5ucGFnZXMpOwogCiAJaWYgKHB1dF9kcmVxKGRyZXEpKQogCQluZnNfZGlyZWN0X2NvbXBsZXRlKGRyZXEpOwpAQCAtMjgwLDkgKzI5MCwxMiBAQAogCQlyZXN1bHQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgdXNlcl9hZGRyLAogCQkJCQlkYXRhLT5ucGFnZXMsIDEsIDAsIGRhdGEtPnBhZ2V2ZWMsIE5VTEwpOwogCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQlpZiAodW5saWtlbHkocmVzdWx0IDwgZGF0YS0+bnBhZ2VzKSkgewotCQkJaWYgKHJlc3VsdCA+IDApCi0JCQkJbmZzX2RpcmVjdF9yZWxlYXNlX3BhZ2VzKGRhdGEtPnBhZ2V2ZWMsIHJlc3VsdCk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQluZnNfcmVhZGRhdGFfcmVsZWFzZShkYXRhKTsKKwkJCWJyZWFrOworCQl9CisJCWlmICgodW5zaWduZWQpcmVzdWx0IDwgZGF0YS0+bnBhZ2VzKSB7CisJCQluZnNfZGlyZWN0X3JlbGVhc2VfcGFnZXMoZGF0YS0+cGFnZXZlYywgcmVzdWx0KTsKIAkJCW5mc19yZWFkZGF0YV9yZWxlYXNlKGRhdGEpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM2MCw2ICszNzMsNyBAQAogCWlmICghcmVzdWx0KQogCQlyZXN1bHQgPSBuZnNfZGlyZWN0X3dhaXQoZHJlcSk7CiAJcnBjX2NsbnRfc2lndW5tYXNrKGNsbnQsICZvbGRzZXQpOworCW5mc19kaXJlY3RfcmVxX3JlbGVhc2UoZHJlcSk7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtNjExLDkgKzYyNSwxMiBAQAogCQlyZXN1bHQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgdXNlcl9hZGRyLAogCQkJCQlkYXRhLT5ucGFnZXMsIDAsIDAsIGRhdGEtPnBhZ2V2ZWMsIE5VTEwpOwogCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQlpZiAodW5saWtlbHkocmVzdWx0IDwgZGF0YS0+bnBhZ2VzKSkgewotCQkJaWYgKHJlc3VsdCA+IDApCi0JCQkJbmZzX2RpcmVjdF9yZWxlYXNlX3BhZ2VzKGRhdGEtPnBhZ2V2ZWMsIHJlc3VsdCk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQluZnNfd3JpdGVkYXRhX3JlbGVhc2UoZGF0YSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKHVuc2lnbmVkKXJlc3VsdCA8IGRhdGEtPm5wYWdlcykgeworCQkJbmZzX2RpcmVjdF9yZWxlYXNlX3BhZ2VzKGRhdGEtPnBhZ2V2ZWMsIHJlc3VsdCk7CiAJCQluZnNfd3JpdGVkYXRhX3JlbGVhc2UoZGF0YSk7CiAJCQlicmVhazsKIAkJfQpAQCAtNzA0LDYgKzcyMSw3IEBACiAJaWYgKCFyZXN1bHQpCiAJCXJlc3VsdCA9IG5mc19kaXJlY3Rfd2FpdChkcmVxKTsKIAlycGNfY2xudF9zaWd1bm1hc2soY2xudCwgJm9sZHNldCk7CisJbmZzX2RpcmVjdF9yZXFfcmVsZWFzZShkcmVxKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZS5jIGIvZnMvbmZzL2ZpbGUuYwppbmRleCA1ZWFlZTZkLi45ZWI4ZWI0IDEwMDY0NAotLS0gYS9mcy9uZnMvZmlsZS5jCisrKyBiL2ZzL25mcy9maWxlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvYWlvLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2ZzL25mcy9nZXRyb290LmMgYi9mcy9uZnMvZ2V0cm9vdC5jCmluZGV4IDZlZjI2OGYuLmQxY2JmMGEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9nZXRyb290LmMKKysrIGIvZnMvbmZzL2dldHJvb3QuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25mc19tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L25mczRfbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZC9iaW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2lkbWFwLmg+CkBAIC00Miw3ICs0MSw2IEBACiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19DTElFTlQKLSNkZWZpbmUgTkZTX1BBUkFOT0lBIDEKIAogLyoKICAqIGdldCBhbiBORlMyL05GUzMgcm9vdCBkZW50cnkgZnJvbSB0aGUgcm9vdCBmaWxlaGFuZGxlCmRpZmYgLS1naXQgYS9mcy9uZnMvaWRtYXAuYyBiL2ZzL25mcy9pZG1hcC5jCmluZGV4IDlkNGE2YjIuLmQxMWViMDU1IDEwMDY0NAotLS0gYS9mcy9uZnMvaWRtYXAuYworKysgYi9mcy9uZnMvaWRtYXAuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCW11dGV4X3VubG9jaygmaWRtYXAtPmlkbWFwX2ltX2xvY2spOwogCXNjaGVkdWxlKCk7Ci0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZpZG1hcC0+aWRtYXBfd3EsICZ3cSk7CiAJbXV0ZXhfbG9jaygmaWRtYXAtPmlkbWFwX2ltX2xvY2spOwogCkBAIC0zMzMsNyArMzMzLDcgQEAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJbXV0ZXhfdW5sb2NrKCZpZG1hcC0+aWRtYXBfaW1fbG9jayk7CiAJc2NoZWR1bGUoKTsKLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmlkbWFwLT5pZG1hcF93cSwgJndxKTsKIAltdXRleF9sb2NrKCZpZG1hcC0+aWRtYXBfaW1fbG9jayk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggMWU5YTkxNS4uYmQ5ZjVhOCAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19WRlMKLSNkZWZpbmUgTkZTX1BBUkFOT0lBIDEKIAogc3RhdGljIHZvaWQgbmZzX2ludmFsaWRhdGVfaW5vZGUoc3RydWN0IGlub2RlICopOwogc3RhdGljIGludCBuZnNfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmZzX2ZhdHRyICopOwpAQCAtMTA3NSwxMCArMTA3NCw4IEBACiAJLyoKIAkgKiBCaWcgdHJvdWJsZSEgVGhlIGlub2RlIGhhcyBiZWNvbWUgYSBkaWZmZXJlbnQgb2JqZWN0LgogCSAqLwotI2lmZGVmIE5GU19QQVJBTk9JQQogCXByaW50ayhLRVJOX0RFQlVHICIlczogaW5vZGUgJWxkIG1vZGUgY2hhbmdlZCwgJTA3byB0byAlMDdvXG4iLAogCQkJX19GVU5DVElPTl9fLCBpbm9kZS0+aV9pbm8sIGlub2RlLT5pX21vZGUsIGZhdHRyLT5tb2RlKTsKLSNlbmRpZgogIG91dF9lcnI6CiAJLyoKIAkgKiBObyBuZWVkIHRvIHdvcnJ5IGFib3V0IHVuaGFzaGluZyB0aGUgZGVudHJ5LCBhcyB0aGUKQEAgLTExNjcsMjEgKzExNjQsMTkgQEAKIHsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gKHN0cnVjdCBuZnNfaW5vZGUgKikgZm9vOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKSB7Ci0JCWlub2RlX2luaXRfb25jZSgmbmZzaS0+dmZzX2lub2RlKTsKLQkJc3Bpbl9sb2NrX2luaXQoJm5mc2ktPnJlcV9sb2NrKTsKLQkJSU5JVF9MSVNUX0hFQUQoJm5mc2ktPmRpcnR5KTsKLQkJSU5JVF9MSVNUX0hFQUQoJm5mc2ktPmNvbW1pdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZuZnNpLT5vcGVuX2ZpbGVzKTsKLQkJSU5JVF9MSVNUX0hFQUQoJm5mc2ktPmFjY2Vzc19jYWNoZV9lbnRyeV9scnUpOwotCQlJTklUX0xJU1RfSEVBRCgmbmZzaS0+YWNjZXNzX2NhY2hlX2lub2RlX2xydSk7Ci0JCUlOSVRfUkFESVhfVFJFRSgmbmZzaS0+bmZzX3BhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7Ci0JCWF0b21pY19zZXQoJm5mc2ktPmRhdGFfdXBkYXRlcywgMCk7Ci0JCW5mc2ktPm5kaXJ0eSA9IDA7Ci0JCW5mc2ktPm5jb21taXQgPSAwOwotCQluZnNpLT5ucGFnZXMgPSAwOwotCQluZnM0X2luaXRfb25jZShuZnNpKTsKLQl9CisJaW5vZGVfaW5pdF9vbmNlKCZuZnNpLT52ZnNfaW5vZGUpOworCXNwaW5fbG9ja19pbml0KCZuZnNpLT5yZXFfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm5mc2ktPmRpcnR5KTsKKwlJTklUX0xJU1RfSEVBRCgmbmZzaS0+Y29tbWl0KTsKKwlJTklUX0xJU1RfSEVBRCgmbmZzaS0+b3Blbl9maWxlcyk7CisJSU5JVF9MSVNUX0hFQUQoJm5mc2ktPmFjY2Vzc19jYWNoZV9lbnRyeV9scnUpOworCUlOSVRfTElTVF9IRUFEKCZuZnNpLT5hY2Nlc3NfY2FjaGVfaW5vZGVfbHJ1KTsKKwlJTklUX1JBRElYX1RSRUUoJm5mc2ktPm5mc19wYWdlX3RyZWUsIEdGUF9BVE9NSUMpOworCWF0b21pY19zZXQoJm5mc2ktPmRhdGFfdXBkYXRlcywgMCk7CisJbmZzaS0+bmRpcnR5ID0gMDsKKwluZnNpLT5uY29tbWl0ID0gMDsKKwluZnNpLT5ucGFnZXMgPSAwOworCW5mczRfaW5pdF9vbmNlKG5mc2kpOwogfQogIAogc3RhdGljIGludCBfX2luaXQgbmZzX2luaXRfaW5vZGVjYWNoZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczJ4ZHIuYyBiL2ZzL25mcy9uZnMyeGRyLmMKaW5kZXggYWJkOWY4Yi4uY2QzY2E3YiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczJ4ZHIuYworKysgYi9mcy9uZnMvbmZzMnhkci5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19YRFIKLS8qICNkZWZpbmUgTkZTX1BBUkFOT0lBIDEgKi8KIAogLyogTWFwcGluZyBmcm9tIE5GUyBlcnJvciBjb2RlIHRvICJlcnJubyIgZXJyb3IgY29kZS4gKi8KICNkZWZpbmUgZXJybm9fTkZTRVJSX0lPCQlFSU8KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzcHJvYy5jIGIvZnMvbmZzL25mczNwcm9jLmMKaW5kZXggN2QwMzcxZS4uNDUyNjhkNiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNwcm9jLmMKKysrIGIvZnMvbmZzL25mczNwcm9jLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNfcGFnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2JpbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L25mc19tb3VudC5oPgogCiAjaW5jbHVkZSAiaW9zdGF0LmgiCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IGQ2YTMwZTkuLjY0OGUwYWMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC03OTAsNyArNzkwLDcgQEAKIAlyZXR1cm4gLUVBQ0NFUzsKIH0KIAotaW50IG5mczRfcmVjb3Zlcl9leHBpcmVkX2xlYXNlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCitzdGF0aWMgaW50IG5mczRfcmVjb3Zlcl9leHBpcmVkX2xlYXNlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKIAlpbnQgcmV0OwpAQCAtMjc0OCw3ICsyNzQ4LDcgQEAKIC8qIFRoaXMgaXMgdGhlIGVycm9yIGhhbmRsaW5nIHJvdXRpbmUgZm9yIHByb2Nlc3NlcyB0aGF0IGFyZSBhbGxvd2VkCiAgKiB0byBzbGVlcC4KICAqLwotaW50IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBpbnQgZXJyb3Jjb2RlLCBzdHJ1Y3QgbmZzNF9leGNlcHRpb24gKmV4Y2VwdGlvbikKK3N0YXRpYyBpbnQgbmZzNF9oYW5kbGVfZXhjZXB0aW9uKGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIGludCBlcnJvcmNvZGUsIHN0cnVjdCBuZnM0X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKQogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzZXJ2ZXItPm5mc19jbGllbnQ7CiAJaW50IHJldCA9IGVycm9yY29kZTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cmVuZXdkLmMgYi9mcy9uZnMvbmZzNHJlbmV3ZC5jCmluZGV4IGY1ZjQ0MzAuLjA1MDVjYTEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cmVuZXdkLmMKKysrIGIvZnMvbmZzL25mczRyZW5ld2QuYwpAQCAtNDMsNyArNDMsNiBAQAogICogY2hpbGQgdGFzayBmcmFtZXdvcmsgb2YgdGhlIFJQQyBsYXllcj8KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCA1ZmZmYmRmLi44ZWQ3OWQ1IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAlyZXR1cm4gY3JlZDsKIH0KIAotc3RydWN0IHJwY19jcmVkICpuZnM0X2dldF9zZXRjbGllbnRpZF9jcmVkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCitzdGF0aWMgc3RydWN0IHJwY19jcmVkICpuZnM0X2dldF9zZXRjbGllbnRpZF9jcmVkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCiB7CiAJc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKnNwOwogCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCBiOGMyOGYyLi44MDAzYzkxIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTIyNCw3ICsyMjQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVfZ2V0YXR0cl9tYXhzeikKICNkZWZpbmUgTkZTNF9kZWNfc2V0YXR0cl9zeiAgICAgKGNvbXBvdW5kX2RlY29kZV9oZHJfbWF4c3ogKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZV9wdXRmaF9tYXhzeiArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BfZGVjb2RlX2hkcl9tYXhzeiArIDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX2RlY29kZV9oZHJfbWF4c3ogKyAzICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZnM0X2ZhdHRyX21heHN6KQogI2RlZmluZSBORlM0X2VuY19mc2luZm9fc3oJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCiAJCQkJZW5jb2RlX3B1dGZoX21heHN6ICsgXAogCQkJCWVuY29kZV9mc2luZm9fbWF4c3opCkBAIC02NDUsMTAgKzY0NiwxMCBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoOCtzaXplb2YoYXJnLT5zdGF0ZWlkLT5kYXRhKSk7CisJUkVTRVJWRV9TUEFDRSg4K05GUzRfU1RBVEVJRF9TSVpFKTsKIAlXUklURTMyKE9QX0NMT1NFKTsKIAlXUklURTMyKGFyZy0+c2VxaWQtPnNlcXVlbmNlLT5jb3VudGVyKTsKLQlXUklURU1FTShhcmctPnN0YXRlaWQtPmRhdGEsIHNpemVvZihhcmctPnN0YXRlaWQtPmRhdGEpKTsKKwlXUklURU1FTShhcmctPnN0YXRlaWQtPmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAkKIAlyZXR1cm4gMDsKIH0KQEAgLTc5MiwxNyArNzkzLDE3IEBACiAJV1JJVEU2NChuZnM0X2xvY2tfbGVuZ3RoKGFyZ3MtPmZsKSk7CiAJV1JJVEUzMihhcmdzLT5uZXdfbG9ja19vd25lcik7CiAJaWYgKGFyZ3MtPm5ld19sb2NrX293bmVyKXsKLQkJUkVTRVJWRV9TUEFDRSg0MCk7CisJCVJFU0VSVkVfU1BBQ0UoNCtORlM0X1NUQVRFSURfU0laRSsyMCk7CiAJCVdSSVRFMzIoYXJncy0+b3Blbl9zZXFpZC0+c2VxdWVuY2UtPmNvdW50ZXIpOwotCQlXUklURU1FTShhcmdzLT5vcGVuX3N0YXRlaWQtPmRhdGEsIHNpemVvZihhcmdzLT5vcGVuX3N0YXRlaWQtPmRhdGEpKTsKKwkJV1JJVEVNRU0oYXJncy0+b3Blbl9zdGF0ZWlkLT5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CiAJCVdSSVRFMzIoYXJncy0+bG9ja19zZXFpZC0+c2VxdWVuY2UtPmNvdW50ZXIpOwogCQlXUklURTY0KGFyZ3MtPmxvY2tfb3duZXIuY2xpZW50aWQpOwogCQlXUklURTMyKDQpOwogCQlXUklURTMyKGFyZ3MtPmxvY2tfb3duZXIuaWQpOwogCX0KIAllbHNlIHsKLQkJUkVTRVJWRV9TUEFDRSgyMCk7Ci0JCVdSSVRFTUVNKGFyZ3MtPmxvY2tfc3RhdGVpZC0+ZGF0YSwgc2l6ZW9mKGFyZ3MtPmxvY2tfc3RhdGVpZC0+ZGF0YSkpOworCQlSRVNFUlZFX1NQQUNFKE5GUzRfU1RBVEVJRF9TSVpFKzQpOworCQlXUklURU1FTShhcmdzLT5sb2NrX3N0YXRlaWQtPmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAkJV1JJVEUzMihhcmdzLT5sb2NrX3NlcWlkLT5zZXF1ZW5jZS0+Y291bnRlcik7CiAJfQogCkBAIC04MjksMTEgKzgzMCwxMSBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoNDQpOworCVJFU0VSVkVfU1BBQ0UoMTIrTkZTNF9TVEFURUlEX1NJWkUrMTYpOwogCVdSSVRFMzIoT1BfTE9DS1UpOwogCVdSSVRFMzIobmZzNF9sb2NrX3R5cGUoYXJncy0+ZmwsIDApKTsKIAlXUklURTMyKGFyZ3MtPnNlcWlkLT5zZXF1ZW5jZS0+Y291bnRlcik7Ci0JV1JJVEVNRU0oYXJncy0+c3RhdGVpZC0+ZGF0YSwgc2l6ZW9mKGFyZ3MtPnN0YXRlaWQtPmRhdGEpKTsKKwlXUklURU1FTShhcmdzLT5zdGF0ZWlkLT5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CiAJV1JJVEU2NChhcmdzLT5mbC0+Zmxfc3RhcnQpOwogCVdSSVRFNjQobmZzNF9sb2NrX2xlbmd0aChhcmdzLT5mbCkpOwogCkBAIC05NjUsOSArOTY2LDkgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDQrc2l6ZW9mKHN0YXRlaWQtPmRhdGEpKTsKKwlSRVNFUlZFX1NQQUNFKDQrTkZTNF9TVEFURUlEX1NJWkUpOwogCVdSSVRFMzIoTkZTNF9PUEVOX0NMQUlNX0RFTEVHQVRFX0NVUik7Ci0JV1JJVEVNRU0oc3RhdGVpZC0+ZGF0YSwgc2l6ZW9mKHN0YXRlaWQtPmRhdGEpKTsKKwlXUklURU1FTShzdGF0ZWlkLT5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CiAJZW5jb2RlX3N0cmluZyh4ZHIsIG5hbWUtPmxlbiwgbmFtZS0+bmFtZSk7CiB9CiAKQEAgLTk5NSw5ICs5OTYsOSBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoOCtzaXplb2YoYXJnLT5zdGF0ZWlkLT5kYXRhKSk7CisJUkVTRVJWRV9TUEFDRSg0K05GUzRfU1RBVEVJRF9TSVpFKzQpOwogCVdSSVRFMzIoT1BfT1BFTl9DT05GSVJNKTsKLQlXUklURU1FTShhcmctPnN0YXRlaWQtPmRhdGEsIHNpemVvZihhcmctPnN0YXRlaWQtPmRhdGEpKTsKKwlXUklURU1FTShhcmctPnN0YXRlaWQtPmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAlXUklURTMyKGFyZy0+c2VxaWQtPnNlcXVlbmNlLT5jb3VudGVyKTsKIAogCXJldHVybiAwOwpAQCAtMTAwNyw5ICsxMDA4LDkgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDgrc2l6ZW9mKGFyZy0+c3RhdGVpZC0+ZGF0YSkpOworCVJFU0VSVkVfU1BBQ0UoNCtORlM0X1NUQVRFSURfU0laRSs0KTsKIAlXUklURTMyKE9QX09QRU5fRE9XTkdSQURFKTsKLQlXUklURU1FTShhcmctPnN0YXRlaWQtPmRhdGEsIHNpemVvZihhcmctPnN0YXRlaWQtPmRhdGEpKTsKKwlXUklURU1FTShhcmctPnN0YXRlaWQtPmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAlXUklURTMyKGFyZy0+c2VxaWQtPnNlcXVlbmNlLT5jb3VudGVyKTsKIAllbmNvZGVfc2hhcmVfYWNjZXNzKHhkciwgYXJnLT5vcGVuX2ZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTEwNDQsMTIgKzEwNDUsMTIgQEAKIAluZnM0X3N0YXRlaWQgc3RhdGVpZDsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDE2KTsKKwlSRVNFUlZFX1NQQUNFKE5GUzRfU1RBVEVJRF9TSVpFKTsKIAlpZiAoY3R4LT5zdGF0ZSAhPSBOVUxMKSB7CiAJCW5mczRfY29weV9zdGF0ZWlkKCZzdGF0ZWlkLCBjdHgtPnN0YXRlLCBjdHgtPmxvY2tvd25lcik7Ci0JCVdSSVRFTUVNKHN0YXRlaWQuZGF0YSwgc2l6ZW9mKHN0YXRlaWQuZGF0YSkpOworCQlXUklURU1FTShzdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAl9IGVsc2UKLQkJV1JJVEVNRU0oemVyb19zdGF0ZWlkLmRhdGEsIHNpemVvZih6ZXJvX3N0YXRlaWQuZGF0YSkpOworCQlXUklURU1FTSh6ZXJvX3N0YXRlaWQuZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOwogfQogCiBzdGF0aWMgaW50IGVuY29kZV9yZWFkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBuZnNfcmVhZGFyZ3MgKmFyZ3MpCkBAIC0xMDc4LDEwICsxMDc5LDEwIEBACiAJaW50IHJlcGxlbjsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDMyK3NpemVvZihuZnM0X3ZlcmlmaWVyKSk7CisJUkVTRVJWRV9TUEFDRSgxMitORlM0X1ZFUklGSUVSX1NJWkUrMjApOwogCVdSSVRFMzIoT1BfUkVBRERJUik7CiAJV1JJVEU2NChyZWFkZGlyLT5jb29raWUpOwotCVdSSVRFTUVNKHJlYWRkaXItPnZlcmlmaWVyLmRhdGEsIHNpemVvZihyZWFkZGlyLT52ZXJpZmllci5kYXRhKSk7CisJV1JJVEVNRU0ocmVhZGRpci0+dmVyaWZpZXIuZGF0YSwgTkZTNF9WRVJJRklFUl9TSVpFKTsKIAlXUklURTMyKHJlYWRkaXItPmNvdW50ID4+IDEpOyAgLyogV2UncmUgbm90IGRvaW5nIHJlYWRkaXJwbHVzICovCiAJV1JJVEUzMihyZWFkZGlyLT5jb3VudCk7CiAJV1JJVEUzMigyKTsKQEAgLTExODksOSArMTE5MCw5IEBACiB7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSg0K3NpemVvZih6ZXJvX3N0YXRlaWQuZGF0YSkpOworCVJFU0VSVkVfU1BBQ0UoNCtORlM0X1NUQVRFSURfU0laRSk7CiAJV1JJVEUzMihPUF9TRVRBVFRSKTsKLQlXUklURU1FTSh6ZXJvX3N0YXRlaWQuZGF0YSwgc2l6ZW9mKHplcm9fc3RhdGVpZC5kYXRhKSk7CisJV1JJVEVNRU0oemVyb19zdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAlSRVNFUlZFX1NQQUNFKDIqNCk7CiAJV1JJVEUzMigxKTsKIAlXUklURTMyKEZBVFRSNF9XT1JEMF9BQ0wpOwpAQCAtMTIxOSw5ICsxMjIwLDkgQEAKIAlpbnQgc3RhdHVzOwogCV9fYmUzMiAqcDsKIAkKLSAgICAgICAgUkVTRVJWRV9TUEFDRSg0K3NpemVvZihhcmctPnN0YXRlaWQuZGF0YSkpOworICAgICAgICBSRVNFUlZFX1NQQUNFKDQrTkZTNF9TVEFURUlEX1NJWkUpOwogICAgICAgICBXUklURTMyKE9QX1NFVEFUVFIpOwotCVdSSVRFTUVNKGFyZy0+c3RhdGVpZC5kYXRhLCBzaXplb2YoYXJnLT5zdGF0ZWlkLmRhdGEpKTsKKwlXUklURU1FTShhcmctPnN0YXRlaWQuZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOwogCiAgICAgICAgIGlmICgoc3RhdHVzID0gZW5jb2RlX2F0dHJzKHhkciwgYXJnLT5pYXAsIHNlcnZlcikpKQogCQlyZXR1cm4gc3RhdHVzOwpAQCAtMTIzMyw5ICsxMjM0LDkgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDQgKyBzaXplb2Yoc2V0Y2xpZW50aWQtPnNjX3ZlcmlmaWVyLT5kYXRhKSk7CisJUkVTRVJWRV9TUEFDRSg0ICsgTkZTNF9WRVJJRklFUl9TSVpFKTsKIAlXUklURTMyKE9QX1NFVENMSUVOVElEKTsKLQlXUklURU1FTShzZXRjbGllbnRpZC0+c2NfdmVyaWZpZXItPmRhdGEsIHNpemVvZihzZXRjbGllbnRpZC0+c2NfdmVyaWZpZXItPmRhdGEpKTsKKwlXUklURU1FTShzZXRjbGllbnRpZC0+c2NfdmVyaWZpZXItPmRhdGEsIE5GUzRfVkVSSUZJRVJfU0laRSk7CiAKIAllbmNvZGVfc3RyaW5nKHhkciwgc2V0Y2xpZW50aWQtPnNjX25hbWVfbGVuLCBzZXRjbGllbnRpZC0+c2NfbmFtZSk7CiAJUkVTRVJWRV9TUEFDRSg0KTsKQEAgLTEyNTIsMTAgKzEyNTMsMTAgQEAKIHsKICAgICAgICAgX19iZTMyICpwOwogCi0gICAgICAgIFJFU0VSVkVfU1BBQ0UoMTIgKyBzaXplb2YoY2xpZW50X3N0YXRlLT5jbF9jb25maXJtLmRhdGEpKTsKKyAgICAgICAgUkVTRVJWRV9TUEFDRSgxMiArIE5GUzRfVkVSSUZJRVJfU0laRSk7CiAgICAgICAgIFdSSVRFMzIoT1BfU0VUQ0xJRU5USURfQ09ORklSTSk7CiAgICAgICAgIFdSSVRFNjQoY2xpZW50X3N0YXRlLT5jbF9jbGllbnRpZCk7Ci0gICAgICAgIFdSSVRFTUVNKGNsaWVudF9zdGF0ZS0+Y2xfY29uZmlybS5kYXRhLCBzaXplb2YoY2xpZW50X3N0YXRlLT5jbF9jb25maXJtLmRhdGEpKTsKKyAgICAgICAgV1JJVEVNRU0oY2xpZW50X3N0YXRlLT5jbF9jb25maXJtLmRhdGEsIE5GUzRfVkVSSUZJRVJfU0laRSk7CiAKICAgICAgICAgcmV0dXJuIDA7CiB9CkBAIC0xMjgzLDEwICsxMjg0LDEwIEBACiB7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSgyMCk7CisJUkVTRVJWRV9TUEFDRSg0K05GUzRfU1RBVEVJRF9TSVpFKTsKIAogCVdSSVRFMzIoT1BfREVMRUdSRVRVUk4pOwotCVdSSVRFTUVNKHN0YXRlaWQtPmRhdGEsIHNpemVvZihzdGF0ZWlkLT5kYXRhKSk7CisJV1JJVEVNRU0oc3RhdGVpZC0+ZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOwogCXJldHVybiAwOwogCiB9CkBAIC0yMDc5LDkgKzIwODAsMTEgQEAKIAogI2RlZmluZSBSRUFEX0JVRihuYnl0ZXMpICBkbyB7IFwKIAlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBuYnl0ZXMpOyBcCi0JaWYgKCFwKSB7IFwKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlcGx5IGJ1ZmZlciBvdmVyZmxvd2VkIGluIGxpbmUgJWQuIiwgXAotCQkJICAgICAgIAlfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAorCWlmICh1bmxpa2VseSghcCkpIHsgXAorCQlwcmludGsoS0VSTl9JTkZPICIlczogcHJlbWF0dXJlbHkgaGl0IGVuZCBvZiByZWNlaXZlIiBcCisJCQkJIiBidWZmZXJcbiIsIF9fRlVOQ1RJT05fXyk7IFwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHhkci0+cD0lcCwgYnl0ZXM9JXUsIHhkci0+ZW5kPSVwXG4iLCBcCisJCQkJX19GVU5DVElPTl9fLCB4ZHItPnAsIG5ieXRlcywgeGRyLT5lbmQpOyBcCiAJCXJldHVybiAtRUlPOyBcCiAJfSBcCiB9IHdoaWxlICgwKQpAQCAtMjQ5MSw3ICsyNDk0LDcgQEAKIAkJCQlpbnQgaTsKIAkJCQlkcHJpbnRrKCIlczogdXNpbmcgZmlyc3QgJWQgb2YgJWQgc2VydmVycyByZXR1cm5lZCBmb3IgbG9jYXRpb24gJWRcbiIsIF9fRlVOQ1RJT05fXywgTkZTNF9GU19MT0NBVElPTl9NQVhTRVJWRVJTLCBtLCByZXMtPm5sb2NhdGlvbnMpOwogCQkJCWZvciAoaSA9IGxvYy0+bnNlcnZlcnM7IGkgPCBtOyBpKyspIHsKLQkJCQkJaW50IGxlbjsKKwkJCQkJdW5zaWduZWQgaW50IGxlbjsKIAkJCQkJY2hhciAqZGF0YTsKIAkJCQkJc3RhdHVzID0gZGVjb2RlX29wYXF1ZV9pbmxpbmUoeGRyLCAmbGVuLCAmZGF0YSk7CiAJCQkJCWlmICh1bmxpa2VseShzdGF0dXMgIT0gMCkpCkBAIC0yNjM5LDcgKzI2NDIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRlY29kZV9hdHRyX293bmVyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIGludDMyX3QgKnVpZCkKK3N0YXRpYyBpbnQgZGVjb2RlX2F0dHJfb3duZXIoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgc3RydWN0IG5mc19jbGllbnQgKmNscCwgdWludDMyX3QgKnVpZCkKIHsKIAl1aW50MzJfdCBsZW47CiAJX19iZTMyICpwOwpAQCAtMjY2NCw3ICsyNjY3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkZWNvZGVfYXR0cl9ncm91cChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCBzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBpbnQzMl90ICpnaWQpCitzdGF0aWMgaW50IGRlY29kZV9hdHRyX2dyb3VwKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHVpbnQzMl90ICpnaWQpCiB7CiAJdWludDMyX3QgbGVuOwogCV9fYmUzMiAqcDsKQEAgLTI4OTQsOCArMjg5Nyw4IEBACiAJc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0NMT1NFKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwotCVJFQURfQlVGKHNpemVvZihyZXMtPnN0YXRlaWQuZGF0YSkpOwotCUNPUFlNRU0ocmVzLT5zdGF0ZWlkLmRhdGEsIHNpemVvZihyZXMtPnN0YXRlaWQuZGF0YSkpOworCVJFQURfQlVGKE5GUzRfU1RBVEVJRF9TSVpFKTsKKwlDT1BZTUVNKHJlcy0+c3RhdGVpZC5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxODMsOCArMzE4Niw4IEBACiAKIAlzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfTE9DSyk7CiAJaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCVJFQURfQlVGKHNpemVvZihyZXMtPnN0YXRlaWQuZGF0YSkpOwotCQlDT1BZTUVNKHJlcy0+c3RhdGVpZC5kYXRhLCBzaXplb2YocmVzLT5zdGF0ZWlkLmRhdGEpKTsKKwkJUkVBRF9CVUYoTkZTNF9TVEFURUlEX1NJWkUpOworCQlDT1BZTUVNKHJlcy0+c3RhdGVpZC5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CiAJfSBlbHNlIGlmIChzdGF0dXMgPT0gLU5GUzRFUlJfREVOSUVEKQogCQlyZXR1cm4gZGVjb2RlX2xvY2tfZGVuaWVkKHhkciwgTlVMTCk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTMyMDYsOCArMzIwOSw4IEBACiAKIAlzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfTE9DS1UpOwogCWlmIChzdGF0dXMgPT0gMCkgewotCQlSRUFEX0JVRihzaXplb2YocmVzLT5zdGF0ZWlkLmRhdGEpKTsKLQkJQ09QWU1FTShyZXMtPnN0YXRlaWQuZGF0YSwgc2l6ZW9mKHJlcy0+c3RhdGVpZC5kYXRhKSk7CisJCVJFQURfQlVGKE5GUzRfU1RBVEVJRF9TSVpFKTsKKwkJQ09QWU1FTShyZXMtPnN0YXRlaWQuZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMzI0OCw4ICszMjUxLDggQEAKIAkJcmVzLT5kZWxlZ2F0aW9uX3R5cGUgPSAwOwogCQlyZXR1cm4gMDsKIAl9Ci0JUkVBRF9CVUYoMjApOwotCUNPUFlNRU0ocmVzLT5kZWxlZ2F0aW9uLmRhdGEsIHNpemVvZihyZXMtPmRlbGVnYXRpb24uZGF0YSkpOworCVJFQURfQlVGKE5GUzRfU1RBVEVJRF9TSVpFKzQpOworCUNPUFlNRU0ocmVzLT5kZWxlZ2F0aW9uLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAlSRUFEMzIocmVzLT5kb19yZWNhbGwpOwogCXN3aXRjaCAoZGVsZWdhdGlvbl90eXBlKSB7CiAJCWNhc2UgTkZTNF9PUEVOX0RFTEVHQVRFX1JFQUQ6CkBAIC0zMjcyLDggKzMyNzUsOCBAQAogICAgICAgICBzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfT1BFTik7CiAgICAgICAgIGlmIChzdGF0dXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgUkVBRF9CVUYoc2l6ZW9mKHJlcy0+c3RhdGVpZC5kYXRhKSk7Ci0gICAgICAgIENPUFlNRU0ocmVzLT5zdGF0ZWlkLmRhdGEsIHNpemVvZihyZXMtPnN0YXRlaWQuZGF0YSkpOworICAgICAgICBSRUFEX0JVRihORlM0X1NUQVRFSURfU0laRSk7CisgICAgICAgIENPUFlNRU0ocmVzLT5zdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAogICAgICAgICBkZWNvZGVfY2hhbmdlX2luZm8oeGRyLCAmcmVzLT5jaW5mbyk7CiAKQEAgLTMyOTksOCArMzMwMiw4IEBACiAgICAgICAgIHN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9PUEVOX0NPTkZJUk0pOwogICAgICAgICBpZiAoc3RhdHVzKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIFJFQURfQlVGKHNpemVvZihyZXMtPnN0YXRlaWQuZGF0YSkpOwotICAgICAgICBDT1BZTUVNKHJlcy0+c3RhdGVpZC5kYXRhLCBzaXplb2YocmVzLT5zdGF0ZWlkLmRhdGEpKTsKKyAgICAgICAgUkVBRF9CVUYoTkZTNF9TVEFURUlEX1NJWkUpOworICAgICAgICBDT1BZTUVNKHJlcy0+c3RhdGVpZC5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CiAgICAgICAgIHJldHVybiAwOwogfQogCkBAIC0zMzEyLDggKzMzMTUsOCBAQAogCXN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9PUEVOX0RPV05HUkFERSk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKLQlSRUFEX0JVRihzaXplb2YocmVzLT5zdGF0ZWlkLmRhdGEpKTsKLQlDT1BZTUVNKHJlcy0+c3RhdGVpZC5kYXRhLCBzaXplb2YocmVzLT5zdGF0ZWlkLmRhdGEpKTsKKwlSRUFEX0JVRihORlM0X1NUQVRFSURfU0laRSk7CisJQ09QWU1FTShyZXMtPnN0YXRlaWQuZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOwogCXJldHVybiAwOwogfQogCkBAIC0zNTg3LDkgKzM1OTAsOSBAQAogCX0KIAlSRUFEMzIobmZzZXJyKTsKIAlpZiAobmZzZXJyID09IE5GU19PSykgewotCQlSRUFEX0JVRig4ICsgc2l6ZW9mKGNscC0+Y2xfY29uZmlybS5kYXRhKSk7CisJCVJFQURfQlVGKDggKyBORlM0X1ZFUklGSUVSX1NJWkUpOwogCQlSRUFENjQoY2xwLT5jbF9jbGllbnRpZCk7Ci0JCUNPUFlNRU0oY2xwLT5jbF9jb25maXJtLmRhdGEsIHNpemVvZihjbHAtPmNsX2NvbmZpcm0uZGF0YSkpOworCQlDT1BZTUVNKGNscC0+Y2xfY29uZmlybS5kYXRhLCBORlM0X1ZFUklGSUVSX1NJWkUpOwogCX0gZWxzZSBpZiAobmZzZXJyID09IE5GU0VSUl9DTElEX0lOVVNFKSB7CiAJCXVpbnQzMl90IGxlbjsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL3BhZ2VsaXN0LmMgYi9mcy9uZnMvcGFnZWxpc3QuYwppbmRleCAzODg5NTAxLi5jNWJiNTFhIDEwMDY0NAotLS0gYS9mcy9uZnMvcGFnZWxpc3QuYworKysgYi9mcy9uZnMvcGFnZWxpc3QuYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmZzMy5oPgogI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KQEAgLTIwLDggKzIxLDYgQEAKIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLSNkZWZpbmUgTkZTX1BBUkFOT0lBIDEKLQogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpuZnNfcGFnZV9jYWNoZXA7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mc19wYWdlICoKQEAgLTE2NywxMSArMTY2LDYgQEAKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnJlcS0+d2JfY291bnQpKQogCQlyZXR1cm47CiAKLSNpZmRlZiBORlNfUEFSQU5PSUEKLQlCVUdfT04gKCFsaXN0X2VtcHR5KCZyZXEtPndiX2xpc3QpKTsKLQlCVUdfT04gKE5GU19XQkFDS19CVVNZKHJlcSkpOwotI2VuZGlmCi0KIAkvKiBSZWxlYXNlIHN0cnVjdCBmaWxlIG9yIGNhY2hlZCBjcmVkZW50aWFsICovCiAJbmZzX2NsZWFyX3JlcXVlc3QocmVxKTsKIAlwdXRfbmZzX29wZW5fY29udGV4dChyZXEtPndiX2NvbnRleHQpOwpAQCAtMzYxLDYgKzM1NSwyNiBAQAogCW5mc19wYWdlaW9fZG9pbyhkZXNjKTsKIH0KIAorLyoqCisgKiBuZnNfcGFnZWlvX2NvbmRfY29tcGxldGUgLSBDb25kaXRpb25hbCBJL08gY29tcGxldGlvbgorICogQGRlc2M6IHBvaW50ZXIgdG8gaW8gZGVzY3JpcHRvcgorICogQGluZGV4OiBwYWdlIGluZGV4CisgKgorICogSXQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHByb2Nlc3NlcyBkb24ndCB0cnkgdG8gdGFrZSBsb2NrcworICogb24gbm9uLWNvbnRpZ3VvdXMgcmFuZ2VzIG9mIHBhZ2VzIGFzIHRoYXQgbWlnaHQgZGVhZGxvY2suIFRoaXMKKyAqIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gd2FpdCBvbiBhIGxvY2tlZAorICogbmZzX3BhZ2UuIEl0IHdpbGwgY29tcGxldGUgdGhlIEkvTyBpZiB0aGUgcGFnZSBpbmRleCAnaW5kZXgnCisgKiBpcyBub3QgY29udGlndW91cyB3aXRoIHRoZSBleGlzdGluZyBsaXN0IG9mIHBhZ2VzIGluICdkZXNjJy4KKyAqLwordm9pZCBuZnNfcGFnZWlvX2NvbmRfY29tcGxldGUoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqZGVzYywgcGdvZmZfdCBpbmRleCkKK3sKKwlpZiAoIWxpc3RfZW1wdHkoJmRlc2MtPnBnX2xpc3QpKSB7CisJCXN0cnVjdCBuZnNfcGFnZSAqcHJldiA9IG5mc19saXN0X2VudHJ5KGRlc2MtPnBnX2xpc3QucHJldik7CisJCWlmIChpbmRleCAhPSBwcmV2LT53Yl9pbmRleCArIDEpCisJCQluZnNfcGFnZWlvX2RvaW8oZGVzYyk7CisJfQorfQorCiAjZGVmaW5lIE5GU19TQ0FOX01BWEVOVFJJRVMgMTYKIC8qKgogICogbmZzX3NjYW5fbGlzdCAtIFNjYW4gYSBsaXN0IGZvciBtYXRjaGluZyByZXF1ZXN0cwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3Byb2MuYyBiL2ZzL25mcy9wcm9jLmMKaW5kZXggMWRjZjU2ZC4uN2JlMGVlMiAxMDA2NDQKLS0tIGEvZnMvbmZzL3Byb2MuYworKysgYi9mcy9uZnMvcHJvYy5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX3BhZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZC9iaW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX1BST0MKZGlmZiAtLWdpdCBhL2ZzL25mcy9yZWFkLmMgYi9mcy9uZnMvcmVhZC5jCmluZGV4IDlhNTU4MDcuLjdiZDdjYjkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9yZWFkLmMKKysrIGIvZnMvbmZzL3JlYWQuYwpAQCAtNzksNyArNzksNyBAQAogc3RhdGljCiBpbnQgbmZzX3JldHVybl9lbXB0eV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCW1lbWNsZWFyX2hpZ2hwYWdlX2ZsdXNoKHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CisJemVyb191c2VyX3BhZ2UocGFnZSwgMCwgUEFHRV9DQUNIRV9TSVpFLCBLTV9VU0VSMCk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXJldHVybiAwOwpAQCAtMTAzLDEwICsxMDMsMTAgQEAKIAlwZ2xlbiA9IFBBR0VfQ0FDSEVfU0laRSAtIGJhc2U7CiAJZm9yICg7OykgewogCQlpZiAocmVtYWluZGVyIDw9IHBnbGVuKSB7Ci0JCQltZW1jbGVhcl9oaWdocGFnZV9mbHVzaCgqcGFnZXMsIGJhc2UsIHJlbWFpbmRlcik7CisJCQl6ZXJvX3VzZXJfcGFnZSgqcGFnZXMsIGJhc2UsIHJlbWFpbmRlciwgS01fVVNFUjApOwogCQkJYnJlYWs7CiAJCX0KLQkJbWVtY2xlYXJfaGlnaHBhZ2VfZmx1c2goKnBhZ2VzLCBiYXNlLCBwZ2xlbik7CisJCXplcm9fdXNlcl9wYWdlKCpwYWdlcywgYmFzZSwgcGdsZW4sIEtNX1VTRVIwKTsKIAkJcGFnZXMrKzsKIAkJcmVtYWluZGVyIC09IHBnbGVuOwogCQlwZ2xlbiA9IFBBR0VfQ0FDSEVfU0laRTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogCQlyZXR1cm4gUFRSX0VSUihuZXcpOwogCX0KIAlpZiAobGVuIDwgUEFHRV9DQUNIRV9TSVpFKQotCQltZW1jbGVhcl9oaWdocGFnZV9mbHVzaChwYWdlLCBsZW4sIFBBR0VfQ0FDSEVfU0laRSAtIGxlbik7CisJCXplcm9fdXNlcl9wYWdlKHBhZ2UsIGxlbiwgUEFHRV9DQUNIRV9TSVpFIC0gbGVuLCBLTV9VU0VSMCk7CiAKIAluZnNfbGlzdF9hZGRfcmVxdWVzdChuZXcsICZvbmVfcmVxdWVzdCk7CiAJaWYgKE5GU19TRVJWRVIoaW5vZGUpLT5yc2l6ZSA8IFBBR0VfQ0FDSEVfU0laRSkKQEAgLTUzMiw3ICs1MzIsNyBAQAogCQkJcmV0dXJuIFBUUl9FUlIobmV3KTsKIAl9CiAJaWYgKGxlbiA8IFBBR0VfQ0FDSEVfU0laRSkKLQkJbWVtY2xlYXJfaGlnaHBhZ2VfZmx1c2gocGFnZSwgbGVuLCBQQUdFX0NBQ0hFX1NJWkUgLSBsZW4pOworCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCBsZW4sIFBBR0VfQ0FDSEVfU0laRSAtIGxlbiwgS01fVVNFUjApOwogCW5mc19wYWdlaW9fYWRkX3JlcXVlc3QoZGVzYy0+cGdpbywgbmV3KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9zeW1saW5rLmMgYi9mcy9uZnMvc3ltbGluay5jCmluZGV4IGJjMjgyMTMuLjgzZTg2NWEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zeW1saW5rLmMKKysrIGIvZnMvbmZzL3N5bWxpbmsuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KIAogLyogU3ltbGluayBjYWNoaW5nIGluIHRoZSBwYWdlIGNhY2hlIGlzIGV2ZW4gbW9yZSBzaW1wbGlzdGljCmRpZmYgLS1naXQgYS9mcy9uZnMvd3JpdGUuYyBiL2ZzL25mcy93cml0ZS5jCmluZGV4IDVkNDRiOGIuLmFmMzQ0YTEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy93cml0ZS5jCisrKyBiL2ZzL25mcy93cml0ZS5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgImRlbGVnYXRpb24uaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgpAQCAtNTksNyArNTgsNyBAQAogCXJldHVybiBwOwogfQogCi12b2lkIG5mc19jb21taXRfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQorc3RhdGljIHZvaWQgbmZzX2NvbW1pdF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IG5mc193cml0ZV9kYXRhICpwID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBuZnNfd3JpdGVfZGF0YSwgdGFzay51LnRrX3JjdSk7CiAJaWYgKHAgJiYgKHAtPnBhZ2V2ZWMgIT0gJnAtPnBhZ2VfYXJyYXlbMF0pKQpAQCAtMTY5LDcgKzE2OCw3IEBACiAJaWYgKGNvdW50ICE9IG5mc19wYWdlX2xlbmd0aChwYWdlKSkKIAkJcmV0dXJuOwogCWlmIChjb3VudCAhPSBQQUdFX0NBQ0hFX1NJWkUpCi0JCW1lbWNsZWFyX2hpZ2hwYWdlX2ZsdXNoKHBhZ2UsIGNvdW50LCBQQUdFX0NBQ0hFX1NJWkUgLSBjb3VudCk7CisJCXplcm9fdXNlcl9wYWdlKHBhZ2UsIGNvdW50LCBQQUdFX0NBQ0hFX1NJWkUgLSBjb3VudCwgS01fVVNFUjApOwogCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIH0KIApAQCAtMjI1LDcgKzIyNCw3IEBACiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCQlzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcyA9IE5GU19TRVJWRVIoaW5vZGUpOwogCi0JCWlmIChhdG9taWNfaW5jX3JldHVybigmbmZzcy0+d3JpdGViYWNrKSA+CisJCWlmIChhdG9taWNfbG9uZ19pbmNfcmV0dXJuKCZuZnNzLT53cml0ZWJhY2spID4KIAkJCQlORlNfQ09OR0VTVElPTl9PTl9USFJFU0gpCiAJCQlzZXRfYmRpX2Nvbmdlc3RlZCgmbmZzcy0+YmFja2luZ19kZXZfaW5mbywgV1JJVEUpOwogCX0KQEAgLTIzOCw3ICsyMzcsNyBAQAogCXN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gTkZTX1NFUlZFUihpbm9kZSk7CiAKIAllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7Ci0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZuZnNzLT53cml0ZWJhY2spIDwgTkZTX0NPTkdFU1RJT05fT0ZGX1RIUkVTSCkgeworCWlmIChhdG9taWNfbG9uZ19kZWNfcmV0dXJuKCZuZnNzLT53cml0ZWJhY2spIDwgTkZTX0NPTkdFU1RJT05fT0ZGX1RIUkVTSCkgewogCQljbGVhcl9iZGlfY29uZ2VzdGVkKCZuZnNzLT5iYWNraW5nX2Rldl9pbmZvLCBXUklURSk7CiAJCWNvbmdlc3Rpb25fZW5kKFdSSVRFKTsKIAl9CkBAIC0yNzQsOCArMjczLDYgQEAKIAkJICoJIHJlcXVlc3QgYXMgZGlydHkgKGluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgY2FyZSkuCiAJCSAqLwogCQlzcGluX3VubG9jayhyZXFfbG9jayk7Ci0JCS8qIFByZXZlbnQgZGVhZGxvY2shICovCi0JCW5mc19wYWdlaW9fY29tcGxldGUocGdpbyk7CiAJCXJldCA9IG5mc193YWl0X29uX3JlcXVlc3QocmVxKTsKIAkJbmZzX3JlbGVhc2VfcmVxdWVzdChyZXEpOwogCQlpZiAocmV0ICE9IDApCkBAIC0zMjIsNiArMzE5LDggQEAKIAkJcGdpbyA9ICZteXBnaW87CiAJfQogCisJbmZzX3BhZ2Vpb19jb25kX2NvbXBsZXRlKHBnaW8sIHBhZ2UtPmluZGV4KTsKKwogCWVyciA9IG5mc19wYWdlX2FzeW5jX2ZsdXNoKHBnaW8sIHBhZ2UpOwogCWlmIChlcnIgPD0gMCkKIAkJZ290byBvdXQ7CkBAIC0zMzAsNiArMzI5LDggQEAKIAlpZiAoIW9mZnNldCkKIAkJZ290byBvdXQ7CiAKKwluZnNfcGFnZWlvX2NvbmRfY29tcGxldGUocGdpbywgcGFnZS0+aW5kZXgpOworCiAJY3R4ID0gbmZzX2ZpbmRfb3Blbl9jb250ZXh0KGlub2RlLCBOVUxMLCBGTU9ERV9XUklURSk7CiAJaWYgKGN0eCA9PSBOVUxMKSB7CiAJCWVyciA9IC1FQkFERjsKQEAgLTkyMyw3ICs5MjQsNyBAQAogCXJldHVybiAwOwogIG91dF9iYWQ6CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7Ci0JCXN0cnVjdCBuZnNfcGFnZSAqcmVxID0gbmZzX2xpc3RfZW50cnkoaGVhZC0+bmV4dCk7CisJCXJlcSA9IG5mc19saXN0X2VudHJ5KGhlYWQtPm5leHQpOwogCQluZnNfbGlzdF9yZW1vdmVfcmVxdWVzdChyZXEpOwogCQluZnNfcmVkaXJ0eV9yZXF1ZXN0KHJlcSk7CiAJCW5mc19lbmRfcGFnZV93cml0ZWJhY2socmVxLT53Yl9wYWdlKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvTWFrZWZpbGUgYi9mcy9uZnNkL01ha2VmaWxlCmluZGV4IGNlMzQxZGMuLjliMTE4ZWUgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvTWFrZWZpbGUKKysrIGIvZnMvbmZzZC9NYWtlZmlsZQpAQCAtMTEsNCArMTEsMyBAQAogbmZzZC0kKENPTkZJR19ORlNEX1YzX0FDTCkgKz0gbmZzM2FjbC5vCiBuZnNkLSQoQ09ORklHX05GU0RfVjQpCSs9IG5mczRwcm9jLm8gbmZzNHhkci5vIG5mczRzdGF0ZS5vIG5mczRpZG1hcC5vIFwKIAkJCSAgIG5mczRhY2wubyBuZnM0Y2FsbGJhY2subyBuZnM0cmVjb3Zlci5vCi1uZnNkLW9ianMJCTo9ICQobmZzZC15KQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9leHBvcnQuYyBiL2ZzL25mc2QvZXhwb3J0LmMKaW5kZXggNmYyNDc2OC4uNzliZDAzYiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9leHBvcnQuYworKysgYi9mcy9uZnNkL2V4cG9ydC5jCkBAIC00NjksNiArNDY5LDEzIEBACiAJbmQuZGVudHJ5ID0gTlVMTDsKIAlleHAuZXhfcGF0aCA9IE5VTEw7CiAKKwkvKiBmcyBsb2NhdGlvbnMgKi8KKwlleHAuZXhfZnNsb2NzLmxvY2F0aW9ucyA9IE5VTEw7CisJZXhwLmV4X2ZzbG9jcy5sb2NhdGlvbnNfY291bnQgPSAwOworCWV4cC5leF9mc2xvY3MubWlncmF0ZWQgPSAwOworCisJZXhwLmV4X3V1aWQgPSBOVUxMOworCiAJaWYgKG1lc2dbbWxlbi0xXSAhPSAnXG4nKQogCQlyZXR1cm4gLUVJTlZBTDsKIAltZXNnW21sZW4tMV0gPSAwOwpAQCAtNTA5LDEzICs1MTYsNiBAQAogCWlmIChleHAuaC5leHBpcnlfdGltZSA9PSAwKQogCQlnb3RvIG91dDsKIAotCS8qIGZzIGxvY2F0aW9ucyAqLwotCWV4cC5leF9mc2xvY3MubG9jYXRpb25zID0gTlVMTDsKLQlleHAuZXhfZnNsb2NzLmxvY2F0aW9uc19jb3VudCA9IDA7Ci0JZXhwLmV4X2ZzbG9jcy5taWdyYXRlZCA9IDA7Ci0KLQlleHAuZXhfdXVpZCA9IE5VTEw7Ci0KIAkvKiBmbGFncyAqLwogCWVyciA9IGdldF9pbnQoJm1lc2csICZhbl9pbnQpOwogCWlmIChlcnIgPT0gLUVOT0VOVCkKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzM3Byb2MuYyBiL2ZzL25mc2QvbmZzM3Byb2MuYwppbmRleCA3ZjViYWQwLi5lYWM4MjgzIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczNwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnMzcHJvYy5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAlpZiAobWF4X2Jsb2Nrc2l6ZSA8IHJlc3AtPmNvdW50KQogCQlyZXNwLT5jb3VudCA9IG1heF9ibG9ja3NpemU7CiAKLQlzdmNfcmVzZXJ2ZShycXN0cCwgKCgxICsgTkZTM19QT1NUX09QX0FUVFJfV09SRFMgKyAzKTw8MikgKyByZXNwLT5jb3VudCArNCk7CisJc3ZjX3Jlc2VydmVfYXV0aChycXN0cCwgKCgxICsgTkZTM19QT1NUX09QX0FUVFJfV09SRFMgKyAzKTw8MikgKyByZXNwLT5jb3VudCArNCk7CiAKIAlmaF9jb3B5KCZyZXNwLT5maCwgJmFyZ3AtPmZoKTsKIAluZnNlcnIgPSBuZnNkX3JlYWQocnFzdHAsICZyZXNwLT5maCwgTlVMTCwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzM3hkci5jIGIvZnMvbmZzZC9uZnMzeGRyLmMKaW5kZXggN2U0YmIwYS4uMTBmNmU3ZCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnMzeGRyLmMKKysrIGIvZnMvbmZzZC9uZnMzeGRyLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogZW5jb2RlX3Bvc3Rfb3BfYXR0cihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsIHN0cnVjdCBzdmNfZmggKmZocCkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaHAtPmZoX2RlbnRyeTsKLQlpZiAoZGVudHJ5ICYmIGRlbnRyeS0+ZF9pbm9kZSAhPSBOVUxMKSB7CisJaWYgKGRlbnRyeSAmJiBkZW50cnktPmRfaW5vZGUpIHsKIAkgICAgICAgIGludCBlcnI7CiAJCXN0cnVjdCBrc3RhdCBzdGF0OwogCkBAIC0zMDAsOSArMzAwLDkgQEAKIG5mczNzdmNfZGVjb2RlX3NhdHRyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsCiAJCQkJCXN0cnVjdCBuZnNkM19zYXR0cmFyZ3MgKmFyZ3MpCiB7Ci0JaWYgKCEocCA9IGRlY29kZV9maChwLCAmYXJncy0+ZmgpKQotCSB8fCAhKHAgPSBkZWNvZGVfc2F0dHIzKHAsICZhcmdzLT5hdHRycykpKQorCWlmICghKHAgPSBkZWNvZGVfZmgocCwgJmFyZ3MtPmZoKSkpCiAJCXJldHVybiAwOworCXAgPSBkZWNvZGVfc2F0dHIzKHAsICZhcmdzLT5hdHRycyk7CiAKIAlpZiAoKGFyZ3MtPmNoZWNrX2d1YXJkID0gbnRvaGwoKnArKykpICE9IDApIHsgCiAJCXN0cnVjdCB0aW1lc3BlYyB0aW1lOyAKQEAgLTM0Myw5ICszNDMsOSBAQAogCWludCB2LHBuOwogCXUzMiBtYXhfYmxvY2tzaXplID0gc3ZjX21heF9wYXlsb2FkKHJxc3RwKTsKIAotCWlmICghKHAgPSBkZWNvZGVfZmgocCwgJmFyZ3MtPmZoKSkKLQkgfHwgIShwID0geGRyX2RlY29kZV9oeXBlcihwLCAmYXJncy0+b2Zmc2V0KSkpCisJaWYgKCEocCA9IGRlY29kZV9maChwLCAmYXJncy0+ZmgpKSkKIAkJcmV0dXJuIDA7CisJcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmFyZ3MtPm9mZnNldCk7CiAKIAlsZW4gPSBhcmdzLT5jb3VudCA9IG50b2hsKCpwKyspOwogCkBAIC0zNjksMjggKzM2OSw0NCBAQAogbmZzM3N2Y19kZWNvZGVfd3JpdGVhcmdzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwKIAkJCQkJc3RydWN0IG5mc2QzX3dyaXRlYXJncyAqYXJncykKIHsKLQl1bnNpZ25lZCBpbnQgbGVuLCB2LCBoZHI7CisJdW5zaWduZWQgaW50IGxlbiwgdiwgaGRyLCBkbGVuOwogCXUzMiBtYXhfYmxvY2tzaXplID0gc3ZjX21heF9wYXlsb2FkKHJxc3RwKTsKIAotCWlmICghKHAgPSBkZWNvZGVfZmgocCwgJmFyZ3MtPmZoKSkKLQkgfHwgIShwID0geGRyX2RlY29kZV9oeXBlcihwLCAmYXJncy0+b2Zmc2V0KSkpCisJaWYgKCEocCA9IGRlY29kZV9maChwLCAmYXJncy0+ZmgpKSkKIAkJcmV0dXJuIDA7CisJcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmFyZ3MtPm9mZnNldCk7CiAKIAlhcmdzLT5jb3VudCA9IG50b2hsKCpwKyspOwogCWFyZ3MtPnN0YWJsZSA9IG50b2hsKCpwKyspOwogCWxlbiA9IGFyZ3MtPmxlbiA9IG50b2hsKCpwKyspOwotCi0JaGRyID0gKHZvaWQqKXAgLSBycXN0cC0+cnFfYXJnLmhlYWRbMF0uaW92X2Jhc2U7Ci0JaWYgKHJxc3RwLT5ycV9hcmcubGVuIDwgaGRyIHx8Ci0JICAgIHJxc3RwLT5ycV9hcmcubGVuIC0gaGRyIDwgbGVuKQorCS8qCisJICogVGhlIGNvdW50IG11c3QgZXF1YWwgdGhlIGFtb3VudCBvZiBkYXRhIHBhc3NlZC4KKwkgKi8KKwlpZiAoYXJncy0+Y291bnQgIT0gYXJncy0+bGVuKQogCQlyZXR1cm4gMDsKIAorCS8qCisJICogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZ290IHRoZSByaWdodCBudW1iZXIgb2YKKwkgKiBieXRlcy4KKwkgKi8KKwloZHIgPSAodm9pZCopcCAtIHJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfYmFzZTsKKwlkbGVuID0gcnFzdHAtPnJxX2FyZy5oZWFkWzBdLmlvdl9sZW4gKyBycXN0cC0+cnFfYXJnLnBhZ2VfbGVuCisJCS0gaGRyOworCS8qCisJICogUm91bmQgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB3aGljaCB3YXMgc3BlY2lmaWVkIHVwIHRvCisJICogdGhlIG5leHQgbXVsdGlwbGUgb2YgWERSIHVuaXRzIGFuZCB0aGVuIGNvbXBhcmUgdGhhdAorCSAqIGFnYWluc3QgdGhlIGxlbmd0aCB3aGljaCB3YXMgYWN0dWFsbHkgcmVjZWl2ZWQuCisJICovCisJaWYgKGRsZW4gIT0gWERSX1FVQURMRU4obGVuKSo0KQorCQlyZXR1cm4gMDsKKworCWlmIChhcmdzLT5jb3VudCA+IG1heF9ibG9ja3NpemUpIHsKKwkJYXJncy0+Y291bnQgPSBtYXhfYmxvY2tzaXplOworCQlsZW4gPSBhcmdzLT5sZW4gPSBtYXhfYmxvY2tzaXplOworCX0KIAlycXN0cC0+cnFfdmVjWzBdLmlvdl9iYXNlID0gKHZvaWQqKXA7CiAJcnFzdHAtPnJxX3ZlY1swXS5pb3ZfbGVuID0gcnFzdHAtPnJxX2FyZy5oZWFkWzBdLmlvdl9sZW4gLSBoZHI7Ci0KLQlpZiAobGVuID4gbWF4X2Jsb2Nrc2l6ZSkKLQkJbGVuID0gbWF4X2Jsb2Nrc2l6ZTsKLQl2PSAgMDsKKwl2ID0gMDsKIAl3aGlsZSAobGVuID4gcnFzdHAtPnJxX3ZlY1t2XS5pb3ZfbGVuKSB7CiAJCWxlbiAtPSBycXN0cC0+cnFfdmVjW3ZdLmlvdl9sZW47CiAJCXYrKzsKQEAgLTM5OCw5ICs0MTQsOCBAQAogCQlycXN0cC0+cnFfdmVjW3ZdLmlvdl9sZW4gPSBQQUdFX1NJWkU7CiAJfQogCXJxc3RwLT5ycV92ZWNbdl0uaW92X2xlbiA9IGxlbjsKLQlhcmdzLT52bGVuID0gdisxOwotCi0JcmV0dXJuIGFyZ3MtPmNvdW50ID09IGFyZ3MtPmxlbiAmJiBycXN0cC0+cnFfdmVjWzBdLmlvdl9sZW4gPiAwOworCWFyZ3MtPnZsZW4gPSB2ICsgMTsKKwlyZXR1cm4gMTsKIH0KIAogaW50CkBAIC00MTQsOCArNDI5LDcgQEAKIAlzd2l0Y2ggKGFyZ3MtPmNyZWF0ZW1vZGUgPSBudG9obCgqcCsrKSkgewogCWNhc2UgTkZTM19DUkVBVEVfVU5DSEVDS0VEOgogCWNhc2UgTkZTM19DUkVBVEVfR1VBUkRFRDoKLQkJaWYgKCEocCA9IGRlY29kZV9zYXR0cjMocCwgJmFyZ3MtPmF0dHJzKSkpCi0JCQlyZXR1cm4gMDsKKwkJcCA9IGRlY29kZV9zYXR0cjMocCwgJmFyZ3MtPmF0dHJzKTsKIAkJYnJlYWs7CiAJY2FzZSBORlMzX0NSRUFURV9FWENMVVNJVkU6CiAJCWFyZ3MtPnZlcmYgPSBwOwpAQCAtNDMxLDEwICs0NDUsMTAgQEAKIG5mczNzdmNfZGVjb2RlX21rZGlyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsCiAJCQkJCXN0cnVjdCBuZnNkM19jcmVhdGVhcmdzICphcmdzKQogewotCWlmICghKHAgPSBkZWNvZGVfZmgocCwgJmFyZ3MtPmZoKSkKLQkgfHwgIShwID0gZGVjb2RlX2ZpbGVuYW1lKHAsICZhcmdzLT5uYW1lLCAmYXJncy0+bGVuKSkKLQkgfHwgIShwID0gZGVjb2RlX3NhdHRyMyhwLCAmYXJncy0+YXR0cnMpKSkKKwlpZiAoIShwID0gZGVjb2RlX2ZoKHAsICZhcmdzLT5maCkpIHx8CisJICAgICEocCA9IGRlY29kZV9maWxlbmFtZShwLCAmYXJncy0+bmFtZSwgJmFyZ3MtPmxlbikpKQogCQlyZXR1cm4gMDsKKwlwID0gZGVjb2RlX3NhdHRyMyhwLCAmYXJncy0+YXR0cnMpOwogCiAJcmV0dXJuIHhkcl9hcmdzaXplX2NoZWNrKHJxc3RwLCBwKTsKIH0KQEAgLTQ0OCwxMSArNDYyLDEyIEBACiAJY2hhciAqb2xkLCAqbmV3OwogCXN0cnVjdCBrdmVjICp2ZWM7CiAKLQlpZiAoIShwID0gZGVjb2RlX2ZoKHAsICZhcmdzLT5mZmgpKQotCSB8fCAhKHAgPSBkZWNvZGVfZmlsZW5hbWUocCwgJmFyZ3MtPmZuYW1lLCAmYXJncy0+ZmxlbikpCi0JIHx8ICEocCA9IGRlY29kZV9zYXR0cjMocCwgJmFyZ3MtPmF0dHJzKSkKKwlpZiAoIShwID0gZGVjb2RlX2ZoKHAsICZhcmdzLT5mZmgpKSB8fAorCSAgICAhKHAgPSBkZWNvZGVfZmlsZW5hbWUocCwgJmFyZ3MtPmZuYW1lLCAmYXJncy0+ZmxlbikpCiAJCSkKIAkJcmV0dXJuIDA7CisJcCA9IGRlY29kZV9zYXR0cjMocCwgJmFyZ3MtPmF0dHJzKTsKKwogCS8qIG5vdyBkZWNvZGUgdGhlIHBhdGhuYW1lLCB3aGljaCBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgZmlyc3QgcGFnZS4KIAkgKiBBcyB3ZSBoYXZlIHRvIGNoZWNrIGZvciBudWwncyBhbnl3YXksIHdlIGNvcHkgaXQgaW50byBhIG5ldyBwYWdlCiAJICogVGhpcyBwYWdlIGFwcGVhcnMgaW4gdGhlIHJxX3Jlcy5wYWdlcyBsaXN0LCBidXQgYXMgcGFnZXNfbGVuIGlzIGFsd2F5cwpAQCAtNTAyLDEwICs1MTcsOCBAQAogCWFyZ3MtPmZ0eXBlID0gbnRvaGwoKnArKyk7CiAKIAlpZiAoYXJncy0+ZnR5cGUgPT0gTkYzQkxLICB8fCBhcmdzLT5mdHlwZSA9PSBORjNDSFIKLQkgfHwgYXJncy0+ZnR5cGUgPT0gTkYzU09DSyB8fCBhcmdzLT5mdHlwZSA9PSBORjNGSUZPKSB7Ci0JCWlmICghKHAgPSBkZWNvZGVfc2F0dHIzKHAsICZhcmdzLT5hdHRycykpKQotCQkJcmV0dXJuIDA7Ci0JfQorCSB8fCBhcmdzLT5mdHlwZSA9PSBORjNTT0NLIHx8IGFyZ3MtPmZ0eXBlID09IE5GM0ZJRk8pCisJCXAgPSBkZWNvZGVfc2F0dHIzKHAsICZhcmdzLT5hdHRycyk7CiAKIAlpZiAoYXJncy0+ZnR5cGUgPT0gTkYzQkxLIHx8IGFyZ3MtPmZ0eXBlID09IE5GM0NIUikgewogCQlhcmdzLT5tYWpvciA9IG50b2hsKCpwKyspOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0YWNsLmMgYi9mcy9uZnNkL25mczRhY2wuYwppbmRleCA2NzNhNTNjLi5jYzNiN2JhIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRhY2wuYworKysgYi9mcy9uZnNkL25mczRhY2wuYwpAQCAtMTM3LDcgKzEzNyw2IEBACiBzdGF0aWMgc2hvcnQgYWNlMnR5cGUoc3RydWN0IG5mczRfYWNlICopOwogc3RhdGljIHZvaWQgX3Bvc2l4X3RvX25mc3Y0X29uZShzdHJ1Y3QgcG9zaXhfYWNsICosIHN0cnVjdCBuZnM0X2FjbCAqLAogCQkJCXVuc2lnbmVkIGludCk7Ci12b2lkIG5mczRfYWNsX2FkZF9hY2Uoc3RydWN0IG5mczRfYWNsICosIHUzMiwgdTMyLCB1MzIsIGludCwgdWlkX3QpOwogCiBzdHJ1Y3QgbmZzNF9hY2wgKgogbmZzNF9hY2xfcG9zaXhfdG9fbmZzdjQoc3RydWN0IHBvc2l4X2FjbCAqcGFjbCwgc3RydWN0IHBvc2l4X2FjbCAqZHBhY2wsCkBAIC03ODUsMjEgKzc4NCw2IEBACiAJcmV0dXJuIGFjbDsKIH0KIAotdm9pZAotbmZzNF9hY2xfYWRkX2FjZShzdHJ1Y3QgbmZzNF9hY2wgKmFjbCwgdTMyIHR5cGUsIHUzMiBmbGFnLCB1MzIgYWNjZXNzX21hc2ssCi0JCWludCB3aG90eXBlLCB1aWRfdCB3aG8pCi17Ci0Jc3RydWN0IG5mczRfYWNlICphY2UgPSBhY2wtPmFjZXMgKyBhY2wtPm5hY2VzOwotCi0JYWNlLT50eXBlID0gdHlwZTsKLQlhY2UtPmZsYWcgPSBmbGFnOwotCWFjZS0+YWNjZXNzX21hc2sgPSBhY2Nlc3NfbWFzazsKLQlhY2UtPndob3R5cGUgPSB3aG90eXBlOwotCWFjZS0+d2hvID0gd2hvOwotCi0JYWNsLT5uYWNlcysrOwotfQotCiBzdGF0aWMgc3RydWN0IHsKIAljaGFyICpzdHJpbmc7CiAJaW50ICAgc3RyaW5nbGVuOwpAQCAtODUxLDYgKzgzNSw1IEBACiB9CiAKIEVYUE9SVF9TWU1CT0wobmZzNF9hY2xfbmV3KTsKLUVYUE9SVF9TWU1CT0wobmZzNF9hY2xfYWRkX2FjZSk7CiBFWFBPUlRfU1lNQk9MKG5mczRfYWNsX2dldF93aG90eXBlKTsKIEVYUE9SVF9TWU1CT0wobmZzNF9hY2xfd3JpdGVfd2hvKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCmluZGV4IDMyZmZlYTAuLjg2NDA5MGUgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKKysrIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRpZG1hcC5jIGIvZnMvbmZzZC9uZnM0aWRtYXAuYwppbmRleCBlNGE4M2Q3Li40NWFhMjFjIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRpZG1hcC5jCisrKyBiL2ZzL25mc2QvbmZzNGlkbWFwLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZnM0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX3BhZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L25mc2RfaWRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRyZWNvdmVyLmMgYi9mcy9uZnNkL25mczRyZWNvdmVyLmMKaW5kZXggYzc3NzRlMy4uZWJkMDNjYyAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCisrKyBiL2ZzL25mc2QvbmZzNHJlY292ZXIuYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjZGVmaW5lIE5GU0REQkdfRkFDSUxJVFkgICAgICAgICAgICAgICAgTkZTRERCR19QUk9DCiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IDY3OGYzYmUuLjNjYzhjZTQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtMTMyNiw4ICsxMzI2LDYgQEAKIHsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCA9IF9fZHA7CiAKLQlkYWVtb25pemUoIm5mc3Y0LXJlY2FsbCIpOwotCiAJbmZzZDRfY2JfcmVjYWxsKGRwKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHhkci5jIGIvZnMvbmZzZC9uZnM0eGRyLmMKaW5kZXggNWQwOTBmMS4uMTU4MDlkZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0eGRyLmMKKysrIGIvZnMvbmZzZC9uZnM0eGRyLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2ZoLmMgYi9mcy9uZnNkL25mc2ZoLmMKaW5kZXggOGQ5OTViYy4uNmNhMmQyNCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNmaC5jCisrKyBiL2ZzL25mc2QvbmZzZmguYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMzI0LDcgKzMyMyw3IEBACiAJICoKIAkgKi8KIAotCXU4IHZlcnNpb24gPSAxOworCXU4IHZlcnNpb247CiAJdTggZnNpZF90eXBlID0gMDsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OwpAQCAtMzQyLDE1ICszNDEsNTkgQEAKIAkgKiB0aGUgcmVmZXJlbmNlIGZpbGVoYW5kbGUgKGlmIGl0IGlzIGluIHRoZSBzYW1lIGV4cG9ydCkKIAkgKiBvciB0aGUgZXhwb3J0IG9wdGlvbnMuCiAJICovCisgcmV0cnk6CisJdmVyc2lvbiA9IDE7CiAJaWYgKHJlZl9maCAmJiByZWZfZmgtPmZoX2V4cG9ydCA9PSBleHApIHsKIAkJdmVyc2lvbiA9IHJlZl9maC0+ZmhfaGFuZGxlLmZoX3ZlcnNpb247Ci0JCWlmICh2ZXJzaW9uID09IDB4Y2EpCisJCWZzaWRfdHlwZSA9IHJlZl9maC0+ZmhfaGFuZGxlLmZoX2ZzaWRfdHlwZTsKKworCQlpZiAocmVmX2ZoID09IGZocCkKKwkJCWZoX3B1dChyZWZfZmgpOworCQlyZWZfZmggPSBOVUxMOworCisJCXN3aXRjaCAodmVyc2lvbikgeworCQljYXNlIDB4Y2E6CiAJCQlmc2lkX3R5cGUgPSBGU0lEX0RFVjsKLQkJZWxzZQotCQkJZnNpZF90eXBlID0gcmVmX2ZoLT5maF9oYW5kbGUuZmhfZnNpZF90eXBlOwotCQkvKiBXZSBrbm93IHRoaXMgdmVyc2lvbi90eXBlIHdvcmtzIGZvciB0aGlzIGV4cG9ydAotCQkgKiBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBmdXJ0aGVyIGNoZWNrcy4KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gcmV0cnk7CisJCX0KKworCQkvKiBOZWVkIHRvIGNoZWNrIHRoYXQgdGhpcyB0eXBlIHdvcmtzIGZvciB0aGlzCisJCSAqIGV4cG9ydCBwb2ludC4gIEFzIHRoZSBmc2lkIC0+IGZpbGVzeXN0ZW0gbWFwcGluZworCQkgKiB3YXMgZ3VpZGVkIGJ5IHVzZXItc3BhY2UsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZQorCQkgKiB0aGF0IHRoZSBmaWxlc3lzdGVtIGFjdHVhbGx5IHN1cHBvcnRzIHRoYXQgZnNpZAorCQkgKiB0eXBlLiBJZiBpdCBkb2Vzbid0IHdlIGxvb3AgYXJvdW5kIGFnYWluIHdpdGhvdXQKKwkJICogcmVmX2ZoIHNldC4KIAkJICovCisJCXN3aXRjaChmc2lkX3R5cGUpIHsKKwkJY2FzZSBGU0lEX0RFVjoKKwkJCWlmICghb2xkX3ZhbGlkX2RldihleF9kZXYpKQorCQkJCWdvdG8gcmV0cnk7CisJCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwkJY2FzZSBGU0lEX01BSk9SX01JTk9SOgorCQljYXNlIEZTSURfRU5DT0RFX0RFVjoKKwkJCWlmICghKGV4cC0+ZXhfZGVudHJ5LT5kX2lub2RlLT5pX3NiLT5zX3R5cGUtPmZzX2ZsYWdzCisJCQkgICAgICAmIEZTX1JFUVVJUkVTX0RFVikpCisJCQkJZ290byByZXRyeTsKKwkJCWJyZWFrOworCQljYXNlIEZTSURfTlVNOgorCQkJaWYgKCEgKGV4cC0+ZXhfZmxhZ3MgJiBORlNFWFBfRlNJRCkpCisJCQkJZ290byByZXRyeTsKKwkJCWJyZWFrOworCQljYXNlIEZTSURfVVVJRDg6CisJCWNhc2UgRlNJRF9VVUlEMTY6CisJCQlpZiAoIXJvb3RfZXhwb3J0KQorCQkJCWdvdG8gcmV0cnk7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBGU0lEX1VVSUQ0X0lOVU06CisJCWNhc2UgRlNJRF9VVUlEMTZfSU5VTToKKwkJCWlmIChleHAtPmV4X3V1aWQgPT0gTlVMTCkKKwkJCQlnb3RvIHJldHJ5OworCQkJYnJlYWs7CisJCX0KIAl9IGVsc2UgaWYgKGV4cC0+ZXhfdXVpZCkgewogCQlpZiAoZmhwLT5maF9tYXhzaXplID49IDY0KSB7CiAJCQlpZiAocm9vdF9leHBvcnQpCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc3Byb2MuYyBiL2ZzL25mc2QvbmZzcHJvYy5jCmluZGV4IDVjYzJlZWMuLmIyYzcxNDcgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzcHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzcHJvYy5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAkJCQlhcmdwLT5jb3VudCk7CiAJCWFyZ3AtPmNvdW50ID0gTkZTU1ZDX01BWEJMS1NJWkVfVjI7CiAJfQotCXN2Y19yZXNlcnZlKHJxc3RwLCAoMTk8PDIpICsgYXJncC0+Y291bnQgKyA0KTsKKwlzdmNfcmVzZXJ2ZV9hdXRoKHJxc3RwLCAoMTk8PDIpICsgYXJncC0+Y291bnQgKyA0KTsKIAogCXJlc3AtPmNvdW50ID0gYXJncC0+Y291bnQ7CiAJbmZzZXJyID0gbmZzZF9yZWFkKHJxc3RwLCBmaF9jb3B5KCZyZXNwLT5maCwgJmFyZ3AtPmZoKSwgTlVMTCwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzc3ZjLmMgYi9mcy9uZnNkL25mc3N2Yy5jCmluZGV4IGQ3NzU5Y2UuLmZmNTU5NTAgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzc3ZjLmMKKysrIGIvZnMvbmZzZC9uZnNzdmMuYwpAQCAtOSw3ICs5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L25mcy5oPgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnN4ZHIuYyBiL2ZzL25mc2QvbmZzeGRyLmMKaW5kZXggMGMyNGI5ZS4uY2IzZTdmYSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnN4ZHIuYworKysgYi9mcy9uZnNkL25mc3hkci5jCkBAIC0yMzEsOSArMjMxLDEwIEBACiBuZnNzdmNfZGVjb2RlX3NhdHRyYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsCiAJCQkJCXN0cnVjdCBuZnNkX3NhdHRyYXJncyAqYXJncykKIHsKLQlpZiAoIShwID0gZGVjb2RlX2ZoKHAsICZhcmdzLT5maCkpCi0JIHx8ICEocCA9IGRlY29kZV9zYXR0cihwLCAmYXJncy0+YXR0cnMpKSkKKwlwID0gZGVjb2RlX2ZoKHAsICZhcmdzLT5maCk7CisJaWYgKCFwKQogCQlyZXR1cm4gMDsKKwlwID0gZGVjb2RlX3NhdHRyKHAsICZhcmdzLT5hdHRycyk7CiAKIAlyZXR1cm4geGRyX2FyZ3NpemVfY2hlY2socnFzdHAsIHApOwogfQpAQCAtMjg0LDggKzI4NSw5IEBACiBuZnNzdmNfZGVjb2RlX3dyaXRlYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsCiAJCQkJCXN0cnVjdCBuZnNkX3dyaXRlYXJncyAqYXJncykKIHsKLQl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGludCBsZW4sIGhkciwgZGxlbjsKIAlpbnQgdjsKKwogCWlmICghKHAgPSBkZWNvZGVfZmgocCwgJmFyZ3MtPmZoKSkpCiAJCXJldHVybiAwOwogCkBAIC0yOTMsMTEgKzI5NSwzMCBAQAogCWFyZ3MtPm9mZnNldCA9IG50b2hsKCpwKyspOwkvKiBvZmZzZXQgKi8KIAlwKys7CQkJCS8qIHRvdGFsY291bnQgKi8KIAlsZW4gPSBhcmdzLT5sZW4gPSBudG9obCgqcCsrKTsKLQlycXN0cC0+cnFfdmVjWzBdLmlvdl9iYXNlID0gKHZvaWQqKXA7Ci0JcnFzdHAtPnJxX3ZlY1swXS5pb3ZfbGVuID0gcnFzdHAtPnJxX2FyZy5oZWFkWzBdLmlvdl9sZW4gLQotCQkJCSgoKHZvaWQqKXApIC0gcnFzdHAtPnJxX2FyZy5oZWFkWzBdLmlvdl9iYXNlKTsKKwkvKgorCSAqIFRoZSBwcm90b2NvbCBzcGVjaWZpZXMgYSBtYXhpbXVtIG9mIDgxOTIgYnl0ZXMuCisJICovCiAJaWYgKGxlbiA+IE5GU1NWQ19NQVhCTEtTSVpFX1YyKQotCQlsZW4gPSBORlNTVkNfTUFYQkxLU0laRV9WMjsKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGdvdCB0aGUgcmlnaHQgbnVtYmVyIG9mCisJICogYnl0ZXMuCisJICovCisJaGRyID0gKHZvaWQqKXAgLSBycXN0cC0+cnFfYXJnLmhlYWRbMF0uaW92X2Jhc2U7CisJZGxlbiA9IHJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfbGVuICsgcnFzdHAtPnJxX2FyZy5wYWdlX2xlbgorCQktIGhkcjsKKworCS8qCisJICogUm91bmQgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB3aGljaCB3YXMgc3BlY2lmaWVkIHVwIHRvCisJICogdGhlIG5leHQgbXVsdGlwbGUgb2YgWERSIHVuaXRzIGFuZCB0aGVuIGNvbXBhcmUgdGhhdAorCSAqIGFnYWluc3QgdGhlIGxlbmd0aCB3aGljaCB3YXMgYWN0dWFsbHkgcmVjZWl2ZWQuCisJICovCisJaWYgKGRsZW4gIT0gWERSX1FVQURMRU4obGVuKSo0KQorCQlyZXR1cm4gMDsKKworCXJxc3RwLT5ycV92ZWNbMF0uaW92X2Jhc2UgPSAodm9pZCopcDsKKwlycXN0cC0+cnFfdmVjWzBdLmlvdl9sZW4gPSBycXN0cC0+cnFfYXJnLmhlYWRbMF0uaW92X2xlbiAtIGhkcjsKIAl2ID0gMDsKIAl3aGlsZSAobGVuID4gcnFzdHAtPnJxX3ZlY1t2XS5pb3ZfbGVuKSB7CiAJCWxlbiAtPSBycXN0cC0+cnFfdmVjW3ZdLmlvdl9sZW47CkBAIC0zMDYsMTggKzMyNywxOCBAQAogCQlycXN0cC0+cnFfdmVjW3ZdLmlvdl9sZW4gPSBQQUdFX1NJWkU7CiAJfQogCXJxc3RwLT5ycV92ZWNbdl0uaW92X2xlbiA9IGxlbjsKLQlhcmdzLT52bGVuID0gdisxOwotCXJldHVybiBycXN0cC0+cnFfdmVjWzBdLmlvdl9sZW4gPiAwOworCWFyZ3MtPnZsZW4gPSB2ICsgMTsKKwlyZXR1cm4gMTsKIH0KIAogaW50CiBuZnNzdmNfZGVjb2RlX2NyZWF0ZWFyZ3Moc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpwLAogCQkJCQlzdHJ1Y3QgbmZzZF9jcmVhdGVhcmdzICphcmdzKQogewotCWlmICghKHAgPSBkZWNvZGVfZmgocCwgJmFyZ3MtPmZoKSkKLQkgfHwgIShwID0gZGVjb2RlX2ZpbGVuYW1lKHAsICZhcmdzLT5uYW1lLCAmYXJncy0+bGVuKSkKLQkgfHwgIShwID0gZGVjb2RlX3NhdHRyKHAsICZhcmdzLT5hdHRycykpKQorCWlmICggICAhKHAgPSBkZWNvZGVfZmgocCwgJmFyZ3MtPmZoKSkKKwkgICAgfHwgIShwID0gZGVjb2RlX2ZpbGVuYW1lKHAsICZhcmdzLT5uYW1lLCAmYXJncy0+bGVuKSkpCiAJCXJldHVybiAwOworCXAgPSBkZWNvZGVfc2F0dHIocCwgJmFyZ3MtPmF0dHJzKTsKIAogCXJldHVybiB4ZHJfYXJnc2l6ZV9jaGVjayhycXN0cCwgcCk7CiB9CkBAIC0zNjEsMTEgKzM4MiwxMSBAQAogbmZzc3ZjX2RlY29kZV9zeW1saW5rYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsCiAJCQkJCXN0cnVjdCBuZnNkX3N5bWxpbmthcmdzICphcmdzKQogewotCWlmICghKHAgPSBkZWNvZGVfZmgocCwgJmFyZ3MtPmZmaCkpCi0JIHx8ICEocCA9IGRlY29kZV9maWxlbmFtZShwLCAmYXJncy0+Zm5hbWUsICZhcmdzLT5mbGVuKSkKLQkgfHwgIShwID0gZGVjb2RlX3BhdGhuYW1lKHAsICZhcmdzLT50bmFtZSwgJmFyZ3MtPnRsZW4pKQotCSB8fCAhKHAgPSBkZWNvZGVfc2F0dHIocCwgJmFyZ3MtPmF0dHJzKSkpCisJaWYgKCAgICEocCA9IGRlY29kZV9maChwLCAmYXJncy0+ZmZoKSkKKwkgICAgfHwgIShwID0gZGVjb2RlX2ZpbGVuYW1lKHAsICZhcmdzLT5mbmFtZSwgJmFyZ3MtPmZsZW4pKQorCSAgICB8fCAhKHAgPSBkZWNvZGVfcGF0aG5hbWUocCwgJmFyZ3MtPnRuYW1lLCAmYXJncy0+dGxlbikpKQogCQlyZXR1cm4gMDsKKwlwID0gZGVjb2RlX3NhdHRyKHAsICZhcmdzLT5hdHRycyk7CiAKIAlyZXR1cm4geGRyX2FyZ3NpemVfY2hlY2socnFzdHAsIHApOwogfQpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9hb3BzLmMgYi9mcy9udGZzL2FvcHMuYwppbmRleCA2MjllN2FiLi42ZTVjMjUzIDEwMDY0NAotLS0gYS9mcy9udGZzL2FvcHMuYworKysgYi9mcy9udGZzL2FvcHMuYwpAQCAtODYsMTkgKzg2LDE1IEBACiAJCX0KIAkJLyogQ2hlY2sgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciBoZWFkIG92ZXJmbG93aW5nLiAqLwogCQlpZiAodW5saWtlbHkoZmlsZV9vZnMgKyBiaC0+Yl9zaXplID4gaW5pdF9zaXplKSkgewotCQkJdTggKmthZGRyOwogCQkJaW50IG9mczsKIAogCQkJb2ZzID0gMDsKIAkJCWlmIChmaWxlX29mcyA8IGluaXRfc2l6ZSkKIAkJCQlvZnMgPSBpbml0X3NpemUgLSBmaWxlX29mczsKIAkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fQklPX1NSQ19JUlEpOwotCQkJbWVtc2V0KGthZGRyICsgYmhfb2Zmc2V0KGJoKSArIG9mcywgMCwKLQkJCQkJYmgtPmJfc2l6ZSAtIG9mcyk7Ci0JCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9CSU9fU1JDX0lSUSk7CisJCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCBiaF9vZmZzZXQoYmgpICsgb2ZzLAorCQkJCQkgYmgtPmJfc2l6ZSAtIG9mcywgS01fQklPX1NSQ19JUlEpOwogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJCX0KIAl9IGVsc2UgewogCQljbGVhcl9idWZmZXJfdXB0b2RhdGUoYmgpOwpAQCAtMjQ1LDggKzI0MSw3IEBACiAJcmwgPSBOVUxMOwogCW5yID0gaSA9IDA7CiAJZG8gewotCQl1OCAqa2FkZHI7Ci0JCWludCBlcnI7CisJCWludCBlcnIgPSAwOwogCiAJCWlmICh1bmxpa2VseShidWZmZXJfdXB0b2RhdGUoYmgpKSkKIAkJCWNvbnRpbnVlOwpAQCAtMjU0LDcgKzI0OSw2IEBACiAJCQlhcnJbbnIrK10gPSBiaDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWVyciA9IDA7CiAJCWJoLT5iX2JkZXYgPSB2b2wtPnNiLT5zX2JkZXY7CiAJCS8qIElzIHRoZSBibG9jayB3aXRoaW4gdGhlIGFsbG93ZWQgbGltaXRzPyAqLwogCQlpZiAoaWJsb2NrIDwgbGJsb2NrKSB7CkBAIC0zNDAsMTAgKzMzNCw3IEBACiAJCWJoLT5iX2Jsb2NrbnIgPSAtMVVMOwogCQljbGVhcl9idWZmZXJfbWFwcGVkKGJoKTsKIGhhbmRsZV96YmxvY2s6Ci0JCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCQltZW1zZXQoa2FkZHIgKyBpICogYmxvY2tzaXplLCAwLCBibG9ja3NpemUpOwotCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0JCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCBpICogYmxvY2tzaXplLCBibG9ja3NpemUsIEtNX1VTRVIwKTsKIAkJaWYgKGxpa2VseSghZXJyKSkKIAkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCX0gd2hpbGUgKGkrKywgaWJsb2NrKyssIChiaCA9IGJoLT5iX3RoaXNfcGFnZSkgIT0gaGVhZCk7CkBAIC00NjAsMTAgKzQ1MSw3IEBACiAJICogb2sgdG8gaWdub3JlIHRoZSBjb21wcmVzc2VkIGZsYWcgaGVyZS4KIAkgKi8KIAlpZiAodW5saWtlbHkocGFnZS0+aW5kZXggPiAwKSkgewotCQlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQkJbWVtc2V0KGthZGRyLCAwLCBQQUdFX0NBQ0hFX1NJWkUpOwotCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCAwLCBQQUdFX0NBQ0hFX1NJWkUsIEtNX1VTRVIwKTsKIAkJZ290byBkb25lOwogCX0KIAlpZiAoIU5Jbm9BdHRyKG5pKSkKQEAgLTc5MCwxNCArNzc4LDEwIEBACiAJCSAqIHVwdG9kYXRlIHNvIGl0IGNhbiBnZXQgZGlzY2FyZGVkIGJ5IHRoZSBWTS4KIAkJICovCiAJCWlmIChlcnIgPT0gLUVOT0VOVCB8fCBsY24gPT0gTENOX0VOT0VOVCkgewotCQkJdTggKmthZGRyOwotCiAJCQliaC0+Yl9ibG9ja25yID0gLTE7CiAJCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOwotCQkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCQltZW1zZXQoa2FkZHIgKyBiaF9vZmZzZXQoYmgpLCAwLCBibG9ja3NpemUpOwotCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwotCQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCBiaF9vZmZzZXQoYmgpLCBibG9ja3NpemUsCisJCQkJCUtNX1VTRVIwKTsKIAkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQkJZXJyID0gMDsKIAkJCWNvbnRpbnVlOwpAQCAtMTQyMiwxMCArMTQwNiw4IEBACiAJCWlmIChwYWdlLT5pbmRleCA+PSAoaV9zaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQpKSB7CiAJCQkvKiBUaGUgcGFnZSBzdHJhZGRsZXMgaV9zaXplLiAqLwogCQkJdW5zaWduZWQgaW50IG9mcyA9IGlfc2l6ZSAmIH5QQUdFX0NBQ0hFX01BU0s7Ci0JCQlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQkJCW1lbXNldChrYWRkciArIG9mcywgMCwgUEFHRV9DQUNIRV9TSVpFIC0gb2ZzKTsKLQkJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCQkJemVyb191c2VyX3BhZ2UocGFnZSwgb2ZzLCBQQUdFX0NBQ0hFX1NJWkUgLSBvZnMsCisJCQkJCUtNX1VTRVIwKTsKIAkJfQogCQkvKiBIYW5kbGUgbXN0IHByb3RlY3RlZCBhdHRyaWJ1dGVzLiAqLwogCQlpZiAoTklub01zdFByb3RlY3RlZChuaSkpCmRpZmYgLS1naXQgYS9mcy9udGZzL2Rpci5jIGIvZnMvbnRmcy9kaXIuYwppbmRleCA3NGY5OWE2Li4zNDMxNGIzIDEwMDY0NAotLS0gYS9mcy9udGZzL2Rpci5jCisrKyBiL2ZzL250ZnMvZGlyLmMKQEAgLTIwLDcgKzIwLDYgQEAKICAqIEZvdW5kYXRpb24sSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAKICNpbmNsdWRlICJkaXIuaCIKZGlmZiAtLWdpdCBhL2ZzL250ZnMvZmlsZS5jIGIvZnMvbnRmcy9maWxlLmMKaW5kZXggZGJiYWM1NS4uN2VkNTYzOSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9maWxlLmMKKysrIGIvZnMvbnRmcy9maWxlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTYwNiwxMSArNjA3LDggQEAKIAkJCQkJbnRmc19zdWJtaXRfYmhfZm9yX3JlYWQoYmgpOwogCQkJCQkqd2FpdF9iaCsrID0gYmg7CiAJCQkJfSBlbHNlIHsKLQkJCQkJdTggKmthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCQkJCQltZW1zZXQoa2FkZHIgKyBiaF9vZmZzZXQoYmgpLCAwLAotCQkJCQkJCWJsb2Nrc2l6ZSk7Ci0JCQkJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQkJCQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJCQkJCXplcm9fdXNlcl9wYWdlKHBhZ2UsIGJoX29mZnNldChiaCksCisJCQkJCQkJYmxvY2tzaXplLCBLTV9VU0VSMCk7CiAJCQkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQkJCX0KIAkJCX0KQEAgLTY4NSwxMiArNjgzLDkgQEAKIAkJCQkJCW50ZnNfc3VibWl0X2JoX2Zvcl9yZWFkKGJoKTsKIAkJCQkJCSp3YWl0X2JoKysgPSBiaDsKIAkJCQkJfSBlbHNlIHsKLQkJCQkJCXU4ICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsCi0JCQkJCQkJCUtNX1VTRVIwKTsKLQkJCQkJCW1lbXNldChrYWRkciArIGJoX29mZnNldChiaCksCi0JCQkJCQkJCTAsIGJsb2Nrc2l6ZSk7Ci0JCQkJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0JCQkJCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwkJCQkJCXplcm9fdXNlcl9wYWdlKHBhZ2UsCisJCQkJCQkJYmhfb2Zmc2V0KGJoKSwKKwkJCQkJCQlibG9ja3NpemUsIEtNX1VTRVIwKTsKIAkJCQkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQkJCQl9CiAJCQkJfQpAQCAtNzA4LDExICs3MDMsOCBAQAogCQkJICovCiAJCQlpZiAoYmhfZW5kIDw9IHBvcyB8fCBiaF9wb3MgPj0gZW5kKSB7CiAJCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQkJCXU4ICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQkJCQkJbWVtc2V0KGthZGRyICsgYmhfb2Zmc2V0KGJoKSwgMCwKLQkJCQkJCQlibG9ja3NpemUpOwotCQkJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0JCQkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCQkJCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCBiaF9vZmZzZXQoYmgpLAorCQkJCQkJCWJsb2Nrc2l6ZSwgS01fVVNFUjApOwogCQkJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAkJCQl9CiAJCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwpAQCAtNzUxLDEwICs3NDMsOCBAQAogCQkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkKIAkJCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJCQl9IGVsc2UgaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQkJdTggKmthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCQkJCW1lbXNldChrYWRkciArIGJoX29mZnNldChiaCksIDAsIGJsb2Nrc2l6ZSk7Ci0JCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwotCQkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCQkJCXplcm9fdXNlcl9wYWdlKHBhZ2UsIGJoX29mZnNldChiaCksIGJsb2Nrc2l6ZSwKKwkJCQkJCUtNX1VTRVIwKTsKIAkJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAkJCX0KIAkJCWNvbnRpbnVlOwpAQCAtODc4LDExICs4NjgsOCBAQAogCQkJCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCiAJCQkJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAkJCQl9IGVsc2UgaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQkJCXU4ICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQkJCQkJbWVtc2V0KGthZGRyICsgYmhfb2Zmc2V0KGJoKSwgMCwKLQkJCQkJCQlibG9ja3NpemUpOwotCQkJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0JCQkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCQkJCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCBiaF9vZmZzZXQoYmgpLAorCQkJCQkJCWJsb2Nrc2l6ZSwgS01fVVNFUjApOwogCQkJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAkJCQl9CiAJCQkJY29udGludWU7CkBAIC0xMTM3LDE2ICsxMTI0LDEyIEBACiAJCQkgKiB0byB6ZXJvIHRoZSBvdmVyZmxvd2luZyByZWdpb24uCiAJCQkgKi8KIAkJCWlmICh1bmxpa2VseShiaF9wb3MgKyBibG9ja3NpemUgPiBpbml0aWFsaXplZF9zaXplKSkgewotCQkJCXU4ICprYWRkcjsKIAkJCQlpbnQgb2ZzID0gMDsKIAogCQkJCWlmIChsaWtlbHkoYmhfcG9zIDwgaW5pdGlhbGl6ZWRfc2l6ZSkpCiAJCQkJCW9mcyA9IGluaXRpYWxpemVkX3NpemUgLSBiaF9wb3M7Ci0JCQkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCQkJbWVtc2V0KGthZGRyICsgYmhfb2Zmc2V0KGJoKSArIG9mcywgMCwKLQkJCQkJCWJsb2Nrc2l6ZSAtIG9mcyk7Ci0JCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwotCQkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCQkJCXplcm9fdXNlcl9wYWdlKHBhZ2UsIGJoX29mZnNldChiaCkgKyBvZnMsCisJCQkJCQlibG9ja3NpemUgLSBvZnMsIEtNX1VTRVIwKTsKIAkJCX0KIAkJfSBlbHNlIC8qIGlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGJoKSkpICovCiAJCQllcnIgPSAtRUlPOwpAQCAtMTI4NiwxMSArMTI2OSw4IEBACiAJCQkJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkKIAkJCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJCQkJZWxzZSB7Ci0JCQkJCXU4ICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQkJCQkJbWVtc2V0KGthZGRyICsgYmhfb2Zmc2V0KGJoKSwgMCwKLQkJCQkJCQlibG9ja3NpemUpOwotCQkJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0JCQkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCQkJCQl6ZXJvX3VzZXJfcGFnZShwYWdlLCBiaF9vZmZzZXQoYmgpLAorCQkJCQkJCWJsb2Nrc2l6ZSwgS01fVVNFUjApOwogCQkJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAkJCQl9CiAJCQl9CkBAIC0xMzUwLDkgKzEzMzAsNyBAQAogCQlsZW4gPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCWlmIChsZW4gPiBieXRlcykKIAkJCWxlbiA9IGJ5dGVzOwotCQlrYWRkciA9IGttYXBfYXRvbWljKCpwYWdlcywgS01fVVNFUjApOwotCQltZW1zZXQoa2FkZHIsIDAsIGxlbik7Ci0JCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwkJemVyb191c2VyX3BhZ2UoKnBhZ2VzLCAwLCBsZW4sIEtNX1VTRVIwKTsKIAl9CiAJZ290byBvdXQ7CiB9CkBAIC0xNDczLDkgKzE0NTEsNyBAQAogCQlsZW4gPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCWlmIChsZW4gPiBieXRlcykKIAkJCWxlbiA9IGJ5dGVzOwotCQlrYWRkciA9IGttYXBfYXRvbWljKCpwYWdlcywgS01fVVNFUjApOwotCQltZW1zZXQoa2FkZHIsIDAsIGxlbik7Ci0JCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwkJemVyb191c2VyX3BhZ2UoKnBhZ2VzLCAwLCBsZW4sIEtNX1VTRVIwKTsKIAl9CiAJZ290byBvdXQ7CiB9CkBAIC0yMTI5LDI4ICsyMTA1LDEzIEBACiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CiAJbG9mZl90IHBvczsKLQl1bnNpZ25lZCBsb25nIHNlZzsKIAlzaXplX3QgY291bnQ7CQkvKiBhZnRlciBmaWxlIGxpbWl0IGNoZWNrcyAqLwogCXNzaXplX3Qgd3JpdHRlbiwgZXJyOwogCiAJY291bnQgPSAwOwotCWZvciAoc2VnID0gMDsgc2VnIDwgbnJfc2Vnczsgc2VnKyspIHsKLQkJY29uc3Qgc3RydWN0IGlvdmVjICppdiA9ICZpb3Zbc2VnXTsKLQkJLyoKLQkJICogSWYgYW55IHNlZ21lbnQgaGFzIGEgbmVnYXRpdmUgbGVuZ3RoLCBvciB0aGUgY3VtdWxhdGl2ZQotCQkgKiBsZW5ndGggZXZlciB3cmFwcyBuZWdhdGl2ZSB0aGVuIHJldHVybiAtRUlOVkFMLgotCQkgKi8KLQkJY291bnQgKz0gaXYtPmlvdl9sZW47Ci0JCWlmICh1bmxpa2VseSgoc3NpemVfdCkoY291bnR8aXYtPmlvdl9sZW4pIDwgMCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgaXYtPmlvdl9iYXNlLCBpdi0+aW92X2xlbikpCi0JCQljb250aW51ZTsKLQkJaWYgKCFzZWcpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJbnJfc2VncyA9IHNlZzsKLQkJY291bnQgLT0gaXYtPmlvdl9sZW47CS8qIFRoaXMgc2VnbWVudCBpcyBubyBnb29kICovCi0JCWJyZWFrOwotCX0KKwllcnIgPSBnZW5lcmljX3NlZ21lbnRfY2hlY2tzKGlvdiwgJm5yX3NlZ3MsICZjb3VudCwgVkVSSUZZX1JFQUQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAJcG9zID0gKnBwb3M7CiAJdmZzX2NoZWNrX2Zyb3plbihpbm9kZS0+aV9zYiwgU0JfRlJFRVpFX1dSSVRFKTsKIAkvKiBXZSBjYW4gd3JpdGUgYmFjayB0aGlzIHF1ZXVlIGluIHBhZ2UgcmVjbGFpbS4gKi8KZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuYyBiL2ZzL250ZnMvaW5vZGUuYwppbmRleCBmOGJmOGRhLi5iNTMyYTczIDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmMKKysrIGIvZnMvbnRmcy9pbm9kZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlICJhb3BzLmgiCiAjaW5jbHVkZSAiYXR0cmliLmgiCkBAIC0xNDEsNyArMTQwLDcgQEAKIAkJaWYgKCFuaS0+bmFtZSkKIAkJCXJldHVybiAtRU5PTUVNOwogCQltZW1jcHkobmktPm5hbWUsIG5hLT5uYW1lLCBpKTsKLQkJbmktPm5hbWVbaV0gPSAwOworCQluaS0+bmFtZVtuYS0+bmFtZV9sZW5dID0gMDsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggMjFkODM0ZS4uNDU2NmI5MSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCisrKyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtMzA4NSw4ICszMDg1LDcgQEAKIHsKIAludGZzX2lub2RlICpuaSA9IChudGZzX2lub2RlICopZm9vOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKQotCQlpbm9kZV9pbml0X29uY2UoVkZTX0kobmkpKTsKKwlpbm9kZV9pbml0X29uY2UoVkZTX0kobmkpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FvcHMuYyBiL2ZzL29jZnMyL2FvcHMuYwppbmRleCA4ZTdjYWZiLi4wMDIzYjMxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hb3BzLmMKKysrIGIvZnMvb2NmczIvYW9wcy5jCkBAIC0yMjIsNyArMjIyLDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWRvd25fcmVhZCgmT0NGUzJfSShpbm9kZSktPmlwX2FsbG9jX3NlbSk7CisJaWYgKGRvd25fcmVhZF90cnlsb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKSA9PSAwKSB7CisJCXJldCA9IEFPUF9UUlVOQ0FURURfUEFHRTsKKwkJZ290byBvdXRfbWV0YV91bmxvY2s7CisJfQogCiAJLyoKIAkgKiBpX3NpemUgbWlnaHQgaGF2ZSBqdXN0IGJlZW4gdXBkYXRlZCBhcyB3ZSBncmFiZWQgdGhlIG1ldGEgbG9jay4gIFdlCkBAIC0yMzUsMTAgKzIzOCw3IEBACiAJICogWFhYIHN5c19yZWFkYWhlYWQoKSBzZWVtcyB0byBnZXQgdGhhdCB3cm9uZz8KIAkgKi8KIAlpZiAoc3RhcnQgPj0gaV9zaXplX3JlYWQoaW5vZGUpKSB7Ci0JCWNoYXIgKmFkZHIgPSBrbWFwKHBhZ2UpOwotCQltZW1zZXQoYWRkciwgMCwgUEFHRV9TSVpFKTsKLQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Ci0JCWt1bm1hcChwYWdlKTsKKwkJemVyb191c2VyX3BhZ2UocGFnZSwgMCwgUEFHRV9TSVpFLCBLTV9VU0VSMCk7CiAJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJcmV0ID0gMDsKIAkJZ290byBvdXRfYWxsb2M7CkBAIC0yNTgsNiArMjU4LDcgQEAKIAlvY2ZzMl9kYXRhX3VubG9jayhpbm9kZSwgMCk7CiBvdXRfYWxsb2M6CiAJdXBfcmVhZCgmT0NGUzJfSShpbm9kZSktPmlwX2FsbG9jX3NlbSk7CitvdXRfbWV0YV91bmxvY2s6CiAJb2NmczJfbWV0YV91bmxvY2soaW5vZGUsIDApOwogb3V0OgogCWlmICh1bmxvY2spCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCmluZGV4IDJlOTc1YzAuLmE5MzYyMGMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCkBAIC0xNDQsNyArMTQ0LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qga3NldCBtbG9nX2tzZXQgPSB7Ci0JLmtvYmogICA9IHsubmFtZSA9ICJsb2dtYXNrIiwgLmt0eXBlID0gJm1sb2dfa3R5cGV9LAorCS5rb2JqICA9IHsubmFtZSA9ICJsb2dtYXNrIn0sCisJLmt0eXBlID0gJm1sb2dfa3R5cGUKIH07CiAKIGludCBtbG9nX3N5c19pbml0KHN0cnVjdCBrc2V0ICpvMmNiX3N1YnN5cykKQEAgLTE1Nyw3ICsxNTgsNyBAQAogCX0KIAltbG9nX2F0dHJfcHRyc1tpXSA9IE5VTEw7CiAKLQlrb2JqX3NldF9rc2V0X3MoJm1sb2dfa3NldCwgbzJjYl9zdWJzeXMpOworCWtvYmpfc2V0X2tzZXRfcygmbWxvZ19rc2V0LCAqbzJjYl9zdWJzeXMpOwogCXJldHVybiBrc2V0X3JlZ2lzdGVyKCZtbG9nX2tzZXQpOwogfQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZnMuYyBiL2ZzL29jZnMyL2RsbS9kbG1mcy5jCmluZGV4IGQ0ZTQ2ZDAuLmZkOGNiMWIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1mcy5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1mcy5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMjYzLDEyICsyNjIsMTAgQEAKIAlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXAgPQogCQkoc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKikgZm9vOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKSB7Ci0JCWlwLT5pcF9kbG0gPSBOVUxMOwotCQlpcC0+aXBfcGFyZW50ID0gTlVMTDsKKwlpcC0+aXBfZGxtID0gTlVMTDsKKwlpcC0+aXBfcGFyZW50ID0gTlVMTDsKIAotCQlpbm9kZV9pbml0X29uY2UoJmlwLT5pcF92ZnNfaW5vZGUpOwotCX0KKwlpbm9kZV9pbml0X29uY2UoJmlwLT5pcF92ZnNfaW5vZGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGlub2RlICpkbG1mc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZ2x1ZS5jIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCmluZGV4IDAyNDc3N2EuLmQxYmQzMDUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWdsdWUuYworKysgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9maWxlLmMgYi9mcy9vY2ZzMi9maWxlLmMKaW5kZXggOTM5NWI0Zi4uYWM2Yzk2NCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtMzI2LDYgKzMyNiw3IEBACiAJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW5ld19pX3NpemUpOwogCisJdW5tYXBfbWFwcGluZ19yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBuZXdfaV9zaXplICsgUEFHRV9TSVpFIC0gMSwgMCwgMSk7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoaW5vZGUtPmlfbWFwcGluZywgbmV3X2lfc2l6ZSk7CiAKIAlmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGRpX2JoLT5iX2RhdGE7CkBAIC0xNDE4LDM2ICsxNDE5LDYgQEAKIAlyZXR1cm4gdG90YWwgPyB0b3RhbCA6IHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9jaGVja19pb3ZlYyhjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90ICpjb3VudGVkLAotCQkJICAgICB1bnNpZ25lZCBsb25nICpucl9zZWdzKQotewotCXNpemVfdCBvY291bnQ7CQkvKiBvcmlnaW5hbCBjb3VudCAqLwotCXVuc2lnbmVkIGxvbmcgc2VnOwotCi0Jb2NvdW50ID0gMDsKLQlmb3IgKHNlZyA9IDA7IHNlZyA8ICpucl9zZWdzOyBzZWcrKykgewotCQljb25zdCBzdHJ1Y3QgaW92ZWMgKml2ID0gJmlvdltzZWddOwotCi0JCS8qCi0JCSAqIElmIGFueSBzZWdtZW50IGhhcyBhIG5lZ2F0aXZlIGxlbmd0aCwgb3IgdGhlIGN1bXVsYXRpdmUKLQkJICogbGVuZ3RoIGV2ZXIgd3JhcHMgbmVnYXRpdmUgdGhlbiByZXR1cm4gLUVJTlZBTC4KLQkJICovCi0JCW9jb3VudCArPSBpdi0+aW92X2xlbjsKLQkJaWYgKHVubGlrZWx5KChzc2l6ZV90KShvY291bnR8aXYtPmlvdl9sZW4pIDwgMCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgaXYtPmlvdl9iYXNlLCBpdi0+aW92X2xlbikpCi0JCQljb250aW51ZTsKLQkJaWYgKHNlZyA9PSAwKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCSpucl9zZWdzID0gc2VnOwotCQlvY291bnQgLT0gaXYtPmlvdl9sZW47CS8qIFRoaXMgc2VnbWVudCBpcyBubyBnb29kICovCi0JCWJyZWFrOwotCX0KLQotCSpjb3VudGVkID0gb2NvdW50OwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3NpemVfdCBvY2ZzMl9maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCQkJCSAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsCkBAIC0xNDcwLDcgKzE0NDEsNyBAQAogCWlmIChpb2NiLT5raV9sZWZ0ID09IDApCiAJCXJldHVybiAwOwogCi0JcmV0ID0gb2NmczJfY2hlY2tfaW92ZWMoaW92LCAmb2NvdW50LCAmbnJfc2Vncyk7CisJcmV0ID0gZ2VuZXJpY19zZWdtZW50X2NoZWNrcyhpb3YsICZucl9zZWdzLCAmb2NvdW50LCBWRVJJRllfUkVBRCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW5vZGUuYyBiL2ZzL29jZnMyL2lub2RlLmMKaW5kZXggYmM4NDRiZi4uYzUzYTY3NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW5vZGUuYworKysgYi9mcy9vY2ZzMi9pbm9kZS5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jIGIvZnMvb2NmczIvbG9jYWxhbGxvYy5jCmluZGV4IDRkZWRkOTcuLjU0NWY3ODkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuYworKysgYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKQEAgLTQ3MSw5ICs0NzEsNiBAQAogCiAJbXV0ZXhfbG9jaygmbG9jYWxfYWxsb2NfaW5vZGUtPmlfbXV0ZXgpOwogCi0JYWMtPmFjX2lub2RlID0gbG9jYWxfYWxsb2NfaW5vZGU7Ci0JYWMtPmFjX3doaWNoID0gT0NGUzJfQUNfVVNFX0xPQ0FMOwotCiAJaWYgKG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgIT0gT0NGUzJfTEFfRU5BQkxFRCkgewogCQlzdGF0dXMgPSAtRU5PU1BDOwogCQlnb3RvIGJhaWw7CkBAIC01MTEsMTAgKzUwOCwxNCBAQAogCQl9CiAJfQogCisJYWMtPmFjX2lub2RlID0gbG9jYWxfYWxsb2NfaW5vZGU7CisJYWMtPmFjX3doaWNoID0gT0NGUzJfQUNfVVNFX0xPQ0FMOwogCWdldF9iaChvc2ItPmxvY2FsX2FsbG9jX2JoKTsKIAlhYy0+YWNfYmggPSBvc2ItPmxvY2FsX2FsbG9jX2JoOwogCXN0YXR1cyA9IDA7CiBiYWlsOgorCWlmIChzdGF0dXMgPCAwICYmIGxvY2FsX2FsbG9jX2lub2RlKQorCQlpcHV0KGxvY2FsX2FsbG9jX2lub2RlKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zbG90X21hcC5jIGIvZnMvb2NmczIvc2xvdF9tYXAuYwppbmRleCBkOTIxYTI4Li5kOGI3OTA2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zbG90X21hcC5jCisrKyBiL2ZzL29jZnMyL3Nsb3RfbWFwLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX1NVUEVSCiAjaW5jbHVkZSA8Y2x1c3Rlci9tYXNrbG9nLmg+CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCA3YzVlM2Y1Li44NmI1NTljIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTkzNywzMSArOTM3LDI5IEBACiB7CiAJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gZGF0YTsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikgewotCQlvaS0+aXBfZmxhZ3MgPSAwOwotCQlvaS0+aXBfb3Blbl9jb3VudCA9IDA7Ci0JCXNwaW5fbG9ja19pbml0KCZvaS0+aXBfbG9jayk7Ci0JCW9jZnMyX2V4dGVudF9tYXBfaW5pdCgmb2ktPnZmc19pbm9kZSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZvaS0+aXBfaW9fbWFya2Vycyk7Ci0JCW9pLT5pcF9jcmVhdGVkX3RyYW5zID0gMDsKLQkJb2ktPmlwX2xhc3RfdHJhbnMgPSAwOwotCQlvaS0+aXBfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CisJb2ktPmlwX2ZsYWdzID0gMDsKKwlvaS0+aXBfb3Blbl9jb3VudCA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJm9pLT5pcF9sb2NrKTsKKwlvY2ZzMl9leHRlbnRfbWFwX2luaXQoJm9pLT52ZnNfaW5vZGUpOworCUlOSVRfTElTVF9IRUFEKCZvaS0+aXBfaW9fbWFya2Vycyk7CisJb2ktPmlwX2NyZWF0ZWRfdHJhbnMgPSAwOworCW9pLT5pcF9sYXN0X3RyYW5zID0gMDsKKwlvaS0+aXBfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CiAKLQkJaW5pdF9yd3NlbSgmb2ktPmlwX2FsbG9jX3NlbSk7Ci0JCW11dGV4X2luaXQoJm9pLT5pcF9pb19tdXRleCk7CisJaW5pdF9yd3NlbSgmb2ktPmlwX2FsbG9jX3NlbSk7CisJbXV0ZXhfaW5pdCgmb2ktPmlwX2lvX211dGV4KTsKIAotCQlvaS0+aXBfYmxrbm8gPSAwVUxMOwotCQlvaS0+aXBfY2x1c3RlcnMgPSAwOworCW9pLT5pcF9ibGtubyA9IDBVTEw7CisJb2ktPmlwX2NsdXN0ZXJzID0gMDsKIAotCQlvY2ZzMl9sb2NrX3Jlc19pbml0X29uY2UoJm9pLT5pcF9yd19sb2NrcmVzKTsKLQkJb2NmczJfbG9ja19yZXNfaW5pdF9vbmNlKCZvaS0+aXBfbWV0YV9sb2NrcmVzKTsKLQkJb2NmczJfbG9ja19yZXNfaW5pdF9vbmNlKCZvaS0+aXBfZGF0YV9sb2NrcmVzKTsKLQkJb2NmczJfbG9ja19yZXNfaW5pdF9vbmNlKCZvaS0+aXBfb3Blbl9sb2NrcmVzKTsKKwlvY2ZzMl9sb2NrX3Jlc19pbml0X29uY2UoJm9pLT5pcF9yd19sb2NrcmVzKTsKKwlvY2ZzMl9sb2NrX3Jlc19pbml0X29uY2UoJm9pLT5pcF9tZXRhX2xvY2tyZXMpOworCW9jZnMyX2xvY2tfcmVzX2luaXRfb25jZSgmb2ktPmlwX2RhdGFfbG9ja3Jlcyk7CisJb2NmczJfbG9ja19yZXNfaW5pdF9vbmNlKCZvaS0+aXBfb3Blbl9sb2NrcmVzKTsKIAotCQlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9pbml0KCZvaS0+dmZzX2lub2RlKTsKKwlvY2ZzMl9tZXRhZGF0YV9jYWNoZV9pbml0KCZvaS0+dmZzX2lub2RlKTsKIAotCQlpbm9kZV9pbml0X29uY2UoJm9pLT52ZnNfaW5vZGUpOwotCX0KKwlpbm9kZV9pbml0X29uY2UoJm9pLT52ZnNfaW5vZGUpOwogfQogCiBzdGF0aWMgaW50IG9jZnMyX2luaXRpYWxpemVfbWVtX2NhY2hlcyh2b2lkKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvdm90ZS5jIGIvZnMvb2NmczIvdm90ZS5jCmluZGV4IDRmODJhMmYuLjY2YTEzZWUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3ZvdGUuYworKysgYi9mcy9vY2ZzMi92b3RlLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAKICNpbmNsdWRlIDxjbHVzdGVyL2hlYXJ0YmVhdC5oPgpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IGM5ODlmYjQuLjBkNTE1ZDEgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yMTEsNiArMjEwLDkgQEAKIAkJbmV3YXR0cnMuaWFfdmFsaWQgfD0gQVRUUl9GSUxFOwogCX0KIAorCS8qIFJlbW92ZSBzdWlkL3NnaWQgb24gdHJ1bmNhdGUgdG9vICovCisJbmV3YXR0cnMuaWFfdmFsaWQgfD0gc2hvdWxkX3JlbW92ZV9zdWlkKGRlbnRyeSk7CisKIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWVyciA9IG5vdGlmeV9jaGFuZ2UoZGVudHJ5LCAmbmV3YXR0cnMpOwogCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKZGlmZiAtLWdpdCBhL2ZzL29wZW5wcm9tZnMvaW5vZGUuYyBiL2ZzL29wZW5wcm9tZnMvaW5vZGUuYwppbmRleCA3MzFhOTBlLi5lNjIzOTczIDEwMDY0NAotLS0gYS9mcy9vcGVucHJvbWZzL2lub2RlLmMKKysrIGIvZnMvb3BlbnByb21mcy9pbm9kZS5jCkBAIC00MTksOCArNDE5LDcgQEAKIHsKIAlzdHJ1Y3Qgb3BfaW5vZGVfaW5mbyAqb2kgPSAoc3RydWN0IG9wX2lub2RlX2luZm8gKikgZGF0YTsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKLQkJaW5vZGVfaW5pdF9vbmNlKCZvaS0+dmZzX2lub2RlKTsKKwlpbm9kZV9pbml0X29uY2UoJm9pLT52ZnNfaW5vZGUpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X29wZW5wcm9tX2ZzKHZvaWQpCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL0tjb25maWcgYi9mcy9wYXJ0aXRpb25zL0tjb25maWcKaW5kZXggNmU4YmI2Ni4uYTk5YWNkOCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9LY29uZmlnCisrKyBiL2ZzL3BhcnRpdGlvbnMvS2NvbmZpZwpAQCAtMTY2LDggKzE2NiwxMiBAQAogCWRlcGVuZHMgb24gUEFSVElUSU9OX0FEVkFOQ0VECiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgaGFyZCBkaXNrcyB1bmRlciBMaW51eCB3aGljaAotCSAgd2VyZSBwYXJ0aXRpb25lZCB1c2luZyBXaW5kb3dzIDIwMDAncyBvciBYUCdzIExvZ2ljYWwgRGlzayBNYW5hZ2VyLgotCSAgVGhleSBhcmUgYWxzbyBrbm93biBhcyAiRHluYW1pYyBEaXNrcyIuCisJICB3ZXJlIHBhcnRpdGlvbmVkIHVzaW5nIFdpbmRvd3MgMjAwMCdzL1hQJ3Mgb3IgVmlzdGEncyBMb2dpY2FsIERpc2sKKwkgIE1hbmFnZXIuICBUaGV5IGFyZSBhbHNvIGtub3duIGFzICJEeW5hbWljIERpc2tzIi4KKworCSAgTm90ZSB0aGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIER5bmFtaWMgRGlza3Mgd2l0aCBhIHByb3RlY3RpdmUgTUJSCisJICBsYWJlbCwgaS5lLiBET1MgcGFydGl0aW9uIHRhYmxlLiAgSXQgZG9lcyBub3Qgc3VwcG9ydCBHUFQgbGFiZWxsZWQKKwkgIER5bmFtaWMgRGlza3MgeWV0IGFzIGNhbiBiZSBjcmVhdGVkIHdpdGggVmlzdGEuCiAKIAkgIFdpbmRvd3MgMjAwMCBpbnRyb2R1Y2VkIHRoZSBjb25jZXB0IG9mIER5bmFtaWMgRGlza3MgdG8gZ2V0IGFyb3VuZAogCSAgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBQQydzIHBhcnRpdGlvbmluZyBzY2hlbWUuICBUaGUgTG9naWNhbCBEaXNrCkBAIC0xNzUsOCArMTc5LDggQEAKIAkgIG1pcnJvcmVkLCBzdHJpcGVkIG9yIFJBSUQgdm9sdW1lcywgYWxsIHdpdGhvdXQgdGhlIG5lZWQgZm9yCiAJICByZWJvb3RpbmcuCiAKLQkgIE5vcm1hbCBwYXJ0aXRpb25zIGFyZSBub3cgY2FsbGVkIEJhc2ljIERpc2tzIHVuZGVyIFdpbmRvd3MgMjAwMCBhbmQKLQkgIFhQLgorCSAgTm9ybWFsIHBhcnRpdGlvbnMgYXJlIG5vdyBjYWxsZWQgQmFzaWMgRGlza3MgdW5kZXIgV2luZG93cyAyMDAwLCBYUCwKKwkgIGFuZCBWaXN0YS4KIAogCSAgRm9yIGEgZnVsbGVyIGRlc2NyaXB0aW9uIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9sZG0udHh0Pi4KIApAQCAtMjM2LDMgKzI0MCwxMiBAQAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIGhhcmQgZGlza3MgdW5kZXIgTGludXggd2hpY2gKIAkgIHdlcmUgcGFydGl0aW9uZWQgdXNpbmcgRUZJIEdQVC4KKworY29uZmlnIFNZU1Y2OF9QQVJUSVRJT04KKwlib29sICJTWVNWNjggcGFydGl0aW9uIHRhYmxlIHN1cHBvcnQiIGlmIFBBUlRJVElPTl9BRFZBTkNFRAorCWRlZmF1bHQgeSBpZiBWTUUKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGJlIGFibGUgdG8gcmVhZCB0aGUgaGFyZCBkaXNrCisJICBwYXJ0aXRpb24gdGFibGUgZm9ybWF0IHVzZWQgYnkgTW90b3JvbGEgRGVsdGEgbWFjaGluZXMgKHVzaW5nCisJICBzeXN2NjgpLgorCSAgT3RoZXJ3aXNlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvTWFrZWZpbGUgYi9mcy9wYXJ0aXRpb25zL01ha2VmaWxlCmluZGV4IDY3ZTY2NWYuLjAzYWY4ZWEgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvTWFrZWZpbGUKKysrIGIvZnMvcGFydGl0aW9ucy9NYWtlZmlsZQpAQCAtMTcsMyArMTcsNCBAQAogb2JqLSQoQ09ORklHX0lCTV9QQVJUSVRJT04pICs9IGlibS5vCiBvYmotJChDT05GSUdfRUZJX1BBUlRJVElPTikgKz0gZWZpLm8KIG9iai0kKENPTkZJR19LQVJNQV9QQVJUSVRJT04pICs9IGthcm1hLm8KK29iai0kKENPTkZJR19TWVNWNjhfUEFSVElUSU9OKSArPSBzeXN2NjgubwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IDZiOWRhZTMuLjlhM2EwNTggMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJ1bHRyaXguaCIKICNpbmNsdWRlICJlZmkuaCIKICNpbmNsdWRlICJrYXJtYS5oIgorI2luY2x1ZGUgInN5c3Y2OC5oIgogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfTUQKIGV4dGVybiB2b2lkIG1kX2F1dG9kZXRlY3RfZGV2KGRldl90IGRldik7CkBAIC0xMDUsNiArMTA2LDkgQEAKICNpZmRlZiBDT05GSUdfS0FSTUFfUEFSVElUSU9OCiAJa2FybWFfcGFydGl0aW9uLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04KKwlzeXN2NjhfcGFydGl0aW9uLAorI2VuZGlmCiAJTlVMTAogfTsKICAKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvZWZpLmMgYi9mcy9wYXJ0aXRpb25zL2VmaS5jCmluZGV4IDFiZWE2MTAuLmU3YjA3MDAgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvZWZpLmMKKysrIGIvZnMvcGFydGl0aW9ucy9lZmkuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1wbWJyX3BhcnRfdmFsaWQoc3RydWN0IHBhcnRpdGlvbiAqcGFydCwgdTY0IGxhc3RsYmEpCitwbWJyX3BhcnRfdmFsaWQoc3RydWN0IHBhcnRpdGlvbiAqcGFydCkKIHsKICAgICAgICAgaWYgKHBhcnQtPnN5c19pbmQgPT0gRUZJX1BNQlJfT1NUWVBFX0VGSV9HUFQgJiYKICAgICAgICAgICAgIGxlMzJfdG9fY3B1KHBhcnQtPnN0YXJ0X3NlY3QpID09IDFVTCkKQEAgLTE2Myw3ICsxNjMsNiBAQAogLyoqCiAgKiBpc19wbWJyX3ZhbGlkKCk6IHRlc3QgUHJvdGVjdGl2ZSBNQlIgZm9yIHZhbGlkaXR5CiAgKiBAbWJyOiBwb2ludGVyIHRvIGEgbGVnYWN5IG1iciBzdHJ1Y3R1cmUKLSAqIEBsYXN0bGJhOiBsYXN0X2xiYSBmb3IgdGhlIHdob2xlIGRldmljZQogICoKICAqIERlc2NyaXB0aW9uOiBSZXR1cm5zIDEgaWYgUE1CUiBpcyB2YWxpZCwgMCBvdGhlcndpc2UuCiAgKiBWYWxpZGl0eSBkZXBlbmRzIG9uIHR3byB0aGluZ3M6CkBAIC0xNzEsMTMgKzE3MCwxMyBAQAogICogIDIpIE9uZSBwYXJ0aXRpb24gb2YgdHlwZSAweEVFIGlzIGZvdW5kCiAgKi8KIHN0YXRpYyBpbnQKLWlzX3BtYnJfdmFsaWQobGVnYWN5X21iciAqbWJyLCB1NjQgbGFzdGxiYSkKK2lzX3BtYnJfdmFsaWQobGVnYWN5X21iciAqbWJyKQogewogCWludCBpOwogCWlmICghbWJyIHx8IGxlMTZfdG9fY3B1KG1ici0+c2lnbmF0dXJlKSAhPSBNU0RPU19NQlJfU0lHTkFUVVJFKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCWlmIChwbWJyX3BhcnRfdmFsaWQoJm1ici0+cGFydGl0aW9uX3JlY29yZFtpXSwgbGFzdGxiYSkpCisJCWlmIChwbWJyX3BhcnRfdmFsaWQoJm1ici0+cGFydGl0aW9uX3JlY29yZFtpXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUxNiw3ICs1MTUsNyBAQAogCWludCBnb29kX3BncHQgPSAwLCBnb29kX2FncHQgPSAwLCBnb29kX3BtYnIgPSAwOwogCWdwdF9oZWFkZXIgKnBncHQgPSBOVUxMLCAqYWdwdCA9IE5VTEw7CiAJZ3B0X2VudHJ5ICpwcHRlcyA9IE5VTEwsICphcHRlcyA9IE5VTEw7Ci0JbGVnYWN5X21iciAqbGVnYWN5bWJyID0gTlVMTDsKKwlsZWdhY3lfbWJyICpsZWdhY3ltYnI7CiAJdTY0IGxhc3RsYmE7CiAJaWYgKCFiZGV2IHx8ICFncHQgfHwgIXB0ZXMpCiAJCXJldHVybiAwOwpAQCAtNTI4LDkgKzUyNyw4IEBACiAgICAgICAgICAgICAgICAgaWYgKGxlZ2FjeW1icikgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9sYmEoYmRldiwgMCwgKHU4ICopIGxlZ2FjeW1iciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoKmxlZ2FjeW1icikpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ29vZF9wbWJyID0gaXNfcG1icl92YWxpZChsZWdhY3ltYnIsIGxhc3RsYmEpOworICAgICAgICAgICAgICAgICAgICAgICAgZ29vZF9wbWJyID0gaXNfcG1icl92YWxpZChsZWdhY3ltYnIpOwogICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUobGVnYWN5bWJyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZ2FjeW1icj1OVUxMOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIWdvb2RfcG1icikKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvbGRtLmMgYi9mcy9wYXJ0aXRpb25zL2xkbS5jCmluZGV4IDFhNjA5MjYuLjk5ODczYTIgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvbGRtLmMKKysrIGIvZnMvcGFydGl0aW9ucy9sZG0uYwpAQCAtMiwxMCArMiwxMCBAQAogICogbGRtIC0gU3VwcG9ydCBmb3IgV2luZG93cyBMb2dpY2FsIERpc2sgTWFuYWdlciAoRHluYW1pYyBEaXNrcykKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiBSaWNoYXJkIFJ1c3NvbiA8bGRtQGZsYXRjYXAub3JnPgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDQgQW50b24gQWx0YXBhcm1ha292CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNyBBbnRvbiBBbHRhcGFybWFrb3YKICAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAyIEpha29iIEtlbWkgPGpha29iLmtlbWlAdGVsaWEuY29tPgogICoKLSAqIERvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly9saW51eC1udGZzLnNmLm5ldC9sZG0KKyAqIERvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubGludXgtbnRmcy5vcmcvY29udGVudC92aWV3LzE5LzM3LwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiAgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQpAQCAtNjIsNyArNjIsNiBAQAogCXByaW50ayAoIiVzJXMoKTogJXNcbiIsIGxldmVsLCBmdW5jdGlvbiwgYnVmKTsKIH0KIAotCiAvKioKICAqIGxkbV9wYXJzZV9oZXhieXRlIC0gQ29udmVydCBhIEFTQ0lJIGhleCBudW1iZXIgdG8gYSBieXRlCiAgKiBAc3JjOiAgUG9pbnRlciB0byBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgdG8gY29udmVydC4KQEAgLTExOCw3ICsxMTcsNiBAQAogCXJldHVybiB0cnVlOwogfQogCi0KIC8qKgogICogbGRtX3BhcnNlX3ByaXZoZWFkIC0gUmVhZCB0aGUgTERNIERhdGFiYXNlIFBSSVZIRUFEIHN0cnVjdHVyZQogICogQGRhdGE6ICBSYXcgZGF0YWJhc2UgUFJJVkhFQUQgc3RydWN0dXJlIGxvYWRlZCBmcm9tIHRoZSBkZXZpY2UKQEAgLTEzMCw0NiArMTI4LDQ4IEBACiAgKiBSZXR1cm46ICAndHJ1ZScgICBAcGggY29udGFpbnMgdGhlIFBSSVZIRUFEIGRhdGEKICAqICAgICAgICAgICdmYWxzZScgIEBwaCBjb250ZW50cyBhcmUgdW5kZWZpbmVkCiAgKi8KLXN0YXRpYyBib29sIGxkbV9wYXJzZV9wcml2aGVhZCAoY29uc3QgdTggKmRhdGEsIHN0cnVjdCBwcml2aGVhZCAqcGgpCitzdGF0aWMgYm9vbCBsZG1fcGFyc2VfcHJpdmhlYWQoY29uc3QgdTggKmRhdGEsIHN0cnVjdCBwcml2aGVhZCAqcGgpCiB7Ci0JQlVHX09OICghZGF0YSB8fCAhcGgpOworCWJvb2wgaXNfdmlzdGEgPSBmYWxzZTsKIAotCWlmIChNQUdJQ19QUklWSEVBRCAhPSBCRTY0IChkYXRhKSkgewotCQlsZG1fZXJyb3IgKCJDYW5ub3QgZmluZCBQUklWSEVBRCBzdHJ1Y3R1cmUuIExETSBkYXRhYmFzZSBpcyIKKwlCVUdfT04oIWRhdGEgfHwgIXBoKTsKKwlpZiAoTUFHSUNfUFJJVkhFQUQgIT0gQkU2NChkYXRhKSkgeworCQlsZG1fZXJyb3IoIkNhbm5vdCBmaW5kIFBSSVZIRUFEIHN0cnVjdHVyZS4gTERNIGRhdGFiYXNlIGlzIgogCQkJIiBjb3JydXB0LiBBYm9ydGluZy4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQotCXBoLT52ZXJfbWFqb3IgICAgICAgICAgPSBCRTE2IChkYXRhICsgMHgwMDBDKTsKLQlwaC0+dmVyX21pbm9yICAgICAgICAgID0gQkUxNiAoZGF0YSArIDB4MDAwRSk7Ci0JcGgtPmxvZ2ljYWxfZGlza19zdGFydCA9IEJFNjQgKGRhdGEgKyAweDAxMUIpOwotCXBoLT5sb2dpY2FsX2Rpc2tfc2l6ZSAgPSBCRTY0IChkYXRhICsgMHgwMTIzKTsKLQlwaC0+Y29uZmlnX3N0YXJ0ICAgICAgID0gQkU2NCAoZGF0YSArIDB4MDEyQik7Ci0JcGgtPmNvbmZpZ19zaXplICAgICAgICA9IEJFNjQgKGRhdGEgKyAweDAxMzMpOwotCi0JaWYgKChwaC0+dmVyX21ham9yICE9IDIpIHx8IChwaC0+dmVyX21pbm9yICE9IDExKSkgewotCQlsZG1fZXJyb3IgKCJFeHBlY3RlZCBQUklWSEVBRCB2ZXJzaW9uICVkLiVkLCBnb3QgJWQuJWQuIgotCQkJIiBBYm9ydGluZy4iLCAyLCAxMSwgcGgtPnZlcl9tYWpvciwgcGgtPnZlcl9taW5vcik7CisJcGgtPnZlcl9tYWpvciA9IEJFMTYoZGF0YSArIDB4MDAwQyk7CisJcGgtPnZlcl9taW5vciA9IEJFMTYoZGF0YSArIDB4MDAwRSk7CisJcGgtPmxvZ2ljYWxfZGlza19zdGFydCA9IEJFNjQoZGF0YSArIDB4MDExQik7CisJcGgtPmxvZ2ljYWxfZGlza19zaXplID0gQkU2NChkYXRhICsgMHgwMTIzKTsKKwlwaC0+Y29uZmlnX3N0YXJ0ID0gQkU2NChkYXRhICsgMHgwMTJCKTsKKwlwaC0+Y29uZmlnX3NpemUgPSBCRTY0KGRhdGEgKyAweDAxMzMpOworCS8qIFZlcnNpb24gMi4xMSBpcyBXaW4yay9YUCBhbmQgdmVyc2lvbiAyLjEyIGlzIFZpc3RhLiAqLworCWlmIChwaC0+dmVyX21ham9yID09IDIgJiYgcGgtPnZlcl9taW5vciA9PSAxMikKKwkJaXNfdmlzdGEgPSB0cnVlOworCWlmICghaXNfdmlzdGEgJiYgKHBoLT52ZXJfbWFqb3IgIT0gMiB8fCBwaC0+dmVyX21pbm9yICE9IDExKSkgeworCQlsZG1fZXJyb3IoIkV4cGVjdGVkIFBSSVZIRUFEIHZlcnNpb24gMi4xMSBvciAyLjEyLCBnb3QgJWQuJWQuIgorCQkJIiBBYm9ydGluZy4iLCBwaC0+dmVyX21ham9yLCBwaC0+dmVyX21pbm9yKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KKwlsZG1fZGVidWcoIlBSSVZIRUFEIHZlcnNpb24gJWQuJWQgKFdpbmRvd3MgJXMpLiIsIHBoLT52ZXJfbWFqb3IsCisJCQlwaC0+dmVyX21pbm9yLCBpc192aXN0YSA/ICJWaXN0YSIgOiAiMjAwMC9YUCIpOwogCWlmIChwaC0+Y29uZmlnX3NpemUgIT0gTERNX0RCX1NJWkUpIHsJLyogMSBNaUIgaW4gc2VjdG9ycy4gKi8KLQkJLyogV2FybiB0aGUgdXNlciBhbmQgY29udGludWUsIGNhcmVmdWxseSAqLwotCQlsZG1faW5mbyAoIkRhdGFiYXNlIGlzIG5vcm1hbGx5ICV1IGJ5dGVzLCBpdCBjbGFpbXMgdG8gIgorCQkvKiBXYXJuIHRoZSB1c2VyIGFuZCBjb250aW51ZSwgY2FyZWZ1bGx5LiAqLworCQlsZG1faW5mbygiRGF0YWJhc2UgaXMgbm9ybWFsbHkgJXUgYnl0ZXMsIGl0IGNsYWltcyB0byAiCiAJCQkiYmUgJWxsdSBieXRlcy4iLCBMRE1fREJfU0laRSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGgtPmNvbmZpZ19zaXplICk7CisJCQkodW5zaWduZWQgbG9uZyBsb25nKXBoLT5jb25maWdfc2l6ZSk7CiAJfQotCWlmICgocGgtPmxvZ2ljYWxfZGlza19zaXplID09IDApIHx8Ci0JICAgIChwaC0+bG9naWNhbF9kaXNrX3N0YXJ0ICsgcGgtPmxvZ2ljYWxfZGlza19zaXplID4gcGgtPmNvbmZpZ19zdGFydCkpIHsKLQkJbGRtX2Vycm9yICgiUFJJVkhFQUQgZGlzayBzaXplIGRvZXNuJ3QgbWF0Y2ggcmVhbCBkaXNrIHNpemUiKTsKKwlpZiAoKHBoLT5sb2dpY2FsX2Rpc2tfc2l6ZSA9PSAwKSB8fCAocGgtPmxvZ2ljYWxfZGlza19zdGFydCArCisJCQlwaC0+bG9naWNhbF9kaXNrX3NpemUgPiBwaC0+Y29uZmlnX3N0YXJ0KSkgeworCQlsZG1fZXJyb3IoIlBSSVZIRUFEIGRpc2sgc2l6ZSBkb2Vzbid0IG1hdGNoIHJlYWwgZGlzayBzaXplIik7CiAJCXJldHVybiBmYWxzZTsKIAl9Ci0KLQlpZiAoIWxkbV9wYXJzZV9ndWlkIChkYXRhICsgMHgwMDMwLCBwaC0+ZGlza19pZCkpIHsKLQkJbGRtX2Vycm9yICgiUFJJVkhFQUQgY29udGFpbnMgYW4gaW52YWxpZCBHVUlELiIpOworCWlmICghbGRtX3BhcnNlX2d1aWQoZGF0YSArIDB4MDAzMCwgcGgtPmRpc2tfaWQpKSB7CisJCWxkbV9lcnJvcigiUFJJVkhFQUQgY29udGFpbnMgYW4gaW52YWxpZCBHVUlELiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCi0JbGRtX2RlYnVnICgiUGFyc2VkIFBSSVZIRUFEIHN1Y2Nlc3NmdWxseS4iKTsKKwlsZG1fZGVidWcoIlBhcnNlZCBQUklWSEVBRCBzdWNjZXNzZnVsbHkuIik7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQwOSw3ICs0MDksNyBAQAogICogUmV0dXJuOiAgJ3RydWUnICAgQHRvYzEgY29udGFpbnMgdmFsaWRhdGVkIFRPQ0JMT0NLIGluZm8KICAqICAgICAgICAgICdmYWxzZScgIEB0b2MxIGNvbnRlbnRzIGFyZSB1bmRlZmluZWQKICAqLwotc3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3RvY2Jsb2NrcyAoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKK3N0YXRpYyBib29sIGxkbV92YWxpZGF0ZV90b2NibG9ja3Moc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKIAl1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCBsZG1kYiAqbGRiKQogewogCXN0YXRpYyBjb25zdCBpbnQgb2ZmWzRdID0geyBPRkZfVE9DQjEsIE9GRl9UT0NCMiwgT0ZGX1RPQ0IzLCBPRkZfVE9DQjR9OwpAQCAtNDE3LDU0ICs0MTcsNTcgQEAKIAlzdHJ1Y3QgcHJpdmhlYWQgKnBoOwogCVNlY3RvciBzZWN0OwogCXU4ICpkYXRhOworCWludCBpLCBucl90YnM7CiAJYm9vbCByZXN1bHQgPSBmYWxzZTsKLQlpbnQgaTsKIAotCUJVR19PTiAoIWJkZXYgfHwgIWxkYik7Ci0KLQlwaCAgICA9ICZsZGItPnBoOworCUJVR19PTighYmRldiB8fCAhbGRiKTsKKwlwaCA9ICZsZGItPnBoOwogCXRiWzBdID0gJmxkYi0+dG9jOwotCXRiWzFdID0ga21hbGxvYyAoc2l6ZW9mICgqdGJbMV0pLCBHRlBfS0VSTkVMKTsKLQl0YlsyXSA9IGttYWxsb2MgKHNpemVvZiAoKnRiWzJdKSwgR0ZQX0tFUk5FTCk7Ci0JdGJbM10gPSBrbWFsbG9jIChzaXplb2YgKCp0YlszXSksIEdGUF9LRVJORUwpOwotCWlmICghdGJbMV0gfHwgIXRiWzJdIHx8ICF0YlszXSkgewotCQlsZG1fY3JpdCAoIk91dCBvZiBtZW1vcnkuIik7Ci0JCWdvdG8gb3V0OworCXRiWzFdID0ga21hbGxvYyhzaXplb2YoKnRiWzFdKSAqIDMsIEdGUF9LRVJORUwpOworCWlmICghdGJbMV0pIHsKKwkJbGRtX2NyaXQoIk91dCBvZiBtZW1vcnkuIik7CisJCWdvdG8gZXJyOwogCX0KLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCQkvKiBSZWFkIGFuZCBwYXJzZSBhbGwgZm91ciB0b2Mncy4gKi8KLQl7Ci0JCWRhdGEgPSByZWFkX2Rldl9zZWN0b3IgKGJkZXYsIGJhc2UgKyBvZmZbaV0sICZzZWN0KTsKKwl0YlsyXSA9IChzdHJ1Y3QgdG9jYmxvY2sqKSgodTgqKXRiWzFdICsgc2l6ZW9mKCp0YlsxXSkpOworCXRiWzNdID0gKHN0cnVjdCB0b2NibG9jayopKCh1OCopdGJbMl0gKyBzaXplb2YoKnRiWzJdKSk7CisJLyoKKwkgKiBUcnkgdG8gcmVhZCBhbmQgcGFyc2UgYWxsIGZvdXIgVE9DQkxPQ0tzLgorCSAqCisJICogV2luZG93cyBWaXN0YSBMRE0gdjIuMTIgZG9lcyBub3QgYWx3YXlzIGhhdmUgYWxsIGZvdXIgVE9DQkxPQ0tzIHNvCisJICogc2tpcCBhbnkgdGhhdCBmYWlsIGFzIGxvbmcgYXMgd2UgZ2V0IGF0IGxlYXN0IG9uZSB2YWxpZCBUT0NCTE9DSy4KKwkgKi8KKwlmb3IgKG5yX3RicyA9IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWRhdGEgPSByZWFkX2Rldl9zZWN0b3IoYmRldiwgYmFzZSArIG9mZltpXSwgJnNlY3QpOwogCQlpZiAoIWRhdGEpIHsKLQkJCWxkbV9jcml0ICgiRGlzayByZWFkIGZhaWxlZC4iKTsKLQkJCWdvdG8gb3V0OworCQkJbGRtX2Vycm9yKCJEaXNrIHJlYWQgZmFpbGVkIGZvciBUT0NCTE9DSyAlZC4iLCBpKTsKKwkJCWNvbnRpbnVlOwogCQl9Ci0JCXJlc3VsdCA9IGxkbV9wYXJzZV90b2NibG9jayAoZGF0YSwgdGJbaV0pOwotCQlwdXRfZGV2X3NlY3RvciAoc2VjdCk7Ci0JCWlmICghcmVzdWx0KQotCQkJZ290byBvdXQ7CS8qIEFscmVhZHkgbG9nZ2VkICovCisJCWlmIChsZG1fcGFyc2VfdG9jYmxvY2soZGF0YSwgdGJbbnJfdGJzXSkpCisJCQlucl90YnMrKzsKKwkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJfQotCi0JLyogUmFuZ2UgY2hlY2sgdGhlIHRvYyBhZ2FpbnN0IGEgcHJpdmhlYWQuICovCisJaWYgKCFucl90YnMpIHsKKwkJbGRtX2NyaXQoIkZhaWxlZCB0byBmaW5kIGEgdmFsaWQgVE9DQkxPQ0suIik7CisJCWdvdG8gZXJyOworCX0KKwkvKiBSYW5nZSBjaGVjayB0aGUgVE9DQkxPQ0sgYWdhaW5zdCBhIHByaXZoZWFkLiAqLwogCWlmICgoKHRiWzBdLT5iaXRtYXAxX3N0YXJ0ICsgdGJbMF0tPmJpdG1hcDFfc2l6ZSkgPiBwaC0+Y29uZmlnX3NpemUpIHx8Ci0JICAgICgodGJbMF0tPmJpdG1hcDJfc3RhcnQgKyB0YlswXS0+Yml0bWFwMl9zaXplKSA+IHBoLT5jb25maWdfc2l6ZSkpIHsKLQkJbGRtX2NyaXQgKCJUaGUgYml0bWFwcyBhcmUgb3V0IG9mIHJhbmdlLiAgR2l2aW5nIHVwLiIpOwotCQlnb3RvIG91dDsKKwkJCSgodGJbMF0tPmJpdG1hcDJfc3RhcnQgKyB0YlswXS0+Yml0bWFwMl9zaXplKSA+CisJCQlwaC0+Y29uZmlnX3NpemUpKSB7CisJCWxkbV9jcml0KCJUaGUgYml0bWFwcyBhcmUgb3V0IG9mIHJhbmdlLiAgR2l2aW5nIHVwLiIpOworCQlnb3RvIGVycjsKIAl9Ci0KLQlpZiAoIWxkbV9jb21wYXJlX3RvY2Jsb2NrcyAodGJbMF0sIHRiWzFdKSB8fAkvKiBDb21wYXJlIGFsbCB0b2NzLiAqLwotCSAgICAhbGRtX2NvbXBhcmVfdG9jYmxvY2tzICh0YlswXSwgdGJbMl0pIHx8Ci0JICAgICFsZG1fY29tcGFyZV90b2NibG9ja3MgKHRiWzBdLCB0YlszXSkpIHsKLQkJbGRtX2NyaXQgKCJUaGUgVE9DQkxPQ0tzIGRvbid0IG1hdGNoLiIpOwotCQlnb3RvIG91dDsKKwkvKiBDb21wYXJlIGFsbCBsb2FkZWQgVE9DQkxPQ0tzLiAqLworCWZvciAoaSA9IDE7IGkgPCBucl90YnM7IGkrKykgeworCQlpZiAoIWxkbV9jb21wYXJlX3RvY2Jsb2Nrcyh0YlswXSwgdGJbaV0pKSB7CisJCQlsZG1fY3JpdCgiVE9DQkxPQ0tzIDAgYW5kICVkIGRvIG5vdCBtYXRjaC4iLCBpKTsKKwkJCWdvdG8gZXJyOworCQl9CiAJfQotCi0JbGRtX2RlYnVnICgiVmFsaWRhdGVkIFRPQ0JMT0NLcyBzdWNjZXNzZnVsbHkuIik7CisJbGRtX2RlYnVnKCJWYWxpZGF0ZWQgJWQgVE9DQkxPQ0tzIHN1Y2Nlc3NmdWxseS4iLCBucl90YnMpOwogCXJlc3VsdCA9IHRydWU7Ci1vdXQ6Ci0Ja2ZyZWUgKHRiWzFdKTsKLQlrZnJlZSAodGJbMl0pOwotCWtmcmVlICh0YlszXSk7CitlcnI6CisJa2ZyZWUodGJbMV0pOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTU2Niw3ICs1NjksNyBAQAogCiAJcCA9IChzdHJ1Y3QgcGFydGl0aW9uKikoZGF0YSArIDB4MDFCRSk7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKywgcCsrKQotCQlpZiAoU1lTX0lORCAocCkgPT0gV0lOMktfRFlOQU1JQ19QQVJUSVRJT04pIHsKKwkJaWYgKFNZU19JTkQgKHApID09IExETV9QQVJUSVRJT04pIHsKIAkJCXJlc3VsdCA9IHRydWU7CiAJCQlicmVhazsKIAkJfQpAQCAtOTc1LDQ0ICs5NzgsNjggQEAKICAqIFJldHVybjogICd0cnVlJyAgIEB2YiBjb250YWlucyBhIFBhcnRpdGlvbiBWQkxLCiAgKiAgICAgICAgICAnZmFsc2UnICBAdmIgY29udGVudHMgYXJlIG5vdCBkZWZpbmVkCiAgKi8KLXN0YXRpYyBib29sIGxkbV9wYXJzZV9wcnQzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCitzdGF0aWMgYm9vbCBsZG1fcGFyc2VfcHJ0Myhjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiB7CiAJaW50IHJfb2JqaWQsIHJfbmFtZSwgcl9zaXplLCByX3BhcmVudCwgcl9kaXNraWQsIHJfaW5kZXgsIGxlbjsKIAlzdHJ1Y3QgdmJsa19wYXJ0ICpwYXJ0OwogCi0JQlVHX09OICghYnVmZmVyIHx8ICF2Yik7Ci0KLQlyX29iamlkICA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIDApOwotCXJfbmFtZSAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7Ci0Jcl9zaXplICAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDM0LCByX25hbWUpOwotCXJfcGFyZW50ID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgzNCwgcl9zaXplKTsKLQlyX2Rpc2tpZCA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MzQsIHJfcGFyZW50KTsKLQorCUJVR19PTighYnVmZmVyIHx8ICF2Yik7CisJcl9vYmppZCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7CisJaWYgKHJfb2JqaWQgPCAwKSB7CisJCWxkbV9lcnJvcigicl9vYmppZCAlZCA8IDAiLCByX29iamlkKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyX25hbWUgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfb2JqaWQpOworCWlmIChyX25hbWUgPCAwKSB7CisJCWxkbV9lcnJvcigicl9uYW1lICVkIDwgMCIsIHJfbmFtZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcl9zaXplID0gbGRtX3JlbGF0aXZlKGJ1ZmZlciwgYnVmbGVuLCAweDM0LCByX25hbWUpOworCWlmIChyX3NpemUgPCAwKSB7CisJCWxkbV9lcnJvcigicl9zaXplICVkIDwgMCIsIHJfc2l6ZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcl9wYXJlbnQgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MzQsIHJfc2l6ZSk7CisJaWYgKHJfcGFyZW50IDwgMCkgeworCQlsZG1fZXJyb3IoInJfcGFyZW50ICVkIDwgMCIsIHJfcGFyZW50KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyX2Rpc2tpZCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgzNCwgcl9wYXJlbnQpOworCWlmIChyX2Rpc2tpZCA8IDApIHsKKwkJbGRtX2Vycm9yKCJyX2Rpc2tpZCAlZCA8IDAiLCByX2Rpc2tpZCk7CisJCXJldHVybiBmYWxzZTsKKwl9CiAJaWYgKGJ1ZmZlclsweDEyXSAmIFZCTEtfRkxBR19QQVJUX0lOREVYKSB7Ci0JCXJfaW5kZXggPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDM0LCByX2Rpc2tpZCk7CisJCXJfaW5kZXggPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MzQsIHJfZGlza2lkKTsKKwkJaWYgKHJfaW5kZXggPCAwKSB7CisJCQlsZG1fZXJyb3IoInJfaW5kZXggJWQgPCAwIiwgcl9pbmRleCk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KIAkJbGVuID0gcl9pbmRleDsKIAl9IGVsc2UgewogCQlyX2luZGV4ID0gMDsKIAkJbGVuID0gcl9kaXNraWQ7CiAJfQotCWlmIChsZW4gPCAwKQorCWlmIChsZW4gPCAwKSB7CisJCWxkbV9lcnJvcigibGVuICVkIDwgMCIsIGxlbik7CiAJCXJldHVybiBmYWxzZTsKLQorCX0KIAlsZW4gKz0gVkJMS19TSVpFX1BSVDM7Ci0JaWYgKGxlbiAhPSBCRTMyIChidWZmZXIgKyAweDE0KSkKKwlpZiAobGVuID4gQkUzMihidWZmZXIgKyAweDE0KSkgeworCQlsZG1fZXJyb3IoImxlbiAlZCA+IEJFMzIoYnVmZmVyICsgMHgxNCkgJWQiLCBsZW4sCisJCQkJQkUzMihidWZmZXIgKyAweDE0KSk7CiAJCXJldHVybiBmYWxzZTsKLQorCX0KIAlwYXJ0ID0gJnZiLT52YmxrLnBhcnQ7Ci0JcGFydC0+c3RhcnQgICAgICAgICA9IEJFNjQgICAgICAgICAoYnVmZmVyICsgMHgyNCArIHJfbmFtZSk7Ci0JcGFydC0+dm9sdW1lX29mZnNldCA9IEJFNjQgICAgICAgICAoYnVmZmVyICsgMHgyQyArIHJfbmFtZSk7Ci0JcGFydC0+c2l6ZSAgICAgICAgICA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICsgMHgzNCArIHJfbmFtZSk7Ci0JcGFydC0+cGFyZW50X2lkICAgICA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICsgMHgzNCArIHJfc2l6ZSk7Ci0JcGFydC0+ZGlza19pZCAgICAgICA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICsgMHgzNCArIHJfcGFyZW50KTsKKwlwYXJ0LT5zdGFydCA9IEJFNjQoYnVmZmVyICsgMHgyNCArIHJfbmFtZSk7CisJcGFydC0+dm9sdW1lX29mZnNldCA9IEJFNjQoYnVmZmVyICsgMHgyQyArIHJfbmFtZSk7CisJcGFydC0+c2l6ZSA9IGxkbV9nZXRfdm51bShidWZmZXIgKyAweDM0ICsgcl9uYW1lKTsKKwlwYXJ0LT5wYXJlbnRfaWQgPSBsZG1fZ2V0X3ZudW0oYnVmZmVyICsgMHgzNCArIHJfc2l6ZSk7CisJcGFydC0+ZGlza19pZCA9IGxkbV9nZXRfdm51bShidWZmZXIgKyAweDM0ICsgcl9wYXJlbnQpOwogCWlmICh2Yi0+ZmxhZ3MgJiBWQkxLX0ZMQUdfUEFSVF9JTkRFWCkKIAkJcGFydC0+cGFydG51bSA9IGJ1ZmZlclsweDM1ICsgcl9kaXNraWRdOwogCWVsc2UKIAkJcGFydC0+cGFydG51bSA9IDA7Ci0KIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQ3NSw0ICsxNTAyLDMgQEAKIAlrZnJlZSAobGRiKTsKIAlyZXR1cm4gcmVzdWx0OwogfQotCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2xkbS5oIGIvZnMvcGFydGl0aW9ucy9sZG0uaAppbmRleCA2ZThkNzk1Li5kMmU2YTMwIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2xkbS5oCisrKyBiL2ZzL3BhcnRpdGlvbnMvbGRtLmgKQEAgLTIsMTAgKzIsMTAgQEAKICAqIGxkbSAtIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiBSaWNoYXJkIFJ1c3NvbiA8bGRtQGZsYXRjYXAub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDAxICAgICAgQW50b24gQWx0YXBhcm1ha292IDxhaWEyMUBjYW50YWIubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcgQW50b24gQWx0YXBhcm1ha292CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiBKYWtvYiBLZW1pIDxqYWtvYi5rZW1pQHRlbGlhLmNvbT4KICAqCi0gKiBEb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vbGludXgtbnRmcy5zZi5uZXQvbGRtCisgKiBEb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmxpbnV4LW50ZnMub3JnL2NvbnRlbnQvdmlldy8xOS8zNy8KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKQEAgLTkzLDcgKzkzLDcgQEAKIAogI2RlZmluZSBPRkZfVk1EQgkJMTcJCS8qIExpc3Qgb2YgcGFydGl0aW9ucy4gKi8KIAotI2RlZmluZSBXSU4yS19EWU5BTUlDX1BBUlRJVElPTgkweDQyCQkvKiBGb3JtZXJseSBTRlMgKExhbmRpcykuICovCisjZGVmaW5lIExETV9QQVJUSVRJT04JCTB4NDIJCS8qIEZvcm1lcmx5IFNGUyAoTGFuZGlzKS4gKi8KIAogI2RlZmluZSBUT0NfQklUTUFQMQkJImNvbmZpZyIJLyogTmFtZXMgb2YgdGhlIHR3byBkZWZpbmVkICovCiAjZGVmaW5lIFRPQ19CSVRNQVAyCQkibG9nIgkJLyogYml0bWFwcyBpbiB0aGUgVE9DQkxPQ0suICovCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL3N5c3Y2OC5jIGIvZnMvcGFydGl0aW9ucy9zeXN2NjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWJhMjdiCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcGFydGl0aW9ucy9zeXN2NjguYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogIGZzL3BhcnRpdGlvbnMvc3lzdjY4LmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFBoaWxpcHBlIERlIE11eXRlciA8cGhkbUBtYWNxZWwuYmU+CisgKi8KKworI2luY2x1ZGUgImNoZWNrLmgiCisjaW5jbHVkZSAic3lzdjY4LmgiCisKKy8qCisgKglWb2x1bWUgSUQgc3RydWN0dXJlOiBvbiBmaXJzdCAyNTYtYnl0ZXMgc2VjdG9yIG9mIGRpc2sKKyAqLworCitzdHJ1Y3Qgdm9sdW1laWQgeworCXU4CXZpZF91bnVzZWRbMjQ4XTsKKwl1OAl2aWRfbWFjWzhdOwkvKiBBU0NJSSBzdHJpbmcgIk1PVE9ST0xBIiAqLworfTsKKworLyoKKyAqCWNvbmZpZyBibG9jazogc2Vjb25kIDI1Ni1ieXRlcyBzZWN0b3Igb24gZGlzaworICovCisKK3N0cnVjdCBka2NvbmZpZyB7CisJdTgJaW9zX3VudXNlZDBbMTI4XTsKKwlfX2JlMzIJaW9zX3NsY2JsazsJLyogU2xpY2UgdGFibGUgYmxvY2sgbnVtYmVyICovCisJX19iZTE2CWlvc19zbGNjbnQ7CS8qIE51bWJlciBvZiBlbnRyaWVzIGluIHNsaWNlIHRhYmxlICovCisJdTgJaW9zX3VudXNlZDFbMTIyXTsKK307CisKKy8qCisgKgljb21iaW5lZCB2b2x1bWVpZCBhbmQgZGtjb25maWcgYmxvY2sKKyAqLworCitzdHJ1Y3QgZGtibGswIHsKKwlzdHJ1Y3Qgdm9sdW1laWQgZGtfdmlkOworCXN0cnVjdCBka2NvbmZpZyBka19pb3M7Cit9OworCisvKgorICoJU2xpY2UgVGFibGUgU3RydWN0dXJlCisgKi8KKworc3RydWN0IHNsaWNlIHsKKwlfX2JlMzIJbmJsb2NrczsJCS8qIHNsaWNlIHNpemUgKGluIGJsb2NrcykgKi8KKwlfX2JlMzIJYmxrb2ZmOwkJCS8qIGJsb2NrIG9mZnNldCBvZiBzbGljZSAqLworfTsKKworCitpbnQgc3lzdjY4X3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCWludCBpLCBzbGljZXM7CisJaW50IHNsb3QgPSAxOworCVNlY3RvciBzZWN0OworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJc3RydWN0IGRrYmxrMCAqYjsKKwlzdHJ1Y3Qgc2xpY2UgKnNsaWNlOworCisJZGF0YSA9IHJlYWRfZGV2X3NlY3RvcihiZGV2LCAwLCAmc2VjdCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLTE7CisKKwliID0gKHN0cnVjdCBka2JsazAgKilkYXRhOworCWlmIChtZW1jbXAoYi0+ZGtfdmlkLnZpZF9tYWMsICJNT1RPUk9MQSIsIHNpemVvZihiLT5ka192aWQudmlkX21hYykpKSB7CisJCXB1dF9kZXZfc2VjdG9yKHNlY3QpOworCQlyZXR1cm4gMDsKKwl9CisJc2xpY2VzID0gYmUxNl90b19jcHUoYi0+ZGtfaW9zLmlvc19zbGNjbnQpOworCWkgPSBiZTMyX3RvX2NwdShiLT5ka19pb3MuaW9zX3NsY2Jsayk7CisJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CisKKwlkYXRhID0gcmVhZF9kZXZfc2VjdG9yKGJkZXYsIGksICZzZWN0KTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtMTsKKworCXNsaWNlcyAtPSAxOyAvKiBsYXN0IHNsaWNlIGlzIHRoZSB3aG9sZSBkaXNrICovCisJcHJpbnRrKCJzeXNWNjg6ICVzKHMldSkiLCBzdGF0ZS0+bmFtZSwgc2xpY2VzKTsKKwlzbGljZSA9IChzdHJ1Y3Qgc2xpY2UgKilkYXRhOworCWZvciAoaSA9IDA7IGkgPCBzbGljZXM7IGkrKywgc2xpY2UrKykgeworCQlpZiAoc2xvdCA9PSBzdGF0ZS0+bGltaXQpCisJCQlicmVhazsKKwkJaWYgKGJlMzJfdG9fY3B1KHNsaWNlLT5uYmxvY2tzKSkgeworCQkJcHV0X3BhcnRpdGlvbihzdGF0ZSwgc2xvdCwKKwkJCQliZTMyX3RvX2NwdShzbGljZS0+Ymxrb2ZmKSwKKwkJCQliZTMyX3RvX2NwdShzbGljZS0+bmJsb2NrcykpOworCQkJcHJpbnRrKCIocyV1KSIsIGkpOworCQl9CisJCXNsb3QrKzsKKwl9CisJcHJpbnRrKCJcbiIpOworCXB1dF9kZXZfc2VjdG9yKHNlY3QpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9zeXN2NjguaCBiL2ZzL3BhcnRpdGlvbnMvc3lzdjY4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3MzNmNgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3BhcnRpdGlvbnMvc3lzdjY4LmgKQEAgLTAsMCArMSBAQAorZXh0ZXJuIGludCBzeXN2NjhfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwpkaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jCmluZGV4IGViYWZkZTcuLjNhODk1OTIgMTAwNjQ0Ci0tLSBhL2ZzL3BpcGUuYworKysgYi9mcy9waXBlLmMKQEAgLTg0MSw4ICs4NDEsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIHBpcGVmc19kbmFtZSgpIGlzIGNhbGxlZCBmcm9tIGRfcGF0aCgpLgorICovCitzdGF0aWMgY2hhciAqcGlwZWZzX2RuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKQoreworCXJldHVybiBkeW5hbWljX2RuYW1lKGRlbnRyeSwgYnVmZmVyLCBidWZsZW4sICJwaXBlOlslbHVdIiwKKwkJCQlkZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKK30KKwogc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaXBlZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlCT0gcGlwZWZzX2RlbGV0ZV9kZW50cnksCisJLmRfZG5hbWUJPSBwaXBlZnNfZG5hbWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlub2RlICogZ2V0X3BpcGVfaW5vZGUodm9pZCkKQEAgLTg4OCw4ICs4OTgsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGZpbGUgKmY7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCWNoYXIgbmFtZVszMl07Ci0Jc3RydWN0IHFzdHIgdGhpczsKKwlzdHJ1Y3QgcXN0ciBuYW1lID0geyAubmFtZSA9ICIiIH07CiAKIAlmID0gZ2V0X2VtcHR5X2ZpbHAoKTsKIAlpZiAoIWYpCkBAIC04OTksMTEgKzkwOCw4IEBACiAJaWYgKCFpbm9kZSkKIAkJZ290byBlcnJfZmlsZTsKIAotCXRoaXMubGVuID0gc3ByaW50ZihuYW1lLCAiWyVsdV0iLCBpbm9kZS0+aV9pbm8pOwotCXRoaXMubmFtZSA9IG5hbWU7Ci0JdGhpcy5oYXNoID0gMDsKIAllcnIgPSAtRU5PTUVNOwotCWRlbnRyeSA9IGRfYWxsb2MocGlwZV9tbnQtPm1udF9zYi0+c19yb290LCAmdGhpcyk7CisJZGVudHJ5ID0gZF9hbGxvYyhwaXBlX21udC0+bW50X3NiLT5zX3Jvb3QsICZuYW1lKTsKIAlpZiAoIWRlbnRyeSkKIAkJZ290byBlcnJfaW5vZGU7CiAKZGlmZiAtLWdpdCBhL2ZzL3Bub2RlLmMgYi9mcy9wbm9kZS5jCmluZGV4IDU2YWFjZWEuLjg5OTQwZjIgMTAwNjQ0Ci0tLSBhL2ZzL3Bub2RlLmMKKysrIGIvZnMvcG5vZGUuYwpAQCAtNTksNyArNTksNyBAQAogCX0gZWxzZSB7CiAJCXN0cnVjdCBsaXN0X2hlYWQgKnAgPSAmbW50LT5tbnRfc2xhdmVfbGlzdDsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KHApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9tbnQgPSBsaXN0X2VudHJ5KHAtPm5leHQsCisgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9tbnQgPSBsaXN0X2ZpcnN0X2VudHJ5KHAsCiAJCQkJCXN0cnVjdCB2ZnNtb3VudCwgbW50X3NsYXZlKTsKIAkJCWxpc3RfZGVsX2luaXQoJnNsYXZlX21udC0+bW50X3NsYXZlKTsKIAkJCXNsYXZlX21udC0+bW50X21hc3RlciA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggMDdjOWNkYi4uNzRmMzBlMCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtNDEwLDkgKzQxMCw5IEBACiAJLyogY29udmVydCBuc2VjIC0+IHRpY2tzICovCiAJc3RhcnRfdGltZSA9IG5zZWNfdG9fY2xvY2tfdChzdGFydF90aW1lKTsKIAotCXJlcyA9IHNwcmludGYoYnVmZmVyLCIlZCAoJXMpICVjICVkICVkICVkICVkICVkICVsdSAlbHUgXAorCXJlcyA9IHNwcmludGYoYnVmZmVyLCIlZCAoJXMpICVjICVkICVkICVkICVkICVkICV1ICVsdSBcCiAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsZCAlbGQgJWxkICVsZCAlZCAwICVsbHUgJWx1ICVsZCAlbHUgJWx1ICVsdSAlbHUgJWx1IFwKLSVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWQgJWQgJWx1ICVsdSAlbGx1XG4iLAorJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlZCAlZCAldSAldSAlbGx1XG4iLAogCQl0YXNrLT5waWQsCiAJCXRjb21tLAogCQlzdGF0ZSwKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggZWMxNThkZC4uYTVmYTFmZCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTYxLDkgKzYxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L21udF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KQEAgLTkwLDggKzkwLDggQEAKICNkZWZpbmUgUFJPQ19OVU1CVUYgMTMKIAogc3RydWN0IHBpZF9lbnRyeSB7Ci0JaW50IGxlbjsKIAljaGFyICpuYW1lOworCWludCBsZW47CiAJbW9kZV90IG1vZGU7CiAJY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmlvcDsKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3A7CkBAIC05OSw4ICs5OSw4IEBACiB9OwogCiAjZGVmaW5lIE5PRChOQU1FLCBNT0RFLCBJT1AsIEZPUCwgT1ApIHsJCQlcCi0JLmxlbiAgPSBzaXplb2YoTkFNRSkgLSAxLAkJCVwKIAkubmFtZSA9IChOQU1FKSwJCQkJCVwKKwkubGVuICA9IHNpemVvZihOQU1FKSAtIDEsCQkJXAogCS5tb2RlID0gTU9ERSwJCQkJCVwKIAkuaW9wICA9IElPUCwJCQkJCVwKIAkuZm9wICA9IEZPUCwJCQkJCVwKQEAgLTEyMyw2ICsxMjMsOSBAQAogCQlOVUxMLCAmcHJvY19pbmZvX2ZpbGVfb3BlcmF0aW9ucywJXAogCQl7IC5wcm9jX3JlYWQgPSAmcHJvY18jI09UWVBFIH0gKQogCitpbnQgbWFwc19wcm90ZWN0OworRVhQT1JUX1NZTUJPTChtYXBzX3Byb3RlY3QpOworCiBzdGF0aWMgc3RydWN0IGZzX3N0cnVjdCAqZ2V0X2ZzX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJc3RydWN0IGZzX3N0cnVjdCAqZnM7CkBAIC0yNzUsMTcgKzI3OCwxNSBAQAogICovCiBzdGF0aWMgaW50IHByb2NfcGlkX3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqYnVmZmVyKQogewotCWNoYXIgKm1vZG5hbWU7Ci0JY29uc3QgY2hhciAqc3ltX25hbWU7Ci0JdW5zaWduZWQgbG9uZyB3Y2hhbiwgc2l6ZSwgb2Zmc2V0OwotCWNoYXIgbmFtZWJ1ZltLU1lNX05BTUVfTEVOKzFdOworCXVuc2lnbmVkIGxvbmcgd2NoYW47CisJY2hhciBzeW1uYW1lW0tTWU1fTkFNRV9MRU4rMV07CiAKIAl3Y2hhbiA9IGdldF93Y2hhbih0YXNrKTsKIAotCXN5bV9uYW1lID0ga2FsbHN5bXNfbG9va3VwKHdjaGFuLCAmc2l6ZSwgJm9mZnNldCwgJm1vZG5hbWUsIG5hbWVidWYpOwotCWlmIChzeW1fbmFtZSkKLQkJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJXMiLCBzeW1fbmFtZSk7Ci0JcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJWx1Iiwgd2NoYW4pOworCWlmIChsb29rdXBfc3ltYm9sX25hbWUod2NoYW4sIHN5bW5hbWUpIDwgMCkKKwkJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJWx1Iiwgd2NoYW4pOworCWVsc2UKKwkJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJXMiLCBzeW1uYW1lKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfS0FMTFNZTVMgKi8KIApAQCAtMzEwLDcgKzMxMSw5IEBACiAJc3RydWN0IHRpbWVzcGVjIHVwdGltZTsKIAogCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZ1cHRpbWUpOworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJcG9pbnRzID0gYmFkbmVzcyh0YXNrLCB1cHRpbWUudHZfc2VjKTsKKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJWx1XG4iLCBwb2ludHMpOwogfQogCkBAIC0zNDQsMTEgKzM0Nyw4IEBACiAJCXJldHVybiAtRVBFUk07CiAKIAllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7Ci0JaWYgKCFlcnJvcikgewotCQllcnJvciA9IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoZGVudHJ5LCBhdHRyKTsKLQkJaWYgKCFlcnJvcikKLQkJCWVycm9yID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7Ci0JfQorCWlmICghZXJyb3IpCisJCWVycm9yID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC02NjAsNyArNjYwLDYgQEAKIAljaGFyIGJ1ZmZlcltQUk9DX05VTUJVRl07CiAJc2l6ZV90IGxlbjsKIAlpbnQgb29tX2FkanVzdDsKLQlsb2ZmX3QgX19wcG9zID0gKnBwb3M7CiAKIAlpZiAoIXRhc2spCiAJCXJldHVybiAtRVNSQ0g7CkBAIC02NjgsMTQgKzY2Nyw4IEBACiAJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCiAJbGVuID0gc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVpXG4iLCBvb21fYWRqdXN0KTsKLQlpZiAoX19wcG9zID49IGxlbikKLQkJcmV0dXJuIDA7Ci0JaWYgKGNvdW50ID4gbGVuLV9fcHBvcykKLQkJY291bnQgPSBsZW4tX19wcG9zOwotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBidWZmZXIgKyBfX3Bwb3MsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JKnBwb3MgPSBfX3Bwb3MgKyBjb3VudDsKLQlyZXR1cm4gY291bnQ7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgYnVmZmVyLCBsZW4pOwogfQogCiBzdGF0aWMgc3NpemVfdCBvb21fYWRqdXN0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLApAQCAtNzE1LDYgKzcwOCw3IEBACiAJLndyaXRlCQk9IG9vbV9hZGp1c3Rfd3JpdGUsCiB9OwogCisjaWZkZWYgQ09ORklHX01NVQogc3RhdGljIHNzaXplX3QgY2xlYXJfcmVmc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKQEAgLTc0OCw2ICs3NDIsNyBAQAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnMgPSB7CiAJLndyaXRlCQk9IGNsZWFyX3JlZnNfd3JpdGUsCiB9OworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAjZGVmaW5lIFRNUEJVRkxFTiAyMQpAQCAtODIzLDcgKzgxOCw2IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBnZXRfcHJvY190YXNrKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAljaGFyIF9fYnVmWzIwXTsKLQlsb2ZmX3QgX19wcG9zID0gKnBwb3M7CiAJc2l6ZV90IGxlbjsKIAogCWlmICghdHNrKQpAQCAtODMxLDE0ICs4MjUsOCBAQAogCS8qIG5vIG5lZWQgdG8gcHJpbnQgdGhlIHRyYWlsaW5nIHplcm8sIHNvIHVzZSBvbmx5IGxlbiAqLwogCWxlbiA9IHNwcmludGYoX19idWYsICIldVxuIiwgdHNrLT5zZWNjb21wLm1vZGUpOwogCXB1dF90YXNrX3N0cnVjdCh0c2spOwotCWlmIChfX3Bwb3MgPj0gbGVuKQotCQlyZXR1cm4gMDsKLQlpZiAoY291bnQgPiBsZW4gLSBfX3Bwb3MpCi0JCWNvdW50ID0gbGVuIC0gX19wcG9zOwotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBfX2J1ZiArIF9fcHBvcywgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkqcHBvcyA9IF9fcHBvcyArIGNvdW50OwotCXJldHVybiBjb3VudDsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCBfX2J1ZiwgbGVuKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2VjY29tcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKQEAgLTg5Nyw3ICs4ODUsNiBAQAogCWNoYXIgYnVmZmVyW1BST0NfTlVNQlVGXTsKIAlzaXplX3QgbGVuOwogCWludCBtYWtlX2l0X2ZhaWw7Ci0JbG9mZl90IF9fcHBvcyA9ICpwcG9zOwogCiAJaWYgKCF0YXNrKQogCQlyZXR1cm4gLUVTUkNIOwpAQCAtOTA1LDE0ICs4OTIsOCBAQAogCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIAogCWxlbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlaVxuIiwgbWFrZV9pdF9mYWlsKTsKLQlpZiAoX19wcG9zID49IGxlbikKLQkJcmV0dXJuIDA7Ci0JaWYgKGNvdW50ID4gbGVuLV9fcHBvcykKLQkJY291bnQgPSBsZW4tX19wcG9zOwotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBidWZmZXIgKyBfX3Bwb3MsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JKnBwb3MgPSBfX3Bwb3MgKyBjb3VudDsKLQlyZXR1cm4gY291bnQ7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgYnVmZmVyLCBsZW4pOwogfQogCiBzdGF0aWMgc3NpemVfdCBwcm9jX2ZhdWx0X2luamVjdF93cml0ZShzdHJ1Y3QgZmlsZSAqIGZpbGUsCkBAIC05NzUsNyArOTU2LDcgQEAKIAogCWlmICghdG1wKQogCQlyZXR1cm4gLUVOT01FTTsKLQkJCisKIAlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlwYXRoID0gZF9wYXRoKGRlbnRyeSwgbW50LCB0bXAsIFBBR0VfU0laRSk7CiAJbGVuID0gUFRSX0VSUihwYXRoKTsKQEAgLTExNTUsNyArMTEzNiw4IEBACiAKIC8qIExvb2t1cHMgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgZGVudHJ5ICppbnN0YW50aWF0ZV90KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB2b2lkICopOwordHlwZWRlZiBzdHJ1Y3QgZGVudHJ5ICppbnN0YW50aWF0ZV90KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCisJCQkJc3RydWN0IHRhc2tfc3RydWN0ICosIGNvbnN0IHZvaWQgKik7CiAKIC8qCiAgKiBGaWxsIGEgZGlyZWN0b3J5IGVudHJ5LgpAQCAtMTE3MSw3ICsxMTUzLDcgQEAKICAqLwogc3RhdGljIGludCBwcm9jX2ZpbGxfY2FjaGUoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIsCiAJY2hhciAqbmFtZSwgaW50IGxlbiwKLQlpbnN0YW50aWF0ZV90IGluc3RhbnRpYXRlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKnB0cikKKwlpbnN0YW50aWF0ZV90IGluc3RhbnRpYXRlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNvbnN0IHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpjaGlsZCwgKmRpciA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTEyMzMsNyArMTIxNSwxMCBAQAogCXJldHVybiB+MFU7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19mZF9saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKipkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqKm1udCkKKyNkZWZpbmUgUFJPQ19GRElORk9fTUFYIDY0CisKK3N0YXRpYyBpbnQgcHJvY19mZF9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKipkZW50cnksCisJCQlzdHJ1Y3QgdmZzbW91bnQgKiptbnQsIGNoYXIgKmluZm8pCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7CiAJc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMgPSBOVUxMOwpAQCAtMTI1Miw4ICsxMjM3LDE2IEBACiAJCXNwaW5fbG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CiAJCWZpbGUgPSBmY2hlY2tfZmlsZXMoZmlsZXMsIGZkKTsKIAkJaWYgKGZpbGUpIHsKLQkJCSptbnQgPSBtbnRnZXQoZmlsZS0+Zl9wYXRoLm1udCk7Ci0JCQkqZGVudHJ5ID0gZGdldChmaWxlLT5mX3BhdGguZGVudHJ5KTsKKwkJCWlmIChtbnQpCisJCQkJKm1udCA9IG1udGdldChmaWxlLT5mX3BhdGgubW50KTsKKwkJCWlmIChkZW50cnkpCisJCQkJKmRlbnRyeSA9IGRnZXQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CisJCQlpZiAoaW5mbykKKwkJCQlzbnByaW50ZihpbmZvLCBQUk9DX0ZESU5GT19NQVgsCisJCQkJCSAicG9zOlx0JWxsaVxuIgorCQkJCQkgImZsYWdzOlx0MCVvXG4iLAorCQkJCQkgKGxvbmcgbG9uZykgZmlsZS0+Zl9wb3MsCisJCQkJCSBmaWxlLT5mX2ZsYWdzKTsKIAkJCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAkJCXB1dF9maWxlc19zdHJ1Y3QoZmlsZXMpOwogCQkJcmV0dXJuIDA7CkBAIC0xMjY0LDYgKzEyNTcsMTIgQEAKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIAorc3RhdGljIGludCBwcm9jX2ZkX2xpbmsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqKmRlbnRyeSwKKwkJCXN0cnVjdCB2ZnNtb3VudCAqKm1udCkKK3sKKwlyZXR1cm4gcHJvY19mZF9pbmZvKGlub2RlLCBkZW50cnksIG1udCwgTlVMTCk7Cit9CisKIHN0YXRpYyBpbnQgdGlkX2ZkX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwpAQCAtMTMwNiw5ICsxMzA1LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpwcm9jX2ZkX2luc3RhbnRpYXRlKHN0cnVjdCBpbm9kZSAqZGlyLAotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpwdHIpCisJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNvbnN0IHZvaWQgKnB0cikKIHsKLQl1bnNpZ25lZCBmZCA9ICoodW5zaWduZWQgKilwdHI7CisJdW5zaWduZWQgZmQgPSAqKGNvbnN0IHVuc2lnbmVkICopcHRyOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzOwogIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpAQCAtMTM1OSw3ICsxMzU4LDkgQEAKIAlnb3RvIG91dDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnkgKnByb2NfbG9va3VwZmQoc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpwcm9jX2xvb2t1cGZkX2NvbW1vbihzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQkgICBpbnN0YW50aWF0ZV90IGluc3RhbnRpYXRlKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soZGlyKTsKIAl1bnNpZ25lZCBmZCA9IG5hbWVfdG9faW50KGRlbnRyeSk7CkBAIC0xMzcwLDIzICsxMzcxLDE1IEBACiAJaWYgKGZkID09IH4wVSkKIAkJZ290byBvdXQ7CiAKLQlyZXN1bHQgPSBwcm9jX2ZkX2luc3RhbnRpYXRlKGRpciwgZGVudHJ5LCB0YXNrLCAmZmQpOworCXJlc3VsdCA9IGluc3RhbnRpYXRlKGRpciwgZGVudHJ5LCB0YXNrLCAmZmQpOwogb3V0OgogCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIG91dF9ub190YXNrOgogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19mZF9maWxsX2NhY2hlKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyLAotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGZkKQotewotCWNoYXIgbmFtZVtQUk9DX05VTUJVRl07Ci0JaW50IGxlbiA9IHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVkIiwgZmQpOwotCXJldHVybiBwcm9jX2ZpbGxfY2FjaGUoZmlscCwgZGlyZW50LCBmaWxsZGlyLCBuYW1lLCBsZW4sCi0JCQkJcHJvY19mZF9pbnN0YW50aWF0ZSwgdGFzaywgJmZkKTsKLX0KLQotc3RhdGljIGludCBwcm9jX3JlYWRmZChzdHJ1Y3QgZmlsZSAqIGZpbHAsIHZvaWQgKiBkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQorc3RhdGljIGludCBwcm9jX3JlYWRmZF9jb21tb24oc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogZGlyZW50LAorCQkJICAgICAgZmlsbGRpcl90IGZpbGxkaXIsIGluc3RhbnRpYXRlX3QgaW5zdGFudGlhdGUpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwpAQCAtMTQyMiwxMiArMTQxNSwxNyBAQAogCQkJZm9yIChmZCA9IGZpbHAtPmZfcG9zLTI7CiAJCQkgICAgIGZkIDwgZmR0LT5tYXhfZmRzOwogCQkJICAgICBmZCsrLCBmaWxwLT5mX3BvcysrKSB7CisJCQkJY2hhciBuYW1lW1BST0NfTlVNQlVGXTsKKwkJCQlpbnQgbGVuOwogCiAJCQkJaWYgKCFmY2hlY2tfZmlsZXMoZmlsZXMsIGZkKSkKIAkJCQkJY29udGludWU7CiAJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQkJCQlpZiAocHJvY19mZF9maWxsX2NhY2hlKGZpbHAsIGRpcmVudCwgZmlsbGRpciwgcCwgZmQpIDwgMCkgeworCQkJCWxlbiA9IHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVkIiwgZmQpOworCQkJCWlmIChwcm9jX2ZpbGxfY2FjaGUoZmlscCwgZGlyZW50LCBmaWxsZGlyLAorCQkJCQkJICAgIG5hbWUsIGxlbiwgaW5zdGFudGlhdGUsCisJCQkJCQkgICAgcCwgJmZkKSA8IDApIHsKIAkJCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC0xNDQyLDIzICsxNDQwLDExOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpwcm9jX2xvb2t1cGZkKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJICAgIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXJldHVybiBwcm9jX2xvb2t1cGZkX2NvbW1vbihkaXIsIGRlbnRyeSwgcHJvY19mZF9pbnN0YW50aWF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19yZWFkZmQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCit7CisJcmV0dXJuIHByb2NfcmVhZGZkX2NvbW1vbihmaWxwLCBkaXJlbnQsIGZpbGxkaXIsIHByb2NfZmRfaW5zdGFudGlhdGUpOworfQorCitzdGF0aWMgc3NpemVfdCBwcm9jX2ZkaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyIHRtcFtQUk9DX0ZESU5GT19NQVhdOworCWludCBlcnIgPSBwcm9jX2ZkX2luZm8oZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgTlVMTCwgTlVMTCwgdG1wKTsKKwlpZiAoIWVycikKKwkJZXJyID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBsZW4sIHBwb3MsIHRtcCwgc3RybGVuKHRtcCkpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZmRpbmZvX2ZpbGVfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBub25zZWVrYWJsZV9vcGVuLAorCS5yZWFkCQk9IHByb2NfZmRpbmZvX3JlYWQsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2ZkX29wZXJhdGlvbnMgPSB7CiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IHByb2NfcmVhZGZkLAogfTsKIAogLyoKKyAqIC9wcm9jL3BpZC9mZCBuZWVkcyBhIHNwZWNpYWwgcGVybWlzc2lvbiBoYW5kbGVyIHNvIHRoYXQgYSBwcm9jZXNzIGNhbiBzdGlsbAorICogYWNjZXNzIC9wcm9jL3NlbGYvZmQgYWZ0ZXIgaXQgaGFzIGV4ZWN1dGVkIGEgc2V0dWlkKCkuCisgKi8KK3N0YXRpYyBpbnQgcHJvY19mZF9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLAorCQkJCXN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCWludCBydjsKKworCXJ2ID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKKwlpZiAocnYgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHRhc2tfcGlkKGN1cnJlbnQpID09IHByb2NfcGlkKGlub2RlKSkKKwkJcnYgPSAwOworCXJldHVybiBydjsKK30KKworLyoKICAqIHByb2MgZGlyZWN0b3JpZXMgY2FuIGRvIGFsbW9zdCBub3RoaW5nLi4KICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfZmRfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkubG9va3VwCQk9IHByb2NfbG9va3VwZmQsCisJLnBlcm1pc3Npb24JPSBwcm9jX2ZkX3Blcm1pc3Npb24sCiAJLnNldGF0dHIJPSBwcm9jX3NldGF0dHIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqcHJvY19waWRlbnRfaW5zdGFudGlhdGUoc3RydWN0IGlub2RlICpkaXIsCi0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKnB0cikKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpwcm9jX2ZkaW5mb19pbnN0YW50aWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgdm9pZCAqcHRyKQogewotCXN0cnVjdCBwaWRfZW50cnkgKnAgPSBwdHI7CisJdW5zaWduZWQgZmQgPSAqKHVuc2lnbmVkICopcHRyOworIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOworIAlzdHJ1Y3QgcHJvY19pbm9kZSAqZWk7CisJc3RydWN0IGRlbnRyeSAqZXJyb3IgPSBFUlJfUFRSKC1FTk9FTlQpOworCisJaW5vZGUgPSBwcm9jX3BpZF9tYWtlX2lub2RlKGRpci0+aV9zYiwgdGFzayk7CisJaWYgKCFpbm9kZSkKKwkJZ290byBvdXQ7CisJZWkgPSBQUk9DX0koaW5vZGUpOworCWVpLT5mZCA9IGZkOworCWlub2RlLT5pX21vZGUgPSBTX0lGUkVHIHwgU19JUlVTUjsKKwlpbm9kZS0+aV9mb3AgPSAmcHJvY19mZGluZm9fZmlsZV9vcGVyYXRpb25zOworCWRlbnRyeS0+ZF9vcCA9ICZ0aWRfZmRfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CisJLyogQ2xvc2UgdGhlIHJhY2Ugb2YgdGhlIHByb2Nlc3MgZHlpbmcgYmVmb3JlIHdlIHJldHVybiB0aGUgZGVudHJ5ICovCisJaWYgKHRpZF9mZF9yZXZhbGlkYXRlKGRlbnRyeSwgTlVMTCkpCisJCWVycm9yID0gTlVMTDsKKworIG91dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpwcm9jX2xvb2t1cGZkaW5mbyhzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlyZXR1cm4gcHJvY19sb29rdXBmZF9jb21tb24oZGlyLCBkZW50cnksIHByb2NfZmRpbmZvX2luc3RhbnRpYXRlKTsKK30KKworc3RhdGljIGludCBwcm9jX3JlYWRmZGluZm8oc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCit7CisJcmV0dXJuIHByb2NfcmVhZGZkX2NvbW1vbihmaWxwLCBkaXJlbnQsIGZpbGxkaXIsCisJCQkJICBwcm9jX2ZkaW5mb19pbnN0YW50aWF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZmRpbmZvX29wZXJhdGlvbnMgPSB7CisJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKKwkucmVhZGRpcgk9IHByb2NfcmVhZGZkaW5mbywKK307CisKKy8qCisgKiBwcm9jIGRpcmVjdG9yaWVzIGNhbiBkbyBhbG1vc3Qgbm90aGluZy4uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX2ZkaW5mb19pbm9kZV9vcGVyYXRpb25zID0geworCS5sb29rdXAJCT0gcHJvY19sb29rdXBmZGluZm8sCisJLnNldGF0dHIJPSBwcm9jX3NldGF0dHIsCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpwcm9jX3BpZGVudF9pbnN0YW50aWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgdm9pZCAqcHRyKQoreworCWNvbnN0IHN0cnVjdCBwaWRfZW50cnkgKnAgPSBwdHI7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgcHJvY19pbm9kZSAqZWk7CiAJc3RydWN0IGRlbnRyeSAqZXJyb3IgPSBFUlJfUFRSKC1FSU5WQUwpOwpAQCAtMTQ4NywxMyArMTU4MSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcHJvY19waWRlbnRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCAKIAkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJIHN0cnVjdCBwaWRfZW50cnkgKmVudHMsCisJCQkJCSBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5ICplbnRzLAogCQkJCQkgdW5zaWduZWQgaW50IG5lbnRzKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGRlbnRyeSAqZXJyb3I7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZ2V0X3Byb2NfdGFzayhkaXIpOwotCXN0cnVjdCBwaWRfZW50cnkgKnAsICpsYXN0OworCWNvbnN0IHN0cnVjdCBwaWRfZW50cnkgKnAsICpsYXN0OwogCiAJZXJyb3IgPSBFUlJfUFRSKC1FTk9FTlQpOwogCWlub2RlID0gTlVMTDsKQEAgLTE1MjIsOCArMTYxNiw4IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IHByb2NfcGlkZW50X2ZpbGxfY2FjaGUoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIsCi0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcGlkX2VudHJ5ICpwKQorc3RhdGljIGludCBwcm9jX3BpZGVudF9maWxsX2NhY2hlKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsCisJZmlsbGRpcl90IGZpbGxkaXIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSAqcCkKIHsKIAlyZXR1cm4gcHJvY19maWxsX2NhY2hlKGZpbHAsIGRpcmVudCwgZmlsbGRpciwgcC0+bmFtZSwgcC0+bGVuLAogCQkJCXByb2NfcGlkZW50X2luc3RhbnRpYXRlLCB0YXNrLCBwKTsKQEAgLTE1MzEsMTQgKzE2MjUsMTQgQEAKIAogc3RhdGljIGludCBwcm9jX3BpZGVudF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLAogCQl2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyLAotCQlzdHJ1Y3QgcGlkX2VudHJ5ICplbnRzLCB1bnNpZ25lZCBpbnQgbmVudHMpCisJCWNvbnN0IHN0cnVjdCBwaWRfZW50cnkgKmVudHMsIHVuc2lnbmVkIGludCBuZW50cykKIHsKIAlpbnQgaTsKIAlpbnQgcGlkOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKLQlzdHJ1Y3QgcGlkX2VudHJ5ICpwLCAqbGFzdDsKKwljb25zdCBzdHJ1Y3QgcGlkX2VudHJ5ICpwLCAqbGFzdDsKIAlpbm9fdCBpbm87CiAJaW50IHJldDsKIApAQCAtMTY1Myw3ICsxNzQ3LDcgQEAKIAkud3JpdGUJCT0gcHJvY19waWRfYXR0cl93cml0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGlkX2VudHJ5IGF0dHJfZGlyX3N0dWZmW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSBhdHRyX2Rpcl9zdHVmZltdID0gewogCVJFRygiY3VycmVudCIsICAgIFNfSVJVR098U19JV1VHTywgcGlkX2F0dHIpLAogCVJFRygicHJldiIsICAgICAgIFNfSVJVR08sCSAgIHBpZF9hdHRyKSwKIAlSRUcoImV4ZWMiLCAgICAgICBTX0lSVUdPfFNfSVdVR08sIHBpZF9hdHRyKSwKQEAgLTE3MTksNyArMTgxMyw3IEBACiAgKiB0aGF0IHByb3Blcmx5IGJlbG9uZyB0byB0aGUgL3Byb2MgZmlsZXN5c3RlbSwgYXMgdGhleSBkZXNjcmliZQogICogZGVzY3JpYmUgc29tZXRoaW5nIHRoYXQgaXMgcHJvY2VzcyByZWxhdGVkLgogICovCi1zdGF0aWMgc3RydWN0IHBpZF9lbnRyeSBwcm9jX2Jhc2Vfc3R1ZmZbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHByb2NfYmFzZV9zdHVmZltdID0gewogCU5PRCgic2VsZiIsIFNfSUZMTkt8U19JUldYVUdPLAogCQkmcHJvY19zZWxmX2lub2RlX29wZXJhdGlvbnMsIE5VTEwsIHt9KSwKIH07CkBAIC0xNzQ4LDkgKzE4NDIsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKnByb2NfYmFzZV9pbnN0YW50aWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqcHRyKQorCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjb25zdCB2b2lkICpwdHIpCiB7Ci0Jc3RydWN0IHBpZF9lbnRyeSAqcCA9IHB0cjsKKwljb25zdCBzdHJ1Y3QgcGlkX2VudHJ5ICpwID0gcHRyOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHByb2NfaW5vZGUgKmVpOwogCXN0cnVjdCBkZW50cnkgKmVycm9yID0gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTE3OTgsNyArMTg5Miw3IEBACiB7CiAJc3RydWN0IGRlbnRyeSAqZXJyb3I7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZ2V0X3Byb2NfdGFzayhkaXIpOwotCXN0cnVjdCBwaWRfZW50cnkgKnAsICpsYXN0OworCWNvbnN0IHN0cnVjdCBwaWRfZW50cnkgKnAsICpsYXN0OwogCiAJZXJyb3IgPSBFUlJfUFRSKC1FTk9FTlQpOwogCkBAIC0xODI0LDggKzE5MTgsOCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBwcm9jX2Jhc2VfZmlsbF9jYWNoZShzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpciwKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwaWRfZW50cnkgKnApCitzdGF0aWMgaW50IHByb2NfYmFzZV9maWxsX2NhY2hlKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsCisJZmlsbGRpcl90IGZpbGxkaXIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSAqcCkKIHsKIAlyZXR1cm4gcHJvY19maWxsX2NhY2hlKGZpbHAsIGRpcmVudCwgZmlsbGRpciwgcC0+bmFtZSwgcC0+bGVuLAogCQkJCXByb2NfYmFzZV9pbnN0YW50aWF0ZSwgdGFzaywgcCk7CkBAIC0xODYyLDkgKzE5NTYsMTAgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfdGFza19vcGVyYXRpb25zOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfdGFza19pbm9kZV9vcGVyYXRpb25zOwogCi1zdGF0aWMgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRnaWRfYmFzZV9zdHVmZltdID0gewogCURJUigidGFzayIsICAgICAgIFNfSVJVR098U19JWFVHTywgdGFzayksCiAJRElSKCJmZCIsICAgICAgICAgU19JUlVTUnxTX0lYVVNSLCBmZCksCisJRElSKCJmZGluZm8iLCAgICAgU19JUlVTUnxTX0lYVVNSLCBmZGluZm8pLAogCUlORigiZW52aXJvbiIsICAgIFNfSVJVU1IsIHBpZF9lbnZpcm9uKSwKIAlJTkYoImF1eHYiLCAgICAgICBTX0lSVVNSLCBwaWRfYXV4diksCiAJSU5GKCJzdGF0dXMiLCAgICAgU19JUlVHTywgcGlkX3N0YXR1cyksCkBAIC0yMDA1LDcgKzIxMDAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcHJvY19waWRfaW5zdGFudGlhdGUoc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCSAgIHN0cnVjdCBkZW50cnkgKiBkZW50cnksCi0JCQkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqcHRyKQorCQkJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNvbnN0IHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgZGVudHJ5ICplcnJvciA9IEVSUl9QVFIoLUVOT0VOVCk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTIwMTgsNyArMjExMyw3IEBACiAJaW5vZGUtPmlfb3AgPSAmcHJvY190Z2lkX2Jhc2VfaW5vZGVfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9mb3AgPSAmcHJvY190Z2lkX2Jhc2Vfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9mbGFnc3w9U19JTU1VVEFCTEU7Ci0JaW5vZGUtPmlfbmxpbmsgPSA0OworCWlub2RlLT5pX25saW5rID0gNTsKICNpZmRlZiBDT05GSUdfU0VDVVJJVFkKIAlpbm9kZS0+aV9ubGluayArPSAxOwogI2VuZGlmCkBAIC0yMTIwLDcgKzIyMTUsNyBAQAogCQlnb3RvIG91dF9ub190YXNrOwogCiAJZm9yICg7IG5yIDwgQVJSQVlfU0laRShwcm9jX2Jhc2Vfc3R1ZmYpOyBmaWxwLT5mX3BvcysrLCBucisrKSB7Ci0JCXN0cnVjdCBwaWRfZW50cnkgKnAgPSAmcHJvY19iYXNlX3N0dWZmW25yXTsKKwkJY29uc3Qgc3RydWN0IHBpZF9lbnRyeSAqcCA9ICZwcm9jX2Jhc2Vfc3R1ZmZbbnJdOwogCQlpZiAocHJvY19iYXNlX2ZpbGxfY2FjaGUoZmlscCwgZGlyZW50LCBmaWxsZGlyLCByZWFwZXIsIHApIDwgMCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTIxNDYsOCArMjI0MSw5IEBACiAvKgogICogVGFza3MKICAqLwotc3RhdGljIHN0cnVjdCBwaWRfZW50cnkgdGlkX2Jhc2Vfc3R1ZmZbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRpZF9iYXNlX3N0dWZmW10gPSB7CiAJRElSKCJmZCIsICAgICAgICBTX0lSVVNSfFNfSVhVU1IsIGZkKSwKKwlESVIoImZkaW5mbyIsICAgIFNfSVJVU1J8U19JWFVTUiwgZmRpbmZvKSwKIAlJTkYoImVudmlyb24iLCAgIFNfSVJVU1IsIHBpZF9lbnZpcm9uKSwKIAlJTkYoImF1eHYiLCAgICAgIFNfSVJVU1IsIHBpZF9hdXh2KSwKIAlJTkYoInN0YXR1cyIsICAgIFNfSVJVR08sIHBpZF9zdGF0dXMpLApAQCAtMjIxNiw3ICsyMzEyLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpwcm9jX3Rhc2tfaW5zdGFudGlhdGUoc3RydWN0IGlub2RlICpkaXIsCi0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKnB0cikKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgdm9pZCAqcHRyKQogewogCXN0cnVjdCBkZW50cnkgKmVycm9yID0gRVJSX1BUUigtRU5PRU5UKTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpAQCAtMjIyOCw3ICsyMzI0LDcgQEAKIAlpbm9kZS0+aV9vcCA9ICZwcm9jX3RpZF9iYXNlX2lub2RlX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfZm9wID0gJnByb2NfdGlkX2Jhc2Vfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9mbGFnc3w9U19JTU1VVEFCTEU7Ci0JaW5vZGUtPmlfbmxpbmsgPSAzOworCWlub2RlLT5pX25saW5rID0gNDsKICNpZmRlZiBDT05GSUdfU0VDVVJJVFkKIAlpbm9kZS0+aV9ubGluayArPSAxOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9wcm9jL2dlbmVyaWMuYyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCmluZGV4IDc3NWZiMjEuLjhhNDBlMTUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvZ2VuZXJpYy5jCisrKyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCkBAIC0zOTgsNiArMzk4LDcgQEAKIAkJCWlmICghbWVtY21wKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlLT5uYW1lLCBkZS0+bmFtZWxlbikpIHsKIAkJCQl1bnNpZ25lZCBpbnQgaW5vID0gZGUtPmxvd19pbm87CiAKKwkJCQlkZV9nZXQoZGUpOwogCQkJCXNwaW5fdW5sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKIAkJCQllcnJvciA9IC1FSU5WQUw7CiAJCQkJaW5vZGUgPSBwcm9jX2dldF9pbm9kZShkaXItPmlfc2IsIGlubywgZGUpOwpAQCAtNDE0LDYgKzQxNSw3IEBACiAJCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CisJZGVfcHV0KGRlKTsKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CiAKQEAgLTQ3NiwxNCArNDc4LDIxIEBACiAJCQl9CiAKIAkJCWRvIHsKKwkJCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKm5leHQ7CisKIAkJCQkvKiBmaWxsZGlyIHBhc3NlcyBpbmZvIHRvIHVzZXIgc3BhY2UgKi8KKwkJCQlkZV9nZXQoZGUpOwogCQkJCXNwaW5fdW5sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKIAkJCQlpZiAoZmlsbGRpcihkaXJlbnQsIGRlLT5uYW1lLCBkZS0+bmFtZWxlbiwgZmlscC0+Zl9wb3MsCi0JCQkJCSAgICBkZS0+bG93X2lubywgZGUtPm1vZGUgPj4gMTIpIDwgMCkKKwkJCQkJICAgIGRlLT5sb3dfaW5vLCBkZS0+bW9kZSA+PiAxMikgPCAwKSB7CisJCQkJCWRlX3B1dChkZSk7CiAJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCQlzcGluX2xvY2soJnByb2Nfc3ViZGlyX2xvY2spOwogCQkJCWZpbHAtPmZfcG9zKys7Ci0JCQkJZGUgPSBkZS0+bmV4dDsKKwkJCQluZXh0ID0gZGUtPm5leHQ7CisJCQkJZGVfcHV0KGRlKTsKKwkJCQlkZSA9IG5leHQ7CiAJCQl9IHdoaWxlIChkZSk7CiAJCQlzcGluX3VubG9jaygmcHJvY19zdWJkaXJfbG9jayk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbm9kZS5jIGIvZnMvcHJvYy9pbm9kZS5jCmluZGV4IDIyYjExNTguLmQ1Y2U2NWMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW5vZGUuYworKysgYi9mcy9wcm9jL2lub2RlLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICogZGVfZ2V0KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCitzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlX2dldChzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQogewogCWlmIChkZSkKIAkJYXRvbWljX2luYygmZGUtPmNvdW50KTsKQEAgLTMxLDcgKzMxLDcgQEAKIC8qCiAgKiBEZWNyZW1lbnRzIHRoZSB1c2UgY291bnQgYW5kIGNoZWNrcyBmb3IgZGVmZXJyZWQgZGVsZXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIGRlX3B1dChzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQordm9pZCBkZV9wdXQoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKIHsKIAlpZiAoZGUpIHsJCiAJCWxvY2tfa2VybmVsKCk7CQkKQEAgLTEwOSw4ICsxMDksNyBAQAogewogCXN0cnVjdCBwcm9jX2lub2RlICplaSA9IChzdHJ1Y3QgcHJvY19pbm9kZSAqKSBmb287CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpCi0JCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CisJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIH0KICAKIGludCBfX2luaXQgcHJvY19pbml0X2lub2RlY2FjaGUodm9pZCkKQEAgLTE0NiwxMyArMTQ1LDYgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKIAotCS8qCi0JICogSW5jcmVtZW50IHRoZSB1c2UgY291bnQgc28gdGhlIGRpciBlbnRyeSBjYW4ndCBkaXNhcHBlYXIuCi0JICovCi0JZGVfZ2V0KGRlKTsKLQotCVdBUk5fT04oZGUgJiYgZGUtPmRlbGV0ZWQpOwotCiAJaWYgKGRlICE9IE5VTEwgJiYgIXRyeV9tb2R1bGVfZ2V0KGRlLT5vd25lcikpCiAJCWdvdG8gb3V0X21vZDsKIApAQCAtMTg0LDcgKzE3Niw2IEBACiAJaWYgKGRlICE9IE5VTEwpCiAJCW1vZHVsZV9wdXQoZGUtPm93bmVyKTsKIG91dF9tb2Q6Ci0JZGVfcHV0KGRlKTsKIAlyZXR1cm4gTlVMTDsKIH0JCQkKIApAQCAtMTk5LDYgKzE5MCw3IEBACiAJcy0+c19vcCA9ICZwcm9jX3NvcHM7CiAJcy0+c190aW1lX2dyYW4gPSAxOwogCQorCWRlX2dldCgmcHJvY19yb290KTsKIAlyb290X2lub2RlID0gcHJvY19nZXRfaW5vZGUocywgUFJPQ19ST09UX0lOTywgJnByb2Nfcm9vdCk7CiAJaWYgKCFyb290X2lub2RlKQogCQlnb3RvIG91dF9ub19yb290OwpAQCAtMjEyLDYgKzIwNCw3IEBACiBvdXRfbm9fcm9vdDoKIAlwcmludGsoInByb2NfcmVhZF9zdXBlcjogZ2V0IHJvb3QgaW5vZGUgZmFpbGVkXG4iKTsKIAlpcHV0KHJvb3RfaW5vZGUpOworCWRlX3B1dCgmcHJvY19yb290KTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW50ZXJuYWwuaCBiL2ZzL3Byb2MvaW50ZXJuYWwuaAppbmRleCBmNzcxODg5Li5iMjE1YzM1IDEwMDY0NAotLS0gYS9mcy9wcm9jL2ludGVybmFsLmgKKysrIGIvZnMvcHJvYy9pbnRlcm5hbC5oCkBAIC0zNyw2ICszNyw4IEBACiBleHRlcm4gaW50IG5vbW11X3ZtYV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiAjZW5kaWYKIAorZXh0ZXJuIGludCBtYXBzX3Byb3RlY3Q7CisKIGV4dGVybiB2b2lkIGNyZWF0ZV9zZXFfZW50cnkoY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmYpOwogZXh0ZXJuIGludCBwcm9jX2V4ZV9saW5rKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICoqLCBzdHJ1Y3QgdmZzbW91bnQgKiopOwogZXh0ZXJuIGludCBwcm9jX3RpZF9zdGF0KHN0cnVjdCB0YXNrX3N0cnVjdCAqLCAgY2hhciAqKTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19taXNjLmMgYi9mcy9wcm9jL3Byb2NfbWlzYy5jCmluZGV4IDc1ZWM2NTIuLjVmZDQ5ZTQgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19taXNjLmMKKysrIGIvZnMvcHJvYy9wcm9jX21pc2MuYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CkBAIC00MjksMTggKzQyOCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2xhYnN0YXRzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWtmcmVlKG0tPnByaXZhdGUpOwotCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc2xhYnN0YXRzX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4JCT0gc2xhYnN0YXRzX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzbGFic3RhdHNfcmVsZWFzZSwKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiB9OwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19zeXNjdGwuYyBiL2ZzL3Byb2MvcHJvY19zeXNjdGwuYwppbmRleCAyMGU4Y2JiLi42ODBjNDI5IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMKKysrIGIvZnMvcHJvYy9wcm9jX3N5c2N0bC5jCkBAIC00MjksMTEgKzQyOSw4IEBACiAJCXJldHVybiAtRVBFUk07CiAKIAllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7Ci0JaWYgKCFlcnJvcikgewotCQllcnJvciA9IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoZGVudHJ5LCBhdHRyKTsKLQkJaWYgKCFlcnJvcikKLQkJCWVycm9yID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7Ci0JfQorCWlmICghZXJyb3IpCisJCWVycm9yID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2NfdHR5LmMgYi9mcy9wcm9jL3Byb2NfdHR5LmMKaW5kZXggYzFiYmZiZS4uYjNhNDczYiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX3R0eS5jCisrKyBiL2ZzL3Byb2MvcHJvY190dHkuYwpAQCAtMTA4LDYgKzEwOCw4IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAlsb2ZmX3QgbCA9ICpwb3M7CisKKwltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2gocCwgJnR0eV9kcml2ZXJzKQogCQlpZiAoIWwtLSkKIAkJCXJldHVybiBsaXN0X2VudHJ5KHAsIHN0cnVjdCB0dHlfZHJpdmVyLCB0dHlfZHJpdmVycyk7CkBAIC0xMjQsNiArMTI2LDcgQEAKIAogc3RhdGljIHZvaWQgdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKKwltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdHR5X2RyaXZlcnNfb3AgPSB7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmMKaW5kZXggNDAwOGMwNi4uYzI0ZDgxYSAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jCisrKyBiL2ZzL3Byb2MvdGFza19tbXUuYwpAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KIApAQCAtMTQyLDYgKzE0Myw5IEBACiAJZGV2X3QgZGV2ID0gMDsKIAlpbnQgbGVuOwogCisJaWYgKG1hcHNfcHJvdGVjdCAmJiAhcHRyYWNlX21heV9hdHRhY2godGFzaykpCisJCXJldHVybiAtRUFDQ0VTOworCiAJaWYgKGZpbGUpIHsKIAkJc3RydWN0IGlub2RlICppbm9kZSA9IHZtYS0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJZGV2ID0gaW5vZGUtPmlfc2ItPnNfZGV2OwpAQCAtNTEyLDExICs1MTYsMjIgQEAKICNpZmRlZiBDT05GSUdfTlVNQQogZXh0ZXJuIGludCBzaG93X251bWFfbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7CiAKK3N0YXRpYyBpbnQgc2hvd19udW1hX21hcF9jaGVja2VkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLT5wcml2YXRlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IHByaXYtPnRhc2s7CisKKwlpZiAobWFwc19wcm90ZWN0ICYmICFwdHJhY2VfbWF5X2F0dGFjaCh0YXNrKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlyZXR1cm4gc2hvd19udW1hX21hcChtLCB2KTsKK30KKwogc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9jX3BpZF9udW1hX21hcHNfb3AgPSB7CiAgICAgICAgIC5zdGFydCAgPSBtX3N0YXJ0LAogICAgICAgICAubmV4dCAgID0gbV9uZXh0LAogICAgICAgICAuc3RvcCAgID0gbV9zdG9wLAotICAgICAgICAuc2hvdyAgID0gc2hvd19udW1hX21hcAorICAgICAgICAuc2hvdyAgID0gc2hvd19udW1hX21hcF9jaGVja2VkCiB9OwogCiBzdGF0aWMgaW50IG51bWFfbWFwc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX25vbW11LmMgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwppbmRleCA3Y2RkZjZiLi5kOGI4YzcxIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbm9tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwpAQCAtMiw2ICsyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIApAQCAtMTQzLDYgKzE0NCwxMiBAQAogc3RhdGljIGludCBzaG93X21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl92bWwpCiB7CiAJc3RydWN0IHZtX2xpc3Rfc3RydWN0ICp2bWwgPSBfdm1sOworCXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tPnByaXZhdGU7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gcHJpdi0+dGFzazsKKworCWlmIChtYXBzX3Byb3RlY3QgJiYgIXB0cmFjZV9tYXlfYXR0YWNoKHRhc2spKQorCQlyZXR1cm4gLUVBQ0NFUzsKKwogCXJldHVybiBub21tdV92bWFfc2hvdyhtLCB2bWwtPnZtYSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3FueDQvaW5vZGUuYyBiL2ZzL3FueDQvaW5vZGUuYwppbmRleCA3NWZjODQ5Li44ZDI1NmViIDEwMDY0NAotLS0gYS9mcy9xbng0L2lub2RlLmMKKysrIGIvZnMvcW54NC9pbm9kZS5jCkBAIC01MzYsOCArNTM2LDcgQEAKIHsKIAlzdHJ1Y3QgcW54NF9pbm9kZV9pbmZvICplaSA9IChzdHJ1Y3QgcW54NF9pbm9kZV9pbmZvICopIGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKLQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogCiBzdGF0aWMgaW50IGluaXRfaW5vZGVjYWNoZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEuYyBiL2ZzL3F1b3RhLmMKaW5kZXggYjlkYWU3Ni4uOWYyMzdkNiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEuYworKysgYi9mcy9xdW90YS5jCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CkBAIC0xNTgsNyArMTU3LDYgQEAKIHN0YXRpYyB2b2lkIHF1b3RhX3N5bmNfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCiB7CiAJaW50IGNudDsKLQlzdHJ1Y3QgaW5vZGUgKmRpc2NhcmRbTUFYUVVPVEFTXTsKIAogCXNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMoc2IsIHR5cGUpOwogCS8qIFRoaXMgaXMgbm90IHZlcnkgY2xldmVyIChhbmQgZmFzdCkgYnV0IGN1cnJlbnRseSBJIGRvbid0IGtub3cgYWJvdXQKQEAgLTE2OCwyOSArMTY2LDIxIEBACiAJCXNiLT5zX29wLT5zeW5jX2ZzKHNiLCAxKTsKIAlzeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYpOwogCi0JLyogTm93IHdoZW4gZXZlcnl0aGluZyBpcyB3cml0dGVuIHdlIGNhbiBkaXNjYXJkIHRoZSBwYWdlY2FjaGUgc28KLQkgKiB0aGF0IHVzZXJzcGFjZSBzZWVzIHRoZSBjaGFuZ2VzLiBXZSBuZWVkIGlfbXV0ZXggYW5kIHNvIHdlIGNvdWxkCi0JICogbm90IGRvIGl0IGluc2lkZSBkcW9ub2ZmX211dGV4LiBNb3Jlb3ZlciB3ZSBuZWVkIHRvIGJlIGNhcmVmdWxsCi0JICogYWJvdXQgcmFjZXMgd2l0aCBxdW90YW9mZigpICh0aGF0IGlzIHRoZSByZWFzb24gd2h5IHdlIGhhdmUgb3duCi0JICogcmVmZXJlbmNlIHRvIGlub2RlKS4gKi8KKwkvKgorCSAqIE5vdyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd3JpdHRlbiB3ZSBjYW4gZGlzY2FyZCB0aGUgcGFnZWNhY2hlIHNvCisJICogdGhhdCB1c2Vyc3BhY2Ugc2VlcyB0aGUgY2hhbmdlcy4KKwkgKi8KIAltdXRleF9sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlkaXNjYXJkW2NudF0gPSBOVUxMOwogCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIXNiX2hhc19xdW90YV9lbmFibGVkKHNiLCBjbnQpKQogCQkJY29udGludWU7Ci0JCWRpc2NhcmRbY250XSA9IGlncmFiKHNiX2Rxb3B0KHNiKS0+ZmlsZXNbY250XSk7CisJCW11dGV4X2xvY2tfbmVzdGVkKCZzYl9kcW9wdChzYiktPmZpbGVzW2NudF0tPmlfbXV0ZXgsIElfTVVURVhfUVVPVEEpOworCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmc2JfZHFvcHQoc2IpLT5maWxlc1tjbnRdLT5pX2RhdGEsIDApOworCQltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZmlsZXNbY250XS0+aV9tdXRleCk7CiAJfQogCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKGRpc2NhcmRbY250XSkgewotCQkJbXV0ZXhfbG9jaygmZGlzY2FyZFtjbnRdLT5pX211dGV4KTsKLQkJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZkaXNjYXJkW2NudF0tPmlfZGF0YSwgMCk7Ci0JCQltdXRleF91bmxvY2soJmRpc2NhcmRbY250XS0+aV9tdXRleCk7Ci0JCQlpcHV0KGRpc2NhcmRbY250XSk7Ci0JCX0KLQl9CiB9CiAKIHZvaWQgc3luY19kcXVvdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCmRpZmYgLS1naXQgYS9mcy9yYW1mcy9maWxlLW5vbW11LmMgYi9mcy9yYW1mcy9maWxlLW5vbW11LmMKaW5kZXggZDNmZDdjNi4uOTM0NWE0NiAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jCisrKyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbWZzLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KQEAgLTE4MCw3ICsxNzksNyBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSB2bXRydW5jYXRlKGlub2RlLCBzaXplKTsKKwlyZXQgPSB2bXRydW5jYXRlKGlub2RlLCBuZXdzaXplKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuYwppbmRleCBmZjFmNzYzLi5kNDBkMjJiIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9pbm9kZS5jCisrKyBiL2ZzL3JhbWZzL2lub2RlLmMKQEAgLTMwLDEwICszMCw5IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFtZnMuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCmRpZmYgLS1naXQgYS9mcy9yZWFkX3dyaXRlLmMgYi9mcy9yZWFkX3dyaXRlLmMKaW5kZXggMWY4ZGMzNy4uNGQwMzAwOCAxMDA2NDQKLS0tIGEvZnMvcmVhZF93cml0ZS5jCisrKyBiL2ZzL3JlYWRfd3JpdGUuYwpAQCAtMzcsMTAgKzM3LDEwIEBACiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKLQkJY2FzZSAyOgorCQljYXNlIFNFRUtfRU5EOgogCQkJb2Zmc2V0ICs9IGlub2RlLT5pX3NpemU7CiAJCQlicmVhazsKLQkJY2FzZSAxOgorCQljYXNlIFNFRUtfQ1VSOgogCQkJb2Zmc2V0ICs9IGZpbGUtPmZfcG9zOwogCX0KIAlyZXR2YWwgPSAtRUlOVkFMOwpAQCAtNjMsMTAgKzYzLDEwIEBACiAKIAlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAob3JpZ2luKSB7Ci0JCWNhc2UgMjoKKwkJY2FzZSBTRUVLX0VORDoKIAkJCW9mZnNldCArPSBpX3NpemVfcmVhZChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAkJCWJyZWFrOwotCQljYXNlIDE6CisJCWNhc2UgU0VFS19DVVI6CiAJCQlvZmZzZXQgKz0gZmlsZS0+Zl9wb3M7CiAJfQogCXJldHZhbCA9IC1FSU5WQUw7CkBAIC05NCwxMCArOTQsMTAgQEAKIAogCWxvY2tfa2VybmVsKCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKLQkJY2FzZSAyOgorCQljYXNlIFNFRUtfRU5EOgogCQkJb2Zmc2V0ICs9IGlfc2l6ZV9yZWFkKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCQkJYnJlYWs7Ci0JCWNhc2UgMToKKwkJY2FzZSBTRUVLX0NVUjoKIAkJCW9mZnNldCArPSBmaWxlLT5mX3BvczsKIAl9CiAJcmV0dmFsID0gLUVJTlZBTDsKQEAgLTEzOSw3ICsxMzksNyBAQAogCQlnb3RvIGJhZDsKIAogCXJldHZhbCA9IC1FSU5WQUw7Ci0JaWYgKG9yaWdpbiA8PSAyKSB7CisJaWYgKG9yaWdpbiA8PSBTRUVLX01BWCkgewogCQlsb2ZmX3QgcmVzID0gdmZzX2xsc2VlayhmaWxlLCBvZmZzZXQsIG9yaWdpbik7CiAJCXJldHZhbCA9IHJlczsKIAkJaWYgKHJlcyAhPSAobG9mZl90KXJldHZhbCkKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQlnb3RvIGJhZDsKIAogCXJldHZhbCA9IC1FSU5WQUw7Ci0JaWYgKG9yaWdpbiA+IDIpCisJaWYgKG9yaWdpbiA+IFNFRUtfTUFYKQogCQlnb3RvIG91dF9wdXRmOwogCiAJb2Zmc2V0ID0gdmZzX2xsc2VlayhmaWxlLCAoKGxvZmZfdCkgb2Zmc2V0X2hpZ2ggPDwgMzIpIHwgb2Zmc2V0X2xvdywKZGlmZiAtLWdpdCBhL2ZzL3JlYWRkaXIuYyBiL2ZzL3JlYWRkaXIuYwppbmRleCBmMzlmNWIzLi5lZmU1MmU2IDEwMDY0NAotLS0gYS9mcy9yZWFkZGlyLmMKKysrIGIvZnMvcmVhZGRpci5jCkBAIC00LDEzICs0LDEzIEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcwogICovCiAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RpcmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CkBAIC01Miw3ICs1Miw2IEBACiAgKiBjYXNlICh0aGUgbG93LWxldmVsIGhhbmRsZXJzIGRvbid0IG5lZWQgdG8gY2FyZSBhYm91dCB0aGlzKS4KICAqLwogI2RlZmluZSBOQU1FX09GRlNFVChkZSkgKChpbnQpICgoZGUpLT5kX25hbWUgLSAoY2hhciBfX3VzZXIgKikgKGRlKSkpCi0jZGVmaW5lIFJPVU5EX1VQKHgpICgoKHgpK3NpemVvZihsb25nKS0xKSAmIH4oc2l6ZW9mKGxvbmcpLTEpKQogCiAjaWZkZWYgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKIApAQCAtMTQ3LDcgKzE0Niw3IEBACiAJc3RydWN0IGxpbnV4X2RpcmVudCBfX3VzZXIgKiBkaXJlbnQ7CiAJc3RydWN0IGdldGRlbnRzX2NhbGxiYWNrICogYnVmID0gKHN0cnVjdCBnZXRkZW50c19jYWxsYmFjayAqKSBfX2J1ZjsKIAl1bnNpZ25lZCBsb25nIGRfaW5vOwotCWludCByZWNsZW4gPSBST1VORF9VUChOQU1FX09GRlNFVChkaXJlbnQpICsgbmFtbGVuICsgMik7CisJaW50IHJlY2xlbiA9IEFMSUdOKE5BTUVfT0ZGU0VUKGRpcmVudCkgKyBuYW1sZW4gKyAyLCBzaXplb2YobG9uZykpOwogCiAJYnVmLT5lcnJvciA9IC1FSU5WQUw7CS8qIG9ubHkgdXNlZCBpZiB3ZSBmYWlsLi4gKi8KIAlpZiAocmVjbGVuID4gYnVmLT5jb3VudCkKQEAgLTIyMCw4ICsyMTksNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotI2RlZmluZSBST1VORF9VUDY0KHgpICgoKHgpK3NpemVvZih1NjQpLTEpICYgfihzaXplb2YodTY0KS0xKSkKLQogc3RydWN0IGdldGRlbnRzX2NhbGxiYWNrNjQgewogCXN0cnVjdCBsaW51eF9kaXJlbnQ2NCBfX3VzZXIgKiBjdXJyZW50X2RpcjsKIAlzdHJ1Y3QgbGludXhfZGlyZW50NjQgX191c2VyICogcHJldmlvdXM7CkBAIC0yMzQsNyArMjMxLDcgQEAKIHsKIAlzdHJ1Y3QgbGludXhfZGlyZW50NjQgX191c2VyICpkaXJlbnQ7CiAJc3RydWN0IGdldGRlbnRzX2NhbGxiYWNrNjQgKiBidWYgPSAoc3RydWN0IGdldGRlbnRzX2NhbGxiYWNrNjQgKikgX19idWY7Ci0JaW50IHJlY2xlbiA9IFJPVU5EX1VQNjQoTkFNRV9PRkZTRVQoZGlyZW50KSArIG5hbWxlbiArIDEpOworCWludCByZWNsZW4gPSBBTElHTihOQU1FX09GRlNFVChkaXJlbnQpICsgbmFtbGVuICsgMSwgc2l6ZW9mKHU2NCkpOwogCiAJYnVmLT5lcnJvciA9IC1FSU5WQUw7CS8qIG9ubHkgdXNlZCBpZiB3ZSBmYWlsLi4gKi8KIAlpZiAocmVjbGVuID4gYnVmLT5jb3VudCkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2Rpci5jIGIvZnMvcmVpc2VyZnMvZGlyLmMKaW5kZXggOTZhMmY4OC4uZmZiZmMyYyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZGlyLmMKKysrIGIvZnMvcmVpc2VyZnMvZGlyLmMKQEAgLTcsMTEgKzcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi1leHRlcm4gc3RydWN0IHJlaXNlcmZzX2tleSBNSU5fS0VZOworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgTUlOX0tFWTsKIAogc3RhdGljIGludCByZWlzZXJmc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIHZvaWQgKiwgZmlsbGRpcl90KTsKIHN0YXRpYyBpbnQgcmVpc2VyZnNfZGlyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maWxlLmMgYi9mcy9yZWlzZXJmcy9maWxlLmMKaW5kZXggYWJmYWRhMi4uOWU0NTFhNiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX3hhdHRyLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CkBAIC0xMDYwLDIwICsxMDU5LDEyIEBACiAJICAgbWFwaW5nIGJsb2Nrcywgc2luY2UgdGhlcmUgaXMgbm9uZSwgc28gd2UganVzdCB6ZXJvIG91dCByZW1haW5pbmcKIAkgICBwYXJ0cyBvZiBmaXJzdCBhbmQgbGFzdCBwYWdlcyBpbiB3cml0ZSBhcmVhIChpZiBuZWVkZWQpICovCiAJaWYgKChwb3MgJiB+KChsb2ZmX3QpIFBBR0VfQ0FDSEVfU0laRSAtIDEpKSA+IGlub2RlLT5pX3NpemUpIHsKLQkJaWYgKGZyb20gIT0gMCkgewkvKiBGaXJzdCBwYWdlIG5lZWRzIHRvIGJlIHBhcnRpYWxseSB6ZXJvZWQgKi8KLQkJCWNoYXIgKmthZGRyID0ga21hcF9hdG9taWMocHJlcGFyZWRfcGFnZXNbMF0sIEtNX1VTRVIwKTsKLQkJCW1lbXNldChrYWRkciwgMCwgZnJvbSk7Ci0JCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0JCQlmbHVzaF9kY2FjaGVfcGFnZShwcmVwYXJlZF9wYWdlc1swXSk7Ci0JCX0KLQkJaWYgKHRvICE9IFBBR0VfQ0FDSEVfU0laRSkgewkvKiBMYXN0IHBhZ2UgbmVlZHMgdG8gYmUgcGFydGlhbGx5IHplcm9lZCAqLwotCQkJY2hhciAqa2FkZHIgPQotCQkJICAgIGttYXBfYXRvbWljKHByZXBhcmVkX3BhZ2VzW251bV9wYWdlcyAtIDFdLAotCQkJCQlLTV9VU0VSMCk7Ci0JCQltZW1zZXQoa2FkZHIgKyB0bywgMCwgUEFHRV9DQUNIRV9TSVpFIC0gdG8pOwotCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwotCQkJZmx1c2hfZGNhY2hlX3BhZ2UocHJlcGFyZWRfcGFnZXNbbnVtX3BhZ2VzIC0gMV0pOwotCQl9CisJCWlmIChmcm9tICE9IDApCQkvKiBGaXJzdCBwYWdlIG5lZWRzIHRvIGJlIHBhcnRpYWxseSB6ZXJvZWQgKi8KKwkJCXplcm9fdXNlcl9wYWdlKHByZXBhcmVkX3BhZ2VzWzBdLCAwLCBmcm9tLCBLTV9VU0VSMCk7CisKKwkJaWYgKHRvICE9IFBBR0VfQ0FDSEVfU0laRSkJLyogTGFzdCBwYWdlIG5lZWRzIHRvIGJlIHBhcnRpYWxseSB6ZXJvZWQgKi8KKwkJCXplcm9fdXNlcl9wYWdlKHByZXBhcmVkX3BhZ2VzW251bV9wYWdlcy0xXSwgdG8sCisJCQkJCVBBR0VfQ0FDSEVfU0laRSAtIHRvLCBLTV9VU0VSMCk7CiAKIAkJLyogU2luY2UgYWxsIGJsb2NrcyBhcmUgbmV3IC0gdXNlIGFscmVhZHkgY2FsY3VsYXRlZCB2YWx1ZSAqLwogCQlyZXR1cm4gYmxvY2tzOwpAQCAtMTIwMCwxMyArMTE5MSw5IEBACiAJCQkJCWxsX3J3X2Jsb2NrKFJFQUQsIDEsICZiaCk7CiAJCQkJCSp3YWl0X2JoKysgPSBiaDsKIAkJCQl9IGVsc2UgewkvKiBOb3QgbWFwcGVkLCB6ZXJvIGl0ICovCi0JCQkJCWNoYXIgKmthZGRyID0KLQkJCQkJICAgIGttYXBfYXRvbWljKHByZXBhcmVkX3BhZ2VzWzBdLAotCQkJCQkJCUtNX1VTRVIwKTsKLQkJCQkJbWVtc2V0KGthZGRyICsgYmxvY2tfc3RhcnQsIDAsCi0JCQkJCSAgICAgICBmcm9tIC0gYmxvY2tfc3RhcnQpOwotCQkJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0JCQkJCWZsdXNoX2RjYWNoZV9wYWdlKHByZXBhcmVkX3BhZ2VzWzBdKTsKKwkJCQkJemVyb191c2VyX3BhZ2UocHJlcGFyZWRfcGFnZXNbMF0sCisJCQkJCQkgICAgICAgYmxvY2tfc3RhcnQsCisJCQkJCQkgICAgICAgZnJvbSAtIGJsb2NrX3N0YXJ0LCBLTV9VU0VSMCk7CiAJCQkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQkJCX0KIAkJCX0KQEAgLTEyMzgsMTMgKzEyMjUsOCBAQAogCQkJCQlsbF9yd19ibG9jayhSRUFELCAxLCAmYmgpOwogCQkJCQkqd2FpdF9iaCsrID0gYmg7CiAJCQkJfSBlbHNlIHsJLyogTm90IG1hcHBlZCwgemVybyBpdCAqLwotCQkJCQljaGFyICprYWRkciA9Ci0JCQkJCSAgICBrbWFwX2F0b21pYyhwcmVwYXJlZF9wYWdlcwotCQkJCQkJCVtudW1fcGFnZXMgLSAxXSwKLQkJCQkJCQlLTV9VU0VSMCk7Ci0JCQkJCW1lbXNldChrYWRkciArIHRvLCAwLCBibG9ja19lbmQgLSB0byk7Ci0JCQkJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQkJCQkJZmx1c2hfZGNhY2hlX3BhZ2UocHJlcGFyZWRfcGFnZXNbbnVtX3BhZ2VzIC0gMV0pOworCQkJCQl6ZXJvX3VzZXJfcGFnZShwcmVwYXJlZF9wYWdlc1tudW1fcGFnZXMtMV0sCisJCQkJCQkJdG8sIGJsb2NrX2VuZCAtIHRvLCBLTV9VU0VSMCk7CiAJCQkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lub2RlLmMgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCmluZGV4IDlmY2JmZTMuLjEyNzJkMTEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2lub2RlLmMKKysrIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwpAQCAtMjE0OCwxMyArMjE0OCw4IEBACiAJCWxlbmd0aCA9IG9mZnNldCAmIChibG9ja3NpemUgLSAxKTsKIAkJLyogaWYgd2UgYXJlIG5vdCBvbiBhIGJsb2NrIGJvdW5kYXJ5ICovCiAJCWlmIChsZW5ndGgpIHsKLQkJCWNoYXIgKmthZGRyOwotCiAJCQlsZW5ndGggPSBibG9ja3NpemUgLSBsZW5ndGg7Ci0JCQlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQkJCW1lbXNldChrYWRkciArIG9mZnNldCwgMCwgbGVuZ3RoKTsKLQkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworCQkJemVyb191c2VyX3BhZ2UocGFnZSwgb2Zmc2V0LCBsZW5ndGgsIEtNX1VTRVIwKTsKIAkJCWlmIChidWZmZXJfbWFwcGVkKGJoKSAmJiBiaC0+Yl9ibG9ja25yICE9IDApIHsKIAkJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQl9CkBAIC0yMzcwLDcgKzIzNjUsNiBAQAogCSAqKiBsYXN0IGJ5dGUgaW4gdGhlIGZpbGUKIAkgKi8KIAlpZiAocGFnZS0+aW5kZXggPj0gZW5kX2luZGV4KSB7Ci0JCWNoYXIgKmthZGRyOwogCQl1bnNpZ25lZCBsYXN0X29mZnNldDsKIAogCQlsYXN0X29mZnNldCA9IGlub2RlLT5pX3NpemUgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CkBAIC0yMzc5LDEwICsyMzczLDcgQEAKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCW1lbXNldChrYWRkciArIGxhc3Rfb2Zmc2V0LCAwLCBQQUdFX0NBQ0hFX1NJWkUgLSBsYXN0X29mZnNldCk7Ci0JCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCXplcm9fdXNlcl9wYWdlKHBhZ2UsIGxhc3Rfb2Zmc2V0LCBQQUdFX0NBQ0hFX1NJWkUgLSBsYXN0X29mZnNldCwgS01fVVNFUjApOwogCX0KIAliaCA9IGhlYWQ7CiAJYmxvY2sgPSBwYWdlLT5pbmRleCA8PCAoUEFHRV9DQUNIRV9TSElGVCAtIHMtPnNfYmxvY2tzaXplX2JpdHMpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvam91cm5hbC5jIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCmluZGV4IDcyODBhMjMuLmYyNTA4NmEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYworKysgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKQEAgLTExMTAsNyArMTExMCw3IEBACiAJaWYgKCFiYXJyaWVyKSB7CiAJCS8qIElmIHRoZXJlIHdhcyBhIHdyaXRlIGVycm9yIGluIHRoZSBqb3VybmFsIC0gd2UgY2FuJ3QgY29tbWl0CiAJCSAqIHRoaXMgdHJhbnNhY3Rpb24gLSBpdCB3aWxsIGJlIGludmFsaWQgYW5kLCBpZiBzdWNjZXNzZnVsLAotCQkgKiB3aWxsIGp1c3QgZW5kIHVwIHByb3BvZ2F0aW5nIHRoZSB3cml0ZSBlcnJvciBvdXQgdG8KKwkJICogd2lsbCBqdXN0IGVuZCB1cCBwcm9wYWdhdGluZyB0aGUgd3JpdGUgZXJyb3Igb3V0IHRvCiAJCSAqIHRoZSBmaWxlIHN5c3RlbS4gKi8KIAkJaWYgKGxpa2VseSghcmV0dmFsICYmICFyZWlzZXJmc19pc19qb3VybmFsX2Fib3J0ZWQgKGpvdXJuYWwpKSkgewogCQkJaWYgKGJ1ZmZlcl9kaXJ0eShqbC0+al9jb21taXRfYmgpKQpAQCAtMTEyNSw3ICsxMTI1LDcgQEAKIAogCS8qIElmIHRoZXJlIHdhcyBhIHdyaXRlIGVycm9yIGluIHRoZSBqb3VybmFsIC0gd2UgY2FuJ3QgY29tbWl0IHRoaXMKIAkgKiB0cmFuc2FjdGlvbiAtIGl0IHdpbGwgYmUgaW52YWxpZCBhbmQsIGlmIHN1Y2Nlc3NmdWwsIHdpbGwganVzdCBlbmQKLQkgKiB1cCBwcm9wb2dhdGluZyB0aGUgd3JpdGUgZXJyb3Igb3V0IHRvIHRoZSBmaWxlc3lzdGVtLiAqLworCSAqIHVwIHByb3BhZ2F0aW5nIHRoZSB3cml0ZSBlcnJvciBvdXQgdG8gdGhlIGZpbGVzeXN0ZW0uICovCiAJaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoamwtPmpfY29tbWl0X2JoKSkpIHsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAkJcmVpc2VyZnNfd2FybmluZyhzLCAiam91cm5hbC02MTU6IGJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKQEAgLTI5MTgsNyArMjkxOCw3IEBACiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCWlmICh0ZXN0X2JpdChKX1dSSVRFUlNfUVVFVUVELCAmam91cm5hbC0+al9zdGF0ZSkpCiAJCXNjaGVkdWxlKCk7Ci0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZqb3VybmFsLT5qX2pvaW5fd2FpdCwgJndhaXQpOwogfQogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9uYW1laS5jIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwppbmRleCBhMjE2MTg0Li5iMzc4ZWVhIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9uYW1laS5jCisrKyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX3hhdHRyLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogCiAjZGVmaW5lIElOQ19ESVJfSU5PREVfTkxJTksoaSkgaWYgKGktPmlfbmxpbmsgIT0gMSkgeyBpbmNfbmxpbmsoaSk7IGlmIChpLT5pX25saW5rID49IFJFSVNFUkZTX0xJTktfTUFYKSBpLT5pX25saW5rPTE7IH0KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKaW5kZXggZWNjOTk0My4uOWFhN2EwNiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKQEAgLTE2LDExICsxNiwxMCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19mc19zYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAotI2lmIGRlZmluZWQoIFJFSVNFUkZTX1BST0NfSU5GTyApCisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTwogCiAvKgogICogTE9DS0lORzoKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Jlc2l6ZS5jIGIvZnMvcmVpc2VyZnMvcmVzaXplLmMKaW5kZXggMzE1Njg0Ny4uOTc2Y2M3OCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcmVzaXplLmMKKysrIGIvZnMvcmVpc2VyZnMvcmVzaXplLmMKQEAgLTEzMSw2ICsxMzEsMTAgQEAKIAkJCS8qIGRvbid0IHVzZSByZWFkX2JpdG1hcF9ibG9jayBzaW5jZSBpdCB3aWxsIGNhY2hlCiAJCQkgKiB0aGUgdW5pbml0aWFsaXplZCBiaXRtYXAgKi8KIAkJCWJoID0gc2JfYnJlYWQocywgaSAqIHMtPnNfYmxvY2tzaXplICogOCk7CisJCQlpZiAoIWJoKSB7CisJCQkJdmZyZWUoYml0bWFwKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KIAkJCW1lbXNldChiaC0+Yl9kYXRhLCAwLCBzYl9ibG9ja3NpemUoc2IpKTsKIAkJCXJlaXNlcmZzX3Rlc3RfYW5kX3NldF9sZV9iaXQoMCwgYmgtPmJfZGF0YSk7CiAJCQlyZWlzZXJmc19jYWNoZV9iaXRtYXBfbWV0YWRhdGEocywgYmgsIGJpdG1hcCArIGkpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3RyZWUuYyBiL2ZzL3JlaXNlcmZzL3N0cmVlLmMKaW5kZXggYWZiMjFlYS4uYjZmMTI1OSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvc3RyZWUuYworKysgYi9mcy9yZWlzZXJmcy9zdHJlZS5jCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMgYi9mcy9yZWlzZXJmcy9zdXBlci5jCmluZGV4IDcwNTRhYWUuLmI0YWM5MTEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfYWNsLmg+CiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfeGF0dHIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgpAQCAtNDMzLDEyICs0MzIsMTMgQEAKIHN0YXRpYyB2b2lkIHJlaXNlcmZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzKQogewogCWlmIChSRUlTRVJGU19TQihzKSkgeworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgogCQlpZiAoUkVJU0VSRlNfU0IocyktPnhhdHRyX3Jvb3QpIHsKIAkJCWRfaW52YWxpZGF0ZShSRUlTRVJGU19TQihzKS0+eGF0dHJfcm9vdCk7CiAJCQlkcHV0KFJFSVNFUkZTX1NCKHMpLT54YXR0cl9yb290KTsKIAkJCVJFSVNFUkZTX1NCKHMpLT54YXR0cl9yb290ID0gTlVMTDsKIAkJfQotCisjZW5kaWYKIAkJaWYgKFJFSVNFUkZTX1NCKHMpLT5wcml2X3Jvb3QpIHsKIAkJCWRfaW52YWxpZGF0ZShSRUlTRVJGU19TQihzKS0+cHJpdl9yb290KTsKIAkJCWRwdXQoUkVJU0VSRlNfU0IocyktPnByaXZfcm9vdCk7CkBAIC01MTEsMTQgKzUxMSwxMiBAQAogewogCXN0cnVjdCByZWlzZXJmc19pbm9kZV9pbmZvICplaSA9IChzdHJ1Y3QgcmVpc2VyZnNfaW5vZGVfaW5mbyAqKWZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikgewotCQlJTklUX0xJU1RfSEVBRCgmZWktPmlfcHJlYWxsb2NfbGlzdCk7Ci0JCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CisJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX3ByZWFsbG9jX2xpc3QpOworCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTAotCQllaS0+aV9hY2xfYWNjZXNzID0gTlVMTDsKLQkJZWktPmlfYWNsX2RlZmF1bHQgPSBOVUxMOworCWVpLT5pX2FjbF9hY2Nlc3MgPSBOVUxMOworCWVpLT5pX2FjbF9kZWZhdWx0ID0gTlVMTDsKICNlbmRpZgotCX0KIH0KIAogc3RhdGljIGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKQEAgLTE1NjIsOSArMTU2MCwxMCBAQAogCVJFSVNFUkZTX1NCKHMpLT5zX2FsbG9jX29wdGlvbnMucHJlYWxsb2NtaW4gPSAwOwogCS8qIFByZWFsbG9jYXRlIGJ5IDE2IGJsb2NrcyAoMTctMSkgYXQgb25jZSAqLwogCVJFSVNFUkZTX1NCKHMpLT5zX2FsbG9jX29wdGlvbnMucHJlYWxsb2NzaXplID0gMTc7CisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCiAJLyogSW5pdGlhbGl6ZSB0aGUgcndzZW0gZm9yIHhhdHRyIGRpciAqLwogCWluaXRfcndzZW0oJlJFSVNFUkZTX1NCKHMpLT54YXR0cl9kaXJfc2VtKTsKLQorI2VuZGlmCiAJLyogc2V0dXAgZGVmYXVsdCBibG9jayBhbGxvY2F0b3Igb3B0aW9ucyAqLwogCXJlaXNlcmZzX2luaXRfYWxsb2Nfb3B0aW9ucyhzKTsKIApkaWZmIC0tZ2l0IGEvZnMvcm9tZnMvaW5vZGUuYyBiL2ZzL3JvbWZzL2lub2RlLmMKaW5kZXggODA0Mjg1MS4uMjI4NGUwMyAxMDA2NDQKLS0tIGEvZnMvcm9tZnMvaW5vZGUuYworKysgYi9mcy9yb21mcy9pbm9kZS5jCkBAIC01NjYsMTIgKzU2NiwxMSBAQAogCWttZW1fY2FjaGVfZnJlZShyb21mc19pbm9kZV9jYWNoZXAsIFJPTUZTX0koaW5vZGUpKTsKIH0KIAotc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKiBmb28sIHN0cnVjdCBrbWVtX2NhY2hlICogY2FjaGVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbywgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlzdHJ1Y3Qgcm9tZnNfaW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IHJvbWZzX2lub2RlX2luZm8gKikgZm9vOworCXN0cnVjdCByb21mc19pbm9kZV9pbmZvICplaSA9IGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKLQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogIAogc3RhdGljIGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL3NlbGVjdC5jIGIvZnMvc2VsZWN0LmMKaW5kZXggZmUwODkzYS4uYTk3NDA4MiAxMDA2NDQKLS0tIGEvZnMvc2VsZWN0LmMKKysrIGIvZnMvc2VsZWN0LmMKQEAgLTE0LDEwICsxNCwxMCBAQAogICogICAgIG9mIGZkcyB0byBvdmVyY29tZSBuZmRzIDwgMTYzOTAgZGVzY3JpcHRvcnMgbGltaXQgKFRpZ3JhbiBBaXZhemlhbikuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+IC8qIGZvciBTVElDS1lfVElNRU9VVFMgKi8KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CkBAIC0yNiw3ICsyNiw2IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jZGVmaW5lIFJPVU5EX1VQKHgseSkgKCgoeCkrKHkpLTEpLyh5KSkKICNkZWZpbmUgREVGQVVMVF9QT0xMTUFTSyAoUE9MTElOIHwgUE9MTE9VVCB8IFBPTExSRE5PUk0gfCBQT0xMV1JOT1JNKQogCiBzdHJ1Y3QgcG9sbF90YWJsZV9wYWdlIHsKQEAgLTY1LDcgKzY0LDcgQEAKIAogc3RhdGljIHZvaWQgZnJlZV9wb2xsX2VudHJ5KHN0cnVjdCBwb2xsX3RhYmxlX2VudHJ5ICplbnRyeSkKIHsKLQlyZW1vdmVfd2FpdF9xdWV1ZShlbnRyeS0+d2FpdF9hZGRyZXNzLCZlbnRyeS0+d2FpdCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoZW50cnktPndhaXRfYWRkcmVzcywgJmVudHJ5LT53YWl0KTsKIAlmcHV0KGVudHJ5LT5maWxwKTsKIH0KIApAQCAtMTI5LDcgKzEyOCw3IEBACiAJZW50cnktPmZpbHAgPSBmaWxwOwogCWVudHJ5LT53YWl0X2FkZHJlc3MgPSB3YWl0X2FkZHJlc3M7CiAJaW5pdF93YWl0cXVldWVfZW50cnkoJmVudHJ5LT53YWl0LCBjdXJyZW50KTsKLQlhZGRfd2FpdF9xdWV1ZSh3YWl0X2FkZHJlc3MsJmVudHJ5LT53YWl0KTsKKwlhZGRfd2FpdF9xdWV1ZSh3YWl0X2FkZHJlc3MsICZlbnRyeS0+d2FpdCk7CiB9CiAKICNkZWZpbmUgRkRTX0lOKGZkcywgbikJCShmZHMtPmluICsgbikKQEAgLTM5OSw3ICszOTgsNyBAQAogCQlpZiAoKHU2NCl0di50dl9zZWMgPj0gKHU2NClNQVhfSU5UNjRfU0VDT05EUykKIAkJCXRpbWVvdXQgPSAtMTsJLyogaW5maW5pdGUgKi8KIAkJZWxzZSB7Ci0JCQl0aW1lb3V0ID0gUk9VTkRfVVAodHYudHZfdXNlYywgVVNFQ19QRVJfU0VDL0haKTsKKwkJCXRpbWVvdXQgPSBESVZfUk9VTkRfVVAodHYudHZfdXNlYywgVVNFQ19QRVJfU0VDL0haKTsKIAkJCXRpbWVvdXQgKz0gdHYudHZfc2VjICogSFo7CiAJCX0KIAl9CkBAIC00NTQsNyArNDUzLDcgQEAKIAkJaWYgKCh1NjQpdHMudHZfc2VjID49ICh1NjQpTUFYX0lOVDY0X1NFQ09ORFMpCiAJCQl0aW1lb3V0ID0gLTE7CS8qIGluZmluaXRlICovCiAJCWVsc2UgewotCQkJdGltZW91dCA9IFJPVU5EX1VQKHRzLnR2X25zZWMsIE5TRUNfUEVSX1NFQy9IWik7CisJCQl0aW1lb3V0ID0gRElWX1JPVU5EX1VQKHRzLnR2X25zZWMsIE5TRUNfUEVSX1NFQy9IWik7CiAJCQl0aW1lb3V0ICs9IHRzLnR2X3NlYyAqIEhaOwogCQl9CiAJfQpAQCAtNzc2LDcgKzc3NSw3IEBACiAJCWlmICgodTY0KXRzLnR2X3NlYyA+PSAodTY0KU1BWF9JTlQ2NF9TRUNPTkRTKQogCQkJdGltZW91dCA9IC0xOwkvKiBpbmZpbml0ZSAqLwogCQllbHNlIHsKLQkJCXRpbWVvdXQgPSBST1VORF9VUCh0cy50dl9uc2VjLCBOU0VDX1BFUl9TRUMvSFopOworCQkJdGltZW91dCA9IERJVl9ST1VORF9VUCh0cy50dl9uc2VjLCBOU0VDX1BFUl9TRUMvSFopOwogCQkJdGltZW91dCArPSB0cy50dl9zZWMgKiBIWjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL3NpZ25hbGZkLmMgYi9mcy9zaWduYWxmZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZGE4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9zaWduYWxmZC5jCkBAIC0wLDAgKzEsMzc5IEBACisvKgorICogIGZzL3NpZ25hbGZkLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBMaW51cyBUb3J2YWxkcworICoKKyAqICBNb24gTWFyIDUsIDIwMDc6IERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqICAgICAgQ2hhbmdlZCAtPnJlYWQoKSB0byByZXR1cm4gYSBzaWdpbmZvIHN0cmN0dXJlIGluc3RlYWQgb2Ygc2lnbmFsIG51bWJlci4KKyAqICAgICAgRml4ZWQgbG9ja2luZyBpbiAtPnBvbGwoKS4KKyAqICAgICAgQWRkZWQgc2lnaGFuZC1kZXRhY2ggbm90aWZpY2F0aW9uLgorICogICAgICBBZGRlZCBmZCByZS11c2UgaW4gc3lzX3NpZ25hbGZkKCkgc3lzY2FsbC4KKyAqICAgICAgTm93IHVzaW5nIGFub255bW91cyBpbm9kZSBzb3VyY2UuCisgKiAgICAgIFRoYW5rcyB0byBPbGVnIE5lc3Rlcm92IGZvciB1c2VmdWwgY29kZSByZXZpZXcgYW5kIHN1Z2dlc3Rpb25zLgorICogICAgICBNb3JlIGNvbW1lbnRzIGFuZCBzdWdnZXN0aW9ucyBmcm9tIEFybmQgQmVyZ21hbm4uCisgKiBTYXQgTWF5IDE5LCAyMDA3OiBEYXZpIEUuIE0uIEFybmF1dCA8ZGF2aUBoYXhlbnQuY29tLmJyPgorICogICAgICBSZXRyaWV2ZSBtdWx0aXBsZSBzaWduYWxzIHdpdGggb25lIHJlYWQoKSBjYWxsCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWxmZC5oPgorCitzdHJ1Y3Qgc2lnbmFsZmRfY3R4IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxuazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7CisJc2lnc2V0X3Qgc2lnbWFzazsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKK307CisKK3N0cnVjdCBzaWduYWxmZF9sb2NrY3R4IHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworLyoKKyAqIFRyaWVzIHRvIGFjcXVpcmUgdGhlIHNpZ2hhbmQgbG9jay4gV2UgZG8gbm90IGluY3JlbWVudCB0aGUgc2lnaGFuZAorICogdXNlIGNvdW50LCBhbmQgd2UgZG8gbm90IGV2ZW4gcGluIHRoZSB0YXNrIHN0cnVjdCwgc28gd2UgbmVlZCB0bworICogZG8gaXQgaW5zaWRlIGFuIFJDVSByZWFkIGxvY2ssIGFuZCB3ZSBtdXN0IGJlIHByZXBhcmVkIGZvciB0aGUKKyAqIGN0eC0+dHNrIGdvaW5nIHRvIE5VTEwgKGluIHNpZ25hbGZkX2RlbGl2ZXIoKSksIGFuZCBmb3IgdGhlIHNpZ2hhbmQKKyAqIGJlaW5nIGRldGFjaGVkLiBXZSByZXR1cm4gMCBpZiB0aGUgc2lnaGFuZCBoYXMgYmVlbiBkZXRhY2hlZCwgb3IKKyAqIDEgaWYgd2Ugd2VyZSBhYmxlIHRvIHBpbiB0aGUgc2lnaGFuZCBsb2NrLgorICovCitzdGF0aWMgaW50IHNpZ25hbGZkX2xvY2soc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBzdHJ1Y3Qgc2lnbmFsZmRfbG9ja2N0eCAqbGspCit7CisJc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kID0gTlVMTDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsay0+dHNrID0gcmN1X2RlcmVmZXJlbmNlKGN0eC0+dHNrKTsKKwlpZiAobGlrZWx5KGxrLT50c2sgIT0gTlVMTCkpCisJCXNpZ2hhbmQgPSBsb2NrX3Rhc2tfc2lnaGFuZChsay0+dHNrLCAmbGstPmZsYWdzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChzaWdoYW5kICYmICFjdHgtPnRzaykgeworCQl1bmxvY2tfdGFza19zaWdoYW5kKGxrLT50c2ssICZsay0+ZmxhZ3MpOworCQlzaWdoYW5kID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gc2lnaGFuZCAhPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBzaWduYWxmZF91bmxvY2soc3RydWN0IHNpZ25hbGZkX2xvY2tjdHggKmxrKQoreworCXVubG9ja190YXNrX3NpZ2hhbmQobGstPnRzaywgJmxrLT5mbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNpZ2hhbmQgbG9jayBoZWxkLgorICovCit2b2lkIHNpZ25hbGZkX2RlbGl2ZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBzaWcpCit7CisJc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kID0gdHNrLT5zaWdoYW5kOworCXN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCwgKnRtcDsKKworCUJVR19PTighc2lnKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3R4LCB0bXAsICZzaWdoYW5kLT5zaWduYWxmZF9saXN0LCBsbmspIHsKKwkJLyoKKwkJICogV2UgdXNlIGEgbmVnYXRpdmUgc2lnbmFsIHZhbHVlIGFzIGEgd2F5IHRvIGJyb2FkY2FzdCB0aGF0IHRoZQorCQkgKiBzaWdoYW5kIGhhcyBiZWVuIG9ycGhhbmVkLCBzbyB0aGF0IHdlIGNhbiBub3RpZnkgYWxsIHRoZQorCQkgKiBsaXN0ZW5lcnMgYWJvdXQgdGhpcy4gUmVtZW1iZXIgdGhlIGN0eC0+c2lnbWFzayBpcyBpbnZlcnRlZCwKKwkJICogc28gaWYgdGhlIHVzZXIgaXMgaW50ZXJlc3RlZCBpbiBhIHNpZ25hbCwgdGhhdCBjb3JyZXNwb25kaW5nCisJCSAqIGJpdCB3aWxsIGJlIHplcm8uCisJCSAqLworCQlpZiAoc2lnIDwgMCkgeworCQkJaWYgKGN0eC0+dHNrID09IHRzaykgeworCQkJCWN0eC0+dHNrID0gTlVMTDsKKwkJCQlsaXN0X2RlbF9pbml0KCZjdHgtPmxuayk7CisJCQkJd2FrZV91cCgmY3R4LT53cWgpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKCFzaWdpc21lbWJlcigmY3R4LT5zaWdtYXNrLCBzaWcpKQorCQkJCXdha2VfdXAoJmN0eC0+d3FoKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc2lnbmFsZmRfY2xlYW51cChzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHgpCit7CisJc3RydWN0IHNpZ25hbGZkX2xvY2tjdHggbGs7CisKKwkvKgorCSAqIFRoaXMgaXMgdHJpY2t5LiBJZiB0aGUgc2lnaGFuZCBpcyBnb25lLCB3ZSBkbyBub3QgbmVlZCB0byByZW1vdmUKKwkgKiBjb250ZXh0IGZyb20gdGhlIGxpc3QsIHRoZSBsaXN0IGl0c2VsZiB3b24ndCBiZSB0aGVyZSBhbnltb3JlLgorCSAqLworCWlmIChzaWduYWxmZF9sb2NrKGN0eCwgJmxrKSkgeworCQlsaXN0X2RlbCgmY3R4LT5sbmspOworCQlzaWduYWxmZF91bmxvY2soJmxrKTsKKwl9CisJa2ZyZWUoY3R4KTsKK30KKworc3RhdGljIGludCBzaWduYWxmZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXNpZ25hbGZkX2NsZWFudXAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBzaWduYWxmZF9jdHggKmN0eCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgZXZlbnRzID0gMDsKKwlzdHJ1Y3Qgc2lnbmFsZmRfbG9ja2N0eCBsazsKKworCXBvbGxfd2FpdChmaWxlLCAmY3R4LT53cWgsIHdhaXQpOworCisJLyoKKwkgKiBMZXQgdGhlIGNhbGxlciBnZXQgYSBQT0xMSU4gaW4gdGhpcyBjYXNlLCBhbGEgc29ja2V0IHJlY3YoKSB3aGVuCisJICogdGhlIHBlZXIgZGlzY29ubmVjdHMuCisJICovCisJaWYgKHNpZ25hbGZkX2xvY2soY3R4LCAmbGspKSB7CisJCWlmIChuZXh0X3NpZ25hbCgmbGsudHNrLT5wZW5kaW5nLCAmY3R4LT5zaWdtYXNrKSA+IDAgfHwKKwkJICAgIG5leHRfc2lnbmFsKCZsay50c2stPnNpZ25hbC0+c2hhcmVkX3BlbmRpbmcsCisJCQkJJmN0eC0+c2lnbWFzaykgPiAwKQorCQkJZXZlbnRzIHw9IFBPTExJTjsKKwkJc2lnbmFsZmRfdW5sb2NrKCZsayk7CisJfSBlbHNlCisJCWV2ZW50cyB8PSBQT0xMSU47CisKKwlyZXR1cm4gZXZlbnRzOworfQorCisvKgorICogQ29waWVkIGZyb20gY29weV9zaWdpbmZvX3RvX3VzZXIoKSBpbiBrZXJuZWwvc2lnbmFsLmMKKyAqLworc3RhdGljIGludCBzaWduYWxmZF9jb3B5aW5mbyhzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyBfX3VzZXIgKnVpbmZvLAorCQkJICAgICBzaWdpbmZvX3QgY29uc3QgKmtpbmZvKQoreworCWxvbmcgZXJyOworCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbykgIT0gMTI4KTsKKworCS8qCisJICogVW51c2VkIG1lbWViZXJzIHNob3VsZCBiZSB6ZXJvIC4uLgorCSAqLworCWVyciA9IF9fY2xlYXJfdXNlcih1aW5mbywgc2l6ZW9mKCp1aW5mbykpOworCisJLyoKKwkgKiBJZiB5b3UgY2hhbmdlIHNpZ2luZm9fdCBzdHJ1Y3R1cmUsIHBsZWFzZSBiZSBzdXJlCisJICogdGhpcyBjb2RlIGlzIGZpeGVkIGFjY29yZGluZ2x5LgorCSAqLworCWVyciB8PSBfX3B1dF91c2VyKGtpbmZvLT5zaV9zaWdubywgJnVpbmZvLT5zaWdubyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoa2luZm8tPnNpX2Vycm5vLCAmdWluZm8tPmVycik7CisJZXJyIHw9IF9fcHV0X3VzZXIoKHNob3J0KWtpbmZvLT5zaV9jb2RlLCAmdWluZm8tPmNvZGUpOworCXN3aXRjaCAoa2luZm8tPnNpX2NvZGUgJiBfX1NJX01BU0spIHsKKwljYXNlIF9fU0lfS0lMTDoKKwkJZXJyIHw9IF9fcHV0X3VzZXIoa2luZm8tPnNpX3BpZCwgJnVpbmZvLT5waWQpOworCQllcnIgfD0gX19wdXRfdXNlcihraW5mby0+c2lfdWlkLCAmdWluZm8tPnVpZCk7CisJCWJyZWFrOworCWNhc2UgX19TSV9USU1FUjoKKwkJIGVyciB8PSBfX3B1dF91c2VyKGtpbmZvLT5zaV90aWQsICZ1aW5mby0+dGlkKTsKKwkJIGVyciB8PSBfX3B1dF91c2VyKGtpbmZvLT5zaV9vdmVycnVuLCAmdWluZm8tPm92ZXJydW4pOworCQkgZXJyIHw9IF9fcHV0X3VzZXIoKGxvbmcpa2luZm8tPnNpX3B0ciwgJnVpbmZvLT5zdnB0cik7CisJCWJyZWFrOworCWNhc2UgX19TSV9QT0xMOgorCQllcnIgfD0gX19wdXRfdXNlcihraW5mby0+c2lfYmFuZCwgJnVpbmZvLT5iYW5kKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoa2luZm8tPnNpX2ZkLCAmdWluZm8tPmZkKTsKKwkJYnJlYWs7CisJY2FzZSBfX1NJX0ZBVUxUOgorCQllcnIgfD0gX19wdXRfdXNlcigobG9uZylraW5mby0+c2lfYWRkciwgJnVpbmZvLT5hZGRyKTsKKyNpZmRlZiBfX0FSQ0hfU0lfVFJBUE5PCisJCWVyciB8PSBfX3B1dF91c2VyKGtpbmZvLT5zaV90cmFwbm8sICZ1aW5mby0+dHJhcG5vKTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIF9fU0lfQ0hMRDoKKwkJZXJyIHw9IF9fcHV0X3VzZXIoa2luZm8tPnNpX3BpZCwgJnVpbmZvLT5waWQpOworCQllcnIgfD0gX19wdXRfdXNlcihraW5mby0+c2lfdWlkLCAmdWluZm8tPnVpZCk7CisJCWVyciB8PSBfX3B1dF91c2VyKGtpbmZvLT5zaV9zdGF0dXMsICZ1aW5mby0+c3RhdHVzKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoa2luZm8tPnNpX3V0aW1lLCAmdWluZm8tPnV0aW1lKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoa2luZm8tPnNpX3N0aW1lLCAmdWluZm8tPnN0aW1lKTsKKwkJYnJlYWs7CisJY2FzZSBfX1NJX1JUOiAvKiBUaGlzIGlzIG5vdCBnZW5lcmF0ZWQgYnkgdGhlIGtlcm5lbCBhcyBvZiBub3cuICovCisJY2FzZSBfX1NJX01FU0dROiAvKiBCdXQgdGhpcyBpcyAqLworCQllcnIgfD0gX19wdXRfdXNlcihraW5mby0+c2lfcGlkLCAmdWluZm8tPnBpZCk7CisJCWVyciB8PSBfX3B1dF91c2VyKGtpbmZvLT5zaV91aWQsICZ1aW5mby0+dWlkKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoKGxvbmcpa2luZm8tPnNpX3B0ciwgJnVpbmZvLT5zdnB0cik7CisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIHRoaXMgaXMganVzdCBpbiBjYXNlIGZvciBub3cgLi4uICovCisJCWVyciB8PSBfX3B1dF91c2VyKGtpbmZvLT5zaV9waWQsICZ1aW5mby0+cGlkKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoa2luZm8tPnNpX3VpZCwgJnVpbmZvLT51aWQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyID8gLUVGQVVMVDogc2l6ZW9mKCp1aW5mbyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNpZ25hbGZkX2RlcXVldWUoc3RydWN0IHNpZ25hbGZkX2N0eCAqY3R4LCBzaWdpbmZvX3QgKmluZm8sCisJCQkJaW50IG5vbmJsb2NrKQoreworCXNzaXplX3QgcmV0OworCXN0cnVjdCBzaWduYWxmZF9sb2NrY3R4IGxrOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJaWYgKCFzaWduYWxmZF9sb2NrKGN0eCwgJmxrKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBkZXF1ZXVlX3NpZ25hbChsay50c2ssICZjdHgtPnNpZ21hc2ssIGluZm8pOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOgorCQlpZiAoIW5vbmJsb2NrKQorCQkJYnJlYWs7CisJCXJldCA9IC1FQUdBSU47CisJZGVmYXVsdDoKKwkJc2lnbmFsZmRfdW5sb2NrKCZsayk7CisJCXJldHVybiByZXQ7CisJfQorCisJYWRkX3dhaXRfcXVldWUoJmN0eC0+d3FoLCAmd2FpdCk7CisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlyZXQgPSBkZXF1ZXVlX3NpZ25hbChsay50c2ssICZjdHgtPnNpZ21hc2ssIGluZm8pOworCQlzaWduYWxmZF91bmxvY2soJmxrKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJYnJlYWs7CisJCX0KKwkJc2NoZWR1bGUoKTsKKwkJcmV0ID0gc2lnbmFsZmRfbG9jayhjdHgsICZsayk7CisJCWlmICh1bmxpa2VseSghcmV0KSkgeworCQkJLyoKKwkJCSAqIExldCB0aGUgY2FsbGVyIHJlYWQgemVybyBieXRlLCBhbGEgc29ja2V0CisJCQkgKiByZWN2KCkgd2hlbiB0aGUgcGVlciBkaXNjb25uZWN0LiBUaGlzIHRlc3QKKwkJCSAqIG11c3QgYmUgZG9uZSBiZWZvcmUgZG9pbmcgYSBkZXF1ZXVlX3NpZ25hbCgpLAorCQkJICogYmVjYXVzZSBpZiB0aGUgc2lnaGFuZCBoYXMgYmVlbiBvcnBoYW5lZCwKKwkJCSAqIHRoZSBkZXF1ZXVlX3NpZ25hbCgpIGNhbGwgaXMgZ29pbmcgdG8gY3Jhc2gKKwkJCSAqIGJlY2F1c2UgLT5zaWdoYW5kIHdpbGwgYmUgbG9uZyBnb25lLgorCQkJICovCisJCQkgYnJlYWs7CisJCX0KKwl9CisKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmY3R4LT53cWgsICZ3YWl0KTsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJucyBlaXRoZXIgdGhlIHNpemUgb2YgYSAic3RydWN0IHNpZ25hbGZkX3NpZ2luZm8iLCBvciB6ZXJvIGlmIHRoZQorICogc2lnaGFuZCB3ZSBhcmUgYXR0YWNoZWQgdG8sIGhhcyBiZWVuIG9ycGhhbmVkLiBUaGUgImNvdW50IiBwYXJhbWV0ZXIKKyAqIG11c3QgYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgYSAic3RydWN0IHNpZ25hbGZkX3NpZ2luZm8iLgorICovCitzdGF0aWMgc3NpemVfdCBzaWduYWxmZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgc2lnbmFsZmRfY3R4ICpjdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8gX191c2VyICpzaWdpbmZvOworCWludCBub25ibG9jayA9IGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOworCXNzaXplX3QgcmV0LCB0b3RhbCA9IDA7CisJc2lnaW5mb190IGluZm87CisKKwljb3VudCAvPSBzaXplb2Yoc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8pOworCWlmICghY291bnQpCisJCXJldHVybiAtRUlOVkFMOworCisJc2lnaW5mbyA9IChzdHJ1Y3Qgc2lnbmFsZmRfc2lnaW5mbyBfX3VzZXIgKikgYnVmOworCisJZG8geworCQlyZXQgPSBzaWduYWxmZF9kZXF1ZXVlKGN0eCwgJmluZm8sIG5vbmJsb2NrKTsKKwkJaWYgKHVubGlrZWx5KHJldCA8PSAwKSkKKwkJCWJyZWFrOworCQlyZXQgPSBzaWduYWxmZF9jb3B5aW5mbyhzaWdpbmZvLCAmaW5mbyk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJCXNpZ2luZm8rKzsKKwkJdG90YWwgKz0gcmV0OworCQlub25ibG9jayA9IDE7CisJfSB3aGlsZSAoLS1jb3VudCk7CisKKwlyZXR1cm4gdG90YWwgPyB0b3RhbCA6IHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2lnbmFsZmRfZm9wcyA9IHsKKwkucmVsZWFzZQk9IHNpZ25hbGZkX3JlbGVhc2UsCisJLnBvbGwJCT0gc2lnbmFsZmRfcG9sbCwKKwkucmVhZAkJPSBzaWduYWxmZF9yZWFkLAorfTsKKworLyoKKyAqIENyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBvdXIgc2lnbmFsCisgKiBzdGF0ZS4gV2UgY2FuIHBhc3MgaXQgYXJvdW5kIHRvIG90aGVycyBpZiB3ZSB3YW50IHRvLCBidXQKKyAqIGl0IHdpbGwgYWx3YXlzIGJlIF9vdXJfIHNpZ25hbCBzdGF0ZS4KKyAqLworYXNtbGlua2FnZSBsb25nIHN5c19zaWduYWxmZChpbnQgdWZkLCBzaWdzZXRfdCBfX3VzZXIgKnVzZXJfbWFzaywgc2l6ZV90IHNpemVtYXNrKQoreworCWludCBlcnJvcjsKKwlzaWdzZXRfdCBzaWdtYXNrOworCXN0cnVjdCBzaWduYWxmZF9jdHggKmN0eDsKKwlzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnNpZ2hhbmQ7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3Qgc2lnbmFsZmRfbG9ja2N0eCBsazsKKworCWlmIChzaXplbWFzayAhPSBzaXplb2Yoc2lnc2V0X3QpIHx8CisJICAgIGNvcHlfZnJvbV91c2VyKCZzaWdtYXNrLCB1c2VyX21hc2ssIHNpemVvZihzaWdtYXNrKSkpCisJCXJldHVybiBlcnJvciA9IC1FSU5WQUw7CisJc2lnZGVsc2V0bWFzaygmc2lnbWFzaywgc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpOworCXNpZ25vdHNldCgmc2lnbWFzayk7CisKKwlpZiAodWZkID09IC0xKSB7CisJCWN0eCA9IGttYWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjdHgpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdHgtPndxaCk7CisJCWN0eC0+c2lnbWFzayA9IHNpZ21hc2s7CisJCWN0eC0+dHNrID0gY3VycmVudDsKKworCQlzaWdoYW5kID0gY3VycmVudC0+c2lnaGFuZDsKKwkJLyoKKwkJICogQWRkIHRoaXMgZmQgdG8gdGhlIGxpc3Qgb2Ygc2lnbmFsIGxpc3RlbmVycy4KKwkJICovCisJCXNwaW5fbG9ja19pcnEoJnNpZ2hhbmQtPnNpZ2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZjdHgtPmxuaywgJnNpZ2hhbmQtPnNpZ25hbGZkX2xpc3QpOworCQlzcGluX3VubG9ja19pcnEoJnNpZ2hhbmQtPnNpZ2xvY2spOworCisJCS8qCisJCSAqIFdoZW4gd2UgY2FsbCB0aGlzLCB0aGUgaW5pdGlhbGl6YXRpb24gbXVzdCBiZSBjb21wbGV0ZSwgc2luY2UKKwkJICogYW5vbl9pbm9kZV9nZXRmZCgpIHdpbGwgaW5zdGFsbCB0aGUgZmQuCisJCSAqLworCQllcnJvciA9IGFub25faW5vZGVfZ2V0ZmQoJnVmZCwgJmlub2RlLCAmZmlsZSwgIltzaWduYWxmZF0iLAorCQkJCQkgJnNpZ25hbGZkX2ZvcHMsIGN0eCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZXJyX2ZkYWxsb2M7CisJfSBlbHNlIHsKKwkJZmlsZSA9IGZnZXQodWZkKTsKKwkJaWYgKCFmaWxlKQorCQkJcmV0dXJuIC1FQkFERjsKKwkJY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCQlpZiAoZmlsZS0+Zl9vcCAhPSAmc2lnbmFsZmRfZm9wcykgeworCQkJZnB1dChmaWxlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8qCisJCSAqIFdlIG5lZWQgdG8gYmUgcHJlcGFyZWQgb2YgdGhlIGZhY3QgdGhhdCB0aGUgc2lnaGFuZCB0aGlzIGZkCisJCSAqIGlzIGF0dGFjaGVkIHRvLCBoYXMgYmVlbiBkZXRjaGVkLiBJbiB0aGF0IGNhc2Ugc2lnbmFsZmRfbG9jaygpCisJCSAqIHdpbGwgcmV0dXJuIDAsIGFuZCB3ZSdsbCBqdXN0IHNraXAgc2V0dGluZyB0aGUgbmV3IG1hc2suCisJCSAqLworCQlpZiAoc2lnbmFsZmRfbG9jayhjdHgsICZsaykpIHsKKwkJCWN0eC0+c2lnbWFzayA9IHNpZ21hc2s7CisJCQlzaWduYWxmZF91bmxvY2soJmxrKTsKKwkJfQorCQl3YWtlX3VwKCZjdHgtPndxaCk7CisJCWZwdXQoZmlsZSk7CisJfQorCisJcmV0dXJuIHVmZDsKKworZXJyX2ZkYWxsb2M6CisJc2lnbmFsZmRfY2xlYW51cChjdHgpOworCXJldHVybiBlcnJvcjsKK30KKwpkaWZmIC0tZ2l0IGEvZnMvc21iZnMvZGlyLmMgYi9mcy9zbWJmcy9kaXIuYwppbmRleCA1MDEzNmIxLi40OGRhNGZhIDEwMDY0NAotLS0gYS9mcy9zbWJmcy9kaXIuYworKysgYi9mcy9zbWJmcy9kaXIuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bGludXgvc21iX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc21iX21vdW50Lmg+CmRpZmYgLS1naXQgYS9mcy9zbWJmcy9maWxlLmMgYi9mcy9zbWJmcy9maWxlLmMKaW5kZXggZjE2MTc5Ny4uYWVhM2Y4YSAxMDA2NDQKLS0tIGEvZnMvc21iZnMvZmlsZS5jCisrKyBiL2ZzL3NtYmZzL2ZpbGUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2Fpby5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9mcy9zbWJmcy9pbm9kZS5jIGIvZnMvc21iZnMvaW5vZGUuYwppbmRleCA0MjRhM2RkLi42NzI0YTZjIDEwMDY0NAotLS0gYS9mcy9zbWJmcy9pbm9kZS5jCisrKyBiL2ZzL3NtYmZzL2lub2RlLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbWJfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbWJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYl9tb3VudC5oPgpAQCAtNzAsOCArNzEsNyBAQAogewogCXN0cnVjdCBzbWJfaW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IHNtYl9pbm9kZV9pbmZvICopIGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKLQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogIAogc3RhdGljIGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL3JlcXVlc3QuYyBiL2ZzL3NtYmZzL3JlcXVlc3QuYwppbmRleCA3MjNmN2M2Li4zZjU0YTBmIDEwMDY0NAotLS0gYS9mcy9zbWJmcy9yZXF1ZXN0LmMKKysrIGIvZnMvc21iZnMvcmVxdWVzdC5jCkBAIC02LDEwICs2LDEyIEBACiAgKiAgUGxlYXNlIGFkZCBhIG5vdGUgYWJvdXQgeW91ciBjaGFuZ2VzIHRvIHNtYmZzIGluIHRoZSBDaGFuZ2VMb2cgZmlsZS4KICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bGludXgvc21iX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc21ibm8uaD4KQEAgLTIyLDggKzI0LDYgQEAKIC8qICNkZWZpbmUgU01CX1NMQUJfREVCVUcJKFNMQUJfUkVEX1pPTkUgfCBTTEFCX1BPSVNPTikgKi8KICNkZWZpbmUgU01CX1NMQUJfREVCVUcJMAogCi0jZGVmaW5lIFJPVU5EX1VQKHgpICgoKHgpKzMpICYgfjMpCi0KIC8qIGNhY2hlIGZvciByZXF1ZXN0IHN0cnVjdHVyZXMgKi8KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmVxX2NhY2hlcDsKIApAQCAtMjAwLDggKzIwMCw4IEBACiAKIAljb25zdCBpbnQgc21iX3BhcmFtZXRlcnMgPSAxNTsKIAljb25zdCBpbnQgaGVhZGVyID0gU01CX0hFQURFUl9MRU4gKyAyICogc21iX3BhcmFtZXRlcnMgKyAyOwotCWNvbnN0IGludCBvcGFyYW0gPSBST1VORF9VUChoZWFkZXIgKyAzKTsKLQljb25zdCBpbnQgb2RhdGEgID0gUk9VTkRfVVAob3BhcmFtICsgcmVxLT5ycV9scGFybSk7CisJY29uc3QgaW50IG9wYXJhbSA9IEFMSUdOKGhlYWRlciArIDMsIHNpemVvZih1MzIpKTsKKwljb25zdCBpbnQgb2RhdGEgID0gQUxJR04ob3BhcmFtICsgcmVxLT5ycV9scGFybSwgc2l6ZW9mKHUzMikpOwogCWNvbnN0IGludCBiY2MgPSAocmVxLT5ycV9kYXRhID8gb2RhdGEgKyByZXEtPnJxX2xkYXRhIDoKIAkJCQkJb3BhcmFtICsgcmVxLT5ycV9scGFybSkgLSBoZWFkZXI7CiAKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL3NtYmlvZC5jIGIvZnMvc21iZnMvc21iaW9kLmMKaW5kZXggODllYWYzMS4uNjcxNzZhZiAxMDA2NDQKLS0tIGEvZnMvc21iZnMvc21iaW9kLmMKKysrIGIvZnMvc21iZnMvc21iaW9kLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpAQCAtMjk5LDggKzI5OCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgc21iaW9kKHZvaWQgKnVudXNlZCkKIHsKLQlhbGxvd19zaWduYWwoU0lHS0lMTCk7Ci0KIAlWRVJCT1NFKCJTTUIgS2VybmVsIHRocmVhZCBzdGFydGluZyAoJWQpIC4uLlxuIiwgY3VycmVudC0+cGlkKTsKIAogCWZvciAoOzspIHsKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL3NvY2suYyBiL2ZzL3NtYmZzL3NvY2suYwppbmRleCA5MmVhNmIyLi5lNDhiZDgyIDEwMDY0NAotLS0gYS9mcy9zbWJmcy9zb2NrLmMKKysrIGIvZnMvc21iZnMvc29jay5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPG5ldC9zY20uaD4KICNpbmNsdWRlIDxuZXQvdGNwX3N0YXRlcy5oPgpkaWZmIC0tZ2l0IGEvZnMvc21iZnMvc3ltbGluay5jIGIvZnMvc21iZnMvc3ltbGluay5jCmluZGV4IGZlYTIwY2UuLjAwYjI5MDkgMTAwNjQ0Ci0tLSBhL2ZzL3NtYmZzL3N5bWxpbmsuYworKysgYi9mcy9zbWJmcy9zeW1saW5rLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogCmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jCmluZGV4IDU0MjhiMGYuLjEyZjI4MjggMTAwNjQ0Ci0tLSBhL2ZzL3NwbGljZS5jCisrKyBiL2ZzL3NwbGljZS5jCkBAIC0yODksMTIgKzI4OSwxMCBAQAogCQlucl9wYWdlcyA9IFBJUEVfQlVGRkVSUzsKIAogCS8qCi0JICogSW5pdGlhdGUgcmVhZC1haGVhZCBvbiB0aGlzIHBhZ2UgcmFuZ2UuIGhvd2V2ZXIsIGRvbid0IGNhbGwgaW50bwotCSAqIHJlYWQtYWhlYWQgaWYgdGhpcyBpcyBhIG5vbi16ZXJvIG9mZnNldCAod2UgYXJlIGxpa2VseSBkb2luZyBzbWFsbAotCSAqIGNodW5rIHNwbGljZSBhbmQgdGhlIHBhZ2UgaXMgYWxyZWFkeSB0aGVyZSkgZm9yIGEgc2luZ2xlIHBhZ2UuCisJICogRG9uJ3QgdHJ5IHRvIDJuZCBndWVzcyB0aGUgcmVhZC1haGVhZCBsb2dpYywgY2FsbCBpbnRvCisJICogcGFnZV9jYWNoZV9yZWFkYWhlYWQoKSBsaWtlIHRoZSBwYWdlIGNhY2hlIHJlYWRzIHdvdWxkIGRvLgogCSAqLwotCWlmICghbG9mZiB8fCBucl9wYWdlcyA+IDEpCi0JCXBhZ2VfY2FjaGVfcmVhZGFoZWFkKG1hcHBpbmcsICZpbi0+Zl9yYSwgaW4sIGluZGV4LCBucl9wYWdlcyk7CisJcGFnZV9jYWNoZV9yZWFkYWhlYWQobWFwcGluZywgJmluLT5mX3JhLCBpbiwgaW5kZXgsIG5yX3BhZ2VzKTsKIAogCS8qCiAJICogTm93IGZpbGwgaW4gdGhlIGhvbGVzOgpAQCAtMzc4LDEwICszNzYsMTEgQEAKIAkJCSAqIElmIGluIG5vbmJsb2NrIG1vZGUgdGhlbiBkb250IGJsb2NrIG9uIHdhaXRpbmcKIAkJCSAqIGZvciBhbiBpbi1mbGlnaHQgaW8gcGFnZQogCQkJICovCi0JCQlpZiAoZmxhZ3MgJiBTUExJQ0VfRl9OT05CTE9DSykKLQkJCQlicmVhazsKLQotCQkJbG9ja19wYWdlKHBhZ2UpOworCQkJaWYgKGZsYWdzICYgU1BMSUNFX0ZfTk9OQkxPQ0spIHsKKwkJCQlpZiAoVGVzdFNldFBhZ2VMb2NrZWQocGFnZSkpCisJCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJbG9ja19wYWdlKHBhZ2UpOwogCiAJCQkvKgogCQkJICogcGFnZSB3YXMgdHJ1bmNhdGVkLCBzdG9wIGhlcmUuIGlmIHRoaXMgaXNuJ3QgdGhlCmRpZmYgLS1naXQgYS9mcy9zdGF0LmMgYi9mcy9zdGF0LmMKaW5kZXggMzhhOGNiMi4uNjg1MTAwNiAxMDA2NDQKLS0tIGEvZnMvc3RhdC5jCisrKyBiL2ZzL3N0YXQuYwpAQCAtOCw3ICs4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDgzNDFlNGUuLjUyNjBkNjIgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtMTA3LDYgKzEwNyw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiB7CiAJc2VjdXJpdHlfc2JfZnJlZShzKTsKKwlrZnJlZShzLT5zX3N1YnR5cGUpOwogCWtmcmVlKHMpOwogfQogCkBAIC05MDcsNiArOTA4LDI5IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKHZmc19rZXJuX21vdW50KTsKIAorc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqZnNfc2V0X3N1YnR5cGUoc3RydWN0IHZmc21vdW50ICptbnQsIGNvbnN0IGNoYXIgKmZzdHlwZSkKK3sKKwlpbnQgZXJyOworCWNvbnN0IGNoYXIgKnN1YnR5cGUgPSBzdHJjaHIoZnN0eXBlLCAnLicpOworCWlmIChzdWJ0eXBlKSB7CisJCXN1YnR5cGUrKzsKKwkJZXJyID0gLUVJTlZBTDsKKwkJaWYgKCFzdWJ0eXBlWzBdKQorCQkJZ290byBlcnI7CisJfSBlbHNlCisJCXN1YnR5cGUgPSAiIjsKKworCW1udC0+bW50X3NiLT5zX3N1YnR5cGUgPSBrc3RyZHVwKHN1YnR5cGUsIEdGUF9LRVJORUwpOworCWVyciA9IC1FTk9NRU07CisJaWYgKCFtbnQtPm1udF9zYi0+c19zdWJ0eXBlKQorCQlnb3RvIGVycjsKKwlyZXR1cm4gbW50OworCisgZXJyOgorCW1udHB1dChtbnQpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKIHN0cnVjdCB2ZnNtb3VudCAqCiBkb19rZXJuX21vdW50KGNvbnN0IGNoYXIgKmZzdHlwZSwgaW50IGZsYWdzLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKQogewpAQCAtOTE1LDYgKzkzOSw5IEBACiAJaWYgKCF0eXBlKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIAltbnQgPSB2ZnNfa2Vybl9tb3VudCh0eXBlLCBmbGFncywgbmFtZSwgZGF0YSk7CisJaWYgKCFJU19FUlIobW50KSAmJiAodHlwZS0+ZnNfZmxhZ3MgJiBGU19IQVNfU1VCVFlQRSkgJiYKKwkgICAgIW1udC0+bW50X3NiLT5zX3N1YnR5cGUpCisJCW1udCA9IGZzX3NldF9zdWJ0eXBlKG1udCwgZnN0eXBlKTsKIAlwdXRfZmlsZXN5c3RlbSh0eXBlKTsKIAlyZXR1cm4gbW50OwogfQpkaWZmIC0tZ2l0IGEvZnMvc3luYy5jIGIvZnMvc3luYy5jCmluZGV4IDVjYjllN2UuLjJmOTc1NzYgMTAwNjQ0Ci0tLSBhL2ZzL3N5bmMuYworKysgYi9mcy9zeW5jLmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCQkJIVNfSVNMTksoaV9tb2RlKSkKIAkJZ290byBvdXRfcHV0OwogCi0JcmV0ID0gZG9fc3luY19maWxlX3JhbmdlKGZpbGUsIG9mZnNldCwgZW5kYnl0ZSwgZmxhZ3MpOworCXJldCA9IGRvX3N5bmNfbWFwcGluZ19yYW5nZShmaWxlLT5mX21hcHBpbmcsIG9mZnNldCwgZW5kYnl0ZSwgZmxhZ3MpOwogb3V0X3B1dDoKIAlmcHV0X2xpZ2h0KGZpbGUsIGZwdXRfbmVlZGVkKTsKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCAwZTYzN2FkLi5iNTAyYzcxIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC0xMTEsMzYgKzExMSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCi0vKioKLSAqCWZsdXNoX3JlYWRfYnVmZmVyIC0gcHVzaCBidWZmZXIgdG8gdXNlcnNwYWNlLgotICoJQGJ1ZmZlcjoJZGF0YSBidWZmZXIgZm9yIGZpbGUuCi0gKglAYnVmOgkJdXNlci1wYXNzZWQgYnVmZmVyLgotICoJQGNvdW50OgkJbnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZC4KLSAqCUBwcG9zOgkJZmlsZSBwb3NpdGlvbi4KLSAqCi0gKglDb3B5IHRoZSBidWZmZXIgd2UgZmlsbGVkIGluIGZpbGxfcmVhZF9idWZmZXIoKSB0byB1c2Vyc3BhY2UuCi0gKglUaGlzIGlzIGRvbmUgYXQgdGhlIHJlYWRlcidzIGxlaXN1cmUsIGNvcHlpbmcgYW5kIGFkdmFuY2luZyAKLSAqCXRoZSBhbW91bnQgdGhleSBzcGVjaWZ5IGVhY2ggdGltZS4KLSAqCVRoaXMgbWF5IGJlIGNhbGxlZCBjb250aW51b3VzbHkgdW50aWwgdGhlIGJ1ZmZlciBpcyBlbXB0eS4KLSAqLwotc3RhdGljIGludCBmbHVzaF9yZWFkX2J1ZmZlcihzdHJ1Y3Qgc3lzZnNfYnVmZmVyICogYnVmZmVyLCBjaGFyIF9fdXNlciAqIGJ1ZiwKLQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKQotewotCWludCBlcnJvcjsKLQotCWlmICgqcHBvcyA+IGJ1ZmZlci0+Y291bnQpCi0JCXJldHVybiAwOwotCi0JaWYgKGNvdW50ID4gKGJ1ZmZlci0+Y291bnQgLSAqcHBvcykpCi0JCWNvdW50ID0gYnVmZmVyLT5jb3VudCAtICpwcG9zOwotCi0JZXJyb3IgPSBjb3B5X3RvX3VzZXIoYnVmLGJ1ZmZlci0+cGFnZSArICpwcG9zLGNvdW50KTsKLQlpZiAoIWVycm9yKQotCQkqcHBvcyArPSBjb3VudDsKLQlyZXR1cm4gZXJyb3IgPyAtRUZBVUxUIDogY291bnQ7Ci19Ci0KIC8qKgogICoJc3lzZnNfcmVhZF9maWxlIC0gcmVhZCBhbiBhdHRyaWJ1dGUuIAogICoJQGZpbGU6CWZpbGUgcG9pbnRlci4KQEAgLTE3Nyw3ICsxNDcsOCBAQAogCX0KIAlwcl9kZWJ1ZygiJXM6IGNvdW50ID0gJXpkLCBwcG9zID0gJWxsZCwgYnVmID0gJXNcbiIsCiAJCSBfX0ZVTkNUSU9OX18sIGNvdW50LCAqcHBvcywgYnVmZmVyLT5wYWdlKTsKLQlyZXR2YWwgPSBmbHVzaF9yZWFkX2J1ZmZlcihidWZmZXIsYnVmLGNvdW50LHBwb3MpOworCXJldHZhbCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIGJ1ZmZlci0+cGFnZSwKKwkJCQkJIGJ1ZmZlci0+Y291bnQpOwogb3V0OgogCXVwKCZidWZmZXItPnNlbSk7CiAJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2lub2RlLmMgYi9mcy9zeXNmcy9pbm9kZS5jCmluZGV4IDRkZTVjNmIuLmJkZDMwZTcgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2lub2RlLmMKKysrIGIvZnMvc3lzZnMvaW5vZGUuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSAic3lzZnMuaCIKIApkaWZmIC0tZ2l0IGEvZnMvc3lzdi9pbm9kZS5jIGIvZnMvc3lzdi9pbm9kZS5jCmluZGV4IDMxNTJkNzQuLjU2NDQxMTYgMTAwNjQ0Ci0tLSBhL2ZzL3N5c3YvaW5vZGUuYworKysgYi9mcy9zeXN2L2lub2RlLmMKQEAgLTMyMiw4ICszMjIsNyBAQAogewogCXN0cnVjdCBzeXN2X2lub2RlX2luZm8gKnNpID0gKHN0cnVjdCBzeXN2X2lub2RlX2luZm8gKilwOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKQotCQlpbm9kZV9pbml0X29uY2UoJnNpLT52ZnNfaW5vZGUpOworCWlub2RlX2luaXRfb25jZSgmc2ktPnZmc19pbm9kZSk7CiB9CiAKIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHN5c3Zfc29wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL3N5c3YvbmFtZWkuYyBiL2ZzL3N5c3YvbmFtZWkuYwppbmRleCA0ZTQ4YWJiLi42YmQ4NTBiIDEwMDY0NAotLS0gYS9mcy9zeXN2L25hbWVpLmMKKysrIGIvZnMvc3lzdi9uYW1laS5jCkBAIC0xMyw3ICsxMyw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgInN5c3YuaCIKIAogc3RhdGljIGludCBhZGRfbm9uZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKZGlmZiAtLWdpdCBhL2ZzL3RpbWVyZmQuYyBiL2ZzL3RpbWVyZmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjllY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvdGltZXJmZC5jCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogIGZzL3RpbWVyZmQuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKgorICogIFRoYW5rcyB0byBUaG9tYXMgR2xlaXhuZXIgZm9yIGNvZGUgcmV2aWV3cyBhbmQgdXNlZnVsIGNvbW1lbnRzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lcmZkLmg+CisKK3N0cnVjdCB0aW1lcmZkX2N0eCB7CisJc3RydWN0IGhydGltZXIgdG1yOworCWt0aW1lX3QgdGludHY7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3FoOworCWludCBleHBpcmVkOworfTsKKworLyoKKyAqIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgdGltZXIgZXZlbnQgdHJpZ2dlcnMuIFdlIHNldCB0aGUgImV4cGlyZWQiCisgKiBmbGFnLCBidXQgd2UgZG8gbm90IHJlLWFybSB0aGUgdGltZXIgKGluIGNhc2UgaXQncyBuZWNlc3NhcnksCisgKiB0aW50di50djY0ICE9IDApIHVudGlsIHRoZSB0aW1lciBpcyByZWFkLgorICovCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgdGltZXJmZF90bXJwcm9jKHN0cnVjdCBocnRpbWVyICpodG1yKQoreworCXN0cnVjdCB0aW1lcmZkX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKGh0bXIsIHN0cnVjdCB0aW1lcmZkX2N0eCwgdG1yKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+d3FoLmxvY2ssIGZsYWdzKTsKKwljdHgtPmV4cGlyZWQgPSAxOworCXdha2VfdXBfbG9ja2VkKCZjdHgtPndxaCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT53cWgubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworfQorCitzdGF0aWMgdm9pZCB0aW1lcmZkX3NldHVwKHN0cnVjdCB0aW1lcmZkX2N0eCAqY3R4LCBpbnQgY2xvY2tpZCwgaW50IGZsYWdzLAorCQkJICBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqa3RtcikKK3sKKwllbnVtIGhydGltZXJfbW9kZSBodG1vZGU7CisJa3RpbWVfdCB0ZXhwOworCisJaHRtb2RlID0gKGZsYWdzICYgVEZEX1RJTUVSX0FCU1RJTUUpID8KKwkJSFJUSU1FUl9NT0RFX0FCUzogSFJUSU1FUl9NT0RFX1JFTDsKKworCXRleHAgPSB0aW1lc3BlY190b19rdGltZShrdG1yLT5pdF92YWx1ZSk7CisJY3R4LT5leHBpcmVkID0gMDsKKwljdHgtPnRpbnR2ID0gdGltZXNwZWNfdG9fa3RpbWUoa3Rtci0+aXRfaW50ZXJ2YWwpOworCWhydGltZXJfaW5pdCgmY3R4LT50bXIsIGNsb2NraWQsIGh0bW9kZSk7CisJY3R4LT50bXIuZXhwaXJlcyA9IHRleHA7CisJY3R4LT50bXIuZnVuY3Rpb24gPSB0aW1lcmZkX3RtcnByb2M7CisJaWYgKHRleHAudHY2NCAhPSAwKQorCQlocnRpbWVyX3N0YXJ0KCZjdHgtPnRtciwgdGV4cCwgaHRtb2RlKTsKK30KKworc3RhdGljIGludCB0aW1lcmZkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHRpbWVyZmRfY3R4ICpjdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlocnRpbWVyX2NhbmNlbCgmY3R4LT50bXIpOworCWtmcmVlKGN0eCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGltZXJmZF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCB0aW1lcmZkX2N0eCAqY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBldmVudHMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmN0eC0+d3FoLCB3YWl0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPndxaC5sb2NrLCBmbGFncyk7CisJaWYgKGN0eC0+ZXhwaXJlZCkKKwkJZXZlbnRzIHw9IFBPTExJTjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPndxaC5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZXZlbnRzOworfQorCitzdGF0aWMgc3NpemVfdCB0aW1lcmZkX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSAgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHRpbWVyZmRfY3R4ICpjdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3NpemVfdCByZXM7CisJdTMyIHRpY2tzID0gMDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWlmIChjb3VudCA8IHNpemVvZih0aWNrcykpCisJCXJldHVybiAtRUlOVkFMOworCXNwaW5fbG9ja19pcnEoJmN0eC0+d3FoLmxvY2spOworCXJlcyA9IC1FQUdBSU47CisJaWYgKCFjdHgtPmV4cGlyZWQgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKKwkJX19hZGRfd2FpdF9xdWV1ZSgmY3R4LT53cWgsICZ3YWl0KTsKKwkJZm9yIChyZXMgPSAwOzspIHsKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQlpZiAoY3R4LT5leHBpcmVkKSB7CisJCQkJcmVzID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXJlcyA9IC1FUkVTVEFSVFNZUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycSgmY3R4LT53cWgubG9jayk7CisJCQlzY2hlZHVsZSgpOworCQkJc3Bpbl9sb2NrX2lycSgmY3R4LT53cWgubG9jayk7CisJCX0KKwkJX19yZW1vdmVfd2FpdF9xdWV1ZSgmY3R4LT53cWgsICZ3YWl0KTsKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCX0KKwlpZiAoY3R4LT5leHBpcmVkKSB7CisJCWN0eC0+ZXhwaXJlZCA9IDA7CisJCWlmIChjdHgtPnRpbnR2LnR2NjQgIT0gMCkgeworCQkJLyoKKwkJCSAqIElmIHRpbnR2LnR2NjQgIT0gMCwgdGhpcyBpcyBhIHBlcmlvZGljIHRpbWVyIHRoYXQKKwkJCSAqIG5lZWRzIHRvIGJlIHJlLWFybWVkLiBXZSBhdm9pZCBkb2luZyBpdCBpbiB0aGUgdGltZXIKKwkJCSAqIGNhbGxiYWNrIHRvIGF2b2lkIERvUyBhdHRhY2tzIHNwZWNpZnlpbmcgYSB2ZXJ5CisJCQkgKiBzaG9ydCB0aW1lciBwZXJpb2QuCisJCQkgKi8KKwkJCXRpY2tzID0gKHUzMikKKwkJCQlocnRpbWVyX2ZvcndhcmQoJmN0eC0+dG1yLAorCQkJCQkJaHJ0aW1lcl9jYl9nZXRfdGltZSgmY3R4LT50bXIpLAorCQkJCQkJY3R4LT50aW50dik7CisJCQlocnRpbWVyX3Jlc3RhcnQoJmN0eC0+dG1yKTsKKwkJfSBlbHNlCisJCQl0aWNrcyA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmY3R4LT53cWgubG9jayk7CisJaWYgKHRpY2tzKQorCQlyZXMgPSBwdXRfdXNlcih0aWNrcywgYnVmKSA/IC1FRkFVTFQ6IHNpemVvZih0aWNrcyk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGltZXJmZF9mb3BzID0geworCS5yZWxlYXNlCT0gdGltZXJmZF9yZWxlYXNlLAorCS5wb2xsCQk9IHRpbWVyZmRfcG9sbCwKKwkucmVhZAkJPSB0aW1lcmZkX3JlYWQsCit9OworCithc21saW5rYWdlIGxvbmcgc3lzX3RpbWVyZmQoaW50IHVmZCwgaW50IGNsb2NraWQsIGludCBmbGFncywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyBfX3VzZXIgKnV0bXIpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB0aW1lcmZkX2N0eCAqY3R4OworCXN0cnVjdCBmaWxlICpmaWxlOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGl0aW1lcnNwZWMga3RtcjsKKworCWlmIChjb3B5X2Zyb21fdXNlcigma3RtciwgdXRtciwgc2l6ZW9mKGt0bXIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoY2xvY2tpZCAhPSBDTE9DS19NT05PVE9OSUMgJiYKKwkgICAgY2xvY2tpZCAhPSBDTE9DS19SRUFMVElNRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF0aW1lc3BlY192YWxpZCgma3Rtci5pdF92YWx1ZSkgfHwKKwkgICAgIXRpbWVzcGVjX3ZhbGlkKCZrdG1yLml0X2ludGVydmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodWZkID09IC0xKSB7CisJCWN0eCA9IGttYWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjdHgpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdHgtPndxaCk7CisKKwkJdGltZXJmZF9zZXR1cChjdHgsIGNsb2NraWQsIGZsYWdzLCAma3Rtcik7CisKKwkJLyoKKwkJICogV2hlbiB3ZSBjYWxsIHRoaXMsIHRoZSBpbml0aWFsaXphdGlvbiBtdXN0IGJlIGNvbXBsZXRlLCBzaW5jZQorCQkgKiBhbm9uX2lub2RlX2dldGZkKCkgd2lsbCBpbnN0YWxsIHRoZSBmZC4KKwkJICovCisJCWVycm9yID0gYW5vbl9pbm9kZV9nZXRmZCgmdWZkLCAmaW5vZGUsICZmaWxlLCAiW3RpbWVyZmRdIiwKKwkJCQkJICZ0aW1lcmZkX2ZvcHMsIGN0eCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZXJyX3RtcmNhbmNlbDsKKwl9IGVsc2UgeworCQlmaWxlID0gZmdldCh1ZmQpOworCQlpZiAoIWZpbGUpCisJCQlyZXR1cm4gLUVCQURGOworCQljdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCWlmIChmaWxlLT5mX29wICE9ICZ0aW1lcmZkX2ZvcHMpIHsKKwkJCWZwdXQoZmlsZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKgorCQkgKiBXZSBuZWVkIHRvIHN0b3AgdGhlIGV4aXN0aW5nIHRpbWVyIGJlZm9yZSByZXByb2dyYW1taW5nCisJCSAqIGl0IHRvIHRoZSBuZXcgdmFsdWVzLgorCQkgKi8KKwkJZm9yICg7OykgeworCQkJc3Bpbl9sb2NrX2lycSgmY3R4LT53cWgubG9jayk7CisJCQlpZiAoaHJ0aW1lcl90cnlfdG9fY2FuY2VsKCZjdHgtPnRtcikgPj0gMCkKKwkJCQlicmVhazsKKwkJCXNwaW5fdW5sb2NrX2lycSgmY3R4LT53cWgubG9jayk7CisJCQljcHVfcmVsYXgoKTsKKwkJfQorCQkvKgorCQkgKiBSZS1wcm9ncmFtIHRoZSB0aW1lciB0byB0aGUgbmV3IHZhbHVlIC4uLgorCQkgKi8KKwkJdGltZXJmZF9zZXR1cChjdHgsIGNsb2NraWQsIGZsYWdzLCAma3Rtcik7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPndxaC5sb2NrKTsKKwkJZnB1dChmaWxlKTsKKwl9CisKKwlyZXR1cm4gdWZkOworCitlcnJfdG1yY2FuY2VsOgorCWhydGltZXJfY2FuY2VsKCZjdHgtPnRtcik7CisJa2ZyZWUoY3R4KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKZGlmZiAtLWdpdCBhL2ZzL3VkZi9iYWxsb2MuYyBiL2ZzL3VkZi9iYWxsb2MuYwppbmRleCBlYTUyMWY4Li40Y2VjOTEwIDEwMDY0NAotLS0gYS9mcy91ZGYvYmFsbG9jLmMKKysrIGIvZnMvdWRmL2JhbGxvYy5jCkBAIC00MjcsOSArNDI3LDkgQEAKIHsKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CiAJdWludDMyX3Qgc3RhcnQsIGVuZDsKLQl1aW50MzJfdCBuZXh0b2Zmc2V0LCBvZXh0b2Zmc2V0LCBlbGVuOwotCWtlcm5lbF9sYl9hZGRyIG5ibG9jLCBvYmxvYywgZWxvYzsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9iaCwgKm5iaDsKKwl1aW50MzJfdCBlbGVuOworCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBvZXBvcywgZXBvczsKIAlpbnQ4X3QgZXR5cGU7CiAJaW50IGk7CiAKQEAgLTQ1NywxNCArNDU3LDEzIEBACiAJc3RhcnQgPSBibG9jLmxvZ2ljYWxCbG9ja051bSArIG9mZnNldDsKIAllbmQgPSBibG9jLmxvZ2ljYWxCbG9ja051bSArIG9mZnNldCArIGNvdW50IC0gMTsKIAotCW9leHRvZmZzZXQgPSBuZXh0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSk7CisJZXBvcy5vZmZzZXQgPSBvZXBvcy5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHVuYWxsb2NTcGFjZUVudHJ5KTsKIAllbGVuID0gMDsKLQlvYmxvYyA9IG5ibG9jID0gVURGX0lfTE9DQVRJT04odGFibGUpOwotCi0Jb2JoID0gbmJoID0gTlVMTDsKKwllcG9zLmJsb2NrID0gb2Vwb3MuYmxvY2sgPSBVREZfSV9MT0NBVElPTih0YWJsZSk7CisJZXBvcy5iaCA9IG9lcG9zLmJoID0gTlVMTDsKIAogCXdoaWxlIChjb3VudCAmJiAoZXR5cGUgPQotCQl1ZGZfbmV4dF9hZXh0KHRhYmxlLCAmbmJsb2MsICZuZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZuYmgsIDEpKSAhPSAtMSkKKwkJdWRmX25leHRfYWV4dCh0YWJsZSwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMSkpICE9IC0xKQogCXsKIAkJaWYgKCgoZWxvYy5sb2dpY2FsQmxvY2tOdW0gKyAoZWxlbiA+PiBzYi0+c19ibG9ja3NpemVfYml0cykpID09CiAJCQlzdGFydCkpCkBAIC00ODIsNyArNDgxLDcgQEAKIAkJCQlzdGFydCArPSBjb3VudDsKIAkJCQljb3VudCA9IDA7CiAJCQl9Ci0JCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgb2Jsb2MsICZvZXh0b2Zmc2V0LCBlbG9jLCBlbGVuLCBvYmgsIDEpOworCQkJdWRmX3dyaXRlX2FleHQodGFibGUsICZvZXBvcywgZWxvYywgZWxlbiwgMSk7CiAJCX0KIAkJZWxzZSBpZiAoZWxvYy5sb2dpY2FsQmxvY2tOdW0gPT0gKGVuZCArIDEpKQogCQl7CkBAIC01MDIsMjAgKzUwMSwyMCBAQAogCQkJCWVuZCAtPSBjb3VudDsKIAkJCQljb3VudCA9IDA7CiAJCQl9Ci0JCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgb2Jsb2MsICZvZXh0b2Zmc2V0LCBlbG9jLCBlbGVuLCBvYmgsIDEpOworCQkJdWRmX3dyaXRlX2FleHQodGFibGUsICZvZXBvcywgZWxvYywgZWxlbiwgMSk7CiAJCX0KIAotCQlpZiAobmJoICE9IG9iaCkKKwkJaWYgKGVwb3MuYmggIT0gb2Vwb3MuYmgpCiAJCXsKIAkJCWkgPSAtMTsKLQkJCW9ibG9jID0gbmJsb2M7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKG9iaCk7Ci0JCQlhdG9taWNfaW5jKCZuYmgtPmJfY291bnQpOwotCQkJb2JoID0gbmJoOwotCQkJb2V4dG9mZnNldCA9IDA7CisJCQlvZXBvcy5ibG9jayA9IGVwb3MuYmxvY2s7CisJCQlicmVsc2Uob2Vwb3MuYmgpOworCQkJZ2V0X2JoKGVwb3MuYmgpOworCQkJb2Vwb3MuYmggPSBlcG9zLmJoOworCQkJb2Vwb3Mub2Zmc2V0ID0gMDsKIAkJfQogCQllbHNlCi0JCQlvZXh0b2Zmc2V0ID0gbmV4dG9mZnNldDsKKwkJCW9lcG9zLm9mZnNldCA9IGVwb3Mub2Zmc2V0OwogCX0KIAogCWlmIChjb3VudCkKQEAgLTU0Nyw1NSArNTQ2LDUzIEBACiAJCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CiAJCWVsc2UKIAkJewotCQkJdWRmX3JlbGVhc2VfZGF0YShvYmgpOwotCQkJdWRmX3JlbGVhc2VfZGF0YShuYmgpOworCQkJYnJlbHNlKG9lcG9zLmJoKTsKKwkJCWJyZWxzZShlcG9zLmJoKTsKIAkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQl9CiAKLQkJaWYgKG5leHRvZmZzZXQgKyAoMiAqIGFkc2l6ZSkgPiBzYi0+c19ibG9ja3NpemUpCisJCWlmIChlcG9zLm9mZnNldCArICgyICogYWRzaXplKSA+IHNiLT5zX2Jsb2Nrc2l6ZSkKIAkJewogCQkJY2hhciAqc3B0ciwgKmRwdHI7CiAJCQlpbnQgbG9mZnNldDsKIAkKLQkJCXVkZl9yZWxlYXNlX2RhdGEob2JoKTsKLQkJCW9iaCA9IG5iaDsKLQkJCW9ibG9jID0gbmJsb2M7Ci0JCQlvZXh0b2Zmc2V0ID0gbmV4dG9mZnNldDsKKwkJCWJyZWxzZShvZXBvcy5iaCk7CisJCQlvZXBvcyA9IGVwb3M7CiAKIAkJCS8qIFN0ZWFsIGEgYmxvY2sgZnJvbSB0aGUgZXh0ZW50IGJlaW5nIGZyZWUnZCAqLwotCQkJbmJsb2MubG9naWNhbEJsb2NrTnVtID0gZWxvYy5sb2dpY2FsQmxvY2tOdW07CisJCQllcG9zLmJsb2NrLmxvZ2ljYWxCbG9ja051bSA9IGVsb2MubG9naWNhbEJsb2NrTnVtOwogCQkJZWxvYy5sb2dpY2FsQmxvY2tOdW0gKys7CiAJCQllbGVuIC09IHNiLT5zX2Jsb2Nrc2l6ZTsKIAotCQkJaWYgKCEobmJoID0gdWRmX3RyZWFkKHNiLAotCQkJCXVkZl9nZXRfbGJfcGJsb2NrKHNiLCBuYmxvYywgMCkpKSkKKwkJCWlmICghKGVwb3MuYmggPSB1ZGZfdHJlYWQoc2IsCisJCQkJdWRmX2dldF9sYl9wYmxvY2soc2IsIGVwb3MuYmxvY2ssIDApKSkpCiAJCQl7Ci0JCQkJdWRmX3JlbGVhc2VfZGF0YShvYmgpOworCQkJCWJyZWxzZShvZXBvcy5iaCk7CiAJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQl9Ci0JCQlhZWQgPSAoc3RydWN0IGFsbG9jRXh0RGVzYyAqKShuYmgtPmJfZGF0YSk7Ci0JCQlhZWQtPnByZXZpb3VzQWxsb2NFeHRMb2NhdGlvbiA9IGNwdV90b19sZTMyKG9ibG9jLmxvZ2ljYWxCbG9ja051bSk7Ci0JCQlpZiAobmV4dG9mZnNldCArIGFkc2l6ZSA+IHNiLT5zX2Jsb2Nrc2l6ZSkKKwkJCWFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKGVwb3MuYmgtPmJfZGF0YSk7CisJCQlhZWQtPnByZXZpb3VzQWxsb2NFeHRMb2NhdGlvbiA9IGNwdV90b19sZTMyKG9lcG9zLmJsb2NrLmxvZ2ljYWxCbG9ja051bSk7CisJCQlpZiAoZXBvcy5vZmZzZXQgKyBhZHNpemUgPiBzYi0+c19ibG9ja3NpemUpCiAJCQl7Ci0JCQkJbG9mZnNldCA9IG5leHRvZmZzZXQ7CisJCQkJbG9mZnNldCA9IGVwb3Mub2Zmc2V0OwogCQkJCWFlZC0+bGVuZ3RoQWxsb2NEZXNjcyA9IGNwdV90b19sZTMyKGFkc2l6ZSk7Ci0JCQkJc3B0ciA9IFVERl9JX0RBVEEoaW5vZGUpICsgbmV4dG9mZnNldCAtCisJCQkJc3B0ciA9IFVERl9JX0RBVEEoaW5vZGUpICsgZXBvcy5vZmZzZXQgLQogCQkJCQl1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpICsKIAkJCQkJVURGX0lfTEVORUFUVFIoaW5vZGUpIC0gYWRzaXplOwotCQkJCWRwdHIgPSBuYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKTsKKwkJCQlkcHRyID0gZXBvcy5iaC0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpOwogCQkJCW1lbWNweShkcHRyLCBzcHRyLCBhZHNpemUpOwotCQkJCW5leHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykgKyBhZHNpemU7CisJCQkJZXBvcy5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykgKyBhZHNpemU7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJbG9mZnNldCA9IG5leHRvZmZzZXQgKyBhZHNpemU7CisJCQkJbG9mZnNldCA9IGVwb3Mub2Zmc2V0ICsgYWRzaXplOwogCQkJCWFlZC0+bGVuZ3RoQWxsb2NEZXNjcyA9IGNwdV90b19sZTMyKDApOwotCQkJCXNwdHIgPSAob2JoKS0+Yl9kYXRhICsgbmV4dG9mZnNldDsKLQkJCQluZXh0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpOworCQkJCXNwdHIgPSBvZXBvcy5iaC0+Yl9kYXRhICsgZXBvcy5vZmZzZXQ7CisJCQkJZXBvcy5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYyk7CiAKLQkJCQlpZiAob2JoKQorCQkJCWlmIChvZXBvcy5iaCkKIAkJCQl7Ci0JCQkJCWFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKG9iaCktPmJfZGF0YTsKKwkJCQkJYWVkID0gKHN0cnVjdCBhbGxvY0V4dERlc2MgKilvZXBvcy5iaC0+Yl9kYXRhOwogCQkJCQlhZWQtPmxlbmd0aEFsbG9jRGVzY3MgPQogCQkJCQkJY3B1X3RvX2xlMzIobGUzMl90b19jcHUoYWVkLT5sZW5ndGhBbGxvY0Rlc2NzKSArIGFkc2l6ZSk7CiAJCQkJfQpAQCAtNjA2LDExICs2MDMsMTEgQEAKIAkJCQl9CiAJCQl9CiAJCQlpZiAoVURGX1NCX1VERlJFVihzYikgPj0gMHgwMjAwKQotCQkJCXVkZl9uZXdfdGFnKG5iaC0+Yl9kYXRhLCBUQUdfSURFTlRfQUVELCAzLCAxLAotCQkJCQluYmxvYy5sb2dpY2FsQmxvY2tOdW0sIHNpemVvZih0YWcpKTsKKwkJCQl1ZGZfbmV3X3RhZyhlcG9zLmJoLT5iX2RhdGEsIFRBR19JREVOVF9BRUQsIDMsIDEsCisJCQkJCWVwb3MuYmxvY2subG9naWNhbEJsb2NrTnVtLCBzaXplb2YodGFnKSk7CiAJCQllbHNlCi0JCQkJdWRmX25ld190YWcobmJoLT5iX2RhdGEsIFRBR19JREVOVF9BRUQsIDIsIDEsCi0JCQkJCW5ibG9jLmxvZ2ljYWxCbG9ja051bSwgc2l6ZW9mKHRhZykpOworCQkJCXVkZl9uZXdfdGFnKGVwb3MuYmgtPmJfZGF0YSwgVEFHX0lERU5UX0FFRCwgMiwgMSwKKwkJCQkJZXBvcy5ibG9jay5sb2dpY2FsQmxvY2tOdW0sIHNpemVvZih0YWcpKTsKIAkJCXN3aXRjaCAoVURGX0lfQUxMT0NUWVBFKHRhYmxlKSkKIAkJCXsKIAkJCQljYXNlIElDQlRBR19GTEFHX0FEX1NIT1JUOgpAQCAtNjE5LDcgKzYxNiw3IEBACiAJCQkJCXNhZC0+ZXh0TGVuZ3RoID0gY3B1X3RvX2xlMzIoCiAJCQkJCQlFWFRfTkVYVF9FWFRFTlRfQUxMT0NERUNTIHwKIAkJCQkJCXNiLT5zX2Jsb2Nrc2l6ZSk7Ci0JCQkJCXNhZC0+ZXh0UG9zaXRpb24gPSBjcHVfdG9fbGUzMihuYmxvYy5sb2dpY2FsQmxvY2tOdW0pOworCQkJCQlzYWQtPmV4dFBvc2l0aW9uID0gY3B1X3RvX2xlMzIoZXBvcy5ibG9jay5sb2dpY2FsQmxvY2tOdW0pOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQkJY2FzZSBJQ0JUQUdfRkxBR19BRF9MT05HOgpAQCAtNjI4LDE0ICs2MjUsMTQgQEAKIAkJCQkJbGFkLT5leHRMZW5ndGggPSBjcHVfdG9fbGUzMigKIAkJCQkJCUVYVF9ORVhUX0VYVEVOVF9BTExPQ0RFQ1MgfAogCQkJCQkJc2ItPnNfYmxvY2tzaXplKTsKLQkJCQkJbGFkLT5leHRMb2NhdGlvbiA9IGNwdV90b19sZWxiKG5ibG9jKTsKKwkJCQkJbGFkLT5leHRMb2NhdGlvbiA9IGNwdV90b19sZWxiKGVwb3MuYmxvY2spOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAob2JoKQorCQkJaWYgKG9lcG9zLmJoKQogCQkJewotCQkJCXVkZl91cGRhdGVfdGFnKG9iaC0+Yl9kYXRhLCBsb2Zmc2V0KTsKLQkJCQltYXJrX2J1ZmZlcl9kaXJ0eShvYmgpOworCQkJCXVkZl91cGRhdGVfdGFnKG9lcG9zLmJoLT5iX2RhdGEsIGxvZmZzZXQpOworCQkJCW1hcmtfYnVmZmVyX2RpcnR5KG9lcG9zLmJoKTsKIAkJCX0KIAkJCWVsc2UKIAkJCQltYXJrX2lub2RlX2RpcnR5KHRhYmxlKTsKQEAgLTY0MywyNiArNjQwLDI2IEBACiAKIAkJaWYgKGVsZW4pIC8qIEl0J3MgcG9zc2libGUgdGhhdCBzdGVhbGluZyB0aGUgYmxvY2sgZW1wdGllZCB0aGUgZXh0ZW50ICovCiAJCXsKLQkJCXVkZl93cml0ZV9hZXh0KHRhYmxlLCBuYmxvYywgJm5leHRvZmZzZXQsIGVsb2MsIGVsZW4sIG5iaCwgMSk7CisJCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJmVwb3MsIGVsb2MsIGVsZW4sIDEpOwogCi0JCQlpZiAoIW5iaCkKKwkJCWlmICghZXBvcy5iaCkKIAkJCXsKIAkJCQlVREZfSV9MRU5BTExPQyh0YWJsZSkgKz0gYWRzaXplOwogCQkJCW1hcmtfaW5vZGVfZGlydHkodGFibGUpOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCWFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopbmJoLT5iX2RhdGE7CisJCQkJYWVkID0gKHN0cnVjdCBhbGxvY0V4dERlc2MgKillcG9zLmJoLT5iX2RhdGE7CiAJCQkJYWVkLT5sZW5ndGhBbGxvY0Rlc2NzID0KIAkJCQkJY3B1X3RvX2xlMzIobGUzMl90b19jcHUoYWVkLT5sZW5ndGhBbGxvY0Rlc2NzKSArIGFkc2l6ZSk7Ci0JCQkJdWRmX3VwZGF0ZV90YWcobmJoLT5iX2RhdGEsIG5leHRvZmZzZXQpOwotCQkJCW1hcmtfYnVmZmVyX2RpcnR5KG5iaCk7CisJCQkJdWRmX3VwZGF0ZV90YWcoZXBvcy5iaC0+Yl9kYXRhLCBlcG9zLm9mZnNldCk7CisJCQkJbWFya19idWZmZXJfZGlydHkoZXBvcy5iaCk7CiAJCQl9CiAJCX0KIAl9CiAKLQl1ZGZfcmVsZWFzZV9kYXRhKG5iaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShvYmgpOworCWJyZWxzZShlcG9zLmJoKTsKKwlicmVsc2Uob2Vwb3MuYmgpOwogCiBlcnJvcl9yZXR1cm46CiAJc2ItPnNfZGlydCA9IDE7CkBAIC02NzcsOSArNjc0LDkgQEAKIHsKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CiAJaW50IGFsbG9jX2NvdW50ID0gMDsKLQl1aW50MzJfdCBleHRvZmZzZXQsIGVsZW4sIGFkc2l6ZTsKLQlrZXJuZWxfbGJfYWRkciBibG9jLCBlbG9jOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJdWludDMyX3QgZWxlbiwgYWRzaXplOworCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zOwogCWludDhfdCBldHlwZSA9IC0xOwogCiAJaWYgKGZpcnN0X2Jsb2NrIDwgMCB8fCBmaXJzdF9ibG9jayA+PSBVREZfU0JfUEFSVExFTihzYiwgcGFydGl0aW9uKSkKQEAgLTY5MywxNCArNjkwLDEzIEBACiAJCXJldHVybiAwOwogCiAJbXV0ZXhfbG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKLQlleHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHVuYWxsb2NTcGFjZUVudHJ5KTsKLQlibG9jID0gVURGX0lfTE9DQVRJT04odGFibGUpOwotCi0JYmggPSBOVUxMOworCWVwb3Mub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSk7CisJZXBvcy5ibG9jayA9IFVERl9JX0xPQ0FUSU9OKHRhYmxlKTsKKwllcG9zLmJoID0gTlVMTDsKIAllbG9jLmxvZ2ljYWxCbG9ja051bSA9IDB4RkZGRkZGRkY7CiAKIAl3aGlsZSAoZmlyc3RfYmxvY2sgIT0gZWxvYy5sb2dpY2FsQmxvY2tOdW0gJiYgKGV0eXBlID0KLQkJdWRmX25leHRfYWV4dCh0YWJsZSwgJmJsb2MsICZleHRvZmZzZXQsICZlbG9jLCAmZWxlbiwgJmJoLCAxKSkgIT0gLTEpCisJCXVkZl9uZXh0X2FleHQodGFibGUsICZlcG9zLCAmZWxvYywgJmVsZW4sIDEpKSAhPSAtMSkKIAl7CiAJCXVkZl9kZWJ1ZygiZWxvYz0lZCwgZWxlbj0lZCwgZmlyc3RfYmxvY2s9JWRcbiIsCiAJCQllbG9jLmxvZ2ljYWxCbG9ja051bSwgZWxlbiwgZmlyc3RfYmxvY2spOwpAQCAtNzA5LDcgKzcwNSw3IEBACiAKIAlpZiAoZmlyc3RfYmxvY2sgPT0gZWxvYy5sb2dpY2FsQmxvY2tOdW0pCiAJewotCQlleHRvZmZzZXQgLT0gYWRzaXplOworCQllcG9zLm9mZnNldCAtPSBhZHNpemU7CiAKIAkJYWxsb2NfY291bnQgPSAoZWxlbiA+PiBzYi0+c19ibG9ja3NpemVfYml0cyk7CiAJCWlmIChpbm9kZSAmJiBEUVVPVF9QUkVBTExPQ19CTE9DSyhpbm9kZSwgYWxsb2NfY291bnQgPiBibG9ja19jb3VudCA/IGJsb2NrX2NvdW50IDogYWxsb2NfY291bnQpKQpAQCAtNzE5LDE1ICs3MTUsMTUgQEAKIAkJCWFsbG9jX2NvdW50ID0gYmxvY2tfY291bnQ7CiAJCQllbG9jLmxvZ2ljYWxCbG9ja051bSArPSBhbGxvY19jb3VudDsKIAkJCWVsZW4gLT0gKGFsbG9jX2NvdW50IDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKLQkJCXVkZl93cml0ZV9hZXh0KHRhYmxlLCBibG9jLCAmZXh0b2Zmc2V0LCBlbG9jLCAoZXR5cGUgPDwgMzApIHwgZWxlbiwgYmgsIDEpOworCQkJdWRmX3dyaXRlX2FleHQodGFibGUsICZlcG9zLCBlbG9jLCAoZXR5cGUgPDwgMzApIHwgZWxlbiwgMSk7CiAJCX0KIAkJZWxzZQotCQkJdWRmX2RlbGV0ZV9hZXh0KHRhYmxlLCBibG9jLCBleHRvZmZzZXQsIGVsb2MsIChldHlwZSA8PCAzMCkgfCBlbGVuLCBiaCk7CisJCQl1ZGZfZGVsZXRlX2FleHQodGFibGUsIGVwb3MsIGVsb2MsIChldHlwZSA8PCAzMCkgfCBlbGVuKTsKIAl9CiAJZWxzZQogCQlhbGxvY19jb3VudCA9IDA7CiAKLQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwlicmVsc2UoZXBvcy5iaCk7CiAKIAlpZiAoYWxsb2NfY291bnQgJiYgVURGX1NCX0xWSURCSChzYikpCiAJewpAQCAtNzQ3LDkgKzc0Myw5IEBACiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwogCXVpbnQzMl90IHNwcmVhZCA9IDB4RkZGRkZGRkYsIG5zcHJlYWQgPSAweEZGRkZGRkZGOwogCXVpbnQzMl90IG5ld2Jsb2NrID0gMCwgYWRzaXplOwotCXVpbnQzMl90IGV4dG9mZnNldCwgZ29hbF9leHRvZmZzZXQsIGVsZW4sIGdvYWxfZWxlbiA9IDA7Ci0Ja2VybmVsX2xiX2FkZHIgYmxvYywgZ29hbF9ibG9jLCBlbG9jLCBnb2FsX2Vsb2M7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKmdvYWxfYmg7CisJdWludDMyX3QgZWxlbiwgZ29hbF9lbGVuID0gMDsKKwlrZXJuZWxfbGJfYWRkciBlbG9jLCBnb2FsX2Vsb2M7CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zLCBnb2FsX2Vwb3M7CiAJaW50OF90IGV0eXBlOwogCiAJKmVyciA9IC1FTk9TUEM7CkBAIC03NzAsMTQgKzc2NiwxMiBAQAogCSAgIFdlIHN0b3JlIHRoZSBidWZmZXJfaGVhZCwgYmxvYywgYW5kIGV4dG9mZnNldCBvZiB0aGUgY3VycmVudCBjbG9zZXN0CiAJICAgbWF0Y2ggYW5kIHVzZSB0aGF0IHdoZW4gd2UgYXJlIGRvbmUuCiAJKi8KLQotCWV4dG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkpOwotCWJsb2MgPSBVREZfSV9MT0NBVElPTih0YWJsZSk7Ci0KLQlnb2FsX2JoID0gYmggPSBOVUxMOworCWVwb3Mub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSk7CisJZXBvcy5ibG9jayA9IFVERl9JX0xPQ0FUSU9OKHRhYmxlKTsKKwllcG9zLmJoID0gZ29hbF9lcG9zLmJoID0gTlVMTDsKIAogCXdoaWxlIChzcHJlYWQgJiYgKGV0eXBlID0KLQkJdWRmX25leHRfYWV4dCh0YWJsZSwgJmJsb2MsICZleHRvZmZzZXQsICZlbG9jLCAmZWxlbiwgJmJoLCAxKSkgIT0gLTEpCisJCXVkZl9uZXh0X2FleHQodGFibGUsICZlcG9zLCAmZWxvYywgJmVsZW4sIDEpKSAhPSAtMSkKIAl7CiAJCWlmIChnb2FsID49IGVsb2MubG9naWNhbEJsb2NrTnVtKQogCQl7CkBAIC03OTMsMjQgKzc4NywyNCBAQAogCQlpZiAobnNwcmVhZCA8IHNwcmVhZCkKIAkJewogCQkJc3ByZWFkID0gbnNwcmVhZDsKLQkJCWlmIChnb2FsX2JoICE9IGJoKQorCQkJaWYgKGdvYWxfZXBvcy5iaCAhPSBlcG9zLmJoKQogCQkJewotCQkJCXVkZl9yZWxlYXNlX2RhdGEoZ29hbF9iaCk7Ci0JCQkJZ29hbF9iaCA9IGJoOwotCQkJCWF0b21pY19pbmMoJmdvYWxfYmgtPmJfY291bnQpOworCQkJCWJyZWxzZShnb2FsX2Vwb3MuYmgpOworCQkJCWdvYWxfZXBvcy5iaCA9IGVwb3MuYmg7CisJCQkJZ2V0X2JoKGdvYWxfZXBvcy5iaCk7CiAJCQl9Ci0JCQlnb2FsX2Jsb2MgPSBibG9jOwotCQkJZ29hbF9leHRvZmZzZXQgPSBleHRvZmZzZXQgLSBhZHNpemU7CisJCQlnb2FsX2Vwb3MuYmxvY2sgPSBlcG9zLmJsb2NrOworCQkJZ29hbF9lcG9zLm9mZnNldCA9IGVwb3Mub2Zmc2V0IC0gYWRzaXplOwogCQkJZ29hbF9lbG9jID0gZWxvYzsKIAkJCWdvYWxfZWxlbiA9IChldHlwZSA8PCAzMCkgfCBlbGVuOwogCQl9CiAJfQogCi0JdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJYnJlbHNlKGVwb3MuYmgpOwogCiAJaWYgKHNwcmVhZCA9PSAweEZGRkZGRkZGKQogCXsKLQkJdWRmX3JlbGVhc2VfZGF0YShnb2FsX2JoKTsKKwkJYnJlbHNlKGdvYWxfZXBvcy5iaCk7CiAJCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODI2LDE3ICs4MjAsMTcgQEAKIAogCWlmIChpbm9kZSAmJiBEUVVPVF9BTExPQ19CTE9DSyhpbm9kZSwgMSkpCiAJewotCQl1ZGZfcmVsZWFzZV9kYXRhKGdvYWxfYmgpOworCQlicmVsc2UoZ29hbF9lcG9zLmJoKTsKIAkJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCQkqZXJyID0gLUVEUVVPVDsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGdvYWxfZWxlbikKLQkJdWRmX3dyaXRlX2FleHQodGFibGUsIGdvYWxfYmxvYywgJmdvYWxfZXh0b2Zmc2V0LCBnb2FsX2Vsb2MsIGdvYWxfZWxlbiwgZ29hbF9iaCwgMSk7CisJCXVkZl93cml0ZV9hZXh0KHRhYmxlLCAmZ29hbF9lcG9zLCBnb2FsX2Vsb2MsIGdvYWxfZWxlbiwgMSk7CiAJZWxzZQotCQl1ZGZfZGVsZXRlX2FleHQodGFibGUsIGdvYWxfYmxvYywgZ29hbF9leHRvZmZzZXQsIGdvYWxfZWxvYywgZ29hbF9lbGVuLCBnb2FsX2JoKTsKLQl1ZGZfcmVsZWFzZV9kYXRhKGdvYWxfYmgpOworCQl1ZGZfZGVsZXRlX2FleHQodGFibGUsIGdvYWxfZXBvcywgZ29hbF9lbG9jLCBnb2FsX2VsZW4pOworCWJyZWxzZShnb2FsX2Vwb3MuYmgpOwogCiAJaWYgKFVERl9TQl9MVklEQkgoc2IpKQogCXsKQEAgLTkyMSwxMSArOTE1LDE0IEBACiAJc3RydWN0IGlub2RlICogaW5vZGUsCiAJdWludDE2X3QgcGFydGl0aW9uLCB1aW50MzJfdCBnb2FsLCBpbnQgKmVycikKIHsKKwlpbnQgcmV0OworCiAJaWYgKFVERl9TQl9QQVJURkxBR1Moc2IsIHBhcnRpdGlvbikgJiBVREZfUEFSVF9GTEFHX1VOQUxMT0NfQklUTUFQKQogCXsKLQkJcmV0dXJuIHVkZl9iaXRtYXBfbmV3X2Jsb2NrKHNiLCBpbm9kZSwKKwkJcmV0ID0gdWRmX2JpdG1hcF9uZXdfYmxvY2soc2IsIGlub2RlLAogCQkJVURGX1NCX1BBUlRNQVBTKHNiKVtwYXJ0aXRpb25dLnNfdXNwYWNlLnNfYml0bWFwLAogCQkJcGFydGl0aW9uLCBnb2FsLCBlcnIpOworCQlyZXR1cm4gcmV0OwogCX0KIAllbHNlIGlmIChVREZfU0JfUEFSVEZMQUdTKHNiLCBwYXJ0aXRpb24pICYgVURGX1BBUlRfRkxBR19VTkFMTE9DX1RBQkxFKQogCXsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9kaXIuYyBiL2ZzL3VkZi9kaXIuYwppbmRleCAyMzkxYzkxLi5lNDVmODZiIDEwMDY0NAotLS0gYS9mcy91ZGYvZGlyLmMKKysrIGIvZnMvdWRmL2Rpci5jCkBAIC0xMTEsMTEgKzExMSwxMyBAQAogCXVpbnQxNl90IGxpdTsKIAl1aW50OF90IGxmaTsKIAlsb2ZmX3Qgc2l6ZSA9ICh1ZGZfZXh0MF9vZmZzZXQoZGlyKSArIGRpci0+aV9zaXplKSA+PiAyOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoID0gTlVMTCwgKiB0bXAsICogYmhhWzE2XTsKLQlrZXJuZWxfbGJfYWRkciBibG9jLCBlbG9jOwotCXVpbnQzMl90IGV4dG9mZnNldCwgZWxlbiwgb2Zmc2V0OworCXN0cnVjdCBidWZmZXJfaGVhZCAqdG1wLCAqYmhhWzE2XTsKKwlrZXJuZWxfbGJfYWRkciBlbG9jOworCXVpbnQzMl90IGVsZW47CisJc2VjdG9yX3Qgb2Zmc2V0OwogCWludCBpLCBudW07CiAJdW5zaWduZWQgaW50IGR0X3R5cGU7CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0geyBOVUxMLCAwLCB7MCwgMH19OwogCiAJaWYgKG5mX3BvcyA+PSBzaXplKQogCQlyZXR1cm4gMDsKQEAgLTEyNywyMyArMTI5LDIyIEBACiAJaWYgKFVERl9JX0FMTE9DVFlQRShkaXIpID09IElDQlRBR19GTEFHX0FEX0lOX0lDQikKIAkJZmliaC5zYmggPSBmaWJoLmViaCA9IE5VTEw7CiAJZWxzZSBpZiAoaW5vZGVfYm1hcChkaXIsIG5mX3BvcyA+PiAoZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gMiksCi0JCSZibG9jLCAmZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZvZmZzZXQsICZiaCkgPT0gKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQorCQkmZXBvcywgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KSA9PSAoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCiAJewotCQlvZmZzZXQgPj49IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKIAkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsIG9mZnNldCk7CiAJCWlmICgoKytvZmZzZXQgPDwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA8IGVsZW4pCiAJCXsKIAkJCWlmIChVREZfSV9BTExPQ1RZUEUoZGlyKSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJCQlleHRvZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc2hvcnRfYWQpOwogCQkJZWxzZSBpZiAoVURGX0lfQUxMT0NUWVBFKGRpcikgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJCQlleHRvZmZzZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOworCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihsb25nX2FkKTsKIAkJfQogCQllbHNlCiAJCQlvZmZzZXQgPSAwOwogCiAJCWlmICghKGZpYmguc2JoID0gZmliaC5lYmggPSB1ZGZfdHJlYWQoZGlyLT5pX3NiLCBibG9jaykpKQogCQl7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCWJyZWxzZShlcG9zLmJoKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJCkBAIC0xNzEsNyArMTcyLDcgQEAKIAl9CiAJZWxzZQogCXsKLQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCWJyZWxzZShlcG9zLmJoKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCkBAIC0xNzksMTQgKzE4MCwxNCBAQAogCXsKIAkJZmlscC0+Zl9wb3MgPSBuZl9wb3MgKyAxOwogCi0JCWZpID0gdWRmX2ZpbGVpZGVudF9yZWFkKGRpciwgJm5mX3BvcywgJmZpYmgsICZjZmksICZibG9jLCAmZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZvZmZzZXQsICZiaCk7CisJCWZpID0gdWRmX2ZpbGVpZGVudF9yZWFkKGRpciwgJm5mX3BvcywgJmZpYmgsICZjZmksICZlcG9zLCAmZWxvYywgJmVsZW4sICZvZmZzZXQpOwogCiAJCWlmICghZmkpCiAJCXsKIAkJCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguZWJoKTsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5zYmgpOwotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQkJYnJlbHNlKGZpYmguZWJoKTsKKwkJCWJyZWxzZShmaWJoLnNiaCk7CisJCQlicmVsc2UoZXBvcy5iaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC0yNDQsOSArMjQ1LDkgQEAKIAkJCWlmIChmaWxsZGlyKGRpcmVudCwgZm5hbWUsIGZsZW4sIGZpbHAtPmZfcG9zLCBpYmxvY2ssIGR0X3R5cGUpIDwgMCkKIAkJCXsKIAkJCQlpZiAoZmliaC5zYmggIT0gZmliaC5lYmgpCi0JCQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5lYmgpOwotCQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5zYmgpOwotCQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJCQlicmVsc2UoZmliaC5lYmgpOworCQkJCWJyZWxzZShmaWJoLnNiaCk7CisJCQkJYnJlbHNlKGVwb3MuYmgpOwogCSAJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtMjU1LDkgKzI1Niw5IEBACiAJZmlscC0+Zl9wb3MgPSBuZl9wb3MgKyAxOwogCiAJaWYgKGZpYmguc2JoICE9IGZpYmguZWJoKQotCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguZWJoKTsKLQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguc2JoKTsKLQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJYnJlbHNlKGZpYmguZWJoKTsKKwlicmVsc2UoZmliaC5zYmgpOworCWJyZWxzZShlcG9zLmJoKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvdWRmL2RpcmVjdG9yeS5jIGIvZnMvdWRmL2RpcmVjdG9yeS5jCmluZGV4IGZlNzUxYTIuLjE5OGNhYTMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9kaXJlY3RvcnkuYworKysgYi9mcy91ZGYvZGlyZWN0b3J5LmMKQEAgLTM2LDE0ICszNiwxNCBAQAogCiAJaWYgKCFhZCkKIAl7Ci0JCXVkZl9yZWxlYXNlX2RhdGEoKmJoKTsKKwkJYnJlbHNlKCpiaCk7CiAJCSplcnJvciA9IDE7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWlmICgqb2Zmc2V0ID09IGRpci0+aV9zYi0+c19ibG9ja3NpemUpCiAJewotCQl1ZGZfcmVsZWFzZV9kYXRhKCpiaCk7CisJCWJyZWxzZSgqYmgpOwogCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgZmVfbG9jLCArKypwb3MpOwogCQlpZiAoIWJsb2NrKQogCQkJcmV0dXJuIE5VTEw7CkBAIC01Nyw3ICs1Nyw3IEBACiAJCXJlbWFpbmRlciA9IGRpci0+aV9zYi0+c19ibG9ja3NpemUgLSBsb2Zmc2V0OwogCQltZW1jcHkoKHVpbnQ4X3QgKilhZCwgKCpiaCktPmJfZGF0YSArIGxvZmZzZXQsIHJlbWFpbmRlcik7CiAKLQkJdWRmX3JlbGVhc2VfZGF0YSgqYmgpOworCQlicmVsc2UoKmJoKTsKIAkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGZlX2xvYywgKysqcG9zKTsKIAkJaWYgKCFibG9jaykKIAkJCXJldHVybiBOVUxMOwpAQCAtNzUsOSArNzUsOSBAQAogdWRmX2ZpbGVpZGVudF9yZWFkKHN0cnVjdCBpbm9kZSAqZGlyLCBsb2ZmX3QgKm5mX3BvcywKIAlzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCAqZmliaCwKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqY2ZpLAotCWtlcm5lbF9sYl9hZGRyICpibG9jLCB1aW50MzJfdCAqZXh0b2Zmc2V0LCAKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zLAogCWtlcm5lbF9sYl9hZGRyICplbG9jLCB1aW50MzJfdCAqZWxlbiwKLQl1aW50MzJfdCAqb2Zmc2V0LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCkKKwlzZWN0b3JfdCAqb2Zmc2V0KQogewogCXN0cnVjdCBmaWxlSWRlbnREZXNjICpmaTsKIAlpbnQgaSwgbnVtLCBibG9jazsKQEAgLTEwNSwxMyArMTA1LDExIEBACiAKIAlpZiAoZmliaC0+ZW9mZnNldCA9PSBkaXItPmlfc2ItPnNfYmxvY2tzaXplKQogCXsKLQkJaW50IGxleHRvZmZzZXQgPSAqZXh0b2Zmc2V0OworCQlpbnQgbGV4dG9mZnNldCA9IGVwb3MtPm9mZnNldDsKIAotCQlpZiAodWRmX25leHRfYWV4dChkaXIsIGJsb2MsIGV4dG9mZnNldCwgZWxvYywgZWxlbiwgYmgsIDEpICE9CisJCWlmICh1ZGZfbmV4dF9hZXh0KGRpciwgZXBvcywgZWxvYywgZWxlbiwgMSkgIT0KIAkJCShFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKLQkJewogCQkJcmV0dXJuIE5VTEw7Ci0JCX0KIAogCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgKmVsb2MsICpvZmZzZXQpOwogCkBAIC0xMjAsOSArMTE4LDkgQEAKIAkJaWYgKCgqb2Zmc2V0IDw8IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPj0gKmVsZW4pCiAJCQkqb2Zmc2V0ID0gMDsKIAkJZWxzZQotCQkJKmV4dG9mZnNldCA9IGxleHRvZmZzZXQ7CisJCQllcG9zLT5vZmZzZXQgPSBsZXh0b2Zmc2V0OwogCi0JCXVkZl9yZWxlYXNlX2RhdGEoZmliaC0+c2JoKTsKKwkJYnJlbHNlKGZpYmgtPnNiaCk7CiAJCWlmICghKGZpYmgtPnNiaCA9IGZpYmgtPmViaCA9IHVkZl90cmVhZChkaXItPmlfc2IsIGJsb2NrKSkpCiAJCQlyZXR1cm4gTlVMTDsKIAkJZmliaC0+c29mZnNldCA9IGZpYmgtPmVvZmZzZXQgPSAwOwpAQCAtMTUxLDcgKzE0OSw3IEBACiAJfQogCWVsc2UgaWYgKGZpYmgtPnNiaCAhPSBmaWJoLT5lYmgpCiAJewotCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmgtPnNiaCk7CisJCWJyZWxzZShmaWJoLT5zYmgpOwogCQlmaWJoLT5zYmggPSBmaWJoLT5lYmg7CiAJfQogCkBAIC0xNjksMTMgKzE2NywxMSBAQAogCX0KIAllbHNlIGlmIChmaWJoLT5lb2Zmc2V0ID4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkKIAl7Ci0JCWludCBsZXh0b2Zmc2V0ID0gKmV4dG9mZnNldDsKKwkJaW50IGxleHRvZmZzZXQgPSBlcG9zLT5vZmZzZXQ7CiAKLQkJaWYgKHVkZl9uZXh0X2FleHQoZGlyLCBibG9jLCBleHRvZmZzZXQsIGVsb2MsIGVsZW4sIGJoLCAxKSAhPQorCQlpZiAodWRmX25leHRfYWV4dChkaXIsIGVwb3MsIGVsb2MsIGVsZW4sIDEpICE9CiAJCQkoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCi0JCXsKIAkJCXJldHVybiBOVUxMOwotCQl9CiAKIAkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsICplbG9jLCAqb2Zmc2V0KTsKIApAQCAtMTg0LDcgKzE4MCw3IEBACiAJCWlmICgoKm9mZnNldCA8PCBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpID49ICplbGVuKQogCQkJKm9mZnNldCA9IDA7CiAJCWVsc2UKLQkJCSpleHRvZmZzZXQgPSBsZXh0b2Zmc2V0OworCQkJZXBvcy0+b2Zmc2V0ID0gbGV4dG9mZnNldDsKIAogCQlmaWJoLT5zb2Zmc2V0IC09IGRpci0+aV9zYi0+c19ibG9ja3NpemU7CiAJCWZpYmgtPmVvZmZzZXQgLT0gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9maWxlLmMgYi9mcy91ZGYvZmlsZS5jCmluZGV4IDQwZDUwNDcuLjUxYjU3NjQgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9maWxlLmMKKysrIGIvZnMvdWRmL2ZpbGUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvYWlvLmg+CiAKICNpbmNsdWRlICJ1ZGZfaS5oIgogI2luY2x1ZGUgInVkZl9zYi5oIgpkaWZmIC0tZ2l0IGEvZnMvdWRmL2ZzeW5jLmMgYi9mcy91ZGYvZnN5bmMuYwppbmRleCA1ODg3ZDc4Li42ZGVkOTNlIDEwMDY0NAotLS0gYS9mcy91ZGYvZnN5bmMuYworKysgYi9mcy91ZGYvZnN5bmMuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgInVkZmRlY2wuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogc3RhdGljIGludCB1ZGZfZnN5bmNfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggYWUyMWEwZS4uMWYwMTI5NCAxMDA2NDQKLS0tIGEvZnMvdWRmL2lub2RlLmMKKysrIGIvZnMvdWRmL2lub2RlLmMKQEAgLTQ5LDEwICs0OSwxMCBAQAogc3RhdGljIG1vZGVfdCB1ZGZfY29udmVydF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZmlsZUVudHJ5ICopOwogc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogc3RhdGljIHZvaWQgdWRmX2ZpbGxfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKiwgbG9uZywgaW50ICosCitzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICppbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBpbnQgKiwKIAlsb25nICosIGludCAqKTsKLXN0YXRpYyBpbnQ4X3QgdWRmX2luc2VydF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBrZXJuZWxfbGJfYWRkciwgaW50LAotCWtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOworc3RhdGljIGludDhfdCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24sCisJa2VybmVsX2xiX2FkZHIsIHVpbnQzMl90KTsKIHN0YXRpYyB2b2lkIHVkZl9zcGxpdF9leHRlbnRzKHN0cnVjdCBpbm9kZSAqLCBpbnQgKiwgaW50LCBpbnQsCiAJa2VybmVsX2xvbmdfYWQgW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50ICopOwogc3RhdGljIHZvaWQgdWRmX3ByZWFsbG9jX2V4dGVudHMoc3RydWN0IGlub2RlICosIGludCwgaW50LApAQCAtNjEsNyArNjEsNyBAQAogCSBrZXJuZWxfbG9uZ19hZCBbRVhURU5UX01FUkdFX1NJWkVdLCBpbnQgKik7CiBzdGF0aWMgdm9pZCB1ZGZfdXBkYXRlX2V4dGVudHMoc3RydWN0IGlub2RlICosCiAJa2VybmVsX2xvbmdfYWQgW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50LCBpbnQsCi0Ja2VybmVsX2xiX2FkZHIsIHVpbnQzMl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOworCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gKik7CiBzdGF0aWMgaW50IHVkZl9nZXRfYmxvY2soc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKIAogLyoKQEAgLTE5NCwxMCArMTk0LDExIEBACiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiB1ZGZfZXhwYW5kX2Rpcl9hZGluaWNiKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqYmxvY2ssIGludCAqZXJyKQogewogCWludCBuZXdibG9jazsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiaCA9IE5VTEwsICpkYmggPSBOVUxMOwotCWtlcm5lbF9sYl9hZGRyIGJsb2MsIGVsb2M7Ci0JdWludDMyX3QgZWxlbiwgZXh0b2Zmc2V0OworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGJoID0gTlVMTDsKKwlrZXJuZWxfbGJfYWRkciBlbG9jOworCXVpbnQzMl90IGVsZW47CiAJdWludDhfdCBhbGxvY3R5cGU7CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zOwogCiAJc3RydWN0IHVkZl9maWxlaWRlbnRfYmggc2ZpYmgsIGRmaWJoOwogCWxvZmZfdCBmX3BvcyA9IHVkZl9leHQwX29mZnNldChpbm9kZSkgPj4gMjsKQEAgLTIzNywxNiArMjM4LDE2IEBACiAJbWFya19idWZmZXJfZGlydHlfaW5vZGUoZGJoLCBpbm9kZSk7CiAKIAlzZmliaC5zb2Zmc2V0ID0gc2ZpYmguZW9mZnNldCA9IChmX3BvcyAmICgoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkgPj4gMikpIDw8IDI7Ci0Jc2JoID0gc2ZpYmguc2JoID0gc2ZpYmguZWJoID0gTlVMTDsKKwlzZmliaC5zYmggPSBzZmliaC5lYmggPSBOVUxMOwogCWRmaWJoLnNvZmZzZXQgPSBkZmliaC5lb2Zmc2V0ID0gMDsKIAlkZmliaC5zYmggPSBkZmliaC5lYmggPSBkYmg7CiAJd2hpbGUgKCAoZl9wb3MgPCBzaXplKSApCiAJewogCQlVREZfSV9BTExPQ1RZUEUoaW5vZGUpID0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCOwotCQlzZmkgPSB1ZGZfZmlsZWlkZW50X3JlYWQoaW5vZGUsICZmX3BvcywgJnNmaWJoLCAmY2ZpLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJc2ZpID0gdWRmX2ZpbGVpZGVudF9yZWFkKGlub2RlLCAmZl9wb3MsICZzZmliaCwgJmNmaSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJCWlmICghc2ZpKQogCQl7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGRiaCk7CisJCQlicmVsc2UoZGJoKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJCVVERl9JX0FMTE9DVFlQRShpbm9kZSkgPSBhbGxvY3R5cGU7CkBAIC0yNTgsNyArMjU5LDcgQEAKIAkJCXNmaS0+ZmlsZUlkZW50ICsgbGUxNl90b19jcHUoc2ZpLT5sZW5ndGhPZkltcFVzZSkpKQogCQl7CiAJCQlVREZfSV9BTExPQ1RZUEUoaW5vZGUpID0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCOwotCQkJdWRmX3JlbGVhc2VfZGF0YShkYmgpOworCQkJYnJlbHNlKGRiaCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCX0KQEAgLTI2NiwxNiArMjY3LDE3IEBACiAKIAltZW1zZXQoVURGX0lfREFUQShpbm9kZSkgKyBVREZfSV9MRU5FQVRUUihpbm9kZSksIDAsIFVERl9JX0xFTkFMTE9DKGlub2RlKSk7CiAJVURGX0lfTEVOQUxMT0MoaW5vZGUpID0gMDsKLQlibG9jID0gVURGX0lfTE9DQVRJT04oaW5vZGUpOwogCWVsb2MubG9naWNhbEJsb2NrTnVtID0gKmJsb2NrOwogCWVsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gVURGX0lfTE9DQVRJT04oaW5vZGUpLnBhcnRpdGlvblJlZmVyZW5jZU51bTsKIAllbGVuID0gaW5vZGUtPmlfc2l6ZTsKIAlVREZfSV9MRU5FWFRFTlRTKGlub2RlKSA9IGVsZW47Ci0JZXh0b2Zmc2V0ID0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKTsKLQl1ZGZfYWRkX2FleHQoaW5vZGUsICZibG9jLCAmZXh0b2Zmc2V0LCBlbG9jLCBlbGVuLCAmc2JoLCAwKTsKKwllcG9zLmJoID0gTlVMTDsKKwllcG9zLmJsb2NrID0gVURGX0lfTE9DQVRJT04oaW5vZGUpOworCWVwb3Mub2Zmc2V0ID0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKTsKKwl1ZGZfYWRkX2FleHQoaW5vZGUsICZlcG9zLCBlbG9jLCBlbGVuLCAwKTsKIAkvKiBVbmlxdWVJRCBzdHVmZiAqLwogCi0JdWRmX3JlbGVhc2VfZGF0YShzYmgpOworCWJyZWxzZShlcG9zLmJoKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlyZXR1cm4gZGJoOwogfQpAQCAtMzU0LDUzICszNTYsMTUzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBpbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICogaW5vZGUsIGxvbmcgYmxvY2ssCisvKiBFeHRlbmQgdGhlIGZpbGUgYnkgJ2Jsb2NrcycgYmxvY2tzLCByZXR1cm4gdGhlIG51bWJlciBvZiBleHRlbnRzIGFkZGVkICovCitpbnQgdWRmX2V4dGVuZF9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmxhc3RfcG9zLAorCWtlcm5lbF9sb25nX2FkICpsYXN0X2V4dCwgc2VjdG9yX3QgYmxvY2tzKQoreworCXNlY3Rvcl90IGFkZDsKKwlpbnQgY291bnQgPSAwLCBmYWtlID0gIShsYXN0X2V4dC0+ZXh0TGVuZ3RoICYgVURGX0VYVEVOVF9MRU5HVEhfTUFTSyk7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCWtlcm5lbF9sYl9hZGRyIHByZWFsbG9jX2xvYyA9IHswLCAwfTsKKwlpbnQgcHJlYWxsb2NfbGVuID0gMDsKKworCS8qIFRoZSBwcmV2aW91cyBleHRlbnQgaXMgZmFrZSBhbmQgd2Ugc2hvdWxkIG5vdCBleHRlbmQgYnkgYW55dGhpbmcKKwkgKiAtIHRoZXJlJ3Mgbm90aGluZyB0byBkby4uLiAqLworCWlmICghYmxvY2tzICYmIGZha2UpCisJCXJldHVybiAwOworCS8qIFJvdW5kIHRoZSBsYXN0IGV4dGVudCB1cCB0byBhIG11bHRpcGxlIG9mIGJsb2NrIHNpemUgKi8KKwlpZiAobGFzdF9leHQtPmV4dExlbmd0aCAmIChzYi0+c19ibG9ja3NpemUgLSAxKSkgeworCQlsYXN0X2V4dC0+ZXh0TGVuZ3RoID0KKwkJCShsYXN0X2V4dC0+ZXh0TGVuZ3RoICYgVURGX0VYVEVOVF9GTEFHX01BU0spIHwKKwkJCSgoKGxhc3RfZXh0LT5leHRMZW5ndGggJiBVREZfRVhURU5UX0xFTkdUSF9NQVNLKSArCisJCQkJc2ItPnNfYmxvY2tzaXplIC0gMSkgJiB+KHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpKTsKKwkJVURGX0lfTEVORVhURU5UUyhpbm9kZSkgPQorCQkJKFVERl9JX0xFTkVYVEVOVFMoaW5vZGUpICsgc2ItPnNfYmxvY2tzaXplIC0gMSkgJgorCQkJCX4oc2ItPnNfYmxvY2tzaXplIC0gMSk7CisJfQorCS8qIExhc3QgZXh0ZW50IGFyZSBqdXN0IHByZWFsbG9jYXRlZCBibG9ja3M/ICovCisJaWYgKChsYXN0X2V4dC0+ZXh0TGVuZ3RoICYgVURGX0VYVEVOVF9GTEFHX01BU0spID09IEVYVF9OT1RfUkVDT1JERURfQUxMT0NBVEVEKSB7CisJCS8qIFNhdmUgdGhlIGV4dGVudCBzbyB0aGF0IHdlIGNhbiByZWF0dGFjaCBpdCB0byB0aGUgZW5kICovCisJCXByZWFsbG9jX2xvYyA9IGxhc3RfZXh0LT5leHRMb2NhdGlvbjsKKwkJcHJlYWxsb2NfbGVuID0gbGFzdF9leHQtPmV4dExlbmd0aDsKKwkJLyogTWFyayB0aGUgZXh0ZW50IGFzIGEgaG9sZSAqLworCQlsYXN0X2V4dC0+ZXh0TGVuZ3RoID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwKKwkJCShsYXN0X2V4dC0+ZXh0TGVuZ3RoICYgVURGX0VYVEVOVF9MRU5HVEhfTUFTSyk7CisJCWxhc3RfZXh0LT5leHRMb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0gPSAwOworICAgICAgIAkJbGFzdF9leHQtPmV4dExvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IDA7CisJfQorCS8qIENhbiB3ZSBtZXJnZSB3aXRoIHRoZSBwcmV2aW91cyBleHRlbnQ/ICovCisJaWYgKChsYXN0X2V4dC0+ZXh0TGVuZ3RoICYgVURGX0VYVEVOVF9GTEFHX01BU0spID09IEVYVF9OT1RfUkVDT1JERURfTk9UX0FMTE9DQVRFRCkgeworCQlhZGQgPSAoKDE8PDMwKSAtIHNiLT5zX2Jsb2Nrc2l6ZSAtIChsYXN0X2V4dC0+ZXh0TGVuZ3RoICYKKwkJCVVERl9FWFRFTlRfTEVOR1RIX01BU0spKSA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKKwkJaWYgKGFkZCA+IGJsb2NrcykKKwkJCWFkZCA9IGJsb2NrczsKKwkJYmxvY2tzIC09IGFkZDsKKwkJbGFzdF9leHQtPmV4dExlbmd0aCArPSBhZGQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJfQorCisJaWYgKGZha2UpIHsKKwkJdWRmX2FkZF9hZXh0KGlub2RlLCBsYXN0X3BvcywgbGFzdF9leHQtPmV4dExvY2F0aW9uLAorCQkJbGFzdF9leHQtPmV4dExlbmd0aCwgMSk7CisJCWNvdW50Kys7CisJfQorCWVsc2UKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGxhc3RfcG9zLCBsYXN0X2V4dC0+ZXh0TG9jYXRpb24sIGxhc3RfZXh0LT5leHRMZW5ndGgsIDEpOworCS8qIE1hbmFnZWQgdG8gZG8gZXZlcnl0aGluZyBuZWNlc3Nhcnk/ICovCisJaWYgKCFibG9ja3MpCisJCWdvdG8gb3V0OworCisJLyogQWxsIGZ1cnRoZXIgZXh0ZW50cyB3aWxsIGJlIE5PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEICovCisJbGFzdF9leHQtPmV4dExvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSA9IDA7CisgICAgICAgCWxhc3RfZXh0LT5leHRMb2NhdGlvbi5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPSAwOworCWFkZCA9ICgxIDw8ICgzMC1zYi0+c19ibG9ja3NpemVfYml0cykpIC0gMTsKKwlsYXN0X2V4dC0+ZXh0TGVuZ3RoID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwgKGFkZCA8PCBzYi0+c19ibG9ja3NpemVfYml0cyk7CisJLyogQ3JlYXRlIGVub3VnaCBleHRlbnRzIHRvIGNvdmVyIHRoZSB3aG9sZSBob2xlICovCisJd2hpbGUgKGJsb2NrcyA+IGFkZCkgeworCQlibG9ja3MgLT0gYWRkOworCQlpZiAodWRmX2FkZF9hZXh0KGlub2RlLCBsYXN0X3BvcywgbGFzdF9leHQtPmV4dExvY2F0aW9uLAorCQkJbGFzdF9leHQtPmV4dExlbmd0aCwgMSkgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJCWNvdW50Kys7CisJfQorCWlmIChibG9ja3MpIHsKKwkJbGFzdF9leHQtPmV4dExlbmd0aCA9IEVYVF9OT1RfUkVDT1JERURfTk9UX0FMTE9DQVRFRCB8CisJCQkoYmxvY2tzIDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKKwkJaWYgKHVkZl9hZGRfYWV4dChpbm9kZSwgbGFzdF9wb3MsIGxhc3RfZXh0LT5leHRMb2NhdGlvbiwKKwkJCWxhc3RfZXh0LT5leHRMZW5ndGgsIDEpID09IC0xKQorCQkJcmV0dXJuIC0xOworCQljb3VudCsrOworCX0KK291dDoKKwkvKiBEbyB3ZSBoYXZlIHNvbWUgcHJlYWxsb2NhdGVkIGJsb2NrcyBzYXZlZD8gKi8KKwlpZiAocHJlYWxsb2NfbGVuKSB7CisJCWlmICh1ZGZfYWRkX2FleHQoaW5vZGUsIGxhc3RfcG9zLCBwcmVhbGxvY19sb2MsIHByZWFsbG9jX2xlbiwgMSkgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJCWxhc3RfZXh0LT5leHRMb2NhdGlvbiA9IHByZWFsbG9jX2xvYzsKKwkJbGFzdF9leHQtPmV4dExlbmd0aCA9IHByZWFsbG9jX2xlbjsKKwkJY291bnQrKzsKKwl9CisJLyogbGFzdF9wb3Mgc2hvdWxkIHBvaW50IHRvIHRoZSBsYXN0IHdyaXR0ZW4gZXh0ZW50Li4uICovCisJaWYgKFVERl9JX0FMTE9DVFlQRShpbm9kZSkgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCisJCWxhc3RfcG9zLT5vZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKKwllbHNlIGlmIChVREZfSV9BTExPQ1RZUEUoaW5vZGUpID09IElDQlRBR19GTEFHX0FEX0xPTkcpCisJCWxhc3RfcG9zLT5vZmZzZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOworCWVsc2UKKwkJcmV0dXJuIC0xOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIGlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJaW50ICplcnIsIGxvbmcgKnBoeXMsIGludCAqbmV3KQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqcGJoID0gTlVMTCwgKmNiaCA9IE5VTEwsICpuYmggPSBOVUxMLCAqcmVzdWx0ID0gTlVMTDsKKwlzdGF0aWMgc2VjdG9yX3QgbGFzdF9ibG9jazsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlc3VsdCA9IE5VTEw7CiAJa2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdOwotCXVpbnQzMl90IHBleHRvZmZzZXQgPSAwLCBjZXh0b2Zmc2V0ID0gMCwgbmV4dG9mZnNldCA9IDA7CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBwcmV2X2Vwb3MsIGN1cl9lcG9zLCBuZXh0X2Vwb3M7CiAJaW50IGNvdW50ID0gMCwgc3RhcnRudW0gPSAwLCBlbmRudW0gPSAwOwotCXVpbnQzMl90IGVsZW4gPSAwOwotCWtlcm5lbF9sYl9hZGRyIGVsb2MsIHBibG9jLCBjYmxvYywgbmJsb2M7CisJdWludDMyX3QgZWxlbiA9IDAsIHRtcGVsZW47CisJa2VybmVsX2xiX2FkZHIgZWxvYywgdG1wZWxvYzsKIAlpbnQgYyA9IDE7Ci0JdWludDY0X3QgbGJjb3VudCA9IDAsIGJfb2ZmID0gMDsKLQl1aW50MzJfdCBuZXdibG9ja251bSwgbmV3YmxvY2ssIG9mZnNldCA9IDA7CisJbG9mZl90IGxiY291bnQgPSAwLCBiX29mZiA9IDA7CisJdWludDMyX3QgbmV3YmxvY2tudW0sIG5ld2Jsb2NrOworCXNlY3Rvcl90IG9mZnNldCA9IDA7CiAJaW50OF90IGV0eXBlOwogCWludCBnb2FsID0gMCwgcGdvYWwgPSBVREZfSV9MT0NBVElPTihpbm9kZSkubG9naWNhbEJsb2NrTnVtOwotCWNoYXIgbGFzdGJsb2NrID0gMDsKKwlpbnQgbGFzdGJsb2NrID0gMDsKIAotCXBleHRvZmZzZXQgPSBjZXh0b2Zmc2V0ID0gbmV4dG9mZnNldCA9IHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSk7Ci0JYl9vZmYgPSAodWludDY0X3QpYmxvY2sgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7Ci0JcGJsb2MgPSBjYmxvYyA9IG5ibG9jID0gVURGX0lfTE9DQVRJT04oaW5vZGUpOworCXByZXZfZXBvcy5vZmZzZXQgPSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpOworCXByZXZfZXBvcy5ibG9jayA9IFVERl9JX0xPQ0FUSU9OKGlub2RlKTsKKwlwcmV2X2Vwb3MuYmggPSBOVUxMOworCWN1cl9lcG9zID0gbmV4dF9lcG9zID0gcHJldl9lcG9zOworCWJfb2ZmID0gKGxvZmZfdClibG9jayA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKIAogCS8qIGZpbmQgdGhlIGV4dGVudCB3aGljaCBjb250YWlucyB0aGUgYmxvY2sgd2UgYXJlIGxvb2tpbmcgZm9yLgogICAgICAgIGFsdGVybmF0ZSBiZXR3ZWVuIGxhYXJyWzBdIGFuZCBsYWFyclsxXSBmb3IgbG9jYXRpb25zIG9mIHRoZQogICAgICAgIGN1cnJlbnQgZXh0ZW50LCBhbmQgdGhlIHByZXZpb3VzIGV4dGVudCAqLwogCWRvCiAJewotCQlpZiAocGJoICE9IGNiaCkKKwkJaWYgKHByZXZfZXBvcy5iaCAhPSBjdXJfZXBvcy5iaCkKIAkJewotCQkJdWRmX3JlbGVhc2VfZGF0YShwYmgpOwotCQkJYXRvbWljX2luYygmY2JoLT5iX2NvdW50KTsKLQkJCXBiaCA9IGNiaDsKKwkJCWJyZWxzZShwcmV2X2Vwb3MuYmgpOworCQkJZ2V0X2JoKGN1cl9lcG9zLmJoKTsKKwkJCXByZXZfZXBvcy5iaCA9IGN1cl9lcG9zLmJoOwogCQl9Ci0JCWlmIChjYmggIT0gbmJoKQorCQlpZiAoY3VyX2Vwb3MuYmggIT0gbmV4dF9lcG9zLmJoKQogCQl7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGNiaCk7Ci0JCQlhdG9taWNfaW5jKCZuYmgtPmJfY291bnQpOwotCQkJY2JoID0gbmJoOworCQkJYnJlbHNlKGN1cl9lcG9zLmJoKTsKKwkJCWdldF9iaChuZXh0X2Vwb3MuYmgpOworCQkJY3VyX2Vwb3MuYmggPSBuZXh0X2Vwb3MuYmg7CiAJCX0KIAogCQlsYmNvdW50ICs9IGVsZW47CiAKLQkJcGJsb2MgPSBjYmxvYzsKLQkJY2Jsb2MgPSBuYmxvYzsKKwkJcHJldl9lcG9zLmJsb2NrID0gY3VyX2Vwb3MuYmxvY2s7CisJCWN1cl9lcG9zLmJsb2NrID0gbmV4dF9lcG9zLmJsb2NrOwogCi0JCXBleHRvZmZzZXQgPSBjZXh0b2Zmc2V0OwotCQljZXh0b2Zmc2V0ID0gbmV4dG9mZnNldDsKKwkJcHJldl9lcG9zLm9mZnNldCA9IGN1cl9lcG9zLm9mZnNldDsKKwkJY3VyX2Vwb3Mub2Zmc2V0ID0gbmV4dF9lcG9zLm9mZnNldDsKIAotCQlpZiAoKGV0eXBlID0gdWRmX25leHRfYWV4dChpbm9kZSwgJm5ibG9jLCAmbmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmbmJoLCAxKSkgPT0gLTEpCisJCWlmICgoZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmbmV4dF9lcG9zLCAmZWxvYywgJmVsZW4sIDEpKSA9PSAtMSkKIAkJCWJyZWFrOwogCiAJCWMgPSAhYzsKQEAgLTQxOCw2ICs1MjAsMTIgQEAKIAogCWJfb2ZmIC09IGxiY291bnQ7CiAJb2Zmc2V0ID0gYl9vZmYgPj4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJLyoKKwkgKiBNb3ZlIHByZXZfZXBvcyBhbmQgY3VyX2Vwb3MgaW50byBpbmRpcmVjdCBleHRlbnQgaWYgd2UgYXJlIGF0CisJICogdGhlIHBvaW50ZXIgdG8gaXQKKwkgKi8KKwl1ZGZfbmV4dF9hZXh0KGlub2RlLCAmcHJldl9lcG9zLCAmdG1wZWxvYywgJnRtcGVsZW4sIDApOworCXVkZl9uZXh0X2FleHQoaW5vZGUsICZjdXJfZXBvcywgJnRtcGVsb2MsICZ0bXBlbGVuLCAwKTsKIAogCS8qIGlmIHRoZSBleHRlbnQgaXMgYWxsb2NhdGVkIGFuZCByZWNvcmRlZCwgcmV0dXJuIHRoZSBibG9jawogICAgICAgIGlmIHRoZSBleHRlbnQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGJsb2Nrc2l6ZSwgcm91bmQgdXAgKi8KQEAgLTQyOSw1NCArNTM3LDc3IEBACiAJCQllbGVuID0gRVhUX1JFQ09SREVEX0FMTE9DQVRFRCB8CiAJCQkJKChlbGVuICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkgJgogCQkJCX4oaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkpOwotCQkJZXR5cGUgPSB1ZGZfd3JpdGVfYWV4dChpbm9kZSwgbmJsb2MsICZjZXh0b2Zmc2V0LCBlbG9jLCBlbGVuLCBuYmgsIDEpOworCQkJZXR5cGUgPSB1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJmN1cl9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKIAkJfQotCQl1ZGZfcmVsZWFzZV9kYXRhKHBiaCk7Ci0JCXVkZl9yZWxlYXNlX2RhdGEoY2JoKTsKLQkJdWRmX3JlbGVhc2VfZGF0YShuYmgpOworCQlicmVsc2UocHJldl9lcG9zLmJoKTsKKwkJYnJlbHNlKGN1cl9lcG9zLmJoKTsKKwkJYnJlbHNlKG5leHRfZXBvcy5iaCk7CiAJCW5ld2Jsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtPmlfc2IsIGVsb2MsIG9mZnNldCk7CiAJCSpwaHlzID0gbmV3YmxvY2s7CiAJCXJldHVybiBOVUxMOwogCX0KIAorCWxhc3RfYmxvY2sgPSBibG9jazsKKwkvKiBBcmUgd2UgYmV5b25kIEVPRj8gKi8KIAlpZiAoZXR5cGUgPT0gLTEpCiAJewotCQllbmRudW0gPSBzdGFydG51bSA9ICgoY291bnQgPiAxKSA/IDEgOiBjb3VudCk7Ci0JCWlmIChsYWFycltjXS5leHRMZW5ndGggJiAoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkpCi0JCXsKLQkJCWxhYXJyW2NdLmV4dExlbmd0aCA9Ci0JCQkJKGxhYXJyW2NdLmV4dExlbmd0aCAmIFVERl9FWFRFTlRfRkxBR19NQVNLKSB8Ci0JCQkJKCgobGFhcnJbY10uZXh0TGVuZ3RoICYgVURGX0VYVEVOVF9MRU5HVEhfTUFTSykgKwotCQkJCQlpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSAmCi0JCQkJfihpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSk7Ci0JCQlVREZfSV9MRU5FWFRFTlRTKGlub2RlKSA9Ci0JCQkJKFVERl9JX0xFTkVYVEVOVFMoaW5vZGUpICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkgJgotCQkJCQl+KGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpOworCQlpbnQgcmV0OworCisJCWlmIChjb3VudCkgeworCQkJaWYgKGMpCisJCQkJbGFhcnJbMF0gPSBsYWFyclsxXTsKKwkJCXN0YXJ0bnVtID0gMTsKIAkJfQotCQljID0gIWM7Ci0JCWxhYXJyW2NdLmV4dExlbmd0aCA9IEVYVF9OT1RfUkVDT1JERURfTk9UX0FMTE9DQVRFRCB8Ci0JCQkoKG9mZnNldCArIDEpIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKLQkJbWVtc2V0KCZsYWFycltjXS5leHRMb2NhdGlvbiwgMHgwMCwgc2l6ZW9mKGtlcm5lbF9sYl9hZGRyKSk7Ci0JCWNvdW50ICsrOwotCQllbmRudW0gKys7CisJCWVsc2UgeworCQkJLyogQ3JlYXRlIGEgZmFrZSBleHRlbnQgd2hlbiB0aGVyZSdzIG5vdCBvbmUgKi8KKwkJCW1lbXNldCgmbGFhcnJbMF0uZXh0TG9jYXRpb24sIDB4MDAsIHNpemVvZihrZXJuZWxfbGJfYWRkcikpOworCQkJbGFhcnJbMF0uZXh0TGVuZ3RoID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEOworCQkJLyogV2lsbCB1ZGZfZXh0ZW5kX2ZpbGUoKSBjcmVhdGUgcmVhbCBleHRlbnQgZnJvbSBhIGZha2Ugb25lPyAqLworCQkJc3RhcnRudW0gPSAob2Zmc2V0ID4gMCk7CisJCX0KKwkJLyogQ3JlYXRlIGV4dGVudHMgZm9yIHRoZSBob2xlIGJldHdlZW4gRU9GIGFuZCBvZmZzZXQgKi8KKwkJcmV0ID0gdWRmX2V4dGVuZF9maWxlKGlub2RlLCAmcHJldl9lcG9zLCBsYWFyciwgb2Zmc2V0KTsKKwkJaWYgKHJldCA9PSAtMSkgeworCQkJYnJlbHNlKHByZXZfZXBvcy5iaCk7CisJCQlicmVsc2UoY3VyX2Vwb3MuYmgpOworCQkJYnJlbHNlKG5leHRfZXBvcy5iaCk7CisJCQkvKiBXZSBkb24ndCByZWFsbHkga25vdyB0aGUgZXJyb3IgaGVyZSBzbyB3ZSBqdXN0IG1ha2UKKwkJCSAqIHNvbWV0aGluZyB1cCAqLworCQkJKmVyciA9IC1FTk9TUEM7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQljID0gMDsKKwkJb2Zmc2V0ID0gMDsKKwkJY291bnQgKz0gcmV0OworCQkvKiBXZSBhcmUgbm90IGNvdmVyZWQgYnkgYSBwcmVhbGxvY2F0ZWQgZXh0ZW50PyAqLworCQlpZiAoKGxhYXJyWzBdLmV4dExlbmd0aCAmIFVERl9FWFRFTlRfRkxBR19NQVNLKSAhPSBFWFRfTk9UX1JFQ09SREVEX0FMTE9DQVRFRCkgeworCQkJLyogSXMgdGhlcmUgYW55IHJlYWwgZXh0ZW50PyAtIG90aGVyd2lzZSB3ZSBvdmVyd3JpdGUKKwkJCSAqIHRoZSBmYWtlIG9uZS4uLiAqLworCQkJaWYgKGNvdW50KQorCQkJCWMgPSAhYzsKKwkJCWxhYXJyW2NdLmV4dExlbmd0aCA9IEVYVF9OT1RfUkVDT1JERURfTk9UX0FMTE9DQVRFRCB8CisJCQkJaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCQkJbWVtc2V0KCZsYWFycltjXS5leHRMb2NhdGlvbiwgMHgwMCwgc2l6ZW9mKGtlcm5lbF9sYl9hZGRyKSk7CisJCQljb3VudCArKzsKKwkJCWVuZG51bSArKzsKKwkJfQorCQllbmRudW0gPSBjKzE7CiAJCWxhc3RibG9jayA9IDE7CiAJfQotCWVsc2UKKwllbHNlIHsKIAkJZW5kbnVtID0gc3RhcnRudW0gPSAoKGNvdW50ID4gMikgPyAyIDogY291bnQpOwogCi0JLyogaWYgdGhlIGN1cnJlbnQgZXh0ZW50IGlzIGluIHBvc2l0aW9uIDAsIHN3YXAgaXQgd2l0aCB0aGUgcHJldmlvdXMgKi8KLQlpZiAoIWMgJiYgY291bnQgIT0gMSkKLQl7Ci0JCWxhYXJyWzJdID0gbGFhcnJbMF07Ci0JCWxhYXJyWzBdID0gbGFhcnJbMV07Ci0JCWxhYXJyWzFdID0gbGFhcnJbMl07Ci0JCWMgPSAxOwotCX0KKwkJLyogaWYgdGhlIGN1cnJlbnQgZXh0ZW50IGlzIGluIHBvc2l0aW9uIDAsIHN3YXAgaXQgd2l0aCB0aGUgcHJldmlvdXMgKi8KKwkJaWYgKCFjICYmIGNvdW50ICE9IDEpCisJCXsKKwkJCWxhYXJyWzJdID0gbGFhcnJbMF07CisJCQlsYWFyclswXSA9IGxhYXJyWzFdOworCQkJbGFhcnJbMV0gPSBsYWFyclsyXTsKKwkJCWMgPSAxOworCQl9CiAKLQkvKiBpZiB0aGUgY3VycmVudCBibG9jayBpcyBsb2NhdGVkIGluIGEgZXh0ZW50LCByZWFkIHRoZSBuZXh0IGV4dGVudCAqLwotCWlmIChldHlwZSAhPSAtMSkKLQl7Ci0JCWlmICgoZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmbmJsb2MsICZuZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZuYmgsIDApKSAhPSAtMSkKKwkJLyogaWYgdGhlIGN1cnJlbnQgYmxvY2sgaXMgbG9jYXRlZCBpbiBhbiBleHRlbnQsIHJlYWQgdGhlIG5leHQgZXh0ZW50ICovCisJCWlmICgoZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmbmV4dF9lcG9zLCAmZWxvYywgJmVsZW4sIDApKSAhPSAtMSkKIAkJewogCQkJbGFhcnJbYysxXS5leHRMZW5ndGggPSAoZXR5cGUgPDwgMzApIHwgZWxlbjsKIAkJCWxhYXJyW2MrMV0uZXh0TG9jYXRpb24gPSBlbG9jOwpAQCAtNDg0LDExICs2MTUsMTAgQEAKIAkJCXN0YXJ0bnVtICsrOwogCQkJZW5kbnVtICsrOwogCQl9Ci0JCWVsc2UKKwkJZWxzZSB7CiAJCQlsYXN0YmxvY2sgPSAxOworCQl9CiAJfQotCXVkZl9yZWxlYXNlX2RhdGEoY2JoKTsKLQl1ZGZfcmVsZWFzZV9kYXRhKG5iaCk7CiAKIAkvKiBpZiB0aGUgY3VycmVudCBleHRlbnQgaXMgbm90IHJlY29yZGVkIGJ1dCBhbGxvY2F0ZWQsIGdldCB0aGUKIAkJYmxvY2sgaW4gdGhlIGV4dGVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXF1ZXN0ZWQgYmxvY2sgKi8KQEAgLTUwOCw3ICs2MzgsNyBAQAogCQlpZiAoIShuZXdibG9ja251bSA9IHVkZl9uZXdfYmxvY2soaW5vZGUtPmlfc2IsIGlub2RlLAogCQkJVURGX0lfTE9DQVRJT04oaW5vZGUpLnBhcnRpdGlvblJlZmVyZW5jZU51bSwgZ29hbCwgZXJyKSkpCiAJCXsKLQkJCXVkZl9yZWxlYXNlX2RhdGEocGJoKTsKKwkJCWJyZWxzZShwcmV2X2Vwb3MuYmgpOwogCQkJKmVyciA9IC1FTk9TUEM7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtNTI5LDExICs2NTksMTEgQEAKIAl1ZGZfbWVyZ2VfZXh0ZW50cyhpbm9kZSwgbGFhcnIsICZlbmRudW0pOwogCiAJLyogd3JpdGUgYmFjayB0aGUgbmV3IGV4dGVudHMsIGluc2VydGluZyBuZXcgZXh0ZW50cyBpZiB0aGUgbmV3IG51bWJlcgotICAgICAgIG9mIGV4dGVudHMgaXMgZ3JlYXRlciB0aGFuIHRoZSBvbGQgbnVtYmVyLCBhbmQgZGVsZXRpbmcgZXh0ZW50cyBpZgotICAgICAgIHRoZSBuZXcgbnVtYmVyIG9mIGV4dGVudHMgaXMgbGVzcyB0aGFuIHRoZSBvbGQgbnVtYmVyICovCi0JdWRmX3VwZGF0ZV9leHRlbnRzKGlub2RlLCBsYWFyciwgc3RhcnRudW0sIGVuZG51bSwgcGJsb2MsIHBleHRvZmZzZXQsICZwYmgpOworCW9mIGV4dGVudHMgaXMgZ3JlYXRlciB0aGFuIHRoZSBvbGQgbnVtYmVyLCBhbmQgZGVsZXRpbmcgZXh0ZW50cyBpZgorCXRoZSBuZXcgbnVtYmVyIG9mIGV4dGVudHMgaXMgbGVzcyB0aGFuIHRoZSBvbGQgbnVtYmVyICovCisJdWRmX3VwZGF0ZV9leHRlbnRzKGlub2RlLCBsYWFyciwgc3RhcnRudW0sIGVuZG51bSwgJnByZXZfZXBvcyk7CiAKLQl1ZGZfcmVsZWFzZV9kYXRhKHBiaCk7CisJYnJlbHNlKHByZXZfZXBvcy5iaCk7CiAKIAlpZiAoIShuZXdibG9jayA9IHVkZl9nZXRfcGJsb2NrKGlub2RlLT5pX3NiLCBuZXdibG9ja251bSwKIAkJVURGX0lfTE9DQVRJT04oaW5vZGUpLnBhcnRpdGlvblJlZmVyZW5jZU51bSwgMCkpKQpAQCAtNzk1LDcgKzkyNSw3IEBACiAKIHN0YXRpYyB2b2lkIHVkZl91cGRhdGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCWtlcm5lbF9sb25nX2FkIGxhYXJyW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50IHN0YXJ0bnVtLCBpbnQgZW5kbnVtLAotCWtlcm5lbF9sYl9hZGRyIHBibG9jLCB1aW50MzJfdCBwZXh0b2Zmc2V0LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwYmgpCisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcykKIHsKIAlpbnQgc3RhcnQgPSAwLCBpOwogCWtlcm5lbF9sYl9hZGRyIHRtcGxvYzsKQEAgLTgwNCwyOCArOTM0LDI2IEBACiAJaWYgKHN0YXJ0bnVtID4gZW5kbnVtKQogCXsKIAkJZm9yIChpPTA7IGk8KHN0YXJ0bnVtLWVuZG51bSk7IGkrKykKLQkJewotCQkJdWRmX2RlbGV0ZV9hZXh0KGlub2RlLCBwYmxvYywgcGV4dG9mZnNldCwgbGFhcnJbaV0uZXh0TG9jYXRpb24sCi0JCQkJbGFhcnJbaV0uZXh0TGVuZ3RoLCAqcGJoKTsKLQkJfQorCQkJdWRmX2RlbGV0ZV9hZXh0KGlub2RlLCAqZXBvcywgbGFhcnJbaV0uZXh0TG9jYXRpb24sCisJCQkJbGFhcnJbaV0uZXh0TGVuZ3RoKTsKIAl9CiAJZWxzZSBpZiAoc3RhcnRudW0gPCBlbmRudW0pCiAJewogCQlmb3IgKGk9MDsgaTwoZW5kbnVtLXN0YXJ0bnVtKTsgaSsrKQogCQl7Ci0JCQl1ZGZfaW5zZXJ0X2FleHQoaW5vZGUsIHBibG9jLCBwZXh0b2Zmc2V0LCBsYWFycltpXS5leHRMb2NhdGlvbiwKLQkJCQlsYWFycltpXS5leHRMZW5ndGgsICpwYmgpOwotCQkJdWRmX25leHRfYWV4dChpbm9kZSwgJnBibG9jLCAmcGV4dG9mZnNldCwgJmxhYXJyW2ldLmV4dExvY2F0aW9uLAotCQkJCSZsYWFycltpXS5leHRMZW5ndGgsIHBiaCwgMSk7CisJCQl1ZGZfaW5zZXJ0X2FleHQoaW5vZGUsICplcG9zLCBsYWFycltpXS5leHRMb2NhdGlvbiwKKwkJCQlsYWFycltpXS5leHRMZW5ndGgpOworCQkJdWRmX25leHRfYWV4dChpbm9kZSwgZXBvcywgJmxhYXJyW2ldLmV4dExvY2F0aW9uLAorCQkJCSZsYWFycltpXS5leHRMZW5ndGgsIDEpOwogCQkJc3RhcnQgKys7CiAJCX0KIAl9CiAKIAlmb3IgKGk9c3RhcnQ7IGk8ZW5kbnVtOyBpKyspCiAJewotCQl1ZGZfbmV4dF9hZXh0KGlub2RlLCAmcGJsb2MsICZwZXh0b2Zmc2V0LCAmdG1wbG9jLCAmdG1wbGVuLCBwYmgsIDApOwotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgcGJsb2MsICZwZXh0b2Zmc2V0LCBsYWFycltpXS5leHRMb2NhdGlvbiwKLQkJCWxhYXJyW2ldLmV4dExlbmd0aCwgKnBiaCwgMSk7CisJCXVkZl9uZXh0X2FleHQoaW5vZGUsIGVwb3MsICZ0bXBsb2MsICZ0bXBsZW4sIDApOworCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgZXBvcywgbGFhcnJbaV0uZXh0TG9jYXRpb24sCisJCQlsYWFycltpXS5leHRMZW5ndGgsIDEpOwogCX0KIH0KIApAQCAtOTMxLDcgKzEwNTksNyBAQAogCXsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1ZGY6IHVkZl9yZWFkX2lub2RlKGlubyAlbGQpIGZhaWxlZCBpZGVudD0lZFxuIiwKIAkJCWlub2RlLT5pX2lubywgaWRlbnQpOwotCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJYnJlbHNlKGJoKTsKIAkJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwogCQlyZXR1cm47CiAJfQpAQCAtOTYwLDM1ICsxMDg4LDM2IEBACiAJCQkJCQlpZGVudCA9PSBUQUdfSURFTlRfRUZFKQogCQkJCQl7CiAJCQkJCQltZW1jcHkoJlVERl9JX0xPQ0FUSU9OKGlub2RlKSwgJmxvYywgc2l6ZW9mKGtlcm5lbF9sYl9hZGRyKSk7Ci0JCQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKLQkJCQkJCXVkZl9yZWxlYXNlX2RhdGEoaWJoKTsKLQkJCQkJCXVkZl9yZWxlYXNlX2RhdGEobmJoKTsKKwkJCQkJCWJyZWxzZShiaCk7CisJCQkJCQlicmVsc2UoaWJoKTsKKwkJCQkJCWJyZWxzZShuYmgpOwogCQkJCQkJX191ZGZfcmVhZF9pbm9kZShpbm9kZSk7CiAJCQkJCQlyZXR1cm47CiAJCQkJCX0KIAkJCQkJZWxzZQogCQkJCQl7Ci0JCQkJCQl1ZGZfcmVsZWFzZV9kYXRhKG5iaCk7Ci0JCQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGliaCk7CisJCQkJCQlicmVsc2UobmJoKTsKKwkJCQkJCWJyZWxzZShpYmgpOwogCQkJCQl9CiAJCQkJfQogCQkJCWVsc2UKLQkJCQkJdWRmX3JlbGVhc2VfZGF0YShpYmgpOworCQkJCQlicmVsc2UoaWJoKTsKIAkJCX0KIAkJfQogCQllbHNlCi0JCQl1ZGZfcmVsZWFzZV9kYXRhKGliaCk7CisJCQlicmVsc2UoaWJoKTsKIAl9CiAJZWxzZSBpZiAobGUxNl90b19jcHUoZmUtPmljYlRhZy5zdHJhdGVneVR5cGUpICE9IDQpCiAJewogCQlwcmludGsoS0VSTl9FUlIgInVkZjogdW5zdXBwb3J0ZWQgc3RyYXRlZ3kgdHlwZTogJWRcbiIsCiAJCQlsZTE2X3RvX2NwdShmZS0+aWNiVGFnLnN0cmF0ZWd5VHlwZSkpOwotCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJYnJlbHNlKGJoKTsKIAkJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwogCQlyZXR1cm47CiAJfQogCXVkZl9maWxsX2lub2RlKGlub2RlLCBiaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShiaCk7CisKKwlicmVsc2UoYmgpOwogfQogCiBzdGF0aWMgdm9pZCB1ZGZfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQpAQCAtMTMzMSw3ICsxNDYwLDcgQEAKIAkJCQl1c2UtPmRlc2NUYWcudGFnQ2hlY2tzdW0gKz0gKCh1aW50OF90ICopJih1c2UtPmRlc2NUYWcpKVtpXTsKIAogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQlicmVsc2UoYmgpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMTUyMCw3ICsxNjQ5LDcgQEAKIAkJCWVyciA9IC1FSU87CiAJCX0KIAl9Ci0JdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJYnJlbHNlKGJoKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNTU2LDggKzE2ODUsOCBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQ4X3QgdWRmX2FkZF9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGtlcm5lbF9sYl9hZGRyICpibG9jLCBpbnQgKmV4dG9mZnNldCwKLQlrZXJuZWxfbGJfYWRkciBlbG9jLCB1aW50MzJfdCBlbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwgaW50IGluYykKK2ludDhfdCB1ZGZfYWRkX2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcywKKwlrZXJuZWxfbGJfYWRkciBlbG9jLCB1aW50MzJfdCBlbGVuLCBpbnQgaW5jKQogewogCWludCBhZHNpemU7CiAJc2hvcnRfYWQgKnNhZCA9IE5VTEw7CkBAIC0xNTY2LDEwICsxNjk1LDEwIEBACiAJaW50OF90IGV0eXBlOwogCXVpbnQ4X3QgKnB0cjsKIAotCWlmICghKmJoKQotCQlwdHIgPSBVREZfSV9EQVRBKGlub2RlKSArICpleHRvZmZzZXQgLSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpICsgVURGX0lfTEVORUFUVFIoaW5vZGUpOworCWlmICghZXBvcy0+YmgpCisJCXB0ciA9IFVERl9JX0RBVEEoaW5vZGUpICsgZXBvcy0+b2Zmc2V0IC0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSArIFVERl9JX0xFTkVBVFRSKGlub2RlKTsKIAllbHNlCi0JCXB0ciA9ICgqYmgpLT5iX2RhdGEgKyAqZXh0b2Zmc2V0OworCQlwdHIgPSBlcG9zLT5iaC0+Yl9kYXRhICsgZXBvcy0+b2Zmc2V0OwogCiAJaWYgKFVERl9JX0FMTE9DVFlQRShpbm9kZSkgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCiAJCWFkc2l6ZSA9IHNpemVvZihzaG9ydF9hZCk7CkBAIC0xNTc4LDIwICsxNzA3LDIwIEBACiAJZWxzZQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoKmV4dG9mZnNldCArICgyICogYWRzaXplKSA+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkKKwlpZiAoZXBvcy0+b2Zmc2V0ICsgKDIgKiBhZHNpemUpID4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKQogCXsKIAkJY2hhciAqc3B0ciwgKmRwdHI7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqbmJoOwogCQlpbnQgZXJyLCBsb2Zmc2V0OwotCQlrZXJuZWxfbGJfYWRkciBvYmxvYyA9ICpibG9jOworCQlrZXJuZWxfbGJfYWRkciBvYmxvYyA9IGVwb3MtPmJsb2NrOwogCi0JCWlmICghKGJsb2MtPmxvZ2ljYWxCbG9ja051bSA9IHVkZl9uZXdfYmxvY2soaW5vZGUtPmlfc2IsIE5VTEwsCisJCWlmICghKGVwb3MtPmJsb2NrLmxvZ2ljYWxCbG9ja051bSA9IHVkZl9uZXdfYmxvY2soaW5vZGUtPmlfc2IsIE5VTEwsCiAJCQlvYmxvYy5wYXJ0aXRpb25SZWZlcmVuY2VOdW0sIG9ibG9jLmxvZ2ljYWxCbG9ja051bSwgJmVycikpKQogCQl7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJaWYgKCEobmJoID0gdWRmX3RnZXRibGsoaW5vZGUtPmlfc2IsIHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLAotCQkJKmJsb2MsIDApKSkpCisJCQllcG9zLT5ibG9jaywgMCkpKSkKIAkJewogCQkJcmV0dXJuIC0xOwogCQl9CkBAIC0xNjA0LDI1ICsxNzMzLDI1IEBACiAJCWFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKG5iaC0+Yl9kYXRhKTsKIAkJaWYgKCFVREZfUVVFUllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfU1RSSUNUKSkKIAkJCWFlZC0+cHJldmlvdXNBbGxvY0V4dExvY2F0aW9uID0gY3B1X3RvX2xlMzIob2Jsb2MubG9naWNhbEJsb2NrTnVtKTsKLQkJaWYgKCpleHRvZmZzZXQgKyBhZHNpemUgPiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpCisJCWlmIChlcG9zLT5vZmZzZXQgKyBhZHNpemUgPiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpCiAJCXsKLQkJCWxvZmZzZXQgPSAqZXh0b2Zmc2V0OworCQkJbG9mZnNldCA9IGVwb3MtPm9mZnNldDsKIAkJCWFlZC0+bGVuZ3RoQWxsb2NEZXNjcyA9IGNwdV90b19sZTMyKGFkc2l6ZSk7CiAJCQlzcHRyID0gcHRyIC0gYWRzaXplOwogCQkJZHB0ciA9IG5iaC0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpOwogCQkJbWVtY3B5KGRwdHIsIHNwdHIsIGFkc2l6ZSk7Ci0JCQkqZXh0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpICsgYWRzaXplOworCQkJZXBvcy0+b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpICsgYWRzaXplOwogCQl9CiAJCWVsc2UKIAkJewotCQkJbG9mZnNldCA9ICpleHRvZmZzZXQgKyBhZHNpemU7CisJCQlsb2Zmc2V0ID0gZXBvcy0+b2Zmc2V0ICsgYWRzaXplOwogCQkJYWVkLT5sZW5ndGhBbGxvY0Rlc2NzID0gY3B1X3RvX2xlMzIoMCk7CiAJCQlzcHRyID0gcHRyOwotCQkJKmV4dG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKTsKKwkJCWVwb3MtPm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKTsKIAotCQkJaWYgKCpiaCkKKwkJCWlmIChlcG9zLT5iaCkKIAkJCXsKLQkJCQlhZWQgPSAoc3RydWN0IGFsbG9jRXh0RGVzYyAqKSgqYmgpLT5iX2RhdGE7CisJCQkJYWVkID0gKHN0cnVjdCBhbGxvY0V4dERlc2MgKillcG9zLT5iaC0+Yl9kYXRhOwogCQkJCWFlZC0+bGVuZ3RoQWxsb2NEZXNjcyA9CiAJCQkJCWNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGFlZC0+bGVuZ3RoQWxsb2NEZXNjcykgKyBhZHNpemUpOwogCQkJfQpAQCAtMTYzNCwxMCArMTc2MywxMCBAQAogCQl9CiAJCWlmIChVREZfU0JfVURGUkVWKGlub2RlLT5pX3NiKSA+PSAweDAyMDApCiAJCQl1ZGZfbmV3X3RhZyhuYmgtPmJfZGF0YSwgVEFHX0lERU5UX0FFRCwgMywgMSwKLQkJCQlibG9jLT5sb2dpY2FsQmxvY2tOdW0sIHNpemVvZih0YWcpKTsKKwkJCQllcG9zLT5ibG9jay5sb2dpY2FsQmxvY2tOdW0sIHNpemVvZih0YWcpKTsKIAkJZWxzZQogCQkJdWRmX25ld190YWcobmJoLT5iX2RhdGEsIFRBR19JREVOVF9BRUQsIDIsIDEsCi0JCQkJYmxvYy0+bG9naWNhbEJsb2NrTnVtLCBzaXplb2YodGFnKSk7CisJCQkJZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtLCBzaXplb2YodGFnKSk7CiAJCXN3aXRjaCAoVURGX0lfQUxMT0NUWVBFKGlub2RlKSkKIAkJewogCQkJY2FzZSBJQ0JUQUdfRkxBR19BRF9TSE9SVDoKQEAgLTE2NDYsNyArMTc3NSw3IEBACiAJCQkJc2FkLT5leHRMZW5ndGggPSBjcHVfdG9fbGUzMigKIAkJCQkJRVhUX05FWFRfRVhURU5UX0FMTE9DREVDUyB8CiAJCQkJCWlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7Ci0JCQkJc2FkLT5leHRQb3NpdGlvbiA9IGNwdV90b19sZTMyKGJsb2MtPmxvZ2ljYWxCbG9ja051bSk7CisJCQkJc2FkLT5leHRQb3NpdGlvbiA9IGNwdV90b19sZTMyKGVwb3MtPmJsb2NrLmxvZ2ljYWxCbG9ja051bSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQljYXNlIElDQlRBR19GTEFHX0FEX0xPTkc6CkBAIC0xNjU1LDYwICsxNzg0LDU3IEBACiAJCQkJbGFkLT5leHRMZW5ndGggPSBjcHVfdG9fbGUzMigKIAkJCQkJRVhUX05FWFRfRVhURU5UX0FMTE9DREVDUyB8CiAJCQkJCWlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7Ci0JCQkJbGFkLT5leHRMb2NhdGlvbiA9IGNwdV90b19sZWxiKCpibG9jKTsKKwkJCQlsYWQtPmV4dExvY2F0aW9uID0gY3B1X3RvX2xlbGIoZXBvcy0+YmxvY2spOwogCQkJCW1lbXNldChsYWQtPmltcFVzZSwgMHgwMCwgc2l6ZW9mKGxhZC0+aW1wVXNlKSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJaWYgKCpiaCkKKwkJaWYgKGVwb3MtPmJoKQogCQl7CiAJCQlpZiAoIVVERl9RVUVSWV9GTEFHKGlub2RlLT5pX3NiLCBVREZfRkxBR19TVFJJQ1QpIHx8IFVERl9TQl9VREZSRVYoaW5vZGUtPmlfc2IpID49IDB4MDIwMSkKLQkJCQl1ZGZfdXBkYXRlX3RhZygoKmJoKS0+Yl9kYXRhLCBsb2Zmc2V0KTsKKwkJCQl1ZGZfdXBkYXRlX3RhZyhlcG9zLT5iaC0+Yl9kYXRhLCBsb2Zmc2V0KTsKIAkJCWVsc2UKLQkJCQl1ZGZfdXBkYXRlX3RhZygoKmJoKS0+Yl9kYXRhLCBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpOwotCQkJbWFya19idWZmZXJfZGlydHlfaW5vZGUoKmJoLCBpbm9kZSk7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKCpiaCk7CisJCQkJdWRmX3VwZGF0ZV90YWcoZXBvcy0+YmgtPmJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpKTsKKwkJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKGVwb3MtPmJoLCBpbm9kZSk7CisJCQlicmVsc2UoZXBvcy0+YmgpOwogCQl9CiAJCWVsc2UKIAkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQkqYmggPSBuYmg7CisJCWVwb3MtPmJoID0gbmJoOwogCX0KIAotCWV0eXBlID0gdWRmX3dyaXRlX2FleHQoaW5vZGUsICpibG9jLCBleHRvZmZzZXQsIGVsb2MsIGVsZW4sICpiaCwgaW5jKTsKKwlldHlwZSA9IHVkZl93cml0ZV9hZXh0KGlub2RlLCBlcG9zLCBlbG9jLCBlbGVuLCBpbmMpOwogCi0JaWYgKCEqYmgpCisJaWYgKCFlcG9zLT5iaCkKIAl7CiAJCVVERl9JX0xFTkFMTE9DKGlub2RlKSArPSBhZHNpemU7CiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCX0KIAllbHNlCiAJewotCQlhZWQgPSAoc3RydWN0IGFsbG9jRXh0RGVzYyAqKSgqYmgpLT5iX2RhdGE7CisJCWFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopZXBvcy0+YmgtPmJfZGF0YTsKIAkJYWVkLT5sZW5ndGhBbGxvY0Rlc2NzID0KIAkJCWNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGFlZC0+bGVuZ3RoQWxsb2NEZXNjcykgKyBhZHNpemUpOwogCQlpZiAoIVVERl9RVUVSWV9GTEFHKGlub2RlLT5pX3NiLCBVREZfRkxBR19TVFJJQ1QpIHx8IFVERl9TQl9VREZSRVYoaW5vZGUtPmlfc2IpID49IDB4MDIwMSkKLQkJCXVkZl91cGRhdGVfdGFnKCgqYmgpLT5iX2RhdGEsICpleHRvZmZzZXQgKyAoaW5jID8gMCA6IGFkc2l6ZSkpOworCQkJdWRmX3VwZGF0ZV90YWcoZXBvcy0+YmgtPmJfZGF0YSwgZXBvcy0+b2Zmc2V0ICsgKGluYyA/IDAgOiBhZHNpemUpKTsKIAkJZWxzZQotCQkJdWRmX3VwZGF0ZV90YWcoKCpiaCktPmJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpKTsKLQkJbWFya19idWZmZXJfZGlydHlfaW5vZGUoKmJoLCBpbm9kZSk7CisJCQl1ZGZfdXBkYXRlX3RhZyhlcG9zLT5iaC0+Yl9kYXRhLCBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpOworCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShlcG9zLT5iaCwgaW5vZGUpOwogCX0KIAogCXJldHVybiBldHlwZTsKIH0KIAotaW50OF90IHVkZl93cml0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGtlcm5lbF9sYl9hZGRyIGJsb2MsIGludCAqZXh0b2Zmc2V0LAotICAgIGtlcm5lbF9sYl9hZGRyIGVsb2MsIHVpbnQzMl90IGVsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBpbmMpCitpbnQ4X3QgdWRmX3dyaXRlX2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcywKKyAgICBrZXJuZWxfbGJfYWRkciBlbG9jLCB1aW50MzJfdCBlbGVuLCBpbnQgaW5jKQogewogCWludCBhZHNpemU7CiAJdWludDhfdCAqcHRyOwogCi0JaWYgKCFiaCkKLQkJcHRyID0gVURGX0lfREFUQShpbm9kZSkgKyAqZXh0b2Zmc2V0IC0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSArIFVERl9JX0xFTkVBVFRSKGlub2RlKTsKKwlpZiAoIWVwb3MtPmJoKQorCQlwdHIgPSBVREZfSV9EQVRBKGlub2RlKSArIGVwb3MtPm9mZnNldCAtIHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSkgKyBVREZfSV9MRU5FQVRUUihpbm9kZSk7CiAJZWxzZQotCXsKLQkJcHRyID0gYmgtPmJfZGF0YSArICpleHRvZmZzZXQ7Ci0JCWF0b21pY19pbmMoJmJoLT5iX2NvdW50KTsKLQl9CisJCXB0ciA9IGVwb3MtPmJoLT5iX2RhdGEgKyBlcG9zLT5vZmZzZXQ7CiAKIAlzd2l0Y2ggKFVERl9JX0FMTE9DVFlQRShpbm9kZSkpCiAJewpAQCAtMTczMyw0MCArMTg1OSwzOSBAQAogCQkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChiaCkKKwlpZiAoZXBvcy0+YmgpCiAJewogCQlpZiAoIVVERl9RVUVSWV9GTEFHKGlub2RlLT5pX3NiLCBVREZfRkxBR19TVFJJQ1QpIHx8IFVERl9TQl9VREZSRVYoaW5vZGUtPmlfc2IpID49IDB4MDIwMSkKIAkJewotCQkJc3RydWN0IGFsbG9jRXh0RGVzYyAqYWVkID0gKHN0cnVjdCBhbGxvY0V4dERlc2MgKikoYmgpLT5iX2RhdGE7Ci0JCQl1ZGZfdXBkYXRlX3RhZygoYmgpLT5iX2RhdGEsCisJCQlzdHJ1Y3QgYWxsb2NFeHREZXNjICphZWQgPSAoc3RydWN0IGFsbG9jRXh0RGVzYyAqKWVwb3MtPmJoLT5iX2RhdGE7CisJCQl1ZGZfdXBkYXRlX3RhZyhlcG9zLT5iaC0+Yl9kYXRhLAogCQkJCWxlMzJfdG9fY3B1KGFlZC0+bGVuZ3RoQWxsb2NEZXNjcykgKyBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpOwogCQl9Ci0JCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKGJoLCBpbm9kZSk7Ci0JCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShlcG9zLT5iaCwgaW5vZGUpOwogCX0KIAllbHNlCiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCiAJaWYgKGluYykKLQkJKmV4dG9mZnNldCArPSBhZHNpemU7CisJCWVwb3MtPm9mZnNldCArPSBhZHNpemU7CiAJcmV0dXJuIChlbGVuID4+IDMwKTsKIH0KIAotaW50OF90IHVkZl9uZXh0X2FleHQoc3RydWN0IGlub2RlICppbm9kZSwga2VybmVsX2xiX2FkZHIgKmJsb2MsIGludCAqZXh0b2Zmc2V0LAotCWtlcm5lbF9sYl9hZGRyICplbG9jLCB1aW50MzJfdCAqZWxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsIGludCBpbmMpCitpbnQ4X3QgdWRmX25leHRfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zLAorCWtlcm5lbF9sYl9hZGRyICplbG9jLCB1aW50MzJfdCAqZWxlbiwgaW50IGluYykKIHsKIAlpbnQ4X3QgZXR5cGU7CiAKLQl3aGlsZSAoKGV0eXBlID0gdWRmX2N1cnJlbnRfYWV4dChpbm9kZSwgYmxvYywgZXh0b2Zmc2V0LCBlbG9jLCBlbGVuLCBiaCwgaW5jKSkgPT0KKwl3aGlsZSAoKGV0eXBlID0gdWRmX2N1cnJlbnRfYWV4dChpbm9kZSwgZXBvcywgZWxvYywgZWxlbiwgaW5jKSkgPT0KIAkJKEVYVF9ORVhUX0VYVEVOVF9BTExPQ0RFQ1MgPj4gMzApKQogCXsKLQkJKmJsb2MgPSAqZWxvYzsKLQkJKmV4dG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKTsKLQkJdWRmX3JlbGVhc2VfZGF0YSgqYmgpOwotCQlpZiAoISgqYmggPSB1ZGZfdHJlYWQoaW5vZGUtPmlfc2IsIHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLCAqYmxvYywgMCkpKSkKKwkJZXBvcy0+YmxvY2sgPSAqZWxvYzsKKwkJZXBvcy0+b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpOworCQlicmVsc2UoZXBvcy0+YmgpOworCQlpZiAoIShlcG9zLT5iaCA9IHVkZl90cmVhZChpbm9kZS0+aV9zYiwgdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtPmlfc2IsIGVwb3MtPmJsb2NrLCAwKSkpKQogCQl7CiAJCQl1ZGZfZGVidWcoInJlYWRpbmcgYmxvY2sgJWQgZmFpbGVkIVxuIiwKLQkJCQl1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgKmJsb2MsIDApKTsKKwkJCQl1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgZXBvcy0+YmxvY2ssIDApKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0KQEAgLTE3NzQsMjYgKzE4OTksMjYgQEAKIAlyZXR1cm4gZXR5cGU7CiB9CiAKLWludDhfdCB1ZGZfY3VycmVudF9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGtlcm5lbF9sYl9hZGRyICpibG9jLCBpbnQgKmV4dG9mZnNldCwKLQlrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLCBpbnQgaW5jKQoraW50OF90IHVkZl9jdXJyZW50X2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcywKKwlrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sIGludCBpbmMpCiB7CiAJaW50IGFsZW47CiAJaW50OF90IGV0eXBlOwogCXVpbnQ4X3QgKnB0cjsKIAotCWlmICghKmJoKQorCWlmICghZXBvcy0+YmgpCiAJewotCQlpZiAoISgqZXh0b2Zmc2V0KSkKLQkJCSpleHRvZmZzZXQgPSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpOwotCQlwdHIgPSBVREZfSV9EQVRBKGlub2RlKSArICpleHRvZmZzZXQgLSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpICsgVURGX0lfTEVORUFUVFIoaW5vZGUpOworCQlpZiAoIWVwb3MtPm9mZnNldCkKKwkJCWVwb3MtPm9mZnNldCA9IHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSk7CisJCXB0ciA9IFVERl9JX0RBVEEoaW5vZGUpICsgZXBvcy0+b2Zmc2V0IC0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSArIFVERl9JX0xFTkVBVFRSKGlub2RlKTsKIAkJYWxlbiA9IHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSkgKyBVREZfSV9MRU5BTExPQyhpbm9kZSk7CiAJfQogCWVsc2UKIAl7Ci0JCWlmICghKCpleHRvZmZzZXQpKQotCQkJKmV4dG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKTsKLQkJcHRyID0gKCpiaCktPmJfZGF0YSArICpleHRvZmZzZXQ7Ci0JCWFsZW4gPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykgKyBsZTMyX3RvX2NwdSgoKHN0cnVjdCBhbGxvY0V4dERlc2MgKikoKmJoKS0+Yl9kYXRhKS0+bGVuZ3RoQWxsb2NEZXNjcyk7CisJCWlmICghZXBvcy0+b2Zmc2V0KQorCQkJZXBvcy0+b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpOworCQlwdHIgPSBlcG9zLT5iaC0+Yl9kYXRhICsgZXBvcy0+b2Zmc2V0OworCQlhbGVuID0gc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpICsgbGUzMl90b19jcHUoKChzdHJ1Y3QgYWxsb2NFeHREZXNjICopZXBvcy0+YmgtPmJfZGF0YSktPmxlbmd0aEFsbG9jRGVzY3MpOwogCX0KIAogCXN3aXRjaCAoVURGX0lfQUxMT0NUWVBFKGlub2RlKSkKQEAgLTE4MDIsNyArMTkyNyw3IEBACiAJCXsKIAkJCXNob3J0X2FkICpzYWQ7CiAKLQkJCWlmICghKHNhZCA9IHVkZl9nZXRfZmlsZXNob3J0YWQocHRyLCBhbGVuLCBleHRvZmZzZXQsIGluYykpKQorCQkJaWYgKCEoc2FkID0gdWRmX2dldF9maWxlc2hvcnRhZChwdHIsIGFsZW4sICZlcG9zLT5vZmZzZXQsIGluYykpKQogCQkJCXJldHVybiAtMTsKIAogCQkJZXR5cGUgPSBsZTMyX3RvX2NwdShzYWQtPmV4dExlbmd0aCkgPj4gMzA7CkBAIC0xODE1LDcgKzE5NDAsNyBAQAogCQl7CiAJCQlsb25nX2FkICpsYWQ7CiAKLQkJCWlmICghKGxhZCA9IHVkZl9nZXRfZmlsZWxvbmdhZChwdHIsIGFsZW4sIGV4dG9mZnNldCwgaW5jKSkpCisJCQlpZiAoIShsYWQgPSB1ZGZfZ2V0X2ZpbGVsb25nYWQocHRyLCBhbGVuLCAmZXBvcy0+b2Zmc2V0LCBpbmMpKSkKIAkJCQlyZXR1cm4gLTE7CiAKIAkJCWV0eXBlID0gbGUzMl90b19jcHUobGFkLT5leHRMZW5ndGgpID4+IDMwOwpAQCAtMTgzNCw0MSArMTk1OSw0MCBAQAogfQogCiBzdGF0aWMgaW50OF90Ci11ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICppbm9kZSwga2VybmVsX2xiX2FkZHIgYmxvYywgaW50IGV4dG9mZnNldCwKLQkJa2VybmVsX2xiX2FkZHIgbmVsb2MsIHVpbnQzMl90IG5lbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQordWRmX2luc2VydF9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcywKKwkJa2VybmVsX2xiX2FkZHIgbmVsb2MsIHVpbnQzMl90IG5lbGVuKQogewogCWtlcm5lbF9sYl9hZGRyIG9lbG9jOwogCXVpbnQzMl90IG9lbGVuOwogCWludDhfdCBldHlwZTsKIAotCWlmIChiaCkKLQkJYXRvbWljX2luYygmYmgtPmJfY291bnQpOworCWlmIChlcG9zLmJoKQorCQlnZXRfYmgoZXBvcy5iaCk7CiAKLQl3aGlsZSAoKGV0eXBlID0gdWRmX25leHRfYWV4dChpbm9kZSwgJmJsb2MsICZleHRvZmZzZXQsICZvZWxvYywgJm9lbGVuLCAmYmgsIDApKSAhPSAtMSkKKwl3aGlsZSAoKGV0eXBlID0gdWRmX25leHRfYWV4dChpbm9kZSwgJmVwb3MsICZvZWxvYywgJm9lbGVuLCAwKSkgIT0gLTEpCiAJewotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgYmxvYywgJmV4dG9mZnNldCwgbmVsb2MsIG5lbGVuLCBiaCwgMSk7CisJCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmZXBvcywgbmVsb2MsIG5lbGVuLCAxKTsKIAogCQluZWxvYyA9IG9lbG9jOwogCQluZWxlbiA9IChldHlwZSA8PCAzMCkgfCBvZWxlbjsKIAl9Ci0JdWRmX2FkZF9hZXh0KGlub2RlLCAmYmxvYywgJmV4dG9mZnNldCwgbmVsb2MsIG5lbGVuLCAmYmgsIDEpOwotCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCXVkZl9hZGRfYWV4dChpbm9kZSwgJmVwb3MsIG5lbG9jLCBuZWxlbiwgMSk7CisJYnJlbHNlKGVwb3MuYmgpOwogCXJldHVybiAobmVsZW4gPj4gMzApOwogfQogCi1pbnQ4X3QgdWRmX2RlbGV0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGtlcm5lbF9sYl9hZGRyIG5ibG9jLCBpbnQgbmV4dG9mZnNldCwKLQlrZXJuZWxfbGJfYWRkciBlbG9jLCB1aW50MzJfdCBlbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5iaCkKK2ludDhfdCB1ZGZfZGVsZXRlX2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zLAorCWtlcm5lbF9sYl9hZGRyIGVsb2MsIHVpbnQzMl90IGVsZW4pCiB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpvYmg7Ci0Ja2VybmVsX2xiX2FkZHIgb2Jsb2M7Ci0JaW50IG9leHRvZmZzZXQsIGFkc2l6ZTsKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIG9lcG9zOworCWludCBhZHNpemU7CiAJaW50OF90IGV0eXBlOwogCXN0cnVjdCBhbGxvY0V4dERlc2MgKmFlZDsKIAotCWlmIChuYmgpCisJaWYgKGVwb3MuYmgpCiAJewotCQlhdG9taWNfaW5jKCZuYmgtPmJfY291bnQpOwotCQlhdG9taWNfaW5jKCZuYmgtPmJfY291bnQpOworCQlnZXRfYmgoZXBvcy5iaCk7CisJCWdldF9iaChlcG9zLmJoKTsKIAl9CiAKIAlpZiAoVURGX0lfQUxMT0NUWVBFKGlub2RlKSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKQEAgLTE4NzgsODAgKzIwMDIsNzcgQEAKIAllbHNlCiAJCWFkc2l6ZSA9IDA7CiAKLQlvYmggPSBuYmg7Ci0Jb2Jsb2MgPSBuYmxvYzsKLQlvZXh0b2Zmc2V0ID0gbmV4dG9mZnNldDsKLQotCWlmICh1ZGZfbmV4dF9hZXh0KGlub2RlLCAmbmJsb2MsICZuZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZuYmgsIDEpID09IC0xKQorCW9lcG9zID0gZXBvczsKKwlpZiAodWRmX25leHRfYWV4dChpbm9kZSwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMSkgPT0gLTEpCiAJCXJldHVybiAtMTsKIAotCXdoaWxlICgoZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmbmJsb2MsICZuZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZuYmgsIDEpKSAhPSAtMSkKKwl3aGlsZSAoKGV0eXBlID0gdWRmX25leHRfYWV4dChpbm9kZSwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMSkpICE9IC0xKQogCXsKLQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIG9ibG9jLCAmb2V4dG9mZnNldCwgZWxvYywgKGV0eXBlIDw8IDMwKSB8IGVsZW4sIG9iaCwgMSk7Ci0JCWlmIChvYmggIT0gbmJoKQorCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCBlbG9jLCAoZXR5cGUgPDwgMzApIHwgZWxlbiwgMSk7CisJCWlmIChvZXBvcy5iaCAhPSBlcG9zLmJoKQogCQl7Ci0JCQlvYmxvYyA9IG5ibG9jOwotCQkJdWRmX3JlbGVhc2VfZGF0YShvYmgpOwotCQkJYXRvbWljX2luYygmbmJoLT5iX2NvdW50KTsKLQkJCW9iaCA9IG5iaDsKLQkJCW9leHRvZmZzZXQgPSBuZXh0b2Zmc2V0IC0gYWRzaXplOworCQkJb2Vwb3MuYmxvY2sgPSBlcG9zLmJsb2NrOworCQkJYnJlbHNlKG9lcG9zLmJoKTsKKwkJCWdldF9iaChlcG9zLmJoKTsKKwkJCW9lcG9zLmJoID0gZXBvcy5iaDsKKwkJCW9lcG9zLm9mZnNldCA9IGVwb3Mub2Zmc2V0IC0gYWRzaXplOwogCQl9CiAJfQogCW1lbXNldCgmZWxvYywgMHgwMCwgc2l6ZW9mKGtlcm5lbF9sYl9hZGRyKSk7CiAJZWxlbiA9IDA7CiAKLQlpZiAobmJoICE9IG9iaCkKKwlpZiAoZXBvcy5iaCAhPSBvZXBvcy5iaCkKIAl7Ci0JCXVkZl9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgaW5vZGUsIG5ibG9jLCAwLCAxKTsKLQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIG9ibG9jLCAmb2V4dG9mZnNldCwgZWxvYywgZWxlbiwgb2JoLCAxKTsKLQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIG9ibG9jLCAmb2V4dG9mZnNldCwgZWxvYywgZWxlbiwgb2JoLCAxKTsKLQkJaWYgKCFvYmgpCisJCXVkZl9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgaW5vZGUsIGVwb3MuYmxvY2ssIDAsIDEpOworCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZvZXBvcywgZWxvYywgZWxlbiwgMSk7CisJCWlmICghb2Vwb3MuYmgpCiAJCXsKIAkJCVVERl9JX0xFTkFMTE9DKGlub2RlKSAtPSAoYWRzaXplICogMik7CiAJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkJfQogCQllbHNlCiAJCXsKLQkJCWFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKG9iaCktPmJfZGF0YTsKKwkJCWFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopb2Vwb3MuYmgtPmJfZGF0YTsKIAkJCWFlZC0+bGVuZ3RoQWxsb2NEZXNjcyA9CiAJCQkJY3B1X3RvX2xlMzIobGUzMl90b19jcHUoYWVkLT5sZW5ndGhBbGxvY0Rlc2NzKSAtICgyKmFkc2l6ZSkpOwogCQkJaWYgKCFVREZfUVVFUllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBVREZfU0JfVURGUkVWKGlub2RlLT5pX3NiKSA+PSAweDAyMDEpCi0JCQkJdWRmX3VwZGF0ZV90YWcoKG9iaCktPmJfZGF0YSwgb2V4dG9mZnNldCAtICgyKmFkc2l6ZSkpOworCQkJCXVkZl91cGRhdGVfdGFnKG9lcG9zLmJoLT5iX2RhdGEsIG9lcG9zLm9mZnNldCAtICgyKmFkc2l6ZSkpOwogCQkJZWxzZQotCQkJCXVkZl91cGRhdGVfdGFnKChvYmgpLT5iX2RhdGEsIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSk7Ci0JCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShvYmgsIGlub2RlKTsKKwkJCQl1ZGZfdXBkYXRlX3RhZyhvZXBvcy5iaC0+Yl9kYXRhLCBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpOworCQkJbWFya19idWZmZXJfZGlydHlfaW5vZGUob2Vwb3MuYmgsIGlub2RlKTsKIAkJfQogCX0KIAllbHNlCiAJewotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgb2Jsb2MsICZvZXh0b2Zmc2V0LCBlbG9jLCBlbGVuLCBvYmgsIDEpOwotCQlpZiAoIW9iaCkKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZvZXBvcywgZWxvYywgZWxlbiwgMSk7CisJCWlmICghb2Vwb3MuYmgpCiAJCXsKIAkJCVVERl9JX0xFTkFMTE9DKGlub2RlKSAtPSBhZHNpemU7CiAJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkJfQogCQllbHNlCiAJCXsKLQkJCWFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKG9iaCktPmJfZGF0YTsKKwkJCWFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopb2Vwb3MuYmgtPmJfZGF0YTsKIAkJCWFlZC0+bGVuZ3RoQWxsb2NEZXNjcyA9CiAJCQkJY3B1X3RvX2xlMzIobGUzMl90b19jcHUoYWVkLT5sZW5ndGhBbGxvY0Rlc2NzKSAtIGFkc2l6ZSk7CiAJCQlpZiAoIVVERl9RVUVSWV9GTEFHKGlub2RlLT5pX3NiLCBVREZfRkxBR19TVFJJQ1QpIHx8IFVERl9TQl9VREZSRVYoaW5vZGUtPmlfc2IpID49IDB4MDIwMSkKLQkJCQl1ZGZfdXBkYXRlX3RhZygob2JoKS0+Yl9kYXRhLCBvZXh0b2Zmc2V0IC0gYWRzaXplKTsKKwkJCQl1ZGZfdXBkYXRlX3RhZyhvZXBvcy5iaC0+Yl9kYXRhLCBlcG9zLm9mZnNldCAtIGFkc2l6ZSk7CiAJCQllbHNlCi0JCQkJdWRmX3VwZGF0ZV90YWcoKG9iaCktPmJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpKTsKLQkJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKG9iaCwgaW5vZGUpOworCQkJCXVkZl91cGRhdGVfdGFnKG9lcG9zLmJoLT5iX2RhdGEsIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSk7CisJCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShvZXBvcy5iaCwgaW5vZGUpOwogCQl9CiAJfQogCQotCXVkZl9yZWxlYXNlX2RhdGEobmJoKTsKLQl1ZGZfcmVsZWFzZV9kYXRhKG9iaCk7CisJYnJlbHNlKGVwb3MuYmgpOworCWJyZWxzZShvZXBvcy5iaCk7CiAJcmV0dXJuIChlbGVuID4+IDMwKTsKIH0KIAotaW50OF90IGlub2RlX2JtYXAoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGJsb2NrLCBrZXJuZWxfbGJfYWRkciAqYmxvYywgdWludDMyX3QgKmV4dG9mZnNldCwKLQlrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sIHVpbnQzMl90ICpvZmZzZXQsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKQoraW50OF90IGlub2RlX2JtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKnBvcywKKwlrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sIHNlY3Rvcl90ICpvZmZzZXQpCiB7Ci0JdWludDY0X3QgbGJjb3VudCA9IDAsIGJjb3VudCA9ICh1aW50NjRfdClibG9jayA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwlsb2ZmX3QgbGJjb3VudCA9IDAsIGJjb3VudCA9IChsb2ZmX3QpYmxvY2sgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJaW50OF90IGV0eXBlOwogCiAJaWYgKGJsb2NrIDwgMCkKQEAgLTE5NjAsNDIgKzIwODEsNDQgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCSpleHRvZmZzZXQgPSAwOworCXBvcy0+b2Zmc2V0ID0gMDsKKwlwb3MtPmJsb2NrID0gVURGX0lfTE9DQVRJT04oaW5vZGUpOworCXBvcy0+YmggPSBOVUxMOwogCSplbGVuID0gMDsKLQkqYmxvYyA9IFVERl9JX0xPQ0FUSU9OKGlub2RlKTsKIAogCWRvCiAJewotCQlpZiAoKGV0eXBlID0gdWRmX25leHRfYWV4dChpbm9kZSwgYmxvYywgZXh0b2Zmc2V0LCBlbG9jLCBlbGVuLCBiaCwgMSkpID09IC0xKQorCQlpZiAoKGV0eXBlID0gdWRmX25leHRfYWV4dChpbm9kZSwgcG9zLCBlbG9jLCBlbGVuLCAxKSkgPT0gLTEpCiAJCXsKLQkJCSpvZmZzZXQgPSBiY291bnQgLSBsYmNvdW50OworCQkJKm9mZnNldCA9IChiY291bnQgLSBsYmNvdW50KSA+PiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKIAkJCVVERl9JX0xFTkVYVEVOVFMoaW5vZGUpID0gbGJjb3VudDsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlsYmNvdW50ICs9ICplbGVuOwogCX0gd2hpbGUgKGxiY291bnQgPD0gYmNvdW50KTsKIAotCSpvZmZzZXQgPSBiY291bnQgKyAqZWxlbiAtIGxiY291bnQ7CisJKm9mZnNldCA9IChiY291bnQgKyAqZWxlbiAtIGxiY291bnQpID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCiAJcmV0dXJuIGV0eXBlOwogfQogCi1sb25nIHVkZl9ibG9ja19tYXAoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBibG9jaykKK2xvbmcgdWRmX2Jsb2NrX21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jaykKIHsKLQlrZXJuZWxfbGJfYWRkciBlbG9jLCBibG9jOwotCXVpbnQzMl90IG9mZnNldCwgZXh0b2Zmc2V0LCBlbGVuOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOworCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJdWludDMyX3QgZWxlbjsKKwlzZWN0b3JfdCBvZmZzZXQ7CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0geyBOVUxMLCAwLCB7IDAsIDB9fTsKIAlpbnQgcmV0OwogCiAJbG9ja19rZXJuZWwoKTsKIAotCWlmIChpbm9kZV9ibWFwKGlub2RlLCBibG9jaywgJmJsb2MsICZleHRvZmZzZXQsICZlbG9jLCAmZWxlbiwgJm9mZnNldCwgJmJoKSA9PSAoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCi0JCXJldCA9IHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLCBlbG9jLCBvZmZzZXQgPj4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOworCWlmIChpbm9kZV9ibWFwKGlub2RlLCBibG9jaywgJmVwb3MsICZlbG9jLCAmZWxlbiwgJm9mZnNldCkgPT0gKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQorCQlyZXQgPSB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgZWxvYywgb2Zmc2V0KTsKIAllbHNlCiAJCXJldCA9IDA7CiAKIAl1bmxvY2tfa2VybmVsKCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJYnJlbHNlKGVwb3MuYmgpOwogCiAJaWYgKFVERl9RVUVSWV9GTEFHKGlub2RlLT5pX3NiLCBVREZfRkxBR19WQVJDT05WKSkKIAkJcmV0dXJuIHVkZl9maXhlZF90b192YXJpYWJsZShyZXQpOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL21pc2MuYyBiL2ZzL3VkZi9taXNjLmMKaW5kZXggY2M4Y2EzMi4uYTJiMmE5OCAxMDA2NDQKLS0tIGEvZnMvdWRmL21pc2MuYworKysgYi9mcy91ZGYvbWlzYy5jCkBAIC0yNzQsMTIgKzI3NCw2IEBACiAJCWxvYy5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQsIGlkZW50KTsKIH0KIAotdm9pZCB1ZGZfcmVsZWFzZV9kYXRhKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCi17Ci0JaWYgKGJoKQotCQlicmVsc2UoYmgpOwotfQotCiB2b2lkIHVkZl91cGRhdGVfdGFnKGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCiB7CiAJdGFnICp0cHRyID0gKHRhZyAqKWRhdGE7CmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jCmluZGV4IGZlMzYxY2QuLjUxZmUzMDcgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9uYW1laS5jCisrKyBiL2ZzL3VkZi9uYW1laS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogc3RhdGljIGlubGluZSBpbnQgdWRmX21hdGNoKGludCBsZW4xLCBjb25zdCBjaGFyICpuYW1lMSwgaW50IGxlbjIsIGNvbnN0IGNoYXIgKm5hbWUyKQogewpAQCAtMTU1LDkgKzE1NiwxMCBAQAogCXVpbnQ4X3QgbGZpOwogCXVpbnQxNl90IGxpdTsKIAlsb2ZmX3Qgc2l6ZTsKLQlrZXJuZWxfbGJfYWRkciBibG9jLCBlbG9jOwotCXVpbnQzMl90IGV4dG9mZnNldCwgZWxlbiwgb2Zmc2V0OwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOworCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJdWludDMyX3QgZWxlbjsKKwlzZWN0b3JfdCBvZmZzZXQ7CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0geyBOVUxMLCAwLCB7IDAsIDB9fTsKIAogCXNpemUgPSAodWRmX2V4dDBfb2Zmc2V0KGRpcikgKyBkaXItPmlfc2l6ZSkgPj4gMjsKIAlmX3BvcyA9ICh1ZGZfZXh0MF9vZmZzZXQoZGlyKSA+PiAyKTsKQEAgLTE2Niw0MiArMTY4LDQxIEBACiAJaWYgKFVERl9JX0FMTE9DVFlQRShkaXIpID09IElDQlRBR19GTEFHX0FEX0lOX0lDQikKIAkJZmliaC0+c2JoID0gZmliaC0+ZWJoID0gTlVMTDsKIAllbHNlIGlmIChpbm9kZV9ibWFwKGRpciwgZl9wb3MgPj4gKGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cyAtIDIpLAotCQkmYmxvYywgJmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmb2Zmc2V0LCAmYmgpID09IChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKKwkJJmVwb3MsICZlbG9jLCAmZWxlbiwgJm9mZnNldCkgPT0gKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQogCXsKLQkJb2Zmc2V0ID4+PSBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCBvZmZzZXQpOwogCQlpZiAoKCsrb2Zmc2V0IDw8IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPCBlbGVuKQogCQl7CiAJCQlpZiAoVURGX0lfQUxMT0NUWVBFKGRpcikgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCQkJZXh0b2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKIAkJCWVsc2UgaWYgKFVERl9JX0FMTE9DVFlQRShkaXIpID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQkJZXh0b2Zmc2V0IC09IHNpemVvZihsb25nX2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2YobG9uZ19hZCk7CiAJCX0KIAkJZWxzZQogCQkJb2Zmc2V0ID0gMDsKIAogCQlpZiAoIShmaWJoLT5zYmggPSBmaWJoLT5lYmggPSB1ZGZfdHJlYWQoZGlyLT5pX3NiLCBibG9jaykpKQogCQl7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCWJyZWxzZShlcG9zLmJoKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJfQogCWVsc2UKIAl7Ci0JCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQlicmVsc2UoZXBvcy5iaCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCXdoaWxlICggKGZfcG9zIDwgc2l6ZSkgKQogCXsKLQkJZmkgPSB1ZGZfZmlsZWlkZW50X3JlYWQoZGlyLCAmZl9wb3MsIGZpYmgsIGNmaSwgJmJsb2MsICZleHRvZmZzZXQsICZlbG9jLCAmZWxlbiwgJm9mZnNldCwgJmJoKTsKKwkJZmkgPSB1ZGZfZmlsZWlkZW50X3JlYWQoZGlyLCAmZl9wb3MsIGZpYmgsIGNmaSwgJmVwb3MsICZlbG9jLCAmZWxlbiwgJm9mZnNldCk7CiAKIAkJaWYgKCFmaSkKIAkJewogCQkJaWYgKGZpYmgtPnNiaCAhPSBmaWJoLT5lYmgpCi0JCQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLT5lYmgpOwotCQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLT5zYmgpOwotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQkJYnJlbHNlKGZpYmgtPmViaCk7CisJCQlicmVsc2UoZmliaC0+c2JoKTsKKwkJCWJyZWxzZShlcG9zLmJoKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKQEAgLTI0NywxNSArMjQ4LDE1IEBACiAJCXsKIAkJCWlmICh1ZGZfbWF0Y2goZmxlbiwgZm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSkpCiAJCQl7Ci0JCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQkJYnJlbHNlKGVwb3MuYmgpOwogCQkJCXJldHVybiBmaTsKIAkJCX0KIAkJfQogCX0KIAlpZiAoZmliaC0+c2JoICE9IGZpYmgtPmViaCkKLQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLT5lYmgpOwotCXVkZl9yZWxlYXNlX2RhdGEoZmliaC0+c2JoKTsKLQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJYnJlbHNlKGZpYmgtPmViaCk7CisJYnJlbHNlKGZpYmgtPnNiaCk7CisJYnJlbHNlKGVwb3MuYmgpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0zMjEsOCArMzIyLDggQEAKIAlpZiAodWRmX2ZpbmRfZW50cnkoZGlyLCBkZW50cnksICZmaWJoLCAmY2ZpKSkKIAl7CiAJCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5lYmgpOwotCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguc2JoKTsKKwkJCWJyZWxzZShmaWJoLmViaCk7CisJCWJyZWxzZShmaWJoLnNiaCk7CiAKIAkJaW5vZGUgPSB1ZGZfaWdldChkaXItPmlfc2IsIGxlbGJfdG9fY3B1KGNmaS5pY2IuZXh0TG9jYXRpb24pKTsKIAkJaWYgKCAhaW5vZGUgKQpAQCAtMzUzLDkgKzM1NCwxMCBAQAogCXVpbnQ4X3QgbGZpOwogCXVpbnQxNl90IGxpdTsKIAlpbnQgYmxvY2s7Ci0Ja2VybmVsX2xiX2FkZHIgYmxvYywgZWxvYzsKLQl1aW50MzJfdCBleHRvZmZzZXQsIGVsZW4sIG9mZnNldDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwlrZXJuZWxfbGJfYWRkciBlbG9jOworCXVpbnQzMl90IGVsZW47CisJc2VjdG9yX3Qgb2Zmc2V0OworCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcyA9IHsgTlVMTCwgMCwgeyAwLCAwIH19OwogCiAJc2IgPSBkaXItPmlfc2I7CiAKQEAgLTM4NCwyMyArMzg2LDIyIEBACiAJaWYgKFVERl9JX0FMTE9DVFlQRShkaXIpID09IElDQlRBR19GTEFHX0FEX0lOX0lDQikKIAkJZmliaC0+c2JoID0gZmliaC0+ZWJoID0gTlVMTDsKIAllbHNlIGlmIChpbm9kZV9ibWFwKGRpciwgZl9wb3MgPj4gKGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cyAtIDIpLAotCQkmYmxvYywgJmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmb2Zmc2V0LCAmYmgpID09IChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKKwkJJmVwb3MsICZlbG9jLCAmZWxlbiwgJm9mZnNldCkgPT0gKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQogCXsKLQkJb2Zmc2V0ID4+PSBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCBvZmZzZXQpOwogCQlpZiAoKCsrb2Zmc2V0IDw8IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPCBlbGVuKQogCQl7CiAJCQlpZiAoVURGX0lfQUxMT0NUWVBFKGRpcikgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCQkJZXh0b2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKIAkJCWVsc2UgaWYgKFVERl9JX0FMTE9DVFlQRShkaXIpID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQkJZXh0b2Zmc2V0IC09IHNpemVvZihsb25nX2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2YobG9uZ19hZCk7CiAJCX0KIAkJZWxzZQogCQkJb2Zmc2V0ID0gMDsKIAogCQlpZiAoIShmaWJoLT5zYmggPSBmaWJoLT5lYmggPSB1ZGZfdHJlYWQoZGlyLT5pX3NiLCBibG9jaykpKQogCQl7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCWJyZWxzZShlcG9zLmJoKTsKIAkJCSplcnIgPSAtRUlPOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KQEAgLTQxOCwxNCArNDE5LDE0IEBACiAKIAl3aGlsZSAoIChmX3BvcyA8IHNpemUpICkKIAl7Ci0JCWZpID0gdWRmX2ZpbGVpZGVudF9yZWFkKGRpciwgJmZfcG9zLCBmaWJoLCBjZmksICZibG9jLCAmZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZvZmZzZXQsICZiaCk7CisJCWZpID0gdWRmX2ZpbGVpZGVudF9yZWFkKGRpciwgJmZfcG9zLCBmaWJoLCBjZmksICZlcG9zLCAmZWxvYywgJmVsZW4sICZvZmZzZXQpOwogCiAJCWlmICghZmkpCiAJCXsKIAkJCWlmIChmaWJoLT5zYmggIT0gZmliaC0+ZWJoKQotCQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC0+ZWJoKTsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC0+c2JoKTsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJCWJyZWxzZShmaWJoLT5lYmgpOworCQkJYnJlbHNlKGZpYmgtPnNiaCk7CisJCQlicmVsc2UoZXBvcy5iaCk7CiAJCQkqZXJyID0gLUVJTzsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC00NTUsNyArNDU2LDcgQEAKIAkJewogCQkJaWYgKCgoc2l6ZW9mKHN0cnVjdCBmaWxlSWRlbnREZXNjKSArIGxpdSArIGxmaSArIDMpICYgfjMpID09IG5maWRsZW4pCiAJCQl7Ci0JCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQkJYnJlbHNlKGVwb3MuYmgpOwogCQkJCWNmaS0+ZGVzY1RhZy50YWdTZXJpYWxOdW0gPSBjcHVfdG9fbGUxNigxKTsKIAkJCQljZmktPmZpbGVWZXJzaW9uTnVtID0gY3B1X3RvX2xlMTYoMSk7CiAJCQkJY2ZpLT5maWxlQ2hhcmFjdGVyaXN0aWNzID0gMDsKQEAgLTQ3OCw5ICs0NzksOSBAQAogCQkJdWRmX21hdGNoKGZsZW4sIGZuYW1lLCBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpKQogCQl7CiAJCQlpZiAoZmliaC0+c2JoICE9IGZpYmgtPmViaCkKLQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmgtPmViaCk7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmgtPnNiaCk7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQlicmVsc2UoZmliaC0+ZWJoKTsKKwkJCWJyZWxzZShmaWJoLT5zYmgpOworCQkJYnJlbHNlKGVwb3MuYmgpOwogCQkJKmVyciA9IC1FRVhJU1Q7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtNDkyLDI1ICs0OTMsMjUgQEAKIAlpZiAoVURGX0lfQUxMT0NUWVBFKGRpcikgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCICYmCiAJCXNiLT5zX2Jsb2Nrc2l6ZSAtIGZpYmgtPmVvZmZzZXQgPCBuZmlkbGVuKQogCXsKLQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7Ci0JCWJoID0gTlVMTDsKKwkJYnJlbHNlKGVwb3MuYmgpOworCQllcG9zLmJoID0gTlVMTDsKIAkJZmliaC0+c29mZnNldCAtPSB1ZGZfZXh0MF9vZmZzZXQoZGlyKTsKIAkJZmliaC0+ZW9mZnNldCAtPSB1ZGZfZXh0MF9vZmZzZXQoZGlyKTsKIAkJZl9wb3MgLT0gKHVkZl9leHQwX29mZnNldChkaXIpID4+IDIpOwogCQlpZiAoZmliaC0+c2JoICE9IGZpYmgtPmViaCkKLQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC0+ZWJoKTsKLQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLT5zYmgpOworCQkJYnJlbHNlKGZpYmgtPmViaCk7CisJCWJyZWxzZShmaWJoLT5zYmgpOwogCQlpZiAoIShmaWJoLT5zYmggPSBmaWJoLT5lYmggPSB1ZGZfZXhwYW5kX2Rpcl9hZGluaWNiKGRpciwgJmJsb2NrLCBlcnIpKSkKIAkJCXJldHVybiBOVUxMOwotCQlibG9jID0gVURGX0lfTE9DQVRJT04oZGlyKTsKKwkJZXBvcy5ibG9jayA9IFVERl9JX0xPQ0FUSU9OKGRpcik7CiAJCWVsb2MubG9naWNhbEJsb2NrTnVtID0gYmxvY2s7CiAJCWVsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gVURGX0lfTE9DQVRJT04oZGlyKS5wYXJ0aXRpb25SZWZlcmVuY2VOdW07CiAJCWVsZW4gPSBkaXItPmlfc2ItPnNfYmxvY2tzaXplOwotCQlleHRvZmZzZXQgPSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoZGlyKTsKKwkJZXBvcy5vZmZzZXQgPSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoZGlyKTsKIAkJaWYgKFVERl9JX0FMTE9DVFlQRShkaXIpID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQkJZXh0b2Zmc2V0ICs9IHNpemVvZihzaG9ydF9hZCk7CisJCQllcG9zLm9mZnNldCArPSBzaXplb2Yoc2hvcnRfYWQpOwogCQllbHNlIGlmIChVREZfSV9BTExPQ1RZUEUoZGlyKSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQkJZXh0b2Zmc2V0ICs9IHNpemVvZihsb25nX2FkKTsKKwkJCWVwb3Mub2Zmc2V0ICs9IHNpemVvZihsb25nX2FkKTsKIAl9CiAKIAlpZiAoc2ItPnNfYmxvY2tzaXplIC0gZmliaC0+ZW9mZnNldCA+PSBuZmlkbGVuKQpAQCAtNTE5LDcgKzUyMCw3IEBACiAJCWZpYmgtPmVvZmZzZXQgKz0gbmZpZGxlbjsKIAkJaWYgKGZpYmgtPnNiaCAhPSBmaWJoLT5lYmgpCiAJCXsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC0+c2JoKTsKKwkJCWJyZWxzZShmaWJoLT5zYmgpOwogCQkJZmliaC0+c2JoID0gZmliaC0+ZWJoOwogCQl9CiAKQEAgLTU0MSw3ICs1NDIsNyBAQAogCQlmaWJoLT5lb2Zmc2V0ICs9IG5maWRsZW4gLSBzYi0+c19ibG9ja3NpemU7CiAJCWlmIChmaWJoLT5zYmggIT0gZmliaC0+ZWJoKQogCQl7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmgtPnNiaCk7CisJCQlicmVsc2UoZmliaC0+c2JoKTsKIAkJCWZpYmgtPnNiaCA9IGZpYmgtPmViaDsKIAkJfQogCkBAIC01NTAsMTQgKzU1MSwxNCBAQAogCiAJCWlmICghKGZpYmgtPmViaCA9IHVkZl9icmVhZChkaXIsIGZfcG9zID4+IChkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMgLSAyKSwgMSwgZXJyKSkpCiAJCXsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOwotCQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLT5zYmgpOworCQkJYnJlbHNlKGVwb3MuYmgpOworCQkJYnJlbHNlKGZpYmgtPnNiaCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCiAJCWlmICghKGZpYmgtPnNvZmZzZXQpKQogCQl7Ci0JCQlpZiAodWRmX25leHRfYWV4dChkaXIsICZibG9jLCAmZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZiaCwgMSkgPT0KKwkJCWlmICh1ZGZfbmV4dF9hZXh0KGRpciwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMSkgPT0KIAkJCQkoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCiAJCQl7CiAJCQkJYmxvY2sgPSBlbG9jLmxvZ2ljYWxCbG9ja051bSArICgoZWxlbiAtIDEpID4+CkBAIC01NjYsNyArNTY3LDcgQEAKIAkJCWVsc2UKIAkJCQlibG9jayArKzsKIAotCQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLT5zYmgpOworCQkJYnJlbHNlKGZpYmgtPnNiaCk7CiAJCQlmaWJoLT5zYmggPSBmaWJoLT5lYmg7CiAJCQlmaSA9IChzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqKShmaWJoLT5zYmgtPmJfZGF0YSk7CiAJCX0KQEAgLTU4Nyw3ICs1ODgsNyBAQAogCWNmaS0+bGVuZ3RoT2ZJbXBVc2UgPSBjcHVfdG9fbGUxNigwKTsKIAlpZiAoIXVkZl93cml0ZV9maShkaXIsIGNmaSwgZmksIGZpYmgsIE5VTEwsIG5hbWUpKQogCXsKLQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCWJyZWxzZShlcG9zLmJoKTsKIAkJZGlyLT5pX3NpemUgKz0gbmZpZGxlbjsKIAkJaWYgKFVERl9JX0FMTE9DVFlQRShkaXIpID09IElDQlRBR19GTEFHX0FEX0lOX0lDQikKIAkJCVVERl9JX0xFTkFMTE9DKGRpcikgKz0gbmZpZGxlbjsKQEAgLTU5NiwxMCArNTk3LDEwIEBACiAJfQogCWVsc2UKIAl7Ci0JCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQlicmVsc2UoZXBvcy5iaCk7CiAJCWlmIChmaWJoLT5zYmggIT0gZmliaC0+ZWJoKQotCQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLT5lYmgpOwotCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmgtPnNiaCk7CisJCQlicmVsc2UoZmliaC0+ZWJoKTsKKwkJYnJlbHNlKGZpYmgtPnNiaCk7CiAJCSplcnIgPSAtRUlPOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC02NTYsOCArNjU3LDggQEAKIAkJbWFya19pbm9kZV9kaXJ0eShkaXIpOwogCX0KIAlpZiAoZmliaC5zYmggIT0gZmliaC5lYmgpCi0JCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5lYmgpOwotCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5zYmgpOworCQlicmVsc2UoZmliaC5lYmgpOworCWJyZWxzZShmaWJoLnNiaCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJcmV0dXJuIDA7CkBAIC03MDEsOCArNzAyLDggQEAKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAogCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLmViaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShmaWJoLnNiaCk7CisJCWJyZWxzZShmaWJoLmViaCk7CisJYnJlbHNlKGZpYmguc2JoKTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCWVyciA9IDA7CiBvdXQ6CkBAIC03NDMsNyArNzQ0LDcgQEAKIAkJY3B1X3RvX2xlMzIoVURGX0lfVU5JUVVFKGRpcikgJiAweDAwMDAwMDAwRkZGRkZGRkZVTCk7CiAJY2ZpLmZpbGVDaGFyYWN0ZXJpc3RpY3MgPSBGSURfRklMRV9DSEFSX0RJUkVDVE9SWSB8IEZJRF9GSUxFX0NIQVJfUEFSRU5UOwogCXVkZl93cml0ZV9maShpbm9kZSwgJmNmaSwgZmksICZmaWJoLCBOVUxMLCBOVUxMKTsKLQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguc2JoKTsKKwlicmVsc2UoZmliaC5zYmgpOwogCWlub2RlLT5pX21vZGUgPSBTX0lGRElSIHwgbW9kZTsKIAlpZiAoZGlyLT5pX21vZGUgJiBTX0lTR0lEKQogCQlpbm9kZS0+aV9tb2RlIHw9IFNfSVNHSUQ7CkBAIC03NjYsOCArNzY3LDggQEAKIAltYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlpZiAoZmliaC5zYmggIT0gZmliaC5lYmgpCi0JCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5lYmgpOwotCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5zYmgpOworCQlicmVsc2UoZmliaC5lYmgpOworCWJyZWxzZShmaWJoLnNiaCk7CiAJZXJyID0gMDsKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7CkBAIC03ODEsOSArNzgyLDEwIEBACiAJbG9mZl90IGZfcG9zOwogCWxvZmZfdCBzaXplID0gKHVkZl9leHQwX29mZnNldChkaXIpICsgZGlyLT5pX3NpemUpID4+IDI7CiAJaW50IGJsb2NrOwotCWtlcm5lbF9sYl9hZGRyIGJsb2MsIGVsb2M7Ci0JdWludDMyX3QgZXh0b2Zmc2V0LCBlbGVuLCBvZmZzZXQ7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJa2VybmVsX2xiX2FkZHIgZWxvYzsKKwl1aW50MzJfdCBlbGVuOworCXNlY3Rvcl90IG9mZnNldDsKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MgPSB7IE5VTEwsIDAsIHsgMCwgMH19OwogCiAJZl9wb3MgPSAodWRmX2V4dDBfb2Zmc2V0KGRpcikgPj4gMik7CiAKQEAgLTc5Miw1OSArNzk0LDU4IEBACiAJaWYgKFVERl9JX0FMTE9DVFlQRShkaXIpID09IElDQlRBR19GTEFHX0FEX0lOX0lDQikKIAkJZmliaC5zYmggPSBmaWJoLmViaCA9IE5VTEw7CiAJZWxzZSBpZiAoaW5vZGVfYm1hcChkaXIsIGZfcG9zID4+IChkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMgLSAyKSwKLQkJJmJsb2MsICZleHRvZmZzZXQsICZlbG9jLCAmZWxlbiwgJm9mZnNldCwgJmJoKSA9PSAoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCisJCSZlcG9zLCAmZWxvYywgJmVsZW4sICZvZmZzZXQpID09IChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKIAl7Ci0JCW9mZnNldCA+Pj0gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgZWxvYywgb2Zmc2V0KTsKIAkJaWYgKCgrK29mZnNldCA8PCBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpIDwgZWxlbikKIAkJewogCQkJaWYgKFVERl9JX0FMTE9DVFlQRShkaXIpID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQkJCWV4dG9mZnNldCAtPSBzaXplb2Yoc2hvcnRfYWQpOworCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CiAJCQllbHNlIGlmIChVREZfSV9BTExPQ1RZUEUoZGlyKSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQkJCWV4dG9mZnNldCAtPSBzaXplb2YobG9uZ19hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOwogCQl9CiAJCWVsc2UKIAkJCW9mZnNldCA9IDA7CiAKIAkJaWYgKCEoZmliaC5zYmggPSBmaWJoLmViaCA9IHVkZl90cmVhZChkaXItPmlfc2IsIGJsb2NrKSkpCiAJCXsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJYnJlbHNlKGVwb3MuYmgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAJZWxzZQogCXsKLQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCWJyZWxzZShlcG9zLmJoKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAKIAl3aGlsZSAoIChmX3BvcyA8IHNpemUpICkKIAl7Ci0JCWZpID0gdWRmX2ZpbGVpZGVudF9yZWFkKGRpciwgJmZfcG9zLCAmZmliaCwgJmNmaSwgJmJsb2MsICZleHRvZmZzZXQsICZlbG9jLCAmZWxlbiwgJm9mZnNldCwgJmJoKTsKKwkJZmkgPSB1ZGZfZmlsZWlkZW50X3JlYWQoZGlyLCAmZl9wb3MsICZmaWJoLCAmY2ZpLCAmZXBvcywgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KTsKIAogCQlpZiAoIWZpKQogCQl7CiAJCQlpZiAoZmliaC5zYmggIT0gZmliaC5lYmgpCi0JCQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLmViaCk7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguc2JoKTsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJCWJyZWxzZShmaWJoLmViaCk7CisJCQlicmVsc2UoZmliaC5zYmgpOworCQkJYnJlbHNlKGVwb3MuYmgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAogCQlpZiAoY2ZpLmxlbmd0aEZpbGVJZGVudCAmJiAoY2ZpLmZpbGVDaGFyYWN0ZXJpc3RpY3MgJiBGSURfRklMRV9DSEFSX0RFTEVURUQpID09IDApCiAJCXsKIAkJCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguZWJoKTsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5zYmgpOwotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQkJYnJlbHNlKGZpYmguZWJoKTsKKwkJCWJyZWxzZShmaWJoLnNiaCk7CisJCQlicmVsc2UoZXBvcy5iaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAlpZiAoZmliaC5zYmggIT0gZmliaC5lYmgpCi0JCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5lYmgpOwotCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5zYmgpOwotCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQlicmVsc2UoZmliaC5lYmgpOworCWJyZWxzZShmaWJoLnNiaCk7CisJYnJlbHNlKGVwb3MuYmgpOwogCXJldHVybiAxOwogfQogCkBAIC04NzgsMTQgKzg3OSwxNCBAQAogCQkJaW5vZGUtPmlfbmxpbmspOwogCWNsZWFyX25saW5rKGlub2RlKTsKIAlpbm9kZS0+aV9zaXplID0gMDsKLQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoZGlyKTsKIAlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZSA9IGRpci0+aV9tdGltZSA9IGN1cnJlbnRfZnNfdGltZShkaXItPmlfc2IpOwogCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKIAogZW5kX3JtZGlyOgogCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLmViaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShmaWJoLnNiaCk7CisJCWJyZWxzZShmaWJoLmViaCk7CisJYnJlbHNlKGZpYmguc2JoKTsKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTkyOCw4ICs5MjksOCBAQAogCiBlbmRfdW5saW5rOgogCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLmViaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShmaWJoLnNiaCk7CisJCWJyZWxzZShmaWJoLmViaCk7CisJYnJlbHNlKGZpYmguc2JoKTsKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTk0MSw3ICs5NDIsNyBAQAogCXN0cnVjdCBwYXRoQ29tcG9uZW50ICpwYzsKIAljaGFyICpjb21wc3RhcnQ7CiAJc3RydWN0IHVkZl9maWxlaWRlbnRfYmggZmliaDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MgPSB7IE5VTEwsICAwLCB7MCwgMH19OwogCWludCBlb2Zmc2V0LCBlbGVuID0gMDsKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqZmk7CiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpOwpAQCAtOTYxLDMzICs5NjIsMzMgQEAKIAogCWlmIChVREZfSV9BTExPQ1RZUEUoaW5vZGUpICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQikKIAl7Ci0JCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwotCQlrZXJuZWxfbGJfYWRkciBibG9jLCBlbG9jOwotCQl1aW50MzJfdCBlbGVuLCBleHRvZmZzZXQ7CisJCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJCXVpbnQzMl90IGVsZW47CiAKIAkJYmxvY2sgPSB1ZGZfbmV3X2Jsb2NrKGlub2RlLT5pX3NiLCBpbm9kZSwKIAkJCVVERl9JX0xPQ0FUSU9OKGlub2RlKS5wYXJ0aXRpb25SZWZlcmVuY2VOdW0sCiAJCQlVREZfSV9MT0NBVElPTihpbm9kZSkubG9naWNhbEJsb2NrTnVtLCAmZXJyKTsKIAkJaWYgKCFibG9jaykKIAkJCWdvdG8gb3V0X25vX2VudHJ5OwotCQlibG9jID0gVURGX0lfTE9DQVRJT04oaW5vZGUpOworCQllcG9zLmJsb2NrID0gVURGX0lfTE9DQVRJT04oaW5vZGUpOworCQllcG9zLm9mZnNldCA9IHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSk7CisJCWVwb3MuYmggPSBOVUxMOwogCQllbG9jLmxvZ2ljYWxCbG9ja051bSA9IGJsb2NrOwogCQllbG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IFVERl9JX0xPQ0FUSU9OKGlub2RlKS5wYXJ0aXRpb25SZWZlcmVuY2VOdW07CiAJCWVsZW4gPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CiAJCVVERl9JX0xFTkVYVEVOVFMoaW5vZGUpID0gZWxlbjsKLQkJZXh0b2Zmc2V0ID0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKTsKLQkJdWRmX2FkZF9hZXh0KGlub2RlLCAmYmxvYywgJmV4dG9mZnNldCwgZWxvYywgZWxlbiwgJmJoLCAwKTsKLQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCXVkZl9hZGRfYWV4dChpbm9kZSwgJmVwb3MsIGVsb2MsIGVsZW4sIDApOworCQlicmVsc2UoZXBvcy5iaCk7CiAKIAkJYmxvY2sgPSB1ZGZfZ2V0X3BibG9jayhpbm9kZS0+aV9zYiwgYmxvY2ssCiAJCQlVREZfSV9MT0NBVElPTihpbm9kZSkucGFydGl0aW9uUmVmZXJlbmNlTnVtLCAwKTsKLQkJYmggPSB1ZGZfdHJlYWQoaW5vZGUtPmlfc2IsIGJsb2NrKTsKLQkJbG9ja19idWZmZXIoYmgpOwotCQltZW1zZXQoYmgtPmJfZGF0YSwgMHgwMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKLQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7Ci0JCXVubG9ja19idWZmZXIoYmgpOwotCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShiaCwgaW5vZGUpOwotCQllYSA9IGJoLT5iX2RhdGEgKyB1ZGZfZXh0MF9vZmZzZXQoaW5vZGUpOworCQllcG9zLmJoID0gdWRmX3RyZWFkKGlub2RlLT5pX3NiLCBibG9jayk7CisJCWxvY2tfYnVmZmVyKGVwb3MuYmgpOworCQltZW1zZXQoZXBvcy5iaC0+Yl9kYXRhLCAweDAwLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOworCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGVwb3MuYmgpOworCQl1bmxvY2tfYnVmZmVyKGVwb3MuYmgpOworCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShlcG9zLmJoLCBpbm9kZSk7CisJCWVhID0gZXBvcy5iaC0+Yl9kYXRhICsgdWRmX2V4dDBfb2Zmc2V0KGlub2RlKTsKIAl9CiAJZWxzZQogCQllYSA9IFVERl9JX0RBVEEoaW5vZGUpICsgVURGX0lfTEVORUFUVFIoaW5vZGUpOwpAQCAtMTA2MCw3ICsxMDYxLDcgQEAKIAkJfQogCX0KIAotCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShlcG9zLmJoKTsKIAlpbm9kZS0+aV9zaXplID0gZWxlbjsKIAlpZiAoVURGX0lfQUxMT0NUWVBFKGlub2RlKSA9PSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IpCiAJCVVERl9JX0xFTkFMTE9DKGlub2RlKSA9IGlub2RlLT5pX3NpemU7CkBAIC0xMDg5LDggKzEwOTAsOCBAQAogCQltYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJfQogCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLmViaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShmaWJoLnNiaCk7CisJCWJyZWxzZShmaWJoLmViaCk7CisJYnJlbHNlKGZpYmguc2JoKTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCWVyciA9IDA7CiAKQEAgLTExNDUsOCArMTE0Niw4IEBACiAJCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKIAl9CiAJaWYgKGZpYmguc2JoICE9IGZpYmguZWJoKQotCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguZWJoKTsKLQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguc2JoKTsKKwkJYnJlbHNlKGZpYmguZWJoKTsKKwlicmVsc2UoZmliaC5zYmgpOwogCWluY19ubGluayhpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwpAQCAtMTE3NCw4ICsxMTc1LDggQEAKIAlpZiAoKG9maSA9IHVkZl9maW5kX2VudHJ5KG9sZF9kaXIsIG9sZF9kZW50cnksICZvZmliaCwgJm9jZmkpKSkKIAl7CiAJCWlmIChvZmliaC5zYmggIT0gb2ZpYmguZWJoKQotCQkJdWRmX3JlbGVhc2VfZGF0YShvZmliaC5lYmgpOwotCQl1ZGZfcmVsZWFzZV9kYXRhKG9maWJoLnNiaCk7CisJCQlicmVsc2Uob2ZpYmguZWJoKTsKKwkJYnJlbHNlKG9maWJoLnNiaCk7CiAJfQogCXRsb2MgPSBsZWxiX3RvX2NwdShvY2ZpLmljYi5leHRMb2NhdGlvbik7CiAJaWYgKCFvZmkgfHwgdWRmX2dldF9sYl9wYmxvY2sob2xkX2Rpci0+aV9zYiwgdGxvYywgMCkKQEAgLTExODgsOCArMTE4OSw4IEBACiAJCWlmICghbmV3X2lub2RlKQogCQl7CiAJCQlpZiAobmZpYmguc2JoICE9IG5maWJoLmViaCkKLQkJCQl1ZGZfcmVsZWFzZV9kYXRhKG5maWJoLmViaCk7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKG5maWJoLnNiaCk7CisJCQkJYnJlbHNlKG5maWJoLmViaCk7CisJCQlicmVsc2UobmZpYmguc2JoKTsKIAkJCW5maSA9IE5VTEw7CiAJCX0KIAl9CkBAIC0xMjkwLDE5ICsxMjkxLDE5IEBACiAJaWYgKG9maSkKIAl7CiAJCWlmIChvZmliaC5zYmggIT0gb2ZpYmguZWJoKQotCQkJdWRmX3JlbGVhc2VfZGF0YShvZmliaC5lYmgpOwotCQl1ZGZfcmVsZWFzZV9kYXRhKG9maWJoLnNiaCk7CisJCQlicmVsc2Uob2ZpYmguZWJoKTsKKwkJYnJlbHNlKG9maWJoLnNiaCk7CiAJfQogCiAJcmV0dmFsID0gMDsKIAogZW5kX3JlbmFtZToKLQl1ZGZfcmVsZWFzZV9kYXRhKGRpcl9iaCk7CisJYnJlbHNlKGRpcl9iaCk7CiAJaWYgKG5maSkKIAl7CiAJCWlmIChuZmliaC5zYmggIT0gbmZpYmguZWJoKQotCQkJdWRmX3JlbGVhc2VfZGF0YShuZmliaC5lYmgpOwotCQl1ZGZfcmVsZWFzZV9kYXRhKG5maWJoLnNiaCk7CisJCQlicmVsc2UobmZpYmguZWJoKTsKKwkJYnJlbHNlKG5maWJoLnNiaCk7CiAJfQogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3BhcnRpdGlvbi5jIGIvZnMvdWRmL3BhcnRpdGlvbi5jCmluZGV4IGRhYmYyYjguLjQ2N2EyNjEgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9wYXJ0aXRpb24uYworKysgYi9mcy91ZGYvcGFydGl0aW9uLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAogCWxvYyA9IGxlMzJfdG9fY3B1KCgoX19sZTMyICopYmgtPmJfZGF0YSlbaW5kZXhdKTsKIAotCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShiaCk7CiAKIAlpZiAoVURGX0lfTE9DQVRJT04oVURGX1NCX1ZBVChzYikpLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9PSBwYXJ0aXRpb24pCiAJewpkaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuYwppbmRleCAwMjNiMzA0Li42NjU4YWZiIDEwMDY0NAotLS0gYS9mcy91ZGYvc3VwZXIuYworKysgYi9mcy91ZGYvc3VwZXIuYwpAQCAtMTM0LDEwICsxMzQsOCBAQAogewogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IHVkZl9pbm9kZV9pbmZvICopIGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikgewotCQllaS0+aV9leHQuaV9kYXRhID0gTlVMTDsKLQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKLQl9CisJZWktPmlfZXh0LmlfZGF0YSA9IE5VTEw7CisJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIH0KIAogc3RhdGljIGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKQEAgLTU2Myw3ICs1NjEsNyBAQAogCiAJCWlmICh2c2QtPnN0ZElkZW50WzBdID09IDApCiAJCXsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJYnJlbHNlKGJoKTsKIAkJCWJyZWFrOwogCQl9CiAJCWVsc2UgaWYgKCFzdHJuY21wKHZzZC0+c3RkSWRlbnQsIFZTRF9TVERfSURfQ0QwMDEsIFZTRF9TVERfSURfTEVOKSkKQEAgLTU5Niw3ICs1OTQsNyBAQAogCQl9CiAJCWVsc2UgaWYgKCFzdHJuY21wKHZzZC0+c3RkSWRlbnQsIFZTRF9TVERfSURfVEVBMDEsIFZTRF9TVERfSURfTEVOKSkKIAkJewotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQlicmVsc2UoYmgpOwogCQkJYnJlYWs7CiAJCX0KIAkJZWxzZSBpZiAoIXN0cm5jbXAodnNkLT5zdGRJZGVudCwgVlNEX1NURF9JRF9OU1IwMiwgVlNEX1NURF9JRF9MRU4pKQpAQCAtNjA3LDcgKzYwNSw3IEBACiAJCXsKIAkJCW5zcjAzID0gc2VjdG9yOwogCQl9Ci0JCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQlicmVsc2UoYmgpOwogCX0KIAogCWlmIChuc3IwMykKQEAgLTY3Myw3ICs2NzEsNyBAQAogCQkJewogCQkJCWlkZW50ID0gbGUxNl90b19jcHUoKCh0YWcgKiliaC0+Yl9kYXRhKS0+dGFnSWRlbnQpOwogCQkJCWxvY2F0aW9uID0gbGUzMl90b19jcHUoKCh0YWcgKiliaC0+Yl9kYXRhKS0+dGFnTG9jYXRpb24pOwotCQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJCWJyZWxzZShiaCk7CiAJCQl9CiAKIAkJCWlmIChpZGVudCA9PSBUQUdfSURFTlRfQVZEUCkKQEAgLTcwOCw3ICs3MDYsNyBAQAogCQkJCXsKIAkJCQkJaWRlbnQgPSBsZTE2X3RvX2NwdSgoKHRhZyAqKWJoLT5iX2RhdGEpLT50YWdJZGVudCk7CiAJCQkJCWxvY2F0aW9uID0gbGUzMl90b19jcHUoKCh0YWcgKiliaC0+Yl9kYXRhKS0+dGFnTG9jYXRpb24pOwotCQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQkJYnJlbHNlKGJoKTsKIAkJCQl9CiAJCiAJCQkJaWYgKGlkZW50ID09IFRBR19JREVOVF9BVkRQICYmCkBAIC03MjcsNyArNzI1LDcgQEAKIAkJCQkJewogCQkJCQkJaWRlbnQgPSBsZTE2X3RvX2NwdSgoKHRhZyAqKWJoLT5iX2RhdGEpLT50YWdJZGVudCk7CiAJCQkJCQlsb2NhdGlvbiA9IGxlMzJfdG9fY3B1KCgodGFnICopYmgtPmJfZGF0YSktPnRhZ0xvY2F0aW9uKTsKLQkJCQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJCQkJYnJlbHNlKGJoKTsKIAkJCQkJfQogCQogCQkJCQlpZiAoaWRlbnQgPT0gVEFHX0lERU5UX0FWRFAgJiYKQEAgLTc0OSw3ICs3NDcsNyBAQAogCQl7CiAJCQlpZGVudCA9IGxlMTZfdG9fY3B1KCgodGFnICopYmgtPmJfZGF0YSktPnRhZ0lkZW50KTsKIAkJCWxvY2F0aW9uID0gbGUzMl90b19jcHUoKCh0YWcgKiliaC0+Yl9kYXRhKS0+dGFnTG9jYXRpb24pOwotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQlicmVsc2UoYmgpOwogCiAJCQlpZiAoaWRlbnQgPT0gVEFHX0lERU5UX0FWRFAgJiYgbG9jYXRpb24gPT0gMjU2KQogCQkJCVVERl9TRVRfRkxBRyhzYiwgVURGX0ZMQUdfVkFSQ09OVik7CkBAIC03NjYsNyArNzY0LDcgQEAKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQlicmVsc2UoYmgpOwogCQkJCWlmICgoaWRlbnQgIT0gVEFHX0lERU5UX0FWRFApICYmIChpIHx8CiAJCQkJCShpZGVudCAhPSBUQUdfSURFTlRfRkUgJiYgaWRlbnQgIT0gVEFHX0lERU5UX0VGRSkpKQogCQkJCXsKQEAgLTc5NSw3ICs3OTMsNyBAQAogCQkJcmV0dXJuIDE7CiAJCWVsc2UgaWYgKGlkZW50ICE9IFRBR19JREVOVF9GU0QpCiAJCXsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJYnJlbHNlKGJoKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCQkKQEAgLTgzNCw3ICs4MzIsNyBAQAogCQkJCQkJbmV3ZmlsZXNldC5sb2dpY2FsQmxvY2tOdW0gKz0gMSArCiAJCQkJCQkJKChsZTMyX3RvX2NwdShzcC0+bnVtT2ZCeXRlcykgKyBzaXplb2Yoc3RydWN0IHNwYWNlQml0bWFwRGVzYykgLSAxKQogCQkJCQkJCQk+PiBzYi0+c19ibG9ja3NpemVfYml0cyk7Ci0JCQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQkJCWJyZWxzZShiaCk7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCQljYXNlIFRBR19JREVOVF9GU0Q6CkBAIC04NDUsNyArODQzLDcgQEAKIAkJCQkJZGVmYXVsdDoKIAkJCQkJewogCQkJCQkJbmV3ZmlsZXNldC5sb2dpY2FsQmxvY2tOdW0gKys7Ci0JCQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQkJCWJyZWxzZShiaCk7CiAJCQkJCQliaCA9IE5VTEw7CiAJCQkJCQlicmVhazsKIAkJCQkJfQpAQCAtODY1LDcgKzg2Myw3IEBACiAKIAkJVURGX1NCX1BBUlRJVElPTihzYikgPSBmaWxlc2V0LT5wYXJ0aXRpb25SZWZlcmVuY2VOdW07CiAJCXVkZl9sb2FkX2ZpbGVzZXQoc2IsIGJoLCByb290KTsKLQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCWJyZWxzZShiaCk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKQEAgLTEwODMsNyArMTA4MSw3IEBACiAJCQkJCQlpZiAoaWRlbnQgIT0gMCB8fAogCQkJCQkJCXN0cm5jbXAoc3QtPnNwYXJpbmdJZGVudC5pZGVudCwgVURGX0lEX1NQQVJJTkcsIHN0cmxlbihVREZfSURfU1BBUklORykpKQogCQkJCQkJewotCQkJCQkJCXVkZl9yZWxlYXNlX2RhdGEoVURGX1NCX1RZUEVTUEFSKHNiLGkpLnNfc3Bhcl9tYXBbal0pOworCQkJCQkJCWJyZWxzZShVREZfU0JfVFlQRVNQQVIoc2IsaSkuc19zcGFyX21hcFtqXSk7CiAJCQkJCQkJVURGX1NCX1RZUEVTUEFSKHNiLGkpLnNfc3Bhcl9tYXBbal0gPSBOVUxMOwogCQkJCQkJfQogCQkJCQl9CkBAIC0xMTM3LDEyICsxMTM1LDEyIEBACiAJCQl1ZGZfbG9hZF9sb2dpY2Fsdm9saW50KHNiLCBsZWVhX3RvX2NwdShVREZfU0JfTFZJRChzYiktPm5leHRJbnRlZ3JpdHlFeHQpKTsKIAkJCiAJCWlmIChVREZfU0JfTFZJREJIKHNiKSAhPSBiaCkKLQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJYnJlbHNlKGJoKTsKIAkJbG9jLmV4dExlbmd0aCAtPSBzYi0+c19ibG9ja3NpemU7CiAJCWxvYy5leHRMb2NhdGlvbiArKzsKIAl9CiAJaWYgKFVERl9TQl9MVklEQkgoc2IpICE9IGJoKQotCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJYnJlbHNlKGJoKTsKIH0KIAogLyoKQEAgLTEyNDUsNyArMTI0Myw3IEBACiAJCQkJCWRvbmUgPSAxOwogCQkJCWJyZWFrOwogCQl9Ci0JCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQlicmVsc2UoYmgpOwogCX0KIAlmb3IgKGk9MDsgaTxWRFNfUE9TX0xFTkdUSDsgaSsrKQogCXsKQEAgLTEyNjcsMTAgKzEyNjUsMTAgQEAKIAkJCQkJZ2QgPSAoc3RydWN0IGdlbmVyaWNfZGVzYyAqKWJoMi0+Yl9kYXRhOwogCQkJCQlpZiAoaWRlbnQgPT0gVEFHX0lERU5UX1BEKQogCQkJCQkJdWRmX2xvYWRfcGFydGRlc2Moc2IsIGJoMik7Ci0JCQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgyKTsKKwkJCQkJYnJlbHNlKGJoMik7CiAJCQkJfQogCQkJfQotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQlicmVsc2UoYmgpOwogCQl9CiAJfQogCkBAIC0xMzMzLDcgKzEzMzEsNyBAQAogCQkJcmVzZXJ2ZV9lID0gcmVzZXJ2ZV9lID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCQkJcmVzZXJ2ZV9lICs9IHJlc2VydmVfczsKIAotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQlicmVsc2UoYmgpOwogCiAJCQkvKiBQcm9jZXNzIHRoZSBtYWluICYgcmVzZXJ2ZSBzZXF1ZW5jZXMgKi8KIAkJCS8qIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIHRoZSBQYXJ0aXRpb25EZXNjKHMpICovCkBAIC0xMzUzLDcgKzEzNTEsNyBAQAogCiAJZm9yIChpPTA7IGk8VURGX1NCX05VTVBBUlRTKHNiKTsgaSsrKQogCXsKLQkJc3dpdGNoIFVERl9TQl9QQVJUVFlQRShzYiwgaSkKKwkJc3dpdGNoIChVREZfU0JfUEFSVFRZUEUoc2IsIGkpKQogCQl7CiAJCQljYXNlIFVERl9WSVJUVUFMX01BUDE1OgogCQkJY2FzZSBVREZfVklSVFVBTF9NQVAyMDoKQEAgLTE0MDMsMTIgKzE0MDEsMTQgQEAKIAogCQkJCQlwb3MgPSB1ZGZfYmxvY2tfbWFwKFVERl9TQl9WQVQoc2IpLCAwKTsKIAkJCQkJYmggPSBzYl9icmVhZChzYiwgcG9zKTsKKwkJCQkJaWYgKCFiaCkKKwkJCQkJCXJldHVybiAxOwogCQkJCQlVREZfU0JfVFlQRVZJUlQoc2IsaSkuc19zdGFydF9vZmZzZXQgPQogCQkJCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgdmlydHVhbEFsbG9jYXRpb25UYWJsZTIwICopYmgtPmJfZGF0YSArIHVkZl9leHQwX29mZnNldChVREZfU0JfVkFUKHNiKSkpLT5sZW5ndGhIZWFkZXIpICsKIAkJCQkJCQl1ZGZfZXh0MF9vZmZzZXQoVURGX1NCX1ZBVChzYikpOwogCQkJCQlVREZfU0JfVFlQRVZJUlQoc2IsaSkuc19udW1fZW50cmllcyA9IChVREZfU0JfVkFUKHNiKS0+aV9zaXplIC0KIAkJCQkJCVVERl9TQl9UWVBFVklSVChzYixpKS5zX3N0YXJ0X29mZnNldCkgPj4gMjsKLQkJCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQkJCWJyZWxzZShiaCk7CiAJCQkJfQogCQkJCVVERl9TQl9QQVJUUk9PVChzYixpKSA9IHVkZl9nZXRfcGJsb2NrKHNiLCAwLCBpLCAwKTsKIAkJCQlVREZfU0JfUEFSVExFTihzYixpKSA9IFVERl9TQl9QQVJUTEVOKHNiLGluby5wYXJ0aXRpb25SZWZlcmVuY2VOdW0pOwpAQCAtMTY2MSw3ICsxNjYxLDcgQEAKIAkJaXB1dChpbm9kZSk7CiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KLQlzYi0+c19tYXhieXRlcyA9IDE8PDMwOworCXNiLT5zX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKIAlyZXR1cm4gMDsKIAogZXJyb3Jfb3V0OgpAQCAtMTY4MCw3ICsxNjgwLDcgQEAKIAkJaWYgKFVERl9TQl9QQVJUVFlQRShzYiwgVURGX1NCX1BBUlRJVElPTihzYikpID09IFVERl9TUEFSQUJMRV9NQVAxNSkKIAkJewogCQkJZm9yIChpPTA7IGk8NDsgaSsrKQotCQkJCXVkZl9yZWxlYXNlX2RhdGEoVURGX1NCX1RZUEVTUEFSKHNiLCBVREZfU0JfUEFSVElUSU9OKHNiKSkuc19zcGFyX21hcFtpXSk7CisJCQkJYnJlbHNlKFVERl9TQl9UWVBFU1BBUihzYiwgVURGX1NCX1BBUlRJVElPTihzYikpLnNfc3Bhcl9tYXBbaV0pOwogCQl9CiAJfQogI2lmZGVmIENPTkZJR19VREZfTkxTCkBAIC0xNjg5LDcgKzE2ODksNyBAQAogI2VuZGlmCiAJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQogCQl1ZGZfY2xvc2VfbHZpZChzYik7Ci0JdWRmX3JlbGVhc2VfZGF0YShVREZfU0JfTFZJREJIKHNiKSk7CisJYnJlbHNlKFVERl9TQl9MVklEQkgoc2IpKTsKIAlVREZfU0JfRlJFRShzYik7CiAJa2ZyZWUoc2JpKTsKIAlzYi0+c19mc19pbmZvID0gTlVMTDsKQEAgLTE3NTgsNyArMTc1OCw3IEBACiAJCWlmIChVREZfU0JfUEFSVFRZUEUoc2IsIFVERl9TQl9QQVJUSVRJT04oc2IpKSA9PSBVREZfU1BBUkFCTEVfTUFQMTUpCiAJCXsKIAkJCWZvciAoaT0wOyBpPDQ7IGkrKykKLQkJCQl1ZGZfcmVsZWFzZV9kYXRhKFVERl9TQl9UWVBFU1BBUihzYiwgVURGX1NCX1BBUlRJVElPTihzYikpLnNfc3Bhcl9tYXBbaV0pOworCQkJCWJyZWxzZShVREZfU0JfVFlQRVNQQVIoc2IsIFVERl9TQl9QQVJUSVRJT04oc2IpKS5zX3NwYXJfbWFwW2ldKTsKIAkJfQogCX0KICNpZmRlZiBDT05GSUdfVURGX05MUwpAQCAtMTc2Nyw3ICsxNzY3LDcgQEAKICNlbmRpZgogCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKIAkJdWRmX2Nsb3NlX2x2aWQoc2IpOwotCXVkZl9yZWxlYXNlX2RhdGEoVURGX1NCX0xWSURCSChzYikpOworCWJyZWxzZShVREZfU0JfTFZJREJIKHNiKSk7CiAJVURGX1NCX0ZSRUUoc2IpOwogCWtmcmVlKHNiLT5zX2ZzX2luZm8pOwogCXNiLT5zX2ZzX2luZm8gPSBOVUxMOwpAQCAtMTgzNyw3ICsxODM3LDcgQEAKIAl9CiAJZWxzZSBpZiAoaWRlbnQgIT0gVEFHX0lERU5UX1NCRCkKIAl7Ci0JCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQlicmVsc2UoYmgpOwogCQlwcmludGsoS0VSTl9FUlIgInVkZjogdWRmX2NvdW50X2ZyZWUgZmFpbGVkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTg1OSw3ICsxODU5LDcgQEAKIAkJfQogCQlpZiAoIGJ5dGVzICkKIAkJewotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQlicmVsc2UoYmgpOwogCQkJbmV3YmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgbG9jLCArK2Jsb2NrKTsKIAkJCWJoID0gdWRmX3RyZWFkKHNiLCBuZXdibG9jayk7CiAJCQlpZiAoIWJoKQpAQCAtMTg3MSw3ICsxODcxLDcgQEAKIAkJCXB0ciA9ICh1aW50OF90ICopYmgtPmJfZGF0YTsKIAkJfQogCX0KLQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwlicmVsc2UoYmgpOwogCiBvdXQ6CiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMTg4MywyMSArMTg4MywyMCBAQAogdWRmX2NvdW50X2ZyZWVfdGFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICogdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGFjY3VtID0gMDsKLQl1aW50MzJfdCBleHRvZmZzZXQsIGVsZW47Ci0Ja2VybmVsX2xiX2FkZHIgYmxvYywgZWxvYzsKKwl1aW50MzJfdCBlbGVuOworCWtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJaW50OF90IGV0eXBlOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOworCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvczsKIAogCWxvY2tfa2VybmVsKCk7CiAKLQlibG9jID0gVURGX0lfTE9DQVRJT04odGFibGUpOwotCWV4dG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkpOworCWVwb3MuYmxvY2sgPSBVREZfSV9MT0NBVElPTih0YWJsZSk7CisJZXBvcy5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHVuYWxsb2NTcGFjZUVudHJ5KTsKKwllcG9zLmJoID0gTlVMTDsKIAotCXdoaWxlICgoZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KHRhYmxlLCAmYmxvYywgJmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmYmgsIDEpKSAhPSAtMSkKLQl7CisJd2hpbGUgKChldHlwZSA9IHVkZl9uZXh0X2FleHQodGFibGUsICZlcG9zLCAmZWxvYywgJmVsZW4sIDEpKSAhPSAtMSkKIAkJYWNjdW0gKz0gKGVsZW4gPj4gdGFibGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOwotCX0KLQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwlicmVsc2UoZXBvcy5iaCk7CiAKIAl1bmxvY2tfa2VybmVsKCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3VkZi9zeW1saW5rLmMgYi9mcy91ZGYvc3ltbGluay5jCmluZGV4IGJhMDY4YTcuLjEyNjEzYjYgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9zeW1saW5rLmMKKysrIGIvZnMvdWRmL3N5bWxpbmsuYwpAQCAtOTUsNyArOTUsNyBAQAogCX0KIAogCXVkZl9wY190b19jaGFyKGlub2RlLT5pX3NiLCBzeW1saW5rLCBpbm9kZS0+aV9zaXplLCBwKTsKLQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwlicmVsc2UoYmgpOwogCiAJdW5sb2NrX2tlcm5lbCgpOwogCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi90cnVuY2F0ZS5jIGIvZnMvdWRmL3RydW5jYXRlLmMKaW5kZXggMGFiZDY2Yy4uNzc5NzVhZSAxMDA2NDQKLS0tIGEvZnMvdWRmL3RydW5jYXRlLmMKKysrIGIvZnMvdWRmL3RydW5jYXRlLmMKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlICJ1ZGZfaS5oIgogI2luY2x1ZGUgInVkZl9zYi5oIgogCi1zdGF0aWMgdm9pZCBleHRlbnRfdHJ1bmMoc3RydWN0IGlub2RlICogaW5vZGUsIGtlcm5lbF9sYl9hZGRyIGJsb2MsIGludCBleHRvZmZzZXQsCi0Ja2VybmVsX2xiX2FkZHIgZWxvYywgaW50OF90IGV0eXBlLCB1aW50MzJfdCBlbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1aW50MzJfdCBuZWxlbikKK3N0YXRpYyB2b2lkIGV4dGVudF90cnVuYyhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcywKKwlrZXJuZWxfbGJfYWRkciBlbG9jLCBpbnQ4X3QgZXR5cGUsIHVpbnQzMl90IGVsZW4sIHVpbnQzMl90IG5lbGVuKQogewogCWtlcm5lbF9sYl9hZGRyIG5lbG9jID0geyAwLCAwIH07CiAJaW50IGxhc3RfYmxvY2sgPSAoZWxlbiArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwpAQCAtNDksNyArNDksNyBAQAogCiAJaWYgKGVsZW4gIT0gbmVsZW4pCiAJewotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgYmxvYywgJmV4dG9mZnNldCwgbmVsb2MsIG5lbGVuLCBiaCwgMCk7CisJCXVkZl93cml0ZV9hZXh0KGlub2RlLCBlcG9zLCBuZWxvYywgbmVsZW4sIDApOwogCQlpZiAobGFzdF9ibG9jayAtIGZpcnN0X2Jsb2NrID4gMCkKIAkJewogCQkJaWYgKGV0eXBlID09IChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKQEAgLTYzLDE4ICs2MywxNiBAQAogCiB2b2lkIHVkZl9kaXNjYXJkX3ByZWFsbG9jKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogewotCWtlcm5lbF9sYl9hZGRyIGJsb2MsIGVsb2M7Ci0JdWludDMyX3QgZXh0b2Zmc2V0ID0gMCwgZWxlbiwgbmVsZW47CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0geyBOVUxMLCAwLCB7MCwgMH19OworCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJdWludDMyX3QgZWxlbiwgbmVsZW47CiAJdWludDY0X3QgbGJjb3VudCA9IDA7CiAJaW50OF90IGV0eXBlID0gLTEsIG5ldHlwZTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgYWRzaXplOwogCiAJaWYgKFVERl9JX0FMTE9DVFlQRShpbm9kZSkgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCIHx8CiAJCWlub2RlLT5pX3NpemUgPT0gVURGX0lfTEVORVhURU5UUyhpbm9kZSkpCi0JewogCQlyZXR1cm47Ci0JfQogCiAJaWYgKFVERl9JX0FMTE9DVFlQRShpbm9kZSkgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCiAJCWFkc2l6ZSA9IHNpemVvZihzaG9ydF9hZCk7CkBAIC04Myw1MiArODEsNTggQEAKIAllbHNlCiAJCWFkc2l6ZSA9IDA7CiAKLQlibG9jID0gVURGX0lfTE9DQVRJT04oaW5vZGUpOworCWVwb3MuYmxvY2sgPSBVREZfSV9MT0NBVElPTihpbm9kZSk7CiAKLQl3aGlsZSAoKG5ldHlwZSA9IHVkZl9uZXh0X2FleHQoaW5vZGUsICZibG9jLCAmZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZiaCwgMSkpICE9IC0xKQorCS8qIEZpbmQgdGhlIGxhc3QgZXh0ZW50IGluIHRoZSBmaWxlICovCisJd2hpbGUgKChuZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmZXBvcywgJmVsb2MsICZlbGVuLCAxKSkgIT0gLTEpCiAJewogCQlldHlwZSA9IG5ldHlwZTsKIAkJbGJjb3VudCArPSBlbGVuOwotCQlpZiAobGJjb3VudCA+IGlub2RlLT5pX3NpemUgJiYgbGJjb3VudCAtIGlub2RlLT5pX3NpemUgPCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpCisJCWlmIChsYmNvdW50ID4gaW5vZGUtPmlfc2l6ZSAmJiBsYmNvdW50IC0gZWxlbiA8IGlub2RlLT5pX3NpemUpCiAJCXsKKwkJCVdBUk5fT04obGJjb3VudCAtIGlub2RlLT5pX3NpemUgPj0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKIAkJCW5lbGVuID0gZWxlbiAtIChsYmNvdW50IC0gaW5vZGUtPmlfc2l6ZSk7Ci0JCQlleHRlbnRfdHJ1bmMoaW5vZGUsIGJsb2MsIGV4dG9mZnNldC1hZHNpemUsIGVsb2MsIGV0eXBlLCBlbGVuLCBiaCwgbmVsZW4pOworCQkJZXBvcy5vZmZzZXQgLT0gYWRzaXplOworCQkJZXh0ZW50X3RydW5jKGlub2RlLCAmZXBvcywgZWxvYywgZXR5cGUsIGVsZW4sIG5lbGVuKTsKKwkJCWVwb3Mub2Zmc2V0ICs9IGFkc2l6ZTsKIAkJCWxiY291bnQgPSBpbm9kZS0+aV9zaXplOwogCQl9CiAJfQotCWlmIChldHlwZSA9PSAoRVhUX05PVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQotCXsKLQkJZXh0b2Zmc2V0IC09IGFkc2l6ZTsKKwlpZiAoZXR5cGUgPT0gKEVYVF9OT1RfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkgeworCQllcG9zLm9mZnNldCAtPSBhZHNpemU7CiAJCWxiY291bnQgLT0gZWxlbjsKLQkJZXh0ZW50X3RydW5jKGlub2RlLCBibG9jLCBleHRvZmZzZXQsIGVsb2MsIGV0eXBlLCBlbGVuLCBiaCwgMCk7Ci0JCWlmICghYmgpCisJCWV4dGVudF90cnVuYyhpbm9kZSwgJmVwb3MsIGVsb2MsIGV0eXBlLCBlbGVuLCAwKTsKKwkJaWYgKCFlcG9zLmJoKQogCQl7Ci0JCQlVREZfSV9MRU5BTExPQyhpbm9kZSkgPSBleHRvZmZzZXQgLSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpOworCQkJVURGX0lfTEVOQUxMT0MoaW5vZGUpID0gZXBvcy5vZmZzZXQgLSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpOwogCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlzdHJ1Y3QgYWxsb2NFeHREZXNjICphZWQgPSAoc3RydWN0IGFsbG9jRXh0RGVzYyAqKShiaC0+Yl9kYXRhKTsKLQkJCWFlZC0+bGVuZ3RoQWxsb2NEZXNjcyA9IGNwdV90b19sZTMyKGV4dG9mZnNldCAtIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSk7CisJCQlzdHJ1Y3QgYWxsb2NFeHREZXNjICphZWQgPSAoc3RydWN0IGFsbG9jRXh0RGVzYyAqKShlcG9zLmJoLT5iX2RhdGEpOworCQkJYWVkLT5sZW5ndGhBbGxvY0Rlc2NzID0gY3B1X3RvX2xlMzIoZXBvcy5vZmZzZXQgLSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpOwogCQkJaWYgKCFVREZfUVVFUllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBVREZfU0JfVURGUkVWKGlub2RlLT5pX3NiKSA+PSAweDAyMDEpCi0JCQkJdWRmX3VwZGF0ZV90YWcoYmgtPmJfZGF0YSwgZXh0b2Zmc2V0KTsKKwkJCQl1ZGZfdXBkYXRlX3RhZyhlcG9zLmJoLT5iX2RhdGEsIGVwb3Mub2Zmc2V0KTsKIAkJCWVsc2UKLQkJCQl1ZGZfdXBkYXRlX3RhZyhiaC0+Yl9kYXRhLCBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpOwotCQkJbWFya19idWZmZXJfZGlydHlfaW5vZGUoYmgsIGlub2RlKTsKKwkJCQl1ZGZfdXBkYXRlX3RhZyhlcG9zLmJoLT5iX2RhdGEsIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSk7CisJCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShlcG9zLmJoLCBpbm9kZSk7CiAJCX0KIAl9CiAJVURGX0lfTEVORVhURU5UUyhpbm9kZSkgPSBsYmNvdW50OwogCi0JdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJV0FSTl9PTihsYmNvdW50ICE9IGlub2RlLT5pX3NpemUpOworCWJyZWxzZShlcG9zLmJoKTsKIH0KIAogdm9pZCB1ZGZfdHJ1bmNhdGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIHsKLQlrZXJuZWxfbGJfYWRkciBibG9jLCBlbG9jLCBuZWxvYyA9IHsgMCwgMCB9OwotCXVpbnQzMl90IGV4dG9mZnNldCwgZWxlbiwgb2Zmc2V0LCBuZWxlbiA9IDAsIGxlbGVuID0gMCwgbGVuYWxsb2M7CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zOworCWtlcm5lbF9sYl9hZGRyIGVsb2MsIG5lbG9jID0geyAwLCAwIH07CisJdWludDMyX3QgZWxlbiwgbmVsZW4gPSAwLCBpbmRpcmVjdF9leHRfbGVuID0gMCwgbGVuYWxsb2M7CiAJaW50OF90IGV0eXBlOwotCWludCBmaXJzdF9ibG9jayA9IGlub2RlLT5pX3NpemUgPj4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXNlY3Rvcl90IGZpcnN0X2Jsb2NrID0gaW5vZGUtPmlfc2l6ZSA+PiBzYi0+c19ibG9ja3NpemVfYml0cywgb2Zmc2V0OworCWxvZmZfdCBieXRlX29mZnNldDsKIAlpbnQgYWRzaXplOwogCiAJaWYgKFVERl9JX0FMTE9DVFlQRShpbm9kZSkgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCkBAIC0xMzYsMTU4ICsxNDAsMTMwIEBACiAJZWxzZSBpZiAoVURGX0lfQUxMT0NUWVBFKGlub2RlKSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQogCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CiAJZWxzZQotCQlhZHNpemUgPSAwOworCQlCVUcoKTsKIAotCWV0eXBlID0gaW5vZGVfYm1hcChpbm9kZSwgZmlyc3RfYmxvY2ssICZibG9jLCAmZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZvZmZzZXQsICZiaCk7Ci0Jb2Zmc2V0ICs9IChpbm9kZS0+aV9zaXplICYgKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKTsKKwlldHlwZSA9IGlub2RlX2JtYXAoaW5vZGUsIGZpcnN0X2Jsb2NrLCAmZXBvcywgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KTsKKwlieXRlX29mZnNldCA9IChvZmZzZXQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHMpICsgKGlub2RlLT5pX3NpemUgJiAoc2ItPnNfYmxvY2tzaXplLTEpKTsKIAlpZiAoZXR5cGUgIT0gLTEpCiAJewotCQlleHRvZmZzZXQgLT0gYWRzaXplOwotCQlleHRlbnRfdHJ1bmMoaW5vZGUsIGJsb2MsIGV4dG9mZnNldCwgZWxvYywgZXR5cGUsIGVsZW4sIGJoLCBvZmZzZXQpOwotCQlleHRvZmZzZXQgKz0gYWRzaXplOwotCi0JCWlmIChvZmZzZXQpCi0JCQlsZW5hbGxvYyA9IGV4dG9mZnNldDsKKwkJZXBvcy5vZmZzZXQgLT0gYWRzaXplOworCQlleHRlbnRfdHJ1bmMoaW5vZGUsICZlcG9zLCBlbG9jLCBldHlwZSwgZWxlbiwgYnl0ZV9vZmZzZXQpOworCQllcG9zLm9mZnNldCArPSBhZHNpemU7CisJCWlmIChieXRlX29mZnNldCkKKwkJCWxlbmFsbG9jID0gZXBvcy5vZmZzZXQ7CiAJCWVsc2UKLQkJCWxlbmFsbG9jID0gZXh0b2Zmc2V0IC0gYWRzaXplOworCQkJbGVuYWxsb2MgPSBlcG9zLm9mZnNldCAtIGFkc2l6ZTsKIAotCQlpZiAoIWJoKQorCQlpZiAoIWVwb3MuYmgpCiAJCQlsZW5hbGxvYyAtPSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpOwogCQllbHNlCiAJCQlsZW5hbGxvYyAtPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYyk7CiAKLQkJd2hpbGUgKChldHlwZSA9IHVkZl9jdXJyZW50X2FleHQoaW5vZGUsICZibG9jLCAmZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZiaCwgMCkpICE9IC0xKQorCQl3aGlsZSAoKGV0eXBlID0gdWRmX2N1cnJlbnRfYWV4dChpbm9kZSwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMCkpICE9IC0xKQogCQl7CiAJCQlpZiAoZXR5cGUgPT0gKEVYVF9ORVhUX0VYVEVOVF9BTExPQ0RFQ1MgPj4gMzApKQogCQkJewotCQkJCXVkZl93cml0ZV9hZXh0KGlub2RlLCBibG9jLCAmZXh0b2Zmc2V0LCBuZWxvYywgbmVsZW4sIGJoLCAwKTsKLQkJCQlleHRvZmZzZXQgPSAwOwotCQkJCWlmIChsZWxlbikKKwkJCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJmVwb3MsIG5lbG9jLCBuZWxlbiwgMCk7CisJCQkJaWYgKGluZGlyZWN0X2V4dF9sZW4pCiAJCQkJewotCQkJCQlpZiAoIWJoKQorCQkJCQkvKiBXZSBtYW5hZ2VkIHRvIGZyZWUgYWxsIGV4dGVudHMgaW4gdGhlCisJCQkJCSAqIGluZGlyZWN0IGV4dGVudCAtIGZyZWUgaXQgdG9vICovCisJCQkJCWlmICghZXBvcy5iaCkKIAkJCQkJCUJVRygpOwotCQkJCQllbHNlCi0JCQkJCQltZW1zZXQoYmgtPmJfZGF0YSwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpKTsKLQkJCQkJdWRmX2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwgYmxvYywgMCwgbGVsZW4pOworCQkJCQl1ZGZfZnJlZV9ibG9ja3Moc2IsIGlub2RlLCBlcG9zLmJsb2NrLCAwLCBpbmRpcmVjdF9leHRfbGVuKTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJaWYgKCFiaCkKKwkJCQkJaWYgKCFlcG9zLmJoKQogCQkJCQl7CiAJCQkJCQlVREZfSV9MRU5BTExPQyhpbm9kZSkgPSBsZW5hbGxvYzsKIAkJCQkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQkJCQl9CiAJCQkJCWVsc2UKIAkJCQkJewotCQkJCQkJc3RydWN0IGFsbG9jRXh0RGVzYyAqYWVkID0gKHN0cnVjdCBhbGxvY0V4dERlc2MgKikoYmgtPmJfZGF0YSk7CisJCQkJCQlzdHJ1Y3QgYWxsb2NFeHREZXNjICphZWQgPSAoc3RydWN0IGFsbG9jRXh0RGVzYyAqKShlcG9zLmJoLT5iX2RhdGEpOwogCQkJCQkJYWVkLT5sZW5ndGhBbGxvY0Rlc2NzID0gY3B1X3RvX2xlMzIobGVuYWxsb2MpOwotCQkJCQkJaWYgKCFVREZfUVVFUllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBVREZfU0JfVURGUkVWKGlub2RlLT5pX3NiKSA+PSAweDAyMDEpCi0JCQkJCQkJdWRmX3VwZGF0ZV90YWcoYmgtPmJfZGF0YSwgbGVuYWxsb2MgKworCQkJCQkJaWYgKCFVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBVREZfU0JfVURGUkVWKHNiKSA+PSAweDAyMDEpCisJCQkJCQkJdWRmX3VwZGF0ZV90YWcoZXBvcy5iaC0+Yl9kYXRhLCBsZW5hbGxvYyArCiAJCQkJCQkJCXNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSk7CiAJCQkJCQllbHNlCi0JCQkJCQkJdWRmX3VwZGF0ZV90YWcoYmgtPmJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpKTsKLQkJCQkJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKGJoLCBpbm9kZSk7CisJCQkJCQkJdWRmX3VwZGF0ZV90YWcoZXBvcy5iaC0+Yl9kYXRhLCBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpOworCQkJCQkJbWFya19idWZmZXJfZGlydHlfaW5vZGUoZXBvcy5iaCwgaW5vZGUpOwogCQkJCQl9CiAJCQkJfQotCi0JCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7Ci0JCQkJZXh0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpOwotCQkJCWJsb2MgPSBlbG9jOwotCQkJCWJoID0gdWRmX3RyZWFkKGlub2RlLT5pX3NiLCB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgYmxvYywgMCkpOworCQkJCWJyZWxzZShlcG9zLmJoKTsKKwkJCQllcG9zLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKTsKKwkJCQllcG9zLmJsb2NrID0gZWxvYzsKKwkJCQllcG9zLmJoID0gdWRmX3RyZWFkKHNiLCB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgZWxvYywgMCkpOwogCQkJCWlmIChlbGVuKQotCQkJCQlsZWxlbiA9IChlbGVuICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkgPj4KLQkJCQkJCWlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCQkJCQlpbmRpcmVjdF9leHRfbGVuID0gKGVsZW4gKworCQkJCQkJc2ItPnNfYmxvY2tzaXplIC0gMSkgPj4KKwkJCQkJCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCQkJCWVsc2UKLQkJCQkJbGVsZW4gPSAxOworCQkJCQlpbmRpcmVjdF9leHRfbGVuID0gMTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQlleHRlbnRfdHJ1bmMoaW5vZGUsIGJsb2MsIGV4dG9mZnNldCwgZWxvYywgZXR5cGUsIGVsZW4sIGJoLCAwKTsKLQkJCQlleHRvZmZzZXQgKz0gYWRzaXplOworCQkJCWV4dGVudF90cnVuYyhpbm9kZSwgJmVwb3MsIGVsb2MsIGV0eXBlLCBlbGVuLCAwKTsKKwkJCQllcG9zLm9mZnNldCArPSBhZHNpemU7CiAJCQl9CiAJCX0KIAotCQlpZiAobGVsZW4pCisJCWlmIChpbmRpcmVjdF9leHRfbGVuKQogCQl7Ci0JCQlpZiAoIWJoKQorCQkJaWYgKCFlcG9zLmJoKQogCQkJCUJVRygpOwotCQkJZWxzZQotCQkJCW1lbXNldChiaC0+Yl9kYXRhLCAweDAwLCBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpOwotCQkJdWRmX2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwgYmxvYywgMCwgbGVsZW4pOworCQkJdWRmX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwgZXBvcy5ibG9jaywgMCwgaW5kaXJlY3RfZXh0X2xlbik7CiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlpZiAoIWJoKQorCQkJaWYgKCFlcG9zLmJoKQogCQkJewogCQkJCVVERl9JX0xFTkFMTE9DKGlub2RlKSA9IGxlbmFsbG9jOwogCQkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCXN0cnVjdCBhbGxvY0V4dERlc2MgKmFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKGJoLT5iX2RhdGEpOworCQkJCXN0cnVjdCBhbGxvY0V4dERlc2MgKmFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKGVwb3MuYmgtPmJfZGF0YSk7CiAJCQkJYWVkLT5sZW5ndGhBbGxvY0Rlc2NzID0gY3B1X3RvX2xlMzIobGVuYWxsb2MpOwotCQkJCWlmICghVURGX1FVRVJZX0ZMQUcoaW5vZGUtPmlfc2IsIFVERl9GTEFHX1NUUklDVCkgfHwgVURGX1NCX1VERlJFVihpbm9kZS0+aV9zYikgPj0gMHgwMjAxKQotCQkJCQl1ZGZfdXBkYXRlX3RhZyhiaC0+Yl9kYXRhLCBsZW5hbGxvYyArCisJCQkJaWYgKCFVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBVREZfU0JfVURGUkVWKHNiKSA+PSAweDAyMDEpCisJCQkJCXVkZl91cGRhdGVfdGFnKGVwb3MuYmgtPmJfZGF0YSwgbGVuYWxsb2MgKwogCQkJCQkJc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpKTsKIAkJCQllbHNlCi0JCQkJCXVkZl91cGRhdGVfdGFnKGJoLT5iX2RhdGEsIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSk7Ci0JCQkJbWFya19idWZmZXJfZGlydHlfaW5vZGUoYmgsIGlub2RlKTsKKwkJCQkJdWRmX3VwZGF0ZV90YWcoZXBvcy5iaC0+Yl9kYXRhLCBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpOworCQkJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKGVwb3MuYmgsIGlub2RlKTsKIAkJCX0KIAkJfQogCX0KIAllbHNlIGlmIChpbm9kZS0+aV9zaXplKQogCXsKLQkJaWYgKG9mZnNldCkKKwkJaWYgKGJ5dGVfb2Zmc2V0KQogCQl7CisJCQlrZXJuZWxfbG9uZ19hZCBleHRlbnQ7CisKIAkJCS8qCiAJCQkgKiAgT0ssIHRoZXJlIGlzIG5vdCBleHRlbnQgY292ZXJpbmcgaW5vZGUtPmlfc2l6ZSBhbmQKIAkJCSAqICBubyBleHRlbnQgYWJvdmUgaW5vZGUtPmlfc2l6ZSA9PiB0cnVuY2F0ZSBpcwotCQkJICogIGV4dGVuZGluZyB0aGUgZmlsZSBieSAnb2Zmc2V0Jy4KKwkJCSAqICBleHRlbmRpbmcgdGhlIGZpbGUgYnkgJ29mZnNldCcgYmxvY2tzLgogCQkJICovCi0JCQlpZiAoKCFiaCAmJiBleHRvZmZzZXQgPT0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSkgfHwKLQkJCSAgICAoYmggJiYgZXh0b2Zmc2V0ID09IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSkpIHsKLQkJCQkvKiBGaWxlIGhhcyBubyBleHRlbnRzIGF0IGFsbCEgKi8KLQkJCQltZW1zZXQoJmVsb2MsIDB4MDAsIHNpemVvZihrZXJuZWxfbGJfYWRkcikpOwotCQkJCWVsZW4gPSBFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgfCBvZmZzZXQ7Ci0JCQkJdWRmX2FkZF9hZXh0KGlub2RlLCAmYmxvYywgJmV4dG9mZnNldCwgZWxvYywgZWxlbiwgJmJoLCAxKTsKKwkJCWlmICgoIWVwb3MuYmggJiYgZXBvcy5vZmZzZXQgPT0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSkgfHwKKwkJCSAgICAoZXBvcy5iaCAmJiBlcG9zLm9mZnNldCA9PSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpKSB7CisJCQkJLyogRmlsZSBoYXMgbm8gZXh0ZW50cyBhdCBhbGwgb3IgaGFzIGVtcHR5IGxhc3QKKwkJCQkgKiBpbmRpcmVjdCBleHRlbnQhIENyZWF0ZSBhIGZha2UgZXh0ZW50Li4uICovCisJCQkJZXh0ZW50LmV4dExvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSA9IDA7CisJCQkJZXh0ZW50LmV4dExvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IDA7CisJCQkJZXh0ZW50LmV4dExlbmd0aCA9IEVYVF9OT1RfUkVDT1JERURfTk9UX0FMTE9DQVRFRDsKIAkJCX0KIAkJCWVsc2UgewotCQkJCWV4dG9mZnNldCAtPSBhZHNpemU7Ci0JCQkJZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmYmxvYywgJmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmYmgsIDEpOwotCQkJCWlmIChldHlwZSA9PSAoRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEID4+IDMwKSkKLQkJCQl7Ci0JCQkJCWV4dG9mZnNldCAtPSBhZHNpemU7Ci0JCQkJCWVsZW4gPSBFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgfCAoZWxlbiArIG9mZnNldCk7Ci0JCQkJCXVkZl93cml0ZV9hZXh0KGlub2RlLCBibG9jLCAmZXh0b2Zmc2V0LCBlbG9jLCBlbGVuLCBiaCwgMCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGV0eXBlID09IChFWFRfTk9UX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCi0JCQkJewotCQkJCQlrZXJuZWxfbGJfYWRkciBuZWxvYyA9IHsgMCwgMCB9OwotCQkJCQlleHRvZmZzZXQgLT0gYWRzaXplOwotCQkJCQluZWxlbiA9IEVYVF9OT1RfUkVDT1JERURfTk9UX0FMTE9DQVRFRCB8Ci0JCQkJCQkoKGVsZW4gKyBvZmZzZXQgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSAmCi0JCQkJCQl+KGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKTsKLQkJCQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGJsb2MsICZleHRvZmZzZXQsIG5lbG9jLCBuZWxlbiwgYmgsIDEpOwotCQkJCQl1ZGZfYWRkX2FleHQoaW5vZGUsICZibG9jLCAmZXh0b2Zmc2V0LCBlbG9jLCAoZXR5cGUgPDwgMzApIHwgZWxlbiwgJmJoLCAxKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJaWYgKGVsZW4gJiAoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkpCi0JCQkJCXsKLQkJCQkJCWV4dG9mZnNldCAtPSBhZHNpemU7Ci0JCQkJCQllbGVuID0gRVhUX1JFQ09SREVEX0FMTE9DQVRFRCB8Ci0JCQkJCQkJKChlbGVuICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkgJgotCQkJCQkJCX4oaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkpOwotCQkJCQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGJsb2MsICZleHRvZmZzZXQsIGVsb2MsIGVsZW4sIGJoLCAxKTsKLQkJCQkJfQotCQkJCQltZW1zZXQoJmVsb2MsIDB4MDAsIHNpemVvZihrZXJuZWxfbGJfYWRkcikpOwotCQkJCQllbGVuID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwgb2Zmc2V0OwotCQkJCQl1ZGZfYWRkX2FleHQoaW5vZGUsICZibG9jLCAmZXh0b2Zmc2V0LCBlbG9jLCBlbGVuLCAmYmgsIDEpOwotCQkJCX0KKwkJCQllcG9zLm9mZnNldCAtPSBhZHNpemU7CisJCQkJZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmZXBvcywKKwkJCQkJJmV4dGVudC5leHRMb2NhdGlvbiwgJmV4dGVudC5leHRMZW5ndGgsIDApOworCQkJCWV4dGVudC5leHRMZW5ndGggfD0gZXR5cGUgPDwgMzA7CiAJCQl9CisJCQl1ZGZfZXh0ZW5kX2ZpbGUoaW5vZGUsICZlcG9zLCAmZXh0ZW50LCBvZmZzZXQrKChpbm9kZS0+aV9zaXplICYgKHNiLT5zX2Jsb2Nrc2l6ZS0xKSkgIT0gMCkpOwogCQl9CiAJfQogCVVERl9JX0xFTkVYVEVOVFMoaW5vZGUpID0gaW5vZGUtPmlfc2l6ZTsKIAotCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShlcG9zLmJoKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZfc2IuaCBiL2ZzL3VkZi91ZGZfc2IuaAppbmRleCAxMTBmOGQ2Li4zYjJlNmM4IDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmX3NiLmgKKysrIGIvZnMvdWRmL3VkZl9zYi5oCkBAIC05Myw3ICs5Myw3IEBACiAJZm9yIChpPTA7IGk8bnJfZ3JvdXBzOyBpKyspXAogCXtcCiAJCWlmIChVREZfU0JfQklUTUFQKFgsWSxaLGkpKVwKLQkJCXVkZl9yZWxlYXNlX2RhdGEoVURGX1NCX0JJVE1BUChYLFksWixpKSk7XAorCQkJYnJlbHNlKFVERl9TQl9CSVRNQVAoWCxZLFosaSkpO1wKIAl9XAogCWlmIChzaXplIDw9IFBBR0VfU0laRSlcCiAJCWtmcmVlKFVERl9TQl9QQVJUTUFQUyhYKVtZXS5aLnNfYml0bWFwKTtcCmRpZmYgLS1naXQgYS9mcy91ZGYvdWRmZGVjbC5oIGIvZnMvdWRmL3VkZmRlY2wuaAppbmRleCBlZTFkZWNlLi42N2RlZDI4IDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmZGVjbC5oCisrKyBiL2ZzL3VkZi91ZGZkZWNsLmgKQEAgLTc3LDYgKzc3LDEzIEBACiAJdWludDhfdCB1X2xlbjsKIH07CiAKK3N0cnVjdCBleHRlbnRfcG9zaXRpb24geworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJdWludDMyX3Qgb2Zmc2V0OworCWtlcm5lbF9sYl9hZGRyIGJsb2NrOworfTsKKworCiAvKiBzdXBlci5jICovCiBleHRlcm4gdm9pZCB1ZGZfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogZXh0ZXJuIHZvaWQgdWRmX3dhcm5pbmcoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwpAQCAtOTgsMTMgKzEwNSwxNCBAQAogZXh0ZXJuIHZvaWQgdWRmX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCB1ZGZfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7Ci1leHRlcm4gbG9uZyB1ZGZfYmxvY2tfbWFwKHN0cnVjdCBpbm9kZSAqLCBsb25nKTsKLWV4dGVybiBpbnQ4X3QgaW5vZGVfYm1hcChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAqLCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAqLCB1aW50MzJfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOwotZXh0ZXJuIGludDhfdCB1ZGZfYWRkX2FleHQoc3RydWN0IGlub2RlICosIGtlcm5lbF9sYl9hZGRyICosIGludCAqLCBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqKiwgaW50KTsKLWV4dGVybiBpbnQ4X3QgdWRmX3dyaXRlX2FleHQoc3RydWN0IGlub2RlICosIGtlcm5lbF9sYl9hZGRyLCBpbnQgKiwga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKLWV4dGVybiBpbnQ4X3QgdWRmX2RlbGV0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqLCBrZXJuZWxfbGJfYWRkciwgaW50LCBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKLWV4dGVybiBpbnQ4X3QgdWRmX25leHRfYWV4dChzdHJ1Y3QgaW5vZGUgKiwga2VybmVsX2xiX2FkZHIgKiwgaW50ICosIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKiwgaW50KTsKLWV4dGVybiBpbnQ4X3QgdWRmX2N1cnJlbnRfYWV4dChzdHJ1Y3QgaW5vZGUgKiwga2VybmVsX2xiX2FkZHIgKiwgaW50ICosIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKiwgaW50KTsKK2V4dGVybiBsb25nIHVkZl9ibG9ja19tYXAoc3RydWN0IGlub2RlICosIHNlY3Rvcl90KTsKK2V4dGVybiBpbnQgdWRmX2V4dGVuZF9maWxlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosIGtlcm5lbF9sb25nX2FkICosIHNlY3Rvcl90KTsKK2V4dGVybiBpbnQ4X3QgaW5vZGVfYm1hcChzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKiwga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwgc2VjdG9yX3QgKik7CitleHRlcm4gaW50OF90IHVkZl9hZGRfYWV4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqLCBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QsIGludCk7CitleHRlcm4gaW50OF90IHVkZl93cml0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosIGtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCwgaW50KTsKK2V4dGVybiBpbnQ4X3QgdWRmX2RlbGV0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uLCBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QpOworZXh0ZXJuIGludDhfdCB1ZGZfbmV4dF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIGludCk7CitleHRlcm4gaW50OF90IHVkZl9jdXJyZW50X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKiwga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwgaW50KTsKIAogLyogbWlzYy5jICovCiBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfdGdldGJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50KTsKQEAgLTExMyw3ICsxMjEsNiBAQAogZXh0ZXJuIHN0cnVjdCBnZW5lcmljRm9ybWF0ICp1ZGZfZ2V0X2V4dGVuZGVkYXR0cihzdHJ1Y3QgaW5vZGUgKiwgdWludDMyX3QsIHVpbnQ4X3QpOwogZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX3JlYWRfdGFnZ2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQxNl90ICopOwogZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX3JlYWRfcHRhZ2dlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90LCB1aW50MTZfdCAqKTsKLWV4dGVybiB2b2lkIHVkZl9yZWxlYXNlX2RhdGEoc3RydWN0IGJ1ZmZlcl9oZWFkICopOwogZXh0ZXJuIHZvaWQgdWRmX3VwZGF0ZV90YWcoY2hhciAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgdWRmX25ld190YWcoY2hhciAqLCB1aW50MTZfdCwgdWludDE2X3QsIHVpbnQxNl90LCB1aW50MzJfdCwgaW50KTsKIApAQCAtMTUxLDcgKzE1OCw3IEBACiBleHRlcm4gaW50IHVkZl9mc3luY19maWxlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKIAogLyogZGlyZWN0b3J5LmMgKi8KLWV4dGVybiBzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqIHVkZl9maWxlaWRlbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90ICosIHN0cnVjdCB1ZGZfZmlsZWlkZW50X2JoICosIHN0cnVjdCBmaWxlSWRlbnREZXNjICosIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIHVpbnQzMl90ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKik7CitleHRlcm4gc3RydWN0IGZpbGVJZGVudERlc2MgKiB1ZGZfZmlsZWlkZW50X3JlYWQoc3RydWN0IGlub2RlICosIGxvZmZfdCAqLCBzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCAqLCBzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIHNlY3Rvcl90ICopOwogZXh0ZXJuIHN0cnVjdCBmaWxlSWRlbnREZXNjICogdWRmX2dldF9maWxlaWRlbnQodm9pZCAqIGJ1ZmZlciwgaW50IGJ1ZnNpemUsIGludCAqIG9mZnNldCk7CiBleHRlcm4gbG9uZ19hZCAqIHVkZl9nZXRfZmlsZWxvbmdhZCh1aW50OF90ICosIGludCwgaW50ICosIGludCk7CiBleHRlcm4gc2hvcnRfYWQgKiB1ZGZfZ2V0X2ZpbGVzaG9ydGFkKHVpbnQ4X3QgKiwgaW50LCBpbnQgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9kaXIuYyBiL2ZzL3Vmcy9kaXIuYwppbmRleCA0ZmI4YjJlLi4xNTQ0NTIxIDEwMDY0NAotLS0gYS9mcy91ZnMvZGlyLmMKKysrIGIvZnMvdWZzL2Rpci5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdWZzX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgInN3YWIuaCIKICNpbmNsdWRlICJ1dGlsLmgiCmRpZmYgLS1naXQgYS9mcy91ZnMvc3VwZXIuYyBiL2ZzL3Vmcy9zdXBlci5jCmluZGV4IGJlN2M0OGMuLjIyZmY2ZWQgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9zdXBlci5jCisrKyBiL2ZzL3Vmcy9zdXBlci5jCkBAIC0xMjM3LDggKzEyMzcsNyBAQAogewogCXN0cnVjdCB1ZnNfaW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IHVmc19pbm9kZV9pbmZvICopIGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKLQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKKwlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogfQogIAogc3RhdGljIGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL3V0aW1lcy5jIGIvZnMvdXRpbWVzLmMKaW5kZXggOTljZjJjYi4uNDgwZjdjOCAxMDA2NDQKLS0tIGEvZnMvdXRpbWVzLmMKKysrIGIvZnMvdXRpbWVzLmMKQEAgLTEsOCArMSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXRpbWUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTIwLDU0ICsyMiwxOCBAQAogICogbXVzdCBiZSBvd25lciBvciBoYXZlIHdyaXRlIHBlcm1pc3Npb24uCiAgKiBFbHNlLCB1cGRhdGUgZnJvbSAqdGltZXMsIG11c3QgYmUgb3duZXIgb3Igc3VwZXIgdXNlci4KICAqLwotYXNtbGlua2FnZSBsb25nIHN5c191dGltZShjaGFyIF9fdXNlciAqIGZpbGVuYW1lLCBzdHJ1Y3QgdXRpbWJ1ZiBfX3VzZXIgKiB0aW1lcykKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdXRpbWUoY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBzdHJ1Y3QgdXRpbWJ1ZiBfX3VzZXIgKnRpbWVzKQogewotCWludCBlcnJvcjsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOwotCXN0cnVjdCBpbm9kZSAqIGlub2RlOwotCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKKwlzdHJ1Y3QgdGltZXNwZWMgdHZbMl07CiAKLQllcnJvciA9IHVzZXJfcGF0aF93YWxrKGZpbGVuYW1lLCAmbmQpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0JaW5vZGUgPSBuZC5kZW50cnktPmRfaW5vZGU7Ci0KLQllcnJvciA9IC1FUk9GUzsKLQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKLQkJZ290byBkcHV0X2FuZF9vdXQ7Ci0KLQkvKiBEb24ndCB3b3JyeSwgdGhlIGNoZWNrcyBhcmUgZG9uZSBpbiBpbm9kZV9jaGFuZ2Vfb2soKSAqLwotCW5ld2F0dHJzLmlhX3ZhbGlkID0gQVRUUl9DVElNRSB8IEFUVFJfTVRJTUUgfCBBVFRSX0FUSU1FOwogCWlmICh0aW1lcykgewotCQllcnJvciA9IC1FUEVSTTsKLQkJaWYgKElTX0FQUEVORChpbm9kZSkgfHwgSVNfSU1NVVRBQkxFKGlub2RlKSkKLQkJCWdvdG8gZHB1dF9hbmRfb3V0OwotCi0JCWVycm9yID0gZ2V0X3VzZXIobmV3YXR0cnMuaWFfYXRpbWUudHZfc2VjLCAmdGltZXMtPmFjdGltZSk7Ci0JCW5ld2F0dHJzLmlhX2F0aW1lLnR2X25zZWMgPSAwOwotCQlpZiAoIWVycm9yKQotCQkJZXJyb3IgPSBnZXRfdXNlcihuZXdhdHRycy5pYV9tdGltZS50dl9zZWMsICZ0aW1lcy0+bW9kdGltZSk7Ci0JCW5ld2F0dHJzLmlhX210aW1lLnR2X25zZWMgPSAwOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIGRwdXRfYW5kX291dDsKLQotCQluZXdhdHRycy5pYV92YWxpZCB8PSBBVFRSX0FUSU1FX1NFVCB8IEFUVFJfTVRJTUVfU0VUOwotCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXJyb3IgPSAtRUFDQ0VTOwotICAgICAgICAgICAgICAgIGlmIChJU19JTU1VVEFCTEUoaW5vZGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkcHV0X2FuZF9vdXQ7Ci0KLQkJaWYgKGN1cnJlbnQtPmZzdWlkICE9IGlub2RlLT5pX3VpZCAmJgotCQkgICAgKGVycm9yID0gdmZzX3Blcm1pc3Npb24oJm5kLCBNQVlfV1JJVEUpKSAhPSAwKQotCQkJZ290byBkcHV0X2FuZF9vdXQ7CisJCWlmIChnZXRfdXNlcih0dlswXS50dl9zZWMsICZ0aW1lcy0+YWN0aW1lKSB8fAorCQkgICAgZ2V0X3VzZXIodHZbMV0udHZfc2VjLCAmdGltZXMtPm1vZHRpbWUpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXR2WzBdLnR2X25zZWMgPSAwOworCQl0dlsxXS50dl9uc2VjID0gMDsKIAl9Ci0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWVycm9yID0gbm90aWZ5X2NoYW5nZShuZC5kZW50cnksICZuZXdhdHRycyk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci1kcHV0X2FuZF9vdXQ6Ci0JcGF0aF9yZWxlYXNlKCZuZCk7Ci1vdXQ6Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiBkb191dGltZXMoQVRfRkRDV0QsIGZpbGVuYW1lLCB0aW1lcyA/IHR2IDogTlVMTCwgMCk7CiB9CiAKICNlbmRpZgpAQCAtNzYsMTggKzQyLDM4IEBACiAgKiBtdXN0IGJlIG93bmVyIG9yIGhhdmUgd3JpdGUgcGVybWlzc2lvbi4KICAqIEVsc2UsIHVwZGF0ZSBmcm9tICp0aW1lcywgbXVzdCBiZSBvd25lciBvciBzdXBlciB1c2VyLgogICovCi1sb25nIGRvX3V0aW1lcyhpbnQgZGZkLCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHN0cnVjdCB0aW1ldmFsICp0aW1lcykKK2xvbmcgZG9fdXRpbWVzKGludCBkZmQsIGNoYXIgX191c2VyICpmaWxlbmFtZSwgc3RydWN0IHRpbWVzcGVjICp0aW1lcywgaW50IGZsYWdzKQogewogCWludCBlcnJvcjsKIAlzdHJ1Y3QgbmFtZWlkYXRhIG5kOwotCXN0cnVjdCBpbm9kZSAqIGlub2RlOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKKwlzdHJ1Y3QgZmlsZSAqZiA9IE5VTEw7CiAKLQllcnJvciA9IF9fdXNlcl93YWxrX2ZkKGRmZCwgZmlsZW5hbWUsIExPT0tVUF9GT0xMT1csICZuZCk7Ci0KLQlpZiAoZXJyb3IpCisJZXJyb3IgPSAtRUlOVkFMOworCWlmIChmbGFncyAmIH5BVF9TWU1MSU5LX05PRk9MTE9XKQogCQlnb3RvIG91dDsKLQlpbm9kZSA9IG5kLmRlbnRyeS0+ZF9pbm9kZTsKKworCWlmIChmaWxlbmFtZSA9PSBOVUxMICYmIGRmZCAhPSBBVF9GRENXRCkgeworCQllcnJvciA9IC1FSU5WQUw7CisJCWlmIChmbGFncyAmIEFUX1NZTUxJTktfTk9GT0xMT1cpCisJCQlnb3RvIG91dDsKKworCQllcnJvciA9IC1FQkFERjsKKwkJZiA9IGZnZXQoZGZkKTsKKwkJaWYgKCFmKQorCQkJZ290byBvdXQ7CisJCWRlbnRyeSA9IGYtPmZfcGF0aC5kZW50cnk7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBfX3VzZXJfd2Fsa19mZChkZmQsIGZpbGVuYW1lLCAoZmxhZ3MgJiBBVF9TWU1MSU5LX05PRk9MTE9XKSA/IDAgOiBMT09LVVBfRk9MTE9XLCAmbmQpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dDsKKworCQlkZW50cnkgPSBuZC5kZW50cnk7CisJfQorCisJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKIAllcnJvciA9IC1FUk9GUzsKIAlpZiAoSVNfUkRPTkxZKGlub2RlKSkKQEAgLTEwMCwxMSArODYsMjEgQEAKICAgICAgICAgICAgICAgICBpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUoaW5vZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkcHV0X2FuZF9vdXQ7CiAKLQkJbmV3YXR0cnMuaWFfYXRpbWUudHZfc2VjID0gdGltZXNbMF0udHZfc2VjOwotCQluZXdhdHRycy5pYV9hdGltZS50dl9uc2VjID0gdGltZXNbMF0udHZfdXNlYyAqIDEwMDA7Ci0JCW5ld2F0dHJzLmlhX210aW1lLnR2X3NlYyA9IHRpbWVzWzFdLnR2X3NlYzsKLQkJbmV3YXR0cnMuaWFfbXRpbWUudHZfbnNlYyA9IHRpbWVzWzFdLnR2X3VzZWMgKiAxMDAwOwotCQluZXdhdHRycy5pYV92YWxpZCB8PSBBVFRSX0FUSU1FX1NFVCB8IEFUVFJfTVRJTUVfU0VUOworCQlpZiAodGltZXNbMF0udHZfbnNlYyA9PSBVVElNRV9PTUlUKQorCQkJbmV3YXR0cnMuaWFfdmFsaWQgJj0gfkFUVFJfQVRJTUU7CisJCWVsc2UgaWYgKHRpbWVzWzBdLnR2X25zZWMgIT0gVVRJTUVfTk9XKSB7CisJCQluZXdhdHRycy5pYV9hdGltZS50dl9zZWMgPSB0aW1lc1swXS50dl9zZWM7CisJCQluZXdhdHRycy5pYV9hdGltZS50dl9uc2VjID0gdGltZXNbMF0udHZfbnNlYzsKKwkJCW5ld2F0dHJzLmlhX3ZhbGlkIHw9IEFUVFJfQVRJTUVfU0VUOworCQl9CisKKwkJaWYgKHRpbWVzWzFdLnR2X25zZWMgPT0gVVRJTUVfT01JVCkKKwkJCW5ld2F0dHJzLmlhX3ZhbGlkICY9IH5BVFRSX01USU1FOworCQllbHNlIGlmICh0aW1lc1sxXS50dl9uc2VjICE9IFVUSU1FX05PVykgeworCQkJbmV3YXR0cnMuaWFfbXRpbWUudHZfc2VjID0gdGltZXNbMV0udHZfc2VjOworCQkJbmV3YXR0cnMuaWFfbXRpbWUudHZfbnNlYyA9IHRpbWVzWzFdLnR2X25zZWM7CisJCQluZXdhdHRycy5pYV92YWxpZCB8PSBBVFRSX01USU1FX1NFVDsKKwkJfQogCX0gZWxzZSB7CiAJCWVycm9yID0gLUVBQ0NFUzsKICAgICAgICAgICAgICAgICBpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSkKQEAgLTExNSwyMSArMTExLDY3IEBACiAJCQlnb3RvIGRwdXRfYW5kX291dDsKIAl9CiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWVycm9yID0gbm90aWZ5X2NoYW5nZShuZC5kZW50cnksICZuZXdhdHRycyk7CisJZXJyb3IgPSBub3RpZnlfY2hhbmdlKGRlbnRyeSwgJm5ld2F0dHJzKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIGRwdXRfYW5kX291dDoKLQlwYXRoX3JlbGVhc2UoJm5kKTsKKwlpZiAoZikKKwkJZnB1dChmKTsKKwllbHNlCisJCXBhdGhfcmVsZWFzZSgmbmQpOwogb3V0OgogCXJldHVybiBlcnJvcjsKIH0KIAorYXNtbGlua2FnZSBsb25nIHN5c191dGltZW5zYXQoaW50IGRmZCwgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICp1dGltZXMsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHN0aW1lc1syXTsKKworCWlmICh1dGltZXMpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0c3RpbWVzLCB1dGltZXMsIHNpemVvZih0c3RpbWVzKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKCh0c3RpbWVzWzBdLnR2X25zZWMgPT0gVVRJTUVfT01JVCB8fAorCQkgICAgIHRzdGltZXNbMF0udHZfbnNlYyA9PSBVVElNRV9OT1cpICYmCisJCSAgICB0c3RpbWVzWzBdLnR2X3NlYyAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgodHN0aW1lc1sxXS50dl9uc2VjID09IFVUSU1FX09NSVQgfHwKKwkJICAgICB0c3RpbWVzWzFdLnR2X25zZWMgPT0gVVRJTUVfTk9XKSAmJgorCQkgICAgdHN0aW1lc1sxXS50dl9zZWMgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIE5vdGhpbmcgdG8gZG8sIHdlIG11c3Qgbm90IGV2ZW4gY2hlY2sgdGhlIHBhdGguICAqLworCQlpZiAodHN0aW1lc1swXS50dl9uc2VjID09IFVUSU1FX09NSVQgJiYKKwkJICAgIHRzdGltZXNbMV0udHZfbnNlYyA9PSBVVElNRV9PTUlUKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGRvX3V0aW1lcyhkZmQsIGZpbGVuYW1lLCB1dGltZXMgPyB0c3RpbWVzIDogTlVMTCwgZmxhZ3MpOworfQorCiBhc21saW5rYWdlIGxvbmcgc3lzX2Z1dGltZXNhdChpbnQgZGZkLCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqdXRpbWVzKQogewogCXN0cnVjdCB0aW1ldmFsIHRpbWVzWzJdOworCXN0cnVjdCB0aW1lc3BlYyB0c3RpbWVzWzJdOwogCi0JaWYgKHV0aW1lcyAmJiBjb3B5X2Zyb21fdXNlcigmdGltZXMsIHV0aW1lcywgc2l6ZW9mKHRpbWVzKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiBkb191dGltZXMoZGZkLCBmaWxlbmFtZSwgdXRpbWVzID8gdGltZXMgOiBOVUxMKTsKKwlpZiAodXRpbWVzKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdGltZXMsIHV0aW1lcywgc2l6ZW9mKHRpbWVzKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkvKiBUaGlzIHRlc3QgaXMgbmVlZGVkIHRvIGNhdGNoIGFsbCBpbnZhbGlkIHZhbHVlcy4gIElmIHdlCisJCSAgIHdvdWxkIHRlc3Qgb25seSBpbiBkb191dGltZXMgd2Ugd291bGQgbWlzcyB0aG9zZSBpbnZhbGlkCisJCSAgIHZhbHVlcyB0cnVuY2F0ZWQgYnkgdGhlIG11bHRpcGxpY2F0aW9uIHdpdGggMTAwMC4gIE5vdGUKKwkJICAgdGhhdCB3ZSBhbHNvIGNhdGNoIFVUSU1FX3tOT1csT01JVH0gaGVyZSB3aGljaCBhcmUgb25seQorCQkgICB2YWxpZCBmb3IgdXRpbWVuc2F0LiAgKi8KKwkJaWYgKHRpbWVzWzBdLnR2X3VzZWMgPj0gMTAwMDAwMCB8fCB0aW1lc1swXS50dl91c2VjIDwgMCB8fAorCQkgICAgdGltZXNbMV0udHZfdXNlYyA+PSAxMDAwMDAwIHx8IHRpbWVzWzFdLnR2X3VzZWMgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJdHN0aW1lc1swXS50dl9zZWMgPSB0aW1lc1swXS50dl9zZWM7CisJCXRzdGltZXNbMF0udHZfbnNlYyA9IDEwMDAgKiB0aW1lc1swXS50dl91c2VjOworCQl0c3RpbWVzWzFdLnR2X3NlYyA9IHRpbWVzWzFdLnR2X3NlYzsKKwkJdHN0aW1lc1sxXS50dl9uc2VjID0gMTAwMCAqIHRpbWVzWzFdLnR2X3VzZWM7CisJfQorCisJcmV0dXJuIGRvX3V0aW1lcyhkZmQsIGZpbGVuYW1lLCB1dGltZXMgPyB0c3RpbWVzIDogTlVMTCwgMCk7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfdXRpbWVzKGNoYXIgX191c2VyICpmaWxlbmFtZSwgc3RydWN0IHRpbWV2YWwgX191c2VyICp1dGltZXMpCmRpZmYgLS1naXQgYS9mcy94YXR0ci5jIGIvZnMveGF0dHIuYwppbmRleCAzODY0NjEzLi40NTIzYWNhIDEwMDY0NAotLS0gYS9mcy94YXR0ci5jCisrKyBiL2ZzL3hhdHRyLmMKQEAgLTksNyArOSw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CkBAIC0zNTEsNiArMzUwLDcgQEAKIAlmID0gZmdldChmZCk7CiAJaWYgKCFmKQogCQlyZXR1cm4gZXJyb3I7CisJYXVkaXRfaW5vZGUoTlVMTCwgZi0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJZXJyb3IgPSBnZXR4YXR0cihmLT5mX3BhdGguZGVudHJ5LCBuYW1lLCB2YWx1ZSwgc2l6ZSk7CiAJZnB1dChmKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC00MjMsNiArNDIzLDcgQEAKIAlmID0gZmdldChmZCk7CiAJaWYgKCFmKQogCQlyZXR1cm4gZXJyb3I7CisJYXVkaXRfaW5vZGUoTlVMTCwgZi0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJZXJyb3IgPSBsaXN0eGF0dHIoZi0+Zl9wYXRoLmRlbnRyeSwgbGlzdCwgc2l6ZSk7CiAJZnB1dChmKTsKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L21ybG9jay5oIGIvZnMveGZzL2xpbnV4LTIuNi9tcmxvY2suaAppbmRleCBhZjE2OGExLi5jMTEwYmIwIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L21ybG9jay5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYvbXJsb2NrLmgKQEAgLTQzLDYgKzQzLDE4IEBACiAJbXJwLT5tcl93cml0ZXIgPSAxOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbXJhY2Nlc3NfbmVzdGVkKG1ybG9ja190ICptcnAsIGludCBzdWJjbGFzcykKK3sKKwlkb3duX3JlYWRfbmVzdGVkKCZtcnAtPm1yX2xvY2ssIHN1YmNsYXNzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1ydXBkYXRlX25lc3RlZChtcmxvY2tfdCAqbXJwLCBpbnQgc3ViY2xhc3MpCit7CisJZG93bl93cml0ZV9uZXN0ZWQoJm1ycC0+bXJfbG9jaywgc3ViY2xhc3MpOworCW1ycC0+bXJfd3JpdGVyID0gMTsKK30KKworCiBzdGF0aWMgaW5saW5lIGludCBtcnRyeWFjY2VzcyhtcmxvY2tfdCAqbXJwKQogewogCXJldHVybiBkb3duX3JlYWRfdHJ5bG9jaygmbXJwLT5tcl9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwppbmRleCAxNDNmZmM4Li43MzYxODYxIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCkBAIC0xNDEsOSArMTQxLDQ2IEBACiB9CiAKIC8qCisgKiBVcGRhdGUgb24tZGlzayBmaWxlIHNpemUgbm93IHRoYXQgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIGRpc2suCisgKiBUaGUgY3VycmVudCBpbi1tZW1vcnkgZmlsZSBzaXplIGlzIGlfc2l6ZS4gIElmIGEgd3JpdGUgaXMgYmV5b25kCisgKiBlb2YgaW9fbmV3X3NpemUgd2lsbCBiZSB0aGUgaW50ZW5kZWQgZmlsZSBzaXplIHVudGlsIGlfc2l6ZSBpcworICogdXBkYXRlZC4gIElmIHRoaXMgd3JpdGUgZG9lcyBub3QgZXh0ZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSB2YWxpZAorICogZmlsZSBzaXplIHRoZW4gcmVzdHJpY3QgdGhpcyB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgd3JpdGUuCisgKi8KK1NUQVRJQyB2b2lkCit4ZnNfc2V0ZmlsZXNpemUoCisJeGZzX2lvZW5kX3QJCSppb2VuZCkKK3sKKwl4ZnNfaW5vZGVfdAkJKmlwOworCXhmc19mc2l6ZV90CQlpc2l6ZTsKKwl4ZnNfZnNpemVfdAkJYnNpemU7CisKKwlpcCA9IHhmc192dG9pKGlvZW5kLT5pb192bm9kZSk7CisKKwlBU1NFUlQoKGlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRyk7CisJQVNTRVJUKGlvZW5kLT5pb190eXBlICE9IElPTUFQX1JFQUQpOworCisJaWYgKHVubGlrZWx5KGlvZW5kLT5pb19lcnJvcikpCisJCXJldHVybjsKKworCWJzaXplID0gaW9lbmQtPmlvX29mZnNldCArIGlvZW5kLT5pb19zaXplOworCisJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKKwlpc2l6ZSA9IE1BWChpcC0+aV9zaXplLCBpcC0+aV9pb2NvcmUuaW9fbmV3X3NpemUpOworCWlzaXplID0gTUlOKGlzaXplLCBic2l6ZSk7CisKKwlpZiAoaXAtPmlfZC5kaV9zaXplIDwgaXNpemUpIHsKKwkJaXAtPmlfZC5kaV9zaXplID0gaXNpemU7CisJCWlwLT5pX3VwZGF0ZV9jb3JlID0gMTsKKwkJaXAtPmlfdXBkYXRlX3NpemUgPSAxOworCX0KKworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Cit9CisKKy8qCiAgKiBCdWZmZXJlZCBJTyB3cml0ZSBjb21wbGV0aW9uIGZvciBkZWxheWVkIGFsbG9jYXRlIGV4dGVudHMuCi0gKiBUT0RPOiBVcGRhdGUgb25kaXNrIGlzaXplIG5vdyB0aGF0IHdlIGtub3cgdGhlIGZpbGUgZGF0YQotICogaGFzIGJlZW4gZmx1c2hlZCAoaS5lLiB0aGUgbm90b3Jpb3VzICJOVUxMIGZpbGUiIHByb2JsZW0pLgogICovCiBTVEFUSUMgdm9pZAogeGZzX2VuZF9iaW9fZGVsYWxsb2MoCkBAIC0xNTIsNiArMTg5LDcgQEAKIAl4ZnNfaW9lbmRfdAkJKmlvZW5kID0KIAkJY29udGFpbmVyX29mKHdvcmssIHhmc19pb2VuZF90LCBpb193b3JrKTsKIAorCXhmc19zZXRmaWxlc2l6ZShpb2VuZCk7CiAJeGZzX2Rlc3Ryb3lfaW9lbmQoaW9lbmQpOwogfQogCkBAIC0xNjUsNiArMjAzLDcgQEAKIAl4ZnNfaW9lbmRfdAkJKmlvZW5kID0KIAkJY29udGFpbmVyX29mKHdvcmssIHhmc19pb2VuZF90LCBpb193b3JrKTsKIAorCXhmc19zZXRmaWxlc2l6ZShpb2VuZCk7CiAJeGZzX2Rlc3Ryb3lfaW9lbmQoaW9lbmQpOwogfQogCkBAIC0xODQsOCArMjIzLDIzIEBACiAJeGZzX29mZl90CQlvZmZzZXQgPSBpb2VuZC0+aW9fb2Zmc2V0OwogCXNpemVfdAkJCXNpemUgPSBpb2VuZC0+aW9fc2l6ZTsKIAotCWlmIChsaWtlbHkoIWlvZW5kLT5pb19lcnJvcikpCisJaWYgKGxpa2VseSghaW9lbmQtPmlvX2Vycm9yKSkgewogCQliaHZfdm9wX2JtYXAodnAsIG9mZnNldCwgc2l6ZSwgQk1BUElfVU5XUklUVEVOLCBOVUxMLCBOVUxMKTsKKwkJeGZzX3NldGZpbGVzaXplKGlvZW5kKTsKKwl9CisJeGZzX2Rlc3Ryb3lfaW9lbmQoaW9lbmQpOworfQorCisvKgorICogSU8gcmVhZCBjb21wbGV0aW9uIGZvciByZWd1bGFyLCB3cml0dGVuIGV4dGVudHMuCisgKi8KK1NUQVRJQyB2b2lkCit4ZnNfZW5kX2Jpb19yZWFkKAorCXN0cnVjdCB3b3JrX3N0cnVjdAkqd29yaykKK3sKKwl4ZnNfaW9lbmRfdAkJKmlvZW5kID0KKwkJY29udGFpbmVyX29mKHdvcmssIHhmc19pb2VuZF90LCBpb193b3JrKTsKKwogCXhmc19kZXN0cm95X2lvZW5kKGlvZW5kKTsKIH0KIApAQCAtMjI0LDYgKzI3OCw4IEBACiAJCUlOSVRfV09SSygmaW9lbmQtPmlvX3dvcmssIHhmc19lbmRfYmlvX3Vud3JpdHRlbik7CiAJZWxzZSBpZiAodHlwZSA9PSBJT01BUF9ERUxBWSkKIAkJSU5JVF9XT1JLKCZpb2VuZC0+aW9fd29yaywgeGZzX2VuZF9iaW9fZGVsYWxsb2MpOworCWVsc2UgaWYgKHR5cGUgPT0gSU9NQVBfUkVBRCkKKwkJSU5JVF9XT1JLKCZpb2VuZC0+aW9fd29yaywgeGZzX2VuZF9iaW9fcmVhZCk7CiAJZWxzZQogCQlJTklUX1dPUksoJmlvZW5kLT5pb193b3JrLCB4ZnNfZW5kX2Jpb193cml0dGVuKTsKIApAQCAtNjQ1LDcgKzcwMSw3IEBACiAJCQllbHNlIGlmIChidWZmZXJfZGVsYXkoYmgpKQogCQkJCWFjY2VwdGFibGUgPSAodHlwZSA9PSBJT01BUF9ERUxBWSk7CiAJCQllbHNlIGlmIChidWZmZXJfZGlydHkoYmgpICYmIGJ1ZmZlcl9tYXBwZWQoYmgpKQotCQkJCWFjY2VwdGFibGUgPSAodHlwZSA9PSAwKTsKKwkJCQlhY2NlcHRhYmxlID0gKHR5cGUgPT0gSU9NQVBfTkVXKTsKIAkJCWVsc2UKIAkJCQlicmVhazsKIAkJfSB3aGlsZSAoKGJoID0gYmgtPmJfdGhpc19wYWdlKSAhPSBoZWFkKTsKQEAgLTc1NCw3ICs4MTAsNyBAQAogCQkJcGFnZV9kaXJ0eS0tOwogCQkJY291bnQrKzsKIAkJfSBlbHNlIHsKLQkJCXR5cGUgPSAwOworCQkJdHlwZSA9IElPTUFQX05FVzsKIAkJCWlmIChidWZmZXJfbWFwcGVkKGJoKSAmJiBhbGxfYmggJiYgc3RhcnRpbykgewogCQkJCWxvY2tfYnVmZmVyKGJoKTsKIAkJCQl4ZnNfYWRkX3RvX2lvZW5kKGlub2RlLCBiaCwgb2Zmc2V0LApAQCAtOTEyLDggKzk2OCw4IEBACiAKIAliaCA9IGhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CiAJb2Zmc2V0ID0gcGFnZV9vZmZzZXQocGFnZSk7Ci0JZmxhZ3MgPSAtMTsKLQl0eXBlID0gMDsKKwlmbGFncyA9IEJNQVBJX1JFQUQ7CisJdHlwZSA9IElPTUFQX05FVzsKIAogCS8qIFRPRE86IGNsZWFudXAgY291bnQgYW5kIHBhZ2VfZGlydHkgKi8KIApAQCAtOTQzLDE0ICs5OTksMTQgQEAKIAkJICoKIAkJICogVGhpcmQgY2FzZSwgYW4gdW5tYXBwZWQgYnVmZmVyIHdhcyBmb3VuZCwgYW5kIHdlIGFyZQogCQkgKiBpbiBhIHBhdGggd2hlcmUgd2UgbmVlZCB0byB3cml0ZSB0aGUgd2hvbGUgcGFnZSBvdXQuCi0gCQkgKi8KKwkJICovCiAJCWlmIChidWZmZXJfdW53cml0dGVuKGJoKSB8fCBidWZmZXJfZGVsYXkoYmgpIHx8CiAJCSAgICAoKGJ1ZmZlcl91cHRvZGF0ZShiaCkgfHwgUGFnZVVwdG9kYXRlKHBhZ2UpKSAmJgogCQkgICAgICFidWZmZXJfbWFwcGVkKGJoKSAmJiAodW5tYXBwZWQgfHwgc3RhcnRpbykpKSB7Ci0JCSAgICAgCS8qCisJCQkvKgogCQkJICogTWFrZSBzdXJlIHdlIGRvbid0IHVzZSBhIHJlYWQtb25seSBpb21hcAogCQkJICovCi0JCSAgICAgCWlmIChmbGFncyA9PSBCTUFQSV9SRUFEKQorCQkJaWYgKGZsYWdzID09IEJNQVBJX1JFQUQpCiAJCQkJaW9tYXBfdmFsaWQgPSAwOwogCiAJCQlpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkpIHsKQEAgLTk5OSw3ICsxMDU1LDcgQEAKIAkJCSAqIFRoYXQgbWVhbnMgaXQgbXVzdCBhbHJlYWR5IGhhdmUgZXh0ZW50cyBhbGxvY2F0ZWQKIAkJCSAqIHVuZGVybmVhdGggaXQuIE1hcCB0aGUgZXh0ZW50IGJ5IHJlYWRpbmcgaXQuCiAJCQkgKi8KLQkJCWlmICghaW9tYXBfdmFsaWQgfHwgdHlwZSAhPSAwKSB7CisJCQlpZiAoIWlvbWFwX3ZhbGlkIHx8IGZsYWdzICE9IEJNQVBJX1JFQUQpIHsKIAkJCQlmbGFncyA9IEJNQVBJX1JFQUQ7CiAJCQkJc2l6ZSA9IHhmc19wcm9iZV9jbHVzdGVyKGlub2RlLCBwYWdlLCBiaCwKIAkJCQkJCQkJaGVhZCwgMSk7CkBAIC0xMDEwLDcgKzEwNjYsMTUgQEAKIAkJCQlpb21hcF92YWxpZCA9IHhmc19pb21hcF92YWxpZCgmaW9tYXAsIG9mZnNldCk7CiAJCQl9CiAKLQkJCXR5cGUgPSAwOworCQkJLyoKKwkJCSAqIFdlIHNldCB0aGUgdHlwZSB0byBJT01BUF9ORVcgaW4gY2FzZSB3ZSBhcmUgZG9pbmcgYQorCQkJICogc21hbGwgd3JpdGUgYXQgRU9GIHRoYXQgaXMgZXh0ZW5kaW5nIHRoZSBmaWxlIGJ1dAorCQkJICogd2l0aG91dCBuZWVkaW5nIGFuIGFsbG9jYXRpb24uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZQorCQkJICogZmlsZSBzaXplIG9uIEkvTyBjb21wbGV0aW9uIGluIHRoaXMgY2FzZSBzbyBpdCBpcworCQkJICogdGhlIHNhbWUgY2FzZSBhcyBoYXZpbmcganVzdCBhbGxvY2F0ZWQgYSBuZXcgZXh0ZW50CisJCQkgKiB0aGF0IHdlIGFyZSB3cml0aW5nIGludG8gZm9yIHRoZSBmaXJzdCB0aW1lLgorCQkJICovCisJCQl0eXBlID0gSU9NQVBfTkVXOwogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEJIX0xvY2ssICZiaC0+Yl9zdGF0ZSkpIHsKIAkJCQlBU1NFUlQoYnVmZmVyX21hcHBlZChiaCkpOwogCQkJCWlmIChpb21hcF92YWxpZCkKQEAgLTEzNTYsMTIgKzE0MjAsMjEgQEAKIAkgKiBjb21wbGV0aW9uIGhhbmRsZXIgaW4gdGhlIGZ1dHVyZSwgaW4gd2hpY2ggY2FzZSBhbGwgdGhpcyBjYW4KIAkgKiBnbyBhd2F5LgogCSAqLwotCWlmIChwcml2YXRlICYmIHNpemUgPiAwKSB7Ci0JCWlvZW5kLT5pb19vZmZzZXQgPSBvZmZzZXQ7Ci0JCWlvZW5kLT5pb19zaXplID0gc2l6ZTsKKwlpb2VuZC0+aW9fb2Zmc2V0ID0gb2Zmc2V0OworCWlvZW5kLT5pb19zaXplID0gc2l6ZTsKKwlpZiAoaW9lbmQtPmlvX3R5cGUgPT0gSU9NQVBfUkVBRCkgeworCQl4ZnNfZmluaXNoX2lvZW5kKGlvZW5kKTsKKwl9IGVsc2UgaWYgKHByaXZhdGUgJiYgc2l6ZSA+IDApIHsKIAkJeGZzX2ZpbmlzaF9pb2VuZChpb2VuZCk7CiAJfSBlbHNlIHsKLQkJeGZzX2Rlc3Ryb3lfaW9lbmQoaW9lbmQpOworCQkvKgorCQkgKiBBIGRpcmVjdCBJL08gd3JpdGUgaW9lbmQgc3RhcnRzIGl0J3MgbGlmZSBpbiB1bndyaXR0ZW4KKwkJICogc3RhdGUgaW4gY2FzZSB0aGV5IG1hcCBhbiB1bndyaXR0ZW4gZXh0ZW50LiAgVGhpcyB3cml0ZQorCQkgKiBkaWRuJ3QgbWFwIGFuIHVud3JpdHRlbiBleHRlbnQgc28gc3dpdGNoIGl0J3MgY29tcGxldGlvbgorCQkgKiBoYW5kbGVyLgorCQkgKi8KKwkJSU5JVF9XT1JLKCZpb2VuZC0+aW9fd29yaywgeGZzX2VuZF9iaW9fd3JpdHRlbik7CisJCXhmc19maW5pc2hfaW9lbmQoaW9lbmQpOwogCX0KIAogCS8qCkBAIC0xMzkyLDE1ICsxNDY1LDE1IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gLWVycm9yOwogCi0JaW9jYi0+cHJpdmF0ZSA9IHhmc19hbGxvY19pb2VuZChpbm9kZSwgSU9NQVBfVU5XUklUVEVOKTsKLQogCWlmIChydyA9PSBXUklURSkgeworCQlpb2NiLT5wcml2YXRlID0geGZzX2FsbG9jX2lvZW5kKGlub2RlLCBJT01BUF9VTldSSVRURU4pOwogCQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU9fb3duX2xvY2tpbmcocncsIGlvY2IsIGlub2RlLAogCQkJaW9tYXAuaW9tYXBfdGFyZ2V0LT5idF9iZGV2LAogCQkJaW92LCBvZmZzZXQsIG5yX3NlZ3MsCiAJCQl4ZnNfZ2V0X2Jsb2Nrc19kaXJlY3QsCiAJCQl4ZnNfZW5kX2lvX2RpcmVjdCk7CiAJfSBlbHNlIHsKKwkJaW9jYi0+cHJpdmF0ZSA9IHhmc19hbGxvY19pb2VuZChpbm9kZSwgSU9NQVBfUkVBRCk7CiAJCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JT19ub19sb2NraW5nKHJ3LCBpb2NiLCBpbm9kZSwKIAkJCWlvbWFwLmlvbWFwX3RhcmdldC0+YnRfYmRldiwKIAkJCWlvdiwgb2Zmc2V0LCBucl9zZWdzLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYwppbmRleCA2OWU5ZTgwLi5mZTRmNjZhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYwpAQCAtMTQyNiw3ICsxNDI2LDcgQEAKIC8qCiAgKglidWZ0YXJnIGxpc3QgZm9yIGRlbHdyaXRlIHF1ZXVlIHByb2Nlc3NpbmcKICAqLwotTElTVF9IRUFEKHhmc19idWZ0YXJnX2xpc3QpOworc3RhdGljIExJU1RfSEVBRCh4ZnNfYnVmdGFyZ19saXN0KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZzX2J1ZnRhcmdfbG9jayk7CiAKIFNUQVRJQyB2b2lkCkBAIC0xODY3LDMgKzE4NjcsMTEgQEAKIAlrdHJhY2VfZnJlZSh4ZnNfYnVmX3RyYWNlX2J1Zik7CiAjZW5kaWYKIH0KKworI2lmZGVmIENPTkZJR19LREJfTU9EVUxFUworc3RydWN0IGxpc3RfaGVhZCAqCit4ZnNfZ2V0X2J1ZnRhcmdfbGlzdCh2b2lkKQoreworCXJldHVybiAmeGZzX2J1ZnRhcmdfbGlzdDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAppbmRleCA5ZThlZjhmLi5iNjI0MWY2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaApAQCAtNDExLDYgKzQxMSw5IEBACiBleHRlcm4gdm9pZCB4ZnNfd2FpdF9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKik7CiBleHRlcm4gaW50IHhmc19zZXRzaXplX2J1ZnRhcmcoeGZzX2J1ZnRhcmdfdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IHhmc19mbHVzaF9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKiwgaW50KTsKKyNpZmRlZiBDT05GSUdfS0RCX01PRFVMRVMKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkICp4ZnNfZ2V0X2J1ZnRhcmdfbGlzdCh2b2lkKTsKKyNlbmRpZgogCiAjZGVmaW5lIHhmc19nZXRzaXplX2J1ZnRhcmcoYnVmdGFyZykJYmxvY2tfc2l6ZSgoYnVmdGFyZyktPmJ0X2JkZXYpCiAjZGVmaW5lIHhmc19yZWFkb25seV9idWZ0YXJnKGJ1ZnRhcmcpCWJkZXZfcmVhZF9vbmx5KChidWZ0YXJnKS0+YnRfYmRldikKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYwppbmRleCBkYzA1NjI4Li4yZWI4N2NkIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jCkBAIC0zNSw3ICszNSw3IEBACiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzKGlwLT5pX21hcHBpbmcsIGZpcnN0KTsKIH0KIAotdm9pZAoraW50CiBmc19mbHVzaGludmFsX3BhZ2VzKAogCWJodl9kZXNjX3QJKmJkcCwKIAl4ZnNfb2ZmX3QJZmlyc3QsCkBAIC00NCwxMyArNDQsMTYgQEAKIHsKIAliaHZfdm5vZGVfdAkqdnAgPSBCSFZfVE9fVk5PREUoYmRwKTsKIAlzdHJ1Y3QgaW5vZGUJKmlwID0gdm5fdG9faW5vZGUodnApOworCWludAkJcmV0ID0gMDsKIAogCWlmIChWTl9DQUNIRUQodnApKSB7CiAJCWlmIChWTl9UUlVOQyh2cCkpCiAJCQlWVU5UUlVOQ0FURSh2cCk7Ci0JCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaXAtPmlfbWFwcGluZyk7Ci0JCXRydW5jYXRlX2lub2RlX3BhZ2VzKGlwLT5pX21hcHBpbmcsIGZpcnN0KTsKKwkJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpcC0+aV9tYXBwaW5nKTsKKwkJaWYgKCFyZXQpCisJCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhpcC0+aV9tYXBwaW5nLCBmaXJzdCk7CiAJfQorCXJldHVybiByZXQ7CiB9CiAKIGludApAQCAtNjMsMTQgKzY2LDE4IEBACiB7CiAJYmh2X3Zub2RlX3QJKnZwID0gQkhWX1RPX1ZOT0RFKGJkcCk7CiAJc3RydWN0IGlub2RlCSppcCA9IHZuX3RvX2lub2RlKHZwKTsKKwlpbnQJCXJldCA9IDA7CisJaW50CQlyZXQyOwogCiAJaWYgKFZOX0RJUlRZKHZwKSkgewogCQlpZiAoVk5fVFJVTkModnApKQogCQkJVlVOVFJVTkNBVEUodnApOwotCQlmaWxlbWFwX2ZkYXRhd3JpdGUoaXAtPmlfbWFwcGluZyk7CisJCXJldCA9IGZpbGVtYXBfZmRhdGF3cml0ZShpcC0+aV9tYXBwaW5nKTsKIAkJaWYgKGZsYWdzICYgWEZTX0JfQVNZTkMpCi0JCQlyZXR1cm4gMDsKLQkJZmlsZW1hcF9mZGF0YXdhaXQoaXAtPmlfbWFwcGluZyk7CisJCQlyZXR1cm4gcmV0OworCQlyZXQyID0gZmlsZW1hcF9mZGF0YXdhaXQoaXAtPmlfbWFwcGluZyk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmV0MjsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuaAppbmRleCBhZWU5Y2NkLi5jMWI1MzExIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5oCkBAIC0yMyw3ICsyMyw3IEBACiBleHRlcm4gaW50ICBmc19ub3N5cyh2b2lkKTsKIGV4dGVybiB2b2lkIGZzX25vdmFsKHZvaWQpOwogZXh0ZXJuIHZvaWQgZnNfdG9zc3BhZ2VzKGJodl9kZXNjX3QgKiwgeGZzX29mZl90LCB4ZnNfb2ZmX3QsIGludCk7Ci1leHRlcm4gdm9pZCBmc19mbHVzaGludmFsX3BhZ2VzKGJodl9kZXNjX3QgKiwgeGZzX29mZl90LCB4ZnNfb2ZmX3QsIGludCk7CitleHRlcm4gaW50ICBmc19mbHVzaGludmFsX3BhZ2VzKGJodl9kZXNjX3QgKiwgeGZzX29mZl90LCB4ZnNfb2ZmX3QsIGludCk7CiBleHRlcm4gaW50ICBmc19mbHVzaF9wYWdlcyhiaHZfZGVzY190ICosIHhmc19vZmZfdCwgeGZzX29mZl90LCB1aW50NjRfdCwgaW50KTsKIAogI2VuZGlmCS8qIF9fWEZTX0ZTX1NVQlJfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmluZGV4IGZmOGQ2NGUuLjg2ZmI2NzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlzdHJ1Y3QgZmlsZQkJKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwogCXNpemVfdAkJCXNpemUgPSAwOwotCXNzaXplX3QJCQlyZXQ7CisJc3NpemVfdAkJCXJldCA9IDA7CiAJeGZzX2ZzaXplX3QJCW47CiAJeGZzX2lub2RlX3QJCSppcDsKIAl4ZnNfbW91bnRfdAkJKm1wOwpAQCAtMjI0LDcgKzIyNCw3IEBACiAJCQkJbXAtPm1fcnRkZXZfdGFyZ3AgOiBtcC0+bV9kZGV2X3RhcmdwOwogCQlpZiAoKCpvZmZzZXQgJiB0YXJnZXQtPmJ0X3NtYXNrKSB8fAogCQkgICAgKHNpemUgJiB0YXJnZXQtPmJ0X3NtYXNrKSkgewotCQkJaWYgKCpvZmZzZXQgPT0gaXAtPmlfZC5kaV9zaXplKSB7CisJCQlpZiAoKm9mZnNldCA9PSBpcC0+aV9zaXplKSB7CiAJCQkJcmV0dXJuICgwKTsKIAkJCX0KIAkJCXJldHVybiAtWEZTX0VSUk9SKEVJTlZBTCk7CkBAIC0yNjMsOSArMjYzLDEzIEBACiAKIAlpZiAodW5saWtlbHkoaW9mbGFncyAmIElPX0lTRElSRUNUKSkgewogCQlpZiAoVk5fQ0FDSEVEKHZwKSkKLQkJCWJodl92b3BfZmx1c2hpbnZhbF9wYWdlcyh2cCwgY3Rvb2ZmKG9mZnRvY3QoKm9mZnNldCkpLAorCQkJcmV0ID0gYmh2X3ZvcF9mbHVzaGludmFsX3BhZ2VzKHZwLCBjdG9vZmYob2ZmdG9jdCgqb2Zmc2V0KSksCiAJCQkJCQkgLTEsIEZJX1JFTUFQRl9MT0NLRUQpOwogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwkJaWYgKHJldCkgeworCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9CiAKIAl4ZnNfcndfZW50ZXJfdHJhY2UoWEZTX1JFQURfRU5URVIsICZpcC0+aV9pb2NvcmUsCkBAIC0zODMsOSArMzg3LDEwIEBACiB7CiAJeGZzX2lub2RlX3QJCSppcCA9IFhGU19CSFZUT0koYmRwKTsKIAl4ZnNfbW91bnRfdAkJKm1wID0gaXAtPmlfbW91bnQ7CisJeGZzX2lvY29yZV90CQkqaW8gPSAmaXAtPmlfaW9jb3JlOwogCXNzaXplX3QJCQlyZXQ7CiAJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBvdXRmaWxwLT5mX21hcHBpbmctPmhvc3Q7Ci0JeGZzX2ZzaXplX3QJCWlzaXplOworCXhmc19mc2l6ZV90CQlpc2l6ZSwgbmV3X3NpemU7CiAKIAlYRlNfU1RBVFNfSU5DKHhzX3dyaXRlX2NhbGxzKTsKIAlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpCkBAIC00MDYsNiArNDExLDE0IEBACiAJCQlyZXR1cm4gLWVycm9yOwogCQl9CiAJfQorCisJbmV3X3NpemUgPSAqcHBvcyArIGNvdW50OworCisJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJaWYgKG5ld19zaXplID4gaXAtPmlfc2l6ZSkKKwkJaW8tPmlvX25ld19zaXplID0gbmV3X3NpemU7CisJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwogCXhmc19yd19lbnRlcl90cmFjZShYRlNfU1BMSUNFX1dSSVRFX0VOVEVSLCAmaXAtPmlfaW9jb3JlLAogCQkJICAgcGlwZSwgY291bnQsICpwcG9zLCBpb2ZsYWdzKTsKIAlyZXQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKHBpcGUsIG91dGZpbHAsIHBwb3MsIGNvdW50LCBmbGFncyk7CkBAIC00MTYsMTQgKzQyOSwxOCBAQAogCWlmICh1bmxpa2VseShyZXQgPCAwICYmIHJldCAhPSAtRUZBVUxUICYmICpwcG9zID4gaXNpemUpKQogCQkqcHBvcyA9IGlzaXplOwogCi0JaWYgKCpwcG9zID4gaXAtPmlfZC5kaV9zaXplKSB7CisJaWYgKCpwcG9zID4gaXAtPmlfc2l6ZSkgewogCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQkJaWYgKCpwcG9zID4gaXAtPmlfZC5kaV9zaXplKSB7Ci0JCQlpcC0+aV9kLmRpX3NpemUgPSAqcHBvczsKLQkJCWlfc2l6ZV93cml0ZShpbm9kZSwgKnBwb3MpOwotCQkJaXAtPmlfdXBkYXRlX2NvcmUgPSAxOwotCQkJaXAtPmlfdXBkYXRlX3NpemUgPSAxOwotCQl9CisJCWlmICgqcHBvcyA+IGlwLT5pX3NpemUpCisJCQlpcC0+aV9zaXplID0gKnBwb3M7CisJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJfQorCisJaWYgKGlvLT5pb19uZXdfc2l6ZSkgeworCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwkJaW8tPmlvX25ld19zaXplID0gMDsKKwkJaWYgKGlwLT5pX2QuZGlfc2l6ZSA+IGlwLT5pX3NpemUpCisJCQlpcC0+aV9kLmRpX3NpemUgPSBpcC0+aV9zaXplOwogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCX0KIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKQEAgLTYzOSwzNyArNjU2LDIxIEBACiAJeGZzX2ZzaXplX3QJCWlzaXplLCBuZXdfc2l6ZTsKIAl4ZnNfaW9jb3JlX3QJCSppbzsKIAliaHZfdm5vZGVfdAkJKnZwOwotCXVuc2lnbmVkIGxvbmcJCXNlZzsKIAlpbnQJCQlpb2xvY2s7CiAJaW50CQkJZXZlbnRzZW50ID0gMDsKIAliaHZfdnJ3bG9ja190CQlsb2NrdHlwZTsKIAlzaXplX3QJCQlvY291bnQgPSAwLCBjb3VudDsKIAlsb2ZmX3QJCQlwb3M7Ci0JaW50CQkJbmVlZF9pX211dGV4ID0gMSwgbmVlZF9mbHVzaCA9IDA7CisJaW50CQkJbmVlZF9pX211dGV4OwogCiAJWEZTX1NUQVRTX0lOQyh4c193cml0ZV9jYWxscyk7CiAKIAl2cCA9IEJIVl9UT19WTk9ERShiZHApOwogCXhpcCA9IFhGU19CSFZUT0koYmRwKTsKIAotCWZvciAoc2VnID0gMDsgc2VnIDwgc2Vnczsgc2VnKyspIHsKLQkJY29uc3Qgc3RydWN0IGlvdmVjICppdiA9ICZpb3ZwW3NlZ107Ci0KLQkJLyoKLQkJICogSWYgYW55IHNlZ21lbnQgaGFzIGEgbmVnYXRpdmUgbGVuZ3RoLCBvciB0aGUgY3VtdWxhdGl2ZQotCQkgKiBsZW5ndGggZXZlciB3cmFwcyBuZWdhdGl2ZSB0aGVuIHJldHVybiAtRUlOVkFMLgotCQkgKi8KLQkJb2NvdW50ICs9IGl2LT5pb3ZfbGVuOwotCQlpZiAodW5saWtlbHkoKHNzaXplX3QpKG9jb3VudHxpdi0+aW92X2xlbikgPCAwKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBpdi0+aW92X2Jhc2UsIGl2LT5pb3ZfbGVuKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoc2VnID09IDApCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJc2VncyA9IHNlZzsKLQkJb2NvdW50IC09IGl2LT5pb3ZfbGVuOyAgLyogVGhpcyBzZWdtZW50IGlzIG5vIGdvb2QgKi8KLQkJYnJlYWs7Ci0JfQorCWVycm9yID0gZ2VuZXJpY19zZWdtZW50X2NoZWNrcyhpb3ZwLCAmc2VncywgJm9jb3VudCwgVkVSSUZZX1JFQUQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCiAJY291bnQgPSBvY291bnQ7CiAJcG9zID0gKm9mZnNldDsKQEAgLTY4NSwzOSArNjg2LDIwIEBACiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlyZXR1cm4gLUVJTzsKIAotCWlmIChpb2ZsYWdzICYgSU9fSVNESVJFQ1QpIHsKLQkJeGZzX2J1ZnRhcmdfdAkqdGFyZ2V0ID0KLQkJCSh4aXAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfUkVBTFRJTUUpID8KLQkJCQltcC0+bV9ydGRldl90YXJncCA6IG1wLT5tX2RkZXZfdGFyZ3A7Ci0KLQkJaWYgKChwb3MgJiB0YXJnZXQtPmJ0X3NtYXNrKSB8fCAoY291bnQgJiB0YXJnZXQtPmJ0X3NtYXNrKSkKLQkJCXJldHVybiBYRlNfRVJST1IoLUVJTlZBTCk7Ci0KLQkJaWYgKCFWTl9DQUNIRUQodnApICYmIHBvcyA8IGlfc2l6ZV9yZWFkKGlub2RlKSkKLQkJCW5lZWRfaV9tdXRleCA9IDA7Ci0KLQkJaWYgKFZOX0NBQ0hFRCh2cCkpCi0JCQluZWVkX2ZsdXNoID0gMTsKLQl9Ci0KIHJlbG9jazoKLQlpZiAobmVlZF9pX211dGV4KSB7Ci0JCWlvbG9jayA9IFhGU19JT0xPQ0tfRVhDTDsKLQkJbG9ja3R5cGUgPSBWUldMT0NLX1dSSVRFOwotCi0JCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQl9IGVsc2UgeworCWlmIChpb2ZsYWdzICYgSU9fSVNESVJFQ1QpIHsKIAkJaW9sb2NrID0gWEZTX0lPTE9DS19TSEFSRUQ7CiAJCWxvY2t0eXBlID0gVlJXTE9DS19XUklURV9ESVJFQ1Q7CisJCW5lZWRfaV9tdXRleCA9IDA7CisJfSBlbHNlIHsKKwkJaW9sb2NrID0gWEZTX0lPTE9DS19FWENMOworCQlsb2NrdHlwZSA9IFZSV0xPQ0tfV1JJVEU7CisJCW5lZWRfaV9tdXRleCA9IDE7CisJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAl9CiAKIAl4ZnNfaWxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTHxpb2xvY2spOwogCi0JaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0KLQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKQotCQkqb2Zmc2V0ID0gaXNpemU7Ci0KIHN0YXJ0OgogCWVycm9yID0gLWdlbmVyaWNfd3JpdGVfY2hlY2tzKGZpbGUsICZwb3MsICZjb3VudCwKIAkJCQkJU19JU0JMSyhpbm9kZS0+aV9tb2RlKSk7CkBAIC03MjYsMTMgKzcwOCw4IEBACiAJCWdvdG8gb3V0X3VubG9ja19tdXRleDsKIAl9CiAKLQluZXdfc2l6ZSA9IHBvcyArIGNvdW50OwotCWlmIChuZXdfc2l6ZSA+IGlzaXplKQotCQlpby0+aW9fbmV3X3NpemUgPSBuZXdfc2l6ZTsKLQogCWlmICgoRE1fRVZFTlRfRU5BQkxFRCh2cC0+dl92ZnNwLCB4aXAsIERNX0VWRU5UX1dSSVRFKSAmJgogCSAgICAhKGlvZmxhZ3MgJiBJT19JTlZJUykgJiYgIWV2ZW50c2VudCkpIHsKLQkJbG9mZl90CQlzYXZlZHNpemUgPSBwb3M7CiAJCWludAkJZG1mbGFncyA9IEZJTFBfREVMQVlfRkxBRyhmaWxlKTsKIAogCQlpZiAobmVlZF9pX211dGV4KQpAQCAtNzQzLDggKzcyMCw3IEBACiAJCQkJICAgICAgcG9zLCBjb3VudCwKIAkJCQkgICAgICBkbWZsYWdzLCAmbG9ja3R5cGUpOwogCQlpZiAoZXJyb3IpIHsKLQkJCXhmc19pdW5sb2NrKHhpcCwgaW9sb2NrKTsKLQkJCWdvdG8gb3V0X3VubG9ja19tdXRleDsKKwkJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKIAkJfQogCQl4ZnNfaWxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJCWV2ZW50c2VudCA9IDE7CkBAIC03NTYsMTIgKzczMiwzNSBAQAogCQkgKiBldmVudCBwcmV2ZW50cyBhbm90aGVyIGNhbGwgdG8gWEZTX1NFTkRfREFUQSwgd2hpY2ggaXMKIAkJICogd2hhdCBhbGxvd3MgdGhlIHNpemUgdG8gY2hhbmdlIGluIHRoZSBmaXJzdCBwbGFjZS4KIAkJICovCi0JCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiBzYXZlZHNpemUgIT0gaXNpemUpIHsKLQkJCXBvcyA9IGlzaXplID0geGlwLT5pX2QuZGlfc2l6ZTsKKwkJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmIHBvcyAhPSB4aXAtPmlfc2l6ZSkKKwkJCWdvdG8gc3RhcnQ7CisJfQorCisJaWYgKGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkgeworCQl4ZnNfYnVmdGFyZ190CSp0YXJnZXQgPQorCQkJKHhpcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19SRUFMVElNRSkgPworCQkJCW1wLT5tX3J0ZGV2X3RhcmdwIDogbXAtPm1fZGRldl90YXJncDsKKworCQlpZiAoKHBvcyAmIHRhcmdldC0+YnRfc21hc2spIHx8IChjb3VudCAmIHRhcmdldC0+YnRfc21hc2spKSB7CisJCQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMfGlvbG9jayk7CisJCQlyZXR1cm4gWEZTX0VSUk9SKC1FSU5WQUwpOworCQl9CisKKwkJaWYgKCFuZWVkX2lfbXV0ZXggJiYgKFZOX0NBQ0hFRCh2cCkgfHwgcG9zID4geGlwLT5pX3NpemUpKSB7CisJCQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMfGlvbG9jayk7CisJCQlpb2xvY2sgPSBYRlNfSU9MT0NLX0VYQ0w7CisJCQlsb2NrdHlwZSA9IFZSV0xPQ0tfV1JJVEU7CisJCQluZWVkX2lfbXV0ZXggPSAxOworCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQkJeGZzX2lsb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0x8aW9sb2NrKTsKIAkJCWdvdG8gc3RhcnQ7CiAJCX0KIAl9CiAKKwluZXdfc2l6ZSA9IHBvcyArIGNvdW50OworCWlmIChuZXdfc2l6ZSA+IHhpcC0+aV9zaXplKQorCQlpby0+aW9fbmV3X3NpemUgPSBuZXdfc2l6ZTsKKwogCWlmIChsaWtlbHkoIShpb2ZsYWdzICYgSU9fSU5WSVMpKSkgewogCQlmaWxlX3VwZGF0ZV90aW1lKGZpbGUpOwogCQl4ZnNfaWNoZ3RpbWVfZmFzdCh4aXAsIGlub2RlLApAQCAtNzc3LDExICs3NzYsMTEgQEAKIAkgKiB0byB6ZXJvIGl0IG91dCB1cCB0byB0aGUgbmV3IHNpemUuCiAJICovCiAKLQlpZiAocG9zID4gaXNpemUpIHsKLQkJZXJyb3IgPSB4ZnNfemVyb19lb2YoQkhWX1RPX1ZOT0RFKGJkcCksIGlvLCBwb3MsIGlzaXplKTsKKwlpZiAocG9zID4geGlwLT5pX3NpemUpIHsKKwkJZXJyb3IgPSB4ZnNfemVyb19lb2YoQkhWX1RPX1ZOT0RFKGJkcCksIGlvLCBwb3MsIHhpcC0+aV9zaXplKTsKIAkJaWYgKGVycm9yKSB7Ci0JCQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMfGlvbG9jayk7Ci0JCQlnb3RvIG91dF91bmxvY2tfbXV0ZXg7CisJCQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKKwkJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKIAkJfQogCX0KIAl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKQEAgLTgwMSw4ICs4MDAsNyBAQAogCQlpZiAobGlrZWx5KCFlcnJvcikpCiAJCQllcnJvciA9IC1yZW1vdmVfc3VpZChmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAkJaWYgKHVubGlrZWx5KGVycm9yKSkgewotCQkJeGZzX2l1bmxvY2soeGlwLCBpb2xvY2spOwotCQkJZ290byBvdXRfdW5sb2NrX211dGV4OworCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwogCQl9CiAJfQogCkBAIC04MTEsMTEgKzgwOSwxNCBAQAogCWN1cnJlbnQtPmJhY2tpbmdfZGV2X2luZm8gPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCiAJaWYgKChpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKSB7Ci0JCWlmIChuZWVkX2ZsdXNoKSB7CisJCWlmIChWTl9DQUNIRUQodnApKSB7CisJCQlXQVJOX09OKG5lZWRfaV9tdXRleCA9PSAwKTsKIAkJCXhmc19pbnZhbF9jYWNoZWRfdHJhY2UoaW8sIHBvcywgLTEsCiAJCQkJCWN0b29mZihvZmZ0b2N0KHBvcykpLCAtMSk7Ci0JCQliaHZfdm9wX2ZsdXNoaW52YWxfcGFnZXModnAsIGN0b29mZihvZmZ0b2N0KHBvcykpLAorCQkJZXJyb3IgPSBiaHZfdm9wX2ZsdXNoaW52YWxfcGFnZXModnAsIGN0b29mZihvZmZ0b2N0KHBvcykpLAogCQkJCQktMSwgRklfUkVNQVBGX0xPQ0tFRCk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwogCQl9CiAKIAkJaWYgKG5lZWRfaV9tdXRleCkgewpAQCAtODQzLDcgKzg0NCw2IEBACiAJCQlwb3MgKz0gcmV0OwogCQkJY291bnQgLT0gcmV0OwogCi0JCQluZWVkX2lfbXV0ZXggPSAxOwogCQkJaW9mbGFncyAmPSB+SU9fSVNESVJFQ1Q7CiAJCQl4ZnNfaXVubG9jayh4aXAsIGlvbG9jayk7CiAJCQlnb3RvIHJlbG9jazsKQEAgLTg3MCwxMiArODcwLDEyIEBACiAJCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKHhpcC0+aV9tb3VudCwgRE1fRVZFTlRfTk9TUEFDRSwgdnAsCiAJCQkJRE1fUklHSFRfTlVMTCwgdnAsIERNX1JJR0hUX05VTEwsIE5VTEwsIE5VTEwsCiAJCQkJMCwgMCwgMCk7IC8qIERlbGF5IGZsYWcgaW50ZW50aW9uYWxseSAgdW51c2VkICovCi0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X25vdW5sb2NrczsKIAkJaWYgKG5lZWRfaV9tdXRleCkKIAkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAkJeGZzX3J3bG9jayhiZHAsIGxvY2t0eXBlKTsKLQkJcG9zID0geGlwLT5pX2QuZGlfc2l6ZTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOworCQlwb3MgPSB4aXAtPmlfc2l6ZTsKIAkJcmV0ID0gMDsKIAkJZ290byByZXRyeTsKIAl9CkBAIC04ODQsMTQgKzg4NCwxMCBAQAogCWlmICh1bmxpa2VseShyZXQgPCAwICYmIHJldCAhPSAtRUZBVUxUICYmICpvZmZzZXQgPiBpc2l6ZSkpCiAJCSpvZmZzZXQgPSBpc2l6ZTsKIAotCWlmICgqb2Zmc2V0ID4geGlwLT5pX2QuZGlfc2l6ZSkgeworCWlmICgqb2Zmc2V0ID4geGlwLT5pX3NpemUpIHsKIAkJeGZzX2lsb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQlpZiAoKm9mZnNldCA+IHhpcC0+aV9kLmRpX3NpemUpIHsKLQkJCXhpcC0+aV9kLmRpX3NpemUgPSAqb2Zmc2V0OwotCQkJaV9zaXplX3dyaXRlKGlub2RlLCAqb2Zmc2V0KTsKLQkJCXhpcC0+aV91cGRhdGVfY29yZSA9IDE7Ci0JCQl4aXAtPmlfdXBkYXRlX3NpemUgPSAxOwotCQl9CisJCWlmICgqb2Zmc2V0ID4geGlwLT5pX3NpemUpCisJCQl4aXAtPmlfc2l6ZSA9ICpvZmZzZXQ7CiAJCXhmc19pdW5sb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCX0KIApAQCAtOTEzLDE2ICs5MDksMzEgQEAKIAogCQllcnJvciA9IHN5bmNfcGFnZV9yYW5nZShpbm9kZSwgbWFwcGluZywgcG9zLCByZXQpOwogCQlpZiAoIWVycm9yKQotCQkJZXJyb3IgPSByZXQ7Ci0JCXJldHVybiBlcnJvcjsKKwkJCWVycm9yID0gLXJldDsKKwkJaWYgKG5lZWRfaV9tdXRleCkKKwkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkJeGZzX3J3bG9jayhiZHAsIGxvY2t0eXBlKTsKIAl9CiAKICBvdXRfdW5sb2NrX2ludGVybmFsOgorCWlmIChpby0+aW9fbmV3X3NpemUpIHsKKwkJeGZzX2lsb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCQlpby0+aW9fbmV3X3NpemUgPSAwOworCQkvKgorCQkgKiBJZiB0aGlzIHdhcyBhIGRpcmVjdCBvciBzeW5jaHJvbm91cyBJL08gdGhhdCBmYWlsZWQgKHN1Y2gKKwkJICogYXMgRU5PU1BDKSB0aGVuIHBhcnQgb2YgdGhlIEkvTyBtYXkgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8KKwkJICogZGlzayBiZWZvcmUgdGhlIGVycm9yIG9jY3VyZWQuICBJbiB0aGlzIGNhc2UgdGhlIG9uLWRpc2sKKwkJICogZmlsZSBzaXplIG1heSBoYXZlIGJlZW4gYWRqdXN0ZWQgYmV5b25kIHRoZSBpbi1tZW1vcnkgZmlsZQorCQkgKiBzaXplIGFuZCBub3cgbmVlZHMgdG8gYmUgdHJ1bmNhdGVkIGJhY2suCisJCSAqLworCQlpZiAoeGlwLT5pX2QuZGlfc2l6ZSA+IHhpcC0+aV9zaXplKQorCQkJeGlwLT5pX2QuZGlfc2l6ZSA9IHhpcC0+aV9zaXplOworCQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKKwl9CiAJeGZzX3J3dW5sb2NrKGJkcCwgbG9ja3R5cGUpOwogIG91dF91bmxvY2tfbXV0ZXg6CiAJaWYgKG5lZWRfaV9tdXRleCkKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0gb3V0X25vdW5sb2NrczoKIAlyZXR1cm4gLWVycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCAxNGUyY2JlLi5iZjlhOWQ1IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTM2MCw4ICszNjAsNyBAQAogCWttZW1fem9uZV90CQkqem9uZXAsCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3MpCiB7Ci0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKQotCQlpbm9kZV9pbml0X29uY2Uodm5fdG9faW5vZGUoKGJodl92bm9kZV90ICopdm5vZGUpKTsKKwlpbm9kZV9pbml0X29uY2Uodm5fdG9faW5vZGUoKGJodl92bm9kZV90ICopdm5vZGUpKTsKIH0KIAogU1RBVElDIGludApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKaW5kZXggYjc2MTE4Yy4uZDFiMmQwMSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCkBAIC0xOTQsNyArMTk0LDcgQEAKIHR5cGVkZWYgdm9pZAkoKnZvcF9saW5rX3JlbW92ZWRfdCkoYmh2X2Rlc2NfdCAqLCBiaHZfdm5vZGVfdCAqLCBpbnQpOwogdHlwZWRlZiB2b2lkCSgqdm9wX3Zub2RlX2NoYW5nZV90KShiaHZfZGVzY190ICosIGJodl92Y2hhbmdlX3QsIF9fcHNpbnRfdCk7CiB0eXBlZGVmIHZvaWQJKCp2b3BfcHRvc3N2cF90KShiaHZfZGVzY190ICosIHhmc19vZmZfdCwgeGZzX29mZl90LCBpbnQpOwotdHlwZWRlZiB2b2lkCSgqdm9wX3BmbHVzaGludmFsdnBfdCkoYmh2X2Rlc2NfdCAqLCB4ZnNfb2ZmX3QsIHhmc19vZmZfdCwgaW50KTsKK3R5cGVkZWYgaW50CSgqdm9wX3BmbHVzaGludmFsdnBfdCkoYmh2X2Rlc2NfdCAqLCB4ZnNfb2ZmX3QsIHhmc19vZmZfdCwgaW50KTsKIHR5cGVkZWYgaW50CSgqdm9wX3BmbHVzaHZwX3QpKGJodl9kZXNjX3QgKiwgeGZzX29mZl90LCB4ZnNfb2ZmX3QsCiAJCQkJdWludDY0X3QsIGludCk7CiB0eXBlZGVmIGludAkoKnZvcF9pZmx1c2hfdCkoYmh2X2Rlc2NfdCAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCmluZGV4IDRhZGFmMTMuLmNmZGQzNWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKQEAgLTc1Myw4ICs3NTMsNyBAQAogCQlnb3RvIGVycm9yMDsKIAl9CiAJaWYgKHRwKSB7Ci0JCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTLAotCQkJCQkgICAgIE5VTEwpKSkKKwkJaWYgKChlcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpKSkKIAkJCWdvdG8gZXJyb3IxOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5jIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCmluZGV4IDFkZTJhY2QuLjNlNGE4YWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKQEAgLTM4OCw2ICszODgsMTcgQEAKIAkJCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOwogCQl9CiAJfQorCS8qIAorCSAqIElmIG9uZSB0eXBlIG9mIHF1b3RhcyBpcyBvZmYsIHRoZW4gaXQgd2lsbCBsb3NlIGl0cworCSAqIHF1b3RhY2hlY2tlZCBzdGF0dXMsIHNpbmNlIHdlIHdvbid0IGJlIGRvaW5nIGFjY291bnRpbmcgZm9yCisJICogdGhhdCB0eXBlIGFueW1vcmUuCisJICovCisJaWYgKCFYRlNfSVNfVVFVT1RBX09OKG1wKSkgeworCQltcC0+bV9xZmxhZ3MgJj0gflhGU19VUVVPVEFfQ0hLRDsKKwl9CisJaWYgKCEoWEZTX0lTX0dRVU9UQV9PTihtcCkgfHwgWEZTX0lTX1BRVU9UQV9PTihtcCkpKSB7CisJCW1wLT5tX3FmbGFncyAmPSB+WEZTX09RVU9UQV9DSEtEOworCX0KIAogIHdyaXRlX2NoYW5nZXM6CiAJLyoKQEAgLTE0NTMsOCArMTQ2NCw3IEBACiAJWEZTX1NCX1VOTE9DSyhtcCwgcyk7CiAJeGZzX21vZF9zYih0cCwgc2JmaWVsZHMpOwogCi0JaWYgKChlcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMsCi0JCQkJICAgICBOVUxMKSkpIHsKKwlpZiAoKGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUykpKSB7CiAJCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBtcCwgIlhGUyBxaW5vX2FsbG9jIGZhaWxlZCEiKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTI0MDUsNyArMjQxNSw3IEBACiAJfQogCiAJeGZzX21vZF9zYih0cCwgZmxhZ3MpOwotCSh2b2lkKSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwLCBOVUxMKTsKKwkodm9pZCkgeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwppbmRleCA3MTZmNTYyLi4yZGY2N2ZkIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCkBAIC00NTYsOSArNDU2LDcgQEAKIAkgICAgfHwKIAkgICAgKChmbGFncyAmIFhGU19QUVVPVEFfQUNDVCkgPT0gMCAmJgogCSAgICAobXAtPm1fc2Iuc2JfcWZsYWdzICYgWEZTX1BRVU9UQV9BQ0NUKSA9PSAwICYmCi0JICAgIChmbGFncyAmIFhGU19PUVVPVEFfRU5GRCkpCi0JICAgIHx8Ci0JICAgICgoZmxhZ3MgJiBYRlNfR1FVT1RBX0FDQ1QpID09IDAgJiYKKwkgICAgKGZsYWdzICYgWEZTX0dRVU9UQV9BQ0NUKSA9PSAwICYmCiAJICAgIChtcC0+bV9zYi5zYl9xZmxhZ3MgJiBYRlNfR1FVT1RBX0FDQ1QpID09IDAgJiYKIAkgICAgKGZsYWdzICYgWEZTX09RVU9UQV9FTkZEKSkpIHsKIAkJcWRwcmludGsoIkNhbid0IGVuZm9yY2Ugd2l0aG91dCBhY2N0LCBmbGFncz0leCBzYmZsYWdzPSV4XG4iLApAQCAtNzM1LDcgKzczMyw3IEBACiAJeGZzX3RyYW5zX2xvZ19kcXVvdCh0cCwgZHFwKTsKIAogCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIlFfU0VUUUxJTTogQ09NTUlUIik7Ci0JeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCwgTlVMTCk7CisJeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiAJeGZzX3FtX2RxcHJpbnQoZHFwKTsKIAl4ZnNfcW1fZHFyZWxlKGRxcCk7CiAJbXV0ZXhfdW5sb2NrKCYoWEZTX1FJX1FPRkZMT0NLKG1wKSkpOwpAQCAtODA5LDcgKzgwNyw3IEBACiAJICogV2UgZG9uJ3QgY2FyZSBhYm91dCBxdW90b2ZmJ3MgcGVyZm9ybWFuY2UuCiAJICovCiAJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDAsIE5VTEwpOworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiAJcmV0dXJuIChlcnJvcik7CiB9CiAKQEAgLTg1Miw3ICs4NTAsNyBAQAogCSAqIFdlIGRvbid0IGNhcmUgYWJvdXQgcXVvdG9mZidzIHBlcmZvcm1hbmNlLgogCSAqLwogCXhmc190cmFuc19zZXRfc3luYyh0cCk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwLCBOVUxMKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOwogCiBlcnJvcjA6CiAJaWYgKGVycm9yKSB7CkBAIC05MTEsMTQgKzkwOSwxOSBAQAogCSAqIGdldHMgdHVybmVkIG9mZi4gTm8gbmVlZCB0byBjb25mdXNlIHRoZSB1c2VyIGxldmVsIGNvZGUsCiAJICogc28gcmV0dXJuIHplcm9lcyBpbiB0aGF0IGNhc2UuCiAJICovCi0JaWYgKCEgWEZTX0lTX1FVT1RBX0VORk9SQ0VEKG1wKSkgeworCWlmICgoIVhGU19JU19VUVVPVEFfRU5GT1JDRUQobXApICYmIHNyYy0+ZF9mbGFncyA9PSBYRlNfRFFfVVNFUikgfHwKKwkgICAgKCFYRlNfSVNfT1FVT1RBX0VORk9SQ0VEKG1wKSAmJgorCQkJKHNyYy0+ZF9mbGFncyAmIChYRlNfRFFfUFJPSiB8IFhGU19EUV9HUk9VUCkpKSkgewogCQlkc3QtPmRfYnRpbWVyID0gMDsKIAkJZHN0LT5kX2l0aW1lciA9IDA7CiAJCWRzdC0+ZF9ydGJ0aW1lciA9IDA7CiAJfQogCiAjaWZkZWYgREVCVUcKLQlpZiAoWEZTX0lTX1FVT1RBX0VORk9SQ0VEKG1wKSAmJiBkc3QtPmRfaWQgIT0gMCkgeworCWlmICgoKFhGU19JU19VUVVPVEFfRU5GT1JDRUQobXApICYmIGRzdC0+ZF9mbGFncyA9PSBYRlNfVVNFUl9RVU9UQSkgfHwKKwkgICAgIChYRlNfSVNfT1FVT1RBX0VORk9SQ0VEKG1wKSAmJgorCQkJKGRzdC0+ZF9mbGFncyAmIChYRlNfUFJPSl9RVU9UQSB8IFhGU19HUk9VUF9RVU9UQSkpKSkgJiYKKwkgICAgZHN0LT5kX2lkICE9IDApIHsKIAkJaWYgKCgoaW50KSBkc3QtPmRfYmNvdW50ID49IChpbnQpIGRzdC0+ZF9ibGtfc29mdGxpbWl0KSAmJgogCQkgICAgKGRzdC0+ZF9ibGtfc29mdGxpbWl0ID4gMCkpIHsKIAkJCUFTU0VSVChkc3QtPmRfYnRpbWVyICE9IDApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jIGIvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCmluZGV4IGQ3NDkxZTcuLjdkZTY4NzQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKQEAgLTY1Niw3ICs2NTYsOSBAQAogCiAJaWYgKChmbGFncyAmIFhGU19RTU9QVF9GT1JDRV9SRVMpID09IDAgJiYKIAkgICAgZHFwLT5xX2NvcmUuZF9pZCAmJgotCSAgICBYRlNfSVNfUVVPVEFfRU5GT1JDRUQoZHFwLT5xX21vdW50KSkgeworCSAgICAoKFhGU19JU19VUVVPVEFfRU5GT1JDRUQoZHFwLT5xX21vdW50KSAmJiBYRlNfUU1fSVNVRFEoZHFwKSkgfHwKKwkgICAgIChYRlNfSVNfT1FVT1RBX0VORk9SQ0VEKGRxcC0+cV9tb3VudCkgJiYKKwkgICAgICAoWEZTX1FNX0lTUERRKGRxcCkgfHwgWEZTX1FNX0lTR0RRKGRxcCkpKSkpIHsKICNpZmRlZiBRVU9UQURFQlVHCiAJCWNtbl9lcnIoQ0VfREVCVUcsICJCTEsgUmVzOiBuYmxrcz0lbGQgKyByZXNiY291bnQ9JUxkIgogCQkJICAiID4gaGFyZGxpbWl0PSVMZD8iLCBuYmxrcywgKnJlc2Jjb3VudHAsIGhhcmRsaW1pdCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5jIGIvZnMveGZzL3N1cHBvcnQvZGVidWcuYwppbmRleCAwOGJiZDNjLi5mNDVhNDlmIDEwMDY0NAotLS0gYS9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5jCisrKyBiL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmMKQEAgLTgxLDIwICs4MSwzIEBACiAJcHJpbnRrKCJBc3NlcnRpb24gZmFpbGVkOiAlcywgZmlsZTogJXMsIGxpbmU6ICVkXG4iLCBleHByLCBmaWxlLCBsaW5lKTsKIAlCVUcoKTsKIH0KLQotI2lmICgoZGVmaW5lZChERUJVRykgfHwgZGVmaW5lZChJTkRVQ0VfSU9fRVJSUk9SKSkgJiYgIWRlZmluZWQoTk9fV0FOVF9SQU5ET00pKQotdW5zaWduZWQgbG9uZyByYW5kb20odm9pZCkKLXsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZwlSYW5kb21WYWx1ZSA9IDE7Ci0JLyogY3ljbGVzIHBzZXVkby1yYW5kb21seSB0aHJvdWdoIGFsbCB2YWx1ZXMgYmV0d2VlbiAxIGFuZCAyXjMxIC0gMiAqLwotCXJlZ2lzdGVyIGxvbmcJcnYgPSBSYW5kb21WYWx1ZTsKLQlyZWdpc3RlciBsb25nCWxvOwotCXJlZ2lzdGVyIGxvbmcJaGk7Ci0KLQloaSA9IHJ2IC8gMTI3NzczOwotCWxvID0gcnYgJSAxMjc3NzM7Ci0JcnYgPSAxNjgwNyAqIGxvIC0gMjgzNiAqIGhpOwotCWlmIChydiA8PSAwKSBydiArPSAyMTQ3NDgzNjQ3OwotCXJldHVybiBSYW5kb21WYWx1ZSA9IHJ2OwotfQotI2VuZGlmIC8qIERFQlVHIHx8IElORFVDRV9JT19FUlJST1IgfHwgIU5PX1dBTlRfUkFORE9NICovCmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5oIGIvZnMveGZzL3N1cHBvcnQvZGVidWcuaAppbmRleCAyYTcwY2M2Li5hMjdhN2M4IDEwMDY0NAotLS0gYS9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5oCisrKyBiL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmgKQEAgLTUwLDcgKzUwLDcgQEAKICNlbHNlIC8qIERFQlVHICovCiAKICMgZGVmaW5lIEFTU0VSVChleHByKQlBU1NFUlRfQUxXQVlTKGV4cHIpCi1leHRlcm4gdW5zaWduZWQgbG9uZyByYW5kb20odm9pZCk7CisjIGluY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogCiAjaWZuZGVmIFNUQVRJQwogIyBkZWZpbmUgU1RBVElDIG5vaW5saW5lCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggZTgwZGRhMy4uOGU5YTQwYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtNzY0LDcgKzc2NCw3IEBACiAJICovCiAJaW50CQlkb2ZpcnN0OwkvKiBzZXQgdG8gZG8gZmlyc3QgYWxnb3JpdGhtICovCiAKLQlkb2ZpcnN0ID0gcmFuZG9tKCkgJiAxOworCWRvZmlyc3QgPSByYW5kb20zMigpICYgMTsKICNlbmRpZgogCS8qCiAJICogR2V0IGEgY3Vyc29yIGZvciB0aGUgYnktc2l6ZSBidHJlZS4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0ci5jIGIvZnMveGZzL3hmc19hdHRyLmMKaW5kZXggOWQzNThmZi4uN2NlNDRhNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyLmMKKysrIGIvZnMveGZzL3hmc19hdHRyLmMKQEAgLTMyOCw4ICszMjgsNyBAQAogCQkJCXhmc190cmFuc19zZXRfc3luYyhhcmdzLnRyYW5zKTsKIAkJCX0KIAkJCWVycjIgPSB4ZnNfdHJhbnNfY29tbWl0KGFyZ3MudHJhbnMsCi0JCQkJCQkgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUywKLQkJCQkJCSBOVUxMKTsKKwkJCQkJCSBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKIAkJCXhmc19pdW5sb2NrKGRwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKIAkJCS8qCkBAIC0zOTcsOCArMzk2LDcgQEAKIAkgKiBDb21taXQgdGhlIGxhc3QgaW4gdGhlIHNlcXVlbmNlIG9mIHRyYW5zYWN0aW9ucy4KIAkgKi8KIAl4ZnNfdHJhbnNfbG9nX2lub2RlKGFyZ3MudHJhbnMsIGRwLCBYRlNfSUxPR19DT1JFKTsKLQllcnJvciA9IHhmc190cmFuc19jb21taXQoYXJncy50cmFucywgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUywKLQkJCQkgTlVMTCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KGFyZ3MudHJhbnMsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCXhmc19pdW5sb2NrKGRwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKIAkvKgpAQCAtNTQ0LDggKzU0Miw3IEBACiAJICogQ29tbWl0IHRoZSBsYXN0IGluIHRoZSBzZXF1ZW5jZSBvZiB0cmFuc2FjdGlvbnMuCiAJICovCiAJeGZzX3RyYW5zX2xvZ19pbm9kZShhcmdzLnRyYW5zLCBkcCwgWEZTX0lMT0dfQ09SRSk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KGFyZ3MudHJhbnMsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMsCi0JCQkJIE5VTEwpOworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdChhcmdzLnRyYW5zLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKIAl4ZnNfaXVubG9jayhkcCwgWEZTX0lMT0NLX0VYQ0wpOwogCiAJLyoKQEAgLTg1OSw4ICs4NTYsNyBAQAogCSAqIENvbW1pdCB0aGUgbGFzdCBpbiB0aGUgc2VxdWVuY2Ugb2YgdHJhbnNhY3Rpb25zLgogCSAqLwogCXhmc190cmFuc19sb2dfaW5vZGUodHJhbnMsIGRwLCBYRlNfSUxPR19DT1JFKTsKLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHJhbnMsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMsCi0JCQkJIE5VTEwpOworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cmFucywgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUyk7CiAJeGZzX2l1bmxvY2soZHAsIFhGU19JTE9DS19FWENMKTsKIAogCXJldHVybihlcnJvcik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuYwppbmRleCA4ZWFiNzNlLi44MWY0NWRhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKQEAgLTMwNTMsNyArMzA1Myw3IEBACiAJICogaXMgaW4gcHJvZ3Jlc3MuIFRoZSBjYWxsZXIgdGFrZXMgdGhlIHJlc3BvbnNpYmlsaXR5IHRvIGNhbmNlbAogCSAqIHRoZSBkdXBsaWNhdGUgdHJhbnNhY3Rpb24gdGhhdCBnZXRzIHJldHVybmVkLgogCSAqLwotCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRyYW5zLCAwLCBOVUxMKSkpCisJaWYgKChlcnJvciA9IHhmc190cmFuc19jb21taXQodHJhbnMsIDApKSkKIAkJcmV0dXJuIChlcnJvcik7CiAKIAl0cmFucyA9ICp0cmFuc3A7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IDg3Nzk1MTguLmIxZWEyNmUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5jCkBAIC0xMzAsNyArMTMwLDYgQEAKIHhmc19ibWFwX2FkZF9leHRlbnRfaG9sZV9kZWxheSgKIAl4ZnNfaW5vZGVfdAkJKmlwLAkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwogCXhmc19leHRudW1fdAkJaWR4LAkvKiBleHRlbnQgbnVtYmVyIHRvIHVwZGF0ZS9pbnNlcnQgKi8KLQl4ZnNfYnRyZWVfY3VyX3QJCSpjdXIsCS8qIGlmIG51bGwsIG5vdCBhIGJ0cmVlICovCiAJeGZzX2JtYnRfaXJlY190CQkqbmV3LAkvKiBuZXcgZGF0YSB0byBhZGQgdG8gZmlsZSBleHRlbnRzICovCiAJaW50CQkJKmxvZ2ZsYWdzcCwvKiBpbm9kZSBsb2dnaW5nIGZsYWdzICovCiAJeGZzX2V4dGRlbHRhX3QJCSpkZWx0YSwgLyogQ2hhbmdlIG1hZGUgdG8gaW5jb3JlIGV4dGVudHMgKi8KQEAgLTM5OSw3ICszOTgsNiBAQAogCiBTVEFUSUMgaW50CiB4ZnNfYm1hcF9kaXNrX2NvdW50X2xlYXZlcygKLQl4ZnNfaWZvcmtfdAkJKmlmcCwKIAl4ZnNfZXh0bnVtX3QJCWlkeCwKIAl4ZnNfYm1idF9ibG9ja190CSpibG9jaywKIAlpbnQJCQludW1yZWNzLApAQCAtNTgwLDcgKzU3OCw3IEBACiAJCWlmIChjdXIpCiAJCQlBU1NFUlQoKGN1ci0+YmNfcHJpdmF0ZS5iLmZsYWdzICYKIAkJCQlYRlNfQlRDVVJfQlBSVl9XQVNERUwpID09IDApOwotCQlpZiAoKGVycm9yID0geGZzX2JtYXBfYWRkX2V4dGVudF9ob2xlX2RlbGF5KGlwLCBpZHgsIGN1ciwgbmV3LAorCQlpZiAoKGVycm9yID0geGZzX2JtYXBfYWRkX2V4dGVudF9ob2xlX2RlbGF5KGlwLCBpZHgsIG5ldywKIAkJCQkmbG9nZmxhZ3MsIGRlbHRhLCByc3ZkKSkpCiAJCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTg0MSw3ICsxODM5LDYgQEAKIHhmc19ibWFwX2FkZF9leHRlbnRfaG9sZV9kZWxheSgKIAl4ZnNfaW5vZGVfdAkJKmlwLAkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwogCXhmc19leHRudW1fdAkJaWR4LAkvKiBleHRlbnQgbnVtYmVyIHRvIHVwZGF0ZS9pbnNlcnQgKi8KLQl4ZnNfYnRyZWVfY3VyX3QJCSpjdXIsCS8qIGlmIG51bGwsIG5vdCBhIGJ0cmVlICovCiAJeGZzX2JtYnRfaXJlY190CQkqbmV3LAkvKiBuZXcgZGF0YSB0byBhZGQgdG8gZmlsZSBleHRlbnRzICovCiAJaW50CQkJKmxvZ2ZsYWdzcCwgLyogaW5vZGUgbG9nZ2luZyBmbGFncyAqLwogCXhmc19leHRkZWx0YV90CQkqZGVsdGEsIC8qIENoYW5nZSBtYWRlIHRvIGluY29yZSBleHRlbnRzICovCkBAIC00MDcxLDcgKzQwNjgsNyBAQAogCX0KIAlpZiAoKGVycm9yID0geGZzX2JtYXBfZmluaXNoKCZ0cCwgJmZsaXN0LCAmY29tbWl0dGVkKSkpCiAJCWdvdG8gZXJyb3IyOwotCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1BFUk1fTE9HX1JFUywgTlVMTCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTKTsKIAlBU1NFUlQoaXAtPmlfZGYuaWZfZXh0X21heCA9PQogCSAgICAgICBYRlNfSUZPUktfRFNJWkUoaXApIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KSk7CiAJcmV0dXJuIGVycm9yOwpAQCAtNDIyNyw3ICs0MjI0LDcgQEAKIAlsb2dyZXMgPSBudHAtPnRfbG9nX3JlczsKIAlsb2djb3VudCA9IG50cC0+dF9sb2dfY291bnQ7CiAJbnRwID0geGZzX3RyYW5zX2R1cCgqdHApOwotCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCgqdHAsIDAsIE5VTEwpOworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCgqdHAsIDApOwogCSp0cCA9IG50cDsKIAkqY29tbWl0dGVkID0gMTsKIAkvKgpAQCAtNDQ0Nyw4ICs0NDQ0LDExIEBACiAJeGZzX2JtYnRfaXJlY190CXM7CQkvKiBpbnRlcm5hbCB2ZXJzaW9uIG9mIGV4dGVudCAqLwogCiAjaWZuZGVmIERFQlVHCi0JaWYgKHdoaWNoZm9yayA9PSBYRlNfREFUQV9GT1JLKQotCQlyZXR1cm4gaXAtPmlfZC5kaV9zaXplID09IGlwLT5pX21vdW50LT5tX3NiLnNiX2Jsb2Nrc2l6ZTsKKwlpZiAod2hpY2hmb3JrID09IFhGU19EQVRBX0ZPUkspIHsKKwkJcmV0dXJuICgoaXAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHKSA/CisJCQkoaXAtPmlfc2l6ZSA9PSBpcC0+aV9tb3VudC0+bV9zYi5zYl9ibG9ja3NpemUpIDoKKwkJCShpcC0+aV9kLmRpX3NpemUgPT0gaXAtPmlfbW91bnQtPm1fc2Iuc2JfYmxvY2tzaXplKTsKKwl9CiAjZW5kaWYJLyogIURFQlVHICovCiAJaWYgKFhGU19JRk9SS19ORVhURU5UUyhpcCwgd2hpY2hmb3JrKSAhPSAxKQogCQlyZXR1cm4gMDsKQEAgLTQ0NjAsNyArNDQ2MCw3IEBACiAJeGZzX2JtYnRfZ2V0X2FsbChlcCwgJnMpOwogCXJ2YWwgPSBzLmJyX3N0YXJ0b2ZmID09IDAgJiYgcy5icl9ibG9ja2NvdW50ID09IDE7CiAJaWYgKHJ2YWwgJiYgd2hpY2hmb3JrID09IFhGU19EQVRBX0ZPUkspCi0JCUFTU0VSVChpcC0+aV9kLmRpX3NpemUgPT0gaXAtPmlfbW91bnQtPm1fc2Iuc2JfYmxvY2tzaXplKTsKKwkJQVNTRVJUKGlwLT5pX3NpemUgPT0gaXAtPmlfbW91bnQtPm1fc2Iuc2JfYmxvY2tzaXplKTsKIAlyZXR1cm4gcnZhbDsKIH0KIApAQCAtNTgyMCw3ICs1ODIwLDcgQEAKIAkJCWZpeGxlbiA9IFhGU19NQVhJT0ZGU0VUKG1wKTsKIAkJfSBlbHNlIHsKIAkJCXByZWFsbG9jZWQgPSAwOwotCQkJZml4bGVuID0gaXAtPmlfZC5kaV9zaXplOworCQkJZml4bGVuID0gaXAtPmlfc2l6ZTsKIAkJfQogCX0gZWxzZSB7CiAJCXByZWFsbG9jZWQgPSAwOwpAQCAtNTg0NCw3ICs1ODQ0LDggQEAKIAogCXhmc19pbG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwogCi0JaWYgKHdoaWNoZm9yayA9PSBYRlNfREFUQV9GT1JLICYmIGlwLT5pX2RlbGF5ZWRfYmxrcykgeworCWlmICh3aGljaGZvcmsgPT0gWEZTX0RBVEFfRk9SSyAmJgorCQkoaXAtPmlfZGVsYXllZF9ibGtzIHx8IGlwLT5pX3NpemUgPiBpcC0+aV9kLmRpX3NpemUpKSB7CiAJCS8qIHhmc19mc2l6ZV90IGxhc3RfYnl0ZSA9IHhmc19maWxlX2xhc3RfYnl0ZShpcCk7ICovCiAJCWVycm9yID0gYmh2X3ZvcF9mbHVzaF9wYWdlcyh2cCwgKHhmc19vZmZfdCkwLCAtMSwgMCwgRklfUkVNQVBGKTsKIAl9CkBAIC02NDI1LDggKzY0MjYsOCBAQAogCQlmb3IgKDs7KSB7CiAJCQluZXh0Ym5vID0gYmU2NF90b19jcHUoYmxvY2stPmJiX3JpZ2h0c2liKTsKIAkJCW51bXJlY3MgPSBiZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcyk7Ci0JCQlpZiAodW5saWtlbHkoeGZzX2JtYXBfZGlza19jb3VudF9sZWF2ZXMoaWZwLAotCQkJCQkwLCBibG9jaywgbnVtcmVjcywgY291bnQpIDwgMCkpIHsKKwkJCWlmICh1bmxpa2VseSh4ZnNfYm1hcF9kaXNrX2NvdW50X2xlYXZlcygwLAorCQkJCQlibG9jaywgbnVtcmVjcywgY291bnQpIDwgMCkpIHsKIAkJCQl4ZnNfdHJhbnNfYnJlbHNlKHRwLCBicCk7CiAJCQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2JtYXBfY291bnRfdHJlZSgyKSIsCiAJCQkJCQkgWEZTX0VSUkxFVkVMX0xPVywgbXApOwpAQCAtNjQ3Miw3ICs2NDczLDYgQEAKICAqLwogaW50CiB4ZnNfYm1hcF9kaXNrX2NvdW50X2xlYXZlcygKLQl4ZnNfaWZvcmtfdAkJKmlmcCwKIAl4ZnNfZXh0bnVtX3QJCWlkeCwKIAl4ZnNfYm1idF9ibG9ja190CSpibG9jaywKIAlpbnQJCQludW1yZWNzLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kZnJhZy5jIGIvZnMveGZzL3hmc19kZnJhZy5jCmluZGV4IGI4NDdlNmEuLmRlMzVkMTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGZyYWcuYworKysgYi9mcy94ZnMveGZzX2RmcmFnLmMKQEAgLTE5OSw3ICsxOTksOSBAQAogCiAJaWYgKFZOX0NBQ0hFRCh0dnApICE9IDApIHsKIAkJeGZzX2ludmFsX2NhY2hlZF90cmFjZSgmdGlwLT5pX2lvY29yZSwgMCwgLTEsIDAsIC0xKTsKLQkJYmh2X3ZvcF9mbHVzaGludmFsX3BhZ2VzKHR2cCwgMCwgLTEsIEZJX1JFTUFQRl9MT0NLRUQpOworCQllcnJvciA9IGJodl92b3BfZmx1c2hpbnZhbF9wYWdlcyh0dnAsIDAsIC0xLCBGSV9SRU1BUEZfTE9DS0VEKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBlcnJvcjA7CiAJfQogCiAJLyogVmVyaWZ5IE9fRElSRUNUIGZvciBmdG1wICovCkBAIC0zODIsNyArMzg0LDcgQEAKIAkJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKIAl9CiAKLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19TV0FQRVhULCBOVUxMKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19TV0FQRVhUKTsKIAlsb2NrZWQgPSAwOwogCiAgZXJyb3IwOgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMgYi9mcy94ZnMveGZzX2RpcjJfYmxvY2suYwppbmRleCA5ZDc0MzhiLi4zYWNjYzFkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfYmxvY2suYworKysgYi9mcy94ZnMveGZzX2RpcjJfYmxvY2suYwpAQCAtMjgyLDggKzI4Miw3IEBACiAJCSAqIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSB0aGUgbmV4dCBjYWxsIHRvIHVzZV9mcmVlLgogCQkgKi8KIAkJaWYgKG5lZWRzY2FuKSB7Ci0JCQl4ZnNfZGlyMl9kYXRhX2ZyZWVzY2FuKG1wLCAoeGZzX2RpcjJfZGF0YV90ICopYmxvY2ssCi0JCQkJJm5lZWRsb2csIE5VTEwpOworCQkJeGZzX2RpcjJfZGF0YV9mcmVlc2NhbihtcCwgKHhmc19kaXIyX2RhdGFfdCAqKWJsb2NrLCAmbmVlZGxvZyk7CiAJCQluZWVkc2NhbiA9IDA7CiAJCX0KIAl9CkBAIC0zMzMsNyArMzMyLDcgQEAKIAkJICovCiAJCWlmIChuZWVkc2NhbikgewogCQkJeGZzX2RpcjJfZGF0YV9mcmVlc2NhbihtcCwgKHhmc19kaXIyX2RhdGFfdCAqKWJsb2NrLAotCQkJCSZuZWVkbG9nLCBOVUxMKTsKKwkJCQkmbmVlZGxvZyk7CiAJCQluZWVkc2NhbiA9IDA7CiAJCX0KIAkJLyoKQEAgLTQxOCw4ICs0MTcsNyBAQAogCSAqIENsZWFuIHVwIHRoZSBiZXN0ZnJlZSBhcnJheSBhbmQgbG9nIHRoZSBoZWFkZXIsIHRhaWwsIGFuZCBlbnRyeS4KIAkgKi8KIAlpZiAobmVlZHNjYW4pCi0JCXhmc19kaXIyX2RhdGFfZnJlZXNjYW4obXAsICh4ZnNfZGlyMl9kYXRhX3QgKilibG9jaywgJm5lZWRsb2csCi0JCQlOVUxMKTsKKwkJeGZzX2RpcjJfZGF0YV9mcmVlc2NhbihtcCwgKHhmc19kaXIyX2RhdGFfdCAqKWJsb2NrLCAmbmVlZGxvZyk7CiAJaWYgKG5lZWRsb2cpCiAJCXhmc19kaXIyX2RhdGFfbG9nX2hlYWRlcih0cCwgYnApOwogCXhmc19kaXIyX2Jsb2NrX2xvZ190YWlsKHRwLCBicCk7CkBAIC03OTgsOCArNzk2LDcgQEAKIAkgKiBGaXggdXAgYmVzdGZyZWUsIGxvZyB0aGUgaGVhZGVyIGlmIG5lY2Vzc2FyeS4KIAkgKi8KIAlpZiAobmVlZHNjYW4pCi0JCXhmc19kaXIyX2RhdGFfZnJlZXNjYW4obXAsICh4ZnNfZGlyMl9kYXRhX3QgKilibG9jaywgJm5lZWRsb2csCi0JCQlOVUxMKTsKKwkJeGZzX2RpcjJfZGF0YV9mcmVlc2NhbihtcCwgKHhmc19kaXIyX2RhdGFfdCAqKWJsb2NrLCAmbmVlZGxvZyk7CiAJaWYgKG5lZWRsb2cpCiAJCXhmc19kaXIyX2RhdGFfbG9nX2hlYWRlcih0cCwgYnApOwogCXhmc19kaXIyX2RhdGFfY2hlY2soZHAsIGJwKTsKQEAgLTk5Niw4ICs5OTMsNyBAQAogCSAqIFNjYW4gdGhlIGJlc3RmcmVlIGlmIHdlIG5lZWQgaXQgYW5kIGxvZyB0aGUgZGF0YSBibG9jayBoZWFkZXIuCiAJICovCiAJaWYgKG5lZWRzY2FuKQotCQl4ZnNfZGlyMl9kYXRhX2ZyZWVzY2FuKG1wLCAoeGZzX2RpcjJfZGF0YV90ICopYmxvY2ssICZuZWVkbG9nLAotCQkJTlVMTCk7CisJCXhmc19kaXIyX2RhdGFfZnJlZXNjYW4obXAsICh4ZnNfZGlyMl9kYXRhX3QgKilibG9jaywgJm5lZWRsb2cpOwogCWlmIChuZWVkbG9nKQogCQl4ZnNfZGlyMl9kYXRhX2xvZ19oZWFkZXIodHAsIGRicCk7CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmMgYi9mcy94ZnMveGZzX2RpcjJfZGF0YS5jCmluZGV4IGY3Yzc5OTIuLmMyMTFjMzcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2RhdGEuYwpAQCAtMzI0LDggKzMyNCw3IEBACiB4ZnNfZGlyMl9kYXRhX2ZyZWVzY2FuKAogCXhmc19tb3VudF90CQkqbXAsCQkvKiBmaWxlc3lzdGVtIG1vdW50IHBvaW50ICovCiAJeGZzX2RpcjJfZGF0YV90CQkqZCwJCS8qIGRhdGEgYmxvY2sgcG9pbnRlciAqLwotCWludAkJCSpsb2doZWFkLAkvKiBvdXQ6IGxvZyBkYXRhIGhlYWRlciAqLwotCWNoYXIJCQkqYWVuZHApCQkvKiBpbjogY2FsbGVyJ3MgZW5kcCAqLworCWludAkJCSpsb2doZWFkKQkvKiBvdXQ6IGxvZyBkYXRhIGhlYWRlciAqLwogewogCXhmc19kaXIyX2Jsb2NrX3RhaWxfdAkqYnRwOwkJLyogYmxvY2sgdGFpbCAqLwogCXhmc19kaXIyX2RhdGFfZW50cnlfdAkqZGVwOwkJLyogYWN0aXZlIGRhdGEgZW50cnkgKi8KQEAgLTM0Niw5ICszNDUsNyBAQAogCSAqIFNldCB1cCBwb2ludGVycy4KIAkgKi8KIAlwID0gKGNoYXIgKilkLT51OwotCWlmIChhZW5kcCkKLQkJZW5kcCA9IGFlbmRwOwotCWVsc2UgaWYgKGJlMzJfdG9fY3B1KGQtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpIHsKKwlpZiAoYmUzMl90b19jcHUoZC0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9CTE9DS19NQUdJQykgewogCQlidHAgPSBYRlNfRElSMl9CTE9DS19UQUlMX1AobXAsICh4ZnNfZGlyMl9ibG9ja190ICopZCk7CiAJCWVuZHAgPSAoY2hhciAqKVhGU19ESVIyX0JMT0NLX0xFQUZfUChidHApOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2RhdGEuaCBiL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmgKaW5kZXggYTZhZTJkMi4uYzk0YzkwOSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2RhdGEuaAorKysgYi9mcy94ZnMveGZzX2RpcjJfZGF0YS5oCkBAIC0xNjYsNyArMTY2LDcgQEAKIGV4dGVybiB4ZnNfZGlyMl9kYXRhX2ZyZWVfdCAqeGZzX2RpcjJfZGF0YV9mcmVlaW5zZXJ0KHhmc19kaXIyX2RhdGFfdCAqZCwKIAkJCQl4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICpkdXAsIGludCAqbG9naGVhZCk7CiBleHRlcm4gdm9pZCB4ZnNfZGlyMl9kYXRhX2ZyZWVzY2FuKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCB4ZnNfZGlyMl9kYXRhX3QgKmQsCi0JCQkJaW50ICpsb2doZWFkLCBjaGFyICphZW5kcCk7CisJCQkJaW50ICpsb2doZWFkKTsKIGV4dGVybiBpbnQgeGZzX2RpcjJfZGF0YV9pbml0KHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywgeGZzX2RpcjJfZGJfdCBibGtubywKIAkJCQlzdHJ1Y3QgeGZzX2RhYnVmICoqYnBwKTsKIGV4dGVybiB2b2lkIHhmc19kaXIyX2RhdGFfbG9nX2VudHJ5KHN0cnVjdCB4ZnNfdHJhbnMgKnRwLCBzdHJ1Y3QgeGZzX2RhYnVmICpicCwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCmluZGV4IGIxY2YxZmIuLmRiMTRlYTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2xlYWYuYwpAQCAtMTMzLDggKzEzMyw3IEBACiAJICovCiAJYmxvY2stPmhkci5tYWdpYyA9IGNwdV90b19iZTMyKFhGU19ESVIyX0RBVEFfTUFHSUMpOwogCWlmIChuZWVkc2NhbikKLQkJeGZzX2RpcjJfZGF0YV9mcmVlc2NhbihtcCwgKHhmc19kaXIyX2RhdGFfdCAqKWJsb2NrLCAmbmVlZGxvZywKLQkJCU5VTEwpOworCQl4ZnNfZGlyMl9kYXRhX2ZyZWVzY2FuKG1wLCAoeGZzX2RpcjJfZGF0YV90ICopYmxvY2ssICZuZWVkbG9nKTsKIAkvKgogCSAqIFNldCB1cCBsZWFmIHRhaWwgYW5kIGJlc3RzIHRhYmxlLgogCSAqLwpAQCAtNDE0LDcgKzQxMyw3IEBACiAJICogTmVlZCB0byBzY2FuIGZpeCB1cCB0aGUgYmVzdGZyZWUgdGFibGUuCiAJICovCiAJaWYgKG5lZWRzY2FuKQotCQl4ZnNfZGlyMl9kYXRhX2ZyZWVzY2FuKG1wLCBkYXRhLCAmbmVlZGxvZywgTlVMTCk7CisJCXhmc19kaXIyX2RhdGFfZnJlZXNjYW4obXAsIGRhdGEsICZuZWVkbG9nKTsKIAkvKgogCSAqIE5lZWQgdG8gbG9nIHRoZSBkYXRhIGJsb2NrJ3MgaGVhZGVyLgogCSAqLwpAQCAtMTQ5Niw3ICsxNDk1LDcgQEAKIAkgKiBsb2cgdGhlIGRhdGEgYmxvY2sgaGVhZGVyIGlmIG5lY2Vzc2FyeS4KIAkgKi8KIAlpZiAobmVlZHNjYW4pCi0JCXhmc19kaXIyX2RhdGFfZnJlZXNjYW4obXAsIGRhdGEsICZuZWVkbG9nLCBOVUxMKTsKKwkJeGZzX2RpcjJfZGF0YV9mcmVlc2NhbihtcCwgZGF0YSwgJm5lZWRsb2cpOwogCWlmIChuZWVkbG9nKQogCQl4ZnNfZGlyMl9kYXRhX2xvZ19oZWFkZXIodHAsIGRicCk7CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCmluZGV4IDljYTcxNzEuLmQwODNjMzggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX25vZGUuYwpAQCAtOTA0LDcgKzkwNCw3IEBACiAJICogTG9nIHRoZSBkYXRhIGJsb2NrIGhlYWRlciBpZiBuZWVkZWQuCiAJICovCiAJaWYgKG5lZWRzY2FuKQotCQl4ZnNfZGlyMl9kYXRhX2ZyZWVzY2FuKG1wLCBkYXRhLCAmbmVlZGxvZywgTlVMTCk7CisJCXhmc19kaXIyX2RhdGFfZnJlZXNjYW4obXAsIGRhdGEsICZuZWVkbG9nKTsKIAlpZiAobmVlZGxvZykKIAkJeGZzX2RpcjJfZGF0YV9sb2dfaGVhZGVyKHRwLCBkYnApOwogCXhmc19kaXIyX2RhdGFfY2hlY2soZHAsIGRicCk7CkBAIC0xNzA1LDcgKzE3MDUsNyBAQAogCSAqIFJlc2NhbiB0aGUgYmxvY2sgZm9yIGJlc3RmcmVlIGlmIG5lZWRlZC4KIAkgKi8KIAlpZiAobmVlZHNjYW4pCi0JCXhmc19kaXIyX2RhdGFfZnJlZXNjYW4obXAsIGRhdGEsICZuZWVkbG9nLCBOVUxMKTsKKwkJeGZzX2RpcjJfZGF0YV9mcmVlc2NhbihtcCwgZGF0YSwgJm5lZWRsb2cpOwogCS8qCiAJICogTG9nIHRoZSBkYXRhIGJsb2NrIGhlYWRlciBpZiBuZWVkZWQuCiAJICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Vycm9yLmMgYi9mcy94ZnMveGZzX2Vycm9yLmMKaW5kZXggYjFhZjU0NC4uOGM0MzMxNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19lcnJvci5jCisrKyBiL2ZzL3hmcy94ZnNfZXJyb3IuYwpAQCAtODAsNyArODAsNyBAQAogCWludCBpOwogCWludDY0X3QgZnNpZDsKIAotCWlmIChyYW5kb20oKSAlIHJhbmRmYWN0b3IpCisJaWYgKHJhbmRvbTMyKCkgJSByYW5kZmFjdG9yKQogCQlyZXR1cm4gMDsKIAogCW1lbWNweSgmZnNpZCwgZnNpZHAsIHNpemVvZih4ZnNfZnNpZF90KSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Zzb3BzLmMgYi9mcy94ZnMveGZzX2Zzb3BzLmMKaW5kZXggMzJjMzdjMS4uYjU5OWU2YiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19mc29wcy5jCisrKyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAJCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9GREJMT0NLUywgbmZyZWUpOwogCWlmIChkcGN0KQogCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfSU1BWFBDVCwgZHBjdCk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwLCBOVUxMKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOwogCWlmIChlcnJvcikgewogCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtNjA1LDcgKzYwNSw3IEBACiAJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CiAJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwogCXhmc190cmFuc19zZXRfc3luYyh0cCk7Ci0JeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCwgTlVMTCk7CisJeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiAKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCBjMWM4OWRhLi4xMTQ0MzNhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtODc5LDE3ICs4NzksMTcgQEAKIAkgICAgICAgKFhGU19JT0xPQ0tfU0hBUkVEIHwgWEZTX0lPTE9DS19FWENMKSk7CiAJQVNTRVJUKChsb2NrX2ZsYWdzICYgKFhGU19JTE9DS19TSEFSRUQgfCBYRlNfSUxPQ0tfRVhDTCkpICE9CiAJICAgICAgIChYRlNfSUxPQ0tfU0hBUkVEIHwgWEZTX0lMT0NLX0VYQ0wpKTsKLQlBU1NFUlQoKGxvY2tfZmxhZ3MgJiB+WEZTX0xPQ0tfTUFTSykgPT0gMCk7CisJQVNTRVJUKChsb2NrX2ZsYWdzICYgfihYRlNfTE9DS19NQVNLIHwgWEZTX0xPQ0tfREVQX01BU0spKSA9PSAwKTsKIAogCWlmIChsb2NrX2ZsYWdzICYgWEZTX0lPTE9DS19FWENMKSB7Ci0JCW1ydXBkYXRlKCZpcC0+aV9pb2xvY2spOworCQltcnVwZGF0ZV9uZXN0ZWQoJmlwLT5pX2lvbG9jaywgWEZTX0lPTE9DS19ERVAobG9ja19mbGFncykpOwogCX0gZWxzZSBpZiAobG9ja19mbGFncyAmIFhGU19JT0xPQ0tfU0hBUkVEKSB7Ci0JCW1yYWNjZXNzKCZpcC0+aV9pb2xvY2spOworCQltcmFjY2Vzc19uZXN0ZWQoJmlwLT5pX2lvbG9jaywgWEZTX0lPTE9DS19ERVAobG9ja19mbGFncykpOwogCX0KIAlpZiAobG9ja19mbGFncyAmIFhGU19JTE9DS19FWENMKSB7Ci0JCW1ydXBkYXRlKCZpcC0+aV9sb2NrKTsKKwkJbXJ1cGRhdGVfbmVzdGVkKCZpcC0+aV9sb2NrLCBYRlNfSUxPQ0tfREVQKGxvY2tfZmxhZ3MpKTsKIAl9IGVsc2UgaWYgKGxvY2tfZmxhZ3MgJiBYRlNfSUxPQ0tfU0hBUkVEKSB7Ci0JCW1yYWNjZXNzKCZpcC0+aV9sb2NrKTsKKwkJbXJhY2Nlc3NfbmVzdGVkKCZpcC0+aV9sb2NrLCBYRlNfSUxPQ0tfREVQKGxvY2tfZmxhZ3MpKTsKIAl9CiAJeGZzX2lsb2NrX3RyYWNlKGlwLCAxLCBsb2NrX2ZsYWdzLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcyk7CiB9CkBAIC05MjMsNyArOTIzLDcgQEAKIAkgICAgICAgKFhGU19JT0xPQ0tfU0hBUkVEIHwgWEZTX0lPTE9DS19FWENMKSk7CiAJQVNTRVJUKChsb2NrX2ZsYWdzICYgKFhGU19JTE9DS19TSEFSRUQgfCBYRlNfSUxPQ0tfRVhDTCkpICE9CiAJICAgICAgIChYRlNfSUxPQ0tfU0hBUkVEIHwgWEZTX0lMT0NLX0VYQ0wpKTsKLQlBU1NFUlQoKGxvY2tfZmxhZ3MgJiB+WEZTX0xPQ0tfTUFTSykgPT0gMCk7CisJQVNTRVJUKChsb2NrX2ZsYWdzICYgfihYRlNfTE9DS19NQVNLIHwgWEZTX0xPQ0tfREVQX01BU0spKSA9PSAwKTsKIAogCWlvbG9ja2VkID0gMDsKIAlpZiAobG9ja19mbGFncyAmIFhGU19JT0xPQ0tfRVhDTCkgewpAQCAtOTgzLDcgKzk4Myw4IEBACiAJICAgICAgIChYRlNfSU9MT0NLX1NIQVJFRCB8IFhGU19JT0xPQ0tfRVhDTCkpOwogCUFTU0VSVCgobG9ja19mbGFncyAmIChYRlNfSUxPQ0tfU0hBUkVEIHwgWEZTX0lMT0NLX0VYQ0wpKSAhPQogCSAgICAgICAoWEZTX0lMT0NLX1NIQVJFRCB8IFhGU19JTE9DS19FWENMKSk7Ci0JQVNTRVJUKChsb2NrX2ZsYWdzICYgfihYRlNfTE9DS19NQVNLIHwgWEZTX0lVTkxPQ0tfTk9OT1RJRlkpKSA9PSAwKTsKKwlBU1NFUlQoKGxvY2tfZmxhZ3MgJiB+KFhGU19MT0NLX01BU0sgfCBYRlNfSVVOTE9DS19OT05PVElGWSB8CisJCQlYRlNfTE9DS19ERVBfTUFTSykpID09IDApOwogCUFTU0VSVChsb2NrX2ZsYWdzICE9IDApOwogCiAJaWYgKGxvY2tfZmxhZ3MgJiAoWEZTX0lPTE9DS19TSEFSRUQgfCBYRlNfSU9MT0NLX0VYQ0wpKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggM2RhOTgyOS4uM2NhNWQ0MyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtNDQyLDYgKzQ0Miw3IEBACiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJCX0KIAkJaXAtPmlfZC5kaV9zaXplID0gMDsKKwkJaXAtPmlfc2l6ZSA9IDA7CiAJCWlwLT5pX2RmLmlmX3UyLmlmX3JkZXYgPSBJTlRfR0VUKGRpcC0+ZGlfdS5kaV9kZXYsIEFSQ0hfQ09OVkVSVCk7CiAJCWJyZWFrOwogCkBAIC05ODAsNiArOTgxLDcgQEAKIAl9CiAKIAlpcC0+aV9kZWxheWVkX2Jsa3MgPSAwOworCWlwLT5pX3NpemUgPSBpcC0+aV9kLmRpX3NpemU7CiAKIAkvKgogCSAqIE1hcmsgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBpbm9kZSBhcyBzb21ldGhpbmcgdG8ga2VlcApAQCAtMTE3MCw2ICsxMTcyLDcgQEAKIAl9CiAKIAlpcC0+aV9kLmRpX3NpemUgPSAwOworCWlwLT5pX3NpemUgPSAwOwogCWlwLT5pX2QuZGlfbmV4dGVudHMgPSAwOwogCUFTU0VSVChpcC0+aV9kLmRpX25ibG9ja3MgPT0gMCk7CiAJeGZzX2ljaGd0aW1lKGlwLCBYRlNfSUNIR1RJTUVfQ0hHfFhGU19JQ0hHVElNRV9BQ0N8WEZTX0lDSEdUSU1FX01PRCk7CkBAIC0xMzQwLDcgKzEzNDMsNyBAQAogCX0gZWxzZSB7CiAJCWxhc3RfYmxvY2sgPSAwOwogCX0KLQlzaXplX2xhc3RfYmxvY2sgPSBYRlNfQl9UT19GU0IobXAsICh4ZnNfdWZzaXplX3QpaXAtPmlfZC5kaV9zaXplKTsKKwlzaXplX2xhc3RfYmxvY2sgPSBYRlNfQl9UT19GU0IobXAsICh4ZnNfdWZzaXplX3QpaXAtPmlfc2l6ZSk7CiAJbGFzdF9ibG9jayA9IFhGU19GSUxFT0ZGX01BWChsYXN0X2Jsb2NrLCBzaXplX2xhc3RfYmxvY2spOwogCiAJbGFzdF9ieXRlID0gWEZTX0ZTQl9UT19CKG1wLCBsYXN0X2Jsb2NrKTsKQEAgLTE0MjEsNyArMTQyNCw3IEBACiAgKiBtdXN0IGJlIGNhbGxlZCBhZ2FpbiB3aXRoIGFsbCB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgdGhlIGluaXRpYWwKICAqIGNhbGwuCiAgKi8KLXZvaWQKK2ludAogeGZzX2l0cnVuY2F0ZV9zdGFydCgKIAl4ZnNfaW5vZGVfdAkqaXAsCiAJdWludAkJZmxhZ3MsCkBAIC0xNDMxLDkgKzE0MzQsMTAgQEAKIAl4ZnNfb2ZmX3QJdG9zc19zdGFydDsKIAl4ZnNfbW91bnRfdAkqbXA7CiAJYmh2X3Zub2RlX3QJKnZwOworCWludAkJZXJyb3IgPSAwOwogCiAJQVNTRVJUKGlzbXJsb2NrZWQoJmlwLT5pX2lvbG9jaywgTVJfVVBEQVRFKSAhPSAwKTsKLQlBU1NFUlQoKG5ld19zaXplID09IDApIHx8IChuZXdfc2l6ZSA8PSBpcC0+aV9kLmRpX3NpemUpKTsKKwlBU1NFUlQoKG5ld19zaXplID09IDApIHx8IChuZXdfc2l6ZSA8PSBpcC0+aV9zaXplKSk7CiAJQVNTRVJUKChmbGFncyA9PSBYRlNfSVRSVU5DX0RFRklOSVRFKSB8fAogCSAgICAgICAoZmxhZ3MgPT0gWEZTX0lUUlVOQ19NQVlCRSkpOwogCkBAIC0xNDY4LDcgKzE0NzIsNyBAQAogCQkgKiBmaWxlIHNpemUsIHNvIHRoZXJlIGlzIG5vIHdheSB0aGF0IHRoZSBkYXRhIGV4dGVuZGVkCiAJCSAqIG91dCB0aGVyZS4KIAkJICovCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQogCWxhc3RfYnl0ZSA9IHhmc19maWxlX2xhc3RfYnl0ZShpcCk7CiAJeGZzX2l0cnVuY190cmFjZShYRlNfSVRSVU5DX1NUQVJULCBpcCwgZmxhZ3MsIG5ld19zaXplLCB0b3NzX3N0YXJ0LApAQCAtMTQ3Nyw3ICsxNDgxLDcgQEAKIAkJaWYgKGZsYWdzICYgWEZTX0lUUlVOQ19ERUZJTklURSkgewogCQkJYmh2X3ZvcF90b3NzX3BhZ2VzKHZwLCB0b3NzX3N0YXJ0LCAtMSwgRklfUkVNQVBGX0xPQ0tFRCk7CiAJCX0gZWxzZSB7Ci0JCQliaHZfdm9wX2ZsdXNoaW52YWxfcGFnZXModnAsIHRvc3Nfc3RhcnQsIC0xLCBGSV9SRU1BUEZfTE9DS0VEKTsKKwkJCWVycm9yID0gYmh2X3ZvcF9mbHVzaGludmFsX3BhZ2VzKHZwLCB0b3NzX3N0YXJ0LCAtMSwgRklfUkVNQVBGX0xPQ0tFRCk7CiAJCX0KIAl9CiAKQEAgLTE0ODYsNiArMTQ5MCw3IEBACiAJCUFTU0VSVChWTl9DQUNIRUQodnApID09IDApOwogCX0KICNlbmRpZgorCXJldHVybiBlcnJvcjsKIH0KIAogLyoKQEAgLTE1NTYsNyArMTU2MSw3IEBACiAKIAlBU1NFUlQoaXNtcmxvY2tlZCgmaXAtPmlfaW9sb2NrLCBNUl9VUERBVEUpICE9IDApOwogCUFTU0VSVChpc21ybG9ja2VkKCZpcC0+aV9sb2NrLCBNUl9VUERBVEUpICE9IDApOwotCUFTU0VSVCgobmV3X3NpemUgPT0gMCkgfHwgKG5ld19zaXplIDw9IGlwLT5pX2QuZGlfc2l6ZSkpOworCUFTU0VSVCgobmV3X3NpemUgPT0gMCkgfHwgKG5ld19zaXplIDw9IGlwLT5pX3NpemUpKTsKIAlBU1NFUlQoKnRwICE9IE5VTEwpOwogCUFTU0VSVCgoKnRwKS0+dF9mbGFncyAmIFhGU19UUkFOU19QRVJNX0xPR19SRVMpOwogCUFTU0VSVChpcC0+aV90cmFuc3AgPT0gKnRwKTsKQEAgLTE2MzAsOCArMTYzNSwyMCBAQAogCSAqLwogCWlmIChmb3JrID09IFhGU19EQVRBX0ZPUkspIHsKIAkJaWYgKGlwLT5pX2QuZGlfbmV4dGVudHMgPiAwKSB7Ci0JCQlpcC0+aV9kLmRpX3NpemUgPSBuZXdfc2l6ZTsKLQkJCXhmc190cmFuc19sb2dfaW5vZGUobnRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CisJCQkvKgorCQkJICogSWYgd2UgYXJlIG5vdCBjaGFuZ2luZyB0aGUgZmlsZSBzaXplIHRoZW4gZG8KKwkJCSAqIG5vdCB1cGRhdGUgdGhlIG9uLWRpc2sgZmlsZSBzaXplIC0gd2UgbWF5IGJlCisJCQkgKiBjYWxsZWQgZnJvbSB4ZnNfaW5hY3RpdmVfZnJlZV9lb2ZibG9ja3MoKS4gIElmIHdlCisJCQkgKiB1cGRhdGUgdGhlIG9uLWRpc2sgZmlsZSBzaXplIGFuZCB0aGVuIHRoZSBzeXN0ZW0KKwkJCSAqIGNyYXNoZXMgYmVmb3JlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcmUKKwkJCSAqIGZsdXNoZWQgdG8gZGlzayB0aGVuIHRoZSBmaWxlcyBtYXkgYmUgZnVsbCBvZgorCQkJICogaG9sZXMgKGllIE5VTEwgZmlsZXMgYnVnKS4KKwkJCSAqLworCQkJaWYgKGlwLT5pX3NpemUgIT0gbmV3X3NpemUpIHsKKwkJCQlpcC0+aV9kLmRpX3NpemUgPSBuZXdfc2l6ZTsKKwkJCQlpcC0+aV9zaXplID0gbmV3X3NpemU7CisJCQkJeGZzX3RyYW5zX2xvZ19pbm9kZShudHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKKwkJCX0KIAkJfQogCX0gZWxzZSBpZiAoc3luYykgewogCQlBU1NFUlQoIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9XU1lOQykpOwpAQCAtMTc0Niw3ICsxNzYzLDcgQEAKIAkJCXhmc190cmFuc19sb2dfaW5vZGUobnRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiAJCX0KIAkJbnRwID0geGZzX3RyYW5zX2R1cChudHApOwotCQkodm9pZCkgeGZzX3RyYW5zX2NvbW1pdCgqdHAsIDAsIE5VTEwpOworCQkodm9pZCkgeGZzX3RyYW5zX2NvbW1pdCgqdHAsIDApOwogCQkqdHAgPSBudHA7CiAJCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUobnRwLCAwLCBYRlNfSVRSVU5DQVRFX0xPR19SRVMobXApLCAwLAogCQkJCQkgIFhGU19UUkFOU19QRVJNX0xPR19SRVMsCkBAIC0xNzY3LDcgKzE3ODQsMTkgQEAKIAkgKi8KIAlpZiAoZm9yayA9PSBYRlNfREFUQV9GT1JLKSB7CiAJCXhmc19pc2l6ZV9jaGVjayhtcCwgaXAsIG5ld19zaXplKTsKLQkJaXAtPmlfZC5kaV9zaXplID0gbmV3X3NpemU7CisJCS8qCisJCSAqIElmIHdlIGFyZSBub3QgY2hhbmdpbmcgdGhlIGZpbGUgc2l6ZSB0aGVuIGRvCisJCSAqIG5vdCB1cGRhdGUgdGhlIG9uLWRpc2sgZmlsZSBzaXplIC0gd2UgbWF5IGJlCisJCSAqIGNhbGxlZCBmcm9tIHhmc19pbmFjdGl2ZV9mcmVlX2VvZmJsb2NrcygpLiAgSWYgd2UKKwkJICogdXBkYXRlIHRoZSBvbi1kaXNrIGZpbGUgc2l6ZSBhbmQgdGhlbiB0aGUgc3lzdGVtCisJCSAqIGNyYXNoZXMgYmVmb3JlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcmUKKwkJICogZmx1c2hlZCB0byBkaXNrIHRoZW4gdGhlIGZpbGVzIG1heSBiZSBmdWxsIG9mCisJCSAqIGhvbGVzIChpZSBOVUxMIGZpbGVzIGJ1ZykuCisJCSAqLworCQlpZiAoaXAtPmlfc2l6ZSAhPSBuZXdfc2l6ZSkgeworCQkJaXAtPmlfZC5kaV9zaXplID0gbmV3X3NpemU7CisJCQlpcC0+aV9zaXplID0gbmV3X3NpemU7CisJCX0KIAl9CiAJeGZzX3RyYW5zX2xvZ19pbm9kZShudHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKIAlBU1NFUlQoKG5ld19zaXplICE9IDApIHx8CkBAIC0xODAwLDcgKzE4MjksNyBAQAogCiAJQVNTRVJUKGlzbXJsb2NrZWQoJihpcC0+aV9sb2NrKSwgTVJfVVBEQVRFKSAhPSAwKTsKIAlBU1NFUlQoaXNtcmxvY2tlZCgmKGlwLT5pX2lvbG9jayksIE1SX1VQREFURSkgIT0gMCk7Ci0JQVNTRVJUKG5ld19zaXplID4gaXAtPmlfZC5kaV9zaXplKTsKKwlBU1NFUlQobmV3X3NpemUgPiBpcC0+aV9zaXplKTsKIAogCS8qCiAJICogWmVybyBhbnkgcGFnZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgYnkKQEAgLTE4MDgsNyArMTgzNyw3IEBACiAJICogYW5kIGFueSBibG9ja3MgYmV0d2VlbiB0aGUgb2xkIGFuZCBuZXcgZmlsZSBzaXplcy4KIAkgKi8KIAllcnJvciA9IHhmc196ZXJvX2VvZihYRlNfSVRPVihpcCksICZpcC0+aV9pb2NvcmUsIG5ld19zaXplLAotCQkJICAgICBpcC0+aV9kLmRpX3NpemUpOworCQkJICAgICBpcC0+aV9zaXplKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTE4MzIsMTMgKzE4NjEsMTQgQEAKIAlBU1NFUlQoaXNtcmxvY2tlZCgmKGlwLT5pX2xvY2spLCBNUl9VUERBVEUpICE9IDApOwogCUFTU0VSVChpc21ybG9ja2VkKCYoaXAtPmlfaW9sb2NrKSwgTVJfVVBEQVRFKSAhPSAwKTsKIAlBU1NFUlQoaXAtPmlfdHJhbnNwID09IHRwKTsKLQlBU1NFUlQobmV3X3NpemUgPiBpcC0+aV9kLmRpX3NpemUpOworCUFTU0VSVChuZXdfc2l6ZSA+IGlwLT5pX3NpemUpOwogCiAJLyoKIAkgKiBVcGRhdGUgdGhlIGZpbGUgc2l6ZS4gIFVwZGF0ZSB0aGUgaW5vZGUgY2hhbmdlIHRpbWVzdGFtcAogCSAqIGlmIGNoYW5nZV9mbGFnIHNldC4KIAkgKi8KIAlpcC0+aV9kLmRpX3NpemUgPSBuZXdfc2l6ZTsKKwlpcC0+aV9zaXplID0gbmV3X3NpemU7CiAJaWYgKGNoYW5nZV9mbGFnKQogCQl4ZnNfaWNoZ3RpbWUoaXAsIFhGU19JQ0hHVElNRV9DSEcpOwogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKQEAgLTIzMjEsNyArMjM1MSw3IEBACiAJQVNTRVJUKGlwLT5pX2QuZGlfbmxpbmsgPT0gMCk7CiAJQVNTRVJUKGlwLT5pX2QuZGlfbmV4dGVudHMgPT0gMCk7CiAJQVNTRVJUKGlwLT5pX2QuZGlfYW5leHRlbnRzID09IDApOwotCUFTU0VSVCgoaXAtPmlfZC5kaV9zaXplID09IDApIHx8CisJQVNTRVJUKChpcC0+aV9kLmRpX3NpemUgPT0gMCAmJiBpcC0+aV9zaXplID09IDApIHx8CiAJICAgICAgICgoaXAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHKSk7CiAJQVNTRVJUKGlwLT5pX2QuZGlfbmJsb2NrcyA9PSAwKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IGJjODIzNzIuLmY3NWFmZWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTI4Nyw2ICsyODcsNyBAQAogCXN0cnVjdCB4ZnNfaW5vZGUJKmlfY25leHQ7CS8qIGNsdXN0ZXIgaGFzaCBsaW5rIGZvcndhcmQgKi8KIAlzdHJ1Y3QgeGZzX2lub2RlCSppX2NwcmV2OwkvKiBjbHVzdGVyIGhhc2ggbGluayBiYWNrd2FyZCAqLwogCisJeGZzX2ZzaXplX3QJCWlfc2l6ZTsJCS8qIGluLW1lbW9yeSBzaXplICovCiAJLyogVHJhY2UgYnVmZmVycyBwZXIgaW5vZGUuICovCiAjaWZkZWYgWEZTX0JNQVBfVFJBQ0UKIAlzdHJ1Y3Qga3RyYWNlCQkqaV94dHJhY2U7CS8qIGlub2RlIGV4dGVudCBsaXN0IHRyYWNlICovCkBAIC0zMDUsNiArMzA2LDggQEAKICNlbmRpZgogfSB4ZnNfaW5vZGVfdDsKIAorI2RlZmluZSBYRlNfSVNJWkUoaXApCSgoKGlwKS0+aV9kLmRpX21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcpID8gXAorCQkJCShpcCktPmlfc2l6ZSA6IChpcCktPmlfZC5kaV9zaXplOwogCiAvKgogICogaV9mbGFncyBoZWxwZXIgZnVuY3Rpb25zCkBAIC0zNzksMjYgKzM4Miw1OCBAQAogCiAvKgogICogRmxhZ3MgZm9yIGlub2RlIGxvY2tpbmcuCisgKiBCaXQgcmFuZ2VzOgkxPDwxICAtIDE8PDE2LTEgLS0gaW9sb2NrL2lsb2NrIG1vZGVzIChiaXRmaWVsZCkKKyAqCQkxPDwxNiAtIDE8PDMyLTEgLS0gbG9ja2RlcCBhbm5vdGF0aW9uIChpbnRlZ2VycykKICAqLwotI2RlZmluZQlYRlNfSU9MT0NLX0VYQ0wJCTB4MDAxCi0jZGVmaW5lCVhGU19JT0xPQ0tfU0hBUkVECTB4MDAyCi0jZGVmaW5lCVhGU19JTE9DS19FWENMCQkweDAwNAotI2RlZmluZQlYRlNfSUxPQ0tfU0hBUkVECTB4MDA4Ci0jZGVmaW5lCVhGU19JVU5MT0NLX05PTk9USUZZCTB4MDEwCi0vKglYRlNfSU9MT0NLX05FU1RFRAkweDAyMCAqLwotI2RlZmluZSBYRlNfRVhURU5UX1RPS0VOX1JECTB4MDQwCi0jZGVmaW5lIFhGU19TSVpFX1RPS0VOX1JECTB4MDgwCisjZGVmaW5lCVhGU19JT0xPQ0tfRVhDTAkJKDE8PDApCisjZGVmaW5lCVhGU19JT0xPQ0tfU0hBUkVECSgxPDwxKQorI2RlZmluZQlYRlNfSUxPQ0tfRVhDTAkJKDE8PDIpCisjZGVmaW5lCVhGU19JTE9DS19TSEFSRUQJKDE8PDMpCisjZGVmaW5lCVhGU19JVU5MT0NLX05PTk9USUZZCSgxPDw0KQorLyoJI2RlZmluZSBYRlNfSU9MT0NLX05FU1RFRAkoMTw8NSkJKi8KKyNkZWZpbmUgWEZTX0VYVEVOVF9UT0tFTl9SRAkoMTw8NikKKyNkZWZpbmUgWEZTX1NJWkVfVE9LRU5fUkQJKDE8PDcpCiAjZGVmaW5lIFhGU19FWFRTSVpFX1JECQkoWEZTX0VYVEVOVF9UT0tFTl9SRHxYRlNfU0laRV9UT0tFTl9SRCkKLSNkZWZpbmUgWEZTX1dJTExMRU5ECQkweDEwMAkvKiBBbHdheXMgYWNxdWlyZSB0b2tlbnMgZm9yIGxlbmRpbmcgKi8KKyNkZWZpbmUgWEZTX1dJTExMRU5ECQkoMTw8OCkJLyogQWx3YXlzIGFjcXVpcmUgdG9rZW5zIGZvciBsZW5kaW5nICovCiAjZGVmaW5lIFhGU19FWFRFTlRfVE9LRU5fV1IJKFhGU19FWFRFTlRfVE9LRU5fUkQgfCBYRlNfV0lMTExFTkQpCiAjZGVmaW5lIFhGU19TSVpFX1RPS0VOX1dSICAgICAgIChYRlNfU0laRV9UT0tFTl9SRCB8IFhGU19XSUxMTEVORCkKICNkZWZpbmUgWEZTX0VYVFNJWkVfV1IJCShYRlNfRVhUU0laRV9SRCB8IFhGU19XSUxMTEVORCkKLS8qCVhGU19TSVpFX1RPS0VOX1dBTlQJMHgyMDAgKi8KKy8qIFRPRE86WEZTX1NJWkVfVE9LRU5fV0FOVAkoMTw8OSkgKi8KIAotI2RlZmluZSBYRlNfTE9DS19NQVNLCVwKLQkoWEZTX0lPTE9DS19FWENMIHwgWEZTX0lPTE9DS19TSEFSRUQgfCBYRlNfSUxPQ0tfRVhDTCB8IFwKLQkgWEZTX0lMT0NLX1NIQVJFRCB8IFhGU19FWFRFTlRfVE9LRU5fUkQgfCBYRlNfU0laRV9UT0tFTl9SRCB8IFwKLQkgWEZTX1dJTExMRU5EKQorI2RlZmluZSBYRlNfTE9DS19NQVNLCQkoWEZTX0lPTE9DS19FWENMIHwgWEZTX0lPTE9DS19TSEFSRUQgXAorCQkJCXwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfU0hBUkVEIFwKKwkJCQl8IFhGU19FWFRFTlRfVE9LRU5fUkQgfCBYRlNfU0laRV9UT0tFTl9SRCBcCisJCQkJfCBYRlNfV0lMTExFTkQpCisKKy8qCisgKiBGbGFncyBmb3IgbG9ja2RlcCBhbm5vdGF0aW9ucy4KKyAqCisgKiBYRlNfSVtPXUxPQ0tfUEFSRU5UIC0gZm9yIG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlIGxvY2tpbmcgdHdvIGlub2RlcworICogKGllIGRpcmVjdG9yeSBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZSBsb2NraW5nIGEgZGlyZWN0b3J5IGlub2RlIGFuZAorICogYW4gZW50cnkgaW5vZGUpLiAgVGhlIGZpcnN0IGlub2RlIGdldHMgbG9ja2VkIHdpdGggdGhpcyBmbGFnIHNvIGl0CisgKiBnZXRzIGEgbG9ja2RlcCBzdWJjbGFzcyBvZiAxIGFuZCB0aGUgc2Vjb25kIGxvY2sgd2lsbCBoYXZlIGEgbG9ja2RlcAorICogc3ViY2xhc3Mgb2YgMC4KKyAqCisgKiBYRlNfSVtPXUxPQ0tfSU5VTU9SREVSIC0gZm9yIGxvY2tpbmcgc2V2ZXJhbCBpbm9kZXMgYXQgdGhlIHNvbWUgdGltZQorICogd2l0aCB4ZnNfbG9ja19pbm9kZXMoKS4gIFRoaXMgZmxhZyBpcyB1c2VkIGFzIHRoZSBzdGFydGluZyBzdWJjbGFzcworICogYW5kIGVhY2ggc3Vic2VxdWVudCBsb2NrIGFjcXVpcmVkIHdpbGwgaW5jcmVtZW50IHRoZSBzdWJjbGFzcyBieSBvbmUuCisgKiBTbyB0aGUgZmlyc3QgbG9jayBhY3F1aXJlZCB3aWxsIGhhdmUgYSBsb2NrZGVwIHN1YmNsYXNzIG9mIDIsIHRoZQorICogc2Vjb25kIGxvY2sgd2lsbCBoYXZlIGEgbG9ja2RlcCBzdWJjbGFzcyBvZiAzLCBhbmQgc28gb24uCisgKi8KKyNkZWZpbmUgWEZTX0lPTE9DS19TSElGVAkxNgorI2RlZmluZQlYRlNfSU9MT0NLX1BBUkVOVAkoMSA8PCBYRlNfSU9MT0NLX1NISUZUKQorI2RlZmluZQlYRlNfSU9MT0NLX0lOVU1PUkRFUgkoMiA8PCBYRlNfSU9MT0NLX1NISUZUKQorCisjZGVmaW5lIFhGU19JTE9DS19TSElGVAkJMjQKKyNkZWZpbmUJWEZTX0lMT0NLX1BBUkVOVAkoMSA8PCBYRlNfSUxPQ0tfU0hJRlQpCisjZGVmaW5lCVhGU19JTE9DS19JTlVNT1JERVIJKDIgPDwgWEZTX0lMT0NLX1NISUZUKQorCisjZGVmaW5lIFhGU19JT0xPQ0tfREVQX01BU0sJMHgwMGZmMDAwMAorI2RlZmluZSBYRlNfSUxPQ0tfREVQX01BU0sJMHhmZjAwMDAwMAorI2RlZmluZSBYRlNfTE9DS19ERVBfTUFTSwkoWEZTX0lPTE9DS19ERVBfTUFTSyB8IFhGU19JTE9DS19ERVBfTUFTSykKKworI2RlZmluZSBYRlNfSU9MT0NLX0RFUChmbGFncykJKCgoZmxhZ3MpICYgWEZTX0lPTE9DS19ERVBfTUFTSykgPj4gWEZTX0lPTE9DS19TSElGVCkKKyNkZWZpbmUgWEZTX0lMT0NLX0RFUChmbGFncykJKCgoZmxhZ3MpICYgWEZTX0lMT0NLX0RFUF9NQVNLKSA+PiBYRlNfSUxPQ0tfU0hJRlQpCiAKIC8qCiAgKiBGbGFncyBmb3IgeGZzX2lmbHVzaCgpCkBAIC00ODEsNyArNTE2LDcgQEAKIHVpbnQJCXhmc19kaWMyeGZsYWdzKHN0cnVjdCB4ZnNfZGlub2RlX2NvcmUgKik7CiBpbnQJCXhmc19pZnJlZShzdHJ1Y3QgeGZzX3RyYW5zICosIHhmc19pbm9kZV90ICosCiAJCQkgICBzdHJ1Y3QgeGZzX2JtYXBfZnJlZSAqKTsKLXZvaWQJCXhmc19pdHJ1bmNhdGVfc3RhcnQoeGZzX2lub2RlX3QgKiwgdWludCwgeGZzX2ZzaXplX3QpOworaW50CQl4ZnNfaXRydW5jYXRlX3N0YXJ0KHhmc19pbm9kZV90ICosIHVpbnQsIHhmc19mc2l6ZV90KTsKIGludAkJeGZzX2l0cnVuY2F0ZV9maW5pc2goc3RydWN0IHhmc190cmFucyAqKiwgeGZzX2lub2RlX3QgKiwKIAkJCQkgICAgIHhmc19mc2l6ZV90LCBpbnQsIGludCk7CiBpbnQJCXhmc19pdW5saW5rKHN0cnVjdCB4ZnNfdHJhbnMgKiwgeGZzX2lub2RlX3QgKik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY29yZS5jIGIvZnMveGZzL3hmc19pb2NvcmUuYwppbmRleCAwNmQ3MTBjLi44MTU0OGVjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lvY29yZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW9jb3JlLmMKQEAgLTUyLDcgKzUyLDcgQEAKIHhmc19zaXplX2ZuKAogCXhmc19pbm9kZV90CQkqaXApCiB7Ci0JcmV0dXJuIChpcC0+aV9kLmRpX3NpemUpOworCXJldHVybiBYRlNfSVNJWkUoaXApOwogfQogCiBTVEFUSUMgaW50CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmMKaW5kZXggY2M2YTdiNS4uM2YyYjlmMiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5jCisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJCWV4dHN6ID0gaXAtPmlfZC5kaV9leHRzaXplOwogCX0KIAotCWlzaXplID0gaXAtPmlfZC5kaV9zaXplOworCWlzaXplID0gaXAtPmlfc2l6ZTsKIAlpZiAoaW8tPmlvX25ld19zaXplID4gaXNpemUpCiAJCWlzaXplID0gaW8tPmlvX25ld19zaXplOwogCkBAIC01MjQsNyArNTI0LDcgQEAKIAl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKIAogCWJtYXBpX2ZsYWcgPSBYRlNfQk1BUElfV1JJVEU7Ci0JaWYgKChmbGFncyAmIEJNQVBJX0RJUkVDVCkgJiYgKG9mZnNldCA8IGlwLT5pX2QuZGlfc2l6ZSB8fCBleHRzeikpCisJaWYgKChmbGFncyAmIEJNQVBJX0RJUkVDVCkgJiYgKG9mZnNldCA8IGlwLT5pX3NpemUgfHwgZXh0c3opKQogCQlibWFwaV9mbGFnIHw9IFhGU19CTUFQSV9QUkVBTExPQzsKIAogCS8qCkBAIC01NDMsNyArNTQzLDcgQEAKIAllcnJvciA9IHhmc19ibWFwX2ZpbmlzaCgmdHAsICZmcmVlX2xpc3QsICZjb21taXR0ZWQpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnJvcjA7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTLCBOVUxMKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnJvcl9vdXQ7CiAKQEAgLTY3Niw3ICs2NzYsNyBAQAogCW9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBvZmZzZXQpOwogCiByZXRyeToKLQlpc2l6ZSA9IGlwLT5pX2QuZGlfc2l6ZTsKKwlpc2l6ZSA9IGlwLT5pX3NpemU7CiAJaWYgKGlvLT5pb19uZXdfc2l6ZSA+IGlzaXplKQogCQlpc2l6ZSA9IGlvLT5pb19uZXdfc2l6ZTsKIApAQCAtODE3LDcgKzgxNyw3IEBACiAJCQkgKiB3ZSBkcm9wcGVkIHRoZSBpbG9jayBpbiB0aGUgaW50ZXJpbS4KIAkJCSAqLwogCi0JCQllbmRfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBpcC0+aV9kLmRpX3NpemUpOworCQkJZW5kX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgaXAtPmlfc2l6ZSk7CiAJCQl4ZnNfYm1hcF9sYXN0X29mZnNldChOVUxMLCBpcCwgJmxhc3RfYmxvY2ssCiAJCQkJWEZTX0RBVEFfRk9SSyk7CiAJCQlsYXN0X2Jsb2NrID0gWEZTX0ZJTEVPRkZfTUFYKGxhc3RfYmxvY2ssIGVuZF9mc2IpOwpAQCAtODQwLDggKzg0MCw3IEBACiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byB0cmFuc19jYW5jZWw7CiAKLQkJCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwKLQkJCQkJWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUywgTlVMTCk7CisJCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gZXJyb3IwOwogCkBAIC05NDgsNyArOTQ3LDcgQEAKIAkJaWYgKGVycm9yKQogCQkJZ290byBlcnJvcl9vbl9ibWFwaV90cmFuc2FjdGlvbjsKIAotCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMsIE5VTEwpOworCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuaCBiL2ZzL3hmcy94ZnNfaW9tYXAuaAppbmRleCAzY2UyMDRhLi5kZjQ0MWVlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lvbWFwLmgKKysrIGIvZnMveGZzL3hmc19pb21hcC5oCkBAIC0yMiw2ICsyMiw3IEBACiAKIAogdHlwZWRlZiBlbnVtIHsJCQkJLyogaW9tYXBfZmxhZ3MgdmFsdWVzICovCisJSU9NQVBfUkVBRCA9CQkwLAkvKiBtYXBwaW5nIGZvciBhIHJlYWQgKi8KIAlJT01BUF9FT0YgPQkJMHgwMSwJLyogbWFwcGluZyBjb250YWlucyBFT0YgICAqLwogCUlPTUFQX0hPTEUgPQkJMHgwMiwJLyogbWFwcGluZyBjb3ZlcnMgYSBob2xlICAqLwogCUlPTUFQX0RFTEFZID0JCTB4MDQsCS8qIG1hcHBpbmcgY292ZXJzIGRlbGFsbG9jIHJlZ2lvbiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMgYi9mcy94ZnMveGZzX2l0YWJsZS5jCmluZGV4IDc3NzVkZGMuLmU3MjVkZGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMKKysrIGIvZnMveGZzL3hmc19pdGFibGUuYwpAQCAtODA5LDcgKzgwOSw3IEBACiAJCQkJeGZzX2J1Zl9yZWxzZShhZ2JwKTsKIAkJCQlhZ2JwID0gTlVMTDsKIAkJCQkvKgotCQkJCSAqIE1vdmUgdXAgdGhlIHRoZSBsYXN0IGlub2RlIGluIHRoZSBjdXJyZW50CisJCQkJICogTW92ZSB1cCB0aGUgbGFzdCBpbm9kZSBpbiB0aGUgY3VycmVudAogCQkJCSAqIGNodW5rLiAgVGhlIGxvb2t1cF9nZSB3aWxsIGFsd2F5cyBnZXQKIAkJCQkgKiB1cyB0aGUgZmlyc3QgaW5vZGUgaW4gdGhlIG5leHQgY2h1bmsuCiAJCQkJICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggY2E3NGQzZi4uMDgwZmFiZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtMTUwOSw3ICsxNTA5LDYgQEAKIAogU1RBVElDIGludAogeGxvZ19yZWNvdmVyX3Jlb3JkZXJfdHJhbnMoCi0JeGxvZ190CQkJKmxvZywKIAl4bG9nX3JlY292ZXJfdAkJKnRyYW5zKQogewogCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKmZpcnN0X2l0ZW0sICppdGVtcSwgKml0ZW1xX25leHQ7CkBAIC0xODY3LDcgKzE4NjYsNiBAQAogLypBUkdTVVNFRCovCiBTVEFUSUMgdm9pZAogeGxvZ19yZWNvdmVyX2RvX3JlZ19idWZmZXIoCi0JeGZzX21vdW50X3QJCSptcCwKIAl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLAogCXhmc19idWZfdAkJKmJwLAogCXhmc19idWZfbG9nX2Zvcm1hdF90CSpidWZfZikKQEAgLTIwODMsNyArMjA4MSw3IEBACiAJaWYgKGxvZy0+bF9xdW90YW9mZnNfZmxhZyAmIHR5cGUpCiAJCXJldHVybjsKIAotCXhsb2dfcmVjb3Zlcl9kb19yZWdfYnVmZmVyKG1wLCBpdGVtLCBicCwgYnVmX2YpOworCXhsb2dfcmVjb3Zlcl9kb19yZWdfYnVmZmVyKGl0ZW0sIGJwLCBidWZfZik7CiB9CiAKIC8qCkBAIC0yMTg0LDcgKzIxODIsNyBAQAogCQkgIChYRlNfQkxJX1VEUVVPVF9CVUZ8WEZTX0JMSV9QRFFVT1RfQlVGfFhGU19CTElfR0RRVU9UX0JVRikpIHsKIAkJeGxvZ19yZWNvdmVyX2RvX2RxdW90X2J1ZmZlcihtcCwgbG9nLCBpdGVtLCBicCwgYnVmX2YpOwogCX0gZWxzZSB7Ci0JCXhsb2dfcmVjb3Zlcl9kb19yZWdfYnVmZmVyKG1wLCBpdGVtLCBicCwgYnVmX2YpOworCQl4bG9nX3JlY292ZXJfZG9fcmVnX2J1ZmZlcihpdGVtLCBicCwgYnVmX2YpOwogCX0KIAlpZiAoZXJyb3IpCiAJCXJldHVybiBYRlNfRVJST1IoZXJyb3IpOwpAQCAtMjc2NSw3ICsyNzYzLDcgQEAKIAlpbnQJCQllcnJvciA9IDA7CiAJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSwgKmZpcnN0X2l0ZW07CiAKLQlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX3Jlb3JkZXJfdHJhbnMobG9nLCB0cmFucykpKQorCWlmICgoZXJyb3IgPSB4bG9nX3JlY292ZXJfcmVvcmRlcl90cmFucyh0cmFucykpKQogCQlyZXR1cm4gZXJyb3I7CiAJZmlyc3RfaXRlbSA9IGl0ZW0gPSB0cmFucy0+cl9pdGVtcTsKIAlkbyB7CkBAIC0zMDE2LDcgKzMwMTQsNyBAQAogCX0KIAogCWVmaXAtPmVmaV9mbGFncyB8PSBYRlNfRUZJX1JFQ09WRVJFRDsKLQl4ZnNfdHJhbnNfY29tbWl0KHRwLCAwLCBOVUxMKTsKKwl4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKIH0KIAogLyoKQEAgLTMxNDMsNyArMzE0MSw3IEBACiAJeGZzX3RyYW5zX2xvZ19idWYodHAsIGFnaWJwLCBvZmZzZXQsCiAJCQkgIChvZmZzZXQgKyBzaXplb2YoeGZzX2FnaW5vX3QpIC0gMSkpOwogCi0JKHZvaWQpIHhmc190cmFuc19jb21taXQodHAsIDAsIE5VTEwpOworCSh2b2lkKSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKIH0KIAogLyoKQEAgLTM4ODYsOCArMzg4NCw3IEBACiAJCSAqIHVuZGVyIHRoZSB2ZnMgbGF5ZXIsIHNvIHdlIGNhbiBnZXQgYXdheSB3aXRoIGl0IHVubGVzcwogCQkgKiB0aGUgZGV2aWNlIGl0c2VsZiBpcyByZWFkLW9ubHksIGluIHdoaWNoIGNhc2Ugd2UgZmFpbC4KIAkJICovCi0JCWlmICgoZXJyb3IgPSB4ZnNfZGV2X2lzX3JlYWRfb25seShsb2ctPmxfbXAsCi0JCQkJCQkicmVjb3ZlcnkgcmVxdWlyZWQiKSkpIHsKKwkJaWYgKChlcnJvciA9IHhmc19kZXZfaXNfcmVhZF9vbmx5KGxvZy0+bF9tcCwgInJlY292ZXJ5IikpKSB7CiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IDNiZWQwY2YuLmE5NmJkZTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTE2NTMsNyArMTY1Myw3IEBACiAJCXJldHVybjsKIAl9CiAJeGZzX21vZF9zYih0cCwgZmllbGRzKTsKLQl4ZnNfdHJhbnNfY29tbWl0KHRwLCAwLCBOVUxMKTsKKwl4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKIH0KIAogCkBAIC0xNzM0LDExICsxNzM0LDEzIEBACiAJCQlwZXJfY3B1X3B0cihtcC0+bV9zYl9jbnRzLCAodW5zaWduZWQgbG9uZyloY3B1KTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CiAJCS8qIEVhc3kgQ2FzZSAtIGluaXRpYWxpemUgdGhlIGFyZWEgYW5kIGxvY2tzLCBhbmQKIAkJICogdGhlbiByZWJhbGFuY2Ugd2hlbiBvbmxpbmUgZG9lcyBldmVyeXRoaW5nIGVsc2UgZm9yIHVzLiAqLwogCQltZW1zZXQoY250cCwgMCwgc2l6ZW9mKHhmc19pY3NiX2NudHNfdCkpOwogCQlicmVhazsKIAljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKIAkJeGZzX2ljc2JfbG9jayhtcCk7CiAJCXhmc19pY3NiX2JhbGFuY2VfY291bnRlcihtcCwgWEZTX1NCU19JQ09VTlQsIDAsIDApOwogCQl4ZnNfaWNzYl9iYWxhbmNlX2NvdW50ZXIobXAsIFhGU19TQlNfSUZSRUUsIDAsIDApOwpAQCAtMTc0Niw2ICsxNzQ4LDcgQEAKIAkJeGZzX2ljc2JfdW5sb2NrKG1wKTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfREVBRDoKKwljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAkJLyogRGlzYWJsZSBhbGwgdGhlIGNvdW50ZXJzLCB0aGVuIGZvbGQgdGhlIGRlYWQgY3B1J3MKIAkJICogY291bnQgaW50byB0aGUgdG90YWwgb24gdGhlIGdsb2JhbCBzdXBlcmJsb2NrIGFuZAogCQkgKiByZS1lbmFibGUgdGhlIGNvdW50ZXJzLiAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19xbW9wcy5jIGIvZnMveGZzL3hmc19xbW9wcy5jCmluZGV4IDMyMGQ2M2YuLjBkNTk0ZWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcW1vcHMuYworKysgYi9mcy94ZnMveGZzX3Ftb3BzLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAl4ZnNfbW9kX3NiKHRwLCBYRlNfU0JfUUZMQUdTKTsKLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDAsIE5VTEwpOworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3F1b3RhLmggYi9mcy94ZnMveGZzX3F1b3RhLmgKaW5kZXggOWRjYjMyYS4uNmYxNGRmOSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19xdW90YS5oCisrKyBiL2ZzL3hmcy94ZnNfcXVvdGEuaApAQCAtMTU0LDEwICsxNTQsMTEgQEAKICNkZWZpbmUgWEZTX0FMTF9RVU9UQV9DSEtECShYRlNfVVFVT1RBX0NIS0QgfCBYRlNfT1FVT1RBX0NIS0QpCiAKICNkZWZpbmUgWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApCSgobXApLT5tX3FmbGFncyAmIFhGU19BTExfUVVPVEFfQUNDVCkKLSNkZWZpbmUgWEZTX0lTX1FVT1RBX0VORk9SQ0VEKG1wKQkoKG1wKS0+bV9xZmxhZ3MgJiBYRlNfQUxMX1FVT1RBX0VORkQpCiAjZGVmaW5lIFhGU19JU19VUVVPVEFfUlVOTklORyhtcCkJKChtcCktPm1fcWZsYWdzICYgWEZTX1VRVU9UQV9BQ0NUKQogI2RlZmluZSBYRlNfSVNfUFFVT1RBX1JVTk5JTkcobXApCSgobXApLT5tX3FmbGFncyAmIFhGU19QUVVPVEFfQUNDVCkKICNkZWZpbmUgWEZTX0lTX0dRVU9UQV9SVU5OSU5HKG1wKQkoKG1wKS0+bV9xZmxhZ3MgJiBYRlNfR1FVT1RBX0FDQ1QpCisjZGVmaW5lIFhGU19JU19VUVVPVEFfRU5GT1JDRUQobXApCSgobXApLT5tX3FmbGFncyAmIFhGU19VUVVPVEFfRU5GRCkKKyNkZWZpbmUgWEZTX0lTX09RVU9UQV9FTkZPUkNFRChtcCkJKChtcCktPm1fcWZsYWdzICYgWEZTX09RVU9UQV9FTkZEKQogCiAvKgogICogSW5jb3JlIG9ubHkgZmxhZ3MgZm9yIHF1b3Rhb2ZmIC0gdGhlc2UgYml0cyBnZXQgY2xlYXJlZCB3aGVuIHF1b3RhKHMpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3JlbmFtZS5jIGIvZnMveGZzL3hmc19yZW5hbWUuYwppbmRleCA0YzY1NzNkLi43Njc5ZDdhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3JlbmFtZS5jCisrKyBiL2ZzL3hmcy94ZnNfcmVuYW1lLmMKQEAgLTU4NCw3ICs1ODQsNyBAQAogCSAqIHRyYW5zX2NvbW1pdCB3aWxsIHVubG9jayBzcmNfaXAsIHRhcmdldF9pcCAmIGRlY3JlbWVudAogCSAqIHRoZSB2bm9kZSByZWZlcmVuY2VzLgogCSAqLwotCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUywgTlVMTCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKIAlpZiAodGFyZ2V0X2lwICE9IE5VTEwpIHsKIAkJeGZzX3JlZmNhY2hlX3B1cmdlX2lwKHRhcmdldF9pcCk7CiAJCUlSRUxFKHRhcmdldF9pcCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J0YWxsb2MuYyBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCmluZGV4IDZmZmYxOWQuLmIzYTVmMDcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkJZXJyb3IgPSB4ZnNfYm1hcF9maW5pc2goJnRwLCAmZmxpc3QsICZjb21taXR0ZWQpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGVycm9yX2V4aXQ7Ci0JCXhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMsIE5VTEwpOworCQl4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKIAkJLyoKIAkJICogTm93IHdlIG5lZWQgdG8gY2xlYXIgdGhlIGFsbG9jYXRlZCBibG9ja3MuCiAJCSAqIERvIHRoaXMgb25lIGJsb2NrIHBlciB0cmFuc2FjdGlvbiwgdG8ga2VlcCBpdCBzaW1wbGUuCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJCS8qCiAJCQkgKiBDb21taXQgdGhlIHRyYW5zYWN0aW9uLgogCQkJICovCi0JCQl4ZnNfdHJhbnNfY29tbWl0KHRwLCAwLCBOVUxMKTsKKwkJCXhmc190cmFuc19jb21taXQodHAsIDApOwogCQl9CiAJCS8qCiAJCSAqIEdvIG9uIHRvIHRoZSBuZXh0IGV4dGVudCwgaWYgYW55LgpAQCAtMjA0Miw3ICsyMDQyLDcgQEAKIAkJLyoKIAkJICogQ29tbWl0IHRoZSB0cmFuc2FjdGlvbi4KIAkJICovCi0JCXhmc190cmFuc19jb21taXQodHAsIDAsIE5VTEwpOworCQl4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKIAl9CiAKIAlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J3LmMgYi9mcy94ZnMveGZzX3J3LmMKaW5kZXggMWVhN2MwYy4uOTA1ZDFjMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ydy5jCisrKyBiL2ZzL3hmcy94ZnNfcncuYwpAQCAtODMsNyArODMsNyBAQAogCX0KIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiAJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDAsIE5VTEwpOworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NCw3ICsxNjQsNyBAQAogCQkJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CiAJCQl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiAJCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwotCQkJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwLCBOVUxMKTsKKwkJCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiAJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5jIGIvZnMveGZzL3hmc190cmFucy5jCmluZGV4IDMwMWZmOTQuLmNjMmQ2MDkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuYworKysgYi9mcy94ZnMveGZzX3RyYW5zLmMKQEAgLTc1Myw3ICs3NTMsNiBAQAogX3hmc190cmFuc19jb21taXQoCiAJeGZzX3RyYW5zX3QJKnRwLAogCXVpbnQJCWZsYWdzLAotCXhmc19sc25fdAkqY29tbWl0X2xzbl9wLAogCWludAkJKmxvZ19mbHVzaGVkKQogewogCXhmc19sb2dfaW92ZWNfdAkJKmxvZ192ZWN0b3I7CkBAIC04MTIsOCArODExLDYgQEAKIAkJeGZzX3RyYW5zX2ZyZWVfYnVzeSh0cCk7CiAJCXhmc190cmFuc19mcmVlKHRwKTsKIAkJWEZTX1NUQVRTX0lOQyh4c190cmFuc19lbXB0eSk7Ci0JCWlmIChjb21taXRfbHNuX3ApCi0JCQkqY29tbWl0X2xzbl9wID0gY29tbWl0X2xzbjsKIAkJcmV0dXJuIChzaHV0ZG93bik7CiAJfQogCUFTU0VSVCh0cC0+dF90aWNrZXQgIT0gTlVMTCk7CkBAIC04NjQsOSArODYxLDYgQEAKIAkJa21lbV9mcmVlKGxvZ192ZWN0b3IsIG52ZWMgKiBzaXplb2YoeGZzX2xvZ19pb3ZlY190KSk7CiAJfQogCi0JaWYgKGNvbW1pdF9sc25fcCkKLQkJKmNvbW1pdF9sc25fcCA9IGNvbW1pdF9sc247Ci0KIAkvKgogCSAqIElmIHdlIGdvdCBhIGxvZyB3cml0ZSBlcnJvci4gVW5waW4gdGhlIGxvZ2l0ZW1zIHRoYXQgd2UKIAkgKiBoYWQgcGlubmVkLCBjbGVhbiB1cCwgZnJlZSB0cmFucyBzdHJ1Y3R1cmUsIGFuZCByZXR1cm4gZXJyb3IuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmggYi9mcy94ZnMveGZzX3RyYW5zLmgKaW5kZXggZjFkN2FiMi4uN2RmY2M0NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFucy5oCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnMuaApAQCAtOTg4LDEwICs5ODgsOCBAQAogCQkJCQkgeGZzX2V4dGxlbl90KTsKIGludAkJX3hmc190cmFuc19jb21taXQoeGZzX3RyYW5zX3QgKiwKIAkJCQkgIHVpbnQgZmxhZ3MsCi0JCQkJICB4ZnNfbHNuX3QgKiwKIAkJCQkgIGludCAqKTsKLSNkZWZpbmUgeGZzX3RyYW5zX2NvbW1pdCh0cCwgZmxhZ3MsIGxzbikgXAotCV94ZnNfdHJhbnNfY29tbWl0KHRwLCBmbGFncywgbHNuLCBOVUxMKQorI2RlZmluZSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBmbGFncykJX3hmc190cmFuc19jb21taXQodHAsIGZsYWdzLCBOVUxMKQogdm9pZAkJeGZzX3RyYW5zX2NhbmNlbCh4ZnNfdHJhbnNfdCAqLCBpbnQpOwogdm9pZAkJeGZzX3RyYW5zX2FpbF9pbml0KHN0cnVjdCB4ZnNfbW91bnQgKik7CiB4ZnNfbHNuX3QJeGZzX3RyYW5zX3B1c2hfYWlsKHN0cnVjdCB4ZnNfbW91bnQgKiwgeGZzX2xzbl90KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdXRpbHMuYyBiL2ZzL3hmcy94ZnNfdXRpbHMuYwppbmRleCA5MDE0ZDdlLi4yMGZmZWMzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3V0aWxzLmMKKysrIGIvZnMveGZzL3hmc191dGlscy5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAkJfQogCiAJCW50cCA9IHhmc190cmFuc19kdXAodHApOwotCQljb2RlID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCwgTlVMTCk7CisJCWNvZGUgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKIAkJdHAgPSBudHA7CiAJCWlmIChjb21taXR0ZWQgIT0gTlVMTCkgewogCQkJKmNvbW1pdHRlZCA9IDE7CkBAIC00MjAsNyArNDIwLDExIEBACiAJICogaW4gYSB0cmFuc2FjdGlvbi4KIAkgKi8KIAl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7Ci0JeGZzX2l0cnVuY2F0ZV9zdGFydChpcCwgWEZTX0lUUlVOQ19ERUZJTklURSwgKHhmc19mc2l6ZV90KTApOworCWVycm9yID0geGZzX2l0cnVuY2F0ZV9zdGFydChpcCwgWEZTX0lUUlVOQ19ERUZJTklURSwgKHhmc19mc2l6ZV90KTApOworCWlmIChlcnJvcikgeworCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKKwkJcmV0dXJuIGVycm9yOworCX0KIAogCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfVFJVTkNBVEVfRklMRSk7CiAJaWYgKChlcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLCBYRlNfSVRSVU5DQVRFX0xPR19SRVMobXApLCAwLApAQCAtNDYwLDggKzQ2NCw3IEBACiAJCQkJIFhGU19UUkFOU19BQk9SVCk7CiAJfSBlbHNlIHsKIAkJeGZzX2ljaGd0aW1lKGlwLCBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRyk7Ci0JCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUywKLQkJCQkJIE5VTEwpOworCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCX0KIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zmc29wcy5jIGIvZnMveGZzL3hmc192ZnNvcHMuYwppbmRleCAyOWY3MmY2Li42NWM1NjEyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zmc29wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdmZzb3BzLmMKQEAgLTY5Niw3ICs2OTYsNyBAQAogCWJodl92bm9kZV90CSpydnAgPSBYRlNfSVRPVihyaXApOwogCWludAkJZXJyb3I7CiAKLQl4ZnNfaWxvY2socmlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX2lsb2NrKHJpcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfUEFSRU5UKTsKIAl4ZnNfaWZsb2NrKHJpcCk7CiAKIAkvKgpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAKIAkJCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgewogCQkJCWJodl92b3BfdG9zc19wYWdlcyh2cCwgMCwgLTEsIEZJX1JFTUFQRik7CiAJCQl9IGVsc2UgewotCQkJCWJodl92b3BfZmx1c2hpbnZhbF9wYWdlcyh2cCwgMCwgLTEsIEZJX1JFTUFQRik7CisJCQkJZXJyb3IgPSBiaHZfdm9wX2ZsdXNoaW52YWxfcGFnZXModnAsIDAsIC0xLCBGSV9SRU1BUEYpOwogCQkJfQogCiAJCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwpAQCAtMTUzOSw3ICsxNTM5LDcgQEAKIAkJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCQl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKIAkJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwotCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDAsIE5VTEwpOworCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOwogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIGxvZ19mbGFncyk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5jIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCmluZGV4IDUyYzQxNzEuLmRlMTdhZWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYworKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCWlmICghKGZsYWdzICYgQVRUUl9MQVpZKSkKIAkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAotCXZhcC0+dmFfc2l6ZSA9IGlwLT5pX2QuZGlfc2l6ZTsKKwl2YXAtPnZhX3NpemUgPSBYRlNfSVNJWkUoaXApOwogCWlmICh2YXAtPnZhX21hc2sgPT0gWEZTX0FUX1NJWkUpCiAJCWdvdG8gYWxsX2RvbmU7CiAKQEAgLTQ5Niw3ICs0OTYsNyBAQAogCWlmIChtYXNrICYgWEZTX0FUX1NJWkUpIHsKIAkJLyogU2hvcnQgY2lyY3VpdCB0aGUgdHJ1bmNhdGUgY2FzZSBmb3IgemVybyBsZW5ndGggZmlsZXMgKi8KIAkJaWYgKCh2YXAtPnZhX3NpemUgPT0gMCkgJiYKLQkJICAgKGlwLT5pX2QuZGlfc2l6ZSA9PSAwKSAmJiAoaXAtPmlfZC5kaV9uZXh0ZW50cyA9PSAwKSkgeworCQkgICAoaXAtPmlfc2l6ZSA9PSAwKSAmJiAoaXAtPmlfZC5kaV9uZXh0ZW50cyA9PSAwKSkgewogCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAkJCWxvY2tfZmxhZ3MgJj0gflhGU19JTE9DS19FWENMOwogCQkJaWYgKG1hc2sgJiBYRlNfQVRfQ1RJTUUpCkBAIC02MTQsNyArNjE0LDcgQEAKIAkgKi8KIAlpZiAobWFzayAmIFhGU19BVF9TSVpFKSB7CiAJCWNvZGUgPSAwOwotCQlpZiAoKHZhcC0+dmFfc2l6ZSA+IGlwLT5pX2QuZGlfc2l6ZSkgJiYgCisJCWlmICgodmFwLT52YV9zaXplID4gaXAtPmlfc2l6ZSkgJiYKIAkJICAgIChmbGFncyAmIEFUVFJfTk9TSVpFVE9LKSA9PSAwKSB7CiAJCQljb2RlID0geGZzX2lncm93X3N0YXJ0KGlwLCB2YXAtPnZhX3NpemUsIGNyZWRwKTsKIAkJfQpAQCAtNjU0LDEwICs2NTQsMTAgQEAKIAkgKiBUcnVuY2F0ZSBmaWxlLiAgTXVzdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24gYW5kIG5vdCBiZSBhIGRpcmVjdG9yeS4KIAkgKi8KIAlpZiAobWFzayAmIFhGU19BVF9TSVpFKSB7Ci0JCWlmICh2YXAtPnZhX3NpemUgPiBpcC0+aV9kLmRpX3NpemUpIHsKKwkJaWYgKHZhcC0+dmFfc2l6ZSA+IGlwLT5pX3NpemUpIHsKIAkJCXhmc19pZ3Jvd19maW5pc2godHAsIGlwLCB2YXAtPnZhX3NpemUsCiAJCQkgICAgIShmbGFncyAmIEFUVFJfRE1JKSk7Ci0JCX0gZWxzZSBpZiAoKHZhcC0+dmFfc2l6ZSA8PSBpcC0+aV9kLmRpX3NpemUpIHx8CisJCX0gZWxzZSBpZiAoKHZhcC0+dmFfc2l6ZSA8PSBpcC0+aV9zaXplKSB8fAogCQkJICAgKCh2YXAtPnZhX3NpemUgPT0gMCkgJiYgaXAtPmlfZC5kaV9uZXh0ZW50cykpIHsKIAkJCS8qCiAJCQkgKiBzaWduYWwgYSBzeW5jIHRyYW5zYWN0aW9uIHVubGVzcwpAQCAtODczLDcgKzg3Myw3IEBACiAJCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9XU1lOQykKIAkJCXhmc190cmFuc19zZXRfc3luYyh0cCk7CiAKLQkJY29kZSA9IHhmc190cmFuc19jb21taXQodHAsIGNvbW1pdF9mbGFncywgTlVMTCk7CisJCWNvZGUgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBjb21taXRfZmxhZ3MpOwogCX0KIAogCS8qCkBAIC0xMTc2LDcgKzExNzYsNyBAQAogCQl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiAJCWlmIChmbGFnICYgRlNZTkNfV0FJVCkKIAkJCXhmc190cmFuc19zZXRfc3luYyh0cCk7Ci0JCWVycm9yID0gX3hmc190cmFuc19jb21taXQodHAsIDAsIE5VTEwsICZsb2dfZmx1c2hlZCk7CisJCWVycm9yID0gX3hmc190cmFuc19jb21taXQodHAsIDAsICZsb2dfZmx1c2hlZCk7CiAKIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAl9CkBAIC0xMjIxLDcgKzEyMjEsNyBAQAogCSAqIEZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBibG9ja3MgYmV5b25kIHRoZSBlbmQKIAkgKiBvZiB0aGUgZmlsZS4gIElmIG5vdCwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLgogCSAqLwotCWVuZF9mc2IgPSBYRlNfQl9UT19GU0IobXAsICgoeGZzX3Vmc2l6ZV90KWlwLT5pX2QuZGlfc2l6ZSkpOworCWVuZF9mc2IgPSBYRlNfQl9UT19GU0IobXAsICgoeGZzX3Vmc2l6ZV90KWlwLT5pX3NpemUpKTsKIAlsYXN0X2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgKHhmc191ZnNpemVfdClYRlNfTUFYSU9GRlNFVChtcCkpOwogCW1hcF9sZW4gPSBsYXN0X2ZzYiAtIGVuZF9mc2I7CiAJaWYgKG1hcF9sZW4gPD0gMCkKQEAgLTEyNTcsOCArMTI1NywxMiBAQAogCQkgKiBkbyB0aGF0IHdpdGhpbiBhIHRyYW5zYWN0aW9uLgogCQkgKi8KIAkJeGZzX2lsb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwotCQl4ZnNfaXRydW5jYXRlX3N0YXJ0KGlwLCBYRlNfSVRSVU5DX0RFRklOSVRFLAotCQkJCSAgICBpcC0+aV9kLmRpX3NpemUpOworCQllcnJvciA9IHhmc19pdHJ1bmNhdGVfc3RhcnQoaXAsIFhGU19JVFJVTkNfREVGSU5JVEUsCisJCQkJICAgIGlwLT5pX3NpemUpOworCQlpZiAoZXJyb3IpIHsKKwkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOworCQkJcmV0dXJuIGVycm9yOworCQl9CiAKIAkJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwKIAkJCQkJICBYRlNfSVRSVU5DQVRFX0xPR19SRVMobXApLApAQCAtMTI3OCw3ICsxMjgyLDcgQEAKIAkJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CiAKIAkJZXJyb3IgPSB4ZnNfaXRydW5jYXRlX2ZpbmlzaCgmdHAsIGlwLAotCQkJCQkgICAgIGlwLT5pX2QuZGlfc2l6ZSwKKwkJCQkJICAgICBpcC0+aV9zaXplLAogCQkJCQkgICAgIFhGU19EQVRBX0ZPUkssCiAJCQkJCSAgICAgMCk7CiAJCS8qCkBAIC0xMjkxLDggKzEyOTUsNyBAQAogCQkJCQkgIFhGU19UUkFOU19BQk9SVCkpOwogCQl9IGVsc2UgewogCQkJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLAotCQkJCQkJWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUywKLQkJCQkJCU5VTEwpOworCQkJCQkJWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUyk7CiAJCX0KIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCB8IFhGU19JTE9DS19FWENMKTsKIAl9CkBAIC0xNDA2LDcgKzE0MDksNyBAQAogCSAqIHdlIG5lZWQgdG8gdW5sb2NrIHRoZSBpbm9kZSBzaW5jZSB0aGUgbmV3IHRyYW5zYWN0aW9uIGRvZXNuJ3QKIAkgKiBoYXZlIHRoZSBpbm9kZSBhdHRhY2hlZC4KIAkgKi8KLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDAsIE5VTEwpOworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiAJdHAgPSBudHA7CiAJaWYgKGVycm9yKSB7CiAJCUFTU0VSVChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSk7CkBAIC0xNTAzLDcgKzE1MDYsNyBAQAogCXRwID0gKnRwcDsKIAltcCA9IGlwLT5pX21vdW50OwogCUFTU0VSVChpcC0+aV9kLmRpX2ZvcmtvZmYgIT0gMCk7Ci0JeGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUywgTlVMTCk7CisJeGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUyk7CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAogCWVycm9yID0geGZzX2F0dHJfaW5hY3RpdmUoaXApOwpAQCAtMTU2NSw3ICsxNTY4LDcgQEAKIAogCWlmIChpcC0+aV9kLmRpX25saW5rICE9IDApIHsKIAkJaWYgKCgoKGlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRykgJiYKLQkJICAgICAoKGlwLT5pX2QuZGlfc2l6ZSA+IDApIHx8IChWTl9DQUNIRUQodnApID4gMCB8fAorCQkgICAgICgoaXAtPmlfc2l6ZSA+IDApIHx8IChWTl9DQUNIRUQodnApID4gMCB8fAogCQkgICAgICAgaXAtPmlfZGVsYXllZF9ibGtzID4gMCkpICYmCiAJCSAgICAgKGlwLT5pX2RmLmlmX2ZsYWdzICYgWEZTX0lGRVhURU5UUykpICAmJgogCQkgICAgKCEoaXAtPmlfZC5kaV9mbGFncyAmCkBAIC0xNjI2LDggKzE2MjksOCBAQAogCSAqIG9ubHkgb25lIHdpdGggYSByZWZlcmVuY2UgdG8gdGhlIGlub2RlLgogCSAqLwogCXRydW5jYXRlID0gKChpcC0+aV9kLmRpX25saW5rID09IDApICYmCi0gICAgICAgICAgICAoKGlwLT5pX2QuZGlfc2l6ZSAhPSAwKSB8fCAoaXAtPmlfZC5kaV9uZXh0ZW50cyA+IDApIHx8Ci0gICAgICAgICAgICAgKGlwLT5pX2RlbGF5ZWRfYmxrcyA+IDApKSAmJgorCSAgICAoKGlwLT5pX2QuZGlfc2l6ZSAhPSAwKSB8fCAoaXAtPmlfc2l6ZSAhPSAwKSB8fAorCSAgICAgKGlwLT5pX2QuZGlfbmV4dGVudHMgPiAwKSB8fCAoaXAtPmlfZGVsYXllZF9ibGtzID4gMCkpICYmCiAJICAgICgoaXAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHKSk7CiAKIAltcCA9IGlwLT5pX21vdW50OwpAQCAtMTY0NSw3ICsxNjQ4LDcgQEAKIAogCWlmIChpcC0+aV9kLmRpX25saW5rICE9IDApIHsKIAkJaWYgKCgoKGlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgPT0gU19JRlJFRykgJiYKLSAgICAgICAgICAgICAgICAgICAgICgoaXAtPmlfZC5kaV9zaXplID4gMCkgfHwgKFZOX0NBQ0hFRCh2cCkgPiAwIHx8CisgICAgICAgICAgICAgICAgICAgICAoKGlwLT5pX3NpemUgPiAwKSB8fCAoVk5fQ0FDSEVEKHZwKSA+IDAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgaXAtPmlfZGVsYXllZF9ibGtzID4gMCkpICYmCiAJCSAgICAgIChpcC0+aV9kZi5pZl9mbGFncyAmIFhGU19JRkVYVEVOVFMpICYmCiAJCSAgICAgKCEoaXAtPmlfZC5kaV9mbGFncyAmCkBAIC0xNjc1LDcgKzE2NzgsMTEgQEAKIAkJICovCiAJCXhmc19pbG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKIAotCQl4ZnNfaXRydW5jYXRlX3N0YXJ0KGlwLCBYRlNfSVRSVU5DX0RFRklOSVRFLCAwKTsKKwkJZXJyb3IgPSB4ZnNfaXRydW5jYXRlX3N0YXJ0KGlwLCBYRlNfSVRSVU5DX0RFRklOSVRFLCAwKTsKKwkJaWYgKGVycm9yKSB7CisJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKKwkJCXJldHVybiBWTl9JTkFDVElWRV9DQUNIRTsKKwkJfQogCiAJCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsCiAJCQkJCSAgWEZTX0lUUlVOQ0FURV9MT0dfUkVTKG1wKSwKQEAgLTE3OTAsNyArMTc5Nyw3IEBACiAJCSAqIG5vdGhpbmcgd2UgY2FuIGRvIGV4Y2VwdCB0byB0cnkgdG8ga2VlcCBnb2luZy4KIAkJICovCiAJCSh2b2lkKSB4ZnNfYm1hcF9maW5pc2goJnRwLCAgJmZyZWVfbGlzdCwgJmNvbW1pdHRlZCk7Ci0JCSh2b2lkKSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTLCBOVUxMKTsKKwkJKHZvaWQpIHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCX0KIAkvKgogCSAqIFJlbGVhc2UgdGhlIGRxdW90cyBoZWxkIGJ5IGlub2RlLCBpZiBhbnkuCkBAIC0xOTQwLDcgKzE5NDcsNyBAQAogCQlnb3RvIGVycm9yX3JldHVybjsKIAl9CiAKLQl4ZnNfaWxvY2soZHAsIFhGU19JTE9DS19FWENMKTsKKwl4ZnNfaWxvY2soZHAsIFhGU19JTE9DS19FWENMIHwgWEZTX0lMT0NLX1BBUkVOVCk7CiAKIAlYRlNfQk1BUF9JTklUKCZmcmVlX2xpc3QsICZmaXJzdF9ibG9jayk7CiAKQEAgLTIwMjYsNyArMjAzMyw3IEBACiAJCWdvdG8gYWJvcnRfcmVsZTsKIAl9CiAKLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMsIE5VTEwpOworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUyk7CiAJaWYgKGVycm9yKSB7CiAJCUlSRUxFKGlwKTsKIAkJdHAgPSBOVUxMOwpAQCAtMjEyMSw3ICsyMTI4LDYgQEAKIFNUQVRJQyBpbnQKIHhmc19sb2NrX2Rpcl9hbmRfZW50cnkoCiAJeGZzX2lub2RlX3QJKmRwLAotCWJodl92bmFtZV90CSpkZW50cnksCiAJeGZzX2lub2RlX3QJKmlwKQkvKiBpbm9kZSBvZiBlbnRyeSAnbmFtZScgKi8KIHsKIAlpbnQJCWF0dGVtcHRzOwpAQCAtMjEzNSw3ICsyMTQxLDcgQEAKIAlhdHRlbXB0cyA9IDA7CiAKIGFnYWluOgotCXhmc19pbG9jayhkcCwgWEZTX0lMT0NLX0VYQ0wpOworCXhmc19pbG9jayhkcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfUEFSRU5UKTsKIAogCWVfaW51bSA9IGlwLT5pX2lubzsKIApAQCAtMjIwNCw2ICsyMjEwLDIxIEBACiAjZW5kaWYKIAogLyoKKyAqIEJ1bXAgdGhlIHN1YmNsYXNzIHNvIHhmc19sb2NrX2lub2RlcygpIGFjcXVpcmVzIGVhY2ggbG9jayB3aXRoCisgKiBhIGRpZmZlcmVudCB2YWx1ZQorICovCitzdGF0aWMgaW5saW5lIGludAoreGZzX2xvY2tfaW51bW9yZGVyKGludCBsb2NrX21vZGUsIGludCBzdWJjbGFzcykKK3sKKwlpZiAobG9ja19tb2RlICYgKFhGU19JT0xPQ0tfU0hBUkVEfFhGU19JT0xPQ0tfRVhDTCkpCisJCWxvY2tfbW9kZSB8PSAoc3ViY2xhc3MgKyBYRlNfSU9MT0NLX0lOVU1PUkRFUikgPDwgWEZTX0lPTE9DS19TSElGVDsKKwlpZiAobG9ja19tb2RlICYgKFhGU19JTE9DS19TSEFSRUR8WEZTX0lMT0NLX0VYQ0wpKQorCQlsb2NrX21vZGUgfD0gKHN1YmNsYXNzICsgWEZTX0lMT0NLX0lOVU1PUkRFUikgPDwgWEZTX0lMT0NLX1NISUZUOworCisJcmV0dXJuIGxvY2tfbW9kZTsKK30KKworLyoKICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZSB3aWxsIGxvY2sgbiBpbm9kZXMgaW4gZXhjbHVzaXZlIG1vZGUuCiAgKiBXZSBhc3N1bWUgdGhlIGNhbGxlciBjYWxscyB1cyB3aXRoIHRoZSBpbm9kZXMgaW4gaV9pbm8gb3JkZXIuCiAgKgpAQCAtMjI3MCw3ICsyMjkxLDcgQEAKIAkJCSAqIHRoYXQgaXMgaW4gdGhlIEFJTC4KIAkJCSAqLwogCQkJQVNTRVJUKGkgIT0gMCk7Ci0JCQlpZiAoIXhmc19pbG9ja19ub3dhaXQoaXBzW2ldLCBsb2NrX21vZGUpKSB7CisJCQlpZiAoIXhmc19pbG9ja19ub3dhaXQoaXBzW2ldLCB4ZnNfbG9ja19pbnVtb3JkZXIobG9ja19tb2RlLCBpKSkpIHsKIAkJCQlhdHRlbXB0cysrOwogCiAJCQkJLyoKQEAgLTIzMDUsNyArMjMyNiw3IEBACiAJCQkJZ290byBhZ2FpbjsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXhmc19pbG9jayhpcHNbaV0sIGxvY2tfbW9kZSk7CisJCQl4ZnNfaWxvY2soaXBzW2ldLCB4ZnNfbG9ja19pbnVtb3JkZXIobG9ja19tb2RlLCBpKSk7CiAJCX0KIAl9CiAKQEAgLTI0NDAsNyArMjQ2MSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQllcnJvciA9IHhmc19sb2NrX2Rpcl9hbmRfZW50cnkoZHAsIGRlbnRyeSwgaXApOworCWVycm9yID0geGZzX2xvY2tfZGlyX2FuZF9lbnRyeShkcCwgaXApOwogCWlmIChlcnJvcikgewogCQlSRU1PVkVfREVCVUdfVFJBQ0UoX19MSU5FX18pOwogCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxfZmxhZ3MpOwpAQCAtMjUxMSw3ICsyNTMyLDcgQEAKIAkJZ290byBlcnJvcl9yZWxlOwogCX0KIAotCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUywgTlVMTCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKIAlpZiAoZXJyb3IpIHsKIAkJSVJFTEUoaXApOwogCQlnb3RvIHN0ZF9yZXR1cm47CkBAIC0yNzE5LDcgKzI3NDAsNyBAQAogCQlnb3RvIGFib3J0X3JldHVybjsKIAl9CiAKLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMsIE5VTEwpOworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIHN0ZF9yZXR1cm47CiAKQEAgLTI4MzksNyArMjg2MCw3IEBACiAJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KIAotCXhmc19pbG9jayhkcCwgWEZTX0lMT0NLX0VYQ0wpOworCXhmc19pbG9jayhkcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfUEFSRU5UKTsKIAogCS8qCiAJICogQ2hlY2sgZm9yIGRpcmVjdG9yeSBsaW5rIGNvdW50IG92ZXJmbG93LgpAQCAtMjkzNiw3ICsyOTU3LDcgQEAKIAkJZ290byBlcnJvcjI7CiAJfQogCi0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTLCBOVUxMKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCVhGU19RTV9EUVJFTEUobXAsIHVkcXApOwogCVhGU19RTV9EUVJFTEUobXAsIGdkcXApOwogCWlmIChlcnJvcikgewpAQCAtMzA5Niw3ICszMTE3LDcgQEAKIAkgKiB0aGF0IHRoZSBkaXJlY3RvcnkgZW50cnkgZm9yIHRoZSBjaGlsZCBkaXJlY3RvcnkgaW5vZGUgaGFzCiAJICogbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBvYnRhaW5pbmcgYSBsb2cgcmVzZXJ2YXRpb24uCiAJICovCi0JZXJyb3IgPSB4ZnNfbG9ja19kaXJfYW5kX2VudHJ5KGRwLCBkZW50cnksIGNkcCk7CisJZXJyb3IgPSB4ZnNfbG9ja19kaXJfYW5kX2VudHJ5KGRwLCBjZHApOwogCWlmIChlcnJvcikgewogCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxfZmxhZ3MpOwogCQlJUkVMRShjZHApOwpAQCAtMzE5MCw3ICszMjExLDcgQEAKIAkJZ290byBzdGRfcmV0dXJuOwogCX0KIAotCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUywgTlVMTCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKIAlpZiAoZXJyb3IpIHsKIAkJSVJFTEUoY2RwKTsKIAkJZ290byBzdGRfcmV0dXJuOwpAQCAtMzM5Myw3ICszNDE0LDcgQEAKIAkJZ290byBlcnJvcl9yZXR1cm47CiAJfQogCi0JeGZzX2lsb2NrKGRwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX2lsb2NrKGRwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JTE9DS19QQVJFTlQpOwogCiAJLyoKIAkgKiBDaGVjayB3aGV0aGVyIHRoZSBkaXJlY3RvcnkgYWxsb3dzIG5ldyBzeW1saW5rcyBvciBub3QuCkBAIC0zNTM1LDcgKzM1NTYsNyBAQAogCWlmIChlcnJvcikgewogCQlnb3RvIGVycm9yMjsKIAl9Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTLCBOVUxMKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCVhGU19RTV9EUVJFTEUobXAsIHVkcXApOwogCVhGU19RTV9EUVJFTEUobXAsIGdkcXApOwogCkBAIC0zNzkwLDcgKzM4MTEsNyBAQAogCiAJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwogCUlIT0xEKGlwKTsKLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDAsIE5VTEwpOworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC00MDQ5LDE0ICs0MDcwLDE0IEBACiAJYWxsb2NhdGVzaXplX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgY291bnQpOwogCiAJLyoJR2VuZXJhdGUgYSBETUFQSSBldmVudCBpZiBuZWVkZWQuCSovCi0JaWYgKGFsbG9jX3R5cGUgIT0gMCAmJiBvZmZzZXQgPCBpcC0+aV9kLmRpX3NpemUgJiYKKwlpZiAoYWxsb2NfdHlwZSAhPSAwICYmIG9mZnNldCA8IGlwLT5pX3NpemUgJiYKIAkJCShhdHRyX2ZsYWdzJkFUVFJfRE1JKSA9PSAwICAmJgogCQkJRE1fRVZFTlRfRU5BQkxFRChYRlNfTVRPVkZTKG1wKSwgaXAsIERNX0VWRU5UX1dSSVRFKSkgewogCQl4ZnNfb2ZmX3QgICAgICAgICAgIGVuZF9kbWlfb2Zmc2V0OwogCiAJCWVuZF9kbWlfb2Zmc2V0ID0gb2Zmc2V0K2xlbjsKLQkJaWYgKGVuZF9kbWlfb2Zmc2V0ID4gaXAtPmlfZC5kaV9zaXplKQotCQkJZW5kX2RtaV9vZmZzZXQgPSBpcC0+aV9kLmRpX3NpemU7CisJCWlmIChlbmRfZG1pX29mZnNldCA+IGlwLT5pX3NpemUpCisJCQllbmRfZG1pX29mZnNldCA9IGlwLT5pX3NpemU7CiAJCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfV1JJVEUsIFhGU19JVE9WKGlwKSwKIAkJCW9mZnNldCwgZW5kX2RtaV9vZmZzZXQgLSBvZmZzZXQsCiAJCQkwLCBOVUxMKTsKQEAgLTQxNDgsNyArNDE2OSw3IEBACiAJCQlnb3RvIGVycm9yMDsKIAkJfQogCi0JCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUywgTlVMTCk7CisJCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUyk7CiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJCWlmIChlcnJvcikgewogCQkJYnJlYWs7CkBAIC00MjgzLDcgKzQzMDQsNiBAQAogCWludAkJCWVycm9yOwogCXhmc19mc2Jsb2NrX3QJCWZpcnN0ZnNiOwogCXhmc19ibWFwX2ZyZWVfdAkJZnJlZV9saXN0OwotCXhmc19vZmZfdAkJaWxlbjsKIAl4ZnNfYm1idF9pcmVjX3QJCWltYXA7CiAJeGZzX29mZl90CQlpb2Zmc2V0OwogCXhmc19leHRsZW5fdAkJbW9kPTA7CkBAIC00MzEyLDExICs0MzMyLDExIEBACiAJZW5kX2RtaV9vZmZzZXQgPSBvZmZzZXQgKyBsZW47CiAJZW5kb2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIGVuZF9kbWlfb2Zmc2V0KTsKIAotCWlmIChvZmZzZXQgPCBpcC0+aV9kLmRpX3NpemUgJiYKKwlpZiAob2Zmc2V0IDwgaXAtPmlfc2l6ZSAmJgogCSAgICAoYXR0cl9mbGFncyAmIEFUVFJfRE1JKSA9PSAwICYmCiAJICAgIERNX0VWRU5UX0VOQUJMRUQoWEZTX01UT1ZGUyhtcCksIGlwLCBETV9FVkVOVF9XUklURSkpIHsKLQkJaWYgKGVuZF9kbWlfb2Zmc2V0ID4gaXAtPmlfZC5kaV9zaXplKQotCQkJZW5kX2RtaV9vZmZzZXQgPSBpcC0+aV9kLmRpX3NpemU7CisJCWlmIChlbmRfZG1pX29mZnNldCA+IGlwLT5pX3NpemUpCisJCQllbmRfZG1pX29mZnNldCA9IGlwLT5pX3NpemU7CiAJCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfV1JJVEUsIHZwLAogCQkJCW9mZnNldCwgZW5kX2RtaV9vZmZzZXQgLSBvZmZzZXQsCiAJCQkJQVRfREVMQVlfRkxBRyhhdHRyX2ZsYWdzKSwgTlVMTCk7CkBAIC00MzMyLDE2ICs0MzUyLDE1IEBACiAJfQogCiAJcm91bmRpbmcgPSBtYXhfdCh1aW50LCAxIDw8IG1wLT5tX3NiLnNiX2Jsb2NrbG9nLCBOQlBQKTsKLQlpbGVuID0gbGVuICsgKG9mZnNldCAmIChyb3VuZGluZyAtIDEpKTsKIAlpb2Zmc2V0ID0gb2Zmc2V0ICYgfihyb3VuZGluZyAtIDEpOwotCWlmIChpbGVuICYgKHJvdW5kaW5nIC0gMSkpCi0JCWlsZW4gPSAoaWxlbiArIHJvdW5kaW5nKSAmIH4ocm91bmRpbmcgLSAxKTsKIAogCWlmIChWTl9DQUNIRUQodnApICE9IDApIHsKIAkJeGZzX2ludmFsX2NhY2hlZF90cmFjZSgmaXAtPmlfaW9jb3JlLCBpb2Zmc2V0LCAtMSwKIAkJCQljdG9vZmYob2ZmdG9jdChpb2Zmc2V0KSksIC0xKTsKLQkJYmh2X3ZvcF9mbHVzaGludmFsX3BhZ2VzKHZwLCBjdG9vZmYob2ZmdG9jdChpb2Zmc2V0KSksCisJCWVycm9yID0gYmh2X3ZvcF9mbHVzaGludmFsX3BhZ2VzKHZwLCBjdG9vZmYob2ZmdG9jdChpb2Zmc2V0KSksCiAJCQkJLTEsIEZJX1JFTUFQRl9MT0NLRUQpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF91bmxvY2tfaW9sb2NrOwogCX0KIAogCS8qCkBAIC00NDU1LDcgKzQ0NzQsNyBAQAogCQkJZ290byBlcnJvcjA7CiAJCX0KIAotCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMsIE5VTEwpOworCQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCX0KIApAQCAtNDUzMyw3ICs0NTUyLDcgQEAKIAkJYmYtPmxfc3RhcnQgKz0gb2Zmc2V0OwogCQlicmVhazsKIAljYXNlIDI6IC8qU0VFS19FTkQqLwotCQliZi0+bF9zdGFydCArPSBpcC0+aV9kLmRpX3NpemU7CisJCWJmLT5sX3N0YXJ0ICs9IGlwLT5pX3NpemU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKQEAgLTQ1NTAsNyArNDU2OSw3IEBACiAJYmYtPmxfd2hlbmNlID0gMDsKIAogCXN0YXJ0b2Zmc2V0ID0gYmYtPmxfc3RhcnQ7Ci0JZnNpemUgPSBpcC0+aV9kLmRpX3NpemU7CisJZnNpemUgPSBpcC0+aV9zaXplOwogCiAJLyoKIAkgKiBYRlNfSU9DX1JFU1ZTUCBhbmQgWEZTX0lPQ19VTlJFU1ZTUCB3aWxsIHJlc2VydmUgb3IgdW5yZXNlcnZlCkBAIC00NjQ5LDcgKzQ2NjgsNyBAQAogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKIAl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwogCi0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwLCBOVUxMKTsKKwllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOwogCiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjZGlzcGF0LmggYi9pbmNsdWRlL2FjcGkvYWNkaXNwYXQuaAppbmRleCBjYjhkMjg2Li43ZjY5MGJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNkaXNwYXQuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNkaXNwYXQuaApAQCAtMjkwLDEyICsyOTAsOSBAQAogYWNwaV9zdGF0dXMKIGFjcGlfZHNfb2JqX3N0YWNrX3BvcCh1MzIgcG9wX2NvdW50LCBzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICp3YWxrX3N0YXRlKTsKIAotc3RydWN0IGFjcGlfd2Fsa19zdGF0ZSAqYWNwaV9kc19jcmVhdGVfd2Fsa19zdGF0ZShhY3BpX293bmVyX2lkIG93bmVyX2lkLAotCQkJCQkJICB1bmlvbiBhY3BpX3BhcnNlX29iamVjdAotCQkJCQkJICAqb3JpZ2luLAotCQkJCQkJICB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0Ci0JCQkJCQkgICptdGhfZGVzYywKLQkJCQkJCSAgc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlCitzdHJ1Y3QgYWNwaV93YWxrX3N0YXRlICphY3BpX2RzX2NyZWF0ZV93YWxrX3N0YXRlKGFjcGlfb3duZXJfaWQgb3duZXJfaWQsIHVuaW9uIGFjcGlfcGFyc2Vfb2JqZWN0CisJCQkJCQkgICpvcmlnaW4sIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QKKwkJCQkJCSAgKm10aF9kZXNjLCBzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUKIAkJCQkJCSAgKnRocmVhZCk7CiAKIGFjcGlfc3RhdHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNnbG9iYWwuaCBiL2luY2x1ZGUvYWNwaS9hY2dsb2JhbC5oCmluZGV4IDI0YzNmMDUuLjM0N2E5MTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2dsb2JhbC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2dsb2JhbC5oCkBAIC0zMTksNyArMzE5LDcgQEAKICAgICBhY3BpX2dibF9maXhlZF9ldmVudF9oYW5kbGVyc1tBQ1BJX05VTV9GSVhFRF9FVkVOVFNdOwogQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKmFjcGlfZ2JsX2dwZV94cnVwdF9saXN0X2hlYWQ7CiBBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbwotICAgICphY3BpX2dibF9ncGVfZmFkdF9ibG9ja3NbQUNQSV9NQVhfR1BFX0JMT0NLU107CisqYWNwaV9nYmxfZ3BlX2ZhZHRfYmxvY2tzW0FDUElfTUFYX0dQRV9CTE9DS1NdOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNpbnRlcnAuaCBiL2luY2x1ZGUvYWNwaS9hY2ludGVycC5oCmluZGV4IDQ0MDk4MzAuLmNlN2M5ZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2ludGVycC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2ludGVycC5oCkBAIC0yNTMsOCArMjUzLDcgQEAKIAogdm9pZCBhY3BpX2V4X3JlbGVhc2VfYWxsX211dGV4ZXMoc3RydWN0IGFjcGlfdGhyZWFkX3N0YXRlICp0aHJlYWQpOwogCi12b2lkIGFjcGlfZXhfdW5saW5rX211dGV4KHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjLAotCQkJICBzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgKnRocmVhZCk7Cit2b2lkIGFjcGlfZXhfdW5saW5rX211dGV4KHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm9ial9kZXNjKTsKIAogLyoKICAqIGV4cHJlcCAtIEFDUEkgQU1MIGV4ZWN1dGlvbiAtIHByZXAgdXRpbGl0aWVzCkBAIC00NDYsMTAgKzQ0NSwxNCBAQAogLyoKICAqIGV4dXRpbHMgLSBpbnRlcnByZXRlci9zY2FubmVyIHV0aWxpdGllcwogICovCi1hY3BpX3N0YXR1cyBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKHZvaWQpOwordm9pZCBhY3BpX2V4X2VudGVyX2ludGVycHJldGVyKHZvaWQpOwogCiB2b2lkIGFjcGlfZXhfZXhpdF9pbnRlcnByZXRlcih2b2lkKTsKIAordm9pZCBhY3BpX2V4X3JlYWNxdWlyZV9pbnRlcnByZXRlcih2b2lkKTsKKwordm9pZCBhY3BpX2V4X3JlbGlucXVpc2hfaW50ZXJwcmV0ZXIodm9pZCk7CisKIHZvaWQgYWNwaV9leF90cnVuY2F0ZV9mb3IzMmJpdF90YWJsZSh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpvYmpfZGVzYyk7CiAKIHU4IGFjcGlfZXhfYWNxdWlyZV9nbG9iYWxfbG9jayh1MzIgcnVsZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNsb2NhbC5oIGIvaW5jbHVkZS9hY3BpL2FjbG9jYWwuaAppbmRleCA2ZjgzZGRiLi4yMDJjZDQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNsb2NhbC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2xvY2FsLmgKQEAgLTYzMCw3ICs2MzAsNyBAQAogICogYW5kIGJ5dGVsaXN0cy4KICAqLwogc3RydWN0IGFjcGlfcGFyc2Vfb2JqX25hbWVkIHsKLQlBQ1BJX1BBUlNFX0NPTU1PTiB1OCAqIHBhdGg7CisJQUNQSV9QQVJTRV9DT01NT04gdTggKnBhdGg7CiAJdTggKmRhdGE7CQkvKiBBTUwgYm9keSBvciBieXRlbGlzdCBkYXRhICovCiAJdTMyIGxlbmd0aDsJCS8qIEFNTCBsZW5ndGggKi8KIAl1MzIgbmFtZTsJCS8qIDQtYnl0ZSBuYW1lIG9yIHplcm8gaWYgbm8gbmFtZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjbmFtZXNwLmggYi9pbmNsdWRlL2FjcGkvYWNuYW1lc3AuaAppbmRleCA1MzViN2UxLi41ZWYzOGE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNuYW1lc3AuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNuYW1lc3AuaApAQCAtMTAwLDEwICsxMDAsOCBAQAogCQkgICAgICAgYWNwaV93YWxrX2NhbGxiYWNrIHVzZXJfZnVuY3Rpb24sCiAJCSAgICAgICB2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0dXJuX3ZhbHVlKTsKIAotc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmFjcGlfbnNfZ2V0X25leHRfbm9kZShhY3BpX29iamVjdF90eXBlIHR5cGUsCi0JCQkJCQkgIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlCi0JCQkJCQkgICpwYXJlbnQsCi0JCQkJCQkgIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlCitzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqYWNwaV9uc19nZXRfbmV4dF9ub2RlKGFjcGlfb2JqZWN0X3R5cGUgdHlwZSwgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUKKwkJCQkJCSAgKnBhcmVudCwgc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUKIAkJCQkJCSAgKmNoaWxkKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY29iamVjdC5oIGIvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKaW5kZXggNTIwNmQ2MS4uN2UxMjExYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2Fjb2JqZWN0LmgKQEAgLTE1NSw3ICsxNTUsNyBAQAogc3RydWN0IGFjcGlfb2JqZWN0X211dGV4IHsKIAlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHU4IHN5bmNfbGV2ZWw7CS8qIDAtMTUsIHNwZWNpZmllZCBpbiBNdXRleCgpIGNhbGwgKi8KIAl1MTYgYWNxdWlzaXRpb25fZGVwdGg7CS8qIEFsbG93IG11bHRpcGxlIEFjcXVpcmVzLCBzYW1lIHRocmVhZCAqLwotCWFjcGlfdGhyZWFkX2lkIG93bmVyX3RocmVhZF9pZDsJLyogQ3VycmVudCBvd25lciBvZiB0aGUgbXV0ZXggKi8KKwlzdHJ1Y3QgYWNwaV90aHJlYWRfc3RhdGUgKm93bmVyX3RocmVhZDsJLyogQ3VycmVudCBvd25lciBvZiB0aGUgbXV0ZXggKi8KIAlhY3BpX211dGV4IG9zX211dGV4OwkvKiBBY3R1YWwgT1Mgc3luY2hyb25pemF0aW9uIG9iamVjdCAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnByZXY7CS8qIExpbmsgZm9yIGxpc3Qgb2YgYWNxdWlyZWQgbXV0ZXhlcyAqLwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKm5leHQ7CS8qIExpbmsgZm9yIGxpc3Qgb2YgYWNxdWlyZWQgbXV0ZXhlcyAqLwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJICAgIC8qIFRoZSBuZXh0IHR3byBmaWVsZHMgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIDMtYnl0ZSBzcGFjZSBiZWZvcmUgTk9USUZZX0lORk8gKi8KIAl1OCBwcm9jX2lkOwogCXU4IGxlbmd0aDsKLQkgQUNQSV9DT01NT05fTk9USUZZX0lORk8gYWNwaV9pb19hZGRyZXNzIGFkZHJlc3M7CisJQUNQSV9DT01NT05fTk9USUZZX0lORk8gYWNwaV9pb19hZGRyZXNzIGFkZHJlc3M7CiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfdGhlcm1hbF96b25lIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKaW5kZXggMTZjM2M0NC4uYzZmYTVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKQEAgLTkxLDcgKzkxLDggQEAKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9sb2NrKSAoc3RydWN0IGFjcGlfZGV2aWNlICogZGV2aWNlLCBpbnQgdHlwZSk7CiB0eXBlZGVmIGludCAoKmFjcGlfb3Bfc3RhcnQpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX3N0b3ApIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsIGludCB0eXBlKTsKLXR5cGVkZWYgaW50ICgqYWNwaV9vcF9zdXNwZW5kKSAoc3RydWN0IGFjcGlfZGV2aWNlICogZGV2aWNlLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwordHlwZWRlZiBpbnQgKCphY3BpX29wX3N1c3BlbmQpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsCisJCQkJcG1fbWVzc2FnZV90IHN0YXRlKTsKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9yZXN1bWUpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX3NjYW4pIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX2JpbmQpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwpAQCAtMjk2LDEzICsyOTcsMTYgQEAKIAl2b2lkICpkcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKIAlzdHJ1Y3QgYWNwaV9idXNfb3BzIGJ1c19vcHM7CS8qIHdvcmthcm91bmQgZm9yIGRpZmZlcmVudCBjb2RlIHBhdGggZm9yIGhvdHBsdWcgKi8KLQllbnVtIGFjcGlfYnVzX3JlbW92YWxfdHlwZSByZW1vdmFsX3R5cGU7IC8qIGluZGljYXRlIGZvciBkaWZmZXJlbnQgcmVtb3ZhbCB0eXBlICovCisJZW51bSBhY3BpX2J1c19yZW1vdmFsX3R5cGUgcmVtb3ZhbF90eXBlOwkvKiBpbmRpY2F0ZSBmb3IgZGlmZmVyZW50IHJlbW92YWwgdHlwZSAqLwogfTsKIAogI2RlZmluZSBhY3BpX2RyaXZlcl9kYXRhKGQpCSgoZCktPmRyaXZlcl9kYXRhKQogI2RlZmluZSB0b19hY3BpX2RldmljZShkKQljb250YWluZXJfb2YoZCwgc3RydWN0IGFjcGlfZGV2aWNlLCBkZXYpCiAjZGVmaW5lIHRvX2FjcGlfZHJpdmVyKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgYWNwaV9kcml2ZXIsIGRydikKIAorLyogYWNwaV9kZXZpY2UuZGV2LmJ1cyA9PSAmYWNwaV9idXNfdHlwZSAqLworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBhY3BpX2J1c190eXBlOworCiAvKgogICogRXZlbnRzCiAgKiAtLS0tLS0KQEAgLTMzNSw3ICszMzksNyBAQAogCQkgYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSk7CiBpbnQgYWNwaV9idXNfdHJpbShzdHJ1Y3QgYWNwaV9kZXZpY2UgKnN0YXJ0LCBpbnQgcm1kZXZpY2UpOwogaW50IGFjcGlfYnVzX3N0YXJ0KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKLWFjcGlfc3RhdHVzIGFjcGlfYnVzX2dldF9lamQoYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX2hhbmRsZSAqZWpkKTsKK2FjcGlfc3RhdHVzIGFjcGlfYnVzX2dldF9lamQoYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX2hhbmRsZSAqIGVqZCk7CiBpbnQgYWNwaV9tYXRjaF9pZHMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGNoYXIgKmlkcyk7CiBpbnQgYWNwaV9jcmVhdGVfZGlyKHN0cnVjdCBhY3BpX2RldmljZSAqKTsKIHZvaWQgYWNwaV9yZW1vdmVfZGlyKHN0cnVjdCBhY3BpX2RldmljZSAqKTsKQEAgLTM2MCw2ICszNjQsNiBAQAogYWNwaV9oYW5kbGUgYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKICNkZWZpbmUgREVWSUNFX0FDUElfSEFORExFKGRldikgKChhY3BpX2hhbmRsZSkoKGRldiktPmFyY2hkYXRhLmFjcGlfaGFuZGxlKSkKIAotI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCisjZW5kaWYJCQkJLyogQ09ORklHX0FDUEkgKi8KIAogI2VuZGlmIC8qX19BQ1BJX0JVU19IX18qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oIGIvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCmluZGV4IGY2Mjc1YjAuLjU1MzUxNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKQEAgLTExMyw3ICsxMTMsOCBAQAogZXh0ZXJuIGludCByZWdpc3Rlcl9kb2NrX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9kb2NrX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSwKLQlhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmNvbnRleHQpOworCQkJCQlhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsCisJCQkJCXZvaWQgKmNvbnRleHQpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaXNfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKQpAQCAtMTI4LDcgKzEyOSw4IEBACiB7CiB9CiBzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9ob3RwbHVnX2RvY2tfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSwKLQkJCQlhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmNvbnRleHQpCisJCQkJCSAgICAgICBhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsCisJCQkJCSAgICAgICB2b2lkICpjb250ZXh0KQogewogCXJldHVybiAtRU5PREVWOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfbnVtYS5oIGIvaW5jbHVkZS9hY3BpL2FjcGlfbnVtYS5oCmluZGV4IDEwNDlmMmEuLmUyZmNlZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpX251bWEuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9udW1hLmgKQEAgLTgsMTUgKzgsMTIgQEAKICNpZiBNQVhfTlVNTk9ERVMgPiAyNTYKICNkZWZpbmUgTUFYX1BYTV9ET01BSU5TIE1BWF9OVU1OT0RFUwogI2Vsc2UKLSNkZWZpbmUgTUFYX1BYTV9ET01BSU5TICgyNTYpIC8qIE9sZCBweG0gc3BlYyBpcyBkZWZpbmVkIDggYml0ICovCisjZGVmaW5lIE1BWF9QWE1fRE9NQUlOUyAoMjU2KQkvKiBPbGQgcHhtIHNwZWMgaXMgZGVmaW5lZCA4IGJpdCAqLwogI2VuZGlmCiAKLWV4dGVybiBpbnQgX19jcHVpbml0ZGF0YSBweG1fdG9fbm9kZV9tYXBbTUFYX1BYTV9ET01BSU5TXTsKLWV4dGVybiBpbnQgX19jcHVpbml0ZGF0YSBub2RlX3RvX3B4bV9tYXBbTUFYX05VTU5PREVTXTsKLQotZXh0ZXJuIGludCBfX2NwdWluaXQgcHhtX3RvX25vZGUoaW50KTsKLWV4dGVybiBpbnQgX19jcHVpbml0IG5vZGVfdG9fcHhtKGludCk7Ci1leHRlcm4gaW50IF9fY3B1aW5pdCBhY3BpX21hcF9weG1fdG9fbm9kZShpbnQpOworZXh0ZXJuIGludCBweG1fdG9fbm9kZShpbnQpOworZXh0ZXJuIGludCBub2RlX3RvX3B4bShpbnQpOworZXh0ZXJuIGludCBhY3BpX21hcF9weG1fdG9fbm9kZShpbnQpOwogZXh0ZXJuIHZvaWQgX19jcHVpbml0IGFjcGlfdW5tYXBfcHhtX3RvX25vZGUoaW50KTsKIAogI2VuZGlmCQkJCS8qIENPTkZJR19BQ1BJX05VTUEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKaW5kZXggMjc4NTA1OC4uY2E4ODJiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKQEAgLTc4LDcgKzc4LDcgQEAKIC8qCiAgKiBPU0wgSW5pdGlhbGl6YXRpb24gYW5kIHNodXRkb3duIHByaW1pdGl2ZXMKICAqLwotYWNwaV9zdGF0dXMgYWNwaV9vc19pbml0aWFsaXplKHZvaWQpOworYWNwaV9zdGF0dXMgX19pbml0ZGF0YSBhY3BpX29zX2luaXRpYWxpemUodm9pZCk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfb3NfdGVybWluYXRlKHZvaWQpOwogCkBAIC0xNDMsNyArMTQzLDggQEAKICAqLwogdm9pZCAqYWNwaV9vc19hbGxvY2F0ZShhY3BpX3NpemUgc2l6ZSk7CiAKLXZvaWQgX19pb21lbSAqYWNwaV9vc19tYXBfbWVtb3J5KGFjcGlfcGh5c2ljYWxfYWRkcmVzcyB3aGVyZSwgYWNwaV9uYXRpdmVfdWludCBsZW5ndGgpOwordm9pZCBfX2lvbWVtICphY3BpX29zX21hcF9tZW1vcnkoYWNwaV9waHlzaWNhbF9hZGRyZXNzIHdoZXJlLAorCQkJCSBhY3BpX25hdGl2ZV91aW50IGxlbmd0aCk7CiAKIHZvaWQgYWNwaV9vc191bm1hcF9tZW1vcnkodm9pZCBfX2lvbWVtICogbG9naWNhbF9hZGRyZXNzLCBhY3BpX3NpemUgc2l6ZSk7CiAKQEAgLTIzNSw2ICsyMzYsNyBAQAogICogTWlzY2VsbGFuZW91cwogICovCiBhY3BpX3N0YXR1cyBhY3BpX29zX3ZhbGlkYXRlX2ludGVyZmFjZShjaGFyICppbnRlcmZhY2UpOworYWNwaV9zdGF0dXMgYWNwaV9vc2lfaW52YWxpZGF0ZShjaGFyKiBpbnRlcmZhY2UpOwogCiBhY3BpX3N0YXR1cwogYWNwaV9vc192YWxpZGF0ZV9hZGRyZXNzKHU4IHNwYWNlX2lkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCmluZGV4IGUwOGY3ZGYuLmI1Y2NhNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKQEAgLTU1LDcgKzU1LDcgQEAKIGFjcGlfaW5pdGlhbGl6ZV90YWJsZXMoc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqaW5pdGlhbF9zdG9yYWdlLAogCQkgICAgICAgdTMyIGluaXRpYWxfdGFibGVfY291bnQsIHU4IGFsbG93X3Jlc2l6ZSk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfaW5pdGlhbGl6ZV9zdWJzeXN0ZW0odm9pZCk7CithY3BpX3N0YXR1cyBfX2luaXQgYWNwaV9pbml0aWFsaXplX3N1YnN5c3RlbSh2b2lkKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfc3Vic3lzdGVtKHUzMiBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmggYi9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCmluZGV4IDU2YmY0OTIuLmZlOGFiYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaApAQCAtMzQ0LDcgKzM0NCw3IEBACiAKIC8qIDY0LWJpdCBpbnRlZ2VycyAqLwogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgICAgICAgICAgYWNwaV9pbnRlZ2VyOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgYWNwaV9pbnRlZ2VyOwogI2RlZmluZSBBQ1BJX0lOVEVHRVJfTUFYICAgICAgICAgICAgICAgIEFDUElfVUlOVDY0X01BWAogI2RlZmluZSBBQ1BJX0lOVEVHRVJfQklUX1NJWkUgICAgICAgICAgIDY0CiAjZGVmaW5lIEFDUElfTUFYX0RFQ0lNQUxfRElHSVRTICAgICAgICAgMjAJLyogMl42NCA9IDE4LDQ0Niw3NDQsMDczLDcwOSw1NTEsNjE2ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN1dGlscy5oIGIvaW5jbHVkZS9hY3BpL2FjdXRpbHMuaAppbmRleCA4ODNmZmU5Li5hODdlZjFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN1dGlscy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3V0aWxzLmgKQEAgLTM5MCw2ICszOTAsOCBAQAogCiB1OCBhY3BpX3V0X3ZhbGlkX2ludGVybmFsX29iamVjdCh2b2lkICpvYmplY3QpOwogCit1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICphY3BpX3V0X2NyZWF0ZV9wYWNrYWdlX29iamVjdCh1MzIgY291bnQpOworCiB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICphY3BpX3V0X2NyZWF0ZV9idWZmZXJfb2JqZWN0KGFjcGlfc2l6ZSBidWZmZXJfc2l6ZSk7CiAKIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKmFjcGlfdXRfY3JlYXRlX3N0cmluZ19vYmplY3QoYWNwaV9zaXplIHN0cmluZ19zaXplKTsKQEAgLTQ5OCw3ICs1MDAsOCBAQAogYWNwaV9zdGF0dXMKIGFjcGlfdXRfd2Fsa19hbWxfcmVzb3VyY2VzKHU4ICogYW1sLAogCQkJICAgYWNwaV9zaXplIGFtbF9sZW5ndGgsCi0JCQkgICBhY3BpX3dhbGtfYW1sX2NhbGxiYWNrIHVzZXJfZnVuY3Rpb24sIHZvaWQgKipjb250ZXh0KTsKKwkJCSAgIGFjcGlfd2Fsa19hbWxfY2FsbGJhY2sgdXNlcl9mdW5jdGlvbiwKKwkJCSAgIHZvaWQgKipjb250ZXh0KTsKIAogYWNwaV9zdGF0dXMgYWNwaV91dF92YWxpZGF0ZV9yZXNvdXJjZSh2b2lkICphbWwsIHU4ICogcmV0dXJuX2luZGV4KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaCBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKaW5kZXggNWY1MzJkMi4uYTU2ODcxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaAorKysgYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCkBAIC0xMDMsNyArMTAzLDEwIEBACiAKICNkZWZpbmUgYWNwaV90aHJlYWRfaWQgc3RydWN0IHRhc2tfc3RydWN0ICoKIAotc3RhdGljIGlubGluZSBhY3BpX3RocmVhZF9pZCBhY3BpX29zX2dldF90aHJlYWRfaWQodm9pZCkgeyByZXR1cm4gY3VycmVudDsgfQorc3RhdGljIGlubGluZSBhY3BpX3RocmVhZF9pZCBhY3BpX29zX2dldF90aHJlYWRfaWQodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudDsKK30KIAogLyoKICAqIFRoZSBpcnFzX2Rpc2FibGVkKCkgY2hlY2sgaXMgZm9yIHJlc3VtZSBmcm9tIFJBTS4KQEAgLTExMiwxNSArMTE1LDE5IEBACiAgKiB0byBxdWlldCBfX21pZ2h0X3NsZWVwKCkgaW4ga21hbGxvYygpIGFuZCByZXN1bWUgZG9lcyBub3QuCiAgKi8KICNpbmNsdWRlIDxhY3BpL2FjdHlwZXMuaD4KLXN0YXRpYyBpbmxpbmUgdm9pZCAqYWNwaV9vc19hbGxvY2F0ZShhY3BpX3NpemUgc2l6ZSkgewotCXJldHVybiBrbWFsbG9jKHNpemUsIGlycXNfZGlzYWJsZWQoKSA/IEdGUF9BVE9NSUMgOiBHRlBfS0VSTkVMKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYWNwaV9vc19hbGxvY2F0ZShhY3BpX3NpemUgc2l6ZSkKK3sKKwlyZXR1cm4ga21hbGxvYyhzaXplLCBpcnFzX2Rpc2FibGVkKCk/IEdGUF9BVE9NSUMgOiBHRlBfS0VSTkVMKTsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqYWNwaV9vc19hbGxvY2F0ZV96ZXJvZWQoYWNwaV9zaXplIHNpemUpIHsKLQlyZXR1cm4ga3phbGxvYyhzaXplLCBpcnFzX2Rpc2FibGVkKCkgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTCk7CitzdGF0aWMgaW5saW5lIHZvaWQgKmFjcGlfb3NfYWxsb2NhdGVfemVyb2VkKGFjcGlfc2l6ZSBzaXplKQoreworCXJldHVybiBremFsbG9jKHNpemUsIGlycXNfZGlzYWJsZWQoKT8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUwpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmFjcGlfb3NfYWNxdWlyZV9vYmplY3QoYWNwaV9jYWNoZV90ICogY2FjaGUpIHsKLSAgICAgICAgcmV0dXJuIGttZW1fY2FjaGVfemFsbG9jKGNhY2hlLCBpcnFzX2Rpc2FibGVkKCkgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTCk7CitzdGF0aWMgaW5saW5lIHZvaWQgKmFjcGlfb3NfYWNxdWlyZV9vYmplY3QoYWNwaV9jYWNoZV90ICogY2FjaGUpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfemFsbG9jKGNhY2hlLAorCQkJCSBpcnFzX2Rpc2FibGVkKCk/IEdGUF9BVE9NSUMgOiBHRlBfS0VSTkVMKTsKIH0KIAogI2RlZmluZSBBQ1BJX0FMTE9DQVRFKGEpCWFjcGlfb3NfYWxsb2NhdGUoYSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAppbmRleCA5MTZjMDEwLi5iNGIwZmZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCkBAIC0xOCw3ICsxOCw3IEBACiAKICNkZWZpbmUgQUNQSV9QRENfUkVWSVNJT05fSUQJCTB4MQogCi0jZGVmaW5lIEFDUElfUFNEX1JFVjBfUkVWSVNJT04JCTAgLyogU3VwcG9ydCBmb3IgX1BTRCBhcyBpbiBBQ1BJIDMuMCAqLworI2RlZmluZSBBQ1BJX1BTRF9SRVYwX1JFVklTSU9OCQkwCS8qIFN1cHBvcnQgZm9yIF9QU0QgYXMgaW4gQUNQSSAzLjAgKi8KICNkZWZpbmUgQUNQSV9QU0RfUkVWMF9FTlRSSUVTCQk1CiAKIC8qCkBAIC0xODksOCArMTg5LDkgQEAKIAl9IHBpaXg0OwogfTsKIAotZXh0ZXJuIGludCBhY3BpX3Byb2Nlc3Nvcl9wcmVyZWdpc3Rlcl9wZXJmb3JtYW5jZSgKLQkJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlICoqcGVyZm9ybWFuY2UpOworZXh0ZXJuIGludCBhY3BpX3Byb2Nlc3Nvcl9wcmVyZWdpc3Rlcl9wZXJmb3JtYW5jZShzdHJ1Y3QKKwkJCQkJCSAgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UKKwkJCQkJCSAgKipwZXJmb3JtYW5jZSk7CiAKIGV4dGVybiBpbnQgYWNwaV9wcm9jZXNzb3JfcmVnaXN0ZXJfcGVyZm9ybWFuY2Uoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlCiAJCQkJCSAgICAgICAqcGVyZm9ybWFuY2UsIHVuc2lnbmVkIGludCBjcHUpOwpAQCAtMjEzLDcgKzIxNCw4IEBACiB2b2lkIGFjcGlfcHJvY2Vzc29yX3Bvd2VyX2luaXRfYm1fY2hlY2soc3RydWN0IGFjcGlfcHJvY2Vzc29yX2ZsYWdzICpmbGFncywKIAkJCQkJdW5zaWduZWQgaW50IGNwdSk7CiBpbnQgYWNwaV9wcm9jZXNzb3JfZmZoX2NzdGF0ZV9wcm9iZSh1bnNpZ25lZCBpbnQgY3B1LAotCQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4LCBzdHJ1Y3QgYWNwaV9wb3dlcl9yZWdpc3RlciAqcmVnKTsKKwkJCQkgICAgc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCwKKwkJCQkgICAgc3RydWN0IGFjcGlfcG93ZXJfcmVnaXN0ZXIgKnJlZyk7CiB2b2lkIGFjcGlfcHJvY2Vzc29yX2ZmaF9jc3RhdGVfZW50ZXIoc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjc3RhdGUpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0X2JtX2NoZWNrKHN0cnVjdApAQCAtMjI0LDEyICsyMjYsMTQgQEAKIAlyZXR1cm47CiB9CiBzdGF0aWMgaW5saW5lIGludCBhY3BpX3Byb2Nlc3Nvcl9mZmhfY3N0YXRlX3Byb2JlKHVuc2lnbmVkIGludCBjcHUsCi0JCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3gsIHN0cnVjdCBhY3BpX3Bvd2VyX3JlZ2lzdGVyICpyZWcpCisJCQkJCQkgIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3gsCisJCQkJCQkgIHN0cnVjdCBhY3BpX3Bvd2VyX3JlZ2lzdGVyCisJCQkJCQkgICpyZWcpCiB7CiAJcmV0dXJuIC0xOwogfQotc3RhdGljIGlubGluZSB2b2lkIGFjcGlfcHJvY2Vzc29yX2ZmaF9jc3RhdGVfZW50ZXIoCi0JCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3N0YXRlKQorc3RhdGljIGlubGluZSB2b2lkIGFjcGlfcHJvY2Vzc29yX2ZmaF9jc3RhdGVfZW50ZXIoc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4CisJCQkJCQkgICAqY3N0YXRlKQogewogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvYXRvbWljLmgKaW5kZXggZmM3N2Y3NC4uZjVjYjdiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvYXRvbWljLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9BTFBIQV9BVE9NSUNfSAogCiAjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKIC8qCiAgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgpAQCAtMTc1LDE5ICsxNzYsNjQgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0jZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pICgoaW50KWNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAobyksIChuKSkpCisjZGVmaW5lIGF0b21pYzY0X2NtcHhjaGcodiwgb2xkLCBuZXcpIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgb2xkLCBuZXcpKQorI2RlZmluZSBhdG9taWM2NF94Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQorCisjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG9sZCwgbmV3KSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIG9sZCwgbmV3KSkKICNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCiAKLSNkZWZpbmUgYXRvbWljX2FkZF91bmxlc3ModiwgYSwgdSkJCQkJXAotKHsJCQkJCQkJCVwKLQlpbnQgYywgb2xkOwkJCQkJCVwKLQljID0gYXRvbWljX3JlYWQodik7CQkJCQlcCi0Jd2hpbGUgKGMgIT0gKHUpICYmIChvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpKSAhPSBjKSBcCi0JCWMgPSBvbGQ7CQkJCQlcCi0JYyAhPSAodSk7CQkJCQkJXAotfSkKKy8qKgorICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KKyAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgorICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQoreworCWludCBjLCBvbGQ7CisJYyA9IGF0b21pY19yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKICNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCiAKKy8qKgorICogYXRvbWljNjRfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCisgKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KKyAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljNjRfYWRkX3VubGVzcyhhdG9taWM2NF90ICp2LCBsb25nIGEsIGxvbmcgdSkKK3sKKwlsb25nIGMsIG9sZDsKKwljID0gYXRvbWljNjRfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljNjRfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKKyNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpIGF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQorCiAjZGVmaW5lIGF0b21pY19hZGRfbmVnYXRpdmUoYSwgdikgKGF0b21pY19hZGRfcmV0dXJuKChhKSwgKHYpKSA8IDApCiAjZGVmaW5lIGF0b21pYzY0X2FkZF9uZWdhdGl2ZShhLCB2KSAoYXRvbWljNjRfYWRkX3JldHVybigoYSksICh2KSkgPCAwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2JpdG9wcy5oCmluZGV4IDRiNmVmN2YuLjNhMGNiZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2JpdG9wcy5oCkBAIC0zMTMsMzIgKzMxMywyOSBAQAogICogZmxzOiBmaW5kIGxhc3QgYml0IHNldC4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX0FMUEhBX0VWNikgJiYgZGVmaW5lZChDT05GSUdfQUxQSEFfRVY2NykKLXN0YXRpYyBpbmxpbmUgaW50IGZscyhpbnQgd29yZCkKK3N0YXRpYyBpbmxpbmUgaW50IGZsczY0KHVuc2lnbmVkIGxvbmcgd29yZCkKIHsKLQlyZXR1cm4gNjQgLSBfX2tlcm5lbF9jdGx6KHdvcmQgJiAweGZmZmZmZmZmKTsKKwlyZXR1cm4gNjQgLSBfX2tlcm5lbF9jdGx6KHdvcmQpOwogfQogI2Vsc2UKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaD4KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIF9fZmxzbTFfdGFiWzI1Nl07CiAKLS8qIENvbXB1dGUgcG93ZXJzIG9mIHR3byBmb3IgdGhlIGdpdmVuIGludGVnZXIuICAqLwotc3RhdGljIGlubGluZSBsb25nIGZsb29yX2xvZzIodW5zaWduZWQgbG9uZyB3b3JkKQorc3RhdGljIGlubGluZSBpbnQgZmxzNjQodW5zaWduZWQgbG9uZyB4KQogewotI2lmIGRlZmluZWQoQ09ORklHX0FMUEhBX0VWNikgJiYgZGVmaW5lZChDT05GSUdfQUxQSEFfRVY2NykKLQlyZXR1cm4gNjMgLSBfX2tlcm5lbF9jdGx6KHdvcmQpOwotI2Vsc2UKLQlsb25nIGJpdDsKLQlmb3IgKGJpdCA9IC0xOyB3b3JkIDsgYml0KyspCi0JCXdvcmQgPj49IDE7Ci0JcmV0dXJuIGJpdDsKLSNlbmRpZgorCXVuc2lnbmVkIGxvbmcgdCwgYSwgcjsKKworCXQgPSBfX2tlcm5lbF9jbXBiZ2UgKHgsIDB4MDEwMTAxMDEwMTAxMDEwMSk7CisJYSA9IF9fZmxzbTFfdGFiW3RdOworCXQgPSBfX2tlcm5lbF9leHRibCAoeCwgYSk7CisJciA9IGEqOCArIF9fZmxzbTFfdGFiW3RdICsgKHggIT0gMCk7CisKKwlyZXR1cm4gcjsKIH0KKyNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGxvbmcgY2VpbF9sb2cyKHVuc2lnbmVkIGxvbmcgd29yZCkKK3N0YXRpYyBpbmxpbmUgaW50IGZscyhpbnQgeCkKIHsKLQlsb25nIGJpdCA9IGZsb29yX2xvZzIod29yZCk7Ci0JcmV0dXJuIGJpdCArICh3b3JkID4gKDFVTCA8PCBiaXQpKTsKKwlyZXR1cm4gZmxzNjQoKHVuc2lnbmVkIGludCkgeCk7CiB9CiAKIC8qCkBAIC0zNTMsOSArMzUwLDIwIEBACiAJcmV0dXJuIF9fa2VybmVsX2N0cG9wKHcpOwogfQogCi0jZGVmaW5lIGh3ZWlnaHQzMih4KQkodW5zaWduZWQgaW50KSBod2VpZ2h0NjQoKHgpICYgMHhmZmZmZmZmZnVsKQotI2RlZmluZSBod2VpZ2h0MTYoeCkJKHVuc2lnbmVkIGludCkgaHdlaWdodDY0KCh4KSAmIDB4ZmZmZnVsKQotI2RlZmluZSBod2VpZ2h0OCh4KQkodW5zaWduZWQgaW50KSBod2VpZ2h0NjQoKHgpICYgMHhmZnVsKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaHdlaWdodDMyKHVuc2lnbmVkIGludCB3KQoreworCXJldHVybiBod2VpZ2h0NjQodyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGh3ZWlnaHQxNih1bnNpZ25lZCBpbnQgdykKK3sKKwlyZXR1cm4gaHdlaWdodDY0KHcgJiAweGZmZmYpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBod2VpZ2h0OCh1bnNpZ25lZCBpbnQgdykKK3sKKwlyZXR1cm4gaHdlaWdodDY0KHcgJiAweGZmKTsKK30KICNlbHNlCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90Mi5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90Mi5oCmluZGV4IDQ1N2MzNGIuLjkwZTZiNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfdDIuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3QyLmgKQEAgLTQzNyw5ICs0MzcsMTUgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyh0Ml9oYWVfbG9jayk7CiAKKy8qCisgKiBOT1RFOiB0YWtlIFQyX0RFTlNFX01FTSBvZmYgaW4gZWFjaCByZWFkWC93cml0ZVggcm91dGluZSwgc2luY2UKKyAqICAgICAgIHRoZXkgbWF5IGJlIGNhbGxlZCBkaXJlY3RseSwgcmF0aGVyIHRoYW4gdGhyb3VnaCB0aGUKKyAqICAgICAgIGlvcmVhZE5OL2lvd3JpdGVOTiByb3V0aW5lcy4KKyAqLworCiBfX0VYVEVSTl9JTkxJTkUgdTggdDJfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp4YWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyIC0gVDJfREVOU0VfTUVNOwogCXVuc2lnbmVkIGxvbmcgcmVzdWx0LCBtc2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKQEAgLTQ1Myw3ICs0NTksNyBAQAogCiBfX0VYVEVSTl9JTkxJTkUgdTE2IHQyX3JlYWR3KGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqeGFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkciAtIFQyX0RFTlNFX01FTTsKIAl1bnNpZ25lZCBsb25nIHJlc3VsdCwgbXNiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CkBAIC00NzEsNyArNDc3LDcgQEAKICAqLwogX19FWFRFUk5fSU5MSU5FIHUzMiB0Ml9yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQogewotCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHIgLSBUMl9ERU5TRV9NRU07CiAJdW5zaWduZWQgbG9uZyByZXN1bHQsIG1zYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOwpAQCAtNDg1LDcgKzQ5MSw3IEBACiAKIF9fRVhURVJOX0lOTElORSB1NjQgdDJfcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp4YWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyIC0gVDJfREVOU0VfTUVNOwogCXVuc2lnbmVkIGxvbmcgcjAsIHIxLCB3b3JrLCBtc2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKQEAgLTUwMSw3ICs1MDcsNyBAQAogCiBfX0VYVEVSTl9JTkxJTkUgdm9pZCB0Ml93cml0ZWIodTggYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp4YWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyIC0gVDJfREVOU0VfTUVNOwogCXVuc2lnbmVkIGxvbmcgbXNiLCB3OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CkBAIC01MTUsNyArNTIxLDcgQEAKIAogX19FWFRFUk5fSU5MSU5FIHZvaWQgdDJfd3JpdGV3KHUxNiBiLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQogewotCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkcjsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHIgLSBUMl9ERU5TRV9NRU07CiAJdW5zaWduZWQgbG9uZyBtc2IsIHc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdDJfaGFlX2xvY2ssIGZsYWdzKTsKQEAgLTUzMyw3ICs1MzksNyBAQAogICovCiBfX0VYVEVSTl9JTkxJTkUgdm9pZCB0Ml93cml0ZWwodTMyIGIsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqeGFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyOworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB4YWRkciAtIFQyX0RFTlNFX01FTTsKIAl1bnNpZ25lZCBsb25nIG1zYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0Ml9oYWVfbG9jaywgZmxhZ3MpOwpAQCAtNTQ2LDcgKzU1Miw3IEBACiAKIF9fRVhURVJOX0lOTElORSB2b2lkIHQyX3dyaXRlcSh1NjQgYiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp4YWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgeGFkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHhhZGRyIC0gVDJfREVOU0VfTUVNOwogCXVuc2lnbmVkIGxvbmcgbXNiLCB3b3JrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnQyX2hhZV9sb2NrLCBmbGFncyk7CkBAIC01ODcsMTQgKzU5MywxNCBAQAogX19FWFRFUk5fSU5MSU5FIHVuc2lnbmVkIGludCB0Ml9pb3JlYWQjI05TKHZvaWQgX19pb21lbSAqeGFkZHIpCQlcCiB7CQkJCQkJCQkJXAogCWlmICh0Ml9pc19tbWlvKHhhZGRyKSkJCQkJCQlcCi0JCXJldHVybiB0Ml9yZWFkIyNPUyh4YWRkciAtIFQyX0RFTlNFX01FTSk7CQlcCisJCXJldHVybiB0Ml9yZWFkIyNPUyh4YWRkcik7CQkJCVwKIAllbHNlCQkJCQkJCQlcCiAJCXJldHVybiB0Ml9pbiMjT1MoKHVuc2lnbmVkIGxvbmcpeGFkZHIgLSBUMl9JTyk7CQlcCiB9CQkJCQkJCQkJXAogX19FWFRFUk5fSU5MSU5FIHZvaWQgdDJfaW93cml0ZSMjTlModSMjTlMgYiwgdm9pZCBfX2lvbWVtICp4YWRkcikJXAogewkJCQkJCQkJCVwKIAlpZiAodDJfaXNfbW1pbyh4YWRkcikpCQkJCQkJXAotCQl0Ml93cml0ZSMjT1MoYiwgeGFkZHIgLSBUMl9ERU5TRV9NRU0pOwkJCVwKKwkJdDJfd3JpdGUjI09TKGIsIHhhZGRyKTsJCQkJCVwKIAllbHNlCQkJCQkJCQlcCiAJCXQyX291dCMjT1MoYiwgKHVuc2lnbmVkIGxvbmcpeGFkZHIgLSBUMl9JTyk7CQlcCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3RpdGFuLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3RpdGFuLmgKaW5kZXggYTY0Y2NiZi4uYTE3ZjZmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90aXRhbi5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfdGl0YW4uaApAQCAtMzgwLDEyICszODAsNyBAQAogLyoKICAqIE1lbW9yeSBmdW5jdGlvbnMuICBhbGwgYWNjZXNzZXMgYXJlIGRvbmUgdGhyb3VnaCBsaW5lYXIgc3BhY2UuCiAgKi8KLQotX19FWFRFUk5fSU5MSU5FIHZvaWQgX19pb21lbSAqdGl0YW5faW9wb3J0bWFwKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgVElUQU5fSU9fQklBUyk7Ci19Ci0KK2V4dGVybiB2b2lkIF9faW9tZW0gKnRpdGFuX2lvcG9ydG1hcCh1bnNpZ25lZCBsb25nIGFkZHIpOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqdGl0YW5faW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCB0aXRhbl9pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfdHN1bmFtaS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90c3VuYW1pLmgKaW5kZXggNDRlNjM1ZC4uNThkNGZlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90c3VuYW1pLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90c3VuYW1pLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9fQUxQSEFfVFNVTkFNSV9fSF9fCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgogCiAvKgpAQCAtMzAyLDE4ICszMDMsOCBAQAogLyoKICAqIE1lbW9yeSBmdW5jdGlvbnMuICBhbGwgYWNjZXNzZXMgYXJlIGRvbmUgdGhyb3VnaCBsaW5lYXIgc3BhY2UuCiAgKi8KLQotX19FWFRFUk5fSU5MSU5FIHZvaWQgX19pb21lbSAqdHN1bmFtaV9pb3BvcnRtYXAodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBUU1VOQU1JX0lPX0JJQVMpOwotfQotCi1fX0VYVEVSTl9JTkxJTkUgdm9pZCBfX2lvbWVtICp0c3VuYW1pX2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLCAKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBUU1VOQU1JX01FTV9CSUFTKTsKLX0KLQorZXh0ZXJuIHZvaWQgX19pb21lbSAqdHN1bmFtaV9pb3BvcnRtYXAodW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKnRzdW5hbWlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBfX0VYVEVSTl9JTkxJTkUgaW50IHRzdW5hbWlfaXNfaW9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlyZXR1cm4gYWRkciA+PSBUU1VOQU1JX0JBU0U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3dpbGRmaXJlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3dpbGRmaXJlLmgKaW5kZXggMTJhZjgwMy4uY2Q1NjJmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV93aWxkZmlyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfd2lsZGZpcmUuaApAQCAtMjk1LDcgKzI5NSw3IEBACiAKIF9fRVhURVJOX0lOTElORSBpbnQgd2lsZGZpcmVfaXNfbW1pbyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnhhZGRyKQogewotCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpeGFkZHI7CiAJcmV0dXJuIChhZGRyICYgMHgxMDAwMDAwMDBVTCkgPT0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEva2RlYnVnLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9rZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWNlMWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEva2RlYnVnLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2tkZWJ1Zy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2xvY2FsLmgKaW5kZXggOTBhNTEwZi4uNmFkM2VhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvbG9jYWwuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9sb2NhbC5oCkBAIC00LDM3ICs0LDExNSBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotdHlwZWRlZiBhdG9taWM2NF90IGxvY2FsX3Q7Cit0eXBlZGVmIHN0cnVjdAoreworCWF0b21pY19sb25nX3QgYTsKK30gbG9jYWxfdDsKIAotI2RlZmluZSBMT0NBTF9JTklUKGkpCUFUT01JQzY0X0lOSVQoaSkKLSNkZWZpbmUgbG9jYWxfcmVhZCh2KQlhdG9taWM2NF9yZWFkKHYpCi0jZGVmaW5lIGxvY2FsX3NldCh2LGkpCWF0b21pYzY0X3NldCh2LGkpCisjZGVmaW5lIExPQ0FMX0lOSVQoaSkJeyBBVE9NSUNfTE9OR19JTklUKGkpIH0KKyNkZWZpbmUgbG9jYWxfcmVhZChsKQlhdG9taWNfbG9uZ19yZWFkKCYobCktPmEpCisjZGVmaW5lIGxvY2FsX3NldChsLGkpCWF0b21pY19sb25nX3NldCgmKGwpLT5hLCAoaSkpCisjZGVmaW5lIGxvY2FsX2luYyhsKQlhdG9taWNfbG9uZ19pbmMoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWxfZGVjKGwpCWF0b21pY19sb25nX2RlYygmKGwpLT5hKQorI2RlZmluZSBsb2NhbF9hZGQoaSxsKQlhdG9taWNfbG9uZ19hZGQoKGkpLCgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWxfc3ViKGksbCkJYXRvbWljX2xvbmdfc3ViKChpKSwoJihsKS0+YSkpCiAKLSNkZWZpbmUgbG9jYWxfaW5jKHYpCWF0b21pYzY0X2luYyh2KQotI2RlZmluZSBsb2NhbF9kZWModikJYXRvbWljNjRfZGVjKHYpCi0jZGVmaW5lIGxvY2FsX2FkZChpLCB2KQlhdG9taWM2NF9hZGQoaSwgdikKLSNkZWZpbmUgbG9jYWxfc3ViKGksIHYpCWF0b21pYzY0X3N1YihpLCB2KQorc3RhdGljIF9faW5saW5lX18gbG9uZyBsb2NhbF9hZGRfcmV0dXJuKGxvbmcgaSwgbG9jYWxfdCAqIGwpCit7CisJbG9uZyB0ZW1wLCByZXN1bHQ7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkcV9sICUwLCUxXG4iCisJIglhZGRxICUwLCUzLCUyXG4iCisJIglhZGRxICUwLCUzLCUwXG4iCisJIglzdHFfYyAlMCwlMVxuIgorCSIJYmVxICUwLDJmXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCToiPSZyIiAodGVtcCksICI9bSIgKGwtPmEuY291bnRlciksICI9JnIiIChyZXN1bHQpCisJOiJJciIgKGkpLCAibSIgKGwtPmEuY291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIHJlc3VsdDsKK30KIAotI2RlZmluZSBfX2xvY2FsX2luYyh2KQkJKCh2KS0+Y291bnRlcisrKQotI2RlZmluZSBfX2xvY2FsX2RlYyh2KQkJKCh2KS0+Y291bnRlcisrKQotI2RlZmluZSBfX2xvY2FsX2FkZChpLHYpCSgodiktPmNvdW50ZXIrPShpKSkKLSNkZWZpbmUgX19sb2NhbF9zdWIoaSx2KQkoKHYpLT5jb3VudGVyLT0oaSkpCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvY2FsX3N1Yl9yZXR1cm4obG9uZyBpLCBsb2NhbF90ICogbCkKK3sKKwlsb25nIHRlbXAsIHJlc3VsdDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRxX2wgJTAsJTFcbiIKKwkiCXN1YnEgJTAsJTMsJTJcbiIKKwkiCXN1YnEgJTAsJTMsJTBcbiIKKwkiCXN0cV9jICUwLCUxXG4iCisJIgliZXEgJTAsMmZcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiI9JnIiICh0ZW1wKSwgIj1tIiAobC0+YS5jb3VudGVyKSwgIj0mciIgKHJlc3VsdCkKKwk6IklyIiAoaSksICJtIiAobC0+YS5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIGxvY2FsX2NtcHhjaGcobCwgbywgbikgXAorCShjbXB4Y2hnX2xvY2FsKCYoKGwpLT5hLmNvdW50ZXIpLCAobyksIChuKSkpCisjZGVmaW5lIGxvY2FsX3hjaGcobCwgbikgKHhjaGdfbG9jYWwoJigobCktPmEuY291bnRlciksIChuKSkpCisKKy8qKgorICogbG9jYWxfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCisgKiBAbDogcG9pbnRlciBvZiB0eXBlIGxvY2FsX3QKKyAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byBsLi4uCisgKiBAdTogLi4udW5sZXNzIGwgaXMgZXF1YWwgdG8gdS4KKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQGwsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KKyAqIFJldHVybnMgbm9uLXplcm8gaWYgQGwgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCisjZGVmaW5lIGxvY2FsX2FkZF91bmxlc3MobCwgYSwgdSkJCQkJXAorKHsJCQkJCQkJCVwKKwlsb25nIGMsIG9sZDsJCQkJCQlcCisJYyA9IGxvY2FsX3JlYWQobCk7CQkJCQlcCisJZm9yICg7OykgewkJCQkJCVwKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkJCQkJXAorCQkJYnJlYWs7CQkJCQlcCisJCW9sZCA9IGxvY2FsX2NtcHhjaGcoKGwpLCBjLCBjICsgKGEpKTsJXAorCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkJCQkJXAorCQkJYnJlYWs7CQkJCQlcCisJCWMgPSBvbGQ7CQkJCQlcCisJfQkJCQkJCQlcCisJYyAhPSAodSk7CQkJCQkJXAorfSkKKyNkZWZpbmUgbG9jYWxfaW5jX25vdF96ZXJvKGwpIGxvY2FsX2FkZF91bmxlc3MoKGwpLCAxLCAwKQorCisjZGVmaW5lIGxvY2FsX2FkZF9uZWdhdGl2ZShhLCBsKSAobG9jYWxfYWRkX3JldHVybigoYSksIChsKSkgPCAwKQorCisjZGVmaW5lIGxvY2FsX2RlY19yZXR1cm4obCkgbG9jYWxfc3ViX3JldHVybigxLChsKSkKKworI2RlZmluZSBsb2NhbF9pbmNfcmV0dXJuKGwpIGxvY2FsX2FkZF9yZXR1cm4oMSwobCkpCisKKyNkZWZpbmUgbG9jYWxfc3ViX2FuZF90ZXN0KGksbCkgKGxvY2FsX3N1Yl9yZXR1cm4oKGkpLCAobCkpID09IDApCisKKyNkZWZpbmUgbG9jYWxfaW5jX2FuZF90ZXN0KGwpIChsb2NhbF9hZGRfcmV0dXJuKDEsIChsKSkgPT0gMCkKKworI2RlZmluZSBsb2NhbF9kZWNfYW5kX3Rlc3QobCkgKGxvY2FsX3N1Yl9yZXR1cm4oMSwgKGwpKSA9PSAwKQorCisvKiBWZXJpZnkgaWYgZmFzdGVyIHRoYW4gYXRvbWljIG9wcyAqLworI2RlZmluZSBfX2xvY2FsX2luYyhsKQkJKChsKS0+YS5jb3VudGVyKyspCisjZGVmaW5lIF9fbG9jYWxfZGVjKGwpCQkoKGwpLT5hLmNvdW50ZXIrKykKKyNkZWZpbmUgX19sb2NhbF9hZGQoaSxsKQkoKGwpLT5hLmNvdW50ZXIrPShpKSkKKyNkZWZpbmUgX19sb2NhbF9zdWIoaSxsKQkoKGwpLT5hLmNvdW50ZXItPShpKSkKIAogLyogVXNlIHRoZXNlIGZvciBwZXItY3B1IGxvY2FsX3QgdmFyaWFibGVzOiBvbiBzb21lIGFyY2hzIHRoZXkgYXJlCiAgKiBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlc2UgbmFpdmUgaW1wbGVtZW50YXRpb25zLiAgTm90ZSB0aGV5IHRha2UKICAqIGEgdmFyaWFibGUsIG5vdCBhbiBhZGRyZXNzLgogICovCi0jZGVmaW5lIGNwdV9sb2NhbF9yZWFkKHYpCWxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9zZXQodiwgaSkJbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKHYpLCAoaSkpCisjZGVmaW5lIGNwdV9sb2NhbF9yZWFkKGwpCWxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIobCkpCisjZGVmaW5lIGNwdV9sb2NhbF9zZXQobCwgaSkJbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKGwpLCAoaSkpCiAKLSNkZWZpbmUgY3B1X2xvY2FsX2luYyh2KQlsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9kZWModikJbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIHYpCWxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIHYpCWxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBjcHVfbG9jYWxfaW5jKGwpCWxvY2FsX2luYygmX19nZXRfY3B1X3ZhcihsKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2RlYyhsKQlsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpCisjZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgbCkJbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpCisjZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgbCkJbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpCiAKLSNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKHYpCV9fbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9kZWModikJX19sb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCB2KQlfX2xvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgdikJX19sb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKGwpCV9fbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGwpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkJX19sb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCBsKQlfX2xvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKGwpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgbCkJX19sb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkKIAogI2VuZGlmIC8qIF9BTFBIQV9MT0NBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbW11X2NvbnRleHQuaAppbmRleCAwYmQ3YmQyLi42YTViZTFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL21tdV9jb250ZXh0LmgKQEAgLTg1LDggKzg1LDggQEAKICAqICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCiAgKi8KIAotI2lmZGVmIENPTkZJR19TTVAKICNpbmNsdWRlIDxhc20vc21wLmg+CisjaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBjcHVfbGFzdF9hc24oY3B1aWQpCShjcHVfZGF0YVtjcHVpZF0ubGFzdF9hc24pCiAjZWxzZQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbGFzdF9hc247CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9wZ3RhYmxlLmgKaW5kZXggNDlhYzliZS4uNjE2ZDIwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3BndGFibGUuaApAQCAtMzQ1LDEwICszNDUsNiBAQAogI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGZuLCBzaXplLCBwcm90KQlcCiAJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwZm4sIHNpemUsIHByb3QpCiAKLSNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbikKLSNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJMAotI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuKQotCiAjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCiAJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDE2bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCiAjZGVmaW5lIHBtZF9FUlJPUihlKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wb2xsLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9wb2xsLmgKaW5kZXggNzZmODkzNS4uYzk4NTA5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3BvbGwuaApAQCAtMSwyNSArMSBAQAotI2lmbmRlZiBfX0FMUEhBX1BPTExfSAotI2RlZmluZSBfX0FMUEhBX1BPTExfSAotCi0jZGVmaW5lIFBPTExJTgkJKDEgPDwgMCkKLSNkZWZpbmUgUE9MTFBSSQkJKDEgPDwgMSkKLSNkZWZpbmUgUE9MTE9VVAkJKDEgPDwgMikKLSNkZWZpbmUgUE9MTEVSUgkJKDEgPDwgMykKLSNkZWZpbmUgUE9MTEhVUAkJKDEgPDwgNCkKLSNkZWZpbmUgUE9MTE5WQUwJKDEgPDwgNSkKLSNkZWZpbmUgUE9MTFJETk9STQkoMSA8PCA2KQotI2RlZmluZSBQT0xMUkRCQU5ECSgxIDw8IDcpCi0jZGVmaW5lIFBPTExXUk5PUk0JKDEgPDwgOCkKLSNkZWZpbmUgUE9MTFdSQkFORAkoMSA8PCA5KQotI2RlZmluZSBQT0xMTVNHCQkoMSA8PCAxMCkKLSNkZWZpbmUgUE9MTFJFTU9WRQkoMSA8PCAxMikKLSNkZWZpbmUgUE9MTFJESFVQICAgICAgICgxIDw8IDEzKQotCi0KLXN0cnVjdCBwb2xsZmQgewotCWludCBmZDsKLQlzaG9ydCBldmVudHM7Ci0Jc2hvcnQgcmV2ZW50czsKLX07Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BvbGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NtcC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKaW5kZXggYTFhMWVjYS4uMjg2ZTFkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKQEAgLTUxLDYgKzUxLDcgQEAKIAogI2Vsc2UgLyogQ09ORklHX1NNUCAqLwogCisjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCQkwCiAjZGVmaW5lIHNtcF9jYWxsX2Z1bmN0aW9uX29uX2NwdShmdW5jLGluZm8scmV0cnksd2FpdCxjcHUpICAgICh7IDA7IH0pCiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFscGhhL3N5c3RlbS5oCmluZGV4IDAzZTljMGUuLmNmMTAyMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3N5c3RlbS5oCkBAIC00NDMsOCArNDQzLDExMCBAQAogICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX3hjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKV94Xywgc2l6ZW9mKCoocHRyKSkpOyBcCiAgIH0pCiAKLSNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksMSkpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19feGNoZ191OF9sb2NhbCh2b2xhdGlsZSBjaGFyICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCwgdG1wLCBhZGRyNjQ7CiAKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWFuZG5vdAklNCw3LCUzXG4iCisJIglpbnNibAklMSwlNCwlMVxuIgorCSIxOglsZHFfbAklMiwwKCUzKVxuIgorCSIJZXh0YmwJJTIsJTQsJTBcbiIKKwkiCW1za2JsCSUyLCU0LCUyXG4iCisJIglvcgklMSwlMiwlMlxuIgorCSIJc3RxX2MJJTIsMCglMylcbiIKKwkiCWJlcQklMiwyZlxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9JnIiIChyZXQpLCAiPSZyIiAodmFsKSwgIj0mciIgKHRtcCksICI9JnIiIChhZGRyNjQpCisJOiAiciIgKChsb25nKW0pLCAiMSIgKHZhbCkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19feGNoZ191MTZfbG9jYWwodm9sYXRpbGUgc2hvcnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcmV0LCB0bXAsIGFkZHI2NDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIJYW5kbm90CSU0LDcsJTNcbiIKKwkiCWluc3dsCSUxLCU0LCUxXG4iCisJIjE6CWxkcV9sCSUyLDAoJTMpXG4iCisJIglleHR3bAklMiwlNCwlMFxuIgorCSIJbXNrd2wJJTIsJTQsJTJcbiIKKwkiCW9yCSUxLCUyLCUyXG4iCisJIglzdHFfYwklMiwwKCUzKVxuIgorCSIJYmVxCSUyLDJmXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIJMWJcbiIKKwkiLnByZXZpb3VzIgorCTogIj0mciIgKHJldCksICI9JnIiICh2YWwpLCAiPSZyIiAodG1wKSwgIj0mciIgKGFkZHI2NCkKKwk6ICJyIiAoKGxvbmcpbSksICIxIiAodmFsKSA6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX194Y2hnX3UzMl9sb2NhbCh2b2xhdGlsZSBpbnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRsX2wgJTAsJTRcbiIKKwkiCWJpcyAkMzEsJTMsJTFcbiIKKwkiCXN0bF9jICUxLCUyXG4iCisJIgliZXEgJTEsMmZcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIiAodmFsKSwgIj0mciIgKGR1bW15KSwgIj1tIiAoKm0pCisJOiAickkiICh2YWwpLCAibSIgKCptKSA6ICJtZW1vcnkiKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX194Y2hnX3U2NF9sb2NhbCh2b2xhdGlsZSBsb25nICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGR1bW15OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkcV9sICUwLCU0XG4iCisJIgliaXMgJDMxLCUzLCUxXG4iCisJIglzdHFfYyAlMSwlMlxuIgorCSIJYmVxICUxLDJmXG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCTogIj0mciIgKHZhbCksICI9JnIiIChkdW1teSksICI9bSIgKCptKQorCTogInJJIiAodmFsKSwgIm0iICgqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gdmFsOworfQorCisjZGVmaW5lIF9feGNoZ19sb2NhbChwdHIsIHgsIHNpemUpIFwKKyh7IFwKKwl1bnNpZ25lZCBsb25nIF9feGNoZ19fcmVzOyBcCisJdm9sYXRpbGUgdm9pZCAqX194Y2hnX19wdHIgPSAocHRyKTsgXAorCXN3aXRjaCAoc2l6ZSkgeyBcCisJCWNhc2UgMTogX194Y2hnX19yZXMgPSBfX3hjaGdfdThfbG9jYWwoX194Y2hnX19wdHIsIHgpOyBicmVhazsgXAorCQljYXNlIDI6IF9feGNoZ19fcmVzID0gX194Y2hnX3UxNl9sb2NhbChfX3hjaGdfX3B0ciwgeCk7IGJyZWFrOyBcCisJCWNhc2UgNDogX194Y2hnX19yZXMgPSBfX3hjaGdfdTMyX2xvY2FsKF9feGNoZ19fcHRyLCB4KTsgYnJlYWs7IFwKKwkJY2FzZSA4OiBfX3hjaGdfX3JlcyA9IF9feGNoZ191NjRfbG9jYWwoX194Y2hnX19wdHIsIHgpOyBicmVhazsgXAorCQlkZWZhdWx0OiBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsgX194Y2hnX19yZXMgPSB4OyBcCisJfSBcCisJX194Y2hnX19yZXM7IFwKK30pCisKKyNkZWZpbmUgeGNoZ19sb2NhbChwdHIseCkJCQkJCQkgICAgIFwKKyAgKHsJCQkJCQkJCQkgICAgIFwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF94XyA9ICh4KTsJCQkJCSAgICAgXAorICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX3hjaGdfbG9jYWwoKHB0ciksICh1bnNpZ25lZCBsb25nKV94XywJICAgICBcCisgICAgIAkJc2l6ZW9mKCoocHRyKSkpOyBcCisgIH0pCiAKIC8qIAogICogQXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlLiAgQ29tcGFyZSBPTEQgd2l0aCBNRU0sIGlmIGlkZW50aWNhbCwKQEAgLTU5Niw2ICs2OTgsMTI4IEBACiAJCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOyBcCiAgIH0pCiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworX19jbXB4Y2hnX3U4X2xvY2FsKHZvbGF0aWxlIGNoYXIgKm0sIGxvbmcgb2xkLCBsb25nIG5ldykKK3sKKwl1bnNpZ25lZCBsb25nIHByZXYsIHRtcCwgY21wLCBhZGRyNjQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWFuZG5vdAklNSw3LCU0XG4iCisJIglpbnNibAklMSwlNSwlMVxuIgorCSIxOglsZHFfbAklMiwwKCU0KVxuIgorCSIJZXh0YmwJJTIsJTUsJTBcbiIKKwkiCWNtcGVxCSUwLCU2LCUzXG4iCisJIgliZXEJJTMsMmZcbiIKKwkiCW1za2JsCSUyLCU1LCUyXG4iCisJIglvcgklMSwlMiwlMlxuIgorCSIJc3RxX2MJJTIsMCglNClcbiIKKwkiCWJlcQklMiwzZlxuIgorCSIyOlxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjM6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9JnIiIChwcmV2KSwgIj0mciIgKG5ldyksICI9JnIiICh0bXApLCAiPSZyIiAoY21wKSwgIj0mciIgKGFkZHI2NCkKKwk6ICJyIiAoKGxvbmcpbSksICJJciIgKG9sZCksICIxIiAobmV3KSA6ICJtZW1vcnkiKTsKKworCXJldHVybiBwcmV2OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191MTZfbG9jYWwodm9sYXRpbGUgc2hvcnQgKm0sIGxvbmcgb2xkLCBsb25nIG5ldykKK3sKKwl1bnNpZ25lZCBsb25nIHByZXYsIHRtcCwgY21wLCBhZGRyNjQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWFuZG5vdAklNSw3LCU0XG4iCisJIglpbnN3bAklMSwlNSwlMVxuIgorCSIxOglsZHFfbAklMiwwKCU0KVxuIgorCSIJZXh0d2wJJTIsJTUsJTBcbiIKKwkiCWNtcGVxCSUwLCU2LCUzXG4iCisJIgliZXEJJTMsMmZcbiIKKwkiCW1za3dsCSUyLCU1LCUyXG4iCisJIglvcgklMSwlMiwlMlxuIgorCSIJc3RxX2MJJTIsMCglNClcbiIKKwkiCWJlcQklMiwzZlxuIgorCSIyOlxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjM6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9JnIiIChwcmV2KSwgIj0mciIgKG5ldyksICI9JnIiICh0bXApLCAiPSZyIiAoY21wKSwgIj0mciIgKGFkZHI2NCkKKwk6ICJyIiAoKGxvbmcpbSksICJJciIgKG9sZCksICIxIiAobmV3KSA6ICJtZW1vcnkiKTsKKworCXJldHVybiBwcmV2OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191MzJfbG9jYWwodm9sYXRpbGUgaW50ICptLCBpbnQgb2xkLCBpbnQgbmV3KQoreworCXVuc2lnbmVkIGxvbmcgcHJldiwgY21wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkbF9sICUwLCU1XG4iCisJIgljbXBlcSAlMCwlMywlMVxuIgorCSIJYmVxICUxLDJmXG4iCisJIgltb3YgJTQsJTFcbiIKKwkiCXN0bF9jICUxLCUyXG4iCisJIgliZXEgJTEsM2ZcbiIKKwkiMjpcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIzOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIihwcmV2KSwgIj0mciIoY21wKSwgIj1tIigqbSkKKwk6ICJyIigobG9uZykgb2xkKSwgInIiKG5ldyksICJtIigqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2NtcHhjaGdfdTY0X2xvY2FsKHZvbGF0aWxlIGxvbmcgKm0sIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ldykKK3sKKwl1bnNpZ25lZCBsb25nIHByZXYsIGNtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIxOglsZHFfbCAlMCwlNVxuIgorCSIJY21wZXEgJTAsJTMsJTFcbiIKKwkiCWJlcSAlMSwyZlxuIgorCSIJbW92ICU0LCUxXG4iCisJIglzdHFfYyAlMSwlMlxuIgorCSIJYmVxICUxLDNmXG4iCisJIjI6XG4iCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMzoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCTogIj0mciIocHJldiksICI9JnIiKGNtcCksICI9bSIoKm0pCisJOiAiciIoKGxvbmcpIG9sZCksICJyIihuZXcpLCAibSIoKm0pIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHByZXY7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZworX19jbXB4Y2hnX2xvY2FsKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3LAorCQlpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIF9fY21weGNoZ191OF9sb2NhbChwdHIsIG9sZCwgbmV3KTsKKwkJY2FzZSAyOgorCQkJcmV0dXJuIF9fY21weGNoZ191MTZfbG9jYWwocHRyLCBvbGQsIG5ldyk7CisJCWNhc2UgNDoKKwkJCXJldHVybiBfX2NtcHhjaGdfdTMyX2xvY2FsKHB0ciwgb2xkLCBuZXcpOworCQljYXNlIDg6CisJCQlyZXR1cm4gX19jbXB4Y2hnX3U2NF9sb2NhbChwdHIsIG9sZCwgbmV3KTsKKwl9CisJX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CisJcmV0dXJuIG9sZDsKK30KKworI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0cixvLG4pCQkJCQkJIFwKKyAgKHsJCQkJCQkJCQkgXAorICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX29fID0gKG8pOwkJCQkJIFwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9uXyA9IChuKTsJCQkJCSBcCisgICAgIChfX3R5cGVvZl9fKCoocHRyKSkpIF9fY21weGNoZ19sb2NhbCgocHRyKSwgKHVuc2lnbmVkIGxvbmcpX29fLAkgXAorCQkJCSAgICAodW5zaWduZWQgbG9uZylfbl8sIHNpemVvZigqKHB0cikpKTsgXAorICB9KQorCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1hbHBoYS90aHJlYWRfaW5mby5oCmluZGV4IGVlYjNiZWYuLjQ4YTIyZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvdGhyZWFkX2luZm8uaApAQCAtNzYsMTIgKzc2LDE0IEBACiAjZGVmaW5lIFRJRl9VQUNfTk9GSVgJCTcKICNkZWZpbmUgVElGX1VBQ19TSUdCVVMJCTgKICNkZWZpbmUgVElGX01FTURJRQkJOQorI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTEwCS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQogCiAvKiBXb3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuLiAgKi8KICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCShfVElGX05PVElGWV9SRVNVTUUJXApAQCAtOTcsNyArOTksNyBAQAogCQkJCSAxIDw8IFRJRl9VQUNfU0lHQlVTKQogCiAjZGVmaW5lIFNFVF9VTkFMSUdOX0NUTCh0YXNrLHZhbHVlKQkoewkJCQkgICAgIFwKLQkodGFzayktPnRocmVhZF9pbmZvLT5mbGFncyA9ICgoKHRhc2spLT50aHJlYWRfaW5mby0+ZmxhZ3MgJgkgICAgIFwKKwl0YXNrX3RocmVhZF9pbmZvKHRhc2spLT5mbGFncyA9ICgodGFza190aHJlYWRfaW5mbyh0YXNrKS0+ZmxhZ3MgJiAgICBcCiAJCX5BTFBIQV9VQUNfTUFTSykJCQkJCSAgICAgXAogCQl8ICgoKHZhbHVlKSA8PCBBTFBIQV9VQUNfU0hJRlQpICAgICAgICYgKDE8PFRJRl9VQUNfTk9QUklOVCkpXAogCQl8ICgoKHZhbHVlKSA8PCAoQUxQSEFfVUFDX1NISUZUICsgMSkpICYgKDE8PFRJRl9VQUNfU0lHQlVTKSkgXApAQCAtMTA1LDExICsxMDcsMTEgQEAKIAkwOyB9KQogCiAjZGVmaW5lIEdFVF9VTkFMSUdOX0NUTCh0YXNrLHZhbHVlKQkoewkJCQlcCi0JcHV0X3VzZXIoKCh0YXNrKS0+dGhyZWFkX2luZm8tPmZsYWdzICYgKDEgPDwgVElGX1VBQ19OT1BSSU5UKSkJXAorCXB1dF91c2VyKCh0YXNrX3RocmVhZF9pbmZvKHRhc2spLT5mbGFncyAmICgxIDw8IFRJRl9VQUNfTk9QUklOVCkpXAogCQkgID4+IEFMUEhBX1VBQ19TSElGVAkJCQkJXAotCQkgfCAoKHRhc2spLT50aHJlYWRfaW5mby0+ZmxhZ3MgJiAoMSA8PCBUSUZfVUFDX1NJR0JVUykpCVwKKwkJIHwgKHRhc2tfdGhyZWFkX2luZm8odGFzayktPmZsYWdzICYgKDEgPDwgVElGX1VBQ19TSUdCVVMpKVwKIAkJID4+IChBTFBIQV9VQUNfU0hJRlQgKyAxKQkJCQlcCi0JCSB8ICgodGFzayktPnRocmVhZF9pbmZvLT5mbGFncyAmICgxIDw8IFRJRl9VQUNfTk9GSVgpKQlcCisJCSB8ICh0YXNrX3RocmVhZF9pbmZvKHRhc2spLT5mbGFncyAmICgxIDw8IFRJRl9VQUNfTk9GSVgpKVwKIAkJID4+IChBTFBIQV9VQUNfU0hJRlQgLSAxKSwJCQkJXAogCQkgKGludCBfX3VzZXIgKikodmFsdWUpKTsJCQkJXAogCX0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3VuaXN0ZC5oCmluZGV4IGU1OGE0MjcuLjI5YmYyZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3VuaXN0ZC5oCkBAIC0yMzMsNiArMjMzLDIwIEBACiAjZGVmaW5lIF9fTlJfb3NmX21lbWNudGwJMjYwCS8qIG5vdCBpbXBsZW1lbnRlZCAqLwogI2RlZmluZSBfX05SX29zZl9mZGF0YXN5bmMJMjYxCS8qIG5vdCBpbXBsZW1lbnRlZCAqLwogCisvKgorICogSWdub3JlIGxlZ2FjeSBzeXNjYWxscyB0aGF0IHdlIGRvbid0IHVzZS4KKyAqLworI2RlZmluZSBfX0lHTk9SRV9hbGFybQorI2RlZmluZSBfX0lHTk9SRV9jcmVhdAorI2RlZmluZSBfX0lHTk9SRV9nZXRlZ2lkCisjZGVmaW5lIF9fSUdOT1JFX2dldGV1aWQKKyNkZWZpbmUgX19JR05PUkVfZ2V0Z2lkCisjZGVmaW5lIF9fSUdOT1JFX2dldHBpZAorI2RlZmluZSBfX0lHTk9SRV9nZXRwcGlkCisjZGVmaW5lIF9fSUdOT1JFX2dldHVpZAorI2RlZmluZSBfX0lHTk9SRV9wYXVzZQorI2RlZmluZSBfX0lHTk9SRV90aW1lCisjZGVmaW5lIF9fSUdOT1JFX3V0aW1lCiAKIC8qCiAgKiBMaW51eC1zcGVjaWZpYyBzeXN0ZW0gY2FsbHMgYmVnaW4gYXQgMzAwCkBAIC0zODcsMTAgKzQwMSw0MiBAQAogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdAkJNDQ0CiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJCTQ0NQogI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2gJCTQ0NgorI2RlZmluZSBfX05SX2ZkYXRhc3luYwkJCTQ0NworI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCQk0NDgKKyNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzCQk0NDkKKyNkZWZpbmUgX19OUl9vcGVuYXQJCQk0NTAKKyNkZWZpbmUgX19OUl9ta2RpcmF0CQkJNDUxCisjZGVmaW5lIF9fTlJfbWtub2RhdAkJCTQ1MgorI2RlZmluZSBfX05SX2ZjaG93bmF0CQkJNDUzCisjZGVmaW5lIF9fTlJfZnV0aW1lc2F0CQkJNDU0CisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkJNDU1CisjZGVmaW5lIF9fTlJfdW5saW5rYXQJCQk0NTYKKyNkZWZpbmUgX19OUl9yZW5hbWVhdAkJCTQ1NworI2RlZmluZSBfX05SX2xpbmthdAkJCTQ1OAorI2RlZmluZSBfX05SX3N5bWxpbmthdAkJCTQ1OQorI2RlZmluZSBfX05SX3JlYWRsaW5rYXQJCQk0NjAKKyNkZWZpbmUgX19OUl9mY2htb2RhdAkJCTQ2MQorI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJCTQ2MgorI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkJNDYzCisjZGVmaW5lIF9fTlJfcHBvbGwJCQk0NjQKKyNkZWZpbmUgX19OUl91bnNoYXJlCQkJNDY1CisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CQk0NjYKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJCTQ2NworI2RlZmluZSBfX05SX3NwbGljZQkJCTQ2OAorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkJNDY5CisjZGVmaW5lIF9fTlJfdGVlCQkJNDcwCisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCQk0NzEKKyNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkJNDcyCisjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkJNDczCisjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJCTQ3NAorI2RlZmluZSBfX05SX3V0aW1lbnNhdAkJCTQ3NQorI2RlZmluZSBfX05SX3NpZ25hbGZkCQkJNDc2CisjZGVmaW5lIF9fTlJfdGltZXJmZAkJCTQ3NworI2RlZmluZSBfX05SX2V2ZW50ZmQJCQk0NzgKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBOUl9TWVNDQUxMUwkJCTQ0NworI2RlZmluZSBOUl9TWVNDQUxMUwkJCTQ3OQogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS92Z2EuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3ZnYS5oCmluZGV4IGVkMDZmNTkuLmU4ZGYxZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3ZnYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3ZnYS5oCkBAIC00Niw2ICs0NiwzNyBAQAogI2RlZmluZSB2Z2FfcmVhZGIoYSkJcmVhZGIoKHU4IF9faW9tZW0gKikoYSkpCiAjZGVmaW5lIHZnYV93cml0ZWIodixhKQl3cml0ZWIodiwgKHU4IF9faW9tZW0gKikoYSkpCiAKKyNpZmRlZiBDT05GSUdfVkdBX0hPU0UKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworZXh0ZXJuIHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGNpX3ZnYV9ob3NlOworCisjIGRlZmluZSBfX2lzX3BvcnRfdmdhKGEpICAgICAgIFwKKwkoKChhKSA+PSAweDNiMCkgJiYgKChhKSA8IDB4M2UwKSAmJiBcCisJICgoYSkgIT0gMHgzYjMpICYmICgoYSkgIT0gMHgzZDMpKQorCisjIGRlZmluZSBfX2lzX21lbV92Z2EoYSkgXAorCSgoKGEpID49IDB4YTAwMDApICYmICgoYSkgPD0gMHhjMDAwMCkpCisKKyMgZGVmaW5lIEZJWFVQX0lPQUREUl9WR0EoYSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChwY2lfdmdhX2hvc2UgJiYgX19pc19wb3J0X3ZnYShhKSkgICAgIFwKKwkJKGEpICs9IHBjaV92Z2FfaG9zZS0+aW9fc3BhY2UtPnN0YXJ0OwkgIFwKKyB9IHdoaWxlKDApCisKKyMgZGVmaW5lIEZJWFVQX01FTUFERFJfVkdBKGEpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAocGNpX3ZnYV9ob3NlICYmIF9faXNfbWVtX3ZnYShhKSkgICAgIFwKKwkJKGEpICs9IHBjaV92Z2FfaG9zZS0+bWVtX3NwYWNlLT5zdGFydDsgXAorIH0gd2hpbGUoMCkKKworI2Vsc2UgLyogQ09ORklHX1ZHQV9IT1NFICovCisjIGRlZmluZSBwY2lfdmdhX2hvc2UgMAorIyBkZWZpbmUgX19pc19wb3J0X3ZnYShhKSAwCisjIGRlZmluZSBfX2lzX21lbV92Z2EoYSkgMAorIyBkZWZpbmUgRklYVVBfSU9BRERSX1ZHQShhKQorIyBkZWZpbmUgRklYVVBfTUVNQUREUl9WR0EoYSkKKyNlbmRpZiAvKiBDT05GSUdfVkdBX0hPU0UgKi8KKwogI2RlZmluZSBWR0FfTUFQX01FTSh4LHMpCSgodW5zaWduZWQgbG9uZykgaW9yZW1hcCh4LCBzKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfYWRjLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfYWRjLmgKaW5kZXggMWVkNjZlYS4uNmQ3MWVhMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MV9hZGMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFfYWRjLmgKQEAgLTU1LDcgKzU1LDcgQEAKICNkZWZpbmUgQVQ5MV9BRENfSURSCQkweDI4CQkvKiBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLwogI2RlZmluZSBBVDkxX0FEQ19JTVIJCTB4MkMJCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCiAKLSNkZWZpbmUgQVQ5MV9BRENfQ0hSKG4pCQkoMHgzMCArICgobikgKiA0KQkvKiBDaGFubmVsIERhdGEgUmVnaXN0ZXIgTiAqLworI2RlZmluZSBBVDkxX0FEQ19DSFIobikJCSgweDMwICsgKChuKSAqIDQpKQkvKiBDaGFubmVsIERhdGEgUmVnaXN0ZXIgTiAqLwogI2RlZmluZQkJQVQ5MV9BRENfREFUQQkJKDB4M2ZmKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXJtOTIwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxcm05MjAwLmgKaW5kZXggYTEyYWM4YS4uODAyODkxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxcm05MjAwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxcm05MjAwLmgKQEAgLTEwNywxODUgKzEwNyw0IEBACiAjZGVmaW5lIEFUOTFSTTkyMDBfVUhQX0JBU0UJMHgwMDMwMDAwMAkvKiBVU0IgSG9zdCBjb250cm9sbGVyICovCiAKIAotI2lmIDAKLS8qCi0gKiBQSU8gcGluIGRlZmluaXRpb25zIChwZXJpcGhlcmFsIEEvQiBtdWx0aXBsZXhpbmcpLgotICovCi0jZGVmaW5lIEFUOTFfUEEwX01JU08JCSgxIDw8ICAwKQkvKiBBOiBTUEkgTWFzdGVyLUluIFNsYXZlLU91dCAqLwotI2RlZmluZSBBVDkxX1BBMF9QQ0szCQkoMSA8PCAgMCkJLyogQjogUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMyAqLwotI2RlZmluZSBBVDkxX1BBMV9NT1NJCQkoMSA8PCAgMSkJLyogQTogU1BJIE1hc3Rlci1PdXQgU2xhdmUtSW4gKi8KLSNkZWZpbmUgQVQ5MV9QQTFfUENLMAkJKDEgPDwgIDEpCS8qIEI6IFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDAgKi8KLSNkZWZpbmUgQVQ5MV9QQTJfU1BDSwkJKDEgPDwgIDIpCS8qIEE6IFNQSSBTZXJpYWwgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MV9QQTJfSVJRNAkJKDEgPDwgIDIpCS8qIEI6IEV4dGVybmFsIEludGVycnVwdCA0ICovCi0jZGVmaW5lIEFUOTFfUEEzX05QQ1MwCQkoMSA8PCAgMykJLyogQTogU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMCAqLwotI2RlZmluZSBBVDkxX1BBM19JUlE1CQkoMSA8PCAgMykJLyogQjogRXh0ZXJuYWwgSW50ZXJydXB0IDUgKi8KLSNkZWZpbmUgQVQ5MV9QQTRfTlBDUzEJCSgxIDw8ICA0KQkvKiBBOiBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxICovCi0jZGVmaW5lIEFUOTFfUEE0X1BDSzEJCSgxIDw8ICA0KQkvKiBCOiBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxICovCi0jZGVmaW5lIEFUOTFfUEE1X05QQ1MyCQkoMSA8PCAgNSkJLyogQTogU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMiAqLwotI2RlZmluZSBBVDkxX1BBNV9UWEQzCQkoMSA8PCAgNSkJLyogQjogVVNBUlQgVHJhbnNtaXQgRGF0YSAzICovCi0jZGVmaW5lIEFUOTFfUEE2X05QQ1MzCQkoMSA8PCAgNikJLyogQTogU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLwotI2RlZmluZSBBVDkxX1BBNl9SWEQzCQkoMSA8PCAgNikJLyogQjogVVNBUlQgUmVjZWl2ZSBEYXRhIDMgKi8KLSNkZWZpbmUgQVQ5MV9QQTdfRVRYQ0tfRVJFRkNLCSgxIDw8ICA3KQkvKiBBOiBFdGhlcm5ldCBSZWZlcmVuY2UgQ2xvY2sgLyBUcmFuc21pdCBDbG9jayAqLwotI2RlZmluZSBBVDkxX1BBN19QQ0syCQkoMSA8PCAgNykJLyogQjogUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMiAqLwotI2RlZmluZSBBVDkxX1BBOF9FVFhFTgkJKDEgPDwgIDgpCS8qIEE6IEV0aGVybmV0IFRyYW5zbWl0IEVuYWJsZSAqLwotI2RlZmluZSBBVDkxX1BBOF9NQ0NEQgkJKDEgPDwgIDgpCS8qIEI6IE1NQyBNdWx0aW1lZGlhIENhcmQgQiBDb21tYW5kICovCi0jZGVmaW5lIEFUOTFfUEE5X0VUWDAJCSgxIDw8ICA5KQkvKiBBOiBFdGhlcm5ldCBUcmFuc21pdCBEYXRhIDAgKi8KLSNkZWZpbmUgQVQ5MV9QQTlfTUNEQjAJCSgxIDw8ICA5KQkvKiBCOiBNTUMgTXVsdGltZWRpYSBDYXJkIEIgRGF0YSAwICovCi0jZGVmaW5lIEFUOTFfUEExMF9FVFgxCQkoMSA8PCAxMCkJLyogQTogRXRoZXJuZXQgVHJhbnNtaXQgRGF0YSAxICovCi0jZGVmaW5lIEFUOTFfUEExMF9NQ0RCMQkJKDEgPDwgMTApCS8qIEI6IE1NQyBNdWx0aW1lZGlhIENhcmQgQiBEYXRhIDEgKi8KLSNkZWZpbmUgQVQ5MV9QQTExX0VDUlNfRUNSU0RWCSgxIDw8IDExKQkvKiBBOiBFdGhlcm5ldCBDYXJyaWVyIFNlbnNlIC8gRGF0YSBWYWxpZCAqLwotI2RlZmluZSBBVDkxX1BBMTFfTUNEQjIJCSgxIDw8IDExKQkvKiBCOiBNTUMgTXVsdGltZWRpYSBDYXJkIEIgRGF0YSAyICovCi0jZGVmaW5lIEFUOTFfUEExMl9FUlgwCQkoMSA8PCAxMikJLyogQTogRXRoZXJuZXQgUmVjZWl2ZSBEYXRhIDAgKi8KLSNkZWZpbmUgQVQ5MV9QQTEyX01DREIzCQkoMSA8PCAxMikJLyogQjogTU1DIE11bHRpbWVkaWEgQ2FyZCBCIERhdGEgMyAqLwotI2RlZmluZSBBVDkxX1BBMTNfRVJYMQkJKDEgPDwgMTMpCS8qIEE6IEV0aGVybmV0IFJlY2VpdmUgRGF0YSAxICovCi0jZGVmaW5lIEFUOTFfUEExM19UQ0xLMAkJKDEgPDwgMTMpCS8qIEI6IFRDIEV4dGVybmFsIENsb2NrIElucHV0IDAgKi8KLSNkZWZpbmUgQVQ5MV9QQTE0X0VSWEVSCQkoMSA8PCAxNCkJLyogQTogRXRoZXJuZXQgUmVjZWl2ZSBFcnJvciAqLwotI2RlZmluZSBBVDkxX1BBMTRfVENMSzEJCSgxIDw8IDE0KQkvKiBCOiBUQyBFeHRlcm5hbCBDbG9jayBJbnB1dCAxICovCi0jZGVmaW5lIEFUOTFfUEExNV9FTURDCQkoMSA8PCAxNSkJLyogQTogRXRoZXJuZXQgTWFuYWdlbWVudCBEYXRhIENsb2NrICovCi0jZGVmaW5lIEFUOTFfUEExNV9UQ0xLMgkJKDEgPDwgMTUpCS8qIEI6IFRDIEV4dGVybmFsIENsb2NrIElucHV0IDIgKi8KLSNkZWZpbmUgQVQ5MV9QQTE2X0VNRElPCQkoMSA8PCAxNikJLyogQTogRXRoZXJuZXQgTWFuYWdlbWVudCBEYXRhIEkvTyAqLwotI2RlZmluZSBBVDkxX1BBMTZfSVJRNgkJKDEgPDwgMTYpCS8qIEI6IEV4dGVybmFsIEludGVycnVwdCA2ICovCi0jZGVmaW5lIEFUOTFfUEExN19UWEQwCQkoMSA8PCAxNykJLyogQTogVVNBUlQgVHJhbnNtaXQgRGF0YSAwICovCi0jZGVmaW5lIEFUOTFfUEExN19USU9BMAkJKDEgPDwgMTcpCS8qIEI6IFRDIEkvTyBMaW5lIEEgMCAqLwotI2RlZmluZSBBVDkxX1BBMThfUlhEMAkJKDEgPDwgMTgpCS8qIEE6IFVTQVJUIFJlY2VpdmUgRGF0YSAwICovCi0jZGVmaW5lIEFUOTFfUEExOF9USU9CMAkJKDEgPDwgMTgpCS8qIEI6IFRDIEkvTyBMaW5lIEIgMCAqLwotI2RlZmluZSBBVDkxX1BBMTlfU0NLMAkJKDEgPDwgMTkpCS8qIEE6IFVTQVJUIFNlcmlhbCBDbG9jayAwICovCi0jZGVmaW5lIEFUOTFfUEExOV9USU9BMQkJKDEgPDwgMTkpCS8qIEI6IFRDIEkvTyBMaW5lIEEgMSAqLwotI2RlZmluZSBBVDkxX1BBMjBfQ1RTMAkJKDEgPDwgMjApCS8qIEE6IFVTQVJUIENsZWFyIFRvIFNlbmQgMCAqLwotI2RlZmluZSBBVDkxX1BBMjBfVElPQjEJCSgxIDw8IDIwKQkvKiBCOiBUQyBJL08gTGluZSBCIDEgKi8KLSNkZWZpbmUgQVQ5MV9QQTIxX1JUUzAJCSgxIDw8IDIxKQkvKiBBOiBVU0FSVCBSZWFkeSBUbyBTZW5kIDAgKi8KLSNkZWZpbmUgQVQ5MV9QQTIxX1RJT0EyCQkoMSA8PCAyMSkJLyogQjogVEMgSS9PIExpbmUgQSAyICovCi0jZGVmaW5lIEFUOTFfUEEyMl9SWEQyCQkoMSA8PCAyMikJLyogQTogVVNBUlQgUmVjZWl2ZSBEYXRhIDIgKi8KLSNkZWZpbmUgQVQ5MV9QQTIyX1RJT0IyCQkoMSA8PCAyMikJLyogQjogVEMgSS9PIExpbmUgQiAyICovCi0jZGVmaW5lIEFUOTFfUEEyM19UWEQyCQkoMSA8PCAyMykJLyogQTogVVNBUlQgVHJhbnNtaXQgRGF0YSAyICovCi0jZGVmaW5lIEFUOTFfUEEyM19JUlEzCQkoMSA8PCAyMykJLyogQjogRXh0ZXJuYWwgSW50ZXJydXB0IDMgKi8KLSNkZWZpbmUgQVQ5MV9QQTI0X1NDSzIJCSgxIDw8IDI0KQkvKiBBOiBVU0FSVCBTZXJpYWwgQ2xvY2sgMiAqLwotI2RlZmluZSBBVDkxX1BBMjRfUENLMQkJKDEgPDwgMjQpCS8qIEI6IFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDEgKi8KLSNkZWZpbmUgQVQ5MV9QQTI1X1RXRAkJKDEgPDwgMjUpCS8qIEE6IFRXSSBUd28td2lyZSBTZXJpYWwgRGF0YSAqLwotI2RlZmluZSBBVDkxX1BBMjVfSVJRMgkJKDEgPDwgMjUpCS8qIEI6IEV4dGVybmFsIEludGVycnVwdCAyICovCi0jZGVmaW5lIEFUOTFfUEEyNl9UV0NLCQkoMSA8PCAyNikJLyogQTogVFdJIFR3by13aXJlIFNlcmlhbCBDbG9jayAqLwotI2RlZmluZSBBVDkxX1BBMjZfSVJRMQkJKDEgPDwgMjYpCS8qIEI6IEV4dGVybmFsIEludGVycnVwdCAxICovCi0jZGVmaW5lIEFUOTFfUEEyN19NQ0NLCQkoMSA8PCAyNykJLyogQTogTU1DIE11bHRpbWVkaWEgQ2FyZCBDbG9jayAqLwotI2RlZmluZSBBVDkxX1BBMjdfVENMSzMJCSgxIDw8IDI3KQkvKiBCOiBUQyBFeHRlcm5hbCBDbG9jayBJbnB1dCAzICovCi0jZGVmaW5lIEFUOTFfUEEyOF9NQ0NEQQkJKDEgPDwgMjgpCS8qIEE6IE1NQyBNdWx0aW1lZGlhIENhcmQgQSBDb21tYW5kICovCi0jZGVmaW5lIEFUOTFfUEEyOF9UQ0xLNAkJKDEgPDwgMjgpCS8qIEI6IFRDIEV4dGVybmFsIENsb2NrIElucHV0IDQgKi8KLSNkZWZpbmUgQVQ5MV9QQTI5X01DREEwCQkoMSA8PCAyOSkJLyogQTogTU1DIE11bHRpbWVkaWEgQ2FyZCBBIERhdGEgMCAqLwotI2RlZmluZSBBVDkxX1BBMjlfVENMSzUJCSgxIDw8IDI5KQkvKiBCOiBUQyBFeHRlcm5hbCBDbG9jayBJbnB1dCA1ICovCi0jZGVmaW5lIEFUOTFfUEEzMF9EUlhECQkoMSA8PCAzMCkJLyogQTogREJHVSBSZWNlaXZlIERhdGEgKi8KLSNkZWZpbmUgQVQ5MV9QQTMwX0NUUzIJCSgxIDw8IDMwKQkvKiBCOiBVU0FSVCBDbGVhciBUbyBTZW5kIDIgKi8KLSNkZWZpbmUgQVQ5MV9QQTMxX0RUWEQJCSgxIDw8IDMxKQkvKiBBOiBEQkdVIFRyYW5zbWl0IERhdGEgKi8KLSNkZWZpbmUgQVQ5MV9QQTMxX1JUUzIJCSgxIDw8IDMxKQkvKiBCOiBVU0FSVCBSZWFkeSBUbyBTZW5kIDIgKi8KLQotI2RlZmluZSBBVDkxX1BCMF9URjAJCSgxIDw8ICAwKQkvKiBBOiBTU0MgVHJhbnNtaXQgRnJhbWUgU3luYyAwICovCi0jZGVmaW5lIEFUOTFfUEIwX1JUUzMJCSgxIDw8ICAwKQkvKiBCOiBVU0FSVCBSZWFkeSBUbyBTZW5kIDMgKi8KLSNkZWZpbmUgQVQ5MV9QQjFfVEswCQkoMSA8PCAgMSkJLyogQTogU1NDIFRyYW5zbWl0IENsb2NrIDAgKi8KLSNkZWZpbmUgQVQ5MV9QQjFfQ1RTMwkJKDEgPDwgIDEpCS8qIEI6IFVTQVJUIENsZWFyIFRvIFNlbmQgMyAqLwotI2RlZmluZSBBVDkxX1BCMl9URDAJCSgxIDw8ICAyKQkvKiBBOiBTU0MgVHJhbnNtaXQgRGF0YSAwICovCi0jZGVmaW5lIEFUOTFfUEIyX1NDSzMJCSgxIDw8ICAyKQkvKiBCOiBVU0FSVCBTZXJpYWwgQ2xvY2sgMyAqLwotI2RlZmluZSBBVDkxX1BCM19SRDAJCSgxIDw8ICAzKQkvKiBBOiBTU0MgUmVjZWl2ZSBEYXRhIDAgKi8KLSNkZWZpbmUgQVQ5MV9QQjNfTUNEQTEJCSgxIDw8ICAzKQkvKiBCOiBNTUMgTXVsdGltZWRpYSBDYXJkIEEgRGF0YSAxICovCi0jZGVmaW5lIEFUOTFfUEI0X1JLMAkJKDEgPDwgIDQpCS8qIEE6IFNTQyBSZWNlaXZlIENsb2NrIDAgKi8KLSNkZWZpbmUgQVQ5MV9QQjRfTUNEQTIJCSgxIDw8ICA0KQkvKiBCOiBNTUMgTXVsdGltZWRpYSBDYXJkIEEgRGF0YSAyICovCi0jZGVmaW5lIEFUOTFfUEI1X1JGMAkJKDEgPDwgIDUpCS8qIEE6IFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMgMCAqLwotI2RlZmluZSBBVDkxX1BCNV9NQ0RBMwkJKDEgPDwgIDUpCS8qIEI6IE1NQyBNdWx0aW1lZGlhIENhcmQgQSBEYXRhIDMgKi8KLSNkZWZpbmUgQVQ5MV9QQjZfVEYxCQkoMSA8PCAgNikJLyogQTogU1NDIFRyYW5zbWl0IEZyYW1lIFN5bmMgMSAqLwotI2RlZmluZSBBVDkxX1BCNl9USU9BMwkJKDEgPDwgIDYpCS8qIEI6IFRDIEkvTyBMaW5lIEEgMyAqLwotI2RlZmluZSBBVDkxX1BCN19USzEJCSgxIDw8ICA3KQkvKiBBOiBTU0MgVHJhbnNtaXQgQ2xvY2sgMSAqLwotI2RlZmluZSBBVDkxX1BCN19USU9CMwkJKDEgPDwgIDcpCS8qIEI6IFRDIEkvTyBMaW5lIEIgMyAqLwotI2RlZmluZSBBVDkxX1BCOF9URDEJCSgxIDw8ICA4KQkvKiBBOiBTU0MgVHJhbnNtaXQgRGF0YSAxICovCi0jZGVmaW5lIEFUOTFfUEI4X1RJT0E0CQkoMSA8PCAgOCkJLyogQjogVEMgSS9PIExpbmUgQSA0ICovCi0jZGVmaW5lIEFUOTFfUEI5X1JEMQkJKDEgPDwgIDkpCS8qIEE6IFNTQyBSZWNlaXZlIERhdGEgMSAqLwotI2RlZmluZSBBVDkxX1BCOV9USU9CNAkJKDEgPDwgIDkpCS8qIEI6IFRDIEkvTyBMaW5lIEIgNCAqLwotI2RlZmluZSBBVDkxX1BCMTBfUksxCQkoMSA8PCAxMCkJLyogQTogU1NDIFJlY2VpdmUgQ2xvY2sgMSAqLwotI2RlZmluZSBBVDkxX1BCMTBfVElPQTUJCSgxIDw8IDEwKQkvKiBCOiBUQyBJL08gTGluZSBBIDUgKi8KLSNkZWZpbmUgQVQ5MV9QQjExX1JGMQkJKDEgPDwgMTEpCS8qIEE6IFNTQyBSZWNlaXZlIEZyYW1lIFN5bmMgMSAqLwotI2RlZmluZSBBVDkxX1BCMTFfVElPQjUJCSgxIDw8IDExKQkvKiBCOiBUQyBJL08gTGluZSBCIDUgKi8KLSNkZWZpbmUgQVQ5MV9QQjEyX1RGMgkJKDEgPDwgMTIpCS8qIEE6IFNTQyBUcmFuc21pdCBGcmFtZSBTeW5jIDIgKi8KLSNkZWZpbmUgQVQ5MV9QQjEyX0VUWDIJCSgxIDw8IDEyKQkvKiBCOiBFdGhlcm5ldCBUcmFuc21pdCBEYXRhIDIgKi8KLSNkZWZpbmUgQVQ5MV9QQjEzX1RLMgkJKDEgPDwgMTMpCS8qIEE6IFNTQyBUcmFuc21pdCBDbG9jayAzICovCi0jZGVmaW5lIEFUOTFfUEIxM19FVFgzCQkoMSA8PCAxMykJLyogQjogRXRoZXJuZXQgVHJhbnNtaXQgRGF0YSAzICovCi0jZGVmaW5lIEFUOTFfUEIxNF9URDIJCSgxIDw8IDE0KQkvKiBBOiBTU0MgVHJhbnNtaXQgRGF0YSAyICovCi0jZGVmaW5lIEFUOTFfUEIxNF9FVFhFUgkJKDEgPDwgMTQpCS8qIEI6IEV0aGVybmV0IFRyYW5zbWl0IENvZGluZyBFcnJvciAqLwotI2RlZmluZSBBVDkxX1BCMTVfUkQyCQkoMSA8PCAxNSkJLyogQTogU1NDIFJlY2VpdmUgRGF0YSAyICovCi0jZGVmaW5lIEFUOTFfUEIxNV9FUlgyCQkoMSA8PCAxNSkJLyogQjogRXRoZXJuZXQgUmVjZWl2ZSBEYXRhIDIgKi8KLSNkZWZpbmUgQVQ5MV9QQjE2X1JLMgkJKDEgPDwgMTYpCS8qIEE6IFNTQyBSZWNlaXZlIENsb2NrIDIgKi8KLSNkZWZpbmUgQVQ5MV9QQjE2X0VSWDMJCSgxIDw8IDE2KQkvKiBCOiBFdGhlcm5ldCBSZWNlaXZlIERhdGEgMyAqLwotI2RlZmluZSBBVDkxX1BCMTdfUkYyCQkoMSA8PCAxNykJLyogQTogU1NDIFJlY2VpdmUgRnJhbWUgU3luYyAyICovCi0jZGVmaW5lIEFUOTFfUEIxN19FUlhEVgkJKDEgPDwgMTcpCS8qIEI6IEV0aGVybmV0IFJlY2VpdmUgRGF0YSBWYWxpZCAqLwotI2RlZmluZSBBVDkxX1BCMThfUkkxCQkoMSA8PCAxOCkJLyogQTogVVNBUlQgUmluZyBJbmRpY2F0b3IgMSAqLwotI2RlZmluZSBBVDkxX1BCMThfRUNPTAkJKDEgPDwgMTgpCS8qIEI6IEV0aGVybmV0IENvbGxpc2lvbiBEZXRlY3RlZCAqLwotI2RlZmluZSBBVDkxX1BCMTlfRFRSMQkJKDEgPDwgMTkpCS8qIEE6IFVTQVJUIERhdGEgVGVybWluYWwgUmVhZHkgMSAqLwotI2RlZmluZSBBVDkxX1BCMTlfRVJYQ0sJCSgxIDw8IDE5KQkvKiBCOiBFdGhlcm5ldCBSZWNlaXZlIENsb2NrICovCi0jZGVmaW5lIEFUOTFfUEIyMF9UWEQxCQkoMSA8PCAyMCkJLyogQTogVVNBUlQgVHJhbnNtaXQgRGF0YSAxICovCi0jZGVmaW5lIEFUOTFfUEIyMV9SWEQxCQkoMSA8PCAyMSkJLyogQTogVVNBUlQgUmVjZWl2ZSBEYXRhIDEgKi8KLSNkZWZpbmUgQVQ5MV9QQjIyX1NDSzEJCSgxIDw8IDIyKQkvKiBBOiBVU0FSVCBTZXJpYWwgQ2xvY2sgMSAqLwotI2RlZmluZSBBVDkxX1BCMjNfRENEMQkJKDEgPDwgMjMpCS8qIEE6IFVTQVJUIERhdGEgQ2FycmllciBEZXRlY3QgMSAqLwotI2RlZmluZSBBVDkxX1BCMjRfQ1RTMQkJKDEgPDwgMjQpCS8qIEE6IFVTQVJUIENsZWFyIFRvIFNlbmQgMSAqLwotI2RlZmluZSBBVDkxX1BCMjVfRFNSMQkJKDEgPDwgMjUpCS8qIEE6IFVTQVJUIERhdGEgU2V0IFJlYWR5IDEgKi8KLSNkZWZpbmUgQVQ5MV9QQjI1X0VGMTAwCQkoMSA8PCAyNSkJLyogQjogRXRoZXJuZXQgRm9yY2UgMTAwIE1iaXQgKi8KLSNkZWZpbmUgQVQ5MV9QQjI2X1JUUzEJCSgxIDw8IDI2KQkvKiBBOiBVU0FSVCBSZWFkeSBUbyBTZW5kIDEgKi8KLSNkZWZpbmUgQVQ5MV9QQjI3X1BDSzAJCSgxIDw8IDI3KQkvKiBCOiBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAwICovCi0jZGVmaW5lIEFUOTFfUEIyOF9GSVEJCSgxIDw8IDI4KQkvKiBBOiBGYXN0IEludGVycnVwdCAqLwotI2RlZmluZSBBVDkxX1BCMjlfSVJRMAkJKDEgPDwgMjkpCS8qIEE6IEV4dGVybmFsIEludGVycnVwdCAwICovCi0KLSNkZWZpbmUgQVQ5MV9QQzBfQkZDSwkJKDEgPDwgIDApCS8qIEE6IEJ1cnN0IEZsYXNoIENsb2NrICovCi0jZGVmaW5lIEFUOTFfUEMxX0JGUkRZX1NNT0UJKDEgPDwgIDEpCS8qIEE6IEJ1cnN0IEZsYXNoIFJlYWR5IC8gU21hcnRNZWRpYSBPdXRwdXQgRW5hYmxlICovCi0jZGVmaW5lIEFUOTFfUEMyX0JGQVZECQkoMSA8PCAgMikJLyogQTogQnVyc3QgRmxhc2ggQWRkcmVzcyBWYWxpZCAqLwotI2RlZmluZSBBVDkxX1BDM19CRkJBQV9TTVdFCSgxIDw8ICAzKQkvKiBBOiBCdXJzdCBGbGFzaCBBZGRyZXNzIEFkdmFuY2UgLyBTbWFydE1lZGlhIFdyaXRlIEVuYWJsZSAqLwotI2RlZmluZSBBVDkxX1BDNF9CRk9FCQkoMSA8PCAgNCkJLyogQTogQnVyc3QgRmxhc2ggT3V0cHV0IEVuYWJsZSAqLwotI2RlZmluZSBBVDkxX1BDNV9CRldFCQkoMSA8PCAgNSkJLyogQTogQnVyc3QgRmxhc2ggV3JpdGUgRW5hYmxlICovCi0jZGVmaW5lIEFUOTFfUEM2X05XQUlUCQkoMSA8PCAgNikJLyogQTogU01DIFdhaXQgU2lnbmFsICovCi0jZGVmaW5lIEFUOTFfUEM3X0EyMwkJKDEgPDwgIDcpCS8qIEE6IEFkZHJlc3MgQnVzIDIzICovCi0jZGVmaW5lIEFUOTFfUEM4X0EyNAkJKDEgPDwgIDgpCS8qIEE6IEFkZHJlc3MgQnVzIDI0ICovCi0jZGVmaW5lIEFUOTFfUEM5X0EyNV9DRlJOVwkoMSA8PCAgOSkJLyogQTogQWRkcmVzcyBCdXMgMjUgLyBDb21wYWN0IEZsYXNoIFJlYWQgTm90IFdyaXRlICovCi0jZGVmaW5lIEFUOTFfUEMxMF9OQ1M0X0NGQ1MJKDEgPDwgMTApCS8qIEE6IFNNQyBDaGlwIFNlbGVjdCA0IC8gQ29tcGFjdCBGbGFzaCBDaGlwIFNlbGVjdCAqLwotI2RlZmluZSBBVDkxX1BDMTFfTkNTNV9DRkNFMQkoMSA8PCAxMSkJLyogQTogU01DIENoaXAgU2VsZWN0IDUgLyBDb21wYWN0IEZsYXNoIENoaXAgRW5hYmxlIDEgKi8KLSNkZWZpbmUgQVQ5MV9QQzEyX05DUzZfQ0ZDRTIJKDEgPDwgMTIpCS8qIEE6IFNNQyBDaGlwIFNlbGVjdCA2IC8gQ29tcGFjdCBGbGFzaCBDaGlwIEVuYWJsZSAyICovCi0jZGVmaW5lIEFUOTFfUEMxM19OQ1M3CQkoMSA8PCAxMykJLyogQTogQ2hpcCBTZWxlY3QgNyAqLwotCi0jZGVmaW5lIEFUOTFfUEQwX0VUWDAJCSgxIDw8ICAwKQkvKiBBOiBFdGhlcm5ldCBUcmFuc21pdCBEYXRhIDAgKi8KLSNkZWZpbmUgQVQ5MV9QRDFfRVRYMQkJKDEgPDwgIDEpCS8qIEE6IEV0aGVybmV0IFRyYW5zbWl0IERhdGEgMSAqLwotI2RlZmluZSBBVDkxX1BEMl9FVFgyCQkoMSA8PCAgMikJLyogQTogRXRoZXJuZXQgVHJhbnNtaXQgRGF0YSAyICovCi0jZGVmaW5lIEFUOTFfUEQzX0VUWDMJCSgxIDw8ICAzKQkvKiBBOiBFdGhlcm5ldCBUcmFuc21pdCBEYXRhIDMgKi8KLSNkZWZpbmUgQVQ5MV9QRDRfRVRYRU4JCSgxIDw8ICA0KQkvKiBBOiBFdGhlcm5ldCBUcmFuc21pdCBFbmFibGUgKi8KLSNkZWZpbmUgQVQ5MV9QRDVfRVRYRVIJCSgxIDw8ICA1KQkvKiBBOiBFdGhlcm5ldCBUcmFuc21pdCBDb2RpbmcgRXJyb3IgKi8KLSNkZWZpbmUgQVQ5MV9QRDZfRFRYRAkJKDEgPDwgIDYpCS8qIEE6IERCR1UgVHJhbnNtaXQgRGF0YSAqLwotI2RlZmluZSBBVDkxX1BEN19QQ0swCQkoMSA8PCAgNykJLyogQTogUE1DIFByb2dyYW1tYWJsZSBDbG9jayBPdXRwdXQgMCAqLwotI2RlZmluZSBBVDkxX1BEN19UU1lOQwkJKDEgPDwgIDcpCS8qIEI6IEVUTSBUcmFjZSBTeW5jaHJvbml6YXRpb24gU2lnbmFsICovCi0jZGVmaW5lIEFUOTFfUEQ4X1BDSzEJCSgxIDw8ICA4KQkvKiBBOiBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAxICovCi0jZGVmaW5lIEFUOTFfUEQ4X1RDTEsJCSgxIDw8ICA4KQkvKiBCOiBFVE0gVHJhY2UgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MV9QRDlfUENLMgkJKDEgPDwgIDkpCS8qIEE6IFBNQyBQcm9ncmFtbWFibGUgQ2xvY2sgT3V0cHV0IDIgKi8KLSNkZWZpbmUgQVQ5MV9QRDlfVFBTMAkJKDEgPDwgIDkpCS8qIEI6IEVUTSBUcmFjZSBBUk0gUGlwZWxpbmUgU3RhdHVzIDAgKi8KLSNkZWZpbmUgQVQ5MV9QRDEwX1BDSzMJCSgxIDw8IDEwKQkvKiBBOiBQTUMgUHJvZ3JhbW1hYmxlIENsb2NrIE91dHB1dCAzICovCi0jZGVmaW5lIEFUOTFfUEQxMF9UUFMxCQkoMSA8PCAxMCkJLyogQjogRVRNIFRyYWNlIEFSTSBQaXBlbGluZSBTdGF0dXMgMSAqLwotI2RlZmluZSBBVDkxX1BEMTFfVFBTMgkJKDEgPDwgMTEpCS8qIEI6IEVUTSBUcmFjZSBBUk0gUGlwZWxpbmUgU3RhdHVzIDIgKi8KLSNkZWZpbmUgQVQ5MV9QRDEyX1RQSzAJCSgxIDw8IDEyKQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgMCAqLwotI2RlZmluZSBBVDkxX1BEMTNfVFBLMQkJKDEgPDwgMTMpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCAxICovCi0jZGVmaW5lIEFUOTFfUEQxNF9UUEsyCQkoMSA8PCAxNCkJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDIgKi8KLSNkZWZpbmUgQVQ5MV9QRDE1X1REMAkJKDEgPDwgMTUpCS8qIEE6IFNTQyBUcmFuc21pdCBEYXRhIDAgKi8KLSNkZWZpbmUgQVQ5MV9QRDE1X1RQSzMJCSgxIDw8IDE1KQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgMyAqLwotI2RlZmluZSBBVDkxX1BEMTZfVEQxCQkoMSA8PCAxNikJLyogQTogU1NDIFRyYW5zbWl0IERhdGEgMSAqLwotI2RlZmluZSBBVDkxX1BEMTZfVFBLNAkJKDEgPDwgMTYpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCA0ICovCi0jZGVmaW5lIEFUOTFfUEQxN19URDIJCSgxIDw8IDE3KQkvKiBBOiBTU0MgVHJhbnNtaXQgRGF0YSAyICovCi0jZGVmaW5lIEFUOTFfUEQxN19UUEs1CQkoMSA8PCAxNykJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDUgKi8KLSNkZWZpbmUgQVQ5MV9QRDE4X05QQ1MxCQkoMSA8PCAxOCkJLyogQTogU1BJIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLwotI2RlZmluZSBBVDkxX1BEMThfVFBLNgkJKDEgPDwgMTgpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCA2ICovCi0jZGVmaW5lIEFUOTFfUEQxOV9OUENTMgkJKDEgPDwgMTkpCS8qIEE6IFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8KLSNkZWZpbmUgQVQ5MV9QRDE5X1RQSzcJCSgxIDw8IDE5KQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgNyAqLwotI2RlZmluZSBBVDkxX1BEMjBfTlBDUzMJCSgxIDw8IDIwKQkvKiBBOiBTUEkgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovCi0jZGVmaW5lIEFUOTFfUEQyMF9UUEs4CQkoMSA8PCAyMCkJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDggKi8KLSNkZWZpbmUgQVQ5MV9QRDIxX1JUUzAJCSgxIDw8IDIxKQkvKiBBOiBVU0FSVCBSZWFkeSBUbyBTZW5kIDAgKi8KLSNkZWZpbmUgQVQ5MV9QRDIxX1RQSzkJCSgxIDw8IDIxKQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgOSAqLwotI2RlZmluZSBBVDkxX1BEMjJfUlRTMQkJKDEgPDwgMjIpCS8qIEE6IFVTQVJUIFJlYWR5IFRvIFNlbmQgMSAqLwotI2RlZmluZSBBVDkxX1BEMjJfVFBLMTAJCSgxIDw8IDIyKQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgMTAgKi8KLSNkZWZpbmUgQVQ5MV9QRDIzX1JUUzIJCSgxIDw8IDIzKQkvKiBBOiBVU0FSVCBSZWFkeSBUbyBTZW5kIDIgKi8KLSNkZWZpbmUgQVQ5MV9QRDIzX1RQSzExCQkoMSA8PCAyMykJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDExICovCi0jZGVmaW5lIEFUOTFfUEQyNF9SVFMzCQkoMSA8PCAyNCkJLyogQTogVVNBUlQgUmVhZHkgVG8gU2VuZCAzICovCi0jZGVmaW5lIEFUOTFfUEQyNF9UUEsxMgkJKDEgPDwgMjQpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCAxMiAqLwotI2RlZmluZSBBVDkxX1BEMjVfRFRSMQkJKDEgPDwgMjUpCS8qIEE6IFVTQVJUIERhdGEgVGVybWluYWwgUmVhZHkgMSAqLwotI2RlZmluZSBBVDkxX1BEMjVfVFBLMTMJCSgxIDw8IDI1KQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgMTMgKi8KLSNkZWZpbmUgQVQ5MV9QRDI2X1RQSzE0CQkoMSA8PCAyNikJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDE0ICovCi0jZGVmaW5lIEFUOTFfUEQyN19UUEsxNQkJKDEgPDwgMjcpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCAxNSAqLwotI2VuZGlmCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2MC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2MC5oCmluZGV4IDJjYWRlYmMuLjA0MjdmODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjYwLmgKQEAgLTExNywxMyArMTE3LDQgQEAKICNkZWZpbmUgQVQ5MVNBTTlYRV9TUkFNX0JBU0UJMHgwMDMwMDAwMAkvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLwogCiAKLSNpZiAwCi0vKgotICogUElPIHBpbiBkZWZpbml0aW9ucyAocGVyaXBoZXJhbCBBL0IgbXVsdGlwbGV4aW5nKS4KLSAqLwotCi0vLyBUT0RPOiBBZGQKLQotI2VuZGlmCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2MS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2MS5oCmluZGV4IDAxYjU4ZmYuLjllYjQ1OTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjYxLmgKQEAgLTk4LDE5NSArOTgsNCBAQAogI2RlZmluZSBBVDkxU0FNOTI2MV9MQ0RDX0JBU0UJMHgwMDYwMDAwMAkvKiBMREMgY29udHJvbGxlciAqLwogCiAKLSNpZiAwCi0vKgotICogUElPIHBpbiBkZWZpbml0aW9ucyAocGVyaXBoZXJhbCBBL0IgbXVsdGlwbGV4aW5nKS4KLSAqLwotI2RlZmluZSBBVDkxX1BBMF9TUEkwX01JU08JKDEgPDwgIDApCS8qIEE6IFNQSTAgTWFzdGVyIEluIFNsYXZlICovCi0jZGVmaW5lIEFUOTFfUEEwX01DREEwCQkoMSA8PCAgMCkJLyogQjogTXVsdGltZWRpYSBDYXJkIEEgRGF0YSAwICovCi0jZGVmaW5lIEFUOTFfUEExX1NQSTBfTU9TSQkoMSA8PCAgMSkJLyogQTogU1BJMCBNYXN0ZXIgT3V0IFNsYXZlICovCi0jZGVmaW5lIEFUOTFfUEExX01DQ0RBCQkoMSA8PCAgMSkJLyogQjogTXVsdGltZWRpYSBDYXJkIEEgQ29tbWFuZCAqLwotI2RlZmluZSBBVDkxX1BBMl9TUEkwX1NQQ0sJKDEgPDwgIDIpCS8qIEE6IFNQSTAgU2VyaWFsIENsb2NrICovCi0jZGVmaW5lIEFUOTFfUEEyX01DQ0sJCSgxIDw8ICAyKQkvKiBCOiBNdWx0aW1lZGlhIENhcmQgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MV9QQTNfU1BJMF9OUENTMAkoMSA8PCAgMykJLyogQTogU1BJMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDAgKi8KLSNkZWZpbmUgQVQ5MV9QQTRfU1BJMF9OUENTMQkoMSA8PCAgNCkJLyogQTogU1BJMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8KLSNkZWZpbmUgQVQ5MV9QQTRfTUNEQTEJCSgxIDw8ICA0KQkvKiBCOiBNdWx0aW1lZGlhIENhcmQgQSBEYXRhIDEgKi8KLSNkZWZpbmUgQVQ5MV9QQTVfU1BJMF9OUENTMgkoMSA8PCAgNSkJLyogQTogU1BJMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8KLSNkZWZpbmUgQVQ5MV9QQTVfTUNEQTIJCSgxIDw8ICA1KQkvKiBCOiBNdWx0aW1lZGlhIENhcmQgQSBEYXRhIDIgKi8KLSNkZWZpbmUgQVQ5MV9QQTZfU1BJMF9OUENTMwkoMSA8PCAgNikJLyogQTogU1BJMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8KLSNkZWZpbmUgQVQ5MV9QQTZfTUNEQTMJCSgxIDw8ICA2KQkvKiBCOiBNdWx0aW1lZGlhIENhcmQgQSBEYXRhIDMgKi8KLSNkZWZpbmUgQVQ5MV9QQTdfVFdECQkoMSA8PCAgNykJLyogQTogVFdJIFR3by13aXJlIFNlcmlhbCBEYXRhICovCi0jZGVmaW5lIEFUOTFfUEE3X1BDSzAJCSgxIDw8ICA3KQkvKiBCOiBQTUMgUHJvZ3JhbW1hYmxlIGNsb2NrIE91dHB1dCAwICovCi0jZGVmaW5lIEFUOTFfUEE4X1RXQ0sJCSgxIDw8ICA4KQkvKiBBOiBUV0kgVHdvLXdpcmUgU2VyaWFsIENsb2NrICovCi0jZGVmaW5lIEFUOTFfUEE4X1BDSzEJCSgxIDw8ICA4KQkvKiBCOiBQTUMgUHJvZ3JhbW1hYmxlIGNsb2NrIE91dHB1dCAxICovCi0jZGVmaW5lIEFUOTFfUEE5X0RSWEQJCSgxIDw8ICA5KQkvKiBBOiBEQkdVIERlYnVnIFJlY2VpdmUgRGF0YSAqLwotI2RlZmluZSBBVDkxX1BBOV9QQ0syCQkoMSA8PCAgOSkJLyogQjogUE1DIFByb2dyYW1tYWJsZSBjbG9jayBPdXRwdXQgMiAqLwotI2RlZmluZSBBVDkxX1BBMTBfRFRYRAkJKDEgPDwgMTApCS8qIEE6IERCR1UgRGVidWcgVHJhbnNtaXQgRGF0YSAqLwotI2RlZmluZSBBVDkxX1BBMTBfUENLMwkJKDEgPDwgMTApCS8qIEI6IFBNQyBQcm9ncmFtbWFibGUgY2xvY2sgT3V0cHV0IDMgKi8KLSNkZWZpbmUgQVQ5MV9QQTExX1RTWU5DCQkoMSA8PCAxMSkJLyogQTogVHJhY2UgU3luY2hyb25pemF0aW9uIFNpZ25hbCAqLwotI2RlZmluZSBBVDkxX1BBMTFfU0NLMQkJKDEgPDwgMTEpCS8qIEI6IFVTQVJUMSBTZXJpYWwgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MV9QQTEyX1RDTEsJCSgxIDw8IDEyKQkvKiBBOiBUcmFjZSBDbG9jayAqLwotI2RlZmluZSBBVDkxX1BBMTJfUlRTMQkJKDEgPDwgMTIpCS8qIEI6IFVTQVJUMSBSZWFkeSBUbyBTZW5kICovCi0jZGVmaW5lIEFUOTFfUEExM19UUFMwCQkoMSA8PCAxMykJLyogQTogVHJhY2UgQVJNIFBpcGVsaW5lIFN0YXR1cyAwICovCi0jZGVmaW5lIEFUOTFfUEExM19DVFMxCQkoMSA8PCAxMykJLyogQjogVVNBUlQxIENsZWFyIFRvIFNlbmQgKi8KLSNkZWZpbmUgQVQ5MV9QQTE0X1RQUzEJCSgxIDw8IDE0KQkvKiBBOiBUcmFjZSBBUk0gUGlwZWxpbmUgU3RhdHVzIDEgKi8KLSNkZWZpbmUgQVQ5MV9QQTE0X1NDSzIJCSgxIDw8IDE0KQkvKiBCOiBVU0FSVDIgU2VyaWFsIENsb2NrICovCi0jZGVmaW5lIEFUOTFfUEExNV9UUFMyCQkoMSA8PCAxNSkJLyogQTogVHJhY2UgQVJNIFBpcGVsaW5lIFN0YXR1cyAyICovCi0jZGVmaW5lIEFUOTFfUEExNV9SVFMyCQkoMSA8PCAxNSkJLyogQjogVVNBUlQyIFJlYWR5IFRvIFNlbmQgKi8KLSNkZWZpbmUgQVQ5MV9QQTE2X1RQSzAJCSgxIDw8IDE2KQkvKiBBOiBUcmFjZSBQYWNrZXQgUG9ydCAwICovCi0jZGVmaW5lIEFUOTFfUEExNl9DVFMyCQkoMSA8PCAxNikJLyogQjogVVNBUlQyIENsZWFyIFRvIFNlbmQgKi8KLSNkZWZpbmUgQVQ5MV9QQTE3X1RQSzEJCSgxIDw8IDE3KQkvKiBBOiBUcmFjZSBQYWNrZXQgUG9ydCAxICovCi0jZGVmaW5lIEFUOTFfUEExN19URjEJCSgxIDw8IDE3KQkvKiBCOiBTU0MxIFRyYW5zbWl0IEZyYW1lIFN5bmMgKi8KLSNkZWZpbmUgQVQ5MV9QQTE4X1RQSzIJCSgxIDw8IDE4KQkvKiBBOiBUcmFjZSBQYWNrZXQgUG9ydCAyICovCi0jZGVmaW5lIEFUOTFfUEExOF9USzEJCSgxIDw8IDE4KQkvKiBCOiBTU0MxIFRyYW5zbWl0IENsb2NrICovCi0jZGVmaW5lIEFUOTFfUEExOV9UUEszCQkoMSA8PCAxOSkJLyogQTogVHJhY2UgUGFja2V0IFBvcnQgMyAqLwotI2RlZmluZSBBVDkxX1BBMTlfVEQxCQkoMSA8PCAxOSkJLyogQjogU1NDMSBUcmFuc21pdCBEYXRhICovCi0jZGVmaW5lIEFUOTFfUEEyMF9UUEs0CQkoMSA8PCAyMCkJLyogQTogVHJhY2UgUGFja2V0IFBvcnQgNCAqLwotI2RlZmluZSBBVDkxX1BBMjBfUkQxCQkoMSA8PCAyMCkJLyogQjogU1NDMSBSZWNlaXZlIERhdGEgKi8KLSNkZWZpbmUgQVQ5MV9QQTIxX1RQSzUJCSgxIDw8IDIxKQkvKiBBOiBUcmFjZSBQYWNrZXQgUG9ydCA1ICovCi0jZGVmaW5lIEFUOTFfUEEyMV9SSzEJCSgxIDw8IDIxKQkvKiBCOiBTU0MxIFJlY2VpdmUgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MV9QQTIyX1RQSzYJCSgxIDw8IDIyKQkvKiBBOiBUcmFjZSBQYWNrZXQgUG9ydCA2ICovCi0jZGVmaW5lIEFUOTFfUEEyMl9SRjEJCSgxIDw8IDIyKQkvKiBCOiBTU0MxIFJlY2VpdmUgRnJhbWUgU3luYyAqLwotI2RlZmluZSBBVDkxX1BBMjNfVFBLNwkJKDEgPDwgMjMpCS8qIEE6IFRyYWNlIFBhY2tldCBQb3J0IDcgKi8KLSNkZWZpbmUgQVQ5MV9QQTIzX1JUUzAJCSgxIDw8IDIzKQkvKiBCOiBVU0FSVDAgUmVhZHkgVG8gU2VuZCAqLwotI2RlZmluZSBBVDkxX1BBMjRfVFBLOAkJKDEgPDwgMjQpCS8qIEE6IFRyYWNlIFBhY2tldCBQb3J0IDggKi8KLSNkZWZpbmUgQVQ5MV9QQTI0X1NQSTFfTlBDUzEJKDEgPDwgMjQpCS8qIEI6IFNQSTEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAxICovCi0jZGVmaW5lIEFUOTFfUEEyNV9UUEs5CQkoMSA8PCAyNSkJLyogQTogVHJhY2UgUGFja2V0IFBvcnQgOSAqLwotI2RlZmluZSBBVDkxX1BBMjVfU1BJMV9OUENTMgkoMSA8PCAyNSkJLyogQjogU1BJMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8KLSNkZWZpbmUgQVQ5MV9QQTI2X1RQSzEwCQkoMSA8PCAyNikJLyogQTogVHJhY2UgUGFja2V0IFBvcnQgMTAgKi8KLSNkZWZpbmUgQVQ5MV9QQTI2X1NQSTFfTlBDUzMJKDEgPDwgMjYpCS8qIEI6IFNQSTEgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovCi0jZGVmaW5lIEFUOTFfUEEyN19UUEsxMQkJKDEgPDwgMjcpCS8qIEE6IFRyYWNlIFBhY2tldCBQb3J0IDExICovCi0jZGVmaW5lIEFUOTFfUEEyN19TUEkwX05QQ1MxCSgxIDw8IDI3KQkvKiBCOiBTUEkwIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMSAqLwotI2RlZmluZSBBVDkxX1BBMjhfVFBLMTIJCSgxIDw8IDI4KQkvKiBBOiBUcmFjZSBQYWNrZXQgUG9ydCAxMiAqLwotI2RlZmluZSBBVDkxX1BBMjhfU1BJMF9OUENTMgkoMSA8PCAyOCkJLyogQjogU1BJMCBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8KLSNkZWZpbmUgQVQ5MV9QQTI5X1RQSzEzCQkoMSA8PCAyOSkJLyogQTogVHJhY2UgUGFja2V0IFBvcnQgMTMgKi8KLSNkZWZpbmUgQVQ5MV9QQTI5X1NQSTBfTlBDUzMJKDEgPDwgMjkpCS8qIEI6IFNQSTAgUGVyaXBoZXJhbCBDaGlwIFNlbGVjdCAzICovCi0jZGVmaW5lIEFUOTFfUEEzMF9UUEsxNAkJKDEgPDwgMzApCS8qIEE6IFRyYWNlIFBhY2tldCBQb3J0IDE0ICovCi0jZGVmaW5lIEFUOTFfUEEzMF9BMjMJCSgxIDw8IDMwKQkvKiBCOiBBZGRyZXNzIEJ1cyBiaXQgMjMgKi8KLSNkZWZpbmUgQVQ5MV9QQTMxX1RQSzE1CQkoMSA8PCAzMSkJLyogQTogVHJhY2UgUGFja2V0IFBvcnQgMTUgKi8KLSNkZWZpbmUgQVQ5MV9QQTMxX0EyNAkJKDEgPDwgMzEpCS8qIEI6IEFkZHJlc3MgQnVzIGJpdCAyNCAqLwotCi0jZGVmaW5lIEFUOTFfUEIwX0xDRFZTWU5DCSgxIDw8ICAwKQkvKiBBOiBMQ0QgVmVydGljYWwgU3luY2hyb25pemF0aW9uICovCi0jZGVmaW5lIEFUOTFfUEIxX0xDREhTWU5DCSgxIDw8ICAxKQkvKiBBOiBMQ0QgSG9yaXpvbnRhbCBTeW5jaHJvbml6YXRpb24gKi8KLSNkZWZpbmUgQVQ5MV9QQjJfTENERE9UQ0sJKDEgPDwgIDIpCS8qIEE6IExDRCBEb3QgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MV9QQjJfUENLMAkJKDEgPDwgIDIpCS8qIEI6IFBNQyBQcm9ncmFtbWFibGUgY2xvY2sgT3V0cHV0IDAgKi8KLSNkZWZpbmUgQVQ5MV9QQjNfTENEREVOCQkoMSA8PCAgMykJLyogQTogTENEIERhdGEgRW5hYmxlICovCi0jZGVmaW5lIEFUOTFfUEI0X0xDRENDCQkoMSA8PCAgNCkJLyogQTogTENEIENvbnRyYXN0IENvbnRyb2wgKi8KLSNkZWZpbmUgQVQ5MV9QQjRfTENERDIJCSgxIDw8ICA0KQkvKiBCOiBMQ0QgRGF0YSBCdXMgQml0IDIgKi8KLSNkZWZpbmUgQVQ5MV9QQjVfTENERDAJCSgxIDw8ICA1KQkvKiBBOiBMQ0QgRGF0YSBCdXMgQml0IDAgKi8KLSNkZWZpbmUgQVQ5MV9QQjVfTENERDMJCSgxIDw8ICA1KQkvKiBCOiBMQ0QgRGF0YSBCdXMgQml0IDMgKi8KLSNkZWZpbmUgQVQ5MV9QQjZfTENERDEJCSgxIDw8ICA2KQkvKiBBOiBMQ0QgRGF0YSBCdXMgQml0IDEgKi8KLSNkZWZpbmUgQVQ5MV9QQjZfTENERDQJCSgxIDw8ICA2KQkvKiBCOiBMQ0QgRGF0YSBCdXMgQml0IDQgKi8KLSNkZWZpbmUgQVQ5MV9QQjdfTENERDIJCSgxIDw8ICA3KQkvKiBBOiBMQ0QgRGF0YSBCdXMgQml0IDIgKi8KLSNkZWZpbmUgQVQ5MV9QQjdfTENERDUJCSgxIDw8ICA3KQkvKiBCOiBMQ0QgRGF0YSBCdXMgQml0IDUgKi8KLSNkZWZpbmUgQVQ5MV9QQjhfTENERDMJCSgxIDw8ICA4KQkvKiBBOiBMQ0QgRGF0YSBCdXMgQml0IDMgKi8KLSNkZWZpbmUgQVQ5MV9QQjhfTENERDYJCSgxIDw8ICA4KQkvKiBCOiBMQ0QgRGF0YSBCdXMgQml0IDYgKi8KLSNkZWZpbmUgQVQ5MV9QQjlfTENERDQJCSgxIDw8ICA5KQkvKiBBOiBMQ0QgRGF0YSBCdXMgQml0IDQgKi8KLSNkZWZpbmUgQVQ5MV9QQjlfTENERDcJCSgxIDw8ICA5KQkvKiBCOiBMQ0QgRGF0YSBCdXMgQml0IDcgKi8KLSNkZWZpbmUgQVQ5MV9QQjEwX0xDREQ1CQkoMSA8PCAxMCkJLyogQTogTENEIERhdGEgQnVzIEJpdCA1ICovCi0jZGVmaW5lIEFUOTFfUEIxMF9MQ0REMTAJKDEgPDwgMTApCS8qIEI6IExDRCBEYXRhIEJ1cyBCaXQgMTAgKi8KLSNkZWZpbmUgQVQ5MV9QQjExX0xDREQ2CQkoMSA8PCAxMSkJLyogQTogTENEIERhdGEgQnVzIEJpdCA2ICovCi0jZGVmaW5lIEFUOTFfUEIxMV9MQ0REMTEJKDEgPDwgMTEpCS8qIEI6IExDRCBEYXRhIEJ1cyBCaXQgMTEgKi8KLSNkZWZpbmUgQVQ5MV9QQjEyX0xDREQ3CQkoMSA8PCAxMikJLyogQTogTENEIERhdGEgQnVzIEJpdCA3ICovCi0jZGVmaW5lIEFUOTFfUEIxMl9MQ0REMTIJKDEgPDwgMTIpCS8qIEI6IExDRCBEYXRhIEJ1cyBCaXQgMTIgKi8KLSNkZWZpbmUgQVQ5MV9QQjEzX0xDREQ4CQkoMSA8PCAxMykJLyogQTogTENEIERhdGEgQnVzIEJpdCA4ICovCi0jZGVmaW5lIEFUOTFfUEIxM19MQ0REMTMJKDEgPDwgMTMpCS8qIEI6IExDRCBEYXRhIEJ1cyBCaXQgMTMgKi8KLSNkZWZpbmUgQVQ5MV9QQjE0X0xDREQ5CQkoMSA8PCAxNCkJLyogQTogTENEIERhdGEgQnVzIEJpdCA5ICovCi0jZGVmaW5lIEFUOTFfUEIxNF9MQ0REMTQJKDEgPDwgMTQpCS8qIEI6IExDRCBEYXRhIEJ1cyBCaXQgMTQgKi8KLSNkZWZpbmUgQVQ5MV9QQjE1X0xDREQxMAkoMSA8PCAxNSkJLyogQTogTENEIERhdGEgQnVzIEJpdCAxMCAqLwotI2RlZmluZSBBVDkxX1BCMTVfTENERDE1CSgxIDw8IDE1KQkvKiBCOiBMQ0QgRGF0YSBCdXMgQml0IDE1ICovCi0jZGVmaW5lIEFUOTFfUEIxNl9MQ0REMTEJKDEgPDwgMTYpCS8qIEE6IExDRCBEYXRhIEJ1cyBCaXQgMTEgKi8KLSNkZWZpbmUgQVQ5MV9QQjE2X0xDREQxOQkoMSA8PCAxNikJLyogQjogTENEIERhdGEgQnVzIEJpdCAxOSAqLwotI2RlZmluZSBBVDkxX1BCMTdfTENERDEyCSgxIDw8IDE3KQkvKiBBOiBMQ0QgRGF0YSBCdXMgQml0IDEyICovCi0jZGVmaW5lIEFUOTFfUEIxN19MQ0REMjAJKDEgPDwgMTcpCS8qIEI6IExDRCBEYXRhIEJ1cyBCaXQgMjAgKi8KLSNkZWZpbmUgQVQ5MV9QQjE4X0xDREQxMwkoMSA8PCAxOCkJLyogQTogTENEIERhdGEgQnVzIEJpdCAxMyAqLwotI2RlZmluZSBBVDkxX1BCMThfTENERDIxCSgxIDw8IDE4KQkvKiBCOiBMQ0QgRGF0YSBCdXMgQml0IDIxICovCi0jZGVmaW5lIEFUOTFfUEIxOV9MQ0REMTQJKDEgPDwgMTkpCS8qIEE6IExDRCBEYXRhIEJ1cyBCaXQgMTQgKi8KLSNkZWZpbmUgQVQ5MV9QQjE5X0xDREQyMgkoMSA8PCAxOSkJLyogQjogTENEIERhdGEgQnVzIEJpdCAyMiAqLwotI2RlZmluZSBBVDkxX1BCMjBfTENERDE1CSgxIDw8IDIwKQkvKiBBOiBMQ0QgRGF0YSBCdXMgQml0IDE1ICovCi0jZGVmaW5lIEFUOTFfUEIyMF9MQ0REMjMJKDEgPDwgMjApCS8qIEI6IExDRCBEYXRhIEJ1cyBCaXQgMjMgKi8KLSNkZWZpbmUgQVQ5MV9QQjIxX1RGMAkJKDEgPDwgMjEpCS8qIEE6IFNTQzAgVHJhbnNtaXQgRnJhbWUgU3luYyAqLwotI2RlZmluZSBBVDkxX1BCMjFfTENERDE2CSgxIDw8IDIxKQkvKiBCOiBMQ0QgRGF0YSBCdXMgQml0IDE2ICovCi0jZGVmaW5lIEFUOTFfUEIyMl9USzAJCSgxIDw8IDIyKQkvKiBBOiBTU0MwIFRyYW5zbWl0IENsb2NrICovCi0jZGVmaW5lIEFUOTFfUEIyMl9MQ0REMTcJKDEgPDwgMjIpCS8qIEI6IExDRCBEYXRhIEJ1cyBCaXQgMTcgKi8KLSNkZWZpbmUgQVQ5MV9QQjIzX1REMAkJKDEgPDwgMjMpCS8qIEE6IFNTQzAgVHJhbnNtaXQgRGF0YSAqLwotI2RlZmluZSBBVDkxX1BCMjNfTENERDE4CSgxIDw8IDIzKQkvKiBCOiBMQ0QgRGF0YSBCdXMgQml0IDE4ICovCi0jZGVmaW5lIEFUOTFfUEIyNF9SRDAJCSgxIDw8IDI0KQkvKiBBOiBTU0MwIFJlY2VpdmUgRGF0YSAqLwotI2RlZmluZSBBVDkxX1BCMjRfTENERDE5CSgxIDw8IDI0KQkvKiBCOiBMQ0QgRGF0YSBCdXMgQml0IDE5ICovCi0jZGVmaW5lIEFUOTFfUEIyNV9SSzAJCSgxIDw8IDI1KQkvKiBBOiBTU0MwIFJlY2VpdmUgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MV9QQjI1X0xDREQyMAkoMSA8PCAyNSkJLyogQjogTENEIERhdGEgQnVzIEJpdCAyMCAqLwotI2RlZmluZSBBVDkxX1BCMjZfUkYwCQkoMSA8PCAyNikJLyogQTogU1NDMCBSZWNlaXZlIEZyYW1lIFN5bmMgKi8KLSNkZWZpbmUgQVQ5MV9QQjI2X0xDREQyMQkoMSA8PCAyNikJLyogQjogTENEIERhdGEgQnVzIEJpdCAyMSAqLwotI2RlZmluZSBBVDkxX1BCMjdfU1BJMV9OUENTMQkoMSA8PCAyNykJLyogQTogU1BJMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDEgKi8KLSNkZWZpbmUgQVQ5MV9QQjI3X0xDREQyMgkoMSA8PCAyNykJLyogQjogTENEIERhdGEgQnVzIEJpdCAyMiAqLwotI2RlZmluZSBBVDkxX1BCMjhfU1BJMV9OUENTMAkoMSA8PCAyOCkJLyogQTogU1BJMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDAgKi8KLSNkZWZpbmUgQVQ5MV9QQjI4X0xDREQyMwkoMSA8PCAyOCkJLyogQjogTENEIERhdGEgQnVzIEJpdCAyMyAqLwotI2RlZmluZSBBVDkxX1BCMjlfU1BJMV9TUENLCSgxIDw8IDI5KQkvKiBBOiBTUEkxIFNlcmlhbCBDbG9jayAqLwotI2RlZmluZSBBVDkxX1BCMjlfSVJRMgkJKDEgPDwgMjkpCS8qIEI6IEludGVycnVwdCBpbnB1dCAyICovCi0jZGVmaW5lIEFUOTFfUEIzMF9TUEkxX01JU08JKDEgPDwgMzApCS8qIEE6IFNQSTEgTWFzdGVyIEluIFNsYXZlICovCi0jZGVmaW5lIEFUOTFfUEIzMF9JUlExCQkoMSA8PCAzMCkJLyogQjogSW50ZXJydXB0IGlucHV0IDEgKi8KLSNkZWZpbmUgQVQ5MV9QQjMxX1NQSTFfTU9TSQkoMSA8PCAzMSkJLyogQTogU1BJMSBNYXN0ZXIgT3V0IFNsYXZlICovCi0jZGVmaW5lIEFUOTFfUEIzMV9QQ0syCQkoMSA8PCAzMSkJLyogQjogUE1DIFByb2dyYW1tYWJsZSBjbG9jayBPdXRwdXQgMiAqLwotCi0jZGVmaW5lIEFUOTFfUEMwX1NNT0UJCSgxIDw8IDApCS8qIEE6IFNtYXJ0TWVkaWEgT3V0cHV0IEVuYWJsZSAqLwotI2RlZmluZSBBVDkxX1BDMF9OQ1M2CQkoMSA8PCAwKQkvKiBCOiBDaGlwIFNlbGVjdCA2ICovCi0jZGVmaW5lIEFUOTFfUEMxX1NNV0UJCSgxIDw8IDEpCS8qIEE6IFNtYXJ0TWVkaWEgV3JpdGUgRW5hYmxlICovCi0jZGVmaW5lIEFUOTFfUEMxX05DUzcJCSgxIDw8IDEpCS8qIEI6IENoaXAgU2VsZWN0IDcgKi8KLSNkZWZpbmUgQVQ5MV9QQzJfTldBSVQJCSgxIDw8IDIpCS8qIEE6IE5XQUlUICovCi0jZGVmaW5lIEFUOTFfUEMyX0lSUTAJCSgxIDw8IDIpCS8qIEI6IEludGVycnVwdCBpbnB1dCAwICovCi0jZGVmaW5lIEFUOTFfUEMzX0EyNV9DRlJOVwkoMSA8PCAzKQkvKiBBOiBBZGRyZXNzIEJ1c1syNV0gLyBDb21wYWN0IEZsYXNoIFJlYWQgTm90IFdyaXRlICovCi0jZGVmaW5lIEFUOTFfUEM0X05DUzRfQ0ZDUzAJKDEgPDwgNCkJLyogQTogQ2hpcCBTZWxlY3QgNCAvIENvbXBhY3RGbGFzaCBDaGlwIFNlbGVjdCAwICovCi0jZGVmaW5lIEFUOTFfUEM1X05DUzVfQ0ZDUzEJKDEgPDwgNSkJLyogQTogQ2hpcCBTZWxlY3QgNSAvIENvbXBhY3RGbGFzaCBDaGlwIFNlbGVjdCAxICovCi0jZGVmaW5lIEFUOTFfUEM2X0NGQ0UxCQkoMSA8PCA2KQkvKiBBOiBDb21wYWN0Rmxhc2ggQ2hpcCBFbmFibGUgMSAqLwotI2RlZmluZSBBVDkxX1BDN19DRkNFMgkJKDEgPDwgNykJLyogQTogQ29tcGFjdEZsYXNoIENoaXAgRW5hYmxlIDIgKi8KLSNkZWZpbmUgQVQ5MV9QQzhfVFhEMAkJKDEgPDwgOCkJLyogQTogVVNBUlQwIFRyYW5zbWl0IERhdGEgKi8KLSNkZWZpbmUgQVQ5MV9QQzhfUENLMgkJKDEgPDwgOCkJLyogQjogUE1DIFByb2dyYW1tYWJsZSBjbG9jayBPdXRwdXQgMiAqLwotI2RlZmluZSBBVDkxX1BDOV9SWEQwCQkoMSA8PCA5KQkvKiBBOiBVU0FSVDAgUmVjZWl2ZSBEYXRhICovCi0jZGVmaW5lIEFUOTFfUEM5X1BDSzMJCSgxIDw8IDkpCS8qIEI6IFBNQyBQcm9ncmFtbWFibGUgY2xvY2sgT3V0cHV0IDMgKi8KLSNkZWZpbmUgQVQ5MV9QQzEwX1JUUzAJCSgxIDw8IDEwKQkvKiBBOiBVU0FSVDAgUmVhZHkgVG8gU2VuZCAqLwotI2RlZmluZSBBVDkxX1BDMTBfU0NLMAkJKDEgPDwgMTApCS8qIEI6IFVTQVJUMCBTZXJpYWwgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MV9QQzExX0NUUzAJCSgxIDw8IDExKQkvKiBBOiBVU0FSVDAgQ2xlYXIgVG8gU2VuZCAqLwotI2RlZmluZSBBVDkxX1BDMTFfRklRCQkoMSA8PCAxMSkJLyogQjogQUlDIEZhc3QgSW50ZXJydXB0IElucHV0ICovCi0jZGVmaW5lIEFUOTFfUEMxMl9UWEQxCQkoMSA8PCAxMikJLyogQTogVVNBUlQxIFRyYW5zbWl0IERhdGEgKi8KLSNkZWZpbmUgQVQ5MV9QQzEyX05DUzYJCSgxIDw8IDEyKQkvKiBCOiBDaGlwIFNlbGVjdCA2ICovCi0jZGVmaW5lIEFUOTFfUEMxM19SWEQxCQkoMSA8PCAxMykJLyogQTogVVNBUlQxIFJlY2VpdmUgRGF0YSAqLwotI2RlZmluZSBBVDkxX1BDMTNfTkNTNwkJKDEgPDwgMTMpCS8qIEI6IENoaXAgU2VsZWN0IDcgKi8KLSNkZWZpbmUgQVQ5MV9QQzE0X1RYRDIJCSgxIDw8IDE0KQkvKiBBOiBVU0FSVDIgVHJhbnNtaXQgRGF0YSAqLwotI2RlZmluZSBBVDkxX1BDMTRfU1BJMV9OUENTMgkoMSA8PCAxNCkJLyogQjogU1BJMSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDIgKi8KLSNkZWZpbmUgQVQ5MV9QQzE1X1JYRDIJCSgxIDw8IDE1KQkvKiBBOiBVU0FSVDIgUmVjZWl2ZSBEYXRhICovCi0jZGVmaW5lIEFUOTFfUEMxNV9TUEkxX05QQ1MzCSgxIDw8IDE1KQkvKiBCOiBTUEkxIFBlcmlwaGVyYWwgQ2hpcCBTZWxlY3QgMyAqLwotI2RlZmluZSBBVDkxX1BDMTZfRDE2CQkoMSA8PCAxNikJLyogQTogRGF0YSBCdXMgWzE2XSAqLwotI2RlZmluZSBBVDkxX1BDMTZfVENMSzAJCSgxIDw8IDE2KQkvKiBCOiBUaW1lciBDb3VudGVyIDAgZXh0ZXJuYWwgY2xvY2sgaW5wdXQgKi8KLSNkZWZpbmUgQVQ5MV9QQzE3X0QxNwkJKDEgPDwgMTcpCS8qIEE6IERhdGEgQnVzIFsxN10gKi8KLSNkZWZpbmUgQVQ5MV9QQzE3X1RDTEsxCQkoMSA8PCAxNykJLyogQjogVGltZXIgQ291bnRlciAxIGV4dGVybmFsIGNsb2NrIGlucHV0ICovCi0jZGVmaW5lIEFUOTFfUEMxOF9EMTgJCSgxIDw8IDE4KQkvKiBBOiBEYXRhIEJ1cyBbMThdICovCi0jZGVmaW5lIEFUOTFfUEMxOF9UQ0xLMgkJKDEgPDwgMTgpCS8qIEI6IFRpbWVyIENvdW50ZXIgMiBleHRlcm5hbCBjbG9jayBpbnB1dCAqLwotI2RlZmluZSBBVDkxX1BDMTlfRDE5CQkoMSA8PCAxOSkJLyogQTogRGF0YSBCdXMgWzE5XSAqLwotI2RlZmluZSBBVDkxX1BDMTlfVElPQTAJCSgxIDw8IDE5KQkvKiBCOiBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQSAqLwotI2RlZmluZSBBVDkxX1BDMjBfRDIwCQkoMSA8PCAyMCkJLyogQTogRGF0YSBCdXMgWzIwXSAqLwotI2RlZmluZSBBVDkxX1BDMjBfVElPQjAJCSgxIDw8IDIwKQkvKiBCOiBUaW1lciBDb3VudGVyIDAgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQiAqLwotI2RlZmluZSBBVDkxX1BDMjFfRDIxCQkoMSA8PCAyMSkJLyogQTogRGF0YSBCdXMgWzIxXSAqLwotI2RlZmluZSBBVDkxX1BDMjFfVElPQTEJCSgxIDw8IDIxKQkvKiBCOiBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQSAqLwotI2RlZmluZSBBVDkxX1BDMjJfRDIyCQkoMSA8PCAyMikJLyogQTogRGF0YSBCdXMgWzIyXSAqLwotI2RlZmluZSBBVDkxX1BDMjJfVElPQjEJCSgxIDw8IDIyKQkvKiBCOiBUaW1lciBDb3VudGVyIDEgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQiAqLwotI2RlZmluZSBBVDkxX1BDMjNfRDIzCQkoMSA8PCAyMykJLyogQTogRGF0YSBCdXMgWzIzXSAqLwotI2RlZmluZSBBVDkxX1BDMjNfVElPQTIJCSgxIDw8IDIzKQkvKiBCOiBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQSAqLwotI2RlZmluZSBBVDkxX1BDMjRfRDI0CQkoMSA8PCAyNCkJLyogQTogRGF0YSBCdXMgWzI0XSAqLwotI2RlZmluZSBBVDkxX1BDMjRfVElPQjIJCSgxIDw8IDI0KQkvKiBCOiBUaW1lciBDb3VudGVyIDIgTXVsdGlwdXJwb3NlIFRpbWVyIEkvTyBQaW4gQiAqLwotI2RlZmluZSBBVDkxX1BDMjVfRDI1CQkoMSA8PCAyNSkJLyogQTogRGF0YSBCdXMgWzI1XSAqLwotI2RlZmluZSBBVDkxX1BDMjVfVEYyCQkoMSA8PCAyNSkJLyogQjogU1NDMiBUcmFuc21pdCBGcmFtZSBTeW5jICovCi0jZGVmaW5lIEFUOTFfUEMyNl9EMjYJCSgxIDw8IDI2KQkvKiBBOiBEYXRhIEJ1cyBbMjZdICovCi0jZGVmaW5lIEFUOTFfUEMyNl9USzIJCSgxIDw8IDI2KQkvKiBCOiBTU0MyIFRyYW5zbWl0IENsb2NrICovCi0jZGVmaW5lIEFUOTFfUEMyN19EMjcJCSgxIDw8IDI3KQkvKiBBOiBEYXRhIEJ1cyBbMjddICovCi0jZGVmaW5lIEFUOTFfUEMyN19URDIJCSgxIDw8IDI3KQkvKiBCOiBTU0MyIFRyYW5zbWl0IERhdGEgKi8KLSNkZWZpbmUgQVQ5MV9QQzI4X0QyOAkJKDEgPDwgMjgpCS8qIEE6IERhdGEgQnVzIFsyOF0gKi8KLSNkZWZpbmUgQVQ5MV9QQzI4X1JEMgkJKDEgPDwgMjgpCS8qIEI6IFNTQzIgUmVjZWl2ZSBEYXRhICovCi0jZGVmaW5lIEFUOTFfUEMyOV9EMjkJCSgxIDw8IDI5KQkvKiBBOiBEYXRhIEJ1cyBbMjldICovCi0jZGVmaW5lIEFUOTFfUEMyOV9SSzIJCSgxIDw8IDI5KQkvKiBCOiBTU0MyIFJlY2VpdmUgQ2xvY2sgKi8KLSNkZWZpbmUgQVQ5MV9QQzMwX0QzMAkJKDEgPDwgMzApCS8qIEE6IERhdGEgQnVzIFszMF0gKi8KLSNkZWZpbmUgQVQ5MV9QQzMwX1JGMgkJKDEgPDwgMzApCS8qIEI6IFNTQzIgUmVjZWl2ZSBGcmFtZSBTeW5jICovCi0jZGVmaW5lIEFUOTFfUEMzMV9EMzEJCSgxIDw8IDMxKQkvKiBBOiBEYXRhIEJ1cyBbMzFdICovCi0jZGVmaW5lIEFUOTFfUEMzMV9QQ0sxCQkoMSA8PCAzMSkJLyogQjogUE1DIFByb2dyYW1tYWJsZSBjbG9jayBPdXRwdXQgMSAqLwotI2VuZGlmCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2My5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOTI2My5oCmluZGV4IGY0YWY2OGEuLjExNWM0N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTkyNjMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjYzLmgKQEAgLTExOSwxMyArMTE5LDUgQEAKICNkZWZpbmUgQVQ5MVNBTTkyNjNfRE1BQ19CQVNFCTB4MDA4MDAwMDAJLyogRE1BIENvbnRyb2xsZXIgKi8KICNkZWZpbmUgQVQ5MVNBTTkyNjNfVUhQX0JBU0UJMHgwMGEwMDAwMAkvKiBVU0IgSG9zdCBjb250cm9sbGVyICovCiAKLSNpZiAwCi0vKgotICogUElPIHBpbiBkZWZpbml0aW9ucyAocGVyaXBoZXJhbCBBL0IgbXVsdGlwbGV4aW5nKS4KLSAqLwotCi0vLyBUT0RPOiBBZGQKLQotI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOXJsLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTk3MDhhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOXJsLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05MjYwLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogQ29tbW9uIGRlZmluaXRpb25zLgorICogQmFzZWQgb24gQVQ5MVNBTTlSTCBkYXRhc2hlZXQgcmV2aXNpb24gQS4gKFByZWxpbWluYXJ5KQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIEFUOTFTQU05UkxfSAorI2RlZmluZSBBVDkxU0FNOVJMX0gKKworLyoKKyAqIFBlcmlwaGVyYWwgaWRlbnRpZmllcnMvaW50ZXJydXB0cy4KKyAqLworI2RlZmluZSBBVDkxX0lEX0ZJUQkJMAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRklRKSAqLworI2RlZmluZSBBVDkxX0lEX1NZUwkJMQkvKiBTeXN0ZW0gQ29udHJvbGxlciAqLworI2RlZmluZSBBVDkxU0FNOVJMX0lEX1BJT0EJMgkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KKyNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9QSU9CCTMJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCisjZGVmaW5lIEFUOTFTQU05UkxfSURfUElPQwk0CS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLworI2RlZmluZSBBVDkxU0FNOVJMX0lEX1BJT0QJNQkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEQgKi8KKyNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9VUzAJNgkvKiBVU0FSVCAwICovCisjZGVmaW5lIEFUOTFTQU05UkxfSURfVVMxCTcJLyogVVNBUlQgMSAqLworI2RlZmluZSBBVDkxU0FNOVJMX0lEX1VTMgk4CS8qIFVTQVJUIDIgKi8KKyNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9VUzMJOQkvKiBVU0FSVCAzICovCisjZGVmaW5lIEFUOTFTQU05UkxfSURfTUNJCTEwCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9UV0kwCTExCS8qIFRXSSAwICovCisjZGVmaW5lIEFUOTFTQU05UkxfSURfVFdJMQkxMgkvKiBUV0kgMSAqLworI2RlZmluZSBBVDkxU0FNOVJMX0lEX1NQSQkxMwkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9TU0MwCTE0CS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDAgKi8KKyNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9TU0MxCTE1CS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDEgKi8KKyNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9UQzAJMTYJLyogVGltZXIgQ291bnRlciAwICovCisjZGVmaW5lIEFUOTFTQU05UkxfSURfVEMxCTE3CS8qIFRpbWVyIENvdW50ZXIgMSAqLworI2RlZmluZSBBVDkxU0FNOVJMX0lEX1RDMgkxOAkvKiBUaW1lciBDb3VudGVyIDIgKi8KKyNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9QV01DCTE5CS8qIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciAqLworI2RlZmluZSBBVDkxU0FNOVJMX0lEX1RTQwkyMAkvKiBUb3VjaCBTY3JlZW4gQ29udHJvbGxlciAqLworI2RlZmluZSBBVDkxU0FNOVJMX0lEX0RNQQkyMQkvKiBETUEgQ29udHJvbGxlciAqLworI2RlZmluZSBBVDkxU0FNOVJMX0lEX1VEUEhTCTIyCS8qIFVTQiBEZXZpY2UgSFMgKi8KKyNkZWZpbmUgQVQ5MVNBTTlSTF9JRF9MQ0RDCTIzCS8qIExDRCBDb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFTQU05UkxfSURfQUM5N0MJMjQJLyogQUM5NyBDb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFTQU05UkxfSURfSVJRMAkzMQkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkgKi8KKworCisvKgorICogVXNlciBQZXJpcGhlcmFsIHBoeXNpY2FsIGJhc2UgYWRkcmVzc2VzLgorICovCisjZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9UQ0IwCTB4ZmZmYTAwMDAKKyNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX1RDMAkweGZmZmEwMDAwCisjZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9UQzEJMHhmZmZhMDA0MAorI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfVEMyCTB4ZmZmYTAwODAKKyNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX01DSQkweGZmZmE0MDAwCisjZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9UV0kwCTB4ZmZmYTgwMDAKKyNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX1RXSTEJMHhmZmZhYzAwMAorI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfVVMwCTB4ZmZmYjAwMDAKKyNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX1VTMQkweGZmZmI0MDAwCisjZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9VUzIJMHhmZmZiODAwMAorI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfVVMzCTB4ZmZmYmMwMDAKKyNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX1NTQzAJMHhmZmZjMDAwMAorI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfU1NDMQkweGZmZmM0MDAwCisjZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9QV01DCTB4ZmZmYzgwMDAKKyNkZWZpbmUgQVQ5MVNBTTlSTF9CQVNFX1NQSQkweGZmZmNjMDAwCisjZGVmaW5lIEFUOTFTQU05UkxfQkFTRV9UU0MJMHhmZmZkMDAwMAorI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfVURQSFMJMHhmZmZkNDAwMAorI2RlZmluZSBBVDkxU0FNOVJMX0JBU0VfQUM5N0MJMHhmZmZkODAwMAorI2RlZmluZSBBVDkxX0JBU0VfU1lTCQkweGZmZmZjMDAwCisKKworLyoKKyAqIFN5c3RlbSBQZXJpcGhlcmFscyAob2Zmc2V0IGZyb20gQVQ5MV9CQVNFX1NZUykKKyAqLworI2RlZmluZSBBVDkxX0RNQQkoMHhmZmZmZTYwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfRUNDCSgweGZmZmZlODAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9TRFJBTUMJKDB4ZmZmZmVhMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1NNQwkoMHhmZmZmZWMwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfTUFUUklYCSgweGZmZmZlZTAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9DQ0ZHCSgweGZmZmZlZjEwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9BSUMJKDB4ZmZmZmYwMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX0RCR1UJKDB4ZmZmZmYyMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJT0EJKDB4ZmZmZmY0MDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJT0IJKDB4ZmZmZmY2MDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJT0MJKDB4ZmZmZmY4MDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJT0QJKDB4ZmZmZmZhMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BNQwkoMHhmZmZmZmMwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfUlNUQwkoMHhmZmZmZmQwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfU0hEV0MJKDB4ZmZmZmZkMTAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1JUVAkoMHhmZmZmZmQyMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfUElUCSgweGZmZmZmZDMwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9XRFQJKDB4ZmZmZmZkNDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1NDS0NSCSgweGZmZmZmZDUwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9HUEJSCSgweGZmZmZmZDYwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9SVEMJKDB4ZmZmZmZlMDAgLSBBVDkxX0JBU0VfU1lTKQorCisKKy8qCisgKiBJbnRlcm5hbCBNZW1vcnkuCisgKi8KKyNkZWZpbmUgQVQ5MVNBTTlSTF9TUkFNX0JBU0UJMHgwMDMwMDAwMAkvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBVDkxU0FNOVJMX1NSQU1fU0laRQlTWl8xNksJCS8qIEludGVybmFsIFNSQU0gc2l6ZSAoMTZLYikgKi8KKworI2RlZmluZSBBVDkxU0FNOVJMX1JPTV9CQVNFCTB4MDA0MDAwMDAJLyogSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBVDkxU0FNOVJMX1JPTV9TSVpFCSgyICogU1pfMTZLKQkvKiBJbnRlcm5hbCBST00gc2l6ZSAoMzJLYikgKi8KKworI2RlZmluZSBBVDkxU0FNOVJMX0xDRENfQkFTRQkweDAwNTAwMDAwCS8qIExDRCBDb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFTQU05UkxfVURQSFNfQkFTRQkweDAwNjAwMDAwCS8qIFVTQiBEZXZpY2UgSFMgY29udHJvbGxlciAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTlybF9tYXRyaXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYXQ5MXNhbTlybF9tYXRyaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTVmMTFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9hdDkxc2FtOXJsX21hdHJpeC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2F0OTFzYW05cmxfbWF0cml4LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogTWVtb3J5IENvbnRyb2xsZXJzIChNQVRSSVgsIEVCSSkgLSBTeXN0ZW0gcGVyaXBoZXJhbHMgcmVnaXN0ZXJzLgorICogQmFzZWQgb24gQVQ5MVNBTTlSTCBkYXRhc2hlZXQgcmV2aXNpb24gQS4gKFByZWxpbWluYXJ5KQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIEFUOTFTQU05UkxfTUFUUklYX0gKKyNkZWZpbmUgQVQ5MVNBTTlSTF9NQVRSSVhfSAorCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkcwCShBVDkxX01BVFJJWCArIDB4MDApCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzEJKEFUOTFfTUFUUklYICsgMHgwNCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMgkoQVQ5MV9NQVRSSVggKyAweDA4KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkczCShBVDkxX01BVFJJWCArIDB4MEMpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzQJKEFUOTFfTUFUUklYICsgMHgxMCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHNQkoQVQ5MV9NQVRSSVggKyAweDE0KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA1ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9VTEJUCSg3IDw8IDApCS8qIFVuZGVmaW5lZCBMZW5ndGggQnVyc3QgVHlwZSAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfSU5GSU5JVEUJKDAgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX1NJTkdMRQkJKDEgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX0ZPVVIJCSgyIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9FSUdIVAkJKDMgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX1NJWFRFRU4JKDQgPDwgMCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMAkoQVQ5MV9NQVRSSVggKyAweDQwKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzEJKEFUOTFfTUFUUklYICsgMHg0NCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkcyCShBVDkxX01BVFJJWCArIDB4NDgpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMwkoQVQ5MV9NQVRSSVggKyAweDRDKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzQJKEFUOTFfTUFUUklYICsgMHg1MCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA0ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkc1CShBVDkxX01BVFJJWCArIDB4NTQpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfU0xPVF9DWUNMRQkJKDB4ZmYgPDwgMCkJLyogTWF4aW11bSBOdW1iZXIgb2YgQWxsb3dlZCBDeWNsZXMgZm9yIGEgQnVyc3QgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRQkoMyAgICA8PCAxNikJLyogRGVmYXVsdCBNYXN0ZXIgVHlwZSAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9OT05FCSgwIDw8IDE2KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9MQVNUCSgxIDw8IDE2KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0RFRk1TVFJfVFlQRV9GSVhFRAkoMiA8PCAxNikKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0ZJWEVEX0RFRk1TVFIJKDcgICAgPDwgMTgpCS8qIEZpeGVkIEluZGV4IG9mIERlZmF1bHQgTWFzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9BUkJUCQkoMyAgICA8PCAyNCkJLyogQXJiaXRyYXRpb24gVHlwZSAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0FSQlRfUk9VTkRfUk9CSU4JKDAgPDwgMjQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQVJCVF9GSVhFRF9QUklPUklUWQkoMSA8PCAyNCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMAkoQVQ5MV9NQVRSSVggKyAweDgwKQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVMxCShBVDkxX01BVFJJWCArIDB4ODgpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDEgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzIJKEFUOTFfTUFUUklYICsgMHg5MCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMwkoQVQ5MV9NQVRSSVggKyAweDk4KQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAzICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVM0CShBVDkxX01BVFJJWCArIDB4QTApCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDQgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzUJKEFUOTFfTUFUUklYICsgMHhBOCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgNSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTBQUgkJKDMgPDwgMCkJLyogTWFzdGVyIDAgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX00xUFIJCSgzIDw8IDQpCS8qIE1hc3RlciAxIFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NMlBSCQkoMyA8PCA4KQkvKiBNYXN0ZXIgMiBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTNQUgkJKDMgPDwgMTIpCS8qIE1hc3RlciAzIFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NNFBSCQkoMyA8PCAxNikJLyogTWFzdGVyIDQgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX001UFIJCSgzIDw8IDIwKQkvKiBNYXN0ZXIgNSBQcmlvcml0eSAqLworCisjZGVmaW5lIEFUOTFfTUFUUklYX01SQ1IJKEFUOTFfTUFUUklYICsgMHgxMDApCS8qIE1hc3RlciBSZW1hcCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0IwCQkoMSA8PCAwKQkvKiBSZW1hcCBDb21tYW5kIGZvciBBSEIgTWFzdGVyIDAgKEFSTTkyNkVKLVMgSW5zdHJ1Y3Rpb24gTWFzdGVyKSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMQkJKDEgPDwgMSkJLyogUmVtYXAgQ29tbWFuZCBmb3IgQUhCIE1hc3RlciAxIChBUk05MjZFSi1TIERhdGEgTWFzdGVyKSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMgkJKDEgPDwgMikKKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjMJCSgxIDw8IDMpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0I0CQkoMSA8PCA0KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCNQkJKDEgPDwgNSkKKworI2RlZmluZSBBVDkxX01BVFJJWF9UQ01SCShBVDkxX01BVFJJWCArIDB4MTE0KQkvKiBUQ00gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfSVRDTV9TSVpFCQkoMHhmIDw8IDApCS8qIFNpemUgb2YgSVRDTSBlbmFibGVkIG1lbW9yeSBibG9jayAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fMAkJKDAgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9JVENNXzE2CQkoNSA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fMzIJCSg2IDw8IDApCisjZGVmaW5lCQlBVDkxX01BVFJJWF9EVENNX1NJWkUJCSgweGYgPDwgNCkJLyogU2l6ZSBvZiBEVENNIGVuYWJsZWQgbWVtb3J5IGJsb2NrICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8wCQkoMCA8PCA0KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMTYJCSg1IDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8zMgkJKDYgPDwgNCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9FQklDU0EJKEFUOTFfTUFUUklYICsgMHgxMjApCS8qIEVCSTAgQ2hpcCBTZWxlY3QgQXNzaWdubWVudCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1MxQQkJKDEgPDwgMSkJLyogQ2hpcCBTZWxlY3QgMSBBc3NpZ25tZW50ICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MxQV9TTUMJCSgwIDw8IDEpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MxQV9TRFJBTUMJCSgxIDw8IDEpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9DUzNBCQkoMSA8PCAzKQkvKiBDaGlwIFNlbGVjdCAzIEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzNBX1NNQwkJKDAgPDwgMykKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBCSgxIDw8IDMpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9DUzRBCQkoMSA8PCA0KQkvKiBDaGlwIFNlbGVjdCA0IEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzRBX1NNQwkJKDAgPDwgNCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzRBX1NNQ19DRjEJKDEgPDwgNCkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0NTNUEJCSgxIDw8IDUpCS8qIENoaXAgU2VsZWN0IDUgQXNzaWdubWVudCAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTNUFfU01DCQkoMCA8PCA1KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTNUFfU01DX0NGMgkoMSA8PCA1KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfREJQVUMJCSgxIDw8IDgpCS8qIERhdGEgQnVzIFB1bGwtdXAgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfVkRESU9NU0VMCQkoMSA8PCAxNikJLyogTWVtb3J5IHZvbHRhZ2Ugc2VsZWN0aW9uICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVkRESU9NU0VMXzFfOFYJKDAgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVkRESU9NU0VMXzNfM1YJKDEgPDwgMTYpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2JvYXJkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2JvYXJkLmgKaW5kZXggN2EzNGE1Yi4uMGNlNmVlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9ib2FyZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvYm9hcmQuaApAQCAtMTIxLDcgKzEyMSw3IEBACiAgLyogQUM5NyAqLwogc3RydWN0IGF0bWVsX2FjOTdfZGF0YSB7CiAJdTgJCXJlc2V0X3BpbjsJLyogcmVzZXQgKi8KLX0KK307CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGF0bWVsX2FjOTdfZGF0YSAqZGF0YSk7CiAKICAvKiBMRURzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2NwdS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9jcHUuaAppbmRleCBkNDY0Y2E1Li5lZjkzYzMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2NwdS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvY3B1LmgKQEAgLTI2LDYgKzI2LDggQEAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVhFMjU2CTB4MzI5YTkzYTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVhFNTEyCTB4MzI5YWEzYTAKIAorI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05Ukw2NAkweDAxOWIwM2EwCisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhdDkxX2NwdV9pZGVudGlmeSh2b2lkKQogewogCXJldHVybiAoYXQ5MV9zeXNfcmVhZChBVDkxX0RCR1VfQ0lEUikgJiB+QVQ5MV9DSURSX1ZFUlNJT04pOwpAQCAtNjgsNCArNzAsMTcgQEAKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05MjYzKCkJKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX0FUOTFTQU05UkwKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05cmwoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05Ukw2NCkKKyNlbHNlCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXJsKCkJKDApCisjZW5kaWYKKworCisvKgorICogU2luY2UgdGhpcyBpcyBBUk0sIHdlIHdpbGwgbmV2ZXIgcnVuIG9uIGFueSBBVlIzMiBDUFUuIEJ1dCB0aGVzZQorICogZGVmaW5pdGlvbnMgbWF5IHJlZHVjZSBjbHV0dGVyIGluIGNvbW1vbiBkcml2ZXJzLgorICovCisjZGVmaW5lIGNwdV9pc19hdDMyYXA3MDAwKCkJKDApCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9oYXJkd2FyZS5oCmluZGV4IDI4MTMzZTAuLjQ2ODM1ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2hhcmR3YXJlLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2MS5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MykKICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2My5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOVJMKQorI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05cmwuaD4KICNlbHNlCiAjZXJyb3IgIlVuc3VwcG9ydGVkIEFUOTEgcHJvY2Vzc29yIgogI2VuZGlmCkBAIC02OSwyMiArNzEsNSBAQAogLyogQ2xvY2tzICovCiAjZGVmaW5lIEFUOTFfU0xPV19DTE9DSwkJMzI3NjgJCS8qIHNsb3cgY2xvY2sgKi8KIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXQ5MV9zeXNfcmVhZCh1bnNpZ25lZCBpbnQgcmVnX29mZnNldCkKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSAodm9pZCBfX2lvbWVtICopQVQ5MV9WQV9CQVNFX1NZUzsKLQotCXJldHVybiBfX3Jhd19yZWFkbChhZGRyICsgcmVnX29mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX3N5c193cml0ZSh1bnNpZ25lZCBpbnQgcmVnX29mZnNldCwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSAodm9pZCBfX2lvbWVtICopQVQ5MV9WQV9CQVNFX1NZUzsKLQotCV9fcmF3X3dyaXRlbCh2YWx1ZSwgYWRkciArIHJlZ19vZmZzZXQpOwotfQotI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS9pby5oCmluZGV4IDQwMWYzMjcuLjgwMDczZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2lvLmgKQEAgLTI5LDQgKzI5LDIyIEBACiAjZGVmaW5lIF9fbWVtX3BjaShhKQkJKGEpCiAKIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXQ5MV9zeXNfcmVhZCh1bnNpZ25lZCBpbnQgcmVnX29mZnNldCkKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSAodm9pZCBfX2lvbWVtICopQVQ5MV9WQV9CQVNFX1NZUzsKKworCXJldHVybiBfX3Jhd19yZWFkbChhZGRyICsgcmVnX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDkxX3N5c193cml0ZSh1bnNpZ25lZCBpbnQgcmVnX29mZnNldCwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSAodm9pZCBfX2lvbWVtICopQVQ5MV9WQV9CQVNFX1NZUzsKKworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgYWRkciArIHJlZ19vZmZzZXQpOworfQorCisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvaXJxcy5oCmluZGV4IDFmZmEzYmIuLjExMjdhM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvaXJxcy5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICiAKKyNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX2FpYy5oPgogCiAjZGVmaW5lIE5SX0FJQ19JUlFTIDMyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL3RpbWV4LmgKaW5kZXggZjQxNjM2ZC4uMmRmMWVlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MS90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvdGltZXguaApAQCAtMzcsNiArMzcsMTEgQEAKICNkZWZpbmUgQVQ5MVNBTTlfTUFTVEVSX0NMT0NLCTk5OTU5NTAwCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKEFUOTFTQU05X01BU1RFUl9DTE9DSy8xNikKIAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOVJMKQorCisjZGVmaW5lIEFUOTFTQU05X01BU1RFUl9DTE9DSwkxMDAwMDAwMDAKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoQVQ5MVNBTTlfTUFTVEVSX0NMT0NLLzE2KQorCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvdW5jb21wcmVzcy5oCmluZGV4IGExOTNkMjguLjMwYWM1ODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTEvdW5jb21wcmVzcy5oCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICiAKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX2RiZ3UuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2VudHJ5LW1hY3JvLlMKaW5kZXggMGNmYjg5Yi4uMDM4Yjc2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2VudHJ5LW1hY3JvLlMKQEAgLTEsNiArMSwxNCBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9lbnRyeS1tYWNyby1pb21kLlM+CisKKwkuZXF1CWlvY19iYXNlX2hpZ2gsIElPQ19CQVNFICYgMHhmZjAwMDAwMAorCS5lcXUJaW9jX2Jhc2VfbG93LCBJT0NfQkFTRSAmIDB4MDBmZjAwMDAKKwogCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwltb3YJXGJhc2UsICNpb2NfYmFzZV9oaWdoCQlAIHBvaW50IGF0IElPQworCS5pZglpb2NfYmFzZV9sb3cKKwlvcnIJXGJhc2UsIFxiYXNlLCAjaW9jX2Jhc2VfbG93CisJLmVuZGlmCiAJLmVuZG0KIAogCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9jb21tb24uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3ZGZiYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvY29tbW9uLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIEhlYWRlciBmb3IgY29kZSBjb21tb24gdG8gYWxsIERhVmluY2kgbWFjaGluZXMuCisgKgorICogQXV0aG9yOiBLZXZpbiBIaWxtYW4sIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDcgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfREFWSU5DSV9DT01NT05fSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfREFWSU5DSV9DT01NT05fSAorCitzdHJ1Y3Qgc3lzX3RpbWVyOworCitleHRlcm4gc3RydWN0IHN5c190aW1lciBkYXZpbmNpX3RpbWVyOworCisjZW5kaWYgLyogX19BUkNIX0FSTV9NQUNIX0RBVklOQ0lfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmMwZjBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBEZWJ1Z2dpbmcgbWFjcm8gZm9yIERhVmluY2kKKyAqCisgKiBBdXRob3I6IEtldmluIEhpbG1hbiwgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwNyAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisJCS5tYWNybyBhZGRydWFydCwgcngKKwkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPworCQltb3ZlcQlccngsICMweDAxMDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCisJCW1vdm5lCVxyeCwgIzB4ZmUwMDAwMDAJQCB2aXJ0dWFsIGJhc2UKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMGMyMDAwMCAgIEAgVUFSVCAwCisJCS5lbmRtCisKKyNkZWZpbmUgVUFSVF9TSElGVAkyCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYnVnLTgyNTAuUz4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMmYyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL2RtYS5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiBEYVZpbmNpIERNQSBkZWZpbml0aW9ucworICoKKyAqIEF1dGhvcjogS2V2aW4gSGlsbWFuLCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA3IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAorCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJCTB4ZmZmZmZmZmYKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWJmY2M1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIFRJIERhVmluY2ktYmFzZWQgcGxhdGZvcm1zCisgKgorICogQXV0aG9yOiBLZXZpbiBIaWxtYW4sIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDcgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKworCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCWxkciBcYmFzZSwgPUlPX0FERFJFU1MoREFWSU5DSV9BUk1fSU5UQ19CQVNFKQorCQkuZW5kbQorCisJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCQkuZW5kbQorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJbGRyIFx0bXAsIFtcYmFzZSwgIzB4MTRdCisJCW1vdiBcdG1wLCBcdG1wLCBsc3IgIzIKKwkJc3ViIFxpcnFuciwgXHRtcCwgIzEKKwkJY21wIFx0bXAsICMwCisJCS5lbmRtCisKKwkJLm1hY3JvCWlycV9wcmlvX3RhYmxlCisJCS5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzNjJkOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvaGFyZHdhcmUuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogQ29tbW9uIGhhcmR3YXJlIGRlZmluaXRpb25zCisgKgorICogQXV0aG9yOiBLZXZpbiBIaWxtYW4sIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDcgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorCisjZW5kaWYgLyogX19BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdhY2NiOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvaW8uaApAQCAtMCwwICsxLDc5IEBACisvKgorICogRGFWaW5jaSBJTyBhZGRyZXNzIGRlZmluaXRpb25zCisgKgorICogQ29waWVkIGZyb20gaW5jbHVkZS9hc20vYXJtL2FyY2gtb21hcC9pby5oCisgKgorICogMjAwNyAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSS9PIG1hcHBpbmcKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBJT19QSFlTCQkweDAxYzAwMDAwCisjZGVmaW5lIElPX09GRlNFVAkweGZkMDAwMDAwIC8qIFZpcnR1YWwgSU8gPSAweGZlYzAwMDAwICovCisjZGVmaW5lIElPX1NJWkUJCTB4MDA0MDAwMDAKKyNkZWZpbmUgSU9fVklSVAkJKElPX1BIWVMgKyBJT19PRkZTRVQpCisjZGVmaW5lIGlvX3AydihwYSkJKChwYSkgKyBJT19PRkZTRVQpCisjZGVmaW5lIGlvX3YycCh2YSkJKCh2YSkgLSBJT19PRkZTRVQpCisjZGVmaW5lIElPX0FERFJFU1MoeCkJaW9fcDJ2KHgpCisKKy8qCisgKiBXZSBkb24ndCBhY3R1YWxseSBoYXZlIHJlYWwgSVNBIG5vciBQQ0kgYnVzZXMsIGJ1dCB0aGVyZSBpcyBzbyBtYW55CisgKiBkcml2ZXJzIG91dCB0aGVyZSB0aGF0IG1pZ2h0IGp1c3Qgd29yayBpZiB3ZSBmYWtlIHRoZW0uLi4KKyAqLworI2RlZmluZSBQQ0lPX0JBU0UgICAgICAgICAgICAgICAwCisjZGVmaW5lIF9faW8oYSkJCQkoKHZvaWQgX19pb21lbSAqKShQQ0lPX0JBU0UgKyAoYSkpKQorI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorI2RlZmluZSBfX21lbV9pc2EoYSkJCShhKQorCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworLyoKKyAqIEZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhlIERhVmluY2kgSU8gcmVnaW9uCisgKgorICogTk9URTogLSBVc2UgZGF2aW5jaV9yZWFkL3dyaXRlW2J3bF0gZm9yIHBoeXNpY2FsIHJlZ2lzdGVyIGFkZHJlc3NlcworICoJIC0gVXNlIF9fcmF3X3JlYWQvd3JpdGVbYndsXSgpIGZvciB2aXJ0dWFsIHJlZ2lzdGVyIGFkZHJlc3NlcworICoJIC0gVXNlIElPX0FERFJFU1MocGh5c19hZGRyKSB0byBjb252ZXJ0IHJlZ2lzdGVycyB0byB2aXJ0dWFsIGFkZHJlc3NlcworICoJIC0gRE8gTk9UIHVzZSBoYXJkY29kZWQgdmlydHVhbCBhZGRyZXNzZXMgdG8gYWxsb3cgY2hhbmdpbmcgdGhlCisgKgkgICBJTyBhZGRyZXNzIHNwYWNlIGFnYWluIGlmIG5lZWRlZAorICovCisjZGVmaW5lIGRhdmluY2lfcmVhZGIoYSkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKilJT19BRERSRVNTKGEpKQorI2RlZmluZSBkYXZpbmNpX3JlYWR3KGEpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSU9fQUREUkVTUyhhKSkKKyNkZWZpbmUgZGF2aW5jaV9yZWFkbChhKQkoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgICAqKUlPX0FERFJFU1MoYSkpCisKKyNkZWZpbmUgZGF2aW5jaV93cml0ZWIodixhKQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqKUlPX0FERFJFU1MoYSkgPSAodikpCisjZGVmaW5lIGRhdmluY2lfd3JpdGV3KHYsYSkJKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilJT19BRERSRVNTKGEpID0gKHYpKQorI2RlZmluZSBkYXZpbmNpX3dyaXRlbCh2LGEpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAgICopSU9fQUREUkVTUyhhKSA9ICh2KSkKKworLyogMTYgYml0IHVzZXMgTERSSC9TVFJILCBiYXNlICsvLSBvZmZzZXRfOCAqLwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSB1MTYgb2Zmc2V0WzI1Nl07IH0gX19yZWdiYXNlMTY7CisjZGVmaW5lIF9fUkVHVjE2KHZhZGRyKQkJKChfX3JlZ2Jhc2UxNiAqKSgodmFkZHIpJn4weGZmKSkgXAorCQkJCQktPm9mZnNldFsoKHZhZGRyKSYweGZmKT4+MV0KKyNkZWZpbmUgX19SRUcxNihwYWRkcikgICAgICAgICAgX19SRUdWMTYoaW9fcDJ2KHBhZGRyKSkKKworLyogOC8zMiBiaXQgdXNlcyBMRFIvU1RSLCBiYXNlICsvLSBvZmZzZXRfMTIgKi8KK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgdTggb2Zmc2V0WzQwOTZdOyB9IF9fcmVnYmFzZTg7CisjZGVmaW5lIF9fUkVHVjgodmFkZHIpCQkoKF9fcmVnYmFzZTggICopKCh2YWRkcikmfjQwOTUpKSBcCisJCQkJCS0+b2Zmc2V0WygodmFkZHIpJjQwOTUpPj4wXQorI2RlZmluZSBfX1JFRzgocGFkZHIpCQlfX1JFR1Y4KGlvX3AydihwYWRkcikpCisKK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgdTMyIG9mZnNldFs0MDk2XTsgfSBfX3JlZ2Jhc2UzMjsKKyNkZWZpbmUgX19SRUdWMzIodmFkZHIpCQkoKF9fcmVnYmFzZTMyICopKCh2YWRkcikmfjQwOTUpKSBcCisJCQkJCS0+b2Zmc2V0WygodmFkZHIpJjQwOTUpPj4yXQorCisjZGVmaW5lIF9fUkVHKHBhZGRyKQkJX19SRUdWMzIoaW9fcDJ2KHBhZGRyKSkKKyNlbHNlCisKKyNkZWZpbmUgX19SRUcoeCkJKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilpb19wMnYoeCkpKQorCisjZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGM1Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9pcnFzLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBEYVZpbmNpIGludGVycnVwdCBjb250cm9sbGVyIGRlZmluaXRpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBUZXhhcyBJbnN0cnVtZW50cy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICisKKy8qIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBEQVZJTkNJX0FSTV9JTlRDX0JBU0UgMHgwMUM0ODAwMAorCisvKiBJbnRlcnJ1cHQgbGluZXMgKi8KKyNkZWZpbmUgSVJRX1ZESU5UMCAgICAgICAwCisjZGVmaW5lIElSUV9WRElOVDEgICAgICAgMQorI2RlZmluZSBJUlFfVkRJTlQyICAgICAgIDIKKyNkZWZpbmUgSVJRX0hJU1RJTlQgICAgICAzCisjZGVmaW5lIElSUV9IM0FJTlQgICAgICAgNAorI2RlZmluZSBJUlFfUFJWVUlOVCAgICAgIDUKKyNkZWZpbmUgSVJRX1JTWklOVCAgICAgICA2CisjZGVmaW5lIElSUV9WRk9DSU5UICAgICAgNworI2RlZmluZSBJUlFfVkVOQ0lOVCAgICAgIDgKKyNkZWZpbmUgSVJRX0FTUUlOVCAgICAgICA5CisjZGVmaW5lIElSUV9JTVhJTlQgICAgICAgMTAKKyNkZWZpbmUgSVJRX1ZMQ0RJTlQgICAgICAxMQorI2RlZmluZSBJUlFfVVNCSU5UICAgICAgIDEyCisjZGVmaW5lIElSUV9FTUFDSU5UICAgICAgMTMKKworI2RlZmluZSBJUlFfQ0NJTlQwICAgICAgIDE2CisjZGVmaW5lIElSUV9DQ0VSUklOVCAgICAgMTcKKyNkZWZpbmUgSVJRX1RDRVJSSU5UMCAgICAxOAorI2RlZmluZSBJUlFfVENFUlJJTlQgICAgIDE5CisjZGVmaW5lIElSUV9QU0NJTiAgICAgICAgMjAKKworI2RlZmluZSBJUlFfSURFICAgICAgICAgIDIyCisjZGVmaW5lIElSUV9IUElJTlQgICAgICAgMjMKKyNkZWZpbmUgSVJRX01CWElOVCAgICAgICAyNAorI2RlZmluZSBJUlFfTUJSSU5UICAgICAgIDI1CisjZGVmaW5lIElSUV9NTUNJTlQgICAgICAgMjYKKyNkZWZpbmUgSVJRX1NESU9JTlQgICAgICAyNworI2RlZmluZSBJUlFfTVNJTlQgICAgICAgIDI4CisjZGVmaW5lIElSUV9ERFJJTlQgICAgICAgMjkKKyNkZWZpbmUgSVJRX0FFTUlGSU5UICAgICAzMAorI2RlZmluZSBJUlFfVkxRSU5UICAgICAgIDMxCisjZGVmaW5lIElSUV9USU5UMF9USU5UMTIgMzIKKyNkZWZpbmUgSVJRX1RJTlQwX1RJTlQzNCAzMworI2RlZmluZSBJUlFfVElOVDFfVElOVDEyIDM0CisjZGVmaW5lIElSUV9USU5UMV9USU5UMzQgMzUKKyNkZWZpbmUgSVJRX1BXTUlOVDAgICAgICAzNgorI2RlZmluZSBJUlFfUFdNSU5UMSAgICAgIDM3CisjZGVmaW5lIElSUV9QV01JTlQyICAgICAgMzgKKyNkZWZpbmUgSVJRX0kyQyAgICAgICAgICAzOQorI2RlZmluZSBJUlFfVUFSVElOVDAgICAgIDQwCisjZGVmaW5lIElSUV9VQVJUSU5UMSAgICAgNDEKKyNkZWZpbmUgSVJRX1VBUlRJTlQyICAgICA0MgorI2RlZmluZSBJUlFfU1BJTlQwICAgICAgIDQzCisjZGVmaW5lIElSUV9TUElOVDEgICAgICAgNDQKKworI2RlZmluZSBJUlFfRFNQMkFSTTAgICAgIDQ2CisjZGVmaW5lIElSUV9EU1AyQVJNMSAgICAgNDcKKyNkZWZpbmUgSVJRX0dQSU8wICAgICAgICA0OAorI2RlZmluZSBJUlFfR1BJTzEgICAgICAgIDQ5CisjZGVmaW5lIElSUV9HUElPMiAgICAgICAgNTAKKyNkZWZpbmUgSVJRX0dQSU8zICAgICAgICA1MQorI2RlZmluZSBJUlFfR1BJTzQgICAgICAgIDUyCisjZGVmaW5lIElSUV9HUElPNSAgICAgICAgNTMKKyNkZWZpbmUgSVJRX0dQSU82ICAgICAgICA1NAorI2RlZmluZSBJUlFfR1BJTzcgICAgICAgIDU1CisjZGVmaW5lIElSUV9HUElPQk5LMCAgICAgNTYKKyNkZWZpbmUgSVJRX0dQSU9CTksxICAgICA1NworI2RlZmluZSBJUlFfR1BJT0JOSzIgICAgIDU4CisjZGVmaW5lIElSUV9HUElPQk5LMyAgICAgNTkKKyNkZWZpbmUgSVJRX0dQSU9CTks0ICAgICA2MAorI2RlZmluZSBJUlFfQ09NTVRYICAgICAgIDYxCisjZGVmaW5lIElSUV9DT01NUlggICAgICAgNjIKKyNkZWZpbmUgSVJRX0VNVUlOVCAgICAgICA2MworCisjZGVmaW5lIERBVklOQ0lfTl9BSU5UQ19JUlEJNjQKKyNkZWZpbmUgREFWSU5DSV9OX0dQSU8JCTcxCisKKyNkZWZpbmUgTlJfSVJRUwkJCShEQVZJTkNJX05fQUlOVENfSVJRICsgREFWSU5DSV9OX0dQSU8pCisKKyNkZWZpbmUgQVJDSF9USU1FUl9JUlEgSVJRX1RJTlQxX1RJTlQzNAorCisjZW5kaWYgLyogX19BU01fQVJDSF9JUlFTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTYyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL21lbW9yeS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBEYVZpbmNpIG1lbW9yeSBzcGFjZSBkZWZpbml0aW9ucworICoKKyAqIEF1dGhvcjogS2V2aW4gSGlsbWFuLCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA3IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluY2x1ZGVkIEZpbGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBEQVZJTkNJX0REUl9CQVNFICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgREFWSU5DSV9JUkFNX0JBU0UgICAweDAwMDA4MDAwIC8qIEFSTSBJbnRlcm5hbCBSQU0gKi8KKworI2RlZmluZSBQSFlTX09GRlNFVCBEQVZJTkNJX0REUl9CQVNFCisKKy8qCisgKiBJbmNyZWFzZSBzaXplIG9mIERNQS1jb25zaXN0ZW50IG1lbW9yeSByZWdpb24KKyAqLworI2RlZmluZSBDT05TSVNURU5UX0RNQV9TSVpFICgxNDw8MjApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogUmVzdHJpY3QgRE1BLWFibGUgcmVnaW9uIHRvIHdvcmthcm91bmQgc2lsaWNvbiBidWcuICBUaGUgYnVnCisgKiByZXN0cmljdHMgYnVmZmVycyBhdmFpbGFibGUgZm9yIERNQSB0byB2aWRlbyBoYXJkd2FyZSB0byBiZQorICogYmVsb3cgMTI4TQorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYXJjaF9hZGp1c3Rfem9uZXMoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmhvbGVzKQoreworCXVuc2lnbmVkIGludCBzeiA9ICgxMjg8PDIwKSA+PiBQQUdFX1NISUZUOworCisJaWYgKG5vZGUgIT0gMCkKKwkJc3ogPSAwOworCisJc2l6ZVsxXSA9IHNpemVbMF0gLSBzejsKKwlzaXplWzBdID0gc3o7Cit9CisKKyNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMobm9kZSwgem9uZV9zaXplLCBob2xlcykgXAorICAgICAgICBpZiAoKG1lbWluZm8uYmFua1swXS5zaXplID4+IDIwKSA+IDEyOCkgX19hcmNoX2FkanVzdF96b25lcyhub2RlLCB6b25lX3NpemUsIGhvbGVzKQorCisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECShQSFlTX09GRlNFVCArICgxMjg8PDIwKSAtIDEpCisKKyNlbmRpZgorCisvKgorICogQnVzIGFkZHJlc3MgaXMgcGh5c2ljYWwgYWRkcmVzcworICovCisjZGVmaW5lIF9fdmlydF90b19idXMoeCkJX192aXJ0X3RvX3BoeXMoeCkKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KQlfX3BoeXNfdG9fdmlydCh4KQorCisjZW5kaWYgLyogX19BU01fQVJDSF9NRU1PUllfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9wc2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvcHNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3N2FhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvcHNjLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBEYVZpbmNpIFBvd2VyICYgU2xlZXAgQ29udHJvbGxlciAoUFNDKSBkZWZpbmVzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBUZXhhcyBJbnN0cnVtZW50cy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfUFNDX0gKKyNkZWZpbmUgX19BU01fQVJDSF9QU0NfSAorCisvKiBQb3dlciBhbmQgU2xlZXAgQ29udHJvbGxlciAoUFNDKSBEb21haW5zICovCisjZGVmaW5lIERBVklOQ0lfR1BTQ19BUk1ET01BSU4gICAgICAwCisjZGVmaW5lIERBVklOQ0lfR1BTQ19EU1BET01BSU4gICAgICAxCisKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1ZQU1NNU1RSICAgICAgIDAKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1ZQU1NTTFYgICAgICAgIDEKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1RQQ0MgICAgICAgICAgIDIKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1RQVEMwICAgICAgICAgIDMKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1RQVEMxICAgICAgICAgIDQKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0VNQUMgICAgICAgICAgIDUKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0VNQUNfV1JBUFBFUiAgIDYKKyNkZWZpbmUgREFWSU5DSV9MUFNDX01ESU8gICAgICAgICAgIDcKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0lFRUUxMzk0ICAgICAgIDgKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1VTQiAgICAgICAgICAgIDkKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0FUQSAgICAgICAgICAgIDEwCisjZGVmaW5lIERBVklOQ0lfTFBTQ19WTFlOUSAgICAgICAgICAxMQorI2RlZmluZSBEQVZJTkNJX0xQU0NfVUhQSSAgICAgICAgICAgMTIKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0REUl9FTUlGICAgICAgIDEzCisjZGVmaW5lIERBVklOQ0lfTFBTQ19BRU1JRiAgICAgICAgICAxNAorI2RlZmluZSBEQVZJTkNJX0xQU0NfTU1DX1NEICAgICAgICAgMTUKKyNkZWZpbmUgREFWSU5DSV9MUFNDX01FTVNUSUNLICAgICAgIDE2CisjZGVmaW5lIERBVklOQ0lfTFBTQ19NY0JTUCAgICAgICAgICAxNworI2RlZmluZSBEQVZJTkNJX0xQU0NfSTJDICAgICAgICAgICAgMTgKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1VBUlQwICAgICAgICAgIDE5CisjZGVmaW5lIERBVklOQ0lfTFBTQ19VQVJUMSAgICAgICAgICAyMAorI2RlZmluZSBEQVZJTkNJX0xQU0NfVUFSVDIgICAgICAgICAgMjEKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1NQSSAgICAgICAgICAgIDIyCisjZGVmaW5lIERBVklOQ0lfTFBTQ19QV00wICAgICAgICAgICAyMworI2RlZmluZSBEQVZJTkNJX0xQU0NfUFdNMSAgICAgICAgICAgMjQKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1BXTTIgICAgICAgICAgIDI1CisjZGVmaW5lIERBVklOQ0lfTFBTQ19HUElPICAgICAgICAgICAyNgorI2RlZmluZSBEQVZJTkNJX0xQU0NfVElNRVIwICAgICAgICAgMjcKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1RJTUVSMSAgICAgICAgIDI4CisjZGVmaW5lIERBVklOQ0lfTFBTQ19USU1FUjIgICAgICAgICAyOQorI2RlZmluZSBEQVZJTkNJX0xQU0NfU1lTVEVNX1NVQlNZUyAgMzAKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0FSTSAgICAgICAgICAgIDMxCisjZGVmaW5lIERBVklOQ0lfTFBTQ19TQ1IyICAgICAgICAgICAzMgorI2RlZmluZSBEQVZJTkNJX0xQU0NfU0NSMyAgICAgICAgICAgMzMKKyNkZWZpbmUgREFWSU5DSV9MUFNDX1NDUjQgICAgICAgICAgIDM0CisjZGVmaW5lIERBVklOQ0lfTFBTQ19DUk9TU0JBUiAgICAgICAzNQorI2RlZmluZSBEQVZJTkNJX0xQU0NfQ0ZHMjcgICAgICAgICAgMzYKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0NGRzMgICAgICAgICAgIDM3CisjZGVmaW5lIERBVklOQ0lfTFBTQ19DRkc1ICAgICAgICAgICAzOAorI2RlZmluZSBEQVZJTkNJX0xQU0NfR0VNICAgICAgICAgICAgMzkKKyNkZWZpbmUgREFWSU5DSV9MUFNDX0lNQ09QICAgICAgICAgIDQwCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1BTQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDQxOGVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9zZXJpYWwuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogRGFWaW5jaSBzZXJpYWwgZGV2aWNlIGRlZmluaXRpb25zCisgKgorICogQXV0aG9yOiBLZXZpbiBIaWxtYW4sIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDcgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9TRVJJQUxfSAorI2RlZmluZSBfX0FTTV9BUkNIX1NFUklBTF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgorCisjZGVmaW5lIERBVklOQ0lfVUFSVDBfQkFTRSAgIChJT19QSFlTICsgMHgyMDAwMCkKKyNkZWZpbmUgREFWSU5DSV9VQVJUMV9CQVNFICAgKElPX1BIWVMgKyAweDIwNDAwKQorI2RlZmluZSBEQVZJTkNJX1VBUlQyX0JBU0UgICAoSU9fUEhZUyArIDB4MjA4MDApCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1NFUklBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDBhYzUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9zeXN0ZW0uaApAQCAtMCwwICsxLDI5IEBACisvKgorICogRGFWaW5jaSBzeXN0ZW0gZGVmaW5lcworICoKKyAqIEF1dGhvcjogS2V2aW4gSGlsbWFuLCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA3IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKK2V4dGVybiB2b2lkIGRhdmluY2lfd2F0Y2hkb2dfcmVzZXQodm9pZCk7CisKK3N0YXRpYyB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQoreworCWRhdmluY2lfd2F0Y2hkb2dfcmVzZXQoKTsKK30KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjgyNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS90aW1leC5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBEYVZpbmNpIHRpbWVyIGRlZmluZXMKKyAqCisgKiBBdXRob3I6IEtldmluIEhpbG1hbiwgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwNyAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICisKKy8qIFRoZSBzb3VyY2UgZnJlcXVlbmN5IGZvciB0aGUgdGltZXJzIGlzIHRoZSAyN01IeiBjbG9jayAqLworI2RlZmluZSBDTE9DS19USUNLX1JBVEUgMjcwMDAwMDAKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVElNRVhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZDE1NzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogU2VyaWFsIHBvcnQgc3R1YnMgZm9yIGtlcm5lbCBkZWNvbXByZXNzIHN0YXR1cyBtZXNzYWdlcworICoKKyAqICBBdXRob3I6ICAgICBBbmFudCBHb2xlCisgKiAoQykgQ29weXJpZ2h0IChDKSAyMDA2LCBUZXhhcyBJbnN0cnVtZW50cywgSW5jCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc2VyaWFsLmg+CisKKy8qIFBPUlRfMTZDNTUwQSwgaW4gcG9sbGVkIG5vbi1maWZvIG1vZGUgKi8KKworc3RhdGljIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJdm9sYXRpbGUgdTMyICp1YXJ0ID0gKHZvbGF0aWxlIHZvaWQgKikgREFWSU5DSV9VQVJUMF9CQVNFOworCisJd2hpbGUgKCEodWFydFtVQVJUX0xTUl0gJiBVQVJUX0xTUl9USFJFKSkKKwkJYmFycmllcigpOworCXVhcnRbVUFSVF9UWF0gPSBjOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKK3sKKwl2b2xhdGlsZSB1MzIgKnVhcnQgPSAodm9sYXRpbGUgdm9pZCAqKSBEQVZJTkNJX1VBUlQwX0JBU0U7CisJd2hpbGUgKCEodWFydFtVQVJUX0xTUl0gJiBVQVJUX0xTUl9USFJFKSkKKwkJYmFycmllcigpOworfQorCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNDdmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL3ZtYWxsb2MuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogRGFWaW5jaSB2bWFsbG9jIGRlZmluaXRpb25zCisgKgorICogQXV0aG9yOiBLZXZpbiBIaWxtYW4sIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDcgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKworLyogQWxsb3cgdm1hbGxvYyByYW5nZSB1bnRpbCB0aGUgSU8gdmlydHVhbCByYW5nZSBtaW51cyBhIDJNICJob2xlIiAqLworI2RlZmluZSBWTUFMTE9DX0VORAkgIChJT19WSVJUIC0gKDI8PDIwKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZW50cnktbWFjcm8uUwppbmRleCBhYTIzYzVkLi5mMjQyYmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9lbnRyeS1tYWNyby5TCkBAIC0xNiwxMyArMTYsMTMgQEAKIAkuZW5kbQogCiAJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCW1vdglcYmFzZSwgI0lSUV9TVEFUCiAJLmVuZG0KIAogCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgogCS5lbmRtCiAKIAkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgc3RhdCwgYmFzZSwgdG1wCi0JbW92CVxiYXNlLCAjSVJRX1NUQVQKIAlsZHJiCVxzdGF0LCBbXGJhc2VdCQkJQCBnZXQgaW50ZXJydXB0cwogCW1vdglcaXJxbnIsICMwCiAJdHN0CVxzdGF0LCAjMTUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvZW50cnktbWFjcm8uUwppbmRleCA0MjAzZGJmLi5lNjMwNjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9lbnRyeS1tYWNyby5TCkBAIC0xMSwyNCArMTEsMjQgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYzIxMjg1Lmg+CiAKKwkJLmVxdQlkYzIxMjg1X2hpZ2gsIEFSTUNTUl9CQVNFICYgMHhmZjAwMDAwMAorCQkuZXF1CWRjMjEyODVfbG93LCBBUk1DU1JfQkFTRSAmIDB4MDBmZmZmZmYKKwogCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KIAogCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCW1vdglcYmFzZSwgI2RjMjEyODVfaGlnaAorCQkuaWYJZGMyMTI4NV9sb3cKKwkJb3JyCVxiYXNlLCBcYmFzZSwgI2RjMjEyODVfbG93CisJCS5lbmRpZgogCQkuZW5kbQogCiAJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgogCQkuZW5kbQogCi0JCS5lcXUJZGMyMTI4NV9oaWdoLCBBUk1DU1JfQkFTRSAmIDB4ZmYwMDAwMDAKLQkJLmVxdQlkYzIxMjg1X2xvdywgQVJNQ1NSX0JBU0UgJiAweDAwZmZmZmZmCi0KIAkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCQltb3YJcjQsICNkYzIxMjg1X2hpZ2gKLQkJLmlmCWRjMjEyODVfbG93Ci0JCW9ycglyNCwgcjQsICNkYzIxMjg1X2xvdwotCQkuZW5kaWYKLQkJbGRyCVxpcnFzdGF0LCBbcjQsICMweDE4MF0JCUAgZ2V0IGludGVycnVwdHMKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMweDE4MF0JQCBnZXQgaW50ZXJydXB0cwogCiAJCW1vdglcaXJxbnIsICNJUlFfU0RSQU1QQVJJVFkKIAkJdHN0CVxpcnFzdGF0LCAjSVJRX01BU0tfU0RSQU1QQVJJVFkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pbXgtcmVncy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1yZWdzLmgKaW5kZXggZGU2NDk0YS4uMzBkZTQwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1yZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1yZWdzLmgKQEAgLTI5Nyw3ICsyOTcsNyBAQAogI2RlZmluZSBTQVIoeCkgIF9fUkVHMiggSU1YX0RNQUNfQkFTRSArIDB4ODAsICh4KSA8PCA2KQkvKiBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlcnMgKi8KICNkZWZpbmUgREFSKHgpICBfX1JFRzIoIElNWF9ETUFDX0JBU0UgKyAweDg0LCAoeCkgPDwgNikJLyogRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlcnMgKi8KICNkZWZpbmUgQ05UUih4KSBfX1JFRzIoIElNWF9ETUFDX0JBU0UgKyAweDg4LCAoeCkgPDwgNikJLyogQ291bnQgUmVnaXN0ZXJzICovCi0jZGVmaW5lIENDUih4KSAgX19SRUcyKCBJTVhfRE1BQ19CQVNFICsgMHg4YywgKHgpIDw8IDYpCS8qoENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIENDUih4KSAgX19SRUcyKCBJTVhfRE1BQ19CQVNFICsgMHg4YywgKHgpIDw8IDYpCS8qIENvbnRyb2wgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFJTU1IoeCkgX19SRUcyKCBJTVhfRE1BQ19CQVNFICsgMHg5MCwgKHgpIDw8IDYpCS8qIFJlcXVlc3Qgc291cmNlIHNlbGVjdCBSZWdpc3RlcnMgKi8KICNkZWZpbmUgQkxSKHgpICBfX1JFRzIoIElNWF9ETUFDX0JBU0UgKyAweDk0LCAoeCkgPDwgNikJLyogQnVyc3QgbGVuZ3RoIFJlZ2lzdGVycyAqLwogI2RlZmluZSBSVE9SKHgpIF9fUkVHMiggSU1YX0RNQUNfQkFTRSArIDB4OTgsICh4KSA8PCA2KQkvKiBSZXF1ZXN0IHRpbWVvdXQgUmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3BsYXRmb3JtLmgKaW5kZXggOTZhZDNkMi4uODNjNGMxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvcGxhdGZvcm0uaApAQCAtMTcsNyArMTcsNyBAQAogICogICAgICAgICAgICAgICAgIGZyb20gLnMgZmlsZSBieSBhd2sgLWYgczJoLmF3awogICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICogQ29weXJpZ2h0IKkgQVJNIExpbWl0ZWQgMTk5OC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAqIENvcHlyaWdodCDCqSBBUk0gTGltaXRlZCAxOTk4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9zbXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3Ivc21wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMmM3OWIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9zbXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSNpZm5kZWYgQVNNQVJNX0FSQ0hfU01QX0gKLSNkZWZpbmUgQVNNQVJNX0FSQ0hfU01QX0gKLQotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJCQkJXAotCSh7CQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgY3B1bnVtOwkJCVwKLQkJX19hc21fXygibXJjIHAxNSwgMCwgJTAsIGMwLCBjMCwgNSIJXAotCQkJOiAiPXIiIChjcHVudW0pKTsJCVwKLQkJY3B1bnVtICY9IDB4MEY7CQkJCVwKLQl9KQotCi1leHRlcm4gdm9pZCBzZWNvbmRhcnlfc2Nhbl9pcnFzKHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvaW8uaAppbmRleCA3ZGZmZjRhLi5hNmUwZjllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9pby5oCkBAIC0yNyw3ICsyNyw3IEBACiAKIGV4dGVybiB2b2lkIF9faW9tZW0gKiBfX2lvcDEzeHhfaW8odW5zaWduZWQgbG9uZyBpb19hZGRyKTsKIGV4dGVybiB2b2lkIF9faW9tZW0gKl9faW9wMTN4eF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgY29va2llLCBzaXplX3Qgc2l6ZSwKLQl1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwl1bnNpZ25lZCBpbnQgbXR5cGUpOwogZXh0ZXJuIHZvaWQgX19pb3AxM3h4X2lvdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKTsKIAogZXh0ZXJuIHUzMiBpb3AxM3h4X2F0dWVfbWVtX2Jhc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2lvcDEzeHguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvaW9wMTN4eC5oCmluZGV4IDg1NzA3ZTkuLmU2NzM2YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvaW9wMTN4eC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvaW9wMTN4eC5oCkBAIC0xODEsNiArMTgxLDcgQEAKICNkZWZpbmUgSU9QMTNYWF9BRE1BMV9QTU1SX09GRlNFVCAgCTB4MDAwMDAyMDAKICNkZWZpbmUgSU9QMTNYWF9BRE1BMl9QTU1SX09GRlNFVCAgCTB4MDAwMDA0MDAKICNkZWZpbmUgSU9QMTNYWF9QQklfUE1NUl9PRkZTRVQgICAgCTB4MDAwMDE1ODAKKyNkZWZpbmUgSU9QMTNYWF9NVV9QTU1SX09GRlNFVAkJMHgwMDAwNDAwMAogI2RlZmluZSBJT1AxM1hYX0VTU1IwX1BNTVJfT0ZGU0VUICAJMHgwMDAwMjE4OAogI2RlZmluZSBJT1AxM1hYX0VTU1IwCQkJSU9QMTNYWF9SRUdfQUREUjMyKDB4MDAwMDIxODgpCiAKQEAgLTQxMiw2ICs0MTMsMzQgQEAKICNkZWZpbmUgSU9QMTNYWF9BVFVfT1VNQkFSX0ZVTkNfTlVNX01BU0sgIAkoMHg3KQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PU1FU1NBR0lORyBVTklUPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBJT1AxM1hYX01VX09GRlNFVChvZnMpCUlPUDEzWFhfUkVHX0FERFIzMihJT1AxM1hYX01VX1BNTVJfT0ZGU0VUICtcCisJCQkJCQkJKG9mcykpCisKKyNkZWZpbmUgSU9QMTNYWF9NVV9JTVIwCUlPUDEzWFhfTVVfT0ZGU0VUKDB4MTApCisjZGVmaW5lIElPUDEzWFhfTVVfSU1SMQlJT1AxM1hYX01VX09GRlNFVCgweDE0KQorI2RlZmluZSBJT1AxM1hYX01VX09NUjAJSU9QMTNYWF9NVV9PRkZTRVQoMHgxOCkKKyNkZWZpbmUgSU9QMTNYWF9NVV9PTVIxCUlPUDEzWFhfTVVfT0ZGU0VUKDB4MUMpCisjZGVmaW5lIElPUDEzWFhfTVVfSURSCSAgICAgICAJSU9QMTNYWF9NVV9PRkZTRVQoMHgyMCkKKyNkZWZpbmUgSU9QMTNYWF9NVV9JSVNSCUlPUDEzWFhfTVVfT0ZGU0VUKDB4MjQpCisjZGVmaW5lIElPUDEzWFhfTVVfSUlNUglJT1AxM1hYX01VX09GRlNFVCgweDI4KQorI2RlZmluZSBJT1AxM1hYX01VX09EUgkgICAgICAgCUlPUDEzWFhfTVVfT0ZGU0VUKDB4MkMpCisjZGVmaW5lIElPUDEzWFhfTVVfT0lTUglJT1AxM1hYX01VX09GRlNFVCgweDMwKQorI2RlZmluZSBJT1AxM1hYX01VX09JTVIJSU9QMTNYWF9NVV9PRkZTRVQoMHgzNCkKKyNkZWZpbmUgSU9QMTNYWF9NVV9JUkNTUiAgICAgIAlJT1AxM1hYX01VX09GRlNFVCgweDM4KQorI2RlZmluZSBJT1AxM1hYX01VX09SQ1NSICAgICAgCUlPUDEzWFhfTVVfT0ZGU0VUKDB4M0MpCisjZGVmaW5lIElPUDEzWFhfTVVfTUlNUglJT1AxM1hYX01VX09GRlNFVCgweDQ4KQorI2RlZmluZSBJT1AxM1hYX01VX01VQ1IJSU9QMTNYWF9NVV9PRkZTRVQoMHg1MCkKKyNkZWZpbmUgSU9QMTNYWF9NVV9RQkFSCUlPUDEzWFhfTVVfT0ZGU0VUKDB4NTQpCisjZGVmaW5lIElPUDEzWFhfTVVfTVVCQVIgICAgICAJSU9QMTNYWF9NVV9PRkZTRVQoMHg4NCkKKworI2RlZmluZSBJT1AxM1hYX01VX1dJTkRPV19TSVpFCSg4ICogMTAyNCkKKyNkZWZpbmUgSU9QMTNYWF9NVV9CQVNFX1BIWVMJKDB4ZmYwMDAwMDApCisjZGVmaW5lIElPUDEzWFhfTVVfQkFTRV9QQ0kJKDB4ZmYwMDAwMDApCisjZGVmaW5lIElPUDEzWFhfTVVfTUlNUl9QQ0kJKElPUDEzWFhfTVVfQkFTRV9QQ0kgKyAweDQ4KQorI2RlZmluZSBJT1AxM1hYX01VX01JTVJfQ09SRV9TRUxFQ1QgKDE1KQorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09QURNQSBVTklUUz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogI2RlZmluZSBJT1AxM1hYX0FETUFfUEhZU19CQVNFKGNoYW4pCUlPUDEzWFhfUkVHX0FERFIzMl9QSFlTKChjaGFuIDw8IDkpKQogI2RlZmluZSBJT1AxM1hYX0FETUFfVVBQRVJfUEEoY2hhbikJKElPUDEzWFhfQURNQV9QSFlTX0JBU0UoY2hhbikgKyAweGMwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2lycXMuaAppbmRleCA1YzZmYWMyLi4wNTRlN2FjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2lycXMuaApAQCAtMTY4LDcgKzE2OCw3IEBACiAjZGVmaW5lIElSUV9JT1AxM1hYX0FUVUVfSU1ECSgxMTApIC8qIDE0ICovCiAjZGVmaW5lIElSUV9JT1AxM1hYX01VX01TSV9UQgkoMTExKSAvKiAxNSAqLwogI2RlZmluZSBJUlFfSU9QMTNYWF9SU1ZEXzExMgkoMTEyKSAvKiAxNiAqLwotI2RlZmluZSBJUlFfSU9QMTNYWF9SU1ZEXzExMwkoMTEzKSAvKiAxNyAqLworI2RlZmluZSBJUlFfSU9QMTNYWF9JTkJEX01TSQkoMTEzKSAvKiAxNyAqLwogI2RlZmluZSBJUlFfSU9QMTNYWF9SU1ZEXzExNAkoMTE0KSAvKiAxOCAqLwogI2RlZmluZSBJUlFfSU9QMTNYWF9SU1ZEXzExNQkoMTE1KSAvKiAxOSAqLwogI2RlZmluZSBJUlFfSU9QMTNYWF9SU1ZEXzExNgkoMTE2KSAvKiAyMCAqLwpAQCAtMTg0LDcgKzE4NCwxMyBAQAogI2RlZmluZSBJUlFfSU9QMTNYWF9SU1ZEXzEyNgkoMTI2KSAvKiAzMCAqLwogI2RlZmluZSBJUlFfSU9QMTNYWF9IUEkJKDEyNykgLyogMzEgKi8KIAorI2lmZGVmIENPTkZJR19QQ0lfTVNJCisjZGVmaW5lIElSUV9JT1AxM1hYX01TSV8wCShJUlFfSU9QMTNYWF9IUEkgKyAxKQorI2RlZmluZSBOUl9JT1AxM1hYX0lSUVMgCShJUlFfSU9QMTNYWF9NU0lfMCArIDEyOCkKKyNlbHNlCiAjZGVmaW5lIE5SX0lPUDEzWFhfSVJRUwkoSVJRX0lPUDEzWFhfSFBJICsgMSkKKyNlbmRpZgorCiAjZGVmaW5lIE5SX0lSUVMJCU5SX0lPUDEzWFhfSVJRUwogCiAjZW5kaWYgLyogX0lPUDEzWFhfSVJRX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L21zaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9tc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODBjNWFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9tc2kuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9JT1AxM1hYX01TSV9IXworI2RlZmluZSBfSU9QMTNYWF9NU0lfSF8KKyNpZmRlZiBDT05GSUdfUENJX01TSQordm9pZCBpb3AxM3h4X21zaV9pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3AxM3h4X21zaV9pbml0KHZvaWQpCit7CisJcmV0dXJuOworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9nbGFudGFuay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2dsYW50YW5rLmgKaW5kZXggM2IwNjU2MS4uYmYwNjY1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2dsYW50YW5rLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2dsYW50YW5rLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogaW5jbHVkZS9hc20vYXJjaC1pb3AzMngvZ2xhbnRhbmsuaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2dsYW50YW5rLmgKICAqCiAgKiBJTy1EYXRhIEdMQU4gVGFuayBib2FyZCByZWdpc3RlcnMKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvaW8uaAppbmRleCA5OTRmMTZhLi45NThhZjc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvaW8uaApAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCiBleHRlcm4gdm9pZCBfX2lvbWVtICpfX2lvcDN4eF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgY29va2llLCBzaXplX3Qgc2l6ZSwKLQl1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwl1bnNpZ25lZCBpbnQgbXR5cGUpOwogZXh0ZXJuIHZvaWQgX19pb3AzeHhfaW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpOwogCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUCQkweGZmZmZmZmZmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvbjIxMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9uMjEwMC5oCmluZGV4IGZlZDMxYTYuLjc3YThhZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9uMjEwMC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9uMjEwMC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtL2FyY2gtaW9wMzJ4L24yMTAwLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9uMjEwMC5oCiAgKgogICogVGhlY3VzIE4yMTAwIGJvYXJkIHJlZ2lzdGVycwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9pby5oCmluZGV4IDk5M2Y3NTguLmZlYzljNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9pby5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKIGV4dGVybiB2b2lkIF9faW9tZW0gKl9faW9wM3h4X2lvcmVtYXAodW5zaWduZWQgbG9uZyBjb29raWUsIHNpemVfdCBzaXplLAotCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCXVuc2lnbmVkIGludCBtdHlwZSk7CiBleHRlcm4gdm9pZCBfX2lvcDN4eF9pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcik7CiAKICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJCTB4ZmZmZmZmZmYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9uYXMxMDBkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvbmFzMTAwZC5oCmluZGV4IDg0NDY3YTUuLjEzMWUwYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9uYXMxMDBkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L25hczEwMGQuaApAQCAtMTAsNyArMTAsNyBAQAogICogYmFzZWQgb24gaXhkcDQyNS5oOgogICoJQ29weXJpZ2h0IDIwMDQgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuCiAgKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwpAQCAtMzYsMzEgKzM2LDExIEBACiAjZGVmaW5lIE5BUzEwMERfUENJX0lOVERfUElOCTgKICNkZWZpbmUgTkFTMTAwRF9QQ0lfSU5URV9QSU4JNwogCi0vKiBHUElPICovCi0KLSNkZWZpbmUgTkFTMTAwRF9HUElPMCAgICAgICAgICAgMAotI2RlZmluZSBOQVMxMDBEX0dQSU8xICAgICAgICAgICAxCi0jZGVmaW5lIE5BUzEwMERfR1BJTzIgICAgICAgICAgIDIKLSNkZWZpbmUgTkFTMTAwRF9HUElPMyAgICAgICAgICAgMwotI2RlZmluZSBOQVMxMDBEX0dQSU80ICAgICAgICAgICA0Ci0jZGVmaW5lIE5BUzEwMERfR1BJTzUgICAgICAgICAgIDUKLSNkZWZpbmUgTkFTMTAwRF9HUElPNiAgICAgICAgICAgNgotI2RlZmluZSBOQVMxMDBEX0dQSU83ICAgICAgICAgICA3Ci0jZGVmaW5lIE5BUzEwMERfR1BJTzggICAgICAgICAgIDgKLSNkZWZpbmUgTkFTMTAwRF9HUElPOSAgICAgICAgICAgOQotI2RlZmluZSBOQVMxMDBEX0dQSU8xMCAgICAgICAgICAxMAotI2RlZmluZSBOQVMxMDBEX0dQSU8xMSAgICAgICAgICAxMQotI2RlZmluZSBOQVMxMDBEX0dQSU8xMiAgICAgICAgICAxMgotI2RlZmluZSBOQVMxMDBEX0dQSU8xMyAgICAgICAgICAxMwotI2RlZmluZSBOQVMxMDBEX0dQSU8xNCAgICAgICAgICAxNAotI2RlZmluZSBOQVMxMDBEX0dQSU8xNSAgICAgICAgICAxNQotCi0KIC8qIEJ1dHRvbnMgKi8KIAotI2RlZmluZSBOQVMxMDBEX1BCX0dQSU8gICAgICAgICBOQVMxMDBEX0dQSU8xNAotI2RlZmluZSBOQVMxMDBEX1JCX0dQSU8gICAgICAgICBOQVMxMDBEX0dQSU80Ci0jZGVmaW5lIE5BUzEwMERfUE9fR1BJTyAgICAgICAgIE5BUzEwMERfR1BJTzEyICAgLyogcG93ZXIgb2ZmICovCisjZGVmaW5lIE5BUzEwMERfUEJfR1BJTyAgICAgICAgIDE0CisjZGVmaW5lIE5BUzEwMERfUkJfR1BJTyAgICAgICAgIDQKKyNkZWZpbmUgTkFTMTAwRF9QT19HUElPICAgICAgICAgMTIgICAvKiBwb3dlciBvZmYgKi8KIAogI2RlZmluZSBOQVMxMDBEX1BCX0lSUSAgICAgICAgICBJUlFfSVhQNFhYX0dQSU8xNAogI2RlZmluZSBOQVMxMDBEX1JCX0lSUSAgICAgICAgICBJUlFfSVhQNFhYX0dQSU80CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvbnNsdTIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9uc2x1Mi5oCmluZGV4IDZiNDM3ZjcuLjg1MGZkYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9uc2x1Mi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9uc2x1Mi5oCkBAIC05LDcgKzksNyBAQAogICogYmFzZWQgb24gaXhkcDQyNS5oOgogICoJQ29weXJpZ2h0IDIwMDQgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuCiAgKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwpAQCAtMzQsMzYgKzM0LDE0IEBACiAjZGVmaW5lIE5TTFUyX1BDSV9JTlRDX1BJTgk5CiAjZGVmaW5lIE5TTFUyX1BDSV9JTlREX1BJTgk4CiAKLQogLyogTlNMVTIgVGltZXIgKi8KICNkZWZpbmUgTlNMVTJfRlJFUSA2NjAwMDAwMAotI2RlZmluZSBOU0xVMl9DTE9DS19USUNLX1JBVEUgKCgoTlNMVTJfRlJFUSAvIEhaICYgfklYUDRYWF9PU1RfUkVMT0FEX01BU0spICsgMSkgKiBIWikKLSNkZWZpbmUgTlNMVTJfQ0xPQ0tfVElDS1NfUEVSX1VTRUMgKChOU0xVMl9DTE9DS19USUNLX1JBVEUgKyBVU0VDX1BFUl9TRUMvMikgLyBVU0VDX1BFUl9TRUMpCi0KLS8qIEdQSU8gKi8KLQotI2RlZmluZSBOU0xVMl9HUElPMAkJMAotI2RlZmluZSBOU0xVMl9HUElPMQkJMQotI2RlZmluZSBOU0xVMl9HUElPMgkJMgotI2RlZmluZSBOU0xVMl9HUElPMwkJMwotI2RlZmluZSBOU0xVMl9HUElPNAkJNAotI2RlZmluZSBOU0xVMl9HUElPNQkJNQotI2RlZmluZSBOU0xVMl9HUElPNgkJNgotI2RlZmluZSBOU0xVMl9HUElPNwkJNwotI2RlZmluZSBOU0xVMl9HUElPOAkJOAotI2RlZmluZSBOU0xVMl9HUElPOQkJOQotI2RlZmluZSBOU0xVMl9HUElPMTAJCTEwCi0jZGVmaW5lIE5TTFUyX0dQSU8xMQkJMTEKLSNkZWZpbmUgTlNMVTJfR1BJTzEyCQkxMgotI2RlZmluZSBOU0xVMl9HUElPMTMJCTEzCi0jZGVmaW5lIE5TTFUyX0dQSU8xNAkJMTQKLSNkZWZpbmUgTlNMVTJfR1BJTzE1CQkxNQogCiAvKiBCdXR0b25zICovCiAKLSNkZWZpbmUgTlNMVTJfUEJfR1BJTwkJTlNMVTJfR1BJTzUKLSNkZWZpbmUgTlNMVTJfUE9fR1BJTwkJTlNMVTJfR1BJTzgJLyogcG93ZXIgb2ZmICovCi0jZGVmaW5lIE5TTFUyX1JCX0dQSU8JCU5TTFUyX0dQSU8xMgorI2RlZmluZSBOU0xVMl9QQl9HUElPCQk1CisjZGVmaW5lIE5TTFUyX1BPX0dQSU8JCTgJLyogcG93ZXIgb2ZmICovCisjZGVmaW5lIE5TTFUyX1JCX0dQSU8JCTEyCiAKICNkZWZpbmUgTlNMVTJfUEJfSVJRCQlJUlFfSVhQNFhYX0dQSU81CiAjZGVmaW5lIE5TTFUyX1JCX0lSUQkJSVJRX0lYUDRYWF9HUElPMTIKQEAgLTc5LDE2ICs1NywxNiBAQAogCiAvKiBMRURzICovCiAKLSNkZWZpbmUgTlNMVTJfTEVEX1JFRAkJTlNMVTJfR1BJTzAKLSNkZWZpbmUgTlNMVTJfTEVEX0dSTgkJTlNMVTJfR1BJTzEKKyNkZWZpbmUgTlNMVTJfTEVEX1JFRF9HUElPCTAKKyNkZWZpbmUgTlNMVTJfTEVEX0dSTl9HUElPCTEKIAotI2RlZmluZSBOU0xVMl9MRURfUkVEX0JNCSgxTCA8PCBOU0xVMl9MRURfUkVEKQotI2RlZmluZSBOU0xVMl9MRURfR1JOX0JNCSgxTCA8PCBOU0xVMl9MRURfR1JOKQorI2RlZmluZSBOU0xVMl9MRURfUkVEX0JNCSgxTCA8PCBOU0xVMl9MRURfUkVEX0dQSU8pCisjZGVmaW5lIE5TTFUyX0xFRF9HUk5fQk0JKDFMIDw8IE5TTFUyX0xFRF9HUk5fR1BJTykKIAotI2RlZmluZSBOU0xVMl9MRURfRElTSzEJCU5TTFUyX0dQSU8zCi0jZGVmaW5lIE5TTFUyX0xFRF9ESVNLMgkJTlNMVTJfR1BJTzIKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0sxX0dQSU8JMworI2RlZmluZSBOU0xVMl9MRURfRElTSzJfR1BJTwkyCiAKLSNkZWZpbmUgTlNMVTJfTEVEX0RJU0sxX0JNCSgxTCA8PCBOU0xVMl9HUElPMikKLSNkZWZpbmUgTlNMVTJfTEVEX0RJU0syX0JNCSgxTCA8PCBOU0xVMl9HUElPMykKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0sxX0JNCSgxTCA8PCBOU0xVMl9MRURfRElTSzFfR1BJTykKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0syX0JNCSgxTCA8PCBOU0xVMl9MRURfRElTSzJfR1BJTykKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wbGF0Zm9ybS5oCmluZGV4IGFiMTk0ZTUuLjJhNDRkM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wbGF0Zm9ybS5oCkBAIC0xMTMsNiArMTEzLDcgQEAKIGV4dGVybiB2b2lkIGl4cDR4eF9tYXBfaW8odm9pZCk7CiBleHRlcm4gdm9pZCBpeHA0eHhfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBpeHA0eHhfc3lzX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBpeHA0eHhfdGltZXJfaW5pdCh2b2lkKTsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGl4cDR4eF90aW1lcjsKIGV4dGVybiB2b2lkIGl4cDR4eF9wY2lfcHJlaW5pdCh2b2lkKTsKIHN0cnVjdCBwY2lfc3lzX2RhdGE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNWYyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDM4IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2RlYnVnLW1hY3JvLlMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIEtTODY5NSAtIERlYnVnIG1hY3JvcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtdWFydC5oPgorCisJLm1hY3JvCWFkZHJ1YXJ0LCByeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQkJCQlAIE1NVSBlbmFibGVkPworCQlsZHJlcQlccngsID1LUzg2OTVfVUFSVF9QQQkJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKKwkJbGRybmUJXHJ4LCA9S1M4Njk1X1VBUlRfVkEJCUAgdmlydHVhbCBiYXNlIGFkZHJlc3MKKwkuZW5kbQorCisJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKKwkJc3RyCVxyZCwgW1xyeCwgI0tTODY5NV9VUlRIXQlAIFdyaXRlIHRvIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIKKwkuZW5kbQorCisJLm1hY3JvCWJ1c3l1YXJ0LCByZCwgcngKKzEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjS1M4Njk1X1VSTFNdCUAgUmVhZCBMaW5lIFN0YXR1cyBSZWdpc3RlcgorCQl0c3QJXHJkLCAjVVJMU19VUlRFCQkJQCBIb2xkaW5nICYgU2hpZnQgcmVnaXN0ZXJzIGVtcHR5PworCQliZXEJMTAwMWIKKwkuZW5kbQorCisJLm1hY3JvCXdhaXR1YXJ0LCByZCwgcngKKzEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjS1M4Njk1X1VSTFNdCUAgUmVhZCBMaW5lIFN0YXR1cyBSZWdpc3RlcgorCQl0c3QJXHJkLCAjVVJMU19VUlRIUkUJCUAgSG9sZGluZyBSZWdpc3RlciBlbXB0eT8KKwkJYmVxCTEwMDFiCisJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9kZXZpY2VzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvZGV2aWNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMzY0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvZGV2aWNlcy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvZGV2aWNlcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHJldyBWaWN0b3IKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9ERVZJQ0VTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ERVZJQ0VTX0gKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisgLyogRXRoZXJuZXQgKi8KK2V4dGVybiB2b2lkIF9faW5pdCBrczg2OTVfYWRkX2RldmljZV93YW4odm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQga3M4Njk1X2FkZF9kZXZpY2VfbGFuKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGtzODY5NV9hZGRfZGV2aWNlX2hwbmEodm9pZCk7CisKKyAvKiBQQ0kgKi8KKyNkZWZpbmUgS1M4Njk1X01PREVfUENJCQkwCisjZGVmaW5lIEtTODY5NV9NT0RFX01JTklQQ0kJMQorI2RlZmluZSBLUzg2OTVfTU9ERV9DQVJEQlVTCTIKKworc3RydWN0IGtzODY5NV9wY2lfY2ZnIHsKKwlzaG9ydCBtb2RlOworCWludCAoKm1hcF9pcnEpKHN0cnVjdCBwY2lfZGV2ICosIHU4LCB1OCk7Cit9OworZXh0ZXJuIF9faW5pdCB2b2lkIGtzODY5NV9pbml0X3BjaShzdHJ1Y3Qga3M4Njk1X3BjaV9jZmcgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MTU5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvZG1hLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9kbWEuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzRiZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9lbnRyeS1tYWNyby5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIEtTODY5NQorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaXJxLmg+CisKKwkubWFjcm8JZGlzYWJsZV9maXEKKwkuZW5kbQorCisJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQlsZHIJXGJhc2UsID1LUzg2OTVfSVJRX1ZBCQkJQCBCYXNlIGFkZHJlc3Mgb2YgaW50ZXJydXB0IGNvbnRyb2xsZXIKKwkuZW5kbQorCisJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICNLUzg2OTVfSU5UTVNdCUAgTWFzayBTdGF0dXMgcmVnaXN0ZXIKKworCQl0ZXEJXGlycXN0YXQsICMwCisJCWJlcQkxMDAxZgorCisJCW1vdglcaXJxbnIsICMwCisKKwkJdHN0CVxpcnFzdGF0LCAjMHhmZgorCQltb3ZlcQlcaXJxc3RhdCwgXGlycXN0YXQsIGxzciAjOAorCQlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzgKKwkJdHN0ZXEJXGlycXN0YXQsICMweGZmCisJCW1vdmVxCVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyICM4CisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjOAorCQl0c3RlcQlcaXJxc3RhdCwgIzB4ZmYKKwkJbW92ZXEJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzgKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICM4CisJCXRzdAlcaXJxc3RhdCwgIzB4MGYKKwkJbW92ZXEJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzQKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICM0CisJCXRzdAlcaXJxc3RhdCwgIzB4MDMKKwkJbW92ZXEJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzIKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICMyCisJCXRzdAlcaXJxc3RhdCwgIzB4MDEKKwkJYWRkZXFzCVxpcnFuciwgXGlycW5yLCAjMQorMTAwMToKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjczMmJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2hhcmR3YXJlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCisgKiBLUzg2OTUgLSBNZW1vcnkgTWFwIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKy8qCisgKiBQaHlzaWNhbCBSQU0gYWRkcmVzcy4KKyAqLworI2RlZmluZSBLUzg2OTVfU0RSQU1fUEEJCTB4MDAwMDAwMDAKKworCisvKgorICogV2UgbWFwIGFuIGVudGlyZSBNaUIgd2l0aCB0aGUgU3lzdGVtIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzIGluIGV2ZW4KKyAqIHRob3VnaCBvbmx5IDY0S2lCIGlzIG5lZWRlZC4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIHVzZSB3aXRoIHRoZQorICogaGVhZCBkZWJ1ZyBjb2RlIGFzIHRoZSBpbml0aWFsIE1NVSBzZXR1cCBvbmx5IGRlYWxzIGluIEwxIHNlY3Rpb25zLgorICovCisjZGVmaW5lIEtTODY5NV9JT19QQQkJMHgwM0YwMDAwMAorI2RlZmluZSBLUzg2OTVfSU9fVkEJCTB4RjAwMDAwMDAKKyNkZWZpbmUgS1M4Njk1X0lPX1NJWkUJCVNaXzFNCisKKyNkZWZpbmUgS1M4Njk1X1BDSU1FTV9QQQkweDYwMDAwMDAwCisjZGVmaW5lIEtTODY5NV9QQ0lNRU1fU0laRQlTWl81MTJNCisKKyNkZWZpbmUgS1M4Njk1X1BDSUlPX1BBCQkweDgwMDAwMDAwCisjZGVmaW5lIEtTODY5NV9QQ0lJT19TSVpFCVNaXzY0SworCisKKy8qCisgKiBQQ0kgc3VwcG9ydAorICovCisjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkxCisKKyNkZWZpbmUgUENJQklPU19NSU5fSU8JCTAKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWRjNGJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2lvLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9pby5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHJldyBWaWN0b3IKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVAkJMHhmZmZmZmZmZgorCisjZGVmaW5lIF9faW8oYSkJCQkoKHZvaWQgX19pb21lbSAqKShhKSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjFjNGZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2lycXMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L2lycXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX0lSUVNfSAorCisKKyNkZWZpbmUgTlJfSVJRUwkJCQkzMgorCisvKgorICogSVJRIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgS1M4Njk1X0lSUV9DT01NX1JYCQkwCisjZGVmaW5lIEtTODY5NV9JUlFfQ09NTV9UWAkJMQorI2RlZmluZSBLUzg2OTVfSVJRX0VYVEVSTjAJCTIKKyNkZWZpbmUgS1M4Njk1X0lSUV9FWFRFUk4xCQkzCisjZGVmaW5lIEtTODY5NV9JUlFfRVhURVJOMgkJNAorI2RlZmluZSBLUzg2OTVfSVJRX0VYVEVSTjMJCTUKKyNkZWZpbmUgS1M4Njk1X0lSUV9USU1FUjAJCTYKKyNkZWZpbmUgS1M4Njk1X0lSUV9USU1FUjEJCTcKKyNkZWZpbmUgS1M4Njk1X0lSUV9VQVJUX1RYCQk4CisjZGVmaW5lIEtTODY5NV9JUlFfVUFSVF9SWAkJOQorI2RlZmluZSBLUzg2OTVfSVJRX1VBUlRfTElORV9TVEFUVVMJMTAKKyNkZWZpbmUgS1M4Njk1X0lSUV9VQVJUX01PREVNX1NUQVRVUwkxMQorI2RlZmluZSBLUzg2OTVfSVJRX0xBTl9SWF9TVE9QCQkxMgorI2RlZmluZSBLUzg2OTVfSVJRX0xBTl9UWF9TVE9QCQkxMworI2RlZmluZSBLUzg2OTVfSVJRX0xBTl9SWF9CVUYJCTE0CisjZGVmaW5lIEtTODY5NV9JUlFfTEFOX1RYX0JVRgkJMTUKKyNkZWZpbmUgS1M4Njk1X0lSUV9MQU5fUlhfU1RBVFVTCTE2CisjZGVmaW5lIEtTODY5NV9JUlFfTEFOX1RYX1NUQVRVUwkxNworI2RlZmluZSBLUzg2OTVfSVJRX0hQTkFfUlhfU1RPUAkJMTgKKyNkZWZpbmUgS1M4Njk1X0lSUV9IUE5BX1RYX1NUT1AJCTE5CisjZGVmaW5lIEtTODY5NV9JUlFfSFBOQV9SWF9CVUYJCTIwCisjZGVmaW5lIEtTODY5NV9JUlFfSFBOQV9UWF9CVUYJCTIxCisjZGVmaW5lIEtTODY5NV9JUlFfSFBOQV9SWF9TVEFUVVMJMjIKKyNkZWZpbmUgS1M4Njk1X0lSUV9IUE5BX1RYX1NUQVRVUwkyMworI2RlZmluZSBLUzg2OTVfSVJRX0JVU19FUlJPUgkJMjQKKyNkZWZpbmUgS1M4Njk1X0lSUV9XQU5fUlhfU1RPUAkJMjUKKyNkZWZpbmUgS1M4Njk1X0lSUV9XQU5fVFhfU1RPUAkJMjYKKyNkZWZpbmUgS1M4Njk1X0lSUV9XQU5fUlhfQlVGCQkyNworI2RlZmluZSBLUzg2OTVfSVJRX1dBTl9UWF9CVUYJCTI4CisjZGVmaW5lIEtTODY5NV9JUlFfV0FOX1JYX1NUQVRVUwkyOQorI2RlZmluZSBLUzg2OTVfSVJRX1dBTl9UWF9TVEFUVVMJMzAKKyNkZWZpbmUgS1M4Njk1X0lSUV9XQU5fTElOSwkJMzEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmNmE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9tZW1vcnkuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L21lbW9yeS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHJldyBWaWN0b3IKKyAqCisgKiBLUzg2OTUgTWVtb3J5IGRlZmluaXRpb25zCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisvKgorICogUGh5c2ljYWwgU1JBTSBvZmZzZXQuCisgKi8KKyNkZWZpbmUgUEhZU19PRkZTRVQJCUtTODY5NV9TRFJBTV9QQQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaWZkZWYgQ09ORklHX1BDSQorCisvKiBQQ0kgbWFwcGluZ3MgKi8KKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoKHgpIC0gUEFHRV9PRkZTRVQgKyBLUzg2OTVfUENJTUVNX1BBKQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSgoeCkgLSBLUzg2OTVfUENJTUVNX1BBICsgUEFHRV9PRkZTRVQpCisKKy8qIFBsYXRmb3JtLWJ1cyBtYXBwaW5nICovCitleHRlcm4gc3RydWN0IGJ1c190eXBlIHBsYXRmb3JtX2J1c190eXBlOworI2RlZmluZSBpc19sYnVzX2RldmljZShkZXYpCQkoZGV2ICYmIGRldi0+YnVzID09ICZwbGF0Zm9ybV9idXNfdHlwZSkKKyNkZWZpbmUgX19hcmNoX2RtYV90b192aXJ0KGRldiwgeCkJKHsgaXNfbGJ1c19kZXZpY2UoZGV2KSA/IFwKKwkJCQkJX19waHlzX3RvX3ZpcnQoeCkgOiBfX2J1c190b192aXJ0KHgpOyB9KQorI2RlZmluZSBfX2FyY2hfdmlydF90b19kbWEoZGV2LCB4KQkoeyBpc19sYnVzX2RldmljZShkZXYpID8gXAorCQkJCQkoZG1hX2FkZHJfdClfX3ZpcnRfdG9fcGh5cyh4KSA6IChkbWFfYWRkcl90KV9fdmlydF90b19idXMoeCk7IH0pCisjZGVmaW5lIF9fYXJjaF9wYWdlX3RvX2RtYShkZXYsIHgpCV9fYXJjaF92aXJ0X3RvX2RtYShkZXYsIHBhZ2VfYWRkcmVzcyh4KSkKKworI2Vsc2UKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCV9fdmlydF90b19waHlzKHgpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJX19waHlzX3RvX3ZpcnQoeCkKKworI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLWdwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLWdwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZjZjlmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3MtZ3Bpby5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy1ncGlvLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQW5kcmV3IFZpY3RvcgorICoKKyAqIEtTODY5NSAtIEdQSU8gY29udHJvbCByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIEtTODY5NV9HUElPX0gKKyNkZWZpbmUgS1M4Njk1X0dQSU9fSAorCisjZGVmaW5lIEtTODY5NV9HUElPX09GRlNFVAkoMHhGMDAwMCArIDB4RTYwMCkKKyNkZWZpbmUgS1M4Njk1X0dQSU9fVkEJCShLUzg2OTVfSU9fVkEgKyBLUzg2OTVfR1BJT19PRkZTRVQpCisjZGVmaW5lIEtTODY5NV9HUElPX1BBCQkoS1M4Njk1X0lPX1BBICsgS1M4Njk1X0dQSU9fT0ZGU0VUKQorCisKKyNkZWZpbmUgS1M4Njk1X0lPUE0JCSgweDAwKQkJLyogSS9PIFBvcnQgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSBLUzg2OTVfSU9QQwkJKDB4MDQpCQkvKiBJL08gUG9ydCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEtTODY5NV9JT1BECQkoMHgwOCkJCS8qIEkvTyBQb3J0IERhdGEgUmVnaXN0ZXIgKi8KKworCisvKiBQb3J0IE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU9QTV8oeCkJCSgxIDw8ICh4KSkJLyogTW9kZSBmb3IgR1BJTyBQaW4geCAqLworCisvKiBQb3J0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU9QQ19JT1RJTTFFTgkJKDEgPDwgMTcpCS8qIEdQSU8gUGluIGZvciBUaW1lcjEgRW5hYmxlICovCisjZGVmaW5lIElPUENfSU9USU0wRU4JCSgxIDw8IDE2KQkvKiBHUElPIFBpbiBmb3IgVGltZXIwIEVuYWJsZSAqLworI2RlZmluZSBJT1BDX0lPRUlOVDNFTgkJKDEgPDwgMTUpCS8qIEdQSU8gUGluIGZvciBFeHRlcm5hbC9Tb2Z0IEludGVycnVwdCAzIEVuYWJsZSAqLworI2RlZmluZSBJT1BDX0lPRUlOVDNUTQkJKDcgPDwgMTIpCS8qIEdQSU8gUGluIGZvciBFeHRlcm5hbC9Tb2Z0IEludGVycnVwdCAzIFRyaWdnZXIgTW9kZSAqLworI2RlZmluZSBJT1BDX0lPRUlOVDNfTU9ERSh4KQkoKHgpIDw8IDEyKQorI2RlZmluZSBJT1BDX0lPRUlOVDJFTgkJKDEgPDwgMTEpCS8qIEdQSU8gUGluIGZvciBFeHRlcm5hbC9Tb2Z0IEludGVycnVwdCAyIEVuYWJsZSAqLworI2RlZmluZSBJT1BDX0lPRUlOVDJUTQkJKDcgPDwgOCkJLyogR1BJTyBQaW4gZm9yIEV4dGVybmFsL1NvZnQgSW50ZXJydXB0IDIgVHJpZ2dlciBNb2RlICovCisjZGVmaW5lIElPUENfSU9FSU5UMl9NT0RFKHgpCSgoeCkgPDwgOCkKKyNkZWZpbmUgSU9QQ19JT0VJTlQxRU4JCSgxIDw8IDcpCS8qIEdQSU8gUGluIGZvciBFeHRlcm5hbC9Tb2Z0IEludGVycnVwdCAxIEVuYWJsZSAqLworI2RlZmluZSBJT1BDX0lPRUlOVDFUTQkJKDcgPDwgNCkJLyogR1BJTyBQaW4gZm9yIEV4dGVybmFsL1NvZnQgSW50ZXJydXB0IDEgVHJpZ2dlciBNb2RlICovCisjZGVmaW5lIElPUENfSU9FSU5UMV9NT0RFKHgpCSgoeCkgPDwgNCkKKyNkZWZpbmUgSU9QQ19JT0VJTlQwRU4JCSgxIDw8IDMpCS8qIEdQSU8gUGluIGZvciBFeHRlcm5hbC9Tb2Z0IEludGVycnVwdCAwIEVuYWJsZSAqLworI2RlZmluZSBJT1BDX0lPRUlOVDBUTQkJKDcgPDwgMCkJLyogR1BJTyBQaW4gZm9yIEV4dGVybmFsL1NvZnQgSW50ZXJydXB0IDAgVHJpZ2dlciBNb2RlICovCisjZGVmaW5lIElPUENfSU9FSU5UMF9NT0RFKHgpCSgoeCkgPDwgMCkKKworIC8qIFRyaWdnZXIgTW9kZXMgKi8KKyNkZWZpbmUgSU9QQ19UTV9MT1cJCSgwKQkJLyogTGV2ZWwgRGV0ZWN0aW9uIChBY3RpdmUgTG93KSAqLworI2RlZmluZSBJT1BDX1RNX0hJR0gJCSgxKQkJLyogTGV2ZWwgRGV0ZWN0aW9uIChBY3RpdmUgSGlnaCkgKi8KKyNkZWZpbmUgSU9QQ19UTV9SSVNJTkcJCSgyKQkJLyogUmlzaW5nIEVkZ2UgRGV0ZWN0aW9uICovCisjZGVmaW5lIElPUENfVE1fRkFMTElORwkJKDQpCQkvKiBGYWxsaW5nIEVkZ2UgRGV0ZWN0aW9uICovCisjZGVmaW5lIElPUENfVE1fRURHRQkJKDYpCQkvKiBCb3RoIEVkZ2UgRGV0ZWN0aW9uICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy1ocG5hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy1ocG5hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwOTFjZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLWhwbmEuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3Mtd2FuLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kcmV3IFZpY3RvcgorICoKKyAqIEtTODY5NSAtIEhQTkEgUmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBLUzg2OTVfSFBOQV9ICisjZGVmaW5lIEtTODY5NV9IUE5BX0gKKworI2RlZmluZSBLUzg2OTVfSFBOQV9PRkZTRVQJKDB4RjAwMDAgKyAweEEwMDApCisjZGVmaW5lIEtTODY5NV9IUE5BX1ZBCQkoS1M4Njk1X0lPX1ZBICsgS1M4Njk1X0hQTkFfT0ZGU0VUKQorI2RlZmluZSBLUzg2OTVfSFBOQV9QQQkJKEtTODY5NV9JT19QQSArIEtTODY5NV9IUE5BX09GRlNFVCkKKworCisvKgorICogSFBOQSByZWdpc3RlcnMKKyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLWlycS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3MtaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiMTkzZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLWlycS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy1pcnEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogS1M4Njk1IC0gSVJRIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBLUzg2OTVfSVJRX0gKKyNkZWZpbmUgS1M4Njk1X0lSUV9ICisKKyNkZWZpbmUgS1M4Njk1X0lSUV9PRkZTRVQJKDB4RjAwMDAgKyAweEUyMDApCisjZGVmaW5lIEtTODY5NV9JUlFfVkEJCShLUzg2OTVfSU9fVkEgKyBLUzg2OTVfSVJRX09GRlNFVCkKKyNkZWZpbmUgS1M4Njk1X0lSUV9QQQkJKEtTODY5NV9JT19QQSArIEtTODY5NV9JUlFfT0ZGU0VUKQorCisKKy8qCisgKiBJbnRlcnJ1cHQgQ29udHJvbGxlciByZWdpc3RlcnMKKyAqLworI2RlZmluZSBLUzg2OTVfSU5UTUMJCSgweDAwKQkJLyogTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEtTODY5NV9JTlRFTgkJKDB4MDQpCQkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIEtTODY5NV9JTlRTVAkJKDB4MDgpCQkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEtTODY5NV9JTlRQVwkJKDB4MGMpCQkvKiBJbnRlcnJ1cHQgUHJpb3JpdHkgKFdBTiBNQUMpICovCisjZGVmaW5lIEtTODY5NV9JTlRQSAkJKDB4MTApCQkvKiBJbnRlcnJ1cHQgUHJpb3JpdHkgKEhQTkEpIFtLUzg2OTUgb25seV0gKi8KKyNkZWZpbmUgS1M4Njk1X0lOVFBMCQkoMHgxNCkJCS8qIEludGVycnVwdCBQcmlvcml0eSAoTEFOIE1BQykgKi8KKyNkZWZpbmUgS1M4Njk1X0lOVFBUCQkoMHgxOCkJCS8qIEludGVycnVwdCBQcmlvcml0eSAoVGltZXIpICovCisjZGVmaW5lIEtTODY5NV9JTlRQVQkJKDB4MWMpCQkvKiBJbnRlcnJ1cHQgUHJpb3JpdHkgKFVBUlQpICovCisjZGVmaW5lIEtTODY5NV9JTlRQRQkJKDB4MjApCQkvKiBJbnRlcnJ1cHQgUHJpb3JpdHkgKEV4dGVybmFsIEludGVycnVwdCkgKi8KKyNkZWZpbmUgS1M4Njk1X0lOVFBDCQkoMHgyNCkJCS8qIEludGVycnVwdCBQcmlvcml0eSAoQ29tbXVuaWNhdGlvbnMgQ2hhbm5lbCkgKi8KKyNkZWZpbmUgS1M4Njk1X0lOVFBCRQkJKDB4MjgpCQkvKiBJbnRlcnJ1cHQgUHJpb3JpdHkgKEJ1cyBFcnJvciBSZXNwb25zZSkgKi8KKyNkZWZpbmUgS1M4Njk1X0lOVE1TCQkoMHgyYykJCS8qIEludGVycnVwdCBNYXNrIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBLUzg2OTVfSU5USFBGCQkoMHgzMCkJCS8qIEludGVycnVwdCBQZW5kaW5nIEhpZ2hlc3QgUHJpb3JpdHkgKEZJUSkgKi8KKyNkZWZpbmUgS1M4Njk1X0lOVEhQSQkJKDB4MzQpCQkvKiBJbnRlcnJ1cHQgUGVuZGluZyBIaWdoZXN0IFByaW9yaXR5IChJUlEpICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy1sYW4uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLWxhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2JkNjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy1sYW4uaApAQCAtMCwwICsxLDY1IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3MtbGFuLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kcmV3IFZpY3RvcgorICoKKyAqIEtTODY5NSAtIExBTiBSZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIEtTODY5NV9MQU5fSAorI2RlZmluZSBLUzg2OTVfTEFOX0gKKworI2RlZmluZSBLUzg2OTVfTEFOX09GRlNFVAkoMHhGMDAwMCArIDB4ODAwMCkKKyNkZWZpbmUgS1M4Njk1X0xBTl9WQQkJKEtTODY5NV9JT19WQSArIEtTODY5NV9MQU5fT0ZGU0VUKQorI2RlZmluZSBLUzg2OTVfTEFOX1BBCQkoS1M4Njk1X0lPX1BBICsgS1M4Njk1X0xBTl9PRkZTRVQpCisKKworLyoKKyAqIExBTiByZWdpc3RlcnMKKyAqLworI2RlZmluZSBLUzg2OTVfTE1EVFhDCQkoMHgwMCkJCS8qIERNQSBUcmFuc21pdCBDb250cm9sICovCisjZGVmaW5lIEtTODY5NV9MTURSWEMJCSgweDA0KQkJLyogRE1BIFJlY2VpdmUgQ29udHJvbCAqLworI2RlZmluZSBLUzg2OTVfTE1EVFNDCQkoMHgwOCkJCS8qIERNQSBUcmFuc21pdCBTdGFydCBDb21tYW5kICovCisjZGVmaW5lIEtTODY5NV9MTURSU0MJCSgweDBjKQkJLyogRE1BIFJlY2VpdmUgU3RhcnQgQ29tbWFuZCAqLworI2RlZmluZSBLUzg2OTVfTFRETEIJCSgweDEwKQkJLyogVHJhbnNtaXQgRGVzY3JpcHRvciBMaXN0IEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBLUzg2OTVfTFJETEIJCSgweDE0KQkJLyogUmVjZWl2ZSBEZXNjcmlwdG9yIExpc3QgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIEtTODY5NV9MTUFMCQkoMHgxOCkJCS8qIE1BQyBTdGF0aW9uIEFkZHJlc3MgTG93ICovCisjZGVmaW5lIEtTODY5NV9MTUFICQkoMHgxYykJCS8qIE1BQyBTdGF0aW9uIEFkZHJlc3MgSGlnaCAqLworI2RlZmluZSBLUzg2OTVfTE1BQUxfKG4pCSgweDgwICsgKChuKSo4KSkJLyogTUFDIEFkZGl0aW9uYWwgU3RhdGlvbiBBZGRyZXNzICgwLi4xNSkgTG93ICovCisjZGVmaW5lIEtTODY5NV9MTUFBSF8obikJKDB4ODQgKyAoKG4pKjgpKQkvKiBNQUMgQWRkaXRpb25hbCBTdGF0aW9uIEFkZHJlc3MgKDAuLjE1KSBIaWdoICovCisKKworLyogRE1BIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTE1EVFhDX0xNVFJTVAkJKDEgICAgPDwgMzEpCS8qIFNvZnQgUmVzZXQgKi8KKyNkZWZpbmUgTE1EVFhDX0xNVEJTCQkoMHgzZiA8PCAyNCkJLyogVHJhbnNtaXQgQnVyc3QgU2l6ZSAqLworI2RlZmluZSBMTURUWENfTE1UVUNHCQkoMSAgICA8PCAxOCkJLyogVHJhbnNtaXQgVURQIENoZWNrc3VtIEdlbmVyYXRlICovCisjZGVmaW5lIExNRFRYQ19MTVRUQ0cJCSgxICAgIDw8IDE3KQkvKiBUcmFuc21pdCBUQ1AgQ2hlY2tzdW0gR2VuZXJhdGUgKi8KKyNkZWZpbmUgTE1EVFhDX0xNVElDRwkJKDEgICAgPDwgMTYpCS8qIFRyYW5zbWl0IElQIENoZWNrc3VtIEdlbmVyYXRlICovCisjZGVmaW5lIExNRFRYQ19MTVRGQ0UJCSgxICAgIDw8ICA5KQkvKiBUcmFuc21pdCBGbG93IENvbnRyb2wgRW5hYmxlICovCisjZGVmaW5lIExNRFRYQ19MTVRMQgkJKDEgICAgPDwgIDgpCS8qIExvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUgTE1EVFhDX0xNVEVQCQkoMSAgICA8PCAgMikJLyogVHJhbnNtaXQgRW5hYmxlIFBhZGRpbmcgKi8KKyNkZWZpbmUgTE1EVFhDX0xNVEFDCQkoMSAgICA8PCAgMSkJLyogVHJhbnNtaXQgQWRkIENSQyAqLworI2RlZmluZSBMTURUWENfTE1URQkJKDEgICAgPDwgIDApCS8qIFRYIEVuYWJsZSAqLworCisvKiBETUEgUmVjZWl2ZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIExNRFJYQ19MTVJCUwkJKDB4M2YgPDwgMjQpCS8qIFJlY2VpdmUgQnVyc3QgU2l6ZSAqLworI2RlZmluZSBMTURSWENfTE1SVUNDCQkoMSAgICA8PCAxOCkJLyogUmVjZWl2ZSBVRFAgQ2hlY2tzdW0gY2hlY2sgKi8KKyNkZWZpbmUgTE1EUlhDX0xNUlRDRwkJKDEgICAgPDwgMTcpCS8qIFJlY2VpdmUgVENQIENoZWNrc3VtIGNoZWNrICovCisjZGVmaW5lIExNRFJYQ19MTVJJQ0cJCSgxICAgIDw8IDE2KQkvKiBSZWNlaXZlIElQIENoZWNrc3VtIGNoZWNrICovCisjZGVmaW5lIExNRFJYQ19MTVJGQ0UJCSgxICAgIDw8ICA5KQkvKiBSZWNlaXZlIEZsb3cgQ29udHJvbCBFbmFibGUgKi8KKyNkZWZpbmUgTE1EUlhDX0xNUkIJCSgxICAgIDw8ICA2KQkvKiBSZWNlaXZlIEJyb2FkY2FzdCAqLworI2RlZmluZSBMTURSWENfTE1STQkJKDEgICAgPDwgIDUpCS8qIFJlY2VpdmUgTXVsdGljYXN0ICovCisjZGVmaW5lIExNRFJYQ19MTVJVCQkoMSAgICA8PCAgNCkJLyogUmVjZWl2ZSBVbmljYXN0ICovCisjZGVmaW5lIExNRFJYQ19MTVJFUlIJCSgxICAgIDw8ICAzKQkvKiBSZWNlaXZlIEVycm9yIEZyYW1lICovCisjZGVmaW5lIExNRFJYQ19MTVJBCQkoMSAgICA8PCAgMikJLyogUmVjZWl2ZSBBbGwgKi8KKyNkZWZpbmUgTE1EUlhDX0xNUkUJCSgxICAgIDw8ICAxKQkvKiBSWCBFbmFibGUgKi8KKworLyogQWRkaXRpb25hbCBTdGF0aW9uIEFkZHJlc3MgSGlnaCAqLworI2RlZmluZSBMTUFBSF9FCQkJKDEgICAgPDwgMzEpCS8qIEFkZHJlc3MgRW5hYmxlZCAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3MtbWVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy1tZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmIzOGUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3MtbWVtLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLW1lbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHJldyBWaWN0b3IKKyAqCisgKiBLUzg2OTUgLSBNZW1vcnkgQ29udHJvbGxlciByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgS1M4Njk1X01FTV9ICisjZGVmaW5lIEtTODY5NV9NRU1fSAorCisjZGVmaW5lIEtTODY5NV9NRU1fT0ZGU0VUCSgweEYwMDAwICsgMHg0MDAwKQorI2RlZmluZSBLUzg2OTVfTUVNX1ZBCQkoS1M4Njk1X0lPX1ZBICsgS1M4Njk1X01FTV9PRkZTRVQpCisjZGVmaW5lIEtTODY5NV9NRU1fUEEJCShLUzg2OTVfSU9fUEEgKyBLUzg2OTVfTUVNX09GRlNFVCkKKworCisvKgorICogTWVtb3J5IENvbnRyb2xsZXIgUmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgS1M4Njk1X0VYVEFDT04wCQkoMHgwMCkJCS8qIEV4dGVybmFsIEkvTyAwIEFjY2VzcyBDb250cm9sICovCisjZGVmaW5lIEtTODY5NV9FWFRBQ09OMQkJKDB4MDQpCQkvKiBFeHRlcm5hbCBJL08gMSBBY2Nlc3MgQ29udHJvbCAqLworI2RlZmluZSBLUzg2OTVfRVhUQUNPTjIJCSgweDA4KQkJLyogRXh0ZXJuYWwgSS9PIDIgQWNjZXNzIENvbnRyb2wgKi8KKyNkZWZpbmUgS1M4Njk1X1JPTUNPTjAJCSgweDEwKQkJLyogUk9NL1NSQU0vRmxhc2ggMSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEtTODY5NV9ST01DT04xCQkoMHgxNCkJCS8qIFJPTS9TUkFNL0ZsYXNoIDIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBLUzg2OTVfRVJHQ09OCQkoMHgyMCkJCS8qIEV4dGVybmFsIEkvTyBhbmQgUk9NL1NSQU0vRmxhc2ggR2VuZXJhbCBSZWdpc3RlciAqLworI2RlZmluZSBLUzg2OTVfU0RDT04wCQkoMHgzMCkJCS8qIFNEUkFNIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBLUzg2OTVfU0RDT04xCQkoMHgzNCkJCS8qIFNEUkFNIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBLUzg2OTVfU0RHQ09OCQkoMHgzOCkJCS8qIFNEUkFNIEdlbmVyYWwgQ29udHJvbCAqLworI2RlZmluZSBLUzg2OTVfU0RCQ09OCQkoMHgzYykJCS8qIFNEUkFNIEJ1ZmZlciBDb250cm9sICovCisjZGVmaW5lIEtTODY5NV9SRUZUSU0JCSgweDQwKQkJLyogU0RSQU0gUmVmcmVzaCBUaW1lciAqLworCisKKy8qIEV4dGVybmFsIEkvTyBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRVhUQUNPTl9FQk5QVFIJCSgweDNmZiA8PCAyMikJCS8qIExhc3QgQWRkcmVzcyBQb2ludGVyICovCisjZGVmaW5lIEVYVEFDT05fRUJCUFRSCQkoMHgzZmYgPDwgMTIpCQkvKiBCYXNlIFBvaW50ZXIgKi8KKyNkZWZpbmUgRVhUQUNPTl9FQlRBQ1QJCSg3ICAgICA8PCAgOSkJCS8qIFdyaXRlIEVuYWJsZS9PdXRwdXQgRW5hYmxlIEFjdGl2ZSBUaW1lICovCisjZGVmaW5lIEVYVEFDT05fRUJUQ09ICQkoNyAgICAgPDwgIDYpCQkvKiBDaGlwIFNlbGVjdCBIb2xkIFRpbWUgKi8KKyNkZWZpbmUgRVhUQUNPTl9FQlRBQ1MJCSg3ICAgICA8PCAgMykJCS8qIEFkZHJlc3MgU2V0dXAgVGltZSBiZWZvcmUgRUNTTiAqLworI2RlZmluZSBFWFRBQ09OX0VCVENPUwkJKDcgICAgIDw8ICAwKQkJLyogQ2hpcCBTZWxlY3QgVGltZSBiZWZvcmUgT0VOICovCisKKy8qIFJPTS9TUkFNL0ZsYXNoIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUk9NQ09OX1JCTlBUUgkJKDB4M2ZmIDw8IDIyKQkJLyogTmV4dCBQb2ludGVyICovCisjZGVmaW5lIFJPTUNPTl9SQkJQVFIJCSgweDNmZiA8PCAxMikJCS8qIEJhc2UgUG9pbnRlciAqLworI2RlZmluZSBST01DT05fUkJUQUNDCQkoNyAgICAgPDwgIDQpCQkvKiBBY2Nlc3MgQ3ljbGUgVGltZSAqLworI2RlZmluZSBST01DT05fUkJUUEEJCSgzICAgICA8PCAgMikJCS8qIFBhZ2UgQWRkcmVzcyBBY2Nlc3MgVGltZSAqLworI2RlZmluZSBST01DT05fUE1DCQkoMyAgICAgPDwgIDApCQkvKiBQYWdlIE1vZGUgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZQkJUE1DX05PUk1BTAkJKDAgPDwgMCkKKyNkZWZpbmUJCVBNQ180V09SRAkJKDEgPDwgMCkKKyNkZWZpbmUJCVBNQ184V09SRAkJKDIgPDwgMCkKKyNkZWZpbmUJCVBNQ18xNldPUkQJCSgzIDw8IDApCisKKy8qIEV4dGVybmFsIEkvTyBhbmQgUk9NL1NSQU0vRmxhc2ggR2VuZXJhbCBSZWdpc3RlciAqLworI2RlZmluZSBFUkdDT05fVE1VTFQJCSgzIDw8IDI4KQkJLyogVGltZSBNdWx0aXBsaWVyICovCisjZGVmaW5lIEVSR0NPTl9EU1gyCQkoMyA8PCAyMCkJCS8qIERhdGEgV2lkdGggKEV4dGVybmFsIEkvTyBCYW5rIDIpICovCisjZGVmaW5lIEVSR0NPTl9EU1gxCQkoMyA8PCAxOCkJCS8qIERhdGEgV2lkdGggKEV4dGVybmFsIEkvTyBCYW5rIDEpICovCisjZGVmaW5lIEVSR0NPTl9EU1gwCQkoMyA8PCAxNikJCS8qIERhdGEgV2lkdGggKEV4dGVybmFsIEkvTyBCYW5rIDApICovCisjZGVmaW5lIEVSR0NPTl9EU1IxCQkoMyA8PCAgMikJCS8qIERhdGEgV2lkdGggKFJPTS9TUkFNL0ZsYXNoIEJhbmsgMSkgKi8KKyNkZWZpbmUgRVJHQ09OX0RTUjAJCSgzIDw8ICAwKQkJLyogRGF0YSBXaWR0aCAoUk9NL1NSQU0vRmxhc2ggQmFuayAwKSAqLworCisvKiBTRFJBTSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNEQ09OX0RCTlBUUgkJKDB4M2ZmIDw8IDIyKQkJLyogTGFzdCBBZGRyZXNzIFBvaW50ZXIgKi8KKyNkZWZpbmUgU0RDT05fREJCUFRSCQkoMHgzZmYgPDwgMTIpCQkvKiBCYXNlIFBvaW50ZXIgKi8KKyNkZWZpbmUgU0RDT05fREJDQUIJCSgzICAgICA8PCAgOCkJCS8qIENvbHVtbiBBZGRyZXNzIEJpdHMgKi8KKyNkZWZpbmUgU0RDT05fREJCTlVNCQkoMSAgICAgPDwgIDMpCQkvKiBOdW1iZXIgb2YgQmFua3MgKi8KKyNkZWZpbmUgU0RDT05fREJEQlcJCSgzICAgICA8PCAgMSkJCS8qIERhdGEgQnVzIFdpZHRoICovCisKKy8qIFNEUkFNIEdlbmVyYWwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTREdDT05fU0RUUkMJCSgzIDw8IDIpCQkvKiBSQVMgdG8gQ0FTIGxhdGVuY3kgKi8KKyNkZWZpbmUgU0RHQ09OX1NEQ0FTCQkoMyA8PCAwKQkJLyogQ0FTIGxhdGVuY3kgKi8KKworLyogU0RSQU0gQnVmZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0RCQ09OX1NERVNUQQkJKDEgPDwgMzEpCQkvKiBTRFJBTSBFbmdpbmUgU3RhdHVzICovCisjZGVmaW5lIFNEQkNPTl9SQlVGQkRJUwkJKDEgPDwgMjQpCQkvKiBSZWFkIEJ1ZmZlciBCdXJzdCBFbmFibGUgKi8KKyNkZWZpbmUgU0RCQ09OX1dGSUZPRU4JCSgxIDw8IDIzKQkJLyogV3JpdGUgRklGTyBFbmFibGUgKi8KKyNkZWZpbmUgU0RCQ09OX1JCVUZFTgkJKDEgPDwgMjIpCQkvKiBSZWFkIEJ1ZmZlciBFbmFibGUgKi8KKyNkZWZpbmUgU0RCQ09OX0ZMVVNIV0ZJRk8JKDEgPDwgMjEpCQkvKiBGbHVzaCBXcml0ZSBGSUZPICovCisjZGVmaW5lIFNEQkNPTl9SQlVGSU5WCQkoMSA8PCAyMCkJCS8qIFJlYWQgQnVmZmVyIEludmFsaWRhdGUgKi8KKyNkZWZpbmUgU0RCQ09OX1NESU5JCQkoMyA8PCAxNikJCS8qIFNEUkFNIEluaXRpYWxpemF0aW9uIENvbnRyb2wgKi8KKyNkZWZpbmUgU0RCQ09OX1NETU9ERQkJKDB4M2ZmZiA8PCAwKQkJLyogU0RSQU0gTW9kZSBSZWdpc3RlciBWYWx1ZSBQcm9ncmFtICovCisKKy8qIFNEUkFNIFJlZnJlc2ggVGltZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVGVElNX1JFRlRJTQkJKDB4ZmZmZiA8PCAwKQkJLyogUmVmcmVzaCBUaW1lciBWYWx1ZSAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3MtbWlzYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3MtbWlzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMmNhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy1taXNjLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLW1pc2MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbmRyZXcgVmljdG9yCisgKgorICogS1M4Njk1IC0gTWlzY2VsbGFuZW91cyBSZWdpc3RlcnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIEtTODY5NV9NSVNDX0gKKyNkZWZpbmUgS1M4Njk1X01JU0NfSAorCisjZGVmaW5lIEtTODY5NV9NSVNDX09GRlNFVAkoMHhGMDAwMCArIDB4RUEwMCkKKyNkZWZpbmUgS1M4Njk1X01JU0NfVkEJCShLUzg2OTVfSU9fVkEgKyBLUzg2OTVfTUlTQ19PRkZTRVQpCisjZGVmaW5lIEtTODY5NV9NSVNDX1BBCQkoS1M4Njk1X0lPX1BBICsgS1M4Njk1X01JU0NfT0ZGU0VUKQorCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIHJlZ2lzdGVycworICovCisjZGVmaW5lIEtTODY5NV9ESUQJCSgweDAwKQkJLyogRGV2aWNlIElEICovCisjZGVmaW5lIEtTODY5NV9SSUQJCSgweDA0KQkJLyogUmV2aXNpb24gSUQgKi8KKyNkZWZpbmUgS1M4Njk1X0hNQwkJKDB4MDgpCQkvKiBIUE5BIE1pc2NlbGxhbmVvdXMgQ29udHJvbCBbS1M4Njk1IG9ubHldICovCisjZGVmaW5lIEtTODY5NV9XTUMJCSgweDBjKQkJLyogV0FOIE1pc2NlbGxhbmVvdXMgQ29udHJvbCAqLworI2RlZmluZSBLUzg2OTVfV1BQTQkJKDB4MTApCQkvKiBXQU4gUEhZIFBvd2VyIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgS1M4Njk1X1BQUwkJKDB4MWMpCQkvKiBQSFkgUG93ZXJTYXZlICovCisKKy8qIERldmljZSBJRCBSZWdpc3RlciAqLworI2RlZmluZSBESURfSUQJCQkoMHhmZmZmIDw8IDApCS8qIERldmljZSBJRCAqLworCisvKiBSZXZpc2lvbiBJRCBSZWdpc3RlciAqLworI2RlZmluZSBSSURfU1VCSUQJCSgweGYgPDwgNCkJLyogU3ViLURldmljZSBJRCAqLworI2RlZmluZSBSSURfUkVWSVNJT04JCSgweGYgPDwgMCkJLyogUmV2aXNpb24gSUQgKi8KKworLyogSFBOQSBNaXNjZWxsYW5lb3VzIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSE1DX0hTUwkJCSgxIDw8IDEpCS8qIFNwZWVkICovCisjZGVmaW5lIEhNQ19IRFMJCQkoMSA8PCAwKQkvKiBEdXBsZXggKi8KKworLyogV0FOIE1pc2NlbGxhbmVvdXMgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBXTUNfV0FOQwkJKDEgPDwgMzApCS8qIEF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgKi8KKyNkZWZpbmUgV01DX1dBTlIJCSgxIDw8IDI5KQkvKiBBdXRvLW5lZ290aWF0aW9uIHJlc3RhcnQgKi8KKyNkZWZpbmUgV01DX1dBTkFQCQkoMSA8PCAyOCkJLyogQWR2ZXJ0aXNlIFBhdXNlICovCisjZGVmaW5lIFdNQ19XQU5BMTAwRgkJKDEgPDwgMjcpCS8qIEFkdmVydGlzZSAxMDAgRkRYICovCisjZGVmaW5lIFdNQ19XQU5BMTAwSAkJKDEgPDwgMjYpCS8qIEFkdmVydGlzZSAxMDAgSERYICovCisjZGVmaW5lIFdNQ19XQU5BMTBGCQkoMSA8PCAyNSkJLyogQWR2ZXJ0aXNlIDEwIEZEWCAqLworI2RlZmluZSBXTUNfV0FOQTEwSAkJKDEgPDwgMjQpCS8qIEFkdmVydGlzZSAxMCBIRFggKi8KKyNkZWZpbmUgV01DX1dMUwkJCSgxIDw8IDIzKQkvKiBMaW5rIHN0YXR1cyAqLworI2RlZmluZSBXTUNfV0RTCQkJKDEgPDwgMjIpCS8qIER1cGxleCBzdGF0dXMgKi8KKyNkZWZpbmUgV01DX1dTUwkJCSgxIDw8IDIxKQkvKiBTcGVlZCBzdGF0dXMgKi8KKyNkZWZpbmUgV01DX1dMUFAJCSgxIDw8IDIwKQkvKiBMaW5rIFBhcnRuZXIgUGF1c2UgKi8KKyNkZWZpbmUgV01DX1dMUDEwMEYJCSgxIDw8IDE5KQkvKiBMaW5rIFBhcnRuZXIgMTAwIEZEWCAqLworI2RlZmluZSBXTUNfV0xQMTAwSAkJKDEgPDwgMTgpCS8qIExpbmsgUGFydG5lciAxMDAgSERYICovCisjZGVmaW5lIFdNQ19XTFAxMEYJCSgxIDw8IDE3KQkvKiBMaW5rIFBhcnRuZXIgMTAgRkRYICovCisjZGVmaW5lIFdNQ19XTFAxMEgJCSgxIDw8IDE2KQkvKiBMaW5rIFBhcnRuZXIgMTAgSERYICovCisjZGVmaW5lIFdNQ19XQU5ECQkoMSA8PCAxNSkJLyogQXV0by1uZWdvdGlhdGlvbiBkaXNhYmxlICovCisjZGVmaW5lIFdNQ19XQU5GMTAwCQkoMSA8PCAxNCkJLyogRm9yY2UgMTAwICovCisjZGVmaW5lIFdNQ19XQU5GRgkJKDEgPDwgMTMpCS8qIEZvcmNlIEZEWCAqLworI2RlZmluZSBXTUNfV0xFRDFTCQkoNyA8PCAgNCkJLyogTEVEMSBTZWxlY3QgKi8KKyNkZWZpbmUJCVdMRUQxU19TUEVFRAkJKDAgPDwgNCkKKyNkZWZpbmUJCVdMRUQxU19MSU5LCQkoMSA8PCA0KQorI2RlZmluZQkJV0xFRDFTX0RVUExFWAkJKDIgPDwgNCkKKyNkZWZpbmUJCVdMRUQxU19DT0xMSVNJT04JKDMgPDwgNCkKKyNkZWZpbmUJCVdMRUQxU19BQ1RJVklUWQkJKDQgPDwgNCkKKyNkZWZpbmUJCVdMRUQxU19GRFhfQ09MTElTSU9OCSg1IDw8IDQpCisjZGVmaW5lCQlXTEVEMVNfTElOS19BQ1RJVklUWQkoNiA8PCA0KQorI2RlZmluZSBXTUNfV0xFRDBTCQkoNyA8PCAwKQkvKiBMRUQwIFNlbGVjdCAqLworI2RlZmluZQkJV0xFRDBTX1NQRUVECQkoMCA8PCAwKQorI2RlZmluZQkJV0xFRDBTX0xJTksJCSgxIDw8IDApCisjZGVmaW5lCQlXTEVEMFNfRFVQTEVYCQkoMiA8PCAwKQorI2RlZmluZQkJV0xFRDBTX0NPTExJU0lPTgkoMyA8PCAwKQorI2RlZmluZQkJV0xFRDBTX0FDVElWSVRZCQkoNCA8PCAwKQorI2RlZmluZQkJV0xFRDBTX0ZEWF9DT0xMSVNJT04JKDUgPDwgMCkKKyNkZWZpbmUJCVdMRUQwU19MSU5LX0FDVElWSVRZCSg2IDw8IDApCisKKy8qIFdBTiBQSFkgUG93ZXIgTWFuYWdlbWVudCBSZWdpc3RlciAqLworI2RlZmluZSBXUFBNX1dMUEJLCQkoMSA8PCAxNCkJLyogTG9jYWwgTG9vcGJhY2sgKi8KKyNkZWZpbmUgV1BQTV9XUkxQS0IJCSgxIDw8IDEzKQkvKiBSZW1vdmUgTG9vcGJhY2sgKi8KKyNkZWZpbmUgV1BQTV9XUEkJCSgxIDw8IDEyKQkvKiBQSFkgaXNvbGF0ZSAqLworI2RlZmluZSBXUFBNX1dGTAkJKDEgPDwgMTApCS8qIEZvcmNlIGxpbmsgKi8KKyNkZWZpbmUgV1BQTV9NRElYUwkJKDEgPDwgOSkJLyogTURJWCBTdGF0dXMgKi8KKyNkZWZpbmUgV1BQTV9GRUYJCSgxIDw8IDgpCS8qIEZhciBFbmQgRmF1bHQgKi8KKyNkZWZpbmUgV1BQTV9BTURJWFAJCSgxIDw8IDcpCS8qIEF1dG8gTURJWCBQYXJhbWV0ZXIgKi8KKyNkZWZpbmUgV1BQTV9UWERJUwkJKDEgPDwgNikJLyogRGlzYWJsZSB0cmFuc21pdHRlciAqLworI2RlZmluZSBXUFBNX0RGRUYJCSgxIDw8IDUpCS8qIERpc2FibGUgRmFyIEVuZCBGYXVsdCAqLworI2RlZmluZSBXUFBNX1BECQkJKDEgPDwgNCkJLyogUG93ZXIgRG93biAqLworI2RlZmluZSBXUFBNX0RNRFgJCSgxIDw8IDMpCS8qIERpc2FibGUgQXV0byBNREkvTURJWCAqLworI2RlZmluZSBXUFBNX0ZNRFgJCSgxIDw8IDIpCS8qIEZvcmNlIE1ESVggKi8KKyNkZWZpbmUgV1BQTV9MUEJLCQkoMSA8PCAxKQkvKiBNQVggTG9vcGJhY2sgKi8KKworLyogUEhZIFBvd2VyIFNhdmUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUFBTX1BQU00JCSgxIDw8IDApCS8qIFBIWSBQb3dlciBTYXZlIE1vZGUgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLXBjaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3MtcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg2ZDZkNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLXBjaS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy1wY2kuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogS1M4Njk1IC0gUENJIGJyaWRnZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjZGVmaW5lIEtTODY5NV9QQ0lfT0ZGU0VUCSgweEYwMDAwICsgMHgyMDAwKQorI2RlZmluZSBLUzg2OTVfUENJX1ZBCQkoS1M4Njk1X0lPX1ZBICsgS1M4Njk1X1BDSV9PRkZTRVQpCisjZGVmaW5lIEtTODY5NV9QQ0lfUEEJCShLUzg2OTVfSU9fUEEgKyBLUzg2OTVfUENJX09GRlNFVCkKKworCisjZGVmaW5lIEtTODY5NV9DUkNGSUQJCSgweDAwMCkJCS8qIENvbmZpZ3VyYXRpb246IElkZW50aWZpY2F0aW9uICovCisjZGVmaW5lIEtTODY5NV9DUkNGQ1MJCSgweDAwNCkJCS8qIENvbmZpZ3VyYXRpb246IENvbW1hbmQgYW5kIFN0YXR1cyAqLworI2RlZmluZSBLUzg2OTVfQ1JDRlJWCQkoMHgwMDgpCQkvKiBDb25maWd1cmF0aW9uOiBSZXZpc2lvbiAqLworI2RlZmluZSBLUzg2OTVfQ1JDRkxUCQkoMHgwMEMpCQkvKiBDb25maWd1cmF0aW9uOiBMYXRlbmN5IFRpbWVyICovCisjZGVmaW5lIEtTODY5NV9DUkNCTUEJCSgweDAxMCkJCS8qIENvbmZpZ3VyYXRpb246IEJhc2UgTWVtb3J5IEFkZHJlc3MgKi8KKyNkZWZpbmUgS1M4Njk1X0NSQ1NJRAkJKDB4MDJDKQkJLyogQ29uZmlndXJhdGlvbjogU3Vic3lzdGVtIElEICovCisjZGVmaW5lIEtTODY5NV9DUkNGSVQJCSgweDAzQykJCS8qIENvbmZpZ3VyYXRpb246IEludGVycnVwdCAqLworI2RlZmluZSBLUzg2OTVfUEJDQQkJKDB4MTAwKQkJLyogQnJpZGdlIENvbmZpZ3VyYXRpb24gQWRkcmVzcyAqLworI2RlZmluZSBLUzg2OTVfUEJDRAkJKDB4MTA0KQkJLyogQnJpZGdlIENvbmZpZ3VyYXRpb24gRGF0YSAqLworI2RlZmluZSBLUzg2OTVfUEJNCQkoMHgyMDApCQkvKiBCcmlkZ2UgTW9kZSAqLworI2RlZmluZSBLUzg2OTVfUEJDUwkJKDB4MjA0KQkJLyogQnJpZGdlIENvbnRyb2wgYW5kIFN0YXR1cyAqLworI2RlZmluZSBLUzg2OTVfUE1CQQkJKDB4MjA4KQkJLyogQnJpZGdlIE1lbW9yeSBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgS1M4Njk1X1BNQkFDCQkoMHgyMEMpCQkvKiBCcmlkZ2UgTWVtb3J5IEJhc2UgQWRkcmVzcyBDb250cm9sICovCisjZGVmaW5lIEtTODY5NV9QTUJBTQkJKDB4MjEwKQkJLyogQnJpZGdlIE1lbW9yeSBCYXNlIEFkZHJlc3MgTWFzayAqLworI2RlZmluZSBLUzg2OTVfUE1CQVQJCSgweDIxNCkJCS8qIEJyaWRnZSBNZW1vcnkgQmFzZSBBZGRyZXNzIFRyYW5zbGF0aW9uICovCisjZGVmaW5lIEtTODY5NV9QSU9CQQkJKDB4MjE4KQkJLyogQnJpZGdlIEkvTyBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgS1M4Njk1X1BJT0JBQwkJKDB4MjFDKQkJLyogQnJpZGdlIEkvTyBCYXNlIEFkZHJlc3MgQ29udHJvbCAqLworI2RlZmluZSBLUzg2OTVfUElPQkFNCQkoMHgyMjApCQkvKiBCcmlkZ2UgSS9PIEJhc2UgQWRkcmVzcyBNYXNrICovCisjZGVmaW5lIEtTODY5NV9QSU9CQVQJCSgweDIyNCkJCS8qIEJyaWRnZSBJL08gQmFzZSBBZGRyZXNzIFRyYW5zbGF0aW9uICovCisKKworLyogQ29uZmlndXJhdGlvbjogSWRlbnRpZmljYXRpb24gKi8KKworLyogQ29uZmlndXJhdGlvbjogQ29tbWFuZCBhbmQgU3RhdHVzICovCisKKy8qIENvbmZpZ3VyYXRpb246IFJldmlzaW9uICovCisKKworCisjZGVmaW5lIENGUlZfR1VFU1QJCSgxIDw8IDIzKQorCisjZGVmaW5lIFBCQ0FfVFlQRTEJCSgxKQorI2RlZmluZSBQQkNBX0VOQUJMRQkJKDEgPDwgMzEpCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3Mtc3dpdGNoLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy1zd2l0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjM3YmUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3Mtc3dpdGNoLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLXN3aXRjaC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHJldyBWaWN0b3IKKyAqCisgKiBLUzg2OTUgLSBTd2l0Y2ggUmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBLUzg2OTVfU1dJVENIX0gKKyNkZWZpbmUgS1M4Njk1X1NXSVRDSF9ICisKKyNkZWZpbmUgS1M4Njk1X1NXSVRDSF9PRkZTRVQJKDB4RjAwMDAgKyAweGU4MDApCisjZGVmaW5lIEtTODY5NV9TV0lUQ0hfVkEJKEtTODY5NV9JT19WQSArIEtTODY5NV9TV0lUQ0hfT0ZGU0VUKQorI2RlZmluZSBLUzg2OTVfU1dJVENIX1BBCShLUzg2OTVfSU9fUEEgKyBLUzg2OTVfU1dJVENIX09GRlNFVCkKKworCisvKgorICogU3dpdGNoIHJlZ2lzdGVycworICovCisjZGVmaW5lIEtTODY5NV9TRUMwCQkoMHgwMCkJCS8qIFN3aXRjaCBFbmdpbmUgQ29udHJvbCAwICovCisjZGVmaW5lIEtTODY5NV9TRUMxCQkoMHgwNCkJCS8qIFN3aXRjaCBFbmdpbmUgQ29udHJvbCAxICovCisjZGVmaW5lIEtTODY5NV9TRUMyCQkoMHgwOCkJCS8qIFN3aXRjaCBFbmdpbmUgQ29udHJvbCAyICovCisKKyNkZWZpbmUgS1M4Njk1X1AoeClfQyh6KQkoMHhjMCArICgoKHgpLTEpKjMgKyAoKHopLTEpKSo0KQkvKiBQb3J0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgS1M4Njk1X1NFUDEyQU4JCSgweDQ4KQkJLyogUG9ydCAxICYgMiBBdXRvLU5lZ290aWF0aW9uICovCisjZGVmaW5lIEtTODY5NV9TRVAzNEFOCQkoMHg0YykJCS8qIFBvcnQgMyAmIDQgQXV0by1OZWdvdGlhdGlvbiAqLworI2RlZmluZSBLUzg2OTVfU0VJQUMJCSgweDUwKQkJLyogSW5kaXJlY3QgQWNjZXNzIENvbnRyb2wgKi8KKyNkZWZpbmUgS1M4Njk1X1NFSUFESDIJCSgweDU0KQkJLyogSW5kaXJlY3QgQWNjZXNzIERhdGEgSGlnaCAyICovCisjZGVmaW5lIEtTODY5NV9TRUlBREgxCQkoMHg1OCkJCS8qIEluZGlyZWN0IEFjY2VzcyBEYXRhIEhpZ2ggMSAqLworI2RlZmluZSBLUzg2OTVfU0VJQURMCQkoMHg1YykJCS8qIEluZGlyZWN0IEFjY2VzcyBEYXRhIExvdyAqLworI2RlZmluZSBLUzg2OTVfU0VBRkMJCSgweDYwKQkJLyogQWR2YW5jZSBGZWF0dXJlIENvbnRyb2wgKi8KKyNkZWZpbmUgS1M4Njk1X1NFRFNDUEgJCSgweDY0KQkJLyogVE9TIFByaW9yaXR5IEhpZ2ggKi8KKyNkZWZpbmUgS1M4Njk1X1NFRFNDUEwJCSgweDY4KQkJLyogVE9TIFByaW9yaXR5IExvdyAqLworI2RlZmluZSBLUzg2OTVfU0VNQUgJCSgweDZjKQkJLyogU3dpdGNoIEVuZ2luZSBNQUMgQWRkcmVzcyBIaWdoICovCisjZGVmaW5lIEtTODY5NV9TRU1BTAkJKDB4NzApCQkvKiBTd2l0Y2ggRW5naW5lIE1BQyBBZGRyZXNzIExvdyAqLworI2RlZmluZSBLUzg2OTVfTFBQTTEyCQkoMHg3NCkJCS8qIFBvcnQgMSAmIDIgUEhZIFBvd2VyIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgS1M4Njk1X0xQUE0zNAkJKDB4NzgpCQkvKiBQb3J0IDMgJiA0IFBIWSBQb3dlciBNYW5hZ2VtZW50ICovCisKKworLyogU3dpdGNoIEVuZ2luZSBDb250cm9sIDAgKi8KKyNkZWZpbmUgU0VDMF9MTEVEMVMJCSg3IDw8IDI1KQkvKiBMRUQxIFNlbGVjdCAqLworI2RlZmluZQkJTExFRDFTX1NQRUVECQkoMCA8PCAyNSkKKyNkZWZpbmUJCUxMRUQxU19MSU5LCQkoMSA8PCAyNSkKKyNkZWZpbmUJCUxMRUQxU19EVVBMRVgJCSgyIDw8IDI1KQorI2RlZmluZQkJTExFRDFTX0NPTExJU0lPTgkoMyA8PCAyNSkKKyNkZWZpbmUJCUxMRUQxU19BQ1RJVklUWQkJKDQgPDwgMjUpCisjZGVmaW5lCQlMTEVEMVNfRkRYX0NPTExJU0lPTgkoNSA8PCAyNSkKKyNkZWZpbmUJCUxMRUQxU19MSU5LX0FDVElWSVRZCSg2IDw8IDI1KQorI2RlZmluZSBTRUMwX0xMRUQwUwkJKDcgPDwgMjIpCS8qIExFRDAgU2VsZWN0ICovCisjZGVmaW5lCQlMTEVEMFNfU1BFRUQJCSgwIDw8IDIyKQorI2RlZmluZQkJTExFRDBTX0xJTksJCSgxIDw8IDIyKQorI2RlZmluZQkJTExFRDBTX0RVUExFWAkJKDIgPDwgMjIpCisjZGVmaW5lCQlMTEVEMFNfQ09MTElTSU9OCSgzIDw8IDIyKQorI2RlZmluZQkJTExFRDBTX0FDVElWSVRZCQkoNCA8PCAyMikKKyNkZWZpbmUJCUxMRUQwU19GRFhfQ09MTElTSU9OCSg1IDw8IDIyKQorI2RlZmluZQkJTExFRDBTX0xJTktfQUNUSVZJVFkJKDYgPDwgMjIpCisjZGVmaW5lIFNFQzBfRU5BQkxFCQkoMSA8PCAwKQkvKiBFbmFibGUgU3dpdGNoICovCisKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLXN5cy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3Mtc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxNzk4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLXN5cy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy1zeXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogS1M4Njk1IC0gU3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIEtTODY5NV9TWVNfSAorI2RlZmluZSBLUzg2OTVfU1lTX0gKKworI2RlZmluZSBLUzg2OTVfU1lTX09GRlNFVAkoMHhGMDAwMCArIDB4MDAwMCkKKyNkZWZpbmUgS1M4Njk1X1NZU19WQQkJKEtTODY5NV9JT19WQSArIEtTODY5NV9TWVNfT0ZGU0VUKQorI2RlZmluZSBLUzg2OTVfU1lTX1BBCQkoS1M4Njk1X0lPX1BBICsgS1M4Njk1X1NZU19PRkZTRVQpCisKKworI2RlZmluZSBLUzg2OTVfU1lTQ0ZHCQkoMHgwMCkJCS8qIFN5c3RlbSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEtTODY5NV9DTEtDT04JCSgweDA0KQkJLyogU3lzdGVtIENsb2NrIGFuZCBCdXMgQ29udHJvbCBSZWdpc3RlciAqLworCisKKy8qIFN5c3RlbSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFNZU0NGR19TUFJCUAkJKDB4M2ZmIDw8IDE2KQkvKiBSZWdpc3RlciBCYW5rIEJhc2UgUG9pbnRlciAqLworCisvKiBTeXN0ZW0gQ2xvY2sgYW5kIEJ1cyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENMS0NPTl9TRk1PREUJCSgxIDw8IDgpCS8qIFN5c3RlbSBGYXN0IE1vZGUgZm9yIFNpbXVsYXRpb24gKi8KKyNkZWZpbmUgQ0xLQ09OX1NDREMJCSg3IDw8IDApCS8qIFN5c3RlbSBDbG9jayBEaXZpZGVyIFNlbGVjdCAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3MtdGltZXIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLXRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE5ZjdmOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLXRpbWVyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLXRpbWVyLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIEtTODY5NSAtIFRpbWVyIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgS1M4Njk1X1RJTUVSX0gKKyNkZWZpbmUgS1M4Njk1X1RJTUVSX0gKKworI2RlZmluZSBLUzg2OTVfVE1SX09GRlNFVAkoMHhGMDAwMCArIDB4RTQwMCkKKyNkZWZpbmUgS1M4Njk1X1RNUl9WQQkJKEtTODY5NV9JT19WQSArIEtTODY5NV9UTVJfT0ZGU0VUKQorI2RlZmluZSBLUzg2OTVfVE1SX1BBCQkoS1M4Njk1X0lPX1BBICsgS1M4Njk1X1RNUl9PRkZTRVQpCisKKworLyoKKyAqIFRpbWVyIHJlZ2lzdGVycworICovCisjZGVmaW5lIEtTODY5NV9UTUNPTgkJKDB4MDApCQkvKiBUaW1lciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEtTODY5NV9UMVRDCQkoMHgwNCkJCS8qIFRpbWVyIDEgVGltZW91dCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBLUzg2OTVfVDBUQwkJKDB4MDgpCQkvKiBUaW1lciAwIFRpbWVvdXQgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgS1M4Njk1X1QxUEQJCSgweDBDKQkJLyogVGltZXIgMSBQdWxzZSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBLUzg2OTVfVDBQRAkJKDB4MTApCQkvKiBUaW1lciAwIFB1bHNlIENvdW50IFJlZ2lzdGVyICovCisKKworLyogVGltZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBUTUNPTl9UMUVOCQkoMSA8PCAxKQkvKiBUaW1lciAxIEVuYWJsZSAqLworI2RlZmluZSBUTUNPTl9UMEVOCQkoMSA8PCAwKQkvKiBUaW1lciAwIEVuYWJsZSAqLworCisvKiBUaW1lcjAgVGltZW91dCBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFQwVENfV0FUQ0hET0cJCSgweGZmKQkJLyogRW5hYmxlIHdhdGNoZG9nIG1vZGUgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLXVhcnQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLXVhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjdjYjIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3MtdWFydC5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy11YXJ0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIEtTODY5NSAtIFVBUlQgcmVnaXN0ZXIgYW5kIGJpdCBkZWZpbml0aW9ucy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgS1M4Njk1X1VBUlRfSAorI2RlZmluZSBLUzg2OTVfVUFSVF9ICisKKyNkZWZpbmUgS1M4Njk1X1VBUlRfT0ZGU0VUCSgweEYwMDAwICsgMHhFMDAwKQorI2RlZmluZSBLUzg2OTVfVUFSVF9WQQkJKEtTODY5NV9JT19WQSArIEtTODY5NV9VQVJUX09GRlNFVCkKKyNkZWZpbmUgS1M4Njk1X1VBUlRfUEEJCShLUzg2OTVfSU9fUEEgKyBLUzg2OTVfVUFSVF9PRkZTRVQpCisKKworLyoKKyAqIFVBUlQgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgS1M4Njk1X1VSUkIJKDB4MDApCQkvKiBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAqLworI2RlZmluZSBLUzg2OTVfVVJUSAkoMHgwNCkJCS8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgS1M4Njk1X1VSRkMJKDB4MDgpCQkvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgS1M4Njk1X1VSTEMJKDB4MEMpCQkvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgS1M4Njk1X1VSTUMJKDB4MTApCQkvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEtTODY5NV9VUkxTCSgweDE0KQkJLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgS1M4Njk1X1VSTVMJKDB4MTgpCQkvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgS1M4Njk1X1VSQkQJKDB4MUMpCQkvKiBCYXVkIFJhdGUgRGl2aXNvciBSZWdpc3RlciAqLworI2RlZmluZSBLUzg2OTVfVVNSCSgweDIwKQkJLyogU3RhdHVzIFJlZ2lzdGVyICovCisKKworLyogRklGTyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVSRkNfVVJGUlQJKDMgPDwgNikJLyogUmVjZWl2ZSBGSUZPIFRyaWdnZXIgTGV2ZWwgKi8KKyNkZWZpbmUJCVVSRkNfVVJGUlRfMQkoMCA8PCA2KQorI2RlZmluZQkJVVJGQ19VUkZSVF80CSgxIDw8IDYpCisjZGVmaW5lCQlVUkZDX1VSRlJUXzgJKDIgPDwgNikKKyNkZWZpbmUJCVVSRkNfVVJGUlRfMTQJKDMgPDwgNikKKyNkZWZpbmUgVVJGQ19VUlRGUgkoMSA8PCAyKQkvKiBUcmFuc21pdCBGSUZPIFJlc2V0ICovCisjZGVmaW5lIFVSRkNfVVJSRlIJKDEgPDwgMSkJLyogUmVjZWl2ZSBGSUZPIFJlc2V0ICovCisjZGVmaW5lIFVSRkNfVVJGRQkoMSA8PCAwKQkvKiBGSUZPIEVuYWJsZSAqLworCisvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVJMQ19VUlNCQwkoMSA8PCA2KQkvKiBTZXQgQnJlYWsgQ29uZGl0aW9uICovCisjZGVmaW5lIFVSTENfUEFSSVRZCSg3IDw8IDMpCS8qIFBhcml0eSAqLworI2RlZmluZQkJVVJQRV9OT05FCSgwIDw8IDMpCisjZGVmaW5lCQlVUlBFX09ERAkoMSA8PCAzKQorI2RlZmluZQkJVVJQRV9FVkVOCSgzIDw8IDMpCisjZGVmaW5lCQlVUlBFX01BUksJKDUgPDwgMykKKyNkZWZpbmUJCVVSUEVfU1BBQ0UJKDcgPDwgMykKKyNkZWZpbmUgVVJMQ19VUlNCCSgxIDw8IDIpCS8qIFN0b3AgQml0cyAqLworI2RlZmluZSBVUkxDX1VSQ0wJKDMgPDwgMCkJLyogQ2hhcmFjdGVyIExlbmd0aCAqLworI2RlZmluZQkJVVJDTF81CQkoMCA8PCAwKQorI2RlZmluZQkJVVJDTF82CQkoMSA8PCAwKQorI2RlZmluZQkJVVJDTF83CQkoMiA8PCAwKQorI2RlZmluZQkJVVJDTF84CQkoMyA8PCAwKQorCisvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVSTUNfVVJMQgkoMSA8PCA0KQkvKiBMb29wLWJhY2sgbW9kZSAqLworI2RlZmluZSBVUk1DX1VST1VUMgkoMSA8PCAzKQkvKiBPVVQyIHNpZ25hbCAqLworI2RlZmluZSBVUk1DX1VST1VUMQkoMSA8PCAyKQkvKiBPVVQxIHNpZ25hbCAqLworI2RlZmluZSBVUk1DX1VSUlRTCSgxIDw8IDEpCS8qIFJlcXVlc3QgdG8gU2VuZCAqLworI2RlZmluZSBVUk1DX1VSRFRSCSgxIDw8IDApCS8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KKworLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVJMU19VUlJGRQkoMSA8PCA3KQkvKiBSZWNlaXZlIEZJRk8gRXJyb3IgKi8KKyNkZWZpbmUgVVJMU19VUlRFCSgxIDw8IDYpCS8qIFRyYW5zbWl0IEVtcHR5ICovCisjZGVmaW5lIFVSTFNfVVJUSFJFCSgxIDw8IDUpCS8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkgKi8KKyNkZWZpbmUgVVJMU19VUkJJCSgxIDw8IDQpCS8qIEJyZWFrIEludGVycnVwdCAqLworI2RlZmluZSBVUkxTX1VSRkUJKDEgPDwgMykJLyogRnJhbWluZyBFcnJvciAqLworI2RlZmluZSBVUkxTX1VSUEUJKDEgPDwgMikJLyogUGFyaXR5IEVycm9yICovCisjZGVmaW5lIFVSTFNfVVJST0UJKDEgPDwgMSkJLyogUmVjZWl2ZSBPdmVycnVuIEVycm9yICovCisjZGVmaW5lIFVSTFNfVVJEUgkoMSA8PCAwKQkvKiBSZWNlaXZlIERhdGEgUmVhZHkgKi8KKworLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVSTVNfVVJEQ0QJKDEgPDwgNykJLyogRGF0YSBDYXJyaWVyIERldGVjdCAqLworI2RlZmluZSBVUk1TX1VSUkkJKDEgPDwgNikJLyogUmluZyBJbmRpY2F0b3IgKi8KKyNkZWZpbmUgVVJNU19VUkRTUgkoMSA8PCA1KQkvKiBEYXRhIFNldCBSZWFkeSAqLworI2RlZmluZSBVUk1TX1VSQ1RTCSgxIDw8IDQpCS8qIENsZWFyIHRvIFNlbmQgKi8KKyNkZWZpbmUgVVJNU19VUkREQ0QJKDEgPDwgMykJLyogRGVsdGEgRGF0YSBDYXJyaWVyIERldGVjdCAqLworI2RlZmluZSBVUk1TX1VSVEVSSQkoMSA8PCAyKQkvKiBUcmFpbGluZyBFZGdlIFJpbmcgSW5kaWNhdG9yICovCisjZGVmaW5lIFVSTVNfVVJERFNUCSgxIDw8IDEpCS8qIERlbHRhIERhdGEgU2V0IFJlYWR5ICovCisjZGVmaW5lIFVSTVNfVVJEQ1RTCSgxIDw8IDApCS8qIERlbHRhIENsZWFyIHRvIFNlbmQgKi8KKworLyogU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVTUl9VVEkJCSgxIDw8IDApCS8qIFRpbWVvdXQgSW5kaWNhdGlvbiAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3Mtd2FuLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvcmVncy13YW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmUzNWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3JlZ3Mtd2FuLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9yZWdzLXdhbi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHJldyBWaWN0b3IKKyAqCisgKiBLUzg2OTUgLSBXQU4gUmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBLUzg2OTVfV0FOX0gKKyNkZWZpbmUgS1M4Njk1X1dBTl9ICisKKyNkZWZpbmUgS1M4Njk1X1dBTl9PRkZTRVQJKDB4RjAwMDAgKyAweDYwMDApCisjZGVmaW5lIEtTODY5NV9XQU5fVkEJCShLUzg2OTVfSU9fVkEgKyBLUzg2OTVfV0FOX09GRlNFVCkKKyNkZWZpbmUgS1M4Njk1X1dBTl9QQQkJKEtTODY5NV9JT19QQSArIEtTODY5NV9XQU5fT0ZGU0VUKQorCisKKy8qCisgKiBXQU4gcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgS1M4Njk1X1dNRFRYQwkJKDB4MDApCQkvKiBETUEgVHJhbnNtaXQgQ29udHJvbCAqLworI2RlZmluZSBLUzg2OTVfV01EUlhDCQkoMHgwNCkJCS8qIERNQSBSZWNlaXZlIENvbnRyb2wgKi8KKyNkZWZpbmUgS1M4Njk1X1dNRFRTQwkJKDB4MDgpCQkvKiBETUEgVHJhbnNtaXQgU3RhcnQgQ29tbWFuZCAqLworI2RlZmluZSBLUzg2OTVfV01EUlNDCQkoMHgwYykJCS8qIERNQSBSZWNlaXZlIFN0YXJ0IENvbW1hbmQgKi8KKyNkZWZpbmUgS1M4Njk1X1dURExCCQkoMHgxMCkJCS8qIFRyYW5zbWl0IERlc2NyaXB0b3IgTGlzdCBCYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgS1M4Njk1X1dSRExCCQkoMHgxNCkJCS8qIFJlY2VpdmUgRGVzY3JpcHRvciBMaXN0IEJhc2UgQWRkcmVzcyAqLworI2RlZmluZSBLUzg2OTVfV01BTAkJKDB4MTgpCQkvKiBNQUMgU3RhdGlvbiBBZGRyZXNzIExvdyAqLworI2RlZmluZSBLUzg2OTVfV01BSAkJKDB4MWMpCQkvKiBNQUMgU3RhdGlvbiBBZGRyZXNzIEhpZ2ggKi8KKyNkZWZpbmUgS1M4Njk1X1dNQUFMXyhuKQkoMHg4MCArICgobikqOCkpCS8qIE1BQyBBZGRpdGlvbmFsIFN0YXRpb24gQWRkcmVzcyAoMC4uMTUpIExvdyAqLworI2RlZmluZSBLUzg2OTVfV01BQUhfKG4pCSgweDg0ICsgKChuKSo4KSkJLyogTUFDIEFkZGl0aW9uYWwgU3RhdGlvbiBBZGRyZXNzICgwLi4xNSkgSGlnaCAqLworCisKKy8qIERNQSBUcmFuc21pdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFdNRFRYQ19XTVRSU1QJCSgxICAgIDw8IDMxKQkvKiBTb2Z0IFJlc2V0ICovCisjZGVmaW5lIFdNRFRYQ19XTVRCUwkJKDB4M2YgPDwgMjQpCS8qIFRyYW5zbWl0IEJ1cnN0IFNpemUgKi8KKyNkZWZpbmUgV01EVFhDX1dNVFVDRwkJKDEgICAgPDwgMTgpCS8qIFRyYW5zbWl0IFVEUCBDaGVja3N1bSBHZW5lcmF0ZSAqLworI2RlZmluZSBXTURUWENfV01UVENHCQkoMSAgICA8PCAxNykJLyogVHJhbnNtaXQgVENQIENoZWNrc3VtIEdlbmVyYXRlICovCisjZGVmaW5lIFdNRFRYQ19XTVRJQ0cJCSgxICAgIDw8IDE2KQkvKiBUcmFuc21pdCBJUCBDaGVja3N1bSBHZW5lcmF0ZSAqLworI2RlZmluZSBXTURUWENfV01URkNFCQkoMSAgICA8PCAgOSkJLyogVHJhbnNtaXQgRmxvdyBDb250cm9sIEVuYWJsZSAqLworI2RlZmluZSBXTURUWENfV01UTEIJCSgxICAgIDw8ICA4KQkvKiBMb29wYmFjayBtb2RlICovCisjZGVmaW5lIFdNRFRYQ19XTVRFUAkJKDEgICAgPDwgIDIpCS8qIFRyYW5zbWl0IEVuYWJsZSBQYWRkaW5nICovCisjZGVmaW5lIFdNRFRYQ19XTVRBQwkJKDEgICAgPDwgIDEpCS8qIFRyYW5zbWl0IEFkZCBDUkMgKi8KKyNkZWZpbmUgV01EVFhDX1dNVEUJCSgxICAgIDw8ICAwKQkvKiBUWCBFbmFibGUgKi8KKworLyogRE1BIFJlY2VpdmUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBXTURSWENfV01SQlMJCSgweDNmIDw8IDI0KQkvKiBSZWNlaXZlIEJ1cnN0IFNpemUgKi8KKyNkZWZpbmUgV01EUlhDX1dNUlVDQwkJKDEgICAgPDwgMTgpCS8qIFJlY2VpdmUgVURQIENoZWNrc3VtIGNoZWNrICovCisjZGVmaW5lIFdNRFJYQ19XTVJUQ0cJCSgxICAgIDw8IDE3KQkvKiBSZWNlaXZlIFRDUCBDaGVja3N1bSBjaGVjayAqLworI2RlZmluZSBXTURSWENfV01SSUNHCQkoMSAgICA8PCAxNikJLyogUmVjZWl2ZSBJUCBDaGVja3N1bSBjaGVjayAqLworI2RlZmluZSBXTURSWENfV01SRkNFCQkoMSAgICA8PCAgOSkJLyogUmVjZWl2ZSBGbG93IENvbnRyb2wgRW5hYmxlICovCisjZGVmaW5lIFdNRFJYQ19XTVJCCQkoMSAgICA8PCAgNikJLyogUmVjZWl2ZSBCcm9hZGNhc3QgKi8KKyNkZWZpbmUgV01EUlhDX1dNUk0JCSgxICAgIDw8ICA1KQkvKiBSZWNlaXZlIE11bHRpY2FzdCAqLworI2RlZmluZSBXTURSWENfV01SVQkJKDEgICAgPDwgIDQpCS8qIFJlY2VpdmUgVW5pY2FzdCAqLworI2RlZmluZSBXTURSWENfV01SRVJSCQkoMSAgICA8PCAgMykJLyogUmVjZWl2ZSBFcnJvciBGcmFtZSAqLworI2RlZmluZSBXTURSWENfV01SQQkJKDEgICAgPDwgIDIpCS8qIFJlY2VpdmUgQWxsICovCisjZGVmaW5lIFdNRFJYQ19XTVJFCQkoMSAgICA8PCAgMCkJLyogUlggRW5hYmxlICovCisKKy8qIEFkZGl0aW9uYWwgU3RhdGlvbiBBZGRyZXNzIEhpZ2ggKi8KKyNkZWZpbmUgV01BQUhfRQkJCSgxICAgIDw8IDMxKQkvKiBBZGRyZXNzIEVuYWJsZWQgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmMyODEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3N5c3RlbS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3N5c3RlbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIEtTODY5NSAtIFN5c3RlbSBmdW5jdGlvbiBkZWZpbmVzIGFuZCBpbmNsdWRlcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtdGltZXIuaD4KKworc3RhdGljIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJLyoKKwkgKiBUaGlzIHNob3VsZCBkbyBhbGwgdGhlIGNsb2NrIHN3aXRjaGluZworCSAqIGFuZCB3YWl0IGZvciBpbnRlcnJ1cHQgdHJpY2tzLAorCSAqLworCWNwdV9kb19pZGxlKCk7CisKK30KKworc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCWlmIChtb2RlID09ICdzJykKKwkJY3B1X3Jlc2V0KDApOworCisJLyogZGlzYWJsZSB0aW1lcjAgKi8KKwlyZWcgPSBfX3Jhd19yZWFkbChLUzg2OTVfVE1SX1ZBICsgS1M4Njk1X1RNQ09OKTsKKwlfX3Jhd193cml0ZWwocmVnICYgflRNQ09OX1QwRU4sIEtTODY5NV9UTVJfVkEgKyBLUzg2OTVfVE1DT04pOworCisJLyogZW5hYmxlIHdhdGNoZG9nIG1vZGUgKi8KKwlfX3Jhd193cml0ZWwoKDEwIDw8IDgpIHwgVDBUQ19XQVRDSERPRywgS1M4Njk1X1RNUl9WQSArIEtTODY5NV9UMFRDKTsKKworCS8qIHJlLWVuYWJsZSB0aW1lcjAgKi8KKwlfX3Jhd193cml0ZWwocmVnIHwgVE1DT05fVDBFTiwgS1M4Njk1X1RNUl9WQSArIEtTODY5NV9UTUNPTik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzIwZDUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3RpbWV4LmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS90aW1leC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIEtTODY5NSAtIFRpbWUgUGFyYW1ldGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICisKKy8qIHRpbWVycyBhcmUgZGVyaXZlZCBmcm9tIE1DTEssIHdoaWNoIGlzIDI1TUh6ICovCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAyNTAwMDAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczM2E1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvdW5jb21wcmVzcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCisgKiBLUzg2OTUgLSBLZXJuZWwgdW5jb21wcmVzc29yCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXVhcnQuaD4KKworc3RhdGljIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJd2hpbGUgKCEoX19yYXdfcmVhZGwoS1M4Njk1X1VBUlRfUEEgKyBLUzg2OTVfVVJMUykgJiBVUkxTX1VSVEhSRSkpCisJCWJhcnJpZXIoKTsKKworCV9fcmF3X3dyaXRlbChjLCBLUzg2OTVfVUFSVF9QQSArIEtTODY5NV9VUlRIKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCit7CisJd2hpbGUgKCEoX19yYXdfcmVhZGwoS1M4Njk1X1VBUlRfUEEgKyBLUzg2OTVfVVJMUykgJiBVUkxTX1VSVEUpKQorCQliYXJyaWVyKCk7Cit9CisKKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1rczg2OTUvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gta3M4Njk1L3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWQ4OGU1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS92bWFsbG9jLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWtzODY5NS92bWFsbG9jLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQmVuIERvb2tzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzIDxsaW51eEBzaW10ZWMuY28udWs+CisgKgorICogS1M4Njk1IHZtYWxsb2MgZGVmaW5pdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorCisjZGVmaW5lIFZNQUxMT0NfRU5ECSAgKEtTODY5NV9JT19WQSAmIFBHRElSX01BU0spCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9haWMyMy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9haWMyMy5oCmluZGV4IDY1MTMwNjUuLmFlYzJkNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYWljMjMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2FpYzIzLmgKQEAgLTExMCw3ICsxMTAsNyBAQAogI2RlZmluZSBUTFYzMjBBSUMyM0lEMSAgICAgICAgICAgICAgICAgICgweDFhKQkvLyBjcyBsb3cKICNkZWZpbmUgVExWMzIwQUlDMjNJRDIgICAgICAgICAgICAgICAgICAoMHgxYikJLy8gY3MgaGlnaAogCi12b2lkIHRsdjMyMGFpYzIzX3Bvd2VyX3VwKHZvaWQpOwotdm9pZCB0bHYzMjBhaWMyM19wb3dlcl9kb3duKHZvaWQpOwordm9pZCBhaWMyM19wb3dlcl91cCh2b2lkKTsKK3ZvaWQgYWljMjNfcG93ZXJfZG93bih2b2lkKTsKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQUlDMjNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1hcG9sbG9uLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFwb2xsb24uaAppbmRleCBkZTBjNWI3Li5kY2I1ODdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFwb2xsb24uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFwb2xsb24uaApAQCAtMzAsMTYgKzMwLDcgQEAKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0FQT0xMT05fSAogCiAvKiBQbGFjZWhvbGRlciBmb3IgQVBPTExPTiBzcGVjaWZpYyBkZWZpbmVzICovCi0vKiBHUE1DIENTMCAqLwotI2RlZmluZSBBUE9MTE9OX0NTMF9CQVNFCQkweDAwMDAwMDAwCi0vKiBHUE1DIENTMSAqLwotI2RlZmluZSBBUE9MTE9OX0NTMV9CQVNFCQkweDA4MDAwMDAwCi0jZGVmaW5lIEFQT0xMT05fRVRIUl9TVEFSVAkJKEFQT0xMT05fQ1MxX0JBU0UgKyAweDMwMCkKICNkZWZpbmUgQVBPTExPTl9FVEhSX0dQSU9fSVJRCQk3NAotLyogR1BNQyBDUzIgLSByZXNlcnZlZCBmb3IgT25lTkFORCAqLwotI2RlZmluZSBBUE9MTE9OX0NTMl9CQVNFCQkweDEwMDAwMDAwCi0vKiBHUE1DIENTMyAtIHJlc2VydmVkIGZvciBOT1Igb3IgTkFORCAqLwotI2RlZmluZSBBUE9MTE9OX0NTM19CQVNFCQkweDE4MDAwMDAwCiAKICNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0FQT0xMT05fSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmgKaW5kZXggN2VmNjY0Yi4uN2UwZWZlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDQuaApAQCAtMzAsOSArMzAsNiBAQAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSDRfSAogCiAvKiBQbGFjZWhvbGRlciBmb3IgSDQgc3BlY2lmaWMgZGVmaW5lcyAqLwotLyogR1BNQyBDUzEgKi8KLSNkZWZpbmUgT01BUDI0WFhfRVRIUl9TVEFSVCAgICAgICAgICAgICAweDA4MDAwMzAwCiAjZGVmaW5lIE9NQVAyNFhYX0VUSFJfR1BJT19JUlEJCTkyCi0jZGVmaW5lIEg0X0NTMF9CQVNFCQkJMHgwNDAwMDAwMAogI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVBfSDRfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmgKaW5kZXggZWRmMWRjNi4uMDMxNjcyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQuaApAQCAtNCw3ICs0LDcgQEAKICAqICBJbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzIGZvciBib2FyZC1zcGVjaWZpYyBkYXRhCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNAlOb2tpYSBDb3Jwb3JhdGlvbgotICogIFdyaXR0ZW4gYnkgSnVoYSBZcmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KKyAqICBXcml0dGVuIGJ5IEp1aGEgWXJqw7Zsw6QgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KICAqLwogCiAjaWZuZGVmIF9PTUFQX0JPQVJEX0gKQEAgLTEyLDYgKzEyLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLXN3aXRjaC5oPgorCiAvKiBEaWZmZXJlbnQgcGVyaXBoZXJhbCBpZHMgKi8KICNkZWZpbmUgT01BUF9UQUdfQ0xPQ0sJCTB4NGYwMQogI2RlZmluZSBPTUFQX1RBR19NTUMJCTB4NGYwMgpAQCAtOTksMjYgKzEwMSwzMSBAQAogc3RydWN0IG9tYXBfbGNkX2NvbmZpZyB7CiAJY2hhciBwYW5lbF9uYW1lWzE2XTsKIAljaGFyIGN0cmxfbmFtZVsxNl07CisJczE2ICBucmVzZXRfZ3BpbzsKKwl1OCAgIGRhdGFfbGluZXM7Cit9OworCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGZiX2luZm87CitzdHJ1Y3Qgb21hcF9iYWNrbGlnaHRfY29uZmlnIHsKKwlpbnQgZGVmYXVsdF9pbnRlbnNpdHk7CisJaW50ICgqc2V0X3Bvd2VyKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSk7CisJaW50ICgqY2hlY2tfZmIpKHN0cnVjdCBmYl9pbmZvICpmYik7CiB9OwogCiBzdHJ1Y3Qgb21hcF9mYm1lbV9jb25maWcgewotCXUzMiBmYl9zcmFtX3N0YXJ0OwotCXUzMiBmYl9zcmFtX3NpemU7Ci0JdTMyIGZiX3NkcmFtX3N0YXJ0OwotCXUzMiBmYl9zZHJhbV9zaXplOworCXUzMiBzdGFydDsKKwl1MzIgc2l6ZTsKIH07CiAKLS8qIENvdmVyOgotICogICAgICBoaWdoIC0+IGNsb3NlZAotICogICAgICBsb3cgIC0+IG9wZW4KLSAqIENvbm5lY3Rpb246Ci0gKiAgICAgIGhpZ2ggLT4gY29ubmVjdGVkCi0gKiAgICAgIGxvdyAgLT4gZGlzY29ubmVjdGVkCi0gKi8KLSNkZWZpbmUgT01BUF9HUElPX1NXSVRDSF9UWVBFX0NPVkVSCQkweDAwMDAKLSNkZWZpbmUgT01BUF9HUElPX1NXSVRDSF9UWVBFX0NPTk5FQ1RJT04JMHgwMDAxCi0jZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfRkxBR19JTlZFUlRFRAkJMHgwMDAxCi0jZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfRkxBR19PVVRQVVQJCTB4MDAwMgorc3RydWN0IG9tYXBfcHdtX2xlZF9wbGF0Zm9ybV9kYXRhIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBpbnRlbnNpdHlfdGltZXI7CisJaW50IGJsaW5rX3RpbWVyOworCXZvaWQgKCpzZXRfcG93ZXIpKHN0cnVjdCBvbWFwX3B3bV9sZWRfcGxhdGZvcm1fZGF0YSAqc2VsZiwgaW50IG9uX29mZik7Cit9OworCisvKiBTZWUgaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLXN3aXRjaC5oIGZvciBkZWZpbml0aW9ucyAqLwogc3RydWN0IG9tYXBfZ3Bpb19zd2l0Y2hfY29uZmlnIHsKIAljaGFyIG5hbWVbMTJdOwogCXUxNiBncGlvOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKaW5kZXggZDU5MWQwNS4uZjc3NzQxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCkBAIC0yLDcgKzIsNyBAQAogICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCi0gKiAgQXV0aG9yOiBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICogIEF1dGhvcjogSnVoYSBZcmrDtmzDpCA8anVoYS55cmpvbGFAbm9raWEuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3AuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZHNwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZGFkODMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3AuaAotICoKLSAqIEhlYWRlciBmb3IgT01BUCBEU1AgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBXcml0dGVuIGJ5IFRvc2hpaGlybyBLb2JheWFzaGkgPHRvc2hpaGlyby5rb2JheWFzaGlAbm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKLSAqCi0gKiAyMDA1LzA2LzAxOiAgRFNQIEdhdGV3YXkgdmVyc2lvbiAzLjMKLSAqLwotCi0jaWZuZGVmIEFTTV9BUkNIX0RTUF9ICi0jZGVmaW5lIEFTTV9BUkNIX0RTUF9ICi0KLQotLyoKLSAqIGZvciAvZGV2L2RzcGN0bC9jdGwKLSAqLwotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9SRVNFVAkJCTEKLSNkZWZpbmUgT01BUF9EU1BfSU9DVExfUlVOCQkJMgotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9TRVRSU1RWRUNUCQkzCi0jZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX0NQVV9JRExFCQkJNAotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9NUFVJX1dPUkRTV0FQX09OCQk1Ci0jZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX01QVUlfV09SRFNXQVBfT0ZGCTYKLSNkZWZpbmUgT01BUF9EU1BfSU9DVExfTVBVSV9CWVRFU1dBUF9PTgkJNwotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9NUFVJX0JZVEVTV0FQX09GRgk4Ci0jZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX0dCTF9JRExFCQkJOQotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9EU1BDRkcJCQkxMAotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9EU1BVTkNGRwkJCTExCi0jZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX1RBU0tDTlQJCQkxMgotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9QT0xMCQkJMTMKLSNkZWZpbmUgT01BUF9EU1BfSU9DVExfUkVHTUVNUgkJCTQwCi0jZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX1JFR01FTVcJCQk0MQotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9SRUdJT1IJCQk0MgotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9SRUdJT1cJCQk0MwotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9HRVRWQVIJCQk0NAotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9TRVRWQVIJCQk0NQotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9SVU5MRVZFTAkJCTUwCi0jZGVmaW5lIE9NQVBfRFNQX0lPQ1RMX1NVU1BFTkQJCQk1MQotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9SRVNVTUUJCQk1MgotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9GQkVOCQkJNTMKLSNkZWZpbmUgT01BUF9EU1BfSU9DVExfRkJESVMJCQk1NAotI2RlZmluZSBPTUFQX0RTUF9JT0NUTF9NQlNFTkQJCQk5OQotCi0vKgotICogZm9yIHRhc2tkZXYKLSAqIChpb2N0bHMgYmVsb3cgc2hvdWxkIGJlID49IDB4MTAwMDApCi0gKi8KLSNkZWZpbmUgT01BUF9EU1BfVEFTS19JT0NUTF9CRkxTSAkweDEwMDAwCi0jZGVmaW5lIE9NQVBfRFNQX1RBU0tfSU9DVExfU0VUQlNaCTB4MTAwMDEKLSNkZWZpbmUgT01BUF9EU1BfVEFTS19JT0NUTF9MT0NLCTB4MTAwMDIKLSNkZWZpbmUgT01BUF9EU1BfVEFTS19JT0NUTF9VTkxPQ0sJMHgxMDAwMwotI2RlZmluZSBPTUFQX0RTUF9UQVNLX0lPQ1RMX0dFVE5BTUUJMHgxMDAwNAotCi0vKgotICogZm9yIC9kZXYvZHNwY3RsL21lbQotICovCi0jZGVmaW5lIE9NQVBfRFNQX01FTV9JT0NUTF9FWE1BUAkxCi0jZGVmaW5lIE9NQVBfRFNQX01FTV9JT0NUTF9FWFVOTUFQCTIKLSNkZWZpbmUgT01BUF9EU1BfTUVNX0lPQ1RMX0VYTUFQX0ZMVVNICTMKLSNkZWZpbmUgT01BUF9EU1BfTUVNX0lPQ1RMX0ZCRVhQT1JUCTUKLSNkZWZpbmUgT01BUF9EU1BfTUVNX0lPQ1RMX01NVUlUQUNLCTcKLSNkZWZpbmUgT01BUF9EU1BfTUVNX0lPQ1RMX01NVUlOSVQJOQotI2RlZmluZSBPTUFQX0RTUF9NRU1fSU9DVExfS01FTV9SRVNFUlZFCTExCi0jZGVmaW5lIE9NQVBfRFNQX01FTV9JT0NUTF9LTUVNX1JFTEVBU0UJMTIKLQotc3RydWN0IG9tYXBfZHNwX21hcGluZm8gewotCXVuc2lnbmVkIGxvbmcgZHNwYWRyOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLX07Ci0KLS8qCi0gKiBmb3IgL2Rldi9kc3BjdGwvdHdjaAotICovCi0jZGVmaW5lIE9NQVBfRFNQX1RXQ0hfSU9DVExfTUtERVYJMQotI2RlZmluZSBPTUFQX0RTUF9UV0NIX0lPQ1RMX1JNREVWCTIKLSNkZWZpbmUgT01BUF9EU1BfVFdDSF9JT0NUTF9UQURECTExCi0jZGVmaW5lIE9NQVBfRFNQX1RXQ0hfSU9DVExfVERFTAkxMgotI2RlZmluZSBPTUFQX0RTUF9UV0NIX0lPQ1RMX1RLSUxMCTEzCi0KLSNkZWZpbmUgT01BUF9EU1BfREVWU1RBVEVfTk9UQVNLCTB4MDAwMDAwMDEKLSNkZWZpbmUgT01BUF9EU1BfREVWU1RBVEVfQVRUQUNIRUQJMHgwMDAwMDAwMgotI2RlZmluZSBPTUFQX0RTUF9ERVZTVEFURV9HQVJCQUdFCTB4MDAwMDAwMDQKLSNkZWZpbmUgT01BUF9EU1BfREVWU1RBVEVfSU5WQUxJRAkweDAwMDAwMDA4Ci0jZGVmaW5lIE9NQVBfRFNQX0RFVlNUQVRFX0FERFJFUQkweDAwMDAwMTAwCi0jZGVmaW5lIE9NQVBfRFNQX0RFVlNUQVRFX0RFTFJFUQkweDAwMDAwMjAwCi0jZGVmaW5lIE9NQVBfRFNQX0RFVlNUQVRFX0FEREZBSUwJMHgwMDAwMTAwMAotI2RlZmluZSBPTUFQX0RTUF9ERVZTVEFURV9BRERJTkcJMHgwMDAxMDAwMAotI2RlZmluZSBPTUFQX0RTUF9ERVZTVEFURV9ERUxJTkcJMHgwMDAyMDAwMAotI2RlZmluZSBPTUFQX0RTUF9ERVZTVEFURV9LSUxMSU5HCTB4MDAwNDAwMDAKLSNkZWZpbmUgT01BUF9EU1BfREVWU1RBVEVfU1RBVEVfTUFTSwkweDdmZmZmZmZmCi0jZGVmaW5lIE9NQVBfRFNQX0RFVlNUQVRFX1NUQUxFCQkweDgwMDAwMDAwCi0KLXN0cnVjdCBvbWFwX2RzcF90YWRkaW5mbyB7Ci0JdW5zaWduZWQgY2hhciBtaW5vcjsKLQl1bnNpZ25lZCBsb25nIHRhc2thZHI7Ci19OwotI2RlZmluZSBPTUFQX0RTUF9UQUREX0FCT1JUQURSCTB4ZmZmZmZmZmYKLQotCi0vKgotICogZXJyb3IgY2F1c2UgZGVmaW5pdGlvbiAoZm9yIGVycm9yIGRldGVjdGlvbiBkZXZpY2UpCi0gKi8KLSNkZWZpbmUgT01BUF9EU1BfRVJSRFRfV0RUCTB4MDAwMDAwMDEKLSNkZWZpbmUgT01BUF9EU1BfRVJSRFRfTU1VCTB4MDAwMDAwMDIKLQotCi0vKgotICogbWFpbGJveCBwcm90b2NvbCBkZWZpbml0aW9ucwotICovCi0KLXN0cnVjdCBvbWFwX2RzcF9tYWlsYm94X2NtZCB7Ci0JdW5zaWduZWQgc2hvcnQgY21kOwotCXVuc2lnbmVkIHNob3J0IGRhdGE7Ci19OwotCi1zdHJ1Y3Qgb21hcF9kc3BfcmVnaW5mbyB7Ci0JdW5zaWduZWQgc2hvcnQgYWRyOwotCXVuc2lnbmVkIHNob3J0IHZhbDsKLX07Ci0KLXN0cnVjdCBvbWFwX2RzcF92YXJpbmZvIHsKLQl1bnNpZ25lZCBjaGFyIHZhcmlkOwotCXVuc2lnbmVkIHNob3J0IHZhbFswXTsKLX07Ci0KLSNkZWZpbmUgT01BUF9EU1BfTUJQUk9UX1JFVklTSU9OCTB4MDAxOQotCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1dEU05ECTB4MTAKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfV0RSRVEJMHgxMQotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9CS1NORAkweDIwCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX0JLUkVRCTB4MjEKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfQktZTEQJMHgyMwotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9CS1NORFAJMHgyNAotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9CS1JFUVAJMHgyNQotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9UQ1RMCTB4MzAKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfVENUTERBVEEJMHgzMQotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9QT0xMCTB4MzIKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfV0RUCTB4NTAJLyogdjMuMzogb2Jzb2xldGUgKi8KLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfUlVOTEVWRUwJMHg1MQotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9QTQkweDUyCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1NVU1BFTkQJMHg1MwotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9LRlVOQwkweDU0Ci0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RDRkcJMHg2MAotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9UQURECTB4NjIKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfVERFTAkweDYzCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RTVE9QCTB4NjUKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfRFNQQ0ZHCTB4NzAKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfUkVHUlcJMHg3MgotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9HRVRWQVIJMHg3NAotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9TRVRWQVIJMHg3NQotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9FUlIJMHg3OAotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9EQkcJMHg3OQotCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RDVExfVElOSVQJMHgwMDAwCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RDVExfVEVOCQkweDAwMDEKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfVENUTF9URElTCTB4MDAwMgotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9UQ1RMX1RDTFIJMHgwMDAzCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RDVExfVENMUl9GT1JDRQkweDAwMDQKLQotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9SVU5MRVZFTF9VU0VSCQkweDAxCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1JVTkxFVkVMX1NVUEVSCQkweDBlCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1JVTkxFVkVMX1JFQ09WRVJZCTB4MTAKLQotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9QTV9ESVNBQkxFCTB4MDAKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfUE1fRU5BQkxFCTB4MDEKLQotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9LRlVOQ19GQkNUTAkweDAwCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX0tGVU5DX0FVRElPX1BXUgkweDAxCi0KLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfRkJDVExfVVBECTB4MDAwMAotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9GQkNUTF9FTkFCTEUJMHgwMDAyCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX0ZCQ1RMX0RJU0FCTEUJMHgwMDAzCi0KLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfQVVESU9fUFdSX1VQCTB4MDAwMAotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9BVURJT19QV1JfRE9XTjEJMHgwMDAxCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX0FVRElPX1BXUl9ET1dOMgkweDAwMDIKLQotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9UREVMX1NBRkUJMHgwMDAwCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1RERUxfS0lMTAkweDAwMDEKLQotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9EU1BDRkdfUkVRCTB4MDAKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfRFNQQ0ZHX1NZU0FEUkgJMHgyOAotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9EU1BDRkdfU1lTQURSTAkweDI5Ci0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX0RTUENGR19QUk9UUkVWCTB4NzAKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfRFNQQ0ZHX0FCT1JUCTB4NzgKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfRFNQQ0ZHX0xBU1QJMHg4MAotCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1JFR1JXX01FTVIJMHgwMAotI2RlZmluZSBPTUFQX0RTUF9NQkNNRF9SRUdSV19NRU1XCTB4MDEKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfUkVHUldfSU9SCTB4MDIKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfUkVHUldfSU9XCTB4MDMKLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfUkVHUldfREFUQQkweDA0Ci0KLSNkZWZpbmUgT01BUF9EU1BfTUJDTURfVkFSSURfSUNSTUFTSwkweDAwCi0jZGVmaW5lIE9NQVBfRFNQX01CQ01EX1ZBUklEX0xPQURJTkZPCTB4MDEKLQotI2RlZmluZSBPTUFQX0RTUF9UVFlQX0FSQ1YJMHgwMDAxCi0jZGVmaW5lIE9NQVBfRFNQX1RUWVBfQVNORAkweDAwMDIKLSNkZWZpbmUgT01BUF9EU1BfVFRZUF9CS01ECTB4MDAwNAotI2RlZmluZSBPTUFQX0RTUF9UVFlQX0JLRE0JMHgwMDA4Ci0jZGVmaW5lIE9NQVBfRFNQX1RUWVBfUFZNRAkweDAwMTAKLSNkZWZpbmUgT01BUF9EU1BfVFRZUF9QVkRNCTB4MDAyMAotCi0jZGVmaW5lIE9NQVBfRFNQX0VJRF9CQURUSUQJMHgxMAotI2RlZmluZSBPTUFQX0RTUF9FSURfQkFEVENOCTB4MTEKLSNkZWZpbmUgT01BUF9EU1BfRUlEX0JBREJJRAkweDIwCi0jZGVmaW5lIE9NQVBfRFNQX0VJRF9CQURDTlQJMHgyMQotI2RlZmluZSBPTUFQX0RTUF9FSURfTk9UTE9DS0VECTB4MjIKLSNkZWZpbmUgT01BUF9EU1BfRUlEX1NUVkJVRgkweDIzCi0jZGVmaW5lIE9NQVBfRFNQX0VJRF9CQURBRFIJMHgyNAotI2RlZmluZSBPTUFQX0RTUF9FSURfQkFEVENUTAkweDMwCi0jZGVmaW5lIE9NQVBfRFNQX0VJRF9CQURQQVJBTQkweDUwCi0jZGVmaW5lIE9NQVBfRFNQX0VJRF9GQVRBTAkweDU4Ci0jZGVmaW5lIE9NQVBfRFNQX0VJRF9OT01FTQkweGMwCi0jZGVmaW5lIE9NQVBfRFNQX0VJRF9OT1JFUwkweGMxCi0jZGVmaW5lIE9NQVBfRFNQX0VJRF9JUEJGVUxMCTB4YzIKLSNkZWZpbmUgT01BUF9EU1BfRUlEX1dEVAkweGQwCi0jZGVmaW5lIE9NQVBfRFNQX0VJRF9UQVNLTk9UUkRZCTB4ZTAKLSNkZWZpbmUgT01BUF9EU1BfRUlEX1RBU0tCU1kJMHhlMQotI2RlZmluZSBPTUFQX0RTUF9FSURfVEFTS0VSUgkweGVmCi0jZGVmaW5lIE9NQVBfRFNQX0VJRF9CQURDRkdUWVAJMHhmMAotI2RlZmluZSBPTUFQX0RTUF9FSURfREVCVUcJMHhmOAotI2RlZmluZSBPTUFQX0RTUF9FSURfQkFEU0VRCTB4ZmUKLSNkZWZpbmUgT01BUF9EU1BfRUlEX0JBRENNRAkweGZmCi0KLSNkZWZpbmUgT01BUF9EU1BfVE5NX0xFTgkxNgotCi0jZGVmaW5lIE9NQVBfRFNQX1RJRF9GUkVFCTB4ZmYKLSNkZWZpbmUgT01BUF9EU1BfVElEX0FOT04JMHhmZQotCi0jZGVmaW5lIE9NQVBfRFNQX0JJRF9OVUxMCTB4ZmZmZgotI2RlZmluZSBPTUFQX0RTUF9CSURfUFZUCTB4ZmZmZQotCi0jZW5kaWYgLyogQVNNX0FSQ0hfRFNQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZHNwX2NvbW1vbi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3BfY29tbW9uLmgKaW5kZXggMTZhNDU5ZC4uYzYxZjg2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3BfY29tbW9uLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kc3BfY29tbW9uLmgKQEAgLTEsMzggKzEsMzQgQEAKIC8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RzcF9jb21tb24uaAorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgT01BUCBEU1AgZHJpdmVyIChEU1AgR2F0ZXdheSB2ZXJzaW9uIDMuMy4xKQogICoKLSAqIEhlYWRlciBmb3IgT01BUCBEU1Agc3Vic3lzdGVtIGNvbnRyb2wKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb250YWN0OiBUb3NoaWhpcm8gS29iYXlhc2hpIDx0b3NoaWhpcm8ua29iYXlhc2hpQG5va2lhLmNvbT4KICAqCi0gKiBXcml0dGVuIGJ5IFRvc2hpaGlybyBLb2JheWFzaGkgPHRvc2hpaGlyby5rb2JheWFzaGlAbm9raWEuY29tPgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQogICoKLSAqIDIwMDUvMDYvMDM6ICBEU1AgR2F0ZXdheSB2ZXJzaW9uIDMuMwogICovCiAKICNpZm5kZWYgQVNNX0FSQ0hfRFNQX0NPTU1PTl9ICiAjZGVmaW5lIEFTTV9BUkNIX0RTUF9DT01NT05fSAogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKIGV4dGVybiB2b2lkIG9tYXBfZHNwX3JlcXVlc3RfbXB1aSh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfZHNwX3JlbGVhc2VfbXB1aSh2b2lkKTsKIGV4dGVybiBpbnQgb21hcF9kc3BfcmVxdWVzdF9tZW0odm9pZCk7CiBleHRlcm4gaW50IG9tYXBfZHNwX3JlbGVhc2VfbWVtKHZvaWQpOwotCi1leHRlcm4gdm9pZCAoKm9tYXBfZHNwX2F1ZGlvX3B3cl91cF9yZXF1ZXN0KShpbnQgc3RhZ2UpOwotZXh0ZXJuIHZvaWQgKCpvbWFwX2RzcF9hdWRpb19wd3JfZG93bl9yZXF1ZXN0KShpbnQgc3RhZ2UpOworI2VuZGlmCiAKICNlbmRpZiAvKiBBU01fQVJDSF9EU1BfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby1zd2l0Y2guaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby1zd2l0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGRhMGUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLXN3aXRjaC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBHUElPIHN3aXRjaCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfR1BJT19TV0lUQ0hfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfR1BJT19TV0lUQ0hfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogQ292ZXI6CisgKgloaWdoIC0+IGNsb3NlZAorICoJbG93ICAtPiBvcGVuCisgKiBDb25uZWN0aW9uOgorICoJaGlnaCAtPiBjb25uZWN0ZWQKKyAqCWxvdyAgLT4gZGlzY29ubmVjdGVkCisgKiBBY3Rpdml0eToKKyAqCWhpZ2ggLT4gYWN0aXZlCisgKglsb3cgIC0+IGluYWN0aXZlCisgKgorICovCisjZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfVFlQRV9DT1ZFUgkJMHgwMDAwCisjZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfVFlQRV9DT05ORUNUSU9OCTB4MDAwMQorI2RlZmluZSBPTUFQX0dQSU9fU1dJVENIX1RZUEVfQUNUSVZJVFkJCTB4MDAwMgorI2RlZmluZSBPTUFQX0dQSU9fU1dJVENIX0ZMQUdfSU5WRVJURUQJCTB4MDAwMQorI2RlZmluZSBPTUFQX0dQSU9fU1dJVENIX0ZMQUdfT1VUUFVUCQkweDAwMDIKKworc3RydWN0IG9tYXBfZ3Bpb19zd2l0Y2ggeworCWNvbnN0IGNoYXIgKm5hbWU7CisJczE2IGdwaW87CisJdW5zaWduZWQgZmxhZ3M6NDsKKwl1bnNpZ25lZCB0eXBlOjQ7CisKKwkvKiBUaW1lIGluIG1zIHRvIGRlYm91bmNlIHdoZW4gdHJhbnNpdGlvbmluZyBmcm9tCisJICogaW5hY3RpdmUgc3RhdGUgdG8gYWN0aXZlIHN0YXRlLiAqLworCXUxNiBkZWJvdW5jZV9yaXNpbmc7CisJLyogU2FtZSBmb3IgdHJhbnNpdGlvbiBmcm9tIGFjdGl2ZSB0byBpbmFjdGl2ZSBzdGF0ZS4gKi8KKwl1MTYgZGVib3VuY2VfZmFsbGluZzsKKworCS8qIG5vdGlmeSBib2FyZC1zcGVjaWZpYyBjb2RlIGFib3V0IHN0YXRlIGNoYW5nZXMgKi8KKwl2b2lkICgqIG5vdGlmeSkodm9pZCAqZGF0YSwgaW50IHN0YXRlKTsKKwl2b2lkICpub3RpZnlfZGF0YTsKK307CisKKy8qIENhbGwgYXQgaW5pdCB0aW1lIG9ubHkgKi8KK2V4dGVybiB2b2lkIG9tYXBfcmVnaXN0ZXJfZ3Bpb19zd2l0Y2hlcyhjb25zdCBzdHJ1Y3Qgb21hcF9ncGlvX3N3aXRjaCAqdGJsLAorCQkJCQlpbnQgY291bnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmgKaW5kZXggNTkwOTE3ZS4uOTdiMzk3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBXcml0dGVuIGJ5IEp1aGEgWXJq9mzkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CisgKiBXcml0dGVuIGJ5IEp1aGEgWXJqw7Zsw6QgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3BtYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncG1jLmgKaW5kZXggN2MwM2VmNi4uOTk1Y2M4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncG1jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncG1jLmgKQEAgLTg3LDUgKzg3LDcgQEAKIGV4dGVybiBpbnQgZ3BtY19jc19zZXRfdGltaW5ncyhpbnQgY3MsIGNvbnN0IHN0cnVjdCBncG1jX3RpbWluZ3MgKnQpOwogZXh0ZXJuIGludCBncG1jX2NzX3JlcXVlc3QoaW50IGNzLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgKmJhc2UpOwogZXh0ZXJuIHZvaWQgZ3BtY19jc19mcmVlKGludCBjcyk7CitleHRlcm4gaW50IGdwbWNfY3Nfc2V0X3Jlc2VydmVkKGludCBjcywgaW50IHJlc2VydmVkKTsKK2V4dGVybiBpbnQgZ3BtY19jc19yZXNlcnZlZChpbnQgY3MpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaAppbmRleCA0ODEwNDhkLi5lMjI1ZjRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCkBAIC0yNjcsNiArMjY3LDE1IEBACiAjZGVmaW5lIE9NQVBfTFBHMl9QTVIJCQkoT01BUF9MUEcyX0JBU0UgKyAweDA0KQogCiAvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUHVsc2UtV2lkdGggTGlnaHQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBPTUFQX1BXTF9CQVNFCQkJMHhmZmZiNTgwMAorI2RlZmluZSBPTUFQX1BXTF9FTkFCTEUJCQkoT01BUF9QV0xfQkFTRSArIDB4MDApCisjZGVmaW5lIE9NQVBfUFdMX0NMS19FTkFCTEUJCShPTUFQX1BXTF9CQVNFICsgMHgwNCkKKworLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogUHJvY2Vzc29yIHNwZWNpZmljIGRlZmluZXMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9od2E3NDIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaHdhNzQyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3ZjQ5MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaHdhNzQyLmgKQEAgLTAsMCArMSwxMiBAQAorI2lmbmRlZiBfSFdBNzQyX0gKKyNkZWZpbmUgX0hXQTc0Ml9ICisKK3N0cnVjdCBod2E3NDJfcGxhdGZvcm1fZGF0YSB7CisJdm9pZAkJKCpwb3dlcl91cCkoc3RydWN0IGRldmljZSAqZGV2KTsKKwl2b2lkCQkoKnBvd2VyX2Rvd24pKHN0cnVjdCBkZXZpY2UgKmRldik7CisJdW5zaWduZWQgbG9uZwkoKmdldF9jbG9ja19yYXRlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisJdW5zaWduZWQJdGVfY29ubmVjdGVkOjE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaW8uaAppbmRleCA3OGY2OGU2Li40YWNhN2UzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pby5oCkBAIC03Nyw2ICs3NywxNyBAQAogI2RlZmluZSBpb19wMnYocGEpCSgocGEpICsgSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCiAjZGVmaW5lIGlvX3YycCh2YSkJKCh2YSkgLSBJT19PRkZTRVQpCS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KIAorLyogRFNQICovCisjZGVmaW5lIERTUF9NRU1fMjRYWF9QSFlTCU9NQVAyNFhYX0RTUF9NRU1fQkFTRQkvKiAweDU4MDAwMDAwICovCisjZGVmaW5lIERTUF9NRU1fMjRYWF9WSVJUCTB4ZTAwMDAwMDAKKyNkZWZpbmUgRFNQX01FTV8yNFhYX1NJWkUJMHgyODAwMAorI2RlZmluZSBEU1BfSVBJXzI0WFhfUEhZUwlPTUFQMjRYWF9EU1BfSVBJX0JBU0UJLyogMHg1OTAwMDAwMCAqLworI2RlZmluZSBEU1BfSVBJXzI0WFhfVklSVAkweGUxMDAwMDAwCisjZGVmaW5lIERTUF9JUElfMjRYWF9TSVpFCVNaXzRLCisjZGVmaW5lIERTUF9NTVVfMjRYWF9QSFlTCU9NQVAyNFhYX0RTUF9NTVVfQkFTRQkvKiAweDVhMDAwMDAwICovCisjZGVmaW5lIERTUF9NTVVfMjRYWF9WSVJUCTB4ZTIwMDAwMDAKKyNkZWZpbmUgRFNQX01NVV8yNFhYX1NJWkUJU1pfNEsKKwogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaAppbmRleCBjNWJiMDVhLi4zZWRlNThiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaApAQCAtMzcsOCArMzcsNiBAQAogI2RlZmluZSBJTlRfRFNQX01NVV9BQk9SVAk3CiAjZGVmaW5lIElOVF9IT1NUCQk4CiAjZGVmaW5lIElOVF9BQk9SVAkJOQotI2RlZmluZSBJTlRfRFNQX01BSUxCT1gxCTEwCi0jZGVmaW5lIElOVF9EU1BfTUFJTEJPWDIJMTEKICNkZWZpbmUgSU5UX0JSSURHRV9QUklWCQkxMwogI2RlZmluZSBJTlRfR1BJT19CQU5LMQkJMTQKICNkZWZpbmUgSU5UX1VBUlQzCQkxNQpAQCAtNjMsNiArNjEsOCBAQAogI2RlZmluZSBJTlRfMTUxMF9SRVMyCQkyCiAjZGVmaW5lIElOVF8xNTEwX1NQSV9UWAkJNAogI2RlZmluZSBJTlRfMTUxMF9TUElfUlgJCTUKKyNkZWZpbmUgSU5UXzE1MTBfRFNQX01BSUxCT1gxCTEwCisjZGVmaW5lIElOVF8xNTEwX0RTUF9NQUlMQk9YMgkxMQogI2RlZmluZSBJTlRfMTUxMF9SRVMxMgkJMTIKICNkZWZpbmUgSU5UXzE1MTBfTEJfTU1VCQkxNwogI2RlZmluZSBJTlRfMTUxMF9SRVMxOAkJMTgKQEAgLTc1LDYgKzc1LDggQEAKICNkZWZpbmUgSU5UXzE2MTBfSUgyX0ZJUQkyCiAjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9UWAk0CiAjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9SWAk1CisjZGVmaW5lIElOVF8xNjEwX0RTUF9NQUlMQk9YMQkxMAorI2RlZmluZSBJTlRfMTYxMF9EU1BfTUFJTEJPWDIJMTEKICNkZWZpbmUgSU5UXzE2MTBfTENEX0xJTkUJMTIKICNkZWZpbmUgSU5UXzE2MTBfR1BUSU1FUjEJMTcKICNkZWZpbmUgSU5UXzE2MTBfR1BUSU1FUjIJMTgKQEAgLTEzMSwxMSArMTMzLDExIEBACiAjZGVmaW5lIElOVF9SVENfVElNRVIJCSgyNSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfUlRDX0FMQVJNCQkoMjYgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX01FTV9TVElDSwkJKDI3ICsgSUgyX0JBU0UpCi0jZGVmaW5lIElOVF9EU1BfTU1VCQkoMjggKyBJSDJfQkFTRSkKIAogLyoKICAqIE9NQVAtMTUxMCBzcGVjaWZpYyBJUlEgbnVtYmVycyBmb3IgaW50ZXJydXB0IGhhbmRsZXIgMgogICovCisjZGVmaW5lIElOVF8xNTEwX0RTUF9NTVUJKDI4ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNTEwX0NPTV9TUElfUk8JKDMxICsgSUgyX0JBU0UpCiAKIC8qCkBAIC0xNDYsNiArMTQ4LDcgQEAKICNkZWZpbmUgSU5UXzE2MTBfVVNCX09URwkoOCArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMTYxMF9Tb1NTSQkJKDkgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfU29TU0lfTUFUQ0gJKDE5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0RTUF9NTVUJKDI4ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX01jQlNQMlJYX09GCSgzMSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMTYxMF9TVEkJCSgzMiArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMTYxMF9TVElfV0FLRVVQCSgzMyArIElIMl9CQVNFKQpAQCAtMjM5LDEwICsyNDIsMTUgQEAKICNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlEzCTE1CiAjZGVmaW5lIElOVF8yNFhYX0NBTV9JUlEJMjQKICNkZWZpbmUgSU5UXzI0WFhfRFNTX0lSUQkyNQorI2RlZmluZSBJTlRfMjRYWF9NQUlMX1UwX01QVQkyNgorI2RlZmluZSBJTlRfMjRYWF9EU1BfVU1BCTI3CisjZGVmaW5lIElOVF8yNFhYX0RTUF9NTVUJMjgKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMQkyOQogI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTksyCTMwCiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzMJMzEKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LNAkzMgorI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTks1CTMzCisjZGVmaW5lIElOVF8yNFhYX01BSUxfVTNfTVBVCTM0CiAjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIxCTM3CiAjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIyCTM4CiAjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIzCTM5CkBAIC0yNjIsNiArMjcwLDEyIEBACiAjZGVmaW5lIElOVF8yNFhYX1VBUlQxX0lSUQk3MgogI2RlZmluZSBJTlRfMjRYWF9VQVJUMl9JUlEJNzMKICNkZWZpbmUgSU5UXzI0WFhfVUFSVDNfSVJRCTc0CisjZGVmaW5lIElOVF8yNFhYX1VTQl9JUlFfR0VOCTc1CisjZGVmaW5lIElOVF8yNFhYX1VTQl9JUlFfTklTTwk3NgorI2RlZmluZSBJTlRfMjRYWF9VU0JfSVJRX0lTTwk3NworI2RlZmluZSBJTlRfMjRYWF9VU0JfSVJRX0hHRU4JNzgKKyNkZWZpbmUgSU5UXzI0WFhfVVNCX0lSUV9IU09GCTc5CisjZGVmaW5lIElOVF8yNFhYX1VTQl9JUlFfT1RHCTgwCiAjZGVmaW5lIElOVF8yNFhYX01NQ19JUlEJODMKIAogLyogTWF4LiAxMjggbGV2ZWwgMiBJUlFzIChPTUFQMTYxMCksIDE5MiBHUElPcyAoT01BUDczMCkgYW5kCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2xjZF9scGg4OTIzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2xjZF9scGg4OTIzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNGU2N2UuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9sY2RfbHBoODkyMy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmbmRlZiBfX0xDRF9MUEg4OTIzX0gKLSNkZWZpbmUgX19MQ0RfTFBIODkyM19ICi0KLWVudW0gbGNkX2xwaDg5MjNfdGVzdF9udW0gewotCUxDRF9MUEg4OTIzX1RFU1RfUkdCX0xJTkVTLAotfTsKLQotZW51bSBsY2RfbHBoODkyM190ZXN0X3Jlc3VsdCB7Ci0JTENEX0xQSDg5MjNfVEVTVF9TVUNDRVNTLAotCUxDRF9MUEg4OTIzX1RFU1RfSU5WQUxJRCwKLQlMQ0RfTFBIODkyM19URVNUX0ZBSUxFRCwKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9sY2RfbWlwaWQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbGNkX21pcGlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmYmM0OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbGNkX21pcGlkLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfX0xDRF9NSVBJRF9ICisjZGVmaW5lIF9fTENEX01JUElEX0gKKworZW51bSBtaXBpZF90ZXN0X251bSB7CisJTUlQSURfVEVTVF9SR0JfTElORVMsCit9OworCitlbnVtIG1pcGlkX3Rlc3RfcmVzdWx0IHsKKwlNSVBJRF9URVNUX1NVQ0NFU1MsCisJTUlQSURfVEVTVF9JTlZBTElELAorCU1JUElEX1RFU1RfRkFJTEVELAorfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IG1pcGlkX3BsYXRmb3JtX2RhdGEgeworCWludAlucmVzZXRfZ3BpbzsKKwlpbnQJZGF0YV9saW5lczsKKwl2b2lkCSgqc2h1dGRvd24pKHN0cnVjdCBtaXBpZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7Cit9OworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2xlZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9sZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2FjYWUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9sZWQuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbGVkLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqICBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgQVNNQVJNX0FSQ0hfTEVEX0gKKyNkZWZpbmUgQVNNQVJNX0FSQ0hfTEVEX0gKKworc3RydWN0IG9tYXBfbGVkX2NvbmZpZyB7CisJc3RydWN0IGxlZF9jbGFzc2RldgljZGV2OworCXMxNgkJCWdwaW87Cit9OworCitzdHJ1Y3Qgb21hcF9sZWRfcGxhdGZvcm1fZGF0YSB7CisJczE2CQkJbnJfbGVkczsKKwlzdHJ1Y3Qgb21hcF9sZWRfY29uZmlnCSpsZWRzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21haWxib3guaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWFpbGJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjA5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21haWxib3guaApAQCAtMCwwICsxLDczIEBACisvKiBtYWlsYm94LmggKi8KKworI2lmbmRlZiBNQUlMQk9YX0gKKyNkZWZpbmUgTUFJTEJPWF9ICisKKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisKK3R5cGVkZWYgdTMyIG1ib3hfbXNnX3Q7Cit0eXBlZGVmIHZvaWQgKG1ib3hfcmVjZWl2ZXJfdCkobWJveF9tc2dfdCBtc2cpOworc3RydWN0IG9tYXBfbWJveDsKKwordHlwZWRlZiBpbnQgX19iaXR3aXNlIG9tYXBfbWJveF9pcnFfdDsKKyNkZWZpbmUgSVJRX1RYICgoX19mb3JjZSBvbWFwX21ib3hfaXJxX3QpIDEpCisjZGVmaW5lIElSUV9SWCAoKF9fZm9yY2Ugb21hcF9tYm94X2lycV90KSAyKQorCit0eXBlZGVmIGludCBfX2JpdHdpc2Ugb21hcF9tYm94X3R5cGVfdDsKKyNkZWZpbmUgT01BUF9NQk9YX1RZUEUxICgoX19mb3JjZSBvbWFwX21ib3hfdHlwZV90KSAxKQorI2RlZmluZSBPTUFQX01CT1hfVFlQRTIgKChfX2ZvcmNlIG9tYXBfbWJveF90eXBlX3QpIDIpCisKK3N0cnVjdCBvbWFwX21ib3hfb3BzIHsKKwlvbWFwX21ib3hfdHlwZV90CXR5cGU7CisJaW50CQkoKnN0YXJ0dXApKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpOworCXZvaWQJCSgqc2h1dGRvd24pKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpOworCS8qIGZpZm8gKi8KKwltYm94X21zZ190CSgqZmlmb19yZWFkKShzdHJ1Y3Qgb21hcF9tYm94ICptYm94KTsKKwl2b2lkCQkoKmZpZm9fd3JpdGUpKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgbXNnKTsKKwlpbnQJCSgqZmlmb19lbXB0eSkoc3RydWN0IG9tYXBfbWJveCAqbWJveCk7CisJaW50CQkoKmZpZm9fZnVsbCkoc3RydWN0IG9tYXBfbWJveCAqbWJveCk7CisJLyogaXJxICovCisJdm9pZAkJKCplbmFibGVfaXJxKShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKTsKKwl2b2lkCQkoKmRpc2FibGVfaXJxKShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKTsKKwl2b2lkCQkoKmFja19pcnEpKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpOworCWludAkJKCppc19pcnEpKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpOworfTsKKworc3RydWN0IG9tYXBfbWJveF9xdWV1ZSB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlyZXF1ZXN0X3F1ZXVlX3QJCSpxdWV1ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKKwlpbnQJKCpjYWxsYmFjaykodm9pZCAqKTsKKwlzdHJ1Y3Qgb21hcF9tYm94CSptYm94OworfTsKKworc3RydWN0IG9tYXBfbWJveCB7CisJY2hhcgkJCSpuYW1lOworCXVuc2lnbmVkIGludAkJaXJxOworCisJc3RydWN0IG9tYXBfbWJveF9xdWV1ZQkqdHhxLCAqcnhxOworCisJc3RydWN0IG9tYXBfbWJveF9vcHMJKm9wczsKKworCW1ib3hfbXNnX3QJCXNlcV9zbmQsIHNlcV9yY3Y7CisKKwlzdHJ1Y3QgZGV2aWNlCQlkZXY7CisKKwlzdHJ1Y3Qgb21hcF9tYm94CSpuZXh0OworCXZvaWQJCQkqcHJpdjsKKworCXZvaWQJCQkoKmVycl9ub3RpZnkpKHZvaWQpOworfTsKKworaW50IG9tYXBfbWJveF9tc2dfc2VuZChzdHJ1Y3Qgb21hcF9tYm94ICosIG1ib3hfbXNnX3QgbXNnLCB2b2lkICopOwordm9pZCBvbWFwX21ib3hfaW5pdF9zZXEoc3RydWN0IG9tYXBfbWJveCAqKTsKKworc3RydWN0IG9tYXBfbWJveCAqb21hcF9tYm94X2dldChjb25zdCBjaGFyICopOwordm9pZCBvbWFwX21ib3hfcHV0KHN0cnVjdCBvbWFwX21ib3ggKik7CisKK2ludCBvbWFwX21ib3hfcmVnaXN0ZXIoc3RydWN0IG9tYXBfbWJveCAqKTsKK2ludCBvbWFwX21ib3hfdW5yZWdpc3RlcihzdHJ1Y3Qgb21hcF9tYm94ICopOworCisjZW5kaWYgLyogTUFJTEJPWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21jc3BpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21jc3BpLmgKaW5kZXggOWU3ZjQwYS4uMTI1NGU0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tY3NwaS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWNzcGkuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX09NQVAyX01DU1BJX0gKIAogc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyB7Ci0JdW5zaWduZWQgbG9uZwliYXNlOwogCXVuc2lnbmVkIHNob3J0CW51bV9jczsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oCmluZGV4IDQ4ZmFiYzQuLjE0Y2JhOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW1vcnkuaApAQCAtODYsNSArODYsMTggQEAKIAogI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAxNVhYICovCiAKKy8qIE92ZXJyaWRlIHRoZSBBUk0gZGVmYXVsdCAqLworI2lmZGVmIENPTkZJR19GQl9PTUFQX0NPTlNJU1RFTlRfRE1BX1NJWkUKKworI2lmIChDT05GSUdfRkJfT01BUF9DT05TSVNURU5UX0RNQV9TSVpFID09IDApCisjdW5kZWYgQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRQorI2RlZmluZSBDT05GSUdfRkJfT01BUF9DT05TSVNURU5UX0RNQV9TSVpFIDIKKyNlbmRpZgorCisjZGVmaW5lIENPTlNJU1RFTlRfRE1BX1NJWkUgXAorCSgoKENPTkZJR19GQl9PTUFQX0NPTlNJU1RFTlRfRE1BX1NJWkUgKyAxKSAmIH4xKSAqIDEwMjQgKiAxMDI0KQorCisjZW5kaWYKKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaAppbmRleCA4OGNkNGM4Li44MmQyNzZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbmVsYXVzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW5lbGF1cy5oCkBAIC03LDEwICs3LDE5IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUVORUxBVVNfSAogI2RlZmluZSBfX0FTTV9BUkNIX01FTkVMQVVTX0gKIAotZXh0ZXJuIHZvaWQgbWVuZWxhdXNfbW1jX3JlZ2lzdGVyKHZvaWQgKCpjYWxsYmFjaykodW5zaWduZWQgbG9uZyBkYXRhLCB1OCBjYXJkX21hc2spLAotCQkJCSAgdW5zaWduZWQgbG9uZyBkYXRhKTsKLWV4dGVybiB2b2lkIG1lbmVsYXVzX21tY19yZW1vdmUodm9pZCk7Ci1leHRlcm4gdm9pZCBtZW5lbGF1c19tbWNfb3BlbmRyYWluKGludCBlbmFibGUpOworZXh0ZXJuIGludCBtZW5lbGF1c19yZWdpc3Rlcl9tbWNfY2FsbGJhY2sodm9pZCAoKmNhbGxiYWNrKSh2b2lkICpkYXRhLCB1OCBjYXJkX21hc2spLAorCQkJCQkgIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgbWVuZWxhdXNfdW5yZWdpc3Rlcl9tbWNfY2FsbGJhY2sodm9pZCk7CitleHRlcm4gaW50IG1lbmVsYXVzX3NldF9tbWNfb3BlbmRyYWluKGludCBzbG90LCBpbnQgZW5hYmxlKTsKK2V4dGVybiBpbnQgbWVuZWxhdXNfc2V0X21tY19zbG90KGludCBzbG90LCBpbnQgZW5hYmxlLCBpbnQgcG93ZXIsIGludCBjZF9vbik7CisKK2V4dGVybiBpbnQgbWVuZWxhdXNfc2V0X3ZtZW0odW5zaWduZWQgaW50IG1WKTsKK2V4dGVybiBpbnQgbWVuZWxhdXNfc2V0X3Zpbyh1bnNpZ25lZCBpbnQgbVYpOworZXh0ZXJuIGludCBtZW5lbGF1c19zZXRfdm1tYyh1bnNpZ25lZCBpbnQgbVYpOworZXh0ZXJuIGludCBtZW5lbGF1c19zZXRfdmF1eCh1bnNpZ25lZCBpbnQgbVYpOworZXh0ZXJuIGludCBtZW5lbGF1c19zZXRfdmRjZGMoaW50IGRjZGMsIHVuc2lnbmVkIGludCBtVik7CitleHRlcm4gaW50IG1lbmVsYXVzX3NldF9zbG90X3NlbChpbnQgZW5hYmxlKTsKK2V4dGVybiBpbnQgbWVuZWxhdXNfZ2V0X3Nsb3RfcGluX3N0YXRlcyh2b2lkKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpICYmIGRlZmluZWQoQ09ORklHX01FTkVMQVVTKQogI2RlZmluZSBvbWFwX2hhc19tZW5lbGF1cygpCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCmluZGV4IDgyOGNjNWMuLmYxZWMyZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaApAQCAtNDIxLDcgKzQyMSw5IEBACiAJLyogMjR4eCBjbG9jayAqLwogCVcxNF8yNFhYX1NZU19DTEtPVVQsCiAKLQkvKiAyNHh4IEdQTUMgd2FpdCBwaW4gbW9uaXRvcmluZyAqLworCS8qIDI0eHggR1BNQyBjaGlwc2VsZWN0cywgd2FpdCBwaW4gbW9uaXRvcmluZyAqLworCUUyX0dQTUNfTkNTMiwKKwlMMl9HUE1DX05DUzcsCiAJTDNfR1BNQ19XQUlUMCwKIAlON19HUE1DX1dBSVQxLAogCU0xX0dQTUNfV0FJVDIsCkBAIC00MzUsNiArNDM3LDcgQEAKIAogCS8qIDI0eHggR1BJTyAqLwogCU0yMV8yNDJYX0dQSU8xMSwKKwlQMjFfMjQyWF9HUElPMTIsCiAJQUExMF8yNDJYX0dQSU8xMywKIAlBQTZfMjQyWF9HUElPMTQsCiAJQUE0XzI0MlhfR1BJTzE1LApAQCAtNDQ0LDcgKzQ0Nyw5IEBACiAJWTIwXzI0WFhfR1BJTzYwLAogCVc0X18yNFhYX0dQSU83NCwKIAlNMTVfMjRYWF9HUElPOTIsCisJSjE1XzI0WFhfR1BJTzk5LAogCVYxNF8yNFhYX0dQSU8xMTcsCisJUDE0XzI0WFhfR1BJTzEyNSwKIAogCS8qIDI0MnggREJHIEdQSU8gKi8KIAlWNF8yNDJYX0dQSU80OSwKQEAgLTQ4Niw2ICs0OTEsMzAgQEAKIAlHMThfMjRYWF9NTUNfQ01EX0RJUiwKIAlIMTVfMjRYWF9NTUNfQ0xLSSwKIAorCS8qIEZ1bGwgc3BlZWQgVVNCICovCisJSjIwXzI0WFhfVVNCMF9QVUVOLAorCUoxOV8yNFhYX1VTQjBfVlAsCisJSzIwXzI0WFhfVVNCMF9WTSwKKwlKMThfMjRYWF9VU0IwX1JDViwKKwlLMTlfMjRYWF9VU0IwX1RYRU4sCisJSjE0XzI0WFhfVVNCMF9TRTAsCisJSzE4XzI0WFhfVVNCMF9EQVQsCisKKwlOMTRfMjRYWF9VU0IxX1NFMCwKKwlXMTJfMjRYWF9VU0IxX1NFMCwKKwlQMTVfMjRYWF9VU0IxX0RBVCwKKwlSMTNfMjRYWF9VU0IxX0RBVCwKKwlXMjBfMjRYWF9VU0IxX1RYRU4sCisJUDEzXzI0WFhfVVNCMV9UWEVOLAorCVYxOV8yNFhYX1VTQjFfUkNWLAorCVYxMl8yNFhYX1VTQjFfUkNWLAorCisJQUExMF8yNFhYX1VTQjJfU0UwLAorCVkxMV8yNFhYX1VTQjJfREFULAorCUFBMTJfMjRYWF9VU0IyX1RYRU4sCisJQUE2XzI0WFhfVVNCMl9SQ1YsCisJQUE0XzI0WFhfVVNCMl9UTExTRTAsCisKIAkvKiBLZXlwYWQgR1BJTyovCiAJVDE5XzI0WFhfS0JSMCwKIAlSMTlfMjRYWF9LQlIxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTZ4eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTZ4eC5oCmluZGV4IGYwYzdmMGYuLmY3ZjVjZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE2eHguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAxNnh4LmgKQEAgLTE1OSwxNSArMTU5LDYgQEAKICNkZWZpbmUgVUFSVDNfTVZSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4NTApCiAKIC8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBQdWxzZS1XaWR0aCBMaWdodAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0jZGVmaW5lIE9NQVAxNlhYX1BXTF9CQVNFCSgweGZmZmI1ODAwKQotI2RlZmluZSBPTUFQMTZYWF9QV0xfRU5BQkxFCShPTUFQMTZYWF9QV0xfQkFTRSArIDB4MDApCi0jZGVmaW5lIE9NQVAxNlhYX1BXTF9DTEtfRU5BQkxFCShPTUFQMTZYWF9QV0xfQkFTRSArIDB4MDQpCi0KLS8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFdhdGNoZG9nIHRpbWVyCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5OSw1ICsxOTAsOCBAQAogI2RlZmluZSBXU1BSX0RJU0FCTEVfMCAgICAgICAgICgweDAwMDBhYWFhKQogI2RlZmluZSBXU1BSX0RJU0FCTEVfMSAgICAgICAgICgweDAwMDA1NTU1KQogCisvKiBNYWlsYm94ICovCisjZGVmaW5lIE9NQVAxNlhYX01BSUxCT1hfQkFTRQkoMHhmZmZjZjAwMCkKKwogI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVAxNlhYX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMjR4eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMjR4eC5oCmluZGV4IDZlNTk4MDUuLjcwOGIyZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDI0eHguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmgKQEAgLTIwLDUgKzIwLDE0IEBACiAjZGVmaW5lIE9NQVAyNFhYX1BSQ01fQkFTRQkoTDRfMjRYWF9CQVNFICsgMHg4MDAwKQogI2RlZmluZSBPTUFQMjRYWF9TRFJDX0JBU0UJKEwzXzI0WFhfQkFTRSArIDB4OTAwMCkKIAorLyogRFNQIFNTICovCisjZGVmaW5lIE9NQVAyNFhYX0RTUF9CQVNFCTB4NTgwMDAwMDAKKyNkZWZpbmUgT01BUDI0WFhfRFNQX01FTV9CQVNFCShPTUFQMjRYWF9EU1BfQkFTRSArIDB4MCkKKyNkZWZpbmUgT01BUDI0WFhfRFNQX0lQSV9CQVNFCShPTUFQMjRYWF9EU1BfQkFTRSArIDB4MTAwMDAwMCkKKyNkZWZpbmUgT01BUDI0WFhfRFNQX01NVV9CQVNFCShPTUFQMjRYWF9EU1BfQkFTRSArIDB4MjAwMDAwMCkKKworLyogTWFpbGJveCAqLworI2RlZmluZSBPTUFQMjRYWF9NQUlMQk9YX0JBU0UJKEw0XzI0WFhfQkFTRSArIDB4OTQwMDApCisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVAyNFhYX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwZmIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcGZiLmgKaW5kZXggZmNjZGIzZC4uNDZkN2E0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwZmIuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXBmYi5oCkBAIC0yNCw2ICsyNCw5IEBACiAjaWZuZGVmIF9fT01BUEZCX0gKICNkZWZpbmUgX19PTUFQRkJfSAogCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKIC8qIElPQ1RMIGNvbW1hbmRzLiAqLwogCiAjZGVmaW5lIE9NQVBfSU9XKG51bSwgZHR5cGUpCV9JT1coJ08nLCBudW0sIGR0eXBlKQpAQCAtMzUsMjYgKzM4LDQ2IEBACiAjZGVmaW5lIE9NQVBGQl9TWU5DX0dGWAkJT01BUF9JTygzNykKICNkZWZpbmUgT01BUEZCX1ZTWU5DCQlPTUFQX0lPKDM4KQogI2RlZmluZSBPTUFQRkJfU0VUX1VQREFURV9NT0RFCU9NQVBfSU9XKDQwLCBpbnQpCi0jZGVmaW5lIE9NQVBGQl9VUERBVEVfV0lORE9XX09MRCBPTUFQX0lPVyg0MSwgc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93X29sZCkKLSNkZWZpbmUgT01BUEZCX0dFVF9DQVBTCQlPTUFQX0lPUig0MiwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgT01BUEZCX0dFVF9DQVBTCQlPTUFQX0lPUig0Miwgc3RydWN0IG9tYXBmYl9jYXBzKQogI2RlZmluZSBPTUFQRkJfR0VUX1VQREFURV9NT0RFCU9NQVBfSU9XKDQzLCBpbnQpCiAjZGVmaW5lIE9NQVBGQl9MQ0RfVEVTVAkJT01BUF9JT1coNDUsIGludCkKICNkZWZpbmUgT01BUEZCX0NUUkxfVEVTVAlPTUFQX0lPVyg0NiwgaW50KQotI2RlZmluZSBPTUFQRkJfVVBEQVRFX1dJTkRPVwlPTUFQX0lPVyg0Nywgc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93KQotI2RlZmluZSBPTUFQRkJfU0VUVVBfUExBTkUJT01BUF9JT1coNDgsIHN0cnVjdCBvbWFwZmJfc2V0dXBfcGxhbmUpCi0jZGVmaW5lIE9NQVBGQl9FTkFCTEVfUExBTkUJT01BUF9JT1coNDksIHN0cnVjdCBvbWFwZmJfZW5hYmxlX3BsYW5lKQorI2RlZmluZSBPTUFQRkJfVVBEQVRFX1dJTkRPV19PTEQgT01BUF9JT1coNDcsIHN0cnVjdCBvbWFwZmJfdXBkYXRlX3dpbmRvd19vbGQpCiAjZGVmaW5lIE9NQVBGQl9TRVRfQ09MT1JfS0VZCU9NQVBfSU9XKDUwLCBzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSkKKyNkZWZpbmUgT01BUEZCX0dFVF9DT0xPUl9LRVkJT01BUF9JT1coNTEsIHN0cnVjdCBvbWFwZmJfY29sb3Jfa2V5KQorI2RlZmluZSBPTUFQRkJfU0VUVVBfUExBTkUJT01BUF9JT1coNTIsIHN0cnVjdCBvbWFwZmJfcGxhbmVfaW5mbykKKyNkZWZpbmUgT01BUEZCX1FVRVJZX1BMQU5FCU9NQVBfSU9XKDUzLCBzdHJ1Y3Qgb21hcGZiX3BsYW5lX2luZm8pCisjZGVmaW5lIE9NQVBGQl9VUERBVEVfV0lORE9XCU9NQVBfSU9XKDU0LCBzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cpCisjZGVmaW5lIE9NQVBGQl9TRVRVUF9NRU0JT01BUF9JT1coNTUsIHN0cnVjdCBvbWFwZmJfbWVtX2luZm8pCisjZGVmaW5lIE9NQVBGQl9RVUVSWV9NRU0JT01BUF9JT1coNTYsIHN0cnVjdCBvbWFwZmJfbWVtX2luZm8pCiAKICNkZWZpbmUgT01BUEZCX0NBUFNfR0VORVJJQ19NQVNLCTB4MDAwMDBmZmYKICNkZWZpbmUgT01BUEZCX0NBUFNfTENEQ19NQVNLCQkweDAwZmZmMDAwCiAjZGVmaW5lIE9NQVBGQl9DQVBTX1BBTkVMX01BU0sJCTB4ZmYwMDAwMDAKIAogI2RlZmluZSBPTUFQRkJfQ0FQU19NQU5VQUxfVVBEQVRFCTB4MDAwMDEwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfVEVBUlNZTkMJCTB4MDAwMDIwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfUExBTkVfUkVMT0NBVEVfTUVNCTB4MDAwMDQwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfUExBTkVfU0NBTEUJCTB4MDAwMDgwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfV0lORE9XX1BJWEVMX0RPVUJMRQkweDAwMDEwMDAwCisjZGVmaW5lIE9NQVBGQl9DQVBTX1dJTkRPV19TQ0FMRQkweDAwMDIwMDAwCisjZGVmaW5lIE9NQVBGQl9DQVBTX1dJTkRPV19PVkVSTEFZCTB4MDAwNDAwMDAKICNkZWZpbmUgT01BUEZCX0NBUFNfU0VUX0JBQ0tMSUdIVAkweDAxMDAwMDAwCiAKIC8qIFZhbHVlcyBmcm9tIERTUCBtdXN0IG1hcCB0byBsb3dlciAxNi1iaXRzICovCi0jZGVmaW5lIE9NQVBGQl9GT1JNQVRfTUFTSyAgICAgICAgIDB4MDBmZgotI2RlZmluZSBPTUFQRkJfRk9STUFUX0ZMQUdfRE9VQkxFICAweDAxMDAKKyNkZWZpbmUgT01BUEZCX0ZPUk1BVF9NQVNLCQkweDAwZmYKKyNkZWZpbmUgT01BUEZCX0ZPUk1BVF9GTEFHX0RPVUJMRQkweDAxMDAKKyNkZWZpbmUgT01BUEZCX0ZPUk1BVF9GTEFHX1RFQVJTWU5DCTB4MDIwMAorI2RlZmluZSBPTUFQRkJfRk9STUFUX0ZMQUdfRk9SQ0VfVlNZTkMJMHgwNDAwCisjZGVmaW5lIE9NQVBGQl9GT1JNQVRfRkxBR19FTkFCTEVfT1ZFUkxBWQkweDA4MDAKKyNkZWZpbmUgT01BUEZCX0ZPUk1BVF9GTEFHX0RJU0FCTEVfT1ZFUkxBWQkweDEwMDAKKworI2RlZmluZSBPTUFQRkJfRVZFTlRfUkVBRFkJMQorI2RlZmluZSBPTUFQRkJfRVZFTlRfRElTQUJMRUQJMgorCisjZGVmaW5lIE9NQVBGQl9NRU1UWVBFX1NEUkFNCQkwCisjZGVmaW5lIE9NQVBGQl9NRU1UWVBFX1NSQU0JCTEKKyNkZWZpbmUgT01BUEZCX01FTVRZUEVfTUFYCQkxCiAKIGVudW0gb21hcGZiX2NvbG9yX2Zvcm1hdCB7CiAJT01BUEZCX0NPTE9SX1JHQjU2NSA9IDAsCkBAIC02NCwxNyArODcsMjMgQEAKIAlPTUFQRkJfQ09MT1JfQ0xVVF80QlBQLAogCU9NQVBGQl9DT0xPUl9DTFVUXzJCUFAsCiAJT01BUEZCX0NPTE9SX0NMVVRfMUJQUCwKKwlPTUFQRkJfQ09MT1JfUkdCNDQ0LAorCU9NQVBGQl9DT0xPUl9ZVVk0MjIsCiB9OwogCiBzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cgewogCV9fdTMyIHgsIHk7CiAJX191MzIgd2lkdGgsIGhlaWdodDsKIAlfX3UzMiBmb3JtYXQ7CisJX191MzIgb3V0X3gsIG91dF95OworCV9fdTMyIG91dF93aWR0aCwgb3V0X2hlaWdodDsKKwlfX3UzMiByZXNlcnZlZFs4XTsKIH07CiAKIHN0cnVjdCBvbWFwZmJfdXBkYXRlX3dpbmRvd19vbGQgewogCV9fdTMyIHgsIHk7CiAJX191MzIgd2lkdGgsIGhlaWdodDsKKwlfX3UzMiBmb3JtYXQ7CiB9OwogCiBlbnVtIG9tYXBmYl9wbGFuZSB7CkBAIC04OCwxOCArMTE3LDI4IEBACiAJT01BUEZCX0NIQU5ORUxfT1VUX0RJR0lULAogfTsKIAotc3RydWN0IG9tYXBmYl9zZXR1cF9wbGFuZSB7Ci0JX191OCAgcGxhbmU7CitzdHJ1Y3Qgb21hcGZiX3BsYW5lX2luZm8geworCV9fdTMyIHBvc194OworCV9fdTMyIHBvc195OworCV9fdTggIGVuYWJsZWQ7CiAJX191OCAgY2hhbm5lbF9vdXQ7Ci0JX191MzIgb2Zmc2V0OwotCV9fdTMyIHBvc194LCBwb3NfeTsKLQlfX3UzMiB3aWR0aCwgaGVpZ2h0OwotCV9fdTMyIGNvbG9yX21vZGU7CisJX191OCAgbWlycm9yOworCV9fdTggIHJlc2VydmVkMTsKKwlfX3UzMiBvdXRfd2lkdGg7CisJX191MzIgb3V0X2hlaWdodDsKKwlfX3UzMiByZXNlcnZlZDJbMTJdOwogfTsKIAotc3RydWN0IG9tYXBmYl9lbmFibGVfcGxhbmUgewotCV9fdTggIHBsYW5lOwotCV9fdTggIGVuYWJsZTsKK3N0cnVjdCBvbWFwZmJfbWVtX2luZm8geworCV9fdTMyIHNpemU7CisJX191OCAgdHlwZTsKKwlfX3U4ICByZXNlcnZlZFszXTsKK307CisKK3N0cnVjdCBvbWFwZmJfY2FwcyB7CisJX191MzIgY3RybDsKKwlfX3UzMiBwbGFuZV9jb2xvcjsKKwlfX3UzMiB3bmRfY29sb3I7CiB9OwogCiBlbnVtIG9tYXBmYl9jb2xvcl9rZXlfdHlwZSB7CkBAIC0xNDEsNiArMTgwLDkgQEAKIAogI2RlZmluZSBPTUFQX0xDRENfUEFORUxfVEZUCQkweDAxMDAKIAorI2RlZmluZSBPTUFQRkJfUExBTkVfWFJFU19NSU4JCTgKKyNkZWZpbmUgT01BUEZCX1BMQU5FX1lSRVNfTUlOCQk4CisKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogI2RlZmluZSBPTUFQRkJfUExBTkVfTlVNCQkxCiAjZWxzZQpAQCAtMTY5LDE5ICsyMTEsMTkgQEAKIAlpbnQJCXBjZDsJCS8qIHBpeGVsIGNsb2NrIGRpdmlkZXIuCiAJCQkJCSAgIE9ic29sZXRlIHVzZSBwaXhlbF9jbG9jayBpbnN0ZWFkICovCiAKLQlpbnQJCSgqaW5pdCkJCShzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYpOwotCXZvaWQJCSgqY2xlYW51cCkJKHZvaWQpOwotCWludAkJKCplbmFibGUpCSh2b2lkKTsKLQl2b2lkCQkoKmRpc2FibGUpCSh2b2lkKTsKLQl1bnNpZ25lZCBsb25nCSgqZ2V0X2NhcHMpCSh2b2lkKTsKLQlpbnQJCSgqc2V0X2JrbGlnaHRfbGV2ZWwpKHVuc2lnbmVkIGludCBsZXZlbCk7Ci0JdW5zaWduZWQgaW50CSgqZ2V0X2JrbGlnaHRfbGV2ZWwpKHZvaWQpOwotCXVuc2lnbmVkIGludAkoKmdldF9ia2xpZ2h0X21heCkgICh2b2lkKTsKLQlpbnQJCSgqcnVuX3Rlc3QpCShpbnQgdGVzdF9udW0pOworCWludAkJKCppbml0KQkJKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAorCQkJCQkgc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KTsKKwl2b2lkCQkoKmNsZWFudXApCShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCk7CisJaW50CQkoKmVuYWJsZSkJKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKTsKKwl2b2lkCQkoKmRpc2FibGUpCShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCk7CisJdW5zaWduZWQgbG9uZwkoKmdldF9jYXBzKQkoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpOworCWludAkJKCpzZXRfYmtsaWdodF9sZXZlbCkoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGxldmVsKTsKKwl1bnNpZ25lZCBpbnQJKCpnZXRfYmtsaWdodF9sZXZlbCkoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpOworCXVuc2lnbmVkIGludAkoKmdldF9ia2xpZ2h0X21heCkgIChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCk7CisJaW50CQkoKnJ1bl90ZXN0KQkoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsIGludCB0ZXN0X251bSk7CiB9OwogCi1zdHJ1Y3Qgb21hcGZiX2RldmljZTsKLQogc3RydWN0IGV4dGlmX3RpbWluZ3MgewogCWludCBjc19vbl90aW1lOwogCWludCBjc19vZmZfdGltZTsKQEAgLTIwMiw5ICsyNDQsMTAgQEAKIH07CiAKIHN0cnVjdCBsY2RfY3RybF9leHRpZiB7Ci0JaW50ICAoKmluaXQpCQkodm9pZCk7CisJaW50ICAoKmluaXQpCQkoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KTsKIAl2b2lkICgqY2xlYW51cCkJCSh2b2lkKTsKIAl2b2lkICgqZ2V0X2Nsa19pbmZvKQkodTMyICpjbGtfcGVyaW9kLCB1MzIgKm1heF9jbGtfZGl2KTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0X21heF90eF9yYXRlKSh2b2lkKTsKIAlpbnQgICgqY29udmVydF90aW1pbmdzKQkoc3RydWN0IGV4dGlmX3RpbWluZ3MgKnRpbWluZ3MpOwogCXZvaWQgKCpzZXRfdGltaW5ncykJKGNvbnN0IHN0cnVjdCBleHRpZl90aW1pbmdzICp0aW1pbmdzKTsKIAl2b2lkICgqc2V0X2JpdHNfcGVyX2N5Y2xlKShpbnQgYnBjKTsKQEAgLTIxMywzMSArMjU2LDQ4IEBACiAJdm9pZCAoKndyaXRlX2RhdGEpCShjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwogCXZvaWQgKCp0cmFuc2Zlcl9hcmVhKQkoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAogCQkJCSB2b2lkIChjYWxsYmFjaykodm9pZCAqIGRhdGEpLCB2b2lkICpkYXRhKTsKKwlpbnQgICgqc2V0dXBfdGVhcnN5bmMpCSh1bnNpZ25lZCBwaW5fY250LAorCQkJCSB1bnNpZ25lZCBoc19wdWxzZV90aW1lLCB1bnNpZ25lZCB2c19wdWxzZV90aW1lLAorCQkJCSBpbnQgaHNfcG9sX2ludiwgaW50IHZzX3BvbF9pbnYsIGludCBkaXYpOworCWludCAgKCplbmFibGVfdGVhcnN5bmMpIChpbnQgZW5hYmxlLCB1bnNpZ25lZCBsaW5lKTsKKwogCXVuc2lnbmVkIGxvbmcJCW1heF90cmFuc21pdF9zaXplOwogfTsKIAogc3RydWN0IG9tYXBmYl9ub3RpZmllcl9ibG9jayB7CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCW5iOwogCXZvaWQJCQkqZGF0YTsKKwlpbnQJCQlwbGFuZV9pZHg7CiB9OwogCi10eXBlZGVmIGludCAoKm9tYXBmYl9ub3RpZmllcl9jYWxsYmFja190KShzdHJ1Y3Qgb21hcGZiX25vdGlmaWVyX2Jsb2NrICosCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsCi0JCQkJCSAgIHN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldik7Cit0eXBlZGVmIGludCAoKm9tYXBmYl9ub3RpZmllcl9jYWxsYmFja190KShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJCQkgIHZvaWQgKmZiaSk7CisKK3N0cnVjdCBvbWFwZmJfbWVtX3JlZ2lvbiB7CisJZG1hX2FkZHJfdAlwYWRkcjsKKwl2b2lkCQkqdmFkZHI7CisJdW5zaWduZWQgbG9uZwlzaXplOworCXU4CQl0eXBlOwkJLyogT01BUEZCX1BMQU5FX01FTV8qICovCisJdW5zaWduZWQJYWxsb2M6MTsJLyogYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIgKi8KKwl1bnNpZ25lZAltYXA6MTsJCS8qIGtlcm5lbCBtYXBwZWQgYnkgdGhlIGRyaXZlciAqLworfTsKKworc3RydWN0IG9tYXBmYl9tZW1fZGVzYyB7CisJaW50CQkJCXJlZ2lvbl9jbnQ7CisJc3RydWN0IG9tYXBmYl9tZW1fcmVnaW9uCXJlZ2lvbltPTUFQRkJfUExBTkVfTlVNXTsKK307CiAKIHN0cnVjdCBsY2RfY3RybCB7CiAJY29uc3QgY2hhcgkqbmFtZTsKIAl2b2lkCQkqZGF0YTsKIAogCWludAkJKCppbml0KQkJICAoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2LAotCQkJCQkgICBpbnQgZXh0X21vZGUsIGludCByZXFfdnJhbV9zaXplKTsKKwkJCQkJICAgaW50IGV4dF9tb2RlLAorCQkJCQkgICBzdHJ1Y3Qgb21hcGZiX21lbV9kZXNjICpyZXFfbWQpOwogCXZvaWQJCSgqY2xlYW51cCkJICAodm9pZCk7CiAJdm9pZAkJKCpiaW5kX2NsaWVudCkJICAoc3RydWN0IG9tYXBmYl9ub3RpZmllcl9ibG9jayAqbmIpOwotCXZvaWQJCSgqZ2V0X3ZyYW1fbGF5b3V0KSh1bnNpZ25lZCBsb25nICpzaXplLAotCQkJCQkgICB2b2lkICoqdmlydF9iYXNlLAotCQkJCQkgICBkbWFfYWRkcl90ICpwaHlzX2Jhc2UpOwotCWludAkJKCptbWFwKQkJICAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotCXVuc2lnbmVkIGxvbmcJKCpnZXRfY2FwcykJICAodm9pZCk7CisJdm9pZAkJKCpnZXRfY2FwcykJICAoaW50IHBsYW5lLCBzdHJ1Y3Qgb21hcGZiX2NhcHMgKmNhcHMpOwogCWludAkJKCpzZXRfdXBkYXRlX21vZGUpKGVudW0gb21hcGZiX3VwZGF0ZV9tb2RlIG1vZGUpOwogCWVudW0gb21hcGZiX3VwZGF0ZV9tb2RlICgqZ2V0X3VwZGF0ZV9tb2RlKSh2b2lkKTsKIAlpbnQJCSgqc2V0dXBfcGxhbmUpCSAgKGludCBwbGFuZSwgaW50IGNoYW5uZWxfb3V0LApAQCAtMjQ1LDggKzMwNSwxNiBAQAogCQkJCQkgICBpbnQgc2NyZWVuX3dpZHRoLAogCQkJCQkgICBpbnQgcG9zX3gsIGludCBwb3NfeSwgaW50IHdpZHRoLAogCQkJCQkgICBpbnQgaGVpZ2h0LCBpbnQgY29sb3JfbW9kZSk7CisJaW50CQkoKnNldHVwX21lbSkJICAoaW50IHBsYW5lLCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgaW50IG1lbV90eXBlLCB1bnNpZ25lZCBsb25nICpwYWRkcik7CisJaW50CQkoKm1tYXApCQkgIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCWludAkJKCpzZXRfc2NhbGUpCSAgKGludCBwbGFuZSwKKwkJCQkJICAgaW50IG9yaWdfd2lkdGgsIGludCBvcmlnX2hlaWdodCwKKwkJCQkJICAgaW50IG91dF93aWR0aCwgaW50IG91dF9oZWlnaHQpOwogCWludAkJKCplbmFibGVfcGxhbmUpCSAgKGludCBwbGFuZSwgaW50IGVuYWJsZSk7Ci0JaW50CQkoKnVwZGF0ZV93aW5kb3cpICAoc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93ICp3aW4sCisJaW50CQkoKnVwZGF0ZV93aW5kb3cpICAoc3RydWN0IGZiX2luZm8gKmZiaSwKKwkJCQkJICAgc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93ICp3aW4sCiAJCQkJCSAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSwKIAkJCQkJICAgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CiAJdm9pZAkJKCpzeW5jKQkJICAodm9pZCk7CkBAIC0yNTcsNyArMzI1LDcgQEAKIAkJCQkJICAgdTE2IGJsdWUsIHUxNiB0cmFuc3AsCiAJCQkJCSAgIGludCB1cGRhdGVfaHdfbWVtKTsKIAlpbnQJCSgqc2V0X2NvbG9yX2tleSkgIChzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSAqY2spOwotCisJaW50CQkoKmdldF9jb2xvcl9rZXkpICAoc3RydWN0IG9tYXBmYl9jb2xvcl9rZXkgKmNrKTsKIH07CiAKIGVudW0gb21hcGZiX3N0YXRlIHsKQEAgLTI2NiwxOSArMzM0LDIwIEBACiAJT01BUEZCX0FDVElWRQk9IDEwMAogfTsKIAorc3RydWN0IG9tYXBmYl9wbGFuZV9zdHJ1Y3QgeworCWludAkJCQlpZHg7CisJc3RydWN0IG9tYXBmYl9wbGFuZV9pbmZvCWluZm87CisJZW51bSBvbWFwZmJfY29sb3JfZm9ybWF0CWNvbG9yX21vZGU7CisJc3RydWN0IG9tYXBmYl9kZXZpY2UJCSpmYmRldjsKK307CisKIHN0cnVjdCBvbWFwZmJfZGV2aWNlIHsKIAlpbnQJCQlzdGF0ZTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICBleHRfbGNkYzsgICAgICAgICAgICAgICAvKiBVc2luZyBleHRlcm5hbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQ0QgY29udHJvbGxlciAqLwogCXN0cnVjdCBtdXRleAkJcnF1ZXVlX211dGV4OwogCi0Jdm9pZAkJCSp2cmFtX3ZpcnRfYmFzZTsKLQlkbWFfYWRkcl90CQl2cmFtX3BoeXNfYmFzZTsKLQl1bnNpZ25lZCBsb25nCQl2cmFtX3NpemU7Ci0KLQlpbnQJCQljb2xvcl9tb2RlOwogCWludAkJCXBhbGV0dGVfc2l6ZTsKLQlpbnQJCQltaXJyb3I7CiAJdTMyCQkJcHNldWRvX3BhbGV0dGVbMTddOwogCiAJc3RydWN0IGxjZF9wYW5lbAkqcGFuZWw7CQkJLyogTENEIHBhbmVsICovCkBAIC0yODYsMTkgKzM1NSwxOSBAQAogCXN0cnVjdCBsY2RfY3RybAkJKmludF9jdHJsOwkJLyogaW50ZXJuYWwgTENEIGN0cmwgKi8KIAlzdHJ1Y3QgbGNkX2N0cmxfZXh0aWYJKmV4dF9pZjsJCS8qIExDRCBjdHJsIGV4dGVybmFsCiAJCQkJCQkJICAgaW50ZXJmYWNlICovCi0Jc3RydWN0IGZiX2luZm8JCSpmYl9pbmZvOwotCiAJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8JbmV3X3ZhcjsJLyogZm9yIG1vZGUgY2hhbmdlcyAqLworCisJc3RydWN0IG9tYXBmYl9tZW1fZGVzYwkJbWVtX2Rlc2M7CisJc3RydWN0IGZiX2luZm8JCQkqZmJfaW5mb1tPTUFQRkJfUExBTkVfTlVNXTsKIH07CiAKIHN0cnVjdCBvbWFwZmJfcGxhdGZvcm1fZGF0YSB7Ci0Jc3RydWN0IG9tYXBfbGNkX2NvbmZpZyAgIGxjZDsKLQlzdHJ1Y3Qgb21hcF9mYm1lbV9jb25maWcgZmJtZW07CisJc3RydWN0IG9tYXBfbGNkX2NvbmZpZwkJbGNkOworCXN0cnVjdCBvbWFwZmJfbWVtX2Rlc2MJCW1lbV9kZXNjOworCXZvaWQJCQkJKmN0cmxfcGxhdGZvcm1fZGF0YTsKIH07CiAKLSNkZWZpbmUgT01BUEZCX0VWRU5UX1JFQURZCTEKLSNkZWZpbmUgT01BUEZCX0VWRU5UX0RJU0FCTEVECTIKLQogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiBleHRlcm4gc3RydWN0IGxjZF9jdHJsIG9tYXAxX2xjZF9jdHJsOwogI2Vsc2UKQEAgLTMxMCwxNSArMzc5LDE2IEBACiBleHRlcm4gdm9pZCBvbWFwZmJfbm90aWZ5X2NsaWVudHMoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2LAogCQkJCSAgdW5zaWduZWQgbG9uZyBldmVudCk7CiBleHRlcm4gaW50ICBvbWFwZmJfcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBvbWFwZmJfbm90aWZpZXJfYmxvY2sgKm5iLAotCQkJCSAgICBvbWFwZmJfbm90aWZpZXJfY2FsbGJhY2tfdCBjYWxsYmFjaywKLQkJCQkgICAgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CisJCQkJICAgb21hcGZiX25vdGlmaWVyX2NhbGxiYWNrX3QgY2FsbGJhY2ssCisJCQkJICAgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CiBleHRlcm4gaW50ICBvbWFwZmJfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IG9tYXBmYl9ub3RpZmllcl9ibG9jayAqbmIpOwotZXh0ZXJuIGludCAgb21hcGZiX3VwZGF0ZV93aW5kb3dfYXN5bmMoc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93ICp3aW4sCi0JCQkJCXZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSwKLQkJCQkJdm9pZCAqY2FsbGJhY2tfZGF0YSk7CitleHRlcm4gaW50ICBvbWFwZmJfdXBkYXRlX3dpbmRvd19hc3luYyhzdHJ1Y3QgZmJfaW5mbyAqZmJpLAorCQkJCSAgICAgICBzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cgKndpbiwKKwkJCQkgICAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopLAorCQkJCSAgICAgICB2b2lkICpjYWxsYmFja19kYXRhKTsKIAotLyogaW4gYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyAqLwotZXh0ZXJuIHZvaWQgb21hcGZiX3Jlc2VydmVfbWVtKHZvaWQpOworLyogaW4gYXJjaC9hcm0vcGxhdC1vbWFwL2ZiLmMgKi8KK2V4dGVybiB2b2lkIG9tYXBmYl9zZXRfY3RybF9wbGF0Zm9ybV9kYXRhKHZvaWQgKnBkYXRhKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaAppbmRleCA2ZmMwZGQ1Li5iYjliYjNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaApAQCAtMjAsOSArMjAsNiBAQAogCQkJCSAgICAgIHUzMiBtZW1fdHlwZSk7CiBleHRlcm4gdTMyIG9tYXAyX3NldF9wcmNtKHUzMiBkcGxsX2N0cmxfdmFsLCB1MzIgc2RyY19yZnJfdmFsLCBpbnQgYnlwYXNzKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcF9mYl9zcmFtX3N0YXJ0OwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcF9mYl9zcmFtX3NpemU7Ci0KIC8qIERvIG5vdCB1c2UgdGhlc2UgKi8KIGV4dGVybiB2b2lkIHNyYW1fcmVwcm9ncmFtX2Nsb2NrKHUzMiBja2N0bCwgdTMyIGRwbGxjdGwpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3JhbV9yZXByb2dyYW1fY2xvY2tfc3o7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VzYi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91c2IuaAppbmRleCAwNTRmYjlhLi45OWFlOWVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VzYi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdXNiLmgKQEAgLTcsOSArNywyNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIE9UR19CQVNFCQkJMHhmZmZiMDQwMAotI2RlZmluZSBVRENfQkFTRQkJCTB4ZmZmYjQwMDAKLSNkZWZpbmUgT01BUF9PSENJX0JBU0UJCQkweGZmZmJhMDAwCisjZGVmaW5lIE9NQVAxX09UR19CQVNFCQkJMHhmZmZiMDQwMAorI2RlZmluZSBPTUFQMV9VRENfQkFTRQkJCTB4ZmZmYjQwMDAKKyNkZWZpbmUgT01BUDFfT0hDSV9CQVNFCQkJMHhmZmZiYTAwMAorCisjZGVmaW5lIE9NQVAyX09IQ0lfQkFTRQkJCTB4NDgwNWUwMDAKKyNkZWZpbmUgT01BUDJfVURDX0JBU0UJCQkweDQ4MDVlMjAwCisjZGVmaW5lIE9NQVAyX09UR19CQVNFCQkJMHg0ODA1ZTMwMAorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKKworI2RlZmluZSBPVEdfQkFTRQkJCU9NQVAxX09UR19CQVNFCisjZGVmaW5lIFVEQ19CQVNFCQkJT01BUDFfVURDX0JBU0UKKyNkZWZpbmUgT01BUF9PSENJX0JBU0UJCQlPTUFQMV9PSENJX0JBU0UKKworI2Vsc2UKKworI2RlZmluZSBPVEdfQkFTRQkJCU9NQVAyX09UR19CQVNFCisjZGVmaW5lIFVEQ19CQVNFCQkJT01BUDJfVURDX0JBU0UKKyNkZWZpbmUgT01BUF9PSENJX0JBU0UJCQlPTUFQMl9PSENJX0JBU0UKKworI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTI4LDYgKzQ2LDcgQEAKICMJZGVmaW5lCSBIU1RfSURMRV9FTgkJKDEgPDwgMTQpCiAjCWRlZmluZQkgREVWX0lETEVfRU4JCSgxIDw8IDEzKQogIwlkZWZpbmUJIE9UR19SRVNFVF9ET05FCQkoMSA8PCAyKQorIwlkZWZpbmUJIE9UR19TT0ZUX1JFU0VUCQkoMSA8PCAxKQogI2RlZmluZSBPVEdfU1lTQ09OXzJfUkVHCQlPVEdfUkVHMzIoMHgwOCkKICMJZGVmaW5lCSBPVEdfRU4JCQkoMSA8PCAzMSkKICMJZGVmaW5lCSBVU0JYX1NZTkNIUk8JCSgxIDw8IDMwKQpAQCAtMTAzLDYgKzEyMiw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIE9NQVAxICovCiAjZGVmaW5lCVVTQl9UUkFOU0NFSVZFUl9DVFJMX1JFRwlfX1JFRzMyKDB4ZmZmZTEwMDAgKyAweDAwNjQpCiAjCWRlZmluZQlDT05GX1VTQjJfVU5JX1IJCSgxIDw8IDgpCiAjCWRlZmluZQlDT05GX1VTQjFfVU5JX1IJCSgxIDw8IDcpCkBAIC0xMTEsNyArMTMxLDE3IEBACiAjCWRlZmluZQlDT05GX1VTQl9QV1JETl9ETV9SCSgxIDw8IDIpCiAjCWRlZmluZQlDT05GX1VTQl9QV1JETl9EUF9SCSgxIDw8IDEpCiAKLQotCisvKiBPTUFQMiAqLworI2RlZmluZQlDT05UUk9MX0RFVkNPTkZfUkVHCQlfX1JFRzMyKEw0XzI0WFhfQkFTRSArIDB4MDI3NCkKKyMJZGVmaW5lCVVTQl9VTklESVIJCQkweDAKKyMJZGVmaW5lCVVTQl9VTklESVJfVExMCQkJMHgxCisjCWRlZmluZQlVU0JfQklESVIJCQkweDIKKyMJZGVmaW5lCVVTQl9CSURJUl9UTEwJCQkweDMKKyMJZGVmaW5lCVVTQlQwV1JNT0RFSSh4KQkJKCh4KSA8PCAyMikKKyMJZGVmaW5lCVVTQlQxV1JNT0RFSSh4KQkJKCh4KSA8PCAyMCkKKyMJZGVmaW5lCVVTQlQyV1JNT0RFSSh4KQkJKCh4KSA8PCAxOCkKKyMJZGVmaW5lCVVTQlQyVExMNVBJCQkoMSA8PCAxNykKKyMJZGVmaW5lCVVTQjBQVUVOQUNUTE9JCQkoMSA8PCAxNikKKyMJZGVmaW5lCVVTQlNUQU5EQllDVFJMCQkoMSA8PCAxNSkKIAogI2VuZGlmCS8qIF9fQVNNX0FSQ0hfT01BUF9VU0JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2VudHJ5LW1hY3JvLlMKaW5kZXggMTM4ODM4ZC4uM2I0ZTIwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9lbnRyeS1tYWNyby5TCkBAIC0xNCw2ICsxNCw3IEBACiAJCS5lbmRtCiAKIAkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQlsZHIgICAgIFxiYXNlLCA9SU9fQUREUkVTUyhSRUFMVklFV19HSUNfQ1BVX0JBU0UpCiAJCS5lbmRtCiAKIAkJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCkBAIC00MCw3ICs0MSw2IEBACiAKIAkJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKIAotCQlsZHIgICAgIFxiYXNlLCA9SU9fQUREUkVTUyhSRUFMVklFV19HSUNfQ1BVX0JBU0UpCiAJCWxkciAgICAgXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfSU5UQUNLXSAvKiBiaXRzIDEyLTEwID0gc3JjIENQVSwgOS0wID0gaW50ICMgKi8KIAogCQlsZHIJXHRtcCwgPTEwMjEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2VudHJ5LW1hY3JvLlMKaW5kZXggMGNmYjg5Yi4uMDM4Yjc2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2VudHJ5LW1hY3JvLlMKQEAgLTEsNiArMSwxNCBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9lbnRyeS1tYWNyby1pb21kLlM+CisKKwkuZXF1CWlvY19iYXNlX2hpZ2gsIElPQ19CQVNFICYgMHhmZjAwMDAwMAorCS5lcXUJaW9jX2Jhc2VfbG93LCBJT0NfQkFTRSAmIDB4MDBmZjAwMDAKKwogCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwltb3YJXGJhc2UsICNpb2NfYmFzZV9oaWdoCQlAIHBvaW50IGF0IElPQworCS5pZglpb2NfYmFzZV9sb3cKKwlvcnIJXGJhc2UsIFxiYXNlLCAjaW9jX2Jhc2VfbG93CisJLmVuZGlmCiAJLmVuZG0KIAogCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaAppbmRleCBjNzljYjE4Li4zYjQ5Y2QxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaApAQCAtMTI0LDcgKzEyNCw3IEBACiAjZGVmaW5lIElSUV9TM0MyNDQzX0RNQQkJUzNDMjQxMF9JUlEoMTcpCQkvKiBJUlFfRE1BMSAqLwogI2RlZmluZSBJUlFfUzNDMjQ0M19VQVJUMwlTM0MyNDEwX0lSUSgxOCkJCS8qIElSUV9ETUEyICovCiAjZGVmaW5lIElSUV9TM0MyNDQzX0NGQ09OCVMzQzI0MTBfSVJRKDE5KQkJLyogSVJRX0RNQTMgKi8KLSNkZWZpbmUgSVJRX1MzQzI0NDNfU0RJMQlTM0MyNDEwX0lSUSgyMCkJCS8qIElSUV9TREkgKi8KKyNkZWZpbmUgSVJRX1MzQzI0NDNfSFNNTUMJUzNDMjQxMF9JUlEoMjApCQkvKiBJUlFfU0RJICovCiAjZGVmaW5lIElSUV9TM0MyNDQzX05BTkQJUzNDMjQxMF9JUlEoMjQpCQkvKiByZXNlcnZlZCAqLwogCiAjZGVmaW5lIElSUV9TM0MyNDQzX0xDRDEJUzNDMjQxMF9JUlFTVUIoMTQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tYXAuaAppbmRleCA0NTA1YWVmLi4xOWU3N2YwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWFwLmgKQEAgLTE1Myw2ICsxNTMsMTAgQEAKICNkZWZpbmUgUzNDMjQ0MF9QQV9BQzk3CSAgICgweDVCMDAwMDAwKQogI2RlZmluZSBTM0MyNDQwX1NaX0FDOTcJICAgU1pfMU0KIAorLyogUzNDMjQ0MyBIaWdoLXNwZWVkIFNEL01NQyAqLworI2RlZmluZSBTM0MyNDQzX1BBX0hTTU1DICAgKDB4NEE4MDAwMDApCisjZGVmaW5lIFMzQzI0NDNfU1pfSFNNTUMgICAoMjU2KQorCiAvKiBJU0Egc3R5bGUgSU8sIGZvciBlYWNoIG1hY2hpbmUgdG8gc29ydCBvdXQgbWFwcGluZ3MgZm9yLCBpZiBpdAogICogaW1wbGVtZW50cyBpdC4gV2UgcmVzZXJ2ZSB0d28gMTZNIHJlZ2lvbnMgZm9yIElTQS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW9qLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpb2ouaAppbmRleCAwMjEzMWE1Li4wMzYyMzMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpb2ouaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpb2ouaApAQCAtOTgsNSArOTgsOSBAQAogI2RlZmluZSBTM0MyNDQwX0dQSjEyX09VVFAgICAgICAoMHgwMSA8PCAyNCkKICNkZWZpbmUgUzNDMjQ0MF9HUEoxMl9DQU1SRVNFVCAgKDB4MDIgPDwgMjQpCiAKKyNkZWZpbmUgUzNDMjQ0M19HUEoxMwkJUzNDMjQxMF9HUElPTk8oUzNDMjQ0MF9HUElPX0JBTktKLCAxMykKKyNkZWZpbmUgUzNDMjQ0M19HUEoxNAkJUzNDMjQxMF9HUElPTk8oUzNDMjQ0MF9HUElPX0JBTktKLCAxNCkKKyNkZWZpbmUgUzNDMjQ0M19HUEoxNQkJUzNDMjQxMF9HUElPTk8oUzNDMjQ0MF9HUElPX0JBTktKLCAxNSkKKwogI2VuZGlmCS8qIF9fQVNNX0FSQ0hfUkVHU19HUElPSl9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1wb3dlci5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXBvd2VyLmgKaW5kZXggNmMzMTllYS4uOTRmZjk2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXBvd2VyLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXBvd2VyLmgKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS9hcmNoLXMzYzI0MTAvcmVncy1wb3dlci5oCisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtcG93ZXIuaAogICoKICAqIENvcHlyaWdodCAoYykgMjAwMywyMDA0LDIwMDUsMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MgPGxpbnV4QHNpbXRlYy5jby51az4KICAqCQkgICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXMzYzI0MTIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zM2MyNDEyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhNmEzYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zM2MyNDEyLmgKQEAgLTAsMCArMSwyMSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXMzYzI0MTIuaAorICoKKyAqIENvcHlyaWdodCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzI0MTIgc3BlY2lmaWMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX1MzQzI0MTJfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfUzNDMjQxMl9IICJzM2MyNDEyIgorCisjZGVmaW5lIFMzQzI0MTJfU1dSU1QJCShTM0MyNFhYX1ZBX0NMS1BXUiArIDB4MzApCisjZGVmaW5lIFMzQzI0MTJfU1dSU1RfUkVTRVQJKDB4NTMzQzI0MTIpCisKKyNlbmRpZgkvKiBfX0FTTV9BUkNIX1JFR1NfUzNDMjQxMl9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zM2MyNDQzLWNsb2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtczNjMjQ0My1jbG9jay5oCmluZGV4IGZmMDUzNmQuLmMxNDE0NjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zM2MyNDQzLWNsb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXMzYzI0NDMtY2xvY2suaApAQCAtMSw0ICsxLDQgQEAKLS8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1jbG9jay5oCisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtczNjMjQ0My1jbG9jay5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgpAQCAtMTI5LDYgKzEyOSw3IEBACiAjZGVmaW5lIFMzQzI0NDNfUENMS0NPTl9JSUMJCSgxPDw0KQogI2RlZmluZSBTM0MyNDQzX1BDTEtDT05fU0RJCQkoMTw8NSkKICNkZWZpbmUgUzNDMjQ0M19QQ0xLQ09OX0FEQwkJKDE8PDcpCisjZGVmaW5lIFMzQzI0NDNfUENMS0NPTl9BQzk3CQkoMTw8OCkKICNkZWZpbmUgUzNDMjQ0M19QQ0xLQ09OX0lJUwkJKDE8PDkpCiAjZGVmaW5lIFMzQzI0NDNfUENMS0NPTl9QV01UCQkoMTw8MTApCiAjZGVmaW5lIFMzQzI0NDNfUENMS0NPTl9XRFQJCSgxPDwxMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zcGkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zcGkuaAppbmRleCAzNTUyMjgwLi40YTQ5OWExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc3BpLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNwaS5oCkBAIC0xMiw2ICsxMiw4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19TUElfSAogI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfU1BJX0gKIAorI2RlZmluZSBTM0MyNDEwX1NQSTEJKDB4MjApCisjZGVmaW5lIFMzQzI0MTJfU1BJMQkoMHgxMDApCiAKICNkZWZpbmUgUzNDMjQxMF9TUENPTgkoMHgwMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXdhdGNoZG9nLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtd2F0Y2hkb2cuaAppbmRleCBmNGZmZjQ0Li5hOWM1ZDQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtd2F0Y2hkb2cuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtd2F0Y2hkb2cuaApAQCAtMSw0ICsxLDQgQEAKLS8qIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtczNjMjQxMC9yZWdzLXdhdGNoZG9nLmgKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy13YXRjaGRvZy5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgogICoJCSAgICAgIGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VkYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91ZGMuaAppbmRleCBlNTllYzMzLi5iOGFhNmNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VkYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdWRjLmgKQEAgLTEsNCArMSw0IEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS9hcmNoLXMzYzI0MTAvdWRjLmgKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdWRjLmgKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQXJuYXVkIFBhdGFyZCA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9lbnRyeS1tYWNyby5TCmluZGV4IDAyODk2NzYuLjEyN2RiNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9lbnRyeS1tYWNyby5TCkBAIC0xMiwxNiArMTIsMTYgQEAKIAkJLmVuZG0KIAogCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCW1vdglcYmFzZSwgIzB4ZmEwMDAwMDAJCUAgSUNJUCA9IDB4ZmEwNTAwMDAKKwkJYWRkCVxiYXNlLCBcYmFzZSwgIzB4MDAwNTAwMDAKIAkJLmVuZG0KIAogCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKIAkJLmVuZG0KIAogCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCi0JCW1vdglyNCwgIzB4ZmEwMDAwMDAJCQlAIElDSVAgPSAweGZhMDUwMDAwCi0JCWFkZAlyNCwgcjQsICMweDAwMDUwMDAwCi0JCWxkcglcaXJxc3RhdCwgW3I0XQkJCUAgZ2V0IGlycXMKLQkJbGRyCVxpcnFuciwgW3I0LCAjNF0JCUAgSUNNUiA9IDB4ZmEwNTAwMDQKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2VdCQlAIGdldCBpcnFzCisJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzRdCQlAIElDTVIgPSAweGZhMDUwMDA0CiAJCWFuZHMJXGlycXN0YXQsIFxpcnFzdGF0LCBcaXJxbnIKIAkJbW92CVxpcnFuciwgIzAKIAkJYmVxCTEwMDFmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC12ZXJzYXRpbGUvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9lbnRyeS1tYWNyby5TCmluZGV4IDBmYWUwMDIuLjkyNGQxYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9lbnRyeS1tYWNyby5TCkBAIC0xNCwxMyArMTQsMTMgQEAKIAkJLmVuZG0KIAogCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCWxkcglcYmFzZSwgPUlPX0FERFJFU1MoVkVSU0FUSUxFX1ZJQ19CQVNFKQogCQkuZW5kbQogCiAJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgogCQkuZW5kbQogCiAJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQkJbGRyCVxiYXNlLCA9SU9fQUREUkVTUyhWRVJTQVRJTEVfVklDX0JBU0UpCiAJCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjVklDX0lSUV9TVEFUVVNdCUAgZ2V0IG1hc2tlZCBzdGF0dXMKIAkJbW92CVxpcnFuciwgIzAKIAkJdGVxCVxpcnFzdGF0LCAjMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tYXJtL2F0b21pYy5oCmluZGV4IGYyNjZjMjcuLjNiNTlmOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXRvbWljLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNkZWZpbmUgX19BU01fQVJNX0FUT01JQ19ICiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogdHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmgKaW5kZXggYWZhZDMyYy4uZDEyOTRhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vY2FjaGVmbHVzaC5oCkBAIC0xMDIsNiArMTAyLDE0IEBACiAvLyMgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1Y3KQorLy8jIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKy8vIyBlbHNlCisvLyMgIGRlZmluZSBfQ0FDSEUgdjcKKy8vIyBlbmRpZgorI2VuZGlmCisKICNpZiAhZGVmaW5lZChfQ0FDSEUpICYmICFkZWZpbmVkKE1VTFRJX0NBQ0hFKQogI2Vycm9yIFVua25vd24gY2FjaGUgbWFpbnRhaW5lbmNlIG1vZGVsCiAjZW5kaWYKQEAgLTQxOCwxMSArNDI2LDE5IEBACiAgKi8KICNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLHBhZ2UpCWRvIHsgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX2NhY2hlaWRfcHJlc2VudCh2YWwpCQkodmFsICE9IHJlYWRfY3B1aWQoQ1BVSURfSUQpKQotI2RlZmluZSBfX2NhY2hlaWRfdml2dCh2YWwpCQkoKHZhbCAmICgxNSA8PCAyNSkpICE9ICgxNCA8PCAyNSkpCi0jZGVmaW5lIF9fY2FjaGVpZF92aXB0KHZhbCkJCSgodmFsICYgKDE1IDw8IDI1KSkgPT0gKDE0IDw8IDI1KSkKLSNkZWZpbmUgX19jYWNoZWlkX3ZpcHRfbm9uYWxpYXNpbmcodmFsKQkoKHZhbCAmICgxNSA8PCAyNSB8IDEgPDwgMjMpKSA9PSAoMTQgPDwgMjUpKQotI2RlZmluZSBfX2NhY2hlaWRfdmlwdF9hbGlhc2luZyh2YWwpCSgodmFsICYgKDE1IDw8IDI1IHwgMSA8PCAyMykpID09ICgxNCA8PCAyNSB8IDEgPDwgMjMpKQorI2RlZmluZSBfX2NhY2hlaWRfcHJlc2VudCh2YWwpCQkJKHZhbCAhPSByZWFkX2NwdWlkKENQVUlEX0lEKSkKKyNkZWZpbmUgX19jYWNoZWlkX3R5cGVfdjcodmFsKQkJCSgodmFsICYgKDcgPDwgMjkpKSA9PSAoNCA8PCAyOSkpCisKKyNkZWZpbmUgX19jYWNoZWlkX3ZpdnRfcHJldjcodmFsKQkJKCh2YWwgJiAoMTUgPDwgMjUpKSAhPSAoMTQgPDwgMjUpKQorI2RlZmluZSBfX2NhY2hlaWRfdmlwdF9wcmV2Nyh2YWwpCQkoKHZhbCAmICgxNSA8PCAyNSkpID09ICgxNCA8PCAyNSkpCisjZGVmaW5lIF9fY2FjaGVpZF92aXB0X25vbmFsaWFzaW5nX3ByZXY3KHZhbCkJKCh2YWwgJiAoMTUgPDwgMjUgfCAxIDw8IDIzKSkgPT0gKDE0IDw8IDI1KSkKKyNkZWZpbmUgX19jYWNoZWlkX3ZpcHRfYWxpYXNpbmdfcHJldjcodmFsKQkoKHZhbCAmICgxNSA8PCAyNSB8IDEgPDwgMjMpKSA9PSAoMTQgPDwgMjUgfCAxIDw8IDIzKSkKKworI2RlZmluZSBfX2NhY2hlaWRfdml2dCh2YWwpCQkJKF9fY2FjaGVpZF90eXBlX3Y3KHZhbCkgPyAwIDogX19jYWNoZWlkX3ZpdnRfcHJldjcodmFsKSkKKyNkZWZpbmUgX19jYWNoZWlkX3ZpcHQodmFsKQkJCShfX2NhY2hlaWRfdHlwZV92Nyh2YWwpID8gMSA6IF9fY2FjaGVpZF92aXB0X3ByZXY3KHZhbCkpCisjZGVmaW5lIF9fY2FjaGVpZF92aXB0X25vbmFsaWFzaW5nKHZhbCkJCShfX2NhY2hlaWRfdHlwZV92Nyh2YWwpID8gMSA6IF9fY2FjaGVpZF92aXB0X25vbmFsaWFzaW5nX3ByZXY3KHZhbCkpCisjZGVmaW5lIF9fY2FjaGVpZF92aXB0X2FsaWFzaW5nKHZhbCkJCShfX2NhY2hlaWRfdHlwZV92Nyh2YWwpID8gMCA6IF9fY2FjaGVpZF92aXB0X2FsaWFzaW5nX3ByZXY3KHZhbCkpCisjZGVmaW5lIF9fY2FjaGVpZF92aXZ0X2FzaWRfdGFnZ2VkX2luc3RyKHZhbCkJKF9fY2FjaGVpZF90eXBlX3Y3KHZhbCkgPyAoKHZhbCAmICgzIDw8IDE0KSkgPT0gKDEgPDwgMTQpKSA6IDApCiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVklWVCkgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9DQUNIRV9WSVBUKQogCkBAIC00MzAsNiArNDQ2LDcgQEAKICNkZWZpbmUgY2FjaGVfaXNfdmlwdCgpCQkJMAogI2RlZmluZSBjYWNoZV9pc192aXB0X25vbmFsaWFzaW5nKCkJMAogI2RlZmluZSBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkJMAorI2RlZmluZSBpY2FjaGVfaXNfdml2dF9hc2lkX3RhZ2dlZCgpCTAKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQpCiAKQEAgLTQ0Nyw2ICs0NjQsMTIgQEAKIAkJX19jYWNoZWlkX3ZpcHRfYWxpYXNpbmcoX192YWwpOwkJCQlcCiAJfSkKIAorI2RlZmluZSBpY2FjaGVfaXNfdml2dF9hc2lkX3RhZ2dlZCgpCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJdW5zaWduZWQgaW50IF9fdmFsID0gcmVhZF9jcHVpZChDUFVJRF9DQUNIRVRZUEUpOwlcCisJCV9fY2FjaGVpZF92aXZ0X2FzaWRfdGFnZ2VkX2luc3RyKF9fdmFsKTsJCVwKKwl9KQorCiAjZWxzZQogCiAjZGVmaW5lIGNhY2hlX2lzX3ZpdnQoKQkJCQkJCQlcCkBAIC00NzUsNiArNDk4LDEzIEBACiAJCSBfX2NhY2hlaWRfdmlwdF9hbGlhc2luZyhfX3ZhbCk7CQkJXAogCX0pCiAKKyNkZWZpbmUgaWNhY2hlX2lzX3ZpdnRfYXNpZF90YWdnZWQoKQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXVuc2lnbmVkIGludCBfX3ZhbCA9IHJlYWRfY3B1aWQoQ1BVSURfQ0FDSEVUWVBFKTsJXAorCQlfX2NhY2hlaWRfcHJlc2VudChfX3ZhbCkgJiYJCQkJXAorCQkgX19jYWNoZWlkX3ZpdnRfYXNpZF90YWdnZWRfaW5zdHIoX192YWwpOwkJXAorCX0pCisKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmgKaW5kZXggYWJmYjc1Yi4uYzhiNWQwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmgKQEAgLTQ0NSw3ICs0NDUsNyBAQAogICoKICAqIFRoZSBkbWFib3VuY2Ugcm91dGluZXMgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW5ldmVyIGEgZG1hLW1hcHBpbmcKICAqIGlzIHJlcXVlc3RlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIGJ1ZmZlciBuZWVkcyB0byBiZSBib3VuY2VkCi0gKiBvciBub3QuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiAwIGlmIHRoZSB0aGUgYnVmZmVyIGlzIE9LIGZvcgorICogb3Igbm90LiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gMCBpZiB0aGUgYnVmZmVyIGlzIE9LIGZvcgogICogRE1BIGFjY2VzcyBhbmQgMSBpZiB0aGUgYnVmZmVyIG5lZWRzIHRvIGJlIGJvdW5jZWQuCiAgKgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZWNhcmQuaCBiL2luY2x1ZGUvYXNtLWFybS9lY2FyZC5oCmluZGV4IDNhNmQzZWIuLjY4NGZlMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9lY2FyZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9lY2FyZC5oCkBAIC0xMjEsNyArMTIxLDcgQEAKIHR5cGVkZWYgc3RydWN0IGV4cGFuc2lvbl9jYXJkIGVjYXJkX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgKmxvYWRlcl90OwogCi10eXBlZGVmIHN0cnVjdCB7CQkJLyogQ2FyZCBoYW5kbGVyIHJvdXRpbmVzCSovCit0eXBlZGVmIHN0cnVjdCBleHBhbnNpb25fY2FyZF9vcHMgewkvKiBDYXJkIGhhbmRsZXIgcm91dGluZXMJKi8KIAl2b2lkICgqaXJxZW5hYmxlKShlY2FyZF90ICplYywgaW50IGlycW5yKTsKIAl2b2lkICgqaXJxZGlzYWJsZSkoZWNhcmRfdCAqZWMsIGludCBpcnFucik7CiAJaW50ICAoKmlycXBlbmRpbmcpKGVjYXJkX3QgKmVjKTsKQEAgLTE3OSw2ICsxNzksOCBAQAogCXU2NAkJCWRtYV9tYXNrOwogfTsKIAordm9pZCBlY2FyZF9zZXRpcnEoc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYywgY29uc3Qgc3RydWN0IGV4cGFuc2lvbl9jYXJkX29wcyAqb3BzLCB2b2lkICppcnFfZGF0YSk7CisKIHN0cnVjdCBpbl9jaHVua19kaXIgewogCXVuc2lnbmVkIGludCBzdGFydF9vZmZzZXQ7CiAJdW5pb24gewpAQCAtMjI0LDYgKzIyNiwxMCBAQAogZXh0ZXJuIGludCBlY2FyZF9yZXF1ZXN0X3Jlc291cmNlcyhzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjKTsKIGV4dGVybiB2b2lkIGVjYXJkX3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpOwogCit2b2lkIF9faW9tZW0gKmVjYXJkbV9pb21hcChzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjLCB1bnNpZ25lZCBpbnQgcmVzLAorCQkJICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbWF4c2l6ZSk7CisjZGVmaW5lIGVjYXJkbV9pb3VubWFwKF9fZWMsIF9fYWRkcikJZGV2bV9pb3VubWFwKCYoX19lYyktPmRldiwgX19hZGRyKQorCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIGVjYXJkX2J1c190eXBlOwogCiAjZGVmaW5lIEVDQVJEX0RFVihfZCkJY29udGFpbmVyX29mKChfZCksIHN0cnVjdCBleHBhbnNpb25fY2FyZCwgZGV2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2dsdWUuaCBiL2luY2x1ZGUvYXNtLWFybS9nbHVlLmgKaW5kZXggMGNjNWQzYi4uMjIyNzRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2dsdWUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZ2x1ZS5oCkBAIC0zOCw2ICszOCw3IEBACiAgKgkgIHY1dGVqX2Vhcmx5CS0gQVJNdjUgd2l0aCBUaHVtYiBhbmQgSmF2YSBlYXJseSBhYm9ydCBoYW5kbGVyCiAgKgkgIHhzY2FsZQktIEFSTXY1IHdpdGggVGh1bWIgd2l0aCBYc2NhbGUgZXh0ZW5zaW9ucwogICoJICB2Nl9lYXJseQktIEFSTXY2IGdlbmVyaWMgZWFybHkgYWJvcnQgaGFuZGxlcgorICoJICB2N19lYXJseQktIEFSTXY3IGdlbmVyaWMgZWFybHkgYWJvcnQgaGFuZGxlcgogICovCiAjdW5kZWYgQ1BVX0FCT1JUX0hBTkRMRVIKICN1bmRlZiBNVUxUSV9BQk9SVApAQCAtMTA2LDYgKzEwNywxNCBAQAogIyBlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY3CisjIGlmZGVmIENQVV9BQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0FCT1JUX0hBTkRMRVIgdjdfZWFybHlfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCiAjaWZuZGVmIENQVV9BQk9SVF9IQU5ETEVSCiAjZXJyb3IgVW5rbm93biBkYXRhIGFib3J0IGhhbmRsZXIgdHlwZQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZW50cnktbWFjcm8taW9tZC5TIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWlvbWQuUwppbmRleCBmYmVkMDhmLi45YmI1ODBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZW50cnktbWFjcm8taW9tZC5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9lbnRyeS1tYWNyby1pb21kLlMKQEAgLTExLDggKzExLDYgQEAKIC8qIElPQyAvIElPTUQgYmFzZWQgaGFyZHdhcmUgKi8KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgogCi0JCS5lcXUJaW9jX2Jhc2VfaGlnaCwgSU9DX0JBU0UgJiAweGZmMDAwMDAwCi0JCS5lcXUJaW9jX2Jhc2VfbG93LCBJT0NfQkFTRSAmIDB4MDBmZjAwMDAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCW1vdglyMTIsICNpb2NfYmFzZV9oaWdoCiAJCS5pZglpb2NfYmFzZV9sb3cKQEAgLTIyLDMzICsyMCwyOSBAQAogCQkuZW5kbQogCiAJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQkJbW92CXI0LCAjaW9jX2Jhc2VfaGlnaAkJQCBwb2ludCBhdCBJT0MKLQkJLmlmCWlvY19iYXNlX2xvdwotCQlvcnIJcjQsIHI0LCAjaW9jX2Jhc2VfbG93Ci0JCS5lbmRpZgotCQlsZHJiCVxpcnFzdGF0LCBbcjQsICNJT01EX0lSUVJFUUJdCUAgZ2V0IGhpZ2ggcHJpb3JpdHkgZmlyc3QKLQkJbGRyCVxiYXNlLCA9aXJxX3ByaW9faAorCQlsZHJiCVxpcnFzdGF0LCBbXGJhc2UsICNJT01EX0lSUVJFUUJdCUAgZ2V0IGhpZ2ggcHJpb3JpdHkgZmlyc3QKKwkJbGRyCVx0bXAsID1pcnFfcHJpb19oCiAJCXRlcQlcaXJxc3RhdCwgIzAKICNpZmRlZiBJT01EX0JBU0UKLQkJbGRyZXFiCVxpcnFzdGF0LCBbcjQsICNJT01EX0RNQVJFUV0JQCBnZXQgZG1hCi0JCWFkZGVxCVxiYXNlLCBcYmFzZSwgIzI1NgkJQCBpcnFfcHJpb19oIHRhYmxlIHNpemUKKwkJbGRyZXFiCVxpcnFzdGF0LCBbXGJhc2UsICNJT01EX0RNQVJFUV0JQCBnZXQgZG1hCisJCWFkZGVxCVx0bXAsIFx0bXAsICMyNTYJCUAgaXJxX3ByaW9faCB0YWJsZSBzaXplCiAJCXRlcWVxCVxpcnFzdGF0LCAjMAogCQlibmUJMjQwNmYKICNlbmRpZgotCQlsZHJlcWIJXGlycXN0YXQsIFtyNCwgI0lPTURfSVJRUkVRQV0JQCBnZXQgbG93IHByaW9yaXR5Ci0JCWFkZGVxCVxiYXNlLCBcYmFzZSwgIzI1NgkJQCBpcnFfcHJpb19kIHRhYmxlIHNpemUKKwkJbGRyZXFiCVxpcnFzdGF0LCBbXGJhc2UsICNJT01EX0lSUVJFUUFdCUAgZ2V0IGxvdyBwcmlvcml0eQorCQlhZGRlcQlcdG1wLCBcdG1wLCAjMjU2CQlAIGlycV9wcmlvX2QgdGFibGUgc2l6ZQogCQl0ZXFlcQlcaXJxc3RhdCwgIzAKICNpZmRlZiBJT01EX0lSUVJFUUMKLQkJbGRyZXFiCVxpcnFzdGF0LCBbcjQsICNJT01EX0lSUVJFUUNdCi0JCWFkZGVxCVxiYXNlLCBcYmFzZSwgIzI1NgkJQCBpcnFfcHJpb19sIHRhYmxlIHNpemUKKwkJbGRyZXFiCVxpcnFzdGF0LCBbXGJhc2UsICNJT01EX0lSUVJFUUNdCisJCWFkZGVxCVx0bXAsIFx0bXAsICMyNTYJCUAgaXJxX3ByaW9fbCB0YWJsZSBzaXplCiAJCXRlcWVxCVxpcnFzdGF0LCAjMAogI2VuZGlmCiAjaWZkZWYgSU9NRF9JUlFSRVFECi0JCWxkcmVxYglcaXJxc3RhdCwgW3I0LCAjSU9NRF9JUlFSRVFEXQotCQlhZGRlcQlcYmFzZSwgXGJhc2UsICMyNTYJCUAgaXJxX3ByaW9fbGMgdGFibGUgc2l6ZQorCQlsZHJlcWIJXGlycXN0YXQsIFtcYmFzZSwgI0lPTURfSVJRUkVRRF0KKwkJYWRkZXEJXHRtcCwgXHRtcCwgIzI1NgkJQCBpcnFfcHJpb19sYyB0YWJsZSBzaXplCiAJCXRlcWVxCVxpcnFzdGF0LCAjMAogI2VuZGlmCi0yNDA2OgkJbGRybmViCVxpcnFuciwgW1xiYXNlLCBcaXJxc3RhdF0JQCBnZXQgSVJRIG51bWJlcgorMjQwNjoJCWxkcm5lYglcaXJxbnIsIFtcdG1wLCBcaXJxc3RhdF0JQCBnZXQgSVJRIG51bWJlcgogCQkuZW5kbQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vaW8uaAppbmRleCA4MjYxZmY5Li4xZDNjYWE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaW8uaApAQCAtMjU5LDkgKzI1OSwxMSBAQAogI2RlZmluZSBCSU9WRUNfTUVSR0VBQkxFKHZlYzEsIHZlYzIpCVwKIAkoKGJ2ZWNfdG9fcGh5cygodmVjMSkpICsgKHZlYzEpLT5idl9sZW4pID09IGJ2ZWNfdG9fcGh5cygodmVjMikpKQogCisjaWZkZWYgQ09ORklHX01NVQogI2RlZmluZSBBUkNIX0hBU19WQUxJRF9QSFlTX0FERFJfUkFOR0UKIGV4dGVybiBpbnQgdmFsaWRfcGh5c19hZGRyX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IHNpemUpOwogZXh0ZXJuIGludCB2YWxpZF9tbWFwX3BoeXNfYWRkcl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgc2l6ZV90IHNpemUpOworI2VuZGlmCiAKIC8qCiAgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1hcm0vaW9jdGxzLmgKaW5kZXggYmI5YTdhYS4uYTkxZDhhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2lvY3Rscy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9pb2N0bHMuaApAQCAtNDYsNiArNDYsMTAgQEAKICNkZWZpbmUgVElPQ1NCUksJMHg1NDI3ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLwogI2RlZmluZSBUSU9DQ0JSSwkweDU0MjggIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIFRJT0NHU0lECTB4NTQyOSAgLyogUmV0dXJuIHRoZSBzZXNzaW9uIElEIG9mIEZEICovCisjZGVmaW5lIFRDR0VUUzIJCV9JT1IoJ1QnLDB4MkEsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTMgkJX0lPVygnVCcsMHgyQiwgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFNXMglfSU9XKCdUJywweDJDLCBzdHJ1Y3QgdGVybWlvczIpCisjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCiAjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLWFybS9rZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWNlMWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2tkZWJ1Zy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9rZGVidWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9rZXhlYy5oIGIvaW5jbHVkZS9hc20tYXJtL2tleGVjLmgKaW5kZXggOGMxYzYxNi4uYjViMDMwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2tleGVjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2tleGVjLmgKQEAgLTE2LDggKzE2LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2RlZmluZSBNQVhfTk9URV9CWVRFUyAxMDI0Ci0KIHN0cnVjdCBraW1hZ2U7CiAvKiBQcm92aWRlIGEgZHVtbXkgZGVmaW5pdGlvbiB0byBhdm9pZCBidWlsZCBmYWlsdXJlcy4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9zZXR1cF9yZWdzKHN0cnVjdCBwdF9yZWdzICpuZXdyZWdzLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvYXJjaC5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvYXJjaC5oCmluZGV4IGZkMmY5YmYuLmM1OWZhZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2FyY2guaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9hcmNoLmgKQEAgLTQ5LDcgKzQ5LDcgQEAKICAqLwogI2RlZmluZSBNQUNISU5FX1NUQVJUKF90eXBlLF9uYW1lKQkJCVwKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjaGluZV9kZXNjIF9fbWFjaF9kZXNjXyMjX3R5cGUJXAotIF9fYXR0cmlidXRlX3VzZWRfXwkJCQkJXAorIF9fdXNlZAkJCQkJCQlcCiAgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5hcmNoLmluZm8uaW5pdCIpKSkgPSB7CVwKIAkubnIJCT0gTUFDSF9UWVBFXyMjX3R5cGUsCQlcCiAJLm5hbWUJCT0gX25hbWUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbW11LmggYi9pbmNsdWRlL2FzbS1hcm0vbW11LmgKaW5kZXggZmUyYTIzYi4uNTMwOTlkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tbXUuaApAQCAtNCwxMyArNCwxMyBAQAogI2lmZGVmIENPTkZJR19NTVUKIAogdHlwZWRlZiBzdHJ1Y3QgewotI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CisjaWZkZWYgQ09ORklHX0NQVV9IQVNfQVNJRAogCXVuc2lnbmVkIGludCBpZDsKICNlbmRpZgogCXVuc2lnbmVkIGludCBrdm1fc2VxOwogfSBtbV9jb250ZXh0X3Q7CiAKLSNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgorI2lmZGVmIENPTkZJR19DUFVfSEFTX0FTSUQKICNkZWZpbmUgQVNJRChtbSkJKChtbSktPmNvbnRleHQuaWQgJiAyNTUpCiAjZWxzZQogI2RlZmluZSBBU0lEKG1tKQkoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tYXJtL21tdV9jb250ZXh0LmgKaW5kZXggZjg3NTVjOC4uNjkxM2QwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21tdV9jb250ZXh0LmgKQEAgLTIwLDcgKzIwLDcgQEAKIAogdm9pZCBfX2NoZWNrX2t2bV9zZXEoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCi0jaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19BU0lECiAKIC8qCiAgKiBPbiBBUk12Niwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgQ29udGV4dCBJRDoKQEAgLTM2LDggKzM2LDkgQEAKICAqIFRoZSBjb250ZXh0IElEIGlzIHVzZWQgYnkgZGVidWdnZXJzIGFuZCB0cmFjZSBsb2dpYywgYW5kCiAgKiBzaG91bGQgYmUgdW5pcXVlIHdpdGhpbiBhbGwgcnVubmluZyBwcm9jZXNzZXMuCiAgKi8KLSNkZWZpbmUgQVNJRF9CSVRTCTgKLSNkZWZpbmUgQVNJRF9NQVNLCSgofjApIDw8IEFTSURfQklUUykKKyNkZWZpbmUgQVNJRF9CSVRTCQk4CisjZGVmaW5lIEFTSURfTUFTSwkJKCh+MCkgPDwgQVNJRF9CSVRTKQorI2RlZmluZSBBU0lEX0ZJUlNUX1ZFUlNJT04JKDEgPDwgQVNJRF9CSVRTKQogCiBleHRlcm4gdW5zaWduZWQgaW50IGNwdV9sYXN0X2FzaWQ7CiAKQEAgLTk2LDggKzk3LDcgQEAKICNpZmRlZiBDT05GSUdfTU1VCiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAotCWlmIChwcmV2ICE9IG5leHQpIHsKLQkJY3B1X3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKTsKKwlpZiAoIWNwdV90ZXN0X2FuZF9zZXQoY3B1LCBuZXh0LT5jcHVfdm1fbWFzaykgfHwgcHJldiAhPSBuZXh0KSB7CiAJCWNoZWNrX2NvbnRleHQobmV4dCk7CiAJCWNwdV9zd2l0Y2hfbW0obmV4dC0+cGdkLCBuZXh0KTsKIAkJaWYgKGNhY2hlX2lzX3ZpdnQoKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLW5vbW11LmggYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS1ub21tdS5oCmluZGV4IDdiMWM5YWMuLjBjOGJlMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLW5vbW11LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BndGFibGUtbm9tbXUuaApAQCAtODMsMTAgKzgzLDYgQEAKICNkZWZpbmUgaW9fcmVtYXBfcGFnZV9yYW5nZQlyZW1hcF9wYWdlX3JhbmdlCiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZQlyZW1hcF9wZm5fcmFuZ2UKIAotI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQotI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCi0jZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCi0KIAogLyoKICAqIEFsbCAzMmJpdCBhZGRyZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IHZhbGlkIGZvciB2bWFsbG9jLi4uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaAppbmRleCA3YjJiYWZjLi4yMWRlYzlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmgKQEAgLTM5NSwxMCArMzk1LDYgQEAKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSxmcm9tLHBmbixzaXplLHByb3QpIFwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgZnJvbSwgcGZuLCBzaXplLCBwcm90KQogCi0jZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCi0jZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKLSNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKLQogI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKSBkbyB7IH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2RldnMuaCBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvZGV2cy5oCmluZGV4IGRkZGY0ODUuLmY5ZDZmMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvZGV2cy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvZGV2cy5oCkBAIC0yOSw2ICsyOSw3IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3J0YzsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfYWRjOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9zZGk7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2hzbW1jOwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3NwaTA7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3NwaTE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcG9sbC5oIGIvaW5jbHVkZS9hc20tYXJtL3BvbGwuaAppbmRleCA1MDMwYjJiLi5jOTg1MDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wb2xsLmgKQEAgLTEsMjcgKzEgQEAKLSNpZm5kZWYgX19BU01BUk1fUE9MTF9ICi0jZGVmaW5lIF9fQVNNQVJNX1BPTExfSAotCi0vKiBUaGVzZSBhcmUgc3BlY2lmaWVkIGJ5IGlCQ1MyICovCi0jZGVmaW5lIFBPTExJTgkJMHgwMDAxCi0jZGVmaW5lIFBPTExQUkkJCTB4MDAwMgotI2RlZmluZSBQT0xMT1VUCQkweDAwMDQKLSNkZWZpbmUgUE9MTEVSUgkJMHgwMDA4Ci0jZGVmaW5lIFBPTExIVVAJCTB4MDAxMAotI2RlZmluZSBQT0xMTlZBTAkweDAwMjAKLQotLyogVGhlIHJlc3Qgc2VlbSB0byBiZSBtb3JlLW9yLWxlc3Mgbm9uc3RhbmRhcmQuIENoZWNrIHRoZW0hICovCi0jZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCi0jZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCi0jZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCi0jZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCi0jZGVmaW5lIFBPTExNU0cJCTB4MDQwMAotI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAotI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCi0KLXN0cnVjdCBwb2xsZmQgewotCWludCBmZDsKLQlzaG9ydCBldmVudHM7Ci0Jc2hvcnQgcmV2ZW50czsKLX07Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BvbGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wcm9jLWZucy5oIGIvaW5jbHVkZS9hc20tYXJtL3Byb2MtZm5zLmgKaW5kZXggZWE3ZTU0Yy4uNTU5OWQ0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3Byb2MtZm5zLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3Byb2MtZm5zLmgKQEAgLTE5Myw2ICsxOTMsMTQgQEAKICMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3Y2CiAjICBlbmRpZgogIyBlbmRpZgorIyBpZmRlZiBDT05GSUdfQ1BVX1Y3CisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV92NworIyAgZW5kaWYKKyMgZW5kaWYKICNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NldHVwLmggYi9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaAppbmRleCBlNTQwNzM5Li43YmJmMTA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaApAQCAtMTg1LDcgKzE4NSw3IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgX190YWcgX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIudGFnbGlzdC5pbml0IikpKQorI2RlZmluZSBfX3RhZyBfX3VzZWQgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi50YWdsaXN0LmluaXQiKSkpCiAjZGVmaW5lIF9fdGFndGFibGUodGFnLCBmbikgXAogc3RhdGljIHN0cnVjdCB0YWd0YWJsZSBfX3RhZ3RhYmxlXyMjZm4gX190YWcgPSB7IHRhZywgZm4gfQogCkBAIC0yMTgsNyArMjE4LDcgQEAKIH07CiAKICNkZWZpbmUgX19lYXJseV9wYXJhbShuYW1lLGZuKQkJCQkJXAotc3RhdGljIHN0cnVjdCBlYXJseV9wYXJhbXMgX19lYXJseV8jI2ZuIF9fYXR0cmlidXRlX3VzZWRfXwlcCitzdGF0aWMgc3RydWN0IGVhcmx5X3BhcmFtcyBfX2Vhcmx5XyMjZm4gX191c2VkCQkJXAogX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5lYXJseV9wYXJhbS5pbml0IikpKSA9IHsgbmFtZSwgZm4gfQogCiAjZW5kaWYgIC8qICBfX0tFUk5FTF9fICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NpemVzLmggYi9pbmNsdWRlL2FzbS1hcm0vc2l6ZXMuaAppbmRleCA3ZjUwYWUwLi41MDM4NDNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc2l6ZXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2l6ZXMuaApAQCAtMjQsNiArMjQsMTAgQEAKICNkZWZpbmUgX19zaXplc19oICAgICAgICAgICAgICAgICAgICAgICAxCiAKIC8qIGhhbmR5IHNpemVzICovCisjZGVmaW5lIFNaXzE2CQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgU1pfMjU2CQkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgU1pfNTEyCQkJCTB4MDAwMDAyMDAKKwogI2RlZmluZSBTWl8xSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKICNkZWZpbmUgU1pfNEsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCiAjZGVmaW5lIFNaXzhLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCmluZGV4IDYzYjMwODAuLjZmOGU2YTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNkZWZpbmUgQ1BVX0FSQ0hfQVJNdjVURQk2CiAjZGVmaW5lIENQVV9BUkNIX0FSTXY1VEVKCTcKICNkZWZpbmUgQ1BVX0FSQ0hfQVJNdjYJCTgKKyNkZWZpbmUgQ1BVX0FSQ0hfQVJNdjcJCTkKIAogLyoKICAqIENSMSBiaXRzIChDUCMxNSBDUjEpCkBAIC05Myw3ICs5NCw3IEBACiAJCV9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiAKIHN0cnVjdCBzaWdpbmZvOwotdm9pZCBub3RpZnlfZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzaWdpbmZvICppbmZvLAordm9pZCBhcm1fbm90aWZ5X2RpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywKIAkJdW5zaWduZWQgbG9uZyBlcnIsIHVuc2lnbmVkIGxvbmcgdHJhcCk7CiAKIHZvaWQgaG9va19mYXVsdF9jb2RlKGludCBuciwgaW50ICgqZm4pKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCwKQEAgLTEwMyw4ICsxMDQsNiBAQAogI2RlZmluZSB4Y2hnKHB0cix4KSBcCiAJKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCiAKLSNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksMSkpCi0KIGV4dGVybiBhc21saW5rYWdlIHZvaWQgX19iYWNrdHJhY2Uodm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIGNfYmFja3RyYWNlKHVuc2lnbmVkIGxvbmcgZnAsIGludCBwbW9kZSk7CiAKQEAgLTE1Nyw3ICsxNTYsMTEgQEAKICNkZWZpbmUgdmVjdG9yc19oaWdoKCkJKDApCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9YU0MzKSB8fCBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgorI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA3CisjZGVmaW5lIGlzYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgiaXNiIiA6IDogOiAibWVtb3J5IikKKyNkZWZpbmUgZHNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJkc2IiIDogOiA6ICJtZW1vcnkiKQorI2RlZmluZSBkbWIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImRtYiIgOiA6IDogIm1lbW9yeSIpCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfWFNDMykgfHwgX19MSU5VWF9BUk1fQVJDSF9fID09IDYKICNkZWZpbmUgaXNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCA0IiBcCiAJCQkJICAgIDogOiAiciIgKDApIDogIm1lbW9yeSIpCiAjZGVmaW5lIGRzYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tYXJtL3Rlcm1iaXRzLmgKaW5kZXggYTNmNGZlMS4uZjc4NGQxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3Rlcm1iaXRzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3Rlcm1iaXRzLmgKQEAgLTE1LDYgKzE1LDE3IEBACiAJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCiB9OwogCitzdHJ1Y3QgdGVybWlvczIgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKwogc3RydWN0IGt0ZXJtaW9zIHsKIAl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLwogCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLwpAQCAtMTI4LDYgKzEzOSw3IEBACiAjZGVmaW5lIEhVUENMCTAwMDIwMDAKICNkZWZpbmUgQ0xPQ0FMCTAwMDQwMDAKICNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCisjZGVmaW5lICAgIEJPVEhFUiAwMDEwMDAwCiAjZGVmaW5lICAgIEI1NzYwMCAwMDEwMDAxCiAjZGVmaW5lICAgQjExNTIwMCAwMDEwMDAyCiAjZGVmaW5lICAgQjIzMDQwMCAwMDEwMDAzCkBAIC0xNDMsMTAgKzE1NSwxMiBAQAogI2RlZmluZSAgQjMwMDAwMDAgMDAxMDAxNQogI2RlZmluZSAgQjM1MDAwMDAgMDAxMDAxNgogI2RlZmluZSAgQjQwMDAwMDAgMDAxMDAxNwotI2RlZmluZSBDSUJBVUQJICAwMDIwMDM2MDAwMDAJLyogaW5wdXQgYmF1ZCByYXRlIChub3QgdXNlZCkgKi8KKyNkZWZpbmUgQ0lCQVVECSAgMDAyMDAzNjAwMDAwCQkvKiBpbnB1dCBiYXVkIHJhdGUgKi8KICNkZWZpbmUgQ01TUEFSICAgIDAxMDAwMDAwMDAwMAkJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLwogI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KIAorI2RlZmluZSBJQlNISUZUCSAgIDE2CisKIC8qIGNfbGZsYWcgYml0cyAqLwogI2RlZmluZSBJU0lHCTAwMDAwMDEKICNkZWZpbmUgSUNBTk9OCTAwMDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1hcm0vdGVybWlvcy5oCmluZGV4IDMyOWMzMjQuLjI5M2UzZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS90ZXJtaW9zLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3Rlcm1pb3MuaApAQCAtODIsOCArODIsMTAgQEAKIAljb3B5X3RvX3VzZXIoKHRlcm1pbyktPmNfY2MsICh0ZXJtaW9zKS0+Y19jYywgTkNDKTsgXAogfSkKIAotI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKLSNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHUsIGspIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zMikpCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zMikpCisjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvc18xKGssIHUpIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvc18xKHUsIGspIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oCmluZGV4IDA4YzY5OTEuLjcxYmU0ZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oCkBAIC0xMzgsMTIgKzEzOCwyNyBAQAogIyBkZWZpbmUgdjZ3YmlfYWx3YXlzX2ZsYWdzCSgtMVVMKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQ1BVX1RMQl9WNworIyBkZWZpbmUgdjd3YmlfcG9zc2libGVfZmxhZ3MJdjZ3YmlfdGxiX2ZsYWdzCisjIGRlZmluZSB2N3diaV9hbHdheXNfZmxhZ3MJdjZ3YmlfdGxiX2ZsYWdzCisjIGlmZGVmIF9UTEIKKyMgIGRlZmluZSBNVUxUSV9UTEIgMQorIyBlbHNlCisjICBkZWZpbmUgX1RMQiB2N3diaQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIHY3d2JpX3Bvc3NpYmxlX2ZsYWdzCTAKKyMgZGVmaW5lIHY3d2JpX2Fsd2F5c19mbGFncwkoLTFVTCkKKyNlbmRpZgorCiAjaWZuZGVmIF9UTEIKICNlcnJvciBVbmtub3duIFRMQiBtb2RlbAogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCiBzdHJ1Y3QgY3B1X3RsYl9mbnMgewogCXZvaWQgKCpmbHVzaF91c2VyX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiAJdm9pZCAoKmZsdXNoX2tlcm5fcmFuZ2UpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCmluZGV4IGMwMjVhYjQuLjI1MGQ3ZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKQEAgLTM3Myw2ICszNzMsMTAgQEAKICNkZWZpbmUgX19OUl9nZXRjcHUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzQ1KQogCQkJCQkvKiAzNDYgZm9yIGVwb2xsX3B3YWl0ICovCiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJCShfX05SX1NZU0NBTExfQkFTRSszNDcpCisjZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0OCkKKyNkZWZpbmUgX19OUl9zaWduYWxmZAkJCShfX05SX1NZU0NBTExfQkFTRSszNDkpCisjZGVmaW5lIF9fTlJfdGltZXJmZAkJCShfX05SX1NZU0NBTExfQkFTRSszNTApCisjZGVmaW5lIF9fTlJfZXZlbnRmZAkJCShfX05SX1NZU0NBTExfQkFTRSszNTEpCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIFNXSXMgYXJlIEFSTSBwcml2YXRlLgpAQCAtNDMzLDUgKzQzNywxMSBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKIAorLyoKKyAqIFVuaW1wbGVtZW50ZWQgKG9yIGFsdGVybmF0aXZlbHkgaW1wbGVtZW50ZWQpIHN5c2NhbGxzCisgKi8KKyNkZWZpbmUgX19JR05PUkVfc3luY19maWxlX3JhbmdlCTEKKyNkZWZpbmUgX19JR05PUkVfZmFkdmlzZTY0XzY0CQkxCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU01fQVJNX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCmluZGV4IDk3ZTk0NGYuLmQ2ZGQ0MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BVE9NSUNfSAogI2RlZmluZSBfX0FTTV9BUk1fQVRPTUlDX0gKIAotCiAjaWZkZWYgQ09ORklHX1NNUAogI2Vycm9yIFNNUCBpcyBOT1Qgc3VwcG9ydGVkCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2lvLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9pby5oCmluZGV4IDJhYTAzM2IuLmE1YTdhNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvaW8uaApAQCAtMzIxLDcgKzMyMSw3IEBACiAKICNkZWZpbmUgbW1pb3diKCkKIAotLyogdGhlIGZvbGxvd2luZyBtYWNybyBpcyBkZXByZWNpYXRlZCAqLworLyogdGhlIGZvbGxvd2luZyBtYWNybyBpcyBkZXByZWNhdGVkICovCiAjZGVmaW5lIGlvYWRkcihwb3J0KSAgICAgICAgICAgICAgICAgICAgX19pb2FkZHIoKHBvcnQpKQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYva2RlYnVnLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9rZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWNlMWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYva2RlYnVnLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2tkZWJ1Zy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0yNi9tZW1vcnkuaAppbmRleCBhNjVmMTBiLi43YzFlNWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9tZW1vcnkuaApAQCAtNjAsNyArNjAsNyBAQAogLyoKICAqIFZpcnR1YWwgPC0+IERNQSB2aWV3IG1lbW9yeSBhZGRyZXNzIHRyYW5zbGF0aW9ucwogICogQWdhaW4sIHRoZXNlIGFyZSAqb25seSogdmFsaWQgb24gdGhlIGtlcm5lbCBkaXJlY3QgbWFwcGVkIFJBTQotICogbWVtb3J5LiAgVXNlIG9mIHRoZXNlIGlzICpkZXByZWNpYXRlZCouCisgKiBtZW1vcnkuICBVc2Ugb2YgdGhlc2UgaXMgKmRlcHJlY2F0ZWQqLgogICovCiAjZGVmaW5lIHZpcnRfdG9fYnVzKHgpCQkoKHVuc2lnbmVkIGxvbmcpKHgpKQogI2RlZmluZSBidXNfdG9fdmlydCh4KQkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSkpCkBAIC05Myw3ICs5Myw3IEBACiAjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKIAogLyoKLSAqIFdlIHNob3VsZCByZWFsbHkgZWxpbWluYXRlIHZpcnRfdG9fYnVzKCkgaGVyZSAtIGl0J3MgZGVwcmVjaWF0ZWQuCisgKiBXZSBzaG91bGQgcmVhbGx5IGVsaW1pbmF0ZSB2aXJ0X3RvX2J1cygpIGhlcmUgLSBpdCdzIGRlcHJlY2F0ZWQuCiAgKi8KICNkZWZpbmUgcGFnZV90b19idXMocGFnZSkJKHBhZ2VfYWRkcmVzcyhwYWdlKSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvcGd0YWJsZS5oCmluZGV4IDYzYTg4ODEuLjJiMjBlOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9wZ3RhYmxlLmgKQEAgLTI5NywxMCArMjk3LDYgQEAKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSxmcm9tLHBmbixzaXplLHByb3QpIFwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgZnJvbSwgcGZuLCBzaXplLCBwcm90KQogCi0jZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCi0jZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKLSNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKLQogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9BU01BUk1fUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9wb2xsLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9wb2xsLmgKaW5kZXggOWNjYjdmNC4uMTE3MGU3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3BvbGwuaApAQCAtMSwyNiArMSw4IEBACiAjaWZuZGVmIF9fQVNNQVJNX1BPTExfSAogI2RlZmluZSBfX0FTTUFSTV9QT0xMX0gKIAotLyogVGhlc2UgYXJlIHNwZWNpZmllZCBieSBpQkNTMiAqLwotI2RlZmluZSBQT0xMSU4JCTB4MDAwMQotI2RlZmluZSBQT0xMUFJJCQkweDAwMDIKLSNkZWZpbmUgUE9MTE9VVAkJMHgwMDA0Ci0jZGVmaW5lIFBPTExFUlIJCTB4MDAwOAotI2RlZmluZSBQT0xMSFVQCQkweDAwMTAKLSNkZWZpbmUgUE9MTE5WQUwJMHgwMDIwCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9sbC5oPgogCi0vKiBUaGUgcmVzdCBzZWVtIHRvIGJlIG1vcmUtb3ItbGVzcyBub25zdGFuZGFyZC4gQ2hlY2sgdGhlbSEgKi8KLSNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKLSNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKLSNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKLSNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKLSNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCi0jZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKLQotc3RydWN0IHBvbGxmZCB7Ci0JaW50IGZkOwotCXNob3J0IGV2ZW50czsKLQlzaG9ydCByZXZlbnRzOwotfTsKKyN1bmRlZiBQT0xMUkVNT1ZFCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3NldHVwLmgKaW5kZXggMWE4NjdiNC4uZTgyNTYyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvc2V0dXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zZXR1cC5oCkBAIC03MCw3ICs3MCw3IEBACiAvKiBkZXNjcmliZXMgd2hlcmUgdGhlIGNvbXByZXNzZWQgcmFtZGlzayBpbWFnZSBsaXZlcyAqLwogLyoKICAqIHRoaXMgb25lIGFjY2lkZW50YWxseSB1c2VkIHZpcnR1YWwgYWRkcmVzc2VzIC0gYXMgc3VjaCwKLSAqIGl0cyBkZXByZWNpYXRlZC4KKyAqIGl0J3MgZGVwcmVjYXRlZC4KICAqLwogI2RlZmluZSBBVEFHX0lOSVRSRAkweDU0NDEwMDA1CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogCWludCAoKnBhcnNlKShjb25zdCBzdHJ1Y3QgdGFnICopOwogfTsKIAotI2RlZmluZSBfX3RhZyBfX2F0dHJpYnV0ZV91c2VkX18gX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi50YWdsaXN0IikpKQorI2RlZmluZSBfX3RhZyBfX3VzZWQgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi50YWdsaXN0IikpKQogI2RlZmluZSBfX3RhZ3RhYmxlKHRhZywgZm4pIFwKIHN0YXRpYyBzdHJ1Y3QgdGFndGFibGUgX190YWd0YWJsZV8jI2ZuIF9fdGFnID0geyB0YWcsIGZuIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zeXN0ZW0uaAppbmRleCAwMGFlMzJhLi40NzAzNTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zeXN0ZW0uaApAQCAtNTIsOCArNTIsNiBAQAogI2RlZmluZSB4Y2hnKHB0cix4KSBcCiAJKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCiAKLSNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksMSkpCi0KIGV4dGVybiBhc21saW5rYWdlIHZvaWQgX19iYWNrdHJhY2Uodm9pZCk7CiAKICNkZWZpbmUgc2V0X2NyKHgpCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvYm9hcmQuaAppbmRleCAxYTdiMDdkLi45ZmQyZTMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9ib2FyZC5oCisrKyBiL2luY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwL2JvYXJkLmgKQEAgLTMwLDExICszMCw5IEBACiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKIGF0MzJfYWRkX2RldmljZV9zcGkodW5zaWduZWQgaW50IGlkLCBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmIsIHVuc2lnbmVkIGludCBuKTsKIAotc3RydWN0IGxjZGNfcGxhdGZvcm1fZGF0YSB7Ci0JdW5zaWduZWQgbG9uZyBmYm1lbV9zdGFydDsKLQl1bnNpZ25lZCBsb25nIGZibWVtX3NpemU7Ci19Oworc3RydWN0IGF0bWVsX2xjZGZiX2luZm87CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKLWF0MzJfYWRkX2RldmljZV9sY2RjKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IGxjZGNfcGxhdGZvcm1fZGF0YSAqZGF0YSk7CithdDMyX2FkZF9kZXZpY2VfbGNkYyh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvICpkYXRhLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgZmJtZW1fc3RhcnQsIHVuc2lnbmVkIGxvbmcgZmJtZW1fbGVuKTsKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQk9BUkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvY3B1LmggYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzYyZjQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvY3B1LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIEFWUjMyIGFuZCAoZmFrZSkgQVQ5MSBDUFUgaWRlbnRpZmljYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfQ1BVX0gKKyNkZWZpbmUgX19BU01fQVJDSF9DUFVfSAorCisvKgorICogT25seSBBVDMyQVA3MDAwIGlzIGRlZmluZWQgZm9yIG5vdy4gV2UgY2FuIGlkZW50aWZ5IHRoZSBzcGVjaWZpYworICogY2hpcCBhdCBydW50aW1lLCBidXQgSSdtIG5vdCBzdXJlIGlmIGl0J3MgcmVhbGx5IHdvcnRoIGl0LgorICovCisjaWZkZWYgQ09ORklHX0NQVV9BVDMyQVA3MDAwCisjIGRlZmluZSBjcHVfaXNfYXQzMmFwNzAwMCgpCSgxKQorI2Vsc2UKKyMgZGVmaW5lIGNwdV9pc19hdDMyYXA3MDAwKCkJKDApCisjZW5kaWYKKworLyoKKyAqIFNpbmNlIHRoaXMgaXMgQVZSMzIsIHdlIHdpbGwgbmV2ZXIgcnVuIG9uIGFueSBBVDkxIENQVS4gQnV0IHRoZXNlCisgKiBkZWZpbml0aW9ucyBtYXkgcmVkdWNlIGNsdXR0ZXIgaW4gY29tbW9uIGRyaXZlcnMuCisgKi8KKyNkZWZpbmUgY3B1X2lzX2F0OTFybTkyMDAoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eGUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05MjYwKCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOTI2MSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTkyNjMoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05cmwoKQkoMCkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tYXZyMzIva2RlYnVnLmgKaW5kZXggZjU4M2I2NC4uN2Y1NGUyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIva2RlYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIva2RlYnVnLmgKQEAgLTMsMzYgKzMsMjQgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKLXN0cnVjdCBwdF9yZWdzOwotCi1zdHJ1Y3QgZGllX2FyZ3MgewotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCWludCB0cmFwbnI7Ci19OwotCi1pbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwotaW50IHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwotaW50IHJlZ2lzdGVyX3BhZ2VfZmF1bHRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7Ci1pbnQgdW5yZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwotZXh0ZXJuIHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBhdnIzMl9kaWVfY2hhaW47Ci0KIC8qIEdyb3NzbHkgbWlzbmFtZWQuICovCiBlbnVtIGRpZV92YWwgewotCURJRV9GQVVMVCwKIAlESUVfQlJFQUtQT0lOVCwKIAlESUVfU1NURVAsCi0JRElFX1BBR0VfRkFVTFQsCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJICAgICBpbnQgdHJhcCwgaW50IHNpZykKKy8qCisgKiBUaGVzZSBhcmUgb25seSBoZXJlIGJlY2F1c2Uga3Byb2Jlcy5jIHdhbnRzIHRoZW0gdG8gaW1wbGVtZW50IGEKKyAqIGJsYXRhbnQgbGF5ZXJpbmcgdmlvbGF0aW9uLiAgV2lsbCBob3BlZnVsbHkgZ28gYXdheSBzb29uIG9uY2UgYWxsCisgKiBhcmNoaXRlY3R1cmVzIGFyZSB1cGRhdGVkLgorICovCitzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiB7Ci0Jc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7Ci0JCS5yZWdzID0gcmVncywKLQkJLnRyYXBuciA9IHRyYXAsCi0JfTsKLQotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmYXZyMzJfZGllX2NoYWluLCB2YWwsICZhcmdzKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiAwOwogfQogCiAjZW5kaWYgLyogX19BU01fQVZSMzJfS0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL2twcm9iZXMuaCBiL2luY2x1ZGUvYXNtLWF2cjMyL2twcm9iZXMuaAppbmRleCAwOWE1Y2JlLi4xOTBhNjM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIva3Byb2Jlcy5oCkBAIC0yNiw2ICsyNiw3IEBACiAJa3Byb2JlX29wY29kZV90CWluc25bTUFYX0lOU05fU0laRV07CiB9OwogCitleHRlcm4gaW50IGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKTsKIGV4dGVybiBpbnQga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9wZ3RhYmxlLmgKaW5kZXggNmI4Y2E5ZC4uZjZjYzJiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWF2cjMyL3BndGFibGUuaApAQCAtMzk0LDEwICszOTQsNiBAQAogI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQlcCiAJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKIAotI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQotI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCi0jZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCi0KIC8qIE5vIHBhZ2UgdGFibGUgY2FjaGVzIHRvIGluaXRpYWxpemUgKD8pICovCiAjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSgwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9wb2xsLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9wb2xsLmgKaW5kZXggNzM2ZTI5Ny4uYzk4NTA5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLWF2cjMyL3BvbGwuaApAQCAtMSwyNyArMSBAQAotI2lmbmRlZiBfX0FTTV9BVlIzMl9QT0xMX0gKLSNkZWZpbmUgX19BU01fQVZSMzJfUE9MTF9ICi0KLS8qIFRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgaUJDUzIgKi8KLSNkZWZpbmUgUE9MTElOCQkweDAwMDEKLSNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCi0jZGVmaW5lIFBPTExPVVQJCTB4MDAwNAotI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKLSNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCi0jZGVmaW5lIFBPTExOVkFMCTB4MDAyMAotCi0vKiBUaGUgcmVzdCBzZWVtIHRvIGJlIG1vcmUtb3ItbGVzcyBub25zdGFuZGFyZC4gQ2hlY2sgdGhlbSEgKi8KLSNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKLSNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKLSNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKLSNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKLSNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCi0jZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCi0jZGVmaW5lIFBPTExSREhVUAkweDIwMDAKLQotc3RydWN0IHBvbGxmZCB7Ci0JaW50IGZkOwotCXNob3J0IGV2ZW50czsKLQlzaG9ydCByZXZlbnRzOwotfTsKLQotI2VuZGlmIC8qIF9fQVNNX0FWUjMyX1BPTExfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BvbGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL3NldHVwLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9zZXR1cC5oCmluZGV4IDFmZjFhMjEuLmIwODI4ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWF2cjMyL3NldHVwLmgKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIvc2V0dXAuaApAQCAtMTEwLDcgKzExMCw3IEBACiAJaW50CSgqcGFyc2UpKHN0cnVjdCB0YWcgKik7CiB9OwogCi0jZGVmaW5lIF9fdGFnIF9fYXR0cmlidXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLnRhZ2xpc3QiKSkpCisjZGVmaW5lIF9fdGFnIF9fYXR0cmlidXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLnRhZ2xpc3QuaW5pdCIpKSkKICNkZWZpbmUgX190YWd0YWJsZSh0YWcsIGZuKQkJCQkJCVwKIAlzdGF0aWMgc3RydWN0IHRhZ3RhYmxlIF9fdGFndGFibGVfIyNmbiBfX3RhZyA9IHsgdGFnLCBmbiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tYXZyMzIvdW5pc3RkLmgKaW5kZXggOGY1MTIwNC4uM2I0ZTM1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIvdW5pc3RkLmgKQEAgLTI5NSw4ICsyOTUsMTMgQEAKICNkZWZpbmUgX19OUl9zaG1kdAkJMjc2CiAjZGVmaW5lIF9fTlJfc2htY3RsCQkyNzcKIAorI2RlZmluZSBfX05SX3V0aW1lbnNhdAkJMjc4CisjZGVmaW5lIF9fTlJfc2lnbmFsZmQJCTI3OQorI2RlZmluZSBfX05SX3RpbWVyZmQJCTI4MAorI2RlZmluZSBfX05SX2V2ZW50ZmQJCTI4MQorCiAjaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBOUl9zeXNjYWxscwkJMjc4CisjZGVmaW5lIE5SX3N5c2NhbGxzCQkyODIKIAogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9iZmluLWdsb2JhbC5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vYmZpbi1nbG9iYWwuaAppbmRleCBlMzdmODE2Li41N2YzN2NjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9iZmluLWdsb2JhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2JmaW4tZ2xvYmFsLmgKQEAgLTEwNCw2ICsxMDQsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0YWJsZV9zdGFydCwgdGFibGVfZW5kOwogCitleHRlcm4gdTE2IF9iZmluX3N3cnN0OyAvKiBzaGFkb3cgZm9yIFNvZnR3YXJlIFJlc2V0IFJlZ2lzdGVyIChTV1JTVCkgKi8KIGV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRwbWNfZm9wczsKIGV4dGVybiBjaGFyIF9zdGFydDsKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9yYW1zdGFydCwgX3JhbWVuZCwgX3JhbWJhc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9ncGlvLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9ncGlvLmgKaW5kZXggZDE2ZmUzYy4uYWEwZDU1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2dwaW8uaApAQCAtMTQ4LDEwICsxNDgsNiBAQAogCiAjaWZkZWYgQkY1MzdfRkFNSUxZCiAjZGVmaW5lIE1BWF9CTEFDS0ZJTl9HUElPUyA0OAotI2RlZmluZSBQT1JUX0YgMAotI2RlZmluZSBQT1JUX0cgMQotI2RlZmluZSBQT1JUX0ggMgotI2RlZmluZSBQT1JUX0ogMwogCiAjZGVmaW5lCUdQSU9fUEYwCTAKICNkZWZpbmUJR1BJT19QRjEJMQpAQCAtMjAyLDEzICsxOTgsMTcgQEAKICNkZWZpbmUJR1BJT19QSDE0ICAgICAgCTQ2CiAjZGVmaW5lCUdQSU9fUEgxNSAgICAgIAk0NwogCisjZGVmaW5lIFBPUlRfRiBHUElPX1BGMAorI2RlZmluZSBQT1JUX0cgR1BJT19QRzAKKyNkZWZpbmUgUE9SVF9IIEdQSU9fUEgwCisKICNlbmRpZgogCiAjaWZkZWYgQkY1NjFfRkFNSUxZCiAjZGVmaW5lIE1BWF9CTEFDS0ZJTl9HUElPUyA0OAotI2RlZmluZSBQT1JUX0ZJTzAgMAotI2RlZmluZSBQT1JUX0ZJTzEgMQotI2RlZmluZSBQT1JUX0ZJTzIgMgorI2RlZmluZSBQT1JUX0ZJTzAgR1BJT18wCisjZGVmaW5lIFBPUlRfRklPMSBHUElPXzE2CisjZGVmaW5lIFBPUlRfRklPMiBHUElPXzMyCiAjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL2lvLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9pby5oCmluZGV4IDdlNjk5NWU4Li5lYWM4YmNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2lvLmgKQEAgLTExNSwxMyArMTE1LDIxIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLWV4dGVybiB2b2lkIG91dHNiKHZvaWQgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBvdXRzdyh2b2lkIF9faW9tZW0gKnBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgb3V0c2wodm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIG91dHNiKHZvaWQgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgc2hvcnQgY291bnQpOworZXh0ZXJuIHZvaWQgb3V0c3codm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBzaG9ydCBjb3VudCk7CitleHRlcm4gdm9pZCBvdXRzbCh2b2lkIF9faW9tZW0gKnBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGNvdW50KTsKIAotZXh0ZXJuIHZvaWQgaW5zYihjb25zdCB2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgaW5zdyhjb25zdCB2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgaW5zbChjb25zdCB2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgaW5zYihjb25zdCB2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGNvdW50KTsKK2V4dGVybiB2b2lkIGluc3coY29uc3Qgdm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBzaG9ydCBjb3VudCk7CitleHRlcm4gdm9pZCBpbnNsKGNvbnN0IHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgc2hvcnQgY291bnQpOworCitleHRlcm4gdm9pZCBkbWFfb3V0c2Iodm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBzaG9ydCBjb3VudCk7CitleHRlcm4gdm9pZCBkbWFfb3V0c3codm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBzaG9ydCBjb3VudCk7CitleHRlcm4gdm9pZCBkbWFfb3V0c2wodm9pZCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBzaG9ydCBjb3VudCk7CisKK2V4dGVybiB2b2lkIGRtYV9pbnNiKGNvbnN0IHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgc2hvcnQgY291bnQpOworZXh0ZXJuIHZvaWQgZG1hX2luc3coY29uc3Qgdm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBzaG9ydCBjb3VudCk7CitleHRlcm4gdm9pZCBkbWFfaW5zbChjb25zdCB2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGNvdW50KTsKIAogLyoKICAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZCRjUyMi5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmQkY1MjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmMwNjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmQkY1MjIuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyMi5oCisgKiBCYXNlZCBvbjoKKyAqIEF1dGhvcjoKKyAqCisgKiBDcmVhdGVkOgorICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAorICoKKyAqIFJldjoKKyAqCisgKiBNb2RpZmllZDoKKyAqCisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfQ0RFRl9CRjUyMl9ICisjZGVmaW5lIF9DREVGX0JGNTIyX0gKKworLyogaW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgImRlZkJGNTIyLmgiCisKKy8qIGluY2x1ZGUgY29yZSBzcGVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zICovCisjaW5jbHVkZSA8YXNtL21hY2gtY29tbW9uL2NkZWZfTFBCbGFja2Zpbi5oPgorCisvKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUyMiAqLworCisvKiBpbmNsdWRlIGNkZWZCRjUyeF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTJ4IHByb2Nlc3NvcnMgKi8KKyNpbmNsdWRlICJjZGVmQkY1MnhfYmFzZS5oIgorCisjZW5kaWYgLyogX0NERUZfQkY1MjJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmQkY1MjUuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvY2RlZkJGNTI1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNjNjdlNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvY2RlZkJGNTI1LmgKQEAgLTAsMCArMSw0NjEgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvY2RlZmJmNTI1LmgKKyAqIEJhc2VkIG9uOgorICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6CisgKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCisgKgorICogUmV2OgorICoKKyAqIE1vZGlmaWVkOgorICoKKyAqCisgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9DREVGX0JGNTI1X0gKKyNkZWZpbmUgX0NERUZfQkY1MjVfSAorCisvKiBpbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCisjaW5jbHVkZSAiZGVmQkY1MjUuaCIKKworLyogaW5jbHVkZSBjb3JlIHNwZWNpZmljIHJlZ2lzdGVyIHBvaW50ZXIgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxhc20vbWFjaC1jb21tb24vY2RlZl9MUEJsYWNrZmluLmg+CisKKy8qIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTI1ICovCisKKy8qIGluY2x1ZGUgY2RlZkJGNTJ4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1MnggcHJvY2Vzc29ycyAqLworI2luY2x1ZGUgImNkZWZCRjUyeF9iYXNlLmgiCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjUyNSB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KKworLyogVVNCIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9GQUREUigpCQkJYmZpbl9yZWFkMTYoVVNCX0ZBRERSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9GQUREUih2YWwpCQliZmluX3dyaXRlMTYoVVNCX0ZBRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUE9XRVIoKQkJCWJmaW5fcmVhZDE2KFVTQl9QT1dFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUE9XRVIodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9QT1dFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJUWCgpCQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJUWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlRYKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfSU5UUlRYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5UUlJYKCkJCQliZmluX3JlYWQxNihVU0JfSU5UUlJYKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSUlgodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9JTlRSUlgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVFhFKCkJCQliZmluX3JlYWQxNihVU0JfSU5UUlRYRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlRYRSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0lOVFJUWEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSUlhFKCkJCQliZmluX3JlYWQxNihVU0JfSU5UUlJYRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlJYRSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0lOVFJSWEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVVNCKCkJCQliZmluX3JlYWQxNihVU0JfSU5UUlVTQikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlVTQih2YWwpCQliZmluX3dyaXRlMTYoVVNCX0lOVFJVU0IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVVNCRSgpCQliZmluX3JlYWQxNihVU0JfSU5UUlVTQkUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOVFJVU0JFKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfSU5UUlVTQkUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9GUkFNRSgpCQkJYmZpbl9yZWFkMTYoVVNCX0ZSQU1FKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9GUkFNRSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0ZSQU1FLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5ERVgoKQkJCWJmaW5fcmVhZDE2KFVTQl9JTkRFWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5ERVgodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9JTkRFWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1RFU1RNT0RFKCkJCWJmaW5fcmVhZDE2KFVTQl9URVNUTU9ERSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVEVTVE1PREUodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9URVNUTU9ERSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0dMT0JJTlRSKCkJCWJmaW5fcmVhZDE2KFVTQl9HTE9CSU5UUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfR0xPQklOVFIodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9HTE9CSU5UUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0dMT0JBTF9DVEwoKQkJYmZpbl9yZWFkMTYoVVNCX0dMT0JBTF9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0dMT0JBTF9DVEwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9HTE9CQUxfQ1RMLCB2YWwpCisKKy8qIFVTQiBQYWNrZXQgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYX01BWF9QQUNLRVQoKQkJYmZpbl9yZWFkMTYoVVNCX1RYX01BWF9QQUNLRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYX01BWF9QQUNLRVQodmFsKQliZmluX3dyaXRlMTYoVVNCX1RYX01BWF9QQUNLRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9DU1IwKCkJCQliZmluX3JlYWQxNihVU0JfQ1NSMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQ1NSMCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0NTUjAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWENTUigpCQkJYmZpbl9yZWFkMTYoVVNCX1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWENTUih2YWwpCQliZmluX3dyaXRlMTYoVVNCX1RYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhfTUFYX1BBQ0tFVCgpCQliZmluX3JlYWQxNihVU0JfUlhfTUFYX1BBQ0tFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhfTUFYX1BBQ0tFVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfUlhfTUFYX1BBQ0tFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1JYQ1NSKCkJCQliZmluX3JlYWQxNihVU0JfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYQ1NSKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9DT1VOVDAoKQkJCWJmaW5fcmVhZDE2KFVTQl9DT1VOVDApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0NPVU5UMCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0NPVU5UMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1JYQ09VTlQoKQkJCWJmaW5fcmVhZDE2KFVTQl9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWENPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYVFlQRSgpCQkJYmZpbl9yZWFkMTYoVVNCX1RYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhUWVBFKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfTkFLTElNSVQwKCkJCWJmaW5fcmVhZDE2KFVTQl9OQUtMSU1JVDApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX05BS0xJTUlUMCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX05BS0xJTUlUMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYSU5URVJWQUwoKQkJYmZpbl9yZWFkMTYoVVNCX1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYSU5URVJWQUwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhUWVBFKCkJCQliZmluX3JlYWQxNihVU0JfUlhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWFRZUEUodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWElOVEVSVkFMKCkJCWJmaW5fcmVhZDE2KFVTQl9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWElOVEVSVkFMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUlhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYQ09VTlQoKQkJCWJmaW5fcmVhZDE2KFVTQl9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWENPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfVFhDT1VOVCwgdmFsKQorCisvKiBVU0IgRW5kcG9pbnQgRklGTyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQMF9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDBfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVAwX0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDBfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQMV9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDFfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVAxX0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDFfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQMl9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDJfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVAyX0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDJfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQM19GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDNfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVAzX0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDNfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQNF9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDRfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVA0X0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDRfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQNV9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDVfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVA1X0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDVfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQNl9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDZfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVA2X0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDZfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQN19GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDdfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVA3X0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDdfRklGTywgdmFsKQorCisvKiBVU0IgT1RHIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9PVEdfREVWX0NUTCgpCQliZmluX3JlYWQxNihVU0JfT1RHX0RFVl9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX09UR19ERVZfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfT1RHX0RFVl9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9PVEdfVkJVU19JUlEoKQkJYmZpbl9yZWFkMTYoVVNCX09UR19WQlVTX0lSUSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfT1RHX1ZCVVNfSVJRKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9PVEdfVkJVU19JUlEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9PVEdfVkJVU19NQVNLKCkJCWJmaW5fcmVhZDE2KFVTQl9PVEdfVkJVU19NQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9PVEdfVkJVU19NQVNLKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9PVEdfVkJVU19NQVNLLCB2YWwpCisKKy8qIFVTQiBQaHkgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0xJTktJTkZPKCkJCWJmaW5fcmVhZDE2KFVTQl9MSU5LSU5GTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfTElOS0lORk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9MSU5LSU5GTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1ZQTEVOKCkJCQliZmluX3JlYWQxNihVU0JfVlBMRU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1ZQTEVOKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfVlBMRU4sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9IU19FT0YxKCkJCQliZmluX3JlYWQxNihVU0JfSFNfRU9GMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSFNfRU9GMSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0hTX0VPRjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9GU19FT0YxKCkJCQliZmluX3JlYWQxNihVU0JfRlNfRU9GMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRlNfRU9GMSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0ZTX0VPRjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9MU19FT0YxKCkJCQliZmluX3JlYWQxNihVU0JfTFNfRU9GMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfTFNfRU9GMSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0xTX0VPRjEsIHZhbCkKKworLyogKEFQSFlfQ05UUkwgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfQVBIWV9DTlRSTCgpCQliZmluX3JlYWQxNihVU0JfQVBIWV9DTlRSTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQVBIWV9DTlRSTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0FQSFlfQ05UUkwsIHZhbCkKKworLyogKEFQSFlfQ0FMSUIgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfQVBIWV9DQUxJQigpCQliZmluX3JlYWQxNihVU0JfQVBIWV9DQUxJQikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQVBIWV9DQUxJQih2YWwpCQliZmluX3dyaXRlMTYoVVNCX0FQSFlfQ0FMSUIsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0FQSFlfQ05UUkwyKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NOVFJMMikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQVBIWV9DTlRSTDIodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9BUEhZX0NOVFJMMiwgdmFsKQorCisvKiAoUEhZX1RFU1QgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUEhZX1RFU1QoKQkJYmZpbl9yZWFkMTYoVVNCX1BIWV9URVNUKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QSFlfVEVTVCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1BIWV9URVNULCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9QTExPU0NfQ1RSTCgpCQliZmluX3JlYWQxNihVU0JfUExMT1NDX0NUUkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1BMTE9TQ19DVFJMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUExMT1NDX0NUUkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9TUlBfQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFVTQl9TUlBfQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9TUlBfQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfU1JQX0NMS0RJViwgdmFsKQorCisvKiBVU0IgRW5kcG9pbnQgMCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfVFhDT1VOVCwgdmFsKQorCisvKiBVU0IgRW5kcG9pbnQgMSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhDT1VOVCwgdmFsKQorCisvKiBVU0IgRW5kcG9pbnQgMiBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhDT1VOVCwgdmFsKQorCisvKiBVU0IgRW5kcG9pbnQgMyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfVFhDT1VOVCwgdmFsKQorCisvKiBVU0IgRW5kcG9pbnQgNCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhDT1VOVCwgdmFsKQorCisvKiBVU0IgRW5kcG9pbnQgNSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhDT1VOVCwgdmFsKQorCisvKiBVU0IgRW5kcG9pbnQgNiBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfVFhDT1VOVCwgdmFsKQorCisvKiBVU0IgRW5kcG9pbnQgNyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhDT1VOVCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BX0lOVEVSUlVQVCgpCQliZmluX3JlYWQxNihVU0JfRE1BX0lOVEVSUlVQVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BX0lOVEVSUlVQVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BX0lOVEVSUlVQVCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCAwIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMENPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMEFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMEFERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMENPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgMSBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BMUNPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMUNPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMUFERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMUFERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUNPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQ09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQ09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQ09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQ09VTlRISUdILCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDIgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTJDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTJBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkFERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQ09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkNPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMkNPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkNPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkNPVU5USElHSCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCAzIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0FERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BM0FERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BM0NPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgNCBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BNENPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNENPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNEFERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNEFERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNEFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0QUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNENPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0Q09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0Q09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0Q09VTlRISUdILCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDUgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1Q09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTVDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1QUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTVBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1QUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNUFERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1Q09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNUNPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUNPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNUNPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNUNPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNUNPVU5USElHSCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCA2IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2Q09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkNPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE2Q09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2QUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE2QUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNkFERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2QUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTZBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNkNPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2Q09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTZDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTZDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgNyBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BN0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BN0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BN0FERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BN0FERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0FERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE3QUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3Q09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0NPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE3Q09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3Q09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE3Q09VTlRISUdILCB2YWwpCisKKyNlbmRpZiAvKiBfQ0RFRl9CRjUyNV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZCRjUyNy5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmQkY1MjcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmQxYTg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmQkY1MjcuaApAQCAtMCwwICsxLDYyNiBAQAorLyoKKyAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmYmY1MjcuaAorICogQmFzZWQgb246CisgKiBBdXRob3I6CisgKgorICogQ3JlYXRlZDoKKyAqIERlc2NyaXB0aW9uOiAgc3lzdGVtIG1tciByZWdpc3RlciBtYXAKKyAqCisgKiBSZXY6CisgKgorICogTW9kaWZpZWQ6CisgKgorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX0NERUZfQkY1MjdfSAorI2RlZmluZSBfQ0RFRl9CRjUyN19ICisKKy8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJkZWZCRjUyNy5oIgorCisvKiBpbmNsdWRlIGNvcmUgc3BlY2lmaWMgcmVnaXN0ZXIgcG9pbnRlciBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgPGFzbS9tYWNoLWNvbW1vbi9jZGVmX0xQQmxhY2tmaW4uaD4KKworLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MjcgKi8KKworLyogaW5jbHVkZSBjZGVmQkY1MnhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjUyeCBwcm9jZXNzb3JzICovCisjaW5jbHVkZSAiY2RlZkJGNTJ4X2Jhc2UuaCIKKworLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlICNkZWZpbmVzIG5lZWRlZCBieSBBRFNQLUJGNTI3IHRoYXQgYXJlIG5vdCBpbiB0aGUgY29tbW9uIGhlYWRlciAqLworCisvKiAxMC8xMDAgRXRoZXJuZXQgQ29udHJvbGxlcgkoMHhGRkMwMzAwMCAtIDB4RkZDMDMxRkYpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfT1BNT0RFKCkJCQliZmluX3JlYWQzMihFTUFDX09QTU9ERSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX09QTU9ERSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19PUE1PREUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfQUREUkxPKCkJCQliZmluX3JlYWQzMihFTUFDX0FERFJMTykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX0FERFJMTyh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19BRERSTE8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfQUREUkhJKCkJCQliZmluX3JlYWQzMihFTUFDX0FERFJISSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX0FERFJISSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19BRERSSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfSEFTSExPKCkJCQliZmluX3JlYWQzMihFTUFDX0hBU0hMTykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX0hBU0hMTyh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19IQVNITE8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfSEFTSEhJKCkJCQliZmluX3JlYWQzMihFTUFDX0hBU0hISSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX0hBU0hISSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19IQVNISEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfU1RBQUREKCkJCQliZmluX3JlYWQzMihFTUFDX1NUQUFERCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1NUQUFERCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19TVEFBREQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfU1RBREFUKCkJCQliZmluX3JlYWQzMihFTUFDX1NUQURBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1NUQURBVCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19TVEFEQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfRkxDKCkJCQliZmluX3JlYWQzMihFTUFDX0ZMQykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX0ZMQyh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19GTEMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVkxBTjEoKQkJCWJmaW5fcmVhZDMyKEVNQUNfVkxBTjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19WTEFOMSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19WTEFOMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19WTEFOMigpCQkJYmZpbl9yZWFkMzIoRU1BQ19WTEFOMikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1ZMQU4yKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1ZMQU4yLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1dLVVBfQ1RMKCkJCWJmaW5fcmVhZDMyKEVNQUNfV0tVUF9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19XS1VQX0NUTCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19XS1VQX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19XS1VQX0ZGTVNLMCgpCQliZmluX3JlYWQzMihFTUFDX1dLVVBfRkZNU0swKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfV0tVUF9GRk1TSzAodmFsKQliZmluX3dyaXRlMzIoRU1BQ19XS1VQX0ZGTVNLMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19XS1VQX0ZGTVNLMSgpCQliZmluX3JlYWQzMihFTUFDX1dLVVBfRkZNU0sxKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfV0tVUF9GRk1TSzEodmFsKQliZmluX3dyaXRlMzIoRU1BQ19XS1VQX0ZGTVNLMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19XS1VQX0ZGTVNLMigpCQliZmluX3JlYWQzMihFTUFDX1dLVVBfRkZNU0syKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfV0tVUF9GRk1TSzIodmFsKQliZmluX3dyaXRlMzIoRU1BQ19XS1VQX0ZGTVNLMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19XS1VQX0ZGTVNLMygpCQliZmluX3JlYWQzMihFTUFDX1dLVVBfRkZNU0szKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfV0tVUF9GRk1TSzModmFsKQliZmluX3dyaXRlMzIoRU1BQ19XS1VQX0ZGTVNLMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19XS1VQX0ZGQ01EKCkJCWJmaW5fcmVhZDMyKEVNQUNfV0tVUF9GRkNNRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1dLVVBfRkZDTUQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfV0tVUF9GRkNNRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19XS1VQX0ZGT0ZGKCkJCWJmaW5fcmVhZDMyKEVNQUNfV0tVUF9GRk9GRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1dLVVBfRkZPRkYodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfV0tVUF9GRk9GRiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19XS1VQX0ZGQ1JDMCgpCQliZmluX3JlYWQzMihFTUFDX1dLVVBfRkZDUkMwKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfV0tVUF9GRkNSQzAodmFsKQliZmluX3dyaXRlMzIoRU1BQ19XS1VQX0ZGQ1JDMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19XS1VQX0ZGQ1JDMSgpCQliZmluX3JlYWQzMihFTUFDX1dLVVBfRkZDUkMxKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfV0tVUF9GRkNSQzEodmFsKQliZmluX3dyaXRlMzIoRU1BQ19XS1VQX0ZGQ1JDMSwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1NZU0NUTCgpCQkJYmZpbl9yZWFkMzIoRU1BQ19TWVNDVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19TWVNDVEwodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfU1lTQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1NZU1RBVCgpCQkJYmZpbl9yZWFkMzIoRU1BQ19TWVNUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19TWVNUQVQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfU1lTVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYX1NUQVQoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWF9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhfU1RBVCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWF9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYX1NUS1koKQkJYmZpbl9yZWFkMzIoRU1BQ19SWF9TVEtZKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhfU1RLWSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWF9TVEtZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYX0lSUUUoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWF9JUlFFKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhfSVJRRSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWF9JUlFFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYX1NUQVQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWF9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhfU1RBVCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWF9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYX1NUS1koKQkJYmZpbl9yZWFkMzIoRU1BQ19UWF9TVEtZKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhfU1RLWSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWF9TVEtZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYX0lSUUUoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWF9JUlFFKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhfSVJRRSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWF9JUlFFLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfTU1DX0NUTCgpCQliZmluX3JlYWQzMihFTUFDX01NQ19DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19NTUNfQ1RMKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX01NQ19DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfTU1DX1JJUlFTKCkJCWJmaW5fcmVhZDMyKEVNQUNfTU1DX1JJUlFTKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfTU1DX1JJUlFTKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX01NQ19SSVJRUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19NTUNfUklSUUUoKQkJYmZpbl9yZWFkMzIoRU1BQ19NTUNfUklSUUUpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19NTUNfUklSUUUodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfTU1DX1JJUlFFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX01NQ19USVJRUygpCQliZmluX3JlYWQzMihFTUFDX01NQ19USVJRUykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX01NQ19USVJRUyh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19NTUNfVElSUVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfTU1DX1RJUlFFKCkJCWJmaW5fcmVhZDMyKEVNQUNfTU1DX1RJUlFFKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfTU1DX1RJUlFFKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX01NQ19USVJRRSwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19PSygpCQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfT0spCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfT0sodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX09LLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19GQ1MoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfRkNTKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX0ZDUyh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfRkNTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19BTElHTigpCQliZmluX3JlYWQzMihFTUFDX1JYQ19BTElHTikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19BTElHTih2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfQUxJR04sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX09DVEVUKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX09DVEVUKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX09DVEVUKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19PQ1RFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfRE1BT1ZGKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0RNQU9WRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19ETUFPVkYodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX0RNQU9WRiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfVU5JQ1NUKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX1VOSUNTVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19VTklDU1QodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX1VOSUNTVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfTVVMVEkoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfTVVMVEkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfTVVMVEkodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX01VTFRJLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19CUk9BRCgpCQliZmluX3JlYWQzMihFTUFDX1JYQ19CUk9BRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19CUk9BRCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfQlJPQUQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX0xORVJSSSgpCQliZmluX3JlYWQzMihFTUFDX1JYQ19MTkVSUkkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfTE5FUlJJKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19MTkVSUkksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX0xORVJSTygpCQliZmluX3JlYWQzMihFTUFDX1JYQ19MTkVSUk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfTE5FUlJPKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19MTkVSUk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX0xPTkcoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfTE9ORykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19MT05HKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19MT05HLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19NQUNDVEwoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfTUFDQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX01BQ0NUTCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfTUFDQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19PUENPREUoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfT1BDT0RFKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX09QQ09ERSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfT1BDT0RFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19QQVVTRSgpCQliZmluX3JlYWQzMihFTUFDX1JYQ19QQVVTRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19QQVVTRSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfUEFVU0UsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX0FMTEZSTSgpCQliZmluX3JlYWQzMihFTUFDX1JYQ19BTExGUk0pCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfQUxMRlJNKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19BTExGUk0sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX0FMTE9DVCgpCQliZmluX3JlYWQzMihFTUFDX1JYQ19BTExPQ1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfQUxMT0NUKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19BTExPQ1QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX1RZUEVEKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX1RZUEVEKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX1RZUEVEKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19UWVBFRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfU0hPUlQoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfU0hPUlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfU0hPUlQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX1NIT1JULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19FUTY0KCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0VRNjQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfRVE2NCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfRVE2NCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfTFQxMjgoKQkJYmZpbl9yZWFkMzIoRU1BQ19SWENfTFQxMjgpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfTFQxMjgodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX0xUMTI4LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19MVDI1NigpCQliZmluX3JlYWQzMihFTUFDX1JYQ19MVDI1NikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19MVDI1Nih2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19SWENfTFQyNTYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUlhDX0xUNTEyKCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0xUNTEyKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUlhDX0xUNTEyKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1JYQ19MVDUxMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfTFQxMDI0KCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0xUMTAyNCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19MVDEwMjQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX0xUMTAyNCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfR0UxMDI0KCkJCWJmaW5fcmVhZDMyKEVNQUNfUlhDX0dFMTAyNCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19HRTEwMjQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfUlhDX0dFMTAyNCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19PSygpCQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfT0spCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfT0sodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX09LLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ18xQ09MKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDXzFDT0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfMUNPTCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfMUNPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfR1QxQ09MKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0dUMUNPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19HVDFDT0wodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0dUMUNPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfT0NURVQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfT0NURVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfT0NURVQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX09DVEVULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19ERUZFUigpCQliZmluX3JlYWQzMihFTUFDX1RYQ19ERUZFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19ERUZFUih2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfREVGRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0xBVEVDTCgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19MQVRFQ0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfTEFURUNMKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19MQVRFQ0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX1hTX0NPTCgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19YU19DT0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfWFNfQ09MKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19YU19DT0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0RNQVVORCgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19ETUFVTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfRE1BVU5EKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19ETUFVTkQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0NSU0VSUigpCQliZmluX3JlYWQzMihFTUFDX1RYQ19DUlNFUlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfQ1JTRVJSKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19DUlNFUlIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX1VOSUNTVCgpCQliZmluX3JlYWQzMihFTUFDX1RYQ19VTklDU1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfVU5JQ1NUKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19VTklDU1QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX01VTFRJKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX01VTFRJKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX01VTFRJKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19NVUxUSSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfQlJPQUQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfQlJPQUQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfQlJPQUQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0JST0FELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19YU19ERlIoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfWFNfREZSKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX1hTX0RGUih2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfWFNfREZSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19NQUNDVEwoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfTUFDQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX01BQ0NUTCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfTUFDQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19BTExGUk0oKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfQUxMRlJNKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX0FMTEZSTSh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfQUxMRlJNLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19BTExPQ1QoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfQUxMT0NUKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX0FMTE9DVCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfQUxMT0NULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19FUTY0KCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0VRNjQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfRVE2NCh2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfRVE2NCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfTFQxMjgoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfTFQxMjgpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfTFQxMjgodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0xUMTI4LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1RYQ19MVDI1NigpCQliZmluX3JlYWQzMihFTUFDX1RYQ19MVDI1NikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19MVDI1Nih2YWwpCQliZmluX3dyaXRlMzIoRU1BQ19UWENfTFQyNTYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfVFhDX0xUNTEyKCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0xUNTEyKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfVFhDX0xUNTEyKHZhbCkJCWJmaW5fd3JpdGUzMihFTUFDX1RYQ19MVDUxMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfTFQxMDI0KCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0xUMTAyNCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19MVDEwMjQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0xUMTAyNCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfR0UxMDI0KCkJCWJmaW5fcmVhZDMyKEVNQUNfVFhDX0dFMTAyNCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1RYQ19HRTEwMjQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0dFMTAyNCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfQUJPUlQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfQUJPUlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfQUJPUlQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0FCT1JULCB2YWwpCisKKy8qIFVTQiBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRkFERFIoKQkJCWJmaW5fcmVhZDE2KFVTQl9GQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRkFERFIodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9GQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1BPV0VSKCkJCQliZmluX3JlYWQxNihVU0JfUE9XRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1BPV0VSKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUE9XRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVFgoKQkJCWJmaW5fcmVhZDE2KFVTQl9JTlRSVFgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOVFJUWCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0lOVFJUWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJSWCgpCQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJSWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlJYKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfSU5UUlJYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5UUlRYRSgpCQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJUWEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOVFJUWEUodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9JTlRSVFhFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5UUlJYRSgpCQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJSWEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOVFJSWEUodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9JTlRSUlhFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5UUlVTQigpCQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJVU0IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOVFJVU0IodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9JTlRSVVNCLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5UUlVTQkUoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJVU0JFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSVVNCRSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0lOVFJVU0JFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRlJBTUUoKQkJCWJmaW5fcmVhZDE2KFVTQl9GUkFNRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRlJBTUUodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9GUkFNRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOREVYKCkJCQliZmluX3JlYWQxNihVU0JfSU5ERVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOREVYKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfSU5ERVgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9URVNUTU9ERSgpCQliZmluX3JlYWQxNihVU0JfVEVTVE1PREUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RFU1RNT0RFKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfVEVTVE1PREUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9HTE9CSU5UUigpCQliZmluX3JlYWQxNihVU0JfR0xPQklOVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0dMT0JJTlRSKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfR0xPQklOVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9HTE9CQUxfQ1RMKCkJCWJmaW5fcmVhZDE2KFVTQl9HTE9CQUxfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9HTE9CQUxfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfR0xPQkFMX0NUTCwgdmFsKQorCisvKiBVU0IgUGFja2V0IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWF9NQVhfUEFDS0VUKCkJCWJmaW5fcmVhZDE2KFVTQl9UWF9NQVhfUEFDS0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWF9NQVhfUEFDS0VUKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9UWF9NQVhfUEFDS0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfQ1NSMCgpCQkJYmZpbl9yZWFkMTYoVVNCX0NTUjApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0NTUjAodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9DU1IwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhDU1IoKQkJCWJmaW5fcmVhZDE2KFVTQl9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhDU1IodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1JYX01BWF9QQUNLRVQoKQkJYmZpbl9yZWFkMTYoVVNCX1JYX01BWF9QQUNLRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYX01BWF9QQUNLRVQodmFsKQliZmluX3dyaXRlMTYoVVNCX1JYX01BWF9QQUNLRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWENTUigpCQkJYmZpbl9yZWFkMTYoVVNCX1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWENTUih2YWwpCQliZmluX3dyaXRlMTYoVVNCX1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfQ09VTlQwKCkJCQliZmluX3JlYWQxNihVU0JfQ09VTlQwKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9DT1VOVDAodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9DT1VOVDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWENPVU5UKCkJCQliZmluX3JlYWQxNihVU0JfUlhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWFRZUEUoKQkJCWJmaW5fcmVhZDE2KFVTQl9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYVFlQRSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1RYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX05BS0xJTUlUMCgpCQliZmluX3JlYWQxNihVU0JfTkFLTElNSVQwKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9OQUtMSU1JVDAodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9OQUtMSU1JVDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWElOVEVSVkFMKCkJCWJmaW5fcmVhZDE2KFVTQl9UWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWElOVEVSVkFMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1JYVFlQRSgpCQkJYmZpbl9yZWFkMTYoVVNCX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhUWVBFKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUlhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhJTlRFUlZBTCgpCQliZmluX3JlYWQxNihVU0JfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhJTlRFUlZBTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1JYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWENPVU5UKCkJCQliZmluX3JlYWQxNihVU0JfVFhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1RYQ09VTlQsIHZhbCkKKworLyogVVNCIEVuZHBvaW50IEZJRk8gUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDBfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVAwX0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQMF9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVAwX0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDFfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVAxX0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQMV9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVAxX0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDJfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVAyX0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQMl9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVAyX0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDNfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVAzX0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQM19GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVAzX0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDRfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVA0X0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQNF9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVA0X0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDVfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVA1X0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQNV9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVA1X0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDZfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVA2X0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQNl9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVA2X0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDdfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVA3X0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQN19GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVA3X0ZJRk8sIHZhbCkKKworLyogVVNCIE9URyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfT1RHX0RFVl9DVEwoKQkJYmZpbl9yZWFkMTYoVVNCX09UR19ERVZfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9PVEdfREVWX0NUTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX09UR19ERVZfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfT1RHX1ZCVVNfSVJRKCkJCWJmaW5fcmVhZDE2KFVTQl9PVEdfVkJVU19JUlEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX09UR19WQlVTX0lSUSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfT1RHX1ZCVVNfSVJRLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfT1RHX1ZCVVNfTUFTSygpCQliZmluX3JlYWQxNihVU0JfT1RHX1ZCVVNfTUFTSykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfT1RHX1ZCVVNfTUFTSyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfT1RHX1ZCVVNfTUFTSywgdmFsKQorCisvKiBVU0IgUGh5IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9MSU5LSU5GTygpCQliZmluX3JlYWQxNihVU0JfTElOS0lORk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0xJTktJTkZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfTElOS0lORk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9WUExFTigpCQkJYmZpbl9yZWFkMTYoVVNCX1ZQTEVOKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9WUExFTih2YWwpCQliZmluX3dyaXRlMTYoVVNCX1ZQTEVOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfSFNfRU9GMSgpCQkJYmZpbl9yZWFkMTYoVVNCX0hTX0VPRjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0hTX0VPRjEodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9IU19FT0YxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRlNfRU9GMSgpCQkJYmZpbl9yZWFkMTYoVVNCX0ZTX0VPRjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0ZTX0VPRjEodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9GU19FT0YxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfTFNfRU9GMSgpCQkJYmZpbl9yZWFkMTYoVVNCX0xTX0VPRjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0xTX0VPRjEodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9MU19FT0YxLCB2YWwpCisKKy8qIChBUEhZX0NOVFJMIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0FQSFlfQ05UUkwoKQkJYmZpbl9yZWFkMTYoVVNCX0FQSFlfQ05UUkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0FQSFlfQ05UUkwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9BUEhZX0NOVFJMLCB2YWwpCisKKy8qIChBUEhZX0NBTElCIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0FQSFlfQ0FMSUIoKQkJYmZpbl9yZWFkMTYoVVNCX0FQSFlfQ0FMSUIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0FQSFlfQ0FMSUIodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9BUEhZX0NBTElCLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9BUEhZX0NOVFJMMigpCQliZmluX3JlYWQxNihVU0JfQVBIWV9DTlRSTDIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0FQSFlfQ05UUkwyKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQVBIWV9DTlRSTDIsIHZhbCkKKworLyogKFBIWV9URVNUIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX1BIWV9URVNUKCkJCWJmaW5fcmVhZDE2KFVTQl9QSFlfVEVTVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUEhZX1RFU1QodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9QSFlfVEVTVCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUExMT1NDX0NUUkwoKQkJYmZpbl9yZWFkMTYoVVNCX1BMTE9TQ19DVFJMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QTExPU0NfQ1RSTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1BMTE9TQ19DVFJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfU1JQX0NMS0RJVigpCQliZmluX3JlYWQxNihVU0JfU1JQX0NMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfU1JQX0NMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoVVNCX1NSUF9DTEtESVYsIHZhbCkKKworLyogVVNCIEVuZHBvaW50IDAgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYQ09VTlQsIHZhbCkKKworLyogVVNCIEVuZHBvaW50IDEgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYQ09VTlQsIHZhbCkKKworLyogVVNCIEVuZHBvaW50IDIgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1RYQ09VTlQsIHZhbCkKKworLyogVVNCIEVuZHBvaW50IDMgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYQ09VTlQsIHZhbCkKKworLyogVVNCIEVuZHBvaW50IDQgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYQ09VTlQsIHZhbCkKKworLyogVVNCIEVuZHBvaW50IDUgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1RYQ09VTlQsIHZhbCkKKworLyogVVNCIEVuZHBvaW50IDYgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYQ09VTlQsIHZhbCkKKworLyogVVNCIEVuZHBvaW50IDcgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYQ09VTlQsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQV9JTlRFUlJVUFQoKQkJYmZpbl9yZWFkMTYoVVNCX0RNQV9JTlRFUlJVUFQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQV9JTlRFUlJVUFQodmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQV9JTlRFUlJVUFQsIHZhbCkKKworLyogVVNCIENoYW5uZWwgMCBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEwQ09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BMENPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMENPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEwQUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMEFERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMEFERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEwQUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMEFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEwQ09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMENPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQ09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEwQ09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQ09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQ09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQ09VTlRISUdILCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDEgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMUNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTFDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMUFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTFBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMUFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMUFERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMUNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQ09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMUNPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMUNPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMUNPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUNPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMUNPVU5USElHSCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCAyIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTJDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkNPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEyQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTJBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEyQUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTJBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMkFERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTJBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTJDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMkNPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTJDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTJDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTJDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgMyBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEzQ09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BM0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BM0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEzQUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BM0FERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BM0FERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEzQUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0FERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEzQ09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0NPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQ09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEzQ09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQ09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQ09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQ09VTlRISUdILCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDQgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNENPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0Q09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTRDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNEFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0QUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTRBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNEFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0QUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNEFERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNENPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0Q09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNENPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNENPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNENPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNENPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNENPVU5USElHSCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCA1IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1Q09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNUNPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE1Q09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1QUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNUFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE1QUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNUFERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1QUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTVBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNUNPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1Q09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTVDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTVDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTVDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgNiBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BNkNPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNkNPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNkFERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNkFERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE2QUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2Q09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkNPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE2Q09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE2Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2Q09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE2Q09VTlRISUdILCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDcgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0NPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3Q09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTdDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0FERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3QUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTdBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0FERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3QUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BN0FERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0NPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3Q09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BN0NPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BN0NPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BN0NPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0NPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BN0NPVU5USElHSCwgdmFsKQorCisjZW5kaWYgLyogX0NERUZfQkY1MjdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmQkY1MnhfYmFzZS5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmQkY1MnhfYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmODAxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZCRjUyeF9iYXNlLmgKQEAgLTAsMCArMSwxMTg3IEBACisvKgorICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZCRjUyeF9iYXNlLmgKKyAqIEJhc2VkIG9uOgorICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6CisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBSZXY6CisgKgorICogTW9kaWZpZWQ6CisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfQ0RFRl9CRjUyWF9ICisKKyNpbmNsdWRlICJkZWZCRjUyeF9iYXNlLmgiCisKKy8qID09PT0gYmVnaW4gZnJvbSBjZGVmQkY1MzQuaCA9PT09ICovCisKKy8qIENsb2NrIGFuZCBTeXN0ZW0gQ29udHJvbAkoMHhGRkMwMDAwMCAtIDB4RkZDMDAwRkYpCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfUExMX0NUTCgpCQkJYmZpbl9yZWFkMTYoUExMX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QTExfQ1RMKHZhbCkJCQliZmluX3dyaXRlMTYoUExMX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUExMX0RJVigpCQkJYmZpbl9yZWFkMTYoUExMX0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9QTExfRElWKHZhbCkJCQliZmluX3dyaXRlMTYoUExMX0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVlJfQ1RMKCkJCQliZmluX3JlYWQxNihWUl9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVlJfQ1RMKHZhbCkJCQliZmluX3dyaXRlMTYoVlJfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QTExfU1RBVCgpCQkJYmZpbl9yZWFkMTYoUExMX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUExMX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KFBMTF9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QTExfTE9DS0NOVCgpCQkJYmZpbl9yZWFkMTYoUExMX0xPQ0tDTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUExMX0xPQ0tDTlQodmFsKQkJYmZpbl93cml0ZTE2KFBMTF9MT0NLQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DSElQSUQoKQkJCWJmaW5fcmVhZDE2KENISVBJRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DSElQSUQodmFsKQkJCWJmaW5fd3JpdGUxNihDSElQSUQsIHZhbCkKKworCisvKiBTeXN0ZW0gSW50ZXJydXB0IENvbnRyb2xsZXIgKDB4RkZDMDAxMDAgLSAweEZGQzAwMUZGKQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfU1dSU1QoKQkJCWJmaW5fcmVhZDE2KFNXUlNUKQorI2RlZmluZSBiZmluX3dyaXRlX1NXUlNUKHZhbCkJCQliZmluX3dyaXRlMTYoU1dSU1QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NZU0NSKCkJCQliZmluX3JlYWQxNihTWVNDUikKKyNkZWZpbmUgYmZpbl93cml0ZV9TWVNDUih2YWwpCQkJYmZpbl93cml0ZTE2KFNZU0NSLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19SVkVDVCgpCQkJYmZpbl9yZWFkMzIoU0lDX1JWRUNUKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19SVkVDVCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX1JWRUNULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSU1BU0swKCkJCQliZmluX3JlYWQzMihTSUNfSU1BU0swKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSzAodmFsKQkJYmZpbl93cml0ZTMyKFNJQ19JTUFTSzAsIHZhbCkKKy8qIGxlZ2FjeSByZWdpc3RlciBuYW1lIChiZWxvdykgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb2RlIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JTUFTSygpCQkJYmZpbl9yZWFkMzIoU0lDX0lNQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSyh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lNQVNLLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIwKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMCh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIxKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIyKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMih2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIzKCkJCQliZmluX3JlYWQzMihTSUNfSUFSMykKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMyh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lBUjMsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfU0lDX0lTUjAoKQkJCWJmaW5fcmVhZDMyKFNJQ19JU1IwKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JU1IwKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSVNSMCwgdmFsKQorLyogbGVnYWN5IHJlZ2lzdGVyIG5hbWUgKGJlbG93KSBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvZGUgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBiZmluX3JlYWRfU0lDX0lTUigpCQkJYmZpbl9yZWFkMzIoU0lDX0lTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVNSKHZhbCkJCQliZmluX3dyaXRlMzIoU0lDX0lTUiwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSVdSMCgpCQkJYmZpbl9yZWFkMzIoU0lDX0lXUjApCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lXUjAodmFsKQkJYmZpbl93cml0ZTMyKFNJQ19JV1IwLCB2YWwpCisvKiBsZWdhY3kgcmVnaXN0ZXIgbmFtZSAoYmVsb3cpIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29kZSBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSVdSKCkJCQliZmluX3JlYWQzMihTSUNfSVdSKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JV1IodmFsKQkJCWJmaW5fd3JpdGUzMihTSUNfSVdSLCB2YWwpCisKKy8qIFNJQyBBZGRpdGlvbnMgdG8gQURTUC1CRjUyeCAoMHhGRkMwMDE0QyAtIDB4RkZDMDAxNjIpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JTUFTSzEoKQkJCWJmaW5fcmVhZDMyKFNJQ19JTUFTSzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lNQVNLMSh2YWwpCQliZmluX3dyaXRlMzIoU0lDX0lNQVNLMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjQoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVI0KQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVI0KHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSNCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjUoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVI1KQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVI1KHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSNSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjYoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVI2KQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVI2KHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSNiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjcoKQkJCWJmaW5fcmVhZDMyKFNJQ19JQVI3KQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVI3KHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSUFSNywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lTUjEoKQkJCWJmaW5fcmVhZDMyKFNJQ19JU1IxKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JU1IxKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSVNSMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lXUjEoKQkJCWJmaW5fcmVhZDMyKFNJQ19JV1IxKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JV1IxKHZhbCkJCWJmaW5fd3JpdGUzMihTSUNfSVdSMSwgdmFsKQorCisvKiBXYXRjaGRvZyBUaW1lcgkJKDB4RkZDMDAyMDAgLSAweEZGQzAwMkZGKQkJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9XRE9HX0NUTCgpCQkJYmZpbl9yZWFkMTYoV0RPR19DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfV0RPR19DVEwodmFsKQkJYmZpbl93cml0ZTE2KFdET0dfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9XRE9HX0NOVCgpCQkJYmZpbl9yZWFkMzIoV0RPR19DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfV0RPR19DTlQodmFsKQkJYmZpbl93cml0ZTMyKFdET0dfQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9XRE9HX1NUQVQoKQkJCWJmaW5fcmVhZDMyKFdET0dfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9XRE9HX1NUQVQodmFsKQkJYmZpbl93cml0ZTMyKFdET0dfU1RBVCwgdmFsKQorCisKKy8qIFJlYWwgVGltZSBDbG9jawkJKDB4RkZDMDAzMDAgLSAweEZGQzAwM0ZGKQkJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfU1RBVCgpCQkJYmZpbl9yZWFkMzIoUlRDX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX1NUQVQodmFsKQkJYmZpbl93cml0ZTMyKFJUQ19TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfSUNUTCgpCQkJYmZpbl9yZWFkMTYoUlRDX0lDVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX0lDVEwodmFsKQkJYmZpbl93cml0ZTE2KFJUQ19JQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfSVNUQVQoKQkJCWJmaW5fcmVhZDE2KFJUQ19JU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SVENfSVNUQVQodmFsKQkJYmZpbl93cml0ZTE2KFJUQ19JU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlRDX1NXQ05UKCkJCQliZmluX3JlYWQxNihSVENfU1dDTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX1NXQ05UKHZhbCkJCWJmaW5fd3JpdGUxNihSVENfU1dDTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JUQ19BTEFSTSgpCQkJYmZpbl9yZWFkMzIoUlRDX0FMQVJNKQorI2RlZmluZSBiZmluX3dyaXRlX1JUQ19BTEFSTSh2YWwpCQliZmluX3dyaXRlMzIoUlRDX0FMQVJNLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfRkFTVCgpCQkJYmZpbl9yZWFkMTYoUlRDX0ZBU1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX0ZBU1QodmFsKQkJYmZpbl93cml0ZTE2KFJUQ19GQVNULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfUFJFTigpCQkJYmZpbl9yZWFkMTYoUlRDX1BSRU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX1BSRU4odmFsKQkJYmZpbl93cml0ZTE2KFJUQ19QUkVOLCB2YWwpCisKKworLyogVUFSVDAgQ29udHJvbGxlcgkJKDB4RkZDMDA0MDAgLSAweEZGQzAwNEZGKQkJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9USFIoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX1RIUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9USFIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX1RIUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfUkJSKCkJCQliZmluX3JlYWQxNihVQVJUMF9SQlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfUkJSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9SQlIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0RMTCgpCQkJYmZpbl9yZWFkMTYoVUFSVDBfRExMKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0RMTCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfRExMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9JRVIoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0lFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9JRVIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0lFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfRExIKCkJCQliZmluX3JlYWQxNihVQVJUMF9ETEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfRExIKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9ETEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0lJUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfSUlSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0lJUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfSUlSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9MQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0xDUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9MQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX0xDUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfTUNSKCkJCQliZmluX3JlYWQxNihVQVJUMF9NQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfTUNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9NQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0xTUigpCQkJYmZpbl9yZWFkMTYoVUFSVDBfTFNSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0xTUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfTFNSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9NU1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX01TUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9NU1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQwX01TUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfU0NSKCkJCQliZmluX3JlYWQxNihVQVJUMF9TQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfU0NSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMF9TQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0dDVEwoKQkJCWJmaW5fcmVhZDE2KFVBUlQwX0dDVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfR0NUTCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDBfR0NUTCwgdmFsKQorCisKKy8qIFNQSSBDb250cm9sbGVyCQkoMHhGRkMwMDUwMCAtIDB4RkZDMDA1RkYpCQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1NQSV9DVEwoKQkJCWJmaW5fcmVhZDE2KFNQSV9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJX0NUTCh2YWwpCQkJYmZpbl93cml0ZTE2KFNQSV9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSV9GTEcoKQkJCWJmaW5fcmVhZDE2KFNQSV9GTEcpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJX0ZMRyh2YWwpCQkJYmZpbl93cml0ZTE2KFNQSV9GTEcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSV9TVEFUKCkJCQliZmluX3JlYWQxNihTUElfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUElfU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoU1BJX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSV9UREJSKCkJCQliZmluX3JlYWQxNihTUElfVERCUikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUElfVERCUih2YWwpCQliZmluX3dyaXRlMTYoU1BJX1REQlIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSV9SREJSKCkJCQliZmluX3JlYWQxNihTUElfUkRCUikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUElfUkRCUih2YWwpCQliZmluX3dyaXRlMTYoU1BJX1JEQlIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSV9CQVVEKCkJCQliZmluX3JlYWQxNihTUElfQkFVRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUElfQkFVRCh2YWwpCQliZmluX3dyaXRlMTYoU1BJX0JBVUQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSV9TSEFET1coKQkJCWJmaW5fcmVhZDE2KFNQSV9TSEFET1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJX1NIQURPVyh2YWwpCQliZmluX3dyaXRlMTYoU1BJX1NIQURPVywgdmFsKQorCisKKy8qIFRJTUVSMC03IFJlZ2lzdGVycwkJKDB4RkZDMDA2MDAgLSAweEZGQzAwNkZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVIwX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjBfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjBfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjBfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVIwX0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMF9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVIwX1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjBfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjBfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVIwX1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMF9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIwX1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMV9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVIxX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjFfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjFfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjFfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjFfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVIxX0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMV9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVIxX1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjFfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjFfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjFfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVIxX1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMV9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIxX1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMl9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVIyX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjJfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjJfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVIyX0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMl9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVIyX1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjJfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVIyX1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMl9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIyX1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSM19DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVIzX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjNfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjNfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjNfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjNfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVIzX0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSM19QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVIzX1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjNfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjNfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVIzX1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSM19XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIzX1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI0X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjRfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjRfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjRfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjRfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjRfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI0X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNF9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI0X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjRfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjRfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjRfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI0X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSNF9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI0X1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNV9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI1X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjVfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjVfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI1X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNV9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI1X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjVfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI1X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSNV9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI1X1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNl9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI2X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjZfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjZfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjZfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjZfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI2X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNl9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI2X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjZfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjZfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI2X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSNl9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI2X1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSN19DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI3X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjdfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjdfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjdfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjdfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjdfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI3X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSN19QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI3X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjdfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjdfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjdfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI3X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSN19XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI3X1dJRFRILCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX0VOQUJMRSgpCQliZmluX3JlYWQxNihUSU1FUl9FTkFCTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfRU5BQkxFKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUl9FTkFCTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX0RJU0FCTEUoKQkJYmZpbl9yZWFkMTYoVElNRVJfRElTQUJMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9ESVNBQkxFKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUl9ESVNBQkxFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9TVEFUVVMoKQkJYmZpbl9yZWFkMzIoVElNRVJfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMzIoVElNRVJfU1RBVFVTLCB2YWwpCisKKworLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBQb3J0IEYgKDB4RkZDMDA3MDAgLSAweEZGQzAwN0ZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU8oKQkJCWJmaW5fcmVhZDE2KFBPUlRGSU8pCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJTyh2YWwpCQkJYmZpbl93cml0ZTE2KFBPUlRGSU8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX0NMRUFSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX1NFVCgpCQkJYmZpbl9yZWFkMTYoUE9SVEZJT19TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19TRVQodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX1RPR0dMRSgpCQliZmluX3JlYWQxNihQT1JURklPX1RPR0dMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX1RPR0dMRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZJT19UT0dHTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0EoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tBKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tBLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tBX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0FfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19NQVNLQV9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tBX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tBX1NFVCgpCQliZmluX3JlYWQxNihQT1JURklPX01BU0tBX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tBX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tBX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQV9UT0dHTEUoKQliZmluX3JlYWQxNihQT1JURklPX01BU0tBX1RPR0dMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tBX1RPR0dMRSh2YWwpCWJmaW5fd3JpdGUxNihQT1JURklPX01BU0tBX1RPR0dMRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19NQVNLQigpCQliZmluX3JlYWQxNihQT1JURklPX01BU0tCKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fTUFTS0IodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fTUFTS0IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0JfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEZJT19NQVNLQl9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX01BU0tCX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRGSU9fTUFTS0JfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGSU9fTUFTS0JfU0VUKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0JfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fTUFTS0JfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRGSU9fTUFTS0JfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX01BU0tCX1RPR0dMRSgpCWJmaW5fcmVhZDE2KFBPUlRGSU9fTUFTS0JfVE9HR0xFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGSU9fTUFTS0JfVE9HR0xFKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRGSU9fTUFTS0JfVE9HR0xFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX0RJUigpCQkJYmZpbl9yZWFkMTYoUE9SVEZJT19ESVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19ESVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fRElSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURklPX1BPTEFSKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fUE9MQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZJT19QT0xBUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZJT19QT0xBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19FREdFKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fRURHRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX0VER0UodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fRURHRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19CT1RIKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fQk9USCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX0JPVEgodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fQk9USCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZJT19JTkVOKCkJCWJmaW5fcmVhZDE2KFBPUlRGSU9fSU5FTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURklPX0lORU4odmFsKQkJYmZpbl93cml0ZTE2KFBPUlRGSU9fSU5FTiwgdmFsKQorCisKKy8qIFNQT1JUMCBDb250cm9sbGVyCQkoMHhGRkMwMDgwMCAtIDB4RkZDMDA4RkYpCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RDUjEoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ1IxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ1IxKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfVENSMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RDUjIoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ1IyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ1IyKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfVENSMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RDTEtESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1RDTEtESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RDTEtESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9UQ0xLRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfVEZTRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9URlNESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RGU0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RGU0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RYKCkJCQliZmluX3JlYWQzMihTUE9SVDBfVFgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RYKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDBfVFgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SWCgpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1JYKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SWCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX1JYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfVFgzMigpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1RYMzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RYMzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9UWDMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUlgzMigpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1JYMzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JYMzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9SWDMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfVFgxNigpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1RYMTYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RYMTYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9UWDE2LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUlgxNigpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JYMTYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JYMTYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SWDE2LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNSMSgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDUjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDUjEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SQ1IxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNSMigpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDUjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDUjIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SQ1IyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNMS0RJVigpCQliZmluX3JlYWQxNihTUE9SVDBfUkNMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkNMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1JDTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SRlNESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JGU0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkZTRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfUkZTRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfU1RBVCgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfQ0hOTCgpCQkJYmZpbl9yZWFkMTYoU1BPUlQwX0NITkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX0NITkwodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9DSE5MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTUNNQzEoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX01DTUMxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NQ01DMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX01DTUMxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTUNNQzIoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX01DTUMyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NQ01DMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX01DTUMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzAoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MwKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzEoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMSh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzIoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzMoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MzKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMyh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzAoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MwKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzEoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMSh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzIoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzMoKQkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MzKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMyh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MzLCB2YWwpCisKKworLyogU1BPUlQxIENvbnRyb2xsZXIJCSgweEZGQzAwOTAwIC0gMHhGRkMwMDlGRikJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENSMSgpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RDUjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RDUjEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9UQ1IxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENSMigpCQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RDUjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RDUjIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9UQ1IyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENMS0RJVigpCQliZmluX3JlYWQxNihTUE9SVDFfVENMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVENMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1RDTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9URlNESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQxX1RGU0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVEZTRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfVEZTRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVFgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMV9UWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVFgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMV9UWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JYKCkJCQliZmluX3JlYWQzMihTUE9SVDFfUlgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JYKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfUlgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9UWDMyKCkJCQliZmluX3JlYWQzMihTUE9SVDFfVFgzMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVFgzMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX1RYMzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9SWDMyKCkJCQliZmluX3JlYWQzMihTUE9SVDFfUlgzMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUlgzMih2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQxX1JYMzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9UWDE2KCkJCQliZmluX3JlYWQxNihTUE9SVDFfVFgxNikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVFgxNih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1RYMTYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9SWDE2KCkJCQliZmluX3JlYWQxNihTUE9SVDFfUlgxNikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUlgxNih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1JYMTYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9SQ1IxKCkJCQliZmluX3JlYWQxNihTUE9SVDFfUkNSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUkNSMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1JDUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9SQ1IyKCkJCQliZmluX3JlYWQxNihTUE9SVDFfUkNSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUkNSMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1JDUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9SQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9SQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfUkNMS0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JGU0RJVigpCQliZmluX3JlYWQxNihTUE9SVDFfUkZTRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9SRlNESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMV9SRlNESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9TVEFUKCkJCQliZmluX3JlYWQxNihTUE9SVDFfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9DSE5MKCkJCQliZmluX3JlYWQxNihTUE9SVDFfQ0hOTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfQ0hOTCh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQxX0NITkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NQ01DMSgpCQliZmluX3JlYWQxNihTUE9SVDFfTUNNQzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01DTUMxKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfTUNNQzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NQ01DMigpCQliZmluX3JlYWQxNihTUE9SVDFfTUNNQzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01DTUMyKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDFfTUNNQzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NVENTMCgpCQliZmluX3JlYWQzMihTUE9SVDFfTVRDUzApCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01UQ1MwKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfTVRDUzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NVENTMSgpCQliZmluX3JlYWQzMihTUE9SVDFfTVRDUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01UQ1MxKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfTVRDUzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NVENTMigpCQliZmluX3JlYWQzMihTUE9SVDFfTVRDUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01UQ1MyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfTVRDUzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NVENTMygpCQliZmluX3JlYWQzMihTUE9SVDFfTVRDUzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01UQ1MzKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfTVRDUzMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NUkNTMCgpCQliZmluX3JlYWQzMihTUE9SVDFfTVJDUzApCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01SQ1MwKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfTVJDUzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NUkNTMSgpCQliZmluX3JlYWQzMihTUE9SVDFfTVJDUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01SQ1MxKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfTVJDUzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NUkNTMigpCQliZmluX3JlYWQzMihTUE9SVDFfTVJDUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01SQ1MyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfTVJDUzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NUkNTMygpCQliZmluX3JlYWQzMihTUE9SVDFfTVJDUzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01SQ1MzKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDFfTVJDUzMsIHZhbCkKKworCisvKiBFeHRlcm5hbCBCdXMgSW50ZXJmYWNlIFVuaXQgKDB4RkZDMDBBMDAgLSAweEZGQzAwQUZGKQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfRUJJVV9BTUdDVEwoKQkJCWJmaW5fcmVhZDE2KEVCSVVfQU1HQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfQU1HQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihFQklVX0FNR0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9BTUJDVEwwKCkJCWJmaW5fcmVhZDMyKEVCSVVfQU1CQ1RMMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0FNQkNUTDAodmFsKQkJYmZpbl93cml0ZTMyKEVCSVVfQU1CQ1RMMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9BTUJDVEwxKCkJCWJmaW5fcmVhZDMyKEVCSVVfQU1CQ1RMMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0FNQkNUTDEodmFsKQkJYmZpbl93cml0ZTMyKEVCSVVfQU1CQ1RMMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9TREdDVEwoKQkJCWJmaW5fcmVhZDMyKEVCSVVfU0RHQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfU0RHQ1RMKHZhbCkJCWJmaW5fd3JpdGUzMihFQklVX1NER0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9TREJDVEwoKQkJCWJmaW5fcmVhZDE2KEVCSVVfU0RCQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfU0RCQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihFQklVX1NEQkNUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9TRFJSQygpCQkJYmZpbl9yZWFkMTYoRUJJVV9TRFJSQykKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX1NEUlJDKHZhbCkJCWJmaW5fd3JpdGUxNihFQklVX1NEUlJDLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX1NEU1RBVCgpCQkJYmZpbl9yZWFkMTYoRUJJVV9TRFNUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9TRFNUQVQodmFsKQkJYmZpbl93cml0ZTE2KEVCSVVfU0RTVEFULCB2YWwpCisKKworLyogRE1BIFRyYWZmaWMgQ29udHJvbCBSZWdpc3RlcnMJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX0RNQV9UQ19QRVIoKQkJCWJmaW5fcmVhZDE2KERNQV9UQ19QRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDX1BFUih2YWwpCQliZmluX3dyaXRlMTYoRE1BX1RDX1BFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BX1RDX0NOVCgpCQkJYmZpbl9yZWFkMTYoRE1BX1RDX0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUFfVENfQ05UKHZhbCkJCWJmaW5fd3JpdGUxNihETUFfVENfQ05ULCB2YWwpCisKKy8qIEFsdGVybmF0ZSBkZXByZWNhdGVkIHJlZ2lzdGVyIG5hbWVzIChiZWxvdykgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb2RlIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgYmZpbl9yZWFkX0RNQV9UQ1BFUigpCQkJYmZpbl9yZWFkMTYoRE1BX1RDUEVSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQV9UQ1BFUih2YWwpCQliZmluX3dyaXRlMTYoRE1BX1RDUEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFfVENDTlQoKQkJCWJmaW5fcmVhZDE2KERNQV9UQ0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUFfVENDTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQV9UQ0NOVCwgdmFsKQorCisvKiBETUEgQ29udHJvbGxlcgkJCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUEwX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEwX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTBfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTBfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTBfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTBfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTBfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTBfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTBfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUEwX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTBfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUEwX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUEwX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTBfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUEwX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMF9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTBfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTBfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMF9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTBfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUEwX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUExX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUExX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTFfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTFfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTFfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTFfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTFfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTFfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTFfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUExX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUExX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUExX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMV9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMV9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTFfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTFfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMV9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTFfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUExX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUEyX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEyX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTJfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTJfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTJfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTJfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUEyX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTJfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMl9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMl9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUEyX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTJfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUEyX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMl9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMl9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTJfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTJfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMl9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMl9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTJfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUEyX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUEzX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUEzX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTNfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTNfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTNfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTNfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTNfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTNfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTNfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19YX01PRElGWSgpCQliZmluX3JlYWQxNihETUEzX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTNfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BM19ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUEzX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BM19DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUEzX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTNfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUEzX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BM19DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BM19DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTNfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTNfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BM19JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BM19JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTNfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUEzX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE0X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE0X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTRfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTRfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTRfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTRfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTRfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTRfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTRfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE0X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTRfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BNF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE0X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BNF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE0X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTRfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE0X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNF9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTRfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTRfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BNF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNF9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTRfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE0X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE1X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE1X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTVfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTVfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTVfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTVfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTVfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTVfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTVfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE1X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTVfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BNV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE1X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BNV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE1X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTVfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE1X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNV9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNV9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTVfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTVfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BNV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNV9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTVfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE1X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE2X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE2X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTZfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTZfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTZfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTZfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTZfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTZfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTZfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE2X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTZfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BNl9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE2X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BNl9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE2X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTZfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE2X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BNl9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BNl9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTZfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTZfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BNl9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BNl9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTZfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE2X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE3X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE3X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTdfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTdfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTdfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTdfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTdfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTdfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTdfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE3X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTdfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BN19ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE3X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BN19DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE3X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTdfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE3X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BN19DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BN19DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTdfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTdfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BN19JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BN19JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTdfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE3X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE4X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE4X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQThfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQThfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQThfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQThfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQThfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQThfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQThfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE4X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQThfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BOF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE4X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BOF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE4X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQThfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE4X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BOF9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQThfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQThfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BOF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BOF9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQThfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE4X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUE5X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfTkVYVF9ERVNDX1BUUigpCQliZmluX3JlYWQzMihETUE5X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTlfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTlfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1NUQVJUX0FERFIodmFsKQkJYmZpbl93cml0ZTMyKERNQTlfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTlfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTlfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTlfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTlfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE5X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTlfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BOV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1lfTU9ESUZZKHZhbCkJCWJmaW5fd3JpdGUxNihETUE5X1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BOV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihETUE5X0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKERNQTlfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUE5X0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BOV9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BOV9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTlfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTlfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BOV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BOV9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KERNQTlfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUE5X1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0NPTkZJRygpCQliZmluX3JlYWQxNihETUExMF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX05FWFRfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMTBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTEwX05FWFRfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMTBfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9TVEFSVF9BRERSKHZhbCkJYmZpbl93cml0ZTMyKERNQTEwX1NUQVJUX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTBfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMF9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTEwX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTBfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMTBfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTEwX1hfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9ZX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTBfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMTBfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTEwX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0NVUlJfQUREUigpCQliZmluX3JlYWQzMihETUExMF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUExMF9DVVJSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTEwX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTEwX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTBfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KERNQTEwX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihETUExMF9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KERNQTEwX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTEwX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0NPTkZJRygpCQliZmluX3JlYWQxNihETUExMV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX05FWFRfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMTFfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTExX05FWFRfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoRE1BMTFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9TVEFSVF9BRERSKHZhbCkJYmZpbl93cml0ZTMyKERNQTExX1NUQVJUX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTFfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTExX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTFfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMTFfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfWF9NT0RJRlkodmFsKQkJYmZpbl93cml0ZTE2KERNQTExX1hfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9ZX01PRElGWSh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTFfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0NVUlJfREVTQ19QVFIoKQkJYmZpbl9yZWFkMzIoRE1BMTFfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKERNQTExX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0NVUlJfQUREUigpCQliZmluX3JlYWQzMihETUExMV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfQ1VSUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUzMihETUExMV9DVVJSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMV9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTExX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTExX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTFfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KERNQTExX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihETUExMV9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KERNQTExX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTExX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QwX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ORVhUX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9EMF9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfTkVYVF9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX0QwX05FWFRfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihNRE1BX0QwX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9TVEFSVF9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDBfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDBfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDBfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9YX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX0QwX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWF9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX0QwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWV9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9ZX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9EMF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX0QwX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfRDBfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDBfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NVUlJfWF9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfRDBfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDBfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0NVUlJfWV9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfRDBfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDBfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihNRE1BX0QwX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9QRVJJUEhFUkFMX01BUCwgdmFsKQorCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NPTkZJRygpCQliZmluX3JlYWQxNihNRE1BX1MwX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfTkVYVF9ERVNDX1BUUigpCWJmaW5fcmVhZDMyKE1ETUFfUzBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX05FWFRfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9TMF9ORVhUX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1NUQVJUX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9TMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfU1RBUlRfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MwX1NUQVJUX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWF9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX1MwX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX1MwX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWV9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX1MwX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX1MwX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9TMF9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1hfTU9ESUZZKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfWF9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9TMF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1lfTU9ESUZZKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfWV9NT0RJRlksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ1VSUl9ERVNDX1BUUigpCWJmaW5fcmVhZDMyKE1ETUFfUzBfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfREVTQ19QVFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9TMF9DVVJSX0RFU0NfUFRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0NVUlJfQUREUigpCQliZmluX3JlYWQzMihNRE1BX1MwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MwX0NVUlJfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX1hfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX1MwX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MwX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX1lfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX1MwX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MwX0NVUlJfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0lSUV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoTURNQV9TMF9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DT05GSUcoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDFfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX05FWFRfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX0QxX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9ORVhUX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDFfTkVYVF9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9TVEFSVF9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfRDFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1NUQVJUX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMV9TVEFSVF9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMV9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMV9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDFfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9YX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX1hfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDFfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9ZX01PRElGWSh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX1lfTU9ESUZZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NVUlJfREVTQ19QVFIoKQliZmluX3JlYWQzMihNRE1BX0QxX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DVVJSX0RFU0NfUFRSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfRDFfQ1VSUl9ERVNDX1BUUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoTURNQV9EMV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DVVJSX0FERFIodmFsKQliZmluX3dyaXRlMzIoTURNQV9EMV9DVVJSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ1VSUl9YX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9EMV9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMV9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfQ1VSUl9ZX0NPVU5UKCkJYmZpbl9yZWFkMTYoTURNQV9EMV9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMV9DVVJSX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihNRE1BX0QxX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KE1ETUFfRDFfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX1BFUklQSEVSQUxfTUFQLCB2YWwpCisKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfQ09ORklHKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX1MxX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ORVhUX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9TMV9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfTkVYVF9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MxX05FWFRfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfU1RBUlRfQUREUigpCQliZmluX3JlYWQzMihNRE1BX1MxX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9TVEFSVF9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzFfU1RBUlRfQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzFfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzFfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9YX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX1MxX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWF9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9YX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX1MxX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWV9NT0RJRlkodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9ZX01PRElGWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DVVJSX0RFU0NfUFRSKCkJYmZpbl9yZWFkMzIoTURNQV9TMV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9ERVNDX1BUUih2YWwpCWJmaW5fd3JpdGUzMihNRE1BX1MxX0NVUlJfREVTQ19QVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfQ1VSUl9BRERSKCkJCWJmaW5fcmVhZDMyKE1ETUFfUzFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1ETUFfUzFfQ1VSUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfWF9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzFfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzFfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfWV9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzFfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzFfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihNRE1BX1MxX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMV9QRVJJUEhFUkFMX01BUCwgdmFsKQorCisKKy8qIFBhcmFsbGVsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICgweEZGQzAxMDAwIC0gMHhGRkMwMTBGRikJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1BQSV9DT05UUk9MKCkJCQliZmluX3JlYWQxNihQUElfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QUElfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoUFBJX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BQSV9TVEFUVVMoKQkJCWJmaW5fcmVhZDE2KFBQSV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUFBJX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoUFBJX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUFBJX0RFTEFZKCkJCQliZmluX3JlYWQxNihQUElfREVMQVkpCisjZGVmaW5lIGJmaW5fd3JpdGVfUFBJX0RFTEFZKHZhbCkJCWJmaW5fd3JpdGUxNihQUElfREVMQVksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BQSV9DT1VOVCgpCQkJYmZpbl9yZWFkMTYoUFBJX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1BQSV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoUFBJX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QUElfRlJBTUUoKQkJCWJmaW5fcmVhZDE2KFBQSV9GUkFNRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QUElfRlJBTUUodmFsKQkJYmZpbl93cml0ZTE2KFBQSV9GUkFNRSwgdmFsKQorCisKKy8qIFR3by1XaXJlIEludGVyZmFjZQkJKDB4RkZDMDE0MDAgLSAweEZGQzAxNEZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1RXSV9DTEtESVYoKQkJCWJmaW5fcmVhZDE2KFRXSV9DTEtESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJX0NMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoVFdJX0NMS0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJX0NPTlRST0woKQkJCWJmaW5fcmVhZDE2KFRXSV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1RXSV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihUV0lfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJX1NMQVZFX0NUTCgpCQliZmluX3JlYWQxNihUV0lfU0xBVkVfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1RXSV9TTEFWRV9DVEwodmFsKQkJYmZpbl93cml0ZTE2KFRXSV9TTEFWRV9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSV9TTEFWRV9TVEFUKCkJCWJmaW5fcmVhZDE2KFRXSV9TTEFWRV9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1RXSV9TTEFWRV9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihUV0lfU0xBVkVfU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJX1NMQVZFX0FERFIoKQkJYmZpbl9yZWFkMTYoVFdJX1NMQVZFX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJX1NMQVZFX0FERFIodmFsKQkJYmZpbl93cml0ZTE2KFRXSV9TTEFWRV9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0lfTUFTVEVSX0NUTCgpCQliZmluX3JlYWQxNihUV0lfTUFTVEVSX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0lfTUFTVEVSX0NUTCh2YWwpCQliZmluX3dyaXRlMTYoVFdJX01BU1RFUl9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSV9NQVNURVJfU1RBVCgpCQliZmluX3JlYWQxNihUV0lfTUFTVEVSX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJX01BU1RFUl9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihUV0lfTUFTVEVSX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSV9NQVNURVJfQUREUigpCQliZmluX3JlYWQxNihUV0lfTUFTVEVSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJX01BU1RFUl9BRERSKHZhbCkJCWJmaW5fd3JpdGUxNihUV0lfTUFTVEVSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSV9JTlRfU1RBVCgpCQliZmluX3JlYWQxNihUV0lfSU5UX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJX0lOVF9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihUV0lfSU5UX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSV9JTlRfTUFTSygpCQliZmluX3JlYWQxNihUV0lfSU5UX01BU0spCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJX0lOVF9NQVNLKHZhbCkJCWJmaW5fd3JpdGUxNihUV0lfSU5UX01BU0ssIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSV9GSUZPX0NUTCgpCQliZmluX3JlYWQxNihUV0lfRklGT19DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJX0ZJRk9fQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihUV0lfRklGT19DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSV9GSUZPX1NUQVQoKQkJYmZpbl9yZWFkMTYoVFdJX0ZJRk9fU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0lfRklGT19TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihUV0lfRklGT19TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0lfWE1UX0RBVEE4KCkJCWJmaW5fcmVhZDE2KFRXSV9YTVRfREFUQTgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJX1hNVF9EQVRBOCh2YWwpCQliZmluX3dyaXRlMTYoVFdJX1hNVF9EQVRBOCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJX1hNVF9EQVRBMTYoKQkJYmZpbl9yZWFkMTYoVFdJX1hNVF9EQVRBMTYpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJX1hNVF9EQVRBMTYodmFsKQkJYmZpbl93cml0ZTE2KFRXSV9YTVRfREFUQTE2LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0lfUkNWX0RBVEE4KCkJCWJmaW5fcmVhZDE2KFRXSV9SQ1ZfREFUQTgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJX1JDVl9EQVRBOCh2YWwpCQliZmluX3dyaXRlMTYoVFdJX1JDVl9EQVRBOCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJX1JDVl9EQVRBMTYoKQkJYmZpbl9yZWFkMTYoVFdJX1JDVl9EQVRBMTYpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJX1JDVl9EQVRBMTYodmFsKQkJYmZpbl93cml0ZTE2KFRXSV9SQ1ZfREFUQTE2LCB2YWwpCisKKworLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBQb3J0IEcgKDB4RkZDMDE1MDAgLSAweEZGQzAxNUZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU8oKQkJCWJmaW5fcmVhZDE2KFBPUlRHSU8pCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJTyh2YWwpCQkJYmZpbl93cml0ZTE2KFBPUlRHSU8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX0NMRUFSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX1NFVCgpCQkJYmZpbl9yZWFkMTYoUE9SVEdJT19TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19TRVQodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX1RPR0dMRSgpCQliZmluX3JlYWQxNihQT1JUR0lPX1RPR0dMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX1RPR0dMRSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19UT0dHTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0EoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tBKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tBLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tBX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0FfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19NQVNLQV9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tBX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tBX1NFVCgpCQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tBX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tBX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tBX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQV9UT0dHTEUoKQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tBX1RPR0dMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tBX1RPR0dMRSh2YWwpCWJmaW5fd3JpdGUxNihQT1JUR0lPX01BU0tBX1RPR0dMRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19NQVNLQigpCQliZmluX3JlYWQxNihQT1JUR0lPX01BU0tCKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fTUFTS0IodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fTUFTS0IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0JfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEdJT19NQVNLQl9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX01BU0tCX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHSU9fTUFTS0JfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHSU9fTUFTS0JfU0VUKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0JfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fTUFTS0JfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHSU9fTUFTS0JfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX01BU0tCX1RPR0dMRSgpCWJmaW5fcmVhZDE2KFBPUlRHSU9fTUFTS0JfVE9HR0xFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHSU9fTUFTS0JfVE9HR0xFKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHSU9fTUFTS0JfVE9HR0xFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX0RJUigpCQkJYmZpbl9yZWFkMTYoUE9SVEdJT19ESVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19ESVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fRElSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR0lPX1BPTEFSKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fUE9MQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdJT19QT0xBUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdJT19QT0xBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19FREdFKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fRURHRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX0VER0UodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fRURHRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19CT1RIKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fQk9USCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX0JPVEgodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fQk9USCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdJT19JTkVOKCkJCWJmaW5fcmVhZDE2KFBPUlRHSU9fSU5FTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR0lPX0lORU4odmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHSU9fSU5FTiwgdmFsKQorCisKKy8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBIICgweEZGQzAxNzAwIC0gMHhGRkMwMTdGRikJCQkJCQkJCSovCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPKCkJCQliZmluX3JlYWQxNihQT1JUSElPKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU8odmFsKQkJCWJmaW5fd3JpdGUxNihQT1JUSElPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19DTEVBUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19TRVQoKQkJCWJmaW5fcmVhZDE2KFBPUlRISU9fU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fU0VUKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19UT0dHTEUoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19UT0dHTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19UT0dHTEUodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fVE9HR0xFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tBKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0EpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQV9DTEVBUigpCQliZmluX3JlYWQxNihQT1JUSElPX01BU0tBX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fTUFTS0FfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQV9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQV9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQV9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQV9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQV9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0FfVE9HR0xFKCkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQV9UT0dHTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQV9UT0dHTEUodmFsKQliZmluX3dyaXRlMTYoUE9SVEhJT19NQVNLQV9UT0dHTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fTUFTS0IoKQkJYmZpbl9yZWFkMTYoUE9SVEhJT19NQVNLQikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX01BU0tCKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX01BU0tCLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tCX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRISU9fTUFTS0JfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19NQVNLQl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUSElPX01BU0tCX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSElPX01BU0tCX1NFVCgpCQliZmluX3JlYWQxNihQT1JUSElPX01BU0tCX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX01BU0tCX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JUSElPX01BU0tCX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19NQVNLQl9UT0dHTEUoKQliZmluX3JlYWQxNihQT1JUSElPX01BU0tCX1RPR0dMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSElPX01BU0tCX1RPR0dMRSh2YWwpCWJmaW5fd3JpdGUxNihQT1JUSElPX01BU0tCX1RPR0dMRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19ESVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRISU9fRElSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fRElSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX0RJUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhJT19QT0xBUigpCQliZmluX3JlYWQxNihQT1JUSElPX1BPTEFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRISU9fUE9MQVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRISU9fUE9MQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fRURHRSgpCQliZmluX3JlYWQxNihQT1JUSElPX0VER0UpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19FREdFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX0VER0UsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fQk9USCgpCQliZmluX3JlYWQxNihQT1JUSElPX0JPVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19CT1RIKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX0JPVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRISU9fSU5FTigpCQliZmluX3JlYWQxNihQT1JUSElPX0lORU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhJT19JTkVOKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSElPX0lORU4sIHZhbCkKKworCisvKiBVQVJUMSBDb250cm9sbGVyCQkoMHhGRkMwMjAwMCAtIDB4RkZDMDIwRkYpCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfVEhSKCkJCQliZmluX3JlYWQxNihVQVJUMV9USFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfVEhSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9USFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX1JCUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfUkJSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX1JCUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfUkJSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9ETEwoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX0RMTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9ETEwodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX0RMTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfSUVSKCkJCQliZmluX3JlYWQxNihVQVJUMV9JRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfSUVSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9JRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0RMSCgpCQkJYmZpbl9yZWFkMTYoVUFSVDFfRExIKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0RMSCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfRExILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9JSVIoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX0lJUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9JSVIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX0lJUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfTENSKCkJCQliZmluX3JlYWQxNihVQVJUMV9MQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfTENSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9MQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX01DUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfTUNSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX01DUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfTUNSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9MU1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX0xTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9MU1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX0xTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfTVNSKCkJCQliZmluX3JlYWQxNihVQVJUMV9NU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfTVNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9NU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX1NDUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfU0NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX1NDUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfU0NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9HQ1RMKCkJCQliZmluX3JlYWQxNihVQVJUMV9HQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0dDVEwodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX0dDVEwsIHZhbCkKKworLyogT21pdCBDQU4gcmVnaXN0ZXIgc2V0cyBmcm9tIHRoZSBjZGVmQkY1MzQuaCAoQ0FOIGlzIG5vdCBpbiB0aGUgQURTUC1CRjUyeCBwcm9jZXNzb3IpICovCisKKy8qIFBpbiBDb250cm9sIFJlZ2lzdGVycwkoMHhGRkMwMzIwMCAtIDB4RkZDMDMyRkYpCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfUE9SVEZfRkVSKCkJCQliZmluX3JlYWQxNihQT1JURl9GRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZfRkVSKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURl9GRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX0ZFUigpCQkJYmZpbl9yZWFkMTYoUE9SVEdfRkVSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHX0ZFUih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEdfRkVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSF9GRVIoKQkJCWJmaW5fcmVhZDE2KFBPUlRIX0ZFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9GRVIodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRIX0ZFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVF9NVVgoKQkJCWJmaW5fcmVhZDE2KFBPUlRfTVVYKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRfTVVYKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUX01VWCwgdmFsKQorCisKKy8qIEhhbmRzaGFrZSBNRE1BIFJlZ2lzdGVycwkoMHhGRkMwMzMwMCAtIDB4RkZDMDMzRkYpCQkJCQkJCQkqLworI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0NPTlRST0woKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNJTklUKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9FQ0lOSVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0VDSU5JVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0VDSU5JVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0JDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTBfQkNJTklUKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9CQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9CQ0lOSVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9FQ1VSR0VOVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNVUkdFTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0VDVVJHRU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfRUNVUkdFTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9FQ09WRVJGTE9XKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9FQ09WRVJGTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ09WRVJGTE9XKHZhbCkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ09WRVJGTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNPVU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9FQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0VDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0VDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0JDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTBfQkNPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9CQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9CQ09VTlQsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0NPTlRST0woKQkJYmZpbl9yZWFkMTYoSE1ETUExX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNJTklUKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9FQ0lOSVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0VDSU5JVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0VDSU5JVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0JDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTFfQkNJTklUKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9CQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9CQ0lOSVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9FQ1VSR0VOVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNVUkdFTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0VDVVJHRU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfRUNVUkdFTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9FQ09WRVJGTE9XKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9FQ09WRVJGTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ09WRVJGTE9XKHZhbCkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ09WRVJGTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNPVU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9FQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0VDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0VDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0JDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTFfQkNPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9CQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9CQ09VTlQsIHZhbCkKKworLyogPT09PSBlbmQgZnJvbSBjZGVmQkY1MzQuaCA9PT09ICovCisKKy8qIEdQSU8gUElOIG11eCAoMHhGRkMwMzIxMCAtIE94RkZDMDMyODgpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX01VWCgpCQkJYmZpbl9yZWFkMTYoUE9SVEZfTVVYKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGX01VWCh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEZfTVVYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR19NVVgoKQkJCWJmaW5fcmVhZDE2KFBPUlRHX01VWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19NVVgodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHX01VWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhfTVVYKCkJCQliZmluX3JlYWQxNihQT1JUSF9NVVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhfTVVYKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSF9NVVgsIHZhbCkKKworI2RlZmluZSBiZmluX3JlYWRfUE9SVEZfRFJJVkUoKQkJCWJmaW5fcmVhZDE2KFBPUlRGX0RSSVZFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGX0RSSVZFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURl9EUklWRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdfRFJJVkUoKQkJCWJmaW5fcmVhZDE2KFBPUlRHX0RSSVZFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHX0RSSVZFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUR19EUklWRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhfRFJJVkUoKQkJCWJmaW5fcmVhZDE2KFBPUlRIX0RSSVZFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIX0RSSVZFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSF9EUklWRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZfU0xFVygpCQkJYmZpbl9yZWFkMTYoUE9SVEZfU0xFVykKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9TTEVXKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURl9TTEVXLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR19TTEVXKCkJCQliZmluX3JlYWQxNihQT1JUR19TTEVXKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHX1NMRVcodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHX1NMRVcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIX1NMRVcoKQkJCWJmaW5fcmVhZDE2KFBPUlRIX1NMRVcpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhfU0xFVyh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEhfU0xFVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZfSFlTVEVSSVNJUygpCQliZmluX3JlYWQxNihQT1JURl9IWVNURVJJU0lTKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGX0hZU1RFUklTSVModmFsKQliZmluX3dyaXRlMTYoUE9SVEZfSFlTVEVSSVNJUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEdfSFlTVEVSSVNJUygpCQliZmluX3JlYWQxNihQT1JUR19IWVNURVJJU0lTKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHX0hZU1RFUklTSVModmFsKQliZmluX3dyaXRlMTYoUE9SVEdfSFlTVEVSSVNJUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhfSFlTVEVSSVNJUygpCQliZmluX3JlYWQxNihQT1JUSF9IWVNURVJJU0lTKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIX0hZU1RFUklTSVModmFsKQliZmluX3dyaXRlMTYoUE9SVEhfSFlTVEVSSVNJUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTUlTQ1BPUlRfRFJJVkUoKQkJYmZpbl9yZWFkMTYoTUlTQ1BPUlRfRFJJVkUpCisjZGVmaW5lIGJmaW5fd3JpdGVfTUlTQ1BPUlRfRFJJVkUodmFsKQkJYmZpbl93cml0ZTE2KE1JU0NQT1JUX0RSSVZFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NSVNDUE9SVF9TTEVXKCkJCWJmaW5fcmVhZDE2KE1JU0NQT1JUX1NMRVcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTUlTQ1BPUlRfU0xFVyh2YWwpCQliZmluX3dyaXRlMTYoTUlTQ1BPUlRfU0xFVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTUlTQ1BPUlRfSFlTVEVSSVNJUygpCQliZmluX3JlYWQxNihNSVNDUE9SVF9IWVNURVJJU0lTKQorI2RlZmluZSBiZmluX3dyaXRlX01JU0NQT1JUX0hZU1RFUklTSVModmFsKQliZmluX3dyaXRlMTYoTUlTQ1BPUlRfSFlTVEVSSVNJUywgdmFsKQorCisvKiBIT1NUIFBvcnQgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0hPU1RfQ09OVFJPTCgpCQliZmluX3JlYWQxNihIT1NUX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihIT1NUX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hPU1RfU1RBVFVTKCkJCQliZmluX3JlYWQxNihIT1NUX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9IT1NUX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoSE9TVF9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hPU1RfVElNRU9VVCgpCQliZmluX3JlYWQxNihIT1NUX1RJTUVPVVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9USU1FT1VUKHZhbCkJCWJmaW5fd3JpdGUxNihIT1NUX1RJTUVPVVQsIHZhbCkKKworLyogQ291bnRlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfQ05UX0NPTkZJRygpCQkJYmZpbl9yZWFkMTYoQ05UX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9DTlRfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihDTlRfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DTlRfSU1BU0soKQkJCWJmaW5fcmVhZDE2KENOVF9JTUFTSykKKyNkZWZpbmUgYmZpbl93cml0ZV9DTlRfSU1BU0sodmFsKQkJYmZpbl93cml0ZTE2KENOVF9JTUFTSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ05UX1NUQVRVUygpCQkJYmZpbl9yZWFkMTYoQ05UX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9DTlRfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihDTlRfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DTlRfQ09NTUFORCgpCQkJYmZpbl9yZWFkMTYoQ05UX0NPTU1BTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ05UX0NPTU1BTkQodmFsKQkJYmZpbl93cml0ZTE2KENOVF9DT01NQU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DTlRfREVCT1VOQ0UoKQkJYmZpbl9yZWFkMTYoQ05UX0RFQk9VTkNFKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9ERUJPVU5DRSh2YWwpCQliZmluX3dyaXRlMTYoQ05UX0RFQk9VTkNFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DTlRfQ09VTlRFUigpCQkJYmZpbl9yZWFkMzIoQ05UX0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ05UX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKENOVF9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DTlRfTUFYKCkJCQliZmluX3JlYWQzMihDTlRfTUFYKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9NQVgodmFsKQkJCWJmaW5fd3JpdGUzMihDTlRfTUFYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DTlRfTUlOKCkJCQliZmluX3JlYWQzMihDTlRfTUlOKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9NSU4odmFsKQkJCWJmaW5fd3JpdGUzMihDTlRfTUlOLCB2YWwpCisKKy8qIE9UUC9GVVNFIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9PVFBfQ09OVFJPTCgpCQkJYmZpbl9yZWFkMTYoT1RQX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfT1RQX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KE9UUF9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9PVFBfQkVOKCkJCQliZmluX3JlYWQxNihPVFBfQkVOKQorI2RlZmluZSBiZmluX3dyaXRlX09UUF9CRU4odmFsKQkJCWJmaW5fd3JpdGUxNihPVFBfQkVOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9PVFBfU1RBVFVTKCkJCQliZmluX3JlYWQxNihPVFBfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX09UUF9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KE9UUF9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX09UUF9USU1JTkcoKQkJCWJmaW5fcmVhZDMyKE9UUF9USU1JTkcpCisjZGVmaW5lIGJmaW5fd3JpdGVfT1RQX1RJTUlORyh2YWwpCQliZmluX3dyaXRlMzIoT1RQX1RJTUlORywgdmFsKQorCisvKiBTZWN1cml0eSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfU0VDVVJFX1NZU1NXVCgpCQliZmluX3JlYWQzMihTRUNVUkVfU1lTU1dUKQorI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9TWVNTV1QodmFsKQkJYmZpbl93cml0ZTMyKFNFQ1VSRV9TWVNTV1QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NFQ1VSRV9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KFNFQ1VSRV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihTRUNVUkVfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0VDVVJFX1NUQVRVUygpCQliZmluX3JlYWQxNihTRUNVUkVfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KFNFQ1VSRV9TVEFUVVMsIHZhbCkKKworLyogT1RQIFJlYWQvV3JpdGUgRGF0YSBCdWZmZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX09UUF9EQVRBMCgpCQkJYmZpbl9yZWFkMzIoT1RQX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX09UUF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMzIoT1RQX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9PVFBfREFUQTEoKQkJCWJmaW5fcmVhZDMyKE9UUF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9PVFBfREFUQTEodmFsKQkJYmZpbl93cml0ZTMyKE9UUF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfT1RQX0RBVEEyKCkJCQliZmluX3JlYWQzMihPVFBfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfT1RQX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUzMihPVFBfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX09UUF9EQVRBMygpCQkJYmZpbl9yZWFkMzIoT1RQX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX09UUF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMzIoT1RQX0RBVEEzLCB2YWwpCisKKy8qIE5GQyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTkZDX0NUTCgpCQkJYmZpbl9yZWFkMTYoTkZDX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ORkNfQ1RMKHZhbCkJCQliZmluX3dyaXRlMTYoTkZDX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX1NUQVQoKQkJCWJmaW5fcmVhZDE2KE5GQ19TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0lSUVNUQVQoKQkJCWJmaW5fcmVhZDE2KE5GQ19JUlFTVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19JUlFTVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfSVJRU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0lSUU1BU0soKQkJCWJmaW5fcmVhZDE2KE5GQ19JUlFNQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19JUlFNQVNLKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfSVJRTUFTSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzAoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MwKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MwKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzEoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MxKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MxKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzIoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MyKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MyKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzMoKQkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MzKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MzKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfRUNDMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0NPVU5UKCkJCQliZmluX3JlYWQxNihORkNfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX05GQ19SU1QoKQkJCWJmaW5fcmVhZDE2KE5GQ19SU1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX1JTVCh2YWwpCQkJYmZpbl93cml0ZTE2KE5GQ19SU1QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX05GQ19QR0NUTCgpCQkJYmZpbl9yZWFkMTYoTkZDX1BHQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19QR0NUTCh2YWwpCQliZmluX3dyaXRlMTYoTkZDX1BHQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfUkVBRCgpCQkJYmZpbl9yZWFkMTYoTkZDX1JFQUQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX1JFQUQodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19SRUFELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfQUREUigpCQkJYmZpbl9yZWFkMTYoTkZDX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0FERFIodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfQ01EKCkJCQliZmluX3JlYWQxNihORkNfQ01EKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19DTUQodmFsKQkJCWJmaW5fd3JpdGUxNihORkNfQ01ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfREFUQV9XUigpCQkJYmZpbl9yZWFkMTYoTkZDX0RBVEFfV1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0RBVEFfV1IodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19EQVRBX1dSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfREFUQV9SRCgpCQkJYmZpbl9yZWFkMTYoTkZDX0RBVEFfUkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0RBVEFfUkQodmFsKQkJYmZpbl93cml0ZTE2KE5GQ19EQVRBX1JELCB2YWwpCisKKyNlbmRpZiAvKiBfQ0RFRl9CRjUyWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTIyLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTIyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3MWQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvZGVmQkY1MjIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTIyLmgKKyAqIEJhc2VkIG9uOgorICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6CisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBSZXY6CisgKgorICogTW9kaWZpZWQ6CisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfREVGX0JGNTIyX0gKKyNkZWZpbmUgX0RFRl9CRjUyMl9ICisKKy8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxhc20vbWFjaC1jb21tb24vZGVmX0xQQmxhY2tmaW4uaD4KKworLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MjIgKi8KKworLyogSW5jbHVkZSBkZWZCRjUyeF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTJ4IHByb2Nlc3NvcnMgKi8KKyNpbmNsdWRlICJkZWZCRjUyeF9iYXNlLmgiCisKKyNlbmRpZiAvKiBfREVGX0JGNTIyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvZGVmQkY1MjUuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvZGVmQkY1MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTM3NWEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyNS5oCkBAIC0wLDAgKzEsNzEzIEBACisvKgorICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTI1LmgKKyAqIEJhc2VkIG9uOgorICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6CisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBSZXY6CisgKgorICogTW9kaWZpZWQ6CisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfREVGX0JGNTI1X0gKKyNkZWZpbmUgX0RFRl9CRjUyNV9ICisKKy8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxhc20vbWFjaC1jb21tb24vZGVmX0xQQmxhY2tmaW4uaD4KKworLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MjUgKi8KKworLyogSW5jbHVkZSBkZWZCRjUyeF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTJ4IHByb2Nlc3NvcnMgKi8KKyNpbmNsdWRlICJkZWZCRjUyeF9iYXNlLmgiCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjUyNSB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KKworLyogVVNCIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRkFERFIgIDB4ZmZjMDM4MDAgICAvKiBGdW5jdGlvbiBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1BPV0VSICAweGZmYzAzODA0ICAgLyogUG93ZXIgbWFuYWdlbWVudCByZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0lOVFJUWCAgMHhmZmMwMzgwOCAgIC8qIEludGVycnVwdCByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCBhbmQgVHggZW5kcG9pbnQgMSB0byA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlJYICAweGZmYzAzODBjICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBSeCBlbmRwb2ludHMgMSB0byA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVFhFICAweGZmYzAzODEwICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clR4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSUlhFICAweGZmYzAzODE0ICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clJ4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVVNCICAweGZmYzAzODE4ICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBjb21tb24gVVNCIGludGVycnVwdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlVTQkUgIDB4ZmZjMDM4MWMgICAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGZvciBJbnRyVVNCICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0ZSQU1FICAweGZmYzAzODIwICAgLyogVVNCIGZyYW1lIG51bWJlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTkRFWCAgMHhmZmMwMzgyNCAgIC8qIEluZGV4IHJlZ2lzdGVyIGZvciBzZWxlY3RpbmcgdGhlIGluZGV4ZWQgZW5kcG9pbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX1RFU1RNT0RFICAweGZmYzAzODI4ICAgLyogRW5hYmxlZCBVU0IgMjAgdGVzdCBtb2RlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9HTE9CSU5UUiAgMHhmZmMwMzgyYyAgIC8qIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayByZWdpc3RlciBhbmQgV2FrZXVwIEV4Y2VwdGlvbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX0dMT0JBTF9DVEwgIDB4ZmZjMDM4MzAgICAvKiBHbG9iYWwgQ2xvY2sgQ29udHJvbCBmb3IgdGhlIGNvcmUgKi8KKworLyogVVNCIFBhY2tldCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9UWF9NQVhfUEFDS0VUICAweGZmYzAzODQwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfQ1NSMCAgMHhmZmMwMzg0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWENTUiAgMHhmZmMwMzg0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfUlhfTUFYX1BBQ0tFVCAgMHhmZmMwMzg0OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfUlhDU1IgIDB4ZmZjMDM4NGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0NPVU5UMCAgMHhmZmMwMzg1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludCAwIEZJRk8gYW5kIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBIb3N0IFR4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9SWENPVU5UICAweGZmYzAzODUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyBhbmQgTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWFRZUEUgIDB4ZmZjMDM4NTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBVU0JfTkFLTElNSVQwICAweGZmYzAzODU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCBhbmQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1RYSU5URVJWQUwgIDB4ZmZjMDM4NTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludCAwIGFuZCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX1JYVFlQRSAgMHhmZmMwMzg1YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1JYSU5URVJWQUwgIDB4ZmZjMDM4NjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQgYW5kIElzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX1RYQ09VTlQgIDB4ZmZjMDM4NjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgc2VsZWN0ZWQgZW5kcG9pbnQgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgRklGTyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDBfRklGTyAgMHhmZmMwMzg4MCAgIC8qIEVuZHBvaW50IDAgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDFfRklGTyAgMHhmZmMwMzg4OCAgIC8qIEVuZHBvaW50IDEgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDJfRklGTyAgMHhmZmMwMzg5MCAgIC8qIEVuZHBvaW50IDIgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDNfRklGTyAgMHhmZmMwMzg5OCAgIC8qIEVuZHBvaW50IDMgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDRfRklGTyAgMHhmZmMwMzhhMCAgIC8qIEVuZHBvaW50IDQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDVfRklGTyAgMHhmZmMwMzhhOCAgIC8qIEVuZHBvaW50IDUgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDZfRklGTyAgMHhmZmMwMzhiMCAgIC8qIEVuZHBvaW50IDYgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDdfRklGTyAgMHhmZmMwMzhiOCAgIC8qIEVuZHBvaW50IDcgRklGTyAqLworCisvKiBVU0IgT1RHIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfT1RHX0RFVl9DVEwgIDB4ZmZjMDM5MDAgICAvKiBPVEcgRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9PVEdfVkJVU19JUlEgIDB4ZmZjMDM5MDQgICAvKiBPVEcgVkJVUyBDb250cm9sIEludGVycnVwdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX09UR19WQlVTX01BU0sgIDB4ZmZjMDM5MDggICAvKiBWQlVTIENvbnRyb2wgSW50ZXJydXB0IEVuYWJsZSAqLworCisvKiBVU0IgUGh5IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfTElOS0lORk8gIDB4ZmZjMDM5NDggICAvKiBFbmFibGVzIHByb2dyYW1taW5nIG9mIHNvbWUgUEhZLXNpZGUgZGVsYXlzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1ZQTEVOICAweGZmYzAzOTRjICAgLyogRGV0ZXJtaW5lcyBkdXJhdGlvbiBvZiBWQlVTIHB1bHNlIGZvciBWQlVTIGNoYXJnaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9IU19FT0YxICAweGZmYzAzOTUwICAgLyogVGltZSBidWZmZXIgZm9yIEhpZ2gtU3BlZWQgdHJhbnNhY3Rpb25zICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9GU19FT0YxICAweGZmYzAzOTU0ICAgLyogVGltZSBidWZmZXIgZm9yIEZ1bGwtU3BlZWQgdHJhbnNhY3Rpb25zICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9MU19FT0YxICAweGZmYzAzOTU4ICAgLyogVGltZSBidWZmZXIgZm9yIExvdy1TcGVlZCB0cmFuc2FjdGlvbnMgKi8KKworLyogKEFQSFlfQ05UUkwgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9BUEhZX0NOVFJMICAweGZmYzAzOWUwICAgLyogUmVnaXN0ZXIgdGhhdCBpbmNyZWFzZXMgdmlzaWJpbGl0eSBvZiBBbmFsb2cgUEhZICovCisKKy8qIChBUEhZX0NBTElCIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfQVBIWV9DQUxJQiAgMHhmZmMwMzllNCAgIC8qIFJlZ2lzdGVyIHVzZWQgdG8gc2V0IHNvbWUgY2FsaWJyYXRpb24gdmFsdWVzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfQVBIWV9DTlRSTDIgIDB4ZmZjMDM5ZTggICAvKiBSZWdpc3RlciB1c2VkIHRvIHByZXZlbnQgcmUtZW51bWVyYXRpb24gb25jZSBNb2FiIGdvZXMgaW50byBoaWJlcm5hdGUgbW9kZSAqLworCisvKiAoUEhZX1RFU1QgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX1BIWV9URVNUICAweGZmYzAzOWVjICAgLyogVXNlZCBmb3IgcmVkdWNpbmcgc2ltdWxhdGlvbiB0aW1lIGFuZCBzaW1wbGlmaWVzIEZJRk8gdGVzdGFiaWxpdHkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9QTExPU0NfQ1RSTCAgMHhmZmMwMzlmMCAgIC8qIFVzZWQgdG8gcHJvZ3JhbSBkaWZmZXJlbnQgcGFyYW1ldGVycyBmb3IgVVNCIFBMTCBhbmQgT3NjaWxsYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfU1JQX0NMS0RJViAgMHhmZmMwMzlmNCAgIC8qIFVzZWQgdG8gcHJvZ3JhbSBjbG9jayBkaXZpZGUgdmFsdWUgZm9yIHRoZSBjbG9jayBmZWQgdG8gdGhlIFNSUCBkZXRlY3Rpb24gbG9naWMgKi8KKworLyogVVNCIEVuZHBvaW50IDAgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYTUFYUCAgMHhmZmMwM2EwMCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYQ1NSICAweGZmYzAzYTA0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50IDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWE1BWFAgIDB4ZmZjMDNhMDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWENTUiAgMHhmZmMwM2EwYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfUlhDT1VOVCAgMHhmZmMwM2ExMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludCAwIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9UWFRZUEUgIDB4ZmZjMDNhMTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhJTlRFUlZBTCAgMHhmZmMwM2ExOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50IDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWFRZUEUgIDB4ZmZjMDNhMWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTBfUlhJTlRFUlZBTCAgMHhmZmMwM2EyMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhDT1VOVCAgMHhmZmMwM2EyOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDAgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgMSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhNQVhQICAweGZmYzAzYTQwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhDU1IgIDB4ZmZjMDNhNDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhNQVhQICAweGZmYzAzYTQ4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhDU1IgIDB4ZmZjMDNhNGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1JYQ09VTlQgIDB4ZmZjMDNhNTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQxIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWFRZUEUgIDB4ZmZjMDNhNTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhJTlRFUlZBTCAgMHhmZmMwM2E1OCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1JYVFlQRSAgMHhmZmMwM2E1YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMV9SWElOVEVSVkFMICAweGZmYzAzYTYwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWENPVU5UICAweGZmYzAzYTY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlK0gxMDIgZW5kcG9pbnQxIFR4IEZJRk8gKi8KKworLyogVVNCIEVuZHBvaW50IDIgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1RYTUFYUCAgMHhmZmMwM2E4MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1RYQ1NSICAweGZmYzAzYTg0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYTUFYUCAgMHhmZmMwM2E4OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYQ1NSICAweGZmYzAzYThjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMl9SWENPVU5UICAweGZmYzAzYTkwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50MiBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhUWVBFICAweGZmYzAzYTk0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkyX1RYSU5URVJWQUwgIDB4ZmZjMDNhOTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMl9SWFRZUEUgIDB4ZmZjMDNhOWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhJTlRFUlZBTCAgMHhmZmMwM2FhMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhDT1VOVCAgMHhmZmMwM2FhOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDIgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgMyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhNQVhQICAweGZmYzAzYWMwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhDU1IgIDB4ZmZjMDNhYzQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhNQVhQICAweGZmYzAzYWM4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhDU1IgIDB4ZmZjMDNhY2MgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1JYQ09VTlQgIDB4ZmZjMDNhZDAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQzIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWFRZUEUgIDB4ZmZjMDNhZDQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhJTlRFUlZBTCAgMHhmZmMwM2FkOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1JYVFlQRSAgMHhmZmMwM2FkYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JM19SWElOVEVSVkFMICAweGZmYzAzYWUwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWENPVU5UICAweGZmYzAzYWU4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEgxMjRlbmRwb2ludDMgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgNCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhNQVhQICAweGZmYzAzYjAwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhDU1IgIDB4ZmZjMDNiMDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhNQVhQICAweGZmYzAzYjA4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhDU1IgIDB4ZmZjMDNiMGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1JYQ09VTlQgIDB4ZmZjMDNiMTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQ0IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWFRZUEUgIDB4ZmZjMDNiMTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhJTlRFUlZBTCAgMHhmZmMwM2IxOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1JYVFlQRSAgMHhmZmMwM2IxYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNF9SWElOVEVSVkFMICAweGZmYzAzYjIwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWENPVU5UICAweGZmYzAzYjI4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NCBUeCBGSUZPICovCisKKy8qIFVTQiBFbmRwb2ludCA1IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9UWE1BWFAgIDB4ZmZjMDNiNDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9UWENTUiAgMHhmZmMwM2I0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWE1BWFAgIDB4ZmZjMDNiNDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWENTUiAgMHhmZmMwM2I0YyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfUlhDT1VOVCAgMHhmZmMwM2I1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDUgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYVFlQRSAgMHhmZmMwM2I1NCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNV9UWElOVEVSVkFMICAweGZmYzAzYjU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfUlhUWVBFICAweGZmYzAzYjVjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk1X1JYSU5URVJWQUwgIDB4ZmZjMDNiNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYQ09VTlQgIDB4ZmZjMDNiNjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQ1IFR4IEZJRk8gKi8KKworLyogVVNCIEVuZHBvaW50IDYgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYTUFYUCAgMHhmZmMwM2I4MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYQ1NSICAweGZmYzAzYjg0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYTUFYUCAgMHhmZmMwM2I4OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYQ1NSICAweGZmYzAzYjhjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWENPVU5UICAweGZmYzAzYjkwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NiBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhUWVBFICAweGZmYzAzYjk0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDYgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk2X1RYSU5URVJWQUwgIDB4ZmZjMDNiOTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWFRZUEUgIDB4ZmZjMDNiOWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTZfUlhJTlRFUlZBTCAgMHhmZmMwM2JhMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhDT1VOVCAgMHhmZmMwM2JhOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDYgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgNyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhNQVhQICAweGZmYzAzYmMwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhDU1IgIDB4ZmZjMDNiYzQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhNQVhQICAweGZmYzAzYmM4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhDU1IgIDB4ZmZjMDNiY2MgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYQ09VTlQgIDB4ZmZjMDNiZDAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQ3IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWFRZUEUgIDB4ZmZjMDNiZDQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50NyAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhJTlRFUlZBTCAgMHhmZmMwM2JkOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50NyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYVFlQRSAgMHhmZmMwM2JkYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JN19SWElOVEVSVkFMICAweGZmYzAzYmYwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWENPVU5UICAweGZmYzAzYmY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NyBUeCBGSUZPICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQV9JTlRFUlJVUFQgIDB4ZmZjMDNjMDAgICAvKiBJbmRpY2F0ZXMgcGVuZGluZyBpbnRlcnJ1cHRzIGZvciB0aGUgRE1BIGNoYW5uZWxzICovCisKKy8qIFVTQiBDaGFubmVsIDAgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTBDT05UUk9MICAweGZmYzAzYzA0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDAgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEwQUREUkxPVyAgMHhmZmMwM2MwOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTBBRERSSElHSCAgMHhmZmMwM2MwYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTBDT1VOVExPVyAgMHhmZmMwM2MxMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUEwQ09VTlRISUdIICAweGZmYzAzYzE0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KKworLyogVVNCIENoYW5uZWwgMSBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMUNPTlRST0wgIDB4ZmZjMDNjMjQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgMSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTFBRERSTE9XICAweGZmYzAzYzI4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMUFERFJISUdIICAweGZmYzAzYzJjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMUNPVU5UTE9XICAweGZmYzAzYzMwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTFDT1VOVEhJR0ggIDB4ZmZjMDNjMzQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLworCisvKiBVU0IgQ2hhbm5lbCAyIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEyQ09OVFJPTCAgMHhmZmMwM2M0NCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAyIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMkFERFJMT1cgIDB4ZmZjMDNjNDggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEyQUREUkhJR0ggIDB4ZmZjMDNjNGMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEyQ09VTlRMT1cgIDB4ZmZjMDNjNTAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BMkNPVU5USElHSCAgMHhmZmMwM2M1NCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCisKKy8qIFVTQiBDaGFubmVsIDMgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTNDT05UUk9MICAweGZmYzAzYzY0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDMgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEzQUREUkxPVyAgMHhmZmMwM2M2OCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTNBRERSSElHSCAgMHhmZmMwM2M2YyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTNDT1VOVExPVyAgMHhmZmMwM2M3MCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUEzQ09VTlRISUdIICAweGZmYzAzYzc0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KKworLyogVVNCIENoYW5uZWwgNCBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNENPTlRST0wgIDB4ZmZjMDNjODQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgNCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTRBRERSTE9XICAweGZmYzAzYzg4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNEFERFJISUdIICAweGZmYzAzYzhjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNENPVU5UTE9XICAweGZmYzAzYzkwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTRDT1VOVEhJR0ggIDB4ZmZjMDNjOTQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLworCisvKiBVU0IgQ2hhbm5lbCA1IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE1Q09OVFJPTCAgMHhmZmMwM2NhNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCA1IGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNUFERFJMT1cgIDB4ZmZjMDNjYTggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE1QUREUkhJR0ggIDB4ZmZjMDNjYWMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE1Q09VTlRMT1cgIDB4ZmZjMDNjYjAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BNUNPVU5USElHSCAgMHhmZmMwM2NiNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCisKKy8qIFVTQiBDaGFubmVsIDYgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTZDT05UUk9MICAweGZmYzAzY2M0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDYgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE2QUREUkxPVyAgMHhmZmMwM2NjOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTZBRERSSElHSCAgMHhmZmMwM2NjYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTZDT1VOVExPVyAgMHhmZmMwM2NkMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE2Q09VTlRISUdIICAweGZmYzAzY2Q0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KKworLyogVVNCIENoYW5uZWwgNyBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BN0NPTlRST0wgIDB4ZmZjMDNjZTQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgNyBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTdBRERSTE9XICAweGZmYzAzY2U4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BN0FERFJISUdIICAweGZmYzAzY2VjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BN0NPVU5UTE9XICAweGZmYzAzY2YwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTdDT1VOVEhJR0ggIDB4ZmZjMDNjZjQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9GQUREUiAqLworCisjZGVmaW5lICAgICAgICAgIEZVTkNUSU9OX0FERFJFU1MgIDB4N2YgICAgICAgLyogRnVuY3Rpb24gYWRkcmVzcyAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9QT1dFUiAqLworCisjZGVmaW5lICAgICAgICAgICBFTkFCTEVfU1VTUEVORE0gIDB4MSAgICAgICAgLyogZW5hYmxlIFN1c3BlbmRNIG91dHB1dCAqLworI2RlZmluZSAgICAgICAgICBuRU5BQkxFX1NVU1BFTkRNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBTVVNQRU5EX01PREUgIDB4MiAgICAgICAgLyogU3VzcGVuZCBNb2RlIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICBuU1VTUEVORF9NT0RFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgUkVTVU1FX01PREUgIDB4NCAgICAgICAgLyogRE1BIE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5SRVNVTUVfTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJFU0VUICAweDggICAgICAgIC8qIFJlc2V0IGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJFU0VUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEhTX01PREUgIDB4MTAgICAgICAgLyogSGlnaCBTcGVlZCBtb2RlIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5IU19NT0RFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBIU19FTkFCTEUgIDB4MjAgICAgICAgLyogaGlnaCBTcGVlZCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkhTX0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgU09GVF9DT05OICAweDQwICAgICAgIC8qIFNvZnQgY29ubmVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuU09GVF9DT05OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIElTT19VUERBVEUgIDB4ODAgICAgICAgLyogSXNvY2hyb25vdXMgdXBkYXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbklTT19VUERBVEUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlRYICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMF9UWCAgMHgxICAgICAgICAvKiBUeCBFbmRwb2ludCAwIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAwX1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDFfVFggIDB4MiAgICAgICAgLyogVHggRW5kcG9pbnQgMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQMV9UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAyX1RYICAweDQgICAgICAgIC8qIFR4IEVuZHBvaW50IDIgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDJfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQM19UWCAgMHg4ICAgICAgICAvKiBUeCBFbmRwb2ludCAzIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAzX1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDRfVFggIDB4MTAgICAgICAgLyogVHggRW5kcG9pbnQgNCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNF9UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA1X1RYICAweDIwICAgICAgIC8qIFR4IEVuZHBvaW50IDUgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDVfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNl9UWCAgMHg0MCAgICAgICAvKiBUeCBFbmRwb2ludCA2IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA2X1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDdfVFggIDB4ODAgICAgICAgLyogVHggRW5kcG9pbnQgNyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQN19UWCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSUlggKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAxX1JYICAweDIgICAgICAgIC8qIFJ4IEVuZHBvaW50IDEgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDFfUlggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMl9SWCAgMHg0ICAgICAgICAvKiBSeCBFbmRwb2ludCAyIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAyX1JYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDNfUlggIDB4OCAgICAgICAgLyogUnggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQM19SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA0X1JYICAweDEwICAgICAgIC8qIFJ4IEVuZHBvaW50IDQgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDRfUlggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNV9SWCAgMHgyMCAgICAgICAvKiBSeCBFbmRwb2ludCA1IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA1X1JYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDZfUlggIDB4NDAgICAgICAgLyogUnggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNl9SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA3X1JYICAweDgwICAgICAgIC8qIFJ4IEVuZHBvaW50IDcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDdfUlggIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlRYRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAwX1RYX0UgIDB4MSAgICAgICAgLyogRW5kcG9pbnQgMCBpbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVAwX1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDFfVFhfRSAgMHgyICAgICAgICAvKiBUeCBFbmRwb2ludCAxIGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVAxX1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDJfVFhfRSAgMHg0ICAgICAgICAvKiBUeCBFbmRwb2ludCAyIGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVAyX1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDNfVFhfRSAgMHg4ICAgICAgICAvKiBUeCBFbmRwb2ludCAzIGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVAzX1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDRfVFhfRSAgMHgxMCAgICAgICAvKiBUeCBFbmRwb2ludCA0IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA0X1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDVfVFhfRSAgMHgyMCAgICAgICAvKiBUeCBFbmRwb2ludCA1IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA1X1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDZfVFhfRSAgMHg0MCAgICAgICAvKiBUeCBFbmRwb2ludCA2IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA2X1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDdfVFhfRSAgMHg4MCAgICAgICAvKiBUeCBFbmRwb2ludCA3IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA3X1RYX0UgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlJYRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAxX1JYX0UgIDB4MiAgICAgICAgLyogUnggRW5kcG9pbnQgMSBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQMV9SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAyX1JYX0UgIDB4NCAgICAgICAgLyogUnggRW5kcG9pbnQgMiBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQMl9SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAzX1JYX0UgIDB4OCAgICAgICAgLyogUnggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQM19SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA0X1JYX0UgIDB4MTAgICAgICAgLyogUnggRW5kcG9pbnQgNCBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNF9SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA1X1JYX0UgIDB4MjAgICAgICAgLyogUnggRW5kcG9pbnQgNSBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNV9SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA2X1JYX0UgIDB4NDAgICAgICAgLyogUnggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNl9SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA3X1JYX0UgIDB4ODAgICAgICAgLyogUnggRW5kcG9pbnQgNyBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQN19SWF9FICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJVU0IgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgU1VTUEVORF9CICAweDEgICAgICAgIC8qIFN1c3BlbmQgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5TVVNQRU5EX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVNVTUVfQiAgMHgyICAgICAgICAvKiBSZXN1bWUgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUkVTVU1FX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgUkVTRVRfT1JfQkFCTEVfQiAgMHg0ICAgICAgICAvKiBSZXNldC9iYWJibGUgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgblJFU0VUX09SX0JBQkxFX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTT0ZfQiAgMHg4ICAgICAgICAvKiBTdGFydCBvZiBmcmFtZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblNPRl9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDT05OX0IgIDB4MTAgICAgICAgLyogQ29ubmVjdGlvbiBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNPTk5fQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERJU0NPTl9CICAweDIwICAgICAgIC8qIERpc2Nvbm5lY3QgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRElTQ09OX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgU0VTU0lPTl9SRVFfQiAgMHg0MCAgICAgICAvKiBTZXNzaW9uIFJlcXVlc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICBuU0VTU0lPTl9SRVFfQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgVkJVU19FUlJPUl9CICAweDgwICAgICAgIC8qIFZidXMgdGhyZXNob2xkIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICBuVkJVU19FUlJPUl9CICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJVU0JFICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgU1VTUEVORF9CRSAgMHgxICAgICAgICAvKiBTdXNwZW5kIGluZGljYXRvciBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgblNVU1BFTkRfQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFJFU1VNRV9CRSAgMHgyICAgICAgICAvKiBSZXN1bWUgaW5kaWNhdG9yIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblJFU1VNRV9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIFJFU0VUX09SX0JBQkxFX0JFICAweDQgICAgICAgIC8qIFJlc2V0L2JhYmJsZSBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgblJFU0VUX09SX0JBQkxFX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTT0ZfQkUgIDB4OCAgICAgICAgLyogU3RhcnQgb2YgZnJhbWUgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuU09GX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENPTk5fQkUgIDB4MTAgICAgICAgLyogQ29ubmVjdGlvbiBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DT05OX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBESVNDT05fQkUgIDB4MjAgICAgICAgLyogRGlzY29ubmVjdCBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuRElTQ09OX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgU0VTU0lPTl9SRVFfQkUgIDB4NDAgICAgICAgLyogU2Vzc2lvbiBSZXF1ZXN0IGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgIG5TRVNTSU9OX1JFUV9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBWQlVTX0VSUk9SX0JFICAweDgwICAgICAgIC8qIFZidXMgdGhyZXNob2xkIGluZGljYXRvciBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgblZCVVNfRVJST1JfQkUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfRlJBTUUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRlJBTUVfTlVNQkVSICAweDdmZiAgICAgIC8qIEZyYW1lIG51bWJlciAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9JTkRFWCAqLworCisjZGVmaW5lICAgICAgICAgU0VMRUNURURfRU5EUE9JTlQgIDB4ZiAgICAgICAgLyogc2VsZWN0ZWQgZW5kcG9pbnQgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfR0xPQkFMX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIEdMT0JBTF9FTkEgIDB4MSAgICAgICAgLyogZW5hYmxlcyBVU0IgbW9kdWxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkdMT0JBTF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVAxX1RYX0VOQSAgMHgyICAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCAxIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDFfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQMl9UWF9FTkEgIDB4NCAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgMiBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVAyX1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDNfVFhfRU5BICAweDggICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDMgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQM19UWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVA0X1RYX0VOQSAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDRfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQNV9UWF9FTkEgIDB4MjAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgNSBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA1X1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDZfVFhfRU5BICAweDQwICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDYgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQNl9UWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVA3X1RYX0VOQSAgMHg4MCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA3IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDdfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQMV9SWF9FTkEgIDB4MTAwICAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCAxIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDFfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQMl9SWF9FTkEgIDB4MjAwICAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCAyIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDJfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQM19SWF9FTkEgIDB4NDAwICAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCAzIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDNfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQNF9SWF9FTkEgIDB4ODAwICAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCA0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDRfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQNV9SWF9FTkEgIDB4MTAwMCAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCA1IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDVfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQNl9SWF9FTkEgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCA2IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDZfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQN19SWF9FTkEgIDB4NDAwMCAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCA3IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDdfUlhfRU5BICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX09UR19ERVZfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VTU0lPTiAgMHgxICAgICAgICAvKiBzZXNzaW9uIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TRVNTSU9OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9SRVEgIDB4MiAgICAgICAgLyogSG9zdCBuZWdvdGlhdGlvbiByZXF1ZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSE9TVF9SRVEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfTU9ERSAgMHg0ICAgICAgICAvKiBpbmRpY2F0ZXMgVVNCRFJDIGlzIGEgaG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuSE9TVF9NT0RFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVkJVUzAgIDB4OCAgICAgICAgLyogVmJ1cyBsZXZlbCBpbmRpY2F0b3JbMF0gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5WQlVTMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFZCVVMxICAweDEwICAgICAgIC8qIFZidXMgbGV2ZWwgaW5kaWNhdG9yWzFdICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVkJVUzEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBMU0RFViAgMHgyMCAgICAgICAvKiBMb3ctc3BlZWQgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTFNERVYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBGU0RFViAgMHg0MCAgICAgICAvKiBGdWxsIG9yIEhpZ2gtc3BlZWQgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRlNERVYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBCX0RFVklDRSAgMHg4MCAgICAgICAvKiBBJyBvciAnQicgZGV2aWNlIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkJfREVWSUNFICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX09UR19WQlVTX0lSUSAqLworCisjZGVmaW5lICAgICAgICAgICAgIERSSVZFX1ZCVVNfT04gIDB4MSAgICAgICAgLyogaW5kaWNhdG9yIHRvIGRyaXZlIFZCVVMgY29udHJvbCBjaXJjdWl0ICovCisjZGVmaW5lICAgICAgICAgICAgbkRSSVZFX1ZCVVNfT04gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICBEUklWRV9WQlVTX09GRiAgMHgyICAgICAgICAvKiBpbmRpY2F0b3IgdG8gc2h1dCBvZmYgY2hhcmdlIHB1bXAgKi8KKyNkZWZpbmUgICAgICAgICAgIG5EUklWRV9WQlVTX09GRiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgQ0hSR19WQlVTX1NUQVJUICAweDQgICAgICAgIC8qIGluZGljYXRvciBmb3IgZXh0ZXJuYWwgY2lyY3VpdCB0byBzdGFydCBjaGFyZ2luZyBWQlVTICovCisjZGVmaW5lICAgICAgICAgIG5DSFJHX1ZCVVNfU1RBUlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgQ0hSR19WQlVTX0VORCAgMHg4ICAgICAgICAvKiBpbmRpY2F0b3IgZm9yIGV4dGVybmFsIGNpcmN1aXQgdG8gZW5kIGNoYXJnaW5nIFZCVVMgKi8KKyNkZWZpbmUgICAgICAgICAgICBuQ0hSR19WQlVTX0VORCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgRElTQ0hSR19WQlVTX1NUQVJUICAweDEwICAgICAgIC8qIGluZGljYXRvciB0byBzdGFydCBkaXNjaGFyZ2luZyBWQlVTICovCisjZGVmaW5lICAgICAgIG5ESVNDSFJHX1ZCVVNfU1RBUlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgRElTQ0hSR19WQlVTX0VORCAgMHgyMCAgICAgICAvKiBpbmRpY2F0b3IgdG8gc3RvcCBkaXNjaGFyZ2luZyBWQlVTICovCisjZGVmaW5lICAgICAgICAgbkRJU0NIUkdfVkJVU19FTkQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfT1RHX1ZCVVNfTUFTSyAqLworCisjZGVmaW5lICAgICAgICAgRFJJVkVfVkJVU19PTl9FTkEgIDB4MSAgICAgICAgLyogZW5hYmxlIERSSVZFX1ZCVVNfT04gaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICBuRFJJVkVfVkJVU19PTl9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgIERSSVZFX1ZCVVNfT0ZGX0VOQSAgMHgyICAgICAgICAvKiBlbmFibGUgRFJJVkVfVkJVU19PRkYgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgIG5EUklWRV9WQlVTX09GRl9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgQ0hSR19WQlVTX1NUQVJUX0VOQSAgMHg0ICAgICAgICAvKiBlbmFibGUgQ0hSR19WQlVTX1NUQVJUIGludGVycnVwdCAqLworI2RlZmluZSAgICAgIG5DSFJHX1ZCVVNfU1RBUlRfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgQ0hSR19WQlVTX0VORF9FTkEgIDB4OCAgICAgICAgLyogZW5hYmxlIENIUkdfVkJVU19FTkQgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICBuQ0hSR19WQlVTX0VORF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgRElTQ0hSR19WQlVTX1NUQVJUX0VOQSAgMHgxMCAgICAgICAvKiBlbmFibGUgRElTQ0hSR19WQlVTX1NUQVJUIGludGVycnVwdCAqLworI2RlZmluZSAgIG5ESVNDSFJHX1ZCVVNfU1RBUlRfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgRElTQ0hSR19WQlVTX0VORF9FTkEgIDB4MjAgICAgICAgLyogZW5hYmxlIERJU0NIUkdfVkJVU19FTkQgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICBuRElTQ0hSR19WQlVTX0VORF9FTkEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfQ1NSMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUlhQS1RSRFkgIDB4MSAgICAgICAgLyogZGF0YSBwYWNrZXQgcmVjZWl2ZSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5SWFBLVFJEWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFRYUEtUUkRZICAweDIgICAgICAgIC8qIGRhdGEgcGFja2V0IGluIEZJRk8gaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuVFhQS1RSRFkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgU1RBTExfU0VOVCAgMHg0ICAgICAgICAvKiBTVEFMTCBoYW5kc2hha2Ugc2VudCAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5TVEFMTF9TRU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERBVEFFTkQgIDB4OCAgICAgICAgLyogRGF0YSBlbmQgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRBVEFFTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBTRVRVUEVORCAgMHgxMCAgICAgICAvKiBTZXR1cCBlbmQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5TRVRVUEVORCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgU0VORFNUQUxMICAweDIwICAgICAgIC8qIFNlbmQgU1RBTEwgaGFuZHNoYWtlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5TRU5EU1RBTEwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBTRVJWSUNFRF9SWFBLVFJEWSAgMHg0MCAgICAgICAvKiB1c2VkIHRvIGNsZWFyIHRoZSBSeFBrdFJkeSBiaXQgKi8KKyNkZWZpbmUgICAgICAgIG5TRVJWSUNFRF9SWFBLVFJEWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIFNFUlZJQ0VEX1NFVFVQRU5EICAweDgwICAgICAgIC8qIHVzZWQgdG8gY2xlYXIgdGhlIFNldHVwRW5kIGJpdCAqLworI2RlZmluZSAgICAgICAgblNFUlZJQ0VEX1NFVFVQRU5EICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBGTFVTSEZJRk8gIDB4MTAwICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuRkxVU0hGSUZPICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFNUQUxMX1JFQ0VJVkVEX0ggIDB4NCAgICAgICAgLyogU1RBTEwgaGFuZHNoYWtlIHJlY2VpdmVkIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgIG5TVEFMTF9SRUNFSVZFRF9IICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIFNFVFVQUEtUX0ggIDB4OCAgICAgICAgLyogc2VuZCBTZXR1cCB0b2tlbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuU0VUVVBQS1RfSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUlJPUl9IICAweDEwICAgICAgIC8qIHRpbWVvdXQgZXJyb3IgaW5kaWNhdG9yIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FUlJPUl9IICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUkVRUEtUX0ggIDB4MjAgICAgICAgLyogUmVxdWVzdCBhbiBJTiB0cmFuc2FjdGlvbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5SRVFQS1RfSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIFNUQVRVU1BLVF9IICAweDQwICAgICAgIC8qIFN0YXR1cyBzdGFnZSB0cmFuc2FjdGlvbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5TVEFUVVNQS1RfSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBOQUtfVElNRU9VVF9IICAweDgwICAgICAgIC8qIEVQMCBoYWx0ZWQgYWZ0ZXIgYSBOQUsgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgbk5BS19USU1FT1VUX0ggIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfQ09VTlQwICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIEVQMF9SWF9DT1VOVCAgMHg3ZiAgICAgICAvKiBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMgaW4gRVAwIEZJRk8gKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfTkFLTElNSVQwICovCisKKyNkZWZpbmUgICAgICAgICAgICAgRVAwX05BS19MSU1JVCAgMHgxZiAgICAgICAvKiBudW1iZXIgb2YgZnJhbWVzL21pY3JvIGZyYW1lcyBhZnRlciB3aGljaCBFUDAgdGltZW91dHMgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfVFhfTUFYX1BBQ0tFVCAqLworCisjZGVmaW5lICAgICAgICAgTUFYX1BBQ0tFVF9TSVpFX1QgIDB4N2ZmICAgICAgLyogbWF4aW11bSBkYXRhIHBheSBsb2FkIGluIGEgZnJhbWUgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfUlhfTUFYX1BBQ0tFVCAqLworCisjZGVmaW5lICAgICAgICAgTUFYX1BBQ0tFVF9TSVpFX1IgIDB4N2ZmICAgICAgLyogbWF4aW11bSBkYXRhIHBheSBsb2FkIGluIGEgZnJhbWUgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfVFhDU1IgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBUWFBLVFJEWV9UICAweDEgICAgICAgIC8qIGRhdGEgcGFja2V0IGluIEZJRk8gaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgblRYUEtUUkRZX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgRklGT19OT1RfRU1QVFlfVCAgMHgyICAgICAgICAvKiBGSUZPIG5vdCBlbXB0eSAqLworI2RlZmluZSAgICAgICAgIG5GSUZPX05PVF9FTVBUWV9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIFVOREVSUlVOX1QgIDB4NCAgICAgICAgLyogVHhQa3RSZHkgbm90IHNldCAgZm9yIGFuIElOIHRva2VuICovCisjZGVmaW5lICAgICAgICAgICAgICAgblVOREVSUlVOX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBGTFVTSEZJRk9fVCAgMHg4ICAgICAgICAvKiBmbHVzaCBlbmRwb2ludCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICBuRkxVU0hGSUZPX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFNUQUxMX1NFTkRfVCAgMHgxMCAgICAgICAvKiBpc3N1ZSBhIFN0YWxsIGhhbmRzaGFrZSAqLworI2RlZmluZSAgICAgICAgICAgICBuU1RBTExfU0VORF9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5UX1QgIDB4MjAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHRyYW5zbWl0dGVkICovCisjZGVmaW5lICAgICAgICAgICAgIG5TVEFMTF9TRU5UX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgIENMRUFSX0RBVEFUT0dHTEVfVCAgMHg0MCAgICAgICAvKiBjbGVhciBlbmRwb2ludCBkYXRhIHRvZ2dsZSAqLworI2RlZmluZSAgICAgICBuQ0xFQVJfREFUQVRPR0dMRV9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIElOQ09NUFRYX1QgIDB4ODAgICAgICAgLyogaW5kaWNhdGVzIHRoYXQgYSBsYXJnZSBwYWNrZXQgaXMgc3BsaXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSU5DT01QVFhfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRTU9ERV9UICAweDQwMCAgICAgIC8qIERNQSBtb2RlICgwIG9yIDEpIHNlbGVjdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICBuRE1BUkVRTU9ERV9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBGT1JDRV9EQVRBVE9HR0xFX1QgIDB4ODAwICAgICAgLyogRm9yY2UgZGF0YSB0b2dnbGUgKi8KKyNkZWZpbmUgICAgICAgbkZPUkNFX0RBVEFUT0dHTEVfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRX0VOQV9UICAweDEwMDAgICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdCBmb3IgVHggRVAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRNQVJFUV9FTkFfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIElTT19UICAweDQwMDAgICAgIC8qIGVuYWJsZSBJc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5JU09fVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgQVVUT1NFVF9UICAweDgwMDAgICAgIC8qIGFsbG93cyBUeFBrdFJkeSB0byBiZSBzZXQgYXV0b21hdGljYWxseSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuQVVUT1NFVF9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVJST1JfVEggIDB4NCAgICAgICAgLyogZXJyb3IgY29uZGl0aW9uIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVSUk9SX1RIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgU1RBTExfUkVDRUlWRURfVEggIDB4MjAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHJlY2VpdmVkIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgblNUQUxMX1JFQ0VJVkVEX1RIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgTkFLX1RJTUVPVVRfVEggIDB4ODAgICAgICAgLyogTkFLIHRpbWVvdXQgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICBuTkFLX1RJTUVPVVRfVEggIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfVFhDT1VOVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVFhfQ09VTlQgIDB4MWZmZiAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHNlbGVjdGVkIGVuZHBvaW50IFR4IEZJRk8gKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfUlhDU1IgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBSWFBLVFJEWV9SICAweDEgICAgICAgIC8qIGRhdGEgcGFja2V0IGluIEZJRk8gaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgblJYUEtUUkRZX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBGSUZPX0ZVTExfUiAgMHgyICAgICAgICAvKiBGSUZPIG5vdCBlbXB0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgbkZJRk9fRlVMTF9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBPVkVSUlVOX1IgIDB4NCAgICAgICAgLyogVHhQa3RSZHkgbm90IHNldCAgZm9yIGFuIElOIHRva2VuICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5PVkVSUlVOX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBEQVRBRVJST1JfUiAgMHg4ICAgICAgICAvKiBPdXQgcGFja2V0IGNhbm5vdCBiZSBsb2FkZWQgaW50byBSeCAgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgbkRBVEFFUlJPUl9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgRkxVU0hGSUZPX1IgIDB4MTAgICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgbkZMVVNIRklGT19SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5EX1IgIDB4MjAgICAgICAgLyogaXNzdWUgYSBTdGFsbCBoYW5kc2hha2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblNUQUxMX1NFTkRfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VOVF9SICAweDQwICAgICAgIC8qIFN0YWxsIGhhbmRzaGFrZSB0cmFuc21pdHRlZCAqLworI2RlZmluZSAgICAgICAgICAgICBuU1RBTExfU0VOVF9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBDTEVBUl9EQVRBVE9HR0xFX1IgIDB4ODAgICAgICAgLyogY2xlYXIgZW5kcG9pbnQgZGF0YSB0b2dnbGUgKi8KKyNkZWZpbmUgICAgICAgbkNMRUFSX0RBVEFUT0dHTEVfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJTkNPTVBSWF9SICAweDEwMCAgICAgIC8qIGluZGljYXRlcyB0aGF0IGEgbGFyZ2UgcGFja2V0IGlzIHNwbGl0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgbklOQ09NUFJYX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERNQVJFUU1PREVfUiAgMHg4MDAgICAgICAvKiBETUEgbW9kZSAoMCBvciAxKSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRNQVJFUU1PREVfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRElTTllFVF9SICAweDEwMDAgICAgIC8qIGRpc2FibGUgTnlldCBoYW5kc2hha2VzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5ESVNOWUVUX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERNQVJFUV9FTkFfUiAgMHgyMDAwICAgICAvKiBFbmFibGUgRE1BIHJlcXVlc3QgZm9yIFR4IEVQICovCisjZGVmaW5lICAgICAgICAgICAgIG5ETUFSRVFfRU5BX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBJU09fUiAgMHg0MDAwICAgICAvKiBlbmFibGUgSXNvY2hyb25vdXMgdHJhbnNmZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuSVNPX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBBVVRPQ0xFQVJfUiAgMHg4MDAwICAgICAvKiBhbGxvd3MgVHhQa3RSZHkgdG8gYmUgc2V0IGF1dG9tYXRpY2FsbHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5BVVRPQ0xFQVJfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVSUk9SX1JIICAweDQgICAgICAgIC8qIFR4UGt0UmR5IG5vdCBzZXQgIGZvciBhbiBJTiB0b2tlbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUlJPUl9SSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgUkVRUEtUX1JIICAweDIwICAgICAgIC8qIHJlcXVlc3QgYW4gSU4gdHJhbnNhY3Rpb24gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5SRVFQS1RfUkggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBTVEFMTF9SRUNFSVZFRF9SSCAgMHg0MCAgICAgICAvKiBTdGFsbCBoYW5kc2hha2UgcmVjZWl2ZWQgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICBuU1RBTExfUkVDRUlWRURfUkggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBJTkNPTVBSWF9SSCAgMHgxMDAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCBhIGxhcmdlIHBhY2tldCBpcyBzcGxpdCBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5JTkNPTVBSWF9SSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBETUFSRVFNT0RFX1JIICAweDgwMCAgICAgIC8qIERNQSBtb2RlICgwIG9yIDEpIHNlbGVjdGlvbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICBuRE1BUkVRTU9ERV9SSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBBVVRPUkVRX1JIICAweDQwMDAgICAgIC8qIHNldHMgUmVxUGt0IGF1dG9tYXRpY2FsbHkgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkFVVE9SRVFfUkggIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfUlhDT1VOVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUlhfQ09VTlQgIDB4MWZmZiAgICAgLyogTnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzIGluIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IEZJRk8gKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfVFhUWVBFICovCisKKyNkZWZpbmUgICAgICAgICAgICBUQVJHRVRfRVBfTk9fVCAgMHhmICAgICAgICAvKiBFUCBudW1iZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgUFJPVE9DT0xfVCAgMHhjICAgICAgICAvKiB0cmFuc2ZlciB0eXBlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYSU5URVJWQUwgKi8KKworI2RlZmluZSAgICAgICAgICBUWF9QT0xMX0lOVEVSVkFMICAweGZmICAgICAgIC8qIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIHNlbGVjdGVkIFR4IEVQICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYVFlQRSAqLworCisjZGVmaW5lICAgICAgICAgICAgVEFSR0VUX0VQX05PX1IgIDB4ZiAgICAgICAgLyogRVAgbnVtYmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFBST1RPQ09MX1IgIDB4YyAgICAgICAgLyogdHJhbnNmZXIgdHlwZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9SWElOVEVSVkFMICovCisKKyNkZWZpbmUgICAgICAgICAgUlhfUE9MTF9JTlRFUlZBTCAgMHhmZiAgICAgICAvKiBwb2xsaW5nIGludGVydmFsIGZvciBzZWxlY3RlZCBSeCBFUCAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9ETUFfSU5URVJSVVBUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUEwX0lOVCAgMHgxICAgICAgICAvKiBETUEwIHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BMF9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUExX0lOVCAgMHgyICAgICAgICAvKiBETUExIHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BMV9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUEyX0lOVCAgMHg0ICAgICAgICAvKiBETUEyIHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BMl9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUEzX0lOVCAgMHg4ICAgICAgICAvKiBETUEzIHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BM19JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE0X0lOVCAgMHgxMCAgICAgICAvKiBETUE0IHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BNF9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE1X0lOVCAgMHgyMCAgICAgICAvKiBETUE1IHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BNV9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE2X0lOVCAgMHg0MCAgICAgICAvKiBETUE2IHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BNl9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE3X0lOVCAgMHg4MCAgICAgICAvKiBETUE3IHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BN19JTlQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeENPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUFfRU5BICAweDEgICAgICAgIC8qIERNQSBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRE1BX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRElSRUNUSU9OICAweDIgICAgICAgIC8qIGRpcmVjdGlvbiBvZiBETUEgdHJhbnNmZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkRJUkVDVElPTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNT0RFICAweDQgICAgICAgIC8qIERNQSBCdXMgZXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBJTlRfRU5BICAweDggICAgICAgIC8qIEludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuSU5UX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQTlVNICAweGYwICAgICAgIC8qIEVQIG51bWJlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEJVU0VSUk9SICAweDEwMCAgICAgIC8qIERNQSBCdXMgZXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5CVVNFUlJPUiAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4QUREUkhJR0ggKi8KKworI2RlZmluZSAgICAgICAgICAgICBETUFfQUREUl9ISUdIICAweGZmZmYgICAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgRE1BIG1hc3RlciBjaGFubmVsICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhBRERSTE9XICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIERNQV9BRERSX0xPVyAgMHhmZmZmICAgICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgdGhlIERNQSBtYXN0ZXIgY2hhbm5lbCAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4Q09VTlRISUdIICovCisKKyNkZWZpbmUgICAgICAgICAgICBETUFfQ09VTlRfSElHSCAgMHhmZmZmICAgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeENPVU5UTE9XICovCisKKyNkZWZpbmUgICAgICAgICAgICAgRE1BX0NPVU5UX0xPVyAgMHhmZmZmICAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgKi8KKworI2VuZGlmIC8qIF9ERUZfQkY1MjVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyNy5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZTMyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTI3LmgKQEAgLTAsMCArMSwxMDg5IEBACisvKgorICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTI3LmgKKyAqIEJhc2VkIG9uOgorICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6CisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBSZXY6CisgKgorICogTW9kaWZpZWQ6CisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfREVGX0JGNTI3X0gKKyNkZWZpbmUgX0RFRl9CRjUyN19ICisKKy8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxkZWZfTFBCbGFja2Zpbi5oPgorCisvKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUyNyAqLworCisvKiBJbmNsdWRlIGRlZkJGNTJ4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1MnggcHJvY2Vzc29ycyAqLworI2luY2x1ZGUgPGRlZkJGNTJ4X2Jhc2UuaD4KKworLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlICNkZWZpbmVzIG5lZWRlZCBieSBBRFNQLUJGNTI3IHRoYXQgYXJlIG5vdCBpbiB0aGUgY29tbW9uIGhlYWRlciAqLworLyogMTAvMTAwIEV0aGVybmV0IENvbnRyb2xsZXIJKDB4RkZDMDMwMDAgLSAweEZGQzAzMUZGKSAqLworCisjZGVmaW5lIEVNQUNfT1BNT0RFICAgICAgICAgICAgIDB4RkZDMDMwMDAgICAgICAgLyogT3BlcmF0aW5nIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX0FERFJMTyAgICAgICAgICAgICAweEZGQzAzMDA0ICAgICAgIC8qIEFkZHJlc3MgTG93ICgzMiBMU0JzKSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19BRERSSEkgICAgICAgICAgICAgMHhGRkMwMzAwOCAgICAgICAvKiBBZGRyZXNzIEhpZ2ggKDE2IE1TQnMpIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfSEFTSExPICAgICAgICAgICAgIDB4RkZDMDMwMEMgICAgICAgLyogTXVsdGljYXN0IEhhc2ggVGFibGUgTG93IChCaW5zIDMxLTApIFJlZ2lzdGVyICAgICAgICAqLworI2RlZmluZSBFTUFDX0hBU0hISSAgICAgICAgICAgICAweEZGQzAzMDEwICAgICAgIC8qIE11bHRpY2FzdCBIYXNoIFRhYmxlIEhpZ2ggKEJpbnMgNjMtMzIpIFJlZ2lzdGVyICAgICAgKi8KKyNkZWZpbmUgRU1BQ19TVEFBREQgICAgICAgICAgICAgMHhGRkMwMzAxNCAgICAgICAvKiBTdGF0aW9uIE1hbmFnZW1lbnQgQWRkcmVzcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfU1RBREFUICAgICAgICAgICAgIDB4RkZDMDMwMTggICAgICAgLyogU3RhdGlvbiBNYW5hZ2VtZW50IERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX0ZMQyAgICAgICAgICAgICAgICAweEZGQzAzMDFDICAgICAgIC8qIEZsb3cgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19WTEFOMSAgICAgICAgICAgICAgMHhGRkMwMzAyMCAgICAgICAvKiBWTEFOMSBUYWcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfVkxBTjIgICAgICAgICAgICAgIDB4RkZDMDMwMjQgICAgICAgLyogVkxBTjIgVGFnIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1dLVVBfQ1RMICAgICAgICAgICAweEZGQzAzMDJDICAgICAgIC8qIFdha2UtVXAgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19XS1VQX0ZGTVNLMCAgICAgICAgMHhGRkMwMzAzMCAgICAgICAvKiBXYWtlLVVwIEZyYW1lIEZpbHRlciAwIEJ5dGUgTWFzayBSZWdpc3RlciAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfV0tVUF9GRk1TSzEgICAgICAgIDB4RkZDMDMwMzQgICAgICAgLyogV2FrZS1VcCBGcmFtZSBGaWx0ZXIgMSBCeXRlIE1hc2sgUmVnaXN0ZXIgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1dLVVBfRkZNU0syICAgICAgICAweEZGQzAzMDM4ICAgICAgIC8qIFdha2UtVXAgRnJhbWUgRmlsdGVyIDIgQnl0ZSBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19XS1VQX0ZGTVNLMyAgICAgICAgMHhGRkMwMzAzQyAgICAgICAvKiBXYWtlLVVwIEZyYW1lIEZpbHRlciAzIEJ5dGUgTWFzayBSZWdpc3RlciAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfV0tVUF9GRkNNRCAgICAgICAgIDB4RkZDMDMwNDAgICAgICAgLyogV2FrZS1VcCBGcmFtZSBGaWx0ZXIgQ29tbWFuZHMgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1dLVVBfRkZPRkYgICAgICAgICAweEZGQzAzMDQ0ICAgICAgIC8qIFdha2UtVXAgRnJhbWUgRmlsdGVyIE9mZnNldHMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19XS1VQX0ZGQ1JDMCAgICAgICAgMHhGRkMwMzA0OCAgICAgICAvKiBXYWtlLVVwIEZyYW1lIEZpbHRlciAwLDEgQ1JDLTE2IFJlZ2lzdGVyICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfV0tVUF9GRkNSQzEgICAgICAgIDB4RkZDMDMwNEMgICAgICAgLyogV2FrZS1VcCBGcmFtZSBGaWx0ZXIgMiwzIENSQy0xNiBSZWdpc3RlciAgICAgICAgICAgICAqLworCisjZGVmaW5lIEVNQUNfU1lTQ1RMICAgICAgICAgICAgIDB4RkZDMDMwNjAgICAgICAgLyogRU1BQyBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1NZU1RBVCAgICAgICAgICAgICAweEZGQzAzMDY0ICAgICAgIC8qIEVNQUMgU3lzdGVtIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19SWF9TVEFUICAgICAgICAgICAgMHhGRkMwMzA2OCAgICAgICAvKiBSWCBDdXJyZW50IEZyYW1lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfUlhfU1RLWSAgICAgICAgICAgIDB4RkZDMDMwNkMgICAgICAgLyogUlggU3RpY2t5IEZyYW1lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1JYX0lSUUUgICAgICAgICAgICAweEZGQzAzMDcwICAgICAgIC8qIFJYIEZyYW1lIFN0YXR1cyBJbnRlcnJ1cHQgRW5hYmxlcyBSZWdpc3RlciAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19UWF9TVEFUICAgICAgICAgICAgMHhGRkMwMzA3NCAgICAgICAvKiBUWCBDdXJyZW50IEZyYW1lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfVFhfU1RLWSAgICAgICAgICAgIDB4RkZDMDMwNzggICAgICAgLyogVFggU3RpY2t5IEZyYW1lIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1RYX0lSUUUgICAgICAgICAgICAweEZGQzAzMDdDICAgICAgIC8qIFRYIEZyYW1lIFN0YXR1cyBJbnRlcnJ1cHQgRW5hYmxlcyBSZWdpc3RlciAgICAgICAgICAgKi8KKworI2RlZmluZSBFTUFDX01NQ19DVEwgICAgICAgICAgICAweEZGQzAzMDgwICAgICAgIC8qIE1NQyBDb3VudGVyIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19NTUNfUklSUVMgICAgICAgICAgMHhGRkMwMzA4NCAgICAgICAvKiBNTUMgUlggSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfTU1DX1JJUlFFICAgICAgICAgIDB4RkZDMDMwODggICAgICAgLyogTU1DIFJYIEludGVycnVwdCBFbmFibGVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX01NQ19USVJRUyAgICAgICAgICAweEZGQzAzMDhDICAgICAgIC8qIE1NQyBUWCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19NTUNfVElSUUUgICAgICAgICAgMHhGRkMwMzA5MCAgICAgICAvKiBNTUMgVFggSW50ZXJydXB0IEVuYWJsZXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRU1BQ19SWENfT0sgICAgICAgICAgICAgMHhGRkMwMzEwMCAgICAgICAvKiBSWCBGcmFtZSBTdWNjZXNzZnVsIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfUlhDX0ZDUyAgICAgICAgICAgIDB4RkZDMDMxMDQgICAgICAgLyogUlggRnJhbWUgRkNTIEZhaWx1cmUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1JYQ19BTElHTiAgICAgICAgICAweEZGQzAzMTA4ICAgICAgIC8qIFJYIEFsaWdubWVudCBFcnJvciBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19SWENfT0NURVQgICAgICAgICAgMHhGRkMwMzEwQyAgICAgICAvKiBSWCBPY3RldHMgU3VjY2Vzc2Z1bGx5IFJlY2VpdmVkIENvdW50ICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfUlhDX0RNQU9WRiAgICAgICAgIDB4RkZDMDMxMTAgICAgICAgLyogSW50ZXJuYWwgTUFDIFN1YmxheWVyIEVycm9yIFJYIEZyYW1lIENvdW50ICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1JYQ19VTklDU1QgICAgICAgICAweEZGQzAzMTE0ICAgICAgIC8qIFVuaWNhc3QgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19SWENfTVVMVEkgICAgICAgICAgMHhGRkMwMzExOCAgICAgICAvKiBNdWx0aWNhc3QgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfUlhDX0JST0FEICAgICAgICAgIDB4RkZDMDMxMUMgICAgICAgLyogQnJvYWRjYXN0IFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1JYQ19MTkVSUkkgICAgICAgICAweEZGQzAzMTIwICAgICAgIC8qIFJYIEZyYW1lIEluIFJhbmdlIEVycm9yIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19SWENfTE5FUlJPICAgICAgICAgMHhGRkMwMzEyNCAgICAgICAvKiBSWCBGcmFtZSBPdXQgT2YgUmFuZ2UgRXJyb3IgQ291bnQgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfUlhDX0xPTkcgICAgICAgICAgIDB4RkZDMDMxMjggICAgICAgLyogUlggRnJhbWUgVG9vIExvbmcgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1JYQ19NQUNDVEwgICAgICAgICAweEZGQzAzMTJDICAgICAgIC8qIE1BQyBDb250cm9sIFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19SWENfT1BDT0RFICAgICAgICAgMHhGRkMwMzEzMCAgICAgICAvKiBVbnN1cHBvcnRlZCBPcC1Db2RlIFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfUlhDX1BBVVNFICAgICAgICAgIDB4RkZDMDMxMzQgICAgICAgLyogTUFDIENvbnRyb2wgUGF1c2UgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1JYQ19BTExGUk0gICAgICAgICAweEZGQzAzMTM4ICAgICAgIC8qIE92ZXJhbGwgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19SWENfQUxMT0NUICAgICAgICAgMHhGRkMwMzEzQyAgICAgICAvKiBPdmVyYWxsIFJYIE9jdGV0IENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfUlhDX1RZUEVEICAgICAgICAgIDB4RkZDMDMxNDAgICAgICAgLyogVHlwZS9MZW5ndGggQ29uc2lzdGVudCBSWCBGcmFtZSBDb3VudCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1JYQ19TSE9SVCAgICAgICAgICAweEZGQzAzMTQ0ICAgICAgIC8qIFJYIEZyYW1lIEZyYWdtZW50IENvdW50IC0gQnl0ZSBDb3VudCB4IDwgNjQgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19SWENfRVE2NCAgICAgICAgICAgMHhGRkMwMzE0OCAgICAgICAvKiBHb29kIFJYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCB4ID0gNjQgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfUlhDX0xUMTI4ICAgICAgICAgIDB4RkZDMDMxNEMgICAgICAgLyogR29vZCBSWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgIDY0IDwgeCA8IDEyOCAgICAgICAqLworI2RlZmluZSBFTUFDX1JYQ19MVDI1NiAgICAgICAgICAweEZGQzAzMTUwICAgICAgIC8qIEdvb2QgUlggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IDEyOCA8PSB4IDwgMjU2ICAgICAgKi8KKyNkZWZpbmUgRU1BQ19SWENfTFQ1MTIgICAgICAgICAgMHhGRkMwMzE1NCAgICAgICAvKiBHb29kIFJYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCAyNTYgPD0geCA8IDUxMiAgICAgICovCisjZGVmaW5lIEVNQUNfUlhDX0xUMTAyNCAgICAgICAgIDB4RkZDMDMxNTggICAgICAgLyogR29vZCBSWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgNTEyIDw9IHggPCAxMDI0ICAgICAqLworI2RlZmluZSBFTUFDX1JYQ19HRTEwMjQgICAgICAgICAweEZGQzAzMTVDICAgICAgIC8qIEdvb2QgUlggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IHggPj0gMTAyNCAgICAgICAgICAgKi8KKworI2RlZmluZSBFTUFDX1RYQ19PSyAgICAgICAgICAgICAweEZGQzAzMTgwICAgICAgIC8qIFRYIEZyYW1lIFN1Y2Nlc3NmdWwgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfVFhDXzFDT0wgICAgICAgICAgIDB4RkZDMDMxODQgICAgICAgLyogVFggRnJhbWVzIFN1Y2Nlc3NmdWwgQWZ0ZXIgU2luZ2xlIENvbGxpc2lvbiBDb3VudCAgICAgKi8KKyNkZWZpbmUgRU1BQ19UWENfR1QxQ09MICAgICAgICAgMHhGRkMwMzE4OCAgICAgICAvKiBUWCBGcmFtZXMgU3VjY2Vzc2Z1bCBBZnRlciBNdWx0aXBsZSBDb2xsaXNpb25zIENvdW50ICAqLworI2RlZmluZSBFTUFDX1RYQ19PQ1RFVCAgICAgICAgICAweEZGQzAzMThDICAgICAgIC8qIFRYIE9jdGV0cyBTdWNjZXNzZnVsbHkgUmVjZWl2ZWQgQ291bnQgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfVFhDX0RFRkVSICAgICAgICAgIDB4RkZDMDMxOTAgICAgICAgLyogVFggRnJhbWUgRGVsYXllZCBEdWUgVG8gQnVzeSBDb3VudCAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19UWENfTEFURUNMICAgICAgICAgMHhGRkMwMzE5NCAgICAgICAvKiBMYXRlIFRYIENvbGxpc2lvbnMgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1RYQ19YU19DT0wgICAgICAgICAweEZGQzAzMTk4ICAgICAgIC8qIFRYIEZyYW1lIEZhaWxlZCBEdWUgVG8gRXhjZXNzaXZlIENvbGxpc2lvbnMgQ291bnQgICAgICovCisjZGVmaW5lIEVNQUNfVFhDX0RNQVVORCAgICAgICAgIDB4RkZDMDMxOUMgICAgICAgLyogSW50ZXJuYWwgTUFDIFN1YmxheWVyIEVycm9yIFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19UWENfQ1JTRVJSICAgICAgICAgMHhGRkMwMzFBMCAgICAgICAvKiBDYXJyaWVyIFNlbnNlIERlYXNzZXJ0ZWQgRHVyaW5nIFRYIEZyYW1lIENvdW50ICAgICAgICAqLworI2RlZmluZSBFTUFDX1RYQ19VTklDU1QgICAgICAgICAweEZGQzAzMUE0ICAgICAgIC8qIFVuaWNhc3QgVFggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfVFhDX01VTFRJICAgICAgICAgIDB4RkZDMDMxQTggICAgICAgLyogTXVsdGljYXN0IFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19UWENfQlJPQUQgICAgICAgICAgMHhGRkMwMzFBQyAgICAgICAvKiBCcm9hZGNhc3QgVFggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1RYQ19YU19ERlIgICAgICAgICAweEZGQzAzMUIwICAgICAgIC8qIFRYIEZyYW1lcyBXaXRoIEV4Y2Vzc2l2ZSBEZWZlcnJhbCBDb3VudCAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfVFhDX01BQ0NUTCAgICAgICAgIDB4RkZDMDMxQjQgICAgICAgLyogTUFDIENvbnRyb2wgVFggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19UWENfQUxMRlJNICAgICAgICAgMHhGRkMwMzFCOCAgICAgICAvKiBPdmVyYWxsIFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFTUFDX1RYQ19BTExPQ1QgICAgICAgICAweEZGQzAzMUJDICAgICAgIC8qIE92ZXJhbGwgVFggT2N0ZXQgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfVFhDX0VRNjQgICAgICAgICAgIDB4RkZDMDMxQzAgICAgICAgLyogR29vZCBUWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgeCA9IDY0ICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19UWENfTFQxMjggICAgICAgICAgMHhGRkMwMzFDNCAgICAgICAvKiBHb29kIFRYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCAgNjQgPCB4IDwgMTI4ICAgICAgICAqLworI2RlZmluZSBFTUFDX1RYQ19MVDI1NiAgICAgICAgICAweEZGQzAzMUM4ICAgICAgIC8qIEdvb2QgVFggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IDEyOCA8PSB4IDwgMjU2ICAgICAgICovCisjZGVmaW5lIEVNQUNfVFhDX0xUNTEyICAgICAgICAgIDB4RkZDMDMxQ0MgICAgICAgLyogR29vZCBUWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgMjU2IDw9IHggPCA1MTIgICAgICAgKi8KKyNkZWZpbmUgRU1BQ19UWENfTFQxMDI0ICAgICAgICAgMHhGRkMwMzFEMCAgICAgICAvKiBHb29kIFRYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCA1MTIgPD0geCA8IDEwMjQgICAgICAqLworI2RlZmluZSBFTUFDX1RYQ19HRTEwMjQgICAgICAgICAweEZGQzAzMUQ0ICAgICAgIC8qIEdvb2QgVFggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IHggPj0gMTAyNCAgICAgICAgICAgICovCisjZGVmaW5lIEVNQUNfVFhDX0FCT1JUICAgICAgICAgIDB4RkZDMDMxRDggICAgICAgLyogVG90YWwgVFggRnJhbWVzIEFib3J0ZWQgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogTGlzdGluZyBmb3IgSUVFRS1TdXBwb3J0ZWQgQ291bnQgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgRnJhbWVzUmVjZWl2ZWRPSyAgICAgICAgICAgICAgICBFTUFDX1JYQ19PSyAgICAgICAgLyogUlggRnJhbWUgU3VjY2Vzc2Z1bCBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgICAgICAgIEVNQUNfUlhDX0ZDUyAgICAgICAvKiBSWCBGcmFtZSBGQ1MgRmFpbHVyZSBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEFsaWdubWVudEVycm9ycyAgICAgICAgICAgICAgICAgRU1BQ19SWENfQUxJR04gICAgIC8qIFJYIEFsaWdubWVudCBFcnJvciBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT2N0ZXRzUmVjZWl2ZWRPSyAgICAgICAgICAgICAgICBFTUFDX1JYQ19PQ1RFVCAgICAgLyogUlggT2N0ZXRzIFN1Y2Nlc3NmdWxseSBSZWNlaXZlZCBDb3VudCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGcmFtZXNMb3N0RHVlVG9JbnRNQUNSY3ZFcnJvciAgIEVNQUNfUlhDX0RNQU9WRiAgICAvKiBJbnRlcm5hbCBNQUMgU3VibGF5ZXIgRXJyb3IgUlggRnJhbWUgQ291bnQgICAgICAgICAgICovCisjZGVmaW5lIFVuaWNhc3RGcmFtZXNSZWNlaXZlZE9LICAgICAgICAgRU1BQ19SWENfVU5JQ1NUICAgIC8qIFVuaWNhc3QgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyAgICAgICBFTUFDX1JYQ19NVUxUSSAgICAgLyogTXVsdGljYXN0IFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LICAgICAgIEVNQUNfUlhDX0JST0FEICAgICAvKiBCcm9hZGNhc3QgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEluUmFuZ2VMZW5ndGhFcnJvcnMgICAgICAgICAgICAgRU1BQ19SWENfTE5FUlJJICAgIC8qIFJYIEZyYW1lIEluIFJhbmdlIEVycm9yIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT3V0T2ZSYW5nZUxlbmd0aEZpZWxkICAgICAgICAgICBFTUFDX1JYQ19MTkVSUk8gICAgLyogUlggRnJhbWUgT3V0IE9mIFJhbmdlIEVycm9yIENvdW50ICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGcmFtZVRvb0xvbmdFcnJvcnMgICAgICAgICAgICAgIEVNQUNfUlhDX0xPTkcgICAgICAvKiBSWCBGcmFtZSBUb28gTG9uZyBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCAgICAgICAgRU1BQ19SWENfTUFDQ1RMICAgIC8qIE1BQyBDb250cm9sIFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVW5zdXBwb3J0ZWRPcGNvZGVzUmVjZWl2ZWQgICAgICBFTUFDX1JYQ19PUENPREUgICAgLyogVW5zdXBwb3J0ZWQgT3AtQ29kZSBSWCBGcmFtZSBDb3VudCAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQVVTRU1BQ0N0cmxGcmFtZXNSZWNlaXZlZCAgICAgIEVNQUNfUlhDX1BBVVNFICAgICAvKiBNQUMgQ29udHJvbCBQYXVzZSBSWCBGcmFtZSBDb3VudCAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZyYW1lc1JlY2VpdmVkQWxsICAgICAgICAgICAgICAgRU1BQ19SWENfQUxMRlJNICAgIC8qIE92ZXJhbGwgUlggRnJhbWUgQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgT2N0ZXRzUmVjZWl2ZWRBbGwgICAgICAgICAgICAgICBFTUFDX1JYQ19BTExPQ1QgICAgLyogT3ZlcmFsbCBSWCBPY3RldCBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUeXBlZEZyYW1lc1JlY2VpdmVkICAgICAgICAgICAgIEVNQUNfUlhDX1RZUEVEICAgICAvKiBUeXBlL0xlbmd0aCBDb25zaXN0ZW50IFJYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZyYW1lc0xlbkx0NjRSZWNlaXZlZCAgICAgICAgICAgRU1BQ19SWENfU0hPUlQgICAgIC8qIFJYIEZyYW1lIEZyYWdtZW50IENvdW50IC0gQnl0ZSBDb3VudCB4IDwgNjQgICAgICAgICAgKi8KKyNkZWZpbmUgRnJhbWVzTGVuRXE2NFJlY2VpdmVkICAgICAgICAgICBFTUFDX1JYQ19FUTY0ICAgICAgLyogR29vZCBSWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgeCA9IDY0ICAgICAgICAgICAgICAqLworI2RlZmluZSBGcmFtZXNMZW42NV8xMjdSZWNlaXZlZCAgICAgICAgIEVNQUNfUlhDX0xUMTI4ICAgICAvKiBHb29kIFJYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCAgNjQgPCB4IDwgMTI4ICAgICAgICovCisjZGVmaW5lIEZyYW1lc0xlbjEyOF8yNTVSZWNlaXZlZCAgICAgICAgRU1BQ19SWENfTFQyNTYgICAgIC8qIEdvb2QgUlggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IDEyOCA8PSB4IDwgMjU2ICAgICAgKi8KKyNkZWZpbmUgRnJhbWVzTGVuMjU2XzUxMVJlY2VpdmVkICAgICAgICBFTUFDX1JYQ19MVDUxMiAgICAgLyogR29vZCBSWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgMjU2IDw9IHggPCA1MTIgICAgICAqLworI2RlZmluZSBGcmFtZXNMZW41MTJfMTAyM1JlY2VpdmVkICAgICAgIEVNQUNfUlhDX0xUMTAyNCAgICAvKiBHb29kIFJYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCA1MTIgPD0geCA8IDEwMjQgICAgICovCisjZGVmaW5lIEZyYW1lc0xlbjEwMjRfTWF4UmVjZWl2ZWQgICAgICAgRU1BQ19SWENfR0UxMDI0ICAgIC8qIEdvb2QgUlggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IHggPj0gMTAyNCAgICAgICAgICAgKi8KKworI2RlZmluZSBGcmFtZXNUcmFuc21pdHRlZE9LICAgICAgICAgICAgIEVNQUNfVFhDX09LICAgICAgICAvKiBUWCBGcmFtZSBTdWNjZXNzZnVsIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNpbmdsZUNvbGxpc2lvbkZyYW1lcyAgICAgICAgICAgRU1BQ19UWENfMUNPTCAgICAgIC8qIFRYIEZyYW1lcyBTdWNjZXNzZnVsIEFmdGVyIFNpbmdsZSBDb2xsaXNpb24gQ291bnQgICAgKi8KKyNkZWZpbmUgTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMgICAgICAgICBFTUFDX1RYQ19HVDFDT0wgICAgLyogVFggRnJhbWVzIFN1Y2Nlc3NmdWwgQWZ0ZXIgTXVsdGlwbGUgQ29sbGlzaW9ucyBDb3VudCAqLworI2RlZmluZSBPY3RldHNUcmFuc21pdHRlZE9LICAgICAgICAgICAgIEVNQUNfVFhDX09DVEVUICAgICAvKiBUWCBPY3RldHMgU3VjY2Vzc2Z1bGx5IFJlY2VpdmVkIENvdW50ICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9ucyAgICAgRU1BQ19UWENfREVGRVIgICAgIC8qIFRYIEZyYW1lIERlbGF5ZWQgRHVlIFRvIEJ1c3kgQ291bnQgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTGF0ZUNvbGxpc2lvbnMgICAgICAgICAgICAgICAgICBFTUFDX1RYQ19MQVRFQ0wgICAgLyogTGF0ZSBUWCBDb2xsaXNpb25zIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGcmFtZXNBYm9ydGVkRHVlVG9YU0NvbGxzICAgICAgIEVNQUNfVFhDX1hTX0NPTCAgICAvKiBUWCBGcmFtZSBGYWlsZWQgRHVlIFRvIEV4Y2Vzc2l2ZSBDb2xsaXNpb25zIENvdW50ICAgICovCisjZGVmaW5lIEZyYW1lc0xvc3REdWVUb0ludE1hY1htaXRFcnJvciAgRU1BQ19UWENfRE1BVU5EICAgIC8qIEludGVybmFsIE1BQyBTdWJsYXllciBFcnJvciBUWCBGcmFtZSBDb3VudCAgICAgICAgICAgKi8KKyNkZWZpbmUgQ2FycmllclNlbnNlRXJyb3JzICAgICAgICAgICAgICBFTUFDX1RYQ19DUlNFUlIgICAgLyogQ2FycmllciBTZW5zZSBEZWFzc2VydGVkIER1cmluZyBUWCBGcmFtZSBDb3VudCAgICAgICAqLworI2RlZmluZSBVbmljYXN0RnJhbWVzWG1pdHRlZE9LICAgICAgICAgIEVNQUNfVFhDX1VOSUNTVCAgICAvKiBVbmljYXN0IFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyAgICAgICAgRU1BQ19UWENfTVVMVEkgICAgIC8qIE11bHRpY2FzdCBUWCBGcmFtZSBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LICAgICAgICBFTUFDX1RYQ19CUk9BRCAgICAgLyogQnJvYWRjYXN0IFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGcmFtZXNXaXRoRXhjZXNzaXZlRGVmZXJyYWwgICAgIEVNQUNfVFhDX1hTX0RGUiAgICAvKiBUWCBGcmFtZXMgV2l0aCBFeGNlc3NpdmUgRGVmZXJyYWwgQ291bnQgICAgICAgICAgICAgICovCisjZGVmaW5lIE1BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCAgICAgRU1BQ19UWENfTUFDQ1RMICAgIC8qIE1BQyBDb250cm9sIFRYIEZyYW1lIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRnJhbWVzVHJhbnNtaXR0ZWRBbGwgICAgICAgICAgICBFTUFDX1RYQ19BTExGUk0gICAgLyogT3ZlcmFsbCBUWCBGcmFtZSBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBPY3RldHNUcmFuc21pdHRlZEFsbCAgICAgICAgICAgIEVNQUNfVFhDX0FMTE9DVCAgICAvKiBPdmVyYWxsIFRYIE9jdGV0IENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZyYW1lc0xlbkVxNjRUcmFuc21pdHRlZCAgICAgICAgRU1BQ19UWENfRVE2NCAgICAgIC8qIEdvb2QgVFggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IHggPSA2NCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRnJhbWVzTGVuNjVfMTI3VHJhbnNtaXR0ZWQgICAgICBFTUFDX1RYQ19MVDEyOCAgICAgLyogR29vZCBUWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgIDY0IDwgeCA8IDEyOCAgICAgICAqLworI2RlZmluZSBGcmFtZXNMZW4xMjhfMjU1VHJhbnNtaXR0ZWQgICAgIEVNQUNfVFhDX0xUMjU2ICAgICAvKiBHb29kIFRYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCAxMjggPD0geCA8IDI1NiAgICAgICovCisjZGVmaW5lIEZyYW1lc0xlbjI1Nl81MTFUcmFuc21pdHRlZCAgICAgRU1BQ19UWENfTFQ1MTIgICAgIC8qIEdvb2QgVFggRnJhbWUgQ291bnQgLSBCeXRlIENvdW50IDI1NiA8PSB4IDwgNTEyICAgICAgKi8KKyNkZWZpbmUgRnJhbWVzTGVuNTEyXzEwMjNUcmFuc21pdHRlZCAgICBFTUFDX1RYQ19MVDEwMjQgICAgLyogR29vZCBUWCBGcmFtZSBDb3VudCAtIEJ5dGUgQ291bnQgNTEyIDw9IHggPCAxMDI0ICAgICAqLworI2RlZmluZSBGcmFtZXNMZW4xMDI0X01heFRyYW5zbWl0dGVkICAgIEVNQUNfVFhDX0dFMTAyNCAgICAvKiBHb29kIFRYIEZyYW1lIENvdW50IC0gQnl0ZSBDb3VudCB4ID49IDEwMjQgICAgICAgICAgICovCisjZGVmaW5lIFR4QWJvcnRlZEZyYW1lcyAgICAgICAgICAgICAgICAgRU1BQ19UWENfQUJPUlQgICAgIC8qIFRvdGFsIFRYIEZyYW1lcyBBYm9ydGVkIENvdW50ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBTeXN0ZW0gTU1SIFJlZ2lzdGVyIEJpdHMgQW5kIE1hY3JvcworKioKKyoqIERpc2NsYWltZXI6CUFsbCBtYWNyb3MgYXJlIGludGVuZGVkIHRvIG1ha2UgQyBhbmQgQXNzZW1ibHkgY29kZSBtb3JlIHJlYWRhYmxlLgorKioJCQkJVXNlIHRoZXNlIG1hY3JvcyBjYXJlZnVsbHksIGFzIGFueSB0aGF0IGRvIGxlZnQgc2hpZnRzIGZvciBmaWVsZAorKioJCQkJZGVwb3NpdGluZyB3aWxsIHJlc3VsdCBpbiB0aGUgbG93ZXIgb3JkZXIgYml0cyBiZWluZyBkZXN0cm95ZWQuICBBbnkKKyoqCQkJCW1hY3JvIHRoYXQgc2hpZnRzIGxlZnQgdG8gcHJvcGVybHkgcG9zaXRpb24gdGhlIGJpdC1maWVsZCBzaG91bGQgYmUKKyoqCQkJCXVzZWQgYXMgcGFydCBvZiBhbiBPUiB0byBpbml0aWFsaXplIGEgcmVnaXN0ZXIgYW5kIE5PVCBhcyBhIGR5bmFtaWMKKyoqCQkJCW1vZGlmaWVyIFVOTEVTUyB0aGUgbG93ZXIgb3JkZXIgYml0cyBhcmUgc2F2ZWQgYW5kIE9SZWQgYmFjayBpbiB3aGVuCisqKgkJCQl0aGUgbWFjcm8gaXMgdXNlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogIEVUSEVSTkVUIDEwLzEwMCBDT05UUk9MTEVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEVNQUNfT1BNT0RFIE1hc2tzICovCisKKyNkZWZpbmUJUkUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCUFTVFAgICAgICAgICAgICAgICAweDAwMDAwMDAyICAgICAvKiBFbmFibGUgQXV0b21hdGljIFBhZCBTdHJpcHBpbmcgT24gUlggRnJhbWVzICAgICAgICAqLworI2RlZmluZQlIVSAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMCAgICAgLyogSGFzaCBGaWx0ZXIgVW5pY2FzdCBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJSE0gICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAgICAgIC8qIEhhc2ggRmlsdGVyIE11bHRpY2FzdCBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVBBTSAgICAgICAgICAgICAgICAweDAwMDAwMDQwICAgICAvKiBQYXNzLUFsbC1NdWx0aWNhc3QgTW9kZSBFbmFibGUgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlQUiAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MCAgICAgLyogUHJvbWlzY3VvdXMgTW9kZSBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJSUZFICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAgICAgIC8qIEludmVyc2UgRmlsdGVyaW5nIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCURCRiAgICAgICAgICAgICAgICAweDAwMDAwMjAwICAgICAvKiBEaXNhYmxlIEJyb2FkY2FzdCBGcmFtZSBSZWNlcHRpb24gICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlQQkYgICAgICAgICAgICAgICAgMHgwMDAwMDQwMCAgICAgLyogUGFzcyBCYWQgRnJhbWVzIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJUFNGICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAgICAgIC8qIFBhc3MgU2hvcnQgRnJhbWVzIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVJBRiAgICAgICAgICAgICAgICAweDAwMDAxMDAwICAgICAvKiBSZWNlaXZlLUFsbCBNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlURSAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMCAgICAgLyogVHJhbnNtaXR0ZXIgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJRFRYUEFEICAgICAgICAgICAgIDB4MDAwMjAwMDAgICAgIC8qIERpc2FibGUgQXV0b21hdGljIFRYIFBhZGRpbmcgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCURUWENSQyAgICAgICAgICAgICAweDAwMDQwMDAwICAgICAvKiBEaXNhYmxlIEF1dG9tYXRpYyBUWCBDUkMgR2VuZXJhdGlvbiAgICAgICAgICAgICAgICAqLworI2RlZmluZQlEQyAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMCAgICAgLyogRGVmZXJyYWwgQ2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJQk9MTVQgICAgICAgICAgICAgIDB4MDAzMDAwMDAgICAgIC8qIEJhY2stT2ZmIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCUJPTE1UXzEwICAgICAgICAgICAweDAwMDAwMDAwICAgICAvKgkJMTAtYml0IHJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCUJPTE1UXzggICAgICAgICAgICAweDAwMTAwMDAwICAgICAvKgkJOC1iaXQgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCUJPTE1UXzQgICAgICAgICAgICAweDAwMjAwMDAwICAgICAvKgkJNC1iaXQgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCUJPTE1UXzEgICAgICAgICAgICAweDAwMzAwMDAwICAgICAvKgkJMS1iaXQgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCURSVFkgICAgICAgICAgICAgICAweDAwNDAwMDAwICAgICAvKiBEaXNhYmxlIFRYIFJldHJ5IE9uIENvbGxpc2lvbiAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlMQ1RSRSAgICAgICAgICAgICAgMHgwMDgwMDAwMCAgICAgLyogRW5hYmxlIFRYIFJldHJ5IE9uIExhdGUgQ29sbGlzaW9uICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJUk1JSSAgICAgICAgICAgICAgIDB4MDEwMDAwMDAgICAgIC8qIFJNSUkvTUlJKiBNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVJNSUlfMTAgICAgICAgICAgICAweDAyMDAwMDAwICAgICAvKiBTcGVlZCBTZWxlY3QgZm9yIFJNSUkgUG9ydCAoMTBNQml0LzEwME1CaXQqKSAgICAgICAqLworI2RlZmluZQlGRE1PREUgICAgICAgICAgICAgMHgwNDAwMDAwMCAgICAgLyogRHVwbGV4IE1vZGUgRW5hYmxlIChGdWxsL0hhbGYqKSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJTEIgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAgICAgIC8qIEludGVybmFsIExvb3BiYWNrIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCURSTyAgICAgICAgICAgICAgICAweDEwMDAwMDAwICAgICAvKiBEaXNhYmxlIFJlY2VpdmUgT3duIEZyYW1lcyAoSGFsZi1EdXBsZXggTW9kZSkgICAgICAqLworCisvKiBFTUFDX1NUQUFERCBNYXNrcyAqLworCisjZGVmaW5lCVNUQUJVU1kgICAgICAgICAgICAweDAwMDAwMDAxICAgICAvKiBJbml0aWF0ZSBTdGF0aW9uIE1ndCBSZWcgQWNjZXNzIC8gU1RBIEJ1c3kgU3RhdCAgICAqLworI2RlZmluZQlTVEFPUCAgICAgICAgICAgICAgMHgwMDAwMDAwMiAgICAgLyogU3RhdGlvbiBNYW5hZ2VtZW50IE9wZXJhdGlvbiBDb2RlIChXcml0ZS9SZWFkKikgICAgKi8KKyNkZWZpbmUJU1RBRElTUFJFICAgICAgICAgIDB4MDAwMDAwMDQgICAgIC8qIERpc2FibGUgUHJlYW1ibGUgR2VuZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVNUQUlFICAgICAgICAgICAgICAweDAwMDAwMDA4ICAgICAvKiBTdGF0aW9uIE1ndC4gVHJhbnNmZXIgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAqLworI2RlZmluZQlSRUdBRCAgICAgICAgICAgICAgMHgwMDAwMDdDMCAgICAgLyogU1RBIFJlZ2lzdGVyIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJUEhZQUQgICAgICAgICAgICAgIDB4MDAwMEY4MDAgICAgIC8qIFBIWSBEZXZpY2UgQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUJU0VUX1JFR0FEKHgpICgoKHgpJjB4MUYpPDwgIDYgKSAgIC8qIFNldCBTVEEgUmVnaXN0ZXIgQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVNFVF9QSFlBRCh4KSAoKCh4KSYweDFGKTw8IDExICkgICAvKiBTZXQgUEhZIERldmljZSBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBFTUFDX1NUQURBVCBNYXNrICovCisKKyNkZWZpbmUJU1RBREFUQSAgICAgICAgICAgIDB4MDAwMEZGRkYgICAgIC8qIFN0YXRpb24gTWFuYWdlbWVudCBEYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIEVNQUNfRkxDIE1hc2tzICovCisKKyNkZWZpbmUJRkxDQlVTWSAgICAgICAgICAgIDB4MDAwMDAwMDEgICAgIC8qIFNlbmQgRmxvdyBDdHJsIEZyYW1lIC8gRmxvdyBDdHJsIEJ1c3kgU3RhdHVzICAgICAgICovCisjZGVmaW5lCUZMQ0UgICAgICAgICAgICAgICAweDAwMDAwMDAyICAgICAvKiBGbG93IENvbnRyb2wgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlQQ0YgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgICAgLyogUGFzcyBDb250cm9sIEZyYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJQktQUlNFTiAgICAgICAgICAgIDB4MDAwMDAwMDggICAgIC8qIEVuYWJsZSBCYWNrcHJlc3N1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCUZMQ1BBVVNFICAgICAgICAgICAweEZGRkYwMDAwICAgICAvKiBQYXVzZSBUaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lCVNFVF9GTENQQVVTRSh4KSAoKCh4KSYweEZGRkYpPDwgMTYpIC8qIFNldCBQYXVzZSBUaW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBFTUFDX1dLVVBfQ1RMIE1hc2tzICovCisKKyNkZWZpbmUJQ0FQV0tGUk0gICAgICAgICAgIDB4MDAwMDAwMDEgICAgLyogQ2FwdHVyZSBXYWtlLVVwIEZyYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCU1QS0UgICAgICAgICAgICAgICAweDAwMDAwMDAyICAgIC8qIE1hZ2ljIFBhY2tldCBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSV0tFICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgICAvKiBSZW1vdGUgV2FrZS1VcCBGcmFtZSBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJR1VXS0UgICAgICAgICAgICAgIDB4MDAwMDAwMDggICAgLyogR2xvYmFsIFVuaWNhc3QgV2FrZSBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCU1QS1MgICAgICAgICAgICAgICAweDAwMDAwMDIwICAgIC8qIE1hZ2ljIFBhY2tldCBSZWNlaXZlZCBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSV0tTICAgICAgICAgICAgICAgMHgwMDAwMEYwMCAgICAvKiBXYWtlLVVwIEZyYW1lIFJlY2VpdmVkIFN0YXR1cywgRmlsdGVycyAzOjAgICAgICAgICAgKi8KKworLyogRU1BQ19XS1VQX0ZGQ01EIE1hc2tzICovCisKKyNkZWZpbmUJV0YwX0UgICAgICAgICAgICAgIDB4MDAwMDAwMDEgICAgLyogRW5hYmxlIFdha2UtVXAgRmlsdGVyIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlXRjBfVCAgICAgICAgICAgICAgMHgwMDAwMDAwOCAgICAvKiBXYWtlLVVwIEZpbHRlciAwIEFkZHIgVHlwZSAoTXVsdGljYXN0L1VuaWNhc3QqKSAgICAgICovCisjZGVmaW5lCVdGMV9FICAgICAgICAgICAgICAweDAwMDAwMTAwICAgIC8qIEVuYWJsZSBXYWtlLVVwIEZpbHRlciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJV0YxX1QgICAgICAgICAgICAgIDB4MDAwMDA4MDAgICAgLyogV2FrZS1VcCBGaWx0ZXIgMSBBZGRyIFR5cGUgKE11bHRpY2FzdC9VbmljYXN0KikgICAgICAqLworI2RlZmluZQlXRjJfRSAgICAgICAgICAgICAgMHgwMDAxMDAwMCAgICAvKiBFbmFibGUgV2FrZS1VcCBGaWx0ZXIgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVdGMl9UICAgICAgICAgICAgICAweDAwMDgwMDAwICAgIC8qIFdha2UtVXAgRmlsdGVyIDIgQWRkciBUeXBlIChNdWx0aWNhc3QvVW5pY2FzdCopICAgICAgKi8KKyNkZWZpbmUJV0YzX0UgICAgICAgICAgICAgIDB4MDEwMDAwMDAgICAgLyogRW5hYmxlIFdha2UtVXAgRmlsdGVyIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlXRjNfVCAgICAgICAgICAgICAgMHgwODAwMDAwMCAgICAvKiBXYWtlLVVwIEZpbHRlciAzIEFkZHIgVHlwZSAoTXVsdGljYXN0L1VuaWNhc3QqKSAgICAgICovCisKKy8qIEVNQUNfV0tVUF9GRk9GRiBNYXNrcyAqLworCisjZGVmaW5lCVdGMF9PRkYgICAgICAgICAgICAweDAwMDAwMEZGICAgIC8qIFdha2UtVXAgRmlsdGVyIDAgUGF0dGVybiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJV0YxX09GRiAgICAgICAgICAgIDB4MDAwMEZGMDAgICAgLyogV2FrZS1VcCBGaWx0ZXIgMSBQYXR0ZXJuIE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlXRjJfT0ZGICAgICAgICAgICAgMHgwMEZGMDAwMCAgICAvKiBXYWtlLVVwIEZpbHRlciAyIFBhdHRlcm4gT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVdGM19PRkYgICAgICAgICAgICAweEZGMDAwMDAwICAgIC8qIFdha2UtVXAgRmlsdGVyIDMgUGF0dGVybiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZQlTRVRfV0YwX09GRih4KSAoKCh4KSYweEZGKTw8ICAwICkgLyogU2V0IFdha2UtVXAgRmlsdGVyIDAgQnl0ZSBPZmZzZXQgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVNFVF9XRjFfT0ZGKHgpICgoKHgpJjB4RkYpPDwgIDggKSAvKiBTZXQgV2FrZS1VcCBGaWx0ZXIgMSBCeXRlIE9mZnNldCAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU0VUX1dGMl9PRkYoeCkgKCgoeCkmMHhGRik8PCAxNiApIC8qIFNldCBXYWtlLVVwIEZpbHRlciAyIEJ5dGUgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlTRVRfV0YzX09GRih4KSAoKCh4KSYweEZGKTw8IDI0ICkgLyogU2V0IFdha2UtVXAgRmlsdGVyIDMgQnl0ZSBPZmZzZXQgICAgICAgICAgICAgICAgICAgICovCisvKiBTZXQgQUxMIE9mZnNldHMgKi8KKyNkZWZpbmUJU0VUX1dGX09GRlMoeDAseDEseDIseDMpIChTRVRfV0YwX09GRigoeDApKXxTRVRfV0YxX09GRigoeDEpKXxTRVRfV0YyX09GRigoeDIpKXxTRVRfV0YzX09GRigoeDMpKSkKKworLyogRU1BQ19XS1VQX0ZGQ1JDMCBNYXNrcyAqLworCisjZGVmaW5lCVdGMF9DUkMgICAgICAgICAgIDB4MDAwMEZGRkYgICAgLyogV2FrZS1VcCBGaWx0ZXIgMCBQYXR0ZXJuIENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVdGMV9DUkMgICAgICAgICAgIDB4RkZGRjAwMDAgICAgLyogV2FrZS1VcCBGaWx0ZXIgMSBQYXR0ZXJuIENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUJU0VUX1dGMF9DUkMoeCkgKCgoeCkmMHhGRkZGKTw8ICAgMCApIC8qIFNldCBXYWtlLVVwIEZpbHRlciAwIFRhcmdldCBDUkMgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU0VUX1dGMV9DUkMoeCkgKCgoeCkmMHhGRkZGKTw8ICAxNiApIC8qIFNldCBXYWtlLVVwIEZpbHRlciAxIFRhcmdldCBDUkMgICAgICAgICAgICAgICAgICAgKi8KKworLyogRU1BQ19XS1VQX0ZGQ1JDMSBNYXNrcyAqLworCisjZGVmaW5lCVdGMl9DUkMgICAgICAgICAgIDB4MDAwMEZGRkYgICAgLyogV2FrZS1VcCBGaWx0ZXIgMiBQYXR0ZXJuIENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVdGM19DUkMgICAgICAgICAgIDB4RkZGRjAwMDAgICAgLyogV2FrZS1VcCBGaWx0ZXIgMyBQYXR0ZXJuIENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUJU0VUX1dGMl9DUkMoeCkgKCgoeCkmMHhGRkZGKTw8ICAgMCApIC8qIFNldCBXYWtlLVVwIEZpbHRlciAyIFRhcmdldCBDUkMgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU0VUX1dGM19DUkMoeCkgKCgoeCkmMHhGRkZGKTw8ICAxNiApIC8qIFNldCBXYWtlLVVwIEZpbHRlciAzIFRhcmdldCBDUkMgICAgICAgICAgICAgICAgICAgKi8KKworLyogRU1BQ19TWVNDVEwgTWFza3MgKi8KKworI2RlZmluZQlQSFlJRSAgICAgICAgICAgICAweDAwMDAwMDAxICAgIC8qIFBIWV9JTlQgSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWERXQSAgICAgICAgICAgICAweDAwMDAwMDAyICAgIC8qIFJlY2VpdmUgRnJhbWUgRE1BIFdvcmQgQWxpZ25tZW50IChPZGQvRXZlbiopICAgICAgICAgICAqLworI2RlZmluZQlSWENLUyAgICAgICAgICAgICAweDAwMDAwMDA0ICAgIC8qIEVuYWJsZSBSWCBGcmFtZSBUQ1AvVURQIENoZWNrc3VtIENvbXB1dGF0aW9uICAgICAgICAgICAqLworI2RlZmluZQlNRENESVYgICAgICAgICAgICAweDAwMDAzRjAwICAgIC8qIFNDTEs6TURDIENsb2NrIERpdmlzb3IgW01EQz1TQ0xLLygyKihOKzEpKV0gICAgICAgICAgICAqLworCisjZGVmaW5lCVNFVF9NRENESVYoeCkgKCgoeCkmMHgzRik8PCA4KSAgIC8qIFNldCBNREMgQ2xvY2sgRGl2aXNvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIEVNQUNfU1lTVEFUIE1hc2tzICovCisKKyNkZWZpbmUJUEhZSU5UICAgICAgICAgICAgMHgwMDAwMDAwMSAgICAvKiBQSFlfSU5UIEludGVycnVwdCBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJTU1DSU5UICAgICAgICAgICAgMHgwMDAwMDAwMiAgICAvKiBNTUMgQ291bnRlciBJbnRlcnJ1cHQgU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJUlhGU0lOVCAgICAgICAgICAgMHgwMDAwMDAwNCAgICAvKiBSWCBGcmFtZS1TdGF0dXMgSW50ZXJydXB0IFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhGU0lOVCAgICAgICAgICAgMHgwMDAwMDAwOCAgICAvKiBUWCBGcmFtZS1TdGF0dXMgSW50ZXJydXB0IFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJV0FLRURFVCAgICAgICAgICAgMHgwMDAwMDAxMCAgICAvKiBXYWtlLVVwIERldGVjdGVkIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJUlhETUFFUlIgICAgICAgICAgMHgwMDAwMDAyMCAgICAvKiBSWCBETUEgRGlyZWN0aW9uIEVycm9yIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhETUFFUlIgICAgICAgICAgMHgwMDAwMDA0MCAgICAvKiBUWCBETUEgRGlyZWN0aW9uIEVycm9yIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJU1RNRE9ORSAgICAgICAgICAgMHgwMDAwMDA4MCAgICAvKiBTdGF0aW9uIE1ndC4gVHJhbnNmZXIgRG9uZSBJbnRlcnJ1cHQgU3RhdHVzICAgICAgICAgICAgKi8KKworLyogRU1BQ19SWF9TVEFULCBFTUFDX1JYX1NUS1ksIGFuZCBFTUFDX1JYX0lSUUUgTWFza3MgKi8KKworI2RlZmluZQlSWF9GUkxFTiAgICAgICAgICAweDAwMDAwN0ZGICAgIC8qIEZyYW1lIExlbmd0aCBJbiBCeXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9DT01QICAgICAgICAgICAweDAwMDAxMDAwICAgIC8qIFJYIEZyYW1lIENvbXBsZXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9PSyAgICAgICAgICAgICAweDAwMDAyMDAwICAgIC8qIFJYIEZyYW1lIFJlY2VpdmVkIFdpdGggTm8gRXJyb3JzICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9MT05HICAgICAgICAgICAweDAwMDA0MDAwICAgIC8qIFJYIEZyYW1lIFRvbyBMb25nIEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9BTElHTiAgICAgICAgICAweDAwMDA4MDAwICAgIC8qIFJYIEZyYW1lIEFsaWdubWVudCBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9DUkMgICAgICAgICAgICAweDAwMDEwMDAwICAgIC8qIFJYIEZyYW1lIENSQyBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9MRU4gICAgICAgICAgICAweDAwMDIwMDAwICAgIC8qIFJYIEZyYW1lIExlbmd0aCBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9GUkFHICAgICAgICAgICAweDAwMDQwMDAwICAgIC8qIFJYIEZyYW1lIEZyYWdtZW50IEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9BRERSICAgICAgICAgICAweDAwMDgwMDAwICAgIC8qIFJYIEZyYW1lIEFkZHJlc3MgRmlsdGVyIEZhaWxlZCBFcnJvciAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9ETUFPICAgICAgICAgICAweDAwMTAwMDAwICAgIC8qIFJYIEZyYW1lIERNQSBPdmVycnVuIEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9QSFkgICAgICAgICAgICAweDAwMjAwMDAwICAgIC8qIFJYIEZyYW1lIFBIWSBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9MQVRFICAgICAgICAgICAweDAwNDAwMDAwICAgIC8qIFJYIEZyYW1lIExhdGUgQ29sbGlzaW9uIEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9SQU5HRSAgICAgICAgICAweDAwODAwMDAwICAgIC8qIFJYIEZyYW1lIExlbmd0aCBGaWVsZCBPdXQgb2YgUmFuZ2UgRXJyb3IgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9NVUxUSSAgICAgICAgICAweDAxMDAwMDAwICAgIC8qIFJYIE11bHRpY2FzdCBGcmFtZSBJbmRpY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9CUk9BRCAgICAgICAgICAweDAyMDAwMDAwICAgIC8qIFJYIEJyb2FkY2FzdCBGcmFtZSBJbmRpY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9DVEwgICAgICAgICAgICAweDA0MDAwMDAwICAgIC8qIFJYIENvbnRyb2wgRnJhbWUgSW5kaWNhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9VQ1RMICAgICAgICAgICAweDA4MDAwMDAwICAgIC8qIFVuc3VwcG9ydGVkIFJYIENvbnRyb2wgRnJhbWUgSW5kaWNhdG9yICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9UWVBFICAgICAgICAgICAweDEwMDAwMDAwICAgIC8qIFJYIFR5cGVkIEZyYW1lIEluZGljYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9WTEFOMSAgICAgICAgICAweDIwMDAwMDAwICAgIC8qIFJYIFZMQU4xIEZyYW1lIEluZGljYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9WTEFOMiAgICAgICAgICAweDQwMDAwMDAwICAgIC8qIFJYIFZMQU4yIEZyYW1lIEluZGljYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9BQ0NFUFQgICAgICAgICAweDgwMDAwMDAwICAgIC8qIFJYIEZyYW1lIEFjY2VwdGVkIEluZGljYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiAgRU1BQ19UWF9TVEFULCBFTUFDX1RYX1NUS1ksIGFuZCBFTUFDX1RYX0lSUUUgTWFza3MgICovCisKKyNkZWZpbmUJVFhfQ09NUCAgICAgICAgICAgMHgwMDAwMDAwMSAgICAvKiBUWCBGcmFtZSBDb21wbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfT0sgICAgICAgICAgICAgMHgwMDAwMDAwMiAgICAvKiBUWCBGcmFtZSBTZW50IFdpdGggTm8gRXJyb3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfRUNPTEwgICAgICAgICAgMHgwMDAwMDAwNCAgICAvKiBUWCBGcmFtZSBFeGNlc3NpdmUgQ29sbGlzaW9uIEVycm9yICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTEFURSAgICAgICAgICAgMHgwMDAwMDAwOCAgICAvKiBUWCBGcmFtZSBMYXRlIENvbGxpc2lvbiBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfRE1BVSAgICAgICAgICAgMHgwMDAwMDAxMCAgICAvKiBUWCBGcmFtZSBETUEgVW5kZXJydW4gRXJyb3IgKFNUQVQpICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTUFDRSAgICAgICAgICAgMHgwMDAwMDAxMCAgICAvKiBJbnRlcm5hbCBNQUMgRXJyb3IgRGV0ZWN0ZWQgKFNUS1kgYW5kIElSUUUpICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfRURFRkVSICAgICAgICAgMHgwMDAwMDAyMCAgICAvKiBUWCBGcmFtZSBFeGNlc3NpdmUgRGVmZXJyYWwgRXJyb3IgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfQlJPQUQgICAgICAgICAgMHgwMDAwMDA0MCAgICAvKiBUWCBCcm9hZGNhc3QgRnJhbWUgSW5kaWNhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTVVMVEkgICAgICAgICAgMHgwMDAwMDA4MCAgICAvKiBUWCBNdWx0aWNhc3QgRnJhbWUgSW5kaWNhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfQ0NOVCAgICAgICAgICAgMHgwMDAwMEYwMCAgICAvKiBUWCBGcmFtZSBDb2xsaXNpb24gQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfREVGRVIgICAgICAgICAgMHgwMDAwMTAwMCAgICAvKiBUWCBGcmFtZSBEZWZlcnJlZCBJbmRpY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfQ1JTICAgICAgICAgICAgMHgwMDAwMjAwMCAgICAvKiBUWCBGcmFtZSBDYXJyaWVyIFNlbnNlIE5vdCBBc3NlcnRlZCBFcnJvciAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTE9TUyAgICAgICAgICAgMHgwMDAwNDAwMCAgICAvKiBUWCBGcmFtZSBDYXJyaWVyIExvc3QgRHVyaW5nIFRYIEVycm9yICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfUkVUUlkgICAgICAgICAgMHgwMDAwODAwMCAgICAvKiBUWCBGcmFtZSBTdWNjZXNzZnVsIEFmdGVyIFJldHJ5ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfRlJMRU4gICAgICAgICAgMHgwN0ZGMDAwMCAgICAvKiBUWCBGcmFtZSBMZW5ndGggKEJ5dGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogRU1BQ19NTUNfQ1RMIE1hc2tzICovCisjZGVmaW5lCVJTVEMgICAgICAgICAgICAgIDB4MDAwMDAwMDEgICAgLyogUmVzZXQgQWxsIENvdW50ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCUNST0xMICAgICAgICAgICAgIDB4MDAwMDAwMDIgICAgLyogQ291bnRlciBSb2xsLU92ZXIgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCUNDT1IgICAgICAgICAgICAgIDB4MDAwMDAwMDQgICAgLyogQ291bnRlciBDbGVhci1Pbi1SZWFkIE1vZGUgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCU1NQ0UgICAgICAgICAgICAgIDB4MDAwMDAwMDggICAgLyogRW5hYmxlIE1NQyBDb3VudGVyIE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIEVNQUNfTU1DX1JJUlFTIGFuZCBFTUFDX01NQ19SSVJRRSBNYXNrcyAqLworI2RlZmluZQlSWF9PS19DTlQgICAgICAgICAweDAwMDAwMDAxICAgIC8qIFJYIEZyYW1lcyBSZWNlaXZlZCBXaXRoIE5vIEVycm9ycyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9GQ1NfQ05UICAgICAgICAweDAwMDAwMDAyICAgIC8qIFJYIEZyYW1lcyBXL0ZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9ycyAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9BTElHTl9DTlQgICAgICAweDAwMDAwMDA0ICAgIC8qIFJYIEZyYW1lcyBXaXRoIEFsaWdubWVudCBFcnJvcnMgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9PQ1RFVF9DTlQgICAgICAweDAwMDAwMDA4ICAgIC8qIFJYIE9jdGV0cyBSZWNlaXZlZCBPSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9MT1NUX0NOVCAgICAgICAweDAwMDAwMDEwICAgIC8qIFJYIEZyYW1lcyBMb3N0IER1ZSBUbyBJbnRlcm5hbCBNQUMgUlggRXJyb3IgICAgICAgICAgICAqLworI2RlZmluZQlSWF9VTklfQ05UICAgICAgICAweDAwMDAwMDIwICAgIC8qIFVuaWNhc3QgUlggRnJhbWVzIFJlY2VpdmVkIE9LICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9NVUxUSV9DTlQgICAgICAweDAwMDAwMDQwICAgIC8qIE11bHRpY2FzdCBSWCBGcmFtZXMgUmVjZWl2ZWQgT0sgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9CUk9BRF9DTlQgICAgICAweDAwMDAwMDgwICAgIC8qIEJyb2FkY2FzdCBSWCBGcmFtZXMgUmVjZWl2ZWQgT0sgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9JUkxfQ05UICAgICAgICAweDAwMDAwMTAwICAgIC8qIFJYIEZyYW1lcyBXaXRoIEluLVJhbmdlIExlbmd0aCBFcnJvcnMgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9PUkxfQ05UICAgICAgICAweDAwMDAwMjAwICAgIC8qIFJYIEZyYW1lcyBXaXRoIE91dC1PZi1SYW5nZSBMZW5ndGggRXJyb3JzICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9MT05HX0NOVCAgICAgICAweDAwMDAwNDAwICAgIC8qIFJYIEZyYW1lcyBXaXRoIEZyYW1lIFRvbyBMb25nIEVycm9ycyAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9NQUNDVExfQ05UICAgICAweDAwMDAwODAwICAgIC8qIE1BQyBDb250cm9sIFJYIEZyYW1lcyBSZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9PUENPREVfQ1RMICAgICAweDAwMDAxMDAwICAgIC8qIFVuc3VwcG9ydGVkIE9wLUNvZGUgUlggRnJhbWVzIFJlY2VpdmVkICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9QQVVTRV9DTlQgICAgICAweDAwMDAyMDAwICAgIC8qIFBBVVNFTUFDIENvbnRyb2wgUlggRnJhbWVzIFJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9BTExGX0NOVCAgICAgICAweDAwMDA0MDAwICAgIC8qIEFsbCBSWCBGcmFtZXMgUmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9BTExPX0NOVCAgICAgICAweDAwMDA4MDAwICAgIC8qIEFsbCBSWCBPY3RldHMgUmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9UWVBFRF9DTlQgICAgICAweDAwMDEwMDAwICAgIC8qIFR5cGVkIFJYIEZyYW1lcyBSZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9TSE9SVF9DTlQgICAgICAweDAwMDIwMDAwICAgIC8qIFJYIEZyYW1lIEZyYWdtZW50cyAoPCA2NCBCeXRlcykgUmVjZWl2ZWQgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9FUTY0X0NOVCAgICAgICAweDAwMDQwMDAwICAgIC8qIDY0LUJ5dGUgUlggRnJhbWVzIFJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9MVDEyOF9DTlQgICAgICAweDAwMDgwMDAwICAgIC8qIDY1LTEyNy1CeXRlIFJYIEZyYW1lcyBSZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9MVDI1Nl9DTlQgICAgICAweDAwMTAwMDAwICAgIC8qIDEyOC0yNTUtQnl0ZSBSWCBGcmFtZXMgUmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9MVDUxMl9DTlQgICAgICAweDAwMjAwMDAwICAgIC8qIDI1Ni01MTEtQnl0ZSBSWCBGcmFtZXMgUmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9MVDEwMjRfQ05UICAgICAweDAwNDAwMDAwICAgIC8qIDUxMi0xMDIzLUJ5dGUgUlggRnJhbWVzIFJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlSWF9HRTEwMjRfQ05UICAgICAweDAwODAwMDAwICAgIC8qIDEwMjQtTWF4LUJ5dGUgUlggRnJhbWVzIFJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBFTUFDX01NQ19USVJRUyBhbmQgRU1BQ19NTUNfVElSUUUgTWFza3MgICovCisKKyNkZWZpbmUJVFhfT0tfQ05UICAgICAgICAgMHgwMDAwMDAwMSAgICAvKiBUWCBGcmFtZXMgU2VudCBPSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfU0NPTExfQ05UICAgICAgMHgwMDAwMDAwMiAgICAvKiBUWCBGcmFtZXMgV2l0aCBTaW5nbGUgQ29sbGlzaW9ucyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTUNPTExfQ05UICAgICAgMHgwMDAwMDAwNCAgICAvKiBUWCBGcmFtZXMgV2l0aCBNdWx0aXBsZSBDb2xsaXNpb25zICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfT0NURVRfQ05UICAgICAgMHgwMDAwMDAwOCAgICAvKiBUWCBPY3RldHMgU2VudCBPSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfREVGRVJfQ05UICAgICAgMHgwMDAwMDAxMCAgICAvKiBUWCBGcmFtZXMgV2l0aCBEZWZlcnJlZCBUcmFuc21pc3Npb24gICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTEFURV9DTlQgICAgICAgMHgwMDAwMDAyMCAgICAvKiBUWCBGcmFtZXMgV2l0aCBMYXRlIENvbGxpc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfQUJPUlRDX0NOVCAgICAgMHgwMDAwMDA0MCAgICAvKiBUWCBGcmFtZXMgQWJvcnRlZCBEdWUgVG8gRXhjZXNzIENvbGxpc2lvbnMgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTE9TVF9DTlQgICAgICAgMHgwMDAwMDA4MCAgICAvKiBUWCBGcmFtZXMgTG9zdCBEdWUgVG8gSW50ZXJuYWwgTUFDIFRYIEVycm9yICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfQ1JTX0NOVCAgICAgICAgMHgwMDAwMDEwMCAgICAvKiBUWCBGcmFtZXMgV2l0aCBDYXJyaWVyIFNlbnNlIEVycm9ycyAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfVU5JX0NOVCAgICAgICAgMHgwMDAwMDIwMCAgICAvKiBVbmljYXN0IFRYIEZyYW1lcyBTZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTVVMVElfQ05UICAgICAgMHgwMDAwMDQwMCAgICAvKiBNdWx0aWNhc3QgVFggRnJhbWVzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfQlJPQURfQ05UICAgICAgMHgwMDAwMDgwMCAgICAvKiBCcm9hZGNhc3QgVFggRnJhbWVzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfRVhERUZfQ1RMICAgICAgMHgwMDAwMTAwMCAgICAvKiBUWCBGcmFtZXMgV2l0aCBFeGNlc3NpdmUgRGVmZXJyYWwgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTUFDQ1RMX0NOVCAgICAgMHgwMDAwMjAwMCAgICAvKiBNQUMgQ29udHJvbCBUWCBGcmFtZXMgU2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfQUxMRl9DTlQgICAgICAgMHgwMDAwNDAwMCAgICAvKiBBbGwgVFggRnJhbWVzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfQUxMT19DTlQgICAgICAgMHgwMDAwODAwMCAgICAvKiBBbGwgVFggT2N0ZXRzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfRVE2NF9DTlQgICAgICAgMHgwMDAxMDAwMCAgICAvKiA2NC1CeXRlIFRYIEZyYW1lcyBTZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTFQxMjhfQ05UICAgICAgMHgwMDAyMDAwMCAgICAvKiA2NS0xMjctQnl0ZSBUWCBGcmFtZXMgU2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTFQyNTZfQ05UICAgICAgMHgwMDA0MDAwMCAgICAvKiAxMjgtMjU1LUJ5dGUgVFggRnJhbWVzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTFQ1MTJfQ05UICAgICAgMHgwMDA4MDAwMCAgICAvKiAyNTYtNTExLUJ5dGUgVFggRnJhbWVzIFNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfTFQxMDI0X0NOVCAgICAgMHgwMDEwMDAwMCAgICAvKiA1MTItMTAyMy1CeXRlIFRYIEZyYW1lcyBTZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfR0UxMDI0X0NOVCAgICAgMHgwMDIwMDAwMCAgICAvKiAxMDI0LU1heC1CeXRlIFRYIEZyYW1lcyBTZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJVFhfQUJPUlRfQ05UICAgICAgMHgwMDQwMDAwMCAgICAvKiBUWCBGcmFtZXMgQWJvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogVVNCIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRkFERFIgIDB4ZmZjMDM4MDAgICAvKiBGdW5jdGlvbiBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1BPV0VSICAweGZmYzAzODA0ICAgLyogUG93ZXIgbWFuYWdlbWVudCByZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0lOVFJUWCAgMHhmZmMwMzgwOCAgIC8qIEludGVycnVwdCByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCBhbmQgVHggZW5kcG9pbnQgMSB0byA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlJYICAweGZmYzAzODBjICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBSeCBlbmRwb2ludHMgMSB0byA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVFhFICAweGZmYzAzODEwICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clR4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSUlhFICAweGZmYzAzODE0ICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clJ4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVVNCICAweGZmYzAzODE4ICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBjb21tb24gVVNCIGludGVycnVwdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlVTQkUgIDB4ZmZjMDM4MWMgICAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGZvciBJbnRyVVNCICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0ZSQU1FICAweGZmYzAzODIwICAgLyogVVNCIGZyYW1lIG51bWJlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTkRFWCAgMHhmZmMwMzgyNCAgIC8qIEluZGV4IHJlZ2lzdGVyIGZvciBzZWxlY3RpbmcgdGhlIGluZGV4ZWQgZW5kcG9pbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX1RFU1RNT0RFICAweGZmYzAzODI4ICAgLyogRW5hYmxlZCBVU0IgMjAgdGVzdCBtb2RlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9HTE9CSU5UUiAgMHhmZmMwMzgyYyAgIC8qIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayByZWdpc3RlciBhbmQgV2FrZXVwIEV4Y2VwdGlvbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX0dMT0JBTF9DVEwgIDB4ZmZjMDM4MzAgICAvKiBHbG9iYWwgQ2xvY2sgQ29udHJvbCBmb3IgdGhlIGNvcmUgKi8KKworLyogVVNCIFBhY2tldCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9UWF9NQVhfUEFDS0VUICAweGZmYzAzODQwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfQ1NSMCAgMHhmZmMwMzg0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWENTUiAgMHhmZmMwMzg0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfUlhfTUFYX1BBQ0tFVCAgMHhmZmMwMzg0OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfUlhDU1IgIDB4ZmZjMDM4NGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0NPVU5UMCAgMHhmZmMwMzg1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludCAwIEZJRk8gYW5kIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBIb3N0IFR4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9SWENPVU5UICAweGZmYzAzODUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyBhbmQgTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWFRZUEUgIDB4ZmZjMDM4NTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBVU0JfTkFLTElNSVQwICAweGZmYzAzODU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCBhbmQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1RYSU5URVJWQUwgIDB4ZmZjMDM4NTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludCAwIGFuZCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX1JYVFlQRSAgMHhmZmMwMzg1YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1JYSU5URVJWQUwgIDB4ZmZjMDM4NjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQgYW5kIElzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX1RYQ09VTlQgIDB4ZmZjMDM4NjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgc2VsZWN0ZWQgZW5kcG9pbnQgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgRklGTyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDBfRklGTyAgMHhmZmMwMzg4MCAgIC8qIEVuZHBvaW50IDAgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDFfRklGTyAgMHhmZmMwMzg4OCAgIC8qIEVuZHBvaW50IDEgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDJfRklGTyAgMHhmZmMwMzg5MCAgIC8qIEVuZHBvaW50IDIgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDNfRklGTyAgMHhmZmMwMzg5OCAgIC8qIEVuZHBvaW50IDMgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDRfRklGTyAgMHhmZmMwMzhhMCAgIC8qIEVuZHBvaW50IDQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDVfRklGTyAgMHhmZmMwMzhhOCAgIC8qIEVuZHBvaW50IDUgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDZfRklGTyAgMHhmZmMwMzhiMCAgIC8qIEVuZHBvaW50IDYgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDdfRklGTyAgMHhmZmMwMzhiOCAgIC8qIEVuZHBvaW50IDcgRklGTyAqLworCisvKiBVU0IgT1RHIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfT1RHX0RFVl9DVEwgIDB4ZmZjMDM5MDAgICAvKiBPVEcgRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9PVEdfVkJVU19JUlEgIDB4ZmZjMDM5MDQgICAvKiBPVEcgVkJVUyBDb250cm9sIEludGVycnVwdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX09UR19WQlVTX01BU0sgIDB4ZmZjMDM5MDggICAvKiBWQlVTIENvbnRyb2wgSW50ZXJydXB0IEVuYWJsZSAqLworCisvKiBVU0IgUGh5IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfTElOS0lORk8gIDB4ZmZjMDM5NDggICAvKiBFbmFibGVzIHByb2dyYW1taW5nIG9mIHNvbWUgUEhZLXNpZGUgZGVsYXlzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1ZQTEVOICAweGZmYzAzOTRjICAgLyogRGV0ZXJtaW5lcyBkdXJhdGlvbiBvZiBWQlVTIHB1bHNlIGZvciBWQlVTIGNoYXJnaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9IU19FT0YxICAweGZmYzAzOTUwICAgLyogVGltZSBidWZmZXIgZm9yIEhpZ2gtU3BlZWQgdHJhbnNhY3Rpb25zICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9GU19FT0YxICAweGZmYzAzOTU0ICAgLyogVGltZSBidWZmZXIgZm9yIEZ1bGwtU3BlZWQgdHJhbnNhY3Rpb25zICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9MU19FT0YxICAweGZmYzAzOTU4ICAgLyogVGltZSBidWZmZXIgZm9yIExvdy1TcGVlZCB0cmFuc2FjdGlvbnMgKi8KKworLyogKEFQSFlfQ05UUkwgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9BUEhZX0NOVFJMICAweGZmYzAzOWUwICAgLyogUmVnaXN0ZXIgdGhhdCBpbmNyZWFzZXMgdmlzaWJpbGl0eSBvZiBBbmFsb2cgUEhZICovCisKKy8qIChBUEhZX0NBTElCIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfQVBIWV9DQUxJQiAgMHhmZmMwMzllNCAgIC8qIFJlZ2lzdGVyIHVzZWQgdG8gc2V0IHNvbWUgY2FsaWJyYXRpb24gdmFsdWVzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfQVBIWV9DTlRSTDIgIDB4ZmZjMDM5ZTggICAvKiBSZWdpc3RlciB1c2VkIHRvIHByZXZlbnQgcmUtZW51bWVyYXRpb24gb25jZSBNb2FiIGdvZXMgaW50byBoaWJlcm5hdGUgbW9kZSAqLworCisvKiAoUEhZX1RFU1QgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX1BIWV9URVNUICAweGZmYzAzOWVjICAgLyogVXNlZCBmb3IgcmVkdWNpbmcgc2ltdWxhdGlvbiB0aW1lIGFuZCBzaW1wbGlmaWVzIEZJRk8gdGVzdGFiaWxpdHkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9QTExPU0NfQ1RSTCAgMHhmZmMwMzlmMCAgIC8qIFVzZWQgdG8gcHJvZ3JhbSBkaWZmZXJlbnQgcGFyYW1ldGVycyBmb3IgVVNCIFBMTCBhbmQgT3NjaWxsYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfU1JQX0NMS0RJViAgMHhmZmMwMzlmNCAgIC8qIFVzZWQgdG8gcHJvZ3JhbSBjbG9jayBkaXZpZGUgdmFsdWUgZm9yIHRoZSBjbG9jayBmZWQgdG8gdGhlIFNSUCBkZXRlY3Rpb24gbG9naWMgKi8KKworLyogVVNCIEVuZHBvaW50IDAgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYTUFYUCAgMHhmZmMwM2EwMCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYQ1NSICAweGZmYzAzYTA0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50IDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWE1BWFAgIDB4ZmZjMDNhMDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWENTUiAgMHhmZmMwM2EwYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfUlhDT1VOVCAgMHhmZmMwM2ExMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludCAwIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9UWFRZUEUgIDB4ZmZjMDNhMTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhJTlRFUlZBTCAgMHhmZmMwM2ExOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50IDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWFRZUEUgIDB4ZmZjMDNhMWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTBfUlhJTlRFUlZBTCAgMHhmZmMwM2EyMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhDT1VOVCAgMHhmZmMwM2EyOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDAgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgMSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhNQVhQICAweGZmYzAzYTQwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhDU1IgIDB4ZmZjMDNhNDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhNQVhQICAweGZmYzAzYTQ4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhDU1IgIDB4ZmZjMDNhNGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1JYQ09VTlQgIDB4ZmZjMDNhNTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQxIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWFRZUEUgIDB4ZmZjMDNhNTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhJTlRFUlZBTCAgMHhmZmMwM2E1OCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1JYVFlQRSAgMHhmZmMwM2E1YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMV9SWElOVEVSVkFMICAweGZmYzAzYTYwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWENPVU5UICAweGZmYzAzYTY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlK0gxMDIgZW5kcG9pbnQxIFR4IEZJRk8gKi8KKworLyogVVNCIEVuZHBvaW50IDIgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1RYTUFYUCAgMHhmZmMwM2E4MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1RYQ1NSICAweGZmYzAzYTg0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYTUFYUCAgMHhmZmMwM2E4OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYQ1NSICAweGZmYzAzYThjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMl9SWENPVU5UICAweGZmYzAzYTkwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50MiBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhUWVBFICAweGZmYzAzYTk0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkyX1RYSU5URVJWQUwgIDB4ZmZjMDNhOTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMl9SWFRZUEUgIDB4ZmZjMDNhOWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhJTlRFUlZBTCAgMHhmZmMwM2FhMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhDT1VOVCAgMHhmZmMwM2FhOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDIgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgMyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhNQVhQICAweGZmYzAzYWMwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhDU1IgIDB4ZmZjMDNhYzQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhNQVhQICAweGZmYzAzYWM4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhDU1IgIDB4ZmZjMDNhY2MgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1JYQ09VTlQgIDB4ZmZjMDNhZDAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQzIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWFRZUEUgIDB4ZmZjMDNhZDQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhJTlRFUlZBTCAgMHhmZmMwM2FkOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1JYVFlQRSAgMHhmZmMwM2FkYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JM19SWElOVEVSVkFMICAweGZmYzAzYWUwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWENPVU5UICAweGZmYzAzYWU4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEgxMjRlbmRwb2ludDMgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgNCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhNQVhQICAweGZmYzAzYjAwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhDU1IgIDB4ZmZjMDNiMDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhNQVhQICAweGZmYzAzYjA4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhDU1IgIDB4ZmZjMDNiMGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1JYQ09VTlQgIDB4ZmZjMDNiMTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQ0IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWFRZUEUgIDB4ZmZjMDNiMTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhJTlRFUlZBTCAgMHhmZmMwM2IxOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1JYVFlQRSAgMHhmZmMwM2IxYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNF9SWElOVEVSVkFMICAweGZmYzAzYjIwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWENPVU5UICAweGZmYzAzYjI4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NCBUeCBGSUZPICovCisKKy8qIFVTQiBFbmRwb2ludCA1IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9UWE1BWFAgIDB4ZmZjMDNiNDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9UWENTUiAgMHhmZmMwM2I0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWE1BWFAgIDB4ZmZjMDNiNDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWENTUiAgMHhmZmMwM2I0YyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfUlhDT1VOVCAgMHhmZmMwM2I1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDUgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYVFlQRSAgMHhmZmMwM2I1NCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNV9UWElOVEVSVkFMICAweGZmYzAzYjU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfUlhUWVBFICAweGZmYzAzYjVjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk1X1JYSU5URVJWQUwgIDB4ZmZjMDNiNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYQ09VTlQgIDB4ZmZjMDNiNjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQ1IFR4IEZJRk8gKi8KKworLyogVVNCIEVuZHBvaW50IDYgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYTUFYUCAgMHhmZmMwM2I4MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYQ1NSICAweGZmYzAzYjg0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYTUFYUCAgMHhmZmMwM2I4OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYQ1NSICAweGZmYzAzYjhjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWENPVU5UICAweGZmYzAzYjkwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NiBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhUWVBFICAweGZmYzAzYjk0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDYgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk2X1RYSU5URVJWQUwgIDB4ZmZjMDNiOTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWFRZUEUgIDB4ZmZjMDNiOWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTZfUlhJTlRFUlZBTCAgMHhmZmMwM2JhMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhDT1VOVCAgMHhmZmMwM2JhOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDYgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgNyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhNQVhQICAweGZmYzAzYmMwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhDU1IgIDB4ZmZjMDNiYzQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhNQVhQICAweGZmYzAzYmM4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhDU1IgIDB4ZmZjMDNiY2MgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYQ09VTlQgIDB4ZmZjMDNiZDAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQ3IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWFRZUEUgIDB4ZmZjMDNiZDQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50NyAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhJTlRFUlZBTCAgMHhmZmMwM2JkOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50NyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYVFlQRSAgMHhmZmMwM2JkYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JN19SWElOVEVSVkFMICAweGZmYzAzYmYwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWENPVU5UICAweGZmYzAzYmY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NyBUeCBGSUZPICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQV9JTlRFUlJVUFQgIDB4ZmZjMDNjMDAgICAvKiBJbmRpY2F0ZXMgcGVuZGluZyBpbnRlcnJ1cHRzIGZvciB0aGUgRE1BIGNoYW5uZWxzICovCisKKy8qIFVTQiBDaGFubmVsIDAgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTBDT05UUk9MICAweGZmYzAzYzA0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDAgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEwQUREUkxPVyAgMHhmZmMwM2MwOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTBBRERSSElHSCAgMHhmZmMwM2MwYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTBDT1VOVExPVyAgMHhmZmMwM2MxMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUEwQ09VTlRISUdIICAweGZmYzAzYzE0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KKworLyogVVNCIENoYW5uZWwgMSBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMUNPTlRST0wgIDB4ZmZjMDNjMjQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgMSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTFBRERSTE9XICAweGZmYzAzYzI4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMUFERFJISUdIICAweGZmYzAzYzJjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMUNPVU5UTE9XICAweGZmYzAzYzMwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTFDT1VOVEhJR0ggIDB4ZmZjMDNjMzQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLworCisvKiBVU0IgQ2hhbm5lbCAyIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEyQ09OVFJPTCAgMHhmZmMwM2M0NCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAyIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMkFERFJMT1cgIDB4ZmZjMDNjNDggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEyQUREUkhJR0ggIDB4ZmZjMDNjNGMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEyQ09VTlRMT1cgIDB4ZmZjMDNjNTAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BMkNPVU5USElHSCAgMHhmZmMwM2M1NCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCisKKy8qIFVTQiBDaGFubmVsIDMgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTNDT05UUk9MICAweGZmYzAzYzY0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDMgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEzQUREUkxPVyAgMHhmZmMwM2M2OCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTNBRERSSElHSCAgMHhmZmMwM2M2YyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTNDT1VOVExPVyAgMHhmZmMwM2M3MCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUEzQ09VTlRISUdIICAweGZmYzAzYzc0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KKworLyogVVNCIENoYW5uZWwgNCBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNENPTlRST0wgIDB4ZmZjMDNjODQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgNCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTRBRERSTE9XICAweGZmYzAzYzg4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNEFERFJISUdIICAweGZmYzAzYzhjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNENPVU5UTE9XICAweGZmYzAzYzkwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTRDT1VOVEhJR0ggIDB4ZmZjMDNjOTQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLworCisvKiBVU0IgQ2hhbm5lbCA1IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE1Q09OVFJPTCAgMHhmZmMwM2NhNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCA1IGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNUFERFJMT1cgIDB4ZmZjMDNjYTggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE1QUREUkhJR0ggIDB4ZmZjMDNjYWMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE1Q09VTlRMT1cgIDB4ZmZjMDNjYjAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BNUNPVU5USElHSCAgMHhmZmMwM2NiNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCisKKy8qIFVTQiBDaGFubmVsIDYgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTZDT05UUk9MICAweGZmYzAzY2M0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDYgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE2QUREUkxPVyAgMHhmZmMwM2NjOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTZBRERSSElHSCAgMHhmZmMwM2NjYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTZDT1VOVExPVyAgMHhmZmMwM2NkMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE2Q09VTlRISUdIICAweGZmYzAzY2Q0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KKworLyogVVNCIENoYW5uZWwgNyBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BN0NPTlRST0wgIDB4ZmZjMDNjZTQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgNyBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTdBRERSTE9XICAweGZmYzAzY2U4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BN0FERFJISUdIICAweGZmYzAzY2VjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BN0NPVU5UTE9XICAweGZmYzAzY2YwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTdDT1VOVEhJR0ggIDB4ZmZjMDNjZjQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9GQUREUiAqLworCisjZGVmaW5lICAgICAgICAgIEZVTkNUSU9OX0FERFJFU1MgIDB4N2YgICAgICAgLyogRnVuY3Rpb24gYWRkcmVzcyAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9QT1dFUiAqLworCisjZGVmaW5lICAgICAgICAgICBFTkFCTEVfU1VTUEVORE0gIDB4MSAgICAgICAgLyogZW5hYmxlIFN1c3BlbmRNIG91dHB1dCAqLworI2RlZmluZSAgICAgICAgICBuRU5BQkxFX1NVU1BFTkRNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBTVVNQRU5EX01PREUgIDB4MiAgICAgICAgLyogU3VzcGVuZCBNb2RlIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICBuU1VTUEVORF9NT0RFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgUkVTVU1FX01PREUgIDB4NCAgICAgICAgLyogRE1BIE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5SRVNVTUVfTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJFU0VUICAweDggICAgICAgIC8qIFJlc2V0IGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJFU0VUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEhTX01PREUgIDB4MTAgICAgICAgLyogSGlnaCBTcGVlZCBtb2RlIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5IU19NT0RFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBIU19FTkFCTEUgIDB4MjAgICAgICAgLyogaGlnaCBTcGVlZCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkhTX0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgU09GVF9DT05OICAweDQwICAgICAgIC8qIFNvZnQgY29ubmVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuU09GVF9DT05OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIElTT19VUERBVEUgIDB4ODAgICAgICAgLyogSXNvY2hyb25vdXMgdXBkYXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbklTT19VUERBVEUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlRYICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMF9UWCAgMHgxICAgICAgICAvKiBUeCBFbmRwb2ludCAwIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAwX1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDFfVFggIDB4MiAgICAgICAgLyogVHggRW5kcG9pbnQgMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQMV9UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAyX1RYICAweDQgICAgICAgIC8qIFR4IEVuZHBvaW50IDIgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDJfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQM19UWCAgMHg4ICAgICAgICAvKiBUeCBFbmRwb2ludCAzIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAzX1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDRfVFggIDB4MTAgICAgICAgLyogVHggRW5kcG9pbnQgNCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNF9UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA1X1RYICAweDIwICAgICAgIC8qIFR4IEVuZHBvaW50IDUgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDVfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNl9UWCAgMHg0MCAgICAgICAvKiBUeCBFbmRwb2ludCA2IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA2X1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDdfVFggIDB4ODAgICAgICAgLyogVHggRW5kcG9pbnQgNyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQN19UWCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSUlggKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAxX1JYICAweDIgICAgICAgIC8qIFJ4IEVuZHBvaW50IDEgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDFfUlggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMl9SWCAgMHg0ICAgICAgICAvKiBSeCBFbmRwb2ludCAyIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAyX1JYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDNfUlggIDB4OCAgICAgICAgLyogUnggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQM19SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA0X1JYICAweDEwICAgICAgIC8qIFJ4IEVuZHBvaW50IDQgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDRfUlggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNV9SWCAgMHgyMCAgICAgICAvKiBSeCBFbmRwb2ludCA1IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA1X1JYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDZfUlggIDB4NDAgICAgICAgLyogUnggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNl9SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA3X1JYICAweDgwICAgICAgIC8qIFJ4IEVuZHBvaW50IDcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDdfUlggIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlRYRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAwX1RYX0UgIDB4MSAgICAgICAgLyogRW5kcG9pbnQgMCBpbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVAwX1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDFfVFhfRSAgMHgyICAgICAgICAvKiBUeCBFbmRwb2ludCAxIGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVAxX1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDJfVFhfRSAgMHg0ICAgICAgICAvKiBUeCBFbmRwb2ludCAyIGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVAyX1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDNfVFhfRSAgMHg4ICAgICAgICAvKiBUeCBFbmRwb2ludCAzIGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVAzX1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDRfVFhfRSAgMHgxMCAgICAgICAvKiBUeCBFbmRwb2ludCA0IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA0X1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDVfVFhfRSAgMHgyMCAgICAgICAvKiBUeCBFbmRwb2ludCA1IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA1X1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDZfVFhfRSAgMHg0MCAgICAgICAvKiBUeCBFbmRwb2ludCA2IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA2X1RYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDdfVFhfRSAgMHg4MCAgICAgICAvKiBUeCBFbmRwb2ludCA3IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA3X1RYX0UgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlJYRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAxX1JYX0UgIDB4MiAgICAgICAgLyogUnggRW5kcG9pbnQgMSBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQMV9SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAyX1JYX0UgIDB4NCAgICAgICAgLyogUnggRW5kcG9pbnQgMiBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQMl9SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAzX1JYX0UgIDB4OCAgICAgICAgLyogUnggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQM19SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA0X1JYX0UgIDB4MTAgICAgICAgLyogUnggRW5kcG9pbnQgNCBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNF9SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA1X1JYX0UgIDB4MjAgICAgICAgLyogUnggRW5kcG9pbnQgNSBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNV9SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA2X1JYX0UgIDB4NDAgICAgICAgLyogUnggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNl9SWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA3X1JYX0UgIDB4ODAgICAgICAgLyogUnggRW5kcG9pbnQgNyBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQN19SWF9FICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJVU0IgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgU1VTUEVORF9CICAweDEgICAgICAgIC8qIFN1c3BlbmQgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5TVVNQRU5EX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVNVTUVfQiAgMHgyICAgICAgICAvKiBSZXN1bWUgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUkVTVU1FX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgUkVTRVRfT1JfQkFCTEVfQiAgMHg0ICAgICAgICAvKiBSZXNldC9iYWJibGUgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgblJFU0VUX09SX0JBQkxFX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTT0ZfQiAgMHg4ICAgICAgICAvKiBTdGFydCBvZiBmcmFtZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblNPRl9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDT05OX0IgIDB4MTAgICAgICAgLyogQ29ubmVjdGlvbiBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNPTk5fQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERJU0NPTl9CICAweDIwICAgICAgIC8qIERpc2Nvbm5lY3QgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRElTQ09OX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgU0VTU0lPTl9SRVFfQiAgMHg0MCAgICAgICAvKiBTZXNzaW9uIFJlcXVlc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICBuU0VTU0lPTl9SRVFfQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgVkJVU19FUlJPUl9CICAweDgwICAgICAgIC8qIFZidXMgdGhyZXNob2xkIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICBuVkJVU19FUlJPUl9CICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJVU0JFICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgU1VTUEVORF9CRSAgMHgxICAgICAgICAvKiBTdXNwZW5kIGluZGljYXRvciBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgblNVU1BFTkRfQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFJFU1VNRV9CRSAgMHgyICAgICAgICAvKiBSZXN1bWUgaW5kaWNhdG9yIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblJFU1VNRV9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIFJFU0VUX09SX0JBQkxFX0JFICAweDQgICAgICAgIC8qIFJlc2V0L2JhYmJsZSBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgblJFU0VUX09SX0JBQkxFX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTT0ZfQkUgIDB4OCAgICAgICAgLyogU3RhcnQgb2YgZnJhbWUgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuU09GX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENPTk5fQkUgIDB4MTAgICAgICAgLyogQ29ubmVjdGlvbiBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DT05OX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBESVNDT05fQkUgIDB4MjAgICAgICAgLyogRGlzY29ubmVjdCBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuRElTQ09OX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgU0VTU0lPTl9SRVFfQkUgIDB4NDAgICAgICAgLyogU2Vzc2lvbiBSZXF1ZXN0IGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgIG5TRVNTSU9OX1JFUV9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBWQlVTX0VSUk9SX0JFICAweDgwICAgICAgIC8qIFZidXMgdGhyZXNob2xkIGluZGljYXRvciBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgblZCVVNfRVJST1JfQkUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfRlJBTUUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRlJBTUVfTlVNQkVSICAweDdmZiAgICAgIC8qIEZyYW1lIG51bWJlciAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9JTkRFWCAqLworCisjZGVmaW5lICAgICAgICAgU0VMRUNURURfRU5EUE9JTlQgIDB4ZiAgICAgICAgLyogc2VsZWN0ZWQgZW5kcG9pbnQgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfR0xPQkFMX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIEdMT0JBTF9FTkEgIDB4MSAgICAgICAgLyogZW5hYmxlcyBVU0IgbW9kdWxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkdMT0JBTF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVAxX1RYX0VOQSAgMHgyICAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCAxIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDFfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQMl9UWF9FTkEgIDB4NCAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgMiBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVAyX1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDNfVFhfRU5BICAweDggICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDMgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQM19UWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVA0X1RYX0VOQSAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDRfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQNV9UWF9FTkEgIDB4MjAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgNSBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA1X1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDZfVFhfRU5BICAweDQwICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDYgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQNl9UWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVA3X1RYX0VOQSAgMHg4MCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA3IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDdfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQMV9SWF9FTkEgIDB4MTAwICAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCAxIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDFfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQMl9SWF9FTkEgIDB4MjAwICAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCAyIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDJfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQM19SWF9FTkEgIDB4NDAwICAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCAzIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDNfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQNF9SWF9FTkEgIDB4ODAwICAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCA0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDRfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQNV9SWF9FTkEgIDB4MTAwMCAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCA1IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDVfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQNl9SWF9FTkEgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCA2IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDZfUlhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQN19SWF9FTkEgIDB4NDAwMCAgICAgLyogUmVjZWl2ZSBlbmRwb2ludCA3IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDdfUlhfRU5BICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX09UR19ERVZfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VTU0lPTiAgMHgxICAgICAgICAvKiBzZXNzaW9uIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TRVNTSU9OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9SRVEgIDB4MiAgICAgICAgLyogSG9zdCBuZWdvdGlhdGlvbiByZXF1ZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSE9TVF9SRVEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEhPU1RfTU9ERSAgMHg0ICAgICAgICAvKiBpbmRpY2F0ZXMgVVNCRFJDIGlzIGEgaG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuSE9TVF9NT0RFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVkJVUzAgIDB4OCAgICAgICAgLyogVmJ1cyBsZXZlbCBpbmRpY2F0b3JbMF0gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5WQlVTMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFZCVVMxICAweDEwICAgICAgIC8qIFZidXMgbGV2ZWwgaW5kaWNhdG9yWzFdICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVkJVUzEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBMU0RFViAgMHgyMCAgICAgICAvKiBMb3ctc3BlZWQgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTFNERVYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBGU0RFViAgMHg0MCAgICAgICAvKiBGdWxsIG9yIEhpZ2gtc3BlZWQgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRlNERVYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBCX0RFVklDRSAgMHg4MCAgICAgICAvKiBBJyBvciAnQicgZGV2aWNlIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkJfREVWSUNFICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX09UR19WQlVTX0lSUSAqLworCisjZGVmaW5lICAgICAgICAgICAgIERSSVZFX1ZCVVNfT04gIDB4MSAgICAgICAgLyogaW5kaWNhdG9yIHRvIGRyaXZlIFZCVVMgY29udHJvbCBjaXJjdWl0ICovCisjZGVmaW5lICAgICAgICAgICAgbkRSSVZFX1ZCVVNfT04gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICBEUklWRV9WQlVTX09GRiAgMHgyICAgICAgICAvKiBpbmRpY2F0b3IgdG8gc2h1dCBvZmYgY2hhcmdlIHB1bXAgKi8KKyNkZWZpbmUgICAgICAgICAgIG5EUklWRV9WQlVTX09GRiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgQ0hSR19WQlVTX1NUQVJUICAweDQgICAgICAgIC8qIGluZGljYXRvciBmb3IgZXh0ZXJuYWwgY2lyY3VpdCB0byBzdGFydCBjaGFyZ2luZyBWQlVTICovCisjZGVmaW5lICAgICAgICAgIG5DSFJHX1ZCVVNfU1RBUlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgQ0hSR19WQlVTX0VORCAgMHg4ICAgICAgICAvKiBpbmRpY2F0b3IgZm9yIGV4dGVybmFsIGNpcmN1aXQgdG8gZW5kIGNoYXJnaW5nIFZCVVMgKi8KKyNkZWZpbmUgICAgICAgICAgICBuQ0hSR19WQlVTX0VORCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgRElTQ0hSR19WQlVTX1NUQVJUICAweDEwICAgICAgIC8qIGluZGljYXRvciB0byBzdGFydCBkaXNjaGFyZ2luZyBWQlVTICovCisjZGVmaW5lICAgICAgIG5ESVNDSFJHX1ZCVVNfU1RBUlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgRElTQ0hSR19WQlVTX0VORCAgMHgyMCAgICAgICAvKiBpbmRpY2F0b3IgdG8gc3RvcCBkaXNjaGFyZ2luZyBWQlVTICovCisjZGVmaW5lICAgICAgICAgbkRJU0NIUkdfVkJVU19FTkQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfT1RHX1ZCVVNfTUFTSyAqLworCisjZGVmaW5lICAgICAgICAgRFJJVkVfVkJVU19PTl9FTkEgIDB4MSAgICAgICAgLyogZW5hYmxlIERSSVZFX1ZCVVNfT04gaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICBuRFJJVkVfVkJVU19PTl9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgIERSSVZFX1ZCVVNfT0ZGX0VOQSAgMHgyICAgICAgICAvKiBlbmFibGUgRFJJVkVfVkJVU19PRkYgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgIG5EUklWRV9WQlVTX09GRl9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgQ0hSR19WQlVTX1NUQVJUX0VOQSAgMHg0ICAgICAgICAvKiBlbmFibGUgQ0hSR19WQlVTX1NUQVJUIGludGVycnVwdCAqLworI2RlZmluZSAgICAgIG5DSFJHX1ZCVVNfU1RBUlRfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgQ0hSR19WQlVTX0VORF9FTkEgIDB4OCAgICAgICAgLyogZW5hYmxlIENIUkdfVkJVU19FTkQgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICBuQ0hSR19WQlVTX0VORF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgRElTQ0hSR19WQlVTX1NUQVJUX0VOQSAgMHgxMCAgICAgICAvKiBlbmFibGUgRElTQ0hSR19WQlVTX1NUQVJUIGludGVycnVwdCAqLworI2RlZmluZSAgIG5ESVNDSFJHX1ZCVVNfU1RBUlRfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgRElTQ0hSR19WQlVTX0VORF9FTkEgIDB4MjAgICAgICAgLyogZW5hYmxlIERJU0NIUkdfVkJVU19FTkQgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICBuRElTQ0hSR19WQlVTX0VORF9FTkEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfQ1NSMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUlhQS1RSRFkgIDB4MSAgICAgICAgLyogZGF0YSBwYWNrZXQgcmVjZWl2ZSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5SWFBLVFJEWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFRYUEtUUkRZICAweDIgICAgICAgIC8qIGRhdGEgcGFja2V0IGluIEZJRk8gaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuVFhQS1RSRFkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgU1RBTExfU0VOVCAgMHg0ICAgICAgICAvKiBTVEFMTCBoYW5kc2hha2Ugc2VudCAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5TVEFMTF9TRU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERBVEFFTkQgIDB4OCAgICAgICAgLyogRGF0YSBlbmQgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRBVEFFTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBTRVRVUEVORCAgMHgxMCAgICAgICAvKiBTZXR1cCBlbmQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5TRVRVUEVORCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgU0VORFNUQUxMICAweDIwICAgICAgIC8qIFNlbmQgU1RBTEwgaGFuZHNoYWtlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5TRU5EU1RBTEwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBTRVJWSUNFRF9SWFBLVFJEWSAgMHg0MCAgICAgICAvKiB1c2VkIHRvIGNsZWFyIHRoZSBSeFBrdFJkeSBiaXQgKi8KKyNkZWZpbmUgICAgICAgIG5TRVJWSUNFRF9SWFBLVFJEWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIFNFUlZJQ0VEX1NFVFVQRU5EICAweDgwICAgICAgIC8qIHVzZWQgdG8gY2xlYXIgdGhlIFNldHVwRW5kIGJpdCAqLworI2RlZmluZSAgICAgICAgblNFUlZJQ0VEX1NFVFVQRU5EICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBGTFVTSEZJRk8gIDB4MTAwICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuRkxVU0hGSUZPICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFNUQUxMX1JFQ0VJVkVEX0ggIDB4NCAgICAgICAgLyogU1RBTEwgaGFuZHNoYWtlIHJlY2VpdmVkIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgIG5TVEFMTF9SRUNFSVZFRF9IICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIFNFVFVQUEtUX0ggIDB4OCAgICAgICAgLyogc2VuZCBTZXR1cCB0b2tlbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuU0VUVVBQS1RfSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUlJPUl9IICAweDEwICAgICAgIC8qIHRpbWVvdXQgZXJyb3IgaW5kaWNhdG9yIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FUlJPUl9IICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUkVRUEtUX0ggIDB4MjAgICAgICAgLyogUmVxdWVzdCBhbiBJTiB0cmFuc2FjdGlvbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5SRVFQS1RfSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIFNUQVRVU1BLVF9IICAweDQwICAgICAgIC8qIFN0YXR1cyBzdGFnZSB0cmFuc2FjdGlvbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5TVEFUVVNQS1RfSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBOQUtfVElNRU9VVF9IICAweDgwICAgICAgIC8qIEVQMCBoYWx0ZWQgYWZ0ZXIgYSBOQUsgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgbk5BS19USU1FT1VUX0ggIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfQ09VTlQwICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIEVQMF9SWF9DT1VOVCAgMHg3ZiAgICAgICAvKiBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMgaW4gRVAwIEZJRk8gKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfTkFLTElNSVQwICovCisKKyNkZWZpbmUgICAgICAgICAgICAgRVAwX05BS19MSU1JVCAgMHgxZiAgICAgICAvKiBudW1iZXIgb2YgZnJhbWVzL21pY3JvIGZyYW1lcyBhZnRlciB3aGljaCBFUDAgdGltZW91dHMgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfVFhfTUFYX1BBQ0tFVCAqLworCisjZGVmaW5lICAgICAgICAgTUFYX1BBQ0tFVF9TSVpFX1QgIDB4N2ZmICAgICAgLyogbWF4aW11bSBkYXRhIHBheSBsb2FkIGluIGEgZnJhbWUgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfUlhfTUFYX1BBQ0tFVCAqLworCisjZGVmaW5lICAgICAgICAgTUFYX1BBQ0tFVF9TSVpFX1IgIDB4N2ZmICAgICAgLyogbWF4aW11bSBkYXRhIHBheSBsb2FkIGluIGEgZnJhbWUgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfVFhDU1IgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBUWFBLVFJEWV9UICAweDEgICAgICAgIC8qIGRhdGEgcGFja2V0IGluIEZJRk8gaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgblRYUEtUUkRZX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgRklGT19OT1RfRU1QVFlfVCAgMHgyICAgICAgICAvKiBGSUZPIG5vdCBlbXB0eSAqLworI2RlZmluZSAgICAgICAgIG5GSUZPX05PVF9FTVBUWV9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIFVOREVSUlVOX1QgIDB4NCAgICAgICAgLyogVHhQa3RSZHkgbm90IHNldCAgZm9yIGFuIElOIHRva2VuICovCisjZGVmaW5lICAgICAgICAgICAgICAgblVOREVSUlVOX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBGTFVTSEZJRk9fVCAgMHg4ICAgICAgICAvKiBmbHVzaCBlbmRwb2ludCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICBuRkxVU0hGSUZPX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFNUQUxMX1NFTkRfVCAgMHgxMCAgICAgICAvKiBpc3N1ZSBhIFN0YWxsIGhhbmRzaGFrZSAqLworI2RlZmluZSAgICAgICAgICAgICBuU1RBTExfU0VORF9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5UX1QgIDB4MjAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHRyYW5zbWl0dGVkICovCisjZGVmaW5lICAgICAgICAgICAgIG5TVEFMTF9TRU5UX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgIENMRUFSX0RBVEFUT0dHTEVfVCAgMHg0MCAgICAgICAvKiBjbGVhciBlbmRwb2ludCBkYXRhIHRvZ2dsZSAqLworI2RlZmluZSAgICAgICBuQ0xFQVJfREFUQVRPR0dMRV9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIElOQ09NUFRYX1QgIDB4ODAgICAgICAgLyogaW5kaWNhdGVzIHRoYXQgYSBsYXJnZSBwYWNrZXQgaXMgc3BsaXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSU5DT01QVFhfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRTU9ERV9UICAweDQwMCAgICAgIC8qIERNQSBtb2RlICgwIG9yIDEpIHNlbGVjdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICBuRE1BUkVRTU9ERV9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBGT1JDRV9EQVRBVE9HR0xFX1QgIDB4ODAwICAgICAgLyogRm9yY2UgZGF0YSB0b2dnbGUgKi8KKyNkZWZpbmUgICAgICAgbkZPUkNFX0RBVEFUT0dHTEVfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRX0VOQV9UICAweDEwMDAgICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdCBmb3IgVHggRVAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRNQVJFUV9FTkFfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIElTT19UICAweDQwMDAgICAgIC8qIGVuYWJsZSBJc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5JU09fVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgQVVUT1NFVF9UICAweDgwMDAgICAgIC8qIGFsbG93cyBUeFBrdFJkeSB0byBiZSBzZXQgYXV0b21hdGljYWxseSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuQVVUT1NFVF9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVJST1JfVEggIDB4NCAgICAgICAgLyogZXJyb3IgY29uZGl0aW9uIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVSUk9SX1RIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgU1RBTExfUkVDRUlWRURfVEggIDB4MjAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHJlY2VpdmVkIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgblNUQUxMX1JFQ0VJVkVEX1RIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgTkFLX1RJTUVPVVRfVEggIDB4ODAgICAgICAgLyogTkFLIHRpbWVvdXQgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICBuTkFLX1RJTUVPVVRfVEggIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfVFhDT1VOVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVFhfQ09VTlQgIDB4MWZmZiAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHNlbGVjdGVkIGVuZHBvaW50IFR4IEZJRk8gKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfUlhDU1IgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBSWFBLVFJEWV9SICAweDEgICAgICAgIC8qIGRhdGEgcGFja2V0IGluIEZJRk8gaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgblJYUEtUUkRZX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBGSUZPX0ZVTExfUiAgMHgyICAgICAgICAvKiBGSUZPIG5vdCBlbXB0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgbkZJRk9fRlVMTF9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBPVkVSUlVOX1IgIDB4NCAgICAgICAgLyogVHhQa3RSZHkgbm90IHNldCAgZm9yIGFuIElOIHRva2VuICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5PVkVSUlVOX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBEQVRBRVJST1JfUiAgMHg4ICAgICAgICAvKiBPdXQgcGFja2V0IGNhbm5vdCBiZSBsb2FkZWQgaW50byBSeCAgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgbkRBVEFFUlJPUl9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgRkxVU0hGSUZPX1IgIDB4MTAgICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgbkZMVVNIRklGT19SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5EX1IgIDB4MjAgICAgICAgLyogaXNzdWUgYSBTdGFsbCBoYW5kc2hha2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblNUQUxMX1NFTkRfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VOVF9SICAweDQwICAgICAgIC8qIFN0YWxsIGhhbmRzaGFrZSB0cmFuc21pdHRlZCAqLworI2RlZmluZSAgICAgICAgICAgICBuU1RBTExfU0VOVF9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBDTEVBUl9EQVRBVE9HR0xFX1IgIDB4ODAgICAgICAgLyogY2xlYXIgZW5kcG9pbnQgZGF0YSB0b2dnbGUgKi8KKyNkZWZpbmUgICAgICAgbkNMRUFSX0RBVEFUT0dHTEVfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJTkNPTVBSWF9SICAweDEwMCAgICAgIC8qIGluZGljYXRlcyB0aGF0IGEgbGFyZ2UgcGFja2V0IGlzIHNwbGl0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgbklOQ09NUFJYX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERNQVJFUU1PREVfUiAgMHg4MDAgICAgICAvKiBETUEgbW9kZSAoMCBvciAxKSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRNQVJFUU1PREVfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRElTTllFVF9SICAweDEwMDAgICAgIC8qIGRpc2FibGUgTnlldCBoYW5kc2hha2VzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5ESVNOWUVUX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERNQVJFUV9FTkFfUiAgMHgyMDAwICAgICAvKiBFbmFibGUgRE1BIHJlcXVlc3QgZm9yIFR4IEVQICovCisjZGVmaW5lICAgICAgICAgICAgIG5ETUFSRVFfRU5BX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBJU09fUiAgMHg0MDAwICAgICAvKiBlbmFibGUgSXNvY2hyb25vdXMgdHJhbnNmZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuSVNPX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBBVVRPQ0xFQVJfUiAgMHg4MDAwICAgICAvKiBhbGxvd3MgVHhQa3RSZHkgdG8gYmUgc2V0IGF1dG9tYXRpY2FsbHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5BVVRPQ0xFQVJfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVSUk9SX1JIICAweDQgICAgICAgIC8qIFR4UGt0UmR5IG5vdCBzZXQgIGZvciBhbiBJTiB0b2tlbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUlJPUl9SSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgUkVRUEtUX1JIICAweDIwICAgICAgIC8qIHJlcXVlc3QgYW4gSU4gdHJhbnNhY3Rpb24gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5SRVFQS1RfUkggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBTVEFMTF9SRUNFSVZFRF9SSCAgMHg0MCAgICAgICAvKiBTdGFsbCBoYW5kc2hha2UgcmVjZWl2ZWQgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICBuU1RBTExfUkVDRUlWRURfUkggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBJTkNPTVBSWF9SSCAgMHgxMDAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCBhIGxhcmdlIHBhY2tldCBpcyBzcGxpdCBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5JTkNPTVBSWF9SSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBETUFSRVFNT0RFX1JIICAweDgwMCAgICAgIC8qIERNQSBtb2RlICgwIG9yIDEpIHNlbGVjdGlvbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICBuRE1BUkVRTU9ERV9SSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBBVVRPUkVRX1JIICAweDQwMDAgICAgIC8qIHNldHMgUmVxUGt0IGF1dG9tYXRpY2FsbHkgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkFVVE9SRVFfUkggIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfUlhDT1VOVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUlhfQ09VTlQgIDB4MWZmZiAgICAgLyogTnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzIGluIHRoZSBwYWNrZXQgaW4gdGhlIFJ4IEZJRk8gKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfVFhUWVBFICovCisKKyNkZWZpbmUgICAgICAgICAgICBUQVJHRVRfRVBfTk9fVCAgMHhmICAgICAgICAvKiBFUCBudW1iZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgUFJPVE9DT0xfVCAgMHhjICAgICAgICAvKiB0cmFuc2ZlciB0eXBlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYSU5URVJWQUwgKi8KKworI2RlZmluZSAgICAgICAgICBUWF9QT0xMX0lOVEVSVkFMICAweGZmICAgICAgIC8qIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIHNlbGVjdGVkIFR4IEVQICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYVFlQRSAqLworCisjZGVmaW5lICAgICAgICAgICAgVEFSR0VUX0VQX05PX1IgIDB4ZiAgICAgICAgLyogRVAgbnVtYmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFBST1RPQ09MX1IgIDB4YyAgICAgICAgLyogdHJhbnNmZXIgdHlwZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9SWElOVEVSVkFMICovCisKKyNkZWZpbmUgICAgICAgICAgUlhfUE9MTF9JTlRFUlZBTCAgMHhmZiAgICAgICAvKiBwb2xsaW5nIGludGVydmFsIGZvciBzZWxlY3RlZCBSeCBFUCAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9ETUFfSU5URVJSVVBUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUEwX0lOVCAgMHgxICAgICAgICAvKiBETUEwIHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BMF9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUExX0lOVCAgMHgyICAgICAgICAvKiBETUExIHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BMV9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUEyX0lOVCAgMHg0ICAgICAgICAvKiBETUEyIHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BMl9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUEzX0lOVCAgMHg4ICAgICAgICAvKiBETUEzIHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BM19JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE0X0lOVCAgMHgxMCAgICAgICAvKiBETUE0IHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BNF9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE1X0lOVCAgMHgyMCAgICAgICAvKiBETUE1IHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BNV9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE2X0lOVCAgMHg0MCAgICAgICAvKiBETUE2IHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BNl9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE3X0lOVCAgMHg4MCAgICAgICAvKiBETUE3IHBlbmRpbmcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BN19JTlQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeENPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUFfRU5BICAweDEgICAgICAgIC8qIERNQSBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRE1BX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRElSRUNUSU9OICAweDIgICAgICAgIC8qIGRpcmVjdGlvbiBvZiBETUEgdHJhbnNmZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkRJUkVDVElPTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNT0RFICAweDQgICAgICAgIC8qIERNQSBCdXMgZXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBJTlRfRU5BICAweDggICAgICAgIC8qIEludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuSU5UX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQTlVNICAweGYwICAgICAgIC8qIEVQIG51bWJlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEJVU0VSUk9SICAweDEwMCAgICAgIC8qIERNQSBCdXMgZXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5CVVNFUlJPUiAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4QUREUkhJR0ggKi8KKworI2RlZmluZSAgICAgICAgICAgICBETUFfQUREUl9ISUdIICAweGZmZmYgICAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgRE1BIG1hc3RlciBjaGFubmVsICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhBRERSTE9XICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIERNQV9BRERSX0xPVyAgMHhmZmZmICAgICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgdGhlIERNQSBtYXN0ZXIgY2hhbm5lbCAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4Q09VTlRISUdIICovCisKKyNkZWZpbmUgICAgICAgICAgICBETUFfQ09VTlRfSElHSCAgMHhmZmZmICAgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeENPVU5UTE9XICovCisKKyNkZWZpbmUgICAgICAgICAgICAgRE1BX0NPVU5UX0xPVyAgMHhmZmZmICAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgKi8KKworI2VuZGlmIC8qIF9ERUZfQkY1MjdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyeF9iYXNlLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTJ4X2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjJmYjUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyeF9iYXNlLmgKQEAgLTAsMCArMSwyMDA5IEBACisvKgorICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTJ4X2Jhc2UuaAorICogQmFzZWQgb246CisgKiBBdXRob3I6CisgKgorICogQ3JlYXRlZDoKKyAqIERlc2NyaXB0aW9uOgorICoKKyAqIFJldjoKKyAqCisgKiBNb2RpZmllZDoKKyAqCisgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9ERUZfQkY1MlhfSAorI2RlZmluZSBfREVGX0JGNTJYX0gKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogICBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBDT01NT04gVE8gQUxMIEFEU1AtQkY1MnggICAgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qID09PT0gYmVnaW4gZnJvbSBkZWZCRjUzNC5oID09PT0gKi8KKworLyogQ2xvY2sgYW5kIFN5c3RlbSBDb250cm9sCSgweEZGQzAwMDAwIC0gMHhGRkMwMDBGRikJCQkJCQkJCSovCisjZGVmaW5lIFBMTF9DVEwJCQkJMHhGRkMwMDAwMAkvKiBQTEwgQ29udHJvbCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFBMTF9ESVYJCQkJMHhGRkMwMDAwNAkvKiBQTEwgRGl2aWRlIFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgVlJfQ1RMCQkJCTB4RkZDMDAwMDgJLyogVm9sdGFnZSBSZWd1bGF0b3IgQ29udHJvbCBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgUExMX1NUQVQJCQkweEZGQzAwMDBDCS8qIFBMTCBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBQTExfTE9DS0NOVAkJCTB4RkZDMDAwMTAJLyogUExMIExvY2sgQ291bnQgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIENISVBJRCAgICAgICAgMHhGRkMwMDAxNCAgLyogRGV2aWNlIElEIFJlZ2lzdGVyICovCisKKworLyogU3lzdGVtIEludGVycnVwdCBDb250cm9sbGVyICgweEZGQzAwMTAwIC0gMHhGRkMwMDFGRikJCQkJCQkJKi8KKyNkZWZpbmUgU1dSU1QJCQkJMHhGRkMwMDEwMAkvKiBTb2Z0d2FyZSBSZXNldCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgU1lTQ1IJCQkJMHhGRkMwMDEwNAkvKiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFNJQ19SVkVDVAkJCTB4RkZDMDAxMDgJLyogSW50ZXJydXB0IFJlc2V0IFZlY3RvciBBZGRyZXNzIFJlZ2lzdGVyCSovCisKKyNkZWZpbmUgU0lDX0lNQVNLCQkJMHhGRkMwMDEwQwkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgU0lDX0lBUjAJCQkweEZGQzAwMTEwCS8qIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDAJCQkqLworI2RlZmluZSBTSUNfSUFSMQkJCTB4RkZDMDAxMTQJLyogSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMQkJCSovCisjZGVmaW5lIFNJQ19JQVIyCQkJMHhGRkMwMDExOAkvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCBSZWdpc3RlciAyCQkJKi8KKyNkZWZpbmUgU0lDX0lBUjMJCQkweEZGQzAwMTFDCS8qIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDMJCQkqLworI2RlZmluZSBTSUNfSVNSCQkJCTB4RkZDMDAxMjAJLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBTSUNfSVdSCQkJCTB4RkZDMDAxMjQJLyogSW50ZXJydXB0IFdha2V1cCBSZWdpc3RlcgkJCQkqLworCisvKiBTSUMgQWRkaXRpb25zIHRvIEFEU1AtQkY1MnggKDB4RkZDMDAxNEMgLSAweEZGQzAwMTYyKSAqLworI2RlZmluZSBTSUNfSU1BU0sxICAgICAgICAgICAgICAgICAgICAgIDB4RkZDMDAxNEMgICAgIC8qIEludGVycnVwdCBNYXNrIHJlZ2lzdGVyIG9mIFNJQzIgKi8KKyNkZWZpbmUgU0lDX0lBUjQgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTUwICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjQgKi8KKyNkZWZpbmUgU0lDX0lBUjUgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTU0ICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjUgKi8KKyNkZWZpbmUgU0lDX0lBUjYgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTU4ICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjYgKi8KKyNkZWZpbmUgU0lDX0lBUjcgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTVDICAgICAvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCByZWdpc3RlcjcgKi8KKyNkZWZpbmUgU0lDX0lTUjEgICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAwMTYwICAgICAvKiBJbnRlcnJ1cHQgU3RhdHVyIHJlZ2lzdGVyICovCisjZGVmaW5lIFNJQ19JV1IxICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwMDE2NCAgICAgLyogSW50ZXJydXB0IFdha2V1cCByZWdpc3RlciAqLworCisKKy8qIFdhdGNoZG9nIFRpbWVyCQkJKDB4RkZDMDAyMDAgLSAweEZGQzAwMkZGKQkJCQkJCQkJKi8KKyNkZWZpbmUgV0RPR19DVEwJCQkweEZGQzAwMjAwCS8qIFdhdGNoZG9nIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgV0RPR19DTlQJCQkweEZGQzAwMjA0CS8qIFdhdGNoZG9nIENvdW50IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBXRE9HX1NUQVQJCQkweEZGQzAwMjA4CS8qIFdhdGNoZG9nIFN0YXR1cyBSZWdpc3RlcgkJCQkJKi8KKworCisvKiBSZWFsIFRpbWUgQ2xvY2sJCSgweEZGQzAwMzAwIC0gMHhGRkMwMDNGRikJCQkJCQkJCQkqLworI2RlZmluZSBSVENfU1RBVAkJCTB4RkZDMDAzMDAJLyogUlRDIFN0YXR1cyBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFJUQ19JQ1RMCQkJMHhGRkMwMDMwNAkvKiBSVEMgSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBSVENfSVNUQVQJCQkweEZGQzAwMzA4CS8qIFJUQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUlRDX1NXQ05UCQkJMHhGRkMwMDMwQwkvKiBSVEMgU3RvcHdhdGNoIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFJUQ19BTEFSTQkJCTB4RkZDMDAzMTAJLyogUlRDIEFsYXJtIFRpbWUgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFJUQ19GQVNUCQkJMHhGRkMwMDMxNAkvKiBSVEMgUHJlc2NhbGVyIEVuYWJsZSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFJUQ19QUkVOCQkJMHhGRkMwMDMxNAkvKiBSVEMgUHJlc2NhbGVyIEVuYWJsZSBBbHRlcm5hdGUgTWFjcm8JCSovCisKKworLyogVUFSVDAgQ29udHJvbGxlcgkJKDB4RkZDMDA0MDAgLSAweEZGQzAwNEZGKQkJCQkJCQkJCSovCisjZGVmaW5lIFVBUlQwX1RIUgkJCTB4RkZDMDA0MDAJLyogVHJhbnNtaXQgSG9sZGluZyByZWdpc3RlcgkJCQkqLworI2RlZmluZSBVQVJUMF9SQlIJCQkweEZGQzAwNDAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBVQVJUMF9ETEwJCQkweEZGQzAwNDAwCS8qIERpdmlzb3IgTGF0Y2ggKExvdy1CeXRlKQkJCQkJKi8KKyNkZWZpbmUgVUFSVDBfSUVSCQkJMHhGRkMwMDQwNAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFVBUlQwX0RMSAkJCTB4RkZDMDA0MDQJLyogRGl2aXNvciBMYXRjaCAoSGlnaC1CeXRlKQkJCQkqLworI2RlZmluZSBVQVJUMF9JSVIJCQkweEZGQzAwNDA4CS8qIEludGVycnVwdCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgVUFSVDBfTENSCQkJMHhGRkMwMDQwQwkvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFVBUlQwX01DUgkJCTB4RkZDMDA0MTAJLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVUFSVDBfTFNSCQkJMHhGRkMwMDQxNAkvKiBMaW5lIFN0YXR1cyBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFVBUlQwX01TUgkJCTB4RkZDMDA0MTgJLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBVQVJUMF9TQ1IJCQkweEZGQzAwNDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgVUFSVDBfR0NUTAkJCTB4RkZDMDA0MjQJLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisKKworLyogU1BJIENvbnRyb2xsZXIJCQkoMHhGRkMwMDUwMCAtIDB4RkZDMDA1RkYpCQkJCQkJCQkqLworI2RlZmluZSBTUElfQ1RMCQkJCTB4RkZDMDA1MDAJLyogU1BJIENvbnRyb2wgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBTUElfRkxHCQkJCTB4RkZDMDA1MDQJLyogU1BJIEZsYWcgcmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBTUElfU1RBVAkJCTB4RkZDMDA1MDgJLyogU1BJIFN0YXR1cyByZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFNQSV9UREJSCQkJMHhGRkMwMDUwQwkvKiBTUEkgVHJhbnNtaXQgRGF0YSBCdWZmZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFNQSV9SREJSCQkJMHhGRkMwMDUxMAkvKiBTUEkgUmVjZWl2ZSBEYXRhIEJ1ZmZlciBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFNQSV9CQVVECQkJMHhGRkMwMDUxNAkvKiBTUEkgQmF1ZCByYXRlIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBTUElfU0hBRE9XCQkJMHhGRkMwMDUxOAkvKiBTUElfUkRCUiBTaGFkb3cgUmVnaXN0ZXIJCQkJCSovCisKKworLyogVElNRVIwLTcgUmVnaXN0ZXJzCQkoMHhGRkMwMDYwMCAtIDB4RkZDMDA2RkYpCQkJCQkJCQkqLworI2RlZmluZSBUSU1FUjBfQ09ORklHCQkweEZGQzAwNjAwCS8qIFRpbWVyIDAgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFRJTUVSMF9DT1VOVEVSCQkweEZGQzAwNjA0CS8qIFRpbWVyIDAgQ291bnRlciBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVElNRVIwX1BFUklPRAkJMHhGRkMwMDYwOAkvKiBUaW1lciAwIFBlcmlvZCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVElNRVIwX1dJRFRICQkweEZGQzAwNjBDCS8qIFRpbWVyIDAgV2lkdGggUmVnaXN0ZXIJCQkJCSovCisKKyNkZWZpbmUgVElNRVIxX0NPTkZJRwkJMHhGRkMwMDYxMAkvKiBUaW1lciAxIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCisjZGVmaW5lIFRJTUVSMV9DT1VOVEVSCQkweEZGQzAwNjE0CS8qIFRpbWVyIDEgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KKyNkZWZpbmUgVElNRVIxX1BFUklPRAkJMHhGRkMwMDYxOAkvKiBUaW1lciAxIFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSMV9XSURUSAkJMHhGRkMwMDYxQwkvKiBUaW1lciAxIFdpZHRoIFJlZ2lzdGVyICAgICAgICAgIAkJCSovCisKKyNkZWZpbmUgVElNRVIyX0NPTkZJRwkJMHhGRkMwMDYyMAkvKiBUaW1lciAyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIAkJCSovCisjZGVmaW5lIFRJTUVSMl9DT1VOVEVSCQkweEZGQzAwNjI0CS8qIFRpbWVyIDIgQ291bnRlciBSZWdpc3RlciAgICAgICAgCQkJKi8KKyNkZWZpbmUgVElNRVIyX1BFUklPRAkJMHhGRkMwMDYyOAkvKiBUaW1lciAyIFBlcmlvZCBSZWdpc3RlciAgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSMl9XSURUSAkJMHhGRkMwMDYyQwkvKiBUaW1lciAyIFdpZHRoIFJlZ2lzdGVyICAgICAgICAgIAkJCSovCisKKyNkZWZpbmUgVElNRVIzX0NPTkZJRwkJMHhGRkMwMDYzMAkvKiBUaW1lciAzIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkqLworI2RlZmluZSBUSU1FUjNfQ09VTlRFUgkJMHhGRkMwMDYzNAkvKiBUaW1lciAzIENvdW50ZXIgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFRJTUVSM19QRVJJT0QJCTB4RkZDMDA2MzgJLyogVGltZXIgMyBQZXJpb2QgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFRJTUVSM19XSURUSAkJMHhGRkMwMDYzQwkvKiBUaW1lciAzIFdpZHRoIFJlZ2lzdGVyCQkJCQkqLworCisjZGVmaW5lIFRJTUVSNF9DT05GSUcJCTB4RkZDMDA2NDAJLyogVGltZXIgNCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAJCQkqLworI2RlZmluZSBUSU1FUjRfQ09VTlRFUgkJMHhGRkMwMDY0NAkvKiBUaW1lciA0IENvdW50ZXIgUmVnaXN0ZXIgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSNF9QRVJJT0QJCTB4RkZDMDA2NDgJLyogVGltZXIgNCBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAJCQkqLworI2RlZmluZSBUSU1FUjRfV0lEVEgJCTB4RkZDMDA2NEMJLyogVGltZXIgNCBXaWR0aCBSZWdpc3RlciAgICAgICAgICAJCQkqLworCisjZGVmaW5lIFRJTUVSNV9DT05GSUcJCTB4RkZDMDA2NTAJLyogVGltZXIgNSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAJCQkqLworI2RlZmluZSBUSU1FUjVfQ09VTlRFUgkJMHhGRkMwMDY1NAkvKiBUaW1lciA1IENvdW50ZXIgUmVnaXN0ZXIgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSNV9QRVJJT0QJCTB4RkZDMDA2NTgJLyogVGltZXIgNSBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAJCQkqLworI2RlZmluZSBUSU1FUjVfV0lEVEgJCTB4RkZDMDA2NUMJLyogVGltZXIgNSBXaWR0aCBSZWdpc3RlciAgICAgICAgICAJCQkqLworCisjZGVmaW5lIFRJTUVSNl9DT05GSUcJCTB4RkZDMDA2NjAJLyogVGltZXIgNiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAJCQkqLworI2RlZmluZSBUSU1FUjZfQ09VTlRFUgkJMHhGRkMwMDY2NAkvKiBUaW1lciA2IENvdW50ZXIgUmVnaXN0ZXIgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSNl9QRVJJT0QJCTB4RkZDMDA2NjgJLyogVGltZXIgNiBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAJCQkqLworI2RlZmluZSBUSU1FUjZfV0lEVEgJCTB4RkZDMDA2NkMJLyogVGltZXIgNiBXaWR0aCBSZWdpc3RlciAgICAgICAgICAJCQkqLworCisjZGVmaW5lIFRJTUVSN19DT05GSUcJCTB4RkZDMDA2NzAJLyogVGltZXIgNyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAJCQkqLworI2RlZmluZSBUSU1FUjdfQ09VTlRFUgkJMHhGRkMwMDY3NAkvKiBUaW1lciA3IENvdW50ZXIgUmVnaXN0ZXIgICAgICAgIAkJCSovCisjZGVmaW5lIFRJTUVSN19QRVJJT0QJCTB4RkZDMDA2NzgJLyogVGltZXIgNyBQZXJpb2QgUmVnaXN0ZXIgICAgICAgICAJCQkqLworI2RlZmluZSBUSU1FUjdfV0lEVEgJCTB4RkZDMDA2N0MJLyogVGltZXIgNyBXaWR0aCBSZWdpc3RlciAgICAgICAJCQkqLyAgIAorCisjZGVmaW5lIFRJTUVSX0VOQUJMRQkJMHhGRkMwMDY4MAkvKiBUaW1lciBFbmFibGUgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFRJTUVSX0RJU0FCTEUJCTB4RkZDMDA2ODQJLyogVGltZXIgRGlzYWJsZSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVElNRVJfU1RBVFVTCQkweEZGQzAwNjg4CS8qIFRpbWVyIFN0YXR1cyBSZWdpc3RlcgkJCQkJKi8KKworCisvKiBHZW5lcmFsIFB1cnBvc2UgSS9PIFBvcnQgRiAoMHhGRkMwMDcwMCAtIDB4RkZDMDA3RkYpCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUE9SVEZJTwkJCQkJMHhGRkMwMDcwMAkvKiBQb3J0IEYgSS9PIFBpbiBTdGF0ZSBTcGVjaWZ5IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFBPUlRGSU9fQ0xFQVIJCQkweEZGQzAwNzA0CS8qIFBvcnQgRiBJL08gUGVyaXBoZXJhbCBJbnRlcnJ1cHQgQ2xlYXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBPUlRGSU9fU0VUCQkJCTB4RkZDMDA3MDgJLyogUG9ydCBGIEkvTyBQZXJpcGhlcmFsIEludGVycnVwdCBTZXQgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JURklPX1RPR0dMRQkJCTB4RkZDMDA3MEMJLyogUG9ydCBGIEkvTyBQaW4gU3RhdGUgVG9nZ2xlIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBQT1JURklPX01BU0tBCQkJMHhGRkMwMDcxMAkvKiBQb3J0IEYgSS9PIE1hc2sgU3RhdGUgU3BlY2lmeSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkqLworI2RlZmluZSBQT1JURklPX01BU0tBX0NMRUFSCQkweEZGQzAwNzE0CS8qIFBvcnQgRiBJL08gTWFzayBEaXNhYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEZJT19NQVNLQV9TRVQJCTB4RkZDMDA3MTgJLyogUG9ydCBGIEkvTyBNYXNrIEVuYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRGSU9fTUFTS0FfVE9HR0xFCTB4RkZDMDA3MUMJLyogUG9ydCBGIEkvTyBNYXNrIFRvZ2dsZSBFbmFibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEZJT19NQVNLQgkJCTB4RkZDMDA3MjAJLyogUG9ydCBGIEkvTyBNYXNrIFN0YXRlIFNwZWNpZnkgSW50ZXJydXB0IEIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEZJT19NQVNLQl9DTEVBUgkJMHhGRkMwMDcyNAkvKiBQb3J0IEYgSS9PIE1hc2sgRGlzYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRGSU9fTUFTS0JfU0VUCQkweEZGQzAwNzI4CS8qIFBvcnQgRiBJL08gTWFzayBFbmFibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JURklPX01BU0tCX1RPR0dMRQkweEZGQzAwNzJDCS8qIFBvcnQgRiBJL08gTWFzayBUb2dnbGUgRW5hYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRGSU9fRElSCQkJCTB4RkZDMDA3MzAJLyogUG9ydCBGIEkvTyBEaXJlY3Rpb24gUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBQT1JURklPX1BPTEFSCQkJMHhGRkMwMDczNAkvKiBQb3J0IEYgSS9PIFNvdXJjZSBQb2xhcml0eSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgUE9SVEZJT19FREdFCQkJMHhGRkMwMDczOAkvKiBQb3J0IEYgSS9PIFNvdXJjZSBTZW5zaXRpdml0eSBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBQT1JURklPX0JPVEgJCQkweEZGQzAwNzNDCS8qIFBvcnQgRiBJL08gU2V0IG9uIEJPVEggRWRnZXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgUE9SVEZJT19JTkVOCQkJMHhGRkMwMDc0MAkvKiBQb3J0IEYgSS9PIElucHV0IEVuYWJsZSBSZWdpc3RlciAJCQkJCSovCisKKworLyogU1BPUlQwIENvbnRyb2xsZXIJCSgweEZGQzAwODAwIC0gMHhGRkMwMDhGRikJCQkJCQkJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1RDUjEJCQkweEZGQzAwODAwCS8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBTUE9SVDBfVENSMgkJCTB4RkZDMDA4MDQJLyogU1BPUlQwIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFNQT1JUMF9UQ0xLRElWCQkweEZGQzAwODA4CS8qIFNQT1JUMCBUcmFuc21pdCBDbG9jayBEaXZpZGVyCQkJCQkqLworI2RlZmluZSBTUE9SVDBfVEZTRElWCQkweEZGQzAwODBDCS8qIFNQT1JUMCBUcmFuc21pdCBGcmFtZSBTeW5jIERpdmlkZXIJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1RYCQkJMHhGRkMwMDgxMAkvKiBTUE9SVDAgVFggRGF0YSBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBTUE9SVDBfUlgJCQkweEZGQzAwODE4CS8qIFNQT1JUMCBSWCBEYXRhIFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIFNQT1JUMF9SQ1IxCQkJMHhGRkMwMDgyMAkvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1JDUjIJCQkweEZGQzAwODI0CS8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBTUE9SVDBfUkNMS0RJVgkJMHhGRkMwMDgyOAkvKiBTUE9SVDAgUmVjZWl2ZSBDbG9jayBEaXZpZGVyCQkJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1JGU0RJVgkJMHhGRkMwMDgyQwkvKiBTUE9SVDAgUmVjZWl2ZSBGcmFtZSBTeW5jIERpdmlkZXIJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX1NUQVQJCQkweEZGQzAwODMwCS8qIFNQT1JUMCBTdGF0dXMgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgU1BPUlQwX0NITkwJCQkweEZGQzAwODM0CS8qIFNQT1JUMCBDdXJyZW50IENoYW5uZWwgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFNQT1JUMF9NQ01DMQkJMHhGRkMwMDgzOAkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEJKi8KKyNkZWZpbmUgU1BPUlQwX01DTUMyCQkweEZGQzAwODNDCS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgkqLworI2RlZmluZSBTUE9SVDBfTVRDUzAJCTB4RkZDMDA4NDAJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDAJKi8KKyNkZWZpbmUgU1BPUlQwX01UQ1MxCQkweEZGQzAwODQ0CS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAxCSovCisjZGVmaW5lIFNQT1JUMF9NVENTMgkJMHhGRkMwMDg0OAkvKiBTUE9SVDAgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMgkqLworI2RlZmluZSBTUE9SVDBfTVRDUzMJCTB4RkZDMDA4NEMJLyogU1BPUlQwIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDMJKi8KKyNkZWZpbmUgU1BPUlQwX01SQ1MwCQkweEZGQzAwODUwCS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDAJKi8KKyNkZWZpbmUgU1BPUlQwX01SQ1MxCQkweEZGQzAwODU0CS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDEJKi8KKyNkZWZpbmUgU1BPUlQwX01SQ1MyCQkweEZGQzAwODU4CS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDIJKi8KKyNkZWZpbmUgU1BPUlQwX01SQ1MzCQkweEZGQzAwODVDCS8qIFNQT1JUMCBNdWx0aS1DaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDMJKi8KKworCisvKiBTUE9SVDEgQ29udHJvbGxlcgkJKDB4RkZDMDA5MDAgLSAweEZGQzAwOUZGKQkJCQkJCQkJCQkqLworI2RlZmluZSBTUE9SVDFfVENSMQkJCTB4RkZDMDA5MDAJLyogU1BPUlQxIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFNQT1JUMV9UQ1IyCQkJMHhGRkMwMDkwNAkvKiBTUE9SVDEgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgU1BPUlQxX1RDTEtESVYJCTB4RkZDMDA5MDgJLyogU1BPUlQxIFRyYW5zbWl0IENsb2NrIERpdmlkZXIJCQkJCSovCisjZGVmaW5lIFNQT1JUMV9URlNESVYJCTB4RkZDMDA5MEMJLyogU1BPUlQxIFRyYW5zbWl0IEZyYW1lIFN5bmMgRGl2aWRlcgkJCQkqLworI2RlZmluZSBTUE9SVDFfVFgJCQkweEZGQzAwOTEwCS8qIFNQT1JUMSBUWCBEYXRhIFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIFNQT1JUMV9SWAkJCTB4RkZDMDA5MTgJLyogU1BPUlQxIFJYIERhdGEgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgU1BPUlQxX1JDUjEJCQkweEZGQzAwOTIwCS8qIFNQT1JUMSBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBTUE9SVDFfUkNSMgkJCTB4RkZDMDA5MjQJLyogU1BPUlQxIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFNQT1JUMV9SQ0xLRElWCQkweEZGQzAwOTI4CS8qIFNQT1JUMSBSZWNlaXZlIENsb2NrIERpdmlkZXIJCQkJCQkqLworI2RlZmluZSBTUE9SVDFfUkZTRElWCQkweEZGQzAwOTJDCS8qIFNQT1JUMSBSZWNlaXZlIEZyYW1lIFN5bmMgRGl2aWRlcgkJCQkqLworI2RlZmluZSBTUE9SVDFfU1RBVAkJCTB4RkZDMDA5MzAJLyogU1BPUlQxIFN0YXR1cyBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBTUE9SVDFfQ0hOTAkJCTB4RkZDMDA5MzQJLyogU1BPUlQxIEN1cnJlbnQgQ2hhbm5lbCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgU1BPUlQxX01DTUMxCQkweEZGQzAwOTM4CS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQkqLworI2RlZmluZSBTUE9SVDFfTUNNQzIJCTB4RkZDMDA5M0MJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyCSovCisjZGVmaW5lIFNQT1JUMV9NVENTMAkJMHhGRkMwMDk0MAkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMAkqLworI2RlZmluZSBTUE9SVDFfTVRDUzEJCTB4RkZDMDA5NDQJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDEJKi8KKyNkZWZpbmUgU1BPUlQxX01UQ1MyCQkweEZGQzAwOTQ4CS8qIFNQT1JUMSBNdWx0aS1DaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAyCSovCisjZGVmaW5lIFNQT1JUMV9NVENTMwkJMHhGRkMwMDk0QwkvKiBTUE9SVDEgTXVsdGktQ2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMwkqLworI2RlZmluZSBTUE9SVDFfTVJDUzAJCTB4RkZDMDA5NTAJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMAkqLworI2RlZmluZSBTUE9SVDFfTVJDUzEJCTB4RkZDMDA5NTQJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMQkqLworI2RlZmluZSBTUE9SVDFfTVJDUzIJCTB4RkZDMDA5NTgJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMgkqLworI2RlZmluZSBTUE9SVDFfTVJDUzMJCTB4RkZDMDA5NUMJLyogU1BPUlQxIE11bHRpLUNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMwkqLworCisKKy8qIEV4dGVybmFsIEJ1cyBJbnRlcmZhY2UgVW5pdCAoMHhGRkMwMEEwMCAtIDB4RkZDMDBBRkYpCQkJCQkJCQkqLworI2RlZmluZSBFQklVX0FNR0NUTAkJCTB4RkZDMDBBMDAJLyogQXN5bmNocm9ub3VzIE1lbW9yeSBHbG9iYWwgQ29udHJvbCBSZWdpc3RlcgkqLworI2RlZmluZSBFQklVX0FNQkNUTDAJCTB4RkZDMDBBMDQJLyogQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rIENvbnRyb2wgUmVnaXN0ZXIgMAkqLworI2RlZmluZSBFQklVX0FNQkNUTDEJCTB4RkZDMDBBMDgJLyogQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rIENvbnRyb2wgUmVnaXN0ZXIgMQkqLworI2RlZmluZSBFQklVX1NER0NUTAkJCTB4RkZDMDBBMTAJLyogU0RSQU0gR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRUJJVV9TREJDVEwJCQkweEZGQzAwQTE0CS8qIFNEUkFNIEJhbmsgQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRUJJVV9TRFJSQwkJCTB4RkZDMDBBMTgJLyogU0RSQU0gUmVmcmVzaCBSYXRlIENvbnRyb2wgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBFQklVX1NEU1RBVAkJCTB4RkZDMDBBMUMJLyogU0RSQU0gU3RhdHVzIFJlZ2lzdGVyCQkJCQkJKi8KKworCisvKiBETUEgVHJhZmZpYyBDb250cm9sIFJlZ2lzdGVycwkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBETUFfVENfUEVSCQkJMHhGRkMwMEIwQwkvKiBUcmFmZmljIENvbnRyb2wgUGVyaW9kcyBSZWdpc3RlcgkJCSovCisjZGVmaW5lIERNQV9UQ19DTlQJCQkweEZGQzAwQjEwCS8qIFRyYWZmaWMgQ29udHJvbCBDdXJyZW50IENvdW50cyBSZWdpc3RlcgkqLworCisvKiBBbHRlcm5hdGUgZGVwcmVjYXRlZCByZWdpc3RlciBuYW1lcyAoYmVsb3cpIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29kZSBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIERNQV9UQ1BFUgkJCTB4RkZDMDBCMEMJLyogVHJhZmZpYyBDb250cm9sIFBlcmlvZHMgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBETUFfVENDTlQJCQkweEZGQzAwQjEwCS8qIFRyYWZmaWMgQ29udHJvbCBDdXJyZW50IENvdW50cyBSZWdpc3RlcgkqLworCisvKiBETUEgQ29udHJvbGxlciAoMHhGRkMwMEMwMCAtIDB4RkZDMDBGRkYpCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgRE1BMF9ORVhUX0RFU0NfUFRSCQkweEZGQzAwQzAwCS8qIERNQSBDaGFubmVsIDAgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTBfU1RBUlRfQUREUgkJCTB4RkZDMDBDMDQJLyogRE1BIENoYW5uZWwgMCBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUEwX0NPTkZJRwkJCQkweEZGQzAwQzA4CS8qIERNQSBDaGFubmVsIDAgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BMF9YX0NPVU5UCQkJMHhGRkMwMEMxMAkvKiBETUEgQ2hhbm5lbCAwIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEwX1hfTU9ESUZZCQkJMHhGRkMwMEMxNAkvKiBETUEgQ2hhbm5lbCAwIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMF9ZX0NPVU5UCQkJMHhGRkMwMEMxOAkvKiBETUEgQ2hhbm5lbCAwIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEwX1lfTU9ESUZZCQkJMHhGRkMwMEMxQwkvKiBETUEgQ2hhbm5lbCAwIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMF9DVVJSX0RFU0NfUFRSCQkweEZGQzAwQzIwCS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BMF9DVVJSX0FERFIJCQkweEZGQzAwQzI0CS8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTBfSVJRX1NUQVRVUwkJCTB4RkZDMDBDMjgJLyogRE1BIENoYW5uZWwgMCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTBfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBDMkMJLyogRE1BIENoYW5uZWwgMCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUEwX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEMzMAkvKiBETUEgQ2hhbm5lbCAwIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUEwX0NVUlJfWV9DT1VOVAkJMHhGRkMwMEMzOAkvKiBETUEgQ2hhbm5lbCAwIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTFfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEM0MAkvKiBETUEgQ2hhbm5lbCAxIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBETUExX1NUQVJUX0FERFIJCQkweEZGQzAwQzQ0CS8qIERNQSBDaGFubmVsIDEgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BMV9DT05GSUcJCQkJMHhGRkMwMEM0OAkvKiBETUEgQ2hhbm5lbCAxIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTFfWF9DT1VOVAkJCTB4RkZDMDBDNTAJLyogRE1BIENoYW5uZWwgMSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMV9YX01PRElGWQkJCTB4RkZDMDBDNTQJLyogRE1BIENoYW5uZWwgMSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTFfWV9DT1VOVAkJCTB4RkZDMDBDNTgJLyogRE1BIENoYW5uZWwgMSBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BMV9ZX01PRElGWQkJCTB4RkZDMDBDNUMJLyogRE1BIENoYW5uZWwgMSBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTFfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEM2MAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTFfQ1VSUl9BRERSCQkJMHhGRkMwMEM2NAkvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExX0lSUV9TVEFUVVMJCQkweEZGQzAwQzY4CS8qIERNQSBDaGFubmVsIDEgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExX1BFUklQSEVSQUxfTUFQCQkweEZGQzAwQzZDCS8qIERNQSBDaGFubmVsIDEgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMV9DVVJSX1hfQ09VTlQJCTB4RkZDMDBDNzAJLyogRE1BIENoYW5uZWwgMSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMV9DVVJSX1lfQ09VTlQJCTB4RkZDMDBDNzgJLyogRE1BIENoYW5uZWwgMSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBETUEyX05FWFRfREVTQ19QVFIJCTB4RkZDMDBDODAJLyogRE1BIENoYW5uZWwgMiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BMl9TVEFSVF9BRERSCQkJMHhGRkMwMEM4NAkvKiBETUEgQ2hhbm5lbCAyIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTJfQ09ORklHCQkJCTB4RkZDMDBDODgJLyogRE1BIENoYW5uZWwgMiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUEyX1hfQ09VTlQJCQkweEZGQzAwQzkwCS8qIERNQSBDaGFubmVsIDIgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTJfWF9NT0RJRlkJCQkweEZGQzAwQzk0CS8qIERNQSBDaGFubmVsIDIgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEyX1lfQ09VTlQJCQkweEZGQzAwQzk4CS8qIERNQSBDaGFubmVsIDIgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTJfWV9NT0RJRlkJCQkweEZGQzAwQzlDCS8qIERNQSBDaGFubmVsIDIgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEyX0NVUlJfREVTQ19QVFIJCTB4RkZDMDBDQTAJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLworI2RlZmluZSBETUEyX0NVUlJfQUREUgkJCTB4RkZDMDBDQTQJLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMl9JUlFfU1RBVFVTCQkJMHhGRkMwMENBOAkvKiBETUEgQ2hhbm5lbCAyIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMl9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMENBQwkvKiBETUEgQ2hhbm5lbCAyIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTJfQ1VSUl9YX0NPVU5UCQkweEZGQzAwQ0IwCS8qIERNQSBDaGFubmVsIDIgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTJfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwQ0I4CS8qIERNQSBDaGFubmVsIDIgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgRE1BM19ORVhUX0RFU0NfUFRSCQkweEZGQzAwQ0MwCS8qIERNQSBDaGFubmVsIDMgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTNfU1RBUlRfQUREUgkJCTB4RkZDMDBDQzQJLyogRE1BIENoYW5uZWwgMyBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUEzX0NPTkZJRwkJCQkweEZGQzAwQ0M4CS8qIERNQSBDaGFubmVsIDMgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BM19YX0NPVU5UCQkJMHhGRkMwMENEMAkvKiBETUEgQ2hhbm5lbCAzIFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEzX1hfTU9ESUZZCQkJMHhGRkMwMENENAkvKiBETUEgQ2hhbm5lbCAzIFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BM19ZX0NPVU5UCQkJMHhGRkMwMENEOAkvKiBETUEgQ2hhbm5lbCAzIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUEzX1lfTU9ESUZZCQkJMHhGRkMwMENEQwkvKiBETUEgQ2hhbm5lbCAzIFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BM19DVVJSX0RFU0NfUFRSCQkweEZGQzAwQ0UwCS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BM19DVVJSX0FERFIJCQkweEZGQzAwQ0U0CS8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTNfSVJRX1NUQVRVUwkJCTB4RkZDMDBDRTgJLyogRE1BIENoYW5uZWwgMyBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTNfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBDRUMJLyogRE1BIENoYW5uZWwgMyBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUEzX0NVUlJfWF9DT1VOVAkJMHhGRkMwMENGMAkvKiBETUEgQ2hhbm5lbCAzIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUEzX0NVUlJfWV9DT1VOVAkJMHhGRkMwMENGOAkvKiBETUEgQ2hhbm5lbCAzIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTRfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEQwMAkvKiBETUEgQ2hhbm5lbCA0IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBETUE0X1NUQVJUX0FERFIJCQkweEZGQzAwRDA0CS8qIERNQSBDaGFubmVsIDQgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BNF9DT05GSUcJCQkJMHhGRkMwMEQwOAkvKiBETUEgQ2hhbm5lbCA0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTRfWF9DT1VOVAkJCTB4RkZDMDBEMTAJLyogRE1BIENoYW5uZWwgNCBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNF9YX01PRElGWQkJCTB4RkZDMDBEMTQJLyogRE1BIENoYW5uZWwgNCBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTRfWV9DT1VOVAkJCTB4RkZDMDBEMTgJLyogRE1BIENoYW5uZWwgNCBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNF9ZX01PRElGWQkJCTB4RkZDMDBEMUMJLyogRE1BIENoYW5uZWwgNCBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTRfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMEQyMAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTRfQ1VSUl9BRERSCQkJMHhGRkMwMEQyNAkvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE0X0lSUV9TVEFUVVMJCQkweEZGQzAwRDI4CS8qIERNQSBDaGFubmVsIDQgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE0X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwRDJDCS8qIERNQSBDaGFubmVsIDQgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNF9DVVJSX1hfQ09VTlQJCTB4RkZDMDBEMzAJLyogRE1BIENoYW5uZWwgNCBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNF9DVVJSX1lfQ09VTlQJCTB4RkZDMDBEMzgJLyogRE1BIENoYW5uZWwgNCBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBETUE1X05FWFRfREVTQ19QVFIJCTB4RkZDMDBENDAJLyogRE1BIENoYW5uZWwgNSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BNV9TVEFSVF9BRERSCQkJMHhGRkMwMEQ0NAkvKiBETUEgQ2hhbm5lbCA1IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTVfQ09ORklHCQkJCTB4RkZDMDBENDgJLyogRE1BIENoYW5uZWwgNSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE1X1hfQ09VTlQJCQkweEZGQzAwRDUwCS8qIERNQSBDaGFubmVsIDUgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTVfWF9NT0RJRlkJCQkweEZGQzAwRDU0CS8qIERNQSBDaGFubmVsIDUgWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE1X1lfQ09VTlQJCQkweEZGQzAwRDU4CS8qIERNQSBDaGFubmVsIDUgWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTVfWV9NT0RJRlkJCQkweEZGQzAwRDVDCS8qIERNQSBDaGFubmVsIDUgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE1X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBENjAJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLworI2RlZmluZSBETUE1X0NVUlJfQUREUgkJCTB4RkZDMDBENjQJLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNV9JUlFfU1RBVFVTCQkJMHhGRkMwMEQ2OAkvKiBETUEgQ2hhbm5lbCA1IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BNV9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEQ2QwkvKiBETUEgQ2hhbm5lbCA1IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTVfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRDcwCS8qIERNQSBDaGFubmVsIDUgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTVfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRDc4CS8qIERNQSBDaGFubmVsIDUgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgRE1BNl9ORVhUX0RFU0NfUFRSCQkweEZGQzAwRDgwCS8qIERNQSBDaGFubmVsIDYgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTZfU1RBUlRfQUREUgkJCTB4RkZDMDBEODQJLyogRE1BIENoYW5uZWwgNiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE2X0NPTkZJRwkJCQkweEZGQzAwRDg4CS8qIERNQSBDaGFubmVsIDYgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BNl9YX0NPVU5UCQkJMHhGRkMwMEQ5MAkvKiBETUEgQ2hhbm5lbCA2IFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE2X1hfTU9ESUZZCQkJMHhGRkMwMEQ5NAkvKiBETUEgQ2hhbm5lbCA2IFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNl9ZX0NPVU5UCQkJMHhGRkMwMEQ5OAkvKiBETUEgQ2hhbm5lbCA2IFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE2X1lfTU9ESUZZCQkJMHhGRkMwMEQ5QwkvKiBETUEgQ2hhbm5lbCA2IFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BNl9DVVJSX0RFU0NfUFRSCQkweEZGQzAwREEwCS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BNl9DVVJSX0FERFIJCQkweEZGQzAwREE0CS8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTZfSVJRX1NUQVRVUwkJCTB4RkZDMDBEQTgJLyogRE1BIENoYW5uZWwgNiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTZfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBEQUMJLyogRE1BIENoYW5uZWwgNiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE2X0NVUlJfWF9DT1VOVAkJMHhGRkMwMERCMAkvKiBETUEgQ2hhbm5lbCA2IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE2X0NVUlJfWV9DT1VOVAkJMHhGRkMwMERCOAkvKiBETUEgQ2hhbm5lbCA2IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTdfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMERDMAkvKiBETUEgQ2hhbm5lbCA3IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBETUE3X1NUQVJUX0FERFIJCQkweEZGQzAwREM0CS8qIERNQSBDaGFubmVsIDcgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BN19DT05GSUcJCQkJMHhGRkMwMERDOAkvKiBETUEgQ2hhbm5lbCA3IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQTdfWF9DT1VOVAkJCTB4RkZDMDBERDAJLyogRE1BIENoYW5uZWwgNyBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BN19YX01PRElGWQkJCTB4RkZDMDBERDQJLyogRE1BIENoYW5uZWwgNyBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTdfWV9DT1VOVAkJCTB4RkZDMDBERDgJLyogRE1BIENoYW5uZWwgNyBZIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BN19ZX01PRElGWQkJCTB4RkZDMDBEREMJLyogRE1BIENoYW5uZWwgNyBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTdfQ1VSUl9ERVNDX1BUUgkJMHhGRkMwMERFMAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTdfQ1VSUl9BRERSCQkJMHhGRkMwMERFNAkvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE3X0lSUV9TVEFUVVMJCQkweEZGQzAwREU4CS8qIERNQSBDaGFubmVsIDcgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE3X1BFUklQSEVSQUxfTUFQCQkweEZGQzAwREVDCS8qIERNQSBDaGFubmVsIDcgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BN19DVVJSX1hfQ09VTlQJCTB4RkZDMDBERjAJLyogRE1BIENoYW5uZWwgNyBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BN19DVVJSX1lfQ09VTlQJCTB4RkZDMDBERjgJLyogRE1BIENoYW5uZWwgNyBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBETUE4X05FWFRfREVTQ19QVFIJCTB4RkZDMDBFMDAJLyogRE1BIENoYW5uZWwgOCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgRE1BOF9TVEFSVF9BRERSCQkJMHhGRkMwMEUwNAkvKiBETUEgQ2hhbm5lbCA4IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIERNQThfQ09ORklHCQkJCTB4RkZDMDBFMDgJLyogRE1BIENoYW5uZWwgOCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE4X1hfQ09VTlQJCQkweEZGQzAwRTEwCS8qIERNQSBDaGFubmVsIDggWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQThfWF9NT0RJRlkJCQkweEZGQzAwRTE0CS8qIERNQSBDaGFubmVsIDggWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE4X1lfQ09VTlQJCQkweEZGQzAwRTE4CS8qIERNQSBDaGFubmVsIDggWSBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQThfWV9NT0RJRlkJCQkweEZGQzAwRTFDCS8qIERNQSBDaGFubmVsIDggWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE4X0NVUlJfREVTQ19QVFIJCTB4RkZDMDBFMjAJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkqLworI2RlZmluZSBETUE4X0NVUlJfQUREUgkJCTB4RkZDMDBFMjQJLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BOF9JUlFfU1RBVFVTCQkJMHhGRkMwMEUyOAkvKiBETUEgQ2hhbm5lbCA4IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BOF9QRVJJUEhFUkFMX01BUAkJMHhGRkMwMEUyQwkvKiBETUEgQ2hhbm5lbCA4IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQThfQ1VSUl9YX0NPVU5UCQkweEZGQzAwRTMwCS8qIERNQSBDaGFubmVsIDggQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQThfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRTM4CS8qIERNQSBDaGFubmVsIDggQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgRE1BOV9ORVhUX0RFU0NfUFRSCQkweEZGQzAwRTQwCS8qIERNQSBDaGFubmVsIDkgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTlfU1RBUlRfQUREUgkJCTB4RkZDMDBFNDQJLyogRE1BIENoYW5uZWwgOSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBETUE5X0NPTkZJRwkJCQkweEZGQzAwRTQ4CS8qIERNQSBDaGFubmVsIDkgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgRE1BOV9YX0NPVU5UCQkJMHhGRkMwMEU1MAkvKiBETUEgQ2hhbm5lbCA5IFggQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE5X1hfTU9ESUZZCQkJMHhGRkMwMEU1NAkvKiBETUEgQ2hhbm5lbCA5IFggTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BOV9ZX0NPVU5UCQkJMHhGRkMwMEU1OAkvKiBETUEgQ2hhbm5lbCA5IFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUE5X1lfTU9ESUZZCQkJMHhGRkMwMEU1QwkvKiBETUEgQ2hhbm5lbCA5IFkgTW9kaWZ5IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgRE1BOV9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRTYwCS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgRE1BOV9DVVJSX0FERFIJCQkweEZGQzAwRTY0CS8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTlfSVJRX1NUQVRVUwkJCTB4RkZDMDBFNjgJLyogRE1BIENoYW5uZWwgOSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTlfUEVSSVBIRVJBTF9NQVAJCTB4RkZDMDBFNkMJLyogRE1BIENoYW5uZWwgOSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE5X0NVUlJfWF9DT1VOVAkJMHhGRkMwMEU3MAkvKiBETUEgQ2hhbm5lbCA5IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUE5X0NVUlJfWV9DT1VOVAkJMHhGRkMwMEU3OAkvKiBETUEgQ2hhbm5lbCA5IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTEwX05FWFRfREVTQ19QVFIJCTB4RkZDMDBFODAJLyogRE1BIENoYW5uZWwgMTAgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTEwX1NUQVJUX0FERFIJCTB4RkZDMDBFODQJLyogRE1BIENoYW5uZWwgMTAgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMF9DT05GSUcJCQkweEZGQzAwRTg4CS8qIERNQSBDaGFubmVsIDEwIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTBfWF9DT1VOVAkJCTB4RkZDMDBFOTAJLyogRE1BIENoYW5uZWwgMTAgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTEwX1hfTU9ESUZZCQkJMHhGRkMwMEU5NAkvKiBETUEgQ2hhbm5lbCAxMCBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTEwX1lfQ09VTlQJCQkweEZGQzAwRTk4CS8qIERNQSBDaGFubmVsIDEwIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUExMF9ZX01PRElGWQkJCTB4RkZDMDBFOUMJLyogRE1BIENoYW5uZWwgMTAgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUExMF9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRUEwCS8qIERNQSBDaGFubmVsIDEwIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTEwX0NVUlJfQUREUgkJCTB4RkZDMDBFQTQJLyogRE1BIENoYW5uZWwgMTAgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTEwX0lSUV9TVEFUVVMJCTB4RkZDMDBFQTgJLyogRE1BIENoYW5uZWwgMTAgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMF9QRVJJUEhFUkFMX01BUAkweEZGQzAwRUFDCS8qIERNQSBDaGFubmVsIDEwIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTEwX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEVCMAkvKiBETUEgQ2hhbm5lbCAxMCBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTBfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRUI4CS8qIERNQSBDaGFubmVsIDEwIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIERNQTExX05FWFRfREVTQ19QVFIJCTB4RkZDMDBFQzAJLyogRE1BIENoYW5uZWwgMTEgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIJCSovCisjZGVmaW5lIERNQTExX1NUQVJUX0FERFIJCTB4RkZDMDBFQzQJLyogRE1BIENoYW5uZWwgMTEgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMV9DT05GSUcJCQkweEZGQzAwRUM4CS8qIERNQSBDaGFubmVsIDExIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTFfWF9DT1VOVAkJCTB4RkZDMDBFRDAJLyogRE1BIENoYW5uZWwgMTEgWCBDb3VudCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTExX1hfTU9ESUZZCQkJMHhGRkMwMEVENAkvKiBETUEgQ2hhbm5lbCAxMSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIERNQTExX1lfQ09VTlQJCQkweEZGQzAwRUQ4CS8qIERNQSBDaGFubmVsIDExIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUExMV9ZX01PRElGWQkJCTB4RkZDMDBFREMJLyogRE1BIENoYW5uZWwgMTEgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBETUExMV9DVVJSX0RFU0NfUFRSCQkweEZGQzAwRUUwCS8qIERNQSBDaGFubmVsIDExIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIERNQTExX0NVUlJfQUREUgkJCTB4RkZDMDBFRTQJLyogRE1BIENoYW5uZWwgMTEgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTExX0lSUV9TVEFUVVMJCTB4RkZDMDBFRTgJLyogRE1BIENoYW5uZWwgMTEgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBETUExMV9QRVJJUEhFUkFMX01BUAkweEZGQzAwRUVDCS8qIERNQSBDaGFubmVsIDExIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIERNQTExX0NVUlJfWF9DT1VOVAkJMHhGRkMwMEVGMAkvKiBETUEgQ2hhbm5lbCAxMSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgRE1BMTFfQ1VSUl9ZX0NPVU5UCQkweEZGQzAwRUY4CS8qIERNQSBDaGFubmVsIDExIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlcgkJCQkqLworCisjZGVmaW5lIE1ETUFfRDBfTkVYVF9ERVNDX1BUUgkweEZGQzAwRjAwCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgTURNQV9EMF9TVEFSVF9BRERSCQkweEZGQzAwRjA0CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIE1ETUFfRDBfQ09ORklHCQkJMHhGRkMwMEYwOAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QwX1hfQ09VTlQJCQkweEZGQzAwRjEwCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9YX01PRElGWQkJMHhGRkMwMEYxNAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfRDBfWV9DT1VOVAkJCTB4RkZDMDBGMTgJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBNRE1BX0QwX1lfTU9ESUZZCQkweEZGQzAwRjFDCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGMjAJLyogTWVtRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIE1ETUFfRDBfQ1VSUl9BRERSCQkweEZGQzAwRjI0CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9JUlFfU1RBVFVTCQkweEZGQzAwRjI4CS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9QRVJJUEhFUkFMX01BUAkweEZGQzAwRjJDCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QwX0NVUlJfWF9DT1VOVAkweEZGQzAwRjMwCS8qIE1lbURNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgTURNQV9EMF9DVVJSX1lfQ09VTlQJMHhGRkMwMEYzOAkvKiBNZW1ETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgTURNQV9TMF9ORVhUX0RFU0NfUFRSCTB4RkZDMDBGNDAJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJCSovCisjZGVmaW5lIE1ETUFfUzBfU1RBUlRfQUREUgkJMHhGRkMwMEY0NAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfQ09ORklHCQkJMHhGRkMwMEY0OAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfWF9DT1VOVAkJCTB4RkZDMDBGNTAJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfWF9NT0RJRlkJCTB4RkZDMDBGNTQJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBNRE1BX1MwX1lfQ09VTlQJCQkweEZGQzAwRjU4CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgWSBDb3VudCBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBNRE1BX1MwX1lfTU9ESUZZCQkweEZGQzAwRjVDCS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMF9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGNjAJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgTURNQV9TMF9DVVJSX0FERFIJCTB4RkZDMDBGNjQJLyogTWVtRE1BIFN0cmVhbSAwIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfSVJRX1NUQVRVUwkJMHhGRkMwMEY2OAkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzBfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMEY2QwkvKiBNZW1ETUEgU3RyZWFtIDAgU291cmNlIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBNRE1BX1MwX0NVUlJfWF9DT1VOVAkweEZGQzAwRjcwCS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBNRE1BX1MwX0NVUlJfWV9DT1VOVAkweEZGQzAwRjc4CS8qIE1lbURNQSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCQkqLworCisjZGVmaW5lIE1ETUFfRDFfTkVYVF9ERVNDX1BUUgkweEZGQzAwRjgwCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgTURNQV9EMV9TVEFSVF9BRERSCQkweEZGQzAwRjg0CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIE1ETUFfRDFfQ09ORklHCQkJMHhGRkMwMEY4OAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QxX1hfQ09VTlQJCQkweEZGQzAwRjkwCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBYIENvdW50IFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9YX01PRElGWQkJMHhGRkMwMEY5NAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gWCBNb2RpZnkgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfRDFfWV9DT1VOVAkJCTB4RkZDMDBGOTgJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFkgQ291bnQgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBNRE1BX0QxX1lfTU9ESUZZCQkweEZGQzAwRjlDCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBZIE1vZGlmeSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGQTAJLyogTWVtRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyCSovCisjZGVmaW5lIE1ETUFfRDFfQ1VSUl9BRERSCQkweEZGQzAwRkE0CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9JUlFfU1RBVFVTCQkweEZGQzAwRkE4CS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9QRVJJUEhFUkFMX01BUAkweEZGQzAwRkFDCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBNRE1BX0QxX0NVUlJfWF9DT1VOVAkweEZGQzAwRkIwCS8qIE1lbURNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgTURNQV9EMV9DVVJSX1lfQ09VTlQJMHhGRkMwMEZCOAkvKiBNZW1ETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCSovCisKKyNkZWZpbmUgTURNQV9TMV9ORVhUX0RFU0NfUFRSCTB4RkZDMDBGQzAJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJCSovCisjZGVmaW5lIE1ETUFfUzFfU1RBUlRfQUREUgkJMHhGRkMwMEZDNAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfQ09ORklHCQkJMHhGRkMwMEZDOAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfWF9DT1VOVAkJCTB4RkZDMDBGRDAJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBYIENvdW50IFJlZ2lzdGVyCQkJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfWF9NT0RJRlkJCTB4RkZDMDBGRDQJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBNRE1BX1MxX1lfQ09VTlQJCQkweEZGQzAwRkQ4CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgWSBDb3VudCBSZWdpc3RlcgkJCQkJCQkqLworI2RlZmluZSBNRE1BX1MxX1lfTU9ESUZZCQkweEZGQzAwRkRDCS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgWSBNb2RpZnkgUmVnaXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgTURNQV9TMV9DVVJSX0RFU0NfUFRSCTB4RkZDMDBGRTAJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgTURNQV9TMV9DVVJSX0FERFIJCTB4RkZDMDBGRTQJLyogTWVtRE1BIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfSVJRX1NUQVRVUwkJMHhGRkMwMEZFOAkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIE1ETUFfUzFfUEVSSVBIRVJBTF9NQVAJMHhGRkMwMEZFQwkvKiBNZW1ETUEgU3RyZWFtIDEgU291cmNlIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBNRE1BX1MxX0NVUlJfWF9DT1VOVAkweEZGQzAwRkYwCS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBNRE1BX1MxX0NVUlJfWV9DT1VOVAkweEZGQzAwRkY4CS8qIE1lbURNQSBTdHJlYW0gMSBTb3VyY2UgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyCQkJCQkqLworCisKKy8qIFBhcmFsbGVsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICgweEZGQzAxMDAwIC0gMHhGRkMwMTBGRikJCQkJKi8KKyNkZWZpbmUgUFBJX0NPTlRST0wJCQkweEZGQzAxMDAwCS8qIFBQSSBDb250cm9sIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUFBJX1NUQVRVUwkJCTB4RkZDMDEwMDQJLyogUFBJIFN0YXR1cyBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBQSV9DT1VOVAkJCTB4RkZDMDEwMDgJLyogUFBJIFRyYW5zZmVyIENvdW50IFJlZ2lzdGVyCSovCisjZGVmaW5lIFBQSV9ERUxBWQkJCTB4RkZDMDEwMEMJLyogUFBJIERlbGF5IENvdW50IFJlZ2lzdGVyCQkqLworI2RlZmluZSBQUElfRlJBTUUJCQkweEZGQzAxMDEwCS8qIFBQSSBGcmFtZSBMZW5ndGggUmVnaXN0ZXIJKi8KKworCisvKiBUd28tV2lyZSBJbnRlcmZhY2UJCSgweEZGQzAxNDAwIC0gMHhGRkMwMTRGRikJCQkJCQkJCSovCisjZGVmaW5lIFRXSV9DTEtESVYJCQkweEZGQzAxNDAwCS8qIFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgVFdJX0NPTlRST0wJCQkweEZGQzAxNDA0CS8qIFRXSSBDb250cm9sIFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgVFdJX1NMQVZFX0NUTAkJMHhGRkMwMTQwOAkvKiBTbGF2ZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVFdJX1NMQVZFX1NUQVQJCTB4RkZDMDE0MEMJLyogU2xhdmUgTW9kZSBTdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVFdJX1NMQVZFX0FERFIJCTB4RkZDMDE0MTAJLyogU2xhdmUgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFRXSV9NQVNURVJfQ1RMCQkweEZGQzAxNDE0CS8qIE1hc3RlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVFdJX01BU1RFUl9TVEFUCQkweEZGQzAxNDE4CS8qIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0lfTUFTVEVSX0FERFIJCTB4RkZDMDE0MUMJLyogTWFzdGVyIE1vZGUgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0lfSU5UX1NUQVQJCTB4RkZDMDE0MjAJLyogVFdJIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBUV0lfSU5UX01BU0sJCTB4RkZDMDE0MjQJLyogVFdJIE1hc3RlciBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgVFdJX0ZJRk9fQ1RMCQkweEZGQzAxNDI4CS8qIEZJRk8gQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgVFdJX0ZJRk9fU1RBVAkJMHhGRkMwMTQyQwkvKiBGSUZPIFN0YXR1cyBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFRXSV9YTVRfREFUQTgJCTB4RkZDMDE0ODAJLyogRklGTyBUcmFuc21pdCBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyCSovCisjZGVmaW5lIFRXSV9YTVRfREFUQTE2CQkweEZGQzAxNDg0CS8qIEZJRk8gVHJhbnNtaXQgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlcgkqLworI2RlZmluZSBUV0lfUkNWX0RBVEE4CQkweEZGQzAxNDg4CS8qIEZJRk8gUmVjZWl2ZSBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyCSovCisjZGVmaW5lIFRXSV9SQ1ZfREFUQTE2CQkweEZGQzAxNDhDCS8qIEZJRk8gUmVjZWl2ZSBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyCSovCisKKworLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBQb3J0IEcgKDB4RkZDMDE1MDAgLSAweEZGQzAxNUZGKQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFBPUlRHSU8JCQkJCTB4RkZDMDE1MDAJLyogUG9ydCBHIEkvTyBQaW4gU3RhdGUgU3BlY2lmeSBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBQT1JUR0lPX0NMRUFSCQkJMHhGRkMwMTUwNAkvKiBQb3J0IEcgSS9PIFBlcmlwaGVyYWwgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyCQkqLworI2RlZmluZSBQT1JUR0lPX1NFVAkJCQkweEZGQzAxNTA4CS8qIFBvcnQgRyBJL08gUGVyaXBoZXJhbCBJbnRlcnJ1cHQgU2V0IFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19UT0dHTEUJCQkweEZGQzAxNTBDCS8qIFBvcnQgRyBJL08gUGluIFN0YXRlIFRvZ2dsZSBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19NQVNLQQkJCTB4RkZDMDE1MTAJLyogUG9ydCBHIEkvTyBNYXNrIFN0YXRlIFNwZWNpZnkgSW50ZXJydXB0IEEgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEdJT19NQVNLQV9DTEVBUgkJMHhGRkMwMTUxNAkvKiBQb3J0IEcgSS9PIE1hc2sgRGlzYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRHSU9fTUFTS0FfU0VUCQkweEZGQzAxNTE4CS8qIFBvcnQgRyBJL08gTWFzayBFbmFibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JUR0lPX01BU0tBX1RPR0dMRQkweEZGQzAxNTFDCS8qIFBvcnQgRyBJL08gTWFzayBUb2dnbGUgRW5hYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRHSU9fTUFTS0IJCQkweEZGQzAxNTIwCS8qIFBvcnQgRyBJL08gTWFzayBTdGF0ZSBTcGVjaWZ5IEludGVycnVwdCBCIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRHSU9fTUFTS0JfQ0xFQVIJCTB4RkZDMDE1MjQJLyogUG9ydCBHIEkvTyBNYXNrIERpc2FibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JUR0lPX01BU0tCX1NFVAkJMHhGRkMwMTUyOAkvKiBQb3J0IEcgSS9PIE1hc2sgRW5hYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19NQVNLQl9UT0dHTEUJMHhGRkMwMTUyQwkvKiBQb3J0IEcgSS9PIE1hc2sgVG9nZ2xlIEVuYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkqLworI2RlZmluZSBQT1JUR0lPX0RJUgkJCQkweEZGQzAxNTMwCS8qIFBvcnQgRyBJL08gRGlyZWN0aW9uIFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19QT0xBUgkJCTB4RkZDMDE1MzQJLyogUG9ydCBHIEkvTyBTb3VyY2UgUG9sYXJpdHkgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFBPUlRHSU9fRURHRQkJCTB4RkZDMDE1MzgJLyogUG9ydCBHIEkvTyBTb3VyY2UgU2Vuc2l0aXZpdHkgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgUE9SVEdJT19CT1RICQkJMHhGRkMwMTUzQwkvKiBQb3J0IEcgSS9PIFNldCBvbiBCT1RIIEVkZ2VzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFBPUlRHSU9fSU5FTgkJCTB4RkZDMDE1NDAJLyogUG9ydCBHIEkvTyBJbnB1dCBFbmFibGUgUmVnaXN0ZXIJCQkJCQkqLworCisKKy8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBIICgweEZGQzAxNzAwIC0gMHhGRkMwMTdGRikJCQkJCQkJCQkJCQkqLworI2RlZmluZSBQT1JUSElPCQkJCQkweEZGQzAxNzAwCS8qIFBvcnQgSCBJL08gUGluIFN0YXRlIFNwZWNpZnkgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgUE9SVEhJT19DTEVBUgkJCTB4RkZDMDE3MDQJLyogUG9ydCBIIEkvTyBQZXJpcGhlcmFsIEludGVycnVwdCBDbGVhciBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgUE9SVEhJT19TRVQJCQkJMHhGRkMwMTcwOAkvKiBQb3J0IEggSS9PIFBlcmlwaGVyYWwgSW50ZXJydXB0IFNldCBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRISU9fVE9HR0xFCQkJMHhGRkMwMTcwQwkvKiBQb3J0IEggSS9PIFBpbiBTdGF0ZSBUb2dnbGUgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFBPUlRISU9fTUFTS0EJCQkweEZGQzAxNzEwCS8qIFBvcnQgSCBJL08gTWFzayBTdGF0ZSBTcGVjaWZ5IEludGVycnVwdCBBIFJlZ2lzdGVyCSovCisjZGVmaW5lIFBPUlRISU9fTUFTS0FfQ0xFQVIJCTB4RkZDMDE3MTQJLyogUG9ydCBIIEkvTyBNYXNrIERpc2FibGUgSW50ZXJydXB0IEEgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBQT1JUSElPX01BU0tBX1NFVAkJMHhGRkMwMTcxOAkvKiBQb3J0IEggSS9PIE1hc2sgRW5hYmxlIEludGVycnVwdCBBIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEhJT19NQVNLQV9UT0dHTEUJMHhGRkMwMTcxQwkvKiBQb3J0IEggSS9PIE1hc2sgVG9nZ2xlIEVuYWJsZSBJbnRlcnJ1cHQgQSBSZWdpc3RlcgkqLworI2RlZmluZSBQT1JUSElPX01BU0tCCQkJMHhGRkMwMTcyMAkvKiBQb3J0IEggSS9PIE1hc2sgU3RhdGUgU3BlY2lmeSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkqLworI2RlZmluZSBQT1JUSElPX01BU0tCX0NMRUFSCQkweEZGQzAxNzI0CS8qIFBvcnQgSCBJL08gTWFzayBEaXNhYmxlIEludGVycnVwdCBCIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgUE9SVEhJT19NQVNLQl9TRVQJCTB4RkZDMDE3MjgJLyogUG9ydCBIIEkvTyBNYXNrIEVuYWJsZSBJbnRlcnJ1cHQgQiBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFBPUlRISU9fTUFTS0JfVE9HR0xFCTB4RkZDMDE3MkMJLyogUG9ydCBIIEkvTyBNYXNrIFRvZ2dsZSBFbmFibGUgSW50ZXJydXB0IEIgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgUE9SVEhJT19ESVIJCQkJMHhGRkMwMTczMAkvKiBQb3J0IEggSS9PIERpcmVjdGlvbiBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFBPUlRISU9fUE9MQVIJCQkweEZGQzAxNzM0CS8qIFBvcnQgSCBJL08gU291cmNlIFBvbGFyaXR5IFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBQT1JUSElPX0VER0UJCQkweEZGQzAxNzM4CS8qIFBvcnQgSCBJL08gU291cmNlIFNlbnNpdGl2aXR5IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFBPUlRISU9fQk9USAkJCTB4RkZDMDE3M0MJLyogUG9ydCBIIEkvTyBTZXQgb24gQk9USCBFZGdlcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBQT1JUSElPX0lORU4JCQkweEZGQzAxNzQwCS8qIFBvcnQgSCBJL08gSW5wdXQgRW5hYmxlIFJlZ2lzdGVyCQkJCQkJKi8KKworCisvKiBVQVJUMSBDb250cm9sbGVyCQkoMHhGRkMwMjAwMCAtIDB4RkZDMDIwRkYpCQkJCQkJCQkqLworI2RlZmluZSBVQVJUMV9USFIJCQkweEZGQzAyMDAwCS8qIFRyYW5zbWl0IEhvbGRpbmcgcmVnaXN0ZXIJCQkqLworI2RlZmluZSBVQVJUMV9SQlIJCQkweEZGQzAyMDAwCS8qIFJlY2VpdmUgQnVmZmVyIHJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFVBUlQxX0RMTAkJCTB4RkZDMDIwMDAJLyogRGl2aXNvciBMYXRjaCAoTG93LUJ5dGUpCQkJCSovCisjZGVmaW5lIFVBUlQxX0lFUgkJCTB4RkZDMDIwMDQJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFVBUlQxX0RMSAkJCTB4RkZDMDIwMDQJLyogRGl2aXNvciBMYXRjaCAoSGlnaC1CeXRlKQkJCSovCisjZGVmaW5lIFVBUlQxX0lJUgkJCTB4RkZDMDIwMDgJLyogSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyCSovCisjZGVmaW5lIFVBUlQxX0xDUgkJCTB4RkZDMDIwMEMJLyogTGluZSBDb250cm9sIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFVBUlQxX01DUgkJCTB4RkZDMDIwMTAJLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBVQVJUMV9MU1IJCQkweEZGQzAyMDE0CS8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBVQVJUMV9NU1IJCQkweEZGQzAyMDE4CS8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBVQVJUMV9TQ1IJCQkweEZGQzAyMDFDCS8qIFNDUiBTY3JhdGNoIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBVQVJUMV9HQ1RMCQkJMHhGRkMwMjAyNAkvKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlcgkJCQkqLworCisKKy8qIE9taXQgQ0FOIHJlZ2lzdGVyIHNldHMgZnJvbSB0aGUgZGVmQkY1MzQuaCAoQ0FOIGlzIG5vdCBpbiB0aGUgQURTUC1CRjUyeCBwcm9jZXNzb3IpICovCisKKy8qIFBpbiBDb250cm9sIFJlZ2lzdGVycwkoMHhGRkMwMzIwMCAtIDB4RkZDMDMyRkYpCQkJCQkJCQkJCQkqLworI2RlZmluZSBQT1JURl9GRVIJCQkweEZGQzAzMjAwCS8qIFBvcnQgRiBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXIgKEFsdGVybmF0ZS9GbGFnKikJKi8KKyNkZWZpbmUgUE9SVEdfRkVSCQkJMHhGRkMwMzIwNAkvKiBQb3J0IEcgRnVuY3Rpb24gRW5hYmxlIFJlZ2lzdGVyIChBbHRlcm5hdGUvRmxhZyopCSovCisjZGVmaW5lIFBPUlRIX0ZFUgkJCTB4RkZDMDMyMDgJLyogUG9ydCBIIEZ1bmN0aW9uIEVuYWJsZSBSZWdpc3RlciAoQWx0ZXJuYXRlL0ZsYWcqKQkqLworI2RlZmluZSBCRklOX1BPUlRfTVVYCQkJMHhGRkMwMzIwQwkvKiBQb3J0IE11bHRpcGxleGVyIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisKKworLyogSGFuZHNoYWtlIE1ETUEgUmVnaXN0ZXJzCSgweEZGQzAzMzAwIC0gMHhGRkMwMzNGRikJCQkJCQkJCQkJKi8KKyNkZWZpbmUgSE1ETUEwX0NPTlRST0wJCTB4RkZDMDMzMDAJLyogSGFuZHNoYWtlIE1ETUEwIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIEhNRE1BMF9FQ0lOSVQJCTB4RkZDMDMzMDQJLyogSE1ETUEwIEluaXRpYWwgRWRnZSBDb3VudCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBITURNQTBfQkNJTklUCQkweEZGQzAzMzA4CS8qIEhNRE1BMCBJbml0aWFsIEJsb2NrIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIEhNRE1BMF9FQ1VSR0VOVAkJMHhGRkMwMzMwQwkvKiBITURNQTAgVXJnZW50IEVkZ2UgQ291bnQgVGhyZXNoaG9sZCBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgSE1ETUEwX0VDT1ZFUkZMT1cJMHhGRkMwMzMxMAkvKiBITURNQTAgRWRnZSBDb3VudCBPdmVyZmxvdyBJbnRlcnJ1cHQgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgSE1ETUEwX0VDT1VOVAkJMHhGRkMwMzMxNAkvKiBITURNQTAgQ3VycmVudCBFZGdlIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIEhNRE1BMF9CQ09VTlQJCTB4RkZDMDMzMTgJLyogSE1ETUEwIEN1cnJlbnQgQmxvY2sgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKworI2RlZmluZSBITURNQTFfQ09OVFJPTAkJMHhGRkMwMzM0MAkvKiBIYW5kc2hha2UgTURNQTEgQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KKyNkZWZpbmUgSE1ETUExX0VDSU5JVAkJMHhGRkMwMzM0NAkvKiBITURNQTEgSW5pdGlhbCBFZGdlIENvdW50IFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIEhNRE1BMV9CQ0lOSVQJCTB4RkZDMDMzNDgJLyogSE1ETUExIEluaXRpYWwgQmxvY2sgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgSE1ETUExX0VDVVJHRU5UCQkweEZGQzAzMzRDCS8qIEhNRE1BMSBVcmdlbnQgRWRnZSBDb3VudCBUaHJlc2hob2xkIFJlZ2lzdGVyCQkqLworI2RlZmluZSBITURNQTFfRUNPVkVSRkxPVwkweEZGQzAzMzUwCS8qIEhNRE1BMSBFZGdlIENvdW50IE92ZXJmbG93IEludGVycnVwdCBSZWdpc3RlcgkqLworI2RlZmluZSBITURNQTFfRUNPVU5UCQkweEZGQzAzMzU0CS8qIEhNRE1BMSBDdXJyZW50IEVkZ2UgQ291bnQgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgSE1ETUExX0JDT1VOVAkJMHhGRkMwMzM1OAkvKiBITURNQTEgQ3VycmVudCBCbG9jayBDb3VudCBSZWdpc3RlcgkJCQkqLworCisvKiBHUElPIFBJTiBtdXggKDB4RkZDMDMyMTAgLSBPeEZGQzAzMjg4KSAqLworI2RlZmluZSBQT1JURl9NVVggICAgICAgICAgICAgICAweEZGQzAzMjEwICAgICAgLyogUG9ydCBGIG11eCBjb250cm9sICovCisjZGVmaW5lIFBPUlRHX01VWCAgICAgICAgICAgICAgIDB4RkZDMDMyMTQgICAgICAvKiBQb3J0IEcgbXV4IGNvbnRyb2wgKi8KKyNkZWZpbmUgUE9SVEhfTVVYICAgICAgICAgICAgICAgMHhGRkMwMzIxOCAgICAgIC8qIFBvcnQgSCBtdXggY29udHJvbCAqLworI2RlZmluZSBQT1JURl9EUklWRSAgICAgICAgICAgICAweEZGQzAzMjIwICAgICAgLyogUG9ydCBGIGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgKi8KKyNkZWZpbmUgUE9SVEdfRFJJVkUgICAgICAgICAgICAgMHhGRkMwMzIyNCAgICAgIC8qIFBvcnQgRyBkcml2ZSBzdHJlbmd0aCBjb250cm9sICovCisjZGVmaW5lIFBPUlRIX0RSSVZFICAgICAgICAgICAgIDB4RkZDMDMyMjggICAgICAvKiBQb3J0IEggZHJpdmUgc3RyZW5ndGggY29udHJvbCAqLworI2RlZmluZSBQT1JURl9TTEVXICAgICAgICAgICAgICAweEZGQzAzMjMwICAgICAgLyogUG9ydCBGIHNsZXcgY29udHJvbCAqLworI2RlZmluZSBQT1JUR19TTEVXICAgICAgICAgICAgICAweEZGQzAzMjM0ICAgICAgLyogUG9ydCBHIHNsZXcgY29udHJvbCAqLworI2RlZmluZSBQT1JUSF9TTEVXICAgICAgICAgICAgICAweEZGQzAzMjM4ICAgICAgLyogUG9ydCBIIHNsZXcgY29udHJvbCAqLworI2RlZmluZSBQT1JURl9IWVNURVJJU0lTICAgICAgICAweEZGQzAzMjQwICAgICAgLyogUG9ydCBGIFNjaG1pdHQgdHJpZ2dlciBjb250cm9sICovCisjZGVmaW5lIFBPUlRHX0hZU1RFUklTSVMgICAgICAgIDB4RkZDMDMyNDQgICAgICAvKiBQb3J0IEcgU2NobWl0dCB0cmlnZ2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgUE9SVEhfSFlTVEVSSVNJUyAgICAgICAgMHhGRkMwMzI0OCAgICAgIC8qIFBvcnQgSCBTY2htaXR0IHRyaWdnZXIgY29udHJvbCAqLworI2RlZmluZSBNSVNDUE9SVF9EUklWRSAgICAgICAgICAweEZGQzAzMjgwICAgICAgLyogTWlzYyBQb3J0IGRyaXZlIHN0cmVuZ3RoIGNvbnRyb2wgKi8KKyNkZWZpbmUgTUlTQ1BPUlRfU0xFVyAgICAgICAgICAgMHhGRkMwMzI4NCAgICAgIC8qIE1pc2MgUG9ydCBzbGV3IGNvbnRyb2wgKi8KKyNkZWZpbmUgTUlTQ1BPUlRfSFlTVEVSSVNJUyAgICAgMHhGRkMwMzI4OCAgICAgIC8qIE1pc2MgUG9ydCBTY2htaXR0IHRyaWdnZXIgY29udHJvbCAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogU3lzdGVtIE1NUiBSZWdpc3RlciBCaXRzIEFuZCBNYWNyb3MKKyoqCisqKiBEaXNjbGFpbWVyOglBbGwgbWFjcm9zIGFyZSBpbnRlbmRlZCB0byBtYWtlIEMgYW5kIEFzc2VtYmx5IGNvZGUgbW9yZSByZWFkYWJsZS4KKyoqCQkJCVVzZSB0aGVzZSBtYWNyb3MgY2FyZWZ1bGx5LCBhcyBhbnkgdGhhdCBkbyBsZWZ0IHNoaWZ0cyBmb3IgZmllbGQKKyoqCQkJCWRlcG9zaXRpbmcgd2lsbCByZXN1bHQgaW4gdGhlIGxvd2VyIG9yZGVyIGJpdHMgYmVpbmcgZGVzdHJveWVkLiAgQW55CisqKgkJCQltYWNybyB0aGF0IHNoaWZ0cyBsZWZ0IHRvIHByb3Blcmx5IHBvc2l0aW9uIHRoZSBiaXQtZmllbGQgc2hvdWxkIGJlCisqKgkJCQl1c2VkIGFzIHBhcnQgb2YgYW4gT1IgdG8gaW5pdGlhbGl6ZSBhIHJlZ2lzdGVyIGFuZCBOT1QgYXMgYSBkeW5hbWljCisqKgkJCQltb2RpZmllciBVTkxFU1MgdGhlIGxvd2VyIG9yZGVyIGJpdHMgYXJlIHNhdmVkIGFuZCBPUmVkIGJhY2sgaW4gd2hlbgorKioJCQkJdGhlIG1hY3JvIGlzIHVzZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyoqICoqKioqKioqKioqKioqKioqKioqKiBQTEwgQU5EIFJFU0VUIE1BU0tTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQTExfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBERgkJCQkweDAwMDEJLyogMDogUExMID0gQ0xLSU4sIDE6IFBMTCA9IENMS0lOLzIJCQkJCSovCisjZGVmaW5lIFBMTF9PRkYJCQkweDAwMDIJLyogUExMIE5vdCBQb3dlcmVkCQkJCQkJCQkJKi8KKyNkZWZpbmUgU1RPUENLCQkJMHgwMDA4CS8qIENvcmUgQ2xvY2sgT2ZmCQkJCQkJCQkJKi8KKyNkZWZpbmUgUERXTgkJCTB4MDAyMAkvKiBFbnRlciBEZWVwIFNsZWVwIE1vZGUJCQkJCQkJKi8KKyNkZWZpbmUJSU5fREVMQVkJCTB4MDA0MAkvKiBBZGQgMjAwcHMgRGVsYXkgVG8gRUJJVSBJbnB1dCBMYXRjaGVzCQkJKi8KKyNkZWZpbmUJT1VUX0RFTEFZCQkweDAwODAJLyogQWRkIDIwMHBzIERlbGF5IFRvIEVCSVUgT3V0cHV0IFNpZ25hbHMJCQkqLworI2RlZmluZSBCWVBBU1MJCQkweDAxMDAJLyogQnlwYXNzIHRoZSBQTEwJCQkJCQkJCQkqLworI2RlZmluZQlNU0VMCQkJMHg3RTAwCS8qIE11bHRpcGxpZXIgU2VsZWN0IEZvciBDQ0xLL1ZDTyBGYWN0b3JzCQkJKi8KKy8qIFBMTF9DVEwgTWFjcm9zIChPbmx5IFVzZSBXaXRoIExvZ2ljIE9SIFdoaWxlIFNldHRpbmcgTG93ZXIgT3JkZXIgQml0cykJCQkqLworI2RlZmluZQlTRVRfTVNFTCh4KQkJKCgoeCkmMHgzRikgPDwgMHg5KQkvKiBTZXQgTVNFTCA9IDAtNjMgLS0+IFZDTyA9IENMS0lOKk1TRUwJCSovCisKKy8qIFBMTF9ESVYgTWFza3MJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFNTRUwJCQkweDAwMEYJLyogU3lzdGVtIFNlbGVjdAkJCQkJCSovCisjZGVmaW5lCUNTRUwJCQkweDAwMzAJLyogQ29yZSBTZWxlY3QJCQkJCQkJKi8KKyNkZWZpbmUgQ1NFTF9ESVYxCQkweDAwMDAJLyogCQlDQ0xLID0gVkNPIC8gMQkJCQkJKi8KKyNkZWZpbmUgQ1NFTF9ESVYyCQkweDAwMTAJLyogCQlDQ0xLID0gVkNPIC8gMgkJCQkJKi8KKyNkZWZpbmUJQ1NFTF9ESVY0CQkweDAwMjAJLyogCQlDQ0xLID0gVkNPIC8gNAkJCQkJKi8KKyNkZWZpbmUJQ1NFTF9ESVY4CQkweDAwMzAJLyogCQlDQ0xLID0gVkNPIC8gOAkJCQkJKi8KKy8qIFBMTF9ESVYgTWFjcm9zCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBTRVRfU1NFTCh4KQkJKCh4KSYweEYpCQkvKiBTZXQgU1NFTCA9IDAtMTUgLS0+IFNDTEsgPSBWQ08vU1NFTAkqLworCisvKiBWUl9DVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCUZSRVEJCQkweDAwMDMJLyogU3dpdGNoaW5nIE9zY2lsbGF0b3IgRnJlcXVlbmN5IEZvciBSZWd1bGF0b3IJKi8KKyNkZWZpbmUJSElCRVJOQVRFCQkweDAwMDAJLyogCQlQb3dlcmRvd24vQnlwYXNzIE9uLUJvYXJkIFJlZ3VsYXRpb24JKi8KKyNkZWZpbmUJRlJFUV8zMzMJCTB4MDAwMQkvKiAJCVN3aXRjaGluZyBGcmVxdWVuY3kgSXMgMzMzIGtIegkJCSovCisjZGVmaW5lCUZSRVFfNjY3CQkweDAwMDIJLyogCQlTd2l0Y2hpbmcgRnJlcXVlbmN5IElzIDY2NyBrSHoJCQkqLworI2RlZmluZQlGUkVRXzEwMDAJCTB4MDAwMwkvKiAJCVN3aXRjaGluZyBGcmVxdWVuY3kgSXMgMSBNSHoJCQkqLworCisjZGVmaW5lIEdBSU4JCQkweDAwMEMJLyogVm9sdGFnZSBMZXZlbCBHYWluCSovCisjZGVmaW5lCUdBSU5fNQkJCTB4MDAwMAkvKiAJCUdBSU4gPSA1CQkqLworI2RlZmluZQlHQUlOXzEwCQkJMHgwMDA0CS8qIAkJR0FJTiA9IDEwCQkqLworI2RlZmluZQlHQUlOXzIwCQkJMHgwMDA4CS8qIAkJR0FJTiA9IDIwCQkqLworI2RlZmluZQlHQUlOXzUwCQkJMHgwMDBDCS8qIAkJR0FJTiA9IDUwCQkqLworCisjZGVmaW5lCVZMRVYJCQkweDAwRjAJLyogSW50ZXJuYWwgVm9sdGFnZSBMZXZlbAkJCQkJKi8KKyNkZWZpbmUJVkxFVl8wODUgCQkweDAwNjAJLyogCQlWTEVWID0gMC44NSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLworI2RlZmluZQlWTEVWXzA5MAkJMHgwMDcwCS8qIAkJVkxFViA9IDAuOTAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KKyNkZWZpbmUJVkxFVl8wOTUJCTB4MDA4MAkvKiAJCVZMRVYgPSAwLjk1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCisjZGVmaW5lCVZMRVZfMTAwCQkweDAwOTAJLyogCQlWTEVWID0gMS4wMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLworI2RlZmluZQlWTEVWXzEwNQkJMHgwMEEwCS8qIAkJVkxFViA9IDEuMDUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KKyNkZWZpbmUJVkxFVl8xMTAJCTB4MDBCMAkvKiAJCVZMRVYgPSAxLjEwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCisjZGVmaW5lCVZMRVZfMTE1CQkweDAwQzAJLyogCQlWTEVWID0gMS4xNSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLworI2RlZmluZQlWTEVWXzEyMAkJMHgwMEQwCS8qIAkJVkxFViA9IDEuMjAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KKyNkZWZpbmUJVkxFVl8xMjUJCTB4MDBFMAkvKiAJCVZMRVYgPSAxLjI1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCisjZGVmaW5lCVZMRVZfMTMwCQkweDAwRjAJLyogCQlWTEVWID0gMS4zMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLworCisjZGVmaW5lCVdBS0UJCQkweDAxMDAJLyogRW5hYmxlIFJUQy9SZXNldCBXYWtldXAgRnJvbSBIaWJlcm5hdGUJKi8KKyNkZWZpbmUJQ0FOV0UJCQkweDAyMDAJLyogRW5hYmxlIENBTiBXYWtldXAgRnJvbSBIaWJlcm5hdGUJCQkqLworI2RlZmluZQlQSFlXRQkJCTB4MDQwMAkvKiBFbmFibGUgUEhZIFdha2V1cCBGcm9tIEhpYmVybmF0ZQkJCSovCisjZGVmaW5lCUNMS0JVRk9FCQkweDQwMDAJLyogQ0xLSU4gQnVmZmVyIE91dHB1dCBFbmFibGUgKi8KKyNkZWZpbmUJUEhZQ0xLT0UJCUNMS0JVRk9FCS8qIEFsdGVybmF0aXZlIGxlZ2FjeSBuYW1lIGZvciB0aGUgYWJvdmUgKi8KKyNkZWZpbmUJU0NLRUxPVwkJMHg4MDAwCS8qIEVuYWJsZSBEcml2ZSBDS0UgTG93IER1cmluZyBSZXNldAkJKi8KKworLyogUExMX1NUQVQgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIEFDVElWRV9QTExFTkFCTEVECTB4MDAwMQkvKiBQcm9jZXNzb3IgSW4gQWN0aXZlIE1vZGUgV2l0aCBQTEwgRW5hYmxlZAkqLworI2RlZmluZQlGVUxMX09OCQkJCTB4MDAwMgkvKiBQcm9jZXNzb3IgSW4gRnVsbCBPbiBNb2RlCQkJCQkqLworI2RlZmluZSBBQ1RJVkVfUExMRElTQUJMRUQJMHgwMDA0CS8qIFByb2Nlc3NvciBJbiBBY3RpdmUgTW9kZSBXaXRoIFBMTCBEaXNhYmxlZAkqLworI2RlZmluZQlQTExfTE9DS0VECQkJMHgwMDIwCS8qIFBMTF9MT0NLQ05UIEhhcyBCZWVuIFJlYWNoZWQJCQkJCSovCisKKy8qIENISVBJRCBNYXNrcyAqLworI2RlZmluZSBDSElQSURfVkVSU0lPTiAgICAgICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgQ0hJUElEX0ZBTUlMWSAgICAgICAgICAweDBGRkZGMDAwCisjZGVmaW5lIENISVBJRF9NQU5VRkFDVFVSRSAgICAgMHgwMDAwMEZGRQorCisvKiBTV1JTVCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFNZU1RFTV9SRVNFVAkJMHgwMDA3CS8qIEluaXRpYXRlcyBBIFN5c3RlbSBTb2Z0d2FyZSBSZXNldAkJCSovCisjZGVmaW5lCURPVUJMRV9GQVVMVAkJMHgwMDA4CS8qIENvcmUgRG91YmxlIEZhdWx0IENhdXNlcyBSZXNldAkJCQkqLworI2RlZmluZSBSRVNFVF9ET1VCTEUJCTB4MjAwMAkvKiBTVyBSZXNldCBHZW5lcmF0ZWQgQnkgQ29yZSBEb3VibGUtRmF1bHQJCSovCisjZGVmaW5lIFJFU0VUX1dET0cJCQkweDQwMDAJLyogU1cgUmVzZXQgR2VuZXJhdGVkIEJ5IFdhdGNoZG9nIFRpbWVyCQkJKi8KKyNkZWZpbmUgUkVTRVRfU09GVFdBUkUJCTB4ODAwMAkvKiBTVyBSZXNldCBPY2N1cnJlZCBTaW5jZSBMYXN0IFJlYWQgT2YgU1dSU1QJKi8KKworLyogU1lTQ1IgTWFza3MJCQkJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIEJNT0RFCQkJCTB4MDAwNwkvKiBCb290IE1vZGUgLSBMYXRjaGVkIER1cmluZyBIVyBSZXNldCBGcm9tIE1vZGUgUGlucwkqLworI2RlZmluZQlOT0JPT1QJCQkJMHgwMDEwCS8qIEV4ZWN1dGUgRnJvbSBMMSBvciBBU1lOQyBCYW5rIDAgV2hlbiBCTU9ERSA9IDAJCSovCisKKworLyogKioqKioqKioqKioqKiAgU1lTVEVNIElOVEVSUlVQVCBDT05UUk9MTEVSIE1BU0tTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQZXJpcGhlcmFsIE1hc2tzIEZvciBTSUNfSVNSLCBTSUNfSVdSLCBTSUNfSU1BU0sJCQkJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX1BMTF9XQUtFVVAJMHgwMDAwMDAwMQkvKiBQTEwgV2FrZXVwIEludGVycnVwdAkJCSAJCQkJCSovCisKKyNkZWZpbmUgSVJRX0VSUk9SMSAgICAgIDB4MDAwMDAwMDIgIC8qIEVycm9yIEludGVycnVwdCAoRE1BLCBETUFSeCBCbG9jaywgRE1BUnggT3ZlcmZsb3cpICovCisjZGVmaW5lIElSUV9FUlJPUjIgICAgICAweDAwMDAwMDA0ICAvKiBFcnJvciBJbnRlcnJ1cHQgKENBTiwgRXRoZXJuZXQsIFNQT1JUeCwgUFBJLCBTUEksIFVBUlR4KSAqLworI2RlZmluZSBJUlFfUlRDCQkJMHgwMDAwMDAwOAkvKiBSZWFsIFRpbWUgQ2xvY2sgSW50ZXJydXB0IAkJCQkJCSovIAorI2RlZmluZSBJUlFfRE1BMAkJMHgwMDAwMDAxMAkvKiBETUEgQ2hhbm5lbCAwIChQUEkpIEludGVycnVwdCAJCQkJCSovIAorI2RlZmluZSBJUlFfRE1BMwkJMHgwMDAwMDAyMAkvKiBETUEgQ2hhbm5lbCAzIChTUE9SVDAgUlgpIEludGVycnVwdCAJCQkJKi8gCisjZGVmaW5lIElSUV9ETUE0CQkweDAwMDAwMDQwCS8qIERNQSBDaGFubmVsIDQgKFNQT1JUMCBUWCkgSW50ZXJydXB0IAkJCQkqLworI2RlZmluZSBJUlFfRE1BNQkJMHgwMDAwMDA4MAkvKiBETUEgQ2hhbm5lbCA1IChTUE9SVDEgUlgpIEludGVycnVwdCAJCQkJKi8KKworI2RlZmluZSBJUlFfRE1BNgkJMHgwMDAwMDEwMAkvKiBETUEgQ2hhbm5lbCA2IChTUE9SVDEgVFgpIEludGVycnVwdCAJCSAJCSovCisjZGVmaW5lIElSUV9UV0kJCQkweDAwMDAwMjAwCS8qIFRXSSBJbnRlcnJ1cHQJCQkJCQkJCQkqLworI2RlZmluZSBJUlFfRE1BNwkJMHgwMDAwMDQwMAkvKiBETUEgQ2hhbm5lbCA3IChTUEkpIEludGVycnVwdCAJCQkJCSovCisjZGVmaW5lIElSUV9ETUE4CQkweDAwMDAwODAwCS8qIERNQSBDaGFubmVsIDggKFVBUlQwIFJYKSBJbnRlcnJ1cHQgCQkJCSovIAorI2RlZmluZSBJUlFfRE1BOQkJMHgwMDAwMTAwMAkvKiBETUEgQ2hhbm5lbCA5IChVQVJUMCBUWCkgSW50ZXJydXB0IAkJCQkqLworI2RlZmluZSBJUlFfRE1BMTAJCTB4MDAwMDIwMDAJLyogRE1BIENoYW5uZWwgMTAgKFVBUlQxIFJYKSBJbnRlcnJ1cHQgCQkJCSovCisjZGVmaW5lIElSUV9ETUExMQkJMHgwMDAwNDAwMAkvKiBETUEgQ2hhbm5lbCAxMSAoVUFSVDEgVFgpIEludGVycnVwdCAJCQkJKi8KKyNkZWZpbmUgSVJRX0NBTl9SWAkJMHgwMDAwODAwMAkvKiBDQU4gUmVjZWl2ZSBJbnRlcnJ1cHQgCQkJCQkJCSovCisKKyNkZWZpbmUgSVJRX0NBTl9UWAkJMHgwMDAxMDAwMAkvKiBDQU4gVHJhbnNtaXQgSW50ZXJydXB0ICAJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX0RNQTEJCTB4MDAwMjAwMDAJLyogRE1BIENoYW5uZWwgMSAoRXRoZXJuZXQgUlgpIEludGVycnVwdCAJCQkqLworI2RlZmluZSBJUlFfUEZBX1BPUlRICTB4MDAwMjAwMDAJLyogUEYgUG9ydCBIIChQRjQ3OjMyKSBJbnRlcnJ1cHQgQSAJCQkJCSovCisjZGVmaW5lIElSUV9ETUEyCQkweDAwMDQwMDAwCS8qIERNQSBDaGFubmVsIDIgKEV0aGVybmV0IFRYKSBJbnRlcnJ1cHQgCQkJKi8KKyNkZWZpbmUgSVJRX1BGQl9QT1JUSAkweDAwMDQwMDAwCS8qIFBGIFBvcnQgSCAoUEY0NzozMikgSW50ZXJydXB0IEIgCQkJCQkqLworI2RlZmluZSBJUlFfVElNRVIwCQkweDAwMDgwMDAwCS8qIFRpbWVyIDAgSW50ZXJydXB0CQkJCQkJCQkqLworI2RlZmluZSBJUlFfVElNRVIxCQkweDAwMTAwMDAwCS8qIFRpbWVyIDEgSW50ZXJydXB0IAkJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX1RJTUVSMgkJMHgwMDIwMDAwMAkvKiBUaW1lciAyIEludGVycnVwdCAJCQkJCQkJCSovCisjZGVmaW5lIElSUV9USU1FUjMJCTB4MDA0MDAwMDAJLyogVGltZXIgMyBJbnRlcnJ1cHQgCQkJCQkJCQkqLworI2RlZmluZSBJUlFfVElNRVI0CQkweDAwODAwMDAwCS8qIFRpbWVyIDQgSW50ZXJydXB0IAkJCQkJCQkJKi8KKworI2RlZmluZSBJUlFfVElNRVI1CQkweDAxMDAwMDAwCS8qIFRpbWVyIDUgSW50ZXJydXB0IAkJCQkJCQkJKi8KKyNkZWZpbmUgSVJRX1RJTUVSNgkJMHgwMjAwMDAwMAkvKiBUaW1lciA2IEludGVycnVwdCAJCQkJCQkJCSovCisjZGVmaW5lIElSUV9USU1FUjcJCTB4MDQwMDAwMDAJLyogVGltZXIgNyBJbnRlcnJ1cHQgCQkJCQkJCQkqLworI2RlZmluZSBJUlFfUEZBX1BPUlRGRwkweDA4MDAwMDAwCS8qIFBGIFBvcnRzIEYmRyAoUEYzMTowKSBJbnRlcnJ1cHQgQSAJCQkJKi8KKyNkZWZpbmUgSVJRX1BGQl9QT1JURgkweDgwMDAwMDAwCS8qIFBGIFBvcnQgRiAoUEYxNTowKSBJbnRlcnJ1cHQgQiAJCQkJCSovCisjZGVmaW5lIElSUV9ETUExMgkJMHgyMDAwMDAwMAkvKiBETUEgQ2hhbm5lbHMgMTIgKE1ETUExIFNvdXJjZSkgUlggSW50ZXJydXB0IAkJKi8KKyNkZWZpbmUgSVJRX0RNQTEzCQkweDIwMDAwMDAwCS8qIERNQSBDaGFubmVscyAxMyAoTURNQTEgRGVzdGluYXRpb24pIFRYIEludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMTQJCTB4NDAwMDAwMDAJLyogRE1BIENoYW5uZWxzIDE0IChNRE1BMCBTb3VyY2UpIFJYIEludGVycnVwdCAJCSovCisjZGVmaW5lIElSUV9ETUExNQkJMHg0MDAwMDAwMAkvKiBETUEgQ2hhbm5lbHMgMTUgKE1ETUEwIERlc3RpbmF0aW9uKSBUWCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1dET0cJCTB4ODAwMDAwMDAJLyogU29mdHdhcmUgV2F0Y2hkb2cgVGltZXIgSW50ZXJydXB0IAkJCQkqLworI2RlZmluZSBJUlFfUEZCX1BPUlRHCTB4MTAwMDAwMDAJLyogUEYgUG9ydCBHIChQRjMxOjE2KSBJbnRlcnJ1cHQgQiAJCQkJCSovCisKKy8qIFNJQ19JQVIwIE1hY3JvcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFAwX0lWRyh4KQkJKCgoeCkmMHhGKS03KQkJCS8qIFBlcmlwaGVyYWwgIzAgYXNzaWduZWQgSVZHICN4IAkqLworI2RlZmluZSBQMV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg0CS8qIFBlcmlwaGVyYWwgIzEgYXNzaWduZWQgSVZHICN4IAkqLworI2RlZmluZSBQMl9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg4CS8qIFBlcmlwaGVyYWwgIzIgYXNzaWduZWQgSVZHICN4IAkqLworI2RlZmluZSBQM19JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHhDCS8qIFBlcmlwaGVyYWwgIzMgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFA0X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDEwCS8qIFBlcmlwaGVyYWwgIzQgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFA1X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE0CS8qIFBlcmlwaGVyYWwgIzUgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFA2X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE4CS8qIFBlcmlwaGVyYWwgIzYgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFA3X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDFDCS8qIFBlcmlwaGVyYWwgIzcgYXNzaWduZWQgSVZHICN4CSovCisKKy8qIFNJQ19JQVIxIE1hY3JvcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFA4X0lWRyh4KQkJKCgoeCkmMHhGKS03KQkJCS8qIFBlcmlwaGVyYWwgIzggYXNzaWduZWQgSVZHICN4IAkqLworI2RlZmluZSBQOV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg0CS8qIFBlcmlwaGVyYWwgIzkgYXNzaWduZWQgSVZHICN4IAkqLworI2RlZmluZSBQMTBfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4OAkvKiBQZXJpcGhlcmFsICMxMCBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDExX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweEMJLyogUGVyaXBoZXJhbCAjMTEgYXNzaWduZWQgSVZHICN4IAkqLworI2RlZmluZSBQMTJfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTAJLyogUGVyaXBoZXJhbCAjMTIgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAxM19JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxNAkvKiBQZXJpcGhlcmFsICMxMyBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDE0X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE4CS8qIFBlcmlwaGVyYWwgIzE0IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMTVfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MUMJLyogUGVyaXBoZXJhbCAjMTUgYXNzaWduZWQgSVZHICN4CSovCisKKy8qIFNJQ19JQVIyIE1hY3JvcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFAxNl9JVkcoeCkJCSgoKHgpJjB4RiktNykJCQkvKiBQZXJpcGhlcmFsICMxNiBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDE3X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDQJLyogUGVyaXBoZXJhbCAjMTcgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAxOF9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg4CS8qIFBlcmlwaGVyYWwgIzE4IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMTlfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4QwkvKiBQZXJpcGhlcmFsICMxOSBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDIwX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDEwCS8qIFBlcmlwaGVyYWwgIzIwIGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMjFfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTQJLyogUGVyaXBoZXJhbCAjMjEgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAyMl9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxOAkvKiBQZXJpcGhlcmFsICMyMiBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDIzX0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDFDCS8qIFBlcmlwaGVyYWwgIzIzIGFzc2lnbmVkIElWRyAjeAkqLworCisvKiBTSUNfSUFSMyBNYWNyb3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBQMjRfSVZHKHgpCQkoKCh4KSYweEYpLTcpCQkJLyogUGVyaXBoZXJhbCAjMjQgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAyNV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHg0CS8qIFBlcmlwaGVyYWwgIzI1IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMjZfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4OAkvKiBQZXJpcGhlcmFsICMyNiBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDI3X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweEMJLyogUGVyaXBoZXJhbCAjMjcgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAyOF9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxMAkvKiBQZXJpcGhlcmFsICMyOCBhc3NpZ25lZCBJVkcgI3gJKi8KKyNkZWZpbmUgUDI5X0lWRyh4KQkJKCgoeCkmMHhGKS03KSA8PCAweDE0CS8qIFBlcmlwaGVyYWwgIzI5IGFzc2lnbmVkIElWRyAjeAkqLworI2RlZmluZSBQMzBfSVZHKHgpCQkoKCh4KSYweEYpLTcpIDw8IDB4MTgJLyogUGVyaXBoZXJhbCAjMzAgYXNzaWduZWQgSVZHICN4CSovCisjZGVmaW5lIFAzMV9JVkcoeCkJCSgoKHgpJjB4RiktNykgPDwgMHgxQwkvKiBQZXJpcGhlcmFsICMzMSBhc3NpZ25lZCBJVkcgI3gJKi8KKworCisvKiBTSUNfSU1BU0sgTWFza3MJCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBTSUNfVU5NQVNLX0FMTAkweDAwMDAwMDAwCQkJCQkvKiBVbm1hc2sgYWxsIHBlcmlwaGVyYWwgaW50ZXJydXB0cwkqLworI2RlZmluZSBTSUNfTUFTS19BTEwJMHhGRkZGRkZGRgkJCQkJLyogTWFzayBhbGwgcGVyaXBoZXJhbCBpbnRlcnJ1cHRzCSovCisjZGVmaW5lIFNJQ19NQVNLKHgpCQkoMSA8PCAoKHgpJjB4MUYpKQkJCQkJLyogTWFzayBQZXJpcGhlcmFsICN4IGludGVycnVwdAkJKi8KKyNkZWZpbmUgU0lDX1VOTUFTSyh4KQkoMHhGRkZGRkZGRiBeICgxIDw8ICgoeCkmMHgxRikpKQkvKiBVbm1hc2sgUGVyaXBoZXJhbCAjeCBpbnRlcnJ1cHQJKi8KKworLyogU0lDX0lXUiBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIElXUl9ESVNBQkxFX0FMTAkweDAwMDAwMDAwCQkJCQkvKiBXYWtldXAgRGlzYWJsZSBhbGwgcGVyaXBoZXJhbHMJKi8KKyNkZWZpbmUgSVdSX0VOQUJMRV9BTEwJMHhGRkZGRkZGRgkJCQkJLyogV2FrZXVwIEVuYWJsZSBhbGwgcGVyaXBoZXJhbHMJKi8KKyNkZWZpbmUgSVdSX0VOQUJMRSh4KQkoMSA8PCAoKHgpJjB4MUYpKQkJCQkJLyogV2FrZXVwIEVuYWJsZSBQZXJpcGhlcmFsICN4CQkqLworI2RlZmluZSBJV1JfRElTQUJMRSh4KQkoMHhGRkZGRkZGRiBeICgxIDw8ICgoeCkmMHgxRikpKSAJLyogV2FrZXVwIERpc2FibGUgUGVyaXBoZXJhbCAjeAkJKi8KKworCisvKiAqKioqKioqKiogV0FUQ0hET0cgVElNRVIgTUFTS1MgKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogV2F0Y2hkb2cgVGltZXIgV0RPR19DVEwgUmVnaXN0ZXIgTWFza3MgKi8KKworI2RlZmluZSBXREVWKHgpICgoKHgpPDwxKSAmIDB4MDAwNikgLyogZXZlbnQgZ2VuZXJhdGVkIG9uIHJvbGwgb3ZlciAqLworI2RlZmluZSBXREVWX1JFU0VUIDB4MDAwMCAvKiBnZW5lcmF0ZSByZXNldCBldmVudCBvbiByb2xsIG92ZXIgKi8KKyNkZWZpbmUgV0RFVl9OTUkgMHgwMDAyIC8qIGdlbmVyYXRlIE5NSSBldmVudCBvbiByb2xsIG92ZXIgKi8KKyNkZWZpbmUgV0RFVl9HUEkgMHgwMDA0IC8qIGdlbmVyYXRlIEdQIElSUSBvbiByb2xsIG92ZXIgKi8KKyNkZWZpbmUgV0RFVl9OT05FIDB4MDAwNiAvKiBubyBldmVudCBvbiByb2xsIG92ZXIgKi8KKyNkZWZpbmUgV0RFTiAweDBGRjAgLyogZW5hYmxlIHdhdGNoZG9nICovCisjZGVmaW5lIFdERElTIDB4MEFEMCAvKiBkaXNhYmxlIHdhdGNoZG9nICovCisjZGVmaW5lIFdEUk8gMHg4MDAwIC8qIHdhdGNoZG9nIHJvbGxlZCBvdmVyIGxhdGNoICovIAorCisvKiBkZXByZWNpYXRlZCBXRE9HX0NUTCBSZWdpc3RlciBNYXNrcyBmb3IgbGVnYWN5IGNvZGUgKi8KKworCisjZGVmaW5lIElDVEwgV0RFVgorI2RlZmluZSBFTkFCTEVfUkVTRVQgV0RFVl9SRVNFVAorI2RlZmluZSBXRE9HX1JFU0VUIFdERVZfUkVTRVQKKyNkZWZpbmUgRU5BQkxFX05NSSBXREVWX05NSQorI2RlZmluZSBXRE9HX05NSSBXREVWX05NSQorI2RlZmluZSBFTkFCTEVfR1BJIFdERVZfR1BJCisjZGVmaW5lIFdET0dfR1BJIFdERVZfR1BJCisjZGVmaW5lIERJU0FCTEVfRVZUIFdERVZfTk9ORQorI2RlZmluZSBXRE9HX05PTkUgV0RFVl9OT05FCisKKyNkZWZpbmUgVE1SX0VOIFdERU4KKyNkZWZpbmUgVE1SX0RJUyBXRERJUworI2RlZmluZSBUUk8gV0RSTworI2RlZmluZSBJQ1RMX1AwIDB4MDEKKyAjZGVmaW5lIElDVExfUDEgMHgwMgorI2RlZmluZSBUUk9fUCAweDBGCisKKworCisvKiAqKioqKioqKioqKioqKiogIFJFQUwgVElNRSBDTE9DSyBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSVENfU1RBVCBhbmQgUlRDX0FMQVJNIE1hc2tzCQkJCQkJCQkJCSovCisjZGVmaW5lCVJUQ19TRUMJCQkJMHgwMDAwMDAzRgkvKiBSZWFsLVRpbWUgQ2xvY2sgU2Vjb25kcwkqLworI2RlZmluZQlSVENfTUlOCQkJCTB4MDAwMDBGQzAJLyogUmVhbC1UaW1lIENsb2NrIE1pbnV0ZXMJKi8KKyNkZWZpbmUJUlRDX0hSCQkJCTB4MDAwMUYwMDAJLyogUmVhbC1UaW1lIENsb2NrIEhvdXJzCSovCisjZGVmaW5lCVJUQ19EQVkJCQkJMHhGRkZFMDAwMAkvKiBSZWFsLVRpbWUgQ2xvY2sgRGF5cwkJKi8KKworLyogUlRDX0FMQVJNIE1hY3JvCQkJej1kYXkJCXk9aHIJeD1taW4Jdz1zZWMJCSovCisjZGVmaW5lIFNFVF9BTEFSTSh6LHkseCx3KQkoKCgoeikmMHg3RkZGKTw8MHgxMSl8KCgoeSkmMHgxRik8PDB4Qyl8KCgoeCkmMHgzRik8PDB4Nil8KCh3KSYweDNGKSkKKworLyogUlRDX0lDVEwgYW5kIFJUQ19JU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCVNUT1BXQVRDSAkJCTB4MDAwMQkJLyogU3RvcHdhdGNoIEludGVycnVwdCBFbmFibGUJCQkJCQkJCSovCisjZGVmaW5lCUFMQVJNCQkJCTB4MDAwMgkJLyogQWxhcm0gSW50ZXJydXB0IEVuYWJsZQkJCQkJCQkJCSovCisjZGVmaW5lCVNFQ09ORAkJCQkweDAwMDQJCS8qIFNlY29uZHMgKDEgSHopIEludGVycnVwdCBFbmFibGUJCQkJCQkJKi8KKyNkZWZpbmUJTUlOVVRFCQkJCTB4MDAwOAkJLyogTWludXRlcyBJbnRlcnJ1cHQgRW5hYmxlCQkJCQkJCQkJKi8KKyNkZWZpbmUJSE9VUgkJCQkweDAwMTAJCS8qIEhvdXJzIEludGVycnVwdCBFbmFibGUJCQkJCQkJCQkqLworI2RlZmluZQlEQVkJCQkJCTB4MDAyMAkJLyogMjQgSG91cnMgKERheXMpIEludGVycnVwdCBFbmFibGUJCQkJCQkJKi8KKyNkZWZpbmUJREFZX0FMQVJNCQkJMHgwMDQwCQkvKiBEYXkgQWxhcm0gKERheSwgSG91ciwgTWludXRlLCBTZWNvbmQpIEludGVycnVwdCBFbmFibGUJKi8KKyNkZWZpbmUJV1JJVEVfUEVORElORwkJMHg0MDAwCQkvKiBXcml0ZSBQZW5kaW5nIFN0YXR1cwkJCQkJCQkJCQkqLworI2RlZmluZQlXUklURV9DT01QTEVURQkJMHg4MDAwCQkvKiBXcml0ZSBDb21wbGV0ZSBJbnRlcnJ1cHQgRW5hYmxlCQkJCQkJCSovCisKKy8qIFJUQ19GQVNUIC8gUlRDX1BSRU4gTWFzawkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFBSRU4JCQkJMHgwMDAxCS8qIEVuYWJsZSBQcmVzY2FsZXIsIFJUQyBSdW5zIEAxIEh6CSovCisKKworLyogKioqKioqKioqKioqKiogVUFSVCBDT05UUk9MTEVSIE1BU0tTICoqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBVQVJUeF9MQ1IgTWFza3MJCQkJCQkJCQkJCQkqLworI2RlZmluZSBXTFMoeCkJCSgoKHgpLTUpICYgMHgwMykJLyogV29yZCBMZW5ndGggU2VsZWN0ICovCisjZGVmaW5lIFNUQgkJCTB4MDQJCQkJLyogU3RvcCBCaXRzCQkJKi8KKyNkZWZpbmUgUEVOCQkJMHgwOAkJCQkvKiBQYXJpdHkgRW5hYmxlCQkqLworI2RlZmluZSBFUFMJCQkweDEwCQkJCS8qIEV2ZW4gUGFyaXR5IFNlbGVjdAkqLworI2RlZmluZSBTVFAJCQkweDIwCQkJCS8qIFN0aWNrIFBhcml0eQkJCSovCisjZGVmaW5lIFNCCQkJMHg0MAkJCQkvKiBTZXQgQnJlYWsJCQkqLworI2RlZmluZSBETEFCCQkweDgwCQkJCS8qIERpdmlzb3IgTGF0Y2ggQWNjZXNzCSovCisKKy8qIFVBUlR4X01DUiBNYXNrCQkJCQkJCQkJCSovCisjZGVmaW5lIExPT1BfRU5BCTB4MTAJLyogTG9vcGJhY2sgTW9kZSBFbmFibGUgKi8KKyNkZWZpbmUgTE9PUF9FTkFfUAkweDA0CisKKy8qIFVBUlR4X0xTUiBNYXNrcwkJCQkJCQkJCQkqLworI2RlZmluZSBEUgkJCTB4MDEJLyogRGF0YSBSZWFkeQkJCQkqLworI2RlZmluZSBPRQkJCTB4MDIJLyogT3ZlcnJ1biBFcnJvcgkJCSovCisjZGVmaW5lIFBFCQkJMHgwNAkvKiBQYXJpdHkgRXJyb3IJCQkJKi8KKyNkZWZpbmUgRkUJCQkweDA4CS8qIEZyYW1pbmcgRXJyb3IJCQkqLworI2RlZmluZSBCSQkJCTB4MTAJLyogQnJlYWsgSW50ZXJydXB0CQkJKi8KKyNkZWZpbmUgVEhSRQkJMHgyMAkvKiBUSFIgRW1wdHkJCQkJKi8KKyNkZWZpbmUgVEVNVAkJMHg0MAkvKiBUU1IgYW5kIFVBUlRfVEhSIEVtcHR5CSovCisKKy8qIFVBUlR4X0lFUiBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIEVSQkZJCQkweDAxCQkvKiBFbmFibGUgUmVjZWl2ZSBCdWZmZXIgRnVsbCBJbnRlcnJ1cHQJCSovCisjZGVmaW5lIEVUQkVJCQkweDAyCQkvKiBFbmFibGUgVHJhbnNtaXQgQnVmZmVyIEVtcHR5IEludGVycnVwdAkqLworI2RlZmluZSBFTFNJCQkweDA0CQkvKiBFbmFibGUgUlggU3RhdHVzIEludGVycnVwdAkJCQkqLworCisvKiBVQVJUeF9JSVIgTWFza3MJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIE5JTlQJCTB4MDEJCS8qIFBlbmRpbmcgSW50ZXJydXB0CQkJCQkqLworI2RlZmluZSBJSVJfVFhfUkVBRFkgICAgMHgwMgkJLyogVUFSVF9USFIgZW1wdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSUlSX1JYX1JFQURZICAgIDB4MDQJCS8qIFJlY2VpdmUgZGF0YSByZWFkeSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIElJUl9MSU5FX0NIQU5HRSAweDA2CQkvKiBSZWNlaXZlIGxpbmUgc3RhdHVzICAgIAkJCSovIAorI2RlZmluZSBJSVJfU1RBVFVTCTB4MDYJCS8qIEhpZ2hlc3QgUHJpb3JpdHkgUGVuZGluZyBJbnRlcnJ1cHQJKi8KKworLyogVUFSVHhfR0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBVQ0VOCQkweDAxCQkvKiBFbmFibGUgVUFSVHggQ2xvY2tzCQkJCSovCisjZGVmaW5lIElSRU4JCTB4MDIJCS8qIEVuYWJsZSBJckRBIE1vZGUJCQkJCSovCisjZGVmaW5lIFRQT0xDCQkweDA0CQkvKiBJckRBIFRYIFBvbGFyaXR5IENoYW5nZQkJCSovCisjZGVmaW5lIFJQT0xDCQkweDA4CQkvKiBJckRBIFJYIFBvbGFyaXR5IENoYW5nZQkJCSovCisjZGVmaW5lIEZQRQkJCTB4MTAJCS8qIEZvcmNlIFBhcml0eSBFcnJvciBPbiBUcmFuc21pdAkqLworI2RlZmluZSBGRkUJCQkweDIwCQkvKiBGb3JjZSBGcmFtaW5nIEVycm9yIE9uIFRyYW5zbWl0CSovCisKKworLyogKioqKioqKioqKiogIFNFUklBTCBQRVJJUEhFUkFMIElOVEVSRkFDRSAoU1BJKSBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNQSV9DVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCVRJTU9ECQkweDAwMDMJCS8qIFRyYW5zZmVyIEluaXRpYXRlIE1vZGUJCQkJCQkJKi8KKyNkZWZpbmUgUkRCUl9DT1JFCTB4MDAwMAkJLyogCQlSREJSIFJlYWQgSW5pdGlhdGVzLCBJUlEgV2hlbiBSREJSIEZ1bGwJCSovCisjZGVmaW5lCVREQlJfQ09SRQkweDAwMDEJCS8qIAkJVERCUiBXcml0ZSBJbml0aWF0ZXMsIElSUSBXaGVuIFREQlIgRW1wdHkJKi8KKyNkZWZpbmUgUkRCUl9ETUEJMHgwMDAyCQkvKiAJCURNQSBSZWFkLCBETUEgVW50aWwgRklGTyBFbXB0eQkJCQkqLworI2RlZmluZSBUREJSX0RNQQkweDAwMDMJCS8qIAkJRE1BIFdyaXRlLCBETUEgVW50aWwgRklGTyBGdWxsCQkJCSovCisjZGVmaW5lIFNaCQkJMHgwMDA0CQkvKiBTZW5kIFplcm8gKFdoZW4gVERCUiBFbXB0eSwgU2VuZCBaZXJvL0xhc3QqKQkJKi8KKyNkZWZpbmUgR00JCQkweDAwMDgJCS8qIEdldCBNb3JlIChXaGVuIFJEQlIgRnVsbCwgT3ZlcndyaXRlL0Rpc2NhcmQqKQkqLworI2RlZmluZSBQU1NFCQkweDAwMTAJCS8qIFNsYXZlLVNlbGVjdCBJbnB1dCBFbmFibGUJCQkJCQkqLworI2RlZmluZSBFTUlTTwkJMHgwMDIwCQkvKiBFbmFibGUgTUlTTyBBcyBPdXRwdXQJCQkJCQkJKi8KKyNkZWZpbmUgU0laRQkJMHgwMTAwCQkvKiBTaXplIG9mIFdvcmRzICgxNi84KiBCaXRzKQkJCQkJCSovCisjZGVmaW5lIExTQkYJCTB4MDIwMAkJLyogTFNCIEZpcnN0CQkJCQkJCQkJCSovCisjZGVmaW5lIENQSEEJCTB4MDQwMAkJLyogQ2xvY2sgUGhhc2UJCQkJCQkJCQkJKi8KKyNkZWZpbmUgQ1BPTAkJMHgwODAwCQkvKiBDbG9jayBQb2xhcml0eQkJCQkJCQkJCSovCisjZGVmaW5lIE1TVFIJCTB4MTAwMAkJLyogTWFzdGVyL1NsYXZlKgkJCQkJCQkJCSovCisjZGVmaW5lIFdPTQkJCTB4MjAwMAkJLyogV3JpdGUgT3BlbiBEcmFpbiBNYXN0ZXIJCQkJCQkJKi8KKyNkZWZpbmUgU1BFCQkJMHg0MDAwCQkvKiBTUEkgRW5hYmxlCQkJCQkJCQkJCSovCisKKy8qIFNQSV9GTEcgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIEZMUzEJCTB4MDAwMgkJLyogRW5hYmxlcyBTUElfRkxPVVQxIGFzIFNQSSBTbGF2ZS1TZWxlY3QgT3V0cHV0CSovCisjZGVmaW5lIEZMUzIJCTB4MDAwNAkJLyogRW5hYmxlcyBTUElfRkxPVVQyIGFzIFNQSSBTbGF2ZS1TZWxlY3QgT3V0cHV0CSovCisjZGVmaW5lIEZMUzMJCTB4MDAwOAkJLyogRW5hYmxlcyBTUElfRkxPVVQzIGFzIFNQSSBTbGF2ZS1TZWxlY3QgT3V0cHV0CSovCisjZGVmaW5lIEZMUzQJCTB4MDAxMAkJLyogRW5hYmxlcyBTUElfRkxPVVQ0IGFzIFNQSSBTbGF2ZS1TZWxlY3QgT3V0cHV0CSovCisjZGVmaW5lIEZMUzUJCTB4MDAyMAkJLyogRW5hYmxlcyBTUElfRkxPVVQ1IGFzIFNQSSBTbGF2ZS1TZWxlY3QgT3V0cHV0CSovCisjZGVmaW5lIEZMUzYJCTB4MDA0MAkJLyogRW5hYmxlcyBTUElfRkxPVVQ2IGFzIFNQSSBTbGF2ZS1TZWxlY3QgT3V0cHV0CSovCisjZGVmaW5lIEZMUzcJCTB4MDA4MAkJLyogRW5hYmxlcyBTUElfRkxPVVQ3IGFzIFNQSSBTbGF2ZS1TZWxlY3QgT3V0cHV0CSovCisjZGVmaW5lIEZMRzEJCTB4RkRGRgkJLyogQWN0aXZhdGVzIFNQSV9GTE9VVDEgCQkJCQkJCSovCisjZGVmaW5lIEZMRzIJCTB4RkJGRgkJLyogQWN0aXZhdGVzIFNQSV9GTE9VVDIJCQkJCQkJCSovCisjZGVmaW5lIEZMRzMJCTB4RjdGRgkJLyogQWN0aXZhdGVzIFNQSV9GTE9VVDMJCQkJCQkJCSovCisjZGVmaW5lIEZMRzQJCTB4RUZGRgkJLyogQWN0aXZhdGVzIFNQSV9GTE9VVDQJCQkJCQkJCSovCisjZGVmaW5lIEZMRzUJCTB4REZGRgkJLyogQWN0aXZhdGVzIFNQSV9GTE9VVDUJCQkJCQkJCSovCisjZGVmaW5lIEZMRzYJCTB4QkZGRgkJLyogQWN0aXZhdGVzIFNQSV9GTE9VVDYJCQkJCQkJCSovCisjZGVmaW5lIEZMRzcJCTB4N0ZGRgkJLyogQWN0aXZhdGVzIFNQSV9GTE9VVDcJCQkJCQkJCSovCisKKy8qIFNQSV9TVEFUIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBTUElGCQkweDAwMDEJCS8qIFNQSSBGaW5pc2hlZCAoU2luZ2xlLVdvcmQgVHJhbnNmZXIgQ29tcGxldGUpCQkJCQkqLworI2RlZmluZSBNT0RGCQkweDAwMDIJCS8qIE1vZGUgRmF1bHQgRXJyb3IgKEFub3RoZXIgRGV2aWNlIFRyaWVkIFRvIEJlY29tZSBNYXN0ZXIpCQkqLworI2RlZmluZSBUWEUJCQkweDAwMDQJCS8qIFRyYW5zbWlzc2lvbiBFcnJvciAoRGF0YSBTZW50IFdpdGggTm8gTmV3IERhdGEgSW4gVERCUikJCSovCisjZGVmaW5lIFRYUwkJCTB4MDAwOAkJLyogU1BJX1REQlIgRGF0YSBCdWZmZXIgU3RhdHVzIChGdWxsL0VtcHR5KikJCQkJCSovCisjZGVmaW5lIFJCU1kJCTB4MDAxMAkJLyogUmVjZWl2ZSBFcnJvciAoRGF0YSBSZWNlaXZlZCBXaXRoIFJEQlIgRnVsbCkJCQkJCSovCisjZGVmaW5lIFJYUwkJCTB4MDAyMAkJLyogU1BJX1JEQlIgRGF0YSBCdWZmZXIgU3RhdHVzIChGdWxsL0VtcHR5KikJCQkJCSovCisjZGVmaW5lIFRYQ09MCQkweDAwNDAJCS8qIFRyYW5zbWl0IENvbGxpc2lvbiBFcnJvciAoQ29ycnVwdCBEYXRhIE1heSBIYXZlIEJlZW4gU2VudCkJKi8KKworCisvKiAgKioqKioqKioqKioqKioqKiAgR0VORVJBTCBQVVJQT1NFIFRJTUVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqLworLyogVElNRVJfRU5BQkxFIE1hc2tzCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFRJTUVOMAkJCTB4MDAwMQkJLyogRW5hYmxlIFRpbWVyIDAJCQkJCSovCisjZGVmaW5lIFRJTUVOMQkJCTB4MDAwMgkJLyogRW5hYmxlIFRpbWVyIDEJCQkJCSovCisjZGVmaW5lIFRJTUVOMgkJCTB4MDAwNAkJLyogRW5hYmxlIFRpbWVyIDIJCQkJCSovCisjZGVmaW5lIFRJTUVOMwkJCTB4MDAwOAkJLyogRW5hYmxlIFRpbWVyIDMJCQkJCSovCisjZGVmaW5lIFRJTUVONAkJCTB4MDAxMAkJLyogRW5hYmxlIFRpbWVyIDQJCQkJCSovCisjZGVmaW5lIFRJTUVONQkJCTB4MDAyMAkJLyogRW5hYmxlIFRpbWVyIDUJCQkJCSovCisjZGVmaW5lIFRJTUVONgkJCTB4MDA0MAkJLyogRW5hYmxlIFRpbWVyIDYJCQkJCSovCisjZGVmaW5lIFRJTUVONwkJCTB4MDA4MAkJLyogRW5hYmxlIFRpbWVyIDcJCQkJCSovCisKKy8qIFRJTUVSX0RJU0FCTEUgTWFza3MJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVElNRElTMAkJCVRJTUVOMAkJLyogRGlzYWJsZSBUaW1lciAwCQkJCQkqLworI2RlZmluZSBUSU1ESVMxCQkJVElNRU4xCQkvKiBEaXNhYmxlIFRpbWVyIDEJCQkJCSovCisjZGVmaW5lIFRJTURJUzIJCQlUSU1FTjIJCS8qIERpc2FibGUgVGltZXIgMgkJCQkJKi8KKyNkZWZpbmUgVElNRElTMwkJCVRJTUVOMwkJLyogRGlzYWJsZSBUaW1lciAzCQkJCQkqLworI2RlZmluZSBUSU1ESVM0CQkJVElNRU40CQkvKiBEaXNhYmxlIFRpbWVyIDQJCQkJCSovCisjZGVmaW5lIFRJTURJUzUJCQlUSU1FTjUJCS8qIERpc2FibGUgVGltZXIgNQkJCQkJKi8KKyNkZWZpbmUgVElNRElTNgkJCVRJTUVONgkJLyogRGlzYWJsZSBUaW1lciA2CQkJCQkqLworI2RlZmluZSBUSU1ESVM3CQkJVElNRU43CQkvKiBEaXNhYmxlIFRpbWVyIDcJCQkJCSovCisKKy8qIFRJTUVSX1NUQVRVUyBNYXNrcwkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBUSU1JTDAJCQkweDAwMDAwMDAxCS8qIFRpbWVyIDAgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRJTUlMMQkJCTB4MDAwMDAwMDIJLyogVGltZXIgMSBJbnRlcnJ1cHQJCQkJKi8KKyNkZWZpbmUgVElNSUwyCQkJMHgwMDAwMDAwNAkvKiBUaW1lciAyIEludGVycnVwdAkJCQkqLworI2RlZmluZSBUSU1JTDMJCQkweDAwMDAwMDA4CS8qIFRpbWVyIDMgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRPVkZfRVJSMAkJMHgwMDAwMDAxMAkvKiBUaW1lciAwIENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUT1ZGX0VSUjEJCTB4MDAwMDAwMjAJLyogVGltZXIgMSBDb3VudGVyIE92ZXJmbG93CQkJKi8KKyNkZWZpbmUgVE9WRl9FUlIyCQkweDAwMDAwMDQwCS8qIFRpbWVyIDIgQ291bnRlciBPdmVyZmxvdwkJCSovCisjZGVmaW5lIFRPVkZfRVJSMwkJMHgwMDAwMDA4MAkvKiBUaW1lciAzIENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUUlVOMAkJCTB4MDAwMDEwMDAJLyogVGltZXIgMCBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVOMQkJCTB4MDAwMDIwMDAJLyogVGltZXIgMSBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVOMgkJCTB4MDAwMDQwMDAJLyogVGltZXIgMiBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVOMwkJCTB4MDAwMDgwMDAJLyogVGltZXIgMyBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUSU1JTDQJCQkweDAwMDEwMDAwCS8qIFRpbWVyIDQgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRJTUlMNQkJCTB4MDAwMjAwMDAJLyogVGltZXIgNSBJbnRlcnJ1cHQJCQkJKi8KKyNkZWZpbmUgVElNSUw2CQkJMHgwMDA0MDAwMAkvKiBUaW1lciA2IEludGVycnVwdAkJCQkqLworI2RlZmluZSBUSU1JTDcJCQkweDAwMDgwMDAwCS8qIFRpbWVyIDcgSW50ZXJydXB0CQkJCSovCisjZGVmaW5lIFRPVkZfRVJSNAkJMHgwMDEwMDAwMAkvKiBUaW1lciA0IENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUT1ZGX0VSUjUJCTB4MDAyMDAwMDAJLyogVGltZXIgNSBDb3VudGVyIE92ZXJmbG93CQkJKi8KKyNkZWZpbmUgVE9WRl9FUlI2CQkweDAwNDAwMDAwCS8qIFRpbWVyIDYgQ291bnRlciBPdmVyZmxvdwkJCSovCisjZGVmaW5lIFRPVkZfRVJSNwkJMHgwMDgwMDAwMAkvKiBUaW1lciA3IENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUUlVONAkJCTB4MTAwMDAwMDAJLyogVGltZXIgNCBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVONQkJCTB4MjAwMDAwMDAJLyogVGltZXIgNSBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVONgkJCTB4NDAwMDAwMDAJLyogVGltZXIgNiBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworI2RlZmluZSBUUlVONwkJCTB4ODAwMDAwMDAJLyogVGltZXIgNyBTbGF2ZSBFbmFibGUgU3RhdHVzCQkqLworCisvKiBBbHRlcm5hdGUgRGVwcmVjYXRlZCBNYWNyb3MgUHJvdmlkZWQgRm9yIEJhY2t3YXJkcyBDb2RlIENvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVE9WTF9FUlIwIFRPVkZfRVJSMAorI2RlZmluZSBUT1ZMX0VSUjEgVE9WRl9FUlIxCisjZGVmaW5lIFRPVkxfRVJSMiBUT1ZGX0VSUjIKKyNkZWZpbmUgVE9WTF9FUlIzIFRPVkZfRVJSMworI2RlZmluZSBUT1ZMX0VSUjQgVE9WRl9FUlI0CisjZGVmaW5lIFRPVkxfRVJSNSBUT1ZGX0VSUjUKKyNkZWZpbmUgVE9WTF9FUlI2IFRPVkZfRVJSNgorI2RlZmluZSBUT1ZMX0VSUjcgVE9WRl9FUlI3CisKKy8qIFRJTUVSeF9DT05GSUcgTWFza3MJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUFdNX09VVAkJCTB4MDAwMQkvKiBQdWxzZS1XaWR0aCBNb2R1bGF0aW9uIE91dHB1dCBNb2RlCSovCisjZGVmaW5lIFdEVEhfQ0FQCQkweDAwMDIJLyogV2lkdGggQ2FwdHVyZSBJbnB1dCBNb2RlCQkJCSovCisjZGVmaW5lIEVYVF9DTEsJCQkweDAwMDMJLyogRXh0ZXJuYWwgQ2xvY2sgTW9kZQkJCQkJKi8KKyNkZWZpbmUgUFVMU0VfSEkJCTB4MDAwNAkvKiBBY3Rpb24gUHVsc2UgKFBvc2l0aXZlL05lZ2F0aXZlKikJKi8KKyNkZWZpbmUgUEVSSU9EX0NOVAkJMHgwMDA4CS8qIFBlcmlvZCBDb3VudAkJCQkJCQkqLworI2RlZmluZSBJUlFfRU5BCQkJMHgwMDEwCS8qIEludGVycnVwdCBSZXF1ZXN0IEVuYWJsZQkJCQkqLworI2RlZmluZSBUSU5fU0VMCQkJMHgwMDIwCS8qIFRpbWVyIElucHV0IFNlbGVjdAkJCQkJKi8KKyNkZWZpbmUgT1VUX0RJUwkJCTB4MDA0MAkvKiBPdXRwdXQgUGFkIERpc2FibGUJCQkJCSovCisjZGVmaW5lIENMS19TRUwJCQkweDAwODAJLyogVGltZXIgQ2xvY2sgU2VsZWN0CQkJCQkqLworI2RlZmluZSBUT0dHTEVfSEkJCTB4MDEwMAkvKiBQV01fT1VUIFBVTFNFX0hJIFRvZ2dsZSBNb2RlCQkJKi8KKyNkZWZpbmUgRU1VX1JVTgkJCTB4MDIwMAkvKiBFbXVsYXRpb24gQmVoYXZpb3IgU2VsZWN0CQkJKi8KKyNkZWZpbmUgRVJSX1RZUAkJCTB4QzAwMAkvKiBFcnJvciBUeXBlCQkJCQkJCSovCisKKworLyogKioqKioqKioqKioqKioqKioqICAgR1BJTyBQT1JUUyBGLCBHLCBIIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICBHZW5lcmFsIFB1cnBvc2UgSU8gKDB4RkZDMDA3MDAgLSAweEZGQzAwN0ZGKSAgTWFza3MgCQkJCSovCisvKiBQb3J0IEYgTWFza3MgCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBQRjAJCTB4MDAwMQorI2RlZmluZSBQRjEJCTB4MDAwMgorI2RlZmluZSBQRjIJCTB4MDAwNAorI2RlZmluZSBQRjMJCTB4MDAwOAorI2RlZmluZSBQRjQJCTB4MDAxMAorI2RlZmluZSBQRjUJCTB4MDAyMAorI2RlZmluZSBQRjYJCTB4MDA0MAorI2RlZmluZSBQRjcJCTB4MDA4MAorI2RlZmluZSBQRjgJCTB4MDEwMAorI2RlZmluZSBQRjkJCTB4MDIwMAorI2RlZmluZSBQRjEwCTB4MDQwMAorI2RlZmluZSBQRjExCTB4MDgwMAorI2RlZmluZSBQRjEyCTB4MTAwMAorI2RlZmluZSBQRjEzCTB4MjAwMAorI2RlZmluZSBQRjE0CTB4NDAwMAorI2RlZmluZSBQRjE1CTB4ODAwMAorCisvKiBQb3J0IEcgTWFza3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBQRzAJCTB4MDAwMQorI2RlZmluZSBQRzEJCTB4MDAwMgorI2RlZmluZSBQRzIJCTB4MDAwNAorI2RlZmluZSBQRzMJCTB4MDAwOAorI2RlZmluZSBQRzQJCTB4MDAxMAorI2RlZmluZSBQRzUJCTB4MDAyMAorI2RlZmluZSBQRzYJCTB4MDA0MAorI2RlZmluZSBQRzcJCTB4MDA4MAorI2RlZmluZSBQRzgJCTB4MDEwMAorI2RlZmluZSBQRzkJCTB4MDIwMAorI2RlZmluZSBQRzEwCTB4MDQwMAorI2RlZmluZSBQRzExCTB4MDgwMAorI2RlZmluZSBQRzEyCTB4MTAwMAorI2RlZmluZSBQRzEzCTB4MjAwMAorI2RlZmluZSBQRzE0CTB4NDAwMAorI2RlZmluZSBQRzE1CTB4ODAwMAorCisvKiBQb3J0IEggTWFza3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBQSDAJCTB4MDAwMQorI2RlZmluZSBQSDEJCTB4MDAwMgorI2RlZmluZSBQSDIJCTB4MDAwNAorI2RlZmluZSBQSDMJCTB4MDAwOAorI2RlZmluZSBQSDQJCTB4MDAxMAorI2RlZmluZSBQSDUJCTB4MDAyMAorI2RlZmluZSBQSDYJCTB4MDA0MAorI2RlZmluZSBQSDcJCTB4MDA4MAorI2RlZmluZSBQSDgJCTB4MDEwMAorI2RlZmluZSBQSDkJCTB4MDIwMAorI2RlZmluZSBQSDEwCTB4MDQwMAorI2RlZmluZSBQSDExCTB4MDgwMAorI2RlZmluZSBQSDEyCTB4MTAwMAorI2RlZmluZSBQSDEzCTB4MjAwMAorI2RlZmluZSBQSDE0CTB4NDAwMAorI2RlZmluZSBQSDE1CTB4ODAwMAorCisKKy8qICoqKioqKioqKioqKioqKioqKiogIFNFUklBTCBQT1JUIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNQT1JUeF9UQ1IxIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFNQRU4JCTB4MDAwMQkJLyogVHJhbnNtaXQgRW5hYmxlCQkJCQkJCQkqLworI2RlZmluZSBJVENMSwkJMHgwMDAyCQkvKiBJbnRlcm5hbCBUcmFuc21pdCBDbG9jayBTZWxlY3QJCQkJKi8KKyNkZWZpbmUgRFRZUEVfTk9STQkweDAwMDQJCS8qIERhdGEgRm9ybWF0IE5vcm1hbAkJCQkJCQkqLworI2RlZmluZSBEVFlQRV9VTEFXCTB4MDAwOAkJLyogQ29tcGFuZCBVc2luZyB1LUxhdwkJCQkJCQkqLworI2RlZmluZSBEVFlQRV9BTEFXCTB4MDAwQwkJLyogQ29tcGFuZCBVc2luZyBBLUxhdwkJCQkJCQkqLworI2RlZmluZSBUTFNCSVQJCTB4MDAxMAkJLyogVHJhbnNtaXQgQml0IE9yZGVyCQkJCQkJCSovCisjZGVmaW5lIElURlMJCTB4MDIwMAkJLyogSW50ZXJuYWwgVHJhbnNtaXQgRnJhbWUgU3luYyBTZWxlY3QJCQkqLworI2RlZmluZSBURlNSCQkweDA0MDAJCS8qIFRyYW5zbWl0IEZyYW1lIFN5bmMgUmVxdWlyZWQgU2VsZWN0CQkJKi8KKyNkZWZpbmUgRElURlMJCTB4MDgwMAkJLyogRGF0YS1JbmRlcGVuZGVudCBUcmFuc21pdCBGcmFtZSBTeW5jIFNlbGVjdAkqLworI2RlZmluZSBMVEZTCQkweDEwMDAJCS8qIExvdyBUcmFuc21pdCBGcmFtZSBTeW5jIFNlbGVjdAkJCQkqLworI2RlZmluZSBMQVRGUwkJMHgyMDAwCQkvKiBMYXRlIFRyYW5zbWl0IEZyYW1lIFN5bmMgU2VsZWN0CQkJCSovCisjZGVmaW5lIFRDS0ZFCQkweDQwMDAJCS8qIENsb2NrIEZhbGxpbmcgRWRnZSBTZWxlY3QJCQkJCSovCisKKy8qIFNQT1JUeF9UQ1IyIE1hc2tzIGFuZCBNYWNybwkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBTTEVOKHgpCQkoKHgpJjB4MUYpCS8qIFNQT1JUIFRYIFdvcmQgTGVuZ3RoICgyIC0gMzEpCQkJCSovCisjZGVmaW5lIFRYU0UJCTB4MDEwMAkJLyogVFggU2Vjb25kYXJ5IEVuYWJsZQkJCQkJCQkqLworI2RlZmluZSBUU0ZTRQkJMHgwMjAwCQkvKiBUcmFuc21pdCBTdGVyZW8gRnJhbWUgU3luYyBFbmFibGUJCQkqLworI2RlZmluZSBUUkZTVAkJMHgwNDAwCQkvKiBMZWZ0L1JpZ2h0IE9yZGVyICgxID0gUmlnaHQgQ2hhbm5lbCAxc3QpCQkqLworCisvKiBTUE9SVHhfUkNSMSBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFJTUEVOCQkweDAwMDEJCS8qIFJlY2VpdmUgRW5hYmxlIAkJCQkJCQkJKi8KKyNkZWZpbmUgSVJDTEsJCTB4MDAwMgkJLyogSW50ZXJuYWwgUmVjZWl2ZSBDbG9jayBTZWxlY3QgCQkJCSovCisjZGVmaW5lIERUWVBFX05PUk0JMHgwMDA0CQkvKiBEYXRhIEZvcm1hdCBOb3JtYWwJCQkJCQkJKi8KKyNkZWZpbmUgRFRZUEVfVUxBVwkweDAwMDgJCS8qIENvbXBhbmQgVXNpbmcgdS1MYXcJCQkJCQkJKi8KKyNkZWZpbmUgRFRZUEVfQUxBVwkweDAwMEMJCS8qIENvbXBhbmQgVXNpbmcgQS1MYXcJCQkJCQkJKi8KKyNkZWZpbmUgUkxTQklUCQkweDAwMTAJCS8qIFJlY2VpdmUgQml0IE9yZGVyCQkJCQkJCSovCisjZGVmaW5lIElSRlMJCTB4MDIwMAkJLyogSW50ZXJuYWwgUmVjZWl2ZSBGcmFtZSBTeW5jIFNlbGVjdCAJCQkqLworI2RlZmluZSBSRlNSCQkweDA0MDAJCS8qIFJlY2VpdmUgRnJhbWUgU3luYyBSZXF1aXJlZCBTZWxlY3QgCQkJKi8KKyNkZWZpbmUgTFJGUwkJMHgxMDAwCQkvKiBMb3cgUmVjZWl2ZSBGcmFtZSBTeW5jIFNlbGVjdCAJCQkJKi8KKyNkZWZpbmUgTEFSRlMJCTB4MjAwMAkJLyogTGF0ZSBSZWNlaXZlIEZyYW1lIFN5bmMgU2VsZWN0IAkJCQkqLworI2RlZmluZSBSQ0tGRQkJMHg0MDAwCQkvKiBDbG9jayBGYWxsaW5nIEVkZ2UgU2VsZWN0IAkJCQkJKi8KKworLyogU1BPUlR4X1JDUjIgTWFza3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBTTEVOKHgpCQkoKHgpJjB4MUYpCS8qIFNQT1JUIFJYIFdvcmQgTGVuZ3RoICgyIC0gMzEpCQkJCSovCisjZGVmaW5lIFJYU0UJCTB4MDEwMAkJLyogUlggU2Vjb25kYXJ5IEVuYWJsZQkJCQkJCQkqLworI2RlZmluZSBSU0ZTRQkJMHgwMjAwCQkvKiBSWCBTdGVyZW8gRnJhbWUgU3luYyBFbmFibGUJCQkJCSovCisjZGVmaW5lIFJSRlNUCQkweDA0MDAJCS8qIFJpZ2h0LUZpcnN0IERhdGEgT3JkZXIgCQkJCQkJKi8KKworLyogU1BPUlR4X1NUQVQgTWFza3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBSWE5FCQkweDAwMDEJCS8qIFJlY2VpdmUgRklGTyBOb3QgRW1wdHkgU3RhdHVzCQkJCSovCisjZGVmaW5lIFJVVkYJCTB4MDAwMgkJLyogU3RpY2t5IFJlY2VpdmUgVW5kZXJmbG93IFN0YXR1cwkJCQkqLworI2RlZmluZSBST1ZGCQkweDAwMDQJCS8qIFN0aWNreSBSZWNlaXZlIE92ZXJmbG93IFN0YXR1cwkJCQkqLworI2RlZmluZSBUWEYJCQkweDAwMDgJCS8qIFRyYW5zbWl0IEZJRk8gRnVsbCBTdGF0dXMJCQkJCSovCisjZGVmaW5lIFRVVkYJCTB4MDAxMAkJLyogU3RpY2t5IFRyYW5zbWl0IFVuZGVyZmxvdyBTdGF0dXMJCQkJKi8KKyNkZWZpbmUgVE9WRgkJMHgwMDIwCQkvKiBTdGlja3kgVHJhbnNtaXQgT3ZlcmZsb3cgU3RhdHVzCQkJCSovCisjZGVmaW5lIFRYSFJFCQkweDAwNDAJCS8qIFRyYW5zbWl0IEhvbGQgUmVnaXN0ZXIgRW1wdHkJCQkJCSovCisKKy8qIFNQT1JUeF9NQ01DMSBNYWNyb3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBTUF9XT0ZGKHgpCSgoeCkgJiAweDNGRikgCS8qIE11bHRpY2hhbm5lbCBXaW5kb3cgT2Zmc2V0IEZpZWxkCQkJKi8KKworLyogT25seSB1c2UgV1NJWkUgTWFjcm8gV2l0aCBMb2dpYyBPUiBXaGlsZSBTZXR0aW5nIExvd2VyIE9yZGVyIEJpdHMJCQkJCQkqLworI2RlZmluZSBTUF9XU0laRSh4KQkoKCgoKHgpPj4weDMpLTEpJjB4RikgPDwgMHhDKQkvKiBNdWx0aWNoYW5uZWwgV2luZG93IFNpemUgPSAoeC84KS0xCSovCisKKy8qIFNQT1JUeF9NQ01DMiBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFJFQ19CWVBBU1MJMHgwMDAwCQkvKiBCeXBhc3MgTW9kZSAoTm8gQ2xvY2sgUmVjb3ZlcnkpCQkJCSovCisjZGVmaW5lIFJFQ18yRlJPTTQJMHgwMDAyCQkvKiBSZWNvdmVyIDIgTUh6IENsb2NrIGZyb20gNCBNSHogQ2xvY2sJCQkqLworI2RlZmluZSBSRUNfOEZST00xNgkweDAwMDMJCS8qIFJlY292ZXIgOCBNSHogQ2xvY2sgZnJvbSAxNiBNSHogQ2xvY2sJCSovCisjZGVmaW5lIE1DRFRYUEUJCTB4MDAwNCAJCS8qIE11bHRpY2hhbm5lbCBETUEgVHJhbnNtaXQgUGFja2luZwkJCSovCisjZGVmaW5lIE1DRFJYUEUJCTB4MDAwOCAJCS8qIE11bHRpY2hhbm5lbCBETUEgUmVjZWl2ZSBQYWNraW5nCQkJCSovCisjZGVmaW5lIE1DTUVOCQkweDAwMTAgCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgTW9kZSBFbmFibGUJCQkJKi8KKyNkZWZpbmUgRlNEUgkJMHgwMDgwIAkJLyogTXVsdGljaGFubmVsIEZyYW1lIFN5bmMgdG8gRGF0YSBSZWxhdGlvbnNoaXAJKi8KKyNkZWZpbmUgTUZEXzAJCTB4MDAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gMAkJCQkJKi8KKyNkZWZpbmUgTUZEXzEJCTB4MTAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gMQkJCQkJKi8KKyNkZWZpbmUgTUZEXzIJCTB4MjAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gMgkJCQkJKi8KKyNkZWZpbmUgTUZEXzMJCTB4MzAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gMwkJCQkJKi8KKyNkZWZpbmUgTUZEXzQJCTB4NDAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gNAkJCQkJKi8KKyNkZWZpbmUgTUZEXzUJCTB4NTAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gNQkJCQkJKi8KKyNkZWZpbmUgTUZEXzYJCTB4NjAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gNgkJCQkJKi8KKyNkZWZpbmUgTUZEXzcJCTB4NzAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gNwkJCQkJKi8KKyNkZWZpbmUgTUZEXzgJCTB4ODAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gOAkJCQkJKi8KKyNkZWZpbmUgTUZEXzkJCTB4OTAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gOQkJCQkJKi8KKyNkZWZpbmUgTUZEXzEwCQkweEEwMDAJCS8qIE11bHRpY2hhbm5lbCBGcmFtZSBEZWxheSA9IDEwCQkJCSovCisjZGVmaW5lIE1GRF8xMQkJMHhCMDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSAxMQkJCQkqLworI2RlZmluZSBNRkRfMTIJCTB4QzAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gMTIJCQkJKi8KKyNkZWZpbmUgTUZEXzEzCQkweEQwMDAJCS8qIE11bHRpY2hhbm5lbCBGcmFtZSBEZWxheSA9IDEzCQkJCSovCisjZGVmaW5lIE1GRF8xNAkJMHhFMDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSAxNAkJCQkqLworI2RlZmluZSBNRkRfMTUJCTB4RjAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gMTUJCQkJKi8KKworCisvKiAqKioqKioqKioqKioqKioqKioqKiogIEFTWU5DSFJPTk9VUyBNRU1PUlkgQ09OVFJPTExFUiBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEVCSVVfQU1HQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBBTUNLRU4JCQkweDAwMDEJCS8qIEVuYWJsZSBDTEtPVVQJCQkJCQkJCQkqLworI2RlZmluZQlBTUJFTl9OT05FCQkweDAwMDAJCS8qIEFsbCBCYW5rcyBEaXNhYmxlZAkJCQkJCQkJKi8KKyNkZWZpbmUgQU1CRU5fQjAJCTB4MDAwMgkJLyogRW5hYmxlIEFzeW5jIE1lbW9yeSBCYW5rIDAgb25seQkJCQkJKi8KKyNkZWZpbmUgQU1CRU5fQjBfQjEJCTB4MDAwNAkJLyogRW5hYmxlIEFzeW5jIE1lbW9yeSBCYW5rcyAwICYgMSBvbmx5CQkJCSovCisjZGVmaW5lIEFNQkVOX0IwX0IxX0IyCTB4MDAwNgkJLyogRW5hYmxlIEFzeW5jIE1lbW9yeSBCYW5rcyAwLCAxLCBhbmQgMgkJCSovCisjZGVmaW5lIEFNQkVOX0FMTAkJMHgwMDA4CQkvKiBFbmFibGUgQXN5bmMgTWVtb3J5IEJhbmtzIChhbGwpIDAsIDEsIDIsIGFuZCAzCSovCisKKy8qIEVCSVVfQU1CQ1RMMCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgQjBSRFlFTgkJCTB4MDAwMDAwMDEgIC8qIEJhbmsgMCAoQjApIFJEWSBFbmFibGUJCQkJCQkJKi8KKyNkZWZpbmUgQjBSRFlQT0wJCTB4MDAwMDAwMDIgIC8qIEIwIFJEWSBBY3RpdmUgSGlnaAkJCQkJCQkJKi8KKyNkZWZpbmUgQjBUVF8xCQkJMHgwMDAwMDAwNCAgLyogQjAgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDEgY3ljbGUJCSovCisjZGVmaW5lIEIwVFRfMgkJCTB4MDAwMDAwMDggIC8qIEIwIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAyIGN5Y2xlcwkqLworI2RlZmluZSBCMFRUXzMJCQkweDAwMDAwMDBDICAvKiBCMCBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMyBjeWNsZXMJKi8KKyNkZWZpbmUgQjBUVF80CQkJMHgwMDAwMDAwMCAgLyogQjAgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDQgY3ljbGVzCSovCisjZGVmaW5lIEIwU1RfMQkJCTB4MDAwMDAwMTAgIC8qIEIwIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDEgY3ljbGUJCSovCisjZGVmaW5lIEIwU1RfMgkJCTB4MDAwMDAwMjAgIC8qIEIwIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDIgY3ljbGVzCQkqLworI2RlZmluZSBCMFNUXzMJCQkweDAwMDAwMDMwICAvKiBCMCBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAzIGN5Y2xlcwkJKi8KKyNkZWZpbmUgQjBTVF80CQkJMHgwMDAwMDAwMCAgLyogQjAgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gNCBjeWNsZXMJCSovCisjZGVmaW5lIEIwSFRfMQkJCTB4MDAwMDAwNDAgIC8qIEIwIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAxIGN5Y2xlCQkqLworI2RlZmluZSBCMEhUXzIJCQkweDAwMDAwMDgwICAvKiBCMCBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMiBjeWNsZXMJKi8KKyNkZWZpbmUgQjBIVF8zCQkJMHgwMDAwMDBDMCAgLyogQjAgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDMgY3ljbGVzCSovCisjZGVmaW5lIEIwSFRfMAkJCTB4MDAwMDAwMDAgIC8qIEIwIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAwIGN5Y2xlcwkqLworI2RlZmluZSBCMFJBVF8xCQkJMHgwMDAwMDEwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCisjZGVmaW5lIEIwUkFUXzIJCQkweDAwMDAwMjAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzMJCQkweDAwMDAwMzAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzQJCQkweDAwMDAwNDAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzUJCQkweDAwMDAwNTAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzYJCQkweDAwMDAwNjAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzcJCQkweDAwMDAwNzAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzgJCQkweDAwMDAwODAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzkJCQkweDAwMDAwOTAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzEwCQkweDAwMDAwQTAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFJBVF8xMQkJMHgwMDAwMEIwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfMTIJCTB4MDAwMDBDMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwUkFUXzEzCQkweDAwMDAwRDAwICAvKiBCMCBSZWFkIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFJBVF8xNAkJMHgwMDAwMEUwMCAgLyogQjAgUmVhZCBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBSQVRfMTUJCTB4MDAwMDBGMDAgIC8qIEIwIFJlYWQgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzEJCQkweDAwMDAxMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCisjZGVmaW5lIEIwV0FUXzIJCQkweDAwMDAyMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF8zCQkJMHgwMDAwMzAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfNAkJCTB4MDAwMDQwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzUJCQkweDAwMDA1MDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF82CQkJMHgwMDAwNjAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfNwkJCTB4MDAwMDcwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzgJCQkweDAwMDA4MDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF85CQkJMHgwMDAwOTAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfMTAJCTB4MDAwMEEwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF8xMQkJMHgwMDAwQjAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzEyCQkweDAwMDBDMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjBXQVRfMTMJCTB4MDAwMEQwMDAgIC8qIEIwIFdyaXRlIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMFdBVF8xNAkJMHgwMDAwRTAwMCAgLyogQjAgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIwV0FUXzE1CQkweDAwMDBGMDAwICAvKiBCMCBXcml0ZSBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KKworI2RlZmluZSBCMVJEWUVOCQkJMHgwMDAxMDAwMCAgLyogQmFuayAxIChCMSkgUkRZIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgCSovCisjZGVmaW5lIEIxUkRZUE9MCQkweDAwMDIwMDAwICAvKiBCMSBSRFkgQWN0aXZlIEhpZ2ggICAgICAgICAgICAgICAgICAgICAgICAgICAJKi8KKyNkZWZpbmUgQjFUVF8xCQkJMHgwMDA0MDAwMCAgLyogQjEgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDEgY3ljbGUgCSovCisjZGVmaW5lIEIxVFRfMgkJCTB4MDAwODAwMDAgIC8qIEIxIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAyIGN5Y2xlcwkqLworI2RlZmluZSBCMVRUXzMJCQkweDAwMEMwMDAwICAvKiBCMSBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMyBjeWNsZXMJKi8KKyNkZWZpbmUgQjFUVF80CQkJMHgwMDAwMDAwMCAgLyogQjEgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDQgY3ljbGVzCSovCisjZGVmaW5lIEIxU1RfMQkJCTB4MDAxMDAwMDAgIC8qIEIxIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDEgY3ljbGUgIAkqLworI2RlZmluZSBCMVNUXzIJCQkweDAwMjAwMDAwICAvKiBCMSBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAyIGN5Y2xlcyAJKi8KKyNkZWZpbmUgQjFTVF8zCQkJMHgwMDMwMDAwMCAgLyogQjEgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMyBjeWNsZXMgCSovCisjZGVmaW5lIEIxU1RfNAkJCTB4MDAwMDAwMDAgIC8qIEIxIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDQgY3ljbGVzIAkqLworI2RlZmluZSBCMUhUXzEJCQkweDAwNDAwMDAwICAvKiBCMSBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMSBjeWNsZSAJKi8KKyNkZWZpbmUgQjFIVF8yCQkJMHgwMDgwMDAwMCAgLyogQjEgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDIgY3ljbGVzCSovCisjZGVmaW5lIEIxSFRfMwkJCTB4MDBDMDAwMDAgIC8qIEIxIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAzIGN5Y2xlcwkqLworI2RlZmluZSBCMUhUXzAJCQkweDAwMDAwMDAwICAvKiBCMSBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMCBjeWNsZXMJKi8KKyNkZWZpbmUgQjFSQVRfMQkJCTB4MDEwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLworI2RlZmluZSBCMVJBVF8yCQkJMHgwMjAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF8zCQkJMHgwMzAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF80CQkJMHgwNDAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF81CQkJMHgwNTAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF82CQkJMHgwNjAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF83CQkJMHgwNzAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF84CQkJMHgwODAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF85CQkJMHgwOTAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF8xMAkJMHgwQTAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFSQVRfMTEJCTB4MEIwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzEyCQkweDBDMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVJBVF8xMwkJMHgwRDAwMDAwMCAgLyogQjEgUmVhZCBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFSQVRfMTQJCTB4MEUwMDAwMDAgIC8qIEIxIFJlYWQgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxUkFUXzE1CQkweDBGMDAwMDAwICAvKiBCMSBSZWFkIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF8xCQkJMHgxMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAxIGN5Y2xlCQkJCQkqLworI2RlZmluZSBCMVdBVF8yCQkJMHgyMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfMwkJCTB4MzAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzQJCQkweDQwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF81CQkJMHg1MDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfNgkJCTB4NjAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzcJCQkweDcwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDcgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF84CQkJMHg4MDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfOQkJCTB4OTAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzEwCQkweEEwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDEwIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfMTEJCTB4QjAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF8xMgkJMHhDMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIxV0FUXzEzCQkweEQwMDAwMDAwICAvKiBCMSBXcml0ZSBBY2Nlc3MgVGltZSA9IDEzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjFXQVRfMTQJCTB4RTAwMDAwMDAgIC8qIEIxIFdyaXRlIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMVdBVF8xNQkJMHhGMDAwMDAwMCAgLyogQjEgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCisKKy8qIEVCSVVfQU1CQ1RMMSBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgQjJSRFlFTgkJCTB4MDAwMDAwMDEgIC8qIEJhbmsgMiAoQjIpIFJEWSBFbmFibGUJCQkJCQkJKi8KKyNkZWZpbmUgQjJSRFlQT0wJCTB4MDAwMDAwMDIgIC8qIEIyIFJEWSBBY3RpdmUgSGlnaAkJCQkJCQkJKi8KKyNkZWZpbmUgQjJUVF8xCQkJMHgwMDAwMDAwNCAgLyogQjIgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDEgY3ljbGUJCSovCisjZGVmaW5lIEIyVFRfMgkJCTB4MDAwMDAwMDggIC8qIEIyIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAyIGN5Y2xlcwkqLworI2RlZmluZSBCMlRUXzMJCQkweDAwMDAwMDBDICAvKiBCMiBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMyBjeWNsZXMJKi8KKyNkZWZpbmUgQjJUVF80CQkJMHgwMDAwMDAwMCAgLyogQjIgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDQgY3ljbGVzCSovCisjZGVmaW5lIEIyU1RfMQkJCTB4MDAwMDAwMTAgIC8qIEIyIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDEgY3ljbGUJCSovCisjZGVmaW5lIEIyU1RfMgkJCTB4MDAwMDAwMjAgIC8qIEIyIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDIgY3ljbGVzCQkqLworI2RlZmluZSBCMlNUXzMJCQkweDAwMDAwMDMwICAvKiBCMiBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSAzIGN5Y2xlcwkJKi8KKyNkZWZpbmUgQjJTVF80CQkJMHgwMDAwMDAwMCAgLyogQjIgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gNCBjeWNsZXMJCSovCisjZGVmaW5lIEIySFRfMQkJCTB4MDAwMDAwNDAgIC8qIEIyIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAxIGN5Y2xlCQkqLworI2RlZmluZSBCMkhUXzIJCQkweDAwMDAwMDgwICAvKiBCMiBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMiBjeWNsZXMJKi8KKyNkZWZpbmUgQjJIVF8zCQkJMHgwMDAwMDBDMCAgLyogQjIgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDMgY3ljbGVzCSovCisjZGVmaW5lIEIySFRfMAkJCTB4MDAwMDAwMDAgIC8qIEIyIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAwIGN5Y2xlcwkqLworI2RlZmluZSBCMlJBVF8xCQkJMHgwMDAwMDEwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCisjZGVmaW5lIEIyUkFUXzIJCQkweDAwMDAwMjAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzMJCQkweDAwMDAwMzAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzQJCQkweDAwMDAwNDAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzUJCQkweDAwMDAwNTAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzYJCQkweDAwMDAwNjAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gNiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzcJCQkweDAwMDAwNzAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzgJCQkweDAwMDAwODAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzkJCQkweDAwMDAwOTAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gOSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzEwCQkweDAwMDAwQTAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMlJBVF8xMQkJMHgwMDAwMEIwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfMTIJCTB4MDAwMDBDMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyUkFUXzEzCQkweDAwMDAwRDAwICAvKiBCMiBSZWFkIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMlJBVF8xNAkJMHgwMDAwMEUwMCAgLyogQjIgUmVhZCBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJSQVRfMTUJCTB4MDAwMDBGMDAgIC8qIEIyIFJlYWQgQWNjZXNzIFRpbWUgPSAxNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzEJCQkweDAwMDAxMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDEgY3ljbGUJCQkJCSovCisjZGVmaW5lIEIyV0FUXzIJCQkweDAwMDAyMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF8zCQkJMHgwMDAwMzAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfNAkJCTB4MDAwMDQwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzUJCQkweDAwMDA1MDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDUgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF82CQkJMHgwMDAwNjAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfNwkJCTB4MDAwMDcwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gNyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzgJCQkweDAwMDA4MDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDggY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF85CQkJMHgwMDAwOTAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfMTAJCTB4MDAwMEEwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMTAgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF8xMQkJMHgwMDAwQjAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzEyCQkweDAwMDBDMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjJXQVRfMTMJCTB4MDAwMEQwMDAgIC8qIEIyIFdyaXRlIEFjY2VzcyBUaW1lID0gMTMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCMldBVF8xNAkJMHgwMDAwRTAwMCAgLyogQjIgV3JpdGUgQWNjZXNzIFRpbWUgPSAxNCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIyV0FUXzE1CQkweDAwMDBGMDAwICAvKiBCMiBXcml0ZSBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KKworI2RlZmluZSBCM1JEWUVOCQkJMHgwMDAxMDAwMCAgLyogQmFuayAzIChCMykgUkRZIEVuYWJsZQkJCQkJCQkqLworI2RlZmluZSBCM1JEWVBPTAkJMHgwMDAyMDAwMCAgLyogQjMgUkRZIEFjdGl2ZSBIaWdoCQkJCQkJCQkqLworI2RlZmluZSBCM1RUXzEJCQkweDAwMDQwMDAwICAvKiBCMyBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjNUVF8yCQkJMHgwMDA4MDAwMCAgLyogQjMgVHJhbnNpdGlvbiBUaW1lIChSZWFkIHRvIFdyaXRlKSA9IDIgY3ljbGVzCSovCisjZGVmaW5lIEIzVFRfMwkJCTB4MDAwQzAwMDAgIC8qIEIzIFRyYW5zaXRpb24gVGltZSAoUmVhZCB0byBXcml0ZSkgPSAzIGN5Y2xlcwkqLworI2RlZmluZSBCM1RUXzQJCQkweDAwMDAwMDAwICAvKiBCMyBUcmFuc2l0aW9uIFRpbWUgKFJlYWQgdG8gV3JpdGUpID0gNCBjeWNsZXMJKi8KKyNkZWZpbmUgQjNTVF8xCQkJMHgwMDEwMDAwMCAgLyogQjMgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMSBjeWNsZQkJKi8KKyNkZWZpbmUgQjNTVF8yCQkJMHgwMDIwMDAwMCAgLyogQjMgU2V0dXAgVGltZSAoQU9FIHRvIFJlYWQvV3JpdGUpID0gMiBjeWNsZXMJCSovCisjZGVmaW5lIEIzU1RfMwkJCTB4MDAzMDAwMDAgIC8qIEIzIFNldHVwIFRpbWUgKEFPRSB0byBSZWFkL1dyaXRlKSA9IDMgY3ljbGVzCQkqLworI2RlZmluZSBCM1NUXzQJCQkweDAwMDAwMDAwICAvKiBCMyBTZXR1cCBUaW1lIChBT0UgdG8gUmVhZC9Xcml0ZSkgPSA0IGN5Y2xlcwkJKi8KKyNkZWZpbmUgQjNIVF8xCQkJMHgwMDQwMDAwMCAgLyogQjMgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDEgY3ljbGUJCSovCisjZGVmaW5lIEIzSFRfMgkJCTB4MDA4MDAwMDAgIC8qIEIzIEhvbGQgVGltZSAoflJlYWQvV3JpdGUgdG8gfkFPRSkgPSAyIGN5Y2xlcwkqLworI2RlZmluZSBCM0hUXzMJCQkweDAwQzAwMDAwICAvKiBCMyBIb2xkIFRpbWUgKH5SZWFkL1dyaXRlIHRvIH5BT0UpID0gMyBjeWNsZXMJKi8KKyNkZWZpbmUgQjNIVF8wCQkJMHgwMDAwMDAwMCAgLyogQjMgSG9sZCBUaW1lICh+UmVhZC9Xcml0ZSB0byB+QU9FKSA9IDAgY3ljbGVzCSovCisjZGVmaW5lIEIzUkFUXzEJCQkweDAxMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfMgkJCTB4MDIwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfMwkJCTB4MDMwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAzIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfNAkJCTB4MDQwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfNQkJCTB4MDUwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSA1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfNgkJCTB4MDYwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSA2IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfNwkJCTB4MDcwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfOAkJCTB4MDgwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSA4IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfOQkJCTB4MDkwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSA5IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfMTAJCTB4MEEwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzUkFUXzExCQkweDBCMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMTEgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF8xMgkJMHgwQzAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDEyIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNSQVRfMTMJCTB4MEQwMDAwMDAgIC8qIEIzIFJlYWQgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzUkFUXzE0CQkweDBFMDAwMDAwICAvKiBCMyBSZWFkIEFjY2VzcyBUaW1lID0gMTQgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1JBVF8xNQkJMHgwRjAwMDAwMCAgLyogQjMgUmVhZCBBY2Nlc3MgVGltZSA9IDE1IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfMQkJCTB4MTAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMSBjeWNsZQkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfMgkJCTB4MjAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMiBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzMJCQkweDMwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDMgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF80CQkJMHg0MDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSA0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfNQkJCTB4NTAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gNSBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzYJCQkweDYwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDYgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF83CQkJMHg3MDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSA3IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfOAkJCTB4ODAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gOCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzkJCQkweDkwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDkgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF8xMAkJMHhBMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMCBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzExCQkweEIwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDExIGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfMTIJCTB4QzAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMTIgY3ljbGVzCQkJCQkqLworI2RlZmluZSBCM1dBVF8xMwkJMHhEMDAwMDAwMCAgLyogQjMgV3JpdGUgQWNjZXNzIFRpbWUgPSAxMyBjeWNsZXMJCQkJCSovCisjZGVmaW5lIEIzV0FUXzE0CQkweEUwMDAwMDAwICAvKiBCMyBXcml0ZSBBY2Nlc3MgVGltZSA9IDE0IGN5Y2xlcwkJCQkJKi8KKyNkZWZpbmUgQjNXQVRfMTUJCTB4RjAwMDAwMDAgIC8qIEIzIFdyaXRlIEFjY2VzcyBUaW1lID0gMTUgY3ljbGVzCQkJCQkqLworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKiogIFNEUkFNIENPTlRST0xMRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFQklVX1NER0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBTQ1RMRQkJCTB4MDAwMDAwMDEJLyogRW5hYmxlIFNEUkFNIFNpZ25hbHMJCQkJCQkJCQkJKi8KKyNkZWZpbmUgQ0xfMgkJCTB4MDAwMDAwMDgJLyogU0RSQU0gQ0FTIExhdGVuY3kgPSAyIGN5Y2xlcwkJCQkJCQkJKi8KKyNkZWZpbmUgQ0xfMwkJCTB4MDAwMDAwMEMJLyogU0RSQU0gQ0FTIExhdGVuY3kgPSAzIGN5Y2xlcwkJCQkJCQkJKi8KKyNkZWZpbmUgUEFTUl9BTEwJCTB4MDAwMDAwMDAJLyogQWxsIDQgU0RSQU0gQmFua3MgUmVmcmVzaGVkIEluIFNlbGYtUmVmcmVzaAkJCQkqLworI2RlZmluZSBQQVNSX0IwX0IxCQkweDAwMDAwMDEwCS8qIFNEUkFNIEJhbmtzIDAgYW5kIDEgQXJlIFJlZnJlc2hlZCBJbiBTZWxmLVJlZnJlc2gJCSovCisjZGVmaW5lIFBBU1JfQjAJCQkweDAwMDAwMDIwCS8qIE9ubHkgU0RSQU0gQmFuayAwIElzIFJlZnJlc2hlZCBJbiBTZWxmLVJlZnJlc2gJCQkqLworI2RlZmluZSBUUkFTXzEJCQkweDAwMDAwMDQwCS8qIFNEUkFNIHRSQVMgPSAxIGN5Y2xlCQkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfMgkJCTB4MDAwMDAwODAJLyogU0RSQU0gdFJBUyA9IDIgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU18zCQkJMHgwMDAwMDBDMAkvKiBTRFJBTSB0UkFTID0gMyBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzQJCQkweDAwMDAwMTAwCS8qIFNEUkFNIHRSQVMgPSA0IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfNQkJCTB4MDAwMDAxNDAJLyogU0RSQU0gdFJBUyA9IDUgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU182CQkJMHgwMDAwMDE4MAkvKiBTRFJBTSB0UkFTID0gNiBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzcJCQkweDAwMDAwMUMwCS8qIFNEUkFNIHRSQVMgPSA3IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfOAkJCTB4MDAwMDAyMDAJLyogU0RSQU0gdFJBUyA9IDggY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU185CQkJMHgwMDAwMDI0MAkvKiBTRFJBTSB0UkFTID0gOSBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzEwCQkJMHgwMDAwMDI4MAkvKiBTRFJBTSB0UkFTID0gMTAgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU18xMQkJCTB4MDAwMDAyQzAJLyogU0RSQU0gdFJBUyA9IDExIGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfMTIJCQkweDAwMDAwMzAwCS8qIFNEUkFNIHRSQVMgPSAxMiBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkFTXzEzCQkJMHgwMDAwMDM0MAkvKiBTRFJBTSB0UkFTID0gMTMgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJBU18xNAkJCTB4MDAwMDAzODAJLyogU0RSQU0gdFJBUyA9IDE0IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQVNfMTUJCQkweDAwMDAwM0MwCS8qIFNEUkFNIHRSQVMgPSAxNSBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUlBfMQkJCTB4MDAwMDA4MDAJLyogU0RSQU0gdFJQID0gMSBjeWNsZQkJCQkJCQkJCQkqLworI2RlZmluZSBUUlBfMgkJCTB4MDAwMDEwMDAJLyogU0RSQU0gdFJQID0gMiBjeWNsZXMJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJQXzMJCQkweDAwMDAxODAwCS8qIFNEUkFNIHRSUCA9IDMgY3ljbGVzCQkJCQkJCQkJCSovCisjZGVmaW5lIFRSUF80CQkJMHgwMDAwMjAwMAkvKiBTRFJBTSB0UlAgPSA0IGN5Y2xlcwkJCQkJCQkJCQkqLworI2RlZmluZSBUUlBfNQkJCTB4MDAwMDI4MDAJLyogU0RSQU0gdFJQID0gNSBjeWNsZXMJCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJQXzYJCQkweDAwMDAzMDAwCS8qIFNEUkFNIHRSUCA9IDYgY3ljbGVzCQkJCQkJCQkJCSovCisjZGVmaW5lIFRSUF83CQkJMHgwMDAwMzgwMAkvKiBTRFJBTSB0UlAgPSA3IGN5Y2xlcwkJCQkJCQkJCQkqLworI2RlZmluZSBUUkNEXzEJCQkweDAwMDA4MDAwCS8qIFNEUkFNIHRSQ0QgPSAxIGN5Y2xlCQkJCQkJCQkJCSovCisjZGVmaW5lIFRSQ0RfMgkJCTB4MDAwMTAwMDAJLyogU0RSQU0gdFJDRCA9IDIgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJDRF8zCQkJMHgwMDAxODAwMAkvKiBTRFJBTSB0UkNEID0gMyBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkNEXzQJCQkweDAwMDIwMDAwCS8qIFNEUkFNIHRSQ0QgPSA0IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRSQ0RfNQkJCTB4MDAwMjgwMDAJLyogU0RSQU0gdFJDRCA9IDUgY3ljbGVzCQkJCQkJCQkJKi8KKyNkZWZpbmUgVFJDRF82CQkJMHgwMDAzMDAwMAkvKiBTRFJBTSB0UkNEID0gNiBjeWNsZXMJCQkJCQkJCQkqLworI2RlZmluZSBUUkNEXzcJCQkweDAwMDM4MDAwCS8qIFNEUkFNIHRSQ0QgPSA3IGN5Y2xlcwkJCQkJCQkJCSovCisjZGVmaW5lIFRXUl8xCQkJMHgwMDA4MDAwMAkvKiBTRFJBTSB0V1IgPSAxIGN5Y2xlCQkJCQkJCQkJCSovCisjZGVmaW5lIFRXUl8yCQkJMHgwMDEwMDAwMAkvKiBTRFJBTSB0V1IgPSAyIGN5Y2xlcwkJCQkJCQkJCQkqLworI2RlZmluZSBUV1JfMwkJCTB4MDAxODAwMDAJLyogU0RSQU0gdFdSID0gMyBjeWNsZXMJCQkJCQkJCQkJKi8KKyNkZWZpbmUgUFVQU0QJCQkweDAwMjAwMDAwCS8qIFBvd2VyLVVwIFN0YXJ0IERlbGF5ICgxNSBTQ0xLIEN5Y2xlcyBEZWxheSkJCQkJKi8KKyNkZWZpbmUgUFNNCQkJCTB4MDA0MDAwMDAJLyogUG93ZXItVXAgU2VxdWVuY2UgKE1vZGUgUmVnaXN0ZXIgQmVmb3JlL0FmdGVyKiBSZWZyZXNoKQkqLworI2RlZmluZSBQU1MJCQkJMHgwMDgwMDAwMAkvKiBFbmFibGUgUG93ZXItVXAgU2VxdWVuY2Ugb24gTmV4dCBTRFJBTSBBY2Nlc3MJCQkqLworI2RlZmluZSBTUkZTCQkJMHgwMTAwMDAwMAkvKiBFbmFibGUgU0RSQU0gU2VsZi1SZWZyZXNoIE1vZGUJCQkJCQkJKi8KKyNkZWZpbmUgRUJVRkUJCQkweDAyMDAwMDAwCS8qIEVuYWJsZSBFeHRlcm5hbCBCdWZmZXJpbmcgVGltaW5nCQkJCQkJCSovCisjZGVmaW5lIEZCQlJXCQkJMHgwNDAwMDAwMAkvKiBFbmFibGUgRmFzdCBCYWNrLVRvLUJhY2sgUmVhZCBUbyBXcml0ZQkJCQkJKi8KKyNkZWZpbmUgRU1SRU4JCQkweDEwMDAwMDAwCS8qIEV4dGVuZGVkIE1vZGUgUmVnaXN0ZXIgRW5hYmxlCQkJCQkJCSovCisjZGVmaW5lIFRDU1IJCQkweDIwMDAwMDAwCS8qIFRlbXAtQ29tcGVuc2F0ZWQgU2VsZi1SZWZyZXNoIFZhbHVlICg4NS80NSogRGVnIEMpCQkqLworI2RlZmluZSBDRERCRwkJCTB4NDAwMDAwMDAJLyogVHJpc3RhdGUgU0RSQU0gQ29udHJvbHMgRHVyaW5nIEJ1cyBHcmFudAkJCQkJKi8KKworLyogRUJJVV9TREJDVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBFQkUJCQkJMHgwMDAxCQkvKiBFbmFibGUgU0RSQU0gRXh0ZXJuYWwgQmFuawkJCQkJCQkqLworI2RlZmluZSBFQlNaXzE2CQkJMHgwMDAwCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSAxNk1CCSovCisjZGVmaW5lIEVCU1pfMzIJCQkweDAwMDIJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDMyTUIJKi8KKyNkZWZpbmUgRUJTWl82NAkJCTB4MDAwNAkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gNjRNQgkqLworI2RlZmluZSBFQlNaXzEyOAkJMHgwMDA2CQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSAxMjhNQgkJKi8KKyNkZWZpbmUgRUJTWl8yNTYJCTB4MDAwOAkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gMjU2TUIgCSovCisjZGVmaW5lIEVCU1pfNTEyCQkweDAwMEEJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDUxMk1CCQkqLworI2RlZmluZSBFQkNBV184CQkJMHgwMDAwCQkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIENvbHVtbiBBZGRyZXNzIFdpZHRoID0gOCBCaXRzCSovCisjZGVmaW5lIEVCQ0FXXzkJCQkweDAwMTAJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgQ29sdW1uIEFkZHJlc3MgV2lkdGggPSA5IEJpdHMJKi8KKyNkZWZpbmUgRUJDQVdfMTAJCTB4MDAyMAkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBDb2x1bW4gQWRkcmVzcyBXaWR0aCA9IDEwIEJpdHMJKi8KKyNkZWZpbmUgRUJDQVdfMTEJCTB4MDAzMAkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBDb2x1bW4gQWRkcmVzcyBXaWR0aCA9IDExIEJpdHMJKi8KKworLyogRUJJVV9TRFNUQVQgTWFza3MJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFNEQ0kJCQkweDAwMDEJCS8qIFNEUkFNIENvbnRyb2xsZXIgSWRsZSAJCQkJKi8KKyNkZWZpbmUgU0RTUkEJCQkweDAwMDIJCS8qIFNEUkFNIFNlbGYtUmVmcmVzaCBBY3RpdmUJCQkqLworI2RlZmluZSBTRFBVQQkJCTB4MDAwNAkJLyogU0RSQU0gUG93ZXItVXAgQWN0aXZlIAkJCQkqLworI2RlZmluZSBTRFJTCQkJMHgwMDA4CQkvKiBTRFJBTSBXaWxsIFBvd2VyLVVwIE9uIE5leHQgQWNjZXNzCSovCisjZGVmaW5lIFNERUFTRQkJCTB4MDAxMAkJLyogU0RSQU0gRUFCIFN0aWNreSBFcnJvciBTdGF0dXMJCSovCisjZGVmaW5lIEJHU1RBVAkJCTB4MDAyMAkJLyogQnVzIEdyYW50IFN0YXR1cwkJCQkJCSovCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKiogIERNQSBDT05UUk9MTEVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERNQXhfQ09ORklHLCBNRE1BX3l5X0NPTkZJRyBNYXNrcwkJCQkJCQkJCQkJCSovCisjZGVmaW5lIERNQUVOCQkJMHgwMDAxCQkvKiBETUEgQ2hhbm5lbCBFbmFibGUJCQkJCQkJKi8KKyNkZWZpbmUgV05SCQkJCTB4MDAwMgkJLyogQ2hhbm5lbCBEaXJlY3Rpb24gKFcvUiopCQkJCQkJKi8KKyNkZWZpbmUgV0RTSVpFXzgJCTB4MDAwMAkJLyogVHJhbnNmZXIgV29yZCBTaXplID0gOAkJCQkJCSovCisjZGVmaW5lIFdEU0laRV8xNgkJMHgwMDA0CQkvKiBUcmFuc2ZlciBXb3JkIFNpemUgPSAxNgkJCQkJCSovCisjZGVmaW5lIFdEU0laRV8zMgkJMHgwMDA4CQkvKiBUcmFuc2ZlciBXb3JkIFNpemUgPSAzMgkJCQkJCSovCisjZGVmaW5lIERNQTJECQkJMHgwMDEwCQkvKiBETUEgTW9kZSAoMkQvMUQqKQkJCQkJCQkqLworI2RlZmluZSBSRVNUQVJUCQkJMHgwMDIwCQkvKiBETUEgQnVmZmVyIENsZWFyCQkJCQkJCQkqLworI2RlZmluZSBESV9TRUwJCQkweDAwNDAJCS8qIERhdGEgSW50ZXJydXB0IFRpbWluZyBTZWxlY3QJCQkJCSovCisjZGVmaW5lIERJX0VOCQkJMHgwMDgwCQkvKiBEYXRhIEludGVycnVwdCBFbmFibGUJCQkJCQkqLworI2RlZmluZSBORFNJWkVfMAkJMHgwMDAwCQkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSA9IDAgKFN0b3AvQXV0b2J1ZmZlcikJKi8KKyNkZWZpbmUgTkRTSVpFXzEJCTB4MDEwMAkJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAxCQkJCQkJKi8KKyNkZWZpbmUgTkRTSVpFXzIJCTB4MDIwMAkJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAyCQkJCQkJKi8KKyNkZWZpbmUgTkRTSVpFXzMJCTB4MDMwMAkJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSAzCQkJCQkJKi8KKyNkZWZpbmUgTkRTSVpFXzQJCTB4MDQwMAkJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA0CQkJCQkJKi8KKyNkZWZpbmUgTkRTSVpFXzUJCTB4MDUwMAkJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA1CQkJCQkJKi8KKyNkZWZpbmUgTkRTSVpFXzYJCTB4MDYwMAkJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA2CQkJCQkJKi8KKyNkZWZpbmUgTkRTSVpFXzcJCTB4MDcwMAkJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA3CQkJCQkJKi8KKyNkZWZpbmUgTkRTSVpFXzgJCTB4MDgwMAkJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA4CQkJCQkJKi8KKyNkZWZpbmUgTkRTSVpFXzkJCTB4MDkwMAkJLyogTmV4dCBEZXNjcmlwdG9yIFNpemUgPSA5CQkJCQkJKi8KKyNkZWZpbmUgTkRTSVpFCSAgICAgICAgCTB4MDkwMAkvKiBOZXh0IERlc2NyaXB0b3IgU2l6ZSAqLworI2RlZmluZSBETUFGTE9XCSAgICAgICAgCTB4NzAwMAkvKiBGbG93IENvbnRyb2wgKi8KKyNkZWZpbmUgRE1BRkxPV19TVE9QCQkweDAwMDAJCS8qIFN0b3AgTW9kZQkJCQkJCQkJCSovCisjZGVmaW5lIERNQUZMT1dfQVVUTwkJMHgxMDAwCQkvKiBBdXRvYnVmZmVyIE1vZGUJCQkJCQkJCSovCisjZGVmaW5lIERNQUZMT1dfQVJSQVkJCTB4NDAwMAkJLyogRGVzY3JpcHRvciBBcnJheSBNb2RlCQkJCQkJKi8KKyNkZWZpbmUgRE1BRkxPV19TTUFMTAkJMHg2MDAwCQkvKiBTbWFsbCBNb2RlbCBEZXNjcmlwdG9yIExpc3QgTW9kZQkJCQkqLworI2RlZmluZSBETUFGTE9XX0xBUkdFCQkweDcwMDAJCS8qIExhcmdlIE1vZGVsIERlc2NyaXB0b3IgTGlzdCBNb2RlCQkJCSovCisKKy8qIERNQXhfUEVSSVBIRVJBTF9NQVAsIE1ETUFfeXlfUEVSSVBIRVJBTF9NQVAgTWFza3MJCQkJCQkJCSovCisjZGVmaW5lIENUWVBFCQkJMHgwMDQwCS8qIERNQSBDaGFubmVsIFR5cGUgSW5kaWNhdG9yIChNZW1vcnkvUGVyaXBoZXJhbCopCSovCisjZGVmaW5lIFBNQVAJCQkweEYwMDAJLyogUGVyaXBoZXJhbCBNYXBwZWQgVG8gVGhpcyBDaGFubmVsCQkJCSovCisjZGVmaW5lIFBNQVBfUFBJCQkweDAwMDAJLyogCQlQUEkgUG9ydCBETUEJCQkJCQkJCSovCisjZGVmaW5lCVBNQVBfRU1BQ1JYCQkweDEwMDAJLyogCQlFdGhlcm5ldCBSZWNlaXZlIERNQQkJCQkJCSovCisjZGVmaW5lIFBNQVBfRU1BQ1RYCQkweDIwMDAJLyogCQlFdGhlcm5ldCBUcmFuc21pdCBETUEJCQkJCQkqLworI2RlZmluZSBQTUFQX1NQT1JUMFJYCTB4MzAwMAkvKiAJCVNQT1JUMCBSZWNlaXZlIERNQQkJCQkJCQkqLworI2RlZmluZSBQTUFQX1NQT1JUMFRYCTB4NDAwMAkvKiAJCVNQT1JUMCBUcmFuc21pdCBETUEJCQkJCQkJKi8KKyNkZWZpbmUgUE1BUF9TUE9SVDFSWAkweDUwMDAJLyogCQlTUE9SVDEgUmVjZWl2ZSBETUEJCQkJCQkJKi8KKyNkZWZpbmUgUE1BUF9TUE9SVDFUWAkweDYwMDAJLyogCQlTUE9SVDEgVHJhbnNtaXQgRE1BCQkJCQkJCSovCisjZGVmaW5lIFBNQVBfU1BJCQkweDcwMDAJLyogCQlTUEkgUG9ydCBETUEJCQkJCQkJCSovCisjZGVmaW5lIFBNQVBfVUFSVDBSWAkweDgwMDAJLyogCQlVQVJUMCBQb3J0IFJlY2VpdmUgRE1BCQkJCQkJKi8KKyNkZWZpbmUgUE1BUF9VQVJUMFRYCTB4OTAwMAkvKiAJCVVBUlQwIFBvcnQgVHJhbnNtaXQgRE1BCQkJCQkJKi8KKyNkZWZpbmUJUE1BUF9VQVJUMVJYCTB4QTAwMAkvKiAJCVVBUlQxIFBvcnQgUmVjZWl2ZSBETUEJCQkJCQkqLworI2RlZmluZQlQTUFQX1VBUlQxVFgJMHhCMDAwCS8qIAkJVUFSVDEgUG9ydCBUcmFuc21pdCBETUEJCQkJCQkqLworCisvKiBETUF4X0lSUV9TVEFUVVMsIE1ETUFfeXlfSVJRX1NUQVRVUyBNYXNrcwkJCQkJCSovCisjZGVmaW5lIERNQV9ET05FCQkweDAwMDEJLyogRE1BIENvbXBsZXRpb24gSW50ZXJydXB0IFN0YXR1cwkqLworI2RlZmluZSBETUFfRVJSCQkJMHgwMDAyCS8qIERNQSBFcnJvciBJbnRlcnJ1cHQgU3RhdHVzCQkqLworI2RlZmluZSBERkVUQ0gJCQkweDAwMDQJLyogRE1BIERlc2NyaXB0b3IgRmV0Y2ggSW5kaWNhdG9yCSovCisjZGVmaW5lIERNQV9SVU4JCQkweDAwMDgJLyogRE1BIENoYW5uZWwgUnVubmluZyBJbmRpY2F0b3IJKi8KKworCisvKiAgKioqKioqKioqKioqICBQQVJBTExFTCBQRVJJUEhFUkFMIElOVEVSRkFDRSAoUFBJKSBNQVNLUyAqKioqKioqKioqKioqLworLyogIFBQSV9DT05UUk9MIE1hc2tzCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lIFBPUlRfRU4JCQkweDAwMDEJCS8qIFBQSSBQb3J0IEVuYWJsZQkJCQkJKi8KKyNkZWZpbmUgUE9SVF9ESVIJCTB4MDAwMgkJLyogUFBJIFBvcnQgRGlyZWN0aW9uCQkJCSovCisjZGVmaW5lIFhGUl9UWVBFCQkweDAwMEMJCS8qIFBQSSBUcmFuc2ZlciBUeXBlCQkJCSovCisjZGVmaW5lIFBPUlRfQ0ZHCQkweDAwMzAJCS8qIFBQSSBQb3J0IENvbmZpZ3VyYXRpb24JCQkqLworI2RlZmluZSBGTERfU0VMCQkJMHgwMDQwCQkvKiBQUEkgQWN0aXZlIEZpZWxkIFNlbGVjdAkJCSovCisjZGVmaW5lIFBBQ0tfRU4JCQkweDAwODAJCS8qIFBQSSBQYWNraW5nIE1vZGUJCQkJCSovCisjZGVmaW5lIERNQTMyCQkJMHgwMTAwCQkvKiBQUEkgMzItYml0IERNQSBFbmFibGUJCQkqLworI2RlZmluZSBTS0lQX0VOCQkJMHgwMjAwCQkvKiBQUEkgU2tpcCBFbGVtZW50IEVuYWJsZQkJCSovCisjZGVmaW5lIFNLSVBfRU8JCQkweDA0MDAJCS8qIFBQSSBTa2lwIEV2ZW4vT2RkIEVsZW1lbnRzCQkqLworI2RlZmluZSBETEVOXzgJCQkweDAwMDAJCS8qIERhdGEgTGVuZ3RoID0gOCBCaXRzCQkJCSovCisjZGVmaW5lIERMRU5fMTAJCQkweDA4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTAgQml0cwkJCSovCisjZGVmaW5lIERMRU5fMTEJCQkweDEwMDAJCS8qIERhdGEgTGVuZ3RoID0gMTEgQml0cwkJCSovCisjZGVmaW5lIERMRU5fMTIJCQkweDE4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTIgQml0cwkJCSovCisjZGVmaW5lIERMRU5fMTMJCQkweDIwMDAJCS8qIERhdGEgTGVuZ3RoID0gMTMgQml0cwkJCSovCisjZGVmaW5lIERMRU5fMTQJCQkweDI4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTQgQml0cwkJCSovCisjZGVmaW5lIERMRU5fMTUJCQkweDMwMDAJCS8qIERhdGEgTGVuZ3RoID0gMTUgQml0cwkJCSovCisjZGVmaW5lIERMRU5fMTYJCQkweDM4MDAJCS8qIERhdGEgTGVuZ3RoID0gMTYgQml0cwkJCSovCisjZGVmaW5lIERMRU5HVEgJCQkweDM4MDAJCS8qIFBQSSBEYXRhIExlbmd0aCAgKi8KKyNkZWZpbmUgUE9MQwkJCTB4NDAwMAkJLyogUFBJIENsb2NrIFBvbGFyaXR5CQkJCSovCisjZGVmaW5lIFBPTFMJCQkweDgwMDAJCS8qIFBQSSBGcmFtZSBTeW5jIFBvbGFyaXR5CQkJKi8KKworLyogUFBJX1NUQVRVUyBNYXNrcwkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgRkxECQkJCTB4MDQwMAkJLyogRmllbGQgSW5kaWNhdG9yCQkJCQkqLworI2RlZmluZSBGVF9FUlIJCQkweDA4MDAJCS8qIEZyYW1lIFRyYWNrIEVycm9yCQkJCSovCisjZGVmaW5lIE9WUgkJCQkweDEwMDAJCS8qIEZJRk8gT3ZlcmZsb3cgRXJyb3IJCQkJKi8KKyNkZWZpbmUgVU5EUgkJCTB4MjAwMAkJLyogRklGTyBVbmRlcnJ1biBFcnJvcgkJCQkqLworI2RlZmluZSBFUlJfREVUCQkJMHg0MDAwCQkvKiBFcnJvciBEZXRlY3RlZCBJbmRpY2F0b3IJCQkqLworI2RlZmluZSBFUlJfTkNPUgkJMHg4MDAwCQkvKiBFcnJvciBOb3QgQ29ycmVjdGVkIEluZGljYXRvcgkqLworCisKKy8qICAqKioqKioqKioqKioqKioqKioqKiAgVFdPLVdJUkUgSU5URVJGQUNFIChUV0kpIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRXSV9DTEtESVYgTWFjcm9zIChVc2U6ICpwVFdJX0NMS0RJViA9IENMS0xPVyh4KXxDTEtISSh5KTsgICkJCQkJKi8KKyNkZWZpbmUJQ0xLTE9XKHgpCSgoeCkgJiAweEZGKQkJLyogUGVyaW9kcyBDbG9jayBJcyBIZWxkIExvdwkJCSovCisjZGVmaW5lIENMS0hJKHkpCSgoKHkpJjB4RkYpPDwweDgpCS8qIFBlcmlvZHMgQmVmb3JlIE5ldyBDbG9jayBMb3cJCQkqLworCisvKiBUV0lfUFJFU0NBTEUgTWFza3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZQlQUkVTQ0FMRQkweDAwN0YJCS8qIFNDTEtzIFBlciBJbnRlcm5hbCBUaW1lIFJlZmVyZW5jZSAoMTBNSHopCSovCisjZGVmaW5lCVRXSV9FTkEJCTB4MDA4MAkJLyogVFdJIEVuYWJsZQkJCQkJCQkJCSovCisjZGVmaW5lCVNDQ0IJCTB4MDIwMAkJLyogU0NDQiBDb21wYXRpYmlsaXR5IEVuYWJsZQkJCQkJKi8KKworLyogVFdJX1NMQVZFX0NUUkwgTWFza3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZQlTRU4JCQkweDAwMDEJCS8qIFNsYXZlIEVuYWJsZQkJCQkJCQkJCSovCisjZGVmaW5lCVNBRERfTEVOCTB4MDAwMgkJLyogU2xhdmUgQWRkcmVzcyBMZW5ndGgJCQkJCQkJKi8KKyNkZWZpbmUJU1REVkFMCQkweDAwMDQJCS8qIFNsYXZlIFRyYW5zbWl0IERhdGEgVmFsaWQJCQkJCSovCisjZGVmaW5lCU5BSwkJCTB4MDAwOAkJLyogTkFLL0FDSyogR2VuZXJhdGVkIEF0IENvbmNsdXNpb24gT2YgVHJhbnNmZXIgKi8KKyNkZWZpbmUJR0VOCQkJMHgwMDEwCQkvKiBHZW5lcmFsIENhbGwgQWRycmVzcyBNYXRjaGluZyBFbmFibGVkCQkqLworCisvKiBUV0lfU0xBVkVfU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCVNESVIJCTB4MDAwMQkJLyogU2xhdmUgVHJhbnNmZXIgRGlyZWN0aW9uIChUcmFuc21pdC9SZWNlaXZlKikJKi8KKyNkZWZpbmUgR0NBTEwJCTB4MDAwMgkJLyogR2VuZXJhbCBDYWxsIEluZGljYXRvcgkJCQkJCSovCisKKy8qIFRXSV9NQVNURVJfQ1RSTCBNYXNrcwkJCQkJCQkJCQkJCQkqLworI2RlZmluZQlNRU4JCQkweDAwMDEJCS8qIE1hc3RlciBNb2RlIEVuYWJsZQkJCQkJCSovCisjZGVmaW5lCU1BRERfTEVOCTB4MDAwMgkJLyogTWFzdGVyIEFkZHJlc3MgTGVuZ3RoCQkJCQkqLworI2RlZmluZQlNRElSCQkweDAwMDQJCS8qIE1hc3RlciBUcmFuc21pdCBEaXJlY3Rpb24gKFJYL1RYKikJCSovCisjZGVmaW5lCUZBU1QJCTB4MDAwOAkJLyogVXNlIEZhc3QgTW9kZSBUaW1pbmcgU3BlY3MJCQkJKi8KKyNkZWZpbmUJU1RPUAkJMHgwMDEwCQkvKiBJc3N1ZSBTdG9wIENvbmRpdGlvbgkJCQkJCSovCisjZGVmaW5lCVJTVEFSVAkJMHgwMDIwCQkvKiBSZXBlYXQgU3RhcnQgb3IgU3RvcCogQXQgRW5kIE9mIFRyYW5zZmVyCSovCisjZGVmaW5lCURDTlQJCTB4M0ZDMAkJLyogRGF0YSBCeXRlcyBUbyBUcmFuc2ZlcgkJCQkJKi8KKyNkZWZpbmUJU0RBT1ZSCQkweDQwMDAJCS8qIFNlcmlhbCBEYXRhIE92ZXJyaWRlCQkJCQkJKi8KKyNkZWZpbmUJU0NMT1ZSCQkweDgwMDAJCS8qIFNlcmlhbCBDbG9jayBPdmVycmlkZQkJCQkJKi8KKworLyogVFdJX01BU1RFUl9TVEFUIE1hc2tzCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZQlNUFJPRwkJMHgwMDAxCQkvKiBNYXN0ZXIgVHJhbnNmZXIgSW4gUHJvZ3Jlc3MJCQkJCSovCisjZGVmaW5lCUxPU1RBUkIJCTB4MDAwMgkJLyogTG9zdCBBcmJpdHJhdGlvbiBJbmRpY2F0b3IgKFhmZXIgQWJvcnRlZCkJKi8KKyNkZWZpbmUJQU5BSwkJMHgwMDA0CQkvKiBBZGRyZXNzIE5vdCBBY2tub3dsZWRnZWQJCQkJCQkqLworI2RlZmluZQlETkFLCQkweDAwMDgJCS8qIERhdGEgTm90IEFja25vd2xlZGdlZAkJCQkJCSovCisjZGVmaW5lCUJVRlJERVJSCTB4MDAxMAkJLyogQnVmZmVyIFJlYWQgRXJyb3IJCQkJCQkJKi8KKyNkZWZpbmUJQlVGV1JFUlIJMHgwMDIwCQkvKiBCdWZmZXIgV3JpdGUgRXJyb3IJCQkJCQkJKi8KKyNkZWZpbmUJU0RBU0VOCQkweDAwNDAJCS8qIFNlcmlhbCBEYXRhIFNlbnNlCQkJCQkJCSovCisjZGVmaW5lCVNDTFNFTgkJMHgwMDgwCQkvKiBTZXJpYWwgQ2xvY2sgU2Vuc2UJCQkJCQkJKi8KKyNkZWZpbmUJQlVTQlVTWQkJMHgwMTAwCQkvKiBCdXMgQnVzeSBJbmRpY2F0b3IJCQkJCQkJKi8KKworLyogVFdJX0lOVF9TUkMgYW5kIFRXSV9JTlRfRU5BQkxFIE1hc2tzCQkJCQkJKi8KKyNkZWZpbmUJU0lOSVQJCTB4MDAwMQkJLyogU2xhdmUgVHJhbnNmZXIgSW5pdGlhdGVkCSovCisjZGVmaW5lCVNDT01QCQkweDAwMDIJCS8qIFNsYXZlIFRyYW5zZmVyIENvbXBsZXRlCSovCisjZGVmaW5lCVNFUlIJCTB4MDAwNAkJLyogU2xhdmUgVHJhbnNmZXIgRXJyb3IJCSovCisjZGVmaW5lCVNPVkYJCTB4MDAwOAkJLyogU2xhdmUgT3ZlcmZsb3cJCQkqLworI2RlZmluZQlNQ09NUAkJMHgwMDEwCQkvKiBNYXN0ZXIgVHJhbnNmZXIgQ29tcGxldGUJKi8KKyNkZWZpbmUJTUVSUgkJMHgwMDIwCQkvKiBNYXN0ZXIgVHJhbnNmZXIgRXJyb3IJKi8KKyNkZWZpbmUJWE1UU0VSVgkJMHgwMDQwCQkvKiBUcmFuc21pdCBGSUZPIFNlcnZpY2UJKi8KKyNkZWZpbmUJUkNWU0VSVgkJMHgwMDgwCQkvKiBSZWNlaXZlIEZJRk8gU2VydmljZQkJKi8KKworLyogVFdJX0ZJRk9fQ1RSTCBNYXNrcwkJCQkJCQkJCQkJCSovCisjZGVmaW5lCVhNVEZMVVNICTB4MDAwMQkJLyogVHJhbnNtaXQgQnVmZmVyIEZsdXNoCQkJKi8KKyNkZWZpbmUJUkNWRkxVU0gJMHgwMDAyCQkvKiBSZWNlaXZlIEJ1ZmZlciBGbHVzaAkJCQkqLworI2RlZmluZQlYTVRJTlRMRU4JMHgwMDA0CQkvKiBUcmFuc21pdCBCdWZmZXIgSW50ZXJydXB0IExlbmd0aAkqLworI2RlZmluZQlSQ1ZJTlRMRU4JMHgwMDA4CQkvKiBSZWNlaXZlIEJ1ZmZlciBJbnRlcnJ1cHQgTGVuZ3RoCSovCisKKy8qIFRXSV9GSUZPX1NUQVQgTWFza3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZQlYTVRTVEFUCQkweDAwMDMJCS8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzCQkJCQkJCSovCisjZGVmaW5lCVhNVF9FTVBUWQkweDAwMDAJCS8qIAkJVHJhbnNtaXQgRklGTyBFbXB0eQkJCQkJCSovCisjZGVmaW5lCVhNVF9IQUxGCTB4MDAwMQkJLyogCQlUcmFuc21pdCBGSUZPIEhhcyAxIEJ5dGUgVG8gV3JpdGUJCSovCisjZGVmaW5lCVhNVF9GVUxMCTB4MDAwMwkJLyogCQlUcmFuc21pdCBGSUZPIEZ1bGwgKDIgQnl0ZXMgVG8gV3JpdGUpCSovCisKKyNkZWZpbmUJUkNWU1RBVAkJMHgwMDBDCQkvKiBSZWNlaXZlIEZJRk8gU3RhdHVzCQkJCQkJCSovCisjZGVmaW5lCVJDVl9FTVBUWQkweDAwMDAJCS8qIAkJUmVjZWl2ZSBGSUZPIEVtcHR5CQkJCQkJKi8KKyNkZWZpbmUJUkNWX0hBTEYJMHgwMDA0CQkvKiAJCVJlY2VpdmUgRklGTyBIYXMgMSBCeXRlIFRvIFJlYWQJCQkqLworI2RlZmluZQlSQ1ZfRlVMTAkweDAwMEMJCS8qIAkJUmVjZWl2ZSBGSUZPIEZ1bGwgKDIgQnl0ZXMgVG8gUmVhZCkJCSovCisKKworLyogT21pdCBDQU4gbWFza3MgZnJvbSBkZWZCRjUzNC5oICovCisKKy8qICAqKioqKioqKioqKioqKioqKioqICBQSU4gQ09OVFJPTCBSRUdJU1RFUiBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUE9SVF9NVVggTWFza3MJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZQlQSlNFCQkJMHgwMDAxCQkJLyogUG9ydCBKIFNQSS9TUE9SVCBFbmFibGUJCQkqLworI2RlZmluZQlQSlNFX1NQT1JUCQkweDAwMDAJCQkvKiAJCUVuYWJsZSBURlMwL0RUMFBSSQkJCSovCisjZGVmaW5lCVBKU0VfU1BJCQkweDAwMDEJCQkvKiAJCUVuYWJsZSBTUElfU1NFTDM6MgkJCSovCisKKyNkZWZpbmUJUEpDRSh4KQkJCSgoKHgpJjB4Myk8PDEpCS8qIFBvcnQgSiBDQU4vU1BJL1NQT1JUIEVuYWJsZQkJKi8KKyNkZWZpbmUJUEpDRV9TUE9SVAkJMHgwMDAwCQkJLyogCQlFbmFibGUgRFIwU0VDL0RUMFNFQwkJKi8KKyNkZWZpbmUJUEpDRV9DQU4JCTB4MDAwMgkJCS8qIAkJRW5hYmxlIENBTiBSWC9UWAkJCSovCisjZGVmaW5lCVBKQ0VfU1BJCQkweDAwMDQJCQkvKiAJCUVuYWJsZSBTUElfU1NFTDcJCQkqLworCisjZGVmaW5lCVBGREUJCQkweDAwMDgJCQkvKiBQb3J0IEYgRE1BIFJlcXVlc3QgRW5hYmxlCQkqLworI2RlZmluZQlQRkRFX1VBUlQJCTB4MDAwMAkJCS8qIAkJRW5hYmxlIFVBUlQwIFJYL1RYCQkJKi8KKyNkZWZpbmUJUEZERV9ETUEJCTB4MDAwOAkJCS8qIAkJRW5hYmxlIERNQVIxOjAJCQkJKi8KKworI2RlZmluZQlQRlRFCQkJMHgwMDEwCQkJLyogUG9ydCBGIFRpbWVyIEVuYWJsZQkJCQkqLworI2RlZmluZQlQRlRFX1VBUlQJCTB4MDAwMAkJCS8qCQlFbmFibGUgVUFSVDEgUlgvVFgJCQkqLworI2RlZmluZQlQRlRFX1RJTUVSCQkweDAwMTAJCQkvKiAJCUVuYWJsZSBUTVI3OjYJCQkJKi8KKworI2RlZmluZQlQRlM2RQkJCTB4MDAyMAkJCS8qIFBvcnQgRiBTUEkgU1NFTCA2IEVuYWJsZQkJCSovCisjZGVmaW5lCVBGUzZFX1RJTUVSCQkweDAwMDAJCQkvKgkJRW5hYmxlIFRNUjUJCQkJCSovCisjZGVmaW5lCVBGUzZFX1NQSQkJMHgwMDIwCQkJLyogCQlFbmFibGUgU1BJX1NTRUw2CQkJKi8KKworI2RlZmluZQlQRlM1RQkJCTB4MDA0MAkJCS8qIFBvcnQgRiBTUEkgU1NFTCA1IEVuYWJsZQkJCSovCisjZGVmaW5lCVBGUzVFX1RJTUVSCQkweDAwMDAJCQkvKgkJRW5hYmxlIFRNUjQJCQkJCSovCisjZGVmaW5lCVBGUzVFX1NQSQkJMHgwMDQwCQkJLyogCQlFbmFibGUgU1BJX1NTRUw1CQkJKi8KKworI2RlZmluZQlQRlM0RQkJCTB4MDA4MAkJCS8qIFBvcnQgRiBTUEkgU1NFTCA0IEVuYWJsZQkJCSovCisjZGVmaW5lCVBGUzRFX1RJTUVSCQkweDAwMDAJCQkvKgkJRW5hYmxlIFRNUjMJCQkJCSovCisjZGVmaW5lCVBGUzRFX1NQSQkJMHgwMDgwCQkJLyogCQlFbmFibGUgU1BJX1NTRUw0CQkJKi8KKworI2RlZmluZQlQRkZFCQkJMHgwMTAwCQkJLyogUG9ydCBGIFBQSSBGcmFtZSBTeW5jIEVuYWJsZQkJKi8KKyNkZWZpbmUJUEZGRV9USU1FUgkJMHgwMDAwCQkJLyogCQlFbmFibGUgVE1SMgkJCQkJKi8KKyNkZWZpbmUJUEZGRV9QUEkJCTB4MDEwMAkJCS8qIAkJRW5hYmxlIFBQSSBGUzMJCQkJKi8KKworI2RlZmluZQlQR1NFCQkJMHgwMjAwCQkJLyogUG9ydCBHIFNQT1JUMSBTZWNvbmRhcnkgRW5hYmxlCSovCisjZGVmaW5lCVBHU0VfUFBJCQkweDAwMDAJCQkvKiAJCUVuYWJsZSBQUEkgRDk6OAkJCQkqLworI2RlZmluZQlQR1NFX1NQT1JUCQkweDAyMDAJCQkvKiAJCUVuYWJsZSBEUjFTRUMvRFQxU0VDCQkqLworCisjZGVmaW5lCVBHUkUJCQkweDA0MDAJCQkvKiBQb3J0IEcgU1BPUlQxIFJlY2VpdmUgRW5hYmxlCQkqLworI2RlZmluZQlQR1JFX1BQSQkJMHgwMDAwCQkJLyogCQlFbmFibGUgUFBJIEQxMjoxMAkJCSovCisjZGVmaW5lCVBHUkVfU1BPUlQJCTB4MDQwMAkJCS8qIAkJRW5hYmxlIERSMVBSSS9SRlMxL1JTQ0xLMQkqLworCisjZGVmaW5lCVBHVEUJCQkweDA4MDAJCQkvKiBQb3J0IEcgU1BPUlQxIFRyYW5zbWl0IEVuYWJsZQkqLworI2RlZmluZQlQR1RFX1BQSQkJMHgwMDAwCQkJLyogCQlFbmFibGUgUFBJIEQxNToxMwkJCSovCisjZGVmaW5lCVBHVEVfU1BPUlQJCTB4MDgwMAkJCS8qIAkJRW5hYmxlIERUMVBSSS9URlMxL1RTQ0xLMQkqLworCisKKy8qICAqKioqKioqKioqKioqKioqKiogIEhBTkRTSEFLRSBETUEgKEhETUEpIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKiovCisvKiBIRE1BeF9DVEwgTWFza3MJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCUhNRE1BRU4JCTB4MDAwMQkvKiBFbmFibGUgSGFuZHNoYWtlIERNQSAwLzEJCQkJCSovCisjZGVmaW5lCVJFUAkJCTB4MDAwMgkvKiBIRE1BIFJlcXVlc3QgUG9sYXJpdHkJCQkJCSovCisjZGVmaW5lCVVURQkJCTB4MDAwNAkvKiBVcmdlbmN5IFRocmVzaG9sZCBFbmFibGUJCQkJCSovCisjZGVmaW5lCU9JRQkJCTB4MDAxMAkvKiBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlCQkJCSovCisjZGVmaW5lCUJESUUJCTB4MDAyMAkvKiBCbG9jayBEb25lIEludGVycnVwdCBFbmFibGUJCQkJKi8KKyNkZWZpbmUJTUJESQkJMHgwMDQwCS8qIE1hc2sgQmxvY2sgRG9uZSBJUlEgSWYgUGVuZGluZyBFQ05UCQkqLworI2RlZmluZQlEUlEJCQkweDAzMDAJLyogSERNQSBSZXF1ZXN0IFR5cGUJCQkJCQkqLworI2RlZmluZQlEUlFfTk9ORQkweDAwMDAJLyogCQlObyBSZXF1ZXN0CQkJCQkJCSovCisjZGVmaW5lCURSUV9TSU5HTEUJMHgwMTAwCS8qIAkJQ2hhbm5lbHMgUmVxdWVzdCBTaW5nbGUJCQkJKi8KKyNkZWZpbmUJRFJRX01VTFRJCTB4MDIwMAkvKiAJCUNoYW5uZWxzIFJlcXVlc3QgTXVsdGkgKERlZmF1bHQpCSovCisjZGVmaW5lCURSUV9VUkdFTlQJMHgwMzAwCS8qIAkJQ2hhbm5lbHMgUmVxdWVzdCBNdWx0aSBVcmdlbnQJCSovCisjZGVmaW5lCVJCQwkJCTB4MTAwMAkvKiBSZWxvYWQgQkNOVCBXaXRoIElCQ05UCQkJCQkqLworI2RlZmluZQlQUwkJCTB4MjAwMAkvKiBIRE1BIFBpbiBTdGF0dXMJCQkJCQkJKi8KKyNkZWZpbmUJT0kJCQkweDQwMDAJLyogT3ZlcmZsb3cgSW50ZXJydXB0IEdlbmVyYXRlZAkJCQkqLworI2RlZmluZQlCREkJCQkweDgwMDAJLyogQmxvY2sgRG9uZSBJbnRlcnJ1cHQgR2VuZXJhdGVkCQkJKi8KKworLyogZW50cnkgYWRkcmVzc2VzIG9mIHRoZSB1c2VyLWNhbGxhYmxlIEJvb3QgUk9NIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIF9CT09UUk9NX1JFU0VUIDB4RUYwMDAwMDAgCisjZGVmaW5lIF9CT09UUk9NX0ZJTkFMX0lOSVQgMHhFRjAwMDAwMiAKKyNkZWZpbmUgX0JPT1RST01fRE9fTUVNT1JZX0RNQSAweEVGMDAwMDA2CisjZGVmaW5lIF9CT09UUk9NX0JPT1RfRFhFX0ZMQVNIIDB4RUYwMDAwMDggCisjZGVmaW5lIF9CT09UUk9NX0JPT1RfRFhFX1NQSSAweEVGMDAwMDBBIAorI2RlZmluZSBfQk9PVFJPTV9CT09UX0RYRV9UV0kgMHhFRjAwMDAwQyAKKyNkZWZpbmUgX0JPT1RST01fR0VUX0RYRV9BRERSRVNTX0ZMQVNIIDB4RUYwMDAwMTAKKyNkZWZpbmUgX0JPT1RST01fR0VUX0RYRV9BRERSRVNTX1NQSSAweEVGMDAwMDEyCisjZGVmaW5lIF9CT09UUk9NX0dFVF9EWEVfQUREUkVTU19UV0kgMHhFRjAwMDAxNAorCisvKiBBbHRlcm5hdGUgRGVwcmVjYXRlZCBNYWNyb3MgUHJvdmlkZWQgRm9yIEJhY2t3YXJkcyBDb2RlIENvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUJUEdERV9VQVJUICAgUEZERV9VQVJUCisjZGVmaW5lCVBHREVfRE1BICAgIFBGREVfRE1BCisjZGVmaW5lCUNLRUxPVwkJU0NLRUxPVworCisvKiA9PT09IGVuZCBmcm9tIGRlZkJGNTM0LmggPT09PSAqLworCisvKiBIT1NUIFBvcnQgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBIT1NUX0NPTlRST0wgIDB4ZmZjMDM0MDAgICAvKiBIT1NUIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSE9TVF9TVEFUVVMgIDB4ZmZjMDM0MDQgICAvKiBIT1NUIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfVElNRU9VVCAgMHhmZmMwMzQwOCAgIC8qIEhPU1QgQWNrbm93bGVkZ2UgTW9kZSBUaW1lb3V0IFJlZ2lzdGVyICovCisKKy8qIENvdW50ZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENOVF9DT05GSUcgIDB4ZmZjMDM1MDAgICAvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ05UX0lNQVNLICAweGZmYzAzNTA0ICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENOVF9TVEFUVVMgIDB4ZmZjMDM1MDggICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ05UX0NPTU1BTkQgIDB4ZmZjMDM1MGMgICAvKiBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ05UX0RFQk9VTkNFICAweGZmYzAzNTEwICAgLyogRGVib3VuY2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ05UX0NPVU5URVIgIDB4ZmZjMDM1MTQgICAvKiBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBDTlRfTUFYICAweGZmYzAzNTE4ICAgLyogTWF4aW1hbCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgQ05UX01JTiAgMHhmZmMwMzUxYyAgIC8qIE1pbmltYWwgQ291bnQgUmVnaXN0ZXIgKi8KKworLyogT1RQL0ZVU0UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgT1RQX0NPTlRST0wgIDB4ZmZjMDM2MDAgICAvKiBPVFAvRnVzZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBPVFBfQkVOICAweGZmYzAzNjA0ICAgLyogT1RQL0Z1c2UgQnl0ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE9UUF9TVEFUVVMgIDB4ZmZjMDM2MDggICAvKiBPVFAvRnVzZSBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE9UUF9USU1JTkcgIDB4ZmZjMDM2MGMgICAvKiBPVFAvRnVzZSBBY2Nlc3MgVGltaW5nICovCisKKy8qIFNlY3VyaXR5IFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRUNVUkVfU1lTU1dUICAweGZmYzAzNjIwICAgLyogU2VjdXJlIFN5c3RlbSBTd2l0Y2hlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkVfQ09OVFJPTCAgMHhmZmMwMzYyNCAgIC8qIFNlY3VyZSBDb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRUNVUkVfU1RBVFVTICAweGZmYzAzNjI4ICAgLyogU2VjdXJlIFN0YXR1cyAqLworCisvKiBPVFAgUmVhZC9Xcml0ZSBEYXRhIEJ1ZmZlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMCAgMHhmZmMwMzY4MCAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMSAgMHhmZmMwMzY4NCAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMiAgMHhmZmMwMzY4OCAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMyAgMHhmZmMwMzY4YyAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworCisvKiBORkMgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19DVEwgIDB4ZmZjMDM3MDAgICAvKiBOQU5EIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX1NUQVQgIDB4ZmZjMDM3MDQgICAvKiBOQU5EIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBORkNfSVJRU1RBVCAgMHhmZmMwMzcwOCAgIC8qIE5BTkQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBORkNfSVJRTUFTSyAgMHhmZmMwMzcwYyAgIC8qIE5BTkQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0VDQzAgIDB4ZmZjMDM3MTAgICAvKiBOQU5EIEVDQyBSZWdpc3RlciAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19FQ0MxICAweGZmYzAzNzE0ICAgLyogTkFORCBFQ0MgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBORkNfRUNDMiAgMHhmZmMwMzcxOCAgIC8qIE5BTkQgRUNDIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0VDQzMgIDB4ZmZjMDM3MWMgICAvKiBOQU5EIEVDQyBSZWdpc3RlciAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0NPVU5UICAweGZmYzAzNzIwICAgLyogTkFORCBFQ0MgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19SU1QgIDB4ZmZjMDM3MjQgICAvKiBOQU5EIEVDQyBSZXNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19QR0NUTCAgMHhmZmMwMzcyOCAgIC8qIE5BTkQgUGFnZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19SRUFEICAweGZmYzAzNzJjICAgLyogTkFORCBSZWFkIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0FERFIgIDB4ZmZjMDM3NDAgICAvKiBOQU5EIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19DTUQgIDB4ZmZjMDM3NDQgICAvKiBOQU5EIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTkZDX0RBVEFfV1IgIDB4ZmZjMDM3NDggICAvKiBOQU5EIERhdGEgV3JpdGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTkZDX0RBVEFfUkQgIDB4ZmZjMDM3NGMgICAvKiBOQU5EIERhdGEgUmVhZCBSZWdpc3RlciAqLworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAgICAgU0lOR0xFIEJJVCBNQUNSTyBQQUlSUyAoYml0IG1hc2sgYW5kIG5lZ2F0ZWQgb25lKSAgICAgICovCisvKiAgICAgYW5kIE1VTFRJIEJJVCBSRUFEIE1BQ1JPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qIEJpdCBtYXNrcyBmb3IgSE9TVF9DT05UUk9MICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE9TVF9FTiAgMHgxICAgICAgICAvKiBIb3N0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5IT1NUX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9FTkQgIDB4MiAgICAgICAgLyogSG9zdCBFbmRpYW5lc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5IT1NUX0VORCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgREFUQV9TSVpFICAweDQgICAgICAgIC8qIERhdGEgU2l6ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuREFUQV9TSVpFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE9TVF9SU1QgIDB4OCAgICAgICAgLyogSG9zdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkhPU1RfUlNUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSFJEWV9PVlIgIDB4MjAgICAgICAgLyogSG9zdCBSZWFkeSBPdmVycmlkZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkhSRFlfT1ZSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSU5UX01PREUgIDB4NDAgICAgICAgLyogSW50ZXJydXB0IE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5JTlRfTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEJUX0VOICAweDgwICAgICAgIC8qIEJ1cyBUaW1lb3V0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkJUX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBFSFcgIDB4MTAwICAgICAgLyogRW5hYmxlIEhvc3QgV3JpdGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkVIVyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRUhSICAweDIwMCAgICAgIC8qIEVuYWJsZSBIb3N0IFJlYWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkVIUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQkRSICAweDQwMCAgICAgIC8qIEJ1cnN0IERNQSBSZXF1ZXN0cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQkRSICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgSE9TVF9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJFQURZICAweDEgICAgICAgIC8qIERNQSBSZWFkeSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJFQURZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRklGT0ZVTEwgIDB4MiAgICAgICAgLyogRklGTyBGdWxsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRklGT0ZVTEwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEZJRk9FTVBUWSAgMHg0ICAgICAgICAvKiBGSUZPIEVtcHR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5GSUZPRU1QVFkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDT01QTEVURSAgMHg4ICAgICAgICAvKiBETUEgQ29tcGxldGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5DT01QTEVURSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIU0hLICAweDEwICAgICAgIC8qIEhvc3QgSGFuZHNoYWtlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkhTSEsgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRU9VVCAgMHgyMCAgICAgICAvKiBIb3N0IFRpbWVvdXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuVElNRU9VVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBISVJRICAweDQwICAgICAgIC8qIEhvc3QgSW50ZXJydXB0IFJlcXVlc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuSElSUSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBBTExPV19DTkZHICAweDgwICAgICAgIC8qIEFsbG93IE5ldyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkFMTE9XX0NORkcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BX0RJUiAgMHgxMDAgICAgICAvKiBETUEgRGlyZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRNQV9ESVIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEJURSAgMHgyMDAgICAgICAvKiBCdXMgVGltZW91dCBFbmFibGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5CVEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBIT1NUUkRfRE9ORSAgMHg4MDAwICAgICAvKiBIb3N0IFJlYWQgQ29tcGxldGlvbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5IT1NUUkRfRE9ORSAgMHgwCisKKy8qIEJpdCBtYXNrcyBmb3IgSE9TVF9USU1FT1VUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgQ09VTlRfVElNRU9VVCAgMHg3ZmYgICAgICAvKiBIb3N0IFRpbWVvdXQgY291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBDTlRfQ09ORklHICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ05URSAgMHgxICAgICAgICAvKiBDb3VudGVyIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5DTlRFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERFQkUgIDB4MiAgICAgICAgLyogRGVib3VuY2UgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkRFQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENER0lOViAgMHgxMCAgICAgICAvKiBDREcgUGluIFBvbGFyaXR5IEludmVydCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ0RHSU5WICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDVURJTlYgIDB4MjAgICAgICAgLyogQ1VEIFBpbiBQb2xhcml0eSBJbnZlcnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNVRElOViAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ1pNSU5WICAweDQwICAgICAgIC8qIENaTSBQaW4gUG9sYXJpdHkgSW52ZXJ0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DWk1JTlYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ05UTU9ERSAgMHg3MDAgICAgICAvKiBDb3VudGVyIE9wZXJhdGluZyBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFpNWkMgIDB4ODAwICAgICAgLyogQ1pNIFplcm9lcyBDb3VudGVyIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5aTVpDICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEJORE1PREUgIDB4MzAwMCAgICAgLyogQm91bmRhcnkgcmVnaXN0ZXIgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSU5QRElTICAweDgwMDAgICAgIC8qIENVRyBhbmQgQ0RHIElucHV0IERpc2FibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbklOUERJUyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENOVF9JTUFTSyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElDSUUgIDB4MSAgICAgICAgLyogSWxsZWdhbCBHcmF5L0JpbmFyeSBDb2RlIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuSUNJRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVQ0lFICAweDIgICAgICAgIC8qIFVwIGNvdW50IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVUNJRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBEQ0lFICAweDQgICAgICAgIC8qIERvd24gY291bnQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5EQ0lFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNSU5DSUUgIDB4OCAgICAgICAgLyogTWluIENvdW50IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1JTkNJRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUFYQ0lFICAweDEwICAgICAgIC8qIE1heCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQVhDSUUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ09WMzFJRSAgMHgyMCAgICAgICAvKiBCaXQgMzEgT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DT1YzMUlFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENPVjE1SUUgIDB4NDAgICAgICAgLyogQml0IDE1IE92ZXJmbG93IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ09WMTVJRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDWkVST0lFICAweDgwICAgICAgIC8qIENvdW50IHRvIFplcm8gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DWkVST0lFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ1pNSUUgIDB4MTAwICAgICAgLyogQ1pNIFBpbiBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ1pNSUUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTUVJRSAgMHgyMDAgICAgICAvKiBDWk0gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ1pNRUlFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDWk1aSUUgIDB4NDAwICAgICAgLyogQ1pNIFplcm9lcyBDb3VudGVyIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNaTVpJRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENOVF9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBJQ0lJICAweDEgICAgICAgIC8qIElsbGVnYWwgR3JheS9CaW5hcnkgQ29kZSBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5JQ0lJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVDSUkgIDB4MiAgICAgICAgLyogVXAgY291bnQgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVUNJSSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBEQ0lJICAweDQgICAgICAgIC8qIERvd24gY291bnQgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuRENJSSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUlOQ0lJICAweDggICAgICAgIC8qIE1pbiBDb3VudCBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUlOQ0lJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQVhDSUkgIDB4MTAgICAgICAgLyogTWF4IENvdW50IEludGVycnVwdCBJZGVudGlmaWVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQVhDSUkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ09WMzFJSSAgMHgyMCAgICAgICAvKiBCaXQgMzEgT3ZlcmZsb3cgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ09WMzFJSSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDT1YxNUlJICAweDQwICAgICAgIC8qIEJpdCAxNSBPdmVyZmxvdyBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DT1YxNUlJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENaRVJPSUkgIDB4ODAgICAgICAgLyogQ291bnQgdG8gWmVybyBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DWkVST0lJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ1pNSUkgIDB4MTAwICAgICAgLyogQ1pNIFBpbiBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNaTUlJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDWk1FSUkgIDB4MjAwICAgICAgLyogQ1pNIEVycm9yIEludGVycnVwdCBJZGVudGlmaWVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DWk1FSUkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTVpJSSAgMHg0MDAgICAgICAvKiBDWk0gWmVyb2VzIENvdW50ZXIgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNaTVpJSSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENOVF9DT01NQU5EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFcxTENOVCAgMHhmICAgICAgICAvKiBMb2FkIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFcxTE1JTiAgMHhmMCAgICAgICAvKiBMb2FkIE1pbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVzFMTUFYICAweGYwMCAgICAgIC8qIExvYWQgTWF4IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVzFaTU9OQ0UgIDB4MTAwMCAgICAgLyogRW5hYmxlIENaTSBDbGVhciBDb3VudGVyIE9uY2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5XMVpNT05DRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENOVF9ERUJPVU5DRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBEUFJFU0NBTEUgIDB4ZiAgICAgICAgLyogTG9hZCBDb3VudGVyIFJlZ2lzdGVyICovCisKKy8qIEJpdCBtYXNrcyBmb3IgT1RQX0NPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBGVVNFX0ZBRERSICAweDFmZiAgICAgIC8qIE9UUC9GdXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRklFTiAgMHg4MDAgICAgICAvKiBPVFAvRnVzZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkZJRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBGVEVTVERFQyAgMHgxMDAwICAgICAvKiBPVFAvRnVzZSBUZXN0IERlY29kZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5GVEVTVERFQyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBGV1JURVNUICAweDIwMDAgICAgIC8qIE9UUC9GdXNlIFdyaXRlIFRlc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRldSVEVTVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEZSREVOICAweDQwMDAgICAgIC8qIE9UUC9GdXNlIFJlYWQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRlJERU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBGV1JFTiAgMHg4MDAwICAgICAvKiBPVFAvRnVzZSBXcml0ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5GV1JFTiAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE9UUF9CRU4gKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGQkVOICAweGZmZmYgICAgIC8qIE9UUC9GdXNlIEJ5dGUgRW5hYmxlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgT1RQX1NUQVRVUyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRkNPTVAgIDB4MSAgICAgICAgLyogT1RQL0Z1c2UgQWNjZXNzIENvbXBsZXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRkNPTVAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZFUlJPUiAgMHgyICAgICAgICAvKiBPVFAvRnVzZSBBY2Nlc3MgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkZFUlJPUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIE1NUkdMT0FEICAweDEwICAgICAgIC8qIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIgR2Fza2V0IExvYWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5NTVJHTE9BRCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIE1NUkdMT0NLICAweDIwICAgICAgIC8qIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIgR2Fza2V0IExvY2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5NTVJHTE9DSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRlBHTUVOICAweDQwICAgICAgIC8qIE9UUC9GdXNlIFByb2dyYW0gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5GUEdNRU4gIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBPVFBfVElNSU5HICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNFQ0RJViAgMHhmZiAgICAgICAvKiBNaWNybyBTZWNvbmQgRGl2aWRlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBSRUFEQUNDICAweDdmMDAgICAgIC8qIFJlYWQgQWNjZXNzIFRpbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ1BVTVBSTCAgMHgzODAwMCAgICAvKiBDaGFyZ2UgUHVtcCBSZWxlYXNlIFRpbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ1BVTVBTVSAgMHhjMDAwMCAgICAvKiBDaGFyZ2UgUHVtcCBTZXR1cCBUaW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENQVU1QSEQgIDB4ZjAwMDAwICAgLyogQ2hhcmdlIFB1bXAgSG9sZCBUaW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFBHTVRJTUUgIDB4ZmYwMDAwMDAgLyogUHJvZ3JhbSBUaW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0VDVVJFX1NZU1NXVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVNVURBQkwgIDB4MSAgICAgICAgLyogRW11bGF0aW9uIERpc2FibGUuICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkVNVURBQkwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUlNUREFCTCAgMHgyICAgICAgICAvKiBSZXNldCBEaXNhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblJTVERBQkwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTDFJREFCTCAgMHgxYyAgICAgICAvKiBMMSBJbnN0cnVjdGlvbiBNZW1vcnkgRGlzYWJsZS4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBMMURBREFCTCAgMHhlMCAgICAgICAvKiBMMSBEYXRhIEJhbmsgQSBNZW1vcnkgRGlzYWJsZS4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBMMURCREFCTCAgMHg3MDAgICAgICAvKiBMMSBEYXRhIEJhbmsgQiBNZW1vcnkgRGlzYWJsZS4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BME9WUiAgMHg4MDAgICAgICAvKiBETUEwIE1lbW9yeSBBY2Nlc3MgT3ZlcnJpZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRE1BME9WUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUExT1ZSICAweDEwMDAgICAgIC8qIERNQTEgTWVtb3J5IEFjY2VzcyBPdmVycmlkZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ETUExT1ZSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFTVVPVlIgIDB4NDAwMCAgICAgLyogRW11bGF0aW9uIE92ZXJyaWRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FTVVPVlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE9UUFNFTiAgMHg4MDAwICAgICAvKiBPVFAgU2VjcmV0cyBFbmFibGUuICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5PVFBTRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEwyREFCTCAgMHg3MDAwMCAgICAvKiBMMiBNZW1vcnkgRGlzYWJsZS4gKi8KKworLyogQml0IG1hc2tzIGZvciBTRUNVUkVfQ09OVFJPTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ1VSRTAgIDB4MSAgICAgICAgLyogU0VDVVJFIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuU0VDVVJFMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkUxICAweDIgICAgICAgIC8qIFNFQ1VSRSAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblNFQ1VSRTEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDVVJFMiAgMHg0ICAgICAgICAvKiBTRUNVUkUgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TRUNVUkUyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ1VSRTMgIDB4OCAgICAgICAgLyogU0VDVVJFIDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuU0VDVVJFMyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNFQ1VSRV9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNNT0RFICAweDMgICAgICAgIC8qIFNlY3VyZWQgTW9kZSBDb250cm9sIFN0YXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBOTUkgIDB4NCAgICAgICAgLyogTm9uIE1hc2thYmxlIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuTk1JICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEFGVkFMSUQgIDB4OCAgICAgICAgLyogQXV0aGVudGljYXRpb24gRmlybXdhcmUgVmFsaWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQUZWQUxJRCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQUZFWElUICAweDEwICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIEZpcm13YXJlIEV4aXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkFGRVhJVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNTVEFUICAweGUwICAgICAgIC8qIFNlY3VyZSBTdGF0dXMgKi8KKworLyogQml0IG1hc2tzIGZvciBORkNfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFdSX0RMWSAgMHhmICAgICAgICAvKiBXcml0ZSBTdHJvYmUgRGVsYXkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFJEX0RMWSAgMHhmMCAgICAgICAvKiBSZWFkIFN0cm9iZSBEZWxheSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTldJRFRIICAweDEwMCAgICAgIC8qIE5BTkQgRGF0YSBXaWR0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTldJRFRIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFBHX1NJWkUgIDB4MjAwICAgICAgLyogUGFnZSBTaXplICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblBHX1NJWkUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBORkNfU1RBVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTkJVU1kgIDB4MSAgICAgICAgLyogTm90IEJ1c3kgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5OQlVTWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBXQl9GVUxMICAweDIgICAgICAgIC8qIFdyaXRlIEJ1ZmZlciBGdWxsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbldCX0ZVTEwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgUEdfV1JfU1RBVCAgMHg0ICAgICAgICAvKiBQYWdlIFdyaXRlIFBlbmRpbmcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuUEdfV1JfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBQR19SRF9TVEFUICAweDggICAgICAgIC8qIFBhZ2UgUmVhZCBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgblBHX1JEX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBXQl9FTVBUWSAgMHgxMCAgICAgICAvKiBXcml0ZSBCdWZmZXIgRW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5XQl9FTVBUWSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE5GQ19JUlFTVEFUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBOQlVTWUlSUSAgMHgxICAgICAgICAvKiBOb3QgQnVzeSBJUlEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5OQlVTWUlSUSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgV0JfT1ZGICAweDIgICAgICAgIC8qIFdyaXRlIEJ1ZmZlciBPdmVyZmxvdyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuV0JfT1ZGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFdCX0VER0UgIDB4NCAgICAgICAgLyogV3JpdGUgQnVmZmVyIEVkZ2UgRGV0ZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbldCX0VER0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFJEX1JEWSAgMHg4ICAgICAgICAvKiBSZWFkIERhdGEgUmVhZHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblJEX1JEWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBXUl9ET05FICAweDEwICAgICAgIC8qIFBhZ2UgV3JpdGUgRG9uZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5XUl9ET05FICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTkZDX0lSUU1BU0sgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgTUFTS19CVVNZSVJRICAweDEgICAgICAgIC8qIE1hc2sgTm90IEJ1c3kgSVJRICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVNLX0JVU1lJUlEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgTUFTS19XQk9WRiAgMHgyICAgICAgICAvKiBNYXNrIFdyaXRlIEJ1ZmZlciBPdmVyZmxvdyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5NQVNLX1dCT1ZGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVNLX1dCRU1QVFkgIDB4NCAgICAgICAgLyogTWFzayBXcml0ZSBCdWZmZXIgRW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BU0tfV0JFTVBUWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBNQVNLX1JEUkRZICAweDggICAgICAgIC8qIE1hc2sgUmVhZCBEYXRhIFJlYWR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgbk1BU0tfUkRSRFkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBNQVNLX1dSRE9ORSAgMHgxMCAgICAgICAvKiBNYXNrIFdyaXRlIERvbmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5NQVNLX1dSRE9ORSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE5GQ19SU1QgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBFQ0NfUlNUICAweDEgICAgICAgIC8qIEVDQyAoYW5kIE5GQyBjb3VudGVycykgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRUNDX1JTVCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE5GQ19QR0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgUEdfUkRfU1RBUlQgIDB4MSAgICAgICAgLyogUGFnZSBSZWFkIFN0YXJ0ICovCisjZGVmaW5lICAgICAgICAgICAgICBuUEdfUkRfU1RBUlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBQR19XUl9TVEFSVCAgMHgyICAgICAgICAvKiBQYWdlIFdyaXRlIFN0YXJ0ICovCisjZGVmaW5lICAgICAgICAgICAgICBuUEdfV1JfU1RBUlQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBORkNfRUNDMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVDQzAgIDB4N2ZmICAgICAgLyogUGFyaXR5IENhbGN1bGF0aW9uIFJlc3VsdDAgKi8KKworLyogQml0IG1hc2tzIGZvciBORkNfRUNDMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVDQzEgIDB4N2ZmICAgICAgLyogUGFyaXR5IENhbGN1bGF0aW9uIFJlc3VsdDEgKi8KKworLyogQml0IG1hc2tzIGZvciBORkNfRUNDMiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVDQzIgIDB4N2ZmICAgICAgLyogUGFyaXR5IENhbGN1bGF0aW9uIFJlc3VsdDIgKi8KKworLyogQml0IG1hc2tzIGZvciBORkNfRUNDMyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVDQzMgIDB4N2ZmICAgICAgLyogUGFyaXR5IENhbGN1bGF0aW9uIFJlc3VsdDMgKi8KKworLyogQml0IG1hc2tzIGZvciBORkNfQ09VTlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRUNDQ05UICAweDNmZiAgICAgIC8qIFRyYW5zZmVyIENvdW50ICovCisKKworI2VuZGlmIC8qIF9ERUZfQkY1MlhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9jZGVmQkY1MzIuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvY2RlZkJGNTMyLmgKaW5kZXggMWQ3YzQ5NC4uNzRmOTY3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9jZGVmQkY1MzIuaAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2NkZWZCRjUzMi5oCkBAIC01MSwxMCArNTEsNiBAQAogI2RlZmluZSBiZmluX3JlYWRfUExMX0xPQ0tDTlQoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoUExMX0xPQ0tDTlQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfUExMX0xPQ0tDTlQodmFsKSAgICAgICAgICBiZmluX3dyaXRlMTYoUExMX0xPQ0tDTlQsdmFsKQogI2RlZmluZSBiZmluX3JlYWRfQ0hJUElEKCkgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoQ0hJUElEKQotI2RlZmluZSBiZmluX3JlYWRfU1dSU1QoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoU1dSU1QpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1dSU1QodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMTYoU1dSU1QsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfU1lTQ1IoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoU1lTQ1IpCi0jZGVmaW5lIGJmaW5fd3JpdGVfU1lTQ1IodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMTYoU1lTQ1IsdmFsKQogI2RlZmluZSBiZmluX3JlYWRfUExMX0RJVigpICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoUExMX0RJVikKICNkZWZpbmUgYmZpbl93cml0ZV9QTExfRElWKHZhbCkgICAgICAgICAgICAgIGJmaW5fd3JpdGUxNihQTExfRElWLHZhbCkKICNkZWZpbmUgYmZpbl9yZWFkX1ZSX0NUTCgpICAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KFZSX0NUTCkKQEAgLTYzLDEyICs1OSwxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGl3cjsKIAotCWJmaW5fd3JpdGUxNihWUl9DVEwsIHZhbCk7Ci0JX19idWlsdGluX2JmaW5fc3N5bmMoKTsKIAkvKiBFbmFibGUgdGhlIFBMTCBXYWtldXAgYml0IGluIFNJQyBJV1IgKi8KIAlpd3IgPSBiZmluX3JlYWQzMihTSUNfSVdSKTsKIAkvKiBPbmx5IGFsbG93IFBQTCBXYWtldXApICovCiAJYmZpbl93cml0ZTMyKFNJQ19JV1IsIElXUl9FTkFCTEUoMCkpOworCisJYmZpbl93cml0ZTE2KFZSX0NUTCwgdmFsKTsKKwlfX2J1aWx0aW5fYmZpbl9zc3luYygpOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWFzbSgiSURMRTsiKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC03Niw2ICs3NCwxMCBAQAogfQogCiAvKiBTeXN0ZW0gSW50ZXJydXB0IENvbnRyb2xsZXIgKDB4RkZDMCAwQzAwLTB4RkZDMCAwRkZGKSAqLworI2RlZmluZSBiZmluX3JlYWRfU1dSU1QoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoU1dSU1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1dSU1QodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMTYoU1dSU1QsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1lTQ1IoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoU1lTQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1lTQ1IodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMTYoU1lTQ1IsdmFsKQogI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjAoKSAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoU0lDX0lBUjApCiAjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lBUjAodmFsKSAgICAgICAgICAgICBiZmluX3dyaXRlMzIoU0lDX0lBUjAsdmFsKQogI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjEoKSAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoU0lDX0lBUjEpCkBAIC0xMTUsNiArMTE3LDE4IEBACiAjZGVmaW5lIGJmaW5fcmVhZF9SVENfUFJFTigpICAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihSVENfUFJFTikKICNkZWZpbmUgYmZpbl93cml0ZV9SVENfUFJFTih2YWwpICAgICAgICAgICAgIGJmaW5fd3JpdGUxNihSVENfUFJFTix2YWwpCiAKKy8qIERNQSBUcmFmZmljIGNvbnRyb2xzICovCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFfVENQRVIoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFfVENQRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDUEVSKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMTYoRE1BX1RDUEVSLHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQV9UQ0NOVCgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KERNQV9UQ0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUFfVENDTlQodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUxNihETUFfVENDTlQsdmFsKQorCisvKiBBbHRlcm5hdGUgZGVwcmVjYXRlZCByZWdpc3RlciBuYW1lcyAoYmVsb3cpIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29kZSBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFfVENfUEVSKCkgICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFfVENfUEVSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQV9UQ19QRVIodmFsKSAgICAgICAgICAgYmZpbl93cml0ZTE2KERNQV9UQ19QRVIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BX1RDX0NOVCgpICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRE1BX1RDX0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUFfVENfQ05UKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGUxNihETUFfVENfQ05ULHZhbCkKKwogLyogR2VuZXJhbCBQdXJwb3NlIElPICgweEZGQzAgMjQwMC0weEZGQzAgMjdGRikgKi8KICNkZWZpbmUgYmZpbl9yZWFkX0ZJT19ESVIoKSAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEZJT19ESVIpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRklPX0RJUih2YWwpICAgICAgICAgICAgICBiZmluX3dyaXRlMTYoRklPX0RJUix2YWwpCkBAIC0xNTEsMTYgKzE2NSw2IEBACiAjZGVmaW5lIGJmaW5fcmVhZF9GSU9fTUFTS0JfVCgpICAgICAgICAgICAgICBiZmluX3JlYWQxNihGSU9fTUFTS0JfVCkKICNkZWZpbmUgYmZpbl93cml0ZV9GSU9fTUFTS0JfVCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihGSU9fTUFTS0JfVCx2YWwpCiAKLS8qIERNQSBUcmFmZmljIGNvbnRyb2xzICovCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUFfVENQRVIoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFfVENQRVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDUEVSKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMTYoRE1BX1RDUEVSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQV9UQ0NOVCgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KERNQV9UQ0NOVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUFfVENDTlQodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUxNihETUFfVENDTlQsdmFsKQotI2RlZmluZSBiZmluX3JlYWRfRE1BX1RDX1BFUigpICAgICAgICAgICAgICAgYmZpbl9yZWFkMTYoRE1BX1RDX1BFUikKLSNkZWZpbmUgYmZpbl93cml0ZV9ETUFfVENfUEVSKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGUxNihETUFfVENfUEVSLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQV9UQ19DTlQoKSAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KERNQV9UQ19DTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDX0NOVCh2YWwpICAgICAgICAgICBiZmluX3dyaXRlMTYoRE1BX1RDX0NOVCx2YWwpCi0KIC8qIERNQSBDb250cm9sbGVyICovCiAjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0NPTkZJRygpICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUEwX0NPTkZJRykKICNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX0NPTkZJRyh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihETUEwX0NPTkZJRyx2YWwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2RlZkJGNTMyLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2RlZkJGNTMyLmgKaW5kZXggYjI0MGEwOC4uNmEzY2Y5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9kZWZCRjUzMi5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvZGVmQkY1MzIuaApAQCAtNDYsMTEgKzQ2LDcgQEAKIAogI2lmbmRlZiBfREVGX0JGNTMyX0gKICNkZWZpbmUgX0RFRl9CRjUzMl9ICi0vKgotI2lmICFkZWZpbmVkKF9fQURTUExQQkxBQ0tGSU5fXykKLSN3YXJuaW5nIGRlZkJGNTMyLmggc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgZm9yIDUzMiBjb21wYXRpYmxlIGNoaXBzCi0jZW5kaWYKLSovCisKIC8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KICNpbmNsdWRlIDxhc20vbWFjaC1jb21tb24vZGVmX0xQQmxhY2tmaW4uaD4KIApAQCAtNjUsMTAgKzYxLDEwIEBACiAjZGVmaW5lIFBMTF9TVEFUICAgICAgICAgICAgICAgMHhGRkMwMDAwQwkvKiBQTEwgU3RhdHVzIHJlZ2lzdGVyICgxNi1iaXQpICovCiAjZGVmaW5lIFBMTF9MT0NLQ05UICAgICAgICAgICAgMHhGRkMwMDAxMAkvKiBQTEwgTG9jayBDb3VudCByZWdpc3RlciAoMTYtYml0KSAqLwogI2RlZmluZSBDSElQSUQgICAgICAgICAgICAgICAgIDB4RkZDMDAwMTQgICAgICAgLyogQ2hpcCBJRCBSZWdpc3RlciAqLwotI2RlZmluZSBTV1JTVCAgICAgICAgICAgICAgICAgIDB4RkZDMDAxMDAJLyogU29mdHdhcmUgUmVzZXQgUmVnaXN0ZXIgKDE2LWJpdCkgKi8KLSNkZWZpbmUgU1lTQ1IgICAgICAgICAgICAgICAgICAweEZGQzAwMTA0CS8qIFN5c3RlbSBDb25maWd1cmF0aW9uIHJlZ2lzdGUgKi8KIAogLyogU3lzdGVtIEludGVycnVwdCBDb250cm9sbGVyICgweEZGQzAwMTAwIC0gMHhGRkMwMDFGRikgKi8KKyNkZWZpbmUgU1dSU1QJCQkweEZGQzAwMTAwICAvKiBTb2Z0d2FyZSBSZXNldCBSZWdpc3RlciAoMTYtYml0KSAqLworI2RlZmluZSBTWVNDUgkJCTB4RkZDMDAxMDQgIC8qIFN5c3RlbSBDb25maWd1cmF0aW9uIHJlZ2lzdGUgKi8KICNkZWZpbmUgU0lDX1JWRUNUICAgICAgICAgICAgIAkJMHhGRkMwMDEwOAkvKiBJbnRlcnJ1cHQgUmVzZXQgVmVjdG9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU0lDX0lNQVNLICAgICAgICAgICAgIAkJMHhGRkMwMDEwQwkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwogI2RlZmluZSBTSUNfSUFSMCAgICAgICAgICAgICAgIAkJMHhGRkMwMDExMAkvKiBJbnRlcnJ1cHQgQXNzaWdubWVudCBSZWdpc3RlciAwICovCkBAIC0yMTgsMTEgKzIxNCwxMyBAQAogI2RlZmluZSBFQklVX1NEU1RBVAkJCTB4RkZDMDBBMUMJLyogU0RSQU0gU3RhdHVzIFJlZ2lzdGVyICovCiAKIC8qIERNQSBUcmFmZmljIGNvbnRyb2xzICovCi0jZGVmaW5lIERNQV9UQ1BFUiAweEZGQzAwQjBDCS8qIFRyYWZmaWMgQ29udHJvbCBQZXJpb2RzIFJlZ2lzdGVyICovCi0jZGVmaW5lIERNQV9UQ0NOVCAweEZGQzAwQjEwCS8qIFRyYWZmaWMgQ29udHJvbCBDdXJyZW50IENvdW50cyBSZWdpc3RlciAqLwogI2RlZmluZSBETUFfVENfUEVSIDB4RkZDMDBCMEMJLyogVHJhZmZpYyBDb250cm9sIFBlcmlvZHMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgRE1BX1RDX0NOVCAweEZGQzAwQjEwCS8qIFRyYWZmaWMgQ29udHJvbCBDdXJyZW50IENvdW50cyBSZWdpc3RlciAqLwogCisvKiBBbHRlcm5hdGUgZGVwcmVjYXRlZCByZWdpc3RlciBuYW1lcyAoYmVsb3cpIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29kZSBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIERNQV9UQ1BFUiAweEZGQzAwQjBDCS8qIFRyYWZmaWMgQ29udHJvbCBQZXJpb2RzIFJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9UQ0NOVCAweEZGQzAwQjEwCS8qIFRyYWZmaWMgQ29udHJvbCBDdXJyZW50IENvdW50cyBSZWdpc3RlciAqLworCiAvKiBETUEgQ29udHJvbGxlciAoMHhGRkMwMEMwMCAtIDB4RkZDMDBGRkYpICovCiAjZGVmaW5lIERNQTBfQ09ORklHCQkweEZGQzAwQzA4CS8qIERNQSBDaGFubmVsIDAgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwogI2RlZmluZSBETUEwX05FWFRfREVTQ19QVFIJMHhGRkMwMEMwMAkvKiBETUEgQ2hhbm5lbCAwIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCkBAIC00MDcsMTQgKzQwNSwyNSBAQAogLyogKioqKioqKioqKioqKioqKioqKioqIFBMTCBBTkQgUkVTRVQgTUFTS1MgKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKIC8qIFBMTF9DVEwgTWFza3MgKi8KLSNkZWZpbmUgUExMX0NMS0lOICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIFBhc3MgQ0xLSU4gdG8gUExMICovCi0jZGVmaW5lIFBMTF9DTEtJTl9ESVYyICAgICAgICAgMHgwMDAwMDAwMQkvKiBQYXNzIENMS0lOLzIgdG8gUExMICovCi0jZGVmaW5lIFBMTF9PRkYgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBTaHV0IG9mZiBQTEwgY2xvY2tzICovCi0jZGVmaW5lIFNUT1BDS19PRkYgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBDb3JlIGNsb2NrIG9mZiAqLwotI2RlZmluZSBQRFdOICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogUHV0IHRoZSBQTEwgaW4gYSBEZWVwIFNsZWVwIHN0YXRlICovCi0jZGVmaW5lIEJZUEFTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAkvKiBCeXBhc3MgdGhlIFBMTCAqLworI2RlZmluZSBQTExfQ0xLSU4JCQkweDAwMDAgIC8qIFBhc3MgQ0xLSU4gdG8gUExMICovCisjZGVmaW5lIFBMTF9DTEtJTl9ESVYyCQkJMHgwMDAxICAvKiBQYXNzIENMS0lOLzIgdG8gUExMICovCisjZGVmaW5lIERGCQkJCTB4MDAwMQkvKiAwOiBQTEwgPSBDTEtJTiwgMTogUExMID0gQ0xLSU4vMgkJCQkJKi8KKyNkZWZpbmUgUExMX09GRgkJCQkweDAwMDIgIC8qIFNodXQgb2ZmIFBMTCBjbG9ja3MgKi8KKyNkZWZpbmUgU1RPUENLX09GRgkJCTB4MDAwOCAgLyogQ29yZSBjbG9jayBvZmYgKi8KKyNkZWZpbmUgU1RPUENLCQkJCTB4MDAwOAkvKiBDb3JlIENsb2NrIE9mZgkJCQkJCQkJCSovCisjZGVmaW5lIFBEV04JCQkJMHgwMDIwICAvKiBQdXQgdGhlIFBMTCBpbiBhIERlZXAgU2xlZXAgc3RhdGUgKi8KKyNpZiAhZGVmaW5lZChfX0FEU1BCRjUzOF9fKQorLyogdGhpcyBmaWxlIGlzIGluY2x1ZGVkIGluIGRlZkJGNTM4LmggYnV0IElOX0RFTEFZL09VVF9ERUxBWSBhcmUgZGlmZmVyZW50ICovCisjIGRlZmluZSBJTl9ERUxBWSAgICAgICAgMHgwMDQwICAvKiBBZGQgMjAwcHMgRGVsYXkgVG8gRUJJVSBJbnB1dCBMYXRjaGVzICovCisjIGRlZmluZSBPVVRfREVMQVkgICAgICAgMHgwMDgwICAvKiBBZGQgMjAwcHMgRGVsYXkgVG8gRUJJVSBPdXRwdXQgU2lnbmFscyAqLworI2VuZGlmCisjZGVmaW5lIEJZUEFTUwkJCQkweDAxMDAgIC8qIEJ5cGFzcyB0aGUgUExMICovCisvKiBQTExfQ1RMIE1hY3JvcyAoT25seSBVc2UgV2l0aCBMb2dpYyBPUiBXaGlsZSBTZXR0aW5nIExvd2VyIE9yZGVyIEJpdHMpCQkJKi8KKyNkZWZpbmUJU0VUX01TRUwoeCkJCSgoKHgpJjB4M0YpIDw8IDB4OSkJLyogU2V0IE1TRUwgPSAwLTYzIC0tPiBWQ08gPSBDTEtJTipNU0VMCQkqLwogCiAvKiBQTExfRElWIE1hc2tzICovCisjZGVmaW5lIFNTRUwJCQkJMHgwMDBGCS8qIFN5c3RlbSBTZWxlY3QJCQkJCQkqLworI2RlZmluZQlDU0VMCQkJCTB4MDAzMAkvKiBDb3JlIFNlbGVjdAkJCQkJCQkqLwogCiAjZGVmaW5lIFNDTEtfRElWKHgpICAoeCkJLyogU0NMSyA9IFZDTyAvIHggKi8KIApAQCAtNDIyLDYgKzQzMSw4IEBACiAjZGVmaW5lIENDTEtfRElWMiAgICAgICAgICAgICAgMHgwMDAwMDAxMAkvKiBDQ0xLID0gVkNPIC8gMiAqLwogI2RlZmluZSBDQ0xLX0RJVjQgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogQ0NMSyA9IFZDTyAvIDQgKi8KICNkZWZpbmUgQ0NMS19ESVY4ICAgICAgICAgICAgICAweDAwMDAwMDMwCS8qIENDTEsgPSBWQ08gLyA4ICovCisvKiBQTExfRElWIE1hY3JvcwkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgU0VUX1NTRUwoeCkJCQkoKHgpJjB4RikJLyogU2V0IFNTRUwgPSAwLTE1IC0tPiBTQ0xLID0gVkNPL1NTRUwJKi8KIAogLyogUExMX1NUQVQgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCiAjZGVmaW5lIEFDVElWRV9QTExFTkFCTEVECTB4MDAwMQkvKiBQcm9jZXNzb3IgSW4gQWN0aXZlIE1vZGUgV2l0aCBQTEwgRW5hYmxlZCAgICAqLwpAQCAtNDI5LDEzICs0NDAsNDcgQEAKICNkZWZpbmUgQUNUSVZFX1BMTERJU0FCTEVECTB4MDAwNAkvKiBQcm9jZXNzb3IgSW4gQWN0aXZlIE1vZGUgV2l0aCBQTEwgRGlzYWJsZWQgICAqLwogI2RlZmluZQlQTExfTE9DS0VECQkJMHgwMDIwCS8qIFBMTF9MT0NLQ05UIEhhcyBCZWVuIFJlYWNoZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCisvKiBWUl9DVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkJCSovCisjZGVmaW5lCUZSRVEJCQkweDAwMDMJLyogU3dpdGNoaW5nIE9zY2lsbGF0b3IgRnJlcXVlbmN5IEZvciBSZWd1bGF0b3IJKi8KKyNkZWZpbmUJSElCRVJOQVRFCQkweDAwMDAJLyogCQlQb3dlcmRvd24vQnlwYXNzIE9uLUJvYXJkIFJlZ3VsYXRpb24JKi8KKyNkZWZpbmUJRlJFUV8zMzMJCTB4MDAwMQkvKiAJCVN3aXRjaGluZyBGcmVxdWVuY3kgSXMgMzMzIGtIegkJCSovCisjZGVmaW5lCUZSRVFfNjY3CQkweDAwMDIJLyogCQlTd2l0Y2hpbmcgRnJlcXVlbmN5IElzIDY2NyBrSHoJCQkqLworI2RlZmluZQlGUkVRXzEwMDAJCTB4MDAwMwkvKiAJCVN3aXRjaGluZyBGcmVxdWVuY3kgSXMgMSBNSHoJCQkqLworCisjZGVmaW5lIEdBSU4JCQkweDAwMEMJLyogVm9sdGFnZSBMZXZlbCBHYWluCSovCisjZGVmaW5lCUdBSU5fNQkJCTB4MDAwMAkvKiAJCUdBSU4gPSA1CQkqLworI2RlZmluZQlHQUlOXzEwCQkJMHgwMDA0CS8qIAkJR0FJTiA9IDEwCQkqLworI2RlZmluZQlHQUlOXzIwCQkJMHgwMDA4CS8qIAkJR0FJTiA9IDIwCQkqLworI2RlZmluZQlHQUlOXzUwCQkJMHgwMDBDCS8qIAkJR0FJTiA9IDUwCQkqLworCisjZGVmaW5lCVZMRVYJCQkweDAwRjAJLyogSW50ZXJuYWwgVm9sdGFnZSBMZXZlbAkJCQkJKi8KKyNkZWZpbmUJVkxFVl8wODUgCQkweDAwNjAJLyogCQlWTEVWID0gMC44NSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLworI2RlZmluZQlWTEVWXzA5MAkJMHgwMDcwCS8qIAkJVkxFViA9IDAuOTAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KKyNkZWZpbmUJVkxFVl8wOTUJCTB4MDA4MAkvKiAJCVZMRVYgPSAwLjk1IFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCisjZGVmaW5lCVZMRVZfMTAwCQkweDAwOTAJLyogCQlWTEVWID0gMS4wMCBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLworI2RlZmluZQlWTEVWXzEwNQkJMHgwMEEwCS8qIAkJVkxFViA9IDEuMDUgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KKyNkZWZpbmUJVkxFVl8xMTAJCTB4MDBCMAkvKiAJCVZMRVYgPSAxLjEwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpCSovCisjZGVmaW5lCVZMRVZfMTE1CQkweDAwQzAJLyogCQlWTEVWID0gMS4xNSBWICgtNSUgLSArMTAlIEFjY3VyYWN5KQkqLworI2RlZmluZQlWTEVWXzEyMAkJMHgwMEQwCS8qIAkJVkxFViA9IDEuMjAgViAoLTUlIC0gKzEwJSBBY2N1cmFjeSkJKi8KKworI2RlZmluZQlXQUtFCQkJMHgwMTAwCS8qIEVuYWJsZSBSVEMvUmVzZXQgV2FrZXVwIEZyb20gSGliZXJuYXRlCSovCisjZGVmaW5lCVNDS0VMT1cJCQkweDgwMDAJLyogRG8gTm90IERyaXZlIFNDS0UgSGlnaCBEdXJpbmcgUmVzZXQgQWZ0ZXIgSGliZXJuYXRlICovCisKIC8qIENISVBJRCBNYXNrcyAqLwogI2RlZmluZSBDSElQSURfVkVSU0lPTiAgICAgICAgIDB4RjAwMDAwMDAKICNkZWZpbmUgQ0hJUElEX0ZBTUlMWSAgICAgICAgICAweDBGRkZGMDAwCiAjZGVmaW5lIENISVBJRF9NQU5VRkFDVFVSRSAgICAgMHgwMDAwMEZGRQogCiAvKiBTV1JTVCBNYXNrICovCi0jZGVmaW5lIFNZU1RFTV9SRVNFVCAgICAgICAgICAgMHgwMDAwMDAwNwkvKiBJbml0aWF0ZXMgYSBzeXN0ZW0gc29mdHdhcmUgcmVzZXQgKi8KKyNkZWZpbmUgU1lTVEVNX1JFU0VUCTB4MDAwNwkvKiBJbml0aWF0ZXMgQSBTeXN0ZW0gU29mdHdhcmUgUmVzZXQJCQkqLworI2RlZmluZQlET1VCTEVfRkFVTFQJMHgwMDA4CS8qIENvcmUgRG91YmxlIEZhdWx0IENhdXNlcyBSZXNldAkJCQkqLworI2RlZmluZSBSRVNFVF9ET1VCTEUJMHgyMDAwCS8qIFNXIFJlc2V0IEdlbmVyYXRlZCBCeSBDb3JlIERvdWJsZS1GYXVsdAkJKi8KKyNkZWZpbmUgUkVTRVRfV0RPRwkweDQwMDAJLyogU1cgUmVzZXQgR2VuZXJhdGVkIEJ5IFdhdGNoZG9nIFRpbWVyCQkJKi8KKyNkZWZpbmUgUkVTRVRfU09GVFdBUkUJMHg4MDAwCS8qIFNXIFJlc2V0IE9jY3VycmVkIFNpbmNlIExhc3QgUmVhZCBPZiBTV1JTVAkqLworCisvKiBTWVNDUiBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgQk1PREUJCQkweDAwMDYJLyogQm9vdCBNb2RlIC0gTGF0Y2hlZCBEdXJpbmcgSFcgUmVzZXQgRnJvbSBNb2RlIFBpbnMJKi8KKyNkZWZpbmUJTk9CT09UCQkJMHgwMDEwCS8qIEV4ZWN1dGUgRnJvbSBMMSBvciBBU1lOQyBCYW5rIDAgV2hlbiBCTU9ERSA9IDAJCSovCiAKIC8qICoqKioqKioqKioqKiogIFNZU1RFTSBJTlRFUlJVUFQgQ09OVFJPTExFUiBNQVNLUyAqKioqKioqKioqKioqKioqKiAqLwogCkBAIC00ODMsMjMgKzUyOCw2IEBACiAjZGVmaW5lIElXUl9FTkFCTEUoeCkJICAgICAgICgxIDw8ICh4KSkJLyogV2FrZXVwIEVuYWJsZSBQZXJpcGhlcmFsICN4ICovCiAjZGVmaW5lIElXUl9ESVNBQkxFKHgpICgweEZGRkZGRkZGIF4gKDEgPDwgKHgpKSkJLyogV2FrZXVwIERpc2FibGUgUGVyaXBoZXJhbCAjeCAqLwogCi0vKiAqKioqKioqKiogIFdBVENIRE9HIFRJTUVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKjggKi8KLQotLyogV2F0Y2hkb2cgVGltZXIgV0RPR19DVEwgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgSUNUTCh4KSAoKHg8PDEpICYgMHgwMDA2KQotI2RlZmluZSBFTkFCTEVfUkVTRVQgICAgIDB4MDAwMDAwMDAJLyogU2V0IFdhdGNoZG9nIFRpbWVyIHRvIGdlbmVyYXRlIHJlc2V0ICovCi0jZGVmaW5lIEVOQUJMRV9OTUkgICAgICAgMHgwMDAwMDAwMgkvKiBTZXQgV2F0Y2hkb2cgVGltZXIgdG8gZ2VuZXJhdGUgbm9uLW1hc2thYmxlIGludGVycnVwdCAqLwotI2RlZmluZSBFTkFCTEVfR1BJICAgICAgIDB4MDAwMDAwMDQJLyogU2V0IFdhdGNoZG9nIFRpbWVyIHRvIGdlbmVyYXRlIGdlbmVyYWwtcHVycG9zZSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgRElTQUJMRV9FVlQgICAgICAweDAwMDAwMDA2CS8qIERpc2FibGUgV2F0Y2hkb2cgVGltZXIgaW50ZXJydXB0cyAqLwotCi0jZGVmaW5lIFRNUl9FTgkJMHgwMDAwCi0jZGVmaW5lIFRNUl9ESVMJCTB4MEFEMAotI2RlZmluZSBUUk8JCTB4ODAwMAotCi0jZGVmaW5lIElDVExfUDAJCTB4MDEKLSNkZWZpbmUgSUNUTF9QMQkJMHgwMgotI2RlZmluZSBUUk9fUAkJMHgwRgotCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBVQVJUIENPTlRST0xMRVIgTUFTS1MgKioqKioqKioqKioqKioqKioqKioqKiAqLwogCiAvKiBVQVJUX0xDUiBSZWdpc3RlciAqLwpAQCAtNTgzLDYgKzYxMSw5IEBACiAjZGVmaW5lIFRTUEVOICAgIDB4MDAwMQkJLyogVFggZW5hYmxlICAqLwogI2RlZmluZSBJVENMSyAgICAweDAwMDIJCS8qIEludGVybmFsIFRYIENsb2NrIFNlbGVjdCAgKi8KICNkZWZpbmUgVERUWVBFICAgMHgwMDBDCQkvKiBUWCBEYXRhIEZvcm1hdHRpbmcgU2VsZWN0ICovCisjZGVmaW5lIERUWVBFX05PUk0JMHgwMDAwCQkvKiBEYXRhIEZvcm1hdCBOb3JtYWwJCQkJCQkJKi8KKyNkZWZpbmUgRFRZUEVfVUxBVwkweDAwMDgJCS8qIENvbXBhbmQgVXNpbmcgdS1MYXcJCQkJCQkJKi8KKyNkZWZpbmUgRFRZUEVfQUxBVwkweDAwMEMJCS8qIENvbXBhbmQgVXNpbmcgQS1MYXcJCQkJCQkJKi8KICNkZWZpbmUgVExTQklUICAgMHgwMDEwCQkvKiBUWCBCaXQgT3JkZXIgKi8KICNkZWZpbmUgSVRGUyAgICAgMHgwMjAwCQkvKiBJbnRlcm5hbCBUWCBGcmFtZSBTeW5jIFNlbGVjdCAgKi8KICNkZWZpbmUgVEZTUiAgICAgMHgwNDAwCQkvKiBUWCBGcmFtZSBTeW5jIFJlcXVpcmVkIFNlbGVjdCAgKi8KQEAgLTU5Miw3ICs2MjMsMTIgQEAKICNkZWZpbmUgVENLRkUgICAgMHg0MDAwCQkvKiBUWCBDbG9jayBGYWxsaW5nIEVkZ2UgU2VsZWN0ICAqLwogCiAvKiBTUE9SVHhfVENSMiBNYXNrcyAqLwotI2RlZmluZSBTTEVOCSAgICAweDAwMUYJLypUWCBXb3JkIExlbmd0aCAgKi8KKyNpZiBkZWZpbmVkKF9fQURTUEJGNTMxX18pIHx8IGRlZmluZWQoX19BRFNQQkY1MzJfXykgfHwgXAorICAgIGRlZmluZWQoX19BRFNQQkY1MzNfXykKKyMgZGVmaW5lIFNMRU4JICAgIDB4MDAxRgkvKlRYIFdvcmQgTGVuZ3RoICAqLworI2Vsc2UKKyMgZGVmaW5lIFNMRU4oeCkJCSgoeCkmMHgxRikJLyogU1BPUlQgVFggV29yZCBMZW5ndGggKDIgLSAzMSkJCQkJKi8KKyNlbmRpZgogI2RlZmluZSBUWFNFICAgICAgICAweDAxMDAJLypUWCBTZWNvbmRhcnkgRW5hYmxlICovCiAjZGVmaW5lIFRTRlNFICAgICAgIDB4MDIwMAkvKlRYIFN0ZXJlbyBGcmFtZSBTeW5jIEVuYWJsZSAqLwogI2RlZmluZSBUUkZTVCAgICAgICAweDA0MDAJLypUWCBSaWdodC1GaXJzdCBEYXRhIE9yZGVyICAqLwpAQCAtNjAxLDggKzYzNyw5IEBACiAjZGVmaW5lIFJTUEVOICAgIDB4MDAwMQkJLyogUlggZW5hYmxlICAqLwogI2RlZmluZSBJUkNMSyAgICAweDAwMDIJCS8qIEludGVybmFsIFJYIENsb2NrIFNlbGVjdCAgKi8KICNkZWZpbmUgUkRUWVBFICAgMHgwMDBDCQkvKiBSWCBEYXRhIEZvcm1hdHRpbmcgU2VsZWN0ICovCi0jZGVmaW5lIFJVTEFXICAgIDB4MDAwOAkJLyogdS1MYXcgZW5hYmxlICAqLwotI2RlZmluZSBSQUxBVyAgICAweDAwMEMJCS8qIEEtTGF3IGVuYWJsZSAgKi8KKyNkZWZpbmUgRFRZUEVfTk9STQkweDAwMDAJCS8qIG5vIGNvbXBhbmRpbmcJCQkJCQkJKi8KKyNkZWZpbmUgRFRZUEVfVUxBVwkweDAwMDgJCS8qIENvbXBhbmQgVXNpbmcgdS1MYXcJCQkJCQkJKi8KKyNkZWZpbmUgRFRZUEVfQUxBVwkweDAwMEMJCS8qIENvbXBhbmQgVXNpbmcgQS1MYXcJCQkJCQkJKi8KICNkZWZpbmUgUkxTQklUICAgMHgwMDEwCQkvKiBSWCBCaXQgT3JkZXIgKi8KICNkZWZpbmUgSVJGUyAgICAgMHgwMjAwCQkvKiBJbnRlcm5hbCBSWCBGcmFtZSBTeW5jIFNlbGVjdCAgKi8KICNkZWZpbmUgUkZTUiAgICAgMHgwNDAwCQkvKiBSWCBGcmFtZSBTeW5jIFJlcXVpcmVkIFNlbGVjdCAgKi8KQEAgLTYxMSw3ICs2NDgsNyBAQAogI2RlZmluZSBSQ0tGRSAgICAweDQwMDAJCS8qIFJYIENsb2NrIEZhbGxpbmcgRWRnZSBTZWxlY3QgICovCiAKIC8qIFNQT1JUeF9SQ1IyIE1hc2tzICovCi0jZGVmaW5lIFNMRU4JICAgIDB4MDAxRgkvKlJYIFdvcmQgTGVuZ3RoICAqLworLyogU0xFTiBkZWZpbmVkIGFib3ZlICovCiAjZGVmaW5lIFJYU0UgICAgICAgIDB4MDEwMAkvKlJYIFNlY29uZGFyeSBFbmFibGUgKi8KICNkZWZpbmUgUlNGU0UgICAgICAgMHgwMjAwCS8qUlggU3RlcmVvIEZyYW1lIFN5bmMgRW5hYmxlICovCiAjZGVmaW5lIFJSRlNUICAgICAgIDB4MDQwMAkvKlJpZ2h0LUZpcnN0IERhdGEgT3JkZXIgICovCkBAIC02MjgsMTQgKzY2NSwzNyBAQAogLypTUE9SVHhfTUNNQzEgTWFza3MgKi8KICNkZWZpbmUgU1BfV1NJWkUJCTB4MDAwMEYwMDAJLypNdWx0aWNoYW5uZWwgV2luZG93IFNpemUgRmllbGQgKi8KICNkZWZpbmUgU1BfV09GRgkJMHgwMDAwMDNGRgkvKk11bHRpY2hhbm5lbCBXaW5kb3cgT2Zmc2V0IEZpZWxkICovCisvKiBTUE9SVHhfTUNNQzEgTWFjcm9zCQkJCQkJCQkJCQkJCQkJKi8KKyNkZWZpbmUgU0VUX1NQX1dPRkYoeCkJKCh4KSAmIDB4M0ZGKSAJLyogTXVsdGljaGFubmVsIFdpbmRvdyBPZmZzZXQgRmllbGQJCQkqLworLyogT25seSB1c2UgU0VUX1dTSVpFIE1hY3JvIFdpdGggTG9naWMgT1IgV2hpbGUgU2V0dGluZyBMb3dlciBPcmRlciBCaXRzCQkJCQkJKi8KKyNkZWZpbmUgU0VUX1NQX1dTSVpFKHgpCSgoKCgoeCk+PjB4MyktMSkmMHhGKSA8PCAweEMpCS8qIE11bHRpY2hhbm5lbCBXaW5kb3cgU2l6ZSA9ICh4LzgpLTEJKi8KIAogLypTUE9SVHhfTUNNQzIgTWFza3MgKi8KLSNkZWZpbmUgTUNDUk0JCTB4MDAwMDAwMDMJLypNdWx0aWNoYW5uZWwgQ2xvY2sgUmVjb3ZlcnkgTW9kZSAqLwotI2RlZmluZSBNQ0RUWFBFCQkweDAwMDAwMDA0CS8qTXVsdGljaGFubmVsIERNQSBUcmFuc21pdCBQYWNraW5nICovCi0jZGVmaW5lIE1DRFJYUEUJCTB4MDAwMDAwMDgJLypNdWx0aWNoYW5uZWwgRE1BIFJlY2VpdmUgUGFja2luZyAqLwotI2RlZmluZSBNQ01FTgkJMHgwMDAwMDAxMAkvKk11bHRpY2hhbm5lbCBGcmFtZSBNb2RlIEVuYWJsZSAqLwotI2RlZmluZSBGU0RSCQkweDAwMDAwMDgwCS8qTXVsdGljaGFubmVsIEZyYW1lIFN5bmMgdG8gRGF0YSBSZWxhdGlvbnNoaXAgKi8KLSNkZWZpbmUgTUZECQkweDAwMDBGMDAwCS8qTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ICAgICovCisjZGVmaW5lIE1DQ1JNCQkweDAwMDAwMDAzIAkvKk11bHRpY2hhbm5lbCBDbG9jayBSZWNvdmVyeSBNb2RlICovCisjZGVmaW5lIFJFQ19CWVBBU1MJMHgwMDAwCQkvKiBCeXBhc3MgTW9kZSAoTm8gQ2xvY2sgUmVjb3ZlcnkpCQkJCSovCisjZGVmaW5lIFJFQ18yRlJPTTQJMHgwMDAyCQkvKiBSZWNvdmVyIDIgTUh6IENsb2NrIGZyb20gNCBNSHogQ2xvY2sJCQkqLworI2RlZmluZSBSRUNfOEZST00xNgkweDAwMDMJCS8qIFJlY292ZXIgOCBNSHogQ2xvY2sgZnJvbSAxNiBNSHogQ2xvY2sJCSovCisjZGVmaW5lIE1DRFRYUEUJCTB4MDAwMDAwMDQgCS8qTXVsdGljaGFubmVsIERNQSBUcmFuc21pdCBQYWNraW5nICovCisjZGVmaW5lIE1DRFJYUEUJCTB4MDAwMDAwMDggCS8qTXVsdGljaGFubmVsIERNQSBSZWNlaXZlIFBhY2tpbmcgKi8KKyNkZWZpbmUgTUNNRU4JCTB4MDAwMDAwMTAgCS8qTXVsdGljaGFubmVsIEZyYW1lIE1vZGUgRW5hYmxlICovCisjZGVmaW5lIEZTRFIJCTB4MDAwMDAwODAgCS8qTXVsdGljaGFubmVsIEZyYW1lIFN5bmMgdG8gRGF0YSBSZWxhdGlvbnNoaXAgKi8KKyNkZWZpbmUgTUZECQkweDAwMDBGMDAwIAkvKk11bHRpY2hhbm5lbCBGcmFtZSBEZWxheSAgICAqLworI2RlZmluZSBNRkRfMAkJMHgwMDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSAwCQkJCQkqLworI2RlZmluZSBNRkRfMQkJMHgxMDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSAxCQkJCQkqLworI2RlZmluZSBNRkRfMgkJMHgyMDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSAyCQkJCQkqLworI2RlZmluZSBNRkRfMwkJMHgzMDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSAzCQkJCQkqLworI2RlZmluZSBNRkRfNAkJMHg0MDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSA0CQkJCQkqLworI2RlZmluZSBNRkRfNQkJMHg1MDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSA1CQkJCQkqLworI2RlZmluZSBNRkRfNgkJMHg2MDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSA2CQkJCQkqLworI2RlZmluZSBNRkRfNwkJMHg3MDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSA3CQkJCQkqLworI2RlZmluZSBNRkRfOAkJMHg4MDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSA4CQkJCQkqLworI2RlZmluZSBNRkRfOQkJMHg5MDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSA5CQkJCQkqLworI2RlZmluZSBNRkRfMTAJCTB4QTAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gMTAJCQkJKi8KKyNkZWZpbmUgTUZEXzExCQkweEIwMDAJCS8qIE11bHRpY2hhbm5lbCBGcmFtZSBEZWxheSA9IDExCQkJCSovCisjZGVmaW5lIE1GRF8xMgkJMHhDMDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSAxMgkJCQkqLworI2RlZmluZSBNRkRfMTMJCTB4RDAwMAkJLyogTXVsdGljaGFubmVsIEZyYW1lIERlbGF5ID0gMTMJCQkJKi8KKyNkZWZpbmUgTUZEXzE0CQkweEUwMDAJCS8qIE11bHRpY2hhbm5lbCBGcmFtZSBEZWxheSA9IDE0CQkJCSovCisjZGVmaW5lIE1GRF8xNQkJMHhGMDAwCQkvKiBNdWx0aWNoYW5uZWwgRnJhbWUgRGVsYXkgPSAxNQkJCQkqLwogCiAvKiAgKioqKioqKioqICBQQVJBTExFTCBQRVJJUEhFUkFMIElOVEVSRkFDRSAoUFBJKSBNQVNLUyAqKioqKioqKioqKioqKioqICAgKi8KIApAQCAtNjYwLDYgKzcyMCw4IEBACiAjZGVmaW5lIERMRU5fMTYJCQkweDM4MDAJLyogRGF0YSBMZW5ndGggPSAxNiBCaXRzICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgRExFTih4KQkoKCh4LTkpICYgMHgwNykgPDwgMTEpCS8qIFBQSSBEYXRhIExlbmd0aCAob25seSB3b3JrcyBmb3IgeD0xMC0tPng9MTYpICovCiAjZGVmaW5lIFBPTCAgICAgICAgICAgICAgICAgIDB4MDAwMEMwMDAJLyogUFBJIFNpZ25hbCBQb2xhcml0aWVzICAgICAgICovCisjZGVmaW5lIFBPTEMJCTB4NDAwMAkJLyogUFBJIENsb2NrIFBvbGFyaXR5CQkJCSovCisjZGVmaW5lIFBPTFMJCTB4ODAwMAkJLyogUFBJIEZyYW1lIFN5bmMgUG9sYXJpdHkJCQkqLwogCiAvKiBQUElfU1RBVFVTIE1hc2tzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgRkxECSAgICAgICAgICAgICAweDAwMDAwNDAwCS8qIEZpZWxkIEluZGljYXRvciAgICovCkBAIC03MjksNiArNzkxLDE1IEBACiAjZGVmaW5lIFBDQVBSRAkgICAgICAgICAgICAweDAwMDAwODAwCS8qIERNQSBSZWFkIE9wZXJhdGlvbiBJbmRpY2F0b3IgKi8KICNkZWZpbmUgUE1BUAkgICAgICAgICAgICAweDAwMDA3MDAwCS8qIERNQSBQZXJpcGhlcmFsIE1hcCBGaWVsZCAqLwogCisjZGVmaW5lIFBNQVBfUFBJCQkweDAwMDAJLyogUE1BUCBQUEkgUG9ydCBETUEgKi8KKyNkZWZpbmUJUE1BUF9TUE9SVDBSWAkJMHgxMDAwCS8qIFBNQVAgU1BPUlQwIFJlY2VpdmUgRE1BICovCisjZGVmaW5lIFBNQVBfU1BPUlQwVFgJCTB4MjAwMAkvKiBQTUFQIFNQT1JUMCBUcmFuc21pdCBETUEgKi8KKyNkZWZpbmUJUE1BUF9TUE9SVDFSWAkJMHgzMDAwCS8qIFBNQVAgU1BPUlQxIFJlY2VpdmUgRE1BICovCisjZGVmaW5lIFBNQVBfU1BPUlQxVFgJCTB4NDAwMAkvKiBQTUFQIFNQT1JUMSBUcmFuc21pdCBETUEgKi8KKyNkZWZpbmUgUE1BUF9TUEkJCTB4NTAwMAkvKiBQTUFQIFNQSSBETUEgKi8KKyNkZWZpbmUgUE1BUF9VQVJUUlgJCTB4NjAwMAkvKiBQTUFQIFVBUlQgUmVjZWl2ZSBETUEgKi8KKyNkZWZpbmUgUE1BUF9VQVJUVFgJCTB4NzAwMAkvKiBQTUFQIFVBUlQgVHJhbnNtaXQgRE1BICovCisKIC8qICAqKioqKioqKioqKioqICBHRU5FUkFMIFBVUlBPU0UgVElNRVIgTUFTS1MgICoqKioqKioqKioqKioqKioqKioqICovCiAKIC8qIFBXTSBUaW1lciBiaXQgZGVmaW5pdGlvbnMgKi8KQEAgLTc1NSw5ICs4MjYsOSBAQAogI2RlZmluZSBUSU1JTDAJCTB4MDAwMQogI2RlZmluZSBUSU1JTDEJCTB4MDAwMgogI2RlZmluZSBUSU1JTDIJCTB4MDAwNAotI2RlZmluZSBUT1ZMX0VSUjAJMHgwMDEwCi0jZGVmaW5lIFRPVkxfRVJSMQkweDAwMjAKLSNkZWZpbmUgVE9WTF9FUlIyCTB4MDA0MAorI2RlZmluZSBUT1ZGX0VSUjAJCTB4MDAxMAkvKiBUaW1lciAwIENvdW50ZXIgT3ZlcmZsb3cJCSovCisjZGVmaW5lIFRPVkZfRVJSMQkJMHgwMDIwCS8qIFRpbWVyIDEgQ291bnRlciBPdmVyZmxvdwkJKi8KKyNkZWZpbmUgVE9WRl9FUlIyCQkweDAwNDAJLyogVGltZXIgMiBDb3VudGVyIE92ZXJmbG93CQkqLwogI2RlZmluZSBUUlVOMAkJMHgxMDAwCiAjZGVmaW5lIFRSVU4xCQkweDIwMDAKICNkZWZpbmUgVFJVTjIJCTB4NDAwMApAQCAtNzY1LDEzICs4MzYsMjEgQEAKICNkZWZpbmUgVElNSUwwX1AJMHgwMAogI2RlZmluZSBUSU1JTDFfUAkweDAxCiAjZGVmaW5lIFRJTUlMMl9QCTB4MDIKLSNkZWZpbmUgVE9WTF9FUlIwX1AJMHgwNAotI2RlZmluZSBUT1ZMX0VSUjFfUAkweDA1Ci0jZGVmaW5lIFRPVkxfRVJSMl9QCTB4MDYKKyNkZWZpbmUgVE9WRl9FUlIwX1AJCTB4MDQKKyNkZWZpbmUgVE9WRl9FUlIxX1AJCTB4MDUKKyNkZWZpbmUgVE9WRl9FUlIyX1AJCTB4MDYKICNkZWZpbmUgVFJVTjBfUAkJMHgwQwogI2RlZmluZSBUUlVOMV9QCQkweDBECiAjZGVmaW5lIFRSVU4yX1AJCTB4MEUKIAorLyogQWx0ZXJuYXRlIERlcHJlY2F0ZWQgTWFjcm9zIFByb3ZpZGVkIEZvciBCYWNrd2FyZHMgQ29kZSBDb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRPVkxfRVJSMCAJCVRPVkZfRVJSMAorI2RlZmluZSBUT1ZMX0VSUjEgCQlUT1ZGX0VSUjEKKyNkZWZpbmUgVE9WTF9FUlIyIAkJVE9WRl9FUlIyCisjZGVmaW5lIFRPVkxfRVJSMF9QCQlUT1ZGX0VSUjBfUAorI2RlZmluZSBUT1ZMX0VSUjFfUCAJCVRPVkZfRVJSMV9QCisjZGVmaW5lIFRPVkxfRVJSMl9QIAkJVE9WRl9FUlIyX1AKKwogLyogVElNRVJ4X0NPTkZJRyBSZWdpc3RlcnMgKi8KICNkZWZpbmUgUFdNX09VVAkJMHgwMDAxCiAjZGVmaW5lIFdEVEhfQ0FQCTB4MDAwMgpAQCAtODQxLDYgKzkyMCwxMCBAQAogCiAvKiBTUElfQ1RMIE1hc2tzICovCiAjZGVmaW5lIFRJTU9EICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwkvKiBUcmFuc2ZlciBpbml0aWF0aW9uIG1vZGUgYW5kIGludGVycnVwdCBnZW5lcmF0aW9uICovCisjZGVmaW5lIFJEQlJfQ09SRQkweDAwMDAJCS8qIAkJUkRCUiBSZWFkIEluaXRpYXRlcywgSVJRIFdoZW4gUkRCUiBGdWxsCQkqLworI2RlZmluZQlUREJSX0NPUkUJMHgwMDAxCQkvKiAJCVREQlIgV3JpdGUgSW5pdGlhdGVzLCBJUlEgV2hlbiBUREJSIEVtcHR5CSovCisjZGVmaW5lIFJEQlJfRE1BCTB4MDAwMgkJLyogCQlETUEgUmVhZCwgRE1BIFVudGlsIEZJRk8gRW1wdHkJCQkJKi8KKyNkZWZpbmUgVERCUl9ETUEJMHgwMDAzCQkvKiAJCURNQSBXcml0ZSwgRE1BIFVudGlsIEZJRk8gRnVsbAkJCQkqLwogI2RlZmluZSBTWiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQJLyogU2VuZCBaZXJvICg9MCkgb3IgbGFzdCAoPTEpIHdvcmQgd2hlbiBUREJSIGVtcHR5LiAqLwogI2RlZmluZSBHTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgJLyogV2hlbiBSREJSIGZ1bGwsIGdldCBtb3JlICg9MSkgZGF0YSBvciBkaXNjYXJkICg9MCkgaW5jb21pbmcgRGF0YSAqLwogI2RlZmluZSBQU1NFICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAJLyogRW5hYmxlICg9MSkgU2xhdmUtU2VsZWN0IGlucHV0IGZvciBNYXN0ZXIuICovCkBAIC04OTQsMTAgKzk3NywyMCBAQAogI2RlZmluZSBSWFMgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogU1BJX1JEQlIgRGF0YSBCdWZmZXIgU3RhdHVzICgwPUVtcHR5LCAxPUZ1bGwpICAqLwogI2RlZmluZSBUWENPTCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAJLyogV2hlbiBzZXQgKD0xKSwgY29ycnVwdCBkYXRhIG1heSBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgICovCiAKKy8qIFNQSXhfRkxHIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkqLworI2RlZmluZSBGTEcxRQkweEZERkYJCS8qIEFjdGl2YXRlcyBTUElfRkxPVVQxIAkJCQkJCQkqLworI2RlZmluZSBGTEcyRQkweEZCRkYJCS8qIEFjdGl2YXRlcyBTUElfRkxPVVQyCQkJCQkJCQkqLworI2RlZmluZSBGTEczRQkweEY3RkYJCS8qIEFjdGl2YXRlcyBTUElfRkxPVVQzCQkJCQkJCQkqLworI2RlZmluZSBGTEc0RQkweEVGRkYJCS8qIEFjdGl2YXRlcyBTUElfRkxPVVQ0CQkJCQkJCQkqLworI2RlZmluZSBGTEc1RQkweERGRkYJCS8qIEFjdGl2YXRlcyBTUElfRkxPVVQ1CQkJCQkJCQkqLworI2RlZmluZSBGTEc2RQkweEJGRkYJCS8qIEFjdGl2YXRlcyBTUElfRkxPVVQ2CQkJCQkJCQkqLworI2RlZmluZSBGTEc3RQkweDdGRkYJCS8qIEFjdGl2YXRlcyBTUElfRkxPVVQ3CQkJCQkJCQkqLworCiAvKiAqKioqKioqKioqKioqKioqKioqKiogIEFTWU5DSFJPTk9VUyBNRU1PUlkgQ09OVFJPTExFUiBNQVNLUyAgKioqKioqKioqKioqKiAqLwogCiAvKiBBTUdDVEwgTWFza3MgKi8KICNkZWZpbmUgQU1DS0VOCQkJMHgwMDAwMDAwMQkvKiBFbmFibGUgQ0xLT1VUICovCisjZGVmaW5lCUFNQkVOX05PTkUJCTB4MDAwMDAwMDAJLyogQWxsIEJhbmtzIERpc2FibGVkCQkJCQkJCQkqLwogI2RlZmluZSBBTUJFTl9CMAkJMHgwMDAwMDAwMgkvKiBFbmFibGUgQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rIDAgb25seSAqLwogI2RlZmluZSBBTUJFTl9CMF9CMQkJMHgwMDAwMDAwNAkvKiBFbmFibGUgQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rcyAwICYgMSBvbmx5ICovCiAjZGVmaW5lIEFNQkVOX0IwX0IxX0IyCQkweDAwMDAwMDA2CS8qIEVuYWJsZSBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmtzIDAsIDEsIGFuZCAyICovCkBAIC0xMDk3LDYgKzExOTAsOSBAQAogI2RlZmluZSBDTF8zCQkJMHgwMDAwMDAwQwkvKiBTRFJBTSBDQVMgbGF0ZW5jeSA9IDMgY3ljbGVzICovCiAjZGVmaW5lIFBGRQkJCTB4MDAwMDAwMTAJLyogRW5hYmxlIFNEUkFNIHByZWZldGNoICovCiAjZGVmaW5lIFBGUAkJCTB4MDAwMDAwMjAJLyogUHJlZmV0Y2ggaGFzIHByaW9yaXR5IG92ZXIgQU1DIHJlcXVlc3RzICovCisjZGVmaW5lIFBBU1JfQUxMCQkweDAwMDAwMDAwCS8qIEFsbCA0IFNEUkFNIEJhbmtzIFJlZnJlc2hlZCBJbiBTZWxmLVJlZnJlc2gJCQkJKi8KKyNkZWZpbmUgUEFTUl9CMF9CMQkJMHgwMDAwMDAxMAkvKiBTRFJBTSBCYW5rcyAwIGFuZCAxIEFyZSBSZWZyZXNoZWQgSW4gU2VsZi1SZWZyZXNoCQkqLworI2RlZmluZSBQQVNSX0IwCQkJMHgwMDAwMDAyMAkvKiBPbmx5IFNEUkFNIEJhbmsgMCBJcyBSZWZyZXNoZWQgSW4gU2VsZi1SZWZyZXNoCQkJKi8KICNkZWZpbmUgVFJBU18xCQkJMHgwMDAwMDA0MAkvKiBTRFJBTSB0UkFTID0gMSBjeWNsZSAqLwogI2RlZmluZSBUUkFTXzIJCQkweDAwMDAwMDgwCS8qIFNEUkFNIHRSQVMgPSAyIGN5Y2xlcyAqLwogI2RlZmluZSBUUkFTXzMJCQkweDAwMDAwMEMwCS8qIFNEUkFNIHRSQVMgPSAzIGN5Y2xlcyAqLwpAQCAtMTE1OCwxOCArMTI1NCw1IEBACiAjZGVmaW5lIFNERUFTRQkJICAgICAgMHgwMDAwMDAxMAkvKiBTRFJBTSBFQUIgc3RpY2t5IGVycm9yIHN0YXR1cyAtIFcxQyAqLwogI2RlZmluZSBCR1NUQVQJCQkweDAwMDAwMDIwCS8qIEJ1cyBncmFudGVkICovCiAKLS8qVlJfQ1RMIE1hc2tzKi8KLSNkZWZpbmUgV0FLRSAgICAgICAgICAgICAgICAgICAgMHgxMDAKLSNkZWZpbmUgVkxFVl82ICAgICAgICAgICAgICAgICAgMHg2MAotI2RlZmluZSBWTEVWXzcgICAgICAgICAgICAgICAgICAweDcwCi0jZGVmaW5lIFZMRVZfOCAgICAgICAgICAgICAgICAgIDB4ODAKLSNkZWZpbmUgVkxFVl85ICAgICAgICAgICAgICAgICAgMHg5MAotI2RlZmluZSBWTEVWXzEwICAgICAgICAgICAgICAgICAweEEwCi0jZGVmaW5lIFZMRVZfMTEgICAgICAgICAgICAgICAgIDB4QjAKLSNkZWZpbmUgVkxFVl8xMiAgICAgICAgICAgICAgICAgMHhDMAotI2RlZmluZSBWTEVWXzEzICAgICAgICAgICAgICAgICAweEQwCi0jZGVmaW5lIFZMRVZfMTQgICAgICAgICAgICAgICAgIDB4RTAKLSNkZWZpbmUgVkxFVl8xNSAgICAgICAgICAgICAgICAgMHhGMAotI2RlZmluZSBGUkVRXzMgICAgICAgICAgICAgICAgICAweDAzCiAKICNlbmRpZgkJCQkvKiBfREVGX0JGNTMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvY2RlZkJGNTM0LmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2NkZWZCRjUzNC5oCmluZGV4IDdiNjU4YzEuLjg0ZTU4ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvY2RlZkJGNTM0LmgKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9jZGVmQkY1MzQuaApAQCAtNTEsMTIgKzUxLDE0IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgaXdyOwogCi0JYmZpbl93cml0ZTE2KFZSX0NUTCwgdmFsKTsKLQlfX2J1aWx0aW5fYmZpbl9zc3luYygpOwogCS8qIEVuYWJsZSB0aGUgUExMIFdha2V1cCBiaXQgaW4gU0lDIElXUiAqLwogCWl3ciA9IGJmaW5fcmVhZDMyKFNJQ19JV1IpOwogCS8qIE9ubHkgYWxsb3cgUFBMIFdha2V1cCkgKi8KIAliZmluX3dyaXRlMzIoU0lDX0lXUiwgSVdSX0VOQUJMRSgwKSk7CisKKwliZmluX3dyaXRlMTYoVlJfQ1RMLCB2YWwpOworCV9fYnVpbHRpbl9iZmluX3NzeW5jKCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJYXNtKCJJRExFOyIpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTczLDcgKzc1LDYgQEAKICNkZWZpbmUgYmZpbl93cml0ZV9TV1JTVCh2YWwpICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUxNihTV1JTVCx2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9TWVNDUigpICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihTWVNDUikKICNkZWZpbmUgYmZpbl93cml0ZV9TWVNDUih2YWwpICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUxNihTWVNDUix2YWwpCi0jZGVmaW5lCXBTSUNfUlZFQ1QJCQkoKHZvaWQgKiB2b2xhdGlsZSAqKVNJQ19SVkVDVCkKICNkZWZpbmUgYmZpbl9yZWFkX1NJQ19SVkVDVCgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKFNJQ19SVkVDVCkKICNkZWZpbmUgYmZpbl93cml0ZV9TSUNfUlZFQ1QodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUzMihTSUNfUlZFQ1QsdmFsKQogI2RlZmluZSBiZmluX3JlYWRfU0lDX0lNQVNLKCkgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoU0lDX0lNQVNLKQpAQCAtMzk4LDEwICszOTksMTQgQEAKICNkZWZpbmUgYmZpbl93cml0ZV9FQklVX1NEU1RBVCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihFQklVX1NEU1RBVCx2YWwpCiAKIC8qIERNQSBUcmFmZmljIENvbnRyb2wgUmVnaXN0ZXJzCQkJCQkJCQkJCQkJCSovCi0jZGVmaW5lCXBETUFfVENQRVIJCQkoKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopRE1BX1RDUEVSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BX1RDX1BFUigpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KERNQV9UQ19QRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDX1BFUih2YWwpICAgICAgICAgICAgYmZpbl93cml0ZTE2KERNQV9UQ19QRVIsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BX1RDX0NOVCgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KERNQV9UQ19DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDX0NOVCh2YWwpICAgICAgICAgICAgYmZpbl93cml0ZTE2KERNQV9UQ19DTlQsdmFsKQorCisvKiBBbHRlcm5hdGUgZGVwcmVjYXRlZCByZWdpc3RlciBuYW1lcyAoYmVsb3cpIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29kZSBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIGJmaW5fcmVhZF9ETUFfVENQRVIoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFfVENQRVIpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDUEVSKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMTYoRE1BX1RDUEVSLHZhbCkKLSNkZWZpbmUJcERNQV9UQ0NOVAkJCSgodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilETUFfVENDTlQpCiAjZGVmaW5lIGJmaW5fcmVhZF9ETUFfVENDTlQoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihETUFfVENDTlQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRE1BX1RDQ05UKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMTYoRE1BX1RDQ05ULHZhbCkKIApAQCAtMTA3Niw4ICsxMDgxLDYgQEAKICNkZWZpbmUgYmZpbl93cml0ZV9DQU5fVUNSQyh2YWwpICAgICAgICAgICAgIGJmaW5fd3JpdGUxNihDQU5fVUNSQyx2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9DQU5fVUNDTkYoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQxNihDQU5fVUNDTkYpCiAjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOX1VDQ05GKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMTYoQ0FOX1VDQ05GLHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0NBTl9TRkNNVkVSMigpICAgICAgICAgICAgIGJmaW5fcmVhZDE2KENBTl9TRkNNVkVSMikKLSNkZWZpbmUgYmZpbl93cml0ZV9DQU5fU0ZDTVZFUjIodmFsKSAgICAgICAgIGJmaW5fd3JpdGUxNihDQU5fU0ZDTVZFUjIsdmFsKQogCiAvKiBNYWlsYm94IEFjY2VwdGFuY2UgTWFza3MgKi8KICNkZWZpbmUgYmZpbl9yZWFkX0NBTl9BTTAwTCgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KENBTl9BTTAwTCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvY2RlZkJGNTM3LmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2NkZWZCRjUzNy5oCmluZGV4IDkzMmExYjYuLmI4ZmM5NDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvY2RlZkJGNTM3LmgKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9jZGVmQkY1MzcuaApAQCAtNDAsNyArNDAsNiBAQAogCiAvKiBJbmNsdWRlIE1hY3JvICJEZWZpbmVzIiBGb3IgRU1BQyAoVW5pcXVlIHRvIEJGNTM2L0JGNTM3CQkqLwogLyogMTAvMTAwIEV0aGVybmV0IENvbnRyb2xsZXIJKDB4RkZDMDMwMDAgLSAweEZGQzAzMUZGKSAJCQkJCQkqLwotI2RlZmluZQlwRU1BQ19PUE1PREUJCSgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgKilFTUFDX09QTU9ERSkKICNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfT1BNT0RFKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfT1BNT0RFKQogI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfT1BNT0RFKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfT1BNT0RFLHZhbCkKICNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfQUREUkxPKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfQUREUkxPKQpAQCAtODAsNyArNzksNiBAQAogI2RlZmluZSBiZmluX3JlYWRfRU1BQ19XS1VQX0ZGQ1JDMSgpICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19XS1VQX0ZGQ1JDMSkKICNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1dLVVBfRkZDUkMxKHZhbCkgICAgIGJmaW5fd3JpdGUzMihFTUFDX1dLVVBfRkZDUkMxLHZhbCkKIAotI2RlZmluZQlwRU1BQ19TWVNDVEwJCSgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgKilFTUFDX1NZU0NUTCkKICNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfU1lTQ1RMKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfU1lTQ1RMKQogI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfU1lTQ1RMKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfU1lTQ1RMLHZhbCkKICNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfU1lTVEFUKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfU1lTVEFUKQpAQCAtMTQ3LDcgKzE0NSw2IEBACiAjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19SWENfU0hPUlQodmFsKSAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19SWENfU0hPUlQsdmFsKQogI2RlZmluZSBiZmluX3JlYWRfRU1BQ19SWENfRVE2NCgpICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19SWENfRVE2NCkKICNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19FUTY0KHZhbCkgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1JYQ19FUTY0LHZhbCkKLSNkZWZpbmUJcEVNQUNfUlhDX0xUMTI4CQkoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgICopRU1BQ19SWENfTFQxMjgpCiAjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19MVDEyOCgpICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1JYQ19MVDEyOCkKICNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1JYQ19MVDEyOCh2YWwpICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1JYQ19MVDEyOCx2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1JYQ19MVDI1NigpICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1JYQ19MVDI1NikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvZGVmQkY1MzQuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvZGVmQkY1MzQuaAppbmRleCBlNjA1ZTk3MC4uMTg1OWYyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9kZWZCRjUzNC5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvZGVmQkY1MzQuaApAQCAtMjE2LDggKzIxNiwxMiBAQAogI2RlZmluZSBFQklVX1NEU1RBVAkJCTB4RkZDMDBBMUMJLyogU0RSQU0gU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogLyogRE1BIFRyYWZmaWMgQ29udHJvbCBSZWdpc3RlcnMJCQkJCQkJCQkJCQkJKi8KLSNkZWZpbmUgRE1BX1RDUEVSCQkJMHhGRkMwMEIwQwkvKiBUcmFmZmljIENvbnRyb2wgUGVyaW9kcyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIERNQV9UQ0NOVAkJCTB4RkZDMDBCMTAJLyogVHJhZmZpYyBDb250cm9sIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyICAgICAgKi8KKyNkZWZpbmUgRE1BX1RDX1BFUgkJCTB4RkZDMDBCMEMJLyogVHJhZmZpYyBDb250cm9sIFBlcmlvZHMgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBETUFfVENfQ05UCQkJMHhGRkMwMEIxMAkvKiBUcmFmZmljIENvbnRyb2wgQ3VycmVudCBDb3VudHMgUmVnaXN0ZXIJKi8KKworLyogQWx0ZXJuYXRlIGRlcHJlY2F0ZWQgcmVnaXN0ZXIgbmFtZXMgKGJlbG93KSBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvZGUgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBETUFfVENQRVIJCQkweEZGQzAwQjBDCS8qIFRyYWZmaWMgQ29udHJvbCBQZXJpb2RzIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgRE1BX1RDQ05UCQkJMHhGRkMwMEIxMAkvKiBUcmFmZmljIENvbnRyb2wgQ3VycmVudCBDb3VudHMgUmVnaXN0ZXIJKi8KIAogLyogRE1BIENvbnRyb2xsZXIgKDB4RkZDMDBDMDAgLSAweEZGQzAwRkZGKQkJCQkJCQkJCQkJCQkJCSovCiAjZGVmaW5lIERNQTBfTkVYVF9ERVNDX1BUUgkJMHhGRkMwMEMwMAkvKiBETUEgQ2hhbm5lbCAwIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICAgICAgICAgICAgICAgKi8KQEAgLTU2Myw3ICs1NjcsNyBAQAogI2RlZmluZSBDQU5fR0lGCQkJCTB4RkZDMDJBOUMJLyogR2xvYmFsIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIENBTl9DT05UUk9MCQkJMHhGRkMwMkFBMAkvKiBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBDQU5fSU5UUgkJCTB4RkZDMDJBQTQJLyogSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENBTl9TRkNNVkVSCQkJMHhGRkMwMkFBOAkvKiBWZXJzaW9uIENvZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCiAjZGVmaW5lIENBTl9NQlRECQkJMHhGRkMwMkFBQwkvKiBNYWlsYm94IFRlbXBvcmFyeSBEaXNhYmxlIEZlYXR1cmUgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIENBTl9FV1IJCQkJMHhGRkMwMkFCMAkvKiBQcm9ncmFtbWFibGUgV2FybmluZyBMZXZlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQ0FOX0VTUgkJCQkweEZGQzAyQUI0CS8qIEVycm9yIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDI2LDEwICsxMDMwLDExIEBACiAjZGVmaW5lCVZMRVZfMTMwCQkweDAwRjAJLyogICAgICAgICAgICAgIFZMRVYgPSAxLjMwIFYgKC01JSAtICsxMCUgQWNjdXJhY3kpICAgICAqLwogCiAjZGVmaW5lCVdBS0UJCQkweDAxMDAJLyogRW5hYmxlIFJUQy9SZXNldCBXYWtldXAgRnJvbSBIaWJlcm5hdGUgICAgICAgKi8KLSNkZWZpbmUgUEhZV0UJCQkweDAyMDAJLyogRW5hYmxlIFBIWSBXYWtldXAgRnJvbSBIaWJlcm5hdGUgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZQlDQU5XRQkJCTB4MDQwMAkvKiBFbmFibGUgQ0FOIFdha2V1cCBGcm9tIEhpYmVybmF0ZSAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCVBIWUNMS09FCQkweDQwMDAJLyogUEhZIENsb2NrIE91dHB1dCBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUNLRUxPVwkJCTB4ODAwMAkvKiBFbmFibGUgRHJpdmUgQ0tFIExvdyBEdXJpbmcgUmVzZXQgICAgICAgICAgICAqLworI2RlZmluZQlDQU5XRQkJCTB4MDIwMAkvKiBFbmFibGUgQ0FOIFdha2V1cCBGcm9tIEhpYmVybmF0ZQkJCSovCisjZGVmaW5lCVBIWVdFCQkJMHgwNDAwCS8qIEVuYWJsZSBQSFkgV2FrZXVwIEZyb20gSGliZXJuYXRlCQkJKi8KKyNkZWZpbmUJQ0xLQlVGT0UJCTB4NDAwMAkvKiBDTEtJTiBCdWZmZXIgT3V0cHV0IEVuYWJsZSAqLworI2RlZmluZQlQSFlDTEtPRQkJQ0xLQlVGT0UJLyogQWx0ZXJuYXRpdmUgbGVnYWN5IG5hbWUgZm9yIHRoZSBhYm92ZSAqLworI2RlZmluZQlTQ0tFTE9XCQkweDgwMDAJLyogRW5hYmxlIERyaXZlIENLRSBMb3cgRHVyaW5nIFJlc2V0CQkqLwogCiAvKiBQTExfU1RBVCBNYXNrcwkJCQkJCQkJCQkJCQkJCQkJKi8KICNkZWZpbmUgQUNUSVZFX1BMTEVOQUJMRUQJMHgwMDAxCS8qIFByb2Nlc3NvciBJbiBBY3RpdmUgTW9kZSBXaXRoIFBMTCBFbmFibGVkICAgICovCkBAIC0xMDUwLDcgKzEwNTUsNyBAQAogI2RlZmluZSBSRVNFVF9TT0ZUV0FSRQkJMHg4MDAwCS8qIFNXIFJlc2V0IE9jY3VycmVkIFNpbmNlIExhc3QgUmVhZCBPZiBTV1JTVCAgICovCiAKIC8qIFNZU0NSIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBCTU9ERQkJCQkweDAwMDYJLyogQm9vdCBNb2RlIC0gTGF0Y2hlZCBEdXJpbmcgSFcgUmVzZXQgRnJvbSBNb2RlIFBpbnMgICAqLworI2RlZmluZSBCTU9ERQkJCQkweDAwMDcJLyogQm9vdCBNb2RlIC0gTGF0Y2hlZCBEdXJpbmcgSFcgUmVzZXQgRnJvbSBNb2RlIFBpbnMgICAqLwogI2RlZmluZQlOT0JPT1QJCQkJMHgwMDEwCS8qIEV4ZWN1dGUgRnJvbSBMMSBvciBBU1lOQyBCYW5rIDAgV2hlbiBCTU9ERSA9IDAgICAgICAgICAgICAgICAqLwogCiAvKiAqKioqKioqKioqKioqICBTWVNURU0gSU5URVJSVVBUIENPTlRST0xMRVIgTUFTS1MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTExMDcsMTkgKzExMTIsOSBAQAogI2RlZmluZSBJV1JfRU5BQkxFKHgpCSgxIDw8ICgoeCkmMHgxRikpCS8qIFdha2V1cCBFbmFibGUgUGVyaXBoZXJhbCAjeCAgICAgICAgICAqLwogI2RlZmluZSBJV1JfRElTQUJMRSh4KQkoMHhGRkZGRkZGRiBeICgxIDw8ICgoeCkmMHgxRikpKQkvKiBXYWtldXAgRGlzYWJsZSBQZXJpcGhlcmFsICN4ICAgICAgICAgKi8KIAotLyogKioqKioqKioqKioqKioqICBXQVRDSERPRyBUSU1FUiBNQVNLUyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFdET0dfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBXRE9HX1JFU0VUCQkweDAwMDAJLyogR2VuZXJhdGUgUmVzZXQgRXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgV0RPR19OTUkJCTB4MDAwMgkvKiBHZW5lcmF0ZSBOb24tTWFza2FibGUgSW50ZXJydXB0IChOTUkpIEV2ZW50ICAqLwotI2RlZmluZSBXRE9HX0dQSQkJMHgwMDA0CS8qIEdlbmVyYXRlIEdlbmVyYWwgUHVycG9zZSAoR1ApIEludGVycnVwdCAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgV0RPR19OT05FCQkweDAwMDYJLyogRGlzYWJsZSBXYXRjaGRvZyBUaW1lciBJbnRlcnJ1cHRzICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUTVJfRU4JCQkweDBGRjAJLyogV2F0Y2hkb2cgQ291bnRlciBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJVE1SX0RJUwkJCTB4MEFEMAkvKiBXYXRjaGRvZyBDb3VudGVyIERpc2FibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUUk8JCQkweDgwMDAJLyogV2F0Y2hkb2cgRXhwaXJlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQogLyogKioqKioqKioqKioqKiogVUFSVCBDT05UUk9MTEVSIE1BU0tTICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBVQVJUeF9MQ1IgTWFza3MJCQkJCQkJCQkJCQkqLwotI2RlZmluZSBXTFMoeCkJCSgoKCh4KSYweDMpLTUpICYgMHgwMykJLyogV29yZCBMZW5ndGggU2VsZWN0ICAgKi8KKyNkZWZpbmUgV0xTKHgpCQkoKCh4KS01KSAmIDB4MDMpCS8qIFdvcmQgTGVuZ3RoIFNlbGVjdCAgICovCiAjZGVmaW5lIFNUQgkJCTB4MDQJLyogU3RvcCBCaXRzICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBQRU4JCQkweDA4CS8qIFBhcml0eSBFbmFibGUgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgRVBTCQkJMHgxMAkvKiBFdmVuIFBhcml0eSBTZWxlY3QgICAqLwpAQCAtMTEyOCw4ICsxMTIzLDggQEAKICNkZWZpbmUgRExBQgkJMHg4MAkvKiBEaXZpc29yIExhdGNoIEFjY2VzcyAqLwogCiAvKiBVQVJUeF9NQ1IgTWFzawkJCQkJCQkJCQkqLwotI2RlZmluZSBMT09QCQkweDEwCS8qIExvb3BiYWNrIE1vZGUgRW5hYmxlICAgICAgICAgKi8KLQorI2RlZmluZSBMT09QX0VOQQkJMHgxMAkvKiBMb29wYmFjayBNb2RlIEVuYWJsZSAgICAgICAgICovCisjZGVmaW5lIExPT1BfRU5BX1AJMHgwNAogLyogVUFSVHhfTFNSIE1hc2tzCQkJCQkJCQkJCSovCiAjZGVmaW5lIERSCQkJMHgwMQkvKiBEYXRhIFJlYWR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgT0UJCQkweDAyCS8qIE92ZXJydW4gRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTIyOSwxMCArMTIyNCwxMCBAQAogI2RlZmluZSBUSU1JTDEJCQkweDAwMDAwMDAyCS8qIFRpbWVyIDEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRJTUlMMgkJCTB4MDAwMDAwMDQJLyogVGltZXIgMiBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNSUwzCQkJMHgwMDAwMDAwOAkvKiBUaW1lciAzIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUT1ZMX0VSUjAJCTB4MDAwMDAwMTAJLyogVGltZXIgMCBDb3VudGVyIE92ZXJmbG93ICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVE9WTF9FUlIxCQkweDAwMDAwMDIwCS8qIFRpbWVyIDEgQ291bnRlciBPdmVyZmxvdyAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRPVkxfRVJSMgkJMHgwMDAwMDA0MAkvKiBUaW1lciAyIENvdW50ZXIgT3ZlcmZsb3cgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUT1ZMX0VSUjMJCTB4MDAwMDAwODAJLyogVGltZXIgMyBDb3VudGVyIE92ZXJmbG93ICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVE9WRl9FUlIwCQkweDAwMDAwMDEwCS8qIFRpbWVyIDAgQ291bnRlciBPdmVyZmxvdwkJCSovCisjZGVmaW5lIFRPVkZfRVJSMQkJMHgwMDAwMDAyMAkvKiBUaW1lciAxIENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUT1ZGX0VSUjIJCTB4MDAwMDAwNDAJLyogVGltZXIgMiBDb3VudGVyIE92ZXJmbG93CQkJKi8KKyNkZWZpbmUgVE9WRl9FUlIzCQkweDAwMDAwMDgwCS8qIFRpbWVyIDMgQ291bnRlciBPdmVyZmxvdwkJCSovCiAjZGVmaW5lIFRSVU4wCQkJMHgwMDAwMTAwMAkvKiBUaW1lciAwIFNsYXZlIEVuYWJsZSBTdGF0dXMgICAgICAgICAgKi8KICNkZWZpbmUgVFJVTjEJCQkweDAwMDAyMDAwCS8qIFRpbWVyIDEgU2xhdmUgRW5hYmxlIFN0YXR1cyAgICAgICAgICAqLwogI2RlZmluZSBUUlVOMgkJCTB4MDAwMDQwMDAJLyogVGltZXIgMiBTbGF2ZSBFbmFibGUgU3RhdHVzICAgICAgICAgICovCkBAIC0xMjQxLDE1ICsxMjM2LDI0IEBACiAjZGVmaW5lIFRJTUlMNQkJCTB4MDAwMjAwMDAJLyogVGltZXIgNSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNSUw2CQkJMHgwMDA0MDAwMAkvKiBUaW1lciA2IEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUSU1JTDcJCQkweDAwMDgwMDAwCS8qIFRpbWVyIDcgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRPVkxfRVJSNAkJMHgwMDEwMDAwMAkvKiBUaW1lciA0IENvdW50ZXIgT3ZlcmZsb3cgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUT1ZMX0VSUjUJCTB4MDAyMDAwMDAJLyogVGltZXIgNSBDb3VudGVyIE92ZXJmbG93ICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVE9WTF9FUlI2CQkweDAwNDAwMDAwCS8qIFRpbWVyIDYgQ291bnRlciBPdmVyZmxvdyAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRPVkxfRVJSNwkJMHgwMDgwMDAwMAkvKiBUaW1lciA3IENvdW50ZXIgT3ZlcmZsb3cgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUT1ZGX0VSUjQJCTB4MDAxMDAwMDAJLyogVGltZXIgNCBDb3VudGVyIE92ZXJmbG93CQkJKi8KKyNkZWZpbmUgVE9WRl9FUlI1CQkweDAwMjAwMDAwCS8qIFRpbWVyIDUgQ291bnRlciBPdmVyZmxvdwkJCSovCisjZGVmaW5lIFRPVkZfRVJSNgkJMHgwMDQwMDAwMAkvKiBUaW1lciA2IENvdW50ZXIgT3ZlcmZsb3cJCQkqLworI2RlZmluZSBUT1ZGX0VSUjcJCTB4MDA4MDAwMDAJLyogVGltZXIgNyBDb3VudGVyIE92ZXJmbG93CQkJKi8KICNkZWZpbmUgVFJVTjQJCQkweDEwMDAwMDAwCS8qIFRpbWVyIDQgU2xhdmUgRW5hYmxlIFN0YXR1cyAgICAgICAgICAqLwogI2RlZmluZSBUUlVONQkJCTB4MjAwMDAwMDAJLyogVGltZXIgNSBTbGF2ZSBFbmFibGUgU3RhdHVzICAgICAgICAgICovCiAjZGVmaW5lIFRSVU42CQkJMHg0MDAwMDAwMAkvKiBUaW1lciA2IFNsYXZlIEVuYWJsZSBTdGF0dXMgICAgICAgICAgKi8KICNkZWZpbmUgVFJVTjcJCQkweDgwMDAwMDAwCS8qIFRpbWVyIDcgU2xhdmUgRW5hYmxlIFN0YXR1cyAgICAgICAgICAqLwogCisvKiBBbHRlcm5hdGUgRGVwcmVjYXRlZCBNYWNyb3MgUHJvdmlkZWQgRm9yIEJhY2t3YXJkcyBDb2RlIENvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgVE9WTF9FUlIwIFRPVkZfRVJSMAorI2RlZmluZSBUT1ZMX0VSUjEgVE9WRl9FUlIxCisjZGVmaW5lIFRPVkxfRVJSMiBUT1ZGX0VSUjIKKyNkZWZpbmUgVE9WTF9FUlIzIFRPVkZfRVJSMworI2RlZmluZSBUT1ZMX0VSUjQgVE9WRl9FUlI0CisjZGVmaW5lIFRPVkxfRVJSNSBUT1ZGX0VSUjUKKyNkZWZpbmUgVE9WTF9FUlI2IFRPVkZfRVJSNgorI2RlZmluZSBUT1ZMX0VSUjcgVE9WRl9FUlI3CiAvKiBUSU1FUnhfQ09ORklHIE1hc2tzCQkJCQkJCQkJCQkJCSovCiAjZGVmaW5lIFBXTV9PVVQJCQkweDAwMDEJLyogUHVsc2UtV2lkdGggTW9kdWxhdGlvbiBPdXRwdXQgTW9kZSAgICovCiAjZGVmaW5lIFdEVEhfQ0FQCQkweDAwMDIJLyogV2lkdGggQ2FwdHVyZSBJbnB1dCBNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTY0Nyw2ICsxNjUxLDggQEAKICNkZWZpbmUgRUJTWl8zMgkJCTB4MDAwMgkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIFNpemUgPSAzMk1CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEVCU1pfNjQJCQkweDAwMDQJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gNjRNQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBFQlNaXzEyOAkJMHgwMDA2CS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDEyOE1CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRUJTWl8yNTYJCTB4MDAwOAkJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBTaXplID0gMjU2TUIgCSovCisjZGVmaW5lIEVCU1pfNTEyCQkweDAwMEEJCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgU2l6ZSA9IDUxMk1CCQkqLwogI2RlZmluZSBFQkNBV184CQkJMHgwMDAwCS8qIFNEUkFNIEV4dGVybmFsIEJhbmsgQ29sdW1uIEFkZHJlc3MgV2lkdGggPSA4IEJpdHMgICAgKi8KICNkZWZpbmUgRUJDQVdfOQkJCTB4MDAxMAkvKiBTRFJBTSBFeHRlcm5hbCBCYW5rIENvbHVtbiBBZGRyZXNzIFdpZHRoID0gOSBCaXRzICAgICovCiAjZGVmaW5lIEVCQ0FXXzEwCQkweDAwMjAJLyogU0RSQU0gRXh0ZXJuYWwgQmFuayBDb2x1bW4gQWRkcmVzcyBXaWR0aCA9IDEwIEJpdHMgICAqLwpAQCAtMTg1OSw4ICsxODY1LDEwIEBACiAjZGVmaW5lCVRYRUNOVAkJMHhGRjAwCS8qIFRyYW5zbWl0IEVycm9yIENvdW50ZXIgICAgICAgKi8KIAogLyogQ0FOX0lOVFIgTWFza3MJCQkJCQkJCQkJCSovCi0jZGVmaW5lCU1CUklGCQkweDAwMDEJLyogTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCAgICAqLwotI2RlZmluZQlNQlRJRgkJMHgwMDAyCS8qIE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0ICAgKi8KKyNkZWZpbmUJTUJSSVJRCTB4MDAwMQkvKiBNYWlsYm94IFJlY2VpdmUgSW50ZXJydXB0CSovCisjZGVmaW5lCU1CUklGCQlNQlJJUlEJLyogbGVnYWN5ICovCisjZGVmaW5lCU1CVElSUQkweDAwMDIJLyogTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQJKi8KKyNkZWZpbmUJTUJUSUYJCU1CVElSUQkvKiBsZWdhY3kgKi8KICNkZWZpbmUJR0lSUQkJMHgwMDA0CS8qIEdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lCVNNQUNLCQkweDAwMDgJLyogU2xlZXAgTW9kZSBBY2tub3dsZWRnZSAgICAgICAgICAgICAgICovCiAjZGVmaW5lCUNBTlRYCQkweDAwNDAJLyogQ0FOIFRYIEJ1cyBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI0NDUsOCArMjQ1Myw4IEBACiAjZGVmaW5lCVBKQ0VfU1BJCQkweDAwMDQJLyogICAgICAgICAgICAgIEVuYWJsZSBTUElfU1NFTDcgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAjZGVmaW5lCVBGREUJCQkweDAwMDgJLyogUG9ydCBGIERNQSBSZXF1ZXN0IEVuYWJsZSAgICAgICAgICAgICovCi0jZGVmaW5lCVBHREVfVUFSVAkJMHgwMDAwCS8qICAgICAgICAgICAgICBFbmFibGUgVUFSVDAgUlgvVFggICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJUEdERV9ETUEJCTB4MDAwOAkvKiAgICAgICAgICAgICAgRW5hYmxlIERNQVIxOjAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lCVBGREVfVUFSVAkJMHgwMDAwCS8qICAgICAgICAgICAgICBFbmFibGUgVUFSVDAgUlgvVFggICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUJUEZERV9ETUEJCTB4MDAwOAkvKiAgICAgICAgICAgICAgRW5hYmxlIERNQVIxOjAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICNkZWZpbmUJUEZURQkJCTB4MDAxMAkvKiBQb3J0IEYgVGltZXIgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZQlQRlRFX1VBUlQJCTB4MDAwMAkvKiAgICAgICAgICAgICAgRW5hYmxlIFVBUlQxIFJYL1RYICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yNDk4LDQgKzI1MDYsMjAgQEAKICNkZWZpbmUJT0kJCQkweDQwMDAJLyogT3ZlcmZsb3cgSW50ZXJydXB0IEdlbmVyYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZQlCREkJCQkweDgwMDAJLyogQmxvY2sgRG9uZSBJbnRlcnJ1cHQgR2VuZXJhdGVkICAgICAgICAgICAgICAgICAgICAgICAqLwogCisvKiBlbnRyeSBhZGRyZXNzZXMgb2YgdGhlIHVzZXItY2FsbGFibGUgQm9vdCBST00gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgX0JPT1RST01fUkVTRVQgMHhFRjAwMDAwMCAKKyNkZWZpbmUgX0JPT1RST01fRklOQUxfSU5JVCAweEVGMDAwMDAyIAorI2RlZmluZSBfQk9PVFJPTV9ET19NRU1PUllfRE1BIDB4RUYwMDAwMDYKKyNkZWZpbmUgX0JPT1RST01fQk9PVF9EWEVfRkxBU0ggMHhFRjAwMDAwOCAKKyNkZWZpbmUgX0JPT1RST01fQk9PVF9EWEVfU1BJIDB4RUYwMDAwMEEgCisjZGVmaW5lIF9CT09UUk9NX0JPT1RfRFhFX1RXSSAweEVGMDAwMDBDIAorI2RlZmluZSBfQk9PVFJPTV9HRVRfRFhFX0FERFJFU1NfRkxBU0ggMHhFRjAwMDAxMAorI2RlZmluZSBfQk9PVFJPTV9HRVRfRFhFX0FERFJFU1NfU1BJIDB4RUYwMDAwMTIKKyNkZWZpbmUgX0JPT1RST01fR0VUX0RYRV9BRERSRVNTX1RXSSAweEVGMDAwMDE0CisKKy8qIEFsdGVybmF0ZSBEZXByZWNhdGVkIE1hY3JvcyBQcm92aWRlZCBGb3IgQmFja3dhcmRzIENvZGUgQ29tcGF0aWJpbGl0eSAqLworI2RlZmluZQlQR0RFX1VBUlQgICBQRkRFX1VBUlQKKyNkZWZpbmUJUEdERV9ETUEgICAgUEZERV9ETUEKKyNkZWZpbmUJQ0tFTE9XCQlTQ0tFTE9XCiAjZW5kaWYJCQkJLyogX0RFRl9CRjUzNF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2RlZkJGNTM3LmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2RlZkJGNTM3LmgKaW5kZXggMjZmOWMwMi4uM2Y0NTU5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9kZWZCRjUzNy5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvZGVmQkY1MzcuaApAQCAtMzIsMTIgKzMyLDEyIEBACiAjaWZuZGVmIF9ERUZfQkY1MzdfSAogI2RlZmluZSBfREVGX0JGNTM3X0gKIAotLyppbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zKi8KLSNpbmNsdWRlICJkZWZCRjUzNy5oIgotCi0vKmluY2x1ZGUgY29yZSBzcGVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zKi8KKy8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMqLwogI2luY2x1ZGUgPGFzbS9tYWNoLWNvbW1vbi9jZGVmX0xQQmxhY2tmaW4uaD4KIAorLyogSW5jbHVkZSBhbGwgTU1SIGFuZCBiaXQgZGVmaW5lcyBjb21tb24gdG8gQkY1MzQgKi8KKyNpbmNsdWRlICJkZWZCRjUzNC5oIgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKiBEZWZpbmUgRU1BQyBTZWN0aW9uIFVuaXF1ZSB0byBCRjUzNi9CRjUzNwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQyLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOGIzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0Mi5oCkBAIC0wLDAgKzEsNTkwIEBACisvKgorICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0Mi5oCisgKiBCYXNlZCBvbjoKKyAqIEF1dGhvcjoKKyAqCisgKiBDcmVhdGVkOgorICogRGVzY3JpcHRpb246CisgKgorICogUmV2OgorICoKKyAqIE1vZGlmaWVkOgorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX0NERUZfQkY1NDJfSAorI2RlZmluZSBfQ0RFRl9CRjU0Ml9ICisKKy8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJkZWZCRjU0Mi5oIgorCisvKiBpbmNsdWRlIGNvcmUgc2JmaW5fcmVhZF8oKWVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zICovCisjaW5jbHVkZSA8YXNtL21hY2gtY29tbW9uL2NkZWZfTFBCbGFja2Zpbi5oPgorCisvKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjU0MiAqLworCisvKiBpbmNsdWRlIGNkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IGJmaW5fcmVhZF8oKXJvY2Vzc29ycyAqLworI2luY2x1ZGUgImNkZWZCRjU0eF9iYXNlLmgiCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjU0MiB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KKworLyogQVRBUEkgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0NPTlRST0woKQkJYmZpbl9yZWFkMTYoQVRBUElfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoQVRBUElfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9ERVZfQUREUigpCQliZmluX3JlYWQxNihBVEFQSV9ERVZfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9ERVZfQUREUih2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfREVWX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0RFVl9UWEJVRigpCQliZmluX3JlYWQxNihBVEFQSV9ERVZfVFhCVUYpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfREVWX1RYQlVGKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9ERVZfVFhCVUYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0RFVl9SWEJVRigpCQliZmluX3JlYWQxNihBVEFQSV9ERVZfUlhCVUYpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfREVWX1JYQlVGKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9ERVZfUlhCVUYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0lOVF9NQVNLKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0lOVF9NQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0lOVF9NQVNLKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9JTlRfTUFTSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfSU5UX1NUQVRVUygpCQliZmluX3JlYWQxNihBVEFQSV9JTlRfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0lOVF9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoQVRBUElfSU5UX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfWEZFUl9MRU4oKQkJYmZpbl9yZWFkMTYoQVRBUElfWEZFUl9MRU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfWEZFUl9MRU4odmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1hGRVJfTEVOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9MSU5FX1NUQVRVUygpCQliZmluX3JlYWQxNihBVEFQSV9MSU5FX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9MSU5FX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9MSU5FX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfU01fU1RBVEUoKQkJYmZpbl9yZWFkMTYoQVRBUElfU01fU1RBVEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfU01fU1RBVEUodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1NNX1NUQVRFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9URVJNSU5BVEUoKQkJYmZpbl9yZWFkMTYoQVRBUElfVEVSTUlOQVRFKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1RFUk1JTkFURSh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfVEVSTUlOQVRFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9QSU9fVEZSQ05UKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1BJT19URlJDTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfUElPX1RGUkNOVCh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9QSU9fVEZSQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9ETUFfVEZSQ05UKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0RNQV9URlJDTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfRE1BX1RGUkNOVCh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9ETUFfVEZSQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9VTUFJTl9URlJDTlQoKQkJYmZpbl9yZWFkMTYoQVRBUElfVU1BSU5fVEZSQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1VNQUlOX1RGUkNOVCh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9VTUFJTl9URlJDTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1VETUFPVVRfVEZSQ05UKCkJYmZpbl9yZWFkMTYoQVRBUElfVURNQU9VVF9URlJDTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVURNQU9VVF9URlJDTlQodmFsKQliZmluX3dyaXRlMTYoQVRBUElfVURNQU9VVF9URlJDTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1JFR19USU1fMCgpCQliZmluX3JlYWQxNihBVEFQSV9SRUdfVElNXzApCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfUkVHX1RJTV8wKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9SRUdfVElNXzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1BJT19USU1fMCgpCQliZmluX3JlYWQxNihBVEFQSV9QSU9fVElNXzApCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfUElPX1RJTV8wKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9QSU9fVElNXzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1BJT19USU1fMSgpCQliZmluX3JlYWQxNihBVEFQSV9QSU9fVElNXzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfUElPX1RJTV8xKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9QSU9fVElNXzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX01VTFRJX1RJTV8wKCkJCWJmaW5fcmVhZDE2KEFUQVBJX01VTFRJX1RJTV8wKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX01VTFRJX1RJTV8wKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX01VTFRJX1RJTV8wLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9NVUxUSV9USU1fMSgpCQliZmluX3JlYWQxNihBVEFQSV9NVUxUSV9USU1fMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9NVUxUSV9USU1fMSh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9NVUxUSV9USU1fMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfTVVMVElfVElNXzIoKQkJYmZpbl9yZWFkMTYoQVRBUElfTVVMVElfVElNXzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfTVVMVElfVElNXzIodmFsKQliZmluX3dyaXRlMTYoQVRBUElfTVVMVElfVElNXzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1VMVFJBX1RJTV8wKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1VMVFJBX1RJTV8wKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1VMVFJBX1RJTV8wKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1VMVFJBX1RJTV8wLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9VTFRSQV9USU1fMSgpCQliZmluX3JlYWQxNihBVEFQSV9VTFRSQV9USU1fMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9VTFRSQV9USU1fMSh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9VTFRSQV9USU1fMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVUxUUkFfVElNXzIoKQkJYmZpbl9yZWFkMTYoQVRBUElfVUxUUkFfVElNXzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVUxUUkFfVElNXzIodmFsKQliZmluX3dyaXRlMTYoQVRBUElfVUxUUkFfVElNXzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1VMVFJBX1RJTV8zKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1VMVFJBX1RJTV8zKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1VMVFJBX1RJTV8zKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1VMVFJBX1RJTV8zLCB2YWwpCisKKy8qIFNESCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfU0RIX1BXUl9DVEwoKQkJYmZpbl9yZWFkMTYoU0RIX1BXUl9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BXUl9DVEwodmFsKQliZmluX3dyaXRlMTYoU0RIX1BXUl9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9DTEtfQ1RMKCkJCWJmaW5fcmVhZDE2KFNESF9DTEtfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9DTEtfQ1RMKHZhbCkJYmZpbl93cml0ZTE2KFNESF9DTEtfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfQVJHVU1FTlQoKQliZmluX3JlYWQzMihTREhfQVJHVU1FTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0FSR1VNRU5UKHZhbCkJYmZpbl93cml0ZTMyKFNESF9BUkdVTUVOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX0NPTU1BTkQoKQkJYmZpbl9yZWFkMTYoU0RIX0NPTU1BTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0NPTU1BTkQodmFsKQliZmluX3dyaXRlMTYoU0RIX0NPTU1BTkQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9SRVNQX0NNRCgpCWJmaW5fcmVhZDE2KFNESF9SRVNQX0NNRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUkVTUF9DTUQodmFsKQliZmluX3dyaXRlMTYoU0RIX1JFU1BfQ01ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUkVTUE9OU0UwKCkJYmZpbl9yZWFkMzIoU0RIX1JFU1BPTlNFMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUkVTUE9OU0UwKHZhbCkJYmZpbl93cml0ZTMyKFNESF9SRVNQT05TRTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9SRVNQT05TRTEoKQliZmluX3JlYWQzMihTREhfUkVTUE9OU0UxKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9SRVNQT05TRTEodmFsKQliZmluX3dyaXRlMzIoU0RIX1JFU1BPTlNFMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1JFU1BPTlNFMigpCWJmaW5fcmVhZDMyKFNESF9SRVNQT05TRTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1JFU1BPTlNFMih2YWwpCWJmaW5fd3JpdGUzMihTREhfUkVTUE9OU0UyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUkVTUE9OU0UzKCkJYmZpbl9yZWFkMzIoU0RIX1JFU1BPTlNFMykKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUkVTUE9OU0UzKHZhbCkJYmZpbl93cml0ZTMyKFNESF9SRVNQT05TRTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9EQVRBX1RJTUVSKCkJYmZpbl9yZWFkMzIoU0RIX0RBVEFfVElNRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0RBVEFfVElNRVIodmFsKQliZmluX3dyaXRlMzIoU0RIX0RBVEFfVElNRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9EQVRBX0xHVEgoKQliZmluX3JlYWQxNihTREhfREFUQV9MR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9EQVRBX0xHVEgodmFsKQliZmluX3dyaXRlMTYoU0RIX0RBVEFfTEdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX0RBVEFfQ1RMKCkJYmZpbl9yZWFkMTYoU0RIX0RBVEFfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9EQVRBX0NUTCh2YWwpCWJmaW5fd3JpdGUxNihTREhfREFUQV9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9EQVRBX0NOVCgpCWZpbl9yZWFkMTYoU0RIX0RBVEFfQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9EQVRBX0NOVCh2YWwpCWJmaW5fd3JpdGUxNihTREhfREFUQV9DTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9TVEFUVVMoKQkJYmZpbl9yZWFkMzIoU0RIX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTMyKFNESF9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9TVEFUVVNfQ0xSKCkJZmluX3JlYWQxNihTREhfU1RBVFVTX0NMUikKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfU1RBVFVTX0NMUih2YWwpCWZpbl93cml0ZTE2KFNESF9TVEFUVVNfQ0xSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfTUFTSzAoKQkJYmZpbl9yZWFkMzIoU0RIX01BU0swKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9NQVNLMCh2YWwpCWJmaW5fd3JpdGUzMihTREhfTUFTSzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9NQVNLMSgpCQliZmluX3JlYWQzMihTREhfTUFTSzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX01BU0sxKHZhbCkJYmZpbl93cml0ZTMyKFNESF9NQVNLMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX0ZJRk9fQ05UKCkJYmZpbl9yZWFkMTYoU0RIX0ZJRk9fQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9GSUZPX0NOVCh2YWwpCWJmaW5fd3JpdGUxNihTREhfRklGT19DTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9GSUZPKCkJCWJmaW5fcmVhZDMyKFNESF9GSUZPKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9GSUZPKHZhbCkJYmZpbl93cml0ZTMyKFNESF9GSUZPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfRV9TVEFUVVMoKQliZmluX3JlYWQxNihTREhfRV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0VfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KFNESF9FX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX0VfTUFTSygpCQliZmluX3JlYWQxNihTREhfRV9NQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9FX01BU0sodmFsKQliZmluX3dyaXRlMTYoU0RIX0VfTUFTSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX0NGRygpCQliZmluX3JlYWQxNihTREhfQ0ZHKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9DRkcodmFsKQkJYmZpbl93cml0ZTE2KFNESF9DRkcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9SRF9XQUlUX0VOKCkJYmZpbl9yZWFkMTYoU0RIX1JEX1dBSVRfRU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1JEX1dBSVRfRU4odmFsKQliZmluX3dyaXRlMTYoU0RIX1JEX1dBSVRfRU4sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQwKCkJCWJmaW5fcmVhZDE2KFNESF9QSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQwKHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUElEMSgpCQliZmluX3JlYWQxNihTREhfUElEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElEMSh2YWwpCWJmaW5fd3JpdGUxNihTREhfUElEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDIoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDIodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQzKCkJCWJmaW5fcmVhZDE2KFNESF9QSUQzKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQzKHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUElENCgpCQliZmluX3JlYWQxNihTREhfUElENCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElENCh2YWwpCWJmaW5fd3JpdGUxNihTREhfUElENCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDUoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDUpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDUodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQ2KCkJCWJmaW5fcmVhZDE2KFNESF9QSUQ2KQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQ2KHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQ2LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUElENygpCQliZmluX3JlYWQxNihTREhfUElENykKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElENyh2YWwpCWJmaW5fd3JpdGUxNihTREhfUElENywgdmFsKQorCisvKiBVU0IgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0ZBRERSKCkJCWJmaW5fcmVhZDE2KFVTQl9GQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRkFERFIodmFsKQliZmluX3dyaXRlMTYoVVNCX0ZBRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUE9XRVIoKQkJYmZpbl9yZWFkMTYoVVNCX1BPV0VSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QT1dFUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfUE9XRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVFgoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJUWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlRYKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTlRSVFgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSUlgoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJSWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlJYKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTlRSUlgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVFhFKCkJCWJmaW5fcmVhZDE2KFVTQl9JTlRSVFhFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSVFhFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTlRSVFhFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5UUlJYRSgpCQliZmluX3JlYWQxNihVU0JfSU5UUlJYRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlJYRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfSU5UUlJYRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJVU0IoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJVU0IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOVFJVU0IodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJVU0IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSVVNCRSgpCWJmaW5fcmVhZDE2KFVTQl9JTlRSVVNCRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlVTQkUodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJVU0JFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRlJBTUUoKQkJYmZpbl9yZWFkMTYoVVNCX0ZSQU1FKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9GUkFNRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRlJBTUUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTkRFWCgpCQliZmluX3JlYWQxNihVU0JfSU5ERVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOREVYKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTkRFWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1RFU1RNT0RFKCkJZmluX3JlYWQxNihVU0JfVEVTVE1PREUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RFU1RNT0RFKHZhbCkJZmluX3dyaXRlMTYoVVNCX1RFU1RNT0RFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfR0xPQklOVFIoKQliZmluX3JlYWQxNihVU0JfR0xPQklOVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0dMT0JJTlRSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9HTE9CSU5UUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0dMT0JBTF9DVEwoKQliZmluX3JlYWQxNihVU0JfR0xPQkFMX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfR0xPQkFMX0NUTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfR0xPQkFMX0NUTCwgdmFsKQorCisvKiBVU0IgUGFja2V0IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWF9NQVhfUEFDS0VUKCkJCWJmaW5fcmVhZDE2KFVTQl9UWF9NQVhfUEFDS0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWF9NQVhfUEFDS0VUKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9UWF9NQVhfUEFDS0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfQ1NSMCgpCQkJYmZpbl9yZWFkMTYoVVNCX0NTUjApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0NTUjAodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9DU1IwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhDU1IoKQkJCWJmaW5fcmVhZDE2KFVTQl9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhDU1IodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1JYX01BWF9QQUNLRVQoKQkJYmZpbl9yZWFkMTYoVVNCX1JYX01BWF9QQUNLRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYX01BWF9QQUNLRVQodmFsKQliZmluX3dyaXRlMTYoVVNCX1JYX01BWF9QQUNLRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWENTUigpCQkJYmZpbl9yZWFkMTYoVVNCX1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWENTUih2YWwpCQliZmluX3dyaXRlMTYoVVNCX1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfQ09VTlQwKCkJCQliZmluX3JlYWQxNihVU0JfQ09VTlQwKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9DT1VOVDAodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9DT1VOVDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWENPVU5UKCkJCQliZmluX3JlYWQxNihVU0JfUlhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWFRZUEUoKQkJCWJmaW5fcmVhZDE2KFVTQl9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYVFlQRSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1RYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX05BS0xJTUlUMCgpCQliZmluX3JlYWQxNihVU0JfTkFLTElNSVQwKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9OQUtMSU1JVDAodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9OQUtMSU1JVDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWElOVEVSVkFMKCkJCWJmaW5fcmVhZDE2KFVTQl9UWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWElOVEVSVkFMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1JYVFlQRSgpCQkJYmZpbl9yZWFkMTYoVVNCX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhUWVBFKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUlhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhJTlRFUlZBTCgpCQliZmluX3JlYWQxNihVU0JfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhJTlRFUlZBTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1JYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWENPVU5UKCkJCQliZmluX3JlYWQxNihVU0JfVFhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1RYQ09VTlQsIHZhbCkKKworLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgRklGTyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQMF9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDBfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVAwX0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDBfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQMV9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDFfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVAxX0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDFfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQMl9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDJfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVAyX0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDJfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQM19GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDNfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVAzX0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDNfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQNF9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDRfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVA0X0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDRfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQNV9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDVfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVA1X0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDVfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQNl9GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDZfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVA2X0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDZfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQN19GSUZPKCkJCWJmaW5fcmVhZDE2KFVTQl9FUDdfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVA3X0ZJRk8odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9FUDdfRklGTywgdmFsKQorCisvKiBVU0IgT1RHIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9PVEdfREVWX0NUTCgpCQliZmluX3JlYWQxNihVU0JfT1RHX0RFVl9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX09UR19ERVZfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfT1RHX0RFVl9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9PVEdfVkJVU19JUlEoKQkJYmZpbl9yZWFkMTYoVVNCX09UR19WQlVTX0lSUSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfT1RHX1ZCVVNfSVJRKHZhbCkJZmluX3dyaXRlMTYoVVNCX09UR19WQlVTX0lSUSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX09UR19WQlVTX01BU0soKQkJYmZpbl9yZWFkMTYoVVNCX09UR19WQlVTX01BU0spCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX09UR19WQlVTX01BU0sodmFsKQliZmluX3dyaXRlMTYoVVNCX09UR19WQlVTX01BU0ssIHZhbCkKKworLyogVVNCIFBoeSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfTElOS0lORk8oKQkJYmZpbl9yZWFkMTYoVVNCX0xJTktJTkZPKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9MSU5LSU5GTyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0xJTktJTkZPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfVlBMRU4oKQkJCWJmaW5fcmVhZDE2KFVTQl9WUExFTikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVlBMRU4odmFsKQkJYmZpbl93cml0ZTE2KFVTQl9WUExFTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0hTX0VPRjEoKQkJCWJmaW5fcmVhZDE2KFVTQl9IU19FT0YxKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9IU19FT0YxKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfSFNfRU9GMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0ZTX0VPRjEoKQkJCWJmaW5fcmVhZDE2KFVTQl9GU19FT0YxKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9GU19FT0YxKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRlNfRU9GMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0xTX0VPRjEoKQkJCWJmaW5fcmVhZDE2KFVTQl9MU19FT0YxKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9MU19FT0YxKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfTFNfRU9GMSwgdmFsKQorCisvKiAoQVBIWV9DTlRSTCBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9BUEhZX0NOVFJMKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NOVFJMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9BUEhZX0NOVFJMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQVBIWV9DTlRSTCwgdmFsKQorCisvKiAoQVBIWV9DQUxJQiBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9BUEhZX0NBTElCKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NBTElCKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9BUEhZX0NBTElCKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQVBIWV9DQUxJQiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0FQSFlfQ05UUkwyKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NOVFJMMikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQVBIWV9DTlRSTDIodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9BUEhZX0NOVFJMMiwgdmFsKQorCisvKiAoUEhZX1RFU1QgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUEhZX1RFU1QoKQkJYmZpbl9yZWFkMTYoVVNCX1BIWV9URVNUKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QSFlfVEVTVCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1BIWV9URVNULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUExMT1NDX0NUUkwoKQkJYmZpbl9yZWFkMTYoVVNCX1BMTE9TQ19DVFJMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QTExPU0NfQ1RSTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1BMTE9TQ19DVFJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfU1JQX0NMS0RJVigpCQliZmluX3JlYWQxNihVU0JfU1JQX0NMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfU1JQX0NMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoVVNCX1NSUF9DTEtESVYsIHZhbCkKKworLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgMCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYSU5URVJWQUwsIHZhbCkKKworLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgMSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhJTlRFUlZBTCwgdmFsKQorCisvKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCAyIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWElOVEVSVkFMLCB2YWwpCisKKy8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDMgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYSU5URVJWQUwsIHZhbCkKKworLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgNCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhJTlRFUlZBTCwgdmFsKQorCisvKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCA1IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWElOVEVSVkFMLCB2YWwpCisKKy8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDYgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYSU5URVJWQUwsIHZhbCkKKworLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgNyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BX0lOVEVSUlVQVCgpCQliZmluX3JlYWQxNihVU0JfRE1BX0lOVEVSUlVQVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BX0lOVEVSUlVQVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BX0lOVEVSUlVQVCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCAwIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMENPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMEFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMEFERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMENPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgMSBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BMUNPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMUNPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMUFERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMUFERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUNPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQ09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQ09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQ09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQ09VTlRISUdILCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDIgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTJDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTJBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkFERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQ09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkNPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMkNPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkNPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkNPVU5USElHSCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCAzIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0FERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BM0FERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BM0NPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgNCBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BNENPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNENPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNEFERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNEFERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNEFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0QUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNENPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0Q09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0Q09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0Q09VTlRISUdILCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDUgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1Q09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTVDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1QUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTVBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1QUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNUFERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1Q09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNUNPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUNPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNUNPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNUNPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNUNPVU5USElHSCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCA2IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2Q09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkNPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE2Q09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2QUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE2QUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNkFERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2QUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTZBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNkNPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2Q09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTZDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTZDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgNyBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BN0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BN0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BN0FERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BN0FERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0FERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE3QUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3Q09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0NPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE3Q09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3Q09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE3Q09VTlRISUdILCB2YWwpCisKKy8qIEtleWJmaW5fcmVhZF8oKWFkIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9LUEFEX0NUTCgpCQkJYmZpbl9yZWFkMTYoS1BBRF9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfS1BBRF9DVEwodmFsKQkJYmZpbl93cml0ZTE2KEtQQURfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9LUEFEX1BSRVNDQUxFKCkJCWJmaW5fcmVhZDE2KEtQQURfUFJFU0NBTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfS1BBRF9QUkVTQ0FMRSh2YWwpCQliZmluX3dyaXRlMTYoS1BBRF9QUkVTQ0FMRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfS1BBRF9NU0VMKCkJCQliZmluX3JlYWQxNihLUEFEX01TRUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfS1BBRF9NU0VMKHZhbCkJCWJmaW5fd3JpdGUxNihLUEFEX01TRUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0tQQURfUk9XQ09MKCkJCQliZmluX3JlYWQxNihLUEFEX1JPV0NPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9LUEFEX1JPV0NPTCh2YWwpCQliZmluX3dyaXRlMTYoS1BBRF9ST1dDT0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0tQQURfU1RBVCgpCQkJYmZpbl9yZWFkMTYoS1BBRF9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX0tQQURfU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoS1BBRF9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9LUEFEX1NPRlRFVkFMKCkJCWJmaW5fcmVhZDE2KEtQQURfU09GVEVWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfS1BBRF9TT0ZURVZBTCh2YWwpCQliZmluX3dyaXRlMTYoS1BBRF9TT0ZURVZBTCwgdmFsKQorCisjZW5kaWYgLyogX0NERUZfQkY1NDJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9jZGVmQkY1NDQuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyZDE3NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ0LmgKQEAgLTAsMCArMSw5NzggQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ0LmgKKyAqIEJhc2VkIG9uOgorICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6CisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBSZXY6CisgKgorICogTW9kaWZpZWQ6CisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfQ0RFRl9CRjU0NF9ICisjZGVmaW5lIF9DREVGX0JGNTQ0X0gKKworLyogaW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgImRlZkJGNTQ0LmgiCisKKy8qIGluY2x1ZGUgY29yZSBzYmZpbl9yZWFkXygpZWNpZmljIHJlZ2lzdGVyIHBvaW50ZXIgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxhc20vbWFjaC1jb21tb24vY2RlZl9MUEJsYWNrZmluLmg+CisKKy8qIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTQ0ICovCisKKy8qIGluY2x1ZGUgY2RlZkJGNTR4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1NHggYmZpbl9yZWFkXygpcm9jZXNzb3JzICovCisjaW5jbHVkZSAiY2RlZkJGNTR4X2Jhc2UuaCIKKworLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlICNkZWZpbmVzIG5lZWRlZCBieSBBRFNQLUJGNTQ0IHRoYXQgYXJlIG5vdCBpbiB0aGUgY29tbW9uIGhlYWRlciAqLworCisvKiBUaW1lciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVElNRVI4X0NPTkZJRygpCQliZmluX3JlYWQxNihUSU1FUjhfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KFRJTUVSOF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOF9DT1VOVEVSKCkJCWJmaW5fcmVhZDMyKFRJTUVSOF9DT1VOVEVSKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOF9DT1VOVEVSKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjhfQ09VTlRFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI4X1BFUklPRCgpCQliZmluX3JlYWQzMihUSU1FUjhfUEVSSU9EKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOF9QRVJJT0QodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSOF9QRVJJT0QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOF9XSURUSCgpCQliZmluX3JlYWQzMihUSU1FUjhfV0lEVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI4X1dJRFRIKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjhfV0lEVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOV9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI5X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjlfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjlfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjlfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjlfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjlfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI5X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOV9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI5X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjlfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjlfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjlfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI5X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOV9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI5X1dJRFRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjEwX0NPTkZJRygpCQliZmluX3JlYWQxNihUSU1FUjEwX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjEwX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIxMF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMTBfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjEwX0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxMF9DT1VOVEVSKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjEwX0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMTBfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSMTBfUEVSSU9EKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMTBfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjEwX1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIxMF9XSURUSCgpCQliZmluX3JlYWQzMihUSU1FUjEwX1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMTBfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMTBfV0lEVEgsIHZhbCkKKworLyogVGltZXIgR3JvdWJmaW5fcmVhZF8oKSBvZiAzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX0VOQUJMRTEoKQkJYmZpbl9yZWFkMTYoVElNRVJfRU5BQkxFMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9FTkFCTEUxKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUl9FTkFCTEUxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9ESVNBQkxFMSgpCQliZmluX3JlYWQxNihUSU1FUl9ESVNBQkxFMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9ESVNBQkxFMSh2YWwpCQliZmluX3dyaXRlMTYoVElNRVJfRElTQUJMRTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX1NUQVRVUzEoKQkJYmZpbl9yZWFkMzIoVElNRVJfU1RBVFVTMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9TVEFUVVMxKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUl9TVEFUVVMxLCB2YWwpCisKKy8qIEVQUEkwIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRVBQSTBfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTBfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9IQ09VTlQoKQkJYmZpbl9yZWFkMTYoRVBQSTBfSENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0hDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTBfSENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9IREVMQVkoKQkJYmZpbl9yZWFkMTYoRVBQSTBfSERFTEFZKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0hERUxBWSh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTBfSERFTEFZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9WQ09VTlQoKQkJYmZpbl9yZWFkMTYoRVBQSTBfVkNPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX1ZDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTBfVkNPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9WREVMQVkoKQkJYmZpbl9yZWFkMTYoRVBQSTBfVkRFTEFZKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX1ZERUxBWSh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTBfVkRFTEFZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9GUkFNRSgpCQkJYmZpbl9yZWFkMTYoRVBQSTBfRlJBTUUpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfRlJBTUUodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX0ZSQU1FLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9MSU5FKCkJCQliZmluX3JlYWQxNihFUFBJMF9MSU5FKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0xJTkUodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX0xJTkUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0NMS0RJVigpCQliZmluX3JlYWQxNihFUFBJMF9DTEtESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihFUFBJMF9DTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0NPTlRST0woKQkJYmZpbl9yZWFkMzIoRVBQSTBfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUzMihFUFBJMF9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9GUzFXX0hCTCgpCQliZmluX3JlYWQzMihFUFBJMF9GUzFXX0hCTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9GUzFXX0hCTCh2YWwpCQliZmluX3dyaXRlMzIoRVBQSTBfRlMxV19IQkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0ZTMVBfQVZQTCgpCQliZmluX3JlYWQzMihFUFBJMF9GUzFQX0FWUEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfRlMxUF9BVlBMKHZhbCkJCWJmaW5fd3JpdGUzMihFUFBJMF9GUzFQX0FWUEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0ZTMldfTFZCKCkJCWJmaW5fcmVhZDMyKEVQUEkwX0ZTMldfTFZCKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0ZTMldfTFZCKHZhbCkJCWJmaW5fd3JpdGUzMihFUFBJMF9GUzJXX0xWQiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfRlMyUF9MQVZGKCkJCWJmaW5fcmVhZDMyKEVQUEkwX0ZTMlBfTEFWRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9GUzJQX0xBVkYodmFsKQkJYmZpbl93cml0ZTMyKEVQUEkwX0ZTMlBfTEFWRiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfQ0xJUCgpCQkJYmZpbl9yZWFkMzIoRVBQSTBfQ0xJUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9DTElQKHZhbCkJCWJmaW5fd3JpdGUzMihFUFBJMF9DTElQLCB2YWwpCisKKy8qIFR3byBXaXJlIEludGVyZmFjZSBSZWdpc3RlcnMgKFRXSTEpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfQ0xLRElWKCkJCQliZmluX3JlYWQxNihUV0kxX0NMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX0NMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9DTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfQ09OVFJPTCgpCQliZmluX3JlYWQxNihUV0kxX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfU0xBVkVfQ1RSTCgpCQliZmluX3JlYWQxNihUV0kxX1NMQVZFX0NUUkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9TTEFWRV9DVFJMKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX1NMQVZFX0NUUkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfU0xBVkVfU1RBVCgpCQliZmluX3JlYWQxNihUV0kxX1NMQVZFX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9TTEFWRV9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX1NMQVZFX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfU0xBVkVfQUREUigpCQliZmluX3JlYWQxNihUV0kxX1NMQVZFX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9TTEFWRV9BRERSKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX1NMQVZFX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfTUFTVEVSX0NUUkwoKQkJYmZpbl9yZWFkMTYoVFdJMV9NQVNURVJfQ1RSTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX01BU1RFUl9DVFJMKHZhbCkJYmZpbl93cml0ZTE2KFRXSTFfTUFTVEVSX0NUUkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfTUFTVEVSX1NUQVQoKQkJYmZpbl9yZWFkMTYoVFdJMV9NQVNURVJfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX01BU1RFUl9TVEFUKHZhbCkJYmZpbl93cml0ZTE2KFRXSTFfTUFTVEVSX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfTUFTVEVSX0FERFIoKQkJYmZpbl9yZWFkMTYoVFdJMV9NQVNURVJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX01BU1RFUl9BRERSKHZhbCkJYmZpbl93cml0ZTE2KFRXSTFfTUFTVEVSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfSU5UX1NUQVQoKQkJYmZpbl9yZWFkMTYoVFdJMV9JTlRfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX0lOVF9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX0lOVF9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX0lOVF9NQVNLKCkJCWJmaW5fcmVhZDE2KFRXSTFfSU5UX01BU0spCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9JTlRfTUFTSyh2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9JTlRfTUFTSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMV9GSUZPX0NUUkwoKQkJYmZpbl9yZWFkMTYoVFdJMV9GSUZPX0NUUkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9GSUZPX0NUUkwodmFsKQkJYmZpbl93cml0ZTE2KFRXSTFfRklGT19DVFJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX0ZJRk9fU1RBVCgpCQliZmluX3JlYWQxNihUV0kxX0ZJRk9fU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX0ZJRk9fU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9GSUZPX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfWE1UX0RBVEE4KCkJCWJmaW5fcmVhZDE2KFRXSTFfWE1UX0RBVEE4KQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfWE1UX0RBVEE4KHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX1hNVF9EQVRBOCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMV9YTVRfREFUQTE2KCkJCWJmaW5fcmVhZDE2KFRXSTFfWE1UX0RBVEExNikKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX1hNVF9EQVRBMTYodmFsKQkJYmZpbl93cml0ZTE2KFRXSTFfWE1UX0RBVEExNiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMV9SQ1ZfREFUQTgoKQkJYmZpbl9yZWFkMTYoVFdJMV9SQ1ZfREFUQTgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9SQ1ZfREFUQTgodmFsKQkJYmZpbl93cml0ZTE2KFRXSTFfUkNWX0RBVEE4LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX1JDVl9EQVRBMTYoKQkJYmZpbl9yZWFkMTYoVFdJMV9SQ1ZfREFUQTE2KQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfUkNWX0RBVEExNih2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9SQ1ZfREFUQTE2LCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ29uZmlnIDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUMxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUMxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUMxKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUMxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01EMSgpCQliZmluX3JlYWQxNihDQU4xX01EMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01EMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01EMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9UUlMxKCkJCWJmaW5fcmVhZDE2KENBTjFfVFJTMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1RSUzEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9UUlMxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1RSUjEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9UUlIxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVFJSMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1RSUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVEExKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FBMSgpCQliZmluX3JlYWQxNihDQU4xX0FBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FBMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9STVAxKCkJCWJmaW5fcmVhZDE2KENBTjFfUk1QMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JNUDEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9STVAxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1JNTDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9STUwxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfUk1MMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1JNTDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUJUSUYxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUJUSUYxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJUSUYxKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUJUSUYxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CUklGMSgpCQliZmluX3JlYWQxNihDQU4xX01CUklGMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CUklGMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CUklGMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQklNMSgpCQliZmluX3JlYWQxNihDQU4xX01CSU0xKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJJTTEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQklNMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9SRkgxKCkJCWJmaW5fcmVhZDE2KENBTjFfUkZIMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JGSDEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9SRkgxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX09QU1MxKCkJCWJmaW5fcmVhZDE2KENBTjFfT1BTUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9PUFNTMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX09QU1MxLCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ29uZmlnIDIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUMyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUMyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUMyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01EMigpCQliZmluX3JlYWQxNihDQU4xX01EMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01EMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01EMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9UUlMyKCkJCWJmaW5fcmVhZDE2KENBTjFfVFJTMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1RSUzIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9UUlMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1RSUjIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9UUlIyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVFJSMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1RSUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVEEyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FBMigpCQliZmluX3JlYWQxNihDQU4xX0FBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FBMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9STVAyKCkJCWJmaW5fcmVhZDE2KENBTjFfUk1QMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JNUDIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9STVAyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1JNTDIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9STUwyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfUk1MMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1JNTDIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUJUSUYyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUJUSUYyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJUSUYyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUJUSUYyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CUklGMigpCQliZmluX3JlYWQxNihDQU4xX01CUklGMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CUklGMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CUklGMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQklNMigpCQliZmluX3JlYWQxNihDQU4xX01CSU0yKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJJTTIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQklNMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9SRkgyKCkJCWJmaW5fcmVhZDE2KENBTjFfUkZIMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JGSDIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9SRkgyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX09QU1MyKCkJCWJmaW5fcmVhZDE2KENBTjFfT1BTUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9PUFNTMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX09QU1MyLCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ2xvY2svSW50ZXJydWJmaW5fcmVhZF8oKXQvQ291bnRlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9DTE9DSygpCQliZmluX3JlYWQxNihDQU4xX0NMT0NLKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQ0xPQ0sodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9DTE9DSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9USU1JTkcoKQkJYmZpbl9yZWFkMTYoQ0FOMV9USU1JTkcpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9USU1JTkcodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9USU1JTkcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfREVCVUcoKQkJYmZpbl9yZWFkMTYoQ0FOMV9ERUJVRykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0RFQlVHKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfREVCVUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KENBTjFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0NFQygpCQliZmluX3JlYWQxNihDQU4xX0NFQykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0NFQyh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0NFQywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9HSVMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9HSVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9HSVModmFsKQliZmluX3dyaXRlMTYoQ0FOMV9HSVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfR0lNKCkJCWJmaW5fcmVhZDE2KENBTjFfR0lNKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfR0lNKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfR0lNLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0dJRigpCQliZmluX3JlYWQxNihDQU4xX0dJRikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0dJRih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0dJRiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9DT05UUk9MKCkJYmZpbl9yZWFkMTYoQ0FOMV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQ09OVFJPTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfSU5UUigpCQliZmluX3JlYWQxNihDQU4xX0lOVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9JTlRSKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfSU5UUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQlREKCkJCWJmaW5fcmVhZDE2KENBTjFfTUJURCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CVEQodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQlRELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0VXUigpCQliZmluX3JlYWQxNihDQU4xX0VXUikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0VXUih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0VXUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9FU1IoKQkJYmZpbl9yZWFkMTYoQ0FOMV9FU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9FU1IodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9FU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVUNDTlQoKQkJYmZpbl9yZWFkMTYoQ0FOMV9VQ0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1VDQ05UKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVUNDTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVUNSQygpCQliZmluX3JlYWQxNihDQU4xX1VDUkMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9VQ1JDKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVUNSQywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9VQ0NORigpCQliZmluX3JlYWQxNihDQU4xX1VDQ05GKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVUNDTkYodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9VQ0NORiwgdmFsKQorCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggQWNjZWJmaW5fcmVhZF8oKXRhbmNlIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDBMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDBMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDBIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDBILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDFMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAxTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDFIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAxSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDFILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDJMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAyTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDJIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAySCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDJILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDNMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wM0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAzTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDNMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDNIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wM0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAzSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDNILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDRMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA0TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDRMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDRIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA0SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDVMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA1TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDVMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDVIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA1SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDVILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDZMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA2TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDZMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDZIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA2SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDZILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDdMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wN0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA3TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDdMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDdIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wN0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA3SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDhMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA4TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDhMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDhIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA4SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDhILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDlMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA5TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDlMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDlIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA5SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDlILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTBMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTBMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTBIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTBILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTFMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTExTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTFIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTExSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTFILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTJMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEyTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTJIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEySCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTJILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTNMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xM0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEzTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTNMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTNIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xM0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEzSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTNILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTRMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE0TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTRMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTRIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE0SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTVMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE1TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTVMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTVIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE1SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTVILCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBBY2NlYmZpbl9yZWFkXygpdGFuY2UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xNkwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE2TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTZMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xNkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xNkgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE2SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTZIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xNkgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xN0woKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE3TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTdMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xN0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xN0goKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE3SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTdIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xN0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE4TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMThMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE4SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMThIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE5TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTlMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE5SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTlIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIwTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjBMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIwSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjBIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIxTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjFMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIxSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjFIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMkwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIyTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjJMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMkgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIySCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjJIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMkgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yM0woKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIzTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjNMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yM0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yM0goKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIzSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjNIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yM0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI0TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjRMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI0SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjRIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI1TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjVMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI1SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjVIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNkwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI2TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjZMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNkgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI2SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjZIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNkgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yN0woKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI3TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjdMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yN0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yN0goKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI3SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjdIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yN0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI4TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjhMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI4SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjhIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI5TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjlMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI5SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjlIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMwTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzBMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMwSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzBIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMxTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzFMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMxSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzFIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMUgsIHZhbCkKKworLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IERhdGEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDBfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwMF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDBfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwMF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDBfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDBfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAwX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDFfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjAxX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDFfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjAxX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDFfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAxX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDFfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAyX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDJfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAyX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDJfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAyX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAyX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDJfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMl9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDNfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwM19MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDNfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwM19USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDNfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDNfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwM19JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAzX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDRfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA0X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDRfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA0X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDRfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA0X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDRfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA1X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDVfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA1X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDVfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA1X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA1X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDVfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNV9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDZfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwNl9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDZfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwNl9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDZfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDZfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNl9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA2X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDdfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwN19MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA3X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDdfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwN19USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA3X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDdfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwN19JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwN19JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA3X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDdfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA4X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDhfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA4X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDhfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA4X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA4X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDhfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwOF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDlfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwOV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDlfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwOV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDlfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDlfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA5X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTBfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEwX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTBfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEwX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTBfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEwX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTBfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjExX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTFfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjExX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTFfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjExX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjExX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTFfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMV9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTJfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxMl9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTJfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxMl9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTJfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTJfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMl9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjEyX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTNfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxM19MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEzX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTNfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxM19USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEzX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTNfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxM19JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxM19JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEzX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTNfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE0X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTRfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE0X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTRfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE0X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE0X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTRfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTVfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxNV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTVfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxNV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTVfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTVfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE1X0lEMSwgdmFsKQorCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggRGF0YSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTZfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNl9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE2X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTZfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNl9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE2X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTZfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNl9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNl9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE2X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTZfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE3X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTdfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE3X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTdfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE3X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE3X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTdfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxN19JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMThfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxOF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMThfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxOF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMThfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMThfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE4X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTlfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE5X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTlfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE5X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTlfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE5X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTlfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIwX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjBfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIwX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjBfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIwX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIwX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjBfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjFfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyMV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjFfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyMV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjFfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjFfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIxX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjJfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMl9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjIyX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjJfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMl9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjIyX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjJfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMl9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMl9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIyX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjJfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIzX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjNfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIzX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjNfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIzX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIzX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjNfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyM19JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjRfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyNF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjRfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyNF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjRfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjRfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI0X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjVfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI1X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjVfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI1X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjVfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI1X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjVfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI2X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjZfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI2X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjZfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI2X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI2X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjZfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNl9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjdfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyN19MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjdfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyN19USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjdfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjdfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyN19JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI3X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjhfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI4X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjhfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI4X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjhfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyOF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI4X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjhfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI5X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjlfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI5X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjlfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI5X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI5X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjlfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOV9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzBfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIzMF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzBfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIzMF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzBfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzBfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjMwX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMzFfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjMxX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMzFfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjMxX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMzFfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMxX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzFfSUQxLCB2YWwpCisKKy8qIEhPU1QgUG9ydCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfSE9TVF9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhPU1RfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9IT1NUX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KEhPU1RfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE9TVF9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoSE9TVF9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KEhPU1RfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9IT1NUX1RJTUVPVVQoKQkJYmZpbl9yZWFkMTYoSE9TVF9USU1FT1VUKQorI2RlZmluZSBiZmluX3dyaXRlX0hPU1RfVElNRU9VVCh2YWwpCQliZmluX3dyaXRlMTYoSE9TVF9USU1FT1VULCB2YWwpCisKKy8qIFBpeGVsIENvbWJmaW5fcmVhZF8oKW9zaXRvciAoUElYQykgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQ1RMKCkJCWJmaW5fcmVhZDE2KFBJWENfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQ1RMKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX1BQTCgpCQliZmluX3JlYWQxNihQSVhDX1BQTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX1BQTCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX1BQTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19MUEYoKQkJYmZpbl9yZWFkMTYoUElYQ19MUEYpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19MUEYodmFsKQliZmluX3dyaXRlMTYoUElYQ19MUEYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQUhTVEFSVCgpCWJmaW5fcmVhZDE2KFBJWENfQUhTVEFSVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0FIU1RBUlQodmFsKQliZmluX3dyaXRlMTYoUElYQ19BSFNUQVJULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0FIRU5EKCkJCWJmaW5fcmVhZDE2KFBJWENfQUhFTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19BSEVORCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0FIRU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0FWU1RBUlQoKQliZmluX3JlYWQxNihQSVhDX0FWU1RBUlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19BVlNUQVJUKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQVZTVEFSVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19BVkVORCgpCQliZmluX3JlYWQxNihQSVhDX0FWRU5EKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQVZFTkQodmFsKQliZmluX3dyaXRlMTYoUElYQ19BVkVORCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19BVFJBTlNQKCkJYmZpbl9yZWFkMTYoUElYQ19BVFJBTlNQKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQVRSQU5TUCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0FUUkFOU1AsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQkhTVEFSVCgpCWJmaW5fcmVhZDE2KFBJWENfQkhTVEFSVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0JIU1RBUlQodmFsKQliZmluX3dyaXRlMTYoUElYQ19CSFNUQVJULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0JIRU5EKCkJCWJmaW5fcmVhZDE2KFBJWENfQkhFTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19CSEVORCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0JIRU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0JWU1RBUlQoKQliZmluX3JlYWQxNihQSVhDX0JWU1RBUlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19CVlNUQVJUKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQlZTVEFSVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19CVkVORCgpCQliZmluX3JlYWQxNihQSVhDX0JWRU5EKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQlZFTkQodmFsKQliZmluX3dyaXRlMTYoUElYQ19CVkVORCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19CVFJBTlNQKCkJYmZpbl9yZWFkMTYoUElYQ19CVFJBTlNQKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQlRSQU5TUCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0JUUkFOU1AsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfSU5UUlNUQVQoKQliZmluX3JlYWQxNihQSVhDX0lOVFJTVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfSU5UUlNUQVQodmFsKQliZmluX3dyaXRlMTYoUElYQ19JTlRSU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19SWUNPTigpCQliZmluX3JlYWQzMihQSVhDX1JZQ09OKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfUllDT04odmFsKQliZmluX3dyaXRlMzIoUElYQ19SWUNPTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19HVUNPTigpCQliZmluX3JlYWQzMihQSVhDX0dVQ09OKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfR1VDT04odmFsKQliZmluX3dyaXRlMzIoUElYQ19HVUNPTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19CVkNPTigpCQliZmluX3JlYWQzMihQSVhDX0JWQ09OKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQlZDT04odmFsKQliZmluX3dyaXRlMzIoUElYQ19CVkNPTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19DQ0JJQVMoKQkJYmZpbl9yZWFkMzIoUElYQ19DQ0JJQVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19DQ0JJQVModmFsKQliZmluX3dyaXRlMzIoUElYQ19DQ0JJQVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfVEMoKQkJYmZpbl9yZWFkMzIoUElYQ19UQykKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX1RDKHZhbCkJCWJmaW5fd3JpdGUzMihQSVhDX1RDLCB2YWwpCisKKy8qIEhhbmRzaGFrZSBNRE1BIDAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNJTklUKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ0lOSVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9CQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0JDSU5JVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQkNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQkNJTklULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNVUkdFTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0VDVVJHRU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ1VSR0VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0VDVVJHRU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNPVkVSRkxPVygpCQliZmluX3JlYWQxNihITURNQTBfRUNPVkVSRkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfRUNPVkVSRkxPVyh2YWwpCWJmaW5fd3JpdGUxNihITURNQTBfRUNPVkVSRkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9CQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0JDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQkNPVU5ULCB2YWwpCisKKy8qIEhhbmRzaGFrZSBNRE1BIDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNJTklUKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ0lOSVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9CQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0JDSU5JVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQkNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQkNJTklULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNVUkdFTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0VDVVJHRU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ1VSR0VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0VDVVJHRU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNPVkVSRkxPVygpCQliZmluX3JlYWQxNihITURNQTFfRUNPVkVSRkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfRUNPVkVSRkxPVyh2YWwpCWJmaW5fd3JpdGUxNihITURNQTFfRUNPVkVSRkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9CQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0JDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQkNPVU5ULCB2YWwpCisKKyNlbmRpZiAvKiBfQ0RFRl9CRjU0NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0OC5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9jZGVmQkY1NDguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzRiZTAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9jZGVmQkY1NDguaApAQCAtMCwwICsxLDE2MTAgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ4LmgKKyAqIEJhc2VkIG9uOgorICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6CisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBSZXY6CisgKgorICogTW9kaWZpZWQ6CisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfQ0RFRl9CRjU0OF9ICisjZGVmaW5lIF9DREVGX0JGNTQ4X0gKKworLyogaW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgImRlZkJGNTQ4LmgiCisKKy8qIGluY2x1ZGUgY29yZSBzYmZpbl9yZWFkXygpZWNpZmljIHJlZ2lzdGVyIHBvaW50ZXIgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxhc20vbWFjaC1jb21tb24vY2RlZl9MUEJsYWNrZmluLmg+CisKKy8qIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTQ4ICovCisKKy8qIGluY2x1ZGUgY2RlZkJGNTR4X2Jhc2UuaCBmb3IgdGhlIHNldCBvZiAjZGVmaW5lcyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIEFEU1AtQkY1NHggYmZpbl9yZWFkXygpcm9jZXNzb3JzICovCisjaW5jbHVkZSAiY2RlZkJGNTR4X2Jhc2UuaCIKKworLyogVGhlIGZvbGxvd2luZyBhcmUgdGhlICNkZWZpbmVzIG5lZWRlZCBieSBBRFNQLUJGNTQ4IHRoYXQgYXJlIG5vdCBpbiB0aGUgY29tbW9uIGhlYWRlciAqLworCisvKiBUaW1lciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVElNRVI4X0NPTkZJRygpCWJmaW5fcmVhZDE2KFRJTUVSOF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI4X0NPTkZJRyh2YWwpCWJmaW5fd3JpdGUxNihUSU1FUjhfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjhfQ09VTlRFUigpCWJmaW5fcmVhZDMyKFRJTUVSOF9DT1VOVEVSKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOF9DT1VOVEVSKHZhbCkJYmZpbl93cml0ZTMyKFRJTUVSOF9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjhfUEVSSU9EKCkJYmZpbl9yZWFkMzIoVElNRVI4X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjhfUEVSSU9EKHZhbCkJYmZpbl93cml0ZTMyKFRJTUVSOF9QRVJJT0QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOF9XSURUSCgpCWJmaW5fcmVhZDMyKFRJTUVSOF9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjhfV0lEVEgodmFsKQliZmluX3dyaXRlMzIoVElNRVI4X1dJRFRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjlfQ09ORklHKCkJYmZpbl9yZWFkMTYoVElNRVI5X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjlfQ09ORklHKHZhbCkJYmZpbl93cml0ZTE2KFRJTUVSOV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOV9DT1VOVEVSKCkJYmZpbl9yZWFkMzIoVElNRVI5X0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI5X0NPVU5URVIodmFsKQliZmluX3dyaXRlMzIoVElNRVI5X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOV9QRVJJT0QoKQliZmluX3JlYWQzMihUSU1FUjlfUEVSSU9EKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOV9QRVJJT0QodmFsKQliZmluX3dyaXRlMzIoVElNRVI5X1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI5X1dJRFRIKCkJYmZpbl9yZWFkMzIoVElNRVI5X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOV9XSURUSCh2YWwpCWJmaW5fd3JpdGUzMihUSU1FUjlfV0lEVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMTBfQ09ORklHKCkJYmZpbl9yZWFkMTYoVElNRVIxMF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxMF9DT05GSUcodmFsKQliZmluX3dyaXRlMTYoVElNRVIxMF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMTBfQ09VTlRFUigpCWJmaW5fcmVhZDMyKFRJTUVSMTBfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjEwX0NPVU5URVIodmFsKQliZmluX3dyaXRlMzIoVElNRVIxMF9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjEwX1BFUklPRCgpCWJmaW5fcmVhZDMyKFRJTUVSMTBfUEVSSU9EKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMTBfUEVSSU9EKHZhbCkJYmZpbl93cml0ZTMyKFRJTUVSMTBfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjEwX1dJRFRIKCkJYmZpbl9yZWFkMzIoVElNRVIxMF9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjEwX1dJRFRIKHZhbCkJYmZpbl93cml0ZTMyKFRJTUVSMTBfV0lEVEgsIHZhbCkKKworLyogVGltZXIgR3JvdWJmaW5fcmVhZF8oKSBvZiAzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX0VOQUJMRTEoKQliZmluX3JlYWQxNihUSU1FUl9FTkFCTEUxKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX0VOQUJMRTEodmFsKQliZmluX3dyaXRlMTYoVElNRVJfRU5BQkxFMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVJfRElTQUJMRTEoKQliZmluX3JlYWQxNihUSU1FUl9ESVNBQkxFMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9ESVNBQkxFMSh2YWwpCWJmaW5fd3JpdGUxNihUSU1FUl9ESVNBQkxFMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVJfU1RBVFVTMSgpCWJmaW5fcmVhZDMyKFRJTUVSX1NUQVRVUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfU1RBVFVTMSh2YWwpCWJmaW5fd3JpdGUzMihUSU1FUl9TVEFUVVMxLCB2YWwpCisKKy8qIFNQT1JUMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RDUjEoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1RDUjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RDUjEodmFsKQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IyKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ1IyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ1IyKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMF9UQ1IyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfVENMS0RJVigpCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ0xLRElWKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMF9UQ0xLRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfVEZTRElWKCkJYmZpbl9yZWFkMTYoU1BPUlQwX1RGU0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVEZTRElWKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMF9URlNESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UWCgpCQliZmluX3JlYWQzMihTUE9SVDBfVFgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1RYKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMF9UWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JYKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9SWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUlgodmFsKQliZmluX3dyaXRlMzIoU1BPUlQwX1JYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkNSMSgpCQliZmluX3JlYWQxNihTUE9SVDBfUkNSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUkNSMSh2YWwpCWJmaW5fd3JpdGUxNihTUE9SVDBfUkNSMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JDUjIoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDUjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDUjIodmFsKQliZmluX3dyaXRlMTYoU1BPUlQwX1JDUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SQ0xLRElWKCkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDTEtESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDTEtESVYodmFsKQliZmluX3dyaXRlMTYoU1BPUlQwX1JDTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9SRlNESVYoKQliZmluX3JlYWQxNihTUE9SVDBfUkZTRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SRlNESVYodmFsKQliZmluX3dyaXRlMTYoU1BPUlQwX1JGU0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1NUQVQoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1NUQVQodmFsKQliZmluX3dyaXRlMTYoU1BPUlQwX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9DSE5MKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9DSE5MKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9DSE5MKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMF9DSE5MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTUNNQzEoKQliZmluX3JlYWQxNihTUE9SVDBfTUNNQzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01DTUMxKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMF9NQ01DMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01DTUMyKCkJYmZpbl9yZWFkMTYoU1BPUlQwX01DTUMyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NQ01DMih2YWwpCWJmaW5fd3JpdGUxNihTUE9SVDBfTUNNQzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NVENTMCgpCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzAodmFsKQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVRDUzEoKQliZmluX3JlYWQzMihTUE9SVDBfTVRDUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01UQ1MxKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMF9NVENTMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01UQ1MyKCkJYmZpbl9yZWFkMzIoU1BPUlQwX01UQ1MyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NVENTMih2YWwpCWJmaW5fd3JpdGUzMihTUE9SVDBfTVRDUzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NVENTMygpCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMykKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzModmFsKQliZmluX3dyaXRlMzIoU1BPUlQwX01UQ1MzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzAoKQliZmluX3JlYWQzMihTUE9SVDBfTVJDUzApCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01SQ1MwKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01SQ1MxKCkJYmZpbl9yZWFkMzIoU1BPUlQwX01SQ1MxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9NUkNTMSh2YWwpCWJmaW5fd3JpdGUzMihTUE9SVDBfTVJDUzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9NUkNTMigpCWJmaW5fcmVhZDMyKFNQT1JUMF9NUkNTMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVJDUzIodmFsKQliZmluX3dyaXRlMzIoU1BPUlQwX01SQ1MyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfTVJDUzMoKQliZmluX3JlYWQzMihTUE9SVDBfTVJDUzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX01SQ1MzKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMywgdmFsKQorCisvKiBFUFBJMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfU1RBVFVTKCkJYmZpbl9yZWFkMTYoRVBQSTBfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihFUFBJMF9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0hDT1VOVCgpCWJmaW5fcmVhZDE2KEVQUEkwX0hDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9IQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRVBQSTBfSENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9IREVMQVkoKQliZmluX3JlYWQxNihFUFBJMF9IREVMQVkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfSERFTEFZKHZhbCkJYmZpbl93cml0ZTE2KEVQUEkwX0hERUxBWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfVkNPVU5UKCkJYmZpbl9yZWFkMTYoRVBQSTBfVkNPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX1ZDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihFUFBJMF9WQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX1ZERUxBWSgpCWJmaW5fcmVhZDE2KEVQUEkwX1ZERUxBWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9WREVMQVkodmFsKQliZmluX3dyaXRlMTYoRVBQSTBfVkRFTEFZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9GUkFNRSgpCQliZmluX3JlYWQxNihFUFBJMF9GUkFNRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9GUkFNRSh2YWwpCWJmaW5fd3JpdGUxNihFUFBJMF9GUkFNRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfTElORSgpCQliZmluX3JlYWQxNihFUFBJMF9MSU5FKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0xJTkUodmFsKQliZmluX3dyaXRlMTYoRVBQSTBfTElORSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfQ0xLRElWKCkJYmZpbl9yZWFkMTYoRVBQSTBfQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0NMS0RJVih2YWwpCWJmaW5fd3JpdGUxNihFUFBJMF9DTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0NPTlRST0woKQliZmluX3JlYWQzMihFUFBJMF9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0NPTlRST0wodmFsKQliZmluX3dyaXRlMzIoRVBQSTBfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfRlMxV19IQkwoKQliZmluX3JlYWQzMihFUFBJMF9GUzFXX0hCTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9GUzFXX0hCTCh2YWwpCWJmaW5fd3JpdGUzMihFUFBJMF9GUzFXX0hCTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfRlMxUF9BVlBMKCkJYmZpbl9yZWFkMzIoRVBQSTBfRlMxUF9BVlBMKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0ZTMVBfQVZQTCh2YWwpCWJmaW5fd3JpdGUzMihFUFBJMF9GUzFQX0FWUEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0ZTMldfTFZCKCkJYmZpbl9yZWFkMzIoRVBQSTBfRlMyV19MVkIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfRlMyV19MVkIodmFsKQliZmluX3dyaXRlMzIoRVBQSTBfRlMyV19MVkIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0ZTMlBfTEFWRigpCWJmaW5fcmVhZDMyKEVQUEkwX0ZTMlBfTEFWRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9GUzJQX0xBVkYodmFsKQliZmluX3dyaXRlMzIoRVBQSTBfRlMyUF9MQVZGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9DTElQKCkJCWJmaW5fcmVhZDMyKEVQUEkwX0NMSVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfQ0xJUCh2YWwpCWJmaW5fd3JpdGUzMihFUFBJMF9DTElQLCB2YWwpCisKKy8qIFVBUlQyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9ETEwoKQkJYmZpbl9yZWFkMTYoVUFSVDJfRExMKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0RMTCh2YWwpCWJmaW5fd3JpdGUxNihVQVJUMl9ETEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0RMSCgpCQliZmluX3JlYWQxNihVQVJUMl9ETEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfRExIKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQyX0RMSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfR0NUTCgpCQliZmluX3JlYWQxNihVQVJUMl9HQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0dDVEwodmFsKQliZmluX3dyaXRlMTYoVUFSVDJfR0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfTENSKCkJCWJmaW5fcmVhZDE2KFVBUlQyX0xDUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMl9MQ1IodmFsKQliZmluX3dyaXRlMTYoVUFSVDJfTENSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9NQ1IoKQkJYmZpbl9yZWFkMTYoVUFSVDJfTUNSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX01DUih2YWwpCWJmaW5fd3JpdGUxNihVQVJUMl9NQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0xTUigpCQliZmluX3JlYWQxNihVQVJUMl9MU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfTFNSKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQyX0xTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfTVNSKCkJCWJmaW5fcmVhZDE2KFVBUlQyX01TUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMl9NU1IodmFsKQliZmluX3dyaXRlMTYoVUFSVDJfTVNSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9TQ1IoKQkJYmZpbl9yZWFkMTYoVUFSVDJfU0NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX1NDUih2YWwpCWJmaW5fd3JpdGUxNihVQVJUMl9TQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0lFUl9TRVQoKQliZmluX3JlYWQxNihVQVJUMl9JRVJfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0lFUl9TRVQodmFsKQliZmluX3dyaXRlMTYoVUFSVDJfSUVSX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfSUVSX0NMRUFSKCkJYmZpbl9yZWFkMTYoVUFSVDJfSUVSX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0lFUl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihVQVJUMl9JRVJfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX1JCUigpCQliZmluX3JlYWQxNihVQVJUMl9SQlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfUkJSKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQyX1JCUiwgdmFsKQorCisvKiBUd28gV2lyZSBJbnRlcmZhY2UgUmVnaXN0ZXJzIChUV0kxKSAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX0NMS0RJVigpCQkJYmZpbl9yZWFkMTYoVFdJMV9DTEtESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9DTEtESVYodmFsKQkJYmZpbl93cml0ZTE2KFRXSTFfQ0xLRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX0NPTlRST0woKQkJYmZpbl9yZWFkMTYoVFdJMV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX1NMQVZFX0NUUkwoKQkJYmZpbl9yZWFkMTYoVFdJMV9TTEFWRV9DVFJMKQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfU0xBVkVfQ1RSTCh2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9TTEFWRV9DVFJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX1NMQVZFX1NUQVQoKQkJYmZpbl9yZWFkMTYoVFdJMV9TTEFWRV9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfU0xBVkVfU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9TTEFWRV9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX1NMQVZFX0FERFIoKQkJYmZpbl9yZWFkMTYoVFdJMV9TTEFWRV9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfU0xBVkVfQUREUih2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9TTEFWRV9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX01BU1RFUl9DVFJMKCkJCWJmaW5fcmVhZDE2KFRXSTFfTUFTVEVSX0NUUkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9NQVNURVJfQ1RSTCh2YWwpCWJmaW5fd3JpdGUxNihUV0kxX01BU1RFUl9DVFJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX01BU1RFUl9TVEFUKCkJCWJmaW5fcmVhZDE2KFRXSTFfTUFTVEVSX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9NQVNURVJfU1RBVCh2YWwpCWJmaW5fd3JpdGUxNihUV0kxX01BU1RFUl9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX01BU1RFUl9BRERSKCkJCWJmaW5fcmVhZDE2KFRXSTFfTUFTVEVSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9NQVNURVJfQUREUih2YWwpCWJmaW5fd3JpdGUxNihUV0kxX01BU1RFUl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX0lOVF9TVEFUKCkJCWJmaW5fcmVhZDE2KFRXSTFfSU5UX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9JTlRfU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9JTlRfU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMV9JTlRfTUFTSygpCQliZmluX3JlYWQxNihUV0kxX0lOVF9NQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfSU5UX01BU0sodmFsKQkJYmZpbl93cml0ZTE2KFRXSTFfSU5UX01BU0ssIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfRklGT19DVFJMKCkJCWJmaW5fcmVhZDE2KFRXSTFfRklGT19DVFJMKQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfRklGT19DVFJMKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX0ZJRk9fQ1RSTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMV9GSUZPX1NUQVQoKQkJYmZpbl9yZWFkMTYoVFdJMV9GSUZPX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9GSUZPX1NUQVQodmFsKQkJYmZpbl93cml0ZTE2KFRXSTFfRklGT19TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX1hNVF9EQVRBOCgpCQliZmluX3JlYWQxNihUV0kxX1hNVF9EQVRBOCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX1hNVF9EQVRBOCh2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9YTVRfREFUQTgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfWE1UX0RBVEExNigpCQliZmluX3JlYWQxNihUV0kxX1hNVF9EQVRBMTYpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9YTVRfREFUQTE2KHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX1hNVF9EQVRBMTYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfUkNWX0RBVEE4KCkJCWJmaW5fcmVhZDE2KFRXSTFfUkNWX0RBVEE4KQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfUkNWX0RBVEE4KHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX1JDVl9EQVRBOCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMV9SQ1ZfREFUQTE2KCkJCWJmaW5fcmVhZDE2KFRXSTFfUkNWX0RBVEExNikKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX1JDVl9EQVRBMTYodmFsKQkJYmZpbl93cml0ZTE2KFRXSTFfUkNWX0RBVEExNiwgdmFsKQorCisvKiBTUEkyICBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfU1BJMl9DVEwoKQkJYmZpbl9yZWFkMTYoU1BJMl9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJMl9DVEwodmFsKQliZmluX3dyaXRlMTYoU1BJMl9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSTJfRkxHKCkJCWJmaW5fcmVhZDE2KFNQSTJfRkxHKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfRkxHKHZhbCkJYmZpbl93cml0ZTE2KFNQSTJfRkxHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUEkyX1NUQVQoKQkJYmZpbl9yZWFkMTYoU1BJMl9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfU1RBVCh2YWwpCWJmaW5fd3JpdGUxNihTUEkyX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSTJfVERCUigpCQliZmluX3JlYWQxNihTUEkyX1REQlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJMl9UREJSKHZhbCkJYmZpbl93cml0ZTE2KFNQSTJfVERCUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BJMl9SREJSKCkJCWJmaW5fcmVhZDE2KFNQSTJfUkRCUikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUEkyX1JEQlIodmFsKQliZmluX3dyaXRlMTYoU1BJMl9SREJSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUEkyX0JBVUQoKQkJYmZpbl9yZWFkMTYoU1BJMl9CQVVEKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfQkFVRCh2YWwpCWJmaW5fd3JpdGUxNihTUEkyX0JBVUQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSTJfU0hBRE9XKCkJCWJmaW5fcmVhZDE2KFNQSTJfU0hBRE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfU0hBRE9XKHZhbCkJYmZpbl93cml0ZTE2KFNQSTJfU0hBRE9XLCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ29uZmlnIDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUMxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUMxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUMxKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUMxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01EMSgpCQliZmluX3JlYWQxNihDQU4xX01EMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01EMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01EMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9UUlMxKCkJCWJmaW5fcmVhZDE2KENBTjFfVFJTMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1RSUzEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9UUlMxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1RSUjEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9UUlIxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVFJSMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1RSUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVEExKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FBMSgpCQliZmluX3JlYWQxNihDQU4xX0FBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FBMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9STVAxKCkJCWJmaW5fcmVhZDE2KENBTjFfUk1QMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JNUDEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9STVAxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1JNTDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9STUwxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfUk1MMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1JNTDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUJUSUYxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUJUSUYxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJUSUYxKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUJUSUYxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CUklGMSgpCQliZmluX3JlYWQxNihDQU4xX01CUklGMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CUklGMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CUklGMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQklNMSgpCQliZmluX3JlYWQxNihDQU4xX01CSU0xKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJJTTEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQklNMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9SRkgxKCkJCWJmaW5fcmVhZDE2KENBTjFfUkZIMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JGSDEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9SRkgxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX09QU1MxKCkJCWJmaW5fcmVhZDE2KENBTjFfT1BTUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9PUFNTMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX09QU1MxLCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ29uZmlnIDIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUMyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUMyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUMyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01EMigpCQliZmluX3JlYWQxNihDQU4xX01EMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01EMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01EMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9UUlMyKCkJCWJmaW5fcmVhZDE2KENBTjFfVFJTMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1RSUzIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9UUlMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1RSUjIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9UUlIyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVFJSMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1RSUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVEEyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FBMigpCQliZmluX3JlYWQxNihDQU4xX0FBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FBMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9STVAyKCkJCWJmaW5fcmVhZDE2KENBTjFfUk1QMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JNUDIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9STVAyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1JNTDIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9STUwyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfUk1MMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1JNTDIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUJUSUYyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUJUSUYyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJUSUYyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUJUSUYyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CUklGMigpCQliZmluX3JlYWQxNihDQU4xX01CUklGMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CUklGMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CUklGMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQklNMigpCQliZmluX3JlYWQxNihDQU4xX01CSU0yKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJJTTIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQklNMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9SRkgyKCkJCWJmaW5fcmVhZDE2KENBTjFfUkZIMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JGSDIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9SRkgyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX09QU1MyKCkJCWJmaW5fcmVhZDE2KENBTjFfT1BTUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9PUFNTMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX09QU1MyLCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ2xvY2svSW50ZXJydWJmaW5fcmVhZF8oKXQvQ291bnRlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9DTE9DSygpCQliZmluX3JlYWQxNihDQU4xX0NMT0NLKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQ0xPQ0sodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9DTE9DSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9USU1JTkcoKQkJYmZpbl9yZWFkMTYoQ0FOMV9USU1JTkcpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9USU1JTkcodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9USU1JTkcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfREVCVUcoKQkJYmZpbl9yZWFkMTYoQ0FOMV9ERUJVRykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0RFQlVHKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfREVCVUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KENBTjFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0NFQygpCQliZmluX3JlYWQxNihDQU4xX0NFQykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0NFQyh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0NFQywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9HSVMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9HSVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9HSVModmFsKQliZmluX3dyaXRlMTYoQ0FOMV9HSVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfR0lNKCkJCWJmaW5fcmVhZDE2KENBTjFfR0lNKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfR0lNKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfR0lNLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0dJRigpCQliZmluX3JlYWQxNihDQU4xX0dJRikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0dJRih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0dJRiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9DT05UUk9MKCkJYmZpbl9yZWFkMTYoQ0FOMV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQ09OVFJPTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfSU5UUigpCQliZmluX3JlYWQxNihDQU4xX0lOVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9JTlRSKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfSU5UUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQlREKCkJCWJmaW5fcmVhZDE2KENBTjFfTUJURCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CVEQodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQlRELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0VXUigpCQliZmluX3JlYWQxNihDQU4xX0VXUikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0VXUih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0VXUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9FU1IoKQkJYmZpbl9yZWFkMTYoQ0FOMV9FU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9FU1IodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9FU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVUNDTlQoKQkJYmZpbl9yZWFkMTYoQ0FOMV9VQ0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1VDQ05UKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVUNDTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVUNSQygpCQliZmluX3JlYWQxNihDQU4xX1VDUkMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9VQ1JDKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVUNSQywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9VQ0NORigpCQliZmluX3JlYWQxNihDQU4xX1VDQ05GKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVUNDTkYodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9VQ0NORiwgdmFsKQorCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggQWNjZWJmaW5fcmVhZF8oKXRhbmNlIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDBMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDBMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDBIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDBILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDFMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAxTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDFIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAxSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDFILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDJMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAyTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDJIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAySCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDJILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDNMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wM0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAzTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDNMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDNIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wM0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAzSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDNILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDRMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA0TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDRMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDRIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA0SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDVMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA1TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDVMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDVIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA1SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDVILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDZMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA2TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDZMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDZIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA2SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDZILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDdMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wN0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA3TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDdMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDdIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wN0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA3SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDhMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA4TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDhMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDhIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA4SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDhILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDlMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA5TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDlMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDlIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA5SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDlILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTBMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTBMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTBIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTBILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTFMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTExTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTFIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTExSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTFILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTJMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEyTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTJIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEySCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTJILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTNMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xM0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEzTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTNMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTNIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xM0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEzSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTNILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTRMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE0TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTRMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTRIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE0SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTVMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE1TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTVMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTVIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE1SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTVILCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBBY2NlYmZpbl9yZWFkXygpdGFuY2UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xNkwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE2TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTZMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xNkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xNkgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE2SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTZIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xNkgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xN0woKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE3TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTdMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xN0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xN0goKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE3SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTdIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xN0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE4TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMThMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE4SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMThIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE5TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTlMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE5SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTlIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIwTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjBMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIwSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjBIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIxTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjFMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIxSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjFIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMkwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIyTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjJMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMkgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIySCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjJIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMkgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yM0woKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIzTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjNMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yM0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yM0goKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIzSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjNIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yM0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI0TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjRMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI0SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjRIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI1TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjVMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI1SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjVIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNkwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI2TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjZMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNkgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI2SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjZIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNkgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yN0woKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI3TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjdMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yN0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yN0goKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI3SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjdIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yN0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI4TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjhMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI4SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjhIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI5TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjlMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI5SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjlIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMwTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzBMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMwSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzBIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMxTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzFMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMxSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzFIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMUgsIHZhbCkKKworLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IERhdGEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDBfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwMF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDBfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwMF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDBfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDBfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAwX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDFfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjAxX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDFfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjAxX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDFfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAxX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDFfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAyX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDJfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAyX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDJfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAyX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAyX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDJfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMl9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDNfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwM19MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDNfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwM19USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDNfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDNfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwM19JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAzX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDRfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA0X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDRfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA0X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDRfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA0X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDRfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA1X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDVfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA1X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDVfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA1X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA1X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDVfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNV9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDZfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwNl9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDZfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwNl9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDZfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDZfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNl9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA2X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDdfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwN19MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA3X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDdfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwN19USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA3X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDdfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwN19JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwN19JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA3X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDdfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA4X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDhfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA4X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDhfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA4X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA4X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDhfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwOF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDlfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwOV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDlfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwOV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDlfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDlfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA5X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTBfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEwX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTBfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEwX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTBfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEwX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTBfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjExX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTFfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjExX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTFfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjExX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjExX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTFfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMV9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTJfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxMl9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTJfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxMl9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTJfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTJfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMl9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjEyX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTNfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxM19MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEzX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTNfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxM19USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEzX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTNfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxM19JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxM19JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEzX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTNfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE0X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTRfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE0X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTRfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE0X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE0X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTRfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTVfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxNV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTVfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxNV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTVfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTVfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE1X0lEMSwgdmFsKQorCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggRGF0YSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTZfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNl9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE2X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTZfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNl9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE2X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTZfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNl9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNl9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE2X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTZfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE3X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTdfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE3X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTdfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE3X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE3X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTdfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxN19JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMThfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxOF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMThfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxOF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMThfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMThfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE4X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTlfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE5X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTlfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE5X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTlfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE5X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTlfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIwX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjBfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIwX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjBfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIwX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIwX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjBfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjFfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyMV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjFfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyMV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjFfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjFfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIxX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjJfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMl9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjIyX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjJfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMl9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjIyX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjJfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMl9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMl9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIyX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjJfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIzX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjNfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIzX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjNfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIzX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIzX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjNfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyM19JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjRfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyNF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjRfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyNF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjRfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjRfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI0X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjVfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI1X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjVfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI1X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjVfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI1X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjVfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI2X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjZfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI2X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjZfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI2X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI2X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjZfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNl9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjdfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyN19MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjdfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyN19USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjdfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjdfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyN19JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI3X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjhfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI4X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjhfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI4X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjhfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyOF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI4X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjhfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI5X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjlfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI5X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjlfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI5X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI5X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjlfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOV9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzBfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIzMF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzBfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIzMF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzBfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzBfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjMwX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMzFfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjMxX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMzFfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjMxX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMzFfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMxX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzFfSUQxLCB2YWwpCisKKy8qIEFUQVBJIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfREVWX0FERFIoKQkJYmZpbl9yZWFkMTYoQVRBUElfREVWX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfREVWX0FERFIodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX0RFVl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9ERVZfVFhCVUYoKQkJYmZpbl9yZWFkMTYoQVRBUElfREVWX1RYQlVGKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0RFVl9UWEJVRih2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfREVWX1RYQlVGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9ERVZfUlhCVUYoKQkJYmZpbl9yZWFkMTYoQVRBUElfREVWX1JYQlVGKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0RFVl9SWEJVRih2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfREVWX1JYQlVGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9JTlRfTUFTSygpCQliZmluX3JlYWQxNihBVEFQSV9JTlRfTUFTSykKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9JTlRfTUFTSyh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfSU5UX01BU0ssIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0lOVF9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoQVRBUElfSU5UX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9JTlRfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX0lOVF9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1hGRVJfTEVOKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1hGRVJfTEVOKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1hGRVJfTEVOKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9YRkVSX0xFTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfTElORV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoQVRBUElfTElORV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfTElORV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoQVRBUElfTElORV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1NNX1NUQVRFKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1NNX1NUQVRFKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1NNX1NUQVRFKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9TTV9TVEFURSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVEVSTUlOQVRFKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1RFUk1JTkFURSkKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9URVJNSU5BVEUodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1RFUk1JTkFURSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfUElPX1RGUkNOVCgpCQliZmluX3JlYWQxNihBVEFQSV9QSU9fVEZSQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1BJT19URlJDTlQodmFsKQliZmluX3dyaXRlMTYoQVRBUElfUElPX1RGUkNOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfRE1BX1RGUkNOVCgpCQliZmluX3JlYWQxNihBVEFQSV9ETUFfVEZSQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0RNQV9URlJDTlQodmFsKQliZmluX3dyaXRlMTYoQVRBUElfRE1BX1RGUkNOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVU1BSU5fVEZSQ05UKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1VNQUlOX1RGUkNOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9VTUFJTl9URlJDTlQodmFsKQliZmluX3dyaXRlMTYoQVRBUElfVU1BSU5fVEZSQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9VRE1BT1VUX1RGUkNOVCgpCWJmaW5fcmVhZDE2KEFUQVBJX1VETUFPVVRfVEZSQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1VETUFPVVRfVEZSQ05UKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1VETUFPVVRfVEZSQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9SRUdfVElNXzAoKQkJYmZpbl9yZWFkMTYoQVRBUElfUkVHX1RJTV8wKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1JFR19USU1fMCh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfUkVHX1RJTV8wLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9QSU9fVElNXzAoKQkJYmZpbl9yZWFkMTYoQVRBUElfUElPX1RJTV8wKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1BJT19USU1fMCh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfUElPX1RJTV8wLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9QSU9fVElNXzEoKQkJYmZpbl9yZWFkMTYoQVRBUElfUElPX1RJTV8xKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1BJT19USU1fMSh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfUElPX1RJTV8xLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9NVUxUSV9USU1fMCgpCQliZmluX3JlYWQxNihBVEFQSV9NVUxUSV9USU1fMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9NVUxUSV9USU1fMCh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9NVUxUSV9USU1fMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfTVVMVElfVElNXzEoKQkJYmZpbl9yZWFkMTYoQVRBUElfTVVMVElfVElNXzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfTVVMVElfVElNXzEodmFsKQliZmluX3dyaXRlMTYoQVRBUElfTVVMVElfVElNXzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX01VTFRJX1RJTV8yKCkJCWJmaW5fcmVhZDE2KEFUQVBJX01VTFRJX1RJTV8yKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX01VTFRJX1RJTV8yKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX01VTFRJX1RJTV8yLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9VTFRSQV9USU1fMCgpCQliZmluX3JlYWQxNihBVEFQSV9VTFRSQV9USU1fMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9VTFRSQV9USU1fMCh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9VTFRSQV9USU1fMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVUxUUkFfVElNXzEoKQkJYmZpbl9yZWFkMTYoQVRBUElfVUxUUkFfVElNXzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVUxUUkFfVElNXzEodmFsKQliZmluX3dyaXRlMTYoQVRBUElfVUxUUkFfVElNXzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1VMVFJBX1RJTV8yKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1VMVFJBX1RJTV8yKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1VMVFJBX1RJTV8yKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1VMVFJBX1RJTV8yLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9VTFRSQV9USU1fMygpCQliZmluX3JlYWQxNihBVEFQSV9VTFRSQV9USU1fMykKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9VTFRSQV9USU1fMyh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9VTFRSQV9USU1fMywgdmFsKQorCisvKiBTREggUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9QV1JfQ1RMKCkJCWJmaW5fcmVhZDE2KFNESF9QV1JfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9QV1JfQ1RMKHZhbCkJYmZpbl93cml0ZTE2KFNESF9QV1JfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfQ0xLX0NUTCgpCQliZmluX3JlYWQxNihTREhfQ0xLX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfQ0xLX0NUTCh2YWwpCWJmaW5fd3JpdGUxNihTREhfQ0xLX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX0FSR1VNRU5UKCkJYmZpbl9yZWFkMzIoU0RIX0FSR1VNRU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9BUkdVTUVOVCh2YWwpCWJmaW5fd3JpdGUzMihTREhfQVJHVU1FTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9DT01NQU5EKCkJCWJmaW5fcmVhZDE2KFNESF9DT01NQU5EKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9DT01NQU5EKHZhbCkJYmZpbl93cml0ZTE2KFNESF9DT01NQU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUkVTUF9DTUQoKQliZmluX3JlYWQxNihTREhfUkVTUF9DTUQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1JFU1BfQ01EKHZhbCkJYmZpbl93cml0ZTE2KFNESF9SRVNQX0NNRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1JFU1BPTlNFMCgpCWJmaW5fcmVhZDMyKFNESF9SRVNQT05TRTApCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1JFU1BPTlNFMCh2YWwpCWJmaW5fd3JpdGUzMihTREhfUkVTUE9OU0UwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUkVTUE9OU0UxKCkJYmZpbl9yZWFkMzIoU0RIX1JFU1BPTlNFMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUkVTUE9OU0UxKHZhbCkJYmZpbl93cml0ZTMyKFNESF9SRVNQT05TRTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9SRVNQT05TRTIoKQliZmluX3JlYWQzMihTREhfUkVTUE9OU0UyKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9SRVNQT05TRTIodmFsKQliZmluX3dyaXRlMzIoU0RIX1JFU1BPTlNFMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1JFU1BPTlNFMygpCWJmaW5fcmVhZDMyKFNESF9SRVNQT05TRTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1JFU1BPTlNFMyh2YWwpCWJmaW5fd3JpdGUzMihTREhfUkVTUE9OU0UzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfREFUQV9USU1FUigpCWJmaW5fcmVhZDMyKFNESF9EQVRBX1RJTUVSKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9EQVRBX1RJTUVSKHZhbCkJYmZpbl93cml0ZTMyKFNESF9EQVRBX1RJTUVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfREFUQV9MR1RIKCkJYmZpbl9yZWFkMTYoU0RIX0RBVEFfTEdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfREFUQV9MR1RIKHZhbCkJYmZpbl93cml0ZTE2KFNESF9EQVRBX0xHVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9EQVRBX0NUTCgpCWJmaW5fcmVhZDE2KFNESF9EQVRBX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfREFUQV9DVEwodmFsKQliZmluX3dyaXRlMTYoU0RIX0RBVEFfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfREFUQV9DTlQoKQliZmluX3JlYWQxNihTREhfREFUQV9DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0RBVEFfQ05UKHZhbCkJYmZpbl93cml0ZTE2KFNESF9EQVRBX0NOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1NUQVRVUygpCQliZmluX3JlYWQzMihTREhfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9TVEFUVVModmFsKQliZmluX3dyaXRlMzIoU0RIX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1NUQVRVU19DTFIoKQliZmluX3JlYWQxNihTREhfU1RBVFVTX0NMUikKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfU1RBVFVTX0NMUih2YWwpCWJmaW5fd3JpdGUxNihTREhfU1RBVFVTX0NMUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX01BU0swKCkJCWJmaW5fcmVhZDMyKFNESF9NQVNLMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfTUFTSzAodmFsKQliZmluX3dyaXRlMzIoU0RIX01BU0swLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfTUFTSzEoKQkJYmZpbl9yZWFkMzIoU0RIX01BU0sxKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9NQVNLMSh2YWwpCWJmaW5fd3JpdGUzMihTREhfTUFTSzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9GSUZPX0NOVCgpCWJmaW5fcmVhZDE2KFNESF9GSUZPX0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfRklGT19DTlQodmFsKQliZmluX3dyaXRlMTYoU0RIX0ZJRk9fQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfRklGTygpCQliZmluX3JlYWQzMihTREhfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfRklGTyh2YWwpCWJmaW5fd3JpdGUzMihTREhfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX0VfU1RBVFVTKCkJYmZpbl9yZWFkMTYoU0RIX0VfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9FX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihTREhfRV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9FX01BU0soKQkJYmZpbl9yZWFkMTYoU0RIX0VfTUFTSykKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfRV9NQVNLKHZhbCkJYmZpbl93cml0ZTE2KFNESF9FX01BU0ssIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9DRkcoKQkJYmZpbl9yZWFkMTYoU0RIX0NGRykKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfQ0ZHKHZhbCkJCWJmaW5fd3JpdGUxNihTREhfQ0ZHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUkRfV0FJVF9FTigpCWJmaW5fcmVhZDE2KFNESF9SRF9XQUlUX0VOKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9SRF9XQUlUX0VOKHZhbCkJYmZpbl93cml0ZTE2KFNESF9SRF9XQUlUX0VOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUElEMCgpCQliZmluX3JlYWQxNihTREhfUElEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElEMCh2YWwpCWJmaW5fd3JpdGUxNihTREhfUElEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDEoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDEodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQyKCkJCWJmaW5fcmVhZDE2KFNESF9QSUQyKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQyKHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUElEMygpCQliZmluX3JlYWQxNihTREhfUElEMykKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElEMyh2YWwpCWJmaW5fd3JpdGUxNihTREhfUElEMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDQoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDQodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQ1KCkJCWJmaW5fcmVhZDE2KFNESF9QSUQ1KQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQ1KHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQ1LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUElENigpCQliZmluX3JlYWQxNihTREhfUElENikKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElENih2YWwpCWJmaW5fd3JpdGUxNihTREhfUElENiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDcoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDcpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDcodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDcsIHZhbCkKKworLyogSE9TVCBQb3J0IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9IT1NUX0NPTlRST0woKQliZmluX3JlYWQxNihIT1NUX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9DT05UUk9MKHZhbCkJYmZpbl93cml0ZTE2KEhPU1RfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE9TVF9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoSE9TVF9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoSE9TVF9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hPU1RfVElNRU9VVCgpCWJmaW5fcmVhZDE2KEhPU1RfVElNRU9VVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9IT1NUX1RJTUVPVVQodmFsKQliZmluX3dyaXRlMTYoSE9TVF9USU1FT1VULCB2YWwpCisKKy8qIFVTQiBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRkFERFIoKQkJYmZpbl9yZWFkMTYoVVNCX0ZBRERSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9GQUREUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRkFERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9QT1dFUigpCQliZmluX3JlYWQxNihVU0JfUE9XRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1BPV0VSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9QT1dFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJUWCgpCQliZmluX3JlYWQxNihVU0JfSU5UUlRYKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSVFgodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJUWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJSWCgpCQliZmluX3JlYWQxNihVU0JfSU5UUlJYKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSUlgodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJSWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJUWEUoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJUWEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOVFJUWEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJUWEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSUlhFKCkJCWJmaW5fcmVhZDE2KFVTQl9JTlRSUlhFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSUlhFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTlRSUlhFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5UUlVTQigpCQliZmluX3JlYWQxNihVU0JfSU5UUlVTQikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlVTQih2YWwpCWJmaW5fd3JpdGUxNihVU0JfSU5UUlVTQiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJVU0JFKCkJYmZpbl9yZWFkMTYoVVNCX0lOVFJVU0JFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSVVNCRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfSU5UUlVTQkUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9GUkFNRSgpCQliZmluX3JlYWQxNihVU0JfRlJBTUUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0ZSQU1FKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9GUkFNRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOREVYKCkJCWJmaW5fcmVhZDE2KFVTQl9JTkRFWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5ERVgodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOREVYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfVEVTVE1PREUoKQliZmluX3JlYWQxNihVU0JfVEVTVE1PREUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RFU1RNT0RFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9URVNUTU9ERSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0dMT0JJTlRSKCkJYmZpbl9yZWFkMTYoVVNCX0dMT0JJTlRSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9HTE9CSU5UUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfR0xPQklOVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9HTE9CQUxfQ1RMKCkJYmZpbl9yZWFkMTYoVVNCX0dMT0JBTF9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0dMT0JBTF9DVEwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9HTE9CQUxfQ1RMLCB2YWwpCisKKy8qIFVTQiBQYWNrZXQgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYX01BWF9QQUNLRVQoKQkJYmZpbl9yZWFkMTYoVVNCX1RYX01BWF9QQUNLRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYX01BWF9QQUNLRVQodmFsKQliZmluX3dyaXRlMTYoVVNCX1RYX01BWF9QQUNLRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9DU1IwKCkJCWJmaW5fcmVhZDE2KFVTQl9DU1IwKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9DU1IwKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9DU1IwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWF9NQVhfUEFDS0VUKCkJCWJmaW5fcmVhZDE2KFVTQl9SWF9NQVhfUEFDS0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWF9NQVhfUEFDS0VUKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9SWF9NQVhfUEFDS0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9DT1VOVDAoKQkJYmZpbl9yZWFkMTYoVVNCX0NPVU5UMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQ09VTlQwKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9DT1VOVDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9SWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfTkFLTElNSVQwKCkJYmZpbl9yZWFkMTYoVVNCX05BS0xJTUlUMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfTkFLTElNSVQwKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9OQUtMSU1JVDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX1RYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX1JYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX1JYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9UWENPVU5ULCB2YWwpCisKKy8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IEZJRk8gUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDBfRklGTygpCWJmaW5fcmVhZDE2KFVTQl9FUDBfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVAwX0ZJRk8odmFsKQliZmluX3dyaXRlMTYoVVNCX0VQMF9GSUZPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVAxX0ZJRk8oKQliZmluX3JlYWQxNihVU0JfRVAxX0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQMV9GSUZPKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUDFfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQMl9GSUZPKCkJYmZpbl9yZWFkMTYoVVNCX0VQMl9GSUZPKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDJfRklGTyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVAyX0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDNfRklGTygpCWJmaW5fcmVhZDE2KFVTQl9FUDNfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVAzX0ZJRk8odmFsKQliZmluX3dyaXRlMTYoVVNCX0VQM19GSUZPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVA0X0ZJRk8oKQliZmluX3JlYWQxNihVU0JfRVA0X0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQNF9GSUZPKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUDRfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQNV9GSUZPKCkJYmZpbl9yZWFkMTYoVVNCX0VQNV9GSUZPKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUDVfRklGTyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVA1X0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDZfRklGTygpCWJmaW5fcmVhZDE2KFVTQl9FUDZfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVA2X0ZJRk8odmFsKQliZmluX3dyaXRlMTYoVVNCX0VQNl9GSUZPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVA3X0ZJRk8oKQliZmluX3JlYWQxNihVU0JfRVA3X0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQN19GSUZPKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUDdfRklGTywgdmFsKQorCisvKiBVU0IgT1RHIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9PVEdfREVWX0NUTCgpCQliZmluX3JlYWQxNihVU0JfT1RHX0RFVl9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX09UR19ERVZfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfT1RHX0RFVl9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9PVEdfVkJVU19JUlEoKQkJYmZpbl9yZWFkMTYoVVNCX09UR19WQlVTX0lSUSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfT1RHX1ZCVVNfSVJRKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9PVEdfVkJVU19JUlEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9PVEdfVkJVU19NQVNLKCkJCWJmaW5fcmVhZDE2KFVTQl9PVEdfVkJVU19NQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9PVEdfVkJVU19NQVNLKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9PVEdfVkJVU19NQVNLLCB2YWwpCisKKy8qIFVTQiBQaHkgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0xJTktJTkZPKCkJYmZpbl9yZWFkMTYoVVNCX0xJTktJTkZPKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9MSU5LSU5GTyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfTElOS0lORk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9WUExFTigpCQliZmluX3JlYWQxNihVU0JfVlBMRU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1ZQTEVOKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9WUExFTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0hTX0VPRjEoKQkJYmZpbl9yZWFkMTYoVVNCX0hTX0VPRjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0hTX0VPRjEodmFsKQliZmluX3dyaXRlMTYoVVNCX0hTX0VPRjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9GU19FT0YxKCkJCWJmaW5fcmVhZDE2KFVTQl9GU19FT0YxKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9GU19FT0YxKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9GU19FT0YxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfTFNfRU9GMSgpCQliZmluX3JlYWQxNihVU0JfTFNfRU9GMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfTFNfRU9GMSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfTFNfRU9GMSwgdmFsKQorCisvKiAoQVBIWV9DTlRSTCBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9BUEhZX0NOVFJMKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NOVFJMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9BUEhZX0NOVFJMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQVBIWV9DTlRSTCwgdmFsKQorCisvKiAoQVBIWV9DQUxJQiBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9BUEhZX0NBTElCKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NBTElCKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9BUEhZX0NBTElCKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQVBIWV9DQUxJQiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0FQSFlfQ05UUkwyKCkJCWJmaW5fcmVhZDE2KFVTQl9BUEhZX0NOVFJMMikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQVBIWV9DTlRSTDIodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9BUEhZX0NOVFJMMiwgdmFsKQorCisvKiAoUEhZX1RFU1QgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUEhZX1RFU1QoKQkJYmZpbl9yZWFkMTYoVVNCX1BIWV9URVNUKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QSFlfVEVTVCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1BIWV9URVNULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUExMT1NDX0NUUkwoKQkJYmZpbl9yZWFkMTYoVVNCX1BMTE9TQ19DVFJMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9QTExPU0NfQ1RSTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1BMTE9TQ19DVFJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfU1JQX0NMS0RJVigpCQliZmluX3JlYWQxNihVU0JfU1JQX0NMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfU1JQX0NMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoVVNCX1NSUF9DTEtESVYsIHZhbCkKKworLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgMCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYSU5URVJWQUwsIHZhbCkKKworLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgMSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1RYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1JYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhJTlRFUlZBTCwgdmFsKQorCisvKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCAyIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWElOVEVSVkFMLCB2YWwpCisKKy8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDMgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYSU5URVJWQUwsIHZhbCkKKworLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgNCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1RYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1JYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhJTlRFUlZBTCwgdmFsKQorCisvKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCA1IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWElOVEVSVkFMLCB2YWwpCisKKy8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDYgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYSU5URVJWQUwsIHZhbCkKKworLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgNyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1JYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BX0lOVEVSUlVQVCgpCQliZmluX3JlYWQxNihVU0JfRE1BX0lOVEVSUlVQVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BX0lOVEVSUlVQVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BX0lOVEVSUlVQVCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCAwIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMENPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMEFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEwQUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMEFERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMENPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTBDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTBDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgMSBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BMUNPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMUNPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMUFERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMUFERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUNPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQ09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUExQ09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQ09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQ09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUExQ09VTlRISUdILCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDIgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTJDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTJBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkFERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQ09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkNPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMkNPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMkNPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkNPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMkNPVU5USElHSCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCAzIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0FERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUEzQUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BM0FERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BM0NPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTNDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTNDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgNCBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BNENPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNENPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNEFERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNEFERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNEFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0QUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNENPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0Q09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE0Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0Q09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE0Q09VTlRISUdILCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDUgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1Q09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTVDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1QUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTVBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1QUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNUFERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1Q09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNUNPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUNPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNUNPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNUNPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNUNPVU5USElHSCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCA2IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2Q09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkNPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE2Q09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2QUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE2QUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNkFERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2QUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTZBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNkNPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2Q09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTZDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTZDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTZDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgNyBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BN0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BN0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BN0FERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BN0FERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0FERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE3QUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3Q09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0NPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE3Q09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE3Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3Q09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE3Q09VTlRISUdILCB2YWwpCisKKy8qIEtleWJmaW5fcmVhZF8oKWFkIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9LUEFEX0NUTCgpCQliZmluX3JlYWQxNihLUEFEX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9LUEFEX0NUTCh2YWwpCWJmaW5fd3JpdGUxNihLUEFEX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfS1BBRF9QUkVTQ0FMRSgpCWJmaW5fcmVhZDE2KEtQQURfUFJFU0NBTEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfS1BBRF9QUkVTQ0FMRSh2YWwpCWJmaW5fd3JpdGUxNihLUEFEX1BSRVNDQUxFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9LUEFEX01TRUwoKQkJYmZpbl9yZWFkMTYoS1BBRF9NU0VMKQorI2RlZmluZSBiZmluX3dyaXRlX0tQQURfTVNFTCh2YWwpCWJmaW5fd3JpdGUxNihLUEFEX01TRUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0tQQURfUk9XQ09MKCkJCWJmaW5fcmVhZDE2KEtQQURfUk9XQ09MKQorI2RlZmluZSBiZmluX3dyaXRlX0tQQURfUk9XQ09MKHZhbCkJYmZpbl93cml0ZTE2KEtQQURfUk9XQ09MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9LUEFEX1NUQVQoKQkJYmZpbl9yZWFkMTYoS1BBRF9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX0tQQURfU1RBVCh2YWwpCWJmaW5fd3JpdGUxNihLUEFEX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0tQQURfU09GVEVWQUwoKQliZmluX3JlYWQxNihLUEFEX1NPRlRFVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX0tQQURfU09GVEVWQUwodmFsKQliZmluX3dyaXRlMTYoS1BBRF9TT0ZURVZBTCwgdmFsKQorCisvKiBQaXhlbCBDb21iZmluX3JlYWRfKClvc2l0b3IgKFBJWEMpIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0NUTCgpCQliZmluX3JlYWQxNihQSVhDX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0NUTCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19QUEwoKQkJYmZpbl9yZWFkMTYoUElYQ19QUEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19QUEwodmFsKQliZmluX3dyaXRlMTYoUElYQ19QUEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfTFBGKCkJCWJmaW5fcmVhZDE2KFBJWENfTFBGKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfTFBGKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfTFBGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0FIU1RBUlQoKQliZmluX3JlYWQxNihQSVhDX0FIU1RBUlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19BSFNUQVJUKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQUhTVEFSVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19BSEVORCgpCQliZmluX3JlYWQxNihQSVhDX0FIRU5EKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQUhFTkQodmFsKQliZmluX3dyaXRlMTYoUElYQ19BSEVORCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19BVlNUQVJUKCkJYmZpbl9yZWFkMTYoUElYQ19BVlNUQVJUKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQVZTVEFSVCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0FWU1RBUlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQVZFTkQoKQkJYmZpbl9yZWFkMTYoUElYQ19BVkVORCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0FWRU5EKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQVZFTkQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQVRSQU5TUCgpCWJmaW5fcmVhZDE2KFBJWENfQVRSQU5TUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0FUUkFOU1AodmFsKQliZmluX3dyaXRlMTYoUElYQ19BVFJBTlNQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0JIU1RBUlQoKQliZmluX3JlYWQxNihQSVhDX0JIU1RBUlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19CSFNUQVJUKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQkhTVEFSVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19CSEVORCgpCQliZmluX3JlYWQxNihQSVhDX0JIRU5EKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQkhFTkQodmFsKQliZmluX3dyaXRlMTYoUElYQ19CSEVORCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19CVlNUQVJUKCkJYmZpbl9yZWFkMTYoUElYQ19CVlNUQVJUKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQlZTVEFSVCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0JWU1RBUlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQlZFTkQoKQkJYmZpbl9yZWFkMTYoUElYQ19CVkVORCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0JWRU5EKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQlZFTkQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQlRSQU5TUCgpCWJmaW5fcmVhZDE2KFBJWENfQlRSQU5TUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0JUUkFOU1AodmFsKQliZmluX3dyaXRlMTYoUElYQ19CVFJBTlNQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0lOVFJTVEFUKCkJYmZpbl9yZWFkMTYoUElYQ19JTlRSU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0lOVFJTVEFUKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfSU5UUlNUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfUllDT04oKQkJYmZpbl9yZWFkMzIoUElYQ19SWUNPTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX1JZQ09OKHZhbCkJYmZpbl93cml0ZTMyKFBJWENfUllDT04sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfR1VDT04oKQkJYmZpbl9yZWFkMzIoUElYQ19HVUNPTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0dVQ09OKHZhbCkJYmZpbl93cml0ZTMyKFBJWENfR1VDT04sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQlZDT04oKQkJYmZpbl9yZWFkMzIoUElYQ19CVkNPTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0JWQ09OKHZhbCkJYmZpbl93cml0ZTMyKFBJWENfQlZDT04sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQ0NCSUFTKCkJCWJmaW5fcmVhZDMyKFBJWENfQ0NCSUFTKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQ0NCSUFTKHZhbCkJYmZpbl93cml0ZTMyKFBJWENfQ0NCSUFTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX1RDKCkJCWJmaW5fcmVhZDMyKFBJWENfVEMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19UQyh2YWwpCQliZmluX3dyaXRlMzIoUElYQ19UQywgdmFsKQorCisvKiBIYW5kc2hha2UgTURNQSAwIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfQ09OVFJPTCgpCQliZmluX3JlYWQxNihITURNQTBfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9FQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0VDSU5JVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfRUNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfRUNJTklULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfQkNJTklUKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9CQ0lOSVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0JDSU5JVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0JDSU5JVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDVVJHRU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9FQ1VSR0VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfRUNVUkdFTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ1VSR0VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDT1ZFUkZMT1coKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0VDT1ZFUkZMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0VDT1ZFUkZMT1codmFsKQliZmluX3dyaXRlMTYoSE1ETUEwX0VDT1ZFUkZMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9FQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0VDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfRUNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfRUNPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfQkNPVU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9CQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUEwX0JDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0JDT1VOVCwgdmFsKQorCisvKiBIYW5kc2hha2UgTURNQSAxIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfQ09OVFJPTCgpCQliZmluX3JlYWQxNihITURNQTFfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9FQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0VDSU5JVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfRUNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfRUNJTklULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfQkNJTklUKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9CQ0lOSVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0JDSU5JVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0JDSU5JVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDVVJHRU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9FQ1VSR0VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfRUNVUkdFTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ1VSR0VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDT1ZFUkZMT1coKQkJYmZpbl9yZWFkMTYoSE1ETUExX0VDT1ZFUkZMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0VDT1ZFUkZMT1codmFsKQliZmluX3dyaXRlMTYoSE1ETUExX0VDT1ZFUkZMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9FQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0VDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfRUNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfRUNPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfQkNPVU5UKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9CQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE1ETUExX0JDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0JDT1VOVCwgdmFsKQorCisjZW5kaWYgLyogX0NERUZfQkY1NDhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9jZGVmQkY1NDkuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiNWI3YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ5LmgKQEAgLTAsMCArMSwxODk2IEBACisvKgorICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ5L2NkZWZCRjU0OS5oCisgKiBCYXNlZCBvbjoKKyAqIEF1dGhvcjoKKyAqCisgKiBDcmVhdGVkOgorICogRGVzY3JpcHRpb246CisgKgorICogUmV2OgorICoKKyAqIE1vZGlmaWVkOgorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX0NERUZfQkY1NDlfSAorI2RlZmluZSBfQ0RFRl9CRjU0OV9ICisKKy8qIGluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlICJkZWZCRjU0OS5oIgorCisvKiBpbmNsdWRlIGNvcmUgc2JmaW5fcmVhZF8oKWVjaWZpYyByZWdpc3RlciBwb2ludGVyIGRlZmluaXRpb25zICovCisjaW5jbHVkZSA8YXNtL21hY2gtY29tbW9uL2NkZWZfTFBCbGFja2Zpbi5oPgorCisvKiBTWVNURU0gJiBNTVIgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjU0OSAqLworCisvKiBpbmNsdWRlIGNkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IGJmaW5fcmVhZF8oKXJvY2Vzc29ycyAqLworI2luY2x1ZGUgImNkZWZCRjU0eF9iYXNlLmgiCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjU0OSB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KKworLyogVGltZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI4X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjhfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjhfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjhfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjhfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjhfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI4X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSOF9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI4X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjhfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjhfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjhfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI4X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSOF9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI4X1dJRFRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjlfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSOV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI5X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI5X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI5X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI5X0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI5X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSOV9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjlfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSOV9QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI5X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI5X1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI5X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSOV9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjlfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSOV9XSURUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIxMF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVIxMF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxMF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KFRJTUVSMTBfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjEwX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIxMF9DT1VOVEVSKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMTBfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVIxMF9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjEwX1BFUklPRCgpCQliZmluX3JlYWQzMihUSU1FUjEwX1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjEwX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIxMF9QRVJJT0QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMTBfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVIxMF9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjEwX1dJRFRIKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjEwX1dJRFRILCB2YWwpCisKKy8qIFRpbWVyIEdyb3ViZmluX3JlYWRfKCkgb2YgMyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9FTkFCTEUxKCkJCWJmaW5fcmVhZDE2KFRJTUVSX0VOQUJMRTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfRU5BQkxFMSh2YWwpCQliZmluX3dyaXRlMTYoVElNRVJfRU5BQkxFMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVJfRElTQUJMRTEoKQkJYmZpbl9yZWFkMTYoVElNRVJfRElTQUJMRTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfRElTQUJMRTEodmFsKQkJYmZpbl93cml0ZTE2KFRJTUVSX0RJU0FCTEUxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9TVEFUVVMxKCkJCWJmaW5fcmVhZDMyKFRJTUVSX1NUQVRVUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfU1RBVFVTMSh2YWwpCQliZmluX3dyaXRlMzIoVElNRVJfU1RBVFVTMSwgdmFsKQorCisvKiBTUE9SVDAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IxKCkJCQliZmluX3JlYWQxNihTUE9SVDBfVENSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVENSMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ1IyKCkJCQliZmluX3JlYWQxNihTUE9SVDBfVENSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfVENSMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1RDUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9UQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfVENMS0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1RGU0RJVigpCQliZmluX3JlYWQxNihTUE9SVDBfVEZTRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9URlNESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9URlNESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMF9UWCgpCQkJYmZpbl9yZWFkMzIoU1BPUlQwX1RYKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9UWCh2YWwpCQliZmluX3dyaXRlMzIoU1BPUlQwX1RYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUlgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMF9SWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfUlgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9SWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JDUjEoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9SQ1IxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SQ1IxKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfUkNSMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JDUjIoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9SQ1IyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9SQ1IyKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfUkNSMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1JDTEtESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQwX1JDTEtESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JDTEtESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9SQ0xLRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDBfUkZTRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9SRlNESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQwX1JGU0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQwX1JGU0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX1NUQVQoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX0NITkwoKQkJCWJmaW5fcmVhZDE2KFNQT1JUMF9DSE5MKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMF9DSE5MKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDBfQ0hOTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01DTUMxKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9NQ01DMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTUNNQzEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9NQ01DMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01DTUMyKCkJCWJmaW5fcmVhZDE2KFNQT1JUMF9NQ01DMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTUNNQzIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMF9NQ01DMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01UQ1MwKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzAodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NVENTMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01UQ1MxKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzEodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NVENTMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01UQ1MyKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NVENTMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01UQ1MzKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NVENTMykKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVRDUzModmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NVENTMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01SQ1MwKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NUkNTMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVJDUzAodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01SQ1MxKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NUkNTMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVJDUzEodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01SQ1MyKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NUkNTMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVJDUzIodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQwX01SQ1MzKCkJCWJmaW5fcmVhZDMyKFNQT1JUMF9NUkNTMykKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDBfTVJDUzModmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMF9NUkNTMywgdmFsKQorCisvKiBFUFBJMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KEVQUEkwX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfSENPVU5UKCkJCWJmaW5fcmVhZDE2KEVQUEkwX0hDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9IQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX0hDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfSERFTEFZKCkJCWJmaW5fcmVhZDE2KEVQUEkwX0hERUxBWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9IREVMQVkodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX0hERUxBWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfVkNPVU5UKCkJCWJmaW5fcmVhZDE2KEVQUEkwX1ZDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9WQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX1ZDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfVkRFTEFZKCkJCWJmaW5fcmVhZDE2KEVQUEkwX1ZERUxBWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9WREVMQVkodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkwX1ZERUxBWSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfRlJBTUUoKQkJCWJmaW5fcmVhZDE2KEVQUEkwX0ZSQU1FKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0ZSQU1FKHZhbCkJCWJmaW5fd3JpdGUxNihFUFBJMF9GUkFNRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfTElORSgpCQkJYmZpbl9yZWFkMTYoRVBQSTBfTElORSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9MSU5FKHZhbCkJCWJmaW5fd3JpdGUxNihFUFBJMF9MSU5FLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9DTEtESVYoKQkJYmZpbl9yZWFkMTYoRVBQSTBfQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0NMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoRVBQSTBfQ0xLRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9DT05UUk9MKCkJCWJmaW5fcmVhZDMyKEVQUEkwX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMzIoRVBQSTBfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTBfRlMxV19IQkwoKQkJYmZpbl9yZWFkMzIoRVBQSTBfRlMxV19IQkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfRlMxV19IQkwodmFsKQkJYmZpbl93cml0ZTMyKEVQUEkwX0ZTMVdfSEJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9GUzFQX0FWUEwoKQkJYmZpbl9yZWFkMzIoRVBQSTBfRlMxUF9BVlBMKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkwX0ZTMVBfQVZQTCh2YWwpCQliZmluX3dyaXRlMzIoRVBQSTBfRlMxUF9BVlBMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMF9GUzJXX0xWQigpCQliZmluX3JlYWQzMihFUFBJMF9GUzJXX0xWQikKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMF9GUzJXX0xWQih2YWwpCQliZmluX3dyaXRlMzIoRVBQSTBfRlMyV19MVkIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0ZTMlBfTEFWRigpCQliZmluX3JlYWQzMihFUFBJMF9GUzJQX0xBVkYpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfRlMyUF9MQVZGKHZhbCkJCWJmaW5fd3JpdGUzMihFUFBJMF9GUzJQX0xBVkYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkwX0NMSVAoKQkJCWJmaW5fcmVhZDMyKEVQUEkwX0NMSVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTBfQ0xJUCh2YWwpCQliZmluX3dyaXRlMzIoRVBQSTBfQ0xJUCwgdmFsKQorCisvKiBVQVJUMiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfRExMKCkJCQliZmluX3JlYWQxNihVQVJUMl9ETEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfRExMKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMl9ETEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0RMSCgpCQkJYmZpbl9yZWFkMTYoVUFSVDJfRExIKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0RMSCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDJfRExILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9HQ1RMKCkJCQliZmluX3JlYWQxNihVQVJUMl9HQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0dDVEwodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQyX0dDVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0xDUigpCQkJYmZpbl9yZWFkMTYoVUFSVDJfTENSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0xDUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDJfTENSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9NQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQyX01DUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMl9NQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQyX01DUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfTFNSKCkJCQliZmluX3JlYWQxNihVQVJUMl9MU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfTFNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMl9MU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX01TUigpCQkJYmZpbl9yZWFkMTYoVUFSVDJfTVNSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX01TUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDJfTVNSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMl9TQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQyX1NDUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMl9TQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQyX1NDUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDJfSUVSX1NFVCgpCQliZmluX3JlYWQxNihVQVJUMl9JRVJfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX0lFUl9TRVQodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQyX0lFUl9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX0lFUl9DTEVBUigpCQliZmluX3JlYWQxNihVQVJUMl9JRVJfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDJfSUVSX0NMRUFSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMl9JRVJfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQyX1JCUigpCQkJYmZpbl9yZWFkMTYoVUFSVDJfUkJSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQyX1JCUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDJfUkJSLCB2YWwpCisKKy8qIFR3byBXaXJlIEludGVyZmFjZSBSZWdpc3RlcnMgKFRXSTEpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfQ0xLRElWKCkJCQliZmluX3JlYWQxNihUV0kxX0NMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX0NMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9DTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfQ09OVFJPTCgpCQliZmluX3JlYWQxNihUV0kxX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfU0xBVkVfQ1RSTCgpCQliZmluX3JlYWQxNihUV0kxX1NMQVZFX0NUUkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9TTEFWRV9DVFJMKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX1NMQVZFX0NUUkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfU0xBVkVfU1RBVCgpCQliZmluX3JlYWQxNihUV0kxX1NMQVZFX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9TTEFWRV9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX1NMQVZFX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfU0xBVkVfQUREUigpCQliZmluX3JlYWQxNihUV0kxX1NMQVZFX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9TTEFWRV9BRERSKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX1NMQVZFX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfTUFTVEVSX0NUUkwoKQkJYmZpbl9yZWFkMTYoVFdJMV9NQVNURVJfQ1RSTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX01BU1RFUl9DVFJMKHZhbCkJYmZpbl93cml0ZTE2KFRXSTFfTUFTVEVSX0NUUkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfTUFTVEVSX1NUQVQoKQkJYmZpbl9yZWFkMTYoVFdJMV9NQVNURVJfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX01BU1RFUl9TVEFUKHZhbCkJYmZpbl93cml0ZTE2KFRXSTFfTUFTVEVSX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfTUFTVEVSX0FERFIoKQkJYmZpbl9yZWFkMTYoVFdJMV9NQVNURVJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX01BU1RFUl9BRERSKHZhbCkJYmZpbl93cml0ZTE2KFRXSTFfTUFTVEVSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfSU5UX1NUQVQoKQkJYmZpbl9yZWFkMTYoVFdJMV9JTlRfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX0lOVF9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX0lOVF9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX0lOVF9NQVNLKCkJCWJmaW5fcmVhZDE2KFRXSTFfSU5UX01BU0spCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9JTlRfTUFTSyh2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9JTlRfTUFTSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMV9GSUZPX0NUUkwoKQkJYmZpbl9yZWFkMTYoVFdJMV9GSUZPX0NUUkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9GSUZPX0NUUkwodmFsKQkJYmZpbl93cml0ZTE2KFRXSTFfRklGT19DVFJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX0ZJRk9fU1RBVCgpCQliZmluX3JlYWQxNihUV0kxX0ZJRk9fU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX0ZJRk9fU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9GSUZPX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfWE1UX0RBVEE4KCkJCWJmaW5fcmVhZDE2KFRXSTFfWE1UX0RBVEE4KQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfWE1UX0RBVEE4KHZhbCkJCWJmaW5fd3JpdGUxNihUV0kxX1hNVF9EQVRBOCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMV9YTVRfREFUQTE2KCkJCWJmaW5fcmVhZDE2KFRXSTFfWE1UX0RBVEExNikKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX1hNVF9EQVRBMTYodmFsKQkJYmZpbl93cml0ZTE2KFRXSTFfWE1UX0RBVEExNiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMV9SQ1ZfREFUQTgoKQkJYmZpbl9yZWFkMTYoVFdJMV9SQ1ZfREFUQTgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9SQ1ZfREFUQTgodmFsKQkJYmZpbl93cml0ZTE2KFRXSTFfUkNWX0RBVEE4LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kxX1JDVl9EQVRBMTYoKQkJYmZpbl9yZWFkMTYoVFdJMV9SQ1ZfREFUQTE2KQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfUkNWX0RBVEExNih2YWwpCQliZmluX3dyaXRlMTYoVFdJMV9SQ1ZfREFUQTE2LCB2YWwpCisKKy8qIFNQSTIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSTJfQ1RMKCkJCWJmaW5fcmVhZDE2KFNQSTJfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfQ1RMKHZhbCkJYmZpbl93cml0ZTE2KFNQSTJfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUEkyX0ZMRygpCQliZmluX3JlYWQxNihTUEkyX0ZMRykKKyNkZWZpbmUgYmZpbl93cml0ZV9TUEkyX0ZMRyh2YWwpCWJmaW5fd3JpdGUxNihTUEkyX0ZMRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BJMl9TVEFUKCkJCWJmaW5fcmVhZDE2KFNQSTJfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUEkyX1NUQVQodmFsKQliZmluX3dyaXRlMTYoU1BJMl9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUEkyX1REQlIoKQkJYmZpbl9yZWFkMTYoU1BJMl9UREJSKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTJfVERCUih2YWwpCWJmaW5fd3JpdGUxNihTUEkyX1REQlIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSTJfUkRCUigpCQliZmluX3JlYWQxNihTUEkyX1JEQlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJMl9SREJSKHZhbCkJYmZpbl93cml0ZTE2KFNQSTJfUkRCUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BJMl9CQVVEKCkJCWJmaW5fcmVhZDE2KFNQSTJfQkFVRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUEkyX0JBVUQodmFsKQliZmluX3dyaXRlMTYoU1BJMl9CQVVELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUEkyX1NIQURPVygpCQliZmluX3JlYWQxNihTUEkyX1NIQURPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9TUEkyX1NIQURPVyh2YWwpCWJmaW5fd3JpdGUxNihTUEkyX1NIQURPVywgdmFsKQorCisvKiBNWFZSIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0NPTkZJRygpCQkJYmZpbl9yZWFkMTYoTVhWUl9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KE1YVlJfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX1NUQVRFXzAoKQkJYmZpbl9yZWFkMzIoTVhWUl9TVEFURV8wKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfU1RBVEVfMCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9TVEFURV8wLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX1NUQVRFXzEoKQkJYmZpbl9yZWFkMzIoTVhWUl9TVEFURV8xKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfU1RBVEVfMSh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9TVEFURV8xLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0lOVF9TVEFUXzAoKQkJYmZpbl9yZWFkMzIoTVhWUl9JTlRfU1RBVF8wKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfSU5UX1NUQVRfMCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9JTlRfU1RBVF8wLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0lOVF9TVEFUXzEoKQkJYmZpbl9yZWFkMzIoTVhWUl9JTlRfU1RBVF8xKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfSU5UX1NUQVRfMSh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9JTlRfU1RBVF8xLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0lOVF9FTl8wKCkJCWJmaW5fcmVhZDMyKE1YVlJfSU5UX0VOXzApCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9JTlRfRU5fMCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9JTlRfRU5fMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9JTlRfRU5fMSgpCQliZmluX3JlYWQzMihNWFZSX0lOVF9FTl8xKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfSU5UX0VOXzEodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfSU5UX0VOXzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfUE9TSVRJT04oKQkJYmZpbl9yZWFkMTYoTVhWUl9QT1NJVElPTikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1BPU0lUSU9OKHZhbCkJCWJmaW5fd3JpdGUxNihNWFZSX1BPU0lUSU9OLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX01BWF9QT1NJVElPTigpCQliZmluX3JlYWQxNihNWFZSX01BWF9QT1NJVElPTikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX01BWF9QT1NJVElPTih2YWwpCWJmaW5fd3JpdGUxNihNWFZSX01BWF9QT1NJVElPTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ERUxBWSgpCQkJYmZpbl9yZWFkMTYoTVhWUl9ERUxBWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0RFTEFZKHZhbCkJCWJmaW5fd3JpdGUxNihNWFZSX0RFTEFZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX01BWF9ERUxBWSgpCQliZmluX3JlYWQxNihNWFZSX01BWF9ERUxBWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX01BWF9ERUxBWSh2YWwpCQliZmluX3dyaXRlMTYoTVhWUl9NQVhfREVMQVksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfTEFERFIoKQkJCWJmaW5fcmVhZDMyKE1YVlJfTEFERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9MQUREUih2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9MQUREUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9HQUREUigpCQkJYmZpbl9yZWFkMTYoTVhWUl9HQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0dBRERSKHZhbCkJCWJmaW5fd3JpdGUxNihNWFZSX0dBRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FBRERSKCkJCQliZmluX3JlYWQzMihNWFZSX0FBRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUFERFIodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfQUFERFIsIHZhbCkKKworLyogTVhWUiBBbGxvY2F0aW9uIFRhYmxlIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzAoKQkJYmZpbl9yZWFkMzIoTVhWUl9BTExPQ18wKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfMCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ18wLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzEoKQkJYmZpbl9yZWFkMzIoTVhWUl9BTExPQ18xKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfMSh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ18xLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzIoKQkJYmZpbl9yZWFkMzIoTVhWUl9BTExPQ18yKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfMih2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ18yLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzMoKQkJYmZpbl9yZWFkMzIoTVhWUl9BTExPQ18zKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfMyh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ18zLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzQoKQkJYmZpbl9yZWFkMzIoTVhWUl9BTExPQ180KQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfNCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ180LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzUoKQkJYmZpbl9yZWFkMzIoTVhWUl9BTExPQ181KQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfNSh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ181LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzYoKQkJYmZpbl9yZWFkMzIoTVhWUl9BTExPQ182KQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfNih2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ182LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzcoKQkJYmZpbl9yZWFkMzIoTVhWUl9BTExPQ183KQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfNyh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ183LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzgoKQkJYmZpbl9yZWFkMzIoTVhWUl9BTExPQ184KQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfOCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ184LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzkoKQkJYmZpbl9yZWFkMzIoTVhWUl9BTExPQ185KQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfOSh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ185LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzEwKCkJCWJmaW5fcmVhZDMyKE1YVlJfQUxMT0NfMTApCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9BTExPQ18xMCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ18xMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9BTExPQ18xMSgpCQliZmluX3JlYWQzMihNWFZSX0FMTE9DXzExKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfMTEodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfQUxMT0NfMTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfQUxMT0NfMTIoKQkJYmZpbl9yZWFkMzIoTVhWUl9BTExPQ18xMikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0FMTE9DXzEyKHZhbCkJCWJmaW5fd3JpdGUzMihNWFZSX0FMTE9DXzEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FMTE9DXzEzKCkJCWJmaW5fcmVhZDMyKE1YVlJfQUxMT0NfMTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9BTExPQ18xMyh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9BTExPQ18xMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9BTExPQ18xNCgpCQliZmluX3JlYWQzMihNWFZSX0FMTE9DXzE0KQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQUxMT0NfMTQodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfQUxMT0NfMTQsIHZhbCkKKworLyogTVhWUiBDaGFubmVsIEFzc2lnbiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9TWU5DX0xDSEFOXzAoKQkJYmZpbl9yZWFkMzIoTVhWUl9TWU5DX0xDSEFOXzApCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9TWU5DX0xDSEFOXzAodmFsKQliZmluX3dyaXRlMzIoTVhWUl9TWU5DX0xDSEFOXzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfU1lOQ19MQ0hBTl8xKCkJCWJmaW5fcmVhZDMyKE1YVlJfU1lOQ19MQ0hBTl8xKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfU1lOQ19MQ0hBTl8xKHZhbCkJYmZpbl93cml0ZTMyKE1YVlJfU1lOQ19MQ0hBTl8xLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX1NZTkNfTENIQU5fMigpCQliZmluX3JlYWQzMihNWFZSX1NZTkNfTENIQU5fMikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1NZTkNfTENIQU5fMih2YWwpCWJmaW5fd3JpdGUzMihNWFZSX1NZTkNfTENIQU5fMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9TWU5DX0xDSEFOXzMoKQkJYmZpbl9yZWFkMzIoTVhWUl9TWU5DX0xDSEFOXzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9TWU5DX0xDSEFOXzModmFsKQliZmluX3dyaXRlMzIoTVhWUl9TWU5DX0xDSEFOXzMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfU1lOQ19MQ0hBTl80KCkJCWJmaW5fcmVhZDMyKE1YVlJfU1lOQ19MQ0hBTl80KQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfU1lOQ19MQ0hBTl80KHZhbCkJYmZpbl93cml0ZTMyKE1YVlJfU1lOQ19MQ0hBTl80LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX1NZTkNfTENIQU5fNSgpCQliZmluX3JlYWQzMihNWFZSX1NZTkNfTENIQU5fNSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1NZTkNfTENIQU5fNSh2YWwpCWJmaW5fd3JpdGUzMihNWFZSX1NZTkNfTENIQU5fNSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9TWU5DX0xDSEFOXzYoKQkJYmZpbl9yZWFkMzIoTVhWUl9TWU5DX0xDSEFOXzYpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9TWU5DX0xDSEFOXzYodmFsKQliZmluX3dyaXRlMzIoTVhWUl9TWU5DX0xDSEFOXzYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfU1lOQ19MQ0hBTl83KCkJCWJmaW5fcmVhZDMyKE1YVlJfU1lOQ19MQ0hBTl83KQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfU1lOQ19MQ0hBTl83KHZhbCkJYmZpbl93cml0ZTMyKE1YVlJfU1lOQ19MQ0hBTl83LCB2YWwpCisKKy8qIE1YVlIgRE1BMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUEwX0NPTkZJRygpCQliZmluX3JlYWQzMihNWFZSX0RNQTBfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BMF9DT05GSUcodmFsKQliZmluX3dyaXRlMzIoTVhWUl9ETUEwX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUEwX1NUQVJUX0FERFIoKQliZmluX3JlYWQzMihNWFZSX0RNQTBfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0RNQTBfU1RBUlRfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNWFZSX0RNQTBfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfRE1BMF9DT1VOVCgpCQliZmluX3JlYWQxNihNWFZSX0RNQTBfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9ETUEwX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNWFZSX0RNQTBfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfRE1BMF9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoTVhWUl9ETUEwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0RNQTBfQ1VSUl9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1YVlJfRE1BMF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0RNQTBfQ1VSUl9DT1VOVCgpCWJmaW5fcmVhZDE2KE1YVlJfRE1BMF9DVVJSX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BMF9DVVJSX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1YVlJfRE1BMF9DVVJSX0NPVU5ULCB2YWwpCisKKy8qIE1YVlIgRE1BMSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUExX0NPTkZJRygpCQliZmluX3JlYWQzMihNWFZSX0RNQTFfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BMV9DT05GSUcodmFsKQliZmluX3dyaXRlMzIoTVhWUl9ETUExX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUExX1NUQVJUX0FERFIoKQliZmluX3JlYWQzMihNWFZSX0RNQTFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0RNQTFfU1RBUlRfQUREUih2YWwpCWJmaW5fd3JpdGUzMihNWFZSX0RNQTFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfRE1BMV9DT1VOVCgpCQliZmluX3JlYWQxNihNWFZSX0RNQTFfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9ETUExX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNWFZSX0RNQTFfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfRE1BMV9DVVJSX0FERFIoKQkJYmZpbl9yZWFkMzIoTVhWUl9ETUExX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0RNQTFfQ1VSUl9BRERSKHZhbCkJYmZpbl93cml0ZTMyKE1YVlJfRE1BMV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0RNQTFfQ1VSUl9DT1VOVCgpCWJmaW5fcmVhZDE2KE1YVlJfRE1BMV9DVVJSX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BMV9DVVJSX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1YVlJfRE1BMV9DVVJSX0NPVU5ULCB2YWwpCisKKy8qIE1YVlIgRE1BMiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUEyX0NPTkZJRygpCQliZmluX3JlYWQzMihNWFZSX0RNQTJfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BMl9DT05GSUcodmFsKQliZmluX3dyaXRlMzIoTVhWUl9ETUEyX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUEyX1NUQVJUX0FERFIoKSAJYmZpbl9yZWFkMzIoTVhWUl9ETUEyX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9ETUEyX1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BMl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUEyX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1YVlJfRE1BMl9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0RNQTJfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1YVlJfRE1BMl9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUEyX0NVUlJfQUREUigpIAliZmluX3JlYWQzMihNWFZSX0RNQTJfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BMl9DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BMl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0RNQTJfQ1VSUl9DT1VOVCgpCWJmaW5fcmVhZDE2KE1YVlJfRE1BMl9DVVJSX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BMl9DVVJSX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1YVlJfRE1BMl9DVVJSX0NPVU5ULCB2YWwpCisKKy8qIE1YVlIgRE1BMyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUEzX0NPTkZJRygpCQliZmluX3JlYWQzMihNWFZSX0RNQTNfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BM19DT05GSUcodmFsKQliZmluX3dyaXRlMzIoTVhWUl9ETUEzX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUEzX1NUQVJUX0FERFIoKSAJYmZpbl9yZWFkMzIoTVhWUl9ETUEzX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9ETUEzX1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BM19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUEzX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1YVlJfRE1BM19DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0RNQTNfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1YVlJfRE1BM19DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUEzX0NVUlJfQUREUigpIAliZmluX3JlYWQzMihNWFZSX0RNQTNfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BM19DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BM19DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0RNQTNfQ1VSUl9DT1VOVCgpCWJmaW5fcmVhZDE2KE1YVlJfRE1BM19DVVJSX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BM19DVVJSX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1YVlJfRE1BM19DVVJSX0NPVU5ULCB2YWwpCisKKy8qIE1YVlIgRE1BNCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE0X0NPTkZJRygpCQliZmluX3JlYWQzMihNWFZSX0RNQTRfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BNF9DT05GSUcodmFsKQliZmluX3dyaXRlMzIoTVhWUl9ETUE0X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE0X1NUQVJUX0FERFIoKSAJYmZpbl9yZWFkMzIoTVhWUl9ETUE0X1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9ETUE0X1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BNF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE0X0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1YVlJfRE1BNF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0RNQTRfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1YVlJfRE1BNF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE0X0NVUlJfQUREUigpIAliZmluX3JlYWQzMihNWFZSX0RNQTRfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BNF9DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BNF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0RNQTRfQ1VSUl9DT1VOVCgpCWJmaW5fcmVhZDE2KE1YVlJfRE1BNF9DVVJSX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BNF9DVVJSX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1YVlJfRE1BNF9DVVJSX0NPVU5ULCB2YWwpCisKKy8qIE1YVlIgRE1BNSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE1X0NPTkZJRygpCQliZmluX3JlYWQzMihNWFZSX0RNQTVfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BNV9DT05GSUcodmFsKQliZmluX3dyaXRlMzIoTVhWUl9ETUE1X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE1X1NUQVJUX0FERFIoKSAJYmZpbl9yZWFkMzIoTVhWUl9ETUE1X1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9ETUE1X1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BNV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE1X0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1YVlJfRE1BNV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0RNQTVfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1YVlJfRE1BNV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE1X0NVUlJfQUREUigpIAliZmluX3JlYWQzMihNWFZSX0RNQTVfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BNV9DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BNV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0RNQTVfQ1VSUl9DT1VOVCgpCWJmaW5fcmVhZDE2KE1YVlJfRE1BNV9DVVJSX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BNV9DVVJSX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1YVlJfRE1BNV9DVVJSX0NPVU5ULCB2YWwpCisKKy8qIE1YVlIgRE1BNiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE2X0NPTkZJRygpCQliZmluX3JlYWQzMihNWFZSX0RNQTZfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BNl9DT05GSUcodmFsKQliZmluX3dyaXRlMzIoTVhWUl9ETUE2X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE2X1NUQVJUX0FERFIoKSAJYmZpbl9yZWFkMzIoTVhWUl9ETUE2X1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9ETUE2X1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BNl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE2X0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1YVlJfRE1BNl9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0RNQTZfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1YVlJfRE1BNl9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE2X0NVUlJfQUREUigpIAliZmluX3JlYWQzMihNWFZSX0RNQTZfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BNl9DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BNl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0RNQTZfQ1VSUl9DT1VOVCgpCWJmaW5fcmVhZDE2KE1YVlJfRE1BNl9DVVJSX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BNl9DVVJSX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1YVlJfRE1BNl9DVVJSX0NPVU5ULCB2YWwpCisKKy8qIE1YVlIgRE1BNyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE3X0NPTkZJRygpCQliZmluX3JlYWQzMihNWFZSX0RNQTdfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BN19DT05GSUcodmFsKQliZmluX3dyaXRlMzIoTVhWUl9ETUE3X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE3X1NUQVJUX0FERFIoKSAJYmZpbl9yZWFkMzIoTVhWUl9ETUE3X1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9ETUE3X1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BN19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE3X0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1YVlJfRE1BN19DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0RNQTdfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1YVlJfRE1BN19DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ETUE3X0NVUlJfQUREUigpIAliZmluX3JlYWQzMihNWFZSX0RNQTdfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BN19DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfRE1BN19DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0RNQTdfQ1VSUl9DT1VOVCgpCWJmaW5fcmVhZDE2KE1YVlJfRE1BN19DVVJSX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRE1BN19DVVJSX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1YVlJfRE1BN19DVVJSX0NPVU5ULCB2YWwpCisKKy8qIE1YVlIgQXN5bmNoIFBhY2tldCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9BUF9DVEwoKQkJCWJmaW5fcmVhZDE2KE1YVlJfQVBfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQVBfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihNWFZSX0FQX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9BUFJCX1NUQVJUX0FERFIoKSAJYmZpbl9yZWFkMzIoTVhWUl9BUFJCX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9BUFJCX1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfQVBSQl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9BUFJCX0NVUlJfQUREUigpIAliZmluX3JlYWQzMihNWFZSX0FQUkJfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQVBSQl9DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfQVBSQl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FQVEJfU1RBUlRfQUREUigpIAliZmluX3JlYWQzMihNWFZSX0FQVEJfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0FQVEJfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoTVhWUl9BUFRCX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0FQVEJfQ1VSUl9BRERSKCkgCWJmaW5fcmVhZDMyKE1YVlJfQVBUQl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9BUFRCX0NVUlJfQUREUih2YWwpIAliZmluX3dyaXRlMzIoTVhWUl9BUFRCX0NVUlJfQUREUikKKworLyogTVhWUiBDb250cm9sIE1lc3NhZ2UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfQ01fQ1RMKCkJCQliZmluX3JlYWQzMihNWFZSX0NNX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0NNX0NUTCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9DTV9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfQ01SQl9TVEFSVF9BRERSKCkgCWJmaW5fcmVhZDMyKE1YVlJfQ01SQl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQ01SQl9TVEFSVF9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihNWFZSX0NNUkJfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfQ01SQl9DVVJSX0FERFIoKSAJYmZpbl9yZWFkMzIoTVhWUl9DTVJCX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0NNUkJfQ1VSUl9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihNWFZSX0NNUkJfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9DTVRCX1NUQVJUX0FERFIoKSAJYmZpbl9yZWFkMzIoTVhWUl9DTVRCX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9DTVRCX1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfQ01UQl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9DTVRCX0NVUlJfQUREUigpIAliZmluX3JlYWQzMihNWFZSX0NNVEJfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQ01UQl9DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKE1YVlJfQ01UQl9DVVJSX0FERFIpCisKKy8qIE1YVlIgUmVtb3RlIFJlYWQgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfUlJEQl9TVEFSVF9BRERSKCkgCWJmaW5fcmVhZDMyKE1YVlJfUlJEQl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfUlJEQl9TVEFSVF9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihNWFZSX1JSREJfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfUlJEQl9DVVJSX0FERFIoKSAJYmZpbl9yZWFkMzIoTVhWUl9SUkRCX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1JSREJfQ1VSUl9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihNWFZSX1JSREJfQ1VSUl9BRERSKQorCisvKiBNWFZSIFBhdHRlcm4gRGF0YSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9QQVRfREFUQV8wKCkJCWJmaW5fcmVhZDMyKE1YVlJfUEFUX0RBVEFfMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1BBVF9EQVRBXzAodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfUEFUX0RBVEFfMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9QQVRfRU5fMCgpCQliZmluX3JlYWQzMihNWFZSX1BBVF9FTl8wKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfUEFUX0VOXzAodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfUEFUX0VOXzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfUEFUX0RBVEFfMSgpCQliZmluX3JlYWQzMihNWFZSX1BBVF9EQVRBXzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9QQVRfREFUQV8xKHZhbCkJCWJmaW5fd3JpdGUzMihNWFZSX1BBVF9EQVRBXzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfUEFUX0VOXzEoKQkJYmZpbl9yZWFkMzIoTVhWUl9QQVRfRU5fMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1BBVF9FTl8xKHZhbCkJCWJmaW5fd3JpdGUzMihNWFZSX1BBVF9FTl8xLCB2YWwpCisKKy8qIE1YVlIgRnJhbWUgQ291bnRlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9GUkFNRV9DTlRfMCgpCQliZmluX3JlYWQxNihNWFZSX0ZSQU1FX0NOVF8wKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRlJBTUVfQ05UXzAodmFsKQliZmluX3dyaXRlMTYoTVhWUl9GUkFNRV9DTlRfMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9GUkFNRV9DTlRfMSgpCQliZmluX3JlYWQxNihNWFZSX0ZSQU1FX0NOVF8xKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfRlJBTUVfQ05UXzEodmFsKQliZmluX3dyaXRlMTYoTVhWUl9GUkFNRV9DTlRfMSwgdmFsKQorCisvKiBNWFZSIFJvdXRpbmcgVGFibGUgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfUk9VVElOR18wKCkJCWJmaW5fcmVhZDMyKE1YVlJfUk9VVElOR18wKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfUk9VVElOR18wKHZhbCkJCWJmaW5fd3JpdGUzMihNWFZSX1JPVVRJTkdfMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ST1VUSU5HXzEoKQkJYmZpbl9yZWFkMzIoTVhWUl9ST1VUSU5HXzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9ST1VUSU5HXzEodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfUk9VVElOR18xLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX1JPVVRJTkdfMigpCQliZmluX3JlYWQzMihNWFZSX1JPVVRJTkdfMikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1JPVVRJTkdfMih2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9ST1VUSU5HXzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfUk9VVElOR18zKCkJCWJmaW5fcmVhZDMyKE1YVlJfUk9VVElOR18zKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfUk9VVElOR18zKHZhbCkJCWJmaW5fd3JpdGUzMihNWFZSX1JPVVRJTkdfMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ST1VUSU5HXzQoKQkJYmZpbl9yZWFkMzIoTVhWUl9ST1VUSU5HXzQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9ST1VUSU5HXzQodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfUk9VVElOR180LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX1JPVVRJTkdfNSgpCQliZmluX3JlYWQzMihNWFZSX1JPVVRJTkdfNSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1JPVVRJTkdfNSh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9ST1VUSU5HXzUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfUk9VVElOR182KCkJCWJmaW5fcmVhZDMyKE1YVlJfUk9VVElOR182KQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfUk9VVElOR182KHZhbCkJCWJmaW5fd3JpdGUzMihNWFZSX1JPVVRJTkdfNiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ST1VUSU5HXzcoKQkJYmZpbl9yZWFkMzIoTVhWUl9ST1VUSU5HXzcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9ST1VUSU5HXzcodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfUk9VVElOR183LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX1JPVVRJTkdfOCgpCQliZmluX3JlYWQzMihNWFZSX1JPVVRJTkdfOCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1JPVVRJTkdfOCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9ST1VUSU5HXzgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfUk9VVElOR185KCkJCWJmaW5fcmVhZDMyKE1YVlJfUk9VVElOR185KQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfUk9VVElOR185KHZhbCkJCWJmaW5fd3JpdGUzMihNWFZSX1JPVVRJTkdfOSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ST1VUSU5HXzEwKCkJCWJmaW5fcmVhZDMyKE1YVlJfUk9VVElOR18xMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1JPVVRJTkdfMTAodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfUk9VVElOR18xMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ST1VUSU5HXzExKCkJCWJmaW5fcmVhZDMyKE1YVlJfUk9VVElOR18xMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1JPVVRJTkdfMTEodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfUk9VVElOR18xMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ST1VUSU5HXzEyKCkJCWJmaW5fcmVhZDMyKE1YVlJfUk9VVElOR18xMikKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1JPVVRJTkdfMTIodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfUk9VVElOR18xMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ST1VUSU5HXzEzKCkJCWJmaW5fcmVhZDMyKE1YVlJfUk9VVElOR18xMykKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1JPVVRJTkdfMTModmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfUk9VVElOR18xMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTVhWUl9ST1VUSU5HXzE0KCkJCWJmaW5fcmVhZDMyKE1YVlJfUk9VVElOR18xNCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1JPVVRJTkdfMTQodmFsKQkJYmZpbl93cml0ZTMyKE1YVlJfUk9VVElOR18xNCwgdmFsKQorCisvKiBNWFZSIENvdW50ZXItQ2xvY2stQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTVhWUl9CTE9DS19DTlQoKQkJYmZpbl9yZWFkMTYoTVhWUl9CTE9DS19DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9CTE9DS19DTlQodmFsKQkJYmZpbl93cml0ZTE2KE1YVlJfQkxPQ0tfQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0NMS19DVEwoKQkJYmZpbl9yZWFkMzIoTVhWUl9DTEtfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQ0xLX0NUTCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9DTEtfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0NEUlBMTF9DVEwoKQkJYmZpbl9yZWFkMzIoTVhWUl9DRFJQTExfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX01YVlJfQ0RSUExMX0NUTCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9DRFJQTExfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NWFZSX0ZNUExMX0NUTCgpCQliZmluX3JlYWQzMihNWFZSX0ZNUExMX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX0ZNUExMX0NUTCh2YWwpCQliZmluX3dyaXRlMzIoTVhWUl9GTVBMTF9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfUElOX0NUTCgpCQliZmluX3JlYWQxNihNWFZSX1BJTl9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfTVhWUl9QSU5fQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihNWFZSX1BJTl9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01YVlJfU0NMS19DTlQoKQkJYmZpbl9yZWFkMTYoTVhWUl9TQ0xLX0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NWFZSX1NDTEtfQ05UKHZhbCkJCWJmaW5fd3JpdGUxNihNWFZSX1NDTEtfQ05ULCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ29uZmlnIDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUMxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUMxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUMxKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUMxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01EMSgpCQliZmluX3JlYWQxNihDQU4xX01EMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01EMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01EMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9UUlMxKCkJCWJmaW5fcmVhZDE2KENBTjFfVFJTMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1RSUzEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9UUlMxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1RSUjEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9UUlIxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVFJSMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1RSUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVEExKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FBMSgpCQliZmluX3JlYWQxNihDQU4xX0FBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FBMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9STVAxKCkJCWJmaW5fcmVhZDE2KENBTjFfUk1QMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JNUDEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9STVAxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1JNTDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9STUwxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfUk1MMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1JNTDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUJUSUYxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUJUSUYxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJUSUYxKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUJUSUYxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CUklGMSgpCQliZmluX3JlYWQxNihDQU4xX01CUklGMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CUklGMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CUklGMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQklNMSgpCQliZmluX3JlYWQxNihDQU4xX01CSU0xKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJJTTEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQklNMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9SRkgxKCkJCWJmaW5fcmVhZDE2KENBTjFfUkZIMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JGSDEodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9SRkgxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX09QU1MxKCkJCWJmaW5fcmVhZDE2KENBTjFfT1BTUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9PUFNTMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX09QU1MxLCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ29uZmlnIDIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUMyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUMyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUMyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01EMigpCQliZmluX3JlYWQxNihDQU4xX01EMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01EMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01EMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9UUlMyKCkJCWJmaW5fcmVhZDE2KENBTjFfVFJTMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1RSUzIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9UUlMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1RSUjIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9UUlIyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVFJSMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1RSUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVEEyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FBMigpCQliZmluX3JlYWQxNihDQU4xX0FBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FBMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9STVAyKCkJCWJmaW5fcmVhZDE2KENBTjFfUk1QMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JNUDIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9STVAyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX1JNTDIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9STUwyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfUk1MMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX1JNTDIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUJUSUYyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUJUSUYyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJUSUYyKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUJUSUYyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CUklGMigpCQliZmluX3JlYWQxNihDQU4xX01CUklGMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CUklGMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CUklGMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQklNMigpCQliZmluX3JlYWQxNihDQU4xX01CSU0yKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUJJTTIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQklNMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9SRkgyKCkJCWJmaW5fcmVhZDE2KENBTjFfUkZIMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1JGSDIodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9SRkgyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX09QU1MyKCkJCWJmaW5fcmVhZDE2KENBTjFfT1BTUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9PUFNTMih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX09QU1MyLCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ2xvY2svSW50ZXJydWJmaW5fcmVhZF8oKXQvQ291bnRlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9DTE9DSygpCQliZmluX3JlYWQxNihDQU4xX0NMT0NLKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQ0xPQ0sodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9DTE9DSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9USU1JTkcoKQkJYmZpbl9yZWFkMTYoQ0FOMV9USU1JTkcpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9USU1JTkcodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9USU1JTkcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfREVCVUcoKQkJYmZpbl9yZWFkMTYoQ0FOMV9ERUJVRykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0RFQlVHKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfREVCVUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KENBTjFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0NFQygpCQliZmluX3JlYWQxNihDQU4xX0NFQykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0NFQyh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0NFQywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9HSVMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9HSVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9HSVModmFsKQliZmluX3dyaXRlMTYoQ0FOMV9HSVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfR0lNKCkJCWJmaW5fcmVhZDE2KENBTjFfR0lNKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfR0lNKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfR0lNLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0dJRigpCQliZmluX3JlYWQxNihDQU4xX0dJRikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0dJRih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0dJRiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9DT05UUk9MKCkJYmZpbl9yZWFkMTYoQ0FOMV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfQ09OVFJPTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfSU5UUigpCQliZmluX3JlYWQxNihDQU4xX0lOVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9JTlRSKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfSU5UUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQlREKCkJCWJmaW5fcmVhZDE2KENBTjFfTUJURCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CVEQodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQlRELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0VXUigpCQliZmluX3JlYWQxNihDQU4xX0VXUikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0VXUih2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0VXUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9FU1IoKQkJYmZpbl9yZWFkMTYoQ0FOMV9FU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9FU1IodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9FU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVUNDTlQoKQkJYmZpbl9yZWFkMTYoQ0FOMV9VQ0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX1VDQ05UKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVUNDTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfVUNSQygpCQliZmluX3JlYWQxNihDQU4xX1VDUkMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9VQ1JDKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfVUNSQywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9VQ0NORigpCQliZmluX3JlYWQxNihDQU4xX1VDQ05GKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfVUNDTkYodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9VQ0NORiwgdmFsKQorCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggQWNjZWJmaW5fcmVhZF8oKXRhbmNlIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDBMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDBMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDBIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDBILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDFMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAxTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDFIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAxSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDFILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDJMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAyTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDJIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wMkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAySCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDJILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDNMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wM0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAzTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDNMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDNIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wM0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTAzSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDNILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDRMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA0TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDRMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDRIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA0SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDVMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA1TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDVMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDVIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA1SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDVILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDZMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA2TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDZMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDZIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wNkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA2SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDZILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDdMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wN0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA3TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDdMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDdIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wN0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA3SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDhMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA4TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDhMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDhIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA4SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDhILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDlMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA5TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDlMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMDlIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0wOUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTA5SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMDlILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTBMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTBMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTBIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTBILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTFMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTExTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTFIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTExSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTFILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTJMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEyTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTJIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xMkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEySCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTJILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTNMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xM0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEzTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTNMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTNIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xM0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTEzSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTNILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTRMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE0TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTRMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTRIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE0SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTVMKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE1TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTVMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX0FNMTVIKCkJCWJmaW5fcmVhZDE2KENBTjFfQU0xNUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9BTTE1SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX0FNMTVILCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBBY2NlYmZpbl9yZWFkXygpdGFuY2UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xNkwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE2TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTZMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xNkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xNkgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE2SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTZIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xNkgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xN0woKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE3TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTdMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xN0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xN0goKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE3SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTdIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xN0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE4TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMThMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE4SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMThIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE5TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTlMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0xOUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTE5SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMTlIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0xOUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIwTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjBMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIwSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjBIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIxTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjFMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIxSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjFIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMkwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIyTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjJMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yMkgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIySCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjJIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yMkgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yM0woKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIzTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjNMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yM0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yM0goKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTIzSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjNIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yM0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI0TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjRMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI0SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjRIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI1TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjVMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI1SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjVIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNkwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI2TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjZMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yNkgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI2SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjZIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yNkgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yN0woKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI3TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjdMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yN0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yN0goKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI3SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjdIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yN0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI4TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjhMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI4SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjhIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI5TCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjlMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0yOUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTI5SCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMjlIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0yOUgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMEwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMwTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzBMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMwSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzBIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMUwoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMxTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzFMKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfQU0zMUgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9BTTMxSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX0FNMzFIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfQU0zMUgsIHZhbCkKKworLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IERhdGEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDBfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDBfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwMF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDBfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwMF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAwX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDBfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDBfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDBfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAwX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAwX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDFfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjAxX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDFfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjAxX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAxX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDFfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwMV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAxX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDFfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDFfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAyX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAyX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDJfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAyX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDJfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDJfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwMl9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAyX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAyX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjAyX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDJfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwMl9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwMl9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDNfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDNfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwM19MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDNfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwM19USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwM19JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjAzX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDNfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDNfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDNfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwM19JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjAzX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjAzX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDRfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA0X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDRfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA0X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA0X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDRfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA0X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDRfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDRfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA1X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA1X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDVfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA1X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDVfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDVfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA1X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA1X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA1X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDVfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwNV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwNV9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDZfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDZfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwNl9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDZfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwNl9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwNl9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA2X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDZfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDZfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDZfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwNl9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA2X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA2X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwN19EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMDdfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwN19MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA3X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMDdfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwN19USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjA3X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA3X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDdfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwN19JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwN19JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwN19JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA3X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDdfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDdfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA4X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA4X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDhfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA4X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMDhfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDhfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA4X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA4X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjA4X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDhfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIwOF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIwOF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMDlfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDlfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwOV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDlfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIwOV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIwOV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjA5X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMDlfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMDlfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMDlfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIwOV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjA5X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjA5X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTBfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEwX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTBfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEwX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEwX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTBfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEwX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTBfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTBfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjExX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjExX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTFfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjExX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTFfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTFfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjExX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjExX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjExX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTFfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxMV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxMV9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMTJfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTJfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxMl9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTJfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxMl9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxMl9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEyX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTJfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTJfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTJfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxMl9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjEyX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjEyX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxM19EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTNfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxM19MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEzX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTNfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxM19USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjEzX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjEzX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTNfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxM19JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxM19JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxM19JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjEzX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTNfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTNfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE0X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE0X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTRfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE0X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTRfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTRfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE0X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE0X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE0X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTRfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMTVfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTVfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxNV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTVfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxNV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE1X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTVfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTVfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTVfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE1X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE1X0lEMSwgdmFsKQorCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggRGF0YSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxNl9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTZfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNl9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE2X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTZfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNl9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE2X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE2X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTZfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxNl9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxNl9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxNl9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE2X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTZfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTZfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE3X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE3X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTdfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE3X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMTdfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMTdfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxN19JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE3X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE3X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE3X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMTdfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxN19JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxN19JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMThfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMThfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxOF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMThfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIxOF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE4X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMThfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMThfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMThfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjE4X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjE4X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIxOV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMTlfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE5X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMTlfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjE5X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjE5X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMTlfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIxOV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIxOV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIxOV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjE5X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMTlfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMTlfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIwX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIwX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjBfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIwX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjBfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjBfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIwX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIwX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIwX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjBfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjFfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjFfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyMV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjFfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyMV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIxX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjFfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjFfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjFfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIxX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIxX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyMl9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjJfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMl9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjIyX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjJfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMl9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjIyX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIyX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjJfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyMl9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyMl9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyMl9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIyX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjJfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjJfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjIzX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIzX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjNfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIzX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjNfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjNfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyM19JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjIzX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjIzX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjIzX0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjNfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyM19JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyM19JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjRfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjRfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyNF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjRfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyNF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI0X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjRfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjRfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjRfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI0X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI0X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjVfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI1X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjVfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI1X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI1X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjVfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyNV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI1X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjVfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjVfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI2X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI2X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjZfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI2X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjZfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjZfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyNl9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI2X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI2X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI2X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjZfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyNl9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyNl9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMjdfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjdfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyN19MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjdfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIyN19USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyN19JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI3X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjdfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjdfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjdfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyN19JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI3X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI3X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMjhfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI4X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMjhfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjI4X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI4X0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMjhfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIyOF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI4X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMjhfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMjhfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjI5X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI5X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjlfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI5X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4xX01CMjlfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMjlfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIyOV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjI5X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjI5X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjI5X0lEMSgpCQliZmluX3JlYWQxNihDQU4xX01CMjlfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIyOV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIyOV9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4xX01CMzBfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzBfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIzMF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzBfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjFfTUIzMF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMwX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzBfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzBfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4xX01CMzBfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMV9NQjMwX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMV9NQjMwX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjFfTUIzMV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4xX01CMzFfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjMxX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4xX01CMzFfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMV9NQjMxX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMV9NQjMxX0lEMCgpCQliZmluX3JlYWQxNihDQU4xX01CMzFfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjFfTUIzMV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjFfTUIzMV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjFfTUIzMV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMV9NQjMxX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4xX01CMzFfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4xX01CMzFfSUQxLCB2YWwpCisKKy8qIEFUQVBJIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEFUQVBJX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfREVWX0FERFIoKQkJYmZpbl9yZWFkMTYoQVRBUElfREVWX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfREVWX0FERFIodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX0RFVl9BRERSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9ERVZfVFhCVUYoKQkJYmZpbl9yZWFkMTYoQVRBUElfREVWX1RYQlVGKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0RFVl9UWEJVRih2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfREVWX1RYQlVGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9ERVZfUlhCVUYoKQkJYmZpbl9yZWFkMTYoQVRBUElfREVWX1JYQlVGKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0RFVl9SWEJVRih2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfREVWX1JYQlVGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9JTlRfTUFTSygpCQliZmluX3JlYWQxNihBVEFQSV9JTlRfTUFTSykKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9JTlRfTUFTSyh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfSU5UX01BU0ssIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX0lOVF9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoQVRBUElfSU5UX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9JTlRfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX0lOVF9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1hGRVJfTEVOKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1hGRVJfTEVOKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1hGRVJfTEVOKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9YRkVSX0xFTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfTElORV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoQVRBUElfTElORV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfTElORV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoQVRBUElfTElORV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1NNX1NUQVRFKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1NNX1NUQVRFKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1NNX1NUQVRFKHZhbCkJCWJmaW5fd3JpdGUxNihBVEFQSV9TTV9TVEFURSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVEVSTUlOQVRFKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1RFUk1JTkFURSkKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9URVJNSU5BVEUodmFsKQkJYmZpbl93cml0ZTE2KEFUQVBJX1RFUk1JTkFURSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfUElPX1RGUkNOVCgpCQliZmluX3JlYWQxNihBVEFQSV9QSU9fVEZSQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1BJT19URlJDTlQodmFsKQliZmluX3dyaXRlMTYoQVRBUElfUElPX1RGUkNOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfRE1BX1RGUkNOVCgpCQliZmluX3JlYWQxNihBVEFQSV9ETUFfVEZSQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX0RNQV9URlJDTlQodmFsKQliZmluX3dyaXRlMTYoQVRBUElfRE1BX1RGUkNOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVU1BSU5fVEZSQ05UKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1VNQUlOX1RGUkNOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9VTUFJTl9URlJDTlQodmFsKQliZmluX3dyaXRlMTYoQVRBUElfVU1BSU5fVEZSQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9VRE1BT1VUX1RGUkNOVCgpCWJmaW5fcmVhZDE2KEFUQVBJX1VETUFPVVRfVEZSQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1VETUFPVVRfVEZSQ05UKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1VETUFPVVRfVEZSQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9SRUdfVElNXzAoKQkJYmZpbl9yZWFkMTYoQVRBUElfUkVHX1RJTV8wKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1JFR19USU1fMCh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfUkVHX1RJTV8wLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9QSU9fVElNXzAoKQkJYmZpbl9yZWFkMTYoQVRBUElfUElPX1RJTV8wKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1BJT19USU1fMCh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfUElPX1RJTV8wLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9QSU9fVElNXzEoKQkJYmZpbl9yZWFkMTYoQVRBUElfUElPX1RJTV8xKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1BJT19USU1fMSh2YWwpCQliZmluX3dyaXRlMTYoQVRBUElfUElPX1RJTV8xLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9NVUxUSV9USU1fMCgpCQliZmluX3JlYWQxNihBVEFQSV9NVUxUSV9USU1fMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9NVUxUSV9USU1fMCh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9NVUxUSV9USU1fMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfTVVMVElfVElNXzEoKQkJYmZpbl9yZWFkMTYoQVRBUElfTVVMVElfVElNXzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfTVVMVElfVElNXzEodmFsKQliZmluX3dyaXRlMTYoQVRBUElfTVVMVElfVElNXzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX01VTFRJX1RJTV8yKCkJCWJmaW5fcmVhZDE2KEFUQVBJX01VTFRJX1RJTV8yKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX01VTFRJX1RJTV8yKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX01VTFRJX1RJTV8yLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9VTFRSQV9USU1fMCgpCQliZmluX3JlYWQxNihBVEFQSV9VTFRSQV9USU1fMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9VTFRSQV9USU1fMCh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9VTFRSQV9USU1fMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQVRBUElfVUxUUkFfVElNXzEoKQkJYmZpbl9yZWFkMTYoQVRBUElfVUxUUkFfVElNXzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQVRBUElfVUxUUkFfVElNXzEodmFsKQliZmluX3dyaXRlMTYoQVRBUElfVUxUUkFfVElNXzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0FUQVBJX1VMVFJBX1RJTV8yKCkJCWJmaW5fcmVhZDE2KEFUQVBJX1VMVFJBX1RJTV8yKQorI2RlZmluZSBiZmluX3dyaXRlX0FUQVBJX1VMVFJBX1RJTV8yKHZhbCkJYmZpbl93cml0ZTE2KEFUQVBJX1VMVFJBX1RJTV8yLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9BVEFQSV9VTFRSQV9USU1fMygpCQliZmluX3JlYWQxNihBVEFQSV9VTFRSQV9USU1fMykKKyNkZWZpbmUgYmZpbl93cml0ZV9BVEFQSV9VTFRSQV9USU1fMyh2YWwpCWJmaW5fd3JpdGUxNihBVEFQSV9VTFRSQV9USU1fMywgdmFsKQorCisvKiBTREggUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9QV1JfQ1RMKCkJCWJmaW5fcmVhZDE2KFNESF9QV1JfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9QV1JfQ1RMKHZhbCkJYmZpbl93cml0ZTE2KFNESF9QV1JfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfQ0xLX0NUTCgpCQliZmluX3JlYWQxNihTREhfQ0xLX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfQ0xLX0NUTCh2YWwpCWJmaW5fd3JpdGUxNihTREhfQ0xLX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX0FSR1VNRU5UKCkJYmZpbl9yZWFkMzIoU0RIX0FSR1VNRU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9BUkdVTUVOVCh2YWwpCWJmaW5fd3JpdGUzMihTREhfQVJHVU1FTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9DT01NQU5EKCkJCWJmaW5fcmVhZDE2KFNESF9DT01NQU5EKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9DT01NQU5EKHZhbCkJYmZpbl93cml0ZTE2KFNESF9DT01NQU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUkVTUF9DTUQoKQliZmluX3JlYWQxNihTREhfUkVTUF9DTUQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1JFU1BfQ01EKHZhbCkJYmZpbl93cml0ZTE2KFNESF9SRVNQX0NNRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1JFU1BPTlNFMCgpCWJmaW5fcmVhZDMyKFNESF9SRVNQT05TRTApCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1JFU1BPTlNFMCh2YWwpCWJmaW5fd3JpdGUzMihTREhfUkVTUE9OU0UwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUkVTUE9OU0UxKCkJYmZpbl9yZWFkMzIoU0RIX1JFU1BPTlNFMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUkVTUE9OU0UxKHZhbCkJYmZpbl93cml0ZTMyKFNESF9SRVNQT05TRTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9SRVNQT05TRTIoKQliZmluX3JlYWQzMihTREhfUkVTUE9OU0UyKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9SRVNQT05TRTIodmFsKQliZmluX3dyaXRlMzIoU0RIX1JFU1BPTlNFMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1JFU1BPTlNFMygpCWJmaW5fcmVhZDMyKFNESF9SRVNQT05TRTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1JFU1BPTlNFMyh2YWwpCWJmaW5fd3JpdGUzMihTREhfUkVTUE9OU0UzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfREFUQV9USU1FUigpCWJmaW5fcmVhZDMyKFNESF9EQVRBX1RJTUVSKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9EQVRBX1RJTUVSKHZhbCkJYmZpbl93cml0ZTMyKFNESF9EQVRBX1RJTUVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfREFUQV9MR1RIKCkJYmZpbl9yZWFkMTYoU0RIX0RBVEFfTEdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfREFUQV9MR1RIKHZhbCkJYmZpbl93cml0ZTE2KFNESF9EQVRBX0xHVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9EQVRBX0NUTCgpCWJmaW5fcmVhZDE2KFNESF9EQVRBX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfREFUQV9DVEwodmFsKQliZmluX3dyaXRlMTYoU0RIX0RBVEFfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfREFUQV9DTlQoKQliZmluX3JlYWQxNihTREhfREFUQV9DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX0RBVEFfQ05UKHZhbCkJYmZpbl93cml0ZTE2KFNESF9EQVRBX0NOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1NUQVRVUygpCQliZmluX3JlYWQzMihTREhfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9TVEFUVVModmFsKQliZmluX3dyaXRlMzIoU0RIX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1NUQVRVU19DTFIoKQliZmluX3JlYWQxNihTREhfU1RBVFVTX0NMUikKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfU1RBVFVTX0NMUih2YWwpCWJmaW5fd3JpdGUxNihTREhfU1RBVFVTX0NMUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX01BU0swKCkJCWJmaW5fcmVhZDMyKFNESF9NQVNLMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfTUFTSzAodmFsKQliZmluX3dyaXRlMzIoU0RIX01BU0swLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfTUFTSzEoKQkJYmZpbl9yZWFkMzIoU0RIX01BU0sxKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9NQVNLMSh2YWwpCWJmaW5fd3JpdGUzMihTREhfTUFTSzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9GSUZPX0NOVCgpCWJmaW5fcmVhZDE2KFNESF9GSUZPX0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfRklGT19DTlQodmFsKQliZmluX3dyaXRlMTYoU0RIX0ZJRk9fQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfRklGTygpCQliZmluX3JlYWQzMihTREhfRklGTykKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfRklGTyh2YWwpCWJmaW5fd3JpdGUzMihTREhfRklGTywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX0VfU1RBVFVTKCkJYmZpbl9yZWFkMTYoU0RIX0VfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9FX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihTREhfRV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9FX01BU0soKQkJYmZpbl9yZWFkMTYoU0RIX0VfTUFTSykKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfRV9NQVNLKHZhbCkJYmZpbl93cml0ZTE2KFNESF9FX01BU0ssIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9DRkcoKQkJYmZpbl9yZWFkMTYoU0RIX0NGRykKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfQ0ZHKHZhbCkJCWJmaW5fd3JpdGUxNihTREhfQ0ZHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUkRfV0FJVF9FTigpCWJmaW5fcmVhZDE2KFNESF9SRF9XQUlUX0VOKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9SRF9XQUlUX0VOKHZhbCkJYmZpbl93cml0ZTE2KFNESF9SRF9XQUlUX0VOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUElEMCgpCQliZmluX3JlYWQxNihTREhfUElEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElEMCh2YWwpCWJmaW5fd3JpdGUxNihTREhfUElEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDEoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDEodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQyKCkJCWJmaW5fcmVhZDE2KFNESF9QSUQyKQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQyKHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUElEMygpCQliZmluX3JlYWQxNihTREhfUElEMykKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElEMyh2YWwpCWJmaW5fd3JpdGUxNihTREhfUElEMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDQoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDQodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NESF9QSUQ1KCkJCWJmaW5fcmVhZDE2KFNESF9QSUQ1KQorI2RlZmluZSBiZmluX3dyaXRlX1NESF9QSUQ1KHZhbCkJYmZpbl93cml0ZTE2KFNESF9QSUQ1LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TREhfUElENigpCQliZmluX3JlYWQxNihTREhfUElENikKKyNkZWZpbmUgYmZpbl93cml0ZV9TREhfUElENih2YWwpCWJmaW5fd3JpdGUxNihTREhfUElENiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0RIX1BJRDcoKQkJYmZpbl9yZWFkMTYoU0RIX1BJRDcpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0RIX1BJRDcodmFsKQliZmluX3dyaXRlMTYoU0RIX1BJRDcsIHZhbCkKKworLyogSE9TVCBQb3J0IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9IT1NUX0NPTlRST0woKQliZmluX3JlYWQxNihIT1NUX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9DT05UUk9MKHZhbCkJYmZpbl93cml0ZTE2KEhPU1RfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE9TVF9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoSE9TVF9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfSE9TVF9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoSE9TVF9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hPU1RfVElNRU9VVCgpCWJmaW5fcmVhZDE2KEhPU1RfVElNRU9VVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9IT1NUX1RJTUVPVVQodmFsKQliZmluX3dyaXRlMTYoSE9TVF9USU1FT1VULCB2YWwpCisKKy8qIFVTQiBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRkFERFIoKQkJYmZpbl9yZWFkMTYoVVNCX0ZBRERSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9GQUREUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRkFERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9QT1dFUigpCQliZmluX3JlYWQxNihVU0JfUE9XRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1BPV0VSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9QT1dFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJUWCgpCQliZmluX3JlYWQxNihVU0JfSU5UUlRYKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSVFgodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJUWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJSWCgpCQliZmluX3JlYWQxNihVU0JfSU5UUlJYKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSUlgodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJSWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJUWEUoKQkJYmZpbl9yZWFkMTYoVVNCX0lOVFJUWEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0lOVFJUWEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOVFJUWEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9JTlRSUlhFKCkJCWJmaW5fcmVhZDE2KFVTQl9JTlRSUlhFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSUlhFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9JTlRSUlhFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfSU5UUlVTQigpCQliZmluX3JlYWQxNihVU0JfSU5UUlVTQikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5UUlVTQih2YWwpCWJmaW5fd3JpdGUxNihVU0JfSU5UUlVTQiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOVFJVU0JFKCkJYmZpbl9yZWFkMTYoVVNCX0lOVFJVU0JFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9JTlRSVVNCRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfSU5UUlVTQkUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9GUkFNRSgpCQliZmluX3JlYWQxNihVU0JfRlJBTUUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0ZSQU1FKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9GUkFNRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0lOREVYKCkJCWJmaW5fcmVhZDE2KFVTQl9JTkRFWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfSU5ERVgodmFsKQliZmluX3dyaXRlMTYoVVNCX0lOREVYLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfVEVTVE1PREUoKQliZmluX3JlYWQxNihVU0JfVEVTVE1PREUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RFU1RNT0RFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9URVNUTU9ERSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0dMT0JJTlRSKCkJYmZpbl9yZWFkMTYoVVNCX0dMT0JJTlRSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9HTE9CSU5UUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfR0xPQklOVFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9HTE9CQUxfQ1RMKCkJYmZpbl9yZWFkMTYoVVNCX0dMT0JBTF9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0dMT0JBTF9DVEwodmFsKQliZmluX3dyaXRlMTYoVVNCX0dMT0JBTF9DVEwsIHZhbCkKKworLyogVVNCIFBhY2tldCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhfTUFYX1BBQ0tFVCgpCQliZmluX3JlYWQxNihVU0JfVFhfTUFYX1BBQ0tFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhfTUFYX1BBQ0tFVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfVFhfTUFYX1BBQ0tFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0NTUjAoKQkJCWJmaW5fcmVhZDE2KFVTQl9DU1IwKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9DU1IwKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQ1NSMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1RYQ1NSKCkJCQliZmluX3JlYWQxNihVU0JfVFhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYQ1NSKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWF9NQVhfUEFDS0VUKCkJCWJmaW5fcmVhZDE2KFVTQl9SWF9NQVhfUEFDS0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9SWF9NQVhfUEFDS0VUKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9SWF9NQVhfUEFDS0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhDU1IoKQkJCWJmaW5fcmVhZDE2KFVTQl9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfUlhDU1IodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9SWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0NPVU5UMCgpCQkJYmZpbl9yZWFkMTYoVVNCX0NPVU5UMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfQ09VTlQwKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfQ09VTlQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfUlhDT1VOVCgpCQkJYmZpbl9yZWFkMTYoVVNCX1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9SWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhUWVBFKCkJCQliZmluX3JlYWQxNihVU0JfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9UWFRZUEUodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9OQUtMSU1JVDAoKQkJYmZpbl9yZWFkMTYoVVNCX05BS0xJTUlUMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfTkFLTElNSVQwKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfTkFLTElNSVQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhJTlRFUlZBTCgpCQliZmluX3JlYWQxNihVU0JfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfVFhJTlRFUlZBTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1RYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9SWFRZUEUoKQkJCWJmaW5fcmVhZDE2KFVTQl9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYVFlQRSh2YWwpCQliZmluX3dyaXRlMTYoVVNCX1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX1JYSU5URVJWQUwoKQkJYmZpbl9yZWFkMTYoVVNCX1JYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1JYSU5URVJWQUwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9SWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfVFhDT1VOVCgpCQkJYmZpbl9yZWFkMTYoVVNCX1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1RYQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9UWENPVU5ULCB2YWwpCisKKy8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IEZJRk8gUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDBfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVAwX0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQMF9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVAwX0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDFfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVAxX0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQMV9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVAxX0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDJfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVAyX0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQMl9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVAyX0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDNfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVAzX0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQM19GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVAzX0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDRfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVA0X0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQNF9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVA0X0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDVfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVA1X0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQNV9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVA1X0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDZfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVA2X0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQNl9GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVA2X0ZJRk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUDdfRklGTygpCQliZmluX3JlYWQxNihVU0JfRVA3X0ZJRk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQN19GSUZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRVA3X0ZJRk8sIHZhbCkKKworLyogVVNCIE9URyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfT1RHX0RFVl9DVEwoKQkJYmZpbl9yZWFkMTYoVVNCX09UR19ERVZfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9PVEdfREVWX0NUTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX09UR19ERVZfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfT1RHX1ZCVVNfSVJRKCkJCWJmaW5fcmVhZDE2KFVTQl9PVEdfVkJVU19JUlEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX09UR19WQlVTX0lSUSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfT1RHX1ZCVVNfSVJRLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfT1RHX1ZCVVNfTUFTSygpCQliZmluX3JlYWQxNihVU0JfT1RHX1ZCVVNfTUFTSykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfT1RHX1ZCVVNfTUFTSyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfT1RHX1ZCVVNfTUFTSywgdmFsKQorCisvKiBVU0IgUGh5IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9MSU5LSU5GTygpCQliZmluX3JlYWQxNihVU0JfTElOS0lORk8pCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0xJTktJTkZPKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfTElOS0lORk8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9WUExFTigpCQkJYmZpbl9yZWFkMTYoVVNCX1ZQTEVOKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9WUExFTih2YWwpCQliZmluX3dyaXRlMTYoVVNCX1ZQTEVOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfSFNfRU9GMSgpCQkJYmZpbl9yZWFkMTYoVVNCX0hTX0VPRjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0hTX0VPRjEodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9IU19FT0YxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRlNfRU9GMSgpCQkJYmZpbl9yZWFkMTYoVVNCX0ZTX0VPRjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0ZTX0VPRjEodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9GU19FT0YxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfTFNfRU9GMSgpCQkJYmZpbl9yZWFkMTYoVVNCX0xTX0VPRjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0xTX0VPRjEodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9MU19FT0YxLCB2YWwpCisKKy8qIChBUEhZX0NOVFJMIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0FQSFlfQ05UUkwoKQkJYmZpbl9yZWFkMTYoVVNCX0FQSFlfQ05UUkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0FQSFlfQ05UUkwodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9BUEhZX0NOVFJMLCB2YWwpCisKKy8qIChBUEhZX0NBTElCIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0FQSFlfQ0FMSUIoKQkJYmZpbl9yZWFkMTYoVVNCX0FQSFlfQ0FMSUIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0FQSFlfQ0FMSUIodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9BUEhZX0NBTElCLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfQVBIWV9DTlRSTDIoKQkJYmZpbl9yZWFkMTYoVVNCX0FQSFlfQ05UUkwyKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9BUEhZX0NOVFJMMih2YWwpCQliZmluX3dyaXRlMTYoVVNCX0FQSFlfQ05UUkwyLCB2YWwpCisKKy8qIChQSFlfVEVTVCBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9QSFlfVEVTVCgpCQliZmluX3JlYWQxNihVU0JfUEhZX1RFU1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1BIWV9URVNUKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUEhZX1RFU1QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9QTExPU0NfQ1RSTCgpCQliZmluX3JlYWQxNihVU0JfUExMT1NDX0NUUkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX1BMTE9TQ19DVFJMKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfUExMT1NDX0NUUkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9TUlBfQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFVTQl9TUlBfQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9TUlBfQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfU1JQX0NMS0RJViwgdmFsKQorCisvKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCAwIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfVFhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfVFhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1JYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfUlhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMF9SWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkwX1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMF9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMF9UWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkwX1RYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTBfUlhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTBfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkwX1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1JYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfUlhJTlRFUlZBTCwgdmFsKQorCisvKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCAxIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTBfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkwX1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMF9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTBfVFhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkxX1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTFfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkxX1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkxX1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTFfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMV9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMV9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTFfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9SWElOVEVSVkFMLCB2YWwpCisKKy8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDIgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMV9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTFfVFhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkxX1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMV9UWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTJfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JMl9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTJfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTJfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JMl9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkyX1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkyX1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JMl9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1JYSU5URVJWQUwsIHZhbCkKKworLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgMyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkyX1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JMl9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTJfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkyX1RYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfVFhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfVFhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1JYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfUlhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JM19SWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkkzX1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JM19UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JM19UWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkkzX1RYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTNfUlhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTNfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkkzX1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1JYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfUlhJTlRFUlZBTCwgdmFsKQorCisvKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCA0IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTNfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkkzX1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JM19UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTNfVFhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk0X1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTRfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk0X1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk0X1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTRfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNF9SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNF9SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTRfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9SWElOVEVSVkFMLCB2YWwpCisKKy8qIFVTQiBFbmRiZmluX3JlYWRfKClvaW50IDUgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNF9UWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTRfVFhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk0X1RYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNF9UWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1RYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1RYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9SWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfUlhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1JYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9SWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTVfUlhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9UWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNV9UWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTVfVFhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTVfVFhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1RYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNV9UWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1JYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk1X1JYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk1X1JYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNV9SWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9SWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfUlhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1JYSU5URVJWQUwsIHZhbCkKKworLyogVVNCIEVuZGJmaW5fcmVhZF8oKW9pbnQgNiBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk1X1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNV9UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTVfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk1X1RYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfVFhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfVFhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYTUFYUCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYTUFYUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYTUFYUCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1JYTUFYUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWENTUigpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYQ1NSKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhDU1IodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWENTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9SWENPVU5UKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfUlhDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1JYQ09VTlQodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JNl9SWENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1RYVFlQRSgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYVFlQRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk2X1RYVFlQRSh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYVFlQRSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JNl9UWElOVEVSVkFMKCkJYmZpbl9yZWFkMTYoVVNCX0VQX05JNl9UWElOVEVSVkFMKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfVFhJTlRFUlZBTCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk2X1RYSU5URVJWQUwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfUlhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTZfUlhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTZfUlhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk2X1JYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1JYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9SWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfUlhJTlRFUlZBTCwgdmFsKQorCisvKiBVU0IgRW5kYmZpbl9yZWFkXygpb2ludCA3IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTZfVFhDT1VOVCgpCQliZmluX3JlYWQxNihVU0JfRVBfTkk2X1RYQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JNl9UWENPVU5UKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTZfVFhDT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19UWE1BWFAoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWE1BWFApCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWE1BWFAodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19UWE1BWFAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhDU1IoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWENTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1RYQ1NSKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhDU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhNQVhQKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhNQVhQKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhNQVhQKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfUlhNQVhQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYQ1NSKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhDU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWENTUih2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYQ1NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1JYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19SWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfUlhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1JYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfVFhUWVBFKCkJCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfVFhUWVBFKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhUWVBFKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhUWVBFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYSU5URVJWQUwoKQliZmluX3JlYWQxNihVU0JfRVBfTkk3X1RYSU5URVJWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19UWElOVEVSVkFMKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9FUF9OSTdfVFhJTlRFUlZBTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0VQX05JN19SWFRZUEUoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19SWFRZUEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0VQX05JN19SWFRZUEUodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWFRZUEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9FUF9OSTdfUlhJTlRFUlZBTCgpCWJmaW5fcmVhZDE2KFVTQl9FUF9OSTdfUlhJTlRFUlZBTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRVBfTkk3X1JYSU5URVJWQUwodmFsKQliZmluX3dyaXRlMTYoVVNCX0VQX05JN19SWElOVEVSVkFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRVBfTkk3X1RYQ09VTlQoKQkJYmZpbl9yZWFkMTYoVVNCX0VQX05JN19UWENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9FUF9OSTdfVFhDT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRVBfTkk3X1RYQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUFfSU5URVJSVVBUKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUFfSU5URVJSVVBUKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUFfSU5URVJSVVBUKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUFfSU5URVJSVVBULCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDAgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMENPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTBDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMEFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTBBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEwQUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTBBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMEFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMEFERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMENPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEwQ09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTBDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMENPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BMENPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMENPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMENPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BMENPVU5USElHSCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCAxIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTFDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUNPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUExQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTFBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUExQUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMUFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUExQUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTFBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BMUFERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTFBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTFDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMUNPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUExQ09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTFDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTFDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTFDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTFDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTFDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgMiBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEyQ09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BMkNPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMkNPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEyQUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BMkFERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTJBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BMkFERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEyQUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkFERFJISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEyQUREUkhJR0gsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEyQ09VTlRMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTJDT1VOVExPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BMkNPVU5UTE9XKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEyQ09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUEyQ09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEyQ09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEyQ09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUEyQ09VTlRISUdILCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDMgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BM0NPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQ09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTNDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BM0FERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTNBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUEzQUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTNBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BM0FERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BM0FERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BM0NPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUEzQ09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTNDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BM0NPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BM0NPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BM0NPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BM0NPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BM0NPVU5USElHSCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCA0IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTRDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0Q09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNENPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE0Q09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTRBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE0QUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNEFERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE0QUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTRBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNEFERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0QUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTRBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTRDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNENPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE0Q09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTRDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTRDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTRDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTRDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTRDT1VOVEhJR0gsIHZhbCkKKworLyogVVNCIENoYW5uZWwgNSBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE1Q09OVFJPTCgpCQliZmluX3JlYWQxNihVU0JfRE1BNUNPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVDT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNUNPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE1QUREUkxPVygpCQliZmluX3JlYWQxNihVU0JfRE1BNUFERFJMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVBRERSTE9XKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNUFERFJMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE1QUREUkhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTVBRERSSElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNUFERFJISUdIKHZhbCkJCWJmaW5fd3JpdGUxNihVU0JfRE1BNUFERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNUNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1Q09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTVDT1VOVExPVyh2YWwpCWZpbl93cml0ZTE2KFVTQl9ETUE1Q09VTlRMT1csIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VTQl9ETUE1Q09VTlRISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE1Q09VTlRISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE1Q09VTlRISUdIKHZhbCkJYmZpbl93cml0ZTE2KFVTQl9ETUE1Q09VTlRISUdILCB2YWwpCisKKy8qIFVTQiBDaGFubmVsIDYgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNkNPTlRST0woKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZDT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2Q09OVFJPTCh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTZDT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNkFERFJMT1coKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTZBRERSTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE2QUREUkxPVyh2YWwpCQliZmluX3dyaXRlMTYoVVNCX0RNQTZBRERSTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNkFERFJISUdIKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2QUREUkhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZBRERSSElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNkFERFJISUdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNkNPVU5UTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE2Q09VTlRMT1cpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTZDT1VOVExPVyh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNkNPVU5UTE9XLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VU0JfRE1BNkNPVU5USElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BNkNPVU5USElHSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BNkNPVU5USElHSCh2YWwpCWJmaW5fd3JpdGUxNihVU0JfRE1BNkNPVU5USElHSCwgdmFsKQorCisvKiBVU0IgQ2hhbm5lbCA3IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTdDT05UUk9MKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3Q09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE3Q09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTdBRERSTE9XKCkJCWJmaW5fcmVhZDE2KFVTQl9ETUE3QUREUkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9VU0JfRE1BN0FERFJMT1codmFsKQkJYmZpbl93cml0ZTE2KFVTQl9ETUE3QUREUkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTdBRERSSElHSCgpCQliZmluX3JlYWQxNihVU0JfRE1BN0FERFJISUdIKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3QUREUkhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTdBRERSSElHSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTdDT1VOVExPVygpCQliZmluX3JlYWQxNihVU0JfRE1BN0NPVU5UTE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1VTQl9ETUE3Q09VTlRMT1codmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTdDT1VOVExPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVVNCX0RNQTdDT1VOVEhJR0goKQkJYmZpbl9yZWFkMTYoVVNCX0RNQTdDT1VOVEhJR0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfVVNCX0RNQTdDT1VOVEhJR0godmFsKQliZmluX3dyaXRlMTYoVVNCX0RNQTdDT1VOVEhJR0gsIHZhbCkKKworLyogS2V5YmZpbl9yZWFkXygpYWQgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0tQQURfQ1RMKCkJCWJmaW5fcmVhZDE2KEtQQURfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX0tQQURfQ1RMKHZhbCkJYmZpbl93cml0ZTE2KEtQQURfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9LUEFEX1BSRVNDQUxFKCkJYmZpbl9yZWFkMTYoS1BBRF9QUkVTQ0FMRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9LUEFEX1BSRVNDQUxFKHZhbCkJYmZpbl93cml0ZTE2KEtQQURfUFJFU0NBTEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0tQQURfTVNFTCgpCQliZmluX3JlYWQxNihLUEFEX01TRUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfS1BBRF9NU0VMKHZhbCkJYmZpbl93cml0ZTE2KEtQQURfTVNFTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfS1BBRF9ST1dDT0woKQkJYmZpbl9yZWFkMTYoS1BBRF9ST1dDT0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfS1BBRF9ST1dDT0wodmFsKQliZmluX3dyaXRlMTYoS1BBRF9ST1dDT0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0tQQURfU1RBVCgpCQliZmluX3JlYWQxNihLUEFEX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfS1BBRF9TVEFUKHZhbCkJYmZpbl93cml0ZTE2KEtQQURfU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfS1BBRF9TT0ZURVZBTCgpCWJmaW5fcmVhZDE2KEtQQURfU09GVEVWQUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfS1BBRF9TT0ZURVZBTCh2YWwpCWJmaW5fd3JpdGUxNihLUEFEX1NPRlRFVkFMLCB2YWwpCisKKy8qIFBpeGVsIENvbWJmaW5fcmVhZF8oKW9zaXRvciAoUElYQykgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQ1RMKCkJCWJmaW5fcmVhZDE2KFBJWENfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQ1RMKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX1BQTCgpCQliZmluX3JlYWQxNihQSVhDX1BQTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX1BQTCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX1BQTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19MUEYoKQkJYmZpbl9yZWFkMTYoUElYQ19MUEYpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19MUEYodmFsKQliZmluX3dyaXRlMTYoUElYQ19MUEYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQUhTVEFSVCgpCWJmaW5fcmVhZDE2KFBJWENfQUhTVEFSVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0FIU1RBUlQodmFsKQliZmluX3dyaXRlMTYoUElYQ19BSFNUQVJULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0FIRU5EKCkJCWJmaW5fcmVhZDE2KFBJWENfQUhFTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19BSEVORCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0FIRU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0FWU1RBUlQoKQliZmluX3JlYWQxNihQSVhDX0FWU1RBUlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19BVlNUQVJUKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQVZTVEFSVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19BVkVORCgpCQliZmluX3JlYWQxNihQSVhDX0FWRU5EKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQVZFTkQodmFsKQliZmluX3dyaXRlMTYoUElYQ19BVkVORCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19BVFJBTlNQKCkJYmZpbl9yZWFkMTYoUElYQ19BVFJBTlNQKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQVRSQU5TUCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0FUUkFOU1AsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfQkhTVEFSVCgpCWJmaW5fcmVhZDE2KFBJWENfQkhTVEFSVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX0JIU1RBUlQodmFsKQliZmluX3dyaXRlMTYoUElYQ19CSFNUQVJULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0JIRU5EKCkJCWJmaW5fcmVhZDE2KFBJWENfQkhFTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19CSEVORCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0JIRU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSVhDX0JWU1RBUlQoKQliZmluX3JlYWQxNihQSVhDX0JWU1RBUlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19CVlNUQVJUKHZhbCkJYmZpbl93cml0ZTE2KFBJWENfQlZTVEFSVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19CVkVORCgpCQliZmluX3JlYWQxNihQSVhDX0JWRU5EKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQlZFTkQodmFsKQliZmluX3dyaXRlMTYoUElYQ19CVkVORCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19CVFJBTlNQKCkJYmZpbl9yZWFkMTYoUElYQ19CVFJBTlNQKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQlRSQU5TUCh2YWwpCWJmaW5fd3JpdGUxNihQSVhDX0JUUkFOU1AsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfSU5UUlNUQVQoKQliZmluX3JlYWQxNihQSVhDX0lOVFJTVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfSU5UUlNUQVQodmFsKQliZmluX3dyaXRlMTYoUElYQ19JTlRSU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19SWUNPTigpCQliZmluX3JlYWQzMihQSVhDX1JZQ09OKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfUllDT04odmFsKQliZmluX3dyaXRlMzIoUElYQ19SWUNPTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19HVUNPTigpCQliZmluX3JlYWQzMihQSVhDX0dVQ09OKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfR1VDT04odmFsKQliZmluX3dyaXRlMzIoUElYQ19HVUNPTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19CVkNPTigpCQliZmluX3JlYWQzMihQSVhDX0JWQ09OKQorI2RlZmluZSBiZmluX3dyaXRlX1BJWENfQlZDT04odmFsKQliZmluX3dyaXRlMzIoUElYQ19CVkNPTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElYQ19DQ0JJQVMoKQkJYmZpbl9yZWFkMzIoUElYQ19DQ0JJQVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElYQ19DQ0JJQVModmFsKQliZmluX3dyaXRlMzIoUElYQ19DQ0JJQVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJWENfVEMoKQkJYmZpbl9yZWFkMzIoUElYQ19UQykKKyNkZWZpbmUgYmZpbl93cml0ZV9QSVhDX1RDKHZhbCkJCWJmaW5fd3JpdGUzMihQSVhDX1RDLCB2YWwpCisKKy8qIEhhbmRzaGFrZSBNRE1BIDAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhNRE1BMF9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNJTklUKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ0lOSVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9CQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0JDSU5JVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQkNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQkNJTklULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNVUkdFTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0VDVVJHRU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ1VSR0VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUEwX0VDVVJHRU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTBfRUNPVkVSRkxPVygpCQliZmluX3JlYWQxNihITURNQTBfRUNPVkVSRkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfRUNPVkVSRkxPVyh2YWwpCWJmaW5fd3JpdGUxNihITURNQTBfRUNPVkVSRkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUEwX0VDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTBfRUNPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMF9FQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMF9FQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMF9CQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUEwX0JDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTBfQkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTBfQkNPVU5ULCB2YWwpCisKKy8qIEhhbmRzaGFrZSBNRE1BIDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KEhNRE1BMV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDSU5JVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNJTklUKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ0lOSVQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ0lOSVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9CQ0lOSVQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0JDSU5JVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQkNJTklUKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQkNJTklULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNVUkdFTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0VDVVJHRU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ1VSR0VOVCh2YWwpCQliZmluX3dyaXRlMTYoSE1ETUExX0VDVVJHRU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ITURNQTFfRUNPVkVSRkxPVygpCQliZmluX3JlYWQxNihITURNQTFfRUNPVkVSRkxPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfRUNPVkVSRkxPVyh2YWwpCWJmaW5fd3JpdGUxNihITURNQTFfRUNPVkVSRkxPVywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSE1ETUExX0VDT1VOVCgpCQliZmluX3JlYWQxNihITURNQTFfRUNPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0hNRE1BMV9FQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KEhNRE1BMV9FQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0hNRE1BMV9CQ09VTlQoKQkJYmZpbl9yZWFkMTYoSE1ETUExX0JDT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ITURNQTFfQkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihITURNQTFfQkNPVU5ULCB2YWwpCisKKyNlbmRpZiAvKiBfQ0RFRl9CRjU0OV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0eF9iYXNlLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0eF9iYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiY2VmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTR4X2Jhc2UuaApAQCAtMCwwICsxLDI3MjIgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTR4X2Jhc2UuaAorICogQmFzZWQgb246CisgKiBBdXRob3I6CisgKgorICogQ3JlYXRlZDoKKyAqIERlc2NyaXB0aW9uOgorICoKKyAqIFJldjoKKyAqCisgKiBNb2RpZmllZDoKKyAqCisgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9DREVGX0JGNTRYX0gKKyNkZWZpbmUgX0NERUZfQkY1NFhfSAorCisjaW5jbHVkZSA8ZGVmQkY1NHhfYmFzZS5oPgorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgQ09NTU9OIFRPIEFMTCBBRFNQLUJGNTR4ICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBQTEwgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1BMTF9DVEwoKQkJYmZpbl9yZWFkMTYoUExMX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QTExfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihQTExfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QTExfRElWKCkJCWJmaW5fcmVhZDE2KFBMTF9ESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfUExMX0RJVih2YWwpCQliZmluX3dyaXRlMTYoUExMX0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVlJfQ1RMKCkJCWJmaW5fcmVhZDE2KFZSX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9WUl9DVEwodmFsKQkJYmZpbl93cml0ZTE2KFZSX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUExMX1NUQVQoKQkJYmZpbl9yZWFkMTYoUExMX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUExMX1NUQVQodmFsKQliZmluX3dyaXRlMTYoUExMX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BMTF9MT0NLQ05UKCkJCWJmaW5fcmVhZDE2KFBMTF9MT0NLQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX1BMTF9MT0NLQ05UKHZhbCkJYmZpbl93cml0ZTE2KFBMTF9MT0NLQ05ULCB2YWwpCisKKy8qIERlYnVnL01QL0VtdWxhdGlvbiBSZWdpc3RlcnMgKDB4RkZDMDAwMTQgLSAweEZGQzAwMDE0KSAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9DSElQSUQoKQkJYmZpbl9yZWFkMzIoQ0hJUElEKQorI2RlZmluZSBiZmluX3dyaXRlX0NISVBJRCh2YWwpCQliZmluX3dyaXRlMzIoQ0hJUElELCB2YWwpCisKKy8qIFN5c3RlbSBSZXNldCBhbmQgSW50ZXJydWJmaW5fcmVhZF8oKXQgQ29udHJvbGxlciAoMHhGRkMwMDEwMCAtIDB4RkZDMDAxMDQpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NXUlNUKCkJCWJmaW5fcmVhZDE2KFNXUlNUKQorI2RlZmluZSBiZmluX3dyaXRlX1NXUlNUKHZhbCkJCWJmaW5fd3JpdGUxNihTV1JTVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1lTQ1IoKQkJYmZpbl9yZWFkMTYoU1lTQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1lTQ1IodmFsKQkJYmZpbl93cml0ZTE2KFNZU0NSLCB2YWwpCisKKy8qIFNJQyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfU0lDX0lNQVNLMCgpCQliZmluX3JlYWQzMihTSUNfSU1BU0swKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSzAodmFsKQliZmluX3dyaXRlMzIoU0lDX0lNQVNLMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lNQVNLMSgpCQliZmluX3JlYWQzMihTSUNfSU1BU0sxKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSzEodmFsKQliZmluX3dyaXRlMzIoU0lDX0lNQVNLMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lNQVNLMigpCQliZmluX3JlYWQzMihTSUNfSU1BU0syKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JTUFTSzIodmFsKQliZmluX3dyaXRlMzIoU0lDX0lNQVNLMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lTUjAoKQkJYmZpbl9yZWFkMzIoU0lDX0lTUjApCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lTUjAodmFsKQliZmluX3dyaXRlMzIoU0lDX0lTUjAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JU1IxKCkJCWJmaW5fcmVhZDMyKFNJQ19JU1IxKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JU1IxKHZhbCkJYmZpbl93cml0ZTMyKFNJQ19JU1IxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSVNSMigpCQliZmluX3JlYWQzMihTSUNfSVNSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVNSMih2YWwpCWJmaW5fd3JpdGUzMihTSUNfSVNSMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lXUjAoKQkJYmZpbl9yZWFkMzIoU0lDX0lXUjApCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lXUjAodmFsKQliZmluX3dyaXRlMzIoU0lDX0lXUjAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JV1IxKCkJCWJmaW5fcmVhZDMyKFNJQ19JV1IxKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JV1IxKHZhbCkJYmZpbl93cml0ZTMyKFNJQ19JV1IxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSVdSMigpCQliZmluX3JlYWQzMihTSUNfSVdSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSVdSMih2YWwpCWJmaW5fd3JpdGUzMihTSUNfSVdSMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjAoKQkJYmZpbl9yZWFkMzIoU0lDX0lBUjApCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lBUjAodmFsKQliZmluX3dyaXRlMzIoU0lDX0lBUjAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIxKCkJCWJmaW5fcmVhZDMyKFNJQ19JQVIxKQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVIxKHZhbCkJYmZpbl93cml0ZTMyKFNJQ19JQVIxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSUFSMigpCQliZmluX3JlYWQzMihTSUNfSUFSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMih2YWwpCWJmaW5fd3JpdGUzMihTSUNfSUFSMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjMoKQkJYmZpbl9yZWFkMzIoU0lDX0lBUjMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lBUjModmFsKQliZmluX3dyaXRlMzIoU0lDX0lBUjMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI0KCkJCWJmaW5fcmVhZDMyKFNJQ19JQVI0KQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVI0KHZhbCkJYmZpbl93cml0ZTMyKFNJQ19JQVI0LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSUFSNSgpCQliZmluX3JlYWQzMihTSUNfSUFSNSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSNSh2YWwpCWJmaW5fd3JpdGUzMihTSUNfSUFSNSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjYoKQkJYmZpbl9yZWFkMzIoU0lDX0lBUjYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lBUjYodmFsKQliZmluX3dyaXRlMzIoU0lDX0lBUjYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVI3KCkJCWJmaW5fcmVhZDMyKFNJQ19JQVI3KQorI2RlZmluZSBiZmluX3dyaXRlX1NJQ19JQVI3KHZhbCkJYmZpbl93cml0ZTMyKFNJQ19JQVI3LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TSUNfSUFSOCgpCQliZmluX3JlYWQzMihTSUNfSUFSOCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSOCh2YWwpCWJmaW5fd3JpdGUzMihTSUNfSUFSOCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjkoKQkJYmZpbl9yZWFkMzIoU0lDX0lBUjkpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lBUjkodmFsKQliZmluX3dyaXRlMzIoU0lDX0lBUjksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NJQ19JQVIxMCgpCQliZmluX3JlYWQzMihTSUNfSUFSMTApCisjZGVmaW5lIGJmaW5fd3JpdGVfU0lDX0lBUjEwKHZhbCkJYmZpbl93cml0ZTMyKFNJQ19JQVIxMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU0lDX0lBUjExKCkJCWJmaW5fcmVhZDMyKFNJQ19JQVIxMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TSUNfSUFSMTEodmFsKQliZmluX3dyaXRlMzIoU0lDX0lBUjExLCB2YWwpCisKKy8qIFdhdGNoZG9nIFRpbWVyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9XRE9HX0NUTCgpCQliZmluX3JlYWQxNihXRE9HX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9XRE9HX0NUTCh2YWwpCWJmaW5fd3JpdGUxNihXRE9HX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfV0RPR19DTlQoKQkJYmZpbl9yZWFkMzIoV0RPR19DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfV0RPR19DTlQodmFsKQliZmluX3dyaXRlMzIoV0RPR19DTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1dET0dfU1RBVCgpCQliZmluX3JlYWQzMihXRE9HX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfV0RPR19TVEFUKHZhbCkJYmZpbl93cml0ZTMyKFdET0dfU1RBVCwgdmFsKQorCisvKiBSVEMgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1JUQ19TVEFUKCkJCWJmaW5fcmVhZDMyKFJUQ19TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1JUQ19TVEFUKHZhbCkJYmZpbl93cml0ZTMyKFJUQ19TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfSUNUTCgpCQliZmluX3JlYWQxNihSVENfSUNUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SVENfSUNUTCh2YWwpCWJmaW5fd3JpdGUxNihSVENfSUNUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlRDX0lTVEFUKCkJCWJmaW5fcmVhZDE2KFJUQ19JU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9SVENfSVNUQVQodmFsKQliZmluX3dyaXRlMTYoUlRDX0lTVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9SVENfU1dDTlQoKQkJYmZpbl9yZWFkMTYoUlRDX1NXQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX1JUQ19TV0NOVCh2YWwpCWJmaW5fd3JpdGUxNihSVENfU1dDTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1JUQ19BTEFSTSgpCQliZmluX3JlYWQzMihSVENfQUxBUk0pCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX0FMQVJNKHZhbCkJYmZpbl93cml0ZTMyKFJUQ19BTEFSTSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUlRDX1BSRU4oKQkJYmZpbl9yZWFkMTYoUlRDX1BSRU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfUlRDX1BSRU4odmFsKQliZmluX3dyaXRlMTYoUlRDX1BSRU4sIHZhbCkKKworLyogVUFSVDAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX0RMTCgpCQliZmluX3JlYWQxNihVQVJUMF9ETEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfRExMKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQwX0RMTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfRExIKCkJCWJmaW5fcmVhZDE2KFVBUlQwX0RMSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9ETEgodmFsKQliZmluX3dyaXRlMTYoVUFSVDBfRExILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9HQ1RMKCkJCWJmaW5fcmVhZDE2KFVBUlQwX0dDVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfR0NUTCh2YWwpCWJmaW5fd3JpdGUxNihVQVJUMF9HQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9MQ1IoKQkJYmZpbl9yZWFkMTYoVUFSVDBfTENSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX0xDUih2YWwpCWJmaW5fd3JpdGUxNihVQVJUMF9MQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX01DUigpCQliZmluX3JlYWQxNihVQVJUMF9NQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfTUNSKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQwX01DUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfTFNSKCkJCWJmaW5fcmVhZDE2KFVBUlQwX0xTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9MU1IodmFsKQliZmluX3dyaXRlMTYoVUFSVDBfTFNSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9NU1IoKQkJYmZpbl9yZWFkMTYoVUFSVDBfTVNSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX01TUih2YWwpCWJmaW5fd3JpdGUxNihVQVJUMF9NU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQwX1NDUigpCQliZmluX3JlYWQxNihVQVJUMF9TQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfU0NSKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQwX1NDUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfSUVSX1NFVCgpCWJmaW5fcmVhZDE2KFVBUlQwX0lFUl9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfSUVSX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihVQVJUMF9JRVJfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9JRVJfQ0xFQVIoKQliZmluX3JlYWQxNihVQVJUMF9JRVJfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDBfSUVSX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQwX0lFUl9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDBfVEhSKCkJCWJmaW5fcmVhZDE2KFVBUlQwX1RIUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMF9USFIodmFsKQliZmluX3dyaXRlMTYoVUFSVDBfVEhSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMF9SQlIoKQkJYmZpbl9yZWFkMTYoVUFSVDBfUkJSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQwX1JCUih2YWwpCWJmaW5fd3JpdGUxNihVQVJUMF9SQlIsIHZhbCkKKworLyogU1BJMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfU1BJMF9DVEwoKQkJYmZpbl9yZWFkMTYoU1BJMF9DVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJMF9DVEwodmFsKQliZmluX3dyaXRlMTYoU1BJMF9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSTBfRkxHKCkJCWJmaW5fcmVhZDE2KFNQSTBfRkxHKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTBfRkxHKHZhbCkJYmZpbl93cml0ZTE2KFNQSTBfRkxHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUEkwX1NUQVQoKQkJYmZpbl9yZWFkMTYoU1BJMF9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTBfU1RBVCh2YWwpCWJmaW5fd3JpdGUxNihTUEkwX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSTBfVERCUigpCQliZmluX3JlYWQxNihTUEkwX1REQlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJMF9UREJSKHZhbCkJYmZpbl93cml0ZTE2KFNQSTBfVERCUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BJMF9SREJSKCkJCWJmaW5fcmVhZDE2KFNQSTBfUkRCUikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUEkwX1JEQlIodmFsKQliZmluX3dyaXRlMTYoU1BJMF9SREJSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUEkwX0JBVUQoKQkJYmZpbl9yZWFkMTYoU1BJMF9CQVVEKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTBfQkFVRCh2YWwpCWJmaW5fd3JpdGUxNihTUEkwX0JBVUQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSTBfU0hBRE9XKCkJCWJmaW5fcmVhZDE2KFNQSTBfU0hBRE9XKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTBfU0hBRE9XKHZhbCkJYmZpbl93cml0ZTE2KFNQSTBfU0hBRE9XLCB2YWwpCisKKy8qIFRpbWVyIEdyb3ViZmluX3JlYWRfKCkgb2YgMyByZWdpc3RlcnMgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBzaGFyZWQgZmlsZSBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhdmFpbGFibGUgb24gdGhlIEFEU1AtQkY1NDIgcHJvY2Vzc29yICovCisKKy8qIFR3byBXaXJlIEludGVyZmFjZSBSZWdpc3RlcnMgKFRXSTApICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfQ0xLRElWKCkJCQliZmluX3JlYWQxNihUV0kwX0NMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kwX0NMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoVFdJMF9DTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfQ09OVFJPTCgpCQliZmluX3JlYWQxNihUV0kwX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kwX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfU0xBVkVfQ1RSTCgpCQliZmluX3JlYWQxNihUV0kwX1NMQVZFX0NUUkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9TTEFWRV9DVFJMKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kwX1NMQVZFX0NUUkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfU0xBVkVfU1RBVCgpCQliZmluX3JlYWQxNihUV0kwX1NMQVZFX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9TTEFWRV9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kwX1NMQVZFX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfU0xBVkVfQUREUigpCQliZmluX3JlYWQxNihUV0kwX1NMQVZFX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9TTEFWRV9BRERSKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kwX1NMQVZFX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfTUFTVEVSX0NUUkwoKQkJYmZpbl9yZWFkMTYoVFdJMF9NQVNURVJfQ1RSTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kwX01BU1RFUl9DVFJMKHZhbCkJYmZpbl93cml0ZTE2KFRXSTBfTUFTVEVSX0NUUkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfTUFTVEVSX1NUQVQoKQkJYmZpbl9yZWFkMTYoVFdJMF9NQVNURVJfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kwX01BU1RFUl9TVEFUKHZhbCkJYmZpbl93cml0ZTE2KFRXSTBfTUFTVEVSX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfTUFTVEVSX0FERFIoKQkJYmZpbl9yZWFkMTYoVFdJMF9NQVNURVJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kwX01BU1RFUl9BRERSKHZhbCkJYmZpbl93cml0ZTE2KFRXSTBfTUFTVEVSX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfSU5UX1NUQVQoKQkJYmZpbl9yZWFkMTYoVFdJMF9JTlRfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kwX0lOVF9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihUV0kwX0lOVF9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kwX0lOVF9NQVNLKCkJCWJmaW5fcmVhZDE2KFRXSTBfSU5UX01BU0spCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9JTlRfTUFTSyh2YWwpCQliZmluX3dyaXRlMTYoVFdJMF9JTlRfTUFTSywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMF9GSUZPX0NUUkwoKQkJYmZpbl9yZWFkMTYoVFdJMF9GSUZPX0NUUkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9GSUZPX0NUUkwodmFsKQkJYmZpbl93cml0ZTE2KFRXSTBfRklGT19DVFJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kwX0ZJRk9fU1RBVCgpCQliZmluX3JlYWQxNihUV0kwX0ZJRk9fU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kwX0ZJRk9fU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoVFdJMF9GSUZPX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfWE1UX0RBVEE4KCkJCWJmaW5fcmVhZDE2KFRXSTBfWE1UX0RBVEE4KQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTBfWE1UX0RBVEE4KHZhbCkJCWJmaW5fd3JpdGUxNihUV0kwX1hNVF9EQVRBOCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMF9YTVRfREFUQTE2KCkJCWJmaW5fcmVhZDE2KFRXSTBfWE1UX0RBVEExNikKKyNkZWZpbmUgYmZpbl93cml0ZV9UV0kwX1hNVF9EQVRBMTYodmFsKQkJYmZpbl93cml0ZTE2KFRXSTBfWE1UX0RBVEExNiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJMF9SQ1ZfREFUQTgoKQkJYmZpbl9yZWFkMTYoVFdJMF9SQ1ZfREFUQTgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9SQ1ZfREFUQTgodmFsKQkJYmZpbl93cml0ZTE2KFRXSTBfUkNWX0RBVEE4LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9UV0kwX1JDVl9EQVRBMTYoKQkJYmZpbl9yZWFkMTYoVFdJMF9SQ1ZfREFUQTE2KQorI2RlZmluZSBiZmluX3dyaXRlX1RXSTBfUkNWX0RBVEExNih2YWwpCQliZmluX3dyaXRlMTYoVFdJMF9SQ1ZfREFUQTE2LCB2YWwpCisKKy8qIFNQT1JUMCBpcyBub3QgZGVmaW5lZCBpbiB0aGUgc2hhcmVkIGZpbGUgYmVjYXVzZSBpdCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBBRFNQLUJGNTQyIGFuZCBBRFNQLUJGNTQ0IGJmaW5fcmVhZF8oKXJvY2Vzc29ycyAqLworCisvKiBTUE9SVDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9UQ1IxKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9UQ1IxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9UQ1IxKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMV9UQ1IxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVENSMigpCQliZmluX3JlYWQxNihTUE9SVDFfVENSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVENSMih2YWwpCWJmaW5fd3JpdGUxNihTUE9SVDFfVENSMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1RDTEtESVYoKQliZmluX3JlYWQxNihTUE9SVDFfVENMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfVENMS0RJVih2YWwpCWJmaW5fd3JpdGUxNihTUE9SVDFfVENMS0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1RGU0RJVigpCWJmaW5fcmVhZDE2KFNQT1JUMV9URlNESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1RGU0RJVih2YWwpCWJmaW5fd3JpdGUxNihTUE9SVDFfVEZTRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfVFgoKQkJYmZpbl9yZWFkMzIoU1BPUlQxX1RYKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9UWCh2YWwpCWJmaW5fd3JpdGUzMihTUE9SVDFfVFgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9SWCgpCQliZmluX3JlYWQzMihTUE9SVDFfUlgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JYKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMV9SWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX1JDUjEoKQkJYmZpbl9yZWFkMTYoU1BPUlQxX1JDUjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX1JDUjEodmFsKQliZmluX3dyaXRlMTYoU1BPUlQxX1JDUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9SQ1IyKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9SQ1IyKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9SQ1IyKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMV9SQ1IyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfUkNMS0RJVigpCWJmaW5fcmVhZDE2KFNQT1JUMV9SQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9SQ0xLRElWKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMV9SQ0xLRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfUkZTRElWKCkJYmZpbl9yZWFkMTYoU1BPUlQxX1JGU0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfUkZTRElWKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMV9SRlNESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9TVEFUKCkJCWJmaW5fcmVhZDE2KFNQT1JUMV9TVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9TVEFUKHZhbCkJYmZpbl93cml0ZTE2KFNQT1JUMV9TVEFULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfQ0hOTCgpCQliZmluX3JlYWQxNihTUE9SVDFfQ0hOTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfQ0hOTCh2YWwpCWJmaW5fd3JpdGUxNihTUE9SVDFfQ0hOTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01DTUMxKCkJYmZpbl9yZWFkMTYoU1BPUlQxX01DTUMxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NQ01DMSh2YWwpCWJmaW5fd3JpdGUxNihTUE9SVDFfTUNNQzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NQ01DMigpCWJmaW5fcmVhZDE2KFNQT1JUMV9NQ01DMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTUNNQzIodmFsKQliZmluX3dyaXRlMTYoU1BPUlQxX01DTUMyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTVRDUzAoKQliZmluX3JlYWQzMihTUE9SVDFfTVRDUzApCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01UQ1MwKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01UQ1MxKCkJYmZpbl9yZWFkMzIoU1BPUlQxX01UQ1MxKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NVENTMSh2YWwpCWJmaW5fd3JpdGUzMihTUE9SVDFfTVRDUzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NVENTMigpCWJmaW5fcmVhZDMyKFNQT1JUMV9NVENTMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVRDUzIodmFsKQliZmluX3dyaXRlMzIoU1BPUlQxX01UQ1MyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTVRDUzMoKQliZmluX3JlYWQzMihTUE9SVDFfTVRDUzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01UQ1MzKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMV9NVENTMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MwKCkJYmZpbl9yZWFkMzIoU1BPUlQxX01SQ1MwKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NUkNTMCh2YWwpCWJmaW5fd3JpdGUzMihTUE9SVDFfTVJDUzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMV9NUkNTMSgpCWJmaW5fcmVhZDMyKFNQT1JUMV9NUkNTMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDFfTVJDUzEodmFsKQliZmluX3dyaXRlMzIoU1BPUlQxX01SQ1MxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDFfTVJDUzIoKQliZmluX3JlYWQzMihTUE9SVDFfTVJDUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQxX01SQ1MyKHZhbCkJYmZpbl93cml0ZTMyKFNQT1JUMV9NUkNTMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQxX01SQ1MzKCkJYmZpbl9yZWFkMzIoU1BPUlQxX01SQ1MzKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMV9NUkNTMyh2YWwpCWJmaW5fd3JpdGUzMihTUE9SVDFfTVJDUzMsIHZhbCkKKworLyogQXN5bmNocm9ub3VzIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNR0NUTCgpCQliZmluX3JlYWQxNihFQklVX0FNR0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0FNR0NUTCh2YWwpCWJmaW5fd3JpdGUxNihFQklVX0FNR0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9BTUJDVEwwKCkJYmZpbl9yZWFkMzIoRUJJVV9BTUJDVEwwKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfQU1CQ1RMMCh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0FNQkNUTDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfQU1CQ1RMMSgpCWJmaW5fcmVhZDMyKEVCSVVfQU1CQ1RMMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0FNQkNUTDEodmFsKQliZmluX3dyaXRlMzIoRUJJVV9BTUJDVEwxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX01CU0NUTCgpCQliZmluX3JlYWQxNihFQklVX01CU0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX01CU0NUTCh2YWwpCWJmaW5fd3JpdGUxNihFQklVX01CU0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9BUkJTVEFUKCkJYmZpbl9yZWFkMzIoRUJJVV9BUkJTVEFUKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfQVJCU1RBVCh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0FSQlNUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfTU9ERSgpCQliZmluX3JlYWQzMihFQklVX01PREUpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9NT0RFKHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfTU9ERSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9GQ1RMKCkJCWJmaW5fcmVhZDE2KEVCSVVfRkNUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0ZDVEwodmFsKQliZmluX3dyaXRlMTYoRUJJVV9GQ1RMLCB2YWwpCisKKy8qIEREUiBNZW1vcnkgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfRUJJVV9ERFJDVEwwKCkJYmZpbl9yZWFkMzIoRUJJVV9ERFJDVEwwKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSQ1RMMCh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0REUkNUTDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfRERSQ1RMMSgpCWJmaW5fcmVhZDMyKEVCSVVfRERSQ1RMMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0REUkNUTDEodmFsKQliZmluX3dyaXRlMzIoRUJJVV9ERFJDVEwxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0REUkNUTDIoKQliZmluX3JlYWQzMihFQklVX0REUkNUTDIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9ERFJDVEwyKHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfRERSQ1RMMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9ERFJDVEwzKCkJYmZpbl9yZWFkMzIoRUJJVV9ERFJDVEwzKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSQ1RMMyh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0REUkNUTDMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfRERSUVVFKCkJCWJmaW5fcmVhZDMyKEVCSVVfRERSUVVFKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSUVVFKHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfRERSUVVFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0VSUkFERCgpIAliZmluX3JlYWQzMihFQklVX0VSUkFERCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0VSUkFERCh2YWwpIAliZmluX3dyaXRlMzIoRUJJVV9FUlJBREQpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0VSUk1TVCgpCQliZmluX3JlYWQxNihFQklVX0VSUk1TVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0VSUk1TVCh2YWwpCWJmaW5fd3JpdGUxNihFQklVX0VSUk1TVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9SU1RDVEwoKQkJYmZpbl9yZWFkMTYoRUJJVV9SU1RDVEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9SU1RDVEwodmFsKQliZmluX3dyaXRlMTYoRUJJVV9SU1RDVEwsIHZhbCkKKworLyogRERSIEJhbmtSZWFkIGFuZCBXcml0ZSBDb3VudCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfRUJJVV9ERFJCUkMwKCkJYmZpbl9yZWFkMzIoRUJJVV9ERFJCUkMwKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSQlJDMCh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0REUkJSQzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfRERSQlJDMSgpCWJmaW5fcmVhZDMyKEVCSVVfRERSQlJDMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0REUkJSQzEodmFsKQliZmluX3dyaXRlMzIoRUJJVV9ERFJCUkMxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0REUkJSQzIoKQliZmluX3JlYWQzMihFQklVX0REUkJSQzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9ERFJCUkMyKHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfRERSQlJDMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9ERFJCUkMzKCkJYmZpbl9yZWFkMzIoRUJJVV9ERFJCUkMzKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSQlJDMyh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0REUkJSQzMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfRERSQlJDNCgpCWJmaW5fcmVhZDMyKEVCSVVfRERSQlJDNCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0REUkJSQzQodmFsKQliZmluX3dyaXRlMzIoRUJJVV9ERFJCUkM0LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0REUkJSQzUoKQliZmluX3JlYWQzMihFQklVX0REUkJSQzUpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9ERFJCUkM1KHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfRERSQlJDNSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9ERFJCUkM2KCkJYmZpbl9yZWFkMzIoRUJJVV9ERFJCUkM2KQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSQlJDNih2YWwpCWJmaW5fd3JpdGUzMihFQklVX0REUkJSQzYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfRERSQlJDNygpCWJmaW5fcmVhZDMyKEVCSVVfRERSQlJDNykKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0REUkJSQzcodmFsKQliZmluX3dyaXRlMzIoRUJJVV9ERFJCUkM3LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0REUkJXQzAoKQliZmluX3JlYWQzMihFQklVX0REUkJXQzApCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9ERFJCV0MwKHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfRERSQldDMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9ERFJCV0MxKCkJYmZpbl9yZWFkMzIoRUJJVV9ERFJCV0MxKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSQldDMSh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0REUkJXQzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfRERSQldDMigpCWJmaW5fcmVhZDMyKEVCSVVfRERSQldDMikKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0REUkJXQzIodmFsKQliZmluX3dyaXRlMzIoRUJJVV9ERFJCV0MyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0REUkJXQzMoKQliZmluX3JlYWQzMihFQklVX0REUkJXQzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9ERFJCV0MzKHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfRERSQldDMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9ERFJCV0M0KCkJYmZpbl9yZWFkMzIoRUJJVV9ERFJCV0M0KQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSQldDNCh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0REUkJXQzQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfRERSQldDNSgpCWJmaW5fcmVhZDMyKEVCSVVfRERSQldDNSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0REUkJXQzUodmFsKQliZmluX3dyaXRlMzIoRUJJVV9ERFJCV0M1LCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0REUkJXQzYoKQliZmluX3JlYWQzMihFQklVX0REUkJXQzYpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9ERFJCV0M2KHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfRERSQldDNiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9ERFJCV0M3KCkJYmZpbl9yZWFkMzIoRUJJVV9ERFJCV0M3KQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSQldDNyh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0REUkJXQzcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfRERSQUNDVCgpCWJmaW5fcmVhZDMyKEVCSVVfRERSQUNDVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0REUkFDQ1QodmFsKQliZmluX3dyaXRlMzIoRUJJVV9ERFJBQ0NULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0REUlRBQ1QoKQliZmluX3JlYWQzMihFQklVX0REUlRBQ1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9ERFJUQUNUKHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfRERSVEFDVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9ERFJBUkNUKCkJYmZpbl9yZWFkMzIoRUJJVV9ERFJBUkNUKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSQVJDVCh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0REUkFSQ1QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfRERSR0MwKCkJCWJmaW5fcmVhZDMyKEVCSVVfRERSR0MwKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSR0MwKHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfRERSR0MwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0REUkdDMSgpCQliZmluX3JlYWQzMihFQklVX0REUkdDMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0REUkdDMSh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0REUkdDMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9ERFJHQzIoKQkJYmZpbl9yZWFkMzIoRUJJVV9ERFJHQzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9ERFJHQzIodmFsKQliZmluX3dyaXRlMzIoRUJJVV9ERFJHQzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfRERSR0MzKCkJCWJmaW5fcmVhZDMyKEVCSVVfRERSR0MzKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSR0MzKHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfRERSR0MzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0REUk1DRU4oKQliZmluX3JlYWQzMihFQklVX0REUk1DRU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9ERFJNQ0VOKHZhbCkJYmZpbl93cml0ZTMyKEVCSVVfRERSTUNFTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRUJJVV9ERFJNQ0NMKCkJYmZpbl9yZWFkMzIoRUJJVV9ERFJNQ0NMKQorI2RlZmluZSBiZmluX3dyaXRlX0VCSVVfRERSTUNDTCh2YWwpCWJmaW5fd3JpdGUzMihFQklVX0REUk1DQ0wsIHZhbCkKKworLyogRE1BQzAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQUMwX1RDUEVSKCkJCWJmaW5fcmVhZDE2KERNQUMwX1RDUEVSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQUMwX1RDUEVSKHZhbCkJYmZpbl93cml0ZTE2KERNQUMwX1RDUEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFDMF9UQ0NOVCgpCQliZmluX3JlYWQxNihETUFDMF9UQ0NOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUFDMF9UQ0NOVCh2YWwpCWJmaW5fd3JpdGUxNihETUFDMF9UQ0NOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCAwIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKERNQTBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTBfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEwX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTBfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTBfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUEwX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUEwX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTBfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTBfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUEwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMF9DVVJSX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihETUEwX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUEwX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUEwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEwX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEwX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMF9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTBfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTBfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTBfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTBfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEwX0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUEwX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEwX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEwX0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCAxIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKERNQTFfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTFfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTFfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTFfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTFfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUExX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTFfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTFfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUExX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUExX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMV9DVVJSX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihETUExX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUExX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUExX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUExX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMV9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTFfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTFfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTFfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTFfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTFfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExX0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUExX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExX0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCAyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKERNQTJfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTJfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTJfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUEyX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUEyX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTJfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEyX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUEyX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMl9DVVJSX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihETUEyX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUEyX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUEyX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEyX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMl9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMl9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTJfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTJfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTJfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTJfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTJfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyX0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUEyX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEyX0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCAzIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKERNQTNfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTNfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BM19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BM19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTNfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEzX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTNfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTNfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19YX01PRElGWSgpCQliZmluX3JlYWQxNihETUEzX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUEzX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTNfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTNfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEzX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUEzX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BM19DVVJSX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihETUEzX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUEzX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BM19DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUEzX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEzX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BM19JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUEzX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BM19QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTNfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTNfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTNfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTNfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTNfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEzX0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUEzX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEzX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEzX0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCA0IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKERNQTRfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTRfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BNF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BNF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTRfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE0X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTRfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTRfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE0X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE0X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTRfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTRfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE0X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE0X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNF9DVVJSX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihETUE0X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUE0X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BNF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUE0X0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE0X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE0X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNF9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTRfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTRfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTRfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTRfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTRfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE0X0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUE0X0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE0X0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE0X0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCA1IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKERNQTVfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTVfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BNV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BNV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTVfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE1X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTVfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTVfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE1X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE1X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTVfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTVfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE1X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE1X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNV9DVVJSX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihETUE1X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUE1X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BNV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUE1X0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE1X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE1X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNV9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTVfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTVfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTVfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTVfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTVfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE1X0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUE1X0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE1X0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE1X0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCA2IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKERNQTZfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTZfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BNl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BNl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTZfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE2X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTZfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTZfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE2X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE2X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTZfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTZfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE2X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE2X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BNl9DVVJSX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihETUE2X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUE2X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BNl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUE2X0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE2X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BNl9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE2X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BNl9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTZfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTZfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTZfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTZfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTZfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE2X0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUE2X0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE2X0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE2X0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCA3IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKERNQTdfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTdfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BN19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BN19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTdfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE3X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTdfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTdfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE3X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE3X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTdfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTdfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE3X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE3X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BN19DVVJSX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihETUE3X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUE3X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BN19DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUE3X0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE3X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BN19JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE3X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BN19QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTdfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTdfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTdfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTdfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTdfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE3X0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUE3X0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE3X0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE3X0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCA4IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKERNQThfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQThfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BOF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BOF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQThfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE4X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQThfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQThfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE4X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE4X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQThfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQThfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE4X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE4X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOF9DVVJSX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihETUE4X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUE4X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BOF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUE4X0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE4X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOF9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE4X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BOF9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQThfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQThfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQThfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQThfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQThfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE4X0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUE4X0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE4X0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE4X0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCA5IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKERNQTlfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTlfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BOV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BOV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KERNQTlfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUE5X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTlfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTlfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUE5X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE5X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTlfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTlfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUE5X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUE5X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BOV9DVVJSX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihETUE5X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUE5X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BOV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUE5X0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUE5X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BOV9JUlFfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihETUE5X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BOV9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTlfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTlfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTlfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTlfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTlfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUE5X0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUE5X0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUE5X0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUE5X0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCAxMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfTkVYVF9ERVNDX1BUUigpIAliZmluX3JlYWQzMihETUExMF9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTEwX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9TVEFSVF9BRERSKCkgCQliZmluX3JlYWQzMihETUExMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTEwX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoRE1BMTBfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTBfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTEwX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTBfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMTBfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUExMF9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTBfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMF9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9ZX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KERNQTEwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9ERVNDX1BUUigpIAliZmluX3JlYWQzMihETUExMF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEwX0NVUlJfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTEwX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMF9DVVJSX0FERFIoKSAJCWJmaW5fcmVhZDMyKERNQTEwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTEwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMTBfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KERNQTEwX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoRE1BMTBfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoRE1BMTBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEwX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTBfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTEwX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTBfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTEwX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTBfQ1VSUl9ZX0NPVU5ULCB2YWwpCisKKy8qIERNQSBDaGFubmVsIDExIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9ORVhUX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKERNQTExX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfTkVYVF9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTFfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1NUQVJUX0FERFIoKSAJCWJmaW5fcmVhZDMyKERNQTExX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0NPTkZJRygpCQliZmluX3JlYWQxNihETUExMV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTFfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMV9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMV9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9YX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KERNQTExX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMV9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTExX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTExX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX1lfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoRE1BMTFfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9DVVJSX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKERNQTExX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTFfQ1VSUl9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTFfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTExX0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMTFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX0NVUlJfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUExMV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX0lSUV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoRE1BMTFfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihETUExMV9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUExMV9QRVJJUEhFUkFMX01BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTFfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTExX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTFfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTFfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTExX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExMV9DVVJSX1lfQ09VTlQsIHZhbCkKKworLyogTURNQSBTdHJlYW0gMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9ORVhUX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKE1ETUFfRDBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKE1ETUFfRDBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoTURNQV9EMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoTURNQV9EMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDBfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMF9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDBfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9YX01PRElGWSh2YWwpIAliZmluX3dyaXRlMTYoTURNQV9EMF9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfWV9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX0QwX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMF9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QwX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX1lfTU9ESUZZKHZhbCkgCWJmaW5fd3JpdGUxNihNRE1BX0QwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKE1ETUFfRDBfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX0NVUlJfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKE1ETUFfRDBfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfQ1VSUl9BRERSKCkgCQliZmluX3JlYWQzMihNRE1BX0QwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX0NVUlJfQUREUih2YWwpIAliZmluX3dyaXRlMzIoTURNQV9EMF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoTURNQV9EMF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDBfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihNRE1BX0QwX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoTURNQV9EMF9QRVJJUEhFUkFMX01BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX1hfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX0QwX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMF9DVVJSX1lfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX0QwX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QwX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QwX0NVUlJfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9ORVhUX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKE1ETUFfUzBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKE1ETUFfUzBfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoTURNQV9TMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoTURNQV9TMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoTURNQV9TMF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzBfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9TMF9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMF9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzBfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9YX01PRElGWSh2YWwpIAliZmluX3dyaXRlMTYoTURNQV9TMF9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWV9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX1MwX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMF9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX1MwX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9TMF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX1lfTU9ESUZZKHZhbCkgCWJmaW5fd3JpdGUxNihNRE1BX1MwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKE1ETUFfUzBfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKE1ETUFfUzBfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfQ1VSUl9BRERSKCkgCQliZmluX3JlYWQzMihNRE1BX1MwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfQUREUih2YWwpIAliZmluX3dyaXRlMzIoTURNQV9TMF9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoTURNQV9TMF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MwX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzBfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihNRE1BX1MwX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoTURNQV9TMF9QRVJJUEhFUkFMX01BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX1hfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX1MwX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MwX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMF9DVVJSX1lfQ09VTlQoKQliZmluX3JlYWQxNihNRE1BX1MwX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MwX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MwX0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBNRE1BIFN0cmVhbSAxIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX05FWFRfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoTURNQV9EMV9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfTkVYVF9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoTURNQV9EMV9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9TVEFSVF9BRERSKCkgCQliZmluX3JlYWQzMihNRE1BX0QxX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9TVEFSVF9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihNRE1BX0QxX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NPTkZJRygpCQliZmluX3JlYWQxNihNRE1BX0QxX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9EMV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX0QxX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QxX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9EMV9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1hfTU9ESUZZKHZhbCkgCWJmaW5fd3JpdGUxNihNRE1BX0QxX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDFfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QxX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDFfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX0QxX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfWV9NT0RJRlkodmFsKSAJYmZpbl93cml0ZTE2KE1ETUFfRDFfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NVUlJfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoTURNQV9EMV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfQ1VSUl9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoTURNQV9EMV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9DVVJSX0FERFIoKSAJCWJmaW5fcmVhZDMyKE1ETUFfRDFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfQ1VSUl9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihNRE1BX0QxX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihNRE1BX0QxX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMV9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KE1ETUFfRDFfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX0QxX1BFUklQSEVSQUxfTUFQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NVUlJfWF9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfRDFfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QxX0NVUlJfWV9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfRDFfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDFfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfRDFfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX05FWFRfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoTURNQV9TMV9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfTkVYVF9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoTURNQV9TMV9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9TVEFSVF9BRERSKCkgCQliZmluX3JlYWQzMihNRE1BX1MxX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9TVEFSVF9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihNRE1BX1MxX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NPTkZJRygpCQliZmluX3JlYWQxNihNRE1BX1MxX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfWF9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX1MxX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX1MxX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoTURNQV9TMV9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1hfTU9ESUZZKHZhbCkgCWJmaW5fd3JpdGUxNihNRE1BX1MxX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzFfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MxX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzFfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9ZX01PRElGWSgpCQliZmluX3JlYWQxNihNRE1BX1MxX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfWV9NT0RJRlkodmFsKSAJYmZpbl93cml0ZTE2KE1ETUFfUzFfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoTURNQV9TMV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoTURNQV9TMV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9DVVJSX0FERFIoKSAJCWJmaW5fcmVhZDMyKE1ETUFfUzFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihNRE1BX1MxX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihNRE1BX1MxX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzFfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMV9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KE1ETUFfUzFfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihNRE1BX1MxX1BFUklQSEVSQUxfTUFQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfWF9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzFfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzFfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MxX0NVUlJfWV9DT1VOVCgpCWJmaW5fcmVhZDE2KE1ETUFfUzFfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzFfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KE1ETUFfUzFfQ1VSUl9ZX0NPVU5ULCB2YWwpCisKKy8qIEVQUEkxIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRVBQSTFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkxX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMV9IQ09VTlQoKQkJYmZpbl9yZWFkMTYoRVBQSTFfSENPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkxX0hDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTFfSENPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMV9IREVMQVkoKQkJYmZpbl9yZWFkMTYoRVBQSTFfSERFTEFZKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkxX0hERUxBWSh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTFfSERFTEFZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMV9WQ09VTlQoKQkJYmZpbl9yZWFkMTYoRVBQSTFfVkNPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkxX1ZDT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTFfVkNPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMV9WREVMQVkoKQkJYmZpbl9yZWFkMTYoRVBQSTFfVkRFTEFZKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkxX1ZERUxBWSh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTFfVkRFTEFZLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMV9GUkFNRSgpCQkJYmZpbl9yZWFkMTYoRVBQSTFfRlJBTUUpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTFfRlJBTUUodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkxX0ZSQU1FLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMV9MSU5FKCkJCQliZmluX3JlYWQxNihFUFBJMV9MSU5FKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkxX0xJTkUodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkxX0xJTkUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkxX0NMS0RJVigpCQliZmluX3JlYWQxNihFUFBJMV9DTEtESVYpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTFfQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihFUFBJMV9DTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkxX0NPTlRST0woKQkJYmZpbl9yZWFkMzIoRVBQSTFfQ09OVFJPTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMV9DT05UUk9MKHZhbCkJCWJmaW5fd3JpdGUzMihFUFBJMV9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMV9GUzFXX0hCTCgpCQliZmluX3JlYWQzMihFUFBJMV9GUzFXX0hCTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMV9GUzFXX0hCTCh2YWwpCQliZmluX3dyaXRlMzIoRVBQSTFfRlMxV19IQkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkxX0ZTMVBfQVZQTCgpCQliZmluX3JlYWQzMihFUFBJMV9GUzFQX0FWUEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTFfRlMxUF9BVlBMKHZhbCkJCWJmaW5fd3JpdGUzMihFUFBJMV9GUzFQX0FWUEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkxX0ZTMldfTFZCKCkJCWJmaW5fcmVhZDMyKEVQUEkxX0ZTMldfTFZCKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkxX0ZTMldfTFZCKHZhbCkJCWJmaW5fd3JpdGUzMihFUFBJMV9GUzJXX0xWQiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTFfRlMyUF9MQVZGKCkJCWJmaW5fcmVhZDMyKEVQUEkxX0ZTMlBfTEFWRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMV9GUzJQX0xBVkYodmFsKQkJYmZpbl93cml0ZTMyKEVQUEkxX0ZTMlBfTEFWRiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTFfQ0xJUCgpCQkJYmZpbl9yZWFkMzIoRVBQSTFfQ0xJUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMV9DTElQKHZhbCkJCWJmaW5fd3JpdGUzMihFUFBJMV9DTElQLCB2YWwpCisKKy8qIFBvcnQgSW50ZXJydWJmaW5fcmVhZF8oKXQgMCBSZWdpc3RlcnMgKDMyLWJpdCkgKi8KKworI2RlZmluZSBiZmluX3JlYWRfUElOVDBfTUFTS19TRVQoKQkJYmZpbl9yZWFkMzIoUElOVDBfTUFTS19TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDBfTUFTS19TRVQodmFsKQkJYmZpbl93cml0ZTMyKFBJTlQwX01BU0tfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UMF9NQVNLX0NMRUFSKCkJCWJmaW5fcmVhZDMyKFBJTlQwX01BU0tfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDBfTUFTS19DTEVBUih2YWwpCWJmaW5fd3JpdGUzMihQSU5UMF9NQVNLX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UMF9SRVFVRVNUKCkJCWJmaW5fcmVhZDMyKFBJTlQwX1JFUVVFU1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDBfUkVRVUVTVCh2YWwpCQliZmluX3dyaXRlMzIoUElOVDBfUkVRVUVTVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDBfQVNTSUdOKCkJCWJmaW5fcmVhZDMyKFBJTlQwX0FTU0lHTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMF9BU1NJR04odmFsKQkJYmZpbl93cml0ZTMyKFBJTlQwX0FTU0lHTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDBfRURHRV9TRVQoKQkJYmZpbl9yZWFkMzIoUElOVDBfRURHRV9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDBfRURHRV9TRVQodmFsKQkJYmZpbl93cml0ZTMyKFBJTlQwX0VER0VfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UMF9FREdFX0NMRUFSKCkJCWJmaW5fcmVhZDMyKFBJTlQwX0VER0VfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDBfRURHRV9DTEVBUih2YWwpCWJmaW5fd3JpdGUzMihQSU5UMF9FREdFX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UMF9JTlZFUlRfU0VUKCkJCWJmaW5fcmVhZDMyKFBJTlQwX0lOVkVSVF9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDBfSU5WRVJUX1NFVCh2YWwpCWJmaW5fd3JpdGUzMihQSU5UMF9JTlZFUlRfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UMF9JTlZFUlRfQ0xFQVIoKQkJYmZpbl9yZWFkMzIoUElOVDBfSU5WRVJUX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQwX0lOVkVSVF9DTEVBUih2YWwpCWJmaW5fd3JpdGUzMihQSU5UMF9JTlZFUlRfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQwX1BJTlNUQVRFKCkJCWJmaW5fcmVhZDMyKFBJTlQwX1BJTlNUQVRFKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQwX1BJTlNUQVRFKHZhbCkJCWJmaW5fd3JpdGUzMihQSU5UMF9QSU5TVEFURSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDBfTEFUQ0goKQkJCWJmaW5fcmVhZDMyKFBJTlQwX0xBVENIKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQwX0xBVENIKHZhbCkJCWJmaW5fd3JpdGUzMihQSU5UMF9MQVRDSCwgdmFsKQorCisvKiBQb3J0IEludGVycnViZmluX3JlYWRfKCl0IDEgUmVnaXN0ZXJzICgzMi1iaXQpICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQxX01BU0tfU0VUKCkJCWJmaW5fcmVhZDMyKFBJTlQxX01BU0tfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQxX01BU0tfU0VUKHZhbCkJCWJmaW5fd3JpdGUzMihQSU5UMV9NQVNLX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDFfTUFTS19DTEVBUigpCQliZmluX3JlYWQzMihQSU5UMV9NQVNLX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQxX01BU0tfQ0xFQVIodmFsKQliZmluX3dyaXRlMzIoUElOVDFfTUFTS19DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDFfUkVRVUVTVCgpCQliZmluX3JlYWQzMihQSU5UMV9SRVFVRVNUKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQxX1JFUVVFU1QodmFsKQkJYmZpbl93cml0ZTMyKFBJTlQxX1JFUVVFU1QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQxX0FTU0lHTigpCQliZmluX3JlYWQzMihQSU5UMV9BU1NJR04pCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDFfQVNTSUdOKHZhbCkJCWJmaW5fd3JpdGUzMihQSU5UMV9BU1NJR04sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQxX0VER0VfU0VUKCkJCWJmaW5fcmVhZDMyKFBJTlQxX0VER0VfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQxX0VER0VfU0VUKHZhbCkJCWJmaW5fd3JpdGUzMihQSU5UMV9FREdFX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDFfRURHRV9DTEVBUigpCQliZmluX3JlYWQzMihQSU5UMV9FREdFX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQxX0VER0VfQ0xFQVIodmFsKQliZmluX3dyaXRlMzIoUElOVDFfRURHRV9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDFfSU5WRVJUX1NFVCgpCQliZmluX3JlYWQzMihQSU5UMV9JTlZFUlRfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQxX0lOVkVSVF9TRVQodmFsKQliZmluX3dyaXRlMzIoUElOVDFfSU5WRVJUX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDFfSU5WRVJUX0NMRUFSKCkJCWJmaW5fcmVhZDMyKFBJTlQxX0lOVkVSVF9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMV9JTlZFUlRfQ0xFQVIodmFsKQliZmluX3dyaXRlMzIoUElOVDFfSU5WRVJUX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UMV9QSU5TVEFURSgpCQliZmluX3JlYWQzMihQSU5UMV9QSU5TVEFURSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMV9QSU5TVEFURSh2YWwpCQliZmluX3dyaXRlMzIoUElOVDFfUElOU1RBVEUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQxX0xBVENIKCkJCQliZmluX3JlYWQzMihQSU5UMV9MQVRDSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMV9MQVRDSCh2YWwpCQliZmluX3dyaXRlMzIoUElOVDFfTEFUQ0gsIHZhbCkKKworLyogUG9ydCBJbnRlcnJ1YmZpbl9yZWFkXygpdCAyIFJlZ2lzdGVycyAoMzItYml0KSAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UMl9NQVNLX1NFVCgpCQliZmluX3JlYWQzMihQSU5UMl9NQVNLX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMl9NQVNLX1NFVCh2YWwpCQliZmluX3dyaXRlMzIoUElOVDJfTUFTS19TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQyX01BU0tfQ0xFQVIoKQkJYmZpbl9yZWFkMzIoUElOVDJfTUFTS19DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMl9NQVNLX0NMRUFSKHZhbCkJYmZpbl93cml0ZTMyKFBJTlQyX01BU0tfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQyX1JFUVVFU1QoKQkJYmZpbl9yZWFkMzIoUElOVDJfUkVRVUVTVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMl9SRVFVRVNUKHZhbCkJCWJmaW5fd3JpdGUzMihQSU5UMl9SRVFVRVNULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UMl9BU1NJR04oKQkJYmZpbl9yZWFkMzIoUElOVDJfQVNTSUdOKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQyX0FTU0lHTih2YWwpCQliZmluX3dyaXRlMzIoUElOVDJfQVNTSUdOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UMl9FREdFX1NFVCgpCQliZmluX3JlYWQzMihQSU5UMl9FREdFX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMl9FREdFX1NFVCh2YWwpCQliZmluX3dyaXRlMzIoUElOVDJfRURHRV9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQyX0VER0VfQ0xFQVIoKQkJYmZpbl9yZWFkMzIoUElOVDJfRURHRV9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMl9FREdFX0NMRUFSKHZhbCkJYmZpbl93cml0ZTMyKFBJTlQyX0VER0VfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQyX0lOVkVSVF9TRVQoKQkJYmZpbl9yZWFkMzIoUElOVDJfSU5WRVJUX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMl9JTlZFUlRfU0VUKHZhbCkJYmZpbl93cml0ZTMyKFBJTlQyX0lOVkVSVF9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQyX0lOVkVSVF9DTEVBUigpCQliZmluX3JlYWQzMihQSU5UMl9JTlZFUlRfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDJfSU5WRVJUX0NMRUFSKHZhbCkJYmZpbl93cml0ZTMyKFBJTlQyX0lOVkVSVF9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDJfUElOU1RBVEUoKQkJYmZpbl9yZWFkMzIoUElOVDJfUElOU1RBVEUpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDJfUElOU1RBVEUodmFsKQkJYmZpbl93cml0ZTMyKFBJTlQyX1BJTlNUQVRFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UMl9MQVRDSCgpCQkJYmZpbl9yZWFkMzIoUElOVDJfTEFUQ0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDJfTEFUQ0godmFsKQkJYmZpbl93cml0ZTMyKFBJTlQyX0xBVENILCB2YWwpCisKKy8qIFBvcnQgSW50ZXJydWJmaW5fcmVhZF8oKXQgMyBSZWdpc3RlcnMgKDMyLWJpdCkgKi8KKworI2RlZmluZSBiZmluX3JlYWRfUElOVDNfTUFTS19TRVQoKQkJYmZpbl9yZWFkMzIoUElOVDNfTUFTS19TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDNfTUFTS19TRVQodmFsKQkJYmZpbl93cml0ZTMyKFBJTlQzX01BU0tfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UM19NQVNLX0NMRUFSKCkJCWJmaW5fcmVhZDMyKFBJTlQzX01BU0tfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDNfTUFTS19DTEVBUih2YWwpCWJmaW5fd3JpdGUzMihQSU5UM19NQVNLX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UM19SRVFVRVNUKCkJCWJmaW5fcmVhZDMyKFBJTlQzX1JFUVVFU1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDNfUkVRVUVTVCh2YWwpCQliZmluX3dyaXRlMzIoUElOVDNfUkVRVUVTVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDNfQVNTSUdOKCkJCWJmaW5fcmVhZDMyKFBJTlQzX0FTU0lHTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UM19BU1NJR04odmFsKQkJYmZpbl93cml0ZTMyKFBJTlQzX0FTU0lHTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDNfRURHRV9TRVQoKQkJYmZpbl9yZWFkMzIoUElOVDNfRURHRV9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDNfRURHRV9TRVQodmFsKQkJYmZpbl93cml0ZTMyKFBJTlQzX0VER0VfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UM19FREdFX0NMRUFSKCkJCWJmaW5fcmVhZDMyKFBJTlQzX0VER0VfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDNfRURHRV9DTEVBUih2YWwpCWJmaW5fd3JpdGUzMihQSU5UM19FREdFX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UM19JTlZFUlRfU0VUKCkJCWJmaW5fcmVhZDMyKFBJTlQzX0lOVkVSVF9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDNfSU5WRVJUX1NFVCh2YWwpCWJmaW5fd3JpdGUzMihQSU5UM19JTlZFUlRfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UM19JTlZFUlRfQ0xFQVIoKQkJYmZpbl9yZWFkMzIoUElOVDNfSU5WRVJUX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQzX0lOVkVSVF9DTEVBUih2YWwpCWJmaW5fd3JpdGUzMihQSU5UM19JTlZFUlRfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQzX1BJTlNUQVRFKCkJCWJmaW5fcmVhZDMyKFBJTlQzX1BJTlNUQVRFKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQzX1BJTlNUQVRFKHZhbCkJCWJmaW5fd3JpdGUzMihQSU5UM19QSU5TVEFURSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUElOVDNfTEFUQ0goKQkJCWJmaW5fcmVhZDMyKFBJTlQzX0xBVENIKQorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQzX0xBVENIKHZhbCkJCWJmaW5fd3JpdGUzMihQSU5UM19MQVRDSCwgdmFsKQorCisvKiBQb3J0IEEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRBX0ZFUigpCQliZmluX3JlYWQxNihQT1JUQV9GRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEFfRkVSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRBX0ZFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEEoKQkJYmZpbl9yZWFkMTYoUE9SVEEpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEEodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRBLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUQV9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEFfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRBX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JUQV9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRBX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRBX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRBX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRBX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUQV9ESVJfU0VUKCkJYmZpbl9yZWFkMTYoUE9SVEFfRElSX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUQV9ESVJfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRBX0RJUl9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRBX0RJUl9DTEVBUigpCWJmaW5fcmVhZDE2KFBPUlRBX0RJUl9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUQV9ESVJfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEFfRElSX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUQV9JTkVOKCkJCWJmaW5fcmVhZDE2KFBPUlRBX0lORU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEFfSU5FTih2YWwpCWJmaW5fd3JpdGUxNihQT1JUQV9JTkVOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUQV9NVVgoKQkJYmZpbl9yZWFkMzIoUE9SVEFfTVVYKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRBX01VWCh2YWwpCWJmaW5fd3JpdGUzMihQT1JUQV9NVVgsIHZhbCkKKworLyogUG9ydCBCIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUQl9GRVIoKQkJYmZpbl9yZWFkMTYoUE9SVEJfRkVSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRCX0ZFUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUQl9GRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRCKCkJCWJmaW5fcmVhZDE2KFBPUlRCKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRCKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUQiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEJfU0VUKCkJCWJmaW5fcmVhZDE2KFBPUlRCX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUQl9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEJfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUQl9DTEVBUigpCQliZmluX3JlYWQxNihQT1JUQl9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUQl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUQl9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEJfRElSX1NFVCgpCWJmaW5fcmVhZDE2KFBPUlRCX0RJUl9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEJfRElSX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JUQl9ESVJfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUQl9ESVJfQ0xFQVIoKQliZmluX3JlYWQxNihQT1JUQl9ESVJfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEJfRElSX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRCX0RJUl9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEJfSU5FTigpCQliZmluX3JlYWQxNihQT1JUQl9JTkVOKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRCX0lORU4odmFsKQliZmluX3dyaXRlMTYoUE9SVEJfSU5FTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEJfTVVYKCkJCWJmaW5fcmVhZDMyKFBPUlRCX01VWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUQl9NVVgodmFsKQliZmluX3dyaXRlMzIoUE9SVEJfTVVYLCB2YWwpCisKKy8qIFBvcnQgQyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfUE9SVENfRkVSKCkJCWJmaW5fcmVhZDE2KFBPUlRDX0ZFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUQ19GRVIodmFsKQliZmluX3dyaXRlMTYoUE9SVENfRkVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUQygpCQliZmluX3JlYWQxNihQT1JUQykKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUQyh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRDX1NFVCgpCQliZmluX3JlYWQxNihQT1JUQ19TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVENfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRDX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVENfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVENfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVENfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVENfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRDX0RJUl9TRVQoKQliZmluX3JlYWQxNihQT1JUQ19ESVJfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRDX0RJUl9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVENfRElSX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVENfRElSX0NMRUFSKCkJYmZpbl9yZWFkMTYoUE9SVENfRElSX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRDX0RJUl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUQ19ESVJfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRDX0lORU4oKQkJYmZpbl9yZWFkMTYoUE9SVENfSU5FTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUQ19JTkVOKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRDX0lORU4sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRDX01VWCgpCQliZmluX3JlYWQzMihQT1JUQ19NVVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVENfTVVYKHZhbCkJYmZpbl93cml0ZTMyKFBPUlRDX01VWCwgdmFsKQorCisvKiBQb3J0IEQgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlREX0ZFUigpCQliZmluX3JlYWQxNihQT1JURF9GRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVERfRkVSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlREX0ZFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEQoKQkJYmZpbl9yZWFkMTYoUE9SVEQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEQodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURF9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVERfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlREX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JURF9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlREX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlREX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlREX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlREX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURF9ESVJfU0VUKCkJYmZpbl9yZWFkMTYoUE9SVERfRElSX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURF9ESVJfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlREX0RJUl9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlREX0RJUl9DTEVBUigpCWJmaW5fcmVhZDE2KFBPUlREX0RJUl9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURF9ESVJfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVERfRElSX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURF9JTkVOKCkJCWJmaW5fcmVhZDE2KFBPUlREX0lORU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVERfSU5FTih2YWwpCWJmaW5fd3JpdGUxNihQT1JURF9JTkVOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURF9NVVgoKQkJYmZpbl9yZWFkMzIoUE9SVERfTVVYKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlREX01VWCh2YWwpCWJmaW5fd3JpdGUzMihQT1JURF9NVVgsIHZhbCkKKworLyogUG9ydCBFIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURV9GRVIoKQkJYmZpbl9yZWFkMTYoUE9SVEVfRkVSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRFX0ZFUih2YWwpCWJmaW5fd3JpdGUxNihQT1JURV9GRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRFKCkJCWJmaW5fcmVhZDE2KFBPUlRFKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRFKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JURSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEVfU0VUKCkJCWJmaW5fcmVhZDE2KFBPUlRFX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURV9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEVfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURV9DTEVBUigpCQliZmluX3JlYWQxNihQT1JURV9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURV9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JURV9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEVfRElSX1NFVCgpCWJmaW5fcmVhZDE2KFBPUlRFX0RJUl9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEVfRElSX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JURV9ESVJfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURV9ESVJfQ0xFQVIoKQliZmluX3JlYWQxNihQT1JURV9ESVJfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEVfRElSX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRFX0RJUl9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEVfSU5FTigpCQliZmluX3JlYWQxNihQT1JURV9JTkVOKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRFX0lORU4odmFsKQliZmluX3dyaXRlMTYoUE9SVEVfSU5FTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEVfTVVYKCkJCWJmaW5fcmVhZDMyKFBPUlRFX01VWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURV9NVVgodmFsKQliZmluX3dyaXRlMzIoUE9SVEVfTVVYLCB2YWwpCisKKy8qIFBvcnQgRiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfUE9SVEZfRkVSKCkJCWJmaW5fcmVhZDE2KFBPUlRGX0ZFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9GRVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEZfRkVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JURigpCQliZmluX3JlYWQxNihQT1JURikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURih2YWwpCQliZmluX3dyaXRlMTYoUE9SVEYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX1NFVCgpCQliZmluX3JlYWQxNihQT1JURl9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRGX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVEZfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEZfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX0RJUl9TRVQoKQliZmluX3JlYWQxNihQT1JURl9ESVJfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGX0RJUl9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEZfRElSX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEZfRElSX0NMRUFSKCkJYmZpbl9yZWFkMTYoUE9SVEZfRElSX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRGX0RJUl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JURl9ESVJfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX0lORU4oKQkJYmZpbl9yZWFkMTYoUE9SVEZfSU5FTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JURl9JTkVOKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRGX0lORU4sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRGX01VWCgpCQliZmluX3JlYWQzMihQT1JURl9NVVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEZfTVVYKHZhbCkJYmZpbl93cml0ZTMyKFBPUlRGX01VWCwgdmFsKQorCisvKiBQb3J0IEcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX0ZFUigpCQliZmluX3JlYWQxNihQT1JUR19GRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdfRkVSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHX0ZFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEcoKQkJYmZpbl9yZWFkMTYoUE9SVEcpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEcodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR19TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEdfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JUR19TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRHX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR19ESVJfU0VUKCkJYmZpbl9yZWFkMTYoUE9SVEdfRElSX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19ESVJfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRHX0RJUl9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRHX0RJUl9DTEVBUigpCWJmaW5fcmVhZDE2KFBPUlRHX0RJUl9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUR19ESVJfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEdfRElSX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR19JTkVOKCkJCWJmaW5fcmVhZDE2KFBPUlRHX0lORU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEdfSU5FTih2YWwpCWJmaW5fd3JpdGUxNihQT1JUR19JTkVOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUR19NVVgoKQkJYmZpbl9yZWFkMzIoUE9SVEdfTVVYKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRHX01VWCh2YWwpCWJmaW5fd3JpdGUzMihQT1JUR19NVVgsIHZhbCkKKworLyogUG9ydCBIIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSF9GRVIoKQkJYmZpbl9yZWFkMTYoUE9SVEhfRkVSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIX0ZFUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUSF9GRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRIKCkJCWJmaW5fcmVhZDE2KFBPUlRIKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIKHZhbCkJCWJmaW5fd3JpdGUxNihQT1JUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhfU0VUKCkJCWJmaW5fcmVhZDE2KFBPUlRIX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVEhfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSF9DTEVBUigpCQliZmluX3JlYWQxNihQT1JUSF9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUSF9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhfRElSX1NFVCgpCWJmaW5fcmVhZDE2KFBPUlRIX0RJUl9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhfRElSX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JUSF9ESVJfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSF9ESVJfQ0xFQVIoKQliZmluX3JlYWQxNihQT1JUSF9ESVJfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEhfRElSX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRIX0RJUl9DTEVBUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhfSU5FTigpCQliZmluX3JlYWQxNihQT1JUSF9JTkVOKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRIX0lORU4odmFsKQliZmluX3dyaXRlMTYoUE9SVEhfSU5FTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEhfTVVYKCkJCWJmaW5fcmVhZDMyKFBPUlRIX01VWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSF9NVVgodmFsKQliZmluX3dyaXRlMzIoUE9SVEhfTVVYLCB2YWwpCisKKy8qIFBvcnQgSSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfUE9SVElfRkVSKCkJCWJmaW5fcmVhZDE2KFBPUlRJX0ZFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSV9GRVIodmFsKQliZmluX3dyaXRlMTYoUE9SVElfRkVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSSgpCQliZmluX3JlYWQxNihQT1JUSSkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSSh2YWwpCQliZmluX3dyaXRlMTYoUE9SVEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRJX1NFVCgpCQliZmluX3JlYWQxNihQT1JUSV9TRVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVElfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRJX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVElfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoUE9SVElfQ0xFQVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVElfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVElfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRJX0RJUl9TRVQoKQliZmluX3JlYWQxNihQT1JUSV9ESVJfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRJX0RJUl9TRVQodmFsKQliZmluX3dyaXRlMTYoUE9SVElfRElSX1NFVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVElfRElSX0NMRUFSKCkJYmZpbl9yZWFkMTYoUE9SVElfRElSX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRJX0RJUl9DTEVBUih2YWwpCWJmaW5fd3JpdGUxNihQT1JUSV9ESVJfQ0xFQVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRJX0lORU4oKQkJYmZpbl9yZWFkMTYoUE9SVElfSU5FTikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSV9JTkVOKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRJX0lORU4sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRJX01VWCgpCQliZmluX3JlYWQzMihQT1JUSV9NVVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVElfTVVYKHZhbCkJYmZpbl93cml0ZTMyKFBPUlRJX01VWCwgdmFsKQorCisvKiBQb3J0IEogUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRKX0ZFUigpCQliZmluX3JlYWQxNihQT1JUSl9GRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEpfRkVSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRKX0ZFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfUE9SVEooKQkJYmZpbl9yZWFkMTYoUE9SVEopCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEoodmFsKQkJYmZpbl93cml0ZTE2KFBPUlRKLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSl9TRVQoKQkJYmZpbl9yZWFkMTYoUE9SVEpfU0VUKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRKX1NFVCh2YWwpCWJmaW5fd3JpdGUxNihQT1JUSl9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRKX0NMRUFSKCkJCWJmaW5fcmVhZDE2KFBPUlRKX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRKX0NMRUFSKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRKX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSl9ESVJfU0VUKCkJYmZpbl9yZWFkMTYoUE9SVEpfRElSX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSl9ESVJfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFBPUlRKX0RJUl9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1BPUlRKX0RJUl9DTEVBUigpCWJmaW5fcmVhZDE2KFBPUlRKX0RJUl9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9QT1JUSl9ESVJfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoUE9SVEpfRElSX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSl9JTkVOKCkJCWJmaW5fcmVhZDE2KFBPUlRKX0lORU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfUE9SVEpfSU5FTih2YWwpCWJmaW5fd3JpdGUxNihQT1JUSl9JTkVOLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9QT1JUSl9NVVgoKQkJYmZpbl9yZWFkMzIoUE9SVEpfTVVYKQorI2RlZmluZSBiZmluX3dyaXRlX1BPUlRKX01VWCh2YWwpCWJmaW5fd3JpdGUzMihQT1JUSl9NVVgsIHZhbCkKKworLyogUFdNIFRpbWVyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSMF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIwX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIwX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIwX0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMF9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjBfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSMF9QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIwX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIwX1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIwX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSMF9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjBfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMF9XSURUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIxX0NPTkZJRygpCQliZmluX3JlYWQxNihUSU1FUjFfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMV9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KFRJTUVSMV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMV9DT1VOVEVSKCkJCWJmaW5fcmVhZDMyKFRJTUVSMV9DT1VOVEVSKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMV9DT1VOVEVSKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjFfQ09VTlRFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIxX1BFUklPRCgpCQliZmluX3JlYWQzMihUSU1FUjFfUEVSSU9EKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMV9QRVJJT0QodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSMV9QRVJJT0QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMV9XSURUSCgpCQliZmluX3JlYWQzMihUSU1FUjFfV0lEVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIxX1dJRFRIKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjFfV0lEVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMl9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVIyX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjJfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjJfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVIyX0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSMl9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVIyX1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjJfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjJfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjJfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVIyX1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSMl9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIyX1dJRFRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSM19DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVIzX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIzX0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVIzX0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSM19DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjNfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSM19QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVIzX1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVIzX1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVIzX1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSM19XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjNfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSM19XSURUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI0X0NPTkZJRygpCQliZmluX3JlYWQxNihUSU1FUjRfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSNF9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KFRJTUVSNF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNF9DT1VOVEVSKCkJCWJmaW5fcmVhZDMyKFRJTUVSNF9DT1VOVEVSKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSNF9DT1VOVEVSKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjRfQ09VTlRFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI0X1BFUklPRCgpCQliZmluX3JlYWQzMihUSU1FUjRfUEVSSU9EKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSNF9QRVJJT0QodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNF9QRVJJT0QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNF9XSURUSCgpCQliZmluX3JlYWQzMihUSU1FUjRfV0lEVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI0X1dJRFRIKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjRfV0lEVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNV9DT05GSUcoKQkJYmZpbl9yZWFkMTYoVElNRVI1X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUjVfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfQ09VTlRFUigpCQliZmluX3JlYWQzMihUSU1FUjVfQ09VTlRFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfQ09VTlRFUih2YWwpCQliZmluX3dyaXRlMzIoVElNRVI1X0NPVU5URVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSNV9QRVJJT0QoKQkJYmZpbl9yZWFkMzIoVElNRVI1X1BFUklPRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjVfUEVSSU9EKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjVfUEVSSU9ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjVfV0lEVEgoKQkJYmZpbl9yZWFkMzIoVElNRVI1X1dJRFRIKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSNV9XSURUSCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI1X1dJRFRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfQ09ORklHKCkJCWJmaW5fcmVhZDE2KFRJTUVSNl9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoVElNRVI2X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI2X0NPVU5URVIoKQkJYmZpbl9yZWFkMzIoVElNRVI2X0NPVU5URVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X0NPVU5URVIodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNl9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUjZfUEVSSU9EKCkJCWJmaW5fcmVhZDMyKFRJTUVSNl9QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI2X1BFUklPRCh2YWwpCQliZmluX3dyaXRlMzIoVElNRVI2X1BFUklPRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI2X1dJRFRIKCkJCWJmaW5fcmVhZDMyKFRJTUVSNl9XSURUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUjZfV0lEVEgodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSNl9XSURUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI3X0NPTkZJRygpCQliZmluX3JlYWQxNihUSU1FUjdfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSN19DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KFRJTUVSN19DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSN19DT1VOVEVSKCkJCWJmaW5fcmVhZDMyKFRJTUVSN19DT1VOVEVSKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSN19DT1VOVEVSKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjdfQ09VTlRFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVElNRVI3X1BFUklPRCgpCQliZmluX3JlYWQzMihUSU1FUjdfUEVSSU9EKQorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSN19QRVJJT0QodmFsKQkJYmZpbl93cml0ZTMyKFRJTUVSN19QRVJJT0QsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSN19XSURUSCgpCQliZmluX3JlYWQzMihUSU1FUjdfV0lEVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVI3X1dJRFRIKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUjdfV0lEVEgsIHZhbCkKKworLyogVGltZXIgR3JvdWJmaW5fcmVhZF8oKSBvZiA4ICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX0VOQUJMRTAoKQkJYmZpbl9yZWFkMTYoVElNRVJfRU5BQkxFMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9FTkFCTEUwKHZhbCkJCWJmaW5fd3JpdGUxNihUSU1FUl9FTkFCTEUwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9ESVNBQkxFMCgpCQliZmluX3JlYWQxNihUSU1FUl9ESVNBQkxFMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9ESVNBQkxFMCh2YWwpCQliZmluX3dyaXRlMTYoVElNRVJfRElTQUJMRTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX1NUQVRVUzAoKQkJYmZpbl9yZWFkMzIoVElNRVJfU1RBVFVTMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9TVEFUVVMwKHZhbCkJCWJmaW5fd3JpdGUzMihUSU1FUl9TVEFUVVMwLCB2YWwpCisKKy8qIERNQUMxIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFDMV9UQ1BFUigpCQkJYmZpbl9yZWFkMTYoRE1BQzFfVENQRVIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzFfVENQRVIodmFsKQkJYmZpbl93cml0ZTE2KERNQUMxX1RDUEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFDMV9UQ0NOVCgpCQkJYmZpbl9yZWFkMTYoRE1BQzFfVENDTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzFfVENDTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQUMxX1RDQ05ULCB2YWwpCisKKy8qIERNQSBDaGFubmVsIDEyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMl9ORVhUX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKERNQTEyX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTJfTkVYVF9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTJfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEyX1NUQVJUX0FERFIoKSAJCWJmaW5fcmVhZDMyKERNQTEyX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTJfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTJfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEyX0NPTkZJRygpCQliZmluX3JlYWQxNihETUExMl9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTJfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMl9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEyX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMl9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExMl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMl9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExMl9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMl9YX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KERNQTEyX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUExMl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEyX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTEyX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEyX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTEyX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEyX1lfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoRE1BMTJfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMl9DVVJSX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKERNQTEyX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTJfQ1VSUl9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTJfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEyX0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMTJfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEyX0NVUlJfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTJfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTJfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUExMl9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEyX0lSUV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoRE1BMTJfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTJfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihETUExMl9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMl9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUExMl9QRVJJUEhFUkFMX01BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTJfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTEyX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExMl9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTJfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExMl9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTJfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEyX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExMl9DVVJSX1lfQ09VTlQsIHZhbCkKKworLyogRE1BIENoYW5uZWwgMTMgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEzX05FWFRfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoRE1BMTNfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExM19ORVhUX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExM19ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTNfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMTNfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExM19TVEFSVF9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExM19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTNfQ09ORklHKCkJCWJmaW5fcmVhZDE2KERNQTEzX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExM19DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KERNQTEzX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTNfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExM19YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEzX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTEzX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEzX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTEzX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEzX1hfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoRE1BMTNfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExM19ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTEzX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTNfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTNfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTNfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMTNfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTNfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUExM19ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEzX0NVUlJfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoRE1BMTNfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExM19DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExM19DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTNfQ1VSUl9BRERSKCkgCQliZmluX3JlYWQzMihETUExM19DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTNfQ1VSUl9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExM19DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExM19JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KERNQTEzX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTNfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihETUExM19JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExM19QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KERNQTEzX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEzX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTEzX1BFUklQSEVSQUxfTUFQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExM19DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTNfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTEzX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExM19DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTEzX0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUExM19DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTNfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTEzX0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCAxNCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfRE1BMTRfTkVYVF9ERVNDX1BUUigpIAliZmluX3JlYWQzMihETUExNF9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE0X05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTE0X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNF9TVEFSVF9BRERSKCkgCQliZmluX3JlYWQzMihETUExNF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE0X1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTE0X1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoRE1BMTRfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE0X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTRfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTE0X1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTRfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTRfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTRfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMTRfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTRfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUExNF9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE0X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTRfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNF9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExNF9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUExNF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNF9ZX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KERNQTE0X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTRfQ1VSUl9ERVNDX1BUUigpIAliZmluX3JlYWQzMihETUExNF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE0X0NVUlJfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTE0X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNF9DVVJSX0FERFIoKSAJCWJmaW5fcmVhZDMyKERNQTE0X0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNF9DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTE0X0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE0X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMTRfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNF9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KERNQTE0X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE0X1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoRE1BMTRfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTRfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoRE1BMTRfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE0X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExNF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTRfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTE0X0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTRfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTE0X0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTRfQ1VSUl9ZX0NPVU5ULCB2YWwpCisKKy8qIERNQSBDaGFubmVsIDE1IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNV9ORVhUX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKERNQTE1X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTVfTkVYVF9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTVfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE1X1NUQVJUX0FERFIoKSAJCWJmaW5fcmVhZDMyKERNQTE1X1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTVfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTVfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE1X0NPTkZJRygpCQliZmluX3JlYWQxNihETUExNV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTVfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExNV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE1X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTVfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNV9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExNV9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExNV9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNV9YX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KERNQTE1X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTVfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUExNV9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE1X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTE1X1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE1X1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTE1X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE1X1lfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoRE1BMTVfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNV9DVVJSX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKERNQTE1X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTVfQ1VSUl9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTVfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE1X0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMTVfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE1X0NVUlJfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMTVfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTVfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUExNV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE1X0lSUV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoRE1BMTVfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTVfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihETUExNV9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUExNV9QRVJJUEhFUkFMX01BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTVfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTE1X0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTVfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTVfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE1X0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExNV9DVVJSX1lfQ09VTlQsIHZhbCkKKworLyogRE1BIENoYW5uZWwgMTYgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE2X05FWFRfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoRE1BMTZfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNl9ORVhUX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExNl9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTZfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMTZfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNl9TVEFSVF9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExNl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTZfQ09ORklHKCkJCWJmaW5fcmVhZDE2KERNQTE2X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNl9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KERNQTE2X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTZfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExNl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE2X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTE2X1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE2X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTE2X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE2X1hfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoRE1BMTZfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTE2X1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTZfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTZfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTZfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMTZfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTZfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUExNl9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE2X0NVUlJfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoRE1BMTZfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExNl9DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExNl9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTZfQ1VSUl9BRERSKCkgCQliZmluX3JlYWQzMihETUExNl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTZfQ1VSUl9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExNl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNl9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KERNQTE2X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTZfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihETUExNl9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNl9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KERNQTE2X1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE2X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTE2X1BFUklQSEVSQUxfTUFQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExNl9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTZfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE2X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExNl9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE2X0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUExNl9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTZfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTE2X0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCAxNyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfRE1BMTdfTkVYVF9ERVNDX1BUUigpIAliZmluX3JlYWQzMihETUExN19ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE3X05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTE3X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExN19TVEFSVF9BRERSKCkgCQliZmluX3JlYWQzMihETUExN19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE3X1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTE3X1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExN19DT05GSUcoKQkJYmZpbl9yZWFkMTYoRE1BMTdfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE3X0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTdfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExN19YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTE3X1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTdfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTdfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTdfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMTdfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTdfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUExN19YX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE3X1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTdfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExN19ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExN19ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExN19ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUExN19ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExN19ZX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KERNQTE3X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTdfQ1VSUl9ERVNDX1BUUigpIAliZmluX3JlYWQzMihETUExN19DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE3X0NVUlJfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTE3X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExN19DVVJSX0FERFIoKSAJCWJmaW5fcmVhZDMyKERNQTE3X0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExN19DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTE3X0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE3X0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMTdfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExN19JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KERNQTE3X0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE3X1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoRE1BMTdfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTdfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoRE1BMTdfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE3X0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExN19DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTdfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTE3X0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTdfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTE3X0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExN19DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMTdfQ1VSUl9ZX0NPVU5ULCB2YWwpCisKKy8qIERNQSBDaGFubmVsIDE4IFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExOF9ORVhUX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKERNQTE4X05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMThfTkVYVF9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMThfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE4X1NUQVJUX0FERFIoKSAJCWJmaW5fcmVhZDMyKERNQTE4X1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMThfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMThfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE4X0NPTkZJRygpCQliZmluX3JlYWQxNihETUExOF9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMThfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUExOF9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE4X1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMThfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExOF9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUExOF9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExOF9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUExOF9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExOF9YX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KERNQTE4X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMThfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUExOF9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE4X1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTE4X1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE4X1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTE4X1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE4X1lfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoRE1BMThfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExOF9DVVJSX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKERNQTE4X0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMThfQ1VSUl9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMThfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE4X0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMThfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE4X0NVUlJfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMThfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMThfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUExOF9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE4X0lSUV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoRE1BMThfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMThfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihETUExOF9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExOF9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUExOF9QRVJJUEhFUkFMX01BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMThfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTE4X0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExOF9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMThfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExOF9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMThfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE4X0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExOF9DVVJSX1lfQ09VTlQsIHZhbCkKKworLyogRE1BIENoYW5uZWwgMTkgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE5X05FWFRfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoRE1BMTlfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExOV9ORVhUX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExOV9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTlfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMTlfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExOV9TVEFSVF9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExOV9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTlfQ09ORklHKCkJCWJmaW5fcmVhZDE2KERNQTE5X0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExOV9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KERNQTE5X0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTlfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUExOV9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE5X1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTE5X1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE5X1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTE5X1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE5X1hfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoRE1BMTlfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExOV9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTE5X1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTlfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMTlfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTlfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMTlfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTlfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUExOV9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE5X0NVUlJfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoRE1BMTlfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUExOV9DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExOV9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMTlfQ1VSUl9BRERSKCkgCQliZmluX3JlYWQzMihETUExOV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTlfQ1VSUl9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihETUExOV9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExOV9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KERNQTE5X0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTlfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihETUExOV9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExOV9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KERNQTE5X1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE5X1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTE5X1BFUklQSEVSQUxfTUFQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUExOV9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMTlfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTE5X0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUExOV9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTE5X0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUExOV9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMTlfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTE5X0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCAyMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfRE1BMjBfTkVYVF9ERVNDX1BUUigpIAliZmluX3JlYWQzMihETUEyMF9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIwX05FWFRfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTIwX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMF9TVEFSVF9BRERSKCkgCQliZmluX3JlYWQzMihETUEyMF9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIwX1NUQVJUX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTIwX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMF9DT05GSUcoKQkJYmZpbl9yZWFkMTYoRE1BMjBfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIwX0NPTkZJRyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMjBfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMF9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTIwX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjBfWF9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMjBfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjBfWF9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMjBfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjBfWF9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUEyMF9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIwX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMjBfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMF9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyMF9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMF9ZX01PRElGWSgpCQliZmluX3JlYWQxNihETUEyMF9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMF9ZX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KERNQTIwX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjBfQ1VSUl9ERVNDX1BUUigpIAliZmluX3JlYWQzMihETUEyMF9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIwX0NVUlJfREVTQ19QVFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTIwX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMF9DVVJSX0FERFIoKSAJCWJmaW5fcmVhZDMyKERNQTIwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMF9DVVJSX0FERFIodmFsKSAJYmZpbl93cml0ZTMyKERNQTIwX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIwX0lSUV9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoRE1BMjBfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMF9JUlFfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KERNQTIwX0lSUV9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIwX1BFUklQSEVSQUxfTUFQKCkJYmZpbl9yZWFkMTYoRE1BMjBfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjBfUEVSSVBIRVJBTF9NQVAodmFsKQliZmluX3dyaXRlMTYoRE1BMjBfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIwX0NVUlJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUEyMF9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjBfQ1VSUl9YX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTIwX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjBfQ1VSUl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTIwX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMF9DVVJSX1lfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMjBfQ1VSUl9ZX0NPVU5ULCB2YWwpCisKKy8qIERNQSBDaGFubmVsIDIxIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMV9ORVhUX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKERNQTIxX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjFfTkVYVF9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMjFfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIxX1NUQVJUX0FERFIoKSAJCWJmaW5fcmVhZDMyKERNQTIxX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjFfU1RBUlRfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMjFfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIxX0NPTkZJRygpCQliZmluX3JlYWQxNihETUEyMV9DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjFfQ09ORklHKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyMV9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIxX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMjFfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMV9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyMV9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMV9YX01PRElGWSgpCQliZmluX3JlYWQxNihETUEyMV9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMV9YX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KERNQTIxX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjFfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUEyMV9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIxX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTIxX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIxX1lfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTIxX1lfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIxX1lfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoRE1BMjFfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMV9DVVJSX0RFU0NfUFRSKCkgCWJmaW5fcmVhZDMyKERNQTIxX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjFfQ1VSUl9ERVNDX1BUUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMjFfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIxX0NVUlJfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMjFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIxX0NVUlJfQUREUih2YWwpIAliZmluX3dyaXRlMzIoRE1BMjFfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjFfSVJRX1NUQVRVUygpCQliZmluX3JlYWQxNihETUEyMV9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIxX0lSUV9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoRE1BMjFfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjFfUEVSSVBIRVJBTF9NQVAoKQliZmluX3JlYWQxNihETUEyMV9QRVJJUEhFUkFMX01BUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMV9QRVJJUEhFUkFMX01BUCh2YWwpCWJmaW5fd3JpdGUxNihETUEyMV9QRVJJUEhFUkFMX01BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjFfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTIxX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMV9DVVJSX1hfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoRE1BMjFfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMV9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMjFfQ1VSUl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIxX0NVUlJfWV9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEyMV9DVVJSX1lfQ09VTlQsIHZhbCkKKworLyogRE1BIENoYW5uZWwgMjIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIyX05FWFRfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoRE1BMjJfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMl9ORVhUX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUEyMl9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjJfU1RBUlRfQUREUigpIAkJYmZpbl9yZWFkMzIoRE1BMjJfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMl9TVEFSVF9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihETUEyMl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjJfQ09ORklHKCkJCWJmaW5fcmVhZDE2KERNQTIyX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMl9DT05GSUcodmFsKQkJYmZpbl93cml0ZTE2KERNQTIyX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjJfWF9DT1VOVCgpCQliZmluX3JlYWQxNihETUEyMl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIyX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTIyX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIyX1hfTU9ESUZZKCkJCWJmaW5fcmVhZDE2KERNQTIyX1hfTU9ESUZZKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIyX1hfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoRE1BMjJfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMl9ZX0NPVU5UKCkJCWJmaW5fcmVhZDE2KERNQTIyX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjJfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoRE1BMjJfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjJfWV9NT0RJRlkoKQkJYmZpbl9yZWFkMTYoRE1BMjJfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjJfWV9NT0RJRlkodmFsKSAJCWJmaW5fd3JpdGUxNihETUEyMl9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIyX0NVUlJfREVTQ19QVFIoKSAJYmZpbl9yZWFkMzIoRE1BMjJfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyMl9DVVJSX0RFU0NfUFRSKHZhbCkgCWJmaW5fd3JpdGUzMihETUEyMl9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjJfQ1VSUl9BRERSKCkgCQliZmluX3JlYWQzMihETUEyMl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjJfQ1VSUl9BRERSKHZhbCkgCWJmaW5fd3JpdGUzMihETUEyMl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMl9JUlFfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KERNQTIyX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjJfSVJRX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihETUEyMl9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMl9QRVJJUEhFUkFMX01BUCgpCWJmaW5fcmVhZDE2KERNQTIyX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIyX1BFUklQSEVSQUxfTUFQKHZhbCkJYmZpbl93cml0ZTE2KERNQTIyX1BFUklQSEVSQUxfTUFQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyMl9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoRE1BMjJfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIyX0NVUlJfWF9DT1VOVCh2YWwpCWJmaW5fd3JpdGUxNihETUEyMl9DVVJSX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIyX0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihETUEyMl9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjJfQ1VSUl9ZX0NPVU5UKHZhbCkJYmZpbl93cml0ZTE2KERNQTIyX0NVUlJfWV9DT1VOVCwgdmFsKQorCisvKiBETUEgQ2hhbm5lbCAyMyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfRE1BMjNfTkVYVF9ERVNDX1BUUigpIAkJYmZpbl9yZWFkMzIoRE1BMjNfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyM19ORVhUX0RFU0NfUFRSKHZhbCkgCQliZmluX3dyaXRlMzIoRE1BMjNfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIzX1NUQVJUX0FERFIoKSAJCQliZmluX3JlYWQzMihETUEyM19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIzX1NUQVJUX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUEyM19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjNfQ09ORklHKCkJCQliZmluX3JlYWQxNihETUEyM19DT05GSUcpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjNfQ09ORklHKHZhbCkJCQliZmluX3dyaXRlMTYoRE1BMjNfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyM19YX0NPVU5UKCkJCQliZmluX3JlYWQxNihETUEyM19YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIzX1hfQ09VTlQodmFsKQkJCWJmaW5fd3JpdGUxNihETUEyM19YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyM19YX01PRElGWSgpCQkJYmZpbl9yZWFkMTYoRE1BMjNfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjNfWF9NT0RJRlkodmFsKSAJCQliZmluX3dyaXRlMTYoRE1BMjNfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyM19ZX0NPVU5UKCkJCQliZmluX3JlYWQxNihETUEyM19ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIzX1lfQ09VTlQodmFsKQkJCWJmaW5fd3JpdGUxNihETUEyM19ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyM19ZX01PRElGWSgpCQkJYmZpbl9yZWFkMTYoRE1BMjNfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjNfWV9NT0RJRlkodmFsKSAJCQliZmluX3dyaXRlMTYoRE1BMjNfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyM19DVVJSX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihETUEyM19DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIzX0NVUlJfREVTQ19QVFIodmFsKSAJCWJmaW5fd3JpdGUzMihETUEyM19DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjNfQ1VSUl9BRERSKCkgCQkJYmZpbl9yZWFkMzIoRE1BMjNfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQTIzX0NVUlJfQUREUih2YWwpIAkJYmZpbl93cml0ZTMyKERNQTIzX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQTIzX0lSUV9TVEFUVVMoKQkJCWJmaW5fcmVhZDE2KERNQTIzX0lSUV9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjNfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoRE1BMjNfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjNfUEVSSVBIRVJBTF9NQVAoKQkJYmZpbl9yZWFkMTYoRE1BMjNfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjNfUEVSSVBIRVJBTF9NQVAodmFsKQkJYmZpbl93cml0ZTE2KERNQTIzX1BFUklQSEVSQUxfTUFQLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUEyM19DVVJSX1hfQ09VTlQoKQkJCWJmaW5fcmVhZDE2KERNQTIzX0NVUlJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUEyM19DVVJSX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQTIzX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BMjNfQ1VSUl9ZX0NPVU5UKCkJCQliZmluX3JlYWQxNihETUEyM19DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BMjNfQ1VSUl9ZX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihETUEyM19DVVJSX1lfQ09VTlQsIHZhbCkKKworLyogTURNQSBTdHJlYW0gMiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMl9ORVhUX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihNRE1BX0QyX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9ORVhUX0RFU0NfUFRSKHZhbCkgCQliZmluX3dyaXRlMzIoTURNQV9EMl9ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMl9TVEFSVF9BRERSKCkgCQkJYmZpbl9yZWFkMzIoTURNQV9EMl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDJfU1RBUlRfQUREUih2YWwpIAkJYmZpbl93cml0ZTMyKE1ETUFfRDJfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDJfQ09ORklHKCkJCQliZmluX3JlYWQxNihNRE1BX0QyX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX0NPTkZJRyh2YWwpCQkJYmZpbl93cml0ZTE2KE1ETUFfRDJfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX1hfQ09VTlQoKQkJCWJmaW5fcmVhZDE2KE1ETUFfRDJfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX1hfQ09VTlQodmFsKQkJCWJmaW5fd3JpdGUxNihNRE1BX0QyX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDJfWF9NT0RJRlkoKQkJCWJmaW5fcmVhZDE2KE1ETUFfRDJfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9YX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KE1ETUFfRDJfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX1lfQ09VTlQoKQkJCWJmaW5fcmVhZDE2KE1ETUFfRDJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX1lfQ09VTlQodmFsKQkJCWJmaW5fd3JpdGUxNihNRE1BX0QyX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDJfWV9NT0RJRlkoKQkJCWJmaW5fcmVhZDE2KE1ETUFfRDJfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9ZX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KE1ETUFfRDJfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX0NVUlJfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKE1ETUFfRDJfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX0NVUlJfREVTQ19QVFIodmFsKSAJCWJmaW5fd3JpdGUzMihNRE1BX0QyX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX0NVUlJfQUREUigpIAkJCWJmaW5fcmVhZDMyKE1ETUFfRDJfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDJfQ1VSUl9BRERSKHZhbCkgCQliZmluX3dyaXRlMzIoTURNQV9EMl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QyX0lSUV9TVEFUVVMoKQkJCWJmaW5fcmVhZDE2KE1ETUFfRDJfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QyX0lSUV9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDJfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMl9QRVJJUEhFUkFMX01BUCgpCQliZmluX3JlYWQxNihNRE1BX0QyX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDJfUEVSSVBIRVJBTF9NQVAodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDJfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDJfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDJfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDJfQ1VSUl9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QyX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EMl9DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EMl9DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EMl9DVVJSX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDJfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MyX05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKE1ETUFfUzJfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MyX05FWFRfREVTQ19QVFIodmFsKSAJCWJmaW5fd3JpdGUzMihNRE1BX1MyX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MyX1NUQVJUX0FERFIoKSAJCQliZmluX3JlYWQzMihNRE1BX1MyX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9TVEFSVF9BRERSKHZhbCkgCQliZmluX3dyaXRlMzIoTURNQV9TMl9TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMl9DT05GSUcoKQkJCWJmaW5fcmVhZDE2KE1ETUFfUzJfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfQ09ORklHKHZhbCkJCQliZmluX3dyaXRlMTYoTURNQV9TMl9DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfWF9DT1VOVCgpCQkJYmZpbl9yZWFkMTYoTURNQV9TMl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfWF9DT1VOVCh2YWwpCQkJYmZpbl93cml0ZTE2KE1ETUFfUzJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMl9YX01PRElGWSgpCQkJYmZpbl9yZWFkMTYoTURNQV9TMl9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MyX1hfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoTURNQV9TMl9YX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfWV9DT1VOVCgpCQkJYmZpbl9yZWFkMTYoTURNQV9TMl9ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfWV9DT1VOVCh2YWwpCQkJYmZpbl93cml0ZTE2KE1ETUFfUzJfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMl9ZX01PRElGWSgpCQkJYmZpbl9yZWFkMTYoTURNQV9TMl9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MyX1lfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoTURNQV9TMl9ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfQ1VSUl9ERVNDX1BUUigpIAkJYmZpbl9yZWFkMzIoTURNQV9TMl9DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfQ1VSUl9ERVNDX1BUUih2YWwpIAkJYmZpbl93cml0ZTMyKE1ETUFfUzJfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfQ1VSUl9BRERSKCkgCQkJYmZpbl9yZWFkMzIoTURNQV9TMl9DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihNRE1BX1MyX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzJfSVJRX1NUQVRVUygpCQkJYmZpbl9yZWFkMTYoTURNQV9TMl9JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzJfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMl9JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MyX1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzJfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9QRVJJUEhFUkFMX01BUCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMl9QRVJJUEhFUkFMX01BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TMl9DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9TMl9DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TMl9DVVJSX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzJfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MyX0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX1MyX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MyX0NVUlJfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TMl9DVVJSX1lfQ09VTlQsIHZhbCkKKworLyogTURNQSBTdHJlYW0gMyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19ORVhUX0RFU0NfUFRSKCkgCQliZmluX3JlYWQzMihNRE1BX0QzX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19ORVhUX0RFU0NfUFRSKHZhbCkgCQliZmluX3dyaXRlMzIoTURNQV9EM19ORVhUX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19TVEFSVF9BRERSKCkgCQkJYmZpbl9yZWFkMzIoTURNQV9EM19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfU1RBUlRfQUREUih2YWwpIAkJYmZpbl93cml0ZTMyKE1ETUFfRDNfU1RBUlRfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDNfQ09ORklHKCkJCQliZmluX3JlYWQxNihNRE1BX0QzX0NPTkZJRykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX0NPTkZJRyh2YWwpCQkJYmZpbl93cml0ZTE2KE1ETUFfRDNfQ09ORklHLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX1hfQ09VTlQoKQkJCWJmaW5fcmVhZDE2KE1ETUFfRDNfWF9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX1hfQ09VTlQodmFsKQkJCWJmaW5fd3JpdGUxNihNRE1BX0QzX1hfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDNfWF9NT0RJRlkoKQkJCWJmaW5fcmVhZDE2KE1ETUFfRDNfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19YX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KE1ETUFfRDNfWF9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX1lfQ09VTlQoKQkJCWJmaW5fcmVhZDE2KE1ETUFfRDNfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX1lfQ09VTlQodmFsKQkJCWJmaW5fd3JpdGUxNihNRE1BX0QzX1lfQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDNfWV9NT0RJRlkoKQkJCWJmaW5fcmVhZDE2KE1ETUFfRDNfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19ZX01PRElGWSh2YWwpIAkJYmZpbl93cml0ZTE2KE1ETUFfRDNfWV9NT0RJRlkpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX0NVUlJfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKE1ETUFfRDNfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX0NVUlJfREVTQ19QVFIodmFsKSAJCWJmaW5fd3JpdGUzMihNRE1BX0QzX0NVUlJfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX0NVUlJfQUREUigpIAkJCWJmaW5fcmVhZDMyKE1ETUFfRDNfQ1VSUl9BRERSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfQ1VSUl9BRERSKHZhbCkgCQliZmluX3dyaXRlMzIoTURNQV9EM19DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX0QzX0lSUV9TVEFUVVMoKQkJCWJmaW5fcmVhZDE2KE1ETUFfRDNfSVJRX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX0QzX0lSUV9TVEFUVVModmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDNfSVJRX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19QRVJJUEhFUkFMX01BUCgpCQliZmluX3JlYWQxNihNRE1BX0QzX1BFUklQSEVSQUxfTUFQKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfUEVSSVBIRVJBTF9NQVAodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDNfUEVSSVBIRVJBTF9NQVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfRDNfQ1VSUl9YX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE1ETUFfRDNfQ1VSUl9YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfRDNfQ1VSUl9YX0NPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihNRE1BX0QzX0NVUlJfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9EM19DVVJSX1lfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9EM19DVVJSX1lfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9EM19DVVJSX1lfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfRDNfQ1VSUl9ZX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX05FWFRfREVTQ19QVFIoKSAJCWJmaW5fcmVhZDMyKE1ETUFfUzNfTkVYVF9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX05FWFRfREVTQ19QVFIodmFsKSAJCWJmaW5fd3JpdGUzMihNRE1BX1MzX05FWFRfREVTQ19QVFIpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX1NUQVJUX0FERFIoKSAJCQliZmluX3JlYWQzMihNRE1BX1MzX1NUQVJUX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19TVEFSVF9BRERSKHZhbCkgCQliZmluX3dyaXRlMzIoTURNQV9TM19TVEFSVF9BRERSKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TM19DT05GSUcoKQkJCWJmaW5fcmVhZDE2KE1ETUFfUzNfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfQ09ORklHKHZhbCkJCQliZmluX3dyaXRlMTYoTURNQV9TM19DT05GSUcsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzNfWF9DT1VOVCgpCQkJYmZpbl9yZWFkMTYoTURNQV9TM19YX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfWF9DT1VOVCh2YWwpCQkJYmZpbl93cml0ZTE2KE1ETUFfUzNfWF9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TM19YX01PRElGWSgpCQkJYmZpbl9yZWFkMTYoTURNQV9TM19YX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX1hfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoTURNQV9TM19YX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzNfWV9DT1VOVCgpCQkJYmZpbl9yZWFkMTYoTURNQV9TM19ZX0NPVU5UKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfWV9DT1VOVCh2YWwpCQkJYmZpbl93cml0ZTE2KE1ETUFfUzNfWV9DT1VOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TM19ZX01PRElGWSgpCQkJYmZpbl9yZWFkMTYoTURNQV9TM19ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX1lfTU9ESUZZKHZhbCkgCQliZmluX3dyaXRlMTYoTURNQV9TM19ZX01PRElGWSkKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzNfQ1VSUl9ERVNDX1BUUigpIAkJYmZpbl9yZWFkMzIoTURNQV9TM19DVVJSX0RFU0NfUFRSKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfQ1VSUl9ERVNDX1BUUih2YWwpIAkJYmZpbl93cml0ZTMyKE1ETUFfUzNfQ1VSUl9ERVNDX1BUUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzNfQ1VSUl9BRERSKCkgCQkJYmZpbl9yZWFkMzIoTURNQV9TM19DVVJSX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19DVVJSX0FERFIodmFsKSAJCWJmaW5fd3JpdGUzMihNRE1BX1MzX0NVUlJfQUREUikKKyNkZWZpbmUgYmZpbl9yZWFkX01ETUFfUzNfSVJRX1NUQVRVUygpCQkJYmZpbl9yZWFkMTYoTURNQV9TM19JUlFfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX01ETUFfUzNfSVJRX1NUQVRVUyh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TM19JUlFfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX1BFUklQSEVSQUxfTUFQKCkJCWJmaW5fcmVhZDE2KE1ETUFfUzNfUEVSSVBIRVJBTF9NQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19QRVJJUEhFUkFMX01BUCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TM19QRVJJUEhFUkFMX01BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTURNQV9TM19DVVJSX1hfQ09VTlQoKQkJYmZpbl9yZWFkMTYoTURNQV9TM19DVVJSX1hfQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTURNQV9TM19DVVJSX1hfQ09VTlQodmFsKQkJYmZpbl93cml0ZTE2KE1ETUFfUzNfQ1VSUl9YX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9NRE1BX1MzX0NVUlJfWV9DT1VOVCgpCQliZmluX3JlYWQxNihNRE1BX1MzX0NVUlJfWV9DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9NRE1BX1MzX0NVUlJfWV9DT1VOVCh2YWwpCQliZmluX3dyaXRlMTYoTURNQV9TM19DVVJSX1lfQ09VTlQsIHZhbCkKKworLyogVUFSVDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0RMTCgpCQkJYmZpbl9yZWFkMTYoVUFSVDFfRExMKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0RMTCh2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfRExMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9ETEgoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX0RMSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9ETEgodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX0RMSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfR0NUTCgpCQkJYmZpbl9yZWFkMTYoVUFSVDFfR0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9HQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9HQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9MQ1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX0xDUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9MQ1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX0xDUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfTUNSKCkJCQliZmluX3JlYWQxNihVQVJUMV9NQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfTUNSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9NQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0xTUigpCQkJYmZpbl9yZWFkMTYoVUFSVDFfTFNSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0xTUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfTFNSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9NU1IoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX01TUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9NU1IodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX01TUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfU0NSKCkJCQliZmluX3JlYWQxNihVQVJUMV9TQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfU0NSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9TQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQxX0lFUl9TRVQoKQkJYmZpbl9yZWFkMTYoVUFSVDFfSUVSX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9JRVJfU0VUKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9JRVJfU0VULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9JRVJfQ0xFQVIoKQkJYmZpbl9yZWFkMTYoVUFSVDFfSUVSX0NMRUFSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQxX0lFUl9DTEVBUih2YWwpCQliZmluX3dyaXRlMTYoVUFSVDFfSUVSX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUMV9USFIoKQkJCWJmaW5fcmVhZDE2KFVBUlQxX1RIUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUMV9USFIodmFsKQkJYmZpbl93cml0ZTE2KFVBUlQxX1RIUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDFfUkJSKCkJCQliZmluX3JlYWQxNihVQVJUMV9SQlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDFfUkJSKHZhbCkJCWJmaW5fd3JpdGUxNihVQVJUMV9SQlIsIHZhbCkKKworLyogVUFSVDIgaXMgbm90IGRlZmluZWQgaW4gdGhlIHNoYXJlZCBmaWxlIGJlY2F1c2UgaXQgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgQURTUC1CRjU0MiBhbmQgQURTUC1CRjU0NCBiZmluX3JlYWRfKClyb2Nlc3NvcnMgKi8KKworLyogU1BJMSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfU1BJMV9DVEwoKQkJCWJmaW5fcmVhZDE2KFNQSTFfQ1RMKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTFfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihTUEkxX0NUTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BJMV9GTEcoKQkJCWJmaW5fcmVhZDE2KFNQSTFfRkxHKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTFfRkxHKHZhbCkJCWJmaW5fd3JpdGUxNihTUEkxX0ZMRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BJMV9TVEFUKCkJCQliZmluX3JlYWQxNihTUEkxX1NUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJMV9TVEFUKHZhbCkJCWJmaW5fd3JpdGUxNihTUEkxX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSTFfVERCUigpCQkJYmZpbl9yZWFkMTYoU1BJMV9UREJSKQorI2RlZmluZSBiZmluX3dyaXRlX1NQSTFfVERCUih2YWwpCQliZmluX3dyaXRlMTYoU1BJMV9UREJSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUEkxX1JEQlIoKQkJCWJmaW5fcmVhZDE2KFNQSTFfUkRCUikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUEkxX1JEQlIodmFsKQkJYmZpbl93cml0ZTE2KFNQSTFfUkRCUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BJMV9CQVVEKCkJCQliZmluX3JlYWQxNihTUEkxX0JBVUQpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BJMV9CQVVEKHZhbCkJCWJmaW5fd3JpdGUxNihTUEkxX0JBVUQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQSTFfU0hBRE9XKCkJCQliZmluX3JlYWQxNihTUEkxX1NIQURPVykKKyNkZWZpbmUgYmZpbl93cml0ZV9TUEkxX1NIQURPVyh2YWwpCQliZmluX3dyaXRlMTYoU1BJMV9TSEFET1csIHZhbCkKKworLyogU1BPUlQyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDJfVENSMSgpCQkJYmZpbl9yZWFkMTYoU1BPUlQyX1RDUjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX1RDUjEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMl9UQ1IxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDJfVENSMigpCQkJYmZpbl9yZWFkMTYoU1BPUlQyX1RDUjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX1RDUjIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMl9UQ1IyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDJfVENMS0RJVigpCQliZmluX3JlYWQxNihTUE9SVDJfVENMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDJfVENMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQyX1RDTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9URlNESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQyX1RGU0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDJfVEZTRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDJfVEZTRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDJfVFgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUMl9UWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDJfVFgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUMl9UWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQyX1JYKCkJCQliZmluX3JlYWQzMihTUE9SVDJfUlgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX1JYKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDJfUlgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9SQ1IxKCkJCQliZmluX3JlYWQxNihTUE9SVDJfUkNSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDJfUkNSMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQyX1JDUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9SQ1IyKCkJCQliZmluX3JlYWQxNihTUE9SVDJfUkNSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDJfUkNSMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQyX1JDUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9SQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUMl9SQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMl9SQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDJfUkNMS0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQyX1JGU0RJVigpCQliZmluX3JlYWQxNihTUE9SVDJfUkZTRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUMl9SRlNESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUMl9SRlNESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9TVEFUKCkJCQliZmluX3JlYWQxNihTUE9SVDJfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDJfU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQyX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9DSE5MKCkJCQliZmluX3JlYWQxNihTUE9SVDJfQ0hOTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDJfQ0hOTCh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQyX0NITkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9NQ01DMSgpCQliZmluX3JlYWQxNihTUE9SVDJfTUNNQzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX01DTUMxKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDJfTUNNQzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9NQ01DMigpCQliZmluX3JlYWQxNihTUE9SVDJfTUNNQzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX01DTUMyKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDJfTUNNQzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9NVENTMCgpCQliZmluX3JlYWQzMihTUE9SVDJfTVRDUzApCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX01UQ1MwKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDJfTVRDUzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9NVENTMSgpCQliZmluX3JlYWQzMihTUE9SVDJfTVRDUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX01UQ1MxKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDJfTVRDUzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9NVENTMigpCQliZmluX3JlYWQzMihTUE9SVDJfTVRDUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX01UQ1MyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDJfTVRDUzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9NVENTMygpCQliZmluX3JlYWQzMihTUE9SVDJfTVRDUzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX01UQ1MzKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDJfTVRDUzMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9NUkNTMCgpCQliZmluX3JlYWQzMihTUE9SVDJfTVJDUzApCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX01SQ1MwKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDJfTVJDUzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9NUkNTMSgpCQliZmluX3JlYWQzMihTUE9SVDJfTVJDUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX01SQ1MxKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDJfTVJDUzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9NUkNTMigpCQliZmluX3JlYWQzMihTUE9SVDJfTVJDUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX01SQ1MyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDJfTVJDUzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUMl9NUkNTMygpCQliZmluX3JlYWQzMihTUE9SVDJfTVJDUzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQyX01SQ1MzKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDJfTVJDUzMsIHZhbCkKKworLyogU1BPUlQzIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDNfVENSMSgpCQkJYmZpbl9yZWFkMTYoU1BPUlQzX1RDUjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX1RDUjEodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUM19UQ1IxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDNfVENSMigpCQkJYmZpbl9yZWFkMTYoU1BPUlQzX1RDUjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX1RDUjIodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUM19UQ1IyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDNfVENMS0RJVigpCQliZmluX3JlYWQxNihTUE9SVDNfVENMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDNfVENMS0RJVih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQzX1RDTEtESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19URlNESVYoKQkJYmZpbl9yZWFkMTYoU1BPUlQzX1RGU0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDNfVEZTRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDNfVEZTRElWLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVDNfVFgoKQkJCWJmaW5fcmVhZDMyKFNQT1JUM19UWCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDNfVFgodmFsKQkJYmZpbl93cml0ZTMyKFNQT1JUM19UWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQzX1JYKCkJCQliZmluX3JlYWQzMihTUE9SVDNfUlgpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX1JYKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDNfUlgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19SQ1IxKCkJCQliZmluX3JlYWQxNihTUE9SVDNfUkNSMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDNfUkNSMSh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQzX1JDUjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19SQ1IyKCkJCQliZmluX3JlYWQxNihTUE9SVDNfUkNSMikKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDNfUkNSMih2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQzX1JDUjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19SQ0xLRElWKCkJCWJmaW5fcmVhZDE2KFNQT1JUM19SQ0xLRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUM19SQ0xLRElWKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDNfUkNMS0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlQzX1JGU0RJVigpCQliZmluX3JlYWQxNihTUE9SVDNfUkZTRElWKQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUM19SRlNESVYodmFsKQkJYmZpbl93cml0ZTE2KFNQT1JUM19SRlNESVYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19TVEFUKCkJCQliZmluX3JlYWQxNihTUE9SVDNfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDNfU1RBVCh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQzX1NUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19DSE5MKCkJCQliZmluX3JlYWQxNihTUE9SVDNfQ0hOTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVDNfQ0hOTCh2YWwpCQliZmluX3dyaXRlMTYoU1BPUlQzX0NITkwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19NQ01DMSgpCQliZmluX3JlYWQxNihTUE9SVDNfTUNNQzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX01DTUMxKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDNfTUNNQzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19NQ01DMigpCQliZmluX3JlYWQxNihTUE9SVDNfTUNNQzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX01DTUMyKHZhbCkJCWJmaW5fd3JpdGUxNihTUE9SVDNfTUNNQzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19NVENTMCgpCQliZmluX3JlYWQzMihTUE9SVDNfTVRDUzApCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX01UQ1MwKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDNfTVRDUzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19NVENTMSgpCQliZmluX3JlYWQzMihTUE9SVDNfTVRDUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX01UQ1MxKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDNfTVRDUzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19NVENTMigpCQliZmluX3JlYWQzMihTUE9SVDNfTVRDUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX01UQ1MyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDNfTVRDUzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19NVENTMygpCQliZmluX3JlYWQzMihTUE9SVDNfTVRDUzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX01UQ1MzKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDNfTVRDUzMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19NUkNTMCgpCQliZmluX3JlYWQzMihTUE9SVDNfTVJDUzApCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX01SQ1MwKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDNfTVJDUzAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19NUkNTMSgpCQliZmluX3JlYWQzMihTUE9SVDNfTVJDUzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX01SQ1MxKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDNfTVJDUzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19NUkNTMigpCQliZmluX3JlYWQzMihTUE9SVDNfTVJDUzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX01SQ1MyKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDNfTVJDUzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUM19NUkNTMygpCQliZmluX3JlYWQzMihTUE9SVDNfTVJDUzMpCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlQzX01SQ1MzKHZhbCkJCWJmaW5fd3JpdGUzMihTUE9SVDNfTVJDUzMsIHZhbCkKKworLyogRVBQSTIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkyX1NUQVRVUygpCQliZmluX3JlYWQxNihFUFBJMl9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTJfU1RBVFVTKHZhbCkJCWJmaW5fd3JpdGUxNihFUFBJMl9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkyX0hDT1VOVCgpCQliZmluX3JlYWQxNihFUFBJMl9IQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTJfSENPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihFUFBJMl9IQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkyX0hERUxBWSgpCQliZmluX3JlYWQxNihFUFBJMl9IREVMQVkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTJfSERFTEFZKHZhbCkJCWJmaW5fd3JpdGUxNihFUFBJMl9IREVMQVksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkyX1ZDT1VOVCgpCQliZmluX3JlYWQxNihFUFBJMl9WQ09VTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTJfVkNPVU5UKHZhbCkJCWJmaW5fd3JpdGUxNihFUFBJMl9WQ09VTlQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkyX1ZERUxBWSgpCQliZmluX3JlYWQxNihFUFBJMl9WREVMQVkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTJfVkRFTEFZKHZhbCkJCWJmaW5fd3JpdGUxNihFUFBJMl9WREVMQVksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkyX0ZSQU1FKCkJCQliZmluX3JlYWQxNihFUFBJMl9GUkFNRSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMl9GUkFNRSh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTJfRlJBTUUsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkyX0xJTkUoKQkJCWJmaW5fcmVhZDE2KEVQUEkyX0xJTkUpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTJfTElORSh2YWwpCQliZmluX3dyaXRlMTYoRVBQSTJfTElORSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTJfQ0xLRElWKCkJCWJmaW5fcmVhZDE2KEVQUEkyX0NMS0RJVikKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMl9DTEtESVYodmFsKQkJYmZpbl93cml0ZTE2KEVQUEkyX0NMS0RJViwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTJfQ09OVFJPTCgpCQliZmluX3JlYWQzMihFUFBJMl9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkyX0NPTlRST0wodmFsKQkJYmZpbl93cml0ZTMyKEVQUEkyX0NPTlRST0wsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VQUEkyX0ZTMVdfSEJMKCkJCWJmaW5fcmVhZDMyKEVQUEkyX0ZTMVdfSEJMKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkyX0ZTMVdfSEJMKHZhbCkJCWJmaW5fd3JpdGUzMihFUFBJMl9GUzFXX0hCTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTJfRlMxUF9BVlBMKCkJCWJmaW5fcmVhZDMyKEVQUEkyX0ZTMVBfQVZQTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FUFBJMl9GUzFQX0FWUEwodmFsKQkJYmZpbl93cml0ZTMyKEVQUEkyX0ZTMVBfQVZQTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVBQSTJfRlMyV19MVkIoKQkJYmZpbl9yZWFkMzIoRVBQSTJfRlMyV19MVkIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRVBQSTJfRlMyV19MVkIodmFsKQkJYmZpbl93cml0ZTMyKEVQUEkyX0ZTMldfTFZCLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMl9GUzJQX0xBVkYoKQkJYmZpbl9yZWFkMzIoRVBQSTJfRlMyUF9MQVZGKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkyX0ZTMlBfTEFWRih2YWwpCQliZmluX3dyaXRlMzIoRVBQSTJfRlMyUF9MQVZGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FUFBJMl9DTElQKCkJCQliZmluX3JlYWQzMihFUFBJMl9DTElQKQorI2RlZmluZSBiZmluX3dyaXRlX0VQUEkyX0NMSVAodmFsKQkJYmZpbl93cml0ZTMyKEVQUEkyX0NMSVAsIHZhbCkKKworLyogQ0FOIENvbnRyb2xsZXIgMCBDb25maWcgMSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQzEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQzEodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUQxKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX1RSUzEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9UUlMxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfVFJTMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX1RSUzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfVFJSMSgpCQliZmluX3JlYWQxNihDQU4wX1RSUjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9UUlIxKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfVFJSMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9UQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9UQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9UQTEodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9UQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfQUExKCkJCWJmaW5fcmVhZDE2KENBTjBfQUExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfQUExKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfQUExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX1JNUDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9STVAxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfUk1QMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX1JNUDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfUk1MMSgpCQliZmluX3JlYWQxNihDQU4wX1JNTDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9STUwxKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfUk1MMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQlRJRjEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQlRJRjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQlRJRjEodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQlRJRjEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUJSSUYxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUJSSUYxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUJSSUYxKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUJSSUYxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CSU0xKCkJCWJmaW5fcmVhZDE2KENBTjBfTUJJTTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQklNMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CSU0xLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX1JGSDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9SRkgxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfUkZIMSh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX1JGSDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfT1BTUzEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9PUFNTMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX09QU1MxKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfT1BTUzEsIHZhbCkKKworLyogQ0FOIENvbnRyb2xsZXIgMCBDb25maWcgMiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQzIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQzIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQzIodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUQyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUQyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUQyKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUQyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX1RSUzIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9UUlMyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfVFJTMih2YWwpCWJmaW5fd3JpdGUxNihDQU4wX1RSUzIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfVFJSMigpCQliZmluX3JlYWQxNihDQU4wX1RSUjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9UUlIyKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfVFJSMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9UQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9UQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9UQTIodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9UQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfQUEyKCkJCWJmaW5fcmVhZDE2KENBTjBfQUEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfQUEyKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfQUEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX1JNUDIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9STVAyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfUk1QMih2YWwpCWJmaW5fd3JpdGUxNihDQU4wX1JNUDIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfUk1MMigpCQliZmluX3JlYWQxNihDQU4wX1JNTDIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9STUwyKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfUk1MMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQlRJRjIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQlRJRjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQlRJRjIodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQlRJRjIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUJSSUYyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUJSSUYyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUJSSUYyKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUJSSUYyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CSU0yKCkJCWJmaW5fcmVhZDE2KENBTjBfTUJJTTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQklNMih2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CSU0yLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX1JGSDIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9SRkgyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfUkZIMih2YWwpCWJmaW5fd3JpdGUxNihDQU4wX1JGSDIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfT1BTUzIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9PUFNTMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX09QU1MyKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfT1BTUzIsIHZhbCkKKworLyogQ0FOIENvbnRyb2xsZXIgMCBDbG9jay9JbnRlcnJ1YmZpbl9yZWFkXygpdC9Db3VudGVyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0NMT0NLKCkJCWJmaW5fcmVhZDE2KENBTjBfQ0xPQ0spCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9DTE9DSyh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0NMT0NLLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX1RJTUlORygpCQliZmluX3JlYWQxNihDQU4wX1RJTUlORykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX1RJTUlORyh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX1RJTUlORywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9ERUJVRygpCQliZmluX3JlYWQxNihDQU4wX0RFQlVHKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfREVCVUcodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9ERUJVRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9TVEFUVVMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoQ0FOMF9TVEFUVVMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfQ0VDKCkJCWJmaW5fcmVhZDE2KENBTjBfQ0VDKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfQ0VDKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfQ0VDLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0dJUygpCQliZmluX3JlYWQxNihDQU4wX0dJUykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX0dJUyh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0dJUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9HSU0oKQkJYmZpbl9yZWFkMTYoQ0FOMF9HSU0pCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9HSU0odmFsKQliZmluX3dyaXRlMTYoQ0FOMF9HSU0sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfR0lGKCkJCWJmaW5fcmVhZDE2KENBTjBfR0lGKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfR0lGKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfR0lGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0NPTlRST0woKQliZmluX3JlYWQxNihDQU4wX0NPTlRST0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9DT05UUk9MKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfQ09OVFJPTCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9JTlRSKCkJCWJmaW5fcmVhZDE2KENBTjBfSU5UUikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX0lOVFIodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9JTlRSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CVEQoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQlREKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUJURCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CVEQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfRVdSKCkJCWJmaW5fcmVhZDE2KENBTjBfRVdSKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfRVdSKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfRVdSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0VTUigpCQliZmluX3JlYWQxNihDQU4wX0VTUikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX0VTUih2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0VTUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9VQ0NOVCgpCQliZmluX3JlYWQxNihDQU4wX1VDQ05UKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfVUNDTlQodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9VQ0NOVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9VQ1JDKCkJCWJmaW5fcmVhZDE2KENBTjBfVUNSQykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX1VDUkModmFsKQliZmluX3dyaXRlMTYoQ0FOMF9VQ1JDLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX1VDQ05GKCkJCWJmaW5fcmVhZDE2KENBTjBfVUNDTkYpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9VQ0NORih2YWwpCWJmaW5fd3JpdGUxNihDQU4wX1VDQ05GLCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDAgQWNjZWJmaW5fcmVhZF8oKXRhbmNlIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDBMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wMEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTAwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDBMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDBIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wMEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTAwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDBILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDFMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wMUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTAxTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDFIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wMUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTAxSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDFILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDJMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wMkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTAyTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDJIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wMkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTAySCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDJILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDNMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wM0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTAzTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDNMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDNIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wM0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTAzSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDNILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDRMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wNEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA0TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDRMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDRIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wNEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA0SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDVMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wNUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA1TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDVMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDVIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wNUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA1SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDVILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDZMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wNkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA2TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDZMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDZIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wNkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA2SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDZILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDdMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wN0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA3TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDdMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDdIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wN0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA3SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDhMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wOEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA4TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDhMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDhIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wOEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA4SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDhILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDlMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wOUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA5TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDlMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMDlIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0wOUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTA5SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMDlILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTBMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xMEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTEwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTBMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTBIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xMEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTEwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTBILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTFMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xMUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTExTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTFIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xMUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTExSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTFILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTJMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xMkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTEyTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTJIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xMkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTEySCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTJILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTNMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xM0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTEzTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTNMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTNIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xM0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTEzSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTNILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTRMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xNEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE0TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTRMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTRIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xNEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE0SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTVMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xNUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE1TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTVMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTVIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xNUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE1SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTVILCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDAgQWNjZWJmaW5fcmVhZF8oKXRhbmNlIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTZMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xNkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE2TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTZMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTZIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xNkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE2SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTZILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTdMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xN0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE3TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTdMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTdIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xN0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE3SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMThMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xOEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE4TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMThMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMThIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xOEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE4SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMThILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTlMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xOUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE5TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTlMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMTlIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0xOUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTE5SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMTlILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjBMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yMEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTIwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjBMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjBIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yMEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTIwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjBILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjFMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yMUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTIxTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjFIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yMUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTIxSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjFILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjJMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yMkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTIyTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjJMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjJIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yMkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTIySCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjJILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjNMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yM0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTIzTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjNMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjNIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yM0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTIzSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjNILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjRMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yNEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI0TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjRMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjRIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yNEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI0SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjRILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjVMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yNUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI1TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjVMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjVIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yNUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI1SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjVILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjZMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yNkwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI2TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjZMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjZIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yNkgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI2SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjZILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjdMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yN0wpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI3TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjdMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjdIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yN0gpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI3SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjdILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjhMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yOEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI4TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjhMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjhIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yOEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI4SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjhILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjlMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yOUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI5TCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjlMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMjlIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0yOUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTI5SCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMjlILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMzBMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0zMEwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTMwTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMzBMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMzBIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0zMEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTMwSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMzBILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMzFMKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0zMUwpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTMxTCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMzFMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX0FNMzFIKCkJCWJmaW5fcmVhZDE2KENBTjBfQU0zMUgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9BTTMxSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX0FNMzFILCB2YWwpCisKKy8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCBEYXRhIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDBfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAwX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwMF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjAwX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDBfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAwX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwMF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjAwX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDBfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAwX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwMF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjAwX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDBfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAwX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwMF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjAwX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDBfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwMF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjAwX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMDBfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDBfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwMF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjAwX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMDBfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDBfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwMF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjAwX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjAwX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjAwX0lEMSgpCQliZmluX3JlYWQxNihDQU4wX01CMDBfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwMF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwMF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwMV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4wX01CMDFfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjAxX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDFfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwMV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4wX01CMDFfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjAxX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDFfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwMV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4wX01CMDFfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjAxX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDFfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwMV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4wX01CMDFfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjAxX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDFfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwMV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAxX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDFfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIwMV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwMV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAxX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDFfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIwMV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwMV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAxX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDFfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDFfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDFfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwMV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjAxX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjAxX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjAyX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwMl9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDJfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwMl9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjAyX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwMl9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDJfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwMl9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjAyX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwMl9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDJfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwMl9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjAyX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwMl9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDJfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwMl9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjAyX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4wX01CMDJfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwMl9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjAyX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjAyX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4wX01CMDJfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwMl9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjAyX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjAyX0lEMCgpCQliZmluX3JlYWQxNihDQU4wX01CMDJfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwMl9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwMl9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwMl9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAyX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDJfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDJfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDNfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAzX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwM19EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjAzX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDNfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAzX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwM19EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjAzX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDNfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAzX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwM19EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjAzX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDNfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjAzX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwM19EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjAzX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDNfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwM19MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjAzX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMDNfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDNfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwM19USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjAzX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMDNfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDNfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwM19JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjAzX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjAzX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjAzX0lEMSgpCQliZmluX3JlYWQxNihDQU4wX01CMDNfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwM19JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwM19JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwNF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4wX01CMDRfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA0X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDRfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwNF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4wX01CMDRfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA0X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDRfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwNF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4wX01CMDRfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA0X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDRfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwNF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4wX01CMDRfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA0X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDRfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwNF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA0X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDRfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIwNF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwNF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA0X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDRfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIwNF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwNF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA0X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDRfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDRfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDRfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwNF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA0X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA0X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA1X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwNV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDVfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwNV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA1X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwNV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDVfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwNV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA1X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwNV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDVfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwNV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA1X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwNV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDVfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwNV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA1X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4wX01CMDVfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwNV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjA1X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA1X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4wX01CMDVfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwNV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjA1X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA1X0lEMCgpCQliZmluX3JlYWQxNihDQU4wX01CMDVfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwNV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwNV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwNV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA1X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDVfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDVfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDZfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA2X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwNl9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA2X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDZfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA2X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwNl9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA2X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDZfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA2X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwNl9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA2X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDZfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA2X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwNl9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA2X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDZfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwNl9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA2X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMDZfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDZfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwNl9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA2X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMDZfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDZfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwNl9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA2X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA2X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA2X0lEMSgpCQliZmluX3JlYWQxNihDQU4wX01CMDZfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwNl9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwNl9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwN19EQVRBMCgpCQliZmluX3JlYWQxNihDQU4wX01CMDdfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA3X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDdfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwN19EQVRBMSgpCQliZmluX3JlYWQxNihDQU4wX01CMDdfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA3X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDdfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwN19EQVRBMigpCQliZmluX3JlYWQxNihDQU4wX01CMDdfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA3X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDdfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwN19EQVRBMygpCQliZmluX3JlYWQxNihDQU4wX01CMDdfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA3X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDdfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwN19MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA3X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDdfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIwN19MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwN19USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA3X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDdfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIwN19USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwN19JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA3X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDdfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDdfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDdfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwN19JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA3X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA3X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA4X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwOF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDhfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwOF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA4X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwOF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDhfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwOF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA4X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwOF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDhfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwOF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA4X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwOF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDhfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwOF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA4X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4wX01CMDhfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwOF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjA4X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA4X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4wX01CMDhfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwOF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjA4X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA4X0lEMCgpCQliZmluX3JlYWQxNihDQU4wX01CMDhfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwOF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwOF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIwOF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA4X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMDhfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMDhfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDlfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA5X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwOV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA5X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDlfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA5X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwOV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA5X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDlfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA5X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwOV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA5X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDlfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjA5X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwOV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA5X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDlfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwOV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA5X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMDlfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDlfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwOV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA5X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMDlfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMDlfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIwOV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjA5X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjA5X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjA5X0lEMSgpCQliZmluX3JlYWQxNihDQU4wX01CMDlfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIwOV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIwOV9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxMF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4wX01CMTBfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEwX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTBfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxMF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4wX01CMTBfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEwX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTBfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxMF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4wX01CMTBfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEwX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTBfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxMF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4wX01CMTBfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEwX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTBfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxMF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjEwX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTBfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIxMF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxMF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjEwX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTBfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIxMF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxMF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjEwX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTBfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTBfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTBfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxMF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEwX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjEwX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjExX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxMV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTFfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxMV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjExX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxMV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTFfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxMV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjExX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxMV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTFfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxMV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjExX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxMV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTFfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxMV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjExX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4wX01CMTFfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxMV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjExX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjExX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4wX01CMTFfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxMV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjExX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjExX0lEMCgpCQliZmluX3JlYWQxNihDQU4wX01CMTFfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxMV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxMV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxMV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjExX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTFfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTFfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTJfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjEyX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxMl9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjEyX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTJfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjEyX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxMl9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjEyX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTJfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjEyX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxMl9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjEyX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTJfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjEyX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxMl9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjEyX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTJfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxMl9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEyX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMTJfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTJfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxMl9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEyX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMTJfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTJfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxMl9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEyX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjEyX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjEyX0lEMSgpCQliZmluX3JlYWQxNihDQU4wX01CMTJfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxMl9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxMl9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxM19EQVRBMCgpCQliZmluX3JlYWQxNihDQU4wX01CMTNfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEzX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTNfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxM19EQVRBMSgpCQliZmluX3JlYWQxNihDQU4wX01CMTNfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEzX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTNfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxM19EQVRBMigpCQliZmluX3JlYWQxNihDQU4wX01CMTNfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEzX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTNfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxM19EQVRBMygpCQliZmluX3JlYWQxNihDQU4wX01CMTNfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEzX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTNfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxM19MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjEzX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTNfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIxM19MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxM19USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjEzX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTNfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIxM19USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxM19JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjEzX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTNfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTNfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTNfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxM19JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjEzX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjEzX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE0X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxNF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTRfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxNF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE0X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxNF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTRfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxNF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE0X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxNF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTRfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxNF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE0X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxNF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTRfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxNF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE0X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4wX01CMTRfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxNF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjE0X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE0X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4wX01CMTRfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxNF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjE0X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE0X0lEMCgpCQliZmluX3JlYWQxNihDQU4wX01CMTRfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxNF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxNF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxNF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE0X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTRfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTRfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTVfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE1X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxNV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE1X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTVfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE1X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxNV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE1X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTVfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE1X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxNV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE1X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTVfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE1X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxNV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE1X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTVfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxNV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE1X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMTVfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTVfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxNV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE1X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMTVfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTVfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxNV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE1X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE1X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE1X0lEMSgpCQliZmluX3JlYWQxNihDQU4wX01CMTVfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxNV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxNV9JRDEsIHZhbCkKKworLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IERhdGEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxNl9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4wX01CMTZfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE2X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTZfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxNl9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4wX01CMTZfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE2X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTZfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxNl9EQVRBMigpCQliZmluX3JlYWQxNihDQU4wX01CMTZfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE2X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTZfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxNl9EQVRBMygpCQliZmluX3JlYWQxNihDQU4wX01CMTZfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE2X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTZfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxNl9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE2X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTZfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIxNl9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxNl9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE2X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTZfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIxNl9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxNl9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE2X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTZfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTZfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTZfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxNl9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE2X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE2X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE3X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxN19EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTdfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxN19EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE3X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxN19EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTdfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxN19EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE3X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxN19EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTdfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxN19EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE3X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxN19EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTdfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxN19EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE3X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4wX01CMTdfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxN19MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjE3X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE3X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4wX01CMTdfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxN19USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjE3X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE3X0lEMCgpCQliZmluX3JlYWQxNihDQU4wX01CMTdfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxN19JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxN19JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxN19JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE3X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTdfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTdfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMThfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE4X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxOF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE4X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMThfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE4X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxOF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE4X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMThfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE4X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxOF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE4X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMThfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE4X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxOF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE4X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMThfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxOF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE4X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMThfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMThfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxOF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE4X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMThfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMThfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxOF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE4X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE4X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjE4X0lEMSgpCQliZmluX3JlYWQxNihDQU4wX01CMThfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIxOF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIxOF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxOV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4wX01CMTlfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE5X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTlfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxOV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4wX01CMTlfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE5X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTlfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxOV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4wX01CMTlfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE5X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTlfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxOV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4wX01CMTlfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE5X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTlfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxOV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE5X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTlfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIxOV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxOV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE5X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTlfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIxOV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIxOV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjE5X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMTlfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMTlfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMTlfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIxOV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjE5X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjE5X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIwX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyMF9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjBfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyMF9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIwX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyMF9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjBfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyMF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIwX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyMF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjBfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyMF9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIwX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyMF9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjBfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyMF9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIwX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4wX01CMjBfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyMF9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjIwX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIwX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4wX01CMjBfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyMF9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjIwX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIwX0lEMCgpCQliZmluX3JlYWQxNihDQU4wX01CMjBfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyMF9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyMF9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyMF9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjIwX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjBfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjBfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjFfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjIxX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyMV9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjIxX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjFfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjIxX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyMV9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjIxX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjFfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjIxX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyMV9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjIxX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjFfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjIxX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyMV9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjIxX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjFfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyMV9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjIxX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMjFfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjFfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyMV9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjIxX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMjFfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjFfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyMV9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjIxX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjIxX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIxX0lEMSgpCQliZmluX3JlYWQxNihDQU4wX01CMjFfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyMV9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyMV9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyMl9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4wX01CMjJfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjIyX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjJfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyMl9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4wX01CMjJfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjIyX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjJfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyMl9EQVRBMigpCQliZmluX3JlYWQxNihDQU4wX01CMjJfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjIyX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjJfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyMl9EQVRBMygpCQliZmluX3JlYWQxNihDQU4wX01CMjJfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjIyX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjJfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyMl9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjIyX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjJfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIyMl9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyMl9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjIyX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjJfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIyMl9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyMl9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjIyX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjJfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjJfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjJfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyMl9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjIyX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjIyX0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIzX0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyM19EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjNfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyM19EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIzX0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyM19EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjNfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyM19EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIzX0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyM19EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjNfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyM19EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIzX0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyM19EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjNfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyM19EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIzX0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4wX01CMjNfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyM19MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjIzX0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIzX1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4wX01CMjNfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyM19USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjIzX1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjIzX0lEMCgpCQliZmluX3JlYWQxNihDQU4wX01CMjNfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyM19JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyM19JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyM19JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjIzX0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjNfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjNfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjRfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI0X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyNF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI0X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjRfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI0X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyNF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI0X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjRfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI0X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyNF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI0X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjRfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI0X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyNF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI0X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjRfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyNF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI0X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMjRfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjRfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyNF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI0X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMjRfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjRfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyNF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI0X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI0X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI0X0lEMSgpCQliZmluX3JlYWQxNihDQU4wX01CMjRfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyNF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyNF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyNV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4wX01CMjVfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI1X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjVfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyNV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4wX01CMjVfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI1X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjVfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyNV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4wX01CMjVfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI1X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjVfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyNV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4wX01CMjVfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI1X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjVfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyNV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI1X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjVfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIyNV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyNV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI1X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjVfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIyNV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyNV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI1X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjVfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjVfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjVfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyNV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI1X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI1X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI2X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyNl9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjZfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyNl9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI2X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyNl9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjZfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyNl9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI2X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyNl9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjZfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyNl9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI2X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyNl9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjZfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyNl9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI2X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4wX01CMjZfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyNl9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjI2X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI2X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4wX01CMjZfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyNl9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjI2X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI2X0lEMCgpCQliZmluX3JlYWQxNihDQU4wX01CMjZfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyNl9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyNl9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyNl9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI2X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjZfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjZfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjdfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI3X0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyN19EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI3X0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjdfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI3X0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyN19EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI3X0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjdfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI3X0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyN19EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI3X0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjdfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI3X0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyN19EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI3X0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjdfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyN19MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI3X0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMjdfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjdfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyN19USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI3X1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMjdfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjdfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyN19JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI3X0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI3X0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI3X0lEMSgpCQliZmluX3JlYWQxNihDQU4wX01CMjdfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyN19JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyN19JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyOF9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4wX01CMjhfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI4X0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjhfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyOF9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4wX01CMjhfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI4X0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjhfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyOF9EQVRBMigpCQliZmluX3JlYWQxNihDQU4wX01CMjhfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI4X0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjhfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyOF9EQVRBMygpCQliZmluX3JlYWQxNihDQU4wX01CMjhfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI4X0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjhfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyOF9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI4X0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjhfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIyOF9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyOF9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI4X1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjhfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIyOF9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyOF9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI4X0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjhfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjhfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMjhfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyOF9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjI4X0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjI4X0lEMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI5X0RBVEEwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyOV9EQVRBMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjlfREFUQTAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyOV9EQVRBMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI5X0RBVEExKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyOV9EQVRBMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjlfREFUQTEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyOV9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI5X0RBVEEyKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyOV9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjlfREFUQTIodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyOV9EQVRBMiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI5X0RBVEEzKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIyOV9EQVRBMykKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjlfREFUQTModmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyOV9EQVRBMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI5X0xFTkdUSCgpCQliZmluX3JlYWQxNihDQU4wX01CMjlfTEVOR1RIKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyOV9MRU5HVEgodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjI5X0xFTkdUSCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI5X1RJTUVTVEFNUCgpCQliZmluX3JlYWQxNihDQU4wX01CMjlfVElNRVNUQU1QKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyOV9USU1FU1RBTVAodmFsKQliZmluX3dyaXRlMTYoQ0FOMF9NQjI5X1RJTUVTVEFNUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjI5X0lEMCgpCQliZmluX3JlYWQxNihDQU4wX01CMjlfSUQwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIyOV9JRDAodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIyOV9JRDAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIyOV9JRDEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjI5X0lEMSkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMjlfSUQxKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMjlfSUQxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMzBfREFUQTAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjMwX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIzMF9EQVRBMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjMwX0RBVEEwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMzBfREFUQTEoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjMwX0RBVEExKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIzMF9EQVRBMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjMwX0RBVEExLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMzBfREFUQTIoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjMwX0RBVEEyKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIzMF9EQVRBMih2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjMwX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMzBfREFUQTMoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjMwX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIzMF9EQVRBMyh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjMwX0RBVEEzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMzBfTEVOR1RIKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIzMF9MRU5HVEgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjMwX0xFTkdUSCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMzBfTEVOR1RILCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMzBfVElNRVNUQU1QKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIzMF9USU1FU1RBTVApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjMwX1RJTUVTVEFNUCh2YWwpCWJmaW5fd3JpdGUxNihDQU4wX01CMzBfVElNRVNUQU1QLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMzBfSUQwKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIzMF9JRDApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjMwX0lEMCh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjMwX0lEMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ0FOMF9NQjMwX0lEMSgpCQliZmluX3JlYWQxNihDQU4wX01CMzBfSUQxKQorI2RlZmluZSBiZmluX3dyaXRlX0NBTjBfTUIzMF9JRDEodmFsKQkJYmZpbl93cml0ZTE2KENBTjBfTUIzMF9JRDEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIzMV9EQVRBMCgpCQliZmluX3JlYWQxNihDQU4wX01CMzFfREFUQTApCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjMxX0RBVEEwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMzFfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIzMV9EQVRBMSgpCQliZmluX3JlYWQxNihDQU4wX01CMzFfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjMxX0RBVEExKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMzFfREFUQTEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIzMV9EQVRBMigpCQliZmluX3JlYWQxNihDQU4wX01CMzFfREFUQTIpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjMxX0RBVEEyKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMzFfREFUQTIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIzMV9EQVRBMygpCQliZmluX3JlYWQxNihDQU4wX01CMzFfREFUQTMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjMxX0RBVEEzKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMzFfREFUQTMsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIzMV9MRU5HVEgoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjMxX0xFTkdUSCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMzFfTEVOR1RIKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIzMV9MRU5HVEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIzMV9USU1FU1RBTVAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjMxX1RJTUVTVEFNUCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMzFfVElNRVNUQU1QKHZhbCkJYmZpbl93cml0ZTE2KENBTjBfTUIzMV9USU1FU1RBTVAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NBTjBfTUIzMV9JRDAoKQkJYmZpbl9yZWFkMTYoQ0FOMF9NQjMxX0lEMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DQU4wX01CMzFfSUQwKHZhbCkJCWJmaW5fd3JpdGUxNihDQU4wX01CMzFfSUQwLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DQU4wX01CMzFfSUQxKCkJCWJmaW5fcmVhZDE2KENBTjBfTUIzMV9JRDEpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ0FOMF9NQjMxX0lEMSh2YWwpCQliZmluX3dyaXRlMTYoQ0FOMF9NQjMxX0lEMSwgdmFsKQorCisvKiBVQVJUMyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfVUFSVDNfRExMKCkJCWJmaW5fcmVhZDE2KFVBUlQzX0RMTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUM19ETEwodmFsKQliZmluX3dyaXRlMTYoVUFSVDNfRExMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUM19ETEgoKQkJYmZpbl9yZWFkMTYoVUFSVDNfRExIKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQzX0RMSCh2YWwpCWJmaW5fd3JpdGUxNihVQVJUM19ETEgsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQzX0dDVEwoKQkJYmZpbl9yZWFkMTYoVUFSVDNfR0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUM19HQ1RMKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQzX0dDVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQzX0xDUigpCQliZmluX3JlYWQxNihVQVJUM19MQ1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDNfTENSKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQzX0xDUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDNfTUNSKCkJCWJmaW5fcmVhZDE2KFVBUlQzX01DUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUM19NQ1IodmFsKQliZmluX3dyaXRlMTYoVUFSVDNfTUNSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUM19MU1IoKQkJYmZpbl9yZWFkMTYoVUFSVDNfTFNSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQzX0xTUih2YWwpCWJmaW5fd3JpdGUxNihVQVJUM19MU1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQzX01TUigpCQliZmluX3JlYWQxNihVQVJUM19NU1IpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDNfTVNSKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQzX01TUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfVUFSVDNfU0NSKCkJCWJmaW5fcmVhZDE2KFVBUlQzX1NDUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUM19TQ1IodmFsKQliZmluX3dyaXRlMTYoVUFSVDNfU0NSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUM19JRVJfU0VUKCkJYmZpbl9yZWFkMTYoVUFSVDNfSUVSX1NFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUM19JRVJfU0VUKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQzX0lFUl9TRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQzX0lFUl9DTEVBUigpCWJmaW5fcmVhZDE2KFVBUlQzX0lFUl9DTEVBUikKKyNkZWZpbmUgYmZpbl93cml0ZV9VQVJUM19JRVJfQ0xFQVIodmFsKQliZmluX3dyaXRlMTYoVUFSVDNfSUVSX0NMRUFSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9VQVJUM19USFIoKQkJYmZpbl9yZWFkMTYoVUFSVDNfVEhSKQorI2RlZmluZSBiZmluX3dyaXRlX1VBUlQzX1RIUih2YWwpCWJmaW5fd3JpdGUxNihVQVJUM19USFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX1VBUlQzX1JCUigpCQliZmluX3JlYWQxNihVQVJUM19SQlIpCisjZGVmaW5lIGJmaW5fd3JpdGVfVUFSVDNfUkJSKHZhbCkJYmZpbl93cml0ZTE2KFVBUlQzX1JCUiwgdmFsKQorCisvKiBORkMgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX05GQ19DVEwoKQkJYmZpbl9yZWFkMTYoTkZDX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ORkNfQ1RMKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfU1RBVCgpCQliZmluX3JlYWQxNihORkNfU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ORkNfU1RBVCh2YWwpCWJmaW5fd3JpdGUxNihORkNfU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0lSUVNUQVQoKQkJYmZpbl9yZWFkMTYoTkZDX0lSUVNUQVQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0lSUVNUQVQodmFsKQliZmluX3dyaXRlMTYoTkZDX0lSUVNUQVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX05GQ19JUlFNQVNLKCkJCWJmaW5fcmVhZDE2KE5GQ19JUlFNQVNLKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19JUlFNQVNLKHZhbCkJYmZpbl93cml0ZTE2KE5GQ19JUlFNQVNLLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfRUNDMCgpCQliZmluX3JlYWQxNihORkNfRUNDMCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ORkNfRUNDMCh2YWwpCWJmaW5fd3JpdGUxNihORkNfRUNDMCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0VDQzEoKQkJYmZpbl9yZWFkMTYoTkZDX0VDQzEpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0VDQzEodmFsKQliZmluX3dyaXRlMTYoTkZDX0VDQzEsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX05GQ19FQ0MyKCkJCWJmaW5fcmVhZDE2KE5GQ19FQ0MyKQorI2RlZmluZSBiZmluX3dyaXRlX05GQ19FQ0MyKHZhbCkJYmZpbl93cml0ZTE2KE5GQ19FQ0MyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfRUNDMygpCQliZmluX3JlYWQxNihORkNfRUNDMykKKyNkZWZpbmUgYmZpbl93cml0ZV9ORkNfRUNDMyh2YWwpCWJmaW5fd3JpdGUxNihORkNfRUNDMywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0NPVU5UKCkJCWJmaW5fcmVhZDE2KE5GQ19DT1VOVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ORkNfQ09VTlQodmFsKQliZmluX3dyaXRlMTYoTkZDX0NPVU5ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfUlNUKCkJCWJmaW5fcmVhZDE2KE5GQ19SU1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX1JTVCh2YWwpCQliZmluX3dyaXRlMTYoTkZDX1JTVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX1BHQ1RMKCkJCWJmaW5fcmVhZDE2KE5GQ19QR0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ORkNfUEdDVEwodmFsKQliZmluX3dyaXRlMTYoTkZDX1BHQ1RMLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfUkVBRCgpCQliZmluX3JlYWQxNihORkNfUkVBRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ORkNfUkVBRCh2YWwpCWJmaW5fd3JpdGUxNihORkNfUkVBRCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0FERFIoKQkJYmZpbl9yZWFkMTYoTkZDX0FERFIpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0FERFIodmFsKQliZmluX3dyaXRlMTYoTkZDX0FERFIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX05GQ19DTUQoKQkJYmZpbl9yZWFkMTYoTkZDX0NNRCkKKyNkZWZpbmUgYmZpbl93cml0ZV9ORkNfQ01EKHZhbCkJCWJmaW5fd3JpdGUxNihORkNfQ01ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ORkNfREFUQV9XUigpCQliZmluX3JlYWQxNihORkNfREFUQV9XUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ORkNfREFUQV9XUih2YWwpCWJmaW5fd3JpdGUxNihORkNfREFUQV9XUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfTkZDX0RBVEFfUkQoKQkJYmZpbl9yZWFkMTYoTkZDX0RBVEFfUkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfTkZDX0RBVEFfUkQodmFsKQliZmluX3dyaXRlMTYoTkZDX0RBVEFfUkQsIHZhbCkKKworLyogQ291bnRlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfQ05UX0NPTkZJRygpCQliZmluX3JlYWQxNihDTlRfQ09ORklHKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9DT05GSUcodmFsKQliZmluX3dyaXRlMTYoQ05UX0NPTkZJRywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ05UX0lNQVNLKCkJCWJmaW5fcmVhZDE2KENOVF9JTUFTSykKKyNkZWZpbmUgYmZpbl93cml0ZV9DTlRfSU1BU0sodmFsKQliZmluX3dyaXRlMTYoQ05UX0lNQVNLLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DTlRfU1RBVFVTKCkJCWJmaW5fcmVhZDE2KENOVF9TVEFUVVMpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ05UX1NUQVRVUyh2YWwpCWJmaW5fd3JpdGUxNihDTlRfU1RBVFVTLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DTlRfQ09NTUFORCgpCQliZmluX3JlYWQxNihDTlRfQ09NTUFORCkKKyNkZWZpbmUgYmZpbl93cml0ZV9DTlRfQ09NTUFORCh2YWwpCWJmaW5fd3JpdGUxNihDTlRfQ09NTUFORCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ05UX0RFQk9VTkNFKCkJYmZpbl9yZWFkMTYoQ05UX0RFQk9VTkNFKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9ERUJPVU5DRSh2YWwpCWJmaW5fd3JpdGUxNihDTlRfREVCT1VOQ0UsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0NOVF9DT1VOVEVSKCkJCWJmaW5fcmVhZDMyKENOVF9DT1VOVEVSKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9DT1VOVEVSKHZhbCkJYmZpbl93cml0ZTMyKENOVF9DT1VOVEVSLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9DTlRfTUFYKCkJCWJmaW5fcmVhZDMyKENOVF9NQVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfQ05UX01BWCh2YWwpCQliZmluX3dyaXRlMzIoQ05UX01BWCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfQ05UX01JTigpCQliZmluX3JlYWQzMihDTlRfTUlOKQorI2RlZmluZSBiZmluX3dyaXRlX0NOVF9NSU4odmFsKQkJYmZpbl93cml0ZTMyKENOVF9NSU4sIHZhbCkKKworLyogT1RQL0ZVU0UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgYmZpbl9yZWFkX09UUF9DT05UUk9MKCkJCWJmaW5fcmVhZDE2KE9UUF9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX09UUF9DT05UUk9MKHZhbCkJYmZpbl93cml0ZTE2KE9UUF9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9PVFBfQkVOKCkJCWJmaW5fcmVhZDE2KE9UUF9CRU4pCisjZGVmaW5lIGJmaW5fd3JpdGVfT1RQX0JFTih2YWwpCQliZmluX3dyaXRlMTYoT1RQX0JFTiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfT1RQX1NUQVRVUygpCQliZmluX3JlYWQxNihPVFBfU1RBVFVTKQorI2RlZmluZSBiZmluX3dyaXRlX09UUF9TVEFUVVModmFsKQliZmluX3dyaXRlMTYoT1RQX1NUQVRVUywgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfT1RQX1RJTUlORygpCQliZmluX3JlYWQzMihPVFBfVElNSU5HKQorI2RlZmluZSBiZmluX3dyaXRlX09UUF9USU1JTkcodmFsKQliZmluX3dyaXRlMzIoT1RQX1RJTUlORywgdmFsKQorCisvKiBTZWN1cml0eSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBiZmluX3JlYWRfU0VDVVJFX1NZU1NXVCgpCWJmaW5fcmVhZDMyKFNFQ1VSRV9TWVNTV1QpCisjZGVmaW5lIGJmaW5fd3JpdGVfU0VDVVJFX1NZU1NXVCh2YWwpCWJmaW5fd3JpdGUzMihTRUNVUkVfU1lTU1dULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TRUNVUkVfQ09OVFJPTCgpCWJmaW5fcmVhZDE2KFNFQ1VSRV9DT05UUk9MKQorI2RlZmluZSBiZmluX3dyaXRlX1NFQ1VSRV9DT05UUk9MKHZhbCkJYmZpbl93cml0ZTE2KFNFQ1VSRV9DT05UUk9MLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9TRUNVUkVfU1RBVFVTKCkJYmZpbl9yZWFkMTYoU0VDVVJFX1NUQVRVUykKKyNkZWZpbmUgYmZpbl93cml0ZV9TRUNVUkVfU1RBVFVTKHZhbCkJYmZpbl93cml0ZTE2KFNFQ1VSRV9TVEFUVVMsIHZhbCkKKworLyogRE1BIFBlcmliZmluX3JlYWRfKCloZXJhbCBNdXggUmVnaXN0ZXIgKi8KKworI2RlZmluZSBiZmluX3JlYWRfRE1BQzFfUEVSSU1VWCgpCWJmaW5fcmVhZDE2KERNQUMxX1BFUklNVVgpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzFfUEVSSU1VWCh2YWwpCWJmaW5fd3JpdGUxNihETUFDMV9QRVJJTVVYLCB2YWwpCisKKy8qIE9UUCBSZWFkL1dyaXRlIERhdGEgQnVmZmVyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIGJmaW5fcmVhZF9PVFBfREFUQTAoKQkJYmZpbl9yZWFkMzIoT1RQX0RBVEEwKQorI2RlZmluZSBiZmluX3dyaXRlX09UUF9EQVRBMCh2YWwpCWJmaW5fd3JpdGUzMihPVFBfREFUQTAsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX09UUF9EQVRBMSgpCQliZmluX3JlYWQzMihPVFBfREFUQTEpCisjZGVmaW5lIGJmaW5fd3JpdGVfT1RQX0RBVEExKHZhbCkJYmZpbl93cml0ZTMyKE9UUF9EQVRBMSwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfT1RQX0RBVEEyKCkJCWJmaW5fcmVhZDMyKE9UUF9EQVRBMikKKyNkZWZpbmUgYmZpbl93cml0ZV9PVFBfREFUQTIodmFsKQliZmluX3dyaXRlMzIoT1RQX0RBVEEyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9PVFBfREFUQTMoKQkJYmZpbl9yZWFkMzIoT1RQX0RBVEEzKQorI2RlZmluZSBiZmluX3dyaXRlX09UUF9EQVRBMyh2YWwpCWJmaW5fd3JpdGUzMihPVFBfREFUQTMsIHZhbCkKKworLyogSGFuZHNoYWtlIE1ETUEgaXMgbm90IGRlZmluZWQgaW4gdGhlIHNoYXJlZCBmaWxlIGJlY2F1c2UgaXQgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgQURTUC1CRjU0MiBiZmluX3JlYWRfKClyb2Nlc3NvciAqLworCisvKiBsZWdhY3kgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgYmZpbl9yZWFkX0VCSVVfQU1DQkNUTDAJCWJmaW5fcmVhZF9FQklVX0FNQkNUTDAKKyNkZWZpbmUgYmZpbl93cml0ZV9FQklVX0FNQ0JDVEwwCWJmaW5fd3JpdGVfRUJJVV9BTUJDVEwwCisjZGVmaW5lIGJmaW5fcmVhZF9FQklVX0FNQ0JDVEwxCQliZmluX3JlYWRfRUJJVV9BTUJDVEwxCisjZGVmaW5lIGJmaW5fd3JpdGVfRUJJVV9BTUNCQ1RMMQliZmluX3dyaXRlX0VCSVVfQU1CQ1RMMQorI2RlZmluZSBiZmluX3JlYWRfUElOVDBfSVJRCQliZmluX3JlYWRfUElOVDBfUkVRVUVTVAorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQwX0lSUQkJYmZpbl93cml0ZV9QSU5UMF9SRVFVRVNUCisjZGVmaW5lIGJmaW5fcmVhZF9QSU5UMV9JUlEJCWJmaW5fcmVhZF9QSU5UMV9SRVFVRVNUCisjZGVmaW5lIGJmaW5fd3JpdGVfUElOVDFfSVJRCQliZmluX3dyaXRlX1BJTlQxX1JFUVVFU1QKKyNkZWZpbmUgYmZpbl9yZWFkX1BJTlQyX0lSUQkJYmZpbl9yZWFkX1BJTlQyX1JFUVVFU1QKKyNkZWZpbmUgYmZpbl93cml0ZV9QSU5UMl9JUlEJCWJmaW5fd3JpdGVfUElOVDJfUkVRVUVTVAorI2RlZmluZSBiZmluX3JlYWRfUElOVDNfSVJRCQliZmluX3JlYWRfUElOVDNfUkVRVUVTVAorI2RlZmluZSBiZmluX3dyaXRlX1BJTlQzX0lSUQkJYmZpbl93cml0ZV9QSU5UM19SRVFVRVNUCisKKyNlbmRpZiAvKiBfQ0RFRl9CRjU0WF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDIuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzk2OGZjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0Mi5oCkBAIC0wLDAgKzEsMTIwNiBAQAorLyoKKyAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0Mi5oCisgKiBCYXNlZCBvbjoKKyAqIEF1dGhvcjoKKyAqCisgKiBDcmVhdGVkOgorICogRGVzY3JpcHRpb246CisgKgorICogUmV2OgorICoKKyAqIE1vZGlmaWVkOgorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX0RFRl9CRjU0Ml9ICisjZGVmaW5lIF9ERUZfQkY1NDJfSAorCisvKiBJbmNsdWRlIGFsbCBDb3JlIHJlZ2lzdGVycyBhbmQgYml0IGRlZmluaXRpb25zICovCisjaW5jbHVkZSA8YXNtL21hY2gtY29tbW9uL2RlZl9MUEJsYWNrZmluLmg+CisKKy8qIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTQyICovCisKKy8qIEluY2x1ZGUgZGVmQkY1NHhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjU0eCBwcm9jZXNzb3JzICovCisjaW5jbHVkZSAiZGVmQkY1NHhfYmFzZS5oIgorCisvKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgI2RlZmluZXMgbmVlZGVkIGJ5IEFEU1AtQkY1NDIgdGhhdCBhcmUgbm90IGluIHRoZSBjb21tb24gaGVhZGVyICovCisKKy8qIEFUQVBJIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBVEFQSV9DT05UUk9MICAweGZmYzAzODAwICAgLyogQVRBUEkgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFUQVBJX1NUQVRVUyAgMHhmZmMwMzgwNCAgIC8qIEFUQVBJIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBBVEFQSV9ERVZfQUREUiAgMHhmZmMwMzgwOCAgIC8qIEFUQVBJIERldmljZSBSZWdpc3RlciBBZGRyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQVRBUElfREVWX1RYQlVGICAweGZmYzAzODBjICAgLyogQVRBUEkgRGV2aWNlIFJlZ2lzdGVyIFdyaXRlIERhdGEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBBVEFQSV9ERVZfUlhCVUYgIDB4ZmZjMDM4MTAgICAvKiBBVEFQSSBEZXZpY2UgUmVnaXN0ZXIgUmVhZCBEYXRhICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEFUQVBJX0lOVF9NQVNLICAweGZmYzAzODE0ICAgLyogQVRBUEkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIEFUQVBJX0lOVF9TVEFUVVMgIDB4ZmZjMDM4MTggICAvKiBBVEFQSSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEFUQVBJX1hGRVJfTEVOICAweGZmYzAzODFjICAgLyogQVRBUEkgTGVuZ3RoIG9mIFRyYW5zZmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIEFUQVBJX0xJTkVfU1RBVFVTICAweGZmYzAzODIwICAgLyogQVRBUEkgTGluZSBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQVRBUElfU01fU1RBVEUgIDB4ZmZjMDM4MjQgICAvKiBBVEFQSSBTdGF0ZSBNYWNoaW5lIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1RFUk1JTkFURSAgMHhmZmMwMzgyOCAgIC8qIEFUQVBJIEhvc3QgVGVybWluYXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBBVEFQSV9QSU9fVEZSQ05UICAweGZmYzAzODJjICAgLyogQVRBUEkgUElPIG1vZGUgdHJhbnNmZXIgY291bnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIEFUQVBJX0RNQV9URlJDTlQgIDB4ZmZjMDM4MzAgICAvKiBBVEFQSSBETUEgbW9kZSB0cmFuc2ZlciBjb3VudCAqLworI2RlZmluZSAgICAgICAgICAgICAgIEFUQVBJX1VNQUlOX1RGUkNOVCAgMHhmZmMwMzgzNCAgIC8qIEFUQVBJIFVETUFJTiB0cmFuc2ZlciBjb3VudCAqLworI2RlZmluZSAgICAgICAgICAgICBBVEFQSV9VRE1BT1VUX1RGUkNOVCAgMHhmZmMwMzgzOCAgIC8qIEFUQVBJIFVETUFPVVQgdHJhbnNmZXIgY291bnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBBVEFQSV9SRUdfVElNXzAgIDB4ZmZjMDM4NDAgICAvKiBBVEFQSSBSZWdpc3RlciBUcmFuc2ZlciBUaW1pbmcgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1BJT19USU1fMCAgMHhmZmMwMzg0NCAgIC8qIEFUQVBJIFBJTyBUaW1pbmcgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1BJT19USU1fMSAgMHhmZmMwMzg0OCAgIC8qIEFUQVBJIFBJTyBUaW1pbmcgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMCAgMHhmZmMwMzg1MCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMSAgMHhmZmMwMzg1NCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMiAgMHhmZmMwMzg1OCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMCAgMHhmZmMwMzg2MCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMSAgMHhmZmMwMzg2NCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMiAgMHhmZmMwMzg2OCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMyAgMHhmZmMwMzg2YyAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMyBSZWdpc3RlciAqLworCisvKiBTREggUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0RIX1BXUl9DVEwgIDB4ZmZjMDM5MDAgICAvKiBTREggUG93ZXIgQ29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTREhfQ0xLX0NUTCAgMHhmZmMwMzkwNCAgIC8qIFNESCBDbG9jayBDb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0RIX0FSR1VNRU5UICAweGZmYzAzOTA4ICAgLyogU0RIIEFyZ3VtZW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNESF9DT01NQU5EICAweGZmYzAzOTBjICAgLyogU0RIIENvbW1hbmQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTREhfUkVTUF9DTUQgIDB4ZmZjMDM5MTAgICAvKiBTREggUmVzcG9uc2UgQ29tbWFuZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX1JFU1BPTlNFMCAgMHhmZmMwMzkxNCAgIC8qIFNESCBSZXNwb25zZTAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNESF9SRVNQT05TRTEgIDB4ZmZjMDM5MTggICAvKiBTREggUmVzcG9uc2UxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTREhfUkVTUE9OU0UyICAweGZmYzAzOTFjICAgLyogU0RIIFJlc3BvbnNlMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX1JFU1BPTlNFMyAgMHhmZmMwMzkyMCAgIC8qIFNESCBSZXNwb25zZTMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0RIX0RBVEFfVElNRVIgIDB4ZmZjMDM5MjQgICAvKiBTREggRGF0YSBUaW1lciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX0RBVEFfTEdUSCAgMHhmZmMwMzkyOCAgIC8qIFNESCBEYXRhIExlbmd0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNESF9EQVRBX0NUTCAgMHhmZmMwMzkyYyAgIC8qIFNESCBEYXRhIENvbnRyb2wgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTREhfREFUQV9DTlQgIDB4ZmZjMDM5MzAgICAvKiBTREggRGF0YSBDb3VudGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBTREhfU1RBVFVTICAweGZmYzAzOTM0ICAgLyogU0RIIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTREhfU1RBVFVTX0NMUiAgMHhmZmMwMzkzOCAgIC8qIFNESCBTdGF0dXMgQ2xlYXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTREhfTUFTSzAgIDB4ZmZjMDM5M2MgICAvKiBTREggSW50ZXJydXB0MCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU0RIX01BU0sxICAweGZmYzAzOTQwICAgLyogU0RIIEludGVycnVwdDEgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNESF9GSUZPX0NOVCAgMHhmZmMwMzk0OCAgIC8qIFNESCBGSUZPIENvdW50ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU0RIX0ZJRk8gIDB4ZmZjMDM5ODAgICAvKiBTREggRGF0YSBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0RIX0VfU1RBVFVTICAweGZmYzAzOWMwICAgLyogU0RIIEV4Y2VwdGlvbiBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFNESF9FX01BU0sgIDB4ZmZjMDM5YzQgICAvKiBTREggRXhjZXB0aW9uIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9DRkcgIDB4ZmZjMDM5YzggICAvKiBTREggQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTREhfUkRfV0FJVF9FTiAgMHhmZmMwMzljYyAgIC8qIFNESCBSZWFkIFdhaXQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQwICAweGZmYzAzOWQwICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24wICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQxICAweGZmYzAzOWQ0ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24xICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQyICAweGZmYzAzOWQ4ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQzICAweGZmYzAzOWRjICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24zICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ0ICAweGZmYzAzOWUwICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb240ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ1ICAweGZmYzAzOWU0ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb241ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ2ICAweGZmYzAzOWU4ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb242ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ3ICAweGZmYzAzOWVjICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb243ICovCisKKy8qIFVTQiBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0ZBRERSICAweGZmYzAzYzAwICAgLyogRnVuY3Rpb24gYWRkcmVzcyByZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9QT1dFUiAgMHhmZmMwM2MwNCAgIC8qIFBvd2VyIG1hbmFnZW1lbnQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVFggIDB4ZmZjMDNjMDggICAvKiBJbnRlcnJ1cHQgcmVnaXN0ZXIgZm9yIGVuZHBvaW50IDAgYW5kIFR4IGVuZHBvaW50IDEgdG8gNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0lOVFJSWCAgMHhmZmMwM2MwYyAgIC8qIEludGVycnVwdCByZWdpc3RlciBmb3IgUnggZW5kcG9pbnRzIDEgdG8gNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlRYRSAgMHhmZmMwM2MxMCAgIC8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgZm9yIEludHJUeCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlJYRSAgMHhmZmMwM2MxNCAgIC8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgZm9yIEludHJSeCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlVTQiAgMHhmZmMwM2MxOCAgIC8qIEludGVycnVwdCByZWdpc3RlciBmb3IgY29tbW9uIFVTQiBpbnRlcnJ1cHRzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX0lOVFJVU0JFICAweGZmYzAzYzFjICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clVTQiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9GUkFNRSAgMHhmZmMwM2MyMCAgIC8qIFVTQiBmcmFtZSBudW1iZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfSU5ERVggIDB4ZmZjMDNjMjQgICAvKiBJbmRleCByZWdpc3RlciBmb3Igc2VsZWN0aW5nIHRoZSBpbmRleGVkIGVuZHBvaW50IHJlZ2lzdGVycyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9URVNUTU9ERSAgMHhmZmMwM2MyOCAgIC8qIEVuYWJsZWQgVVNCIDIwIHRlc3QgbW9kZXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfR0xPQklOVFIgIDB4ZmZjMDNjMmMgICAvKiBHbG9iYWwgSW50ZXJydXB0IE1hc2sgcmVnaXN0ZXIgYW5kIFdha2V1cCBFeGNlcHRpb24gSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9HTE9CQUxfQ1RMICAweGZmYzAzYzMwICAgLyogR2xvYmFsIENsb2NrIENvbnRyb2wgZm9yIHRoZSBjb3JlICovCisKKy8qIFVTQiBQYWNrZXQgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfVFhfTUFYX1BBQ0tFVCAgMHhmZmMwM2M0MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0NTUjAgIDB4ZmZjMDNjNDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCBhbmQgQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfVFhDU1IgIDB4ZmZjMDNjNDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCBhbmQgQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX1JYX01BWF9QQUNLRVQgIDB4ZmZjMDNjNDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1JYQ1NSICAweGZmYzAzYzRjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFVTQl9DT1VOVDAgIDB4ZmZjMDNjNTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQgMCBGSUZPIGFuZCBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVU0JfUlhDT1VOVCAgMHhmZmMwM2M1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludCAwIEZJRk8gYW5kIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBIb3N0IFR4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVU0JfVFhUWVBFICAweGZmYzAzYzU0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVVNCX05BS0xJTUlUMCAgMHhmZmMwM2M1OCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50IDAgYW5kIG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFR4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9UWElOVEVSVkFMICAweGZmYzAzYzU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCBhbmQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFVTQl9SWFRZUEUgIDB4ZmZjMDNjNWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9SWElOVEVSVkFMICAweGZmYzAzYzYwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0IGFuZCBJc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWENPVU5UICAweGZmYzAzYzY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHNlbGVjdGVkIGVuZHBvaW50IFR4IEZJRk8gKi8KKworLyogVVNCIEVuZHBvaW50IEZJRk8gUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfRVAwX0ZJRk8gIDB4ZmZjMDNjODAgICAvKiBFbmRwb2ludCAwIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfRVAxX0ZJRk8gIDB4ZmZjMDNjODggICAvKiBFbmRwb2ludCAxIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfRVAyX0ZJRk8gIDB4ZmZjMDNjOTAgICAvKiBFbmRwb2ludCAyIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfRVAzX0ZJRk8gIDB4ZmZjMDNjOTggICAvKiBFbmRwb2ludCAzIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfRVA0X0ZJRk8gIDB4ZmZjMDNjYTAgICAvKiBFbmRwb2ludCA0IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfRVA1X0ZJRk8gIDB4ZmZjMDNjYTggICAvKiBFbmRwb2ludCA1IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfRVA2X0ZJRk8gIDB4ZmZjMDNjYjAgICAvKiBFbmRwb2ludCA2IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfRVA3X0ZJRk8gIDB4ZmZjMDNjYjggICAvKiBFbmRwb2ludCA3IEZJRk8gKi8KKworLyogVVNCIE9URyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX09UR19ERVZfQ1RMICAweGZmYzAzZDAwICAgLyogT1RHIERldmljZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfT1RHX1ZCVVNfSVJRICAweGZmYzAzZDA0ICAgLyogT1RHIFZCVVMgQ29udHJvbCBJbnRlcnJ1cHRzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9PVEdfVkJVU19NQVNLICAweGZmYzAzZDA4ICAgLyogVkJVUyBDb250cm9sIEludGVycnVwdCBFbmFibGUgKi8KKworLyogVVNCIFBoeSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX0xJTktJTkZPICAweGZmYzAzZDQ4ICAgLyogRW5hYmxlcyBwcm9ncmFtbWluZyBvZiBzb21lIFBIWS1zaWRlIGRlbGF5cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9WUExFTiAgMHhmZmMwM2Q0YyAgIC8qIERldGVybWluZXMgZHVyYXRpb24gb2YgVkJVUyBwdWxzZSBmb3IgVkJVUyBjaGFyZ2luZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVU0JfSFNfRU9GMSAgMHhmZmMwM2Q1MCAgIC8qIFRpbWUgYnVmZmVyIGZvciBIaWdoLVNwZWVkIHRyYW5zYWN0aW9ucyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVU0JfRlNfRU9GMSAgMHhmZmMwM2Q1NCAgIC8qIFRpbWUgYnVmZmVyIGZvciBGdWxsLVNwZWVkIHRyYW5zYWN0aW9ucyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVU0JfTFNfRU9GMSAgMHhmZmMwM2Q1OCAgIC8qIFRpbWUgYnVmZmVyIGZvciBMb3ctU3BlZWQgdHJhbnNhY3Rpb25zICovCisKKy8qIChBUEhZX0NOVFJMIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfQVBIWV9DTlRSTCAgMHhmZmMwM2RlMCAgIC8qIFJlZ2lzdGVyIHRoYXQgaW5jcmVhc2VzIHZpc2liaWxpdHkgb2YgQW5hbG9nIFBIWSAqLworCisvKiAoQVBIWV9DQUxJQiBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX0FQSFlfQ0FMSUIgIDB4ZmZjMDNkZTQgICAvKiBSZWdpc3RlciB1c2VkIHRvIHNldCBzb21lIGNhbGlicmF0aW9uIHZhbHVlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9BUEhZX0NOVFJMMiAgMHhmZmMwM2RlOCAgIC8qIFJlZ2lzdGVyIHVzZWQgdG8gcHJldmVudCByZS1lbnVtZXJhdGlvbiBvbmNlIE1vYWIgZ29lcyBpbnRvIGhpYmVybmF0ZSBtb2RlICovCisKKy8qIChQSFlfVEVTVCBpcyBmb3IgQURJIHVzYWdlIG9ubHkpICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfUEhZX1RFU1QgIDB4ZmZjMDNkZWMgICAvKiBVc2VkIGZvciByZWR1Y2luZyBzaW11bGF0aW9uIHRpbWUgYW5kIHNpbXBsaWZpZXMgRklGTyB0ZXN0YWJpbGl0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9QTExPU0NfQ1RSTCAgMHhmZmMwM2RmMCAgIC8qIFVzZWQgdG8gcHJvZ3JhbSBkaWZmZXJlbnQgcGFyYW1ldGVycyBmb3IgVVNCIFBMTCBhbmQgT3NjaWxsYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfU1JQX0NMS0RJViAgMHhmZmMwM2RmNCAgIC8qIFVzZWQgdG8gcHJvZ3JhbSBjbG9jayBkaXZpZGUgdmFsdWUgZm9yIHRoZSBjbG9jayBmZWQgdG8gdGhlIFNSUCBkZXRlY3Rpb24gbG9naWMgKi8KKworLyogVVNCIEVuZHBvaW50IDAgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYTUFYUCAgMHhmZmMwM2UwMCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYQ1NSICAweGZmYzAzZTA0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50IDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWE1BWFAgIDB4ZmZjMDNlMDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWENTUiAgMHhmZmMwM2UwYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfUlhDT1VOVCAgMHhmZmMwM2UxMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludCAwIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9UWFRZUEUgIDB4ZmZjMDNlMTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhJTlRFUlZBTCAgMHhmZmMwM2UxOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50IDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWFRZUEUgIDB4ZmZjMDNlMWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50MCAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTBfUlhJTlRFUlZBTCAgMHhmZmMwM2UyMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50MCAqLworCisvKiBVU0IgRW5kcG9pbnQgMSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMF9UWENPVU5UICAweGZmYzAzZTI4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50MCBUeCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhNQVhQICAweGZmYzAzZTQwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhDU1IgIDB4ZmZjMDNlNDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhNQVhQICAweGZmYzAzZTQ4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhDU1IgIDB4ZmZjMDNlNGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1JYQ09VTlQgIDB4ZmZjMDNlNTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQxIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWFRZUEUgIDB4ZmZjMDNlNTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhJTlRFUlZBTCAgMHhmZmMwM2U1OCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1JYVFlQRSAgMHhmZmMwM2U1YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMV9SWElOVEVSVkFMICAweGZmYzAzZTYwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQxICovCisKKy8qIFVTQiBFbmRwb2ludCAyIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1RYQ09VTlQgIDB4ZmZjMDNlNjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUrSDEwMiBlbmRwb2ludDEgVHggRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1RYTUFYUCAgMHhmZmMwM2U4MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1RYQ1NSICAweGZmYzAzZTg0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYTUFYUCAgMHhmZmMwM2U4OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYQ1NSICAweGZmYzAzZThjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMl9SWENPVU5UICAweGZmYzAzZTkwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50MiBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhUWVBFICAweGZmYzAzZTk0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkyX1RYSU5URVJWQUwgIDB4ZmZjMDNlOTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMl9SWFRZUEUgIDB4ZmZjMDNlOWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhJTlRFUlZBTCAgMHhmZmMwM2VhMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50MiAqLworCisvKiBVU0IgRW5kcG9pbnQgMyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMl9UWENPVU5UICAweGZmYzAzZWE4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50MiBUeCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhNQVhQICAweGZmYzAzZWMwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhDU1IgIDB4ZmZjMDNlYzQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhNQVhQICAweGZmYzAzZWM4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhDU1IgIDB4ZmZjMDNlY2MgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1JYQ09VTlQgIDB4ZmZjMDNlZDAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQzIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWFRZUEUgIDB4ZmZjMDNlZDQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhJTlRFUlZBTCAgMHhmZmMwM2VkOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1JYVFlQRSAgMHhmZmMwM2VkYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JM19SWElOVEVSVkFMICAweGZmYzAzZWUwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQzICovCisKKy8qIFVTQiBFbmRwb2ludCA0IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1RYQ09VTlQgIDB4ZmZjMDNlZTggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgSDEyNGVuZHBvaW50MyBUeCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhNQVhQICAweGZmYzAzZjAwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhDU1IgIDB4ZmZjMDNmMDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhNQVhQICAweGZmYzAzZjA4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhDU1IgIDB4ZmZjMDNmMGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1JYQ09VTlQgIDB4ZmZjMDNmMTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQ0IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWFRZUEUgIDB4ZmZjMDNmMTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhJTlRFUlZBTCAgMHhmZmMwM2YxOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1JYVFlQRSAgMHhmZmMwM2YxYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNF9SWElOVEVSVkFMICAweGZmYzAzZjIwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQ0ICovCisKKy8qIFVTQiBFbmRwb2ludCA1IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1RYQ09VTlQgIDB4ZmZjMDNmMjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQ0IFR4IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9UWE1BWFAgIDB4ZmZjMDNmNDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9UWENTUiAgMHhmZmMwM2Y0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWE1BWFAgIDB4ZmZjMDNmNDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWENTUiAgMHhmZmMwM2Y0YyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfUlhDT1VOVCAgMHhmZmMwM2Y1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDUgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYVFlQRSAgMHhmZmMwM2Y1NCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNV9UWElOVEVSVkFMICAweGZmYzAzZjU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfUlhUWVBFICAweGZmYzAzZjVjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk1X1JYSU5URVJWQUwgIDB4ZmZjMDNmNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDUgKi8KKworLyogVVNCIEVuZHBvaW50IDYgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfVFhDT1VOVCAgMHhmZmMwM2Y2OCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBIMTQ1ZW5kcG9pbnQ1IFR4IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNl9UWE1BWFAgIDB4ZmZjMDNmODAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNl9UWENTUiAgMHhmZmMwM2Y4NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWE1BWFAgIDB4ZmZjMDNmODggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWENTUiAgMHhmZmMwM2Y4YyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfUlhDT1VOVCAgMHhmZmMwM2Y5MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDYgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYVFlQRSAgMHhmZmMwM2Y5NCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNl9UWElOVEVSVkFMICAweGZmYzAzZjk4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfUlhUWVBFICAweGZmYzAzZjljICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDYgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk2X1JYSU5URVJWQUwgIDB4ZmZjMDNmYTAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDYgKi8KKworLyogVVNCIEVuZHBvaW50IDcgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhDT1VOVCAgMHhmZmMwM2ZhOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDYgVHggRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1RYTUFYUCAgMHhmZmMwM2ZjMCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1RYQ1NSICAweGZmYzAzZmM0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYTUFYUCAgMHhmZmMwM2ZjOCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYQ1NSICAweGZmYzAzZmNjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JN19SWENPVU5UICAweGZmYzAzZmQwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NyBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhUWVBFICAweGZmYzAzZmQ0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk3X1RYSU5URVJWQUwgIDB4ZmZjMDNmZDggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JN19SWFRZUEUgIDB4ZmZjMDNmZGMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NyAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhJTlRFUlZBTCAgMHhmZmMwM2ZmMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NyAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhDT1VOVCAgMHhmZmMwM2ZmOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDcgVHggRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BX0lOVEVSUlVQVCAgMHhmZmMwNDAwMCAgIC8qIEluZGljYXRlcyBwZW5kaW5nIGludGVycnVwdHMgZm9yIHRoZSBETUEgY2hhbm5lbHMgKi8KKworLyogVVNCIENoYW5uZWwgMCBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMENPTlRST0wgIDB4ZmZjMDQwMDQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgMCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTBBRERSTE9XICAweGZmYzA0MDA4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMEFERFJISUdIICAweGZmYzA0MDBjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMENPVU5UTE9XICAweGZmYzA0MDEwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTBDT1VOVEhJR0ggIDB4ZmZjMDQwMTQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMCAqLworCisvKiBVU0IgQ2hhbm5lbCAxIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUExQ09OVFJPTCAgMHhmZmMwNDAyNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAxIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMUFERFJMT1cgIDB4ZmZjMDQwMjggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUExQUREUkhJR0ggIDB4ZmZjMDQwMmMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUExQ09VTlRMT1cgIDB4ZmZjMDQwMzAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BMUNPVU5USElHSCAgMHhmZmMwNDAzNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAxICovCisKKy8qIFVTQiBDaGFubmVsIDIgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTJDT05UUk9MICAweGZmYzA0MDQ0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDIgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEyQUREUkxPVyAgMHhmZmMwNDA0OCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTJBRERSSElHSCAgMHhmZmMwNDA0YyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTJDT1VOVExPVyAgMHhmZmMwNDA1MCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUEyQ09VTlRISUdIICAweGZmYzA0MDU0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDIgKi8KKworLyogVVNCIENoYW5uZWwgMyBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BM0NPTlRST0wgIDB4ZmZjMDQwNjQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgMyBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTNBRERSTE9XICAweGZmYzA0MDY4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BM0FERFJISUdIICAweGZmYzA0MDZjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BM0NPVU5UTE9XICAweGZmYzA0MDcwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTNDT1VOVEhJR0ggIDB4ZmZjMDQwNzQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMyAqLworCisvKiBVU0IgQ2hhbm5lbCA0IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE0Q09OVFJPTCAgMHhmZmMwNDA4NCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCA0IGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNEFERFJMT1cgIDB4ZmZjMDQwODggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE0QUREUkhJR0ggIDB4ZmZjMDQwOGMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE0Q09VTlRMT1cgIDB4ZmZjMDQwOTAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BNENPVU5USElHSCAgMHhmZmMwNDA5NCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA0ICovCisKKy8qIFVTQiBDaGFubmVsIDUgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTVDT05UUk9MICAweGZmYzA0MGE0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDUgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE1QUREUkxPVyAgMHhmZmMwNDBhOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTVBRERSSElHSCAgMHhmZmMwNDBhYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTVDT1VOVExPVyAgMHhmZmMwNDBiMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE1Q09VTlRISUdIICAweGZmYzA0MGI0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDUgKi8KKworLyogVVNCIENoYW5uZWwgNiBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNkNPTlRST0wgIDB4ZmZjMDQwYzQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgNiBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTZBRERSTE9XICAweGZmYzA0MGM4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNkFERFJISUdIICAweGZmYzA0MGNjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNkNPVU5UTE9XICAweGZmYzA0MGQwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTZDT1VOVEhJR0ggIDB4ZmZjMDQwZDQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNiAqLworCisvKiBVU0IgQ2hhbm5lbCA3IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE3Q09OVFJPTCAgMHhmZmMwNDBlNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCA3IGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BN0FERFJMT1cgIDB4ZmZjMDQwZTggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE3QUREUkhJR0ggIDB4ZmZjMDQwZWMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE3Q09VTlRMT1cgIDB4ZmZjMDQwZjAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BN0NPVU5USElHSCAgMHhmZmMwNDBmNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA3ICovCisKKy8qIEtleXBhZCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBLUEFEX0NUTCAgMHhmZmMwNDEwMCAgIC8qIENvbnRyb2xzIGtleXBhZCBtb2R1bGUgZW5hYmxlIGFuZCBkaXNhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBLUEFEX1BSRVNDQUxFICAweGZmYzA0MTA0ICAgLyogRXN0YWJsaXNoIGEgdGltZSBiYXNlIGZvciBwcm9ncmFtaW5nIHRoZSBLUEFEX01TRUwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBLUEFEX01TRUwgIDB4ZmZjMDQxMDggICAvKiBTZWxlY3RzIGRlbGF5IHBhcmFtZXRlcnMgZm9yIGtleXBhZCBpbnRlcmZhY2Ugc2Vuc2l0aXZpdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgS1BBRF9ST1dDT0wgIDB4ZmZjMDQxMGMgICAvKiBDYXB0dXJlcyB0aGUgcm93IGFuZCBjb2x1bW4gb3V0cHV0IHZhbHVlcyBvZiB0aGUga2V5cyBwcmVzc2VkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgS1BBRF9TVEFUICAweGZmYzA0MTEwICAgLyogSG9sZHMgYW5kIGNsZWFycyB0aGUgc3RhdHVzIG9mIHRoZSBrZXlwYWQgaW50ZXJmYWNlIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgS1BBRF9TT0ZURVZBTCAgMHhmZmMwNDExNCAgIC8qIExldHMgc29mdHdhcmUgZm9yY2Uga2V5cGFkIGludGVyZmFjZSB0byBjaGVjayBmb3Iga2V5cyBiZWluZyBwcmVzc2VkICovCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogICAgIFNJTkdMRSBCSVQgTUFDUk8gUEFJUlMgKGJpdCBtYXNrIGFuZCBuZWdhdGVkIG9uZSkgICAgICAqLworLyogICAgIGFuZCBNVUxUSSBCSVQgUkVBRCBNQUNST1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBCaXQgbWFza3MgZm9yIEtQQURfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgS1BBRF9FTiAgMHgxICAgICAgICAvKiBLZXlwYWQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbktQQURfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIEtQQURfSVJRTU9ERSAgMHg2ICAgICAgICAvKiBLZXkgUHJlc3MgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBLUEFEX1JPV0VOICAweDFjMDAgICAgIC8qIFJvdyBFbmFibGUgV2lkdGggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgS1BBRF9DT0xFTiAgMHhlMDAwICAgICAvKiBDb2x1bW4gRW5hYmxlIFdpZHRoICovCisKKy8qIEJpdCBtYXNrcyBmb3IgS1BBRF9QUkVTQ0FMRSAqLworCisjZGVmaW5lICAgICAgICAgS1BBRF9QUkVTQ0FMRV9WQUwgIDB4M2YgICAgICAgLyogS2V5IFByZXNjYWxlIFZhbHVlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgS1BBRF9NU0VMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgREJPTl9TQ0FMRSAgMHhmZiAgICAgICAvKiBEZWJvdW5jZSBTY2FsZSBWYWx1ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgQ09MRFJWX1NDQUxFICAweGZmMDAgICAgIC8qIENvbHVtbiBEcml2ZXIgU2NhbGUgVmFsdWUgKi8KKworLyogQml0IG1hc2tzIGZvciBLUEFEX1JPV0NPTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgS1BBRF9ST1cgIDB4ZmYgICAgICAgLyogUm93cyBQcmVzc2VkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgS1BBRF9DT0wgIDB4ZmYwMCAgICAgLyogQ29sdW1ucyBQcmVzc2VkICovCisKKy8qIEJpdCBtYXNrcyBmb3IgS1BBRF9TVEFUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBLUEFEX0lSUSAgMHgxICAgICAgICAvKiBLZXlwYWQgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbktQQURfSVJRICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBLUEFEX01ST1dDT0wgIDB4NiAgICAgICAgLyogTXVsdGlwbGUgUm93L0NvbHVtbiBLZXlwcmVzcyBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIEtQQURfUFJFU1NFRCAgMHg4ICAgICAgICAvKiBLZXkgcHJlc3MgY3VycmVudCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbktQQURfUFJFU1NFRCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEtQQURfU09GVEVWQUwgKi8KKworI2RlZmluZSAgICAgICAgICAgS1BBRF9TT0ZURVZBTF9FICAweDIgICAgICAgIC8qIFNvZnR3YXJlIFByb2dyYW1tYWJsZSBGb3JjZSBFdmFsdWF0ZSAqLworI2RlZmluZSAgICAgICAgICBuS1BBRF9TT0ZURVZBTF9FICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0NPTU1BTkQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfSURYICAweDNmICAgICAgIC8qIENvbW1hbmQgSW5kZXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX1JTUCAgMHg0MCAgICAgICAvKiBSZXNwb25zZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DTURfUlNQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBDTURfTF9SU1AgIDB4ODAgICAgICAgLyogTG9uZyBSZXNwb25zZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuQ01EX0xfUlNQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBDTURfSU5UX0UgIDB4MTAwICAgICAgLyogQ29tbWFuZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkNNRF9JTlRfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBDTURfUEVORF9FICAweDIwMCAgICAgIC8qIENvbW1hbmQgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5DTURfUEVORF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ01EX0UgIDB4NDAwICAgICAgLyogQ29tbWFuZCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DTURfRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNESF9QV1JfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBXUl9PTiAgMHgzICAgICAgICAvKiBQb3dlciBPbiAqLworI2lmIDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRCRCAgMHgzYyAgICAgICAvKiBUQkQgKi8KKyNlbmRpZgorI2RlZmluZSAgICAgICAgICAgICAgICAgU0RfQ01EX09EICAweDQwICAgICAgIC8qIE9wZW4gRHJhaW4gT3V0cHV0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5TRF9DTURfT0QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUk9EX0NUTCAgMHg4MCAgICAgICAvKiBSb2QgQ29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ST0RfQ1RMICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0NMS19DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0xLRElWICAweGZmICAgICAgIC8qIE1DX0NMSyBEaXZpc29yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0xLX0UgIDB4MTAwICAgICAgLyogTUNfQ0xLIEJ1cyBDbG9jayBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DTEtfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFBXUl9TVl9FICAweDIwMCAgICAgIC8qIFBvd2VyIFNhdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUFdSX1NWX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgQ0xLRElWX0JZUEFTUyAgMHg0MDAgICAgICAvKiBCeXBhc3MgRGl2aXNvciAqLworI2RlZmluZSAgICAgICAgICAgIG5DTEtESVZfQllQQVNTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgV0lERV9CVVMgIDB4ODAwICAgICAgLyogV2lkZSBCdXMgTW9kZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5XSURFX0JVUyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNESF9SRVNQX0NNRCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUkVTUF9DTUQgIDB4M2YgICAgICAgLyogUmVzcG9uc2UgQ29tbWFuZCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9EQVRBX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRFRYX0UgIDB4MSAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5EVFhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBEVFhfRElSICAweDIgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRGlyZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRUWF9ESVIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBEVFhfTU9ERSAgMHg0ICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5EVFhfTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRFRYX0RNQV9FICAweDggICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRE1BIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuRFRYX0RNQV9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBEVFhfQkxLX0xHVEggIDB4ZjAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBCbG9jayBMZW5ndGggKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIENNRF9DUkNfRkFJTCAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkNNRF9DUkNfRkFJTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgREFUX0NSQ19GQUlMICAweDIgICAgICAgIC8qIERhdGEgQ1JDIEZhaWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRBVF9DUkNfRkFJTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIENNRF9USU1FT1VUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCAqLworI2RlZmluZSAgICAgICAgICAgICAgbkNNRF9USU1FT1VUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgREFUX1RJTUVPVVQgIDB4OCAgICAgICAgLyogRGF0YSBUaW1lIE91dCAqLworI2RlZmluZSAgICAgICAgICAgICAgbkRBVF9USU1FT1VUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgVFhfVU5ERVJSVU4gIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5UWF9VTkRFUlJVTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBSWF9PVkVSUlVOICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5SWF9PVkVSUlVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBDTURfUkVTUF9FTkQgIDB4NDAgICAgICAgLyogQ01EIFJlc3BvbnNlIEVuZCAqLworI2RlZmluZSAgICAgICAgICAgICBuQ01EX1JFU1BfRU5EICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ01EX1NFTlQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5DTURfU0VOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBEQVRfRU5EICAweDEwMCAgICAgIC8qIERhdGEgRW5kICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRBVF9FTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgU1RBUlRfQklUX0VSUiAgMHgyMDAgICAgICAvKiBTdGFydCBCaXQgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICBuU1RBUlRfQklUX0VSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIERBVF9CTEtfRU5EICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kICovCisjZGVmaW5lICAgICAgICAgICAgICBuREFUX0JMS19FTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX0FDVCAgMHg4MDAgICAgICAvKiBDTUQgQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkNNRF9BQ1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRYX0FDVCAgMHgxMDAwICAgICAvKiBUcmFuc21pdCBBY3RpdmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRYX0FDVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUlhfQUNUICAweDIwMDAgICAgIC8qIFJlY2VpdmUgQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5SWF9BQ1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fU1RBVCAgMHg0MDAwICAgICAvKiBUcmFuc21pdCBGSUZPIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuVFhfRklGT19TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBSWF9GSUZPX1NUQVQgIDB4ODAwMCAgICAgLyogUmVjZWl2ZSBGSUZPIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuUlhfRklGT19TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX0ZVTEwgIDB4MTAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsICovCisjZGVmaW5lICAgICAgICAgICAgIG5UWF9GSUZPX0ZVTEwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fRlVMTCAgMHgyMDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRnVsbCAqLworI2RlZmluZSAgICAgICAgICAgICBuUlhfRklGT19GVUxMICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX1pFUk8gIDB4NDAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBFbXB0eSAqLworI2RlZmluZSAgICAgICAgICAgICBuVFhfRklGT19aRVJPICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgUlhfREFUX1pFUk8gIDB4ODAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEVtcHR5ICovCisjZGVmaW5lICAgICAgICAgICAgICBuUlhfREFUX1pFUk8gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgVFhfREFUX1JEWSAgMHgxMDAwMDAgICAvKiBUcmFuc21pdCBEYXRhIEF2YWlsYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5UWF9EQVRfUkRZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgUlhfRklGT19SRFkgIDB4MjAwMDAwICAgLyogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgblJYX0ZJRk9fUkRZICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1NUQVRVU19DTFIgKi8KKworI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9TVEFUICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgIG5DTURfQ1JDX0ZBSUxfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIERBVF9DUkNfRkFJTF9TVEFUICAweDIgICAgICAgIC8qIERhdGEgQ1JDIEZhaWwgU3RhdHVzICovCisjZGVmaW5lICAgICAgICBuREFUX0NSQ19GQUlMX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgQ01EX1RJTUVPVVRfU1RBVCAgMHg0ICAgICAgICAvKiBDTUQgVGltZSBPdXQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgbkNNRF9USU1FT1VUX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfU1RBVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgIG5EQVRfVElNRU9VVF9TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFRYX1VOREVSUlVOX1NUQVQgIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgblRYX1VOREVSUlVOX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgIFJYX09WRVJSVU5fU1RBVCAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgIG5SWF9PVkVSUlVOX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfU1RBVCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgbkNNRF9SRVNQX0VORF9TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIENNRF9TRU5UX1NUQVQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgbkNNRF9TRU5UX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERBVF9FTkRfU1RBVCAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRBVF9FTkRfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9TVEFUICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgblNUQVJUX0JJVF9FUlJfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBEQVRfQkxLX0VORF9TVEFUICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgIG5EQVRfQkxLX0VORF9TVEFUICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX01BU0swICovCisKKyNkZWZpbmUgICAgICAgICBDTURfQ1JDX0ZBSUxfTUFTSyAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgTWFzayAqLworI2RlZmluZSAgICAgICAgbkNNRF9DUkNfRkFJTF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX01BU0sgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBNYXNrICovCisjZGVmaW5lICAgICAgICBuREFUX0NSQ19GQUlMX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgQ01EX1RJTUVPVVRfTUFTSyAgMHg0ICAgICAgICAvKiBDTUQgVGltZSBPdXQgTWFzayAqLworI2RlZmluZSAgICAgICAgIG5DTURfVElNRU9VVF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIERBVF9USU1FT1VUX01BU0sgIDB4OCAgICAgICAgLyogRGF0YSBUaW1lIE91dCBNYXNrICovCisjZGVmaW5lICAgICAgICAgbkRBVF9USU1FT1VUX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fTUFTSyAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBNYXNrICovCisjZGVmaW5lICAgICAgICAgblRYX1VOREVSUlVOX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgIFJYX09WRVJSVU5fTUFTSyAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gTWFzayAqLworI2RlZmluZSAgICAgICAgICBuUlhfT1ZFUlJVTl9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgQ01EX1JFU1BfRU5EX01BU0sgIDB4NDAgICAgICAgLyogQ01EIFJlc3BvbnNlIEVuZCBNYXNrICovCisjZGVmaW5lICAgICAgICBuQ01EX1JFU1BfRU5EX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfTUFTSyAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgbkNNRF9TRU5UX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERBVF9FTkRfTUFTSyAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgIG5EQVRfRU5EX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgIFNUQVJUX0JJVF9FUlJfTUFTSyAgMHgyMDAgICAgICAvKiBTdGFydCBCaXQgRXJyb3IgTWFzayAqLworI2RlZmluZSAgICAgICBuU1RBUlRfQklUX0VSUl9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX01BU0sgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgTWFzayAqLworI2RlZmluZSAgICAgICAgIG5EQVRfQkxLX0VORF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBDTURfQUNUX01BU0sgIDB4ODAwICAgICAgLyogQ01EIEFjdGl2ZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgIG5DTURfQUNUX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBUWF9BQ1RfTUFTSyAgMHgxMDAwICAgICAvKiBUcmFuc21pdCBBY3RpdmUgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgblRYX0FDVF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgUlhfQUNUX01BU0sgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgblJYX0FDVF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgVFhfRklGT19TVEFUX01BU0sgIDB4NDAwMCAgICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgTWFzayAqLworI2RlZmluZSAgICAgICAgblRYX0ZJRk9fU1RBVF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgUlhfRklGT19TVEFUX01BU0sgIDB4ODAwMCAgICAgLyogUmVjZWl2ZSBGSUZPIFN0YXR1cyBNYXNrICovCisjZGVmaW5lICAgICAgICBuUlhfRklGT19TVEFUX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBUWF9GSUZPX0ZVTExfTUFTSyAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgTWFzayAqLworI2RlZmluZSAgICAgICAgblRYX0ZJRk9fRlVMTF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgUlhfRklGT19GVUxMX01BU0sgIDB4MjAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgTWFzayAqLworI2RlZmluZSAgICAgICAgblJYX0ZJRk9fRlVMTF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgVFhfRklGT19aRVJPX01BU0sgIDB4NDAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBFbXB0eSBNYXNrICovCisjZGVmaW5lICAgICAgICBuVFhfRklGT19aRVJPX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgUlhfREFUX1pFUk9fTUFTSyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgTWFzayAqLworI2RlZmluZSAgICAgICAgIG5SWF9EQVRfWkVST19NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICBUWF9EQVRfUkRZX01BU0sgIDB4MTAwMDAwICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgTWFzayAqLworI2RlZmluZSAgICAgICAgICBuVFhfREFUX1JEWV9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFJYX0ZJRk9fUkRZX01BU0sgIDB4MjAwMDAwICAgLyogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgblJYX0ZJRk9fUkRZX01BU0sgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBTREhfRklGT19DTlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0NPVU5UICAweDdmZmYgICAgIC8qIEZJRk8gQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfRV9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgU0RJT19JTlRfREVUICAweDIgICAgICAgIC8qIFNESU8gSW50IERldGVjdGVkICovCisjZGVmaW5lICAgICAgICAgICAgIG5TRElPX0lOVF9ERVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBTRF9DQVJEX0RFVCAgMHgxMCAgICAgICAvKiBTRCBDYXJkIERldGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgblNEX0NBUkRfREVUICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0VfTUFTSyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgU0RJT19NU0sgIDB4MiAgICAgICAgLyogTWFzayBTRElPIEludCBEZXRlY3RlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblNESU9fTVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNDRF9NU0sgIDB4NDAgICAgICAgLyogTWFzayBDYXJkIERldGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TQ0RfTVNLICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0NGRyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENMS1NfRU4gIDB4MSAgICAgICAgLyogQ2xvY2tzIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DTEtTX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNENEUgIDB4NCAgICAgICAgLyogU0RJTyA0LUJpdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuU0Q0RSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTVdFICAweDggICAgICAgIC8qIE1vdmluZyBXaW5kb3cgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NV0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNEX1JTVCAgMHgxMCAgICAgICAvKiBTRE1NQyBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuU0RfUlNUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBQVVBfU0REQVQgIDB4MjAgICAgICAgLyogUHVsbC11cCBTRF9EQVQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblBVUF9TRERBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBQVVBfU0REQVQzICAweDQwICAgICAgIC8qIFB1bGwtdXAgU0RfREFUMyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5QVVBfU0REQVQzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBQRF9TRERBVDMgIDB4ODAgICAgICAgLyogUHVsbC1kb3duIFNEX0RBVDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblBEX1NEREFUMyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNESF9SRF9XQUlUX0VOICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJXUiAgMHgxICAgICAgICAvKiBSZWFkIFdhaXQgUmVxdWVzdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuUldSICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfQ09OVFJPTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBQSU9fU1RBUlQgIDB4MSAgICAgICAgLyogU3RhcnQgUElPL1JlZyBPcCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuUElPX1NUQVJUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgTVVMVElfU1RBUlQgIDB4MiAgICAgICAgLyogU3RhcnQgTXVsdGktRE1BIE9wICovCisjZGVmaW5lICAgICAgICAgICAgICBuTVVMVElfU1RBUlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBVTFRSQV9TVEFSVCAgMHg0ICAgICAgICAvKiBTdGFydCBVbHRyYS1ETUEgT3AgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5VTFRSQV9TVEFSVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFhGRVJfRElSICAweDggICAgICAgIC8qIFRyYW5zZmVyIERpcmVjdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblhGRVJfRElSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSU9SRFlfRU4gIDB4MTAgICAgICAgLyogSU9SRFkgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSU9SRFlfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRklGT19GTFVTSCAgMHgyMCAgICAgICAvKiBGbHVzaCBGSUZPcyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5GSUZPX0ZMVVNIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgU09GVF9SU1QgIDB4NDAgICAgICAgLyogU29mdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblNPRlRfUlNUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERFVl9SU1QgIDB4ODAgICAgICAgLyogRGV2aWNlIFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRFVl9SU1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgVEZSQ05UX1JTVCAgMHgxMDAgICAgICAvKiBUcmFucyBDb3VudCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5URlJDTlRfUlNUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgRU5EX09OX1RFUk0gIDB4MjAwICAgICAgLyogRW5kL1Rlcm1pbmF0ZSBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5FTkRfT05fVEVSTSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIFBJT19VU0VfRE1BICAweDQwMCAgICAgIC8qIFBJTy1ETUEgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICBuUElPX1VTRV9ETUEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgVURNQUlOX0ZJRk9fVEhSUyAgMHhmMDAwICAgICAvKiBVbHRyYSBETUEtSU4gRklGTyBUaHJlc2hvbGQgKi8KKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIFBJT19YRkVSX09OICAweDEgICAgICAgIC8qIFBJTyB0cmFuc2ZlciBpbiBwcm9ncmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICAgblBJT19YRkVSX09OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIE1VTFRJX1hGRVJfT04gIDB4MiAgICAgICAgLyogTXVsdGktd29yZCBETUEgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICBuTVVMVElfWEZFUl9PTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBVTFRSQV9YRkVSX09OICAweDQgICAgICAgIC8qIFVsdHJhIERNQSB0cmFuc2ZlciBpbiBwcm9ncmVzcyAqLworI2RlZmluZSAgICAgICAgICAgIG5VTFRSQV9YRkVSX09OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgVUxUUkFfSU5fRkwgIDB4ZjAgICAgICAgLyogVWx0cmEgRE1BIElucHV0IEZJRk8gTGV2ZWwgKi8KKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9ERVZfQUREUiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgREVWX0FERFIgIDB4MWYgICAgICAgLyogRGV2aWNlIEFkZHJlc3MgKi8KKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9JTlRfTUFTSyAqLworCisjZGVmaW5lICAgICAgICBBVEFQSV9ERVZfSU5UX01BU0sgIDB4MSAgICAgICAgLyogRGV2aWNlIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICAgICAgIG5BVEFQSV9ERVZfSU5UX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgUElPX0RPTkVfTUFTSyAgMHgyICAgICAgICAvKiBQSU8gdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgICAgICAgICAgIG5QSU9fRE9ORV9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICBNVUxUSV9ET05FX01BU0sgIDB4NCAgICAgICAgLyogTXVsdGktRE1BIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgbk1VTFRJX0RPTkVfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBVRE1BSU5fRE9ORV9NQVNLICAweDggICAgICAgIC8qIFVsdHJhLURNQSBpbiB0cmFuc2ZlciBkb25lIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICAgICAgICAgblVETUFJTl9ET05FX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBVRE1BT1VUX0RPTkVfTUFTSyAgMHgxMCAgICAgICAvKiBVbHRyYS1ETUEgb3V0IHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgICAgICAgIG5VRE1BT1VUX0RPTkVfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICBIT1NUX1RFUk1fWEZFUl9NQVNLICAweDIwICAgICAgIC8qIEhvc3QgdGVybWluYXRlIGN1cnJlbnQgdHJhbnNmZXIgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgICAgICBuSE9TVF9URVJNX1hGRVJfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgTVVMVElfVEVSTV9NQVNLICAweDQwICAgICAgIC8qIERldmljZSB0ZXJtaW5hdGUgTXVsdGktRE1BIHRyYW5zZmVyIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICAgICAgICAgIG5NVUxUSV9URVJNX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgVURNQUlOX1RFUk1fTUFTSyAgMHg4MCAgICAgICAvKiBEZXZpY2UgdGVybWluYXRlIFVsdHJhLURNQS1pbiB0cmFuc2ZlciBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgICAgICAgIG5VRE1BSU5fVEVSTV9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgVURNQU9VVF9URVJNX01BU0sgIDB4MTAwICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBVbHRyYS1ETUEtb3V0IHRyYW5zZmVyIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICAgICAgICBuVURNQU9VVF9URVJNX01BU0sgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9JTlRfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgQVRBUElfREVWX0lOVCAgMHgxICAgICAgICAvKiBEZXZpY2UgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgIG5BVEFQSV9ERVZfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBQSU9fRE9ORV9JTlQgIDB4MiAgICAgICAgLyogUElPIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuUElPX0RPTkVfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgTVVMVElfRE9ORV9JTlQgIDB4NCAgICAgICAgLyogTXVsdGktRE1BIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgbk1VTFRJX0RPTkVfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICBVRE1BSU5fRE9ORV9JTlQgIDB4OCAgICAgICAgLyogVWx0cmEtRE1BIGluIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICBuVURNQUlOX0RPTkVfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFVETUFPVVRfRE9ORV9JTlQgIDB4MTAgICAgICAgLyogVWx0cmEtRE1BIG91dCB0cmFuc2ZlciBkb25lIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICBuVURNQU9VVF9ET05FX0lOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgSE9TVF9URVJNX1hGRVJfSU5UICAweDIwICAgICAgIC8qIEhvc3QgdGVybWluYXRlIGN1cnJlbnQgdHJhbnNmZXIgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICBuSE9TVF9URVJNX1hGRVJfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgTVVMVElfVEVSTV9JTlQgIDB4NDAgICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBNdWx0aS1ETUEgdHJhbnNmZXIgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgbk1VTFRJX1RFUk1fSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICBVRE1BSU5fVEVSTV9JTlQgIDB4ODAgICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBVbHRyYS1ETUEtaW4gdHJhbnNmZXIgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICBuVURNQUlOX1RFUk1fSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFVETUFPVVRfVEVSTV9JTlQgIDB4MTAwICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBVbHRyYS1ETUEtb3V0IHRyYW5zZmVyIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICBuVURNQU9VVF9URVJNX0lOVCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX0xJTkVfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgQVRBUElfSU5UUiAgMHgxICAgICAgICAvKiBEZXZpY2UgaW50ZXJydXB0IHRvIGhvc3QgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQVRBUElfSU5UUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9EQVNQICAweDIgICAgICAgIC8qIERldmljZSBkYXNwIHRvIGhvc3QgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQVRBUElfREFTUCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9DUzBOICAweDQgICAgICAgIC8qIEFUQVBJIGNoaXAgc2VsZWN0IDAgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQVRBUElfQ1MwTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9DUzFOICAweDggICAgICAgIC8qIEFUQVBJIGNoaXAgc2VsZWN0IDEgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQVRBUElfQ1MxTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9BRERSICAweDcwICAgICAgIC8qIEFUQVBJIGFkZHJlc3MgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIEFUQVBJX0RNQVJFUSAgMHg4MCAgICAgICAvKiBBVEFQSSBETUEgcmVxdWVzdCBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuQVRBUElfRE1BUkVRICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIEFUQVBJX0RNQUFDS04gIDB4MTAwICAgICAgLyogQVRBUEkgRE1BIGFja25vd2xlZGdlIGxpbmUgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgbkFUQVBJX0RNQUFDS04gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBBVEFQSV9ESU9XTiAgMHgyMDAgICAgICAvKiBBVEFQSSB3cml0ZSBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgbkFUQVBJX0RJT1dOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgQVRBUElfRElPUk4gIDB4NDAwICAgICAgLyogQVRBUEkgcmVhZCBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgbkFUQVBJX0RJT1JOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgQVRBUElfSU9SRFkgIDB4ODAwICAgICAgLyogQVRBUEkgSU9SRFkgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5BVEFQSV9JT1JEWSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1NNX1NUQVRFICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgUElPX0NTVEFURSAgMHhmICAgICAgICAvKiBQSU8gbW9kZSBzdGF0ZSBtYWNoaW5lIGN1cnJlbnQgc3RhdGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgRE1BX0NTVEFURSAgMHhmMCAgICAgICAvKiBETUEgbW9kZSBzdGF0ZSBtYWNoaW5lIGN1cnJlbnQgc3RhdGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgVURNQUlOX0NTVEFURSAgMHhmMDAgICAgICAvKiBVbHRyYSBETUEtSW4gbW9kZSBzdGF0ZSBtYWNoaW5lIGN1cnJlbnQgc3RhdGUgKi8KKyNkZWZpbmUgICAgICAgICAgICBVRE1BT1VUX0NTVEFURSAgMHhmMDAwICAgICAvKiBBVEFQSSBJT1JEWSBsaW5lIHN0YXR1cyAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1RFUk1JTkFURSAqLworCisjZGVmaW5lICAgICAgICAgICBBVEFQSV9IT1NUX1RFUk0gIDB4MSAgICAgICAgLyogSG9zdCB0ZXJtaW5hdGlvbmF0aW9uICovCisjZGVmaW5lICAgICAgICAgIG5BVEFQSV9IT1NUX1RFUk0gIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9SRUdfVElNXzAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVDJfUkVHICAweGZmICAgICAgIC8qIEVuZCBvZiBjeWNsZSB0aW1lIGZvciByZWdpc3RlciBhY2Nlc3MgdHJhbnNmZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVEVPQ19SRUcgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBESU9SL0RJT1cgcHVsc2V3aWR0aCAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1BJT19USU1fMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUMV9SRUcgIDB4ZiAgICAgICAgLyogVGltZSBmcm9tIGFkZHJlc3MgdmFsaWQgdG8gRElPUi9ESU9XICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFQyX1JFR19QSU8gIDB4ZmYwICAgICAgLyogRElPUi9ESU9XIHB1bHNld2lkdGggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFQ0X1JFRyAgMHhmMDAwICAgICAvKiBESU9XIGRhdGEgaG9sZCAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1BJT19USU1fMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICBURU9DX1JFR19QSU8gIDB4ZmYgICAgICAgLyogRW5kIG9mIGN5Y2xlIHRpbWUgZm9yIFBJTyBhY2Nlc3MgdHJhbnNmZXJzLiAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8wICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBURCAgMHhmZiAgICAgICAvKiBESU9SL0RJT1cgYXNzZXJ0ZWQgcHVsc2V3aWR0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFRNICAweGZmMDAgICAgIC8qIFRpbWUgZnJvbSBhZGRyZXNzIHZhbGlkIHRvIERJT1IvRElPVyAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8xICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRLVyAgMHhmZiAgICAgICAvKiBTZWxlY3RzIERJT1cgbmVnYXRlZCBwdWxzZXdpZHRoICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUS1IgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBESU9SIG5lZ2F0ZWQgcHVsc2V3aWR0aCAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8yICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBUSCAgMHhmZiAgICAgICAvKiBTZWxlY3RzIERJT1cgZGF0YSBob2xkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRFT0MgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBlbmQgb2YgY3ljbGUgZm9yIERNQSAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1VMVFJBX1RJTV8wICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEFDSyAgMHhmZiAgICAgICAvKiBTZWxlY3RzIHNldHVwIGFuZCBob2xkIHRpbWVzIGZvciBUQUNLICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRFTlYgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBlbnZlbG9wZSB0aW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVUxUUkFfVElNXzEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBURFZTICAweGZmICAgICAgIC8qIFNlbGVjdHMgZGF0YSB2YWxpZCBzZXR1cCB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBUQ1lDX1REVlMgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBjeWNsZSB0aW1lIC0gVERWUyB0aW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVUxUUkFfVElNXzIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVFNTICAweGZmICAgICAgIC8qIFNlbGVjdHMgdGltZSBmcm9tIFNUUk9CRSBlZGdlIHRvIG5lZ2F0aW9uIG9mIERNQVJRIG9yIGFzc2VydGlvbiBvZiBTVE9QICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRNTEkgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBpbnRlcmxvY2sgdGltZSAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1VMVFJBX1RJTV8zICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFpBSCAgMHhmZiAgICAgICAvKiBTZWxlY3RzIG1pbmltdW0gZGVsYXkgcmVxdWlyZWQgZm9yIG91dHB1dCAqLworI2RlZmluZSAgICAgICAgICAgICAgIFJFQURZX1BBVVNFICAweGZmMDAgICAgIC8qIFNlbGVjdHMgcmVhZHkgdG8gcGF1c2UgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfRkFERFIgKi8KKworI2RlZmluZSAgICAgICAgICBGVU5DVElPTl9BRERSRVNTICAweDdmICAgICAgIC8qIEZ1bmN0aW9uIGFkZHJlc3MgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfUE9XRVIgKi8KKworI2RlZmluZSAgICAgICAgICAgRU5BQkxFX1NVU1BFTkRNICAweDEgICAgICAgIC8qIGVuYWJsZSBTdXNwZW5kTSBvdXRwdXQgKi8KKyNkZWZpbmUgICAgICAgICAgbkVOQUJMRV9TVVNQRU5ETSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgU1VTUEVORF9NT0RFICAweDIgICAgICAgIC8qIFN1c3BlbmQgTW9kZSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblNVU1BFTkRfTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIFJFU1VNRV9NT0RFICAweDQgICAgICAgIC8qIERNQSBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICBuUkVTVU1FX01PREUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSRVNFVCAgMHg4ICAgICAgICAvKiBSZXNldCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SRVNFVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBIU19NT0RFICAweDEwICAgICAgIC8qIEhpZ2ggU3BlZWQgbW9kZSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuSFNfTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgSFNfRU5BQkxFICAweDIwICAgICAgIC8qIGhpZ2ggU3BlZWQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5IU19FTkFCTEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFNPRlRfQ09OTiAgMHg0MCAgICAgICAvKiBTb2Z0IGNvbm5lY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblNPRlRfQ09OTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJU09fVVBEQVRFICAweDgwICAgICAgIC8qIElzb2Nocm9ub3VzIHVwZGF0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5JU09fVVBEQVRFICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJUWCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDBfVFggIDB4MSAgICAgICAgLyogVHggRW5kcG9pbnQgMCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQMF9UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAxX1RYICAweDIgICAgICAgIC8qIFR4IEVuZHBvaW50IDEgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDFfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMl9UWCAgMHg0ICAgICAgICAvKiBUeCBFbmRwb2ludCAyIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAyX1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDNfVFggIDB4OCAgICAgICAgLyogVHggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQM19UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA0X1RYICAweDEwICAgICAgIC8qIFR4IEVuZHBvaW50IDQgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDRfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNV9UWCAgMHgyMCAgICAgICAvKiBUeCBFbmRwb2ludCA1IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA1X1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDZfVFggIDB4NDAgICAgICAgLyogVHggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNl9UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA3X1RYICAweDgwICAgICAgIC8qIFR4IEVuZHBvaW50IDcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDdfVFggIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlJYICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMV9SWCAgMHgyICAgICAgICAvKiBSeCBFbmRwb2ludCAxIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAxX1JYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDJfUlggIDB4NCAgICAgICAgLyogUnggRW5kcG9pbnQgMiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQMl9SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAzX1JYICAweDggICAgICAgIC8qIFJ4IEVuZHBvaW50IDMgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDNfUlggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNF9SWCAgMHgxMCAgICAgICAvKiBSeCBFbmRwb2ludCA0IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA0X1JYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDVfUlggIDB4MjAgICAgICAgLyogUnggRW5kcG9pbnQgNSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNV9SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA2X1JYICAweDQwICAgICAgIC8qIFJ4IEVuZHBvaW50IDYgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDZfUlggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQN19SWCAgMHg4MCAgICAgICAvKiBSeCBFbmRwb2ludCA3IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA3X1JYICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJUWEUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMF9UWF9FICAweDEgICAgICAgIC8qIEVuZHBvaW50IDAgaW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQMF9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAxX1RYX0UgIDB4MiAgICAgICAgLyogVHggRW5kcG9pbnQgMSBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQMV9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAyX1RYX0UgIDB4NCAgICAgICAgLyogVHggRW5kcG9pbnQgMiBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQMl9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAzX1RYX0UgIDB4OCAgICAgICAgLyogVHggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQM19UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA0X1RYX0UgIDB4MTAgICAgICAgLyogVHggRW5kcG9pbnQgNCBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNF9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA1X1RYX0UgIDB4MjAgICAgICAgLyogVHggRW5kcG9pbnQgNSBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNV9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA2X1RYX0UgIDB4NDAgICAgICAgLyogVHggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNl9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA3X1RYX0UgIDB4ODAgICAgICAgLyogVHggRW5kcG9pbnQgNyBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQN19UWF9FICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJSWEUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMV9SWF9FICAweDIgICAgICAgIC8qIFJ4IEVuZHBvaW50IDEgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDFfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMl9SWF9FICAweDQgICAgICAgIC8qIFJ4IEVuZHBvaW50IDIgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDJfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQM19SWF9FICAweDggICAgICAgIC8qIFJ4IEVuZHBvaW50IDMgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDNfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNF9SWF9FICAweDEwICAgICAgIC8qIFJ4IEVuZHBvaW50IDQgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDRfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNV9SWF9FICAweDIwICAgICAgIC8qIFJ4IEVuZHBvaW50IDUgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDVfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNl9SWF9FICAweDQwICAgICAgIC8qIFJ4IEVuZHBvaW50IDYgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDZfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQN19SWF9FICAweDgwICAgICAgIC8qIFJ4IEVuZHBvaW50IDcgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDdfUlhfRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSVVNCICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFNVU1BFTkRfQiAgMHgxICAgICAgICAvKiBTdXNwZW5kIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuU1VTUEVORF9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUkVTVU1FX0IgIDB4MiAgICAgICAgLyogUmVzdW1lIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblJFU1VNRV9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFJFU0VUX09SX0JBQkxFX0IgIDB4NCAgICAgICAgLyogUmVzZXQvYmFiYmxlIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgIG5SRVNFVF9PUl9CQUJMRV9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU09GX0IgIDB4OCAgICAgICAgLyogU3RhcnQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5TT0ZfQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ09OTl9CICAweDEwICAgICAgIC8qIENvbm5lY3Rpb24gaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DT05OX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBESVNDT05fQiAgMHgyMCAgICAgICAvKiBEaXNjb25uZWN0IGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRJU0NPTl9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIFNFU1NJT05fUkVRX0IgIDB4NDAgICAgICAgLyogU2Vzc2lvbiBSZXF1ZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgblNFU1NJT05fUkVRX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFZCVVNfRVJST1JfQiAgMHg4MCAgICAgICAvKiBWYnVzIHRocmVzaG9sZCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblZCVVNfRVJST1JfQiAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSVVNCRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFNVU1BFTkRfQkUgIDB4MSAgICAgICAgLyogU3VzcGVuZCBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5TVVNQRU5EX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBSRVNVTUVfQkUgIDB4MiAgICAgICAgLyogUmVzdW1lIGluZGljYXRvciBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5SRVNVTUVfQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBSRVNFVF9PUl9CQUJMRV9CRSAgMHg0ICAgICAgICAvKiBSZXNldC9iYWJibGUgaW5kaWNhdG9yIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgIG5SRVNFVF9PUl9CQUJMRV9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU09GX0JFICAweDggICAgICAgIC8qIFN0YXJ0IG9mIGZyYW1lIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblNPRl9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDT05OX0JFICAweDEwICAgICAgIC8qIENvbm5lY3Rpb24gaW5kaWNhdG9yIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ09OTl9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRElTQ09OX0JFICAweDIwICAgICAgIC8qIERpc2Nvbm5lY3QgaW5kaWNhdG9yIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkRJU0NPTl9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgIFNFU1NJT05fUkVRX0JFICAweDQwICAgICAgIC8qIFNlc3Npb24gUmVxdWVzdCBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICBuU0VTU0lPTl9SRVFfQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgVkJVU19FUlJPUl9CRSAgMHg4MCAgICAgICAvKiBWYnVzIHRocmVzaG9sZCBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgIG5WQlVTX0VSUk9SX0JFICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0ZSQU1FICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIEZSQU1FX05VTUJFUiAgMHg3ZmYgICAgICAvKiBGcmFtZSBudW1iZXIgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5ERVggKi8KKworI2RlZmluZSAgICAgICAgIFNFTEVDVEVEX0VORFBPSU5UICAweGYgICAgICAgIC8qIHNlbGVjdGVkIGVuZHBvaW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0dMT0JBTF9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBHTE9CQUxfRU5BICAweDEgICAgICAgIC8qIGVuYWJsZXMgVVNCIG1vZHVsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5HTE9CQUxfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQMV9UWF9FTkEgIDB4MiAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgMSBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVAxX1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDJfVFhfRU5BICAweDQgICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDIgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQMl9UWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVAzX1RYX0VOQSAgMHg4ICAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCAzIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDNfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQNF9UWF9FTkEgIDB4MTAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgNCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA0X1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDVfVFhfRU5BICAweDIwICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDUgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQNV9UWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVA2X1RYX0VOQSAgMHg0MCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA2IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDZfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQN19UWF9FTkEgIDB4ODAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgNyBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA3X1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDFfUlhfRU5BICAweDEwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgMSBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVAxX1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDJfUlhfRU5BICAweDIwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgMiBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVAyX1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDNfUlhfRU5BICAweDQwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgMyBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVAzX1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDRfUlhfRU5BICAweDgwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA0X1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDVfUlhfRU5BICAweDEwMDAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNSBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA1X1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDZfUlhfRU5BICAweDIwMDAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNiBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA2X1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDdfUlhfRU5BICAweDQwMDAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNyBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA3X1JYX0VOQSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9PVEdfREVWX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFU1NJT04gIDB4MSAgICAgICAgLyogc2Vzc2lvbiBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuU0VTU0lPTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfUkVRICAweDIgICAgICAgIC8qIEhvc3QgbmVnb3RpYXRpb24gcmVxdWVzdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkhPU1RfUkVRICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX01PREUgIDB4NCAgICAgICAgLyogaW5kaWNhdGVzIFVTQkRSQyBpcyBhIGhvc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkhPU1RfTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFZCVVMwICAweDggICAgICAgIC8qIFZidXMgbGV2ZWwgaW5kaWNhdG9yWzBdICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVkJVUzAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBWQlVTMSAgMHgxMCAgICAgICAvKiBWYnVzIGxldmVsIGluZGljYXRvclsxXSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblZCVVMxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTFNERVYgIDB4MjAgICAgICAgLyogTG93LXNwZWVkIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkxTREVWICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRlNERVYgIDB4NDAgICAgICAgLyogRnVsbCBvciBIaWdoLXNwZWVkIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkZTREVWICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQl9ERVZJQ0UgIDB4ODAgICAgICAgLyogQScgb3IgJ0InIGRldmljZSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5CX0RFVklDRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9PVEdfVkJVU19JUlEgKi8KKworI2RlZmluZSAgICAgICAgICAgICBEUklWRV9WQlVTX09OICAweDEgICAgICAgIC8qIGluZGljYXRvciB0byBkcml2ZSBWQlVTIGNvbnRyb2wgY2lyY3VpdCAqLworI2RlZmluZSAgICAgICAgICAgIG5EUklWRV9WQlVTX09OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgRFJJVkVfVkJVU19PRkYgIDB4MiAgICAgICAgLyogaW5kaWNhdG9yIHRvIHNodXQgb2ZmIGNoYXJnZSBwdW1wICovCisjZGVmaW5lICAgICAgICAgICBuRFJJVkVfVkJVU19PRkYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgIENIUkdfVkJVU19TVEFSVCAgMHg0ICAgICAgICAvKiBpbmRpY2F0b3IgZm9yIGV4dGVybmFsIGNpcmN1aXQgdG8gc3RhcnQgY2hhcmdpbmcgVkJVUyAqLworI2RlZmluZSAgICAgICAgICBuQ0hSR19WQlVTX1NUQVJUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIENIUkdfVkJVU19FTkQgIDB4OCAgICAgICAgLyogaW5kaWNhdG9yIGZvciBleHRlcm5hbCBjaXJjdWl0IHRvIGVuZCBjaGFyZ2luZyBWQlVTICovCisjZGVmaW5lICAgICAgICAgICAgbkNIUkdfVkJVU19FTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgIERJU0NIUkdfVkJVU19TVEFSVCAgMHgxMCAgICAgICAvKiBpbmRpY2F0b3IgdG8gc3RhcnQgZGlzY2hhcmdpbmcgVkJVUyAqLworI2RlZmluZSAgICAgICBuRElTQ0hSR19WQlVTX1NUQVJUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIERJU0NIUkdfVkJVU19FTkQgIDB4MjAgICAgICAgLyogaW5kaWNhdG9yIHRvIHN0b3AgZGlzY2hhcmdpbmcgVkJVUyAqLworI2RlZmluZSAgICAgICAgIG5ESVNDSFJHX1ZCVVNfRU5EICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX09UR19WQlVTX01BU0sgKi8KKworI2RlZmluZSAgICAgICAgIERSSVZFX1ZCVVNfT05fRU5BICAweDEgICAgICAgIC8qIGVuYWJsZSBEUklWRV9WQlVTX09OIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgbkRSSVZFX1ZCVVNfT05fRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBEUklWRV9WQlVTX09GRl9FTkEgIDB4MiAgICAgICAgLyogZW5hYmxlIERSSVZFX1ZCVVNfT0ZGIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICBuRFJJVkVfVkJVU19PRkZfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgIENIUkdfVkJVU19TVEFSVF9FTkEgIDB4NCAgICAgICAgLyogZW5hYmxlIENIUkdfVkJVU19TVEFSVCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICBuQ0hSR19WQlVTX1NUQVJUX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIENIUkdfVkJVU19FTkRfRU5BICAweDggICAgICAgIC8qIGVuYWJsZSBDSFJHX1ZCVVNfRU5EIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgbkNIUkdfVkJVU19FTkRfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgIERJU0NIUkdfVkJVU19TVEFSVF9FTkEgIDB4MTAgICAgICAgLyogZW5hYmxlIERJU0NIUkdfVkJVU19TVEFSVCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICBuRElTQ0hSR19WQlVTX1NUQVJUX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgIERJU0NIUkdfVkJVU19FTkRfRU5BICAweDIwICAgICAgIC8qIGVuYWJsZSBESVNDSFJHX1ZCVVNfRU5EIGludGVycnVwdCAqLworI2RlZmluZSAgICAgbkRJU0NIUkdfVkJVU19FTkRfRU5BICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0NTUjAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFJYUEtUUkRZICAweDEgICAgICAgIC8qIGRhdGEgcGFja2V0IHJlY2VpdmUgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUlhQS1RSRFkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUWFBLVFJEWSAgMHgyICAgICAgICAvKiBkYXRhIHBhY2tldCBpbiBGSUZPIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblRYUEtUUkRZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIFNUQUxMX1NFTlQgIDB4NCAgICAgICAgLyogU1RBTEwgaGFuZHNoYWtlIHNlbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuU1RBTExfU0VOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBEQVRBRU5EICAweDggICAgICAgIC8qIERhdGEgZW5kIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5EQVRBRU5EICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgU0VUVVBFTkQgIDB4MTAgICAgICAgLyogU2V0dXAgZW5kICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuU0VUVVBFTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFNFTkRTVEFMTCAgMHgyMCAgICAgICAvKiBTZW5kIFNUQUxMIGhhbmRzaGFrZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuU0VORFNUQUxMICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgU0VSVklDRURfUlhQS1RSRFkgIDB4NDAgICAgICAgLyogdXNlZCB0byBjbGVhciB0aGUgUnhQa3RSZHkgYml0ICovCisjZGVmaW5lICAgICAgICBuU0VSVklDRURfUlhQS1RSRFkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBTRVJWSUNFRF9TRVRVUEVORCAgMHg4MCAgICAgICAvKiB1c2VkIHRvIGNsZWFyIHRoZSBTZXR1cEVuZCBiaXQgKi8KKyNkZWZpbmUgICAgICAgIG5TRVJWSUNFRF9TRVRVUEVORCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRkxVU0hGSUZPICAweDEwMCAgICAgIC8qIGZsdXNoIGVuZHBvaW50IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkZMVVNIRklGTyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBTVEFMTF9SRUNFSVZFRF9IICAweDQgICAgICAgIC8qIFNUQUxMIGhhbmRzaGFrZSByZWNlaXZlZCBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICBuU1RBTExfUkVDRUlWRURfSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBTRVRVUFBLVF9IICAweDggICAgICAgIC8qIHNlbmQgU2V0dXAgdG9rZW4gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgblNFVFVQUEtUX0ggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRVJST1JfSCAgMHgxMCAgICAgICAvKiB0aW1lb3V0IGVycm9yIGluZGljYXRvciBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRVJST1JfSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFJFUVBLVF9IICAweDIwICAgICAgIC8qIFJlcXVlc3QgYW4gSU4gdHJhbnNhY3Rpb24gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUkVRUEtUX0ggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBTVEFUVVNQS1RfSCAgMHg0MCAgICAgICAvKiBTdGF0dXMgc3RhZ2UgdHJhbnNhY3Rpb24gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICBuU1RBVFVTUEtUX0ggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgTkFLX1RJTUVPVVRfSCAgMHg4MCAgICAgICAvKiBFUDAgaGFsdGVkIGFmdGVyIGEgTkFLIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgIG5OQUtfVElNRU9VVF9IICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0NPVU5UMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICBFUDBfUlhfQ09VTlQgIDB4N2YgICAgICAgLyogbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzIGluIEVQMCBGSUZPICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX05BS0xJTUlUMCAqLworCisjZGVmaW5lICAgICAgICAgICAgIEVQMF9OQUtfTElNSVQgIDB4MWYgICAgICAgLyogbnVtYmVyIG9mIGZyYW1lcy9taWNybyBmcmFtZXMgYWZ0ZXIgd2hpY2ggRVAwIHRpbWVvdXRzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYX01BWF9QQUNLRVQgKi8KKworI2RlZmluZSAgICAgICAgIE1BWF9QQUNLRVRfU0laRV9UICAweDdmZiAgICAgIC8qIG1heGltdW0gZGF0YSBwYXkgbG9hZCBpbiBhIGZyYW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYX01BWF9QQUNLRVQgKi8KKworI2RlZmluZSAgICAgICAgIE1BWF9QQUNLRVRfU0laRV9SICAweDdmZiAgICAgIC8qIG1heGltdW0gZGF0YSBwYXkgbG9hZCBpbiBhIGZyYW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYQ1NSICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgVFhQS1RSRFlfVCAgMHgxICAgICAgICAvKiBkYXRhIHBhY2tldCBpbiBGSUZPIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5UWFBLVFJEWV9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIEZJRk9fTk9UX0VNUFRZX1QgIDB4MiAgICAgICAgLyogRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICBuRklGT19OT1RfRU1QVFlfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBVTkRFUlJVTl9UICAweDQgICAgICAgIC8qIFR4UGt0UmR5IG5vdCBzZXQgIGZvciBhbiBJTiB0b2tlbiAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5VTkRFUlJVTl9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgRkxVU0hGSUZPX1QgIDB4OCAgICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgbkZMVVNIRklGT19UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5EX1QgIDB4MTAgICAgICAgLyogaXNzdWUgYSBTdGFsbCBoYW5kc2hha2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblNUQUxMX1NFTkRfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VOVF9UICAweDIwICAgICAgIC8qIFN0YWxsIGhhbmRzaGFrZSB0cmFuc21pdHRlZCAqLworI2RlZmluZSAgICAgICAgICAgICBuU1RBTExfU0VOVF9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBDTEVBUl9EQVRBVE9HR0xFX1QgIDB4NDAgICAgICAgLyogY2xlYXIgZW5kcG9pbnQgZGF0YSB0b2dnbGUgKi8KKyNkZWZpbmUgICAgICAgbkNMRUFSX0RBVEFUT0dHTEVfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJTkNPTVBUWF9UICAweDgwICAgICAgIC8qIGluZGljYXRlcyB0aGF0IGEgbGFyZ2UgcGFja2V0IGlzIHNwbGl0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgbklOQ09NUFRYX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERNQVJFUU1PREVfVCAgMHg0MDAgICAgICAvKiBETUEgbW9kZSAoMCBvciAxKSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRNQVJFUU1PREVfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgRk9SQ0VfREFUQVRPR0dMRV9UICAweDgwMCAgICAgIC8qIEZvcmNlIGRhdGEgdG9nZ2xlICovCisjZGVmaW5lICAgICAgIG5GT1JDRV9EQVRBVE9HR0xFX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERNQVJFUV9FTkFfVCAgMHgxMDAwICAgICAvKiBFbmFibGUgRE1BIHJlcXVlc3QgZm9yIFR4IEVQICovCisjZGVmaW5lICAgICAgICAgICAgIG5ETUFSRVFfRU5BX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBJU09fVCAgMHg0MDAwICAgICAvKiBlbmFibGUgSXNvY2hyb25vdXMgdHJhbnNmZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuSVNPX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEFVVE9TRVRfVCAgMHg4MDAwICAgICAvKiBhbGxvd3MgVHhQa3RSZHkgdG8gYmUgc2V0IGF1dG9tYXRpY2FsbHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkFVVE9TRVRfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVSUk9SX1RIICAweDQgICAgICAgIC8qIGVycm9yIGNvbmRpdGlvbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUlJPUl9USCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIFNUQUxMX1JFQ0VJVkVEX1RIICAweDIwICAgICAgIC8qIFN0YWxsIGhhbmRzaGFrZSByZWNlaXZlZCBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgIG5TVEFMTF9SRUNFSVZFRF9USCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgIE5BS19USU1FT1VUX1RIICAweDgwICAgICAgIC8qIE5BSyB0aW1lb3V0IGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgbk5BS19USU1FT1VUX1RIICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYQ09VTlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFRYX0NPVU5UICAweDFmZmYgICAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBzZWxlY3RlZCBlbmRwb2ludCBUeCBGSUZPICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYQ1NSICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgUlhQS1RSRFlfUiAgMHgxICAgICAgICAvKiBkYXRhIHBhY2tldCBpbiBGSUZPIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5SWFBLVFJEWV9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgRklGT19GVUxMX1IgIDB4MiAgICAgICAgLyogRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5GSUZPX0ZVTExfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgT1ZFUlJVTl9SICAweDQgICAgICAgIC8qIFR4UGt0UmR5IG5vdCBzZXQgIGZvciBhbiBJTiB0b2tlbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuT1ZFUlJVTl9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgREFUQUVSUk9SX1IgIDB4OCAgICAgICAgLyogT3V0IHBhY2tldCBjYW5ub3QgYmUgbG9hZGVkIGludG8gUnggIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5EQVRBRVJST1JfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIEZMVVNIRklGT19SICAweDEwICAgICAgIC8qIGZsdXNoIGVuZHBvaW50IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5GTFVTSEZJRk9fUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VORF9SICAweDIwICAgICAgIC8qIGlzc3VlIGEgU3RhbGwgaGFuZHNoYWtlICovCisjZGVmaW5lICAgICAgICAgICAgIG5TVEFMTF9TRU5EX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFNUQUxMX1NFTlRfUiAgMHg0MCAgICAgICAvKiBTdGFsbCBoYW5kc2hha2UgdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblNUQUxMX1NFTlRfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgQ0xFQVJfREFUQVRPR0dMRV9SICAweDgwICAgICAgIC8qIGNsZWFyIGVuZHBvaW50IGRhdGEgdG9nZ2xlICovCisjZGVmaW5lICAgICAgIG5DTEVBUl9EQVRBVE9HR0xFX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgSU5DT01QUlhfUiAgMHgxMDAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCBhIGxhcmdlIHBhY2tldCBpcyBzcGxpdCAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5JTkNPTVBSWF9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBETUFSRVFNT0RFX1IgIDB4ODAwICAgICAgLyogRE1BIG1vZGUgKDAgb3IgMSkgc2VsZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgIG5ETUFSRVFNT0RFX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIERJU05ZRVRfUiAgMHgxMDAwICAgICAvKiBkaXNhYmxlIE55ZXQgaGFuZHNoYWtlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuRElTTllFVF9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBETUFSRVFfRU5BX1IgIDB4MjAwMCAgICAgLyogRW5hYmxlIERNQSByZXF1ZXN0IGZvciBUeCBFUCAqLworI2RlZmluZSAgICAgICAgICAgICBuRE1BUkVRX0VOQV9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSVNPX1IgIDB4NDAwMCAgICAgLyogZW5hYmxlIElzb2Nocm9ub3VzIHRyYW5zZmVycyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbklTT19SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgQVVUT0NMRUFSX1IgIDB4ODAwMCAgICAgLyogYWxsb3dzIFR4UGt0UmR5IHRvIGJlIHNldCBhdXRvbWF0aWNhbGx5ICovCisjZGVmaW5lICAgICAgICAgICAgICBuQVVUT0NMRUFSX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUlJPUl9SSCAgMHg0ICAgICAgICAvKiBUeFBrdFJkeSBub3Qgc2V0ICBmb3IgYW4gSU4gdG9rZW4gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVJST1JfUkggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFJFUVBLVF9SSCAgMHgyMCAgICAgICAvKiByZXF1ZXN0IGFuIElOIHRyYW5zYWN0aW9uIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuUkVRUEtUX1JIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgU1RBTExfUkVDRUlWRURfUkggIDB4NDAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHJlY2VpdmVkIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgblNUQUxMX1JFQ0VJVkVEX1JIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgSU5DT01QUlhfUkggIDB4MTAwICAgICAgLyogaW5kaWNhdGVzIHRoYXQgYSBsYXJnZSBwYWNrZXQgaXMgc3BsaXQgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICBuSU5DT01QUlhfUkggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgRE1BUkVRTU9ERV9SSCAgMHg4MDAgICAgICAvKiBETUEgbW9kZSAoMCBvciAxKSBzZWxlY3Rpb24gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgbkRNQVJFUU1PREVfUkggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgQVVUT1JFUV9SSCAgMHg0MDAwICAgICAvKiBzZXRzIFJlcVBrdCBhdXRvbWF0aWNhbGx5IGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5BVVRPUkVRX1JIICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYQ09VTlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFJYX0NPVU5UICAweDFmZmYgICAgIC8qIE51bWJlciBvZiByZWNlaXZlZCBieXRlcyBpbiB0aGUgcGFja2V0IGluIHRoZSBSeCBGSUZPICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYVFlQRSAqLworCisjZGVmaW5lICAgICAgICAgICAgVEFSR0VUX0VQX05PX1QgIDB4ZiAgICAgICAgLyogRVAgbnVtYmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFBST1RPQ09MX1QgIDB4YyAgICAgICAgLyogdHJhbnNmZXIgdHlwZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9UWElOVEVSVkFMICovCisKKyNkZWZpbmUgICAgICAgICAgVFhfUE9MTF9JTlRFUlZBTCAgMHhmZiAgICAgICAvKiBwb2xsaW5nIGludGVydmFsIGZvciBzZWxlY3RlZCBUeCBFUCAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9SWFRZUEUgKi8KKworI2RlZmluZSAgICAgICAgICAgIFRBUkdFVF9FUF9OT19SICAweGYgICAgICAgIC8qIEVQIG51bWJlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBQUk9UT0NPTF9SICAweGMgICAgICAgIC8qIHRyYW5zZmVyIHR5cGUgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfUlhJTlRFUlZBTCAqLworCisjZGVmaW5lICAgICAgICAgIFJYX1BPTExfSU5URVJWQUwgIDB4ZmYgICAgICAgLyogcG9sbGluZyBpbnRlcnZhbCBmb3Igc2VsZWN0ZWQgUnggRVAgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfRE1BX0lOVEVSUlVQVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BMF9JTlQgIDB4MSAgICAgICAgLyogRE1BMCBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTBfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BMV9JTlQgIDB4MiAgICAgICAgLyogRE1BMSBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTFfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BMl9JTlQgIDB4NCAgICAgICAgLyogRE1BMiBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTJfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BM19JTlQgIDB4OCAgICAgICAgLyogRE1BMyBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTNfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BNF9JTlQgIDB4MTAgICAgICAgLyogRE1BNCBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTRfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BNV9JTlQgIDB4MjAgICAgICAgLyogRE1BNSBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTVfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BNl9JTlQgIDB4NDAgICAgICAgLyogRE1BNiBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTZfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BN19JTlQgIDB4ODAgICAgICAgLyogRE1BNyBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTdfSU5UICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhDT05UUk9MICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BX0VOQSAgMHgxICAgICAgICAvKiBETUEgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRNQV9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIERJUkVDVElPTiAgMHgyICAgICAgICAvKiBkaXJlY3Rpb24gb2YgRE1BIHRyYW5zZmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5ESVJFQ1RJT04gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTU9ERSAgMHg0ICAgICAgICAvKiBETUEgQnVzIGVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1PREUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSU5UX0VOQSAgMHg4ICAgICAgICAvKiBJbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbklOVF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUE5VTSAgMHhmMCAgICAgICAvKiBFUCBudW1iZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBCVVNFUlJPUiAgMHgxMDAgICAgICAvKiBETUEgQnVzIGVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQlVTRVJST1IgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeEFERFJISUdIICovCisKKyNkZWZpbmUgICAgICAgICAgICAgRE1BX0FERFJfSElHSCAgMHhmZmZmICAgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgdGhlIERNQSBtYXN0ZXIgY2hhbm5lbCAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4QUREUkxPVyAqLworCisjZGVmaW5lICAgICAgICAgICAgICBETUFfQUREUl9MT1cgIDB4ZmZmZiAgICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBETUEgbWFzdGVyIGNoYW5uZWwgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeENPVU5USElHSCAqLworCisjZGVmaW5lICAgICAgICAgICAgRE1BX0NPVU5UX0hJR0ggIDB4ZmZmZiAgICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhDT1VOVExPVyAqLworCisjZGVmaW5lICAgICAgICAgICAgIERNQV9DT1VOVF9MT1cgIDB4ZmZmZiAgICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsICovCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogICAgIE1VTFRJIEJJVCBNQUNSTyBFTlVNRVJBVElPTlMgICAgICAgICAgICAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKKyNlbmRpZiAvKiBfREVGX0JGNTQyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDQuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmM3N2VhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0NC5oCkBAIC0wLDAgKzEsNzY2IEBACisvKgorICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ0LmgKKyAqIEJhc2VkIG9uOgorICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6CisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBSZXY6CisgKgorICogTW9kaWZpZWQ6CisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfREVGX0JGNTQ0X0gKKyNkZWZpbmUgX0RFRl9CRjU0NF9ICisKKy8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxhc20vbWFjaC1jb21tb24vZGVmX0xQQmxhY2tmaW4uaD4KKworLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1NDQgKi8KKworLyogSW5jbHVkZSBkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IHByb2Nlc3NvcnMgKi8KKyNpbmNsdWRlICJkZWZCRjU0eF9iYXNlLmgiCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjU0NCB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KKworLyogVGltZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9DT05GSUcgIDB4ZmZjMDA2MDAgICAvKiBUaW1lciA4IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVI4X0NPVU5URVIgIDB4ZmZjMDA2MDQgICAvKiBUaW1lciA4IENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9QRVJJT0QgIDB4ZmZjMDA2MDggICAvKiBUaW1lciA4IFBlcmlvZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9XSURUSCAgMHhmZmMwMDYwYyAgIC8qIFRpbWVyIDggV2lkdGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9DT05GSUcgIDB4ZmZjMDA2MTAgICAvKiBUaW1lciA5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVI5X0NPVU5URVIgIDB4ZmZjMDA2MTQgICAvKiBUaW1lciA5IENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9QRVJJT0QgIDB4ZmZjMDA2MTggICAvKiBUaW1lciA5IFBlcmlvZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9XSURUSCAgMHhmZmMwMDYxYyAgIC8qIFRpbWVyIDkgV2lkdGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVIxMF9DT05GSUcgIDB4ZmZjMDA2MjAgICAvKiBUaW1lciAxMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVElNRVIxMF9DT1VOVEVSICAweGZmYzAwNjI0ICAgLyogVGltZXIgMTAgQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FUjEwX1BFUklPRCAgMHhmZmMwMDYyOCAgIC8qIFRpbWVyIDEwIFBlcmlvZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRVIxMF9XSURUSCAgMHhmZmMwMDYyYyAgIC8qIFRpbWVyIDEwIFdpZHRoIFJlZ2lzdGVyICovCisKKy8qIFRpbWVyIEdyb3VwIG9mIDMgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSX0VOQUJMRTEgIDB4ZmZjMDA2NDAgICAvKiBUaW1lciBHcm91cCBvZiAzIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FUl9ESVNBQkxFMSAgMHhmZmMwMDY0NCAgIC8qIFRpbWVyIEdyb3VwIG9mIDMgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRVJfU1RBVFVTMSAgMHhmZmMwMDY0OCAgIC8qIFRpbWVyIEdyb3VwIG9mIDMgU3RhdHVzIFJlZ2lzdGVyICovCisKKy8qIEVQUEkwIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfU1RBVFVTICAweGZmYzAxMDAwICAgLyogRVBQSTAgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfSENPVU5UICAweGZmYzAxMDA0ICAgLyogRVBQSTAgSG9yaXpvbnRhbCBUcmFuc2ZlciBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkwX0hERUxBWSAgMHhmZmMwMTAwOCAgIC8qIEVQUEkwIEhvcml6b250YWwgRGVsYXkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMF9WQ09VTlQgIDB4ZmZjMDEwMGMgICAvKiBFUFBJMCBWZXJ0aWNhbCBUcmFuc2ZlciBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkwX1ZERUxBWSAgMHhmZmMwMTAxMCAgIC8qIEVQUEkwIFZlcnRpY2FsIERlbGF5IENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVQUEkwX0ZSQU1FICAweGZmYzAxMDE0ICAgLyogRVBQSTAgTGluZXMgcGVyIEZyYW1lIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBFUFBJMF9MSU5FICAweGZmYzAxMDE4ICAgLyogRVBQSTAgU2FtcGxlcyBwZXIgTGluZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkwX0NMS0RJViAgMHhmZmMwMTAxYyAgIC8qIEVQUEkwIENsb2NrIERpdmlkZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVBQSTBfQ09OVFJPTCAgMHhmZmMwMTAyMCAgIC8qIEVQUEkwIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRVBQSTBfRlMxV19IQkwgIDB4ZmZjMDEwMjQgICAvKiBFUFBJMCBGUzEgV2lkdGggUmVnaXN0ZXIgLyBFUFBJMCBIb3Jpem9udGFsIEJsYW5raW5nIFNhbXBsZXMgUGVyIExpbmUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUFBJMF9GUzFQX0FWUEwgIDB4ZmZjMDEwMjggICAvKiBFUFBJMCBGUzEgUGVyaW9kIFJlZ2lzdGVyIC8gRVBQSTAgQWN0aXZlIFZpZGVvIFNhbXBsZXMgUGVyIExpbmUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRVBQSTBfRlMyV19MVkIgIDB4ZmZjMDEwMmMgICAvKiBFUFBJMCBGUzIgV2lkdGggUmVnaXN0ZXIgLyBFUFBJMCBMaW5lcyBvZiBWZXJ0aWNhbCBCbGFua2luZyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQUEkwX0ZTMlBfTEFWRiAgMHhmZmMwMTAzMCAgIC8qIEVQUEkwIEZTMiBQZXJpb2QgUmVnaXN0ZXIvIEVQUEkwIExpbmVzIG9mIEFjdGl2ZSBWaWRlbyBQZXIgRmllbGQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEVQUEkwX0NMSVAgIDB4ZmZjMDEwMzQgICAvKiBFUFBJMCBDbGlwcGluZyBSZWdpc3RlciAqLworCisvKiBUd28gV2lyZSBJbnRlcmZhY2UgUmVnaXN0ZXJzIChUV0kxKSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRXSTFfQ0xLRElWICAweGZmYzAyMjAwICAgLyogQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRXSTFfQ09OVFJPTCAgMHhmZmMwMjIwNCAgIC8qIFRXSSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMV9TTEFWRV9DVFJMICAweGZmYzAyMjA4ICAgLyogVFdJIFNsYXZlIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfU0xBVkVfU1RBVCAgMHhmZmMwMjIwYyAgIC8qIFRXSSBTbGF2ZSBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfU0xBVkVfQUREUiAgMHhmZmMwMjIxMCAgIC8qIFRXSSBTbGF2ZSBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFRXSTFfTUFTVEVSX0NUUkwgIDB4ZmZjMDIyMTQgICAvKiBUV0kgTWFzdGVyIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVFdJMV9NQVNURVJfU1RBVCAgMHhmZmMwMjIxOCAgIC8qIFRXSSBNYXN0ZXIgTW9kZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFRXSTFfTUFTVEVSX0FERFIgIDB4ZmZjMDIyMWMgICAvKiBUV0kgTWFzdGVyIE1vZGUgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFdJMV9JTlRfU1RBVCAgMHhmZmMwMjIyMCAgIC8qIFRXSSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUV0kxX0lOVF9NQVNLICAweGZmYzAyMjI0ICAgLyogVFdJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRXSTFfRklGT19DVFJMICAweGZmYzAyMjI4ICAgLyogVFdJIEZJRk8gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kxX0ZJRk9fU1RBVCAgMHhmZmMwMjIyYyAgIC8qIFRXSSBGSUZPIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kxX1hNVF9EQVRBOCAgMHhmZmMwMjI4MCAgIC8qIFRXSSBGSUZPIFRyYW5zbWl0IERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kxX1hNVF9EQVRBMTYgIDB4ZmZjMDIyODQgICAvKiBUV0kgRklGTyBUcmFuc21pdCBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRXSTFfUkNWX0RBVEE4ICAweGZmYzAyMjg4ICAgLyogVFdJIEZJRk8gUmVjZWl2ZSBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMV9SQ1ZfREFUQTE2ICAweGZmYzAyMjhjICAgLyogVFdJIEZJRk8gUmVjZWl2ZSBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyICovCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ29uZmlnIDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQzEgIDB4ZmZjMDMyMDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUQxICAweGZmYzAzMjA0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IERpcmVjdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9UUlMxICAweGZmYzAzMjA4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBUcmFuc21pdCBSZXF1ZXN0IFNldCBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9UUlIxICAweGZmYzAzMjBjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0IFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9UQTEgIDB4ZmZjMDMyMTAgICAvKiBDQU4gQ29udHJvbGxlciAxIFRyYW5zbWl0IEFja25vd2xlZGdlIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BQTEgIDB4ZmZjMDMyMTQgICAvKiBDQU4gQ29udHJvbGxlciAxIEFib3J0IEFja25vd2xlZGdlIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX1JNUDEgIDB4ZmZjMDMyMTggICAvKiBDQU4gQ29udHJvbGxlciAxIFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX1JNTDEgIDB4ZmZjMDMyMWMgICAvKiBDQU4gQ29udHJvbGxlciAxIFJlY2VpdmUgTWVzc2FnZSBMb3N0IFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQlRJRjEgIDB4ZmZjMDMyMjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDQU4xX01CUklGMSAgMHhmZmMwMzIyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUJJTTEgIDB4ZmZjMDMyMjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfUkZIMSAgMHhmZmMwMzIyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX09QU1MxICAweGZmYzAzMjMwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBPdmVyd3JpdGUgUHJvdGVjdGlvbiBTaW5nbGUgU2hvdCBUcmFuc21pdCBSZWdpc3RlciAxICovCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ29uZmlnIDIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQzIgIDB4ZmZjMDMyNDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUQyICAweGZmYzAzMjQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IERpcmVjdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9UUlMyICAweGZmYzAzMjQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBUcmFuc21pdCBSZXF1ZXN0IFNldCBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9UUlIyICAweGZmYzAzMjRjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9UQTIgIDB4ZmZjMDMyNTAgICAvKiBDQU4gQ29udHJvbGxlciAxIFRyYW5zbWl0IEFja25vd2xlZGdlIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BQTIgIDB4ZmZjMDMyNTQgICAvKiBDQU4gQ29udHJvbGxlciAxIEFib3J0IEFja25vd2xlZGdlIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX1JNUDIgIDB4ZmZjMDMyNTggICAvKiBDQU4gQ29udHJvbGxlciAxIFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX1JNTDIgIDB4ZmZjMDMyNWMgICAvKiBDQU4gQ29udHJvbGxlciAxIFJlY2VpdmUgTWVzc2FnZSBMb3N0IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQlRJRjIgIDB4ZmZjMDMyNjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDQU4xX01CUklGMiAgMHhmZmMwMzI2NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUJJTTIgIDB4ZmZjMDMyNjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfUkZIMiAgMHhmZmMwMzI2YyAgIC8qIENBTiBDb250cm9sbGVyIDEgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX09QU1MyICAweGZmYzAzMjcwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBPdmVyd3JpdGUgUHJvdGVjdGlvbiBTaW5nbGUgU2hvdCBUcmFuc21pdCBSZWdpc3RlciAyICovCisKKy8qIENBTiBDb250cm9sbGVyIDEgQ2xvY2svSW50ZXJydXB0L0NvdW50ZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQ0xPQ0sgIDB4ZmZjMDMyODAgICAvKiBDQU4gQ29udHJvbGxlciAxIENsb2NrIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENBTjFfVElNSU5HICAweGZmYzAzMjg0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBUaW1pbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfREVCVUcgIDB4ZmZjMDMyODggICAvKiBDQU4gQ29udHJvbGxlciAxIERlYnVnIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENBTjFfU1RBVFVTICAweGZmYzAzMjhjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBHbG9iYWwgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQ0VDICAweGZmYzAzMjkwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBFcnJvciBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfR0lTICAweGZmYzAzMjk0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBHbG9iYWwgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0dJTSAgMHhmZmMwMzI5OCAgIC8qIENBTiBDb250cm9sbGVyIDEgR2xvYmFsIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfR0lGICAweGZmYzAzMjljICAgLyogQ0FOIENvbnRyb2xsZXIgMSBHbG9iYWwgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDQU4xX0NPTlRST0wgIDB4ZmZjMDMyYTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9JTlRSICAweGZmYzAzMmE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUJURCAgMHhmZmMwMzJhYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBUZW1wb3JhcnkgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0VXUiAgMHhmZmMwMzJiMCAgIC8qIENBTiBDb250cm9sbGVyIDEgUHJvZ3JhbW1hYmxlIFdhcm5pbmcgTGV2ZWwgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9FU1IgIDB4ZmZjMDMyYjQgICAvKiBDQU4gQ29udHJvbGxlciAxIEVycm9yIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9VQ0NOVCAgMHhmZmMwMzJjNCAgIC8qIENBTiBDb250cm9sbGVyIDEgVW5pdmVyc2FsIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX1VDUkMgIDB4ZmZjMDMyYzggICAvKiBDQU4gQ29udHJvbGxlciAxIFVuaXZlcnNhbCBDb3VudGVyIEZvcmNlIFJlbG9hZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9VQ0NORiAgMHhmZmMwMzJjYyAgIC8qIENBTiBDb250cm9sbGVyIDEgVW5pdmVyc2FsIENvdW50ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggQWNjZXB0YW5jZSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAwTCAgMHhmZmMwMzMwMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMDBIICAweGZmYzAzMzA0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDAgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAxTCAgMHhmZmMwMzMwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMDFIICAweGZmYzAzMzBjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAyTCAgMHhmZmMwMzMxMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMDJIICAweGZmYzAzMzE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAzTCAgMHhmZmMwMzMxOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMDNIICAweGZmYzAzMzFjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA0TCAgMHhmZmMwMzMyMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMDRIICAweGZmYzAzMzI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDQgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA1TCAgMHhmZmMwMzMyOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMDVIICAweGZmYzAzMzJjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDUgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA2TCAgMHhmZmMwMzMzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMDZIICAweGZmYzAzMzM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDYgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA3TCAgMHhmZmMwMzMzOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMDdIICAweGZmYzAzMzNjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDcgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA4TCAgMHhmZmMwMzM0MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMDhIICAweGZmYzAzMzQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDggQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA5TCAgMHhmZmMwMzM0OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMDlIICAweGZmYzAzMzRjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDkgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTEwTCAgMHhmZmMwMzM1MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTEwSCAgMHhmZmMwMzM1NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTFMICAweGZmYzAzMzU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTFIICAweGZmYzAzMzVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xMkwgIDB4ZmZjMDMzNjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xMkggIDB4ZmZjMDMzNjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTEzTCAgMHhmZmMwMzM2OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTEzSCAgMHhmZmMwMzM2YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTRMICAweGZmYzAzMzcwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTRIICAweGZmYzAzMzc0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xNUwgIDB4ZmZjMDMzNzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xNUggIDB4ZmZjMDMzN2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggQWNjZXB0YW5jZSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE2TCAgMHhmZmMwMzM4MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE2SCAgMHhmZmMwMzM4NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTdMICAweGZmYzAzMzg4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTdIICAweGZmYzAzMzhjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xOEwgIDB4ZmZjMDMzOTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xOEggIDB4ZmZjMDMzOTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE5TCAgMHhmZmMwMzM5OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE5SCAgMHhmZmMwMzM5YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjBMICAweGZmYzAzM2EwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjBIICAweGZmYzAzM2E0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yMUwgIDB4ZmZjMDMzYTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yMUggIDB4ZmZjMDMzYWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIyTCAgMHhmZmMwMzNiMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIySCAgMHhmZmMwMzNiNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjNMICAweGZmYzAzM2I4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjNIICAweGZmYzAzM2JjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yNEwgIDB4ZmZjMDMzYzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yNEggIDB4ZmZjMDMzYzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI1TCAgMHhmZmMwMzNjOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI1SCAgMHhmZmMwMzNjYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjZMICAweGZmYzAzM2QwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjZIICAweGZmYzAzM2Q0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yN0wgIDB4ZmZjMDMzZDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yN0ggIDB4ZmZjMDMzZGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI4TCAgMHhmZmMwMzNlMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI4SCAgMHhmZmMwMzNlNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjlMICAweGZmYzAzM2U4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjlIICAweGZmYzAzM2VjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0zMEwgIDB4ZmZjMDMzZjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0zMEggIDB4ZmZjMDMzZjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTMxTCAgMHhmZmMwMzNmOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTMxSCAgMHhmZmMwMzNmYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisKKy8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBEYXRhIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0RBVEEwICAweGZmYzAzNDAwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDAgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0RBVEExICAweGZmYzAzNDA0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDAgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0RBVEEyICAweGZmYzAzNDA4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDAgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0RBVEEzICAweGZmYzAzNDBjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDAgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMDBfTEVOR1RIICAweGZmYzAzNDEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDAgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMDBfVElNRVNUQU1QICAweGZmYzAzNDE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDAgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDBfSUQwICAweGZmYzAzNDE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDAgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDBfSUQxICAweGZmYzAzNDFjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDAgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0RBVEEwICAweGZmYzAzNDIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0RBVEExICAweGZmYzAzNDI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0RBVEEyICAweGZmYzAzNDI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0RBVEEzICAweGZmYzAzNDJjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMDFfTEVOR1RIICAweGZmYzAzNDMwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMDFfVElNRVNUQU1QICAweGZmYzAzNDM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDFfSUQwICAweGZmYzAzNDM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDFfSUQxICAweGZmYzAzNDNjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0RBVEEwICAweGZmYzAzNDQwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0RBVEExICAweGZmYzAzNDQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0RBVEEyICAweGZmYzAzNDQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0RBVEEzICAweGZmYzAzNDRjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMDJfTEVOR1RIICAweGZmYzAzNDUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMDJfVElNRVNUQU1QICAweGZmYzAzNDU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDJfSUQwICAweGZmYzAzNDU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDJfSUQxICAweGZmYzAzNDVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0RBVEEwICAweGZmYzAzNDYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0RBVEExICAweGZmYzAzNDY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0RBVEEyICAweGZmYzAzNDY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0RBVEEzICAweGZmYzAzNDZjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMDNfTEVOR1RIICAweGZmYzAzNDcwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMDNfVElNRVNUQU1QICAweGZmYzAzNDc0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDNfSUQwICAweGZmYzAzNDc4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDNfSUQxICAweGZmYzAzNDdjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0RBVEEwICAweGZmYzAzNDgwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDQgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0RBVEExICAweGZmYzAzNDg0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDQgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0RBVEEyICAweGZmYzAzNDg4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDQgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0RBVEEzICAweGZmYzAzNDhjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDQgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMDRfTEVOR1RIICAweGZmYzAzNDkwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDQgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMDRfVElNRVNUQU1QICAweGZmYzAzNDk0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDQgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDRfSUQwICAweGZmYzAzNDk4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDQgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDRfSUQxICAweGZmYzAzNDljICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDQgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0RBVEEwICAweGZmYzAzNGEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDUgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0RBVEExICAweGZmYzAzNGE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDUgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0RBVEEyICAweGZmYzAzNGE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDUgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0RBVEEzICAweGZmYzAzNGFjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDUgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMDVfTEVOR1RIICAweGZmYzAzNGIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDUgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMDVfVElNRVNUQU1QICAweGZmYzAzNGI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDUgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDVfSUQwICAweGZmYzAzNGI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDUgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDVfSUQxICAweGZmYzAzNGJjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDUgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0RBVEEwICAweGZmYzAzNGMwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDYgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0RBVEExICAweGZmYzAzNGM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDYgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0RBVEEyICAweGZmYzAzNGM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDYgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0RBVEEzICAweGZmYzAzNGNjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDYgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMDZfTEVOR1RIICAweGZmYzAzNGQwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDYgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMDZfVElNRVNUQU1QICAweGZmYzAzNGQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDYgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDZfSUQwICAweGZmYzAzNGQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDYgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDZfSUQxICAweGZmYzAzNGRjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDYgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0RBVEEwICAweGZmYzAzNGUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDcgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0RBVEExICAweGZmYzAzNGU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDcgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0RBVEEyICAweGZmYzAzNGU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDcgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0RBVEEzICAweGZmYzAzNGVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDcgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMDdfTEVOR1RIICAweGZmYzAzNGYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDcgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMDdfVElNRVNUQU1QICAweGZmYzAzNGY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDcgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDdfSUQwICAweGZmYzAzNGY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDcgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDdfSUQxICAweGZmYzAzNGZjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDcgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0RBVEEwICAweGZmYzAzNTAwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDggRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0RBVEExICAweGZmYzAzNTA0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDggRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0RBVEEyICAweGZmYzAzNTA4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDggRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0RBVEEzICAweGZmYzAzNTBjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDggRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMDhfTEVOR1RIICAweGZmYzAzNTEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDggTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMDhfVElNRVNUQU1QICAweGZmYzAzNTE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDggVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDhfSUQwICAweGZmYzAzNTE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDggSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDhfSUQxICAweGZmYzAzNTFjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDggSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0RBVEEwICAweGZmYzAzNTIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDkgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0RBVEExICAweGZmYzAzNTI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDkgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0RBVEEyICAweGZmYzAzNTI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDkgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0RBVEEzICAweGZmYzAzNTJjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDkgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMDlfTEVOR1RIICAweGZmYzAzNTMwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDkgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMDlfVElNRVNUQU1QICAweGZmYzAzNTM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDkgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDlfSUQwICAweGZmYzAzNTM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDkgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMDlfSUQxICAweGZmYzAzNTNjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDkgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEwX0RBVEEwICAweGZmYzAzNTQwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEwIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9EQVRBMSAgMHhmZmMwMzU0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTBfREFUQTIgIDB4ZmZjMDM1NDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEwX0RBVEEzICAweGZmYzAzNTRjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEwIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjEwX0xFTkdUSCAgMHhmZmMwMzU1MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxMF9USU1FU1RBTVAgIDB4ZmZjMDM1NTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTBfSUQwICAweGZmYzAzNTU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEwIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEwX0lEMSAgMHhmZmMwMzU1YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTFfREFUQTAgIDB4ZmZjMDM1NjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTEgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0RBVEExICAweGZmYzAzNTY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMV9EQVRBMiAgMHhmZmMwMzU2OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTFfREFUQTMgIDB4ZmZjMDM1NmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTEgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMTFfTEVOR1RIICAweGZmYzAzNTcwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjExX1RJTUVTVEFNUCAgMHhmZmMwMzU3NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxMV9JRDAgIDB4ZmZjMDM1NzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTEgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTFfSUQxICAweGZmYzAzNTdjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMl9EQVRBMCAgMHhmZmMwMzU4MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMiBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTJfREFUQTEgIDB4ZmZjMDM1ODQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEyX0RBVEEyICAweGZmYzAzNTg4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMl9EQVRBMyAgMHhmZmMwMzU4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMiBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxMl9MRU5HVEggIDB4ZmZjMDM1OTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTJfVElNRVNUQU1QICAweGZmYzAzNTk0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEyX0lEMCAgMHhmZmMwMzU5OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMiBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxMl9JRDEgIDB4ZmZjMDM1OWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEzX0RBVEEwICAweGZmYzAzNWEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEzIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxM19EQVRBMSAgMHhmZmMwMzVhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTNfREFUQTIgIDB4ZmZjMDM1YTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEzX0RBVEEzICAweGZmYzAzNWFjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEzIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjEzX0xFTkdUSCAgMHhmZmMwMzViMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxM19USU1FU1RBTVAgIDB4ZmZjMDM1YjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTNfSUQwICAweGZmYzAzNWI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEzIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEzX0lEMSAgMHhmZmMwMzViYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTRfREFUQTAgIDB4ZmZjMDM1YzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTQgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0RBVEExICAweGZmYzAzNWM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNF9EQVRBMiAgMHhmZmMwMzVjOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTRfREFUQTMgIDB4ZmZjMDM1Y2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTQgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMTRfTEVOR1RIICAweGZmYzAzNWQwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjE0X1RJTUVTVEFNUCAgMHhmZmMwMzVkNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxNF9JRDAgIDB4ZmZjMDM1ZDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTQgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTRfSUQxICAweGZmYzAzNWRjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNV9EQVRBMCAgMHhmZmMwMzVlMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNSBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTVfREFUQTEgIDB4ZmZjMDM1ZTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE1X0RBVEEyICAweGZmYzAzNWU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNV9EQVRBMyAgMHhmZmMwMzVlYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNSBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxNV9MRU5HVEggIDB4ZmZjMDM1ZjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTVfVElNRVNUQU1QICAweGZmYzAzNWY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE1X0lEMCAgMHhmZmMwMzVmOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNSBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxNV9JRDEgIDB4ZmZjMDM1ZmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgSUQxIFJlZ2lzdGVyICovCisKKy8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBEYXRhIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE2X0RBVEEwICAweGZmYzAzNjAwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE2IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9EQVRBMSAgMHhmZmMwMzYwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTZfREFUQTIgIDB4ZmZjMDM2MDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE2X0RBVEEzICAweGZmYzAzNjBjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE2IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjE2X0xFTkdUSCAgMHhmZmMwMzYxMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxNl9USU1FU1RBTVAgIDB4ZmZjMDM2MTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTZfSUQwICAweGZmYzAzNjE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE2IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE2X0lEMSAgMHhmZmMwMzYxYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTdfREFUQTAgIDB4ZmZjMDM2MjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTcgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0RBVEExICAweGZmYzAzNjI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxN19EQVRBMiAgMHhmZmMwMzYyOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTdfREFUQTMgIDB4ZmZjMDM2MmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTcgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMTdfTEVOR1RIICAweGZmYzAzNjMwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjE3X1RJTUVTVEFNUCAgMHhmZmMwMzYzNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxN19JRDAgIDB4ZmZjMDM2MzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTcgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTdfSUQxICAweGZmYzAzNjNjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOF9EQVRBMCAgMHhmZmMwMzY0MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOCBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMThfREFUQTEgIDB4ZmZjMDM2NDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE4X0RBVEEyICAweGZmYzAzNjQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOF9EQVRBMyAgMHhmZmMwMzY0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOCBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxOF9MRU5HVEggIDB4ZmZjMDM2NTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMThfVElNRVNUQU1QICAweGZmYzAzNjU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE4X0lEMCAgMHhmZmMwMzY1OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOCBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxOF9JRDEgIDB4ZmZjMDM2NWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE5X0RBVEEwICAweGZmYzAzNjYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE5IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9EQVRBMSAgMHhmZmMwMzY2NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTlfREFUQTIgIDB4ZmZjMDM2NjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE5X0RBVEEzICAweGZmYzAzNjZjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE5IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjE5X0xFTkdUSCAgMHhmZmMwMzY3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxOV9USU1FU1RBTVAgIDB4ZmZjMDM2NzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTlfSUQwICAweGZmYzAzNjc4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE5IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE5X0lEMSAgMHhmZmMwMzY3YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjBfREFUQTAgIDB4ZmZjMDM2ODAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjAgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0RBVEExICAweGZmYzAzNjg0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMF9EQVRBMiAgMHhmZmMwMzY4OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjBfREFUQTMgIDB4ZmZjMDM2OGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjAgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjBfTEVOR1RIICAweGZmYzAzNjkwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjIwX1RJTUVTVEFNUCAgMHhmZmMwMzY5NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyMF9JRDAgIDB4ZmZjMDM2OTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjAgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjBfSUQxICAweGZmYzAzNjljICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMV9EQVRBMCAgMHhmZmMwMzZhMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMSBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjFfREFUQTEgIDB4ZmZjMDM2YTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIxX0RBVEEyICAweGZmYzAzNmE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMV9EQVRBMyAgMHhmZmMwMzZhYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMSBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyMV9MRU5HVEggIDB4ZmZjMDM2YjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjFfVElNRVNUQU1QICAweGZmYzAzNmI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIxX0lEMCAgMHhmZmMwMzZiOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMSBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyMV9JRDEgIDB4ZmZjMDM2YmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIyX0RBVEEwICAweGZmYzAzNmMwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIyIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9EQVRBMSAgMHhmZmMwMzZjNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjJfREFUQTIgIDB4ZmZjMDM2YzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIyX0RBVEEzICAweGZmYzAzNmNjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIyIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjIyX0xFTkdUSCAgMHhmZmMwMzZkMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyMl9USU1FU1RBTVAgIDB4ZmZjMDM2ZDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjJfSUQwICAweGZmYzAzNmQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIyIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIyX0lEMSAgMHhmZmMwMzZkYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjNfREFUQTAgIDB4ZmZjMDM2ZTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjMgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0RBVEExICAweGZmYzAzNmU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyM19EQVRBMiAgMHhmZmMwMzZlOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjNfREFUQTMgIDB4ZmZjMDM2ZWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjMgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjNfTEVOR1RIICAweGZmYzAzNmYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjIzX1RJTUVTVEFNUCAgMHhmZmMwMzZmNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyM19JRDAgIDB4ZmZjMDM2ZjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjMgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjNfSUQxICAweGZmYzAzNmZjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNF9EQVRBMCAgMHhmZmMwMzcwMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNCBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjRfREFUQTEgIDB4ZmZjMDM3MDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI0X0RBVEEyICAweGZmYzAzNzA4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNF9EQVRBMyAgMHhmZmMwMzcwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNCBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyNF9MRU5HVEggIDB4ZmZjMDM3MTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjRfVElNRVNUQU1QICAweGZmYzAzNzE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI0X0lEMCAgMHhmZmMwMzcxOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNCBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyNF9JRDEgIDB4ZmZjMDM3MWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI1X0RBVEEwICAweGZmYzAzNzIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI1IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9EQVRBMSAgMHhmZmMwMzcyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjVfREFUQTIgIDB4ZmZjMDM3MjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI1X0RBVEEzICAweGZmYzAzNzJjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI1IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjI1X0xFTkdUSCAgMHhmZmMwMzczMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyNV9USU1FU1RBTVAgIDB4ZmZjMDM3MzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjVfSUQwICAweGZmYzAzNzM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI1IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI1X0lEMSAgMHhmZmMwMzczYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjZfREFUQTAgIDB4ZmZjMDM3NDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjYgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0RBVEExICAweGZmYzAzNzQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNl9EQVRBMiAgMHhmZmMwMzc0OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjZfREFUQTMgIDB4ZmZjMDM3NGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjYgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjZfTEVOR1RIICAweGZmYzAzNzUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjI2X1RJTUVTVEFNUCAgMHhmZmMwMzc1NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyNl9JRDAgIDB4ZmZjMDM3NTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjYgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjZfSUQxICAweGZmYzAzNzVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyN19EQVRBMCAgMHhmZmMwMzc2MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNyBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjdfREFUQTEgIDB4ZmZjMDM3NjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI3X0RBVEEyICAweGZmYzAzNzY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyN19EQVRBMyAgMHhmZmMwMzc2YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNyBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyN19MRU5HVEggIDB4ZmZjMDM3NzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjdfVElNRVNUQU1QICAweGZmYzAzNzc0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI3X0lEMCAgMHhmZmMwMzc3OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNyBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyN19JRDEgIDB4ZmZjMDM3N2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI4X0RBVEEwICAweGZmYzAzNzgwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI4IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9EQVRBMSAgMHhmZmMwMzc4NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjhfREFUQTIgIDB4ZmZjMDM3ODggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI4X0RBVEEzICAweGZmYzAzNzhjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI4IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjI4X0xFTkdUSCAgMHhmZmMwMzc5MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyOF9USU1FU1RBTVAgIDB4ZmZjMDM3OTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjhfSUQwICAweGZmYzAzNzk4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI4IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI4X0lEMSAgMHhmZmMwMzc5YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjlfREFUQTAgIDB4ZmZjMDM3YTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjkgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0RBVEExICAweGZmYzAzN2E0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyOV9EQVRBMiAgMHhmZmMwMzdhOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjlfREFUQTMgIDB4ZmZjMDM3YWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjkgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjlfTEVOR1RIICAweGZmYzAzN2IwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjI5X1RJTUVTVEFNUCAgMHhmZmMwMzdiNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyOV9JRDAgIDB4ZmZjMDM3YjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjkgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjlfSUQxICAweGZmYzAzN2JjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMF9EQVRBMCAgMHhmZmMwMzdjMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMCBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMzBfREFUQTEgIDB4ZmZjMDM3YzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMwX0RBVEEyICAweGZmYzAzN2M4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMF9EQVRBMyAgMHhmZmMwMzdjYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMCBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIzMF9MRU5HVEggIDB4ZmZjMDM3ZDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMzBfVElNRVNUQU1QICAweGZmYzAzN2Q0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMwX0lEMCAgMHhmZmMwMzdkOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMCBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIzMF9JRDEgIDB4ZmZjMDM3ZGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMxX0RBVEEwICAweGZmYzAzN2UwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMxIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9EQVRBMSAgMHhmZmMwMzdlNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMzFfREFUQTIgIDB4ZmZjMDM3ZTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMxX0RBVEEzICAweGZmYzAzN2VjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMxIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjMxX0xFTkdUSCAgMHhmZmMwMzdmMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIzMV9USU1FU1RBTVAgIDB4ZmZjMDM3ZjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMzFfSUQwICAweGZmYzAzN2Y4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMxIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMxX0lEMSAgMHhmZmMwMzdmYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBJRDEgUmVnaXN0ZXIgKi8KKworLyogSE9TVCBQb3J0IFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9DT05UUk9MICAweGZmYzAzYTAwICAgLyogSE9TVCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhPU1RfU1RBVFVTICAweGZmYzAzYTA0ICAgLyogSE9TVCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBIT1NUX1RJTUVPVVQgIDB4ZmZjMDNhMDggICAvKiBIT1NUIEFja25vd2xlZGdlIE1vZGUgVGltZW91dCBSZWdpc3RlciAqLworCisvKiBQaXhlbCBDb21wb3NpdG9yIChQSVhDKSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBQSVhDX0NUTCAgMHhmZmMwNDQwMCAgIC8qIE92ZXJsYXkgZW5hYmxlLCByZXNhbXBsaW5nIG1vZGUsIEkvTyBkYXRhIGZvcm1hdCwgdHJhbnNwYXJlbmN5IGVuYWJsZSwgd2F0ZXJtYXJrIGxldmVsLCBGSUZPIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBQSVhDX1BQTCAgMHhmZmMwNDQwNCAgIC8qIEhvbGRzIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHBlciBsaW5lIG9mIHRoZSBkaXNwbGF5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFBJWENfTFBGICAweGZmYzA0NDA4ICAgLyogSG9sZHMgdGhlIG51bWJlciBvZiBsaW5lcyBwZXIgZnJhbWUgb2YgdGhlIGRpc3BsYXkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0FIU1RBUlQgIDB4ZmZjMDQ0MGMgICAvKiBDb250YWlucyBob3Jpem9udGFsIHN0YXJ0IHBpeGVsIGluZm9ybWF0aW9uIG9mIHRoZSBvdmVybGF5IGRhdGEgKHNldCBBKSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUElYQ19BSEVORCAgMHhmZmMwNDQxMCAgIC8qIENvbnRhaW5zIGhvcml6b250YWwgZW5kIHBpeGVsIGluZm9ybWF0aW9uIG9mIHRoZSBvdmVybGF5IGRhdGEgKHNldCBBKSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFBJWENfQVZTVEFSVCAgMHhmZmMwNDQxNCAgIC8qIENvbnRhaW5zIHZlcnRpY2FsIHN0YXJ0IHBpeGVsIGluZm9ybWF0aW9uIG9mIHRoZSBvdmVybGF5IGRhdGEgKHNldCBBKSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUElYQ19BVkVORCAgMHhmZmMwNDQxOCAgIC8qIENvbnRhaW5zIHZlcnRpY2FsIGVuZCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0FUUkFOU1AgIDB4ZmZjMDQ0MWMgICAvKiBDb250YWlucyB0aGUgdHJhbnNwYXJlbmN5IHJhdGlvIChzZXQgQSkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0JIU1RBUlQgIDB4ZmZjMDQ0MjAgICAvKiBDb250YWlucyBob3Jpem9udGFsIHN0YXJ0IHBpeGVsIGluZm9ybWF0aW9uIG9mIHRoZSBvdmVybGF5IGRhdGEgKHNldCBCKSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUElYQ19CSEVORCAgMHhmZmMwNDQyNCAgIC8qIENvbnRhaW5zIGhvcml6b250YWwgZW5kIHBpeGVsIGluZm9ybWF0aW9uIG9mIHRoZSBvdmVybGF5IGRhdGEgKHNldCBCKSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFBJWENfQlZTVEFSVCAgMHhmZmMwNDQyOCAgIC8qIENvbnRhaW5zIHZlcnRpY2FsIHN0YXJ0IHBpeGVsIGluZm9ybWF0aW9uIG9mIHRoZSBvdmVybGF5IGRhdGEgKHNldCBCKSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUElYQ19CVkVORCAgMHhmZmMwNDQyYyAgIC8qIENvbnRhaW5zIHZlcnRpY2FsIGVuZCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0JUUkFOU1AgIDB4ZmZjMDQ0MzAgICAvKiBDb250YWlucyB0aGUgdHJhbnNwYXJlbmN5IHJhdGlvIChzZXQgQikgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBJWENfSU5UUlNUQVQgIDB4ZmZjMDQ0M2MgICAvKiBPdmVybGF5IGludGVycnVwdCBjb25maWd1cmF0aW9uL3N0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUElYQ19SWUNPTiAgMHhmZmMwNDQ0MCAgIC8qIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gbWF0cml4IHJlZ2lzdGVyLiBDb250YWlucyB0aGUgUi9ZIGNvbnZlcnNpb24gY29lZmZpY2llbnRzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQSVhDX0dVQ09OICAweGZmYzA0NDQ0ICAgLyogQ29sb3Igc3BhY2UgY29udmVyc2lvbiBtYXRyaXggcmVnaXN0ZXIuIENvbnRhaW5zIHRoZSBHL1UgY29udmVyc2lvbiBjb2VmZmljaWVudHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQlZDT04gIDB4ZmZjMDQ0NDggICAvKiBDb2xvciBzcGFjZSBjb252ZXJzaW9uIG1hdHJpeCByZWdpc3Rlci4gQ29udGFpbnMgdGhlIEIvViBjb252ZXJzaW9uIGNvZWZmaWNpZW50cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQSVhDX0NDQklBUyAgMHhmZmMwNDQ0YyAgIC8qIEJpYXMgdmFsdWVzIGZvciB0aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBtYXRyaXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIFBJWENfVEMgIDB4ZmZjMDQ0NTAgICAvKiBIb2xkcyB0aGUgdHJhbnNwYXJlbnQgY29sb3IgdmFsdWUgKi8KKworLyogSGFuZHNoYWtlIE1ETUEgMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBITURNQTBfQ09OVFJPTCAgMHhmZmMwNDUwMCAgIC8qIEhhbmRzaGFrZSBNRE1BMCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTBfRUNJTklUICAweGZmYzA0NTA0ICAgLyogSGFuZHNoYWtlIE1ETUEwIEluaXRpYWwgRWRnZSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUEwX0JDSU5JVCAgMHhmZmMwNDUwOCAgIC8qIEhhbmRzaGFrZSBNRE1BMCBJbml0aWFsIEJsb2NrIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE1ETUEwX0VDVVJHRU5UICAweGZmYzA0NTBjICAgLyogSGFuZHNoYWtlIE1ETUEwIFVyZ2VudCBFZGdlIENvdW50IFRocmVzaGhvbGQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgSE1ETUEwX0VDT1ZFUkZMT1cgIDB4ZmZjMDQ1MTAgICAvKiBIYW5kc2hha2UgTURNQTAgRWRnZSBDb3VudCBPdmVyZmxvdyBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMF9FQ09VTlQgIDB4ZmZjMDQ1MTQgICAvKiBIYW5kc2hha2UgTURNQTAgQ3VycmVudCBFZGdlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTBfQkNPVU5UICAweGZmYzA0NTE4ICAgLyogSGFuZHNoYWtlIE1ETUEwIEN1cnJlbnQgQmxvY2sgQ291bnQgUmVnaXN0ZXIgKi8KKworLyogSGFuZHNoYWtlIE1ETUEgMSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBITURNQTFfQ09OVFJPTCAgMHhmZmMwNDU0MCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTFfRUNJTklUICAweGZmYzA0NTQ0ICAgLyogSGFuZHNoYWtlIE1ETUExIEluaXRpYWwgRWRnZSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUExX0JDSU5JVCAgMHhmZmMwNDU0OCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBJbml0aWFsIEJsb2NrIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSE1ETUExX0VDVVJHRU5UICAweGZmYzA0NTRjICAgLyogSGFuZHNoYWtlIE1ETUExIFVyZ2VudCBFZGdlIENvdW50IFRocmVzaGhvbGQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgSE1ETUExX0VDT1ZFUkZMT1cgIDB4ZmZjMDQ1NTAgICAvKiBIYW5kc2hha2UgTURNQTEgRWRnZSBDb3VudCBPdmVyZmxvdyBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMV9FQ09VTlQgIDB4ZmZjMDQ1NTQgICAvKiBIYW5kc2hha2UgTURNQTEgQ3VycmVudCBFZGdlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTFfQkNPVU5UICAweGZmYzA0NTU4ICAgLyogSGFuZHNoYWtlIE1ETUExIEN1cnJlbnQgQmxvY2sgQ291bnQgUmVnaXN0ZXIgKi8KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAgICAgU0lOR0xFIEJJVCBNQUNSTyBQQUlSUyAoYml0IG1hc2sgYW5kIG5lZ2F0ZWQgb25lKSAgICAgICovCisvKiAgICAgYW5kIE1VTFRJIEJJVCBSRUFEIE1BQ1JPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBQSVhDX0VOICAweDEgICAgICAgIC8qIFBpeGVsIENvbXBvc2l0b3IgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblBJWENfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBPVlJfQV9FTiAgMHgyICAgICAgICAvKiBPdmVybGF5IEEgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuT1ZSX0FfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBPVlJfQl9FTiAgMHg0ICAgICAgICAvKiBPdmVybGF5IEIgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuT1ZSX0JfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBJTUdfRk9STSAgMHg4ICAgICAgICAvKiBJbWFnZSBEYXRhIEZvcm1hdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklNR19GT1JNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX0ZPUk0gIDB4MTAgICAgICAgLyogT3ZlcmxheSBEYXRhIEZvcm1hdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk9WUl9GT1JNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgT1VUX0ZPUk0gIDB4MjAgICAgICAgLyogT3V0cHV0IERhdGEgRm9ybWF0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuT1VUX0ZPUk0gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVURTX01PRCAgMHg0MCAgICAgICAvKiBSZXNhbXBsaW5nIE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuVURTX01PRCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRDX0VOICAweDgwICAgICAgIC8qIFRyYW5zcGFyZW50IENvbG9yIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRDX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSU1HX1NUQVQgIDB4MzAwICAgICAgLyogSW1hZ2UgRklGTyBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBPVlJfU1RBVCAgMHhjMDAgICAgICAvKiBPdmVybGF5IEZJRk8gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBXTV9MVkwgIDB4MzAwMCAgICAgLyogRklGTyBXYXRlcm1hcmsgTGV2ZWwgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0FIU1RBUlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFfSFNUQVJUICAweGZmZiAgICAgIC8qIEhvcml6b250YWwgU3RhcnQgQ29vcmRpbmF0ZXMgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0FIRU5EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEFfSEVORCAgMHhmZmYgICAgICAvKiBIb3Jpem9udGFsIEVuZCBDb29yZGluYXRlcyAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfQVZTVEFSVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQV9WU1RBUlQgIDB4M2ZmICAgICAgLyogVmVydGljYWwgU3RhcnQgQ29vcmRpbmF0ZXMgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0FWRU5EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEFfVkVORCAgMHgzZmYgICAgICAvKiBWZXJ0aWNhbCBFbmQgQ29vcmRpbmF0ZXMgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0FUUkFOU1AgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFfVFJBTlNQICAweGYgICAgICAgIC8qIFRyYW5zcGFyZW5jeSBWYWx1ZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfQkhTVEFSVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQl9IU1RBUlQgIDB4ZmZmICAgICAgLyogSG9yaXpvbnRhbCBTdGFydCBDb29yZGluYXRlcyAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfQkhFTkQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQl9IRU5EICAweGZmZiAgICAgIC8qIEhvcml6b250YWwgRW5kIENvb3JkaW5hdGVzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19CVlNUQVJUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBCX1ZTVEFSVCAgMHgzZmYgICAgICAvKiBWZXJ0aWNhbCBTdGFydCBDb29yZGluYXRlcyAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfQlZFTkQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQl9WRU5EICAweDNmZiAgICAgIC8qIFZlcnRpY2FsIEVuZCBDb29yZGluYXRlcyAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfQlRSQU5TUCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQl9UUkFOU1AgIDB4ZiAgICAgICAgLyogVHJhbnNwYXJlbmN5IFZhbHVlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19JTlRSU1RBVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIE9WUl9JTlRfRU4gIDB4MSAgICAgICAgLyogSW50ZXJydXB0IGF0IEVuZCBvZiBMYXN0IFZhbGlkIE92ZXJsYXkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuT1ZSX0lOVF9FTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBGUk1fSU5UX0VOICAweDIgICAgICAgIC8qIEludGVycnVwdCBhdCBFbmQgb2YgRnJhbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRlJNX0lOVF9FTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgT1ZSX0lOVF9TVEFUICAweDQgICAgICAgIC8qIE92ZXJsYXkgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuT1ZSX0lOVF9TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBGUk1fSU5UX1NUQVQgIDB4OCAgICAgICAgLyogRnJhbWUgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuRlJNX0lOVF9TVEFUICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19SWUNPTiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMTEgIDB4M2ZmICAgICAgLyogQTExIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEExMiAgMHhmZmMwMCAgICAvKiBBMTIgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTEzICAweDNmZjAwMDAwIC8qIEExMyBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUllfTVVMVDQgIDB4NDAwMDAwMDAgLyogTXVsdGlwbHkgUm93IGJ5IDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5SWV9NVUxUNCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFBJWENfR1VDT04gKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTIxICAweDNmZiAgICAgIC8qIEEyMSBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMjIgIDB4ZmZjMDAgICAgLyogQTIyIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEyMyAgMHgzZmYwMDAwMCAvKiBBMjMgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEdVX01VTFQ0ICAweDQwMDAwMDAwIC8qIE11bHRpcGx5IFJvdyBieSA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuR1VfTVVMVDQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBQSVhDX0JWQ09OICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEzMSAgMHgzZmYgICAgICAvKiBBMzEgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTMyICAweGZmYzAwICAgIC8qIEEzMiBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMzMgIDB4M2ZmMDAwMDAgLyogQTMzIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBCVl9NVUxUNCAgMHg0MDAwMDAwMCAvKiBNdWx0aXBseSBSb3cgYnkgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkJWX01VTFQ0ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19DQ0JJQVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTE0ICAweDNmZiAgICAgIC8qIEExNCBpbiB0aGUgQmlhcyBWZWN0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEyNCAgMHhmZmMwMCAgICAvKiBBMjQgaW4gdGhlIEJpYXMgVmVjdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMzQgIDB4M2ZmMDAwMDAgLyogQTM0IGluIHRoZSBCaWFzIFZlY3RvciAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfVEMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFJZX1RSQU5TICAweGZmICAgICAgIC8qIFRyYW5zcGFyZW50IENvbG9yIC0gUi9ZIENvbXBvbmVudCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEdVX1RSQU5TICAweGZmMDAgICAgIC8qIFRyYW5zcGFyZW50IENvbG9yIC0gRy9VIENvbXBvbmVudCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEJWX1RSQU5TICAweGZmMDAwMCAgIC8qIFRyYW5zcGFyZW50IENvbG9yIC0gQi9WIENvbXBvbmVudCAqLworCisvKiBCaXQgbWFza3MgZm9yIEhPU1RfQ09OVFJPTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEhPU1RfRU4gIDB4MSAgICAgICAgLyogSG9zdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuSE9TVF9FTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfRU5EICAweDIgICAgICAgIC8qIEhvc3QgRW5kaWFuZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSE9TVF9FTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIERBVEFfU0laRSAgMHg0ICAgICAgICAvKiBEYXRhIFNpemUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkRBVEFfU0laRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfUlNUICAweDggICAgICAgIC8qIEhvc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5IT1NUX1JTVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEhSRFlfT1ZSICAweDIwICAgICAgIC8qIEhvc3QgUmVhZHkgT3ZlcnJpZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5IUkRZX09WUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIElOVF9NT0RFICAweDQwICAgICAgIC8qIEludGVycnVwdCBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSU5UX01PREUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBCVF9FTiAgMHg4MCAgICAgICAvKiBCdXMgVGltZW91dCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5CVF9FTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRUhXICAweDEwMCAgICAgIC8qIEVuYWJsZSBIb3N0IFdyaXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5FSFcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEVIUiAgMHgyMDAgICAgICAvKiBFbmFibGUgSG9zdCBSZWFkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5FSFIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEJEUiAgMHg0MDAgICAgICAvKiBCdXJzdCBETUEgUmVxdWVzdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkJEUiAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEhPU1RfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSRUFEWSAgMHgxICAgICAgICAvKiBETUEgUmVhZHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SRUFEWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEZJRk9GVUxMICAweDIgICAgICAgIC8qIEZJRk8gRnVsbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkZJRk9GVUxMICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBGSUZPRU1QVFkgIDB4NCAgICAgICAgLyogRklGTyBFbXB0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuRklGT0VNUFRZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ09NUExFVEUgIDB4OCAgICAgICAgLyogRE1BIENvbXBsZXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQ09NUExFVEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSFNISyAgMHgxMCAgICAgICAvKiBIb3N0IEhhbmRzaGFrZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5IU0hLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVPVVQgIDB4MjAgICAgICAgLyogSG9zdCBUaW1lb3V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblRJTUVPVVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSElSUSAgMHg0MCAgICAgICAvKiBIb3N0IEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkhJUlEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgQUxMT1dfQ05GRyAgMHg4MCAgICAgICAvKiBBbGxvdyBOZXcgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5BTExPV19DTkZHICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQV9ESVIgIDB4MTAwICAgICAgLyogRE1BIERpcmVjdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ETUFfRElSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBCVEUgIDB4MjAwICAgICAgLyogQnVzIFRpbWVvdXQgRW5hYmxlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQlRFICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgSE9TVF9USU1FT1VUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgQ09VTlRfVElNRU9VVCAgMHg3ZmYgICAgICAvKiBIb3N0IFRpbWVvdXQgY291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBUSU1FUl9FTkFCTEUxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVOOCAgMHgxICAgICAgICAvKiBUaW1lciA4IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNRU44ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FTjkgIDB4MiAgICAgICAgLyogVGltZXIgOSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRJTUVOOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FTjEwICAweDQgICAgICAgIC8qIFRpbWVyIDEwIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5USU1FTjEwICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVElNRVJfRElTQUJMRTEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1ESVM4ICAweDEgICAgICAgIC8qIFRpbWVyIDggRGlzYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5USU1ESVM4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTURJUzkgIDB4MiAgICAgICAgLyogVGltZXIgOSBEaXNhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblRJTURJUzkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUSU1ESVMxMCAgMHg0ICAgICAgICAvKiBUaW1lciAxMCBEaXNhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuVElNRElTMTAgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBUSU1FUl9TVEFUVVMxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUlMOCAgMHgxICAgICAgICAvKiBUaW1lciA4IEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNSUw4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1JTDkgIDB4MiAgICAgICAgLyogVGltZXIgOSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRJTUlMOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1JTDEwICAweDQgICAgICAgIC8qIFRpbWVyIDEwIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5USU1JTDEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBUT1ZGX0VSUjggIDB4MTAgICAgICAgLyogVGltZXIgOCBDb3VudGVyIE92ZXJmbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5UT1ZGX0VSUjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFRPVkZfRVJSOSAgMHgyMCAgICAgICAvKiBUaW1lciA5IENvdW50ZXIgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblRPVkZfRVJSOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBUT1ZGX0VSUjEwICAweDQwICAgICAgIC8qIFRpbWVyIDEwIENvdW50ZXIgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuVE9WRl9FUlIxMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSVU44ICAweDEwMDAgICAgIC8qIFRpbWVyIDggU2xhdmUgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSVU44ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJVTjkgIDB4MjAwMCAgICAgLyogVGltZXIgOSBTbGF2ZSBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJVTjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRSVU4xMCAgMHg0MDAwICAgICAvKiBUaW1lciAxMCBTbGF2ZSBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5UUlVOMTAgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBFUFBJMCBhcmUgb2J0YWluZWQgZnJvbSBjb21tb24gYmFzZSBoZWFkZXIgZm9yIEVQUEl4IChFUFBJMSBhbmQgRVBQSTIpICovCisKKy8qIEJpdCBtYXNrcyBmb3IgSE1ETUF4X0NPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBITURNQUVOICAweDEgICAgICAgIC8qIEhhbmRzaGFrZSBNRE1BIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ITURNQUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBSRVAgIDB4MiAgICAgICAgLyogSGFuZHNoYWtlIE1ETUEgUmVxdWVzdCBQb2xhcml0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuUkVQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVVEUgIDB4OCAgICAgICAgLyogVXJnZW5jeSBUaHJlc2hvbGQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5VVEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE9JRSAgMHgxMCAgICAgICAvKiBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5PSUUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQkRJRSAgMHgyMCAgICAgICAvKiBCbG9jayBEb25lIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQkRJRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNQkRJICAweDQwICAgICAgIC8qIE1hc2sgQmxvY2sgRG9uZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUJESSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRFJRICAweDMwMCAgICAgIC8qIEhhbmRzaGFrZSBNRE1BIFJlcXVlc3QgVHlwZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUkJDICAweDEwMDAgICAgIC8qIEZvcmNlIFJlbG9hZCBvZiBCQ09VTlQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblJCQyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBTICAweDIwMDAgICAgIC8qIFBpbiBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIG5QUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9JICAweDQwMDAgICAgIC8qIE92ZXJmbG93IEludGVycnVwdCBHZW5lcmF0ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIG5PSSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQkRJICAweDgwMDAgICAgIC8qIEJsb2NrIERvbmUgSW50ZXJydXB0IEdlbmVyYXRlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQkRJICAweDAgICAgICAgCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qICAgICBNVUxUSSBCSVQgTUFDUk8gRU5VTUVSQVRJT05TICAgICAgICAgICAgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2VuZGlmIC8qIF9ERUZfQkY1NDRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0OC5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZTMwNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ4LmgKQEAgLTAsMCArMSwxOTY2IEBACisvKgorICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ4LmgKKyAqIEJhc2VkIG9uOgorICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6CisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBSZXY6CisgKgorICogTW9kaWZpZWQ6CisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfREVGX0JGNTQ4X0gKKyNkZWZpbmUgX0RFRl9CRjU0OF9ICisKKy8qIEluY2x1ZGUgYWxsIENvcmUgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxhc20vbWFjaC1jb21tb24vZGVmX0xQQmxhY2tmaW4uaD4KKworLyogU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1NDggKi8KKworLyogSW5jbHVkZSBkZWZCRjU0eF9iYXNlLmggZm9yIHRoZSBzZXQgb2YgI2RlZmluZXMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBBRFNQLUJGNTR4IHByb2Nlc3NvcnMgKi8KKyNpbmNsdWRlICJkZWZCRjU0eF9iYXNlLmgiCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSAjZGVmaW5lcyBuZWVkZWQgYnkgQURTUC1CRjU0OCB0aGF0IGFyZSBub3QgaW4gdGhlIGNvbW1vbiBoZWFkZXIgKi8KKworLyogVGltZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9DT05GSUcgIDB4ZmZjMDA2MDAgICAvKiBUaW1lciA4IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVI4X0NPVU5URVIgIDB4ZmZjMDA2MDQgICAvKiBUaW1lciA4IENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9QRVJJT0QgIDB4ZmZjMDA2MDggICAvKiBUaW1lciA4IFBlcmlvZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRJTUVSOF9XSURUSCAgMHhmZmMwMDYwYyAgIC8qIFRpbWVyIDggV2lkdGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9DT05GSUcgIDB4ZmZjMDA2MTAgICAvKiBUaW1lciA5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVI5X0NPVU5URVIgIDB4ZmZjMDA2MTQgICAvKiBUaW1lciA5IENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9QRVJJT0QgIDB4ZmZjMDA2MTggICAvKiBUaW1lciA5IFBlcmlvZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRJTUVSOV9XSURUSCAgMHhmZmMwMDYxYyAgIC8qIFRpbWVyIDkgV2lkdGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVIxMF9DT05GSUcgIDB4ZmZjMDA2MjAgICAvKiBUaW1lciAxMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVElNRVIxMF9DT1VOVEVSICAweGZmYzAwNjI0ICAgLyogVGltZXIgMTAgQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FUjEwX1BFUklPRCAgMHhmZmMwMDYyOCAgIC8qIFRpbWVyIDEwIFBlcmlvZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRVIxMF9XSURUSCAgMHhmZmMwMDYyYyAgIC8qIFRpbWVyIDEwIFdpZHRoIFJlZ2lzdGVyICovCisKKy8qIFRpbWVyIEdyb3VwIG9mIDMgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSX0VOQUJMRTEgIDB4ZmZjMDA2NDAgICAvKiBUaW1lciBHcm91cCBvZiAzIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FUl9ESVNBQkxFMSAgMHhmZmMwMDY0NCAgIC8qIFRpbWVyIEdyb3VwIG9mIDMgRGlzYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRVJfU1RBVFVTMSAgMHhmZmMwMDY0OCAgIC8qIFRpbWVyIEdyb3VwIG9mIDMgU3RhdHVzIFJlZ2lzdGVyICovCisKKy8qIFNQT1JUMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfVENSMSAgMHhmZmMwMDgwMCAgIC8qIFNQT1JUMCBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX1RDUjIgIDB4ZmZjMDA4MDQgICAvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNQT1JUMF9UQ0xLRElWICAweGZmYzAwODA4ICAgLyogU1BPUlQwIFRyYW5zbWl0IFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTUE9SVDBfVEZTRElWICAweGZmYzAwODBjICAgLyogU1BPUlQwIFRyYW5zbWl0IEZyYW1lIFN5bmMgRGl2aWRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9UWCAgMHhmZmMwMDgxMCAgIC8qIFNQT1JUMCBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX1JYICAweGZmYzAwODE4ICAgLyogU1BPUlQwIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkNSMSAgMHhmZmMwMDgyMCAgIC8qIFNQT1JUMCBSZWNlaXZlIENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkNSMiAgMHhmZmMwMDgyNCAgIC8qIFNQT1JUMCBSZWNlaXZlIENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkNMS0RJViAgMHhmZmMwMDgyOCAgIC8qIFNQT1JUMCBSZWNlaXZlIFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTUE9SVDBfUkZTRElWICAweGZmYzAwODJjICAgLyogU1BPUlQwIFJlY2VpdmUgRnJhbWUgU3luYyBEaXZpZGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9TVEFUICAweGZmYzAwODMwICAgLyogU1BPUlQwIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfQ0hOTCAgMHhmZmMwMDgzNCAgIC8qIFNQT1JUMCBDdXJyZW50IENoYW5uZWwgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTUNNQzEgIDB4ZmZjMDA4MzggICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTUNNQzIgIDB4ZmZjMDA4M2MgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVRDUzAgIDB4ZmZjMDA4NDAgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9NVENTMSAgMHhmZmMwMDg0NCAgIC8qIFNQT1JUMCBNdWx0aSBjaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX01UQ1MyICAweGZmYzAwODQ4ICAgLyogU1BPUlQwIE11bHRpIGNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVRDUzMgIDB4ZmZjMDA4NGMgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9NUkNTMCAgMHhmZmMwMDg1MCAgIC8qIFNQT1JUMCBNdWx0aSBjaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVJDUzEgIDB4ZmZjMDA4NTQgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX01SQ1MyICAweGZmYzAwODU4ICAgLyogU1BPUlQwIE11bHRpIGNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9NUkNTMyAgMHhmZmMwMDg1YyAgIC8qIFNQT1JUMCBNdWx0aSBjaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDMgKi8KKworLyogRVBQSTAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMF9TVEFUVVMgIDB4ZmZjMDEwMDAgICAvKiBFUFBJMCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMF9IQ09VTlQgIDB4ZmZjMDEwMDQgICAvKiBFUFBJMCBIb3Jpem9udGFsIFRyYW5zZmVyIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfSERFTEFZICAweGZmYzAxMDA4ICAgLyogRVBQSTAgSG9yaXpvbnRhbCBEZWxheSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkwX1ZDT1VOVCAgMHhmZmMwMTAwYyAgIC8qIEVQUEkwIFZlcnRpY2FsIFRyYW5zZmVyIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfVkRFTEFZICAweGZmYzAxMDEwICAgLyogRVBQSTAgVmVydGljYWwgRGVsYXkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRVBQSTBfRlJBTUUgIDB4ZmZjMDEwMTQgICAvKiBFUFBJMCBMaW5lcyBwZXIgRnJhbWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEVQUEkwX0xJTkUgIDB4ZmZjMDEwMTggICAvKiBFUFBJMCBTYW1wbGVzIHBlciBMaW5lIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfQ0xLRElWICAweGZmYzAxMDFjICAgLyogRVBQSTAgQ2xvY2sgRGl2aWRlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUFBJMF9DT05UUk9MICAweGZmYzAxMDIwICAgLyogRVBQSTAgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUFBJMF9GUzFXX0hCTCAgMHhmZmMwMTAyNCAgIC8qIEVQUEkwIEZTMSBXaWR0aCBSZWdpc3RlciAvIEVQUEkwIEhvcml6b250YWwgQmxhbmtpbmcgU2FtcGxlcyBQZXIgTGluZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQUEkwX0ZTMVBfQVZQTCAgMHhmZmMwMTAyOCAgIC8qIEVQUEkwIEZTMSBQZXJpb2QgUmVnaXN0ZXIgLyBFUFBJMCBBY3RpdmUgVmlkZW8gU2FtcGxlcyBQZXIgTGluZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUFBJMF9GUzJXX0xWQiAgMHhmZmMwMTAyYyAgIC8qIEVQUEkwIEZTMiBXaWR0aCBSZWdpc3RlciAvIEVQUEkwIExpbmVzIG9mIFZlcnRpY2FsIEJsYW5raW5nIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVBQSTBfRlMyUF9MQVZGICAweGZmYzAxMDMwICAgLyogRVBQSTAgRlMyIFBlcmlvZCBSZWdpc3Rlci8gRVBQSTAgTGluZXMgb2YgQWN0aXZlIFZpZGVvIFBlciBGaWVsZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRVBQSTBfQ0xJUCAgMHhmZmMwMTAzNCAgIC8qIEVQUEkwIENsaXBwaW5nIFJlZ2lzdGVyICovCisKKy8qIFVBUlQyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfRExMICAweGZmYzAyMTAwICAgLyogRGl2aXNvciBMYXRjaCBMb3cgQnl0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQyX0RMSCAgMHhmZmMwMjEwNCAgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBCeXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9HQ1RMICAweGZmYzAyMTA4ICAgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9MQ1IgIDB4ZmZjMDIxMGMgICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9NQ1IgIDB4ZmZjMDIxMTAgICAvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfTFNSICAweGZmYzAyMTE0ICAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9NU1IgIDB4ZmZjMDIxMTggICAvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9TQ1IgIDB4ZmZjMDIxMWMgICAvKiBTY3JhdGNoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBVQVJUMl9JRVJfU0VUICAweGZmYzAyMTIwICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBTZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVQVJUMl9JRVJfQ0xFQVIgIDB4ZmZjMDIxMjQgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIENsZWFyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfUkJSICAweGZmYzAyMTJjICAgLyogUmVjZWl2ZSBCdWZmZXIgUmVnaXN0ZXIgKi8KKworLyogVHdvIFdpcmUgSW50ZXJmYWNlIFJlZ2lzdGVycyAoVFdJMSkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUV0kxX0NMS0RJViAgMHhmZmMwMjIwMCAgIC8qIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUV0kxX0NPTlRST0wgIDB4ZmZjMDIyMDQgICAvKiBUV0kgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfU0xBVkVfQ1RSTCAgMHhmZmMwMjIwOCAgIC8qIFRXSSBTbGF2ZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kxX1NMQVZFX1NUQVQgIDB4ZmZjMDIyMGMgICAvKiBUV0kgU2xhdmUgTW9kZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kxX1NMQVZFX0FERFIgIDB4ZmZjMDIyMTAgICAvKiBUV0kgU2xhdmUgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBUV0kxX01BU1RFUl9DVFJMICAweGZmYzAyMjE0ICAgLyogVFdJIE1hc3RlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFRXSTFfTUFTVEVSX1NUQVQgIDB4ZmZjMDIyMTggICAvKiBUV0kgTWFzdGVyIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBUV0kxX01BU1RFUl9BRERSICAweGZmYzAyMjFjICAgLyogVFdJIE1hc3RlciBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRXSTFfSU5UX1NUQVQgIDB4ZmZjMDIyMjAgICAvKiBUV0kgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFdJMV9JTlRfTUFTSyAgMHhmZmMwMjIyNCAgIC8qIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kxX0ZJRk9fQ1RSTCAgMHhmZmMwMjIyOCAgIC8qIFRXSSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMV9GSUZPX1NUQVQgIDB4ZmZjMDIyMmMgICAvKiBUV0kgRklGTyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMV9YTVRfREFUQTggIDB4ZmZjMDIyODAgICAvKiBUV0kgRklGTyBUcmFuc21pdCBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMV9YTVRfREFUQTE2ICAweGZmYzAyMjg0ICAgLyogVFdJIEZJRk8gVHJhbnNtaXQgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kxX1JDVl9EQVRBOCAgMHhmZmMwMjI4OCAgIC8qIFRXSSBGSUZPIFJlY2VpdmUgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfUkNWX0RBVEExNiAgMHhmZmMwMjI4YyAgIC8qIFRXSSBGSUZPIFJlY2VpdmUgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlciAqLworCisvKiBTUEkyICBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBTUEkyX0NUTCAgMHhmZmMwMjQwMCAgIC8qIFNQSTIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBTUEkyX0ZMRyAgMHhmZmMwMjQwNCAgIC8qIFNQSTIgRmxhZyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQSTJfU1RBVCAgMHhmZmMwMjQwOCAgIC8qIFNQSTIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1BJMl9UREJSICAweGZmYzAyNDBjICAgLyogU1BJMiBUcmFuc21pdCBEYXRhIEJ1ZmZlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQSTJfUkRCUiAgMHhmZmMwMjQxMCAgIC8qIFNQSTIgUmVjZWl2ZSBEYXRhIEJ1ZmZlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQSTJfQkFVRCAgMHhmZmMwMjQxNCAgIC8qIFNQSTIgQmF1ZCBSYXRlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQSTJfU0hBRE9XICAweGZmYzAyNDE4ICAgLyogU1BJMiBSZWNlaXZlIERhdGEgQnVmZmVyIFNoYWRvdyBSZWdpc3RlciAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIENvbmZpZyAxIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUMxICAweGZmYzAzMjAwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01EMSAgMHhmZmMwMzIwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBEaXJlY3Rpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJTMSAgMHhmZmMwMzIwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBTZXQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJSMSAgMHhmZmMwMzIwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVEExICAweGZmYzAzMjEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBUcmFuc21pdCBBY2tub3dsZWRnZSBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQUExICAweGZmYzAzMjE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBBYm9ydCBBY2tub3dsZWRnZSBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STVAxICAweGZmYzAzMjE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STUwxICAweGZmYzAzMjFjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgTG9zdCBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUJUSUYxICAweGZmYzAzMjIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQlJJRjEgIDB4ZmZjMDMyMjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01CSU0xICAweGZmYzAzMjI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX1JGSDEgIDB4ZmZjMDMyMmMgICAvKiBDQU4gQ29udHJvbGxlciAxIFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9PUFNTMSAgMHhmZmMwMzIzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgT3ZlcndyaXRlIFByb3RlY3Rpb24gU2luZ2xlIFNob3QgVHJhbnNtaXQgUmVnaXN0ZXIgMSAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIENvbmZpZyAyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUMyICAweGZmYzAzMjQwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01EMiAgMHhmZmMwMzI0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBEaXJlY3Rpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJTMiAgMHhmZmMwMzI0OCAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBTZXQgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJSMiAgMHhmZmMwMzI0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVEEyICAweGZmYzAzMjUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBUcmFuc21pdCBBY2tub3dsZWRnZSBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQUEyICAweGZmYzAzMjU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBBYm9ydCBBY2tub3dsZWRnZSBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STVAyICAweGZmYzAzMjU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STUwyICAweGZmYzAzMjVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgTG9zdCBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUJUSUYyICAweGZmYzAzMjYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQlJJRjIgIDB4ZmZjMDMyNjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01CSU0yICAweGZmYzAzMjY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX1JGSDIgIDB4ZmZjMDMyNmMgICAvKiBDQU4gQ29udHJvbGxlciAxIFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9PUFNTMiAgMHhmZmMwMzI3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgT3ZlcndyaXRlIFByb3RlY3Rpb24gU2luZ2xlIFNob3QgVHJhbnNtaXQgUmVnaXN0ZXIgMiAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIENsb2NrL0ludGVycnVwdC9Db3VudGVyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0NMT0NLICAweGZmYzAzMjgwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBDbG9jayBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDQU4xX1RJTUlORyAgMHhmZmMwMzI4NCAgIC8qIENBTiBDb250cm9sbGVyIDEgVGltaW5nIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0RFQlVHICAweGZmYzAzMjg4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBEZWJ1ZyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDQU4xX1NUQVRVUyAgMHhmZmMwMzI4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgR2xvYmFsIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0NFQyAgMHhmZmMwMzI5MCAgIC8qIENBTiBDb250cm9sbGVyIDEgRXJyb3IgQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0dJUyAgMHhmZmMwMzI5NCAgIC8qIENBTiBDb250cm9sbGVyIDEgR2xvYmFsIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9HSU0gIDB4ZmZjMDMyOTggICAvKiBDQU4gQ29udHJvbGxlciAxIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0dJRiAgMHhmZmMwMzI5YyAgIC8qIENBTiBDb250cm9sbGVyIDEgR2xvYmFsIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0FOMV9DT05UUk9MICAweGZmYzAzMmEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfSU5UUiAgMHhmZmMwMzJhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01CVEQgIDB4ZmZjMDMyYWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggVGVtcG9yYXJ5IERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9FV1IgIDB4ZmZjMDMyYjAgICAvKiBDQU4gQ29udHJvbGxlciAxIFByb2dyYW1tYWJsZSBXYXJuaW5nIExldmVsIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfRVNSICAweGZmYzAzMmI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVUNDTlQgIDB4ZmZjMDMyYzQgICAvKiBDQU4gQ29udHJvbGxlciAxIFVuaXZlcnNhbCBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9VQ1JDICAweGZmYzAzMmM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBVbml2ZXJzYWwgQ291bnRlciBGb3JjZSBSZWxvYWQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVUNDTkYgIDB4ZmZjMDMyY2MgICAvKiBDQU4gQ29udHJvbGxlciAxIFVuaXZlcnNhbCBDb3VudGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKworLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEFjY2VwdGFuY2UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wMEwgIDB4ZmZjMDMzMDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAwSCAgMHhmZmMwMzMwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wMUwgIDB4ZmZjMDMzMDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAxSCAgMHhmZmMwMzMwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wMkwgIDB4ZmZjMDMzMTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAySCAgMHhmZmMwMzMxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wM0wgIDB4ZmZjMDMzMTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAzSCAgMHhmZmMwMzMxYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wNEwgIDB4ZmZjMDMzMjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA0SCAgMHhmZmMwMzMyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wNUwgIDB4ZmZjMDMzMjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA1SCAgMHhmZmMwMzMyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wNkwgIDB4ZmZjMDMzMzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA2SCAgMHhmZmMwMzMzNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wN0wgIDB4ZmZjMDMzMzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA3SCAgMHhmZmMwMzMzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wOEwgIDB4ZmZjMDMzNDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggOCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA4SCAgMHhmZmMwMzM0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wOUwgIDB4ZmZjMDMzNDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggOSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA5SCAgMHhmZmMwMzM0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xMEwgIDB4ZmZjMDMzNTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xMEggIDB4ZmZjMDMzNTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTExTCAgMHhmZmMwMzM1OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTExSCAgMHhmZmMwMzM1YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTJMICAweGZmYzAzMzYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTJIICAweGZmYzAzMzY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xM0wgIDB4ZmZjMDMzNjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xM0ggIDB4ZmZjMDMzNmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE0TCAgMHhmZmMwMzM3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE0SCAgMHhmZmMwMzM3NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTVMICAweGZmYzAzMzc4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTVIICAweGZmYzAzMzdjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKworLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEFjY2VwdGFuY2UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xNkwgIDB4ZmZjMDMzODAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xNkggIDB4ZmZjMDMzODQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE3TCAgMHhmZmMwMzM4OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE3SCAgMHhmZmMwMzM4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMThMICAweGZmYzAzMzkwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMThIICAweGZmYzAzMzk0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xOUwgIDB4ZmZjMDMzOTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xOUggIDB4ZmZjMDMzOWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIwTCAgMHhmZmMwMzNhMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIwSCAgMHhmZmMwMzNhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjFMICAweGZmYzAzM2E4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjFIICAweGZmYzAzM2FjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yMkwgIDB4ZmZjMDMzYjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yMkggIDB4ZmZjMDMzYjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIzTCAgMHhmZmMwMzNiOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIzSCAgMHhmZmMwMzNiYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjRMICAweGZmYzAzM2MwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjRIICAweGZmYzAzM2M0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yNUwgIDB4ZmZjMDMzYzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yNUggIDB4ZmZjMDMzY2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI2TCAgMHhmZmMwMzNkMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI2SCAgMHhmZmMwMzNkNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjdMICAweGZmYzAzM2Q4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjdIICAweGZmYzAzM2RjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yOEwgIDB4ZmZjMDMzZTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yOEggIDB4ZmZjMDMzZTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI5TCAgMHhmZmMwMzNlOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI5SCAgMHhmZmMwMzNlYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMzBMICAweGZmYzAzM2YwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMzBIICAweGZmYzAzM2Y0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0zMUwgIDB4ZmZjMDMzZjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0zMUggIDB4ZmZjMDMzZmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggRGF0YSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMCAgMHhmZmMwMzQwMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMSAgMHhmZmMwMzQwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMiAgMHhmZmMwMzQwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMyAgMHhmZmMwMzQwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0xFTkdUSCAgMHhmZmMwMzQxMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAwX1RJTUVTVEFNUCAgMHhmZmMwMzQxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0lEMCAgMHhmZmMwMzQxOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0lEMSAgMHhmZmMwMzQxYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMCAgMHhmZmMwMzQyMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMSAgMHhmZmMwMzQyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMiAgMHhmZmMwMzQyOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMyAgMHhmZmMwMzQyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0xFTkdUSCAgMHhmZmMwMzQzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAxX1RJTUVTVEFNUCAgMHhmZmMwMzQzNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0lEMCAgMHhmZmMwMzQzOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0lEMSAgMHhmZmMwMzQzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMCAgMHhmZmMwMzQ0MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMSAgMHhmZmMwMzQ0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMiAgMHhmZmMwMzQ0OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMyAgMHhmZmMwMzQ0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0xFTkdUSCAgMHhmZmMwMzQ1MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAyX1RJTUVTVEFNUCAgMHhmZmMwMzQ1NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0lEMCAgMHhmZmMwMzQ1OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0lEMSAgMHhmZmMwMzQ1YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMCAgMHhmZmMwMzQ2MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMSAgMHhmZmMwMzQ2NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMiAgMHhmZmMwMzQ2OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMyAgMHhmZmMwMzQ2YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0xFTkdUSCAgMHhmZmMwMzQ3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAzX1RJTUVTVEFNUCAgMHhmZmMwMzQ3NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0lEMCAgMHhmZmMwMzQ3OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0lEMSAgMHhmZmMwMzQ3YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMCAgMHhmZmMwMzQ4MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMSAgMHhmZmMwMzQ4NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMiAgMHhmZmMwMzQ4OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMyAgMHhmZmMwMzQ4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0xFTkdUSCAgMHhmZmMwMzQ5MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA0X1RJTUVTVEFNUCAgMHhmZmMwMzQ5NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0lEMCAgMHhmZmMwMzQ5OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0lEMSAgMHhmZmMwMzQ5YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMCAgMHhmZmMwMzRhMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMSAgMHhmZmMwMzRhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMiAgMHhmZmMwMzRhOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMyAgMHhmZmMwMzRhYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0xFTkdUSCAgMHhmZmMwMzRiMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA1X1RJTUVTVEFNUCAgMHhmZmMwMzRiNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0lEMCAgMHhmZmMwMzRiOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0lEMSAgMHhmZmMwMzRiYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMCAgMHhmZmMwMzRjMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMSAgMHhmZmMwMzRjNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMiAgMHhmZmMwMzRjOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMyAgMHhmZmMwMzRjYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0xFTkdUSCAgMHhmZmMwMzRkMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA2X1RJTUVTVEFNUCAgMHhmZmMwMzRkNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0lEMCAgMHhmZmMwMzRkOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0lEMSAgMHhmZmMwMzRkYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMCAgMHhmZmMwMzRlMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMSAgMHhmZmMwMzRlNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMiAgMHhmZmMwMzRlOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMyAgMHhmZmMwMzRlYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0xFTkdUSCAgMHhmZmMwMzRmMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA3X1RJTUVTVEFNUCAgMHhmZmMwMzRmNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0lEMCAgMHhmZmMwMzRmOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0lEMSAgMHhmZmMwMzRmYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMCAgMHhmZmMwMzUwMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMSAgMHhmZmMwMzUwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMiAgMHhmZmMwMzUwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMyAgMHhmZmMwMzUwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0xFTkdUSCAgMHhmZmMwMzUxMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA4X1RJTUVTVEFNUCAgMHhmZmMwMzUxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0lEMCAgMHhmZmMwMzUxOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0lEMSAgMHhmZmMwMzUxYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMCAgMHhmZmMwMzUyMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMSAgMHhmZmMwMzUyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMiAgMHhmZmMwMzUyOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMyAgMHhmZmMwMzUyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0xFTkdUSCAgMHhmZmMwMzUzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA5X1RJTUVTVEFNUCAgMHhmZmMwMzUzNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0lEMCAgMHhmZmMwMzUzOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0lEMSAgMHhmZmMwMzUzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9EQVRBMCAgMHhmZmMwMzU0MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTBfREFUQTEgIDB4ZmZjMDM1NDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEwX0RBVEEyICAweGZmYzAzNTQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEwIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9EQVRBMyAgMHhmZmMwMzU0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9MRU5HVEggIDB4ZmZjMDM1NTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTBfVElNRVNUQU1QICAweGZmYzAzNTU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEwIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEwX0lEMCAgMHhmZmMwMzU1OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9JRDEgIDB4ZmZjMDM1NWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0RBVEEwICAweGZmYzAzNTYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMV9EQVRBMSAgMHhmZmMwMzU2NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTFfREFUQTIgIDB4ZmZjMDM1NjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTEgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0RBVEEzICAweGZmYzAzNTZjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0xFTkdUSCAgMHhmZmMwMzU3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxMV9USU1FU1RBTVAgIDB4ZmZjMDM1NzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTEgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTFfSUQwICAweGZmYzAzNTc4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0lEMSAgMHhmZmMwMzU3YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTJfREFUQTAgIDB4ZmZjMDM1ODAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEyX0RBVEExICAweGZmYzAzNTg0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMl9EQVRBMiAgMHhmZmMwMzU4OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMiBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTJfREFUQTMgIDB4ZmZjMDM1OGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMTJfTEVOR1RIICAweGZmYzAzNTkwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjEyX1RJTUVTVEFNUCAgMHhmZmMwMzU5NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMiBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxMl9JRDAgIDB4ZmZjMDM1OTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTJfSUQxICAweGZmYzAzNTljICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxM19EQVRBMCAgMHhmZmMwMzVhMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTNfREFUQTEgIDB4ZmZjMDM1YTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEzX0RBVEEyICAweGZmYzAzNWE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEzIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxM19EQVRBMyAgMHhmZmMwMzVhYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxM19MRU5HVEggIDB4ZmZjMDM1YjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTNfVElNRVNUQU1QICAweGZmYzAzNWI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEzIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEzX0lEMCAgMHhmZmMwMzViOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxM19JRDEgIDB4ZmZjMDM1YmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0RBVEEwICAweGZmYzAzNWMwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNF9EQVRBMSAgMHhmZmMwMzVjNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTRfREFUQTIgIDB4ZmZjMDM1YzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTQgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0RBVEEzICAweGZmYzAzNWNjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0xFTkdUSCAgMHhmZmMwMzVkMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxNF9USU1FU1RBTVAgIDB4ZmZjMDM1ZDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTQgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTRfSUQwICAweGZmYzAzNWQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0lEMSAgMHhmZmMwMzVkYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTVfREFUQTAgIDB4ZmZjMDM1ZTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE1X0RBVEExICAweGZmYzAzNWU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNV9EQVRBMiAgMHhmZmMwMzVlOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNSBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTVfREFUQTMgIDB4ZmZjMDM1ZWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMTVfTEVOR1RIICAweGZmYzAzNWYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjE1X1RJTUVTVEFNUCAgMHhmZmMwMzVmNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNSBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxNV9JRDAgIDB4ZmZjMDM1ZjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTVfSUQxICAweGZmYzAzNWZjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IElEMSBSZWdpc3RlciAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggRGF0YSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9EQVRBMCAgMHhmZmMwMzYwMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTZfREFUQTEgIDB4ZmZjMDM2MDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE2X0RBVEEyICAweGZmYzAzNjA4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE2IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9EQVRBMyAgMHhmZmMwMzYwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9MRU5HVEggIDB4ZmZjMDM2MTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTZfVElNRVNUQU1QICAweGZmYzAzNjE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE2IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE2X0lEMCAgMHhmZmMwMzYxOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9JRDEgIDB4ZmZjMDM2MWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0RBVEEwICAweGZmYzAzNjIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxN19EQVRBMSAgMHhmZmMwMzYyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTdfREFUQTIgIDB4ZmZjMDM2MjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTcgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0RBVEEzICAweGZmYzAzNjJjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0xFTkdUSCAgMHhmZmMwMzYzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxN19USU1FU1RBTVAgIDB4ZmZjMDM2MzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTcgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTdfSUQwICAweGZmYzAzNjM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0lEMSAgMHhmZmMwMzYzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMThfREFUQTAgIDB4ZmZjMDM2NDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE4X0RBVEExICAweGZmYzAzNjQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOF9EQVRBMiAgMHhmZmMwMzY0OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOCBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMThfREFUQTMgIDB4ZmZjMDM2NGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMThfTEVOR1RIICAweGZmYzAzNjUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjE4X1RJTUVTVEFNUCAgMHhmZmMwMzY1NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxOF9JRDAgIDB4ZmZjMDM2NTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMThfSUQxICAweGZmYzAzNjVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9EQVRBMCAgMHhmZmMwMzY2MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTlfREFUQTEgIDB4ZmZjMDM2NjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE5X0RBVEEyICAweGZmYzAzNjY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE5IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9EQVRBMyAgMHhmZmMwMzY2YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9MRU5HVEggIDB4ZmZjMDM2NzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTlfVElNRVNUQU1QICAweGZmYzAzNjc0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE5IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE5X0lEMCAgMHhmZmMwMzY3OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9JRDEgIDB4ZmZjMDM2N2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0RBVEEwICAweGZmYzAzNjgwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMF9EQVRBMSAgMHhmZmMwMzY4NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjBfREFUQTIgIDB4ZmZjMDM2ODggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjAgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0RBVEEzICAweGZmYzAzNjhjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0xFTkdUSCAgMHhmZmMwMzY5MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyMF9USU1FU1RBTVAgIDB4ZmZjMDM2OTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjAgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjBfSUQwICAweGZmYzAzNjk4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0lEMSAgMHhmZmMwMzY5YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjFfREFUQTAgIDB4ZmZjMDM2YTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIxX0RBVEExICAweGZmYzAzNmE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMV9EQVRBMiAgMHhmZmMwMzZhOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMSBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjFfREFUQTMgIDB4ZmZjMDM2YWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjFfTEVOR1RIICAweGZmYzAzNmIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjIxX1RJTUVTVEFNUCAgMHhmZmMwMzZiNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMSBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyMV9JRDAgIDB4ZmZjMDM2YjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjFfSUQxICAweGZmYzAzNmJjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9EQVRBMCAgMHhmZmMwMzZjMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjJfREFUQTEgIDB4ZmZjMDM2YzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIyX0RBVEEyICAweGZmYzAzNmM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIyIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9EQVRBMyAgMHhmZmMwMzZjYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9MRU5HVEggIDB4ZmZjMDM2ZDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjJfVElNRVNUQU1QICAweGZmYzAzNmQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIyIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIyX0lEMCAgMHhmZmMwMzZkOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9JRDEgIDB4ZmZjMDM2ZGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0RBVEEwICAweGZmYzAzNmUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyM19EQVRBMSAgMHhmZmMwMzZlNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjNfREFUQTIgIDB4ZmZjMDM2ZTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjMgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0RBVEEzICAweGZmYzAzNmVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0xFTkdUSCAgMHhmZmMwMzZmMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyM19USU1FU1RBTVAgIDB4ZmZjMDM2ZjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjMgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjNfSUQwICAweGZmYzAzNmY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0lEMSAgMHhmZmMwMzZmYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjRfREFUQTAgIDB4ZmZjMDM3MDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI0X0RBVEExICAweGZmYzAzNzA0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNF9EQVRBMiAgMHhmZmMwMzcwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNCBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjRfREFUQTMgIDB4ZmZjMDM3MGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjRfTEVOR1RIICAweGZmYzAzNzEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjI0X1RJTUVTVEFNUCAgMHhmZmMwMzcxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyNF9JRDAgIDB4ZmZjMDM3MTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjRfSUQxICAweGZmYzAzNzFjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9EQVRBMCAgMHhmZmMwMzcyMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjVfREFUQTEgIDB4ZmZjMDM3MjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI1X0RBVEEyICAweGZmYzAzNzI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI1IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9EQVRBMyAgMHhmZmMwMzcyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9MRU5HVEggIDB4ZmZjMDM3MzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjVfVElNRVNUQU1QICAweGZmYzAzNzM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI1IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI1X0lEMCAgMHhmZmMwMzczOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9JRDEgIDB4ZmZjMDM3M2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0RBVEEwICAweGZmYzAzNzQwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNl9EQVRBMSAgMHhmZmMwMzc0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjZfREFUQTIgIDB4ZmZjMDM3NDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjYgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0RBVEEzICAweGZmYzAzNzRjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0xFTkdUSCAgMHhmZmMwMzc1MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyNl9USU1FU1RBTVAgIDB4ZmZjMDM3NTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjYgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjZfSUQwICAweGZmYzAzNzU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0lEMSAgMHhmZmMwMzc1YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjdfREFUQTAgIDB4ZmZjMDM3NjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI3X0RBVEExICAweGZmYzAzNzY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyN19EQVRBMiAgMHhmZmMwMzc2OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNyBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjdfREFUQTMgIDB4ZmZjMDM3NmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjdfTEVOR1RIICAweGZmYzAzNzcwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjI3X1RJTUVTVEFNUCAgMHhmZmMwMzc3NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNyBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyN19JRDAgIDB4ZmZjMDM3NzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjdfSUQxICAweGZmYzAzNzdjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9EQVRBMCAgMHhmZmMwMzc4MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjhfREFUQTEgIDB4ZmZjMDM3ODQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI4X0RBVEEyICAweGZmYzAzNzg4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI4IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9EQVRBMyAgMHhmZmMwMzc4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9MRU5HVEggIDB4ZmZjMDM3OTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjhfVElNRVNUQU1QICAweGZmYzAzNzk0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI4IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI4X0lEMCAgMHhmZmMwMzc5OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9JRDEgIDB4ZmZjMDM3OWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0RBVEEwICAweGZmYzAzN2EwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyOV9EQVRBMSAgMHhmZmMwMzdhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjlfREFUQTIgIDB4ZmZjMDM3YTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjkgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0RBVEEzICAweGZmYzAzN2FjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0xFTkdUSCAgMHhmZmMwMzdiMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyOV9USU1FU1RBTVAgIDB4ZmZjMDM3YjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjkgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjlfSUQwICAweGZmYzAzN2I4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0lEMSAgMHhmZmMwMzdiYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMzBfREFUQTAgIDB4ZmZjMDM3YzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMwX0RBVEExICAweGZmYzAzN2M0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMF9EQVRBMiAgMHhmZmMwMzdjOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMCBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMzBfREFUQTMgIDB4ZmZjMDM3Y2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMzBfTEVOR1RIICAweGZmYzAzN2QwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjMwX1RJTUVTVEFNUCAgMHhmZmMwMzdkNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIzMF9JRDAgIDB4ZmZjMDM3ZDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMzBfSUQxICAweGZmYzAzN2RjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9EQVRBMCAgMHhmZmMwMzdlMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMzFfREFUQTEgIDB4ZmZjMDM3ZTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMxX0RBVEEyICAweGZmYzAzN2U4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMxIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9EQVRBMyAgMHhmZmMwMzdlYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9MRU5HVEggIDB4ZmZjMDM3ZjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMzFfVElNRVNUQU1QICAweGZmYzAzN2Y0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMxIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMxX0lEMCAgMHhmZmMwMzdmOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9JRDEgIDB4ZmZjMDM3ZmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgSUQxIFJlZ2lzdGVyICovCisKKy8qIEFUQVBJIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBVEFQSV9DT05UUk9MICAweGZmYzAzODAwICAgLyogQVRBUEkgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFUQVBJX1NUQVRVUyAgMHhmZmMwMzgwNCAgIC8qIEFUQVBJIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBBVEFQSV9ERVZfQUREUiAgMHhmZmMwMzgwOCAgIC8qIEFUQVBJIERldmljZSBSZWdpc3RlciBBZGRyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQVRBUElfREVWX1RYQlVGICAweGZmYzAzODBjICAgLyogQVRBUEkgRGV2aWNlIFJlZ2lzdGVyIFdyaXRlIERhdGEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBBVEFQSV9ERVZfUlhCVUYgIDB4ZmZjMDM4MTAgICAvKiBBVEFQSSBEZXZpY2UgUmVnaXN0ZXIgUmVhZCBEYXRhICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEFUQVBJX0lOVF9NQVNLICAweGZmYzAzODE0ICAgLyogQVRBUEkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIEFUQVBJX0lOVF9TVEFUVVMgIDB4ZmZjMDM4MTggICAvKiBBVEFQSSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEFUQVBJX1hGRVJfTEVOICAweGZmYzAzODFjICAgLyogQVRBUEkgTGVuZ3RoIG9mIFRyYW5zZmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIEFUQVBJX0xJTkVfU1RBVFVTICAweGZmYzAzODIwICAgLyogQVRBUEkgTGluZSBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQVRBUElfU01fU1RBVEUgIDB4ZmZjMDM4MjQgICAvKiBBVEFQSSBTdGF0ZSBNYWNoaW5lIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1RFUk1JTkFURSAgMHhmZmMwMzgyOCAgIC8qIEFUQVBJIEhvc3QgVGVybWluYXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBBVEFQSV9QSU9fVEZSQ05UICAweGZmYzAzODJjICAgLyogQVRBUEkgUElPIG1vZGUgdHJhbnNmZXIgY291bnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIEFUQVBJX0RNQV9URlJDTlQgIDB4ZmZjMDM4MzAgICAvKiBBVEFQSSBETUEgbW9kZSB0cmFuc2ZlciBjb3VudCAqLworI2RlZmluZSAgICAgICAgICAgICAgIEFUQVBJX1VNQUlOX1RGUkNOVCAgMHhmZmMwMzgzNCAgIC8qIEFUQVBJIFVETUFJTiB0cmFuc2ZlciBjb3VudCAqLworI2RlZmluZSAgICAgICAgICAgICBBVEFQSV9VRE1BT1VUX1RGUkNOVCAgMHhmZmMwMzgzOCAgIC8qIEFUQVBJIFVETUFPVVQgdHJhbnNmZXIgY291bnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBBVEFQSV9SRUdfVElNXzAgIDB4ZmZjMDM4NDAgICAvKiBBVEFQSSBSZWdpc3RlciBUcmFuc2ZlciBUaW1pbmcgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1BJT19USU1fMCAgMHhmZmMwMzg0NCAgIC8qIEFUQVBJIFBJTyBUaW1pbmcgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1BJT19USU1fMSAgMHhmZmMwMzg0OCAgIC8qIEFUQVBJIFBJTyBUaW1pbmcgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMCAgMHhmZmMwMzg1MCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMSAgMHhmZmMwMzg1NCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMiAgMHhmZmMwMzg1OCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMCAgMHhmZmMwMzg2MCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMSAgMHhmZmMwMzg2NCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMiAgMHhmZmMwMzg2OCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMyAgMHhmZmMwMzg2YyAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMyBSZWdpc3RlciAqLworCisvKiBTREggUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0RIX1BXUl9DVEwgIDB4ZmZjMDM5MDAgICAvKiBTREggUG93ZXIgQ29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTREhfQ0xLX0NUTCAgMHhmZmMwMzkwNCAgIC8qIFNESCBDbG9jayBDb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0RIX0FSR1VNRU5UICAweGZmYzAzOTA4ICAgLyogU0RIIEFyZ3VtZW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNESF9DT01NQU5EICAweGZmYzAzOTBjICAgLyogU0RIIENvbW1hbmQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTREhfUkVTUF9DTUQgIDB4ZmZjMDM5MTAgICAvKiBTREggUmVzcG9uc2UgQ29tbWFuZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX1JFU1BPTlNFMCAgMHhmZmMwMzkxNCAgIC8qIFNESCBSZXNwb25zZTAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNESF9SRVNQT05TRTEgIDB4ZmZjMDM5MTggICAvKiBTREggUmVzcG9uc2UxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTREhfUkVTUE9OU0UyICAweGZmYzAzOTFjICAgLyogU0RIIFJlc3BvbnNlMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX1JFU1BPTlNFMyAgMHhmZmMwMzkyMCAgIC8qIFNESCBSZXNwb25zZTMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0RIX0RBVEFfVElNRVIgIDB4ZmZjMDM5MjQgICAvKiBTREggRGF0YSBUaW1lciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX0RBVEFfTEdUSCAgMHhmZmMwMzkyOCAgIC8qIFNESCBEYXRhIExlbmd0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNESF9EQVRBX0NUTCAgMHhmZmMwMzkyYyAgIC8qIFNESCBEYXRhIENvbnRyb2wgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTREhfREFUQV9DTlQgIDB4ZmZjMDM5MzAgICAvKiBTREggRGF0YSBDb3VudGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBTREhfU1RBVFVTICAweGZmYzAzOTM0ICAgLyogU0RIIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTREhfU1RBVFVTX0NMUiAgMHhmZmMwMzkzOCAgIC8qIFNESCBTdGF0dXMgQ2xlYXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTREhfTUFTSzAgIDB4ZmZjMDM5M2MgICAvKiBTREggSW50ZXJydXB0MCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU0RIX01BU0sxICAweGZmYzAzOTQwICAgLyogU0RIIEludGVycnVwdDEgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNESF9GSUZPX0NOVCAgMHhmZmMwMzk0OCAgIC8qIFNESCBGSUZPIENvdW50ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU0RIX0ZJRk8gIDB4ZmZjMDM5ODAgICAvKiBTREggRGF0YSBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0RIX0VfU1RBVFVTICAweGZmYzAzOWMwICAgLyogU0RIIEV4Y2VwdGlvbiBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFNESF9FX01BU0sgIDB4ZmZjMDM5YzQgICAvKiBTREggRXhjZXB0aW9uIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9DRkcgIDB4ZmZjMDM5YzggICAvKiBTREggQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTREhfUkRfV0FJVF9FTiAgMHhmZmMwMzljYyAgIC8qIFNESCBSZWFkIFdhaXQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQwICAweGZmYzAzOWQwICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24wICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQxICAweGZmYzAzOWQ0ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24xICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQyICAweGZmYzAzOWQ4ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQzICAweGZmYzAzOWRjICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24zICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ0ICAweGZmYzAzOWUwICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb240ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ1ICAweGZmYzAzOWU0ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb241ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ2ICAweGZmYzAzOWU4ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb242ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ3ICAweGZmYzAzOWVjICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb243ICovCisKKy8qIEhPU1QgUG9ydCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ09OVFJPTCAgMHhmZmMwM2EwMCAgIC8qIEhPU1QgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRVUyAgMHhmZmMwM2EwNCAgIC8qIEhPU1QgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9USU1FT1VUICAweGZmYzAzYTA4ICAgLyogSE9TVCBBY2tub3dsZWRnZSBNb2RlIFRpbWVvdXQgUmVnaXN0ZXIgKi8KKworLyogVVNCIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRkFERFIgIDB4ZmZjMDNjMDAgICAvKiBGdW5jdGlvbiBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1BPV0VSICAweGZmYzAzYzA0ICAgLyogUG93ZXIgbWFuYWdlbWVudCByZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0lOVFJUWCAgMHhmZmMwM2MwOCAgIC8qIEludGVycnVwdCByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCBhbmQgVHggZW5kcG9pbnQgMSB0byA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlJYICAweGZmYzAzYzBjICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBSeCBlbmRwb2ludHMgMSB0byA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVFhFICAweGZmYzAzYzEwICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clR4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSUlhFICAweGZmYzAzYzE0ICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clJ4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVVNCICAweGZmYzAzYzE4ICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBjb21tb24gVVNCIGludGVycnVwdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlVTQkUgIDB4ZmZjMDNjMWMgICAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGZvciBJbnRyVVNCICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0ZSQU1FICAweGZmYzAzYzIwICAgLyogVVNCIGZyYW1lIG51bWJlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTkRFWCAgMHhmZmMwM2MyNCAgIC8qIEluZGV4IHJlZ2lzdGVyIGZvciBzZWxlY3RpbmcgdGhlIGluZGV4ZWQgZW5kcG9pbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX1RFU1RNT0RFICAweGZmYzAzYzI4ICAgLyogRW5hYmxlZCBVU0IgMjAgdGVzdCBtb2RlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9HTE9CSU5UUiAgMHhmZmMwM2MyYyAgIC8qIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayByZWdpc3RlciBhbmQgV2FrZXVwIEV4Y2VwdGlvbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX0dMT0JBTF9DVEwgIDB4ZmZjMDNjMzAgICAvKiBHbG9iYWwgQ2xvY2sgQ29udHJvbCBmb3IgdGhlIGNvcmUgKi8KKworLyogVVNCIFBhY2tldCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9UWF9NQVhfUEFDS0VUICAweGZmYzAzYzQwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfQ1NSMCAgMHhmZmMwM2M0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWENTUiAgMHhmZmMwM2M0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfUlhfTUFYX1BBQ0tFVCAgMHhmZmMwM2M0OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfUlhDU1IgIDB4ZmZjMDNjNGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0NPVU5UMCAgMHhmZmMwM2M1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludCAwIEZJRk8gYW5kIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBIb3N0IFR4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9SWENPVU5UICAweGZmYzAzYzUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyBhbmQgTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWFRZUEUgIDB4ZmZjMDNjNTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBVU0JfTkFLTElNSVQwICAweGZmYzAzYzU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCBhbmQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1RYSU5URVJWQUwgIDB4ZmZjMDNjNTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludCAwIGFuZCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX1JYVFlQRSAgMHhmZmMwM2M1YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1JYSU5URVJWQUwgIDB4ZmZjMDNjNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQgYW5kIElzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX1RYQ09VTlQgIDB4ZmZjMDNjNjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgc2VsZWN0ZWQgZW5kcG9pbnQgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgRklGTyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDBfRklGTyAgMHhmZmMwM2M4MCAgIC8qIEVuZHBvaW50IDAgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDFfRklGTyAgMHhmZmMwM2M4OCAgIC8qIEVuZHBvaW50IDEgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDJfRklGTyAgMHhmZmMwM2M5MCAgIC8qIEVuZHBvaW50IDIgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDNfRklGTyAgMHhmZmMwM2M5OCAgIC8qIEVuZHBvaW50IDMgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDRfRklGTyAgMHhmZmMwM2NhMCAgIC8qIEVuZHBvaW50IDQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDVfRklGTyAgMHhmZmMwM2NhOCAgIC8qIEVuZHBvaW50IDUgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDZfRklGTyAgMHhmZmMwM2NiMCAgIC8qIEVuZHBvaW50IDYgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDdfRklGTyAgMHhmZmMwM2NiOCAgIC8qIEVuZHBvaW50IDcgRklGTyAqLworCisvKiBVU0IgT1RHIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfT1RHX0RFVl9DVEwgIDB4ZmZjMDNkMDAgICAvKiBPVEcgRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9PVEdfVkJVU19JUlEgIDB4ZmZjMDNkMDQgICAvKiBPVEcgVkJVUyBDb250cm9sIEludGVycnVwdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX09UR19WQlVTX01BU0sgIDB4ZmZjMDNkMDggICAvKiBWQlVTIENvbnRyb2wgSW50ZXJydXB0IEVuYWJsZSAqLworCisvKiBVU0IgUGh5IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfTElOS0lORk8gIDB4ZmZjMDNkNDggICAvKiBFbmFibGVzIHByb2dyYW1taW5nIG9mIHNvbWUgUEhZLXNpZGUgZGVsYXlzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1ZQTEVOICAweGZmYzAzZDRjICAgLyogRGV0ZXJtaW5lcyBkdXJhdGlvbiBvZiBWQlVTIHB1bHNlIGZvciBWQlVTIGNoYXJnaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9IU19FT0YxICAweGZmYzAzZDUwICAgLyogVGltZSBidWZmZXIgZm9yIEhpZ2gtU3BlZWQgdHJhbnNhY3Rpb25zICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9GU19FT0YxICAweGZmYzAzZDU0ICAgLyogVGltZSBidWZmZXIgZm9yIEZ1bGwtU3BlZWQgdHJhbnNhY3Rpb25zICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9MU19FT0YxICAweGZmYzAzZDU4ICAgLyogVGltZSBidWZmZXIgZm9yIExvdy1TcGVlZCB0cmFuc2FjdGlvbnMgKi8KKworLyogKEFQSFlfQ05UUkwgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9BUEhZX0NOVFJMICAweGZmYzAzZGUwICAgLyogUmVnaXN0ZXIgdGhhdCBpbmNyZWFzZXMgdmlzaWJpbGl0eSBvZiBBbmFsb2cgUEhZICovCisKKy8qIChBUEhZX0NBTElCIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfQVBIWV9DQUxJQiAgMHhmZmMwM2RlNCAgIC8qIFJlZ2lzdGVyIHVzZWQgdG8gc2V0IHNvbWUgY2FsaWJyYXRpb24gdmFsdWVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0FQSFlfQ05UUkwyICAweGZmYzAzZGU4ICAgLyogUmVnaXN0ZXIgdXNlZCB0byBwcmV2ZW50IHJlLWVudW1lcmF0aW9uIG9uY2UgTW9hYiBnb2VzIGludG8gaGliZXJuYXRlIG1vZGUgKi8KKworLyogKFBIWV9URVNUIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9QSFlfVEVTVCAgMHhmZmMwM2RlYyAgIC8qIFVzZWQgZm9yIHJlZHVjaW5nIHNpbXVsYXRpb24gdGltZSBhbmQgc2ltcGxpZmllcyBGSUZPIHRlc3RhYmlsaXR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX1BMTE9TQ19DVFJMICAweGZmYzAzZGYwICAgLyogVXNlZCB0byBwcm9ncmFtIGRpZmZlcmVudCBwYXJhbWV0ZXJzIGZvciBVU0IgUExMIGFuZCBPc2NpbGxhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9TUlBfQ0xLRElWICAweGZmYzAzZGY0ICAgLyogVXNlZCB0byBwcm9ncmFtIGNsb2NrIGRpdmlkZSB2YWx1ZSBmb3IgdGhlIGNsb2NrIGZlZCB0byB0aGUgU1JQIGRldGVjdGlvbiBsb2dpYyAqLworCisvKiBVU0IgRW5kcG9pbnQgMCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhNQVhQICAweGZmYzAzZTAwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhDU1IgIDB4ZmZjMDNlMDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYTUFYUCAgMHhmZmMwM2UwOCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYQ1NSICAweGZmYzAzZTBjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWENPVU5UICAweGZmYzAzZTEwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYVFlQRSAgMHhmZmMwM2UxNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQwICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMF9UWElOVEVSVkFMICAweGZmYzAzZTE4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYVFlQRSAgMHhmZmMwM2UxYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQwICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMF9SWElOVEVSVkFMICAweGZmYzAzZTIwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCisKKy8qIFVTQiBFbmRwb2ludCAxIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYQ09VTlQgIDB4ZmZjMDNlMjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQwIFR4IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWE1BWFAgIDB4ZmZjMDNlNDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWENTUiAgMHhmZmMwM2U0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9SWE1BWFAgIDB4ZmZjMDNlNDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9SWENTUiAgMHhmZmMwM2U0YyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhDT1VOVCAgMHhmZmMwM2U1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDEgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1RYVFlQRSAgMHhmZmMwM2U1NCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMV9UWElOVEVSVkFMICAweGZmYzAzZTU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhUWVBFICAweGZmYzAzZTVjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkxX1JYSU5URVJWQUwgIDB4ZmZjMDNlNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDEgKi8KKworLyogVVNCIEVuZHBvaW50IDIgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhDT1VOVCAgMHhmZmMwM2U2OCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZStIMTAyIGVuZHBvaW50MSBUeCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhNQVhQICAweGZmYzAzZTgwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhDU1IgIDB4ZmZjMDNlODQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhNQVhQICAweGZmYzAzZTg4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhDU1IgIDB4ZmZjMDNlOGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYQ09VTlQgIDB4ZmZjMDNlOTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQyIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMl9UWFRZUEUgIDB4ZmZjMDNlOTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhJTlRFUlZBTCAgMHhmZmMwM2U5OCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYVFlQRSAgMHhmZmMwM2U5YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMl9SWElOVEVSVkFMICAweGZmYzAzZWEwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQyICovCisKKy8qIFVTQiBFbmRwb2ludCAzIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1RYQ09VTlQgIDB4ZmZjMDNlYTggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQyIFR4IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWE1BWFAgIDB4ZmZjMDNlYzAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWENTUiAgMHhmZmMwM2VjNCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19SWE1BWFAgIDB4ZmZjMDNlYzggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JM19SWENTUiAgMHhmZmMwM2VjYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhDT1VOVCAgMHhmZmMwM2VkMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDMgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1RYVFlQRSAgMHhmZmMwM2VkNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JM19UWElOVEVSVkFMICAweGZmYzAzZWQ4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhUWVBFICAweGZmYzAzZWRjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkzX1JYSU5URVJWQUwgIDB4ZmZjMDNlZTAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDMgKi8KKworLyogVVNCIEVuZHBvaW50IDQgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhDT1VOVCAgMHhmZmMwM2VlOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBIMTI0ZW5kcG9pbnQzIFR4IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWE1BWFAgIDB4ZmZjMDNmMDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWENTUiAgMHhmZmMwM2YwNCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9SWE1BWFAgIDB4ZmZjMDNmMDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9SWENTUiAgMHhmZmMwM2YwYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhDT1VOVCAgMHhmZmMwM2YxMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1RYVFlQRSAgMHhmZmMwM2YxNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNF9UWElOVEVSVkFMICAweGZmYzAzZjE4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhUWVBFICAweGZmYzAzZjFjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk0X1JYSU5URVJWQUwgIDB4ZmZjMDNmMjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDQgKi8KKworLyogVVNCIEVuZHBvaW50IDUgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhDT1VOVCAgMHhmZmMwM2YyOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDQgVHggRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYTUFYUCAgMHhmZmMwM2Y0MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYQ1NSICAweGZmYzAzZjQ0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1JYTUFYUCAgMHhmZmMwM2Y0OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1JYQ1NSICAweGZmYzAzZjRjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWENPVU5UICAweGZmYzAzZjUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NSBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfVFhUWVBFICAweGZmYzAzZjU0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk1X1RYSU5URVJWQUwgIDB4ZmZjMDNmNTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWFRZUEUgIDB4ZmZjMDNmNWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTVfUlhJTlRFUlZBTCAgMHhmZmMwM2Y2MCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NSAqLworCisvKiBVU0IgRW5kcG9pbnQgNiBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNV9UWENPVU5UICAweGZmYzAzZjY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEgxNDVlbmRwb2ludDUgVHggRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYTUFYUCAgMHhmZmMwM2Y4MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYQ1NSICAweGZmYzAzZjg0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYTUFYUCAgMHhmZmMwM2Y4OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYQ1NSICAweGZmYzAzZjhjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWENPVU5UICAweGZmYzAzZjkwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NiBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhUWVBFICAweGZmYzAzZjk0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDYgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk2X1RYSU5URVJWQUwgIDB4ZmZjMDNmOTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWFRZUEUgIDB4ZmZjMDNmOWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTZfUlhJTlRFUlZBTCAgMHhmZmMwM2ZhMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NiAqLworCisvKiBVU0IgRW5kcG9pbnQgNyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNl9UWENPVU5UICAweGZmYzAzZmE4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NiBUeCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhNQVhQICAweGZmYzAzZmMwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhDU1IgIDB4ZmZjMDNmYzQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhNQVhQICAweGZmYzAzZmM4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhDU1IgIDB4ZmZjMDNmY2MgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYQ09VTlQgIDB4ZmZjMDNmZDAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQ3IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWFRZUEUgIDB4ZmZjMDNmZDQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50NyAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhJTlRFUlZBTCAgMHhmZmMwM2ZkOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50NyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYVFlQRSAgMHhmZmMwM2ZkYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JN19SWElOVEVSVkFMICAweGZmYzAzZmYwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWENPVU5UICAweGZmYzAzZmY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NyBUeCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUFfSU5URVJSVVBUICAweGZmYzA0MDAwICAgLyogSW5kaWNhdGVzIHBlbmRpbmcgaW50ZXJydXB0cyBmb3IgdGhlIERNQSBjaGFubmVscyAqLworCisvKiBVU0IgQ2hhbm5lbCAwIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEwQ09OVFJPTCAgMHhmZmMwNDAwNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAwIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMEFERFJMT1cgIDB4ZmZjMDQwMDggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEwQUREUkhJR0ggIDB4ZmZjMDQwMGMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEwQ09VTlRMT1cgIDB4ZmZjMDQwMTAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BMENPVU5USElHSCAgMHhmZmMwNDAxNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAwICovCisKKy8qIFVTQiBDaGFubmVsIDEgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTFDT05UUk9MICAweGZmYzA0MDI0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDEgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUExQUREUkxPVyAgMHhmZmMwNDAyOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTFBRERSSElHSCAgMHhmZmMwNDAyYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTFDT1VOVExPVyAgMHhmZmMwNDAzMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUExQ09VTlRISUdIICAweGZmYzA0MDM0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDEgKi8KKworLyogVVNCIENoYW5uZWwgMiBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMkNPTlRST0wgIDB4ZmZjMDQwNDQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgMiBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTJBRERSTE9XICAweGZmYzA0MDQ4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMkFERFJISUdIICAweGZmYzA0MDRjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMkNPVU5UTE9XICAweGZmYzA0MDUwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTJDT1VOVEhJR0ggIDB4ZmZjMDQwNTQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMiAqLworCisvKiBVU0IgQ2hhbm5lbCAzIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEzQ09OVFJPTCAgMHhmZmMwNDA2NCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAzIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BM0FERFJMT1cgIDB4ZmZjMDQwNjggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEzQUREUkhJR0ggIDB4ZmZjMDQwNmMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEzQ09VTlRMT1cgIDB4ZmZjMDQwNzAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BM0NPVU5USElHSCAgMHhmZmMwNDA3NCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAzICovCisKKy8qIFVTQiBDaGFubmVsIDQgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTRDT05UUk9MICAweGZmYzA0MDg0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDQgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE0QUREUkxPVyAgMHhmZmMwNDA4OCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTRBRERSSElHSCAgMHhmZmMwNDA4YyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTRDT1VOVExPVyAgMHhmZmMwNDA5MCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE0Q09VTlRISUdIICAweGZmYzA0MDk0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDQgKi8KKworLyogVVNCIENoYW5uZWwgNSBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNUNPTlRST0wgIDB4ZmZjMDQwYTQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgNSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTVBRERSTE9XICAweGZmYzA0MGE4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNUFERFJISUdIICAweGZmYzA0MGFjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNUNPVU5UTE9XICAweGZmYzA0MGIwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTVDT1VOVEhJR0ggIDB4ZmZjMDQwYjQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNSAqLworCisvKiBVU0IgQ2hhbm5lbCA2IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE2Q09OVFJPTCAgMHhmZmMwNDBjNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCA2IGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNkFERFJMT1cgIDB4ZmZjMDQwYzggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE2QUREUkhJR0ggIDB4ZmZjMDQwY2MgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE2Q09VTlRMT1cgIDB4ZmZjMDQwZDAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BNkNPVU5USElHSCAgMHhmZmMwNDBkNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA2ICovCisKKy8qIFVTQiBDaGFubmVsIDcgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTdDT05UUk9MICAweGZmYzA0MGU0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDcgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE3QUREUkxPVyAgMHhmZmMwNDBlOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTdBRERSSElHSCAgMHhmZmMwNDBlYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTdDT1VOVExPVyAgMHhmZmMwNDBmMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE3Q09VTlRISUdIICAweGZmYzA0MGY0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDcgKi8KKworLyogS2V5cGFkIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIEtQQURfQ1RMICAweGZmYzA0MTAwICAgLyogQ29udHJvbHMga2V5cGFkIG1vZHVsZSBlbmFibGUgYW5kIGRpc2FibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEtQQURfUFJFU0NBTEUgIDB4ZmZjMDQxMDQgICAvKiBFc3RhYmxpc2ggYSB0aW1lIGJhc2UgZm9yIHByb2dyYW1pbmcgdGhlIEtQQURfTVNFTCByZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIEtQQURfTVNFTCAgMHhmZmMwNDEwOCAgIC8qIFNlbGVjdHMgZGVsYXkgcGFyYW1ldGVycyBmb3Iga2V5cGFkIGludGVyZmFjZSBzZW5zaXRpdml0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBLUEFEX1JPV0NPTCAgMHhmZmMwNDEwYyAgIC8qIENhcHR1cmVzIHRoZSByb3cgYW5kIGNvbHVtbiBvdXRwdXQgdmFsdWVzIG9mIHRoZSBrZXlzIHByZXNzZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBLUEFEX1NUQVQgIDB4ZmZjMDQxMTAgICAvKiBIb2xkcyBhbmQgY2xlYXJzIHRoZSBzdGF0dXMgb2YgdGhlIGtleXBhZCBpbnRlcmZhY2UgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBLUEFEX1NPRlRFVkFMICAweGZmYzA0MTE0ICAgLyogTGV0cyBzb2Z0d2FyZSBmb3JjZSBrZXlwYWQgaW50ZXJmYWNlIHRvIGNoZWNrIGZvciBrZXlzIGJlaW5nIHByZXNzZWQgKi8KKworLyogUGl4ZWwgQ29tcG9zaXRvciAoUElYQykgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUElYQ19DVEwgIDB4ZmZjMDQ0MDAgICAvKiBPdmVybGF5IGVuYWJsZSwgcmVzYW1wbGluZyBtb2RlLCBJL08gZGF0YSBmb3JtYXQsIHRyYW5zcGFyZW5jeSBlbmFibGUsIHdhdGVybWFyayBsZXZlbCwgRklGTyBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUElYQ19QUEwgIDB4ZmZjMDQ0MDQgICAvKiBIb2xkcyB0aGUgbnVtYmVyIG9mIHBpeGVscyBwZXIgbGluZSBvZiB0aGUgZGlzcGxheSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBQSVhDX0xQRiAgMHhmZmMwNDQwOCAgIC8qIEhvbGRzIHRoZSBudW1iZXIgb2YgbGluZXMgcGVyIGZyYW1lIG9mIHRoZSBkaXNwbGF5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19BSFNUQVJUICAweGZmYzA0NDBjICAgLyogQ29udGFpbnMgaG9yaXpvbnRhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQUhFTkQgIDB4ZmZjMDQ0MTAgICAvKiBDb250YWlucyBob3Jpem9udGFsIGVuZCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0FWU1RBUlQgIDB4ZmZjMDQ0MTQgICAvKiBDb250YWlucyB2ZXJ0aWNhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQVZFTkQgIDB4ZmZjMDQ0MTggICAvKiBDb250YWlucyB2ZXJ0aWNhbCBlbmQgcGl4ZWwgaW5mb3JtYXRpb24gb2YgdGhlIG92ZXJsYXkgZGF0YSAoc2V0IEEpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19BVFJBTlNQICAweGZmYzA0NDFjICAgLyogQ29udGFpbnMgdGhlIHRyYW5zcGFyZW5jeSByYXRpbyAoc2V0IEEpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19CSFNUQVJUICAweGZmYzA0NDIwICAgLyogQ29udGFpbnMgaG9yaXpvbnRhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQkhFTkQgIDB4ZmZjMDQ0MjQgICAvKiBDb250YWlucyBob3Jpem9udGFsIGVuZCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0JWU1RBUlQgIDB4ZmZjMDQ0MjggICAvKiBDb250YWlucyB2ZXJ0aWNhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQlZFTkQgIDB4ZmZjMDQ0MmMgICAvKiBDb250YWlucyB2ZXJ0aWNhbCBlbmQgcGl4ZWwgaW5mb3JtYXRpb24gb2YgdGhlIG92ZXJsYXkgZGF0YSAoc2V0IEIpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19CVFJBTlNQICAweGZmYzA0NDMwICAgLyogQ29udGFpbnMgdGhlIHRyYW5zcGFyZW5jeSByYXRpbyAoc2V0IEIpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQSVhDX0lOVFJTVEFUICAweGZmYzA0NDNjICAgLyogT3ZlcmxheSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbi9zdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfUllDT04gIDB4ZmZjMDQ0NDAgICAvKiBDb2xvciBzcGFjZSBjb252ZXJzaW9uIG1hdHJpeCByZWdpc3Rlci4gQ29udGFpbnMgdGhlIFIvWSBjb252ZXJzaW9uIGNvZWZmaWNpZW50cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUElYQ19HVUNPTiAgMHhmZmMwNDQ0NCAgIC8qIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gbWF0cml4IHJlZ2lzdGVyLiBDb250YWlucyB0aGUgRy9VIGNvbnZlcnNpb24gY29lZmZpY2llbnRzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQSVhDX0JWQ09OICAweGZmYzA0NDQ4ICAgLyogQ29sb3Igc3BhY2UgY29udmVyc2lvbiBtYXRyaXggcmVnaXN0ZXIuIENvbnRhaW5zIHRoZSBCL1YgY29udmVyc2lvbiBjb2VmZmljaWVudHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUElYQ19DQ0JJQVMgIDB4ZmZjMDQ0NGMgICAvKiBCaWFzIHZhbHVlcyBmb3IgdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQSVhDX1RDICAweGZmYzA0NDUwICAgLyogSG9sZHMgdGhlIHRyYW5zcGFyZW50IGNvbG9yIHZhbHVlICovCisKKy8qIEhhbmRzaGFrZSBNRE1BIDAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE1ETUEwX0NPTlRST0wgIDB4ZmZjMDQ1MDAgICAvKiBIYW5kc2hha2UgTURNQTAgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUEwX0VDSU5JVCAgMHhmZmMwNDUwNCAgIC8qIEhhbmRzaGFrZSBNRE1BMCBJbml0aWFsIEVkZ2UgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMF9CQ0lOSVQgIDB4ZmZjMDQ1MDggICAvKiBIYW5kc2hha2UgTURNQTAgSW5pdGlhbCBCbG9jayBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEhNRE1BMF9FQ1VSR0VOVCAgMHhmZmMwNDUwYyAgIC8qIEhhbmRzaGFrZSBNRE1BMCBVcmdlbnQgRWRnZSBDb3VudCBUaHJlc2hob2xkIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIEhNRE1BMF9FQ09WRVJGTE9XICAweGZmYzA0NTEwICAgLyogSGFuZHNoYWtlIE1ETUEwIEVkZ2UgQ291bnQgT3ZlcmZsb3cgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTBfRUNPVU5UICAweGZmYzA0NTE0ICAgLyogSGFuZHNoYWtlIE1ETUEwIEN1cnJlbnQgRWRnZSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUEwX0JDT1VOVCAgMHhmZmMwNDUxOCAgIC8qIEhhbmRzaGFrZSBNRE1BMCBDdXJyZW50IEJsb2NrIENvdW50IFJlZ2lzdGVyICovCisKKy8qIEhhbmRzaGFrZSBNRE1BIDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE1ETUExX0NPTlRST0wgIDB4ZmZjMDQ1NDAgICAvKiBIYW5kc2hha2UgTURNQTEgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUExX0VDSU5JVCAgMHhmZmMwNDU0NCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBJbml0aWFsIEVkZ2UgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMV9CQ0lOSVQgIDB4ZmZjMDQ1NDggICAvKiBIYW5kc2hha2UgTURNQTEgSW5pdGlhbCBCbG9jayBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEhNRE1BMV9FQ1VSR0VOVCAgMHhmZmMwNDU0YyAgIC8qIEhhbmRzaGFrZSBNRE1BMSBVcmdlbnQgRWRnZSBDb3VudCBUaHJlc2hob2xkIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIEhNRE1BMV9FQ09WRVJGTE9XICAweGZmYzA0NTUwICAgLyogSGFuZHNoYWtlIE1ETUExIEVkZ2UgQ291bnQgT3ZlcmZsb3cgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTFfRUNPVU5UICAweGZmYzA0NTU0ICAgLyogSGFuZHNoYWtlIE1ETUExIEN1cnJlbnQgRWRnZSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUExX0JDT1VOVCAgMHhmZmMwNDU1OCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBDdXJyZW50IEJsb2NrIENvdW50IFJlZ2lzdGVyICovCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogICAgIFNJTkdMRSBCSVQgTUFDUk8gUEFJUlMgKGJpdCBtYXNrIGFuZCBuZWdhdGVkIG9uZSkgICAgICAqLworLyogICAgIGFuZCBNVUxUSSBCSVQgUkVBRCBNQUNST1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUElYQ19FTiAgMHgxICAgICAgICAvKiBQaXhlbCBDb21wb3NpdG9yIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5QSVhDX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX0FfRU4gIDB4MiAgICAgICAgLyogT3ZlcmxheSBBIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk9WUl9BX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX0JfRU4gIDB4NCAgICAgICAgLyogT3ZlcmxheSBCIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk9WUl9CX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSU1HX0ZPUk0gIDB4OCAgICAgICAgLyogSW1hZ2UgRGF0YSBGb3JtYXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5JTUdfRk9STSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIE9WUl9GT1JNICAweDEwICAgICAgIC8qIE92ZXJsYXkgRGF0YSBGb3JtYXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5PVlJfRk9STSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIE9VVF9GT1JNICAweDIwICAgICAgIC8qIE91dHB1dCBEYXRhIEZvcm1hdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk9VVF9GT1JNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVEU19NT0QgIDB4NDAgICAgICAgLyogUmVzYW1wbGluZyBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblVEU19NT0QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUQ19FTiAgMHg4MCAgICAgICAvKiBUcmFuc3BhcmVudCBDb2xvciBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UQ19FTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIElNR19TVEFUICAweDMwMCAgICAgIC8qIEltYWdlIEZJRk8gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX1NUQVQgIDB4YzAwICAgICAgLyogT3ZlcmxheSBGSUZPIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgV01fTFZMICAweDMwMDAgICAgIC8qIEZJRk8gV2F0ZXJtYXJrIExldmVsICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19BSFNUQVJUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBBX0hTVEFSVCAgMHhmZmYgICAgICAvKiBIb3Jpem9udGFsIFN0YXJ0IENvb3JkaW5hdGVzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19BSEVORCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBX0hFTkQgIDB4ZmZmICAgICAgLyogSG9yaXpvbnRhbCBFbmQgQ29vcmRpbmF0ZXMgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0FWU1RBUlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFfVlNUQVJUICAweDNmZiAgICAgIC8qIFZlcnRpY2FsIFN0YXJ0IENvb3JkaW5hdGVzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19BVkVORCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBX1ZFTkQgIDB4M2ZmICAgICAgLyogVmVydGljYWwgRW5kIENvb3JkaW5hdGVzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19BVFJBTlNQICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBBX1RSQU5TUCAgMHhmICAgICAgICAvKiBUcmFuc3BhcmVuY3kgVmFsdWUgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0JIU1RBUlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEJfSFNUQVJUICAweGZmZiAgICAgIC8qIEhvcml6b250YWwgU3RhcnQgQ29vcmRpbmF0ZXMgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0JIRU5EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJfSEVORCAgMHhmZmYgICAgICAvKiBIb3Jpem9udGFsIEVuZCBDb29yZGluYXRlcyAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfQlZTVEFSVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQl9WU1RBUlQgIDB4M2ZmICAgICAgLyogVmVydGljYWwgU3RhcnQgQ29vcmRpbmF0ZXMgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0JWRU5EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJfVkVORCAgMHgzZmYgICAgICAvKiBWZXJ0aWNhbCBFbmQgQ29vcmRpbmF0ZXMgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0JUUkFOU1AgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEJfVFJBTlNQICAweGYgICAgICAgIC8qIFRyYW5zcGFyZW5jeSBWYWx1ZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfSU5UUlNUQVQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBPVlJfSU5UX0VOICAweDEgICAgICAgIC8qIEludGVycnVwdCBhdCBFbmQgb2YgTGFzdCBWYWxpZCBPdmVybGF5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgbk9WUl9JTlRfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRlJNX0lOVF9FTiAgMHgyICAgICAgICAvKiBJbnRlcnJ1cHQgYXQgRW5kIG9mIEZyYW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkZSTV9JTlRfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE9WUl9JTlRfU1RBVCAgMHg0ICAgICAgICAvKiBPdmVybGF5IEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk9WUl9JTlRfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgRlJNX0lOVF9TVEFUICAweDggICAgICAgIC8qIEZyYW1lIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkZSTV9JTlRfU1RBVCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFBJWENfUllDT04gKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTExICAweDNmZiAgICAgIC8qIEExMSBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMTIgIDB4ZmZjMDAgICAgLyogQTEyIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEExMyAgMHgzZmYwMDAwMCAvKiBBMTMgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFJZX01VTFQ0ICAweDQwMDAwMDAwIC8qIE11bHRpcGx5IFJvdyBieSA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUllfTVVMVDQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBQSVhDX0dVQ09OICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEyMSAgMHgzZmYgICAgICAvKiBBMjEgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTIyICAweGZmYzAwICAgIC8qIEEyMiBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMjMgIDB4M2ZmMDAwMDAgLyogQTIzIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBHVV9NVUxUNCAgMHg0MDAwMDAwMCAvKiBNdWx0aXBseSBSb3cgYnkgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkdVX01VTFQ0ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19CVkNPTiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMzEgIDB4M2ZmICAgICAgLyogQTMxIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEzMiAgMHhmZmMwMCAgICAvKiBBMzIgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTMzICAweDNmZjAwMDAwIC8qIEEzMyBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQlZfTVVMVDQgIDB4NDAwMDAwMDAgLyogTXVsdGlwbHkgUm93IGJ5IDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5CVl9NVUxUNCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFBJWENfQ0NCSUFTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEExNCAgMHgzZmYgICAgICAvKiBBMTQgaW4gdGhlIEJpYXMgVmVjdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMjQgIDB4ZmZjMDAgICAgLyogQTI0IGluIHRoZSBCaWFzIFZlY3RvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTM0ICAweDNmZjAwMDAwIC8qIEEzNCBpbiB0aGUgQmlhcyBWZWN0b3IgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX1RDICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBSWV9UUkFOUyAgMHhmZiAgICAgICAvKiBUcmFuc3BhcmVudCBDb2xvciAtIFIvWSBDb21wb25lbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBHVV9UUkFOUyAgMHhmZjAwICAgICAvKiBUcmFuc3BhcmVudCBDb2xvciAtIEcvVSBDb21wb25lbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBCVl9UUkFOUyAgMHhmZjAwMDAgICAvKiBUcmFuc3BhcmVudCBDb2xvciAtIEIvViBDb21wb25lbnQgKi8KKworLyogQml0IG1hc2tzIGZvciBIT1NUX0NPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBIT1NUX0VOICAweDEgICAgICAgIC8qIEhvc3QgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkhPU1RfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX0VORCAgMHgyICAgICAgICAvKiBIb3N0IEVuZGlhbmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkhPU1RfRU5EICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBEQVRBX1NJWkUgIDB4NCAgICAgICAgLyogRGF0YSBTaXplICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5EQVRBX1NJWkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX1JTVCAgMHg4ICAgICAgICAvKiBIb3N0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSE9TVF9SU1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIUkRZX09WUiAgMHgyMCAgICAgICAvKiBIb3N0IFJlYWR5IE92ZXJyaWRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSFJEWV9PVlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBJTlRfTU9ERSAgMHg0MCAgICAgICAvKiBJbnRlcnJ1cHQgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklOVF9NT0RFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQlRfRU4gIDB4ODAgICAgICAgLyogQnVzIFRpbWVvdXQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQlRfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEVIVyAgMHgxMDAgICAgICAvKiBFbmFibGUgSG9zdCBXcml0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuRUhXICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBFSFIgIDB4MjAwICAgICAgLyogRW5hYmxlIEhvc3QgUmVhZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuRUhSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBCRFIgIDB4NDAwICAgICAgLyogQnVyc3QgRE1BIFJlcXVlc3RzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5CRFIgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBIT1NUX1NUQVRVUyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkVBRFkgIDB4MSAgICAgICAgLyogRE1BIFJlYWR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkVBRFkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBGSUZPRlVMTCAgMHgyICAgICAgICAvKiBGSUZPIEZ1bGwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5GSUZPRlVMTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRklGT0VNUFRZICAweDQgICAgICAgIC8qIEZJRk8gRW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkZJRk9FTVBUWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIENPTVBMRVRFICAweDggICAgICAgIC8qIERNQSBDb21wbGV0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkNPTVBMRVRFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhTSEsgIDB4MTAgICAgICAgLyogSG9zdCBIYW5kc2hha2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuSFNISyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FT1VUICAweDIwICAgICAgIC8qIEhvc3QgVGltZW91dCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5USU1FT1VUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhJUlEgIDB4NDAgICAgICAgLyogSG9zdCBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5ISVJRICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEFMTE9XX0NORkcgIDB4ODAgICAgICAgLyogQWxsb3cgTmV3IENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQUxMT1dfQ05GRyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUFfRElSICAweDEwMCAgICAgIC8qIERNQSBEaXJlY3Rpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRE1BX0RJUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQlRFICAweDIwMCAgICAgIC8qIEJ1cyBUaW1lb3V0IEVuYWJsZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkJURSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEhPU1RfVElNRU9VVCAqLworCisjZGVmaW5lICAgICAgICAgICAgIENPVU5UX1RJTUVPVVQgIDB4N2ZmICAgICAgLyogSG9zdCBUaW1lb3V0IGNvdW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgS1BBRF9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBLUEFEX0VOICAweDEgICAgICAgIC8qIEtleXBhZCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuS1BBRF9FTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgS1BBRF9JUlFNT0RFICAweDYgICAgICAgIC8qIEtleSBQcmVzcyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIEtQQURfUk9XRU4gIDB4MWMwMCAgICAgLyogUm93IEVuYWJsZSBXaWR0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBLUEFEX0NPTEVOICAweGUwMDAgICAgIC8qIENvbHVtbiBFbmFibGUgV2lkdGggKi8KKworLyogQml0IG1hc2tzIGZvciBLUEFEX1BSRVNDQUxFICovCisKKyNkZWZpbmUgICAgICAgICBLUEFEX1BSRVNDQUxFX1ZBTCAgMHgzZiAgICAgICAvKiBLZXkgUHJlc2NhbGUgVmFsdWUgKi8KKworLyogQml0IG1hc2tzIGZvciBLUEFEX01TRUwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBEQk9OX1NDQUxFICAweGZmICAgICAgIC8qIERlYm91bmNlIFNjYWxlIFZhbHVlICovCisjZGVmaW5lICAgICAgICAgICAgICBDT0xEUlZfU0NBTEUgIDB4ZmYwMCAgICAgLyogQ29sdW1uIERyaXZlciBTY2FsZSBWYWx1ZSAqLworCisvKiBCaXQgbWFza3MgZm9yIEtQQURfUk9XQ09MICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBLUEFEX1JPVyAgMHhmZiAgICAgICAvKiBSb3dzIFByZXNzZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBLUEFEX0NPTCAgMHhmZjAwICAgICAvKiBDb2x1bW5zIFByZXNzZWQgKi8KKworLyogQml0IG1hc2tzIGZvciBLUEFEX1NUQVQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEtQQURfSVJRICAweDEgICAgICAgIC8qIEtleXBhZCBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuS1BBRF9JUlEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIEtQQURfTVJPV0NPTCAgMHg2ICAgICAgICAvKiBNdWx0aXBsZSBSb3cvQ29sdW1uIEtleXByZXNzIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgS1BBRF9QUkVTU0VEICAweDggICAgICAgIC8qIEtleSBwcmVzcyBjdXJyZW50IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuS1BBRF9QUkVTU0VEICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgS1BBRF9TT0ZURVZBTCAqLworCisjZGVmaW5lICAgICAgICAgICBLUEFEX1NPRlRFVkFMX0UgIDB4MiAgICAgICAgLyogU29mdHdhcmUgUHJvZ3JhbW1hYmxlIEZvcmNlIEV2YWx1YXRlICovCisjZGVmaW5lICAgICAgICAgIG5LUEFEX1NPRlRFVkFMX0UgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBTREhfQ09NTUFORCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9JRFggIDB4M2YgICAgICAgLyogQ29tbWFuZCBJbmRleCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfUlNQICAweDQwICAgICAgIC8qIFJlc3BvbnNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkNNRF9SU1AgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENNRF9MX1JTUCAgMHg4MCAgICAgICAvKiBMb25nIFJlc3BvbnNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DTURfTF9SU1AgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENNRF9JTlRfRSAgMHgxMDAgICAgICAvKiBDb21tYW5kIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuQ01EX0lOVF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIENNRF9QRU5EX0UgIDB4MjAwICAgICAgLyogQ29tbWFuZCBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkNNRF9QRU5EX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDTURfRSAgMHg0MDAgICAgICAvKiBDb21tYW5kIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNNRF9FICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1BXUl9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUFdSX09OICAweDMgICAgICAgIC8qIFBvd2VyIE9uICovCisjaWYgMAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEJEICAweDNjICAgICAgIC8qIFRCRCAqLworI2VuZGlmCisjZGVmaW5lICAgICAgICAgICAgICAgICBTRF9DTURfT0QgIDB4NDAgICAgICAgLyogT3BlbiBEcmFpbiBPdXRwdXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblNEX0NNRF9PRCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBST0RfQ1RMICAweDgwICAgICAgIC8qIFJvZCBDb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblJPRF9DVEwgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBTREhfQ0xLX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDTEtESVYgIDB4ZmYgICAgICAgLyogTUNfQ0xLIERpdmlzb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDTEtfRSAgMHgxMDAgICAgICAvKiBNQ19DTEsgQnVzIENsb2NrIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNMS19FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUFdSX1NWX0UgIDB4MjAwICAgICAgLyogUG93ZXIgU2F2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5QV1JfU1ZfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBDTEtESVZfQllQQVNTICAweDQwMCAgICAgIC8qIEJ5cGFzcyBEaXZpc29yICovCisjZGVmaW5lICAgICAgICAgICAgbkNMS0RJVl9CWVBBU1MgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBXSURFX0JVUyAgMHg4MDAgICAgICAvKiBXaWRlIEJ1cyBNb2RlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbldJREVfQlVTICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1JFU1BfQ01EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVNQX0NNRCAgMHgzZiAgICAgICAvKiBSZXNwb25zZSBDb21tYW5kICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0RBVEFfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBEVFhfRSAgMHgxICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkRUWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERUWF9ESVIgIDB4MiAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBEaXJlY3Rpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRFRYX0RJUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERUWF9NT0RFICAweDQgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRUWF9NT0RFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBEVFhfRE1BX0UgIDB4OCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBETUEgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5EVFhfRE1BX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERUWF9CTEtfTEdUSCAgMHhmMCAgICAgICAvKiBEYXRhIFRyYW5zZmVyIEJsb2NrIExlbmd0aCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgQ01EX0NSQ19GQUlMICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCAqLworI2RlZmluZSAgICAgICAgICAgICBuQ01EX0NSQ19GQUlMICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBEQVRfQ1JDX0ZBSUwgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCAqLworI2RlZmluZSAgICAgICAgICAgICBuREFUX0NSQ19GQUlMICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgQ01EX1RJTUVPVVQgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0ICovCisjZGVmaW5lICAgICAgICAgICAgICBuQ01EX1RJTUVPVVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBEQVRfVElNRU9VVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0ICovCisjZGVmaW5lICAgICAgICAgICAgICBuREFUX1RJTUVPVVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBUWF9VTkRFUlJVTiAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biAqLworI2RlZmluZSAgICAgICAgICAgICAgblRYX1VOREVSUlVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIFJYX09WRVJSVU4gIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuICovCisjZGVmaW5lICAgICAgICAgICAgICAgblJYX09WRVJSVU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIENNRF9SRVNQX0VORCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kICovCisjZGVmaW5lICAgICAgICAgICAgIG5DTURfUkVTUF9FTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDTURfU0VOVCAgMHg4MCAgICAgICAvKiBDTUQgU2VudCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkNNRF9TRU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERBVF9FTkQgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuREFUX0VORCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBTVEFSVF9CSVRfRVJSICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgIG5TVEFSVF9CSVRfRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgREFUX0JMS19FTkQgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5EQVRfQkxLX0VORCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfQUNUICAweDgwMCAgICAgIC8qIENNRCBBY3RpdmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ01EX0FDVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQUNUICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVFhfQUNUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBSWF9BQ1QgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblJYX0FDVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgVFhfRklGT19TVEFUICAweDQwMDAgICAgIC8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgIG5UWF9GSUZPX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fU1RBVCAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgIG5SWF9GSUZPX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fRlVMTCAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblRYX0ZJRk9fRlVMTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgUlhfRklGT19GVUxMICAweDIwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBGdWxsICovCisjZGVmaW5lICAgICAgICAgICAgIG5SWF9GSUZPX0ZVTEwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fWkVSTyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5ICovCisjZGVmaW5lICAgICAgICAgICAgIG5UWF9GSUZPX1pFUk8gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBSWF9EQVRfWkVSTyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5SWF9EQVRfWkVSTyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBUWF9EQVRfUkRZICAweDEwMDAwMCAgIC8qIFRyYW5zbWl0IERhdGEgQXZhaWxhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgblRYX0RBVF9SRFkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBSWF9GSUZPX1JEWSAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICBuUlhfRklGT19SRFkgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTX0NMUiAqLworCisjZGVmaW5lICAgICAgICAgQ01EX0NSQ19GQUlMX1NUQVQgIDB4MSAgICAgICAgLyogQ01EIENSQyBGYWlsIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgbkNNRF9DUkNfRkFJTF9TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX1NUQVQgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgIG5EQVRfQ1JDX0ZBSUxfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBDTURfVElNRU9VVF9TVEFUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICBuQ01EX1RJTUVPVVRfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBEQVRfVElNRU9VVF9TVEFUICAweDggICAgICAgIC8qIERhdGEgVGltZSBPdXQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgbkRBVF9USU1FT1VUX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fU1RBVCAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICBuVFhfVU5ERVJSVU5fU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgUlhfT1ZFUlJVTl9TVEFUICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgblJYX09WRVJSVU5fU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIENNRF9SRVNQX0VORF9TVEFUICAweDQwICAgICAgIC8qIENNRCBSZXNwb25zZSBFbmQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICBuQ01EX1JFU1BfRU5EX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfU1RBVCAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICBuQ01EX1NFTlRfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgREFUX0VORF9TVEFUICAweDEwMCAgICAgIC8qIERhdGEgRW5kIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuREFUX0VORF9TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBTVEFSVF9CSVRfRVJSX1NUQVQgIDB4MjAwICAgICAgLyogU3RhcnQgQml0IEVycm9yIFN0YXR1cyAqLworI2RlZmluZSAgICAgICBuU1RBUlRfQklUX0VSUl9TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX1NUQVQgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgbkRBVF9CTEtfRU5EX1NUQVQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBTREhfTUFTSzAgKi8KKworI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9NQVNLICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBNYXNrICovCisjZGVmaW5lICAgICAgICBuQ01EX0NSQ19GQUlMX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBEQVRfQ1JDX0ZBSUxfTUFTSyAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgIG5EQVRfQ1JDX0ZBSUxfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBDTURfVElNRU9VVF9NQVNLICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCBNYXNrICovCisjZGVmaW5lICAgICAgICAgbkNNRF9USU1FT1VUX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfTUFTSyAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBuREFUX1RJTUVPVVRfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBUWF9VTkRFUlJVTl9NQVNLICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBuVFhfVU5ERVJSVU5fTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgUlhfT1ZFUlJVTl9NQVNLICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biBNYXNrICovCisjZGVmaW5lICAgICAgICAgIG5SWF9PVkVSUlVOX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfTUFTSyAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgIG5DTURfUkVTUF9FTkRfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBDTURfU0VOVF9NQVNLICAweDgwICAgICAgIC8qIENNRCBTZW50IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICBuQ01EX1NFTlRfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgREFUX0VORF9NQVNLICAweDEwMCAgICAgIC8qIERhdGEgRW5kIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRBVF9FTkRfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9NQVNLICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBNYXNrICovCisjZGVmaW5lICAgICAgIG5TVEFSVF9CSVRfRVJSX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgREFUX0JMS19FTkRfTUFTSyAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCBNYXNrICovCisjZGVmaW5lICAgICAgICAgbkRBVF9CTEtfRU5EX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIENNRF9BQ1RfTUFTSyAgMHg4MDAgICAgICAvKiBDTUQgQWN0aXZlIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkNNRF9BQ1RfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIFRYX0FDVF9NQVNLICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICBuVFhfQUNUX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBSWF9BQ1RfTUFTSyAgMHgyMDAwICAgICAvKiBSZWNlaXZlIEFjdGl2ZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICBuUlhfQUNUX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBUWF9GSUZPX1NUQVRfTUFTSyAgMHg0MDAwICAgICAvKiBUcmFuc21pdCBGSUZPIFN0YXR1cyBNYXNrICovCisjZGVmaW5lICAgICAgICBuVFhfRklGT19TVEFUX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBSWF9GSUZPX1NUQVRfTUFTSyAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgIG5SWF9GSUZPX1NUQVRfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fRlVMTF9NQVNLICAweDEwMDAwICAgIC8qIFRyYW5zbWl0IEZJRk8gRnVsbCBNYXNrICovCisjZGVmaW5lICAgICAgICBuVFhfRklGT19GVUxMX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBSWF9GSUZPX0ZVTExfTUFTSyAgMHgyMDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRnVsbCBNYXNrICovCisjZGVmaW5lICAgICAgICBuUlhfRklGT19GVUxMX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBUWF9GSUZPX1pFUk9fTUFTSyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgIG5UWF9GSUZPX1pFUk9fTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBSWF9EQVRfWkVST19NQVNLICAweDgwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBFbXB0eSBNYXNrICovCisjZGVmaW5lICAgICAgICAgblJYX0RBVF9aRVJPX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgIFRYX0RBVF9SRFlfTUFTSyAgMHgxMDAwMDAgICAvKiBUcmFuc21pdCBEYXRhIEF2YWlsYWJsZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgIG5UWF9EQVRfUkRZX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgUlhfRklGT19SRFlfTUFTSyAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBuUlhfRklGT19SRFlfTUFTSyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNESF9GSUZPX0NOVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIEZJRk9fQ09VTlQgIDB4N2ZmZiAgICAgLyogRklGTyBDb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9FX1NUQVRVUyAqLworCisjZGVmaW5lICAgICAgICAgICAgICBTRElPX0lOVF9ERVQgIDB4MiAgICAgICAgLyogU0RJTyBJbnQgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblNESU9fSU5UX0RFVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIFNEX0NBUkRfREVUICAweDEwICAgICAgIC8qIFNEIENhcmQgRGV0ZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICBuU0RfQ0FSRF9ERVQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBTREhfRV9NQVNLICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBTRElPX01TSyAgMHgyICAgICAgICAvKiBNYXNrIFNESU8gSW50IERldGVjdGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuU0RJT19NU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0NEX01TSyAgMHg0MCAgICAgICAvKiBNYXNrIENhcmQgRGV0ZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblNDRF9NU0sgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBTREhfQ0ZHICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ0xLU19FTiAgMHgxICAgICAgICAvKiBDbG9ja3MgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkNMS1NfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0Q0RSAgMHg0ICAgICAgICAvKiBTRElPIDQtQml0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5TRDRFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBNV0UgIDB4OCAgICAgICAgLyogTW92aW5nIFdpbmRvdyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbk1XRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RfUlNUICAweDEwICAgICAgIC8qIFNETU1DIFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5TRF9SU1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFBVUF9TRERBVCAgMHgyMCAgICAgICAvKiBQdWxsLXVwIFNEX0RBVCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuUFVQX1NEREFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIFBVUF9TRERBVDMgIDB4NDAgICAgICAgLyogUHVsbC11cCBTRF9EQVQzICovCisjZGVmaW5lICAgICAgICAgICAgICAgblBVUF9TRERBVDMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFBEX1NEREFUMyAgMHg4MCAgICAgICAvKiBQdWxsLWRvd24gU0RfREFUMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuUERfU0REQVQzICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1JEX1dBSVRfRU4gKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUldSICAweDEgICAgICAgIC8qIFJlYWQgV2FpdCBSZXF1ZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5SV1IgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9DT05UUk9MICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFBJT19TVEFSVCAgMHgxICAgICAgICAvKiBTdGFydCBQSU8vUmVnIE9wICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5QSU9fU1RBUlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBNVUxUSV9TVEFSVCAgMHgyICAgICAgICAvKiBTdGFydCBNdWx0aS1ETUEgT3AgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5NVUxUSV9TVEFSVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIFVMVFJBX1NUQVJUICAweDQgICAgICAgIC8qIFN0YXJ0IFVsdHJhLURNQSBPcCAqLworI2RlZmluZSAgICAgICAgICAgICAgblVMVFJBX1NUQVJUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgWEZFUl9ESVIgIDB4OCAgICAgICAgLyogVHJhbnNmZXIgRGlyZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuWEZFUl9ESVIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBJT1JEWV9FTiAgMHgxMCAgICAgICAvKiBJT1JEWSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5JT1JEWV9FTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0ZMVVNIICAweDIwICAgICAgIC8qIEZsdXNoIEZJRk9zICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkZJRk9fRkxVU0ggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBTT0ZUX1JTVCAgMHg0MCAgICAgICAvKiBTb2Z0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuU09GVF9SU1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgREVWX1JTVCAgMHg4MCAgICAgICAvKiBEZXZpY2UgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuREVWX1JTVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBURlJDTlRfUlNUICAweDEwMCAgICAgIC8qIFRyYW5zIENvdW50IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgblRGUkNOVF9SU1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBFTkRfT05fVEVSTSAgMHgyMDAgICAgICAvKiBFbmQvVGVybWluYXRlIFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgbkVORF9PTl9URVJNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgUElPX1VTRV9ETUEgIDB4NDAwICAgICAgLyogUElPLURNQSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5QSU9fVVNFX0RNQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBVRE1BSU5fRklGT19USFJTICAweGYwMDAgICAgIC8qIFVsdHJhIERNQS1JTiBGSUZPIFRocmVzaG9sZCAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1NUQVRVUyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgUElPX1hGRVJfT04gIDB4MSAgICAgICAgLyogUElPIHRyYW5zZmVyIGluIHByb2dyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICBuUElPX1hGRVJfT04gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgTVVMVElfWEZFUl9PTiAgMHgyICAgICAgICAvKiBNdWx0aS13b3JkIERNQSB0cmFuc2ZlciBpbiBwcm9ncmVzcyAqLworI2RlZmluZSAgICAgICAgICAgIG5NVUxUSV9YRkVSX09OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIFVMVFJBX1hGRVJfT04gIDB4NCAgICAgICAgLyogVWx0cmEgRE1BIHRyYW5zZmVyIGluIHByb2dyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgblVMVFJBX1hGRVJfT04gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBVTFRSQV9JTl9GTCAgMHhmMCAgICAgICAvKiBVbHRyYSBETUEgSW5wdXQgRklGTyBMZXZlbCAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX0RFVl9BRERSICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBERVZfQUREUiAgMHgxZiAgICAgICAvKiBEZXZpY2UgQWRkcmVzcyAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX0lOVF9NQVNLICovCisKKyNkZWZpbmUgICAgICAgIEFUQVBJX0RFVl9JTlRfTUFTSyAgMHgxICAgICAgICAvKiBEZXZpY2UgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgICAgICAgbkFUQVBJX0RFVl9JTlRfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBQSU9fRE9ORV9NQVNLICAweDIgICAgICAgIC8qIFBJTyB0cmFuc2ZlciBkb25lIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICAgICAgICAgICAgblBJT19ET05FX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgIE1VTFRJX0RPTkVfTUFTSyAgMHg0ICAgICAgICAvKiBNdWx0aS1ETUEgdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgICAgICAgICBuTVVMVElfRE9ORV9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFVETUFJTl9ET05FX01BU0sgIDB4OCAgICAgICAgLyogVWx0cmEtRE1BIGluIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgICAgICAgICBuVURNQUlOX0RPTkVfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIFVETUFPVVRfRE9ORV9NQVNLICAweDEwICAgICAgIC8qIFVsdHJhLURNQSBvdXQgdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgICAgICAgblVETUFPVVRfRE9ORV9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgIEhPU1RfVEVSTV9YRkVSX01BU0sgIDB4MjAgICAgICAgLyogSG9zdCB0ZXJtaW5hdGUgY3VycmVudCB0cmFuc2ZlciBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgICAgIG5IT1NUX1RFUk1fWEZFUl9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICBNVUxUSV9URVJNX01BU0sgIDB4NDAgICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBNdWx0aS1ETUEgdHJhbnNmZXIgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgbk1VTFRJX1RFUk1fTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBVRE1BSU5fVEVSTV9NQVNLICAweDgwICAgICAgIC8qIERldmljZSB0ZXJtaW5hdGUgVWx0cmEtRE1BLWluIHRyYW5zZmVyIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICAgICAgICAgblVETUFJTl9URVJNX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBVRE1BT1VUX1RFUk1fTUFTSyAgMHgxMDAgICAgICAvKiBEZXZpY2UgdGVybWluYXRlIFVsdHJhLURNQS1vdXQgdHJhbnNmZXIgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgICAgICAgIG5VRE1BT1VUX1RFUk1fTUFTSyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX0lOVF9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICBBVEFQSV9ERVZfSU5UICAweDEgICAgICAgIC8qIERldmljZSBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgbkFUQVBJX0RFVl9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFBJT19ET05FX0lOVCAgMHgyICAgICAgICAvKiBQSU8gdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgIG5QSU9fRE9ORV9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICBNVUxUSV9ET05FX0lOVCAgMHg0ICAgICAgICAvKiBNdWx0aS1ETUEgdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICBuTVVMVElfRE9ORV9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgIFVETUFJTl9ET05FX0lOVCAgMHg4ICAgICAgICAvKiBVbHRyYS1ETUEgaW4gdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgIG5VRE1BSU5fRE9ORV9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgVURNQU9VVF9ET05FX0lOVCAgMHgxMCAgICAgICAvKiBVbHRyYS1ETUEgb3V0IHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgIG5VRE1BT1VUX0RPTkVfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBIT1NUX1RFUk1fWEZFUl9JTlQgIDB4MjAgICAgICAgLyogSG9zdCB0ZXJtaW5hdGUgY3VycmVudCB0cmFuc2ZlciBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICAgICAgIG5IT1NUX1RFUk1fWEZFUl9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICBNVUxUSV9URVJNX0lOVCAgMHg0MCAgICAgICAvKiBEZXZpY2UgdGVybWluYXRlIE11bHRpLURNQSB0cmFuc2ZlciBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICBuTVVMVElfVEVSTV9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgIFVETUFJTl9URVJNX0lOVCAgMHg4MCAgICAgICAvKiBEZXZpY2UgdGVybWluYXRlIFVsdHJhLURNQS1pbiB0cmFuc2ZlciBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgIG5VRE1BSU5fVEVSTV9JTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgVURNQU9VVF9URVJNX0lOVCAgMHgxMDAgICAgICAvKiBEZXZpY2UgdGVybWluYXRlIFVsdHJhLURNQS1vdXQgdHJhbnNmZXIgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgIG5VRE1BT1VUX1RFUk1fSU5UICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfTElORV9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9JTlRSICAweDEgICAgICAgIC8qIERldmljZSBpbnRlcnJ1cHQgdG8gaG9zdCBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5BVEFQSV9JTlRSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEFUQVBJX0RBU1AgIDB4MiAgICAgICAgLyogRGV2aWNlIGRhc3AgdG8gaG9zdCBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5BVEFQSV9EQVNQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEFUQVBJX0NTME4gIDB4NCAgICAgICAgLyogQVRBUEkgY2hpcCBzZWxlY3QgMCBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5BVEFQSV9DUzBOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEFUQVBJX0NTMU4gIDB4OCAgICAgICAgLyogQVRBUEkgY2hpcCBzZWxlY3QgMSBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5BVEFQSV9DUzFOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEFUQVBJX0FERFIgIDB4NzAgICAgICAgLyogQVRBUEkgYWRkcmVzcyBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgQVRBUElfRE1BUkVRICAweDgwICAgICAgIC8qIEFUQVBJIERNQSByZXF1ZXN0IGxpbmUgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgIG5BVEFQSV9ETUFSRVEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgQVRBUElfRE1BQUNLTiAgMHgxMDAgICAgICAvKiBBVEFQSSBETUEgYWNrbm93bGVkZ2UgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICBuQVRBUElfRE1BQUNLTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIEFUQVBJX0RJT1dOICAweDIwMCAgICAgIC8qIEFUQVBJIHdyaXRlIGxpbmUgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICBuQVRBUElfRElPV04gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBBVEFQSV9ESU9STiAgMHg0MDAgICAgICAvKiBBVEFQSSByZWFkIGxpbmUgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICBuQVRBUElfRElPUk4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBBVEFQSV9JT1JEWSAgMHg4MDAgICAgICAvKiBBVEFQSSBJT1JEWSBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgbkFUQVBJX0lPUkRZICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfU01fU1RBVEUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBQSU9fQ1NUQVRFICAweGYgICAgICAgIC8qIFBJTyBtb2RlIHN0YXRlIG1hY2hpbmUgY3VycmVudCBzdGF0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBETUFfQ1NUQVRFICAweGYwICAgICAgIC8qIERNQSBtb2RlIHN0YXRlIG1hY2hpbmUgY3VycmVudCBzdGF0ZSAqLworI2RlZmluZSAgICAgICAgICAgICBVRE1BSU5fQ1NUQVRFICAweGYwMCAgICAgIC8qIFVsdHJhIERNQS1JbiBtb2RlIHN0YXRlIG1hY2hpbmUgY3VycmVudCBzdGF0ZSAqLworI2RlZmluZSAgICAgICAgICAgIFVETUFPVVRfQ1NUQVRFICAweGYwMDAgICAgIC8qIEFUQVBJIElPUkRZIGxpbmUgc3RhdHVzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVEVSTUlOQVRFICovCisKKyNkZWZpbmUgICAgICAgICAgIEFUQVBJX0hPU1RfVEVSTSAgMHgxICAgICAgICAvKiBIb3N0IHRlcm1pbmF0aW9uYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgbkFUQVBJX0hPU1RfVEVSTSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1JFR19USU1fMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUMl9SRUcgIDB4ZmYgICAgICAgLyogRW5kIG9mIGN5Y2xlIHRpbWUgZm9yIHJlZ2lzdGVyIGFjY2VzcyB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBURU9DX1JFRyAgMHhmZjAwICAgICAvKiBTZWxlY3RzIERJT1IvRElPVyBwdWxzZXdpZHRoICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfUElPX1RJTV8wICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFQxX1JFRyAgMHhmICAgICAgICAvKiBUaW1lIGZyb20gYWRkcmVzcyB2YWxpZCB0byBESU9SL0RJT1cgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVDJfUkVHX1BJTyAgMHhmZjAgICAgICAvKiBESU9SL0RJT1cgcHVsc2V3aWR0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVDRfUkVHICAweGYwMDAgICAgIC8qIERJT1cgZGF0YSBob2xkICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfUElPX1RJTV8xICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIFRFT0NfUkVHX1BJTyAgMHhmZiAgICAgICAvKiBFbmQgb2YgY3ljbGUgdGltZSBmb3IgUElPIGFjY2VzcyB0cmFuc2ZlcnMuICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfTVVMVElfVElNXzAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFREICAweGZmICAgICAgIC8qIERJT1IvRElPVyBhc3NlcnRlZCBwdWxzZXdpZHRoICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVE0gIDB4ZmYwMCAgICAgLyogVGltZSBmcm9tIGFkZHJlc3MgdmFsaWQgdG8gRElPUi9ESU9XICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfTVVMVElfVElNXzEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEtXICAweGZmICAgICAgIC8qIFNlbGVjdHMgRElPVyBuZWdhdGVkIHB1bHNld2lkdGggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRLUiAgMHhmZjAwICAgICAvKiBTZWxlY3RzIERJT1IgbmVnYXRlZCBwdWxzZXdpZHRoICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfTVVMVElfVElNXzIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFRIICAweGZmICAgICAgIC8qIFNlbGVjdHMgRElPVyBkYXRhIGhvbGQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEVPQyAgMHhmZjAwICAgICAvKiBTZWxlY3RzIGVuZCBvZiBjeWNsZSBmb3IgRE1BICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVUxUUkFfVElNXzAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUQUNLICAweGZmICAgICAgIC8qIFNlbGVjdHMgc2V0dXAgYW5kIGhvbGQgdGltZXMgZm9yIFRBQ0sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEVOViAgMHhmZjAwICAgICAvKiBTZWxlY3RzIGVudmVsb3BlIHRpbWUgKi8KKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9VTFRSQV9USU1fMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFREVlMgIDB4ZmYgICAgICAgLyogU2VsZWN0cyBkYXRhIHZhbGlkIHNldHVwIHRpbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFRDWUNfVERWUyAgMHhmZjAwICAgICAvKiBTZWxlY3RzIGN5Y2xlIHRpbWUgLSBURFZTIHRpbWUgKi8KKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9VTFRSQV9USU1fMiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUU1MgIDB4ZmYgICAgICAgLyogU2VsZWN0cyB0aW1lIGZyb20gU1RST0JFIGVkZ2UgdG8gbmVnYXRpb24gb2YgRE1BUlEgb3IgYXNzZXJ0aW9uIG9mIFNUT1AgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVE1MSSAgMHhmZjAwICAgICAvKiBTZWxlY3RzIGludGVybG9jayB0aW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVUxUUkFfVElNXzMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUWkFIICAweGZmICAgICAgIC8qIFNlbGVjdHMgbWluaW11bSBkZWxheSByZXF1aXJlZCBmb3Igb3V0cHV0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgUkVBRFlfUEFVU0UgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyByZWFkeSB0byBwYXVzZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFRJTUVSX0VOQUJMRTEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRU44ICAweDEgICAgICAgIC8qIFRpbWVyIDggRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5USU1FTjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVOOSAgMHgyICAgICAgICAvKiBUaW1lciA5IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNRU45ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVOMTAgIDB4NCAgICAgICAgLyogVGltZXIgMTAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblRJTUVOMTAgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBUSU1FUl9ESVNBQkxFMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTURJUzggIDB4MSAgICAgICAgLyogVGltZXIgOCBEaXNhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblRJTURJUzggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRElTOSAgMHgyICAgICAgICAvKiBUaW1lciA5IERpc2FibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuVElNRElTOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFRJTURJUzEwICAweDQgICAgICAgIC8qIFRpbWVyIDEwIERpc2FibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5USU1ESVMxMCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFRJTUVSX1NUQVRVUzEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNSUw4ICAweDEgICAgICAgIC8qIFRpbWVyIDggSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5USU1JTDggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUlMOSAgMHgyICAgICAgICAvKiBUaW1lciA5IEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNSUw5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUlMMTAgIDB4NCAgICAgICAgLyogVGltZXIgMTAgSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblRJTUlMMTAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFRPVkZfRVJSOCAgMHgxMCAgICAgICAvKiBUaW1lciA4IENvdW50ZXIgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblRPVkZfRVJSOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgVE9WRl9FUlI5ICAweDIwICAgICAgIC8qIFRpbWVyIDkgQ291bnRlciBPdmVyZmxvdyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuVE9WRl9FUlI5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIFRPVkZfRVJSMTAgIDB4NDAgICAgICAgLyogVGltZXIgMTAgQ291bnRlciBPdmVyZmxvdyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5UT1ZGX0VSUjEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJVTjggIDB4MTAwMCAgICAgLyogVGltZXIgOCBTbGF2ZSBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJVTjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlVOOSAgMHgyMDAwICAgICAvKiBUaW1lciA5IFNsYXZlIEVuYWJsZSBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUlVOOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFJVTjEwICAweDQwMDAgICAgIC8qIFRpbWVyIDEwIFNsYXZlIEVuYWJsZSBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRSVU4xMCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEVQUEkwIGFyZSBvYnRhaW5lZCBmcm9tIGNvbW1vbiBiYXNlIGhlYWRlciBmb3IgRVBQSXggKEVQUEkxIGFuZCBFUFBJMikgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfRkFERFIgKi8KKworI2RlZmluZSAgICAgICAgICBGVU5DVElPTl9BRERSRVNTICAweDdmICAgICAgIC8qIEZ1bmN0aW9uIGFkZHJlc3MgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfUE9XRVIgKi8KKworI2RlZmluZSAgICAgICAgICAgRU5BQkxFX1NVU1BFTkRNICAweDEgICAgICAgIC8qIGVuYWJsZSBTdXNwZW5kTSBvdXRwdXQgKi8KKyNkZWZpbmUgICAgICAgICAgbkVOQUJMRV9TVVNQRU5ETSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgU1VTUEVORF9NT0RFICAweDIgICAgICAgIC8qIFN1c3BlbmQgTW9kZSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblNVU1BFTkRfTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIFJFU1VNRV9NT0RFICAweDQgICAgICAgIC8qIERNQSBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICBuUkVTVU1FX01PREUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSRVNFVCAgMHg4ICAgICAgICAvKiBSZXNldCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SRVNFVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBIU19NT0RFICAweDEwICAgICAgIC8qIEhpZ2ggU3BlZWQgbW9kZSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuSFNfTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgSFNfRU5BQkxFICAweDIwICAgICAgIC8qIGhpZ2ggU3BlZWQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5IU19FTkFCTEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFNPRlRfQ09OTiAgMHg0MCAgICAgICAvKiBTb2Z0IGNvbm5lY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblNPRlRfQ09OTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJU09fVVBEQVRFICAweDgwICAgICAgIC8qIElzb2Nocm9ub3VzIHVwZGF0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5JU09fVVBEQVRFICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJUWCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDBfVFggIDB4MSAgICAgICAgLyogVHggRW5kcG9pbnQgMCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQMF9UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAxX1RYICAweDIgICAgICAgIC8qIFR4IEVuZHBvaW50IDEgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDFfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMl9UWCAgMHg0ICAgICAgICAvKiBUeCBFbmRwb2ludCAyIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAyX1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDNfVFggIDB4OCAgICAgICAgLyogVHggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQM19UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA0X1RYICAweDEwICAgICAgIC8qIFR4IEVuZHBvaW50IDQgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDRfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNV9UWCAgMHgyMCAgICAgICAvKiBUeCBFbmRwb2ludCA1IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA1X1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDZfVFggIDB4NDAgICAgICAgLyogVHggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNl9UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA3X1RYICAweDgwICAgICAgIC8qIFR4IEVuZHBvaW50IDcgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDdfVFggIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlJYICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMV9SWCAgMHgyICAgICAgICAvKiBSeCBFbmRwb2ludCAxIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAxX1JYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDJfUlggIDB4NCAgICAgICAgLyogUnggRW5kcG9pbnQgMiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQMl9SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAzX1JYICAweDggICAgICAgIC8qIFJ4IEVuZHBvaW50IDMgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDNfUlggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNF9SWCAgMHgxMCAgICAgICAvKiBSeCBFbmRwb2ludCA0IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA0X1JYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDVfUlggIDB4MjAgICAgICAgLyogUnggRW5kcG9pbnQgNSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNV9SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA2X1JYICAweDQwICAgICAgIC8qIFJ4IEVuZHBvaW50IDYgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDZfUlggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQN19SWCAgMHg4MCAgICAgICAvKiBSeCBFbmRwb2ludCA3IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA3X1JYICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJUWEUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMF9UWF9FICAweDEgICAgICAgIC8qIEVuZHBvaW50IDAgaW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQMF9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAxX1RYX0UgIDB4MiAgICAgICAgLyogVHggRW5kcG9pbnQgMSBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQMV9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAyX1RYX0UgIDB4NCAgICAgICAgLyogVHggRW5kcG9pbnQgMiBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQMl9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVAzX1RYX0UgIDB4OCAgICAgICAgLyogVHggRW5kcG9pbnQgMyBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQM19UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA0X1RYX0UgIDB4MTAgICAgICAgLyogVHggRW5kcG9pbnQgNCBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNF9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA1X1RYX0UgIDB4MjAgICAgICAgLyogVHggRW5kcG9pbnQgNSBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNV9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA2X1RYX0UgIDB4NDAgICAgICAgLyogVHggRW5kcG9pbnQgNiBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQNl9UWF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVA3X1RYX0UgIDB4ODAgICAgICAgLyogVHggRW5kcG9pbnQgNyBpbnRlcnJ1cHQgIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVQN19UWF9FICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJSWEUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMV9SWF9FICAweDIgICAgICAgIC8qIFJ4IEVuZHBvaW50IDEgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDFfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMl9SWF9FICAweDQgICAgICAgIC8qIFJ4IEVuZHBvaW50IDIgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDJfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQM19SWF9FICAweDggICAgICAgIC8qIFJ4IEVuZHBvaW50IDMgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDNfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNF9SWF9FICAweDEwICAgICAgIC8qIFJ4IEVuZHBvaW50IDQgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDRfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNV9SWF9FICAweDIwICAgICAgIC8qIFJ4IEVuZHBvaW50IDUgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDVfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNl9SWF9FICAweDQwICAgICAgIC8qIFJ4IEVuZHBvaW50IDYgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDZfUlhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQN19SWF9FICAweDgwICAgICAgIC8qIFJ4IEVuZHBvaW50IDcgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDdfUlhfRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSVVNCICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFNVU1BFTkRfQiAgMHgxICAgICAgICAvKiBTdXNwZW5kIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuU1VTUEVORF9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUkVTVU1FX0IgIDB4MiAgICAgICAgLyogUmVzdW1lIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblJFU1VNRV9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFJFU0VUX09SX0JBQkxFX0IgIDB4NCAgICAgICAgLyogUmVzZXQvYmFiYmxlIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgIG5SRVNFVF9PUl9CQUJMRV9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU09GX0IgIDB4OCAgICAgICAgLyogU3RhcnQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5TT0ZfQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ09OTl9CICAweDEwICAgICAgIC8qIENvbm5lY3Rpb24gaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DT05OX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBESVNDT05fQiAgMHgyMCAgICAgICAvKiBEaXNjb25uZWN0IGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRJU0NPTl9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIFNFU1NJT05fUkVRX0IgIDB4NDAgICAgICAgLyogU2Vzc2lvbiBSZXF1ZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgblNFU1NJT05fUkVRX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFZCVVNfRVJST1JfQiAgMHg4MCAgICAgICAvKiBWYnVzIHRocmVzaG9sZCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblZCVVNfRVJST1JfQiAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSVVNCRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFNVU1BFTkRfQkUgIDB4MSAgICAgICAgLyogU3VzcGVuZCBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5TVVNQRU5EX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBSRVNVTUVfQkUgIDB4MiAgICAgICAgLyogUmVzdW1lIGluZGljYXRvciBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5SRVNVTUVfQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBSRVNFVF9PUl9CQUJMRV9CRSAgMHg0ICAgICAgICAvKiBSZXNldC9iYWJibGUgaW5kaWNhdG9yIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgIG5SRVNFVF9PUl9CQUJMRV9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU09GX0JFICAweDggICAgICAgIC8qIFN0YXJ0IG9mIGZyYW1lIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblNPRl9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDT05OX0JFICAweDEwICAgICAgIC8qIENvbm5lY3Rpb24gaW5kaWNhdG9yIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ09OTl9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRElTQ09OX0JFICAweDIwICAgICAgIC8qIERpc2Nvbm5lY3QgaW5kaWNhdG9yIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkRJU0NPTl9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgIFNFU1NJT05fUkVRX0JFICAweDQwICAgICAgIC8qIFNlc3Npb24gUmVxdWVzdCBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICBuU0VTU0lPTl9SRVFfQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgVkJVU19FUlJPUl9CRSAgMHg4MCAgICAgICAvKiBWYnVzIHRocmVzaG9sZCBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgIG5WQlVTX0VSUk9SX0JFICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0ZSQU1FICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIEZSQU1FX05VTUJFUiAgMHg3ZmYgICAgICAvKiBGcmFtZSBudW1iZXIgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5ERVggKi8KKworI2RlZmluZSAgICAgICAgIFNFTEVDVEVEX0VORFBPSU5UICAweGYgICAgICAgIC8qIHNlbGVjdGVkIGVuZHBvaW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0dMT0JBTF9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBHTE9CQUxfRU5BICAweDEgICAgICAgIC8qIGVuYWJsZXMgVVNCIG1vZHVsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5HTE9CQUxfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQMV9UWF9FTkEgIDB4MiAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgMSBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVAxX1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDJfVFhfRU5BICAweDQgICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDIgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQMl9UWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVAzX1RYX0VOQSAgMHg4ICAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCAzIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDNfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQNF9UWF9FTkEgIDB4MTAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgNCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA0X1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDVfVFhfRU5BICAweDIwICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDUgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQNV9UWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVA2X1RYX0VOQSAgMHg0MCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA2IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDZfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQN19UWF9FTkEgIDB4ODAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgNyBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA3X1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDFfUlhfRU5BICAweDEwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgMSBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVAxX1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDJfUlhfRU5BICAweDIwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgMiBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVAyX1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDNfUlhfRU5BICAweDQwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgMyBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVAzX1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDRfUlhfRU5BICAweDgwMCAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA0X1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDVfUlhfRU5BICAweDEwMDAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNSBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA1X1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDZfUlhfRU5BICAweDIwMDAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNiBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA2X1JYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDdfUlhfRU5BICAweDQwMDAgICAgIC8qIFJlY2VpdmUgZW5kcG9pbnQgNyBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA3X1JYX0VOQSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9PVEdfREVWX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFU1NJT04gIDB4MSAgICAgICAgLyogc2Vzc2lvbiBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuU0VTU0lPTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEhPU1RfUkVRICAweDIgICAgICAgIC8qIEhvc3QgbmVnb3RpYXRpb24gcmVxdWVzdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkhPU1RfUkVRICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBIT1NUX01PREUgIDB4NCAgICAgICAgLyogaW5kaWNhdGVzIFVTQkRSQyBpcyBhIGhvc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkhPU1RfTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFZCVVMwICAweDggICAgICAgIC8qIFZidXMgbGV2ZWwgaW5kaWNhdG9yWzBdICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVkJVUzAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBWQlVTMSAgMHgxMCAgICAgICAvKiBWYnVzIGxldmVsIGluZGljYXRvclsxXSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblZCVVMxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTFNERVYgIDB4MjAgICAgICAgLyogTG93LXNwZWVkIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkxTREVWICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRlNERVYgIDB4NDAgICAgICAgLyogRnVsbCBvciBIaWdoLXNwZWVkIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkZTREVWICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQl9ERVZJQ0UgIDB4ODAgICAgICAgLyogQScgb3IgJ0InIGRldmljZSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5CX0RFVklDRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9PVEdfVkJVU19JUlEgKi8KKworI2RlZmluZSAgICAgICAgICAgICBEUklWRV9WQlVTX09OICAweDEgICAgICAgIC8qIGluZGljYXRvciB0byBkcml2ZSBWQlVTIGNvbnRyb2wgY2lyY3VpdCAqLworI2RlZmluZSAgICAgICAgICAgIG5EUklWRV9WQlVTX09OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgRFJJVkVfVkJVU19PRkYgIDB4MiAgICAgICAgLyogaW5kaWNhdG9yIHRvIHNodXQgb2ZmIGNoYXJnZSBwdW1wICovCisjZGVmaW5lICAgICAgICAgICBuRFJJVkVfVkJVU19PRkYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgIENIUkdfVkJVU19TVEFSVCAgMHg0ICAgICAgICAvKiBpbmRpY2F0b3IgZm9yIGV4dGVybmFsIGNpcmN1aXQgdG8gc3RhcnQgY2hhcmdpbmcgVkJVUyAqLworI2RlZmluZSAgICAgICAgICBuQ0hSR19WQlVTX1NUQVJUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIENIUkdfVkJVU19FTkQgIDB4OCAgICAgICAgLyogaW5kaWNhdG9yIGZvciBleHRlcm5hbCBjaXJjdWl0IHRvIGVuZCBjaGFyZ2luZyBWQlVTICovCisjZGVmaW5lICAgICAgICAgICAgbkNIUkdfVkJVU19FTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgIERJU0NIUkdfVkJVU19TVEFSVCAgMHgxMCAgICAgICAvKiBpbmRpY2F0b3IgdG8gc3RhcnQgZGlzY2hhcmdpbmcgVkJVUyAqLworI2RlZmluZSAgICAgICBuRElTQ0hSR19WQlVTX1NUQVJUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIERJU0NIUkdfVkJVU19FTkQgIDB4MjAgICAgICAgLyogaW5kaWNhdG9yIHRvIHN0b3AgZGlzY2hhcmdpbmcgVkJVUyAqLworI2RlZmluZSAgICAgICAgIG5ESVNDSFJHX1ZCVVNfRU5EICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX09UR19WQlVTX01BU0sgKi8KKworI2RlZmluZSAgICAgICAgIERSSVZFX1ZCVVNfT05fRU5BICAweDEgICAgICAgIC8qIGVuYWJsZSBEUklWRV9WQlVTX09OIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgbkRSSVZFX1ZCVVNfT05fRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBEUklWRV9WQlVTX09GRl9FTkEgIDB4MiAgICAgICAgLyogZW5hYmxlIERSSVZFX1ZCVVNfT0ZGIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICBuRFJJVkVfVkJVU19PRkZfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgIENIUkdfVkJVU19TVEFSVF9FTkEgIDB4NCAgICAgICAgLyogZW5hYmxlIENIUkdfVkJVU19TVEFSVCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICBuQ0hSR19WQlVTX1NUQVJUX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIENIUkdfVkJVU19FTkRfRU5BICAweDggICAgICAgIC8qIGVuYWJsZSBDSFJHX1ZCVVNfRU5EIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgbkNIUkdfVkJVU19FTkRfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgIERJU0NIUkdfVkJVU19TVEFSVF9FTkEgIDB4MTAgICAgICAgLyogZW5hYmxlIERJU0NIUkdfVkJVU19TVEFSVCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICBuRElTQ0hSR19WQlVTX1NUQVJUX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgIERJU0NIUkdfVkJVU19FTkRfRU5BICAweDIwICAgICAgIC8qIGVuYWJsZSBESVNDSFJHX1ZCVVNfRU5EIGludGVycnVwdCAqLworI2RlZmluZSAgICAgbkRJU0NIUkdfVkJVU19FTkRfRU5BICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0NTUjAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFJYUEtUUkRZICAweDEgICAgICAgIC8qIGRhdGEgcGFja2V0IHJlY2VpdmUgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUlhQS1RSRFkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUWFBLVFJEWSAgMHgyICAgICAgICAvKiBkYXRhIHBhY2tldCBpbiBGSUZPIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblRYUEtUUkRZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIFNUQUxMX1NFTlQgIDB4NCAgICAgICAgLyogU1RBTEwgaGFuZHNoYWtlIHNlbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuU1RBTExfU0VOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBEQVRBRU5EICAweDggICAgICAgIC8qIERhdGEgZW5kIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5EQVRBRU5EICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgU0VUVVBFTkQgIDB4MTAgICAgICAgLyogU2V0dXAgZW5kICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuU0VUVVBFTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFNFTkRTVEFMTCAgMHgyMCAgICAgICAvKiBTZW5kIFNUQUxMIGhhbmRzaGFrZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuU0VORFNUQUxMICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgU0VSVklDRURfUlhQS1RSRFkgIDB4NDAgICAgICAgLyogdXNlZCB0byBjbGVhciB0aGUgUnhQa3RSZHkgYml0ICovCisjZGVmaW5lICAgICAgICBuU0VSVklDRURfUlhQS1RSRFkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBTRVJWSUNFRF9TRVRVUEVORCAgMHg4MCAgICAgICAvKiB1c2VkIHRvIGNsZWFyIHRoZSBTZXR1cEVuZCBiaXQgKi8KKyNkZWZpbmUgICAgICAgIG5TRVJWSUNFRF9TRVRVUEVORCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRkxVU0hGSUZPICAweDEwMCAgICAgIC8qIGZsdXNoIGVuZHBvaW50IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkZMVVNIRklGTyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBTVEFMTF9SRUNFSVZFRF9IICAweDQgICAgICAgIC8qIFNUQUxMIGhhbmRzaGFrZSByZWNlaXZlZCBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICBuU1RBTExfUkVDRUlWRURfSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBTRVRVUFBLVF9IICAweDggICAgICAgIC8qIHNlbmQgU2V0dXAgdG9rZW4gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgblNFVFVQUEtUX0ggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRVJST1JfSCAgMHgxMCAgICAgICAvKiB0aW1lb3V0IGVycm9yIGluZGljYXRvciBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRVJST1JfSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFJFUVBLVF9IICAweDIwICAgICAgIC8qIFJlcXVlc3QgYW4gSU4gdHJhbnNhY3Rpb24gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUkVRUEtUX0ggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBTVEFUVVNQS1RfSCAgMHg0MCAgICAgICAvKiBTdGF0dXMgc3RhZ2UgdHJhbnNhY3Rpb24gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICBuU1RBVFVTUEtUX0ggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgTkFLX1RJTUVPVVRfSCAgMHg4MCAgICAgICAvKiBFUDAgaGFsdGVkIGFmdGVyIGEgTkFLIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgIG5OQUtfVElNRU9VVF9IICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0NPVU5UMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICBFUDBfUlhfQ09VTlQgIDB4N2YgICAgICAgLyogbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzIGluIEVQMCBGSUZPICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX05BS0xJTUlUMCAqLworCisjZGVmaW5lICAgICAgICAgICAgIEVQMF9OQUtfTElNSVQgIDB4MWYgICAgICAgLyogbnVtYmVyIG9mIGZyYW1lcy9taWNybyBmcmFtZXMgYWZ0ZXIgd2hpY2ggRVAwIHRpbWVvdXRzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYX01BWF9QQUNLRVQgKi8KKworI2RlZmluZSAgICAgICAgIE1BWF9QQUNLRVRfU0laRV9UICAweDdmZiAgICAgIC8qIG1heGltdW0gZGF0YSBwYXkgbG9hZCBpbiBhIGZyYW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYX01BWF9QQUNLRVQgKi8KKworI2RlZmluZSAgICAgICAgIE1BWF9QQUNLRVRfU0laRV9SICAweDdmZiAgICAgIC8qIG1heGltdW0gZGF0YSBwYXkgbG9hZCBpbiBhIGZyYW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYQ1NSICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgVFhQS1RSRFlfVCAgMHgxICAgICAgICAvKiBkYXRhIHBhY2tldCBpbiBGSUZPIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5UWFBLVFJEWV9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIEZJRk9fTk9UX0VNUFRZX1QgIDB4MiAgICAgICAgLyogRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICBuRklGT19OT1RfRU1QVFlfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBVTkRFUlJVTl9UICAweDQgICAgICAgIC8qIFR4UGt0UmR5IG5vdCBzZXQgIGZvciBhbiBJTiB0b2tlbiAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5VTkRFUlJVTl9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgRkxVU0hGSUZPX1QgIDB4OCAgICAgICAgLyogZmx1c2ggZW5kcG9pbnQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgbkZMVVNIRklGT19UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5EX1QgIDB4MTAgICAgICAgLyogaXNzdWUgYSBTdGFsbCBoYW5kc2hha2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblNUQUxMX1NFTkRfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VOVF9UICAweDIwICAgICAgIC8qIFN0YWxsIGhhbmRzaGFrZSB0cmFuc21pdHRlZCAqLworI2RlZmluZSAgICAgICAgICAgICBuU1RBTExfU0VOVF9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBDTEVBUl9EQVRBVE9HR0xFX1QgIDB4NDAgICAgICAgLyogY2xlYXIgZW5kcG9pbnQgZGF0YSB0b2dnbGUgKi8KKyNkZWZpbmUgICAgICAgbkNMRUFSX0RBVEFUT0dHTEVfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJTkNPTVBUWF9UICAweDgwICAgICAgIC8qIGluZGljYXRlcyB0aGF0IGEgbGFyZ2UgcGFja2V0IGlzIHNwbGl0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgbklOQ09NUFRYX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERNQVJFUU1PREVfVCAgMHg0MDAgICAgICAvKiBETUEgbW9kZSAoMCBvciAxKSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRNQVJFUU1PREVfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgRk9SQ0VfREFUQVRPR0dMRV9UICAweDgwMCAgICAgIC8qIEZvcmNlIGRhdGEgdG9nZ2xlICovCisjZGVmaW5lICAgICAgIG5GT1JDRV9EQVRBVE9HR0xFX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERNQVJFUV9FTkFfVCAgMHgxMDAwICAgICAvKiBFbmFibGUgRE1BIHJlcXVlc3QgZm9yIFR4IEVQICovCisjZGVmaW5lICAgICAgICAgICAgIG5ETUFSRVFfRU5BX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBJU09fVCAgMHg0MDAwICAgICAvKiBlbmFibGUgSXNvY2hyb25vdXMgdHJhbnNmZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuSVNPX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEFVVE9TRVRfVCAgMHg4MDAwICAgICAvKiBhbGxvd3MgVHhQa3RSZHkgdG8gYmUgc2V0IGF1dG9tYXRpY2FsbHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkFVVE9TRVRfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVSUk9SX1RIICAweDQgICAgICAgIC8qIGVycm9yIGNvbmRpdGlvbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUlJPUl9USCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIFNUQUxMX1JFQ0VJVkVEX1RIICAweDIwICAgICAgIC8qIFN0YWxsIGhhbmRzaGFrZSByZWNlaXZlZCBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgIG5TVEFMTF9SRUNFSVZFRF9USCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgIE5BS19USU1FT1VUX1RIICAweDgwICAgICAgIC8qIE5BSyB0aW1lb3V0IGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgbk5BS19USU1FT1VUX1RIICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYQ09VTlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFRYX0NPVU5UICAweDFmZmYgICAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBzZWxlY3RlZCBlbmRwb2ludCBUeCBGSUZPICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYQ1NSICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgUlhQS1RSRFlfUiAgMHgxICAgICAgICAvKiBkYXRhIHBhY2tldCBpbiBGSUZPIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5SWFBLVFJEWV9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgRklGT19GVUxMX1IgIDB4MiAgICAgICAgLyogRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5GSUZPX0ZVTExfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgT1ZFUlJVTl9SICAweDQgICAgICAgIC8qIFR4UGt0UmR5IG5vdCBzZXQgIGZvciBhbiBJTiB0b2tlbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuT1ZFUlJVTl9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgREFUQUVSUk9SX1IgIDB4OCAgICAgICAgLyogT3V0IHBhY2tldCBjYW5ub3QgYmUgbG9hZGVkIGludG8gUnggIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5EQVRBRVJST1JfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIEZMVVNIRklGT19SICAweDEwICAgICAgIC8qIGZsdXNoIGVuZHBvaW50IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5GTFVTSEZJRk9fUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VORF9SICAweDIwICAgICAgIC8qIGlzc3VlIGEgU3RhbGwgaGFuZHNoYWtlICovCisjZGVmaW5lICAgICAgICAgICAgIG5TVEFMTF9TRU5EX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFNUQUxMX1NFTlRfUiAgMHg0MCAgICAgICAvKiBTdGFsbCBoYW5kc2hha2UgdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblNUQUxMX1NFTlRfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgQ0xFQVJfREFUQVRPR0dMRV9SICAweDgwICAgICAgIC8qIGNsZWFyIGVuZHBvaW50IGRhdGEgdG9nZ2xlICovCisjZGVmaW5lICAgICAgIG5DTEVBUl9EQVRBVE9HR0xFX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgSU5DT01QUlhfUiAgMHgxMDAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCBhIGxhcmdlIHBhY2tldCBpcyBzcGxpdCAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5JTkNPTVBSWF9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBETUFSRVFNT0RFX1IgIDB4ODAwICAgICAgLyogRE1BIG1vZGUgKDAgb3IgMSkgc2VsZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgIG5ETUFSRVFNT0RFX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIERJU05ZRVRfUiAgMHgxMDAwICAgICAvKiBkaXNhYmxlIE55ZXQgaGFuZHNoYWtlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuRElTTllFVF9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBETUFSRVFfRU5BX1IgIDB4MjAwMCAgICAgLyogRW5hYmxlIERNQSByZXF1ZXN0IGZvciBUeCBFUCAqLworI2RlZmluZSAgICAgICAgICAgICBuRE1BUkVRX0VOQV9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSVNPX1IgIDB4NDAwMCAgICAgLyogZW5hYmxlIElzb2Nocm9ub3VzIHRyYW5zZmVycyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbklTT19SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgQVVUT0NMRUFSX1IgIDB4ODAwMCAgICAgLyogYWxsb3dzIFR4UGt0UmR5IHRvIGJlIHNldCBhdXRvbWF0aWNhbGx5ICovCisjZGVmaW5lICAgICAgICAgICAgICBuQVVUT0NMRUFSX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUlJPUl9SSCAgMHg0ICAgICAgICAvKiBUeFBrdFJkeSBub3Qgc2V0ICBmb3IgYW4gSU4gdG9rZW4gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVJST1JfUkggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFJFUVBLVF9SSCAgMHgyMCAgICAgICAvKiByZXF1ZXN0IGFuIElOIHRyYW5zYWN0aW9uIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuUkVRUEtUX1JIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgU1RBTExfUkVDRUlWRURfUkggIDB4NDAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHJlY2VpdmVkIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgblNUQUxMX1JFQ0VJVkVEX1JIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgSU5DT01QUlhfUkggIDB4MTAwICAgICAgLyogaW5kaWNhdGVzIHRoYXQgYSBsYXJnZSBwYWNrZXQgaXMgc3BsaXQgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICBuSU5DT01QUlhfUkggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgRE1BUkVRTU9ERV9SSCAgMHg4MDAgICAgICAvKiBETUEgbW9kZSAoMCBvciAxKSBzZWxlY3Rpb24gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgbkRNQVJFUU1PREVfUkggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgQVVUT1JFUV9SSCAgMHg0MDAwICAgICAvKiBzZXRzIFJlcVBrdCBhdXRvbWF0aWNhbGx5IGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5BVVRPUkVRX1JIICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYQ09VTlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFJYX0NPVU5UICAweDFmZmYgICAgIC8qIE51bWJlciBvZiByZWNlaXZlZCBieXRlcyBpbiB0aGUgcGFja2V0IGluIHRoZSBSeCBGSUZPICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1RYVFlQRSAqLworCisjZGVmaW5lICAgICAgICAgICAgVEFSR0VUX0VQX05PX1QgIDB4ZiAgICAgICAgLyogRVAgbnVtYmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFBST1RPQ09MX1QgIDB4YyAgICAgICAgLyogdHJhbnNmZXIgdHlwZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9UWElOVEVSVkFMICovCisKKyNkZWZpbmUgICAgICAgICAgVFhfUE9MTF9JTlRFUlZBTCAgMHhmZiAgICAgICAvKiBwb2xsaW5nIGludGVydmFsIGZvciBzZWxlY3RlZCBUeCBFUCAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9SWFRZUEUgKi8KKworI2RlZmluZSAgICAgICAgICAgIFRBUkdFVF9FUF9OT19SICAweGYgICAgICAgIC8qIEVQIG51bWJlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBQUk9UT0NPTF9SICAweGMgICAgICAgIC8qIHRyYW5zZmVyIHR5cGUgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfUlhJTlRFUlZBTCAqLworCisjZGVmaW5lICAgICAgICAgIFJYX1BPTExfSU5URVJWQUwgIDB4ZmYgICAgICAgLyogcG9sbGluZyBpbnRlcnZhbCBmb3Igc2VsZWN0ZWQgUnggRVAgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfRE1BX0lOVEVSUlVQVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BMF9JTlQgIDB4MSAgICAgICAgLyogRE1BMCBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTBfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BMV9JTlQgIDB4MiAgICAgICAgLyogRE1BMSBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTFfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BMl9JTlQgIDB4NCAgICAgICAgLyogRE1BMiBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTJfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BM19JTlQgIDB4OCAgICAgICAgLyogRE1BMyBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTNfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BNF9JTlQgIDB4MTAgICAgICAgLyogRE1BNCBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTRfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BNV9JTlQgIDB4MjAgICAgICAgLyogRE1BNSBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTVfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BNl9JTlQgIDB4NDAgICAgICAgLyogRE1BNiBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTZfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BN19JTlQgIDB4ODAgICAgICAgLyogRE1BNyBwZW5kaW5nIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQTdfSU5UICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhDT05UUk9MICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BX0VOQSAgMHgxICAgICAgICAvKiBETUEgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRNQV9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIERJUkVDVElPTiAgMHgyICAgICAgICAvKiBkaXJlY3Rpb24gb2YgRE1BIHRyYW5zZmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5ESVJFQ1RJT04gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTU9ERSAgMHg0ICAgICAgICAvKiBETUEgQnVzIGVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1PREUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSU5UX0VOQSAgMHg4ICAgICAgICAvKiBJbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbklOVF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUE5VTSAgMHhmMCAgICAgICAvKiBFUCBudW1iZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBCVVNFUlJPUiAgMHgxMDAgICAgICAvKiBETUEgQnVzIGVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQlVTRVJST1IgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeEFERFJISUdIICovCisKKyNkZWZpbmUgICAgICAgICAgICAgRE1BX0FERFJfSElHSCAgMHhmZmZmICAgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgdGhlIERNQSBtYXN0ZXIgY2hhbm5lbCAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4QUREUkxPVyAqLworCisjZGVmaW5lICAgICAgICAgICAgICBETUFfQUREUl9MT1cgIDB4ZmZmZiAgICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBETUEgbWFzdGVyIGNoYW5uZWwgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeENPVU5USElHSCAqLworCisjZGVmaW5lICAgICAgICAgICAgRE1BX0NPVU5UX0hJR0ggIDB4ZmZmZiAgICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhDT1VOVExPVyAqLworCisjZGVmaW5lICAgICAgICAgICAgIERNQV9DT1VOVF9MT1cgIDB4ZmZmZiAgICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsICovCisKKy8qIEJpdCBtYXNrcyBmb3IgSE1ETUF4X0NPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBITURNQUVOICAweDEgICAgICAgIC8qIEhhbmRzaGFrZSBNRE1BIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ITURNQUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBSRVAgIDB4MiAgICAgICAgLyogSGFuZHNoYWtlIE1ETUEgUmVxdWVzdCBQb2xhcml0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuUkVQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVVEUgIDB4OCAgICAgICAgLyogVXJnZW5jeSBUaHJlc2hvbGQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5VVEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE9JRSAgMHgxMCAgICAgICAvKiBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5PSUUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQkRJRSAgMHgyMCAgICAgICAvKiBCbG9jayBEb25lIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQkRJRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNQkRJICAweDQwICAgICAgIC8qIE1hc2sgQmxvY2sgRG9uZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUJESSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRFJRICAweDMwMCAgICAgIC8qIEhhbmRzaGFrZSBNRE1BIFJlcXVlc3QgVHlwZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUkJDICAweDEwMDAgICAgIC8qIEZvcmNlIFJlbG9hZCBvZiBCQ09VTlQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblJCQyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBTICAweDIwMDAgICAgIC8qIFBpbiBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIG5QUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9JICAweDQwMDAgICAgIC8qIE92ZXJmbG93IEludGVycnVwdCBHZW5lcmF0ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIG5PSSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQkRJICAweDgwMDAgICAgIC8qIEJsb2NrIERvbmUgSW50ZXJydXB0IEdlbmVyYXRlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQkRJICAweDAgICAgICAgCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qICAgICBNVUxUSSBCSVQgTUFDUk8gRU5VTUVSQVRJT05TICAgICAgICAgICAgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCisjZW5kaWYgLyogX0RFRl9CRjU0OF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ5LmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjYzFjMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDkuaApAQCAtMCwwICsxLDM0NzIgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDkuaAorICogQmFzZWQgb246CisgKiBBdXRob3I6CisgKgorICogQ3JlYXRlZDoKKyAqIERlc2NyaXB0aW9uOgorICoKKyAqIFJldjoKKyAqCisgKiBNb2RpZmllZDoKKyAqCisgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9ERUZfQkY1NDlfSAorI2RlZmluZSBfREVGX0JGNTQ5X0gKKworLyogSW5jbHVkZSBhbGwgQ29yZSByZWdpc3RlcnMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgPGFzbS9tYWNoLWNvbW1vbi9kZWZfTFBCbGFja2Zpbi5oPgorCisKKy8qIFNZU1RFTSAmIE1NUiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTQ5ICovCisKKy8qIEluY2x1ZGUgZGVmQkY1NHhfYmFzZS5oIGZvciB0aGUgc2V0IG9mICNkZWZpbmVzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgQURTUC1CRjU0eCBwcm9jZXNzb3JzICovCisjaW5jbHVkZSAiZGVmQkY1NHhfYmFzZS5oIgorCisvKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgI2RlZmluZXMgbmVlZGVkIGJ5IEFEU1AtQkY1NDkgdGhhdCBhcmUgbm90IGluIHRoZSBjb21tb24gaGVhZGVyICovCisKKy8qIFRpbWVyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjhfQ09ORklHICAweGZmYzAwNjAwICAgLyogVGltZXIgOCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSOF9DT1VOVEVSICAweGZmYzAwNjA0ICAgLyogVGltZXIgOCBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjhfUEVSSU9EICAweGZmYzAwNjA4ICAgLyogVGltZXIgOCBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUSU1FUjhfV0lEVEggIDB4ZmZjMDA2MGMgICAvKiBUaW1lciA4IFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjlfQ09ORklHICAweGZmYzAwNjEwICAgLyogVGltZXIgOSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSOV9DT1VOVEVSICAweGZmYzAwNjE0ICAgLyogVGltZXIgOSBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjlfUEVSSU9EICAweGZmYzAwNjE4ICAgLyogVGltZXIgOSBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUSU1FUjlfV0lEVEggIDB4ZmZjMDA2MWMgICAvKiBUaW1lciA5IFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSMTBfQ09ORklHICAweGZmYzAwNjIwICAgLyogVGltZXIgMTAgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFRJTUVSMTBfQ09VTlRFUiAgMHhmZmMwMDYyNCAgIC8qIFRpbWVyIDEwIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVIxMF9QRVJJT0QgIDB4ZmZjMDA2MjggICAvKiBUaW1lciAxMCBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSMTBfV0lEVEggIDB4ZmZjMDA2MmMgICAvKiBUaW1lciAxMCBXaWR0aCBSZWdpc3RlciAqLworCisvKiBUaW1lciBHcm91cCBvZiAzIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUl9FTkFCTEUxICAweGZmYzAwNjQwICAgLyogVGltZXIgR3JvdXAgb2YgMyBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRVJfRElTQUJMRTEgIDB4ZmZjMDA2NDQgICAvKiBUaW1lciBHcm91cCBvZiAzIERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVSX1NUQVRVUzEgIDB4ZmZjMDA2NDggICAvKiBUaW1lciBHcm91cCBvZiAzIFN0YXR1cyBSZWdpc3RlciAqLworCisvKiBTUE9SVDAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX1RDUjEgIDB4ZmZjMDA4MDAgICAvKiBTUE9SVDAgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9UQ1IyICAweGZmYzAwODA0ICAgLyogU1BPUlQwIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTUE9SVDBfVENMS0RJViAgMHhmZmMwMDgwOCAgIC8qIFNQT1JUMCBUcmFuc21pdCBTZXJpYWwgQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU1BPUlQwX1RGU0RJViAgMHhmZmMwMDgwYyAgIC8qIFNQT1JUMCBUcmFuc21pdCBGcmFtZSBTeW5jIERpdmlkZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfVFggIDB4ZmZjMDA4MTAgICAvKiBTUE9SVDAgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9SWCAgMHhmZmMwMDgxOCAgIC8qIFNQT1JUMCBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX1JDUjEgIDB4ZmZjMDA4MjAgICAvKiBTUE9SVDAgUmVjZWl2ZSBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX1JDUjIgIDB4ZmZjMDA4MjQgICAvKiBTUE9SVDAgUmVjZWl2ZSBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU1BPUlQwX1JDTEtESVYgIDB4ZmZjMDA4MjggICAvKiBTUE9SVDAgUmVjZWl2ZSBTZXJpYWwgQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU1BPUlQwX1JGU0RJViAgMHhmZmMwMDgyYyAgIC8qIFNQT1JUMCBSZWNlaXZlIEZyYW1lIFN5bmMgRGl2aWRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfU1RBVCAgMHhmZmMwMDgzMCAgIC8qIFNQT1JUMCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX0NITkwgIDB4ZmZjMDA4MzQgICAvKiBTUE9SVDAgQ3VycmVudCBDaGFubmVsIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX01DTUMxICAweGZmYzAwODM4ICAgLyogU1BPUlQwIE11bHRpIGNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX01DTUMyICAweGZmYzAwODNjICAgLyogU1BPUlQwIE11bHRpIGNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX01UQ1MwICAweGZmYzAwODQwICAgLyogU1BPUlQwIE11bHRpIGNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVRDUzEgIDB4ZmZjMDA4NDQgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9NVENTMiAgMHhmZmMwMDg0OCAgIC8qIFNQT1JUMCBNdWx0aSBjaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX01UQ1MzICAweGZmYzAwODRjICAgLyogU1BPUlQwIE11bHRpIGNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVJDUzAgIDB4ZmZjMDA4NTAgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQwX01SQ1MxICAweGZmYzAwODU0ICAgLyogU1BPUlQwIE11bHRpIGNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMF9NUkNTMiAgMHhmZmMwMDg1OCAgIC8qIFNQT1JUMCBNdWx0aSBjaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDBfTVJDUzMgIDB4ZmZjMDA4NWMgICAvKiBTUE9SVDAgTXVsdGkgY2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAzICovCisKKy8qIEVQUEkwIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfU1RBVFVTICAweGZmYzAxMDAwICAgLyogRVBQSTAgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTBfSENPVU5UICAweGZmYzAxMDA0ICAgLyogRVBQSTAgSG9yaXpvbnRhbCBUcmFuc2ZlciBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkwX0hERUxBWSAgMHhmZmMwMTAwOCAgIC8qIEVQUEkwIEhvcml6b250YWwgRGVsYXkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMF9WQ09VTlQgIDB4ZmZjMDEwMGMgICAvKiBFUFBJMCBWZXJ0aWNhbCBUcmFuc2ZlciBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkwX1ZERUxBWSAgMHhmZmMwMTAxMCAgIC8qIEVQUEkwIFZlcnRpY2FsIERlbGF5IENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVQUEkwX0ZSQU1FICAweGZmYzAxMDE0ICAgLyogRVBQSTAgTGluZXMgcGVyIEZyYW1lIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBFUFBJMF9MSU5FICAweGZmYzAxMDE4ICAgLyogRVBQSTAgU2FtcGxlcyBwZXIgTGluZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkwX0NMS0RJViAgMHhmZmMwMTAxYyAgIC8qIEVQUEkwIENsb2NrIERpdmlkZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVBQSTBfQ09OVFJPTCAgMHhmZmMwMTAyMCAgIC8qIEVQUEkwIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRVBQSTBfRlMxV19IQkwgIDB4ZmZjMDEwMjQgICAvKiBFUFBJMCBGUzEgV2lkdGggUmVnaXN0ZXIgLyBFUFBJMCBIb3Jpem9udGFsIEJsYW5raW5nIFNhbXBsZXMgUGVyIExpbmUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUFBJMF9GUzFQX0FWUEwgIDB4ZmZjMDEwMjggICAvKiBFUFBJMCBGUzEgUGVyaW9kIFJlZ2lzdGVyIC8gRVBQSTAgQWN0aXZlIFZpZGVvIFNhbXBsZXMgUGVyIExpbmUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRVBQSTBfRlMyV19MVkIgIDB4ZmZjMDEwMmMgICAvKiBFUFBJMCBGUzIgV2lkdGggUmVnaXN0ZXIgLyBFUFBJMCBMaW5lcyBvZiBWZXJ0aWNhbCBCbGFua2luZyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQUEkwX0ZTMlBfTEFWRiAgMHhmZmMwMTAzMCAgIC8qIEVQUEkwIEZTMiBQZXJpb2QgUmVnaXN0ZXIvIEVQUEkwIExpbmVzIG9mIEFjdGl2ZSBWaWRlbyBQZXIgRmllbGQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEVQUEkwX0NMSVAgIDB4ZmZjMDEwMzQgICAvKiBFUFBJMCBDbGlwcGluZyBSZWdpc3RlciAqLworCisvKiBVQVJUMiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQyX0RMTCAgMHhmZmMwMjEwMCAgIC8qIERpdmlzb3IgTGF0Y2ggTG93IEJ5dGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMl9ETEggIDB4ZmZjMDIxMDQgICAvKiBEaXZpc29yIExhdGNoIEhpZ2ggQnl0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfR0NUTCAgMHhmZmMwMjEwOCAgIC8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfTENSICAweGZmYzAyMTBjICAgLyogTGluZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfTUNSICAweGZmYzAyMTEwICAgLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQyX0xTUiAgMHhmZmMwMjExNCAgIC8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfTVNSICAweGZmYzAyMTE4ICAgLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDJfU0NSICAweGZmYzAyMTFjICAgLyogU2NyYXRjaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVUFSVDJfSUVSX1NFVCAgMHhmZmMwMjEyMCAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVUFSVDJfSUVSX0NMRUFSICAweGZmYzAyMTI0ICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBDbGVhciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQyX1JCUiAgMHhmZmMwMjEyYyAgIC8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyICovCisKKy8qIFR3byBXaXJlIEludGVyZmFjZSBSZWdpc3RlcnMgKFRXSTEpICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFdJMV9DTEtESVYgIDB4ZmZjMDIyMDAgICAvKiBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFdJMV9DT05UUk9MICAweGZmYzAyMjA0ICAgLyogVFdJIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kxX1NMQVZFX0NUUkwgIDB4ZmZjMDIyMDggICAvKiBUV0kgU2xhdmUgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMV9TTEFWRV9TVEFUICAweGZmYzAyMjBjICAgLyogVFdJIFNsYXZlIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMV9TTEFWRV9BRERSICAweGZmYzAyMjEwICAgLyogVFdJIFNsYXZlIE1vZGUgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVFdJMV9NQVNURVJfQ1RSTCAgMHhmZmMwMjIxNCAgIC8qIFRXSSBNYXN0ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBUV0kxX01BU1RFUl9TVEFUICAweGZmYzAyMjE4ICAgLyogVFdJIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVFdJMV9NQVNURVJfQUREUiAgMHhmZmMwMjIxYyAgIC8qIFRXSSBNYXN0ZXIgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUV0kxX0lOVF9TVEFUICAweGZmYzAyMjIwICAgLyogVFdJIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRXSTFfSU5UX01BU0sgIDB4ZmZjMDIyMjQgICAvKiBUV0kgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMV9GSUZPX0NUUkwgIDB4ZmZjMDIyMjggICAvKiBUV0kgRklGTyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRXSTFfRklGT19TVEFUICAweGZmYzAyMjJjICAgLyogVFdJIEZJRk8gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRXSTFfWE1UX0RBVEE4ICAweGZmYzAyMjgwICAgLyogVFdJIEZJRk8gVHJhbnNtaXQgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfWE1UX0RBVEExNiAgMHhmZmMwMjI4NCAgIC8qIFRXSSBGSUZPIFRyYW5zbWl0IERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMV9SQ1ZfREFUQTggIDB4ZmZjMDIyODggICAvKiBUV0kgRklGTyBSZWNlaXZlIERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kxX1JDVl9EQVRBMTYgIDB4ZmZjMDIyOGMgICAvKiBUV0kgRklGTyBSZWNlaXZlIERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIgKi8KKworLyogU1BJMiAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU1BJMl9DVEwgIDB4ZmZjMDI0MDAgICAvKiBTUEkyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU1BJMl9GTEcgIDB4ZmZjMDI0MDQgICAvKiBTUEkyIEZsYWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTUEkyX1NUQVQgIDB4ZmZjMDI0MDggICAvKiBTUEkyIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQSTJfVERCUiAgMHhmZmMwMjQwYyAgIC8qIFNQSTIgVHJhbnNtaXQgRGF0YSBCdWZmZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTUEkyX1JEQlIgIDB4ZmZjMDI0MTAgICAvKiBTUEkyIFJlY2VpdmUgRGF0YSBCdWZmZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTUEkyX0JBVUQgIDB4ZmZjMDI0MTQgICAvKiBTUEkyIEJhdWQgUmF0ZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUEkyX1NIQURPVyAgMHhmZmMwMjQxOCAgIC8qIFNQSTIgUmVjZWl2ZSBEYXRhIEJ1ZmZlciBTaGFkb3cgUmVnaXN0ZXIgKi8KKworLyogTVhWUiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNWFZSX0NPTkZJRyAgMHhmZmMwMjcwMCAgIC8qIE1YVlIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1YVlJfU1RBVEVfMCAgMHhmZmMwMjcwOCAgIC8qIE1YVlIgU3RhdGUgUmVnaXN0ZXIgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1YVlJfU1RBVEVfMSAgMHhmZmMwMjcwYyAgIC8qIE1YVlIgU3RhdGUgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1YVlJfSU5UX1NUQVRfMCAgMHhmZmMwMjcxMCAgIC8qIE1YVlIgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhWUl9JTlRfU1RBVF8xICAweGZmYzAyNzE0ICAgLyogTVhWUiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1YVlJfSU5UX0VOXzAgIDB4ZmZjMDI3MTggICAvKiBNWFZSIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTVhWUl9JTlRfRU5fMSAgMHhmZmMwMjcxYyAgIC8qIE1YVlIgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNWFZSX1BPU0lUSU9OICAweGZmYzAyNzIwICAgLyogTVhWUiBOb2RlIFBvc2l0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIE1YVlJfTUFYX1BPU0lUSU9OICAweGZmYzAyNzI0ICAgLyogTVhWUiBNYXhpbXVtIE5vZGUgUG9zaXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1YVlJfREVMQVkgIDB4ZmZjMDI3MjggICAvKiBNWFZSIE5vZGUgRnJhbWUgRGVsYXkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTVhWUl9NQVhfREVMQVkgIDB4ZmZjMDI3MmMgICAvKiBNWFZSIE1heGltdW0gTm9kZSBGcmFtZSBEZWxheSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTVhWUl9MQUREUiAgMHhmZmMwMjczMCAgIC8qIE1YVlIgTG9naWNhbCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBNWFZSX0dBRERSICAweGZmYzAyNzM0ICAgLyogTVhWUiBHcm91cCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBNWFZSX0FBRERSICAweGZmYzAyNzM4ICAgLyogTVhWUiBBbHRlcm5hdGUgQWRkcmVzcyBSZWdpc3RlciAqLworCisvKiBNWFZSIEFsbG9jYXRpb24gVGFibGUgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBNWFZSX0FMTE9DXzAgIDB4ZmZjMDI3M2MgICAvKiBNWFZSIEFsbG9jYXRpb24gVGFibGUgUmVnaXN0ZXIgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1YVlJfQUxMT0NfMSAgMHhmZmMwMjc0MCAgIC8qIE1YVlIgQWxsb2NhdGlvbiBUYWJsZSBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTVhWUl9BTExPQ18yICAweGZmYzAyNzQ0ICAgLyogTVhWUiBBbGxvY2F0aW9uIFRhYmxlIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBNWFZSX0FMTE9DXzMgIDB4ZmZjMDI3NDggICAvKiBNWFZSIEFsbG9jYXRpb24gVGFibGUgUmVnaXN0ZXIgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1YVlJfQUxMT0NfNCAgMHhmZmMwMjc0YyAgIC8qIE1YVlIgQWxsb2NhdGlvbiBUYWJsZSBSZWdpc3RlciA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTVhWUl9BTExPQ181ICAweGZmYzAyNzUwICAgLyogTVhWUiBBbGxvY2F0aW9uIFRhYmxlIFJlZ2lzdGVyIDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBNWFZSX0FMTE9DXzYgIDB4ZmZjMDI3NTQgICAvKiBNWFZSIEFsbG9jYXRpb24gVGFibGUgUmVnaXN0ZXIgNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1YVlJfQUxMT0NfNyAgMHhmZmMwMjc1OCAgIC8qIE1YVlIgQWxsb2NhdGlvbiBUYWJsZSBSZWdpc3RlciA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTVhWUl9BTExPQ184ICAweGZmYzAyNzVjICAgLyogTVhWUiBBbGxvY2F0aW9uIFRhYmxlIFJlZ2lzdGVyIDggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBNWFZSX0FMTE9DXzkgIDB4ZmZjMDI3NjAgICAvKiBNWFZSIEFsbG9jYXRpb24gVGFibGUgUmVnaXN0ZXIgOSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTVhWUl9BTExPQ18xMCAgMHhmZmMwMjc2NCAgIC8qIE1YVlIgQWxsb2NhdGlvbiBUYWJsZSBSZWdpc3RlciAxMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTVhWUl9BTExPQ18xMSAgMHhmZmMwMjc2OCAgIC8qIE1YVlIgQWxsb2NhdGlvbiBUYWJsZSBSZWdpc3RlciAxMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTVhWUl9BTExPQ18xMiAgMHhmZmMwMjc2YyAgIC8qIE1YVlIgQWxsb2NhdGlvbiBUYWJsZSBSZWdpc3RlciAxMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTVhWUl9BTExPQ18xMyAgMHhmZmMwMjc3MCAgIC8qIE1YVlIgQWxsb2NhdGlvbiBUYWJsZSBSZWdpc3RlciAxMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTVhWUl9BTExPQ18xNCAgMHhmZmMwMjc3NCAgIC8qIE1YVlIgQWxsb2NhdGlvbiBUYWJsZSBSZWdpc3RlciAxNCAqLworCisvKiBNWFZSIENoYW5uZWwgQXNzaWduIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIE1YVlJfU1lOQ19MQ0hBTl8wICAweGZmYzAyNzc4ICAgLyogTVhWUiBTeW5jIERhdGEgTG9naWNhbCBDaGFubmVsIEFzc2lnbiBSZWdpc3RlciAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgIE1YVlJfU1lOQ19MQ0hBTl8xICAweGZmYzAyNzdjICAgLyogTVhWUiBTeW5jIERhdGEgTG9naWNhbCBDaGFubmVsIEFzc2lnbiBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIE1YVlJfU1lOQ19MQ0hBTl8yICAweGZmYzAyNzgwICAgLyogTVhWUiBTeW5jIERhdGEgTG9naWNhbCBDaGFubmVsIEFzc2lnbiBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIE1YVlJfU1lOQ19MQ0hBTl8zICAweGZmYzAyNzg0ICAgLyogTVhWUiBTeW5jIERhdGEgTG9naWNhbCBDaGFubmVsIEFzc2lnbiBSZWdpc3RlciAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIE1YVlJfU1lOQ19MQ0hBTl80ICAweGZmYzAyNzg4ICAgLyogTVhWUiBTeW5jIERhdGEgTG9naWNhbCBDaGFubmVsIEFzc2lnbiBSZWdpc3RlciA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIE1YVlJfU1lOQ19MQ0hBTl81ICAweGZmYzAyNzhjICAgLyogTVhWUiBTeW5jIERhdGEgTG9naWNhbCBDaGFubmVsIEFzc2lnbiBSZWdpc3RlciA1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIE1YVlJfU1lOQ19MQ0hBTl82ICAweGZmYzAyNzkwICAgLyogTVhWUiBTeW5jIERhdGEgTG9naWNhbCBDaGFubmVsIEFzc2lnbiBSZWdpc3RlciA2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIE1YVlJfU1lOQ19MQ0hBTl83ICAweGZmYzAyNzk0ICAgLyogTVhWUiBTeW5jIERhdGEgTG9naWNhbCBDaGFubmVsIEFzc2lnbiBSZWdpc3RlciA3ICovCisKKy8qIE1YVlIgRE1BMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgTVhWUl9ETUEwX0NPTkZJRyAgMHhmZmMwMjc5OCAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTAgQ29uZmlnIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgIE1YVlJfRE1BMF9TVEFSVF9BRERSICAweGZmYzAyNzljICAgLyogTVhWUiBTeW5jIERhdGEgRE1BMCBTdGFydCBBZGRyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhWUl9ETUEwX0NPVU5UICAweGZmYzAyN2EwICAgLyogTVhWUiBTeW5jIERhdGEgRE1BMCBMb29wIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBNWFZSX0RNQTBfQ1VSUl9BRERSICAweGZmYzAyN2E0ICAgLyogTVhWUiBTeW5jIERhdGEgRE1BMCBDdXJyZW50IEFkZHJlc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTVhWUl9ETUEwX0NVUlJfQ09VTlQgIDB4ZmZjMDI3YTggICAvKiBNWFZSIFN5bmMgRGF0YSBETUEwIEN1cnJlbnQgTG9vcCBDb3VudCAqLworCisvKiBNWFZSIERNQTEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1YVlJfRE1BMV9DT05GSUcgIDB4ZmZjMDI3YWMgICAvKiBNWFZSIFN5bmMgRGF0YSBETUExIENvbmZpZyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICBNWFZSX0RNQTFfU1RBUlRfQUREUiAgMHhmZmMwMjdiMCAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTEgU3RhcnQgQWRkcmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1YVlJfRE1BMV9DT1VOVCAgMHhmZmMwMjdiNCAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTEgTG9vcCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgTVhWUl9ETUExX0NVUlJfQUREUiAgMHhmZmMwMjdiOCAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTEgQ3VycmVudCBBZGRyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgIE1YVlJfRE1BMV9DVVJSX0NPVU5UICAweGZmYzAyN2JjICAgLyogTVhWUiBTeW5jIERhdGEgRE1BMSBDdXJyZW50IExvb3AgQ291bnQgKi8KKworLyogTVhWUiBETUEyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBNWFZSX0RNQTJfQ09ORklHICAweGZmYzAyN2MwICAgLyogTVhWUiBTeW5jIERhdGEgRE1BMiBDb25maWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTVhWUl9ETUEyX1NUQVJUX0FERFIgIDB4ZmZjMDI3YzQgICAvKiBNWFZSIFN5bmMgRGF0YSBETUEyIFN0YXJ0IEFkZHJlc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNWFZSX0RNQTJfQ09VTlQgIDB4ZmZjMDI3YzggICAvKiBNWFZSIFN5bmMgRGF0YSBETUEyIExvb3AgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIE1YVlJfRE1BMl9DVVJSX0FERFIgIDB4ZmZjMDI3Y2MgICAvKiBNWFZSIFN5bmMgRGF0YSBETUEyIEN1cnJlbnQgQWRkcmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICBNWFZSX0RNQTJfQ1VSUl9DT1VOVCAgMHhmZmMwMjdkMCAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTIgQ3VycmVudCBMb29wIENvdW50ICovCisKKy8qIE1YVlIgRE1BMyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgTVhWUl9ETUEzX0NPTkZJRyAgMHhmZmMwMjdkNCAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTMgQ29uZmlnIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgIE1YVlJfRE1BM19TVEFSVF9BRERSICAweGZmYzAyN2Q4ICAgLyogTVhWUiBTeW5jIERhdGEgRE1BMyBTdGFydCBBZGRyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhWUl9ETUEzX0NPVU5UICAweGZmYzAyN2RjICAgLyogTVhWUiBTeW5jIERhdGEgRE1BMyBMb29wIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBNWFZSX0RNQTNfQ1VSUl9BRERSICAweGZmYzAyN2UwICAgLyogTVhWUiBTeW5jIERhdGEgRE1BMyBDdXJyZW50IEFkZHJlc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTVhWUl9ETUEzX0NVUlJfQ09VTlQgIDB4ZmZjMDI3ZTQgICAvKiBNWFZSIFN5bmMgRGF0YSBETUEzIEN1cnJlbnQgTG9vcCBDb3VudCAqLworCisvKiBNWFZSIERNQTQgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1YVlJfRE1BNF9DT05GSUcgIDB4ZmZjMDI3ZTggICAvKiBNWFZSIFN5bmMgRGF0YSBETUE0IENvbmZpZyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICBNWFZSX0RNQTRfU1RBUlRfQUREUiAgMHhmZmMwMjdlYyAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTQgU3RhcnQgQWRkcmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1YVlJfRE1BNF9DT1VOVCAgMHhmZmMwMjdmMCAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTQgTG9vcCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgTVhWUl9ETUE0X0NVUlJfQUREUiAgMHhmZmMwMjdmNCAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTQgQ3VycmVudCBBZGRyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgIE1YVlJfRE1BNF9DVVJSX0NPVU5UICAweGZmYzAyN2Y4ICAgLyogTVhWUiBTeW5jIERhdGEgRE1BNCBDdXJyZW50IExvb3AgQ291bnQgKi8KKworLyogTVhWUiBETUE1IFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBNWFZSX0RNQTVfQ09ORklHICAweGZmYzAyN2ZjICAgLyogTVhWUiBTeW5jIERhdGEgRE1BNSBDb25maWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTVhWUl9ETUE1X1NUQVJUX0FERFIgIDB4ZmZjMDI4MDAgICAvKiBNWFZSIFN5bmMgRGF0YSBETUE1IFN0YXJ0IEFkZHJlc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNWFZSX0RNQTVfQ09VTlQgIDB4ZmZjMDI4MDQgICAvKiBNWFZSIFN5bmMgRGF0YSBETUE1IExvb3AgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIE1YVlJfRE1BNV9DVVJSX0FERFIgIDB4ZmZjMDI4MDggICAvKiBNWFZSIFN5bmMgRGF0YSBETUE1IEN1cnJlbnQgQWRkcmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICBNWFZSX0RNQTVfQ1VSUl9DT1VOVCAgMHhmZmMwMjgwYyAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTUgQ3VycmVudCBMb29wIENvdW50ICovCisKKy8qIE1YVlIgRE1BNiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgTVhWUl9ETUE2X0NPTkZJRyAgMHhmZmMwMjgxMCAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTYgQ29uZmlnIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgIE1YVlJfRE1BNl9TVEFSVF9BRERSICAweGZmYzAyODE0ICAgLyogTVhWUiBTeW5jIERhdGEgRE1BNiBTdGFydCBBZGRyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhWUl9ETUE2X0NPVU5UICAweGZmYzAyODE4ICAgLyogTVhWUiBTeW5jIERhdGEgRE1BNiBMb29wIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBNWFZSX0RNQTZfQ1VSUl9BRERSICAweGZmYzAyODFjICAgLyogTVhWUiBTeW5jIERhdGEgRE1BNiBDdXJyZW50IEFkZHJlc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTVhWUl9ETUE2X0NVUlJfQ09VTlQgIDB4ZmZjMDI4MjAgICAvKiBNWFZSIFN5bmMgRGF0YSBETUE2IEN1cnJlbnQgTG9vcCBDb3VudCAqLworCisvKiBNWFZSIERNQTcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1YVlJfRE1BN19DT05GSUcgIDB4ZmZjMDI4MjQgICAvKiBNWFZSIFN5bmMgRGF0YSBETUE3IENvbmZpZyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICBNWFZSX0RNQTdfU1RBUlRfQUREUiAgMHhmZmMwMjgyOCAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTcgU3RhcnQgQWRkcmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1YVlJfRE1BN19DT1VOVCAgMHhmZmMwMjgyYyAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTcgTG9vcCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgTVhWUl9ETUE3X0NVUlJfQUREUiAgMHhmZmMwMjgzMCAgIC8qIE1YVlIgU3luYyBEYXRhIERNQTcgQ3VycmVudCBBZGRyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgIE1YVlJfRE1BN19DVVJSX0NPVU5UICAweGZmYzAyODM0ICAgLyogTVhWUiBTeW5jIERhdGEgRE1BNyBDdXJyZW50IExvb3AgQ291bnQgKi8KKworLyogTVhWUiBBc3luY2ggUGFja2V0IFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1YVlJfQVBfQ1RMICAweGZmYzAyODM4ICAgLyogTVhWUiBBc3luYyBQYWNrZXQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICBNWFZSX0FQUkJfU1RBUlRfQUREUiAgMHhmZmMwMjgzYyAgIC8qIE1YVlIgQXN5bmMgUGFja2V0IFJYIEJ1ZmZlciBTdGFydCBBZGRyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBNWFZSX0FQUkJfQ1VSUl9BRERSICAweGZmYzAyODQwICAgLyogTVhWUiBBc3luYyBQYWNrZXQgUlggQnVmZmVyIEN1cnJlbnQgQWRkciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICBNWFZSX0FQVEJfU1RBUlRfQUREUiAgMHhmZmMwMjg0NCAgIC8qIE1YVlIgQXN5bmMgUGFja2V0IFRYIEJ1ZmZlciBTdGFydCBBZGRyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBNWFZSX0FQVEJfQ1VSUl9BRERSICAweGZmYzAyODQ4ICAgLyogTVhWUiBBc3luYyBQYWNrZXQgVFggQnVmZmVyIEN1cnJlbnQgQWRkciBSZWdpc3RlciAqLworCisvKiBNWFZSIENvbnRyb2wgTWVzc2FnZSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNWFZSX0NNX0NUTCAgMHhmZmMwMjg0YyAgIC8qIE1YVlIgQ29udHJvbCBNZXNzYWdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTVhWUl9DTVJCX1NUQVJUX0FERFIgIDB4ZmZjMDI4NTAgICAvKiBNWFZSIENvbnRyb2wgTWVzc2FnZSBSWCBCdWZmZXIgU3RhcnQgQWRkciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgTVhWUl9DTVJCX0NVUlJfQUREUiAgMHhmZmMwMjg1NCAgIC8qIE1YVlIgQ29udHJvbCBNZXNzYWdlIFJYIEJ1ZmZlciBDdXJyZW50IEFkZHJlc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTVhWUl9DTVRCX1NUQVJUX0FERFIgIDB4ZmZjMDI4NTggICAvKiBNWFZSIENvbnRyb2wgTWVzc2FnZSBUWCBCdWZmZXIgU3RhcnQgQWRkciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgTVhWUl9DTVRCX0NVUlJfQUREUiAgMHhmZmMwMjg1YyAgIC8qIE1YVlIgQ29udHJvbCBNZXNzYWdlIFRYIEJ1ZmZlciBDdXJyZW50IEFkZHJlc3MgKi8KKworLyogTVhWUiBSZW1vdGUgUmVhZCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICBNWFZSX1JSREJfU1RBUlRfQUREUiAgMHhmZmMwMjg2MCAgIC8qIE1YVlIgUmVtb3RlIFJlYWQgQnVmZmVyIFN0YXJ0IEFkZHIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIE1YVlJfUlJEQl9DVVJSX0FERFIgIDB4ZmZjMDI4NjQgICAvKiBNWFZSIFJlbW90ZSBSZWFkIEJ1ZmZlciBDdXJyZW50IEFkZHIgUmVnaXN0ZXIgKi8KKworLyogTVhWUiBQYXR0ZXJuIERhdGEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNWFZSX1BBVF9EQVRBXzAgIDB4ZmZjMDI4NjggICAvKiBNWFZSIFBhdHRlcm4gRGF0YSBSZWdpc3RlciAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNWFZSX1BBVF9FTl8wICAweGZmYzAyODZjICAgLyogTVhWUiBQYXR0ZXJuIEVuYWJsZSBSZWdpc3RlciAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhWUl9QQVRfREFUQV8xICAweGZmYzAyODcwICAgLyogTVhWUiBQYXR0ZXJuIERhdGEgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTVhWUl9QQVRfRU5fMSAgMHhmZmMwMjg3NCAgIC8qIE1YVlIgUGF0dGVybiBFbmFibGUgUmVnaXN0ZXIgMSAqLworCisvKiBNWFZSIEZyYW1lIENvdW50ZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1YVlJfRlJBTUVfQ05UXzAgIDB4ZmZjMDI4NzggICAvKiBNWFZSIEZyYW1lIENvdW50ZXIgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVhWUl9GUkFNRV9DTlRfMSAgMHhmZmMwMjg3YyAgIC8qIE1YVlIgRnJhbWUgQ291bnRlciAxICovCisKKy8qIE1YVlIgUm91dGluZyBUYWJsZSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBNWFZSX1JPVVRJTkdfMCAgMHhmZmMwMjg4MCAgIC8qIE1YVlIgUm91dGluZyBUYWJsZSBSZWdpc3RlciAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1YVlJfUk9VVElOR18xICAweGZmYzAyODg0ICAgLyogTVhWUiBSb3V0aW5nIFRhYmxlIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTVhWUl9ST1VUSU5HXzIgIDB4ZmZjMDI4ODggICAvKiBNWFZSIFJvdXRpbmcgVGFibGUgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBNWFZSX1JPVVRJTkdfMyAgMHhmZmMwMjg4YyAgIC8qIE1YVlIgUm91dGluZyBUYWJsZSBSZWdpc3RlciAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1YVlJfUk9VVElOR180ICAweGZmYzAyODkwICAgLyogTVhWUiBSb3V0aW5nIFRhYmxlIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTVhWUl9ST1VUSU5HXzUgIDB4ZmZjMDI4OTQgICAvKiBNWFZSIFJvdXRpbmcgVGFibGUgUmVnaXN0ZXIgNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBNWFZSX1JPVVRJTkdfNiAgMHhmZmMwMjg5OCAgIC8qIE1YVlIgUm91dGluZyBUYWJsZSBSZWdpc3RlciA2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1YVlJfUk9VVElOR183ICAweGZmYzAyODljICAgLyogTVhWUiBSb3V0aW5nIFRhYmxlIFJlZ2lzdGVyIDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTVhWUl9ST1VUSU5HXzggIDB4ZmZjMDI4YTAgICAvKiBNWFZSIFJvdXRpbmcgVGFibGUgUmVnaXN0ZXIgOCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBNWFZSX1JPVVRJTkdfOSAgMHhmZmMwMjhhNCAgIC8qIE1YVlIgUm91dGluZyBUYWJsZSBSZWdpc3RlciA5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhWUl9ST1VUSU5HXzEwICAweGZmYzAyOGE4ICAgLyogTVhWUiBSb3V0aW5nIFRhYmxlIFJlZ2lzdGVyIDEwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhWUl9ST1VUSU5HXzExICAweGZmYzAyOGFjICAgLyogTVhWUiBSb3V0aW5nIFRhYmxlIFJlZ2lzdGVyIDExICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhWUl9ST1VUSU5HXzEyICAweGZmYzAyOGIwICAgLyogTVhWUiBSb3V0aW5nIFRhYmxlIFJlZ2lzdGVyIDEyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhWUl9ST1VUSU5HXzEzICAweGZmYzAyOGI0ICAgLyogTVhWUiBSb3V0aW5nIFRhYmxlIFJlZ2lzdGVyIDEzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhWUl9ST1VUSU5HXzE0ICAweGZmYzAyOGI4ICAgLyogTVhWUiBSb3V0aW5nIFRhYmxlIFJlZ2lzdGVyIDE0ICovCisKKy8qIE1YVlIgQ291bnRlci1DbG9jay1Db250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1YVlJfQkxPQ0tfQ05UICAweGZmYzAyOGMwICAgLyogTVhWUiBCbG9jayBDb3VudGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTVhWUl9DTEtfQ1RMICAweGZmYzAyOGQwICAgLyogTVhWUiBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhWUl9DRFJQTExfQ1RMICAweGZmYzAyOGQ0ICAgLyogTVhWUiBDbG9jay9EYXRhIFJlY292ZXJ5IFBMTCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1YVlJfRk1QTExfQ1RMICAweGZmYzAyOGQ4ICAgLyogTVhWUiBGcmVxdWVuY3kgTXVsdGlwbHkgUExMIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBNWFZSX1BJTl9DVEwgIDB4ZmZjMDI4ZGMgICAvKiBNWFZSIFBpbiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNWFZSX1NDTEtfQ05UICAweGZmYzAyOGUwICAgLyogTVhWUiBTeXN0ZW0gQ2xvY2sgQ291bnRlciBSZWdpc3RlciAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIENvbmZpZyAxIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUMxICAweGZmYzAzMjAwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01EMSAgMHhmZmMwMzIwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBEaXJlY3Rpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJTMSAgMHhmZmMwMzIwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBTZXQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJSMSAgMHhmZmMwMzIwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVEExICAweGZmYzAzMjEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBUcmFuc21pdCBBY2tub3dsZWRnZSBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQUExICAweGZmYzAzMjE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBBYm9ydCBBY2tub3dsZWRnZSBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STVAxICAweGZmYzAzMjE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STUwxICAweGZmYzAzMjFjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgTG9zdCBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUJUSUYxICAweGZmYzAzMjIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQlJJRjEgIDB4ZmZjMDMyMjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01CSU0xICAweGZmYzAzMjI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX1JGSDEgIDB4ZmZjMDMyMmMgICAvKiBDQU4gQ29udHJvbGxlciAxIFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9PUFNTMSAgMHhmZmMwMzIzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgT3ZlcndyaXRlIFByb3RlY3Rpb24gU2luZ2xlIFNob3QgVHJhbnNtaXQgUmVnaXN0ZXIgMSAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIENvbmZpZyAyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUMyICAweGZmYzAzMjQwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01EMiAgMHhmZmMwMzI0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCBEaXJlY3Rpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJTMiAgMHhmZmMwMzI0OCAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBTZXQgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVFJSMiAgMHhmZmMwMzI0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVEEyICAweGZmYzAzMjUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBUcmFuc21pdCBBY2tub3dsZWRnZSBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQUEyICAweGZmYzAzMjU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBBYm9ydCBBY2tub3dsZWRnZSBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STVAyICAweGZmYzAzMjU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9STUwyICAweGZmYzAzMjVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBSZWNlaXZlIE1lc3NhZ2UgTG9zdCBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENBTjFfTUJUSUYyICAweGZmYzAzMjYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQlJJRjIgIDB4ZmZjMDMyNjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01CSU0yICAweGZmYzAzMjY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX1JGSDIgIDB4ZmZjMDMyNmMgICAvKiBDQU4gQ29udHJvbGxlciAxIFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9PUFNTMiAgMHhmZmMwMzI3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgT3ZlcndyaXRlIFByb3RlY3Rpb24gU2luZ2xlIFNob3QgVHJhbnNtaXQgUmVnaXN0ZXIgMiAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIENsb2NrL0ludGVycnVwdC9Db3VudGVyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0NMT0NLICAweGZmYzAzMjgwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBDbG9jayBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDQU4xX1RJTUlORyAgMHhmZmMwMzI4NCAgIC8qIENBTiBDb250cm9sbGVyIDEgVGltaW5nIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0RFQlVHICAweGZmYzAzMjg4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBEZWJ1ZyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDQU4xX1NUQVRVUyAgMHhmZmMwMzI4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgR2xvYmFsIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0NFQyAgMHhmZmMwMzI5MCAgIC8qIENBTiBDb250cm9sbGVyIDEgRXJyb3IgQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0dJUyAgMHhmZmMwMzI5NCAgIC8qIENBTiBDb250cm9sbGVyIDEgR2xvYmFsIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9HSU0gIDB4ZmZjMDMyOTggICAvKiBDQU4gQ29udHJvbGxlciAxIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0dJRiAgMHhmZmMwMzI5YyAgIC8qIENBTiBDb250cm9sbGVyIDEgR2xvYmFsIEludGVycnVwdCBGbGFnIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0FOMV9DT05UUk9MICAweGZmYzAzMmEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYXN0ZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfSU5UUiAgMHhmZmMwMzJhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgSW50ZXJydXB0IFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4xX01CVEQgIDB4ZmZjMDMyYWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggVGVtcG9yYXJ5IERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9FV1IgIDB4ZmZjMDMyYjAgICAvKiBDQU4gQ29udHJvbGxlciAxIFByb2dyYW1tYWJsZSBXYXJuaW5nIExldmVsIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjFfRVNSICAweGZmYzAzMmI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVUNDTlQgIDB4ZmZjMDMyYzQgICAvKiBDQU4gQ29udHJvbGxlciAxIFVuaXZlcnNhbCBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9VQ1JDICAweGZmYzAzMmM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBVbml2ZXJzYWwgQ291bnRlciBGb3JjZSBSZWxvYWQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfVUNDTkYgIDB4ZmZjMDMyY2MgICAvKiBDQU4gQ29udHJvbGxlciAxIFVuaXZlcnNhbCBDb3VudGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKworLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEFjY2VwdGFuY2UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wMEwgIDB4ZmZjMDMzMDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAwSCAgMHhmZmMwMzMwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wMUwgIDB4ZmZjMDMzMDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAxSCAgMHhmZmMwMzMwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wMkwgIDB4ZmZjMDMzMTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAySCAgMHhmZmMwMzMxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wM0wgIDB4ZmZjMDMzMTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTAzSCAgMHhmZmMwMzMxYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wNEwgIDB4ZmZjMDMzMjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA0SCAgMHhmZmMwMzMyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wNUwgIDB4ZmZjMDMzMjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA1SCAgMHhmZmMwMzMyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wNkwgIDB4ZmZjMDMzMzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA2SCAgMHhmZmMwMzMzNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wN0wgIDB4ZmZjMDMzMzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggNyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA3SCAgMHhmZmMwMzMzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wOEwgIDB4ZmZjMDMzNDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggOCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA4SCAgMHhmZmMwMzM0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0wOUwgIDB4ZmZjMDMzNDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggOSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTA5SCAgMHhmZmMwMzM0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xMEwgIDB4ZmZjMDMzNTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xMEggIDB4ZmZjMDMzNTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTExTCAgMHhmZmMwMzM1OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTExSCAgMHhmZmMwMzM1YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTJMICAweGZmYzAzMzYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTJIICAweGZmYzAzMzY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xM0wgIDB4ZmZjMDMzNjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xM0ggIDB4ZmZjMDMzNmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE0TCAgMHhmZmMwMzM3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE0SCAgMHhmZmMwMzM3NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTVMICAweGZmYzAzMzc4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMTVIICAweGZmYzAzMzdjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKworLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IEFjY2VwdGFuY2UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xNkwgIDB4ZmZjMDMzODAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xNkggIDB4ZmZjMDMzODQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE3TCAgMHhmZmMwMzM4OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTE3SCAgMHhmZmMwMzM4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMThMICAweGZmYzAzMzkwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMThIICAweGZmYzAzMzk0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xOUwgIDB4ZmZjMDMzOTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0xOUggIDB4ZmZjMDMzOWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIwTCAgMHhmZmMwMzNhMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIwSCAgMHhmZmMwMzNhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjFMICAweGZmYzAzM2E4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjFIICAweGZmYzAzM2FjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yMkwgIDB4ZmZjMDMzYjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yMkggIDB4ZmZjMDMzYjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIzTCAgMHhmZmMwMzNiOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTIzSCAgMHhmZmMwMzNiYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjRMICAweGZmYzAzM2MwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjRIICAweGZmYzAzM2M0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yNUwgIDB4ZmZjMDMzYzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yNUggIDB4ZmZjMDMzY2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI2TCAgMHhmZmMwMzNkMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI2SCAgMHhmZmMwMzNkNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjdMICAweGZmYzAzM2Q4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMjdIICAweGZmYzAzM2RjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yOEwgIDB4ZmZjMDMzZTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0yOEggIDB4ZmZjMDMzZTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI5TCAgMHhmZmMwMzNlOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMV9BTTI5SCAgMHhmZmMwMzNlYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMzBMICAweGZmYzAzM2YwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4xX0FNMzBIICAweGZmYzAzM2Y0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0zMUwgIDB4ZmZjMDMzZjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjFfQU0zMUggIDB4ZmZjMDMzZmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggRGF0YSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMCAgMHhmZmMwMzQwMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMSAgMHhmZmMwMzQwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMiAgMHhmZmMwMzQwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMF9EQVRBMyAgMHhmZmMwMzQwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0xFTkdUSCAgMHhmZmMwMzQxMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAwX1RJTUVTVEFNUCAgMHhmZmMwMzQxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0lEMCAgMHhmZmMwMzQxOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAwX0lEMSAgMHhmZmMwMzQxYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAwIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMCAgMHhmZmMwMzQyMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMSAgMHhmZmMwMzQyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMiAgMHhmZmMwMzQyOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMV9EQVRBMyAgMHhmZmMwMzQyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0xFTkdUSCAgMHhmZmMwMzQzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAxX1RJTUVTVEFNUCAgMHhmZmMwMzQzNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0lEMCAgMHhmZmMwMzQzOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAxX0lEMSAgMHhmZmMwMzQzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMCAgMHhmZmMwMzQ0MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMSAgMHhmZmMwMzQ0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMiAgMHhmZmMwMzQ0OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwMl9EQVRBMyAgMHhmZmMwMzQ0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0xFTkdUSCAgMHhmZmMwMzQ1MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAyX1RJTUVTVEFNUCAgMHhmZmMwMzQ1NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0lEMCAgMHhmZmMwMzQ1OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAyX0lEMSAgMHhmZmMwMzQ1YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMCAgMHhmZmMwMzQ2MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMSAgMHhmZmMwMzQ2NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMiAgMHhmZmMwMzQ2OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwM19EQVRBMyAgMHhmZmMwMzQ2YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0xFTkdUSCAgMHhmZmMwMzQ3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjAzX1RJTUVTVEFNUCAgMHhmZmMwMzQ3NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0lEMCAgMHhmZmMwMzQ3OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjAzX0lEMSAgMHhmZmMwMzQ3YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMCAgMHhmZmMwMzQ4MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMSAgMHhmZmMwMzQ4NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMiAgMHhmZmMwMzQ4OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNF9EQVRBMyAgMHhmZmMwMzQ4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0xFTkdUSCAgMHhmZmMwMzQ5MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA0X1RJTUVTVEFNUCAgMHhmZmMwMzQ5NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0lEMCAgMHhmZmMwMzQ5OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA0X0lEMSAgMHhmZmMwMzQ5YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA0IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMCAgMHhmZmMwMzRhMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMSAgMHhmZmMwMzRhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMiAgMHhmZmMwMzRhOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNV9EQVRBMyAgMHhmZmMwMzRhYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0xFTkdUSCAgMHhmZmMwMzRiMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA1X1RJTUVTVEFNUCAgMHhmZmMwMzRiNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0lEMCAgMHhmZmMwMzRiOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA1X0lEMSAgMHhmZmMwMzRiYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA1IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMCAgMHhmZmMwMzRjMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMSAgMHhmZmMwMzRjNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMiAgMHhmZmMwMzRjOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwNl9EQVRBMyAgMHhmZmMwMzRjYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0xFTkdUSCAgMHhmZmMwMzRkMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA2X1RJTUVTVEFNUCAgMHhmZmMwMzRkNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0lEMCAgMHhmZmMwMzRkOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA2X0lEMSAgMHhmZmMwMzRkYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA2IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMCAgMHhmZmMwMzRlMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMSAgMHhmZmMwMzRlNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMiAgMHhmZmMwMzRlOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwN19EQVRBMyAgMHhmZmMwMzRlYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0xFTkdUSCAgMHhmZmMwMzRmMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA3X1RJTUVTVEFNUCAgMHhmZmMwMzRmNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0lEMCAgMHhmZmMwMzRmOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA3X0lEMSAgMHhmZmMwMzRmYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA3IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMCAgMHhmZmMwMzUwMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMSAgMHhmZmMwMzUwNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMiAgMHhmZmMwMzUwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOF9EQVRBMyAgMHhmZmMwMzUwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0xFTkdUSCAgMHhmZmMwMzUxMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA4X1RJTUVTVEFNUCAgMHhmZmMwMzUxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0lEMCAgMHhmZmMwMzUxOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA4X0lEMSAgMHhmZmMwMzUxYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA4IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMCAgMHhmZmMwMzUyMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMSAgMHhmZmMwMzUyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMiAgMHhmZmMwMzUyOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIwOV9EQVRBMyAgMHhmZmMwMzUyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0xFTkdUSCAgMHhmZmMwMzUzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjA5X1RJTUVTVEFNUCAgMHhmZmMwMzUzNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0lEMCAgMHhmZmMwMzUzOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjA5X0lEMSAgMHhmZmMwMzUzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCA5IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9EQVRBMCAgMHhmZmMwMzU0MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTBfREFUQTEgIDB4ZmZjMDM1NDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEwX0RBVEEyICAweGZmYzAzNTQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEwIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9EQVRBMyAgMHhmZmMwMzU0YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9MRU5HVEggIDB4ZmZjMDM1NTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTBfVElNRVNUQU1QICAweGZmYzAzNTU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEwIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEwX0lEMCAgMHhmZmMwMzU1OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMCBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxMF9JRDEgIDB4ZmZjMDM1NWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTAgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0RBVEEwICAweGZmYzAzNTYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMV9EQVRBMSAgMHhmZmMwMzU2NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTFfREFUQTIgIDB4ZmZjMDM1NjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTEgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0RBVEEzICAweGZmYzAzNTZjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0xFTkdUSCAgMHhmZmMwMzU3MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxMV9USU1FU1RBTVAgIDB4ZmZjMDM1NzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTEgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTFfSUQwICAweGZmYzAzNTc4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDExIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjExX0lEMSAgMHhmZmMwMzU3YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMSBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTJfREFUQTAgIDB4ZmZjMDM1ODAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEyX0RBVEExICAweGZmYzAzNTg0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxMl9EQVRBMiAgMHhmZmMwMzU4OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMiBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTJfREFUQTMgIDB4ZmZjMDM1OGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMTJfTEVOR1RIICAweGZmYzAzNTkwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjEyX1RJTUVTVEFNUCAgMHhmZmMwMzU5NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMiBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxMl9JRDAgIDB4ZmZjMDM1OTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTIgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTJfSUQxICAweGZmYzAzNTljICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEyIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxM19EQVRBMCAgMHhmZmMwMzVhMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTNfREFUQTEgIDB4ZmZjMDM1YTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEzX0RBVEEyICAweGZmYzAzNWE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEzIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxM19EQVRBMyAgMHhmZmMwMzVhYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxM19MRU5HVEggIDB4ZmZjMDM1YjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTNfVElNRVNUQU1QICAweGZmYzAzNWI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDEzIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjEzX0lEMCAgMHhmZmMwMzViOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxMyBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxM19JRDEgIDB4ZmZjMDM1YmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTMgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0RBVEEwICAweGZmYzAzNWMwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNF9EQVRBMSAgMHhmZmMwMzVjNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTRfREFUQTIgIDB4ZmZjMDM1YzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTQgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0RBVEEzICAweGZmYzAzNWNjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0xFTkdUSCAgMHhmZmMwMzVkMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxNF9USU1FU1RBTVAgIDB4ZmZjMDM1ZDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTQgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTRfSUQwICAweGZmYzAzNWQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE0IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE0X0lEMSAgMHhmZmMwMzVkYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNCBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTVfREFUQTAgIDB4ZmZjMDM1ZTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE1X0RBVEExICAweGZmYzAzNWU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNV9EQVRBMiAgMHhmZmMwMzVlOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNSBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTVfREFUQTMgIDB4ZmZjMDM1ZWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMTVfTEVOR1RIICAweGZmYzAzNWYwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjE1X1RJTUVTVEFNUCAgMHhmZmMwMzVmNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNSBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxNV9JRDAgIDB4ZmZjMDM1ZjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTUgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTVfSUQxICAweGZmYzAzNWZjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE1IElEMSBSZWdpc3RlciAqLworCisvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggRGF0YSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9EQVRBMCAgMHhmZmMwMzYwMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTZfREFUQTEgIDB4ZmZjMDM2MDQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE2X0RBVEEyICAweGZmYzAzNjA4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE2IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9EQVRBMyAgMHhmZmMwMzYwYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9MRU5HVEggIDB4ZmZjMDM2MTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTZfVElNRVNUQU1QICAweGZmYzAzNjE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE2IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE2X0lEMCAgMHhmZmMwMzYxOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNiBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxNl9JRDEgIDB4ZmZjMDM2MWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTYgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0RBVEEwICAweGZmYzAzNjIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxN19EQVRBMSAgMHhmZmMwMzYyNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTdfREFUQTIgIDB4ZmZjMDM2MjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTcgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0RBVEEzICAweGZmYzAzNjJjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0xFTkdUSCAgMHhmZmMwMzYzMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIxN19USU1FU1RBTVAgIDB4ZmZjMDM2MzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTcgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMTdfSUQwICAweGZmYzAzNjM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE3IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE3X0lEMSAgMHhmZmMwMzYzYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxNyBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMThfREFUQTAgIDB4ZmZjMDM2NDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE4X0RBVEExICAweGZmYzAzNjQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOF9EQVRBMiAgMHhmZmMwMzY0OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOCBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMThfREFUQTMgIDB4ZmZjMDM2NGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMThfTEVOR1RIICAweGZmYzAzNjUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjE4X1RJTUVTVEFNUCAgMHhmZmMwMzY1NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxOF9JRDAgIDB4ZmZjMDM2NTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTggSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMThfSUQxICAweGZmYzAzNjVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE4IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9EQVRBMCAgMHhmZmMwMzY2MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMTlfREFUQTEgIDB4ZmZjMDM2NjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE5X0RBVEEyICAweGZmYzAzNjY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE5IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9EQVRBMyAgMHhmZmMwMzY2YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9MRU5HVEggIDB4ZmZjMDM2NzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMTlfVElNRVNUQU1QICAweGZmYzAzNjc0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDE5IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjE5X0lEMCAgMHhmZmMwMzY3OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAxOSBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIxOV9JRDEgIDB4ZmZjMDM2N2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMTkgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0RBVEEwICAweGZmYzAzNjgwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMF9EQVRBMSAgMHhmZmMwMzY4NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjBfREFUQTIgIDB4ZmZjMDM2ODggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjAgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0RBVEEzICAweGZmYzAzNjhjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0xFTkdUSCAgMHhmZmMwMzY5MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyMF9USU1FU1RBTVAgIDB4ZmZjMDM2OTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjAgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjBfSUQwICAweGZmYzAzNjk4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIwIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIwX0lEMSAgMHhmZmMwMzY5YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMCBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjFfREFUQTAgIDB4ZmZjMDM2YTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIxX0RBVEExICAweGZmYzAzNmE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMV9EQVRBMiAgMHhmZmMwMzZhOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMSBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjFfREFUQTMgIDB4ZmZjMDM2YWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjFfTEVOR1RIICAweGZmYzAzNmIwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjIxX1RJTUVTVEFNUCAgMHhmZmMwMzZiNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMSBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyMV9JRDAgIDB4ZmZjMDM2YjggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjEgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjFfSUQxICAweGZmYzAzNmJjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIxIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9EQVRBMCAgMHhmZmMwMzZjMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjJfREFUQTEgIDB4ZmZjMDM2YzQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIyX0RBVEEyICAweGZmYzAzNmM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIyIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9EQVRBMyAgMHhmZmMwMzZjYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9MRU5HVEggIDB4ZmZjMDM2ZDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjJfVElNRVNUQU1QICAweGZmYzAzNmQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIyIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIyX0lEMCAgMHhmZmMwMzZkOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMiBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyMl9JRDEgIDB4ZmZjMDM2ZGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjIgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0RBVEEwICAweGZmYzAzNmUwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyM19EQVRBMSAgMHhmZmMwMzZlNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjNfREFUQTIgIDB4ZmZjMDM2ZTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjMgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0RBVEEzICAweGZmYzAzNmVjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0xFTkdUSCAgMHhmZmMwMzZmMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyM19USU1FU1RBTVAgIDB4ZmZjMDM2ZjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjMgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjNfSUQwICAweGZmYzAzNmY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDIzIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjIzX0lEMSAgMHhmZmMwMzZmYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyMyBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjRfREFUQTAgIDB4ZmZjMDM3MDAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI0X0RBVEExICAweGZmYzAzNzA0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNF9EQVRBMiAgMHhmZmMwMzcwOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNCBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjRfREFUQTMgIDB4ZmZjMDM3MGMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjRfTEVOR1RIICAweGZmYzAzNzEwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjI0X1RJTUVTVEFNUCAgMHhmZmMwMzcxNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyNF9JRDAgIDB4ZmZjMDM3MTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjQgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjRfSUQxICAweGZmYzAzNzFjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI0IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9EQVRBMCAgMHhmZmMwMzcyMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjVfREFUQTEgIDB4ZmZjMDM3MjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI1X0RBVEEyICAweGZmYzAzNzI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI1IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9EQVRBMyAgMHhmZmMwMzcyYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9MRU5HVEggIDB4ZmZjMDM3MzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjVfVElNRVNUQU1QICAweGZmYzAzNzM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI1IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI1X0lEMCAgMHhmZmMwMzczOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNSBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyNV9JRDEgIDB4ZmZjMDM3M2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjUgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0RBVEEwICAweGZmYzAzNzQwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyNl9EQVRBMSAgMHhmZmMwMzc0NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjZfREFUQTIgIDB4ZmZjMDM3NDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjYgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0RBVEEzICAweGZmYzAzNzRjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0xFTkdUSCAgMHhmZmMwMzc1MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyNl9USU1FU1RBTVAgIDB4ZmZjMDM3NTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjYgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjZfSUQwICAweGZmYzAzNzU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI2IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI2X0lEMSAgMHhmZmMwMzc1YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNiBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjdfREFUQTAgIDB4ZmZjMDM3NjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI3X0RBVEExICAweGZmYzAzNzY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyN19EQVRBMiAgMHhmZmMwMzc2OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNyBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjdfREFUQTMgIDB4ZmZjMDM3NmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMjdfTEVOR1RIICAweGZmYzAzNzcwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjI3X1RJTUVTVEFNUCAgMHhmZmMwMzc3NCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyNyBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyN19JRDAgIDB4ZmZjMDM3NzggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjcgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjdfSUQxICAweGZmYzAzNzdjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI3IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9EQVRBMCAgMHhmZmMwMzc4MCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjhfREFUQTEgIDB4ZmZjMDM3ODQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI4X0RBVEEyICAweGZmYzAzNzg4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI4IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9EQVRBMyAgMHhmZmMwMzc4YyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9MRU5HVEggIDB4ZmZjMDM3OTAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMjhfVElNRVNUQU1QICAweGZmYzAzNzk0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI4IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI4X0lEMCAgMHhmZmMwMzc5OCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOCBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIyOF9JRDEgIDB4ZmZjMDM3OWMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjggSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0RBVEEwICAweGZmYzAzN2EwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIyOV9EQVRBMSAgMHhmZmMwMzdhNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMjlfREFUQTIgIDB4ZmZjMDM3YTggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjkgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0RBVEEzICAweGZmYzAzN2FjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0xFTkdUSCAgMHhmZmMwMzdiMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjFfTUIyOV9USU1FU1RBTVAgIDB4ZmZjMDM3YjQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMjkgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMjlfSUQwICAweGZmYzAzN2I4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDI5IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjI5X0lEMSAgMHhmZmMwMzdiYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAyOSBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMzBfREFUQTAgIDB4ZmZjMDM3YzAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMwX0RBVEExICAweGZmYzAzN2M0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMF9EQVRBMiAgMHhmZmMwMzdjOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMCBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMzBfREFUQTMgIDB4ZmZjMDM3Y2MgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4xX01CMzBfTEVOR1RIICAweGZmYzAzN2QwICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMV9NQjMwX1RJTUVTVEFNUCAgMHhmZmMwMzdkNCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIzMF9JRDAgIDB4ZmZjMDM3ZDggICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzAgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4xX01CMzBfSUQxICAweGZmYzAzN2RjICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMwIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9EQVRBMCAgMHhmZmMwMzdlMCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4xX01CMzFfREFUQTEgIDB4ZmZjMDM3ZTQgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMxX0RBVEEyICAweGZmYzAzN2U4ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMxIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9EQVRBMyAgMHhmZmMwMzdlYyAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9MRU5HVEggIDB4ZmZjMDM3ZjAgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4xX01CMzFfVElNRVNUQU1QICAweGZmYzAzN2Y0ICAgLyogQ0FOIENvbnRyb2xsZXIgMSBNYWlsYm94IDMxIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMV9NQjMxX0lEMCAgMHhmZmMwMzdmOCAgIC8qIENBTiBDb250cm9sbGVyIDEgTWFpbGJveCAzMSBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjFfTUIzMV9JRDEgIDB4ZmZjMDM3ZmMgICAvKiBDQU4gQ29udHJvbGxlciAxIE1haWxib3ggMzEgSUQxIFJlZ2lzdGVyICovCisKKy8qIEFUQVBJIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBVEFQSV9DT05UUk9MICAweGZmYzAzODAwICAgLyogQVRBUEkgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFUQVBJX1NUQVRVUyAgMHhmZmMwMzgwNCAgIC8qIEFUQVBJIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBBVEFQSV9ERVZfQUREUiAgMHhmZmMwMzgwOCAgIC8qIEFUQVBJIERldmljZSBSZWdpc3RlciBBZGRyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQVRBUElfREVWX1RYQlVGICAweGZmYzAzODBjICAgLyogQVRBUEkgRGV2aWNlIFJlZ2lzdGVyIFdyaXRlIERhdGEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBBVEFQSV9ERVZfUlhCVUYgIDB4ZmZjMDM4MTAgICAvKiBBVEFQSSBEZXZpY2UgUmVnaXN0ZXIgUmVhZCBEYXRhICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEFUQVBJX0lOVF9NQVNLICAweGZmYzAzODE0ICAgLyogQVRBUEkgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIEFUQVBJX0lOVF9TVEFUVVMgIDB4ZmZjMDM4MTggICAvKiBBVEFQSSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEFUQVBJX1hGRVJfTEVOICAweGZmYzAzODFjICAgLyogQVRBUEkgTGVuZ3RoIG9mIFRyYW5zZmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIEFUQVBJX0xJTkVfU1RBVFVTICAweGZmYzAzODIwICAgLyogQVRBUEkgTGluZSBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQVRBUElfU01fU1RBVEUgIDB4ZmZjMDM4MjQgICAvKiBBVEFQSSBTdGF0ZSBNYWNoaW5lIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1RFUk1JTkFURSAgMHhmZmMwMzgyOCAgIC8qIEFUQVBJIEhvc3QgVGVybWluYXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBBVEFQSV9QSU9fVEZSQ05UICAweGZmYzAzODJjICAgLyogQVRBUEkgUElPIG1vZGUgdHJhbnNmZXIgY291bnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIEFUQVBJX0RNQV9URlJDTlQgIDB4ZmZjMDM4MzAgICAvKiBBVEFQSSBETUEgbW9kZSB0cmFuc2ZlciBjb3VudCAqLworI2RlZmluZSAgICAgICAgICAgICAgIEFUQVBJX1VNQUlOX1RGUkNOVCAgMHhmZmMwMzgzNCAgIC8qIEFUQVBJIFVETUFJTiB0cmFuc2ZlciBjb3VudCAqLworI2RlZmluZSAgICAgICAgICAgICBBVEFQSV9VRE1BT1VUX1RGUkNOVCAgMHhmZmMwMzgzOCAgIC8qIEFUQVBJIFVETUFPVVQgdHJhbnNmZXIgY291bnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBBVEFQSV9SRUdfVElNXzAgIDB4ZmZjMDM4NDAgICAvKiBBVEFQSSBSZWdpc3RlciBUcmFuc2ZlciBUaW1pbmcgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1BJT19USU1fMCAgMHhmZmMwMzg0NCAgIC8qIEFUQVBJIFBJTyBUaW1pbmcgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFUQVBJX1BJT19USU1fMSAgMHhmZmMwMzg0OCAgIC8qIEFUQVBJIFBJTyBUaW1pbmcgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMCAgMHhmZmMwMzg1MCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMSAgMHhmZmMwMzg1NCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9NVUxUSV9USU1fMiAgMHhmZmMwMzg1OCAgIC8qIEFUQVBJIE11bHRpLURNQSBUaW1pbmcgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMCAgMHhmZmMwMzg2MCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMSAgMHhmZmMwMzg2NCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMiAgMHhmZmMwMzg2OCAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9VTFRSQV9USU1fMyAgMHhmZmMwMzg2YyAgIC8qIEFUQVBJIFVsdHJhLURNQSBUaW1pbmcgMyBSZWdpc3RlciAqLworCisvKiBTREggUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0RIX1BXUl9DVEwgIDB4ZmZjMDM5MDAgICAvKiBTREggUG93ZXIgQ29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTREhfQ0xLX0NUTCAgMHhmZmMwMzkwNCAgIC8qIFNESCBDbG9jayBDb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0RIX0FSR1VNRU5UICAweGZmYzAzOTA4ICAgLyogU0RIIEFyZ3VtZW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNESF9DT01NQU5EICAweGZmYzAzOTBjICAgLyogU0RIIENvbW1hbmQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTREhfUkVTUF9DTUQgIDB4ZmZjMDM5MTAgICAvKiBTREggUmVzcG9uc2UgQ29tbWFuZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX1JFU1BPTlNFMCAgMHhmZmMwMzkxNCAgIC8qIFNESCBSZXNwb25zZTAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNESF9SRVNQT05TRTEgIDB4ZmZjMDM5MTggICAvKiBTREggUmVzcG9uc2UxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTREhfUkVTUE9OU0UyICAweGZmYzAzOTFjICAgLyogU0RIIFJlc3BvbnNlMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX1JFU1BPTlNFMyAgMHhmZmMwMzkyMCAgIC8qIFNESCBSZXNwb25zZTMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0RIX0RBVEFfVElNRVIgIDB4ZmZjMDM5MjQgICAvKiBTREggRGF0YSBUaW1lciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RIX0RBVEFfTEdUSCAgMHhmZmMwMzkyOCAgIC8qIFNESCBEYXRhIExlbmd0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNESF9EQVRBX0NUTCAgMHhmZmMwMzkyYyAgIC8qIFNESCBEYXRhIENvbnRyb2wgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTREhfREFUQV9DTlQgIDB4ZmZjMDM5MzAgICAvKiBTREggRGF0YSBDb3VudGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBTREhfU1RBVFVTICAweGZmYzAzOTM0ICAgLyogU0RIIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTREhfU1RBVFVTX0NMUiAgMHhmZmMwMzkzOCAgIC8qIFNESCBTdGF0dXMgQ2xlYXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTREhfTUFTSzAgIDB4ZmZjMDM5M2MgICAvKiBTREggSW50ZXJydXB0MCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU0RIX01BU0sxICAweGZmYzAzOTQwICAgLyogU0RIIEludGVycnVwdDEgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNESF9GSUZPX0NOVCAgMHhmZmMwMzk0OCAgIC8qIFNESCBGSUZPIENvdW50ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU0RIX0ZJRk8gIDB4ZmZjMDM5ODAgICAvKiBTREggRGF0YSBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0RIX0VfU1RBVFVTICAweGZmYzAzOWMwICAgLyogU0RIIEV4Y2VwdGlvbiBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFNESF9FX01BU0sgIDB4ZmZjMDM5YzQgICAvKiBTREggRXhjZXB0aW9uIE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9DRkcgIDB4ZmZjMDM5YzggICAvKiBTREggQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTREhfUkRfV0FJVF9FTiAgMHhmZmMwMzljYyAgIC8qIFNESCBSZWFkIFdhaXQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQwICAweGZmYzAzOWQwICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24wICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQxICAweGZmYzAzOWQ0ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24xICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQyICAweGZmYzAzOWQ4ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQzICAweGZmYzAzOWRjICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24zICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ0ICAweGZmYzAzOWUwICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb240ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ1ICAweGZmYzAzOWU0ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb241ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ2ICAweGZmYzAzOWU4ICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb242ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNESF9QSUQ3ICAweGZmYzAzOWVjICAgLyogU0RIIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb243ICovCisKKy8qIEhPU1QgUG9ydCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPU1RfQ09OVFJPTCAgMHhmZmMwM2EwMCAgIC8qIEhPU1QgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBIT1NUX1NUQVRVUyAgMHhmZmMwM2EwNCAgIC8qIEhPU1QgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9TVF9USU1FT1VUICAweGZmYzAzYTA4ICAgLyogSE9TVCBBY2tub3dsZWRnZSBNb2RlIFRpbWVvdXQgUmVnaXN0ZXIgKi8KKworLyogVVNCIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRkFERFIgIDB4ZmZjMDNjMDAgICAvKiBGdW5jdGlvbiBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1BPV0VSICAweGZmYzAzYzA0ICAgLyogUG93ZXIgbWFuYWdlbWVudCByZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0lOVFJUWCAgMHhmZmMwM2MwOCAgIC8qIEludGVycnVwdCByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCBhbmQgVHggZW5kcG9pbnQgMSB0byA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlJYICAweGZmYzAzYzBjICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBSeCBlbmRwb2ludHMgMSB0byA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVFhFICAweGZmYzAzYzEwICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clR4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSUlhFICAweGZmYzAzYzE0ICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50clJ4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTlRSVVNCICAweGZmYzAzYzE4ICAgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBjb21tb24gVVNCIGludGVycnVwdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfSU5UUlVTQkUgIDB4ZmZjMDNjMWMgICAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGZvciBJbnRyVVNCICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX0ZSQU1FICAweGZmYzAzYzIwICAgLyogVVNCIGZyYW1lIG51bWJlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9JTkRFWCAgMHhmZmMwM2MyNCAgIC8qIEluZGV4IHJlZ2lzdGVyIGZvciBzZWxlY3RpbmcgdGhlIGluZGV4ZWQgZW5kcG9pbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVVNCX1RFU1RNT0RFICAweGZmYzAzYzI4ICAgLyogRW5hYmxlZCBVU0IgMjAgdGVzdCBtb2RlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9HTE9CSU5UUiAgMHhmZmMwM2MyYyAgIC8qIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayByZWdpc3RlciBhbmQgV2FrZXVwIEV4Y2VwdGlvbiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX0dMT0JBTF9DVEwgIDB4ZmZjMDNjMzAgICAvKiBHbG9iYWwgQ2xvY2sgQ29udHJvbCBmb3IgdGhlIGNvcmUgKi8KKworLyogVVNCIFBhY2tldCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9UWF9NQVhfUEFDS0VUICAweGZmYzAzYzQwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfQ1NSMCAgMHhmZmMwM2M0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWENTUiAgMHhmZmMwM2M0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludCAwIGFuZCBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfUlhfTUFYX1BBQ0tFVCAgMHhmZmMwM2M0OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVU0JfUlhDU1IgIDB4ZmZjMDNjNGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX0NPVU5UMCAgMHhmZmMwM2M1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludCAwIEZJRk8gYW5kIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBIb3N0IFR4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9SWENPVU5UICAweGZmYzAzYzUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyBhbmQgTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWFRZUEUgIDB4ZmZjMDNjNTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBVU0JfTkFLTElNSVQwICAweGZmYzAzYzU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCBhbmQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgVHggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1RYSU5URVJWQUwgIDB4ZmZjMDNjNTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludCAwIGFuZCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBUeCBlbmRwb2ludCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVNCX1JYVFlQRSAgMHhmZmMwM2M1YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVVNCX1JYSU5URVJWQUwgIDB4ZmZjMDNjNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQgYW5kIElzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVVNCX1RYQ09VTlQgIDB4ZmZjMDNjNjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgc2VsZWN0ZWQgZW5kcG9pbnQgVHggRklGTyAqLworCisvKiBVU0IgRW5kcG9pbnQgRklGTyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDBfRklGTyAgMHhmZmMwM2M4MCAgIC8qIEVuZHBvaW50IDAgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDFfRklGTyAgMHhmZmMwM2M4OCAgIC8qIEVuZHBvaW50IDEgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDJfRklGTyAgMHhmZmMwM2M5MCAgIC8qIEVuZHBvaW50IDIgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDNfRklGTyAgMHhmZmMwM2M5OCAgIC8qIEVuZHBvaW50IDMgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDRfRklGTyAgMHhmZmMwM2NhMCAgIC8qIEVuZHBvaW50IDQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDVfRklGTyAgMHhmZmMwM2NhOCAgIC8qIEVuZHBvaW50IDUgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDZfRklGTyAgMHhmZmMwM2NiMCAgIC8qIEVuZHBvaW50IDYgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9FUDdfRklGTyAgMHhmZmMwM2NiOCAgIC8qIEVuZHBvaW50IDcgRklGTyAqLworCisvKiBVU0IgT1RHIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfT1RHX0RFVl9DVEwgIDB4ZmZjMDNkMDAgICAvKiBPVEcgRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9PVEdfVkJVU19JUlEgIDB4ZmZjMDNkMDQgICAvKiBPVEcgVkJVUyBDb250cm9sIEludGVycnVwdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX09UR19WQlVTX01BU0sgIDB4ZmZjMDNkMDggICAvKiBWQlVTIENvbnRyb2wgSW50ZXJydXB0IEVuYWJsZSAqLworCisvKiBVU0IgUGh5IENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JfTElOS0lORk8gIDB4ZmZjMDNkNDggICAvKiBFbmFibGVzIHByb2dyYW1taW5nIG9mIHNvbWUgUEhZLXNpZGUgZGVsYXlzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1ZQTEVOICAweGZmYzAzZDRjICAgLyogRGV0ZXJtaW5lcyBkdXJhdGlvbiBvZiBWQlVTIHB1bHNlIGZvciBWQlVTIGNoYXJnaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9IU19FT0YxICAweGZmYzAzZDUwICAgLyogVGltZSBidWZmZXIgZm9yIEhpZ2gtU3BlZWQgdHJhbnNhY3Rpb25zICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9GU19FT0YxICAweGZmYzAzZDU0ICAgLyogVGltZSBidWZmZXIgZm9yIEZ1bGwtU3BlZWQgdHJhbnNhY3Rpb25zICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVTQl9MU19FT0YxICAweGZmYzAzZDU4ICAgLyogVGltZSBidWZmZXIgZm9yIExvdy1TcGVlZCB0cmFuc2FjdGlvbnMgKi8KKworLyogKEFQSFlfQ05UUkwgaXMgZm9yIEFESSB1c2FnZSBvbmx5KSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9BUEhZX0NOVFJMICAweGZmYzAzZGUwICAgLyogUmVnaXN0ZXIgdGhhdCBpbmNyZWFzZXMgdmlzaWJpbGl0eSBvZiBBbmFsb2cgUEhZICovCisKKy8qIChBUEhZX0NBTElCIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBVU0JfQVBIWV9DQUxJQiAgMHhmZmMwM2RlNCAgIC8qIFJlZ2lzdGVyIHVzZWQgdG8gc2V0IHNvbWUgY2FsaWJyYXRpb24gdmFsdWVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0FQSFlfQ05UUkwyICAweGZmYzAzZGU4ICAgLyogUmVnaXN0ZXIgdXNlZCB0byBwcmV2ZW50IHJlLWVudW1lcmF0aW9uIG9uY2UgTW9hYiBnb2VzIGludG8gaGliZXJuYXRlIG1vZGUgKi8KKworLyogKFBIWV9URVNUIGlzIGZvciBBREkgdXNhZ2Ugb25seSkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQl9QSFlfVEVTVCAgMHhmZmMwM2RlYyAgIC8qIFVzZWQgZm9yIHJlZHVjaW5nIHNpbXVsYXRpb24gdGltZSBhbmQgc2ltcGxpZmllcyBGSUZPIHRlc3RhYmlsaXR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX1BMTE9TQ19DVFJMICAweGZmYzAzZGYwICAgLyogVXNlZCB0byBwcm9ncmFtIGRpZmZlcmVudCBwYXJhbWV0ZXJzIGZvciBVU0IgUExMIGFuZCBPc2NpbGxhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTQl9TUlBfQ0xLRElWICAweGZmYzAzZGY0ICAgLyogVXNlZCB0byBwcm9ncmFtIGNsb2NrIGRpdmlkZSB2YWx1ZSBmb3IgdGhlIGNsb2NrIGZlZCB0byB0aGUgU1JQIGRldGVjdGlvbiBsb2dpYyAqLworCisvKiBVU0IgRW5kcG9pbnQgMCBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhNQVhQICAweGZmYzAzZTAwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTBfVFhDU1IgIDB4ZmZjMDNlMDQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYTUFYUCAgMHhmZmMwM2UwOCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYQ1NSICAweGZmYzAzZTBjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JMF9SWENPVU5UICAweGZmYzAzZTEwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50IDAgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYVFlQRSAgMHhmZmMwM2UxNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQwICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMF9UWElOVEVSVkFMICAweGZmYzAzZTE4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1JYVFlQRSAgMHhmZmMwM2UxYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQwICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMF9SWElOVEVSVkFMICAweGZmYzAzZTIwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQwICovCisKKy8qIFVTQiBFbmRwb2ludCAxIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkwX1RYQ09VTlQgIDB4ZmZjMDNlMjggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQwIFR4IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWE1BWFAgIDB4ZmZjMDNlNDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9UWENTUiAgMHhmZmMwM2U0NCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9SWE1BWFAgIDB4ZmZjMDNlNDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JMV9SWENTUiAgMHhmZmMwM2U0YyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MSAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhDT1VOVCAgMHhmZmMwM2U1MCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDEgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkxX1RYVFlQRSAgMHhmZmMwM2U1NCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMV9UWElOVEVSVkFMICAweGZmYzAzZTU4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfUlhUWVBFICAweGZmYzAzZTVjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDEgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkxX1JYSU5URVJWQUwgIDB4ZmZjMDNlNjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDEgKi8KKworLyogVVNCIEVuZHBvaW50IDIgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTFfVFhDT1VOVCAgMHhmZmMwM2U2OCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZStIMTAyIGVuZHBvaW50MSBUeCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhNQVhQICAweGZmYzAzZTgwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhDU1IgIDB4ZmZjMDNlODQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhNQVhQICAweGZmYzAzZTg4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTJfUlhDU1IgIDB4ZmZjMDNlOGMgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYQ09VTlQgIDB4ZmZjMDNlOTAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQyIEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JMl9UWFRZUEUgIDB4ZmZjMDNlOTQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTJfVFhJTlRFUlZBTCAgMHhmZmMwM2U5OCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50MiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1JYVFlQRSAgMHhmZmMwM2U5YyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQyICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JMl9SWElOVEVSVkFMICAweGZmYzAzZWEwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQyICovCisKKy8qIFVTQiBFbmRwb2ludCAzIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkkyX1RYQ09VTlQgIDB4ZmZjMDNlYTggICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZW5kcG9pbnQyIFR4IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWE1BWFAgIDB4ZmZjMDNlYzAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JM19UWENTUiAgMHhmZmMwM2VjNCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JM19SWE1BWFAgIDB4ZmZjMDNlYzggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JM19SWENTUiAgMHhmZmMwM2VjYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50MyAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhDT1VOVCAgMHhmZmMwM2VkMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDMgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkkzX1RYVFlQRSAgMHhmZmMwM2VkNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JM19UWElOVEVSVkFMICAweGZmYzAzZWQ4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfUlhUWVBFICAweGZmYzAzZWRjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDMgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkkzX1JYSU5URVJWQUwgIDB4ZmZjMDNlZTAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDMgKi8KKworLyogVVNCIEVuZHBvaW50IDQgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTNfVFhDT1VOVCAgMHhmZmMwM2VlOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBIMTI0ZW5kcG9pbnQzIFR4IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWE1BWFAgIDB4ZmZjMDNmMDAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFR4IGVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9UWENTUiAgMHhmZmMwM2YwNCAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9SWE1BWFAgIDB4ZmZjMDNmMDggICAvKiBNYXhpbXVtIHBhY2tldCBzaXplIGZvciBIb3N0IFJ4IGVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0VQX05JNF9SWENTUiAgMHhmZmMwM2YwYyAgIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBIb3N0IFJ4IGVuZHBvaW50NCAqLworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhDT1VOVCAgMHhmZmMwM2YxMCAgIC8qIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiBlbmRwb2ludDQgRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk0X1RYVFlQRSAgMHhmZmMwM2YxNCAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgVHggZW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JNF9UWElOVEVSVkFMICAweGZmYzAzZjE4ICAgLyogU2V0cyB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gRW5kcG9pbnQ0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfUlhUWVBFICAweGZmYzAzZjFjICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBSeCBlbmRwb2ludDQgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk0X1JYSU5URVJWQUwgIDB4ZmZjMDNmMjAgICAvKiBTZXRzIHRoZSBwb2xsaW5nIGludGVydmFsIGZvciBJbnRlcnJ1cHQvSXNvY2hyb25vdXMgdHJhbnNmZXJzIG9yIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBCdWxrIHRyYW5zZmVycyBmb3IgSG9zdCBSeCBlbmRwb2ludDQgKi8KKworLyogVVNCIEVuZHBvaW50IDUgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIFVTQl9FUF9OSTRfVFhDT1VOVCAgMHhmZmMwM2YyOCAgIC8qIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuIHRvIHRoZSBlbmRwb2ludDQgVHggRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYTUFYUCAgMHhmZmMwM2Y0MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1RYQ1NSICAweGZmYzAzZjQ0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1JYTUFYUCAgMHhmZmMwM2Y0OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk1X1JYQ1NSICAweGZmYzAzZjRjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWENPVU5UICAweGZmYzAzZjUwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NSBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTVfVFhUWVBFICAweGZmYzAzZjU0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk1X1RYSU5URVJWQUwgIDB4ZmZjMDNmNTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNV9SWFRZUEUgIDB4ZmZjMDNmNWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NSAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTVfUlhJTlRFUlZBTCAgMHhmZmMwM2Y2MCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NSAqLworCisvKiBVU0IgRW5kcG9pbnQgNiBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNV9UWENPVU5UICAweGZmYzAzZjY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEgxNDVlbmRwb2ludDUgVHggRklGTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYTUFYUCAgMHhmZmMwM2Y4MCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgVHggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1RYQ1NSICAweGZmYzAzZjg0ICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYTUFYUCAgMHhmZmMwM2Y4OCAgIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRVBfTkk2X1JYQ1NSICAweGZmYzAzZjhjICAgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIEhvc3QgUnggZW5kcG9pbnQ2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWENPVU5UICAweGZmYzAzZjkwICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGluIGVuZHBvaW50NiBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTZfVFhUWVBFICAweGZmYzAzZjk0ICAgLyogU2V0cyB0aGUgdHJhbnNhY3Rpb24gcHJvdG9jb2wgYW5kIHBlcmlwaGVyYWwgZW5kcG9pbnQgbnVtYmVyIGZvciB0aGUgSG9zdCBUeCBlbmRwb2ludDYgKi8KKyNkZWZpbmUgICAgICAgICAgICBVU0JfRVBfTkk2X1RYSU5URVJWQUwgIDB4ZmZjMDNmOTggICAvKiBTZXRzIHRoZSBOQUsgcmVzcG9uc2UgdGltZW91dCBvbiBFbmRwb2ludDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JNl9SWFRZUEUgIDB4ZmZjMDNmOWMgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFJ4IGVuZHBvaW50NiAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTZfUlhJTlRFUlZBTCAgMHhmZmMwM2ZhMCAgIC8qIFNldHMgdGhlIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIEludGVycnVwdC9Jc29jaHJvbm91cyB0cmFuc2ZlcnMgb3IgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEJ1bGsgdHJhbnNmZXJzIGZvciBIb3N0IFJ4IGVuZHBvaW50NiAqLworCisvKiBVU0IgRW5kcG9pbnQgNyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JNl9UWENPVU5UICAweGZmYzAzZmE4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NiBUeCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhNQVhQICAweGZmYzAzZmMwICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBUeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhDU1IgIDB4ZmZjMDNmYzQgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhNQVhQICAweGZmYzAzZmM4ICAgLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9FUF9OSTdfUlhDU1IgIDB4ZmZjMDNmY2MgICAvKiBDb250cm9sIFN0YXR1cyByZWdpc3RlciBmb3IgSG9zdCBSeCBlbmRwb2ludDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYQ09VTlQgIDB4ZmZjMDNmZDAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gZW5kcG9pbnQ3IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWFRZUEUgIDB4ZmZjMDNmZDQgICAvKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBwcm90b2NvbCBhbmQgcGVyaXBoZXJhbCBlbmRwb2ludCBudW1iZXIgZm9yIHRoZSBIb3N0IFR4IGVuZHBvaW50NyAqLworI2RlZmluZSAgICAgICAgICAgIFVTQl9FUF9OSTdfVFhJTlRFUlZBTCAgMHhmZmMwM2ZkOCAgIC8qIFNldHMgdGhlIE5BSyByZXNwb25zZSB0aW1lb3V0IG9uIEVuZHBvaW50NyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRVBfTkk3X1JYVFlQRSAgMHhmZmMwM2ZkYyAgIC8qIFNldHMgdGhlIHRyYW5zYWN0aW9uIHByb3RvY29sIGFuZCBwZXJpcGhlcmFsIGVuZHBvaW50IG51bWJlciBmb3IgdGhlIEhvc3QgUnggZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgVVNCX0VQX05JN19SWElOVEVSVkFMICAweGZmYzAzZmYwICAgLyogU2V0cyB0aGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgSW50ZXJydXB0L0lzb2Nocm9ub3VzIHRyYW5zZmVycyBvciB0aGUgTkFLIHJlc3BvbnNlIHRpbWVvdXQgb24gQnVsayB0cmFuc2ZlcnMgZm9yIEhvc3QgUnggZW5kcG9pbnQ3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgVVNCX0VQX05JN19UWENPVU5UICAweGZmYzAzZmY4ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGVuZHBvaW50NyBUeCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUFfSU5URVJSVVBUICAweGZmYzA0MDAwICAgLyogSW5kaWNhdGVzIHBlbmRpbmcgaW50ZXJydXB0cyBmb3IgdGhlIERNQSBjaGFubmVscyAqLworCisvKiBVU0IgQ2hhbm5lbCAwIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEwQ09OVFJPTCAgMHhmZmMwNDAwNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAwIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMEFERFJMT1cgIDB4ZmZjMDQwMDggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEwQUREUkhJR0ggIDB4ZmZjMDQwMGMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEwQ09VTlRMT1cgIDB4ZmZjMDQwMTAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BMENPVU5USElHSCAgMHhmZmMwNDAxNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAwICovCisKKy8qIFVTQiBDaGFubmVsIDEgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTFDT05UUk9MICAweGZmYzA0MDI0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDEgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUExQUREUkxPVyAgMHhmZmMwNDAyOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTFBRERSSElHSCAgMHhmZmMwNDAyYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTFDT1VOVExPVyAgMHhmZmMwNDAzMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUExQ09VTlRISUdIICAweGZmYzA0MDM0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDEgKi8KKworLyogVVNCIENoYW5uZWwgMiBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BMkNPTlRST0wgIDB4ZmZjMDQwNDQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgMiBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTJBRERSTE9XICAweGZmYzA0MDQ4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMkFERFJISUdIICAweGZmYzA0MDRjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BMkNPVU5UTE9XICAweGZmYzA0MDUwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTJDT1VOVEhJR0ggIDB4ZmZjMDQwNTQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMiAqLworCisvKiBVU0IgQ2hhbm5lbCAzIENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUEzQ09OVFJPTCAgMHhmZmMwNDA2NCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCAzIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BM0FERFJMT1cgIDB4ZmZjMDQwNjggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEzQUREUkhJR0ggIDB4ZmZjMDQwNmMgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUEzQ09VTlRMT1cgIDB4ZmZjMDQwNzAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BM0NPVU5USElHSCAgMHhmZmMwNDA3NCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAzICovCisKKy8qIFVTQiBDaGFubmVsIDQgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTRDT05UUk9MICAweGZmYzA0MDg0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDQgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE0QUREUkxPVyAgMHhmZmMwNDA4OCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTRBRERSSElHSCAgMHhmZmMwNDA4YyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTRDT1VOVExPVyAgMHhmZmMwNDA5MCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE0Q09VTlRISUdIICAweGZmYzA0MDk0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDQgKi8KKworLyogVVNCIENoYW5uZWwgNSBDb25maWcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNUNPTlRST0wgIDB4ZmZjMDQwYTQgICAvKiBETUEgbWFzdGVyIGNoYW5uZWwgNSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTVBRERSTE9XICAweGZmYzA0MGE4ICAgLyogTG93ZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNUFERFJISUdIICAweGZmYzA0MGFjICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBVU0JfRE1BNUNPVU5UTE9XICAweGZmYzA0MGIwICAgLyogTG93ZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgVVNCX0RNQTVDT1VOVEhJR0ggIDB4ZmZjMDQwYjQgICAvKiBVcHBlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNSAqLworCisvKiBVU0IgQ2hhbm5lbCA2IENvbmZpZyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE2Q09OVFJPTCAgMHhmZmMwNDBjNCAgIC8qIERNQSBtYXN0ZXIgY2hhbm5lbCA2IGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVU0JfRE1BNkFERFJMT1cgIDB4ZmZjMDQwYzggICAvKiBMb3dlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE2QUREUkhJR0ggIDB4ZmZjMDQwY2MgICAvKiBVcHBlciAxNi1iaXRzIG9mIG1lbW9yeSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFVTQl9ETUE2Q09VTlRMT1cgIDB4ZmZjMDQwZDAgICAvKiBMb3dlciAxNi1iaXRzIG9mIGJ5dGUgY291bnQgb2YgRE1BIHRyYW5zZmVyIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBVU0JfRE1BNkNPVU5USElHSCAgMHhmZmMwNDBkNCAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA2ICovCisKKy8qIFVTQiBDaGFubmVsIDcgQ29uZmlnIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVVNCX0RNQTdDT05UUk9MICAweGZmYzA0MGU0ICAgLyogRE1BIG1hc3RlciBjaGFubmVsIDcgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFVTQl9ETUE3QUREUkxPVyAgMHhmZmMwNDBlOCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTdBRERSSElHSCAgMHhmZmMwNDBlYyAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBETUEgbWFzdGVyIGNoYW5uZWwgNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVVNCX0RNQTdDT1VOVExPVyAgMHhmZmMwNDBmMCAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFVTQl9ETUE3Q09VTlRISUdIICAweGZmYzA0MGY0ICAgLyogVXBwZXIgMTYtYml0cyBvZiBieXRlIGNvdW50IG9mIERNQSB0cmFuc2ZlciBmb3IgRE1BIG1hc3RlciBjaGFubmVsIDcgKi8KKworLyogS2V5cGFkIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIEtQQURfQ1RMICAweGZmYzA0MTAwICAgLyogQ29udHJvbHMga2V5cGFkIG1vZHVsZSBlbmFibGUgYW5kIGRpc2FibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEtQQURfUFJFU0NBTEUgIDB4ZmZjMDQxMDQgICAvKiBFc3RhYmxpc2ggYSB0aW1lIGJhc2UgZm9yIHByb2dyYW1pbmcgdGhlIEtQQURfTVNFTCByZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIEtQQURfTVNFTCAgMHhmZmMwNDEwOCAgIC8qIFNlbGVjdHMgZGVsYXkgcGFyYW1ldGVycyBmb3Iga2V5cGFkIGludGVyZmFjZSBzZW5zaXRpdml0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBLUEFEX1JPV0NPTCAgMHhmZmMwNDEwYyAgIC8qIENhcHR1cmVzIHRoZSByb3cgYW5kIGNvbHVtbiBvdXRwdXQgdmFsdWVzIG9mIHRoZSBrZXlzIHByZXNzZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBLUEFEX1NUQVQgIDB4ZmZjMDQxMTAgICAvKiBIb2xkcyBhbmQgY2xlYXJzIHRoZSBzdGF0dXMgb2YgdGhlIGtleXBhZCBpbnRlcmZhY2UgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBLUEFEX1NPRlRFVkFMICAweGZmYzA0MTE0ICAgLyogTGV0cyBzb2Z0d2FyZSBmb3JjZSBrZXlwYWQgaW50ZXJmYWNlIHRvIGNoZWNrIGZvciBrZXlzIGJlaW5nIHByZXNzZWQgKi8KKworLyogUGl4ZWwgQ29tcG9zaXRvciAoUElYQykgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUElYQ19DVEwgIDB4ZmZjMDQ0MDAgICAvKiBPdmVybGF5IGVuYWJsZSwgcmVzYW1wbGluZyBtb2RlLCBJL08gZGF0YSBmb3JtYXQsIHRyYW5zcGFyZW5jeSBlbmFibGUsIHdhdGVybWFyayBsZXZlbCwgRklGTyBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgUElYQ19QUEwgIDB4ZmZjMDQ0MDQgICAvKiBIb2xkcyB0aGUgbnVtYmVyIG9mIHBpeGVscyBwZXIgbGluZSBvZiB0aGUgZGlzcGxheSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBQSVhDX0xQRiAgMHhmZmMwNDQwOCAgIC8qIEhvbGRzIHRoZSBudW1iZXIgb2YgbGluZXMgcGVyIGZyYW1lIG9mIHRoZSBkaXNwbGF5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19BSFNUQVJUICAweGZmYzA0NDBjICAgLyogQ29udGFpbnMgaG9yaXpvbnRhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQUhFTkQgIDB4ZmZjMDQ0MTAgICAvKiBDb250YWlucyBob3Jpem9udGFsIGVuZCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0FWU1RBUlQgIDB4ZmZjMDQ0MTQgICAvKiBDb250YWlucyB2ZXJ0aWNhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQSkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQVZFTkQgIDB4ZmZjMDQ0MTggICAvKiBDb250YWlucyB2ZXJ0aWNhbCBlbmQgcGl4ZWwgaW5mb3JtYXRpb24gb2YgdGhlIG92ZXJsYXkgZGF0YSAoc2V0IEEpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19BVFJBTlNQICAweGZmYzA0NDFjICAgLyogQ29udGFpbnMgdGhlIHRyYW5zcGFyZW5jeSByYXRpbyAoc2V0IEEpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19CSFNUQVJUICAweGZmYzA0NDIwICAgLyogQ29udGFpbnMgaG9yaXpvbnRhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQkhFTkQgIDB4ZmZjMDQ0MjQgICAvKiBDb250YWlucyBob3Jpem9udGFsIGVuZCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSVhDX0JWU1RBUlQgIDB4ZmZjMDQ0MjggICAvKiBDb250YWlucyB2ZXJ0aWNhbCBzdGFydCBwaXhlbCBpbmZvcm1hdGlvbiBvZiB0aGUgb3ZlcmxheSBkYXRhIChzZXQgQikgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfQlZFTkQgIDB4ZmZjMDQ0MmMgICAvKiBDb250YWlucyB2ZXJ0aWNhbCBlbmQgcGl4ZWwgaW5mb3JtYXRpb24gb2YgdGhlIG92ZXJsYXkgZGF0YSAoc2V0IEIpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElYQ19CVFJBTlNQICAweGZmYzA0NDMwICAgLyogQ29udGFpbnMgdGhlIHRyYW5zcGFyZW5jeSByYXRpbyAoc2V0IEIpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQSVhDX0lOVFJTVEFUICAweGZmYzA0NDNjICAgLyogT3ZlcmxheSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbi9zdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBJWENfUllDT04gIDB4ZmZjMDQ0NDAgICAvKiBDb2xvciBzcGFjZSBjb252ZXJzaW9uIG1hdHJpeCByZWdpc3Rlci4gQ29udGFpbnMgdGhlIFIvWSBjb252ZXJzaW9uIGNvZWZmaWNpZW50cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUElYQ19HVUNPTiAgMHhmZmMwNDQ0NCAgIC8qIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gbWF0cml4IHJlZ2lzdGVyLiBDb250YWlucyB0aGUgRy9VIGNvbnZlcnNpb24gY29lZmZpY2llbnRzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQSVhDX0JWQ09OICAweGZmYzA0NDQ4ICAgLyogQ29sb3Igc3BhY2UgY29udmVyc2lvbiBtYXRyaXggcmVnaXN0ZXIuIENvbnRhaW5zIHRoZSBCL1YgY29udmVyc2lvbiBjb2VmZmljaWVudHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUElYQ19DQ0JJQVMgIDB4ZmZjMDQ0NGMgICAvKiBCaWFzIHZhbHVlcyBmb3IgdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gbWF0cml4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQSVhDX1RDICAweGZmYzA0NDUwICAgLyogSG9sZHMgdGhlIHRyYW5zcGFyZW50IGNvbG9yIHZhbHVlICovCisKKy8qIEhhbmRzaGFrZSBNRE1BIDAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE1ETUEwX0NPTlRST0wgIDB4ZmZjMDQ1MDAgICAvKiBIYW5kc2hha2UgTURNQTAgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUEwX0VDSU5JVCAgMHhmZmMwNDUwNCAgIC8qIEhhbmRzaGFrZSBNRE1BMCBJbml0aWFsIEVkZ2UgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMF9CQ0lOSVQgIDB4ZmZjMDQ1MDggICAvKiBIYW5kc2hha2UgTURNQTAgSW5pdGlhbCBCbG9jayBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEhNRE1BMF9FQ1VSR0VOVCAgMHhmZmMwNDUwYyAgIC8qIEhhbmRzaGFrZSBNRE1BMCBVcmdlbnQgRWRnZSBDb3VudCBUaHJlc2hob2xkIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIEhNRE1BMF9FQ09WRVJGTE9XICAweGZmYzA0NTEwICAgLyogSGFuZHNoYWtlIE1ETUEwIEVkZ2UgQ291bnQgT3ZlcmZsb3cgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTBfRUNPVU5UICAweGZmYzA0NTE0ICAgLyogSGFuZHNoYWtlIE1ETUEwIEN1cnJlbnQgRWRnZSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUEwX0JDT1VOVCAgMHhmZmMwNDUxOCAgIC8qIEhhbmRzaGFrZSBNRE1BMCBDdXJyZW50IEJsb2NrIENvdW50IFJlZ2lzdGVyICovCisKKy8qIEhhbmRzaGFrZSBNRE1BIDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE1ETUExX0NPTlRST0wgIDB4ZmZjMDQ1NDAgICAvKiBIYW5kc2hha2UgTURNQTEgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUExX0VDSU5JVCAgMHhmZmMwNDU0NCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBJbml0aWFsIEVkZ2UgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhNRE1BMV9CQ0lOSVQgIDB4ZmZjMDQ1NDggICAvKiBIYW5kc2hha2UgTURNQTEgSW5pdGlhbCBCbG9jayBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEhNRE1BMV9FQ1VSR0VOVCAgMHhmZmMwNDU0YyAgIC8qIEhhbmRzaGFrZSBNRE1BMSBVcmdlbnQgRWRnZSBDb3VudCBUaHJlc2hob2xkIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIEhNRE1BMV9FQ09WRVJGTE9XICAweGZmYzA0NTUwICAgLyogSGFuZHNoYWtlIE1ETUExIEVkZ2UgQ291bnQgT3ZlcmZsb3cgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBITURNQTFfRUNPVU5UICAweGZmYzA0NTU0ICAgLyogSGFuZHNoYWtlIE1ETUExIEN1cnJlbnQgRWRnZSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSE1ETUExX0JDT1VOVCAgMHhmZmMwNDU1OCAgIC8qIEhhbmRzaGFrZSBNRE1BMSBDdXJyZW50IEJsb2NrIENvdW50IFJlZ2lzdGVyICovCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogICAgIFNJTkdMRSBCSVQgTUFDUk8gUEFJUlMgKGJpdCBtYXNrIGFuZCBuZWdhdGVkIG9uZSkgICAgICAqLworLyogICAgIGFuZCBNVUxUSSBCSVQgUkVBRCBNQUNST1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUElYQ19FTiAgMHgxICAgICAgICAvKiBQaXhlbCBDb21wb3NpdG9yIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5QSVhDX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX0FfRU4gIDB4MiAgICAgICAgLyogT3ZlcmxheSBBIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk9WUl9BX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX0JfRU4gIDB4NCAgICAgICAgLyogT3ZlcmxheSBCIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk9WUl9CX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSU1HX0ZPUk0gIDB4OCAgICAgICAgLyogSW1hZ2UgRGF0YSBGb3JtYXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5JTUdfRk9STSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIE9WUl9GT1JNICAweDEwICAgICAgIC8qIE92ZXJsYXkgRGF0YSBGb3JtYXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5PVlJfRk9STSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIE9VVF9GT1JNICAweDIwICAgICAgIC8qIE91dHB1dCBEYXRhIEZvcm1hdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk9VVF9GT1JNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVEU19NT0QgIDB4NDAgICAgICAgLyogUmVzYW1wbGluZyBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblVEU19NT0QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUQ19FTiAgMHg4MCAgICAgICAvKiBUcmFuc3BhcmVudCBDb2xvciBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UQ19FTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIElNR19TVEFUICAweDMwMCAgICAgIC8qIEltYWdlIEZJRk8gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgT1ZSX1NUQVQgIDB4YzAwICAgICAgLyogT3ZlcmxheSBGSUZPIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgV01fTFZMICAweDMwMDAgICAgIC8qIEZJRk8gV2F0ZXJtYXJrIExldmVsICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19BSFNUQVJUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBBX0hTVEFSVCAgMHhmZmYgICAgICAvKiBIb3Jpem9udGFsIFN0YXJ0IENvb3JkaW5hdGVzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19BSEVORCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBX0hFTkQgIDB4ZmZmICAgICAgLyogSG9yaXpvbnRhbCBFbmQgQ29vcmRpbmF0ZXMgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0FWU1RBUlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFfVlNUQVJUICAweDNmZiAgICAgIC8qIFZlcnRpY2FsIFN0YXJ0IENvb3JkaW5hdGVzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19BVkVORCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBX1ZFTkQgIDB4M2ZmICAgICAgLyogVmVydGljYWwgRW5kIENvb3JkaW5hdGVzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19BVFJBTlNQICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBBX1RSQU5TUCAgMHhmICAgICAgICAvKiBUcmFuc3BhcmVuY3kgVmFsdWUgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0JIU1RBUlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEJfSFNUQVJUICAweGZmZiAgICAgIC8qIEhvcml6b250YWwgU3RhcnQgQ29vcmRpbmF0ZXMgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0JIRU5EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJfSEVORCAgMHhmZmYgICAgICAvKiBIb3Jpem9udGFsIEVuZCBDb29yZGluYXRlcyAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfQlZTVEFSVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQl9WU1RBUlQgIDB4M2ZmICAgICAgLyogVmVydGljYWwgU3RhcnQgQ29vcmRpbmF0ZXMgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0JWRU5EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJfVkVORCAgMHgzZmYgICAgICAvKiBWZXJ0aWNhbCBFbmQgQ29vcmRpbmF0ZXMgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX0JUUkFOU1AgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEJfVFJBTlNQICAweGYgICAgICAgIC8qIFRyYW5zcGFyZW5jeSBWYWx1ZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFBJWENfSU5UUlNUQVQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBPVlJfSU5UX0VOICAweDEgICAgICAgIC8qIEludGVycnVwdCBhdCBFbmQgb2YgTGFzdCBWYWxpZCBPdmVybGF5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgbk9WUl9JTlRfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRlJNX0lOVF9FTiAgMHgyICAgICAgICAvKiBJbnRlcnJ1cHQgYXQgRW5kIG9mIEZyYW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkZSTV9JTlRfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE9WUl9JTlRfU1RBVCAgMHg0ICAgICAgICAvKiBPdmVybGF5IEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk9WUl9JTlRfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgRlJNX0lOVF9TVEFUICAweDggICAgICAgIC8qIEZyYW1lIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkZSTV9JTlRfU1RBVCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFBJWENfUllDT04gKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTExICAweDNmZiAgICAgIC8qIEExMSBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMTIgIDB4ZmZjMDAgICAgLyogQTEyIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEExMyAgMHgzZmYwMDAwMCAvKiBBMTMgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFJZX01VTFQ0ICAweDQwMDAwMDAwIC8qIE11bHRpcGx5IFJvdyBieSA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUllfTVVMVDQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBQSVhDX0dVQ09OICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEyMSAgMHgzZmYgICAgICAvKiBBMjEgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTIyICAweGZmYzAwICAgIC8qIEEyMiBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMjMgIDB4M2ZmMDAwMDAgLyogQTIzIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBHVV9NVUxUNCAgMHg0MDAwMDAwMCAvKiBNdWx0aXBseSBSb3cgYnkgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkdVX01VTFQ0ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgUElYQ19CVkNPTiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMzEgIDB4M2ZmICAgICAgLyogQTMxIGluIHRoZSBDb2VmZmljaWVudCBNYXRyaXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEEzMiAgMHhmZmMwMCAgICAvKiBBMzIgaW4gdGhlIENvZWZmaWNpZW50IE1hdHJpeCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTMzICAweDNmZjAwMDAwIC8qIEEzMyBpbiB0aGUgQ29lZmZpY2llbnQgTWF0cml4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQlZfTVVMVDQgIDB4NDAwMDAwMDAgLyogTXVsdGlwbHkgUm93IGJ5IDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5CVl9NVUxUNCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFBJWENfQ0NCSUFTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEExNCAgMHgzZmYgICAgICAvKiBBMTQgaW4gdGhlIEJpYXMgVmVjdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBMjQgIDB4ZmZjMDAgICAgLyogQTI0IGluIHRoZSBCaWFzIFZlY3RvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQTM0ICAweDNmZjAwMDAwIC8qIEEzNCBpbiB0aGUgQmlhcyBWZWN0b3IgKi8KKworLyogQml0IG1hc2tzIGZvciBQSVhDX1RDICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBSWV9UUkFOUyAgMHhmZiAgICAgICAvKiBUcmFuc3BhcmVudCBDb2xvciAtIFIvWSBDb21wb25lbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBHVV9UUkFOUyAgMHhmZjAwICAgICAvKiBUcmFuc3BhcmVudCBDb2xvciAtIEcvVSBDb21wb25lbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBCVl9UUkFOUyAgMHhmZjAwMDAgICAvKiBUcmFuc3BhcmVudCBDb2xvciAtIEIvViBDb21wb25lbnQgKi8KKworLyogQml0IG1hc2tzIGZvciBIT1NUX0NPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBIT1NUX0VOICAweDEgICAgICAgIC8qIEhvc3QgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkhPU1RfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX0VORCAgMHgyICAgICAgICAvKiBIb3N0IEVuZGlhbmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkhPU1RfRU5EICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBEQVRBX1NJWkUgIDB4NCAgICAgICAgLyogRGF0YSBTaXplICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5EQVRBX1NJWkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX1JTVCAgMHg4ICAgICAgICAvKiBIb3N0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSE9TVF9SU1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIUkRZX09WUiAgMHgyMCAgICAgICAvKiBIb3N0IFJlYWR5IE92ZXJyaWRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSFJEWV9PVlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBJTlRfTU9ERSAgMHg0MCAgICAgICAvKiBJbnRlcnJ1cHQgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklOVF9NT0RFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQlRfRU4gIDB4ODAgICAgICAgLyogQnVzIFRpbWVvdXQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQlRfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEVIVyAgMHgxMDAgICAgICAvKiBFbmFibGUgSG9zdCBXcml0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuRUhXICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBFSFIgIDB4MjAwICAgICAgLyogRW5hYmxlIEhvc3QgUmVhZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuRUhSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBCRFIgIDB4NDAwICAgICAgLyogQnVyc3QgRE1BIFJlcXVlc3RzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5CRFIgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBIT1NUX1NUQVRVUyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkVBRFkgIDB4MSAgICAgICAgLyogRE1BIFJlYWR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkVBRFkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBGSUZPRlVMTCAgMHgyICAgICAgICAvKiBGSUZPIEZ1bGwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5GSUZPRlVMTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRklGT0VNUFRZICAweDQgICAgICAgIC8qIEZJRk8gRW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkZJRk9FTVBUWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIENPTVBMRVRFICAweDggICAgICAgIC8qIERNQSBDb21wbGV0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkNPTVBMRVRFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhTSEsgIDB4MTAgICAgICAgLyogSG9zdCBIYW5kc2hha2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuSFNISyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FT1VUICAweDIwICAgICAgIC8qIEhvc3QgVGltZW91dCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5USU1FT1VUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEhJUlEgIDB4NDAgICAgICAgLyogSG9zdCBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5ISVJRICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEFMTE9XX0NORkcgIDB4ODAgICAgICAgLyogQWxsb3cgTmV3IENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQUxMT1dfQ05GRyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUFfRElSICAweDEwMCAgICAgIC8qIERNQSBEaXJlY3Rpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRE1BX0RJUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQlRFICAweDIwMCAgICAgIC8qIEJ1cyBUaW1lb3V0IEVuYWJsZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkJURSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEhPU1RfVElNRU9VVCAqLworCisjZGVmaW5lICAgICAgICAgICAgIENPVU5UX1RJTUVPVVQgIDB4N2ZmICAgICAgLyogSG9zdCBUaW1lb3V0IGNvdW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9DT05GSUcgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTVhWUkVOICAweDEgICAgICAgIC8qIE1YVlIgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NWFZSRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTU1TTSAgMHgyICAgICAgICAvKiBNWFZSIE1hc3Rlci9TbGF2ZSBNb2RlIFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NTVNNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBQ1RJVkUgIDB4NCAgICAgICAgLyogQWN0aXZlIE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkFDVElWRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RFTEFZICAweDggICAgICAgIC8qIFN5bmNocm9ub3VzIERhdGEgRGVsYXkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblNERUxBWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBOQ01SWEVOICAweDEwICAgICAgIC8qIE5vcm1hbCBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTkNNUlhFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBSV1JSWEVOICAweDIwICAgICAgIC8qIFJlbW90ZSBXcml0ZSBSZWNlaXZlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5SV1JSWEVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTVRYRU4gIDB4NDAgICAgICAgLyogTVhWUiBUcmFuc21pdCBEYXRhIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk1UWEVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNVFhPTkIgIDB4ODAgICAgICAgLyogTVhWUiBQaHkgVHJhbnNtaXR0ZXIgT24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1UWE9OQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUEFSSVRZICAweDEwMCAgICAgIC8qIEV2ZW4gUGFyaXR5IFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FUEFSSVRZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBNU0IgIDB4MWUwMCAgICAgLyogTWFzdGVyIFN5bmNocm9ub3VzIEJvdW5kYXJ5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBUFJYRU4gIDB4MjAwMCAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQVBSWEVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBXQUtFVVAgIDB4NDAwMCAgICAgLyogV2FrZS1VcCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuV0FLRVVQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTE1FQ0ggIDB4ODAwMCAgICAgLyogTG9jayBNZWNoYW5pc20gU2VsZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTE1FQ0ggIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX1NUQVRFXzAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBOQUNUICAweDEgICAgICAgIC8qIE5ldHdvcmsgQWN0aXZpdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTkFDVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0JMT0NLICAweDIgICAgICAgIC8qIFN1cGVyIEJsb2NrIExvY2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblNCTE9DSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBGTVBMTFNUICAweGMgICAgICAgIC8qIEZyZXF1ZW5jeSBNdWx0aXBseSBQTEwgU00gU3RhdGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDRFJQTExTVCAgMHhlMCAgICAgICAvKiBDbG9jay9EYXRhIFJlY292ZXJ5IFBMTCBTTSBTdGF0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFQQlNZICAweDEwMCAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgVHJhbnNtaXQgQnVmZmVyIEJ1c3kgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5BUEJTWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFQQVJCICAweDIwMCAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgQXJiaXRyYXRpbmcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5BUEFSQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBUFRYICAweDQwMCAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgVHJhbnNtaXR0aW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkFQVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQVBSWCAgMHg4MDAgICAgICAvKiBSZWNlaXZpbmcgQXN5bmNocm9ub3VzIFBhY2tldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BUFJYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ01CU1kgIDB4MTAwMCAgICAgLyogQ29udHJvbCBNZXNzYWdlIFRyYW5zbWl0IEJ1ZmZlciBCdXN5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ01CU1kgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDTUFSQiAgMHgyMDAwICAgICAvKiBDb250cm9sIE1lc3NhZ2UgQXJiaXRyYXRpbmcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DTUFSQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTVRYICAweDQwMDAgICAgIC8qIENvbnRyb2wgTWVzc2FnZSBUcmFuc21pdHRpbmcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQ01UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTVJYICAweDgwMDAgICAgIC8qIFJlY2VpdmluZyBDb250cm9sIE1lc3NhZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQ01SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTVJYT05CICAweDEwMDAwICAgIC8qIE1SWE9OQiBQaW4gU3RhdGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1SWE9OQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJHU0lQICAweDIwMDAwICAgIC8qIFJlbW90ZSBHZXQgU291cmNlIEluIFByb2dyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkdTSVAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBEQUxJUCAgMHg0MDAwMCAgICAvKiBSZXNvdXJjZSBEZWFsbG9jYXRlIEluIFByb2dyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuREFMSVAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQUxJUCAgMHg4MDAwMCAgICAvKiBSZXNvdXJjZSBBbGxvY2F0ZSBJbiBQcm9ncmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BTElQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUlJESVAgIDB4MTAwMDAwICAgLyogUmVtb3RlIFJlYWQgSW4gUHJvZ3Jlc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SUkRJUCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJXUklQICAweDIwMDAwMCAgIC8qIFJlbW90ZSBXcml0ZSBJbiBQcm9ncmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJXUklQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRkxPQ0sgIDB4NDAwMDAwICAgLyogRnJhbWUgTG9jayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkZMT0NLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQkxPQ0sgIDB4ODAwMDAwICAgLyogQmxvY2sgTG9jayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkJMT0NLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBSU0IgIDB4ZjAwMDAwMCAgLyogUmVjZWl2ZWQgU3luY2hyb25vdXMgQm91bmRhcnkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgREVSUk5VTSAgMHhmMDAwMDAwMCAvKiBETUEgRXJyb3IgQ2hhbm5lbCBOdW1iZXIgKi8KKworLyogQml0IG1hc2tzIGZvciBNWFZSX1NUQVRFXzEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTUlhOVU1CICAweGYgICAgICAgIC8qIFN5bmNocm9ub3VzIFJlY2VpdmUgRklGTyBOdW1iZXIgb2YgQnl0ZXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU1RYTlVNQiAgMHhmMCAgICAgICAvKiBTeW5jaHJvbm91cyBUcmFuc21pdCBGSUZPIE51bWJlciBvZiBCeXRlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQVBDT05UICAweDEwMCAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgQ29udGludWF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5BUENPTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBPQkVSUk5VTSAgMHhlMDAgICAgICAvKiBETUEgT3V0IG9mIEJvdW5kcyBFcnJvciBDaGFubmVsIE51bWJlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBETUFBQ1RJVkUwICAweDEwMDAwICAgIC8qIERNQTAgQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkRNQUFDVElWRTAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRE1BQUNUSVZFMSAgMHgyMDAwMCAgICAvKiBETUExIEFjdGl2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5ETUFBQ1RJVkUxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIERNQUFDVElWRTIgIDB4NDAwMDAgICAgLyogRE1BMiBBY3RpdmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRE1BQUNUSVZFMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBETUFBQ1RJVkUzICAweDgwMDAwICAgIC8qIERNQTMgQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkRNQUFDVElWRTMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRE1BQUNUSVZFNCAgMHgxMDAwMDAgICAvKiBETUE0IEFjdGl2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5ETUFBQ1RJVkU0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIERNQUFDVElWRTUgIDB4MjAwMDAwICAgLyogRE1BNSBBY3RpdmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRE1BQUNUSVZFNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBETUFBQ1RJVkU2ICAweDQwMDAwMCAgIC8qIERNQTYgQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkRNQUFDVElWRTYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRE1BQUNUSVZFNyAgMHg4MDAwMDAgICAvKiBETUE3IEFjdGl2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5ETUFBQ1RJVkU3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BUE1FTjAgIDB4MTAwMDAwMCAgLyogRE1BMCBQYXR0ZXJuIE1hdGNoaW5nIEVuYWJsZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUFQTUVOMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQVBNRU4xICAweDIwMDAwMDAgIC8qIERNQTEgUGF0dGVybiBNYXRjaGluZyBFbmFibGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BUE1FTjEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUFQTUVOMiAgMHg0MDAwMDAwICAvKiBETUEyIFBhdHRlcm4gTWF0Y2hpbmcgRW5hYmxlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQVBNRU4yICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BUE1FTjMgIDB4ODAwMDAwMCAgLyogRE1BMyBQYXR0ZXJuIE1hdGNoaW5nIEVuYWJsZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUFQTUVOMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQVBNRU40ICAweDEwMDAwMDAwIC8qIERNQTQgUGF0dGVybiBNYXRjaGluZyBFbmFibGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BUE1FTjQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUFQTUVONSAgMHgyMDAwMDAwMCAvKiBETUE1IFBhdHRlcm4gTWF0Y2hpbmcgRW5hYmxlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkRNQVBNRU41ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BUE1FTjYgIDB4NDAwMDAwMDAgLyogRE1BNiBQYXR0ZXJuIE1hdGNoaW5nIEVuYWJsZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUFQTUVONiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQVBNRU43ICAweDgwMDAwMDAwIC8qIERNQTcgUGF0dGVybiBNYXRjaGluZyBFbmFibGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRE1BUE1FTjcgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0lOVF9TVEFUXzAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBOSTJBICAweDEgICAgICAgIC8qIE5ldHdvcmsgSW5hY3RpdmUgdG8gQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk5JMkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTkEySSAgMHgyICAgICAgICAvKiBOZXR3b3JrIEFjdGl2ZSB0byBJbmFjdGl2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5OQTJJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0JVMkwgIDB4NCAgICAgICAgLyogU3VwZXIgQmxvY2sgVW5sb2NrIHRvIExvY2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5TQlUyTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNCTDJVICAweDggICAgICAgIC8qIFN1cGVyIEJsb2NrIExvY2sgdG8gVW5sb2NrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuU0JMMlUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBSVSAgMHgxMCAgICAgICAvKiBQb3NpdGlvbiBSZWdpc3RlciBVcGRhdGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5QUlUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTVBSVSAgMHgyMCAgICAgICAvKiBNYXhpbXVtIFBvc2l0aW9uIFJlZ2lzdGVyIFVwZGF0ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTVBSVSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRFJVICAweDQwICAgICAgIC8qIERlbGF5IFJlZ2lzdGVyIFVwZGF0ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkRSVSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNRFJVICAweDgwICAgICAgIC8qIE1heGltdW0gRGVsYXkgUmVnaXN0ZXIgVXBkYXRlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NRFJVICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBTQlUgIDB4MTAwICAgICAgLyogU3luY2hyb25vdXMgQm91bmRhcnkgVXBkYXRlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuU0JVICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBVFUgIDB4MjAwICAgICAgLyogQWxsb2NhdGlvbiBUYWJsZSBVcGRhdGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5BVFUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRkNaMCAgMHg0MDAgICAgICAvKiBGcmFtZSBDb3VudGVyIDAgWmVybyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5GQ1owICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEZDWjEgIDB4ODAwICAgICAgLyogRnJhbWUgQ291bnRlciAxIFplcm8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuRkNaMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQRVJSICAweDEwMDAgICAgIC8qIFBhcml0eSBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5QRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1IMkwgIDB4MjAwMCAgICAgLyogTVJYT05CIEhpZ2ggdG8gTG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1IMkwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUwySCAgMHg0MDAwICAgICAvKiBNUlhPTkIgTG93IHRvIEhpZ2ggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUwySCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgV1VQICAweDgwMDAgICAgIC8qIFdha2UtVXAgUHJlYW1ibGUgUmVjZWl2ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbldVUCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGVTJMICAweDEwMDAwICAgIC8qIEZyYW1lIFVubG9jayB0byBMb2NrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkZVMkwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRkwyVSAgMHgyMDAwMCAgICAvKiBGcmFtZSBMb2NrIHRvIFVubG9jayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5GTDJVICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJVMkwgIDB4NDAwMDAgICAgLyogQmxvY2sgVW5sb2NrIHRvIExvY2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQlUyTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCTDJVICAweDgwMDAwICAgIC8qIEJsb2NrIExvY2sgdG8gVW5sb2NrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkJMMlUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBPQkVSUiAgMHgxMDAwMDAgICAvKiBETUEgT3V0IG9mIEJvdW5kcyBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk9CRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQRkwgIDB4MjAwMDAwICAgLyogUExMIEZyZXF1ZW5jeSBMb2NrZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblBGTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgU0NaICAweDQwMDAwMCAgIC8qIFN5c3RlbSBDbG9jayBDb3VudGVyIFplcm8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblNDWiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGRVJSICAweDgwMDAwMCAgIC8qIEZJRk8gRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuRkVSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ01SICAweDEwMDAwMDAgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQ01SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ01ST0YgIDB4MjAwMDAwMCAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIE92ZXJmbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ01ST0YgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ01UUyAgMHg0MDAwMDAwICAvKiBDb250cm9sIE1lc3NhZ2UgVHJhbnNtaXQgQnVmZmVyIFN1Y2Nlc3NmdWxseSBTZW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkNNVFMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ01UQyAgMHg4MDAwMDAwICAvKiBDb250cm9sIE1lc3NhZ2UgVHJhbnNtaXQgQnVmZmVyIFN1Y2Nlc3NmdWxseSBDYW5jZWxsZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQ01UQyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSV1JDICAweDEwMDAwMDAwIC8qIFJlbW90ZSBXcml0ZSBDb250cm9sIE1lc3NhZ2UgQ29tcGxldGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJXUkMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEJDWiAgMHgyMDAwMDAwMCAvKiBCbG9jayBDb3VudGVyIFplcm8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkJDWiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEJNRVJSICAweDQwMDAwMDAwIC8qIEJpcGhhc2UgTWFyayBDb2RpbmcgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5CTUVSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBERVJSICAweDgwMDAwMDAwIC8qIERNQSBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5ERVJSICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9JTlRfU1RBVF8xICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhET05FMCAgMHgxICAgICAgICAvKiBETUEwIEhhbGYgRG9uZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuSERPTkUwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE9ORTAgIDB4MiAgICAgICAgLyogRE1BMCBEb25lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRE9ORTAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEFQUiAgMHg0ICAgICAgICAvKiBBc3luY2hyb25vdXMgUGFja2V0IFJlY2VpdmVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5BUFIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBBUFJPRiAgMHg4ICAgICAgICAvKiBBc3luY2hyb25vdXMgUGFja2V0IFJlY2VpdmUgQnVmZmVyIE92ZXJmbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQVBST0YgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEhET05FMSAgMHgxMCAgICAgICAvKiBETUExIEhhbGYgRG9uZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuSERPTkUxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE9ORTEgIDB4MjAgICAgICAgLyogRE1BMSBEb25lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRE9ORTEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQVBUUyAgMHg0MCAgICAgICAvKiBBc3luY2hyb25vdXMgUGFja2V0IFRyYW5zbWl0IEJ1ZmZlciBTdWNjZXNzZnVsbHkgU2VudCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BUFRTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFQVEMgIDB4ODAgICAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBUcmFuc21pdCBCdWZmZXIgU3VjY2Vzc2Z1bGx5IENhbmNlbGxlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BUFRDICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBIRE9ORTIgIDB4MTAwICAgICAgLyogRE1BMiBIYWxmIERvbmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkhET05FMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERPTkUyICAweDIwMCAgICAgIC8qIERNQTIgRG9uZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkRPTkUyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQVBSQ0UgIDB4NDAwICAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIENSQyBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkFQUkNFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQVBSUEUgIDB4ODAwICAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIFBhY2tldCBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkFQUlBFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBIRE9ORTMgIDB4MTAwMCAgICAgLyogRE1BMyBIYWxmIERvbmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkhET05FMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERPTkUzICAweDIwMDAgICAgIC8qIERNQTMgRG9uZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkRPTkUzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBIRE9ORTQgIDB4MTAwMDAgICAgLyogRE1BNCBIYWxmIERvbmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkhET05FNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERPTkU0ICAweDIwMDAwICAgIC8qIERNQTQgRG9uZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkRPTkU0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBIRE9ORTUgIDB4MTAwMDAwICAgLyogRE1BNSBIYWxmIERvbmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkhET05FNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERPTkU1ICAweDIwMDAwMCAgIC8qIERNQTUgRG9uZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkRPTkU1ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBIRE9ORTYgIDB4MTAwMDAwMCAgLyogRE1BNiBIYWxmIERvbmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkhET05FNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERPTkU2ICAweDIwMDAwMDAgIC8qIERNQTYgRG9uZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkRPTkU2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBIRE9ORTcgIDB4MTAwMDAwMDAgLyogRE1BNyBIYWxmIERvbmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkhET05FNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERPTkU3ICAweDIwMDAwMDAwIC8qIERNQTcgRG9uZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkRPTkU3ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9JTlRfRU5fMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBOSTJBRU4gIDB4MSAgICAgICAgLyogTmV0d29yayBJbmFjdGl2ZSB0byBBY3RpdmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTkkyQUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBOQTJJRU4gIDB4MiAgICAgICAgLyogTmV0d29yayBBY3RpdmUgdG8gSW5hY3RpdmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTkEySUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNCVTJMRU4gIDB4NCAgICAgICAgLyogU3VwZXIgQmxvY2sgVW5sb2NrIHRvIExvY2sgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TQlUyTEVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNCTDJVRU4gIDB4OCAgICAgICAgLyogU3VwZXIgQmxvY2sgTG9jayB0byBVbmxvY2sgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TQkwyVUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUFJVRU4gIDB4MTAgICAgICAgLyogUG9zaXRpb24gUmVnaXN0ZXIgVXBkYXRlZCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUFJVRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1QUlVFTiAgMHgyMCAgICAgICAvKiBNYXhpbXVtIFBvc2l0aW9uIFJlZ2lzdGVyIFVwZGF0ZWQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTVBSVUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRFJVRU4gIDB4NDAgICAgICAgLyogRGVsYXkgUmVnaXN0ZXIgVXBkYXRlZCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRFJVRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1EUlVFTiAgMHg4MCAgICAgICAvKiBNYXhpbXVtIERlbGF5IFJlZ2lzdGVyIFVwZGF0ZWQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTURSVUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0JVRU4gIDB4MTAwICAgICAgLyogU3luY2hyb25vdXMgQm91bmRhcnkgVXBkYXRlZCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuU0JVRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBBVFVFTiAgMHgyMDAgICAgICAvKiBBbGxvY2F0aW9uIFRhYmxlIFVwZGF0ZWQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkFUVUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBGQ1owRU4gIDB4NDAwICAgICAgLyogRnJhbWUgQ291bnRlciAwIFplcm8gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRkNaMEVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBGQ1oxRU4gIDB4ODAwICAgICAgLyogRnJhbWUgQ291bnRlciAxIFplcm8gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRkNaMUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQRVJSRU4gIDB4MTAwMCAgICAgLyogUGFyaXR5IEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblBFUlJFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUgyTEVOICAweDIwMDAgICAgIC8qIE1SWE9OQiBIaWdoIHRvIExvdyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NSDJMRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1MMkhFTiAgMHg0MDAwICAgICAvKiBNUlhPTkIgTG93IHRvIEhpZ2ggSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUwySEVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgV1VQRU4gIDB4ODAwMCAgICAgLyogV2FrZS1VcCBQcmVhbWJsZSBSZWNlaXZlZCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuV1VQRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZVMkxFTiAgMHgxMDAwMCAgICAvKiBGcmFtZSBVbmxvY2sgdG8gTG9jayBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5GVTJMRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZMMlVFTiAgMHgyMDAwMCAgICAvKiBGcmFtZSBMb2NrIHRvIFVubG9jayBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5GTDJVRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJVMkxFTiAgMHg0MDAwMCAgICAvKiBCbG9jayBVbmxvY2sgdG8gTG9jayBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5CVTJMRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJMMlVFTiAgMHg4MDAwMCAgICAvKiBCbG9jayBMb2NrIHRvIFVubG9jayBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5CTDJVRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgT0JFUlJFTiAgMHgxMDAwMDAgICAvKiBETUEgT3V0IG9mIEJvdW5kcyBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk9CRVJSRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQRkxFTiAgMHgyMDAwMDAgICAvKiBQTEwgRnJlcXVlbmN5IExvY2tlZCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUEZMRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTQ1pFTiAgMHg0MDAwMDAgICAvKiBTeXN0ZW0gQ2xvY2sgQ291bnRlciBaZXJvIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5TQ1pFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRkVSUkVOICAweDgwMDAwMCAgIC8qIEZJRk8gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRkVSUkVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ01SRU4gIDB4MTAwMDAwMCAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmVkIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DTVJFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTVJPRkVOICAweDIwMDAwMDAgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkNNUk9GRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENNVFNFTiAgMHg0MDAwMDAwICAvKiBDb250cm9sIE1lc3NhZ2UgVHJhbnNtaXQgQnVmZmVyIFN1Y2Nlc3NmdWxseSBTZW50IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNNVFNFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ01UQ0VOICAweDgwMDAwMDAgIC8qIENvbnRyb2wgTWVzc2FnZSBUcmFuc21pdCBCdWZmZXIgU3VjY2Vzc2Z1bGx5IENhbmNlbGxlZCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DTVRDRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFJXUkNFTiAgMHgxMDAwMDAwMCAvKiBSZW1vdGUgV3JpdGUgQ29udHJvbCBNZXNzYWdlIENvbXBsZXRlZCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5SV1JDRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBCQ1pFTiAgMHgyMDAwMDAwMCAvKiBCbG9jayBDb3VudGVyIFplcm8gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkJDWkVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEJNRVJSRU4gIDB4NDAwMDAwMDAgLyogQmlwaGFzZSBNYXJrIENvZGluZyBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkJNRVJSRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERFUlJFTiAgMHg4MDAwMDAwMCAvKiBETUEgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuREVSUkVOICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9JTlRfRU5fMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSERPTkVFTjAgIDB4MSAgICAgICAgLyogRE1BMCBIYWxmIERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkhET05FRU4wICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERPTkVFTjAgIDB4MiAgICAgICAgLyogRE1BMCBEb25lIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRE9ORUVOMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFQUkVOICAweDQgICAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgUmVjZWl2ZWQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkFQUkVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEFQUk9GRU4gIDB4OCAgICAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIEJ1ZmZlciBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkFQUk9GRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIRE9ORUVOMSAgMHgxMCAgICAgICAvKiBETUExIEhhbGYgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSERPTkVFTjEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE9ORUVOMSAgMHgyMCAgICAgICAvKiBETUExIERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ET05FRU4xICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBUFRTRU4gIDB4NDAgICAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBUcmFuc21pdCBCdWZmZXIgU3VjY2Vzc2Z1bGx5IFNlbnQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQVBUU0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBUFRDRU4gIDB4ODAgICAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBUcmFuc21pdCBCdWZmZXIgU3VjY2Vzc2Z1bGx5IENhbmNlbGxlZCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5BUFRDRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIRE9ORUVOMiAgMHgxMDAgICAgICAvKiBETUEyIEhhbGYgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSERPTkVFTjIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE9ORUVOMiAgMHgyMDAgICAgICAvKiBETUEyIERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ET05FRU4yICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEFQUkNFRU4gIDB4NDAwICAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIENSQyBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkFQUkNFRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQVBSUEVFTiAgMHg4MDAgICAgICAvKiBBc3luY2hyb25vdXMgUGFja2V0IFJlY2VpdmUgUGFja2V0IEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQVBSUEVFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEhET05FRU4zICAweDEwMDAgICAgIC8qIERNQTMgSGFsZiBEb25lIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5IRE9ORUVOMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBET05FRU4zICAweDIwMDAgICAgIC8qIERNQTMgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRPTkVFTjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIRE9ORUVONCAgMHgxMDAwMCAgICAvKiBETUE0IEhhbGYgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSERPTkVFTjQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE9ORUVONCAgMHgyMDAwMCAgICAvKiBETUE0IERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ET05FRU40ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSERPTkVFTjUgIDB4MTAwMDAwICAgLyogRE1BNSBIYWxmIERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkhET05FRU41ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERPTkVFTjUgIDB4MjAwMDAwICAgLyogRE1BNSBEb25lIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRE9ORUVONSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEhET05FRU42ICAweDEwMDAwMDAgIC8qIERNQTYgSGFsZiBEb25lIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5IRE9ORUVONiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBET05FRU42ICAweDIwMDAwMDAgIC8qIERNQTYgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRPTkVFTjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIRE9ORUVONyAgMHgxMDAwMDAwMCAvKiBETUE3IEhhbGYgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSERPTkVFTjcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE9ORUVONyAgMHgyMDAwMDAwMCAvKiBETUE3IERvbmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ET05FRU43ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9QT1NJVElPTiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUE9TSVRJT04gIDB4M2YgICAgICAgLyogTm9kZSBQb3NpdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUFZBTElEICAweDgwMDAgICAgIC8qIE5vZGUgUG9zaXRpb24gVmFsaWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblBWQUxJRCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfTUFYX1BPU0lUSU9OICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1QT1NJVElPTiAgMHgzZiAgICAgICAvKiBNYXhpbXVtIE5vZGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTVBWQUxJRCAgMHg4MDAwICAgICAvKiBNYXhpbXVtIE5vZGUgUG9zaXRpb24gVmFsaWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTVBWQUxJRCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfREVMQVkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERFTEFZICAweDNmICAgICAgIC8qIE5vZGUgRnJhbWUgRGVsYXkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERWQUxJRCAgMHg4MDAwICAgICAvKiBOb2RlIEZyYW1lIERlbGF5IFZhbGlkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5EVkFMSUQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX01BWF9ERUxBWSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNREVMQVkgIDB4M2YgICAgICAgLyogTWF4aW11bSBOb2RlIEZyYW1lIERlbGF5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1EVkFMSUQgIDB4ODAwMCAgICAgLyogTWF4aW11bSBOb2RlIEZyYW1lIERlbGF5IFZhbGlkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1EVkFMSUQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0xBRERSICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBMQUREUiAgMHhmZmZmICAgICAvKiBMb2dpY2FsIEFkZHJlc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIExWQUxJRCAgMHg4MDAwMDAwMCAvKiBMb2dpY2FsIEFkZHJlc3MgVmFsaWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkxWQUxJRCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfR0FERFIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgR0FERFJMICAweGZmICAgICAgIC8qIEdyb3VwIEFkZHJlc3MgTG93ZXIgQnl0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgR1ZBTElEICAweDgwMDAgICAgIC8qIEdyb3VwIEFkZHJlc3MgVmFsaWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkdWQUxJRCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfQUFERFIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEFBRERSICAweGZmZmYgICAgIC8qIEFsdGVybmF0ZSBBZGRyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBVkFMSUQgIDB4ODAwMDAwMDAgLyogQWx0ZXJuYXRlIEFkZHJlc3MgVmFsaWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkFWQUxJRCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfQUxMT0NfMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDTDAgIDB4N2YgICAgICAgLyogQ2hhbm5lbCAwIENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0lVMCAgMHg4MCAgICAgICAvKiBDaGFubmVsIDAgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkNJVTAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENMMSAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDAgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDSVUxICAweDgwMDAgICAgIC8qIENoYW5uZWwgMCBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQ0lVMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0wyICAweDdmMDAwMCAgIC8qIENoYW5uZWwgMCBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENJVTIgIDB4ODAwMDAwICAgLyogQ2hhbm5lbCAwIEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5DSVUyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDTDMgIDB4N2YwMDAwMDAgLyogQ2hhbm5lbCAwIENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0lVMyAgMHg4MDAwMDAwMCAvKiBDaGFubmVsIDAgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkNJVTMgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0w0ICAweDdmICAgICAgIC8qIENoYW5uZWwgNCBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENJVTQgIDB4ODAgICAgICAgLyogQ2hhbm5lbCA0IEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5DSVU0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDTDUgIDB4N2YwMCAgICAgLyogQ2hhbm5lbCA1IENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0lVNSAgMHg4MDAwICAgICAvKiBDaGFubmVsIDUgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkNJVTUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENMNiAgMHg3ZjAwMDAgICAvKiBDaGFubmVsIDYgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDSVU2ICAweDgwMDAwMCAgIC8qIENoYW5uZWwgNiBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQ0lVNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0w3ICAweDdmMDAwMDAwIC8qIENoYW5uZWwgNyBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENJVTcgIDB4ODAwMDAwMDAgLyogQ2hhbm5lbCA3IEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5DSVU3ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BTExPQ18yICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENMOCAgMHg3ZiAgICAgICAvKiBDaGFubmVsIDggQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDSVU4ICAweDgwICAgICAgIC8qIENoYW5uZWwgOCBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQ0lVOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0w5ICAweDdmMDAgICAgIC8qIENoYW5uZWwgOSBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENJVTkgIDB4ODAwMCAgICAgLyogQ2hhbm5lbCA5IEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5DSVU5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMTAgIDB4N2YwMDAwICAgLyogQ2hhbm5lbCAxMCBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMTAgIDB4ODAwMDAwICAgLyogQ2hhbm5lbCAxMCBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVUxMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDExICAweDdmMDAwMDAwIC8qIENoYW5uZWwgMTEgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTExICAweDgwMDAwMDAwIC8qIENoYW5uZWwgMTEgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMTEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDEyICAweDdmICAgICAgIC8qIENoYW5uZWwgMTIgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTEyICAweDgwICAgICAgIC8qIENoYW5uZWwgMTIgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMTIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wxMyAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDEzIENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUxMyAgMHg4MDAwICAgICAvKiBDaGFubmVsIDEzIEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMTQgIDB4N2YwMDAwICAgLyogQ2hhbm5lbCAxNCBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMTQgIDB4ODAwMDAwICAgLyogQ2hhbm5lbCAxNCBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVUxNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDE1ICAweDdmMDAwMDAwIC8qIENoYW5uZWwgMTUgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTE1ICAweDgwMDAwMDAwIC8qIENoYW5uZWwgMTUgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMTUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDE2ICAweDdmICAgICAgIC8qIENoYW5uZWwgMTYgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTE2ICAweDgwICAgICAgIC8qIENoYW5uZWwgMTYgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMTYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wxNyAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDE3IENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUxNyAgMHg4MDAwICAgICAvKiBDaGFubmVsIDE3IEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTE3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMTggIDB4N2YwMDAwICAgLyogQ2hhbm5lbCAxOCBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMTggIDB4ODAwMDAwICAgLyogQ2hhbm5lbCAxOCBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVUxOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDE5ICAweDdmMDAwMDAwIC8qIENoYW5uZWwgMTkgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTE5ICAweDgwMDAwMDAwIC8qIENoYW5uZWwgMTkgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMTkgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDIwICAweDdmICAgICAgIC8qIENoYW5uZWwgMjAgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTIwICAweDgwICAgICAgIC8qIENoYW5uZWwgMjAgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wyMSAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDIxIENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUyMSAgMHg4MDAwICAgICAvKiBDaGFubmVsIDIxIEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTIxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMjIgIDB4N2YwMDAwICAgLyogQ2hhbm5lbCAyMiBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMjIgIDB4ODAwMDAwICAgLyogQ2hhbm5lbCAyMiBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVUyMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDIzICAweDdmMDAwMDAwIC8qIENoYW5uZWwgMjMgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTIzICAweDgwMDAwMDAwIC8qIENoYW5uZWwgMjMgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMjMgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzYgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDI0ICAweDdmICAgICAgIC8qIENoYW5uZWwgMjQgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTI0ICAweDgwICAgICAgIC8qIENoYW5uZWwgMjQgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMjQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wyNSAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDI1IENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUyNSAgMHg4MDAwICAgICAvKiBDaGFubmVsIDI1IEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTI1ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMjYgIDB4N2YwMDAwICAgLyogQ2hhbm5lbCAyNiBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMjYgIDB4ODAwMDAwICAgLyogQ2hhbm5lbCAyNiBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVUyNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDI3ICAweDdmMDAwMDAwIC8qIENoYW5uZWwgMjcgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTI3ICAweDgwMDAwMDAwIC8qIENoYW5uZWwgMjcgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMjcgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzcgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDI4ICAweDdmICAgICAgIC8qIENoYW5uZWwgMjggQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTI4ICAweDgwICAgICAgIC8qIENoYW5uZWwgMjggSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wyOSAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDI5IENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUyOSAgMHg4MDAwICAgICAvKiBDaGFubmVsIDI5IEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTI5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMzAgIDB4N2YwMDAwICAgLyogQ2hhbm5lbCAzMCBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMzAgIDB4ODAwMDAwICAgLyogQ2hhbm5lbCAzMCBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVUzMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDMxICAweDdmMDAwMDAwIC8qIENoYW5uZWwgMzEgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTMxICAweDgwMDAwMDAwIC8qIENoYW5uZWwgMzEgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMzEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzggKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDMyICAweDdmICAgICAgIC8qIENoYW5uZWwgMzIgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTMyICAweDgwICAgICAgIC8qIENoYW5uZWwgMzIgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMzIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wzMyAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDMzIENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUzMyAgMHg4MDAwICAgICAvKiBDaGFubmVsIDMzIEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTMzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMzQgIDB4N2YwMDAwICAgLyogQ2hhbm5lbCAzNCBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMzQgIDB4ODAwMDAwICAgLyogQ2hhbm5lbCAzNCBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVUzNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDM1ICAweDdmMDAwMDAwIC8qIENoYW5uZWwgMzUgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTM1ICAweDgwMDAwMDAwIC8qIENoYW5uZWwgMzUgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMzUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDM2ICAweDdmICAgICAgIC8qIENoYW5uZWwgMzYgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTM2ICAweDgwICAgICAgIC8qIENoYW5uZWwgMzYgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMzYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0wzNyAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDM3IENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVUzNyAgMHg4MDAwICAgICAvKiBDaGFubmVsIDM3IEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTM3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMMzggIDB4N2YwMDAwICAgLyogQ2hhbm5lbCAzOCBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVMzggIDB4ODAwMDAwICAgLyogQ2hhbm5lbCAzOCBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVUzOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDM5ICAweDdmMDAwMDAwIC8qIENoYW5uZWwgMzkgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTM5ICAweDgwMDAwMDAwIC8qIENoYW5uZWwgMzkgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVMzkgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzEwICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w0MCAgMHg3ZiAgICAgICAvKiBDaGFubmVsIDQwIENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU0MCAgMHg4MCAgICAgICAvKiBDaGFubmVsIDQwIEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTQwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNDEgIDB4N2YwMCAgICAgLyogQ2hhbm5lbCA0MSBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNDEgIDB4ODAwMCAgICAgLyogQ2hhbm5lbCA0MSBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVU0MSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDQyICAweDdmMDAwMCAgIC8qIENoYW5uZWwgNDIgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTQyICAweDgwMDAwMCAgIC8qIENoYW5uZWwgNDIgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVNDIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w0MyAgMHg3ZjAwMDAwMCAvKiBDaGFubmVsIDQzIENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU0MyAgMHg4MDAwMDAwMCAvKiBDaGFubmVsIDQzIEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTQzICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BTExPQ18xMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNDQgIDB4N2YgICAgICAgLyogQ2hhbm5lbCA0NCBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNDQgIDB4ODAgICAgICAgLyogQ2hhbm5lbCA0NCBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVU0NCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDQ1ICAweDdmMDAgICAgIC8qIENoYW5uZWwgNDUgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTQ1ICAweDgwMDAgICAgIC8qIENoYW5uZWwgNDUgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVNDUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w0NiAgMHg3ZjAwMDAgICAvKiBDaGFubmVsIDQ2IENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU0NiAgMHg4MDAwMDAgICAvKiBDaGFubmVsIDQ2IEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTQ2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNDcgIDB4N2YwMDAwMDAgLyogQ2hhbm5lbCA0NyBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNDcgIDB4ODAwMDAwMDAgLyogQ2hhbm5lbCA0NyBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVU0NyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfQUxMT0NfMTIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDQ4ICAweDdmICAgICAgIC8qIENoYW5uZWwgNDggQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTQ4ICAweDgwICAgICAgIC8qIENoYW5uZWwgNDggSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVNDggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w0OSAgMHg3ZjAwICAgICAvKiBDaGFubmVsIDQ5IENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU0OSAgMHg4MDAwICAgICAvKiBDaGFubmVsIDQ5IEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTQ5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNTAgIDB4N2YwMDAwICAgLyogQ2hhbm5lbCA1MCBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNTAgIDB4ODAwMDAwICAgLyogQ2hhbm5lbCA1MCBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVU1MCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDUxICAweDdmMDAwMDAwIC8qIENoYW5uZWwgNTEgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTUxICAweDgwMDAwMDAwIC8qIENoYW5uZWwgNTEgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVNTEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FMTE9DXzEzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w1MiAgMHg3ZiAgICAgICAvKiBDaGFubmVsIDUyIENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU1MiAgMHg4MCAgICAgICAvKiBDaGFubmVsIDUyIEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTUyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNTMgIDB4N2YwMCAgICAgLyogQ2hhbm5lbCA1MyBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNTMgIDB4ODAwMCAgICAgLyogQ2hhbm5lbCA1MyBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVU1MyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDU0ICAweDdmMDAwMCAgIC8qIENoYW5uZWwgNTQgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTU0ICAweDgwMDAwMCAgIC8qIENoYW5uZWwgNTQgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVNTQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w1NSAgMHg3ZjAwMDAwMCAvKiBDaGFubmVsIDU1IENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU1NSAgMHg4MDAwMDAwMCAvKiBDaGFubmVsIDU1IEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTU1ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BTExPQ18xNCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNTYgIDB4N2YgICAgICAgLyogQ2hhbm5lbCA1NiBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNTYgIDB4ODAgICAgICAgLyogQ2hhbm5lbCA1NiBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVU1NiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTDU3ICAweDdmMDAgICAgIC8qIENoYW5uZWwgNTcgQ29ubmVjdGlvbiBMYWJlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENJVTU3ICAweDgwMDAgICAgIC8qIENoYW5uZWwgNTcgSW4gVXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0lVNTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0w1OCAgMHg3ZjAwMDAgICAvKiBDaGFubmVsIDU4IENvbm5lY3Rpb24gTGFiZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDSVU1OCAgMHg4MDAwMDAgICAvKiBDaGFubmVsIDU4IEluIFVzZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNJVTU4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENMNTkgIDB4N2YwMDAwMDAgLyogQ2hhbm5lbCA1OSBDb25uZWN0aW9uIExhYmVsICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0lVNTkgIDB4ODAwMDAwMDAgLyogQ2hhbm5lbCA1OSBJbiBVc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DSVU1OSAgMHgwICAgICAgIAorCisvKiBNWFZSX1NZTkNfTENIQU5fMCBNYXNrcyAqLworCisjZGVmaW5lIExDSEFOUEMwICAgICAweDAwMDAwMDBGbHUKKyNkZWZpbmUgTENIQU5QQzEgICAgIDB4MDAwMDAwRjBsdQorI2RlZmluZSBMQ0hBTlBDMiAgICAgMHgwMDAwMEYwMGx1CisjZGVmaW5lIExDSEFOUEMzICAgICAweDAwMDBGMDAwbHUKKyNkZWZpbmUgTENIQU5QQzQgICAgIDB4MDAwRjAwMDBsdQorI2RlZmluZSBMQ0hBTlBDNSAgICAgMHgwMEYwMDAwMGx1CisjZGVmaW5lIExDSEFOUEM2ICAgICAweDBGMDAwMDAwbHUKKyNkZWZpbmUgTENIQU5QQzcgICAgIDB4RjAwMDAwMDBsdQorCisKKy8qIE1YVlJfU1lOQ19MQ0hBTl8xIE1hc2tzICovCisKKyNkZWZpbmUgTENIQU5QQzggICAgIDB4MDAwMDAwMEZsdQorI2RlZmluZSBMQ0hBTlBDOSAgICAgMHgwMDAwMDBGMGx1CisjZGVmaW5lIExDSEFOUEMxMCAgICAweDAwMDAwRjAwbHUKKyNkZWZpbmUgTENIQU5QQzExICAgIDB4MDAwMEYwMDBsdQorI2RlZmluZSBMQ0hBTlBDMTIgICAgMHgwMDBGMDAwMGx1CisjZGVmaW5lIExDSEFOUEMxMyAgICAweDAwRjAwMDAwbHUKKyNkZWZpbmUgTENIQU5QQzE0ICAgIDB4MEYwMDAwMDBsdQorI2RlZmluZSBMQ0hBTlBDMTUgICAgMHhGMDAwMDAwMGx1CisKKworLyogTVhWUl9TWU5DX0xDSEFOXzIgTWFza3MgKi8KKworI2RlZmluZSBMQ0hBTlBDMTYgICAgMHgwMDAwMDAwRmx1CisjZGVmaW5lIExDSEFOUEMxNyAgICAweDAwMDAwMEYwbHUKKyNkZWZpbmUgTENIQU5QQzE4ICAgIDB4MDAwMDBGMDBsdQorI2RlZmluZSBMQ0hBTlBDMTkgICAgMHgwMDAwRjAwMGx1CisjZGVmaW5lIExDSEFOUEMyMCAgICAweDAwMEYwMDAwbHUKKyNkZWZpbmUgTENIQU5QQzIxICAgIDB4MDBGMDAwMDBsdQorI2RlZmluZSBMQ0hBTlBDMjIgICAgMHgwRjAwMDAwMGx1CisjZGVmaW5lIExDSEFOUEMyMyAgICAweEYwMDAwMDAwbHUKKworCisvKiBNWFZSX1NZTkNfTENIQU5fMyBNYXNrcyAqLworCisjZGVmaW5lIExDSEFOUEMyNCAgICAweDAwMDAwMDBGbHUKKyNkZWZpbmUgTENIQU5QQzI1ICAgIDB4MDAwMDAwRjBsdQorI2RlZmluZSBMQ0hBTlBDMjYgICAgMHgwMDAwMEYwMGx1CisjZGVmaW5lIExDSEFOUEMyNyAgICAweDAwMDBGMDAwbHUKKyNkZWZpbmUgTENIQU5QQzI4ICAgIDB4MDAwRjAwMDBsdQorI2RlZmluZSBMQ0hBTlBDMjkgICAgMHgwMEYwMDAwMGx1CisjZGVmaW5lIExDSEFOUEMzMCAgICAweDBGMDAwMDAwbHUKKyNkZWZpbmUgTENIQU5QQzMxICAgIDB4RjAwMDAwMDBsdQorCisKKy8qIE1YVlJfU1lOQ19MQ0hBTl80IE1hc2tzICovCisKKyNkZWZpbmUgTENIQU5QQzMyICAgIDB4MDAwMDAwMEZsdQorI2RlZmluZSBMQ0hBTlBDMzMgICAgMHgwMDAwMDBGMGx1CisjZGVmaW5lIExDSEFOUEMzNCAgICAweDAwMDAwRjAwbHUKKyNkZWZpbmUgTENIQU5QQzM1ICAgIDB4MDAwMEYwMDBsdQorI2RlZmluZSBMQ0hBTlBDMzYgICAgMHgwMDBGMDAwMGx1CisjZGVmaW5lIExDSEFOUEMzNyAgICAweDAwRjAwMDAwbHUKKyNkZWZpbmUgTENIQU5QQzM4ICAgIDB4MEYwMDAwMDBsdQorI2RlZmluZSBMQ0hBTlBDMzkgICAgMHhGMDAwMDAwMGx1CisKKworLyogTVhWUl9TWU5DX0xDSEFOXzUgTWFza3MgKi8KKworI2RlZmluZSBMQ0hBTlBDNDAgICAgMHgwMDAwMDAwRmx1CisjZGVmaW5lIExDSEFOUEM0MSAgICAweDAwMDAwMEYwbHUKKyNkZWZpbmUgTENIQU5QQzQyICAgIDB4MDAwMDBGMDBsdQorI2RlZmluZSBMQ0hBTlBDNDMgICAgMHgwMDAwRjAwMGx1CisjZGVmaW5lIExDSEFOUEM0NCAgICAweDAwMEYwMDAwbHUKKyNkZWZpbmUgTENIQU5QQzQ1ICAgIDB4MDBGMDAwMDBsdQorI2RlZmluZSBMQ0hBTlBDNDYgICAgMHgwRjAwMDAwMGx1CisjZGVmaW5lIExDSEFOUEM0NyAgICAweEYwMDAwMDAwbHUKKworCisvKiBNWFZSX1NZTkNfTENIQU5fNiBNYXNrcyAqLworCisjZGVmaW5lIExDSEFOUEM0OCAgICAweDAwMDAwMDBGbHUKKyNkZWZpbmUgTENIQU5QQzQ5ICAgIDB4MDAwMDAwRjBsdQorI2RlZmluZSBMQ0hBTlBDNTAgICAgMHgwMDAwMEYwMGx1CisjZGVmaW5lIExDSEFOUEM1MSAgICAweDAwMDBGMDAwbHUKKyNkZWZpbmUgTENIQU5QQzUyICAgIDB4MDAwRjAwMDBsdQorI2RlZmluZSBMQ0hBTlBDNTMgICAgMHgwMEYwMDAwMGx1CisjZGVmaW5lIExDSEFOUEM1NCAgICAweDBGMDAwMDAwbHUKKyNkZWZpbmUgTENIQU5QQzU1ICAgIDB4RjAwMDAwMDBsdQorCisKKy8qIE1YVlJfU1lOQ19MQ0hBTl83IE1hc2tzICovCisKKyNkZWZpbmUgTENIQU5QQzU2ICAgIDB4MDAwMDAwMEZsdQorI2RlZmluZSBMQ0hBTlBDNTcgICAgMHgwMDAwMDBGMGx1CisjZGVmaW5lIExDSEFOUEM1OCAgICAweDAwMDAwRjAwbHUKKyNkZWZpbmUgTENIQU5QQzU5ICAgIDB4MDAwMEYwMDBsdQorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfRE1BeF9DT05GSUcgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTURNQUVOICAweDEgICAgICAgIC8qIERNQSBDaGFubmVsIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTURNQUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgREQgIDB4MiAgICAgICAgLyogRE1BIENoYW5uZWwgRGlyZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBuREQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEJZNFNXQVBFTiAgMHgyMCAgICAgICAvKiBETUEgQ2hhbm5lbCBGb3VyIEJ5dGUgU3dhcCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkJZNFNXQVBFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIExDSEFOICAweDNjMCAgICAgIC8qIERNQSBDaGFubmVsIExvZ2ljYWwgQ2hhbm5lbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQklUU1dBUEVOICAweDQwMCAgICAgIC8qIERNQSBDaGFubmVsIEJpdCBTd2FwIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuQklUU1dBUEVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBCWTJTV0FQRU4gIDB4ODAwICAgICAgLyogRE1BIENoYW5uZWwgVHdvIEJ5dGUgU3dhcCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkJZMlNXQVBFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1GTE9XICAweDcwMDAgICAgIC8qIERNQSBDaGFubmVsIE9wZXJhdGlvbiBGbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEZJWEVEUE0gIDB4ODAwMDAgICAgLyogRE1BIENoYW5uZWwgRml4ZWQgUGF0dGVybiBNYXRjaGluZyBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRklYRURQTSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFNUQVJUUEFUICAweDMwMDAwMCAgIC8qIERNQSBDaGFubmVsIFN0YXJ0IFBhdHRlcm4gU2VsZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNUT1BQQVQgIDB4YzAwMDAwICAgLyogRE1BIENoYW5uZWwgU3RvcCBQYXR0ZXJuIFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENPVU5UUE9TICAweDFjMDAwMDAwIC8qIERNQSBDaGFubmVsIENvdW50IFBvc2l0aW9uICovCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BUF9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTVEFSVEFQICAweDEgICAgICAgIC8qIFN0YXJ0IEFzeW5jaHJvbm91cyBQYWNrZXQgVHJhbnNtaXNzaW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblNUQVJUQVAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU5DRUxBUCAgMHgyICAgICAgICAvKiBDYW5jZWwgQXN5bmNocm9ub3VzIFBhY2tldCBUcmFuc21pc3Npb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5DQU5DRUxBUCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBSRVNFVEFQICAweDQgICAgICAgIC8qIFJlc2V0IEFzeW5jaHJvbm91cyBQYWNrZXQgQXJiaXRyYXRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuUkVTRVRBUCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQVBSQkUwICAweDQwMDAgICAgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgUmVjZWl2ZSBCdWZmZXIgRW50cnkgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQVBSQkUwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBBUFJCRTEgIDB4ODAwMCAgICAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIEJ1ZmZlciBFbnRyeSAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5BUFJCRTEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FQUkJfU1RBUlRfQUREUiAqLworCisjZGVmaW5lICAgICAgTVhWUl9BUFJCX1NUQVJUX0FERFIgIDB4MWZmZmZmZSAgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIEJ1ZmZlciBTdGFydCBBZGRyZXNzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9BUFJCX0NVUlJfQUREUiAqLworCisjZGVmaW5lICAgICAgIE1YVlJfQVBSQl9DVVJSX0FERFIgIDB4ZmZmZmZmZmYgLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIEJ1ZmZlciBDdXJyZW50IEFkZHJlc3MgKi8KKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FQVEJfU1RBUlRfQUREUiAqLworCisjZGVmaW5lICAgICAgIE1YVlJfQVBUQl9TVEFSVF9BRERSICAweDFmZmZmZmUgIC8qIEFzeW5jaHJvbm91cyBQYWNrZXQgVHJhbnNtaXQgQnVmZmVyIFN0YXJ0IEFkZHJlc3MgKi8KKworLyogQml0IG1hc2tzIGZvciBNWFZSX0FQVEJfQ1VSUl9BRERSICovCisKKyNkZWZpbmUgICAgICAgIE1YVlJfQVBUQl9DVVJSX0FERFIgIDB4ZmZmZmZmZmYgLyogQXN5bmNocm9ub3VzIFBhY2tldCBUcmFuc21pdCBCdWZmZXIgQ3VycmVudCBBZGRyZXNzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9DTV9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTVEFSVENNICAweDEgICAgICAgIC8qIFN0YXJ0IENvbnRyb2wgTWVzc2FnZSBUcmFuc21pc3Npb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuU1RBUlRDTSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTkNFTENNICAweDIgICAgICAgIC8qIENhbmNlbCBDb250cm9sIE1lc3NhZ2UgVHJhbnNtaXNzaW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQ0FOQ0VMQ00gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENNUkJFMCAgMHgxMDAwMCAgICAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgRW50cnkgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ01SQkUwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDTVJCRTEgIDB4MjAwMDAgICAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIEVudHJ5IDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNNUkJFMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ01SQkUyICAweDQwMDAwICAgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DTVJCRTIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENNUkJFMyAgMHg4MDAwMCAgICAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgRW50cnkgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ01SQkUzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDTVJCRTQgIDB4MTAwMDAwICAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIEVudHJ5IDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNNUkJFNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ01SQkU1ICAweDIwMDAwMCAgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSA1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DTVJCRTUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENNUkJFNiAgMHg0MDAwMDAgICAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgRW50cnkgNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ01SQkU2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDTVJCRTcgIDB4ODAwMDAwICAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIEVudHJ5IDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNNUkJFNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ01SQkU4ICAweDEwMDAwMDAgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSA4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DTVJCRTggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENNUkJFOSAgMHgyMDAwMDAwICAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgRW50cnkgOSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ01SQkU5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENNUkJFMTAgIDB4NDAwMDAwMCAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIEVudHJ5IDEwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkNNUkJFMTAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01SQkUxMSAgMHg4MDAwMDAwICAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgRW50cnkgMTEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ01SQkUxMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTVJCRTEyICAweDEwMDAwMDAwIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSAxMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DTVJCRTEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENNUkJFMTMgIDB4MjAwMDAwMDAgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIEVudHJ5IDEzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkNNUkJFMTMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01SQkUxNCAgMHg0MDAwMDAwMCAvKiBDb250cm9sIE1lc3NhZ2UgUmVjZWl2ZSBCdWZmZXIgRW50cnkgMTQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ01SQkUxNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTVJCRTE1ICAweDgwMDAwMDAwIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBFbnRyeSAxNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DTVJCRTE1ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9DTVJCX1NUQVJUX0FERFIgKi8KKworI2RlZmluZSAgICAgIE1YVlJfQ01SQl9TVEFSVF9BRERSICAweDFmZmZmZmUgIC8qIENvbnRyb2wgTWVzc2FnZSBSZWNlaXZlIEJ1ZmZlciBTdGFydCBBZGRyZXNzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9DTVJCX0NVUlJfQUREUiAqLworCisjZGVmaW5lICAgICAgIE1YVlJfQ01SQl9DVVJSX0FERFIgIDB4ZmZmZmZmZmYgLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIEN1cnJlbnQgQWRkcmVzcyAqLworCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfQ01UQl9TVEFSVF9BRERSICovCisKKyNkZWZpbmUgICAgICBNWFZSX0NNVEJfU1RBUlRfQUREUiAgMHgxZmZmZmZlICAvKiBDb250cm9sIE1lc3NhZ2UgVHJhbnNtaXQgQnVmZmVyIFN0YXJ0IEFkZHJlc3MgKi8KKworLyogQml0IG1hc2tzIGZvciBNWFZSX0NNVEJfQ1VSUl9BRERSICovCisKKyNkZWZpbmUgICAgICAgTVhWUl9DTVRCX0NVUlJfQUREUiAgMHhmZmZmZmZmZiAvKiBDb250cm9sIE1lc3NhZ2UgVHJhbnNtaXQgQnVmZmVyIEN1cnJlbnQgQWRkcmVzcyAqLworCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfUlJEQl9TVEFSVF9BRERSICovCisKKyNkZWZpbmUgICAgICBNWFZSX1JSREJfU1RBUlRfQUREUiAgMHgxZmZmZmZlICAvKiBSZW1vdGUgUmVhZCBCdWZmZXIgU3RhcnQgQWRkcmVzcyAqLworCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfUlJEQl9DVVJSX0FERFIgKi8KKworI2RlZmluZSAgICAgICBNWFZSX1JSREJfQ1VSUl9BRERSICAweGZmZmZmZmZmIC8qIFJlbW90ZSBSZWFkIEJ1ZmZlciBDdXJyZW50IEFkZHJlc3MgKi8KKworLyogQml0IG1hc2tzIGZvciBNWFZSX1BBVF9EQVRBeCAqLworCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9EQVRBXzAgIDB4ZmYgICAgICAgLyogUGF0dGVybiBNYXRjaCBEYXRhIEJ5dGUgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfREFUQV8xICAweGZmMDAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRGF0YSBCeXRlIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0RBVEFfMiAgMHhmZjAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIERhdGEgQnl0ZSAyICovCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9EQVRBXzMgIDB4ZmYwMDAwMDAgLyogUGF0dGVybiBNYXRjaCBEYXRhIEJ5dGUgMyAqLworCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfUEFUX0VOXzAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMF8wICAweDEgICAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMCBCaXQgMCAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMF8wICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8wXzEgIDB4MiAgICAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAwIEJpdCAxICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8wXzEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfMiAgMHg0ICAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzBfMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMF8zICAweDggICAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMCBCaXQgMyAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMF8zICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8wXzQgIDB4MTAgICAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAwIEJpdCA0ICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8wXzQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfNSAgMHgyMCAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzBfNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMF82ICAweDQwICAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMCBCaXQgNiAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMF82ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8wXzcgIDB4ODAgICAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAwIEJpdCA3ICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8wXzcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfMCAgMHgxMDAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzFfMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMV8xICAweDIwMCAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMSBCaXQgMSAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMV8xICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8xXzIgIDB4NDAwICAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAxIEJpdCAyICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8xXzIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfMyAgMHg4MDAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzFfMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMV80ICAweDEwMDAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMSBCaXQgNCAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMV80ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8xXzUgIDB4MjAwMCAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAxIEJpdCA1ICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8xXzUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfNiAgMHg0MDAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzFfNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMV83ICAweDgwMDAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMSBCaXQgNyAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMV83ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8yXzAgIDB4MTAwMDAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAyIEJpdCAwICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8yXzAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfMSAgMHgyMDAwMCAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzJfMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMl8yICAweDQwMDAwICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMiBCaXQgMiAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMl8yICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8yXzMgIDB4ODAwMDAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAyIEJpdCAzICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8yXzMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfNCAgMHgxMDAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzJfNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMl81ICAweDIwMDAwMCAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMiBCaXQgNSAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMl81ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8yXzYgIDB4NDAwMDAwICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAyIEJpdCA2ICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8yXzYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfNyAgMHg4MDAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzJfNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fM18wICAweDEwMDAwMDAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMyBCaXQgMCAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fM18wICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8zXzEgIDB4MjAwMDAwMCAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAzIEJpdCAxICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8zXzEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfMiAgMHg0MDAwMDAwICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzNfMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fM18zICAweDgwMDAwMDAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMyBCaXQgMyAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fM18zICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8zXzQgIDB4MTAwMDAwMDAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAzIEJpdCA0ICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8zXzQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfNSAgMHgyMDAwMDAwMCAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzNfNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fM182ICAweDQwMDAwMDAwIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMyBCaXQgNiAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fM182ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8zXzcgIDB4ODAwMDAwMDAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAzIEJpdCA3ICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8zXzcgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX1BBVF9FTl8xICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfMCAgMHgxICAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzBfMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMF8xICAweDIgICAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMCBCaXQgMSAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMF8xICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8wXzIgIDB4NCAgICAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAwIEJpdCAyICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8wXzIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfMyAgMHg4ICAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzBfMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMF80ICAweDEwICAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMCBCaXQgNCAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMF80ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8wXzUgIDB4MjAgICAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAwIEJpdCA1ICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8wXzUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzBfNiAgMHg0MCAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDAgQml0IDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzBfNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMF83ICAweDgwICAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMCBCaXQgNyAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMF83ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8xXzAgIDB4MTAwICAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAxIEJpdCAwICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8xXzAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfMSAgMHgyMDAgICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzFfMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMV8yICAweDQwMCAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMSBCaXQgMiAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMV8yICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8xXzMgIDB4ODAwICAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAxIEJpdCAzICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8xXzMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfNCAgMHgxMDAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzFfNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMV81ICAweDIwMDAgICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMSBCaXQgNSAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMV81ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8xXzYgIDB4NDAwMCAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAxIEJpdCA2ICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8xXzYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzFfNyAgMHg4MDAwICAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDEgQml0IDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzFfNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMl8wICAweDEwMDAwICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMiBCaXQgMCAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMl8wICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8yXzEgIDB4MjAwMDAgICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAyIEJpdCAxICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8yXzEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfMiAgMHg0MDAwMCAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzJfMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMl8zICAweDgwMDAwICAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMiBCaXQgMyAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMl8zICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8yXzQgIDB4MTAwMDAwICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAyIEJpdCA0ICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8yXzQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzJfNSAgMHgyMDAwMDAgICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDIgQml0IDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzJfNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fMl82ICAweDQwMDAwMCAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMiBCaXQgNiAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fMl82ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8yXzcgIDB4ODAwMDAwICAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAyIEJpdCA3ICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8yXzcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfMCAgMHgxMDAwMDAwICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzNfMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fM18xICAweDIwMDAwMDAgIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMyBCaXQgMSAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fM18xICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8zXzIgIDB4NDAwMDAwMCAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAzIEJpdCAyICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8zXzIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfMyAgMHg4MDAwMDAwICAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzNfMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fM180ICAweDEwMDAwMDAwIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMyBCaXQgNCAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fM180ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBNQVRDSF9FTl8zXzUgIDB4MjAwMDAwMDAgLyogUGF0dGVybiBNYXRjaCBFbmFibGUgQnl0ZSAzIEJpdCA1ICovCisjZGVmaW5lICAgICAgICAgICAgIG5NQVRDSF9FTl8zXzUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BVENIX0VOXzNfNiAgMHg0MDAwMDAwMCAvKiBQYXR0ZXJuIE1hdGNoIEVuYWJsZSBCeXRlIDMgQml0IDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BVENIX0VOXzNfNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgTUFUQ0hfRU5fM183ICAweDgwMDAwMDAwIC8qIFBhdHRlcm4gTWF0Y2ggRW5hYmxlIEJ5dGUgMyBCaXQgNyAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFUQ0hfRU5fM183ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9GUkFNRV9DTlRfMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEZDTlQgIDB4ZmZmZiAgICAgLyogRnJhbWUgQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBNWFZSX0ZSQU1FX0NOVF8xICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRkNOVCAgMHhmZmZmICAgICAvKiBGcmFtZSBDb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfUk9VVElOR18wICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRYX0NIMCAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNVVRFX0NIMCAgMHg4MCAgICAgICAvKiBNdXRlIENoYW5uZWwgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk1VVEVfQ0gwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUWF9DSDEgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVVURV9DSDEgIDB4ODAwMCAgICAgLyogTXV0ZSBDaGFubmVsIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5NVVRFX0NIMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQ0gyICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1VVEVfQ0gyICAweDgwMDAwMCAgIC8qIE11dGUgQ2hhbm5lbCAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuTVVURV9DSDIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRYX0NIMyAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNVVRFX0NIMyAgMHg4MDAwMDAwMCAvKiBNdXRlIENoYW5uZWwgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk1VVEVfQ0gzICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQ0g0ICAweDNmICAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1VVEVfQ0g0ICAweDgwICAgICAgIC8qIE11dGUgQ2hhbm5lbCA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuTVVURV9DSDQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRYX0NINSAgMHgzZjAwICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNVVRFX0NINSAgMHg4MDAwICAgICAvKiBNdXRlIENoYW5uZWwgNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk1VVEVfQ0g1ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUWF9DSDYgIDB4M2YwMDAwICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVVURV9DSDYgIDB4ODAwMDAwICAgLyogTXV0ZSBDaGFubmVsIDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5NVVRFX0NINiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQ0g3ICAweDNmMDAwMDAwIC8qIFRyYW5zbWl0IENoYW5uZWwgNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1VVEVfQ0g3ICAweDgwMDAwMDAwIC8qIE11dGUgQ2hhbm5lbCA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuTVVURV9DSDcgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX1JPVVRJTkdfMiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUWF9DSDggIDB4M2YgICAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVVURV9DSDggIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5NVVRFX0NIOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQ0g5ICAweDNmMDAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgOSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1VVEVfQ0g5ICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCA5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuTVVURV9DSDkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gxMCAgMHgzZjAwMDAgICAvKiBUcmFuc21pdCBDaGFubmVsIDEwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMTAgIDB4ODAwMDAwICAgLyogTXV0ZSBDaGFubmVsIDEwICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NIMTAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gxMSAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDExICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMTEgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDExICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NIMTEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX1JPVVRJTkdfMyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMTIgIDB4M2YgICAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAxMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDEyICAweDgwICAgICAgIC8qIE11dGUgQ2hhbm5lbCAxMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMTMgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAxMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDEzICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCAxMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMTQgIDB4M2YwMDAwICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAxNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDE0ICAweDgwMDAwMCAgIC8qIE11dGUgQ2hhbm5lbCAxNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMTUgIDB4M2YwMDAwMDAgLyogVHJhbnNtaXQgQ2hhbm5lbCAxNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDE1ICAweDgwMDAwMDAwIC8qIE11dGUgQ2hhbm5lbCAxNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDE1ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDE2ICAweDNmICAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMTYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gxNiAgMHg4MCAgICAgICAvKiBNdXRlIENoYW5uZWwgMTYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0gxNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDE3ICAweDNmMDAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMTcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gxNyAgMHg4MDAwICAgICAvKiBNdXRlIENoYW5uZWwgMTcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0gxNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDE4ICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMTggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gxOCAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgMTggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0gxOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDE5ICAweDNmMDAwMDAwIC8qIFRyYW5zbWl0IENoYW5uZWwgMTkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gxOSAgMHg4MDAwMDAwMCAvKiBNdXRlIENoYW5uZWwgMTkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0gxOSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfUk9VVElOR181ICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gyMCAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDIwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMjAgIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDIwICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NIMjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gyMSAgMHgzZjAwICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDIxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMjEgIDB4ODAwMCAgICAgLyogTXV0ZSBDaGFubmVsIDIxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NIMjEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gyMiAgMHgzZjAwMDAgICAvKiBUcmFuc21pdCBDaGFubmVsIDIyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMjIgIDB4ODAwMDAwICAgLyogTXV0ZSBDaGFubmVsIDIyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NIMjIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gyMyAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDIzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMjMgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDIzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NIMjMgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX1JPVVRJTkdfNiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMjQgIDB4M2YgICAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAyNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDI0ICAweDgwICAgICAgIC8qIE11dGUgQ2hhbm5lbCAyNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDI0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMjUgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAyNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDI1ICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCAyNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDI1ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMjYgIDB4M2YwMDAwICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAyNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDI2ICAweDgwMDAwMCAgIC8qIE11dGUgQ2hhbm5lbCAyNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDI2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMjcgIDB4M2YwMDAwMDAgLyogVHJhbnNtaXQgQ2hhbm5lbCAyNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDI3ICAweDgwMDAwMDAwIC8qIE11dGUgQ2hhbm5lbCAyNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDI3ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzcgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDI4ICAweDNmICAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMjggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gyOCAgMHg4MCAgICAgICAvKiBNdXRlIENoYW5uZWwgMjggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0gyOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDI5ICAweDNmMDAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMjkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gyOSAgMHg4MDAwICAgICAvKiBNdXRlIENoYW5uZWwgMjkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0gyOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDMwICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgMzAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gzMCAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgMzAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0gzMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDMxICAweDNmMDAwMDAwIC8qIFRyYW5zbWl0IENoYW5uZWwgMzEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0gzMSAgMHg4MDAwMDAwMCAvKiBNdXRlIENoYW5uZWwgMzEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0gzMSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfUk9VVElOR184ICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gzMiAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDMyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMzIgIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDMyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NIMzIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gzMyAgMHgzZjAwICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDMzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMzMgIDB4ODAwMCAgICAgLyogTXV0ZSBDaGFubmVsIDMzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NIMzMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gzNCAgMHgzZjAwMDAgICAvKiBUcmFuc21pdCBDaGFubmVsIDM0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMzQgIDB4ODAwMDAwICAgLyogTXV0ZSBDaGFubmVsIDM0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NIMzQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0gzNSAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDM1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NIMzUgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDM1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NIMzUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX1JPVVRJTkdfOSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMzYgIDB4M2YgICAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAzNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDM2ICAweDgwICAgICAgIC8qIE11dGUgQ2hhbm5lbCAzNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDM2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMzcgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAzNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDM3ICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCAzNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDM3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMzggIDB4M2YwMDAwICAgLyogVHJhbnNtaXQgQ2hhbm5lbCAzOCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDM4ICAweDgwMDAwMCAgIC8qIE11dGUgQ2hhbm5lbCAzOCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDM4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NIMzkgIDB4M2YwMDAwMDAgLyogVHJhbnNtaXQgQ2hhbm5lbCAzOSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDM5ICAweDgwMDAwMDAwIC8qIE11dGUgQ2hhbm5lbCAzOSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDM5ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzEwICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g0MCAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDQwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINDAgIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDQwICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NINDAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g0MSAgMHgzZjAwICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDQxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINDEgIDB4ODAwMCAgICAgLyogTXV0ZSBDaGFubmVsIDQxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NINDEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g0MiAgMHgzZjAwMDAgICAvKiBUcmFuc21pdCBDaGFubmVsIDQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINDIgIDB4ODAwMDAwICAgLyogTXV0ZSBDaGFubmVsIDQyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NINDIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g0MyAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDQzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINDMgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDQzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NINDMgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX1JPVVRJTkdfMTEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDQ0ICAweDNmICAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g0NCAgMHg4MCAgICAgICAvKiBNdXRlIENoYW5uZWwgNDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0g0NCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDQ1ICAweDNmMDAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g0NSAgMHg4MDAwICAgICAvKiBNdXRlIENoYW5uZWwgNDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0g0NSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDQ2ICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g0NiAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgNDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0g0NiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDQ3ICAweDNmMDAwMDAwIC8qIFRyYW5zbWl0IENoYW5uZWwgNDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g0NyAgMHg4MDAwMDAwMCAvKiBNdXRlIENoYW5uZWwgNDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0g0NyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfUk9VVElOR18xMiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NINDggIDB4M2YgICAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA0OCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDQ4ICAweDgwICAgICAgIC8qIE11dGUgQ2hhbm5lbCA0OCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDQ4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NINDkgIDB4M2YwMCAgICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA0OSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDQ5ICAweDgwMDAgICAgIC8qIE11dGUgQ2hhbm5lbCA0OSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDQ5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NINTAgIDB4M2YwMDAwICAgLyogVHJhbnNtaXQgQ2hhbm5lbCA1MCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDUwICAweDgwMDAwMCAgIC8qIE11dGUgQ2hhbm5lbCA1MCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDUwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRYX0NINTEgIDB4M2YwMDAwMDAgLyogVHJhbnNtaXQgQ2hhbm5lbCA1MSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTVVURV9DSDUxICAweDgwMDAwMDAwIC8qIE11dGUgQ2hhbm5lbCA1MSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuTVVURV9DSDUxICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9ST1VUSU5HXzEzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g1MiAgMHgzZiAgICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDUyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINTIgIDB4ODAgICAgICAgLyogTXV0ZSBDaGFubmVsIDUyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NINTIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g1MyAgMHgzZjAwICAgICAvKiBUcmFuc21pdCBDaGFubmVsIDUzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINTMgIDB4ODAwMCAgICAgLyogTXV0ZSBDaGFubmVsIDUzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NINTMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g1NCAgMHgzZjAwMDAgICAvKiBUcmFuc21pdCBDaGFubmVsIDU0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINTQgIDB4ODAwMDAwICAgLyogTXV0ZSBDaGFubmVsIDU0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NINTQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFhfQ0g1NSAgMHgzZjAwMDAwMCAvKiBUcmFuc21pdCBDaGFubmVsIDU1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNVVRFX0NINTUgIDB4ODAwMDAwMDAgLyogTXV0ZSBDaGFubmVsIDU1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5NVVRFX0NINTUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBNWFZSX1JPVVRJTkdfMTQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDU2ICAweDNmICAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNTYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g1NiAgMHg4MCAgICAgICAvKiBNdXRlIENoYW5uZWwgNTYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0g1NiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDU3ICAweDNmMDAgICAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNTcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g1NyAgMHg4MDAwICAgICAvKiBNdXRlIENoYW5uZWwgNTcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0g1NyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDU4ICAweDNmMDAwMCAgIC8qIFRyYW5zbWl0IENoYW5uZWwgNTggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g1OCAgMHg4MDAwMDAgICAvKiBNdXRlIENoYW5uZWwgNTggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0g1OCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUWF9DSDU5ICAweDNmMDAwMDAwIC8qIFRyYW5zbWl0IENoYW5uZWwgNTkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1VVEVfQ0g1OSAgMHg4MDAwMDAwMCAvKiBNdXRlIENoYW5uZWwgNTkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk1VVEVfQ0g1OSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfQkxPQ0tfQ05UICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQkNOVCAgMHhmZmZmICAgICAvKiBCbG9jayBDb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfQ0xLX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTVhUQUxDRU4gIDB4MSAgICAgICAgLyogTVhWUiBDcnlzdGFsIE9zY2lsbGF0b3IgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuTVhUQUxDRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNWFRBTEZFTiAgMHgyICAgICAgICAvKiBNWFZSIENyeXN0YWwgT3NjaWxsYXRvciBGZWVkYmFjayBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5NWFRBTEZFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIE1YVEFMTVVMICAweDMwICAgICAgIC8qIE1YVlIgQ3J5c3RhbCBNdWx0aXBsaWVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0xLWDNTRUwgIDB4ODAgICAgICAgLyogQ2xvY2sgR2VuZXJhdGlvbiBTb3VyY2UgU2VsZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQ0xLWDNTRUwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTU1DTEtFTiAgMHgxMDAgICAgICAvKiBNYXN0ZXIgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1NQ0xLRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNTUNMS01VTCAgMHgxZTAwICAgICAvKiBNYXN0ZXIgQ2xvY2sgTXVsdGlwbGljYXRpb24gRmFjdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFBMTFNNUFMgIDB4ZTAwMCAgICAgLyogTVhWUiBQTEwgU3RhdGUgTWFjaGluZSBQcmVzY2FsZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJDTEtFTiAgMHgxMDAwMCAgICAvKiBCaXQgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CQ0xLRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNQkNMS0RJViAgMHgxZTAwMDAgICAvKiBCaXQgQ2xvY2sgRGl2aWRlIEZhY3RvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIElOVlJYICAweDgwMDAwMCAgIC8qIEludmVydCBSZWNlaXZlIERhdGEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5JTlZSWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1GU0VOICAweDEwMDAwMDAgIC8qIEZyYW1lIFN5bmMgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTUZTRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1GU0RJViAgMHgxZTAwMDAwMCAvKiBGcmFtZSBTeW5jIERpdmlkZSBGYWN0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1GU1NFTCAgMHg2MDAwMDAwMCAvKiBGcmFtZSBTeW5jIFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBNRlNTWU5DICAweDgwMDAwMDAwIC8qIEZyYW1lIFN5bmMgU3luY2hyb25pemF0aW9uIFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NRlNTWU5DICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9DRFJQTExfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ0RSU01FTiAgMHgxICAgICAgICAvKiBNWFZSIENEUlBMTCBTdGF0ZSBNYWNoaW5lIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DRFJTTUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENEUlJTVEIgIDB4MiAgICAgICAgLyogTVhWUiBDRFJQTEwgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ0RSUlNUQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDRFJTVkNPICAweDQgICAgICAgIC8qIE1YVlIgQ0RSUExMIFN0YXJ0IFZDTyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DRFJTVkNPICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENEUk1PREUgIDB4OCAgICAgICAgLyogTVhWUiBDRFJQTEwgQ0RSIE1vZGUgU2VsZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkNEUk1PREUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ0RSU0NOVCAgMHgzZjAgICAgICAvKiBNWFZSIENEUlBMTCBTdGFydCBDb3VudGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENEUkxDTlQgIDB4ZmMwMCAgICAgLyogTVhWUiBDRFJQTEwgTG9jayBDb3VudGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDRFJTSFBTRUwgIDB4M2YwMDAwICAgLyogTVhWUiBDRFJQTEwgU2hhcGVyIFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENEUlNIUEVOICAweDgwMDAwMCAgIC8qIE1YVlIgQ0RSUExMIFNoYXBlciBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5DRFJTSFBFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIENEUkNQU0VMICAweGZmMDAwMDAwIC8qIE1YVlIgQ0RSUExMIENoYXJnZSBQdW1wIEN1cnJlbnQgU2VsZWN0ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgTVhWUl9GTVBMTF9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRk1TTUVOICAweDEgICAgICAgIC8qIE1YVlIgRk1QTEwgU3RhdGUgTWFjaGluZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkZNU01FTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRk1SU1RCICAweDIgICAgICAgIC8qIE1YVlIgRk1QTEwgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkZNUlNUQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRk1TVkNPICAweDQgICAgICAgIC8qIE1YVlIgRk1QTEwgU3RhcnQgVkNPICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5GTVNWQ08gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZNU0NOVCAgMHgzZjAgICAgICAvKiBNWFZSIEZNUExMIFN0YXJ0IENvdW50ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZNTENOVCAgMHhmYzAwICAgICAvKiBNWFZSIEZNUExMIExvY2sgQ291bnRlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBGTUNQU0VMICAweGZmMDAwMDAwIC8qIE1YVlIgRk1QTEwgQ2hhcmdlIFB1bXAgQ3VycmVudCBTZWxlY3QgKi8KKworLyogQml0IG1hc2tzIGZvciBNWFZSX1BJTl9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1UWE9OQk9EICAweDEgICAgICAgIC8qIE1UWE9OQiBPcGVuIERyYWluIFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk1UWE9OQk9EICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1UWE9OQkcgIDB4MiAgICAgICAgLyogTVRYT05CIEdhdGVzIE1UWCBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTVRYT05CRyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1GU09FICAweDEwICAgICAgIC8qIE1GUyBPdXRwdXQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTUZTT0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNRlNHUFNFTCAgMHgyMCAgICAgICAvKiBNRlMgR2VuZXJhbCBQdXJwb3NlIE91dHB1dCBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5NRlNHUFNFTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIE1GU0dQREFUICAweDQwICAgICAgIC8qIE1GUyBHZW5lcmFsIFB1cnBvc2UgT3V0cHV0IERhdGEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5NRlNHUERBVCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE1YVlJfU0NMS19DTlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTQ05UICAweGZmZmYgICAgIC8qIFN5c3RlbSBDbG9jayBDb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIEtQQURfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgS1BBRF9FTiAgMHgxICAgICAgICAvKiBLZXlwYWQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbktQQURfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIEtQQURfSVJRTU9ERSAgMHg2ICAgICAgICAvKiBLZXkgUHJlc3MgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBLUEFEX1JPV0VOICAweDFjMDAgICAgIC8qIFJvdyBFbmFibGUgV2lkdGggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgS1BBRF9DT0xFTiAgMHhlMDAwICAgICAvKiBDb2x1bW4gRW5hYmxlIFdpZHRoICovCisKKy8qIEJpdCBtYXNrcyBmb3IgS1BBRF9QUkVTQ0FMRSAqLworCisjZGVmaW5lICAgICAgICAgS1BBRF9QUkVTQ0FMRV9WQUwgIDB4M2YgICAgICAgLyogS2V5IFByZXNjYWxlIFZhbHVlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgS1BBRF9NU0VMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgREJPTl9TQ0FMRSAgMHhmZiAgICAgICAvKiBEZWJvdW5jZSBTY2FsZSBWYWx1ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgQ09MRFJWX1NDQUxFICAweGZmMDAgICAgIC8qIENvbHVtbiBEcml2ZXIgU2NhbGUgVmFsdWUgKi8KKworLyogQml0IG1hc2tzIGZvciBLUEFEX1JPV0NPTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgS1BBRF9ST1cgIDB4ZmYgICAgICAgLyogUm93cyBQcmVzc2VkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgS1BBRF9DT0wgIDB4ZmYwMCAgICAgLyogQ29sdW1ucyBQcmVzc2VkICovCisKKy8qIEJpdCBtYXNrcyBmb3IgS1BBRF9TVEFUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBLUEFEX0lSUSAgMHgxICAgICAgICAvKiBLZXlwYWQgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbktQQURfSVJRICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBLUEFEX01ST1dDT0wgIDB4NiAgICAgICAgLyogTXVsdGlwbGUgUm93L0NvbHVtbiBLZXlwcmVzcyBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIEtQQURfUFJFU1NFRCAgMHg4ICAgICAgICAvKiBLZXkgcHJlc3MgY3VycmVudCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbktQQURfUFJFU1NFRCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEtQQURfU09GVEVWQUwgKi8KKworI2RlZmluZSAgICAgICAgICAgS1BBRF9TT0ZURVZBTF9FICAweDIgICAgICAgIC8qIFNvZnR3YXJlIFByb2dyYW1tYWJsZSBGb3JjZSBFdmFsdWF0ZSAqLworI2RlZmluZSAgICAgICAgICBuS1BBRF9TT0ZURVZBTF9FICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0NPTU1BTkQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfSURYICAweDNmICAgICAgIC8qIENvbW1hbmQgSW5kZXggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX1JTUCAgMHg0MCAgICAgICAvKiBSZXNwb25zZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DTURfUlNQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBDTURfTF9SU1AgIDB4ODAgICAgICAgLyogTG9uZyBSZXNwb25zZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuQ01EX0xfUlNQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBDTURfSU5UX0UgIDB4MTAwICAgICAgLyogQ29tbWFuZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkNNRF9JTlRfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBDTURfUEVORF9FICAweDIwMCAgICAgIC8qIENvbW1hbmQgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5DTURfUEVORF9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ01EX0UgIDB4NDAwICAgICAgLyogQ29tbWFuZCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DTURfRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNESF9QV1JfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBXUl9PTiAgMHgzICAgICAgICAvKiBQb3dlciBPbiAqLworI2lmIDAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRCRCAgMHgzYyAgICAgICAvKiBUQkQgKi8KKyNlbmRpZgorI2RlZmluZSAgICAgICAgICAgICAgICAgU0RfQ01EX09EICAweDQwICAgICAgIC8qIE9wZW4gRHJhaW4gT3V0cHV0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5TRF9DTURfT0QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUk9EX0NUTCAgMHg4MCAgICAgICAvKiBSb2QgQ29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ST0RfQ1RMICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0NMS19DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0xLRElWICAweGZmICAgICAgIC8qIE1DX0NMSyBEaXZpc29yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0xLX0UgIDB4MTAwICAgICAgLyogTUNfQ0xLIEJ1cyBDbG9jayBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DTEtfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFBXUl9TVl9FICAweDIwMCAgICAgIC8qIFBvd2VyIFNhdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUFdSX1NWX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgQ0xLRElWX0JZUEFTUyAgMHg0MDAgICAgICAvKiBCeXBhc3MgRGl2aXNvciAqLworI2RlZmluZSAgICAgICAgICAgIG5DTEtESVZfQllQQVNTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgV0lERV9CVVMgIDB4ODAwICAgICAgLyogV2lkZSBCdXMgTW9kZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5XSURFX0JVUyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNESF9SRVNQX0NNRCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUkVTUF9DTUQgIDB4M2YgICAgICAgLyogUmVzcG9uc2UgQ29tbWFuZCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNESF9EQVRBX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRFRYX0UgIDB4MSAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5EVFhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBEVFhfRElSICAweDIgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRGlyZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRUWF9ESVIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBEVFhfTU9ERSAgMHg0ICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5EVFhfTU9ERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgRFRYX0RNQV9FICAweDggICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRE1BIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuRFRYX0RNQV9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBEVFhfQkxLX0xHVEggIDB4ZjAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBCbG9jayBMZW5ndGggKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIENNRF9DUkNfRkFJTCAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkNNRF9DUkNfRkFJTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgREFUX0NSQ19GQUlMICAweDIgICAgICAgIC8qIERhdGEgQ1JDIEZhaWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRBVF9DUkNfRkFJTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIENNRF9USU1FT1VUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCAqLworI2RlZmluZSAgICAgICAgICAgICAgbkNNRF9USU1FT1VUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgREFUX1RJTUVPVVQgIDB4OCAgICAgICAgLyogRGF0YSBUaW1lIE91dCAqLworI2RlZmluZSAgICAgICAgICAgICAgbkRBVF9USU1FT1VUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgVFhfVU5ERVJSVU4gIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5UWF9VTkRFUlJVTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBSWF9PVkVSUlVOICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5SWF9PVkVSUlVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBDTURfUkVTUF9FTkQgIDB4NDAgICAgICAgLyogQ01EIFJlc3BvbnNlIEVuZCAqLworI2RlZmluZSAgICAgICAgICAgICBuQ01EX1JFU1BfRU5EICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ01EX1NFTlQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5DTURfU0VOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBEQVRfRU5EICAweDEwMCAgICAgIC8qIERhdGEgRW5kICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRBVF9FTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgU1RBUlRfQklUX0VSUiAgMHgyMDAgICAgICAvKiBTdGFydCBCaXQgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICBuU1RBUlRfQklUX0VSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIERBVF9CTEtfRU5EICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kICovCisjZGVmaW5lICAgICAgICAgICAgICBuREFUX0JMS19FTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX0FDVCAgMHg4MDAgICAgICAvKiBDTUQgQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkNNRF9BQ1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRYX0FDVCAgMHgxMDAwICAgICAvKiBUcmFuc21pdCBBY3RpdmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRYX0FDVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUlhfQUNUICAweDIwMDAgICAgIC8qIFJlY2VpdmUgQWN0aXZlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5SWF9BQ1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fU1RBVCAgMHg0MDAwICAgICAvKiBUcmFuc21pdCBGSUZPIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuVFhfRklGT19TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBSWF9GSUZPX1NUQVQgIDB4ODAwMCAgICAgLyogUmVjZWl2ZSBGSUZPIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuUlhfRklGT19TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX0ZVTEwgIDB4MTAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsICovCisjZGVmaW5lICAgICAgICAgICAgIG5UWF9GSUZPX0ZVTEwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fRlVMTCAgMHgyMDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRnVsbCAqLworI2RlZmluZSAgICAgICAgICAgICBuUlhfRklGT19GVUxMICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX1pFUk8gIDB4NDAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBFbXB0eSAqLworI2RlZmluZSAgICAgICAgICAgICBuVFhfRklGT19aRVJPICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgUlhfREFUX1pFUk8gIDB4ODAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEVtcHR5ICovCisjZGVmaW5lICAgICAgICAgICAgICBuUlhfREFUX1pFUk8gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgVFhfREFUX1JEWSAgMHgxMDAwMDAgICAvKiBUcmFuc21pdCBEYXRhIEF2YWlsYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5UWF9EQVRfUkRZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgUlhfRklGT19SRFkgIDB4MjAwMDAwICAgLyogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgblJYX0ZJRk9fUkRZICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX1NUQVRVU19DTFIgKi8KKworI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9TVEFUICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgIG5DTURfQ1JDX0ZBSUxfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIERBVF9DUkNfRkFJTF9TVEFUICAweDIgICAgICAgIC8qIERhdGEgQ1JDIEZhaWwgU3RhdHVzICovCisjZGVmaW5lICAgICAgICBuREFUX0NSQ19GQUlMX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgQ01EX1RJTUVPVVRfU1RBVCAgMHg0ICAgICAgICAvKiBDTUQgVGltZSBPdXQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgbkNNRF9USU1FT1VUX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfU1RBVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgIG5EQVRfVElNRU9VVF9TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFRYX1VOREVSUlVOX1NUQVQgIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgblRYX1VOREVSUlVOX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgIFJYX09WRVJSVU5fU1RBVCAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgIG5SWF9PVkVSUlVOX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfU1RBVCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgbkNNRF9SRVNQX0VORF9TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIENNRF9TRU5UX1NUQVQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgbkNNRF9TRU5UX1NUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERBVF9FTkRfU1RBVCAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRBVF9FTkRfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9TVEFUICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgblNUQVJUX0JJVF9FUlJfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBEQVRfQkxLX0VORF9TVEFUICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgIG5EQVRfQkxLX0VORF9TVEFUICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX01BU0swICovCisKKyNkZWZpbmUgICAgICAgICBDTURfQ1JDX0ZBSUxfTUFTSyAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgTWFzayAqLworI2RlZmluZSAgICAgICAgbkNNRF9DUkNfRkFJTF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX01BU0sgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBNYXNrICovCisjZGVmaW5lICAgICAgICBuREFUX0NSQ19GQUlMX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgQ01EX1RJTUVPVVRfTUFTSyAgMHg0ICAgICAgICAvKiBDTUQgVGltZSBPdXQgTWFzayAqLworI2RlZmluZSAgICAgICAgIG5DTURfVElNRU9VVF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIERBVF9USU1FT1VUX01BU0sgIDB4OCAgICAgICAgLyogRGF0YSBUaW1lIE91dCBNYXNrICovCisjZGVmaW5lICAgICAgICAgbkRBVF9USU1FT1VUX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fTUFTSyAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBNYXNrICovCisjZGVmaW5lICAgICAgICAgblRYX1VOREVSUlVOX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgIFJYX09WRVJSVU5fTUFTSyAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gTWFzayAqLworI2RlZmluZSAgICAgICAgICBuUlhfT1ZFUlJVTl9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgQ01EX1JFU1BfRU5EX01BU0sgIDB4NDAgICAgICAgLyogQ01EIFJlc3BvbnNlIEVuZCBNYXNrICovCisjZGVmaW5lICAgICAgICBuQ01EX1JFU1BfRU5EX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfTUFTSyAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgbkNNRF9TRU5UX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIERBVF9FTkRfTUFTSyAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgIG5EQVRfRU5EX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgIFNUQVJUX0JJVF9FUlJfTUFTSyAgMHgyMDAgICAgICAvKiBTdGFydCBCaXQgRXJyb3IgTWFzayAqLworI2RlZmluZSAgICAgICBuU1RBUlRfQklUX0VSUl9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX01BU0sgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgTWFzayAqLworI2RlZmluZSAgICAgICAgIG5EQVRfQkxLX0VORF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBDTURfQUNUX01BU0sgIDB4ODAwICAgICAgLyogQ01EIEFjdGl2ZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgIG5DTURfQUNUX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBUWF9BQ1RfTUFTSyAgMHgxMDAwICAgICAvKiBUcmFuc21pdCBBY3RpdmUgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgblRYX0FDVF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgUlhfQUNUX01BU0sgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgblJYX0FDVF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgVFhfRklGT19TVEFUX01BU0sgIDB4NDAwMCAgICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgTWFzayAqLworI2RlZmluZSAgICAgICAgblRYX0ZJRk9fU1RBVF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgUlhfRklGT19TVEFUX01BU0sgIDB4ODAwMCAgICAgLyogUmVjZWl2ZSBGSUZPIFN0YXR1cyBNYXNrICovCisjZGVmaW5lICAgICAgICBuUlhfRklGT19TVEFUX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBUWF9GSUZPX0ZVTExfTUFTSyAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgTWFzayAqLworI2RlZmluZSAgICAgICAgblRYX0ZJRk9fRlVMTF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgUlhfRklGT19GVUxMX01BU0sgIDB4MjAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgTWFzayAqLworI2RlZmluZSAgICAgICAgblJYX0ZJRk9fRlVMTF9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgVFhfRklGT19aRVJPX01BU0sgIDB4NDAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBFbXB0eSBNYXNrICovCisjZGVmaW5lICAgICAgICBuVFhfRklGT19aRVJPX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgUlhfREFUX1pFUk9fTUFTSyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgTWFzayAqLworI2RlZmluZSAgICAgICAgIG5SWF9EQVRfWkVST19NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICBUWF9EQVRfUkRZX01BU0sgIDB4MTAwMDAwICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgTWFzayAqLworI2RlZmluZSAgICAgICAgICBuVFhfREFUX1JEWV9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFJYX0ZJRk9fUkRZX01BU0sgIDB4MjAwMDAwICAgLyogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSBNYXNrICovCisjZGVmaW5lICAgICAgICAgblJYX0ZJRk9fUkRZX01BU0sgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBTREhfRklGT19DTlQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0NPVU5UICAweDdmZmYgICAgIC8qIEZJRk8gQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBTREhfRV9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgU0RJT19JTlRfREVUICAweDIgICAgICAgIC8qIFNESU8gSW50IERldGVjdGVkICovCisjZGVmaW5lICAgICAgICAgICAgIG5TRElPX0lOVF9ERVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBTRF9DQVJEX0RFVCAgMHgxMCAgICAgICAvKiBTRCBDYXJkIERldGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgblNEX0NBUkRfREVUICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0VfTUFTSyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgU0RJT19NU0sgIDB4MiAgICAgICAgLyogTWFzayBTRElPIEludCBEZXRlY3RlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblNESU9fTVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNDRF9NU0sgIDB4NDAgICAgICAgLyogTWFzayBDYXJkIERldGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TQ0RfTVNLICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0RIX0NGRyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENMS1NfRU4gIDB4MSAgICAgICAgLyogQ2xvY2tzIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DTEtTX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNENEUgIDB4NCAgICAgICAgLyogU0RJTyA0LUJpdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuU0Q0RSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTVdFICAweDggICAgICAgIC8qIE1vdmluZyBXaW5kb3cgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NV0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNEX1JTVCAgMHgxMCAgICAgICAvKiBTRE1NQyBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuU0RfUlNUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBQVVBfU0REQVQgIDB4MjAgICAgICAgLyogUHVsbC11cCBTRF9EQVQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblBVUF9TRERBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBQVVBfU0REQVQzICAweDQwICAgICAgIC8qIFB1bGwtdXAgU0RfREFUMyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5QVVBfU0REQVQzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBQRF9TRERBVDMgIDB4ODAgICAgICAgLyogUHVsbC1kb3duIFNEX0RBVDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblBEX1NEREFUMyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNESF9SRF9XQUlUX0VOICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJXUiAgMHgxICAgICAgICAvKiBSZWFkIFdhaXQgUmVxdWVzdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuUldSICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfQ09OVFJPTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBQSU9fU1RBUlQgIDB4MSAgICAgICAgLyogU3RhcnQgUElPL1JlZyBPcCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuUElPX1NUQVJUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgTVVMVElfU1RBUlQgIDB4MiAgICAgICAgLyogU3RhcnQgTXVsdGktRE1BIE9wICovCisjZGVmaW5lICAgICAgICAgICAgICBuTVVMVElfU1RBUlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBVTFRSQV9TVEFSVCAgMHg0ICAgICAgICAvKiBTdGFydCBVbHRyYS1ETUEgT3AgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5VTFRSQV9TVEFSVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFhGRVJfRElSICAweDggICAgICAgIC8qIFRyYW5zZmVyIERpcmVjdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblhGRVJfRElSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSU9SRFlfRU4gIDB4MTAgICAgICAgLyogSU9SRFkgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSU9SRFlfRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRklGT19GTFVTSCAgMHgyMCAgICAgICAvKiBGbHVzaCBGSUZPcyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5GSUZPX0ZMVVNIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgU09GVF9SU1QgIDB4NDAgICAgICAgLyogU29mdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblNPRlRfUlNUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERFVl9SU1QgIDB4ODAgICAgICAgLyogRGV2aWNlIFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRFVl9SU1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgVEZSQ05UX1JTVCAgMHgxMDAgICAgICAvKiBUcmFucyBDb3VudCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5URlJDTlRfUlNUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgRU5EX09OX1RFUk0gIDB4MjAwICAgICAgLyogRW5kL1Rlcm1pbmF0ZSBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5FTkRfT05fVEVSTSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIFBJT19VU0VfRE1BICAweDQwMCAgICAgIC8qIFBJTy1ETUEgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICBuUElPX1VTRV9ETUEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgVURNQUlOX0ZJRk9fVEhSUyAgMHhmMDAwICAgICAvKiBVbHRyYSBETUEtSU4gRklGTyBUaHJlc2hvbGQgKi8KKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIFBJT19YRkVSX09OICAweDEgICAgICAgIC8qIFBJTyB0cmFuc2ZlciBpbiBwcm9ncmVzcyAqLworI2RlZmluZSAgICAgICAgICAgICAgblBJT19YRkVSX09OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIE1VTFRJX1hGRVJfT04gIDB4MiAgICAgICAgLyogTXVsdGktd29yZCBETUEgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgICAgICAgICAgICBuTVVMVElfWEZFUl9PTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBVTFRSQV9YRkVSX09OICAweDQgICAgICAgIC8qIFVsdHJhIERNQSB0cmFuc2ZlciBpbiBwcm9ncmVzcyAqLworI2RlZmluZSAgICAgICAgICAgIG5VTFRSQV9YRkVSX09OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgVUxUUkFfSU5fRkwgIDB4ZjAgICAgICAgLyogVWx0cmEgRE1BIElucHV0IEZJRk8gTGV2ZWwgKi8KKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9ERVZfQUREUiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgREVWX0FERFIgIDB4MWYgICAgICAgLyogRGV2aWNlIEFkZHJlc3MgKi8KKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9JTlRfTUFTSyAqLworCisjZGVmaW5lICAgICAgICBBVEFQSV9ERVZfSU5UX01BU0sgIDB4MSAgICAgICAgLyogRGV2aWNlIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICAgICAgIG5BVEFQSV9ERVZfSU5UX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgUElPX0RPTkVfTUFTSyAgMHgyICAgICAgICAvKiBQSU8gdHJhbnNmZXIgZG9uZSBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgICAgICAgICAgIG5QSU9fRE9ORV9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICBNVUxUSV9ET05FX01BU0sgIDB4NCAgICAgICAgLyogTXVsdGktRE1BIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgbk1VTFRJX0RPTkVfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBVRE1BSU5fRE9ORV9NQVNLICAweDggICAgICAgIC8qIFVsdHJhLURNQSBpbiB0cmFuc2ZlciBkb25lIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICAgICAgICAgblVETUFJTl9ET05FX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBVRE1BT1VUX0RPTkVfTUFTSyAgMHgxMCAgICAgICAvKiBVbHRyYS1ETUEgb3V0IHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgICAgICAgIG5VRE1BT1VUX0RPTkVfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICBIT1NUX1RFUk1fWEZFUl9NQVNLICAweDIwICAgICAgIC8qIEhvc3QgdGVybWluYXRlIGN1cnJlbnQgdHJhbnNmZXIgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgICAgICBuSE9TVF9URVJNX1hGRVJfTUFTSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgTVVMVElfVEVSTV9NQVNLICAweDQwICAgICAgIC8qIERldmljZSB0ZXJtaW5hdGUgTXVsdGktRE1BIHRyYW5zZmVyIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICAgICAgICAgIG5NVUxUSV9URVJNX01BU0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgVURNQUlOX1RFUk1fTUFTSyAgMHg4MCAgICAgICAvKiBEZXZpY2UgdGVybWluYXRlIFVsdHJhLURNQS1pbiB0cmFuc2ZlciBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgICAgICAgIG5VRE1BSU5fVEVSTV9NQVNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgVURNQU9VVF9URVJNX01BU0sgIDB4MTAwICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBVbHRyYS1ETUEtb3V0IHRyYW5zZmVyIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lICAgICAgICBuVURNQU9VVF9URVJNX01BU0sgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9JTlRfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgQVRBUElfREVWX0lOVCAgMHgxICAgICAgICAvKiBEZXZpY2UgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgIG5BVEFQSV9ERVZfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBQSU9fRE9ORV9JTlQgIDB4MiAgICAgICAgLyogUElPIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuUElPX0RPTkVfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgTVVMVElfRE9ORV9JTlQgIDB4NCAgICAgICAgLyogTXVsdGktRE1BIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgbk1VTFRJX0RPTkVfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICBVRE1BSU5fRE9ORV9JTlQgIDB4OCAgICAgICAgLyogVWx0cmEtRE1BIGluIHRyYW5zZmVyIGRvbmUgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICBuVURNQUlOX0RPTkVfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFVETUFPVVRfRE9ORV9JTlQgIDB4MTAgICAgICAgLyogVWx0cmEtRE1BIG91dCB0cmFuc2ZlciBkb25lIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICBuVURNQU9VVF9ET05FX0lOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgSE9TVF9URVJNX1hGRVJfSU5UICAweDIwICAgICAgIC8qIEhvc3QgdGVybWluYXRlIGN1cnJlbnQgdHJhbnNmZXIgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICBuSE9TVF9URVJNX1hGRVJfSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgTVVMVElfVEVSTV9JTlQgIDB4NDAgICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBNdWx0aS1ETUEgdHJhbnNmZXIgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgbk1VTFRJX1RFUk1fSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICBVRE1BSU5fVEVSTV9JTlQgIDB4ODAgICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBVbHRyYS1ETUEtaW4gdHJhbnNmZXIgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICBuVURNQUlOX1RFUk1fSU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgIFVETUFPVVRfVEVSTV9JTlQgIDB4MTAwICAgICAgLyogRGV2aWNlIHRlcm1pbmF0ZSBVbHRyYS1ETUEtb3V0IHRyYW5zZmVyIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICBuVURNQU9VVF9URVJNX0lOVCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX0xJTkVfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgQVRBUElfSU5UUiAgMHgxICAgICAgICAvKiBEZXZpY2UgaW50ZXJydXB0IHRvIGhvc3QgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQVRBUElfSU5UUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9EQVNQICAweDIgICAgICAgIC8qIERldmljZSBkYXNwIHRvIGhvc3QgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQVRBUElfREFTUCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9DUzBOICAweDQgICAgICAgIC8qIEFUQVBJIGNoaXAgc2VsZWN0IDAgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQVRBUElfQ1MwTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9DUzFOICAweDggICAgICAgIC8qIEFUQVBJIGNoaXAgc2VsZWN0IDEgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQVRBUElfQ1MxTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBBVEFQSV9BRERSICAweDcwICAgICAgIC8qIEFUQVBJIGFkZHJlc3MgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIEFUQVBJX0RNQVJFUSAgMHg4MCAgICAgICAvKiBBVEFQSSBETUEgcmVxdWVzdCBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICBuQVRBUElfRE1BUkVRICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIEFUQVBJX0RNQUFDS04gIDB4MTAwICAgICAgLyogQVRBUEkgRE1BIGFja25vd2xlZGdlIGxpbmUgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgbkFUQVBJX0RNQUFDS04gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBBVEFQSV9ESU9XTiAgMHgyMDAgICAgICAvKiBBVEFQSSB3cml0ZSBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgbkFUQVBJX0RJT1dOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgQVRBUElfRElPUk4gIDB4NDAwICAgICAgLyogQVRBUEkgcmVhZCBsaW5lIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgbkFUQVBJX0RJT1JOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgQVRBUElfSU9SRFkgIDB4ODAwICAgICAgLyogQVRBUEkgSU9SRFkgbGluZSBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5BVEFQSV9JT1JEWSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1NNX1NUQVRFICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgUElPX0NTVEFURSAgMHhmICAgICAgICAvKiBQSU8gbW9kZSBzdGF0ZSBtYWNoaW5lIGN1cnJlbnQgc3RhdGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgRE1BX0NTVEFURSAgMHhmMCAgICAgICAvKiBETUEgbW9kZSBzdGF0ZSBtYWNoaW5lIGN1cnJlbnQgc3RhdGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgVURNQUlOX0NTVEFURSAgMHhmMDAgICAgICAvKiBVbHRyYSBETUEtSW4gbW9kZSBzdGF0ZSBtYWNoaW5lIGN1cnJlbnQgc3RhdGUgKi8KKyNkZWZpbmUgICAgICAgICAgICBVRE1BT1VUX0NTVEFURSAgMHhmMDAwICAgICAvKiBBVEFQSSBJT1JEWSBsaW5lIHN0YXR1cyAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1RFUk1JTkFURSAqLworCisjZGVmaW5lICAgICAgICAgICBBVEFQSV9IT1NUX1RFUk0gIDB4MSAgICAgICAgLyogSG9zdCB0ZXJtaW5hdGlvbmF0aW9uICovCisjZGVmaW5lICAgICAgICAgIG5BVEFQSV9IT1NUX1RFUk0gIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBBVEFQSV9SRUdfVElNXzAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVDJfUkVHICAweGZmICAgICAgIC8qIEVuZCBvZiBjeWNsZSB0aW1lIGZvciByZWdpc3RlciBhY2Nlc3MgdHJhbnNmZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVEVPQ19SRUcgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBESU9SL0RJT1cgcHVsc2V3aWR0aCAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1BJT19USU1fMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUMV9SRUcgIDB4ZiAgICAgICAgLyogVGltZSBmcm9tIGFkZHJlc3MgdmFsaWQgdG8gRElPUi9ESU9XICovCisjZGVmaW5lICAgICAgICAgICAgICAgIFQyX1JFR19QSU8gIDB4ZmYwICAgICAgLyogRElPUi9ESU9XIHB1bHNld2lkdGggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFQ0X1JFRyAgMHhmMDAwICAgICAvKiBESU9XIGRhdGEgaG9sZCAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1BJT19USU1fMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICBURU9DX1JFR19QSU8gIDB4ZmYgICAgICAgLyogRW5kIG9mIGN5Y2xlIHRpbWUgZm9yIFBJTyBhY2Nlc3MgdHJhbnNmZXJzLiAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8wICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBURCAgMHhmZiAgICAgICAvKiBESU9SL0RJT1cgYXNzZXJ0ZWQgcHVsc2V3aWR0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFRNICAweGZmMDAgICAgIC8qIFRpbWUgZnJvbSBhZGRyZXNzIHZhbGlkIHRvIERJT1IvRElPVyAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8xICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRLVyAgMHhmZiAgICAgICAvKiBTZWxlY3RzIERJT1cgbmVnYXRlZCBwdWxzZXdpZHRoICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUS1IgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBESU9SIG5lZ2F0ZWQgcHVsc2V3aWR0aCAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX01VTFRJX1RJTV8yICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBUSCAgMHhmZiAgICAgICAvKiBTZWxlY3RzIERJT1cgZGF0YSBob2xkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRFT0MgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBlbmQgb2YgY3ljbGUgZm9yIERNQSAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1VMVFJBX1RJTV8wICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEFDSyAgMHhmZiAgICAgICAvKiBTZWxlY3RzIHNldHVwIGFuZCBob2xkIHRpbWVzIGZvciBUQUNLICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRFTlYgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBlbnZlbG9wZSB0aW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVUxUUkFfVElNXzEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBURFZTICAweGZmICAgICAgIC8qIFNlbGVjdHMgZGF0YSB2YWxpZCBzZXR1cCB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBUQ1lDX1REVlMgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBjeWNsZSB0aW1lIC0gVERWUyB0aW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQVRBUElfVUxUUkFfVElNXzIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVFNTICAweGZmICAgICAgIC8qIFNlbGVjdHMgdGltZSBmcm9tIFNUUk9CRSBlZGdlIHRvIG5lZ2F0aW9uIG9mIERNQVJRIG9yIGFzc2VydGlvbiBvZiBTVE9QICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRNTEkgIDB4ZmYwMCAgICAgLyogU2VsZWN0cyBpbnRlcmxvY2sgdGltZSAqLworCisvKiBCaXQgbWFza3MgZm9yIEFUQVBJX1VMVFJBX1RJTV8zICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFpBSCAgMHhmZiAgICAgICAvKiBTZWxlY3RzIG1pbmltdW0gZGVsYXkgcmVxdWlyZWQgZm9yIG91dHB1dCAqLworI2RlZmluZSAgICAgICAgICAgICAgIFJFQURZX1BBVVNFICAweGZmMDAgICAgIC8qIFNlbGVjdHMgcmVhZHkgdG8gcGF1c2UgKi8KKworLyogQml0IG1hc2tzIGZvciBUSU1FUl9FTkFCTEUxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVOOCAgMHgxICAgICAgICAvKiBUaW1lciA4IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNRU44ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FTjkgIDB4MiAgICAgICAgLyogVGltZXIgOSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRJTUVOOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1FTjEwICAweDQgICAgICAgIC8qIFRpbWVyIDEwIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5USU1FTjEwICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVElNRVJfRElTQUJMRTEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1ESVM4ICAweDEgICAgICAgIC8qIFRpbWVyIDggRGlzYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5USU1ESVM4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTURJUzkgIDB4MiAgICAgICAgLyogVGltZXIgOSBEaXNhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblRJTURJUzkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUSU1ESVMxMCAgMHg0ICAgICAgICAvKiBUaW1lciAxMCBEaXNhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuVElNRElTMTAgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBUSU1FUl9TVEFUVVMxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUlMOCAgMHgxICAgICAgICAvKiBUaW1lciA4IEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNSUw4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1JTDkgIDB4MiAgICAgICAgLyogVGltZXIgOSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRJTUlMOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1JTDEwICAweDQgICAgICAgIC8qIFRpbWVyIDEwIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5USU1JTDEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBUT1ZGX0VSUjggIDB4MTAgICAgICAgLyogVGltZXIgOCBDb3VudGVyIE92ZXJmbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5UT1ZGX0VSUjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFRPVkZfRVJSOSAgMHgyMCAgICAgICAvKiBUaW1lciA5IENvdW50ZXIgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblRPVkZfRVJSOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBUT1ZGX0VSUjEwICAweDQwICAgICAgIC8qIFRpbWVyIDEwIENvdW50ZXIgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuVE9WRl9FUlIxMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSVU44ICAweDEwMDAgICAgIC8qIFRpbWVyIDggU2xhdmUgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSVU44ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJVTjkgIDB4MjAwMCAgICAgLyogVGltZXIgOSBTbGF2ZSBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJVTjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRSVU4xMCAgMHg0MDAwICAgICAvKiBUaW1lciAxMCBTbGF2ZSBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5UUlVOMTAgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBFUFBJMCBhcmUgb2J0YWluZWQgZnJvbSBjb21tb24gYmFzZSBoZWFkZXIgZm9yIEVQUEl4IChFUFBJMSBhbmQgRVBQSTIpICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0ZBRERSICovCisKKyNkZWZpbmUgICAgICAgICAgRlVOQ1RJT05fQUREUkVTUyAgMHg3ZiAgICAgICAvKiBGdW5jdGlvbiBhZGRyZXNzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1BPV0VSICovCisKKyNkZWZpbmUgICAgICAgICAgIEVOQUJMRV9TVVNQRU5ETSAgMHgxICAgICAgICAvKiBlbmFibGUgU3VzcGVuZE0gb3V0cHV0ICovCisjZGVmaW5lICAgICAgICAgIG5FTkFCTEVfU1VTUEVORE0gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFNVU1BFTkRfTU9ERSAgMHgyICAgICAgICAvKiBTdXNwZW5kIE1vZGUgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgIG5TVVNQRU5EX01PREUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBSRVNVTUVfTU9ERSAgMHg0ICAgICAgICAvKiBETUEgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgblJFU1VNRV9NT0RFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkVTRVQgIDB4OCAgICAgICAgLyogUmVzZXQgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkVTRVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSFNfTU9ERSAgMHgxMCAgICAgICAvKiBIaWdoIFNwZWVkIG1vZGUgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkhTX01PREUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEhTX0VOQUJMRSAgMHgyMCAgICAgICAvKiBoaWdoIFNwZWVkIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuSFNfRU5BQkxFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBTT0ZUX0NPTk4gIDB4NDAgICAgICAgLyogU29mdCBjb25uZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5TT0ZUX0NPTk4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgSVNPX1VQREFURSAgMHg4MCAgICAgICAvKiBJc29jaHJvbm91cyB1cGRhdGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSVNPX1VQREFURSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSVFggKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAwX1RYICAweDEgICAgICAgIC8qIFR4IEVuZHBvaW50IDAgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDBfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQMV9UWCAgMHgyICAgICAgICAvKiBUeCBFbmRwb2ludCAxIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAxX1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDJfVFggIDB4NCAgICAgICAgLyogVHggRW5kcG9pbnQgMiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQMl9UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAzX1RYICAweDggICAgICAgIC8qIFR4IEVuZHBvaW50IDMgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDNfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNF9UWCAgMHgxMCAgICAgICAvKiBUeCBFbmRwb2ludCA0IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA0X1RYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDVfVFggIDB4MjAgICAgICAgLyogVHggRW5kcG9pbnQgNSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNV9UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA2X1RYICAweDQwICAgICAgIC8qIFR4IEVuZHBvaW50IDYgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDZfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQN19UWCAgMHg4MCAgICAgICAvKiBUeCBFbmRwb2ludCA3IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA3X1RYICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOVFJSWCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDFfUlggIDB4MiAgICAgICAgLyogUnggRW5kcG9pbnQgMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQMV9SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVAyX1JYICAweDQgICAgICAgIC8qIFJ4IEVuZHBvaW50IDIgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDJfUlggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQM19SWCAgMHg4ICAgICAgICAvKiBSeCBFbmRwb2ludCAzIGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVAzX1JYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDRfUlggIDB4MTAgICAgICAgLyogUnggRW5kcG9pbnQgNCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQNF9SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVA1X1JYICAweDIwICAgICAgIC8qIFJ4IEVuZHBvaW50IDUgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FUDVfUlggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQNl9SWCAgMHg0MCAgICAgICAvKiBSeCBFbmRwb2ludCA2IGludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRVA2X1JYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFUDdfUlggIDB4ODAgICAgICAgLyogUnggRW5kcG9pbnQgNyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVQN19SWCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSVFhFICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDBfVFhfRSAgMHgxICAgICAgICAvKiBFbmRwb2ludCAwIGludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDBfVFhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMV9UWF9FICAweDIgICAgICAgIC8qIFR4IEVuZHBvaW50IDEgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDFfVFhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQMl9UWF9FICAweDQgICAgICAgIC8qIFR4IEVuZHBvaW50IDIgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDJfVFhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQM19UWF9FICAweDggICAgICAgIC8qIFR4IEVuZHBvaW50IDMgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDNfVFhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNF9UWF9FICAweDEwICAgICAgIC8qIFR4IEVuZHBvaW50IDQgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDRfVFhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNV9UWF9FICAweDIwICAgICAgIC8qIFR4IEVuZHBvaW50IDUgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDVfVFhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQNl9UWF9FICAweDQwICAgICAgIC8qIFR4IEVuZHBvaW50IDYgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDZfVFhfRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVQN19UWF9FICAweDgwICAgICAgIC8qIFR4IEVuZHBvaW50IDcgaW50ZXJydXB0ICBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FUDdfVFhfRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9JTlRSUlhFICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDFfUlhfRSAgMHgyICAgICAgICAvKiBSeCBFbmRwb2ludCAxIGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVAxX1JYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDJfUlhfRSAgMHg0ICAgICAgICAvKiBSeCBFbmRwb2ludCAyIGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVAyX1JYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDNfUlhfRSAgMHg4ICAgICAgICAvKiBSeCBFbmRwb2ludCAzIGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVAzX1JYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDRfUlhfRSAgMHgxMCAgICAgICAvKiBSeCBFbmRwb2ludCA0IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA0X1JYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDVfUlhfRSAgMHgyMCAgICAgICAvKiBSeCBFbmRwb2ludCA1IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA1X1JYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDZfUlhfRSAgMHg0MCAgICAgICAvKiBSeCBFbmRwb2ludCA2IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA2X1JYX0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUDdfUlhfRSAgMHg4MCAgICAgICAvKiBSeCBFbmRwb2ludCA3IGludGVycnVwdCAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVA3X1JYX0UgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlVTQiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBTVVNQRU5EX0IgIDB4MSAgICAgICAgLyogU3VzcGVuZCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblNVU1BFTkRfQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFJFU1VNRV9CICAweDIgICAgICAgIC8qIFJlc3VtZSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5SRVNVTUVfQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBSRVNFVF9PUl9CQUJMRV9CICAweDQgICAgICAgIC8qIFJlc2V0L2JhYmJsZSBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICBuUkVTRVRfT1JfQkFCTEVfQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNPRl9CICAweDggICAgICAgIC8qIFN0YXJ0IG9mIGZyYW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuU09GX0IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENPTk5fQiAgMHgxMCAgICAgICAvKiBDb25uZWN0aW9uIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ09OTl9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRElTQ09OX0IgIDB4MjAgICAgICAgLyogRGlzY29ubmVjdCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ESVNDT05fQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBTRVNTSU9OX1JFUV9CICAweDQwICAgICAgIC8qIFNlc3Npb24gUmVxdWVzdCAqLworI2RlZmluZSAgICAgICAgICAgIG5TRVNTSU9OX1JFUV9CICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBWQlVTX0VSUk9SX0IgIDB4ODAgICAgICAgLyogVmJ1cyB0aHJlc2hvbGQgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgIG5WQlVTX0VSUk9SX0IgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfSU5UUlVTQkUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBTVVNQRU5EX0JFICAweDEgICAgICAgIC8qIFN1c3BlbmQgaW5kaWNhdG9yIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuU1VTUEVORF9CRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgUkVTVU1FX0JFICAweDIgICAgICAgIC8qIFJlc3VtZSBpbmRpY2F0b3IgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuUkVTVU1FX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgUkVTRVRfT1JfQkFCTEVfQkUgIDB4NCAgICAgICAgLyogUmVzZXQvYmFiYmxlIGluZGljYXRvciBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICBuUkVTRVRfT1JfQkFCTEVfQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNPRl9CRSAgMHg4ICAgICAgICAvKiBTdGFydCBvZiBmcmFtZSBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5TT0ZfQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ09OTl9CRSAgMHgxMCAgICAgICAvKiBDb25uZWN0aW9uIGluZGljYXRvciBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkNPTk5fQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIERJU0NPTl9CRSAgMHgyMCAgICAgICAvKiBEaXNjb25uZWN0IGluZGljYXRvciBpbnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5ESVNDT05fQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICBTRVNTSU9OX1JFUV9CRSAgMHg0MCAgICAgICAvKiBTZXNzaW9uIFJlcXVlc3QgaW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgblNFU1NJT05fUkVRX0JFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIFZCVVNfRVJST1JfQkUgIDB4ODAgICAgICAgLyogVmJ1cyB0aHJlc2hvbGQgaW5kaWNhdG9yIGludCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICBuVkJVU19FUlJPUl9CRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9GUkFNRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICBGUkFNRV9OVU1CRVIgIDB4N2ZmICAgICAgLyogRnJhbWUgbnVtYmVyICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0lOREVYICovCisKKyNkZWZpbmUgICAgICAgICBTRUxFQ1RFRF9FTkRQT0lOVCAgMHhmICAgICAgICAvKiBzZWxlY3RlZCBlbmRwb2ludCAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9HTE9CQUxfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgR0xPQkFMX0VOQSAgMHgxICAgICAgICAvKiBlbmFibGVzIFVTQiBtb2R1bGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuR0xPQkFMX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDFfVFhfRU5BICAweDIgICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDEgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQMV9UWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVAyX1RYX0VOQSAgMHg0ICAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCAyIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDJfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQM19UWF9FTkEgIDB4OCAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgMyBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVAzX1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDRfVFhfRU5BICAweDEwICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQNF9UWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVA1X1RYX0VOQSAgMHgyMCAgICAgICAvKiBUcmFuc21pdCBlbmRwb2ludCA1IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5FUDVfVFhfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEVQNl9UWF9FTkEgIDB4NDAgICAgICAgLyogVHJhbnNtaXQgZW5kcG9pbnQgNiBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuRVA2X1RYX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBFUDdfVFhfRU5BICAweDgwICAgICAgIC8qIFRyYW5zbWl0IGVuZHBvaW50IDcgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQN19UWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVAxX1JYX0VOQSAgMHgxMDAgICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDEgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQMV9SWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVAyX1JYX0VOQSAgMHgyMDAgICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDIgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQMl9SWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVAzX1JYX0VOQSAgMHg0MDAgICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDMgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQM19SWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVA0X1JYX0VOQSAgMHg4MDAgICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQNF9SWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVA1X1JYX0VOQSAgMHgxMDAwICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDUgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQNV9SWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVA2X1JYX0VOQSAgMHgyMDAwICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDYgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQNl9SWF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgRVA3X1JYX0VOQSAgMHg0MDAwICAgICAvKiBSZWNlaXZlIGVuZHBvaW50IDcgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkVQN19SWF9FTkEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfT1RHX0RFVl9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRVNTSU9OICAweDEgICAgICAgIC8qIHNlc3Npb24gaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblNFU1NJT04gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBIT1NUX1JFUSAgMHgyICAgICAgICAvKiBIb3N0IG5lZ290aWF0aW9uIHJlcXVlc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5IT1NUX1JFUSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgSE9TVF9NT0RFICAweDQgICAgICAgIC8qIGluZGljYXRlcyBVU0JEUkMgaXMgYSBob3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5IT1NUX01PREUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBWQlVTMCAgMHg4ICAgICAgICAvKiBWYnVzIGxldmVsIGluZGljYXRvclswXSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblZCVVMwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVkJVUzEgIDB4MTAgICAgICAgLyogVmJ1cyBsZXZlbCBpbmRpY2F0b3JbMV0gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5WQlVTMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIExTREVWICAweDIwICAgICAgIC8qIExvdy1zcGVlZCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5MU0RFViAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEZTREVWICAweDQwICAgICAgIC8qIEZ1bGwgb3IgSGlnaC1zcGVlZCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5GU0RFViAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEJfREVWSUNFICAweDgwICAgICAgIC8qIEEnIG9yICdCJyBkZXZpY2UgaW5kaWNhdG9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQl9ERVZJQ0UgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVU0JfT1RHX1ZCVVNfSVJRICovCisKKyNkZWZpbmUgICAgICAgICAgICAgRFJJVkVfVkJVU19PTiAgMHgxICAgICAgICAvKiBpbmRpY2F0b3IgdG8gZHJpdmUgVkJVUyBjb250cm9sIGNpcmN1aXQgKi8KKyNkZWZpbmUgICAgICAgICAgICBuRFJJVkVfVkJVU19PTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgIERSSVZFX1ZCVVNfT0ZGICAweDIgICAgICAgIC8qIGluZGljYXRvciB0byBzaHV0IG9mZiBjaGFyZ2UgcHVtcCAqLworI2RlZmluZSAgICAgICAgICAgbkRSSVZFX1ZCVVNfT0ZGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICBDSFJHX1ZCVVNfU1RBUlQgIDB4NCAgICAgICAgLyogaW5kaWNhdG9yIGZvciBleHRlcm5hbCBjaXJjdWl0IHRvIHN0YXJ0IGNoYXJnaW5nIFZCVVMgKi8KKyNkZWZpbmUgICAgICAgICAgbkNIUkdfVkJVU19TVEFSVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBDSFJHX1ZCVVNfRU5EICAweDggICAgICAgIC8qIGluZGljYXRvciBmb3IgZXh0ZXJuYWwgY2lyY3VpdCB0byBlbmQgY2hhcmdpbmcgVkJVUyAqLworI2RlZmluZSAgICAgICAgICAgIG5DSFJHX1ZCVVNfRU5EICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBESVNDSFJHX1ZCVVNfU1RBUlQgIDB4MTAgICAgICAgLyogaW5kaWNhdG9yIHRvIHN0YXJ0IGRpc2NoYXJnaW5nIFZCVVMgKi8KKyNkZWZpbmUgICAgICAgbkRJU0NIUkdfVkJVU19TVEFSVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBESVNDSFJHX1ZCVVNfRU5EICAweDIwICAgICAgIC8qIGluZGljYXRvciB0byBzdG9wIGRpc2NoYXJnaW5nIFZCVVMgKi8KKyNkZWZpbmUgICAgICAgICBuRElTQ0hSR19WQlVTX0VORCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9PVEdfVkJVU19NQVNLICovCisKKyNkZWZpbmUgICAgICAgICBEUklWRV9WQlVTX09OX0VOQSAgMHgxICAgICAgICAvKiBlbmFibGUgRFJJVkVfVkJVU19PTiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgIG5EUklWRV9WQlVTX09OX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgRFJJVkVfVkJVU19PRkZfRU5BICAweDIgICAgICAgIC8qIGVuYWJsZSBEUklWRV9WQlVTX09GRiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgbkRSSVZFX1ZCVVNfT0ZGX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICBDSFJHX1ZCVVNfU1RBUlRfRU5BICAweDQgICAgICAgIC8qIGVuYWJsZSBDSFJHX1ZCVVNfU1RBUlQgaW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgbkNIUkdfVkJVU19TVEFSVF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBDSFJHX1ZCVVNfRU5EX0VOQSAgMHg4ICAgICAgICAvKiBlbmFibGUgQ0hSR19WQlVTX0VORCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgIG5DSFJHX1ZCVVNfRU5EX0VOQSAgMHgwICAgICAgIAorI2RlZmluZSAgICBESVNDSFJHX1ZCVVNfU1RBUlRfRU5BICAweDEwICAgICAgIC8qIGVuYWJsZSBESVNDSFJHX1ZCVVNfU1RBUlQgaW50ZXJydXB0ICovCisjZGVmaW5lICAgbkRJU0NIUkdfVkJVU19TVEFSVF9FTkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICBESVNDSFJHX1ZCVVNfRU5EX0VOQSAgMHgyMCAgICAgICAvKiBlbmFibGUgRElTQ0hSR19WQlVTX0VORCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgIG5ESVNDSFJHX1ZCVVNfRU5EX0VOQSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9DU1IwICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBSWFBLVFJEWSAgMHgxICAgICAgICAvKiBkYXRhIHBhY2tldCByZWNlaXZlIGluZGljYXRvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblJYUEtUUkRZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVFhQS1RSRFkgIDB4MiAgICAgICAgLyogZGF0YSBwYWNrZXQgaW4gRklGTyBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5UWFBLVFJEWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBTVEFMTF9TRU5UICAweDQgICAgICAgIC8qIFNUQUxMIGhhbmRzaGFrZSBzZW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgblNUQUxMX1NFTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgREFUQUVORCAgMHg4ICAgICAgICAvKiBEYXRhIGVuZCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuREFUQUVORCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFNFVFVQRU5EICAweDEwICAgICAgIC8qIFNldHVwIGVuZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblNFVFVQRU5EICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBTRU5EU1RBTEwgIDB4MjAgICAgICAgLyogU2VuZCBTVEFMTCBoYW5kc2hha2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblNFTkRTVEFMTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIFNFUlZJQ0VEX1JYUEtUUkRZICAweDQwICAgICAgIC8qIHVzZWQgdG8gY2xlYXIgdGhlIFJ4UGt0UmR5IGJpdCAqLworI2RlZmluZSAgICAgICAgblNFUlZJQ0VEX1JYUEtUUkRZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgU0VSVklDRURfU0VUVVBFTkQgIDB4ODAgICAgICAgLyogdXNlZCB0byBjbGVhciB0aGUgU2V0dXBFbmQgYml0ICovCisjZGVmaW5lICAgICAgICBuU0VSVklDRURfU0VUVVBFTkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEZMVVNIRklGTyAgMHgxMDAgICAgICAvKiBmbHVzaCBlbmRwb2ludCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5GTFVTSEZJRk8gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgU1RBTExfUkVDRUlWRURfSCAgMHg0ICAgICAgICAvKiBTVEFMTCBoYW5kc2hha2UgcmVjZWl2ZWQgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgblNUQUxMX1JFQ0VJVkVEX0ggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgU0VUVVBQS1RfSCAgMHg4ICAgICAgICAvKiBzZW5kIFNldHVwIHRva2VuIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5TRVRVUFBLVF9IICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVSUk9SX0ggIDB4MTAgICAgICAgLyogdGltZW91dCBlcnJvciBpbmRpY2F0b3IgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkVSUk9SX0ggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVFQS1RfSCAgMHgyMCAgICAgICAvKiBSZXF1ZXN0IGFuIElOIHRyYW5zYWN0aW9uIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblJFUVBLVF9IICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgU1RBVFVTUEtUX0ggIDB4NDAgICAgICAgLyogU3RhdHVzIHN0YWdlIHRyYW5zYWN0aW9uIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgblNUQVRVU1BLVF9IICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIE5BS19USU1FT1VUX0ggIDB4ODAgICAgICAgLyogRVAwIGhhbHRlZCBhZnRlciBhIE5BSyBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICBuTkFLX1RJTUVPVVRfSCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9DT1VOVDAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRVAwX1JYX0NPVU5UICAweDdmICAgICAgIC8qIG51bWJlciBvZiByZWNlaXZlZCBieXRlcyBpbiBFUDAgRklGTyAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9OQUtMSU1JVDAgKi8KKworI2RlZmluZSAgICAgICAgICAgICBFUDBfTkFLX0xJTUlUICAweDFmICAgICAgIC8qIG51bWJlciBvZiBmcmFtZXMvbWljcm8gZnJhbWVzIGFmdGVyIHdoaWNoIEVQMCB0aW1lb3V0cyAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9UWF9NQVhfUEFDS0VUICovCisKKyNkZWZpbmUgICAgICAgICBNQVhfUEFDS0VUX1NJWkVfVCAgMHg3ZmYgICAgICAvKiBtYXhpbXVtIGRhdGEgcGF5IGxvYWQgaW4gYSBmcmFtZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9SWF9NQVhfUEFDS0VUICovCisKKyNkZWZpbmUgICAgICAgICBNQVhfUEFDS0VUX1NJWkVfUiAgMHg3ZmYgICAgICAvKiBtYXhpbXVtIGRhdGEgcGF5IGxvYWQgaW4gYSBmcmFtZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9UWENTUiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFRYUEtUUkRZX1QgIDB4MSAgICAgICAgLyogZGF0YSBwYWNrZXQgaW4gRklGTyBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuVFhQS1RSRFlfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBGSUZPX05PVF9FTVBUWV9UICAweDIgICAgICAgIC8qIEZJRk8gbm90IGVtcHR5ICovCisjZGVmaW5lICAgICAgICAgbkZJRk9fTk9UX0VNUFRZX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgVU5ERVJSVU5fVCAgMHg0ICAgICAgICAvKiBUeFBrdFJkeSBub3Qgc2V0ICBmb3IgYW4gSU4gdG9rZW4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuVU5ERVJSVU5fVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIEZMVVNIRklGT19UICAweDggICAgICAgIC8qIGZsdXNoIGVuZHBvaW50IEZJRk8gKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5GTFVTSEZJRk9fVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgU1RBTExfU0VORF9UICAweDEwICAgICAgIC8qIGlzc3VlIGEgU3RhbGwgaGFuZHNoYWtlICovCisjZGVmaW5lICAgICAgICAgICAgIG5TVEFMTF9TRU5EX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFNUQUxMX1NFTlRfVCAgMHgyMCAgICAgICAvKiBTdGFsbCBoYW5kc2hha2UgdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgblNUQUxMX1NFTlRfVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgQ0xFQVJfREFUQVRPR0dMRV9UICAweDQwICAgICAgIC8qIGNsZWFyIGVuZHBvaW50IGRhdGEgdG9nZ2xlICovCisjZGVmaW5lICAgICAgIG5DTEVBUl9EQVRBVE9HR0xFX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgSU5DT01QVFhfVCAgMHg4MCAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCBhIGxhcmdlIHBhY2tldCBpcyBzcGxpdCAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5JTkNPTVBUWF9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBETUFSRVFNT0RFX1QgIDB4NDAwICAgICAgLyogRE1BIG1vZGUgKDAgb3IgMSkgc2VsZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgIG5ETUFSRVFNT0RFX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgIEZPUkNFX0RBVEFUT0dHTEVfVCAgMHg4MDAgICAgICAvKiBGb3JjZSBkYXRhIHRvZ2dsZSAqLworI2RlZmluZSAgICAgICBuRk9SQ0VfREFUQVRPR0dMRV9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBETUFSRVFfRU5BX1QgIDB4MTAwMCAgICAgLyogRW5hYmxlIERNQSByZXF1ZXN0IGZvciBUeCBFUCAqLworI2RlZmluZSAgICAgICAgICAgICBuRE1BUkVRX0VOQV9UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSVNPX1QgIDB4NDAwMCAgICAgLyogZW5hYmxlIElzb2Nocm9ub3VzIHRyYW5zZmVycyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbklTT19UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBBVVRPU0VUX1QgIDB4ODAwMCAgICAgLyogYWxsb3dzIFR4UGt0UmR5IHRvIGJlIHNldCBhdXRvbWF0aWNhbGx5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5BVVRPU0VUX1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUlJPUl9USCAgMHg0ICAgICAgICAvKiBlcnJvciBjb25kaXRpb24gaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVJST1JfVEggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICBTVEFMTF9SRUNFSVZFRF9USCAgMHgyMCAgICAgICAvKiBTdGFsbCBoYW5kc2hha2UgcmVjZWl2ZWQgaG9zdCBtb2RlICovCisjZGVmaW5lICAgICAgICBuU1RBTExfUkVDRUlWRURfVEggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICBOQUtfVElNRU9VVF9USCAgMHg4MCAgICAgICAvKiBOQUsgdGltZW91dCBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgIG5OQUtfVElNRU9VVF9USCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9UWENPVU5UICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUWF9DT1VOVCAgMHgxZmZmICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgc2VsZWN0ZWQgZW5kcG9pbnQgVHggRklGTyAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9SWENTUiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFJYUEtUUkRZX1IgIDB4MSAgICAgICAgLyogZGF0YSBwYWNrZXQgaW4gRklGTyBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuUlhQS1RSRFlfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIEZJRk9fRlVMTF9SICAweDIgICAgICAgIC8qIEZJRk8gbm90IGVtcHR5ICovCisjZGVmaW5lICAgICAgICAgICAgICBuRklGT19GVUxMX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIE9WRVJSVU5fUiAgMHg0ICAgICAgICAvKiBUeFBrdFJkeSBub3Qgc2V0ICBmb3IgYW4gSU4gdG9rZW4gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbk9WRVJSVU5fUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIERBVEFFUlJPUl9SICAweDggICAgICAgIC8qIE91dCBwYWNrZXQgY2Fubm90IGJlIGxvYWRlZCBpbnRvIFJ4ICBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICBuREFUQUVSUk9SX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBGTFVTSEZJRk9fUiAgMHgxMCAgICAgICAvKiBmbHVzaCBlbmRwb2ludCBGSUZPICovCisjZGVmaW5lICAgICAgICAgICAgICBuRkxVU0hGSUZPX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIFNUQUxMX1NFTkRfUiAgMHgyMCAgICAgICAvKiBpc3N1ZSBhIFN0YWxsIGhhbmRzaGFrZSAqLworI2RlZmluZSAgICAgICAgICAgICBuU1RBTExfU0VORF9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBTVEFMTF9TRU5UX1IgIDB4NDAgICAgICAgLyogU3RhbGwgaGFuZHNoYWtlIHRyYW5zbWl0dGVkICovCisjZGVmaW5lICAgICAgICAgICAgIG5TVEFMTF9TRU5UX1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgIENMRUFSX0RBVEFUT0dHTEVfUiAgMHg4MCAgICAgICAvKiBjbGVhciBlbmRwb2ludCBkYXRhIHRvZ2dsZSAqLworI2RlZmluZSAgICAgICBuQ0xFQVJfREFUQVRPR0dMRV9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIElOQ09NUFJYX1IgIDB4MTAwICAgICAgLyogaW5kaWNhdGVzIHRoYXQgYSBsYXJnZSBwYWNrZXQgaXMgc3BsaXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSU5DT01QUlhfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRTU9ERV9SICAweDgwMCAgICAgIC8qIERNQSBtb2RlICgwIG9yIDEpIHNlbGVjdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICBuRE1BUkVRTU9ERV9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBESVNOWUVUX1IgIDB4MTAwMCAgICAgLyogZGlzYWJsZSBOeWV0IGhhbmRzaGFrZXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkRJU05ZRVRfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgRE1BUkVRX0VOQV9SICAweDIwMDAgICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdCBmb3IgVHggRVAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbkRNQVJFUV9FTkFfUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIElTT19SICAweDQwMDAgICAgIC8qIGVuYWJsZSBJc29jaHJvbm91cyB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5JU09fUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIEFVVE9DTEVBUl9SICAweDgwMDAgICAgIC8qIGFsbG93cyBUeFBrdFJkeSB0byBiZSBzZXQgYXV0b21hdGljYWxseSAqLworI2RlZmluZSAgICAgICAgICAgICAgbkFVVE9DTEVBUl9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVJST1JfUkggIDB4NCAgICAgICAgLyogVHhQa3RSZHkgbm90IHNldCAgZm9yIGFuIElOIHRva2VuIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVSUk9SX1JIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBSRVFQS1RfUkggIDB4MjAgICAgICAgLyogcmVxdWVzdCBhbiBJTiB0cmFuc2FjdGlvbiBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblJFUVBLVF9SSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIFNUQUxMX1JFQ0VJVkVEX1JIICAweDQwICAgICAgIC8qIFN0YWxsIGhhbmRzaGFrZSByZWNlaXZlZCBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgIG5TVEFMTF9SRUNFSVZFRF9SSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIElOQ09NUFJYX1JIICAweDEwMCAgICAgIC8qIGluZGljYXRlcyB0aGF0IGEgbGFyZ2UgcGFja2V0IGlzIHNwbGl0IGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgbklOQ09NUFJYX1JIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIERNQVJFUU1PREVfUkggIDB4ODAwICAgICAgLyogRE1BIG1vZGUgKDAgb3IgMSkgc2VsZWN0aW9uIGhvc3QgbW9kZSAqLworI2RlZmluZSAgICAgICAgICAgIG5ETUFSRVFNT0RFX1JIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEFVVE9SRVFfUkggIDB4NDAwMCAgICAgLyogc2V0cyBSZXFQa3QgYXV0b21hdGljYWxseSBob3N0IG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQVVUT1JFUV9SSCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9SWENPVU5UICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBSWF9DT1VOVCAgMHgxZmZmICAgICAvKiBOdW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMgaW4gdGhlIHBhY2tldCBpbiB0aGUgUnggRklGTyAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9UWFRZUEUgKi8KKworI2RlZmluZSAgICAgICAgICAgIFRBUkdFVF9FUF9OT19UICAweGYgICAgICAgIC8qIEVQIG51bWJlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBQUk9UT0NPTF9UICAweGMgICAgICAgIC8qIHRyYW5zZmVyIHR5cGUgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfVFhJTlRFUlZBTCAqLworCisjZGVmaW5lICAgICAgICAgIFRYX1BPTExfSU5URVJWQUwgIDB4ZmYgICAgICAgLyogcG9sbGluZyBpbnRlcnZhbCBmb3Igc2VsZWN0ZWQgVHggRVAgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfUlhUWVBFICovCisKKyNkZWZpbmUgICAgICAgICAgICBUQVJHRVRfRVBfTk9fUiAgMHhmICAgICAgICAvKiBFUCBudW1iZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgUFJPVE9DT0xfUiAgMHhjICAgICAgICAvKiB0cmFuc2ZlciB0eXBlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX1JYSU5URVJWQUwgKi8KKworI2RlZmluZSAgICAgICAgICBSWF9QT0xMX0lOVEVSVkFMICAweGZmICAgICAgIC8qIHBvbGxpbmcgaW50ZXJ2YWwgZm9yIHNlbGVjdGVkIFJ4IEVQICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQV9JTlRFUlJVUFQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTBfSU5UICAweDEgICAgICAgIC8qIERNQTAgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUEwX0lOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTFfSU5UICAweDIgICAgICAgIC8qIERNQTEgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUExX0lOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTJfSU5UICAweDQgICAgICAgIC8qIERNQTIgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUEyX0lOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTNfSU5UICAweDggICAgICAgIC8qIERNQTMgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUEzX0lOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTRfSU5UICAweDEwICAgICAgIC8qIERNQTQgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUE0X0lOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTVfSU5UICAweDIwICAgICAgIC8qIERNQTUgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUE1X0lOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTZfSU5UICAweDQwICAgICAgIC8qIERNQTYgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUE2X0lOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTdfSU5UICAweDgwICAgICAgIC8qIERNQTcgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUE3X0lOVCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4Q09OVFJPTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQV9FTkEgIDB4MSAgICAgICAgLyogRE1BIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ETUFfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBESVJFQ1RJT04gIDB4MiAgICAgICAgLyogZGlyZWN0aW9uIG9mIERNQSB0cmFuc2ZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuRElSRUNUSU9OICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1PREUgIDB4NCAgICAgICAgLyogRE1BIEJ1cyBlcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NT0RFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIElOVF9FTkEgIDB4OCAgICAgICAgLyogSW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5JTlRfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBOVU0gIDB4ZjAgICAgICAgLyogRVAgbnVtYmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQlVTRVJST1IgIDB4MTAwICAgICAgLyogRE1BIEJ1cyBlcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkJVU0VSUk9SICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhBRERSSElHSCAqLworCisjZGVmaW5lICAgICAgICAgICAgIERNQV9BRERSX0hJR0ggIDB4ZmZmZiAgICAgLyogVXBwZXIgMTYtYml0cyBvZiBtZW1vcnkgc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBETUEgbWFzdGVyIGNoYW5uZWwgKi8KKworLyogQml0IG1hc2tzIGZvciBVU0JfRE1BeEFERFJMT1cgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BX0FERFJfTE9XICAweGZmZmYgICAgIC8qIExvd2VyIDE2LWJpdHMgb2YgbWVtb3J5IHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgRE1BIG1hc3RlciBjaGFubmVsICovCisKKy8qIEJpdCBtYXNrcyBmb3IgVVNCX0RNQXhDT1VOVEhJR0ggKi8KKworI2RlZmluZSAgICAgICAgICAgIERNQV9DT1VOVF9ISUdIICAweGZmZmYgICAgIC8qIFVwcGVyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAqLworCisvKiBCaXQgbWFza3MgZm9yIFVTQl9ETUF4Q09VTlRMT1cgKi8KKworI2RlZmluZSAgICAgICAgICAgICBETUFfQ09VTlRfTE9XICAweGZmZmYgICAgIC8qIExvd2VyIDE2LWJpdHMgb2YgYnl0ZSBjb3VudCBvZiBETUEgdHJhbnNmZXIgZm9yIERNQSBtYXN0ZXIgY2hhbm5lbCAqLworCisvKiBCaXQgbWFza3MgZm9yIEhNRE1BeF9DT05UUk9MICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgSE1ETUFFTiAgMHgxICAgICAgICAvKiBIYW5kc2hha2UgTURNQSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuSE1ETUFFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUkVQICAweDIgICAgICAgIC8qIEhhbmRzaGFrZSBNRE1BIFJlcXVlc3QgUG9sYXJpdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblJFUCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVVRFICAweDggICAgICAgIC8qIFVyZ2VuY3kgVGhyZXNob2xkIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuVVRFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBPSUUgIDB4MTAgICAgICAgLyogT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuT0lFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJESUUgIDB4MjAgICAgICAgLyogQmxvY2sgRG9uZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkJESUUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUJESSAgMHg0MCAgICAgICAvKiBNYXNrIEJsb2NrIERvbmUgSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1CREkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIERSUSAgMHgzMDAgICAgICAvKiBIYW5kc2hha2UgTURNQSBSZXF1ZXN0IFR5cGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJCQyAgMHgxMDAwICAgICAvKiBGb3JjZSBSZWxvYWQgb2YgQkNPVU5UICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5SQkMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQUyAgMHgyMDAwICAgICAvKiBQaW4gU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBuUFMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBPSSAgMHg0MDAwICAgICAvKiBPdmVyZmxvdyBJbnRlcnJ1cHQgR2VuZXJhdGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBuT0kgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEJESSAgMHg4MDAwICAgICAvKiBCbG9jayBEb25lIEludGVycnVwdCBHZW5lcmF0ZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkJESSAgMHgwICAgICAgIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAgICAgTVVMVEkgQklUIE1BQ1JPIEVOVU1FUkFUSU9OUyAgICAgICAgICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogICBNWFZSIEFkZHJlc3MgT2Zmc2V0cyAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogQ29udHJvbCBNZXNzYWdlIFJlY2VpdmUgQnVmZmVyIChDTVJCKSBBZGRyZXNzIE9mZnNldHMgKi8KKworI2RlZmluZSBDTVJCX1NUUklERSAgICAgICAweDAwMDAwMDE2bHUKKworI2RlZmluZSBDTVJCX0RTVF9PRkZTRVQgICAweDAwMDAwMDAwbHUKKyNkZWZpbmUgQ01SQl9TUkNfT0ZGU0VUICAgMHgwMDAwMDAwMmx1CisjZGVmaW5lIENNUkJfREFUQV9PRkZTRVQgIDB4MDAwMDAwMDVsdQorCisvKiBDb250cm9sIE1lc3NhZ2UgVHJhbnNtaXQgQnVmZmVyIChDTVRCKSBBZGRyZXNzIE9mZnNldHMgKi8KKworI2RlZmluZSBDTVRCX1BSSU9fT0ZGU0VUICAgIDB4MDAwMDAwMDBsdQorI2RlZmluZSBDTVRCX0RTVF9PRkZTRVQgICAgIDB4MDAwMDAwMDJsdQorI2RlZmluZSBDTVRCX1NSQ19PRkZTRVQgICAgIDB4MDAwMDAwMDRsdQorI2RlZmluZSBDTVRCX1RZUEVfT0ZGU0VUICAgIDB4MDAwMDAwMDZsdQorI2RlZmluZSBDTVRCX0RBVEFfT0ZGU0VUICAgIDB4MDAwMDAwMDdsdQorCisjZGVmaW5lIENNVEJfQU5TV0VSX09GRlNFVCAgMHgwMDAwMDAwQWx1CisKKyNkZWZpbmUgQ01UQl9TVEFUX05fT0ZGU0VUICAweDAwMDAwMDE4bHUKKyNkZWZpbmUgQ01UQl9TVEFUX0FfT0ZGU0VUICAweDAwMDAwMDE2bHUKKyNkZWZpbmUgQ01UQl9TVEFUX0RfT0ZGU0VUICAweDAwMDAwMDBFbHUKKyNkZWZpbmUgQ01UQl9TVEFUX1JfT0ZGU0VUICAweDAwMDAwMDE0bHUKKyNkZWZpbmUgQ01UQl9TVEFUX1dfT0ZGU0VUICAweDAwMDAwMDE0bHUKKyNkZWZpbmUgQ01UQl9TVEFUX0dfT0ZGU0VUICAweDAwMDAwMDE0bHUKKworLyogQXN5bmNocm9ub3VzIFBhY2tldCBSZWNlaXZlIEJ1ZmZlciAoQVBSQikgQWRkcmVzcyBPZmZzZXRzICovCisKKyNkZWZpbmUgQVBSQl9TVFJJREUgICAgICAgMHgwMDAwMDQwMGx1CisKKyNkZWZpbmUgQVBSQl9EU1RfT0ZGU0VUICAgMHgwMDAwMDAwMGx1CisjZGVmaW5lIEFQUkJfTEVOX09GRlNFVCAgIDB4MDAwMDAwMDJsdQorI2RlZmluZSBBUFJCX1NSQ19PRkZTRVQgICAweDAwMDAwMDA0bHUKKyNkZWZpbmUgQVBSQl9EQVRBX09GRlNFVCAgMHgwMDAwMDAwNmx1CisKKy8qIEFzeW5jaHJvbm91cyBQYWNrZXQgVHJhbnNtaXQgQnVmZmVyIChBUFRCKSBBZGRyZXNzIE9mZnNldHMgKi8KKworI2RlZmluZSBBUFRCX1BSSU9fT0ZGU0VUICAweDAwMDAwMDAwbHUKKyNkZWZpbmUgQVBUQl9EU1RfT0ZGU0VUICAgMHgwMDAwMDAwMmx1CisjZGVmaW5lIEFQVEJfTEVOX09GRlNFVCAgIDB4MDAwMDAwMDRsdQorI2RlZmluZSBBUFRCX1NSQ19PRkZTRVQgICAweDAwMDAwMDA2bHUKKyNkZWZpbmUgQVBUQl9EQVRBX09GRlNFVCAgMHgwMDAwMDAwOGx1CisKKy8qIFJlbW90ZSBSZWFkIEJ1ZmZlciAoUlJEQikgQWRkcmVzcyBPZmZzZXRzICovCisKKyNkZWZpbmUgUlJEQl9XQUREUl9PRkZTRVQgMHgwMDAwMDEwMGx1CisjZGVmaW5lIFJSREJfV0xFTl9PRkZTRVQgIDB4MDAwMDAxMDFsdQorCisvKiAqKioqKioqKioqKioqKioqICovCisvKiAgIE1YVlIgTWFjcm9zICAgICovCisvKiAqKioqKioqKioqKioqKioqICovCisKKy8qIE1YVlJfQ09ORklHIE1hY3JvcyAqLworCisjZGVmaW5lIFNFVF9NU0IoeCkgICAgICAgKCAoICh4KSAmIDB4RiAgKSA8PCA5KQorCisvKiBNWFZSX0lOVF9TVEFUXzEgTWFjcm9zICovCisKKyNkZWZpbmUgRE9ORVgoeCkgICAgICAgICAoMHgwMDAwMDAwMiA8PCAoNCAqICh4KSkpCisjZGVmaW5lIEhET05FWCh4KSAgICAgICAgKDB4MDAwMDAwMDEgPDwgKDQgKiAoeCkpKQorCisvKiBNWFZSX0lOVF9FTl8xIE1hY3JvcyAqLworCisjZGVmaW5lIERPTkVFTlgoeCkgICAgICAgKDB4MDAwMDAwMDIgPDwgKDQgKiAoeCkpKQorI2RlZmluZSBIRE9ORUVOWCh4KSAgICAgICgweDAwMDAwMDAxIDw8ICg0ICogKHgpKSkKKworLyogTVhWUl9DRFJQTExfQ1RMIE1hY3JvcyAqLworCisjZGVmaW5lIFNFVF9DRFJTSFBTRUwoeCkgKCAoICh4KSAmIDB4M0YgKSA8PCAxNikKKworLyogTVhWUl9GTVBMTF9DVEwgTWFjcm9zICovCisKKyNkZWZpbmUgU0VUX0NEUkNQU0VMKHgpICAoICggKHgpICYgMHhGRiApIDw8IDI0KQorI2RlZmluZSBTRVRfRk1DUFNFTCh4KSAgICggKCAoeCkgJiAweEZGICkgPDwgMjQpCisKKyNlbmRpZiAvKiBfREVGX0JGNTQ5X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NHhfYmFzZS5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0eF9iYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiMjAwZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NHhfYmFzZS5oCkBAIC0wLDAgKzEsNDkwMiBAQAorLyoKKyAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0eF9iYXNlLmgKKyAqIEJhc2VkIG9uOgorICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6CisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBSZXY6CisgKgorICogTW9kaWZpZWQ6CisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfREVGX0JGNTRYX0gKKyNkZWZpbmUgX0RFRl9CRjU0WF9ICisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qICAgU1lTVEVNICYgTU1SIEFERFJFU1MgREVGSU5JVElPTlMgQ09NTU9OIFRPIEFMTCBBRFNQLUJGNTR4ICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBQTEwgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgIFBMTF9DVEwgIDB4ZmZjMDAwMDAgICAvKiBQTEwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgUExMX0RJViAgMHhmZmMwMDAwNCAgIC8qIFBMTCBEaXZpc29yIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgVlJfQ1RMICAweGZmYzAwMDA4ICAgLyogVm9sdGFnZSBSZWd1bGF0b3IgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBQTExfU1RBVCAgMHhmZmMwMDAwYyAgIC8qIFBMTCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUExMX0xPQ0tDTlQgIDB4ZmZjMDAwMTAgICAvKiBQTEwgTG9jayBDb3VudCBSZWdpc3RlciAqLworCisvKiBEZWJ1Zy9NUC9FbXVsYXRpb24gUmVnaXN0ZXJzICgweEZGQzAwMDE0IC0gMHhGRkMwMDAxNCkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgIENISVBJRCAgMHhmZmMwMDAxNCAgIAorCisvKiBTeXN0ZW0gUmVzZXQgYW5kIEludGVycnVwdCBDb250cm9sbGVyICgweEZGQzAwMTAwIC0gMHhGRkMwMDEwNCkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1JTVCAgMHhmZmMwMDEwMCAgIC8qIFNvZnR3YXJlIFJlc2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNZU0NSICAweGZmYzAwMTA0ICAgLyogU3lzdGVtIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKworLyogU0lDIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBTSUNfSU1BU0swICAweGZmYzAwMTBjICAgLyogU3lzdGVtIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFNJQ19JTUFTSzEgIDB4ZmZjMDAxMTAgICAvKiBTeXN0ZW0gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgU0lDX0lNQVNLMiAgMHhmZmMwMDExNCAgIC8qIFN5c3RlbSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNJQ19JU1IwICAweGZmYzAwMTE4ICAgLyogU3lzdGVtIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBTSUNfSVNSMSAgMHhmZmMwMDExYyAgIC8qIFN5c3RlbSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU0lDX0lTUjIgIDB4ZmZjMDAxMjAgICAvKiBTeXN0ZW0gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNJQ19JV1IwICAweGZmYzAwMTI0ICAgLyogU3lzdGVtIEludGVycnVwdCBXYWtldXAgUmVnaXN0ZXIgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBTSUNfSVdSMSAgMHhmZmMwMDEyOCAgIC8qIFN5c3RlbSBJbnRlcnJ1cHQgV2FrZXVwIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU0lDX0lXUjIgIDB4ZmZjMDAxMmMgICAvKiBTeXN0ZW0gSW50ZXJydXB0IFdha2V1cCBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNJQ19JQVIwICAweGZmYzAwMTMwICAgLyogU3lzdGVtIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU0lDX0lBUjEgIDB4ZmZjMDAxMzQgICAvKiBTeXN0ZW0gSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBTSUNfSUFSMiAgMHhmZmMwMDEzOCAgIC8qIFN5c3RlbSBJbnRlcnJ1cHQgQXNzaWdubWVudCBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNJQ19JQVIzICAweGZmYzAwMTNjICAgLyogU3lzdGVtIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU0lDX0lBUjQgIDB4ZmZjMDAxNDAgICAvKiBTeXN0ZW0gSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBTSUNfSUFSNSAgMHhmZmMwMDE0NCAgIC8qIFN5c3RlbSBJbnRlcnJ1cHQgQXNzaWdubWVudCBSZWdpc3RlciA1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNJQ19JQVI2ICAweGZmYzAwMTQ4ICAgLyogU3lzdGVtIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU0lDX0lBUjcgIDB4ZmZjMDAxNGMgICAvKiBTeXN0ZW0gSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBTSUNfSUFSOCAgMHhmZmMwMDE1MCAgIC8qIFN5c3RlbSBJbnRlcnJ1cHQgQXNzaWdubWVudCBSZWdpc3RlciA4ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNJQ19JQVI5ICAweGZmYzAwMTU0ICAgLyogU3lzdGVtIEludGVycnVwdCBBc3NpZ25tZW50IFJlZ2lzdGVyIDkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTSUNfSUFSMTAgIDB4ZmZjMDAxNTggICAvKiBTeXN0ZW0gSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMTAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTSUNfSUFSMTEgIDB4ZmZjMDAxNWMgICAvKiBTeXN0ZW0gSW50ZXJydXB0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgMTEgKi8KKworLyogV2F0Y2hkb2cgVGltZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgV0RPR19DVEwgIDB4ZmZjMDAyMDAgICAvKiBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFdET0dfQ05UICAweGZmYzAwMjA0ICAgLyogV2F0Y2hkb2cgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBXRE9HX1NUQVQgIDB4ZmZjMDAyMDggICAvKiBXYXRjaGRvZyBTdGF0dXMgUmVnaXN0ZXIgKi8KKworLyogUlRDIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19TVEFUICAweGZmYzAwMzAwICAgLyogUlRDIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBSVENfSUNUTCAgMHhmZmMwMDMwNCAgIC8qIFJUQyBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19JU1RBVCAgMHhmZmMwMDMwOCAgIC8qIFJUQyBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUlRDX1NXQ05UICAweGZmYzAwMzBjICAgLyogUlRDIFN0b3B3YXRjaCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19BTEFSTSAgMHhmZmMwMDMxMCAgIC8qIFJUQyBBbGFybSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBSVENfUFJFTiAgMHhmZmMwMDMxNCAgIC8qIFJUQyBQcmVzY2FsZXIgRW5hYmxlIFJlZ2lzdGVyICovCisKKy8qIFVBUlQwIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDBfRExMICAweGZmYzAwNDAwICAgLyogRGl2aXNvciBMYXRjaCBMb3cgQnl0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQwX0RMSCAgMHhmZmMwMDQwNCAgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBCeXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVQVJUMF9HQ1RMICAweGZmYzAwNDA4ICAgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMF9MQ1IgIDB4ZmZjMDA0MGMgICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMF9NQ1IgIDB4ZmZjMDA0MTAgICAvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDBfTFNSICAweGZmYzAwNDE0ICAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMF9NU1IgIDB4ZmZjMDA0MTggICAvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMF9TQ1IgIDB4ZmZjMDA0MWMgICAvKiBTY3JhdGNoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBVQVJUMF9JRVJfU0VUICAweGZmYzAwNDIwICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBTZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVQVJUMF9JRVJfQ0xFQVIgIDB4ZmZjMDA0MjQgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIENsZWFyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDBfVEhSICAweGZmYzAwNDI4ICAgLyogVHJhbnNtaXQgSG9sZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQwX1JCUiAgMHhmZmMwMDQyYyAgIC8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyICovCisKKy8qIFNQSTAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU1BJMF9DVEwgIDB4ZmZjMDA1MDAgICAvKiBTUEkwIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgU1BJMF9GTEcgIDB4ZmZjMDA1MDQgICAvKiBTUEkwIEZsYWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTUEkwX1NUQVQgIDB4ZmZjMDA1MDggICAvKiBTUEkwIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQSTBfVERCUiAgMHhmZmMwMDUwYyAgIC8qIFNQSTAgVHJhbnNtaXQgRGF0YSBCdWZmZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTUEkwX1JEQlIgIDB4ZmZjMDA1MTAgICAvKiBTUEkwIFJlY2VpdmUgRGF0YSBCdWZmZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTUEkwX0JBVUQgIDB4ZmZjMDA1MTQgICAvKiBTUEkwIEJhdWQgUmF0ZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUEkwX1NIQURPVyAgMHhmZmMwMDUxOCAgIC8qIFNQSTAgUmVjZWl2ZSBEYXRhIEJ1ZmZlciBTaGFkb3cgUmVnaXN0ZXIgKi8KKworLyogVGltZXIgR3JvdXAgb2YgMyByZWdpc3RlcnMgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBzaGFyZWQgZmlsZSBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhdmFpbGFibGUgb24gdGhlIEFEU1AtQkY1NDIgcHJvY2Vzc29yICovCisKKy8qIFR3byBXaXJlIEludGVyZmFjZSBSZWdpc3RlcnMgKFRXSTApICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFdJMF9DTEtESVYgIDB4ZmZjMDA3MDAgICAvKiBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFdJMF9DT05UUk9MICAweGZmYzAwNzA0ICAgLyogVFdJIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kwX1NMQVZFX0NUUkwgIDB4ZmZjMDA3MDggICAvKiBUV0kgU2xhdmUgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMF9TTEFWRV9TVEFUICAweGZmYzAwNzBjICAgLyogVFdJIFNsYXZlIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMF9TTEFWRV9BRERSICAweGZmYzAwNzEwICAgLyogVFdJIFNsYXZlIE1vZGUgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVFdJMF9NQVNURVJfQ1RSTCAgMHhmZmMwMDcxNCAgIC8qIFRXSSBNYXN0ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBUV0kwX01BU1RFUl9TVEFUICAweGZmYzAwNzE4ICAgLyogVFdJIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgVFdJMF9NQVNURVJfQUREUiAgMHhmZmMwMDcxYyAgIC8qIFRXSSBNYXN0ZXIgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUV0kwX0lOVF9TVEFUICAweGZmYzAwNzIwICAgLyogVFdJIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRXSTBfSU5UX01BU0sgIDB4ZmZjMDA3MjQgICAvKiBUV0kgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMF9GSUZPX0NUUkwgIDB4ZmZjMDA3MjggICAvKiBUV0kgRklGTyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRXSTBfRklGT19TVEFUICAweGZmYzAwNzJjICAgLyogVFdJIEZJRk8gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRXSTBfWE1UX0RBVEE4ICAweGZmYzAwNzgwICAgLyogVFdJIEZJRk8gVHJhbnNtaXQgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTBfWE1UX0RBVEExNiAgMHhmZmMwMDc4NCAgIC8qIFRXSSBGSUZPIFRyYW5zbWl0IERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMF9SQ1ZfREFUQTggIDB4ZmZjMDA3ODggICAvKiBUV0kgRklGTyBSZWNlaXZlIERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kwX1JDVl9EQVRBMTYgIDB4ZmZjMDA3OGMgICAvKiBUV0kgRklGTyBSZWNlaXZlIERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIgKi8KKworLyogU1BPUlQwIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBzaGFyZWQgZmlsZSBiZWNhdXNlIGl0IGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIEFEU1AtQkY1NDIgYW5kIEFEU1AtQkY1NDQgcHJvY2Vzc29ycyAqLworCisvKiBTUE9SVDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQxX1RDUjEgIDB4ZmZjMDA5MDAgICAvKiBTUE9SVDEgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMV9UQ1IyICAweGZmYzAwOTA0ICAgLyogU1BPUlQxIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTUE9SVDFfVENMS0RJViAgMHhmZmMwMDkwOCAgIC8qIFNQT1JUMSBUcmFuc21pdCBTZXJpYWwgQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU1BPUlQxX1RGU0RJViAgMHhmZmMwMDkwYyAgIC8qIFNQT1JUMSBUcmFuc21pdCBGcmFtZSBTeW5jIERpdmlkZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTUE9SVDFfVFggIDB4ZmZjMDA5MTAgICAvKiBTUE9SVDEgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMV9SWCAgMHhmZmMwMDkxOCAgIC8qIFNQT1JUMSBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQxX1JDUjEgIDB4ZmZjMDA5MjAgICAvKiBTUE9SVDEgUmVjZWl2ZSBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQxX1JDUjIgIDB4ZmZjMDA5MjQgICAvKiBTUE9SVDEgUmVjZWl2ZSBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU1BPUlQxX1JDTEtESVYgIDB4ZmZjMDA5MjggICAvKiBTUE9SVDEgUmVjZWl2ZSBTZXJpYWwgQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU1BPUlQxX1JGU0RJViAgMHhmZmMwMDkyYyAgIC8qIFNQT1JUMSBSZWNlaXZlIEZyYW1lIFN5bmMgRGl2aWRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDFfU1RBVCAgMHhmZmMwMDkzMCAgIC8qIFNQT1JUMSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQxX0NITkwgIDB4ZmZjMDA5MzQgICAvKiBTUE9SVDEgQ3VycmVudCBDaGFubmVsIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQxX01DTUMxICAweGZmYzAwOTM4ICAgLyogU1BPUlQxIE11bHRpIGNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQxX01DTUMyICAweGZmYzAwOTNjICAgLyogU1BPUlQxIE11bHRpIGNoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQxX01UQ1MwICAweGZmYzAwOTQwICAgLyogU1BPUlQxIE11bHRpIGNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDFfTVRDUzEgIDB4ZmZjMDA5NDQgICAvKiBTUE9SVDEgTXVsdGkgY2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMV9NVENTMiAgMHhmZmMwMDk0OCAgIC8qIFNQT1JUMSBNdWx0aSBjaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQxX01UQ1MzICAweGZmYzAwOTRjICAgLyogU1BPUlQxIE11bHRpIGNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDFfTVJDUzAgIDB4ZmZjMDA5NTAgICAvKiBTUE9SVDEgTXVsdGkgY2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQxX01SQ1MxICAweGZmYzAwOTU0ICAgLyogU1BPUlQxIE11bHRpIGNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMV9NUkNTMiAgMHhmZmMwMDk1OCAgIC8qIFNQT1JUMSBNdWx0aSBjaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDFfTVJDUzMgIDB4ZmZjMDA5NWMgICAvKiBTUE9SVDEgTXVsdGkgY2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAzICovCisKKy8qIEFzeW5jaHJvbm91cyBNZW1vcnkgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFQklVX0FNR0NUTCAgMHhmZmMwMGEwMCAgIC8qIEFzeW5jaHJvbm91cyBNZW1vcnkgR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVCSVVfQU1CQ1RMMCAgIDB4ZmZjMDBhMDQgICAvKiBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmsgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRUJJVV9BTUJDVEwxICAgMHhmZmMwMGEwOCAgIC8qIEFzeW5jaHJvbm91cyBNZW1vcnkgQmFuayBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVCSVVfTUJTQ1RMICAweGZmYzAwYTBjICAgLyogQXN5bmNocm9ub3VzIE1lbW9yeSBCYW5rIFNlbGVjdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9BUkJTVEFUICAweGZmYzAwYTEwICAgLyogQXN5bmNocm9ub3VzIE1lbW9yeSBBcmJpdGVyIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIEVCSVVfTU9ERSAgMHhmZmMwMGExNCAgIC8qIEFzeW5jaHJvbm91cyBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBFQklVX0ZDVEwgIDB4ZmZjMDBhMTggICAvKiBBc3luY2hyb25vdXMgTWVtb3J5IEZsYXNoIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworLyogRERSIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJDVEwwICAweGZmYzAwYTIwICAgLyogRERSIE1lbW9yeSBDb250cm9sIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFQklVX0REUkNUTDEgIDB4ZmZjMDBhMjQgICAvKiBERFIgTWVtb3J5IENvbnRyb2wgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVCSVVfRERSQ1RMMiAgMHhmZmMwMGEyOCAgIC8qIEREUiBNZW1vcnkgQ29udHJvbCAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJDVEwzICAweGZmYzAwYTJjICAgLyogRERSIE1lbW9yeSBDb250cm9sIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJRVUUgIDB4ZmZjMDBhMzAgICAvKiBERFIgUXVldWUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFQklVX0VSUkFERCAgMHhmZmMwMGEzNCAgIC8qIEREUiBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVCSVVfRVJSTVNUICAweGZmYzAwYTM4ICAgLyogRERSIEVycm9yIE1hc3RlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFQklVX1JTVENUTCAgMHhmZmMwMGEzYyAgIC8qIEREUiBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisKKy8qIEREUiBCYW5rUmVhZCBhbmQgV3JpdGUgQ291bnQgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFQklVX0REUkJSQzAgIDB4ZmZjMDBhNjAgICAvKiBERFIgQmFuazAgUmVhZCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVCSVVfRERSQlJDMSAgMHhmZmMwMGE2NCAgIC8qIEREUiBCYW5rMSBSZWFkIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJCUkMyICAweGZmYzAwYTY4ICAgLyogRERSIEJhbmsyIFJlYWQgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFQklVX0REUkJSQzMgIDB4ZmZjMDBhNmMgICAvKiBERFIgQmFuazMgUmVhZCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVCSVVfRERSQlJDNCAgMHhmZmMwMGE3MCAgIC8qIEREUiBCYW5rNCBSZWFkIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJCUkM1ICAweGZmYzAwYTc0ICAgLyogRERSIEJhbms1IFJlYWQgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFQklVX0REUkJSQzYgIDB4ZmZjMDBhNzggICAvKiBERFIgQmFuazYgUmVhZCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVCSVVfRERSQlJDNyAgMHhmZmMwMGE3YyAgIC8qIEREUiBCYW5rNyBSZWFkIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJCV0MwICAweGZmYzAwYTgwICAgLyogRERSIEJhbmswIFdyaXRlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJCV0MxICAweGZmYzAwYTg0ICAgLyogRERSIEJhbmsxIFdyaXRlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJCV0MyICAweGZmYzAwYTg4ICAgLyogRERSIEJhbmsyIFdyaXRlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJCV0MzICAweGZmYzAwYThjICAgLyogRERSIEJhbmszIFdyaXRlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJCV0M0ICAweGZmYzAwYTkwICAgLyogRERSIEJhbms0IFdyaXRlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJCV0M1ICAweGZmYzAwYTk0ICAgLyogRERSIEJhbms1IFdyaXRlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJCV0M2ICAweGZmYzAwYTk4ICAgLyogRERSIEJhbms2IFdyaXRlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJCV0M3ICAweGZmYzAwYTljICAgLyogRERSIEJhbms3IFdyaXRlIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJBQ0NUICAweGZmYzAwYWEwICAgLyogRERSIEFjdGl2YXRpb24gQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFQklVX0REUlRBQ1QgIDB4ZmZjMDBhYTggICAvKiBERFIgVHVybiBBcm91bmQgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFQklVX0REUkFSQ1QgIDB4ZmZjMDBhYWMgICAvKiBERFIgQXV0by1yZWZyZXNoIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVCSVVfRERSR0MwICAweGZmYzAwYWIwICAgLyogRERSIEdyYW50IENvdW50IDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRUJJVV9ERFJHQzEgIDB4ZmZjMDBhYjQgICAvKiBERFIgR3JhbnQgQ291bnQgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFQklVX0REUkdDMiAgMHhmZmMwMGFiOCAgIC8qIEREUiBHcmFudCBDb3VudCAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVCSVVfRERSR0MzICAweGZmYzAwYWJjICAgLyogRERSIEdyYW50IENvdW50IDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFQklVX0REUk1DRU4gIDB4ZmZjMDBhYzAgICAvKiBERFIgTWV0cmljcyBDb3VudGVyIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVCSVVfRERSTUNDTCAgMHhmZmMwMGFjNCAgIC8qIEREUiBNZXRyaWNzIENvdW50ZXIgQ2xlYXIgUmVnaXN0ZXIgKi8KKworLyogRE1BQzAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRE1BQzBfVENQRVIgIDB4ZmZjMDBiMGMgICAvKiBETUEgQ29udHJvbGxlciAwIFRyYWZmaWMgQ29udHJvbCBQZXJpb2RzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERNQUMwX1RDQ05UICAweGZmYzAwYjEwICAgLyogRE1BIENvbnRyb2xsZXIgMCBDdXJyZW50IENvdW50cyBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAwIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgRE1BMF9ORVhUX0RFU0NfUFRSICAweGZmYzAwYzAwICAgLyogRE1BIENoYW5uZWwgMCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTBfU1RBUlRfQUREUiAgMHhmZmMwMGMwNCAgIC8qIERNQSBDaGFubmVsIDAgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBETUEwX0NPTkZJRyAgMHhmZmMwMGMwOCAgIC8qIERNQSBDaGFubmVsIDAgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTBfWF9DT1VOVCAgMHhmZmMwMGMxMCAgIC8qIERNQSBDaGFubmVsIDAgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRE1BMF9YX01PRElGWSAgMHhmZmMwMGMxNCAgIC8qIERNQSBDaGFubmVsIDAgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBETUEwX1lfQ09VTlQgIDB4ZmZjMDBjMTggICAvKiBETUEgQ2hhbm5lbCAwIFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTBfWV9NT0RJRlkgIDB4ZmZjMDBjMWMgICAvKiBETUEgQ2hhbm5lbCAwIFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgRE1BMF9DVVJSX0RFU0NfUFRSICAweGZmYzAwYzIwICAgLyogRE1BIENoYW5uZWwgMCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUEwX0NVUlJfQUREUiAgMHhmZmMwMGMyNCAgIC8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BMF9JUlFfU1RBVFVTICAweGZmYzAwYzI4ICAgLyogRE1BIENoYW5uZWwgMCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBETUEwX1BFUklQSEVSQUxfTUFQICAweGZmYzAwYzJjICAgLyogRE1BIENoYW5uZWwgMCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBETUEwX0NVUlJfWF9DT1VOVCAgMHhmZmMwMGMzMCAgIC8qIERNQSBDaGFubmVsIDAgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIERNQTBfQ1VSUl9ZX0NPVU5UICAweGZmYzAwYzM4ICAgLyogRE1BIENoYW5uZWwgMCBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworLyogRE1BIENoYW5uZWwgMSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIERNQTFfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMGM0MCAgIC8qIERNQSBDaGFubmVsIDEgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUExX1NUQVJUX0FERFIgIDB4ZmZjMDBjNDQgICAvKiBETUEgQ2hhbm5lbCAxIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRE1BMV9DT05GSUcgIDB4ZmZjMDBjNDggICAvKiBETUEgQ2hhbm5lbCAxIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBETUExX1hfQ09VTlQgIDB4ZmZjMDBjNTAgICAvKiBETUEgQ2hhbm5lbCAxIFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTFfWF9NT0RJRlkgIDB4ZmZjMDBjNTQgICAvKiBETUEgQ2hhbm5lbCAxIFggTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE1BMV9ZX0NPVU5UICAweGZmYzAwYzU4ICAgLyogRE1BIENoYW5uZWwgMSBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBETUExX1lfTU9ESUZZICAweGZmYzAwYzVjICAgLyogRE1BIENoYW5uZWwgMSBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTFfQ1VSUl9ERVNDX1BUUiAgMHhmZmMwMGM2MCAgIC8qIERNQSBDaGFubmVsIDEgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BMV9DVVJSX0FERFIgIDB4ZmZjMDBjNjQgICAvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTFfSVJRX1NUQVRVUyAgMHhmZmMwMGM2OCAgIC8qIERNQSBDaGFubmVsIDEgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgRE1BMV9QRVJJUEhFUkFMX01BUCAgMHhmZmMwMGM2YyAgIC8qIERNQSBDaGFubmVsIDEgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgRE1BMV9DVVJSX1hfQ09VTlQgIDB4ZmZjMDBjNzAgICAvKiBETUEgQ2hhbm5lbCAxIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBETUExX0NVUlJfWV9DT1VOVCAgMHhmZmMwMGM3OCAgIC8qIERNQSBDaGFubmVsIDEgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisKKy8qIERNQSBDaGFubmVsIDIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICBETUEyX05FWFRfREVTQ19QVFIgIDB4ZmZjMDBjODAgICAvKiBETUEgQ2hhbm5lbCAyIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BMl9TVEFSVF9BRERSICAweGZmYzAwYzg0ICAgLyogRE1BIENoYW5uZWwgMiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERNQTJfQ09ORklHICAweGZmYzAwYzg4ICAgLyogRE1BIENoYW5uZWwgMiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE1BMl9YX0NPVU5UICAweGZmYzAwYzkwICAgLyogRE1BIENoYW5uZWwgMiBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBETUEyX1hfTU9ESUZZICAweGZmYzAwYzk0ICAgLyogRE1BIENoYW5uZWwgMiBYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTJfWV9DT1VOVCAgMHhmZmMwMGM5OCAgIC8qIERNQSBDaGFubmVsIDIgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRE1BMl9ZX01PRElGWSAgMHhmZmMwMGM5YyAgIC8qIERNQSBDaGFubmVsIDIgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBETUEyX0NVUlJfREVTQ19QVFIgIDB4ZmZjMDBjYTAgICAvKiBETUEgQ2hhbm5lbCAyIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTJfQ1VSUl9BRERSICAweGZmYzAwY2E0ICAgLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUEyX0lSUV9TVEFUVVMgIDB4ZmZjMDBjYTggICAvKiBETUEgQ2hhbm5lbCAyIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTJfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDBjYWMgICAvKiBETUEgQ2hhbm5lbCAyIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIERNQTJfQ1VSUl9YX0NPVU5UICAweGZmYzAwY2IwICAgLyogRE1BIENoYW5uZWwgMiBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgRE1BMl9DVVJSX1lfQ09VTlQgIDB4ZmZjMDBjYjggICAvKiBETUEgQ2hhbm5lbCAyIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAzIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgRE1BM19ORVhUX0RFU0NfUFRSICAweGZmYzAwY2MwICAgLyogRE1BIENoYW5uZWwgMyBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTNfU1RBUlRfQUREUiAgMHhmZmMwMGNjNCAgIC8qIERNQSBDaGFubmVsIDMgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBETUEzX0NPTkZJRyAgMHhmZmMwMGNjOCAgIC8qIERNQSBDaGFubmVsIDMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTNfWF9DT1VOVCAgMHhmZmMwMGNkMCAgIC8qIERNQSBDaGFubmVsIDMgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRE1BM19YX01PRElGWSAgMHhmZmMwMGNkNCAgIC8qIERNQSBDaGFubmVsIDMgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBETUEzX1lfQ09VTlQgIDB4ZmZjMDBjZDggICAvKiBETUEgQ2hhbm5lbCAzIFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTNfWV9NT0RJRlkgIDB4ZmZjMDBjZGMgICAvKiBETUEgQ2hhbm5lbCAzIFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgRE1BM19DVVJSX0RFU0NfUFRSICAweGZmYzAwY2UwICAgLyogRE1BIENoYW5uZWwgMyBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUEzX0NVUlJfQUREUiAgMHhmZmMwMGNlNCAgIC8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BM19JUlFfU1RBVFVTICAweGZmYzAwY2U4ICAgLyogRE1BIENoYW5uZWwgMyBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBETUEzX1BFUklQSEVSQUxfTUFQICAweGZmYzAwY2VjICAgLyogRE1BIENoYW5uZWwgMyBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBETUEzX0NVUlJfWF9DT1VOVCAgMHhmZmMwMGNmMCAgIC8qIERNQSBDaGFubmVsIDMgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIERNQTNfQ1VSUl9ZX0NPVU5UICAweGZmYzAwY2Y4ICAgLyogRE1BIENoYW5uZWwgMyBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworLyogRE1BIENoYW5uZWwgNCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIERNQTRfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMGQwMCAgIC8qIERNQSBDaGFubmVsIDQgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE0X1NUQVJUX0FERFIgIDB4ZmZjMDBkMDQgICAvKiBETUEgQ2hhbm5lbCA0IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRE1BNF9DT05GSUcgIDB4ZmZjMDBkMDggICAvKiBETUEgQ2hhbm5lbCA0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBETUE0X1hfQ09VTlQgIDB4ZmZjMDBkMTAgICAvKiBETUEgQ2hhbm5lbCA0IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTRfWF9NT0RJRlkgIDB4ZmZjMDBkMTQgICAvKiBETUEgQ2hhbm5lbCA0IFggTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE1BNF9ZX0NPVU5UICAweGZmYzAwZDE4ICAgLyogRE1BIENoYW5uZWwgNCBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBETUE0X1lfTU9ESUZZICAweGZmYzAwZDFjICAgLyogRE1BIENoYW5uZWwgNCBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTRfQ1VSUl9ERVNDX1BUUiAgMHhmZmMwMGQyMCAgIC8qIERNQSBDaGFubmVsIDQgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BNF9DVVJSX0FERFIgIDB4ZmZjMDBkMjQgICAvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTRfSVJRX1NUQVRVUyAgMHhmZmMwMGQyOCAgIC8qIERNQSBDaGFubmVsIDQgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgRE1BNF9QRVJJUEhFUkFMX01BUCAgMHhmZmMwMGQyYyAgIC8qIERNQSBDaGFubmVsIDQgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgRE1BNF9DVVJSX1hfQ09VTlQgIDB4ZmZjMDBkMzAgICAvKiBETUEgQ2hhbm5lbCA0IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBETUE0X0NVUlJfWV9DT1VOVCAgMHhmZmMwMGQzOCAgIC8qIERNQSBDaGFubmVsIDQgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisKKy8qIERNQSBDaGFubmVsIDUgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICBETUE1X05FWFRfREVTQ19QVFIgIDB4ZmZjMDBkNDAgICAvKiBETUEgQ2hhbm5lbCA1IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BNV9TVEFSVF9BRERSICAweGZmYzAwZDQ0ICAgLyogRE1BIENoYW5uZWwgNSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERNQTVfQ09ORklHICAweGZmYzAwZDQ4ICAgLyogRE1BIENoYW5uZWwgNSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE1BNV9YX0NPVU5UICAweGZmYzAwZDUwICAgLyogRE1BIENoYW5uZWwgNSBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBETUE1X1hfTU9ESUZZICAweGZmYzAwZDU0ICAgLyogRE1BIENoYW5uZWwgNSBYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTVfWV9DT1VOVCAgMHhmZmMwMGQ1OCAgIC8qIERNQSBDaGFubmVsIDUgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRE1BNV9ZX01PRElGWSAgMHhmZmMwMGQ1YyAgIC8qIERNQSBDaGFubmVsIDUgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBETUE1X0NVUlJfREVTQ19QVFIgIDB4ZmZjMDBkNjAgICAvKiBETUEgQ2hhbm5lbCA1IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTVfQ1VSUl9BRERSICAweGZmYzAwZDY0ICAgLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE1X0lSUV9TVEFUVVMgIDB4ZmZjMDBkNjggICAvKiBETUEgQ2hhbm5lbCA1IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTVfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDBkNmMgICAvKiBETUEgQ2hhbm5lbCA1IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIERNQTVfQ1VSUl9YX0NPVU5UICAweGZmYzAwZDcwICAgLyogRE1BIENoYW5uZWwgNSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgRE1BNV9DVVJSX1lfQ09VTlQgIDB4ZmZjMDBkNzggICAvKiBETUEgQ2hhbm5lbCA1IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCA2IFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgRE1BNl9ORVhUX0RFU0NfUFRSICAweGZmYzAwZDgwICAgLyogRE1BIENoYW5uZWwgNiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTZfU1RBUlRfQUREUiAgMHhmZmMwMGQ4NCAgIC8qIERNQSBDaGFubmVsIDYgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBETUE2X0NPTkZJRyAgMHhmZmMwMGQ4OCAgIC8qIERNQSBDaGFubmVsIDYgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTZfWF9DT1VOVCAgMHhmZmMwMGQ5MCAgIC8qIERNQSBDaGFubmVsIDYgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRE1BNl9YX01PRElGWSAgMHhmZmMwMGQ5NCAgIC8qIERNQSBDaGFubmVsIDYgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBETUE2X1lfQ09VTlQgIDB4ZmZjMDBkOTggICAvKiBETUEgQ2hhbm5lbCA2IFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTZfWV9NT0RJRlkgIDB4ZmZjMDBkOWMgICAvKiBETUEgQ2hhbm5lbCA2IFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgRE1BNl9DVVJSX0RFU0NfUFRSICAweGZmYzAwZGEwICAgLyogRE1BIENoYW5uZWwgNiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUE2X0NVUlJfQUREUiAgMHhmZmMwMGRhNCAgIC8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BNl9JUlFfU1RBVFVTICAweGZmYzAwZGE4ICAgLyogRE1BIENoYW5uZWwgNiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBETUE2X1BFUklQSEVSQUxfTUFQICAweGZmYzAwZGFjICAgLyogRE1BIENoYW5uZWwgNiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBETUE2X0NVUlJfWF9DT1VOVCAgMHhmZmMwMGRiMCAgIC8qIERNQSBDaGFubmVsIDYgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIERNQTZfQ1VSUl9ZX0NPVU5UICAweGZmYzAwZGI4ICAgLyogRE1BIENoYW5uZWwgNiBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworLyogRE1BIENoYW5uZWwgNyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIERNQTdfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMGRjMCAgIC8qIERNQSBDaGFubmVsIDcgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE3X1NUQVJUX0FERFIgIDB4ZmZjMDBkYzQgICAvKiBETUEgQ2hhbm5lbCA3IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRE1BN19DT05GSUcgIDB4ZmZjMDBkYzggICAvKiBETUEgQ2hhbm5lbCA3IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBETUE3X1hfQ09VTlQgIDB4ZmZjMDBkZDAgICAvKiBETUEgQ2hhbm5lbCA3IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTdfWF9NT0RJRlkgIDB4ZmZjMDBkZDQgICAvKiBETUEgQ2hhbm5lbCA3IFggTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE1BN19ZX0NPVU5UICAweGZmYzAwZGQ4ICAgLyogRE1BIENoYW5uZWwgNyBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBETUE3X1lfTU9ESUZZICAweGZmYzAwZGRjICAgLyogRE1BIENoYW5uZWwgNyBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTdfQ1VSUl9ERVNDX1BUUiAgMHhmZmMwMGRlMCAgIC8qIERNQSBDaGFubmVsIDcgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BN19DVVJSX0FERFIgIDB4ZmZjMDBkZTQgICAvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTdfSVJRX1NUQVRVUyAgMHhmZmMwMGRlOCAgIC8qIERNQSBDaGFubmVsIDcgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgRE1BN19QRVJJUEhFUkFMX01BUCAgMHhmZmMwMGRlYyAgIC8qIERNQSBDaGFubmVsIDcgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgRE1BN19DVVJSX1hfQ09VTlQgIDB4ZmZjMDBkZjAgICAvKiBETUEgQ2hhbm5lbCA3IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBETUE3X0NVUlJfWV9DT1VOVCAgMHhmZmMwMGRmOCAgIC8qIERNQSBDaGFubmVsIDcgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisKKy8qIERNQSBDaGFubmVsIDggUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICBETUE4X05FWFRfREVTQ19QVFIgIDB4ZmZjMDBlMDAgICAvKiBETUEgQ2hhbm5lbCA4IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BOF9TVEFSVF9BRERSICAweGZmYzAwZTA0ICAgLyogRE1BIENoYW5uZWwgOCBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERNQThfQ09ORklHICAweGZmYzAwZTA4ICAgLyogRE1BIENoYW5uZWwgOCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE1BOF9YX0NPVU5UICAweGZmYzAwZTEwICAgLyogRE1BIENoYW5uZWwgOCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBETUE4X1hfTU9ESUZZICAweGZmYzAwZTE0ICAgLyogRE1BIENoYW5uZWwgOCBYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQThfWV9DT1VOVCAgMHhmZmMwMGUxOCAgIC8qIERNQSBDaGFubmVsIDggWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRE1BOF9ZX01PRElGWSAgMHhmZmMwMGUxYyAgIC8qIERNQSBDaGFubmVsIDggWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBETUE4X0NVUlJfREVTQ19QVFIgIDB4ZmZjMDBlMjAgICAvKiBETUEgQ2hhbm5lbCA4IEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQThfQ1VSUl9BRERSICAweGZmYzAwZTI0ICAgLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUE4X0lSUV9TVEFUVVMgIDB4ZmZjMDBlMjggICAvKiBETUEgQ2hhbm5lbCA4IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQThfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDBlMmMgICAvKiBETUEgQ2hhbm5lbCA4IFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIERNQThfQ1VSUl9YX0NPVU5UICAweGZmYzAwZTMwICAgLyogRE1BIENoYW5uZWwgOCBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgRE1BOF9DVVJSX1lfQ09VTlQgIDB4ZmZjMDBlMzggICAvKiBETUEgQ2hhbm5lbCA4IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCA5IFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgRE1BOV9ORVhUX0RFU0NfUFRSICAweGZmYzAwZTQwICAgLyogRE1BIENoYW5uZWwgOSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTlfU1RBUlRfQUREUiAgMHhmZmMwMGU0NCAgIC8qIERNQSBDaGFubmVsIDkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBETUE5X0NPTkZJRyAgMHhmZmMwMGU0OCAgIC8qIERNQSBDaGFubmVsIDkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTlfWF9DT1VOVCAgMHhmZmMwMGU1MCAgIC8qIERNQSBDaGFubmVsIDkgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRE1BOV9YX01PRElGWSAgMHhmZmMwMGU1NCAgIC8qIERNQSBDaGFubmVsIDkgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBETUE5X1lfQ09VTlQgIDB4ZmZjMDBlNTggICAvKiBETUEgQ2hhbm5lbCA5IFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTlfWV9NT0RJRlkgIDB4ZmZjMDBlNWMgICAvKiBETUEgQ2hhbm5lbCA5IFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgRE1BOV9DVVJSX0RFU0NfUFRSICAweGZmYzAwZTYwICAgLyogRE1BIENoYW5uZWwgOSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUE5X0NVUlJfQUREUiAgMHhmZmMwMGU2NCAgIC8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRE1BOV9JUlFfU1RBVFVTICAweGZmYzAwZTY4ICAgLyogRE1BIENoYW5uZWwgOSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBETUE5X1BFUklQSEVSQUxfTUFQICAweGZmYzAwZTZjICAgLyogRE1BIENoYW5uZWwgOSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBETUE5X0NVUlJfWF9DT1VOVCAgMHhmZmMwMGU3MCAgIC8qIERNQSBDaGFubmVsIDkgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIERNQTlfQ1VSUl9ZX0NPVU5UICAweGZmYzAwZTc4ICAgLyogRE1BIENoYW5uZWwgOSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworLyogRE1BIENoYW5uZWwgMTAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIERNQTEwX05FWFRfREVTQ19QVFIgIDB4ZmZjMDBlODAgICAvKiBETUEgQ2hhbm5lbCAxMCBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMTBfU1RBUlRfQUREUiAgMHhmZmMwMGU4NCAgIC8qIERNQSBDaGFubmVsIDEwIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBETUExMF9DT05GSUcgIDB4ZmZjMDBlODggICAvKiBETUEgQ2hhbm5lbCAxMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBETUExMF9YX0NPVU5UICAweGZmYzAwZTkwICAgLyogRE1BIENoYW5uZWwgMTAgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUExMF9YX01PRElGWSAgMHhmZmMwMGU5NCAgIC8qIERNQSBDaGFubmVsIDEwIFggTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBETUExMF9ZX0NPVU5UICAweGZmYzAwZTk4ICAgLyogRE1BIENoYW5uZWwgMTAgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUExMF9ZX01PRElGWSAgMHhmZmMwMGU5YyAgIC8qIERNQSBDaGFubmVsIDEwIFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBETUExMF9DVVJSX0RFU0NfUFRSICAweGZmYzAwZWEwICAgLyogRE1BIENoYW5uZWwgMTAgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUExMF9DVVJSX0FERFIgIDB4ZmZjMDBlYTQgICAvKiBETUEgQ2hhbm5lbCAxMCBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIERNQTEwX0lSUV9TVEFUVVMgIDB4ZmZjMDBlYTggICAvKiBETUEgQ2hhbm5lbCAxMCBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgIERNQTEwX1BFUklQSEVSQUxfTUFQICAweGZmYzAwZWFjICAgLyogRE1BIENoYW5uZWwgMTAgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBETUExMF9DVVJSX1hfQ09VTlQgIDB4ZmZjMDBlYjAgICAvKiBETUEgQ2hhbm5lbCAxMCBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBETUExMF9DVVJSX1lfQ09VTlQgIDB4ZmZjMDBlYjggICAvKiBETUEgQ2hhbm5lbCAxMCBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworLyogRE1BIENoYW5uZWwgMTEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgIERNQTExX05FWFRfREVTQ19QVFIgIDB4ZmZjMDBlYzAgICAvKiBETUEgQ2hhbm5lbCAxMSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMTFfU1RBUlRfQUREUiAgMHhmZmMwMGVjNCAgIC8qIERNQSBDaGFubmVsIDExIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBETUExMV9DT05GSUcgIDB4ZmZjMDBlYzggICAvKiBETUEgQ2hhbm5lbCAxMSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBETUExMV9YX0NPVU5UICAweGZmYzAwZWQwICAgLyogRE1BIENoYW5uZWwgMTEgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUExMV9YX01PRElGWSAgMHhmZmMwMGVkNCAgIC8qIERNQSBDaGFubmVsIDExIFggTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBETUExMV9ZX0NPVU5UICAweGZmYzAwZWQ4ICAgLyogRE1BIENoYW5uZWwgMTEgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUExMV9ZX01PRElGWSAgMHhmZmMwMGVkYyAgIC8qIERNQSBDaGFubmVsIDExIFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBETUExMV9DVVJSX0RFU0NfUFRSICAweGZmYzAwZWUwICAgLyogRE1BIENoYW5uZWwgMTEgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBETUExMV9DVVJSX0FERFIgIDB4ZmZjMDBlZTQgICAvKiBETUEgQ2hhbm5lbCAxMSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIERNQTExX0lSUV9TVEFUVVMgIDB4ZmZjMDBlZTggICAvKiBETUEgQ2hhbm5lbCAxMSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgIERNQTExX1BFUklQSEVSQUxfTUFQICAweGZmYzAwZWVjICAgLyogRE1BIENoYW5uZWwgMTEgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBETUExMV9DVVJSX1hfQ09VTlQgIDB4ZmZjMDBlZjAgICAvKiBETUEgQ2hhbm5lbCAxMSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBETUExMV9DVVJSX1lfQ09VTlQgIDB4ZmZjMDBlZjggICAvKiBETUEgQ2hhbm5lbCAxMSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworLyogTURNQSBTdHJlYW0gMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgIE1ETUFfRDBfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMGYwMCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBNRE1BX0QwX1NUQVJUX0FERFIgIDB4ZmZjMDBmMDQgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTURNQV9EMF9DT05GSUcgIDB4ZmZjMDBmMDggICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNRE1BX0QwX1hfQ09VTlQgIDB4ZmZjMDBmMTAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1ETUFfRDBfWF9NT0RJRlkgIDB4ZmZjMDBmMTQgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIFggTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTURNQV9EMF9ZX0NPVU5UICAweGZmYzAwZjE4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNRE1BX0QwX1lfTU9ESUZZICAweGZmYzAwZjFjICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMCBEZXN0aW5hdGlvbiBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgIE1ETUFfRDBfQ1VSUl9ERVNDX1BUUiAgMHhmZmMwMGYyMCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgTURNQV9EMF9DVVJSX0FERFIgIDB4ZmZjMDBmMjQgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIE1ETUFfRDBfSVJRX1NUQVRVUyAgMHhmZmMwMGYyOCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgTURNQV9EMF9QRVJJUEhFUkFMX01BUCAgMHhmZmMwMGYyYyAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTURNQV9EMF9DVVJSX1hfQ09VTlQgIDB4ZmZjMDBmMzAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAwIERlc3RpbmF0aW9uIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICBNRE1BX0QwX0NVUlJfWV9DT1VOVCAgMHhmZmMwMGYzOCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDAgRGVzdGluYXRpb24gQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgTURNQV9TMF9ORVhUX0RFU0NfUFRSICAweGZmYzAwZjQwICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMCBTb3VyY2UgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBNRE1BX1MwX1NUQVJUX0FERFIgIDB4ZmZjMDBmNDQgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAwIFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1ETUFfUzBfQ09ORklHICAweGZmYzAwZjQ4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMCBTb3VyY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1ETUFfUzBfWF9DT1VOVCAgMHhmZmMwMGY1MCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDAgU291cmNlIFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1ETUFfUzBfWF9NT0RJRlkgIDB4ZmZjMDBmNTQgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAwIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1ETUFfUzBfWV9DT1VOVCAgMHhmZmMwMGY1OCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDAgU291cmNlIFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1ETUFfUzBfWV9NT0RJRlkgIDB4ZmZjMDBmNWMgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAwIFNvdXJjZSBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgIE1ETUFfUzBfQ1VSUl9ERVNDX1BUUiAgMHhmZmMwMGY2MCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDAgU291cmNlIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIE1ETUFfUzBfQ1VSUl9BRERSICAweGZmYzAwZjY0ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgTURNQV9TMF9JUlFfU1RBVFVTICAweGZmYzAwZjY4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMCBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgTURNQV9TMF9QRVJJUEhFUkFMX01BUCAgMHhmZmMwMGY2YyAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDAgU291cmNlIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgIE1ETUFfUzBfQ1VSUl9YX0NPVU5UICAweGZmYzAwZjcwICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgIE1ETUFfUzBfQ1VSUl9ZX0NPVU5UICAweGZmYzAwZjc4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMCBTb3VyY2UgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisKKy8qIE1ETUEgU3RyZWFtIDEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICBNRE1BX0QxX05FWFRfREVTQ19QVFIgIDB4ZmZjMDBmODAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgTURNQV9EMV9TVEFSVF9BRERSICAweGZmYzAwZjg0ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1ETUFfRDFfQ09ORklHICAweGZmYzAwZjg4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTURNQV9EMV9YX0NPVU5UICAweGZmYzAwZjkwICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNRE1BX0QxX1hfTU9ESUZZICAweGZmYzAwZjk0ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1ETUFfRDFfWV9DT1VOVCAgMHhmZmMwMGY5OCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTURNQV9EMV9ZX01PRElGWSAgMHhmZmMwMGY5YyAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDEgRGVzdGluYXRpb24gWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICBNRE1BX0QxX0NVUlJfREVTQ19QVFIgIDB4ZmZjMDBmYTAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIE1ETUFfRDFfQ1VSUl9BRERSICAweGZmYzAwZmE0ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBNRE1BX0QxX0lSUV9TVEFUVVMgIDB4ZmZjMDBmYTggICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgIE1ETUFfRDFfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDBmYWMgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgIE1ETUFfRDFfQ1VSUl9YX0NPVU5UICAweGZmYzAwZmIwICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMSBEZXN0aW5hdGlvbiBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTURNQV9EMV9DVVJSX1lfQ09VTlQgIDB4ZmZjMDBmYjggICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAxIERlc3RpbmF0aW9uIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgIE1ETUFfUzFfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMGZjMCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDEgU291cmNlIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgTURNQV9TMV9TVEFSVF9BRERSICAweGZmYzAwZmM0ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMSBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBNRE1BX1MxX0NPTkZJRyAgMHhmZmMwMGZjOCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDEgU291cmNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNRE1BX1MxX1hfQ09VTlQgIDB4ZmZjMDBmZDAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAxIFNvdXJjZSBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNRE1BX1MxX1hfTU9ESUZZICAweGZmYzAwZmQ0ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMSBTb3VyY2UgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNRE1BX1MxX1lfQ09VTlQgIDB4ZmZjMDBmZDggICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAxIFNvdXJjZSBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNRE1BX1MxX1lfTU9ESUZZICAweGZmYzAwZmRjICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMSBTb3VyY2UgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICBNRE1BX1MxX0NVUlJfREVTQ19QVFIgIDB4ZmZjMDBmZTAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAxIFNvdXJjZSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBNRE1BX1MxX0NVUlJfQUREUiAgMHhmZmMwMGZlNCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIE1ETUFfUzFfSVJRX1NUQVRVUyAgMHhmZmMwMGZlOCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDEgU291cmNlIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgIE1ETUFfUzFfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDBmZWMgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAxIFNvdXJjZSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICBNRE1BX1MxX0NVUlJfWF9DT1VOVCAgMHhmZmMwMGZmMCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICBNRE1BX1MxX0NVUlJfWV9DT1VOVCAgMHhmZmMwMGZmOCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDEgU291cmNlIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBVQVJUMyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQzX0RMTCAgMHhmZmMwMzEwMCAgIC8qIERpdmlzb3IgTGF0Y2ggTG93IEJ5dGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUM19ETEggIDB4ZmZjMDMxMDQgICAvKiBEaXZpc29yIExhdGNoIEhpZ2ggQnl0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVUFSVDNfR0NUTCAgMHhmZmMwMzEwOCAgIC8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDNfTENSICAweGZmYzAzMTBjICAgLyogTGluZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDNfTUNSICAweGZmYzAzMTEwICAgLyogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQzX0xTUiAgMHhmZmMwMzExNCAgIC8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDNfTVNSICAweGZmYzAzMTE4ICAgLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDNfU0NSICAweGZmYzAzMTFjICAgLyogU2NyYXRjaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVUFSVDNfSUVSX1NFVCAgMHhmZmMwMzEyMCAgIC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVUFSVDNfSUVSX0NMRUFSICAweGZmYzAzMTI0ICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBDbGVhciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQzX1RIUiAgMHhmZmMwMzEyOCAgIC8qIFRyYW5zbWl0IEhvbGQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUM19SQlIgIDB4ZmZjMDMxMmMgICAvKiBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAqLworCisvKiBFUFBJMSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkxX1NUQVRVUyAgMHhmZmMwMTMwMCAgIC8qIEVQUEkxIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkxX0hDT1VOVCAgMHhmZmMwMTMwNCAgIC8qIEVQUEkxIEhvcml6b250YWwgVHJhbnNmZXIgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMV9IREVMQVkgIDB4ZmZjMDEzMDggICAvKiBFUFBJMSBIb3Jpem9udGFsIERlbGF5IENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTFfVkNPVU5UICAweGZmYzAxMzBjICAgLyogRVBQSTEgVmVydGljYWwgVHJhbnNmZXIgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMV9WREVMQVkgIDB4ZmZjMDEzMTAgICAvKiBFUFBJMSBWZXJ0aWNhbCBEZWxheSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFUFBJMV9GUkFNRSAgMHhmZmMwMTMxNCAgIC8qIEVQUEkxIExpbmVzIHBlciBGcmFtZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRVBQSTFfTElORSAgMHhmZmMwMTMxOCAgIC8qIEVQUEkxIFNhbXBsZXMgcGVyIExpbmUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMV9DTEtESVYgIDB4ZmZjMDEzMWMgICAvKiBFUFBJMSBDbG9jayBEaXZpZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQUEkxX0NPTlRST0wgIDB4ZmZjMDEzMjAgICAvKiBFUFBJMSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVQUEkxX0ZTMVdfSEJMICAweGZmYzAxMzI0ICAgLyogRVBQSTEgRlMxIFdpZHRoIFJlZ2lzdGVyIC8gRVBQSTEgSG9yaXpvbnRhbCBCbGFua2luZyBTYW1wbGVzIFBlciBMaW5lIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVBQSTFfRlMxUF9BVlBMICAweGZmYzAxMzI4ICAgLyogRVBQSTEgRlMxIFBlcmlvZCBSZWdpc3RlciAvIEVQUEkxIEFjdGl2ZSBWaWRlbyBTYW1wbGVzIFBlciBMaW5lIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVQUEkxX0ZTMldfTFZCICAweGZmYzAxMzJjICAgLyogRVBQSTEgRlMyIFdpZHRoIFJlZ2lzdGVyIC8gRVBQSTEgTGluZXMgb2YgVmVydGljYWwgQmxhbmtpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUFBJMV9GUzJQX0xBVkYgIDB4ZmZjMDEzMzAgICAvKiBFUFBJMSBGUzIgUGVyaW9kIFJlZ2lzdGVyLyBFUFBJMSBMaW5lcyBvZiBBY3RpdmUgVmlkZW8gUGVyIEZpZWxkIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBFUFBJMV9DTElQICAweGZmYzAxMzM0ICAgLyogRVBQSTEgQ2xpcHBpbmcgUmVnaXN0ZXIgKi8KKworLyogUG9ydCBJbnRlcnJ1cHQgMCBSZWdpc3RlcnMgKDMyLWJpdCkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBQSU5UMF9NQVNLX1NFVCAgMHhmZmMwMTQwMCAgIC8qIFBpbiBJbnRlcnJ1cHQgMCBNYXNrIFNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgUElOVDBfTUFTS19DTEVBUiAgMHhmZmMwMTQwNCAgIC8qIFBpbiBJbnRlcnJ1cHQgMCBNYXNrIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQSU5UMF9SRVFVRVNUICAweGZmYzAxNDA4ICAgLyogUGluIEludGVycnVwdCAwIEludGVycnVwdCBSZXF1ZXN0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElOVDBfQVNTSUdOICAweGZmYzAxNDBjICAgLyogUGluIEludGVycnVwdCAwIFBvcnQgQXNzaWduIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFBJTlQwX0VER0VfU0VUICAweGZmYzAxNDEwICAgLyogUGluIEludGVycnVwdCAwIEVkZ2Utc2Vuc2l0aXZpdHkgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBQSU5UMF9FREdFX0NMRUFSICAweGZmYzAxNDE0ICAgLyogUGluIEludGVycnVwdCAwIEVkZ2Utc2Vuc2l0aXZpdHkgQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFBJTlQwX0lOVkVSVF9TRVQgIDB4ZmZjMDE0MTggICAvKiBQaW4gSW50ZXJydXB0IDAgSW52ZXJzaW9uIFNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIFBJTlQwX0lOVkVSVF9DTEVBUiAgMHhmZmMwMTQxYyAgIC8qIFBpbiBJbnRlcnJ1cHQgMCBJbnZlcnNpb24gQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUElOVDBfUElOU1RBVEUgIDB4ZmZjMDE0MjAgICAvKiBQaW4gSW50ZXJydXB0IDAgUGluIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQSU5UMF9MQVRDSCAgMHhmZmMwMTQyNCAgIC8qIFBpbiBJbnRlcnJ1cHQgMCBMYXRjaCBSZWdpc3RlciAqLworCisvKiBQb3J0IEludGVycnVwdCAxIFJlZ2lzdGVycyAoMzItYml0KSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFBJTlQxX01BU0tfU0VUICAweGZmYzAxNDMwICAgLyogUGluIEludGVycnVwdCAxIE1hc2sgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBQSU5UMV9NQVNLX0NMRUFSICAweGZmYzAxNDM0ICAgLyogUGluIEludGVycnVwdCAxIE1hc2sgQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBJTlQxX1JFUVVFU1QgIDB4ZmZjMDE0MzggICAvKiBQaW4gSW50ZXJydXB0IDEgSW50ZXJydXB0IFJlcXVlc3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQSU5UMV9BU1NJR04gIDB4ZmZjMDE0M2MgICAvKiBQaW4gSW50ZXJydXB0IDEgUG9ydCBBc3NpZ24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUElOVDFfRURHRV9TRVQgIDB4ZmZjMDE0NDAgICAvKiBQaW4gSW50ZXJydXB0IDEgRWRnZS1zZW5zaXRpdml0eSBTZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFBJTlQxX0VER0VfQ0xFQVIgIDB4ZmZjMDE0NDQgICAvKiBQaW4gSW50ZXJydXB0IDEgRWRnZS1zZW5zaXRpdml0eSBDbGVhciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgUElOVDFfSU5WRVJUX1NFVCAgMHhmZmMwMTQ0OCAgIC8qIFBpbiBJbnRlcnJ1cHQgMSBJbnZlcnNpb24gU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgUElOVDFfSU5WRVJUX0NMRUFSICAweGZmYzAxNDRjICAgLyogUGluIEludGVycnVwdCAxIEludmVyc2lvbiBDbGVhciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBQSU5UMV9QSU5TVEFURSAgMHhmZmMwMTQ1MCAgIC8qIFBpbiBJbnRlcnJ1cHQgMSBQaW4gU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFBJTlQxX0xBVENIICAweGZmYzAxNDU0ICAgLyogUGluIEludGVycnVwdCAxIExhdGNoIFJlZ2lzdGVyICovCisKKy8qIFBvcnQgSW50ZXJydXB0IDIgUmVnaXN0ZXJzICgzMi1iaXQpICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUElOVDJfTUFTS19TRVQgIDB4ZmZjMDE0NjAgICAvKiBQaW4gSW50ZXJydXB0IDIgTWFzayBTZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFBJTlQyX01BU0tfQ0xFQVIgIDB4ZmZjMDE0NjQgICAvKiBQaW4gSW50ZXJydXB0IDIgTWFzayBDbGVhciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUElOVDJfUkVRVUVTVCAgMHhmZmMwMTQ2OCAgIC8qIFBpbiBJbnRlcnJ1cHQgMiBJbnRlcnJ1cHQgUmVxdWVzdCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFBJTlQyX0FTU0lHTiAgMHhmZmMwMTQ2YyAgIC8qIFBpbiBJbnRlcnJ1cHQgMiBQb3J0IEFzc2lnbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBQSU5UMl9FREdFX1NFVCAgMHhmZmMwMTQ3MCAgIC8qIFBpbiBJbnRlcnJ1cHQgMiBFZGdlLXNlbnNpdGl2aXR5IFNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgUElOVDJfRURHRV9DTEVBUiAgMHhmZmMwMTQ3NCAgIC8qIFBpbiBJbnRlcnJ1cHQgMiBFZGdlLXNlbnNpdGl2aXR5IENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBQSU5UMl9JTlZFUlRfU0VUICAweGZmYzAxNDc4ICAgLyogUGluIEludGVycnVwdCAyIEludmVyc2lvbiBTZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBQSU5UMl9JTlZFUlRfQ0xFQVIgIDB4ZmZjMDE0N2MgICAvKiBQaW4gSW50ZXJydXB0IDIgSW52ZXJzaW9uIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFBJTlQyX1BJTlNUQVRFICAweGZmYzAxNDgwICAgLyogUGluIEludGVycnVwdCAyIFBpbiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUElOVDJfTEFUQ0ggIDB4ZmZjMDE0ODQgICAvKiBQaW4gSW50ZXJydXB0IDIgTGF0Y2ggUmVnaXN0ZXIgKi8KKworLyogUG9ydCBJbnRlcnJ1cHQgMyBSZWdpc3RlcnMgKDMyLWJpdCkgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBQSU5UM19NQVNLX1NFVCAgMHhmZmMwMTQ5MCAgIC8qIFBpbiBJbnRlcnJ1cHQgMyBNYXNrIFNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgUElOVDNfTUFTS19DTEVBUiAgMHhmZmMwMTQ5NCAgIC8qIFBpbiBJbnRlcnJ1cHQgMyBNYXNrIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQSU5UM19SRVFVRVNUICAweGZmYzAxNDk4ICAgLyogUGluIEludGVycnVwdCAzIEludGVycnVwdCBSZXF1ZXN0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUElOVDNfQVNTSUdOICAweGZmYzAxNDljICAgLyogUGluIEludGVycnVwdCAzIFBvcnQgQXNzaWduIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFBJTlQzX0VER0VfU0VUICAweGZmYzAxNGEwICAgLyogUGluIEludGVycnVwdCAzIEVkZ2Utc2Vuc2l0aXZpdHkgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBQSU5UM19FREdFX0NMRUFSICAweGZmYzAxNGE0ICAgLyogUGluIEludGVycnVwdCAzIEVkZ2Utc2Vuc2l0aXZpdHkgQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIFBJTlQzX0lOVkVSVF9TRVQgIDB4ZmZjMDE0YTggICAvKiBQaW4gSW50ZXJydXB0IDMgSW52ZXJzaW9uIFNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIFBJTlQzX0lOVkVSVF9DTEVBUiAgMHhmZmMwMTRhYyAgIC8qIFBpbiBJbnRlcnJ1cHQgMyBJbnZlcnNpb24gQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUElOVDNfUElOU1RBVEUgIDB4ZmZjMDE0YjAgICAvKiBQaW4gSW50ZXJydXB0IDMgUGluIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQSU5UM19MQVRDSCAgMHhmZmMwMTRiNCAgIC8qIFBpbiBJbnRlcnJ1cHQgMyBMYXRjaCBSZWdpc3RlciAqLworCisvKiBQb3J0IEEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQT1JUQV9GRVIgIDB4ZmZjMDE0YzAgICAvKiBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9SVEEgIDB4ZmZjMDE0YzQgICAvKiBHUElPIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQT1JUQV9TRVQgIDB4ZmZjMDE0YzggICAvKiBHUElPIERhdGEgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFBPUlRBX0NMRUFSICAweGZmYzAxNGNjICAgLyogR1BJTyBEYXRhIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQT1JUQV9ESVJfU0VUICAweGZmYzAxNGQwICAgLyogR1BJTyBEaXJlY3Rpb24gU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUE9SVEFfRElSX0NMRUFSICAweGZmYzAxNGQ0ICAgLyogR1BJTyBEaXJlY3Rpb24gQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBPUlRBX0lORU4gIDB4ZmZjMDE0ZDggICAvKiBHUElPIElucHV0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRBX01VWCAgMHhmZmMwMTRkYyAgIC8qIE11bHRpcGxleGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworLyogUG9ydCBCIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUE9SVEJfRkVSICAweGZmYzAxNGUwICAgLyogRnVuY3Rpb24gRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRCICAweGZmYzAxNGU0ICAgLyogR1BJTyBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUE9SVEJfU0VUICAweGZmYzAxNGU4ICAgLyogR1BJTyBEYXRhIFNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQT1JUQl9DTEVBUiAgMHhmZmMwMTRlYyAgIC8qIEdQSU8gRGF0YSBDbGVhciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUE9SVEJfRElSX1NFVCAgMHhmZmMwMTRmMCAgIC8qIEdQSU8gRGlyZWN0aW9uIFNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFBPUlRCX0RJUl9DTEVBUiAgMHhmZmMwMTRmNCAgIC8qIEdQSU8gRGlyZWN0aW9uIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQT1JUQl9JTkVOICAweGZmYzAxNGY4ICAgLyogR1BJTyBJbnB1dCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQT1JUQl9NVVggIDB4ZmZjMDE0ZmMgICAvKiBNdWx0aXBsZXhlciBDb250cm9sIFJlZ2lzdGVyICovCisKKy8qIFBvcnQgQyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRDX0ZFUiAgMHhmZmMwMTUwMCAgIC8qIEZ1bmN0aW9uIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT1JUQyAgMHhmZmMwMTUwNCAgIC8qIEdQSU8gRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRDX1NFVCAgMHhmZmMwMTUwOCAgIC8qIEdQSU8gRGF0YSBTZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUE9SVENfQ0xFQVIgIDB4ZmZjMDE1MGMgICAvKiBHUElPIERhdGEgQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBPUlRDX0RJUl9TRVQgIDB4ZmZjMDE1MTAgICAvKiBHUElPIERpcmVjdGlvbiBTZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBQT1JUQ19ESVJfQ0xFQVIgIDB4ZmZjMDE1MTQgICAvKiBHUElPIERpcmVjdGlvbiBDbGVhciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUE9SVENfSU5FTiAgMHhmZmMwMTUxOCAgIC8qIEdQSU8gSW5wdXQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUE9SVENfTVVYICAweGZmYzAxNTFjICAgLyogTXVsdGlwbGV4ZXIgQ29udHJvbCBSZWdpc3RlciAqLworCisvKiBQb3J0IEQgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQT1JURF9GRVIgIDB4ZmZjMDE1MjAgICAvKiBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9SVEQgIDB4ZmZjMDE1MjQgICAvKiBHUElPIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQT1JURF9TRVQgIDB4ZmZjMDE1MjggICAvKiBHUElPIERhdGEgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFBPUlREX0NMRUFSICAweGZmYzAxNTJjICAgLyogR1BJTyBEYXRhIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQT1JURF9ESVJfU0VUICAweGZmYzAxNTMwICAgLyogR1BJTyBEaXJlY3Rpb24gU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUE9SVERfRElSX0NMRUFSICAweGZmYzAxNTM0ICAgLyogR1BJTyBEaXJlY3Rpb24gQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBPUlREX0lORU4gIDB4ZmZjMDE1MzggICAvKiBHUElPIElucHV0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBPUlREX01VWCAgMHhmZmMwMTUzYyAgIC8qIE11bHRpcGxleGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworLyogUG9ydCBFIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUE9SVEVfRkVSICAweGZmYzAxNTQwICAgLyogRnVuY3Rpb24gRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRFICAweGZmYzAxNTQ0ICAgLyogR1BJTyBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUE9SVEVfU0VUICAweGZmYzAxNTQ4ICAgLyogR1BJTyBEYXRhIFNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQT1JURV9DTEVBUiAgMHhmZmMwMTU0YyAgIC8qIEdQSU8gRGF0YSBDbGVhciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUE9SVEVfRElSX1NFVCAgMHhmZmMwMTU1MCAgIC8qIEdQSU8gRGlyZWN0aW9uIFNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFBPUlRFX0RJUl9DTEVBUiAgMHhmZmMwMTU1NCAgIC8qIEdQSU8gRGlyZWN0aW9uIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQT1JURV9JTkVOICAweGZmYzAxNTU4ICAgLyogR1BJTyBJbnB1dCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQT1JURV9NVVggIDB4ZmZjMDE1NWMgICAvKiBNdWx0aXBsZXhlciBDb250cm9sIFJlZ2lzdGVyICovCisKKy8qIFBvcnQgRiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRGX0ZFUiAgMHhmZmMwMTU2MCAgIC8qIEZ1bmN0aW9uIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT1JURiAgMHhmZmMwMTU2NCAgIC8qIEdQSU8gRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRGX1NFVCAgMHhmZmMwMTU2OCAgIC8qIEdQSU8gRGF0YSBTZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUE9SVEZfQ0xFQVIgIDB4ZmZjMDE1NmMgICAvKiBHUElPIERhdGEgQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBPUlRGX0RJUl9TRVQgIDB4ZmZjMDE1NzAgICAvKiBHUElPIERpcmVjdGlvbiBTZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBQT1JURl9ESVJfQ0xFQVIgIDB4ZmZjMDE1NzQgICAvKiBHUElPIERpcmVjdGlvbiBDbGVhciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUE9SVEZfSU5FTiAgMHhmZmMwMTU3OCAgIC8qIEdQSU8gSW5wdXQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUE9SVEZfTVVYICAweGZmYzAxNTdjICAgLyogTXVsdGlwbGV4ZXIgQ29udHJvbCBSZWdpc3RlciAqLworCisvKiBQb3J0IEcgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQT1JUR19GRVIgIDB4ZmZjMDE1ODAgICAvKiBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9SVEcgIDB4ZmZjMDE1ODQgICAvKiBHUElPIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQT1JUR19TRVQgIDB4ZmZjMDE1ODggICAvKiBHUElPIERhdGEgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFBPUlRHX0NMRUFSICAweGZmYzAxNThjICAgLyogR1BJTyBEYXRhIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQT1JUR19ESVJfU0VUICAweGZmYzAxNTkwICAgLyogR1BJTyBEaXJlY3Rpb24gU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUE9SVEdfRElSX0NMRUFSICAweGZmYzAxNTk0ICAgLyogR1BJTyBEaXJlY3Rpb24gQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBPUlRHX0lORU4gIDB4ZmZjMDE1OTggICAvKiBHUElPIElucHV0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRHX01VWCAgMHhmZmMwMTU5YyAgIC8qIE11bHRpcGxleGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworLyogUG9ydCBIIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUE9SVEhfRkVSICAweGZmYzAxNWEwICAgLyogRnVuY3Rpb24gRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRIICAweGZmYzAxNWE0ICAgLyogR1BJTyBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUE9SVEhfU0VUICAweGZmYzAxNWE4ICAgLyogR1BJTyBEYXRhIFNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQT1JUSF9DTEVBUiAgMHhmZmMwMTVhYyAgIC8qIEdQSU8gRGF0YSBDbGVhciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUE9SVEhfRElSX1NFVCAgMHhmZmMwMTViMCAgIC8qIEdQSU8gRGlyZWN0aW9uIFNldCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFBPUlRIX0RJUl9DTEVBUiAgMHhmZmMwMTViNCAgIC8qIEdQSU8gRGlyZWN0aW9uIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQT1JUSF9JTkVOICAweGZmYzAxNWI4ICAgLyogR1BJTyBJbnB1dCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQT1JUSF9NVVggIDB4ZmZjMDE1YmMgICAvKiBNdWx0aXBsZXhlciBDb250cm9sIFJlZ2lzdGVyICovCisKKy8qIFBvcnQgSSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRJX0ZFUiAgMHhmZmMwMTVjMCAgIC8qIEZ1bmN0aW9uIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT1JUSSAgMHhmZmMwMTVjNCAgIC8qIEdQSU8gRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRJX1NFVCAgMHhmZmMwMTVjOCAgIC8qIEdQSU8gRGF0YSBTZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUE9SVElfQ0xFQVIgIDB4ZmZjMDE1Y2MgICAvKiBHUElPIERhdGEgQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBPUlRJX0RJUl9TRVQgIDB4ZmZjMDE1ZDAgICAvKiBHUElPIERpcmVjdGlvbiBTZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBQT1JUSV9ESVJfQ0xFQVIgIDB4ZmZjMDE1ZDQgICAvKiBHUElPIERpcmVjdGlvbiBDbGVhciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUE9SVElfSU5FTiAgMHhmZmMwMTVkOCAgIC8qIEdQSU8gSW5wdXQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUE9SVElfTVVYICAweGZmYzAxNWRjICAgLyogTXVsdGlwbGV4ZXIgQ29udHJvbCBSZWdpc3RlciAqLworCisvKiBQb3J0IEogUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQT1JUSl9GRVIgIDB4ZmZjMDE1ZTAgICAvKiBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9SVEogIDB4ZmZjMDE1ZTQgICAvKiBHUElPIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBQT1JUSl9TRVQgIDB4ZmZjMDE1ZTggICAvKiBHUElPIERhdGEgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFBPUlRKX0NMRUFSICAweGZmYzAxNWVjICAgLyogR1BJTyBEYXRhIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQT1JUSl9ESVJfU0VUICAweGZmYzAxNWYwICAgLyogR1BJTyBEaXJlY3Rpb24gU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUE9SVEpfRElSX0NMRUFSICAweGZmYzAxNWY0ICAgLyogR1BJTyBEaXJlY3Rpb24gQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFBPUlRKX0lORU4gIDB4ZmZjMDE1ZjggICAvKiBHUElPIElucHV0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFBPUlRKX01VWCAgMHhmZmMwMTVmYyAgIC8qIE11bHRpcGxleGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworLyogUFdNIFRpbWVyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjBfQ09ORklHICAweGZmYzAxNjAwICAgLyogVGltZXIgMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSMF9DT1VOVEVSICAweGZmYzAxNjA0ICAgLyogVGltZXIgMCBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjBfUEVSSU9EICAweGZmYzAxNjA4ICAgLyogVGltZXIgMCBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUSU1FUjBfV0lEVEggIDB4ZmZjMDE2MGMgICAvKiBUaW1lciAwIFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjFfQ09ORklHICAweGZmYzAxNjEwICAgLyogVGltZXIgMSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSMV9DT1VOVEVSICAweGZmYzAxNjE0ICAgLyogVGltZXIgMSBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjFfUEVSSU9EICAweGZmYzAxNjE4ICAgLyogVGltZXIgMSBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUSU1FUjFfV0lEVEggIDB4ZmZjMDE2MWMgICAvKiBUaW1lciAxIFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjJfQ09ORklHICAweGZmYzAxNjIwICAgLyogVGltZXIgMiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSMl9DT1VOVEVSICAweGZmYzAxNjI0ICAgLyogVGltZXIgMiBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjJfUEVSSU9EICAweGZmYzAxNjI4ICAgLyogVGltZXIgMiBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUSU1FUjJfV0lEVEggIDB4ZmZjMDE2MmMgICAvKiBUaW1lciAyIFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjNfQ09ORklHICAweGZmYzAxNjMwICAgLyogVGltZXIgMyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSM19DT1VOVEVSICAweGZmYzAxNjM0ICAgLyogVGltZXIgMyBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjNfUEVSSU9EICAweGZmYzAxNjM4ICAgLyogVGltZXIgMyBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUSU1FUjNfV0lEVEggIDB4ZmZjMDE2M2MgICAvKiBUaW1lciAzIFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjRfQ09ORklHICAweGZmYzAxNjQwICAgLyogVGltZXIgNCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSNF9DT1VOVEVSICAweGZmYzAxNjQ0ICAgLyogVGltZXIgNCBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjRfUEVSSU9EICAweGZmYzAxNjQ4ICAgLyogVGltZXIgNCBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUSU1FUjRfV0lEVEggIDB4ZmZjMDE2NGMgICAvKiBUaW1lciA0IFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjVfQ09ORklHICAweGZmYzAxNjUwICAgLyogVGltZXIgNSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSNV9DT1VOVEVSICAweGZmYzAxNjU0ICAgLyogVGltZXIgNSBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjVfUEVSSU9EICAweGZmYzAxNjU4ICAgLyogVGltZXIgNSBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUSU1FUjVfV0lEVEggIDB4ZmZjMDE2NWMgICAvKiBUaW1lciA1IFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjZfQ09ORklHICAweGZmYzAxNjYwICAgLyogVGltZXIgNiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSNl9DT1VOVEVSICAweGZmYzAxNjY0ICAgLyogVGltZXIgNiBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjZfUEVSSU9EICAweGZmYzAxNjY4ICAgLyogVGltZXIgNiBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUSU1FUjZfV0lEVEggIDB4ZmZjMDE2NmMgICAvKiBUaW1lciA2IFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjdfQ09ORklHICAweGZmYzAxNjcwICAgLyogVGltZXIgNyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSN19DT1VOVEVSICAweGZmYzAxNjc0ICAgLyogVGltZXIgNyBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUjdfUEVSSU9EICAweGZmYzAxNjc4ICAgLyogVGltZXIgNyBQZXJpb2QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUSU1FUjdfV0lEVEggIDB4ZmZjMDE2N2MgICAvKiBUaW1lciA3IFdpZHRoIFJlZ2lzdGVyICovCisKKy8qIFRpbWVyIEdyb3VwIG9mIDggKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRVJfRU5BQkxFMCAgMHhmZmMwMTY4MCAgIC8qIFRpbWVyIEdyb3VwIG9mIDggRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTUVSX0RJU0FCTEUwICAweGZmYzAxNjg0ICAgLyogVGltZXIgR3JvdXAgb2YgOCBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FUl9TVEFUVVMwICAweGZmYzAxNjg4ICAgLyogVGltZXIgR3JvdXAgb2YgOCBTdGF0dXMgUmVnaXN0ZXIgKi8KKworLyogRE1BQzEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRE1BQzFfVENQRVIgIDB4ZmZjMDFiMGMgICAvKiBETUEgQ29udHJvbGxlciAxIFRyYWZmaWMgQ29udHJvbCBQZXJpb2RzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERNQUMxX1RDQ05UICAweGZmYzAxYjEwICAgLyogRE1BIENvbnRyb2xsZXIgMSBDdXJyZW50IENvdW50cyBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAxMiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMTJfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWMwMCAgIC8qIERNQSBDaGFubmVsIDEyIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUExMl9TVEFSVF9BRERSICAweGZmYzAxYzA0ICAgLyogRE1BIENoYW5uZWwgMTIgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTEyX0NPTkZJRyAgMHhmZmMwMWMwOCAgIC8qIERNQSBDaGFubmVsIDEyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTEyX1hfQ09VTlQgIDB4ZmZjMDFjMTAgICAvKiBETUEgQ2hhbm5lbCAxMiBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTEyX1hfTU9ESUZZICAweGZmYzAxYzE0ICAgLyogRE1BIENoYW5uZWwgMTIgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTEyX1lfQ09VTlQgIDB4ZmZjMDFjMTggICAvKiBETUEgQ2hhbm5lbCAxMiBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTEyX1lfTU9ESUZZICAweGZmYzAxYzFjICAgLyogRE1BIENoYW5uZWwgMTIgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTEyX0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFjMjAgICAvKiBETUEgQ2hhbm5lbCAxMiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTEyX0NVUlJfQUREUiAgMHhmZmMwMWMyNCAgIC8qIERNQSBDaGFubmVsIDEyIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMTJfSVJRX1NUQVRVUyAgMHhmZmMwMWMyOCAgIC8qIERNQSBDaGFubmVsIDEyIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMTJfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFjMmMgICAvKiBETUEgQ2hhbm5lbCAxMiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTEyX0NVUlJfWF9DT1VOVCAgMHhmZmMwMWMzMCAgIC8qIERNQSBDaGFubmVsIDEyIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTEyX0NVUlJfWV9DT1VOVCAgMHhmZmMwMWMzOCAgIC8qIERNQSBDaGFubmVsIDEyIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAxMyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMTNfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWM0MCAgIC8qIERNQSBDaGFubmVsIDEzIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUExM19TVEFSVF9BRERSICAweGZmYzAxYzQ0ICAgLyogRE1BIENoYW5uZWwgMTMgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTEzX0NPTkZJRyAgMHhmZmMwMWM0OCAgIC8qIERNQSBDaGFubmVsIDEzIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTEzX1hfQ09VTlQgIDB4ZmZjMDFjNTAgICAvKiBETUEgQ2hhbm5lbCAxMyBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTEzX1hfTU9ESUZZICAweGZmYzAxYzU0ICAgLyogRE1BIENoYW5uZWwgMTMgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTEzX1lfQ09VTlQgIDB4ZmZjMDFjNTggICAvKiBETUEgQ2hhbm5lbCAxMyBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTEzX1lfTU9ESUZZICAweGZmYzAxYzVjICAgLyogRE1BIENoYW5uZWwgMTMgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTEzX0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFjNjAgICAvKiBETUEgQ2hhbm5lbCAxMyBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTEzX0NVUlJfQUREUiAgMHhmZmMwMWM2NCAgIC8qIERNQSBDaGFubmVsIDEzIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMTNfSVJRX1NUQVRVUyAgMHhmZmMwMWM2OCAgIC8qIERNQSBDaGFubmVsIDEzIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMTNfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFjNmMgICAvKiBETUEgQ2hhbm5lbCAxMyBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTEzX0NVUlJfWF9DT1VOVCAgMHhmZmMwMWM3MCAgIC8qIERNQSBDaGFubmVsIDEzIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTEzX0NVUlJfWV9DT1VOVCAgMHhmZmMwMWM3OCAgIC8qIERNQSBDaGFubmVsIDEzIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAxNCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMTRfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWM4MCAgIC8qIERNQSBDaGFubmVsIDE0IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUExNF9TVEFSVF9BRERSICAweGZmYzAxYzg0ICAgLyogRE1BIENoYW5uZWwgMTQgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTE0X0NPTkZJRyAgMHhmZmMwMWM4OCAgIC8qIERNQSBDaGFubmVsIDE0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE0X1hfQ09VTlQgIDB4ZmZjMDFjOTAgICAvKiBETUEgQ2hhbm5lbCAxNCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE0X1hfTU9ESUZZICAweGZmYzAxYzk0ICAgLyogRE1BIENoYW5uZWwgMTQgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE0X1lfQ09VTlQgIDB4ZmZjMDFjOTggICAvKiBETUEgQ2hhbm5lbCAxNCBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE0X1lfTU9ESUZZICAweGZmYzAxYzljICAgLyogRE1BIENoYW5uZWwgMTQgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTE0X0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFjYTAgICAvKiBETUEgQ2hhbm5lbCAxNCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTE0X0NVUlJfQUREUiAgMHhmZmMwMWNhNCAgIC8qIERNQSBDaGFubmVsIDE0IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMTRfSVJRX1NUQVRVUyAgMHhmZmMwMWNhOCAgIC8qIERNQSBDaGFubmVsIDE0IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMTRfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFjYWMgICAvKiBETUEgQ2hhbm5lbCAxNCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE0X0NVUlJfWF9DT1VOVCAgMHhmZmMwMWNiMCAgIC8qIERNQSBDaGFubmVsIDE0IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE0X0NVUlJfWV9DT1VOVCAgMHhmZmMwMWNiOCAgIC8qIERNQSBDaGFubmVsIDE0IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAxNSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMTVfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWNjMCAgIC8qIERNQSBDaGFubmVsIDE1IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUExNV9TVEFSVF9BRERSICAweGZmYzAxY2M0ICAgLyogRE1BIENoYW5uZWwgMTUgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTE1X0NPTkZJRyAgMHhmZmMwMWNjOCAgIC8qIERNQSBDaGFubmVsIDE1IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE1X1hfQ09VTlQgIDB4ZmZjMDFjZDAgICAvKiBETUEgQ2hhbm5lbCAxNSBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE1X1hfTU9ESUZZICAweGZmYzAxY2Q0ICAgLyogRE1BIENoYW5uZWwgMTUgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE1X1lfQ09VTlQgIDB4ZmZjMDFjZDggICAvKiBETUEgQ2hhbm5lbCAxNSBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE1X1lfTU9ESUZZICAweGZmYzAxY2RjICAgLyogRE1BIENoYW5uZWwgMTUgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTE1X0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFjZTAgICAvKiBETUEgQ2hhbm5lbCAxNSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTE1X0NVUlJfQUREUiAgMHhmZmMwMWNlNCAgIC8qIERNQSBDaGFubmVsIDE1IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMTVfSVJRX1NUQVRVUyAgMHhmZmMwMWNlOCAgIC8qIERNQSBDaGFubmVsIDE1IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMTVfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFjZWMgICAvKiBETUEgQ2hhbm5lbCAxNSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE1X0NVUlJfWF9DT1VOVCAgMHhmZmMwMWNmMCAgIC8qIERNQSBDaGFubmVsIDE1IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE1X0NVUlJfWV9DT1VOVCAgMHhmZmMwMWNmOCAgIC8qIERNQSBDaGFubmVsIDE1IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAxNiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMTZfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWQwMCAgIC8qIERNQSBDaGFubmVsIDE2IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUExNl9TVEFSVF9BRERSICAweGZmYzAxZDA0ICAgLyogRE1BIENoYW5uZWwgMTYgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTE2X0NPTkZJRyAgMHhmZmMwMWQwOCAgIC8qIERNQSBDaGFubmVsIDE2IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE2X1hfQ09VTlQgIDB4ZmZjMDFkMTAgICAvKiBETUEgQ2hhbm5lbCAxNiBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE2X1hfTU9ESUZZICAweGZmYzAxZDE0ICAgLyogRE1BIENoYW5uZWwgMTYgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE2X1lfQ09VTlQgIDB4ZmZjMDFkMTggICAvKiBETUEgQ2hhbm5lbCAxNiBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE2X1lfTU9ESUZZICAweGZmYzAxZDFjICAgLyogRE1BIENoYW5uZWwgMTYgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTE2X0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFkMjAgICAvKiBETUEgQ2hhbm5lbCAxNiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTE2X0NVUlJfQUREUiAgMHhmZmMwMWQyNCAgIC8qIERNQSBDaGFubmVsIDE2IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMTZfSVJRX1NUQVRVUyAgMHhmZmMwMWQyOCAgIC8qIERNQSBDaGFubmVsIDE2IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMTZfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFkMmMgICAvKiBETUEgQ2hhbm5lbCAxNiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE2X0NVUlJfWF9DT1VOVCAgMHhmZmMwMWQzMCAgIC8qIERNQSBDaGFubmVsIDE2IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE2X0NVUlJfWV9DT1VOVCAgMHhmZmMwMWQzOCAgIC8qIERNQSBDaGFubmVsIDE2IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAxNyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMTdfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWQ0MCAgIC8qIERNQSBDaGFubmVsIDE3IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUExN19TVEFSVF9BRERSICAweGZmYzAxZDQ0ICAgLyogRE1BIENoYW5uZWwgMTcgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTE3X0NPTkZJRyAgMHhmZmMwMWQ0OCAgIC8qIERNQSBDaGFubmVsIDE3IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE3X1hfQ09VTlQgIDB4ZmZjMDFkNTAgICAvKiBETUEgQ2hhbm5lbCAxNyBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE3X1hfTU9ESUZZICAweGZmYzAxZDU0ICAgLyogRE1BIENoYW5uZWwgMTcgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE3X1lfQ09VTlQgIDB4ZmZjMDFkNTggICAvKiBETUEgQ2hhbm5lbCAxNyBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE3X1lfTU9ESUZZICAweGZmYzAxZDVjICAgLyogRE1BIENoYW5uZWwgMTcgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTE3X0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFkNjAgICAvKiBETUEgQ2hhbm5lbCAxNyBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTE3X0NVUlJfQUREUiAgMHhmZmMwMWQ2NCAgIC8qIERNQSBDaGFubmVsIDE3IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMTdfSVJRX1NUQVRVUyAgMHhmZmMwMWQ2OCAgIC8qIERNQSBDaGFubmVsIDE3IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMTdfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFkNmMgICAvKiBETUEgQ2hhbm5lbCAxNyBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE3X0NVUlJfWF9DT1VOVCAgMHhmZmMwMWQ3MCAgIC8qIERNQSBDaGFubmVsIDE3IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE3X0NVUlJfWV9DT1VOVCAgMHhmZmMwMWQ3OCAgIC8qIERNQSBDaGFubmVsIDE3IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAxOCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMThfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWQ4MCAgIC8qIERNQSBDaGFubmVsIDE4IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUExOF9TVEFSVF9BRERSICAweGZmYzAxZDg0ICAgLyogRE1BIENoYW5uZWwgMTggU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTE4X0NPTkZJRyAgMHhmZmMwMWQ4OCAgIC8qIERNQSBDaGFubmVsIDE4IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE4X1hfQ09VTlQgIDB4ZmZjMDFkOTAgICAvKiBETUEgQ2hhbm5lbCAxOCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE4X1hfTU9ESUZZICAweGZmYzAxZDk0ICAgLyogRE1BIENoYW5uZWwgMTggWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE4X1lfQ09VTlQgIDB4ZmZjMDFkOTggICAvKiBETUEgQ2hhbm5lbCAxOCBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE4X1lfTU9ESUZZICAweGZmYzAxZDljICAgLyogRE1BIENoYW5uZWwgMTggWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTE4X0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFkYTAgICAvKiBETUEgQ2hhbm5lbCAxOCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTE4X0NVUlJfQUREUiAgMHhmZmMwMWRhNCAgIC8qIERNQSBDaGFubmVsIDE4IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMThfSVJRX1NUQVRVUyAgMHhmZmMwMWRhOCAgIC8qIERNQSBDaGFubmVsIDE4IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMThfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFkYWMgICAvKiBETUEgQ2hhbm5lbCAxOCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE4X0NVUlJfWF9DT1VOVCAgMHhmZmMwMWRiMCAgIC8qIERNQSBDaGFubmVsIDE4IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE4X0NVUlJfWV9DT1VOVCAgMHhmZmMwMWRiOCAgIC8qIERNQSBDaGFubmVsIDE4IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAxOSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMTlfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWRjMCAgIC8qIERNQSBDaGFubmVsIDE5IE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUExOV9TVEFSVF9BRERSICAweGZmYzAxZGM0ICAgLyogRE1BIENoYW5uZWwgMTkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTE5X0NPTkZJRyAgMHhmZmMwMWRjOCAgIC8qIERNQSBDaGFubmVsIDE5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE5X1hfQ09VTlQgIDB4ZmZjMDFkZDAgICAvKiBETUEgQ2hhbm5lbCAxOSBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE5X1hfTU9ESUZZICAweGZmYzAxZGQ0ICAgLyogRE1BIENoYW5uZWwgMTkgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTE5X1lfQ09VTlQgIDB4ZmZjMDFkZDggICAvKiBETUEgQ2hhbm5lbCAxOSBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTE5X1lfTU9ESUZZICAweGZmYzAxZGRjICAgLyogRE1BIENoYW5uZWwgMTkgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTE5X0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFkZTAgICAvKiBETUEgQ2hhbm5lbCAxOSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTE5X0NVUlJfQUREUiAgMHhmZmMwMWRlNCAgIC8qIERNQSBDaGFubmVsIDE5IEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMTlfSVJRX1NUQVRVUyAgMHhmZmMwMWRlOCAgIC8qIERNQSBDaGFubmVsIDE5IEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMTlfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFkZWMgICAvKiBETUEgQ2hhbm5lbCAxOSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE5X0NVUlJfWF9DT1VOVCAgMHhmZmMwMWRmMCAgIC8qIERNQSBDaGFubmVsIDE5IEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTE5X0NVUlJfWV9DT1VOVCAgMHhmZmMwMWRmOCAgIC8qIERNQSBDaGFubmVsIDE5IEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAyMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMjBfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWUwMCAgIC8qIERNQSBDaGFubmVsIDIwIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUEyMF9TVEFSVF9BRERSICAweGZmYzAxZTA0ICAgLyogRE1BIENoYW5uZWwgMjAgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTIwX0NPTkZJRyAgMHhmZmMwMWUwOCAgIC8qIERNQSBDaGFubmVsIDIwIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTIwX1hfQ09VTlQgIDB4ZmZjMDFlMTAgICAvKiBETUEgQ2hhbm5lbCAyMCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTIwX1hfTU9ESUZZICAweGZmYzAxZTE0ICAgLyogRE1BIENoYW5uZWwgMjAgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTIwX1lfQ09VTlQgIDB4ZmZjMDFlMTggICAvKiBETUEgQ2hhbm5lbCAyMCBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTIwX1lfTU9ESUZZICAweGZmYzAxZTFjICAgLyogRE1BIENoYW5uZWwgMjAgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTIwX0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFlMjAgICAvKiBETUEgQ2hhbm5lbCAyMCBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTIwX0NVUlJfQUREUiAgMHhmZmMwMWUyNCAgIC8qIERNQSBDaGFubmVsIDIwIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMjBfSVJRX1NUQVRVUyAgMHhmZmMwMWUyOCAgIC8qIERNQSBDaGFubmVsIDIwIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMjBfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFlMmMgICAvKiBETUEgQ2hhbm5lbCAyMCBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTIwX0NVUlJfWF9DT1VOVCAgMHhmZmMwMWUzMCAgIC8qIERNQSBDaGFubmVsIDIwIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTIwX0NVUlJfWV9DT1VOVCAgMHhmZmMwMWUzOCAgIC8qIERNQSBDaGFubmVsIDIwIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAyMSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMjFfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWU0MCAgIC8qIERNQSBDaGFubmVsIDIxIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUEyMV9TVEFSVF9BRERSICAweGZmYzAxZTQ0ICAgLyogRE1BIENoYW5uZWwgMjEgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTIxX0NPTkZJRyAgMHhmZmMwMWU0OCAgIC8qIERNQSBDaGFubmVsIDIxIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTIxX1hfQ09VTlQgIDB4ZmZjMDFlNTAgICAvKiBETUEgQ2hhbm5lbCAyMSBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTIxX1hfTU9ESUZZICAweGZmYzAxZTU0ICAgLyogRE1BIENoYW5uZWwgMjEgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTIxX1lfQ09VTlQgIDB4ZmZjMDFlNTggICAvKiBETUEgQ2hhbm5lbCAyMSBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTIxX1lfTU9ESUZZICAweGZmYzAxZTVjICAgLyogRE1BIENoYW5uZWwgMjEgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTIxX0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFlNjAgICAvKiBETUEgQ2hhbm5lbCAyMSBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTIxX0NVUlJfQUREUiAgMHhmZmMwMWU2NCAgIC8qIERNQSBDaGFubmVsIDIxIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMjFfSVJRX1NUQVRVUyAgMHhmZmMwMWU2OCAgIC8qIERNQSBDaGFubmVsIDIxIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMjFfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFlNmMgICAvKiBETUEgQ2hhbm5lbCAyMSBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTIxX0NVUlJfWF9DT1VOVCAgMHhmZmMwMWU3MCAgIC8qIERNQSBDaGFubmVsIDIxIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTIxX0NVUlJfWV9DT1VOVCAgMHhmZmMwMWU3OCAgIC8qIERNQSBDaGFubmVsIDIxIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAyMiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMjJfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWU4MCAgIC8qIERNQSBDaGFubmVsIDIyIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUEyMl9TVEFSVF9BRERSICAweGZmYzAxZTg0ICAgLyogRE1BIENoYW5uZWwgMjIgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTIyX0NPTkZJRyAgMHhmZmMwMWU4OCAgIC8qIERNQSBDaGFubmVsIDIyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTIyX1hfQ09VTlQgIDB4ZmZjMDFlOTAgICAvKiBETUEgQ2hhbm5lbCAyMiBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTIyX1hfTU9ESUZZICAweGZmYzAxZTk0ICAgLyogRE1BIENoYW5uZWwgMjIgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTIyX1lfQ09VTlQgIDB4ZmZjMDFlOTggICAvKiBETUEgQ2hhbm5lbCAyMiBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTIyX1lfTU9ESUZZICAweGZmYzAxZTljICAgLyogRE1BIENoYW5uZWwgMjIgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTIyX0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFlYTAgICAvKiBETUEgQ2hhbm5lbCAyMiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTIyX0NVUlJfQUREUiAgMHhmZmMwMWVhNCAgIC8qIERNQSBDaGFubmVsIDIyIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMjJfSVJRX1NUQVRVUyAgMHhmZmMwMWVhOCAgIC8qIERNQSBDaGFubmVsIDIyIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMjJfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFlYWMgICAvKiBETUEgQ2hhbm5lbCAyMiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTIyX0NVUlJfWF9DT1VOVCAgMHhmZmMwMWViMCAgIC8qIERNQSBDaGFubmVsIDIyIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTIyX0NVUlJfWV9DT1VOVCAgMHhmZmMwMWViOCAgIC8qIERNQSBDaGFubmVsIDIyIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBETUEgQ2hhbm5lbCAyMyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgRE1BMjNfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWVjMCAgIC8qIERNQSBDaGFubmVsIDIzIE5leHQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBETUEyM19TVEFSVF9BRERSICAweGZmYzAxZWM0ICAgLyogRE1BIENoYW5uZWwgMjMgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTIzX0NPTkZJRyAgMHhmZmMwMWVjOCAgIC8qIERNQSBDaGFubmVsIDIzIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTIzX1hfQ09VTlQgIDB4ZmZjMDFlZDAgICAvKiBETUEgQ2hhbm5lbCAyMyBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTIzX1hfTU9ESUZZICAweGZmYzAxZWQ0ICAgLyogRE1BIENoYW5uZWwgMjMgWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQTIzX1lfQ09VTlQgIDB4ZmZjMDFlZDggICAvKiBETUEgQ2hhbm5lbCAyMyBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTIzX1lfTU9ESUZZICAweGZmYzAxZWRjICAgLyogRE1BIENoYW5uZWwgMjMgWSBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIERNQTIzX0NVUlJfREVTQ19QVFIgIDB4ZmZjMDFlZTAgICAvKiBETUEgQ2hhbm5lbCAyMyBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQTIzX0NVUlJfQUREUiAgMHhmZmMwMWVlNCAgIC8qIERNQSBDaGFubmVsIDIzIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgRE1BMjNfSVJRX1NUQVRVUyAgMHhmZmMwMWVlOCAgIC8qIERNQSBDaGFubmVsIDIzIEludGVycnVwdC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgRE1BMjNfUEVSSVBIRVJBTF9NQVAgIDB4ZmZjMDFlZWMgICAvKiBETUEgQ2hhbm5lbCAyMyBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTIzX0NVUlJfWF9DT1VOVCAgMHhmZmMwMWVmMCAgIC8qIERNQSBDaGFubmVsIDIzIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIERNQTIzX0NVUlJfWV9DT1VOVCAgMHhmZmMwMWVmOCAgIC8qIERNQSBDaGFubmVsIDIzIEN1cnJlbnQgWSBDb3VudCBSZWdpc3RlciAqLworCisvKiBNRE1BIFN0cmVhbSAyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgTURNQV9EMl9ORVhUX0RFU0NfUFRSICAweGZmYzAxZjAwICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMiBEZXN0aW5hdGlvbiBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIE1ETUFfRDJfU1RBUlRfQUREUiAgMHhmZmMwMWYwNCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDIgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBNRE1BX0QyX0NPTkZJRyAgMHhmZmMwMWYwOCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDIgRGVzdGluYXRpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1ETUFfRDJfWF9DT1VOVCAgMHhmZmMwMWYxMCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDIgRGVzdGluYXRpb24gWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTURNQV9EMl9YX01PRElGWSAgMHhmZmMwMWYxNCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDIgRGVzdGluYXRpb24gWCBNb2RpZnkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNRE1BX0QyX1lfQ09VTlQgIDB4ZmZjMDFmMTggICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAyIERlc3RpbmF0aW9uIFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1ETUFfRDJfWV9NT0RJRlkgIDB4ZmZjMDFmMWMgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAyIERlc3RpbmF0aW9uIFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgTURNQV9EMl9DVVJSX0RFU0NfUFRSICAweGZmYzAxZjIwICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMiBEZXN0aW5hdGlvbiBDdXJyZW50IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICBNRE1BX0QyX0NVUlJfQUREUiAgMHhmZmMwMWYyNCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDIgRGVzdGluYXRpb24gQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgTURNQV9EMl9JUlFfU1RBVFVTICAweGZmYzAxZjI4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMiBEZXN0aW5hdGlvbiBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICBNRE1BX0QyX1BFUklQSEVSQUxfTUFQICAweGZmYzAxZjJjICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMiBEZXN0aW5hdGlvbiBQZXJpcGhlcmFsIE1hcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICBNRE1BX0QyX0NVUlJfWF9DT1VOVCAgMHhmZmMwMWYzMCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDIgRGVzdGluYXRpb24gQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgIE1ETUFfRDJfQ1VSUl9ZX0NPVU5UICAweGZmYzAxZjM4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMiBEZXN0aW5hdGlvbiBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICBNRE1BX1MyX05FWFRfREVTQ19QVFIgIDB4ZmZjMDFmNDAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAyIFNvdXJjZSBOZXh0IERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIE1ETUFfUzJfU1RBUlRfQUREUiAgMHhmZmMwMWY0NCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDIgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTURNQV9TMl9DT05GSUcgIDB4ZmZjMDFmNDggICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAyIFNvdXJjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTURNQV9TMl9YX0NPVU5UICAweGZmYzAxZjUwICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMiBTb3VyY2UgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTURNQV9TMl9YX01PRElGWSAgMHhmZmMwMWY1NCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDIgU291cmNlIFggTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTURNQV9TMl9ZX0NPVU5UICAweGZmYzAxZjU4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMiBTb3VyY2UgWSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgTURNQV9TMl9ZX01PRElGWSAgMHhmZmMwMWY1YyAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDIgU291cmNlIFkgTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgTURNQV9TMl9DVVJSX0RFU0NfUFRSICAweGZmYzAxZjYwICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMiBTb3VyY2UgQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgTURNQV9TMl9DVVJSX0FERFIgIDB4ZmZjMDFmNjQgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAyIFNvdXJjZSBDdXJyZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBNRE1BX1MyX0lSUV9TVEFUVVMgIDB4ZmZjMDFmNjggICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAyIFNvdXJjZSBJbnRlcnJ1cHQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICBNRE1BX1MyX1BFUklQSEVSQUxfTUFQICAweGZmYzAxZjZjICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMiBTb3VyY2UgUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTURNQV9TMl9DVVJSX1hfQ09VTlQgIDB4ZmZjMDFmNzAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAyIFNvdXJjZSBDdXJyZW50IFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTURNQV9TMl9DVVJSX1lfQ09VTlQgIDB4ZmZjMDFmNzggICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAyIFNvdXJjZSBDdXJyZW50IFkgQ291bnQgUmVnaXN0ZXIgKi8KKworLyogTURNQSBTdHJlYW0gMyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgIE1ETUFfRDNfTkVYVF9ERVNDX1BUUiAgMHhmZmMwMWY4MCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDMgRGVzdGluYXRpb24gTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBNRE1BX0QzX1NUQVJUX0FERFIgIDB4ZmZjMDFmODQgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAzIERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTURNQV9EM19DT05GSUcgIDB4ZmZjMDFmODggICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAzIERlc3RpbmF0aW9uIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNRE1BX0QzX1hfQ09VTlQgIDB4ZmZjMDFmOTAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAzIERlc3RpbmF0aW9uIFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1ETUFfRDNfWF9NT0RJRlkgIDB4ZmZjMDFmOTQgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAzIERlc3RpbmF0aW9uIFggTW9kaWZ5IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTURNQV9EM19ZX0NPVU5UICAweGZmYzAxZjk4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMyBEZXN0aW5hdGlvbiBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBNRE1BX0QzX1lfTU9ESUZZICAweGZmYzAxZjljICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMyBEZXN0aW5hdGlvbiBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgIE1ETUFfRDNfQ1VSUl9ERVNDX1BUUiAgMHhmZmMwMWZhMCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDMgRGVzdGluYXRpb24gQ3VycmVudCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgTURNQV9EM19DVVJSX0FERFIgIDB4ZmZjMDFmYTQgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAzIERlc3RpbmF0aW9uIEN1cnJlbnQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgIE1ETUFfRDNfSVJRX1NUQVRVUyAgMHhmZmMwMWZhOCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDMgRGVzdGluYXRpb24gSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgTURNQV9EM19QRVJJUEhFUkFMX01BUCAgMHhmZmMwMWZhYyAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDMgRGVzdGluYXRpb24gUGVyaXBoZXJhbCBNYXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgTURNQV9EM19DVVJSX1hfQ09VTlQgIDB4ZmZjMDFmYjAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAzIERlc3RpbmF0aW9uIEN1cnJlbnQgWCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICBNRE1BX0QzX0NVUlJfWV9DT1VOVCAgMHhmZmMwMWZiOCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDMgRGVzdGluYXRpb24gQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgTURNQV9TM19ORVhUX0RFU0NfUFRSICAweGZmYzAxZmMwICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMyBTb3VyY2UgTmV4dCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBNRE1BX1MzX1NUQVJUX0FERFIgIDB4ZmZjMDFmYzQgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAzIFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1ETUFfUzNfQ09ORklHICAweGZmYzAxZmM4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMyBTb3VyY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1ETUFfUzNfWF9DT1VOVCAgMHhmZmMwMWZkMCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDMgU291cmNlIFggQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1ETUFfUzNfWF9NT0RJRlkgIDB4ZmZjMDFmZDQgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAzIFNvdXJjZSBYIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIE1ETUFfUzNfWV9DT1VOVCAgMHhmZmMwMWZkOCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDMgU291cmNlIFkgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIE1ETUFfUzNfWV9NT0RJRlkgIDB4ZmZjMDFmZGMgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAzIFNvdXJjZSBZIE1vZGlmeSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgIE1ETUFfUzNfQ1VSUl9ERVNDX1BUUiAgMHhmZmMwMWZlMCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDMgU291cmNlIEN1cnJlbnQgRGVzY3JpcHRvciBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIE1ETUFfUzNfQ1VSUl9BRERSICAweGZmYzAxZmU0ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMyBTb3VyY2UgQ3VycmVudCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgTURNQV9TM19JUlFfU1RBVFVTICAweGZmYzAxZmU4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMyBTb3VyY2UgSW50ZXJydXB0L1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgTURNQV9TM19QRVJJUEhFUkFMX01BUCAgMHhmZmMwMWZlYyAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDMgU291cmNlIFBlcmlwaGVyYWwgTWFwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgIE1ETUFfUzNfQ1VSUl9YX0NPVU5UICAweGZmYzAxZmYwICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMyBTb3VyY2UgQ3VycmVudCBYIENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgIE1ETUFfUzNfQ1VSUl9ZX0NPVU5UICAweGZmYzAxZmY4ICAgLyogTWVtb3J5IERNQSBTdHJlYW0gMyBTb3VyY2UgQ3VycmVudCBZIENvdW50IFJlZ2lzdGVyICovCisKKy8qIFVBUlQxIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDFfRExMICAweGZmYzAyMDAwICAgLyogRGl2aXNvciBMYXRjaCBMb3cgQnl0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQxX0RMSCAgMHhmZmMwMjAwNCAgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBCeXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVQVJUMV9HQ1RMICAweGZmYzAyMDA4ICAgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMV9MQ1IgIDB4ZmZjMDIwMGMgICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMV9NQ1IgIDB4ZmZjMDIwMTAgICAvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDFfTFNSICAweGZmYzAyMDE0ICAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMV9NU1IgIDB4ZmZjMDIwMTggICAvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUMV9TQ1IgIDB4ZmZjMDIwMWMgICAvKiBTY3JhdGNoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBVQVJUMV9JRVJfU0VUICAweGZmYzAyMDIwICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBTZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVQVJUMV9JRVJfQ0xFQVIgIDB4ZmZjMDIwMjQgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIENsZWFyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDFfVEhSICAweGZmYzAyMDI4ICAgLyogVHJhbnNtaXQgSG9sZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQxX1JCUiAgMHhmZmMwMjAyYyAgIC8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyICovCisKKy8qIFVBUlQyIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBzaGFyZWQgZmlsZSBiZWNhdXNlIGl0IGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIEFEU1AtQkY1NDIgYW5kIEFEU1AtQkY1NDQgcHJvY2Vzc29ycyAqLworCisvKiBTUEkxIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNQSTFfQ1RMICAweGZmYzAyMzAwICAgLyogU1BJMSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIFNQSTFfRkxHICAweGZmYzAyMzA0ICAgLyogU1BJMSBGbGFnIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1BJMV9TVEFUICAweGZmYzAyMzA4ICAgLyogU1BJMSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTUEkxX1REQlIgIDB4ZmZjMDIzMGMgICAvKiBTUEkxIFRyYW5zbWl0IERhdGEgQnVmZmVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1BJMV9SREJSICAweGZmYzAyMzEwICAgLyogU1BJMSBSZWNlaXZlIERhdGEgQnVmZmVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1BJMV9CQVVEICAweGZmYzAyMzE0ICAgLyogU1BJMSBCYXVkIFJhdGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BJMV9TSEFET1cgIDB4ZmZjMDIzMTggICAvKiBTUEkxIFJlY2VpdmUgRGF0YSBCdWZmZXIgU2hhZG93IFJlZ2lzdGVyICovCisKKy8qIFNQT1JUMiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDJfVENSMSAgMHhmZmMwMjUwMCAgIC8qIFNQT1JUMiBUcmFuc21pdCBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQyX1RDUjIgIDB4ZmZjMDI1MDQgICAvKiBTUE9SVDIgVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNQT1JUMl9UQ0xLRElWICAweGZmYzAyNTA4ICAgLyogU1BPUlQyIFRyYW5zbWl0IFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTUE9SVDJfVEZTRElWICAweGZmYzAyNTBjICAgLyogU1BPUlQyIFRyYW5zbWl0IEZyYW1lIFN5bmMgRGl2aWRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMl9UWCAgMHhmZmMwMjUxMCAgIC8qIFNQT1JUMiBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1BPUlQyX1JYICAweGZmYzAyNTE4ICAgLyogU1BPUlQyIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDJfUkNSMSAgMHhmZmMwMjUyMCAgIC8qIFNQT1JUMiBSZWNlaXZlIENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDJfUkNSMiAgMHhmZmMwMjUyNCAgIC8qIFNQT1JUMiBSZWNlaXZlIENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTUE9SVDJfUkNMS0RJViAgMHhmZmMwMjUyOCAgIC8qIFNQT1JUMiBSZWNlaXZlIFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTUE9SVDJfUkZTRElWICAweGZmYzAyNTJjICAgLyogU1BPUlQyIFJlY2VpdmUgRnJhbWUgU3luYyBEaXZpZGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQT1JUMl9TVEFUICAweGZmYzAyNTMwICAgLyogU1BPUlQyIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDJfQ0hOTCAgMHhmZmMwMjUzNCAgIC8qIFNQT1JUMiBDdXJyZW50IENoYW5uZWwgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDJfTUNNQzEgIDB4ZmZjMDI1MzggICAvKiBTUE9SVDIgTXVsdGkgY2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDJfTUNNQzIgIDB4ZmZjMDI1M2MgICAvKiBTUE9SVDIgTXVsdGkgY2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDJfTVRDUzAgIDB4ZmZjMDI1NDAgICAvKiBTUE9SVDIgTXVsdGkgY2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMl9NVENTMSAgMHhmZmMwMjU0NCAgIC8qIFNQT1JUMiBNdWx0aSBjaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQyX01UQ1MyICAweGZmYzAyNTQ4ICAgLyogU1BPUlQyIE11bHRpIGNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDJfTVRDUzMgIDB4ZmZjMDI1NGMgICAvKiBTUE9SVDIgTXVsdGkgY2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMl9NUkNTMCAgMHhmZmMwMjU1MCAgIC8qIFNQT1JUMiBNdWx0aSBjaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDJfTVJDUzEgIDB4ZmZjMDI1NTQgICAvKiBTUE9SVDIgTXVsdGkgY2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQyX01SQ1MyICAweGZmYzAyNTU4ICAgLyogU1BPUlQyIE11bHRpIGNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUMl9NUkNTMyAgMHhmZmMwMjU1YyAgIC8qIFNQT1JUMiBNdWx0aSBjaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDMgKi8KKworLyogU1BPUlQzIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQT1JUM19UQ1IxICAweGZmYzAyNjAwICAgLyogU1BPUlQzIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTUE9SVDNfVENSMiAgMHhmZmMwMjYwNCAgIC8qIFNQT1JUMyBUcmFuc21pdCBDb25maWd1cmF0aW9uIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU1BPUlQzX1RDTEtESVYgIDB4ZmZjMDI2MDggICAvKiBTUE9SVDMgVHJhbnNtaXQgU2VyaWFsIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNQT1JUM19URlNESVYgIDB4ZmZjMDI2MGMgICAvKiBTUE9SVDMgVHJhbnNtaXQgRnJhbWUgU3luYyBEaXZpZGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1BPUlQzX1RYICAweGZmYzAyNjEwICAgLyogU1BPUlQzIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBTUE9SVDNfUlggIDB4ZmZjMDI2MTggICAvKiBTUE9SVDMgUmVjZWl2ZSBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQT1JUM19SQ1IxICAweGZmYzAyNjIwICAgLyogU1BPUlQzIFJlY2VpdmUgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQT1JUM19SQ1IyICAweGZmYzAyNjI0ICAgLyogU1BPUlQzIFJlY2VpdmUgQ29uZmlndXJhdGlvbiAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNQT1JUM19SQ0xLRElWICAweGZmYzAyNjI4ICAgLyogU1BPUlQzIFJlY2VpdmUgU2VyaWFsIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNQT1JUM19SRlNESVYgIDB4ZmZjMDI2MmMgICAvKiBTUE9SVDMgUmVjZWl2ZSBGcmFtZSBTeW5jIERpdmlkZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BPUlQzX1NUQVQgIDB4ZmZjMDI2MzAgICAvKiBTUE9SVDMgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNQT1JUM19DSE5MICAweGZmYzAyNjM0ICAgLyogU1BPUlQzIEN1cnJlbnQgQ2hhbm5lbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUM19NQ01DMSAgMHhmZmMwMjYzOCAgIC8qIFNQT1JUMyBNdWx0aSBjaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUM19NQ01DMiAgMHhmZmMwMjYzYyAgIC8qIFNQT1JUMyBNdWx0aSBjaGFubmVsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUM19NVENTMCAgMHhmZmMwMjY0MCAgIC8qIFNQT1JUMyBNdWx0aSBjaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQzX01UQ1MxICAweGZmYzAyNjQ0ICAgLyogU1BPUlQzIE11bHRpIGNoYW5uZWwgVHJhbnNtaXQgU2VsZWN0IFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDNfTVRDUzIgIDB4ZmZjMDI2NDggICAvKiBTUE9SVDMgTXVsdGkgY2hhbm5lbCBUcmFuc21pdCBTZWxlY3QgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUM19NVENTMyAgMHhmZmMwMjY0YyAgIC8qIFNQT1JUMyBNdWx0aSBjaGFubmVsIFRyYW5zbWl0IFNlbGVjdCBSZWdpc3RlciAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQzX01SQ1MwICAweGZmYzAyNjUwICAgLyogU1BPUlQzIE11bHRpIGNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNQT1JUM19NUkNTMSAgMHhmZmMwMjY1NCAgIC8qIFNQT1JUMyBNdWx0aSBjaGFubmVsIFJlY2VpdmUgU2VsZWN0IFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBTUE9SVDNfTVJDUzIgIDB4ZmZjMDI2NTggICAvKiBTUE9SVDMgTXVsdGkgY2hhbm5lbCBSZWNlaXZlIFNlbGVjdCBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1BPUlQzX01SQ1MzICAweGZmYzAyNjVjICAgLyogU1BPUlQzIE11bHRpIGNoYW5uZWwgUmVjZWl2ZSBTZWxlY3QgUmVnaXN0ZXIgMyAqLworCisvKiBFUFBJMiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkyX1NUQVRVUyAgMHhmZmMwMjkwMCAgIC8qIEVQUEkyIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVQUEkyX0hDT1VOVCAgMHhmZmMwMjkwNCAgIC8qIEVQUEkyIEhvcml6b250YWwgVHJhbnNmZXIgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMl9IREVMQVkgIDB4ZmZjMDI5MDggICAvKiBFUFBJMiBIb3Jpem9udGFsIERlbGF5IENvdW50IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVBQSTJfVkNPVU5UICAweGZmYzAyOTBjICAgLyogRVBQSTIgVmVydGljYWwgVHJhbnNmZXIgQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMl9WREVMQVkgIDB4ZmZjMDI5MTAgICAvKiBFUFBJMiBWZXJ0aWNhbCBEZWxheSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFUFBJMl9GUkFNRSAgMHhmZmMwMjkxNCAgIC8qIEVQUEkyIExpbmVzIHBlciBGcmFtZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRVBQSTJfTElORSAgMHhmZmMwMjkxOCAgIC8qIEVQUEkyIFNhbXBsZXMgcGVyIExpbmUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFUFBJMl9DTEtESVYgIDB4ZmZjMDI5MWMgICAvKiBFUFBJMiBDbG9jayBEaXZpZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVQUEkyX0NPTlRST0wgIDB4ZmZjMDI5MjAgICAvKiBFUFBJMiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVQUEkyX0ZTMVdfSEJMICAweGZmYzAyOTI0ICAgLyogRVBQSTIgRlMxIFdpZHRoIFJlZ2lzdGVyIC8gRVBQSTIgSG9yaXpvbnRhbCBCbGFua2luZyBTYW1wbGVzIFBlciBMaW5lIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVBQSTJfRlMxUF9BVlBMICAweGZmYzAyOTI4ICAgLyogRVBQSTIgRlMxIFBlcmlvZCBSZWdpc3RlciAvIEVQUEkyIEFjdGl2ZSBWaWRlbyBTYW1wbGVzIFBlciBMaW5lIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVQUEkyX0ZTMldfTFZCICAweGZmYzAyOTJjICAgLyogRVBQSTIgRlMyIFdpZHRoIFJlZ2lzdGVyIC8gRVBQSTIgTGluZXMgb2YgVmVydGljYWwgQmxhbmtpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUFBJMl9GUzJQX0xBVkYgIDB4ZmZjMDI5MzAgICAvKiBFUFBJMiBGUzIgUGVyaW9kIFJlZ2lzdGVyLyBFUFBJMiBMaW5lcyBvZiBBY3RpdmUgVmlkZW8gUGVyIEZpZWxkIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBFUFBJMl9DTElQICAweGZmYzAyOTM0ICAgLyogRVBQSTIgQ2xpcHBpbmcgUmVnaXN0ZXIgKi8KKworLyogQ0FOIENvbnRyb2xsZXIgMCBDb25maWcgMSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX01DMSAgMHhmZmMwMmEwMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9NRDEgIDB4ZmZjMDJhMDQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggRGlyZWN0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX1RSUzEgIDB4ZmZjMDJhMDggICAvKiBDQU4gQ29udHJvbGxlciAwIFRyYW5zbWl0IFJlcXVlc3QgU2V0IFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX1RSUjEgIDB4ZmZjMDJhMGMgICAvKiBDQU4gQ29udHJvbGxlciAwIFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX1RBMSAgMHhmZmMwMmExMCAgIC8qIENBTiBDb250cm9sbGVyIDAgVHJhbnNtaXQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FBMSAgMHhmZmMwMmExNCAgIC8qIENBTiBDb250cm9sbGVyIDAgQWJvcnQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjBfUk1QMSAgMHhmZmMwMmExOCAgIC8qIENBTiBDb250cm9sbGVyIDAgUmVjZWl2ZSBNZXNzYWdlIFBlbmRpbmcgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjBfUk1MMSAgMHhmZmMwMmExYyAgIC8qIENBTiBDb250cm9sbGVyIDAgUmVjZWl2ZSBNZXNzYWdlIExvc3QgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDQU4wX01CVElGMSAgMHhmZmMwMmEyMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENBTjBfTUJSSUYxICAweGZmYzAyYTI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IFJlY2VpdmUgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQklNMSAgMHhmZmMwMmEyOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9SRkgxICAweGZmYzAyYTJjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfT1BTUzEgIDB4ZmZjMDJhMzAgICAvKiBDQU4gQ29udHJvbGxlciAwIE92ZXJ3cml0ZSBQcm90ZWN0aW9uIFNpbmdsZSBTaG90IFRyYW5zbWl0IFJlZ2lzdGVyIDEgKi8KKworLyogQ0FOIENvbnRyb2xsZXIgMCBDb25maWcgMiBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX01DMiAgMHhmZmMwMmE0MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9NRDIgIDB4ZmZjMDJhNDQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggRGlyZWN0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX1RSUzIgIDB4ZmZjMDJhNDggICAvKiBDQU4gQ29udHJvbGxlciAwIFRyYW5zbWl0IFJlcXVlc3QgU2V0IFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX1RSUjIgIDB4ZmZjMDJhNGMgICAvKiBDQU4gQ29udHJvbGxlciAwIFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX1RBMiAgMHhmZmMwMmE1MCAgIC8qIENBTiBDb250cm9sbGVyIDAgVHJhbnNtaXQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FBMiAgMHhmZmMwMmE1NCAgIC8qIENBTiBDb250cm9sbGVyIDAgQWJvcnQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjBfUk1QMiAgMHhmZmMwMmE1OCAgIC8qIENBTiBDb250cm9sbGVyIDAgUmVjZWl2ZSBNZXNzYWdlIFBlbmRpbmcgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjBfUk1MMiAgMHhmZmMwMmE1YyAgIC8qIENBTiBDb250cm9sbGVyIDAgUmVjZWl2ZSBNZXNzYWdlIExvc3QgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDQU4wX01CVElGMiAgMHhmZmMwMmE2MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENBTjBfTUJSSUYyICAweGZmYzAyYTY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IFJlY2VpdmUgSW50ZXJydXB0IEZsYWcgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQklNMiAgMHhmZmMwMmE2OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9SRkgyICAweGZmYzAyYTZjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfT1BTUzIgIDB4ZmZjMDJhNzAgICAvKiBDQU4gQ29udHJvbGxlciAwIE92ZXJ3cml0ZSBQcm90ZWN0aW9uIFNpbmdsZSBTaG90IFRyYW5zbWl0IFJlZ2lzdGVyIDIgKi8KKworLyogQ0FOIENvbnRyb2xsZXIgMCBDbG9jay9JbnRlcnJ1cHQvQ291bnRlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9DTE9DSyAgMHhmZmMwMmE4MCAgIC8qIENBTiBDb250cm9sbGVyIDAgQ2xvY2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9USU1JTkcgIDB4ZmZjMDJhODQgICAvKiBDQU4gQ29udHJvbGxlciAwIFRpbWluZyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9ERUJVRyAgMHhmZmMwMmE4OCAgIC8qIENBTiBDb250cm9sbGVyIDAgRGVidWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9TVEFUVVMgIDB4ZmZjMDJhOGMgICAvKiBDQU4gQ29udHJvbGxlciAwIEdsb2JhbCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9DRUMgIDB4ZmZjMDJhOTAgICAvKiBDQU4gQ29udHJvbGxlciAwIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9HSVMgIDB4ZmZjMDJhOTQgICAvKiBDQU4gQ29udHJvbGxlciAwIEdsb2JhbCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjBfR0lNICAweGZmYzAyYTk4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBHbG9iYWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9HSUYgIDB4ZmZjMDJhOWMgICAvKiBDQU4gQ29udHJvbGxlciAwIEdsb2JhbCBJbnRlcnJ1cHQgRmxhZyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENBTjBfQ09OVFJPTCAgMHhmZmMwMmFhMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFzdGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0lOVFIgIDB4ZmZjMDJhYTQgICAvKiBDQU4gQ29udHJvbGxlciAwIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQlREICAweGZmYzAyYWFjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IFRlbXBvcmFyeSBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIENBTjBfRVdSICAweGZmYzAyYWIwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBQcm9ncmFtbWFibGUgV2FybmluZyBMZXZlbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0VTUiAgMHhmZmMwMmFiNCAgIC8qIENBTiBDb250cm9sbGVyIDAgRXJyb3IgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX1VDQ05UICAweGZmYzAyYWM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBVbml2ZXJzYWwgQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIENBTjBfVUNSQyAgMHhmZmMwMmFjOCAgIC8qIENBTiBDb250cm9sbGVyIDAgVW5pdmVyc2FsIENvdW50ZXIgRm9yY2UgUmVsb2FkIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX1VDQ05GICAweGZmYzAyYWNjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBVbml2ZXJzYWwgQ291bnRlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisKKy8qIENBTiBDb250cm9sbGVyIDAgQWNjZXB0YW5jZSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTAwTCAgMHhmZmMwMmIwMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAwIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMDBIICAweGZmYzAyYjA0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDAgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTAxTCAgMHhmZmMwMmIwOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMDFIICAweGZmYzAyYjBjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDEgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTAyTCAgMHhmZmMwMmIxMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMDJIICAweGZmYzAyYjE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTAzTCAgMHhmZmMwMmIxOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMDNIICAweGZmYzAyYjFjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDMgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTA0TCAgMHhmZmMwMmIyMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA0IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMDRIICAweGZmYzAyYjI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDQgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTA1TCAgMHhmZmMwMmIyOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA1IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMDVIICAweGZmYzAyYjJjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDUgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTA2TCAgMHhmZmMwMmIzMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA2IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMDZIICAweGZmYzAyYjM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDYgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTA3TCAgMHhmZmMwMmIzOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA3IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMDdIICAweGZmYzAyYjNjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDcgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTA4TCAgMHhmZmMwMmI0MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA4IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMDhIICAweGZmYzAyYjQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDggQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTA5TCAgMHhmZmMwMmI0OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA5IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMDlIICAweGZmYzAyYjRjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDkgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTEwTCAgMHhmZmMwMmI1MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTEwSCAgMHhmZmMwMmI1NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMCBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMTFMICAweGZmYzAyYjU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDExIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMTFIICAweGZmYzAyYjVjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDExIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0xMkwgIDB4ZmZjMDJiNjAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTIgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0xMkggIDB4ZmZjMDJiNjQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTIgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTEzTCAgMHhmZmMwMmI2OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTEzSCAgMHhmZmMwMmI2YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMyBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMTRMICAweGZmYzAyYjcwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE0IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMTRIICAweGZmYzAyYjc0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE0IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0xNUwgIDB4ZmZjMDJiNzggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTUgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0xNUggIDB4ZmZjMDJiN2MgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTUgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworCisvKiBDQU4gQ29udHJvbGxlciAwIEFjY2VwdGFuY2UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0xNkwgIDB4ZmZjMDJiODAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTYgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0xNkggIDB4ZmZjMDJiODQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTYgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTE3TCAgMHhmZmMwMmI4OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTE3SCAgMHhmZmMwMmI4YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNyBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMThMICAweGZmYzAyYjkwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE4IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMThIICAweGZmYzAyYjk0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE4IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0xOUwgIDB4ZmZjMDJiOTggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTkgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0xOUggIDB4ZmZjMDJiOWMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTkgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTIwTCAgMHhmZmMwMmJhMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMCBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTIwSCAgMHhmZmMwMmJhNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMCBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMjFMICAweGZmYzAyYmE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIxIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMjFIICAweGZmYzAyYmFjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIxIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0yMkwgIDB4ZmZjMDJiYjAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjIgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0yMkggIDB4ZmZjMDJiYjQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjIgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTIzTCAgMHhmZmMwMmJiOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMyBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTIzSCAgMHhmZmMwMmJiYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMyBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMjRMICAweGZmYzAyYmMwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI0IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMjRIICAweGZmYzAyYmM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI0IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0yNUwgIDB4ZmZjMDJiYzggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjUgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0yNUggIDB4ZmZjMDJiY2MgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjUgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTI2TCAgMHhmZmMwMmJkMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNiBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTI2SCAgMHhmZmMwMmJkNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNiBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMjdMICAweGZmYzAyYmQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI3IEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMjdIICAweGZmYzAyYmRjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI3IEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0yOEwgIDB4ZmZjMDJiZTAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjggQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0yOEggIDB4ZmZjMDJiZTQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjggQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTI5TCAgMHhmZmMwMmJlOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyOSBBY2NlcHRhbmNlIE1hc2sgSGlnaCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0FOMF9BTTI5SCAgMHhmZmMwMmJlYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyOSBBY2NlcHRhbmNlIE1hc2sgTG93IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMzBMICAweGZmYzAyYmYwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDMwIEFjY2VwdGFuY2UgTWFzayBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQU4wX0FNMzBIICAweGZmYzAyYmY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDMwIEFjY2VwdGFuY2UgTWFzayBMb3cgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0zMUwgIDB4ZmZjMDJiZjggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMzEgQWNjZXB0YW5jZSBNYXNrIEhpZ2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENBTjBfQU0zMUggIDB4ZmZjMDJiZmMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMzEgQWNjZXB0YW5jZSBNYXNrIExvdyBSZWdpc3RlciAqLworCisvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggRGF0YSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMF9EQVRBMCAgMHhmZmMwMmMwMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAwIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMF9EQVRBMSAgMHhmZmMwMmMwNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAwIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMF9EQVRBMiAgMHhmZmMwMmMwOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAwIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMF9EQVRBMyAgMHhmZmMwMmMwYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAwIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjAwX0xFTkdUSCAgMHhmZmMwMmMxMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAwIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjAwX1RJTUVTVEFNUCAgMHhmZmMwMmMxNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAwIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjAwX0lEMCAgMHhmZmMwMmMxOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAwIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjAwX0lEMSAgMHhmZmMwMmMxYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAwIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMV9EQVRBMCAgMHhmZmMwMmMyMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMV9EQVRBMSAgMHhmZmMwMmMyNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMV9EQVRBMiAgMHhmZmMwMmMyOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMV9EQVRBMyAgMHhmZmMwMmMyYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjAxX0xFTkdUSCAgMHhmZmMwMmMzMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjAxX1RJTUVTVEFNUCAgMHhmZmMwMmMzNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjAxX0lEMCAgMHhmZmMwMmMzOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjAxX0lEMSAgMHhmZmMwMmMzYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMl9EQVRBMCAgMHhmZmMwMmM0MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMl9EQVRBMSAgMHhmZmMwMmM0NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMl9EQVRBMiAgMHhmZmMwMmM0OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwMl9EQVRBMyAgMHhmZmMwMmM0YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjAyX0xFTkdUSCAgMHhmZmMwMmM1MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjAyX1RJTUVTVEFNUCAgMHhmZmMwMmM1NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjAyX0lEMCAgMHhmZmMwMmM1OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjAyX0lEMSAgMHhmZmMwMmM1YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwM19EQVRBMCAgMHhmZmMwMmM2MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwM19EQVRBMSAgMHhmZmMwMmM2NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwM19EQVRBMiAgMHhmZmMwMmM2OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwM19EQVRBMyAgMHhmZmMwMmM2YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjAzX0xFTkdUSCAgMHhmZmMwMmM3MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjAzX1RJTUVTVEFNUCAgMHhmZmMwMmM3NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjAzX0lEMCAgMHhmZmMwMmM3OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjAzX0lEMSAgMHhmZmMwMmM3YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNF9EQVRBMCAgMHhmZmMwMmM4MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA0IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNF9EQVRBMSAgMHhmZmMwMmM4NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA0IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNF9EQVRBMiAgMHhmZmMwMmM4OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA0IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNF9EQVRBMyAgMHhmZmMwMmM4YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA0IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjA0X0xFTkdUSCAgMHhmZmMwMmM5MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA0IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjA0X1RJTUVTVEFNUCAgMHhmZmMwMmM5NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA0IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA0X0lEMCAgMHhmZmMwMmM5OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA0IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA0X0lEMSAgMHhmZmMwMmM5YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA0IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNV9EQVRBMCAgMHhmZmMwMmNhMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA1IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNV9EQVRBMSAgMHhmZmMwMmNhNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA1IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNV9EQVRBMiAgMHhmZmMwMmNhOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA1IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNV9EQVRBMyAgMHhmZmMwMmNhYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA1IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjA1X0xFTkdUSCAgMHhmZmMwMmNiMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA1IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjA1X1RJTUVTVEFNUCAgMHhmZmMwMmNiNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA1IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA1X0lEMCAgMHhmZmMwMmNiOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA1IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA1X0lEMSAgMHhmZmMwMmNiYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA1IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNl9EQVRBMCAgMHhmZmMwMmNjMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA2IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNl9EQVRBMSAgMHhmZmMwMmNjNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA2IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNl9EQVRBMiAgMHhmZmMwMmNjOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA2IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwNl9EQVRBMyAgMHhmZmMwMmNjYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA2IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjA2X0xFTkdUSCAgMHhmZmMwMmNkMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA2IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjA2X1RJTUVTVEFNUCAgMHhmZmMwMmNkNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA2IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA2X0lEMCAgMHhmZmMwMmNkOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA2IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA2X0lEMSAgMHhmZmMwMmNkYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA2IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwN19EQVRBMCAgMHhmZmMwMmNlMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA3IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwN19EQVRBMSAgMHhmZmMwMmNlNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA3IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwN19EQVRBMiAgMHhmZmMwMmNlOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA3IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwN19EQVRBMyAgMHhmZmMwMmNlYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA3IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjA3X0xFTkdUSCAgMHhmZmMwMmNmMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA3IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjA3X1RJTUVTVEFNUCAgMHhmZmMwMmNmNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA3IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA3X0lEMCAgMHhmZmMwMmNmOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA3IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA3X0lEMSAgMHhmZmMwMmNmYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA3IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwOF9EQVRBMCAgMHhmZmMwMmQwMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA4IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwOF9EQVRBMSAgMHhmZmMwMmQwNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA4IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwOF9EQVRBMiAgMHhmZmMwMmQwOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA4IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwOF9EQVRBMyAgMHhmZmMwMmQwYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA4IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjA4X0xFTkdUSCAgMHhmZmMwMmQxMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA4IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjA4X1RJTUVTVEFNUCAgMHhmZmMwMmQxNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA4IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA4X0lEMCAgMHhmZmMwMmQxOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA4IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA4X0lEMSAgMHhmZmMwMmQxYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA4IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwOV9EQVRBMCAgMHhmZmMwMmQyMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA5IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwOV9EQVRBMSAgMHhmZmMwMmQyNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA5IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwOV9EQVRBMiAgMHhmZmMwMmQyOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA5IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIwOV9EQVRBMyAgMHhmZmMwMmQyYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA5IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjA5X0xFTkdUSCAgMHhmZmMwMmQzMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA5IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjA5X1RJTUVTVEFNUCAgMHhmZmMwMmQzNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA5IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA5X0lEMCAgMHhmZmMwMmQzOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA5IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjA5X0lEMSAgMHhmZmMwMmQzYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCA5IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxMF9EQVRBMCAgMHhmZmMwMmQ0MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMCBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMTBfREFUQTEgIDB4ZmZjMDJkNDQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTAgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjEwX0RBVEEyICAweGZmYzAyZDQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDEwIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxMF9EQVRBMyAgMHhmZmMwMmQ0YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMCBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjBfTUIxMF9MRU5HVEggIDB4ZmZjMDJkNTAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTAgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4wX01CMTBfVElNRVNUQU1QICAweGZmYzAyZDU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDEwIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjEwX0lEMCAgMHhmZmMwMmQ1OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMCBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIxMF9JRDEgIDB4ZmZjMDJkNWMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTAgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjExX0RBVEEwICAweGZmYzAyZDYwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDExIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxMV9EQVRBMSAgMHhmZmMwMmQ2NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMSBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMTFfREFUQTIgIDB4ZmZjMDJkNjggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTEgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjExX0RBVEEzICAweGZmYzAyZDZjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDExIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjExX0xFTkdUSCAgMHhmZmMwMmQ3MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMSBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjBfTUIxMV9USU1FU1RBTVAgIDB4ZmZjMDJkNzQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTEgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMTFfSUQwICAweGZmYzAyZDc4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDExIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjExX0lEMSAgMHhmZmMwMmQ3YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMSBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMTJfREFUQTAgIDB4ZmZjMDJkODAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTIgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjEyX0RBVEExICAweGZmYzAyZDg0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDEyIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxMl9EQVRBMiAgMHhmZmMwMmQ4OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMiBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMTJfREFUQTMgIDB4ZmZjMDJkOGMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTIgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4wX01CMTJfTEVOR1RIICAweGZmYzAyZDkwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDEyIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjEyX1RJTUVTVEFNUCAgMHhmZmMwMmQ5NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMiBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIxMl9JRDAgIDB4ZmZjMDJkOTggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTIgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMTJfSUQxICAweGZmYzAyZDljICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDEyIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxM19EQVRBMCAgMHhmZmMwMmRhMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMyBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMTNfREFUQTEgIDB4ZmZjMDJkYTQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTMgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjEzX0RBVEEyICAweGZmYzAyZGE4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDEzIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxM19EQVRBMyAgMHhmZmMwMmRhYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMyBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjBfTUIxM19MRU5HVEggIDB4ZmZjMDJkYjAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTMgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4wX01CMTNfVElNRVNUQU1QICAweGZmYzAyZGI0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDEzIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjEzX0lEMCAgMHhmZmMwMmRiOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxMyBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIxM19JRDEgIDB4ZmZjMDJkYmMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTMgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE0X0RBVEEwICAweGZmYzAyZGMwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE0IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxNF9EQVRBMSAgMHhmZmMwMmRjNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNCBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMTRfREFUQTIgIDB4ZmZjMDJkYzggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTQgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE0X0RBVEEzICAweGZmYzAyZGNjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE0IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjE0X0xFTkdUSCAgMHhmZmMwMmRkMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNCBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjBfTUIxNF9USU1FU1RBTVAgIDB4ZmZjMDJkZDQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTQgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMTRfSUQwICAweGZmYzAyZGQ4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE0IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE0X0lEMSAgMHhmZmMwMmRkYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNCBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMTVfREFUQTAgIDB4ZmZjMDJkZTAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTUgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE1X0RBVEExICAweGZmYzAyZGU0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE1IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxNV9EQVRBMiAgMHhmZmMwMmRlOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNSBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMTVfREFUQTMgIDB4ZmZjMDJkZWMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTUgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4wX01CMTVfTEVOR1RIICAweGZmYzAyZGYwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE1IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjE1X1RJTUVTVEFNUCAgMHhmZmMwMmRmNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNSBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIxNV9JRDAgIDB4ZmZjMDJkZjggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTUgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMTVfSUQxICAweGZmYzAyZGZjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE1IElEMSBSZWdpc3RlciAqLworCisvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggRGF0YSBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxNl9EQVRBMCAgMHhmZmMwMmUwMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNiBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMTZfREFUQTEgIDB4ZmZjMDJlMDQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTYgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE2X0RBVEEyICAweGZmYzAyZTA4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE2IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxNl9EQVRBMyAgMHhmZmMwMmUwYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNiBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjBfTUIxNl9MRU5HVEggIDB4ZmZjMDJlMTAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTYgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4wX01CMTZfVElNRVNUQU1QICAweGZmYzAyZTE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE2IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE2X0lEMCAgMHhmZmMwMmUxOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNiBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIxNl9JRDEgIDB4ZmZjMDJlMWMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTYgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE3X0RBVEEwICAweGZmYzAyZTIwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE3IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxN19EQVRBMSAgMHhmZmMwMmUyNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNyBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMTdfREFUQTIgIDB4ZmZjMDJlMjggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTcgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE3X0RBVEEzICAweGZmYzAyZTJjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE3IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjE3X0xFTkdUSCAgMHhmZmMwMmUzMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNyBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjBfTUIxN19USU1FU1RBTVAgIDB4ZmZjMDJlMzQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTcgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMTdfSUQwICAweGZmYzAyZTM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE3IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE3X0lEMSAgMHhmZmMwMmUzYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxNyBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMThfREFUQTAgIDB4ZmZjMDJlNDAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTggRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE4X0RBVEExICAweGZmYzAyZTQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE4IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxOF9EQVRBMiAgMHhmZmMwMmU0OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxOCBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMThfREFUQTMgIDB4ZmZjMDJlNGMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTggRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4wX01CMThfTEVOR1RIICAweGZmYzAyZTUwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE4IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjE4X1RJTUVTVEFNUCAgMHhmZmMwMmU1NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxOCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIxOF9JRDAgIDB4ZmZjMDJlNTggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTggSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMThfSUQxICAweGZmYzAyZTVjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE4IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxOV9EQVRBMCAgMHhmZmMwMmU2MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxOSBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMTlfREFUQTEgIDB4ZmZjMDJlNjQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTkgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE5X0RBVEEyICAweGZmYzAyZTY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE5IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIxOV9EQVRBMyAgMHhmZmMwMmU2YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxOSBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjBfTUIxOV9MRU5HVEggIDB4ZmZjMDJlNzAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTkgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4wX01CMTlfVElNRVNUQU1QICAweGZmYzAyZTc0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDE5IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjE5X0lEMCAgMHhmZmMwMmU3OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAxOSBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIxOV9JRDEgIDB4ZmZjMDJlN2MgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMTkgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjIwX0RBVEEwICAweGZmYzAyZTgwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIwIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyMF9EQVRBMSAgMHhmZmMwMmU4NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMCBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjBfREFUQTIgIDB4ZmZjMDJlODggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjAgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjIwX0RBVEEzICAweGZmYzAyZThjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIwIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjIwX0xFTkdUSCAgMHhmZmMwMmU5MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMCBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjBfTUIyMF9USU1FU1RBTVAgIDB4ZmZjMDJlOTQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjAgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMjBfSUQwICAweGZmYzAyZTk4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIwIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjIwX0lEMSAgMHhmZmMwMmU5YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMCBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjFfREFUQTAgIDB4ZmZjMDJlYTAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjEgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjIxX0RBVEExICAweGZmYzAyZWE0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIxIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyMV9EQVRBMiAgMHhmZmMwMmVhOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMSBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjFfREFUQTMgIDB4ZmZjMDJlYWMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjEgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4wX01CMjFfTEVOR1RIICAweGZmYzAyZWIwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIxIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjIxX1RJTUVTVEFNUCAgMHhmZmMwMmViNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMSBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIyMV9JRDAgIDB4ZmZjMDJlYjggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjEgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMjFfSUQxICAweGZmYzAyZWJjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIxIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyMl9EQVRBMCAgMHhmZmMwMmVjMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMiBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjJfREFUQTEgIDB4ZmZjMDJlYzQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjIgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjIyX0RBVEEyICAweGZmYzAyZWM4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIyIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyMl9EQVRBMyAgMHhmZmMwMmVjYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMiBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjBfTUIyMl9MRU5HVEggIDB4ZmZjMDJlZDAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjIgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4wX01CMjJfVElNRVNUQU1QICAweGZmYzAyZWQ0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIyIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjIyX0lEMCAgMHhmZmMwMmVkOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMiBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIyMl9JRDEgIDB4ZmZjMDJlZGMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjIgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjIzX0RBVEEwICAweGZmYzAyZWUwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIzIERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyM19EQVRBMSAgMHhmZmMwMmVlNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMyBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjNfREFUQTIgIDB4ZmZjMDJlZTggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjMgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjIzX0RBVEEzICAweGZmYzAyZWVjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIzIERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjIzX0xFTkdUSCAgMHhmZmMwMmVmMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMyBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjBfTUIyM19USU1FU1RBTVAgIDB4ZmZjMDJlZjQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjMgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMjNfSUQwICAweGZmYzAyZWY4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDIzIElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjIzX0lEMSAgMHhmZmMwMmVmYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyMyBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjRfREFUQTAgIDB4ZmZjMDJmMDAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjQgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI0X0RBVEExICAweGZmYzAyZjA0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI0IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyNF9EQVRBMiAgMHhmZmMwMmYwOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNCBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjRfREFUQTMgIDB4ZmZjMDJmMGMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjQgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4wX01CMjRfTEVOR1RIICAweGZmYzAyZjEwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI0IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjI0X1RJTUVTVEFNUCAgMHhmZmMwMmYxNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIyNF9JRDAgIDB4ZmZjMDJmMTggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjQgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMjRfSUQxICAweGZmYzAyZjFjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI0IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyNV9EQVRBMCAgMHhmZmMwMmYyMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNSBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjVfREFUQTEgIDB4ZmZjMDJmMjQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjUgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI1X0RBVEEyICAweGZmYzAyZjI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI1IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyNV9EQVRBMyAgMHhmZmMwMmYyYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNSBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjBfTUIyNV9MRU5HVEggIDB4ZmZjMDJmMzAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjUgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4wX01CMjVfVElNRVNUQU1QICAweGZmYzAyZjM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI1IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI1X0lEMCAgMHhmZmMwMmYzOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNSBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIyNV9JRDEgIDB4ZmZjMDJmM2MgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjUgSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI2X0RBVEEwICAweGZmYzAyZjQwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI2IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyNl9EQVRBMSAgMHhmZmMwMmY0NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNiBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjZfREFUQTIgIDB4ZmZjMDJmNDggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjYgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI2X0RBVEEzICAweGZmYzAyZjRjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI2IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjI2X0xFTkdUSCAgMHhmZmMwMmY1MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNiBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjBfTUIyNl9USU1FU1RBTVAgIDB4ZmZjMDJmNTQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjYgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMjZfSUQwICAweGZmYzAyZjU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI2IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI2X0lEMSAgMHhmZmMwMmY1YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNiBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjdfREFUQTAgIDB4ZmZjMDJmNjAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjcgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI3X0RBVEExICAweGZmYzAyZjY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI3IERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyN19EQVRBMiAgMHhmZmMwMmY2OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNyBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjdfREFUQTMgIDB4ZmZjMDJmNmMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjcgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4wX01CMjdfTEVOR1RIICAweGZmYzAyZjcwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI3IExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjI3X1RJTUVTVEFNUCAgMHhmZmMwMmY3NCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyNyBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIyN19JRDAgIDB4ZmZjMDJmNzggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjcgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMjdfSUQxICAweGZmYzAyZjdjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI3IElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyOF9EQVRBMCAgMHhmZmMwMmY4MCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyOCBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjhfREFUQTEgIDB4ZmZjMDJmODQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjggRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI4X0RBVEEyICAweGZmYzAyZjg4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI4IERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyOF9EQVRBMyAgMHhmZmMwMmY4YyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyOCBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjBfTUIyOF9MRU5HVEggIDB4ZmZjMDJmOTAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjggTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4wX01CMjhfVElNRVNUQU1QICAweGZmYzAyZjk0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI4IFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI4X0lEMCAgMHhmZmMwMmY5OCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyOCBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIyOF9JRDEgIDB4ZmZjMDJmOWMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjggSUQxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI5X0RBVEEwICAweGZmYzAyZmEwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI5IERhdGEgMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIyOV9EQVRBMSAgMHhmZmMwMmZhNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyOSBEYXRhIDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMjlfREFUQTIgIDB4ZmZjMDJmYTggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjkgRGF0YSAyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI5X0RBVEEzICAweGZmYzAyZmFjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI5IERhdGEgMyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0FOMF9NQjI5X0xFTkdUSCAgMHhmZmMwMmZiMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyOSBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIENBTjBfTUIyOV9USU1FU1RBTVAgIDB4ZmZjMDJmYjQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMjkgVGltZXN0YW1wIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMjlfSUQwICAweGZmYzAyZmI4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDI5IElEMCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjI5X0lEMSAgMHhmZmMwMmZiYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAyOSBJRDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMzBfREFUQTAgIDB4ZmZjMDJmYzAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMzAgRGF0YSAwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjMwX0RBVEExICAweGZmYzAyZmM0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDMwIERhdGEgMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIzMF9EQVRBMiAgMHhmZmMwMmZjOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzMCBEYXRhIDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMzBfREFUQTMgIDB4ZmZjMDJmY2MgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMzAgRGF0YSAzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU4wX01CMzBfTEVOR1RIICAweGZmYzAyZmQwICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDMwIExlbmd0aCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgQ0FOMF9NQjMwX1RJTUVTVEFNUCAgMHhmZmMwMmZkNCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzMCBUaW1lc3RhbXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIzMF9JRDAgIDB4ZmZjMDJmZDggICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMzAgSUQwIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDQU4wX01CMzBfSUQxICAweGZmYzAyZmRjICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDMwIElEMSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIzMV9EQVRBMCAgMHhmZmMwMmZlMCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzMSBEYXRhIDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQU4wX01CMzFfREFUQTEgIDB4ZmZjMDJmZTQgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMzEgRGF0YSAxIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FOMF9NQjMxX0RBVEEyICAweGZmYzAyZmU4ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDMxIERhdGEgMiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIENBTjBfTUIzMV9EQVRBMyAgMHhmZmMwMmZlYyAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzMSBEYXRhIDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTjBfTUIzMV9MRU5HVEggIDB4ZmZjMDJmZjAgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMzEgTGVuZ3RoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICBDQU4wX01CMzFfVElNRVNUQU1QICAweGZmYzAyZmY0ICAgLyogQ0FOIENvbnRyb2xsZXIgMCBNYWlsYm94IDMxIFRpbWVzdGFtcCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0FOMF9NQjMxX0lEMCAgMHhmZmMwMmZmOCAgIC8qIENBTiBDb250cm9sbGVyIDAgTWFpbGJveCAzMSBJRDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENBTjBfTUIzMV9JRDEgIDB4ZmZjMDJmZmMgICAvKiBDQU4gQ29udHJvbGxlciAwIE1haWxib3ggMzEgSUQxIFJlZ2lzdGVyICovCisKKy8qIFVBUlQzIFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDNfRExMICAweGZmYzAzMTAwICAgLyogRGl2aXNvciBMYXRjaCBMb3cgQnl0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQzX0RMSCAgMHhmZmMwMzEwNCAgIC8qIERpdmlzb3IgTGF0Y2ggSGlnaCBCeXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVQVJUM19HQ1RMICAweGZmYzAzMTA4ICAgLyogR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUM19MQ1IgIDB4ZmZjMDMxMGMgICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUM19NQ1IgIDB4ZmZjMDMxMTAgICAvKiBNb2RlbSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDNfTFNSICAweGZmYzAzMTE0ICAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUM19NU1IgIDB4ZmZjMDMxMTggICAvKiBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBVQVJUM19TQ1IgIDB4ZmZjMDMxMWMgICAvKiBTY3JhdGNoIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBVQVJUM19JRVJfU0VUICAweGZmYzAzMTIwICAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBTZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBVQVJUM19JRVJfQ0xFQVIgIDB4ZmZjMDMxMjQgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIENsZWFyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDNfVEhSICAweGZmYzAzMTI4ICAgLyogVHJhbnNtaXQgSG9sZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQzX1JCUiAgMHhmZmMwMzEyYyAgIC8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyICovCisKKy8qIE5GQyBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0NUTCAgMHhmZmMwM2IwMCAgIC8qIE5BTkQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBORkNfU1RBVCAgMHhmZmMwM2IwNCAgIC8qIE5BTkQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE5GQ19JUlFTVEFUICAweGZmYzAzYjA4ICAgLyogTkFORCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE5GQ19JUlFNQVNLICAweGZmYzAzYjBjICAgLyogTkFORCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBORkNfRUNDMCAgMHhmZmMwM2IxMCAgIC8qIE5BTkQgRUNDIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0VDQzEgIDB4ZmZjMDNiMTQgICAvKiBOQU5EIEVDQyBSZWdpc3RlciAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgIE5GQ19FQ0MyICAweGZmYzAzYjE4ICAgLyogTkFORCBFQ0MgUmVnaXN0ZXIgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBORkNfRUNDMyAgMHhmZmMwM2IxYyAgIC8qIE5BTkQgRUNDIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBORkNfQ09VTlQgIDB4ZmZjMDNiMjAgICAvKiBOQU5EIEVDQyBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX1JTVCAgMHhmZmMwM2IyNCAgIC8qIE5BTkQgRUNDIFJlc2V0IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgTkZDX1BHQ1RMICAweGZmYzAzYjI4ICAgLyogTkFORCBQYWdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX1JFQUQgIDB4ZmZjMDNiMmMgICAvKiBOQU5EIFJlYWQgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICBORkNfQUREUiAgMHhmZmMwM2I0MCAgIC8qIE5BTkQgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgTkZDX0NNRCAgMHhmZmMwM2I0NCAgIC8qIE5BTkQgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBORkNfREFUQV9XUiAgMHhmZmMwM2I0OCAgIC8qIE5BTkQgRGF0YSBXcml0ZSBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBORkNfREFUQV9SRCAgMHhmZmMwM2I0YyAgIC8qIE5BTkQgRGF0YSBSZWFkIFJlZ2lzdGVyICovCisKKy8qIENvdW50ZXIgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENOVF9DT05GSUcgIDB4ZmZjMDQyMDAgICAvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgQ05UX0lNQVNLICAweGZmYzA0MjA0ICAgLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENOVF9TVEFUVVMgIDB4ZmZjMDQyMDggICAvKiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ05UX0NPTU1BTkQgIDB4ZmZjMDQyMGMgICAvKiBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ05UX0RFQk9VTkNFICAweGZmYzA0MjEwICAgLyogRGVib3VuY2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ05UX0NPVU5URVIgIDB4ZmZjMDQyMTQgICAvKiBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBDTlRfTUFYICAweGZmYzA0MjE4ICAgLyogTWF4aW1hbCBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgICAgQ05UX01JTiAgMHhmZmMwNDIxYyAgIC8qIE1pbmltYWwgQ291bnQgUmVnaXN0ZXIgKi8KKworLyogT1RQL0ZVU0UgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgT1RQX0NPTlRST0wgIDB4ZmZjMDQzMDAgICAvKiBPVFAvRnVzZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBPVFBfQkVOICAweGZmYzA0MzA0ICAgLyogT1RQL0Z1c2UgQnl0ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE9UUF9TVEFUVVMgIDB4ZmZjMDQzMDggICAvKiBPVFAvRnVzZSBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE9UUF9USU1JTkcgIDB4ZmZjMDQzMGMgICAvKiBPVFAvRnVzZSBBY2Nlc3MgVGltaW5nICovCisKKy8qIFNlY3VyaXR5IFJlZ2lzdGVycyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRUNVUkVfU1lTU1dUICAweGZmYzA0MzIwICAgLyogU2VjdXJlIFN5c3RlbSBTd2l0Y2hlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkVfQ09OVFJPTCAgMHhmZmMwNDMyNCAgIC8qIFNlY3VyZSBDb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRUNVUkVfU1RBVFVTICAweGZmYzA0MzI4ICAgLyogU2VjdXJlIFN0YXR1cyAqLworCisvKiBETUEgUGVyaXBoZXJhbCBNdXggUmVnaXN0ZXIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRE1BQzFfUEVSSU1VWCAgMHhmZmMwNDM0MCAgIC8qIERNQSBDb250cm9sbGVyIDEgUGVyaXBoZXJhbCBNdWx0aXBsZXhlciBSZWdpc3RlciAqLworCisvKiBPVFAgUmVhZC9Xcml0ZSBEYXRhIEJ1ZmZlciBSZWdpc3RlcnMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMCAgMHhmZmMwNDM4MCAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMSAgMHhmZmMwNDM4NCAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMiAgMHhmZmMwNDM4OCAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIE9UUF9EQVRBMyAgMHhmZmMwNDM4YyAgIC8qIE9UUC9GdXNlIERhdGEgKE9UUF9EQVRBMC0zKSBhY2Nlc3NlcyB0aGUgZnVzZSByZWFkIHdyaXRlIGJ1ZmZlciAqLworCisvKiBIYW5kc2hha2UgTURNQSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgc2hhcmVkIGZpbGUgYmVjYXVzZSBpdCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBBRFNQLUJGNTQyIHByb2Nlc3NvciAqLworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAgICAgU0lOR0xFIEJJVCBNQUNSTyBQQUlSUyAoYml0IG1hc2sgYW5kIG5lZ2F0ZWQgb25lKSAgICAgICovCisvKiAgICAgYW5kIE1VTFRJIEJJVCBSRUFEIE1BQ1JPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0lDX0lBUjAgKi8KKworI2RlZmluZSAgICAgICAgICAgIElSUV9QTExfV0FLRVVQICAweDEgICAgICAgIC8qIFBMTCBXYWtldXAgKi8KKyNkZWZpbmUgICAgICAgICAgIG5JUlFfUExMX1dBS0VVUCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNJQ19JV1IwLCBTSUNfSU1BU0swLCBTSUNfSVNSMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICBJUlFfRE1BMF9FUlIgIDB4MiAgICAgICAgLyogRE1BIENvbnRyb2xsZXIgMCBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICBuSVJRX0RNQTBfRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIElSUV9FUFBJMF9FUlIgIDB4NCAgICAgICAgLyogRVBQSTAgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICBuSVJRX0VQUEkwX0VSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgIElSUV9TUE9SVDBfRVJSICAweDggICAgICAgIC8qIFNQT1JUMCBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgbklSUV9TUE9SVDBfRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgSVJRX1NQT1JUMV9FUlIgIDB4MTAgICAgICAgLyogU1BPUlQxIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICBuSVJRX1NQT1JUMV9FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIElSUV9TUEkwX0VSUiAgMHgyMCAgICAgICAvKiBTUEkwIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgIG5JUlFfU1BJMF9FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgSVJRX1VBUlQwX0VSUiAgMHg0MCAgICAgICAvKiBVQVJUMCBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgIG5JUlFfVUFSVDBfRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIElSUV9SVEMgIDB4ODAgICAgICAgLyogUmVhbC1UaW1lIENsb2NrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbklSUV9SVEMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIElSUV9ETUExMiAgMHgxMDAgICAgICAvKiBETUEgQ2hhbm5lbCAxMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuSVJRX0RNQTEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSVJRX0RNQTAgIDB4MjAwICAgICAgLyogRE1BIENoYW5uZWwgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklSUV9ETUEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSVJRX0RNQTEgIDB4NDAwICAgICAgLyogRE1BIENoYW5uZWwgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklSUV9ETUExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSVJRX0RNQTIgIDB4ODAwICAgICAgLyogRE1BIENoYW5uZWwgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklSUV9ETUEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSVJRX0RNQTMgIDB4MTAwMCAgICAgLyogRE1BIENoYW5uZWwgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklSUV9ETUEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSVJRX0RNQTQgIDB4MjAwMCAgICAgLyogRE1BIENoYW5uZWwgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklSUV9ETUE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSVJRX0RNQTYgIDB4NDAwMCAgICAgLyogRE1BIENoYW5uZWwgNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklSUV9ETUE2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSVJRX0RNQTcgIDB4ODAwMCAgICAgLyogRE1BIENoYW5uZWwgNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklSUV9ETUE3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBJUlFfUElOVDAgIDB4ODAwMDAgICAgLyogUGluIEludGVycnVwdCAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5JUlFfUElOVDAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIElSUV9QSU5UMSAgMHgxMDAwMDAgICAvKiBQaW4gSW50ZXJydXB0IDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbklSUV9QSU5UMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgSVJRX01ETUEwICAweDIwMDAwMCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbklSUV9NRE1BMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgSVJRX01ETUExICAweDQwMDAwMCAgIC8qIE1lbW9yeSBETUEgU3RyZWFtIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbklSUV9NRE1BMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIElSUV9XRE9HICAweDgwMDAwMCAgIC8qIFdhdGNoZG9nIFRpbWVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuSVJRX1dET0cgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIElSUV9ETUExX0VSUiAgMHgxMDAwMDAwICAvKiBETUEgQ29udHJvbGxlciAxIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgIG5JUlFfRE1BMV9FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICBJUlFfU1BPUlQyX0VSUiAgMHgyMDAwMDAwICAvKiBTUE9SVDIgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgIG5JUlFfU1BPUlQyX0VSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgIElSUV9TUE9SVDNfRVJSICAweDQwMDAwMDAgIC8qIFNQT1JUMyBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgbklSUV9TUE9SVDNfRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgSVJRX01YVlJfU0QgIDB4ODAwMDAwMCAgLyogTVhWUiBTeW5jaHJvbm91cyBEYXRhICovCisjZGVmaW5lICAgICAgICAgICAgICBuSVJRX01YVlJfU0QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIElSUV9TUEkxX0VSUiAgMHgxMDAwMDAwMCAvKiBTUEkxIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgIG5JUlFfU1BJMV9FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIElSUV9TUEkyX0VSUiAgMHgyMDAwMDAwMCAvKiBTUEkyIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgIG5JUlFfU1BJMl9FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgSVJRX1VBUlQxX0VSUiAgMHg0MDAwMDAwMCAvKiBVQVJUMSBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgIG5JUlFfVUFSVDFfRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIElSUV9VQVJUMl9FUlIgIDB4ODAwMDAwMDAgLyogVUFSVDIgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICBuSVJRX1VBUlQyX0VSUiAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNJQ19JV1IxLCBTSUNfSU1BU0sxLCBTSUNfSVNSMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICBJUlFfQ0FOMF9FUlIgIDB4MSAgICAgICAgLyogQ0FOMCBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICBuSVJRX0NBTjBfRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBJUlFfRE1BMTggIDB4MiAgICAgICAgLyogRE1BIENoYW5uZWwgMTggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbklSUV9ETUExOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgSVJRX0RNQTE5ICAweDQgICAgICAgIC8qIERNQSBDaGFubmVsIDE5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5JUlFfRE1BMTkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIElSUV9ETUEyMCAgMHg4ICAgICAgICAvKiBETUEgQ2hhbm5lbCAyMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuSVJRX0RNQTIwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBJUlFfRE1BMjEgIDB4MTAgICAgICAgLyogRE1BIENoYW5uZWwgMjEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbklSUV9ETUEyMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgSVJRX0RNQTEzICAweDIwICAgICAgIC8qIERNQSBDaGFubmVsIDEzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5JUlFfRE1BMTMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIElSUV9ETUExNCAgMHg0MCAgICAgICAvKiBETUEgQ2hhbm5lbCAxNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuSVJRX0RNQTE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSVJRX0RNQTUgIDB4ODAgICAgICAgLyogRE1BIENoYW5uZWwgNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklSUV9ETUE1ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBJUlFfRE1BMjMgIDB4MTAwICAgICAgLyogRE1BIENoYW5uZWwgMjMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbklSUV9ETUEyMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIElSUV9ETUE4ICAweDIwMCAgICAgIC8qIERNQSBDaGFubmVsIDggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5JUlFfRE1BOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIElSUV9ETUE5ICAweDQwMCAgICAgIC8qIERNQSBDaGFubmVsIDkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5JUlFfRE1BOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgSVJRX0RNQTEwICAweDgwMCAgICAgIC8qIERNQSBDaGFubmVsIDEwICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5JUlFfRE1BMTAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIElSUV9ETUExMSAgMHgxMDAwICAgICAvKiBETUEgQ2hhbm5lbCAxMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuSVJRX0RNQTExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSVJRX1RXSTAgIDB4MjAwMCAgICAgLyogVFdJMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklSUV9UV0kwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSVJRX1RXSTEgIDB4NDAwMCAgICAgLyogVFdJMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklSUV9UV0kxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgSVJRX0NBTjBfUlggIDB4ODAwMCAgICAgLyogQ0FOMCBSZWNlaXZlICovCisjZGVmaW5lICAgICAgICAgICAgICBuSVJRX0NBTjBfUlggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBJUlFfQ0FOMF9UWCAgMHgxMDAwMCAgICAvKiBDQU4wIFRyYW5zbWl0ICovCisjZGVmaW5lICAgICAgICAgICAgICBuSVJRX0NBTjBfVFggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIElSUV9NRE1BMiAgMHgyMDAwMCAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5JUlFfTURNQTIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIElSUV9NRE1BMyAgMHg0MDAwMCAgICAvKiBNZW1vcnkgRE1BIFN0cmVhbSAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5JUlFfTURNQTMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgSVJRX01YVlJfU1RBVCAgMHg4MDAwMCAgICAvKiBNWFZSIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgIG5JUlFfTVhWUl9TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgSVJRX01YVlJfQ00gIDB4MTAwMDAwICAgLyogTVhWUiBDb250cm9sIE1lc3NhZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5JUlFfTVhWUl9DTSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIElSUV9NWFZSX0FQICAweDIwMDAwMCAgIC8qIE1YVlIgQXN5bmNocm9ub3VzIFBhY2tldCAqLworI2RlZmluZSAgICAgICAgICAgICAgbklSUV9NWFZSX0FQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIElSUV9FUFBJMV9FUlIgIDB4NDAwMDAwICAgLyogRVBQSTEgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICBuSVJRX0VQUEkxX0VSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBJUlFfRVBQSTJfRVJSICAweDgwMDAwMCAgIC8qIEVQUEkyIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgbklSUV9FUFBJMl9FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgSVJRX1VBUlQzX0VSUiAgMHgxMDAwMDAwICAvKiBVQVJUMyBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgIG5JUlFfVUFSVDNfRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBJUlFfSE9TVF9FUlIgIDB4MjAwMDAwMCAgLyogSG9zdCBETUEgUG9ydCBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICBuSVJRX0hPU1RfRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgSVJRX1VTQl9FUlIgIDB4NDAwMDAwMCAgLyogVVNCIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICBuSVJRX1VTQl9FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIElSUV9QSVhDX0VSUiAgMHg4MDAwMDAwICAvKiBQaXhlbCBDb21wb3NpdG9yIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgIG5JUlFfUElYQ19FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBJUlFfTkZDX0VSUiAgMHgxMDAwMDAwMCAvKiBOYW5kIEZsYXNoIENvbnRyb2xsZXIgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5JUlFfTkZDX0VSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBJUlFfQVRBUElfRVJSICAweDIwMDAwMDAwIC8qIEFUQVBJIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgbklSUV9BVEFQSV9FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIElSUV9DQU4xX0VSUiAgMHg0MDAwMDAwMCAvKiBDQU4xIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgIG5JUlFfQ0FOMV9FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgSVJRX0RNQVIwX0VSUiAgMHg4MDAwMDAwMCAvKiBETUFSMCBPdmVyZmxvdyBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgIG5JUlFfRE1BUjBfRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIElSUV9ETUFSMV9FUlIgIDB4ODAwMDAwMDAgLyogRE1BUjEgT3ZlcmZsb3cgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICBuSVJRX0RNQVIxX0VSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgSVJRX0RNQVIwICAweDgwMDAwMDAwIC8qIERNQVIwIEJsb2NrICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5JUlFfRE1BUjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIElSUV9ETUFSMSAgMHg4MDAwMDAwMCAvKiBETUFSMSBCbG9jayAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuSVJRX0RNQVIxICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU0lDX0lXUjIsIFNJQ19JTUFTSzIsIFNJQ19JU1IyICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgIElSUV9ETUExNSAgMHgxICAgICAgICAvKiBETUEgQ2hhbm5lbCAxNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuSVJRX0RNQTE1ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBJUlFfRE1BMTYgIDB4MiAgICAgICAgLyogRE1BIENoYW5uZWwgMTYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbklSUV9ETUExNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgSVJRX0RNQTE3ICAweDQgICAgICAgIC8qIERNQSBDaGFubmVsIDE3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5JUlFfRE1BMTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIElSUV9ETUEyMiAgMHg4ICAgICAgICAvKiBETUEgQ2hhbm5lbCAyMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuSVJRX0RNQTIyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIElSUV9DTlQgIDB4MTAgICAgICAgLyogQ291bnRlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5JUlFfQ05UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIElSUV9LRVkgIDB4MjAgICAgICAgLyogS2V5cGFkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbklSUV9LRVkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICBJUlFfQ0FOMV9SWCAgMHg0MCAgICAgICAvKiBDQU4xIFJlY2VpdmUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5JUlFfQ0FOMV9SWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIElSUV9DQU4xX1RYICAweDgwICAgICAgIC8qIENBTjEgVHJhbnNtaXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5JUlFfQ0FOMV9UWCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBJUlFfU0RIX01BU0swICAweDEwMCAgICAgIC8qIFNESCBNYXNrIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICBuSVJRX1NESF9NQVNLMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICBJUlFfU0RIX01BU0sxICAweDIwMCAgICAgIC8qIFNESCBNYXNrIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICBuSVJRX1NESF9NQVNLMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgSVJRX1VTQl9FSU5UICAweDQwMCAgICAgIC8qIFVTQiBFeGNlcHRpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgbklSUV9VU0JfRUlOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgSVJRX1VTQl9JTlQwICAweDgwMCAgICAgIC8qIFVTQiBJbnRlcnJ1cHQgMCAqLworI2RlZmluZSAgICAgICAgICAgICBuSVJRX1VTQl9JTlQwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBJUlFfVVNCX0lOVDEgIDB4MTAwMCAgICAgLyogVVNCIEludGVycnVwdCAxICovCisjZGVmaW5lICAgICAgICAgICAgIG5JUlFfVVNCX0lOVDEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIElSUV9VU0JfSU5UMiAgMHgyMDAwICAgICAvKiBVU0IgSW50ZXJydXB0IDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbklSUV9VU0JfSU5UMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgIElSUV9VU0JfRE1BSU5UICAweDQwMDAgICAgIC8qIFVTQiBETUEgKi8KKyNkZWZpbmUgICAgICAgICAgIG5JUlFfVVNCX0RNQUlOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJUlFfT1RQU0VDICAweDgwMDAgICAgIC8qIE9UUCBBY2Nlc3MgQ29tcGxldGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSVJRX09UUFNFQyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJUlFfVElNRVIwICAweDQwMDAwMCAgIC8qIFRpbWVyIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSVJRX1RJTUVSMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJUlFfVElNRVIxICAweDgwMDAwMCAgIC8qIFRpbWVyIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSVJRX1RJTUVSMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJUlFfVElNRVIyICAweDEwMDAwMDAgIC8qIFRpbWVyIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSVJRX1RJTUVSMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJUlFfVElNRVIzICAweDIwMDAwMDAgIC8qIFRpbWVyIDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSVJRX1RJTUVSMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJUlFfVElNRVI0ICAweDQwMDAwMDAgIC8qIFRpbWVyIDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSVJRX1RJTUVSNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJUlFfVElNRVI1ICAweDgwMDAwMDAgIC8qIFRpbWVyIDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSVJRX1RJTUVSNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJUlFfVElNRVI2ICAweDEwMDAwMDAwIC8qIFRpbWVyIDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSVJRX1RJTUVSNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBJUlFfVElNRVI3ICAweDIwMDAwMDAwIC8qIFRpbWVyIDcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuSVJRX1RJTUVSNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgSVJRX1BJTlQyICAweDQwMDAwMDAwIC8qIFBpbiBJbnRlcnJ1cHQgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuSVJRX1BJTlQyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBJUlFfUElOVDMgIDB4ODAwMDAwMDAgLyogUGluIEludGVycnVwdCAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5JUlFfUElOVDMgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBETUF4X0NPTkZJRywgTURNQV9TeF9DT05GSUcsIE1ETUFfRHhfQ09ORklHICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBETUFFTiAgMHgxICAgICAgICAvKiBETUEgQ2hhbm5lbCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5ETUFFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgV05SICAweDIgICAgICAgIC8qIERNQSBEaXJlY3Rpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbldOUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgV0RTSVpFICAweGMgICAgICAgIC8qIFRyYW5zZmVyIFdvcmQgU2l6ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQTJEICAweDEwICAgICAgIC8qIERNQSBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRE1BMkQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUkVTVEFSVCAgMHgyMCAgICAgICAvKiBXb3JrIFVuaXQgVHJhbnNpdGlvbnMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuUkVTVEFSVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRElfU0VMICAweDQwICAgICAgIC8qIERhdGEgSW50ZXJydXB0IFRpbWluZyBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkRJX1NFTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERJX0VOICAweDgwICAgICAgIC8qIERhdGEgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkRJX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBORFNJWkUgIDB4ZjAwICAgICAgLyogRmxleCBEZXNjcmlwdG9yIFNpemUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BRkxPVyAgMHhmMDAwICAgICAvKiBOZXh0IE9wZXJhdGlvbiAqLworCisvKiBCaXQgbWFza3MgZm9yIERNQXhfSVJRX1NUQVRVUywgTURNQV9TeF9JUlFfU1RBVFVTLCBNRE1BX0R4X0lSUV9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIERNQV9ET05FICAweDEgICAgICAgIC8qIERNQSBDb21wbGV0aW9uIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5ETUFfRE9ORSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBETUFfRVJSICAweDIgICAgICAgIC8qIERNQSBFcnJvciBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRNQV9FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERGRVRDSCAgMHg0ICAgICAgICAvKiBETUEgRGVzY3JpcHRvciBGZXRjaCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuREZFVENIICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQV9SVU4gIDB4OCAgICAgICAgLyogRE1BIENoYW5uZWwgUnVubmluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5ETUFfUlVOICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgRE1BeF9QRVJJUEhFUkFMX01BUCwgTURNQV9TeF9JUlFfU1RBVFVTLCBNRE1BX0R4X0lSUV9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENUWVBFICAweDQwICAgICAgIC8qIERNQSBDaGFubmVsIFR5cGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DVFlQRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQTUFQICAweGYwMDAgICAgIC8qIFBlcmlwaGVyYWwgTWFwcGVkIFRvIFRoaXMgQ2hhbm5lbCAqLworCisvKiBCaXQgbWFza3MgZm9yIERNQUN4X1RDUEVSICovCisKKyNkZWZpbmUgICAgICAgIERDQl9UUkFGRklDX1BFUklPRCAgMHhmICAgICAgICAvKiBEQ0IgVHJhZmZpYyBDb250cm9sIFBlcmlvZCAqLworI2RlZmluZSAgICAgICAgREVCX1RSQUZGSUNfUEVSSU9EICAweGYwICAgICAgIC8qIERFQiBUcmFmZmljIENvbnRyb2wgUGVyaW9kICovCisjZGVmaW5lICAgICAgICBEQUJfVFJBRkZJQ19QRVJJT0QgIDB4NzAwICAgICAgLyogREFCIFRyYWZmaWMgQ29udHJvbCBQZXJpb2QgKi8KKyNkZWZpbmUgICBNRE1BX1JPVU5EX1JPQklOX1BFUklPRCAgMHhmODAwICAgICAvKiBNRE1BIFJvdW5kIFJvYmluIFBlcmlvZCAqLworCisvKiBCaXQgbWFza3MgZm9yIERNQUN4X1RDQ05UICovCisKKyNkZWZpbmUgICAgICAgICBEQ0JfVFJBRkZJQ19DT1VOVCAgMHhmICAgICAgICAvKiBEQ0IgVHJhZmZpYyBDb250cm9sIENvdW50ICovCisjZGVmaW5lICAgICAgICAgREVCX1RSQUZGSUNfQ09VTlQgIDB4ZjAgICAgICAgLyogREVCIFRyYWZmaWMgQ29udHJvbCBDb3VudCAqLworI2RlZmluZSAgICAgICAgIERBQl9UUkFGRklDX0NPVU5UICAweDcwMCAgICAgIC8qIERBQiBUcmFmZmljIENvbnRyb2wgQ291bnQgKi8KKyNkZWZpbmUgICAgTURNQV9ST1VORF9ST0JJTl9DT1VOVCAgMHhmODAwICAgICAvKiBNRE1BIFJvdW5kIFJvYmluIENvdW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRE1BQzFfUEVSSU1VWCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFBNVVhTREggIDB4MSAgICAgICAgLyogUGVyaXBoZXJhbCBTZWxlY3QgZm9yIERNQTIyIGNoYW5uZWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuUE1VWFNESCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEVCSVVfQU1HQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEFNQ0tFTiAgMHgxICAgICAgICAvKiBBc3luYyBNZW1vcnkgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5BTUNLRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBBTUJFTiAgMHhlICAgICAgICAvKiBBc3luYyBiYW5rIGVuYWJsZSAqLworCisvKiBCaXQgbWFza3MgZm9yIEVCSVVfQU1CQ1RMMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEIwUkRZRU4gIDB4MSAgICAgICAgLyogQmFuayAwIEFSRFkgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkIwUkRZRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBCMFJEWVBPTCAgMHgyICAgICAgICAvKiBCYW5rIDAgQVJEWSBQb2xhcml0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkIwUkRZUE9MICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEIwVFQgIDB4YyAgICAgICAgLyogQmFuayAwIHRyYW5zaXRpb24gdGltZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCMFNUICAweDMwICAgICAgIC8qIEJhbmsgMCBTZXR1cCB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEIwSFQgIDB4YzAgICAgICAgLyogQmFuayAwIEhvbGQgdGltZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEIwUkFUICAweGYwMCAgICAgIC8qIEJhbmsgMCBSZWFkIGFjY2VzcyB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQjBXQVQgIDB4ZjAwMCAgICAgLyogQmFuayAwIHdyaXRlIGFjY2VzcyB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEIxUkRZRU4gIDB4MTAwMDAgICAgLyogQmFuayAxIEFSRFkgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkIxUkRZRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBCMVJEWVBPTCAgMHgyMDAwMCAgICAvKiBCYW5rIDEgQVJEWSBQb2xhcml0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkIxUkRZUE9MICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEIxVFQgIDB4YzAwMDAgICAgLyogQmFuayAxIHRyYW5zaXRpb24gdGltZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCMVNUICAweDMwMDAwMCAgIC8qIEJhbmsgMSBTZXR1cCB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEIxSFQgIDB4YzAwMDAwICAgLyogQmFuayAxIEhvbGQgdGltZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEIxUkFUICAweGYwMDAwMDAgIC8qIEJhbmsgMSBSZWFkIGFjY2VzcyB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQjFXQVQgIDB4ZjAwMDAwMDAgLyogQmFuayAxIHdyaXRlIGFjY2VzcyB0aW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRUJJVV9BTUJDVEwxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQjJSRFlFTiAgMHgxICAgICAgICAvKiBCYW5rIDIgQVJEWSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQjJSRFlFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEIyUkRZUE9MICAweDIgICAgICAgIC8qIEJhbmsgMiBBUkRZIFBvbGFyaXR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQjJSRFlQT0wgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQjJUVCAgMHhjICAgICAgICAvKiBCYW5rIDIgdHJhbnNpdGlvbiB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEIyU1QgIDB4MzAgICAgICAgLyogQmFuayAyIFNldHVwIHRpbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQjJIVCAgMHhjMCAgICAgICAvKiBCYW5rIDIgSG9sZCB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQjJSQVQgIDB4ZjAwICAgICAgLyogQmFuayAyIFJlYWQgYWNjZXNzIHRpbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBCMldBVCAgMHhmMDAwICAgICAvKiBCYW5rIDIgd3JpdGUgYWNjZXNzIHRpbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQjNSRFlFTiAgMHgxMDAwMCAgICAvKiBCYW5rIDMgQVJEWSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQjNSRFlFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEIzUkRZUE9MICAweDIwMDAwICAgIC8qIEJhbmsgMyBBUkRZIFBvbGFyaXR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQjNSRFlQT0wgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQjNUVCAgMHhjMDAwMCAgICAvKiBCYW5rIDMgdHJhbnNpdGlvbiB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEIzU1QgIDB4MzAwMDAwICAgLyogQmFuayAzIFNldHVwIHRpbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQjNIVCAgMHhjMDAwMDAgICAvKiBCYW5rIDMgSG9sZCB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQjNSQVQgIDB4ZjAwMDAwMCAgLyogQmFuayAzIFJlYWQgYWNjZXNzIHRpbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBCM1dBVCAgMHhmMDAwMDAwMCAvKiBCYW5rIDMgd3JpdGUgYWNjZXNzIHRpbWUgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX01CU0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQU1TQjBDVEwgIDB4MyAgICAgICAgLyogQXN5bmMgTWVtb3J5IEJhbmsgMCBzZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBBTVNCMUNUTCAgMHhjICAgICAgICAvKiBBc3luYyBNZW1vcnkgQmFuayAxIHNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEFNU0IyQ1RMICAweDMwICAgICAgIC8qIEFzeW5jIE1lbW9yeSBCYW5rIDIgc2VsZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQU1TQjNDVEwgIDB4YzAgICAgICAgLyogQXN5bmMgTWVtb3J5IEJhbmsgMyBzZWxlY3QgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX01PREUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQjBNT0RFICAweDMgICAgICAgIC8qIEFzeW5jIE1lbW9yeSBCYW5rIDAgQWNjZXNzIE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEIxTU9ERSAgMHhjICAgICAgICAvKiBBc3luYyBNZW1vcnkgQmFuayAxIEFjY2VzcyBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBCMk1PREUgIDB4MzAgICAgICAgLyogQXN5bmMgTWVtb3J5IEJhbmsgMiBBY2Nlc3MgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQjNNT0RFICAweGMwICAgICAgIC8qIEFzeW5jIE1lbW9yeSBCYW5rIDMgQWNjZXNzIE1vZGUgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0ZDVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIFRFU1RTRVRMT0NLICAweDEgICAgICAgIC8qIFRlc3Qgc2V0IGxvY2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5URVNUU0VUTE9DSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCQ0xLICAweDYgICAgICAgIC8qIEJ1cnN0IGNsb2NrIGZyZXF1ZW5jeSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQR1dTICAweDM4ICAgICAgIC8qIFBhZ2Ugd2FpdCBzdGF0ZXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUEdTWiAgMHg0MCAgICAgICAvKiBQYWdlIHNpemUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUEdTWiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSRERMICAweDM4MCAgICAgIC8qIFJlYWQgZGF0YSBkZWxheSAqLworCisvKiBCaXQgbWFza3MgZm9yIEVCSVVfQVJCU1RBVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEFSQlNUQVQgIDB4MSAgICAgICAgLyogQXJiaXRyYXRpb24gc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkFSQlNUQVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJHU1RBVCAgMHgyICAgICAgICAvKiBCdXMgZ3JhbnQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5CR1NUQVQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkNUTDAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSRUZJICAweDNmZmYgICAgIC8qIFJlZnJlc2ggSW50ZXJ2YWwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFJGQyAgMHgzYzAwMCAgICAvKiBBdXRvLXJlZnJlc2ggY29tbWFuZCBwZXJpb2QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRSUCAgMHgzYzAwMDAgICAvKiBQcmUgY2hhcmdlLXRvLWFjdGl2ZSBjb21tYW5kIHBlcmlvZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUUkFTICAweDNjMDAwMDAgIC8qIE1pbiBBY3RpdmUtdG8tcHJlIGNoYXJnZSB0aW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUUkMgIDB4M2MwMDAwMDAgLyogQWN0aXZlLXRvLWFjdGl2ZSB0aW1lICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJDVEwxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFJDRCAgMHhmICAgICAgICAvKiBBY3RpdmUtdG8tUmVhZC93cml0ZSBkZWxheSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTVJEICAweGYwICAgICAgIC8qIE1vZGUgcmVnaXN0ZXIgc2V0IHRvIGFjdGl2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVFdSICAweDMwMCAgICAgIC8qIFdyaXRlIFJlY292ZXJ5IHRpbWUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBERFJEQVRXSURUSCAgMHgzMDAwICAgICAvKiBERFIgZGF0YSB3aWR0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEVYVEJBTktTICAweGMwMDAgICAgIC8qIEV4dGVybmFsIGJhbmtzICovCisjZGVmaW5lICAgICAgICAgICAgICAgRERSREVWV0lEVEggIDB4MzAwMDAgICAgLyogRERSIGRldmljZSB3aWR0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBERFJERVZTSVpFICAweGMwMDAwICAgIC8qIEREUiBkZXZpY2Ugc2l6ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRXV1RSICAweGYwMDAwMDAwIC8qIFdyaXRlLXRvLXJlYWQgZGVsYXkgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkNUTDIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgIEJVUlNUTEVOR1RIICAweDcgICAgICAgIC8qIEJ1cnN0IGxlbmd0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBDQVNMQVRFTkNZICAweDcwICAgICAgIC8qIENBUyBsYXRlbmN5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRExMUkVTRVQgIDB4MTAwICAgICAgLyogRExMIFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRExMUkVTRVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUkVHRSAgMHgxMDAwICAgICAvKiBSZWdpc3RlciBtb2RlIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5SRUdFICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJDVEwzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUEFTUiAgMHg3ICAgICAgICAvKiBQYXJ0aWFsIGFycmF5IHNlbGYtcmVmcmVzaCAqLworCisvKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSUVVFICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgREVCMV9QRkxFTiAgMHgzICAgICAgICAvKiBQcmUgZmV0Y2ggbGVuZ3RoIGZvciBERUIxIGFjY2Vzc2VzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIERFQjJfUEZMRU4gIDB4YyAgICAgICAgLyogUHJlIGZldGNoIGxlbmd0aCBmb3IgREVCMiBhY2Nlc3NlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBERUIzX1BGTEVOICAweDMwICAgICAgIC8qIFByZSBmZXRjaCBsZW5ndGggZm9yIERFQjMgYWNjZXNzZXMgKi8KKyNkZWZpbmUgICAgICAgICAgREVCX0FSQl9QUklPUklUWSAgMHg3MDAgICAgICAvKiBBcmJpdHJhdGlvbiBiZXR3ZWVuIERFQiBidXNzZXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBERUIxX1VSR0VOVCAgMHgxMDAwICAgICAvKiBERUIxIFVyZ2VudCAqLworI2RlZmluZSAgICAgICAgICAgICAgbkRFQjFfVVJHRU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgREVCMl9VUkdFTlQgIDB4MjAwMCAgICAgLyogREVCMiBVcmdlbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5ERUIyX1VSR0VOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIERFQjNfVVJHRU5UICAweDQwMDAgICAgIC8qIERFQjMgVXJnZW50ICovCisjZGVmaW5lICAgICAgICAgICAgICBuREVCM19VUkdFTlQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBFQklVX0VSUk1TVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIERFQjFfRVJST1IgIDB4MSAgICAgICAgLyogREVCMSBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5ERUIxX0VSUk9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIERFQjJfRVJST1IgIDB4MiAgICAgICAgLyogREVCMiBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5ERUIyX0VSUk9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIERFQjNfRVJST1IgIDB4NCAgICAgICAgLyogREVCMyBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5ERUIzX0VSUk9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIENPUkVfRVJST1IgIDB4OCAgICAgICAgLyogQ29yZSBlcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5DT1JFX0VSUk9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIERFQl9NRVJST1IgIDB4MTAgICAgICAgLyogREVCMSBFcnJvciAoMm5kKSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5ERUJfTUVSUk9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgREVCMl9NRVJST1IgIDB4MjAgICAgICAgLyogREVCMiBFcnJvciAoMm5kKSAqLworI2RlZmluZSAgICAgICAgICAgICAgbkRFQjJfTUVSUk9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgREVCM19NRVJST1IgIDB4NDAgICAgICAgLyogREVCMyBFcnJvciAoMm5kKSAqLworI2RlZmluZSAgICAgICAgICAgICAgbkRFQjNfTUVSUk9SICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgQ09SRV9NRVJST1IgIDB4ODAgICAgICAgLyogQ29yZSBFcnJvciAoMm5kKSAqLworI2RlZmluZSAgICAgICAgICAgICAgbkNPUkVfTUVSUk9SICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgRUJJVV9FUlJBREQgKi8KKworI2RlZmluZSAgICAgICAgICAgICBFUlJPUl9BRERSRVNTICAweGZmZmZmZmZmIC8qIEVycm9yIEFkZHJlc3MgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX1JTVENUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBERFJTUkVTRVQgIDB4MSAgICAgICAgLyogRERSIHNvZnQgcmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkREUlNSRVNFVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIFBGVENIU1JFU0VUICAweDQgICAgICAgIC8qIEREUiBwcmVmZXRjaCByZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgblBGVENIU1JFU0VUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU1JSRVEgIDB4OCAgICAgICAgLyogU2VsZi1yZWZyZXNoIHJlcXVlc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5TUlJFUSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNSQUNLICAweDEwICAgICAgIC8qIFNlbGYtcmVmcmVzaCBhY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblNSQUNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIE1ERFJFTkFCTEUgIDB4MjAgICAgICAgLyogTW9iaWxlIEREUiBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuTUREUkVOQUJMRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQlJDMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJSQzAgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkJSQzEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCUkMxICAweGZmZmZmZmZmIC8qIENvdW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJCUkMyICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQlJDMiAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQlJDMyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJSQzMgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkJSQzQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCUkM0ICAweGZmZmZmZmZmIC8qIENvdW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJCUkM1ICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQlJDNSAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQlJDNiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJSQzYgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkJSQzcgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCUkM3ICAweGZmZmZmZmZmIC8qIENvdW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJCV0MwICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQldDMCAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQldDMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJXQzEgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkJXQzIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCV0MyICAweGZmZmZmZmZmIC8qIENvdW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJCV0MzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQldDMyAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQldDNCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJXQzQgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkJXQzUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBCV0M1ICAweGZmZmZmZmZmIC8qIENvdW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJCV0M2ICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQldDNiAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQldDNyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJXQzcgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkFDQ1QgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQ0NUICAweGZmZmZmZmZmIC8qIENvdW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJUQUNUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEVDVCAgMHhmZmZmZmZmZiAvKiBDb3VudCAqLworCisvKiBCaXQgbWFza3MgZm9yIEVCSVVfRERSQVJDVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFSQ1QgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkdDMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBHQzAgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkdDMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBHQzEgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkdDMiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBHQzIgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUkdDMyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBHQzMgIDB4ZmZmZmZmZmYgLyogQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBFQklVX0REUk1DRU4gKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICBCMFdDRU5BQkxFICAweDEgICAgICAgIC8qIEJhbmsgMCB3cml0ZSBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQjBXQ0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBCMVdDRU5BQkxFICAweDIgICAgICAgIC8qIEJhbmsgMSB3cml0ZSBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQjFXQ0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBCMldDRU5BQkxFICAweDQgICAgICAgIC8qIEJhbmsgMiB3cml0ZSBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQjJXQ0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBCM1dDRU5BQkxFICAweDggICAgICAgIC8qIEJhbmsgMyB3cml0ZSBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQjNXQ0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBCNFdDRU5BQkxFICAweDEwICAgICAgIC8qIEJhbmsgNCB3cml0ZSBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQjRXQ0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBCNVdDRU5BQkxFICAweDIwICAgICAgIC8qIEJhbmsgNSB3cml0ZSBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQjVXQ0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBCNldDRU5BQkxFICAweDQwICAgICAgIC8qIEJhbmsgNiB3cml0ZSBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQjZXQ0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBCN1dDRU5BQkxFICAweDgwICAgICAgIC8qIEJhbmsgNyB3cml0ZSBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQjdXQ0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBCMFJDRU5BQkxFICAweDEwMCAgICAgIC8qIEJhbmsgMCByZWFkIGNvdW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5CMFJDRU5BQkxFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEIxUkNFTkFCTEUgIDB4MjAwICAgICAgLyogQmFuayAxIHJlYWQgY291bnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkIxUkNFTkFCTEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgQjJSQ0VOQUJMRSAgMHg0MDAgICAgICAvKiBCYW5rIDIgcmVhZCBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQjJSQ0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBCM1JDRU5BQkxFICAweDgwMCAgICAgIC8qIEJhbmsgMyByZWFkIGNvdW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5CM1JDRU5BQkxFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEI0UkNFTkFCTEUgIDB4MTAwMCAgICAgLyogQmFuayA0IHJlYWQgY291bnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkI0UkNFTkFCTEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgQjVSQ0VOQUJMRSAgMHgyMDAwICAgICAvKiBCYW5rIDUgcmVhZCBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuQjVSQ0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBCNlJDRU5BQkxFICAweDQwMDAgICAgIC8qIEJhbmsgNiByZWFkIGNvdW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5CNlJDRU5BQkxFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEI3UkNFTkFCTEUgIDB4ODAwMCAgICAgLyogQmFuayA3IHJlYWQgY291bnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkI3UkNFTkFCTEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgUk9XQUNUQ0VOQUJMRSAgMHgxMDAwMCAgICAvKiBERFIgUm93IGFjdGl2YXRlIGNvdW50IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgIG5ST1dBQ1RDRU5BQkxFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIFJXVENFTkFCTEUgIDB4MjAwMDAgICAgLyogRERSIFIvVyBUdXJuIGFyb3VuZCBjb3VudCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuUldUQ0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgQVJDRU5BQkxFICAweDQwMDAwICAgIC8qIEREUiBBdXRvLXJlZnJlc2ggY291bnQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5BUkNFTkFCTEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEdDMEVOQUJMRSAgMHgxMDAwMDAgICAvKiBERFIgR3JhbnQgY291bnQgMCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkdDMEVOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgR0MxRU5BQkxFICAweDIwMDAwMCAgIC8qIEREUiBHcmFudCBjb3VudCAxIGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuR0MxRU5BQkxFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBHQzJFTkFCTEUgIDB4NDAwMDAwICAgLyogRERSIEdyYW50IGNvdW50IDIgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5HQzJFTkFCTEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEdDM0VOQUJMRSAgMHg4MDAwMDAgICAvKiBERFIgR3JhbnQgY291bnQgMyBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkdDM0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgR0NDT05UUk9MICAweDMwMDAwMDAgIC8qIEREUiBHcmFudCBDb3VudCBDb250cm9sICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRUJJVV9ERFJNQ0NMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENCMFdDT1VOVCAgMHgxICAgICAgICAvKiBDbGVhciB3cml0ZSBjb3VudCAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DQjBXQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENCMVdDT1VOVCAgMHgyICAgICAgICAvKiBDbGVhciB3cml0ZSBjb3VudCAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DQjFXQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENCMldDT1VOVCAgMHg0ICAgICAgICAvKiBDbGVhciB3cml0ZSBjb3VudCAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DQjJXQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENCM1dDT1VOVCAgMHg4ICAgICAgICAvKiBDbGVhciB3cml0ZSBjb3VudCAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DQjNXQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENCNFdDT1VOVCAgMHgxMCAgICAgICAvKiBDbGVhciB3cml0ZSBjb3VudCA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DQjRXQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENCNVdDT1VOVCAgMHgyMCAgICAgICAvKiBDbGVhciB3cml0ZSBjb3VudCA1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DQjVXQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENCNldDT1VOVCAgMHg0MCAgICAgICAvKiBDbGVhciB3cml0ZSBjb3VudCA2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DQjZXQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENCN1dDT1VOVCAgMHg4MCAgICAgICAvKiBDbGVhciB3cml0ZSBjb3VudCA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DQjdXQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDQlJDT1VOVCAgMHgxMDAgICAgICAvKiBDbGVhciByZWFkIGNvdW50IDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5DQlJDT1VOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgQ0IxUkNPVU5UICAweDIwMCAgICAgIC8qIENsZWFyIHJlYWQgY291bnQgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuQ0IxUkNPVU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQjJSQ09VTlQgIDB4NDAwICAgICAgLyogQ2xlYXIgcmVhZCBjb3VudCAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DQjJSQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENCM1JDT1VOVCAgMHg4MDAgICAgICAvKiBDbGVhciByZWFkIGNvdW50IDMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkNCM1JDT1VOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgQ0I0UkNPVU5UICAweDEwMDAgICAgIC8qIENsZWFyIHJlYWQgY291bnQgNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuQ0I0UkNPVU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQjVSQ09VTlQgIDB4MjAwMCAgICAgLyogQ2xlYXIgcmVhZCBjb3VudCA1ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DQjVSQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIENCNlJDT1VOVCAgMHg0MDAwICAgICAvKiBDbGVhciByZWFkIGNvdW50IDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkNCNlJDT1VOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgQ0I3UkNPVU5UICAweDgwMDAgICAgIC8qIENsZWFyIHJlYWQgY291bnQgNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuQ0I3UkNPVU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ1JBQ09VTlQgIDB4MTAwMDAgICAgLyogQ2xlYXIgcm93IGFjdGl2YXRpb24gY291bnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5DUkFDT1VOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBDUldUQUNPVU5UICAweDIwMDAwICAgIC8qIENsZWFyIFIvVyB0dXJuLWFyb3VuZCBjb3VudCAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5DUldUQUNPVU5UICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQ0FSQ09VTlQgIDB4NDAwMDAgICAgLyogQ2xlYXIgYXV0by1yZWZyZXNoIGNvdW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQ0FSQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDRzBDT1VOVCAgMHgxMDAwMDAgICAvKiBDbGVhciBncmFudCBjb3VudCAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQ0cwQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDRzFDT1VOVCAgMHgyMDAwMDAgICAvKiBDbGVhciBncmFudCBjb3VudCAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQ0cxQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDRzJDT1VOVCAgMHg0MDAwMDAgICAvKiBDbGVhciBncmFudCBjb3VudCAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQ0cyQ09VTlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBDRzNDT1VOVCAgMHg4MDAwMDAgICAvKiBDbGVhciBncmFudCBjb3VudCAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuQ0czQ09VTlQgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciAoUE9SVHggaXMgUE9SVEEgLSBQT1JUSikgaW5jbHVkZXMgUE9SVHhfRkVSLCBQT1JUeF9TRVQsIFBPUlR4X0NMRUFSLCBQT1JUeF9ESVJfU0VULCBQT1JUeF9ESVJfQ0xFQVIsIFBPUlR4X0lORU4gKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUHgwICAweDEgICAgICAgIC8qIEdQSU8gMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuUHgwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQeDEgIDB4MiAgICAgICAgLyogR1BJTyAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5QeDEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFB4MiAgMHg0ICAgICAgICAvKiBHUElPIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblB4MiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUHgzICAweDggICAgICAgIC8qIEdQSU8gMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuUHgzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQeDQgIDB4MTAgICAgICAgLyogR1BJTyA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5QeDQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFB4NSAgMHgyMCAgICAgICAvKiBHUElPIDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblB4NSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUHg2ICAweDQwICAgICAgIC8qIEdQSU8gNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuUHg2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBQeDcgIDB4ODAgICAgICAgLyogR1BJTyA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5QeDcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFB4OCAgMHgxMDAgICAgICAvKiBHUElPIDggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblB4OCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUHg5ICAweDIwMCAgICAgIC8qIEdQSU8gOSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuUHg5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFB4MTAgIDB4NDAwICAgICAgLyogR1BJTyAxMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5QeDEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFB4MTEgIDB4ODAwICAgICAgLyogR1BJTyAxMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5QeDExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFB4MTIgIDB4MTAwMCAgICAgLyogR1BJTyAxMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5QeDEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFB4MTMgIDB4MjAwMCAgICAgLyogR1BJTyAxMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5QeDEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFB4MTQgIDB4NDAwMCAgICAgLyogR1BJTyAxNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5QeDE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFB4MTUgIDB4ODAwMCAgICAgLyogR1BJTyAxNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5QeDE1ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgUE9SVEFfTVVYIC0gUE9SVEpfTVVYICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUHhNMCAgMHgzICAgICAgICAvKiBHUElPIE11eCAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFB4TTEgIDB4YyAgICAgICAgLyogR1BJTyBNdXggMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQeE0yICAweDMwICAgICAgIC8qIEdQSU8gTXV4IDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUHhNMyAgMHhjMCAgICAgICAvKiBHUElPIE11eCAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFB4TTQgIDB4MzAwICAgICAgLyogR1BJTyBNdXggNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQeE01ICAweGMwMCAgICAgIC8qIEdQSU8gTXV4IDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUHhNNiAgMHgzMDAwICAgICAvKiBHUElPIE11eCA2ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFB4TTcgIDB4YzAwMCAgICAgLyogR1BJTyBNdXggNyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQeE04ICAweDMwMDAwICAgIC8qIEdQSU8gTXV4IDggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUHhNOSAgMHhjMDAwMCAgICAvKiBHUElPIE11eCA5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUHhNMTAgIDB4MzAwMDAwICAgLyogR1BJTyBNdXggMTAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQeE0xMSAgMHhjMDAwMDAgICAvKiBHUElPIE11eCAxMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFB4TTEyICAweDMwMDAwMDAgIC8qIEdQSU8gTXV4IDEyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUHhNMTMgIDB4YzAwMDAwMCAgLyogR1BJTyBNdXggMTMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBQeE0xNCAgMHgzMDAwMDAwMCAvKiBHUElPIE11eCAxNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFB4TTE1ICAweGMwMDAwMDAwIC8qIEdQSU8gTXV4IDE1ICovCisKKworLyogQml0IG1hc2tzIGZvciBQSU5UeF9NQVNLX1NFVC9DTEVBUiwgUElOVHhfUkVRVUVTVCwgUElOVHhfTEFUQ0gsIFBJTlR4X0VER0VfU0VUL0NMRUFSLCBQSU5UeF9JTlZFUlRfU0VUL0NMRUFSLCBQSU5UeF9QSU5UU1RBVEUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgSUIwICAweDEgICAgICAgIC8qIEludGVycnVwdCBCaXQgMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuSUIwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBJQjEgIDB4MiAgICAgICAgLyogSW50ZXJydXB0IEJpdCAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5JQjEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIElCMiAgMHg0ICAgICAgICAvKiBJbnRlcnJ1cHQgQml0IDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbklCMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgSUIzICAweDggICAgICAgIC8qIEludGVycnVwdCBCaXQgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuSUIzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBJQjQgIDB4MTAgICAgICAgLyogSW50ZXJydXB0IEJpdCA0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5JQjQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIElCNSAgMHgyMCAgICAgICAvKiBJbnRlcnJ1cHQgQml0IDUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbklCNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgSUI2ICAweDQwICAgICAgIC8qIEludGVycnVwdCBCaXQgNiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuSUI2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBJQjcgIDB4ODAgICAgICAgLyogSW50ZXJydXB0IEJpdCA3ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5JQjcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIElCOCAgMHgxMDAgICAgICAvKiBJbnRlcnJ1cHQgQml0IDggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbklCOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgSUI5ICAweDIwMCAgICAgIC8qIEludGVycnVwdCBCaXQgOSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuSUI5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElCMTAgIDB4NDAwICAgICAgLyogSW50ZXJydXB0IEJpdCAxMCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5JQjEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElCMTEgIDB4ODAwICAgICAgLyogSW50ZXJydXB0IEJpdCAxMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5JQjExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElCMTIgIDB4MTAwMCAgICAgLyogSW50ZXJydXB0IEJpdCAxMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5JQjEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElCMTMgIDB4MjAwMCAgICAgLyogSW50ZXJydXB0IEJpdCAxMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5JQjEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElCMTQgIDB4NDAwMCAgICAgLyogSW50ZXJydXB0IEJpdCAxNCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5JQjE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElCMTUgIDB4ODAwMCAgICAgLyogSW50ZXJydXB0IEJpdCAxNSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5JQjE1ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVElNRVJ4X0NPTkZJRyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVE1PREUgIDB4MyAgICAgICAgLyogVGltZXIgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFBVTFNFX0hJICAweDQgICAgICAgIC8qIFB1bHNlIFBvbGFyaXR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUFVMU0VfSEkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgUEVSSU9EX0NOVCAgMHg4ICAgICAgICAvKiBQZXJpb2QgQ291bnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuUEVSSU9EX0NOVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBJUlFfRU5BICAweDEwICAgICAgIC8qIEludGVycnVwdCBSZXF1ZXN0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5JUlFfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTl9TRUwgIDB4MjAgICAgICAgLyogVGltZXIgSW5wdXQgU2VsZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblRJTl9TRUwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgT1VUX0RJUyAgMHg0MCAgICAgICAvKiBPdXRwdXQgUGFkIERpc2FibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuT1VUX0RJUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTEtfU0VMICAweDgwICAgICAgIC8qIFRpbWVyIENsb2NrIFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DTEtfU0VMICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBUT0dHTEVfSEkgIDB4MTAwICAgICAgLyogVG9nZ2xlIE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblRPR0dMRV9ISSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBFTVVfUlVOICAweDIwMCAgICAgIC8qIEVtdWxhdGlvbiBCZWhhdmlvciBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRU1VX1JVTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUlJfVFlQICAweGMwMDAgICAgIC8qIEVycm9yIFR5cGUgKi8KKworLyogQml0IG1hc2tzIGZvciBUSU1FUl9FTkFCTEUwICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVOMCAgMHgxICAgICAgICAvKiBUaW1lciAwIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNRU4wICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FTjEgIDB4MiAgICAgICAgLyogVGltZXIgMSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRJTUVOMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRU4yICAweDQgICAgICAgIC8qIFRpbWVyIDIgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5USU1FTjIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVOMyAgMHg4ICAgICAgICAvKiBUaW1lciAzIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNRU4zICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FTjQgIDB4MTAgICAgICAgLyogVGltZXIgNCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRJTUVONCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNRU41ICAweDIwICAgICAgIC8qIFRpbWVyIDUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5USU1FTjUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUVONiAgMHg0MCAgICAgICAvKiBUaW1lciA2IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNRU42ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1FTjcgIDB4ODAgICAgICAgLyogVGltZXIgNyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRJTUVONyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFRJTUVSX0RJU0FCTEUwICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRElTMCAgMHgxICAgICAgICAvKiBUaW1lciAwIERpc2FibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuVElNRElTMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1ESVMxICAweDIgICAgICAgIC8qIFRpbWVyIDEgRGlzYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5USU1ESVMxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTURJUzIgIDB4NCAgICAgICAgLyogVGltZXIgMiBEaXNhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblRJTURJUzIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRElTMyAgMHg4ICAgICAgICAvKiBUaW1lciAzIERpc2FibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuVElNRElTMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1ESVM0ICAweDEwICAgICAgIC8qIFRpbWVyIDQgRGlzYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5USU1ESVM0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRJTURJUzUgIDB4MjAgICAgICAgLyogVGltZXIgNSBEaXNhYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblRJTURJUzUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVElNRElTNiAgMHg0MCAgICAgICAvKiBUaW1lciA2IERpc2FibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuVElNRElTNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBUSU1ESVM3ICAweDgwICAgICAgIC8qIFRpbWVyIDcgRGlzYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5USU1ESVM3ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVElNRVJfU1RBVFVTMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1JTDAgIDB4MSAgICAgICAgLyogVGltZXIgMCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRJTUlMMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNSUwxICAweDIgICAgICAgIC8qIFRpbWVyIDEgSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5USU1JTDEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUlMMiAgMHg0ICAgICAgICAvKiBUaW1lciAyIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNSUwyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1JTDMgIDB4OCAgICAgICAgLyogVGltZXIgMyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRJTUlMMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgVE9WRl9FUlIwICAweDEwICAgICAgIC8qIFRpbWVyIDAgQ291bnRlciBPdmVyZmxvdyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuVE9WRl9FUlIwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBUT1ZGX0VSUjEgIDB4MjAgICAgICAgLyogVGltZXIgMSBDb3VudGVyIE92ZXJmbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5UT1ZGX0VSUjEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFRPVkZfRVJSMiAgMHg0MCAgICAgICAvKiBUaW1lciAyIENvdW50ZXIgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblRPVkZfRVJSMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgVE9WRl9FUlIzICAweDgwICAgICAgIC8qIFRpbWVyIDMgQ291bnRlciBPdmVyZmxvdyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuVE9WRl9FUlIzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJVTjAgIDB4MTAwMCAgICAgLyogVGltZXIgMCBTbGF2ZSBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJVTjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlVOMSAgMHgyMDAwICAgICAvKiBUaW1lciAxIFNsYXZlIEVuYWJsZSBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUlVOMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSVU4yICAweDQwMDAgICAgIC8qIFRpbWVyIDIgU2xhdmUgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSVU4yICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJVTjMgIDB4ODAwMCAgICAgLyogVGltZXIgMyBTbGF2ZSBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJVTjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUlMNCAgMHgxMDAwMCAgICAvKiBUaW1lciA0IEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNSUw0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUSU1JTDUgIDB4MjAwMDAgICAgLyogVGltZXIgNSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblRJTUlMNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVElNSUw2ICAweDQwMDAwICAgIC8qIFRpbWVyIDYgSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5USU1JTDYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRJTUlMNyAgMHg4MDAwMCAgICAvKiBUaW1lciA3IEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuVElNSUw3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBUT1ZGX0VSUjQgIDB4MTAwMDAwICAgLyogVGltZXIgNCBDb3VudGVyIE92ZXJmbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5UT1ZGX0VSUjQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFRPVkZfRVJSNSAgMHgyMDAwMDAgICAvKiBUaW1lciA1IENvdW50ZXIgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgblRPVkZfRVJSNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgVE9WRl9FUlI2ICAweDQwMDAwMCAgIC8qIFRpbWVyIDYgQ291bnRlciBPdmVyZmxvdyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuVE9WRl9FUlI2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBUT1ZGX0VSUjcgIDB4ODAwMDAwICAgLyogVGltZXIgNyBDb3VudGVyIE92ZXJmbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5UT1ZGX0VSUjcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlVONCAgMHgxMDAwMDAwMCAvKiBUaW1lciA0IFNsYXZlIEVuYWJsZSBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUlVONCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSVU41ICAweDIwMDAwMDAwIC8qIFRpbWVyIDUgU2xhdmUgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSVU41ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJVTjYgIDB4NDAwMDAwMDAgLyogVGltZXIgNiBTbGF2ZSBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJVTjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlVONyAgMHg4MDAwMDAwMCAvKiBUaW1lciA3IFNsYXZlIEVuYWJsZSBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUlVONyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFdET0dfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgV0RFViAgMHg2ICAgICAgICAvKiBXYXRjaGRvZyBFdmVudCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBXREVOICAweGZmMCAgICAgIC8qIFdhdGNoZG9nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBXRFJPICAweDgwMDAgICAgIC8qIFdhdGNoZG9nIFJvbGxlZCBPdmVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbldEUk8gIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDTlRfQ09ORklHICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQ05URSAgMHgxICAgICAgICAvKiBDb3VudGVyIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5DTlRFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERFQkUgIDB4MiAgICAgICAgLyogRGVib3VuY2UgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkRFQkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENER0lOViAgMHgxMCAgICAgICAvKiBDREcgUGluIFBvbGFyaXR5IEludmVydCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ0RHSU5WICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDVURJTlYgIDB4MjAgICAgICAgLyogQ1VEIFBpbiBQb2xhcml0eSBJbnZlcnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNVRElOViAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ1pNSU5WICAweDQwICAgICAgIC8qIENaTSBQaW4gUG9sYXJpdHkgSW52ZXJ0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DWk1JTlYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ05UTU9ERSAgMHg3MDAgICAgICAvKiBDb3VudGVyIE9wZXJhdGluZyBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFpNWkMgIDB4ODAwICAgICAgLyogQ1pNIFplcm9lcyBDb3VudGVyIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5aTVpDICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEJORE1PREUgIDB4MzAwMCAgICAgLyogQm91bmRhcnkgcmVnaXN0ZXIgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgSU5QRElTICAweDgwMDAgICAgIC8qIENVRyBhbmQgQ0RHIElucHV0IERpc2FibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbklOUERJUyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENOVF9JTUFTSyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElDSUUgIDB4MSAgICAgICAgLyogSWxsZWdhbCBHcmF5L0JpbmFyeSBDb2RlIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuSUNJRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVQ0lFICAweDIgICAgICAgIC8qIFVwIGNvdW50IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVUNJRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBEQ0lFICAweDQgICAgICAgIC8qIERvd24gY291bnQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5EQ0lFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNSU5DSUUgIDB4OCAgICAgICAgLyogTWluIENvdW50IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1JTkNJRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUFYQ0lFICAweDEwICAgICAgIC8qIE1heCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQVhDSUUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ09WMzFJRSAgMHgyMCAgICAgICAvKiBCaXQgMzEgT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DT1YzMUlFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENPVjE1SUUgIDB4NDAgICAgICAgLyogQml0IDE1IE92ZXJmbG93IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ09WMTVJRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDWkVST0lFICAweDgwICAgICAgIC8qIENvdW50IHRvIFplcm8gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DWkVST0lFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ1pNSUUgIDB4MTAwICAgICAgLyogQ1pNIFBpbiBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ1pNSUUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTUVJRSAgMHgyMDAgICAgICAvKiBDWk0gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ1pNRUlFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDWk1aSUUgIDB4NDAwICAgICAgLyogQ1pNIFplcm9lcyBDb3VudGVyIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNaTVpJRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENOVF9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBJQ0lJICAweDEgICAgICAgIC8qIElsbGVnYWwgR3JheS9CaW5hcnkgQ29kZSBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5JQ0lJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVDSUkgIDB4MiAgICAgICAgLyogVXAgY291bnQgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVUNJSSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBEQ0lJICAweDQgICAgICAgIC8qIERvd24gY291bnQgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuRENJSSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUlOQ0lJICAweDggICAgICAgIC8qIE1pbiBDb3VudCBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUlOQ0lJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQVhDSUkgIDB4MTAgICAgICAgLyogTWF4IENvdW50IEludGVycnVwdCBJZGVudGlmaWVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQVhDSUkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ09WMzFJSSAgMHgyMCAgICAgICAvKiBCaXQgMzEgT3ZlcmZsb3cgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ09WMzFJSSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBDT1YxNUlJICAweDQwICAgICAgIC8qIEJpdCAxNSBPdmVyZmxvdyBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DT1YxNUlJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENaRVJPSUkgIDB4ODAgICAgICAgLyogQ291bnQgdG8gWmVybyBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DWkVST0lJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ1pNSUkgIDB4MTAwICAgICAgLyogQ1pNIFBpbiBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNaTUlJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBDWk1FSUkgIDB4MjAwICAgICAgLyogQ1pNIEVycm9yIEludGVycnVwdCBJZGVudGlmaWVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DWk1FSUkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTVpJSSAgMHg0MDAgICAgICAvKiBDWk0gWmVyb2VzIENvdW50ZXIgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNaTVpJSSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENOVF9DT01NQU5EICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFcxTENOVCAgMHhmICAgICAgICAvKiBMb2FkIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFcxTE1JTiAgMHhmMCAgICAgICAvKiBMb2FkIE1pbiBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVzFMTUFYICAweGYwMCAgICAgIC8qIExvYWQgTWF4IFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVzFaTU9OQ0UgIDB4MTAwMCAgICAgLyogRW5hYmxlIENaTSBDbGVhciBDb3VudGVyIE9uY2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5XMVpNT05DRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENOVF9ERUJPVU5DRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBEUFJFU0NBTEUgIDB4ZiAgICAgICAgLyogTG9hZCBDb3VudGVyIFJlZ2lzdGVyICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUlRDX1NUQVQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNPTkRTICAweDNmICAgICAgIC8qIFNlY29uZHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUlOVVRFUyAgMHhmYzAgICAgICAvKiBNaW51dGVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgSE9VUlMgIDB4MWYwMDAgICAgLyogSG91cnMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBEQVlfQ09VTlRFUiAgMHhmZmZlMDAwMCAvKiBEYXkgQ291bnRlciAqLworCisvKiBCaXQgbWFza3MgZm9yIFJUQ19JQ1RMICovCisKKyNkZWZpbmUgU1RPUFdBVENIX0lOVEVSUlVQVF9FTkFCTEUgIDB4MSAgICAgICAgLyogU3RvcHdhdGNoIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgblNUT1BXQVRDSF9JTlRFUlJVUFRfRU5BQkxFICAweDAgICAgICAgCisjZGVmaW5lICAgIEFMQVJNX0lOVEVSUlVQVF9FTkFCTEUgIDB4MiAgICAgICAgLyogQWxhcm0gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgIG5BTEFSTV9JTlRFUlJVUFRfRU5BQkxFICAweDAgICAgICAgCisjZGVmaW5lICBTRUNPTkRTX0lOVEVSUlVQVF9FTkFCTEUgIDB4NCAgICAgICAgLyogU2Vjb25kcyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIG5TRUNPTkRTX0lOVEVSUlVQVF9FTkFCTEUgIDB4MCAgICAgICAKKyNkZWZpbmUgIE1JTlVURVNfSU5URVJSVVBUX0VOQUJMRSAgMHg4ICAgICAgICAvKiBNaW51dGVzIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgbk1JTlVURVNfSU5URVJSVVBUX0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSAgICBIT1VSU19JTlRFUlJVUFRfRU5BQkxFICAweDEwICAgICAgIC8qIEhvdXJzIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgICBuSE9VUlNfSU5URVJSVVBUX0VOQUJMRSAgMHgwICAgICAgIAorI2RlZmluZSBUV0VOVFlfRk9VUl9IT1VSU19JTlRFUlJVUFRfRU5BQkxFICAweDIwICAgICAgIC8qIDI0IEhvdXJzIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgblRXRU5UWV9GT1VSX0hPVVJTX0lOVEVSUlVQVF9FTkFCTEUgIDB4MCAgICAgICAKKyNkZWZpbmUgREFZX0FMQVJNX0lOVEVSUlVQVF9FTkFCTEUgIDB4NDAgICAgICAgLyogRGF5IEFsYXJtIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgbkRBWV9BTEFSTV9JTlRFUlJVUFRfRU5BQkxFICAweDAgICAgICAgCisjZGVmaW5lIFdSSVRFX0NPTVBMRVRFX0lOVEVSUlVQVF9FTkFCTEUgIDB4ODAwMCAgICAgLyogV3JpdGUgQ29tcGxldGUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBuV1JJVEVfQ09NUExFVEVfSU5URVJSVVBUX0VOQUJMRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFJUQ19JU1RBVCAqLworCisjZGVmaW5lICAgICAgU1RPUFdBVENIX0VWRU5UX0ZMQUcgIDB4MSAgICAgICAgLyogU3RvcHdhdGNoIEV2ZW50IEZsYWcgKi8KKyNkZWZpbmUgICAgIG5TVE9QV0FUQ0hfRVZFTlRfRkxBRyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICBBTEFSTV9FVkVOVF9GTEFHICAweDIgICAgICAgIC8qIEFsYXJtIEV2ZW50IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICBuQUxBUk1fRVZFTlRfRkxBRyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgU0VDT05EU19FVkVOVF9GTEFHICAweDQgICAgICAgIC8qIFNlY29uZHMgRXZlbnQgRmxhZyAqLworI2RlZmluZSAgICAgICBuU0VDT05EU19FVkVOVF9GTEFHICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICBNSU5VVEVTX0VWRU5UX0ZMQUcgIDB4OCAgICAgICAgLyogTWludXRlcyBFdmVudCBGbGFnICovCisjZGVmaW5lICAgICAgIG5NSU5VVEVTX0VWRU5UX0ZMQUcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgSE9VUlNfRVZFTlRfRkxBRyAgMHgxMCAgICAgICAvKiBIb3VycyBFdmVudCBGbGFnICovCisjZGVmaW5lICAgICAgICAgbkhPVVJTX0VWRU5UX0ZMQUcgIDB4MCAgICAgICAKKyNkZWZpbmUgVFdFTlRZX0ZPVVJfSE9VUlNfRVZFTlRfRkxBRyAgMHgyMCAgICAgICAvKiAyNCBIb3VycyBFdmVudCBGbGFnICovCisjZGVmaW5lIG5UV0VOVFlfRk9VUl9IT1VSU19FVkVOVF9GTEFHICAweDAgICAgICAgCisjZGVmaW5lICAgICAgREFZX0FMQVJNX0VWRU5UX0ZMQUcgIDB4NDAgICAgICAgLyogRGF5IEFsYXJtIEV2ZW50IEZsYWcgKi8KKyNkZWZpbmUgICAgIG5EQVlfQUxBUk1fRVZFTlRfRkxBRyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgV1JJVEVfUEVORElOR19fU1RBVFVTICAweDQwMDAgICAgIC8qIFdyaXRlIFBlbmRpbmcgIFN0YXR1cyAqLworI2RlZmluZSAgICBuV1JJVEVfUEVORElOR19fU1RBVFVTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgV1JJVEVfQ09NUExFVEUgIDB4ODAwMCAgICAgLyogV3JpdGUgQ29tcGxldGUgKi8KKyNkZWZpbmUgICAgICAgICAgIG5XUklURV9DT01QTEVURSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFJUQ19TV0NOVCAqLworCisjZGVmaW5lICAgICAgICAgICBTVE9QV0FUQ0hfQ09VTlQgIDB4ZmZmZiAgICAgLyogU3RvcHdhdGNoIENvdW50ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUlRDX0FMQVJNICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDT05EUyAgMHgzZiAgICAgICAvKiBTZWNvbmRzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1JTlVURVMgIDB4ZmMwICAgICAgLyogTWludXRlcyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEhPVVJTICAweDFmMDAwICAgIC8qIEhvdXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBEQVkgIDB4ZmZmZTAwMDAgLyogRGF5ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUlRDX1BSRU4gKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQUkVOICAweDEgICAgICAgIC8qIFByZXNjYWxlciBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUFJFTiAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE9UUF9DT05UUk9MICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgRlVTRV9GQUREUiAgMHgxZmYgICAgICAvKiBPVFAvRnVzZSBBZGRyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEZJRU4gIDB4ODAwICAgICAgLyogT1RQL0Z1c2UgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5GSUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRlRFU1RERUMgIDB4MTAwMCAgICAgLyogT1RQL0Z1c2UgVGVzdCBEZWNvZGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRlRFU1RERUMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRldSVEVTVCAgMHgyMDAwICAgICAvKiBPVFAvRnVzZSBXcml0ZSBUZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkZXUlRFU1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBGUkRFTiAgMHg0MDAwICAgICAvKiBPVFAvRnVzZSBSZWFkIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkZSREVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRldSRU4gIDB4ODAwMCAgICAgLyogT1RQL0Z1c2UgV3JpdGUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRldSRU4gIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBPVFBfQkVOICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRkJFTiAgMHhmZmZmICAgICAvKiBPVFAvRnVzZSBCeXRlIEVuYWJsZSAqLworCisvKiBCaXQgbWFza3MgZm9yIE9UUF9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEZDT01QICAweDEgICAgICAgIC8qIE9UUC9GdXNlIEFjY2VzcyBDb21wbGV0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkZDT01QICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBGRVJST1IgIDB4MiAgICAgICAgLyogT1RQL0Z1c2UgQWNjZXNzIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5GRVJST1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNTVJHTE9BRCAgMHgxMCAgICAgICAvKiBNZW1vcnkgTWFwcGVkIFJlZ2lzdGVyIEdhc2tldCBMb2FkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuTU1SR0xPQUQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBNTVJHTE9DSyAgMHgyMCAgICAgICAvKiBNZW1vcnkgTWFwcGVkIFJlZ2lzdGVyIEdhc2tldCBMb2NrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuTU1SR0xPQ0sgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEZQR01FTiAgMHg0MCAgICAgICAvKiBPVFAvRnVzZSBQcm9ncmFtIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRlBHTUVOICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgT1RQX1RJTUlORyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFVTRUNESVYgIDB4ZmYgICAgICAgLyogTWljcm8gU2Vjb25kIERpdmlkZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUkVBREFDQyAgMHg3ZjAwICAgICAvKiBSZWFkIEFjY2VzcyBUaW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENQVU1QUkwgIDB4MzgwMDAgICAgLyogQ2hhcmdlIFB1bXAgUmVsZWFzZSBUaW1lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIENQVU1QU1UgIDB4YzAwMDAgICAgLyogQ2hhcmdlIFB1bXAgU2V0dXAgVGltZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBDUFVNUEhEICAweGYwMDAwMCAgIC8qIENoYXJnZSBQdW1wIEhvbGQgVGltZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBQR01USU1FICAweGZmMDAwMDAwIC8qIFByb2dyYW0gVGltZSAqLworCisvKiBCaXQgbWFza3MgZm9yIFNFQ1VSRV9TWVNTV1QgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBFTVVEQUJMICAweDEgICAgICAgIC8qIEVtdWxhdGlvbiBEaXNhYmxlLiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FTVVEQUJMICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFJTVERBQkwgIDB4MiAgICAgICAgLyogUmVzZXQgRGlzYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5SU1REQUJMICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEwxSURBQkwgIDB4MWMgICAgICAgLyogTDEgSW5zdHJ1Y3Rpb24gTWVtb3J5IERpc2FibGUuICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTDFEQURBQkwgIDB4ZTAgICAgICAgLyogTDEgRGF0YSBCYW5rIEEgTWVtb3J5IERpc2FibGUuICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgTDFEQkRBQkwgIDB4NzAwICAgICAgLyogTDEgRGF0YSBCYW5rIEIgTWVtb3J5IERpc2FibGUuICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERNQTBPVlIgIDB4ODAwICAgICAgLyogRE1BMCBNZW1vcnkgQWNjZXNzIE92ZXJyaWRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRNQTBPVlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BMU9WUiAgMHgxMDAwICAgICAvKiBETUExIE1lbW9yeSBBY2Nlc3MgT3ZlcnJpZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRE1BMU9WUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRU1VT1ZSICAweDQwMDAgICAgIC8qIEVtdWxhdGlvbiBPdmVycmlkZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRU1VT1ZSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBPVFBTRU4gIDB4ODAwMCAgICAgLyogT1RQIFNlY3JldHMgRW5hYmxlLiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuT1RQU0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBMMkRBQkwgIDB4NzAwMDAgICAgLyogTDIgTWVtb3J5IERpc2FibGUuICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU0VDVVJFX0NPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkUwICAweDEgICAgICAgIC8qIFNFQ1VSRSAwICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblNFQ1VSRTAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDVVJFMSAgMHgyICAgICAgICAvKiBTRUNVUkUgMSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TRUNVUkUxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNFQ1VSRTIgIDB4NCAgICAgICAgLyogU0VDVVJFIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuU0VDVVJFMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNVUkUzICAweDggICAgICAgIC8qIFNFQ1VSRSAzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblNFQ1VSRTMgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBTRUNVUkVfU1RBVFVTICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDTU9ERSAgMHgzICAgICAgICAvKiBTZWN1cmVkIE1vZGUgQ29udHJvbCBTdGF0ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTk1JICAweDQgICAgICAgIC8qIE5vbiBNYXNrYWJsZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbk5NSSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBBRlZBTElEICAweDggICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIEZpcm13YXJlIFZhbGlkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkFGVkFMSUQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEFGRVhJVCAgMHgxMCAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBGaXJtd2FyZSBFeGl0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5BRkVYSVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0VDU1RBVCAgMHhlMCAgICAgICAvKiBTZWN1cmUgU3RhdHVzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUExMX0RJViAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENTRUwgIDB4MzAgICAgICAgLyogQ29yZSBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1NFTCAgMHhmICAgICAgICAvKiBTeXN0ZW0gU2VsZWN0ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgUExMX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1TRUwgIDB4N2UwMCAgICAgLyogTXVsdGlwbGllciBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJZUEFTUyAgMHgxMDAgICAgICAvKiBQTEwgQnlwYXNzIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQllQQVNTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICBPVVRQVVRfREVMQVkgIDB4ODAgICAgICAgLyogRXh0ZXJuYWwgTWVtb3J5IE91dHB1dCBEZWxheSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk9VVFBVVF9ERUxBWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIElOUFVUX0RFTEFZICAweDQwICAgICAgIC8qIEV4dGVybmFsIE1lbW9yeSBJbnB1dCBEZWxheSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5JTlBVVF9ERUxBWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBQRFdOICAweDIwICAgICAgIC8qIFBvd2VyIERvd24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUERXTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU1RPUENLICAweDggICAgICAgIC8qIFN0b3AgQ2xvY2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblNUT1BDSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBQTExfT0ZGICAweDIgICAgICAgIC8qIERpc2FibGUgUExMICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgblBMTF9PRkYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBERiAgMHgxICAgICAgICAvKiBEaXZpZGUgRnJlcXVlbmN5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBuREYgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBQTExfU1RBVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgIFBMTF9MT0NLRUQgIDB4MjAgICAgICAgLyogUExMIExvY2tlZCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuUExMX0xPQ0tFRCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgQUNUSVZFX1BMTERJU0FCTEVEICAweDQgICAgICAgIC8qIEFjdGl2ZSBNb2RlIFdpdGggUExMIERpc2FibGVkICovCisjZGVmaW5lICAgICAgIG5BQ1RJVkVfUExMRElTQUJMRUQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRlVMTF9PTiAgMHgyICAgICAgICAvKiBGdWxsLU9uIE1vZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRlVMTF9PTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgIEFDVElWRV9QTExFTkFCTEVEICAweDEgICAgICAgIC8qIEFjdGl2ZSBNb2RlIFdpdGggUExMIEVuYWJsZWQgKi8KKyNkZWZpbmUgICAgICAgIG5BQ1RJVkVfUExMRU5BQkxFRCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJUQ1dTICAweDQwMCAgICAgIC8qIFJUQy9SZXNldCBXYWtlLVVwIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJUQ1dTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0FOV1MgIDB4ODAwICAgICAgLyogQ0FOIFdha2UtVXAgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0FOV1MgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVU0JXUyAgMHgyMDAwICAgICAvKiBVU0IgV2FrZS1VcCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5VU0JXUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgS1BBRFdTICAweDQwMDAgICAgIC8qIEtleXBhZCBXYWtlLVVwIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuS1BBRFdTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk9UV1MgIDB4ODAwMCAgICAgLyogUm90YXJ5IFdha2UtVXAgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk9UV1MgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgR1BXUyAgMHgxMDAwICAgICAvKiBHZW5lcmFsLVB1cnBvc2UgV2FrZS1VcCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuR1BXUyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFZSX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEZSRVEgIDB4MyAgICAgICAgLyogUmVndWxhdG9yIFN3aXRjaGluZyBGcmVxdWVuY3kgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgR0FJTiAgMHhjICAgICAgICAvKiBWb2x0YWdlIE91dHB1dCBMZXZlbCBHYWluICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFZMRVYgIDB4ZjAgICAgICAgLyogSW50ZXJuYWwgVm9sdGFnZSBMZXZlbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTQ0tFTE9XICAweDgwMDAgICAgIC8qIERyaXZlIFNDS0UgTG93IER1cmluZyBSZXNldCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuU0NLRUxPVyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBXQUtFICAweDEwMCAgICAgIC8qIFJUQy9SZXNldCBXYWtlLVVwIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5XQUtFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0FOV0UgIDB4MjAwICAgICAgLyogQ0FOMC8xIFdha2UtVXAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ0FOV0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgR1BXRSAgMHg0MDAgICAgICAvKiBHZW5lcmFsLVB1cnBvc2UgV2FrZS1VcCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuR1BXRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVTQldFICAweDgwMCAgICAgIC8qIFVTQiBXYWtlLVVwIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblVTQldFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBLUEFEV0UgIDB4MTAwMCAgICAgLyogS2V5cGFkIFdha2UtVXAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5LUEFEV0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBST1RXRSAgMHgyMDAwICAgICAvKiBSb3RhcnkgV2FrZS1VcCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5ST1RXRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE5GQ19DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgV1JfRExZICAweGYgICAgICAgIC8qIFdyaXRlIFN0cm9iZSBEZWxheSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUkRfRExZICAweGYwICAgICAgIC8qIFJlYWQgU3Ryb2JlIERlbGF5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBOV0lEVEggIDB4MTAwICAgICAgLyogTkFORCBEYXRhIFdpZHRoICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5OV0lEVEggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgUEdfU0laRSAgMHgyMDAgICAgICAvKiBQYWdlIFNpemUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuUEdfU0laRSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE5GQ19TVEFUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBOQlVTWSAgMHgxICAgICAgICAvKiBOb3QgQnVzeSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk5CVVNZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFdCX0ZVTEwgIDB4MiAgICAgICAgLyogV3JpdGUgQnVmZmVyIEZ1bGwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuV0JfRlVMTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBQR19XUl9TVEFUICAweDQgICAgICAgIC8qIFBhZ2UgV3JpdGUgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgIG5QR19XUl9TVEFUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIFBHX1JEX1NUQVQgIDB4OCAgICAgICAgLyogUGFnZSBSZWFkIFBlbmRpbmcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuUEdfUkRfU1RBVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFdCX0VNUFRZICAweDEwICAgICAgIC8qIFdyaXRlIEJ1ZmZlciBFbXB0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbldCX0VNUFRZICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTkZDX0lSUVNUQVQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIE5CVVNZSVJRICAweDEgICAgICAgIC8qIE5vdCBCdXN5IElSUSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbk5CVVNZSVJRICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBXQl9PVkYgIDB4MiAgICAgICAgLyogV3JpdGUgQnVmZmVyIE92ZXJmbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5XQl9PVkYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgV0JfRURHRSAgMHg0ICAgICAgICAvKiBXcml0ZSBCdWZmZXIgRWRnZSBEZXRlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuV0JfRURHRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUkRfUkRZICAweDggICAgICAgIC8qIFJlYWQgRGF0YSBSZWFkeSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuUkRfUkRZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFdSX0RPTkUgIDB4MTAgICAgICAgLyogUGFnZSBXcml0ZSBEb25lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbldSX0RPTkUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBORkNfSVJRTUFTSyAqLworCisjZGVmaW5lICAgICAgICAgICAgICBNQVNLX0JVU1lJUlEgIDB4MSAgICAgICAgLyogTWFzayBOb3QgQnVzeSBJUlEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgbk1BU0tfQlVTWUlSUSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBNQVNLX1dCT1ZGICAweDIgICAgICAgIC8qIE1hc2sgV3JpdGUgQnVmZmVyIE92ZXJmbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgbk1BU0tfV0JPVkYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgIE1BU0tfV0JFTVBUWSAgMHg0ICAgICAgICAvKiBNYXNrIFdyaXRlIEJ1ZmZlciBFbXB0eSAqLworI2RlZmluZSAgICAgICAgICAgICBuTUFTS19XQkVNUFRZICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIE1BU0tfUkRSRFkgIDB4OCAgICAgICAgLyogTWFzayBSZWFkIERhdGEgUmVhZHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuTUFTS19SRFJEWSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIE1BU0tfV1JET05FICAweDEwICAgICAgIC8qIE1hc2sgV3JpdGUgRG9uZSAqLworI2RlZmluZSAgICAgICAgICAgICAgbk1BU0tfV1JET05FICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTkZDX1JTVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVDQ19SU1QgIDB4MSAgICAgICAgLyogRUNDIChhbmQgTkZDIGNvdW50ZXJzKSBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FQ0NfUlNUICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgTkZDX1BHQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICBQR19SRF9TVEFSVCAgMHgxICAgICAgICAvKiBQYWdlIFJlYWQgU3RhcnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5QR19SRF9TVEFSVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgIFBHX1dSX1NUQVJUICAweDIgICAgICAgIC8qIFBhZ2UgV3JpdGUgU3RhcnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgIG5QR19XUl9TVEFSVCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIE5GQ19FQ0MwICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRUNDMCAgMHg3ZmYgICAgICAvKiBQYXJpdHkgQ2FsY3VsYXRpb24gUmVzdWx0MCAqLworCisvKiBCaXQgbWFza3MgZm9yIE5GQ19FQ0MxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRUNDMSAgMHg3ZmYgICAgICAvKiBQYXJpdHkgQ2FsY3VsYXRpb24gUmVzdWx0MSAqLworCisvKiBCaXQgbWFza3MgZm9yIE5GQ19FQ0MyICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRUNDMiAgMHg3ZmYgICAgICAvKiBQYXJpdHkgQ2FsY3VsYXRpb24gUmVzdWx0MiAqLworCisvKiBCaXQgbWFza3MgZm9yIE5GQ19FQ0MzICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRUNDMyAgMHg3ZmYgICAgICAvKiBQYXJpdHkgQ2FsY3VsYXRpb24gUmVzdWx0MyAqLworCisvKiBCaXQgbWFza3MgZm9yIE5GQ19DT1VOVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFQ0NDTlQgIDB4M2ZmICAgICAgLyogVHJhbnNmZXIgQ291bnQgKi8KKworLyogQml0IG1hc2tzIGZvciBDQU4wX0NPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgU1JTICAweDEgICAgICAgIC8qIFNvZnR3YXJlIFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5TUlMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEROTSAgMHgyICAgICAgICAvKiBEZXZpY2VOZXQgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuRE5NICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBQk8gIDB4NCAgICAgICAgLyogQXV0byBCdXMgT24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkFCTyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgV0JBICAweDEwICAgICAgIC8qIFdha2V1cCBPbiBDQU4gQnVzIEFjdGl2aXR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5XQkEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFNNUiAgMHgyMCAgICAgICAvKiBTbGVlcCBNb2RlIFJlcXVlc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblNNUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ1NSICAweDQwICAgICAgIC8qIENBTiBTdXNwZW5kIE1vZGUgUmVxdWVzdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQ1NSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDQ1IgIDB4ODAgICAgICAgLyogQ0FOIENvbmZpZ3VyYXRpb24gTW9kZSBSZXF1ZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5DQ1IgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX1NUQVRVUyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgV1QgIDB4MSAgICAgICAgLyogQ0FOIFRyYW5zbWl0IFdhcm5pbmcgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgbldUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgV1IgIDB4MiAgICAgICAgLyogQ0FOIFJlY2VpdmUgV2FybmluZyBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBuV1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBFUCAgMHg0ICAgICAgICAvKiBDQU4gRXJyb3IgUGFzc2l2ZSBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBuRVAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEVCTyAgMHg4ICAgICAgICAvKiBDQU4gRXJyb3IgQnVzIE9mZiBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5FQk8gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENTQSAgMHg0MCAgICAgICAvKiBDQU4gU3VzcGVuZCBNb2RlIEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5DU0EgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIENDQSAgMHg4MCAgICAgICAvKiBDQU4gQ29uZmlndXJhdGlvbiBNb2RlIEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5DQ0EgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBNQlBUUiAgMHgxZjAwICAgICAvKiBNYWlsYm94IFBvaW50ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRSTSAgMHg0MDAwICAgICAvKiBUcmFuc21pdCBNb2RlIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuVFJNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBSRUMgIDB4ODAwMCAgICAgLyogUmVjZWl2ZSBNb2RlIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuUkVDICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9ERUJVRyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBERUMgIDB4MSAgICAgICAgLyogRGlzYWJsZSBUcmFuc21pdC9SZWNlaXZlIEVycm9yIENvdW50ZXJzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5ERUMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIERSSSAgMHgyICAgICAgICAvKiBEaXNhYmxlIENBTlJYIElucHV0IFBpbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuRFJJICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBEVE8gIDB4NCAgICAgICAgLyogRGlzYWJsZSBDQU5UWCBPdXRwdXQgUGluICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5EVE8gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIERJTCAgMHg4ICAgICAgICAvKiBEaXNhYmxlIEludGVybmFsIExvb3AgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkRJTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTUFBICAweDEwICAgICAgIC8qIE1vZGUgQXV0by1BY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuTUFBICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBNUkIgIDB4MjAgICAgICAgLyogTW9kZSBSZWFkIEJhY2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbk1SQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQ0RFICAweDgwMDAgICAgIC8qIENBTiBEZWJ1ZyBNb2RlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQ0RFICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9DTE9DSyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBCUlAgIDB4M2ZmICAgICAgLyogQ0FOIEJpdCBSYXRlIFByZXNjYWxlciAqLworCisvKiBCaXQgbWFza3MgZm9yIENBTjBfVElNSU5HICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFNKVyAgMHgzMDAgICAgICAvKiBTeW5jaHJvbml6YXRpb24gSnVtcCBXaWR0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgU0FNICAweDgwICAgICAgIC8qIFNhbXBsaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5TQU0gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUU0VHMiAgMHg3MCAgICAgICAvKiBUaW1lIFNlZ21lbnQgMiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRTRUcxICAweGYgICAgICAgIC8qIFRpbWUgU2VnbWVudCAxICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9JTlRSICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDQU5SWCAgMHg4MCAgICAgICAvKiBTZXJpYWwgSW5wdXQgRnJvbSBUcmFuc2NlaXZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNBTlJYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0FOVFggIDB4NDAgICAgICAgLyogU2VyaWFsIE91dHB1dCBUbyBUcmFuc2NlaXZlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNBTlRYICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU01BQ0sgIDB4OCAgICAgICAgLyogU2xlZXAgTW9kZSBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblNNQUNLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEdJUlEgIDB4NCAgICAgICAgLyogR2xvYmFsIEludGVycnVwdCBSZXF1ZXN0IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5HSVJRICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlRJUlEgIDB4MiAgICAgICAgLyogTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgUmVxdWVzdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJUSVJRICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlJJUlEgIDB4MSAgICAgICAgLyogTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCBSZXF1ZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQlJJUlEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX0dJTSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVdUSU0gIDB4MSAgICAgICAgLyogRXJyb3IgV2FybmluZyBUcmFuc21pdCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkVXVElNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVdSSU0gIDB4MiAgICAgICAgLyogRXJyb3IgV2FybmluZyBSZWNlaXZlIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuRVdSSU0gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRVBJTSAgMHg0ICAgICAgICAvKiBFcnJvciBQYXNzaXZlIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkVQSU0gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQk9JTSAgMHg4ICAgICAgICAvKiBCdXMgT2ZmIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkJPSU0gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgV1VJTSAgMHgxMCAgICAgICAvKiBXYWtldXAgSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuV1VJTSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVJQUlNICAweDIwICAgICAgIC8qIFVuaW1wbGVtZW50ZWQgQWRkcmVzcyBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblVJQUlNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFBSU0gIDB4NDAgICAgICAgLyogQWJvcnQgQWNrbm93bGVkZ2UgSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUFJTSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJNTElNICAweDgwICAgICAgIC8qIFJlY2VpdmUgTWVzc2FnZSBMb3N0IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MSU0gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVQ0VJTSAgMHgxMDAgICAgICAvKiBVbml2ZXJzYWwgQ291bnRlciBFeGNlZWRlZCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblVDRUlNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFESU0gIDB4NDAwICAgICAgLyogQWNjZXNzIERlbmllZCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BRElNICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9HSVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVXVElTICAweDEgICAgICAgIC8qIEVycm9yIFdhcm5pbmcgVHJhbnNtaXQgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkVXVElTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRVdSSVMgIDB4MiAgICAgICAgLyogRXJyb3IgV2FybmluZyBSZWNlaXZlIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5FV1JJUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFUElTICAweDQgICAgICAgIC8qIEVycm9yIFBhc3NpdmUgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5FUElTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJPSVMgIDB4OCAgICAgICAgLyogQnVzIE9mZiBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkJPSVMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgV1VJUyAgMHgxMCAgICAgICAvKiBXYWtldXAgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5XVUlTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVUlBSVMgIDB4MjAgICAgICAgLyogVW5pbXBsZW1lbnRlZCBBZGRyZXNzIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5VSUFJUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQUlTICAweDQwICAgICAgIC8qIEFib3J0IEFja25vd2xlZGdlIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUFJUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJNTElTICAweDgwICAgICAgIC8qIFJlY2VpdmUgTWVzc2FnZSBMb3N0IEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5STUxJUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFVDRUlTICAweDEwMCAgICAgIC8qIFVuaXZlcnNhbCBDb3VudGVyIEV4Y2VlZGVkIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5VQ0VJUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBRElTICAweDQwMCAgICAgIC8qIEFjY2VzcyBEZW5pZWQgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BRElTICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9HSUYgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVXVElGICAweDEgICAgICAgIC8qIEVycm9yIFdhcm5pbmcgVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5FV1RJRiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVXUklGICAweDIgICAgICAgIC8qIEVycm9yIFdhcm5pbmcgUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkVXUklGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVQSUYgIDB4NCAgICAgICAgLyogRXJyb3IgUGFzc2l2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5FUElGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEJPSUYgIDB4OCAgICAgICAgLyogQnVzIE9mZiBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5CT0lGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFdVSUYgIDB4MTAgICAgICAgLyogV2FrZXVwIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbldVSUYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVSUFJRiAgMHgyMCAgICAgICAvKiBVbmltcGxlbWVudGVkIEFkZHJlc3MgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5VSUFJRiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQUlGICAweDQwICAgICAgIC8qIEFib3J0IEFja25vd2xlZGdlIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkFBSUYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUxJRiAgMHg4MCAgICAgICAvKiBSZWNlaXZlIE1lc3NhZ2UgTG9zdCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNTElGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVUNFSUYgIDB4MTAwICAgICAgLyogVW5pdmVyc2FsIENvdW50ZXIgRXhjZWVkZWQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5VQ0VJRiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBRElGICAweDQwMCAgICAgIC8qIEFjY2VzcyBEZW5pZWQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQURJRiAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENBTjBfTUJURCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBURFIgIDB4ODAgICAgICAgLyogVGVtcG9yYXJ5IERpc2FibGUgUmVxdWVzdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuVERSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUREEgIDB4NDAgICAgICAgLyogVGVtcG9yYXJ5IERpc2FibGUgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblREQSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFREUFRSICAweDFmICAgICAgIC8qIFRlbXBvcmFyeSBEaXNhYmxlIFBvaW50ZXIgKi8KKworLyogQml0IG1hc2tzIGZvciBDQU4wX1VDQ05GICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVQ0NORiAgMHhmICAgICAgICAvKiBVbml2ZXJzYWwgQ291bnRlciBDb25maWd1cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVDUkMgIDB4MjAgICAgICAgLyogVW5pdmVyc2FsIENvdW50ZXIgUmVsb2FkL0NsZWFyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblVDUkMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVUNDVCAgMHg0MCAgICAgICAvKiBVbml2ZXJzYWwgQ291bnRlciBDQU4gVHJpZ2dlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5VQ0NUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBVQ0UgIDB4ODAgICAgICAgLyogVW5pdmVyc2FsIENvdW50ZXIgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5VQ0UgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX1VDQ05UICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBVQ0NOVCAgMHhmZmZmICAgICAvKiBVbml2ZXJzYWwgQ291bnRlciBDb3VudCBWYWx1ZSAqLworCisvKiBCaXQgbWFza3MgZm9yIENBTjBfVUNSQyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVUNWQUwgIDB4ZmZmZiAgICAgLyogVW5pdmVyc2FsIENvdW50ZXIgUmVsb2FkL0NhcHR1cmUgVmFsdWUgKi8KKworLyogQml0IG1hc2tzIGZvciBDQU4wX0NFQyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBSWEVDTlQgIDB4ZmYgICAgICAgLyogUmVjZWl2ZSBFcnJvciBDb3VudGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUWEVDTlQgIDB4ZmYwMCAgICAgLyogVHJhbnNtaXQgRXJyb3IgQ291bnRlciAqLworCisvKiBCaXQgbWFza3MgZm9yIENBTjBfRVNSICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEZFUiAgMHg4MCAgICAgICAvKiBGb3JtIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5GRVIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEJFRiAgMHg0MCAgICAgICAvKiBCaXQgRXJyb3IgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQkVGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBTQTAgIDB4MjAgICAgICAgLyogU3R1Y2sgQXQgRG9taW5hbnQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblNBMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDUkNFICAweDEwICAgICAgIC8qIENSQyBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5DUkNFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBTRVIgIDB4OCAgICAgICAgLyogU3R1ZmYgQml0IEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5TRVIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQUNLRSAgMHg0ICAgICAgICAvKiBBY2tub3dsZWRnZSBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BQ0tFICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9FV1IgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVdMVEVDICAweGZmMDAgICAgIC8qIFRyYW5zbWl0IEVycm9yIFdhcm5pbmcgTGltaXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVXTFJFQyAgMHhmZiAgICAgICAvKiBSZWNlaXZlIEVycm9yIFdhcm5pbmcgTGltaXQgKi8KKworLyogQml0IG1hc2tzIGZvciBDQU4wX0FNeHhfSCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBGREYgIDB4ODAwMCAgICAgLyogRmlsdGVyIE9uIERhdGEgRmllbGQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkZERiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRk1EICAweDQwMDAgICAgIC8qIEZ1bGwgTWFzayBEYXRhICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5GTUQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBBTUlERSAgMHgyMDAwICAgICAvKiBBY2NlcHRhbmNlIE1hc2sgSWRlbnRpZmllciBFeHRlbnNpb24gKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5BTUlERSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQkFTRUlEICAweDFmZmMgICAgIC8qIEJhc2UgSWRlbnRpZmllciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIEVYVElEX0hJICAweDMgICAgICAgIC8qIEV4dGVuZGVkIElkZW50aWZpZXIgSGlnaCBCaXRzICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9BTXh4X0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEVYVElEX0xPICAweGZmZmYgICAgIC8qIEV4dGVuZGVkIElkZW50aWZpZXIgTG93IEJpdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIERGTSAgMHhmZmZmICAgICAvKiBEYXRhIEZpZWxkIE1hc2sgKi8KKworLyogQml0IG1hc2tzIGZvciBDQU4wX01CeHhfSUQxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEFNRSAgMHg4MDAwICAgICAvKiBBY2NlcHRhbmNlIE1hc2sgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5BTUUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJUUiAgMHg0MDAwICAgICAvKiBSZW1vdGUgVHJhbnNtaXNzaW9uIFJlcXVlc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblJUUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgSURFICAweDIwMDAgICAgIC8qIElkZW50aWZpZXIgRXh0ZW5zaW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5JREUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEJBU0VJRCAgMHgxZmZjICAgICAvKiBCYXNlIElkZW50aWZpZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFWFRJRF9ISSAgMHgzICAgICAgICAvKiBFeHRlbmRlZCBJZGVudGlmaWVyIEhpZ2ggQml0cyAqLworCisvKiBCaXQgbWFza3MgZm9yIENBTjBfTUJ4eF9JRDAgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIEVYVElEX0xPICAweGZmZmYgICAgIC8qIEV4dGVuZGVkIElkZW50aWZpZXIgTG93IEJpdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIERGTSAgMHhmZmZmICAgICAvKiBEYXRhIEZpZWxkIE1hc2sgKi8KKworLyogQml0IG1hc2tzIGZvciBDQU4wX01CeHhfVElNRVNUQU1QICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRTViAgMHhmZmZmICAgICAvKiBUaW1lIFN0YW1wIFZhbHVlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9NQnh4X0xFTkdUSCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBETEMgIDB4ZiAgICAgICAgLyogRGF0YSBMZW5ndGggQ29kZSAqLworCisvKiBCaXQgbWFza3MgZm9yIENBTjBfTUJ4eF9EQVRBMyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU5fQllURTAgIDB4ZmYwMCAgICAgLyogRGF0YSBGaWVsZCBCeXRlIDAgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTl9CWVRFMSAgMHhmZiAgICAgICAvKiBEYXRhIEZpZWxkIEJ5dGUgMSAqLworCisvKiBCaXQgbWFza3MgZm9yIENBTjBfTUJ4eF9EQVRBMiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU5fQllURTIgIDB4ZmYwMCAgICAgLyogRGF0YSBGaWVsZCBCeXRlIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTl9CWVRFMyAgMHhmZiAgICAgICAvKiBEYXRhIEZpZWxkIEJ5dGUgMyAqLworCisvKiBCaXQgbWFza3MgZm9yIENBTjBfTUJ4eF9EQVRBMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU5fQllURTQgIDB4ZmYwMCAgICAgLyogRGF0YSBGaWVsZCBCeXRlIDQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTl9CWVRFNSAgMHhmZiAgICAgICAvKiBEYXRhIEZpZWxkIEJ5dGUgNSAqLworCisvKiBCaXQgbWFza3MgZm9yIENBTjBfTUJ4eF9EQVRBMCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBDQU5fQllURTYgIDB4ZmYwMCAgICAgLyogRGF0YSBGaWVsZCBCeXRlIDYgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIENBTl9CWVRFNyAgMHhmZiAgICAgICAvKiBEYXRhIEZpZWxkIEJ5dGUgNyAqLworCisvKiBCaXQgbWFza3MgZm9yIENBTjBfTUMxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1DMCAgMHgxICAgICAgICAvKiBNYWlsYm94IDAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NQzAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1DMSAgMHgyICAgICAgICAvKiBNYWlsYm94IDEgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NQzEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1DMiAgMHg0ICAgICAgICAvKiBNYWlsYm94IDIgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NQzIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1DMyAgMHg4ICAgICAgICAvKiBNYWlsYm94IDMgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NQzMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1DNCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDQgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NQzQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1DNSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NQzUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1DNiAgMHg0MCAgICAgICAvKiBNYWlsYm94IDYgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NQzYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1DNyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NQzcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1DOCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDggRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NQzggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1DOSAgMHgyMDAgICAgICAvKiBNYWlsYm94IDkgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NQzkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUMxMCAgMHg0MDAgICAgICAvKiBNYWlsYm94IDEwIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NQzEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1DMTEgIDB4ODAwICAgICAgLyogTWFpbGJveCAxMSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUMxMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNQzEyICAweDEwMDAgICAgIC8qIE1haWxib3ggMTIgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1DMTIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUMxMyAgMHgyMDAwICAgICAvKiBNYWlsYm94IDEzIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NQzEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1DMTQgIDB4NDAwMCAgICAgLyogTWFpbGJveCAxNCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUMxNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNQzE1ICAweDgwMDAgICAgIC8qIE1haWxib3ggMTUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1DMTUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX01DMiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1DMTYgIDB4MSAgICAgICAgLyogTWFpbGJveCAxNiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUMxNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNQzE3ICAweDIgICAgICAgIC8qIE1haWxib3ggMTcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1DMTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUMxOCAgMHg0ICAgICAgICAvKiBNYWlsYm94IDE4IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NQzE4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1DMTkgIDB4OCAgICAgICAgLyogTWFpbGJveCAxOSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUMxOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNQzIwICAweDEwICAgICAgIC8qIE1haWxib3ggMjAgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1DMjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUMyMSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDIxIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NQzIxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1DMjIgIDB4NDAgICAgICAgLyogTWFpbGJveCAyMiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUMyMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNQzIzICAweDgwICAgICAgIC8qIE1haWxib3ggMjMgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1DMjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUMyNCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDI0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NQzI0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1DMjUgIDB4MjAwICAgICAgLyogTWFpbGJveCAyNSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUMyNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNQzI2ICAweDQwMCAgICAgIC8qIE1haWxib3ggMjYgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1DMjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUMyNyAgMHg4MDAgICAgICAvKiBNYWlsYm94IDI3IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NQzI3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1DMjggIDB4MTAwMCAgICAgLyogTWFpbGJveCAyOCBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUMyOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNQzI5ICAweDIwMDAgICAgIC8qIE1haWxib3ggMjkgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1DMjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUMzMCAgMHg0MDAwICAgICAvKiBNYWlsYm94IDMwIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NQzMwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1DMzEgIDB4ODAwMCAgICAgLyogTWFpbGJveCAzMSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUMzMSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENBTjBfTUQxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1EMCAgMHgxICAgICAgICAvKiBNYWlsYm94IDAgUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbk1EMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTUQxICAweDIgICAgICAgIC8qIE1haWxib3ggMSBSZWNlaXZlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuTUQxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBNRDIgIDB4NCAgICAgICAgLyogTWFpbGJveCAyIFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NRDIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1EMyAgMHg4ICAgICAgICAvKiBNYWlsYm94IDMgUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbk1EMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTUQ0ICAweDEwICAgICAgIC8qIE1haWxib3ggNCBSZWNlaXZlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuTUQ0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBNRDUgIDB4MjAgICAgICAgLyogTWFpbGJveCA1IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NRDUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1ENiAgMHg0MCAgICAgICAvKiBNYWlsYm94IDYgUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbk1ENiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTUQ3ICAweDgwICAgICAgIC8qIE1haWxib3ggNyBSZWNlaXZlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuTUQ3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBNRDggIDB4MTAwICAgICAgLyogTWFpbGJveCA4IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5NRDggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1EOSAgMHgyMDAgICAgICAvKiBNYWlsYm94IDkgUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbk1EOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNRDEwICAweDQwMCAgICAgIC8qIE1haWxib3ggMTAgUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUQxMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNRDExICAweDgwMCAgICAgIC8qIE1haWxib3ggMTEgUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUQxMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNRDEyICAweDEwMDAgICAgIC8qIE1haWxib3ggMTIgUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUQxMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNRDEzICAweDIwMDAgICAgIC8qIE1haWxib3ggMTMgUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUQxMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNRDE0ICAweDQwMDAgICAgIC8qIE1haWxib3ggMTQgUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUQxNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBNRDE1ICAweDgwMDAgICAgIC8qIE1haWxib3ggMTUgUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUQxNSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENBTjBfTUQyICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQxNiAgMHgxICAgICAgICAvKiBNYWlsYm94IDE2IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMTYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQxNyAgMHgyICAgICAgICAvKiBNYWlsYm94IDE3IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQxOCAgMHg0ICAgICAgICAvKiBNYWlsYm94IDE4IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMTggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQxOSAgMHg4ICAgICAgICAvKiBNYWlsYm94IDE5IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMTkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQyMCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDIwIFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQyMSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDIxIFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMjEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQyMiAgMHg0MCAgICAgICAvKiBNYWlsYm94IDIyIFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMjIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQyMyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDIzIFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQyNCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDI0IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMjQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQyNSAgMHgyMDAgICAgICAvKiBNYWlsYm94IDI1IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMjUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQyNiAgMHg0MDAgICAgICAvKiBNYWlsYm94IDI2IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQyNyAgMHg4MDAgICAgICAvKiBNYWlsYm94IDI3IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMjcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQyOCAgMHgxMDAwICAgICAvKiBNYWlsYm94IDI4IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQyOSAgMHgyMDAwICAgICAvKiBNYWlsYm94IDI5IFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQzMCAgMHg0MDAwICAgICAvKiBNYWlsYm94IDMwIFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMzAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUQzMSAgMHg4MDAwICAgICAvKiBNYWlsYm94IDMxIFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1EMzEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX1JNUDEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSTVAwICAweDEgICAgICAgIC8qIE1haWxib3ggMCBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5STVAwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJNUDEgIDB4MiAgICAgICAgLyogTWFpbGJveCAxIFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJNUDEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUk1QMiAgMHg0ICAgICAgICAvKiBNYWlsYm94IDIgUmVjZWl2ZSBNZXNzYWdlIFBlbmRpbmcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUk1QMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSTVAzICAweDggICAgICAgIC8qIE1haWxib3ggMyBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5STVAzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJNUDQgIDB4MTAgICAgICAgLyogTWFpbGJveCA0IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJNUDQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUk1QNSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDUgUmVjZWl2ZSBNZXNzYWdlIFBlbmRpbmcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUk1QNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSTVA2ICAweDQwICAgICAgIC8qIE1haWxib3ggNiBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5STVA2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJNUDcgIDB4ODAgICAgICAgLyogTWFpbGJveCA3IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJNUDcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUk1QOCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDggUmVjZWl2ZSBNZXNzYWdlIFBlbmRpbmcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUk1QOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSTVA5ICAweDIwMCAgICAgIC8qIE1haWxib3ggOSBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5STVA5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1QMTAgIDB4NDAwICAgICAgLyogTWFpbGJveCAxMCBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNUDEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1QMTEgIDB4ODAwICAgICAgLyogTWFpbGJveCAxMSBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNUDExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1QMTIgIDB4MTAwMCAgICAgLyogTWFpbGJveCAxMiBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNUDEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1QMTMgIDB4MjAwMCAgICAgLyogTWFpbGJveCAxMyBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNUDEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1QMTQgIDB4NDAwMCAgICAgLyogTWFpbGJveCAxNCBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNUDE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1QMTUgIDB4ODAwMCAgICAgLyogTWFpbGJveCAxNSBSZWNlaXZlIE1lc3NhZ2UgUGVuZGluZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNUDE1ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9STVAyICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAxNiAgMHgxICAgICAgICAvKiBNYWlsYm94IDE2IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMTYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAxNyAgMHgyICAgICAgICAvKiBNYWlsYm94IDE3IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAxOCAgMHg0ICAgICAgICAvKiBNYWlsYm94IDE4IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMTggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAxOSAgMHg4ICAgICAgICAvKiBNYWlsYm94IDE5IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMTkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAyMCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDIwIFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAyMSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDIxIFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMjEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAyMiAgMHg0MCAgICAgICAvKiBNYWlsYm94IDIyIFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMjIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAyMyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDIzIFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAyNCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDI0IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMjQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAyNSAgMHgyMDAgICAgICAvKiBNYWlsYm94IDI1IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMjUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAyNiAgMHg0MDAgICAgICAvKiBNYWlsYm94IDI2IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAyNyAgMHg4MDAgICAgICAvKiBNYWlsYm94IDI3IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMjcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAyOCAgMHgxMDAwICAgICAvKiBNYWlsYm94IDI4IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAyOSAgMHgyMDAwICAgICAvKiBNYWlsYm94IDI5IFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAzMCAgMHg0MDAwICAgICAvKiBNYWlsYm94IDMwIFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMzAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTVAzMSAgMHg4MDAwICAgICAvKiBNYWlsYm94IDMxIFJlY2VpdmUgTWVzc2FnZSBQZW5kaW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1QMzEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX1JNTDEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSTUwwICAweDEgICAgICAgIC8qIE1haWxib3ggMCBSZWNlaXZlIE1lc3NhZ2UgTG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5STUwwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJNTDEgIDB4MiAgICAgICAgLyogTWFpbGJveCAxIFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJNTDEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUk1MMiAgMHg0ICAgICAgICAvKiBNYWlsYm94IDIgUmVjZWl2ZSBNZXNzYWdlIExvc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUk1MMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSTUwzICAweDggICAgICAgIC8qIE1haWxib3ggMyBSZWNlaXZlIE1lc3NhZ2UgTG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5STUwzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJNTDQgIDB4MTAgICAgICAgLyogTWFpbGJveCA0IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJNTDQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUk1MNSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDUgUmVjZWl2ZSBNZXNzYWdlIExvc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUk1MNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSTUw2ICAweDQwICAgICAgIC8qIE1haWxib3ggNiBSZWNlaXZlIE1lc3NhZ2UgTG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5STUw2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJNTDcgIDB4ODAgICAgICAgLyogTWFpbGJveCA3IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJNTDcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUk1MOCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDggUmVjZWl2ZSBNZXNzYWdlIExvc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUk1MOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSTUw5ICAweDIwMCAgICAgIC8qIE1haWxib3ggOSBSZWNlaXZlIE1lc3NhZ2UgTG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5STUw5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1MMTAgIDB4NDAwICAgICAgLyogTWFpbGJveCAxMCBSZWNlaXZlIE1lc3NhZ2UgTG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNTDEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1MMTEgIDB4ODAwICAgICAgLyogTWFpbGJveCAxMSBSZWNlaXZlIE1lc3NhZ2UgTG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNTDExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1MMTIgIDB4MTAwMCAgICAgLyogTWFpbGJveCAxMiBSZWNlaXZlIE1lc3NhZ2UgTG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNTDEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1MMTMgIDB4MjAwMCAgICAgLyogTWFpbGJveCAxMyBSZWNlaXZlIE1lc3NhZ2UgTG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNTDEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1MMTQgIDB4NDAwMCAgICAgLyogTWFpbGJveCAxNCBSZWNlaXZlIE1lc3NhZ2UgTG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNTDE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUk1MMTUgIDB4ODAwMCAgICAgLyogTWFpbGJveCAxNSBSZWNlaXZlIE1lc3NhZ2UgTG9zdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJNTDE1ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9STUwyICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwxNiAgMHgxICAgICAgICAvKiBNYWlsYm94IDE2IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMTYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwxNyAgMHgyICAgICAgICAvKiBNYWlsYm94IDE3IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwxOCAgMHg0ICAgICAgICAvKiBNYWlsYm94IDE4IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMTggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwxOSAgMHg4ICAgICAgICAvKiBNYWlsYm94IDE5IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMTkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwyMCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDIwIFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwyMSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDIxIFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMjEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwyMiAgMHg0MCAgICAgICAvKiBNYWlsYm94IDIyIFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMjIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwyMyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDIzIFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwyNCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDI0IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMjQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwyNSAgMHgyMDAgICAgICAvKiBNYWlsYm94IDI1IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMjUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwyNiAgMHg0MDAgICAgICAvKiBNYWlsYm94IDI2IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwyNyAgMHg4MDAgICAgICAvKiBNYWlsYm94IDI3IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMjcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwyOCAgMHgxMDAwICAgICAvKiBNYWlsYm94IDI4IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwyOSAgMHgyMDAwICAgICAvKiBNYWlsYm94IDI5IFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwzMCAgMHg0MDAwICAgICAvKiBNYWlsYm94IDMwIFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMzAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSTUwzMSAgMHg4MDAwICAgICAvKiBNYWlsYm94IDMxIFJlY2VpdmUgTWVzc2FnZSBMb3N0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUk1MMzEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX09QU1MxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBPUFNTMCAgMHgxICAgICAgICAvKiBNYWlsYm94IDAgT3ZlcndyaXRlIFByb3RlY3Rpb24vU2luZ2xlLVNob3QgVHJhbnNtaXNzaW9uIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk9QU1MwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgT1BTUzEgIDB4MiAgICAgICAgLyogTWFpbGJveCAxIE92ZXJ3cml0ZSBQcm90ZWN0aW9uL1NpbmdsZS1TaG90IFRyYW5zbWlzc2lvbiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5PUFNTMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE9QU1MyICAweDQgICAgICAgIC8qIE1haWxib3ggMiBPdmVyd3JpdGUgUHJvdGVjdGlvbi9TaW5nbGUtU2hvdCBUcmFuc21pc3Npb24gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuT1BTUzIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBPUFNTMyAgMHg4ICAgICAgICAvKiBNYWlsYm94IDMgT3ZlcndyaXRlIFByb3RlY3Rpb24vU2luZ2xlLVNob3QgVHJhbnNtaXNzaW9uIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk9QU1MzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgT1BTUzQgIDB4MTAgICAgICAgLyogTWFpbGJveCA0IE92ZXJ3cml0ZSBQcm90ZWN0aW9uL1NpbmdsZS1TaG90IFRyYW5zbWlzc2lvbiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5PUFNTNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE9QU1M1ICAweDIwICAgICAgIC8qIE1haWxib3ggNSBPdmVyd3JpdGUgUHJvdGVjdGlvbi9TaW5nbGUtU2hvdCBUcmFuc21pc3Npb24gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuT1BTUzUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBPUFNTNiAgMHg0MCAgICAgICAvKiBNYWlsYm94IDYgT3ZlcndyaXRlIFByb3RlY3Rpb24vU2luZ2xlLVNob3QgVHJhbnNtaXNzaW9uIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk9QU1M2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgT1BTUzcgIDB4ODAgICAgICAgLyogTWFpbGJveCA3IE92ZXJ3cml0ZSBQcm90ZWN0aW9uL1NpbmdsZS1TaG90IFRyYW5zbWlzc2lvbiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5PUFNTNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE9QU1M4ICAweDEwMCAgICAgIC8qIE1haWxib3ggOCBPdmVyd3JpdGUgUHJvdGVjdGlvbi9TaW5nbGUtU2hvdCBUcmFuc21pc3Npb24gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuT1BTUzggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBPUFNTOSAgMHgyMDAgICAgICAvKiBNYWlsYm94IDkgT3ZlcndyaXRlIFByb3RlY3Rpb24vU2luZ2xlLVNob3QgVHJhbnNtaXNzaW9uIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk9QU1M5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBPUFNTMTAgIDB4NDAwICAgICAgLyogTWFpbGJveCAxMCBPdmVyd3JpdGUgUHJvdGVjdGlvbi9TaW5nbGUtU2hvdCBUcmFuc21pc3Npb24gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5PUFNTMTAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE9QU1MxMSAgMHg4MDAgICAgICAvKiBNYWlsYm94IDExIE92ZXJ3cml0ZSBQcm90ZWN0aW9uL1NpbmdsZS1TaG90IFRyYW5zbWlzc2lvbiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk9QU1MxMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgT1BTUzEyICAweDEwMDAgICAgIC8qIE1haWxib3ggMTIgT3ZlcndyaXRlIFByb3RlY3Rpb24vU2luZ2xlLVNob3QgVHJhbnNtaXNzaW9uIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuT1BTUzEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBPUFNTMTMgIDB4MjAwMCAgICAgLyogTWFpbGJveCAxMyBPdmVyd3JpdGUgUHJvdGVjdGlvbi9TaW5nbGUtU2hvdCBUcmFuc21pc3Npb24gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5PUFNTMTMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE9QU1MxNCAgMHg0MDAwICAgICAvKiBNYWlsYm94IDE0IE92ZXJ3cml0ZSBQcm90ZWN0aW9uL1NpbmdsZS1TaG90IFRyYW5zbWlzc2lvbiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk9QU1MxNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgT1BTUzE1ICAweDgwMDAgICAgIC8qIE1haWxib3ggMTUgT3ZlcndyaXRlIFByb3RlY3Rpb24vU2luZ2xlLVNob3QgVHJhbnNtaXNzaW9uIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuT1BTUzE1ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9PUFNTMiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBPUFNTMTYgIDB4MSAgICAgICAgLyogTWFpbGJveCAxNiBPdmVyd3JpdGUgUHJvdGVjdGlvbi9TaW5nbGUtU2hvdCBUcmFuc21pc3Npb24gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5PUFNTMTYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE9QU1MxNyAgMHgyICAgICAgICAvKiBNYWlsYm94IDE3IE92ZXJ3cml0ZSBQcm90ZWN0aW9uL1NpbmdsZS1TaG90IFRyYW5zbWlzc2lvbiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk9QU1MxNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgT1BTUzE4ICAweDQgICAgICAgIC8qIE1haWxib3ggMTggT3ZlcndyaXRlIFByb3RlY3Rpb24vU2luZ2xlLVNob3QgVHJhbnNtaXNzaW9uIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuT1BTUzE4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBPUFNTMTkgIDB4OCAgICAgICAgLyogTWFpbGJveCAxOSBPdmVyd3JpdGUgUHJvdGVjdGlvbi9TaW5nbGUtU2hvdCBUcmFuc21pc3Npb24gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5PUFNTMTkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE9QU1MyMCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDIwIE92ZXJ3cml0ZSBQcm90ZWN0aW9uL1NpbmdsZS1TaG90IFRyYW5zbWlzc2lvbiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk9QU1MyMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgT1BTUzIxICAweDIwICAgICAgIC8qIE1haWxib3ggMjEgT3ZlcndyaXRlIFByb3RlY3Rpb24vU2luZ2xlLVNob3QgVHJhbnNtaXNzaW9uIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuT1BTUzIxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBPUFNTMjIgIDB4NDAgICAgICAgLyogTWFpbGJveCAyMiBPdmVyd3JpdGUgUHJvdGVjdGlvbi9TaW5nbGUtU2hvdCBUcmFuc21pc3Npb24gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5PUFNTMjIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE9QU1MyMyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDIzIE92ZXJ3cml0ZSBQcm90ZWN0aW9uL1NpbmdsZS1TaG90IFRyYW5zbWlzc2lvbiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk9QU1MyMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgT1BTUzI0ICAweDEwMCAgICAgIC8qIE1haWxib3ggMjQgT3ZlcndyaXRlIFByb3RlY3Rpb24vU2luZ2xlLVNob3QgVHJhbnNtaXNzaW9uIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuT1BTUzI0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBPUFNTMjUgIDB4MjAwICAgICAgLyogTWFpbGJveCAyNSBPdmVyd3JpdGUgUHJvdGVjdGlvbi9TaW5nbGUtU2hvdCBUcmFuc21pc3Npb24gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5PUFNTMjUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE9QU1MyNiAgMHg0MDAgICAgICAvKiBNYWlsYm94IDI2IE92ZXJ3cml0ZSBQcm90ZWN0aW9uL1NpbmdsZS1TaG90IFRyYW5zbWlzc2lvbiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk9QU1MyNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgT1BTUzI3ICAweDgwMCAgICAgIC8qIE1haWxib3ggMjcgT3ZlcndyaXRlIFByb3RlY3Rpb24vU2luZ2xlLVNob3QgVHJhbnNtaXNzaW9uIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuT1BTUzI3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBPUFNTMjggIDB4MTAwMCAgICAgLyogTWFpbGJveCAyOCBPdmVyd3JpdGUgUHJvdGVjdGlvbi9TaW5nbGUtU2hvdCBUcmFuc21pc3Npb24gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5PUFNTMjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE9QU1MyOSAgMHgyMDAwICAgICAvKiBNYWlsYm94IDI5IE92ZXJ3cml0ZSBQcm90ZWN0aW9uL1NpbmdsZS1TaG90IFRyYW5zbWlzc2lvbiBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk9QU1MyOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgT1BTUzMwICAweDQwMDAgICAgIC8qIE1haWxib3ggMzAgT3ZlcndyaXRlIFByb3RlY3Rpb24vU2luZ2xlLVNob3QgVHJhbnNtaXNzaW9uIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuT1BTUzMwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBPUFNTMzEgIDB4ODAwMCAgICAgLyogTWFpbGJveCAzMSBPdmVyd3JpdGUgUHJvdGVjdGlvbi9TaW5nbGUtU2hvdCBUcmFuc21pc3Npb24gRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5PUFNTMzEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX1RSUzEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUUlMwICAweDEgICAgICAgIC8qIE1haWxib3ggMCBUcmFuc21pdCBSZXF1ZXN0IFNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5UUlMwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRSUzEgIDB4MiAgICAgICAgLyogTWFpbGJveCAxIFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRSUzEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFJTMiAgMHg0ICAgICAgICAvKiBNYWlsYm94IDIgVHJhbnNtaXQgUmVxdWVzdCBTZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVFJTMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUUlMzICAweDggICAgICAgIC8qIE1haWxib3ggMyBUcmFuc21pdCBSZXF1ZXN0IFNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5UUlMzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRSUzQgIDB4MTAgICAgICAgLyogTWFpbGJveCA0IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRSUzQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFJTNSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDUgVHJhbnNtaXQgUmVxdWVzdCBTZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVFJTNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUUlM2ICAweDQwICAgICAgIC8qIE1haWxib3ggNiBUcmFuc21pdCBSZXF1ZXN0IFNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5UUlM2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRSUzcgIDB4ODAgICAgICAgLyogTWFpbGJveCA3IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRSUzcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFJTOCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDggVHJhbnNtaXQgUmVxdWVzdCBTZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVFJTOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUUlM5ICAweDIwMCAgICAgIC8qIE1haWxib3ggOSBUcmFuc21pdCBSZXF1ZXN0IFNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5UUlM5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJTMTAgIDB4NDAwICAgICAgLyogTWFpbGJveCAxMCBUcmFuc21pdCBSZXF1ZXN0IFNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUzEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJTMTEgIDB4ODAwICAgICAgLyogTWFpbGJveCAxMSBUcmFuc21pdCBSZXF1ZXN0IFNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUzExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJTMTIgIDB4MTAwMCAgICAgLyogTWFpbGJveCAxMiBUcmFuc21pdCBSZXF1ZXN0IFNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUzEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJTMTMgIDB4MjAwMCAgICAgLyogTWFpbGJveCAxMyBUcmFuc21pdCBSZXF1ZXN0IFNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUzEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJTMTQgIDB4NDAwMCAgICAgLyogTWFpbGJveCAxNCBUcmFuc21pdCBSZXF1ZXN0IFNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUzE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJTMTUgIDB4ODAwMCAgICAgLyogTWFpbGJveCAxNSBUcmFuc21pdCBSZXF1ZXN0IFNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUzE1ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9UUlMyICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMxNiAgMHgxICAgICAgICAvKiBNYWlsYm94IDE2IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMTYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMxNyAgMHgyICAgICAgICAvKiBNYWlsYm94IDE3IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMxOCAgMHg0ICAgICAgICAvKiBNYWlsYm94IDE4IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMTggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMxOSAgMHg4ICAgICAgICAvKiBNYWlsYm94IDE5IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMTkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMyMCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDIwIFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMyMSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDIxIFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMjEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMyMiAgMHg0MCAgICAgICAvKiBNYWlsYm94IDIyIFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMjIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMyMyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDIzIFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMyNCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDI0IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMjQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMyNSAgMHgyMDAgICAgICAvKiBNYWlsYm94IDI1IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMjUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMyNiAgMHg0MDAgICAgICAvKiBNYWlsYm94IDI2IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMyNyAgMHg4MDAgICAgICAvKiBNYWlsYm94IDI3IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMjcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMyOCAgMHgxMDAwICAgICAvKiBNYWlsYm94IDI4IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMyOSAgMHgyMDAwICAgICAvKiBNYWlsYm94IDI5IFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMzMCAgMHg0MDAwICAgICAvKiBNYWlsYm94IDMwIFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMzAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlMzMSAgMHg4MDAwICAgICAvKiBNYWlsYm94IDMxIFRyYW5zbWl0IFJlcXVlc3QgU2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJTMzEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX1RSUjEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUUlIwICAweDEgICAgICAgIC8qIE1haWxib3ggMCBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRSUjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFJSMSAgMHgyICAgICAgICAvKiBNYWlsYm94IDEgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5UUlIxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRSUjIgIDB4NCAgICAgICAgLyogTWFpbGJveCAyIFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVFJSMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUUlIzICAweDggICAgICAgIC8qIE1haWxib3ggMyBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRSUjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFJSNCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDQgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5UUlI0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRSUjUgIDB4MjAgICAgICAgLyogTWFpbGJveCA1IFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVFJSNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUUlI2ICAweDQwICAgICAgIC8qIE1haWxib3ggNiBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRSUjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFJSNyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDcgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5UUlI3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRSUjggIDB4MTAwICAgICAgLyogTWFpbGJveCA4IFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVFJSOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUUlI5ICAweDIwMCAgICAgIC8qIE1haWxib3ggOSBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRSUjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlIxMCAgMHg0MDAgICAgICAvKiBNYWlsYm94IDEwIFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUlIxMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSUjExICAweDgwMCAgICAgIC8qIE1haWxib3ggMTEgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUjExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJSMTIgIDB4MTAwMCAgICAgLyogTWFpbGJveCAxMiBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJSMTIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlIxMyAgMHgyMDAwICAgICAvKiBNYWlsYm94IDEzIFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUlIxMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSUjE0ICAweDQwMDAgICAgIC8qIE1haWxib3ggMTQgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUjE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJSMTUgIDB4ODAwMCAgICAgLyogTWFpbGJveCAxNSBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJSMTUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX1RSUjIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSUjE2ICAweDEgICAgICAgIC8qIE1haWxib3ggMTYgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUjE2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJSMTcgIDB4MiAgICAgICAgLyogTWFpbGJveCAxNyBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJSMTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlIxOCAgMHg0ICAgICAgICAvKiBNYWlsYm94IDE4IFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUlIxOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSUjE5ICAweDggICAgICAgIC8qIE1haWxib3ggMTkgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUjE5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJSMjAgIDB4MTAgICAgICAgLyogTWFpbGJveCAyMCBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJSMjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlIyMSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDIxIFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUlIyMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSUjIyICAweDQwICAgICAgIC8qIE1haWxib3ggMjIgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUjIyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJSMjMgIDB4ODAgICAgICAgLyogTWFpbGJveCAyMyBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJSMjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlIyNCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDI0IFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUlIyNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSUjI1ICAweDIwMCAgICAgIC8qIE1haWxib3ggMjUgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUjI1ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJSMjYgIDB4NDAwICAgICAgLyogTWFpbGJveCAyNiBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJSMjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlIyNyAgMHg4MDAgICAgICAvKiBNYWlsYm94IDI3IFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUlIyNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSUjI4ICAweDEwMDAgICAgIC8qIE1haWxib3ggMjggVHJhbnNtaXQgUmVxdWVzdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUjI4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFJSMjkgIDB4MjAwMCAgICAgLyogTWFpbGJveCAyOSBUcmFuc21pdCBSZXF1ZXN0IFJlc2V0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFJSMjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUUlIzMCAgMHg0MDAwICAgICAvKiBNYWlsYm94IDMwIFRyYW5zbWl0IFJlcXVlc3QgUmVzZXQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUlIzMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSUjMxICAweDgwMDAgICAgIC8qIE1haWxib3ggMzEgVHJhbnNtaXQgUmVxdWVzdCBSZXNldCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRSUjMxICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9BQTEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQUEwICAweDEgICAgICAgIC8qIE1haWxib3ggMCBBYm9ydCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQUEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBQTEgIDB4MiAgICAgICAgLyogTWFpbGJveCAxIEFib3J0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5BQTEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEFBMiAgMHg0ICAgICAgICAvKiBNYWlsYm94IDIgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkFBMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQUEzICAweDggICAgICAgIC8qIE1haWxib3ggMyBBYm9ydCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQUEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBQTQgIDB4MTAgICAgICAgLyogTWFpbGJveCA0IEFib3J0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5BQTQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEFBNSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDUgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkFBNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQUE2ICAweDQwICAgICAgIC8qIE1haWxib3ggNiBBYm9ydCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQUE2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBQTcgIDB4ODAgICAgICAgLyogTWFpbGJveCA3IEFib3J0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5BQTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEFBOCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDggQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkFBOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQUE5ICAweDIwMCAgICAgIC8qIE1haWxib3ggOSBBYm9ydCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQUE5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFBMTAgIDB4NDAwICAgICAgLyogTWFpbGJveCAxMCBBYm9ydCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BQTEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFBMTEgIDB4ODAwICAgICAgLyogTWFpbGJveCAxMSBBYm9ydCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BQTExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFBMTIgIDB4MTAwMCAgICAgLyogTWFpbGJveCAxMiBBYm9ydCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BQTEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFBMTMgIDB4MjAwMCAgICAgLyogTWFpbGJveCAxMyBBYm9ydCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BQTEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFBMTQgIDB4NDAwMCAgICAgLyogTWFpbGJveCAxNCBBYm9ydCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BQTE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFBMTUgIDB4ODAwMCAgICAgLyogTWFpbGJveCAxNSBBYm9ydCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BQTE1ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9BQTIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTE2ICAweDEgICAgICAgIC8qIE1haWxib3ggMTYgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUExNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTE3ICAweDIgICAgICAgIC8qIE1haWxib3ggMTcgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUExNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTE4ICAweDQgICAgICAgIC8qIE1haWxib3ggMTggQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUExOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTE5ICAweDggICAgICAgIC8qIE1haWxib3ggMTkgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUExOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTIwICAweDEwICAgICAgIC8qIE1haWxib3ggMjAgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEyMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTIxICAweDIwICAgICAgIC8qIE1haWxib3ggMjEgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEyMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTIyICAweDQwICAgICAgIC8qIE1haWxib3ggMjIgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEyMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTIzICAweDgwICAgICAgIC8qIE1haWxib3ggMjMgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEyMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTI0ICAweDEwMCAgICAgIC8qIE1haWxib3ggMjQgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEyNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTI1ICAweDIwMCAgICAgIC8qIE1haWxib3ggMjUgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEyNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTI2ICAweDQwMCAgICAgIC8qIE1haWxib3ggMjYgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEyNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTI3ICAweDgwMCAgICAgIC8qIE1haWxib3ggMjcgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEyNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTI4ICAweDEwMDAgICAgIC8qIE1haWxib3ggMjggQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEyOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTI5ICAweDIwMDAgICAgIC8qIE1haWxib3ggMjkgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEyOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTMwICAweDQwMDAgICAgIC8qIE1haWxib3ggMzAgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEzMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBQTMxICAweDgwMDAgICAgIC8qIE1haWxib3ggMzEgQWJvcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUEzMSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENBTjBfVEExICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRBMCAgMHgxICAgICAgICAvKiBNYWlsYm94IDAgVHJhbnNtaXQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblRBMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEExICAweDIgICAgICAgIC8qIE1haWxib3ggMSBUcmFuc21pdCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuVEExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUQTIgIDB4NCAgICAgICAgLyogTWFpbGJveCAyIFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5UQTIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRBMyAgMHg4ICAgICAgICAvKiBNYWlsYm94IDMgVHJhbnNtaXQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblRBMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEE0ICAweDEwICAgICAgIC8qIE1haWxib3ggNCBUcmFuc21pdCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuVEE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUQTUgIDB4MjAgICAgICAgLyogTWFpbGJveCA1IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5UQTUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRBNiAgMHg0MCAgICAgICAvKiBNYWlsYm94IDYgVHJhbnNtaXQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblRBNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEE3ICAweDgwICAgICAgIC8qIE1haWxib3ggNyBUcmFuc21pdCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuVEE3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUQTggIDB4MTAwICAgICAgLyogTWFpbGJveCA4IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5UQTggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRBOSAgMHgyMDAgICAgICAvKiBNYWlsYm94IDkgVHJhbnNtaXQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblRBOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUQTEwICAweDQwMCAgICAgIC8qIE1haWxib3ggMTAgVHJhbnNtaXQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVEExMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUQTExICAweDgwMCAgICAgIC8qIE1haWxib3ggMTEgVHJhbnNtaXQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVEExMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUQTEyICAweDEwMDAgICAgIC8qIE1haWxib3ggMTIgVHJhbnNtaXQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVEExMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUQTEzICAweDIwMDAgICAgIC8qIE1haWxib3ggMTMgVHJhbnNtaXQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVEExMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUQTE0ICAweDQwMDAgICAgIC8qIE1haWxib3ggMTQgVHJhbnNtaXQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVEExNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUQTE1ICAweDgwMDAgICAgIC8qIE1haWxib3ggMTUgVHJhbnNtaXQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVEExNSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENBTjBfVEEyICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEExNiAgMHgxICAgICAgICAvKiBNYWlsYm94IDE2IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMTYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEExNyAgMHgyICAgICAgICAvKiBNYWlsYm94IDE3IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEExOCAgMHg0ICAgICAgICAvKiBNYWlsYm94IDE4IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMTggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEExOSAgMHg4ICAgICAgICAvKiBNYWlsYm94IDE5IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMTkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEyMCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDIwIFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEyMSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDIxIFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMjEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEyMiAgMHg0MCAgICAgICAvKiBNYWlsYm94IDIyIFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMjIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEyMyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDIzIFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEyNCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDI0IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMjQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEyNSAgMHgyMDAgICAgICAvKiBNYWlsYm94IDI1IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMjUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEyNiAgMHg0MDAgICAgICAvKiBNYWlsYm94IDI2IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEyNyAgMHg4MDAgICAgICAvKiBNYWlsYm94IDI3IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMjcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEyOCAgMHgxMDAwICAgICAvKiBNYWlsYm94IDI4IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEyOSAgMHgyMDAwICAgICAvKiBNYWlsYm94IDI5IFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEzMCAgMHg0MDAwICAgICAvKiBNYWlsYm94IDMwIFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMzAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVEEzMSAgMHg4MDAwICAgICAvKiBNYWlsYm94IDMxIFRyYW5zbWl0IEFja25vd2xlZGdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRBMzEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX1JGSDEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSRkgwICAweDEgICAgICAgIC8qIE1haWxib3ggMCBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJGSDAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUkZIMSAgMHgyICAgICAgICAvKiBNYWlsYm94IDEgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5SRkgxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJGSDIgIDB4NCAgICAgICAgLyogTWFpbGJveCAyIFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUkZIMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSRkgzICAweDggICAgICAgIC8qIE1haWxib3ggMyBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJGSDMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUkZINCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDQgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5SRkg0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJGSDUgIDB4MjAgICAgICAgLyogTWFpbGJveCA1IFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUkZINSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSRkg2ICAweDQwICAgICAgIC8qIE1haWxib3ggNiBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJGSDYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUkZINyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDcgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5SRkg3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJGSDggIDB4MTAwICAgICAgLyogTWFpbGJveCA4IFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUkZIOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSRkg5ICAweDIwMCAgICAgIC8qIE1haWxib3ggOSBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJGSDkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSRkgxMCAgMHg0MDAgICAgICAvKiBNYWlsYm94IDEwIFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SRkgxMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJGSDExICAweDgwMCAgICAgIC8qIE1haWxib3ggMTEgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJGSDExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkZIMTIgIDB4MTAwMCAgICAgLyogTWFpbGJveCAxMiBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkZIMTIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSRkgxMyAgMHgyMDAwICAgICAvKiBNYWlsYm94IDEzIFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SRkgxMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJGSDE0ICAweDQwMDAgICAgIC8qIE1haWxib3ggMTQgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJGSDE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkZIMTUgIDB4ODAwMCAgICAgLyogTWFpbGJveCAxNSBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkZIMTUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX1JGSDIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJGSDE2ICAweDEgICAgICAgIC8qIE1haWxib3ggMTYgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJGSDE2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkZIMTcgIDB4MiAgICAgICAgLyogTWFpbGJveCAxNyBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkZIMTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSRkgxOCAgMHg0ICAgICAgICAvKiBNYWlsYm94IDE4IFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SRkgxOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJGSDE5ICAweDggICAgICAgIC8qIE1haWxib3ggMTkgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJGSDE5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkZIMjAgIDB4MTAgICAgICAgLyogTWFpbGJveCAyMCBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkZIMjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSRkgyMSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDIxIFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SRkgyMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJGSDIyICAweDQwICAgICAgIC8qIE1haWxib3ggMjIgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJGSDIyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkZIMjMgIDB4ODAgICAgICAgLyogTWFpbGJveCAyMyBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkZIMjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSRkgyNCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDI0IFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SRkgyNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJGSDI1ICAweDIwMCAgICAgIC8qIE1haWxib3ggMjUgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJGSDI1ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkZIMjYgIDB4NDAwICAgICAgLyogTWFpbGJveCAyNiBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkZIMjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSRkgyNyAgMHg4MDAgICAgICAvKiBNYWlsYm94IDI3IFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SRkgyNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJGSDI4ICAweDEwMDAgICAgIC8qIE1haWxib3ggMjggUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJGSDI4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUkZIMjkgIDB4MjAwMCAgICAgLyogTWFpbGJveCAyOSBSZW1vdGUgRnJhbWUgSGFuZGxpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkZIMjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSRkgzMCAgMHg0MDAwICAgICAvKiBNYWlsYm94IDMwIFJlbW90ZSBGcmFtZSBIYW5kbGluZyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SRkgzMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJGSDMxICAweDgwMDAgICAgIC8qIE1haWxib3ggMzEgUmVtb3RlIEZyYW1lIEhhbmRsaW5nIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJGSDMxICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9NQklNMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTUJJTTAgIDB4MSAgICAgICAgLyogTWFpbGJveCAwIE1haWxib3ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5NQklNMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1CSU0xICAweDIgICAgICAgIC8qIE1haWxib3ggMSBNYWlsYm94IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTUJJTTEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBNQklNMiAgMHg0ICAgICAgICAvKiBNYWlsYm94IDIgTWFpbGJveCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk1CSU0yICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTUJJTTMgIDB4OCAgICAgICAgLyogTWFpbGJveCAzIE1haWxib3ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5NQklNMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1CSU00ICAweDEwICAgICAgIC8qIE1haWxib3ggNCBNYWlsYm94IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTUJJTTQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBNQklNNSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDUgTWFpbGJveCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk1CSU01ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTUJJTTYgIDB4NDAgICAgICAgLyogTWFpbGJveCA2IE1haWxib3ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5NQklNNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1CSU03ICAweDgwICAgICAgIC8qIE1haWxib3ggNyBNYWlsYm94IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTUJJTTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBNQklNOCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDggTWFpbGJveCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk1CSU04ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTUJJTTkgIDB4MjAwICAgICAgLyogTWFpbGJveCA5IE1haWxib3ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5NQklNOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJJTTEwICAweDQwMCAgICAgIC8qIE1haWxib3ggMTAgTWFpbGJveCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJJTTEwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQklNMTEgIDB4ODAwICAgICAgLyogTWFpbGJveCAxMSBNYWlsYm94IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQklNMTEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1CSU0xMiAgMHgxMDAwICAgICAvKiBNYWlsYm94IDEyIE1haWxib3ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1CSU0xMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJJTTEzICAweDIwMDAgICAgIC8qIE1haWxib3ggMTMgTWFpbGJveCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJJTTEzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQklNMTQgIDB4NDAwMCAgICAgLyogTWFpbGJveCAxNCBNYWlsYm94IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQklNMTQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1CSU0xNSAgMHg4MDAwICAgICAvKiBNYWlsYm94IDE1IE1haWxib3ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1CSU0xNSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIENBTjBfTUJJTTIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJJTTE2ICAweDEgICAgICAgIC8qIE1haWxib3ggMTYgTWFpbGJveCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJJTTE2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQklNMTcgIDB4MiAgICAgICAgLyogTWFpbGJveCAxNyBNYWlsYm94IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQklNMTcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1CSU0xOCAgMHg0ICAgICAgICAvKiBNYWlsYm94IDE4IE1haWxib3ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1CSU0xOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJJTTE5ICAweDggICAgICAgIC8qIE1haWxib3ggMTkgTWFpbGJveCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJJTTE5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQklNMjAgIDB4MTAgICAgICAgLyogTWFpbGJveCAyMCBNYWlsYm94IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQklNMjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1CSU0yMSAgMHgyMCAgICAgICAvKiBNYWlsYm94IDIxIE1haWxib3ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1CSU0yMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJJTTIyICAweDQwICAgICAgIC8qIE1haWxib3ggMjIgTWFpbGJveCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJJTTIyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQklNMjMgIDB4ODAgICAgICAgLyogTWFpbGJveCAyMyBNYWlsYm94IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQklNMjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1CSU0yNCAgMHgxMDAgICAgICAvKiBNYWlsYm94IDI0IE1haWxib3ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1CSU0yNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJJTTI1ICAweDIwMCAgICAgIC8qIE1haWxib3ggMjUgTWFpbGJveCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJJTTI1ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQklNMjYgIDB4NDAwICAgICAgLyogTWFpbGJveCAyNiBNYWlsYm94IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQklNMjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1CSU0yNyAgMHg4MDAgICAgICAvKiBNYWlsYm94IDI3IE1haWxib3ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1CSU0yNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJJTTI4ICAweDEwMDAgICAgIC8qIE1haWxib3ggMjggTWFpbGJveCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJJTTI4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQklNMjkgIDB4MjAwMCAgICAgLyogTWFpbGJveCAyOSBNYWlsYm94IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQklNMjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1CSU0zMCAgMHg0MDAwICAgICAvKiBNYWlsYm94IDMwIE1haWxib3ggSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1CSU0zMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJJTTMxICAweDgwMDAgICAgIC8qIE1haWxib3ggMzEgTWFpbGJveCBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJJTTMxICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9NQlRJRjEgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJUSUYwICAweDEgICAgICAgIC8qIE1haWxib3ggMCBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQlRJRjAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1CVElGMSAgMHgyICAgICAgICAvKiBNYWlsYm94IDEgTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJUSUYxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlRJRjIgIDB4NCAgICAgICAgLyogTWFpbGJveCAyIE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1CVElGMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJUSUYzICAweDggICAgICAgIC8qIE1haWxib3ggMyBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQlRJRjMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1CVElGNCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDQgTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJUSUY0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlRJRjUgIDB4MjAgICAgICAgLyogTWFpbGJveCA1IE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1CVElGNSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJUSUY2ICAweDQwICAgICAgIC8qIE1haWxib3ggNiBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQlRJRjYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1CVElGNyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDcgTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJUSUY3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlRJRjggIDB4MTAwICAgICAgLyogTWFpbGJveCA4IE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1CVElGOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUJUSUY5ICAweDIwMCAgICAgIC8qIE1haWxib3ggOSBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQlRJRjkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJUSUYxMCAgMHg0MDAgICAgICAvKiBNYWlsYm94IDEwIE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJUSUYxMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlRJRjExICAweDgwMCAgICAgIC8qIE1haWxib3ggMTEgTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlRJRjExICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CVElGMTIgIDB4MTAwMCAgICAgLyogTWFpbGJveCAxMiBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CVElGMTIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJUSUYxMyAgMHgyMDAwICAgICAvKiBNYWlsYm94IDEzIE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJUSUYxMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlRJRjE0ICAweDQwMDAgICAgIC8qIE1haWxib3ggMTQgTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlRJRjE0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CVElGMTUgIDB4ODAwMCAgICAgLyogTWFpbGJveCAxNSBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CVElGMTUgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX01CVElGMiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CVElGMTYgIDB4MSAgICAgICAgLyogTWFpbGJveCAxNiBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CVElGMTYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJUSUYxNyAgMHgyICAgICAgICAvKiBNYWlsYm94IDE3IE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJUSUYxNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlRJRjE4ICAweDQgICAgICAgIC8qIE1haWxib3ggMTggTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlRJRjE4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CVElGMTkgIDB4OCAgICAgICAgLyogTWFpbGJveCAxOSBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CVElGMTkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJUSUYyMCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDIwIE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJUSUYyMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlRJRjIxICAweDIwICAgICAgIC8qIE1haWxib3ggMjEgTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlRJRjIxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CVElGMjIgIDB4NDAgICAgICAgLyogTWFpbGJveCAyMiBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CVElGMjIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJUSUYyMyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDIzIE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJUSUYyMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlRJRjI0ICAweDEwMCAgICAgIC8qIE1haWxib3ggMjQgTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlRJRjI0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CVElGMjUgIDB4MjAwICAgICAgLyogTWFpbGJveCAyNSBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CVElGMjUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJUSUYyNiAgMHg0MDAgICAgICAvKiBNYWlsYm94IDI2IE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJUSUYyNiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlRJRjI3ICAweDgwMCAgICAgIC8qIE1haWxib3ggMjcgTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlRJRjI3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CVElGMjggIDB4MTAwMCAgICAgLyogTWFpbGJveCAyOCBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CVElGMjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJUSUYyOSAgMHgyMDAwICAgICAvKiBNYWlsYm94IDI5IE1haWxib3ggVHJhbnNtaXQgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJUSUYyOSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlRJRjMwICAweDQwMDAgICAgIC8qIE1haWxib3ggMzAgTWFpbGJveCBUcmFuc21pdCBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlRJRjMwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CVElGMzEgIDB4ODAwMCAgICAgLyogTWFpbGJveCAzMSBNYWlsYm94IFRyYW5zbWl0IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CVElGMzEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBDQU4wX01CUklGMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlJJRjAgIDB4MSAgICAgICAgLyogTWFpbGJveCAwIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJSSUYwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlJJRjEgIDB4MiAgICAgICAgLyogTWFpbGJveCAxIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJSSUYxICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlJJRjIgIDB4NCAgICAgICAgLyogTWFpbGJveCAyIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJSSUYyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlJJRjMgIDB4OCAgICAgICAgLyogTWFpbGJveCAzIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJSSUYzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlJJRjQgIDB4MTAgICAgICAgLyogTWFpbGJveCA0IE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJSSUY0ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlJJRjUgIDB4MjAgICAgICAgLyogTWFpbGJveCA1IE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJSSUY1ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlJJRjYgIDB4NDAgICAgICAgLyogTWFpbGJveCA2IE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJSSUY2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlJJRjcgIDB4ODAgICAgICAgLyogTWFpbGJveCA3IE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJSSUY3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlJJRjggIDB4MTAwICAgICAgLyogTWFpbGJveCA4IE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJSSUY4ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQlJJRjkgIDB4MjAwICAgICAgLyogTWFpbGJveCA5IE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUJSSUY5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CUklGMTAgIDB4NDAwICAgICAgLyogTWFpbGJveCAxMCBNYWlsYm94IFJlY2VpdmUgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJSSUYxMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlJJRjExICAweDgwMCAgICAgIC8qIE1haWxib3ggMTEgTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CUklGMTEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJSSUYxMiAgMHgxMDAwICAgICAvKiBNYWlsYm94IDEyIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlJJRjEyICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CUklGMTMgIDB4MjAwMCAgICAgLyogTWFpbGJveCAxMyBNYWlsYm94IFJlY2VpdmUgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJSSUYxMyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlJJRjE0ICAweDQwMDAgICAgIC8qIE1haWxib3ggMTQgTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CUklGMTQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJSSUYxNSAgMHg4MDAwICAgICAvKiBNYWlsYm94IDE1IE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlJJRjE1ICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgQ0FOMF9NQlJJRjIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlJJRjE2ICAweDEgICAgICAgIC8qIE1haWxib3ggMTYgTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CUklGMTYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJSSUYxNyAgMHgyICAgICAgICAvKiBNYWlsYm94IDE3IE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlJJRjE3ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CUklGMTggIDB4NCAgICAgICAgLyogTWFpbGJveCAxOCBNYWlsYm94IFJlY2VpdmUgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJSSUYxOCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlJJRjE5ICAweDggICAgICAgIC8qIE1haWxib3ggMTkgTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CUklGMTkgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJSSUYyMCAgMHgxMCAgICAgICAvKiBNYWlsYm94IDIwIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlJJRjIwICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CUklGMjEgIDB4MjAgICAgICAgLyogTWFpbGJveCAyMSBNYWlsYm94IFJlY2VpdmUgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJSSUYyMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlJJRjIyICAweDQwICAgICAgIC8qIE1haWxib3ggMjIgTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CUklGMjIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJSSUYyMyAgMHg4MCAgICAgICAvKiBNYWlsYm94IDIzIE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlJJRjIzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CUklGMjQgIDB4MTAwICAgICAgLyogTWFpbGJveCAyNCBNYWlsYm94IFJlY2VpdmUgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJSSUYyNCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlJJRjI1ICAweDIwMCAgICAgIC8qIE1haWxib3ggMjUgTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CUklGMjUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJSSUYyNiAgMHg0MDAgICAgICAvKiBNYWlsYm94IDI2IE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlJJRjI2ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CUklGMjcgIDB4ODAwICAgICAgLyogTWFpbGJveCAyNyBNYWlsYm94IFJlY2VpdmUgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJSSUYyNyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlJJRjI4ICAweDEwMDAgICAgIC8qIE1haWxib3ggMjggTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CUklGMjggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUJSSUYyOSAgMHgyMDAwICAgICAvKiBNYWlsYm94IDI5IE1haWxib3ggUmVjZWl2ZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5NQlJJRjI5ICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1CUklGMzAgIDB4NDAwMCAgICAgLyogTWFpbGJveCAzMCBNYWlsYm94IFJlY2VpdmUgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuTUJSSUYzMCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBNQlJJRjMxICAweDgwMDAgICAgIC8qIE1haWxib3ggMzEgTWFpbGJveCBSZWNlaXZlIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1CUklGMzEgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBFUFBJeF9TVEFUVVMgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgQ0ZJRk9fRVJSICAweDEgICAgICAgIC8qIENocm9tYSBGSUZPIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgIG5DRklGT19FUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFlGSUZPX0VSUiAgMHgyICAgICAgICAvKiBMdW1hIEZJRk8gRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbllGSUZPX0VSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgTFRFUlJfT1ZSICAweDQgICAgICAgIC8qIExpbmUgVHJhY2sgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgbkxURVJSX09WUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICBMVEVSUl9VTkRSICAweDggICAgICAgIC8qIExpbmUgVHJhY2sgVW5kZXJmbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkxURVJSX1VORFIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIEZURVJSX09WUiAgMHgxMCAgICAgICAvKiBGcmFtZSBUcmFjayBPdmVyZmxvdyAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuRlRFUlJfT1ZSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgIEZURVJSX1VORFIgIDB4MjAgICAgICAgLyogRnJhbWUgVHJhY2sgVW5kZXJmbG93ICovCisjZGVmaW5lICAgICAgICAgICAgICAgbkZURVJSX1VORFIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBFUlJfTkNPUiAgMHg0MCAgICAgICAvKiBQcmVhbWJsZSBFcnJvciBOb3QgQ29ycmVjdGVkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVJSX05DT1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BMVVSUSAgMHg4MCAgICAgICAvKiBETUExIFVyZ2VudCBSZXF1ZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRNQTFVUlEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRE1BMFVSUSAgMHgxMDAgICAgICAvKiBETUEwIFVyZ2VudCBSZXF1ZXN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkRNQTBVUlEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRVJSX0RFVCAgMHg0MDAwICAgICAvKiBQcmVhbWJsZSBFcnJvciBEZXRlY3RlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FUlJfREVUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBGTEQgIDB4ODAwMCAgICAgLyogRmllbGQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkZMRCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIEVQUEl4X0NPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUFBJX0VOICAweDEgICAgICAgIC8qIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FUFBJX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRVBQSV9ESVIgIDB4MiAgICAgICAgLyogRGlyZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuRVBQSV9ESVIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBYRlJfVFlQRSAgMHhjICAgICAgICAvKiBPcGVyYXRpbmcgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRlNfQ0ZHICAweDMwICAgICAgIC8qIEZyYW1lIFN5bmMgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBGTERfU0VMICAweDQwICAgICAgIC8qIEZpZWxkIFNlbGVjdC9UcmlnZ2VyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkZMRF9TRUwgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBJVFVfVFlQRSAgMHg4MCAgICAgICAvKiBJVFUgSW50ZXJsYWNlZCBvciBQcm9ncmVzc2l2ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbklUVV9UWVBFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQkxBTktHRU4gIDB4MTAwICAgICAgLyogSVRVIE91dHB1dCBNb2RlIHdpdGggSW50ZXJuYWwgQmxhbmtpbmcgR2VuZXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkJMQU5LR0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIElDTEtHRU4gIDB4MjAwICAgICAgLyogSW50ZXJuYWwgQ2xvY2sgR2VuZXJhdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5JQ0xLR0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBJRlNHRU4gIDB4NDAwICAgICAgLyogSW50ZXJuYWwgRnJhbWUgU3luYyBHZW5lcmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5JRlNHRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUE9MQyAgMHgxODAwICAgICAvKiBGcmFtZSBTeW5jIGFuZCBEYXRhIERyaXZpbmcvU2FtcGxpbmcgRWRnZXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUE9MUyAgMHg2MDAwICAgICAvKiBGcmFtZSBTeW5jIFBvbGFyaXR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIERMRU5HVEggIDB4MzgwMDAgICAgLyogRGF0YSBMZW5ndGggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgU0tJUF9FTiAgMHg0MDAwMCAgICAvKiBTa2lwIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TS0lQX0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFNLSVBfRU8gIDB4ODAwMDAgICAgLyogU2tpcCBFdmVuIG9yIE9kZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5TS0lQX0VPICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQQUNLRU4gIDB4MTAwMDAwICAgLyogUGFja2luZy9VbnBhY2tpbmcgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5QQUNLRU4gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNXQVBFTiAgMHgyMDAwMDAgICAvKiBTd2FwIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuU1dBUEVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgU0lHTl9FWFQgIDB4NDAwMDAwICAgLyogU2lnbiBFeHRlbnNpb24gb3IgWmVyby1maWxsZWQgLyBEYXRhIFNwbGl0IEZvcm1hdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblNJR05fRVhUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgIFNQTFRfRVZFTl9PREQgIDB4ODAwMDAwICAgLyogU3BsaXQgRXZlbiBhbmQgT2RkIERhdGEgU2FtcGxlcyAqLworI2RlZmluZSAgICAgICAgICAgIG5TUExUX0VWRU5fT0REICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgU1VCU1BMVF9PREQgIDB4MTAwMDAwMCAgLyogU3ViLXNwbGl0IE9kZCBTYW1wbGVzICovCisjZGVmaW5lICAgICAgICAgICAgICBuU1VCU1BMVF9PREQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIERNQUNGRyAgMHgyMDAwMDAwICAvKiBPbmUgb3IgVHdvIERNQSBDaGFubmVscyBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5ETUFDRkcgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgUkdCX0ZNVF9FTiAgMHg0MDAwMDAwICAvKiBSR0IgRm9ybWF0dGluZyBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICBuUkdCX0ZNVF9FTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEZJRk9fUldNICAweDE4MDAwMDAwIC8qIEZJRk8gUmVndWxhciBXYXRlcm1hcmtzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRklGT19VV00gIDB4NjAwMDAwMDAgLyogRklGTyBVcmdlbnQgV2F0ZXJtYXJrcyAqLworCisvKiBCaXQgbWFza3MgZm9yIEVQUEl4X0ZTMldfTFZCICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRjFWQl9CRCAgMHhmZiAgICAgICAvKiBWZXJ0aWNhbCBCbGFua2luZyBiZWZvcmUgRmllbGQgMSBBY3RpdmUgRGF0YSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBGMVZCX0FEICAweGZmMDAgICAgIC8qIFZlcnRpY2FsIEJsYW5raW5nIGFmdGVyIEZpZWxkIDEgQWN0aXZlIERhdGEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRjJWQl9CRCAgMHhmZjAwMDAgICAvKiBWZXJ0aWNhbCBCbGFua2luZyBiZWZvcmUgRmllbGQgMiBBY3RpdmUgRGF0YSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBGMlZCX0FEICAweGZmMDAwMDAwIC8qIFZlcnRpY2FsIEJsYW5raW5nIGFmdGVyIEZpZWxkIDIgQWN0aXZlIERhdGEgKi8KKworLyogQml0IG1hc2tzIGZvciBFUFBJeF9GUzJXX0xBVkYgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRjFfQUNUICAweGZmZmYgICAgIC8qIE51bWJlciBvZiBMaW5lcyBvZiBBY3RpdmUgRGF0YSBpbiBGaWVsZCAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBGMl9BQ1QgIDB4ZmZmZjAwMDAgLyogTnVtYmVyIG9mIExpbmVzIG9mIEFjdGl2ZSBEYXRhIGluIEZpZWxkIDIgKi8KKworLyogQml0IG1hc2tzIGZvciBFUFBJeF9DTElQICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTE9XX09ERCAgMHhmZiAgICAgICAvKiBMb3dlciBMaW1pdCBmb3IgT2RkIEJ5dGVzIChDaHJvbWEpICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgSElHSF9PREQgIDB4ZmYwMCAgICAgLyogVXBwZXIgTGltaXQgZm9yIE9kZCBCeXRlcyAoQ2hyb21hKSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIExPV19FVkVOICAweGZmMDAwMCAgIC8qIExvd2VyIExpbWl0IGZvciBFdmVuIEJ5dGVzIChMdW1hKSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgSElHSF9FVkVOICAweGZmMDAwMDAwIC8qIFVwcGVyIExpbWl0IGZvciBFdmVuIEJ5dGVzIChMdW1hKSAqLworCisvKiBCaXQgbWFza3MgZm9yIFNQSXhfQkFVRCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgU1BJX0JBVUQgIDB4ZmZmZiAgICAgLyogQmF1ZCBSYXRlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU1BJeF9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgU1BFICAweDQwMDAgICAgIC8qIFNQSSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblNQRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgV09NICAweDIwMDAgICAgIC8qIFdyaXRlIE9wZW4gRHJhaW4gTWFzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5XT00gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTVNUUiAgMHgxMDAwICAgICAvKiBNYXN0ZXIgTW9kZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NU1RSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENQT0wgIDB4ODAwICAgICAgLyogQ2xvY2sgUG9sYXJpdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQ1BPTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDUEhBICAweDQwMCAgICAgIC8qIENsb2NrIFBoYXNlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkNQSEEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTFNCRiAgMHgyMDAgICAgICAvKiBMU0IgRmlyc3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTFNCRiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTSVpFICAweDEwMCAgICAgIC8qIFNpemUgb2YgV29yZHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuU0laRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIEVNSVNPICAweDIwICAgICAgIC8qIEVuYWJsZSBNSVNPIE91dHB1dCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkVNSVNPICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFBTU0UgIDB4MTAgICAgICAgLyogU2xhdmUtU2VsZWN0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5QU1NFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgR00gIDB4OCAgICAgICAgLyogR2V0IE1vcmUgRGF0YSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgbkdNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU1ogIDB4NCAgICAgICAgLyogU2VuZCBaZXJvICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBuU1ogIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUSU1PRCAgMHgzICAgICAgICAvKiBUcmFuc2ZlciBJbml0aWF0aW9uIE1vZGUgKi8KKworLyogQml0IG1hc2tzIGZvciBTUEl4X0ZMRyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEZMUzEgIDB4MiAgICAgICAgLyogU2xhdmUgU2VsZWN0IEVuYWJsZSAxICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkZMUzEgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRkxTMiAgMHg0ICAgICAgICAvKiBTbGF2ZSBTZWxlY3QgRW5hYmxlIDIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuRkxTMiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGTFMzICAweDggICAgICAgIC8qIFNsYXZlIFNlbGVjdCBFbmFibGUgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5GTFMzICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEZMRzEgIDB4MjAwICAgICAgLyogU2xhdmUgU2VsZWN0IFZhbHVlIDEgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuRkxHMSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBGTEcyICAweDQwMCAgICAgIC8qIFNsYXZlIFNlbGVjdCBWYWx1ZSAyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkZMRzIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRkxHMyAgMHg4MDAgICAgICAvKiBTbGF2ZSBTZWxlY3QgVmFsdWUgMyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5GTEczICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU1BJeF9TVEFUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUWENPTCAgMHg0MCAgICAgICAvKiBUcmFuc21pdCBDb2xsaXNpb24gRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UWENPTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUlhTICAweDIwICAgICAgIC8qIFJEQlIgRGF0YSBCdWZmZXIgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5SWFMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUkJTWSAgMHgxMCAgICAgICAvKiBSZWNlaXZlIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJCU1kgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRYUyAgMHg4ICAgICAgICAvKiBUREJSIERhdGEgQnVmZmVyIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuVFhTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUWEUgIDB4NCAgICAgICAgLyogVHJhbnNtaXNzaW9uIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIG5UWEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTU9ERiAgMHgyICAgICAgICAvKiBNb2RlIEZhdWx0IEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbk1PREYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1BJRiAgMHgxICAgICAgICAvKiBTUEkgRmluaXNoZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuU1BJRiAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNQSXhfVERCUiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFREQlIgIDB4ZmZmZiAgICAgLyogVHJhbnNtaXQgRGF0YSBCdWZmZXIgKi8KKworLyogQml0IG1hc2tzIGZvciBTUEl4X1JEQlIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSREJSICAweGZmZmYgICAgIC8qIFJlY2VpdmUgRGF0YSBCdWZmZXIgKi8KKworLyogQml0IG1hc2tzIGZvciBTUEl4X1NIQURPVyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTSEFET1cgIDB4ZmZmZiAgICAgLyogUkRCUiBTaGFkb3cgKi8KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBUaGUgVFdJIGJpdCBtYXNrcyBmaWVsZHMgYXJlIGZyb20gdGhlIEFEU1AtQkY1MzggKi8KKy8qIGFuZCB0aGV5IGhhdmUgbm90IGJlZW4gdmVyaWZpZWQgYXMgdGhlIGZpbmFsICAgICAqLworLyogb25lcyBmb3IgdGhlIE1vYWIgcHJvY2Vzc29ycyAuLi4gYnogMS8xOS8yMDA3ICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogQml0IG1hc2tzIGZvciBUV0l4X0NPTlRST0wgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIFBSRVNDQUxFICAweDdmICAgICAgIC8qIFByZXNjYWxlIFZhbHVlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRXSV9FTkEgIDB4ODAgICAgICAgLyogVFdJIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5UV0lfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNDQ0IgIDB4MjAwICAgICAgLyogU2VyaWFsIENhbWVyYSBDb250cm9sIEJ1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5TQ0NCICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrZXMgZm9yIFRXSXhfQ0xLRElWICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENMS0xPVyAgMHhmZiAgICAgICAvKiBDbG9jayBMb3cgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDTEtISSAgMHhmZjAwICAgICAvKiBDbG9jayBIaWdoICovCisKKy8qIEJpdCBtYXNrZXMgZm9yIFRXSXhfU0xBVkVfQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFNFTiAgMHgxICAgICAgICAvKiBTbGF2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblNFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU1REVkFMICAweDQgICAgICAgIC8qIFNsYXZlIFRyYW5zbWl0IERhdGEgVmFsaWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblNURFZBTCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTkFLICAweDggICAgICAgIC8qIE5vdCBBY2tub3dsZWRnZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuTkFLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBHRU4gIDB4MTAgICAgICAgLyogR2VuZXJhbCBDYWxsIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuR0VOICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrZXMgZm9yIFRXSXhfU0xBVkVfQUREUiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0FERFIgIDB4N2YgICAgICAgLyogU2xhdmUgTW9kZSBBZGRyZXNzICovCisKKy8qIEJpdCBtYXNrZXMgZm9yIFRXSXhfU0xBVkVfU1RBVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNESVIgIDB4MSAgICAgICAgLyogU2xhdmUgVHJhbnNmZXIgRGlyZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblNESVIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBHQ0FMTCAgMHgyICAgICAgICAvKiBHZW5lcmFsIENhbGwgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5HQ0FMTCAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza2VzIGZvciBUV0l4X01BU1RFUl9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTUVOICAweDEgICAgICAgIC8qIE1hc3RlciBNb2RlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuTUVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1ESVIgIDB4NCAgICAgICAgLyogTWFzdGVyIFRyYW5zZmVyIERpcmVjdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NRElSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEZBU1QgIDB4OCAgICAgICAgLyogRmFzdCBNb2RlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkZBU1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU1RPUCAgMHgxMCAgICAgICAvKiBJc3N1ZSBTdG9wIENvbmRpdGlvbiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5TVE9QICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBSU1RBUlQgIDB4MjAgICAgICAgLyogUmVwZWF0IFN0YXJ0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5SU1RBUlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRENOVCAgMHgzZmMwICAgICAvKiBEYXRhIFRyYW5zZmVyIENvdW50ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTREFPVlIgIDB4NDAwMCAgICAgLyogU2VyaWFsIERhdGEgT3ZlcnJpZGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblNEQU9WUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0NMT1ZSICAweDgwMDAgICAgIC8qIFNlcmlhbCBDbG9jayBPdmVycmlkZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuU0NMT1ZSICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrZXMgZm9yIFRXSXhfTUFTVEVSX0FERFIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1BRERSICAweDdmICAgICAgIC8qIE1hc3RlciBNb2RlIEFkZHJlc3MgKi8KKworLyogQml0IG1hc2tlcyBmb3IgVFdJeF9NQVNURVJfU1RBVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTVBST0cgIDB4MSAgICAgICAgLyogTWFzdGVyIFRyYW5zZmVyIGluIFByb2dyZXNzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTVBST0cgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTE9TVEFSQiAgMHgyICAgICAgICAvKiBMb3N0IEFyYml0cmF0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkxPU1RBUkIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQU5BSyAgMHg0ICAgICAgICAvKiBBZGRyZXNzIE5vdCBBY2tub3dsZWRnZWQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQU5BSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBETkFLICAweDggICAgICAgIC8qIERhdGEgTm90IEFja25vd2xlZGdlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5ETkFLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgQlVGUkRFUlIgIDB4MTAgICAgICAgLyogQnVmZmVyIFJlYWQgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5CVUZSREVSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEJVRldSRVJSICAweDIwICAgICAgIC8qIEJ1ZmZlciBXcml0ZSBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkJVRldSRVJSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTREFTRU4gIDB4NDAgICAgICAgLyogU2VyaWFsIERhdGEgU2Vuc2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgblNEQVNFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0NMU0VOICAweDgwICAgICAgIC8qIFNlcmlhbCBDbG9jayBTZW5zZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuU0NMU0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEJVU0JVU1kgIDB4MTAwICAgICAgLyogQnVzIEJ1c3kgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuQlVTQlVTWSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza2VzIGZvciBUV0l4X0ZJRk9fQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBYTVRGTFVTSCAgMHgxICAgICAgICAvKiBUcmFuc21pdCBCdWZmZXIgRmx1c2ggKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5YTVRGTFVTSCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIFJDVkZMVVNIICAweDIgICAgICAgIC8qIFJlY2VpdmUgQnVmZmVyIEZsdXNoICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuUkNWRkxVU0ggIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFhNVElOVExFTiAgMHg0ICAgICAgICAvKiBUcmFuc21pdCBCdWZmZXIgSW50ZXJydXB0IExlbmd0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuWE1USU5UTEVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICBSQ1ZJTlRMRU4gIDB4OCAgICAgICAgLyogUmVjZWl2ZSBCdWZmZXIgSW50ZXJydXB0IExlbmd0aCAqLworI2RlZmluZSAgICAgICAgICAgICAgICBuUkNWSU5UTEVOICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrZXMgZm9yIFRXSXhfRklGT19TVEFUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgWE1UU1RBVCAgMHgzICAgICAgICAvKiBUcmFuc21pdCBGSUZPIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBSQ1ZTVEFUICAweGMgICAgICAgIC8qIFJlY2VpdmUgRklGTyBTdGF0dXMgKi8KKworLyogQml0IG1hc2tlcyBmb3IgVFdJeF9JTlRfTUFTSyAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBTSU5JVE0gIDB4MSAgICAgICAgLyogU2xhdmUgVHJhbnNmZXIgSW5pdGlhdGVkIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5TSU5JVE0gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNDT01QTSAgMHgyICAgICAgICAvKiBTbGF2ZSBUcmFuc2ZlciBDb21wbGV0ZSBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuU0NPTVBNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0VSUk0gIDB4NCAgICAgICAgLyogU2xhdmUgVHJhbnNmZXIgRXJyb3IgSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5TRVJSTSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNPVkZNICAweDggICAgICAgIC8qIFNsYXZlIE92ZXJmbG93IEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuU09WRk0gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1DT01QTSAgMHgxMCAgICAgICAvKiBNYXN0ZXIgVHJhbnNmZXIgQ29tcGxldGUgSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1DT01QTSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE1FUlJNICAweDIwICAgICAgIC8qIE1hc3RlciBUcmFuc2ZlciBFcnJvciBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk1FUlJNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgWE1UU0VSVk0gIDB4NDAgICAgICAgLyogVHJhbnNtaXQgRklGTyBTZXJ2aWNlIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBuWE1UU0VSVk0gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBSQ1ZTRVJWTSAgMHg4MCAgICAgICAvKiBSZWNlaXZlIEZJRk8gU2VydmljZSBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgblJDVlNFUlZNICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrZXMgZm9yIFRXSXhfSU5UX1NUQVQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFNJTklUICAweDEgICAgICAgIC8qIFNsYXZlIFRyYW5zZmVyIEluaXRpYXRlZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblNJTklUICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgU0NPTVAgIDB4MiAgICAgICAgLyogU2xhdmUgVHJhbnNmZXIgQ29tcGxldGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5TQ09NUCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBTRVJSICAweDQgICAgICAgIC8qIFNsYXZlIFRyYW5zZmVyIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblNFUlIgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU09WRiAgMHg4ICAgICAgICAvKiBTbGF2ZSBPdmVyZmxvdyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5TT1ZGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTUNPTVAgIDB4MTAgICAgICAgLyogTWFzdGVyIFRyYW5zZmVyIENvbXBsZXRlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTUNPTVAgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTUVSUiAgMHgyMCAgICAgICAvKiBNYXN0ZXIgVHJhbnNmZXIgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTUVSUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBYTVRTRVJWICAweDQwICAgICAgIC8qIFRyYW5zbWl0IEZJRk8gU2VydmljZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5YTVRTRVJWICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFJDVlNFUlYgIDB4ODAgICAgICAgLyogUmVjZWl2ZSBGSUZPIFNlcnZpY2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuUkNWU0VSViAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza2VzIGZvciBUV0l4X1hNVF9EQVRBOCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgWE1UREFUQTggIDB4ZmYgICAgICAgLyogVHJhbnNtaXQgRklGTyA4LUJpdCBEYXRhICovCisKKy8qIEJpdCBtYXNrZXMgZm9yIFRXSXhfWE1UX0RBVEExNiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICBYTVREQVRBMTYgIDB4ZmZmZiAgICAgLyogVHJhbnNtaXQgRklGTyAxNi1CaXQgRGF0YSAqLworCisvKiBCaXQgbWFza2VzIGZvciBUV0l4X1JDVl9EQVRBOCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgUkNWREFUQTggIDB4ZmYgICAgICAgLyogUmVjZWl2ZSBGSUZPIDgtQml0IERhdGEgKi8KKworLyogQml0IG1hc2tlcyBmb3IgVFdJeF9SQ1ZfREFUQTE2ICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgIFJDVkRBVEExNiAgMHhmZmZmICAgICAvKiBSZWNlaXZlIEZJRk8gMTYtQml0IERhdGEgKi8KKworLyogQml0IG1hc2tzIGZvciBTUE9SVHhfVENSMSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVENLRkUgIDB4NDAwMCAgICAgLyogQ2xvY2sgRmFsbGluZyBFZGdlIFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRDS0ZFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTEFURlMgIDB4MjAwMCAgICAgLyogTGF0ZSBUcmFuc21pdCBGcmFtZSBTeW5jICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTEFURlMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgTFRGUyAgMHgxMDAwICAgICAvKiBMb3cgVHJhbnNtaXQgRnJhbWUgU3luYyBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTFRGUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERJVEZTICAweDgwMCAgICAgIC8qIERhdGEtSW5kZXBlbmRlbnQgVHJhbnNtaXQgRnJhbWUgU3luYyBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5ESVRGUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBURlNSICAweDQwMCAgICAgIC8qIFRyYW5zbWl0IEZyYW1lIFN5bmMgUmVxdWlyZWQgU2VsZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRGU1IgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSVRGUyAgMHgyMDAgICAgICAvKiBJbnRlcm5hbCBUcmFuc21pdCBGcmFtZSBTeW5jIFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5JVEZTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUTFNCSVQgIDB4MTAgICAgICAgLyogVHJhbnNtaXQgQml0IE9yZGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5UTFNCSVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFREVFlQRSAgMHhjICAgICAgICAvKiBEYXRhIEZvcm1hdHRpbmcgVHlwZSBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBJVENMSyAgMHgyICAgICAgICAvKiBJbnRlcm5hbCBUcmFuc21pdCBDbG9jayBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5JVENMSyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRTUEVOICAweDEgICAgICAgIC8qIFRyYW5zbWl0IEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRTUEVOICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU1BPUlR4X1RDUjIgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSRlNUICAweDQwMCAgICAgIC8qIExlZnQvUmlnaHQgT3JkZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUkZTVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRTRlNFICAweDIwMCAgICAgIC8qIFRyYW5zbWl0IFN0ZXJlbyBGcmFtZSBTeW5jIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblRTRlNFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRYU0UgIDB4MTAwICAgICAgLyogVHhTRUMgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRYU0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNMRU5fVCAgMHgxZiAgICAgICAvKiBTUE9SVCBXb3JkIExlbmd0aCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNQT1JUeF9SQ1IxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSQ0tGRSAgMHg0MDAwICAgICAvKiBDbG9jayBGYWxsaW5nIEVkZ2UgU2VsZWN0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUkNLRkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBMQVJGUyAgMHgyMDAwICAgICAvKiBMYXRlIFJlY2VpdmUgRnJhbWUgU3luYyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkxBUkZTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIExSRlMgIDB4MTAwMCAgICAgLyogTG93IFJlY2VpdmUgRnJhbWUgU3luYyBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuTFJGUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSRlNSICAweDQwMCAgICAgIC8qIFJlY2VpdmUgRnJhbWUgU3luYyBSZXF1aXJlZCBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUkZTUiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBJUkZTICAweDIwMCAgICAgIC8qIEludGVybmFsIFJlY2VpdmUgRnJhbWUgU3luYyBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuSVJGUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUkxTQklUICAweDEwICAgICAgIC8qIFJlY2VpdmUgQml0IE9yZGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5STFNCSVQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFJEVFlQRSAgMHhjICAgICAgICAvKiBEYXRhIEZvcm1hdHRpbmcgVHlwZSBTZWxlY3QgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBJUkNMSyAgMHgyICAgICAgICAvKiBJbnRlcm5hbCBSZWNlaXZlIENsb2NrIFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbklSQ0xLICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUlNQRU4gIDB4MSAgICAgICAgLyogUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5SU1BFTiAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFNQT1JUeF9SQ1IyICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSUkZTVCAgMHg0MDAgICAgICAvKiBMZWZ0L1JpZ2h0IE9yZGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUlJGU1QgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSU0ZTRSAgMHgyMDAgICAgICAvKiBSZWNlaXZlIFN0ZXJlbyBGcmFtZSBTeW5jIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgblJTRlNFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJYU0UgIDB4MTAwICAgICAgLyogUnhTRUMgRW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJYU0UgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFNMRU5fUiAgMHgxZiAgICAgICAvKiBTUE9SVCBXb3JkIExlbmd0aCAqLworCisvKiBCaXQgbWFza3MgZm9yIFNQT1JUeF9TVEFUICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUWEhSRSAgMHg0MCAgICAgICAvKiBUcmFuc21pdCBIb2xkIFJlZ2lzdGVyIEVtcHR5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuVFhIUkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVE9WRiAgMHgyMCAgICAgICAvKiBTdGlja3kgVHJhbnNtaXQgT3ZlcmZsb3cgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblRPVkYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFVWRiAgMHgxMCAgICAgICAvKiBTdGlja3kgVHJhbnNtaXQgVW5kZXJmbG93IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5UVVZGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBUWEYgIDB4OCAgICAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsIFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuVFhGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJPVkYgIDB4NCAgICAgICAgLyogU3RpY2t5IFJlY2VpdmUgT3ZlcmZsb3cgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJPVkYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUlVWRiAgMHgyICAgICAgICAvKiBTdGlja3kgUmVjZWl2ZSBVbmRlcmZsb3cgU3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJVVkYgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUlhORSAgMHgxICAgICAgICAvKiBSZWNlaXZlIEZJRk8gTm90IEVtcHR5IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5SWE5FICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgU1BPUlR4X01DTUMxICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBTUF9XU0laRSAgMHhmMDAwICAgICAvKiBXaW5kb3cgU2l6ZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBTUF9XT0ZGICAweDNmZiAgICAgIC8qIFdpbmRvd3MgT2Zmc2V0ICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU1BPUlR4X01DTUMyICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1GRCAgMHhmMDAwICAgICAvKiBNdWx0aSBjaGFubmVsIEZyYW1lIERlbGF5ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEZTRFIgIDB4ODAgICAgICAgLyogRnJhbWUgU3luYyB0byBEYXRhIFJlbGF0aW9uc2hpcCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5GU0RSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTUNNRU0gIDB4MTAgICAgICAgLyogTXVsdGkgY2hhbm5lbCBGcmFtZSBNb2RlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbk1DTUVNICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIE1DRFJYUEUgIDB4OCAgICAgICAgLyogTXVsdGkgY2hhbm5lbCBETUEgUmVjZWl2ZSBQYWNraW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1DRFJYUEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgTUNEVFhQRSAgMHg0ICAgICAgICAvKiBNdWx0aSBjaGFubmVsIERNQSBUcmFuc21pdCBQYWNraW5nICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbk1DRFRYUEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBNQ0NSTSAgMHgzICAgICAgICAvKiAyWCBDbG9jayBSZWNvdmVyeSBNb2RlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgU1BPUlR4X0NITkwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgIENVUl9DSE5MICAweDNmZiAgICAgIC8qIEN1cnJlbnQgQ2hhbm5lbCBJbmRpY2F0b3IgKi8KKworLyogQml0IG1hc2tzIGZvciBVQVJUeF9MQ1IgKi8KKworI2lmIDAKKy8qIGNvbmZsaWN0cyB3aXRoIGxlZ2FjeSBvbmUgaW4gbGFzdCBzZWN0aW9uICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBXTFMgIDB4MyAgICAgICAgLyogV29yZCBMZW5ndGggU2VsZWN0ICovCisjZW5kaWYKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFNUQiAgMHg0ICAgICAgICAvKiBTdG9wIEJpdHMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblNUQiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUEVOICAweDggICAgICAgIC8qIFBhcml0eSBFbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblBFTiAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRVBTICAweDEwICAgICAgIC8qIEV2ZW4gUGFyaXR5IFNlbGVjdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuRVBTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBTVFAgIDB4MjAgICAgICAgLyogU3RpY2t5IFBhcml0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuU1RQICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgU0IgIDB4NDAgICAgICAgLyogU2V0IEJyZWFrICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBuU0IgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVQVJUeF9NQ1IgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBYT0ZGICAweDEgICAgICAgIC8qIFRyYW5zbWl0dGVyIE9mZiAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5YT0ZGICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIE1SVFMgIDB4MiAgICAgICAgLyogTWFudWFsIFJlcXVlc3QgVG8gU2VuZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5NUlRTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJGSVQgIDB4NCAgICAgICAgLyogUmVjZWl2ZSBGSUZPIElSUSBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuUkZJVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSRlJUICAweDggICAgICAgIC8qIFJlY2VpdmUgRklGTyBSVFMgVGhyZXNob2xkICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblJGUlQgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICBMT09QX0VOQSAgMHgxMCAgICAgICAvKiBMb29wYmFjayBNb2RlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkxPT1BfRU5BICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRkNQT0wgIDB4MjAgICAgICAgLyogRmxvdyBDb250cm9sIFBpbiBQb2xhcml0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkZDUE9MICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFSVFMgIDB4NDAgICAgICAgLyogQXV0b21hdGljIFJlcXVlc3QgVG8gU2VuZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5BUlRTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFDVFMgIDB4ODAgICAgICAgLyogQXV0b21hdGljIENsZWFyIFRvIFNlbmQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQUNUUyAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVBUlR4X0xTUiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgRFIgIDB4MSAgICAgICAgLyogRGF0YSBSZWFkeSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgbkRSICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgT0UgIDB4MiAgICAgICAgLyogT3ZlcnJ1biBFcnJvciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgbk9FICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgUEUgIDB4NCAgICAgICAgLyogUGFyaXR5IEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBuUEUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBGRSAgMHg4ICAgICAgICAvKiBGcmFtaW5nIEVycm9yICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBuRkUgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgICBCSSAgMHgxMCAgICAgICAvKiBCcmVhayBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIG5CSSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUSFJFICAweDIwICAgICAgIC8qIFRIUiBFbXB0eSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5USFJFICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRFTVQgIDB4NDAgICAgICAgLyogVHJhbnNtaXR0ZXIgRW1wdHkgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVEVNVCAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEZJICAweDgwICAgICAgIC8qIFRyYW5zbWlzc2lvbiBGaW5pc2hlZCBJbmRpY2F0b3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgblRGSSAgMHgwICAgICAgIAorCisvKiBCaXQgbWFza3MgZm9yIFVBUlR4X01TUiAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNDVFMgIDB4MSAgICAgICAgLyogU3RpY2t5IENUUyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5TQ1RTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBDVFMgIDB4MTAgICAgICAgLyogQ2xlYXIgVG8gU2VuZCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBuQ1RTICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJGQ1MgIDB4MjAgICAgICAgLyogUmVjZWl2ZSBGSUZPIENvdW50IFN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5SRkNTICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVUFSVHhfSUVSX1NFVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVSQkZJX1MgIDB4MSAgICAgICAgLyogRW5hYmxlIFJlY2VpdmUgQnVmZmVyIEZ1bGwgSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkVSQkZJX1MgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRVRCRUlfUyAgMHgyICAgICAgICAvKiBFbmFibGUgVHJhbnNtaXQgQnVmZmVyIEVtcHR5IEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FVEJFSV9TICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFTFNJX1MgIDB4NCAgICAgICAgLyogRW5hYmxlIFJlY2VpdmUgU3RhdHVzIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICBuRUxTSV9TICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVEU1NJX1MgIDB4OCAgICAgICAgLyogRW5hYmxlIE1vZGVtIFN0YXR1cyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRURTU0lfUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgIEVEVFBUSV9TICAweDEwICAgICAgIC8qIEVuYWJsZSBETUEgVHJhbnNtaXQgUElSUSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIG5FRFRQVElfUyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRVRGSV9TICAweDIwICAgICAgIC8qIEVuYWJsZSBUcmFuc21pc3Npb24gRmluaXNoZWQgSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FVEZJX1MgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRVJGQ0lfUyAgMHg0MCAgICAgICAvKiBFbmFibGUgUmVjZWl2ZSBGSUZPIENvdW50IEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FUkZDSV9TICAweDAgICAgICAgCisKKy8qIEJpdCBtYXNrcyBmb3IgVUFSVHhfSUVSX0NMRUFSICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRVJCRklfQyAgMHgxICAgICAgICAvKiBFbmFibGUgUmVjZWl2ZSBCdWZmZXIgRnVsbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICBuRVJCRklfQyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBFVEJFSV9DICAweDIgICAgICAgIC8qIEVuYWJsZSBUcmFuc21pdCBCdWZmZXIgRW1wdHkgSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkVUQkVJX0MgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVMU0lfQyAgMHg0ICAgICAgICAvKiBFbmFibGUgUmVjZWl2ZSBTdGF0dXMgSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5FTFNJX0MgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgRURTU0lfQyAgMHg4ICAgICAgICAvKiBFbmFibGUgTW9kZW0gU3RhdHVzIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIG5FRFNTSV9DICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgRURUUFRJX0MgIDB4MTAgICAgICAgLyogRW5hYmxlIERNQSBUcmFuc21pdCBQSVJRIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgbkVEVFBUSV9DICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBFVEZJX0MgIDB4MjAgICAgICAgLyogRW5hYmxlIFRyYW5zbWlzc2lvbiBGaW5pc2hlZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkVURklfQyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICBFUkZDSV9DICAweDQwICAgICAgIC8qIEVuYWJsZSBSZWNlaXZlIEZJRk8gQ291bnQgSW50ZXJydXB0ICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgbkVSRkNJX0MgIDB4MCAgICAgICAKKworLyogQml0IG1hc2tzIGZvciBVQVJUeF9HQ1RMICovCisKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVUNFTiAgMHgxICAgICAgICAvKiBVQVJUIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5VQ0VOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElSRU4gIDB4MiAgICAgICAgLyogSXJEQSBNb2RlIEVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5JUkVOICAweDAgICAgICAgCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFBPTEMgIDB4NCAgICAgICAgLyogSXJEQSBUWCBQb2xhcml0eSBDaGFuZ2UgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5UUE9MQyAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJQT0xDICAweDggICAgICAgIC8qIElyREEgUlggUG9sYXJpdHkgQ2hhbmdlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBuUlBPTEMgIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEZQRSAgMHgxMCAgICAgICAvKiBGb3JjZSBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkZQRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgRkZFICAweDIwICAgICAgIC8qIEZvcmNlIEZyYW1pbmcgRXJyb3IgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgbkZGRSAgMHgwICAgICAgIAorI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFREJPICAweDQwICAgICAgIC8qIEVuYWJsZSBEaXZpZGUtYnktT25lICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkVEQk8gIDB4MCAgICAgICAKKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBFR0xTSSAgMHg4MCAgICAgICAvKiBFbmFibGUgR2xvYmFsIExTIEludGVycnVwdCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkVHTFNJICAweDAgICAgICAgCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogICAgIE1VTFRJIEJJVCBNQUNSTyBFTlVNRVJBVElPTlMgICAgICAgICAgICAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBCQ09ERSBiaXQgZmllbGQgb3B0aW9ucyAoU1lTQ0ZHIHJlZ2lzdGVyKSAqLworCisjZGVmaW5lIEJDT0RFX1dBS0VVUCAgICAweDAwMDAgIC8qIGJvb3QgYWNjb3JkaW5nIHRvIHdha2UtdXAgY29uZGl0aW9uICovCisjZGVmaW5lIEJDT0RFX0ZVTExCT09UICAweDAwMTAgIC8qIGFsd2F5cyBwZXJmb3JtIGZ1bGwgYm9vdCAqLyAKKyNkZWZpbmUgQkNPREVfUVVJQ0tCT09UIDB4MDAyMCAgLyogYWx3YXlzIHBlcmZvcm0gcXVpY2sgYm9vdCAqLworI2RlZmluZSBCQ09ERV9OT0JPT1QgICAgMHgwMDMwICAvKiBhbHdheXMgcGVyZm9ybSBmdWxsIGJvb3QgKi8KKworLyogQ05UX0NPTU1BTkQgYml0IGZpZWxkIG9wdGlvbnMgKi8KKyAKKyNkZWZpbmUgVzFMQ05UX1pFUk8gICAweDAwMDEgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX0NPVU5URVIgd2l0aCB6ZXJvICovCisjZGVmaW5lIFcxTENOVF9NSU4gICAgMHgwMDA0ICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9DT1VOVEVSIGZyb20gQ05UX01JTiAqLworI2RlZmluZSBXMUxDTlRfTUFYICAgIDB4MDAwOCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfQ09VTlRFUiBmcm9tIENOVF9NQVggKi8KKyAKKyNkZWZpbmUgVzFMTUlOX1pFUk8gICAweDAwMTAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01JTiB3aXRoIHplcm8gKi8KKyNkZWZpbmUgVzFMTUlOX0NOVCAgICAweDAwMjAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01JTiBmcm9tIENOVF9DT1VOVEVSICovCisjZGVmaW5lIFcxTE1JTl9NQVggICAgMHgwMDgwICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9NSU4gZnJvbSBDTlRfTUFYICovCisgCisjZGVmaW5lIFcxTE1BWF9aRVJPICAgMHgwMTAwICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9NQVggd2l0aCB6ZXJvICovCisjZGVmaW5lIFcxTE1BWF9DTlQgICAgMHgwMjAwICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9NQVggZnJvbSBDTlRfQ09VTlRFUiAqLworI2RlZmluZSBXMUxNQVhfTUlOICAgIDB4MDQwMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUFYIGZyb20gQ05UX01JTiAqLworIAorLyogQ05UX0NPTkZJRyBiaXQgZmllbGQgb3B0aW9ucyAqLworIAorI2RlZmluZSBDTlRNT0RFX1FVQURFTkMgIDB4MDAwMCAgLyogcXVhZHJhdHVyZSBlbmNvZGVyIG1vZGUgKi8KKyNkZWZpbmUgQ05UTU9ERV9CSU5FTkMgICAweDAxMDAgIC8qIGJpbmFyeSBlbmNvZGVyIG1vZGUgKi8KKyNkZWZpbmUgQ05UTU9ERV9VRENOVCAgICAweDAyMDAgIC8qIHVwL2Rvd24gY291bnRlciBtb2RlICovCisjZGVmaW5lIENOVE1PREVfRElSQ05UICAgMHgwNDAwICAvKiBkaXJlY3Rpb24gY291bnRlciBtb2RlICovCisjZGVmaW5lIENOVE1PREVfRElSVE1SICAgMHgwNTAwICAvKiBkaXJlY3Rpb24gdGltZXIgbW9kZSAqLworIAorI2RlZmluZSBCTkRNT0RFX0NPTVAgICAgIDB4MDAwMCAgLyogYm91bmRhcnkgY29tcGFyZSBtb2RlICovCisjZGVmaW5lIEJORE1PREVfWkVSTyAgICAgMHgxMDAwICAvKiBib3VuZGFyeSBjb21wYXJlIGFuZCB6ZXJvIG1vZGUgKi8KKyNkZWZpbmUgQk5ETU9ERV9DQVBUICAgICAweDIwMDAgIC8qIGJvdW5kYXJ5IGNhcHR1cmUgbW9kZSAqLworI2RlZmluZSBCTkRNT0RFX0FFWFQgICAgIDB4MzAwMCAgLyogYm91bmRhcnkgYXV0by1leHRlbmQgbW9kZSAqLworCisvKiBUTU9ERSBpbiBUSU1FUnhfQ09ORklHIGJpdCBmaWVsZCBvcHRpb25zICovCisKKyNkZWZpbmUgUFdNX09VVCAgMHgwMDAxCisjZGVmaW5lIFdEVEhfQ0FQIDB4MDAwMgorI2RlZmluZSBFWFRfQ0xLICAweDAwMDMKKworLyogVUFSVHhfTENSIGJpdCBmaWVsZCBvcHRpb25zICovCisgCisjZGVmaW5lIFdMU181ICAgMHgwMDAwICAgIC8qIDUgZGF0YSBiaXRzICovCisjZGVmaW5lIFdMU182ICAgMHgwMDAxICAgIC8qIDYgZGF0YSBiaXRzICovCisjZGVmaW5lIFdMU183ICAgMHgwMDAyICAgIC8qIDcgZGF0YSBiaXRzICovCisjZGVmaW5lIFdMU184ICAgMHgwMDAzICAgIC8qIDggZGF0YSBiaXRzICovCisKKy8qIFBJTlR4IFJlZ2lzdGVyIEJpdCBEZWZpbml0aW9ucyAqLworCisjZGVmaW5lIFBJUTAgMHgwMDAwMDAwMQorI2RlZmluZSBQSVExIDB4MDAwMDAwMDIKKyNkZWZpbmUgUElRMiAweDAwMDAwMDA0CisjZGVmaW5lIFBJUTMgMHgwMDAwMDAwOAorCisjZGVmaW5lIFBJUTQgMHgwMDAwMDAxMAorI2RlZmluZSBQSVE1IDB4MDAwMDAwMjAKKyNkZWZpbmUgUElRNiAweDAwMDAwMDQwCisjZGVmaW5lIFBJUTcgMHgwMDAwMDA4MAorCisjZGVmaW5lIFBJUTggMHgwMDAwMDEwMAorI2RlZmluZSBQSVE5IDB4MDAwMDAyMDAKKyNkZWZpbmUgUElRMTAgMHgwMDAwMDQwMAorI2RlZmluZSBQSVExMSAweDAwMDAwODAwCisKKyNkZWZpbmUgUElRMTIgMHgwMDAwMTAwMAorI2RlZmluZSBQSVExMyAweDAwMDAyMDAwCisjZGVmaW5lIFBJUTE0IDB4MDAwMDQwMDAKKyNkZWZpbmUgUElRMTUgMHgwMDAwODAwMAorCisjZGVmaW5lIFBJUTE2IDB4MDAwMTAwMDAKKyNkZWZpbmUgUElRMTcgMHgwMDAyMDAwMAorI2RlZmluZSBQSVExOCAweDAwMDQwMDAwCisjZGVmaW5lIFBJUTE5IDB4MDAwODAwMDAKKworI2RlZmluZSBQSVEyMCAweDAwMTAwMDAwCisjZGVmaW5lIFBJUTIxIDB4MDAyMDAwMDAKKyNkZWZpbmUgUElRMjIgMHgwMDQwMDAwMAorI2RlZmluZSBQSVEyMyAweDAwODAwMDAwCisKKyNkZWZpbmUgUElRMjQgMHgwMTAwMDAwMAorI2RlZmluZSBQSVEyNSAweDAyMDAwMDAwCisjZGVmaW5lIFBJUTI2IDB4MDQwMDAwMDAKKyNkZWZpbmUgUElRMjcgMHgwODAwMDAwMAorCisjZGVmaW5lIFBJUTI4IDB4MTAwMDAwMDAKKyNkZWZpbmUgUElRMjkgMHgyMDAwMDAwMAorI2RlZmluZSBQSVEzMCAweDQwMDAwMDAwCisjZGVmaW5lIFBJUTMxIDB4ODAwMDAwMDAKKworLyogUE9SVCBBIEJpdCBEZWZpbml0aW9ucyBmb3IgdGhlIHJlZ2lzdGVycyAKK1BPUlRBLCBQT1JUQV9TRVQsIFBPUlRBX0NMRUFSLAorUE9SVEFfRElSX1NFVCwgUE9SVEFfRElSX0NMRUFSLCBQT1JUQV9JTkVOLAorUE9SVEFfRkVSIHJlZ2lzdGVycworKi8KKworI2RlZmluZSBQQTAgMHgwMDAxCisjZGVmaW5lIFBBMSAweDAwMDIKKyNkZWZpbmUgUEEyIDB4MDAwNAorI2RlZmluZSBQQTMgMHgwMDA4CisjZGVmaW5lIFBBNCAweDAwMTAKKyNkZWZpbmUgUEE1IDB4MDAyMAorI2RlZmluZSBQQTYgMHgwMDQwCisjZGVmaW5lIFBBNyAweDAwODAKKyNkZWZpbmUgUEE4IDB4MDEwMAorI2RlZmluZSBQQTkgMHgwMjAwCisjZGVmaW5lIFBBMTAgMHgwNDAwCisjZGVmaW5lIFBBMTEgMHgwODAwCisjZGVmaW5lIFBBMTIgMHgxMDAwCisjZGVmaW5lIFBBMTMgMHgyMDAwCisjZGVmaW5lIFBBMTQgMHg0MDAwCisjZGVmaW5lIFBBMTUgMHg4MDAwCisKKy8qIFBPUlQgQiBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMgCitQT1JUQiwgUE9SVEJfU0VULCBQT1JUQl9DTEVBUiwKK1BPUlRCX0RJUl9TRVQsIFBPUlRCX0RJUl9DTEVBUiwgUE9SVEJfSU5FTiwKK1BPUlRCX0ZFUiByZWdpc3RlcnMKKyovCisKKyNkZWZpbmUgUEIwIDB4MDAwMQorI2RlZmluZSBQQjEgMHgwMDAyCisjZGVmaW5lIFBCMiAweDAwMDQKKyNkZWZpbmUgUEIzIDB4MDAwOAorI2RlZmluZSBQQjQgMHgwMDEwCisjZGVmaW5lIFBCNSAweDAwMjAKKyNkZWZpbmUgUEI2IDB4MDA0MAorI2RlZmluZSBQQjcgMHgwMDgwCisjZGVmaW5lIFBCOCAweDAxMDAKKyNkZWZpbmUgUEI5IDB4MDIwMAorI2RlZmluZSBQQjEwIDB4MDQwMAorI2RlZmluZSBQQjExIDB4MDgwMAorI2RlZmluZSBQQjEyIDB4MTAwMAorI2RlZmluZSBQQjEzIDB4MjAwMAorI2RlZmluZSBQQjE0IDB4NDAwMAorCisKKy8qIFBPUlQgQyBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMgCitQT1JUQywgUE9SVENfU0VULCBQT1JUQ19DTEVBUiwKK1BPUlRDX0RJUl9TRVQsIFBPUlRDX0RJUl9DTEVBUiwgUE9SVENfSU5FTiwKK1BPUlRDX0ZFUiByZWdpc3RlcnMKKyovCisKKworI2RlZmluZSBQQzAgMHgwMDAxCisjZGVmaW5lIFBDMSAweDAwMDIKKyNkZWZpbmUgUEMyIDB4MDAwNAorI2RlZmluZSBQQzMgMHgwMDA4CisjZGVmaW5lIFBDNCAweDAwMTAKKyNkZWZpbmUgUEM1IDB4MDAyMAorI2RlZmluZSBQQzYgMHgwMDQwCisjZGVmaW5lIFBDNyAweDAwODAKKyNkZWZpbmUgUEM4IDB4MDEwMAorI2RlZmluZSBQQzkgMHgwMjAwCisjZGVmaW5lIFBDMTAgMHgwNDAwCisjZGVmaW5lIFBDMTEgMHgwODAwCisjZGVmaW5lIFBDMTIgMHgxMDAwCisjZGVmaW5lIFBDMTMgMHgyMDAwCisKKworLyogUE9SVCBEIEJpdCBEZWZpbml0aW9ucyBmb3IgdGhlIHJlZ2lzdGVycyAKK1BPUlRELCBQT1JURF9TRVQsIFBPUlREX0NMRUFSLAorUE9SVERfRElSX1NFVCwgUE9SVERfRElSX0NMRUFSLCBQT1JURF9JTkVOLAorUE9SVERfRkVSIHJlZ2lzdGVycworKi8KKworI2RlZmluZSBQRDAgMHgwMDAxCisjZGVmaW5lIFBEMSAweDAwMDIKKyNkZWZpbmUgUEQyIDB4MDAwNAorI2RlZmluZSBQRDMgMHgwMDA4CisjZGVmaW5lIFBENCAweDAwMTAKKyNkZWZpbmUgUEQ1IDB4MDAyMAorI2RlZmluZSBQRDYgMHgwMDQwCisjZGVmaW5lIFBENyAweDAwODAKKyNkZWZpbmUgUEQ4IDB4MDEwMAorI2RlZmluZSBQRDkgMHgwMjAwCisjZGVmaW5lIFBEMTAgMHgwNDAwCisjZGVmaW5lIFBEMTEgMHgwODAwCisjZGVmaW5lIFBEMTIgMHgxMDAwCisjZGVmaW5lIFBEMTMgMHgyMDAwCisjZGVmaW5lIFBEMTQgMHg0MDAwCisjZGVmaW5lIFBEMTUgMHg4MDAwCisKKy8qIFBPUlQgRSBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMgCitQT1JURSwgUE9SVEVfU0VULCBQT1JURV9DTEVBUiwKK1BPUlRFX0RJUl9TRVQsIFBPUlRFX0RJUl9DTEVBUiwgUE9SVEVfSU5FTiwKK1BPUlRFX0ZFUiByZWdpc3RlcnMKKyovCisKKworI2RlZmluZSBQRTAgMHgwMDAxCisjZGVmaW5lIFBFMSAweDAwMDIKKyNkZWZpbmUgUEUyIDB4MDAwNAorI2RlZmluZSBQRTMgMHgwMDA4CisjZGVmaW5lIFBFNCAweDAwMTAKKyNkZWZpbmUgUEU1IDB4MDAyMAorI2RlZmluZSBQRTYgMHgwMDQwCisjZGVmaW5lIFBFNyAweDAwODAKKyNkZWZpbmUgUEU4IDB4MDEwMAorI2RlZmluZSBQRTkgMHgwMjAwCisjZGVmaW5lIFBFMTAgMHgwNDAwCisjZGVmaW5lIFBFMTEgMHgwODAwCisjZGVmaW5lIFBFMTIgMHgxMDAwCisjZGVmaW5lIFBFMTMgMHgyMDAwCisjZGVmaW5lIFBFMTQgMHg0MDAwCisjZGVmaW5lIFBFMTUgMHg4MDAwCisKKy8qIFBPUlQgRiBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMgCitQT1JURiwgUE9SVEZfU0VULCBQT1JURl9DTEVBUiwKK1BPUlRGX0RJUl9TRVQsIFBPUlRGX0RJUl9DTEVBUiwgUE9SVEZfSU5FTiwKK1BPUlRGX0ZFUiByZWdpc3RlcnMKKyovCisKKworI2RlZmluZSBQRjAgMHgwMDAxCisjZGVmaW5lIFBGMSAweDAwMDIKKyNkZWZpbmUgUEYyIDB4MDAwNAorI2RlZmluZSBQRjMgMHgwMDA4CisjZGVmaW5lIFBGNCAweDAwMTAKKyNkZWZpbmUgUEY1IDB4MDAyMAorI2RlZmluZSBQRjYgMHgwMDQwCisjZGVmaW5lIFBGNyAweDAwODAKKyNkZWZpbmUgUEY4IDB4MDEwMAorI2RlZmluZSBQRjkgMHgwMjAwCisjZGVmaW5lIFBGMTAgMHgwNDAwCisjZGVmaW5lIFBGMTEgMHgwODAwCisjZGVmaW5lIFBGMTIgMHgxMDAwCisjZGVmaW5lIFBGMTMgMHgyMDAwCisjZGVmaW5lIFBGMTQgMHg0MDAwCisjZGVmaW5lIFBGMTUgMHg4MDAwCisKKy8qIFBPUlQgRyBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMgCitQT1JURywgUE9SVEdfU0VULCBQT1JUR19DTEVBUiwKK1BPUlRHX0RJUl9TRVQsIFBPUlRHX0RJUl9DTEVBUiwgUE9SVEdfSU5FTiwKK1BPUlRHX0ZFUiByZWdpc3RlcnMKKyovCisKKworI2RlZmluZSBQRzAgMHgwMDAxCisjZGVmaW5lIFBHMSAweDAwMDIKKyNkZWZpbmUgUEcyIDB4MDAwNAorI2RlZmluZSBQRzMgMHgwMDA4CisjZGVmaW5lIFBHNCAweDAwMTAKKyNkZWZpbmUgUEc1IDB4MDAyMAorI2RlZmluZSBQRzYgMHgwMDQwCisjZGVmaW5lIFBHNyAweDAwODAKKyNkZWZpbmUgUEc4IDB4MDEwMAorI2RlZmluZSBQRzkgMHgwMjAwCisjZGVmaW5lIFBHMTAgMHgwNDAwCisjZGVmaW5lIFBHMTEgMHgwODAwCisjZGVmaW5lIFBHMTIgMHgxMDAwCisjZGVmaW5lIFBHMTMgMHgyMDAwCisjZGVmaW5lIFBHMTQgMHg0MDAwCisjZGVmaW5lIFBHMTUgMHg4MDAwCisKKy8qIFBPUlQgSCBCaXQgRGVmaW5pdGlvbnMgZm9yIHRoZSByZWdpc3RlcnMgCitQT1JUSCwgUE9SVEhfU0VULCBQT1JUSF9DTEVBUiwKK1BPUlRIX0RJUl9TRVQsIFBPUlRIX0RJUl9DTEVBUiwgUE9SVEhfSU5FTiwKK1BPUlRIX0ZFUiByZWdpc3RlcnMKKyovCisKKworI2RlZmluZSBQSDAgMHgwMDAxCisjZGVmaW5lIFBIMSAweDAwMDIKKyNkZWZpbmUgUEgyIDB4MDAwNAorI2RlZmluZSBQSDMgMHgwMDA4CisjZGVmaW5lIFBINCAweDAwMTAKKyNkZWZpbmUgUEg1IDB4MDAyMAorI2RlZmluZSBQSDYgMHgwMDQwCisjZGVmaW5lIFBINyAweDAwODAKKyNkZWZpbmUgUEg4IDB4MDEwMAorI2RlZmluZSBQSDkgMHgwMjAwCisjZGVmaW5lIFBIMTAgMHgwNDAwCisjZGVmaW5lIFBIMTEgMHgwODAwCisjZGVmaW5lIFBIMTIgMHgxMDAwCisjZGVmaW5lIFBIMTMgMHgyMDAwCisKKworLyogUE9SVCBJIEJpdCBEZWZpbml0aW9ucyBmb3IgdGhlIHJlZ2lzdGVycyAKK1BPUlRJLCBQT1JUSV9TRVQsIFBPUlRJX0NMRUFSLAorUE9SVElfRElSX1NFVCwgUE9SVElfRElSX0NMRUFSLCBQT1JUSV9JTkVOLAorUE9SVElfRkVSIHJlZ2lzdGVycworKi8KKworCisjZGVmaW5lIFBJMCAweDAwMDEKKyNkZWZpbmUgUEkxIDB4MDAwMgorI2RlZmluZSBQSTIgMHgwMDA0CisjZGVmaW5lIFBJMyAweDAwMDgKKyNkZWZpbmUgUEk0IDB4MDAxMAorI2RlZmluZSBQSTUgMHgwMDIwCisjZGVmaW5lIFBJNiAweDAwNDAKKyNkZWZpbmUgUEk3IDB4MDA4MAorI2RlZmluZSBQSTggMHgwMTAwCisjZGVmaW5lIFBJOSAweDAyMDAKKyNkZWZpbmUgUEkxMCAweDA0MDAKKyNkZWZpbmUgUEkxMSAweDA4MDAKKyNkZWZpbmUgUEkxMiAweDEwMDAKKyNkZWZpbmUgUEkxMyAweDIwMDAKKyNkZWZpbmUgUEkxNCAweDQwMDAKKyNkZWZpbmUgUEkxNSAweDgwMDAKKworLyogUE9SVCBKIEJpdCBEZWZpbml0aW9ucyBmb3IgdGhlIHJlZ2lzdGVycyAKK1BPUlRKLCBQT1JUSl9TRVQsIFBPUlRKX0NMRUFSLAorUE9SVEpfRElSX1NFVCwgUE9SVEpfRElSX0NMRUFSLCBQT1JUSl9JTkVOLAorUE9SVEpfRkVSIHJlZ2lzdGVycworKi8KKworCisjZGVmaW5lIFBKMCAweDAwMDEKKyNkZWZpbmUgUEoxIDB4MDAwMgorI2RlZmluZSBQSjIgMHgwMDA0CisjZGVmaW5lIFBKMyAweDAwMDgKKyNkZWZpbmUgUEo0IDB4MDAxMAorI2RlZmluZSBQSjUgMHgwMDIwCisjZGVmaW5lIFBKNiAweDAwNDAKKyNkZWZpbmUgUEo3IDB4MDA4MAorI2RlZmluZSBQSjggMHgwMTAwCisjZGVmaW5lIFBKOSAweDAyMDAKKyNkZWZpbmUgUEoxMCAweDA0MDAKKyNkZWZpbmUgUEoxMSAweDA4MDAKKyNkZWZpbmUgUEoxMiAweDEwMDAKKyNkZWZpbmUgUEoxMyAweDIwMDAKKyAKKworLyogUG9ydCBNdXhpbmcgQml0IEZpZWxkcyBmb3IgUE9SVHhfTVVYIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIE1VWDAgMHgwMDAwMDAwMworI2RlZmluZSBNVVgwXzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVgwXzEgMHgwMDAwMDAwMQorI2RlZmluZSBNVVgwXzIgMHgwMDAwMDAwMgorI2RlZmluZSBNVVgwXzMgMHgwMDAwMDAwMworCisjZGVmaW5lIE1VWDEgMHgwMDAwMDAwQworI2RlZmluZSBNVVgxXzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVgxXzEgMHgwMDAwMDAwNAorI2RlZmluZSBNVVgxXzIgMHgwMDAwMDAwOAorI2RlZmluZSBNVVgxXzMgMHgwMDAwMDAwQworCisjZGVmaW5lIE1VWDIgMHgwMDAwMDAzMAorI2RlZmluZSBNVVgyXzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVgyXzEgMHgwMDAwMDAxMAorI2RlZmluZSBNVVgyXzIgMHgwMDAwMDAyMAorI2RlZmluZSBNVVgyXzMgMHgwMDAwMDAzMAorCisjZGVmaW5lIE1VWDMgMHgwMDAwMDBDMAorI2RlZmluZSBNVVgzXzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVgzXzEgMHgwMDAwMDA0MAorI2RlZmluZSBNVVgzXzIgMHgwMDAwMDA4MAorI2RlZmluZSBNVVgzXzMgMHgwMDAwMDBDMAorCisjZGVmaW5lIE1VWDQgMHgwMDAwMDMwMAorI2RlZmluZSBNVVg0XzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVg0XzEgMHgwMDAwMDEwMAorI2RlZmluZSBNVVg0XzIgMHgwMDAwMDIwMAorI2RlZmluZSBNVVg0XzMgMHgwMDAwMDMwMAorCisjZGVmaW5lIE1VWDUgMHgwMDAwMEMwMAorI2RlZmluZSBNVVg1XzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVg1XzEgMHgwMDAwMDQwMAorI2RlZmluZSBNVVg1XzIgMHgwMDAwMDgwMAorI2RlZmluZSBNVVg1XzMgMHgwMDAwMEMwMAorCisjZGVmaW5lIE1VWDYgMHgwMDAwMzAwMAorI2RlZmluZSBNVVg2XzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVg2XzEgMHgwMDAwMTAwMAorI2RlZmluZSBNVVg2XzIgMHgwMDAwMjAwMAorI2RlZmluZSBNVVg2XzMgMHgwMDAwMzAwMAorCisjZGVmaW5lIE1VWDcgMHgwMDAwQzAwMAorI2RlZmluZSBNVVg3XzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVg3XzEgMHgwMDAwNDAwMAorI2RlZmluZSBNVVg3XzIgMHgwMDAwODAwMAorI2RlZmluZSBNVVg3XzMgMHgwMDAwQzAwMAorCisjZGVmaW5lIE1VWDggMHgwMDAzMDAwMAorI2RlZmluZSBNVVg4XzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVg4XzEgMHgwMDAxMDAwMAorI2RlZmluZSBNVVg4XzIgMHgwMDAyMDAwMAorI2RlZmluZSBNVVg4XzMgMHgwMDAzMDAwMAorCisjZGVmaW5lIE1VWDkgMHgwMDBDMDAwMAorI2RlZmluZSBNVVg5XzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVg5XzEgMHgwMDA0MDAwMAorI2RlZmluZSBNVVg5XzIgMHgwMDA4MDAwMAorI2RlZmluZSBNVVg5XzMgMHgwMDBDMDAwMAorCisjZGVmaW5lIE1VWDEwIDB4MDAzMDAwMDAKKyNkZWZpbmUgTVVYMTBfMCAweDAwMDAwMDAwCisjZGVmaW5lIE1VWDEwXzEgMHgwMDEwMDAwMAorI2RlZmluZSBNVVgxMF8yIDB4MDAyMDAwMDAKKyNkZWZpbmUgTVVYMTBfMyAweDAwMzAwMDAwCisKKyNkZWZpbmUgTVVYMTEgMHgwMEMwMDAwMAorI2RlZmluZSBNVVgxMV8wIDB4MDAwMDAwMDAKKyNkZWZpbmUgTVVYMTFfMSAweDAwNDAwMDAwCisjZGVmaW5lIE1VWDExXzIgMHgwMDgwMDAwMAorI2RlZmluZSBNVVgxMV8zIDB4MDBDMDAwMDAKKworI2RlZmluZSBNVVgxMiAweDAzMDAwMDAwCisjZGVmaW5lIE1VWDEyXzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVgxMl8xIDB4MDEwMDAwMDAKKyNkZWZpbmUgTVVYMTJfMiAweDAyMDAwMDAwCisjZGVmaW5lIE1VWDEyXzMgMHgwMzAwMDAwMAorCisjZGVmaW5lIE1VWDEzIDB4MEMwMDAwMDAKKyNkZWZpbmUgTVVYMTNfMCAweDAwMDAwMDAwCisjZGVmaW5lIE1VWDEzXzEgMHgwNDAwMDAwMAorI2RlZmluZSBNVVgxM18yIDB4MDgwMDAwMDAKKyNkZWZpbmUgTVVYMTNfMyAweDBDMDAwMDAwCisKKyNkZWZpbmUgTVVYMTQgMHgzMDAwMDAwMAorI2RlZmluZSBNVVgxNF8wIDB4MDAwMDAwMDAKKyNkZWZpbmUgTVVYMTRfMSAweDEwMDAwMDAwCisjZGVmaW5lIE1VWDE0XzIgMHgyMDAwMDAwMAorI2RlZmluZSBNVVgxNF8zIDB4MzAwMDAwMDAKKworI2RlZmluZSBNVVgxNSAweEMwMDAwMDAwCisjZGVmaW5lIE1VWDE1XzAgMHgwMDAwMDAwMAorI2RlZmluZSBNVVgxNV8xIDB4NDAwMDAwMDAKKyNkZWZpbmUgTVVYMTVfMiAweDgwMDAwMDAwCisjZGVmaW5lIE1VWDE1XzMgMHhDMDAwMDAwMAorCisjZGVmaW5lIE1VWChiMTUsYjE0LGIxMyxiMTIsYjExLGIxMCxiOSxiOCxiNyxiNixiNSxiNCxiMyxiMixiMSxiMCkgXAorICAgICgoKChiMTUpJjMpIDw8IDMwKSB8IFwKKyAgICAgKCgoYjE0KSYzKSA8PCAyOCkgfCBcCisgICAgICgoKGIxMykmMykgPDwgMjYpIHwgXAorICAgICAoKChiMTIpJjMpIDw8IDI0KSB8IFwKKyAgICAgKCgoYjExKSYzKSA8PCAyMikgfCBcCisgICAgICgoKGIxMCkmMykgPDwgMjApIHwgXAorICAgICAoKChiOSkgJjMpIDw8IDE4KSB8IFwKKyAgICAgKCgoYjgpICYzKSA8PCAxNikgfCBcCisgICAgICgoKGI3KSAmMykgPDwgMTQpIHwgXAorICAgICAoKChiNikgJjMpIDw8IDEyKSB8IFwKKyAgICAgKCgoYjUpICYzKSA8PCAxMCkgfCBcCisgICAgICgoKGI0KSAmMykgPDwgOCkgIHwgXAorICAgICAoKChiMykgJjMpIDw8IDYpICB8IFwKKyAgICAgKCgoYjIpICYzKSA8PCA0KSAgfCBcCisgICAgICgoKGIxKSAmMykgPDwgMikgIHwgXAorICAgICAoKChiMCkgJjMpKSkKKworLyogQml0IGZpZWxkcyBmb3IgUElOVDBfQVNTSUdOIGFuZCBQSU5UMV9BU1NJR04gcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgQjBNQVAgMHgwMDAwMDBGRiAgICAgLyogQnl0ZSAwIExvd2VyIEhhbGYgUG9ydCBNYXBwaW5nICovCisjZGVmaW5lIEIwTUFQX1BBTCAweDAwMDAwMDAwIC8qIE1hcCBQb3J0IEEgTG93IHRvIEJ5dGUgMCAqLworI2RlZmluZSBCME1BUF9QQkwgMHgwMDAwMDAwMSAvKiBNYXAgUG9ydCBCIExvdyB0byBCeXRlIDAgKi8KKyNkZWZpbmUgQjFNQVAgMHgwMDAwRkYwMCAgICAgLyogQnl0ZSAxIFVwcGVyIEhhbGYgUG9ydCBNYXBwaW5nICovCisjZGVmaW5lIEIxTUFQX1BBSCAweDAwMDAwMDAwIC8qIE1hcCBQb3J0IEEgSGlnaCB0byBCeXRlIDEgKi8KKyNkZWZpbmUgQjFNQVBfUEJIIDB4MDAwMDAxMDAgLyogTWFwIFBvcnQgQiBIaWdoIHRvIEJ5dGUgMSAqLworI2RlZmluZSBCMk1BUCAweDAwRkYwMDAwICAgICAvKiBCeXRlIDIgTG93ZXIgSGFsZiBQb3J0IE1hcHBpbmcgKi8KKyNkZWZpbmUgQjJNQVBfUEFMIDB4MDAwMDAwMDAgLyogTWFwIFBvcnQgQSBMb3cgdG8gQnl0ZSAyICovCisjZGVmaW5lIEIyTUFQX1BCTCAweDAwMDEwMDAwIC8qIE1hcCBQb3J0IEIgTG93IHRvIEJ5dGUgMiAqLworI2RlZmluZSBCM01BUCAweEZGMDAwMDAwICAgICAvKiBCeXRlIDMgVXBwZXIgSGFsZiBQb3J0IE1hcHBpbmcgKi8KKyNkZWZpbmUgQjNNQVBfUEFIIDB4MDAwMDAwMDAgLyogTWFwIFBvcnQgQSBIaWdoIHRvIEJ5dGUgMyAqLworI2RlZmluZSBCM01BUF9QQkggMHgwMTAwMDAwMCAvKiBNYXAgUG9ydCBCIEhpZ2ggdG8gQnl0ZSAzICovCisKKy8qIEJpdCBmaWVsZHMgZm9yIFBJTlQyX0FTU0lHTiBhbmQgUElOVDNfQVNTSUdOIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIEIwTUFQX1BDTCAweDAwMDAwMDAwIC8qIE1hcCBQb3J0IEMgTG93IHRvIEJ5dGUgMCAqLworI2RlZmluZSBCME1BUF9QREwgMHgwMDAwMDAwMSAvKiBNYXAgUG9ydCBEIExvdyB0byBCeXRlIDAgKi8KKyNkZWZpbmUgQjBNQVBfUEVMIDB4MDAwMDAwMDIgLyogTWFwIFBvcnQgRSBMb3cgdG8gQnl0ZSAwICovCisjZGVmaW5lIEIwTUFQX1BGTCAweDAwMDAwMDAzIC8qIE1hcCBQb3J0IEYgTG93IHRvIEJ5dGUgMCAqLworI2RlZmluZSBCME1BUF9QR0wgMHgwMDAwMDAwNCAvKiBNYXAgUG9ydCBHIExvdyB0byBCeXRlIDAgKi8KKyNkZWZpbmUgQjBNQVBfUEhMIDB4MDAwMDAwMDUgLyogTWFwIFBvcnQgSCBMb3cgdG8gQnl0ZSAwICovCisjZGVmaW5lIEIwTUFQX1BJTCAweDAwMDAwMDA2IC8qIE1hcCBQb3J0IEkgTG93IHRvIEJ5dGUgMCAqLworI2RlZmluZSBCME1BUF9QSkwgMHgwMDAwMDAwNyAvKiBNYXAgUG9ydCBKIExvdyB0byBCeXRlIDAgKi8KKworI2RlZmluZSBCMU1BUF9QQ0ggMHgwMDAwMDAwMCAvKiBNYXAgUG9ydCBDIEhpZ2ggdG8gQnl0ZSAxICovIAorI2RlZmluZSBCMU1BUF9QREggMHgwMDAwMDEwMCAvKiBNYXAgUG9ydCBEIEhpZ2ggdG8gQnl0ZSAxICovCisjZGVmaW5lIEIxTUFQX1BFSCAweDAwMDAwMjAwIC8qIE1hcCBQb3J0IEUgSGlnaCB0byBCeXRlIDEgKi8KKyNkZWZpbmUgQjFNQVBfUEZIIDB4MDAwMDAzMDAgLyogTWFwIFBvcnQgRiBIaWdoIHRvIEJ5dGUgMSAqLworI2RlZmluZSBCMU1BUF9QR0ggMHgwMDAwMDQwMCAvKiBNYXAgUG9ydCBHIEhpZ2ggdG8gQnl0ZSAxICovCisjZGVmaW5lIEIxTUFQX1BISCAweDAwMDAwNTAwIC8qIE1hcCBQb3J0IEggSGlnaCB0byBCeXRlIDEgKi8KKyNkZWZpbmUgQjFNQVBfUElIIDB4MDAwMDA2MDAgLyogTWFwIFBvcnQgSSBIaWdoIHRvIEJ5dGUgMSAqLworI2RlZmluZSBCMU1BUF9QSkggMHgwMDAwMDcwMCAvKiBNYXAgUG9ydCBKIEhpZ2ggdG8gQnl0ZSAxICovCisKKyNkZWZpbmUgQjJNQVBfUENMIDB4MDAwMDAwMDAgLyogTWFwIFBvcnQgQyBMb3cgdG8gQnl0ZSAyICovIAorI2RlZmluZSBCMk1BUF9QREwgMHgwMDAxMDAwMCAvKiBNYXAgUG9ydCBEIExvdyB0byBCeXRlIDIgKi8gCisjZGVmaW5lIEIyTUFQX1BFTCAweDAwMDIwMDAwIC8qIE1hcCBQb3J0IEUgTG93IHRvIEJ5dGUgMiAqLyAKKyNkZWZpbmUgQjJNQVBfUEZMIDB4MDAwMzAwMDAgLyogTWFwIFBvcnQgRiBMb3cgdG8gQnl0ZSAyICovIAorI2RlZmluZSBCMk1BUF9QR0wgMHgwMDA0MDAwMCAvKiBNYXAgUG9ydCBHIExvdyB0byBCeXRlIDIgKi8gCisjZGVmaW5lIEIyTUFQX1BITCAweDAwMDUwMDAwIC8qIE1hcCBQb3J0IEggTG93IHRvIEJ5dGUgMiAqLyAKKyNkZWZpbmUgQjJNQVBfUElMIDB4MDAwNjAwMDAgLyogTWFwIFBvcnQgSSBMb3cgdG8gQnl0ZSAyICovIAorI2RlZmluZSBCMk1BUF9QSkwgMHgwMDA3MDAwMCAvKiBNYXAgUG9ydCBKIExvdyB0byBCeXRlIDIgKi8gCisKKyNkZWZpbmUgQjNNQVBfUENIIDB4MDAwMDAwMDAgLyogTWFwIFBvcnQgQyBIaWdoIHRvIEJ5dGUgMyAqLyAKKyNkZWZpbmUgQjNNQVBfUERIIDB4MDEwMDAwMDAgLyogTWFwIFBvcnQgRCBIaWdoIHRvIEJ5dGUgMyAqLyAKKyNkZWZpbmUgQjNNQVBfUEVIIDB4MDIwMDAwMDAgLyogTWFwIFBvcnQgRSBIaWdoIHRvIEJ5dGUgMyAqLyAKKyNkZWZpbmUgQjNNQVBfUEZIIDB4MDMwMDAwMDAgLyogTWFwIFBvcnQgRiBIaWdoIHRvIEJ5dGUgMyAqLyAKKyNkZWZpbmUgQjNNQVBfUEdIIDB4MDQwMDAwMDAgLyogTWFwIFBvcnQgRyBIaWdoIHRvIEJ5dGUgMyAqLyAKKyNkZWZpbmUgQjNNQVBfUEhIIDB4MDUwMDAwMDAgLyogTWFwIFBvcnQgSCBIaWdoIHRvIEJ5dGUgMyAqLyAKKyNkZWZpbmUgQjNNQVBfUElIIDB4MDYwMDAwMDAgLyogTWFwIFBvcnQgSSBIaWdoIHRvIEJ5dGUgMyAqLyAKKyNkZWZpbmUgQjNNQVBfUEpIIDB4MDcwMDAwMDAgLyogTWFwIFBvcnQgSiBIaWdoIHRvIEJ5dGUgMyAqLyAKKworCisvKiBmb3IgbGVnYWN5IGNvbXBhdGliaWxpdHkgKi8KKyAKKyNkZWZpbmUgV0xTKHgpICAoKCh4KS01KSAmIDB4MDMpIC8qIFdvcmQgTGVuZ3RoIFNlbGVjdCAqLworI2RlZmluZSBXMUxNQVhfTUFYIFcxTE1BWF9NSU4KKyNkZWZpbmUgRUJJVV9BTUNCQ1RMMCBFQklVX0FNQkNUTDAKKyNkZWZpbmUgRUJJVV9BTUNCQ1RMMSBFQklVX0FNQkNUTDEKKyNkZWZpbmUgUElOVDBfSVJRIFBJTlQwX1JFUVVFU1QKKyNkZWZpbmUgUElOVDFfSVJRIFBJTlQxX1JFUVVFU1QKKyNkZWZpbmUgUElOVDJfSVJRIFBJTlQyX1JFUVVFU1QKKyNkZWZpbmUgUElOVDNfSVJRIFBJTlQzX1JFUVVFU1QKKworI2VuZGlmIC8qIF9ERUZfQkY1NFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9jZGVmQkY1NjEuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvY2RlZkJGNTYxLmgKaW5kZXggNWRjMGVkOC4uYjE0Zjg3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9jZGVmQkY1NjEuaAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2NkZWZCRjU2MS5oCkBAIC01OSwxMiArNTksMTQgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBpd3I7CiAKLQliZmluX3dyaXRlMTYoVlJfQ1RMLCB2YWwpOwotCV9fYnVpbHRpbl9iZmluX3NzeW5jKCk7CiAJLyogRW5hYmxlIHRoZSBQTEwgV2FrZXVwIGJpdCBpbiBTSUMgSVdSICovCiAJaXdyID0gYmZpbl9yZWFkMzIoU0lDQV9JV1IwKTsKIAkvKiBPbmx5IGFsbG93IFBQTCBXYWtldXApICovCiAJYmZpbl93cml0ZTMyKFNJQ0FfSVdSMCwgSVdSX0VOQUJMRSgwKSk7CisKKwliZmluX3dyaXRlMTYoVlJfQ1RMLCB2YWwpOworCV9fYnVpbHRpbl9iZmluX3NzeW5jKCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJYXNtKCJJRExFOyIpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvZGVmQkY1NjEuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvZGVmQkY1NjEuaAppbmRleCBhNmRlNGM2Li44OTE1MGVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2RlZkJGNTYxLmgKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9kZWZCRjU2MS5oCkBAIC05MDQsMjMgKzkwNCw2IEBACiAjZGVmaW5lIElXUl9FTkFCTEUoeCkJICAgICAgICgxIDw8ICh4KSkJLyogV2FrZXVwIEVuYWJsZSBQZXJpcGhlcmFsICN4ICovCiAjZGVmaW5lIElXUl9ESVNBQkxFKHgpICgweEZGRkZGRkZGIF4gKDEgPDwgKHgpKSkJLyogV2FrZXVwIERpc2FibGUgUGVyaXBoZXJhbCAjeCAqLwogCi0vKiAqKioqKioqKiogIFdBVENIRE9HIFRJTUVSIE1BU0tTICAqKioqKioqKioqKioqKioqKioqKjggKi8KLQotLyogV2F0Y2hkb2cgVGltZXIgV0RPR19DVEwgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgSUNUTCh4KSAoKHg8PDEpICYgMHgwMDA2KQotI2RlZmluZSBFTkFCTEVfUkVTRVQgICAgIDB4MDAwMDAwMDAJLyogU2V0IFdhdGNoZG9nIFRpbWVyIHRvIGdlbmVyYXRlIHJlc2V0ICovCi0jZGVmaW5lIEVOQUJMRV9OTUkgICAgICAgMHgwMDAwMDAwMgkvKiBTZXQgV2F0Y2hkb2cgVGltZXIgdG8gZ2VuZXJhdGUgbm9uLW1hc2thYmxlIGludGVycnVwdCAqLwotI2RlZmluZSBFTkFCTEVfR1BJICAgICAgIDB4MDAwMDAwMDQJLyogU2V0IFdhdGNoZG9nIFRpbWVyIHRvIGdlbmVyYXRlIGdlbmVyYWwtcHVycG9zZSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgRElTQUJMRV9FVlQgICAgICAweDAwMDAwMDA2CS8qIERpc2FibGUgV2F0Y2hkb2cgVGltZXIgaW50ZXJydXB0cyAqLwotCi0jZGVmaW5lIFRNUl9FTgkJMHgwMDAwCi0jZGVmaW5lIFRNUl9ESVMJCTB4MEFEMAotI2RlZmluZSBUUk8JCTB4ODAwMAotCi0jZGVmaW5lIElDVExfUDAJCTB4MDEKLSNkZWZpbmUgSUNUTF9QMQkJMHgwMgotI2RlZmluZSBUUk9fUAkJMHgwRgotCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBVQVJUIENPTlRST0xMRVIgTUFTS1MgKioqKioqKioqKioqKioqKioqKioqKiAqLwogCiAvKiBVQVJUX0xDUiBSZWdpc3RlciAqLwpAQCAtMTIxNCwxOCArMTE5NywxOCBAQAogI2RlZmluZSBUSU1JTDkJCTB4MDAwMgogI2RlZmluZSBUSU1JTDEwCQkweDAwMDQKICNkZWZpbmUgVElNSUwxMQkJMHgwMDA4Ci0jZGVmaW5lIFRPVkxfRVJSMAkweDAwMDAwMDEwCi0jZGVmaW5lIFRPVkxfRVJSMQkweDAwMDAwMDIwCi0jZGVmaW5lIFRPVkxfRVJSMgkweDAwMDAwMDQwCi0jZGVmaW5lIFRPVkxfRVJSMwkweDAwMDAwMDgwCi0jZGVmaW5lIFRPVkxfRVJSNAkweDAwMTAwMDAwCi0jZGVmaW5lIFRPVkxfRVJSNQkweDAwMjAwMDAwCi0jZGVmaW5lIFRPVkxfRVJSNgkweDAwNDAwMDAwCi0jZGVmaW5lIFRPVkxfRVJSNwkweDAwODAwMDAwCi0jZGVmaW5lIFRPVkxfRVJSOAkweDAwMTAKLSNkZWZpbmUgVE9WTF9FUlI5CTB4MDAyMAotI2RlZmluZSBUT1ZMX0VSUjEwCTB4MDA0MAotI2RlZmluZSBUT1ZMX0VSUjExCTB4MDA4MAorI2RlZmluZSBUT1ZGX0VSUjAJMHgwMDAwMDAxMAorI2RlZmluZSBUT1ZGX0VSUjEJMHgwMDAwMDAyMAorI2RlZmluZSBUT1ZGX0VSUjIJMHgwMDAwMDA0MAorI2RlZmluZSBUT1ZGX0VSUjMJMHgwMDAwMDA4MAorI2RlZmluZSBUT1ZGX0VSUjQJMHgwMDEwMDAwMAorI2RlZmluZSBUT1ZGX0VSUjUJMHgwMDIwMDAwMAorI2RlZmluZSBUT1ZGX0VSUjYJMHgwMDQwMDAwMAorI2RlZmluZSBUT1ZGX0VSUjcJMHgwMDgwMDAwMAorI2RlZmluZSBUT1ZGX0VSUjgJMHgwMDEwCisjZGVmaW5lIFRPVkZfRVJSOQkweDAwMjAKKyNkZWZpbmUgVE9WRl9FUlIxMAkweDAwNDAKKyNkZWZpbmUgVE9WRl9FUlIxMQkweDAwODAKICNkZWZpbmUgVFJVTjAJCTB4MDAwMDEwMDAKICNkZWZpbmUgVFJVTjEJCTB4MDAwMDIwMDAKICNkZWZpbmUgVFJVTjIJCTB4MDAwMDQwMDAKQEAgLTEyNTEsMTggKzEyMzQsMTggQEAKICNkZWZpbmUgVElNSUw5X1AJMHgwMQogI2RlZmluZSBUSU1JTDEwX1AJMHgwMgogI2RlZmluZSBUSU1JTDExX1AJMHgwMwotI2RlZmluZSBUT1ZMX0VSUjBfUAkweDA0Ci0jZGVmaW5lIFRPVkxfRVJSMV9QCTB4MDUKLSNkZWZpbmUgVE9WTF9FUlIyX1AJMHgwNgotI2RlZmluZSBUT1ZMX0VSUjNfUAkweDA3Ci0jZGVmaW5lIFRPVkxfRVJSNF9QCTB4MTQKLSNkZWZpbmUgVE9WTF9FUlI1X1AJMHgxNQotI2RlZmluZSBUT1ZMX0VSUjZfUAkweDE2Ci0jZGVmaW5lIFRPVkxfRVJSN19QCTB4MTcKLSNkZWZpbmUgVE9WTF9FUlI4X1AJMHgwNAotI2RlZmluZSBUT1ZMX0VSUjlfUAkweDA1Ci0jZGVmaW5lIFRPVkxfRVJSMTBfUAkweDA2Ci0jZGVmaW5lIFRPVkxfRVJSMTFfUAkweDA3CisjZGVmaW5lIFRPVkZfRVJSMF9QCTB4MDQKKyNkZWZpbmUgVE9WRl9FUlIxX1AJMHgwNQorI2RlZmluZSBUT1ZGX0VSUjJfUAkweDA2CisjZGVmaW5lIFRPVkZfRVJSM19QCTB4MDcKKyNkZWZpbmUgVE9WRl9FUlI0X1AJMHgxNAorI2RlZmluZSBUT1ZGX0VSUjVfUAkweDE1CisjZGVmaW5lIFRPVkZfRVJSNl9QCTB4MTYKKyNkZWZpbmUgVE9WRl9FUlI3X1AJMHgxNworI2RlZmluZSBUT1ZGX0VSUjhfUAkweDA0CisjZGVmaW5lIFRPVkZfRVJSOV9QCTB4MDUKKyNkZWZpbmUgVE9WRl9FUlIxMF9QCTB4MDYKKyNkZWZpbmUgVE9WRl9FUlIxMV9QCTB4MDcKICNkZWZpbmUgVFJVTjBfUAkJMHgwQwogI2RlZmluZSBUUlVOMV9QCQkweDBECiAjZGVmaW5lIFRSVU4yX1AJCTB4MEUKQEAgLTEyNzYsNiArMTI1OSwzMiBAQAogI2RlZmluZSBUUlVOMTBfUAkweDBFCiAjZGVmaW5lIFRSVU4xMV9QCTB4MEYKIAorLyogQWx0ZXJuYXRlIERlcHJlY2F0ZWQgTWFjcm9zIFByb3ZpZGVkIEZvciBCYWNrd2FyZHMgQ29kZSBDb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRPVkxfRVJSMCBUT1ZGX0VSUjAKKyNkZWZpbmUgVE9WTF9FUlIxIFRPVkZfRVJSMQorI2RlZmluZSBUT1ZMX0VSUjIgVE9WRl9FUlIyCisjZGVmaW5lIFRPVkxfRVJSMyBUT1ZGX0VSUjMKKyNkZWZpbmUgVE9WTF9FUlI0IFRPVkZfRVJSNAorI2RlZmluZSBUT1ZMX0VSUjUgVE9WRl9FUlI1CisjZGVmaW5lIFRPVkxfRVJSNiBUT1ZGX0VSUjYKKyNkZWZpbmUgVE9WTF9FUlI3IFRPVkZfRVJSNworI2RlZmluZSBUT1ZMX0VSUjggVE9WRl9FUlI4CisjZGVmaW5lIFRPVkxfRVJSOSBUT1ZGX0VSUjkKKyNkZWZpbmUgVE9WTF9FUlIxMCBUT1ZGX0VSUjEwCisjZGVmaW5lIFRPVkxfRVJSMTEgVE9WRl9FUlIxMQorI2RlZmluZSBUT1ZMX0VSUjBfUCBUT1ZGX0VSUjBfUAorI2RlZmluZSBUT1ZMX0VSUjFfUCBUT1ZGX0VSUjFfUAorI2RlZmluZSBUT1ZMX0VSUjJfUCBUT1ZGX0VSUjJfUAorI2RlZmluZSBUT1ZMX0VSUjNfUCBUT1ZGX0VSUjNfUAorI2RlZmluZSBUT1ZMX0VSUjRfUCBUT1ZGX0VSUjRfUAorI2RlZmluZSBUT1ZMX0VSUjVfUCBUT1ZGX0VSUjVfUAorI2RlZmluZSBUT1ZMX0VSUjZfUCBUT1ZGX0VSUjZfUAorI2RlZmluZSBUT1ZMX0VSUjdfUCBUT1ZGX0VSUjdfUAorI2RlZmluZSBUT1ZMX0VSUjhfUCBUT1ZGX0VSUjhfUAorI2RlZmluZSBUT1ZMX0VSUjlfUCBUT1ZGX0VSUjlfUAorI2RlZmluZSBUT1ZMX0VSUjEwX1AgVE9WRl9FUlIxMF9QCisjZGVmaW5lIFRPVkxfRVJSMTFfUCBUT1ZGX0VSUjExX1AKKwogLyogVElNRVJ4X0NPTkZJRyBSZWdpc3RlcnMgKi8KICNkZWZpbmUgUFdNX09VVAkJMHgwMDAxCiAjZGVmaW5lIFdEVEhfQ0FQCTB4MDAwMgpAQCAtMTcwMCwxOCArMTcwOSw0IEBACiAjZGVmaW5lIFNERUFTRQkJICAgIDB4MDAwMDAwMTAJLyogU0RSQU0gRUFCIHN0aWNreSBlcnJvciBzdGF0dXMgLSBXMUMgKi8KICNkZWZpbmUgQkdTVEFUCQkJMHgwMDAwMDAyMAkvKiBCdXMgZ3JhbnRlZCAqLwogCi0vKlZSX0NUTCBNYXNrcyovCi0jZGVmaW5lIFdBS0UgICAgICAgICAgICAgICAgICAgIDB4MTAwCi0jZGVmaW5lIFZMRVZfNiAgICAgICAgICAgICAgICAgIDB4NjAKLSNkZWZpbmUgVkxFVl83ICAgICAgICAgICAgICAgICAgMHg3MAotI2RlZmluZSBWTEVWXzggICAgICAgICAgICAgICAgICAweDgwCi0jZGVmaW5lIFZMRVZfOSAgICAgICAgICAgICAgICAgIDB4OTAKLSNkZWZpbmUgVkxFVl8xMCAgICAgICAgICAgICAgICAgMHhBMAotI2RlZmluZSBWTEVWXzExICAgICAgICAgICAgICAgICAweEIwCi0jZGVmaW5lIFZMRVZfMTIgICAgICAgICAgICAgICAgIDB4QzAKLSNkZWZpbmUgVkxFVl8xMyAgICAgICAgICAgICAgICAgMHhEMAotI2RlZmluZSBWTEVWXzE0ICAgICAgICAgICAgICAgICAweEUwCi0jZGVmaW5lIFZMRVZfMTUgICAgICAgICAgICAgICAgIDB4RjAKLSNkZWZpbmUgRlJFUV8zICAgICAgICAgICAgICAgICAgMHgwMwotCiAjZW5kaWYJCQkJLyogX0RFRl9CRjU2MV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWNvbW1vbi9jZGVmX0xQQmxhY2tmaW4uaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtY29tbW9uL2NkZWZfTFBCbGFja2Zpbi5oCmluZGV4IDIyYWE1ZTYuLmQzOWMzOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtY29tbW9uL2NkZWZfTFBCbGFja2Zpbi5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtY29tbW9uL2NkZWZfTFBCbGFja2Zpbi5oCkBAIC0zNiw0MTcgKzM2LDI4OCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLWNvbW1vbi9kZWZfTFBCbGFja2Zpbi5oPgogCiAvKkNhY2hlICYgU1JBTSBNZW1vcnkqLwotI2RlZmluZSBwU1JBTV9CQVNFX0FERFJFU1MgKCh2b2xhdGlsZSB2b2lkICoqKVNSQU1fQkFTRV9BRERSRVNTKQogI2RlZmluZSBiZmluX3JlYWRfU1JBTV9CQVNFX0FERFJFU1MoKSAgICAgICAgYmZpbl9yZWFkMzIoU1JBTV9CQVNFX0FERFJFU1MpCiAjZGVmaW5lIGJmaW5fd3JpdGVfU1JBTV9CQVNFX0FERFJFU1ModmFsKSAgICBiZmluX3dyaXRlMzIoU1JBTV9CQVNFX0FERFJFU1MsdmFsKQotI2RlZmluZSBwRE1FTV9DT05UUk9MICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKURNRU1fQ09OVFJPTCkKICNkZWZpbmUgYmZpbl9yZWFkX0RNRU1fQ09OVFJPTCgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKERNRU1fQ09OVFJPTCkKICNkZWZpbmUgYmZpbl93cml0ZV9ETUVNX0NPTlRST0wodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihETUVNX0NPTlRST0wsdmFsKQotI2RlZmluZSBwRENQTEJfU1RBVFVTICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKURDUExCX1NUQVRVUykKICNkZWZpbmUgYmZpbl9yZWFkX0RDUExCX1NUQVRVUygpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKERDUExCX1NUQVRVUykKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9TVEFUVVModmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9TVEFUVVMsdmFsKQotI2RlZmluZSBwRENQTEJfRkFVTFRfQUREUiAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfRkFVTFRfQUREUikKICNkZWZpbmUgYmZpbl9yZWFkX0RDUExCX0ZBVUxUX0FERFIoKSAgICAgICAgIGJmaW5fcmVhZDMyKERDUExCX0ZBVUxUX0FERFIpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfRkFVTFRfQUREUih2YWwpICAgICBiZmluX3dyaXRlMzIoRENQTEJfRkFVTFRfQUREUix2YWwpCiAvKgogI2RlZmluZSBNTVJfVElNRU9VVCAgICAgICAgICAgIDB4RkZFMDAwMTAKICovCi0jZGVmaW5lIHBEQ1BMQl9BRERSMCAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjApCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSMCgpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSMCkKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSMCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSMCx2YWwpCi0jZGVmaW5lIHBEQ1BMQl9BRERSMSAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjEpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSMSgpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSMSkKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSMSh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSMSx2YWwpCi0jZGVmaW5lIHBEQ1BMQl9BRERSMiAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjIpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSMigpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSMikKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSMih2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSMix2YWwpCi0jZGVmaW5lIHBEQ1BMQl9BRERSMyAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjMpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSMygpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSMykKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSMyh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSMyx2YWwpCi0jZGVmaW5lIHBEQ1BMQl9BRERSNCAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjQpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSNCgpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSNCkKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSNCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSNCx2YWwpCi0jZGVmaW5lIHBEQ1BMQl9BRERSNSAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjUpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSNSgpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSNSkKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSNSh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSNSx2YWwpCi0jZGVmaW5lIHBEQ1BMQl9BRERSNiAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjYpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSNigpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSNikKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSNih2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSNix2YWwpCi0jZGVmaW5lIHBEQ1BMQl9BRERSNyAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjcpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSNygpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSNykKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSNyh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSNyx2YWwpCi0jZGVmaW5lIHBEQ1BMQl9BRERSOCAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjgpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSOCgpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSOCkKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSOCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSOCx2YWwpCi0jZGVmaW5lIHBEQ1BMQl9BRERSOSAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjkpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSOSgpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSOSkKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSOSh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSOSx2YWwpCi0jZGVmaW5lIHBEQ1BMQl9BRERSMTAgKCh2b2xhdGlsZSB2b2lkICoqKURDUExCX0FERFIxMCkKICNkZWZpbmUgYmZpbl9yZWFkX0RDUExCX0FERFIxMCgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKERDUExCX0FERFIxMCkKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSMTAodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSMTAsdmFsKQotI2RlZmluZSBwRENQTEJfQUREUjExICgodm9sYXRpbGUgdm9pZCAqKilEQ1BMQl9BRERSMTEpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSMTEoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSMTEpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfQUREUjExKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRENQTEJfQUREUjExLHZhbCkKLSNkZWZpbmUgcERDUExCX0FERFIxMiAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjEyKQogI2RlZmluZSBiZmluX3JlYWRfRENQTEJfQUREUjEyKCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRENQTEJfQUREUjEyKQogI2RlZmluZSBiZmluX3dyaXRlX0RDUExCX0FERFIxMih2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKERDUExCX0FERFIxMix2YWwpCi0jZGVmaW5lIHBEQ1BMQl9BRERSMTMgKCh2b2xhdGlsZSB2b2lkICoqKURDUExCX0FERFIxMykKICNkZWZpbmUgYmZpbl9yZWFkX0RDUExCX0FERFIxMygpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKERDUExCX0FERFIxMykKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9BRERSMTModmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9BRERSMTMsdmFsKQotI2RlZmluZSBwRENQTEJfQUREUjE0ICgodm9sYXRpbGUgdm9pZCAqKilEQ1BMQl9BRERSMTQpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9BRERSMTQoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9BRERSMTQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfQUREUjE0KHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRENQTEJfQUREUjE0LHZhbCkKLSNkZWZpbmUgcERDUExCX0FERFIxNSAoKHZvbGF0aWxlIHZvaWQgKiopRENQTEJfQUREUjE1KQogI2RlZmluZSBiZmluX3JlYWRfRENQTEJfQUREUjE1KCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRENQTEJfQUREUjE1KQogI2RlZmluZSBiZmluX3dyaXRlX0RDUExCX0FERFIxNSh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKERDUExCX0FERFIxNSx2YWwpCi0jZGVmaW5lIHBEQ1BMQl9EQVRBMCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEQ1BMQl9EQVRBMCkKICNkZWZpbmUgYmZpbl9yZWFkX0RDUExCX0RBVEEwKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKERDUExCX0RBVEEwKQogI2RlZmluZSBiZmluX3dyaXRlX0RDUExCX0RBVEEwKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTMyKERDUExCX0RBVEEwLHZhbCkKLSNkZWZpbmUgcERDUExCX0RBVEExICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKURDUExCX0RBVEExKQogI2RlZmluZSBiZmluX3JlYWRfRENQTEJfREFUQTEoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRENQTEJfREFUQTEpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfREFUQTEodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoRENQTEJfREFUQTEsdmFsKQotI2RlZmluZSBwRENQTEJfREFUQTIgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopRENQTEJfREFUQTIpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9EQVRBMigpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9EQVRBMikKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9EQVRBMih2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9EQVRBMix2YWwpCi0jZGVmaW5lIHBEQ1BMQl9EQVRBMyAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEQ1BMQl9EQVRBMykKICNkZWZpbmUgYmZpbl9yZWFkX0RDUExCX0RBVEEzKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKERDUExCX0RBVEEzKQogI2RlZmluZSBiZmluX3dyaXRlX0RDUExCX0RBVEEzKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTMyKERDUExCX0RBVEEzLHZhbCkKLSNkZWZpbmUgcERDUExCX0RBVEE0ICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKURDUExCX0RBVEE0KQogI2RlZmluZSBiZmluX3JlYWRfRENQTEJfREFUQTQoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRENQTEJfREFUQTQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfREFUQTQodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoRENQTEJfREFUQTQsdmFsKQotI2RlZmluZSBwRENQTEJfREFUQTUgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopRENQTEJfREFUQTUpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9EQVRBNSgpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9EQVRBNSkKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9EQVRBNSh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9EQVRBNSx2YWwpCi0jZGVmaW5lIHBEQ1BMQl9EQVRBNiAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEQ1BMQl9EQVRBNikKICNkZWZpbmUgYmZpbl9yZWFkX0RDUExCX0RBVEE2KCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKERDUExCX0RBVEE2KQogI2RlZmluZSBiZmluX3dyaXRlX0RDUExCX0RBVEE2KHZhbCkgICAgICAgICAgYmZpbl93cml0ZTMyKERDUExCX0RBVEE2LHZhbCkKLSNkZWZpbmUgcERDUExCX0RBVEE3ICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKURDUExCX0RBVEE3KQogI2RlZmluZSBiZmluX3JlYWRfRENQTEJfREFUQTcoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRENQTEJfREFUQTcpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfREFUQTcodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoRENQTEJfREFUQTcsdmFsKQotI2RlZmluZSBwRENQTEJfREFUQTggKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopRENQTEJfREFUQTgpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9EQVRBOCgpICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9EQVRBOCkKICNkZWZpbmUgYmZpbl93cml0ZV9EQ1BMQl9EQVRBOCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihEQ1BMQl9EQVRBOCx2YWwpCi0jZGVmaW5lIHBEQ1BMQl9EQVRBOSAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEQ1BMQl9EQVRBOSkKICNkZWZpbmUgYmZpbl9yZWFkX0RDUExCX0RBVEE5KCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKERDUExCX0RBVEE5KQogI2RlZmluZSBiZmluX3dyaXRlX0RDUExCX0RBVEE5KHZhbCkgICAgICAgICAgYmZpbl93cml0ZTMyKERDUExCX0RBVEE5LHZhbCkKLSNkZWZpbmUgcERDUExCX0RBVEExMCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEQ1BMQl9EQVRBMTApCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9EQVRBMTAoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9EQVRBMTApCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfREFUQTEwKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRENQTEJfREFUQTEwLHZhbCkKLSNkZWZpbmUgcERDUExCX0RBVEExMSAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEQ1BMQl9EQVRBMTEpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9EQVRBMTEoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9EQVRBMTEpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfREFUQTExKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRENQTEJfREFUQTExLHZhbCkKLSNkZWZpbmUgcERDUExCX0RBVEExMiAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEQ1BMQl9EQVRBMTIpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9EQVRBMTIoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9EQVRBMTIpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfREFUQTEyKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRENQTEJfREFUQTEyLHZhbCkKLSNkZWZpbmUgcERDUExCX0RBVEExMyAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEQ1BMQl9EQVRBMTMpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9EQVRBMTMoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9EQVRBMTMpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfREFUQTEzKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRENQTEJfREFUQTEzLHZhbCkKLSNkZWZpbmUgcERDUExCX0RBVEExNCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEQ1BMQl9EQVRBMTQpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9EQVRBMTQoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9EQVRBMTQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfREFUQTE0KHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRENQTEJfREFUQTE0LHZhbCkKLSNkZWZpbmUgcERDUExCX0RBVEExNSAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEQ1BMQl9EQVRBMTUpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQ1BMQl9EQVRBMTUoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihEQ1BMQl9EQVRBMTUpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRENQTEJfREFUQTE1KHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRENQTEJfREFUQTE1LHZhbCkKLSNkZWZpbmUgcERURVNUX0NPTU1BTkQgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopRFRFU1RfQ09NTUFORCkKICNkZWZpbmUgYmZpbl9yZWFkX0RURVNUX0NPTU1BTkQoKSAgICAgICAgICAgIGJmaW5fcmVhZDMyKERURVNUX0NPTU1BTkQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRFRFU1RfQ09NTUFORCh2YWwpICAgICAgICBiZmluX3dyaXRlMzIoRFRFU1RfQ09NTUFORCx2YWwpCiAvKgogI2RlZmluZSBEVEVTVF9JTkRFWCAgICAgICAgICAgIDB4RkZFMDAzMDQKICovCi0jZGVmaW5lIHBEVEVTVF9EQVRBMCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEVEVTVF9EQVRBMCkKICNkZWZpbmUgYmZpbl9yZWFkX0RURVNUX0RBVEEwKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKERURVNUX0RBVEEwKQogI2RlZmluZSBiZmluX3dyaXRlX0RURVNUX0RBVEEwKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTMyKERURVNUX0RBVEEwLHZhbCkKLSNkZWZpbmUgcERURVNUX0RBVEExICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKURURVNUX0RBVEExKQogI2RlZmluZSBiZmluX3JlYWRfRFRFU1RfREFUQTEoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRFRFU1RfREFUQTEpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRFRFU1RfREFUQTEodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoRFRFU1RfREFUQTEsdmFsKQogLyoKICNkZWZpbmUgRFRFU1RfREFUQTIgICAgICAgICAgICAweEZGRTAwNDA4CiAjZGVmaW5lIERURVNUX0RBVEEzICAgICAgICAgICAgMHhGRkUwMDQwQwogKi8KLSNkZWZpbmUgcElNRU1fQ09OVFJPTCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilJTUVNX0NPTlRST0wpCiAjZGVmaW5lIGJmaW5fcmVhZF9JTUVNX0NPTlRST0woKSAgICAgICAgICAgICBiZmluX3JlYWQzMihJTUVNX0NPTlRST0wpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSU1FTV9DT05UUk9MKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoSU1FTV9DT05UUk9MLHZhbCkKLSNkZWZpbmUgcElDUExCX1NUQVRVUyAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilJQ1BMQl9TVEFUVVMpCiAjZGVmaW5lIGJmaW5fcmVhZF9JQ1BMQl9TVEFUVVMoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihJQ1BMQl9TVEFUVVMpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfU1RBVFVTKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfU1RBVFVTLHZhbCkKLSNkZWZpbmUgcElDUExCX0ZBVUxUX0FERFIgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0ZBVUxUX0FERFIpCiAjZGVmaW5lIGJmaW5fcmVhZF9JQ1BMQl9GQVVMVF9BRERSKCkgICAgICAgICBiZmluX3JlYWQzMihJQ1BMQl9GQVVMVF9BRERSKQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0ZBVUxUX0FERFIodmFsKSAgICAgYmZpbl93cml0ZTMyKElDUExCX0ZBVUxUX0FERFIsdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjAgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFIwKQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjAoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjApCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjAodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjAsdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjEgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFIxKQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjEoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjEpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjEodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjEsdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjIgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFIyKQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjIoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjIpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjIodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjIsdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjMgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFIzKQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjMoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjMpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjModmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjMsdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjQgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFI0KQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjQoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjQodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjQsdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjUgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFI1KQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjUoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjUpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjUodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjUsdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjYgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFI2KQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjYoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjYpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjYodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjYsdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjcgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFI3KQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjcoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjcpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjcodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjcsdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjggKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFI4KQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjgoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjgpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjgodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjgsdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjkgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFI5KQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjkoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjkpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjkodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjksdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjEwICgodm9sYXRpbGUgdm9pZCAqKilJQ1BMQl9BRERSMTApCiAjZGVmaW5lIGJmaW5fcmVhZF9JQ1BMQl9BRERSMTAoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihJQ1BMQl9BRERSMTApCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjEwKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjEwLHZhbCkKLSNkZWZpbmUgcElDUExCX0FERFIxMSAoKHZvbGF0aWxlIHZvaWQgKiopSUNQTEJfQUREUjExKQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjExKCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjExKQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0FERFIxMSh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKElDUExCX0FERFIxMSx2YWwpCi0jZGVmaW5lIHBJQ1BMQl9BRERSMTIgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFIxMikKICNkZWZpbmUgYmZpbl9yZWFkX0lDUExCX0FERFIxMigpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKElDUExCX0FERFIxMikKICNkZWZpbmUgYmZpbl93cml0ZV9JQ1BMQl9BRERSMTIodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihJQ1BMQl9BRERSMTIsdmFsKQotI2RlZmluZSBwSUNQTEJfQUREUjEzICgodm9sYXRpbGUgdm9pZCAqKilJQ1BMQl9BRERSMTMpCiAjZGVmaW5lIGJmaW5fcmVhZF9JQ1BMQl9BRERSMTMoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihJQ1BMQl9BRERSMTMpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfQUREUjEzKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfQUREUjEzLHZhbCkKLSNkZWZpbmUgcElDUExCX0FERFIxNCAoKHZvbGF0aWxlIHZvaWQgKiopSUNQTEJfQUREUjE0KQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfQUREUjE0KCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfQUREUjE0KQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0FERFIxNCh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKElDUExCX0FERFIxNCx2YWwpCi0jZGVmaW5lIHBJQ1BMQl9BRERSMTUgKCh2b2xhdGlsZSB2b2lkICoqKUlDUExCX0FERFIxNSkKICNkZWZpbmUgYmZpbl9yZWFkX0lDUExCX0FERFIxNSgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKElDUExCX0FERFIxNSkKICNkZWZpbmUgYmZpbl93cml0ZV9JQ1BMQl9BRERSMTUodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihJQ1BMQl9BRERSMTUsdmFsKQotI2RlZmluZSBwSUNQTEJfREFUQTAgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopSUNQTEJfREFUQTApCiAjZGVmaW5lIGJmaW5fcmVhZF9JQ1BMQl9EQVRBMCgpICAgICAgICAgICAgICBiZmluX3JlYWQzMihJQ1BMQl9EQVRBMCkKICNkZWZpbmUgYmZpbl93cml0ZV9JQ1BMQl9EQVRBMCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihJQ1BMQl9EQVRBMCx2YWwpCi0jZGVmaW5lIHBJQ1BMQl9EQVRBMSAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilJQ1BMQl9EQVRBMSkKICNkZWZpbmUgYmZpbl9yZWFkX0lDUExCX0RBVEExKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKElDUExCX0RBVEExKQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0RBVEExKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTMyKElDUExCX0RBVEExLHZhbCkKLSNkZWZpbmUgcElDUExCX0RBVEEyICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUlDUExCX0RBVEEyKQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfREFUQTIoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfREFUQTIpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfREFUQTIodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfREFUQTIsdmFsKQotI2RlZmluZSBwSUNQTEJfREFUQTMgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopSUNQTEJfREFUQTMpCiAjZGVmaW5lIGJmaW5fcmVhZF9JQ1BMQl9EQVRBMygpICAgICAgICAgICAgICBiZmluX3JlYWQzMihJQ1BMQl9EQVRBMykKICNkZWZpbmUgYmZpbl93cml0ZV9JQ1BMQl9EQVRBMyh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihJQ1BMQl9EQVRBMyx2YWwpCi0jZGVmaW5lIHBJQ1BMQl9EQVRBNCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilJQ1BMQl9EQVRBNCkKICNkZWZpbmUgYmZpbl9yZWFkX0lDUExCX0RBVEE0KCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKElDUExCX0RBVEE0KQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0RBVEE0KHZhbCkgICAgICAgICAgYmZpbl93cml0ZTMyKElDUExCX0RBVEE0LHZhbCkKLSNkZWZpbmUgcElDUExCX0RBVEE1ICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUlDUExCX0RBVEE1KQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfREFUQTUoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfREFUQTUpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfREFUQTUodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfREFUQTUsdmFsKQotI2RlZmluZSBwSUNQTEJfREFUQTYgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopSUNQTEJfREFUQTYpCiAjZGVmaW5lIGJmaW5fcmVhZF9JQ1BMQl9EQVRBNigpICAgICAgICAgICAgICBiZmluX3JlYWQzMihJQ1BMQl9EQVRBNikKICNkZWZpbmUgYmZpbl93cml0ZV9JQ1BMQl9EQVRBNih2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihJQ1BMQl9EQVRBNix2YWwpCi0jZGVmaW5lIHBJQ1BMQl9EQVRBNyAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilJQ1BMQl9EQVRBNykKICNkZWZpbmUgYmZpbl9yZWFkX0lDUExCX0RBVEE3KCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKElDUExCX0RBVEE3KQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0RBVEE3KHZhbCkgICAgICAgICAgYmZpbl93cml0ZTMyKElDUExCX0RBVEE3LHZhbCkKLSNkZWZpbmUgcElDUExCX0RBVEE4ICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUlDUExCX0RBVEE4KQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfREFUQTgoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfREFUQTgpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSUNQTEJfREFUQTgodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSUNQTEJfREFUQTgsdmFsKQotI2RlZmluZSBwSUNQTEJfREFUQTkgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopSUNQTEJfREFUQTkpCiAjZGVmaW5lIGJmaW5fcmVhZF9JQ1BMQl9EQVRBOSgpICAgICAgICAgICAgICBiZmluX3JlYWQzMihJQ1BMQl9EQVRBOSkKICNkZWZpbmUgYmZpbl93cml0ZV9JQ1BMQl9EQVRBOSh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUzMihJQ1BMQl9EQVRBOSx2YWwpCi0jZGVmaW5lIHBJQ1BMQl9EQVRBMTAgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopSUNQTEJfREFUQTEwKQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfREFUQTEwKCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfREFUQTEwKQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0RBVEExMCh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKElDUExCX0RBVEExMCx2YWwpCi0jZGVmaW5lIHBJQ1BMQl9EQVRBMTEgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopSUNQTEJfREFUQTExKQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfREFUQTExKCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfREFUQTExKQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0RBVEExMSh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKElDUExCX0RBVEExMSx2YWwpCi0jZGVmaW5lIHBJQ1BMQl9EQVRBMTIgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopSUNQTEJfREFUQTEyKQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfREFUQTEyKCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfREFUQTEyKQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0RBVEExMih2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKElDUExCX0RBVEExMix2YWwpCi0jZGVmaW5lIHBJQ1BMQl9EQVRBMTMgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopSUNQTEJfREFUQTEzKQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfREFUQTEzKCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfREFUQTEzKQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0RBVEExMyh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKElDUExCX0RBVEExMyx2YWwpCi0jZGVmaW5lIHBJQ1BMQl9EQVRBMTQgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopSUNQTEJfREFUQTE0KQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfREFUQTE0KCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfREFUQTE0KQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0RBVEExNCh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKElDUExCX0RBVEExNCx2YWwpCi0jZGVmaW5lIHBJQ1BMQl9EQVRBMTUgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopSUNQTEJfREFUQTE1KQogI2RlZmluZSBiZmluX3JlYWRfSUNQTEJfREFUQTE1KCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUNQTEJfREFUQTE1KQogI2RlZmluZSBiZmluX3dyaXRlX0lDUExCX0RBVEExNSh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKElDUExCX0RBVEExNSx2YWwpCi0jZGVmaW5lIHBJVEVTVF9DT01NQU5EICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUlURVNUX0NPTU1BTkQpCiAjZGVmaW5lIGJmaW5fcmVhZF9JVEVTVF9DT01NQU5EKCkgICAgICAgICAgICBiZmluX3JlYWQzMihJVEVTVF9DT01NQU5EKQogI2RlZmluZSBiZmluX3dyaXRlX0lURVNUX0NPTU1BTkQodmFsKSAgICAgICAgYmZpbl93cml0ZTMyKElURVNUX0NPTU1BTkQsdmFsKQogI2lmIDAKICNkZWZpbmUgSVRFU1RfSU5ERVggICAgICAgICAgICAweEZGRTAxMzA0ICAgLyogSW5zdHJ1Y3Rpb24gVGVzdCBJbmRleCBSZWdpc3RlciAqLwogI2VuZGlmCi0jZGVmaW5lIHBJVEVTVF9EQVRBMCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilJVEVTVF9EQVRBMCkKICNkZWZpbmUgYmZpbl9yZWFkX0lURVNUX0RBVEEwKCkgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKElURVNUX0RBVEEwKQogI2RlZmluZSBiZmluX3dyaXRlX0lURVNUX0RBVEEwKHZhbCkgICAgICAgICAgYmZpbl93cml0ZTMyKElURVNUX0RBVEEwLHZhbCkKLSNkZWZpbmUgcElURVNUX0RBVEExICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUlURVNUX0RBVEExKQogI2RlZmluZSBiZmluX3JlYWRfSVRFU1RfREFUQTEoKSAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSVRFU1RfREFUQTEpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSVRFU1RfREFUQTEodmFsKSAgICAgICAgICBiZmluX3dyaXRlMzIoSVRFU1RfREFUQTEsdmFsKQogCiAvKiBFdmVudC9JbnRlcnJ1cHQgUmVnaXN0ZXJzKi8KIAotI2RlZmluZSBwRVZUMCAoKHZvbGF0aWxlIHZvaWQgKiopRVZUMCkKICNkZWZpbmUgYmZpbl9yZWFkX0VWVDAoKSAgICAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVWVDApCiAjZGVmaW5lIGJmaW5fd3JpdGVfRVZUMCh2YWwpICAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoRVZUMCx2YWwpCi0jZGVmaW5lIHBFVlQxICgodm9sYXRpbGUgdm9pZCAqKilFVlQxKQogI2RlZmluZSBiZmluX3JlYWRfRVZUMSgpICAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRVZUMSkKICNkZWZpbmUgYmZpbl93cml0ZV9FVlQxKHZhbCkgICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFVlQxLHZhbCkKLSNkZWZpbmUgcEVWVDIgKCh2b2xhdGlsZSB2b2lkICoqKUVWVDIpCiAjZGVmaW5lIGJmaW5fcmVhZF9FVlQyKCkgICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFVlQyKQogI2RlZmluZSBiZmluX3dyaXRlX0VWVDIodmFsKSAgICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKEVWVDIsdmFsKQotI2RlZmluZSBwRVZUMyAoKHZvbGF0aWxlIHZvaWQgKiopRVZUMykKICNkZWZpbmUgYmZpbl9yZWFkX0VWVDMoKSAgICAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVWVDMpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRVZUMyh2YWwpICAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoRVZUMyx2YWwpCi0jZGVmaW5lIHBFVlQ0ICgodm9sYXRpbGUgdm9pZCAqKilFVlQ0KQogI2RlZmluZSBiZmluX3JlYWRfRVZUNCgpICAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRVZUNCkKICNkZWZpbmUgYmZpbl93cml0ZV9FVlQ0KHZhbCkgICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFVlQ0LHZhbCkKLSNkZWZpbmUgcEVWVDUgKCh2b2xhdGlsZSB2b2lkICoqKUVWVDUpCiAjZGVmaW5lIGJmaW5fcmVhZF9FVlQ1KCkgICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFVlQ1KQogI2RlZmluZSBiZmluX3dyaXRlX0VWVDUodmFsKSAgICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKEVWVDUsdmFsKQotI2RlZmluZSBwRVZUNiAoKHZvbGF0aWxlIHZvaWQgKiopRVZUNikKICNkZWZpbmUgYmZpbl9yZWFkX0VWVDYoKSAgICAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVWVDYpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRVZUNih2YWwpICAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoRVZUNix2YWwpCi0jZGVmaW5lIHBFVlQ3ICgodm9sYXRpbGUgdm9pZCAqKilFVlQ3KQogI2RlZmluZSBiZmluX3JlYWRfRVZUNygpICAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRVZUNykKICNkZWZpbmUgYmZpbl93cml0ZV9FVlQ3KHZhbCkgICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFVlQ3LHZhbCkKLSNkZWZpbmUgcEVWVDggKCh2b2xhdGlsZSB2b2lkICoqKUVWVDgpCiAjZGVmaW5lIGJmaW5fcmVhZF9FVlQ4KCkgICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFVlQ4KQogI2RlZmluZSBiZmluX3dyaXRlX0VWVDgodmFsKSAgICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKEVWVDgsdmFsKQotI2RlZmluZSBwRVZUOSAoKHZvbGF0aWxlIHZvaWQgKiopRVZUOSkKICNkZWZpbmUgYmZpbl9yZWFkX0VWVDkoKSAgICAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVWVDkpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRVZUOSh2YWwpICAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoRVZUOSx2YWwpCi0jZGVmaW5lIHBFVlQxMCAoKHZvbGF0aWxlIHZvaWQgKiopRVZUMTApCiAjZGVmaW5lIGJmaW5fcmVhZF9FVlQxMCgpICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFVlQxMCkKICNkZWZpbmUgYmZpbl93cml0ZV9FVlQxMCh2YWwpICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFVlQxMCx2YWwpCi0jZGVmaW5lIHBFVlQxMSAoKHZvbGF0aWxlIHZvaWQgKiopRVZUMTEpCiAjZGVmaW5lIGJmaW5fcmVhZF9FVlQxMSgpICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFVlQxMSkKICNkZWZpbmUgYmZpbl93cml0ZV9FVlQxMSh2YWwpICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFVlQxMSx2YWwpCi0jZGVmaW5lIHBFVlQxMiAoKHZvbGF0aWxlIHZvaWQgKiopRVZUMTIpCiAjZGVmaW5lIGJmaW5fcmVhZF9FVlQxMigpICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFVlQxMikKICNkZWZpbmUgYmZpbl93cml0ZV9FVlQxMih2YWwpICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFVlQxMix2YWwpCi0jZGVmaW5lIHBFVlQxMyAoKHZvbGF0aWxlIHZvaWQgKiopRVZUMTMpCiAjZGVmaW5lIGJmaW5fcmVhZF9FVlQxMygpICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFVlQxMykKICNkZWZpbmUgYmZpbl93cml0ZV9FVlQxMyh2YWwpICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFVlQxMyx2YWwpCi0jZGVmaW5lIHBFVlQxNCAoKHZvbGF0aWxlIHZvaWQgKiopRVZUMTQpCiAjZGVmaW5lIGJmaW5fcmVhZF9FVlQxNCgpICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFVlQxNCkKICNkZWZpbmUgYmZpbl93cml0ZV9FVlQxNCh2YWwpICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFVlQxNCx2YWwpCi0jZGVmaW5lIHBFVlQxNSAoKHZvbGF0aWxlIHZvaWQgKiopRVZUMTUpCiAjZGVmaW5lIGJmaW5fcmVhZF9FVlQxNSgpICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFVlQxNSkKICNkZWZpbmUgYmZpbl93cml0ZV9FVlQxNSh2YWwpICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihFVlQxNSx2YWwpCi0jZGVmaW5lIHBJTUFTSyAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilJTUFTSykKICNkZWZpbmUgYmZpbl9yZWFkX0lNQVNLKCkgICAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKElNQVNLKQogI2RlZmluZSBiZmluX3dyaXRlX0lNQVNLKHZhbCkgICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKElNQVNLLHZhbCkKLSNkZWZpbmUgcElQRU5EICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKUlQRU5EKQogI2RlZmluZSBiZmluX3JlYWRfSVBFTkQoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSVBFTkQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfSVBFTkQodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoSVBFTkQsdmFsKQotI2RlZmluZSBwSUxBVCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilJTEFUKQogI2RlZmluZSBiZmluX3JlYWRfSUxBVCgpICAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSUxBVCkKICNkZWZpbmUgYmZpbl93cml0ZV9JTEFUKHZhbCkgICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihJTEFULHZhbCkKIAogLypDb3JlIFRpbWVyIFJlZ2lzdGVycyovCi0jZGVmaW5lIHBUQ05UTCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilUQ05UTCkKICNkZWZpbmUgYmZpbl9yZWFkX1RDTlRMKCkgICAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKFRDTlRMKQogI2RlZmluZSBiZmluX3dyaXRlX1RDTlRMKHZhbCkgICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFRDTlRMLHZhbCkKLSNkZWZpbmUgcFRQRVJJT0QgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopVFBFUklPRCkKICNkZWZpbmUgYmZpbl9yZWFkX1RQRVJJT0QoKSAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKFRQRVJJT0QpCiAjZGVmaW5lIGJmaW5fd3JpdGVfVFBFUklPRCh2YWwpICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoVFBFUklPRCx2YWwpCi0jZGVmaW5lIHBUU0NBTEUgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopVFNDQUxFKQogI2RlZmluZSBiZmluX3JlYWRfVFNDQUxFKCkgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoVFNDQUxFKQogI2RlZmluZSBiZmluX3dyaXRlX1RTQ0FMRSh2YWwpICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFRTQ0FMRSx2YWwpCi0jZGVmaW5lIHBUQ09VTlQgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopVENPVU5UKQogI2RlZmluZSBiZmluX3JlYWRfVENPVU5UKCkgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoVENPVU5UKQogI2RlZmluZSBiZmluX3dyaXRlX1RDT1VOVCh2YWwpICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFRDT1VOVCx2YWwpCiAKIC8qRGVidWcvTVAvRW11bGF0aW9uIFJlZ2lzdGVycyovCi0jZGVmaW5lIHBEU1BJRCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEU1BJRCkKICNkZWZpbmUgYmZpbl9yZWFkX0RTUElEKCkgICAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKERTUElEKQogI2RlZmluZSBiZmluX3dyaXRlX0RTUElEKHZhbCkgICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKERTUElELHZhbCkKLSNkZWZpbmUgcERCR0NUTCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilEQkdDVEwpCiAjZGVmaW5lIGJmaW5fcmVhZF9EQkdDVEwoKSAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihEQkdDVEwpCiAjZGVmaW5lIGJmaW5fd3JpdGVfREJHQ1RMKHZhbCkgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoREJHQ1RMLHZhbCkKLSNkZWZpbmUgcERCR1NUQVQgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopREJHU1RBVCkKICNkZWZpbmUgYmZpbl9yZWFkX0RCR1NUQVQoKSAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKERCR1NUQVQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfREJHU1RBVCh2YWwpICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoREJHU1RBVCx2YWwpCi0jZGVmaW5lIHBFTVVEQVQgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopRU1VREFUKQogI2RlZmluZSBiZmluX3JlYWRfRU1VREFUKCkgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1VREFUKQogI2RlZmluZSBiZmluX3dyaXRlX0VNVURBVCh2YWwpICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKEVNVURBVCx2YWwpCiAKIC8qVHJhY2UgQnVmZmVyIFJlZ2lzdGVycyovCi0jZGVmaW5lIHBUQlVGQ1RMICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVRCVUZDVEwpCiAjZGVmaW5lIGJmaW5fcmVhZF9UQlVGQ1RMKCkgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihUQlVGQ1RMKQogI2RlZmluZSBiZmluX3dyaXRlX1RCVUZDVEwodmFsKSAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFRCVUZDVEwsdmFsKQotI2RlZmluZSBwVEJVRlNUQVQgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopVEJVRlNUQVQpCiAjZGVmaW5lIGJmaW5fcmVhZF9UQlVGU1RBVCgpICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihUQlVGU1RBVCkKICNkZWZpbmUgYmZpbl93cml0ZV9UQlVGU1RBVCh2YWwpICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihUQlVGU1RBVCx2YWwpCi0jZGVmaW5lIHBUQlVGICgodm9sYXRpbGUgdm9pZCAqKilUQlVGKQogI2RlZmluZSBiZmluX3JlYWRfVEJVRigpICAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoVEJVRikKICNkZWZpbmUgYmZpbl93cml0ZV9UQlVGKHZhbCkgICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihUQlVGLHZhbCkKIAogLypXYXRjaCBQb2ludCBDb250cm9sIFJlZ2lzdGVycyovCi0jZGVmaW5lIHBXUElBQ1RMICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVdQSUFDVEwpCiAjZGVmaW5lIGJmaW5fcmVhZF9XUElBQ1RMKCkgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihXUElBQ1RMKQogI2RlZmluZSBiZmluX3dyaXRlX1dQSUFDVEwodmFsKSAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFdQSUFDVEwsdmFsKQotI2RlZmluZSBwV1BJQTAgKCh2b2xhdGlsZSB2b2lkICoqKVdQSUEwKQogI2RlZmluZSBiZmluX3JlYWRfV1BJQTAoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoV1BJQTApCiAjZGVmaW5lIGJmaW5fd3JpdGVfV1BJQTAodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoV1BJQTAsdmFsKQotI2RlZmluZSBwV1BJQTEgKCh2b2xhdGlsZSB2b2lkICoqKVdQSUExKQogI2RlZmluZSBiZmluX3JlYWRfV1BJQTEoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoV1BJQTEpCiAjZGVmaW5lIGJmaW5fd3JpdGVfV1BJQTEodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoV1BJQTEsdmFsKQotI2RlZmluZSBwV1BJQTIgKCh2b2xhdGlsZSB2b2lkICoqKVdQSUEyKQogI2RlZmluZSBiZmluX3JlYWRfV1BJQTIoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoV1BJQTIpCiAjZGVmaW5lIGJmaW5fd3JpdGVfV1BJQTIodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoV1BJQTIsdmFsKQotI2RlZmluZSBwV1BJQTMgKCh2b2xhdGlsZSB2b2lkICoqKVdQSUEzKQogI2RlZmluZSBiZmluX3JlYWRfV1BJQTMoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoV1BJQTMpCiAjZGVmaW5lIGJmaW5fd3JpdGVfV1BJQTModmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoV1BJQTMsdmFsKQotI2RlZmluZSBwV1BJQTQgKCh2b2xhdGlsZSB2b2lkICoqKVdQSUE0KQogI2RlZmluZSBiZmluX3JlYWRfV1BJQTQoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoV1BJQTQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfV1BJQTQodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoV1BJQTQsdmFsKQotI2RlZmluZSBwV1BJQTUgKCh2b2xhdGlsZSB2b2lkICoqKVdQSUE1KQogI2RlZmluZSBiZmluX3JlYWRfV1BJQTUoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoV1BJQTUpCiAjZGVmaW5lIGJmaW5fd3JpdGVfV1BJQTUodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoV1BJQTUsdmFsKQotI2RlZmluZSBwV1BJQUNOVDAgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopV1BJQUNOVDApCiAjZGVmaW5lIGJmaW5fcmVhZF9XUElBQ05UMCgpICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihXUElBQ05UMCkKICNkZWZpbmUgYmZpbl93cml0ZV9XUElBQ05UMCh2YWwpICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihXUElBQ05UMCx2YWwpCi0jZGVmaW5lIHBXUElBQ05UMSAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilXUElBQ05UMSkKICNkZWZpbmUgYmZpbl9yZWFkX1dQSUFDTlQxKCkgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKFdQSUFDTlQxKQogI2RlZmluZSBiZmluX3dyaXRlX1dQSUFDTlQxKHZhbCkgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFdQSUFDTlQxLHZhbCkKLSNkZWZpbmUgcFdQSUFDTlQyICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVdQSUFDTlQyKQogI2RlZmluZSBiZmluX3JlYWRfV1BJQUNOVDIoKSAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoV1BJQUNOVDIpCiAjZGVmaW5lIGJmaW5fd3JpdGVfV1BJQUNOVDIodmFsKSAgICAgICAgICAgICBiZmluX3dyaXRlMzIoV1BJQUNOVDIsdmFsKQotI2RlZmluZSBwV1BJQUNOVDMgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopV1BJQUNOVDMpCiAjZGVmaW5lIGJmaW5fcmVhZF9XUElBQ05UMygpICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihXUElBQ05UMykKICNkZWZpbmUgYmZpbl93cml0ZV9XUElBQ05UMyh2YWwpICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihXUElBQ05UMyx2YWwpCi0jZGVmaW5lIHBXUElBQ05UNCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilXUElBQ05UNCkKICNkZWZpbmUgYmZpbl9yZWFkX1dQSUFDTlQ0KCkgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKFdQSUFDTlQ0KQogI2RlZmluZSBiZmluX3dyaXRlX1dQSUFDTlQ0KHZhbCkgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFdQSUFDTlQ0LHZhbCkKLSNkZWZpbmUgcFdQSUFDTlQ1ICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVdQSUFDTlQ1KQogI2RlZmluZSBiZmluX3JlYWRfV1BJQUNOVDUoKSAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoV1BJQUNOVDUpCiAjZGVmaW5lIGJmaW5fd3JpdGVfV1BJQUNOVDUodmFsKSAgICAgICAgICAgICBiZmluX3dyaXRlMzIoV1BJQUNOVDUsdmFsKQotI2RlZmluZSBwV1BEQUNUTCAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilXUERBQ1RMKQogI2RlZmluZSBiZmluX3JlYWRfV1BEQUNUTCgpICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoV1BEQUNUTCkKICNkZWZpbmUgYmZpbl93cml0ZV9XUERBQ1RMKHZhbCkgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihXUERBQ1RMLHZhbCkKLSNkZWZpbmUgcFdQREEwICgodm9sYXRpbGUgdm9pZCAqKilXUERBMCkKICNkZWZpbmUgYmZpbl9yZWFkX1dQREEwKCkgICAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKFdQREEwKQogI2RlZmluZSBiZmluX3dyaXRlX1dQREEwKHZhbCkgICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFdQREEwLHZhbCkKLSNkZWZpbmUgcFdQREExICgodm9sYXRpbGUgdm9pZCAqKilXUERBMSkKICNkZWZpbmUgYmZpbl9yZWFkX1dQREExKCkgICAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKFdQREExKQogI2RlZmluZSBiZmluX3dyaXRlX1dQREExKHZhbCkgICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFdQREExLHZhbCkKLSNkZWZpbmUgcFdQREFDTlQwICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVdQREFDTlQwKQogI2RlZmluZSBiZmluX3JlYWRfV1BEQUNOVDAoKSAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoV1BEQUNOVDApCiAjZGVmaW5lIGJmaW5fd3JpdGVfV1BEQUNOVDAodmFsKSAgICAgICAgICAgICBiZmluX3dyaXRlMzIoV1BEQUNOVDAsdmFsKQotI2RlZmluZSBwV1BEQUNOVDEgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopV1BEQUNOVDEpCiAjZGVmaW5lIGJmaW5fcmVhZF9XUERBQ05UMSgpICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihXUERBQ05UMSkKICNkZWZpbmUgYmZpbl93cml0ZV9XUERBQ05UMSh2YWwpICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihXUERBQ05UMSx2YWwpCi0jZGVmaW5lIHBXUFNUQVQgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopV1BTVEFUKQogI2RlZmluZSBiZmluX3JlYWRfV1BTVEFUKCkgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoV1BTVEFUKQogI2RlZmluZSBiZmluX3dyaXRlX1dQU1RBVCh2YWwpICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFdQU1RBVCx2YWwpCiAKIC8qUGVyZm9ybWFuY2UgTW9uaXRvciBSZWdpc3RlcnMqLwotI2RlZmluZSBwUEZDVEwgKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopUEZDVEwpCiAjZGVmaW5lIGJmaW5fcmVhZF9QRkNUTCgpICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihQRkNUTCkKICNkZWZpbmUgYmZpbl93cml0ZV9QRkNUTCh2YWwpICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihQRkNUTCx2YWwpCi0jZGVmaW5lIHBQRkNOVFIwICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVBGQ05UUjApCiAjZGVmaW5lIGJmaW5fcmVhZF9QRkNOVFIwKCkgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihQRkNOVFIwKQogI2RlZmluZSBiZmluX3dyaXRlX1BGQ05UUjAodmFsKSAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFBGQ05UUjAsdmFsKQotI2RlZmluZSBwUEZDTlRSMSAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilQRkNOVFIxKQogI2RlZmluZSBiZmluX3JlYWRfUEZDTlRSMSgpICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoUEZDTlRSMSkKICNkZWZpbmUgYmZpbl93cml0ZV9QRkNOVFIxKHZhbCkgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihQRkNOVFIxLHZhbCkKIApAQCAtNDU0LDE4ICszMjUsNCBAQAogI2RlZmluZSBJUFJJTyAgICAgICAgICAgICAgICAgIDB4RkZFMDIxMTAKICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19CRklOX0FMSVZFX0xFRCkKLSNkZWZpbmUgcENPTkZJR19CRklOX0FMSVZFX0xFRF9EUE9SVCBcCi0JKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopQ09ORklHX0JGSU5fQUxJVkVfTEVEX0RQT1JUCi0jZGVmaW5lIHBDT05GSUdfQkZJTl9BTElWRV9MRURfUE9SVCBcCi0JKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopQ09ORklHX0JGSU5fQUxJVkVfTEVEX1BPUlQKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQkZJTl9JRExFX0xFRCkKLSNkZWZpbmUgcENPTkZJR19CRklOX0lETEVfTEVEX0RQT1JUIFwKLQkodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilDT05GSUdfQkZJTl9JRExFX0xFRF9EUE9SVAotI2RlZmluZSBwQ09ORklHX0JGSU5fSURMRV9MRURfUE9SVCBcCi0JKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopQ09ORklHX0JGSU5fSURMRV9MRURfUE9SVAotI2VuZGlmCi0KICNlbmRpZgkJCQkvKiBfQ0RFRl9MUEJMQUNLRklOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vcHJvY2Vzc29yLmgKaW5kZXggOTk3NDY1Yy4uYWJhMmIzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vcHJvY2Vzc29yLmgKQEAgLTU4LDEwICs1OCwxMCBAQAogCShfcmVncyktPnBjID0gKF9wYyk7CQkJCQkJXAogCWlmIChjdXJyZW50LT5tbSkJCQkJCQlcCiAJCShfcmVncyktPnA1ID0gY3VycmVudC0+bW0tPnN0YXJ0X2RhdGE7CQkJXAotCWN1cnJlbnQtPnRocmVhZF9pbmZvLT5sMV90YXNrX2luZm8uc3RhY2tfc3RhcnQJCQlcCisJdGFza190aHJlYWRfaW5mbyhjdXJyZW50KS0+bDFfdGFza19pbmZvLnN0YWNrX3N0YXJ0CQlcCiAJCT0gKHZvaWQgKiljdXJyZW50LT5tbS0+Y29udGV4dC5zdGFja19zdGFydDsJCVwKLQljdXJyZW50LT50aHJlYWRfaW5mby0+bDFfdGFza19pbmZvLmxvd2VzdF9zcCA9ICh2b2lkICopKF91c3ApOwkgICAgICAgCVwKLQltZW1jcHkoTDFfU0NSQVRDSF9UQVNLX0lORk8sICZjdXJyZW50LT50aHJlYWRfaW5mby0+bDFfdGFza19pbmZvLAlcCisJdGFza190aHJlYWRfaW5mbyhjdXJyZW50KS0+bDFfdGFza19pbmZvLmxvd2VzdF9zcCA9ICh2b2lkICopKF91c3ApOyBcCisJbWVtY3B5KEwxX1NDUkFUQ0hfVEFTS19JTkZPLCAmdGFza190aHJlYWRfaW5mbyhjdXJyZW50KS0+bDFfdGFza19pbmZvLCBcCiAJCXNpemVvZigqTDFfU0NSQVRDSF9UQVNLX0lORk8pKTsJCQkJXAogCXdydXNwKF91c3ApOwkJCQkJCQlcCiB9IHdoaWxlKDApCkBAIC0xMDQsMTMgKzEwNCwxMyBAQAogI2RlZmluZSBjcHVfcmVsYXgoKSAgICAJYmFycmllcigpCiAKIC8qIEdldCB0aGUgU2lsaWNvbiBSZXZpc2lvbiBvZiB0aGUgY2hpcCAqLwotc3RhdGljIGlubGluZSB1aW50MzJfdCBiZmluX3JldmlkKHZvaWQpCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX3B1cmVfXyB1aW50MzJfdCBiZmluX3JldmlkKHZvaWQpCiB7CiAJLyogc3RvcmVkIGluIHRoZSB1cHBlciA0IGJpdHMgKi8KIAlyZXR1cm4gYmZpbl9yZWFkX0NISVBJRCgpID4+IDI4OwogfQogCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IGJmaW5fY29tcGlsZWRfcmV2aWQodm9pZCkKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfcHVyZV9fIHVpbnQzMl90IGJmaW5fY29tcGlsZWRfcmV2aWQodm9pZCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19CRl9SRVZfMF8wKQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9zeXN0ZW0uaAppbmRleCA3NThiYWM3Li41ZTVmMWEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9zeXN0ZW0uaApAQCAtMTM4LDcgKzEzOCw2IEBACiAjZW5kaWYKIAogI2RlZmluZSB4Y2hnKHB0cix4KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKSkKLSNkZWZpbmUgdGFzKHB0cikgKCh2b2lkKXhjaGcoKHB0ciksMSkpCiAKIHN0cnVjdCBfX3hjaGdfZHVtbXkgewogCXVuc2lnbmVkIGxvbmcgYVsxMDBdOwpAQCAtMjQwLDkgKzIzOSw5IEBACiAKICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KSBcCiBkbyB7ICAgIFwKLQltZW1jcHkgKCZwcmV2LT50aHJlYWRfaW5mby0+bDFfdGFza19pbmZvLCBMMV9TQ1JBVENIX1RBU0tfSU5GTywgXAorCW1lbWNweSAoJnRhc2tfdGhyZWFkX2luZm8ocHJldiktPmwxX3Rhc2tfaW5mbywgTDFfU0NSQVRDSF9UQVNLX0lORk8sIFwKIAkJc2l6ZW9mICpMMV9TQ1JBVENIX1RBU0tfSU5GTyk7IFwKLQltZW1jcHkgKEwxX1NDUkFUQ0hfVEFTS19JTkZPLCAmbmV4dC0+dGhyZWFkX2luZm8tPmwxX3Rhc2tfaW5mbywgXAorCW1lbWNweSAoTDFfU0NSQVRDSF9UQVNLX0lORk8sICZ0YXNrX3RocmVhZF9pbmZvKG5leHQpLT5sMV90YXNrX2luZm8sIFwKIAkJc2l6ZW9mICpMMV9TQ1JBVENIX1RBU0tfSU5GTyk7IFwKIAkobGFzdCkgPSByZXN1bWUgKHByZXYsIG5leHQpOyAgIFwKIH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi91YWNjZXNzLmgKaW5kZXggYmZjYjY3OS4uMjIzM2Y4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL3VhY2Nlc3MuaApAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpZm5kZWYgQ09ORklHX05PX0FDQ0VTU19DSEVDSworI2lmZGVmIENPTkZJR19BQ0NFU1NfQ0hFQ0sKICMgaW5jbHVkZSA8YXNtL2JmaW4tZ2xvYmFsLmg+CiAjZW5kaWYKIApAQCAtNTYsNyArNTYsNyBAQAogICogZ2V0X2ZzKCkgPT0gS0VSTkVMX0RTLCBjaGVja2luZyBpcyBieXBhc3NlZC4KICAqLwogCi0jaWZkZWYgQ09ORklHX05PX0FDQ0VTU19DSEVDSworI2lmbmRlZiBDT05GSUdfQUNDRVNTX0NIRUNLCiBzdGF0aWMgaW5saW5lIGludCBfYWNjZXNzX29rKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKSB7IHJldHVybiAxOyB9CiAjZWxzZQogI2lmZGVmIENPTkZJR19BQ0NFU1NfT0tfTDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMva2RlYnVnLmggYi9pbmNsdWRlL2FzbS1jcmlzL2tkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlY2UxYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2tkZWJ1Zy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9rZGVidWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcG9sbC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wb2xsLmgKaW5kZXggMWIyNWQ0Yy4uYzk4NTA5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9wb2xsLmgKQEAgLTEsMjYgKzEgQEAKLSNpZm5kZWYgX19BU01fQ1JJU19QT0xMX0gKLSNkZWZpbmUgX19BU01fQ1JJU19QT0xMX0gKLQotLyogdGFrZW4gZnJvbSBhc20tYWxwaGEgKi8KLQotI2RlZmluZSBQT0xMSU4JCTEKLSNkZWZpbmUgUE9MTFBSSQkJMgotI2RlZmluZSBQT0xMT1VUCQk0Ci0jZGVmaW5lIFBPTExFUlIJCTgKLSNkZWZpbmUgUE9MTEhVUAkJMTYKLSNkZWZpbmUgUE9MTE5WQUwJMzIKLSNkZWZpbmUgUE9MTFJETk9STQk2NAotI2RlZmluZSBQT0xMUkRCQU5ECTEyOAotI2RlZmluZSBQT0xMV1JOT1JNCTI1NgotI2RlZmluZSBQT0xMV1JCQU5ECTUxMgotI2RlZmluZSBQT0xMTVNHCQkxMDI0Ci0jZGVmaW5lIFBPTExSRU1PVkUJNDA5NgotI2RlZmluZSBQT0xMUkRIVVAgICAgICAgODE5MgotCi1zdHJ1Y3QgcG9sbGZkIHsKLQlpbnQgZmQ7Ci0Jc2hvcnQgZXZlbnRzOwotCXNob3J0IHJldmVudHM7Ci19OwotCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wb2xsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1mcnYvYXRvbWljLmgKaW5kZXggMDY2Mzg2YS4uZDQyNWQ4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9hdG9taWMuaApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc3ByLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCiAjZXJyb3Igbm90IFNNUCBzYWZlCkBAIC0yNTgsODUgKzI1OSwyMyBAQAogCiAjZGVmaW5lIHRhcyhwdHIpICh4Y2hnKChwdHIpLCAxKSkKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIGNvbXBhcmUgYW5kIGNvbmRpdGlvbmFsbHkgZXhjaGFuZ2UgdmFsdWUgd2l0aCBtZW1vcnkKLSAqIC0gaWYgKCpwdHIgPT0gdGVzdCkgdGhlbiBvcmlnID0gKnB0cjsgKnB0ciA9IHRlc3Q7Ci0gKiAtIGlmICgqcHRyICE9IHRlc3QpIHRoZW4gb3JpZyA9ICpwdHI7Ci0gKi8KLSNpZm5kZWYgQ09ORklHX0ZSVl9PVVRPRkxJTkVfQVRPTUlDX09QUwotCi0jZGVmaW5lIGNtcHhjaGcocHRyLCB0ZXN0LCBuZXcpCQkJCQkJCVwKLSh7CQkJCQkJCQkJCVwKLQlfX3R5cGVvZl9fKHB0cikgX194Z19wdHIgPSAocHRyKTsJCQkJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSkgX194Z19vcmlnLCBfX3hnX3RtcDsJCQkJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSkgX194Z190ZXN0ID0gKHRlc3QpOwkJCQkJXAotCV9fdHlwZW9mX18oKihwdHIpKSBfX3hnX25ldyA9IChuZXcpOwkJCQkJXAotCQkJCQkJCQkJCVwKLQlzd2l0Y2ggKHNpemVvZihfX3hnX29yaWcpKSB7CQkJCQkJXAotCWNhc2UgNDoJCQkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAotCQkJIjA6CQkJCQkJXG4iCVwKLQkJCSIJb3JjYwkJZ3IwLGdyMCxncjAsaWNjMwlcbiIJXAotCQkJIglja2VxCQlpY2MzLGNjNwkJXG4iCVwKLQkJCSIJbGQucAkJJU0wLCUxCQkJXG4iCVwKLQkJCSIJb3JjcgkJY2M3LGNjNyxjYzMJCVxuIglcCi0JCQkiCXN1YiVJNGNjCSUxLCU0LCUyLGljYzAJCVxuIglcCi0JCQkiCWJuZQkJaWNjMCwjMCwxZgkJXG4iCVwKLQkJCSIJY3N0LnAJCSUzLCVNMAkJLGNjMywjMQlcbiIJXAotCQkJIgljb3JjYwkJZ3IyOSxncjI5LGdyMAksY2MzLCMxCVxuIglcCi0JCQkiCWJlcQkJaWNjMywjMCwwYgkJXG4iCVwKLQkJCSIxOgkJCQkJCVxuIglcCi0JCQk6ICIrVSIoKl9feGdfcHRyKSwgIj0mciIoX194Z19vcmlnKSwgIj0mciIoX194Z190bXApCVwKLQkJCTogInIiKF9feGdfbmV3KSwgIk5QciIoX194Z190ZXN0KQkJCVwKLQkJCTogIm1lbW9yeSIsICJjYzciLCAiY2MzIiwgImljYzMiLCAiaWNjMCIJCVwKLQkJCSk7CQkJCQkJCVwKLQkJYnJlYWs7CQkJCQkJCQlcCi0JCQkJCQkJCQkJXAotCWRlZmF1bHQ6CQkJCQkJCQlcCi0JCV9feGdfb3JpZyA9IDA7CQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKCJicmVhayIpOwkJCQkJCVwKLQkJYnJlYWs7CQkJCQkJCQlcCi0JfQkJCQkJCQkJCVwKLQkJCQkJCQkJCQlcCi0JX194Z19vcmlnOwkJCQkJCQkJXAotfSkKLQotI2Vsc2UKLQotZXh0ZXJuIHVpbnQzMl90IF9fY21weGNoZ18zMih1aW50MzJfdCAqdiwgdWludDMyX3QgdGVzdCwgdWludDMyX3QgbmV3KTsKLQotI2RlZmluZSBjbXB4Y2hnKHB0ciwgdGVzdCwgbmV3KQkJCQkJCQlcCi0oewkJCQkJCQkJCQlcCi0JX190eXBlb2ZfXyhwdHIpIF9feGdfcHRyID0gKHB0cik7CQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpIF9feGdfb3JpZzsJCQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpIF9feGdfdGVzdCA9ICh0ZXN0KTsJCQkJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSkgX194Z19uZXcgPSAobmV3KTsJCQkJCVwKLQkJCQkJCQkJCQlcCi0Jc3dpdGNoIChzaXplb2YoX194Z19vcmlnKSkgewkJCQkJCVwKLQljYXNlIDQ6IF9feGdfb3JpZyA9IF9fY21weGNoZ18zMihfX3hnX3B0ciwgX194Z190ZXN0LCBfX3hnX25ldyk7IGJyZWFrOwlcCi0JZGVmYXVsdDoJCQkJCQkJCVwKLQkJX194Z19vcmlnID0gMDsJCQkJCQkJXAotCQlhc20gdm9sYXRpbGUoImJyZWFrIik7CQkJCQkJXAotCQlicmVhazsJCQkJCQkJCVwKLQl9CQkJCQkJCQkJXAotCQkJCQkJCQkJCVwKLQlfX3hnX29yaWc7CQkJCQkJCQlcCi19KQotCi0jZW5kaWYKLQogI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvbGQsIG5ldykgKGNtcHhjaGcoJigodiktPmNvdW50ZXIpLCBvbGQsIG5ldykpCiAjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQogCi0jZGVmaW5lIGF0b21pY19hZGRfdW5sZXNzKHYsIGEsIHUpCQkJCVwKLSh7CQkJCQkJCQlcCi0JaW50IGMsIG9sZDsJCQkJCQlcCi0JYyA9IGF0b21pY19yZWFkKHYpOwkJCQkJXAotCXdoaWxlIChjICE9ICh1KSAmJiAob2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKSkgIT0gYykgXAotCQljID0gb2xkOwkJCQkJXAotCWMgIT0gKHUpOwkJCQkJCVwKLX0pCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3sKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQogCiAjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYva2RlYnVnLmggYi9pbmNsdWRlL2FzbS1mcnYva2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjZTFiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9rZGVidWcuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMva2RlYnVnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tZnJ2L3BndGFibGUuaAppbmRleCA4YTA1YWExLi4yNjg3Yzc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmgKQEAgLTUwOSwxMCArNTA5LDYgQEAKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKIAotI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQotI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCi0jZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCi0KICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ZT1VORwogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX0RJUlRZCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3BvbGwuaCBiL2luY2x1ZGUvYXNtLWZydi9wb2xsLmgKaW5kZXggYzhmZTg4MC4uMGQwMTQ3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcG9sbC5oCkBAIC0xLDI0ICsxLDEyIEBACiAjaWZuZGVmIF9BU01fUE9MTF9ICiAjZGVmaW5lIF9BU01fUE9MTF9ICiAKLSNkZWZpbmUgUE9MTElOCQkgIDEKLSNkZWZpbmUgUE9MTFBSSQkJICAyCi0jZGVmaW5lIFBPTExPVVQJCSAgNAotI2RlZmluZSBQT0xMRVJSCQkgIDgKLSNkZWZpbmUgUE9MTEhVUAkJIDE2Ci0jZGVmaW5lIFBPTExOVkFMCSAzMgotI2RlZmluZSBQT0xMUkROT1JNCSA2NAogI2RlZmluZSBQT0xMV1JOT1JNCVBPTExPVVQKLSNkZWZpbmUgUE9MTFJEQkFORAkxMjgKICNkZWZpbmUgUE9MTFdSQkFORAkyNTYKLSNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCi0jZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKIAotc3RydWN0IHBvbGxmZCB7Ci0JaW50IGZkOwotCXNob3J0IGV2ZW50czsKLQlzaG9ydCByZXZlbnRzOwotfTsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wb2xsLmg+CisKKyN1bmRlZiBQT0xMUkVNT1ZFCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc2VtYXBob3JlLmggYi9pbmNsdWRlL2FzbS1mcnYvc2VtYXBob3JlLmgKaW5kZXggOTA3YzVjMy4uMDk1ODY1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3NlbWFwaG9yZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zZW1hcGhvcmUuaApAQCAtMjAsOCArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KIAotI2RlZmluZSBTRU1BUEhPUkVfREVCVUcJCTAKLQogLyoKICAqIHRoZSBzZW1hcGhvcmUgZGVmaW5pdGlvbgogICogLSBpZiBjb3VudGVyIGlzID4wIHRoZW4gdGhlcmUgYXJlIHRva2VucyBhdmFpbGFibGUgb24gdGhlIHNlbWFwaG9yZSBmb3IgZG93biB0byBjb2xsZWN0CkBAIC0zMiwxMiArMzAsMTIgQEAKIAl1bnNpZ25lZAkJY291bnRlcjsKIAlzcGlubG9ja190CQl3YWl0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7Ci0jaWYgU0VNQVBIT1JFX0RFQlVHCisjaWZkZWYgQ09ORklHX0RFQlVHX1NFTUFQSE9SRQogCXVuc2lnbmVkCQlfX21hZ2ljOwogI2VuZGlmCiB9OwogCi0jaWYgU0VNQVBIT1JFX0RFQlVHCisjaWZkZWYgQ09ORklHX0RFQlVHX1NFTUFQSE9SRQogIyBkZWZpbmUgX19TRU1fREVCVUdfSU5JVChuYW1lKSAsIChsb25nKSYobmFtZSkuX19tYWdpYwogI2Vsc2UKICMgZGVmaW5lIF9fU0VNX0RFQlVHX0lOSVQobmFtZSkKQEAgLTc2LDcgKzc0LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0jaWYgU0VNQVBIT1JFX0RFQlVHCisjaWZkZWYgQ09ORklHX0RFQlVHX1NFTUFQSE9SRQogCUNIRUNLX01BR0lDKHNlbS0+X19tYWdpYyk7CiAjZW5kaWYKIApAQCAtOTUsNyArOTMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLSNpZiBTRU1BUEhPUkVfREVCVUcKKyNpZmRlZiBDT05GSUdfREVCVUdfU0VNQVBIT1JFCiAJQ0hFQ0tfTUFHSUMoc2VtLT5fX21hZ2ljKTsKICNlbmRpZgogCkBAIC0xMTksNyArMTE3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzdWNjZXNzID0gMDsKIAotI2lmIFNFTUFQSE9SRV9ERUJVRworI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKIAlDSEVDS19NQUdJQyhzZW0tPl9fbWFnaWMpOwogI2VuZGlmCiAKQEAgLTEzNiw3ICsxMzQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSNpZiBTRU1BUEhPUkVfREVCVUcKKyNpZmRlZiBDT05GSUdfREVCVUdfU0VNQVBIT1JFCiAJQ0hFQ0tfTUFHSUMoc2VtLT5fX21hZ2ljKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmgKaW5kZXggMTE2Njg5OS4uYmUzMDNiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaApAQCAtMTMsNyArMTMsNiBAQAogI2RlZmluZSBfQVNNX1NZU1RFTV9ICiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBzdHJ1Y3QgdGhyZWFkX3N0cnVjdDsKIApAQCAtMTk3LDQgKzE5Niw3MyBAQAogCiAjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBjb21wYXJlIGFuZCBjb25kaXRpb25hbGx5IGV4Y2hhbmdlIHZhbHVlIHdpdGggbWVtb3J5CisgKiAtIGlmICgqcHRyID09IHRlc3QpIHRoZW4gb3JpZyA9ICpwdHI7ICpwdHIgPSB0ZXN0OworICogLSBpZiAoKnB0ciAhPSB0ZXN0KSB0aGVuIG9yaWcgPSAqcHRyOworICovCisjaWZuZGVmIENPTkZJR19GUlZfT1VUT0ZMSU5FX0FUT01JQ19PUFMKKworI2RlZmluZSBjbXB4Y2hnKHB0ciwgdGVzdCwgbmV3KQkJCQkJCQlcCisoewkJCQkJCQkJCQlcCisJX190eXBlb2ZfXyhwdHIpIF9feGdfcHRyID0gKHB0cik7CQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9feGdfb3JpZywgX194Z190bXA7CQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9feGdfdGVzdCA9ICh0ZXN0KTsJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX194Z19uZXcgPSAobmV3KTsJCQkJCVwKKwkJCQkJCQkJCQlcCisJc3dpdGNoIChzaXplb2YoX194Z19vcmlnKSkgewkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQkJXAorCQlhc20gdm9sYXRpbGUoCQkJCQkJCVwKKwkJCSIwOgkJCQkJCVxuIglcCisJCQkiCW9yY2MJCWdyMCxncjAsZ3IwLGljYzMJXG4iCVwKKwkJCSIJY2tlcQkJaWNjMyxjYzcJCVxuIglcCisJCQkiCWxkLnAJCSVNMCwlMQkJCVxuIglcCisJCQkiCW9yY3IJCWNjNyxjYzcsY2MzCQlcbiIJXAorCQkJIglzdWIlSTRjYwklMSwlNCwlMixpY2MwCQlcbiIJXAorCQkJIglibmUJCWljYzAsIzAsMWYJCVxuIglcCisJCQkiCWNzdC5wCQklMywlTTAJCSxjYzMsIzEJXG4iCVwKKwkJCSIJY29yY2MJCWdyMjksZ3IyOSxncjAJLGNjMywjMQlcbiIJXAorCQkJIgliZXEJCWljYzMsIzAsMGIJCVxuIglcCisJCQkiMToJCQkJCQlcbiIJXAorCQkJOiAiK1UiKCpfX3hnX3B0ciksICI9JnIiKF9feGdfb3JpZyksICI9JnIiKF9feGdfdG1wKQlcCisJCQk6ICJyIihfX3hnX25ldyksICJOUHIiKF9feGdfdGVzdCkJCQlcCisJCQk6ICJtZW1vcnkiLCAiY2M3IiwgImNjMyIsICJpY2MzIiwgImljYzAiCQlcCisJCQkpOwkJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCQkJCQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQkJXAorCQlfX3hnX29yaWcgPSAwOwkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSgiYnJlYWsiKTsJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQkJXAorCX0JCQkJCQkJCQlcCisJCQkJCQkJCQkJXAorCV9feGdfb3JpZzsJCQkJCQkJCVwKK30pCisKKyNlbHNlCisKK2V4dGVybiB1aW50MzJfdCBfX2NtcHhjaGdfMzIodWludDMyX3QgKnYsIHVpbnQzMl90IHRlc3QsIHVpbnQzMl90IG5ldyk7CisKKyNkZWZpbmUgY21weGNoZyhwdHIsIHRlc3QsIG5ldykJCQkJCQkJXAorKHsJCQkJCQkJCQkJXAorCV9fdHlwZW9mX18ocHRyKSBfX3hnX3B0ciA9IChwdHIpOwkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3hnX29yaWc7CQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3hnX3Rlc3QgPSAodGVzdCk7CQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9feGdfbmV3ID0gKG5ldyk7CQkJCQlcCisJCQkJCQkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKF9feGdfb3JpZykpIHsJCQkJCQlcCisJY2FzZSA0OiBfX3hnX29yaWcgPSBfX2NtcHhjaGdfMzIoX194Z19wdHIsIF9feGdfdGVzdCwgX194Z19uZXcpOyBicmVhazsJXAorCWRlZmF1bHQ6CQkJCQkJCQlcCisJCV9feGdfb3JpZyA9IDA7CQkJCQkJCVwKKwkJYXNtIHZvbGF0aWxlKCJicmVhayIpOwkJCQkJCVwKKwkJYnJlYWs7CQkJCQkJCQlcCisJfQkJCQkJCQkJCVwKKwkJCQkJCQkJCQlcCisJX194Z19vcmlnOwkJCQkJCQkJXAorfSkKKworI2VuZGlmCisKKwogI2VuZGlmIC8qIF9BU01fU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi90bGIuaCBiL2luY2x1ZGUvYXNtLWZydi90bGIuaAppbmRleCBmOTRmZTVjLi5jZDQ1OGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3RsYi5oCkBAIC0zLDcgKzMsMTEgQEAKIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIHZvaWQgY2hlY2tfcGd0X2NhY2hlKHZvaWQpOworI2Vsc2UKICNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgogCiAvKgogICogd2UgZG9uJ3QgbmVlZCBhbnkgc3BlY2lhbCBwZXItcHRlIG9yIHBlci12bWEgaGFuZGxpbmcuLi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaAppbmRleCA1ODRjMDQxLi5kMGVhNjc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oCkBAIC0xODYsOCArMTg2LDggQEAKICNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQJMTc3CiAjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvCTE3OAogI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQJMTc5Ci0jZGVmaW5lIF9fTlJfcHJlYWQJCTE4MAotI2RlZmluZSBfX05SX3B3cml0ZQkJMTgxCisjZGVmaW5lIF9fTlJfcHJlYWQ2NAkJMTgwCisjZGVmaW5lIF9fTlJfcHdyaXRlNjQJCTE4MQogI2RlZmluZSBfX05SX2Nob3duCQkxODIKICNkZWZpbmUgX19OUl9nZXRjd2QJCTE4MwogI2RlZmluZSBfX05SX2NhcGdldAkJMTg0CkBAIC0zMTYsMTAgKzMxNiwyMCBAQAogI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJMzA3CiAjZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTMwOAogI2RlZmluZSBfX05SX3Bwb2xsCQkzMDkKKyNkZWZpbmUgX19OUl91bnNoYXJlCQkzMTAKKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzExCisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMxMgorI2RlZmluZSBfX05SX3NwbGljZQkJMzEzCisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCTMxNAorI2RlZmluZSBfX05SX3RlZQkJMzE1CisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCTMxNgorI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCTMxNworI2RlZmluZSBfX05SX2dldGNwdQkJMzE4CisjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJMzE5CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMgMzEwCisjZGVmaW5lIE5SX3N5c2NhbGxzIDMyMAogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAvKiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkCmluZGV4IGZhMTRmOGMuLjViZmVlZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkCkBAIC00LDYgKzQsNyBAQAogaGVhZGVyLXkgKz0gaW9jdGwuaAogaGVhZGVyLXkgKz0gaXBjLmgKIGhlYWRlci15ICs9IG1tYW4uaAoraGVhZGVyLXkgKz0gcG9sbC5oCiBoZWFkZXIteSArPSBzaWduYWwuaAogaGVhZGVyLXkgKz0gc3RhdGZzLmgKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXRvbWljLmgKaW5kZXggYjdlNGEwNC4uODVmZDBhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2F0b21pYy5oCkBAIC02Niw2ICs2Niw3NiBAQAogCWF0b21pYzY0X3N1YihpLCB2KTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2xvbmdfc3ViX2FuZF90ZXN0KGxvbmcgaSwgYXRvbWljX2xvbmdfdCAqbCkKK3sKKwlhdG9taWM2NF90ICp2ID0gKGF0b21pYzY0X3QgKilsOworCisJcmV0dXJuIGF0b21pYzY0X3N1Yl9hbmRfdGVzdChpLCB2KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2xvbmdfZGVjX2FuZF90ZXN0KGF0b21pY19sb25nX3QgKmwpCit7CisJYXRvbWljNjRfdCAqdiA9IChhdG9taWM2NF90ICopbDsKKworCXJldHVybiBhdG9taWM2NF9kZWNfYW5kX3Rlc3Qodik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19sb25nX2luY19hbmRfdGVzdChhdG9taWNfbG9uZ190ICpsKQoreworCWF0b21pYzY0X3QgKnYgPSAoYXRvbWljNjRfdCAqKWw7CisKKwlyZXR1cm4gYXRvbWljNjRfaW5jX2FuZF90ZXN0KHYpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfbG9uZ19hZGRfbmVnYXRpdmUobG9uZyBpLCBhdG9taWNfbG9uZ190ICpsKQoreworCWF0b21pYzY0X3QgKnYgPSAoYXRvbWljNjRfdCAqKWw7CisKKwlyZXR1cm4gYXRvbWljNjRfYWRkX25lZ2F0aXZlKGksIHYpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljX2xvbmdfYWRkX3JldHVybihsb25nIGksIGF0b21pY19sb25nX3QgKmwpCit7CisJYXRvbWljNjRfdCAqdiA9IChhdG9taWM2NF90ICopbDsKKworCXJldHVybiAobG9uZylhdG9taWM2NF9hZGRfcmV0dXJuKGksIHYpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljX2xvbmdfc3ViX3JldHVybihsb25nIGksIGF0b21pY19sb25nX3QgKmwpCit7CisJYXRvbWljNjRfdCAqdiA9IChhdG9taWM2NF90ICopbDsKKworCXJldHVybiAobG9uZylhdG9taWM2NF9zdWJfcmV0dXJuKGksIHYpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljX2xvbmdfaW5jX3JldHVybihhdG9taWNfbG9uZ190ICpsKQoreworCWF0b21pYzY0X3QgKnYgPSAoYXRvbWljNjRfdCAqKWw7CisKKwlyZXR1cm4gKGxvbmcpYXRvbWljNjRfaW5jX3JldHVybih2KTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGF0b21pY19sb25nX2RlY19yZXR1cm4oYXRvbWljX2xvbmdfdCAqbCkKK3sKKwlhdG9taWM2NF90ICp2ID0gKGF0b21pYzY0X3QgKilsOworCisJcmV0dXJuIChsb25nKWF0b21pYzY0X2RlY19yZXR1cm4odik7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWNfbG9uZ19hZGRfdW5sZXNzKGF0b21pY19sb25nX3QgKmwsIGxvbmcgYSwgbG9uZyB1KQoreworCWF0b21pYzY0X3QgKnYgPSAoYXRvbWljNjRfdCAqKWw7CisKKwlyZXR1cm4gKGxvbmcpYXRvbWljNjRfYWRkX3VubGVzcyh2LCBhLCB1KTsKK30KKworI2RlZmluZSBhdG9taWNfbG9uZ19pbmNfbm90X3plcm8obCkgYXRvbWljNjRfaW5jX25vdF96ZXJvKChhdG9taWM2NF90ICopKGwpKQorCisjZGVmaW5lIGF0b21pY19sb25nX2NtcHhjaGcobCwgb2xkLCBuZXcpIFwKKwkoYXRvbWljX2NtcHhjaGcoKGF0b21pYzY0X3QgKikobCksIChvbGQpLCAobmV3KSkpCisjZGVmaW5lIGF0b21pY19sb25nX3hjaGcodiwgbmV3KSBcCisJKGF0b21pY194Y2hnKChhdG9taWM2NF90ICopKGwpLCAobmV3KSkpCisKICNlbHNlICAvKiAgQklUU19QRVJfTE9ORyA9PSA2NCAgKi8KIAogdHlwZWRlZiBhdG9taWNfdCBhdG9taWNfbG9uZ190OwpAQCAtMTEzLDYgKzE4Myw3NiBAQAogCWF0b21pY19zdWIoaSwgdik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19sb25nX3N1Yl9hbmRfdGVzdChsb25nIGksIGF0b21pY19sb25nX3QgKmwpCit7CisJYXRvbWljX3QgKnYgPSAoYXRvbWljX3QgKilsOworCisJcmV0dXJuIGF0b21pY19zdWJfYW5kX3Rlc3QoaSwgdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19sb25nX2RlY19hbmRfdGVzdChhdG9taWNfbG9uZ190ICpsKQoreworCWF0b21pY190ICp2ID0gKGF0b21pY190ICopbDsKKworCXJldHVybiBhdG9taWNfZGVjX2FuZF90ZXN0KHYpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfbG9uZ19pbmNfYW5kX3Rlc3QoYXRvbWljX2xvbmdfdCAqbCkKK3sKKwlhdG9taWNfdCAqdiA9IChhdG9taWNfdCAqKWw7CisKKwlyZXR1cm4gYXRvbWljX2luY19hbmRfdGVzdCh2KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2xvbmdfYWRkX25lZ2F0aXZlKGxvbmcgaSwgYXRvbWljX2xvbmdfdCAqbCkKK3sKKwlhdG9taWNfdCAqdiA9IChhdG9taWNfdCAqKWw7CisKKwlyZXR1cm4gYXRvbWljX2FkZF9uZWdhdGl2ZShpLCB2KTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGF0b21pY19sb25nX2FkZF9yZXR1cm4obG9uZyBpLCBhdG9taWNfbG9uZ190ICpsKQoreworCWF0b21pY190ICp2ID0gKGF0b21pY190ICopbDsKKworCXJldHVybiAobG9uZylhdG9taWNfYWRkX3JldHVybihpLCB2KTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGF0b21pY19sb25nX3N1Yl9yZXR1cm4obG9uZyBpLCBhdG9taWNfbG9uZ190ICpsKQoreworCWF0b21pY190ICp2ID0gKGF0b21pY190ICopbDsKKworCXJldHVybiAobG9uZylhdG9taWNfc3ViX3JldHVybihpLCB2KTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGF0b21pY19sb25nX2luY19yZXR1cm4oYXRvbWljX2xvbmdfdCAqbCkKK3sKKwlhdG9taWNfdCAqdiA9IChhdG9taWNfdCAqKWw7CisKKwlyZXR1cm4gKGxvbmcpYXRvbWljX2luY19yZXR1cm4odik7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWNfbG9uZ19kZWNfcmV0dXJuKGF0b21pY19sb25nX3QgKmwpCit7CisJYXRvbWljX3QgKnYgPSAoYXRvbWljX3QgKilsOworCisJcmV0dXJuIChsb25nKWF0b21pY19kZWNfcmV0dXJuKHYpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljX2xvbmdfYWRkX3VubGVzcyhhdG9taWNfbG9uZ190ICpsLCBsb25nIGEsIGxvbmcgdSkKK3sKKwlhdG9taWNfdCAqdiA9IChhdG9taWNfdCAqKWw7CisKKwlyZXR1cm4gKGxvbmcpYXRvbWljX2FkZF91bmxlc3ModiwgYSwgdSk7Cit9CisKKyNkZWZpbmUgYXRvbWljX2xvbmdfaW5jX25vdF96ZXJvKGwpIGF0b21pY19pbmNfbm90X3plcm8oKGF0b21pY190ICopKGwpKQorCisjZGVmaW5lIGF0b21pY19sb25nX2NtcHhjaGcobCwgb2xkLCBuZXcpIFwKKwkoYXRvbWljX2NtcHhjaGcoKGF0b21pY190ICopKGwpLCAob2xkKSwgKG5ldykpKQorI2RlZmluZSBhdG9taWNfbG9uZ194Y2hnKHYsIG5ldykgXAorCShhdG9taWNfeGNoZygoYXRvbWljX3QgKikobCksIChuZXcpKSkKKwogI2VuZGlmICAvKiAgQklUU19QRVJfTE9ORyA9PSA2NCAgKi8KIAogI2VuZGlmICAvKiAgX0FTTV9HRU5FUklDX0FUT01JQ19IICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9hdWRpdF9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlYWI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfc2lnbmFsLmgKQEAgLTAsMCArMSwzIEBACitfX05SX2tpbGwsCitfX05SX3Rna2lsbCwKK19fTlJfdGtpbGwsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oCmluZGV4IDc4MzM5MzEuLmNkOGE5NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oCkBAIC01OCw3ICs1OCw3IEBACiAgKiBpZiB5b3UgZG8gbm90IHJlcXVpcmUgdGhlIGF0b21pYyBndWFyYW50ZWVzLgogICoKICAqIE5vdGU6IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBiZSByZW9yZGVyZWQKLSAqIG9uIG5vbiB4ODYgYXJjaGl0ZWN0dXJlcywgc28gaWYgeW91IGFyZSB3cml0dGluZyBwb3J0YWJsZSBjb2RlLAorICogb24gbm9uIHg4NiBhcmNoaXRlY3R1cmVzLCBzbyBpZiB5b3UgYXJlIHdyaXRpbmcgcG9ydGFibGUgY29kZSwKICAqIG1ha2Ugc3VyZSBub3QgdG8gcmVseSBvbiBpdHMgcmVvcmRlcmluZyBndWFyYW50ZWVzLgogICoKICAqIE5vdGUgdGhhdCBAbnIgbWF5IGJlIGFsbW9zdCBhcmJpdHJhcmlseSBsYXJnZTsgdGhpcyBmdW5jdGlvbiBpcyBub3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCmluZGV4IDE0ZmFlMWYuLjdmMzBjY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaApAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgKHsJCQkJCQlcCiAJdHlwZW9mKGNvbmRpdGlvbikgX19yZXRfd2Fybl9vbiA9IChjb25kaXRpb24pOwkJCVwKIAlpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbikpIHsJCQkJCVwKLQkJcHJpbnRrKCJCVUc6IGF0ICVzOiVkICVzKClcbiIsIF9fRklMRV9fLAkJXAorCQlwcmludGsoIldBUk5JTkc6IGF0ICVzOiVkICVzKClcbiIsIF9fRklMRV9fLAkJXAogCQkJX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CQkJXAogCQlkdW1wX3N0YWNrKCk7CQkJCQkJXAogCX0JCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMva2RlYnVnLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2tkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzk5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2tkZWJ1Zy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfQVNNX0dFTkVSSUNfS0RFQlVHX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0tERUJVR19ICisKK2VudW0gZGllX3ZhbCB7CisJRElFX1VOVVNFRCwKK307CisKKyNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfS0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbG9jYWwuaAppbmRleCBhYjQ2OTI5Li4zM2Q3ZDA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbC5oCkBAIC0zMyw2ICszMywxOSBAQAogI2RlZmluZSBsb2NhbF9hZGQoaSxsKQlhdG9taWNfbG9uZ19hZGQoKGkpLCgmKGwpLT5hKSkKICNkZWZpbmUgbG9jYWxfc3ViKGksbCkJYXRvbWljX2xvbmdfc3ViKChpKSwoJihsKS0+YSkpCiAKKyNkZWZpbmUgbG9jYWxfc3ViX2FuZF90ZXN0KGksIGwpIGF0b21pY19sb25nX3N1Yl9hbmRfdGVzdCgoaSksICgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWxfZGVjX2FuZF90ZXN0KGwpIGF0b21pY19sb25nX2RlY19hbmRfdGVzdCgmKGwpLT5hKQorI2RlZmluZSBsb2NhbF9pbmNfYW5kX3Rlc3QobCkgYXRvbWljX2xvbmdfaW5jX2FuZF90ZXN0KCYobCktPmEpCisjZGVmaW5lIGxvY2FsX2FkZF9uZWdhdGl2ZShpLCBsKSBhdG9taWNfbG9uZ19hZGRfbmVnYXRpdmUoKGkpLCAoJihsKS0+YSkpCisjZGVmaW5lIGxvY2FsX2FkZF9yZXR1cm4oaSwgbCkgYXRvbWljX2xvbmdfYWRkX3JldHVybigoaSksICgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWxfc3ViX3JldHVybihpLCBsKSBhdG9taWNfbG9uZ19zdWJfcmV0dXJuKChpKSwgKCYobCktPmEpKQorI2RlZmluZSBsb2NhbF9pbmNfcmV0dXJuKGwpIGF0b21pY19sb25nX2luY19yZXR1cm4oJihsKS0+YSkKKworI2RlZmluZSBsb2NhbF9jbXB4Y2hnKGwsIG8sIG4pIGF0b21pY19sb25nX2NtcHhjaGcoKCYobCktPmEpLCAobyksIChuKSkKKyNkZWZpbmUgbG9jYWxfeGNoZyhsLCBuKSBhdG9taWNfbG9uZ194Y2hnKCgmKGwpLT5hKSwgKG4pKQorI2RlZmluZSBsb2NhbF9hZGRfdW5sZXNzKGwsIGEsIHUpIGF0b21pY19sb25nX2FkZF91bmxlc3MoKCYobCktPmEpLCAoYSksICh1KSkKKyNkZWZpbmUgbG9jYWxfaW5jX25vdF96ZXJvKGwpIGF0b21pY19sb25nX2luY19ub3RfemVybygmKGwpLT5hKQorCiAvKiBOb24tYXRvbWljIHZhcmlhbnRzLCBpZS4gcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgd29uJ3QgYmUgdG91Y2hlZAogICogaW4gaW50ZXJydXB0LCBldGMuICBTb21lIGFyY2hzIGNhbiBvcHRpbWl6ZSB0aGlzIGNhc2Ugd2VsbC4gKi8KICNkZWZpbmUgX19sb2NhbF9pbmMobCkJCWxvY2FsX3NldCgobCksIGxvY2FsX3JlYWQobCkgKyAxKQpAQCAtNDQsMTkgKzU3LDE5IEBACiAgKiBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlc2UgbmFpdmUgaW1wbGVtZW50YXRpb25zLiAgTm90ZSB0aGV5IHRha2UKICAqIGEgdmFyaWFibGUgKGVnLiBteXN0cnVjdC5mb28pLCBub3QgYW4gYWRkcmVzcy4KICAqLwotI2RlZmluZSBjcHVfbG9jYWxfcmVhZCh2KQlsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfc2V0KHYsIGkpCWxvY2FsX3NldCgmX19nZXRfY3B1X3Zhcih2KSwgKGkpKQotI2RlZmluZSBjcHVfbG9jYWxfaW5jKHYpCWxvY2FsX2luYygmX19nZXRfY3B1X3Zhcih2KSkKLSNkZWZpbmUgY3B1X2xvY2FsX2RlYyh2KQlsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgdikJbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgdikJbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9yZWFkKGwpCWxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIobCkpCisjZGVmaW5lIGNwdV9sb2NhbF9zZXQobCwgaSkJbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKGwpLCAoaSkpCisjZGVmaW5lIGNwdV9sb2NhbF9pbmMobCkJbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGwpKQorI2RlZmluZSBjcHVfbG9jYWxfZGVjKGwpCWxvY2FsX2RlYygmX19nZXRfY3B1X3ZhcihsKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCBsKQlsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkKKyNkZWZpbmUgY3B1X2xvY2FsX3N1YihpLCBsKQlsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkKIAogLyogTm9uLWF0b21pYyBpbmNyZW1lbnRzLCBpZS4gcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgd29uJ3QgYmUgdG91Y2hlZAogICogaW4gaW50ZXJydXB0LCBldGMuICBTb21lIGFyY2hzIGNhbiBvcHRpbWl6ZSB0aGlzIGNhc2Ugd2VsbC4KICAqLwotI2RlZmluZSBfX2NwdV9sb2NhbF9pbmModikJX19sb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyh2KQlfX2xvY2FsX2RlYygmX19nZXRfY3B1X3Zhcih2KSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIHYpCV9fbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCB2KQlfX2xvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9pbmMobCkJX19sb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIobCkpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyhsKQlfX2xvY2FsX2RlYygmX19nZXRfY3B1X3ZhcihsKSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIGwpCV9fbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpCisjZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCBsKQlfX2xvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKGwpKQogCiAjZW5kaWYgLyogX0FTTV9HRU5FUklDX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcG9sbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiY2U4MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcG9sbC5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgX19BU01fR0VORVJJQ19QT0xMX0gKKyNkZWZpbmUgX19BU01fR0VORVJJQ19QT0xMX0gKKworLyogVGhlc2UgYXJlIHNwZWNpZmllZCBieSBpQkNTMiAqLworI2RlZmluZSBQT0xMSU4JCTB4MDAwMQorI2RlZmluZSBQT0xMUFJJCQkweDAwMDIKKyNkZWZpbmUgUE9MTE9VVAkJMHgwMDA0CisjZGVmaW5lIFBPTExFUlIJCTB4MDAwOAorI2RlZmluZSBQT0xMSFVQCQkweDAwMTAKKyNkZWZpbmUgUE9MTE5WQUwJMHgwMDIwCisKKy8qIFRoZSByZXN0IHNlZW0gdG8gYmUgbW9yZS1vci1sZXNzIG5vbnN0YW5kYXJkLiBDaGVjayB0aGVtISAqLworI2RlZmluZSBQT0xMUkROT1JNCTB4MDA0MAorI2RlZmluZSBQT0xMUkRCQU5ECTB4MDA4MAorI2lmbmRlZiBQT0xMV1JOT1JNCisjZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCisjZW5kaWYKKyNpZm5kZWYgUE9MTFdSQkFORAorI2RlZmluZSBQT0xMV1JCQU5ECTB4MDIwMAorI2VuZGlmCisjaWZuZGVmIFBPTExNU0cKKyNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCisjZW5kaWYKKyNpZm5kZWYgUE9MTFJFTU9WRQorI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAorI2VuZGlmCisjaWZuZGVmIFBPTExSREhVUAorI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCisjZW5kaWYKKworc3RydWN0IHBvbGxmZCB7CisJaW50IGZkOworCXNob3J0IGV2ZW50czsKKwlzaG9ydCByZXZlbnRzOworfTsKKworI2VuZGlmCS8qIF9fQVNNX0dFTkVSSUNfUE9MTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggZjM4MDZhNzQuLjg0MTU1ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTksOCArOSwxMyBAQAogLyogQWxpZ24gLiB0byBhIDggYnl0ZSBib3VuZGFyeSBlcXVhbHMgdG8gbWF4aW11bSBmdW5jdGlvbiBhbGlnbm1lbnQuICovCiAjZGVmaW5lIEFMSUdOX0ZVTkNUSU9OKCkgIC4gPSBBTElHTig4KQogCi0jZGVmaW5lIFJPREFUQQkJCQkJCQkJXAotCS4gPSBBTElHTig0MDk2KTsJCQkJCQlcCisvKiAuZGF0YSBzZWN0aW9uICovCisjZGVmaW5lIERBVEFfREFUQQkJCQkJCQlcCisJKiguZGF0YSkJCQkJCQkJXAorCSooLmRhdGEuaW5pdC5yZWZvaykKKworI2RlZmluZSBST19EQVRBKGFsaWduKQkJCQkJCQlcCisJLiA9IEFMSUdOKChhbGlnbikpOwkJCQkJCVwKIAkucm9kYXRhICAgICAgICAgICA6IEFUKEFERFIoLnJvZGF0YSkgLSBMT0FEX09GRlNFVCkgewkJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3JvZGF0YSkgPSAuOwkJCVwKIAkJKigucm9kYXRhKSAqKC5yb2RhdGEuKikJCQkJCVwKQEAgLTEzMCw3ICsxMzUsMTEgQEAKIAkJVk1MSU5VWF9TWU1CT0woX19lbmRfcm9kYXRhKSA9IC47CQkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKLQkuID0gQUxJR04oNDA5Nik7CisJLiA9IEFMSUdOKChhbGlnbikpOworCisvKiBST0RBVEEgcHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgKiBBbGwgYXJjaHMgYXJlIHN1cHBvc2VkIHRvIHVzZSBST19EQVRBKCkgKi8KKyNkZWZpbmUgUk9EQVRBIFJPX0RBVEEoNDA5NikKIAogI2RlZmluZSBTRUNVUklUWV9JTklUCQkJCQkJCVwKIAkuc2VjdXJpdHlfaW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLnNlY3VyaXR5X2luaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsgXApAQCAtMTM5LDYgKzE0OCwxMyBAQAogCQlWTUxJTlVYX1NZTUJPTChfX3NlY3VyaXR5X2luaXRjYWxsX2VuZCkgPSAuOwkJXAogCX0KIAorLyogLnRleHQgc2VjdGlvbi4gTWFwIHRvIGZ1bmN0aW9uIGFsaWdubWVudCB0byBhdm9pZCBhZGRyZXNzIGNoYW5nZXMKKyAqIGR1cmluZyBzZWNvbmQgbGQgcnVuIGluIHNlY29uZCBsZCBwYXNzIHdoZW4gZ2VuZXJhdGluZyBTeXN0ZW0ubWFwICovCisjZGVmaW5lIFRFWFRfVEVYVAkJCQkJCQlcCisJCUFMSUdOX0ZVTkNUSU9OKCk7CQkJCQlcCisJCSooLnRleHQpCQkJCQkJXAorCQkqKC50ZXh0LmluaXQucmVmb2spCisKIC8qIHNjaGVkLnRleHQgaXMgYWxpbmcgdG8gZnVuY3Rpb24gYWxpZ25tZW50IHRvIHNlY3VyZSB3ZSBoYXZlIHNhbWUKICAqIGFkZHJlc3MgZXZlbiBhdCBzZWNvbmQgbGQgcGFzcyB3aGVuIGdlbmVyYXRpbmcgU3lzdGVtLm1hcCAqLwogI2RlZmluZSBTQ0hFRF9URVhUCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2F0b21pYy5oIGIvaW5jbHVkZS9hc20taDgzMDAvYXRvbWljLmgKaW5kZXggMjFmNTQ0Mi4uYjRjZjBlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvYXRvbWljLmgKQEAgLTM3LDYgKzM3LDcgQEAKIH0KIAogI2RlZmluZSBhdG9taWNfc3ViKGksIHYpIGF0b21pY19zdWJfcmV0dXJuKGksIHYpCisjZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSx2KSAoYXRvbWljX3N1Yl9yZXR1cm4oaSwgdikgPT0gMCkKIAogc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19pbmNfcmV0dXJuKGF0b21pY190ICp2KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAva2RlYnVnLmggYi9pbmNsdWRlL2FzbS1oODMwMC9rZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWNlMWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taDgzMDAva2RlYnVnLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2tkZWJ1Zy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20taDgzMDAvcGd0YWJsZS5oCmluZGV4IGRkZDA3ZjQuLmEwOTIzMGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9wZ3RhYmxlLmgKQEAgLTU1LDEwICs1NSw2IEBACiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCiAJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCiAKLSNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbikKLSNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJMAotI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuKQotCiAvKgogICogQWxsIDMyYml0IGFkZHJlc3NlcyBhcmUgZWZmZWN0aXZlbHkgdmFsaWQgZm9yIHZtYWxsb2MuLi4KICAqIFNvcnQgb2YgbWVhbmluZ2xlc3MgZm9yIG5vbi1WTSB0YXJnZXRzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcG9sbC5oIGIvaW5jbHVkZS9hc20taDgzMDAvcG9sbC5oCmluZGV4IGZjNTIxMDMuLmY2MTU0MGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9wb2xsLmgKQEAgLTEsMjMgKzEsMTEgQEAKICNpZm5kZWYgX19IODMwMF9QT0xMX0gKICNkZWZpbmUgX19IODMwMF9QT0xMX0gKIAotI2RlZmluZSBQT0xMSU4JCSAgMQotI2RlZmluZSBQT0xMUFJJCQkgIDIKLSNkZWZpbmUgUE9MTE9VVAkJICA0Ci0jZGVmaW5lIFBPTExFUlIJCSAgOAotI2RlZmluZSBQT0xMSFVQCQkgMTYKLSNkZWZpbmUgUE9MTE5WQUwJIDMyCi0jZGVmaW5lIFBPTExSRE5PUk0JIDY0CiAjZGVmaW5lIFBPTExXUk5PUk0JUE9MTE9VVAotI2RlZmluZSBQT0xMUkRCQU5ECTEyOAogI2RlZmluZSBQT0xMV1JCQU5ECTI1NgotI2RlZmluZSBQT0xMTVNHCQkweDA0MDAKLSNkZWZpbmUgUE9MTFJESFVQICAgICAgIDB4MjAwMAogCi1zdHJ1Y3QgcG9sbGZkIHsKLQlpbnQgZmQ7Ci0Jc2hvcnQgZXZlbnRzOwotCXNob3J0IHJldmVudHM7Ci19OworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BvbGwuaD4KKworI3VuZGVmIFBPTExSRU1PVkUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3Byb2Nlc3Nvci5oCmluZGV4IDk5YjY2NGEuLjQ5ZmM4ODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3Byb2Nlc3Nvci5oCkBAIC03OCw3ICs3OCw3IEBACiBkbyB7CQkJCQkJCSAgICAgICAgXAogCXNldF9mcyhVU0VSX0RTKTsgICAgICAgICAgIC8qIHJlYWRzIGZyb20gdXNlciBzcGFjZSAqLyAgXAogICAJKF9yZWdzKS0+cGMgPSAoX3BjKTsJCQkJICAgICAgICBcCi0JKF9yZWdzKS0+Y2NyICY9IDB4MDA7CSAgIC8qIGNsZWFyIGtlcm5lbCBmbGFnICovICAgICAgXAorCShfcmVncyktPmNjciA9IDB4MDA7CSAgIC8qIGNsZWFyIGFsbCBmbGFncyAqLyAgICAgICAgXAogCShfcmVncyktPmVyNSA9IGN1cnJlbnQtPm1tLT5zdGFydF9kYXRhOwkvKiBHT1QgYmFzZSAqLyAgXAogCXdydXNwKCh1bnNpZ25lZCBsb25nKShfdXNwKSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSozKTsJXAogfSB3aGlsZSgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1oODMwMC9zeXN0ZW0uaAppbmRleCA1MDg0YTlkLi43ODA3MDE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9zeXN0ZW0uaApAQCAtOTgsNyArOTgsNiBAQAogI2VuZGlmCiAKICNkZWZpbmUgeGNoZyhwdHIseCkgKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCi0jZGVmaW5lIHRhcyhwdHIpICh4Y2hnKChwdHIpLDEpKQogCiBzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CiAjZGVmaW5lIF9feGcoeCkgKCh2b2xhdGlsZSBzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHgpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaAppbmRleCA3ZGRkNDE0Li45OWYzYzM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaApAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBfX05SX3RpbWUJCSAxMwogI2RlZmluZSBfX05SX21rbm9kCQkgMTQKICNkZWZpbmUgX19OUl9jaG1vZAkJIDE1Ci0jZGVmaW5lIF9fTlJfY2hvd24JCSAxNgorI2RlZmluZSBfX05SX2xjaG93bgkJIDE2CiAjZGVmaW5lIF9fTlJfYnJlYWsJCSAxNwogI2RlZmluZSBfX05SX29sZHN0YXQJCSAxOAogI2RlZmluZSBfX05SX2xzZWVrCQkgMTkKQEAgLTExNSwxMCArMTE1LDEwIEBACiAjZGVmaW5lIF9fTlJfbHN0YXQJCTEwNwogI2RlZmluZSBfX05SX2ZzdGF0CQkxMDgKICNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5Ci0jZGVmaW5lIF9fTlJfaW9wbAkJLyogMTEwICovIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgX19OUl9pb3BsCQkxMTAKICNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKLSNkZWZpbmUgX19OUl9pZGxlCQkvKiAxMTIgKi8gT2Jzb2xldGUKLSNkZWZpbmUgX19OUl92bTg2CQkvKiAxMTMgKi8gbm90IHN1cHBvcnRlZAorI2RlZmluZSBfX05SX2lkbGUJCTExMgorI2RlZmluZSBfX05SX3ZtODZvbGQJCTExMwogI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKICNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKICNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKQEAgLTEyOCw3ICsxMjgsNyBAQAogI2RlZmluZSBfX05SX2Nsb25lCQkxMjAKICNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lCTEyMQogI2RlZmluZSBfX05SX3VuYW1lCQkxMjIKLSNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkxMjMKKyNkZWZpbmUgX19OUl9tb2RpZnlfbGR0CQkxMjMKICNkZWZpbmUgX19OUl9hZGp0aW1leAkJMTI0CiAjZGVmaW5lIF9fTlJfbXByb3RlY3QJCTEyNQogI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrCTEyNgpAQCAtMTcxLDcgKzE3MSw3IEBACiAjZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjMKICNkZWZpbmUgX19OUl9zZXRyZXN1aWQJCTE2NAogI2RlZmluZSBfX05SX2dldHJlc3VpZAkJMTY1Ci0jZGVmaW5lIF9fTlJfZ2V0cGFnZXNpemUJMTY2CisjZGVmaW5lIF9fTlJfdm04NgkJMTY2CiAjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlCTE2NwogI2RlZmluZSBfX05SX3BvbGwJCTE2OAogI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZAkxNzkKICNkZWZpbmUgX19OUl9wcmVhZDY0CQkxODAKICNkZWZpbmUgX19OUl9wd3JpdGU2NAkJMTgxCi0jZGVmaW5lIF9fTlJfbGNob3duCQkxODIKKyNkZWZpbmUgX19OUl9jaG93bgkJMTgyCiAjZGVmaW5lIF9fTlJfZ2V0Y3dkCQkxODMKICNkZWZpbmUgX19OUl9jYXBnZXQJCTE4NAogI2RlZmluZSBfX05SX2NhcHNldAkJMTg1CkBAIC0yMDMsNyArMjAzLDcgQEAKICNkZWZpbmUgX19OUl9zdGF0NjQJCTE5NQogI2RlZmluZSBfX05SX2xzdGF0NjQJCTE5NgogI2RlZmluZSBfX05SX2ZzdGF0NjQJCTE5NwotI2RlZmluZSBfX05SX2Nob3duMzIJCTE5OAorI2RlZmluZSBfX05SX2xjaG93bjMyCQkxOTgKICNkZWZpbmUgX19OUl9nZXR1aWQzMgkJMTk5CiAjZGVmaW5lIF9fTlJfZ2V0Z2lkMzIJCTIwMAogI2RlZmluZSBfX05SX2dldGV1aWQzMgkJMjAxCkBAIC0yMTcsMTUgKzIxNywxOCBAQAogI2RlZmluZSBfX05SX2dldHJlc3VpZDMyCTIwOQogI2RlZmluZSBfX05SX3NldHJlc2dpZDMyCTIxMAogI2RlZmluZSBfX05SX2dldHJlc2dpZDMyCTIxMQotI2RlZmluZSBfX05SX2xjaG93bjMyCQkyMTIKKyNkZWZpbmUgX19OUl9jaG93bjMyCQkyMTIKICNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCiAjZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAogI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQogI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgogI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QJCTIxNworI2RlZmluZSBfX05SX21pbmNvcmUJCTIxOAorI2RlZmluZSBfX05SX21hZHZpc2UJCTIxOQorI2RlZmluZSBfX05SX21hZHZpc2UxCQkyMTkKICNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyMjAKICNkZWZpbmUgX19OUl9mY250bDY0CQkyMjEKLSNkZWZpbmUgX19OUl9zZWN1cml0eQkJMjIzCisvKiAyMjMgaXMgdW51c2VkICovCiAjZGVmaW5lIF9fTlJfZ2V0dGlkCQkyMjQKICNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCTIyNQogI2RlZmluZSBfX05SX3NldHhhdHRyCQkyMjYKQEAgLTI1MiwxMyArMjU1LDEzIEBACiAjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCTI0NwogI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjQ4CiAjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkyNDkKLSNkZWZpbmUgX19OUl9hbGxvY19odWdlcGFnZXMJMjUwCi0jZGVmaW5lIF9fTlJfZnJlZV9odWdlcGFnZXMJMjUxCisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0CQkyNTAKKy8qIDI1MSBpcyBhdmFpbGFibGUgZm9yIHJldXNlICh3YXMgYnJpZWZseSBzeXNfc2V0X3pvbmVfcmVjbGFpbSkgKi8KICNkZWZpbmUgX19OUl9leGl0X2dyb3VwCQkyNTIKICNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkyNTMKLSNkZWZpbmUgX19OUl9zeXNfZXBvbGxfY3JlYXRlCTI1NAotI2RlZmluZSBfX05SX3N5c19lcG9sbF9jdGwJMjU1Ci0jZGVmaW5lIF9fTlJfc3lzX2Vwb2xsX3dhaXQJMjU2CisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlCTI1NAorI2RlZmluZSBfX05SX2Vwb2xsX2N0bAkJMjU1CisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJMjU2CiAjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcwkyNTcKICNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MJMjU4CiAjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCTI1OQpAQCAtMjkxLDEwICsyOTQsNDEgQEAKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODcKICNkZWZpbmUgX19OUl9rZXljdGwJCTI4OAorI2RlZmluZSBfX05SX2lvcHJpb19zZXQJCTI4OQorI2RlZmluZSBfX05SX2lvcHJpb19nZXQJCTI5MAorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdAkyOTEKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaAkyOTIKKyNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoCTI5MworI2RlZmluZSBfX05SX21pZ3JhdGVfcGFnZXMJMjk0CisjZGVmaW5lIF9fTlJfb3BlbmF0CQkyOTUKKyNkZWZpbmUgX19OUl9ta2RpcmF0CQkyOTYKKyNkZWZpbmUgX19OUl9ta25vZGF0CQkyOTcKKyNkZWZpbmUgX19OUl9mY2hvd25hdAkJMjk4CisjZGVmaW5lIF9fTlJfZnV0aW1lc2F0CQkyOTkKKyNkZWZpbmUgX19OUl9mc3RhdGF0NjQJCTMwMAorI2RlZmluZSBfX05SX3VubGlua2F0CQkzMDEKKyNkZWZpbmUgX19OUl9yZW5hbWVhdAkJMzAyCisjZGVmaW5lIF9fTlJfbGlua2F0CQkzMDMKKyNkZWZpbmUgX19OUl9zeW1saW5rYXQJCTMwNAorI2RlZmluZSBfX05SX3JlYWRsaW5rYXQJCTMwNQorI2RlZmluZSBfX05SX2ZjaG1vZGF0CQkzMDYKKyNkZWZpbmUgX19OUl9mYWNjZXNzYXQJCTMwNworI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkzMDgKKyNkZWZpbmUgX19OUl9wcG9sbAkJMzA5CisjZGVmaW5lIF9fTlJfdW5zaGFyZQkJMzEwCisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMxMQorI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkzMTIKKyNkZWZpbmUgX19OUl9zcGxpY2UJCTMxMworI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZQkzMTQKKyNkZWZpbmUgX19OUl90ZWUJCTMxNQorI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkzMTYKKyNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkzMTcKKyNkZWZpbmUgX19OUl9nZXRjcHUJCTMxOAorI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CTMxOQogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIE5SX3N5c2NhbGxzIDI4OQorI2RlZmluZSBOUl9zeXNjYWxscyAzMjAKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hbHRlcm5hdGl2ZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9hbHRlcm5hdGl2ZS5oCmluZGV4IDBmNzBiMzcuLmViN2RhNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYWx0ZXJuYXRpdmUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2FsdGVybmF0aXZlLmgKQEAgLTk4LDYgKzk4LDEyIEBACiAJCSAgICAgICIucHJldmlvdXMiIDogb3V0cHV0IDogW2ZlYXRdICJpIiAoZmVhdHVyZSksICMjaW5wdXQpCiAKIC8qCisgKiB1c2UgdGhpcyBtYWNybyhzKSBpZiB5b3UgbmVlZCBtb3JlIHRoYW4gb25lIG91dHB1dCBwYXJhbWV0ZXIKKyAqIGluIGFsdGVybmF0aXZlX2lvCisgKi8KKyNkZWZpbmUgQVNNX09VVFBVVDIoYSwgYikgYSwgYgorCisvKgogICogQWx0ZXJuYXRpdmUgaW5saW5lIGFzc2VtYmx5IGZvciBTTVAuCiAgKgogICogVGhlIExPQ0tfUFJFRklYIG1hY3JvIGRlZmluZWQgaGVyZSByZXBsYWNlcyB0aGUgTE9DSyBhbmQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oCmluZGV4IDRkZDI3MjMuLjQzN2FhYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CiAKIC8qCiAgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgpAQCAtNTEsNyArNTIsNyBAQAogfQogCiAvKioKLSAqIGF0b21pY19zdWIgLSBzdWJ0cmFjdCB0aGUgYXRvbWljIHZhcmlhYmxlCisgKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgaW50ZWdlciBmcm9tIGF0b21pYyB2YXJpYWJsZQogICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKICAqIApAQCAtMTcwLDcgKzE3MSw3IEBACiB9CiAKIC8qKgotICogYXRvbWljX2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgorICogYXRvbWljX2FkZF9yZXR1cm4gLSBhZGQgaW50ZWdlciBhbmQgcmV0dXJuCiAgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CiAgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKICAqCkBAIC0xODEsNyArMTgyLDcgQEAKIAlpbnQgX19pOwogI2lmZGVmIENPTkZJR19NMzg2CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpZih1bmxpa2VseShib290X2NwdV9kYXRhLng4Nj09MykpCisJaWYodW5saWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPD0gMykpCiAJCWdvdG8gbm9feGFkZDsKICNlbmRpZgogCS8qIE1vZGVybiA0ODYrIHByb2Nlc3NvciAqLwpAQCAtMjAyLDEzICsyMDMsMjAgQEAKICNlbmRpZgogfQogCisvKioKKyAqIGF0b21pY19zdWJfcmV0dXJuIC0gc3VidHJhY3QgaW50ZWdlciBhbmQgcmV0dXJuCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMgQHYgLSBAaQorICovCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQogewogCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSx2KTsKIH0KIAotI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvbGQsIG5ldykgKChpbnQpY21weGNoZygmKCh2KS0+Y291bnRlciksIG9sZCwgbmV3KSkKLSNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG9sZCwgbmV3KSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvbGQpLCAobmV3KSkpCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCAobmV3KSkpCiAKIC8qKgogICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYWxyZWFkeSBhIGdpdmVuIHZhbHVlCkBAIC0yMTksMjAgKzIyNywyMSBAQAogICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIEB2IHdhcyBub3QgYWxyZWFkeSBAdS4KICAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgogICovCi0jZGVmaW5lIGF0b21pY19hZGRfdW5sZXNzKHYsIGEsIHUpCQkJCVwKLSh7CQkJCQkJCQlcCi0JaW50IGMsIG9sZDsJCQkJCQlcCi0JYyA9IGF0b21pY19yZWFkKHYpOwkJCQkJXAotCWZvciAoOzspIHsJCQkJCQlcCi0JCWlmICh1bmxpa2VseShjID09ICh1KSkpCQkJCVwKLQkJCWJyZWFrOwkJCQkJXAotCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwkJXAotCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkJCQkJXAotCQkJYnJlYWs7CQkJCQlcCi0JCWMgPSBvbGQ7CQkJCQlcCi0JfQkJCQkJCQlcCi0JYyAhPSAodSk7CQkJCQkJXAotfSkKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQoreworCWludCBjLCBvbGQ7CisJYyA9IGF0b21pY19yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKICNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCiAKICNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgIChhdG9taWNfYWRkX3JldHVybigxLHYpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmgKaW5kZXggMjczYjUwNi4uYTIwZmU5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2JpdG9wcy5oCkBAIC0yNyw3ICsyNyw3IEBACiAgKiBpZiB5b3UgZG8gbm90IHJlcXVpcmUgdGhlIGF0b21pYyBndWFyYW50ZWVzLgogICoKICAqIE5vdGU6IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBiZSByZW9yZGVyZWQKLSAqIG9uIG5vbiB4ODYgYXJjaGl0ZWN0dXJlcywgc28gaWYgeW91IGFyZSB3cml0dGluZyBwb3J0YWJsZSBjb2RlLAorICogb24gbm9uIHg4NiBhcmNoaXRlY3R1cmVzLCBzbyBpZiB5b3UgYXJlIHdyaXRpbmcgcG9ydGFibGUgY29kZSwKICAqIG1ha2Ugc3VyZSBub3QgdG8gcmVseSBvbiBpdHMgcmVvcmRlcmluZyBndWFyYW50ZWVzLgogICoKICAqIE5vdGUgdGhhdCBAbnIgbWF5IGJlIGFsbW9zdCBhcmJpdHJhcmlseSBsYXJnZTsgdGhpcyBmdW5jdGlvbiBpcyBub3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYm9vdC5oIGIvaW5jbHVkZS9hc20taTM4Ni9ib290LmgKaW5kZXggZTc2ODZkMC4uYmQwMjRhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9ib290LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9ib290LmgKQEAgLTEyLDcgKzEyLDcgQEAKICNkZWZpbmUgRVhURU5ERURfVkdBCTB4ZmZmZQkJLyogODB4NTAgbW9kZSAqLwogI2RlZmluZSBBU0tfVkdBCQkweGZmZmQJCS8qIGFzayBmb3IgaXQgYXQgYm9vdHVwICovCiAKLS8qIFBoeXNpY2FsIGFkZHJlc3Mgd2hlcmUga2VucmVsIHNob3VsZCBiZSBsb2FkZWQuICovCisvKiBQaHlzaWNhbCBhZGRyZXNzIHdoZXJlIGtlcm5lbCBzaG91bGQgYmUgbG9hZGVkLiAqLwogI2RlZmluZSBMT0FEX1BIWVNJQ0FMX0FERFIgKChDT05GSUdfUEhZU0lDQUxfU1RBUlQgXAogCQkJCSsgKENPTkZJR19QSFlTSUNBTF9BTElHTiAtIDEpKSBcCiAJCQkJJiB+KENPTkZJR19QSFlTSUNBTF9BTElHTiAtIDEpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9jbXB4Y2hnLmggYi9pbmNsdWRlL2FzbS1pMzg2L2NtcHhjaGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWRjZWYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9jbXB4Y2hnLmgKQEAgLTAsMCArMSwyOTMgQEAKKyNpZm5kZWYgX19BU01fQ01QWENIR19ICisjZGVmaW5lIF9fQVNNX0NNUFhDSEdfSAorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+IC8qIGZvciBMT0NLX1BSRUZJWCAqLworCisjZGVmaW5lIHhjaGcocHRyLHYpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykodiksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQorCitzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CisjZGVmaW5lIF9feGcoeCkgKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHgpKQorCisKKyNpZmRlZiBDT05GSUdfWDg2X0NNUFhDSEc2NAorCisvKgorICogVGhlIHNlbWFudGljcyBvZiBYQ0hHQ01QOEIgYXJlIGEgYml0IHN0cmFuZ2UsIHRoaXMgaXMgd2h5CisgKiB0aGVyZSBpcyBhIGxvb3AgYW5kIHRoZSBsb2FkaW5nIG9mICUlZWF4IGFuZCAlJWVkeCBoYXMgdG8KKyAqIGJlIGluc2lkZS4gVGhpcyBpbmxpbmVzIHdlbGwgaW4gbW9zdCBjYXNlcywgdGhlIGNhY2hlZAorICogY29zdCBpcyBhcm91bmQgfjM4IGN5Y2xlcy4gKGluIHRoZSBmdXR1cmUgd2UgbWlnaHQgd2FudAorICogdG8gZG8gYW4gU0lNRC8zRE5PVyEvTU1YL0ZQVSA2NC1iaXQgc3RvcmUgaGVyZSwgYnV0IHRoYXQKKyAqIG1pZ2h0IGhhdmUgYW4gaW1wbGljaXQgRlBVLXNhdmUgYXMgYSBjb3N0LCBzbyBpdCdzIG5vdAorICogY2xlYXIgd2hpY2ggcGF0aCB0byBnby4pCisgKgorICogY21weGNoZzhiIG11c3QgYmUgdXNlZCB3aXRoIHRoZSBsb2NrIHByZWZpeCBoZXJlIHRvIGFsbG93CisgKiB0aGUgaW5zdHJ1Y3Rpb24gdG8gYmUgZXhlY3V0ZWQgYXRvbWljYWxseSwgc2VlIHBhZ2UgMy0xMDIKKyAqIG9mIHRoZSBpbnN0cnVjdGlvbiBzZXQgcmVmZXJlbmNlIDI0MzE5MTAyLnBkZi4gV2UgbmVlZAorICogdGhlIHJlYWRlciBzaWRlIHRvIHNlZSB0aGUgY29oZXJlbnQgNjRiaXQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdCAodW5zaWduZWQgbG9uZyBsb25nICogcHRyLAorCQl1bnNpZ25lZCBpbnQgbG93LCB1bnNpZ25lZCBpbnQgaGlnaCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJcbjE6XHQiCisJCSJtb3ZsICglMCksICUlZWF4XG5cdCIKKwkJIm1vdmwgNCglMCksICUlZWR4XG5cdCIKKwkJImxvY2sgY21weGNoZzhiICglMClcblx0IgorCQkiam56IDFiIgorCQk6IC8qIG5vIG91dHB1dHMgKi8KKwkJOgkiRCIocHRyKSwKKwkJCSJiIihsb3cpLAorCQkJImMiKGhpZ2gpCisJCToJImF4IiwiZHgiLCJtZW1vcnkiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0XzY0Yml0X2NvbnN0YW50ICh1bnNpZ25lZCBsb25nIGxvbmcgKnB0ciwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCit7CisJX19zZXRfNjRiaXQocHRyLCh1bnNpZ25lZCBpbnQpKHZhbHVlKSwgKHVuc2lnbmVkIGludCkoKHZhbHVlKT4+MzJVTEwpKTsKK30KKyNkZWZpbmUgbGxfbG93KHgpCSooKCh1bnNpZ25lZCBpbnQqKSYoeCkpKzApCisjZGVmaW5lIGxsX2hpZ2goeCkJKigoKHVuc2lnbmVkIGludCopJih4KSkrMSkKKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0XzY0Yml0X3ZhciAodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCisJCQkgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKQoreworCV9fc2V0XzY0Yml0KHB0cixsbF9sb3codmFsdWUpLCBsbF9oaWdoKHZhbHVlKSk7Cit9CisKKyNkZWZpbmUgc2V0XzY0Yml0KHB0cix2YWx1ZSkgXAorKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbHVlKSA/IFwKKyBfX3NldF82NGJpdF9jb25zdGFudChwdHIsIHZhbHVlKSA6IFwKKyBfX3NldF82NGJpdF92YXIocHRyLCB2YWx1ZSkgKQorCisjZGVmaW5lIF9zZXRfNjRiaXQocHRyLHZhbHVlKSBcCisoX19idWlsdGluX2NvbnN0YW50X3AodmFsdWUpID8gXAorIF9fc2V0XzY0Yml0KHB0ciwgKHVuc2lnbmVkIGludCkodmFsdWUpLCAodW5zaWduZWQgaW50KSgodmFsdWUpPj4zMlVMTCkgKSA6IFwKKyBfX3NldF82NGJpdChwdHIsIGxsX2xvdyh2YWx1ZSksIGxsX2hpZ2godmFsdWUpKSApCisKKyNlbmRpZgorCisvKgorICogTm90ZTogbm8gImxvY2siIHByZWZpeCBldmVuIG9uIFNNUDogeGNoZyBhbHdheXMgaW1wbGllcyBsb2NrIGFueXdheQorICogTm90ZSAyOiB4Y2hnIGhhcyBzaWRlIGVmZmVjdCwgc28gdGhhdCBhdHRyaWJ1dGUgdm9sYXRpbGUgaXMgbmVjZXNzYXJ5LAorICoJICBidXQgZ2VuZXJhbGx5IHRoZSBwcmltaXRpdmUgaXMgaW52YWxpZCwgKnB0ciBpcyBvdXRwdXQgYXJndW1lbnQuIC0tQU5LCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLCBpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSAxOgorCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGdiICViMCwlMSIKKwkJCQk6Ij1xIiAoeCkKKwkJCQk6Im0iICgqX194ZyhwdHIpKSwgIjAiICh4KQorCQkJCToibWVtb3J5Iik7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGd3ICV3MCwlMSIKKwkJCQk6Ij1yIiAoeCkKKwkJCQk6Im0iICgqX194ZyhwdHIpKSwgIjAiICh4KQorCQkJCToibWVtb3J5Iik7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGdsICUwLCUxIgorCQkJCToiPXIiICh4KQorCQkJCToibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCisJCQkJOiJtZW1vcnkiKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4geDsKK30KKworLyoKKyAqIEF0b21pYyBjb21wYXJlIGFuZCBleGNoYW5nZS4gIENvbXBhcmUgT0xEIHdpdGggTUVNLCBpZiBpZGVudGljYWwsCisgKiBzdG9yZSBORVcgaW4gTUVNLiAgUmV0dXJuIHRoZSBpbml0aWFsIHZhbHVlIGluIE1FTS4gIFN1Y2Nlc3MgaXMKKyAqIGluZGljYXRlZCBieSBjb21wYXJpbmcgUkVUVVJOIHdpdGggT0xELgorICovCisKKyNpZmRlZiBDT05GSUdfWDg2X0NNUFhDSEcKKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRyAxCisjZGVmaW5lIGNtcHhjaGcocHRyLG8sbilcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCh1bnNpZ25lZCBsb25nKShvKSxcCisJCQkJCSh1bnNpZ25lZCBsb25nKShuKSxzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIHN5bmNfY21weGNoZyhwdHIsbyxuKVwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX3N5bmNfY21weGNoZygocHRyKSwodW5zaWduZWQgbG9uZykobyksXAorCQkJCQkodW5zaWduZWQgbG9uZykobiksc2l6ZW9mKCoocHRyKSkpKQorI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0cixvLG4pXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZ19sb2NhbCgocHRyKSwodW5zaWduZWQgbG9uZykobyksXAorCQkJCQkodW5zaWduZWQgbG9uZykobiksc2l6ZW9mKCoocHRyKSkpKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2OworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oTE9DS19QUkVGSVggImNtcHhjaGdiICViMSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgMjoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oTE9DS19QUkVGSVggImNtcHhjaGd3ICV3MSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgNDoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oTE9DS19QUkVGSVggImNtcHhjaGdsICUxLCUyIgorCQkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJfQorCXJldHVybiBvbGQ7Cit9CisKKy8qCisgKiBBbHdheXMgdXNlIGxvY2tlZCBvcGVyYXRpb25zIHdoZW4gdG91Y2hpbmcgbWVtb3J5IHNoYXJlZCB3aXRoIGEKKyAqIGh5cGVydmlzb3IsIHNpbmNlIHRoZSBzeXN0ZW0gbWF5IGJlIFNNUCBldmVuIGlmIHRoZSBndWVzdCBrZXJuZWwKKyAqIGlzbid0LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zeW5jX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBvbGQsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2OworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGdiICViMSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgMjoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGd3ICV3MSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgNDoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2s7IGNtcHhjaGdsICUxLCUyIgorCQkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJfQorCXJldHVybiBvbGQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NtcHhjaGdfbG9jYWwodm9sYXRpbGUgdm9pZCAqcHRyLAorCQkJdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHByZXY7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY21weGNoZ2IgJWIxLCUyIgorCQkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJY2FzZSAyOgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY21weGNoZ3cgJXcxLCUyIgorCQkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJY2FzZSA0OgorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY21weGNoZ2wgJTEsJTIiCisJCQkJICAgICA6ICI9YSIocHJldikKKwkJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwl9CisJcmV0dXJuIG9sZDsKK30KKworI2lmbmRlZiBDT05GSUdfWDg2X0NNUFhDSEcKKy8qCisgKiBCdWlsZGluZyBhIGtlcm5lbCBjYXBhYmxlIHJ1bm5pbmcgb24gODAzODYuIEl0IG1heSBiZSBuZWNlc3NhcnkgdG8KKyAqIHNpbXVsYXRlIHRoZSBjbXB4Y2hnIG9uIHRoZSA4MDM4NiBDUFUuIEZvciB0aGF0IHB1cnBvc2Ugd2UgZGVmaW5lCisgKiBhIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBzaXplcyB3ZSBzdXBwb3J0LgorICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNtcHhjaGdfMzg2X3U4KHZvbGF0aWxlIHZvaWQgKiwgdTgsIHU4KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNtcHhjaGdfMzg2X3UxNih2b2xhdGlsZSB2b2lkICosIHUxNiwgdTE2KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNtcHhjaGdfMzg2X3UzMih2b2xhdGlsZSB2b2lkICosIHUzMiwgdTMyKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNtcHhjaGdfMzg2KHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJcmV0dXJuIGNtcHhjaGdfMzg2X3U4KHB0ciwgb2xkLCBuZXcpOworCWNhc2UgMjoKKwkJcmV0dXJuIGNtcHhjaGdfMzg2X3UxNihwdHIsIG9sZCwgbmV3KTsKKwljYXNlIDQ6CisJCXJldHVybiBjbXB4Y2hnXzM4Nl91MzIocHRyLCBvbGQsIG5ldyk7CisJfQorCXJldHVybiBvbGQ7Cit9CisKKyNkZWZpbmUgY21weGNoZyhwdHIsbyxuKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJCVwKKwlpZiAobGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2ID4gMykpCQkJCVwKKwkJX19yZXQgPSBfX2NtcHhjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwJCVwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSk7IFwKKwllbHNlCQkJCQkJCQlcCisJCV9fcmV0ID0gY21weGNoZ18zODYoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwJCVwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSk7IFwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisjZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLG8sbikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXQ7CQkJCQlcCisJaWYgKGxpa2VseShib290X2NwdV9kYXRhLng4NiA+IDMpKQkJCQlcCisJCV9fcmV0ID0gX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksCVwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSk7IFwKKwllbHNlCQkJCQkJCQlcCisJCV9fcmV0ID0gY21weGNoZ18zODYoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwJCVwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSk7IFwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfQ01QWENIRzY0CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIF9fY21weGNoZzY0KHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBsb25nIG9sZCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmV3KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBwcmV2OworCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hnOGIgJTMiCisJCQkgICAgIDogIj1BIihwcmV2KQorCQkJICAgICA6ICJiIigodW5zaWduZWQgbG9uZyluZXcpLAorCQkJICAgICAgICJjIigodW5zaWduZWQgbG9uZykobmV3ID4+IDMyKSksCisJCQkgICAgICAgIm0iKCpfX3hnKHB0cikpLAorCQkJICAgICAgICIwIihvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOworCXJldHVybiBwcmV2OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2NtcHhjaGc2NF9sb2NhbCh2b2xhdGlsZSB2b2lkICpwdHIsCisJCQl1bnNpZ25lZCBsb25nIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBwcmV2OworCV9fYXNtX18gX192b2xhdGlsZV9fKCJjbXB4Y2hnOGIgJTMiCisJCQkgICAgIDogIj1BIihwcmV2KQorCQkJICAgICA6ICJiIigodW5zaWduZWQgbG9uZyluZXcpLAorCQkJICAgICAgICJjIigodW5zaWduZWQgbG9uZykobmV3ID4+IDMyKSksCisJCQkgICAgICAgIm0iKCpfX3hnKHB0cikpLAorCQkJICAgICAgICIwIihvbGQpCisJCQkgICAgIDogIm1lbW9yeSIpOworCXJldHVybiBwcmV2OworfQorCisjZGVmaW5lIGNtcHhjaGc2NChwdHIsbyxuKVwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGc2NCgocHRyKSwodW5zaWduZWQgbG9uZyBsb25nKShvKSxcCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKSkKKyNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0cixvLG4pXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZzY0X2xvY2FsKChwdHIpLCh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLFwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9lbGYuaCBiL2luY2x1ZGUvYXNtLWkzODYvZWxmLmgKaW5kZXggZDMwNGFiNC4uYjMyZGYzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2VsZi5oCkBAIC05LDggKzksNiBAQAogI2luY2x1ZGUgPGFzbS91c2VyLmg+CiAjaW5jbHVkZSA8YXNtL2F1eHZlYy5oPgogCi0jaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgotCiAjZGVmaW5lIFJfMzg2X05PTkUJMAogI2RlZmluZSBSXzM4Nl8zMgkxCiAjZGVmaW5lIFJfMzg2X1BDMzIJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pb2N0bHMuaCBiL2luY2x1ZGUvYXNtLWkzODYvaW9jdGxzLmgKaW5kZXggZjk2MmZhZC4uZWY1ODc4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9pb2N0bHMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lvY3Rscy5oCkBAIC00Nyw2ICs0NywxMCBAQAogI2RlZmluZSBUSU9DU0JSSwkweDU0MjcgIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIFRJT0NDQlJLCTB4NTQyOCAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KICNkZWZpbmUgVElPQ0dTSUQJMHg1NDI5ICAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KKyNkZWZpbmUgVENHRVRTMgkJX0lPUignVCcsMHgyQSwgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFMyCQlfSU9XKCdUJywweDJCLCBzdHJ1Y3QgdGVybWlvczIpCisjZGVmaW5lIFRDU0VUU1cyCV9JT1coJ1QnLDB4MkMsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTRjIJX0lPVygnVCcsMHgyRCwgc3RydWN0IHRlcm1pb3MyKQogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLWkzODYva2RlYnVnLmgKaW5kZXggZDE4Y2RiOS4uYTE4NWI1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9rZGVidWcuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2tkZWJ1Zy5oCkBAIC05LDE5ICs5LDggQEAKIAogc3RydWN0IHB0X3JlZ3M7CiAKLXN0cnVjdCBkaWVfYXJncyB7Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3M7Ci0JY29uc3QgY2hhciAqc3RyOwotCWxvbmcgZXJyOwotCWludCB0cmFwbnI7Ci0JaW50IHNpZ25yOwotfTsKLQotZXh0ZXJuIGludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwotZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX3BhZ2VfZmF1bHRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX3BhZ2VfZmF1bHRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwotZXh0ZXJuIHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBpMzg2ZGllX2NoYWluOwogCiAKIC8qIEdyb3NzbHkgbWlzbmFtZWQuICovCkBAIC00MSwxNyArMzAsNCBAQAogCURJRV9QQUdFX0ZBVUxULAogfTsKIAotc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X2RpZShlbnVtIGRpZV92YWwgdmFsLCBjb25zdCBjaGFyICpzdHIsCi0JCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIsIGludCB0cmFwLCBpbnQgc2lnKQotewotCXN0cnVjdCBkaWVfYXJncyBhcmdzID0gewotCQkucmVncyA9IHJlZ3MsCi0JCS5zdHIgPSBzdHIsCi0JCS5lcnIgPSBlcnIsCi0JCS50cmFwbnIgPSB0cmFwLAotCQkuc2lnbnIgPSBzaWcKLQl9OwotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmaTM4NmRpZV9jaGFpbiwgdmFsLCAmYXJncyk7Ci19Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9rZXhlYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9rZXhlYy5oCmluZGV4IGJjYjViMjEuLjRiOWRjOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYva2V4ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2tleGVjLmgKQEAgLTQ1LDggKzQ1LDYgQEAKIC8qIFdlIGNhbiBhbHNvIGhhbmRsZSBjcmFzaCBkdW1wcyBmcm9tIDY0IGJpdCBrZXJuZWwuICovCiAjZGVmaW5lIHZtY29yZV9lbGZfY2hlY2tfYXJjaF9jcm9zcyh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fWDg2XzY0KQogCi0jZGVmaW5lIE1BWF9OT1RFX0JZVEVTIDEwMjQKLQogLyogQ1BVIGRvZXMgbm90IHNhdmUgc3MgYW5kIGVzcCBvbiBzdGFjayBpZiBleGVjdXRpb24gaXMgYWxyZWFkeQogICogcnVubmluZyBpbiBrZXJuZWwgbW9kZSBhdCB0aGUgdGltZSBvZiBOTUkgb2NjdXJyZW5jZS4gVGhpcyBjb2RlCiAgKiBmaXhlcyBpdC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLWkzODYvbG9jYWwuaAppbmRleCAxMjA2MGUyLi42ZTg1OTc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2xvY2FsLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9sb2NhbC5oCkBAIC0yLDQ3ICsyLDE5OCBAQAogI2RlZmluZSBfQVJDSF9JMzg2X0xPQ0FMX0gKIAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIHR5cGVkZWYgc3RydWN0CiB7Ci0Jdm9sYXRpbGUgbG9uZyBjb3VudGVyOworCWF0b21pY19sb25nX3QgYTsKIH0gbG9jYWxfdDsKIAotI2RlZmluZSBMT0NBTF9JTklUKGkpCXsgKGkpIH0KKyNkZWZpbmUgTE9DQUxfSU5JVChpKQl7IEFUT01JQ19MT05HX0lOSVQoaSkgfQogCi0jZGVmaW5lIGxvY2FsX3JlYWQodikJKCh2KS0+Y291bnRlcikKLSNkZWZpbmUgbG9jYWxfc2V0KHYsaSkJKCgodiktPmNvdW50ZXIpID0gKGkpKQorI2RlZmluZSBsb2NhbF9yZWFkKGwpCWF0b21pY19sb25nX3JlYWQoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWxfc2V0KGwsaSkJYXRvbWljX2xvbmdfc2V0KCYobCktPmEsIChpKSkKIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9pbmMobG9jYWxfdCAqdikKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbG9jYWxfaW5jKGxvY2FsX3QgKmwpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJpbmNsICUwIgotCQk6IittIiAodi0+Y291bnRlcikpOworCQk6IittIiAobC0+YS5jb3VudGVyKSk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgbG9jYWxfZGVjKGxvY2FsX3QgKnYpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2FsX2RlYyhsb2NhbF90ICpsKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkiZGVjbCAlMCIKLQkJOiIrbSIgKHYtPmNvdW50ZXIpKTsKKwkJOiIrbSIgKGwtPmEuY291bnRlcikpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2FsX2FkZChsb25nIGksIGxvY2FsX3QgKnYpCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxvY2FsX2FkZChsb25nIGksIGxvY2FsX3QgKmwpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJhZGRsICUxLCUwIgotCQk6IittIiAodi0+Y291bnRlcikKKwkJOiIrbSIgKGwtPmEuY291bnRlcikKIAkJOiJpciIgKGkpKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9zdWIobG9uZyBpLCBsb2NhbF90ICp2KQorc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9zdWIobG9uZyBpLCBsb2NhbF90ICpsKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkic3VibCAlMSwlMCIKLQkJOiIrbSIgKHYtPmNvdW50ZXIpCisJCToiK20iIChsLT5hLmNvdW50ZXIpCiAJCToiaXIiIChpKSk7CiB9CiAKKy8qKgorICogbG9jYWxfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAbDogcG9pbnRlciBvZiB0eXBlIGxvY2FsX3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEBsIGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBsb2NhbF9zdWJfYW5kX3Rlc3QobG9uZyBpLCBsb2NhbF90ICpsKQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkic3VibCAlMiwlMDsgc2V0ZSAlMSIKKwkJOiIrbSIgKGwtPmEuY291bnRlciksICI9cW0iIChjKQorCQk6ImlyIiAoaSkgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogbG9jYWxfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAbDogcG9pbnRlciBvZiB0eXBlIGxvY2FsX3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQGwgYnkgMSBhbmQKKyAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKKyAqIGNhc2VzLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgbG9jYWxfZGVjX2FuZF90ZXN0KGxvY2FsX3QgKmwpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJkZWNsICUwOyBzZXRlICUxIgorCQk6IittIiAobC0+YS5jb3VudGVyKSwgIj1xbSIgKGMpCisJCTogOiAibWVtb3J5Iik7CisJcmV0dXJuIGMgIT0gMDsKK30KKworLyoqCisgKiBsb2NhbF9pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEBsOiBwb2ludGVyIG9mIHR5cGUgbG9jYWxfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAbCBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBsb2NhbF9pbmNfYW5kX3Rlc3QobG9jYWxfdCAqbCkKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImluY2wgJTA7IHNldGUgJTEiCisJCToiK20iIChsLT5hLmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGxvY2FsX2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQorICogQGw6IHBvaW50ZXIgb2YgdHlwZSBsb2NhbF90CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQGwgYW5kIHJldHVybnMgdHJ1ZQorICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgorICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgbG9jYWxfYWRkX25lZ2F0aXZlKGxvbmcgaSwgbG9jYWxfdCAqbCkKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImFkZGwgJTIsJTA7IHNldHMgJTEiCisJCToiK20iIChsLT5hLmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJOiJpciIgKGkpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGxvY2FsX2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgorICogQGw6IHBvaW50ZXIgb2YgdHlwZSBsb2NhbF90CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQGwgYW5kIHJldHVybnMgQGkgKyBAbAorICovCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvY2FsX2FkZF9yZXR1cm4obG9uZyBpLCBsb2NhbF90ICpsKQoreworCWxvbmcgX19pOworI2lmZGVmIENPTkZJR19NMzg2CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZih1bmxpa2VseShib290X2NwdV9kYXRhLng4NiA8PSAzKSkKKwkJZ290byBub194YWRkOworI2VuZGlmCisJLyogTW9kZXJuIDQ4NisgcHJvY2Vzc29yICovCisJX19pID0gaTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInhhZGRsICUwLCAlMTsiCisJCToiK3IiIChpKSwgIittIiAobC0+YS5jb3VudGVyKQorCQk6IDogIm1lbW9yeSIpOworCXJldHVybiBpICsgX19pOworCisjaWZkZWYgQ09ORklHX00zODYKK25vX3hhZGQ6IC8qIExlZ2FjeSAzODYgcHJvY2Vzc29yICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9faSA9IGxvY2FsX3JlYWQobCk7CisJbG9jYWxfc2V0KGwsIGkgKyBfX2kpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gaSArIF9faTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvY2FsX3N1Yl9yZXR1cm4obG9uZyBpLCBsb2NhbF90ICpsKQoreworCXJldHVybiBsb2NhbF9hZGRfcmV0dXJuKC1pLGwpOworfQorCisjZGVmaW5lIGxvY2FsX2luY19yZXR1cm4obCkgIChsb2NhbF9hZGRfcmV0dXJuKDEsbCkpCisjZGVmaW5lIGxvY2FsX2RlY19yZXR1cm4obCkgIChsb2NhbF9zdWJfcmV0dXJuKDEsbCkpCisKKyNkZWZpbmUgbG9jYWxfY21weGNoZyhsLCBvLCBuKSBcCisJKGNtcHhjaGdfbG9jYWwoJigobCktPmEuY291bnRlciksIChvKSwgKG4pKSkKKy8qIEFsd2F5cyBoYXMgYSBsb2NrIHByZWZpeCAqLworI2RlZmluZSBsb2NhbF94Y2hnKGwsIG4pICh4Y2hnKCYoKGwpLT5hLmNvdW50ZXIpLCAobikpKQorCisvKioKKyAqIGxvY2FsX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQorICogQGw6IHBvaW50ZXIgb2YgdHlwZSBsb2NhbF90CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gbC4uLgorICogQHU6IC4uLnVubGVzcyBsIGlzIGVxdWFsIHRvIHUuCisgKgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEBsLCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEBsIHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworI2RlZmluZSBsb2NhbF9hZGRfdW5sZXNzKGwsIGEsIHUpCQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBjLCBvbGQ7CQkJCQkJXAorCWMgPSBsb2NhbF9yZWFkKGwpOwkJCQkJXAorCWZvciAoOzspIHsJCQkJCQlcCisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCQkJCVwKKwkJCWJyZWFrOwkJCQkJXAorCQlvbGQgPSBsb2NhbF9jbXB4Y2hnKChsKSwgYywgYyArIChhKSk7CVwKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCQkJCVwKKwkJCWJyZWFrOwkJCQkJXAorCQljID0gb2xkOwkJCQkJXAorCX0JCQkJCQkJXAorCWMgIT0gKHUpOwkJCQkJCVwKK30pCisjZGVmaW5lIGxvY2FsX2luY19ub3RfemVybyhsKSBsb2NhbF9hZGRfdW5sZXNzKChsKSwgMSwgMCkKKwogLyogT24geDg2LCB0aGVzZSBhcmUgbm8gYmV0dGVyIHRoYW4gdGhlIGF0b21pYyB2YXJpYW50cy4gKi8KICNkZWZpbmUgX19sb2NhbF9pbmMobCkJCWxvY2FsX2luYyhsKQogI2RlZmluZSBfX2xvY2FsX2RlYyhsKQkJbG9jYWxfZGVjKGwpCkBAIC01NiwyNyArMjA3LDI3IEBACiAKIC8qIE5lZWQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGZvciB0aGUgY3B1IGxvY2FsIGNvdW50ZXJzIG90aGVyd2lzZSB3ZSBjb3VsZAogICAgc3RpbGwgYWNjZXNzIGEgdmFyaWFibGUgb2YgYSBwcmV2aW91cyBDUFUgaW4gYSBub24gYXRvbWljIHdheS4gKi8KLSNkZWZpbmUgY3B1X2xvY2FsX3dyYXBfdih2KQkgCVwKKyNkZWZpbmUgY3B1X2xvY2FsX3dyYXBfdihsKQkgCVwKIAkoeyBsb2NhbF90IHJlc19fOwkJXAogCSAgIHByZWVtcHRfZGlzYWJsZSgpOyAJCVwKLQkgICByZXNfXyA9ICh2KTsJCQlcCisJICAgcmVzX18gPSAobCk7CQkJXAogCSAgIHByZWVtcHRfZW5hYmxlKCk7CQlcCiAJICAgcmVzX187IH0pCi0jZGVmaW5lIGNwdV9sb2NhbF93cmFwKHYpCQlcCisjZGVmaW5lIGNwdV9sb2NhbF93cmFwKGwpCQlcCiAJKHsgcHJlZW1wdF9kaXNhYmxlKCk7CQlcCi0JICAgdjsJCQkJXAorCSAgIGw7CQkJCVwKIAkgICBwcmVlbXB0X2VuYWJsZSgpOyB9KQkJXAogCi0jZGVmaW5lIGNwdV9sb2NhbF9yZWFkKHYpICAgIGNwdV9sb2NhbF93cmFwX3YobG9jYWxfcmVhZCgmX19nZXRfY3B1X3Zhcih2KSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zZXQodiwgaSkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3NldCgmX19nZXRfY3B1X3Zhcih2KSwgKGkpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2luYyh2KSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKHYpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2RlYyh2KSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCB2KSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpKQotI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIHYpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkpCisjZGVmaW5lIGNwdV9sb2NhbF9yZWFkKGwpICAgIGNwdV9sb2NhbF93cmFwX3YobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihsKSkpCisjZGVmaW5lIGNwdV9sb2NhbF9zZXQobCwgaSkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3NldCgmX19nZXRfY3B1X3ZhcihsKSwgKGkpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2luYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGwpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2RlYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKGwpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCBsKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpKQorI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCiAKLSNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKHYpCWNwdV9sb2NhbF9pbmModikKLSNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKHYpCWNwdV9sb2NhbF9kZWModikKLSNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIHYpCWNwdV9sb2NhbF9hZGQoKGkpLCAodikpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCB2KQljcHVfbG9jYWxfc3ViKChpKSwgKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9pbmMobCkJY3B1X2xvY2FsX2luYyhsKQorI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkJY3B1X2xvY2FsX2RlYyhsKQorI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgbCkJY3B1X2xvY2FsX2FkZCgoaSksIChsKSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIGwpCWNwdV9sb2NhbF9zdWIoKGkpLCAobCkpCiAKICNlbmRpZiAvKiBfQVJDSF9JMzg2X0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbW16b25lLmggYi9pbmNsdWRlL2FzbS1pMzg2L21tem9uZS5oCmluZGV4IDM1MDNhZDYuLjExOGU5ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbW16b25lLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tbXpvbmUuaApAQCAtMTIyLDIxICsxMjIsMjEgQEAKIAlfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksICh4KSwgUEFHRV9TSVpFLCAwKQogI2RlZmluZSBhbGxvY19ib290bWVtX25vZGUocGdkYXQsIHgpCQkJCQlcCiAoewkJCQkJCQkJCVwKLQlzdHJ1Y3QgcGdsaXN0X2RhdGEgIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQkJCVwKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgIF9fbWF5YmVfdW51c2VkCQkJXAogCQkJCSpfX2FsbG9jX2Jvb3RtZW1fbm9kZV9fcGdkYXQgPSAocGdkYXQpOwlcCiAJX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAoeCksIFNNUF9DQUNIRV9CWVRFUywJXAogCQkJCQkJX19wYShNQVhfRE1BX0FERFJFU1MpKTsJXAogfSkKICNkZWZpbmUgYWxsb2NfYm9vdG1lbV9wYWdlc19ub2RlKHBnZGF0LCB4KQkJCQlcCiAoewkJCQkJCQkJCVwKLQlzdHJ1Y3QgcGdsaXN0X2RhdGEgIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQkJCVwKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgIF9fbWF5YmVfdW51c2VkCQkJXAogCQkJCSpfX2FsbG9jX2Jvb3RtZW1fbm9kZV9fcGdkYXQgPSAocGdkYXQpOwlcCiAJX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCAoeCksIFBBR0VfU0laRSwJCVwKIAkJCQkJCV9fcGEoTUFYX0RNQV9BRERSRVNTKSkJXAogfSkKICNkZWZpbmUgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXNfbm9kZShwZ2RhdCwgeCkJCQkJXAogKHsJCQkJCQkJCQlcCi0Jc3RydWN0IHBnbGlzdF9kYXRhICBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkJCQlcCisJc3RydWN0IHBnbGlzdF9kYXRhICBfX21heWJlX3VudXNlZAkJCVwKIAkJCQkqX19hbGxvY19ib290bWVtX25vZGVfX3BnZGF0ID0gKHBnZGF0KTsJXAogCV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgKHgpLCBQQUdFX1NJWkUsIDApOwkJXAogfSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbXNyLmggYi9pbmNsdWRlL2FzbS1pMzg2L21zci5oCmluZGV4IDk1NTk4OTQuLmRmMjFlYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbXNyLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tc3IuaApAQCAtNzcsNyArNzcsNyBAQAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2Vsc2UKLQorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAvKgogICogQWNjZXNzIHRvIG1hY2hpbmUtc3BlY2lmaWMgcmVnaXN0ZXJzIChhdmFpbGFibGUgb24gNTg2IGFuZCBiZXR0ZXIgb25seSkKICAqIE5vdGU6IHRoZSByZCogb3BlcmF0aW9ucyBtb2RpZnkgdGhlIHBhcmFtZXRlcnMgZGlyZWN0bHkgKHdpdGhvdXQgdXNpbmcKQEAgLTg2LDY4ICs4Niw1OCBAQAogCiAjZGVmaW5lIHJkbXNyKG1zcix2YWwxLHZhbDIpCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKLQkJdW5zaWduZWQgbG9uZyBsb25nIF9fdmFsID0gbmF0aXZlX3JlYWRfbXNyKG1zcik7CVwKLQkJdmFsMSA9IF9fdmFsOwkJCQkJCVwKLQkJdmFsMiA9IF9fdmFsID4+IDMyOwkJCQkJXAorCQl1NjQgX192YWwgPSBuYXRpdmVfcmVhZF9tc3IobXNyKTsJCQlcCisJCSh2YWwxKSA9ICh1MzIpX192YWw7CQkJCQlcCisJCSh2YWwyKSA9ICh1MzIpKF9fdmFsID4+IDMyKTsJCQkJXAogCX0gd2hpbGUoMCkKIAotI2RlZmluZSB3cm1zcihtc3IsdmFsMSx2YWwyKQkJCQkJCVwKLQluYXRpdmVfd3JpdGVfbXNyKG1zciwgKCh1bnNpZ25lZCBsb25nIGxvbmcpdmFsMiA8PCAzMikgfCB2YWwxKQotCi0jZGVmaW5lIHJkbXNybChtc3IsdmFsKQkJCQkJXAotCWRvIHsJCQkJCQlcCi0JCSh2YWwpID0gbmF0aXZlX3JlYWRfbXNyKG1zcik7CQlcCi0JfSB3aGlsZSgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3Jtc3JsICh1bnNpZ25lZCBsb25nIG1zciwgdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cm1zcih1MzIgX19tc3IsIHUzMiBfX2xvdywgdTMyIF9faGlnaCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvLCBoaTsKLQlsbyA9ICh1bnNpZ25lZCBsb25nKSB2YWw7Ci0JaGkgPSB2YWwgPj4gMzI7Ci0Jd3Jtc3IgKG1zciwgbG8sIGhpKTsKKwluYXRpdmVfd3JpdGVfbXNyKF9fbXNyLCAoKHU2NClfX2hpZ2ggPDwgMzIpIHwgX19sb3cpOwogfQogCisjZGVmaW5lIHJkbXNybChtc3IsdmFsKQkJCQkJCQlcCisJKCh2YWwpID0gbmF0aXZlX3JlYWRfbXNyKG1zcikpCisKKyNkZWZpbmUgd3Jtc3JsKG1zcix2YWwpCW5hdGl2ZV93cml0ZV9tc3IobXNyLCB2YWwpCisKIC8qIHdybXNyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nICovCi0jZGVmaW5lIHdybXNyX3NhZmUobXNyLHZhbDEsdmFsMikJCQkJCQlcCi0JKG5hdGl2ZV93cml0ZV9tc3Jfc2FmZShtc3IsICgodW5zaWduZWQgbG9uZyBsb25nKXZhbDIgPDwgMzIpIHwgdmFsMSkpCitzdGF0aWMgaW5saW5lIGludCB3cm1zcl9zYWZlKHUzMiBfX21zciwgdTMyIF9fbG93LCB1MzIgX19oaWdoKQoreworCXJldHVybiBuYXRpdmVfd3JpdGVfbXNyX3NhZmUoX19tc3IsICgodTY0KV9faGlnaCA8PCAzMikgfCBfX2xvdyk7Cit9CiAKIC8qIHJkbXNyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nICovCiAjZGVmaW5lIHJkbXNyX3NhZmUobXNyLHAxLHAyKQkJCQkJCVwKIAkoewkJCQkJCQkJXAogCQlpbnQgX19lcnI7CQkJCQkJXAotCQl1bnNpZ25lZCBsb25nIGxvbmcgX192YWwgPSBuYXRpdmVfcmVhZF9tc3Jfc2FmZShtc3IsICZfX2Vycik7XAotCQkoKnAxKSA9IF9fdmFsOwkJCQkJCVwKLQkJKCpwMikgPSBfX3ZhbCA+PiAzMjsJCQkJCVwKKwkJdTY0IF9fdmFsID0gbmF0aXZlX3JlYWRfbXNyX3NhZmUobXNyLCAmX19lcnIpOwkJXAorCQkoKnAxKSA9ICh1MzIpX192YWw7CQkJCQlcCisJCSgqcDIpID0gKHUzMikoX192YWwgPj4gMzIpOwkJCQlcCiAJCV9fZXJyOwkJCQkJCQlcCiAJfSkKIAotI2RlZmluZSByZHRzYyhsb3csaGlnaCkJCQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCXU2NCBfbCA9IG5hdGl2ZV9yZWFkX3RzYygpOwkJCVwKLQkJKGxvdykgPSAodTMyKV9sOwkJCQlcCi0JCShoaWdoKSA9IF9sID4+IDMyOwkJCQlcCi0JfSB3aGlsZSgwKQotCiAjZGVmaW5lIHJkdHNjbChsb3cpCQkJCQkJXAotCWRvIHsJCQkJCQkJXAotCQkobG93KSA9IG5hdGl2ZV9yZWFkX3RzYygpOwkJCVwKLQl9IHdoaWxlKDApCisJKChsb3cpID0gKHUzMiluYXRpdmVfcmVhZF90c2MoKSkKIAotI2RlZmluZSByZHRzY2xsKHZhbCkgKCh2YWwpID0gbmF0aXZlX3JlYWRfdHNjKCkpCisjZGVmaW5lIHJkdHNjbGwodmFsKQkJCQkJCVwKKwkoKHZhbCkgPSBuYXRpdmVfcmVhZF90c2MoKSkKIAogI2RlZmluZSB3cml0ZV90c2ModmFsMSx2YWwyKSB3cm1zcigweDEwLCB2YWwxLCB2YWwyKQogCiAjZGVmaW5lIHJkcG1jKGNvdW50ZXIsbG93LGhpZ2gpCQkJCQlcCiAJZG8gewkJCQkJCQlcCiAJCXU2NCBfbCA9IG5hdGl2ZV9yZWFkX3BtYygpOwkJCVwKLQkJbG93ID0gKHUzMilfbDsJCQkJCVwKLQkJaGlnaCA9IF9sID4+IDMyOwkJCQlcCisJCShsb3cpICA9ICh1MzIpX2w7CQkJCVwKKwkJKGhpZ2gpID0gKHUzMikoX2wgPj4gMzIpOwkJCVwKIAl9IHdoaWxlKDApCiAjZW5kaWYJLyogIUNPTkZJR19QQVJBVklSVCAqLwogCiAjaWZkZWYgQ09ORklHX1NNUAogdm9pZCByZG1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpOwogdm9pZCB3cm1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyIGwsIHUzMiBoKTsKK2ludCByZG1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgKmwsIHUzMiAqaCk7CitpbnQgd3Jtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyIGwsIHUzMiBoKTsKICNlbHNlICAvKiAgQ09ORklHX1NNUCAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByZG1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpCiB7CkBAIC0xNTcsNiArMTQ3LDE0IEBACiB7CiAJd3Jtc3IobXNyX25vLCBsLCBoKTsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHJkbXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKQoreworCXJldHVybiByZG1zcl9zYWZlKG1zcl9ubywgbCwgaCk7Cit9CitzdGF0aWMgaW5saW5lIGludCB3cm1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgpCit7CisJcmV0dXJuIHdybXNyX3NhZmUobXNyX25vLCBsLCBoKTsKK30KICNlbmRpZiAgLyogIENPTkZJR19TTVAgICovCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wYXJhdmlydC5oIGIvaW5jbHVkZS9hc20taTM4Ni9wYXJhdmlydC5oCmluZGV4IGUyZTdmOTguLmQ3YTA1MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGFyYXZpcnQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BhcmF2aXJ0LmgKQEAgLTIyMiwxMSArMjIyLDYgQEAKIAl2b2lkICgqaXJldCkodm9pZCk7CiB9OwogCi0vKiBNYXJrIGEgcGFyYXZpcnQgcHJvYmUgZnVuY3Rpb24uICovCi0jZGVmaW5lIHBhcmF2aXJ0X3Byb2JlKGZuKQkJCQkJCVwKLSBzdGF0aWMgYXNtbGlua2FnZSB2b2lkICgqX19wYXJhdmlydHByb2JlXyMjZm4pKHZvaWQpIF9fYXR0cmlidXRlX3VzZWRfXyBcCi0JCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIucGFyYXZpcnRwcm9iZSIpKSkgPSBmbgotCiBleHRlcm4gc3RydWN0IHBhcmF2aXJ0X29wcyBwYXJhdmlydF9vcHM7CiAKICNkZWZpbmUgUEFSQVZJUlRfUEFUQ0goeCkJCQkJCVwKQEAgLTU2MCwxMSArNTU1LDYgQEAKIHsKIAlyZXR1cm4gUFZPUF9DQUxMMCh1NjQsIHJlYWRfdHNjKTsKIH0KLSNkZWZpbmUgcmR0c2MobG93LGhpZ2gpIGRvIHsJCQlcCi0JdTY0IF9sID0gcGFyYXZpcnRfcmVhZF90c2MoKTsJCVwKLQlsb3cgPSAodTMyKV9sOwkJCQlcCi0JaGlnaCA9IF9sID4+IDMyOwkJCVwKLX0gd2hpbGUoMCkKIAogI2RlZmluZSByZHRzY2wobG93KSBkbyB7CQkJXAogCXU2NCBfbCA9IHBhcmF2aXJ0X3JlYWRfdHNjKCk7CQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oCmluZGV4IDQ3NDMwMTcuLmQwN2I3YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oCkBAIC02NSw2ICs2NSw0IEBACiAjZGVmaW5lIHB1ZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpCUJVRygpCiAjZW5kaWYKIAotI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCi0KICNlbmRpZiAvKiBfSTM4Nl9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKaW5kZXggZTE2MzU5Zi4uMjM5NDU4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKQEAgLTM1LDE3ICszNSwxNiBAQAogI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpICh2aXJ0X3RvX3BhZ2UoZW1wdHlfemVyb19wYWdlKSkKIGV4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9fcGFnZVsxMDI0XTsKIGV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsxMDI0XTsKLWV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqcGdkX2NhY2hlOwogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpwbWRfY2FjaGU7CiBleHRlcm4gc3BpbmxvY2tfdCBwZ2RfbG9jazsKIGV4dGVybiBzdHJ1Y3QgcGFnZSAqcGdkX2xpc3Q7Cit2b2lkIGNoZWNrX3BndF9jYWNoZSh2b2lkKTsKIAogdm9pZCBwbWRfY3Rvcih2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpOwotdm9pZCBwZ2RfY3Rvcih2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpOwotdm9pZCBwZ2RfZHRvcih2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpOwogdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCk7CiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwogCisKIC8qCiAgKiBUaGUgTGludXggeDg2IHBhZ2luZyBhcmNoaXRlY3R1cmUgaXMgJ2NvbXBpbGUtdGltZSBkdWFsLW1vZGUnLCBpdAogICogaW1wbGVtZW50cyBib3RoIHRoZSB0cmFkaXRpb25hbCAyLWxldmVsIHg4NiBwYWdlIHRhYmxlcyBhbmQgdGhlCkBAIC0yNDMsOCArMjQyLDYgQEAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQl7IChwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfUlc7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21raHVnZShwdGVfdCBwdGUpCXsgKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9QU0U7IHJldHVybiBwdGU7IH0KIAotZXh0ZXJuIHZvaWQgdm1hbGxvY19zeW5jX2FsbCh2b2lkKTsKLQogI2lmZGVmIENPTkZJR19YODZfUEFFCiAjIGluY2x1ZGUgPGFzbS9wZ3RhYmxlLTNsZXZlbC5oPgogI2Vsc2UKQEAgLTU0NCwxMCArNTQxLDYgQEAKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKIAotI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQotI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCi0jZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CiAKICNlbmRpZiAvKiBfSTM4Nl9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcG9sbC5oIGIvaW5jbHVkZS9hc20taTM4Ni9wb2xsLmgKaW5kZXggMmNkNDkyOS4uYzk4NTA5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wb2xsLmgKQEAgLTEsMjcgKzEgQEAKLSNpZm5kZWYgX19pMzg2X1BPTExfSAotI2RlZmluZSBfX2kzODZfUE9MTF9ICi0KLS8qIFRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgaUJDUzIgKi8KLSNkZWZpbmUgUE9MTElOCQkweDAwMDEKLSNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCi0jZGVmaW5lIFBPTExPVVQJCTB4MDAwNAotI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKLSNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCi0jZGVmaW5lIFBPTExOVkFMCTB4MDAyMAotCi0vKiBUaGUgcmVzdCBzZWVtIHRvIGJlIG1vcmUtb3ItbGVzcyBub25zdGFuZGFyZC4gQ2hlY2sgdGhlbSEgKi8KLSNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKLSNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKLSNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKLSNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKLSNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCi0jZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCi0jZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKLQotc3RydWN0IHBvbGxmZCB7Ci0JaW50IGZkOwotCXNob3J0IGV2ZW50czsKLQlzaG9ydCByZXZlbnRzOwotfTsKLQotI2VuZGlmCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLWkzODYvcHJvY2Vzc29yLmgKaW5kZXggNzBmMzUxNS4uMzM4NjY4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oCkBAIC03NDksOSArNzQ5LDEzIEBACiBleHRlcm4gdm9pZCBlbmFibGVfc2VwX2NwdSh2b2lkKTsKIGV4dGVybiBpbnQgc3lzZW50ZXJfc2V0dXAodm9pZCk7CiAKKy8qIERlZmluZWQgaW4gaGVhZC5TICovCitleHRlcm4gc3RydWN0IFhndF9kZXNjX3N0cnVjdCBlYXJseV9nZHRfZGVzY3I7CisKIGV4dGVybiB2b2lkIGNwdV9zZXRfZ2R0KGludCk7CiBleHRlcm4gdm9pZCBzd2l0Y2hfdG9fbmV3X2dkdCh2b2lkKTsKIGV4dGVybiB2b2lkIGNwdV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9nZHQoaW50IGNwdSk7CiAKIGV4dGVybiBpbnQgZm9yY2VfbXdhaXQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oCmluZGV4IGJkNjc0ODAuLjU3YTQzMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zZXJpYWwuaApAQCAtMTEsMTkgKzExLDMgQEAKICAqIG1lZ2FiaXRzL3NlY29uZDsgYnV0IHRoaXMgcmVxdWlyZXMgdGhlIGZhc3RlciBjbG9jay4KICAqLwogI2RlZmluZSBCQVNFX0JBVUQgKCAxODQzMjAwIC8gMTYgKQotCi0vKiBTdGFuZGFyZCBDT00gZmxhZ3MgKGV4Y2VwdCBmb3IgQ09NNCwgYmVjYXVzZSBvZiB0aGUgODUxNCBwcm9ibGVtKSAqLwotI2lmZGVmIENPTkZJR19TRVJJQUxfREVURUNUX0lSUQotI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUIHwgQVNZTkNfQVVUT19JUlEpCi0jZGVmaW5lIFNURF9DT000X0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfQVVUT19JUlEpCi0jZWxzZQotI2RlZmluZSBTVERfQ09NX0ZMQUdTIChBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNUKQotI2RlZmluZSBTVERfQ09NNF9GTEFHUyBBU1lOQ19CT09UX0FVVE9DT05GCi0jZW5kaWYKLQotI2RlZmluZSBTRVJJQUxfUE9SVF9ERk5TCQkJXAotCS8qIFVBUlQgQ0xLICAgUE9SVCBJUlEgICAgIEZMQUdTICAgICAgICAqLwkJCVwKLQl7IDAsIEJBU0VfQkFVRCwgMHgzRjgsIDQsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzAgKi8JXAotCXsgMCwgQkFTRV9CQVVELCAweDJGOCwgMywgU1REX0NPTV9GTEFHUyB9LAkvKiB0dHlTMSAqLwlcCi0JeyAwLCBCQVNFX0JBVUQsIDB4M0U4LCA0LCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMyICovCVwKLQl7IDAsIEJBU0VfQkFVRCwgMHgyRTgsIDMsIFNURF9DT000X0ZMQUdTIH0sCS8qIHR0eVMzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zbXAuaAppbmRleCAwOTBhYmMxLi4wYzcxMzI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc21wLmgKQEAgLTEyNCwyMCArMTI0LDYgQEAKIAlyZXR1cm4gY3B1c193ZWlnaHQoY3B1X2NhbGxvdXRfbWFwKTsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCi0jaWZkZWYgQVBJQ19ERUZJTklUSU9OCi1leHRlcm4gaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKLSNlbHNlCi0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci1zdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQkvKiB3ZSBkb24ndCB3YW50IHRvIG1hcmsgdGhpcyBhY2Nlc3Mgdm9sYXRpbGUgLSBiYWQgY29kZSBnZW5lcmF0aW9uICovCi0JcmV0dXJuIEdFVF9BUElDX0lEKCoodW5zaWduZWQgbG9uZyAqKShBUElDX0JBU0UrQVBJQ19JRCkpOwotfQotI2VuZGlmCi0jZW5kaWYKLQogZXh0ZXJuIGludCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CiBleHRlcm4gaW50IF9fY3B1X2Rpc2FibGUodm9pZCk7CiBleHRlcm4gdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7CkBAIC0xNTIsMTAgKzEzOCwzMSBAQAogCiAjZGVmaW5lIE5PX1BST0NfSUQJCTB4RkYJCS8qIE5vIHByb2Nlc3NvciBtYWdpYyBtYXJrZXIgKi8KIAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisKKyNpZmRlZiBBUElDX0RFRklOSVRJT04KK2V4dGVybiBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOworI2Vsc2UKKyNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KK3N0YXRpYyBpbmxpbmUgaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQoreworCS8qIHdlIGRvbid0IHdhbnQgdG8gbWFyayB0aGlzIGFjY2VzcyB2b2xhdGlsZSAtIGJhZCBjb2RlIGdlbmVyYXRpb24gKi8KKwlyZXR1cm4gR0VUX0FQSUNfSUQoKih1bnNpZ25lZCBsb25nICopKEFQSUNfQkFTRStBUElDX0lEKSk7Cit9CisjZW5kaWYgLyogQVBJQ19ERUZJTklUSU9OICovCisKKyNlbHNlIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLworCisjaWZuZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJCTAKKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCisKIGV4dGVybiB1OCBhcGljaWRfMl9ub2RlW107CiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3luY19iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWkzODYvc3luY19iaXRvcHMuaAppbmRleCA3ZDcyMzUxLi5jYmNlMDhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3N5bmNfYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zeW5jX2JpdG9wcy5oCkBAIC0yNCw3ICsyNCw3IEBACiAgKiBpZiB5b3UgZG8gbm90IHJlcXVpcmUgdGhlIGF0b21pYyBndWFyYW50ZWVzLgogICoKICAqIE5vdGU6IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBiZSByZW9yZGVyZWQKLSAqIG9uIG5vbiB4ODYgYXJjaGl0ZWN0dXJlcywgc28gaWYgeW91IGFyZSB3cml0dGluZyBwb3J0YWJsZSBjb2RlLAorICogb24gbm9uLXg4NiBhcmNoaXRlY3R1cmVzLCBzbyBpZiB5b3UgYXJlIHdyaXRpbmcgcG9ydGFibGUgY29kZSwKICAqIG1ha2Ugc3VyZSBub3QgdG8gcmVseSBvbiBpdHMgcmVvcmRlcmluZyBndWFyYW50ZWVzLgogICoKICAqIE5vdGUgdGhhdCBAbnIgbWF5IGJlIGFsbW9zdCBhcmJpdHJhcmlseSBsYXJnZTsgdGhpcyBmdW5jdGlvbiBpcyBub3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCmluZGV4IGMzYTU4YzAuLjk0ZWQzNjg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmgKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPiAvKiBmb3IgTE9DS19QUkVGSVggKi8KKyNpbmNsdWRlIDxhc20vY21weGNoZy5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogCkBAIC0xOTUsMjM4ICsxOTUsNiBAQAogCiAjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIikKIAotI2RlZmluZSB4Y2hnKHB0cix2KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHYpLChwdHIpLHNpemVvZigqKHB0cikpKSkKLQotI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKLQotc3RydWN0IF9feGNoZ19kdW1teSB7IHVuc2lnbmVkIGxvbmcgYVsxMDBdOyB9OwotI2RlZmluZSBfX3hnKHgpICgoc3RydWN0IF9feGNoZ19kdW1teSAqKSh4KSkKLQotCi0jaWZkZWYgQ09ORklHX1g4Nl9DTVBYQ0hHNjQKLQotLyoKLSAqIFRoZSBzZW1hbnRpY3Mgb2YgWENIR0NNUDhCIGFyZSBhIGJpdCBzdHJhbmdlLCB0aGlzIGlzIHdoeQotICogdGhlcmUgaXMgYSBsb29wIGFuZCB0aGUgbG9hZGluZyBvZiAlJWVheCBhbmQgJSVlZHggaGFzIHRvCi0gKiBiZSBpbnNpZGUuIFRoaXMgaW5saW5lcyB3ZWxsIGluIG1vc3QgY2FzZXMsIHRoZSBjYWNoZWQKLSAqIGNvc3QgaXMgYXJvdW5kIH4zOCBjeWNsZXMuIChpbiB0aGUgZnV0dXJlIHdlIG1pZ2h0IHdhbnQKLSAqIHRvIGRvIGFuIFNJTUQvM0ROT1chL01NWC9GUFUgNjQtYml0IHN0b3JlIGhlcmUsIGJ1dCB0aGF0Ci0gKiBtaWdodCBoYXZlIGFuIGltcGxpY2l0IEZQVS1zYXZlIGFzIGEgY29zdCwgc28gaXQncyBub3QKLSAqIGNsZWFyIHdoaWNoIHBhdGggdG8gZ28uKQotICoKLSAqIGNtcHhjaGc4YiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgbG9jayBwcmVmaXggaGVyZSB0byBhbGxvdwotICogdGhlIGluc3RydWN0aW9uIHRvIGJlIGV4ZWN1dGVkIGF0b21pY2FsbHksIHNlZSBwYWdlIDMtMTAyCi0gKiBvZiB0aGUgaW5zdHJ1Y3Rpb24gc2V0IHJlZmVyZW5jZSAyNDMxOTEwMi5wZGYuIFdlIG5lZWQKLSAqIHRoZSByZWFkZXIgc2lkZSB0byBzZWUgdGhlIGNvaGVyZW50IDY0Yml0IHZhbHVlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXQgKHVuc2lnbmVkIGxvbmcgbG9uZyAqIHB0ciwKLQkJdW5zaWduZWQgaW50IGxvdywgdW5zaWduZWQgaW50IGhpZ2gpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiXG4xOlx0IgotCQkibW92bCAoJTApLCAlJWVheFxuXHQiCi0JCSJtb3ZsIDQoJTApLCAlJWVkeFxuXHQiCi0JCSJsb2NrIGNtcHhjaGc4YiAoJTApXG5cdCIKLQkJImpueiAxYiIKLQkJOiAvKiBubyBvdXRwdXRzICovCi0JCToJIkQiKHB0ciksCi0JCQkiYiIobG93KSwKLQkJCSJjIihoaWdoKQotCQk6CSJheCIsImR4IiwibWVtb3J5Iik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdF9jb25zdGFudCAodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCi0JCQkJCQkgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKQotewotCV9fc2V0XzY0Yml0KHB0ciwodW5zaWduZWQgaW50KSh2YWx1ZSksICh1bnNpZ25lZCBpbnQpKCh2YWx1ZSk+PjMyVUxMKSk7Ci19Ci0jZGVmaW5lIGxsX2xvdyh4KQkqKCgodW5zaWduZWQgaW50KikmKHgpKSswKQotI2RlZmluZSBsbF9oaWdoKHgpCSooKCh1bnNpZ25lZCBpbnQqKSYoeCkpKzEpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdF92YXIgKHVuc2lnbmVkIGxvbmcgbG9uZyAqcHRyLAotCQkJIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSkKLXsKLQlfX3NldF82NGJpdChwdHIsbGxfbG93KHZhbHVlKSwgbGxfaGlnaCh2YWx1ZSkpOwotfQotCi0jZGVmaW5lIHNldF82NGJpdChwdHIsdmFsdWUpIFwKLShfX2J1aWx0aW5fY29uc3RhbnRfcCh2YWx1ZSkgPyBcCi0gX19zZXRfNjRiaXRfY29uc3RhbnQocHRyLCB2YWx1ZSkgOiBcCi0gX19zZXRfNjRiaXRfdmFyKHB0ciwgdmFsdWUpICkKLQotI2RlZmluZSBfc2V0XzY0Yml0KHB0cix2YWx1ZSkgXAotKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbHVlKSA/IFwKLSBfX3NldF82NGJpdChwdHIsICh1bnNpZ25lZCBpbnQpKHZhbHVlKSwgKHVuc2lnbmVkIGludCkoKHZhbHVlKT4+MzJVTEwpICkgOiBcCi0gX19zZXRfNjRiaXQocHRyLCBsbF9sb3codmFsdWUpLCBsbF9oaWdoKHZhbHVlKSkgKQotCi0jZW5kaWYKLQotLyoKLSAqIE5vdGU6IG5vICJsb2NrIiBwcmVmaXggZXZlbiBvbiBTTVA6IHhjaGcgYWx3YXlzIGltcGxpZXMgbG9jayBhbnl3YXkKLSAqIE5vdGUgMjogeGNoZyBoYXMgc2lkZSBlZmZlY3QsIHNvIHRoYXQgYXR0cmlidXRlIHZvbGF0aWxlIGlzIG5lY2Vzc2FyeSwKLSAqCSAgYnV0IGdlbmVyYWxseSB0aGUgcHJpbWl0aXZlIGlzIGludmFsaWQsICpwdHIgaXMgb3V0cHV0IGFyZ3VtZW50LiAtLUFOSwotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwgaW50IHNpemUpCi17Ci0Jc3dpdGNoIChzaXplKSB7Ci0JCWNhc2UgMToKLQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hnYiAlYjAsJTEiCi0JCQkJOiI9cSIgKHgpCi0JCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKLQkJCQk6Im1lbW9yeSIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hndyAldzAsJTEiCi0JCQkJOiI9ciIgKHgpCi0JCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKLQkJCQk6Im1lbW9yeSIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hnbCAlMCwlMSIKLQkJCQk6Ij1yIiAoeCkKLQkJCQk6Im0iICgqX194ZyhwdHIpKSwgIjAiICh4KQotCQkJCToibWVtb3J5Iik7Ci0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIHg7Ci19Ci0KLS8qCi0gKiBBdG9taWMgY29tcGFyZSBhbmQgZXhjaGFuZ2UuICBDb21wYXJlIE9MRCB3aXRoIE1FTSwgaWYgaWRlbnRpY2FsLAotICogc3RvcmUgTkVXIGluIE1FTS4gIFJldHVybiB0aGUgaW5pdGlhbCB2YWx1ZSBpbiBNRU0uICBTdWNjZXNzIGlzCi0gKiBpbmRpY2F0ZWQgYnkgY29tcGFyaW5nIFJFVFVSTiB3aXRoIE9MRC4KLSAqLwotCi0jaWZkZWYgQ09ORklHX1g4Nl9DTVBYQ0hHCi0jZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcgMQotI2RlZmluZSBjbXB4Y2hnKHB0cixvLG4pXAotCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZygocHRyKSwodW5zaWduZWQgbG9uZykobyksXAotCQkJCQkodW5zaWduZWQgbG9uZykobiksc2l6ZW9mKCoocHRyKSkpKQotI2RlZmluZSBzeW5jX2NtcHhjaGcocHRyLG8sbilcCi0JKChfX3R5cGVvZl9fKCoocHRyKSkpX19zeW5jX2NtcHhjaGcoKHB0ciksKHVuc2lnbmVkIGxvbmcpKG8pLFwKLQkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLHNpemVvZigqKHB0cikpKSkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcHJldjsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hnYiAlYjEsJTIiCi0JCQkJICAgICA6ICI9YSIocHJldikKLQkJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDI6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hndyAldzEsJTIiCi0JCQkJICAgICA6ICI9YSIocHJldikKLQkJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDQ6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hnbCAlMSwlMiIKLQkJCQkgICAgIDogIj1hIihwcmV2KQotCQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCX0KLQlyZXR1cm4gb2xkOwotfQotCi0vKgotICogQWx3YXlzIHVzZSBsb2NrZWQgb3BlcmF0aW9ucyB3aGVuIHRvdWNoaW5nIG1lbW9yeSBzaGFyZWQgd2l0aCBhCi0gKiBoeXBlcnZpc29yLCBzaW5jZSB0aGUgc3lzdGVtIG1heSBiZSBTTVAgZXZlbiBpZiB0aGUgZ3Vlc3Qga2VybmVsCi0gKiBpc24ndC4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fc3luY19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcHJldjsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyBjbXB4Y2hnYiAlYjEsJTIiCi0JCQkJICAgICA6ICI9YSIocHJldikKLQkJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDI6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyBjbXB4Y2hndyAldzEsJTIiCi0JCQkJICAgICA6ICI9YSIocHJldikKLQkJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQljYXNlIDQ6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJsb2NrOyBjbXB4Y2hnbCAlMSwlMiIKLQkJCQkgICAgIDogIj1hIihwcmV2KQotCQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQotCQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JCXJldHVybiBwcmV2OwotCX0KLQlyZXR1cm4gb2xkOwotfQotCi0jaWZuZGVmIENPTkZJR19YODZfQ01QWENIRwotLyoKLSAqIEJ1aWxkaW5nIGEga2VybmVsIGNhcGFibGUgcnVubmluZyBvbiA4MDM4Ni4gSXQgbWF5IGJlIG5lY2Vzc2FyeSB0bwotICogc2ltdWxhdGUgdGhlIGNtcHhjaGcgb24gdGhlIDgwMzg2IENQVS4gRm9yIHRoYXQgcHVycG9zZSB3ZSBkZWZpbmUKLSAqIGEgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIHNpemVzIHdlIHN1cHBvcnQuCi0gKi8KLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTgodm9sYXRpbGUgdm9pZCAqLCB1OCwgdTgpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTE2KHZvbGF0aWxlIHZvaWQgKiwgdTE2LCB1MTYpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTMyKHZvbGF0aWxlIHZvaWQgKiwgdTMyLCB1MzIpOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY21weGNoZ18zODYodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCi17Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlyZXR1cm4gY21weGNoZ18zODZfdTgocHRyLCBvbGQsIG5ldyk7Ci0JY2FzZSAyOgotCQlyZXR1cm4gY21weGNoZ18zODZfdTE2KHB0ciwgb2xkLCBuZXcpOwotCWNhc2UgNDoKLQkJcmV0dXJuIGNtcHhjaGdfMzg2X3UzMihwdHIsIG9sZCwgbmV3KTsKLQl9Ci0JcmV0dXJuIG9sZDsKLX0KLQotI2RlZmluZSBjbXB4Y2hnKHB0cixvLG4pCQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAotCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiAzKSkJCQkJXAotCQlfX3JldCA9IF9fY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAkJXAotCQkJCQkodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKTsgXAotCWVsc2UJCQkJCQkJCVwKLQkJX19yZXQgPSBjbXB4Y2hnXzM4NigocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLAkJXAotCQkJCQkodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKTsgXAotCV9fcmV0OwkJCQkJCQkJXAotfSkKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl9DTVBYQ0hHNjQKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgX19jbXB4Y2hnNjQodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIGxvbmcgb2xkLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXcpCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIHByZXY7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oTE9DS19QUkVGSVggImNtcHhjaGc4YiAlMyIKLQkJCSAgICAgOiAiPUEiKHByZXYpCi0JCQkgICAgIDogImIiKCh1bnNpZ25lZCBsb25nKW5ldyksCi0JCQkgICAgICAgImMiKCh1bnNpZ25lZCBsb25nKShuZXcgPj4gMzIpKSwKLQkJCSAgICAgICAibSIoKl9feGcocHRyKSksCi0JCQkgICAgICAgIjAiKG9sZCkKLQkJCSAgICAgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIHByZXY7Ci19Ci0KLSNkZWZpbmUgY21weGNoZzY0KHB0cixvLG4pXAotCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZzY0KChwdHIpLCh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLFwKLQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpKQotCi0jZW5kaWYKLSAgICAKIC8qCiAgKiBGb3JjZSBzdHJpY3QgQ1BVIG9yZGVyaW5nLgogICogQW5kIHllcywgdGhpcyBpcyByZXF1aXJlZCBvbiBVUCB0b28gd2hlbiB3ZSdyZSB0YWxraW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1pMzg2L3Rlcm1iaXRzLmgKaW5kZXggMmU2MjM3NjkuLmEyMTcwMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3Rlcm1iaXRzLmgKQEAgLTE3LDYgKzE3LDE3IEBACiAJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCiB9OwogCitzdHJ1Y3QgdGVybWlvczIgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKwogc3RydWN0IGt0ZXJtaW9zIHsKIAl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLwogCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLwpAQCAtMTI5LDYgKzE0MCw3IEBACiAjZGVmaW5lIEhVUENMCTAwMDIwMDAKICNkZWZpbmUgQ0xPQ0FMCTAwMDQwMDAKICNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCisjZGVmaW5lICAgQk9USEVSICAwMDEwMDAwCiAjZGVmaW5lICAgIEI1NzYwMCAwMDEwMDAxCiAjZGVmaW5lICAgQjExNTIwMCAwMDEwMDAyCiAjZGVmaW5lICAgQjIzMDQwMCAwMDEwMDAzCkBAIC0xNDgsNiArMTYwLDggQEAKICNkZWZpbmUgQ01TUEFSCSAgMDEwMDAwMDAwMDAwCQkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCiAjZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJCS8qIGZsb3cgY29udHJvbCAqLwogCisjZGVmaW5lIElCU0hJRlQJICAxNgkJLyogU2hpZnQgZnJvbSBDQkFVRCB0byBDSUJBVUQgKi8KKwogLyogY19sZmxhZyBiaXRzICovCiAjZGVmaW5lIElTSUcJMDAwMDAwMQogI2RlZmluZSBJQ0FOT04JMDAwMDAwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1pMzg2L3Rlcm1pb3MuaAppbmRleCA3Yzk5Njc4Li5mNTIwYjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3Rlcm1pb3MuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3Rlcm1pb3MuaApAQCAtODEsOCArODEsMTAgQEAKIAljb3B5X3RvX3VzZXIoKHRlcm1pbyktPmNfY2MsICh0ZXJtaW9zKS0+Y19jYywgTkNDKTsgXAogfSkKIAotI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKLSNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHUsIGspIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zMikpCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zMikpCisjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvc18xKGssIHUpIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvc18xKHUsIGspIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1pMzg2L3RocmVhZF9pbmZvLmgKaW5kZXggYmYwMWQ0Yi4uNGNiMGY5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdGhyZWFkX2luZm8uaApAQCAtMTcyLDcgKzE3Miw3IEBACiAjZGVmaW5lIFRTX1VTRURGUFUJCTB4MDAwMQkvKiBGUFUgd2FzIHVzZWQgYnkgdGhpcyB0YXNrIHRoaXMgcXVhbnR1bSAoU01QKSAqLwogI2RlZmluZSBUU19QT0xMSU5HCQkweDAwMDIJLyogVHJ1ZSBpZiBpbiBpZGxlIGxvb3AgYW5kIG5vdCBzbGVlcGluZyAqLwogCi0jZGVmaW5lIHRza19pc19wb2xsaW5nKHQpICgodCktPnRocmVhZF9pbmZvLT5zdGF0dXMgJiBUU19QT0xMSU5HKQorI2RlZmluZSB0c2tfaXNfcG9sbGluZyh0KSAodGFza190aHJlYWRfaW5mbyh0KS0+c3RhdHVzICYgVFNfUE9MTElORykKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20taTM4Ni90bGJmbHVzaC5oCmluZGV4IGRiN2Y3N2UuLmZjNTI1YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3RsYmZsdXNoLmgKQEAgLTkwLDYgKzkwLDggQEAKIAogI2lmbmRlZiBDT05GSUdfU01QCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCiAjZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKICNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpIF9fZmx1c2hfdGxiX2FsbCgpCiAjZGVmaW5lIGxvY2FsX2ZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdHNjLmggYi9pbmNsdWRlL2FzbS1pMzg2L3RzYy5oCmluZGV4IDNmM2MxZmEuLjYyYzA5MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdHNjLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni90c2MuaApAQCAtMzUsMTQgKzM1LDE2IEBACiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXNfc3luYyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyByZXQ7Ci0JdW5zaWduZWQgZWF4OworCXVuc2lnbmVkIGVheCwgZWR4OwogCiAJLyoKICAgCSAqIFVzZSBSRFRTQ1AgaWYgcG9zc2libGU7IGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3luY2hyb25vdXMKICAJICogYW5kIGRvZXNuJ3QgY2F1c2UgYSBWTUVYSVQgb24gSHlwZXJ2aXNvcnMKIAkgKi8KIAlhbHRlcm5hdGl2ZV9pbyhBU01fTk9QMywgIi5ieXRlIDB4MGYsMHgwMSwweGY5IiwgWDg2X0ZFQVRVUkVfUkRUU0NQLAotCQkJIAkgIj1BIiAocmV0KSwgIjAiICgwVUxMKSA6ICJlY3giLCAibWVtb3J5Iik7CisJCSAgICAgICBBU01fT1VUUFVUMigiPWEiIChlYXgpLCAiPWQiIChlZHgpKSwKKwkJICAgICAgICJhIiAoMFUpLCAiZCIgKDBVKSA6ICJlY3giLCAibWVtb3J5Iik7CisJcmV0ID0gKCgodW5zaWduZWQgbG9uZyBsb25nKWVkeCkgPDwgMzIpIHwgKCh1bnNpZ25lZCBsb25nIGxvbmcpZWF4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaAppbmRleCA4MzNmYTE3Li5lODRhY2UxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgKQEAgLTMyNSwxMCArMzI1LDE0IEBACiAjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzE3CiAjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMTgKICNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMTkKKyNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMyMAorI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMjEKKyNkZWZpbmUgX19OUl90aW1lcmZkCQkzMjIKKyNkZWZpbmUgX19OUl9ldmVudGZkCQkzMjMKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBOUl9zeXNjYWxscyAzMjAKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzI0CiAKICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvYWNwaS5oIGIvaW5jbHVkZS9hc20taWE2NC9hY3BpLmgKaW5kZXggNWQwMzc5Mi4uNWI1MjYzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9hY3BpLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9hY3BpLmgKQEAgLTMwLDYgKzMwLDggQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2luY2x1ZGUgPGFjcGkvcGRjX2ludGVsLmg+CisKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbnVtYS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTExOSwxMSArMTIxLDYgQEAKIGV4dGVybiBpbnQgX19pbml0ZGF0YSBuaWRfdG9fcHhtX21hcFtNQVhfTlVNTk9ERVNdOwogI2VuZGlmCiAKLS8qCi0gKiBSZWZlciBJbnRlbCBBQ1BJIF9QREMgc3VwcG9ydCBkb2N1bWVudCBmb3IgYml0IGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgQUNQSV9QRENfRVNUX0NBUEFCSUxJVFlfU01QICAgICAweDgKLQogI2VuZGlmIC8qX19LRVJORUxfXyovCiAKICNlbmRpZiAvKl9BU01fQUNQSV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1pYTY0L2F0b21pYy5oCmluZGV4IDU2OWVjNzUuLjFmYzNiODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9hdG9taWMuaApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogLyoKICAqIE9uIElBLTY0LCBjb3VudGVyIG11c3QgYWx3YXlzIGJlIHZvbGF0aWxlIHRvIGVuc3VyZSB0aGF0IHRoYXQgdGhlCkBAIC04OCwyNSArODksNDcgQEAKIAlyZXR1cm4gbmV3OwogfQogCi0jZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG9sZCwgbmV3KSAoKGludCljbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgb2xkLCBuZXcpKQorI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvbGQsIG5ldykgKGNtcHhjaGcoJigodiktPmNvdW50ZXIpLCBvbGQsIG5ldykpCiAjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQogCi0jZGVmaW5lIGF0b21pY19hZGRfdW5sZXNzKHYsIGEsIHUpCQkJCVwKLSh7CQkJCQkJCQlcCi0JaW50IGMsIG9sZDsJCQkJCQlcCi0JYyA9IGF0b21pY19yZWFkKHYpOwkJCQkJXAotCWZvciAoOzspIHsJCQkJCQlcCi0JCWlmICh1bmxpa2VseShjID09ICh1KSkpCQkJCVwKLQkJCWJyZWFrOwkJCQkJXAotCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwkJXAotCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkJCQkJXAotCQkJYnJlYWs7CQkJCQlcCi0JCWMgPSBvbGQ7CQkJCQlcCi0JfQkJCQkJCQlcCi0JYyAhPSAodSk7CQkJCQkJXAotfSkKKyNkZWZpbmUgYXRvbWljNjRfY21weGNoZyh2LCBvbGQsIG5ldykgXAorCShjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgb2xkLCBuZXcpKQorI2RlZmluZSBhdG9taWM2NF94Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3sKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQorCiAjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljNjRfYWRkX3VubGVzcyhhdG9taWM2NF90ICp2LCBsb25nIGEsIGxvbmcgdSkKK3sKKwlsb25nIGMsIG9sZDsKKwljID0gYXRvbWljNjRfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljNjRfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKKyNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpIGF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQorCiAjZGVmaW5lIGF0b21pY19hZGRfcmV0dXJuKGksdikJCQkJCQlcCiAoewkJCQkJCQkJCVwKIAlpbnQgX19pYTY0X2Fhcl9pID0gKGkpOwkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1pYTY0L2h3X2lycS5oCmluZGV4IDI3ZjlkZjYuLmMwNTRkN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9od19pcnEuaApAQCAtNjYsNiArNjYsNyBAQAogI2RlZmluZSBJQTY0X1BFUkZNT05fVkVDVE9SCQkweGVlCS8qIHBlcmZvcm1hbmMgbW9uaXRvciBpbnRlcnJ1cHQgdmVjdG9yICovCiAjZGVmaW5lIElBNjRfVElNRVJfVkVDVE9SCQkweGVmCS8qIHVzZSBoaWdoZXN0LXByaW8gZ3JvdXAgMTUgaW50ZXJydXB0IGZvciB0aW1lciAqLwogI2RlZmluZQlJQTY0X01DQV9XQUtFVVBfVkVDVE9SCQkweGYwCS8qIE1DQSB3YWtldXAgKG11c3QgYmUgPk1DQV9SRU5ERVpfVkVDVE9SKSAqLworI2RlZmluZSBJQTY0X0lQSV9MT0NBTF9UTEJfRkxVU0gJMHhmYwkvKiBTTVAgZmx1c2ggbG9jYWwgVExCICovCiAjZGVmaW5lIElBNjRfSVBJX1JFU0NIRURVTEUJCTB4ZmQJLyogU01QIHJlc2NoZWR1bGUgKi8KICNkZWZpbmUgSUE2NF9JUElfVkVDVE9SCQkJMHhmZQkvKiBpbnRlci1wcm9jZXNzb3IgaW50ZXJydXB0IHZlY3RvciAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2lvc2FwaWMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaW9zYXBpYy5oCmluZGV4IDIwZjk4ZjEuLjQyMWNiNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvaW9zYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaW9zYXBpYy5oCkBAIC04Myw3ICs4Myw3IEBACiBleHRlcm4gaW50IGlvc2FwaWNfcmVnaXN0ZXJfaW50ciAodW5zaWduZWQgaW50IGdzaSwgdW5zaWduZWQgbG9uZyBwb2xhcml0eSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgdHJpZ2dlcik7CiBleHRlcm4gdm9pZCBpb3NhcGljX3VucmVnaXN0ZXJfaW50ciAodW5zaWduZWQgaW50IGlycSk7Ci1leHRlcm4gdm9pZCBfX2luaXQgaW9zYXBpY19vdmVycmlkZV9pc2FfaXJxICh1bnNpZ25lZCBpbnQgaXNhX2lycSwgdW5zaWduZWQgaW50IGdzaSwKK2V4dGVybiB2b2lkIF9fZGV2aW5pdCBpb3NhcGljX292ZXJyaWRlX2lzYV9pcnEgKHVuc2lnbmVkIGludCBpc2FfaXJxLCB1bnNpZ25lZCBpbnQgZ3NpLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcG9sYXJpdHksCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyB0cmlnZ2VyKTsKIGV4dGVybiBpbnQgX19pbml0IGlvc2FwaWNfcmVnaXN0ZXJfcGxhdGZvcm1faW50ciAodTMyIGludF90eXBlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9pcnEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaXJxLmgKaW5kZXggNzk0NzllMi4uNjcyMjE2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2lycS5oCkBAIC0xMSw2ICsxMSw5IEBACiAgKiAwMi8yOS8wMCAgICAgRC5Nb3NiZXJnZXIJbW92ZWQgbW9zdCB0aGluZ3MgaW50byBod19pcnEuaAogICovCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKwogI2RlZmluZSBOUl9JUlFTCQkyNTYKICNkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMJTlJfSVJRUwogCkBAIC0yOSw1ICszMiw4IEBACiBleHRlcm4gdm9pZCBkaXNhYmxlX2lycV9ub3N5bmMgKHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBlbmFibGVfaXJxICh1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2V0X2lycV9hZmZpbml0eV9pbmZvICh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgZGVzdCwgaW50IHJlZGlyKTsKK2Jvb2wgaXNfYWZmaW5pdHlfbWFza192YWxpZChjcHVtYXNrX3QgY3B1bWFzayk7CisKKyNkZWZpbmUgaXNfYWZmaW5pdHlfbWFza192YWxpZCBpc19hZmZpbml0eV9tYXNrX3ZhbGlkCiAKICNlbmRpZiAvKiBfQVNNX0lBNjRfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQva2RlYnVnLmggYi9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oCmluZGV4IGFlZDcxNDIuLjMyMGNkOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQva2RlYnVnLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaApAQCAtMjgsMjcgKzI4LDI0IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogCi1zdHJ1Y3QgcHRfcmVnczsKLQotc3RydWN0IGRpZV9hcmdzIHsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKLQljb25zdCBjaGFyICpzdHI7Ci0JbG9uZyBlcnI7Ci0JaW50IHRyYXBucjsKLQlpbnQgc2lnbnI7Ci19OwotCi1leHRlcm4gaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7Ci1leHRlcm4gaW50IHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgcmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7Ci1leHRlcm4gaW50IHVucmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7Ci1leHRlcm4gc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIGlhNjRkaWVfY2hhaW47CisvKgorICogVGhlc2UgYXJlIG9ubHkgaGVyZSBiZWNhdXNlIGtwcm9iZXMuYyB3YW50cyB0aGVtIHRvIGltcGxlbWVudCBhCisgKiBibGF0YW50IGxheWVyaW5nIHZpb2xhdGlvbi4gIFdpbGwgaG9wZWZ1bGx5IGdvIGF3YXkgc29vbiBvbmNlIGFsbAorICogYXJjaGl0ZWN0dXJlcyBhcmUgdXBkYXRlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgdW5yZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIDA7Cit9CiAKIGVudW0gZGllX3ZhbCB7CiAJRElFX0JSRUFLID0gMSwKIAlESUVfRkFVTFQsCiAJRElFX09PUFMsCi0JRElFX1BBR0VfRkFVTFQsCiAJRElFX01BQ0hJTkVfSEFMVCwKIAlESUVfTUFDSElORV9SRVNUQVJULAogCURJRV9NQ0FfTU9OQVJDSF9FTlRFUiwKQEAgLTc0LDE4ICs3MSw0IEBACiAJRElFX0tEVU1QX0xFQVZFLAogfTsKIAotc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X2RpZShlbnVtIGRpZV92YWwgdmFsLCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJICAgICBsb25nIGVyciwgaW50IHRyYXAsIGludCBzaWcpCi17Ci0Jc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7Ci0JCS5yZWdzICAgPSByZWdzLAotCQkuc3RyICAgID0gc3RyLAotCQkuZXJyICAgID0gZXJyLAotCQkudHJhcG5yID0gdHJhcCwKLQkJLnNpZ25yICA9IHNpZwotCX07Ci0KLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmlhNjRkaWVfY2hhaW4sIHZhbCwgJmFyZ3MpOwotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQva2V4ZWMuaCBiL2luY2x1ZGUvYXNtLWlhNjQva2V4ZWMuaAppbmRleCA0MTI5OWRkLi41NDFiZTgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2tleGVjLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9rZXhlYy5oCkBAIC0xNCw4ICsxNCw2IEBACiAvKiBUaGUgbmF0aXZlIGFyY2hpdGVjdHVyZSAqLwogI2RlZmluZSBLRVhFQ19BUkNIIEtFWEVDX0FSQ0hfSUFfNjQKIAotI2RlZmluZSBNQVhfTk9URV9CWVRFUyAxMDI0Ci0KICNkZWZpbmUga2V4ZWNfZmx1c2hfaWNhY2hlX3BhZ2UocGFnZSkgZG8geyBcCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwYWdlX2FkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7IFwKICAgICAgICAgICAgICAgICBmbHVzaF9pY2FjaGVfcmFuZ2UocGFnZV9hZGRyLCBwYWdlX2FkZHIgKyBQQUdFX1NJWkUpOyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2twcm9iZXMuaCBiL2luY2x1ZGUvYXNtLWlhNjQva3Byb2Jlcy5oCmluZGV4IDgyOGFlMDAuLjYzODJlNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQva3Byb2Jlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQva3Byb2Jlcy5oCkBAIC03MSwxMyArNzEsMTUgQEAKIAogI2RlZmluZQlNQVhfUEFSQU1fUlNFX1NJWkUJKDB4NjArMHg2MC8weDNmKQogLyogcGVyLWNwdSBrcHJvYmUgY29udHJvbCBibG9jayAqLworI2RlZmluZSBBUkNIX1BSRVZfS1BST0JFX1NaIDIKIHN0cnVjdCBrcHJvYmVfY3RsYmxrIHsKIAl1bnNpZ25lZCBsb25nIGtwcm9iZV9zdGF0dXM7CiAJc3RydWN0IHB0X3JlZ3MganByb2JlX3NhdmVkX3JlZ3M7CiAJdW5zaWduZWQgbG9uZyBqcHJvYmVzX3NhdmVkX3N0YWNrZWRfcmVnc1tNQVhfUEFSQU1fUlNFX1NJWkVdOwogCXVuc2lnbmVkIGxvbmcgKmJzcDsKIAl1bnNpZ25lZCBsb25nIGNmbTsKLQlzdHJ1Y3QgcHJldl9rcHJvYmUgcHJldl9rcHJvYmU7CisJYXRvbWljX3QgcHJldl9rcHJvYmVfaW5kZXg7CisJc3RydWN0IHByZXZfa3Byb2JlIHByZXZfa3Byb2JlW0FSQ0hfUFJFVl9LUFJPQkVfU1pdOwogfTsKIAogI2RlZmluZSBKUFJPQkVfRU5UUlkocGVudHJ5KQkoa3Byb2JlX29wY29kZV90ICopcGVudHJ5CkBAIC0xMTgsNiArMTIwLDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBzbG90OwogfTsKIAorZXh0ZXJuIGludCBrcHJvYmVzX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpOwogZXh0ZXJuIGludCBrcHJvYmVfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbG9jYWwuaAppbmRleCBkYzUxOTA5Li5jMTFjNTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2xvY2FsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9sb2NhbC5oCkBAIC0xLDUwICsxIEBACi0jaWZuZGVmIF9BU01fSUE2NF9MT0NBTF9ICi0jZGVmaW5lIF9BU01fSUE2NF9MT0NBTF9ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCi0gKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JYXRvbWljNjRfdCB2YWw7Ci19IGxvY2FsX3Q7Ci0KLSNkZWZpbmUgTE9DQUxfSU5JVChpKQkoKGxvY2FsX3QpIHsgeyAoaSkgfSB9KQotI2RlZmluZSBsb2NhbF9yZWFkKGwpCWF0b21pYzY0X3JlYWQoJihsKS0+dmFsKQotI2RlZmluZSBsb2NhbF9zZXQobCwgaSkJYXRvbWljNjRfc2V0KCYobCktPnZhbCwgaSkKLSNkZWZpbmUgbG9jYWxfaW5jKGwpCWF0b21pYzY0X2luYygmKGwpLT52YWwpCi0jZGVmaW5lIGxvY2FsX2RlYyhsKQlhdG9taWM2NF9kZWMoJihsKS0+dmFsKQotI2RlZmluZSBsb2NhbF9hZGQoaSwgbCkJYXRvbWljNjRfYWRkKChpKSwgJihsKS0+dmFsKQotI2RlZmluZSBsb2NhbF9zdWIoaSwgbCkJYXRvbWljNjRfc3ViKChpKSwgJihsKS0+dmFsKQotCi0vKiBOb24tYXRvbWljIHZhcmlhbnRzLCBpLmUuLCBwcmVlbXB0aW9uIGRpc2FibGVkIGFuZCB3b24ndCBiZSB0b3VjaGVkIGluIGludGVycnVwdCwgZXRjLiAgKi8KLQotI2RlZmluZSBfX2xvY2FsX2luYyhsKQkJKCsrKGwpLT52YWwuY291bnRlcikKLSNkZWZpbmUgX19sb2NhbF9kZWMobCkJCSgtLShsKS0+dmFsLmNvdW50ZXIpCi0jZGVmaW5lIF9fbG9jYWxfYWRkKGksbCkJKChsKS0+dmFsLmNvdW50ZXIgKz0gKGkpKQotI2RlZmluZSBfX2xvY2FsX3N1YihpLGwpCSgobCktPnZhbC5jb3VudGVyIC09IChpKSkKLQotLyoKLSAqIFVzZSB0aGVzZSBmb3IgcGVyLWNwdSBsb2NhbF90IHZhcmlhYmxlcy4gIE5vdGUgdGhleSB0YWtlIGEgdmFyaWFibGUgKGVnLiBteXN0cnVjdC5mb28pLAotICogbm90IGFuIGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgY3B1X2xvY2FsX3JlYWQodikJbG9jYWxfcmVhZCgmX19pYTY0X3Blcl9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfc2V0KHYsIGkpCWxvY2FsX3NldCgmX19pYTY0X3Blcl9jcHVfdmFyKHYpLCAoaSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9pbmModikJbG9jYWxfaW5jKCZfX2lhNjRfcGVyX2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9kZWModikJbG9jYWxfZGVjKCZfX2lhNjRfcGVyX2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgdikJbG9jYWxfYWRkKChpKSwgJl9faWE2NF9wZXJfY3B1X3Zhcih2KSkKLSNkZWZpbmUgY3B1X2xvY2FsX3N1YihpLCB2KQlsb2NhbF9zdWIoKGkpLCAmX19pYTY0X3Blcl9jcHVfdmFyKHYpKQotCi0vKgotICogTm9uLWF0b21pYyBpbmNyZW1lbnRzLCBpLmUuLCBwcmVlbXB0aW9uIGRpc2FibGVkIGFuZCB3b24ndCBiZSB0b3VjaGVkIGluIGludGVycnVwdCwKLSAqIGV0Yy4KLSAqLwotI2RlZmluZSBfX2NwdV9sb2NhbF9pbmModikJX19sb2NhbF9pbmMoJl9faWE2NF9wZXJfY3B1X3Zhcih2KSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKHYpCV9fbG9jYWxfZGVjKCZfX2lhNjRfcGVyX2NwdV92YXIodikpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCB2KQlfX2xvY2FsX2FkZCgoaSksICZfX2lhNjRfcGVyX2NwdV92YXIodikpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCB2KQlfX2xvY2FsX3N1YigoaSksICZfX2lhNjRfcGVyX2NwdV92YXIodikpCi0KLSNlbmRpZiAvKiBfQVNNX0lBNjRfTE9DQUxfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oCmluZGV4IDU2MGMyODcuLjY3NTUyY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oCkBAIC0xOCw3MSArMTgsMTggQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvcXVpY2tsaXN0Lmg+CiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAotREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcgKiwgX19wZ3RhYmxlX3F1aWNrbGlzdCk7Ci0jZGVmaW5lIHBndGFibGVfcXVpY2tsaXN0IF9faWE2NF9wZXJfY3B1X3ZhcihfX3BndGFibGVfcXVpY2tsaXN0KQotREVDTEFSRV9QRVJfQ1BVKGxvbmcsIF9fcGd0YWJsZV9xdWlja2xpc3Rfc2l6ZSk7Ci0jZGVmaW5lIHBndGFibGVfcXVpY2tsaXN0X3NpemUgX19pYTY0X3Blcl9jcHVfdmFyKF9fcGd0YWJsZV9xdWlja2xpc3Rfc2l6ZSkKLQotc3RhdGljIGlubGluZSBsb25nIHBndGFibGVfcXVpY2tsaXN0X3RvdGFsX3NpemUodm9pZCkKLXsKLQlsb25nIHFsX3NpemUgPSAwOwotCWludCBjcHVpZDsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1aWQpIHsKLQkJcWxfc2l6ZSArPSBwZXJfY3B1KF9fcGd0YWJsZV9xdWlja2xpc3Rfc2l6ZSwgY3B1aWQpOwotCX0KLQlyZXR1cm4gcWxfc2l6ZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICpwZ3RhYmxlX3F1aWNrbGlzdF9hbGxvYyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgKnJldCA9IE5VTEw7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQotCXJldCA9IHBndGFibGVfcXVpY2tsaXN0OwotCWlmIChsaWtlbHkocmV0ICE9IE5VTEwpKSB7Ci0JCXBndGFibGVfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKikoKnJldCk7Ci0JCXJldFswXSA9IDA7Ci0JCS0tcGd0YWJsZV9xdWlja2xpc3Rfc2l6ZTsKLQkJcHJlZW1wdF9lbmFibGUoKTsKLQl9IGVsc2UgewotCQlwcmVlbXB0X2VuYWJsZSgpOwotCQlyZXQgPSAodW5zaWduZWQgbG9uZyAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBndGFibGVfcXVpY2tsaXN0X2ZyZWUodm9pZCAqcGd0YWJsZV9lbnRyeSkKLXsKLSNpZmRlZiBDT05GSUdfTlVNQQotCWludCBuaWQgPSBwYWdlX3RvX25pZCh2aXJ0X3RvX3BhZ2UocGd0YWJsZV9lbnRyeSkpOwotCi0JaWYgKHVubGlrZWx5KG5pZCAhPSBudW1hX25vZGVfaWQoKSkpIHsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBndGFibGVfZW50cnkpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQkqKHVuc2lnbmVkIGxvbmcgKilwZ3RhYmxlX2VudHJ5ID0gKHVuc2lnbmVkIGxvbmcpcGd0YWJsZV9xdWlja2xpc3Q7Ci0JcGd0YWJsZV9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKXBndGFibGVfZW50cnk7Ci0JKytwZ3RhYmxlX3F1aWNrbGlzdF9zaXplOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlyZXR1cm4gcGd0YWJsZV9xdWlja2xpc3RfYWxsb2MoKTsKKwlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKDAsIEdGUF9LRVJORUwsIE5VTEwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUocGdkX3QgKiBwZ2QpCiB7Ci0JcGd0YWJsZV9xdWlja2xpc3RfZnJlZShwZ2QpOworCXF1aWNrbGlzdF9mcmVlKDAsIE5VTEwsIHBnZCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUEdUQUJMRV80CkBAIC05NCwxMiArNDEsMTIgQEAKIAogc3RhdGljIGlubGluZSBwdWRfdCAqcHVkX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiBwZ3RhYmxlX3F1aWNrbGlzdF9hbGxvYygpOworCXJldHVybiBxdWlja2xpc3RfYWxsb2MoMCwgR0ZQX0tFUk5FTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfZnJlZShwdWRfdCAqIHB1ZCkKIHsKLQlwZ3RhYmxlX3F1aWNrbGlzdF9mcmVlKHB1ZCk7CisJcXVpY2tsaXN0X2ZyZWUoMCwgTlVMTCwgcHVkKTsKIH0KICNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwdWQpCXB1ZF9mcmVlKHB1ZCkKICNlbmRpZiAvKiBDT05GSUdfUEdUQUJMRV80ICovCkBAIC0xMTIsMTIgKzU5LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlyZXR1cm4gcGd0YWJsZV9xdWlja2xpc3RfYWxsb2MoKTsKKwlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKDAsIEdGUF9LRVJORUwsIE5VTEwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2ZyZWUocG1kX3QgKiBwbWQpCiB7Ci0JcGd0YWJsZV9xdWlja2xpc3RfZnJlZShwbWQpOworCXF1aWNrbGlzdF9mcmVlKDAsIE5VTEwsIHBtZCk7CiB9CiAKICNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWQpCXBtZF9mcmVlKHBtZCkKQEAgLTEzNywyOCArODQsMzEgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0Jdm9pZCAqcGcgPSBwZ3RhYmxlX3F1aWNrbGlzdF9hbGxvYygpOworCXZvaWQgKnBnID0gcXVpY2tsaXN0X2FsbG9jKDAsIEdGUF9LRVJORUwsIE5VTEwpOwogCXJldHVybiBwZyA/IHZpcnRfdG9fcGFnZShwZykgOiBOVUxMOwogfQogCiBzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcmV0dXJuIHBndGFibGVfcXVpY2tsaXN0X2FsbG9jKCk7CisJcmV0dXJuIHF1aWNrbGlzdF9hbGxvYygwLCBHRlBfS0VSTkVMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBwYWdlICpwdGUpCiB7Ci0JcGd0YWJsZV9xdWlja2xpc3RfZnJlZShwYWdlX2FkZHJlc3MocHRlKSk7CisJcXVpY2tsaXN0X2ZyZWVfcGFnZSgwLCBOVUxMLCBwdGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHB0ZV90ICogcHRlKQogewotCXBndGFibGVfcXVpY2tsaXN0X2ZyZWUocHRlKTsKKwlxdWlja2xpc3RfZnJlZSgwLCBOVUxMLCBwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfcGd0X2NhY2hlKHZvaWQpCit7CisJcXVpY2tsaXN0X3RyaW0oMCwgTlVMTCwgMjUsIDE2KTsKIH0KIAogI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSkJcHRlX2ZyZWUocHRlKQogCi1leHRlcm4gdm9pZCBjaGVja19wZ3RfY2FjaGUodm9pZCk7Ci0KICNlbmRpZgkJCQkvKiBfQVNNX0lBNjRfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oCmluZGV4IDU1MzE4MjcuLjY3MGI3MDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oCkBAIC00ODUsMTAgKzQ4NSw2IEBACiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCiAJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCiAKLSNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbikKLSNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJMAotI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuKQotCiAvKgogICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKICAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcG9sbC5oIGIvaW5jbHVkZS9hc20taWE2NC9wb2xsLmgKaW5kZXggYmNhZjlmMS4uYzk4NTA5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wb2xsLmgKQEAgLTEsMzIgKzEgQEAKLSNpZm5kZWYgX0FTTV9JQTY0X1BPTExfSAotI2RlZmluZSBfQVNNX0lBNjRfUE9MTF9ICi0KLS8qCi0gKiBwb2xsKDIpIGJpdCBkZWZpbml0aW9ucy4gIEJhc2VkIG9uIDxhc20taTM4Ni9wb2xsLmg+LgotICoKLSAqIE1vZGlmaWVkIDE5OTgsIDE5OTksIDIwMDIKLSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4sIEhld2xldHQtUGFja2FyZCBDbwotICovCi0KLSNkZWZpbmUgUE9MTElOCQkweDAwMDEKLSNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCi0jZGVmaW5lIFBPTExPVVQJCTB4MDAwNAotI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKLSNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCi0jZGVmaW5lIFBPTExOVkFMCTB4MDAyMAotCi0jZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCi0jZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCi0jZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCi0jZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCi0jZGVmaW5lIFBPTExNU0cJCTB4MDQwMAotI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAotI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCi0KLXN0cnVjdCBwb2xsZmQgewotCWludCBmZDsKLQlzaG9ydCBldmVudHM7Ci0Jc2hvcnQgcmV2ZW50czsKLX07Ci0KLSNlbmRpZiAvKiBfQVNNX0lBNjRfUE9MTF9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbXAuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc21wLmgKaW5kZXggNjBmZDRhZS4uYzYwMDI0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCkBAIC0zOCw2ICszOCw4IEBACiAJcmV0dXJuIGxpZC5mLmlkIDw8IDggfCBsaWQuZi5laWQ7CiB9CiAKKyNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJCWlhNjRfZ2V0X2xpZCgpCisKICNpZmRlZiBDT05GSUdfU01QCiAKICNkZWZpbmUgWFRQX09GRlNFVAkJMHgxZTAwMDgKQEAgLTExMCw4ICsxMTIsNiBAQAogCQl3cml0ZWIoMHgwZiwgaXBpX2Jhc2VfYWRkciArIFhUUF9PRkZTRVQpOyAvKiBTZXQgWFRQIHRvIG1heCAqLwogfQogCi0jZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCQlpYTY0X2dldF9saWQoKQotCiAvKiBVcHBpbmcgYW5kIGRvd25pbmcgb2YgQ1BVcyAqLwogZXh0ZXJuIGludCBfX2NwdV9kaXNhYmxlICh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1X2RpZSAodW5zaWduZWQgaW50IGNwdSk7CkBAIC0xMjgsNyArMTI4LDcgQEAKIGV4dGVybiB2b2lkIGlkZW50aWZ5X3NpYmxpbmdzIChzdHJ1Y3QgY3B1aW5mb19pYTY0ICopOwogZXh0ZXJuIGludCBpc19tdWx0aXRocmVhZGluZ19lbmFibGVkKHZvaWQpOwogCi0jZWxzZQorI2Vsc2UgLyogQ09ORklHX1NNUCAqLwogCiAjZGVmaW5lIGNwdV9sb2dpY2FsX2lkKGkpCQkwCiAjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChpKQkJaWE2NF9nZXRfbGlkKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCmluZGV4IDJjNDAwNGUuLjI5MWU4Y2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaApAQCAtMTA2LDYgKzEwNiw3IEBACiAvKiBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KICNkZWZpbmUgU0FMX0lOVFJfQUxMT0MJCTEKICNkZWZpbmUgU0FMX0lOVFJfRlJFRQkJMgorI2RlZmluZSBTQUxfSU5UUl9SRURJUkVDVAkzCiAKIC8qCiAgKiBvcGVyYXRpb25zIGF2YWlsYWJsZSBvbiB0aGUgZ2VuZXJpYyBTTl9TQUxfU1lTQ1RMX09QCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmgKaW5kZXggOTE2OTg1OS4uN2QwMjQxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGhyZWFkX2luZm8uaApAQCAtODUsNiArODUsNyBAQAogI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkzCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCiAjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTQJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KICNkZWZpbmUgVElGX1NJTkdMRVNURVAJCTUJLyogcmVzdG9yZSBzaW5nbGVzdGVwIG9uIHJldHVybiB0byB1c2VyIG1vZGUgKi8KKyNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk2CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTE3CiAjZGVmaW5lIFRJRl9NQ0FfSU5JVAkJMTgJLyogdGhpcyB0YXNrIGlzIHByb2Nlc3NpbmcgTUNBIG9yIElOSVQgKi8KQEAgLTk2LDYgKzk3LDcgQEAKICNkZWZpbmUgX1RJRl9TSU5HTEVTVEVQCQkoMSA8PCBUSUZfU0lOR0xFU1RFUCkKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFQVVESVQJKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TSU5HTEVTVEVQKQogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDEgPDwgVElGX05PVElGWV9SRVNVTUUpCisjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxIDw8IFRJRl9SRVNUT1JFX1NJR01BU0spCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDEgPDwgVElGX1BPTExJTkdfTlJGTEFHKQpAQCAtMTA0LDEyICsxMDYsMTIgQEAKICNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAKIC8qICJ3b3JrIHRvIGRvIG9uIHVzZXItcmV0dXJuIiBiaXRzICovCi0jZGVmaW5lIFRJRl9BTExXT1JLX01BU0sJKF9USUZfTk9USUZZX1JFU1VNRXxfVElGX1NJR1BFTkRJTkd8X1RJRl9ORUVEX1JFU0NIRUR8X1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVCkKKyNkZWZpbmUgVElGX0FMTFdPUktfTUFTSwkoX1RJRl9OT1RJRllfUkVTVU1FfF9USUZfU0lHUEVORElOR3xfVElGX05FRURfUkVTQ0hFRHxfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUfF9USUZfUkVTVE9SRV9TSUdNQVNLKQogLyogbGlrZSBUSUZfQUxMV09SS19CSVRTIGJ1dCBzYW5zIFRJRl9TWVNDQUxMX1RSQUNFIG9yIFRJRl9TWVNDQUxMX0FVRElUICovCiAjZGVmaW5lIFRJRl9XT1JLX01BU0sJCShUSUZfQUxMV09SS19NQVNLJn4oX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVCkpCiAKICNkZWZpbmUgVFNfUE9MTElORwkJMSAJLyogdHJ1ZSBpZiBpbiBpZGxlIGxvb3AgYW5kIG5vdCBzbGVlcGluZyAqLwogCi0jZGVmaW5lIHRza19pc19wb2xsaW5nKHQpICgodCktPnRocmVhZF9pbmZvLT5zdGF0dXMgJiBUU19QT0xMSU5HKQorI2RlZmluZSB0c2tfaXNfcG9sbGluZyh0KSAodGFza190aHJlYWRfaW5mbyh0KS0+c3RhdHVzICYgVFNfUE9MTElORykKIAogI2VuZGlmIC8qIF9BU01fSUE2NF9USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmgKaW5kZXggY2Y5YWNiOS4uZTM3ZjlmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaApAQCAtMjcsOSArMjcsMTEgQEAKICNpZmRlZiBDT05GSUdfU01QCiAgIGV4dGVybiB2b2lkIHNtcF9mbHVzaF90bGJfYWxsICh2b2lkKTsKICAgZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX3RsYl9tbSAoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworICBleHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiX2NwdW1hc2sgKGNwdW1hc2tfdCB4Y3B1bWFzayk7CiAjIGRlZmluZSBmbHVzaF90bGJfYWxsKCkJc21wX2ZsdXNoX3RsYl9hbGwoKQogI2Vsc2UKICMgZGVmaW5lIGZsdXNoX3RsYl9hbGwoKQlsb2NhbF9mbHVzaF90bGJfYWxsKCkKKyMgZGVmaW5lIHNtcF9mbHVzaF90bGJfY3B1bWFzayhtKSBsb2NhbF9mbHVzaF90bGJfYWxsKCkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTk0LDYgKzk2LDE1IEBACiAJICovCiB9CiAKKy8qCisgKiBGbHVzaCB0aGUgbG9jYWwgVExCLiBJbnZva2VkIGZyb20gYW5vdGhlciBjcHUgdXNpbmcgYW4gSVBJLgorICovCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCBzbXBfbG9jYWxfZmx1c2hfdGxiKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgc21wX2xvY2FsX2ZsdXNoX3RsYigpCisjZW5kaWYKKwogI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpCWZsdXNoX3RsYl9hbGwoKQkvKiBYWFggZml4IG1lICovCiAKICNlbmRpZiAvKiBfQVNNX0lBNjRfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKaW5kZXggYTllMWZhNC4uNDQxYzllMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCkBAIC0yODMsNyArMjgzLDggQEAKICNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkJMTI5MQogI2RlZmluZSBfX05SX2ZjaG1vZGF0CQkJMTI5MgogI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJCTEyOTMKLS8qIDEyOTQsIDEyOTUgcmVzZXJ2ZWQgZm9yIHBzZWxlY3QvcHBvbGwgKi8KKyNkZWZpbmUgX19OUl9wc2VsZWN0NgkJCTEyOTQKKyNkZWZpbmUgX19OUl9wcG9sbAkJCTEyOTUKICNkZWZpbmUgX19OUl91bnNoYXJlCQkJMTI5NgogI2RlZmluZSBfX05SX3NwbGljZQkJCTEyOTcKICNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJCTEyOTgKQEAgLTI5MywxMyArMjk0LDMyIEBACiAjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCQkxMzAyCiAvKiAxMzAzIHJlc2VydmVkIGZvciBtb3ZlX3BhZ2VzICovCiAjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkJMTMwNAorI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CQkxMzA1CisjZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkJMTMwNgorI2RlZmluZSBfX05SX3NpZ25hbGZkCQkJMTMwNworI2RlZmluZSBfX05SX3RpbWVyZmQJCQkxMzA4CisjZGVmaW5lIF9fTlJfZXZlbnRmZAkJCTEzMDkKIAogI2lmZGVmIF9fS0VSTkVMX18KIAogCi0jZGVmaW5lIE5SX3N5c2NhbGxzCQkJMjgxIC8qIGxlbmd0aCBvZiBzeXNjYWxsIHRhYmxlICovCisjZGVmaW5lIE5SX3N5c2NhbGxzCQkJMjg2IC8qIGxlbmd0aCBvZiBzeXNjYWxsIHRhYmxlICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgc3RvcCBzY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2ggZnJvbSBjb21wbGFpbmluZyBhYm91dAorICogdW5pbXBsZW1lbnRlZCBzeXN0ZW0gY2FsbHMuICBHbGliYyBwcm92aWRlcyBmb3IgZWFjaCBvZiB0aGVzZSBieSB1c2luZworICogbW9yZSBtb2Rlcm4gZXF1aXZhbGVudCBzeXN0ZW0gY2FsbHMuCisgKi8KKyNkZWZpbmUgX19JR05PUkVfZm9yawkJLyogY2xvbmUoKSAqLworI2RlZmluZSBfX0lHTk9SRV90aW1lCQkvKiBnZXR0aW1lb2ZkYXkoKSAqLworI2RlZmluZSBfX0lHTk9SRV9hbGFybQkJLyogc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAuLi4gKi8KKyNkZWZpbmUgX19JR05PUkVfcGF1c2UJCS8qIHJ0X3NpZ3Byb2NtYXNrKCksIHJ0X3NpZ3N1c3BlbmQoKSAqLworI2RlZmluZSBfX0lHTk9SRV91dGltZQkJLyogdXRpbWVzKCkgKi8KKyNkZWZpbmUgX19JR05PUkVfZ2V0cGdycAkvKiBnZXRwZ2lkKCkgKi8KKyNkZWZpbmUgX19JR05PUkVfdmZvcmsJCS8qIGNsb25lKCkgKi8KIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECiAKICNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCiAjIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfRkFEVklTRTY0CkBAIC0zMTAsNiArMzMwLDcgQEAKICMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKICMgZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjIGRlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKKyMgZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUlRfU0lHU1VTUEVORAogIyBkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvYXRvbWljLmgKaW5kZXggZjVhN2Q3My4uM2EzOGZmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2F0b21pYy5oCkBAIC0yNTMsMTQgKzI1MywyMSBAQAogICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCiAgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KICAqLwotI2RlZmluZSBhdG9taWNfYWRkX3VubGVzcyh2LCBhLCB1KQkJCQlcCi0oewkJCQkJCQkJXAotCWludCBjLCBvbGQ7CQkJCQkJXAotCWMgPSBhdG9taWNfcmVhZCh2KTsJCQkJCVwKLQl3aGlsZSAoYyAhPSAodSkgJiYgKG9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSkpICE9IGMpIFwKLQkJYyA9IG9sZDsJCQkJCVwKLQljICE9ICh1KTsJCQkJCQlcCi19KQorc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCit7CisJaW50IGMsIG9sZDsKKwljID0gYXRvbWljX3JlYWQodik7CisJZm9yICg7OykgeworCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQorCQkJYnJlYWs7CisJCW9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7CisJCWlmIChsaWtlbHkob2xkID09IGMpKQorCQkJYnJlYWs7CisJCWMgPSBvbGQ7CisJfQorCXJldHVybiBjICE9ICh1KTsKK30KKwogI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfY2xlYXJfbWFzayh1bnNpZ25lZCBsb25nICBtYXNrLCBhdG9taWNfdCAqYWRkcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIva2RlYnVnLmggYi9pbmNsdWRlL2FzbS1tMzJyL2tkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlY2UxYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2tkZWJ1Zy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9rZGVidWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS0ybGV2ZWwuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS0ybGV2ZWwuaAppbmRleCA3NTA5MjU3Li5iY2EzNDc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUtMmxldmVsLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLTJsZXZlbC5oCkBAIC03MSw4ICs3MSw4IEBACiAjZGVmaW5lIHBmbl9wbWQocGZuLCBwcm90KQlfX3BtZCgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQogCiAjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI5Ci0jZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCSgoKHB0ZV92YWwocHRlKSA+PiAyKSAmIDB4ZWYpIHwgKCgocHRlX3ZhbChwdGUpID4+IDEwKSkgPDwgNykpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCSgocHRlX3QpIHsgKCgob2ZmKSAmIDB4ZWYpIDw8IDIpIHwgKCgob2ZmKSA+PiA3KSA8PCAxMCkgfCBfUEFHRV9GSUxFIH0pCisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCSgoKHB0ZV92YWwocHRlKSA+PiAyKSAmIDB4N2YpIHwgKCgocHRlX3ZhbChwdGUpID4+IDEwKSkgPDwgNykpCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCSgocHRlX3QpIHsgKCgob2ZmKSAmIDB4N2YpIDw8IDIpIHwgKCgob2ZmKSA+PiA3KSA8PCAxMCkgfCBfUEFHRV9GSUxFIH0pCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9NMzJSX1BHVEFCTEVfMkxFVkVMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmgKaW5kZXggMWMxNWJhNy4uNjYwNDMwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmgKQEAgLTM2Niw3ICszNjYsNyBAQAogI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkJZG8geyB9IHdoaWxlICgwKQogCiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCi0jZGVmaW5lIF9fc3dwX3R5cGUoeCkJCQkoKCh4KS52YWwgPj4gMikgJiAweDNmKQorI2RlZmluZSBfX3N3cF90eXBlKHgpCQkJKCgoeCkudmFsID4+IDIpICYgMHgxZikKICNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkJKCh4KS52YWwgPj4gMTApCiAjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJXAogCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCAyKSB8ICgob2Zmc2V0KSA8PCAxMCkgfSkKQEAgLTM4MSwxMCArMzgxLDYgQEAKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJXAogCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQogCi0jZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCi0jZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKLSNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKLQogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX1lPVU5HCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfRElSVFkKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3BvbGwuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcG9sbC5oCmluZGV4IDllMGU3MDAuLmM5ODUwOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcG9sbC5oCkBAIC0xLDMyICsxIEBACi0jaWZuZGVmIF9BU01fTTMyUl9QT0xMX0gKLSNkZWZpbmUgX0FTTV9NMzJSX1BPTExfSAotCi0vKgotICogcG9sbCgyKSBiaXQgZGVmaW5pdGlvbnMuICBCYXNlZCBvbiA8YXNtLWkzODYvcG9sbC5oPi4KLSAqCi0gKiBNb2RpZmllZCAyMDA0Ci0gKiAgICAgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgotICovCi0KLSNkZWZpbmUgUE9MTElOCQkweDAwMDEKLSNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCi0jZGVmaW5lIFBPTExPVVQJCTB4MDAwNAotI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKLSNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCi0jZGVmaW5lIFBPTExOVkFMCTB4MDAyMAotCi0jZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCi0jZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCi0jZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCi0jZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCi0jZGVmaW5lIFBPTExNU0cJCTB4MDQwMAotI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAotI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCi0KLXN0cnVjdCBwb2xsZmQgewotCWludCBmZDsKLQlzaG9ydCBldmVudHM7Ci0Jc2hvcnQgcmV2ZW50czsKLX07Ci0KLSNlbmRpZiAgLyogX0FTTV9NMzJSX1BPTExfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BvbGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc21wLmggYi9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oCmluZGV4IGFiZDkzN2EuLjA3OGUxYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zbXAuaApAQCAtMTA4LDYgKzEwOCwxMCBAQAogI2RlZmluZSBJUElfU0hJRlQJKDApCiAjZGVmaW5lIE5SX0lQSVMJCSg4KQogCi0jZW5kaWYJLyogQ09ORklHX1NNUCAqLworI2Vsc2UJLyogQ09ORklHX1NNUCAqLworCisjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCQkwCisKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKICNlbmRpZgkvKiBfQVNNX00zMlJfU01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oCmluZGV4IDk5ZWUwOTguLjhlZTczZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaApAQCAtMTAsNiArMTAsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KICAqLwogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCkBAIC0yMSwxMiArMjIsMjIgQEAKICAqIGBuZXh0JyBhbmQgYHByZXYnIHNob3VsZCBiZSBzdHJ1Y3QgdGFza19zdHJ1Y3QsIGJ1dCBpdCBpc24ndCBhbHdheXMgZGVmaW5lZAogICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19GUkFNRV9QT0lOVEVSKSB8fCBcCisJIWRlZmluZWQoQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUikKKyNkZWZpbmUgTTMyUl9QVVNIX0ZQICIJcHVzaCBmcFxuIgorI2RlZmluZSBNMzJSX1BPUF9GUCAgIglwb3AgIGZwXG4iCisjZWxzZQorI2RlZmluZSBNMzJSX1BVU0hfRlAgIiIKKyNkZWZpbmUgTTMyUl9QT1BfRlAgICIiCisjZW5kaWYKKwogI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkgIGRvIHsgXAogCV9fYXNtX18gX192b2xhdGlsZV9fICggXAogCQkiCXNldGgJbHIsICNoaWdoKDFmKQkJCQlcbiIgXAogCQkiCW9yMwlsciwgbHIsICNsb3coMWYpCQkJXG4iIFwKIAkJIglzdAlsciwgQCU0ICA7IHN0b3JlIG9sZCBMUgkJCVxuIiBcCiAJCSIJbGQJbHIsIEAlNSAgOyBsb2FkIG5ldyBMUgkJCVxuIiBcCisJCQlNMzJSX1BVU0hfRlAgXAogCQkiCXN0CXNwLCBAJTIgIDsgc3RvcmUgb2xkIFNQCQkJXG4iIFwKIAkJIglsZAlzcCwgQCUzICA7IGxvYWQgbmV3IFNQCQkJXG4iIFwKIAkJIglwdXNoCSUxICA7IHN0b3JlIGBwcmV2JyBvbiBuZXcgc3RhY2sJCVxuIiBcCkBAIC0zNCw2ICs0NSw3IEBACiAJCSIJLmZpbGxpbnNuCQkJCQlcbiIgXAogCQkiMToJCQkJCQkJXG4iIFwKIAkJIglwb3AJJTAgIDsgcmVzdG9yZSBgX19sYXN0JyBmcm9tIG5ldyBzdGFjawlcbiIgXAorCQkJTTMyUl9QT1BfRlAgXAogCQk6ICI9ciIgKGxhc3QpIFwKIAkJOiAiMCIgKHByZXYpLCBcCiAJCSAgInIiICgmKHByZXYtPnRocmVhZC5zcCkpLCAiciIgKCYobmV4dC0+dGhyZWFkLnNwKSksIFwKQEAgLTEyMiw4ICsxMzQsNiBAQAogI2RlZmluZSB4Y2hnKHB0cix4KSBcCiAJKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCiAKLSNkZWZpbmUgdGFzKHB0cikJKHhjaGcoKHB0ciksMSkpCi0KICNpZmRlZiBDT05GSUdfU01QCiBleHRlcm4gdm9pZCAgX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOwogI2VuZGlmCkBAIC0xMzgsMTQgKzE0OCwxNCBAQAogCSJhZGQzCSJyZWcwIiwgImFkZHIiLCAjMHgyMDAwOwkJXG5cdCIJXAogCSJsZAkicmVnMCIsIEAicmVnMCI7CQkJXG5cdCIJXAogCSJ1bmxvY2sJInJlZzAiLCBAInJlZzEiOwkJCVxuXHQiCi0JLyogRklYTUU6IFRoaXMgd29ya2Fyb3VuZCBjb2RlIGNhbm5vdCBoYW5kbGUga2VucmVsIG1vZHVsZXMKKwkvKiBGSVhNRTogVGhpcyB3b3JrYXJvdW5kIGNvZGUgY2Fubm90IGhhbmRsZSBrZXJuZWwgbW9kdWxlcwogCSAqIGNvcnJlY3RseSB1bmRlciBTTVAgZW52aXJvbm1lbnQuCiAJICovCiAjZWxzZQkvKiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxICovCiAjZGVmaW5lIERDQUNIRV9DTEVBUihyZWcwLCByZWcxLCBhZGRyKQogI2VuZGlmCS8qIENPTkZJR19DSElQX00zMjcwMF9UUzEgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcKIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaHcuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlody5oCmluZGV4IGYyOGFjZDAuLmVjZjAwN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlody5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlody5oCkBAIC0yLDcgKzIsNyBAQAogKiogbGludXgvYXRhcmlody5oIC0tIFRoaXMgaGVhZGVyIGRlZmluZXMgc29tZSBtYWNyb3MgYW5kIHBvaW50ZXJzIGZvcgogKiogICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpb3VzIEF0YXJpIGN1c3RvbSBoYXJkd2FyZSByZWdpc3RlcnMuCiAqKgotKiogQ29weXJpZ2h0IDE5OTQgYnkgQmqUcm4gQnJhdWVsCisqKiBDb3B5cmlnaHQgMTk5NCBieSBCasO2cm4gQnJhdWVsCiAqKgogKiogNS8xLzk0IFJvbWFuIEhvZGVrOgogKiogICBBZGRlZCBkZWZpbml0aW9ucyBmb3IgVFQgc3BlY2lmaWMgY2hpcHMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaW50cy5oIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFyaWludHMuaAppbmRleCAwZWQ0NTRmLi41NzQ4ZTk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaW50cy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlpbnRzLmgKQEAgLTEsNyArMSw3IEBACiAvKgogKiogYXRhcmlpbnRzLmggLS0gQXRhcmkgTGludXggaW50ZXJydXB0IGhhbmRsaW5nIHN0cnVjdHMgYW5kIHByb3RvdHlwZXMKICoqCi0qKiBDb3B5cmlnaHQgMTk5NCBieSBCapRybiBCcmF1ZWwKKyoqIENvcHlyaWdodCAxOTk0IGJ5IEJqw7ZybiBCcmF1ZWwKICoqCiAqKiA1LzIvOTQgUm9tYW4gSG9kZWs6CiAqKiAgIFRUIGludGVycnVwdCBkZWZpbml0aW9ucyBhZGRlZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1tNjhrL2F0b21pYy5oCmluZGV4IGQ1ZWVkNjQuLjQ5MTUyOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdG9taWMuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX19BUkNIX002OEtfQVRPTUlDX18KIAogCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkvKiBsb2NhbF9pcnFfWFhYKCkgKi8KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKIC8qCiAgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgpAQCAtMTcwLDIwICsxNzAsMjEgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygib3JsICUxLCUwIiA6ICIrbSIgKCp2KSA6ICJpZCIgKG1hc2spKTsKIH0KIAotI2RlZmluZSBhdG9taWNfYWRkX3VubGVzcyh2LCBhLCB1KQkJCQlcCi0oewkJCQkJCQkJXAotCWludCBjLCBvbGQ7CQkJCQkJXAotCWMgPSBhdG9taWNfcmVhZCh2KTsJCQkJCVwKLQlmb3IgKDs7KSB7CQkJCQkJXAotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQkJCQlcCi0JCQlicmVhazsJCQkJCVwKLQkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsJCVwKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCQkJCVwKLQkJCWJyZWFrOwkJCQkJXAotCQljID0gb2xkOwkJCQkJXAotCX0JCQkJCQkJXAotCWMgIT0gKHUpOwkJCQkJCVwKLX0pCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3sKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQorCiAjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCiAvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLW02OGsva2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjZTFiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsva2RlYnVnLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2tkZWJ1Zy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLW02OGsvbW16b25lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmMWVjNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbW16b25lLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9BU01fTTY4S19NTVpPTkVfSF8KKyNkZWZpbmUgX0FTTV9NNjhLX01NWk9ORV9IXworCitleHRlcm4gcGdfZGF0YV90IHBnX2RhdGFfbWFwW107CisKKyNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCSgmcGdfZGF0YV9tYXBbbmlkXSkKKyNkZWZpbmUgTk9ERV9NRU1fTUFQKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX21lbV9tYXApCisKKyNlbmRpZiAvKiBfQVNNX002OEtfTU1aT05FX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21vZHVsZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9tb2R1bGUuaAppbmRleCBjNmQ3NWFmLi4zODJkMjBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL21vZHVsZS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbW9kdWxlLmgKQEAgLTEsNyArMSwzOSBAQAogI2lmbmRlZiBfQVNNX002OEtfTU9EVUxFX0gKICNkZWZpbmUgX0FTTV9NNjhLX01PRFVMRV9ICi1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeyB9OworCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeworCXN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gKmZpeHVwX3N0YXJ0LCAqZml4dXBfZW5kOworfTsKKworI2RlZmluZSBNT0RVTEVfQVJDSF9JTklUIHsJCQkJXAorCS5maXh1cF9zdGFydAkJPSBfX3N0YXJ0X2ZpeHVwLAlcCisJLmZpeHVwX2VuZAkJPSBfX3N0b3BfZml4dXAsCQlcCit9CisKICNkZWZpbmUgRWxmX1NoZHIgRWxmMzJfU2hkcgogI2RlZmluZSBFbGZfU3ltIEVsZjMyX1N5bQogI2RlZmluZSBFbGZfRWhkciBFbGYzMl9FaGRyCisKKworZW51bSBtNjhrX2ZpeHVwX3R5cGUgeworCW02OGtfZml4dXBfbWVtb2Zmc2V0LAorCW02OGtfZml4dXBfdm5vZGVfc2hpZnQsCit9OworCitzdHJ1Y3QgbTY4a19maXh1cF9pbmZvIHsKKwllbnVtIG02OGtfZml4dXBfdHlwZSB0eXBlOworCXZvaWQgKmFkZHI7Cit9OworCisjZGVmaW5lIG02OGtfZml4dXAodHlwZSwgYWRkcikJCQlcCisJIgkuc2VjdGlvbiBcIi5tNjhrX2ZpeHVwXCIsXCJhd1wiXG4iCVwKKwkiCS5sb25nICIgI3R5cGUgIiwiICNhZGRyICJcbiIJXAorCSIJLnByZXZpb3VzXG4iCisKK2V4dGVybiBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvIF9fc3RhcnRfZml4dXBbXSwgX19zdG9wX2ZpeHVwW107CisKK3N0cnVjdCBtb2R1bGU7CitleHRlcm4gdm9pZCBtb2R1bGVfZml4dXAoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvICpzdGFydCwKKwkJCSBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvICplbmQpOworCiAjZW5kaWYgLyogX0FTTV9NNjhLX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21vdG9yb2xhX3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLW02OGsvbW90b3JvbGFfcGd0YWJsZS5oCmluZGV4IDYxZTQ0MDYuLmI1Yjc4YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvbW90b3JvbGFfcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbW90b3JvbGFfcGd0YWJsZS5oCkBAIC0xMzAsNyArMTMwLDcgQEAKICNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkocHRlX3ZhbChwdGUpICYgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UTk9ORSkpCiAjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHB0ZXApCQkoeyBwdGVfdmFsKCoocHRlcCkpID0gMDsgfSkKIAotI2RlZmluZSBwdGVfcGFnZShwdGUpCQkobWVtX21hcCArICgodW5zaWduZWQgbG9uZykoX192YShwdGVfdmFsKHB0ZSkpIC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpKQorI2RlZmluZSBwdGVfcGFnZShwdGUpCQl2aXJ0X3RvX3BhZ2UoX192YShwdGVfdmFsKHB0ZSkpKQogI2RlZmluZSBwdGVfcGZuKHB0ZSkJCShwdGVfdmFsKHB0ZSkgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCiAKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXdoaWxlICgtLV9faSA+PSAwKQkJCVwKIAkJKl9fcHRyKysgPSAwOwkJCVwKIH0pCi0jZGVmaW5lIHBtZF9wYWdlKHBtZCkJCShtZW1fbWFwICsgKCh1bnNpZ25lZCBsb25nKShfX3ZhKHBtZF92YWwocG1kKSkgLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkpCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCXZpcnRfdG9fcGFnZShfX3ZhKHBtZF92YWwocG1kKSkpCiAKIAogI2RlZmluZSBwZ2Rfbm9uZShwZ2QpCQkoIXBnZF92YWwocGdkKSkKQEAgLTIyMywxMCArMjIzLDEwIEBACiAJcmV0dXJuIChwdGVfdCAqKV9fcG1kX3BhZ2UoKnBtZHApICsgKChhZGRyZXNzID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKTsKIH0KIAotI2RlZmluZSBwdGVfb2Zmc2V0X21hcChwbWRwLGFkZHJlc3MpICgocHRlX3QgKilrbWFwKHBtZF9wYWdlKCpwbWRwKSkgKyAoKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcChwbWRwLGFkZHJlc3MpICgocHRlX3QgKilfX3BtZF9wYWdlKCpwbWRwKSArICgoKGFkZHJlc3MpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKSkKICNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKHBtZHAsIGFkZHJlc3MpIHB0ZV9vZmZzZXRfbWFwKHBtZHAsIGFkZHJlc3MpCi0jZGVmaW5lIHB0ZV91bm1hcChwdGUpIGt1bm1hcChwdGUpCi0jZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSBrdW5tYXAocHRlKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKQkJKCh2b2lkKTApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKQkoKHZvaWQpMCkKIAogLyoKICAqIEFsbG9jYXRlIGFuZCBmcmVlIHBhZ2UgdGFibGVzLiBUaGUgeHh4X2tlcm5lbCgpIHZlcnNpb25zIGFyZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wYWdlLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BhZ2UuaAppbmRleCBmY2MxNjVkLi45ZTZkMGQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3BhZ2UuaApAQCAtMjcsNiArMjcsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjaW5jbHVkZSA8YXNtL21vZHVsZS5oPgorCiAjZGVmaW5lIGdldF91c2VyX3BhZ2UodmFkZHIpCQlfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCkKICNkZWZpbmUgZnJlZV91c2VyX3BhZ2UocGFnZSwgYWRkcikJZnJlZV9wYWdlKGFkZHIpCiAKQEAgLTExNCwxOCArMTE2LDMzIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfbWVtb2Zmc2V0OworCiAjaWZuZGVmIENPTkZJR19TVU4zCiAKICNkZWZpbmUgV0FOVF9QQUdFX1ZJUlRVQUwKLSNpZmRlZiBDT05GSUdfU0lOR0xFX01FTU9SWV9DSFVOSwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19tZW1vZmZzZXQ7CiAKLSNkZWZpbmUgX19wYSh2YWRkcikJCSgodW5zaWduZWQgbG9uZykodmFkZHIpK202OGtfbWVtb2Zmc2V0KQotI2RlZmluZSBfX3ZhKHBhZGRyKQkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKShwYWRkciktbTY4a19tZW1vZmZzZXQpKQotI2Vsc2UKLSNkZWZpbmUgX19wYSh2YWRkcikJCXZpcnRfdG9fcGh5cygodm9pZCAqKSh2YWRkcikpCi0jZGVmaW5lIF9fdmEocGFkZHIpCQlwaHlzX3RvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpKHBhZGRyKSkKLSNlbmRpZgorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fX3BhKHZvaWQgKnZhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisJYXNtICgKKwkJIjE6CWFkZGwgIzAsJTBcbiIKKwkJbTY4a19maXh1cCglYzIsIDFiKzIpCisJCTogIj1yIiAocGFkZHIpCisJCTogIjAiICh2YWRkciksICJpIiAobTY4a19maXh1cF9tZW1vZmZzZXQpKTsKKwlyZXR1cm4gcGFkZHI7Cit9CisjZGVmaW5lIF9fcGEodmFkZHIpCV9fX3BhKCh2b2lkICopKHZhZGRyKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX192YSh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCXZvaWQgKnZhZGRyOworCWFzbSAoCisJCSIxOglzdWJsICMwLCUwXG4iCisJCW02OGtfZml4dXAoJWMyLCAxYisyKQorCQk6ICI9ciIgKHZhZGRyKQorCQk6ICIwIiAocGFkZHIpLCAiaSIgKG02OGtfZml4dXBfbWVtb2Zmc2V0KSk7CisJcmV0dXJuIHZhZGRyOworfQogCiAjZWxzZQkvKiAhQ09ORklHX1NVTjMgKi8KIC8qIFRoaXMgI2RlZmluZSBpcyBhIGhvcnJpYmxlIGhhY2sgdG8gc3VwcHJlc3MgbG90cyBvZiB3YXJuaW5ncy4gLS1tICovCkBAIC0xNjEsMTEgKzE3OCw0NyBAQAogI2RlZmluZSB2aXJ0X3RvX3BmbihrYWRkcikJKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHBmbl90b192aXJ0KHBmbikJX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQogCi0jZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJKG1lbV9tYXAgKyAoKCh1bnNpZ25lZCBsb25nKShrYWRkciktUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpKQotI2RlZmluZSBwYWdlX3RvX3ZpcnQocGFnZSkJKCgoKHBhZ2UpIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkgKyBQQUdFX09GRlNFVCkKK2V4dGVybiBpbnQgbTY4a192aXJ0X3RvX25vZGVfc2hpZnQ7CiAKLSNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQl2aXJ0X3RvX3BhZ2UocGZuX3RvX3ZpcnQocGZuKSkKLSNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJdmlydF90b19wZm4ocGFnZV90b192aXJ0KHBhZ2UpKQorI2lmZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCisjZGVmaW5lIF9fdmlydF90b19ub2RlKGFkZHIpCSgmcGdfZGF0YV9tYXBbMF0pCisjZWxzZQorZXh0ZXJuIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdfZGF0YV90YWJsZVtdOworCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gaW50IF9fdmlydF90b19ub2RlX3NoaWZ0KHZvaWQpCit7CisJaW50IHNoaWZ0OworCisJYXNtICgKKwkJIjE6CW1vdmVxCSMwLCUwXG4iCisJCW02OGtfZml4dXAoJWMxLCAxYikKKwkJOiAiPWQiIChzaGlmdCkKKwkJOiAiaSIgKG02OGtfZml4dXBfdm5vZGVfc2hpZnQpKTsKKwlyZXR1cm4gc2hpZnQ7Cit9CisKKyNkZWZpbmUgX192aXJ0X3RvX25vZGUoYWRkcikJKHBnX2RhdGFfdGFibGVbKHVuc2lnbmVkIGxvbmcpKGFkZHIpID4+IF9fdmlydF90b19ub2RlX3NoaWZ0KCldKQorI2VuZGlmCisKKyNkZWZpbmUgdmlydF90b19wYWdlKGFkZHIpICh7CQkJCQkJXAorCXBmbl90b19wYWdlKHZpcnRfdG9fcGZuKGFkZHIpKTsJCQkJCVwKK30pCisjZGVmaW5lIHBhZ2VfdG9fdmlydChwYWdlKSAoewkJCQkJCVwKKwlwZm5fdG9fdmlydChwYWdlX3RvX3BmbihwYWdlKSk7CQkJCQlcCit9KQorCisjZGVmaW5lIHBmbl90b19wYWdlKHBmbikgKHsJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3BmbiA9IChwZm4pOwkJCQkJXAorCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CQkJCQlcCisJcGdkYXQgPSBfX3ZpcnRfdG9fbm9kZSgodW5zaWduZWQgbG9uZylwZm5fdG9fdmlydChfX3BmbikpOwlcCisJcGdkYXQtPm5vZGVfbWVtX21hcCArIChfX3BmbiAtIHBnZGF0LT5ub2RlX3N0YXJ0X3Bmbik7CQlcCit9KQorI2RlZmluZSBwYWdlX3RvX3BmbihfcGFnZSkgKHsJCQkJCQlcCisJc3RydWN0IHBhZ2UgKl9fcCA9IChfcGFnZSk7CQkJCQlcCisJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDsJCQkJCVwKKwlwZ2RhdCA9ICZwZ19kYXRhX21hcFtwYWdlX3RvX25pZChfX3ApXTsJCQkJXAorCSgoX19wKSAtIHBnZGF0LT5ub2RlX21lbV9tYXApICsgcGdkYXQtPm5vZGVfc3RhcnRfcGZuOwkJXAorfSkKIAogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCSgodm9pZCAqKShrYWRkcikgPj0gKHZvaWQgKilQQUdFX09GRlNFVCAmJiAodm9pZCAqKShrYWRkcikgPCBoaWdoX21lbW9yeSkKICNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCXZpcnRfYWRkcl92YWxpZChwZm5fdG9fdmlydChwZm4pKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BnYWxsb2MuaAppbmRleCBhOWNmYjRiLi40Y2IxYTU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3BnYWxsb2MuaApAQCAtOCwxMSArOCwxMiBAQAogI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgogCiAKLQogI2lmZGVmIENPTkZJR19TVU4zCiAjaW5jbHVkZSA8YXNtL3N1bjNfcGdhbGxvYy5oPgogI2Vsc2UKICNpbmNsdWRlIDxhc20vbW90b3JvbGFfcGdhbGxvYy5oPgogI2VuZGlmCiAKK2V4dGVybiB2b2lkIG02OGtfc2V0dXBfbm9kZShpbnQgbm9kZSk7CisKICNlbmRpZiAvKiBNNjhLX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BndGFibGUuaAppbmRleCBmM2FhMDUzLi43NzhhNGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3BndGFibGUuaApAQCAtMTA3LDIyICsxMDcsNyBAQAogLyogNjQtYml0IG1hY2hpbmVzLCBiZXdhcmUhICBTUkIuICovCiAjZGVmaW5lIFNJWkVPRl9QVFJfTE9HMgkJCSAgICAgICAyCiAKLS8qCi0gKiBDaGVjayBpZiB0aGUgYWRkci9sZW4gZ29lcyB1cCB0byB0aGUgZW5kIG9mIGEgcGh5c2ljYWwKLSAqIG1lbW9yeSBjaHVuay4gIFVzZWQgZm9yIERNQSBmdW5jdGlvbnMuCi0gKi8KLSNpZmRlZiBDT05GSUdfU0lOR0xFX01FTU9SWV9DSFVOSwotLyoKLSAqIEl0IG1ha2VzIG5vIHNlbnNlIHRvIGNvbnNpZGVyIHdoZXRoZXIgd2UgY3Jvc3MgYSBtZW1vcnkgYm91bmRhcnkgaWYKLSAqIHdlIHN1cHBvcnQganVzdCBvbmUgcGh5c2ljYWwgY2h1bmsgb2YgbWVtb3J5LgotICovCi1zdGF0aWMgaW5saW5lIGludCBtbV9lbmRfb2ZfY2h1bmsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuKQotewotCXJldHVybiAwOwotfQotI2Vsc2UKLWludCBtbV9lbmRfb2ZfY2h1bmsgKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxlbik7Ci0jZW5kaWYKKyNkZWZpbmUgbW1fZW5kX29mX2NodW5rKGFkZHIsIGxlbikJMAogCiBleHRlcm4gdm9pZCBrZXJuZWxfc2V0X2NhY2hlbW9kZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBjbW9kZSk7CiAKQEAgLTE0MywxMCArMTI4LDYgQEAKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKIAotI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQotI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCi0jZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCi0KIC8qIE1NVS1zcGVjaWZpYyBoZWFkZXJzICovCiAKICNpZmRlZiBDT05GSUdfU1VOMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wb2xsLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BvbGwuaAppbmRleCAwZmI4ODQzLi5mMDgwZmNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3BvbGwuaApAQCAtMSwyNCArMSw5IEBACiAjaWZuZGVmIF9fbTY4a19QT0xMX0gKICNkZWZpbmUgX19tNjhrX1BPTExfSAogCi0jZGVmaW5lIFBPTExJTgkJICAxCi0jZGVmaW5lIFBPTExQUkkJCSAgMgotI2RlZmluZSBQT0xMT1VUCQkgIDQKLSNkZWZpbmUgUE9MTEVSUgkJICA4Ci0jZGVmaW5lIFBPTExIVVAJCSAxNgotI2RlZmluZSBQT0xMTlZBTAkgMzIKLSNkZWZpbmUgUE9MTFJETk9STQkgNjQKICNkZWZpbmUgUE9MTFdSTk9STQlQT0xMT1VUCi0jZGVmaW5lIFBPTExSREJBTkQJMTI4CiAjZGVmaW5lIFBPTExXUkJBTkQJMjU2Ci0jZGVmaW5lIFBPTExNU0cJCTB4MDQwMAotI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAotI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCiAKLXN0cnVjdCBwb2xsZmQgewotCWludCBmZDsKLQlzaG9ydCBldmVudHM7Ci0Jc2hvcnQgcmV2ZW50czsKLX07CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9sbC5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2NhdHRlcmxpc3QuaCBiL2luY2x1ZGUvYXNtLW02OGsvc2NhdHRlcmxpc3QuaAppbmRleCA4ZTYxMjI2Li4yNDg4N2EyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3NjYXR0ZXJsaXN0LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zY2F0dGVybGlzdC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfTTY4S19TQ0FUVEVSTElTVF9ICiAjZGVmaW5lIF9NNjhLX1NDQVRURVJMSVNUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCBzY2F0dGVybGlzdCB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc3VuM19wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjNfcGd0YWJsZS5oCmluZGV4IDUxNTZhMjguLmI5ZTYyYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvc3VuM19wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zdW4zX3BndGFibGUuaApAQCAtMTMyLDggKzEzMiw4IEBACiAjZGVmaW5lIHBmbl9wdGUocGZuLCBwZ3Byb3QpIFwKICh7IHB0ZV90IF9fcHRlOyBwdGVfdmFsKF9fcHRlKSA9IHBmbiB8IHBncHJvdF92YWwocGdwcm90KTsgX19wdGU7IH0pCiAKLSNkZWZpbmUgcHRlX3BhZ2UocHRlKQkJKG1lbV9tYXArKChfX3B0ZV9wYWdlKHB0ZSkgLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkpCi0jZGVmaW5lIHBtZF9wYWdlKHBtZCkJCShtZW1fbWFwKygoX19wbWRfcGFnZShwbWQpIC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpKQorI2RlZmluZSBwdGVfcGFnZShwdGUpCQl2aXJ0X3RvX3BhZ2UoX19wdGVfcGFnZShwdGUpKQorI2RlZmluZSBwbWRfcGFnZShwbWQpCQl2aXJ0X3RvX3BhZ2UoX19wbWRfcGFnZShwbWQpKQogCiAKIHN0YXRpYyBpbmxpbmUgaW50IHBtZF9ub25lMiAocG1kX3QgKnBtZCkgeyByZXR1cm4gIXBtZF92YWwgKCpwbWQpOyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbTY4ay9zeXN0ZW0uaAppbmRleCAyNDNkZDEzLi4xOTg4NzhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3lzdGVtLmgKQEAgLTg4LDcgKzg4LDYgQEAKIAogCiAjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQotI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKIAogc3RydWN0IF9feGNoZ19kdW1teSB7IHVuc2lnbmVkIGxvbmcgYVsxMDBdOyB9OwogI2RlZmluZSBfX3hnKHgpICgodm9sYXRpbGUgc3RydWN0IF9feGNoZ19kdW1teSAqKSh4KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaAppbmRleCBjNGQ2MjJhLi5kNjM1YTM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90aHJlYWRfaW5mby5oCkBAIC0zNywxNyArMzcsMTcgQEAKICNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQogCiAjZGVmaW5lIHRhc2tfdGhyZWFkX2luZm8odHNrKQkoJih0c2spLT50aHJlYWQuaW5mbykKLSNkZWZpbmUgdGFza19zdGFja19wYWdlKHRzaykJKCh2b2lkICopKHRzayktPnRocmVhZF9pbmZvKQorI2RlZmluZSB0YXNrX3N0YWNrX3BhZ2UodHNrKQkoKHRzayktPnN0YWNrKQogI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkJdGFza190aHJlYWRfaW5mbyhjdXJyZW50KQogCiAjZGVmaW5lIF9fSEFWRV9USFJFQURfRlVOQ1RJT05TCiAKICNkZWZpbmUgc2V0dXBfdGhyZWFkX3N0YWNrKHAsIG9yZykgKHsJCQlcCi0JKihzdHJ1Y3QgdGFza19zdHJ1Y3QgKiopKHApLT50aHJlYWRfaW5mbyA9IChwKTsJXAorCSooc3RydWN0IHRhc2tfc3RydWN0ICoqKShwKS0+c3RhY2sgPSAocCk7CVwKIAl0YXNrX3RocmVhZF9pbmZvKHApLT50YXNrID0gKHApOwkJXAogfSkKIAotI2RlZmluZSBlbmRfb2Zfc3RhY2socCkgKCh1bnNpZ25lZCBsb25nICopKHApLT50aHJlYWRfaW5mbyArIDEpCisjZGVmaW5lIGVuZF9vZl9zdGFjayhwKSAoKHVuc2lnbmVkIGxvbmcgKikocCktPnN0YWNrICsgMSkKIAogLyogZW50cnkuUyByZWxpZXMgb24gdGhlc2UgZGVmaW5pdGlvbnMhCiAgKiBiaXRzIDAtNyBhcmUgdGVzdGVkIGF0IGV2ZXJ5IGV4Y2VwdGlvbiBleGl0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLW02OGsvdWFjY2Vzcy5oCmluZGV4IDZhNGNmMjAuLjVjMTI2NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdWFjY2Vzcy5oCkBAIC0zNjEsNyArMzYxLDkgQEAKIAogbG9uZyBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpOwogbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBuKTsKLXVuc2lnbmVkIGxvbmcgY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbik7Cit1bnNpZ25lZCBsb25nIF9fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbik7CisKKyNkZWZpbmUgY2xlYXJfdXNlcglfX2NsZWFyX3VzZXIKIAogI2RlZmluZSBzdHJsZW5fdXNlcihzdHIpIHN0cm5sZW5fdXNlcihzdHIsIDMyNzY3KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3ZpcnRjb252ZXJ0LmggYi9pbmNsdWRlL2FzbS1tNjhrL3ZpcnRjb252ZXJ0LmgKaW5kZXggODNhODdjOS4uZGVhMzJmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay92aXJ0Y29udmVydC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdmlydGNvbnZlcnQuaApAQCAtOCw1NiArOCwzNSBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotI2lmZGVmIENPTkZJR19BTUlHQQotI2luY2x1ZGUgPGFzbS9hbWlnYWh3Lmg+Ci0jZW5kaWYKLQogLyoKICAqIENoYW5nZSB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHZ2LgogICovCi0jaWZuZGVmIENPTkZJR19TVU4zCi1leHRlcm4gdW5zaWduZWQgbG9uZyBtbV92dG9wKHVuc2lnbmVkIGxvbmcgYWRkcikgX19hdHRyaWJ1dGVfY29uc3RfXzsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1tX3B0b3YodW5zaWduZWQgbG9uZyBhZGRyKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbV92dG9wKHVuc2lnbmVkIGxvbmcgdmFkZHIpCi17Ci0JcmV0dXJuIF9fcGEodmFkZHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fcHRvdih1bnNpZ25lZCBsb25nIHBhZGRyKQotewotCXJldHVybiAodW5zaWduZWQgbG9uZylfX3ZhKHBhZGRyKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NJTkdMRV9NRU1PUllfQ0hVTksKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9pZCAqdmFkZHIpCi17Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKXZhZGRyIC0gUEFHRV9PRkZTRVQgKyBtNjhrX21lbW9yeVswXS5hZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKiBwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBwYWRkcikKLXsKLQlyZXR1cm4gKHZvaWQgKikocGFkZHIgLSBtNjhrX21lbW9yeVswXS5hZGRyICsgUEFHRV9PRkZTRVQpOwotfQotI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9pZCAqYWRkcmVzcykKIHsKLQlyZXR1cm4gbW1fdnRvcCgodW5zaWduZWQgbG9uZylhZGRyZXNzKTsKKwlyZXR1cm4gX19wYShhZGRyZXNzKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXJldHVybiAodm9pZCAqKSBtbV9wdG92KGFkZHJlc3MpOworCXJldHVybiBfX3ZhKGFkZHJlc3MpOwogfQotI2VuZGlmCiAKIC8qIFBlcm1hbmVudCBhZGRyZXNzIG9mIGEgcGFnZS4gKi8KLSNkZWZpbmUgX19wYWdlX2FkZHJlc3MocGFnZSkJKFBBR0VfT0ZGU0VUICsgKCgocGFnZSkgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKSkKLSNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCXZpcnRfdG9fcGh5cygodm9pZCAqKV9fcGFnZV9hZGRyZXNzKHBhZ2UpKQorI2lmZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSBcCisJX19wYShQQUdFX09GRlNFVCArICgoKHBhZ2UpIC0gcGdfZGF0YV9tYXBbMF0ubm9kZV9tZW1fbWFwKSA8PCBQQUdFX1NISUZUKSkKKyNlbHNlCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhfcGFnZSkgKHsJCQkJCQlcCisJc3RydWN0IHBhZ2UgKl9fcGFnZSA9IF9wYWdlOwkJCQkJXAorCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CQkJCQlcCisJcGdkYXQgPSBwZ19kYXRhX3RhYmxlW3BhZ2VfdG9fbmlkKF9fcGFnZSldOwkJCVwKKwlwYWdlX3RvX3BmbihfX3BhZ2UpIDw8IFBBR0VfU0hJRlQ7CQkJCVwKK30pCisjZW5kaWYKIAogLyoKICAqIElPIGJ1cyBtZW1vcnkgYWRkcmVzc2VzIGFyZSAxOjEgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9hdG9taWMuaAppbmRleCA2YzRlNGI2Li5kNTYzMmEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2F0b21pYy5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX0FSQ0hfTTY4S05PTU1VX0FUT01JQ19fCiAjZGVmaW5lIF9fQVJDSF9NNjhLTk9NTVVfQVRPTUlDX18KIAotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4JLyogbG9jYWxfaXJxX1hYWCgpICovCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAvKgogICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKQEAgLTEzMSwxNCArMTMxLDIxIEBACiAjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pICgoaW50KWNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAobyksIChuKSkpCiAjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQogCi0jZGVmaW5lIGF0b21pY19hZGRfdW5sZXNzKHYsIGEsIHUpCQkJCVwKLSh7CQkJCQkJCQlcCi0JaW50IGMsIG9sZDsJCQkJCQlcCi0JYyA9IGF0b21pY19yZWFkKHYpOwkJCQkJXAotCXdoaWxlIChjICE9ICh1KSAmJiAob2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKSkgIT0gYykgXAotCQljID0gb2xkOwkJCQkJXAotCWMgIT0gKHUpOwkJCQkJCVwKLX0pCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3sKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQorCiAjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCiAjZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpIGF0b21pY19zdWJfcmV0dXJuKDEsKHYpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2tkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlY2UxYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUva2RlYnVnLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2tkZWJ1Zy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wZ3RhYmxlLmgKaW5kZXggNTQ5YWQyMy4uOWRmYmJjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGd0YWJsZS5oCkBAIC01OSwxMCArNTksNiBAQAogI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQkJXAogCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQogCi0jZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCi0jZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKLSNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKLQogLyoKICAqIEFsbCAzMmJpdCBhZGRyZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IHZhbGlkIGZvciB2bWFsbG9jLi4uCiAgKiBTb3J0IG9mIG1lYW5pbmdsZXNzIGZvciBub24tVk0gdGFyZ2V0cy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zeXN0ZW0uaAppbmRleCAyYTgxNDQ5Li41ZTVlZDE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3N5c3RlbS5oCkBAIC0xMjAsNyArMTIwLDYgQEAKICNlbmRpZgogCiAjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQotI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKIAogc3RydWN0IF9feGNoZ19kdW1teSB7IHVuc2lnbmVkIGxvbmcgYVsxMDBdOyB9OwogI2RlZmluZSBfX3hnKHgpICgodm9sYXRpbGUgc3RydWN0IF9feGNoZ19kdW1teSAqKSh4KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1taXBzL2F0b21pYy5oCmluZGV4IDFhYzUwYjYuLjFiNjA2MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hdG9taWMuaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPGFzbS93YXIuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKIHR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CiAKQEAgLTMwNiw4ICszMDcsOCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLSNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgbywgbikgKChpbnQpY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKLSNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQorI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG5ldykpKQogCiAvKioKICAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKQEAgLTMxOCwxNCArMzE5LDIwIEBACiAgKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KICAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgogICovCi0jZGVmaW5lIGF0b21pY19hZGRfdW5sZXNzKHYsIGEsIHUpCQkJCVwKLSh7CQkJCQkJCQlcCi0JaW50IGMsIG9sZDsJCQkJCQlcCi0JYyA9IGF0b21pY19yZWFkKHYpOwkJCQkJXAotCXdoaWxlIChjICE9ICh1KSAmJiAob2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKSkgIT0gYykgXAotCQljID0gb2xkOwkJCQkJXAotCWMgIT0gKHUpOwkJCQkJCVwKLX0pCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3sKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQogI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKIAogI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSBhdG9taWNfc3ViX3JldHVybigxLCh2KSkKQEAgLTY4MSw2ICs2ODgsMzYgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCisjZGVmaW5lIGF0b21pYzY0X2NtcHhjaGcodiwgbywgbikgXAorCSgoX190eXBlb2ZfXygodiktPmNvdW50ZXIpKWNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAobyksIChuKSkpCisjZGVmaW5lIGF0b21pYzY0X3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIChuZXcpKSkKKworLyoqCisgKiBhdG9taWM2NF9hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KKyAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgorICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWM2NF9hZGRfdW5sZXNzKGF0b21pYzY0X3QgKnYsIGxvbmcgYSwgbG9uZyB1KQoreworCWxvbmcgYywgb2xkOworCWMgPSBhdG9taWM2NF9yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWM2NF9jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7CisJCWlmIChsaWtlbHkob2xkID09IGMpKQorCQkJYnJlYWs7CisJCWMgPSBvbGQ7CisJfQorCXJldHVybiBjICE9ICh1KTsKK30KKworI2RlZmluZSBhdG9taWM2NF9pbmNfbm90X3plcm8odikgYXRvbWljNjRfYWRkX3VubGVzcygodiksIDEsIDApCisKICNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KSBhdG9taWM2NF9zdWJfcmV0dXJuKDEsKHYpKQogI2RlZmluZSBhdG9taWM2NF9pbmNfcmV0dXJuKHYpIGF0b21pYzY0X2FkZF9yZXR1cm4oMSwodikpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYm9vdGluZm8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvYm9vdGluZm8uaAppbmRleCBjN2M5NDViLi5iMGMzMjk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2Jvb3RpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9ib290aW5mby5oCkBAIC0xMTksOSArMTE5LDkgQEAKICAqLwogI2RlZmluZSBNQUNIX0dST1VQX01PTUVOQ08JMTIJLyogTW9tZW50dW0gQm9hcmRzCQkqLwogI2RlZmluZSAgTUFDSF9NT01FTkNPX09DRUxPVAkwCi0jZGVmaW5lICBNQUNIX01PTUVOQ09fT0NFTE9UX0cJMQorI2RlZmluZSAgTUFDSF9NT01FTkNPX09DRUxPVF9HCTEJLyogbm8gbW9yZSBzdXBwb3J0ZWQgKG1heSAyMDA3KSAqLwogI2RlZmluZSAgTUFDSF9NT01FTkNPX09DRUxPVF9DCTIKLSNkZWZpbmUgIE1BQ0hfTU9NRU5DT19KQUdVQVJfQVRYIDMKKyNkZWZpbmUgIE1BQ0hfTU9NRU5DT19KQUdVQVJfQVRYIDMJLyogbm8gbW9yZSBzdXBwb3J0ZWQgKG1heSAyMDA3KSAqLwogI2RlZmluZSAgTUFDSF9NT01FTkNPX09DRUxPVF8zCTQKIAogLyoKQEAgLTI1NCw3ICsyNTQsNyBAQAogZXh0ZXJuIGNoYXIgYXJjc19jbWRsaW5lW0NMX1NJWkVdOwogCiAvKgotICogUmVnaXN0ZXJzIGEwLCBhMSwgYTMgYW5kIGE0IGFzIHBhc3NlZCB0byB0aGUga2VucmVsIGVudHJ5IGJ5IGZpcm13YXJlCisgKiBSZWdpc3RlcnMgYTAsIGExLCBhMyBhbmQgYTQgYXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgZW50cnkgYnkgZmlybXdhcmUKICAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZndfYXJnMCwgZndfYXJnMSwgZndfYXJnMiwgZndfYXJnMzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9mcHUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmgKaW5kZXggYjQxNGE3ZC4uNDgzNjg1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9mcHUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9jcHUtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxhc20vaGF6YXJkcy5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KQEAgLTM4LDM0ICszOSwxNiBAQAogZXh0ZXJuIHZvaWQgX3NhdmVfZnAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgX3Jlc3RvcmVfZnAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NCMSkKLSNkZWZpbmUgX19lbmFibGVfZnB1X2hhemFyZCgpCQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlhc20oIi5zZXQJcHVzaAkJXG5cdCIJCQkJXAotCSAgICAiLnNldAltaXBzNjQJCVxuXHQiCQkJCVwKLQkgICAgIi5zZXQJbm9yZW9yZGVyCVxuXHQiCQkJCVwKLQkgICAgInNzbm9wCQkJXG5cdCIJCQkJXAotCSAgICAiYm5lemwJJDAsIC4rNAkJXG5cdCIJCQkJXAotCSAgICAic3Nub3AJCQlcblx0IgkJCQlcCi0JICAgICIuc2V0IHBvcCIpOwkJCQkJCVwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBfX2VuYWJsZV9mcHVfaGF6YXJkKCkJCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCWFzbSgibm9wO25vcDtub3A7bm9wIik7CQkvKiBtYXguIGhhemFyZCAqLwkJXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCiAjZGVmaW5lIF9fZW5hYmxlX2ZwdSgpCQkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAgICAgICAgIHNldF9jMF9zdGF0dXMoU1QwX0NVMSk7CQkJCQkJXAotICAgICAgICBfX2VuYWJsZV9mcHVfaGF6YXJkKCk7CQkJCQkJXAorICAgICAgICBlbmFibGVfZnB1X2hhemFyZCgpOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgX19kaXNhYmxlX2ZwdSgpCQkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJY2xlYXJfYzBfc3RhdHVzKFNUMF9DVTEpOwkJCQkJXAotCS8qIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGMwIGhhemFyZCBoZXJlICAqLwkJCVwKKyAgICAgICAgZGlzYWJsZV9mcHVfaGF6YXJkKCk7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBlbmFibGVfZnB1KCkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmggYi9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaAppbmRleCBlNTBjNzdlLi5kOTExOWY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaApAQCAtMTc4LDQgKzE3OCwzNiBAQAogCiAjZW5kaWYKIAorCisvKiBGUFUgaGF6YXJkcyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NCMSkKK0FTTU1BQ1JPKGVuYWJsZV9mcHVfaGF6YXJkLAorCSAuc2V0CXB1c2g7CisJIC5zZXQJbWlwczY0OworCSAuc2V0CW5vcmVvcmRlcjsKKwkgX3Nzbm9wOworCSBibmV6bAkkMCwuKzQ7CisJIF9zc25vcDsKKwkgLnNldAlwb3AKKykKK0FTTU1BQ1JPKGRpc2FibGVfZnB1X2hhemFyZCwKKykKKworI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFNSMikKK0FTTU1BQ1JPKGVuYWJsZV9mcHVfaGF6YXJkLAorCSBfZWhiCispCitBU01NQUNSTyhkaXNhYmxlX2ZwdV9oYXphcmQsCisJIF9laGIKKykKKyNlbHNlCitBU01NQUNSTyhlbmFibGVfZnB1X2hhemFyZCwKKwkgbm9wOyBub3A7IG5vcDsgbm9wCispCitBU01NQUNSTyhkaXNhYmxlX2ZwdV9oYXphcmQsCisJIF9laGIKKykKKyNlbmRpZgorCiAjZW5kaWYgLyogX0FTTV9IQVpBUkRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaGlnaG1lbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9oaWdobWVtLmgKaW5kZXggZjhjODE4Mi4uNGQ2YmQ1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9oaWdobWVtLmgKQEAgLTQ4LDQ2ICs0OCw2IEBACiBleHRlcm4gdm9pZCAqIGttYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCBrdW5tYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKLS8qCi0gKiBDT05GSUdfTElNSVRFRF9ETUEgaXMgZm9yIHN5c3RlbXMgd2l0aCBETUEgbGltaXRhdGlvbnMgc3VjaCBhcyBNb21lbnR1bSdzCi0gKiBKYWd1YXIgQVRYLiAgVGhpcyBvcHRpb24gZXhwbG9pdHMgdGhlIGhpZ2htZW0gY29kZSBpbiB0aGUga2VybmVsIHNvIGlzCi0gKiBhbHdheXMgZW5hYmxlZCB0b2dldGhlciB3aXRoIENPTkZJR19ISUdITUVNIGJ1dCBhdCB0aGlzIHRpbWUgZG9lc24ndAotICogYWN0dWFsbHkgYWRkIGhpZ2htZW0gZnVuY3Rpb25hbGl0eS4KLSAqLwotCi0jaWZkZWYgQ09ORklHX0xJTUlURURfRE1BCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmF1bHQgZnVuY3Rpb25zIGZvciB0aGUgbm8taGlnaG1lbSBjYXNlIGZyb20KLSAqIDxsaW51eC9oaWdobWVtLmg+Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQltaWdodF9zbGVlcCgpOwotCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7Ci19Ci0KLSNkZWZpbmUga3VubWFwKHBhZ2UpIGRvIHsgKHZvaWQpIChwYWdlKTsgfSB3aGlsZSAoMCkKLQotc3RhdGljIGlubGluZSB2b2lkICprbWFwX2F0b21pYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpCi17Ci0JcGFnZWZhdWx0X2Rpc2FibGUoKTsKLQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQga3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKQotewotCXBhZ2VmYXVsdF9lbmFibGUoKTsKLX0KLQotI2RlZmluZSBrbWFwX2F0b21pY19wZm4ocGZuLCBpZHgpIGttYXBfYXRvbWljKHBmbl90b19wYWdlKHBmbiksIChpZHgpKQotCi0jZGVmaW5lIGttYXBfYXRvbWljX3RvX3BhZ2UocHRyKSB2aXJ0X3RvX3BhZ2UocHRyKQotCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2ttYXBzKCkJZG8geyB9IHdoaWxlICgwKQotCi0jZWxzZSAvKiBMSU1JVEVEX0RNQSAqLwotCiBleHRlcm4gdm9pZCAqX19rbWFwKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIF9fa3VubWFwKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkICpfX2ttYXBfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSk7CkBAIC0xMDMsOCArNjMsNiBAQAogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2ttYXBzKCkJZmx1c2hfY2FjaGVfYWxsKCkKIAotI2VuZGlmIC8qIExJTUlURURfRE1BICovCi0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfQVNNX0hJR0hNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLW1pcHMva2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjZTFiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMva2RlYnVnLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2tkZWJ1Zy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9rZXhlYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9rZXhlYy5oCmluZGV4IGIyNTI2N2UuLmNkYmFiNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMva2V4ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2tleGVjLmgKQEAgLTIxLDggKzIxLDYgQEAKIC8qIFRoZSBuYXRpdmUgYXJjaGl0ZWN0dXJlICovCiAjZGVmaW5lIEtFWEVDX0FSQ0ggS0VYRUNfQVJDSF9NSVBTCiAKLSNkZWZpbmUgTUFYX05PVEVfQllURVMgMTAyNAotCiBzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfc2V0dXBfcmVncyhzdHJ1Y3QgcHRfcmVncyAqbmV3cmVncywKIAkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKm9sZHJlZ3MpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1taXBzL2xvY2FsLmgKaW5kZXggOWUyZDQzYi4uZWQ4ODJjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9sb2NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbG9jYWwuaApAQCAtMSw2MCArMSwyODggQEAKLSNpZm5kZWYgX0FTTV9MT0NBTF9ICi0jZGVmaW5lIF9BU01fTE9DQUxfSAorI2lmbmRlZiBfQVJDSF9NSVBTX0xPQ0FMX0gKKyNkZWZpbmUgX0FSQ0hfTUlQU19MT0NBTF9ICiAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3dhci5oPgogCi0jaWZkZWYgQ09ORklHXzMyQklUCit0eXBlZGVmIHN0cnVjdAoreworCWF0b21pY19sb25nX3QgYTsKK30gbG9jYWxfdDsKIAotdHlwZWRlZiBhdG9taWNfdCBsb2NhbF90OworI2RlZmluZSBMT0NBTF9JTklUKGkpCXsgQVRPTUlDX0xPTkdfSU5JVChpKSB9CiAKLSNkZWZpbmUgTE9DQUxfSU5JVChpKQlBVE9NSUNfSU5JVChpKQotI2RlZmluZSBsb2NhbF9yZWFkKHYpCWF0b21pY19yZWFkKHYpCi0jZGVmaW5lIGxvY2FsX3NldCh2LGkpCWF0b21pY19zZXQodixpKQorI2RlZmluZSBsb2NhbF9yZWFkKGwpCWF0b21pY19sb25nX3JlYWQoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWxfc2V0KGwsaSkJYXRvbWljX2xvbmdfc2V0KCYobCktPmEsIChpKSkKIAotI2RlZmluZSBsb2NhbF9pbmModikJYXRvbWljX2luYyh2KQotI2RlZmluZSBsb2NhbF9kZWModikJYXRvbWljX2RlYyh2KQotI2RlZmluZSBsb2NhbF9hZGQoaSwgdikJYXRvbWljX2FkZChpLCB2KQotI2RlZmluZSBsb2NhbF9zdWIoaSwgdikJYXRvbWljX3N1YihpLCB2KQotCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR182NEJJVAotCi10eXBlZGVmIGF0b21pYzY0X3QgbG9jYWxfdDsKLQotI2RlZmluZSBMT0NBTF9JTklUKGkpCUFUT01JQzY0X0lOSVQoaSkKLSNkZWZpbmUgbG9jYWxfcmVhZCh2KQlhdG9taWM2NF9yZWFkKHYpCi0jZGVmaW5lIGxvY2FsX3NldCh2LGkpCWF0b21pYzY0X3NldCh2LGkpCi0KLSNkZWZpbmUgbG9jYWxfaW5jKHYpCWF0b21pYzY0X2luYyh2KQotI2RlZmluZSBsb2NhbF9kZWModikJYXRvbWljNjRfZGVjKHYpCi0jZGVmaW5lIGxvY2FsX2FkZChpLCB2KQlhdG9taWM2NF9hZGQoaSwgdikKLSNkZWZpbmUgbG9jYWxfc3ViKGksIHYpCWF0b21pYzY0X3N1YihpLCB2KQotCi0jZW5kaWYKLQotI2RlZmluZSBfX2xvY2FsX2luYyh2KQkJKCh2KS0+Y291bnRlcisrKQotI2RlZmluZSBfX2xvY2FsX2RlYyh2KQkJKCh2KS0+Y291bnRlci0tKQotI2RlZmluZSBfX2xvY2FsX2FkZChpLHYpCSgodiktPmNvdW50ZXIrPShpKSkKLSNkZWZpbmUgX19sb2NhbF9zdWIoaSx2KQkoKHYpLT5jb3VudGVyLT0oaSkpCisjZGVmaW5lIGxvY2FsX2FkZChpLGwpCWF0b21pY19sb25nX2FkZCgoaSksKCYobCktPmEpKQorI2RlZmluZSBsb2NhbF9zdWIoaSxsKQlhdG9taWNfbG9uZ19zdWIoKGkpLCgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWxfaW5jKGwpCWF0b21pY19sb25nX2luYygmKGwpLT5hKQorI2RlZmluZSBsb2NhbF9kZWMobCkJYXRvbWljX2xvbmdfZGVjKCYobCktPmEpCiAKIC8qCi0gKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKKyAqIFNhbWUgYXMgYWJvdmUsIGJ1dCByZXR1cm4gdGhlIHJlc3VsdCB2YWx1ZQorICovCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvY2FsX2FkZF9yZXR1cm4obG9uZyBpLCBsb2NhbF90ICogbCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKworCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6IglfX0xMCSIlMSwgJTIJCSMgbG9jYWxfYWRkX3JldHVybglcbiIKKwkJIglhZGR1CSUwLCAlMSwgJTMJCQkJXG4iCisJCQlfX1NDCSIlMCwgJTIJCQkJCVxuIgorCQkiCWJlcXpsCSUwLCAxYgkJCQkJXG4iCisJCSIJYWRkdQklMCwgJTEsICUzCQkJCVxuIgorCQkiCS5zZXQJbWlwczAJCQkJCVxuIgorCQk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodGVtcCksICI9bSIgKGwtPmEuY291bnRlcikKKwkJOiAiSXIiIChpKSwgIm0iIChsLT5hLmNvdW50ZXIpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6IglfX0xMCSIlMSwgJTIJCSMgbG9jYWxfYWRkX3JldHVybglcbiIKKwkJIglhZGR1CSUwLCAlMSwgJTMJCQkJXG4iCisJCQlfX1NDCSIlMCwgJTIJCQkJCVxuIgorCQkiCWJlcXoJJTAsIDFiCQkJCQlcbiIKKwkJIglhZGR1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCQkJXG4iCisJCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0ZW1wKSwgIj1tIiAobC0+YS5jb3VudGVyKQorCQk6ICJJciIgKGkpLCAibSIgKGwtPmEuY291bnRlcikKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXJlc3VsdCA9IGwtPmEuY291bnRlcjsKKwkJcmVzdWx0ICs9IGk7CisJCWwtPmEuY291bnRlciA9IHJlc3VsdDsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9jYWxfc3ViX3JldHVybihsb25nIGksIGxvY2FsX3QgKiBsKQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCisJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJbWlwczMJCQkJCVxuIgorCQkiMToiCV9fTEwJIiUxLCAlMgkJIyBsb2NhbF9zdWJfcmV0dXJuCVxuIgorCQkiCXN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJCV9fU0MJIiUwLCAlMgkJCQkJXG4iCisJCSIJYmVxemwJJTAsIDFiCQkJCQlcbiIKKwkJIglzdWJ1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCQkJXG4iCisJCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0ZW1wKSwgIj1tIiAobC0+YS5jb3VudGVyKQorCQk6ICJJciIgKGkpLCAibSIgKGwtPmEuY291bnRlcikKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlIGlmIChjcHVfaGFzX2xsc2MpIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJbWlwczMJCQkJCVxuIgorCQkiMToiCV9fTEwJIiUxLCAlMgkJIyBsb2NhbF9zdWJfcmV0dXJuCVxuIgorCQkiCXN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJCV9fU0MJIiUwLCAlMgkJCQkJXG4iCisJCSIJYmVxegklMCwgMWIJCQkJCVxuIgorCQkiCXN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIgkuc2V0CW1pcHMwCQkJCQlcbiIKKwkJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRlbXApLCAiPW0iIChsLT5hLmNvdW50ZXIpCisJCTogIklyIiAoaSksICJtIiAobC0+YS5jb3VudGVyKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJcmVzdWx0ID0gbC0+YS5jb3VudGVyOworCQlyZXN1bHQgLT0gaTsKKwkJbC0+YS5jb3VudGVyID0gcmVzdWx0OworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGxvY2FsX3N1Yl9pZl9wb3NpdGl2ZSAtIGNvbmRpdGlvbmFsbHkgc3VidHJhY3QgaW50ZWdlciBmcm9tIGF0b21pYyB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEBsOiBwb2ludGVyIG9mIHR5cGUgbG9jYWxfdAorICoKKyAqIEF0b21pY2FsbHkgdGVzdCBAbCBhbmQgc3VidHJhY3QgQGkgaWYgQGwgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIEBpLgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9sZCB2YWx1ZSBvZiBAbCBtaW51cyBAaS4KKyAqLworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb2NhbF9zdWJfaWZfcG9zaXRpdmUobG9uZyBpLCBsb2NhbF90ICogbCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKworCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6IglfX0xMCSIlMSwgJTIJCSMgbG9jYWxfc3ViX2lmX3Bvc2l0aXZlXG4iCisJCSIJZHN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglibHR6CSUwLCAxZgkJCQkJXG4iCisJCQlfX1NDCSIlMCwgJTIJCQkJCVxuIgorCQkiCS5zZXQJbm9yZW9yZGVyCQkJCVxuIgorCQkiCWJlcXpsCSUwLCAxYgkJCQkJXG4iCisJCSIJIGRzdWJ1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKKwkJIjE6CQkJCQkJCVxuIgorCQkiCS5zZXQJbWlwczAJCQkJCVxuIgorCQk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodGVtcCksICI9bSIgKGwtPmEuY291bnRlcikKKwkJOiAiSXIiIChpKSwgIm0iIChsLT5hLmNvdW50ZXIpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6IglfX0xMCSIlMSwgJTIJCSMgbG9jYWxfc3ViX2lmX3Bvc2l0aXZlXG4iCisJCSIJZHN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIglibHR6CSUwLCAxZgkJCQkJXG4iCisJCQlfX1NDCSIlMCwgJTIJCQkJCVxuIgorCQkiCS5zZXQJbm9yZW9yZGVyCQkJCVxuIgorCQkiCWJlcXoJJTAsIDFiCQkJCQlcbiIKKwkJIgkgZHN1YnUJJTAsICUxLCAlMwkJCQlcbiIKKwkJIgkuc2V0CXJlb3JkZXIJCQkJCVxuIgorCQkiMToJCQkJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCQkJXG4iCisJCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0ZW1wKSwgIj1tIiAobC0+YS5jb3VudGVyKQorCQk6ICJJciIgKGkpLCAibSIgKGwtPmEuY291bnRlcikKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXJlc3VsdCA9IGwtPmEuY291bnRlcjsKKwkJcmVzdWx0IC09IGk7CisJCWlmIChyZXN1bHQgPj0gMCkKKwkJCWwtPmEuY291bnRlciA9IHJlc3VsdDsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgbG9jYWxfY21weGNoZyhsLCBvLCBuKSBcCisJKChsb25nKWNtcHhjaGdfbG9jYWwoJigobCktPmEuY291bnRlciksIChvKSwgKG4pKSkKKyNkZWZpbmUgbG9jYWxfeGNoZyhsLCBuKSAoeGNoZ19sb2NhbCgmKChsKS0+YS5jb3VudGVyKSwobikpKQorCisvKioKKyAqIGxvY2FsX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQorICogQGw6IHBvaW50ZXIgb2YgdHlwZSBsb2NhbF90CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gbC4uLgorICogQHU6IC4uLnVubGVzcyBsIGlzIGVxdWFsIHRvIHUuCisgKgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEBsLCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEBsIHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworI2RlZmluZSBsb2NhbF9hZGRfdW5sZXNzKGwsIGEsIHUpCQkJCVwKKyh7CQkJCQkJCQlcCisJbG9uZyBjLCBvbGQ7CQkJCQkJXAorCWMgPSBsb2NhbF9yZWFkKGwpOwkJCQkJXAorCXdoaWxlIChjICE9ICh1KSAmJiAob2xkID0gbG9jYWxfY21weGNoZygobCksIGMsIGMgKyAoYSkpKSAhPSBjKSBcCisJCWMgPSBvbGQ7CQkJCQlcCisJYyAhPSAodSk7CQkJCQkJXAorfSkKKyNkZWZpbmUgbG9jYWxfaW5jX25vdF96ZXJvKGwpIGxvY2FsX2FkZF91bmxlc3MoKGwpLCAxLCAwKQorCisjZGVmaW5lIGxvY2FsX2RlY19yZXR1cm4obCkgbG9jYWxfc3ViX3JldHVybigxLChsKSkKKyNkZWZpbmUgbG9jYWxfaW5jX3JldHVybihsKSBsb2NhbF9hZGRfcmV0dXJuKDEsKGwpKQorCisvKgorICogbG9jYWxfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAbDogcG9pbnRlciBvZiB0eXBlIGxvY2FsX3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEBsIGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgbG9jYWxfc3ViX2FuZF90ZXN0KGksbCkgKGxvY2FsX3N1Yl9yZXR1cm4oKGkpLCAobCkpID09IDApCisKKy8qCisgKiBsb2NhbF9pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEBsOiBwb2ludGVyIG9mIHR5cGUgbG9jYWxfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAbCBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgbG9jYWxfaW5jX2FuZF90ZXN0KGwpIChsb2NhbF9pbmNfcmV0dXJuKGwpID09IDApCisKKy8qCisgKiBsb2NhbF9kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYnkgMSBhbmQgdGVzdAorICogQGw6IHBvaW50ZXIgb2YgdHlwZSBsb2NhbF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEBsIGJ5IDEgYW5kCisgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCisgKiBjYXNlcy4KKyAqLworI2RlZmluZSBsb2NhbF9kZWNfYW5kX3Rlc3QobCkgKGxvY2FsX3N1Yl9yZXR1cm4oMSwgKGwpKSA9PSAwKQorCisvKgorICogbG9jYWxfZGVjX2lmX3Bvc2l0aXZlIC0gZGVjcmVtZW50IGJ5IDEgaWYgb2xkIHZhbHVlIHBvc2l0aXZlCisgKiBAbDogcG9pbnRlciBvZiB0eXBlIGxvY2FsX3QKKyAqLworI2RlZmluZSBsb2NhbF9kZWNfaWZfcG9zaXRpdmUobCkJbG9jYWxfc3ViX2lmX3Bvc2l0aXZlKDEsIGwpCisKKy8qCisgKiBsb2NhbF9hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKKyAqIEBsOiBwb2ludGVyIG9mIHR5cGUgbG9jYWxfdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEBsIGFuZCByZXR1cm5zIHRydWUKKyAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KKyAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLworI2RlZmluZSBsb2NhbF9hZGRfbmVnYXRpdmUoaSxsKSAobG9jYWxfYWRkX3JldHVybihpLCAobCkpIDwgMCkKKworLyogVXNlIHRoZXNlIGZvciBwZXItY3B1IGxvY2FsX3QgdmFyaWFibGVzOiBvbiBzb21lIGFyY2hzIHRoZXkgYXJlCiAgKiBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlc2UgbmFpdmUgaW1wbGVtZW50YXRpb25zLiAgTm90ZSB0aGV5IHRha2UKICAqIGEgdmFyaWFibGUsIG5vdCBhbiBhZGRyZXNzLgogICovCi0jZGVmaW5lIGNwdV9sb2NhbF9yZWFkKHYpCWxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9zZXQodiwgaSkJbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKHYpLCAoaSkpCiAKLSNkZWZpbmUgY3B1X2xvY2FsX2luYyh2KQlsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9kZWModikJbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIHYpCWxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIHYpCWxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2xvY2FsX2luYyhsKQkJKChsKS0+YS5jb3VudGVyKyspCisjZGVmaW5lIF9fbG9jYWxfZGVjKGwpCQkoKGwpLT5hLmNvdW50ZXIrKykKKyNkZWZpbmUgX19sb2NhbF9hZGQoaSxsKQkoKGwpLT5hLmNvdW50ZXIrPShpKSkKKyNkZWZpbmUgX19sb2NhbF9zdWIoaSxsKQkoKGwpLT5hLmNvdW50ZXItPShpKSkKIAotI2RlZmluZSBfX2NwdV9sb2NhbF9pbmModikJX19sb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyh2KQlfX2xvY2FsX2RlYygmX19nZXRfY3B1X3Zhcih2KSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIHYpCV9fbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCB2KQlfX2xvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQorLyogTmVlZCB0byBkaXNhYmxlIHByZWVtcHRpb24gZm9yIHRoZSBjcHUgbG9jYWwgY291bnRlcnMgb3RoZXJ3aXNlIHdlIGNvdWxkCisgICBzdGlsbCBhY2Nlc3MgYSB2YXJpYWJsZSBvZiBhIHByZXZpb3VzIENQVSBpbiBhIG5vbiBhdG9taWMgd2F5LiAqLworI2RlZmluZSBjcHVfbG9jYWxfd3JhcF92KGwpCSAJXAorCSh7IGxvY2FsX3QgcmVzX187CQlcCisJICAgcHJlZW1wdF9kaXNhYmxlKCk7IAkJXAorCSAgIHJlc19fID0gKGwpOwkJCVwKKwkgICBwcmVlbXB0X2VuYWJsZSgpOwkJXAorCSAgIHJlc19fOyB9KQorI2RlZmluZSBjcHVfbG9jYWxfd3JhcChsKQkJXAorCSh7IHByZWVtcHRfZGlzYWJsZSgpOwkJXAorCSAgIGw7CQkJCVwKKwkgICBwcmVlbXB0X2VuYWJsZSgpOyB9KQkJXAogCi0jZW5kaWYgLyogX0FTTV9MT0NBTF9IICovCisjZGVmaW5lIGNwdV9sb2NhbF9yZWFkKGwpICAgIGNwdV9sb2NhbF93cmFwX3YobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihsKSkpCisjZGVmaW5lIGNwdV9sb2NhbF9zZXQobCwgaSkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3NldCgmX19nZXRfY3B1X3ZhcihsKSwgKGkpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2luYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGwpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2RlYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKGwpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCBsKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpKQorI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCisKKyNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKGwpCWNwdV9sb2NhbF9pbmMobCkKKyNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKGwpCWNwdV9sb2NhbF9kZWMobCkKKyNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIGwpCWNwdV9sb2NhbF9hZGQoKGkpLCAobCkpCisjZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCBsKQljcHVfbG9jYWxfc3ViKChpKSwgKGwpKQorCisjZW5kaWYgLyogX0FSQ0hfTUlQU19MT0NBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTU1MF9zcGkuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxNTUwX3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZjA0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTU1MF9zcGkuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogYXUxNTUwX3NwaS5oIC0gYXUxNTUwIHBzYyBzcGkgY29udHJvbGxlciBkcml2ZXIgLSBwbGF0Zm9ybSBkYXRhIHN0cnVjdAorICovCisKKyNpZm5kZWYgX0FVMTU1MF9TUElfSF8KKyNkZWZpbmUgX0FVMTU1MF9TUElfSF8KKworc3RydWN0IGF1MTU1MF9zcGlfaW5mbyB7CisJczE2IGJ1c19udW07CQkvKiBkZWZpbmVzIHdoaWNoIFBTQyBhbmQgSVJRIHRvIHVzZSAqLworCXUzMiBtYWluY2xrX2h6OwkJLyogbWFpbiBpbnB1dCBjbG9jayBmcmVxdWVuY3kgb2YgUFNDICovCisJdTE2IG51bV9jaGlwc2VsZWN0OwkvKiBudW1iZXIgb2YgY2hpcHNlbGVjdHMgc3VwcG9ydGVkICovCisJdm9pZCAoKmFjdGl2YXRlX2NzKShzdHJ1Y3QgYXUxNTUwX3NwaV9pbmZvICpzcGksIGludCBjcywgaW50IHBvbGFyaXR5KTsKKwl2b2lkICgqZGVhY3RpdmF0ZV9jcykoc3RydWN0IGF1MTU1MF9zcGlfaW5mbyAqc3BpLCBpbnQgY3MsIGludCBwb2xhcml0eSk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1jb2JhbHQvY29iYWx0LmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtY29iYWx0L2NvYmFsdC5oCmluZGV4IDI0YThkNTEuLjY4NGE1MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1jb2JhbHQvY29iYWx0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWNvYmFsdC9jb2JhbHQuaApAQCAtNjksNiArNjksOCBAQAogI2RlZmluZSBDT0JBTFRfQlJEX0lEX1FVQkUyICAgIDB4NQogI2RlZmluZSBDT0JBTFRfQlJEX0lEX1JBUTIgICAgIDB4NgogCitleHRlcm4gaW50IGNvYmFsdF9ib2FyZF9pZDsKKwogI2RlZmluZSBQQ0lfQ0ZHX1NFVChkZXZmbix3aGVyZSkJCQkJCVwKIAlHVF9XUklURShHVF9QQ0kwX0NGR0FERFJfT0ZTLCAoMHg4MDAwMDAwMCB8IChQQ0lfU0xPVCAoZGV2Zm4pIDw8IDExKSB8CQlcCiAJCShQQ0lfRlVOQyAoZGV2Zm4pIDw8IDgpIHwgKHdoZXJlKSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtamEvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtamEvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YjZkZWEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBSYWxmIEJhZWNobGUKLSAqLwotI2lmbmRlZiBfX0FTTV9NQUNIX0pBX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICi0jZGVmaW5lIF9fQVNNX01BQ0hfSkFfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKLQotLyoKLSAqIE1vbWVudHVtIEphZ3VhciBBVFggYWx3YXlzIGhhcyB0aGUgUk05MDAwIHByb2Nlc3Nvci4KLSAqLwotI2RlZmluZSBjcHVfaGFzX3dhdGNoCQkxCi0jZGVmaW5lIGNwdV9oYXNfbWlwczE2CQkwCi0jZGVmaW5lIGNwdV9oYXNfZGl2ZWMJCTAKLSNkZWZpbmUgY3B1X2hhc192Y2UJCTAKLSNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3AJMAotI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcwkwCi0jZGVmaW5lIGNwdV9oYXNfcHJlZmV0Y2gJMQotI2RlZmluZSBjcHVfaGFzX21jaGVjawkJMAotI2RlZmluZSBjcHVfaGFzX2VqdGFnCQkwCi0KLSNkZWZpbmUgY3B1X2hhc19sbHNjCQkxCi0jZGVmaW5lIGNwdV9oYXNfdnRhZ19pY2FjaGUJMAotI2RlZmluZSBjcHVfaGFzX2RjX2FsaWFzZXMJMAotI2RlZmluZSBjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMJMAotI2RlZmluZSBjcHVfaGFzX2RzcAkJMAotI2RlZmluZSBjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUJMAotCi0jZGVmaW5lIGNwdV9oYXNfbm9mcHVleAkJMAotI2RlZmluZSBjcHVfaGFzXzY0Yml0cwkJMQotCi0jZGVmaW5lIGNwdV9oYXNfaW5jbHVzaXZlX3BjYWNoZXMJMAotCi0jZGVmaW5lIGNwdV9kY2FjaGVfbGluZV9zaXplKCkJMzIKLSNkZWZpbmUgY3B1X2ljYWNoZV9saW5lX3NpemUoKQkzMgotI2RlZmluZSBjcHVfc2NhY2hlX2xpbmVfc2l6ZSgpCTMyCi0KLSNkZWZpbmUgY3B1X2hhc19taXBzMzJyMQkwCi0jZGVmaW5lIGNwdV9oYXNfbWlwczMycjIJMAotI2RlZmluZSBjcHVfaGFzX21pcHM2NHIxCTAKLSNkZWZpbmUgY3B1X2hhc19taXBzNjRyMgkwCi0KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0pBX0NQVV9GRUFUVVJFX09WRVJSSURFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtamEvc3BhY2VzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtamEvc3BhY2VzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NjZhMGUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphL3NwYWNlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NCAtIDE5OTksIDIwMDAsIDAzLCAwNCBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMiAgTWFjaWVqIFcuIFJvenlja2kKLSAqIENvcHlyaWdodCAoQykgMTk5MCwgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKi8KLSNpZm5kZWYgX19BU01fTUFDSF9KQV9TUEFDRVNfSAotI2RlZmluZSBfX0FTTV9NQUNIX0pBX1NQQUNFU19ICi0KLS8qCi0gKiBNZW1vcnkgYWJvdmUgdGhpcyBwaHlzaWNhbCBhZGRyZXNzIHdpbGwgYmUgY29uc2lkZXJlZCBoaWdobWVtLgotICovCi0jZGVmaW5lIEhJR0hNRU1fU1RBUlQJCTB4MDgwMDAwMDBVTAotCi0jaW5jbHVkZV9uZXh0IDxzcGFjZXMuaD4KLQotI2VuZGlmIC8qIF9fQVNNX01BQ0hfSkFfU1BBQ0VTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvbWFsdGEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvbWFsdGEuaAppbmRleCBiMGJhM2M1Li5lZWM5MTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL21hbHRhLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9tYWx0YS5oCkBAIC0yNSw2ICsyNSwxMCBAQAogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9tc2MwMV9wY2kuaD4KICNpbmNsdWRlIDxhc20vZ3Q2NDEyMC5oPgogCisvKiBNaXBzIGludGVycnVwdCBjb250cm9sbGVyIGZvdW5kIGluIFNPQ2l0IHZhcmlhdGlvbnMgKi8KKyNkZWZpbmUgTUlQU19NU0MwMV9JQ19SRUdfQkFTRQkJMHgxYmM0MDAwMAorI2RlZmluZSBNSVBTX1NPQ0lUU0NfSUNfUkVHX0JBU0UJMHgxZmZhMDAwMAorCiAvKgogICogTWFsdGEgSS9PIHBvcnRzIGJhc2UgYWRkcmVzcyBmb3IgdGhlIEdhbGlsZW8gR1Q2NDEyMCBhbmQgQWxnb3JpdGhtaWNzCiAgKiBCb25pdG8gc3lzdGVtIGNvbnRyb2xsZXJzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tc2MwMV9pYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tc2MwMV9pYy5oCmluZGV4IGFhN2FkOWEuLjc5ODliOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbXNjMDFfaWMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21zYzAxX2ljLmgKQEAgLTk0LDEwICs5NCw3IEBACiAvKgogICogTUlQUyBTeXN0ZW0gY29udHJvbGxlciBpbnRlcnJ1cHQgcmVnaXN0ZXIgYmFzZS4KICAqCi0gKiBGSVhNRSAtIGFyZSB0aGVzZSBtYWNyb3Mgc3BlY2lmaWMgdG8gTWFsdGEgYW5kIGNvIG9yIHRvIHRoZSBNU0M/ICBJZiB0aGUKLSAqIGxhdHRlciwgdGhleSBzaG91bGQgYmUgbW92ZWQgZWxzZXdoZXJlLgogICovCi0jZGVmaW5lIE1JUFNfTVNDMDFfSUNfUkVHX0JBU0UJMHgxYmM0MDAwMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEFic29sdXRlIHJlZ2lzdGVyIGFkZHJlc3NlcwpAQCAtMTQ0LDcgKzE0MSw3IEBACiAjZGVmaW5lIE1TQzAxX0lSUV9MRVZFTAkJMAogI2RlZmluZSBNU0MwMV9JUlFfRURHRQkJMQogCi1leHRlcm4gdm9pZCBfX2luaXQgaW5pdF9tc2NfaXJxcyh1bnNpZ25lZCBpbnQgYmFzZSwgbXNjX2lycW1hcF90ICppbXAsIGludCBuaXJxKTsKK2V4dGVybiB2b2lkIF9faW5pdCBpbml0X21zY19pcnFzKHVuc2lnbmVkIGxvbmcgaWN1YmFzZSwgdW5zaWduZWQgaW50IGJhc2UsIG1zY19pcnFtYXBfdCAqaW1wLCBpbnQgbmlycSk7CiBleHRlcm4gdm9pZCBsbF9tc2NfaXJxKHZvaWQpOwogCiAjZW5kaWYgLyogX19BU01fTUlQU19CT0FSRFNfTVNDMDFfSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAppbmRleCBkM2ZiZDgzLi41YzMyMzlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaApAQCAtMTkwLDEwICsxOTAsNiBAQAogI2RlZmluZSBVTkNBQ19BRERSKGFkZHIpCSgoYWRkcikgLSBQQUdFX09GRlNFVCArIFVOQ0FDX0JBU0UpCiAjZGVmaW5lIENBQ19BRERSKGFkZHIpCQkoKGFkZHIpIC0gVU5DQUNfQkFTRSArIFBBR0VfT0ZGU0VUKQogCi0jaWZkZWYgQ09ORklHX0xJTUlURURfRE1BCi0jZGVmaW5lIFdBTlRfUEFHRV9WSVJUVUFMCi0jZW5kaWYKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhZ2UuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1taXBzL3BnYWxsb2MuaAppbmRleCA1Njg1ZDRmLi45ZmI1N2MwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BnYWxsb2MuaApAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCiAJcHRlX3QgKnB0ZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmgKaW5kZXggMGQzMjk1Zi4uMjdkNzdkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmgKQEAgLTM4NywxMCArMzg3LDYgQEAKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKICNlbmRpZgogCi0jZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCi0jZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKLSNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcG9sbC5oIGIvaW5jbHVkZS9hc20tbWlwcy9wb2xsLmgKaW5kZXggNzA4ODFmOC4uNDdiOTUyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wb2xsLmgKQEAgLTEsMjggKzEsOSBAQAogI2lmbmRlZiBfX0FTTV9QT0xMX0gKICNkZWZpbmUgX19BU01fUE9MTF9ICiAKLSNkZWZpbmUgUE9MTElOCQkweDAwMDEKLSNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCi0jZGVmaW5lIFBPTExPVVQJCTB4MDAwNAotCi0jZGVmaW5lIFBPTExFUlIJCTB4MDAwOAotI2RlZmluZSBQT0xMSFVQCQkweDAwMTAKLSNkZWZpbmUgUE9MTE5WQUwJMHgwMDIwCi0KLSNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKLSNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKICNkZWZpbmUgUE9MTFdSTk9STQlQT0xMT1VUCiAjZGVmaW5lIFBPTExXUkJBTkQJMHgwMTAwCiAKLS8qIFRoZXNlIHNlZW0gdG8gYmUgbW9yZSBvciBsZXNzIG5vbnN0YW5kYXJkIC4uLiAgKi8KLSNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCi0jZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCi0jZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKLQotc3RydWN0IHBvbGxmZCB7Ci0JaW50IGZkOwotCXNob3J0IGV2ZW50czsKLQlzaG9ydCByZXZlbnRzOwotfTsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wb2xsLmg+CiAKICNlbmRpZiAvKiBfX0FTTV9QT0xMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCmluZGV4IGQ3YTY1MTMuLmNlNTEyMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zZXJpYWwuaApAQCAtODEsMjUgKzgxLDYgQEAKICNkZWZpbmUgU1REX1NFUklBTF9QT1JUX0RFRk5TCiAjZW5kaWYgLyogQ09ORklHX0hBVkVfU1REX1BDX1NFUklBTF9QT1JUUyAqLwogCi0jaWZkZWYgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWAotLyogT3JkaW5hcnkgTlMxNjU1MiBkdWFydCB3aXRoIGEgMjBNSHogY3J5c3RhbC4gICovCi0jZGVmaW5lIEpBR1VBUl9BVFhfVUFSVF9DTEsJMjAwMDAwMDAKLSNkZWZpbmUgSkFHVUFSX0FUWF9CQVNFX0JBVUQJKEpBR1VBUl9BVFhfVUFSVF9DTEsgLyAxNikKLQotI2RlZmluZSBKQUdVQVJfQVRYX1NFUklBTDFfSVJRCTYKLSNkZWZpbmUgSkFHVUFSX0FUWF9TRVJJQUwxX0JBU0UJMHhmZDAwMDAyM0wKLQotI2RlZmluZSBfSkFHVUFSX0FUWF9TRVJJQUxfSU5JVChpbnQsIGJhc2UpCQkJCVwKLQl7IC5iYXVkX2Jhc2UgPSBKQUdVQVJfQVRYX0JBU0VfQkFVRCwgaXJxOiBpbnQsCQkJXAotCSAgLmZsYWdzID0gKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QpLAkJXAotCSAgLmlvbWVtX2Jhc2UgPSAodTggKikgYmFzZSwgaW9tZW1fcmVnX3NoaWZ0OiAyLAkJCVwKLQkgIGlvX3R5cGU6IFNFUklBTF9JT19NRU0gfQotI2RlZmluZSBNT01FTkNPX0pBR1VBUl9BVFhfU0VSSUFMX1BPUlRfREVGTlMJCQkJXAotCV9KQUdVQVJfQVRYX1NFUklBTF9JTklUKEpBR1VBUl9BVFhfU0VSSUFMMV9JUlEsIEpBR1VBUl9BVFhfU0VSSUFMMV9CQVNFKQotI2Vsc2UKLSNkZWZpbmUgTU9NRU5DT19KQUdVQVJfQVRYX1NFUklBTF9QT1JUX0RFRk5TCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19NT01FTkNPX09DRUxPVF8zCiAjZGVmaW5lIE9DRUxPVF8zX0JBU0VfQkFVRAkoIDIwMDAwMDAwIC8gMTYgKQogI2RlZmluZSBPQ0VMT1RfM19TRVJJQUxfSVJRCTYKQEAgLTEzNCwyNyArMTE1LDYgQEAKICNkZWZpbmUgTU9NRU5DT19PQ0VMT1RfU0VSSUFMX1BPUlRfREVGTlMKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01PTUVOQ09fT0NFTE9UX0cKLS8qIE9yZGluYXJ5IE5TMTY1NTIgZHVhcnQgd2l0aCBhIDIwTUh6IGNyeXN0YWwuICAqLwotI2RlZmluZSBPQ0VMT1RfR19CQVNFX0JBVUQgKCAyMDAwMDAwMCAvIDE2ICkKLQotI2RlZmluZSBPQ0VMT1RfR19TRVJJQUwxX0lSUQk0Ci0jaWYgMAotI2RlZmluZSBPQ0VMT1RfR19TRVJJQUwxX0JBU0UJMHhlMDAwMTAyMAotI2Vsc2UKLSNkZWZpbmUgT0NFTE9UX0dfU0VSSUFMMV9CQVNFCTB4ZmQwMDAwMjAKLSNlbmRpZgotCi0jZGVmaW5lIF9PQ0VMT1RfR19TRVJJQUxfSU5JVChpbnQsIGJhc2UpCQkJCVwKLQl7IC5iYXVkX2Jhc2UgPSBPQ0VMT1RfR19CQVNFX0JBVUQsIC5pcnEgPSBpbnQsIC5mbGFncyA9IFNURF9DT01fRkxBR1MsXAotCSAgLmlvbWVtX2Jhc2UgPSAodTggKikgYmFzZSwgLmlvbWVtX3JlZ19zaGlmdCA9IDIsCQkJXAotCSAgLmlvX3R5cGUgPSBTRVJJQUxfSU9fTUVNIH0KLSNkZWZpbmUgTU9NRU5DT19PQ0VMT1RfR19TRVJJQUxfUE9SVF9ERUZOUwkJCQlcCi0JX09DRUxPVF9HX1NFUklBTF9JTklUKE9DRUxPVF9HX1NFUklBTDFfSVJRLCBPQ0VMT1RfR19TRVJJQUwxX0JBU0UpCi0jZWxzZQotI2RlZmluZSBNT01FTkNPX09DRUxPVF9HX1NFUklBTF9QT1JUX0RFRk5TCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19NT01FTkNPX09DRUxPVF9DCiAvKiBPcmRpbmFyeSBOUzE2NTUyIGR1YXJ0IHdpdGggYSAyME1IeiBjcnlzdGFsLiAgKi8KICNkZWZpbmUgT0NFTE9UX0NfQkFTRV9CQVVEICggMjAwMDAwMDAgLyAxNiApCkBAIC0yMTAsNyArMTcwLDYgQEAKIAlJUDMyX1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJSkFaWl9TRVJJQUxfUE9SVF9ERUZOUwkJCQlcCiAJU1REX1NFUklBTF9QT1JUX0RFRk5TCQkJCVwKLQlNT01FTkNPX09DRUxPVF9HX1NFUklBTF9QT1JUX0RFRk5TCQlcCiAJTU9NRU5DT19PQ0VMT1RfQ19TRVJJQUxfUE9SVF9ERUZOUwkJXAogCU1PTUVOQ09fT0NFTE9UX1NFUklBTF9QT1JUX0RFRk5TCQlcCiAJTU9NRU5DT19PQ0VMT1RfM19TRVJJQUxfUE9SVF9ERUZOUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zZ2kvc2VlcS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zZ2kvc2VlcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMGZmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NnaS9zZWVxLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBieSBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9TR0lfU0VFUV9ICisjZGVmaW5lIF9fQVNNX1NHSV9TRUVRX0gKKworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKyNpbmNsdWRlIDxhc20vc2dpL2hwYzMuaD4KKworc3RydWN0IHNnaXNlZXFfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IGhwYzNfcmVncyAqaHBjOworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgY2hhciBtYWNbRVRIX0FMRU5dOworfTsKKworI2VuZGlmIC8qIF9fQVNNX1NHSV9TRUVRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2dpL3dkLmggYi9pbmNsdWRlL2FzbS1taXBzL3NnaS93ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNmMzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NnaS93ZC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgYnkgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX19BU01fU0dJX1dEX0gKKyNkZWZpbmUgX19BU01fU0dJX1dEX0gKKworI2luY2x1ZGUgPGFzbS9zZ2kvaHBjMy5oPgorCitzdHJ1Y3Qgc2dpd2Q5M19wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgdW5pdDsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXN0cnVjdCBocGMzX3Njc2lyZWdzICpocmVnczsKKwl1bnNpZ25lZCBjaGFyICp3ZHJlZ3M7Cit9OworCisjZW5kaWYgLyogX19BU01fU0dJX1dEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oCmluZGV4IDI5MDg4NzAuLmJiMGIyODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaApAQCAtNTUsNyArNTUsNyBAQAogCWlmIChjcHVfaGFzX2RzcCkJCQkJCQlcCiAJCV9fc2F2ZV9kc3AocHJldik7CQkJCQlcCiAJbmV4dC0+dGhyZWFkLmVtdWxhdGVkX2ZwID0gMDsJCQkJCVwKLQkobGFzdCkgPSByZXN1bWUocHJldiwgbmV4dCwgbmV4dC0+dGhyZWFkX2luZm8pOwkJCVwKKwkobGFzdCkgPSByZXN1bWUocHJldiwgbmV4dCwgdGFza190aHJlYWRfaW5mbyhuZXh0KSk7CQlcCiAJaWYgKGNwdV9oYXNfZHNwKQkJCQkJCVwKIAkJX19yZXN0b3JlX2RzcChjdXJyZW50KTsJCQkJCVwKIH0gd2hpbGUoMCkKQEAgLTIwMSw3ICsyMDEsNiBAQAogfQogCiAjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQotI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKIAogI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHIDEKIApAQCAtMjYyLDYgKzI2MSw1OCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2NtcHhjaGdfdTMyX2xvY2FsKHZvbGF0aWxlIGludCAqIG0sCisJdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3KQoreworCV9fdTMyIHJldHZhbDsKKworCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJcHVzaAkJCQkJXG4iCisJCSIJLnNldAlub2F0CQkJCQlcbiIKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6CWxsCSUwLCAlMgkJCSMgX19jbXB4Y2hnX3UzMglcbiIKKwkJIglibmUJJTAsICV6MywgMmYJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCQkJXG4iCisJCSIJbW92ZQkkMSwgJXo0CQkJCQlcbiIKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIglzYwkkMSwgJTEJCQkJCVxuIgorCQkiCWJlcXpsCSQxLCAxYgkJCQkJXG4iCisJCSIyOgkJCQkJCQlcbiIKKwkJIgkuc2V0CXBvcAkJCQkJXG4iCisJCTogIj0mciIgKHJldHZhbCksICI9UiIgKCptKQorCQk6ICJSIiAoKm0pLCAiSnIiIChvbGQpLCAiSnIiIChuZXcpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJcHVzaAkJCQkJXG4iCisJCSIJLnNldAlub2F0CQkJCQlcbiIKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6CWxsCSUwLCAlMgkJCSMgX19jbXB4Y2hnX3UzMglcbiIKKwkJIglibmUJJTAsICV6MywgMmYJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCQkJXG4iCisJCSIJbW92ZQkkMSwgJXo0CQkJCQlcbiIKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIglzYwkkMSwgJTEJCQkJCVxuIgorCQkiCWJlcXoJJDEsIDFiCQkJCQlcbiIKKwkJIjI6CQkJCQkJCVxuIgorCQkiCS5zZXQJcG9wCQkJCQlcbiIKKwkJOiAiPSZyIiAocmV0dmFsKSwgIj1SIiAoKm0pCisJCTogIlIiICgqbSksICJKciIgKG9sZCksICJKciIgKG5ldykKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXJldHZhbCA9ICptOworCQlpZiAocmV0dmFsID09IG9sZCkKKwkJCSptID0gbmV3OworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGltcGxpZXMgbWVtb3J5IGJhcnJpZXIgICovCisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKwogI2lmZGVmIENPTkZJR182NEJJVAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZ191NjQodm9sYXRpbGUgaW50ICogbSwgdW5zaWduZWQgbG9uZyBvbGQsCiAJdW5zaWduZWQgbG9uZyBuZXcpCkBAIC0zMTUsMTAgKzM2Niw2MiBAQAogCiAJcmV0dXJuIHJldHZhbDsKIH0KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZ191NjRfbG9jYWwodm9sYXRpbGUgaW50ICogbSwKKwl1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCit7CisJX191NjQgcmV0dmFsOworCisJaWYgKGNwdV9oYXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIJLnNldAlwdXNoCQkJCQlcbiIKKwkJIgkuc2V0CW5vYXQJCQkJCVxuIgorCQkiCS5zZXQJbWlwczMJCQkJCVxuIgorCQkiMToJbGxkCSUwLCAlMgkJCSMgX19jbXB4Y2hnX3U2NAlcbiIKKwkJIglibmUJJTAsICV6MywgMmYJCQkJXG4iCisJCSIJbW92ZQkkMSwgJXo0CQkJCQlcbiIKKwkJIglzY2QJJDEsICUxCQkJCQlcbiIKKwkJIgliZXF6bAkkMSwgMWIJCQkJCVxuIgorCQkiMjoJCQkJCQkJXG4iCisJCSIJLnNldAlwb3AJCQkJCVxuIgorCQk6ICI9JnIiIChyZXR2YWwpLCAiPVIiICgqbSkKKwkJOiAiUiIgKCptKSwgIkpyIiAob2xkKSwgIkpyIiAobmV3KQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CXB1c2gJCQkJCVxuIgorCQkiCS5zZXQJbm9hdAkJCQkJXG4iCisJCSIJLnNldAltaXBzMwkJCQkJXG4iCisJCSIxOglsbGQJJTAsICUyCQkJIyBfX2NtcHhjaGdfdTY0CVxuIgorCQkiCWJuZQklMCwgJXozLCAyZgkJCQlcbiIKKwkJIgltb3ZlCSQxLCAlejQJCQkJCVxuIgorCQkiCXNjZAkkMSwgJTEJCQkJCVxuIgorCQkiCWJlcXoJJDEsIDFiCQkJCQlcbiIKKwkJIjI6CQkJCQkJCVxuIgorCQkiCS5zZXQJcG9wCQkJCQlcbiIKKwkJOiAiPSZyIiAocmV0dmFsKSwgIj1SIiAoKm0pCisJCTogIlIiICgqbSksICJKciIgKG9sZCksICJKciIgKG5ldykKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXJldHZhbCA9ICptOworCQlpZiAocmV0dmFsID09IG9sZCkKKwkJCSptID0gbmV3OworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGltcGxpZXMgbWVtb3J5IGJhcnJpZXIgICovCisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKwogI2Vsc2UKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fY21weGNoZ191NjRfdW5zdXBwb3J0ZWRfb25fMzJiaXRfa2VybmVscygKIAl2b2xhdGlsZSBpbnQgKiBtLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpOwogI2RlZmluZSBfX2NtcHhjaGdfdTY0IF9fY21weGNoZ191NjRfdW5zdXBwb3J0ZWRfb25fMzJiaXRfa2VybmVscworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnX3U2NF9sb2NhbF91bnN1cHBvcnRlZF9vbl8zMmJpdF9rZXJuZWxzKAorCXZvbGF0aWxlIGludCAqIG0sIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ldyk7CisjZGVmaW5lIF9fY21weGNoZ191NjRfbG9jYWwgX19jbXB4Y2hnX3U2NF9sb2NhbF91bnN1cHBvcnRlZF9vbl8zMmJpdF9rZXJuZWxzCiAjZW5kaWYKIAogLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGV4aXN0LCBzbyB5b3UnbGwgZ2V0IGEgbGlua2VyIGVycm9yCkBAIC0zMzgsMTEgKzQ0MSwzMyBAQAogCXJldHVybiBvbGQ7CiB9CiAKLSNkZWZpbmUgY21weGNoZyhwdHIsb2xkLG5ldykgKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZykob2xkKSwgKHVuc2lnbmVkIGxvbmcpKG5ldyksc2l6ZW9mKCoocHRyKSkpKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZ19sb2NhbCh2b2xhdGlsZSB2b2lkICogcHRyLAorCXVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSA0OgorCQlyZXR1cm4gX19jbXB4Y2hnX3UzMl9sb2NhbChwdHIsIG9sZCwgbmV3KTsKKwljYXNlIDg6CisJCXJldHVybiBfX2NtcHhjaGdfdTY0X2xvY2FsKHB0ciwgb2xkLCBuZXcpOworCX0KKwlfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKKwlyZXR1cm4gb2xkOworfQorCisjZGVmaW5lIGNtcHhjaGcocHRyLG9sZCxuZXcpIFwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGcoKHB0ciksIFwKKwkJKHVuc2lnbmVkIGxvbmcpKG9sZCksICh1bnNpZ25lZCBsb25nKShuZXcpLHNpemVvZigqKHB0cikpKSkKKworI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0cixvbGQsbmV3KSBcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnX2xvY2FsKChwdHIpLCBcCisJCSh1bnNpZ25lZCBsb25nKShvbGQpLCAodW5zaWduZWQgbG9uZykobmV3KSxzaXplb2YoKihwdHIpKSkpCiAKIGV4dGVybiB2b2lkIHNldF9oYW5kbGVyICh1bnNpZ25lZCBsb25nIG9mZnNldCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pOwogZXh0ZXJuIHZvaWQgc2V0X3VuY2FjaGVkX2hhbmRsZXIgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7Ci1leHRlcm4gdm9pZCAqc2V0X3ZpX2hhbmRsZXIgKGludCBuLCB2b2lkICphZGRyKTsKKwordHlwZWRlZiB2b2lkICgqdmlfaGFuZGxlcl90KSh2b2lkKTsKK2V4dGVybiB2b2lkICpzZXRfdmlfaGFuZGxlciAoaW50IG4sIHZpX2hhbmRsZXJfdCBhZGRyKTsKKwogZXh0ZXJuIHZvaWQgKnNldF9leGNlcHRfdmVjdG9yKGludCBuLCB2b2lkICphZGRyKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGViYXNlOwogZXh0ZXJuIHZvaWQgcGVyX2NwdV90cmFwX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvYXRvbWljLmgKaW5kZXggN2Q1N2QzNC4uZTg5NGVlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9hdG9taWMuaApAQCAtMTYzLDcgKzE2Myw3IEBACiB9CiAKIC8qIGV4cG9ydGVkIGludGVyZmFjZSAqLwotI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoKGludCljbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQorI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKICNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCiAKIC8qKgpAQCAtMTc1LDE0ICsxNzUsMjEgQEAKICAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgogICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCiAgKi8KLSNkZWZpbmUgYXRvbWljX2FkZF91bmxlc3ModiwgYSwgdSkJCQkJXAotKHsJCQkJCQkJCVwKLQlpbnQgYywgb2xkOwkJCQkJCVwKLQljID0gYXRvbWljX3JlYWQodik7CQkJCQlcCi0Jd2hpbGUgKGMgIT0gKHUpICYmIChvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpKSAhPSBjKSBcCi0JCWMgPSBvbGQ7CQkJCQlcCi0JYyAhPSAodSk7CQkJCQkJXAotfSkKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQoreworCWludCBjLCBvbGQ7CisJYyA9IGF0b21pY19yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKICNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCiAKICNkZWZpbmUgYXRvbWljX2FkZChpLHYpCSgodm9pZCkoX19hdG9taWNfYWRkX3JldHVybiggKChpbnQpaSksKHYpKSkpCkBAIC0yNzAsNiArMjc3LDM3IEBACiAjZGVmaW5lIGF0b21pYzY0X2RlY19hbmRfdGVzdCh2KQkoYXRvbWljNjRfZGVjX3JldHVybih2KSA9PSAwKQogI2RlZmluZSBhdG9taWM2NF9zdWJfYW5kX3Rlc3QoaSx2KQkoYXRvbWljNjRfc3ViX3JldHVybigoaSksKHYpKSA9PSAwKQogCisvKiBleHBvcnRlZCBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgYXRvbWljNjRfY21weGNoZyh2LCBvLCBuKSBcCisJKChfX3R5cGVvZl9fKCh2KS0+Y291bnRlcikpY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKKyNkZWZpbmUgYXRvbWljNjRfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKKworLyoqCisgKiBhdG9taWM2NF9hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KKyAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgorICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWM2NF9hZGRfdW5sZXNzKGF0b21pYzY0X3QgKnYsIGxvbmcgYSwgbG9uZyB1KQoreworCWxvbmcgYywgb2xkOworCWMgPSBhdG9taWM2NF9yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWM2NF9jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7CisJCWlmIChsaWtlbHkob2xkID09IGMpKQorCQkJYnJlYWs7CisJCWMgPSBvbGQ7CisJfQorCXJldHVybiBjICE9ICh1KTsKK30KKworI2RlZmluZSBhdG9taWM2NF9pbmNfbm90X3plcm8odikgYXRvbWljNjRfYWRkX3VubGVzcygodiksIDEsIDApCisKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2NvbXBhdC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2NvbXBhdC5oCmluZGV4IGZlODU3OTAuLjExZjQyMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jb21wYXQuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvY29tcGF0LmgKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBfX2lzX2NvbXBhdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKLQlyZXR1cm4gdGVzdF90aV90aHJlYWRfZmxhZyh0LT50aHJlYWRfaW5mbywgVElGXzMyQklUKTsKKwlyZXR1cm4gdGVzdF90aV90aHJlYWRfZmxhZyh0YXNrX3RocmVhZF9pbmZvKHQpLCBUSUZfMzJCSVQpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpc19jb21wYXRfdGFzayh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2tkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlY2UxYjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mva2RlYnVnLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2tkZWJ1Zy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvbG9jYWwuaAppbmRleCBkMGY1NTA5Li5jMTFjNTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvbG9jYWwuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvbG9jYWwuaApAQCAtMSw0MCArMSBAQAotI2lmbmRlZiBfQVJDSF9QQVJJU0NfTE9DQUxfSAotI2RlZmluZSBfQVJDSF9QQVJJU0NfTE9DQUxfSAotCi0jaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi10eXBlZGVmIGF0b21pY19sb25nX3QgbG9jYWxfdDsKLQotI2RlZmluZSBMT0NBTF9JTklUKGkpCUFUT01JQ19MT05HX0lOSVQoaSkKLSNkZWZpbmUgbG9jYWxfcmVhZCh2KQlhdG9taWNfbG9uZ19yZWFkKHYpCi0jZGVmaW5lIGxvY2FsX3NldCh2LGkpCWF0b21pY19sb25nX3NldCh2LGkpCi0KLSNkZWZpbmUgbG9jYWxfaW5jKHYpCWF0b21pY19sb25nX2luYyh2KQotI2RlZmluZSBsb2NhbF9kZWModikJYXRvbWljX2xvbmdfZGVjKHYpCi0jZGVmaW5lIGxvY2FsX2FkZChpLCB2KQlhdG9taWNfbG9uZ19hZGQoaSwgdikKLSNkZWZpbmUgbG9jYWxfc3ViKGksIHYpCWF0b21pY19sb25nX3N1YihpLCB2KQotCi0jZGVmaW5lIF9fbG9jYWxfaW5jKHYpCQkoKHYpLT5jb3VudGVyKyspCi0jZGVmaW5lIF9fbG9jYWxfZGVjKHYpCQkoKHYpLT5jb3VudGVyLS0pCi0jZGVmaW5lIF9fbG9jYWxfYWRkKGksdikJKCh2KS0+Y291bnRlcis9KGkpKQotI2RlZmluZSBfX2xvY2FsX3N1YihpLHYpCSgodiktPmNvdW50ZXItPShpKSkKLQotLyogVXNlIHRoZXNlIGZvciBwZXItY3B1IGxvY2FsX3QgdmFyaWFibGVzOiBvbiBzb21lIGFyY2hzIHRoZXkgYXJlCi0gKiBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlc2UgbmFpdmUgaW1wbGVtZW50YXRpb25zLiAgTm90ZSB0aGV5IHRha2UKLSAqIGEgdmFyaWFibGUsIG5vdCBhbiBhZGRyZXNzLgotICovCi0jZGVmaW5lIGNwdV9sb2NhbF9yZWFkKHYpCWxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9zZXQodiwgaSkJbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKHYpLCAoaSkpCi0KLSNkZWZpbmUgY3B1X2xvY2FsX2luYyh2KQlsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIGNwdV9sb2NhbF9kZWModikJbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIHYpCWxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIHYpCWxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQotCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2luYyh2KQlfX2xvY2FsX2luYygmX19nZXRfY3B1X3Zhcih2KSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKHYpCV9fbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgdikJX19sb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIHYpCV9fbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCi0KLSNlbmRpZiAvKiBfQVJDSF9QQVJJU0NfTE9DQUxfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9tbXVfY29udGV4dC5oCmluZGV4IGJhZDY5MDIuLjg1ODU2YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9tbXVfY29udGV4dC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX1BBUklTQ19NTVVfQ09OVEVYVF9ICiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCmluZGV4IGQ3ZTFiMTAuLmJlYjJhZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaApAQCAtNTI4LDEwICs1MjgsNiBAQAogCiAjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkgX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX05PX0NBQ0hFKQogCi0jZGVmaW5lIE1LX0lPU1BBQ0VfUEZOKHNwYWNlLCBwZm4pCShwZm4pCi0jZGVmaW5lIEdFVF9JT1NQQUNFKHBmbikJCTAKLSNkZWZpbmUgR0VUX1BGTihwZm4pCQkJKHBmbikKLQogLyogV2UgcHJvdmlkZSBvdXIgb3duIGdldF91bm1hcHBlZF9hcmVhIHRvIHByb3ZpZGUgY2FjaGUgY29oZXJlbmN5ICovCiAKICNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wb2xsLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcG9sbC5oCmluZGV4IDIwZTRkMDMuLmM5ODUwOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BvbGwuaApAQCAtMSwyNyArMSBAQAotI2lmbmRlZiBfX1BBUklTQ19QT0xMX0gKLSNkZWZpbmUgX19QQVJJU0NfUE9MTF9ICi0KLS8qIFRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgaUJDUzIgKi8KLSNkZWZpbmUgUE9MTElOCQkweDAwMDEKLSNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCi0jZGVmaW5lIFBPTExPVVQJCTB4MDAwNAotI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKLSNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCi0jZGVmaW5lIFBPTExOVkFMCTB4MDAyMAotCi0vKiBUaGUgcmVzdCBzZWVtIHRvIGJlIG1vcmUtb3ItbGVzcyBub25zdGFuZGFyZC4gQ2hlY2sgdGhlbSEgKi8KLSNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKLSNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKLSNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKLSNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKLSNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCi0jZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCi0jZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKLQotc3RydWN0IHBvbGxmZCB7Ci0JaW50IGZkOwotCXNob3J0IGV2ZW50czsKLQlzaG9ydCByZXZlbnRzOwotfTsKLQotI2VuZGlmCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvdGxiZmx1c2guaAppbmRleCAzMzEzZGE5Li4yNzBjZjMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdGxiZmx1c2guaApAQCAtNCw2ICs0LDcgQEAKIC8qIFRMQiBmbHVzaGluZyByb3V0aW5lcy4uLi4gKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaAppbmRleCAyY2U0YjZiLi5jNDQ4MTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmgKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9zeW5jaC5oPgogI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjZGVmaW5lIEFUT01JQ19JTklUKGkpCQl7IChpKSB9CiAKQEAgLTE2NSw4ICsxNjYsNyBAQAogCXJldHVybiB0OwogfQogCi0jZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pIFwKLQkoKF9fdHlwZW9mX18oKHYpLT5jb3VudGVyKSljbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQorI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKICNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCiAKIC8qKgpAQCAtNDE0LDggKzQxNCw3IEBACiAJcmV0dXJuIHQ7CiB9CiAKLSNkZWZpbmUgYXRvbWljNjRfY21weGNoZyh2LCBvLCBuKSBcCi0JKChfX3R5cGVvZl9fKCh2KS0+Y291bnRlcikpY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKKyNkZWZpbmUgYXRvbWljNjRfY21weGNoZyh2LCBvLCBuKSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKICNkZWZpbmUgYXRvbWljNjRfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9iaXRvcHMuaAppbmRleCA4Zjc1N2Y2Li44MTQ0YTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmgKQEAgLTM5LDcgKzM5LDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS9zeW5jaC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKaW5kZXggNDM0NTI0OS4uODJkNTk1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaApAQCAtMzAyLDYgKzMwMiwxMiBAQAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1NQRUM3NDUwIHwgXAogCSAgICBDUFVfRlRSX05BUF9ESVNBQkxFX0wyX1BSIHwgQ1BVX0ZUUl9IQVNfSElHSF9CQVRTIHwgXAogCSAgICBDUFVfRlRSX05FRURfQ09IRVJFTlQgfCBDUFVfRlRSX1BQQ19MRSkKKyNkZWZpbmUgQ1BVX0ZUUlNfNzQ0OAkoQ1BVX0ZUUl9DT01NT04gfCBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgXAorCSAgICBDUFVfRlRSX1VTRV9UQiB8IFwKKwkgICAgQ1BVX0ZUUl9NQVlCRV9DQU5fTkFQIHwgQ1BVX0ZUUl9MMkNSIHwgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfCBcCisJICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfU1BFQzc0NTAgfCBcCisJICAgIENQVV9GVFJfTkFQX0RJU0FCTEVfTDJfUFIgfCBDUFVfRlRSX0hBU19ISUdIX0JBVFMgfCBcCisJICAgIENQVV9GVFJfUFBDX0xFKQogI2RlZmluZSBDUFVfRlRSU184MlhYCShDUFVfRlRSX0NPTU1PTiB8IENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfCBcCiAJICAgIENQVV9GVFJfTUFZQkVfQ0FOX0RPWkUgfCBDUFVfRlRSX1VTRV9UQikKICNkZWZpbmUgQ1BVX0ZUUlNfRzJfTEUJKENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfCBDUFVfRlRSX01BWUJFX0NBTl9ET1pFIHwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmgKaW5kZXggOWU0ZGQ5OC4uYTdiNjBiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oCkBAIC00OCw4ICs0OCwxNSBAQAogCiAjZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJKGxvY2FsX2dldF9mbGFncygpID09IDApCiAKLSNkZWZpbmUgaGFyZF9pcnFfZW5hYmxlKCkJX19tdG1zcmQobWZtc3IoKSB8IE1TUl9FRSwgMSkKLSNkZWZpbmUgaGFyZF9pcnFfZGlzYWJsZSgpCV9fbXRtc3JkKG1mbXNyKCkgJiB+TVNSX0VFLCAxKQorI2RlZmluZSBfX2hhcmRfaXJxX2VuYWJsZSgpCV9fbXRtc3JkKG1mbXNyKCkgfCBNU1JfRUUsIDEpCisjZGVmaW5lIF9faGFyZF9pcnFfZGlzYWJsZSgpCV9fbXRtc3JkKG1mbXNyKCkgJiB+TVNSX0VFLCAxKQorCisjZGVmaW5lICBoYXJkX2lycV9kaXNhYmxlKCkJCQlcCisJZG8gewkJCQkJXAorCQlfX2hhcmRfaXJxX2Rpc2FibGUoKTsJCVwKKwkJZ2V0X3BhY2EoKS0+c29mdF9lbmFibGVkID0gMDsJXAorCQlnZXRfcGFjYSgpLT5oYXJkX2VuYWJsZWQgPSAwOwlcCisJfSB3aGlsZSgwKQogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmgKaW5kZXggYjJlNTZiMy4uODcwOTY3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pb21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW9tbXUuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KIApAQCAtMTA5LDYgKzExMCwxOSBAQAogI2VuZGlmCiAKIGV4dGVybiB2b2lkIGFsbG9jX2RhcnRfdGFibGUodm9pZCk7CisjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpICYmIGRlZmluZWQoQ09ORklHX1BNKQorc3RhdGljIGlubGluZSB2b2lkIGlvbW11X3NhdmUodm9pZCkKK3sKKwlpZiAocHBjX21kLmlvbW11X3NhdmUpCisJCXBwY19tZC5pb21tdV9zYXZlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9yZXN0b3JlKHZvaWQpCit7CisJaWYgKHBwY19tZC5pb21tdV9yZXN0b3JlKQorCQlwcGNfbWQuaW9tbXVfcmVzdG9yZSgpOworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9JT01NVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9rZGVidWcuaAppbmRleCA1MzJiZmVlLi4yOTVmMDE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMva2RlYnVnLmgKQEAgLTYsMjAgKzYsMTkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKLXN0cnVjdCBwdF9yZWdzOwotCi1zdHJ1Y3QgZGllX2FyZ3MgewotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCWNvbnN0IGNoYXIgKnN0cjsKLQlsb25nIGVycjsKLQlpbnQgdHJhcG5yOwotCWludCBzaWducjsKLX07Ci0KLWV4dGVybiBpbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwotZXh0ZXJuIGludCByZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgdW5yZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKKy8qCisgKiBUaGVzZSBhcmUgb25seSBoZXJlIGJlY2F1c2Uga3Byb2Jlcy5jIHdhbnRzIHRoZW0gdG8gaW1wbGVtZW50IGEKKyAqIGJsYXRhbnQgbGF5ZXJpbmcgdmlvbGF0aW9uLiAgV2lsbCBob3BlZnVsbHkgZ28gYXdheSBzb29uIG9uY2UgYWxsCisgKiBhcmNoaXRlY3R1cmVzIGFyZSB1cGRhdGVkLgorICovCitzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCB1bnJlZ2lzdGVyX3BhZ2VfZmF1bHRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gMDsKK30KIGV4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgcG93ZXJwY19kaWVfY2hhaW47CiAKIC8qIEdyb3NzbHkgbWlzbmFtZWQuICovCkBAIC0yOSwxNCArMjgsNyBAQAogCURJRV9EQUJSX01BVENILAogCURJRV9CUFQsCiAJRElFX1NTVEVQLAotCURJRV9QQUdFX0ZBVUxULAogfTsKIAotc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X2RpZShlbnVtIGRpZV92YWwgdmFsLGNoYXIgKnN0cixzdHJ1Y3QgcHRfcmVncyAqcmVncyxsb25nIGVycixpbnQgdHJhcCwgaW50IHNpZykKLXsKLQlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsgLnJlZ3M9cmVncywgLnN0cj1zdHIsIC5lcnI9ZXJyLCAudHJhcG5yPXRyYXAsLnNpZ25yPXNpZyB9OwotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmcG93ZXJwY19kaWVfY2hhaW4sIHZhbCwgJmFyZ3MpOwotfQotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19LREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9rZXhlYy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9rZXhlYy5oCmluZGV4IDExY2JkZjguLmI2ZjgxN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMva2V4ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2tleGVjLmgKQEAgLTEwOCw4ICsxMDgsNiBAQAogCQkJCQlzdHJ1Y3QgcHRfcmVncyAqb2xkcmVncykgeyB9CiAjZW5kaWYgLyogIV9fcG93ZXJwYzY0IF9fICovCiAKLSNkZWZpbmUgTUFYX05PVEVfQllURVMgMTAyNAotCiBleHRlcm4gdm9pZCBrZXhlY19zbXBfd2FpdCh2b2lkKTsJLyogZ2V0IGFuZCBjbGVhciBuYWNhIHBoeXNpZCwgd2FpdCBmb3IKIAkJCQkJICBtYXN0ZXIgdG8gY29weSBuZXcgY29kZSB0byAwICovCiBleHRlcm4gaW50IGNyYXNoaW5nX2NwdTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMva3Byb2Jlcy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9rcHJvYmVzLmgKaW5kZXggZjg1MGNhNy4uYjBlNDBmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9rcHJvYmVzLmgKQEAgLTY0LDYgKzY0LDEyIEBACiAJCQkJYWRkciA9ICooa3Byb2JlX29wY29kZV90ICoqKWFkZHI7CVwKIAkJfSBlbHNlIGlmIChuYW1lWzBdICE9ICcuJykJCQkJXAogCQkJYWRkciA9ICooa3Byb2JlX29wY29kZV90ICoqKWFkZHI7CQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQljaGFyIGRvdF9uYW1lW0tTWU1fTkFNRV9MRU4rMV07CQkJCVwKKwkJZG90X25hbWVbMF0gPSAnLic7CQkJCQlcCisJCWRvdF9uYW1lWzFdID0gJ1wwJzsJCQkJCVwKKwkJc3RybmNhdChkb3RfbmFtZSwgbmFtZSwgS1NZTV9OQU1FX0xFTik7CQkJXAorCQlhZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKWthbGxzeW1zX2xvb2t1cF9uYW1lKGRvdF9uYW1lKTsgXAogCX0JCQkJCQkJCVwKIH0KIApAQCAtMTEwLDUgKzExNiw2IEBACiAKIGV4dGVybiBpbnQga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucik7CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmCS8qIF9BU01fUE9XRVJQQ19LUFJPQkVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbG9jYWwuaAppbmRleCBjMTFjNTMwLi42MTJkODMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2xvY2FsLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9sb2NhbC5oCkBAIC0xICsxLDIwMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsLmg+CisjaWZuZGVmIF9BUkNIX1BPV0VSUENfTE9DQUxfSAorI2RlZmluZSBfQVJDSF9QT1dFUlBDX0xPQ0FMX0gKKworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlhdG9taWNfbG9uZ190IGE7Cit9IGxvY2FsX3Q7CisKKyNkZWZpbmUgTE9DQUxfSU5JVChpKQl7IEFUT01JQ19MT05HX0lOSVQoaSkgfQorCisjZGVmaW5lIGxvY2FsX3JlYWQobCkJYXRvbWljX2xvbmdfcmVhZCgmKGwpLT5hKQorI2RlZmluZSBsb2NhbF9zZXQobCxpKQlhdG9taWNfbG9uZ19zZXQoJihsKS0+YSwgKGkpKQorCisjZGVmaW5lIGxvY2FsX2FkZChpLGwpCWF0b21pY19sb25nX2FkZCgoaSksKCYobCktPmEpKQorI2RlZmluZSBsb2NhbF9zdWIoaSxsKQlhdG9taWNfbG9uZ19zdWIoKGkpLCgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWxfaW5jKGwpCWF0b21pY19sb25nX2luYygmKGwpLT5hKQorI2RlZmluZSBsb2NhbF9kZWMobCkJYXRvbWljX2xvbmdfZGVjKCYobCktPmEpCisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9jYWxfYWRkX3JldHVybihsb25nIGEsIGxvY2FsX3QgKmwpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToiCVBQQ19MTEFSWAkiJTAsMCwlMgkJIyBsb2NhbF9hZGRfcmV0dXJuXG5cCisJYWRkCSUwLCUxLCUwXG4iCisJUFBDNDA1X0VSUjc3KDAsJTIpCisJUFBDX1NUTENYCSIlMCwwLCUyIFxuXAorCWJuZS0JMWIiCisJOiAiPSZyIiAodCkKKwk6ICJyIiAoYSksICJyIiAoJihsLT5hLmNvdW50ZXIpKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKyNkZWZpbmUgbG9jYWxfYWRkX25lZ2F0aXZlKGEsIGwpCShsb2NhbF9hZGRfcmV0dXJuKChhKSwgKGwpKSA8IDApCisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9jYWxfc3ViX3JldHVybihsb25nIGEsIGxvY2FsX3QgKmwpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToiCVBQQ19MTEFSWAkiJTAsMCwlMgkJIyBsb2NhbF9zdWJfcmV0dXJuXG5cCisJc3ViZgklMCwlMSwlMFxuIgorCVBQQzQwNV9FUlI3NygwLCUyKQorCVBQQ19TVExDWAkiJTAsMCwlMiBcblwKKwlibmUtCTFiIgorCTogIj0mciIgKHQpCisJOiAiciIgKGEpLCAiciIgKCYobC0+YS5jb3VudGVyKSkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvY2FsX2luY19yZXR1cm4obG9jYWxfdCAqbCkKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOiIJUFBDX0xMQVJYCSIlMCwwLCUxCQkjIGxvY2FsX2luY19yZXR1cm5cblwKKwlhZGRpYwklMCwlMCwxXG4iCisJUFBDNDA1X0VSUjc3KDAsJTEpCisJUFBDX1NUTENYCSIlMCwwLCUxIFxuXAorCWJuZS0JMWIiCisJOiAiPSZyIiAodCkKKwk6ICJyIiAoJihsLT5hLmNvdW50ZXIpKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKy8qCisgKiBsb2NhbF9pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEBsOiBwb2ludGVyIG9mIHR5cGUgbG9jYWxfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAbCBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgbG9jYWxfaW5jX2FuZF90ZXN0KGwpIChsb2NhbF9pbmNfcmV0dXJuKGwpID09IDApCisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9jYWxfZGVjX3JldHVybihsb2NhbF90ICpsKQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6IglQUENfTExBUlgJIiUwLDAsJTEJCSMgbG9jYWxfZGVjX3JldHVyblxuXAorCWFkZGljCSUwLCUwLC0xXG4iCisJUFBDNDA1X0VSUjc3KDAsJTEpCisJUFBDX1NUTENYCSIlMCwwLCUxXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KQorCTogInIiICgmKGwtPmEuY291bnRlcikpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdDsKK30KKworI2RlZmluZSBsb2NhbF9jbXB4Y2hnKGwsIG8sIG4pIFwKKwkoY21weGNoZ19sb2NhbCgmKChsKS0+YS5jb3VudGVyKSwgKG8pLCAobikpKQorI2RlZmluZSBsb2NhbF94Y2hnKGwsIG4pICh4Y2hnX2xvY2FsKCYoKGwpLT5hLmNvdW50ZXIpLCAobikpKQorCisvKioKKyAqIGxvY2FsX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQorICogQGw6IHBvaW50ZXIgb2YgdHlwZSBsb2NhbF90CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgorICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCisgKgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEBsLCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEBsIHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGxvY2FsX2FkZF91bmxlc3MobG9jYWxfdCAqbCwgbG9uZyBhLCBsb25nIHUpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorIjE6IglQUENfTExBUlgJIiUwLDAsJTEJCSMgbG9jYWxfYWRkX3VubGVzc1xuXAorCWNtcHcJMCwlMCwlMyBcblwKKwliZXEtCTJmIFxuXAorCWFkZAklMCwlMiwlMCBcbiIKKwlQUEM0MDVfRVJSNzcoMCwlMikKKwlQUENfU1RMQ1gJIiUwLDAsJTEgXG5cCisJYm5lLQkxYiBcbiIKKyIJc3ViZgklMCwlMiwlMCBcblwKKzI6IgorCTogIj0mciIgKHQpCisJOiAiciIgKCYobC0+YS5jb3VudGVyKSksICJyIiAoYSksICJyIiAodSkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0ICE9IHU7Cit9CisKKyNkZWZpbmUgbG9jYWxfaW5jX25vdF96ZXJvKGwpIGxvY2FsX2FkZF91bmxlc3MoKGwpLCAxLCAwKQorCisjZGVmaW5lIGxvY2FsX3N1Yl9hbmRfdGVzdChhLCBsKQkobG9jYWxfc3ViX3JldHVybigoYSksIChsKSkgPT0gMCkKKyNkZWZpbmUgbG9jYWxfZGVjX2FuZF90ZXN0KGwpCQkobG9jYWxfZGVjX3JldHVybigobCkpID09IDApCisKKy8qCisgKiBBdG9taWNhbGx5IHRlc3QgKmwgYW5kIGRlY3JlbWVudCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMC4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvbGQgdmFsdWUgb2YgKmwgbWludXMgMS4KKyAqLworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb2NhbF9kZWNfaWZfcG9zaXRpdmUobG9jYWxfdCAqbCkKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOiIJUFBDX0xMQVJYCSIlMCwwLCUxCQkjIGxvY2FsX2RlY19pZl9wb3NpdGl2ZVxuXAorCWNtcHdpCSUwLDFcblwKKwlhZGRpCSUwLCUwLC0xXG5cCisJYmx0LQkyZlxuIgorCVBQQzQwNV9FUlI3NygwLCUxKQorCVBQQ19TVExDWAkiJTAsMCwlMVxuXAorCWJuZS0JMWIiCisJIlxuXAorMjoiCTogIj0mYiIgKHQpCisJOiAiciIgKCYobC0+YS5jb3VudGVyKSkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0OworfQorCisvKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKKyAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQorICogYSB2YXJpYWJsZSwgbm90IGFuIGFkZHJlc3MuCisgKi8KKworI2RlZmluZSBfX2xvY2FsX2luYyhsKQkJKChsKS0+YS5jb3VudGVyKyspCisjZGVmaW5lIF9fbG9jYWxfZGVjKGwpCQkoKGwpLT5hLmNvdW50ZXIrKykKKyNkZWZpbmUgX19sb2NhbF9hZGQoaSxsKQkoKGwpLT5hLmNvdW50ZXIrPShpKSkKKyNkZWZpbmUgX19sb2NhbF9zdWIoaSxsKQkoKGwpLT5hLmNvdW50ZXItPShpKSkKKworLyogTmVlZCB0byBkaXNhYmxlIHByZWVtcHRpb24gZm9yIHRoZSBjcHUgbG9jYWwgY291bnRlcnMgb3RoZXJ3aXNlIHdlIGNvdWxkCisgICBzdGlsbCBhY2Nlc3MgYSB2YXJpYWJsZSBvZiBhIHByZXZpb3VzIENQVSBpbiBhIG5vbiBhdG9taWMgd2F5LiAqLworI2RlZmluZSBjcHVfbG9jYWxfd3JhcF92KGwpCSAJXAorCSh7IGxvY2FsX3QgcmVzX187CQlcCisJICAgcHJlZW1wdF9kaXNhYmxlKCk7IAkJXAorCSAgIHJlc19fID0gKGwpOwkJCVwKKwkgICBwcmVlbXB0X2VuYWJsZSgpOwkJXAorCSAgIHJlc19fOyB9KQorI2RlZmluZSBjcHVfbG9jYWxfd3JhcChsKQkJXAorCSh7IHByZWVtcHRfZGlzYWJsZSgpOwkJXAorCSAgIGw7CQkJCVwKKwkgICBwcmVlbXB0X2VuYWJsZSgpOyB9KQkJXAorCisjZGVmaW5lIGNwdV9sb2NhbF9yZWFkKGwpICAgIGNwdV9sb2NhbF93cmFwX3YobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihsKSkpCisjZGVmaW5lIGNwdV9sb2NhbF9zZXQobCwgaSkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3NldCgmX19nZXRfY3B1X3ZhcihsKSwgKGkpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2luYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGwpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2RlYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKGwpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCBsKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpKQorI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCisKKyNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKGwpCWNwdV9sb2NhbF9pbmMobCkKKyNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKGwpCWNwdV9sb2NhbF9kZWMobCkKKyNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIGwpCWNwdV9sb2NhbF9hZGQoKGkpLCAobCkpCisjZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCBsKQljcHVfbG9jYWxfc3ViKChpKSwgKGwpKQorCisjZW5kaWYgLyogX0FSQ0hfUE9XRVJQQ19MT0NBTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21hY2hkZXAuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oCmluZGV4IGIyMDQ5MjYuLjZjZjFhODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oCkBAIC05MSw2ICs5MSwxMSBAQAogCXZvaWQgX19pb21lbSAqCSgqaW9yZW1hcCkocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCXZvaWQJCSgqaW91bm1hcCkodm9sYXRpbGUgdm9pZCBfX2lvbWVtICp0b2tlbik7CisKKyNpZmRlZiBDT05GSUdfUE0KKwl2b2lkCQkoKmlvbW11X3NhdmUpKHZvaWQpOworCXZvaWQJCSgqaW9tbXVfcmVzdG9yZSkodm9pZCk7CisjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogCWludAkJKCpwcm9iZSkodm9pZCk7CkBAIC0xMTUsNiArMTIwLDE0IEBACiAJLyogVG8gc2V0dXAgUEhCcyB3aGVuIHVzaW5nIGF1dG9tYXRpYyBPRiBwbGF0Zm9ybSBkcml2ZXIgZm9yIFBDSSAqLwogCWludAkJKCpwY2lfc2V0dXBfcGhiKShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc3QpOwogCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlpbnQJCSgqbXNpX2NoZWNrX2RldmljZSkoc3RydWN0IHBjaV9kZXYqIGRldiwKKwkJCQkJICAgIGludCBudmVjLCBpbnQgdHlwZSk7CisJaW50CQkoKnNldHVwX21zaV9pcnFzKShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgIGludCBudmVjLCBpbnQgdHlwZSk7CisJdm9pZAkJKCp0ZWFyZG93bl9tc2lfaXJxcykoc3RydWN0IHBjaV9kZXYgKmRldik7CisjZW5kaWYKKwogCXZvaWQJCSgqcmVzdGFydCkoY2hhciAqY21kKTsKIAl2b2lkCQkoKnBvd2VyX29mZikodm9pZCk7CiAJdm9pZAkJKCpoYWx0KSh2b2lkKTsKQEAgLTI0MCwxNCArMjUzLDEwIEBACiAJICovCiAJdm9pZCAoKm1hY2hpbmVfa2V4ZWMpKHN0cnVjdCBraW1hZ2UgKmltYWdlKTsKICNlbmRpZiAvKiBDT05GSUdfS0VYRUMgKi8KLQotI2lmZGVmIENPTkZJR19QQ0lfTVNJCi0JaW50ICgqZW5hYmxlX21zaSkoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwotCXZvaWQgKCpkaXNhYmxlX21zaSkoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwotI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCiB9OwogCiBleHRlcm4gdm9pZCBwb3dlcjRfaWRsZSh2b2lkKTsKK2V4dGVybiB2b2lkIHBvd2VyNF9jcHVfb2ZmbGluZV9wb3dlcnNhdmUodm9pZCk7CiBleHRlcm4gdm9pZCBwcGM2eHhfaWRsZSh2b2lkKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LTQ0eC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUtNDR4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3NzJhZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LTQ0eC5oCkBAIC0wLDAgKzEsNzYgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX01NVV80NFhfSF8KKyNkZWZpbmUgX0FTTV9QT1dFUlBDX01NVV80NFhfSF8KKy8qCisgKiBQUEM0NDAgc3VwcG9ydAorICovCisKKyNkZWZpbmUgUFBDNDR4X01NVUNSX1RJRAkweDAwMDAwMGZmCisjZGVmaW5lIFBQQzQ0eF9NTVVDUl9TVFMJMHgwMDAxMDAwMAorCisjZGVmaW5lCVBQQzQ0eF9UTEJfUEFHRUlECTAKKyNkZWZpbmUJUFBDNDR4X1RMQl9YTEFUCQkxCisjZGVmaW5lCVBQQzQ0eF9UTEJfQVRUUklCCTIKKworLyogUGFnZSBpZGVudGlmaWNhdGlvbiBmaWVsZHMgKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9FUE5fTUFTSwkweGZmZmZmYzAwICAgICAgLyogRWZmZWN0aXZlIFBhZ2UgTnVtYmVyICovCisjZGVmaW5lCVBQQzQ0eF9UTEJfVkFMSUQJMHgwMDAwMDIwMCAgICAgIC8qIFZhbGlkIGZsYWcgKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9UUwkJMHgwMDAwMDEwMAkvKiBUcmFuc2xhdGlvbiBhZGRyZXNzIHNwYWNlICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfMUsJCTB4MDAwMDAwMDAJLyogUGFnZSBzaXplcyAqLworI2RlZmluZSBQUEM0NHhfVExCXzRLCQkweDAwMDAwMDEwCisjZGVmaW5lIFBQQzQ0eF9UTEJfMTZLCQkweDAwMDAwMDIwCisjZGVmaW5lIFBQQzQ0eF9UTEJfNjRLCQkweDAwMDAwMDMwCisjZGVmaW5lIFBQQzQ0eF9UTEJfMjU2SwkJMHgwMDAwMDA0MAorI2RlZmluZSBQUEM0NHhfVExCXzFNCQkweDAwMDAwMDUwCisjZGVmaW5lIFBQQzQ0eF9UTEJfMTZNCQkweDAwMDAwMDcwCisjZGVmaW5lCVBQQzQ0eF9UTEJfMjU2TQkJMHgwMDAwMDA5MAorCisvKiBUcmFuc2xhdGlvbiBmaWVsZHMgKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9SUE5fTUFTSwkweGZmZmZmYzAwICAgICAgLyogUmVhbCBQYWdlIE51bWJlciAqLworI2RlZmluZQlQUEM0NHhfVExCX0VSUE5fTUFTSwkweDAwMDAwMDBmCisKKy8qIFN0b3JhZ2UgYXR0cmlidXRlIGFuZCBhY2Nlc3MgY29udHJvbCBmaWVsZHMgKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9BVFRSX01BU0sJMHgwMDAwZmY4MAorI2RlZmluZSBQUEM0NHhfVExCX1UwCQkweDAwMDA4MDAwICAgICAgLyogVXNlciAwICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfVTEJCTB4MDAwMDQwMDAgICAgICAvKiBVc2VyIDEgKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9VMgkJMHgwMDAwMjAwMCAgICAgIC8qIFVzZXIgMiAqLworI2RlZmluZSBQUEM0NHhfVExCX1UzCQkweDAwMDAxMDAwICAgICAgLyogVXNlciAzICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfVwkJMHgwMDAwMDgwMCAgICAgIC8qIENhY2hpbmcgaXMgd3JpdGUtdGhyb3VnaCAqLworI2RlZmluZSBQUEM0NHhfVExCX0kJCTB4MDAwMDA0MDAgICAgICAvKiBDYWNoaW5nIGlzIGluaGliaXRlZCAqLworI2RlZmluZSBQUEM0NHhfVExCX00JCTB4MDAwMDAyMDAgICAgICAvKiBNZW1vcnkgaXMgY29oZXJlbnQgKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9HCQkweDAwMDAwMTAwICAgICAgLyogTWVtb3J5IGlzIGd1YXJkZWQgKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9FCQkweDAwMDAwMDgwICAgICAgLyogTWVtb3J5IGlzIGd1YXJkZWQgKi8KKworI2RlZmluZSBQUEM0NHhfVExCX1BFUk1fTUFTSwkweDAwMDAwMDNmCisjZGVmaW5lIFBQQzQ0eF9UTEJfVVgJCTB4MDAwMDAwMjAgICAgICAvKiBVc2VyIGV4ZWN1dGlvbiAqLworI2RlZmluZSBQUEM0NHhfVExCX1VXCQkweDAwMDAwMDEwICAgICAgLyogVXNlciB3cml0ZSAqLworI2RlZmluZSBQUEM0NHhfVExCX1VSCQkweDAwMDAwMDA4ICAgICAgLyogVXNlciByZWFkICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfU1gJCTB4MDAwMDAwMDQgICAgICAvKiBTdXBlciBleGVjdXRpb24gKi8KKyNkZWZpbmUgUFBDNDR4X1RMQl9TVwkJMHgwMDAwMDAwMiAgICAgIC8qIFN1cGVyIHdyaXRlICovCisjZGVmaW5lIFBQQzQ0eF9UTEJfU1IJCTB4MDAwMDAwMDEgICAgICAvKiBTdXBlciByZWFkICovCisKKy8qIE51bWJlciBvZiBUTEIgZW50cmllcyAqLworI2RlZmluZSBQUEM0NHhfVExCX1NJWkUJCTY0CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHBoeXNfYWRkcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBpZDsKKwl1bnNpZ25lZCBsb25nIHZkc29fYmFzZTsKK30gbW1fY29udGV4dF90OworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWZuZGVmIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4CisjZGVmaW5lIFBQQzQ0eF9FQVJMWV9UTEJTCTEKKyNlbHNlCisjZGVmaW5lIFBQQzQ0eF9FQVJMWV9UTEJTCTIKKyNkZWZpbmUgUFBDNDR4X0VBUkxZX0RFQlVHX1ZJUlRBRERSCShBU01fQ09OU1QoMHhmMDAwMDAwMCkgXAorCXwgKEFTTV9DT05TVChDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eF9QSFlTTE9XKSAmIDB4ZmZmZikpCisjZW5kaWYKKworLyogU2l6ZSBvZiB0aGUgVExCcyB1c2VkIGZvciBwaW5uaW5nIGluIGxvd21lbSAqLworI2RlZmluZSBQUENfUElOX1NJWkUJKDEgPDwgMjgpCS8qIDI1Nk0gKi8KKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19NTVVfNDRYX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS1oYXNoNjQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LWhhc2g2NC5oCmluZGV4IDY3Mzk0NTcuLmI4ZGNhMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LWhhc2g2NC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LWhhc2g2NC5oCkBAIC03Myw4ICs3Myw5IEBACiAKICNkZWZpbmUgSFBURVNfUEVSX0dST1VQIDgKIAorI2RlZmluZSBIUFRFX1ZfU1NJWkVfU0hJRlQJNjIKICNkZWZpbmUgSFBURV9WX0FWUE5fU0hJRlQJNwotI2RlZmluZSBIUFRFX1ZfQVZQTgkJQVNNX0NPTlNUKDB4ZmZmZmZmZmZmZmZmZmY4MCkKKyNkZWZpbmUgSFBURV9WX0FWUE4JCUFTTV9DT05TVCgweDNmZmZmZmZmZmZmZmZmODApCiAjZGVmaW5lIEhQVEVfVl9BVlBOX1ZBTCh4KQkoKCh4KSAmIEhQVEVfVl9BVlBOKSA+PiBIUFRFX1ZfQVZQTl9TSElGVCkKICNkZWZpbmUgSFBURV9WX0NPTVBBUkUoeCx5KQkoISgoKHgpIF4gKHkpKSAmIEhQVEVfVl9BVlBOKSkKICNkZWZpbmUgSFBURV9WX0JPTFRFRAkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAxMCkKQEAgLTE1MSw2ICsxNTIsMTUgQEAKICNkZWZpbmUgTU1VX1BBR0VfMTZHCQk1CS8qIDE2RyAqLwogI2RlZmluZSBNTVVfUEFHRV9DT1VOVAkJNgogCisvKgorICogU2VnbWVudCBzaXplcy4KKyAqIFRoZXNlIGFyZSB0aGUgdmFsdWVzIHVzZWQgYnkgaGFyZHdhcmUgaW4gdGhlIEIgZmllbGQgb2YKKyAqIFNMQiBlbnRyaWVzIGFuZCB0aGUgZmlyc3QgZHdvcmQgb2YgTU1VIGhhc2h0YWJsZSBlbnRyaWVzLgorICogVGhlIEIgZmllbGQgaXMgMiBiaXRzOyB0aGUgdmFsdWVzIDIgYW5kIDMgYXJlIHVudXNlZCBhbmQgcmVzZXJ2ZWQuCisgKi8KKyNkZWZpbmUgTU1VX1NFR1NJWkVfMjU2TQkwCisjZGVmaW5lIE1NVV9TRUdTSVpFXzFUCQkxCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qCkBAIC0zNTAsMTAgKzM2MCwxMyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJbW1fY29udGV4dF9pZF90IGlkOwotCXUxNiB1c2VyX3BzaXplOwkJCS8qIHBhZ2Ugc2l6ZSBpbmRleCAqLwotCXUxNiBzbGxwOwkJCS8qIFNMQiBlbnRyeSBwYWdlIHNpemUgZW5jb2RpbmcgKi8KLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0JdTE2IGxvd19odGxiX2FyZWFzLCBoaWdoX2h0bGJfYXJlYXM7CisJdTE2IHVzZXJfcHNpemU7CQkvKiBwYWdlIHNpemUgaW5kZXggKi8KKworI2lmZGVmIENPTkZJR19QUENfTU1fU0xJQ0VTCisJdTY0IGxvd19zbGljZXNfcHNpemU7CS8qIFNMQiBwYWdlIHNpemUgZW5jb2RpbmdzICovCisJdTY0IGhpZ2hfc2xpY2VzX3BzaXplOyAgLyogNCBiaXRzIHBlciBzbGljZSBmb3Igbm93ICovCisjZWxzZQorCXUxNiBzbGxwOwkJLyogU0xCIHBhZ2Ugc2l6ZSBlbmNvZGluZyAqLwogI2VuZGlmCiAJdW5zaWduZWQgbG9uZyB2ZHNvX2Jhc2U7CiB9IG1tX2NvbnRleHRfdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS5oCmluZGV4IDA2YjNlNmQuLmZlNTEwZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUuaApAQCAtNSw5ICs1LDEyIEBACiAjaWZkZWYgQ09ORklHX1BQQzY0CiAvKiA2NC1iaXQgY2xhc3NpYyBoYXNoIHRhYmxlIE1NVSAqLwogIyAgaW5jbHVkZSA8YXNtL21tdS1oYXNoNjQuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0eCkKKy8qIDQ0eC1zdHlsZSBzb2Z0d2FyZSBsb2FkZWQgVExCICovCisjICBpbmNsdWRlIDxhc20vbW11LTQ0eC5oPgogI2Vsc2UKLS8qIDMyLWJpdC4gIEZJWE1FOiBzcGxpdCB1cCB0aGUgMzItYml0IE1NVSB0eXBlcywgYW5kIHJldmlzZSBmb3IKLSAqIGFyY2gvcG93ZXJwYyAqLworLyogT3RoZXIgMzItYml0LiAgRklYTUU6IHNwbGl0IHVwIHRoZSBvdGhlciAzMi1iaXQgTU1VIHR5cGVzLCBhbmQKKyAqIHJldmlzZSBmb3IgYXJjaC9wb3dlcnBjICovCiAjICBpbmNsdWRlIDxhc20tcHBjL21tdS5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11X2NvbnRleHQuaAppbmRleCBjMGQ3Nzk1Li40MGM5ZTVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXVfY29udGV4dC5oCkBAIC04LDYgKzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CQogI2luY2x1ZGUgPGxpbnV4L21tLmg+CQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgkKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbV9ob29rcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW16b25lLmgKaW5kZXggZDQ4NGNhOS4uMTlmMjk5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21tem9uZS5oCkBAIC00Myw5ICs0Myw1IEBACiAKICNlbmRpZiAvKiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUyAqLwogCi0jaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklECi1leHRlcm4gaW50IF9faW5pdCBlYXJseV9wZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKTsKLSNlbmRpZgotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fTU1aT05FX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21wYzUyeHguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjNTJ4eC5oCmluZGV4IDdhZmQ1YmYuLmM0NjMxZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjNTJ4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjNTJ4eC5oCkBAIC0yNTMsNSArMjUzLDE2IEBACiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAorI2lmZGVmIENPTkZJR19QTQorc3RydWN0IG1wYzUyeHhfc3VzcGVuZCB7CisJdm9pZCAoKmJvYXJkX3N1c3BlbmRfcHJlcGFyZSkodm9pZCBfX2lvbWVtICptYmFyKTsKKwl2b2lkICgqYm9hcmRfcmVzdW1lX2ZpbmlzaCkodm9pZCBfX2lvbWVtICptYmFyKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgbXBjNTJ4eF9zdXNwZW5kIG1wYzUyeHhfc3VzcGVuZDsKK2V4dGVybiBpbnQgX19pbml0IG1wYzUyeHhfcG1faW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgbXBjNTJ4eF9zZXRfd2FrZXVwX2dwaW8odTggcGluLCB1OCBsZXZlbCk7CisjZW5kaWYgLyogQ09ORklHX1BNICovCisKICNlbmRpZiAvKiBfX0FTTV9QT1dFUlBDX01QQzUyeHhfSF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjODI2MC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tcGM4MjYwLmgKaW5kZXggZjFiODNiMC4uZTBkNDgwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tcGM4MjYwLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tcGM4MjYwLmgKQEAgLTUsOCArNSw4IEBACiAgKiB0aGlzIG9uZSBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3dpdGNoaW5nIGlzIGRvbmUgaGVyZS4KICAqLwogI2lmZGVmIF9fS0VSTkVMX18KLSNpZm5kZWYgX19BU01fUFBDX01QQzgyNjBfSF9fCi0jZGVmaW5lIF9fQVNNX1BQQ19NUEM4MjYwX0hfXworI2lmbmRlZiBfX0FTTV9QT1dFUlBDX01QQzgyNjBfSF9fCisjZGVmaW5lIF9fQVNNX1BPV0VSUENfTVBDODI2MF9IX18KIAogCiAjaWZkZWYgQ09ORklHXzgyNjAKQEAgLTIwLDUgKzIwLDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogQ09ORklHXzgyNjAgKi8KLSNlbmRpZiAvKiAhX19BU01fUFBDX01QQzgyNjBfSF9fICovCisjZW5kaWYgLyogIV9fQVNNX1BPV0VSUENfTVBDODI2MF9IX18gKi8KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21waWMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBpYy5oCmluZGV4IGU0ZDVmYzUuLjJmZmIwNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBpYy5oCkBAIC0zLDYgKzMsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kY3IuaD4KIAogLyoKQEAgLTIyOCw2ICsyMjksMTQgQEAKICNlbmRpZiAvKiBDT05GSUdfUFBDX0RDUiAqLwogfTsKIAorc3RydWN0IG1waWNfaXJxX3NhdmUgeworCXUzMgkJdmVjcHJpbywKKwkJCWRlc3Q7CisjaWZkZWYgQ09ORklHX01QSUNfVTNfSFRfSVJRUworCXUzMgkJZml4dXBfZGF0YTsKKyNlbmRpZgorfTsKKwogLyogVGhlIGluc3RhbmNlIGRhdGEgb2YgYSBnaXZlbiBNUElDICovCiBzdHJ1Y3QgbXBpYwogewpAQCAtMjkyLDggKzMwMSwxOSBAQAogCXUzMgkJCSpod19zZXQ7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJc3BpbmxvY2tfdAkJYml0bWFwX2xvY2s7CisJdW5zaWduZWQgbG9uZwkJKmh3aXJxX2JpdG1hcDsKKyNlbmRpZgorCiAJLyogbGluayAqLwogCXN0cnVjdCBtcGljCQkqbmV4dDsKKworCXN0cnVjdCBzeXNfZGV2aWNlCXN5c2RldjsKKworI2lmZGVmIENPTkZJR19QTQorCXN0cnVjdCBtcGljX2lycV9zYXZlCSpzYXZlX2RhdGE7CisjZW5kaWYKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL29mX2RldmljZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9vZl9kZXZpY2UuaAppbmRleCA0ZjFhYWJlLi5lOWFmNDllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL29mX2RldmljZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvb2ZfZGV2aWNlLmgKQEAgLTMyLDYgKzMyLDggQEAKIGV4dGVybiB2b2lkIG9mX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KTsKIGV4dGVybiB2b2lkIG9mX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldik7CiAKK2V4dGVybiBzc2l6ZV90IG9mX2RldmljZV9nZXRfbW9kYWxpYXMoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJCWNoYXIgKnN0ciwgc3NpemVfdCBsZW4pOwogZXh0ZXJuIGludCBvZl9kZXZpY2VfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKIAljaGFyICoqZW52cCwgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKaW5kZXggY2Y5NTI3NC4uYzZhNWIxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKQEAgLTgzLDggKzgzLDggQEAKIAogCW1tX2NvbnRleHRfdCBjb250ZXh0OwogCXUxNiB2bWFsbG9jX3NsbHA7Ci0JdTE2IHNsYl9jYWNoZVtTTEJfQ0FDSEVfRU5UUklFU107CiAJdTE2IHNsYl9jYWNoZV9wdHI7CisJdTE2IHNsYl9jYWNoZVtTTEJfQ0FDSEVfRU5UUklFU107CiAKIAkvKgogCSAqIHRoZW4gbWlzY2VsbGFuZW91cyByZWFkLXdyaXRlIGZpZWxkcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2UuaAppbmRleCBiNGQzOGIwLi4xMGM1MWY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2UuaApAQCAtMTIxLDYgKzEyMSw3IEBACiAjZW5kaWYKIAogLyogUE1EIGxldmVsICovCisjaWZkZWYgQ09ORklHX1BQQzY0CiB0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBtZF90OwogI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQogI2RlZmluZSBfX3BtZCh4KQkoKHBtZF90KSB7ICh4KSB9KQpAQCAtMTMwLDcgKzEzMSw4IEBACiB0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHVkOyB9IHB1ZF90OwogI2RlZmluZSBwdWRfdmFsKHgpCSgoeCkucHVkKQogI2RlZmluZSBfX3B1ZCh4KQkoKHB1ZF90KSB7ICh4KSB9KQotI2VuZGlmCisjZW5kaWYgLyogIUNPTkZJR19QUENfNjRLX1BBR0VTICovCisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIC8qIFBHRCBsZXZlbCAqLwogdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBnZDsgfSBwZ2RfdDsKQEAgLTE1OSwxNSArMTYxLDE3IEBACiAjZW5kaWYKIAogCisjaWZkZWYgQ09ORklHX1BQQzY0CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG1kX3Q7CiAjZGVmaW5lIHBtZF92YWwoeCkJKHgpCiAjZGVmaW5lIF9fcG1kKHgpCSh4KQogCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpICYmICFkZWZpbmVkKENPTkZJR19QUENfNjRLX1BBR0VTKQorI2lmbmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHB1ZF90OwogI2RlZmluZSBwdWRfdmFsKHgpCSh4KQogI2RlZmluZSBfX3B1ZCh4KQkoeCkKLSNlbmRpZgorI2VuZGlmIC8qICFDT05GSUdfUFBDXzY0S19QQUdFUyAqLworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdkX3Q7CiAjZGVmaW5lIHBnZF92YWwoeCkJKHgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2VfMzIuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFnZV8zMi5oCmluZGV4IDA3ZjZkM2MuLjM3NGQwZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFnZV8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFnZV8zMi5oCkBAIC0xNCwxMSArMTQsOSBAQAogI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHB0ZV9iYXNpY190OwogI2RlZmluZSBQVEVfU0hJRlQJKFBBR0VfU0hJRlQgLSAzKQkvKiA1MTIgcHRlcyBwZXIgcGFnZSAqLwotI2RlZmluZSBQVEVfRk1UCQkiJTE2THgiCiAjZWxzZQogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZV9iYXNpY190OwogI2RlZmluZSBQVEVfU0hJRlQJKFBBR0VfU0hJRlQgLSAyKQkvKiAxMDI0IHB0ZXMgcGVyIHBhZ2UgKi8KLSNkZWZpbmUgUFRFX0ZNVAkJIiUuOGx4IgogI2VuZGlmCiAKIHN0cnVjdCBwYWdlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlXzY0LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2VfNjQuaAppbmRleCBlYWI3NzljLi4zNDQ4YTNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2VfNjQuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2VfNjQuaApAQCAtODgsNTggKzg4LDU2IEBACiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAotI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKyNpZmRlZiBDT05GSUdfUFBDX01NX1NMSUNFUwogCi0jZGVmaW5lIEhUTEJfQVJFQV9TSElGVAkJNDAKLSNkZWZpbmUgSFRMQl9BUkVBX1NJWkUJCSgxVUwgPDwgSFRMQl9BUkVBX1NISUZUKQotI2RlZmluZSBHRVRfSFRMQl9BUkVBKHgpCSgoeCkgPj4gSFRMQl9BUkVBX1NISUZUKQorI2RlZmluZSBTTElDRV9MT1dfU0hJRlQJCTI4CisjZGVmaW5lIFNMSUNFX0hJR0hfU0hJRlQJNDAKIAotI2RlZmluZSBMT1dfRVNJRF9NQVNLKGFkZHIsIGxlbikgICAgXAotCSgoKDFVIDw8IChHRVRfRVNJRChtaW4oKGFkZHIpKyhsZW4pLTEsIDB4MTAwMDAwMDAwVUwpKSsxKSkgXAotCSAgLSAoMVUgPDwgR0VUX0VTSUQobWluKChhZGRyKSwgMHgxMDAwMDAwMDBVTCkpKSkgJiAweGZmZmYpCi0jZGVmaW5lIEhUTEJfQVJFQV9NQVNLKGFkZHIsIGxlbikgICAoKCgxVSA8PCAoR0VUX0hUTEJfQVJFQShhZGRyK2xlbi0xKSsxKSkgXAotCQkgICAgICAgICAgICAgICAgICAgICAgLSAoMVUgPDwgR0VUX0hUTEJfQVJFQShhZGRyKSkpICYgMHhmZmZmKQorI2RlZmluZSBTTElDRV9MT1dfVE9QCQkoMHgxMDAwMDAwMDB1bCkKKyNkZWZpbmUgU0xJQ0VfTlVNX0xPVwkJKFNMSUNFX0xPV19UT1AgPj4gU0xJQ0VfTE9XX1NISUZUKQorI2RlZmluZSBTTElDRV9OVU1fSElHSAkJKFBHVEFCTEVfUkFOR0UgPj4gU0xJQ0VfSElHSF9TSElGVCkKKworI2RlZmluZSBHRVRfTE9XX1NMSUNFX0lOREVYKGFkZHIpCSgoYWRkcikgPj4gU0xJQ0VfTE9XX1NISUZUKQorI2RlZmluZSBHRVRfSElHSF9TTElDRV9JTkRFWChhZGRyKQkoKGFkZHIpID4+IFNMSUNFX0hJR0hfU0hJRlQpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBzbGljZV9tYXNrIHsKKwl1MTYgbG93X3NsaWNlczsKKwl1MTYgaGlnaF9zbGljZXM7Cit9OworCitzdHJ1Y3QgbW1fc3RydWN0OworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzbGljZV9nZXRfdW5tYXBwZWRfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgcHNpemUsCisJCQkJCSAgICAgaW50IHRvcGRvd24sCisJCQkJCSAgICAgaW50IHVzZV9jYWNoZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X3NsaWNlX3BzaXplKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIpOworCitleHRlcm4gdm9pZCBzbGljZV9pbml0X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBwc2l6ZSk7CitleHRlcm4gdm9pZCBzbGljZV9zZXRfdXNlcl9wc2l6ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHBzaXplKTsKIAogI2RlZmluZSBBUkNIX0hBU19IVUdFUEFHRV9PTkxZX1JBTkdFCitleHRlcm4gaW50IGlzX2h1Z2VwYWdlX29ubHlfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbGVuKTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2Vsc2UKKyNkZWZpbmUgc2xpY2VfaW5pdCgpCisjZW5kaWYgLyogQ09ORklHX1BQQ19NTV9TTElDRVMgKi8KKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKwogI2RlZmluZSBBUkNIX0hBU19IVUdFVExCX0ZSRUVfUEdEX1JBTkdFCi0jZGVmaW5lIEFSQ0hfSEFTX1BSRVBBUkVfSFVHRVBBR0VfUkFOR0UKICNkZWZpbmUgQVJDSF9IQVNfU0VUQ0xFQVJfSFVHRV9QVEUKLQotI2RlZmluZSB0b3VjaGVzX2h1Z2VwYWdlX2xvd19yYW5nZShtbSwgYWRkciwgbGVuKSBcCi0JKCgoYWRkcikgPCAweDEwMDAwMDAwMFVMKSBcCi0JICYmIChMT1dfRVNJRF9NQVNLKChhZGRyKSwgKGxlbikpICYgKG1tKS0+Y29udGV4dC5sb3dfaHRsYl9hcmVhcykpCi0jZGVmaW5lIHRvdWNoZXNfaHVnZXBhZ2VfaGlnaF9yYW5nZShtbSwgYWRkciwgbGVuKSBcCi0JKCgoKGFkZHIpICsgKGxlbikpID4gMHgxMDAwMDAwMDBVTCkgXAotCSAgJiYgKEhUTEJfQVJFQV9NQVNLKChhZGRyKSwgKGxlbikpICYgKG1tKS0+Y29udGV4dC5oaWdoX2h0bGJfYXJlYXMpKQotCi0jZGVmaW5lIF9fd2l0aGluX2h1Z2VwYWdlX2xvd19yYW5nZShhZGRyLCBsZW4sIHNlZ21hc2spIFwKLQkoICgoKGFkZHIpKyhsZW4pKSA8PSAweDEwMDAwMDAwMFVMKSBcCi0JICAmJiAoKExPV19FU0lEX01BU0soKGFkZHIpLCAobGVuKSkgfCAoc2VnbWFzaykpID09IChzZWdtYXNrKSkpCi0jZGVmaW5lIHdpdGhpbl9odWdlcGFnZV9sb3dfcmFuZ2UoYWRkciwgbGVuKSBcCi0JX193aXRoaW5faHVnZXBhZ2VfbG93X3JhbmdlKChhZGRyKSwgKGxlbiksIFwKLQkJCQkgICAgY3VycmVudC0+bW0tPmNvbnRleHQubG93X2h0bGJfYXJlYXMpCi0jZGVmaW5lIF9fd2l0aGluX2h1Z2VwYWdlX2hpZ2hfcmFuZ2UoYWRkciwgbGVuLCB6b25lbWFzaykgXAotCSggKChhZGRyKSA+PSAweDEwMDAwMDAwMFVMKSBcCi0JICAmJiAoKEhUTEJfQVJFQV9NQVNLKChhZGRyKSwgKGxlbikpIHwgKHpvbmVtYXNrKSkgPT0gKHpvbmVtYXNrKSkpCi0jZGVmaW5lIHdpdGhpbl9odWdlcGFnZV9oaWdoX3JhbmdlKGFkZHIsIGxlbikgXAotCV9fd2l0aGluX2h1Z2VwYWdlX2hpZ2hfcmFuZ2UoKGFkZHIpLCAobGVuKSwgXAotCQkJCSAgICBjdXJyZW50LT5tbS0+Y29udGV4dC5oaWdoX2h0bGJfYXJlYXMpCi0KLSNkZWZpbmUgaXNfaHVnZXBhZ2Vfb25seV9yYW5nZShtbSwgYWRkciwgbGVuKSBcCi0JKHRvdWNoZXNfaHVnZXBhZ2VfaGlnaF9yYW5nZSgobW0pLCAoYWRkciksIChsZW4pKSB8fCBcCi0JICB0b3VjaGVzX2h1Z2VwYWdlX2xvd19yYW5nZSgobW0pLCAoYWRkciksIChsZW4pKSkKICNkZWZpbmUgSEFWRV9BUkNIX0hVR0VUTEJfVU5NQVBQRURfQVJFQQogCi0jZGVmaW5lIGluX2h1Z2VwYWdlX2FyZWEoY29udGV4dCwgYWRkcikgXAotCShjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl8xNk1fUEFHRSkgJiYgXAotCSAoICggKGFkZHIpID49IDB4MTAwMDAwMDAwVUwpIFwKLQkgICA/ICgoMSA8PCBHRVRfSFRMQl9BUkVBKGFkZHIpKSAmIChjb250ZXh0KS5oaWdoX2h0bGJfYXJlYXMpIFwKLQkgICA6ICgoMSA8PCBHRVRfRVNJRChhZGRyKSkgJiAoY29udGV4dCkubG93X2h0bGJfYXJlYXMpICkgKQotCi0jZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJfUEFHRSAqLwotCi0jZGVmaW5lIGluX2h1Z2VwYWdlX2FyZWEobW0sIGFkZHIpCTAKLQogI2VuZGlmIC8qICFDT05GSUdfSFVHRVRMQl9QQUdFICovCiAKICNpZmRlZiBNT0RVTEUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFycG9ydC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYXJwb3J0LmgKaW5kZXggYjM3YjgxZS4uNDE0YzUwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYXJwb3J0LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYXJwb3J0LmgKQEAgLTEyLDExICsxMiw2IEBACiAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogCi1leHRlcm4gc3RydWN0IHBhcnBvcnQgKnBhcnBvcnRfcGNfcHJvYmVfcG9ydCAodW5zaWduZWQgbG9uZyBpbnQgYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCBiYXNlX2hpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpcnEsIGludCBkbWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBjaV9kZXYgKmRldik7Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHBhcnBvcnRfcGNfZmluZF9ub25wY2lfcG9ydHMgKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLTMyLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BnYWxsb2MtMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTMwNzQzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLTMyLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUEdBTExPQ18zMl9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QR0FMTE9DXzMyX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworZXh0ZXJuIHZvaWQgX19iYWRfcHRlKHBtZF90ICpwbWQpOworCitleHRlcm4gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBwZ2RfZnJlZShwZ2RfdCAqcGdkKTsKKworLyoKKyAqIFdlIGRvbid0IGhhdmUgYW55IHJlYWwgcG1kJ3MsIGFuZCB0aGlzIGNvZGUgbmV2ZXIgdHJpZ2dlcnMgYmVjYXVzZQorICogdGhlIHBnZCB3aWxsIGFsd2F5cyBiZSBwcmVzZW50Li4KKyAqLworLyogI2RlZmluZSBwbWRfYWxsb2Nfb25lKG1tLGFkZHJlc3MpICAgICAgICh7IEJVRygpOyAoKHBtZF90ICopMik7IH0pICovCisjZGVmaW5lIHBtZF9mcmVlKHgpICAgICAgICAgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIseCkJCWRvIHsgfSB3aGlsZSAoMCkKKy8qICNkZWZpbmUgcGdkX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkgICAgICBCVUcoKSAqLworCisjaWZuZGVmIENPTkZJR19CT09LRQorI2RlZmluZSBwbWRfcG9wdWxhdGVfa2VybmVsKG1tLCBwbWQsIHB0ZSkJXAorCQkocG1kX3ZhbCgqKHBtZCkpID0gX19wYShwdGUpIHwgX1BNRF9QUkVTRU5UKQorI2RlZmluZSBwbWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKQlcCisJCShwbWRfdmFsKCoocG1kKSkgPSAocGFnZV90b19wZm4ocHRlKSA8PCBQQUdFX1NISUZUKSB8IF9QTURfUFJFU0VOVCkKKyNlbHNlCisjZGVmaW5lIHBtZF9wb3B1bGF0ZV9rZXJuZWwobW0sIHBtZCwgcHRlKQlcCisJCShwbWRfdmFsKCoocG1kKSkgPSAodW5zaWduZWQgbG9uZylwdGUgfCBfUE1EX1BSRVNFTlQpCisjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpCVwKKwkJKHBtZF92YWwoKihwbWQpKSA9ICh1bnNpZ25lZCBsb25nKWxvd21lbV9wYWdlX2FkZHJlc3MocHRlKSB8IF9QTURfUFJFU0VOVCkKKyNlbmRpZgorCitleHRlcm4gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHN0cnVjdCBwYWdlICpwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHB0ZV90ICpwdGUpOworZXh0ZXJuIHZvaWQgcHRlX2ZyZWUoc3RydWN0IHBhZ2UgKnB0ZSk7CisKKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUpCXB0ZV9mcmVlKChwdGUpKQorCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QR0FMTE9DXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGdhbGxvYy02NC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLTY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkMDI5NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGdhbGxvYy02NC5oCkBAIC0wLDAgKzEsMTQ4IEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19QR0FMTE9DXzY0X0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHQUxMT0NfNjRfSAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKworZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpwZ3RhYmxlX2NhY2hlW107CisKKyNkZWZpbmUgUEdEX0NBQ0hFX05VTQkJMAorI2RlZmluZSBQVURfQ0FDSEVfTlVNCQkxCisjZGVmaW5lIFBNRF9DQUNIRV9OVU0JCTEKKyNkZWZpbmUgSFVHRVBURV9DQUNIRV9OVU0JMgorI2RlZmluZSBQVEVfTk9OQ0FDSEVfTlVNCTMgIC8qIGZyb20gR0ZQIHJhdGhlciB0aGFuIGttZW1fY2FjaGUgKi8KKworc3RhdGljIGlubGluZSBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHBndGFibGVfY2FjaGVbUEdEX0NBQ0hFX05VTV0sIEdGUF9LRVJORUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUocGdkX3QgKnBnZCkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUocGd0YWJsZV9jYWNoZVtQR0RfQ0FDSEVfTlVNXSwgcGdkKTsKK30KKworI2lmbmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUworCisjZGVmaW5lIHBnZF9wb3B1bGF0ZShNTSwgUEdELCBQVUQpCXBnZF9zZXQoUEdELCBQVUQpCisKK3N0YXRpYyBpbmxpbmUgcHVkX3QgKnB1ZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhwZ3RhYmxlX2NhY2hlW1BVRF9DQUNIRV9OVU1dLAorCQkJCUdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB1ZF9mcmVlKHB1ZF90ICpwdWQpCit7CisJa21lbV9jYWNoZV9mcmVlKHBndGFibGVfY2FjaGVbUFVEX0NBQ0hFX05VTV0sIHB1ZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpCit7CisJcHVkX3NldChwdWQsICh1bnNpZ25lZCBsb25nKXBtZCk7Cit9CisKKyNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZV9wYWdlKSBcCisJcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwYWdlX2FkZHJlc3MocHRlX3BhZ2UpKQorI2RlZmluZSBwbWRfcG9wdWxhdGVfa2VybmVsKG1tLCBwbWQsIHB0ZSkgcG1kX3NldChwbWQsICh1bnNpZ25lZCBsb25nKShwdGUpKQorCisKKyNlbHNlIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCisKKyNkZWZpbmUgcHVkX3BvcHVsYXRlKG1tLCBwdWQsIHBtZCkJcHVkX3NldChwdWQsICh1bnNpZ25lZCBsb25nKXBtZCkKKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCisJCQkJICAgICAgIHB0ZV90ICpwdGUpCit7CisJcG1kX3NldChwbWQsICh1bnNpZ25lZCBsb25nKXB0ZSk7Cit9CisKKyNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZV9wYWdlKSBcCisJcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwYWdlX2FkZHJlc3MocHRlX3BhZ2UpKQorCisjZW5kaWYgLyogQ09ORklHX1BQQ182NEtfUEFHRVMgKi8KKworc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHBndGFibGVfY2FjaGVbUE1EX0NBQ0hFX05VTV0sCisJCQkJR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2ZyZWUocG1kX3QgKnBtZCkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUocGd0YWJsZV9jYWNoZVtQTURfQ0FDSEVfTlVNXSwgcG1kKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworICAgICAgICByZXR1cm4gKHB0ZV90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9SRVBFQVQgfCBfX0dGUF9aRVJPKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlwdGVfdCAqcHRlID0gcHRlX2FsbG9jX29uZV9rZXJuZWwobW0sIGFkZHJlc3MpOworCXJldHVybiBwdGUgPyB2aXJ0X3RvX3BhZ2UocHRlKSA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwocHRlX3QgKnB0ZSkKK3sKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBwYWdlICpwdGVwYWdlKQoreworCV9fZnJlZV9wYWdlKHB0ZXBhZ2UpOworfQorCisjZGVmaW5lIFBHRl9DQUNIRU5VTV9NQVNLCTB4MworCit0eXBlZGVmIHN0cnVjdCBwZ3RhYmxlX2ZyZWUgeworCXVuc2lnbmVkIGxvbmcgdmFsOworfSBwZ3RhYmxlX2ZyZWVfdDsKKworc3RhdGljIGlubGluZSBwZ3RhYmxlX2ZyZWVfdCBwZ3RhYmxlX2ZyZWVfY2FjaGUodm9pZCAqcCwgaW50IGNhY2hlbnVtLAorCQkJCQkJdW5zaWduZWQgbG9uZyBtYXNrKQoreworCUJVR19PTihjYWNoZW51bSA+IFBHRl9DQUNIRU5VTV9NQVNLKTsKKworCXJldHVybiAocGd0YWJsZV9mcmVlX3Qpey52YWwgPSAoKHVuc2lnbmVkIGxvbmcpIHAgJiB+bWFzaykgfCBjYWNoZW51bX07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2ZyZWUocGd0YWJsZV9mcmVlX3QgcGdmKQoreworCXZvaWQgKnAgPSAodm9pZCAqKShwZ2YudmFsICYgflBHRl9DQUNIRU5VTV9NQVNLKTsKKwlpbnQgY2FjaGVudW0gPSBwZ2YudmFsICYgUEdGX0NBQ0hFTlVNX01BU0s7CisKKwlpZiAoY2FjaGVudW0gPT0gUFRFX05PTkNBQ0hFX05VTSkKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXApOworCWVsc2UKKwkJa21lbV9jYWNoZV9mcmVlKHBndGFibGVfY2FjaGVbY2FjaGVudW1dLCBwKTsKK30KKworZXh0ZXJuIHZvaWQgcGd0YWJsZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX2ZyZWVfdCBwZ2YpOworCisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcGFnZSkJXAorCXBndGFibGVfZnJlZV90bGIodGxiLCBwZ3RhYmxlX2ZyZWVfY2FjaGUocGFnZV9hZGRyZXNzKHB0ZXBhZ2UpLCBcCisJCVBURV9OT05DQUNIRV9OVU0sIFBURV9UQUJMRV9TSVpFLTEpKQorI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCkgCVwKKwlwZ3RhYmxlX2ZyZWVfdGxiKHRsYiwgcGd0YWJsZV9mcmVlX2NhY2hlKHBtZCwgXAorCQlQTURfQ0FDSEVfTlVNLCBQTURfVEFCTEVfU0laRS0xKSkKKyNpZm5kZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwdWQpCVwKKwlwZ3RhYmxlX2ZyZWVfdGxiKHRsYiwgcGd0YWJsZV9mcmVlX2NhY2hlKHB1ZCwgXAorCQlQVURfQ0FDSEVfTlVNLCBQVURfVEFCTEVfU0laRS0xKSkKKyNlbmRpZiAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLworCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QR0FMTE9DXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLmgKaW5kZXggYjA4MzBkYi4uYjQ1MDVlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLmgKQEAgLTIsMTU5ICsyLDExIEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19QR0FMTE9DX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpZm5kZWYgQ09ORklHX1BQQzY0Ci0jaW5jbHVkZSA8YXNtLXBwYy9wZ2FsbG9jLmg+CisjaWZkZWYgQ09ORklHX1BQQzY0CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MtNjQuaD4KICNlbHNlCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+Ci0KLWV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqcGd0YWJsZV9jYWNoZVtdOwotCi0jaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLSNkZWZpbmUgUFRFX0NBQ0hFX05VTQkwCi0jZGVmaW5lIFBNRF9DQUNIRV9OVU0JMQotI2RlZmluZSBQR0RfQ0FDSEVfTlVNCTIKLSNkZWZpbmUgSFVHRVBURV9DQUNIRV9OVU0gMwotI2Vsc2UKLSNkZWZpbmUgUFRFX0NBQ0hFX05VTQkwCi0jZGVmaW5lIFBNRF9DQUNIRV9OVU0JMQotI2RlZmluZSBQVURfQ0FDSEVfTlVNCTEKLSNkZWZpbmUgUEdEX0NBQ0hFX05VTQkwCi0jZGVmaW5lIEhVR0VQVEVfQ0FDSEVfTlVNIDIKKyNpbmNsdWRlIDxhc20vcGdhbGxvYy0zMi5oPgogI2VuZGlmCiAKLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLXN0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhwZ3RhYmxlX2NhY2hlW1BHRF9DQUNIRV9OVU1dLCBHRlBfS0VSTkVMKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBnZF9mcmVlKHBnZF90ICpwZ2QpCi17Ci0Ja21lbV9jYWNoZV9mcmVlKHBndGFibGVfY2FjaGVbUEdEX0NBQ0hFX05VTV0sIHBnZCk7Ci19Ci0KLSNpZm5kZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLQotI2RlZmluZSBwZ2RfcG9wdWxhdGUoTU0sIFBHRCwgUFVEKQlwZ2Rfc2V0KFBHRCwgUFVEKQotCi1zdGF0aWMgaW5saW5lIHB1ZF90ICpwdWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MocGd0YWJsZV9jYWNoZVtQVURfQ0FDSEVfTlVNXSwKLQkJCQlHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfZnJlZShwdWRfdCAqcHVkKQotewotCWttZW1fY2FjaGVfZnJlZShwZ3RhYmxlX2NhY2hlW1BVRF9DQUNIRV9OVU1dLCBwdWQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCBwbWRfdCAqcG1kKQotewotCXB1ZF9zZXQocHVkLCAodW5zaWduZWQgbG9uZylwbWQpOwotfQotCi0jZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGVfcGFnZSkgXAotCXBtZF9wb3B1bGF0ZV9rZXJuZWwobW0sIHBtZCwgcGFnZV9hZGRyZXNzKHB0ZV9wYWdlKSkKLSNkZWZpbmUgcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwdGUpIHBtZF9zZXQocG1kLCAodW5zaWduZWQgbG9uZykocHRlKSkKLQotCi0jZWxzZSAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLwotCi0jZGVmaW5lIHB1ZF9wb3B1bGF0ZShtbSwgcHVkLCBwbWQpCXB1ZF9zZXQocHVkLCAodW5zaWduZWQgbG9uZylwbWQpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAotCQkJCSAgICAgICBwdGVfdCAqcHRlKQotewotCXBtZF9zZXQocG1kLCAodW5zaWduZWQgbG9uZylwdGUpOwotfQotCi0jZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGVfcGFnZSkgXAotCXBtZF9wb3B1bGF0ZV9rZXJuZWwobW0sIHBtZCwgcGFnZV9hZGRyZXNzKHB0ZV9wYWdlKSkKLQotI2VuZGlmIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCi0KLXN0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhwZ3RhYmxlX2NhY2hlW1BNRF9DQUNIRV9OVU1dLAotCQkJCUdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBtZF9mcmVlKHBtZF90ICpwbWQpCi17Ci0Ja21lbV9jYWNoZV9mcmVlKHBndGFibGVfY2FjaGVbUE1EX0NBQ0hFX05VTV0sIHBtZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhwZ3RhYmxlX2NhY2hlW1BURV9DQUNIRV9OVU1dLAotCQkJCUdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlyZXR1cm4gdmlydF90b19wYWdlKHB0ZV9hbGxvY19vbmVfa2VybmVsKG1tLCBhZGRyZXNzKSk7Ci19Ci0JCQotc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChwdGVfdCAqcHRlKQotewotCWttZW1fY2FjaGVfZnJlZShwZ3RhYmxlX2NhY2hlW1BURV9DQUNIRV9OVU1dLCBwdGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IHBhZ2UgKnB0ZXBhZ2UpCi17Ci0JcHRlX2ZyZWVfa2VybmVsKHBhZ2VfYWRkcmVzcyhwdGVwYWdlKSk7Ci19Ci0KLSNkZWZpbmUgUEdGX0NBQ0hFTlVNX01BU0sJMHgzCi0KLXR5cGVkZWYgc3RydWN0IHBndGFibGVfZnJlZSB7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci19IHBndGFibGVfZnJlZV90OwotCi1zdGF0aWMgaW5saW5lIHBndGFibGVfZnJlZV90IHBndGFibGVfZnJlZV9jYWNoZSh2b2lkICpwLCBpbnQgY2FjaGVudW0sCi0JCQkJCQl1bnNpZ25lZCBsb25nIG1hc2spCi17Ci0JQlVHX09OKGNhY2hlbnVtID4gUEdGX0NBQ0hFTlVNX01BU0spOwotCi0JcmV0dXJuIChwZ3RhYmxlX2ZyZWVfdCl7LnZhbCA9ICgodW5zaWduZWQgbG9uZykgcCAmIH5tYXNrKSB8IGNhY2hlbnVtfTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBndGFibGVfZnJlZShwZ3RhYmxlX2ZyZWVfdCBwZ2YpCi17Ci0Jdm9pZCAqcCA9ICh2b2lkICopKHBnZi52YWwgJiB+UEdGX0NBQ0hFTlVNX01BU0spOwotCWludCBjYWNoZW51bSA9IHBnZi52YWwgJiBQR0ZfQ0FDSEVOVU1fTUFTSzsKLQotCWttZW1fY2FjaGVfZnJlZShwZ3RhYmxlX2NhY2hlW2NhY2hlbnVtXSwgcCk7Ci19Ci0KLWV4dGVybiB2b2lkIHBndGFibGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV9mcmVlX3QgcGdmKTsKLQotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZXBhZ2UpCVwKLQlwZ3RhYmxlX2ZyZWVfdGxiKHRsYiwgcGd0YWJsZV9mcmVlX2NhY2hlKHBhZ2VfYWRkcmVzcyhwdGVwYWdlKSwgXAotCQlQVEVfQ0FDSEVfTlVNLCBQVEVfVEFCTEVfU0laRS0xKSkKLSNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWQpIAlcCi0JcGd0YWJsZV9mcmVlX3RsYih0bGIsIHBndGFibGVfZnJlZV9jYWNoZShwbWQsIFwKLQkJUE1EX0NBQ0hFX05VTSwgUE1EX1RBQkxFX1NJWkUtMSkpCi0jaWZuZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCi0jZGVmaW5lIF9fcHVkX2ZyZWVfdGxiKHRsYiwgcHVkKQlcCi0JcGd0YWJsZV9mcmVlX3RsYih0bGIsIHBndGFibGVfZnJlZV9jYWNoZShwdWQsIFwKLQkJUFVEX0NBQ0hFX05VTSwgUFVEX1RBQkxFX1NJWkUtMSkpCi0jZW5kaWYgLyogQ09ORklHX1BQQ182NEtfUEFHRVMgKi8KLQotI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLTRrLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUtNGsuaAppbmRleCBhMjhmYThiLi5hZGQ1NDgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUtNGsuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUtNGsuaApAQCAtMSwzICsxLDUgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BHVEFCTEVfNEtfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUEdUQUJMRV80S19ICiAvKgogICogRW50cmllcyBwZXIgcGFnZSBkaXJlY3RvcnkgbGV2ZWwuICBUaGUgUFRFIGxldmVsIG11c3QgdXNlIGEgNjRiIHJlY29yZAogICogZm9yIGVhY2ggcGFnZSB0YWJsZSBlbnRyeS4gIFRoZSBQTUQgYW5kIFBHRCBsZXZlbCB1c2UgYSAzMmIgcmVjb3JkIGZvcgpAQCAtNzgsNyArODAsMTEgQEAKIAogI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfZW5kKCkgfSB3aGlsZSgwKQogCi0jZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChwdGUpCU1NVV9QQUdFXzRLCisjaWZkZWYgQ09ORklHX1BQQ19IQVNfSEFTSF82NEsKKyNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCWdldF9zbGljZV9wc2l6ZShtbSwgYWRkcikKKyNlbHNlCisjZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKQlNTVVfUEFHRV80SworI2VuZGlmCiAKIC8qCiAgKiA0LWxldmVsIHBhZ2UgdGFibGVzIHJlbGF0ZWQgYml0cwpAQCAtMTAwLDMgKzEwNiw0IEBACiAKICNkZWZpbmUgcmVtYXBfNGtfcGZuKHZtYSwgYWRkciwgcGZuLCBwcm90KQlcCiAJcmVtYXBfcGZuX3JhbmdlKCh2bWEpLCAoYWRkciksIChwZm4pLCBQQUdFX1NJWkUsIChwcm90KSkKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUEdUQUJMRV80S19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUtNjRrLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUtNjRrLmgKaW5kZXggNWU4NGYwNy4uMzFjYmQzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLTY0ay5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS02NGsuaApAQCAtMSw2ICsxLDUgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX1BHVEFCTEVfNjRLX0gKICNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHVEFCTEVfNjRLX0gKLSNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmg+CiAKQEAgLTM2LDYgKzM1LDExIEBACiAjZGVmaW5lIF9QQUdFX0hQVEVfU1VCMAkweDA4MDAwMDAwIC8qIGNvbWJvIG9ubHk6IGZpcnN0IHN1YiBwYWdlICovCiAjZGVmaW5lIF9QQUdFX0NPTUJPCTB4MTAwMDAwMDAgLyogdGhpcyBpcyBhIGNvbWJvIDRrIHBhZ2UgKi8KICNkZWZpbmUgX1BBR0VfNEtfUEZOCTB4MjAwMDAwMDAgLyogUEZOIGlzIGZvciBhIHNpbmdsZSA0ayBwYWdlICovCisKKy8qIE5vdGUgdGhlIGZ1bGwgcGFnZSBiaXRzIG11c3QgYmUgaW4gdGhlIHNhbWUgbG9jYXRpb24gYXMgZm9yIG5vcm1hbAorICogNGsgcGFnZXMgYXMgdGhlIHNhbWUgYXNzc2VtYmx5IHdpbGwgYmUgdXNlZCB0byBpbnNlcnQgNjRLIHBhZ2VzCisgKiB3ZXRoZXIgdGhlIGtlcm5lbCBoYXMgQ09ORklHX1BQQ182NEtfUEFHRVMgb3Igbm90CisgKi8KICNkZWZpbmUgX1BBR0VfRl9TRUNPTkQgIDB4MDAwMDgwMDAgLyogZnVsbCBwYWdlOiBoaWR4IGJpdHMgKi8KICNkZWZpbmUgX1BBR0VfRl9HSVggICAgIDB4MDAwMDcwMDAgLyogZnVsbCBwYWdlOiBoaWR4IGJpdHMgKi8KIApAQCAtNjUsOCArNjksNiBAQAogLyogQml0cyB0byBtYXNrIG91dCBmcm9tIGEgUEdEL1BVRCB0byBnZXQgdG8gdGhlIFBNRCBwYWdlICovCiAjZGVmaW5lIFBVRF9NQVNLRURfQklUUwkJMHgxZmYKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQogLyogTWFuaXB1bGF0ZSAicnB0ZSIgdmFsdWVzICovCiAjZGVmaW5lIF9fcmVhbF9wdGUoZSxwKSAJKChyZWFsX3B0ZV90KSB7IFwKIAkoZSksIHB0ZV92YWwoKigocCkgKyBQVFJTX1BFUl9QVEUpKSB9KQpAQCAtOTEsMTMgKzkzLDExIEBACiAKICNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX2VuZCgpIH0gd2hpbGUoMCk7IH0gfSB3aGlsZSgwKQogCi0jZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChwdGUpCVwKKyNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCVwKIAkoKChwdGUpICYgX1BBR0VfQ09NQk8pPyBNTVVfUEFHRV80SzogTU1VX1BBR0VfNjRLKQogCiAjZGVmaW5lIHJlbWFwXzRrX3Bmbih2bWEsIGFkZHIsIHBmbiwgcHJvdCkJCQkJXAogCXJlbWFwX3Bmbl9yYW5nZSgodm1hKSwgKGFkZHIpLCAocGZuKSwgUEFHRV9TSVpFLAkJXAogCQkJX19wZ3Byb3QocGdwcm90X3ZhbCgocHJvdCkpIHwgX1BBR0VfNEtfUEZOKSkKIAotI2VuZGlmIC8qICBfX0FTU0VNQkxZX18gKi8KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHVEFCTEVfNjRLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS1wcGMzMi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLXBwYzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg2M2JkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS1wcGMzMi5oCkBAIC0wLDAgKzEsNzk4IEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19QR1RBQkxFX1BQQzMyX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDMzJfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JCS8qIEZvciBUQVNLX1NJWkUgKi8KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4JCQkvKiBGb3Igc3ViLWFyY2ggc3BlY2lmaWMgUFBDX1BJTl9TSVpFICovCitzdHJ1Y3QgbW1fc3RydWN0OworCitleHRlcm4gdW5zaWduZWQgbG9uZyB2YV90b19waHlzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CitleHRlcm4gcHRlX3QgKnZhX3RvX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9yZW1hcF9ib3QsIGlvcmVtYXBfYmFzZTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIFRoZSBQb3dlclBDIE1NVSB1c2VzIGEgaGFzaCB0YWJsZSBjb250YWluaW5nIFBURXMsIHRvZ2V0aGVyIHdpdGgKKyAqIGEgc2V0IG9mIDE2IHNlZ21lbnQgcmVnaXN0ZXJzIChvbiAzMi1iaXQgaW1wbGVtZW50YXRpb25zKSwgdG8gZGVmaW5lCisgKiB0aGUgdmlydHVhbCB0byBwaHlzaWNhbCBhZGRyZXNzIG1hcHBpbmcuCisgKgorICogV2UgdXNlIHRoZSBoYXNoIHRhYmxlIGFzIGFuIGV4dGVuZGVkIFRMQiwgaS5lLiBhIGNhY2hlIG9mIGN1cnJlbnRseQorICogYWN0aXZlIG1hcHBpbmdzLiAgV2UgbWFpbnRhaW4gYSB0d28tbGV2ZWwgcGFnZSB0YWJsZSB0cmVlLCBtdWNoCisgKiBsaWtlIHRoYXQgdXNlZCBieSB0aGUgaTM4NiwgZm9yIHRoZSBzYWtlIG9mIHRoZSBMaW51eCBtZW1vcnkKKyAqIG1hbmFnZW1lbnQgY29kZS4gIExvdy1sZXZlbCBhc3NlbWJsZXIgY29kZSBpbiBoYXNodGFibGUuUworICogKHByb2NlZHVyZSBoYXNoX3BhZ2UpIGlzIHJlc3BvbnNpYmxlIGZvciBleHRyYWN0aW5nIHB0ZXMgZnJvbSB0aGUKKyAqIHRyZWUgYW5kIHB1dHRpbmcgdGhlbSBpbnRvIHRoZSBoYXNoIHRhYmxlIHdoZW4gbmVjZXNzYXJ5LCBhbmQKKyAqIHVwZGF0aW5nIHRoZSBhY2Nlc3NlZCBhbmQgbW9kaWZpZWQgYml0cyBpbiB0aGUgcGFnZSB0YWJsZSB0cmVlLgorICovCisKKy8qCisgKiBUaGUgUG93ZXJQQyBNUEM4eHggdXNlcyBhIFRMQiB3aXRoIGhhcmR3YXJlIGFzc2lzdGVkLCBzb2Z0d2FyZSB0YWJsZXdhbGsuCisgKiBXZSBhbHNvIHVzZSB0aGUgdHdvIGxldmVsIHRhYmxlcywgYnV0IHdlIGNhbiBwdXQgdGhlIHJlYWwgYml0cyBpbiB0aGVtCisgKiBuZWVkZWQgZm9yIHRoZSBUTEIgYW5kIHRhYmxld2Fsay4gIFRoZXNlIGRlZmluaXRpb25zIHJlcXVpcmUgTXhfQ1RSLlBQTSA9IDAsCisgKiBNeF9DVFIuUFBDUyA9IDAsIGFuZCBNRF9DVFIuVFdBTSA9IDEuICBUaGUgbGV2ZWwgMiBkZXNjcmlwdG9yIGhhcworICogYWRkaXRpb25hbCBwYWdlIHByb3RlY3Rpb24gKHdoZW4gTXhfQ1RSLlBQQ1MgPSAxKSB0aGF0IGFsbG93cyBUTEIgaGl0CisgKiBiYXNlZCB1cG9uIHVzZXIvc3VwZXIgYWNjZXNzLiAgVGhlIFRMQiBkb2VzIG5vdCBoYXZlIGFjY2Vzc2VkIG5vciB3cml0ZQorICogcHJvdGVjdC4gIFdlIGFzc3VtZSB0aGF0IGlmIHRoZSBUTEIgZ2V0IGxvYWRlZCB3aXRoIGFuIGVudHJ5IGl0IGlzCisgKiBhY2Nlc3NlZCwgYW5kIG92ZXJsb2FkIHRoZSBjaGFuZ2VkIGJpdCBmb3Igd3JpdGUgcHJvdGVjdC4gIFdlIHVzZQorICogdHdvIGJpdHMgaW4gdGhlIHNvZnR3YXJlIHB0ZSB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBzZXQgdG8gemVybyBpbgorICogdGhlIFRMQiBlbnRyeSAoMjQgYW5kIDI1KSBmb3IgdGhlc2UgaW5kaWNhdG9ycy4gIEFsdGhvdWdoIHRoZSBsZXZlbCAxCisgKiBkZXNjcmlwdG9yIGNvbnRhaW5zIHRoZSBndWFyZGVkIGFuZCB3cml0ZXRocm91Z2gvY29weWJhY2sgYml0cywgd2UgY2FuCisgKiBzZXQgdGhlc2UgYXQgdGhlIHBhZ2UgbGV2ZWwgc2luY2UgdGhleSBnZXQgY29waWVkIGZyb20gdGhlIE14X1RXQworICogcmVnaXN0ZXIgd2hlbiB0aGUgVExCIGVudHJ5IGlzIGxvYWRlZC4gIFdlIHdpbGwgdXNlIGJpdCAyNyBmb3IgZ3VhcmQsIHNpbmNlCisgKiB0aGF0IGlzIHdoZXJlIGl0IGV4aXN0cyBpbiB0aGUgTURfVFdDLCBhbmQgYml0IDI2IGZvciB3cml0ZXRocm91Z2guCisgKiBUaGVzZSB3aWxsIGdldCBtYXNrZWQgZnJvbSB0aGUgbGV2ZWwgMiBkZXNjcmlwdG9yIGF0IFRMQiBsb2FkIHRpbWUsIGFuZAorICogY29waWVkIHRvIHRoZSBNRF9UV0MgYmVmb3JlIGl0IGdldHMgbG9hZGVkLgorICogTGFyZ2UgcGFnZSBzaXplcyBhZGRlZC4gIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byBzaXplcywgNEsgYW5kIDhNLgorICogVGhpcyBhbHNvIGFsbG93cyBhIFRMQiBoYW5kZXIgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgY2FuIGRpcmVjdGx5CisgKiBsb2FkIHRoZSBQTUQgaW50byBNRF9UV0MuICBUaGUgOE0gcGFnZXMgYXJlIG9ubHkgdXNlZCBmb3Iga2VybmVsCisgKiBtYXBwaW5nIG9mIHdlbGwga25vd24gYXJlYXMuICBUaGUgUE1EIChQR0QpIGVudHJpZXMgY29udGFpbiBjb250cm9sCisgKiBmbGFncyBpbiBhZGRpdGlvbiB0byB0aGUgYWRkcmVzcywgc28gY2FyZSBtdXN0IGJlIHRha2VuIHRoYXQgdGhlCisgKiBzb2Z0d2FyZSBubyBsb25nZXIgYXNzdW1lcyB0aGVzZSBhcmUgb25seSBwb2ludGVycy4KKyAqLworCisvKgorICogQXQgcHJlc2VudCwgYWxsIFBvd2VyUEMgNDAwLWNsYXNzIHByb2Nlc3NvcnMgc2hhcmUgYSBzaW1pbGFyIFRMQgorICogYXJjaGl0ZWN0dXJlLiBUaGUgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgc2lkZXMgc2hhcmUgYSB1bmlmaWVkLAorICogNjQtZW50cnksIGZ1bGx5LWFzc29jaWF0aXZlIFRMQiB3aGljaCBpcyBtYWludGFpbmVkIHRvdGFsbHkgdW5kZXIKKyAqIHNvZnR3YXJlIGNvbnRyb2wuIEluIGFkZGl0aW9uLCB0aGUgaW5zdHJ1Y3Rpb24gc2lkZSBoYXMgYQorICogaGFyZHdhcmUtbWFuYWdlZCwgNC1lbnRyeSwgZnVsbHktYXNzb2NpYXRpdmUgVExCIHdoaWNoIHNlcnZlcyBhcyBhCisgKiBmaXJzdCBsZXZlbCB0byB0aGUgc2hhcmVkIFRMQi4gVGhlc2UgdHdvIFRMQnMgYXJlIGtub3duIGFzIHRoZSBVVExCCisgKiBhbmQgSVRMQiwgcmVzcGVjdGl2ZWx5IChzZWUgIm1tdS5oIiBmb3IgZGVmaW5pdGlvbnMpLgorICovCisKKy8qCisgKiBUaGUgbm9ybWFsIGNhc2UgaXMgdGhhdCBQVEVzIGFyZSAzMi1iaXRzIGFuZCB3ZSBoYXZlIGEgMS1wYWdlCisgKiAxMDI0LWVudHJ5IHBnZGlyIHBvaW50aW5nIHRvIDEtcGFnZSAxMDI0LWVudHJ5IFBURSBwYWdlcy4gIC0tIHBhdWx1cworICoKKyAqIEZvciBhbnkgPjMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzIHBsYXRmb3JtLCB3ZSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcKKyAqIHR3byBsZXZlbCBwYWdlIHRhYmxlIGxheW91dCB3aGVyZSB0aGUgcGdkaXIgaXMgOEtCIGFuZCB0aGUgTVMgMTMgYml0cworICogYXJlIGFuIGluZGV4IHRvIHRoZSBzZWNvbmQgbGV2ZWwgdGFibGUuICBUaGUgY29tYmluZWQgcGdkaXIvcG1kIGZpcnN0CisgKiBsZXZlbCBoYXMgMjA0OCBlbnRyaWVzIGFuZCB0aGUgc2Vjb25kIGxldmVsIGhhcyA1MTIgNjQtYml0IFBURSBlbnRyaWVzLgorICogLU1hdHQKKyAqLworLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdG9wLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQR0RJUl9TSElGVAkoUEFHRV9TSElGVCArIFBURV9TSElGVCkKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKy8qCisgKiBlbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbDogb3VyIHBhZ2UtdGFibGUgdHJlZSBpcyB0d28tbGV2ZWwsIHNvCisgKiB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhbnkgUE1EIGRpcmVjdG9yeS4KKyAqLworI2RlZmluZSBQVFJTX1BFUl9QVEUJKDEgPDwgUFRFX1NISUZUKQorI2RlZmluZSBQVFJTX1BFUl9QTUQJMQorI2RlZmluZSBQVFJTX1BFUl9QR0QJKDEgPDwgKDMyIC0gUEdESVJfU0hJRlQpKQorCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECShUQVNLX1NJWkUgLyBQR0RJUl9TSVpFKQorI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAorCisjZGVmaW5lIFVTRVJfUEdEX1BUUlMgKFBBR0VfT0ZGU0VUID4+IFBHRElSX1NISUZUKQorI2RlZmluZSBLRVJORUxfUEdEX1BUUlMgKFBUUlNfUEVSX1BHRC1VU0VSX1BHRF9QVFJTKQorCisjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlbGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBcCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcHRlX3ZhbChlKSkKKyNkZWZpbmUgcGdkX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcGdkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQorCisvKgorICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCisgKiBjdXJyZW50IDY0TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA2NE1CICJob2xlIiBhZnRlciB0aGUKKyAqIHBoeXNpY2FsIG1lbW9yeSB1bnRpbCB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IHN0YXJ0cy4gIFRoYXQgbWVhbnMgdGhhdAorICogYW55IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdpbGwgaG9wZWZ1bGx5IGJlIGNhdWdodC4KKyAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAorICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQorICoKKyAqIFdlIG5vIGxvbmdlciBtYXAgbGFyZ2VyIHRoYW4gcGh5cyBSQU0gd2l0aCB0aGUgQkFUcyBzbyB3ZSBkb24ndCBoYXZlCisgKiB0byB3b3JyeSBhYm91dCB0aGUgVk1BTExPQ19PRkZTRVQgY2F1c2luZyBwcm9ibGVtcy4gIFdlIGRvIGhhdmUgdG8gd29ycnkKKyAqIGFib3V0IGNsYXNoZXMgYmV0d2VlbiBvdXIgZWFybHkgY2FsbHMgdG8gaW9yZW1hcCgpIHRoYXQgc3RhcnQgZ3Jvd2luZyBkb3duCisgKiBmcm9tIGlvcmVtYXBfYmFzZSBiZWluZyBydW4gaW50byB0aGUgVk0gYXJlYSBhbGxvY2F0aW9ucyAoZ3Jvd2luZyB1cHdhcmRzCisgKiBmcm9tIFZNQUxMT0NfU1RBUlQpLiAgRm9yIHRoaXMgcmVhc29uIHdlIGhhdmUgaW9yZW1hcF9ib3QgdG8gY2hlY2sgd2hlbgorICogd2UgYWN0dWFsbHkgcnVuIGludG8gb3VyIG1hcHBpbmdzIHNldHVwIGluIHRoZSBlYXJseSBib290IHdpdGggdGhlIFZNCisgKiBzeXN0ZW0uICBUaGlzIHJlYWxseSBkb2VzIGJlY29tZSBhIHByb2JsZW0gZm9yIG1hY2hpbmVzIHdpdGggZ29vZCBhbW91bnRzCisgKiBvZiBSQU0uICAtLSBDb3J0CisgKi8KKyNkZWZpbmUgVk1BTExPQ19PRkZTRVQgKDB4MTAwMDAwMCkgLyogMTZNICovCisjaWZkZWYgUFBDX1BJTl9TSVpFCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQgKCgoX0FMSUdOKChsb25nKWhpZ2hfbWVtb3J5LCBQUENfUElOX1NJWkUpICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkpCisjZWxzZQorI2RlZmluZSBWTUFMTE9DX1NUQVJUICgoKChsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpICYgfihWTUFMTE9DX09GRlNFVC0xKSkpCisjZW5kaWYKKyNkZWZpbmUgVk1BTExPQ19FTkQJaW9yZW1hcF9ib3QKKworLyoKKyAqIEJpdHMgaW4gYSBsaW51eC1zdHlsZSBQVEUuICBUaGVzZSBtYXRjaCB0aGUgYml0cyBpbiB0aGUKKyAqIChoYXJkd2FyZS1kZWZpbmVkKSBQb3dlclBDIFBURSBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR180MHgpCisKKy8qIFRoZXJlIGFyZSBzZXZlcmFsIHBvdGVudGlhbCBnb3RjaGFzIGhlcmUuICBUaGUgNDB4IGhhcmR3YXJlIFRMQkxPCisgICBmaWVsZCBsb29rcyBsaWtlIHRoaXM6CisKKyAgIDAgIDEgIDIgIDMgIDQgIC4uLiAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMQorICAgUlBOLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAwICAwIEVYIFdSIFpTRUwuLi4uLi4uICBXICBJICBNICBHCisKKyAgIFdoZXJlIHBvc3NpYmxlIHdlIG1ha2UgdGhlIExpbnV4IFBURSBiaXRzIG1hdGNoIHVwIHdpdGggdGhpcworCisgICAtIGJpdHMgMjAgYW5kIDIxIG11c3QgYmUgY2xlYXJlZCwgYmVjYXVzZSB3ZSB1c2UgNGsgcGFnZXMgKDQweCBjYW4KKyAgICAgc3VwcG9ydCBkb3duIHRvIDFrIHBhZ2VzKSwgdGhpcyBpcyBkb25lIGluIHRoZSBUTEJNaXNzIGV4Y2VwdGlvbgorICAgICBoYW5kbGVyLgorICAgLSBXZSB1c2Ugb25seSB6b25lcyAwIChmb3Iga2VybmVsIHBhZ2VzKSBhbmQgMSAoZm9yIHVzZXIgcGFnZXMpCisgICAgIG9mIHRoZSAxNiBhdmFpbGFibGUuICBCaXQgMjQtMjYgb2YgdGhlIFRMQiBhcmUgY2xlYXJlZCBpbiB0aGUgVExCCisgICAgIG1pc3MgaGFuZGxlci4gIEJpdCAyNyBpcyBQQUdFX1VTRVIsIHRodXMgc2VsZWN0aW5nIHRoZSBjb3JyZWN0CisgICAgIHpvbmUuCisgICAtIFBSRVNFTlQgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdHdvIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgICAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMzAgYml0cy4gIEJlY2F1c2UgNDB4IGRvZXNuJ3Qgc3VwcG9ydCBTTVAKKyAgICAgYW55d2F5LCBNIGlzIGlycmVsZXZhbnQgc28gd2UgYm9ycm93IGl0IGZvciBQQUdFX1BSRVNFTlQuICBCaXQgMzAKKyAgICAgaXMgY2xlYXJlZCBpbiB0aGUgVExCIG1pc3MgaGFuZGxlciBiZWZvcmUgdGhlIFRMQiBlbnRyeSBpcyBsb2FkZWQuCisgICAtIEFsbCBvdGhlciBiaXRzIG9mIHRoZSBQVEUgYXJlIGxvYWRlZCBpbnRvIFRMQkxPIHdpdGhvdXQKKyAgICAgbW9kaWZpY2F0aW9uLCBsZWF2aW5nIHVzIG9ubHkgdGhlIGJpdHMgMjAsIDIxLCAyNCwgMjUsIDI2LCAzMCBmb3IKKyAgICAgc29mdHdhcmUgUFRFIGJpdHMuICBXZSBhY3R1YWxseSB1c2UgdXNlIGJpdHMgMjEsIDI0LCAyNSwgYW5kCisgICAgIDMwIHJlc3BlY3RpdmVseSBmb3IgdGhlIHNvZnR3YXJlIGJpdHM6IEFDQ0VTU0VELCBESVJUWSwgUlcsIGFuZAorICAgICBQUkVTRU5ULgorKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIDQweCBlbWJlZGRlZCBjaGlwcy4gKi8KKyNkZWZpbmUJX1BBR0VfR1VBUkRFRAkweDAwMQkvKiBHOiBwYWdlIGlzIGd1YXJkZWQgZnJvbSBwcmVmZXRjaCAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAxCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMgkvKiBzb2Z0d2FyZTogUFRFIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUJX1BBR0VfTk9fQ0FDSEUJMHgwMDQJLyogSTogY2FjaGluZyBpcyBpbmhpYml0ZWQgKi8KKyNkZWZpbmUJX1BBR0VfV1JJVEVUSFJVCTB4MDA4CS8qIFc6IGNhY2hpbmcgaXMgd3JpdGUtdGhyb3VnaCAqLworI2RlZmluZQlfUEFHRV9VU0VSCTB4MDEwCS8qIG1hdGNoZXMgb25lIG9mIHRoZSB6b25lIHBlcm1pc3Npb24gYml0cyAqLworI2RlZmluZQlfUEFHRV9SVwkweDA0MAkvKiBzb2Z0d2FyZTogV3JpdGVzIHBlcm1pdHRlZCAqLworI2RlZmluZQlfUEFHRV9ESVJUWQkweDA4MAkvKiBzb2Z0d2FyZTogZGlydHkgcGFnZSAqLworI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MTAwCS8qIGhhcmR3YXJlOiBEaXJ0eSAmIFJXLCBzZXQgaW4gZXhjZXB0aW9uICovCisjZGVmaW5lIF9QQUdFX0hXRVhFQwkweDIwMAkvKiBoYXJkd2FyZTogRVggcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDQwMAkvKiBzb2Z0d2FyZTogUjogcGFnZSByZWZlcmVuY2VkICovCisKKyNkZWZpbmUgX1BNRF9QUkVTRU5UCTB4NDAwCS8qIFBNRCBwb2ludHMgdG8gcGFnZSBvZiBQVEVzICovCisjZGVmaW5lIF9QTURfQkFECTB4ODAyCisjZGVmaW5lIF9QTURfU0laRQkweDBlMAkvKiBzaXplIGZpZWxkLCAhPSAwIGZvciBsYXJnZS1wYWdlIFBNRCBlbnRyeSAqLworI2RlZmluZSBfUE1EX1NJWkVfNE0JMHgwYzAKKyNkZWZpbmUgX1BNRF9TSVpFXzE2TQkweDBlMAorI2RlZmluZSBQTURfUEFHRV9TSVpFKHBtZHZhbCkJKDEwMjQgPDwgKCgocG1kdmFsKSAmIF9QTURfU0laRSkgPj4gNCkpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0eCkKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgUFBDNDQwCisgKgorICogQmVjYXVzZSBvZiB0aGUgMyB3b3JkIFRMQiBlbnRyaWVzIHRvIHN1cHBvcnQgMzYtYml0IGFkZHJlc3NpbmcsCisgKiB0aGUgYXR0cmlidXRlIGFyZSBkaWZmaWN1bHQgdG8gbWFwIGluIHN1Y2ggYSBmYXNoaW9uIHRoYXQgdGhleQorICogYXJlIGVhc2lseSBsb2FkZWQgZHVyaW5nIGV4Y2VwdGlvbiBwcm9jZXNzaW5nLiAgSSBkZWNpZGVkIHRvCisgKiBvcmdhbml6ZSB0aGUgZW50cnkgc28gdGhlIEVSUE4gaXMgdGhlIG9ubHkgcG9ydGlvbiBpbiB0aGUKKyAqIHVwcGVyIHdvcmQgb2YgdGhlIFBURSBhbmQgdGhlIGF0dHJpYnV0ZSBiaXRzIGJlbG93IGFyZSBwYWNrZWQKKyAqIGluIGFzIHNlbnNpYmx5IGFzIHRoZXkgY2FuIGJlIGluIHRoZSBhcmVhIGJlbG93IGEgNEtCIHBhZ2Ugc2l6ZQorICogb3JpZW50ZWQgUlBOLiAgVGhpcyBhdCBsZWFzdCBtYWtlcyBpdCBlYXN5IHRvIGxvYWQgdGhlIFJQTiBhbmQKKyAqIEVSUE4gZmllbGRzIGluIHRoZSBUTEIuIC1NYXR0CisgKgorICogTm90ZSB0aGF0IHRoZXNlIGJpdHMgcHJlY2x1ZGUgZnV0dXJlIHVzZSBvZiBhIHBhZ2Ugc2l6ZQorICogbGVzcyB0aGFuIDRLQi4KKyAqCisgKgorICogUFBDIDQ0MCBjb3JlIGhhcyBmb2xsb3dpbmcgVExCIGF0dHJpYnV0ZSBmaWVsZHM7CisgKgorICogICBUTEIxOgorICogICAwICAxICAyICAzICA0ICAuLi4gMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKKyAqICAgUlBOLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAtICAtICAtICAtICAtICAtIEVSUE4uLi4uLi4uCisgKgorICogICBUTEIyOgorICogICAwICAxICAyICAzICA0ICAuLi4gMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKKyAqICAgLSAgLSAgLSAgLSAgLSAgICAtIFUwIFUxIFUyIFUzIFcgIEkgIE0gIEcgIEUgICAtIFVYIFVXIFVSIFNYIFNXIFNSCisgKgorICogVGhlcmUgYXJlIHNvbWUgY29uc3RyYWlucyBhbmQgb3B0aW9ucywgdG8gZGVjaWRlIG1hcHBpbmcgc29mdHdhcmUgYml0cworICogaW50byBUTEIgZW50cnkuCisgKgorICogICAtIFBSRVNFTlQgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKKyAqICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMgZm9yIFRMQjIuCisgKgorICogICAtIEZJTEUgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKKyAqICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMgZm9yIFRMQjIuCisgKgorICogICAtIENBQ0hFIENPSEVSRU5UIGJpdCAoTSkgaGFzIG5vIGVmZmVjdCBvbiBQUEM0NDAgY29yZSwgYmVjYXVzZSBpdAorICogICAgIGRvZXNuJ3Qgc3VwcG9ydCBTTVAuIFNvIHdlIGNhbiB1c2UgdGhpcyBhcyBzb2Z0d2FyZSBiaXQsIGxpa2UKKyAqICAgICBESVJUWS4KKyAqCisgKiBXaXRoIHRoZSBQUEMgNDR4IExpbnV4IGltcGxlbWVudGF0aW9uLCB0aGUgMC0xMXRoIExTQnMgb2YgdGhlIFBURSBhcmUgdXNlZAorICogZm9yIG1lbW9yeSBwcm90ZWN0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zIChzZWUgUFRFIHN0cnVjdHVyZSBpbgorICogaW5jbHVkZS9hc20tcHBjL21tdS5oKS4gIFRoZSBfUEFHRV9YWFggZGVmaW5pdGlvbnMgaW4gdGhpcyBmaWxlIG1hcCB0byB0aGUKKyAqIGFib3ZlIGJpdHMuICBOb3RlIHRoYXQgdGhlIGJpdCB2YWx1ZXMgYXJlIENQVSBzcGVjaWZpYywgbm90IGFyY2hpdGVjdHVyZQorICogc3BlY2lmaWMuCisgKgorICogVGhlIGtlcm5lbCBQVEUgZW50cnkgaG9sZHMgYW4gYXJjaC1kZXBlbmRlbnQgc3dwX2VudHJ5IHN0cnVjdHVyZSB1bmRlcgorICogY2VydGFpbiBzaXR1YXRpb25zLiBJbiBvdGhlciB3b3JkcywgaW4gc3VjaCBzaXR1YXRpb25zIHNvbWUgcG9ydGlvbiBvZgorICogdGhlIFBURSBiaXRzIGFyZSB1c2VkIGFzIGEgc3dwX2VudHJ5LiBJbiB0aGUgUFBDIGltcGxlbWVudGF0aW9uLCB0aGUKKyAqIDMtMjR0aCBMU0IgYXJlIHNoYXJlZCB3aXRoIHN3cF9lbnRyeSwgaG93ZXZlciB0aGUgMC0ybmQgdGhyZWUgTFNCIHN0aWxsCisgKiBob2xkIHByb3RlY3Rpb24gdmFsdWVzLiBUaGF0IG1lYW5zIHRoZSB0aHJlZSBwcm90ZWN0aW9uIGJpdHMgYXJlCisgKiByZXNlcnZlZCBmb3IgYm90aCBQVEUgYW5kIFNXQVAgZW50cnkgYXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgdGhyZWUKKyAqIExTQnMuCisgKgorICogVGhlcmUgYXJlIHRocmVlIHByb3RlY3Rpb24gYml0cyBhdmFpbGFibGUgZm9yIFNXQVAgZW50cnk6CisgKglfUEFHRV9QUkVTRU5UCisgKglfUEFHRV9GSUxFCisgKglfUEFHRV9IQVNIUFRFIChpZiBIVyBoYXMpCisgKgorICogU28gdGhvc2UgdGhyZWUgYml0cyBoYXZlIHRvIGJlIGluc2lkZSBvZiAwLTJuZCBMU0Igb2YgUFRFLgorICoKKyAqLworCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDAwMDAwMQkJLyogUzogUFRFIHZhbGlkICovCisjZGVmaW5lCV9QQUdFX1JXCTB4MDAwMDAwMDIJCS8qIFM6IFdyaXRlIHBlcm1pc3Npb24gKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkweDAwMDAwMDA0CQkvKiBTOiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMDAwMDgJCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MDAwMDAwMTAJCS8qIEg6IERpcnR5ICYgUlcgKi8KKyNkZWZpbmUgX1BBR0VfSFdFWEVDCTB4MDAwMDAwMjAJCS8qIEg6IEV4ZWN1dGUgcGVybWlzc2lvbiAqLworI2RlZmluZQlfUEFHRV9VU0VSCTB4MDAwMDAwNDAJCS8qIFM6IFVzZXIgcGFnZSAqLworI2RlZmluZQlfUEFHRV9FTkRJQU4JMHgwMDAwMDA4MAkJLyogSDogRSBiaXQgKi8KKyNkZWZpbmUJX1BBR0VfR1VBUkRFRAkweDAwMDAwMTAwCQkvKiBIOiBHIGJpdCAqLworI2RlZmluZQlfUEFHRV9ESVJUWQkweDAwMDAwMjAwCQkvKiBTOiBQYWdlIGRpcnR5ICovCisjZGVmaW5lCV9QQUdFX05PX0NBQ0hFCTB4MDAwMDA0MDAJCS8qIEg6IEkgYml0ICovCisjZGVmaW5lCV9QQUdFX1dSSVRFVEhSVQkweDAwMDAwODAwCQkvKiBIOiBXIGJpdCAqLworCisvKiBUT0RPOiBBZGQgbGFyZ2UgcGFnZSBsb3dtZW0gbWFwcGluZyBzdXBwb3J0ICovCisjZGVmaW5lIF9QTURfUFJFU0VOVAkwCisjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCisjZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQorCisvKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmYwMDAwMDAwMFVMTAorCisjZWxpZiBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpCisvKgorICAgTU1VIEFzc2lzdCBSZWdpc3RlciAzOgorCisgICAzMiAzMyAzNCAzNSAzNiAgLi4uIDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDU4IDU5IDYwIDYxIDYyIDYzCisgICBSUE4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAwICAwIFUwIFUxIFUyIFUzIFVYIFNYIFVXIFNXIFVSIFNSCisKKyAgIC0gUFJFU0VOVCAqbXVzdCogYmUgaW4gdGhlIGJvdHRvbSB0aHJlZSBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQorICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMuCisKKyAgIC0gRklMRSAqbXVzdCogYmUgaW4gdGhlIGJvdHRvbSB0aHJlZSBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQorICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMuCisqLworCisvKiBEZWZpbml0aW9ucyBmb3IgRlNMIEJvb2stRSBDb3JlcyAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMDEJLyogUzogUFRFIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkweDAwMDAyCS8qIFM6IFVzZXIgcGFnZSAobWFwcyB0byBVUikgKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkweDAwMDAyCS8qIFM6IHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDAwNAkvKiBTOiBQYWdlIHJlZmVyZW5jZWQgKi8KKyNkZWZpbmUgX1BBR0VfSFdXUklURQkweDAwMDA4CS8qIEg6IERpcnR5ICYgUlcsIHNldCBpbiBleGNlcHRpb24gKi8KKyNkZWZpbmUgX1BBR0VfUlcJMHgwMDAxMAkvKiBTOiBXcml0ZSBwZXJtaXNzaW9uICovCisjZGVmaW5lIF9QQUdFX0hXRVhFQwkweDAwMDIwCS8qIEg6IFVYIHBlcm1pc3Npb24gKi8KKworI2RlZmluZSBfUEFHRV9FTkRJQU4JMHgwMDA0MAkvKiBIOiBFIGJpdCAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwODAJLyogSDogRyBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfQ09IRVJFTlQJMHgwMDEwMAkvKiBIOiBNIGJpdCAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAwMjAwCS8qIEg6IEkgYml0ICovCisjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDAwNDAwCS8qIEg6IFcgYml0ICovCisKKyNpZmRlZiBDT05GSUdfUFRFXzY0QklUCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDgwMDAJLyogUzogUGFnZSBkaXJ0eSAqLworCisvKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmZmZmZmMDAwMFVMTAorI2Vsc2UKKyNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDgwMAkvKiBTOiBQYWdlIGRpcnR5ICovCisjZW5kaWYKKworI2RlZmluZSBfUE1EX1BSRVNFTlQJMAorI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSyAoUEFHRV9NQVNLKQorI2RlZmluZSBfUE1EX0JBRAkoflBBR0VfTUFTSykKKworI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4KQorLyogRGVmaW5pdGlvbnMgZm9yIDh4eCBlbWJlZGRlZCBjaGlwcy4gKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEJLyogUGFnZSBpcyB2YWxpZCAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAwMgkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAwMgkvKiBJOiBjYWNoZSBpbmhpYml0ICovCisjZGVmaW5lIF9QQUdFX1NIQVJFRAkweDAwMDQJLyogTm8gQVNJRCAoY29udGV4dCkgY29tcGFyZSAqLworCisvKiBUaGVzZSBmaXZlIHNvZnR3YXJlIGJpdHMgbXVzdCBiZSBtYXNrZWQgb3V0IHdoZW4gdGhlIGVudHJ5IGlzIGxvYWRlZAorICogaW50byB0aGUgVExCLgorICovCisjZGVmaW5lIF9QQUdFX0VYRUMJMHgwMDA4CS8qIHNvZnR3YXJlOiBpLWNhY2hlIGNvaGVyZW5jeSByZXF1aXJlZCAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAxMAkvKiBzb2Z0d2FyZTogZ3VhcmRlZCBhY2Nlc3MgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDIwCS8qIHNvZnR3YXJlOiBwYWdlIGNoYW5nZWQgKi8KKyNkZWZpbmUgX1BBR0VfUlcJMHgwMDQwCS8qIHNvZnR3YXJlOiB1c2VyIHdyaXRlIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDA4MAkvKiBzb2Z0d2FyZTogcGFnZSByZWZlcmVuY2VkICovCisKKy8qIFNldHRpbmcgYW55IGJpdHMgaW4gdGhlIG5pYmJsZSB3aXRoIHRoZSBmb2xsb3cgdHdvIGNvbnRyb2xzIHdpbGwKKyAqIHJlcXVpcmUgYSBUTEIgZXhjZXB0aW9uIGhhbmRsZXIgY2hhbmdlLiAgSXQgaXMgYXNzdW1lZCB1bnVzZWQgYml0cworICogYXJlIGFsd2F5cyB6ZXJvLgorICovCisjZGVmaW5lIF9QQUdFX0hXV1JJVEUJMHgwMTAwCS8qIGgvdyB3cml0ZSBlbmFibGU6IG5ldmVyIHNldCBpbiBMaW51eCBQVEUgKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkweDA4MDAJLyogT25lIG9mIHRoZSBQUCBiaXRzLCB0aGUgb3RoZXIgaXMgVVNFUiZ+UlcgKi8KKworI2RlZmluZSBfUE1EX1BSRVNFTlQJMHgwMDAxCisjZGVmaW5lIF9QTURfQkFECTB4MGZmMAorI2RlZmluZSBfUE1EX1BBR0VfTUFTSwkweDAwMGMKKyNkZWZpbmUgX1BNRF9QQUdFXzhNCTB4MDAwYworCisvKgorICogVGhlIDh4eCBUTEIgbWlzcyBoYW5kbGVyIGFsbGVnZWRseSBzZXRzIF9QQUdFX0FDQ0VTU0VEIGluIHRoZSBQVEUKKyAqIGZvciBhbiBhZGRyZXNzIGV2ZW4gaWYgX1BBR0VfUFJFU0VOVCBpcyBub3Qgc2V0LCBhcyBhIHBlcmZvcm1hbmNlCisgKiBvcHRpbWl6YXRpb24uICBUaGlzIGlzIGEgYnVnIGlmIHlvdSBldmVyIHdhbnQgdG8gdXNlIHN3YXAgdW5sZXNzCisgKiBfUEFHRV9BQ0NFU1NFRCBpcyAyLCB3aGljaCBpdCBpc24ndCwgb3IgdW5sZXNzIHlvdSBoYXZlIDh4eC1zcGVjaWZpYworICogZGVmaW5pdGlvbnMgZm9yIF9fc3dwX2VudHJ5IGV0Yy4gYmVsb3csIHdoaWNoIHdvdWxkIGJlIGdyb3NzLgorICogIC0tIHBhdWx1cworICovCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLIF9QQUdFX0FDQ0VTU0VECisKKyNlbHNlIC8qIENPTkZJR182eHggKi8KKy8qIERlZmluaXRpb25zIGZvciA2MHgsIDc0MC83NTAsIGV0Yy4gKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMQkvKiBzb2Z0d2FyZTogcHRlIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgX1BBR0VfSEFTSFBURQkweDAwMgkvKiBoYXNoX3BhZ2UgaGFzIG1hZGUgYW4gSFBURSBmb3IgdGhpcyBwdGUgKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkweDAwNAkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDQJLyogdXNlcm1vZGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfR1VBUkRFRAkweDAwOAkvKiBHOiBwcm9oaWJpdCBzcGVjdWxhdGl2ZSBhY2Nlc3MgKi8KKyNkZWZpbmUgX1BBR0VfQ09IRVJFTlQJMHgwMTAJLyogTTogZW5mb3JjZSBtZW1vcnkgY29oZXJlbmNlIChTTVAgc3lzdGVtcykgKi8KKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMjAJLyogSTogY2FjaGUgaW5oaWJpdCAqLworI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwNDAJLyogVzogY2FjaGUgd3JpdGUtdGhyb3VnaCAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkweDA4MAkvKiBDOiBwYWdlIGNoYW5nZWQgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgxMDAJLyogUjogcGFnZSByZWZlcmVuY2VkICovCisjZGVmaW5lIF9QQUdFX0VYRUMJMHgyMDAJLyogc29mdHdhcmU6IGktY2FjaGUgY29oZXJlbmN5IHJlcXVpcmVkICovCisjZGVmaW5lIF9QQUdFX1JXCTB4NDAwCS8qIHNvZnR3YXJlOiB1c2VyIHdyaXRlIGFjY2VzcyBhbGxvd2VkICovCisKKyNkZWZpbmUgX1BURV9OT05FX01BU0sJX1BBR0VfSEFTSFBURQorCisjZGVmaW5lIF9QTURfUFJFU0VOVAkwCisjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCisjZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQorI2VuZGlmCisKKy8qCisgKiBTb21lIGJpdHMgYXJlIG9ubHkgdXNlZCBvbiBzb21lIGNwdSBmYW1pbGllcy4uLgorICovCisjaWZuZGVmIF9QQUdFX0hBU0hQVEUKKyNkZWZpbmUgX1BBR0VfSEFTSFBURQkwCisjZW5kaWYKKyNpZm5kZWYgX1BURV9OT05FX01BU0sKKyNkZWZpbmUgX1BURV9OT05FX01BU0sgMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX1NIQVJFRAorI2RlZmluZSBfUEFHRV9TSEFSRUQJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0hXV1JJVEUKKyNkZWZpbmUgX1BBR0VfSFdXUklURQkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfSFdFWEVDCisjZGVmaW5lIF9QQUdFX0hXRVhFQwkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfRVhFQworI2RlZmluZSBfUEFHRV9FWEVDCTAKKyNlbmRpZgorI2lmbmRlZiBfUE1EX1BSRVNFTlRfTUFTSworI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSwlfUE1EX1BSRVNFTlQKKyNlbmRpZgorI2lmbmRlZiBfUE1EX1NJWkUKKyNkZWZpbmUgX1BNRF9TSVpFCTAKKyNkZWZpbmUgUE1EX1BBR0VfU0laRShwbWQpCWJhZF9jYWxsX3RvX1BNRF9QQUdFX1NJWkUoKQorI2VuZGlmCisKKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBBR0VfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCisKKy8qCisgKiBOb3RlOiB0aGUgX1BBR0VfQ09IRVJFTlQgYml0IGF1dG9tYXRpY2FsbHkgZ2V0cyBzZXQgaW4gdGhlIGhhcmR3YXJlCisgKiBQVEUgaWYgQ09ORklHX1NNUCBpcyBkZWZpbmVkIChoYXNoX3BhZ2UgZG9lcyB0aGlzKTsgdGhlcmUgaXMgbm8gbmVlZAorICogdG8gaGF2ZSBpdCBpbiB0aGUgTGludXggUFRFLCBhbmQgaW4gZmFjdCB0aGUgYml0IGNvdWxkIGJlIHJldXNlZCBmb3IKKyAqIGFub3RoZXIgcHVycG9zZS4gIC0tIHBhdWx1cy4KKyAqLworCisjaWZkZWYgQ09ORklHXzQ0eAorI2RlZmluZSBfUEFHRV9CQVNFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9HVUFSREVEKQorI2Vsc2UKKyNkZWZpbmUgX1BBR0VfQkFTRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEKQorI2VuZGlmCisjZGVmaW5lIF9QQUdFX1dSRU5BQkxFCShfUEFHRV9SVyB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfSFdXUklURSkKKyNkZWZpbmUgX1BBR0VfS0VSTkVMCShfUEFHRV9CQVNFIHwgX1BBR0VfU0hBUkVEIHwgX1BBR0VfV1JFTkFCTEUpCisKKyNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKKy8qIE9uIHN0YW5kYXJkIFBQQyBNTVUsIG5vIHVzZXIgYWNjZXNzIGltcGxpZXMga2VybmVsIHJlYWQvd3JpdGUgYWNjZXNzLAorICogc28gdG8gd3JpdGUtcHJvdGVjdCBrZXJuZWwgbWVtb3J5IHdlIG11c3QgdHVybiBvbiB1c2VyIGFjY2VzcyAqLworI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JKF9QQUdFX0JBU0UgfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9VU0VSKQorI2Vsc2UKKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JPCShfUEFHRV9CQVNFIHwgX1BBR0VfU0hBUkVEKQorI2VuZGlmCisKKyNkZWZpbmUgX1BBR0VfSU8JKF9QQUdFX0tFUk5FTCB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCkKKyNkZWZpbmUgX1BBR0VfUkFNCShfUEFHRV9LRVJORUwgfCBfUEFHRV9IV0VYRUMpCisKKyNpZiBkZWZpbmVkKENPTkZJR19LR0RCKSB8fCBkZWZpbmVkKENPTkZJR19YTU9OKSB8fCBkZWZpbmVkKENPTkZJR19CRElfU1dJVENIKQorLyogV2Ugd2FudCB0aGUgZGVidWdnZXJzIHRvIGJlIGFibGUgdG8gc2V0IGJyZWFrcG9pbnRzIGFueXdoZXJlLCBzbworICogZG9uJ3Qgd3JpdGUgcHJvdGVjdCB0aGUga2VybmVsIHRleHQgKi8KKyNkZWZpbmUgX1BBR0VfUkFNX1RFWFQJX1BBR0VfUkFNCisjZWxzZQorI2RlZmluZSBfUEFHRV9SQU1fVEVYVAkoX1BBR0VfS0VSTkVMX1JPIHwgX1BBR0VfSFdFWEVDKQorI2VuZGlmCisKKyNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX0JBU0UpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFlfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCisjZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfUlcpCisjZGVmaW5lIFBBR0VfU0hBUkVEX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9SVyB8IF9QQUdFX0VYRUMpCisjZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUikKKyNkZWZpbmUgUEFHRV9DT1BZX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQorCisjZGVmaW5lIFBBR0VfS0VSTkVMCQlfX3BncHJvdChfUEFHRV9SQU0pCisjZGVmaW5lIFBBR0VfS0VSTkVMX05PQ0FDSEUJX19wZ3Byb3QoX1BBR0VfSU8pCisKKy8qCisgKiBUaGUgUG93ZXJQQyBjYW4gb25seSBkbyBleGVjdXRlIHByb3RlY3Rpb24gb24gYSBzZWdtZW50ICgyNTZNQikgYmFzaXMsCisgKiBub3Qgb24gYSBwYWdlIGJhc2lzLiAgU28gd2UgY29uc2lkZXIgZXhlY3V0ZSBwZXJtaXNzaW9uIHRoZSBzYW1lIGFzIHJlYWQuCisgKiBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLgorICogVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0Li4KKyAqLworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZX1gKKyNkZWZpbmUgX19QMDEwCVBBR0VfQ09QWQorI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZX1gKKyNkZWZpbmUgX19QMTAwCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMTAxCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDExMQlQQUdFX0NPUFlfWAorCisjZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1MwMTAJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVEX1gKKyNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX1gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIE1ha2Ugc3VyZSB3ZSBnZXQgYSBsaW5rIGVycm9yIGlmIFBNRF9QQUdFX1NJWkUgaXMgZXZlciBjYWxsZWQgb24gYQorICoga2VybmVsIHdpdGhvdXQgbGFyZ2UgcGFnZSBQTUQgc3VwcG9ydCAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYmFkX2NhbGxfdG9fUE1EX1BBR0VfU0laRSh2b2lkKTsKKworLyoKKyAqIENvbnZlcnNpb25zIGJldHdlZW4gUFRFIHZhbHVlcyBhbmQgcGFnZSBmcmFtZSBudW1iZXJzLgorICovCisKKy8qIGluIHNvbWUgY2FzZSB3ZSB3YW50IHRvIGFkZGl0aW9uYWx5IGFkanVzdCB3aGVyZSB0aGUgcGZuIGlzIGluIHRoZSBwdGUgdG8KKyAqIGFsbG93IHJvb20gZm9yIG1vcmUgZmxhZ3MgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpICYmIGRlZmluZWQoQ09ORklHX1BURV82NEJJVCkKKyNkZWZpbmUgUEZOX1NISUZUX09GRlNFVAkoUEFHRV9TSElGVCArIDgpCisjZWxzZQorI2RlZmluZSBQRk5fU0hJRlRfT0ZGU0VUCShQQUdFX1NISUZUKQorI2VuZGlmCisKKyNkZWZpbmUgcHRlX3Bmbih4KQkJKHB0ZV92YWwoeCkgPj4gUEZOX1NISUZUX09GRlNFVCkKKyNkZWZpbmUgcHRlX3BhZ2UoeCkJCXBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCisKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocHRlX2Jhc2ljX3QpKHBmbikgPDwgUEZOX1NISUZUX09GRlNFVCkgfFwKKwkJCQkJcGdwcm90X3ZhbChwcm90KSkKKyNkZWZpbmUgbWtfcHRlKHBhZ2UsIHByb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIHByb3QpCisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAorICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2VbMTAyNF07CisjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgcHRlX25vbmUocHRlKQkJKChwdGVfdmFsKHB0ZSkgJiB+X1BURV9OT05FX01BU0spID09IDApCisjZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQpCisjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHB0ZXApCWRvIHsgc2V0X3B0ZV9hdCgobW0pLCAoYWRkciksIChwdGVwKSwgX19wdGUoMCkpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHBtZF9ub25lKHBtZCkJCSghcG1kX3ZhbChwbWQpKQorI2RlZmluZQlwbWRfYmFkKHBtZCkJCShwbWRfdmFsKHBtZCkgJiBfUE1EX0JBRCkKKyNkZWZpbmUJcG1kX3ByZXNlbnQocG1kKQkocG1kX3ZhbChwbWQpICYgX1BNRF9QUkVTRU5UX01BU0spCisjZGVmaW5lCXBtZF9jbGVhcihwbWRwKQkJZG8geyBwbWRfdmFsKCoocG1kcCkpID0gMDsgfSB3aGlsZSAoMCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qCisgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCisgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1VTRVI7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SVzsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2V4ZWMocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRVhFQzsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0RJUlRZOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV91bmNhY2hlKHB0ZV90IHB0ZSkgICAgICAgeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfTk9fQ0FDSEU7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2FjaGUocHRlX3QgcHRlKSAgICAgICAgIHsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9OT19DQUNIRTsgfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9VU0VSOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfZXhwcm90ZWN0KHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfRVhFQzsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9ESVJUWSB8IF9QQUdFX0hXV1JJVEUpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfVVNFUjsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtleGVjKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQzsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfUlc7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0RJUlRZOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreworCXB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpOworCXJldHVybiBwdGU7Cit9CisKKy8qCisgKiBXaGVuIGZsdXNoaW5nIHRoZSB0bGIgZW50cnkgZm9yIGEgcGFnZSwgd2UgYWxzbyBuZWVkIHRvIGZsdXNoIHRoZSBoYXNoCisgKiB0YWJsZSBlbnRyeS4gIGZsdXNoX2hhc2hfcGFnZXMgaXMgYXNzZW1ibGVyIChmb3Igc3BlZWQpIGluIGhhc2h0YWJsZS5TLgorICovCitleHRlcm4gaW50IGZsdXNoX2hhc2hfcGFnZXModW5zaWduZWQgY29udGV4dCwgdW5zaWduZWQgbG9uZyB2YSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIHBtZHZhbCwgaW50IGNvdW50KTsKKworLyogQWRkIGFuIEhQVEUgdG8gdGhlIGhhc2ggdGFibGUgKi8KK2V4dGVybiB2b2lkIGFkZF9oYXNoX3BhZ2UodW5zaWduZWQgY29udGV4dCwgdW5zaWduZWQgbG9uZyB2YSwKKwkJCSAgdW5zaWduZWQgbG9uZyBwbWR2YWwpOworCisvKgorICogQXRvbWljIFBURSB1cGRhdGVzLgorICoKKyAqIHB0ZV91cGRhdGUgY2xlYXJzIGFuZCBzZXRzIGJpdCBhdG9taWNhbGx5LCBhbmQgcmV0dXJucworICogdGhlIG9sZCBwdGUgdmFsdWUuICBJbiB0aGUgNjQtYml0IFBURSBjYXNlIHdlIGxvY2sgYXJvdW5kIHRoZQorICogbG93IFBURSB3b3JkIHNpbmNlIHdlIGV4cGVjdCBBTEwgZmxhZyBiaXRzIHRvIGJlIHRoZXJlCisgKi8KKyNpZm5kZWYgQ09ORklHX1BURV82NEJJVAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV91cGRhdGUocHRlX3QgKnAsIHVuc2lnbmVkIGxvbmcgY2xyLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNldCkKK3sKKwl1bnNpZ25lZCBsb25nIG9sZCwgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIlwKKzE6CWx3YXJ4CSUwLDAsJTNcblwKKwlhbmRjCSUxLCUwLCU0XG5cCisJb3IJJTEsJTEsJTVcbiIKKwlQUEM0MDVfRVJSNzcoMCwlMykKKyIJc3R3Y3guCSUxLDAsJTNcblwKKwlibmUtCTFiIgorCTogIj0mciIgKG9sZCksICI9JnIiICh0bXApLCAiPW0iICgqcCkKKwk6ICJyIiAocCksICJyIiAoY2xyKSwgInIiIChzZXQpLCAibSIgKCpwKQorCTogImNjIiApOworCXJldHVybiBvbGQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgcHRlX3VwZGF0ZShwdGVfdCAqcCwgdW5zaWduZWQgbG9uZyBjbHIsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2V0KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBvbGQ7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiXAorMToJbHdhcngJJUwwLDAsJTRcblwKKwlsd3p4CSUwLDAsJTNcblwKKwlhbmRjCSUxLCVMMCwlNVxuXAorCW9yCSUxLCUxLCU2XG4iCisJUFBDNDA1X0VSUjc3KDAsJTMpCisiCXN0d2N4LgklMSwwLCU0XG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiIChvbGQpLCAiPSZyIiAodG1wKSwgIj1tIiAoKnApCisJOiAiciIgKHApLCAiciIgKCh1bnNpZ25lZCBsb25nKShwKSArIDQpLCAiciIgKGNsciksICJyIiAoc2V0KSwgIm0iICgqcCkKKwk6ICJjYyIgKTsKKwlyZXR1cm4gb2xkOworfQorI2VuZGlmCisKKy8qCisgKiBzZXRfcHRlIHN0b3JlcyBhIGxpbnV4IFBURSBpbnRvIHRoZSBsaW51eCBwYWdlIHRhYmxlLgorICogT24gbWFjaGluZXMgd2hpY2ggdXNlIGFuIE1NVSBoYXNoIHRhYmxlIHdlIGF2b2lkIGNoYW5naW5nIHRoZQorICogX1BBR0VfSEFTSFBURSBiaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworI2lmIF9QQUdFX0hBU0hQVEUgIT0gMAorCXB0ZV91cGRhdGUocHRlcCwgfl9QQUdFX0hBU0hQVEUsIHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IQVNIUFRFKTsKKyNlbHNlCisJKnB0ZXAgPSBwdGU7CisjZW5kaWYKK30KKworLyoKKyAqIDIuNiBjYWxsZXMgdGhpcyB3aXRob3V0IGZsdXNoaW5nIHRoZSBUTEIgZW50cnksIHRoaXMgaXMgd3JvbmcKKyAqIGZvciBvdXIgaGFzaC1iYXNlZCBpbXBsZW1lbnRhdGlvbiwgd2UgZml4IHRoYXQgdXAgaGVyZQorICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfWU9VTkcKK3N0YXRpYyBpbmxpbmUgaW50IF9fcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh1bnNpZ25lZCBpbnQgY29udGV4dCwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwl1bnNpZ25lZCBsb25nIG9sZDsKKwlvbGQgPSBwdGVfdXBkYXRlKHB0ZXAsIF9QQUdFX0FDQ0VTU0VELCAwKTsKKyNpZiBfUEFHRV9IQVNIUFRFICE9IDAKKwlpZiAob2xkICYgX1BBR0VfSEFTSFBURSkgeworCQl1bnNpZ25lZCBsb25nIHB0ZXBoeXMgPSBfX3BhKHB0ZXApICYgUEFHRV9NQVNLOworCQlmbHVzaF9oYXNoX3BhZ2VzKGNvbnRleHQsIGFkZHIsIHB0ZXBoeXMsIDEpOworCX0KKyNlbmRpZgorCXJldHVybiAob2xkICYgX1BBR0VfQUNDRVNTRUQpICE9IDA7Cit9CisjZGVmaW5lIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoX192bWEsIF9fYWRkciwgX19wdGVwKSBcCisJX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKChfX3ZtYSktPnZtX21tLT5jb250ZXh0LmlkLCBfX2FkZHIsIF9fcHRlcCkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX0RJUlRZCitzdGF0aWMgaW5saW5lIGludCBwdGVwX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwlyZXR1cm4gKHB0ZV91cGRhdGUocHRlcCwgKF9QQUdFX0RJUlRZIHwgX1BBR0VfSFdXUklURSksIDApICYgX1BBR0VfRElSVFkpICE9IDA7Cit9CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgICAgICBwdGVfdCAqcHRlcCkKK3sKKwlyZXR1cm4gX19wdGUocHRlX3VwZGF0ZShwdGVwLCB+X1BBR0VfSEFTSFBURSwgMCkpOworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX1dSUFJPVEVDVAorc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgICAgIHB0ZV90ICpwdGVwKQoreworCXB0ZV91cGRhdGUocHRlcCwgKF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSksIDApOworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUworc3RhdGljIGlubGluZSB2b2lkIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgaW50IGRpcnR5KQoreworCXVuc2lnbmVkIGxvbmcgYml0cyA9IHB0ZV92YWwoZW50cnkpICYKKwkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SVyk7CisJcHRlX3VwZGF0ZShwdGVwLCAwLCBiaXRzKTsKK30KKworI2RlZmluZSAgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSkgXAorCWRvIHsJCQkJCQkJCSAgIFwKKwkJX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MoX19wdGVwLCBfX2VudHJ5LCBfX2RpcnR5KTsJICAgXAorCQlmbHVzaF90bGJfcGFnZV9ub2hhc2goX192bWEsIF9fYWRkcmVzcyk7CSAgICAgICAJICAgXAorCX0gd2hpbGUoMCkKKworLyoKKyAqIE1hY3JvIHRvIG1hcmsgYSBwYWdlIHByb3RlY3Rpb24gdmFsdWUgYXMgInVuY2FjaGVhYmxlIi4KKyAqLworI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpCShfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVEKSkKKworc3RydWN0IGZpbGU7CitleHRlcm4gcGdwcm90X3QgcGh5c19tZW1fYWNjZXNzX3Byb3Qoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCB2bWFfcHJvdCk7CisjZGVmaW5lIF9fSEFWRV9QSFlTX01FTV9BQ0NFU1NfUFJPVAorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TQU1FCisjZGVmaW5lIHB0ZV9zYW1lKEEsQikJKCgocHRlX3ZhbChBKSBeIHB0ZV92YWwoQikpICYgfl9QQUdFX0hBU0hQVEUpID09IDApCisKKy8qCisgKiBOb3RlIHRoYXQgb24gQm9vayBFIHByb2Nlc3NvcnMsIHRoZSBwbWQgY29udGFpbnMgdGhlIGtlcm5lbCB2aXJ0dWFsCisgKiAobG93bWVtKSBhZGRyZXNzIG9mIHRoZSBwdGUgcGFnZS4gIFRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzIGxlc3MgdXNlZnVsCisgKiBiZWNhdXNlIGV2ZXJ5dGhpbmcgcnVucyB3aXRoIHRyYW5zbGF0aW9uIGVuYWJsZWQgKGV2ZW4gdGhlIFRMQiBtaXNzCisgKiBoYW5kbGVyKS4gIE9uIGV2ZXJ5dGhpbmcgZWxzZSB0aGUgcG1kIGNvbnRhaW5zIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgKiBvZiB0aGUgcHRlIHBhZ2UuICAtLSBwYXVsdXMKKyAqLworI2lmbmRlZiBDT05GSUdfQk9PS0UKKyNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKQlcCisJKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwocG1kKSAmIFBBR0VfTUFTSykpCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCVwKKwkobWVtX21hcCArIChwbWRfdmFsKHBtZCkgPj4gUEFHRV9TSElGVCkpCisjZWxzZQorI2RlZmluZSBwbWRfcGFnZV92YWRkcihwbWQpCVwKKwkoKHVuc2lnbmVkIGxvbmcpIChwbWRfdmFsKHBtZCkgJiBQQUdFX01BU0spKQorI2RlZmluZSBwbWRfcGFnZShwbWQpCQlcCisJKG1lbV9tYXAgKyAoX19wYShwbWRfdmFsKHBtZCkpID4+IFBBR0VfU0hJRlQpKQorI2VuZGlmCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBrZXJuZWwgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpCisKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykJICgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpCisjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpCSAoKG1tKS0+cGdkICsgcGdkX2luZGV4KGFkZHJlc3MpKQorCisvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgcHRlX2luZGV4KGFkZHJlc3MpCQlcCisJKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcikJXAorCSgocHRlX3QgKikgcG1kX3BhZ2VfdmFkZHIoKihkaXIpKSArIHB0ZV9pbmRleChhZGRyKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyKQkJXAorCSgocHRlX3QgKikga21hcF9hdG9taWMocG1kX3BhZ2UoKihkaXIpKSwgS01fUFRFMCkgKyBwdGVfaW5kZXgoYWRkcikpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsIGFkZHIpCVwKKwkoKHB0ZV90ICopIGttYXBfYXRvbWljKHBtZF9wYWdlKCooZGlyKSksIEtNX1BURTEpICsgcHRlX2luZGV4KGFkZHIpKQorCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpCQlrdW5tYXBfYXRvbWljKHB0ZSwgS01fUFRFMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpCWt1bm1hcF9hdG9taWMocHRlLCBLTV9QVEUxKQorCitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKKworZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CisKKy8qCisgKiBFbmNvZGUgYW5kIGRlY29kZSBhIHN3YXAgZW50cnkuCisgKiBOb3RlIHRoYXQgdGhlIGJpdHMgd2UgdXNlIGluIGEgUFRFIGZvciByZXByZXNlbnRpbmcgYSBzd2FwIGVudHJ5CisgKiBtdXN0IG5vdCBpbmNsdWRlIHRoZSBfUEFHRV9QUkVTRU5UIGJpdCwgdGhlIF9QQUdFX0ZJTEUgYml0LCBvciB0aGUKKyAqX1BBR0VfSEFTSFBURSBiaXQgKGlmIHVzZWQpLiAgLS0gcGF1bHVzCisgKi8KKyNkZWZpbmUgX19zd3BfdHlwZShlbnRyeSkJCSgoZW50cnkpLnZhbCAmIDB4MWYpCisjZGVmaW5lIF9fc3dwX29mZnNldChlbnRyeSkJCSgoZW50cnkpLnZhbCA+PiA1KQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpCSgoc3dwX2VudHJ5X3QpIHsgKHR5cGUpIHwgKChvZmZzZXQpIDw8IDUpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSA+PiAzIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIDw8IDMgfSkKKworLyogRW5jb2RlIGFuZCBkZWNvZGUgYSBub25saW5lYXIgZmlsZSBtYXBwaW5nIGVudHJ5ICovCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI5CisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgPj4gMykKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeyAoKG9mZikgPDwgMykgfCBfUEFHRV9GSUxFIH0pCisKKy8qIENPTkZJR19BUFVTICovCisvKiBGb3IgdmlydHVhbCBhZGRyZXNzIHRvIHBoeXNpY2FsIGFkZHJlc3MgY29udmVyc2lvbiAqLworZXh0ZXJuIHZvaWQgY2FjaGVfY2xlYXIoX191MzIgYWRkciwgaW50IGxlbmd0aCk7CitleHRlcm4gdm9pZCBjYWNoZV9wdXNoKF9fdTMyIGFkZHIsIGludCBsZW5ndGgpOworZXh0ZXJuIGludCBtbV9lbmRfb2ZfY2h1bmsgKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxlbik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBpb3BhKHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtbV9wdG92KHVuc2lnbmVkIGxvbmcgYWRkcikgX19hdHRyaWJ1dGVfY29uc3RfXzsKKworLyogVmFsdWVzIGZvciBub2NhY2hlZmxhZyBhbmQgY21vZGUgKi8KKy8qIFRoZXNlIGFyZSBub3QgdXNlZCBieSB0aGUgQVBVUyBrZXJuZWxfbWFwLCBidXQgcHJldmVudHMKKyAgIGNvbXBpbGF0aW9uIGVycm9ycy4gKi8KKyNkZWZpbmUJS0VSTkVMTUFQX0ZVTExfQ0FDSElORwkJMAorI2RlZmluZQlLRVJORUxNQVBfTk9DQUNIRV9TRVIJCTEKKyNkZWZpbmUJS0VSTkVMTUFQX05PQ0FDSEVfTk9OU0VSCTIKKyNkZWZpbmUJS0VSTkVMTUFQX05PX0NPUFlCQUNLCQkzCisKKy8qCisgKiBNYXAgc29tZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGludG8gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBrZXJuZWxfbWFwKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQlpbnQgbm9jYWNoZWZsYWcsIHVuc2lnbmVkIGxvbmcgKm1lbWF2YWlscCApOworCisvKgorICogU2V0IGNhY2hlIG1vZGUgb2YgKGtlcm5lbCBzcGFjZSkgYWRkcmVzcyByYW5nZS4KKyAqLworZXh0ZXJuIHZvaWQga2VybmVsX3NldF9jYWNoZW1vZGUgKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtb2RlKTsKKworLyogTmVlZHMgdG8gYmUgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gbGludXgvbW0uaCwgYXMgaXQgaXMgYXJjaCBkZXBlbmRlbnQgKi8KKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQorCisjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCisJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisKKy8qCisgKiBObyBwYWdlIHRhYmxlIGNhY2hlcyB0byBpbml0aWFsaXNlCisgKi8KKyNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gaW50IGdldF9wdGVwdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKipwdGVwLAorCQkgICAgICBwbWRfdCAqKnBtZHApOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDMzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLXBwYzY0LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUtcHBjNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDRjNGU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLXBwYzY0LmgKQEAgLTAsMCArMSw0OTIgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfSF8KKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfSF8KKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBhbmQgZGVmaW5lcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IGFuZCB1c2UKKyAqIHRoZSBwcGM2NCBoYXNoZWQgcGFnZSB0YWJsZS4KKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JCS8qIEZvciBUQVNLX1NJWkUgKi8KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KK3N0cnVjdCBtbV9zdHJ1Y3Q7CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTY0ay5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS00ay5oPgorI2VuZGlmCisKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKworLyoKKyAqIFNpemUgb2YgRUEgcmFuZ2UgbWFwcGVkIGJ5IG91ciBwYWdldGFibGVzLgorICovCisjZGVmaW5lIFBHVEFCTEVfRUFERFJfU0laRSAoUFRFX0lOREVYX1NJWkUgKyBQTURfSU5ERVhfU0laRSArIFwKKyAgICAgICAgICAgICAgICAJICAgIFBVRF9JTkRFWF9TSVpFICsgUEdEX0lOREVYX1NJWkUgKyBQQUdFX1NISUZUKQorI2RlZmluZSBQR1RBQkxFX1JBTkdFICgxVUwgPDwgUEdUQUJMRV9FQUREUl9TSVpFKQorCisjaWYgVEFTS19TSVpFX1VTRVI2NCA+IFBHVEFCTEVfUkFOR0UKKyNlcnJvciBUQVNLX1NJWkVfVVNFUjY0IGV4Y2VlZHMgcGFnZXRhYmxlIHJhbmdlCisjZW5kaWYKKworI2lmIFRBU0tfU0laRV9VU0VSNjQgPiAoMVVMIDw8IChVU0VSX0VTSURfQklUUyArIFNJRF9TSElGVCkpCisjZXJyb3IgVEFTS19TSVpFX1VTRVI2NCBleGNlZWRzIHVzZXIgVlNJRCByYW5nZQorI2VuZGlmCisKKy8qCisgKiBEZWZpbmUgdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIHZtYWxsb2MgVk0gYXJlYS4KKyAqLworI2RlZmluZSBWTUFMTE9DX1NUQVJUIEFTTV9DT05TVCgweEQwMDAwMDAwMDAwMDAwMDApCisjZGVmaW5lIFZNQUxMT0NfU0laRSAgQVNNX0NPTlNUKDB4ODAwMDAwMDAwMDApCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgKFZNQUxMT0NfU1RBUlQgKyBWTUFMTE9DX1NJWkUpCisKKy8qCisgKiBEZWZpbmUgdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIGltYWxsb2MgVk0gYXJlYS4KKyAqLworI2RlZmluZSBQSEJTX0lPX0JBU0UJVk1BTExPQ19FTkQKKyNkZWZpbmUgSU1BTExPQ19CQVNFCShQSEJTX0lPX0JBU0UgKyAweDgwMDAwMDAwdWwpCS8qIFJlc2VydmUgMiBnaWdzIGZvciBQSEJzICovCisjZGVmaW5lIElNQUxMT0NfRU5ECShWTUFMTE9DX1NUQVJUICsgUEdUQUJMRV9SQU5HRSkKKworLyoKKyAqIFJlZ2lvbiBJRHMKKyAqLworI2RlZmluZSBSRUdJT05fU0hJRlQJCTYwVUwKKyNkZWZpbmUgUkVHSU9OX01BU0sJCSgweGZVTCA8PCBSRUdJT05fU0hJRlQpCisjZGVmaW5lIFJFR0lPTl9JRChlYSkJCSgoKHVuc2lnbmVkIGxvbmcpKGVhKSkgPj4gUkVHSU9OX1NISUZUKQorCisjZGVmaW5lIFZNQUxMT0NfUkVHSU9OX0lECShSRUdJT05fSUQoVk1BTExPQ19TVEFSVCkpCisjZGVmaW5lIEtFUk5FTF9SRUdJT05fSUQJKFJFR0lPTl9JRChQQUdFX09GRlNFVCkpCisjZGVmaW5lIFVTRVJfUkVHSU9OX0lECQkoMFVMKQorCisvKgorICogQ29tbW9uIGJpdHMgaW4gYSBsaW51eC1zdHlsZSBQVEUuICBUaGVzZSBtYXRjaCB0aGUgYml0cyBpbiB0aGUKKyAqIChoYXJkd2FyZS1kZWZpbmVkKSBQb3dlclBDIFBURSBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLiBBZGRpdGlvbmFsCisgKiBiaXRzIG1heSBiZSBkZWZpbmVkIGluIHBndGFibGUtKi5oCisgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEgLyogc29mdHdhcmU6IHB0ZSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCisjZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAyIC8qIG1hdGNoZXMgb25lIG9mIHRoZSBQUCBiaXRzICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyIC8qICghcHJlc2VudCBvbmx5KSBzb2Z0d2FyZTogcHRlIGhvbGRzIGZpbGUgb2Zmc2V0ICovCisjZGVmaW5lIF9QQUdFX0VYRUMJMHgwMDA0IC8qIE5vIGV4ZWN1dGUgb24gUE9XRVI0IGFuZCBuZXdlciAod2UgaW52ZXJ0KSAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwOAorI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAwMTAgLyogTTogZW5mb3JjZSBtZW1vcnkgY29oZXJlbmNlIChTTVAgc3lzdGVtcykgKi8KKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDIwIC8qIEk6IGNhY2hlIGluaGliaXQgKi8KKyNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDA0MCAvKiBXOiBjYWNoZSB3cml0ZS10aHJvdWdoICovCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDA4MCAvKiBDOiBwYWdlIGNoYW5nZWQgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMTAwIC8qIFI6IHBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9SVwkweDAyMDAgLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfSEFTSFBURQkweDA0MDAgLyogc29mdHdhcmU6IHB0ZSBoYXMgYW4gYXNzb2NpYXRlZCBIUFRFICovCisjZGVmaW5lIF9QQUdFX0JVU1kJMHgwODAwIC8qIHNvZnR3YXJlOiBQVEUgJiBoYXNoIGFyZSBidXN5ICovCisKKyNkZWZpbmUgX1BBR0VfQkFTRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfQ09IRVJFTlQpCisKKyNkZWZpbmUgX1BBR0VfV1JFTkFCTEUJKF9QQUdFX1JXIHwgX1BBR0VfRElSVFkpCisKKy8qIF9fcGdwcm90IGRlZmluZWQgaW4gYXNtLXBvd2VycGMvcGFnZS5oICovCisjZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQpCisKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUikKKyNkZWZpbmUgUEFHRV9TSEFSRURfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSKQorI2RlZmluZSBQQUdFX0NPUFlfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFlfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCisjZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9XUkVOQUJMRSkKKyNkZWZpbmUgUEFHRV9LRVJORUxfQ0kJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgXAorCQkJICAgICAgIF9QQUdFX1dSRU5BQkxFIHwgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVEKQorI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDIF9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9XUkVOQUJMRSB8IF9QQUdFX0VYRUMpCisKKyNkZWZpbmUgUEFHRV9BR1AJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFIHwgX1BBR0VfTk9fQ0FDSEUpCisjZGVmaW5lIEhBVkVfUEFHRV9BR1AKKworLyogUFRFSURYIG5pYmJsZSAqLworI2RlZmluZSBfUFRFSURYX1NFQ09OREFSWQkweDgKKyNkZWZpbmUgX1BURUlEWF9HUk9VUF9JWAkweDcKKworCisvKgorICogUE9XRVI0IGFuZCBuZXdlciBoYXZlIHBlciBwYWdlIGV4ZWN1dGUgcHJvdGVjdGlvbiwgb2xkZXIgY2hpcHMgY2FuIG9ubHkKKyAqIGRvIHRoaXMgb24gYSBzZWdtZW50ICgyNTZNQikgYmFzaXMuCisgKgorICogQWxzbywgd3JpdGUgcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4KKyAqIFRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UgY2FuIGdldC4uCisgKgorICogTm90ZSBkdWUgdG8gdGhlIHdheSB2bSBmbGFncyBhcmUgbGFpZCBvdXQsIHRoZSBiaXRzIGFyZSBYV1IKKyAqLworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQorI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX1gKKyNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWV9YCisjZGVmaW5lIF9fUDExMQlQQUdFX0NPUFlfWAorCisjZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX1gKKyNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVEX1gKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX1gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFpFUk9fUEFHRSBpcyBhIGdsb2JhbCBzaGFyZWQgcGFnZSB0aGF0IGlzIGFsd2F5cyB6ZXJvOiB1c2VkCisgKiBmb3IgemVyby1tYXBwZWQgbWVtb3J5IGFyZWFzIGV0Yy4uCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkUvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkpCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisKKyNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKKyNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUFfVE9QRE9XTgorCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICoKKyAqIG1rX3B0ZSB0YWtlcyBhIChzdHJ1Y3QgcGFnZSAqKSBhcyBpbnB1dAorICovCisjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHBmbl9wdGUodW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHBncHJvdCkKK3sKKwlwdGVfdCBwdGU7CisKKworCXB0ZV92YWwocHRlKSA9IChwZm4gPDwgUFRFX1JQTl9TSElGVCkgfCBwZ3Byb3RfdmFsKHBncHJvdCk7CisJcmV0dXJuIHB0ZTsKK30KKworI2RlZmluZSBwdGVfbW9kaWZ5KF9wdGUsIG5ld3Byb3QpIFwKKyAgKF9fcHRlKChwdGVfdmFsKF9wdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KSkpCisKKyNkZWZpbmUgcHRlX25vbmUocHRlKQkJKChwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSFBURUZMQUdTKSA9PSAwKQorI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQorCisvKiBwdGVfY2xlYXIgbW92ZWQgdG8gbGF0ZXIgaW4gdGhpcyBmaWxlICovCisKKyNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgocHRlX3ZhbCh4KT4+UFRFX1JQTl9TSElGVCkpKQorI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKKworI2RlZmluZSBQTURfQkFEX0JJVFMJCShQVEVfVEFCTEVfU0laRS0xKQorI2RlZmluZSBQVURfQkFEX0JJVFMJCShQTURfVEFCTEVfU0laRS0xKQorCisjZGVmaW5lIHBtZF9zZXQocG1kcCwgcG1kdmFsKSAJKHBtZF92YWwoKihwbWRwKSkgPSAocG1kdmFsKSkKKyNkZWZpbmUgcG1kX25vbmUocG1kKQkJKCFwbWRfdmFsKHBtZCkpCisjZGVmaW5lCXBtZF9iYWQocG1kKQkJKCFpc19rZXJuZWxfYWRkcihwbWRfdmFsKHBtZCkpIFwKKwkJCQkgfHwgKHBtZF92YWwocG1kKSAmIFBNRF9CQURfQklUUykpCisjZGVmaW5lCXBtZF9wcmVzZW50KHBtZCkJKHBtZF92YWwocG1kKSAhPSAwKQorI2RlZmluZQlwbWRfY2xlYXIocG1kcCkJCShwbWRfdmFsKCoocG1kcCkpID0gMCkKKyNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKQkocG1kX3ZhbChwbWQpICYgflBNRF9NQVNLRURfQklUUykKKyNkZWZpbmUgcG1kX3BhZ2UocG1kKQkJdmlydF90b19wYWdlKHBtZF9wYWdlX3ZhZGRyKHBtZCkpCisKKyNkZWZpbmUgcHVkX3NldChwdWRwLCBwdWR2YWwpCShwdWRfdmFsKCoocHVkcCkpID0gKHB1ZHZhbCkpCisjZGVmaW5lIHB1ZF9ub25lKHB1ZCkJCSghcHVkX3ZhbChwdWQpKQorI2RlZmluZQlwdWRfYmFkKHB1ZCkJCSghaXNfa2VybmVsX2FkZHIocHVkX3ZhbChwdWQpKSBcCisJCQkJIHx8IChwdWRfdmFsKHB1ZCkgJiBQVURfQkFEX0JJVFMpKQorI2RlZmluZSBwdWRfcHJlc2VudChwdWQpCShwdWRfdmFsKHB1ZCkgIT0gMCkKKyNkZWZpbmUgcHVkX2NsZWFyKHB1ZHApCQkocHVkX3ZhbCgqKHB1ZHApKSA9IDApCisjZGVmaW5lIHB1ZF9wYWdlX3ZhZGRyKHB1ZCkJKHB1ZF92YWwocHVkKSAmIH5QVURfTUFTS0VEX0JJVFMpCisjZGVmaW5lIHB1ZF9wYWdlKHB1ZCkJCXZpcnRfdG9fcGFnZShwdWRfcGFnZV92YWRkcihwdWQpKQorCisjZGVmaW5lIHBnZF9zZXQocGdkcCwgcHVkcCkJKHtwZ2RfdmFsKCoocGdkcCkpID0gKHVuc2lnbmVkIGxvbmcpKHB1ZHApO30pCisKKy8qCisgKiBGaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkuICBXZSBjb21iaW5lIHRoZSBhZGRyZXNzIHJlZ2lvbgorICogKHRoZSBoaWdoIG9yZGVyIE4gYml0cykgYW5kIHRoZSBwZ2QgcG9ydGlvbiBvZiB0aGUgYWRkcmVzcy4KKyAqLworLyogdG8gYXZvaWQgb3ZlcmZsb3cgaW4gZnJlZV9wZ3RhYmxlcyB3ZSBkb24ndCB1c2UgUFRSU19QRVJfUEdEIGhlcmUgKi8KKyNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IChQR0RJUl9TSElGVCkpICYgMHgxZmYpCisKKyNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykJICgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcmVzcykpCisKKyNkZWZpbmUgcG1kX29mZnNldChwdWRwLGFkZHIpIFwKKyAgKCgocG1kX3QgKikgcHVkX3BhZ2VfdmFkZHIoKihwdWRwKSkpICsgKCgoYWRkcikgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQgLSAxKSkpCisKKyNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLGFkZHIpIFwKKyAgKCgocHRlX3QgKikgcG1kX3BhZ2VfdmFkZHIoKihkaXIpKSkgKyAoKChhZGRyKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkpCisKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLGFkZHIpCXB0ZV9vZmZzZXRfa2VybmVsKChkaXIpLCAoYWRkcikpCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsYWRkcikJcHRlX29mZnNldF9rZXJuZWwoKGRpciksIChhZGRyKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpCQlkbyB7IH0gd2hpbGUoMCkKKworLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLworLyogVGhpcyBub3cgb25seSBjb250YWlucyB0aGUgdm1hbGxvYyBwYWdlcyAqLworI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KKyAqIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKSAgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfVVNFUjt9CitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SVzt9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9FWEVDO30KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0RJUlRZO30KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEO30KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTt9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfdW5jYWNoZShwdGVfdCBwdGUpIHsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX05PX0NBQ0hFOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NhY2hlKHB0ZV90IHB0ZSkgICB7IHB0ZV92YWwocHRlKSAmPSB+X1BBR0VfTk9fQ0FDSEU7IH0KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfVVNFUjsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfZXhwcm90ZWN0KHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfRVhFQzsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX1JXKTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9ESVJUWSk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfVVNFUjsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtleGVjKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQzsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfUlc7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0RJUlRZOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtodWdlKHB0ZV90IHB0ZSkgeworCXJldHVybiBwdGU7IH0KKworLyogQXRvbWljIFBURSB1cGRhdGVzICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3VwZGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgICAgICBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBjbHIsCisJCQkJICAgICAgIGludCBodWdlKQoreworCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRhcngJJTAsMCwlMwkJIyBwdGVfdXBkYXRlXG5cCisJYW5kaS4JJTEsJTAsJTZcblwKKwlibmUtCTFiIFxuXAorCWFuZGMJJTEsJTAsJTQgXG5cCisJc3RkY3guCSUxLDAsJTMgXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiIChvbGQpLCAiPSZyIiAodG1wKSwgIj1tIiAoKnB0ZXApCisJOiAiciIgKHB0ZXApLCAiciIgKGNsciksICJtIiAoKnB0ZXApLCAiaSIgKF9QQUdFX0JVU1kpCisJOiAiY2MiICk7CisKKwlpZiAob2xkICYgX1BBR0VfSEFTSFBURSkKKwkJaHB0ZV9uZWVkX2ZsdXNoKG1tLCBhZGRyLCBwdGVwLCBvbGQsIGh1Z2UpOworCXJldHVybiBvbGQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwl1bnNpZ25lZCBsb25nIG9sZDsKKworICAgICAgIAlpZiAoKHB0ZV92YWwoKnB0ZXApICYgKF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfSEFTSFBURSkpID09IDApCisJCXJldHVybiAwOworCW9sZCA9IHB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXAsIF9QQUdFX0FDQ0VTU0VELCAwKTsKKwlyZXR1cm4gKG9sZCAmIF9QQUdFX0FDQ0VTU0VEKSAhPSAwOworfQorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX1lPVU5HCisjZGVmaW5lIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoX192bWEsIF9fYWRkciwgX19wdGVwKQkJICAgXAorKHsJCQkJCQkJCQkgICBcCisJaW50IF9fcjsJCQkJCQkJICAgXAorCV9fciA9IF9fcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygoX192bWEpLT52bV9tbSwgX19hZGRyLCBfX3B0ZXApOyBcCisJX19yOwkJCQkJCQkJICAgXAorfSkKKworLyoKKyAqIE9uIFJXL0RJUlRZIGJpdCB0cmFuc2l0aW9ucyB3ZSBjYW4gYXZvaWQgZmx1c2hpbmcgdGhlIGhwdGUuIEZvciB0aGUKKyAqIG1vbWVudCB3ZSBhbHdheXMgZmx1c2ggYnV0IHdlIG5lZWQgdG8gZml4IGhwdGVfdXBkYXRlIGFuZCB0ZXN0IGlmIHRoZQorICogb3B0aW1pc2F0aW9uIGlzIHdvcnRoIGl0LgorICovCitzdGF0aWMgaW5saW5lIGludCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisKKyAgICAgICAJaWYgKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0RJUlRZKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlvbGQgPSBwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwLCBfUEFHRV9ESVJUWSwgMCk7CisJcmV0dXJuIChvbGQgJiBfUEFHRV9ESVJUWSkgIT0gMDsKK30KKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ESVJUWQorI2RlZmluZSBwdGVwX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KF9fdm1hLCBfX2FkZHIsIF9fcHRlcCkJCSAgIFwKKyh7CQkJCQkJCQkJICAgXAorCWludCBfX3I7CQkJCQkJCSAgIFwKKwlfX3IgPSBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoKF9fdm1hKS0+dm1fbW0sIF9fYWRkciwgX19wdGVwKTsgXAorCV9fcjsJCQkJCQkJCSAgIFwKK30pCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUCitzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgICAgcHRlX3QgKnB0ZXApCit7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisKKyAgICAgICAJaWYgKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX1JXKSA9PSAwKQorICAgICAgIAkJcmV0dXJuOworCW9sZCA9IHB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXAsIF9QQUdFX1JXLCAwKTsKK30KKworLyoKKyAqIFdlIGN1cnJlbnRseSByZW1vdmUgZW50cmllcyBmcm9tIHRoZSBoYXNodGFibGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCisgKiB0aGUgZW50cnkgd2FzIHlvdW5nIG9yIGRpcnR5LiBUaGUgZ2VuZXJpYyByb3V0aW5lcyBvbmx5IGZsdXNoIGlmIHRoZQorICogZW50cnkgd2FzIHlvdW5nIG9yIGRpcnR5IHdoaWNoIGlzIG5vdCBnb29kIGVub3VnaC4KKyAqCisgKiBXZSBzaG91bGQgYmUgbW9yZSBpbnRlbGxpZ2VudCBhYm91dCB0aGlzIGJ1dCBmb3IgdGhlIG1vbWVudCB3ZSBvdmVycmlkZQorICogdGhlc2UgZnVuY3Rpb25zIGFuZCBmb3JjZSBhIHRsYiBmbHVzaCB1bmNvbmRpdGlvbmFsbHkKKyAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNICisjZGVmaW5lIHB0ZXBfY2xlYXJfZmx1c2hfeW91bmcoX192bWEsIF9fYWRkcmVzcywgX19wdGVwKQkJXAorKHsJCQkJCQkJCQlcCisJaW50IF9feW91bmcgPSBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKF9fdm1hKS0+dm1fbW0sIF9fYWRkcmVzcywgXAorCQkJCQkJICBfX3B0ZXApOwkJXAorCV9feW91bmc7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ESVJUWV9GTFVTSAorI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX2RpcnR5KF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX2RpcnR5ID0gX19wdGVwX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KChfX3ZtYSktPnZtX21tLCBfX2FkZHJlc3MsIFwKKwkJCQkJCSAgX19wdGVwKTsgCQlcCisJX19kaXJ0eTsJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCXVuc2lnbmVkIGxvbmcgb2xkID0gcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCwgfjBVTCwgMCk7CisJcmV0dXJuIF9fcHRlKG9sZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgcHRlX3QgKiBwdGVwKQoreworCXB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXAsIH4wVUwsIDApOworfQorCisvKgorICogc2V0X3B0ZSBzdG9yZXMgYSBsaW51eCBQVEUgaW50byB0aGUgbGludXggcGFnZSB0YWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCit7CisJaWYgKHB0ZV9wcmVzZW50KCpwdGVwKSkKKwkJcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTsKKwlwdGUgPSBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSFBURUZMQUdTKTsKKwkqcHRlcCA9IHB0ZTsKK30KKworLyogU2V0IHRoZSBkaXJ0eSBhbmQvb3IgYWNjZXNzZWQgYml0cyBhdG9taWNhbGx5IGluIGEgbGludXggUFRFLCB0aGlzCisgKiBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gZmx1c2ggdGhlIGhhc2ggZW50cnkKKyAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9BQ0NFU1NfRkxBR1MKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnksIGludCBkaXJ0eSkKK3sKKwl1bnNpZ25lZCBsb25nIGJpdHMgPSBwdGVfdmFsKGVudHJ5KSAmCisJCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKTsKKwl1bnNpZ25lZCBsb25nIG9sZCwgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIjE6CWxkYXJ4CSUwLDAsJTRcblwKKwkJYW5kaS4JJTEsJTAsJTZcblwKKwkJYm5lLQkxYiBcblwKKwkJb3IJJTAsJTMsJTBcblwKKwkJc3RkY3guCSUwLDAsJTRcblwKKwkJYm5lLQkxYiIKKwk6Ij0mciIgKG9sZCksICI9JnIiICh0bXApLCAiPW0iICgqcHRlcCkKKwk6InIiIChiaXRzKSwgInIiIChwdGVwKSwgIm0iICgqcHRlcCksICJpIiAoX1BBR0VfQlVTWSkKKwk6ImNjIik7Cit9CisjZGVmaW5lICBwdGVwX3NldF9hY2Nlc3NfZmxhZ3MoX192bWEsIF9fYWRkcmVzcywgX19wdGVwLCBfX2VudHJ5LCBfX2RpcnR5KSBcCisJZG8gewkJCQkJCQkJICAgXAorCQlfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpOwkgICBcCisJCWZsdXNoX3RsYl9wYWdlX25vaGFzaChfX3ZtYSwgX19hZGRyZXNzKTsJICAgICAgIAkgICBcCisJfSB3aGlsZSgwKQorCisvKgorICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyAidW5jYWNoZWFibGUiLgorICovCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkJKF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpKQorCitzdHJ1Y3QgZmlsZTsKK2V4dGVybiBwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHZtYV9wcm90KTsKKyNkZWZpbmUgX19IQVZFX1BIWVNfTUVNX0FDQ0VTU19QUk9UCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKKyNkZWZpbmUgcHRlX3NhbWUoQSxCKQkoKChwdGVfdmFsKEEpIF4gcHRlX3ZhbChCKSkgJiB+X1BBR0VfSFBURUZMQUdTKSA9PSAwKQorCisjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHRlX3ZhbChlKSkKKyNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpCisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltdOworCitleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKKworLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLworI2RlZmluZSBfX3N3cF90eXBlKGVudHJ5KQkoKChlbnRyeSkudmFsID4+IDEpICYgMHgzZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KGVudHJ5KQkoKGVudHJ5KS52YWwgPj4gOCkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KSAoKHN3cF9lbnRyeV90KXsoKHR5cGUpPDwgMSl8KChvZmZzZXQpPDw4KX0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3Qpe3B0ZV92YWwocHRlKSA+PiBQVEVfUlBOX1NISUZUfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCA8PCBQVEVfUlBOX1NISUZUIH0pCisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgPj4gUFRFX1JQTl9TSElGVCkKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeygob2ZmKSA8PCBQVEVfUlBOX1NISUZUKXxfUEFHRV9GSUxFfSkKKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJKEJJVFNfUEVSX0xPTkcgLSBQVEVfUlBOX1NISUZUKQorCisvKgorICoga2Vybl9hZGRyX3ZhbGlkIGlzIGludGVuZGVkIHRvIGluZGljYXRlIHdoZXRoZXIgYW4gYWRkcmVzcyBpcyBhIHZhbGlkCisgKiBrZXJuZWwgYWRkcmVzcy4gIE1vc3QgMzItYml0IGFyY2hzIGRlZmluZSBpdCBhcyBhbHdheXMgdHJ1ZSAobGlrZSB0aGlzKQorICogYnV0IG1vc3QgNjQtYml0IGFyY2hzIGFjdHVhbGx5IHBlcmZvcm0gYSB0ZXN0LiAgV2hhdCBzaG91bGQgd2UgZG8gaGVyZT8KKyAqIFRoZSBvbmx5IHVzZSBpcyBpbiBmcy9uY3Bmcy9kaXIuYworICovCisjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKKworI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQkJXAorCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQorCit2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKKworLyoKKyAqIGZpbmRfbGludXhfcHRlIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgYSBsaW51eCBwdGUgZm9yIGEgZ2l2ZW4KKyAqIGVmZmVjdGl2ZSBhZGRyZXNzIGFuZCBkaXJlY3RvcnkuICBJZiBub3QgZm91bmQsIGl0IHJldHVybnMgemVyby4KKyAqL3N0YXRpYyBpbmxpbmUgcHRlX3QgKmZpbmRfbGludXhfcHRlKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBlYSkKK3sKKwlwZ2RfdCAqcGc7CisJcHVkX3QgKnB1OworCXBtZF90ICpwbTsKKwlwdGVfdCAqcHQgPSBOVUxMOworCisJcGcgPSBwZ2RpciArIHBnZF9pbmRleChlYSk7CisJaWYgKCFwZ2Rfbm9uZSgqcGcpKSB7CisJCXB1ID0gcHVkX29mZnNldChwZywgZWEpOworCQlpZiAoIXB1ZF9ub25lKCpwdSkpIHsKKwkJCXBtID0gcG1kX29mZnNldChwdSwgZWEpOworCQkJaWYgKHBtZF9wcmVzZW50KCpwbSkpCisJCQkJcHQgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbSwgZWEpOworCQl9CisJfQorCXJldHVybiBwdDsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLmgKaW5kZXggMTllZGI2OS4uNzhiZjRhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLmgKQEAgLTIsNTAyICsyLDE1IEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19QR1RBQkxFX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpZm5kZWYgQ09ORklHX1BQQzY0Ci0jaW5jbHVkZSA8YXNtLXBwYy9wZ3RhYmxlLmg+CisjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpCisjICBpbmNsdWRlIDxhc20vcGd0YWJsZS1wcGM2NC5oPgogI2Vsc2UKLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGFuZCBkZWZpbmVzIG5lY2Vzc2FyeSB0byBtb2RpZnkgYW5kIHVzZQotICogdGhlIHBwYzY0IGhhc2hlZCBwYWdlIHRhYmxlLgotICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgkJLyogRm9yIFRBU0tfU0laRSAqLwotI2luY2x1ZGUgPGFzbS9tbXUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotc3RydWN0IG1tX3N0cnVjdDsKLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCi0jaW5jbHVkZSA8YXNtL3BndGFibGUtNjRrLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTRrLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAotCi0vKgotICogU2l6ZSBvZiBFQSByYW5nZSBtYXBwZWQgYnkgb3VyIHBhZ2V0YWJsZXMuCi0gKi8KLSNkZWZpbmUgUEdUQUJMRV9FQUREUl9TSVpFIChQVEVfSU5ERVhfU0laRSArIFBNRF9JTkRFWF9TSVpFICsgXAotICAgICAgICAgICAgICAgIAkgICAgUFVEX0lOREVYX1NJWkUgKyBQR0RfSU5ERVhfU0laRSArIFBBR0VfU0hJRlQpCi0jZGVmaW5lIFBHVEFCTEVfUkFOR0UgKDFVTCA8PCBQR1RBQkxFX0VBRERSX1NJWkUpCi0KLSNpZiBUQVNLX1NJWkVfVVNFUjY0ID4gUEdUQUJMRV9SQU5HRQotI2Vycm9yIFRBU0tfU0laRV9VU0VSNjQgZXhjZWVkcyBwYWdldGFibGUgcmFuZ2UKLSNlbmRpZgotCi0jaWYgVEFTS19TSVpFX1VTRVI2NCA+ICgxVUwgPDwgKFVTRVJfRVNJRF9CSVRTICsgU0lEX1NISUZUKSkKLSNlcnJvciBUQVNLX1NJWkVfVVNFUjY0IGV4Y2VlZHMgdXNlciBWU0lEIHJhbmdlCi0jZW5kaWYKLQotLyoKLSAqIERlZmluZSB0aGUgYWRkcmVzcyByYW5nZSBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhLgotICovCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQgQVNNX0NPTlNUKDB4RDAwMDAwMDAwMDAwMDAwMCkKLSNkZWZpbmUgVk1BTExPQ19TSVpFICBBU01fQ09OU1QoMHg4MDAwMDAwMDAwMCkKLSNkZWZpbmUgVk1BTExPQ19FTkQgICAoVk1BTExPQ19TVEFSVCArIFZNQUxMT0NfU0laRSkKLQotLyoKLSAqIERlZmluZSB0aGUgYWRkcmVzcyByYW5nZSBvZiB0aGUgaW1hbGxvYyBWTSBhcmVhLgotICovCi0jZGVmaW5lIFBIQlNfSU9fQkFTRQlWTUFMTE9DX0VORAotI2RlZmluZSBJTUFMTE9DX0JBU0UJKFBIQlNfSU9fQkFTRSArIDB4ODAwMDAwMDB1bCkJLyogUmVzZXJ2ZSAyIGdpZ3MgZm9yIFBIQnMgKi8KLSNkZWZpbmUgSU1BTExPQ19FTkQJKFZNQUxMT0NfU1RBUlQgKyBQR1RBQkxFX1JBTkdFKQotCi0vKgotICogUmVnaW9uIElEcwotICovCi0jZGVmaW5lIFJFR0lPTl9TSElGVAkJNjBVTAotI2RlZmluZSBSRUdJT05fTUFTSwkJKDB4ZlVMIDw8IFJFR0lPTl9TSElGVCkKLSNkZWZpbmUgUkVHSU9OX0lEKGVhKQkJKCgodW5zaWduZWQgbG9uZykoZWEpKSA+PiBSRUdJT05fU0hJRlQpCi0KLSNkZWZpbmUgVk1BTExPQ19SRUdJT05fSUQJKFJFR0lPTl9JRChWTUFMTE9DX1NUQVJUKSkKLSNkZWZpbmUgS0VSTkVMX1JFR0lPTl9JRAkoUkVHSU9OX0lEKFBBR0VfT0ZGU0VUKSkKLSNkZWZpbmUgVVNFUl9SRUdJT05fSUQJCSgwVUwpCi0KLS8qCi0gKiBDb21tb24gYml0cyBpbiBhIGxpbnV4LXN0eWxlIFBURS4gIFRoZXNlIG1hdGNoIHRoZSBiaXRzIGluIHRoZQotICogKGhhcmR3YXJlLWRlZmluZWQpIFBvd2VyUEMgUFRFIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuIEFkZGl0aW9uYWwKLSAqIGJpdHMgbWF5IGJlIGRlZmluZWQgaW4gcGd0YWJsZS0qLmgKLSAqLwotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMSAvKiBzb2Z0d2FyZTogcHRlIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KLSNkZWZpbmUgX1BBR0VfVVNFUgkweDAwMDIgLyogbWF0Y2hlcyBvbmUgb2YgdGhlIFBQIGJpdHMgKi8KLSNkZWZpbmUgX1BBR0VfRklMRQkweDAwMDIgLyogKCFwcmVzZW50IG9ubHkpIHNvZnR3YXJlOiBwdGUgaG9sZHMgZmlsZSBvZmZzZXQgKi8KLSNkZWZpbmUgX1BBR0VfRVhFQwkweDAwMDQgLyogTm8gZXhlY3V0ZSBvbiBQT1dFUjQgYW5kIG5ld2VyICh3ZSBpbnZlcnQpICovCi0jZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDA4Ci0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAxMCAvKiBNOiBlbmZvcmNlIG1lbW9yeSBjb2hlcmVuY2UgKFNNUCBzeXN0ZW1zKSAqLwotI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAwMjAgLyogSTogY2FjaGUgaW5oaWJpdCAqLwotI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwMDQwIC8qIFc6IGNhY2hlIHdyaXRlLXRocm91Z2ggKi8KLSNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDgwIC8qIEM6IHBhZ2UgY2hhbmdlZCAqLwotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDAxMDAgLyogUjogcGFnZSByZWZlcmVuY2VkICovCi0jZGVmaW5lIF9QQUdFX1JXCTB4MDIwMCAvKiBzb2Z0d2FyZTogdXNlciB3cml0ZSBhY2Nlc3MgYWxsb3dlZCAqLwotI2RlZmluZSBfUEFHRV9IQVNIUFRFCTB4MDQwMCAvKiBzb2Z0d2FyZTogcHRlIGhhcyBhbiBhc3NvY2lhdGVkIEhQVEUgKi8KLSNkZWZpbmUgX1BBR0VfQlVTWQkweDA4MDAgLyogc29mdHdhcmU6IFBURSAmIGhhc2ggYXJlIGJ1c3kgKi8gCi0KLSNkZWZpbmUgX1BBR0VfQkFTRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfQ09IRVJFTlQpCi0KLSNkZWZpbmUgX1BBR0VfV1JFTkFCTEUJKF9QQUdFX1JXIHwgX1BBR0VfRElSVFkpCi0KLS8qIF9fcGdwcm90IGRlZmluZWQgaW4gYXNtLXBvd2VycGMvcGFnZS5oICovCi0jZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQpCi0KLSNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUikKLSNkZWZpbmUgUEFHRV9TSEFSRURfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKLSNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSKQotI2RlZmluZSBQQUdFX0NPUFlfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFlfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCi0jZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9XUkVOQUJMRSkKLSNkZWZpbmUgUEFHRV9LRVJORUxfQ0kJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgXAotCQkJICAgICAgIF9QQUdFX1dSRU5BQkxFIHwgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVEKQotI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDIF9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9XUkVOQUJMRSB8IF9QQUdFX0VYRUMpCi0KLSNkZWZpbmUgUEFHRV9BR1AJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFIHwgX1BBR0VfTk9fQ0FDSEUpCi0jZGVmaW5lIEhBVkVfUEFHRV9BR1AKLQotLyogUFRFSURYIG5pYmJsZSAqLwotI2RlZmluZSBfUFRFSURYX1NFQ09OREFSWQkweDgKLSNkZWZpbmUgX1BURUlEWF9HUk9VUF9JWAkweDcKLQotCi0vKgotICogUE9XRVI0IGFuZCBuZXdlciBoYXZlIHBlciBwYWdlIGV4ZWN1dGUgcHJvdGVjdGlvbiwgb2xkZXIgY2hpcHMgY2FuIG9ubHkKLSAqIGRvIHRoaXMgb24gYSBzZWdtZW50ICgyNTZNQikgYmFzaXMuCi0gKgotICogQWxzbywgd3JpdGUgcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4KLSAqIFRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UgY2FuIGdldC4uCi0gKgotICogTm90ZSBkdWUgdG8gdGhlIHdheSB2bSBmbGFncyBhcmUgbGFpZCBvdXQsIHRoZSBiaXRzIGFyZSBYV1IKLSAqLwotI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCi0jZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKLSNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQotI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWV9YCi0jZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWV9YCi0jZGVmaW5lIF9fUDExMQlQQUdFX0NPUFlfWAotCi0jZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKLSNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAotI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWV9YCi0jZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVEX1gKLSNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX1gKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyoKLSAqIFpFUk9fUEFHRSBpcyBhIGdsb2JhbCBzaGFyZWQgcGFnZSB0aGF0IGlzIGFsd2F5cyB6ZXJvOiB1c2VkCi0gKiBmb3IgemVyby1tYXBwZWQgbWVtb3J5IGFyZWFzIGV0Yy4uCi0gKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkUvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKLSNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkpCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0KLSNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKLSNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUFfVE9QRE9XTgotCisjICBpbmNsdWRlIDxhc20vcGd0YWJsZS1wcGMzMi5oPgogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLS8qCi0gKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAotICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KLSAqCi0gKiBta19wdGUgdGFrZXMgYSAoc3RydWN0IHBhZ2UgKikgYXMgaW5wdXQKLSAqLwotI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKLQotc3RhdGljIGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwZ3Byb3QpCi17Ci0JcHRlX3QgcHRlOwotCi0KLQlwdGVfdmFsKHB0ZSkgPSAocGZuIDw8IFBURV9SUE5fU0hJRlQpIHwgcGdwcm90X3ZhbChwZ3Byb3QpOwotCXJldHVybiBwdGU7Ci19Ci0KLSNkZWZpbmUgcHRlX21vZGlmeShfcHRlLCBuZXdwcm90KSBcCi0gIChfX3B0ZSgocHRlX3ZhbChfcHRlKSAmIF9QQUdFX0NIR19NQVNLKSB8IHBncHJvdF92YWwobmV3cHJvdCkpKQotCi0jZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hQVEVGTEFHUykgPT0gMCkKLSNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkocHRlX3ZhbChwdGUpICYgX1BBR0VfUFJFU0VOVCkKLQotLyogcHRlX2NsZWFyIG1vdmVkIHRvIGxhdGVyIGluIHRoaXMgZmlsZSAqLwotCi0jZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHB0ZV92YWwoeCk+PlBURV9SUE5fU0hJRlQpKSkKLSNkZWZpbmUgcHRlX3BhZ2UoeCkJCXBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCi0KLSNkZWZpbmUgUE1EX0JBRF9CSVRTCQkoUFRFX1RBQkxFX1NJWkUtMSkKLSNkZWZpbmUgUFVEX0JBRF9CSVRTCQkoUE1EX1RBQkxFX1NJWkUtMSkKLQotI2RlZmluZSBwbWRfc2V0KHBtZHAsIHBtZHZhbCkgCShwbWRfdmFsKCoocG1kcCkpID0gKHBtZHZhbCkpCi0jZGVmaW5lIHBtZF9ub25lKHBtZCkJCSghcG1kX3ZhbChwbWQpKQotI2RlZmluZQlwbWRfYmFkKHBtZCkJCSghaXNfa2VybmVsX2FkZHIocG1kX3ZhbChwbWQpKSBcCi0JCQkJIHx8IChwbWRfdmFsKHBtZCkgJiBQTURfQkFEX0JJVFMpKQotI2RlZmluZQlwbWRfcHJlc2VudChwbWQpCShwbWRfdmFsKHBtZCkgIT0gMCkKLSNkZWZpbmUJcG1kX2NsZWFyKHBtZHApCQkocG1kX3ZhbCgqKHBtZHApKSA9IDApCi0jZGVmaW5lIHBtZF9wYWdlX3ZhZGRyKHBtZCkJKHBtZF92YWwocG1kKSAmIH5QTURfTUFTS0VEX0JJVFMpCi0jZGVmaW5lIHBtZF9wYWdlKHBtZCkJCXZpcnRfdG9fcGFnZShwbWRfcGFnZV92YWRkcihwbWQpKQotCi0jZGVmaW5lIHB1ZF9zZXQocHVkcCwgcHVkdmFsKQkocHVkX3ZhbCgqKHB1ZHApKSA9IChwdWR2YWwpKQotI2RlZmluZSBwdWRfbm9uZShwdWQpCQkoIXB1ZF92YWwocHVkKSkKLSNkZWZpbmUJcHVkX2JhZChwdWQpCQkoIWlzX2tlcm5lbF9hZGRyKHB1ZF92YWwocHVkKSkgXAotCQkJCSB8fCAocHVkX3ZhbChwdWQpICYgUFVEX0JBRF9CSVRTKSkKLSNkZWZpbmUgcHVkX3ByZXNlbnQocHVkKQkocHVkX3ZhbChwdWQpICE9IDApCi0jZGVmaW5lIHB1ZF9jbGVhcihwdWRwKQkJKHB1ZF92YWwoKihwdWRwKSkgPSAwKQotI2RlZmluZSBwdWRfcGFnZV92YWRkcihwdWQpCShwdWRfdmFsKHB1ZCkgJiB+UFVEX01BU0tFRF9CSVRTKQotI2RlZmluZSBwdWRfcGFnZShwdWQpCQl2aXJ0X3RvX3BhZ2UocHVkX3BhZ2VfdmFkZHIocHVkKSkKLQotI2RlZmluZSBwZ2Rfc2V0KHBnZHAsIHB1ZHApCSh7cGdkX3ZhbCgqKHBnZHApKSA9ICh1bnNpZ25lZCBsb25nKShwdWRwKTt9KQotCi0vKiAKLSAqIEZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeS4gIFdlIGNvbWJpbmUgdGhlIGFkZHJlc3MgcmVnaW9uIAotICogKHRoZSBoaWdoIG9yZGVyIE4gYml0cykgYW5kIHRoZSBwZ2QgcG9ydGlvbiBvZiB0aGUgYWRkcmVzcy4KLSAqLwotLyogdG8gYXZvaWQgb3ZlcmZsb3cgaW4gZnJlZV9wZ3RhYmxlcyB3ZSBkb24ndCB1c2UgUFRSU19QRVJfUEdEIGhlcmUgKi8KLSNkZWZpbmUgcGdkX2luZGV4KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IChQR0RJUl9TSElGVCkpICYgMHgxZmYpCi0KLSNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykJICgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcmVzcykpCi0KLSNkZWZpbmUgcG1kX29mZnNldChwdWRwLGFkZHIpIFwKLSAgKCgocG1kX3QgKikgcHVkX3BhZ2VfdmFkZHIoKihwdWRwKSkpICsgKCgoYWRkcikgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQgLSAxKSkpCi0KLSNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLGFkZHIpIFwKLSAgKCgocHRlX3QgKikgcG1kX3BhZ2VfdmFkZHIoKihkaXIpKSkgKyAoKChhZGRyKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkpCi0KLSNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLGFkZHIpCXB0ZV9vZmZzZXRfa2VybmVsKChkaXIpLCAoYWRkcikpCi0jZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsYWRkcikJcHRlX29mZnNldF9rZXJuZWwoKGRpciksIChhZGRyKSkKLSNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJCQlkbyB7IH0gd2hpbGUoMCkKLSNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpCQlkbyB7IH0gd2hpbGUoMCkKLQotLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLwotLyogVGhpcyBub3cgb25seSBjb250YWlucyB0aGUgdm1hbGxvYyBwYWdlcyAqLwotI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4KLSAqIFVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgbm90Li4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKSAgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfVVNFUjt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SVzt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9FWEVDO30KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0RJUlRZO30KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEO30KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTt9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfdW5jYWNoZShwdGVfdCBwdGUpIHsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX05PX0NBQ0hFOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NhY2hlKHB0ZV90IHB0ZSkgICB7IHB0ZV92YWwocHRlKSAmPSB+X1BBR0VfTk9fQ0FDSEU7IH0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfVVNFUjsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfZXhwcm90ZWN0KHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfRVhFQzsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX1JXKTsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9ESVJUWSk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfVVNFUjsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtleGVjKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQzsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfUlc7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0RJUlRZOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtodWdlKHB0ZV90IHB0ZSkgewotCXJldHVybiBwdGU7IH0KLQotLyogQXRvbWljIFBURSB1cGRhdGVzICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3VwZGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgICAgICBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBjbHIsCi0JCQkJICAgICAgIGludCBodWdlKQotewotCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiMToJbGRhcngJJTAsMCwlMwkJIyBwdGVfdXBkYXRlXG5cCi0JYW5kaS4JJTEsJTAsJTZcblwKLQlibmUtCTFiIFxuXAotCWFuZGMJJTEsJTAsJTQgXG5cCi0Jc3RkY3guCSUxLDAsJTMgXG5cCi0JYm5lLQkxYiIKLQk6ICI9JnIiIChvbGQpLCAiPSZyIiAodG1wKSwgIj1tIiAoKnB0ZXApCi0JOiAiciIgKHB0ZXApLCAiciIgKGNsciksICJtIiAoKnB0ZXApLCAiaSIgKF9QQUdFX0JVU1kpCi0JOiAiY2MiICk7Ci0KLQlpZiAob2xkICYgX1BBR0VfSEFTSFBURSkKLQkJaHB0ZV9uZWVkX2ZsdXNoKG1tLCBhZGRyLCBwdGVwLCBvbGQsIGh1Z2UpOwotCXJldHVybiBvbGQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9fcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKLXsKLQl1bnNpZ25lZCBsb25nIG9sZDsKLQotICAgICAgIAlpZiAoKHB0ZV92YWwoKnB0ZXApICYgKF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfSEFTSFBURSkpID09IDApCi0JCXJldHVybiAwOwotCW9sZCA9IHB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXAsIF9QQUdFX0FDQ0VTU0VELCAwKTsKLQlyZXR1cm4gKG9sZCAmIF9QQUdFX0FDQ0VTU0VEKSAhPSAwOwotfQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX1lPVU5HCi0jZGVmaW5lIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoX192bWEsIF9fYWRkciwgX19wdGVwKQkJICAgXAotKHsJCQkJCQkJCQkgICBcCi0JaW50IF9fcjsJCQkJCQkJICAgXAotCV9fciA9IF9fcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygoX192bWEpLT52bV9tbSwgX19hZGRyLCBfX3B0ZXApOyBcCi0JX19yOwkJCQkJCQkJICAgXAotfSkKLQotLyoKLSAqIE9uIFJXL0RJUlRZIGJpdCB0cmFuc2l0aW9ucyB3ZSBjYW4gYXZvaWQgZmx1c2hpbmcgdGhlIGhwdGUuIEZvciB0aGUKLSAqIG1vbWVudCB3ZSBhbHdheXMgZmx1c2ggYnV0IHdlIG5lZWQgdG8gZml4IGhwdGVfdXBkYXRlIGFuZCB0ZXN0IGlmIHRoZQotICogb3B0aW1pc2F0aW9uIGlzIHdvcnRoIGl0LgotICovCi1zdGF0aWMgaW5saW5lIGludCBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCi17Ci0JdW5zaWduZWQgbG9uZyBvbGQ7Ci0KLSAgICAgICAJaWYgKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0RJUlRZKSA9PSAwKQotCQlyZXR1cm4gMDsKLQlvbGQgPSBwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwLCBfUEFHRV9ESVJUWSwgMCk7Ci0JcmV0dXJuIChvbGQgJiBfUEFHRV9ESVJUWSkgIT0gMDsKLX0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ESVJUWQotI2RlZmluZSBwdGVwX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KF9fdm1hLCBfX2FkZHIsIF9fcHRlcCkJCSAgIFwKLSh7CQkJCQkJCQkJICAgXAotCWludCBfX3I7CQkJCQkJCSAgIFwKLQlfX3IgPSBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoKF9fdm1hKS0+dm1fbW0sIF9fYWRkciwgX19wdGVwKTsgXAotCV9fcjsJCQkJCQkJCSAgIFwKLX0pCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUCi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgICAgcHRlX3QgKnB0ZXApCi17Ci0JdW5zaWduZWQgbG9uZyBvbGQ7Ci0KLSAgICAgICAJaWYgKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX1JXKSA9PSAwKQotICAgICAgIAkJcmV0dXJuOwotCW9sZCA9IHB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXAsIF9QQUdFX1JXLCAwKTsKLX0KLQotLyoKLSAqIFdlIGN1cnJlbnRseSByZW1vdmUgZW50cmllcyBmcm9tIHRoZSBoYXNodGFibGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCi0gKiB0aGUgZW50cnkgd2FzIHlvdW5nIG9yIGRpcnR5LiBUaGUgZ2VuZXJpYyByb3V0aW5lcyBvbmx5IGZsdXNoIGlmIHRoZQotICogZW50cnkgd2FzIHlvdW5nIG9yIGRpcnR5IHdoaWNoIGlzIG5vdCBnb29kIGVub3VnaC4KLSAqCi0gKiBXZSBzaG91bGQgYmUgbW9yZSBpbnRlbGxpZ2VudCBhYm91dCB0aGlzIGJ1dCBmb3IgdGhlIG1vbWVudCB3ZSBvdmVycmlkZQotICogdGhlc2UgZnVuY3Rpb25zIGFuZCBmb3JjZSBhIHRsYiBmbHVzaCB1bmNvbmRpdGlvbmFsbHkKLSAqLwotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNICi0jZGVmaW5lIHB0ZXBfY2xlYXJfZmx1c2hfeW91bmcoX192bWEsIF9fYWRkcmVzcywgX19wdGVwKQkJXAotKHsJCQkJCQkJCQlcCi0JaW50IF9feW91bmcgPSBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKF9fdm1hKS0+dm1fbW0sIF9fYWRkcmVzcywgXAotCQkJCQkJICBfX3B0ZXApOwkJXAotCV9feW91bmc7CQkJCQkJCVwKLX0pCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ESVJUWV9GTFVTSAotI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX2RpcnR5KF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkJCVwKLSh7CQkJCQkJCQkJXAotCWludCBfX2RpcnR5ID0gX19wdGVwX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KChfX3ZtYSktPnZtX21tLCBfX2FkZHJlc3MsIFwKLQkJCQkJCSAgX19wdGVwKTsgCQlcCi0JX19kaXJ0eTsJCQkJCQkJXAotfSkKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQotewotCXVuc2lnbmVkIGxvbmcgb2xkID0gcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCwgfjBVTCwgMCk7Ci0JcmV0dXJuIF9fcHRlKG9sZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgcHRlX3QgKiBwdGVwKQotewotCXB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXAsIH4wVUwsIDApOwotfQotCi0vKgotICogc2V0X3B0ZSBzdG9yZXMgYSBsaW51eCBQVEUgaW50byB0aGUgbGludXggcGFnZSB0YWJsZS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0JaWYgKHB0ZV9wcmVzZW50KCpwdGVwKSkKLQkJcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTsKLQlwdGUgPSBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSFBURUZMQUdTKTsKLQkqcHRlcCA9IHB0ZTsKLX0KLQotLyogU2V0IHRoZSBkaXJ0eSBhbmQvb3IgYWNjZXNzZWQgYml0cyBhdG9taWNhbGx5IGluIGEgbGludXggUFRFLCB0aGlzCi0gKiBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gZmx1c2ggdGhlIGhhc2ggZW50cnkKLSAqLwotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9BQ0NFU1NfRkxBR1MKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnksIGludCBkaXJ0eSkKLXsKLQl1bnNpZ25lZCBsb25nIGJpdHMgPSBwdGVfdmFsKGVudHJ5KSAmCi0JCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKTsKLQl1bnNpZ25lZCBsb25nIG9sZCwgdG1wOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIjE6CWxkYXJ4CSUwLDAsJTRcblwKLQkJYW5kaS4JJTEsJTAsJTZcblwKLQkJYm5lLQkxYiBcblwKLQkJb3IJJTAsJTMsJTBcblwKLQkJc3RkY3guCSUwLDAsJTRcblwKLQkJYm5lLQkxYiIKLQk6Ij0mciIgKG9sZCksICI9JnIiICh0bXApLCAiPW0iICgqcHRlcCkKLQk6InIiIChiaXRzKSwgInIiIChwdGVwKSwgIm0iICgqcHRlcCksICJpIiAoX1BBR0VfQlVTWSkKLQk6ImNjIik7Ci19Ci0jZGVmaW5lICBwdGVwX3NldF9hY2Nlc3NfZmxhZ3MoX192bWEsIF9fYWRkcmVzcywgX19wdGVwLCBfX2VudHJ5LCBfX2RpcnR5KSBcCi0JZG8gewkJCQkJCQkJICAgXAotCQlfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpOwkgICBcCi0JCWZsdXNoX3RsYl9wYWdlX25vaGFzaChfX3ZtYSwgX19hZGRyZXNzKTsJICAgICAgIAkgICBcCi0JfSB3aGlsZSgwKQotCi0vKgotICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyAidW5jYWNoZWFibGUiLgotICovCi0jZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkJKF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpKQotCi1zdHJ1Y3QgZmlsZTsKLWV4dGVybiBwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHZtYV9wcm90KTsKLSNkZWZpbmUgX19IQVZFX1BIWVNfTUVNX0FDQ0VTU19QUk9UCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKLSNkZWZpbmUgcHRlX3NhbWUoQSxCKQkoKChwdGVfdmFsKEEpIF4gcHRlX3ZhbChCKSkgJiB+X1BBR0VfSFBURUZMQUdTKSA9PSAwKQotCi0jZGVmaW5lIHB0ZV9FUlJPUihlKSBcCi0JcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHRlX3ZhbChlKSkKLSNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKLQlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKGUpKQotI2RlZmluZSBwZ2RfRVJST1IoZSkgXAotCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpCi0KLWV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltdOwotCi1leHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKLQotLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLwotI2RlZmluZSBfX3N3cF90eXBlKGVudHJ5KQkoKChlbnRyeSkudmFsID4+IDEpICYgMHgzZikKLSNkZWZpbmUgX19zd3Bfb2Zmc2V0KGVudHJ5KQkoKGVudHJ5KS52YWwgPj4gOCkKLSNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KSAoKHN3cF9lbnRyeV90KXsoKHR5cGUpPDwgMSl8KChvZmZzZXQpPDw4KX0pCi0jZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3Qpe3B0ZV92YWwocHRlKSA+PiBQVEVfUlBOX1NISUZUfSkKLSNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCA8PCBQVEVfUlBOX1NISUZUIH0pCi0jZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgPj4gUFRFX1JQTl9TSElGVCkKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeygob2ZmKSA8PCBQVEVfUlBOX1NISUZUKXxfUEFHRV9GSUxFfSkKLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJKEJJVFNfUEVSX0xPTkcgLSBQVEVfUlBOX1NISUZUKQotCi0vKgotICoga2Vybl9hZGRyX3ZhbGlkIGlzIGludGVuZGVkIHRvIGluZGljYXRlIHdoZXRoZXIgYW4gYWRkcmVzcyBpcyBhIHZhbGlkCi0gKiBrZXJuZWwgYWRkcmVzcy4gIE1vc3QgMzItYml0IGFyY2hzIGRlZmluZSBpdCBhcyBhbHdheXMgdHJ1ZSAobGlrZSB0aGlzKQotICogYnV0IG1vc3QgNjQtYml0IGFyY2hzIGFjdHVhbGx5IHBlcmZvcm0gYSB0ZXN0LiAgV2hhdCBzaG91bGQgd2UgZG8gaGVyZT8KLSAqIFRoZSBvbmx5IHVzZSBpcyBpbiBmcy9uY3Bmcy9kaXIuYwotICovCi0jZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKLQotI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQkJXAotCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQotCi12b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKLQotLyoKLSAqIGZpbmRfbGludXhfcHRlIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgYSBsaW51eCBwdGUgZm9yIGEgZ2l2ZW4gCi0gKiBlZmZlY3RpdmUgYWRkcmVzcyBhbmQgZGlyZWN0b3J5LiAgSWYgbm90IGZvdW5kLCBpdCByZXR1cm5zIHplcm8uCi0gKi9zdGF0aWMgaW5saW5lIHB0ZV90ICpmaW5kX2xpbnV4X3B0ZShwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgZWEpCi17Ci0JcGdkX3QgKnBnOwotCXB1ZF90ICpwdTsKLQlwbWRfdCAqcG07Ci0JcHRlX3QgKnB0ID0gTlVMTDsKLQotCXBnID0gcGdkaXIgKyBwZ2RfaW5kZXgoZWEpOwotCWlmICghcGdkX25vbmUoKnBnKSkgewotCQlwdSA9IHB1ZF9vZmZzZXQocGcsIGVhKTsKLQkJaWYgKCFwdWRfbm9uZSgqcHUpKSB7Ci0JCQlwbSA9IHBtZF9vZmZzZXQocHUsIGVhKTsKLQkJCWlmIChwbWRfcHJlc2VudCgqcG0pKQotCQkJCXB0ID0gcHRlX29mZnNldF9rZXJuZWwocG0sIGVhKTsKLQkJfQotCX0KLQlyZXR1cm4gcHQ7Ci19Ci0KLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KLQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCi0jZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcG1hY19mZWF0dXJlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BtYWNfZmVhdHVyZS5oCmluZGV4IGQzNTk5Y2MuLjI2YmNiMGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcG1hY19mZWF0dXJlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wbWFjX2ZlYXR1cmUuaApAQCAtMjgsOCArMjgsOCBAQAogICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaWZuZGVmIF9fUFBDX0FTTV9QTUFDX0ZFQVRVUkVfSAotI2RlZmluZSBfX1BQQ19BU01fUE1BQ19GRUFUVVJFX0gKKyNpZm5kZWYgX19BU01fUE9XRVJQQ19QTUFDX0ZFQVRVUkVfSAorI2RlZmluZSBfX0FTTV9QT1dFUlBDX1BNQUNfRkVBVFVSRV9ICiAKICNpbmNsdWRlIDxhc20vbWFjaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgpAQCAtMTQ2LDcgKzE0Niw3IEBACiBzdGF0aWMgaW5saW5lIGxvbmcgcG1hY19jYWxsX2ZlYXR1cmUoaW50IHNlbGVjdG9yLCBzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsCiAJCQkJCWxvbmcgcGFyYW0sIGxvbmcgdmFsdWUpCiB7Ci0JaWYgKCFwcGNfbWQuZmVhdHVyZV9jYWxsKQorCWlmICghcHBjX21kLmZlYXR1cmVfY2FsbCB8fCAhbWFjaGluZV9pcyhwb3dlcm1hYykpCiAJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBwcGNfbWQuZmVhdHVyZV9jYWxsKHNlbGVjdG9yLCBub2RlLCBwYXJhbSwgdmFsdWUpOwogfQpAQCAtMzkzLDUgKzM5Myw1IEBACiAjZGVmaW5lIFVOX0JJQyhyLHYpCShVTl9PVVQoKHIpLCBVTl9JTihyKSAmIH4odikpKQogCiAKLSNlbmRpZiAvKiBfX1BQQ19BU01fUE1BQ19GRUFUVVJFX0ggKi8KKyNlbmRpZiAvKiBfX0FTTV9QT1dFUlBDX1BNQUNfRkVBVFVSRV9IICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wb2xsLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BvbGwuaAppbmRleCA5YzdkMTI2Li5jOTg1MDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BvbGwuaApAQCAtMSwyNCArMSBAQAotI2lmbmRlZiBfQVNNX1BPV0VSUENfUE9MTF9ICi0jZGVmaW5lIF9BU01fUE9XRVJQQ19QT0xMX0gKLQotI2RlZmluZSBQT0xMSU4JCTB4MDAwMQotI2RlZmluZSBQT0xMUFJJCQkweDAwMDIKLSNkZWZpbmUgUE9MTE9VVAkJMHgwMDA0Ci0jZGVmaW5lIFBPTExFUlIJCTB4MDAwOAotI2RlZmluZSBQT0xMSFVQCQkweDAwMTAKLSNkZWZpbmUgUE9MTE5WQUwJMHgwMDIwCi0jZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCi0jZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCi0jZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCi0jZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCi0jZGVmaW5lIFBPTExNU0cJCTB4MDQwMAotI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAotI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCi0KLXN0cnVjdCBwb2xsZmQgewotCWludCBmZDsKLQlzaG9ydCBldmVudHM7Ci0Jc2hvcnQgcmV2ZW50czsKLX07Ci0KLSNlbmRpZgkvKiBfQVNNX1BPV0VSUENfUE9MTF9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGMtcGNpLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwYy1wY2kuaAppbmRleCBkNzRiMjk2Li44ZTIwMDUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwYy1wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwYy1wY2kuaApAQCAtNjIsMTEgKzYyLDE0IEBACiAKIC8qKgogICogZWVoX3Nsb3RfZXJyb3JfZGV0YWlsIC0tIHJlY29yZCBhbmQgRUVIIGVycm9yIGNvbmRpdGlvbiB0byB0aGUgbG9nCi0gKiBAc2V2ZXJpdHk6IDEgaWYgdGVtcG9yYXJ5LCAyIGlmIHBlcm1hbmVudCBmYWlsdXJlLgorICogQHBkbjogICAgICBwY2kgZGV2aWNlIG5vZGUKKyAqIEBzZXZlcml0eTogRUVIX0xPR19URU1QX0ZBSUxVUkUgb3IgRUVIX0xPR19QRVJNX0ZBSUxVUkUKICAqCi0gKiBPYnRhaW5zIHRoZSB0aGUgRUVIIGVycm9yIGRldGFpbHMgZnJvbSB0aGUgUlRBUyBzdWJzeXN0ZW0sCisgKiBPYnRhaW5zIHRoZSBFRUggZXJyb3IgZGV0YWlscyBmcm9tIHRoZSBSVEFTIHN1YnN5c3RlbSwKICAqIGFuZCB0aGVuIGxvZ3MgdGhlc2UgZGV0YWlscyB3aXRoIHRoZSBSVEFTIGVycm9yIGxvZyBzeXN0ZW0uCiAgKi8KKyNkZWZpbmUgRUVIX0xPR19URU1QX0ZBSUxVUkUgMQorI2RlZmluZSBFRUhfTE9HX1BFUk1fRkFJTFVSRSAyCiB2b2lkIGVlaF9zbG90X2Vycm9yX2RldGFpbCAoc3RydWN0IHBjaV9kbiAqcGRuLCBpbnQgc2V2ZXJpdHkpOwogCiAvKioKQEAgLTgyLDYgKzg1LDcgQEAKIAogLyoqCiAgKiBydGFzX3NldF9zbG90X3Jlc2V0IC0tIHVuZnJlZXplIGEgZnJvemVuIHNsb3QKKyAqIEBwZG46ICAgICAgIHBjaSBkZXZpY2Ugbm9kZQogICoKICAqIENsZWFyIHRoZSBFRUgtZnJvemVuIGNvbmRpdGlvbiBvbiBhIHNsb3QuICBUaGlzIHJvdXRpbmUKICAqIGRvZXMgdGhpcyBieSBhc3NlcnRpbmcgdGhlIFBDSSAjUlNUIGxpbmUgZm9yIDEvOHRoIG9mCkBAIC05NSw2ICs5OSw3IEBACiAKIC8qKiAKICAqIGVlaF9yZXN0b3JlX2JhcnMgLSBSZXN0b3JlIGRldmljZSBjb25maWd1cmF0aW9uIGluZm8uCisgKiBAcGRuOiAgICAgICBwY2kgZGV2aWNlIG5vZGUKICAqCiAgKiBBIHJlc2V0IG9mIGEgUENJIGRldmljZSB3aWxsIGNsZWFyIG91dCBpdHMgY29uZmlnIHNwYWNlLgogICogVGhpcyByb3V0aW5lcyB3aWxsIHJlc3RvcmUgdGhlIGNvbmZpZyBzcGFjZSBmb3IgdGhpcwpAQCAtMTA1LDYgKzExMCw3IEBACiAKIC8qKgogICogcnRhc19jb25maWd1cmVfYnJpZGdlIC0tIGZpcm13YXJlIGluaXRpYWxpemF0aW9uIG9mIHBjaSBicmlkZ2UKKyAqIEBwZG46ICAgICAgIHBjaSBkZXZpY2Ugbm9kZQogICoKICAqIEFzayB0aGUgZmlybXdhcmUgdG8gY29uZmlndXJlIGFsbCBQQ0kgYnJpZGdlcyBkZXZpY2VzCiAgKiBsb2NhdGVkIGJlaGluZCB0aGUgaW5kaWNhdGVkIG5vZGUuIFJlcXVpcmVkIGFmdGVyIGEKQEAgLTExOCwxNiArMTI0LDIyIEBACiBpbnQgcnRhc19yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2RuICosIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKTsKIAogLyoqCisgKiBlZWhfbWFya19zbG90IC0tIHNldCBtb2RlIGZsYWdzIGZvciBwZXJ0aXRpb24gZW5kcG9pbnQKKyAqIEBwZG46ICAgICAgIHBjaSBkZXZpY2Ugbm9kZQorICoKICAqIG1hcmsgYW5kIGNsZWFyIHNsb3RzOiBmaW5kICJwYXJ0aXRpb24gZW5kcG9pbnQiIFBFIGFuZCBzZXQgb3IgCiAgKiBjbGVhciB0aGUgZmxhZ3MgZm9yIGVhY2ggc3Vibm9kZSBvZiB0aGUgUEUuCiAgKi8KIHZvaWQgZWVoX21hcmtfc2xvdCAoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IG1vZGVfZmxhZyk7CiB2b2lkIGVlaF9jbGVhcl9zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKTsKIAotLyogRmluZCB0aGUgYXNzb2NpYXRlZCAiUGFydGlhdGlvbmFibGUgRW5kcG9pbnQiIFBFICovCisvKioKKyAqIGZpbmRfZGV2aWNlX3BlIC0tIEZpbmQgdGhlIGFzc29jaWF0ZWQgIlBhcnRpYXRpb25hYmxlIEVuZHBvaW50IiBQRQorICogQHBkbjogICAgICAgcGNpIGRldmljZSBub2RlCisgKi8KIHN0cnVjdCBkZXZpY2Vfbm9kZSAqIGZpbmRfZGV2aWNlX3BlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfRUVIICovCiAKICNlbHNlIC8qIENPTkZJR19QQ0kgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBmaW5kX2FuZF9pbml0X3BoYnModm9pZCkgeyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oCmluZGV4IGVjNDAwZjYuLjY4NDVhZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogRGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlICovCiAjZGVmaW5lIE9GX0RUX0hFQURFUgkJMHhkMDBkZmVlZAkvKiBtYXJrZXIgKi8KQEAgLTMzNCwzMCArMzMzLDE3IEBACiBzdHJ1Y3QgcGNpX2RldjsKIGV4dGVybiBpbnQgb2ZfaXJxX21hcF9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpOwogCi1zdGF0aWMgaW5saW5lIGludCBvZl9pcnFfdG9fcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCwgc3RydWN0IHJlc291cmNlICpyKQotewotCWludCBpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkZXYsIGluZGV4KTsKK2V4dGVybiBpbnQgb2ZfaXJxX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgsCisJCQlzdHJ1Y3QgcmVzb3VyY2UgKnIpOwogCi0JLyogT25seSBkZXJlZmVyZW5jZSB0aGUgcmVzb3VyY2UgaWYgYm90aCB0aGUKLQkgKiByZXNvdXJjZSBhbmQgdGhlIGlycSBhcmUgdmFsaWQuICovCi0JaWYgKHIgJiYgaXJxICE9IE5PX0lSUSkgewotCQlyLT5zdGFydCA9IHItPmVuZCA9IGlycTsKLQkJci0+ZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTsKLQl9Ci0KLQlyZXR1cm4gaXJxOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqb2ZfaW9tYXAoc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50IGluZGV4KQotewotCXN0cnVjdCByZXNvdXJjZSByZXM7Ci0KLQlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgaW5kZXgsICZyZXMpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBpb3JlbWFwKHJlcy5zdGFydCwgMSArIHJlcy5lbmQgLSByZXMuc3RhcnQpOwotfQotCisvKioKKyAqIG9mX2lvbWFwIC0gTWFwcyB0aGUgbWVtb3J5IG1hcHBlZCBJTyBmb3IgYSBnaXZlbiBkZXZpY2Vfbm9kZQorICogQGRldmljZToJdGhlIGRldmljZSB3aG9zZSBpbyByYW5nZSB3aWxsIGJlIG1hcHBlZAorICogQGluZGV4OglpbmRleCBvZiB0aGUgaW8gcmFuZ2UKKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbWFwcGVkIG1lbW9yeQorICovCitleHRlcm4gdm9pZCBfX2lvbWVtICpvZl9pb21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgaW50IGluZGV4KTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfUE9XRVJQQ19QUk9NX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHMzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BzMy5oCmluZGV4IDgyMTU4MWEuLjFlMDQ2NTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHMzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wczMuaApAQCAtMTY3LDI2ICsxNjcsMzEgQEAKIAlQUzNfQklORElOR19DUFVfMSA9IDEsCiB9OwogCi1pbnQgcHMzX2FsbG9jX2lvX2lycShlbnVtIHBzM19jcHVfYmluZGluZyBjcHUsIHVuc2lnbmVkIGludCBpbnRlcnJ1cHRfaWQsCitpbnQgcHMzX3ZpcnFfc2V0dXAoZW51bSBwczNfY3B1X2JpbmRpbmcgY3B1LCB1bnNpZ25lZCBsb25nIG91dGxldCwKIAl1bnNpZ25lZCBpbnQgKnZpcnEpOwotaW50IHBzM19mcmVlX2lvX2lycSh1bnNpZ25lZCBpbnQgdmlycSk7Ci1pbnQgcHMzX2FsbG9jX2V2ZW50X2lycShlbnVtIHBzM19jcHVfYmluZGluZyBjcHUsIHVuc2lnbmVkIGludCAqdmlycSk7Ci1pbnQgcHMzX2ZyZWVfZXZlbnRfaXJxKHVuc2lnbmVkIGludCB2aXJxKTsKK2ludCBwczNfdmlycV9kZXN0cm95KHVuc2lnbmVkIGludCB2aXJxKTsKK2ludCBwczNfaXJxX3BsdWdfc2V0dXAoZW51bSBwczNfY3B1X2JpbmRpbmcgY3B1LCB1bnNpZ25lZCBsb25nIG91dGxldCwKKwl1bnNpZ25lZCBpbnQgKnZpcnEpOworaW50IHBzM19pcnFfcGx1Z19kZXN0cm95KHVuc2lnbmVkIGludCB2aXJxKTsKK2ludCBwczNfZXZlbnRfcmVjZWl2ZV9wb3J0X3NldHVwKGVudW0gcHMzX2NwdV9iaW5kaW5nIGNwdSwgdW5zaWduZWQgaW50ICp2aXJxKTsKK2ludCBwczNfZXZlbnRfcmVjZWl2ZV9wb3J0X2Rlc3Ryb3kodW5zaWduZWQgaW50IHZpcnEpOwogaW50IHBzM19zZW5kX2V2ZW50X2xvY2FsbHkodW5zaWduZWQgaW50IHZpcnEpOwotaW50IHBzM19jb25uZWN0X2V2ZW50X2lycShlbnVtIHBzM19jcHVfYmluZGluZyBjcHUsCisKK2ludCBwczNfaW9faXJxX3NldHVwKGVudW0gcHMzX2NwdV9iaW5kaW5nIGNwdSwgdW5zaWduZWQgaW50IGludGVycnVwdF9pZCwKKwl1bnNpZ25lZCBpbnQgKnZpcnEpOworaW50IHBzM19pb19pcnFfZGVzdHJveSh1bnNpZ25lZCBpbnQgdmlycSk7CitpbnQgcHMzX3Z1YXJ0X2lycV9zZXR1cChlbnVtIHBzM19jcHVfYmluZGluZyBjcHUsIHZvaWQqIHZpcnRfYWRkcl9ibXAsCisJdW5zaWduZWQgaW50ICp2aXJxKTsKK2ludCBwczNfdnVhcnRfaXJxX2Rlc3Ryb3kodW5zaWduZWQgaW50IHZpcnEpOworaW50IHBzM19zcGVfaXJxX3NldHVwKGVudW0gcHMzX2NwdV9iaW5kaW5nIGNwdSwgdW5zaWduZWQgbG9uZyBzcGVfaWQsCisJdW5zaWduZWQgaW50IGNsYXNzLCB1bnNpZ25lZCBpbnQgKnZpcnEpOworaW50IHBzM19zcGVfaXJxX2Rlc3Ryb3kodW5zaWduZWQgaW50IHZpcnEpOworCitpbnQgcHMzX3NiX2V2ZW50X3JlY2VpdmVfcG9ydF9zZXR1cChlbnVtIHBzM19jcHVfYmluZGluZyBjcHUsCiAJY29uc3Qgc3RydWN0IHBzM19kZXZpY2VfaWQgKmRpZCwgdW5zaWduZWQgaW50IGludGVycnVwdF9pZCwKIAl1bnNpZ25lZCBpbnQgKnZpcnEpOwotaW50IHBzM19kaXNjb25uZWN0X2V2ZW50X2lycShjb25zdCBzdHJ1Y3QgcHMzX2RldmljZV9pZCAqZGlkLAoraW50IHBzM19zYl9ldmVudF9yZWNlaXZlX3BvcnRfZGVzdHJveShjb25zdCBzdHJ1Y3QgcHMzX2RldmljZV9pZCAqZGlkLAogCXVuc2lnbmVkIGludCBpbnRlcnJ1cHRfaWQsIHVuc2lnbmVkIGludCB2aXJxKTsKLWludCBwczNfYWxsb2NfdnVhcnRfaXJxKGVudW0gcHMzX2NwdV9iaW5kaW5nIGNwdSwgdm9pZCogdmlydF9hZGRyX2JtcCwKLQl1bnNpZ25lZCBpbnQgKnZpcnEpOwotaW50IHBzM19mcmVlX3Z1YXJ0X2lycSh1bnNpZ25lZCBpbnQgdmlycSk7Ci1pbnQgcHMzX2FsbG9jX3NwZV9pcnEoZW51bSBwczNfY3B1X2JpbmRpbmcgY3B1LCB1bnNpZ25lZCBsb25nIHNwZV9pZCwKLQl1bnNpZ25lZCBpbnQgY2xhc3MsIHVuc2lnbmVkIGludCAqdmlycSk7Ci1pbnQgcHMzX2ZyZWVfc3BlX2lycSh1bnNpZ25lZCBpbnQgdmlycSk7Ci1pbnQgcHMzX2FsbG9jX2lycShlbnVtIHBzM19jcHVfYmluZGluZyBjcHUsIHVuc2lnbmVkIGxvbmcgb3V0bGV0LAotCXVuc2lnbmVkIGludCAqdmlycSk7Ci1pbnQgcHMzX2ZyZWVfaXJxKHVuc2lnbmVkIGludCB2aXJxKTsKIAogLyogbHYxIHJlc3VsdCBjb2RlcyAqLwogCkBAIC0zNzIsOCArMzc3LDEzIEBACiAKIC8qIHN5c3RlbSBtYW5hZ2VyICovCiAKKyNpZmRlZiBDT05GSUdfUFMzX1NZU19NQU5BR0VSCiB2b2lkIHBzM19zeXNfbWFuYWdlcl9yZXN0YXJ0KHZvaWQpOwogdm9pZCBwczNfc3lzX21hbmFnZXJfcG93ZXJfb2ZmKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwczNfc3lzX21hbmFnZXJfcmVzdGFydCh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHBzM19zeXNfbWFuYWdlcl9wb3dlcl9vZmYodm9pZCkge30KKyNlbmRpZgogCiBzdHJ1Y3QgcHMzX3ByZWFsbG9jIHsKICAgICBjb25zdCBjaGFyICpuYW1lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9xZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9xZS5oCmluZGV4IGE2MjE2OGVjLi45ZDMwNGIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3FlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9xZS5oCkBAIC0zOCwxMSArMzgsMTEgQEAKIHZvaWQgcWVfc2V0YnJnKHUzMiBicmcsIHUzMiByYXRlKTsKIGludCBxZV9nZXRfc251bSh2b2lkKTsKIHZvaWQgcWVfcHV0X3NudW0odTggc251bSk7Ci11MzIgcWVfbXVyYW1fYWxsb2ModTMyIHNpemUsIHUzMiBhbGlnbik7Ci1pbnQgcWVfbXVyYW1fZnJlZSh1MzIgb2Zmc2V0KTsKLXUzMiBxZV9tdXJhbV9hbGxvY19maXhlZCh1MzIgb2Zmc2V0LCB1MzIgc2l6ZSk7Cit1bnNpZ25lZCBsb25nIHFlX211cmFtX2FsbG9jKGludCBzaXplLCBpbnQgYWxpZ24pOworaW50IHFlX211cmFtX2ZyZWUodW5zaWduZWQgbG9uZyBvZmZzZXQpOwordW5zaWduZWQgbG9uZyBxZV9tdXJhbV9hbGxvY19maXhlZCh1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IHNpemUpOwogdm9pZCBxZV9tdXJhbV9kdW1wKHZvaWQpOwotdm9pZCAqcWVfbXVyYW1fYWRkcih1MzIgb2Zmc2V0KTsKK3ZvaWQgKnFlX211cmFtX2FkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOwogCiAvKiBCdWZmZXIgZGVzY3JpcHRvcnMgKi8KIHN0cnVjdCBxZV9iZCB7CkBAIC00NDgsMTAgKzQ0OCw1IEBACiAjZGVmaW5lIFVDQ19GQVNUX0ZVTkNUSU9OX0NPREVfRFRCX0xDTAkweDAyCiAjZGVmaW5lIFVDQ19GQVNUX0ZVTkNUSU9OX0NPREVfQkRCX0xDTAkweDAxCiAKLXN0YXRpYyBpbmxpbmUgbG9uZyBJU19NVVJBTV9FUlIoY29uc3QgdTMyIG9mZnNldCkKLXsKLQlyZXR1cm4gb2Zmc2V0ID4gKHUzMikgLSAxMDAwTDsKLX0KLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUUVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWdfYm9va2UuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnX2Jvb2tlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0NDA1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnX2Jvb2tlLmgKQEAgLTAsMCArMSw0NjkgQEAKKy8qCisgKiBDb250YWlucyByZWdpc3RlciBkZWZpbml0aW9ucyBjb21tb24gdG8gdGhlIEJvb2sgRSBQb3dlclBDCisgKiBzcGVjaWZpY2F0aW9uLiAgTm90aWNlIHRoYXQgd2hpbGUgdGhlIElCTS00MHggc2VyaWVzIG9mIENQVXMKKyAqIGFyZSBub3QgdHJ1ZSBCb29rIEUgUG93ZXJQQ3MsIHRoZXkgYm9ycm93ZWQgYSBudW1iZXIgb2YgZmVhdHVyZXMKKyAqIGJlZm9yZSBCb29rIEUgd2FzIGZpbmFsaXplZCwgYW5kIGFyZSBpbmNsdWRlZCBoZXJlIGFzIHdlbGwuICBVbmZvcnR1bmF0bHksCisgKiB0aGV5IHNvbWV0aW1lcyB1c2VkIGRpZmZlcmVudCBsb2NhdGlvbnMgdGhhbiB0cnVlIEJvb2sgRSBDUFVzIGRpZC4KKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU01fUE9XRVJQQ19SRUdfQk9PS0VfSF9fCisjZGVmaW5lIF9fQVNNX1BPV0VSUENfUkVHX0JPT0tFX0hfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyogUGVyZm9ybWFuY2UgTW9uaXRvciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgbWZwbXIocm4pCSh7dW5zaWduZWQgaW50IHJ2YWw7IFwKKwkJCWFzbSB2b2xhdGlsZSgibWZwbXIgJTAsIiBfX3N0cmluZ2lmeShybikgXAorCQkJCSAgICAgOiAiPXIiIChydmFsKSk7IHJ2YWw7fSkKKyNkZWZpbmUgbXRwbXIocm4sIHYpCWFzbSB2b2xhdGlsZSgibXRwbXIgIiBfX3N0cmluZ2lmeShybikgIiwlMCIgOiA6ICJyIiAodikpCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qIEZyZWVzY2FsZSBCb29rIEUgUGVyZm9ybWFuY2UgTW9uaXRvciBBUFUgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBNUk5fUE1DMAkweDAxMAkvKiBQZXJmb3JtYW5jZSBNb25pdG9yIENvdW50ZXIgMCAqLworI2RlZmluZSBQTVJOX1BNQzEJMHgwMTEJLyogUGVyZm9ybWFuY2UgTW9uaXRvciBDb3VudGVyIDEgKi8KKyNkZWZpbmUgUE1STl9QTUMyCTB4MDEyCS8qIFBlcmZvcm1hbmNlIE1vbml0b3IgQ291bnRlciAxICovCisjZGVmaW5lIFBNUk5fUE1DMwkweDAxMwkvKiBQZXJmb3JtYW5jZSBNb25pdG9yIENvdW50ZXIgMSAqLworI2RlZmluZSBQTVJOX1BNTENBMAkweDA5MAkvKiBQTSBMb2NhbCBDb250cm9sIEEwICovCisjZGVmaW5lIFBNUk5fUE1MQ0ExCTB4MDkxCS8qIFBNIExvY2FsIENvbnRyb2wgQTEgKi8KKyNkZWZpbmUgUE1STl9QTUxDQTIJMHgwOTIJLyogUE0gTG9jYWwgQ29udHJvbCBBMiAqLworI2RlZmluZSBQTVJOX1BNTENBMwkweDA5MwkvKiBQTSBMb2NhbCBDb250cm9sIEEzICovCisKKyNkZWZpbmUgUE1MQ0FfRkMJMHg4MDAwMDAwMAkvKiBGcmVlemUgQ291bnRlciAqLworI2RlZmluZSBQTUxDQV9GQ1MJMHg0MDAwMDAwMAkvKiBGcmVlemUgaW4gU3VwZXJ2aXNvciAqLworI2RlZmluZSBQTUxDQV9GQ1UJMHgyMDAwMDAwMAkvKiBGcmVlemUgaW4gVXNlciAqLworI2RlZmluZSBQTUxDQV9GQ00xCTB4MTAwMDAwMDAJLyogRnJlZXplIHdoZW4gUE1NPT0xICovCisjZGVmaW5lIFBNTENBX0ZDTTAJMHgwODAwMDAwMAkvKiBGcmVlemUgd2hlbiBQTU09PTAgKi8KKyNkZWZpbmUgUE1MQ0FfQ0UJMHgwNDAwMDAwMAkvKiBDb25kaXRpb24gRW5hYmxlICovCisKKyNkZWZpbmUgUE1MQ0FfRVZFTlRfTUFTSyAweDAwN2YwMDAwCS8qIEV2ZW50IGZpZWxkICovCisjZGVmaW5lIFBNTENBX0VWRU5UX1NISUZUCTE2CisKKyNkZWZpbmUgUE1STl9QTUxDQjAJMHgxMTAJLyogUE0gTG9jYWwgQ29udHJvbCBCMCAqLworI2RlZmluZSBQTVJOX1BNTENCMQkweDExMQkvKiBQTSBMb2NhbCBDb250cm9sIEIxICovCisjZGVmaW5lIFBNUk5fUE1MQ0IyCTB4MTEyCS8qIFBNIExvY2FsIENvbnRyb2wgQjIgKi8KKyNkZWZpbmUgUE1STl9QTUxDQjMJMHgxMTMJLyogUE0gTG9jYWwgQ29udHJvbCBCMyAqLworCisjZGVmaW5lIFBNTENCX1RIUkVTSE1VTF9NQVNLCTB4MDcwMAkvKiBUaHJlc2hob2xkIE11bHRpcGxlIEZpZWxkICovCisjZGVmaW5lIFBNTENCX1RIUkVTSE1VTF9TSElGVAk4CisKKyNkZWZpbmUgUE1MQ0JfVEhSRVNIT0xEX01BU0sJMHgwMDNmCS8qIFRocmVzaG9sZCBGaWVsZCAqLworI2RlZmluZSBQTUxDQl9USFJFU0hPTERfU0hJRlQJMAorCisjZGVmaW5lIFBNUk5fUE1HQzAJMHgxOTAJLyogUE0gR2xvYmFsIENvbnRyb2wgMCAqLworCisjZGVmaW5lIFBNR0MwX0ZBQwkweDgwMDAwMDAwCS8qIEZyZWV6ZSBhbGwgQ291bnRlcnMgKi8KKyNkZWZpbmUgUE1HQzBfUE1JRQkweDQwMDAwMDAwCS8qIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgUE1HQzBfRkNFQ0UJMHgyMDAwMDAwMAkvKiBGcmVlemUgY291bnRlcyBvbgorCQkJCQkgICBFbmFibGVkIENvbmRpdGlvbiBvcgorCQkJCQkgICBFdmVudCAqLworCisjZGVmaW5lIFBNUk5fVVBNQzAJMHgwMDAJLyogVXNlciBQZXJmb3JtYW5jZSBNb25pdG9yIENvdW50ZXIgMCAqLworI2RlZmluZSBQTVJOX1VQTUMxCTB4MDAxCS8qIFVzZXIgUGVyZm9ybWFuY2UgTW9uaXRvciBDb3VudGVyIDEgKi8KKyNkZWZpbmUgUE1STl9VUE1DMgkweDAwMgkvKiBVc2VyIFBlcmZvcm1hbmNlIE1vbml0b3IgQ291bnRlciAxICovCisjZGVmaW5lIFBNUk5fVVBNQzMJMHgwMDMJLyogVXNlciBQZXJmb3JtYW5jZSBNb25pdG9yIENvdW50ZXIgMSAqLworI2RlZmluZSBQTVJOX1VQTUxDQTAJMHgwODAJLyogVXNlciBQTSBMb2NhbCBDb250cm9sIEEwICovCisjZGVmaW5lIFBNUk5fVVBNTENBMQkweDA4MQkvKiBVc2VyIFBNIExvY2FsIENvbnRyb2wgQTEgKi8KKyNkZWZpbmUgUE1STl9VUE1MQ0EyCTB4MDgyCS8qIFVzZXIgUE0gTG9jYWwgQ29udHJvbCBBMiAqLworI2RlZmluZSBQTVJOX1VQTUxDQTMJMHgwODMJLyogVXNlciBQTSBMb2NhbCBDb250cm9sIEEzICovCisjZGVmaW5lIFBNUk5fVVBNTENCMAkweDEwMAkvKiBVc2VyIFBNIExvY2FsIENvbnRyb2wgQjAgKi8KKyNkZWZpbmUgUE1STl9VUE1MQ0IxCTB4MTAxCS8qIFVzZXIgUE0gTG9jYWwgQ29udHJvbCBCMSAqLworI2RlZmluZSBQTVJOX1VQTUxDQjIJMHgxMDIJLyogVXNlciBQTSBMb2NhbCBDb250cm9sIEIyICovCisjZGVmaW5lIFBNUk5fVVBNTENCMwkweDEwMwkvKiBVc2VyIFBNIExvY2FsIENvbnRyb2wgQjMgKi8KKyNkZWZpbmUgUE1STl9VUE1HQzAJMHgxODAJLyogVXNlciBQTSBHbG9iYWwgQ29udHJvbCAwICovCisKKworLyogTWFjaGluZSBTdGF0ZSBSZWdpc3RlciAoTVNSKSBGaWVsZHMgKi8KKyNkZWZpbmUgTVNSX1VDTEUJKDE8PDI2KQkvKiBVc2VyLW1vZGUgY2FjaGUgbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgTVNSX1NQRQkJKDE8PDI1KQkvKiBFbmFibGUgU1BFICovCisjZGVmaW5lIE1TUl9EV0UJCSgxPDwxMCkJLyogRGVidWcgV2FpdCBFbmFibGUgKi8KKyNkZWZpbmUgTVNSX1VCTEUJKDE8PDEwKQkvKiBCVEIgbG9jayBlbmFibGUgKGU1MDApICovCisjZGVmaW5lIE1TUl9JUwkJTVNSX0lSCS8qIEluc3RydWN0aW9uIFNwYWNlICovCisjZGVmaW5lIE1TUl9EUwkJTVNSX0RSCS8qIERhdGEgU3BhY2UgKi8KKyNkZWZpbmUgTVNSX1BNTQkJKDE8PDIpCS8qIFBlcmZvcm1hbmNlIG1vbml0b3IgbWFyayBiaXQgKi8KKworLyogRGVmYXVsdCBNU1IgZm9yIGtlcm5lbCBtb2RlLiAqLworI2lmIGRlZmluZWQgKENPTkZJR180MHgpCisjZGVmaW5lIE1TUl9LRVJORUwJKE1TUl9NRXxNU1JfUkl8TVNSX0lSfE1TUl9EUnxNU1JfQ0UpCisjZWxpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNkZWZpbmUgTVNSX0tFUk5FTAkoTVNSX01FfE1TUl9SSXxNU1JfQ0UpCisjZW5kaWYKKworLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVycyAoU1BSTnMpKi8KKyNkZWZpbmUgU1BSTl9ERUNBUgkweDAzNgkvKiBEZWNyZW1lbnRlciBBdXRvIFJlbG9hZCBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0lWUFIJMHgwM0YJLyogSW50ZXJydXB0IFZlY3RvciBQcmVmaXggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9VU1BSRzAJMHgxMDAJLyogVXNlciBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCAwICovCisjZGVmaW5lIFNQUk5fU1BSRzRSCTB4MTA0CS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDQgUmVhZCAqLworI2RlZmluZSBTUFJOX1NQUkc1UgkweDEwNQkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCA1IFJlYWQgKi8KKyNkZWZpbmUgU1BSTl9TUFJHNlIJMHgxMDYJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgNiBSZWFkICovCisjZGVmaW5lIFNQUk5fU1BSRzdSCTB4MTA3CS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDcgUmVhZCAqLworI2RlZmluZSBTUFJOX1NQUkc0VwkweDExNAkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCA0IFdyaXRlICovCisjZGVmaW5lIFNQUk5fU1BSRzVXCTB4MTE1CS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDUgV3JpdGUgKi8KKyNkZWZpbmUgU1BSTl9TUFJHNlcJMHgxMTYJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgNiBXcml0ZSAqLworI2RlZmluZSBTUFJOX1NQUkc3VwkweDExNwkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCA3IFdyaXRlICovCisjZGVmaW5lIFNQUk5fREJDUjIJMHgxMzYJLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fSUFDMwkweDEzQQkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMyAqLworI2RlZmluZSBTUFJOX0lBQzQJMHgxM0IJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBDb21wYXJlIDQgKi8KKyNkZWZpbmUgU1BSTl9EVkMxCTB4MTNFCS8qIERhdGEgVmFsdWUgQ29tcGFyZSBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fRFZDMgkweDEzRgkvKiBEYXRhIFZhbHVlIENvbXBhcmUgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTUFJOX0lWT1IwCTB4MTkwCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMQkweDE5MQkvKiBJbnRlcnJ1cHQgVmVjdG9yIE9mZnNldCBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fSVZPUjIJMHgxOTIJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTUFJOX0lWT1IzCTB4MTkzCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgU1BSTl9JVk9SNAkweDE5NAkvKiBJbnRlcnJ1cHQgVmVjdG9yIE9mZnNldCBSZWdpc3RlciA0ICovCisjZGVmaW5lIFNQUk5fSVZPUjUJMHgxOTUJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgNSAqLworI2RlZmluZSBTUFJOX0lWT1I2CTB4MTk2CS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgU1BSTl9JVk9SNwkweDE5NwkvKiBJbnRlcnJ1cHQgVmVjdG9yIE9mZnNldCBSZWdpc3RlciA3ICovCisjZGVmaW5lIFNQUk5fSVZPUjgJMHgxOTgJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgOCAqLworI2RlZmluZSBTUFJOX0lWT1I5CTB4MTk5CS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDkgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTAJMHgxOUEJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTAgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTEJMHgxOUIJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTEgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTIJMHgxOUMJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTIgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTMJMHgxOUQJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTMgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTQJMHgxOUUJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTQgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMTUJMHgxOUYJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTUgKi8KKyNkZWZpbmUgU1BSTl9TUEVGU0NSCTB4MjAwCS8qIFNQRSAmIEVtYmVkZGVkIEZQIFN0YXR1cyAmIENvbnRyb2wgKi8KKyNkZWZpbmUgU1BSTl9CQkVBUgkweDIwMQkvKiBCcmFuY2ggQnVmZmVyIEVudHJ5IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9CQlRBUgkweDIwMgkvKiBCcmFuY2ggQnVmZmVyIFRhcmdldCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fSVZPUjMyCTB4MjEwCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDMyICovCisjZGVmaW5lIFNQUk5fSVZPUjMzCTB4MjExCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDMzICovCisjZGVmaW5lIFNQUk5fSVZPUjM0CTB4MjEyCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDM0ICovCisjZGVmaW5lIFNQUk5fSVZPUjM1CTB4MjEzCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDM1ICovCisjZGVmaW5lIFNQUk5fTUNTUlIwCTB4MjNBCS8qIE1hY2hpbmUgQ2hlY2sgU2F2ZSBhbmQgUmVzdG9yZSBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fTUNTUlIxCTB4MjNCCS8qIE1hY2hpbmUgQ2hlY2sgU2F2ZSBhbmQgUmVzdG9yZSBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fTUNTUgkweDIzQwkvKiBNYWNoaW5lIENoZWNrIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX01DQVIJMHgyM0QJLyogTWFjaGluZSBDaGVjayBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fRFNSUjAJMHgyM0UJLyogRGVidWcgU2F2ZSBhbmQgUmVzdG9yZSBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fRFNSUjEJMHgyM0YJLyogRGVidWcgU2F2ZSBhbmQgUmVzdG9yZSBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fTUFTMAkweDI3MAkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9NQVMxCTB4MjcxCS8qIE1NVSBBc3Npc3QgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUFJOX01BUzIJMHgyNzIJLyogTU1VIEFzc2lzdCBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fTUFTMwkweDI3MwkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgU1BSTl9NQVM0CTB4Mjc0CS8qIE1NVSBBc3Npc3QgUmVnaXN0ZXIgNCAqLworI2RlZmluZSBTUFJOX01BUzUJMHgyNzUJLyogTU1VIEFzc2lzdCBSZWdpc3RlciA1ICovCisjZGVmaW5lIFNQUk5fTUFTNgkweDI3NgkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgU1BSTl9NQVM3CTB4M2IwCS8qIE1NVSBBc3Npc3QgUmVnaXN0ZXIgNyAqLworI2RlZmluZSBTUFJOX1BJRDEJMHgyNzkJLyogUHJvY2VzcyBJRCBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fUElEMgkweDI3QQkvKiBQcm9jZXNzIElEIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgU1BSTl9UTEIwQ0ZHCTB4MkIwCS8qIFRMQiAwIENvbmZpZyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1RMQjFDRkcJMHgyQjEJLyogVExCIDEgQ29uZmlnIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fQ0NSMQkweDM3OAkvKiBDb3JlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUFJOX1pQUgkweDNCMAkvKiBab25lIFByb3RlY3Rpb24gUmVnaXN0ZXIgKDQweCkgKi8KKyNkZWZpbmUgU1BSTl9NTVVDUgkweDNCMgkvKiBNTVUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0NDUjAJMHgzQjMJLyogQ29yZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9TR1IJMHgzQjkJLyogU3RvcmFnZSBHdWFyZGVkIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fRENXUgkweDNCQQkvKiBEYXRhIENhY2hlIFdyaXRlLXRocnUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9TTEVSCTB4M0JCCS8qIExpdHRsZS1lbmRpYW4gcmVhbCBtb2RlICovCisjZGVmaW5lIFNQUk5fU1UwUgkweDNCQwkvKiAiVXNlciAwIiByZWFsIG1vZGUgKDQweCkgKi8KKyNkZWZpbmUgU1BSTl9EQ01QCTB4M0QxCS8qIERhdGEgVExCIENvbXBhcmUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9JQ0RCRFIJMHgzRDMJLyogSW5zdHJ1Y3Rpb24gQ2FjaGUgRGVidWcgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0VWUFIJMHgzRDYJLyogRXhjZXB0aW9uIFZlY3RvciBQcmVmaXggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9MMUNTUjAJMHgzRjIJLyogTDEgQ2FjaGUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9MMUNTUjEJMHgzRjMJLyogTDEgQ2FjaGUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1BSTl9QSVQJMHgzREIJLyogUHJvZ3JhbW1hYmxlIEludGVydmFsIFRpbWVyICovCisjZGVmaW5lIFNQUk5fRENDUgkweDNGQQkvKiBEYXRhIENhY2hlIENhY2hlYWJpbGl0eSBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0lDQ1IJMHgzRkIJLyogSW5zdHJ1Y3Rpb24gQ2FjaGUgQ2FjaGVhYmlsaXR5IFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fU1ZSCTB4M0ZGCS8qIFN5c3RlbSBWZXJzaW9uIFJlZ2lzdGVyICovCisKKy8qCisgKiBTUFJzIHdoaWNoIGhhdmUgY29uZmxpY3RpbmcgZGVmaW5pdGlvbnMgb24gdHJ1ZSBCb29rIEUgdmVyc3VzIGNsYXNzaWMsCisgKiBvciBJQk0gNDB4LgorICovCisjaWZkZWYgQ09ORklHX0JPT0tFCisjZGVmaW5lIFNQUk5fUElECTB4MDMwCS8qIFByb2Nlc3MgSUQgKi8KKyNkZWZpbmUgU1BSTl9QSUQwCVNQUk5fUElELyogUHJvY2VzcyBJRCBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fQ1NSUjAJMHgwM0EJLyogQ3JpdGljYWwgU2F2ZSBhbmQgUmVzdG9yZSBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fQ1NSUjEJMHgwM0IJLyogQ3JpdGljYWwgU2F2ZSBhbmQgUmVzdG9yZSBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fREVBUgkweDAzRAkvKiBEYXRhIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9FU1IJMHgwM0UJLyogRXhjZXB0aW9uIFN5bmRyb21lIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fUElSCTB4MTFFCS8qIFByb2Nlc3NvciBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0RCU1IJMHgxMzAJLyogRGVidWcgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fREJDUjAJMHgxMzQJLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fREJDUjEJMHgxMzUJLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fSUFDMQkweDEzOAkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMSAqLworI2RlZmluZSBTUFJOX0lBQzIJMHgxMzkJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBDb21wYXJlIDIgKi8KKyNkZWZpbmUgU1BSTl9EQUMxCTB4MTNDCS8qIERhdGEgQWRkcmVzcyBDb21wYXJlIDEgKi8KKyNkZWZpbmUgU1BSTl9EQUMyCTB4MTNECS8qIERhdGEgQWRkcmVzcyBDb21wYXJlIDIgKi8KKyNkZWZpbmUgU1BSTl9UU1IJMHgxNTAJLyogVGltZXIgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fVENSCTB4MTU0CS8qIFRpbWVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNlbmRpZiAvKiBCb29rIEUgKi8KKyNpZmRlZiBDT05GSUdfNDB4CisjZGVmaW5lIFNQUk5fUElECTB4M0IxCS8qIFByb2Nlc3MgSUQgKi8KKyNkZWZpbmUgU1BSTl9EQkNSMQkweDNCRAkvKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIDEgKi8JCQorI2RlZmluZSBTUFJOX0VTUgkweDNENAkvKiBFeGNlcHRpb24gU3luZHJvbWUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9ERUFSCTB4M0Q1CS8qIERhdGEgRXJyb3IgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1RTUgkweDNEOAkvKiBUaW1lciBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9UQ1IJMHgzREEJLyogVGltZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1NSUjIJMHgzREUJLyogU2F2ZS9SZXN0b3JlIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgU1BSTl9TUlIzCTB4M0RGCS8qIFNhdmUvUmVzdG9yZSBSZWdpc3RlciAzICovCisjZGVmaW5lIFNQUk5fREJTUgkweDNGMAkvKiBEZWJ1ZyBTdGF0dXMgUmVnaXN0ZXIgKi8JCQorI2RlZmluZSBTUFJOX0RCQ1IwCTB4M0YyCS8qIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUFJOX0RBQzEJMHgzRjYJLyogRGF0YSBBZGRyZXNzIENvbXBhcmUgMSAqLworI2RlZmluZSBTUFJOX0RBQzIJMHgzRjcJLyogRGF0YSBBZGRyZXNzIENvbXBhcmUgMiAqLworI2RlZmluZSBTUFJOX0NTUlIwCVNQUk5fU1JSMiAvKiBDcml0aWNhbCBTYXZlIGFuZCBSZXN0b3JlIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9DU1JSMQlTUFJOX1NSUjMgLyogQ3JpdGljYWwgU2F2ZSBhbmQgUmVzdG9yZSBSZWdpc3RlciAxICovCisjZW5kaWYKKworLyogQml0IGRlZmluaXRpb25zIGZvciBDQ1IxLiAqLworI2RlZmluZQlDQ1IxX0RQQwkweDAwMDAwMTAwIC8qIERpc2FibGUgTDEgSS1DYWNoZS9ELUNhY2hlIHBhcml0eSBjaGVja2luZyAqLworI2RlZmluZQlDQ1IxX1RDUwkweDAwMDAwMDgwIC8qIFRpbWVyIENsb2NrIFNlbGVjdCAqLworCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBNQ1NSLiAqLworI2lmZGVmIENPTkZJR180NDBBCisjZGVmaW5lIE1DU1JfTUNTCTB4ODAwMDAwMDAgLyogTWFjaGluZSBDaGVjayBTdW1tYXJ5ICovCisjZGVmaW5lIE1DU1JfSUIJCTB4NDAwMDAwMDAgLyogSW5zdHJ1Y3Rpb24gUExCIEVycm9yICovCisjZGVmaW5lIE1DU1JfRFJCCTB4MjAwMDAwMDAgLyogRGF0YSBSZWFkIFBMQiBFcnJvciAqLworI2RlZmluZSBNQ1NSX0RXQgkweDEwMDAwMDAwIC8qIERhdGEgV3JpdGUgUExCIEVycm9yICovCisjZGVmaW5lIE1DU1JfVExCUAkweDA4MDAwMDAwIC8qIFRMQiBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9JQ1AJMHgwNDAwMDAwMCAvKiBJLUNhY2hlIFBhcml0eSBFcnJvciAqLworI2RlZmluZSBNQ1NSX0RDU1AJMHgwMjAwMDAwMCAvKiBELUNhY2hlIFNlYXJjaCBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9EQ0ZQCTB4MDEwMDAwMDAgLyogRC1DYWNoZSBGbHVzaCBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9JTVBFCTB4MDA4MDAwMDAgLyogSW1wcmVjaXNlIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRTUwMAorI2RlZmluZSBNQ1NSX01DUCAJMHg4MDAwMDAwMFVMIC8qIE1hY2hpbmUgQ2hlY2sgSW5wdXQgUGluICovCisjZGVmaW5lIE1DU1JfSUNQRVJSIAkweDQwMDAwMDAwVUwgLyogSS1DYWNoZSBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9EQ1BfUEVSUiAJMHgyMDAwMDAwMFVMIC8qIEQtQ2FjaGUgUHVzaCBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9EQ1BFUlIgCTB4MTAwMDAwMDBVTCAvKiBELUNhY2hlIFBhcml0eSBFcnJvciAqLworI2RlZmluZSBNQ1NSX0dMX0NJIAkweDAwMDEwMDAwVUwgLyogR3VhcmRlZCBMb2FkIG9yIENhY2hlLUluaGliaXRlZCBzdHdjeC4gKi8KKyNkZWZpbmUgTUNTUl9CVVNfSUFFUlIgCTB4MDAwMDAwODBVTCAvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIEVycm9yICovCisjZGVmaW5lIE1DU1JfQlVTX1JBRVJSIAkweDAwMDAwMDQwVUwgLyogUmVhZCBBZGRyZXNzIEVycm9yICovCisjZGVmaW5lIE1DU1JfQlVTX1dBRVJSIAkweDAwMDAwMDIwVUwgLyogV3JpdGUgQWRkcmVzcyBFcnJvciAqLworI2RlZmluZSBNQ1NSX0JVU19JQkVSUiAJMHgwMDAwMDAxMFVMIC8qIEluc3RydWN0aW9uIERhdGEgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9CVVNfUkJFUlIgCTB4MDAwMDAwMDhVTCAvKiBSZWFkIERhdGEgQnVzIEVycm9yICovCisjZGVmaW5lIE1DU1JfQlVTX1dCRVJSIAkweDAwMDAwMDA0VUwgLyogV3JpdGUgRGF0YSBCdXMgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9CVVNfSVBFUlIgCTB4MDAwMDAwMDJVTCAvKiBJbnN0cnVjdGlvbiBwYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgTUNTUl9CVVNfUlBFUlIgCTB4MDAwMDAwMDFVTCAvKiBSZWFkIHBhcml0eSBFcnJvciAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX0UyMDAKKyNkZWZpbmUgTUNTUl9NQ1AgCTB4ODAwMDAwMDBVTCAvKiBNYWNoaW5lIENoZWNrIElucHV0IFBpbiAqLworI2RlZmluZSBNQ1NSX0NQX1BFUlIgCTB4MjAwMDAwMDBVTCAvKiBDYWNoZSBQdXNoIFBhcml0eSBFcnJvciAqLworI2RlZmluZSBNQ1NSX0NQRVJSIAkweDEwMDAwMDAwVUwgLyogQ2FjaGUgUGFyaXR5IEVycm9yICovCisjZGVmaW5lIE1DU1JfRVhDUF9FUlIgCTB4MDgwMDAwMDBVTCAvKiBJU0ksIElUTEIsIG9yIEJ1cyBFcnJvciBvbiAxc3QgaW5zbgorCQkJCQlmZXRjaCBmb3IgYW4gZXhjZXB0aW9uIGhhbmRsZXIgKi8KKyNkZWZpbmUgTUNTUl9CVVNfSVJFUlIgCTB4MDAwMDAwMTBVTCAvKiBSZWFkIEJ1cyBFcnJvciBvbiBpbnN0cnVjdGlvbiBmZXRjaCovCisjZGVmaW5lIE1DU1JfQlVTX0RSRVJSIAkweDAwMDAwMDA4VUwgLyogUmVhZCBCdXMgRXJyb3Igb24gZGF0YSBsb2FkICovCisjZGVmaW5lIE1DU1JfQlVTX1dSRVJSIAkweDAwMDAwMDA0VUwgLyogV3JpdGUgQnVzIEVycm9yIG9uIGJ1ZmZlcmVkCisJCQkJCXN0b3JlIG9yIGNhY2hlIGxpbmUgcHVzaCAqLworI2VuZGlmCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIERCU1IuICovCisvKgorICogREJTUiBiaXRzIHdoaWNoIGhhdmUgY29uZmxpY3RpbmcgZGVmaW5pdGlvbnMgb24gdHJ1ZSBCb29rIEUgdmVyc3VzIElCTSA0MHguCisgKi8KKyNpZmRlZiBDT05GSUdfQk9PS0UKKyNkZWZpbmUgREJTUl9JQwkJMHgwODAwMDAwMAkvKiBJbnN0cnVjdGlvbiBDb21wbGV0aW9uICovCisjZGVmaW5lIERCU1JfQlQJCTB4MDQwMDAwMDAJLyogQnJhbmNoIFRha2VuICovCisjZGVmaW5lIERCU1JfVElFCTB4MDEwMDAwMDAJLyogVHJhcCBJbnN0cnVjdGlvbiBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzEJMHgwMDgwMDAwMAkvKiBJbnN0ciBBZGRyZXNzIENvbXBhcmUgMSBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzIJMHgwMDQwMDAwMAkvKiBJbnN0ciBBZGRyZXNzIENvbXBhcmUgMiBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzMJMHgwMDIwMDAwMAkvKiBJbnN0ciBBZGRyZXNzIENvbXBhcmUgMyBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzQJMHgwMDEwMDAwMAkvKiBJbnN0ciBBZGRyZXNzIENvbXBhcmUgNCBFdmVudCAqLworI2RlZmluZSBEQlNSX0RBQzFSCTB4MDAwODAwMDAJLyogRGF0YSBBZGRyIENvbXBhcmUgMSBSZWFkIEV2ZW50ICovCisjZGVmaW5lIERCU1JfREFDMVcJMHgwMDA0MDAwMAkvKiBEYXRhIEFkZHIgQ29tcGFyZSAxIFdyaXRlIEV2ZW50ICovCisjZGVmaW5lIERCU1JfREFDMlIJMHgwMDAyMDAwMAkvKiBEYXRhIEFkZHIgQ29tcGFyZSAyIFJlYWQgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9EQUMyVwkweDAwMDEwMDAwCS8qIERhdGEgQWRkciBDb21wYXJlIDIgV3JpdGUgRXZlbnQgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR180MHgKKyNkZWZpbmUgREJTUl9JQwkJMHg4MDAwMDAwMAkvKiBJbnN0cnVjdGlvbiBDb21wbGV0aW9uICovCisjZGVmaW5lIERCU1JfQlQJCTB4NDAwMDAwMDAJLyogQnJhbmNoIHRha2VuICovCisjZGVmaW5lIERCU1JfVElFCTB4MTAwMDAwMDAJLyogVHJhcCBJbnN0cnVjdGlvbiBkZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzEJMHgwNDAwMDAwMAkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMSBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzIJMHgwMjAwMDAwMAkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMiBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzMJMHgwMDA4MDAwMAkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMyBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzQJMHgwMDA0MDAwMAkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgNCBFdmVudCAqLworI2RlZmluZSBEQlNSX0RBQzFSCTB4MDEwMDAwMDAJLyogRGF0YSBBZGRyZXNzIENvbXBhcmUgMSBSZWFkIEV2ZW50ICovCisjZGVmaW5lIERCU1JfREFDMVcJMHgwMDgwMDAwMAkvKiBEYXRhIEFkZHJlc3MgQ29tcGFyZSAxIFdyaXRlIEV2ZW50ICovCisjZGVmaW5lIERCU1JfREFDMlIJMHgwMDQwMDAwMAkvKiBEYXRhIEFkZHJlc3MgQ29tcGFyZSAyIFJlYWQgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9EQUMyVwkweDAwMjAwMDAwCS8qIERhdGEgQWRkcmVzcyBDb21wYXJlIDIgV3JpdGUgRXZlbnQgKi8KKyNlbmRpZgorCisvKiBCaXQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgRVNSLiAqLworI2RlZmluZSBFU1JfTUNJCQkweDgwMDAwMDAwCS8qIE1hY2hpbmUgQ2hlY2sgLSBJbnN0cnVjdGlvbiAqLworI2RlZmluZSBFU1JfSU1DUAkweDgwMDAwMDAwCS8qIEluc3RyLiBNYWNoaW5lIENoZWNrIC0gUHJvdGVjdGlvbiAqLworI2RlZmluZSBFU1JfSU1DTgkweDQwMDAwMDAwCS8qIEluc3RyLiBNYWNoaW5lIENoZWNrIC0gTm9uLWNvbmZpZyAqLworI2RlZmluZSBFU1JfSU1DQgkweDIwMDAwMDAwCS8qIEluc3RyLiBNYWNoaW5lIENoZWNrIC0gQnVzIGVycm9yICovCisjZGVmaW5lIEVTUl9JTUNUCTB4MTAwMDAwMDAJLyogSW5zdHIuIE1hY2hpbmUgQ2hlY2sgLSBUaW1lb3V0ICovCisjZGVmaW5lIEVTUl9QSUwJCTB4MDgwMDAwMDAJLyogUHJvZ3JhbSBFeGNlcHRpb24gLSBJbGxlZ2FsICovCisjZGVmaW5lIEVTUl9QUFIJCTB4MDQwMDAwMDAJLyogUHJvZ3JhbSBFeGNlcHRpb24gLSBQcml2ZWxlZ2VkICovCisjZGVmaW5lIEVTUl9QVFIJCTB4MDIwMDAwMDAJLyogUHJvZ3JhbSBFeGNlcHRpb24gLSBUcmFwICovCisjZGVmaW5lIEVTUl9GUAkJMHgwMTAwMDAwMAkvKiBGbG9hdGluZyBQb2ludCBPcGVyYXRpb24gKi8KKyNkZWZpbmUgRVNSX0RTVAkJMHgwMDgwMDAwMAkvKiBTdG9yYWdlIEV4Y2VwdGlvbiAtIERhdGEgbWlzcyAqLworI2RlZmluZSBFU1JfRElaCQkweDAwNDAwMDAwCS8qIFN0b3JhZ2UgRXhjZXB0aW9uIC0gWm9uZSBmYXVsdCAqLworI2RlZmluZSBFU1JfU1QJCTB4MDA4MDAwMDAJLyogU3RvcmUgT3BlcmF0aW9uICovCisjZGVmaW5lIEVTUl9ETEsJCTB4MDAyMDAwMDAJLyogRGF0YSBDYWNoZSBMb2NraW5nICovCisjZGVmaW5lIEVTUl9JTEsJCTB4MDAxMDAwMDAJLyogSW5zdHIuIENhY2hlIExvY2tpbmcgKi8KKyNkZWZpbmUgRVNSX1BVTwkJMHgwMDA0MDAwMAkvKiBVbmltcGxlbWVudGVkIE9wZXJhdGlvbiBleGNlcHRpb24gKi8KKyNkZWZpbmUgRVNSX0JPCQkweDAwMDIwMDAwCS8qIEJ5dGUgT3JkZXJpbmcgKi8KKworLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIERCQ1IwLiAqLworI2RlZmluZSBEQkNSMF9FRE0JMHg4MDAwMDAwMAkvKiBFeHRlcm5hbCBEZWJ1ZyBNb2RlICovCisjZGVmaW5lIERCQ1IwX0lETQkweDQwMDAwMDAwCS8qIEludGVybmFsIERlYnVnIE1vZGUgKi8KKyNkZWZpbmUgREJDUjBfUlNUCTB4MzAwMDAwMDAJLyogYWxsIHRoZSBiaXRzIGluIHRoZSBSU1QgZmllbGQgKi8KKyNkZWZpbmUgREJDUjBfUlNUX1NZU1RFTSAweDMwMDAwMDAwCS8qIFN5c3RlbSBSZXNldCAqLworI2RlZmluZSBEQkNSMF9SU1RfQ0hJUAkweDIwMDAwMDAwCS8qIENoaXAgUmVzZXQgKi8KKyNkZWZpbmUgREJDUjBfUlNUX0NPUkUJMHgxMDAwMDAwMAkvKiBDb3JlIFJlc2V0ICovCisjZGVmaW5lIERCQ1IwX1JTVF9OT05FCTB4MDAwMDAwMDAJLyogTm8gUmVzZXQgKi8KKyNkZWZpbmUgREJDUjBfSUMJMHgwODAwMDAwMAkvKiBJbnN0cnVjdGlvbiBDb21wbGV0aW9uICovCisjZGVmaW5lIERCQ1IwX0JUCTB4MDQwMDAwMDAJLyogQnJhbmNoIFRha2VuICovCisjZGVmaW5lIERCQ1IwX0VERQkweDAyMDAwMDAwCS8qIEV4Y2VwdGlvbiBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQkNSMF9UREUJMHgwMTAwMDAwMAkvKiBUUkFQIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCQ1IwX0lBMQkweDAwODAwMDAwCS8qIEluc3RyIEFkZHIgY29tcGFyZSAxIGVuYWJsZSAqLworI2RlZmluZSBEQkNSMF9JQTIJMHgwMDQwMDAwMAkvKiBJbnN0ciBBZGRyIGNvbXBhcmUgMiBlbmFibGUgKi8KKyNkZWZpbmUgREJDUjBfSUExMgkweDAwMjAwMDAwCS8qIEluc3RyIEFkZHIgMS0yIHJhbmdlIGVuYWJsZSAqLworI2RlZmluZSBEQkNSMF9JQTEyWAkweDAwMTAwMDAwCS8qIEluc3RyIEFkZHIgMS0yIHJhbmdlIGVYY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSMF9JQTMJMHgwMDA4MDAwMAkvKiBJbnN0ciBBZGRyIGNvbXBhcmUgMyBlbmFibGUgKi8KKyNkZWZpbmUgREJDUjBfSUE0CTB4MDAwNDAwMDAJLyogSW5zdHIgQWRkciBjb21wYXJlIDQgZW5hYmxlICovCisjZGVmaW5lIERCQ1IwX0lBMzQJMHgwMDAyMDAwMAkvKiBJbnN0ciBBZGRyIDMtNCByYW5nZSBFbmFibGUgKi8KKyNkZWZpbmUgREJDUjBfSUEzNFgJMHgwMDAxMDAwMAkvKiBJbnN0ciBBZGRyIDMtNCByYW5nZSBlWGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUjBfSUExMlQJMHgwMDAwODAwMAkvKiBJbnN0ciBBZGRyIDEtMiByYW5nZSBUb2dnbGUgKi8KKyNkZWZpbmUgREJDUjBfSUEzNFQJMHgwMDAwNDAwMAkvKiBJbnN0ciBBZGRyIDMtNCByYW5nZSBUb2dnbGUgKi8KKyNkZWZpbmUgREJDUjBfRlQJMHgwMDAwMDAwMQkvKiBGcmVlemUgVGltZXJzIG9uIGRlYnVnIGV2ZW50ICovCisKKy8qIEJpdCBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBUQ1IuICovCisjZGVmaW5lIFRDUl9XUCh4KQkoKCh4KSYweDMpPDwzMCkJLyogV0RUIFBlcmlvZCAqLworI2RlZmluZSBUQ1JfV1BfTUFTSwlUQ1JfV1AoMykKKyNkZWZpbmUgV1BfMl8xNwkJMAkJLyogMl4xNyBjbG9ja3MgKi8KKyNkZWZpbmUgV1BfMl8yMQkJMQkJLyogMl4yMSBjbG9ja3MgKi8KKyNkZWZpbmUgV1BfMl8yNQkJMgkJLyogMl4yNSBjbG9ja3MgKi8KKyNkZWZpbmUgV1BfMl8yOQkJMwkJLyogMl4yOSBjbG9ja3MgKi8KKyNkZWZpbmUgVENSX1dSQyh4KQkoKCh4KSYweDMpPDwyOCkJLyogV0RUIFJlc2V0IENvbnRyb2wgKi8KKyNkZWZpbmUgVENSX1dSQ19NQVNLCVRDUl9XUkMoMykKKyNkZWZpbmUgV1JDX05PTkUJMAkJLyogTm8gcmVzZXQgd2lsbCBvY2N1ciAqLworI2RlZmluZSBXUkNfQ09SRQkxCQkvKiBDb3JlIHJlc2V0IHdpbGwgb2NjdXIgKi8KKyNkZWZpbmUgV1JDX0NISVAJMgkJLyogQ2hpcCByZXNldCB3aWxsIG9jY3VyICovCisjZGVmaW5lIFdSQ19TWVNURU0JMwkJLyogU3lzdGVtIHJlc2V0IHdpbGwgb2NjdXIgKi8KKyNkZWZpbmUgVENSX1dJRQkJMHgwODAwMDAwMAkvKiBXRFQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBUQ1JfUElFCQkweDA0MDAwMDAwCS8qIFBJVCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFRDUl9ESUUJCVRDUl9QSUUJCS8qIERFQyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFRDUl9GUCh4KQkoKCh4KSYweDMpPDwyNCkJLyogRklUIFBlcmlvZCAqLworI2RlZmluZSBUQ1JfRlBfTUFTSwlUQ1JfRlAoMykKKyNkZWZpbmUgRlBfMl85CQkwCQkvKiAyXjkgY2xvY2tzICovCisjZGVmaW5lIEZQXzJfMTMJCTEJCS8qIDJeMTMgY2xvY2tzICovCisjZGVmaW5lIEZQXzJfMTcJCTIJCS8qIDJeMTcgY2xvY2tzICovCisjZGVmaW5lIEZQXzJfMjEJCTMJCS8qIDJeMjEgY2xvY2tzICovCisjZGVmaW5lIFRDUl9GSUUJCTB4MDA4MDAwMDAJLyogRklUIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVENSX0FSRQkJMHgwMDQwMDAwMAkvKiBBdXRvIFJlbG9hZCBFbmFibGUgKi8KKworLyogQml0IGRlZmluaXRpb25zIGZvciB0aGUgVFNSLiAqLworI2RlZmluZSBUU1JfRU5XCQkweDgwMDAwMDAwCS8qIEVuYWJsZSBOZXh0IFdhdGNoZG9nICovCisjZGVmaW5lIFRTUl9XSVMJCTB4NDAwMDAwMDAJLyogV0RUIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgVFNSX1dSUyh4KQkoKCh4KSYweDMpPDwyOCkJLyogV0RUIFJlc2V0IFN0YXR1cyAqLworI2RlZmluZSBXUlNfTk9ORQkwCQkvKiBObyBXRFQgcmVzZXQgb2NjdXJyZWQgKi8KKyNkZWZpbmUgV1JTX0NPUkUJMQkJLyogV0RUIGZvcmNlZCBjb3JlIHJlc2V0ICovCisjZGVmaW5lIFdSU19DSElQCTIJCS8qIFdEVCBmb3JjZWQgY2hpcCByZXNldCAqLworI2RlZmluZSBXUlNfU1lTVEVNCTMJCS8qIFdEVCBmb3JjZWQgc3lzdGVtIHJlc2V0ICovCisjZGVmaW5lIFRTUl9QSVMJCTB4MDgwMDAwMDAJLyogUElUIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgVFNSX0RJUwkJVFNSX1BJUwkJLyogREVDIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgVFNSX0ZJUwkJMHgwNDAwMDAwMAkvKiBGSVQgSW50ZXJydXB0IFN0YXR1cyAqLworCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBEQ0NSLiAqLworI2RlZmluZSBEQ0NSX05PQ0FDSEUJMAkJLyogTm9uY2FjaGVhYmxlICovCisjZGVmaW5lIERDQ1JfQ0FDSEUJMQkJLyogQ2FjaGVhYmxlICovCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgRENXUi4gKi8KKyNkZWZpbmUgRENXUl9DT1BZCTAJCS8qIENvcHktYmFjayAqLworI2RlZmluZSBEQ1dSX1dSSVRFCTEJCS8qIFdyaXRlLXRocm91Z2ggKi8KKworLyogQml0IGRlZmluaXRpb25zIGZvciBJQ0NSLiAqLworI2RlZmluZSBJQ0NSX05PQ0FDSEUJMAkJLyogTm9uY2FjaGVhYmxlICovCisjZGVmaW5lIElDQ1JfQ0FDSEUJMQkJLyogQ2FjaGVhYmxlICovCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgTDFDU1IwLiAqLworI2RlZmluZSBMMUNTUjBfQ0xGQwkweDAwMDAwMTAwCS8qIENhY2hlIExvY2sgQml0cyBGbGFzaCBDbGVhciAqLworI2RlZmluZSBMMUNTUjBfRENGSQkweDAwMDAwMDAyCS8qIERhdGEgQ2FjaGUgRmxhc2ggSW52YWxpZGF0ZSAqLworI2RlZmluZSBMMUNTUjBfQ0ZJCTB4MDAwMDAwMDIJLyogQ2FjaGUgRmxhc2ggSW52YWxpZGF0ZSAqLworI2RlZmluZSBMMUNTUjBfRENFCTB4MDAwMDAwMDEJLyogRGF0YSBDYWNoZSBFbmFibGUgKi8KKworLyogQml0IGRlZmluaXRpb25zIGZvciBMMUNTUjEuICovCisjZGVmaW5lIEwxQ1NSMV9JQ0xGUgkweDAwMDAwMTAwCS8qIEluc3RyIENhY2hlIExvY2sgQml0cyBGbGFzaCBSZXNldCAqLworI2RlZmluZSBMMUNTUjFfSUNGSQkweDAwMDAwMDAyCS8qIEluc3RyIENhY2hlIEZsYXNoIEludmFsaWRhdGUgKi8KKyNkZWZpbmUgTDFDU1IxX0lDRQkweDAwMDAwMDAxCS8qIEluc3RyIENhY2hlIEVuYWJsZSAqLworCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIFNHUi4gKi8KKyNkZWZpbmUgU0dSX05PUk1BTAkwCQkvKiBTcGVjdWxhdGl2ZSBmZXRjaGluZyBhbGxvd2VkLiAqLworI2RlZmluZSBTR1JfR1VBUkRFRAkxCQkvKiBTcGVjdWxhdGl2ZSBmZXRjaGluZyBkaXNhbGxvd2VkLiAqLworCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIFNQRUZTQ1IuICovCisjZGVmaW5lIFNQRUZTQ1JfU09WSAkweDgwMDAwMDAwCS8qIFN1bW1hcnkgaW50ZWdlciBvdmVyZmxvdyBoaWdoICovCisjZGVmaW5lIFNQRUZTQ1JfT1ZICTB4NDAwMDAwMDAJLyogSW50ZWdlciBvdmVyZmxvdyBoaWdoICovCisjZGVmaW5lIFNQRUZTQ1JfRkdICTB4MjAwMDAwMDAJLyogRW1iZWRkZWQgRlAgZ3VhcmQgYml0IGhpZ2ggKi8KKyNkZWZpbmUgU1BFRlNDUl9GWEgJMHgxMDAwMDAwMAkvKiBFbWJlZGRlZCBGUCBzdGlja3kgYml0IGhpZ2ggKi8KKyNkZWZpbmUgU1BFRlNDUl9GSU5WSAkweDA4MDAwMDAwCS8qIEVtYmVkZGVkIEZQIGludmFsaWQgb3BlcmF0aW9uIGhpZ2ggKi8KKyNkZWZpbmUgU1BFRlNDUl9GREJaSAkweDA0MDAwMDAwCS8qIEVtYmVkZGVkIEZQIGRpdiBieSB6ZXJvIGhpZ2ggKi8KKyNkZWZpbmUgU1BFRlNDUl9GVU5GSAkweDAyMDAwMDAwCS8qIEVtYmVkZGVkIEZQIHVuZGVyZmxvdyBoaWdoICovCisjZGVmaW5lIFNQRUZTQ1JfRk9WRkgJMHgwMTAwMDAwMAkvKiBFbWJlZGRlZCBGUCBvdmVyZmxvdyBoaWdoICovCisjZGVmaW5lIFNQRUZTQ1JfRklOWFMJMHgwMDIwMDAwMAkvKiBFbWJlZGRlZCBGUCBpbmV4YWN0IHN0aWNreSAqLworI2RlZmluZSBTUEVGU0NSX0ZJTlZTCTB4MDAxMDAwMDAJLyogRW1iZWRkZWQgRlAgaW52YWxpZCBvcC4gc3RpY2t5ICovCisjZGVmaW5lIFNQRUZTQ1JfRkRCWlMJMHgwMDA4MDAwMAkvKiBFbWJlZGRlZCBGUCBkaXYgYnkgemVybyBzdGlja3kgKi8KKyNkZWZpbmUgU1BFRlNDUl9GVU5GUwkweDAwMDQwMDAwCS8qIEVtYmVkZGVkIEZQIHVuZGVyZmxvdyBzdGlja3kgKi8KKyNkZWZpbmUgU1BFRlNDUl9GT1ZGUwkweDAwMDIwMDAwCS8qIEVtYmVkZGVkIEZQIG92ZXJmbG93IHN0aWNreSAqLworI2RlZmluZSBTUEVGU0NSX01PREUJMHgwMDAxMDAwMAkvKiBFbWJlZGRlZCBGUCBtb2RlICovCisjZGVmaW5lIFNQRUZTQ1JfU09WCTB4MDAwMDgwMDAJLyogSW50ZWdlciBzdW1tYXJ5IG92ZXJmbG93ICovCisjZGVmaW5lIFNQRUZTQ1JfT1YJMHgwMDAwNDAwMAkvKiBJbnRlZ2VyIG92ZXJmbG93ICovCisjZGVmaW5lIFNQRUZTQ1JfRkcJMHgwMDAwMjAwMAkvKiBFbWJlZGRlZCBGUCBndWFyZCBiaXQgKi8KKyNkZWZpbmUgU1BFRlNDUl9GWAkweDAwMDAxMDAwCS8qIEVtYmVkZGVkIEZQIHN0aWNreSBiaXQgKi8KKyNkZWZpbmUgU1BFRlNDUl9GSU5WCTB4MDAwMDA4MDAJLyogRW1iZWRkZWQgRlAgaW52YWxpZCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgU1BFRlNDUl9GREJaCTB4MDAwMDA0MDAJLyogRW1iZWRkZWQgRlAgZGl2IGJ5IHplcm8gKi8KKyNkZWZpbmUgU1BFRlNDUl9GVU5GCTB4MDAwMDAyMDAJLyogRW1iZWRkZWQgRlAgdW5kZXJmbG93ICovCisjZGVmaW5lIFNQRUZTQ1JfRk9WRgkweDAwMDAwMTAwCS8qIEVtYmVkZGVkIEZQIG92ZXJmbG93ICovCisjZGVmaW5lIFNQRUZTQ1JfRklOWEUJMHgwMDAwMDA0MAkvKiBFbWJlZGRlZCBGUCBpbmV4YWN0IGVuYWJsZSAqLworI2RlZmluZSBTUEVGU0NSX0ZJTlZFCTB4MDAwMDAwMjAJLyogRW1iZWRkZWQgRlAgaW52YWxpZCBvcC4gZW5hYmxlICovCisjZGVmaW5lIFNQRUZTQ1JfRkRCWkUJMHgwMDAwMDAxMAkvKiBFbWJlZGRlZCBGUCBkaXYgYnkgemVybyBlbmFibGUgKi8KKyNkZWZpbmUgU1BFRlNDUl9GVU5GRQkweDAwMDAwMDA4CS8qIEVtYmVkZGVkIEZQIHVuZGVyZmxvdyBlbmFibGUgKi8KKyNkZWZpbmUgU1BFRlNDUl9GT1ZGRQkweDAwMDAwMDA0CS8qIEVtYmVkZGVkIEZQIG92ZXJmbG93IGVuYWJsZSAqLworI2RlZmluZSBTUEVGU0NSX0ZSTUMgCTB4MDAwMDAwMDMJLyogRW1iZWRkZWQgRlAgcm91bmRpbmcgbW9kZSBjb250cm9sICovCisKKy8qCisgKiBUaGUgSUJNLTQwMyBpcyBhbiBldmVuIG1vcmUgb2RkIHNwZWNpYWwgY2FzZSwgYXMgaXQgaXMgbXVjaAorICogb2xkZXIgdGhhbiB0aGUgSUJNLTQwNSBzZXJpZXMuICBXZSBwdXQgdGhlc2UgZG93biBoZXJlIGluY2FzZSBzb21lb25lCisgKiB3aXNoZXMgdG8gc3VwcG9ydCB0aGVzZSBtYWNoaW5lcyBhZ2Fpbi4KKyAqLworI2lmZGVmIENPTkZJR180MDNHQ1gKKy8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlcnMgKFNQUk5zKSovCisjZGVmaW5lIFNQUk5fVEJIVQkweDNDQwkvKiBUaW1lIEJhc2UgSGlnaCBVc2VyLW1vZGUgKi8KKyNkZWZpbmUgU1BSTl9UQkxVCTB4M0NECS8qIFRpbWUgQmFzZSBMb3cgVXNlci1tb2RlICovCisjZGVmaW5lIFNQUk5fQ0RCQ1IJMHgzRDcJLyogQ2FjaGUgRGVidWcgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1RCSEkJMHgzREMJLyogVGltZSBCYXNlIEhpZ2ggKi8KKyNkZWZpbmUgU1BSTl9UQkxPCTB4M0RECS8qIFRpbWUgQmFzZSBMb3cgKi8KKyNkZWZpbmUgU1BSTl9EQkNSCTB4M0YyCS8qIERlYnVnIENvbnRyb2wgUmVnc2l0ZXIgKi8KKyNkZWZpbmUgU1BSTl9QQkwxCTB4M0ZDCS8qIFByb3RlY3Rpb24gQm91bmQgTG93ZXIgMSAqLworI2RlZmluZSBTUFJOX1BCTDIJMHgzRkUJLyogUHJvdGVjdGlvbiBCb3VuZCBMb3dlciAyICovCisjZGVmaW5lIFNQUk5fUEJVMQkweDNGRAkvKiBQcm90ZWN0aW9uIEJvdW5kIFVwcGVyIDEgKi8KKyNkZWZpbmUgU1BSTl9QQlUyCTB4M0ZGCS8qIFByb3RlY3Rpb24gQm91bmQgVXBwZXIgMiAqLworCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIERCQ1IuICovCisjZGVmaW5lIERCQ1JfRURNCURCQ1IwX0VETQorI2RlZmluZSBEQkNSX0lETQlEQkNSMF9JRE0KKyNkZWZpbmUgREJDUl9SU1QoeCkJKCgoeCkgJiAweDMpIDw8IDI4KQorI2RlZmluZSBEQkNSX1JTVF9OT05FCTAKKyNkZWZpbmUgREJDUl9SU1RfQ09SRQkxCisjZGVmaW5lIERCQ1JfUlNUX0NISVAJMgorI2RlZmluZSBEQkNSX1JTVF9TWVNURU0JMworI2RlZmluZSBEQkNSX0lDCQlEQkNSMF9JQwkvKiBJbnN0cnVjdGlvbiBDb21wbGV0aW9uIERlYnVnIEV2bnQgKi8KKyNkZWZpbmUgREJDUl9CVAkJREJDUjBfQlQJLyogQnJhbmNoIFRha2VuIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCQ1JfRURFCURCQ1IwX0VERQkvKiBFeGNlcHRpb24gRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUl9UREUJREJDUjBfVERFCS8qIFRSQVAgRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUl9GRVIJMHgwMEY4MDAwMAkvKiBGaXJzdCBFdmVudHMgUmVtYWluaW5nIE1hc2sgKi8KKyNkZWZpbmUgREJDUl9GVAkJMHgwMDA0MDAwMAkvKiBGcmVlemUgVGltZXJzIG9uIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCQ1JfSUExCTB4MDAwMjAwMDAJLyogSW5zdHIuIEFkZHIuIENvbXBhcmUgMSBFbmFibGUgKi8KKyNkZWZpbmUgREJDUl9JQTIJMHgwMDAxMDAwMAkvKiBJbnN0ci4gQWRkci4gQ29tcGFyZSAyIEVuYWJsZSAqLworI2RlZmluZSBEQkNSX0QxUgkweDAwMDA4MDAwCS8qIERhdGEgQWRkci4gQ29tcGFyZSAxIFJlYWQgRW5hYmxlICovCisjZGVmaW5lIERCQ1JfRDFXCTB4MDAwMDQwMDAJLyogRGF0YSBBZGRyLiBDb21wYXJlIDEgV3JpdGUgRW5hYmxlICovCisjZGVmaW5lIERCQ1JfRDFTKHgpCSgoKHgpICYgMHgzKSA8PCAxMikJLyogRGF0YSBBZHJyLiBDb21wYXJlIDEgU2l6ZSAqLworI2RlZmluZSBEQUNfQllURQkwCisjZGVmaW5lIERBQ19IQUxGCTEKKyNkZWZpbmUgREFDX1dPUkQJMgorI2RlZmluZSBEQUNfUVVBRAkzCisjZGVmaW5lIERCQ1JfRDJSCTB4MDAwMDA4MDAJLyogRGF0YSBBZGRyLiBDb21wYXJlIDIgUmVhZCBFbmFibGUgKi8KKyNkZWZpbmUgREJDUl9EMlcJMHgwMDAwMDQwMAkvKiBEYXRhIEFkZHIuIENvbXBhcmUgMiBXcml0ZSBFbmFibGUgKi8KKyNkZWZpbmUgREJDUl9EMlMoeCkJKCgoeCkgJiAweDMpIDw8IDgpCS8qIERhdGEgQWRkci4gQ29tcGFyZSAyIFNpemUgKi8KKyNkZWZpbmUgREJDUl9TQlQJMHgwMDAwMDA0MAkvKiBTZWNvbmQgQnJhbmNoIFRha2VuIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCQ1JfU0VECTB4MDAwMDAwMjAJLyogU2Vjb25kIEV4Y2VwdGlvbiBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQkNSX1NURAkweDAwMDAwMDEwCS8qIFNlY29uZCBUcmFwIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCQ1JfU0lBCTB4MDAwMDAwMDgJLyogU2Vjb25kIElBQyBFbmFibGUgKi8KKyNkZWZpbmUgREJDUl9TREEJMHgwMDAwMDAwNAkvKiBTZWNvbmQgREFDIEVuYWJsZSAqLworI2RlZmluZSBEQkNSX0pPSQkweDAwMDAwMDAyCS8qIEpUQUcgU2VyaWFsIE91dGJvdW5kIEludC4gRW5hYmxlICovCisjZGVmaW5lIERCQ1JfSklJCTB4MDAwMDAwMDEJLyogSlRBRyBTZXJpYWwgSW5ib3VuZCBJbnQuIEVuYWJsZSAqLworI2VuZGlmIC8qIDQwM0dDWCAqLworI2VuZGlmIC8qIF9fQVNNX1BPV0VSUENfUkVHX0JPT0tFX0hfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9yaGVhcC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yaGVhcC5oCnNpbWlsYXJpdHkgaW5kZXggNzQlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBwYy9yaGVhcC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL3JoZWFwLmgKaW5kZXggMzlhMTBkOC4uMTcyMzgxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3JoZWFwLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yaGVhcC5oCkBAIC0xOCw3ICsxOCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IF9yaF9ibG9jayB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXZvaWQgKnN0YXJ0OworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAJaW50IHNpemU7CiAJY29uc3QgY2hhciAqb3duZXI7CiB9IHJoX2Jsb2NrX3Q7CkBAIC0zNyw4ICszNyw4IEBACiAjZGVmaW5lIFJISUZfU1RBVElDX0lORk8JMHgxCiAjZGVmaW5lIFJISUZfU1RBVElDX0JMT0NLCTB4MgogCi10eXBlZGVmIHN0cnVjdCByaF9zdGF0c190IHsKLQl2b2lkICpzdGFydDsKK3R5cGVkZWYgc3RydWN0IF9yaF9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKIAlpbnQgc2l6ZTsKIAljb25zdCBjaGFyICpvd25lcjsKIH0gcmhfc3RhdHNfdDsKQEAgLTU3LDI0ICs1NywyNCBAQAogCQkgICAgcmhfYmxvY2tfdCAqIGJsb2NrKTsKIAogLyogQXR0YWNoIGEgZnJlZSByZWdpb24gdG8gbWFuYWdlICovCi1leHRlcm4gaW50IHJoX2F0dGFjaF9yZWdpb24ocmhfaW5mb190ICogaW5mbywgdm9pZCAqc3RhcnQsIGludCBzaXplKTsKK2V4dGVybiBpbnQgcmhfYXR0YWNoX3JlZ2lvbihyaF9pbmZvX3QgKiBpbmZvLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgc2l6ZSk7CiAKIC8qIERldGFjaCBhIGZyZWUgcmVnaW9uICovCi1leHRlcm4gdm9pZCAqcmhfZGV0YWNoX3JlZ2lvbihyaF9pbmZvX3QgKiBpbmZvLCB2b2lkICpzdGFydCwgaW50IHNpemUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmhfZGV0YWNoX3JlZ2lvbihyaF9pbmZvX3QgKiBpbmZvLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgc2l6ZSk7CiAKIC8qIEFsbG9jYXRlIHRoZSBnaXZlbiBzaXplIGZyb20gdGhlIHJlbW90ZSBoZWFwICh3aXRoIGFsaWdubWVudCkgKi8KLWV4dGVybiB2b2lkICpyaF9hbGxvY19hbGlnbihyaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2l6ZSwgaW50IGFsaWdubWVudCwKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJoX2FsbG9jX2FsaWduKHJoX2luZm9fdCAqIGluZm8sIGludCBzaXplLCBpbnQgYWxpZ25tZW50LAogCQljb25zdCBjaGFyICpvd25lcik7CiAKIC8qIEFsbG9jYXRlIHRoZSBnaXZlbiBzaXplIGZyb20gdGhlIHJlbW90ZSBoZWFwICovCi1leHRlcm4gdm9pZCAqcmhfYWxsb2MocmhfaW5mb190ICogaW5mbywgaW50IHNpemUsIGNvbnN0IGNoYXIgKm93bmVyKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJoX2FsbG9jKHJoX2luZm9fdCAqIGluZm8sIGludCBzaXplLCBjb25zdCBjaGFyICpvd25lcik7CiAKIC8qIEFsbG9jYXRlIHRoZSBnaXZlbiBzaXplIGZyb20gdGhlIGdpdmVuIGFkZHJlc3MgKi8KLWV4dGVybiB2b2lkICpyaF9hbGxvY19maXhlZChyaF9pbmZvX3QgKiBpbmZvLCB2b2lkICpzdGFydCwgaW50IHNpemUsCitleHRlcm4gdW5zaWduZWQgbG9uZyByaF9hbGxvY19maXhlZChyaF9pbmZvX3QgKiBpbmZvLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgc2l6ZSwKIAkJCSAgICBjb25zdCBjaGFyICpvd25lcik7CiAKIC8qIEZyZWUgdGhlIGFsbG9jYXRlZCBhcmVhICovCi1leHRlcm4gaW50IHJoX2ZyZWUocmhfaW5mb190ICogaW5mbywgdm9pZCAqc3RhcnQpOworZXh0ZXJuIGludCByaF9mcmVlKHJoX2luZm9fdCAqIGluZm8sIHVuc2lnbmVkIGxvbmcgc3RhcnQpOwogCiAvKiBHZXQgc3RhdHMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLwogZXh0ZXJuIGludCByaF9nZXRfc3RhdHMocmhfaW5mb190ICogaW5mbywgaW50IHdoYXQsIGludCBtYXhfc3RhdHMsCkBAIC04NCw2ICs4NCw2IEBACiBleHRlcm4gdm9pZCByaF9kdW1wKHJoX2luZm9fdCAqIGluZm8pOwogCiAvKiBTZXQgb3duZXIgb2YgdGFrZW4gYmxvY2sgKi8KLWV4dGVybiBpbnQgcmhfc2V0X293bmVyKHJoX2luZm9fdCAqIGluZm8sIHZvaWQgKnN0YXJ0LCBjb25zdCBjaGFyICpvd25lcik7CitleHRlcm4gaW50IHJoX3NldF9vd25lcihyaF9pbmZvX3QgKiBpbmZvLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBjb25zdCBjaGFyICpvd25lcik7CiAKICNlbmRpZgkJCQkvKiBfX0FTTV9QUENfUkhFQVBfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NtcC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXAuaAppbmRleCAwMTcxN2YyLi5kMDM3ZjUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc21wLmgKQEAgLTgzLDYgKzgzLDcgQEAKIAogI2Vsc2UKIC8qIGZvciBVUCAqLworI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAogI2RlZmluZSBzbXBfc2V0dXBfY3B1X21hcHMoKQogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHVfY3NhLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdV9jc2EuaAppbmRleCAwMmU1NmE2Li5jNDhhZTE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdV9jc2EuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdV9jc2EuaApAQCAtMjM1LDYgKzIzNSwxMiBAQAogICovCiBzdHJ1Y3Qgc3B1X3N0YXRlIHsKIAlzdHJ1Y3Qgc3B1X2xzY3NhICpsc2NzYTsKKyNpZmRlZiBDT05GSUdfU1BVX0ZTXzY0S19MUworCWludAkJdXNlX2JpZ19wYWdlczsKKwkvKiBPbmUgc3RydWN0IHBhZ2UgcGVyIDY0ayBwYWdlICovCisjZGVmaW5lIFNQVV9MU0NTQV9OVU1fQklHX1BBR0VTCShzaXplb2Yoc3RydWN0IHNwdV9sc2NzYSkgLyAweDEwMDAwKQorCXN0cnVjdCBwYWdlCSpsc2NzYV9wYWdlc1tTUFVfTFNDU0FfTlVNX0JJR19QQUdFU107CisjZW5kaWYKIAlzdHJ1Y3Qgc3B1X3Byb2JsZW1fY29sbGFwc2VkIHByb2I7CiAJc3RydWN0IHNwdV9wcml2MV9jb2xsYXBzZWQgcHJpdjE7CiAJc3RydWN0IHNwdV9wcml2Ml9jb2xsYXBzZWQgcHJpdjI7CkBAIC0yNDcsMTIgKzI1MywxNCBAQAogCXNwaW5sb2NrX3QgcmVnaXN0ZXJfbG9jazsKIH07CiAKLWV4dGVybiB2b2lkIHNwdV9pbml0X2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpOworZXh0ZXJuIGludCBzcHVfaW5pdF9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTsKIGV4dGVybiB2b2lkIHNwdV9maW5pX2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpOwogZXh0ZXJuIGludCBzcHVfc2F2ZShzdHJ1Y3Qgc3B1X3N0YXRlICpwcmV2LCBzdHJ1Y3Qgc3B1ICpzcHUpOwogZXh0ZXJuIGludCBzcHVfcmVzdG9yZShzdHJ1Y3Qgc3B1X3N0YXRlICpuZXcsIHN0cnVjdCBzcHUgKnNwdSk7CiBleHRlcm4gaW50IHNwdV9zd2l0Y2goc3RydWN0IHNwdV9zdGF0ZSAqcHJldiwgc3RydWN0IHNwdV9zdGF0ZSAqbmV3LAogCQkgICAgICBzdHJ1Y3Qgc3B1ICpzcHUpOworZXh0ZXJuIGludCBzcHVfYWxsb2NfbHNjc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTsKK2V4dGVybiB2b2lkIHNwdV9mcmVlX2xzY3NhKHN0cnVjdCBzcHVfc3RhdGUgKmNzYSk7CiAKICNlbmRpZiAvKiAhX19TUFVfXyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3VzcGVuZC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zdXNwZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmMmM5NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3VzcGVuZC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfX0FTTV9QT1dFUlBDX1NVU1BFTkRfSAorI2RlZmluZSBfX0FTTV9QT1dFUlBDX1NVU1BFTkRfSAorCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3ByZXBhcmVfc3VzcGVuZCh2b2lkKSB7IHJldHVybiAwOyB9CisKK3ZvaWQgc2F2ZV9wcm9jZXNzb3Jfc3RhdGUodm9pZCk7Cit2b2lkIHJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpOworCisjZW5kaWYgLyogX19BU01fUE9XRVJQQ19TVVNQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGJsLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RibC5oCmluZGV4IDBiMDAwNjguLjcwMGNhNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGJsLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0YmwuaApAQCAtMzA3LDMgKzMwNyw3IEBACiBDT01QQVRfU1lTX1NQVShtb3ZlX3BhZ2VzKQogU1lTQ0FMTF9TUFUoZ2V0Y3B1KQogQ09NUEFUX1NZUyhlcG9sbF9wd2FpdCkKK0NPTVBBVF9TWVNfU1BVKHV0aW1lbnNhdCkKK0NPTVBBVF9TWVNfU1BVKHNpZ25hbGZkKQorQ09NUEFUX1NZU19TUFUodGltZXJmZCkKK1NZU0NBTExfU1BVKGV2ZW50ZmQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaAppbmRleCBkM2UwOTA2Li4wOTYyMWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmgKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAvKgogICogTWVtb3J5IGJhcnJpZXIuCkBAIC0yMjcsNiArMjI2LDI5IEBACiAJcmV0dXJuIHByZXY7CiB9CiAKKy8qCisgKiBBdG9taWMgZXhjaGFuZ2UKKyAqCisgKiBDaGFuZ2VzIHRoZSBtZW1vcnkgbG9jYXRpb24gJypwdHInIHRvIGJlIHZhbCBhbmQgcmV0dXJucworICogdGhlIHByZXZpb3VzIHZhbHVlIHN0b3JlZCB0aGVyZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworX194Y2hnX3UzMl9sb2NhbCh2b2xhdGlsZSB2b2lkICpwLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHByZXY7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsd2FyeAklMCwwLCUyIFxuIgorCVBQQzQwNV9FUlI3NygwLCUyKQorIglzdHdjeC4JJTMsMCwlMiBcblwKKwlibmUtCTFiIgorCTogIj0mciIgKHByZXYpLCAiK20iICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKXApCisJOiAiciIgKHApLCAiciIgKHZhbCkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiBwcmV2OworfQorCiAjaWZkZWYgQ09ORklHX1BQQzY0CiBzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCiBfX3hjaGdfdTY0KHZvbGF0aWxlIHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgdmFsKQpAQCAtMjQ2LDYgKzI2OCwyMyBAQAogCiAJcmV0dXJuIHByZXY7CiB9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK19feGNoZ191NjRfbG9jYWwodm9sYXRpbGUgdm9pZCAqcCwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbGRhcngJJTAsMCwlMiBcbiIKKwlQUEM0MDVfRVJSNzcoMCwlMikKKyIJc3RkY3guCSUzLDAsJTIgXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiIChwcmV2KSwgIittIiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcCkKKwk6ICJyIiAocCksICJyIiAodmFsKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHByZXY7Cit9CiAjZW5kaWYKIAogLyoKQEAgLTI2OSwxMyArMzA4LDMyIEBACiAJcmV0dXJuIHg7CiB9CiAKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK19feGNoZ19sb2NhbCh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgeCwgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSA0OgorCQlyZXR1cm4gX194Y2hnX3UzMl9sb2NhbChwdHIsIHgpOworI2lmZGVmIENPTkZJR19QUEM2NAorCWNhc2UgODoKKwkJcmV0dXJuIF9feGNoZ191NjRfbG9jYWwocHRyLCB4KTsKKyNlbmRpZgorCX0KKwlfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKKwlyZXR1cm4geDsKK30KICNkZWZpbmUgeGNoZyhwdHIseCkJCQkJCQkJICAgICBcCiAgICh7CQkJCQkJCQkJICAgICBcCiAgICAgIF9fdHlwZW9mX18oKihwdHIpKSBfeF8gPSAoeCk7CQkJCQkgICAgIFwKICAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX194Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZylfeF8sIHNpemVvZigqKHB0cikpKTsgXAogICB9KQogCi0jZGVmaW5lIHRhcyhwdHIpICh4Y2hnKChwdHIpLDEpKQorI2RlZmluZSB4Y2hnX2xvY2FsKHB0cix4KQkJCQkJCSAgICAgXAorICAoewkJCQkJCQkJCSAgICAgXAorICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX3hfID0gKHgpOwkJCQkJICAgICBcCisgICAgIChfX3R5cGVvZl9fKCoocHRyKSkpIF9feGNoZ19sb2NhbCgocHRyKSwJCQkJICAgICBcCisgICAgIAkJKHVuc2lnbmVkIGxvbmcpX3hfLCBzaXplb2YoKihwdHIpKSk7IAkJCSAgICAgXAorICB9KQogCiAvKgogICogQ29tcGFyZSBhbmQgZXhjaGFuZ2UgLSBpZiAqcCA9PSBvbGQsIHNldCBpdCB0byBuZXcsCkBAIC0zMDYsNiArMzY0LDI4IEBACiAJcmV0dXJuIHByZXY7CiB9CiAKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191MzJfbG9jYWwodm9sYXRpbGUgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBsb25nIG9sZCwKKwkJCXVuc2lnbmVkIGxvbmcgbmV3KQoreworCXVuc2lnbmVkIGludCBwcmV2OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorIjE6CWx3YXJ4CSUwLDAsJTIJCSMgX19jbXB4Y2hnX3UzMlxuXAorCWNtcHcJMCwlMCwlM1xuXAorCWJuZS0JMmZcbiIKKwlQUEM0MDVfRVJSNzcoMCwlMikKKyIJc3R3Y3guCSU0LDAsJTJcblwKKwlibmUtCTFiIgorCSJcblwKKzI6IgorCTogIj0mciIgKHByZXYpLCAiK20iICgqcCkKKwk6ICJyIiAocCksICJyIiAob2xkKSwgInIiIChuZXcpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKwogI2lmZGVmIENPTkZJR19QUEM2NAogc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZwogX19jbXB4Y2hnX3U2NCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCkBAIC0zMjgsNiArNDA4LDI3IEBACiAKIAlyZXR1cm4gcHJldjsKIH0KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworX19jbXB4Y2hnX3U2NF9sb2NhbCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIG9sZCwKKwkJCXVuc2lnbmVkIGxvbmcgbmV3KQoreworCXVuc2lnbmVkIGxvbmcgcHJldjsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyIxOglsZGFyeAklMCwwLCUyCQkjIF9fY21weGNoZ191NjRcblwKKwljbXBkCTAsJTAsJTNcblwKKwlibmUtCTJmXG5cCisJc3RkY3guCSU0LDAsJTJcblwKKwlibmUtCTFiIgorCSJcblwKKzI6IgorCTogIj0mciIgKHByZXYpLCAiK20iICgqcCkKKwk6ICJyIiAocCksICJyIiAob2xkKSwgInIiIChuZXcpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KICNlbmRpZgogCiAvKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKQEAgLTM1MCw2ICs0NTEsMjIgQEAKIAlyZXR1cm4gb2xkOwogfQogCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCitfX2NtcHhjaGdfbG9jYWwodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcsCisJICB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDQ6CisJCXJldHVybiBfX2NtcHhjaGdfdTMyX2xvY2FsKHB0ciwgb2xkLCBuZXcpOworI2lmZGVmIENPTkZJR19QUEM2NAorCWNhc2UgODoKKwkJcmV0dXJuIF9fY21weGNoZ191NjRfbG9jYWwocHRyLCBvbGQsIG5ldyk7CisjZW5kaWYKKwl9CisJX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CisJcmV0dXJuIG9sZDsKK30KKwogI2RlZmluZSBjbXB4Y2hnKHB0cixvLG4pCQkJCQkJIFwKICAgKHsJCQkJCQkJCQkgXAogICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX29fID0gKG8pOwkJCQkJIFwKQEAgLTM1OCw2ICs0NzUsMTUgQEAKIAkJCQkgICAgKHVuc2lnbmVkIGxvbmcpX25fLCBzaXplb2YoKihwdHIpKSk7IFwKICAgfSkKIAorCisjZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLG8sbikJCQkJCQkgXAorICAoewkJCQkJCQkJCSBcCisgICAgIF9fdHlwZW9mX18oKihwdHIpKSBfb18gPSAobyk7CQkJCQkgXAorICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX25fID0gKG4pOwkJCQkJIFwKKyAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCSBcCisJCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOyBcCisgIH0pCisKICNpZmRlZiBDT05GSUdfUFBDNjQKIC8qCiAgKiBXZSBoYW5kbGUgbW9zdCB1bmFsaWduZWQgYWNjZXNzZXMgaW4gaGFyZHdhcmUuIE9uIHRoZSBvdGhlciBoYW5kIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90bGIuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGxiLmgKaW5kZXggMGExNzY4Mi4uNjY3MTQwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90bGIuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RsYi5oCkBAIC0zOCw2ICszOCwxNSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCiB7CisJc3RydWN0IHBwYzY0X3RsYl9iYXRjaCAqdGxiYmF0Y2ggPSAmX19nZXRfY3B1X3ZhcihwcGM2NF90bGJfYmF0Y2gpOworCisJLyogSWYgdGhlcmUncyBhIFRMQiBiYXRjaCBwZW5kaW5nLCB0aGVuIHdlIG11c3QgZmx1c2ggaXQgYmVjYXVzZSB0aGUKKwkgKiBwYWdlcyBhcmUgZ29pbmcgdG8gYmUgZnJlZWQgYW5kIHdlIHJlYWxseSBkb24ndCB3YW50IHRvIGhhdmUgYSBDUFUKKwkgKiBhY2Nlc3MgYSBmcmVlZCBwYWdlIGJlY2F1c2UgaXQgaGFzIGEgc3RhbGUgVExCCisJICovCisJaWYgKHRsYmJhdGNoLT5pbmRleCkKKwkJX19mbHVzaF90bGJfcGVuZGluZyh0bGJiYXRjaCk7CisKIAlwdGVfZnJlZV9maW5pc2goKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90c2kxMDguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdHNpMTA4LmgKaW5kZXggNGU5NWQxNS4uZjhiNjA3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90c2kxMDguaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RzaTEwOC5oCkBAIC02OCw4ICs2OCwxNyBAQAogI2RlZmluZSBUU0kxMDhfUEJfRVJSQ1NfRVMJCSgxIDw8IDEpCiAjZGVmaW5lIFRTSTEwOF9QQl9JU1JfUEJTX1JEX0VSUgkoMSA8PCA4KQogCi0jZGVmaW5lIFRTSTEwOF9QQ0lfQ0ZHX0JBU0VfUEhZUwkoMHhmYjAwMDAwMCkKICNkZWZpbmUgVFNJMTA4X1BDSV9DRkdfU0laRQkJKDB4MDEwMDAwMDApCisKKy8qCisgKiBQSFkgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKgorICogU3BlY2lmeSAiYmNtNTR4eCIgaW4gdGhlIGNvbXBhdGlibGUgcHJvcGVydHkgb2YgeW91ciBkZXZpY2UgdHJlZSBwaHkKKyAqIG5vZGVzIGlmIHlvdXIgYm9hcmQgdXNlcyB0aGUgQnJvYWRjb20gUEhZcworICovCisjZGVmaW5lIFRTSTEwOF9QSFlfTVY4OEUJMAkvKiBNYXJ2ZWwgODhFeHh4eCBQSFkgKi8KKyNkZWZpbmUgVFNJMTA4X1BIWV9CQ001NFhYCTEJLyogQnJvYXJkY29tIEJDTTU0eHggUEhZICovCisKIC8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KIAogZXh0ZXJuIHUzMiB0c2kxMDhfcGNpX2NmZ19iYXNlOwpAQCAtOTMsNiArMTAyLDcgQEAKIAl1MTYgcGh5OwkJLyogcGh5IGFkZHJlc3MgKi8KIAl1MTYgaXJxX251bTsJCS8qIGlycSBudW1iZXIgKi8KIAl1OCBtYWNfYWRkcls2XTsJCS8qIHBoeSBtYWMgYWRkcmVzcyAqLworCXUxNiBwaHlfdHlwZTsJLyogdHlwZSBvZiBwaHkgb24gYm9hcmQgKi8KIH0gaHdfaW5mbzsKIAogZXh0ZXJuIHUzMiBnZXRfdmlyX2NzcmJhc2Uodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RzaTEwOF9pcnEuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdHNpMTA4X2lycS5oCmluZGV4IDNlNGQwNGUuLjZlZDkzOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdHNpMTA4X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdHNpMTA4X2lycS5oCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBkZW11bHRpcGxleGluZyBvbiBUU0kxMDhFTVUvU1ZCIGJvYXJkcy4KICAqLwogCi0jaWZuZGVmIF9BU01fUFBDX1RTSTEwOF9JUlFfSAotI2RlZmluZSBfQVNNX1BQQ19UU0kxMDhfSVJRX0gKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1RTSTEwOF9JUlFfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfVFNJMTA4X0lSUV9ICiAKIC8qCiAgKiBUc2kxMDggaW50ZXJydXB0cwpAQCAtMTIxLDQgKzEyMSw0IEBACiAJVFNJMTA4X0lSUV9ESVJFQ1RFRCwKIAlUU0kxMDhfSVJRX0RJU1RSSUJVVEVELAogfSBUU0kxMDhfSVJRX01PREU7Ci0jZW5kaWYJCQkJLyogIF9BU01fUFBDX1RTSTEwOF9JUlFfSCAqLworI2VuZGlmCQkJCS8qICBfQVNNX1BPV0VSUENfVFNJMTA4X0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RzaTEwOF9wY2kuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdHNpMTA4X3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NTNkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RzaTEwOF9wY2kuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnAKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQVNNX1BPV0VSUENfVFNJMTA4X1BDSV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19UU0kxMDhfUENJX0gKKworI2luY2x1ZGUgPGFzbS90c2kxMDguaD4KKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFNJMTA4X1BDSV9QMk9fQkFSMCAoVFNJMTA4X1BDSV9PRkZTRVQgKyAweDEwKQorI2RlZmluZSBUU0kxMDhfUENJX1AyT19CQVIwX1VQUEVSIChUU0kxMDhfUENJX09GRlNFVCArIDB4MTQpCisjZGVmaW5lIFRTSTEwOF9QQ0lfUDJPX0JBUjIgKFRTSTEwOF9QQ0lfT0ZGU0VUICsgMHgxOCkKKyNkZWZpbmUgVFNJMTA4X1BDSV9QMk9fQkFSMl9VUFBFUiAoVFNJMTA4X1BDSV9PRkZTRVQgKyAweDFjKQorI2RlZmluZSBUU0kxMDhfUENJX1AyT19QQUdFX1NJWkVTIChUU0kxMDhfUENJX09GRlNFVCArIDB4NGMpCisjZGVmaW5lIFRTSTEwOF9QQ0lfUEZBQl9CQVIwIChUU0kxMDhfUENJX09GRlNFVCArIDB4MjA0KQorI2RlZmluZSBUU0kxMDhfUENJX1BGQUJfQkFSMF9VUFBFUiAoVFNJMTA4X1BDSV9PRkZTRVQgKyAweDIwOCkKKyNkZWZpbmUgVFNJMTA4X1BDSV9QRkFCX0lPIChUU0kxMDhfUENJX09GRlNFVCArIDB4MjBjKQorI2RlZmluZSBUU0kxMDhfUENJX1BGQUJfSU9fVVBQRVIgKFRTSTEwOF9QQ0lfT0ZGU0VUICsgMHgyMTApCisjZGVmaW5lIFRTSTEwOF9QQ0lfUEZBQl9NRU0zMiAoVFNJMTA4X1BDSV9PRkZTRVQgKyAweDIxNCkKKyNkZWZpbmUgVFNJMTA4X1BDSV9QRkFCX1BGTTMgKFRTSTEwOF9QQ0lfT0ZGU0VUICsgMHgyMjApCisjZGVmaW5lIFRTSTEwOF9QQ0lfUEZBQl9QRk00IChUU0kxMDhfUENJX09GRlNFVCArIDB4MjMwKQorCitleHRlcm4gaW50IHRzaTEwOF9zZXR1cF9wY2koc3RydWN0IGRldmljZV9ub2RlICpkZXYsIHUzMiBjZmdfcGh5cywgaW50IHByaW1hcnkpOworZXh0ZXJuIHZvaWQgdHNpMTA4X3BjaV9pbnRfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOworZXh0ZXJuIHZvaWQgdHNpMTA4X2lycV9jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7CitleHRlcm4gdm9pZCB0c2kxMDhfY2xlYXJfcGNpX2NmZ19lcnJvcih2b2lkKTsKKworI2VuZGlmCQkJCS8qICBfQVNNX1BPV0VSUENfVFNJMTA4X1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VkYmcuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWRiZy5oCmluZGV4IGQwM2Q4NTUuLmNlOWQ4MmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdWRiZy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWRiZy5oCkBAIC00Nyw2ICs0Nyw3IEBACiBleHRlcm4gdm9pZCBfX2luaXQgdWRiZ19pbml0X3J0YXNfY29uc29sZSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCB1ZGJnX2luaXRfZGVidWdfYmVhdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCB1ZGJnX2luaXRfYnRleHQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgdWRiZ19pbml0XzQ0eF9hczEodm9pZCk7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1VEQkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdW5pc3RkLmgKaW5kZXggMmJhZWRiZS4uZTNjMjhkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VuaXN0ZC5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfQVNNX1BQQ19VTklTVERfSF8KLSNkZWZpbmUgX0FTTV9QUENfVU5JU1REX0hfCisjaWZuZGVmIF9BU01fUE9XRVJQQ19VTklTVERfSF8KKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1VOSVNURF9IXwogCiAvKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXJzLgpAQCAtMzI2LDEwICszMjYsMTQgQEAKICNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkzMDEKICNkZWZpbmUgX19OUl9nZXRjcHUJCTMwMgogI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CTMwMworI2RlZmluZSBfX05SX3V0aW1lbnNhdAkJMzA0CisjZGVmaW5lIF9fTlJfc2lnbmFsZmQJCTMwNQorI2RlZmluZSBfX05SX3RpbWVyZmQJCTMwNgorI2RlZmluZSBfX05SX2V2ZW50ZmQJCTMwNwogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTMwNAorI2RlZmluZSBfX05SX3N5c2NhbGxzCQkzMDgKIAogI2RlZmluZSBfX05SX19leGl0IF9fTlJfZXhpdAogI2RlZmluZSBOUl9zeXNjYWxscwlfX05SX3N5c2NhbGxzCkBAIC0zODAsNCArMzg0LDQgQEAKICNlbmRpZgkJLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYJCS8qIF9fS0VSTkVMX18gKi8KIAotI2VuZGlmIC8qIF9BU01fUFBDX1VOSVNURF9IXyAqLworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9jb21tcHJvYy5oIGIvaW5jbHVkZS9hc20tcHBjL2NvbW1wcm9jLmgKaW5kZXggNGY5OWRmMS4uMzk3MjQ4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2NvbW1wcm9jLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2NvbW1wcm9jLmgKQEAgLTYzLDIwICs2MywxNSBAQAogI2RlZmluZSBDUE1fREFUQU9OTFlfU0laRQkoKHVpbnQpMHgwNzAwKQogI2RlZmluZSBDUE1fRFBfTk9TUEFDRQkJKCh1aW50KTB4N2ZmZmZmZmYpCiAKLXN0YXRpYyBpbmxpbmUgbG9uZyBJU19EUEVSUihjb25zdCB1aW50IG9mZnNldCkKLXsKLQlyZXR1cm4gKHVpbnQpb2Zmc2V0ID4gKHVpbnQpLTEwMDBMOwotfQotCiAvKiBFeHBvcnQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29tbXVuaWNhdGlvbiBwcm9jZXNzb3IgcmVnaXN0ZXJzCiAgKiBhbmQgZHVhbCBwb3J0IHJhbS4KICAqLwogZXh0ZXJuCWNwbTh4eF90CSpjcG1wOwkJLyogUG9pbnRlciB0byBjb21tIHByb2Nlc3NvciAqLwotZXh0ZXJuIHVpbnQgY3BtX2RwYWxsb2ModWludCBzaXplLCB1aW50IGFsaWduKTsKLWV4dGVybiBpbnQgY3BtX2RwZnJlZSh1aW50IG9mZnNldCk7Ci1leHRlcm4gdWludCBjcG1fZHBhbGxvY19maXhlZCh1aW50IG9mZnNldCwgdWludCBzaXplLCB1aW50IGFsaWduKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwbV9kcGFsbG9jKHVpbnQgc2l6ZSwgdWludCBhbGlnbik7CitleHRlcm4gaW50IGNwbV9kcGZyZWUodW5zaWduZWQgbG9uZyBvZmZzZXQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3BtX2RwYWxsb2NfZml4ZWQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQgc2l6ZSwgdWludCBhbGlnbik7CiBleHRlcm4gdm9pZCBjcG1fZHBkdW1wKHZvaWQpOwotZXh0ZXJuIHZvaWQgKmNwbV9kcHJhbV9hZGRyKHVpbnQgb2Zmc2V0KTsKK2V4dGVybiB2b2lkICpjcG1fZHByYW1fYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7CiBleHRlcm4gdWludCBjcG1fZHByYW1fcGh5cyh1OCogYWRkcik7CiBleHRlcm4gdm9pZCBjcG1fc2V0YnJnKHVpbnQgYnJnLCB1aW50IHJhdGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY3BtMi5oIGIvaW5jbHVkZS9hc20tcHBjL2NwbTIuaAppbmRleCAyMjBjYzJkLi4xMmEyODYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvY3BtMi5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9jcG0yLmgKQEAgLTEwNCwyMSArMTA0LDE2IEBACiAgKi8KICNkZWZpbmUgTlVNX0NQTV9IT1NUX1BBR0VTCTIKIAotc3RhdGljIGlubGluZSBsb25nIElTX0RQRVJSKGNvbnN0IHVpbnQgb2Zmc2V0KQotewotCXJldHVybiAodWludClvZmZzZXQgPiAodWludCktMTAwMEw7Ci19Ci0KIC8qIEV4cG9ydCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb21tdW5pY2F0aW9uIHByb2Nlc3NvciByZWdpc3RlcnMKICAqIGFuZCBkdWFsIHBvcnQgcmFtLgogICovCiBleHRlcm4JCWNwbV9jcG0yX3QJKmNwbXA7CSAvKiBQb2ludGVyIHRvIGNvbW0gcHJvY2Vzc29yICovCiAKLWV4dGVybiB1aW50IGNwbV9kcGFsbG9jKHVpbnQgc2l6ZSwgdWludCBhbGlnbik7Ci1leHRlcm4gaW50IGNwbV9kcGZyZWUodWludCBvZmZzZXQpOwotZXh0ZXJuIHVpbnQgY3BtX2RwYWxsb2NfZml4ZWQodWludCBvZmZzZXQsIHVpbnQgc2l6ZSwgdWludCBhbGlnbik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBjcG1fZHBhbGxvYyh1aW50IHNpemUsIHVpbnQgYWxpZ24pOworZXh0ZXJuIGludCBjcG1fZHBmcmVlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwbV9kcGFsbG9jX2ZpeGVkKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1aW50IHNpemUsIHVpbnQgYWxpZ24pOwogZXh0ZXJuIHZvaWQgY3BtX2RwZHVtcCh2b2lkKTsKLWV4dGVybiB2b2lkICpjcG1fZHByYW1fYWRkcih1aW50IG9mZnNldCk7CitleHRlcm4gdm9pZCAqY3BtX2RwcmFtX2FkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOwogZXh0ZXJuIHZvaWQgY3BtX3NldGJyZyh1aW50IGJyZywgdWludCByYXRlKTsKIGV4dGVybiB2b2lkIGNwbTJfZmFzdGJyZyh1aW50IGJyZywgdWludCByYXRlLCBpbnQgZGl2MTYpOwogZXh0ZXJuIHZvaWQgY3BtMl9yZXNldCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9oeWRyYS5oIGIvaW5jbHVkZS9hc20tcHBjL2h5ZHJhLmgKaW5kZXggODMzYThhZi4uMWFkNGVlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2h5ZHJhLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2h5ZHJhLmgKQEAgLTgsNyArOCw3IEBACiAgKglNYWNpbnRvc2ggVGVjaG5vbG9neSBpbiB0aGUgQ29tbW9uIEhhcmR3YXJlIFJlZmVyZW5jZSBQbGF0Zm9ybQogICoJQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCi0gKgmpIENvcHlyaWdodCAxOTk1IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgnCqSBDb3B5cmlnaHQgMTk5NSBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBJdCdzIGF2YWlsYWJsZSBvbmxpbmUgZnJvbSBodHRwOi8vY2hycC5hcHBsZS5jb20vTWFjVGVjaC5wZGYuCiAgKiAgWW91IGNhbiBvYnRhaW4gcGFwZXIgY29waWVzIG9mIHRoaXMgYm9vayBmcm9tIGNvbXB1dGVyIGJvb2tzdG9yZXMgb3IgYnkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLXBwYy9rZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWNlMWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcHBjL2tkZWJ1Zy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9rZGVidWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGd0YWJsZS5oCmluZGV4IGIxZmRiZjQuLmJlZDQ1MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BndGFibGUuaApAQCAtODI3LDEwICs4MjcsNiBAQAogCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQogI2VuZGlmCiAKLSNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbikKLSNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJMAotI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuKQotCiAvKgogICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1wcGMvc3lzdGVtLmgKaW5kZXggNzM4OTQzNS4uZDg0YTNjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9zeXN0ZW0uaApAQCAtNiw3ICs2LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KIAogLyoKQEAgLTE3MCw3ICsxNjksNiBAQAogZXh0ZXJuIHZvaWQgX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOwogCiAjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQotI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKnB0ciwgaW50IHNpemUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2Njd2Rldi5oIGIvaW5jbHVkZS9hc20tczM5MC9jY3dkZXYuaAppbmRleCA2Nzk1ZWNlLi40YzJlMTcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2Njd2Rldi5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvY2N3ZGV2LmgKQEAgLTE2LDYgKzE2LDcgQEAKIC8qIHN0cnVjdHMgZnJvbSBhc20vY2lvLmggKi8KIHN0cnVjdCBpcmI7CiBzdHJ1Y3QgY2N3MTsKK3N0cnVjdCBjY3dfZGV2X2lkOwogCiAvKiBzaW1wbGlmaWVkIGluaXRpYWxpemVycyBmb3Igc3RydWN0IGNjd19kZXZpY2U6CiAgKiBDQ1dfREVWSUNFIGFuZCBDQ1dfREVWSUNFX0RFVlRZUEUgaW5pdGlhbGl6ZSBvbmUKQEAgLTE3NSw2ICsxNzYsNyBAQAogCiBleHRlcm4gc3RydWN0IGNpdyAqY2N3X2RldmljZV9nZXRfY2l3KHN0cnVjdCBjY3dfZGV2aWNlICosIF9fdTMyIGNtZCk7CiBleHRlcm4gX191OCBjY3dfZGV2aWNlX2dldF9wYXRoX21hc2soc3RydWN0IGNjd19kZXZpY2UgKik7CitleHRlcm4gdm9pZCBjY3dfZGV2aWNlX2dldF9pZChzdHJ1Y3QgY2N3X2RldmljZSAqLCBzdHJ1Y3QgY2N3X2Rldl9pZCAqKTsKIAogI2RlZmluZSBnZXRfY2N3ZGV2X2xvY2soeCkgKHgpLT5jY3dsb2NrCiAKQEAgLTE4NCw3ICsxODYsNiBAQAogZXh0ZXJuIHN0cnVjdCBjY3dfZGV2aWNlICpjY3dfZGV2aWNlX3Byb2JlX2NvbnNvbGUodm9pZCk7CiAKIC8vIEZJWE1FOiB0aGVzZSBoYXZlIHRvIGdvCi1leHRlcm4gaW50IF9jY3dfZGV2aWNlX2dldF9kZXZpY2VfbnVtYmVyKHN0cnVjdCBjY3dfZGV2aWNlICopOwogZXh0ZXJuIGludCBfY2N3X2RldmljZV9nZXRfc3ViY2hhbm5lbF9udW1iZXIoc3RydWN0IGNjd19kZXZpY2UgKik7CiAKIGV4dGVybiB2b2lkICpjY3dfZGV2aWNlX2dldF9jaHBfZGVzYyhzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9pcGwuaCBiL2luY2x1ZGUvYXNtLXMzOTAvaXBsLmgKaW5kZXggYmRjZDQ0OC4uMmM0MGZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9pcGwuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2lwbC5oCkBAIC03OSw4ICs3OSw4IEBACiAgKiBJUEwgdmFsaWRpdHkgZmxhZ3MKICAqLwogZXh0ZXJuIHUzMiBpcGxfZmxhZ3M7Ci0KIGV4dGVybiB1MzIgZHVtcF9wcmVmaXhfcGFnZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgemZjcGR1bXBfcHJlZml4X2FycmF5W107CiAKIGV4dGVybiB2b2lkIGRvX3JlaXBsKHZvaWQpOwogZXh0ZXJuIHZvaWQgaXBsX3NhdmVfcGFyYW1ldGVycyh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAva2RlYnVnLmggYi9pbmNsdWRlL2FzbS1zMzkwL2tkZWJ1Zy5oCmluZGV4IGQyZDdhZDIuLjA0NDE4YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAva2RlYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9rZGVidWcuaApAQCAtOCwyMSArOCw2IEBACiAKIHN0cnVjdCBwdF9yZWdzOwogCi1zdHJ1Y3QgZGllX2FyZ3MgewotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCWNvbnN0IGNoYXIgKnN0cjsKLQlsb25nIGVycjsKLQlpbnQgdHJhcG5yOwotCWludCBzaWducjsKLX07Ci0KLS8qIE5vdGUgLSB5b3Ugc2hvdWxkIG5ldmVyIHVucmVnaXN0ZXIgYmVjYXVzZSB0aGF0IGNhbiByYWNlIHdpdGggTk1Jcy4KLSAqIElmIHlvdSByZWFsbHkgd2FudCB0byBkbyBpdCBmaXJzdCB1bnJlZ2lzdGVyIC0gdGhlbiBzeW5jaHJvbml6ZV9zY2hlZAotICogIC0gdGhlbiBmcmVlLgotICovCi1leHRlcm4gaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7Ci1leHRlcm4gaW50IHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLQogLyoKICAqIFRoZXNlIGFyZSBvbmx5IGhlcmUgYmVjYXVzZSBrcHJvYmVzLmMgd2FudHMgdGhlbSB0byBpbXBsZW1lbnQgYQogICogYmxhdGFudCBsYXllcmluZyB2aW9sYXRpb24uIFdpbGwgaG9wZWZ1bGx5IGdvIGF3YXkgc29vbiBvbmNlIGFsbApAQCAtMzcsOCArMjIsNiBAQAogCXJldHVybiAwOwogfQogCi1leHRlcm4gc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIHMzOTBkaWVfY2hhaW47Ci0KIGVudW0gZGllX3ZhbCB7CiAJRElFX09PUFMgPSAxLAogCURJRV9CUFQsCkBAIC01NCwxOSArMzcsNiBAQAogCURJRV9OTUlfSVBJLAogfTsKIAotc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X2RpZShlbnVtIGRpZV92YWwgdmFsLCBjb25zdCBjaGFyICpzdHIsCi0JCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIsIGludCB0cmFwLCBpbnQgc2lnKQotewotCXN0cnVjdCBkaWVfYXJncyBhcmdzID0gewotCQkucmVncyA9IHJlZ3MsCi0JCS5zdHIgPSBzdHIsCi0JCS5lcnIgPSBlcnIsCi0JCS50cmFwbnIgPSB0cmFwLAotCQkuc2lnbnIgPSBzaWcKLQl9OwotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmczM5MGRpZV9jaGFpbiwgdmFsLCAmYXJncyk7Ci19Ci0KIGV4dGVybiB2b2lkIGRpZShjb25zdCBjaGFyICosIHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAva2V4ZWMuaCBiL2luY2x1ZGUvYXNtLXMzOTAva2V4ZWMuaAppbmRleCA5YzM1YzhhLi43NTkyYWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2tleGVjLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9rZXhlYy5oCkBAIC0zNCw4ICszNCw2IEBACiAvKiBUaGUgbmF0aXZlIGFyY2hpdGVjdHVyZSAqLwogI2RlZmluZSBLRVhFQ19BUkNIIEtFWEVDX0FSQ0hfUzM5MAogCi0jZGVmaW5lIE1BWF9OT1RFX0JZVEVTIDEwMjQKLQogLyogUHJvdmlkZSBhIGR1bW15IGRlZmluaXRpb24gdG8gYXZvaWQgYnVpbGQgZmFpbHVyZXMuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfc2V0dXBfcmVncyhzdHJ1Y3QgcHRfcmVncyAqbmV3cmVncywKIAkJCQkJc3RydWN0IHB0X3JlZ3MgKm9sZHJlZ3MpIHsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tczM5MC9wYXJhbS5oCmluZGV4IDA4NWE3ZTIuLjM0YWFhNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BhcmFtLmgKQEAgLTEwLDcgKzEwLDcgQEAKICNkZWZpbmUgX0FTTVMzOTBfUEFSQU1fSAogCiAjaWZkZWYgX19LRVJORUxfXwotIyBkZWZpbmUgSFoJCTEwMAkJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLworIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCiAjIGRlZmluZSBVU0VSX0haCTEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KICMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wb2xsLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BvbGwuaAppbmRleCA2ZjdmNjVhLi5jOTg1MDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BvbGwuaApAQCAtMSwzNSArMSBAQAotLyoKLSAqICBpbmNsdWRlL2FzbS1zMzkwL3BvbGwuaAotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqCi0gKiAgRGVyaXZlZCBmcm9tICJpbmNsdWRlL2FzbS1pMzg2L3BvbGwuaCIKLSAqLwotCi0jaWZuZGVmIF9fUzM5MF9QT0xMX0gKLSNkZWZpbmUgX19TMzkwX1BPTExfSAotCi0vKiBUaGVzZSBhcmUgc3BlY2lmaWVkIGJ5IGlCQ1MyICovCi0jZGVmaW5lIFBPTExJTiAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgUE9MTFBSSSAgICAgICAgIDB4MDAwMgotI2RlZmluZSBQT0xMT1VUICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIFBPTExFUlIgICAgICAgICAweDAwMDgKLSNkZWZpbmUgUE9MTEhVUCAgICAgICAgIDB4MDAxMAotI2RlZmluZSBQT0xMTlZBTCAgICAgICAgMHgwMDIwCi0KLS8qIFRoZSByZXN0IHNlZW0gdG8gYmUgbW9yZS1vci1sZXNzIG5vbnN0YW5kYXJkLiBDaGVjayB0aGVtISAqLwotI2RlZmluZSBQT0xMUkROT1JNCTB4MDA0MAotI2RlZmluZSBQT0xMUkRCQU5ECTB4MDA4MAotI2RlZmluZSBQT0xMV1JOT1JNCTB4MDEwMAotI2RlZmluZSBQT0xMV1JCQU5ECTB4MDIwMAotI2RlZmluZSBQT0xMTVNHCQkweDA0MDAKLSNkZWZpbmUgUE9MTFJFTU9WRQkweDEwMDAKLSNkZWZpbmUgUE9MTFJESFVQICAgICAgIDB4MjAwMAotCi1zdHJ1Y3QgcG9sbGZkIHsKLQlpbnQgZmQ7Ci0Jc2hvcnQgZXZlbnRzOwotCXNob3J0IHJldmVudHM7Ci19OwotCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wb2xsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3FkaW8uaCBiL2luY2x1ZGUvYXNtLXMzOTAvcWRpby5oCmluZGV4IDEyN2Y3MmUuLjc0ZGIxZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcWRpby5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcWRpby5oCkBAIC0xMjAsNiArMTIwLDcgQEAKICNkZWZpbmUgUURJT19GTEFHX05PX0lOUFVUX0lOVEVSUlVQVF9DT05URVhUIDB4MDggLyogbm8gZWZmZWN0IG9uCiAJCQkJCQkgICAgIGFkYXB0ZXIgaW50ZXJydXB0cyAqLwogI2RlZmluZSBRRElPX0ZMQUdfRE9OVF9TSUdBIDB4MTAKKyNkZWZpbmUgUURJT19GTEFHX1BDSV9PVVQgICAweDIwCiAKIGV4dGVybiBpbnQgZG9fUURJTyhzdHJ1Y3QgY2N3X2RldmljZSosIHVuc2lnbmVkIGludCBmbGFncywgCiAJCSAgIHVuc2lnbmVkIGludCBxdWV1ZV9udW1iZXIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oIGIvaW5jbHVkZS9hc20tczM5MC9zbXAuaAppbmRleCAwYTI4ZTZkLi43NmU0MjRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc21wLmgKQEAgLTExMCw2ICsxMTAsNyBAQAogCV9fbG9hZF9wc3dfbWFzayhwc3dfa2VybmVsX2JpdHMgJiB+UFNXX01BU0tfTUNIRUNLKTsKIH0KIAorI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAogI2RlZmluZSBzbXBfY3B1X25vdF9ydW5uaW5nKGNwdSkJMQogI2RlZmluZSBzbXBfc2V0dXBfY3B1X3Bvc3NpYmxlX21hcCgpCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKaW5kZXggNWM2ZjAwZC4uNzkwYzFjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCkBAIC0yNTEsOCArMjUxLDEyIEBACiAjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMTEKICNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMTIKICNkZWZpbmUgX19OUl91dGltZXMJCTMxMwotCi0jZGVmaW5lIE5SX3N5c2NhbGxzIDMxNAorLyogTnVtYmVyIDMxNCBpcyByZXNlcnZlZCBmb3IgbmV3IHN5c19mYWxsb2NhdGUgKi8KKyNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxNQorI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTYKKyNkZWZpbmUgX19OUl90aW1lcmZkCQkzMTcKKyNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTgKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzE5CiAKIC8qIAogICogVGhlcmUgYXJlIHNvbWUgc3lzdGVtIGNhbGxzIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9uIDY0IGJpdCwgc29tZQpAQCAtMzQ2LDYgKzM1MCwxOSBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaWZuZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBfX0lHTk9SRV9zZWxlY3QKKyNlbHNlCisjZGVmaW5lIF9fSUdOT1JFX3RpbWUKKyNlbmRpZgorCisvKiBJZ25vcmUgTlVNQSBzeXN0ZW0gY2FsbHMuIE5vdCB3aXJlZCB1cCBvbiBzMzkwLiAqLworI2RlZmluZSBfX0lHTk9SRV9tYmluZAorI2RlZmluZSBfX0lHTk9SRV9nZXRfbWVtcG9saWN5CisjZGVmaW5lIF9fSUdOT1JFX3NldF9tZW1wb2xpY3kKKyNkZWZpbmUgX19JR05PUkVfbWlncmF0ZV9wYWdlcworI2RlZmluZSBfX0lHTk9SRV9tb3ZlX3BhZ2VzCisKICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9idWcuaCBiL2luY2x1ZGUvYXNtLXNoL2J1Zy5oCmluZGV4IDc5NGMzNmQuLjQ2ZjkyNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2J1Zy5oCkBAIC0xLDEyICsxLDEyIEBACiAjaWZuZGVmIF9fQVNNX1NIX0JVR19ICiAjZGVmaW5lIF9fQVNNX1NIX0JVR19ICiAKKyNkZWZpbmUgVFJBUEFfQlVHX09QQ09ERQkweGMzM2UJLyogdHJhcGEgIzB4M2UgKi8KKwogI2lmZGVmIENPTkZJR19CVUcKICNkZWZpbmUgSEFWRV9BUkNIX0JVRwogI2RlZmluZSBIQVZFX0FSQ0hfV0FSTl9PTgogCi0jZGVmaW5lIFRSQVBBX0JVR19PUENPREUJMHhjMzNlCS8qIHRyYXBhICMweDNlICovCi0KIC8qKgogICogX0VNSVRfQlVHX0VOVFJZCiAgKiAlMSAtIF9fRklMRV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtZmVhdHVyZXMuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1mZWF0dXJlcy5oCmluZGV4IDRiY2NkN2MuLjg2MzA4YWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1mZWF0dXJlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1mZWF0dXJlcy5oCkBAIC0yMCw1ICsyMCw2IEBACiAjZGVmaW5lIENQVV9IQVNfUFRFQQkJMHgwMDIwCS8qIFBURUEgcmVnaXN0ZXIgKi8KICNkZWZpbmUgQ1BVX0hBU19MTFNDCQkweDAwNDAJLyogbW92bGkubC9tb3Zjby5sICovCiAjZGVmaW5lIENQVV9IQVNfTDJfQ0FDSEUJMHgwMDgwCS8qIFNlY29uZGFyeSBjYWNoZSAvIFVSQU0gKi8KKyNkZWZpbmUgQ1BVX0hBU19PUDMyCQkweDAxMDAJLyogMzItYml0IGluc3RydWN0aW9uIHN1cHBvcnQgKi8KIAogI2VuZGlmIC8qIF9fQVNNX1NIX0NQVV9GRUFUVVJFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2RtYS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9kbWEuaAppbmRleCA5NTQ4MDFiLi4zYTY2ZGM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvZG1hLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAlYTUlUX1NaXzEyOEJJVCwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSBfX2F0dHJpYnV0ZV9fICgodXNlZCkpID0geworc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0gewogCVtYTUlUX1NaXzhCSVRdCQk9IDAsCiAJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCiAJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2RtYS1zaDc3ODAuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZG1hLXNoNzc4MC5oCmluZGV4IDZjOTBkMjguLjcxYjQyNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZG1hLXNoNzc4MC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZG1hLXNoNzc4MC5oCkBAIC0yOCw3ICsyOCw3IEBACiAvKgogICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXyAoKHVzZWQpKSB0c19zaGlmdFtdID0geworc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0gewogCVtYTUlUX1NaXzhCSVRdCQk9IDAsCiAJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCiAJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2RtYS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9kbWEuaAppbmRleCBjMTM1ZTljLi4zNmUyNmE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZG1hLmgKQEAgLTUzLDcgKzUzLDcgQEAKIC8qCiAgKiBUaGUgRE1BIGNvdW50IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2Zlci4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fYXR0cmlidXRlX18gKCh1c2VkKSkgPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gX19tYXliZV91bnVzZWQgPSB7CiAJW1hNSVRfU1pfNjRCSVRdCQk9IDMsCiAJW1hNSVRfU1pfOEJJVF0JCT0gMCwKIAlbWE1JVF9TWl8xNkJJVF0JCT0gMSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZnJlcS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9mcmVxLmgKaW5kZXggODY1NjRlNy4uMzlmNDFmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9mcmVxLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9mcmVxLmgKQEAgLTI0LDYgKzI0LDkgQEAKICNkZWZpbmUgRlJRTVIxCQkJMHhmZmM4MDAxNAogI2Vsc2UKICNkZWZpbmUgRlJRQ1IJCQkweGZmYzAwMDAwCisjZGVmaW5lIEZSUUNSX1BTVEJZCQkweDAyMDAKKyNkZWZpbmUgRlJRQ1JfUExMRU4JCTB4MDQwMAorI2RlZmluZSBGUlFDUl9DS09FTgkJMHgwODAwCiAjZW5kaWYKICNkZWZpbmUgTUlOX0RJVklTT1JfTlIJCTAKICNkZWZpbmUgTUFYX0RJVklTT1JfTlIJCTMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RtYS5oIGIvaW5jbHVkZS9hc20tc2gvZG1hLmgKaW5kZXggZmFmMzA1MS4uNjAzNGQ0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvZG1hLmgKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdS9kbWEuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZG1hYnJnLmggYi9pbmNsdWRlL2FzbS1zaC9kbWFicmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWVkYmEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvZG1hYnJnLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIFNINzc2MCBETUFCUkcgKFVTQi9BdWRpbykgc3VwcG9ydAorICovCisKKyNpZm5kZWYgX0RNQUJSR19IXworI2RlZmluZSBfRE1BQlJHX0hfCisKKy8qIElSUSBzb3VyY2VzICovCisjZGVmaW5lIERNQUJSR0lSUV9VU0JETUEJMAorI2RlZmluZSBETUFCUkdJUlFfVVNCRE1BRVJSCTEKKyNkZWZpbmUgRE1BQlJHSVJRX0EwVFhGCQkyCisjZGVmaW5lIERNQUJSR0lSUV9BMFRYSAkJMworI2RlZmluZSBETUFCUkdJUlFfQTBSWEYJCTQKKyNkZWZpbmUgRE1BQlJHSVJRX0EwUlhICQk1CisjZGVmaW5lIERNQUJSR0lSUV9BMVRYRgkJNgorI2RlZmluZSBETUFCUkdJUlFfQTFUWEgJCTcKKyNkZWZpbmUgRE1BQlJHSVJRX0ExUlhGCQk4CisjZGVmaW5lIERNQUJSR0lSUV9BMVJYSAkJOQorCitleHRlcm4gaW50IGRtYWJyZ19yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQsIHZvaWQoKikodm9pZCAqKSwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGRtYWJyZ19mcmVlX2lycSh1bnNpZ25lZCBpbnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RyZWFtY2FzdC9zeXNhc2ljLmggYi9pbmNsdWRlL2FzbS1zaC9kcmVhbWNhc3Qvc3lzYXNpYy5oCmluZGV4IDc4NzRlM2QuLmYzMzQyNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2RyZWFtY2FzdC9zeXNhc2ljLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvZHJlYW1jYXN0L3N5c2FzaWMuaApAQCAtMjMsNyArMjMsNyBAQAogICAgdGFrZXMuCiAqLwogCi0jZGVmaW5lIEhXX0VWRU5UX0lSUV9CQVNFICBPRkZDSElQX0lSUV9CQVNFIC8qIDQ4ICovCisjZGVmaW5lIEhXX0VWRU5UX0lSUV9CQVNFICA0OAogCiAvKiBJUlEgMTMgKi8KICNkZWZpbmUgSFdfRVZFTlRfVlNZTkMgICAgIChIV19FVkVOVF9JUlFfQkFTRSArICA1KSAvKiBWU3luYyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZWRvc2s3NzA1LmggYi9pbmNsdWRlL2FzbS1zaC9lZG9zazc3MDUuaAppbmRleCBhMTA4OWE2Li41YmRjOWQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9lZG9zazc3MDUuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9lZG9zazc3MDUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1zaC9lZG9zazc3MDUvaW8uaAorICogaW5jbHVkZS9hc20tc2gvZWRvc2s3NzA1LmgKICAqCiAgKiBNb2RpZmllZCB2ZXJzaW9uIG9mIGlvX3NlLmggZm9yIHRoZSBFRE9TSzc3MDUgc3BlY2lmaWMgZnVuY3Rpb25zLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9pby5oCmluZGV4IGEwZTU1YjAuLmFhODA5MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvaW8uaApAQCAtMTE2LDEzICsxMTYsMTMgQEAKICAqIHJlZGVmaW5lZCBieSB1c2VybGV2ZWwgcHJvZ3JhbXMuCiAgKi8KICNpZmRlZiBfX3JlYWRiCi0jIGRlZmluZSByZWFkYihhKQkoeyB1bnNpZ25lZCBsb25nIHJfID0gX19yYXdfcmVhZGIoYSk7IG1iKCk7IHJfOyB9KQorIyBkZWZpbmUgcmVhZGIoYSkJKHsgdW5zaWduZWQgaW50IHJfID0gX19yYXdfcmVhZGIoYSk7IG1iKCk7IHJfOyB9KQogI2VuZGlmCiAjaWZkZWYgX19yYXdfcmVhZHcKLSMgZGVmaW5lIHJlYWR3KGEpCSh7IHVuc2lnbmVkIGxvbmcgcl8gPSBfX3Jhd19yZWFkdyhhKTsgbWIoKTsgcl87IH0pCisjIGRlZmluZSByZWFkdyhhKQkoeyB1bnNpZ25lZCBpbnQgcl8gPSBfX3Jhd19yZWFkdyhhKTsgbWIoKTsgcl87IH0pCiAjZW5kaWYKICNpZmRlZiBfX3Jhd19yZWFkbAotIyBkZWZpbmUgcmVhZGwoYSkJKHsgdW5zaWduZWQgbG9uZyByXyA9IF9fcmF3X3JlYWRsKGEpOyBtYigpOyByXzsgfSkKKyMgZGVmaW5lIHJlYWRsKGEpCSh7IHVuc2lnbmVkIGludCByXyA9IF9fcmF3X3JlYWRsKGEpOyBtYigpOyByXzsgfSkKICNlbmRpZgogCiAjaWZkZWYgX19yYXdfd3JpdGViCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLXNoL2tkZWJ1Zy5oCmluZGV4IGVmMDA5YmEuLjM4MmNmYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2tkZWJ1Zy5oCkBAIC0zLDMzICszLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKLXN0cnVjdCBwdF9yZWdzOwotCi1zdHJ1Y3QgZGllX2FyZ3MgewotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCWludCB0cmFwbnI7Ci19OwotCi1pbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwotaW50IHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwotaW50IHJlZ2lzdGVyX3BhZ2VfZmF1bHRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7Ci1pbnQgdW5yZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwotZXh0ZXJuIHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBzaGRpZV9jaGFpbjsKLQogLyogR3Jvc3NseSBtaXNuYW1lZC4gKi8KIGVudW0gZGllX3ZhbCB7CiAJRElFX1RSQVAsCi0JRElFX1BBR0VfRkFVTFQsCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJICAgICBpbnQgdHJhcCwgaW50IHNpZykKLXsKLQlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsKLQkJLnJlZ3MgPSByZWdzLAotCQkudHJhcG5yID0gdHJhcCwKLQl9OwotCi0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZzaGRpZV9jaGFpbiwgdmFsLCAmYXJncyk7Ci19CiAjZW5kaWYgLyogX19BU01fU0hfS0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2tleGVjLmggYi9pbmNsdWRlL2FzbS1zaC9rZXhlYy5oCmluZGV4IGRhMzZhNzUuLjAwZjQyNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2tleGVjLmgKKysrIGIvaW5jbHVkZS9hc20tc2gva2V4ZWMuaApAQCAtMjYsOCArMjYsNiBAQAogLyogVGhlIG5hdGl2ZSBhcmNoaXRlY3R1cmUgKi8KICNkZWZpbmUgS0VYRUNfQVJDSCBLRVhFQ19BUkNIX1NICiAKLSNkZWZpbmUgTUFYX05PVEVfQllURVMgMTAyNAotCiBzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfc2V0dXBfcmVncyhzdHJ1Y3QgcHRfcmVncyAqbmV3cmVncywKIAkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKm9sZHJlZ3MpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9sYW5kaXNrL2dpby5oIGIvaW5jbHVkZS9hc20tc2gvbGFuZGlzay9naW8uaAppbmRleCAzZmNlNGM0Li4zNWQ3MzY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9sYW5kaXNrL2dpby5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2xhbmRpc2svZ2lvLmgKQEAgLTI5LDE2ICsyOSw4IEBACiAjZGVmaW5lIEdJT0RSVl9JT0NHR0lPREFUQTQgICBfSU9SKEdJT0RSVl9JT0NfTUFHSUMsICA2LCB1bnNpZ25lZCBsb25nICopCiAjZGVmaW5lIEdJT0RSVl9JT0NTR0lPU0VUQUREUiBfSU9XKEdJT0RSVl9JT0NfTUFHSUMsICA3LCB1bnNpZ25lZCBsb25nICopCiAjZGVmaW5lIEdJT0RSVl9JT0NIQVJEUkVTRVQgICBfSU8oR0lPRFJWX0lPQ19NQUdJQywgOCkgLyogZGVidWdnaW5nIHRvb2wgKi8KLQotI2RlZmluZSBHSU9EUlZfSU9DU0dJT19MRUQgICAgX0lPVyhHSU9EUlZfSU9DX01BR0lDLCAgOSwgdW5zaWduZWQgbG9uZyAqKQotI2RlZmluZSBHSU9EUlZfSU9DR0dJT19MRUQgICAgX0lPUihHSU9EUlZfSU9DX01BR0lDLCAgMTAsIHVuc2lnbmVkIGxvbmcgKikKLSNkZWZpbmUgR0lPRFJWX0lPQ1NHSU9fQlVaWkVSIF9JT1coR0lPRFJWX0lPQ19NQUdJQywgIDExLCB1bnNpZ25lZCBsb25nICopCi0jZGVmaW5lIEdJT0RSVl9JT0NHR0lPX0xBTkRJU0sgX0lPUihHSU9EUlZfSU9DX01BR0lDLCAgMTQsIHVuc2lnbmVkIGxvbmcgKikKLSNkZWZpbmUgR0lPRFJWX0lPQ0dHSU9fQlROIF9JT1IoR0lPRFJWX0lPQ19NQUdJQywgIDIyLCB1bnNpZ25lZCBsb25nICopCi0jZGVmaW5lIEdJT0RSVl9JT0NTR0lPX0JUTlBJRCBfSU9XKEdJT0RSVl9JT0NfTUFHSUMsICAyMywgdW5zaWduZWQgbG9uZyAqKQotI2RlZmluZSBHSU9EUlZfSU9DR0dJT19CVE5QSUQgX0lPUihHSU9EUlZfSU9DX01BR0lDLCAgMjQsIHVuc2lnbmVkIGxvbmcgKikKLQogI2RlZmluZSBHSU9EUlZfSU9DX01BWE5SIDgKKwogI2RlZmluZSBHSU9fUkVBRCAweDAwMDAwMDAwCiAjZGVmaW5lIEdJT19XUklURSAweDAwMDAwMDAxCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2xhbmRpc2svaW9kYXRhX2xhbmRpc2suaCBiL2luY2x1ZGUvYXNtLXNoL2xhbmRpc2svaW9kYXRhX2xhbmRpc2suaAppbmRleCBjNzRkM2M3Li42ZmIwNGFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9sYW5kaXNrL2lvZGF0YV9sYW5kaXNrLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvbGFuZGlzay9pb2RhdGFfbGFuZGlzay5oCkBAIC0yMiwxNiArMjIsNiBAQAogLyogMjAwMy4xMC4zMSBJLU8gREFUQSBOU0QgTldHCWFkZC4JZm9yIHNodXRkb3duIHBvcnQgY2xlYXIgKi8KICNkZWZpbmUgUEFfUFdSSU5UX0NMUgkweGIwMDAwMDA2CS8qIFNodXRkb3duIEludGVycnVwdCBjbGVhciBSZWdpc3RlciAqLwogCi0jZGVmaW5lIFBBX0xDRF9DTFJEU1AJMHgwMAkJLyogTENEIENsZWFyIERpc3BsYXkgT2Zmc2V0ICovCi0jZGVmaW5lIFBBX0xDRF9SVE5IT01FCTB4MDAJCS8qIExDRCBSZXR1cm4gSG9tZSBPZmZzZXQgKi8KLSNkZWZpbmUgUEFfTENEX0VOVE1PREUJMHgwMAkJLyogTENEIEVudHJ5IE1vZGUgT2Zmc2V0ICovCi0jZGVmaW5lIFBBX0xDRF9EU1BDVEwJMHgwMAkJLyogTENEIERpc3BsYXkgT04vT0ZGIENvbnRyb2wgT2Zmc2V0ICovCi0jZGVmaW5lIFBBX0xDRF9GVU5DCTB4MDAJCS8qIExDRCBGdW5jdGlvbiBTZXQgT2Zmc2V0ICovCi0jZGVmaW5lIFBBX0xDRF9DR1JBTQkweDAwCQkvKiBMQ0QgU2V0IENHUkFNIEFkZHJlc3MgT2Zmc2V0ICovCi0jZGVmaW5lIFBBX0xDRF9ERFJBTQkweDAwCQkvKiBMQ0QgU2V0IEREUkFNIEFkZHJlc3MgT2Zmc2V0ICovCi0jZGVmaW5lIFBBX0xDRF9SREZMQUcJMHgwMQkJLyogTENEIFJlYWQgQnVzeSBGbGFnIE9mZnNldCAqLwotI2RlZmluZSBQQV9MQ0RfV1REQVRBCTB4MDIJCS8qIExDRCBXcml0ZSBEYXRhdCB0byBSQU0gT2Zmc2V0ICovCi0jZGVmaW5lIFBBX0xDRF9SRERBVEEJMHgwMwkJLyogTENEIFJlYWQgRGF0YSBmcm9tIFJBTSBPZmZzZXQgKi8KICNkZWZpbmUgUEFfUElERV9PRkZTRVQJMHg0MAkJLyogQ0YgSURFIE9mZnNldCAqLwogI2RlZmluZSBQQV9TSURFX09GRlNFVAkweDQwCQkvKiBIREQgSURFIE9mZnNldCAqLwogCkBAIC00NSwzMyArMzUsNiBAQAogI2RlZmluZSBJUlFfQlVUVE9OCTEyCQkvKiBVU0wtNVAgQnV0dG9uIElSUSAqLwogI2RlZmluZSBJUlFfRkFVTFQJMTMJCS8qIFVTTC01UCBGYXVsdCAgSVJRICovCiAKLSNkZWZpbmUgU0hVVERPV05fQlROX01BSk9SCTk5CS8qIFNodXRkb3duIGJ1dHRvbiBkZXZpY2UgbWFqb3Igbm8uICovCi0KLSNkZWZpbmUgU0hVVERPV05fTE9PUF9DTlQJNQkvKiBTaHV0ZG93biBidXR0b24gRGV0ZWN0aW9uIGxvb3AgKi8KLSNkZWZpbmUgU0hVVERPV05fREVMQVkJCTIwMAkvKiBTaHV0ZG93biBidXR0b24gZGVsYXkgdmFsdWUobXMpICovCi0KLQotLyogYWRkZWQgYnkga29naWlkZW5hICovCi0vKgotICogIGxhbmRpc2tfbGVkcGFyYW0KLSAqCi0gKiBsZWQgIC0tLS0tLTEwIC02NTQzMjEwIC02NTQzMjEwIC02NTQzMjEwCi0gKiAgICAgfDAwMDAwMC4ufDAuLi4uLi4ufDAuLi4uLi4ufFUuLi4uLi4ufAotICogICAgIHwgIEhBUkQgIHxmYXN0Ymxpa3wgYmxpbmsgIHwgICBvbiAgIHwKLSAqCi0gKiAgIGxlZDA6IHBvd2VyICAgICAgIFU6dXBkYXRlIGZsYWcKLSAqICAgbGVkMTogZXJyb3IKLSAqICAgbGVkMjogdXNiMQotICogICBsZWQzOiB1c2IyCi0gKiAgIGxlZDQ6IHVzYjMKLSAqICAgbGVkNTogdXNiNAotICogICBsZWQ2OiB1c2I1Ci0gKgotICovCi1leHRlcm4gaW50IGxhbmRpc2tfbGVkcGFyYW07ICAgIC8qIGZyb20gc2V0dXAuYyAqLwotZXh0ZXJuIGludCBsYW5kaXNrX2J1enplcnBhcmFtOyAvKiBmcm9tIHNldHVwLmMgKi8KLWV4dGVybiBpbnQgbGFuZGlza19hcmNoOyAgICAgICAgLyogZnJvbSBzZXR1cC5jICovCi0KICNkZWZpbmUgX19JT19QUkVGSVggbGFuZGlzawogI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXNoL3BnYWxsb2MuaAppbmRleCA4ODhlNDUyLi4xOGI2MTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvcGdhbGxvYy5oCkBAIC0xLDYgKzEsMTIgQEAKICNpZm5kZWYgX19BU01fU0hfUEdBTExPQ19ICiAjZGVmaW5lIF9fQVNNX1NIX1BHQUxMT0NfSAogCisjaW5jbHVkZSA8bGludXgvcXVpY2tsaXN0Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBRVUlDS19QR0QgMAkvKiBXZSBwcmVzZXJ2ZSBzcGVjaWFsIG1hcHBpbmdzIG92ZXIgZnJlZSAqLworI2RlZmluZSBRVUlDS19QVCAxCS8qIE90aGVyIHBhZ2UgdGFibGUgcGFnZXMgdGhhdCBhcmUgemVybyBvbiBmcmVlICovCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogCQkJCSAgICAgICBwdGVfdCAqcHRlKQogewpAQCAtMTMsNDggKzE5LDQ5IEBACiAJc2V0X3BtZChwbWQsIF9fcG1kKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwdGUpKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfY3Rvcih2b2lkICp4KQoreworCXBnZF90ICpwZ2QgPSB4OworCisJbWVtY3B5KHBnZCArIFVTRVJfUFRSU19QRVJfUEdELAorCSAgICAgICBzd2FwcGVyX3BnX2RpciArIFVTRVJfUFRSU19QRVJfUEdELAorCSAgICAgICAoUFRSU19QRVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7Cit9CisKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KICAqLwogc3RhdGljIGlubGluZSBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCXBnZF90ICpwZ2QgPSAocGdkX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCk7Ci0KLQlpZiAocGdkKSB7Ci0JCW1lbXNldChwZ2QsIDAsIFVTRVJfUFRSU19QRVJfUEdEICogc2l6ZW9mKHBnZF90KSk7Ci0JCW1lbWNweShwZ2QgKyBVU0VSX1BUUlNfUEVSX1BHRCwKLQkJICAgICAgIHN3YXBwZXJfcGdfZGlyICsgVVNFUl9QVFJTX1BFUl9QR0QsCi0JCSAgICAgICAoUFRSU19QRVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7Ci0JfQotCi0JcmV0dXJuIHBnZDsKKwlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKFFVSUNLX1BHRCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCwgcGdkX2N0b3IpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUocGdkX3QgKnBnZCkKIHsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGdkKTsKKwlxdWlja2xpc3RfZnJlZShRVUlDS19QR0QsIE5VTEwsIHBnZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlyZXR1cm4gKHB0ZV90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9SRVBFQVQgfCBfX0dGUF9aRVJPKTsKKwlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKFFVSUNLX1BULCBHRlBfS0VSTkVMIHwgX19HRlBfUkVQRUFULCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlyZXR1cm4gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTyk7CisJdm9pZCAqcGcgPSBxdWlja2xpc3RfYWxsb2MoUVVJQ0tfUFQsIEdGUF9LRVJORUwgfCBfX0dGUF9SRVBFQVQsIE5VTEwpOworCXJldHVybiBwZyA/IHZpcnRfdG9fcGFnZShwZykgOiBOVUxMOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHB0ZV90ICpwdGUpCiB7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB0ZSk7CisJcXVpY2tsaXN0X2ZyZWUoUVVJQ0tfUFQsIE5VTEwsIHB0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgcGFnZSAqcHRlKQogewotCV9fZnJlZV9wYWdlKHB0ZSk7CisJcXVpY2tsaXN0X2ZyZWVfcGFnZShRVUlDS19QVCwgTlVMTCwgcHRlKTsKIH0KIAogI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIscHRlKSB0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksKHB0ZSkpCkBAIC02Niw2ICs3MywxMSBAQAogCiAjZGVmaW5lIHBtZF9mcmVlKHgpCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIseCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX3BndF9jYWNoZSh2b2lkKQoreworCXF1aWNrbGlzdF90cmltKFFVSUNLX1BHRCwgTlVMTCwgMjUsIDE2KTsKKwlxdWlja2xpc3RfdHJpbShRVUlDS19QVCwgTlVMTCwgMjUsIDE2KTsKK30KIAogI2VuZGlmIC8qIF9fQVNNX1NIX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oCmluZGV4IDE4NGQ3ZmMuLjViNTIzYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLmgKQEAgLTU2OCwxMCArNTY4LDYgQEAKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKIAotI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQotI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCi0jZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCi0KIHN0cnVjdCBtbV9zdHJ1Y3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wb2xsLmggYi9pbmNsdWRlL2FzbS1zaC9wb2xsLmgKaW5kZXggZGJjYTliMy4uYzk4NTA5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3BvbGwuaApAQCAtMSwyNyArMSBAQAotI2lmbmRlZiBfX0FTTV9TSF9QT0xMX0gKLSNkZWZpbmUgX19BU01fU0hfUE9MTF9ICi0KLS8qIFRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgaUJDUzIgKi8KLSNkZWZpbmUgUE9MTElOCQkweDAwMDEKLSNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCi0jZGVmaW5lIFBPTExPVVQJCTB4MDAwNAotI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKLSNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCi0jZGVmaW5lIFBPTExOVkFMCTB4MDAyMAotCi0vKiBUaGUgcmVzdCBzZWVtIHRvIGJlIG1vcmUtb3ItbGVzcyBub25zdGFuZGFyZC4gQ2hlY2sgdGhlbSEgKi8KLSNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKLSNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKLSNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKLSNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKLSNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCi0jZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCi0jZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKLQotc3RydWN0IHBvbGxmZCB7Ci0JaW50IGZkOwotCXNob3J0IGV2ZW50czsKLQlzaG9ydCByZXZlbnRzOwotfTsKLQotI2VuZGlmIC8qIF9fQVNNX1NIX1BPTExfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BvbGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NtcC5oIGIvaW5jbHVkZS9hc20tc2gvc21wLmgKaW5kZXggNzFlY2RkZi4uY2FhN2I5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc21wLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAotI2luY2x1ZGUgPGFzbS9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NuYXBnZWFyLmggYi9pbmNsdWRlL2FzbS1zaC9zbmFwZ2Vhci5oCmluZGV4IDZiNWU0ZGQuLjJkNzEyZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NuYXBnZWFyLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc25hcGdlYXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1zaC9zbmFwZ2Vhci9pby5oCisgKiBpbmNsdWRlL2FzbS1zaC9zbmFwZ2Vhci5oCiAgKgogICogTW9kaWZpZWQgdmVyc2lvbiBvZiBpb19zZS5oIGZvciB0aGUgc25hcGdlYXItc3BlY2lmaWMgZnVuY3Rpb25zLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1zaC9zcGlubG9jay5oCmluZGV4IDI1ODZlZWYuLjkyZjZlMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc3BpbmxvY2suaApAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBfX0FTTV9TSF9TUElOTE9DS19ICiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3NwaW5sb2NrX3R5cGVzLmg+CiAKIC8qCiAgKiBZb3VyIGJhc2ljIFNNUCBzcGlubG9ja3MsIGFsbG93aW5nIG9ubHkgYSBzaW5nbGUgQ1BVIGFueXdoZXJlCkBAIC00Miw3ICs0Myw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlhc3NlcnRfc3Bpbl9sb2NrZWQobG9jayk7CisJLy9hc3NlcnRfc3Bpbl9sb2NrZWQobG9jayk7CiAKIAlsb2NrLT5sb2NrID0gMDsKIH0KQEAgLTg4LDYgKzg5LDExIEBACiAJX19yYXdfc3Bpbl91bmxvY2soJnJ3LT5sb2NrKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfY2FuX2xvY2socmF3X3J3bG9ja190ICpydykKK3sKKwlyZXR1cm4gKGF0b21pY19yZWFkKCZydy0+Y291bnRlcikgPT0gUldfTE9DS19CSUFTKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgX19yYXdfcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKIHsKIAlhdG9taWNfdCAqY291bnQgPSAoYXRvbWljX3QqKWxvY2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zcGlubG9ja190eXBlcy5oIGIvaW5jbHVkZS9hc20tc2gvc3BpbmxvY2tfdHlwZXMuaAppbmRleCA4YzQxYjZjLi41YzU4MTM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zcGlubG9ja190eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTksNyArOSw5IEBACiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb2NrOwogfSByYXdfc3BpbmxvY2tfdDsKIAotI2RlZmluZSBfX1NQSU5fTE9DS19VTkxPQ0tFRAkJeyAwIH0KKyNkZWZpbmUgX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VECXsgMSB9CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlyYXdfc3BpbmxvY2tfdCBsb2NrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaAppbmRleCAxMjdhZjMwLi44MmYzZTIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaApAQCAtODIsMTYgKzgyLDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGFzKHZvbGF0aWxlIGludCAqbSkKLXsKLQl1bnNpZ25lZCBsb25nIHJldHZhbDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgidGFzLmIJQCUxXG5cdCIKLQkJCSAgICAgICJtb3Z0CSUwIgotCQkJICAgICAgOiAiPXIiIChyZXR2YWwpOiAiciIgKG0pOiAidCIsICJtZW1vcnkiKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCiAvKgogICogQSBicmllZiBub3RlIG9uIGN0cmxfYmFycmllcigpLCB0aGUgY29udHJvbCByZWdpc3RlciB3cml0ZSBiYXJyaWVyLgogICoKQEAgLTI2NSw2ICsyNTUsMTUgQEAKIAlyZXR1cm4gc2V0X2V4Y2VwdGlvbl90YWJsZV92ZWMoZXZ0ID4+IDUsIGhhbmRsZXIpOwogfQogCisvKgorICogU0gtMkEgaGFzIGJvdGggMTYgYW5kIDMyLWJpdCBvcGNvZGVzLCBkbyBsYW1lIGVuY29kaW5nIGNoZWNrcy4KKyAqLworI2lmZGVmIENPTkZJR19DUFVfU0gyQQorZXh0ZXJuIHVuc2lnbmVkIGludCBpbnN0cnVjdGlvbl9zaXplKHVuc2lnbmVkIGludCBpbnNuKTsKKyNlbHNlCisjZGVmaW5lIGluc3RydWN0aW9uX3NpemUoaW5zbikJKDIpCisjZW5kaWYKKwogLyogWFhYCiAgKiBkaXNhYmxlIGhsdCBkdXJpbmcgY2VydGFpbiBjcml0aWNhbCBpL28gb3BlcmF0aW9ucwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC90aW1lci5oIGIvaW5jbHVkZS9hc20tc2gvdGltZXIuaAppbmRleCAxN2I1ZTc2Li43MDFiYTg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC90aW1lci5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3RpbWVyLmgKQEAgLTIsMTIgKzIsMTQgQEAKICNkZWZpbmUgX19BU01fU0hfVElNRVJfSAogCiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxhc20vY3B1L3RpbWVyLmg+CiAKIHN0cnVjdCBzeXNfdGltZXJfb3BzIHsKIAlpbnQgKCppbml0KSh2b2lkKTsKIAlpbnQgKCpzdGFydCkodm9pZCk7CiAJaW50ICgqc3RvcCkodm9pZCk7CisJY3ljbGVfdCAoKnJlYWQpKHZvaWQpOwogI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCiAJdW5zaWduZWQgbG9uZyAoKmdldF9vZmZzZXQpKHZvaWQpOwogI2VuZGlmCkBAIC0xOCwyOSArMjAsOCBAQAogCiAJc3RydWN0IHN5c19kZXZpY2UJZGV2OwogCXN0cnVjdCBzeXNfdGltZXJfb3BzCSpvcHM7Ci0KLSNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgotCXN0cnVjdCBkeW5fdGlja190aW1lcgkqZHluX3RpY2s7Ci0jZW5kaWYKIH07CiAKLSNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgotI2RlZmluZSBEWU5fVElDS19FTkFCTEVECSgxIDw8IDEpCi0KLXN0cnVjdCBkeW5fdGlja190aW1lciB7Ci0Jc3BpbmxvY2tfdAlsb2NrOwotCXVuc2lnbmVkIGludAlzdGF0ZTsJCQkvKiBDdXJyZW50IHN0YXRlICovCi0JaW50CQkoKmVuYWJsZSkodm9pZCk7CS8qIEVuYWJsZXMgZHluYW1pYyB0aWNrICovCi0JaW50CQkoKmRpc2FibGUpKHZvaWQpOwkvKiBEaXNhYmxlcyBkeW5hbWljIHRpY2sgKi8KLQl2b2lkCQkoKnJlcHJvZ3JhbSkodW5zaWduZWQgbG9uZyk7IC8qIFJlcHJvZ3JhbXMgdGhlIHRpbWVyICovCi0JaW50CQkoKmhhbmRsZXIpKGludCwgdm9pZCAqKTsKLX07Ci0KLXZvaWQgdGltZXJfZHluX3JlcHJvZ3JhbSh2b2lkKTsKLSNlbHNlCi0jZGVmaW5lIHRpbWVyX2R5bl9yZXByb2dyYW0oKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQogI2RlZmluZSBUSUNLX1NJWkUgKHRpY2tfbnNlYyAvIDEwMDApCiAKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHRtdV90aW1lciwgY210X3RpbWVyLCBtdHUyX3RpbWVyOwpAQCAtNTgsNSArMzksNyBAQAogCiAvKiBhcmNoL3NoL2tlcm5lbC90aW1lLmMgKi8KIHZvaWQgaGFuZGxlX3RpbWVyX3RpY2sodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzaF9ocHRfZnJlcXVlbmN5OworZXh0ZXJuIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zaDsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tc2gvdW5pc3RkLmgKaW5kZXggNDliZTUwYS4uNzdiY2IwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvdW5pc3RkLmgKQEAgLTg1LDcgKzg1LDcgQEAKICNkZWZpbmUgX19OUl9zaWdwZW5kaW5nCQkgNzMKICNkZWZpbmUgX19OUl9zZXRob3N0bmFtZQkgNzQKICNkZWZpbmUgX19OUl9zZXRybGltaXQJCSA3NQotI2RlZmluZSBfX05SX2dldHJsaW1pdAkgCSA3NgkvKiBCYWNrIGNvbXBhdGlibGUgMkdpZyBsaW1pdGVkIHJsaW1pdCAqLworI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2CS8qIEJhY2sgY29tcGF0aWJsZSAyR2lnIGxpbWl0ZWQgcmxpbWl0ICovCiAjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKICNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4CiAjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQpAQCAtMzI4LDggKzMyOCwxMiBAQAogI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCTMxNwogI2RlZmluZSBfX05SX2dldGNwdQkJMzE4CiAjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJMzE5CisjZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkzMjAKKyNkZWZpbmUgX19OUl9zaWduYWxmZAkJMzIxCisjZGVmaW5lIF9fTlJfdGltZXJmZAkJMzIyCisjZGVmaW5lIF9fTlJfZXZlbnRmZAkJMzIzCiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMgMzIwCisjZGVmaW5lIE5SX3N5c2NhbGxzIDMyNAogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1zaDY0L2RtYS1tYXBwaW5nLmgKaW5kZXggNWVmZTkwNi4uYzdjMGYwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvZG1hLW1hcHBpbmcuaApAQCAtMzUsNiArMzUsMTAgQEAKIAljb25zaXN0ZW50X2ZyZWUoTlVMTCwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwogfQogCisjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKKyNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKKyNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkgKDEpCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKIAkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKQEAgLTQ5LDcgKzUzLDcgQEAKIAlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKIAkJcmV0dXJuIHZpcnRfdG9fYnVzKHB0cik7CiAjZW5kaWYKLQlkbWFfY2FjaGVfc3luYyhwdHIsIHNpemUsIGRpcik7CisJZG1hX2NhY2hlX3N5bmMoZGV2LCBwdHIsIHNpemUsIGRpcik7CiAKIAlyZXR1cm4gdmlydF90b19idXMocHRyKTsKIH0KQEAgLTYzLDcgKzY3LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7CiAjaWYgIWRlZmluZWQoQ09ORklHX1BDSSkgfHwgZGVmaW5lZChDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UKQotCQlkbWFfY2FjaGVfc3luYyhwYWdlX2FkZHJlc3Moc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQsCisJCWRtYV9jYWNoZV9zeW5jKGRldiwgcGFnZV9hZGRyZXNzKHNnW2ldLnBhZ2UpICsgc2dbaV0ub2Zmc2V0LAogCQkJICAgICAgIHNnW2ldLmxlbmd0aCwgZGlyKTsKICNlbmRpZgogCQlzZ1tpXS5kbWFfYWRkcmVzcyA9IHBhZ2VfdG9fcGh5cyhzZ1tpXS5wYWdlKSArIHNnW2ldLm9mZnNldDsKQEAgLTk0LDcgKzk4LDcgQEAKIAlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKIAkJcmV0dXJuOwogI2VuZGlmCi0JZG1hX2NhY2hlX3N5bmMoYnVzX3RvX3ZpcnQoZG1hX2hhbmRsZSksIHNpemUsIGRpcik7CisJZG1hX2NhY2hlX3N5bmMoZGV2LCBidXNfdG9fdmlydChkbWFfaGFuZGxlKSwgc2l6ZSwgZGlyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xMDYsNyArMTEwLDcgQEAKIAlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKIAkJcmV0dXJuOwogI2VuZGlmCi0JZG1hX2NhY2hlX3N5bmMoYnVzX3RvX3ZpcnQoZG1hX2hhbmRsZSkgKyBvZmZzZXQsIHNpemUsIGRpcik7CisJZG1hX2NhY2hlX3N5bmMoZGV2LCBidXNfdG9fdmlydChkbWFfaGFuZGxlKSArIG9mZnNldCwgc2l6ZSwgZGlyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKQEAgLTExNiw3ICsxMjAsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IG5lbGVtczsgaSsrKSB7CiAjaWYgIWRlZmluZWQoQ09ORklHX1BDSSkgfHwgZGVmaW5lZChDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UKQotCQlkbWFfY2FjaGVfc3luYyhwYWdlX2FkZHJlc3Moc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQsCisJCWRtYV9jYWNoZV9zeW5jKGRldiwgcGFnZV9hZGRyZXNzKHNnW2ldLnBhZ2UpICsgc2dbaV0ub2Zmc2V0LAogCQkJICAgICAgIHNnW2ldLmxlbmd0aCwgZGlyKTsKICNlbmRpZgogCQlzZ1tpXS5kbWFfYWRkcmVzcyA9IHBhZ2VfdG9fcGh5cyhzZ1tpXS5wYWdlKSArIHNnW2ldLm9mZnNldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvaXJxX3JlZ3MuaCBiL2luY2x1ZGUvYXNtLXNoNjQvaXJxX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGQ5YzBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9pcnFfcmVncy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcnFfcmVncy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLXNoNjQva2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjZTFiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQva2RlYnVnLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2tkZWJ1Zy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1zaDY0L3BnYWxsb2MuaAppbmRleCBjYjgwM2U1Li42ZWNjYWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3BnYWxsb2MuaApAQCAtMTQsMTMgKzE0LDkgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jZGVmaW5lIHBnZF9xdWlja2xpc3QgKGN1cnJlbnRfY3B1X2RhdGEucGdkX3F1aWNrKQotI2RlZmluZSBwbWRfcXVpY2tsaXN0IChjdXJyZW50X2NwdV9kYXRhLnBtZF9xdWljaykKLSNkZWZpbmUgcHRlX3F1aWNrbGlzdCAoY3VycmVudF9jcHVfZGF0YS5wdGVfcXVpY2spCi0jZGVmaW5lIHBndGFibGVfY2FjaGVfc2l6ZSAoY3VycmVudF9jcHVfZGF0YS5wZ3RhYmxlX2NhY2hlX3N6KQorI2luY2x1ZGUgPGxpbnV4L3F1aWNrbGlzdC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UpCiB7CkBAIC00NSw4NCArNDEsMzcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIHBnZF90ICpnZXRfcGdkX2Zhc3Qodm9pZCkKK3N0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQl1bnNpZ25lZCBsb25nICpyZXQ7Ci0KLQlpZiAoKHJldCA9IHBnZF9xdWlja2xpc3QpICE9IE5VTEwpIHsKLQkJcGdkX3F1aWNrbGlzdCA9ICh1bnNpZ25lZCBsb25nICopKCpyZXQpOwotCQlyZXRbMF0gPSAwOwotCQlwZ3RhYmxlX2NhY2hlX3NpemUtLTsKLQl9IGVsc2UKLQkJcmV0ID0gKHVuc2lnbmVkIGxvbmcgKilnZXRfcGdkX3Nsb3coKTsKLQotCWlmIChyZXQpIHsKLQkJbWVtc2V0KHJldCwgMCwgVVNFUl9QVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpKTsKLQl9Ci0JcmV0dXJuIChwZ2RfdCAqKXJldDsKKwlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKDAsIEdGUF9LRVJORUwsIE5VTEwpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wZ2RfZmFzdChwZ2RfdCAqcGdkKQorc3RhdGljIGlubGluZSB2b2lkIHBnZF9mcmVlKHBnZF90ICpwZ2QpCiB7Ci0JKih1bnNpZ25lZCBsb25nICopcGdkID0gKHVuc2lnbmVkIGxvbmcpIHBnZF9xdWlja2xpc3Q7Ci0JcGdkX3F1aWNrbGlzdCA9ICh1bnNpZ25lZCBsb25nICopIHBnZDsKLQlwZ3RhYmxlX2NhY2hlX3NpemUrKzsKKwlxdWlja2xpc3RfZnJlZSgwLCBOVUxMLCBwZ2QpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wZ2Rfc2xvdyhwZ2RfdCAqcGdkKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlrZnJlZSgodm9pZCAqKXBnZCk7Ci19Ci0KLWV4dGVybiBwdGVfdCAqZ2V0X3B0ZV9zbG93KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzc19wcmVhZGp1c3RlZCk7Ci1leHRlcm4gcHRlX3QgKmdldF9wdGVfa2VybmVsX3Nsb3cocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzX3ByZWFkanVzdGVkKTsKLQotc3RhdGljIGlubGluZSBwdGVfdCAqZ2V0X3B0ZV9mYXN0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyAqcmV0OwotCi0JaWYoKHJldCA9ICh1bnNpZ25lZCBsb25nICopcHRlX3F1aWNrbGlzdCkgIT0gTlVMTCkgewotCQlwdGVfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKikoKnJldCk7Ci0JCXJldFswXSA9IHJldFsxXTsKLQkJcGd0YWJsZV9jYWNoZV9zaXplLS07Ci0JfQotCXJldHVybiAocHRlX3QgKilyZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3B0ZV9mYXN0KHB0ZV90ICpwdGUpCi17Ci0JKih1bnNpZ25lZCBsb25nICopcHRlID0gKHVuc2lnbmVkIGxvbmcpIHB0ZV9xdWlja2xpc3Q7Ci0JcHRlX3F1aWNrbGlzdCA9ICh1bnNpZ25lZCBsb25nICopIHB0ZTsKLQlwZ3RhYmxlX2NhY2hlX3NpemUrKzsKKwl2b2lkICpwZyA9IHF1aWNrbGlzdF9hbGxvYygwLCBHRlBfS0VSTkVMLCBOVUxMKTsKKwlyZXR1cm4gcGcgPyB2aXJ0X3RvX3BhZ2UocGcpIDogTlVMTDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChwdGVfdCAqcHRlKQogewotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwdGUpOworCXF1aWNrbGlzdF9mcmVlKDAsIE5VTEwsIHB0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgcGFnZSAqcHRlKQogewotCV9fZnJlZV9wYWdlKHB0ZSk7CisJcXVpY2tsaXN0X2ZyZWVfcGFnZSgwLCBOVUxMLCBwdGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXB0ZV90ICpwdGU7Ci0KLQlwdGUgPSAocHRlX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVHxfX0dGUF9aRVJPKTsKLQotCXJldHVybiBwdGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgcGFnZSAqcHRlOwotCi0JcHRlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTywgMCk7Ci0KLQlyZXR1cm4gcHRlOworCXJldHVybiBxdWlja2xpc3RfYWxsb2MoMCwgR0ZQX0tFUk5FTCwgTlVMTCk7CiB9CiAKICNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLHB0ZSkgdGxiX3JlbW92ZV9wYWdlKCh0bGIpLChwdGUpKQpAQCAtMTQyLDMxICs5MSwyMyBAQAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TSDY0X1BHVEFCTEVfM19MRVZFTCkKIAotc3RhdGljIF9faW5saW5lX18gcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlwbWRfdCAqcG1kOwotCXBtZCA9IChwbWRfdCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTyk7Ci0JcmV0dXJuIHBtZDsKKwlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKDAsIEdGUF9LRVJORUwsIE5VTEwpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHBtZF9mcmVlKHBtZF90ICpwbWQpCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2ZyZWUocG1kX3QgKnBtZCkKIHsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBtZCk7CisJcXVpY2tsaXN0X2ZyZWUoMCwgTlVMTCwgcG1kKTsKIH0KIAotI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBnZCwgcG1kKSBwZ2Rfc2V0KHBnZCwgcG1kKQorI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBnZCwgcG1kKQlwZ2Rfc2V0KHBnZCwgcG1kKQogI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIscG1kKQkJcG1kX2ZyZWUocG1kKQogCiAjZWxzZQogI2Vycm9yICJObyBkZWZpbmVkIHBhZ2UgdGFibGUgc2l6ZSIKICNlbmRpZgogCi0jZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHBnZF9mcmVlKHBnZCkJCWZyZWVfcGdkX3Nsb3cocGdkKQotI2RlZmluZSBwZ2RfYWxsb2MobW0pCQlnZXRfcGdkX2Zhc3QoKQotCi1leHRlcm4gaW50IGRvX2NoZWNrX3BndF9jYWNoZShpbnQsIGludCk7Ci0KICNkZWZpbmUgcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwdGUpIFwKIAlzZXRfcG1kKHBtZCwgX19wbWQoX1BBR0VfVEFCTEUgKyAodW5zaWduZWQgbG9uZykgKHB0ZSkpKQogCkBAIC0xNzYsNCArMTE3LDkgQEAKIAlzZXRfcG1kKHBtZCwgX19wbWQoX1BBR0VfVEFCTEUgKyAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzIChwdGUpKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19wZ3RfY2FjaGUodm9pZCkKK3sKKwlxdWlja2xpc3RfdHJpbSgwLCBOVUxMLCAyNSwgMTYpOworfQorCiAjZW5kaWYgLyogX19BU01fU0g2NF9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc2g2NC9wZ3RhYmxlLmgKaW5kZXggNmI5N2M0Yy4uYjg3NTQ4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9wZ3RhYmxlLmgKQEAgLTQ4NSwxMCArNDg1LDYgQEAKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKIAkJcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKIAotI2RlZmluZSBNS19JT1NQQUNFX1BGTihzcGFjZSwgcGZuKQkocGZuKQotI2RlZmluZSBHRVRfSU9TUEFDRShwZm4pCQkwCi0jZGVmaW5lIEdFVF9QRk4ocGZuKQkJCShwZm4pCi0KICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3BvbGwuaCBiL2luY2x1ZGUvYXNtLXNoNjQvcG9sbC5oCmluZGV4IDNhNmNiYWQuLmNhMjk1MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvcG9sbC5oCkBAIC0xLDM3ICsxLDggQEAKICNpZm5kZWYgX19BU01fU0g2NF9QT0xMX0gKICNkZWZpbmUgX19BU01fU0g2NF9QT0xMX0gKIAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIGluY2x1ZGUvYXNtLXNoNjQvcG9sbC5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKLSAqCi0gKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wb2xsLmg+CiAKLS8qIFRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgaUJDUzIgKi8KLSNkZWZpbmUgUE9MTElOCQkweDAwMDEKLSNkZWZpbmUgUE9MTFBSSQkJMHgwMDAyCi0jZGVmaW5lIFBPTExPVVQJCTB4MDAwNAotI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKLSNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCi0jZGVmaW5lIFBPTExOVkFMCTB4MDAyMAotCi0vKiBUaGUgcmVzdCBzZWVtIHRvIGJlIG1vcmUtb3ItbGVzcyBub25zdGFuZGFyZC4gQ2hlY2sgdGhlbSEgKi8KLSNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKLSNkZWZpbmUgUE9MTFJEQkFORAkweDAwODAKLSNkZWZpbmUgUE9MTFdSTk9STQkweDAxMDAKLSNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKLSNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCi0jZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKLQotc3RydWN0IHBvbGxmZCB7Ci0JaW50IGZkOwotCXNob3J0IGV2ZW50czsKLQlzaG9ydCByZXZlbnRzOwotfTsKKyN1bmRlZiBQT0xMUkVNT1ZFCiAKICNlbmRpZiAvKiBfX0FTTV9TSDY0X1BPTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9zY2kuaCBiL2luY2x1ZGUvYXNtLXNoNjQvc2NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzYzU2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc2NpLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1zaC9zY2kuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zaDY0L3N5c3RlbS5oCmluZGV4IGIxNTk4YzIuLjVmZjk0NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9zeXN0ZW0uaApAQCAtNDMsOCArNDMsNiBAQAogCiAjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQogCi0jZGVmaW5lIHRhcyhwdHIpICh4Y2hnKChwdHIpLCAxKSkKLQogZXh0ZXJuIHZvaWQgX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOwogCiAjZGVmaW5lIG1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jbyI6IDogOiJtZW1vcnkiKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tc2g2NC90aHJlYWRfaW5mby5oCmluZGV4IDFmODI1Y2IuLmY2ZDUxMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3RocmVhZF9pbmZvLmgKQEAgLTc4LDcgKzc4LDEzIEBACiAjZGVmaW5lIFRJRl9TSUdQRU5ESU5HCQkyCS8qIHNpZ25hbCBwZW5kaW5nICovCiAjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTQKKyNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk1CS8qIFJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsICovCiAKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX1RSQUNFKQorI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxIDw8IFRJRl9TSUdQRU5ESU5HKQorI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMSA8PCBUSUZfTkVFRF9SRVNDSEVEKQorI2RlZmluZSBfVElGX01FTURJRQkJKDEgPDwgVElGX01FTURJRSkKKyNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmgKaW5kZXggMWYzOGE3YS4uZWEzYWRjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3VuaXN0ZC5oCkBAIC05LDE0ICs5LDE0IEBACiAgKiBpbmNsdWRlL2FzbS1zaDY0L3VuaXN0ZC5oCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxICBQYW9sbyBBbGJlcmVsbGkKLSAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNyBQYXVsIE11bmR0CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgIFNlYW4gTWNHb29nYW4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5c3RlbSBjYWxsIG51bWJlcnMuCiAgKgogICovCiAKLSNkZWZpbmUgX19OUl9zZXR1cAkJICAwCS8qIHVzZWQgb25seSBieSBpbml0LCB0byBnZXQgc3lzdGVtIGdvaW5nICovCisjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsCSAgMAogI2RlZmluZSBfX05SX2V4aXQJCSAgMQogI2RlZmluZSBfX05SX2ZvcmsJCSAgMgogI2RlZmluZSBfX05SX3JlYWQJCSAgMwpAQCAtMTk2LDggKzE5Niw4IEBACiAjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0CTE3NwogI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbwkxNzgKICNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kCTE3OQotI2RlZmluZSBfX05SX3ByZWFkCQkxODAKLSNkZWZpbmUgX19OUl9wd3JpdGUJCTE4MQorI2RlZmluZSBfX05SX3ByZWFkNjQJCTE4MAorI2RlZmluZSBfX05SX3B3cml0ZTY0CQkxODEKICNkZWZpbmUgX19OUl9jaG93bgkJMTgyCiAjZGVmaW5lIF9fTlJfZ2V0Y3dkCQkxODMKICNkZWZpbmUgX19OUl9jYXBnZXQJCTE4NApAQCAtMzQzLDEwICszNDMsNDEgQEAKICNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQJMzE4CiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJMzE5CiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaAkzMjAKKy8qIDMyMSBpcyB1bnVzZWQgKi8KKyNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzCTMyMgorI2RlZmluZSBfX05SX29wZW5hdAkJMzIzCisjZGVmaW5lIF9fTlJfbWtkaXJhdAkJMzI0CisjZGVmaW5lIF9fTlJfbWtub2RhdAkJMzI1CisjZGVmaW5lIF9fTlJfZmNob3duYXQJCTMyNgorI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJMzI3CisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkzMjgKKyNkZWZpbmUgX19OUl91bmxpbmthdAkJMzI5CisjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTMzMAorI2RlZmluZSBfX05SX2xpbmthdAkJMzMxCisjZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkzMzIKKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkzMzMKKyNkZWZpbmUgX19OUl9mY2htb2RhdAkJMzM0CisjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkzMzUKKyNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMzM2CisjZGVmaW5lIF9fTlJfcHBvbGwJCTMzNworI2RlZmluZSBfX05SX3Vuc2hhcmUJCTMzOAorI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMzkKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzQwCisjZGVmaW5lIF9fTlJfc3BsaWNlCQkzNDEKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMzQyCisjZGVmaW5lIF9fTlJfdGVlCQkzNDMKKyNkZWZpbmUgX19OUl92bXNwbGljZQkJMzQ0CisjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzQ1CisjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzNDYKKyNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzNDcKKyNkZWZpbmUgX19OUl91dGltZW5zYXQJCTM0OAorI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzNDkKKyNkZWZpbmUgX19OUl90aW1lcmZkCQkzNTAKKyNkZWZpbmUgX19OUl9ldmVudGZkCQkzNTEKIAotI2lmZGVmIF9fS0VSTkVMX18gCisjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIE5SX3N5c2NhbGxzIDMyMQorI2RlZmluZSBOUl9zeXNjYWxscyAzNTIKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9hdG9taWMuaAppbmRleCA3MzFmYTU2Li5iZGNhNTQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9hdG9taWMuaApAQCAtMiw2ICsyLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQogICogQ29weXJpZ2h0IChDKSAyMDAwIEFudG9uIEJsYW5jaGFyZCAoYW50b25AbGludXhjYXJlLmNvbS5hdSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBLeWxlIE1jTWFydGluIChreWxlQHBhcmlzYy1saW51eC5vcmcpCiAgKgogICogQWRkaXRpb25zIGJ5IEtlaXRoIE0gV2Vzb2xvd3NraSAod2Vzb2xvd3NAZm9vYmF6Y28ub3JnKSBiYXNlZAogICogb24gYXNtLXBhcmlzYy9hdG9taWMuaCBDb3B5cmlnaHQgKEMpIDIwMDAgUGhpbGlwcCBSdW1wZiA8cHJ1bXBmQHR1eC5vcmc+LgpAQCAtMTAsMTEgKzExLDQ4IEBACiAjaWZuZGVmIF9fQVJDSF9TUEFSQ19BVE9NSUNfXwogI2RlZmluZSBfX0FSQ0hfU1BBUkNfQVRPTUlDX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIHR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKy8qIEVtdWxhdGUgY21weGNoZygpIHRoZSBzYW1lIHdheSB3ZSBlbXVsYXRlIGF0b21pY3MsCisgKiBieSBoYXNoaW5nIHRoZSBvYmplY3QgYWRkcmVzcyBhbmQgaW5kZXhpbmcgaW50byBhbiBhcnJheQorICogb2Ygc3BpbmxvY2tzIHRvIGdldCBhIGJpdCBvZiBwZXJmb3JtYW5jZS4uLgorICoKKyAqIFNlZSBhcmNoL3NwYXJjL2xpYi9hdG9taWMzMi5jIGZvciBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDcmliYmVkIGZyb20gPGFzbS1wYXJpc2MvYXRvbWljLmg+CisgKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ01QWENIRwkxCisKKy8qIGJ1ZyBjYXRjaGVyIGZvciB3aGVuIHVuc3VwcG9ydGVkIHNpemUgaXMgdXNlZCAtIHdvbid0IGxpbmsgKi8KK2V4dGVybiB2b2lkIF9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKKy8qIHdlIG9ubHkgbmVlZCB0byBzdXBwb3J0IGNtcHhjaGcgb2YgYSB1MzIgb24gc3BhcmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fY21weGNoZ191MzIodm9sYXRpbGUgdTMyICptLCB1MzIgb2xkLCB1MzIgbmV3Xyk7CisKKy8qIGRvbid0IHdvcnJ5Li4ub3B0aW1pemVyIHdpbGwgZ2V0IHJpZCBvZiBtb3N0IG9mIHRoaXMgKi8KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ld18sIGludCBzaXplKQoreworCXN3aXRjaChzaXplKSB7CisJY2FzZSA0OgorCQlyZXR1cm4gX19jbXB4Y2hnX3UzMigodTMyICopcHRyLCAodTMyKW9sZCwgKHUzMiluZXdfKTsKKwlkZWZhdWx0OgorCQlfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBvbGQ7Cit9CisKKyNkZWZpbmUgY21weGNoZyhwdHIsbyxuKSAoewkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX29fID0gKG8pOwkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfbl8gPSAobik7CQkJCQlcCisJKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCVwKKwkJCSh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOwkJXAorfSkKKwogI2RlZmluZSBBVE9NSUNfSU5JVChpKSAgeyAoaSkgfQogCiBleHRlcm4gaW50IF9fYXRvbWljX2FkZF9yZXR1cm4oaW50LCBhdG9taWNfdCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tc3BhcmMva2RlYnVnLmgKaW5kZXggZmJhOTI0OC4uNjMxZjE1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMva2RlYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMva2RlYnVnLmgKQEAgLTU4LDYgKzU4LDEwIEBACiAJICAgICAgIHNwX2VudGVyX2RlYnVnZ2VyKCk7IFwKIAkJICAgICAgIH0gd2hpbGUoMCkKIAorZW51bSBkaWVfdmFsIHsKKwlESUVfVU5VU0VELAorfTsKKwogI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwogCiAvKiBTb21lIG5pY2Ugb2Zmc2V0IGRlZmluZXMgZm9yIGFzc2VtYmxlciBjb2RlLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcG9sbC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcG9sbC5oCmluZGV4IDI2ZjEzZmIuLjA5MWQzYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wb2xsLmgKQEAgLTEsMjQgKzEsMTIgQEAKICNpZm5kZWYgX19TUEFSQ19QT0xMX0gKICNkZWZpbmUgX19TUEFSQ19QT0xMX0gKIAotI2RlZmluZSBQT0xMSU4JCSAgMQotI2RlZmluZSBQT0xMUFJJCQkgIDIKLSNkZWZpbmUgUE9MTE9VVAkJICA0Ci0jZGVmaW5lIFBPTExFUlIJCSAgOAotI2RlZmluZSBQT0xMSFVQCQkgMTYKLSNkZWZpbmUgUE9MTE5WQUwJIDMyCi0jZGVmaW5lIFBPTExSRE5PUk0JIDY0CiAjZGVmaW5lIFBPTExXUk5PUk0JUE9MTE9VVAotI2RlZmluZSBQT0xMUkRCQU5ECTEyOAogI2RlZmluZSBQT0xMV1JCQU5ECTI1NgogI2RlZmluZSBQT0xMTVNHCQk1MTIKICNkZWZpbmUgUE9MTFJFTU9WRQkxMDI0CiAjZGVmaW5lIFBPTExSREhVUCAgICAgICAyMDQ4CiAKLXN0cnVjdCBwb2xsZmQgewotCWludCBmZDsKLQlzaG9ydCBldmVudHM7Ci0Jc2hvcnQgcmV2ZW50czsKLX07CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9sbC5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NtcC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvc21wLmgKaW5kZXggYjlkYTlhNi4uYjNmNDkyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc21wLmgKQEAgLTE2NSw2ICsxNjUsNyBAQAogCiAjZWxzZSAvKiBTTVAgKi8KIAorI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAogI2RlZmluZSBzbXBfc2V0dXBfY3B1X3Bvc3NpYmxlX21hcCgpIGRvIHsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qICEoU01QKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaAppbmRleCAxMDBjM2VhLi44YjRlMjNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGFzbS9wc3IuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTI0MSw3ICsyNDIsNiBAQAogfQogCiAjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQotI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKIAogZXh0ZXJuIHZvaWQgX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCmluZGV4IGU0M2VkMWQuLjY0NDcxYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCkBAIC0zMjYsOCArMzI2LDEyIEBACiAjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzA3CiAjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMDgKICNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMDkKKyNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxMAorI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTEKKyNkZWZpbmUgX19OUl90aW1lcmZkCQkzMTIKKyNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTMKIAotI2RlZmluZSBOUl9TWVNDQUxMUwkJMzEwCisjZGVmaW5lIE5SX1NZU0NBTExTCQkzMTQKIAogI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvS2J1aWxkIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9LYnVpbGQKaW5kZXggYTdmNDQ0MC4uODU0ZmQzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9LYnVpbGQKQEAgLTgsNyArOCw2IEBACiBoZWFkZXIteSArPSBhc2kuaAogaGVhZGVyLXkgKz0gYmJjLmgKIGhlYWRlci15ICs9IGJwcC5oCi1oZWFkZXIteSArPSBjb25zdC5oCiBoZWFkZXIteSArPSBkaXNwbGF5N3NlZy5oCiBoZWFkZXIteSArPSBlbnZjdHJsLmgKIGhlYWRlci15ICs9IGlwYy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hdG9taWMuaAppbmRleCAyZjBiZWMyLi4zZmI0ZTFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXRvbWljLmgKQEAgLTksNiArOSw3IEBACiAjZGVmaW5lIF9fQVJDSF9TUEFSQzY0X0FUT01JQ19fCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogdHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKIHR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgX19zNjQgY291bnRlcjsgfSBhdG9taWM2NF90OwpAQCAtNzAsMjUgKzcxLDQ3IEBACiAjZGVmaW5lIGF0b21pY19hZGRfbmVnYXRpdmUoaSwgdikgKGF0b21pY19hZGRfcmV0KGksIHYpIDwgMCkKICNkZWZpbmUgYXRvbWljNjRfYWRkX25lZ2F0aXZlKGksIHYpIChhdG9taWM2NF9hZGRfcmV0KGksIHYpIDwgMCkKIAotI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoKGludCljbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQorI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKICNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCiAKLSNkZWZpbmUgYXRvbWljX2FkZF91bmxlc3ModiwgYSwgdSkJCQkJXAotKHsJCQkJCQkJCVwKLQlpbnQgYywgb2xkOwkJCQkJCVwKLQljID0gYXRvbWljX3JlYWQodik7CQkJCQlcCi0JZm9yICg7OykgewkJCQkJCVwKLQkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkJCQkJXAotCQkJYnJlYWs7CQkJCQlcCi0JCW9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7CQlcCi0JCWlmIChsaWtlbHkob2xkID09IGMpKQkJCQlcCi0JCQlicmVhazsJCQkJCVwKLQkJYyA9IG9sZDsJCQkJCVwKLQl9CQkJCQkJCVwKLQlsaWtlbHkoYyAhPSAodSkpOwkJCQkJXAotfSkKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQoreworCWludCBjLCBvbGQ7CisJYyA9IGF0b21pY19yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKICNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCiAKKyNkZWZpbmUgYXRvbWljNjRfY21weGNoZyh2LCBvLCBuKSBcCisJKChfX3R5cGVvZl9fKCh2KS0+Y291bnRlcikpY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKKyNkZWZpbmUgYXRvbWljNjRfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKKworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgbG9uZyBhLCBsb25nIHUpCit7CisJbG9uZyBjLCBvbGQ7CisJYyA9IGF0b21pYzY0X3JlYWQodik7CisJZm9yICg7OykgeworCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQorCQkJYnJlYWs7CisJCW9sZCA9IGF0b21pYzY0X2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQorCisjZGVmaW5lIGF0b21pYzY0X2luY19ub3RfemVybyh2KSBhdG9taWM2NF9hZGRfdW5sZXNzKCh2KSwgMSwgMCkKKwogLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgKi8KICNpZmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQltZW1iYXJfc3RvcmVsb2FkX2xvYWRsb2FkKCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2J1Z3MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYnVncy5oCmluZGV4IDEyMDQyMmYuLmJmMzlkODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYnVncy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYnVncy5oCkBAIC0xLDkgKzEsOCBAQAotLyogICRJZDogYnVncy5oLHYgMS4xIDE5OTYvMTIvMjYgMTM6MjU6MjAgZGF2ZW0gRXhwICQKLSAqICBpbmNsdWRlL2FzbS1zcGFyYzY0L2J1Z3MuaDogIFNwYXJjIHByb2JlcyBmb3IgdmFyaW91cyBidWdzLgorLyogYnVncy5oOiBTcGFyYzY0IHByb2JlcyBmb3IgdmFyaW91cyBidWdzLgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogQ29weXJpZ2h0IChDKSAxOTk2LCAyMDA3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqLwotCisjaW5jbHVkZSA8YXNtL3NzdGF0ZS5oPgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CiAKQEAgLTEyLDQgKzExLDUgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogCWNwdV9kYXRhKDApLnVkZWxheV92YWwgPSBsb29wc19wZXJfamlmZnk7CiAjZW5kaWYKKwlzc3RhdGVfcnVubmluZygpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9jb25zdC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jb25zdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWQ5MDJiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY29uc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qIGNvbnN0Lmg6IE1hY3JvcyBmb3IgZGVhbGluZyB3aXRoIGNvbnN0YW50cy4gICovCi0KLSNpZm5kZWYgX1NQQVJDNjRfQ09OU1RfSAotI2RlZmluZSBfU1BBUkM2NF9DT05TVF9ICi0KLS8qIFNvbWUgY29uc3RhbnQgbWFjcm9zIGFyZSB1c2VkIGluIGJvdGggYXNzZW1ibGVyIGFuZAotICogQyBjb2RlLiAgVGhlcmVmb3JlIHdlIGNhbm5vdCBhbm5vdGF0ZSB0aGVtIGFsd2F5cyB3aXRoCi0gKiAnVUwnIGFuZCBvdGhlciB0eXBlIHNwZWNpZmljZXJzIHVuaWxhdGVyYWxseS4gIFdlCi0gKiB1c2UgdGhlIGZvbGxvd2luZyBtYWNyb3MgdG8gZGVhbCB3aXRoIHRoaXMuCi0gKi8KLQotI2lmZGVmIF9fQVNTRU1CTFlfXwotI2RlZmluZSBfQUMoWCxZKQlYCi0jZWxzZQotI2RlZmluZSBfQUMoWCxZKQkoWCMjWSkKLSNlbmRpZgotCi0KLSNlbmRpZiAvKiAhKF9TUEFSQzY0X0NPTlNUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NwdWRhdGEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oCmluZGV4IGU4OTkyMmQuLjAzYzM4NWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oCkBAIC0xNywxMSArMTcsMTEgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAkvKiBEY2FjaGUgbGluZSAxICovCiAJdW5zaWduZWQgaW50CV9fc29mdGlycV9wZW5kaW5nOyAvKiBtdXN0IGJlIDFzdCwgc2VlIHJ0cmFwLlMgKi8KLQl1bnNpZ25lZCBpbnQJX19wYWQwXzE7Ci0JdW5zaWduZWQgaW50CV9fcGFkMF8yOwotCXVuc2lnbmVkIGludAlfX3BhZDE7CisJdW5zaWduZWQgaW50CV9fcGFkMDsKIAl1bnNpZ25lZCBsb25nCWNsb2NrX3RpY2s7CS8qICV0aWNrJ3MgcGVyIHNlY29uZCAqLwogCXVuc2lnbmVkIGxvbmcJdWRlbGF5X3ZhbDsKKwl1bnNpZ25lZCBpbnQJX19wYWQxOworCXVuc2lnbmVkIGludAlfX3BhZDI7CiAKIAkvKiBEY2FjaGUgbGluZSAyLCByYXJlbHkgdXNlZCAqLwogCXVuc2lnbmVkIGludAlkY2FjaGVfc2l6ZTsKQEAgLTMwLDggKzMwLDggQEAKIAl1bnNpZ25lZCBpbnQJaWNhY2hlX2xpbmVfc2l6ZTsKIAl1bnNpZ25lZCBpbnQJZWNhY2hlX3NpemU7CiAJdW5zaWduZWQgaW50CWVjYWNoZV9saW5lX3NpemU7CisJaW50CQljb3JlX2lkOwogCXVuc2lnbmVkIGludAlfX3BhZDM7Ci0JdW5zaWduZWQgaW50CV9fcGFkNDsKIH0gY3B1aW5mb19zcGFyYzsKIAogREVDTEFSRV9QRVJfQ1BVKGNwdWluZm9fc3BhcmMsIF9fY3B1X2RhdGEpOwpAQCAtNzYsMTIgKzc2LDE4IEBACiAKIC8qIERjYWNoZSBsaW5lIDg6IElSUSB3b3JrIGxpc3QsIGFuZCBrZWVwIHRyYXBfYmxvY2sgYSBwb3dlci1vZi0yIGluIHNpemUuICAqLwogCXVuc2lnbmVkIGludAkJaXJxX3dvcmtsaXN0OwotCXVuc2lnbmVkIGludAkJX19wYWQxOwotCXVuc2lnbmVkIGxvbmcJCV9fcGFkMlszXTsKKwl1bnNpZ25lZCBpbnQJCWNwdV9tb25kb19xbWFzazsKKwl1bnNpZ25lZCBpbnQJCWRldl9tb25kb19xbWFzazsKKwl1bnNpZ25lZCBpbnQJCXJlc3VtX3FtYXNrOworCXVuc2lnbmVkIGludAkJbm9ucmVzdW1fcW1hc2s7CisJdW5zaWduZWQgaW50CQlfX3BhZDJbM107CiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSk7CiBleHRlcm4gc3RydWN0IHRyYXBfcGVyX2NwdSB0cmFwX2Jsb2NrW05SX0NQVVNdOwogZXh0ZXJuIHZvaWQgaW5pdF9jdXJfY3B1X3RyYXAoc3RydWN0IHRocmVhZF9pbmZvICopOwogZXh0ZXJuIHZvaWQgc2V0dXBfdGJhKHZvaWQpOworZXh0ZXJuIGludCBuY3B1c19wcm9iZWQ7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJlYWxfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOwogCiBzdHJ1Y3QgY3B1aWRfcGF0Y2hfZW50cnkgewogCXVuc2lnbmVkIGludAlhZGRyOwpAQCAtMTIyLDYgKzEyOCwxMCBAQAogI2RlZmluZSBUUkFQX1BFUl9DUFVfVFNCX0hVR0UJCTB4ZDAKICNkZWZpbmUgVFJBUF9QRVJfQ1BVX1RTQl9IVUdFX1RFTVAJMHhkOAogI2RlZmluZSBUUkFQX1BFUl9DUFVfSVJRX1dPUktMSVNUCTB4ZTAKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX0NQVV9NT05ET19RTUFTSwkweGU0CisjZGVmaW5lIFRSQVBfUEVSX0NQVV9ERVZfTU9ORE9fUU1BU0sJMHhlOAorI2RlZmluZSBUUkFQX1BFUl9DUFVfUkVTVU1fUU1BU0sJMHhlYworI2RlZmluZSBUUkFQX1BFUl9DUFVfTk9OUkVTVU1fUU1BU0sJMHhmMAogCiAjZGVmaW5lIFRSQVBfQkxPQ0tfU1pfU0hJRlQJCTgKIApAQCAtMTkyLDcgKzIwMiw3IEBACiAgKiB0aGUgY2FsY3VsYXRpb25zIGRvbmUgYnkgdGhlIG1hY3JvIG1pZC1zdHJlYW0uCiAgKi8KICNkZWZpbmUgTE9BRF9QRVJfQ1BVX0JBU0UoREVTVCwgVEhSLCBSRUcxLCBSRUcyLCBSRUczKQlcCi0JbGR1YglbVEhSICsgVElfQ1BVXSwgUkVHMTsJCQlcCisJbGR1aAlbVEhSICsgVElfQ1BVXSwgUkVHMTsJCQlcCiAJc2V0aGkJJWhpKF9fcGVyX2NwdV9zaGlmdCksIFJFRzM7CQlcCiAJc2V0aGkJJWhpKF9fcGVyX2NwdV9iYXNlKSwgUkVHMjsJCVwKIAlsZHgJW1JFRzMgKyAlbG8oX19wZXJfY3B1X3NoaWZ0KV0sIFJFRzM7CVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLW1hcHBpbmcuaAppbmRleCAyZjg1OGEyLi45MzI5NDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEtbWFwcGluZy5oCkBAIC0xMCwxMCArMTAsMTMgQEAKIC8qIG5lZWQgc3RydWN0IHBhZ2UgZGVmaW5pdGlvbnMgKi8KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCisjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgorCiBzdGF0aWMgaW5saW5lIGludAogZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSAmJgorCSAgICAgICBkZXYtPmJ1cyAhPSAmZWJ1c19idXNfdHlwZSk7CiAKIAlyZXR1cm4gcGNpX2RtYV9zdXBwb3J0ZWQodG9fcGNpX2RldihkZXYpLCBtYXNrKTsKIH0KQEAgLTIxLDcgKzI0LDggQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCiB7Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlICYmCisJICAgICAgIGRldi0+YnVzICE9ICZlYnVzX2J1c190eXBlKTsKIAogCXJldHVybiBwY2lfc2V0X2RtYV9tYXNrKHRvX3BjaV9kZXYoZGV2KSwgZG1hX21hc2spOwogfQpAQCAtMzAsNyArMzQsOCBAQAogZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCiAJCSAgIGdmcF90IGZsYWcpCiB7Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlICYmCisJICAgICAgIGRldi0+YnVzICE9ICZlYnVzX2J1c190eXBlKTsKIAogCXJldHVybiBwY2lfaW9tbXVfb3BzLT5hbGxvY19jb25zaXN0ZW50KHRvX3BjaV9kZXYoZGV2KSwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZyk7CiB9CkBAIC0zOSw3ICs0NCw4IEBACiBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKIAkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKIHsKLQlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CisJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUgJiYKKwkgICAgICAgZGV2LT5idXMgIT0gJmVidXNfYnVzX3R5cGUpOwogCiAJcGNpX2ZyZWVfY29uc2lzdGVudCh0b19wY2lfZGV2KGRldiksIHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlKTsKIH0KQEAgLTQ4LDcgKzU0LDggQEAKIGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlICYmCisJICAgICAgIGRldi0+YnVzICE9ICZlYnVzX2J1c190eXBlKTsKIAogCXJldHVybiBwY2lfbWFwX3NpbmdsZSh0b19wY2lfZGV2KGRldiksIGNwdV9hZGRyLCBzaXplLCAoaW50KWRpcmVjdGlvbik7CiB9CkBAIC01Nyw3ICs2NCw4IEBACiBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCiAJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlICYmCisJICAgICAgIGRldi0+YnVzICE9ICZlYnVzX2J1c190eXBlKTsKIAogCXBjaV91bm1hcF9zaW5nbGUodG9fcGNpX2RldihkZXYpLCBkbWFfYWRkciwgc2l6ZSwgKGludClkaXJlY3Rpb24pOwogfQpAQCAtNjcsNyArNzUsOCBAQAogCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAogCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSAmJgorCSAgICAgICBkZXYtPmJ1cyAhPSAmZWJ1c19idXNfdHlwZSk7CiAKIAlyZXR1cm4gcGNpX21hcF9wYWdlKHRvX3BjaV9kZXYoZGV2KSwgcGFnZSwgb2Zmc2V0LCBzaXplLCAoaW50KWRpcmVjdGlvbik7CiB9CkBAIC03Niw3ICs4NSw4IEBACiBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlICYmCisJICAgICAgIGRldi0+YnVzICE9ICZlYnVzX2J1c190eXBlKTsKIAogCXBjaV91bm1hcF9wYWdlKHRvX3BjaV9kZXYoZGV2KSwgZG1hX2FkZHJlc3MsIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKIH0KQEAgLTg1LDcgKzk1LDggQEAKIGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCiAJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSAmJgorCSAgICAgICBkZXYtPmJ1cyAhPSAmZWJ1c19idXNfdHlwZSk7CiAKIAlyZXR1cm4gcGNpX21hcF9zZyh0b19wY2lfZGV2KGRldiksIHNnLCBuZW50cywgKGludClkaXJlY3Rpb24pOwogfQpAQCAtOTQsNyArMTA1LDggQEAKIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuaHdlbnRyaWVzLAogCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSAmJgorCSAgICAgICBkZXYtPmJ1cyAhPSAmZWJ1c19idXNfdHlwZSk7CiAKIAlwY2lfdW5tYXBfc2codG9fcGNpX2RldihkZXYpLCBzZywgbmh3ZW50cmllcywgKGludClkaXJlY3Rpb24pOwogfQpAQCAtMTAzLDcgKzExNSw4IEBACiBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCiAJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlICYmCisJICAgICAgIGRldi0+YnVzICE9ICZlYnVzX2J1c190eXBlKTsKIAogCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0b19wY2lfZGV2KGRldiksIGRtYV9oYW5kbGUsCiAJCQkJICAgIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKQEAgLTExMyw3ICsxMjYsOCBAQAogZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAogCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSAmJgorCSAgICAgICBkZXYtPmJ1cyAhPSAmZWJ1c19idXNfdHlwZSk7CiAKIAlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UodG9fcGNpX2RldihkZXYpLCBkbWFfaGFuZGxlLAogCQkJCSAgICAgICBzaXplLCAoaW50KWRpcmVjdGlvbik7CkBAIC0xMjMsNyArMTM3LDggQEAKIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAogCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKKwlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSAmJgorCSAgICAgICBkZXYtPmJ1cyAhPSAmZWJ1c19idXNfdHlwZSk7CiAKIAlwY2lfZG1hX3N5bmNfc2dfZm9yX2NwdSh0b19wY2lfZGV2KGRldiksIHNnLCBuZWxlbXMsIChpbnQpZGlyZWN0aW9uKTsKIH0KQEAgLTEzMiw3ICsxNDcsOCBAQAogZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCiAJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOworCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlICYmCisJICAgICAgIGRldi0+YnVzICE9ICZlYnVzX2J1c190eXBlKTsKIAogCXBjaV9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSwgc2csIG5lbGVtcywgKGludClkaXJlY3Rpb24pOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9oeXBlcnZpc29yLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2h5cGVydmlzb3IuaAppbmRleCA2MTJiZjMxLi40YTQzMDc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2h5cGVydmlzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2h5cGVydmlzb3IuaApAQCAtNzMsNiArNzMsOCBAQAogI2RlZmluZSBIVl9FTk9UU1VQUE9SVEVECQkxMyAvKiBGdW5jdGlvbiBub3Qgc3VwcG9ydGVkICAgICAgICovCiAjZGVmaW5lIEhWX0VOT01BUAkJCTE0IC8qIE5vIG1hcHBpbmcgZm91bmQgICAgICAgICAgICAgKi8KICNkZWZpbmUgSFZfRVRPT01BTlkJCQkxNSAvKiBUb28gbWFueSBpdGVtcyBzcGVjaWZpZWQgICAgICovCisjZGVmaW5lIEhWX0VDSEFOTkVMCQkJMTYgLyogSW52YWxpZCBMREMgY2hhbm5lbCAgICAgICAgICAqLworI2RlZmluZSBIVl9FQlVTWQkJCTE3IC8qIFJlc291cmNlIGJ1c3kgICAgICAgICAgICAgICAgKi8KIAogLyogbWFjaF9leGl0KCkKICAqIFRSQVA6CUhWX0ZBU1RfVFJBUApAQCAtOTUsNiArOTcsMTAgQEAKICAqLwogI2RlZmluZSBIVl9GQVNUX01BQ0hfRVhJVAkJMHgwMAogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgc3VuNHZfbWFjaF9leGl0KHVuc2lnbmVkIGxvbmcgZXhpdF9jb3JlKTsKKyNlbmRpZgorCiAvKiBEb21haW4gc2VydmljZXMuICAqLwogCiAvKiBtYWNoX2Rlc2MoKQpAQCAtMTIwLDcgKzEyNiwxMyBAQAogICovCiAjZGVmaW5lIEhWX0ZBU1RfTUFDSF9ERVNDCQkweDAxCiAKLS8qIG1hY2hfZXhpdCgpCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbWFjaF9kZXNjKHVuc2lnbmVkIGxvbmcgYnVmZmVyX3BhLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBidWZfbGVuLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqcmVhbF9idWZfbGVuKTsKKyNlbmRpZgorCisvKiBtYWNoX3NpcigpCiAgKiBUUkFQOglIVl9GQVNUX1RSQVAKICAqIEZVTkNUSU9OOglIVl9GQVNUX01BQ0hfU0lSCiAgKiBFUlJPUlM6CVRoaXMgc2VydmljZSBkb2VzIG5vdCByZXR1cm4uCkBAIC0xMzUsNTMgKzE0Nyw2NiBAQAogICovCiAjZGVmaW5lIEhWX0ZBU1RfTUFDSF9TSVIJCTB4MDIKIAotLyogbWFjaF9zZXRfc29mdF9zdGF0ZSgpCi0gKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX01BQ0hfU0VUX1NPRlRfU1RBVEUKLSAqIEFSRzA6CXNvZnR3YXJlIHN0YXRlCi0gKiBBUkcxOglzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBwb2ludGVyCi0gKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRUlOVkFMCQlzb2Z0d2FyZSBzdGF0ZSBub3QgdmFsaWQgb3Igc29mdHdhcmUgc3RhdGUKLSAqCQkJCWRlc2NyaXB0aW9uIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWQKLSAqCQlFTk9SQUREUglzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBwb2ludGVyIGlzIG5vdCBhCi0gKgkJCQl2YWxpZCByZWFsIGFkZHJlc3MKLSAqCQlFQkFEQUxJR05FRAlzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBpcyBub3QgY29ycmVjdGx5Ci0gKgkJCQlhbGlnbmVkCi0gKgotICogVGhpcyBhbGxvd3MgdGhlIGd1ZXN0IHRvIHJlcG9ydCBpdCdzIHNvZnQgc3RhdGUgdG8gdGhlIGh5cGVydmlzb3IuICBUaGVyZQotICogYXJlIHR3byBwcmltYXJ5IGNvbXBvbmVudHMgdG8gdGhpcyBzdGF0ZS4gIFRoZSBmaXJzdCBwYXJ0IHN0YXRlcyB3aGV0aGVyCi0gKiB0aGUgZ3Vlc3Qgc29mdHdhcmUgaXMgcnVubmluZyBvciBub3QuICBUaGUgc2Vjb25kIGNvbnRhaW50cyBvcHRpb25hbAotICogZGV0YWlscyBzcGVjaWZpYyB0byB0aGUgc29mdHdhcmUuCi0gKgotICogVGhlIHNvZnR3YXJlIHN0YXRlIGFyZ3VtZW50IGlzIGRlZmluZWQgYmVsb3cgaW4gSFZfU09GVF9TVEFURV8qLCBhbmQKLSAqIGluZGljYXRlcyB3aGV0aGVyIHRoZSBndWVzdCBpcyBvcGVyYXRpbmcgbm9ybWFsbHkgb3IgaW4gYSB0cmFuc2l0aW9uYWwKLSAqIHN0YXRlLgotICoKLSAqIFRoZSBzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBhcmd1bWVudCBpcyBhIHJlYWwgYWRkcmVzcyBvZiBhIGRhdGEgYnVmZmVyCi0gKiBvZiBzaXplIDMyLWJ5dGVzIGFsaWduZWQgb24gYSAzMi1ieXRlIGJvdW5kYXJ5LiAgSXQgaXMgdHJlYXRlZCBhcyBhIE5VTEwKLSAqIHRlcm1pbmF0ZWQgNy1iaXQgQVNDSUkgc3RyaW5nIG9mIHVwIHRvIDMxIGNoYXJhY3RlcnMgbm90IGluY2x1ZGluZyB0aGUKLSAqIE5VTEwgdGVybWluYXRpb24uCi0gKi8KLSNkZWZpbmUgSFZfRkFTVF9NQUNIX1NFVF9TT0ZUX1NUQVRFCTB4MDMKLSNkZWZpbmUgIEhWX1NPRlRfU1RBVEVfTk9STUFMCQkgMHgwMQotI2RlZmluZSAgSFZfU09GVF9TVEFURV9UUkFOU0lUSU9OCSAweDAyCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgc3VuNHZfbWFjaF9zaXIodm9pZCk7CisjZW5kaWYKIAotLyogbWFjaF9nZXRfc29mdF9zdGF0ZSgpCisvKiBtYWNoX3NldF93YXRjaGRvZygpCiAgKiBUUkFQOglIVl9GQVNUX1RSQVAKLSAqIEZVTkNUSU9OOglIVl9GQVNUX01BQ0hfR0VUX1NPRlRfU1RBVEUKLSAqIEFSRzA6CXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIHBvaW50ZXIKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01BQ0hfU0VUX1dBVENIRE9HCisgKiBBUkcwOgl0aW1lb3V0IGluIG1pbGxpc2Vjb25kcwogICogUkVUMDoJc3RhdHVzCi0gKiBSRVQxOglzb2Z0d2FyZSBzdGF0ZQotICogRVJST1JTOglFTk9SQUREUglzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBwb2ludGVyIGlzIG5vdCBhCi0gKgkJCQl2YWxpZCByZWFsIGFkZHJlc3MKLSAqCQlFQkFEQUxJR05FRAlzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBpcyBub3QgY29ycmVjdGx5Ci0gKgkJCQlhbGlnbmVkCisgKiBSRVQxOgl0aW1lIHJlbWFpbmluZyBpbiBtaWxsaXNlY29uZHMKICAqCi0gKiBSZXRyaWV2ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZ3Vlc3QncyBzb2Z0d2FyZSBzdGF0ZS4gIFRoZSBydWxlcwotICogZm9yIHRoZSBzb2Z0d2FyZSBzdGF0ZSBwb2ludGVyIGFyZSB0aGUgc2FtZSBhcyBmb3IgbWFjaF9zZXRfc29mdF9zdGF0ZSgpCi0gKiBhYm92ZS4KKyAqIEEgZ3Vlc3QgdXNlcyB0aGlzIEFQSSB0byBzZXQgYSB3YXRjaGRvZyB0aW1lci4gIE9uY2UgdGhlIGd1ZXMgaGFzIHNldAorICogdGhlIHRpbWVyLCBpdCBtdXN0IGNhbGwgdGhlIHRpbWVyIHNlcnZpY2UgYWdhaW4gZWl0aGVyIHRvIGRpc2FibGUgb3IKKyAqIHBvc3Rwb25lIHRoZSBleHBpcmF0aW9uLiAgSWYgdGhlIHRpbWVyIGV4cGlyZXMgYmVmb3JlIGJlaW5nIHJlc2V0IG9yCisgKiBkaXNhYmxlZCwgdGhlbiB0aGUgaHlwZXJ2aXNvciB0YWtlIGEgcGxhdGZvcm0gc3BlY2lmaWMgYWN0aW9uIGxlYWRpbmcKKyAqIHRvIGd1ZXN0IHRlcm1pbmF0aW9uIHdpdGhpbiBhIGJvdW5kZWQgdGltZSBwZXJpb2QuICBUaGUgcGxhdGZvcm0gYWN0aW9uCisgKiBtYXkgaW5jbHVkZSByZWNvdmVyeSBhY3Rpb25zIHN1Y2ggYXMgcmVwb3J0aW5nIHRoZSBleHBpcmF0aW9uIHRvIGEKKyAqIFNlcnZpY2UgUHJvY2Vzc29yLCBhbmQvb3IgYXV0b21hdGljYWxseSByZXN0YXJ0aW5nIHRoZSBndWVzLgorICoKKyAqIFRoZSAndGltZW91dCcgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBpbiBtaWxsaXNlY29uZHMsIGhvd2V2ZXIgdGhlCisgKiBpbXBsZW1lbnRhdGVkIGdyYW51bGFyaXR5IGlzIGdpdmVuIGJ5IHRoZSAnd2F0Y2hkb2ctcmVzb2x1dGlvbicKKyAqIHByb3BlcnR5IGluIHRoZSAncGxhdGZvcm0nIG5vZGUgb2YgdGhlIGd1ZXN0J3MgbWFjaGluZSBkZXNjcmlwdGlvbi4KKyAqIFRoZSBsYXJnZXN0IGFsbG93ZWQgdGltZW91dCB2YWx1ZSBpcyBzcGVjaWZpZWQgYnkgdGhlCisgKiAnd2F0Y2hkb2ctbWF4LXRpbWVvdXQnIHByb3BlcnR5IG9mIHRoZSAncGxhdGZvcm0nIG5vZGUuCisgKgorICogSWYgdGhlICd0aW1lb3V0JyBhcmd1bWVudCBpcyBub3QgemVybywgdGhlIHdhdGNoZG9nIHRpbWVyIGlzIHNldCB0bworICogZXhwaXJlIGFmdGVyIGEgbWluaW11bSBvZiAndGltZW91dCcgbWlsbGlzZWNvbmRzLgorICoKKyAqIElmIHRoZSAndGltZW91dCcgYXJndW1lbnQgaXMgemVybywgdGhlIHdhdGNoZG9nIHRpbWVyIGlzIGRpc2FibGVkLgorICoKKyAqIElmIHRoZSAndGltZW91dCcgdmFsdWUgZXhjZWVkcyB0aGUgdmFsdWUgb2YgdGhlICdtYXgtd2F0Y2hkb2ctdGltZW91dCcKKyAqIHByb3BlcnR5LCB0aGUgaHlwZXJ2aXNvciBsZWF2ZXMgdGhlIHdhdGNoZG9nIHRpbWVyIHN0YXRlIHVuY2hhbmdlZCwKKyAqIGFuZCByZXR1cm5zIGEgc3RhdHVzIG9mIEVJTlZBTC4KKyAqCisgKiBUaGUgJ3RpbWUgcmVtYWluaW5nJyByZXR1cm4gdmFsdWUgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZQorICogcmV0dXJuIHN0YXR1cyBpcyBFT0sgb3IgRUlOVkFMLiAgQSBub24temVybyByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRoZQorICogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IHdlcmUgcmVtYWluaW5nIHVudGlsIHRoZSB0aW1lciB3YXMgdG8gZXhwaXJlLgorICogSWYgbGVzcyB0aGFuIG9uZSBtaWxsaXNlY29uZCByZW1haW5zLCB0aGUgcmV0dXJuIHZhbHVlIGlzICcxJy4gIElmIHRoZQorICogd2F0Y2hkb2cgdGltZXIgd2FzIGRpc2FibGVkIGF0IHRoZSB0aW1lIG9mIHRoZSBjYWxsLCB0aGUgcmV0dXJuIHZhbHVlIGlzCisgKiB6ZXJvLgorICoKKyAqIElmIHRoZSBoeXBlcnZpc29yIGNhbm5vdCBzdXBwb3J0IHRoZSBleGFjdCB0aW1lb3V0IHZhbHVlIHJlcXVlc3RlZCwgYnV0CisgKiBjYW4gc3VwcG9ydCBhIGxhcmdlciB0aW1lb3V0IHZhbHVlLCB0aGUgaHlwZXJ2aXNvciBtYXkgcm91bmQgdGhlIGFjdHVhbAorICogdGltZW91dCB0byBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0ZWQgdGltZW91dCwgY29uc2VxdWVudGx5IHRoZQorICogJ3RpbWUgcmVtYWluaW5nJyByZXR1cm4gdmFsdWUgbWF5IGJlIGxhcmdlciB0aGFuIHRoZSBwcmV2aW91c2x5IHJlcXVlc3RlZAorICogdGltZW91dCB2YWx1ZS4KKyAqCisgKiBBbnkgZ3Vlc3QgT1MgZGVidWdnZXIgc2hvdWxkIGJlIGF3YXJlIHRoYXQgdGhlIHdhdGNoZG9nIHNlcnZpY2UgbWF5IGJlIGluCisgKiB1c2UuICBDb25zZXF1ZW50bHksIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHdhdGNoZG9nIHNlcnZpY2UgaXMKKyAqIGRpc2FibGVkIHVwb24gZGVidWdnZXIgZW50cnkgKGUuZy4gcmVhY2hpbmcgYSBicmVha3BvaW50KSwgYW5kIHRoZW4KKyAqIHJlLWVuYWJsZWQgdXBvbiByZXR1cm5pbmcgdG8gbm9ybWFsIGV4ZWN1dGlvbi4gIFRoZSBBUEkgaGFzIGJlZW4gZGVzaWduZWQKKyAqIHdpdGggdGhpcyBpbiBtaW5kLCBhbmQgdGhlICd0aW1lIHJlbWFpbmluZycgcmVzdWx0IG9mIHRoZSBkaXNhYmxlIGNhbGwgbWF5CisgKiBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSB0aW1lb3V0IGFyZ3VtZW50IG9mIHRoZSByZS1lbmFibGUgY2FsbC4KICAqLwotI2RlZmluZSBIVl9GQVNUX01BQ0hfR0VUX1NPRlRfU1RBVEUJMHgwNAorI2RlZmluZSBIVl9GQVNUX01BQ0hfU0VUX1dBVENIRE9HCTB4MDUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X21hY2hfc2V0X3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgdGltZW91dCwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nICpvcmlnX3RpbWVvdXQpOworI2VuZGlmCiAKIC8qIENQVSBzZXJ2aWNlcy4KICAqCkBAIC0yMDYsOCArMjMxLDggQEAKICAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9TVEFSVAogICogQVJHMDoJQ1BVIElECiAgKiBBUkcxOglQQwotICogQVJHMToJUlRCQQotICogQVJHMToJdGFyZ2V0IEFSRzAKKyAqIEFSRzI6CVJUQkEKKyAqIEFSRzM6CXRhcmdldCBBUkcwCiAgKiBSRVQwOglzdGF0dXMKICAqIEVSUk9SUzoJRU5PQ1BVCQlJbnZhbGlkIENQVSBJRAogICoJCUVJTlZBTAkJVGFyZ2V0IENQVSBJRCBpcyBub3QgaW4gdGhlIHN0b3BwZWQgc3RhdGUKQEAgLTIyNCw2ICsyNDksMTMgQEAKICAqLwogI2RlZmluZSBIVl9GQVNUX0NQVV9TVEFSVAkJMHgxMAogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfY3B1X3N0YXJ0KHVuc2lnbmVkIGxvbmcgY3B1aWQsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHBjLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBydGJhLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcwKTsKKyNlbmRpZgorCiAvKiBjcHVfc3RvcCgpCiAgKiBUUkFQOglIVl9GQVNUX1RSQVAKICAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9TVE9QCkBAIC0yNDUsNiArMjc3LDEwIEBACiAgKi8KICNkZWZpbmUgSFZfRkFTVF9DUFVfU1RPUAkJMHgxMQogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfY3B1X3N0b3AodW5zaWduZWQgbG9uZyBjcHVpZCk7CisjZW5kaWYKKwogLyogY3B1X3lpZWxkKCkKICAqIFRSQVA6CUhWX0ZBU1RfVFJBUAogICogRlVOQ1RJT046CUhWX0ZBU1RfQ1BVX1lJRUxECkBAIC01ODgsNiArNjI0LDExIEBACiAgKi8KICNkZWZpbmUgSFZfRkFTVF9NTVVfVFNCX0NUWDAJCTB4MjAKIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X21tdV90c2JfY3R4MCh1bnNpZ25lZCBsb25nIG51bV9kZXNjcmlwdGlvbnMsCisJCQkJCXVuc2lnbmVkIGxvbmcgdHNiX2Rlc2NfcmEpOworI2VuZGlmCisKIC8qIG1tdV90c2JfY3R4bm9uMCgpCiAgKiBUUkFQOglIVl9GQVNUX1RSQVAKICAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9UU0JfQ1RYTk9OMApAQCAtNjk0LDYgKzczNSwxMyBAQAogICovCiAjZGVmaW5lIEhWX0ZBU1RfTU1VX01BUF9QRVJNX0FERFIJMHgyNQogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbW11X21hcF9wZXJtX2FkZHIodW5zaWduZWQgbG9uZyB2YWRkciwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHNldF90b196ZXJvLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdHRlLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworI2VuZGlmCisKIC8qIG1tdV9mYXVsdF9hcmVhX2NvbmYoKQogICogVFJBUDoJSFZfRkFTVF9UUkFQCiAgKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfRkFVTFRfQVJFQV9DT05GCkBAIC04OTIsNiArOTQwLDEwIEBACiAgKi8KICNkZWZpbmUgSFZfRkFTVF9UT0RfR0VUCQkJMHg1MAogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfdG9kX2dldCh1bnNpZ25lZCBsb25nICp0aW1lKTsKKyNlbmRpZgorCiAvKiB0b2Rfc2V0KCkKICAqIFRSQVA6CUhWX0ZBU1RfVFJBUAogICogRlVOQ1RJT046CUhWX0ZBU1RfVE9EX1NFVApAQCAtOTA1LDYgKzk1NywxMCBAQAogICovCiAjZGVmaW5lIEhWX0ZBU1RfVE9EX1NFVAkJCTB4NTEKIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3RvZF9zZXQodW5zaWduZWQgbG9uZyB0aW1lKTsKKyNlbmRpZgorCiAvKiBDb25zb2xlIHNlcnZpY2VzICovCiAKIC8qIGNvbl9nZXRjaGFyKCkKQEAgLTk0MCw2ICs5OTYsMTgxIEBACiAgKi8KICNkZWZpbmUgSFZfRkFTVF9DT05TX1BVVENIQVIJCTB4NjEKIAorLyogY29uX3JlYWQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9DT05TX1JFQUQKKyAqIEFSRzA6CWJ1ZmZlciByZWFsIGFkZHJlc3MKKyAqIEFSRzE6CWJ1ZmZlciBzaXplIGluIGJ5dGVzCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWJ5dGVzIHJlYWQgb3IgQlJFQUsgb3IgSFVQCisgKiBFUlJPUlM6CUVXT1VMREJMT0NLCU5vIGNoYXJhY3RlciBhdmFpbGFibGUuCisgKgorICogUmVhZHMgY2hhcmFjdGVycyBpbnRvIGEgYnVmZmVyIGZyb20gdGhlIGNvbnNvbGUgZGV2aWNlLiAgSWYgbm8KKyAqIGNoYXJhY3RlciBpcyBhdmFpbGFibGUgdGhlbiBhbiBFV09VTERCTE9DSyBlcnJvciBpcyByZXR1cm5lZC4KKyAqIElmIGEgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZSwgdGhlbiB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIEVPSworICogYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpbnRvIHRoZSBnaXZlbiBidWZmZXIgaXMgcHJvdmlkZWQKKyAqIGluIFJFVDEuCisgKgorICogQSB2aXJ0dWFsIEJSRUFLIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSA2NC1iaXQgUkVUMSB2YWx1ZSAtMS4KKyAqCisgKiBBIHZpcnR1YWwgSFVQIHNpZ25hbCBpcyByZXByZXNlbnRlZCBieSB0aGUgNjQtYml0IFJFVDEgdmFsdWUgLTIuCisgKgorICogSWYgQlJFQUsgb3IgSFVQIGFyZSBpbmRpY2F0ZWQsIG5vIGJ5dGVzIHdlcmUgcmVhZCBpbnRvIGJ1ZmZlci4KKyAqLworI2RlZmluZSBIVl9GQVNUX0NPTlNfUkVBRAkJMHg2MgorCisvKiBjb25fd3JpdGUoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9DT05TX1dSSVRFCisgKiBBUkcwOglidWZmZXIgcmVhbCBhZGRyZXNzCisgKiBBUkcxOglidWZmZXIgc2l6ZSBpbiBieXRlcworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglieXRlcyB3cml0dGVuCisgKiBFUlJPUlM6CUVXT1VMREJMT0NLCU91dHB1dCBidWZmZXIgY3VycmVudGx5IGZ1bGwsIHdvdWxkIGJsb2NrCisgKgorICogU2VuZCBhIGNoYXJhY3RlcnMgaW4gYnVmZmVyIHRvIHRoZSBjb25zb2xlIGRldmljZS4gIEJyZWFrcyBtdXN0IGJlCisgKiBzZW50IHVzaW5nIGNvbl9wdXRjaGFyKCkuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9DT05TX1dSSVRFCQkweDYzCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gbG9uZyBzdW40dl9jb25fZ2V0Y2hhcihsb25nICpzdGF0dXMpOworZXh0ZXJuIGxvbmcgc3VuNHZfY29uX3B1dGNoYXIobG9uZyBjKTsKK2V4dGVybiBsb25nIHN1bjR2X2Nvbl9yZWFkKHVuc2lnbmVkIGxvbmcgYnVmZmVyLAorCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgdW5zaWduZWQgbG9uZyAqYnl0ZXNfcmVhZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9jb25fd3JpdGUodW5zaWduZWQgbG9uZyBidWZmZXIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nICpieXRlc193cml0dGVuKTsKKyNlbmRpZgorCisvKiBtYWNoX3NldF9zb2Z0X3N0YXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTUFDSF9TRVRfU09GVF9TVEFURQorICogQVJHMDoJc29mdHdhcmUgc3RhdGUKKyAqIEFSRzE6CXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIHBvaW50ZXIKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCXNvZnR3YXJlIHN0YXRlIG5vdCB2YWxpZCBvciBzb2Z0d2FyZSBzdGF0ZQorICoJCQkJZGVzY3JpcHRpb24gaXMgbm90IE5VTEwgdGVybWluYXRlZAorICoJCUVOT1JBRERSCXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIHBvaW50ZXIgaXMgbm90IGEKKyAqCQkJCXZhbGlkIHJlYWwgYWRkcmVzcworICoJCUVCQURBTElHTkVECXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIGlzIG5vdCBjb3JyZWN0bHkKKyAqCQkJCWFsaWduZWQKKyAqCisgKiBUaGlzIGFsbG93cyB0aGUgZ3Vlc3QgdG8gcmVwb3J0IGl0J3Mgc29mdCBzdGF0ZSB0byB0aGUgaHlwZXJ2aXNvci4gIFRoZXJlCisgKiBhcmUgdHdvIHByaW1hcnkgY29tcG9uZW50cyB0byB0aGlzIHN0YXRlLiAgVGhlIGZpcnN0IHBhcnQgc3RhdGVzIHdoZXRoZXIKKyAqIHRoZSBndWVzdCBzb2Z0d2FyZSBpcyBydW5uaW5nIG9yIG5vdC4gIFRoZSBzZWNvbmQgY29udGFpbnRzIG9wdGlvbmFsCisgKiBkZXRhaWxzIHNwZWNpZmljIHRvIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBUaGUgc29mdHdhcmUgc3RhdGUgYXJndW1lbnQgaXMgZGVmaW5lZCBiZWxvdyBpbiBIVl9TT0ZUX1NUQVRFXyosIGFuZAorICogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGd1ZXN0IGlzIG9wZXJhdGluZyBub3JtYWxseSBvciBpbiBhIHRyYW5zaXRpb25hbAorICogc3RhdGUuCisgKgorICogVGhlIHNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIGFyZ3VtZW50IGlzIGEgcmVhbCBhZGRyZXNzIG9mIGEgZGF0YSBidWZmZXIKKyAqIG9mIHNpemUgMzItYnl0ZXMgYWxpZ25lZCBvbiBhIDMyLWJ5dGUgYm91bmRhcnkuICBJdCBpcyB0cmVhdGVkIGFzIGEgTlVMTAorICogdGVybWluYXRlZCA3LWJpdCBBU0NJSSBzdHJpbmcgb2YgdXAgdG8gMzEgY2hhcmFjdGVycyBub3QgaW5jbHVkaW5nIHRoZQorICogTlVMTCB0ZXJtaW5hdGlvbi4KKyAqLworI2RlZmluZSBIVl9GQVNUX01BQ0hfU0VUX1NPRlRfU1RBVEUJMHg3MAorI2RlZmluZSAgSFZfU09GVF9TVEFURV9OT1JNQUwJCSAweDAxCisjZGVmaW5lICBIVl9TT0ZUX1NUQVRFX1RSQU5TSVRJT04JIDB4MDIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X21hY2hfc2V0X3NvZnRfc3RhdGUodW5zaWduZWQgbG9uZyBzb2Z0X3N0YXRlLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBtc2dfc3RyaW5nX3JhKTsKKyNlbmRpZgorCisvKiBtYWNoX2dldF9zb2Z0X3N0YXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTUFDSF9HRVRfU09GVF9TVEFURQorICogQVJHMDoJc29mdHdhcmUgc3RhdGUgZGVzY3JpcHRpb24gcG9pbnRlcgorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglzb2Z0d2FyZSBzdGF0ZQorICogRVJST1JTOglFTk9SQUREUglzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBwb2ludGVyIGlzIG5vdCBhCisgKgkJCQl2YWxpZCByZWFsIGFkZHJlc3MKKyAqCQlFQkFEQUxJR05FRAlzb2Z0d2FyZSBzdGF0ZSBkZXNjcmlwdGlvbiBpcyBub3QgY29ycmVjdGx5CisgKgkJCQlhbGlnbmVkCisgKgorICogUmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGd1ZXN0J3Mgc29mdHdhcmUgc3RhdGUuICBUaGUgcnVsZXMKKyAqIGZvciB0aGUgc29mdHdhcmUgc3RhdGUgcG9pbnRlciBhcmUgdGhlIHNhbWUgYXMgZm9yIG1hY2hfc2V0X3NvZnRfc3RhdGUoKQorICogYWJvdmUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NQUNIX0dFVF9TT0ZUX1NUQVRFCTB4NzEKKworLyogc3ZjX3NlbmQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9TVkNfU0VORAorICogQVJHMDoJc2VydmljZSBJRAorICogQVJHMToJYnVmZmVyIHJlYWwgYWRkcmVzcworICogQVJHMjoJYnVmZmVyIHNpemUKKyAqIFJFVDA6CVNUQVRVUworICogUkVUMToJc2VudF9ieXRlcworICoKKyAqIEJlIGNhcmVmdWwsIGFsbCBvdXRwdXQgcmVnaXN0ZXJzIGFyZSBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24sCisgKiBzbyBmb3IgZXhhbXBsZSBpdCBpcyBub3QgcG9zc2libGUgdG8gc2F2ZSBhd2F5IGEgdmFsdWUgaW4gJW80CisgKiBhY3Jvc3MgdGhlIHRyYXAuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9TVkNfU0VORAkJMHg4MAorCisvKiBzdmNfcmVjdigpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1NWQ19SRUNWCisgKiBBUkcwOglzZXJ2aWNlIElECisgKiBBUkcxOglidWZmZXIgcmVhbCBhZGRyZXNzCisgKiBBUkcyOglidWZmZXIgc2l6ZQorICogUkVUMDoJU1RBVFVTCisgKiBSRVQxOglyZWN2X2J5dGVzCisgKgorICogQmUgY2FyZWZ1bCwgYWxsIG91dHB1dCByZWdpc3RlcnMgYXJlIGNsb2JiZXJlZCBieSB0aGlzIG9wZXJhdGlvbiwKKyAqIHNvIGZvciBleGFtcGxlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzYXZlIGF3YXkgYSB2YWx1ZSBpbiAlbzQKKyAqIGFjcm9zcyB0aGUgdHJhcC4KKyAqLworI2RlZmluZSBIVl9GQVNUX1NWQ19SRUNWCQkweDgxCisKKy8qIHN2Y19nZXRzdGF0dXMoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9TVkNfR0VUU1RBVFVTCisgKiBBUkcwOglzZXJ2aWNlIElECisgKiBSRVQwOglTVEFUVVMKKyAqIFJFVDE6CXN0YXR1cyBiaXRzCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9TVkNfR0VUU1RBVFVTCQkweDgyCisKKy8qIHN2Y19zZXRzdGF0dXMoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9TVkNfU0VUU1RBVFVTCisgKiBBUkcwOglzZXJ2aWNlIElECisgKiBBUkcxOgliaXRzIHRvIHNldAorICogUkVUMDoJU1RBVFVTCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9TVkNfU0VUU1RBVFVTCQkweDgzCisKKy8qIHN2Y19jbHJzdGF0dXMoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9TVkNfQ0xSU1RBVFVTCisgKiBBUkcwOglzZXJ2aWNlIElECisgKiBBUkcxOgliaXRzIHRvIGNsZWFyCisgKiBSRVQwOglTVEFUVVMKKyAqLworI2RlZmluZSBIVl9GQVNUX1NWQ19DTFJTVEFUVVMJCTB4ODQKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3N2Y19zZW5kKHVuc2lnbmVkIGxvbmcgc3ZjX2lkLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlciwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBidWZmZXJfc2l6ZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqc2VudF9ieXRlcyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9zdmNfcmVjdih1bnNpZ25lZCBsb25nIHN2Y19pZCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBidWZmZXIsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyX3NpemUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnJlY3ZfYnl0ZXMpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfc3ZjX2dldHN0YXR1cyh1bnNpZ25lZCBsb25nIHN2Y19pZCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgKnN0YXR1c19iaXRzKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3N2Y19zZXRzdGF0dXModW5zaWduZWQgbG9uZyBzdmNfaWQsCisJCQkJCSB1bnNpZ25lZCBsb25nIHN0YXR1c19iaXRzKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3N2Y19jbHJzdGF0dXModW5zaWduZWQgbG9uZyBzdmNfaWQsCisJCQkJCSB1bnNpZ25lZCBsb25nIHN0YXR1c19iaXRzKTsKKyNlbmRpZgorCiAvKiBUcmFwIHRyYWNlIHNlcnZpY2VzLgogICoKICAqIFRoZSBoeXBlcnZpc29yIHByb3ZpZGVzIGEgdHJhcCB0cmFjaW5nIGNhcGFiaWxpdHkgZm9yIHByaXZpbGVnZWQKQEAgLTEzMzEsNiArMTU2MiwxMTMgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2ludHJfc2V0dGFyZ2V0KHVuc2lnbmVkIGxvbmcgc3lzaW5vLCB1bnNpZ25lZCBsb25nIGNwdWlkKTsKICNlbmRpZgogCisvKiB2aW50cl9nZXRfY29va2llKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfR0VUX0NPT0tJRQorICogQVJHMDoJZGV2aWNlIGhhbmRsZQorICogQVJHMToJZGV2aWNlIGlubworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgljb29raWUKKyAqLworI2RlZmluZSBIVl9GQVNUX1ZJTlRSX0dFVF9DT09LSUUJMHhhNworCisvKiB2aW50cl9zZXRfY29va2llKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfU0VUX0NPT0tJRQorICogQVJHMDoJZGV2aWNlIGhhbmRsZQorICogQVJHMToJZGV2aWNlIGlubworICogQVJHMjoJY29va2llCisgKiBSRVQwOglzdGF0dXMKKyAqLworI2RlZmluZSBIVl9GQVNUX1ZJTlRSX1NFVF9DT09LSUUJMHhhOAorCisvKiB2aW50cl9nZXRfdmFsaWQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9WSU5UUl9HRVRfVkFMSUQKKyAqIEFSRzA6CWRldmljZSBoYW5kbGUKKyAqIEFSRzE6CWRldmljZSBpbm8KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJdmFsaWQgc3RhdGUKKyAqLworI2RlZmluZSBIVl9GQVNUX1ZJTlRSX0dFVF9WQUxJRAkJMHhhOQorCisvKiB2aW50cl9zZXRfdmFsaWQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9WSU5UUl9TRVRfVkFMSUQKKyAqIEFSRzA6CWRldmljZSBoYW5kbGUKKyAqIEFSRzE6CWRldmljZSBpbm8KKyAqIEFSRzI6CXZhbGlkIHN0YXRlCisgKiBSRVQwOglzdGF0dXMKKyAqLworI2RlZmluZSBIVl9GQVNUX1ZJTlRSX1NFVF9WQUxJRAkJMHhhYQorCisvKiB2aW50cl9nZXRfc3RhdGUoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9WSU5UUl9HRVRfU1RBVEUKKyAqIEFSRzA6CWRldmljZSBoYW5kbGUKKyAqIEFSRzE6CWRldmljZSBpbm8KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJc3RhdGUKKyAqLworI2RlZmluZSBIVl9GQVNUX1ZJTlRSX0dFVF9TVEFURQkJMHhhYgorCisvKiB2aW50cl9zZXRfc3RhdGUoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9WSU5UUl9TRVRfU1RBVEUKKyAqIEFSRzA6CWRldmljZSBoYW5kbGUKKyAqIEFSRzE6CWRldmljZSBpbm8KKyAqIEFSRzI6CXN0YXRlCisgKiBSRVQwOglzdGF0dXMKKyAqLworI2RlZmluZSBIVl9GQVNUX1ZJTlRSX1NFVF9TVEFURQkJMHhhYworCisvKiB2aW50cl9nZXRfdGFyZ2V0KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVklOVFJfR0VUX1RBUkdFVAorICogQVJHMDoJZGV2aWNlIGhhbmRsZQorICogQVJHMToJZGV2aWNlIGlubworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgljcHVpZAorICovCisjZGVmaW5lIEhWX0ZBU1RfVklOVFJfR0VUX1RBUkdFVAkweGFkCisKKy8qIHZpbnRyX3NldF90YXJnZXQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9WSU5UUl9TRVRfVEFSR0VUCisgKiBBUkcwOglkZXZpY2UgaGFuZGxlCisgKiBBUkcxOglkZXZpY2UgaW5vCisgKiBBUkcyOgljcHVpZAorICogUkVUMDoJc3RhdHVzCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9WSU5UUl9TRVRfVEFSR0VUCTB4YWUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3ZpbnRyX2dldF9jb29raWUodW5zaWduZWQgbG9uZyBkZXZfaGFuZGxlLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBkZXZfaW5vLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqY29va2llKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X3ZpbnRyX3NldF9jb29raWUodW5zaWduZWQgbG9uZyBkZXZfaGFuZGxlLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBkZXZfaW5vLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBjb29raWUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfdmludHJfZ2V0X3ZhbGlkKHVuc2lnbmVkIGxvbmcgZGV2X2hhbmRsZSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBkZXZfaW5vLAorCQkJCQkgICB1bnNpZ25lZCBsb25nICp2YWxpZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl92aW50cl9zZXRfdmFsaWQodW5zaWduZWQgbG9uZyBkZXZfaGFuZGxlLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGRldl9pbm8sCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgdmFsaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfdmludHJfZ2V0X3N0YXRlKHVuc2lnbmVkIGxvbmcgZGV2X2hhbmRsZSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBkZXZfaW5vLAorCQkJCQkgICB1bnNpZ25lZCBsb25nICpzdGF0ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl92aW50cl9zZXRfc3RhdGUodW5zaWduZWQgbG9uZyBkZXZfaGFuZGxlLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGRldl9pbm8sCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhdGUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfdmludHJfZ2V0X3RhcmdldCh1bnNpZ25lZCBsb25nIGRldl9oYW5kbGUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGRldl9pbm8sCisJCQkJCSAgICB1bnNpZ25lZCBsb25nICpjcHVpZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl92aW50cl9zZXRfdGFyZ2V0KHVuc2lnbmVkIGxvbmcgZGV2X2hhbmRsZSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZGV2X2lubywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgY3B1aWQpOworI2VuZGlmCisKIC8qIFBDSSBJTyBzZXJ2aWNlcy4KICAqCiAgKiBTZWUgdGhlIHRlcm1pbm9sb2d5IGRlc2NyaXB0aW9ucyBpbiB0aGUgZGV2aWNlIGludGVycnVwdCBzZXJ2aWNlcwpAQCAtMTk4OSw2ICsyMzI3LDM0NiBAQAogICovCiAjZGVmaW5lIEhWX0ZBU1RfUENJX01TR19TRVRWQUxJRAkweGQzCiAKKy8qIExvZ2ljYWwgRG9tYWluIENoYW5uZWwgc2VydmljZXMuICAqLworCisjZGVmaW5lIExEQ19DSEFOTkVMX0RPV04JCTAKKyNkZWZpbmUgTERDX0NIQU5ORUxfVVAJCQkxCisjZGVmaW5lIExEQ19DSEFOTkVMX1JFU0VUVElORwkJMgorCisvKiBsZGNfdHhfcWNvbmYoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfVFhfUUNPTkYKKyAqIEFSRzA6CWNoYW5uZWwgSUQKKyAqIEFSRzE6CXJlYWwgYWRkcmVzcyBiYXNlIG9mIHF1ZXVlCisgKiBBUkcyOgludW0gZW50cmllcyBpbiBxdWV1ZQorICogUkVUMDoJc3RhdHVzCisgKgorICogQ29uZmlndXJlIHRyYW5zbWl0IHF1ZXVlIGZvciB0aGUgTERDIGVuZHBvaW50IHNwZWNpZmllZCBieSB0aGUKKyAqIGdpdmVuIGNoYW5uZWwgSUQsIHRvIGJlIHBsYWNlZCBhdCB0aGUgZ2l2ZW4gcmVhbCBhZGRyZXNzLCBhbmQKKyAqIGJlIG9mIHRoZSBnaXZlbiBudW0gZW50cmllcy4gIE51bSBlbnRyaWVzIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCisgKiBUaGUgcmVhbCBhZGRyZXNzIGJhc2Ugb2YgdGhlIHF1ZXVlIG11c3QgYmUgYWxpZ25lZCBvbiB0aGUgcXVldWUKKyAqIHNpemUuICBFYWNoIHF1ZXVlIGVudHJ5IGlzIDY0LWJ5dGVzLCBzbyBmb3IgZXhhbXBsZSwgYSAzMiBlbnRyeQorICogcXVldWUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMjA0OCBieXRlIHJlYWwgYWRkcmVzcyBib3VuZGFyeS4KKyAqCisgKiBVcG9uIGNvbmZpZ3VyYXRpb24gb2YgYSB2YWxpZCB0cmFuc21pdCBxdWV1ZSB0aGUgaGVhZCBhbmQgdGFpbAorICogcG9pbnRlcnMgYXJlIHNldCB0byBhIGh5cGVydmlzb3Igc3BlY2lmaWMgaWRlbnRpY2FsIHZhbHVlIGluZGljYXRpbmcKKyAqIHRoYXQgdGhlIHF1ZXVlIGluaXRpYWxseSBpcyBlbXB0eS4KKyAqCisgKiBUaGUgZW5kcG9pbnQncyB0cmFuc21pdCBxdWV1ZSBpcyB1bi1jb25maWd1cmVkIGlmIG51bSBlbnRyaWVzIGlzIHplcm8uCisgKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgZm9yIGVhY2ggcXVldWUgZm9yIGEgc3BlY2lmaWMgY3B1IG1heSBiZQorICogZGV0ZXJtaW5lZCBmcm9tIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uLiAgQSB0cmFuc21pdCBxdWV1ZSBtYXkgYmUKKyAqIHNwZWNpZmllZCBldmVuIGluIHRoZSBldmVudCB0aGF0IHRoZSBMREMgaXMgZG93biAocGVlciBlbmRwb2ludCBoYXMgbm8KKyAqIHJlY2VpdmUgcXVldWUgc3BlY2lmaWVkKS4gIFRyYW5zbWlzc2lvbiB3aWxsIGJlZ2luIGFzIHNvb24gYXMgdGhlIHBlZXIKKyAqIGVuZHBvaW50IGRlZmluZXMgYSByZWNlaXZlIHF1ZXVlLgorICoKKyAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYSBndWVzdCB3YWl0IGZvciBhIHRyYW5zbWl0IHF1ZXVlIHRvIGVtcHR5IHByaW9yCisgKiB0byByZWNvbmZpZ3VyaW5nIGl0LCBvciB1bi1jb25maWd1cmluZyBpdC4gIFJlIG9yIHVuLWNvbmZpZ3VyaW5nIG9mIGEKKyAqIG5vbi1lbXB0eSB0cmFuc21pdCBxdWV1ZSBiZWhhdmVzIGV4YWN0bHkgYXMgZGVmaW5lZCBhYm92ZSwgaG93ZXZlciBpdAorICogaXMgdW5kZWZpbmVkIGFzIHRvIGhvdyBtYW55IG9mIHRoZSBwZW5kaW5nIGVudHJpZXMgaW4gdGhlIG9yaWdpbmFsIHF1ZXVlCisgKiB3aWxsIGJlIGRlbGl2ZXJlZCBwcmlvciB0byB0aGUgcmUtY29uZmlndXJhdGlvbiB0YWtpbmcgZWZmZWN0LgorICogRnVydGhlcm1vcmUsIGFzIHRoZSBxdWV1ZSBjb25maWd1cmF0aW9uIGNhdXNlcyBhIHJlc2V0IG9mIHRoZSBoZWFkIGFuZAorICogdGFpbCBwb2ludGVycyB0aGVyZSBpcyBubyB3YXkgZm9yIGEgZ3Vlc3QgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGVudHJpZXMKKyAqIGhhdmUgYmVlbiBzZW50IGFmdGVyIHRoZSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBIVl9GQVNUX0xEQ19UWF9RQ09ORgkJMHhlMAorCisvKiBsZGNfdHhfcWluZm8oKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfVFhfUUlORk8KKyAqIEFSRzA6CWNoYW5uZWwgSUQKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJcmVhbCBhZGRyZXNzIGJhc2Ugb2YgcXVldWUKKyAqIFJFVDI6CW51bSBlbnRyaWVzIGluIHF1ZXVlCisgKgorICogUmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIGluZm8gZm9yIHRoZSB0cmFuc21pdCBxdWV1ZSBvZiBMREMgZW5kcG9pbnQKKyAqIGRlZmluZWQgYnkgdGhlIGdpdmVuIGNoYW5uZWwgSUQuICBUaGUgcmVhbCBhZGRyZXNzIGlzIHRoZSBjdXJyZW50bHkKKyAqIGRlZmluZWQgcmVhbCBhZGRyZXNzIGJhc2Ugb2YgdGhlIGRlZmluZWQgcXVldWUsIGFuZCBudW0gZW50cmllcyBpcyB0aGUKKyAqIHNpemUgb2YgdGhlIHF1ZXVlIGluIHRlcm1zIG9mIG51bWJlciBvZiBlbnRyaWVzLgorICoKKyAqIElmIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBJRCBpcyBhIHZhbGlkIGVuZHBvaW50IG51bWJlciwgYnV0IG5vIHRyYW5zbWl0CisgKiBxdWV1ZSBoYXMgYmVlbiBkZWZpbmVkIHRoaXMgc2VydmljZSB3aWxsIHJldHVybiBzdWNjZXNzLCBidXQgd2l0aCBudW0KKyAqIGVudHJpZXMgc2V0IHRvIHplcm8gYW5kIHRoZSByZWFsIGFkZHJlc3Mgd2lsbCBoYXZlIGFuIHVuZGVmaW5lZCB2YWx1ZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX0xEQ19UWF9RSU5GTwkJMHhlMQorCisvKiBsZGNfdHhfZ2V0X3N0YXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX1RYX0dFVF9TVEFURQorICogQVJHMDoJY2hhbm5lbCBJRAorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgloZWFkIG9mZnNldAorICogUkVUMjoJdGFpbCBvZmZzZXQKKyAqIFJFVDM6CWNoYW5uZWwgc3RhdGUKKyAqCisgKiBSZXR1cm4gdGhlIHRyYW5zbWl0IHN0YXRlLCBhbmQgdGhlIGhlYWQgYW5kIHRhaWwgcXVldWUgcG9pbnRlcnMsIGZvcgorICogdGhlIHRyYW5zbWl0IHF1ZXVlIG9mIHRoZSBMREMgZW5kcG9pbnQgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gY2hhbm5lbCBJRC4KKyAqIFRoZSBoZWFkIGFuZCB0YWlsIHZhbHVlcyBhcmUgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBoZWFkIGFuZCB0YWlsCisgKiBwb3NpdGlvbnMgb2YgdGhlIHRyYW5zbWl0IHF1ZXVlIGZvciB0aGUgc3BlY2lmaWVkIGVuZHBvaW50LgorICovCisjZGVmaW5lIEhWX0ZBU1RfTERDX1RYX0dFVF9TVEFURQkweGUyCisKKy8qIGxkY190eF9zZXRfcXRhaWwoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfVFhfU0VUX1FUQUlMCisgKiBBUkcwOgljaGFubmVsIElECisgKiBBUkcxOgl0YWlsIG9mZnNldAorICogUkVUMDoJc3RhdHVzCisgKgorICogVXBkYXRlIHRoZSB0YWlsIHBvaW50ZXIgZm9yIHRoZSB0cmFuc21pdCBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIExEQworICogZW5kcG9pbnQgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gY2hhbm5lbCBJRC4gIFRoZSB0YWlsIG9mZnNldCBzcGVjaWZpZWQKKyAqIG11c3QgYmUgYWxpZ25lZCBvbiBhIDY0IGJ5dGUgYm91bmRhcnksIGFuZCBjYWxjdWxhdGVkIHNvIGFzIHRvIGluY3JlYXNlCisgKiB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgZW50cmllcyBvbiB0aGUgdHJhbnNtaXQgcXVldWUuICBBbnkgYXR0ZW1wdCB0bworICogZGVjcmVhc2UgdGhlIG51bWJlciBvZiBwZW5kaW5nIHRyYW5zbWl0IHF1ZXVlIGVudGlyZXMgaXMgY29uc2lkZXJlZAorICogYW4gaW52YWxpZCB0YWlsIG9mZnNldCBhbmQgd2lsbCByZXN1bHQgaW4gYW4gRUlOVkFMIGVycm9yLgorICoKKyAqIFNpbmNlIHRoZSB0YWlsIG9mIHRoZSB0cmFuc21pdCBxdWV1ZSBtYXkgbm90IGJlIG1vdmVkIGJhY2t3YXJkcywgdGhlCisgKiB0cmFuc21pdCBxdWV1ZSBtYXkgYmUgZmx1c2hlZCBieSBjb25maWd1cmluZyBhIG5ldyB0cmFuc21pdCBxdWV1ZSwKKyAqIHdoZXJldXBvbiB0aGUgaHlwZXJ2aXNvciB3aWxsIGNvbmZpZ3VyZSB0aGUgaW5pdGlhbCB0cmFuc21pdCBoZWFkIGFuZAorICogdGFpbCBwb2ludGVycyB0byBiZSBlcXVhbC4KKyAqLworI2RlZmluZSBIVl9GQVNUX0xEQ19UWF9TRVRfUVRBSUwJMHhlMworCisvKiBsZGNfcnhfcWNvbmYoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfUlhfUUNPTkYKKyAqIEFSRzA6CWNoYW5uZWwgSUQKKyAqIEFSRzE6CXJlYWwgYWRkcmVzcyBiYXNlIG9mIHF1ZXVlCisgKiBBUkcyOgludW0gZW50cmllcyBpbiBxdWV1ZQorICogUkVUMDoJc3RhdHVzCisgKgorICogQ29uZmlndXJlIHJlY2VpdmUgcXVldWUgZm9yIHRoZSBMREMgZW5kcG9pbnQgc3BlY2lmaWVkIGJ5IHRoZQorICogZ2l2ZW4gY2hhbm5lbCBJRCwgdG8gYmUgcGxhY2VkIGF0IHRoZSBnaXZlbiByZWFsIGFkZHJlc3MsIGFuZAorICogYmUgb2YgdGhlIGdpdmVuIG51bSBlbnRyaWVzLiAgTnVtIGVudHJpZXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KKyAqIFRoZSByZWFsIGFkZHJlc3MgYmFzZSBvZiB0aGUgcXVldWUgbXVzdCBiZSBhbGlnbmVkIG9uIHRoZSBxdWV1ZQorICogc2l6ZS4gIEVhY2ggcXVldWUgZW50cnkgaXMgNjQtYnl0ZXMsIHNvIGZvciBleGFtcGxlLCBhIDMyIGVudHJ5CisgKiBxdWV1ZSBtdXN0IGJlIGFsaWduZWQgb24gYSAyMDQ4IGJ5dGUgcmVhbCBhZGRyZXNzIGJvdW5kYXJ5LgorICoKKyAqIFRoZSBlbmRwb2ludCdzIHRyYW5zbWl0IHF1ZXVlIGlzIHVuLWNvbmZpZ3VyZWQgaWYgbnVtIGVudHJpZXMgaXMgemVyby4KKyAqCisgKiBJZiBhIHZhbGlkIHJlY2VpdmUgcXVldWUgaXMgc3BlY2lmaWVkIGZvciBhIGxvY2FsIGVuZHBvaW50IHRoZSBMREMgaXMKKyAqIGluIHRoZSB1cCBzdGF0ZSBmb3IgdGhlIHB1cnBvc2Ugb2YgdHJhbnNtaXNzaW9uIHRvIHRoaXMgZW5kcG9pbnQuCisgKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgZm9yIGVhY2ggcXVldWUgZm9yIGEgc3BlY2lmaWMgY3B1IG1heSBiZQorICogZGV0ZXJtaW5lZCBmcm9tIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uLgorICoKKyAqIEFzIHJlY2VpdmUgcXVldWUgY29uZmlndXJhdGlvbiBjYXVzZXMgYSByZXNldCBvZiB0aGUgcXVldWUncyBoZWFkIGFuZAorICogdGFpbCBwb2ludGVycyB0aGVyZSBpcyBubyB3YXkgZm9yIGEgZ3VlcyB0byBkZXRlcm1pbmUgaG93IG1hbnkgZW50cmllcworICogaGF2ZSBiZWVuIHJlY2VpdmVkIGJldHdlZW4gYSBwcmVjZWVkaW5nIGxkY19nZXRfcnhfc3RhdGUoKSBBUEkgY2FsbAorICogYW5kIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbi4gIEl0IHNob3VsZCBiZSBub3RlZAorICogdGhhdCBkYXRhZ3JhbSBkZWxpdmVyeSBpcyBub3QgZ3VhcmVudGVlZCB2aWEgZG9tYWluIGNoYW5uZWxzIGFueXdheSwKKyAqIGFuZCB0aGVyZWZvcmUgYW55IGhpZ2hlciBwcm90b2NvbCBzaG91bGQgYmUgcmVzaWxpZW50IHRvIGRhdGFncmFtCisgKiBsb3NzIGlmIG5lY2Vzc2FyeS4gIEhvd2V2ZXIsIHRvIG92ZXJjb21lIHRoaXMgc3BlY2lmaWMgcmFjZSBwb3RlbnRpYWwKKyAqIGl0IGlzIHJlY29tbWVuZGVkLCBmb3IgZXhhbXBsZSwgdGhhdCBhIGhpZ2hlciBsZXZlbCBwcm90b2NvbCBiZSBlbXBsb3llZAorICogdG8gZW5zdXJlIGVpdGhlciByZXRyYW5zbWlzc2lvbiwgb3IgZW5zdXJlIHRoYXQgbm8gZGF0YWdyYW1zIGFyZSBwZW5kaW5nCisgKiBvbiB0aGUgcGVlciBlbmRwb2ludCdzIHRyYW5zbWl0IHF1ZXVlIHByaW9yIHRvIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9MRENfUlhfUUNPTkYJCTB4ZTQKKworLyogbGRjX3J4X3FpbmZvKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX1JYX1FJTkZPCisgKiBBUkcwOgljaGFubmVsIElECisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXJlYWwgYWRkcmVzcyBiYXNlIG9mIHF1ZXVlCisgKiBSRVQyOgludW0gZW50cmllcyBpbiBxdWV1ZQorICoKKyAqIFJldHVybiB0aGUgY29uZmlndXJhdGlvbiBpbmZvIGZvciB0aGUgcmVjZWl2ZSBxdWV1ZSBvZiBMREMgZW5kcG9pbnQKKyAqIGRlZmluZWQgYnkgdGhlIGdpdmVuIGNoYW5uZWwgSUQuICBUaGUgcmVhbCBhZGRyZXNzIGlzIHRoZSBjdXJyZW50bHkKKyAqIGRlZmluZWQgcmVhbCBhZGRyZXNzIGJhc2Ugb2YgdGhlIGRlZmluZWQgcXVldWUsIGFuZCBudW0gZW50cmllcyBpcyB0aGUKKyAqIHNpemUgb2YgdGhlIHF1ZXVlIGluIHRlcm1zIG9mIG51bWJlciBvZiBlbnRyaWVzLgorICoKKyAqIElmIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBJRCBpcyBhIHZhbGlkIGVuZHBvaW50IG51bWJlciwgYnV0IG5vIHJlY2VpdmUKKyAqIHF1ZXVlIGhhcyBiZWVuIGRlZmluZWQgdGhpcyBzZXJ2aWNlIHdpbGwgcmV0dXJuIHN1Y2Nlc3MsIGJ1dCB3aXRoIG51bQorICogZW50cmllcyBzZXQgdG8gemVybyBhbmQgdGhlIHJlYWwgYWRkcmVzcyB3aWxsIGhhdmUgYW4gdW5kZWZpbmVkIHZhbHVlLgorICovCisjZGVmaW5lIEhWX0ZBU1RfTERDX1JYX1FJTkZPCQkweGU1CisKKy8qIGxkY19yeF9nZXRfc3RhdGUoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfUlhfR0VUX1NUQVRFCisgKiBBUkcwOgljaGFubmVsIElECisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWhlYWQgb2Zmc2V0CisgKiBSRVQyOgl0YWlsIG9mZnNldAorICogUkVUMzoJY2hhbm5lbCBzdGF0ZQorICoKKyAqIFJldHVybiB0aGUgcmVjZWl2ZSBzdGF0ZSwgYW5kIHRoZSBoZWFkIGFuZCB0YWlsIHF1ZXVlIHBvaW50ZXJzLCBmb3IKKyAqIHRoZSByZWNlaXZlIHF1ZXVlIG9mIHRoZSBMREMgZW5kcG9pbnQgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gY2hhbm5lbCBJRC4KKyAqIFRoZSBoZWFkIGFuZCB0YWlsIHZhbHVlcyBhcmUgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBoZWFkIGFuZCB0YWlsCisgKiBwb3NpdGlvbnMgb2YgdGhlIHJlY2VpdmUgcXVldWUgZm9yIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9MRENfUlhfR0VUX1NUQVRFCTB4ZTYKKworLyogbGRjX3J4X3NldF9xaGVhZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19SWF9TRVRfUUhFQUQKKyAqIEFSRzA6CWNoYW5uZWwgSUQKKyAqIEFSRzE6CWhlYWQgb2Zmc2V0CisgKiBSRVQwOglzdGF0dXMKKyAqCisgKiBVcGRhdGUgdGhlIGhlYWQgcG9pbnRlciBmb3IgdGhlIHJlY2VpdmUgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBMREMKKyAqIGVuZHBvaW50IGRlZmluZWQgYnkgdGhlIGdpdmVuIGNoYW5uZWwgSUQuICBUaGUgaGVhZCBvZmZzZXQgc3BlY2lmaWVkCisgKiBtdXN0IGJlIGFsaWduZWQgb24gYSA2NCBieXRlIGJvdW5kYXJ5LCBhbmQgY2FsY3VsYXRlZCBzbyBhcyB0byBkZWNyZWFzZQorICogdGhlIG51bWJlciBvZiBwZW5kaW5nIGVudHJpZXMgb24gdGhlIHJlY2VpdmUgcXVldWUuICBBbnkgYXR0ZW1wdCB0bworICogaW5jcmVhc2UgdGhlIG51bWJlciBvZiBwZW5kaW5nIHJlY2VpdmUgcXVldWUgZW50aXJlcyBpcyBjb25zaWRlcmVkCisgKiBhbiBpbnZhbGlkIGhlYWQgb2Zmc2V0IGFuZCB3aWxsIHJlc3VsdCBpbiBhbiBFSU5WQUwgZXJyb3IuCisgKgorICogVGhlIHJlY2VpdmUgcXVldWUgbWF5IGJlIGZsdXNoZWQgYnkgc2V0dGluZyB0aGUgaGVhZCBvZmZzZXQgZXF1YWwKKyAqIHRvIHRoZSBjdXJyZW50IHRhaWwgb2Zmc2V0LgorICovCisjZGVmaW5lIEhWX0ZBU1RfTERDX1JYX1NFVF9RSEVBRAkweGU3CisKKy8qIExEQyBNYXAgVGFibGUgRW50cnkuICBFYWNoIHNsb3QgaXMgZGVmaW5lZCBieSBhIHRyYW5zbGF0aW9uIHRhYmxlCisgKiBlbnRyeSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBMRENfTVRFXyogYml0cyBiZWxvdywgYW5kIGEgNjQtYml0CisgKiBoeXBlcnZpc29yIGludmFsaWRhdGlvbiBjb29raWUuCisgKi8KKyNkZWZpbmUgTERDX01URV9QQUREUgkweDBmZmZmZmZmZmZmZmUwMDAgLyogcGFbNTU6MTNdICAgICAgICAgICovCisjZGVmaW5lIExEQ19NVEVfQ09QWV9XCTB4MDAwMDAwMDAwMDAwMDQwMCAvKiBjb3B5IHdyaXRlIGFjY2VzcyAgKi8KKyNkZWZpbmUgTERDX01URV9DT1BZX1IJMHgwMDAwMDAwMDAwMDAwMjAwIC8qIGNvcHkgcmVhZCBhY2Nlc3MgICAqLworI2RlZmluZSBMRENfTVRFX0lPTU1VX1cJMHgwMDAwMDAwMDAwMDAwMTAwIC8qIElPTU1VIHdyaXRlIGFjY2VzcyAqLworI2RlZmluZSBMRENfTVRFX0lPTU1VX1IJMHgwMDAwMDAwMDAwMDAwMDgwIC8qIElPTU1VIHJlYWQgYWNjZXNzICAqLworI2RlZmluZSBMRENfTVRFX0VYRUMJMHgwMDAwMDAwMDAwMDAwMDQwIC8qIGV4ZWN1dGUgICAgICAgICAgICAqLworI2RlZmluZSBMRENfTVRFX1dSSVRFCTB4MDAwMDAwMDAwMDAwMDAyMCAvKiByZWFkICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTERDX01URV9SRUFECTB4MDAwMDAwMDAwMDAwMDAxMCAvKiB3cml0ZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTERDX01URV9TWkFMTAkweDAwMDAwMDAwMDAwMDAwMGYgLyogcGFnZSBzaXplIGJpdHMgICAgICovCisjZGVmaW5lIExEQ19NVEVfU1oxNkdCCTB4MDAwMDAwMDAwMDAwMDAwNyAvKiAxNkdCIHBhZ2UgICAgICAgICAgKi8KKyNkZWZpbmUgTERDX01URV9TWjJHQgkweDAwMDAwMDAwMDAwMDAwMDYgLyogMkdCIHBhZ2UgICAgICAgICAgICovCisjZGVmaW5lIExEQ19NVEVfU1oyNTZNQgkweDAwMDAwMDAwMDAwMDAwMDUgLyogMjU2TUIgcGFnZSAgICAgICAgICovCisjZGVmaW5lIExEQ19NVEVfU1ozMk1CCTB4MDAwMDAwMDAwMDAwMDAwNCAvKiAzMk1CIHBhZ2UgICAgICAgICAgKi8KKyNkZWZpbmUgTERDX01URV9TWjRNQgkweDAwMDAwMDAwMDAwMDAwMDMgLyogNE1CIHBhZ2UgICAgICAgICAgICovCisjZGVmaW5lIExEQ19NVEVfU1o1MTJLCTB4MDAwMDAwMDAwMDAwMDAwMiAvKiA1MTJLIHBhZ2UgICAgICAgICAgKi8KKyNkZWZpbmUgTERDX01URV9TWjY0SwkweDAwMDAwMDAwMDAwMDAwMDEgLyogNjRLIHBhZ2UgICAgICAgICAgICovCisjZGVmaW5lIExEQ19NVEVfU1o4SwkweDAwMDAwMDAwMDAwMDAwMDAgLyogOEsgcGFnZSAgICAgICAgICAgICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgbGRjX210YWJsZV9lbnRyeSB7CisJdW5zaWduZWQgbG9uZwltdGU7CisJdW5zaWduZWQgbG9uZwljb29raWU7Cit9OworI2VuZGlmCisKKy8qIGxkY19zZXRfbWFwX3RhYmxlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX1NFVF9NQVBfVEFCTEUKKyAqIEFSRzA6CWNoYW5uZWwgSUQKKyAqIEFSRzE6CXRhYmxlIHJlYWwgYWRkcmVzcworICogQVJHMjoJbnVtIGVudHJpZXMKKyAqIFJFVDA6CXN0YXR1cworICoKKyAqIFJlZ2lzdGVyIHRoZSBNVEUgdGFibGUgYXQgdGhlIGdpdmVuIHRhYmxlIHJlYWwgYWRkcmVzcywgd2l0aCB0aGUKKyAqIHNwZWNpZmllZCBudW0gZW50cmllcywgZm9yIHRoZSBMREMgaW5kaWNhdGVkIGJ5IHRoZSBnaXZlbiBjaGFubmVsCisgKiBJRC4KKyAqLworI2RlZmluZSBIVl9GQVNUX0xEQ19TRVRfTUFQX1RBQkxFCTB4ZWEKKworLyogbGRjX2dldF9tYXBfdGFibGUoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfR0VUX01BUF9UQUJMRQorICogQVJHMDoJY2hhbm5lbCBJRAorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgl0YWJsZSByZWFsIGFkZHJlc3MKKyAqIFJFVDI6CW51bSBlbnRyaWVzCisgKgorICogUmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBjdXJyZW50IG1hcHBpbmcgdGFibGUgcmVnaXN0ZXJlZAorICogZm9yIHRoZSBnaXZlbiBjaGFubmVsIElELgorICovCisjZGVmaW5lIEhWX0ZBU1RfTERDX0dFVF9NQVBfVEFCTEUJMHhlYgorCisjZGVmaW5lIExEQ19DT1BZX0lOCTAKKyNkZWZpbmUgTERDX0NPUFlfT1VUCTEKKworLyogbGRjX2NvcHkoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfQ09QWQorICogQVJHMDoJY2hhbm5lbCBJRAorICogQVJHMToJTERDX0NPUFlfKiBkaXJlY3Rpb24gY29kZQorICogQVJHMjoJdGFyZ2V0IHJlYWwgYWRkcmVzcworICogQVJHMzoJbG9jYWwgcmVhbCBhZGRyZXNzCisgKiBBUkc0OglsZW5ndGggaW4gYnl0ZXMKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJYWN0dWFsIGxlbmd0aCBpbiBieXRlcworICovCisjZGVmaW5lIEhWX0ZBU1RfTERDX0NPUFkJCTB4ZWMKKworI2RlZmluZSBMRENfTUVNX1JFQUQJMQorI2RlZmluZSBMRENfTUVNX1dSSVRFCTIKKyNkZWZpbmUgTERDX01FTV9FWEVDCTQKKworLyogbGRjX21hcGluKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTERDX01BUElOCisgKiBBUkcwOgljaGFubmVsIElECisgKiBBUkcxOgljb29raWUKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJcmVhbCBhZGRyZXNzCisgKiBSRVQyOglMRENfTUVNXyogcGVybWlzc2lvbnMKKyAqLworI2RlZmluZSBIVl9GQVNUX0xEQ19NQVBJTgkJMHhlZAorCisvKiBsZGNfdW5tYXAoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9MRENfVU5NQVAKKyAqIEFSRzA6CXJlYWwgYWRkcmVzcworICogUkVUMDoJc3RhdHVzCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9MRENfVU5NQVAJCTB4ZWUKKworLyogbGRjX3Jldm9rZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0xEQ19SRVZPS0UKKyAqIEFSRzA6CWNvb2tpZQorICogQVJHMToJbGRjX210YWJsZV9lbnRyeSBjb29raWUKKyAqIFJFVDA6CXN0YXR1cworICovCisjZGVmaW5lIEhWX0ZBU1RfTERDX1JFVk9LRQkJMHhlZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX3R4X3Fjb25mKHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKKwkJCQkJdW5zaWduZWQgbG9uZyByYSwKKwkJCQkJdW5zaWduZWQgbG9uZyBudW1fZW50cmllcyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfdHhfcWluZm8odW5zaWduZWQgbG9uZyBjaGFubmVsLAorCQkJCQl1bnNpZ25lZCBsb25nICpyYSwKKwkJCQkJdW5zaWduZWQgbG9uZyAqbnVtX2VudHJpZXMpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX3R4X2dldF9zdGF0ZSh1bnNpZ25lZCBsb25nIGNoYW5uZWwsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nICpoZWFkX29mZiwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnRhaWxfb2ZmLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqY2hhbl9zdGF0ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfdHhfc2V0X3F0YWlsKHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgdGFpbF9vZmYpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX3J4X3Fjb25mKHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKKwkJCQkJdW5zaWduZWQgbG9uZyByYSwKKwkJCQkJdW5zaWduZWQgbG9uZyBudW1fZW50cmllcyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfcnhfcWluZm8odW5zaWduZWQgbG9uZyBjaGFubmVsLAorCQkJCQl1bnNpZ25lZCBsb25nICpyYSwKKwkJCQkJdW5zaWduZWQgbG9uZyAqbnVtX2VudHJpZXMpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX3J4X2dldF9zdGF0ZSh1bnNpZ25lZCBsb25nIGNoYW5uZWwsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nICpoZWFkX29mZiwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnRhaWxfb2ZmLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqY2hhbl9zdGF0ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfcnhfc2V0X3FoZWFkKHVuc2lnbmVkIGxvbmcgY2hhbm5lbCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgaGVhZF9vZmYpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX3NldF9tYXBfdGFibGUodW5zaWduZWQgbG9uZyBjaGFubmVsLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcmEsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBudW1fZW50cmllcyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfZ2V0X21hcF90YWJsZSh1bnNpZ25lZCBsb25nIGNoYW5uZWwsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqcmEsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbnVtX2VudHJpZXMpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfbGRjX2NvcHkodW5zaWduZWQgbG9uZyBjaGFubmVsLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGRpcl9jb2RlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHRndF9yYWRkciwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBsY2xfcmFkZHIsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCSAgICB1bnNpZ25lZCBsb25nICphY3R1YWxfbGVuKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2xkY19tYXBpbih1bnNpZ25lZCBsb25nIGNoYW5uZWwsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGNvb2tpZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKnJhLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqcGVybSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfdW5tYXAodW5zaWduZWQgbG9uZyByYSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9sZGNfcmV2b2tlKHVuc2lnbmVkIGxvbmcgY29va2llLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbXRlX2Nvb2tpZSk7CisjZW5kaWYKKwogLyogUGVyZm9ybWFuY2UgY291bnRlciBzZXJ2aWNlcy4gICovCiAKICNkZWZpbmUgSFZfUEVSRl9KQlVTX1BFUkZfQ1RSTF9SRUcJMHgwMApAQCAtMjEyMCw5ICsyNzk4LDEzNyBAQAogICovCiAjZGVmaW5lIEhWX0ZBU1RfTU1VU1RBVF9JTkZPCQkweDEwMwogCisvKiBOQ1MgY3J5cHRvIHNlcnZpY2VzICAqLworCisvKiBuY3NfcmVxdWVzdCgpIHN1Yi1mdW5jdGlvbiBudW1iZXJzICovCisjZGVmaW5lIEhWX05DU19RQ09ORgkJCTB4MDEKKyNkZWZpbmUgSFZfTkNTX1FUQUlMX1VQREFURQkJMHgwMgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IGh2X25jc19xdWV1ZV9lbnRyeSB7CisJLyogTUFVIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nCW1hdV9jb250cm9sOworI2RlZmluZSBNQVVfQ09OVFJPTF9JTlZfUEFSSVRZCTB4MDAwMDAwMDAwMDAwMjAwMAorI2RlZmluZSBNQVVfQ09OVFJPTF9TVFJBTkQJMHgwMDAwMDAwMDAwMDAxODAwCisjZGVmaW5lIE1BVV9DT05UUk9MX0JVU1kJMHgwMDAwMDAwMDAwMDAwNDAwCisjZGVmaW5lIE1BVV9DT05UUk9MX0lOVAkJMHgwMDAwMDAwMDAwMDAwMjAwCisjZGVmaW5lIE1BVV9DT05UUk9MX09QCQkweDAwMDAwMDAwMDAwMDAxYzAKKyNkZWZpbmUgTUFVX0NPTlRST0xfT1BfU0hJRlQJNgorI2RlZmluZSBNQVVfT1BfTE9BRF9NQV9NRU1PUlkJMHgwCisjZGVmaW5lIE1BVV9PUF9TVE9SRV9NQV9NRU1PUlkJMHgxCisjZGVmaW5lIE1BVV9PUF9NT0RVTEFSX01VTFQJMHgyCisjZGVmaW5lIE1BVV9PUF9NT0RVTEFSX1JFRFVDRQkweDMKKyNkZWZpbmUgTUFVX09QX01PRFVMQVJfRVhQX0xPT1AJMHg0CisjZGVmaW5lIE1BVV9DT05UUk9MX0xFTgkJMHgwMDAwMDAwMDAwMDAwMDNmCisjZGVmaW5lIE1BVV9DT05UUk9MX0xFTl9TSElGVAkwCisKKwkvKiBSZWFsIGFkZHJlc3Mgb2YgYnl0ZXMgdG8gbG9hZCBvciBzdG9yZSBieXRlcworCSAqIGludG8vb3V0LW9mIHRoZSBNQVUuCisJICovCisJdW5zaWduZWQgbG9uZwltYXVfbXBhOworCisJLyogTW9kdWxhciBBcml0aG1ldGljIE1BIE9mZnNldCBSZWdpc3Rlci4gICovCisJdW5zaWduZWQgbG9uZwltYXVfbWE7CisKKwkvKiBNb2R1bGFyIEFyaXRobWV0aWMgTiBQcmltZSBSZWdpc3Rlci4gICovCisJdW5zaWduZWQgbG9uZwltYXVfbnA7Cit9OworCitzdHJ1Y3QgaHZfbmNzX3Fjb25mX2FyZyB7CisJdW5zaWduZWQgbG9uZwltaWQ7ICAgICAgLyogTUFVIElELCAxIHBlciBjb3JlIG9uIE5pYWdhcmEgKi8KKwl1bnNpZ25lZCBsb25nCWJhc2U7ICAgICAvKiBSZWFsIGFkZHJlc3MgYmFzZSBvZiBxdWV1ZSAqLworCXVuc2lnbmVkIGxvbmcJZW5kOwkgIC8qIFJlYWwgYWRkcmVzcyBlbmQgb2YgcXVldWUgKi8KKwl1bnNpZ25lZCBsb25nCW51bV9lbnRzOyAvKiBOdW1iZXIgb2YgZW50cmllcyBpbiBxdWV1ZSAqLworfTsKKworc3RydWN0IGh2X25jc19xdGFpbF91cGRhdGVfYXJnIHsKKwl1bnNpZ25lZCBsb25nCW1pZDsgICAgICAvKiBNQVUgSUQsIDEgcGVyIGNvcmUgb24gTmlhZ2FyYSAqLworCXVuc2lnbmVkIGxvbmcJdGFpbDsgICAgIC8qIE5ldyB0YWlsIGluZGV4IHRvIHVzZSAqLworCXVuc2lnbmVkIGxvbmcJc3luY2ZsYWc7IC8qIG9ubHkgU1lOQ0ZMQUdfU1lOQyBpcyBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBIVl9OQ1NfU1lOQ0ZMQUdfU1lOQwkweDAwCisjZGVmaW5lIEhWX05DU19TWU5DRkxBR19BU1lOQwkweDAxCit9OworI2VuZGlmCisKKy8qIG5jc19yZXF1ZXN0KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTkNTX1JFUVVFU1QKKyAqIEFSRzA6CU5DUyBzdWItZnVuY3Rpb24KKyAqIEFSRzE6CXN1Yi1mdW5jdGlvbiBhcmd1bWVudCByZWFsIGFkZHJlc3MKKyAqIEFSRzI6CXNpemUgaW4gYnl0ZXMgb2Ygc3ViLWZ1bmN0aW9uIGFyZ3VtZW50CisgKiBSRVQwOglzdGF0dXMKKyAqCisgKiBUaGUgTUFVIGNoaXAgb2YgdGhlIE5pYWdhcmEgcHJvY2Vzc29yIGlzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlCisgKiB0byBwcml2aWxlZ2VkIGNvZGUsIGluc3RlYWQgaXQgaXMgcHJvZ3JhbW1lZCBpbmRpcmVjdGx5IHZpYSB0aGlzCisgKiBoeXBlcnZpc29yIEFQSS4KKyAqCisgKiBUaGUgaW50ZXJmYWNlcyBkZWZpbmVzIGEgcXVldWUgb2YgTUFVIG9wZXJhdGlvbnMgdG8gcGVyZm9ybS4KKyAqIFByaXZpbGVnZWQgY29kZSByZWdpc3RlcnMgYSBxdWV1ZSB3aXRoIHRoZSBoeXBlcnZpc29yIGJ5IGludm9raW5nCisgKiB0aGlzIEhWQVBJIHdpdGggdGhlIEhWX05DU19RQ09ORiBzdWItZnVuY3Rpb24sIHdoaWNoIGRlZmluZXMgdGhlCisgKiBiYXNlLCBlbmQsIGFuZCBudW1iZXIgb2YgZW50cmllcyBvZiB0aGUgcXVldWUuICBFYWNoIHF1ZXVlIGVudHJ5CisgKiBjb250YWlucyBhIE1BVSByZWdpc3RlciBzdHJ1Y3QgYmxvY2suCisgKgorICogVGhlIHByaXZpbGVnZWQgY29kZSB0aGVuIHByb2NlZWRzIHRvIGFkZCBlbnRyaWVzIHRvIHRoZSBxdWV1ZSBhbmQKKyAqIHRoZW4gaW52b2tlIHRoZSBIVl9OQ1NfUVRBSUxfVVBEQVRFIHN1Yi1mdW5jdGlvbi4gIFNpbmNlIG9ubHkKKyAqIHN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBoeXBlcnZpc29yLAorICogSFZfTkNTX1FUQUlMX1VQREFURSB3aWxsIHJ1biBhbGwgdGhlIHBlbmRpbmcgcXVldWUgZW50cmllcyB0bworICogY29tcGxldGlvbiBhbmQgcmV0dXJuIEhWX0VPSywgb3IgcmV0dXJuIGFuIGVycm9yIGNvZGUuCisgKgorICogVGhlIHJlYWwgYWRkcmVzcyBvZiB0aGUgc3ViLWZ1bmN0aW9uIGFyZ3VtZW50IG11c3QgYmUgYWxpZ25lZCBvbiBhdAorICogbGVhc3QgYW4gOC1ieXRlIGJvdW5kYXJ5LgorICoKKyAqIFRoZSB0YWlsIGFyZ3VtZW50IG9mIEhWX05DU19RVEFJTF9VUERBVEUgaXMgYW4gaW5kZXgsIG5vdCBhIGJ5dGUKKyAqIG9mZnNldCwgaW50byB0aGUgcXVldWUgYW5kIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRoZSAnbnVtX2VudHMnCisgKiBhcmd1bWVudCBnaXZlbiBpbiB0aGUgSFZfTkNTX1FDT05GIGNhbGwuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9OQ1NfUkVRVUVTVAkJMHgxMTAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X25jc19yZXF1ZXN0KHVuc2lnbmVkIGxvbmcgcmVxdWVzdCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmdfcmEsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnX3NpemUpOworI2VuZGlmCisKKyNkZWZpbmUgSFZfRkFTVF9GSVJFX0dFVF9QRVJGUkVHCTB4MTIwCisjZGVmaW5lIEhWX0ZBU1RfRklSRV9TRVRfUEVSRlJFRwkweDEyMQorCiAvKiBGdW5jdGlvbiBudW1iZXJzIGZvciBIVl9DT1JFX1RSQVAuICAqLwotI2RlZmluZSBIVl9DT1JFX1ZFUgkJCTB4MDAKKyNkZWZpbmUgSFZfQ09SRV9TRVRfVkVSCQkJMHgwMAogI2RlZmluZSBIVl9DT1JFX1BVVENIQVIJCQkweDAxCiAjZGVmaW5lIEhWX0NPUkVfRVhJVAkJCTB4MDIKKyNkZWZpbmUgSFZfQ09SRV9HRVRfVkVSCQkJMHgwMworCisvKiBIeXBlcnZpc29yIEFQSSBncm91cHMgZm9yIHVzZSB3aXRoIEhWX0NPUkVfU0VUX1ZFUiBhbmQKKyAqIEhWX0NPUkVfR0VUX1ZFUi4KKyAqLworI2RlZmluZSBIVl9HUlBfU1VONFYJCQkweDAwMDAKKyNkZWZpbmUgSFZfR1JQX0NPUkUJCQkweDAwMDEKKyNkZWZpbmUgSFZfR1JQX0lOVFIJCQkweDAwMDIKKyNkZWZpbmUgSFZfR1JQX1NPRlRfU1RBVEUJCTB4MDAwMworI2RlZmluZSBIVl9HUlBfUENJCQkJMHgwMTAwCisjZGVmaW5lIEhWX0dSUF9MRE9NCQkJMHgwMTAxCisjZGVmaW5lIEhWX0dSUF9TVkNfQ0hBTgkJCTB4MDEwMgorI2RlZmluZSBIVl9HUlBfTkNTCQkJMHgwMTAzCisjZGVmaW5lIEhWX0dSUF9OSUFHX1BFUkYJCTB4MDIwMAorI2RlZmluZSBIVl9HUlBfRklSRV9QRVJGCQkweDAyMDEKKyNkZWZpbmUgSFZfR1JQX0RJQUcJCQkweDAzMDAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2dldF92ZXJzaW9uKHVuc2lnbmVkIGxvbmcgZ3JvdXAsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm1ham9yLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICptaW5vcik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9zZXRfdmVyc2lvbih1bnNpZ25lZCBsb25nIGdyb3VwLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG1ham9yLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG1pbm9yLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICphY3R1YWxfbWlub3IpOworCitleHRlcm4gaW50IHN1bjR2X2h2YXBpX3JlZ2lzdGVyKHVuc2lnbmVkIGxvbmcgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgbWFqb3IsCisJCQkJdW5zaWduZWQgbG9uZyAqbWlub3IpOworZXh0ZXJuIHZvaWQgc3VuNHZfaHZhcGlfdW5yZWdpc3Rlcih1bnNpZ25lZCBsb25nIGdyb3VwKTsKK2V4dGVybiBpbnQgc3VuNHZfaHZhcGlfZ2V0KHVuc2lnbmVkIGxvbmcgZ3JvdXAsCisJCQkgICB1bnNpZ25lZCBsb25nICptYWpvciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKm1pbm9yKTsKK2V4dGVybiB2b2lkIHN1bjR2X2h2YXBpX2luaXQodm9pZCk7CisjZW5kaWYKIAogI2VuZGlmIC8qICEoX1NQQVJDNjRfSFlQRVJWSVNPUl9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva2RlYnVnLmgKaW5kZXggMTEyNTFiZC4uOTk3NGM3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9rZGVidWcuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2tkZWJ1Zy5oCkBAIC03LDE5ICs3LDE5IEBACiAKIHN0cnVjdCBwdF9yZWdzOwogCi1zdHJ1Y3QgZGllX2FyZ3MgewotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCWNvbnN0IGNoYXIgKnN0cjsKLQlsb25nIGVycjsKLQlpbnQgdHJhcG5yOwotCWludCBzaWducjsKLX07Ci0KLWV4dGVybiBpbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwotZXh0ZXJuIGludCByZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgdW5yZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLWV4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgc3BhcmM2NGRpZV9jaGFpbjsKKy8qCisgKiBUaGVzZSBhcmUgb25seSBoZXJlIGJlY2F1c2Uga3Byb2Jlcy5jIHdhbnRzIHRoZW0gdG8gaW1wbGVtZW50IGEKKyAqIGJsYXRhbnQgbGF5ZXJpbmcgdmlvbGF0aW9uLiAgV2lsbCBob3BlZnVsbHkgZ28gYXdheSBzb29uIG9uY2UgYWxsCisgKiBhcmNoaXRlY3R1cmVzIGFyZSB1cGRhdGVkLgorICovCitzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCB1bnJlZ2lzdGVyX3BhZ2VfZmF1bHRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gMDsKK30KIAogZXh0ZXJuIHZvaWQgYmFkX3RyYXAoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CiAKQEAgLTMxLDIxICszMSw3IEBACiAJRElFX0RJRSwKIAlESUVfVFJBUCwKIAlESUVfVFJBUF9UTDEsCi0JRElFX0dQRiwKIAlESUVfQ0FMTCwKLQlESUVfUEFHRV9GQVVMVCwKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9kaWUoZW51bSBkaWVfdmFsIHZhbCxjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJICAgICBsb25nIGVyciwgaW50IHRyYXAsIGludCBzaWcpCi17Ci0Jc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7IC5yZWdzCQk9IHJlZ3MsCi0JCQkJIC5zdHIJCT0gc3RyLAotCQkJCSAuZXJyCQk9IGVyciwKLQkJCQkgLnRyYXBucgk9IHRyYXAsCi0JCQkJIC5zaWducgkJPSBzaWcgfTsKLQotCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmc3BhcmM2NGRpZV9jaGFpbiwgdmFsLCAmYXJncyk7Ci19Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaAppbmRleCBiZWNjMzhmLi5hMzMxYjdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaApAQCAtNDMsNCArNDMsNSBAQAogCiBleHRlcm4gaW50IGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpOwogI2VuZGlmIC8qIF9TUEFSQzY0X0tQUk9CRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9sb2NhbC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9sb2NhbC5oCmluZGV4IGRmZGUxMTVhLi5jMTFjNTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2xvY2FsLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9sb2NhbC5oCkBAIC0xLDQwICsxIEBACi0jaWZuZGVmIF9BUkNIX1NQQVJDNjRfTE9DQUxfSAotI2RlZmluZSBfQVJDSF9TUEFSQzY0X0xPQ0FMX0gKLQotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotdHlwZWRlZiBhdG9taWM2NF90IGxvY2FsX3Q7Ci0KLSNkZWZpbmUgTE9DQUxfSU5JVChpKQlBVE9NSUM2NF9JTklUKGkpCi0jZGVmaW5lIGxvY2FsX3JlYWQodikJYXRvbWljNjRfcmVhZCh2KQotI2RlZmluZSBsb2NhbF9zZXQodixpKQlhdG9taWM2NF9zZXQodixpKQotCi0jZGVmaW5lIGxvY2FsX2luYyh2KQlhdG9taWM2NF9pbmModikKLSNkZWZpbmUgbG9jYWxfZGVjKHYpCWF0b21pYzY0X2RlYyh2KQotI2RlZmluZSBsb2NhbF9hZGQoaSwgdikJYXRvbWljNjRfYWRkKGksIHYpCi0jZGVmaW5lIGxvY2FsX3N1YihpLCB2KQlhdG9taWM2NF9zdWIoaSwgdikKLQotI2RlZmluZSBfX2xvY2FsX2luYyh2KQkJKCh2KS0+Y291bnRlcisrKQotI2RlZmluZSBfX2xvY2FsX2RlYyh2KQkJKCh2KS0+Y291bnRlci0tKQotI2RlZmluZSBfX2xvY2FsX2FkZChpLHYpCSgodiktPmNvdW50ZXIrPShpKSkKLSNkZWZpbmUgX19sb2NhbF9zdWIoaSx2KQkoKHYpLT5jb3VudGVyLT0oaSkpCi0KLS8qIFVzZSB0aGVzZSBmb3IgcGVyLWNwdSBsb2NhbF90IHZhcmlhYmxlczogb24gc29tZSBhcmNocyB0aGV5IGFyZQotICogbXVjaCBtb3JlIGVmZmljaWVudCB0aGFuIHRoZXNlIG5haXZlIGltcGxlbWVudGF0aW9ucy4gIE5vdGUgdGhleSB0YWtlCi0gKiBhIHZhcmlhYmxlLCBub3QgYW4gYWRkcmVzcy4KLSAqLwotI2RlZmluZSBjcHVfbG9jYWxfcmVhZCh2KQlsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfc2V0KHYsIGkpCWxvY2FsX3NldCgmX19nZXRfY3B1X3Zhcih2KSwgKGkpKQotCi0jZGVmaW5lIGNwdV9sb2NhbF9pbmModikJbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKHYpKQotI2RlZmluZSBjcHVfbG9jYWxfZGVjKHYpCWxvY2FsX2RlYygmX19nZXRfY3B1X3Zhcih2KSkKLSNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCB2KQlsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKLSNkZWZpbmUgY3B1X2xvY2FsX3N1YihpLCB2KQlsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKLQotI2RlZmluZSBfX2NwdV9sb2NhbF9pbmModikJX19sb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyh2KQlfX2xvY2FsX2RlYygmX19nZXRfY3B1X3Zhcih2KSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIHYpCV9fbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCB2KQlfX2xvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQotCi0jZW5kaWYgLyogX0FSQ0hfU1BBUkM2NF9MT0NBTF9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbHN1LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2xzdS5oCmluZGV4IGU1MzI5YzcuLjc5ZjEwOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbHN1LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9sc3UuaApAQCAtMiw3ICsyLDcgQEAKICNpZm5kZWYgX1NQQVJDNjRfTFNVX0gKICNkZWZpbmUgX1NQQVJDNjRfTFNVX0gKIAotI2luY2x1ZGUgPGFzbS9jb25zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CiAKIC8qIExTVSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIExTVV9DT05UUk9MX1BNIF9BQygweDAwMDAwMWZlMDAwMDAwMDAsVUwpIC8qIFBoeXMtd2F0Y2hwb2ludCBieXRlIG1hc2sqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tZGVzYy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tZGVzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNGViOGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21kZXNjLmgKQEAgLTAsMCArMSwzOSBAQAorI2lmbmRlZiBfU1BBUkM2NF9NREVTQ19ICisjZGVmaW5lIF9TUEFSQzY0X01ERVNDX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKworc3RydWN0IG1kZXNjX25vZGU7CitzdHJ1Y3QgbWRlc2NfYXJjIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwlzdHJ1Y3QgbWRlc2Nfbm9kZQkqYXJjOworfTsKKworc3RydWN0IG1kZXNjX25vZGUgeworCWNvbnN0IGNoYXIJCSpuYW1lOworCXU2NAkJCW5vZGU7CisJdW5zaWduZWQgaW50CQl1bmlxdWVfaWQ7CisJdW5zaWduZWQgaW50CQludW1fYXJjczsKKwlzdHJ1Y3QgcHJvcGVydHkJCSpwcm9wZXJ0aWVzOworCXN0cnVjdCBtZGVzY19ub2RlCSpoYXNoX25leHQ7CisJc3RydWN0IG1kZXNjX25vZGUJKmFsbG5vZGVzX25leHQ7CisJc3RydWN0IG1kZXNjX2FyYwlhcmNzWzBdOworfTsKKworZXh0ZXJuIHN0cnVjdCBtZGVzY19ub2RlICptZF9maW5kX25vZGVfYnlfbmFtZShzdHJ1Y3QgbWRlc2Nfbm9kZSAqZnJvbSwKKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOworI2RlZmluZSBtZF9mb3JfZWFjaF9ub2RlX2J5X25hbWUoX19tbiwgX19uYW1lKSBcCisJZm9yIChfX21uID0gbWRfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgX19uYW1lKTsgX19tbjsgXAorCSAgICAgX19tbiA9IG1kX2ZpbmRfbm9kZV9ieV9uYW1lKF9fbW4sIF9fbmFtZSkpCisKK2V4dGVybiBzdHJ1Y3QgcHJvcGVydHkgKm1kX2ZpbmRfcHJvcGVydHkoY29uc3Qgc3RydWN0IG1kZXNjX25vZGUgKm1wLAorCQkJCQkgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJIGludCAqbGVucCk7CitleHRlcm4gY29uc3Qgdm9pZCAqbWRfZ2V0X3Byb3BlcnR5KGNvbnN0IHN0cnVjdCBtZGVzY19ub2RlICptcCwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIGludCAqbGVucCk7CisKK2V4dGVybiB2b2lkIHN1bjR2X21kZXNjX2luaXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW11LmgKaW5kZXggNzBhZjRiNi4uOGFiYzU4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdS5oCkBAIC0xLDggKzEsOCBAQAogI2lmbmRlZiBfX01NVV9ICiAjZGVmaW5lIF9fTU1VX0gKIAorI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vY29uc3QuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogCiAjZGVmaW5lIENUWF9OUl9CSVRTCQkxMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGVucHJvbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGVucHJvbS5oCmluZGV4IGUwMWI4MDUuLjI2ZWMwNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvb3BlbnByb20uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wZW5wcm9tLmgKQEAgLTE3Nyw3ICsxNzcsNyBAQAogLyogTW9yZSBmdW4gUFJPTSBzdHJ1Y3R1cmVzIGZvciBkZXZpY2UgcHJvYmluZy4gKi8KICNkZWZpbmUgUFJPTVJFR19NQVggICAgIDI0CiAjZGVmaW5lIFBST01WQUREUl9NQVggICAxNgotI2RlZmluZSBQUk9NSU5UUl9NQVggICAgMTUKKyNkZWZpbmUgUFJPTUlOVFJfTUFYICAgIDMyCiAKIHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyB7CiAJdW5zaWduZWQgd2hpY2hfaW87CS8qIGhpIHBhcnQgb2YgcGh5c2ljYWwgYWRkcmVzcwkJCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L29wbGliLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wbGliLmgKaW5kZXggNmEwZGEzYi4uOTkyZjlmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGxpYi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvb3BsaWIuaApAQCAtMzE2LDExICszMTYsOCBAQAogCQkJCiBleHRlcm4gaW50IHByb21fcGF0aHRvaW5vZGUoY29uc3QgY2hhciAqcGF0aCk7CiBleHRlcm4gaW50IHByb21faW5zdDJwa2coaW50KTsKLQotLyogQ1BVIHByb2JpbmcgaGVscGVycy4gICovCi1zdHJ1Y3QgZGV2aWNlX25vZGU7Ci1pbnQgY3B1X2ZpbmRfYnlfaW5zdGFuY2UoaW50IGluc3RhbmNlLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKipkZXZfbm9kZSwgaW50ICptaWQpOwotaW50IGNwdV9maW5kX2J5X21pZChpbnQgbWlkLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKipwcm9tX25vZGUpOworZXh0ZXJuIGludCBwcm9tX3NlcnZpY2VfZXhpc3RzKGNvbnN0IGNoYXIgKnNlcnZpY2VfbmFtZSk7CitleHRlcm4gdm9pZCBwcm9tX3N1bjR2X2d1ZXN0X3NvZnRfc3RhdGUodm9pZCk7CiAKIC8qIENsaWVudCBpbnRlcmZhY2UgbGV2ZWwgcm91dGluZXMuICovCiBleHRlcm4gdm9pZCBwcm9tX3NldF90cmFwX3RhYmxlKHVuc2lnbmVkIGxvbmcgdGJhKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYWdlLmgKaW5kZXggZmY3MzZlYS4uN2FmMTA3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYWdlLmgKQEAgLTUsNyArNSw3IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxhc20vY29uc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfOEtCKQogI2RlZmluZSBQQUdFX1NISUZUICAgMTMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGJtLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BibS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDA4Y2VjYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BibS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qIHBibS5oOiBVbHRyYVNwYXJjIFBDSSBjb250cm9sbGVyIHNvZnR3YXJlIHN0YXRlLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwNyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCi0gKi8KLQotI2lmbmRlZiBfX1NQQVJDNjRfUEJNX0gKLSNkZWZpbmUgX19TUEFSQzY0X1BCTV9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbXNpLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgotI2luY2x1ZGUgPGFzbS9pb21tdS5oPgotCi0vKiBUaGUgYWJzdHJhY3Rpb24gdXNlZCBoZXJlIGlzIHRoYXQgdGhlcmUgYXJlIFBDSSBjb250cm9sbGVycywKLSAqIGVhY2ggd2l0aCBvbmUgKFNhYnJlKSBvciB0d28gKFBTWUNITy9TQ0hJWk8pIFBDSSBidXMgbW9kdWxlcwotICogdW5kZXJuZWF0aC4gIEVhY2ggUENJIGJ1cyBtb2R1bGUgdXNlcyBhbiBJT01NVSAoc2hhcmVkIGJ5IGJvdGgKLSAqIFBCTXMgb2YgYSBjb250cm9sbGVyLCBvciBwZXItUEJNKSwgYW5kIGlmIGEgc3RyZWFtaW5nIGJ1ZmZlcgotICogaXMgcHJlc2VudCwgZWFjaCBQQ0kgYnVzIG1vZHVsZSBoYXMgaXQncyBvd24uIChpZS4gdGhlIElPTU1VCi0gKiBtaWdodCBiZSBzaGFyZWQgYmV0d2VlbiBQQk1zLCB0aGUgU1RDIGlzIG5ldmVyIHNoYXJlZCkKLSAqIEZ1cnRoZXJtb3JlLCBlYWNoIFBDSSBidXMgbW9kdWxlIGNvbnRyb2xzIGl0J3Mgb3duIGF1dG9ub21vdXMKLSAqIFBDSSBidXMuCi0gKi8KLQotZXh0ZXJuIHZvaWQgcGNpX2lvbW11X3RhYmxlX2luaXQoc3RydWN0IGlvbW11ICppb21tdSwgaW50IHRzYnNpemUsIHUzMiBkbWFfb2Zmc2V0LCB1MzIgZG1hX2FkZHJfbWFzayk7Ci0KLSNkZWZpbmUgUENJX1NUQ19GTFVTSEZMQUdfSU5JVChTVEMpIFwKLQkoKigoU1RDKS0+c3RyYnVmX2ZsdXNoZmxhZykgPSAwVUwpCi0jZGVmaW5lIFBDSV9TVENfRkxVU0hGTEFHX1NFVChTVEMpIFwKLQkoKigoU1RDKS0+c3RyYnVmX2ZsdXNoZmxhZykgIT0gMFVMKQotCi0vKiBUaGVyZSBjYW4gYmUgcXVpdGUgYSBmZXcgcmFuZ2VzIGFuZCBpbnRlcnJ1cHQgbWFwcyBvbiBhIFBDSQotICogc2VnbWVudC4gIFRodXMuLi4KLSAqLwotI2RlZmluZSBQUk9NX1BDSVJOR19NQVgJCTY0Ci0jZGVmaW5lIFBST01fUENJSU1BUF9NQVgJNjQKLQotc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm87Ci0KLXN0cnVjdCBwY2lfcGJtX2luZm8gewotCS8qIFBDSSBjb250cm9sbGVyIHdlIHNpdCB1bmRlci4gKi8KLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbwkqcGFyZW50OwotCi0JLyogUGh5c2ljYWwgYWRkcmVzcyBiYXNlIG9mIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLiAqLwotCXVuc2lnbmVkIGxvbmcJCQljb250cm9sbGVyX3JlZ3M7Ci0KLQkvKiBQaHlzaWNhbCBhZGRyZXNzIGJhc2Ugb2YgUEJNIHJlZ2lzdGVycy4gKi8KLQl1bnNpZ25lZCBsb25nCQkJcGJtX3JlZ3M7Ci0KLQkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIERNQSBzeW5jIHJlZ2lzdGVyLCBpZiBhbnkuICAqLwotCXVuc2lnbmVkIGxvbmcJCQlzeW5jX3JlZzsKLQotCS8qIE9wYXF1ZSAzMi1iaXQgc3lzdGVtIGJ1cyBQb3J0IElELiAqLwotCXUzMgkJCQlwb3J0aWQ7Ci0KLQkvKiBPcGFxdWUgMzItYml0IGhhbmRsZSB1c2VkIGZvciBoeXBlcnZpc29yIGNhbGxzLiAgKi8KLQl1MzIJCQkJZGV2aGFuZGxlOwotCi0JLyogQ2hpcHNldCB2ZXJzaW9uIGluZm9ybWF0aW9uLiAqLwotCWludAkJCQljaGlwX3R5cGU7Ci0jZGVmaW5lIFBCTV9DSElQX1RZUEVfU0FCUkUJCTEKLSNkZWZpbmUgUEJNX0NISVBfVFlQRV9QU1lDSE8JCTIKLSNkZWZpbmUgUEJNX0NISVBfVFlQRV9TQ0hJWk8JCTMKLSNkZWZpbmUgUEJNX0NISVBfVFlQRV9TQ0hJWk9fUExVUwk0Ci0jZGVmaW5lIFBCTV9DSElQX1RZUEVfVE9NQVRJTExPCQk1Ci0JaW50CQkJCWNoaXBfdmVyc2lvbjsKLQlpbnQJCQkJY2hpcF9yZXZpc2lvbjsKLQotCS8qIE5hbWUgdXNlZCBmb3IgdG9wLWxldmVsIHJlc291cmNlcy4gKi8KLQljaGFyCQkJCSpuYW1lOwotCi0JLyogT0JQIHNwZWNpZmljIGluZm9ybWF0aW9uLiAqLwotCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKnByb21fbm9kZTsKLQl1NjQJCQkJaW5vX2JpdG1hcDsKLQotCS8qIFBCTSBJL08gYW5kIE1lbW9yeSBzcGFjZSByZXNvdXJjZXMuICovCi0Jc3RydWN0IHJlc291cmNlCQkJaW9fc3BhY2U7Ci0Jc3RydWN0IHJlc291cmNlCQkJbWVtX3NwYWNlOwotCi0JLyogQmFzZSBvZiBQQ0kgQ29uZmlnIHNwYWNlLCBjYW4gYmUgcGVyLVBCTSBvciBzaGFyZWQuICovCi0JdW5zaWduZWQgbG9uZwkJCWNvbmZpZ19zcGFjZTsKLQotCS8qIFN0YXRlIG9mIDY2TUh6IGNhcGFiaWxpdGllcyBvbiB0aGlzIFBCTS4gKi8KLQlpbnQJCQkJaXNfNjZtaHpfY2FwYWJsZTsKLQlpbnQJCQkJYWxsX2RldnNfNjZtaHo7Ci0KLSNpZmRlZiBDT05GSUdfUENJX01TSQotCS8qIE1TSSBpbmZvLiAgKi8KLQl1MzIJCQkJbXNpcV9udW07Ci0JdTMyCQkJCW1zaXFfZW50X2NvdW50OwotCXUzMgkJCQltc2lxX2ZpcnN0OwotCXUzMgkJCQltc2lxX2ZpcnN0X2RldmlubzsKLQl1MzIJCQkJbXNpX251bTsKLQl1MzIJCQkJbXNpX2ZpcnN0OwotCXUzMgkJCQltc2lfZGF0YV9tYXNrOwotCXUzMgkJCQltc2l4X2RhdGFfd2lkdGg7Ci0JdTY0CQkJCW1zaTMyX3N0YXJ0OwotCXU2NAkJCQltc2k2NF9zdGFydDsKLQl1MzIJCQkJbXNpMzJfbGVuOwotCXUzMgkJCQltc2k2NF9sZW47Ci0Jdm9pZAkJCQkqbXNpX3F1ZXVlczsKLQl1bnNpZ25lZCBsb25nCQkJKm1zaV9iaXRtYXA7Ci0jZW5kaWYgLyogIShDT05GSUdfUENJX01TSSkgKi8KLQotCS8qIFRoaXMgUEJNJ3Mgc3RyZWFtaW5nIGJ1ZmZlci4gKi8KLQlzdHJ1Y3Qgc3RyYnVmCQkJc3RjOwotCi0JLyogSU9NTVUgc3RhdGUsIHBvdGVudGlhbGx5IHNoYXJlZCBieSBib3RoIFBCTSBzZWdtZW50cy4gKi8KLQlzdHJ1Y3QgaW9tbXUJCQkqaW9tbXU7Ci0KLQkvKiBOb3cgdGhpbmdzIGZvciB0aGUgYWN0dWFsIFBDSSBidXMgcHJvYmVzLiAqLwotCXVuc2lnbmVkIGludAkJCXBjaV9maXJzdF9idXNubzsKLQl1bnNpZ25lZCBpbnQJCQlwY2lfbGFzdF9idXNubzsKLQlzdHJ1Y3QgcGNpX2J1cwkJCSpwY2lfYnVzOwotfTsKLQotc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gewotCS8qIExpc3Qgb2YgYWxsIFBDSSBjb250cm9sbGVycy4gKi8KLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbwkqbmV4dDsKLQotCS8qIEVhY2ggY29udHJvbGxlciBnZXRzIGEgdW5pcXVlIGluZGV4LCB1c2VkIG1vc3RseSBmb3IKLQkgKiBlcnJvciBsb2dnaW5nIHB1cnBvc2VzLgotCSAqLwotCWludAkJCQlpbmRleDsKLQotCS8qIFRoZSBQQ0kgYnVzIG1vZHVsZXMgY29udHJvbGxlZCBieSB1cy4gKi8KLQlzdHJ1Y3QgcGNpX3BibV9pbmZvCQlwYm1fQTsKLQlzdHJ1Y3QgcGNpX3BibV9pbmZvCQlwYm1fQjsKLQotCS8qIE9wZXJhdGlvbnMgd2hpY2ggYXJlIGNvbnRyb2xsZXIgc3BlY2lmaWMuICovCi0Jdm9pZCAoKnNjYW5fYnVzKShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqKTsKLQotI2lmZGVmIENPTkZJR19QQ0lfTVNJCi0JaW50ICgqc2V0dXBfbXNpX2lycSkodW5zaWduZWQgaW50ICp2aXJ0X2lycV9wLCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCSAgICAgc3RydWN0IG1zaV9kZXNjICplbnRyeSk7Ci0Jdm9pZCAoKnRlYXJkb3duX21zaV9pcnEpKHVuc2lnbmVkIGludCB2aXJ0X2lycSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpOwotI2VuZGlmCi0KLQkvKiBOb3cgdGhpbmdzIGZvciB0aGUgYWN0dWFsIFBDSSBidXMgcHJvYmVzLiAqLwotCXN0cnVjdCBwY2lfb3BzCQkJKnBjaV9vcHM7Ci0JdW5zaWduZWQgaW50CQkJcGNpX2ZpcnN0X2J1c25vOwotCXVuc2lnbmVkIGludAkJCXBjaV9sYXN0X2J1c25vOwotfTsKLQotI2VuZGlmIC8qICEoX19TUEFSQzY0X1BCTV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmgKaW5kZXggY2VkOGNiZC4uODhkYjg3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oCkBAIC01LDcgKzUsOCBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCi1leHRlcm4gdm9pZCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpOworI2RlZmluZSBzZXR1cF9wZXJfY3B1X2FyZWFzKCkJCQlkbyB7IH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCByZWFsX3NldHVwX3Blcl9jcHVfYXJlYXModm9pZCk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9iYXNlOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X3NoaWZ0OwpAQCAtMzQsNiArMzUsNyBAQAogfSB3aGlsZSAoMCkKICNlbHNlIC8qICEgU01QICovCiAKKyNkZWZpbmUgcmVhbF9zZXR1cF9wZXJfY3B1X2FyZWFzKCkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgREVGSU5FX1BFUl9DUFUodHlwZSwgbmFtZSkgXAogICAgIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKaW5kZXggNDY3MDVlZi4uOWU4MGFkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKQEAgLTE1LDEzICsxNSwxMyBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KICNpbmNsdWRlIDxhc20vYXNpLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9jb25zdC5oPgogCiAvKiBUaGUga2VybmVsIGltYWdlIG9jY3VwaWVzIDB4NDAwMDAwMCB0byAweDEwMDAwMDAgKDRNQiAtLT4gMzJNQikuCiAgKiBUaGUgcGFnZSBjb3B5IGJsb2Nrb3BzIGNhbiB1c2UgMHgyMDAwMDAwIHRvIDB4NDAwMDAwMC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9sbC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wb2xsLmgKaW5kZXggYWI2YjBkMS4uZWJlZWIzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wb2xsLmgKQEAgLTEsMjQgKzEsMTIgQEAKICNpZm5kZWYgX19TUEFSQzY0X1BPTExfSAogI2RlZmluZSBfX1NQQVJDNjRfUE9MTF9ICiAKLSNkZWZpbmUgUE9MTElOCQkgIDEKLSNkZWZpbmUgUE9MTFBSSQkJICAyCi0jZGVmaW5lIFBPTExPVVQJCSAgNAotI2RlZmluZSBQT0xMRVJSCQkgIDgKLSNkZWZpbmUgUE9MTEhVUAkJIDE2Ci0jZGVmaW5lIFBPTExOVkFMCSAzMgotI2RlZmluZSBQT0xMUkROT1JNCSA2NAogI2RlZmluZSBQT0xMV1JOT1JNCVBPTExPVVQKLSNkZWZpbmUgUE9MTFJEQkFORAkxMjgKICNkZWZpbmUgUE9MTFdSQkFORAkyNTYKICNkZWZpbmUgUE9MTE1TRwkJNTEyCiAjZGVmaW5lIFBPTExSRU1PVkUJMTAyNAogI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMjA0OAogCi1zdHJ1Y3QgcG9sbGZkIHsKLQlpbnQgZmQ7Ci0Jc2hvcnQgZXZlbnRzOwotCXNob3J0IHJldmVudHM7Ci19OworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BvbGwuaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3Byb20uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvbS5oCmluZGV4IGRkYWQ1ZjkuLmI0ZGYzMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvbS5oCkBAIC05MCw2ICs5MCw3IEBACiAJY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqY29tcGF0KTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2ZpbmRfbm9kZV9ieV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X2NwdWlkKGludCBjcHVpZCk7CiBleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9nZXRfcGFyZW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CiBleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9nZXRfbmV4dF9jaGlsZChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAJCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpwcmV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHN0YXRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BzdGF0ZS5oCmluZGV4IDQ5YTc5MjQuLmYzYzQ1NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHN0YXRlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wc3RhdGUuaApAQCAtMiw3ICsyLDcgQEAKICNpZm5kZWYgX1NQQVJDNjRfUFNUQVRFX0gKICNkZWZpbmUgX1NQQVJDNjRfUFNUQVRFX0gKIAotI2luY2x1ZGUgPGFzbS9jb25zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CiAKIC8qIFRoZSBWOSBQU1RBVEUgUmVnaXN0ZXIgKHdpdGggU3BpdEZpcmUgZXh0ZW5zaW9ucykuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zZmFmc3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2ZhZnNyLmgKaW5kZXggMmY3OTJjMi4uZTk2MTM3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zZmFmc3IuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NmYWZzci5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfU1BBUkM2NF9TRkFGU1JfSAogI2RlZmluZSBfU1BBUkM2NF9TRkFGU1JfSAogCi0jaW5jbHVkZSA8YXNtL2NvbnN0Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KIAogLyogU3BpdGZpcmUgQXN5bmNocm9ub3VzIEZhdWx0IFN0YXR1cyByZWdpc3RlciwgQVNJPTB4NEMgVkE8NjM6MD49MHgwICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc21wLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oCmluZGV4IGNjYTU0ODAuLmY3NmUxNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaApAQCAtNDEsMTQgKzQxLDE1IEBACiBleHRlcm4gaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKICNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCiAKLWV4dGVybiB2b2lkIHNtcF9zZXR1cF9jcHVfcG9zc2libGVfbWFwKHZvaWQpOworZXh0ZXJuIHZvaWQgc21wX2ZpbGxfaW5fc2liX2NvcmVfbWFwcyh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIGJvb3RfY3B1X2lkOwogCiAjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCiAKICNlbHNlCiAKLSNkZWZpbmUgc21wX3NldHVwX2NwdV9wb3NzaWJsZV9tYXAoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCQkwCisjZGVmaW5lIHNtcF9maWxsX2luX3NpYl9jb3JlX21hcHMoKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJvb3RfY3B1X2lkCSgwKQogCiAjZW5kaWYgLyogIShDT05GSUdfU01QKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zc3RhdGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3N0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjMzVkYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3N0YXRlLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfU1BBUkM2NF9TU1RBVEVfSAorI2RlZmluZSBfU1BBUkM2NF9TU1RBVEVfSAorCitleHRlcm4gdm9pZCBzc3RhdGVfYm9vdGluZyh2b2lkKTsKK2V4dGVybiB2b2lkIHNzdGF0ZV9ydW5uaW5nKHZvaWQpOworZXh0ZXJuIHZvaWQgc3N0YXRlX2hhbHQodm9pZCk7CitleHRlcm4gdm9pZCBzc3RhdGVfcG93ZXJvZmYodm9pZCk7CitleHRlcm4gdm9pZCBzc3RhdGVfcGFuaWModm9pZCk7CitleHRlcm4gdm9pZCBzc3RhdGVfcmVib290KHZvaWQpOworCitleHRlcm4gdm9pZCBzdW40dl9zc3RhdGVfaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qIF9TUEFSQzY0X1NTVEFURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaAppbmRleCAzMjI4MWFjLi44YmEzODBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzdGVtLmgKQEAgLTI1Myw3ICsyNTMsNiBAQAogfQogCiAjZGVmaW5lIHhjaGcocHRyLHgpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQotI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKIAogZXh0ZXJuIHZvaWQgX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RocmVhZF9pbmZvLmgKaW5kZXggMmViZjdmMi4uOTgyNTJjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGhyZWFkX2luZm8uaApAQCAtMzgsOCArMzgsOCBAQAogCS8qIEQkIGxpbmUgMSAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlfX3U4CQkJY3B1OwogCV9fdTgJCQlmcHNhdmVkWzddOworCV9fdTgJCQlwYWQ7CiAJdW5zaWduZWQgbG9uZwkJa3NwOwogCiAJLyogRCQgbGluZSAyICovCkBAIC00OSw3ICs0OSw3IEBACiAJaW50CQkJcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCiAJX191OAkJCW5ld19jaGlsZDsKIAlfX3U4CQkJc3lzY2FsbF9ub2Vycm9yOwotCV9fdTE2CQkJX19wYWQ7CisJX191MTYJCQljcHU7CiAKIAl1bnNpZ25lZCBsb25nCQkqdXRyYXBzOwogCkBAIC04Myw4ICs4Myw3IEBACiAjZGVmaW5lIFRJX0NVUlJFTlRfRFMJKFRJX0ZMQUdTICsgVElfRkxBR19CWVRFX0NVUlJFTlRfRFMpCiAjZGVmaW5lIFRJX0ZQREVQVEgJKFRJX0ZMQUdTICsgVElfRkxBR19CWVRFX0ZQREVQVEgpCiAjZGVmaW5lIFRJX1dTQVZFRAkoVElfRkxBR1MgKyBUSV9GTEFHX0JZVEVfV1NBVkVEKQotI2RlZmluZSBUSV9DUFUJCTB4MDAwMDAwMTAKLSNkZWZpbmUgVElfRlBTQVZFRAkweDAwMDAwMDExCisjZGVmaW5lIFRJX0ZQU0FWRUQJMHgwMDAwMDAxMAogI2RlZmluZSBUSV9LU1AJCTB4MDAwMDAwMTgKICNkZWZpbmUgVElfRkFVTFRfQUREUgkweDAwMDAwMDIwCiAjZGVmaW5lIFRJX0tSRUdTCTB4MDAwMDAwMjgKQEAgLTkyLDYgKzkxLDcgQEAKICNkZWZpbmUgVElfUFJFX0NPVU5UCTB4MDAwMDAwMzgKICNkZWZpbmUgVElfTkVXX0NISUxECTB4MDAwMDAwM2MKICNkZWZpbmUgVElfU1lTX05PRVJST1IJMHgwMDAwMDAzZAorI2RlZmluZSBUSV9DUFUJCTB4MDAwMDAwM2UKICNkZWZpbmUgVElfVVRSQVBTCTB4MDAwMDAwNDAKICNkZWZpbmUgVElfUkVHX1dJTkRPVwkweDAwMDAwMDQ4CiAjZGVmaW5lIFRJX1JXSU5fU1BUUlMJMHgwMDAwMDNjOAkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdG9wb2xvZ3kuaAppbmRleCA5OGE2YzYxLi5lMGQ0NTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90b3BvbG9neS5oCkBAIC02LDQgKzYsNyBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KIAorI2RlZmluZSB0b3BvbG9neV9jb3JlX2lkKGNwdSkJCQkoY3B1X2RhdGEoY3B1KS5jb3JlX2lkKQorI2RlZmluZSB0b3BvbG9neV90aHJlYWRfc2libGluZ3MoY3B1KQkJKGNwdV9zaWJsaW5nX21hcFtjcHVdKQorCiAjZW5kaWYgLyogX0FTTV9TUEFSQzY0X1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHNiLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RzYi5oCmluZGV4IGFiNTVmZmMuLjc2ZTQyOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHNiLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90c2IuaApAQCAtMjcxLDcgKzI3MSw3IEBACiAjZGVmaW5lIEtFUk5fVFNCNE1fTE9PS1VQX1RMMShUQUcsIFJFRzEsIFJFRzIsIFJFRzMsIFJFRzQsIE9LX0xBQkVMKSBcCiAJc2V0aGkJCSVoaShzd2FwcGVyXzRtX3RzYiksIFJFRzE7IFwKIAlvcgkJUkVHMSwgJWxvKHN3YXBwZXJfNG1fdHNiKSwgUkVHMTsgXAotCWFuZAkJVEFHLCAoS0VSTkVMX1RTQl9ORU5UUklFUyAtIDEpLCBSRUcyOyBcCisJYW5kCQlUQUcsIChLRVJORUxfVFNCNE1fTkVOVFJJRVMgLSAxKSwgUkVHMjsgXAogCXNsbHgJCVJFRzIsIDQsIFJFRzI7IFwKIAlhZGQJCVJFRzEsIFJFRzIsIFJFRzI7IFwKIAlLVFNCX0xPQURfUVVBRChSRUcyLCBSRUczKTsgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmgKaW5kZXggZTJkY2I4Ny4uNTNlOTZlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oCkBAIC0zMjgsOCArMzI4LDEyIEBACiAjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJMzA3CiAjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkzMDgKICNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdAkzMDkKKyNkZWZpbmUgX19OUl91dGltZW5zYXQJCTMxMAorI2RlZmluZSBfX05SX3NpZ25hbGZkCQkzMTEKKyNkZWZpbmUgX19OUl90aW1lcmZkCQkzMTIKKyNkZWZpbmUgX19OUl9ldmVudGZkCQkzMTMKIAotI2RlZmluZSBOUl9TWVNDQUxMUwkJMzEwCisjZGVmaW5lIE5SX1NZU0NBTExTCQkzMTQKIAogI2lmZGVmIF9fS0VSTkVMX18KIC8qIHN5c2NvbmYgb3B0aW9ucywgZm9yIFN1bk9TIGNvbXBhdGliaWxpdHkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2NtcHhjaGcuaCBiL2luY2x1ZGUvYXNtLXVtL2NtcHhjaGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjkzNzZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vY21weGNoZy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX0NNUFhDSEdfSAorI2RlZmluZSBfX1VNX0NNUFhDSEdfSAorCisjaW5jbHVkZSAiYXNtL2FyY2gvY21weGNoZy5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tdW0va2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjZTFiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2tkZWJ1Zy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9rZGVidWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3JlcXVpcmVkLWZlYXR1cmVzLmggYi9pbmNsdWRlL2FzbS11bS9yZXF1aXJlZC1mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjk2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS11bS9yZXF1aXJlZC1mZWF0dXJlcy5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfX1VNX1JFUVVJUkVEX0ZFQVRVUkVTX0gKKyNkZWZpbmUgX19VTV9SRVFVSVJFRF9GRUFUVVJFU19ICisKKy8qCisgKiBOb3RoaW5nIHRvIHNlZSwganVzdCBuZWVkIHNvbWV0aGluZyBmb3IgdGhlIGkzODYgYW5kIHg4Nl82NCBhc20KKyAqIGhlYWRlcnMgdG8gaW5jbHVkZS4KKyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NtcC5oIGIvaW5jbHVkZS9hc20tdW0vc21wLmgKaW5kZXggY2E1NTIyNi4uODRmOGNmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vc21wLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vc21wLmgKQEAgLTI0LDYgKzI0LDEwIEBACiAKIGV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGVfdGhyZWFkc1tOUl9DUFVTXTsKIAorI2Vsc2UKKworI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAorCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaAppbmRleCAyNjFlMmY0Li4xOGExM2JhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAkJCQkJIAkgICAwLTB4QkZGRkZGRkYgZm9yIHVzZXIKIAkJCQkJCSAgIDAtMHhGRkZGRkZGRiBmb3Iga2VybmVsICovCiAJc3RydWN0IHJlc3RhcnRfYmxvY2sgICAgcmVzdGFydF9ibG9jazsKKwlzdHJ1Y3QgdGhyZWFkX2luZm8JKnJlYWxfdGhyZWFkOyAgICAvKiBQb2ludHMgdG8gbm9uLUlSUSBzdGFjayAqLwogfTsKIAogI2RlZmluZSBJTklUX1RIUkVBRF9JTkZPKHRzaykJCQlcCkBAIC0zNSw2ICszNiw3IEBACiAJLnJlc3RhcnRfYmxvY2sgPSAgewkJCVwKIAkJLmZuID0gIGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAogCX0sCQkJCQlcCisJLnJlYWxfdGhyZWFkID0gTlVMTCwJCQlcCiB9CiAKICNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tdjg1MC9rZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWNlMWIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9rZGVidWcuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMva2RlYnVnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3BvbGwuaCBiL2luY2x1ZGUvYXNtLXY4NTAvcG9sbC5oCmluZGV4IGMxMDE3NmMuLjgwM2NhZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvcG9sbC5oCkBAIC0xLDI0ICsxLDkgQEAKICNpZm5kZWYgX19WODUwX1BPTExfSF9fCiAjZGVmaW5lIF9fVjg1MF9QT0xMX0hfXwogCi0jZGVmaW5lIFBPTExJTgkJMHgwMDAxCi0jZGVmaW5lIFBPTExQUkkJCTB4MDAwMgotI2RlZmluZSBQT0xMT1VUCQkweDAwMDQKLSNkZWZpbmUgUE9MTEVSUgkJMHgwMDA4Ci0jZGVmaW5lIFBPTExIVVAJCTB4MDAxMAotI2RlZmluZSBQT0xMTlZBTAkweDAwMjAKLSNkZWZpbmUgUE9MTFJETk9STQkweDAwNDAKICNkZWZpbmUgUE9MTFdSTk9STQlQT0xMT1VUCi0jZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCiAjZGVmaW5lIFBPTExXUkJBTkQJMHgwMTAwCi0jZGVmaW5lIFBPTExNU0cJCTB4MDQwMAotI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAotI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCiAKLXN0cnVjdCBwb2xsZmQgewotCWludCBmZDsKLQlzaG9ydCBldmVudHM7Ci0Jc2hvcnQgcmV2ZW50czsKLX07CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9sbC5oPgogCiAjZW5kaWYgLyogX19WODUwX1BPTExfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tdjg1MC9zeXN0ZW0uaAppbmRleCBkYTM5OTE2Li4wZGUyNDgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc3lzdGVtLmgKQEAgLTc2LDcgKzc2LDYgQEAKIAogI2RlZmluZSB4Y2hnKHB0ciwgd2l0aCkgXAogICAoKF9fdHlwZW9mX18gKCoocHRyKSkpX194Y2hnICgodW5zaWduZWQgbG9uZykod2l0aCksIChwdHIpLCBzaXplb2YgKCoocHRyKSkpKQotI2RlZmluZSB0YXMocHRyKSAoeGNoZyAoKHB0ciksIDEpKQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnICh1bnNpZ25lZCBsb25nIHdpdGgsCiAJCQkJICAgIF9fdm9sYXRpbGVfXyB2b2lkICpwdHIsIGludCBzaXplKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L0tidWlsZCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9LYnVpbGQKaW5kZXggODlhZDFmYy4uNzVhMmRlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L0tidWlsZAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvS2J1aWxkCkBAIC0xOSw0ICsxOSwzIEBACiB1bmlmZGVmLXkgKz0gbXNyLmgKIHVuaWZkZWYteSArPSBtdHJyLmgKIHVuaWZkZWYteSArPSB2c3lzY2FsbC5oCi11bmlmZGVmLXkgKz0gY29uc3QuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2FsdGVybmF0aXZlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvYWx0ZXJuYXRpdmUuaAppbmRleCBhMDlmZTg1Li5hMDk0Mjc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYWx0ZXJuYXRpdmUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYWx0ZXJuYXRpdmUuaApAQCAtMTAzLDYgKzEwMywxMiBAQAogCQkgICAgICAiLnByZXZpb3VzIiA6IG91dHB1dCA6IFtmZWF0XSAiaSIgKGZlYXR1cmUpLCAjI2lucHV0KQogCiAvKgorICogdXNlIHRoaXMgbWFjcm8ocykgaWYgeW91IG5lZWQgbW9yZSB0aGFuIG9uZSBvdXRwdXQgcGFyYW1ldGVyCisgKiBpbiBhbHRlcm5hdGl2ZV9pbworICovCisjZGVmaW5lIEFTTV9PVVRQVVQyKGEsIGIpIGEsIGIKKworLyoKICAqIEFsdGVybmF0aXZlIGlubGluZSBhc3NlbWJseSBmb3IgU01QLgogICoKICAqIFRoZSBMT0NLX1BSRUZJWCBtYWNybyBkZWZpbmVkIGhlcmUgcmVwbGFjZXMgdGhlIExPQ0sgYW5kCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvYXRvbWljLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvYXRvbWljLmgKaW5kZXggNzA2Y2E0Yi4uZjJlNjQ2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hdG9taWMuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19BUkNIX1g4Nl82NF9BVE9NSUNfXwogCiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CisjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KIAogLyogYXRvbWljX3Qgc2hvdWxkIGJlIDMyIGJpdCBzaWduZWQgdHlwZSAqLwogCkBAIC0zNzUsOCArMzc2LDggQEAKIAlsb25nIF9faSA9IGk7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCUxPQ0tfUFJFRklYICJ4YWRkcSAlMCwgJTE7IgotCQk6Ij1yIihpKQotCQk6Im0iKHYtPmNvdW50ZXIpLCAiMCIoaSkpOworCQk6IityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCisJCTogOiAibWVtb3J5Iik7CiAJcmV0dXJuIGkgKyBfX2k7CiB9CiAKQEAgLTM4OCw3ICszODksMTAgQEAKICNkZWZpbmUgYXRvbWljNjRfaW5jX3JldHVybih2KSAgKGF0b21pYzY0X2FkZF9yZXR1cm4oMSx2KSkKICNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KSAgKGF0b21pYzY0X3N1Yl9yZXR1cm4oMSx2KSkKIAotI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvbGQsIG5ldykgKChpbnQpY21weGNoZygmKCh2KS0+Y291bnRlciksIG9sZCwgbmV3KSkKKyNkZWZpbmUgYXRvbWljNjRfY21weGNoZyh2LCBvbGQsIG5ldykgKGNtcHhjaGcoJigodiktPmNvdW50ZXIpLCBvbGQsIG5ldykpCisjZGVmaW5lIGF0b21pYzY0X3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisKKyNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgb2xkLCBuZXcpIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgb2xkLCBuZXcpKQogI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKIAogLyoqCkBAIC00MDAsMjIgKzQwNCw0OSBAQAogICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCiAgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KICAqLwotI2RlZmluZSBhdG9taWNfYWRkX3VubGVzcyh2LCBhLCB1KQkJCQlcCi0oewkJCQkJCQkJXAotCWludCBjLCBvbGQ7CQkJCQkJXAotCWMgPSBhdG9taWNfcmVhZCh2KTsJCQkJCVwKLQlmb3IgKDs7KSB7CQkJCQkJXAotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQkJCQlcCi0JCQlicmVhazsJCQkJCVwKLQkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsJCVwKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCQkJCVwKLQkJCWJyZWFrOwkJCQkJXAotCQljID0gb2xkOwkJCQkJXAotCX0JCQkJCQkJXAotCWMgIT0gKHUpOwkJCQkJCVwKLX0pCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3sKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQorCiAjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCisvKioKKyAqIGF0b21pYzY0X2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgorICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCisgKgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgbG9uZyBhLCBsb25nIHUpCit7CisJbG9uZyBjLCBvbGQ7CisJYyA9IGF0b21pYzY0X3JlYWQodik7CisJZm9yICg7OykgeworCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQorCQkJYnJlYWs7CisJCW9sZCA9IGF0b21pYzY0X2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQorCisjZGVmaW5lIGF0b21pYzY0X2luY19ub3RfemVybyh2KSBhdG9taWM2NF9hZGRfdW5sZXNzKCh2KSwgMSwgMCkKKwogLyogVGhlc2UgYXJlIHg4Ni1zcGVjaWZpYywgdXNlZCBieSBzb21lIGhlYWRlciBmaWxlcyAqLwogI2RlZmluZSBhdG9taWNfY2xlYXJfbWFzayhtYXNrLCBhZGRyKSBcCiBfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2NhbGdhcnkuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWxnYXJ5LmgKaW5kZXggN2VlOTAwNi4uNGQ1NzQ3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2NhbGdhcnkuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvY2FsZ2FyeS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKIHN0cnVjdCBpb21tdV90YWJsZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY21weGNoZy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2NtcHhjaGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWE2YjZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NtcHhjaGcuaApAQCAtMCwwICsxLDEzNCBAQAorI2lmbmRlZiBfX0FTTV9DTVBYQ0hHX0gKKyNkZWZpbmUgX19BU01fQ01QWENIR19ICisKKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4gLyogUHJvdmlkZXMgTE9DS19QUkVGSVggKi8KKworI2RlZmluZSB4Y2hnKHB0cix2KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHYpLChwdHIpLHNpemVvZigqKHB0cikpKSkKKworI2RlZmluZSBfX3hnKHgpICgodm9sYXRpbGUgbG9uZyAqKSh4KSkKKworc3RhdGljIGlubGluZSB2b2lkIHNldF82NGJpdCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCSpwdHIgPSB2YWw7Cit9CisKKyNkZWZpbmUgX3NldF82NGJpdCBzZXRfNjRiaXQKKworLyoKKyAqIE5vdGU6IG5vICJsb2NrIiBwcmVmaXggZXZlbiBvbiBTTVA6IHhjaGcgYWx3YXlzIGltcGxpZXMgbG9jayBhbnl3YXkKKyAqIE5vdGUgMjogeGNoZyBoYXMgc2lkZSBlZmZlY3QsIHNvIHRoYXQgYXR0cmlidXRlIHZvbGF0aWxlIGlzIG5lY2Vzc2FyeSwKKyAqCSAgYnV0IGdlbmVyYWxseSB0aGUgcHJpbWl0aXZlIGlzIGludmFsaWQsICpwdHIgaXMgb3V0cHV0IGFyZ3VtZW50LiAtLUFOSworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgMToKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hnYiAlYjAsJTEiCisJCQkJOiI9cSIgKHgpCisJCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCQk6Im1lbW9yeSIpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hndyAldzAsJTEiCisJCQkJOiI9ciIgKHgpCisJCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCQk6Im1lbW9yeSIpOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hnbCAlazAsJTEiCisJCQkJOiI9ciIgKHgpCisJCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCQk6Im1lbW9yeSIpOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hncSAlMCwlMSIKKwkJCQk6Ij1yIiAoeCkKKwkJCQk6Im0iICgqX194ZyhwdHIpKSwgIjAiICh4KQorCQkJCToibWVtb3J5Iik7CisJCQlicmVhazsKKwl9CisJcmV0dXJuIHg7Cit9CisKKy8qCisgKiBBdG9taWMgY29tcGFyZSBhbmQgZXhjaGFuZ2UuICBDb21wYXJlIE9MRCB3aXRoIE1FTSwgaWYgaWRlbnRpY2FsLAorICogc3RvcmUgTkVXIGluIE1FTS4gIFJldHVybiB0aGUgaW5pdGlhbCB2YWx1ZSBpbiBNRU0uICBTdWNjZXNzIGlzCisgKiBpbmRpY2F0ZWQgYnkgY29tcGFyaW5nIFJFVFVSTiB3aXRoIE9MRC4KKyAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcgMQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvbGQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcHJldjsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hnYiAlYjEsJTIiCisJCQkJICAgICA6ICI9YSIocHJldikKKwkJCQkgICAgIDogInEiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwljYXNlIDI6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hndyAldzEsJTIiCisJCQkJICAgICA6ICI9YSIocHJldikKKwkJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwljYXNlIDQ6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hnbCAlazEsJTIiCisJCQkJICAgICA6ICI9YSIocHJldikKKwkJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKKwkJCQkgICAgIDogIm1lbW9yeSIpOworCQlyZXR1cm4gcHJldjsKKwljYXNlIDg6CisJCV9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJjbXB4Y2hncSAlMSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCX0KKwlyZXR1cm4gb2xkOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnX2xvY2FsKHZvbGF0aWxlIHZvaWQgKnB0ciwKKwkJCXVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2OworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImNtcHhjaGdiICViMSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAicSIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgMjoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImNtcHhjaGd3ICV3MSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgNDoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImNtcHhjaGdsICVrMSwlMiIKKwkJCQkgICAgIDogIj1hIihwcmV2KQorCQkJCSAgICAgOiAiciIobmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIob2xkKQorCQkJCSAgICAgOiAibWVtb3J5Iik7CisJCXJldHVybiBwcmV2OworCWNhc2UgODoKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImNtcHhjaGdxICUxLCUyIgorCQkJCSAgICAgOiAiPWEiKHByZXYpCisJCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCisJCQkJICAgICA6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHByZXY7CisJfQorCXJldHVybiBvbGQ7Cit9CisKKyNkZWZpbmUgY21weGNoZyhwdHIsbyxuKVwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGcoKHB0ciksKHVuc2lnbmVkIGxvbmcpKG8pLFwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLHNpemVvZigqKHB0cikpKSkKKyNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsbyxuKVwKKwkoKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGcoKHB0ciksKHVuc2lnbmVkIGxvbmcpKG8pLFwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKG4pLHNpemVvZigqKHB0cikpKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQva2RlYnVnLmggYi9pbmNsdWRlL2FzbS14ODZfNjQva2RlYnVnLmgKaW5kZXggMmIwYzA4OC4uZDdlMmJjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9rZGVidWcuaApAQCAtNSwxOSArNSw4IEBACiAKIHN0cnVjdCBwdF9yZWdzOwogCi1zdHJ1Y3QgZGllX2FyZ3MgewotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCWNvbnN0IGNoYXIgKnN0cjsKLQlsb25nIGVycjsKLQlpbnQgdHJhcG5yOwotCWludCBzaWducjsKLX07Ci0KLWV4dGVybiBpbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwogZXh0ZXJuIGludCByZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKIGV4dGVybiBpbnQgdW5yZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLWV4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgZGllX2NoYWluOwogCiAvKiBHcm9zc2x5IG1pc25hbWVkLiAqLwogZW51bSBkaWVfdmFsIHsKQEAgLTM2LDE5ICsyNSw2IEBACiAJRElFX1BBR0VfRkFVTFQsCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKLQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVyciwgaW50IHRyYXAsIGludCBzaWcpCi17Ci0Jc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7Ci0JCS5yZWdzID0gcmVncywKLQkJLnN0ciA9IHN0ciwKLQkJLmVyciA9IGVyciwKLQkJLnRyYXBuciA9IHRyYXAsCi0JCS5zaWduciA9IHNpZwotCX07Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZkaWVfY2hhaW4sIHZhbCwgJmFyZ3MpOwotfSAKLQogZXh0ZXJuIHZvaWQgcHJpbnRrX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIGV4dGVybiB2b2lkIGRpZShjb25zdCBjaGFyICosc3RydWN0IHB0X3JlZ3MgKixsb25nKTsKIGV4dGVybiB2b2lkIF9fZGllKGNvbnN0IGNoYXIgKixzdHJ1Y3QgcHRfcmVncyAqLGxvbmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2tleGVjLmggYi9pbmNsdWRlL2FzbS14ODZfNjQva2V4ZWMuaAppbmRleCA1ZmFiOTU3Li43MzhlNTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQva2V4ZWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQva2V4ZWMuaApAQCAtNDgsOCArNDgsNiBAQAogLyogVGhlIG5hdGl2ZSBhcmNoaXRlY3R1cmUgKi8KICNkZWZpbmUgS0VYRUNfQVJDSCBLRVhFQ19BUkNIX1g4Nl82NAogCi0jZGVmaW5lIE1BWF9OT1RFX0JZVEVTIDEwMjQKLQogLyoKICAqIFNhdmluZyB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBjcHUgb24gd2hpY2ggcGFuaWMgb2NjdXJlZCBpbgogICogY3Jhc2hfa2V4ZWMgdG8gc2F2ZSBhIHZhbGlkIHNwLiBUaGUgcmVnaXN0ZXJzIG9mIG90aGVyIGNwdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9sb2NhbC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2xvY2FsLmgKaW5kZXggZTc2OWU2Mi4uZTg3NDkyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2xvY2FsLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2xvY2FsLmgKQEAgLTIsNDkgKzIsMTgzIEBACiAjZGVmaW5lIF9BUkNIX1g4NjY0X0xPQ0FMX0gKIAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLQl2b2xhdGlsZSBsb25nIGNvdW50ZXI7CisJYXRvbWljX2xvbmdfdCBhOwogfSBsb2NhbF90OwogCi0jZGVmaW5lIExPQ0FMX0lOSVQoaSkJeyAoaSkgfQorI2RlZmluZSBMT0NBTF9JTklUKGkpCXsgQVRPTUlDX0xPTkdfSU5JVChpKSB9CiAKLSNkZWZpbmUgbG9jYWxfcmVhZCh2KQkoKHYpLT5jb3VudGVyKQotI2RlZmluZSBsb2NhbF9zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCisjZGVmaW5lIGxvY2FsX3JlYWQobCkJYXRvbWljX2xvbmdfcmVhZCgmKGwpLT5hKQorI2RlZmluZSBsb2NhbF9zZXQobCxpKQlhdG9taWNfbG9uZ19zZXQoJihsKS0+YSwgKGkpKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfaW5jKGxvY2FsX3QgKnYpCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfaW5jKGxvY2FsX3QgKmwpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJpbmNxICUwIgotCQk6Ij1tIiAodi0+Y291bnRlcikKLQkJOiJtIiAodi0+Y291bnRlcikpOworCQk6Ij1tIiAobC0+YS5jb3VudGVyKQorCQk6Im0iIChsLT5hLmNvdW50ZXIpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2RlYyhsb2NhbF90ICp2KQorc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2RlYyhsb2NhbF90ICpsKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkiZGVjcSAlMCIKLQkJOiI9bSIgKHYtPmNvdW50ZXIpCi0JCToibSIgKHYtPmNvdW50ZXIpKTsKKwkJOiI9bSIgKGwtPmEuY291bnRlcikKKwkJOiJtIiAobC0+YS5jb3VudGVyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9hZGQobG9uZyBpLCBsb2NhbF90ICp2KQorc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2FkZChsb25nIGksIGxvY2FsX3QgKmwpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJhZGRxICUxLCUwIgotCQk6Ij1tIiAodi0+Y291bnRlcikKLQkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKKwkJOiI9bSIgKGwtPmEuY291bnRlcikKKwkJOiJpciIgKGkpLCAibSIgKGwtPmEuY291bnRlcikpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfc3ViKGxvbmcgaSwgbG9jYWxfdCAqdikKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9zdWIobG9uZyBpLCBsb2NhbF90ICpsKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkic3VicSAlMSwlMCIKLQkJOiI9bSIgKHYtPmNvdW50ZXIpCi0JCToiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7CisJCToiPW0iIChsLT5hLmNvdW50ZXIpCisJCToiaXIiIChpKSwgIm0iIChsLT5hLmNvdW50ZXIpKTsKIH0KIAorLyoqCisgKiBsb2NhbF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEBsOiBwb2ludGVyIHRvIHR5cGUgbG9jYWxfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQGwgYW5kIHJldHVybnMKKyAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGxvY2FsX3N1Yl9hbmRfdGVzdChsb25nIGksIGxvY2FsX3QgKmwpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJzdWJxICUyLCUwOyBzZXRlICUxIgorCQk6Ij1tIiAobC0+YS5jb3VudGVyKSwgIj1xbSIgKGMpCisJCToiaXIiIChpKSwgIm0iIChsLT5hLmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGxvY2FsX2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAorICogQGw6IHBvaW50ZXIgdG8gdHlwZSBsb2NhbF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEBsIGJ5IDEgYW5kCisgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCisgKiBjYXNlcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGxvY2FsX2RlY19hbmRfdGVzdChsb2NhbF90ICpsKQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiZGVjcSAlMDsgc2V0ZSAlMSIKKwkJOiI9bSIgKGwtPmEuY291bnRlciksICI9cW0iIChjKQorCQk6Im0iIChsLT5hLmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogbG9jYWxfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAbDogcG9pbnRlciB0byB0eXBlIGxvY2FsX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQGwgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgbG9jYWxfaW5jX2FuZF90ZXN0KGxvY2FsX3QgKmwpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJpbmNxICUwOyBzZXRlICUxIgorCQk6Ij1tIiAobC0+YS5jb3VudGVyKSwgIj1xbSIgKGMpCisJCToibSIgKGwtPmEuY291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIGMgIT0gMDsKK30KKworLyoqCisgKiBsb2NhbF9hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQGw6IHBvaW50ZXIgdG8gdHlwZSBsb2NhbF90CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEBsIGFuZCByZXR1cm5zIHRydWUKKyAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KKyAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IGxvY2FsX2FkZF9uZWdhdGl2ZShsb25nIGksIGxvY2FsX3QgKmwpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJhZGRxICUyLCUwOyBzZXRzICUxIgorCQk6Ij1tIiAobC0+YS5jb3VudGVyKSwgIj1xbSIgKGMpCisJCToiaXIiIChpKSwgIm0iIChsLT5hLmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGxvY2FsX2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAbDogcG9pbnRlciB0byB0eXBlIGxvY2FsX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQGwgYW5kIHJldHVybnMgQGkgKyBAbAorICovCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvY2FsX2FkZF9yZXR1cm4obG9uZyBpLCBsb2NhbF90ICpsKQoreworCWxvbmcgX19pID0gaTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInhhZGRxICUwLCAlMTsiCisJCToiK3IiIChpKSwgIittIiAobC0+YS5jb3VudGVyKQorCQk6IDogIm1lbW9yeSIpOworCXJldHVybiBpICsgX19pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvY2FsX3N1Yl9yZXR1cm4obG9uZyBpLCBsb2NhbF90ICpsKQoreworCXJldHVybiBsb2NhbF9hZGRfcmV0dXJuKC1pLGwpOworfQorCisjZGVmaW5lIGxvY2FsX2luY19yZXR1cm4obCkgIChsb2NhbF9hZGRfcmV0dXJuKDEsbCkpCisjZGVmaW5lIGxvY2FsX2RlY19yZXR1cm4obCkgIChsb2NhbF9zdWJfcmV0dXJuKDEsbCkpCisKKyNkZWZpbmUgbG9jYWxfY21weGNoZyhsLCBvLCBuKSBcCisJKGNtcHhjaGdfbG9jYWwoJigobCktPmEuY291bnRlciksIChvKSwgKG4pKSkKKy8qIEFsd2F5cyBoYXMgYSBsb2NrIHByZWZpeCAqLworI2RlZmluZSBsb2NhbF94Y2hnKGwsIG4pICh4Y2hnKCYoKGwpLT5hLmNvdW50ZXIpLCAobikpKQorCisvKioKKyAqIGF0b21pY191cF9hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKKyAqIEBsOiBwb2ludGVyIG9mIHR5cGUgbG9jYWxfdAorICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIGwuLi4KKyAqIEB1OiAuLi51bmxlc3MgbCBpcyBlcXVhbCB0byB1LgorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAbCwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgorICogUmV0dXJucyBub24temVybyBpZiBAbCB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCisgKi8KKyNkZWZpbmUgbG9jYWxfYWRkX3VubGVzcyhsLCBhLCB1KQkJCQlcCisoewkJCQkJCQkJXAorCWxvbmcgYywgb2xkOwkJCQkJCVwKKwljID0gbG9jYWxfcmVhZChsKTsJCQkJCVwKKwlmb3IgKDs7KSB7CQkJCQkJXAorCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJb2xkID0gbG9jYWxfY21weGNoZygobCksIGMsIGMgKyAoYSkpOwlcCisJCWlmIChsaWtlbHkob2xkID09IGMpKQkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJYyA9IG9sZDsJCQkJCVwKKwl9CQkJCQkJCVwKKwljICE9ICh1KTsJCQkJCQlcCit9KQorI2RlZmluZSBsb2NhbF9pbmNfbm90X3plcm8obCkgbG9jYWxfYWRkX3VubGVzcygobCksIDEsIDApCisKIC8qIE9uIHg4Ni02NCB0aGVzZSBhcmUgYmV0dGVyIHRoYW4gdGhlIGF0b21pYyB2YXJpYW50cyBvbiBTTVAga2VybmVscwogICAgYmVjYXVzZSB0aGV5IGRvbnQgdXNlIGEgbG9jayBwcmVmaXguICovCiAjZGVmaW5lIF9fbG9jYWxfaW5jKGwpCQlsb2NhbF9pbmMobCkKQEAgLTYyLDI3ICsxOTYsMjcgQEAKIAogLyogTmVlZCB0byBkaXNhYmxlIHByZWVtcHRpb24gZm9yIHRoZSBjcHUgbG9jYWwgY291bnRlcnMgb3RoZXJ3aXNlIHdlIGNvdWxkCiAgICBzdGlsbCBhY2Nlc3MgYSB2YXJpYWJsZSBvZiBhIHByZXZpb3VzIENQVSBpbiBhIG5vbiBhdG9taWMgd2F5LiAqLwotI2RlZmluZSBjcHVfbG9jYWxfd3JhcF92KHYpCSAJXAorI2RlZmluZSBjcHVfbG9jYWxfd3JhcF92KGwpCSAJXAogCSh7IGxvY2FsX3QgcmVzX187CQlcCiAJICAgcHJlZW1wdF9kaXNhYmxlKCk7IAkJXAotCSAgIHJlc19fID0gKHYpOwkJCVwKKwkgICByZXNfXyA9IChsKTsJCQlcCiAJICAgcHJlZW1wdF9lbmFibGUoKTsJCVwKIAkgICByZXNfXzsgfSkKLSNkZWZpbmUgY3B1X2xvY2FsX3dyYXAodikJCVwKKyNkZWZpbmUgY3B1X2xvY2FsX3dyYXAobCkJCVwKIAkoeyBwcmVlbXB0X2Rpc2FibGUoKTsJCVwKLQkgICB2OwkJCQlcCisJICAgbDsJCQkJXAogCSAgIHByZWVtcHRfZW5hYmxlKCk7IH0pCQlcCiAKLSNkZWZpbmUgY3B1X2xvY2FsX3JlYWQodikgICAgY3B1X2xvY2FsX3dyYXBfdihsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKHYpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3NldCh2LCBpKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKHYpLCAoaSkpKQotI2RlZmluZSBjcHVfbG9jYWxfaW5jKHYpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpKQotI2RlZmluZSBjcHVfbG9jYWxfZGVjKHYpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIodikpKQotI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIHYpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgdikgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkgICAgY3B1X2xvY2FsX3dyYXBfdihsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGwpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKGwpLCAoaSkpKQorI2RlZmluZSBjcHVfbG9jYWxfaW5jKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIobCkpKQorI2RlZmluZSBjcHVfbG9jYWxfZGVjKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpKQorI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCisjZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgbCkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKGwpKSkKIAotI2RlZmluZSBfX2NwdV9sb2NhbF9pbmModikJY3B1X2xvY2FsX2luYyh2KQotI2RlZmluZSBfX2NwdV9sb2NhbF9kZWModikJY3B1X2xvY2FsX2RlYyh2KQotI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgdikJY3B1X2xvY2FsX2FkZCgoaSksICh2KSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIHYpCWNwdV9sb2NhbF9zdWIoKGkpLCAodikpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2luYyhsKQljcHVfbG9jYWxfaW5jKGwpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyhsKQljcHVfbG9jYWxfZGVjKGwpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCBsKQljcHVfbG9jYWxfYWRkKChpKSwgKGwpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgbCkJY3B1X2xvY2FsX3N1YigoaSksIChsKSkKIAotI2VuZGlmIC8qIF9BUkNIX0kzODZfTE9DQUxfSCAqLworI2VuZGlmIC8qIF9BUkNIX1g4NjY0X0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tc3IuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tc3IuaAppbmRleCBhNTI0ZjAzLi5kNWM1NWI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbXNyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21zci5oCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGFzbS9tc3ItaW5kZXguaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogLyoKICAqIEFjY2VzcyB0byBtYWNoaW5lLXNwZWNpZmljIHJlZ2lzdGVycyAoYXZhaWxhYmxlIG9uIDU4NiBhbmQgYmV0dGVyIG9ubHkpCiAgKiBOb3RlOiB0aGUgcmQqIG9wZXJhdGlvbnMgbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzIGRpcmVjdGx5ICh3aXRob3V0IHVzaW5nCkBAIC0xNjIsNiArMTYzLDggQEAKICNpZmRlZiBDT05GSUdfU01QCiB2b2lkIHJkbXNyX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgKmwsIHUzMiAqaCk7CiB2b2lkIHdybXNyX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgpOworaW50IHJkbXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKTsKK2ludCB3cm1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgpOwogI2Vsc2UgIC8qICBDT05GSUdfU01QICAqLwogc3RhdGljIGlubGluZSB2b2lkIHJkbXNyX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgKmwsIHUzMiAqaCkKIHsKQEAgLTE3MSw2ICsxNzQsMTQgQEAKIHsKIAl3cm1zcihtc3Jfbm8sIGwsIGgpOwogfQorc3RhdGljIGlubGluZSBpbnQgcmRtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpCit7CisJcmV0dXJuIHJkbXNyX3NhZmUobXNyX25vLCBsLCBoKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHdybXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCkKK3sKKwlyZXR1cm4gd3Jtc3Jfc2FmZShtc3Jfbm8sIGwsIGgpOworfQogI2VuZGlmICAvKiBDT05GSUdfU01QICovCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYJLyogWDg2XzY0X01TUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcGFnZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaAppbmRleCA0ZDA0ZTI0Li5lMzI3YzgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wYWdlLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9YODZfNjRfUEFHRV9ICiAjZGVmaW5lIF9YODZfNjRfUEFHRV9ICiAKLSNpbmNsdWRlIDxhc20vY29uc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgogCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwogI2RlZmluZSBQQUdFX1NISUZUCTEyCkBAIC03OSw5ICs3OSwxOSBAQAogCiAjZGVmaW5lIF9fUEhZU0lDQUxfU1RBUlQJQ09ORklHX1BIWVNJQ0FMX1NUQVJUCiAjZGVmaW5lIF9fS0VSTkVMX0FMSUdOCQkweDIwMDAwMAorCisvKgorICogTWFrZSBzdXJlIGtlcm5lbCBpcyBhbGlnbmVkIHRvIDJNQiBhZGRyZXNzLiBDYXRjaGluZyBpdCBhdCBjb21waWxlCisgKiB0aW1lIGlzIGJldHRlci4gQ2hhbmdlIHlvdXIgY29uZmlnIGZpbGUgYW5kIGNvbXBpbGUgdGhlIGtlcm5lbAorICogZm9yIGEgMk1CIGFsaWduZWQgYWRkcmVzcyAoQ09ORklHX1BIWVNJQ0FMX1NUQVJUKQorICovCisjaWYgKENPTkZJR19QSFlTSUNBTF9TVEFSVCAlIF9fS0VSTkVMX0FMSUdOKSAhPSAwCisjZXJyb3IgIkNPTkZJR19QSFlTSUNBTF9TVEFSVCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMk1CIgorI2VuZGlmCisKICNkZWZpbmUgX19TVEFSVF9LRVJORUwJCShfX1NUQVJUX0tFUk5FTF9tYXAgKyBfX1BIWVNJQ0FMX1NUQVJUKQotI2RlZmluZSBfX1NUQVJUX0tFUk5FTF9tYXAJMHhmZmZmZmZmZjgwMDAwMDAwCi0jZGVmaW5lIF9fUEFHRV9PRkZTRVQgICAgICAgICAgIDB4ZmZmZjgxMDAwMDAwMDAwMAorI2RlZmluZSBfX1NUQVJUX0tFUk5FTF9tYXAJX0FDKDB4ZmZmZmZmZmY4MDAwMDAwMCwgVUwpCisjZGVmaW5lIF9fUEFHRV9PRkZTRVQgICAgICAgICAgIF9BQygweGZmZmY4MTAwMDAwMDAwMDAsIFVMKQogCiAvKiB0byBhbGlnbiB0aGUgcG9pbnRlciB0byB0aGUgKG5leHQpIHBhZ2UgYm91bmRhcnkgKi8KICNkZWZpbmUgUEFHRV9BTElHTihhZGRyKQkoKChhZGRyKStQQUdFX1NJWkUtMSkmUEFHRV9NQVNLKQpAQCAtOTMsNyArMTAzLDcgQEAKICNkZWZpbmUgX19WSVJUVUFMX01BU0sJCSgoX0FDKDEsVUwpIDw8IF9fVklSVFVBTF9NQVNLX1NISUZUKSAtIDEpCiAKICNkZWZpbmUgS0VSTkVMX1RFWFRfU0laRSAgKDQwKjEwMjQqMTAyNCkKLSNkZWZpbmUgS0VSTkVMX1RFWFRfU1RBUlQgMHhmZmZmZmZmZjgwMDAwMDAwCisjZGVmaW5lIEtFUk5FTF9URVhUX1NUQVJUIF9BQygweGZmZmZmZmZmODAwMDAwMDAsIFVMKQogI2RlZmluZSBQQUdFX09GRlNFVAkJX19QQUdFX09GRlNFVAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmgKaW5kZXggZGEzMzkwZi4uMDhiOTgzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGd0YWJsZS5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfWDg2XzY0X1BHVEFCTEVfSAogI2RlZmluZSBfWDg2XzY0X1BHVEFCTEVfSAogCi0jaW5jbHVkZSA8YXNtL2NvbnN0Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qCkBAIC0xMzQsMTEgKzEzNCwxMSBAQAogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoKFRBU0tfU0laRS0xKS9QR0RJUl9TSVpFKzEpCiAjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCiAKLSNkZWZpbmUgTUFYTUVNCQkgMHgzZmZmZmZmZmZmZmYKLSNkZWZpbmUgVk1BTExPQ19TVEFSVCAgICAweGZmZmZjMjAwMDAwMDAwMDAKLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAweGZmZmZlMWZmZmZmZmZmZmYKLSNkZWZpbmUgTU9EVUxFU19WQUREUiAgICAweGZmZmZmZmZmODgwMDAwMDAKLSNkZWZpbmUgTU9EVUxFU19FTkQgICAgICAweGZmZmZmZmZmZmZmMDAwMDAKKyNkZWZpbmUgTUFYTUVNCQkgX0FDKDB4M2ZmZmZmZmZmZmZmLCBVTCkKKyNkZWZpbmUgVk1BTExPQ19TVEFSVCAgICBfQUMoMHhmZmZmYzIwMDAwMDAwMDAwLCBVTCkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICBfQUMoMHhmZmZmZTFmZmZmZmZmZmZmLCBVTCkKKyNkZWZpbmUgTU9EVUxFU19WQUREUiAgICBfQUMoMHhmZmZmZmZmZjg4MDAwMDAwLCBVTCkKKyNkZWZpbmUgTU9EVUxFU19FTkQgICAgICBfQUMoMHhmZmZmZmZmZmZmZjAwMDAwLCBVTCkKICNkZWZpbmUgTU9EVUxFU19MRU4gICAoTU9EVUxFU19FTkQgLSBNT0RVTEVTX1ZBRERSKQogCiAjZGVmaW5lIF9QQUdFX0JJVF9QUkVTRU5UCTAKQEAgLTQxMSwxNyArNDExLDEyIEBACiAKIGV4dGVybiBzcGlubG9ja190IHBnZF9sb2NrOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcGdkX2xpc3Q7Ci12b2lkIHZtYWxsb2Nfc3luY19hbGwodm9pZCk7CiAKIGV4dGVybiBpbnQga2Vybl9hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcik7IAogCiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCQlcCiAJCXJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCiAKLSNkZWZpbmUgTUtfSU9TUEFDRV9QRk4oc3BhY2UsIHBmbikJKHBmbikKLSNkZWZpbmUgR0VUX0lPU1BBQ0UocGZuKQkJMAotI2RlZmluZSBHRVRfUEZOKHBmbikJCQkocGZuKQotCiAjZGVmaW5lIEhBVkVfQVJDSF9VTk1BUFBFRF9BUkVBCiAKICNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkgICBkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcG9sbC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3BvbGwuaAppbmRleCBjMDQ3NWE5Li5jOTg1MDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wb2xsLmgKQEAgLTEsMjcgKzEgQEAKLSNpZm5kZWYgX194ODZfNjRfUE9MTF9ICi0jZGVmaW5lIF9feDg2XzY0X1BPTExfSAotCi0vKiBUaGVzZSBhcmUgc3BlY2lmaWVkIGJ5IGlCQ1MyICovCi0jZGVmaW5lIFBPTExJTgkJMHgwMDAxCi0jZGVmaW5lIFBPTExQUkkJCTB4MDAwMgotI2RlZmluZSBQT0xMT1VUCQkweDAwMDQKLSNkZWZpbmUgUE9MTEVSUgkJMHgwMDA4Ci0jZGVmaW5lIFBPTExIVVAJCTB4MDAxMAotI2RlZmluZSBQT0xMTlZBTAkweDAwMjAKLQotLyogVGhlIHJlc3Qgc2VlbSB0byBiZSBtb3JlLW9yLWxlc3Mgbm9uc3RhbmRhcmQuIENoZWNrIHRoZW0hICovCi0jZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCi0jZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCi0jZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCi0jZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCi0jZGVmaW5lIFBPTExNU0cJCTB4MDQwMAotI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAotI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCi0KLXN0cnVjdCBwb2xsZmQgewotCWludCBmZDsKLQlzaG9ydCBldmVudHM7Ci0Jc2hvcnQgcmV2ZW50czsKLX07Ci0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BvbGwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zZXJpYWwuaAppbmRleCBiMDQ5NmUwLi44ZWJkNzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NlcmlhbC5oCkBAIC0xMSwxOSArMTEsMyBAQAogICogbWVnYWJpdHMvc2Vjb25kOyBidXQgdGhpcyByZXF1aXJlcyB0aGUgZmFzdGVyIGNsb2NrLgogICovCiAjZGVmaW5lIEJBU0VfQkFVRCAoIDE4NDMyMDAgLyAxNiApCi0KLS8qIFN0YW5kYXJkIENPTSBmbGFncyAoZXhjZXB0IGZvciBDT000LCBiZWNhdXNlIG9mIHRoZSA4NTE0IHByb2JsZW0pICovCi0jaWZkZWYgQ09ORklHX1NFUklBTF9ERVRFQ1RfSVJRCi0jZGVmaW5lIFNURF9DT01fRkxBR1MgKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUSkKLSNkZWZpbmUgU1REX0NPTTRfRkxBR1MgKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19BVVRPX0lSUSkKLSNlbHNlCi0jZGVmaW5lIFNURF9DT01fRkxBR1MgKEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QpCi0jZGVmaW5lIFNURF9DT000X0ZMQUdTIEFTWU5DX0JPT1RfQVVUT0NPTkYKLSNlbmRpZgotCi0jZGVmaW5lIFNFUklBTF9QT1JUX0RGTlMJCQlcCi0JLyogVUFSVCBDTEsgICBQT1JUIElSUSAgICAgRkxBR1MgICAgICAgICovCQkJXAotCXsgMCwgQkFTRV9CQVVELCAweDNGOCwgNCwgU1REX0NPTV9GTEFHUyB9LAkvKiB0dHlTMCAqLwlcCi0JeyAwLCBCQVNFX0JBVUQsIDB4MkY4LCAzLCBTVERfQ09NX0ZMQUdTIH0sCS8qIHR0eVMxICovCVwKLQl7IDAsIEJBU0VfQkFVRCwgMHgzRTgsIDQsIFNURF9DT01fRkxBR1MgfSwJLyogdHR5UzIgKi8JXAotCXsgMCwgQkFTRV9CQVVELCAweDJFOCwgMywgU1REX0NPTTRfRkxBR1MgfSwJLyogdHR5UzMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaAppbmRleCBkNTcwNDQyLi4zZjMwM2QyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oCkBAIC01NywxMiArNTcsNiBAQAogCiAjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgcmVhZF9wZGEoY3B1bnVtYmVyKQogCi1zdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQkvKiB3ZSBkb24ndCB3YW50IHRvIG1hcmsgdGhpcyBhY2Nlc3Mgdm9sYXRpbGUgLSBiYWQgY29kZSBnZW5lcmF0aW9uICovCi0JcmV0dXJuIEdFVF9BUElDX0lEKCoodW5zaWduZWQgaW50ICopKEFQSUNfQkFTRStBUElDX0lEKSk7Ci19Ci0KIGV4dGVybiBpbnQgX19jcHVfZGlzYWJsZSh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHByZWZpbGxfcG9zc2libGVfbWFwKHZvaWQpOwpAQCAtNzEsNyArNjUsMTMgQEAKIAogI2RlZmluZSBOT19QUk9DX0lECQkweEZGCQkvKiBObyBwcm9jZXNzb3IgbWFnaWMgbWFya2VyICovCiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworc3RhdGljIGlubGluZSBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJLyogd2UgZG9uJ3Qgd2FudCB0byBtYXJrIHRoaXMgYWNjZXNzIHZvbGF0aWxlIC0gYmFkIGNvZGUgZ2VuZXJhdGlvbiAqLworCXJldHVybiBHRVRfQVBJQ19JRCgqKHVuc2lnbmVkIGludCAqKShBUElDX0JBU0UrQVBJQ19JRCkpOworfQogCiAvKgogICogU29tZSBsb3dsZXZlbCBmdW5jdGlvbnMgbWlnaHQgd2FudCB0byBrbm93IGFib3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmgKaW5kZXggMjEzYjdmZS4uZWFkOWY5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zeXN0ZW0uaApAQCAtMyw3ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CisjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KIApAQCAtMzksNyArMzksNyBAQAogCQkgICAgICAgW3RocmVhZHJzcF0gImkiIChvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5yc3ApKSwgXAogCQkgICAgICAgW3RpX2ZsYWdzXSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZmxhZ3MpKSxcCiAJCSAgICAgICBbdGlmX2ZvcmtdICJpIiAoVElGX0ZPUkspLAkJCSAgXAotCQkgICAgICAgW3RocmVhZF9pbmZvXSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8pKSwgXAorCQkgICAgICAgW3RocmVhZF9pbmZvXSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2spKSwgXAogCQkgICAgICAgW3BkYV9wY3VycmVudF0gImkiIChvZmZzZXRvZihzdHJ1Y3QgeDg2NjRfcGRhLCBwY3VycmVudCkpICAgXAogCQkgICAgIDogIm1lbW9yeSIsICJjYyIgX19FWFRSQV9DTE9CQkVSKQogICAgIApAQCAtMTI0LDEwMCArMTI0LDYgQEAKIAogI2RlZmluZSBub3AoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcCIpCiAKLSNkZWZpbmUgeGNoZyhwdHIsdikgKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh2KSwocHRyKSxzaXplb2YoKihwdHIpKSkpCi0KLSNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksMSkpCi0KLSNkZWZpbmUgX194Zyh4KSAoKHZvbGF0aWxlIGxvbmcgKikoeCkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfNjRiaXQodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQkqcHRyID0gdmFsOwotfQotCi0jZGVmaW5lIF9zZXRfNjRiaXQgc2V0XzY0Yml0Ci0KLS8qCi0gKiBOb3RlOiBubyAibG9jayIgcHJlZml4IGV2ZW4gb24gU01QOiB4Y2hnIGFsd2F5cyBpbXBsaWVzIGxvY2sgYW55d2F5Ci0gKiBOb3RlIDI6IHhjaGcgaGFzIHNpZGUgZWZmZWN0LCBzbyB0aGF0IGF0dHJpYnV0ZSB2b2xhdGlsZSBpcyBuZWNlc3NhcnksCi0gKgkgIGJ1dCBnZW5lcmFsbHkgdGhlIHByaW1pdGl2ZSBpcyBpbnZhbGlkLCAqcHRyIGlzIG91dHB1dCBhcmd1bWVudC4gLS1BTksKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQotewotCXN3aXRjaCAoc2l6ZSkgewotCQljYXNlIDE6Ci0JCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2IgJWIwLCUxIgotCQkJCToiPXEiICh4KQotCQkJCToibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCi0JCQkJOiJtZW1vcnkiKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ3cgJXcwLCUxIgotCQkJCToiPXIiICh4KQotCQkJCToibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCi0JCQkJOiJtZW1vcnkiKTsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2wgJWswLCUxIgotCQkJCToiPXIiICh4KQotCQkJCToibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCi0JCQkJOiJtZW1vcnkiKTsKLQkJCWJyZWFrOwotCQljYXNlIDg6Ci0JCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ3EgJTAsJTEiCi0JCQkJOiI9ciIgKHgpCi0JCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKLQkJCQk6Im1lbW9yeSIpOwotCQkJYnJlYWs7Ci0JfQotCXJldHVybiB4OwotfQotCi0vKgotICogQXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlLiAgQ29tcGFyZSBPTEQgd2l0aCBNRU0sIGlmIGlkZW50aWNhbCwKLSAqIHN0b3JlIE5FVyBpbiBNRU0uICBSZXR1cm4gdGhlIGluaXRpYWwgdmFsdWUgaW4gTUVNLiAgU3VjY2VzcyBpcwotICogaW5kaWNhdGVkIGJ5IGNvbXBhcmluZyBSRVRVUk4gd2l0aCBPTEQuCi0gKi8KLQotI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHIDEKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2xkLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHByZXY7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAiY21weGNoZ2IgJWIxLCUyIgotCQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkJICAgICA6ICJxIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JY2FzZSAyOgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAiY21weGNoZ3cgJXcxLCUyIgotCQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JY2FzZSA0OgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAiY21weGNoZ2wgJWsxLCUyIgotCQkJCSAgICAgOiAiPWEiKHByZXYpCi0JCQkJICAgICA6ICJyIihuZXcpLCAibSIoKl9feGcocHRyKSksICIwIihvbGQpCi0JCQkJICAgICA6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHByZXY7Ci0JY2FzZSA4OgotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAiY21weGNoZ3EgJTEsJTIiCi0JCQkJICAgICA6ICI9YSIocHJldikKLQkJCQkgICAgIDogInIiKG5ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKG9sZCkKLQkJCQkgICAgIDogIm1lbW9yeSIpOwotCQlyZXR1cm4gcHJldjsKLQl9Ci0JcmV0dXJuIG9sZDsKLX0KLQotI2RlZmluZSBjbXB4Y2hnKHB0cixvLG4pXAotCSgoX190eXBlb2ZfXygqKHB0cikpKV9fY21weGNoZygocHRyKSwodW5zaWduZWQgbG9uZykobyksXAotCQkJCQkodW5zaWduZWQgbG9uZykobiksc2l6ZW9mKCoocHRyKSkpKQotCiAjaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBzbXBfbWIoKQltYigpCiAjZGVmaW5lIHNtcF9ybWIoKQlybWIoKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdGVybWJpdHMuaAppbmRleCA2Y2ZjM2JiMTAuLjc0MDU3NTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC90ZXJtYml0cy5oCkBAIC0xNjAsNyArMTYwLDcgQEAKICNkZWZpbmUgQ01TUEFSCSAgMDEwMDAwMDAwMDAwCQkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCiAjZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJCS8qIGZsb3cgY29udHJvbCAqLwogCi0jZGVmaW5lIElCU0hJRlQJICA4CQkvKiBTaGlmdCBmcm9tIENCQVVEIHRvIENJQkFVRCAqLworI2RlZmluZSBJQlNISUZUCSAgMTYJCS8qIFNoaWZ0IGZyb20gQ0JBVUQgdG8gQ0lCQVVEICovCiAKIC8qIGNfbGZsYWcgYml0cyAqLwogI2RlZmluZSBJU0lHCTAwMDAwMDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3RocmVhZF9pbmZvLmgKaW5kZXggNzRhNmM3NC4uMTBiYjVhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3RocmVhZF9pbmZvLmgKQEAgLTE2Miw3ICsxNjIsNyBAQAogI2RlZmluZSBUU19DT01QQVQJCTB4MDAwMgkvKiAzMmJpdCBzeXNjYWxsIGFjdGl2ZSAqLwogI2RlZmluZSBUU19QT0xMSU5HCQkweDAwMDQJLyogdHJ1ZSBpZiBpbiBpZGxlIGxvb3AgYW5kIG5vdCBzbGVlcGluZyAqLwogCi0jZGVmaW5lIHRza19pc19wb2xsaW5nKHQpICgodCktPnRocmVhZF9pbmZvLT5zdGF0dXMgJiBUU19QT0xMSU5HKQorI2RlZmluZSB0c2tfaXNfcG9sbGluZyh0KSAodGFza190aHJlYWRfaW5mbyh0KS0+c3RhdHVzICYgVFNfUE9MTElORykKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdGxiZmx1c2guaAppbmRleCA1MTI0MDFiLi44NTE2MjI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdGxiZmx1c2guaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX1g4NjY0X1RMQkZMVVNIX0gKIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmgKaW5kZXggMjZlMjNlMC4uYWUxZWQwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaApAQCAtNjE5LDYgKzYxOSwxNyBAQAogX19TWVNDQUxMKF9fTlJfdm1zcGxpY2UsIHN5c192bXNwbGljZSkKICNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkyNzkKIF9fU1lTQ0FMTChfX05SX21vdmVfcGFnZXMsIHN5c19tb3ZlX3BhZ2VzKQorI2RlZmluZSBfX05SX3V0aW1lbnNhdAkJMjgwCitfX1NZU0NBTEwoX19OUl91dGltZW5zYXQsIHN5c191dGltZW5zYXQpCisjZGVmaW5lIF9fSUdOT1JFX2dldGNwdQkJLyogaW1wbGVtZW50ZWQgYXMgYSB2c3lzY2FsbCAqLworI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CTI4MQorX19TWVNDQUxMKF9fTlJfZXBvbGxfcHdhaXQsIHN5c19lcG9sbF9wd2FpdCkKKyNkZWZpbmUgX19OUl9zaWduYWxmZAkJMjgyCitfX1NZU0NBTEwoX19OUl9zaWduYWxmZCwgc3lzX3NpZ25hbGZkKQorI2RlZmluZSBfX05SX3RpbWVyZmQJCTI4MgorX19TWVNDQUxMKF9fTlJfdGltZXJmZCwgc3lzX3RpbWVyZmQpCisjZGVmaW5lIF9fTlJfZXZlbnRmZAkJMjgzCitfX1NZU0NBTEwoX19OUl9ldmVudGZkLCBzeXNfZXZlbnRmZCkKIAogI2lmbmRlZiBfX05PX1NUVUJTCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvYXRvbWljLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvYXRvbWljLmgKaW5kZXggNWMyNjcyMC4uYjNiMjM1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9hdG9taWMuaApAQCAtMjM0LDE0ICsyMzQsMjEgQEAKICAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgogICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCiAgKi8KLSNkZWZpbmUgYXRvbWljX2FkZF91bmxlc3ModiwgYSwgdSkJCQkJXAotKHsJCQkJCQkJCVwKLQlpbnQgYywgb2xkOwkJCQkJCVwKLQljID0gYXRvbWljX3JlYWQodik7CQkJCQlcCi0Jd2hpbGUgKGMgIT0gKHUpICYmIChvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpKSAhPSBjKSBcCi0JCWMgPSBvbGQ7CQkJCQlcCi0JYyAhPSAodSk7CQkJCQkJXAotfSkKK3N0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQoreworCWludCBjLCBvbGQ7CisJYyA9IGF0b21pY19yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKICNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfY2xlYXJfbWFzayh1bnNpZ25lZCBpbnQgbWFzaywgYXRvbWljX3QgKnYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2Eva2RlYnVnLmggYi9pbmNsdWRlL2FzbS14dGVuc2Eva2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjZTFiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9rZGVidWcuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMva2RlYnVnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvcGxhdGZvcm0taXNzL3NpbWNhbGwuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wbGF0Zm9ybS1pc3Mvc2ltY2FsbC5oCmluZGV4IDZhY2I1NzIuLmI3OTUyYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9wbGF0Zm9ybS1pc3Mvc2ltY2FsbC5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wbGF0Zm9ybS1pc3Mvc2ltY2FsbC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLXh0ZW5zYS9wbGF0Zm9ybS1pc3MvaGFyZHdhcmUuaAorICogaW5jbHVkZS9hc20teHRlbnNhL3BsYXRmb3JtLWlzcy9zaW1jYWxsLmgKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3BvbGwuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wb2xsLmgKaW5kZXggNmZkOTQ3Ny4uOWQyZDU5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcG9sbC5oCkBAIC0xMSwyOCArMTEsMTAgQEAKICNpZm5kZWYgX1hURU5TQV9QT0xMX0gKICNkZWZpbmUgX1hURU5TQV9QT0xMX0gKIAotCi0jZGVmaW5lIFBPTExJTgkJMHgwMDAxCi0jZGVmaW5lIFBPTExQUkkJCTB4MDAwMgotI2RlZmluZSBQT0xMT1VUCQkweDAwMDQKLQotI2RlZmluZSBQT0xMRVJSCQkweDAwMDgKLSNkZWZpbmUgUE9MTEhVUAkJMHgwMDEwCi0jZGVmaW5lIFBPTExOVkFMCTB4MDAyMAotCi0jZGVmaW5lIFBPTExSRE5PUk0JMHgwMDQwCi0jZGVmaW5lIFBPTExSREJBTkQJMHgwMDgwCiAjZGVmaW5lIFBPTExXUk5PUk0JUE9MTE9VVAogI2RlZmluZSBQT0xMV1JCQU5ECTB4MDEwMAotCi0jZGVmaW5lIFBPTExNU0cJCTB4MDQwMAogI2RlZmluZSBQT0xMUkVNT1ZFCTB4MDgwMAotI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCiAKLXN0cnVjdCBwb2xsZmQgewotCWludCBmZDsKLQlzaG9ydCBldmVudHM7Ci0Jc2hvcnQgcmV2ZW50czsKLX07CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9sbC5oPgogCiAjZW5kaWYgLyogX1hURU5TQV9QT0xMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaAppbmRleCA0YWFlZDdmLi5kZGM5NzA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oCkBAIC0xODMsOCArMTgzLDYgQEAKICAgcmV0dXJuIHRtcDsKIH0KIAotI2RlZmluZSB0YXMocHRyKSAoeGNoZygocHRyKSwxKSkKLQogI2RlZmluZSB4Y2hnKHB0cix4KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKSkKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggOWYwNTI3OS4uZjMxN2MyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTQsNiArNCw3IEBACiBoZWFkZXIteSArPSBpc2RuLwogaGVhZGVyLXkgKz0gbmZzZC8KIGhlYWRlci15ICs9IHJhaWQvCitoZWFkZXIteSArPSBzcGkvCiBoZWFkZXIteSArPSBzdW5ycGMvCiBoZWFkZXIteSArPSB0Y19hY3QvCiBoZWFkZXIteSArPSBuZXRmaWx0ZXIvCkBAIC0zMyw3ICszNCw2IEBACiBoZWFkZXIteSArPSBhdG1femF0bS5oCiBoZWFkZXIteSArPSBhdXRvX2ZzNC5oCiBoZWFkZXIteSArPSBhdXh2ZWMuaAotaGVhZGVyLXkgKz0gYXdlX3ZvaWNlLmgKIGhlYWRlci15ICs9IGF4MjUuaAogaGVhZGVyLXkgKz0gYjFsbGkuaAogaGVhZGVyLXkgKz0gYmF5Y29tLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKIGhlYWRlci15ICs9IGNvZmYuaAogaGVhZGVyLXkgKz0gY29tc3RhdHMuaAogaGVhZGVyLXkgKz0gY29uc29sZW1hcC5oCitoZWFkZXIteSArPSBjb25zdC5oCiBoZWFkZXIteSArPSBjeWN4X2NmbS5oCiBoZWFkZXIteSArPSBkbG1fZGV2aWNlLmgKIGhlYWRlci15ICs9IGRtLWlvY3RsLmgKQEAgLTYxLDYgKzYyLDggQEAKIGhlYWRlci15ICs9IGZkLmgKIGhlYWRlci15ICs9IGZkcmVnLmgKIGhlYWRlci15ICs9IGZpYl9ydWxlcy5oCitoZWFkZXIteSArPSBmaXJld2lyZS1jZGV2LmgKK2hlYWRlci15ICs9IGZpcmV3aXJlLWNvbnN0YW50cy5oCiBoZWFkZXIteSArPSBmdXNlLmgKIGhlYWRlci15ICs9IGdlbmV0bGluay5oCiBoZWFkZXIteSArPSBnZW5fc3RhdHMuaApAQCAtOTEsNyArOTQsNiBAQAogaGVhZGVyLXkgKz0gaXBzZWMuaAogaGVhZGVyLXkgKz0gaXB4LmgKIGhlYWRlci15ICs9IGlyZGEuaAotaGVhZGVyLXkgKz0gaXNkbl9kaXZlcnRpZi5oCiBoZWFkZXIteSArPSBpc29fZnMuaAogaGVhZGVyLXkgKz0gaXhqdXNlci5oCiBoZWFkZXIteSArPSBqZmZzMi5oCkBAIC0xMjEsNiArMTIzLDcgQEAKIGhlYWRlci15ICs9IHBlcnNvbmFsaXR5LmgKIGhlYWRlci15ICs9IHBma2V5djIuaAogaGVhZGVyLXkgKz0gcGcuaAoraGVhZGVyLXkgKz0gcGhhbnRvbS5oCiBoZWFkZXIteSArPSBwa3RfY2xzLmgKIGhlYWRlci15ICs9IHBrdF9zY2hlZC5oCiBoZWFkZXIteSArPSBwb3NpeF90eXBlcy5oCkBAIC0xMzksNyArMTQyLDcgQEAKIGhlYWRlci15ICs9IHNvY2tpb3MuaAogaGVhZGVyLXkgKz0gc29tLmgKIGhlYWRlci15ICs9IHNvdW5kLmgKLWhlYWRlci15ICs9IHN5bmNsaW5rLmgKK2hlYWRlci15ICs9IHRhc2tzdGF0cy5oCiBoZWFkZXIteSArPSB0ZWxlcGhvbnkuaAogaGVhZGVyLXkgKz0gdGVybWlvcy5oCiBoZWFkZXIteSArPSB0aWNhYmxlLmgKQEAgLTE4OSw2ICsxOTIsNyBAQAogdW5pZmRlZi15ICs9IGVycnF1ZXVlLmgKIHVuaWZkZWYteSArPSBldGh0b29sLmgKIHVuaWZkZWYteSArPSBldmVudHBvbGwuaAordW5pZmRlZi15ICs9IHNpZ25hbGZkLmgKIHVuaWZkZWYteSArPSBleHQyX2ZzLmgKIHVuaWZkZWYteSArPSBleHQzX2ZzLmgKIHVuaWZkZWYteSArPSBmYi5oCkBAIC0yMzcsOCArMjQxLDEwIEBACiB1bmlmZGVmLXkgKz0gaXBtaS5oCiB1bmlmZGVmLXkgKz0gaXB2Ni5oCiB1bmlmZGVmLXkgKz0gaXB2Nl9yb3V0ZS5oCit1bmlmZGVmLXkgKz0gaXA2X3R1bm5lbC5oCiB1bmlmZGVmLXkgKz0gaXNkbi5oCiB1bmlmZGVmLXkgKz0gaXNkbmlmLmgKK3VuaWZkZWYteSArPSBpc2RuX2RpdmVydGlmLmgKIHVuaWZkZWYteSArPSBpc2RuX3BwcC5oCiB1bmlmZGVmLXkgKz0gaXNpY29tLmgKIHVuaWZkZWYteSArPSBqYmQuaApAQCAtMzE3LDYgKzMyMyw3IEBACiB1bmlmZGVmLXkgKz0gc291bmRjYXJkLmgKIHVuaWZkZWYteSArPSBzdGF0LmgKIHVuaWZkZWYteSArPSBzdGRkZWYuaAordW5pZmRlZi15ICs9IHN5bmNsaW5rLmgKIHVuaWZkZWYteSArPSBzeXNjdGwuaAogdW5pZmRlZi15ICs9IHRjcC5oCiB1bmlmZGVmLXkgKz0gdGltZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1ZGUvbGludXgvYWNwaS5oCmluZGV4IDhiY2ZhYTQuLmZjY2Q4YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5oCkBAIC0xODIsNyArMTgyLDggQEAKIGV4dGVybiBpbnQgZWNfd3JpdGUodTggYWRkciwgdTggdmFsKTsKIGV4dGVybiBpbnQgZWNfdHJhbnNhY3Rpb24odTggY29tbWFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdTggKndkYXRhLCB1bnNpZ25lZCB3ZGF0YV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICpyZGF0YSwgdW5zaWduZWQgcmRhdGFfbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnJkYXRhLCB1bnNpZ25lZCByZGF0YV9sZW4sCisJCQkgIGludCBmb3JjZV9wb2xsKTsKIAogI2VuZGlmIC8qQ09ORklHX0FDUElfRUMqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Fpby5oIGIvaW5jbHVkZS9saW51eC9haW8uaAppbmRleCBhMzBlZjEzLi5iOTAzZmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Fpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYWlvLmgKQEAgLTExOSw2ICsxMTksMTIgQEAKIAogCXN0cnVjdCBsaXN0X2hlYWQJa2lfbGlzdDsJLyogdGhlIGFpbyBjb3JlIHVzZXMgdGhpcwogCQkJCQkJICogZm9yIGNhbmNlbGxhdGlvbiAqLworCisJLyoKKwkgKiBJZiB0aGUgYWlvX3Jlc2ZkIGZpZWxkIG9mIHRoZSB1c2Vyc3BhY2UgaW9jYiBpcyBub3QgemVybywKKwkgKiB0aGlzIGlzIHRoZSB1bmRlcmx5aW5nIGZpbGUqIHRvIGRlbGl2ZXIgZXZlbnQgdG8uCisJICovCisJc3RydWN0IGZpbGUJCSpraV9ldmVudGZkOwogfTsKIAogI2RlZmluZSBpc19zeW5jX2tpb2NiKGlvY2IpCSgoaW9jYiktPmtpX2tleSA9PSBLSU9DQl9TWU5DX0tFWSkKQEAgLTIyNiw3ICsyMzIsOCBAQAogCQlfX3B1dF9pb2N0eChraW9jdHgpOwkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBpbl9haW8oKSAhaXNfc3luY193YWl0KGN1cnJlbnQtPmlvX3dhaXQpCisjZGVmaW5lIGluX2FpbygpICh1bmxpa2VseSghaXNfc3luY193YWl0KGN1cnJlbnQtPmlvX3dhaXQpKSkKKwogLyogbWF5IGJlIHVzZWQgZm9yIGRlYnVnZ2luZyAqLwogI2RlZmluZSB3YXJuX2lmX2FzeW5jKCkJCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWlvX2FiaS5oIGIvaW5jbHVkZS9saW51eC9haW9fYWJpLmgKaW5kZXggZTNjYTBhNC4uOWUwMTcyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9haW9fYWJpLmgKKysrIGIvaW5jbHVkZS9saW51eC9haW9fYWJpLmgKQEAgLTQ1LDYgKzQ1LDE0IEBACiAJSU9DQl9DTURfUFdSSVRFViA9IDgsCiB9OwogCisvKgorICogVmFsaWQgZmxhZ3MgZm9yIHRoZSAiYWlvX2ZsYWdzIiBtZW1iZXIgb2YgdGhlICJzdHJ1Y3QgaW9jYiIuCisgKgorICogSU9DQl9GTEFHX1JFU0ZEIC0gU2V0IGlmIHRoZSAiYWlvX3Jlc2ZkIiBtZW1iZXIgb2YgdGhlICJzdHJ1Y3QgaW9jYiIKKyAqICAgICAgICAgICAgICAgICAgIGlzIHZhbGlkLgorICovCisjZGVmaW5lIElPQ0JfRkxBR19SRVNGRAkJKDEgPDwgMCkKKwogLyogcmVhZCgpIGZyb20gL2Rldi9haW8gcmV0dXJucyB0aGVzZSBzdHJ1Y3R1cmVzLiAqLwogc3RydWN0IGlvX2V2ZW50IHsKIAlfX3U2NAkJZGF0YTsJCS8qIHRoZSBkYXRhIGZpZWxkIGZyb20gdGhlIGlvY2IgKi8KQEAgLTg0LDcgKzkyLDE1IEBACiAKIAkvKiBleHRyYSBwYXJhbWV0ZXJzICovCiAJX191NjQJYWlvX3Jlc2VydmVkMjsJLyogVE9ETzogdXNlIHRoaXMgZm9yIGEgKHN0cnVjdCBzaWdldmVudCAqKSAqLwotCV9fdTY0CWFpb19yZXNlcnZlZDM7CisKKwkvKiBmbGFncyBmb3IgdGhlICJzdHJ1Y3QgaW9jYiIgKi8KKwlfX3UzMglhaW9fZmxhZ3M7CisKKwkvKgorCSAqIGlmIHRoZSBJT0NCX0ZMQUdfUkVTRkQgZmxhZyBvZiAiYWlvX2ZsYWdzIiBpcyBzZXQsIHRoaXMgaXMgYW4KKwkgKiBldmVudGZkIHRvIHNpZ25hbCBBSU8gcmVhZGluZXNzIHRvCisJICovCisJX191MzIJYWlvX3Jlc2ZkOwogfTsgLyogNjQgYnl0ZXMgKi8KIAogI3VuZGVmIElGQklHCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Fub25faW5vZGVzLmggYi9pbmNsdWRlL2xpbnV4L2Fub25faW5vZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlMWJhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYW5vbl9pbm9kZXMuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogIGluY2x1ZGUvbGludXgvYW5vbl9pbm9kZXMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfQU5PTl9JTk9ERVNfSAorI2RlZmluZSBfTElOVVhfQU5PTl9JTk9ERVNfSAorCitpbnQgYW5vbl9pbm9kZV9nZXRmZChpbnQgKnBmZCwgc3RydWN0IGlub2RlICoqcGlub2RlLCBzdHJ1Y3QgZmlsZSAqKnBmaWxlLAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCisJCSAgICAgdm9pZCAqcHJpdik7CisKKyNlbmRpZiAvKiBfTElOVVhfQU5PTl9JTk9ERVNfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmggYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKaW5kZXggNzczZTMwZC4uZmNjYzZlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdWRpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvYXVkaXQuaApAQCAtOTEsNiArOTEsNyBAQAogI2RlZmluZSBBVURJVF9NUV9HRVRTRVRBVFRSCTEzMTUJLyogUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUgcmVjb3JkIHR5cGUgKi8KICNkZWZpbmUgQVVESVRfS0VSTkVMX09USEVSCTEzMTYJLyogRm9yIHVzZSBieSAzcmQgcGFydHkgbW9kdWxlcyAqLwogI2RlZmluZSBBVURJVF9GRF9QQUlSCQkxMzE3ICAgIC8qIGF1ZGl0IHJlY29yZCBmb3IgcGlwZS9zb2NrZXRwYWlyICovCisjZGVmaW5lIEFVRElUX09CSl9QSUQJCTEzMTgJLyogcHRyYWNlIHRhcmdldCAqLwogCiAjZGVmaW5lIEFVRElUX0FWQwkJMTQwMAkvKiBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50ICovCiAjZGVmaW5lIEFVRElUX1NFTElOVVhfRVJSCTE0MDEJLyogSW50ZXJuYWwgU0UgTGludXggRXJyb3JzICovCkBAIC0xMTEsNiArMTEyLDcgQEAKICNkZWZpbmUgQVVESVRfRklSU1RfS0VSTl9BTk9NX01TRyAgIDE3MDAKICNkZWZpbmUgQVVESVRfTEFTVF9LRVJOX0FOT01fTVNHICAgIDE3OTkKICNkZWZpbmUgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAgICAgIDE3MDAgLyogRGV2aWNlIGNoYW5nZWQgcHJvbWlzY3VvdXMgbW9kZSAqLworI2RlZmluZSBBVURJVF9BTk9NX0FCRU5EICAgICAgICAgICAgMTcwMSAvKiBQcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkgKi8KIAogI2RlZmluZSBBVURJVF9LRVJORUwJCTIwMDAJLyogQXN5bmNocm9ub3VzIGF1ZGl0IHJlY29yZC4gTk9UIEEgUkVRVUVTVC4gKi8KIApAQCAtMTQ4LDYgKzE1MCw4IEBACiAjZGVmaW5lIEFVRElUX0NMQVNTX1JFQURfMzIgNQogI2RlZmluZSBBVURJVF9DTEFTU19XUklURSA2CiAjZGVmaW5lIEFVRElUX0NMQVNTX1dSSVRFXzMyIDcKKyNkZWZpbmUgQVVESVRfQ0xBU1NfU0lHTkFMIDgKKyNkZWZpbmUgQVVESVRfQ0xBU1NfU0lHTkFMXzMyIDkKIAogLyogVGhpcyBiaXRtYXNrIGlzIHVzZWQgdG8gdmFsaWRhdGUgdXNlciBpbnB1dC4gIEl0IHJlcHJlc2VudHMgYWxsIGJpdHMgdGhhdAogICogYXJlIGN1cnJlbnRseSB1c2VkIGluIGFuIGF1ZGl0IGZpZWxkIGNvbnN0YW50IHVuZGVyc3Rvb2QgYnkgdGhlIGtlcm5lbC4KQEAgLTMzNyw2ICszNDEsNyBAQAogI2RlZmluZSBBVURJVFNDX1JFU1VMVCh4KSAoICgobG9uZykoeCkpPDA/QVVESVRTQ19GQUlMVVJFOkFVRElUU0NfU1VDQ0VTUyApCiBleHRlcm4gaW50IF9faW5pdCBhdWRpdF9yZWdpc3Rlcl9jbGFzcyhpbnQgY2xhc3MsIHVuc2lnbmVkICpsaXN0KTsKIGV4dGVybiBpbnQgYXVkaXRfY2xhc3NpZnlfc3lzY2FsbChpbnQgYWJpLCB1bnNpZ25lZCBzeXNjYWxsKTsKK2V4dGVybiBpbnQgYXVkaXRfY2xhc3NpZnlfYXJjaChpbnQgYXJjaCk7CiAjaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTAogLyogVGhlc2UgYXJlIGRlZmluZWQgaW4gYXVkaXRzYy5jICovCiAJCQkJLyogUHVibGljIEFQSSAqLwpAQCAtMzUxLDcgKzM1Niw4IEBACiBleHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIHZvaWQgX19hdWRpdF9pbm9kZV9jaGlsZChjb25zdCBjaGFyICpkbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQljb25zdCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCk7Ci1leHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlX3VwZGF0ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2V4dGVybiB2b2lkIF9fYXVkaXRfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CisKIHN0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2R1bW15X2NvbnRleHQodm9pZCkKIHsKIAl2b2lkICpwID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKQEAgLTM3Miw5ICszNzgsMTIgQEAKIAlpZiAodW5saWtlbHkoIWF1ZGl0X2R1bW15X2NvbnRleHQoKSkpCiAJCV9fYXVkaXRfaW5vZGVfY2hpbGQoZG5hbWUsIGlub2RlLCBwYXJlbnQpOwogfQotc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2lub2RlX3VwZGF0ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7Cit2b2lkIGF1ZGl0X2NvcmVfZHVtcHMobG9uZyBzaWducik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0KQorewogCWlmICh1bmxpa2VseSghYXVkaXRfZHVtbXlfY29udGV4dCgpKSkKLQkJX19hdWRpdF9pbm9kZV91cGRhdGUoaW5vZGUpOworCQlfX2F1ZGl0X3B0cmFjZSh0KTsKIH0KIAogCQkJCS8qIFByaXZhdGUgQVBJIChmb3IgYXVkaXQuYyBvbmx5KSAqLwpAQCAtNDQ3LDYgKzQ1Niw3IEBACiAJcmV0dXJuIDA7CiB9CiBleHRlcm4gaW50IGF1ZGl0X25fcnVsZXM7CitleHRlcm4gaW50IGF1ZGl0X3NpZ25hbHM7CiAjZWxzZQogI2RlZmluZSBhdWRpdF9hbGxvYyh0KSAoeyAwOyB9KQogI2RlZmluZSBhdWRpdF9mcmVlKHQpIGRvIHsgOyB9IHdoaWxlICgwKQpAQCAtNDU3LDEwICs0NjcsOSBAQAogI2RlZmluZSBhdWRpdF9wdXRuYW1lKG4pIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBfX2F1ZGl0X2lub2RlKG4saSkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIF9fYXVkaXRfaW5vZGVfY2hpbGQoZCxpLHApIGRvIHsgOyB9IHdoaWxlICgwKQotI2RlZmluZSBfX2F1ZGl0X2lub2RlX3VwZGF0ZShpKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfaW5vZGUobixpKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfaW5vZGVfY2hpbGQoZCxpLHApIGRvIHsgOyB9IHdoaWxlICgwKQotI2RlZmluZSBhdWRpdF9pbm9kZV91cGRhdGUoaSkgZG8geyA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGF1ZGl0X2NvcmVfZHVtcHMoaSkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0c2NfZ2V0X3N0YW1wKGMsdCxzKSBkbyB7IEJVRygpOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9nZXRfbG9naW51aWQoYykgKHsgLTE7IH0pCiAjZGVmaW5lIGF1ZGl0X2xvZ190YXNrX2NvbnRleHQoYikgZG8geyA7IH0gd2hpbGUgKDApCkBAIC00NzcsNyArNDg2LDkgQEAKICNkZWZpbmUgYXVkaXRfbXFfdGltZWRyZWNlaXZlKGQsbCxwLHQpICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X21xX25vdGlmeShkLG4pICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X21xX2dldHNldGF0dHIoZCxzKSAoeyAwOyB9KQorI2RlZmluZSBhdWRpdF9wdHJhY2UodCkgKCh2b2lkKTApCiAjZGVmaW5lIGF1ZGl0X25fcnVsZXMgMAorI2RlZmluZSBhdWRpdF9zaWduYWxzIDAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FVRElUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F3ZV92b2ljZS5oIGIvaW5jbHVkZS9saW51eC9hd2Vfdm9pY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzM2YxNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2F3ZV92b2ljZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTI1ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2xpbnV4L2F3ZV92b2ljZS5oCi0gKgotICogVm9pY2UgaW5mb3JtYXRpb24gZGVmaW5pdGlvbnMgZm9yIHRoZSBsb3cgbGV2ZWwgZHJpdmVyIGZvciB0aGUgCi0gKiBBV0UzMi9TQjMyL0FXRTY0IHdhdmUgdGFibGUgc3ludGguCi0gKiAgIHZlcnNpb24gMC40LjQ7IEphbi4gNCwgMjAwMAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIFRha2FzaGkgSXdhaQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgQVdFX1ZPSUNFX0gKLSNkZWZpbmUgQVdFX1ZPSUNFX0gKLQotI2lmbmRlZiBTQU1QTEVfVFlQRV9BV0UzMgotI2RlZmluZSBTQU1QTEVfVFlQRV9BV0UzMgkweDIwCi0jZW5kaWYKLQotI2RlZmluZSBfTElOVVhfUEFUQ0hLRVlfSF9JTkRJUkVDVAotI2luY2x1ZGUgPGxpbnV4L3BhdGNoa2V5Lmg+Ci0jdW5kZWYgX0xJTlVYX1BBVENIS0VZX0hfSU5ESVJFQ1QKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBwYXRjaCBpbmZvcm1hdGlvbiByZWNvcmQKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHBhdGNoIGludGVyZmFjZSBoZWFkZXI6IDE2IGJ5dGVzICovCi10eXBlZGVmIHN0cnVjdCBhd2VfcGF0Y2hfaW5mbyB7Ci0Jc2hvcnQga2V5OwkJCS8qIHVzZSBBV0VfUEFUQ0ggaGVyZSAqLwotI2RlZmluZSBBV0VfUEFUQ0gJX1BBVENIS0VZKDB4MDcpCi0KLQlzaG9ydCBkZXZpY2Vfbm87CQkvKiBzeW50aGVzaXplciBudW1iZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBzZl9pZDsJCS8qIGZpbGUgaWQgKHNob3VsZCBiZSB6ZXJvKSAqLwotCXNob3J0IG9wdGFyZzsJCQkvKiBvcHRpb25hbCBhcmd1bWVudCAqLwotCWludCBsZW47CQkJLyogZGF0YSBsZW5ndGggKHdpdGhvdXQgdGhpcyBoZWFkZXIpICovCi0KLQlzaG9ydCB0eXBlOwkJCS8qIHBhdGNoIG9wZXJhdGlvbiB0eXBlICovCi0jZGVmaW5lIEFXRV9MT0FEX0lORk8JCTAJLyogYXdlX3ZvaWNlX3JlYyAqLwotI2RlZmluZSBBV0VfTE9BRF9EQVRBCQkxCS8qIGF3ZV9zYW1wbGVfaW5mbyAqLwotI2RlZmluZSBBV0VfT1BFTl9QQVRDSAkJMgkvKiBhd2Vfb3Blbl9wYXJtICovCi0jZGVmaW5lIEFXRV9DTE9TRV9QQVRDSAkJMwkvKiBub25lICovCi0jZGVmaW5lIEFXRV9VTkxPQURfUEFUQ0gJNAkvKiBub25lICovCi0jZGVmaW5lIEFXRV9SRVBMQUNFX0RBVEEJNQkvKiBhd2Vfc2FtcGxlX2luZm8gKG9wdGFyZz0jY2hhbm5lbHMpKi8KLSNkZWZpbmUgQVdFX01BUF9QUkVTRVQJCTYJLyogYXdlX3ZvaWNlX21hcCAqLwotLyojZGVmaW5lIEFXRV9QUk9CRV9JTkZPCTcqLwkvKiBhd2Vfdm9pY2VfbWFwIChwYXQgb25seSkgKi8KLSNkZWZpbmUgQVdFX1BST0JFX0RBVEEJCTgJLyogb3B0YXJnPXNhbXBsZSAqLwotI2RlZmluZSBBV0VfUkVNT1ZFX0lORk8JCTkJLyogb3B0YXJnPShiYW5rPDw4KXxpbnN0ciAqLwotI2RlZmluZSBBV0VfTE9BRF9DSE9SVVNfRlgJMHgxMAkvKiBhd2VfY2hvcnVzX2Z4X3JlYyAob3B0YXJnPW1vZGUpICovCi0jZGVmaW5lIEFXRV9MT0FEX1JFVkVSQl9GWAkweDExCS8qIGF3ZV9yZXZlcmJfZnhfcmVjIChvcHRhcmc9bW9kZSkgKi8KLQotCXNob3J0IHJlc2VydmVkOwkJCS8qIHdvcmQgYWxpZ25tZW50IGRhdGEgKi8KLQotCS8qIHRoZSBhY3R1YWwgcGF0Y2ggZGF0YSBiZWdpbnMgYWZ0ZXIgdGhpcyAqLwotI2lmIGRlZmluZWQoQVdFX0NPTVBBVF8wMzApICYmIEFXRV9DT01QQVRfMDMwCi0JY2hhciBkYXRhWzBdOwotI2VuZGlmCi19IGF3ZV9wYXRjaF9pbmZvOwotCi0vKiNkZWZpbmUgQVdFX1BBVENIX0lORk9fU0laRQkxNiovCi0jZGVmaW5lIEFXRV9QQVRDSF9JTkZPX1NJWkUJc2l6ZW9mKGF3ZV9wYXRjaF9pbmZvKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogb3BlbiBwYXRjaAotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSBBV0VfUEFUQ0hfTkFNRV9MRU4JMzIKLQotdHlwZWRlZiBzdHJ1Y3QgX2F3ZV9vcGVuX3Bhcm0gewotCXVuc2lnbmVkIHNob3J0IHR5cGU7CQkvKiBzYW1wbGUgdHlwZSAqLwotI2RlZmluZSBBV0VfUEFUX1RZUEVfTUlTQwkwCi0jZGVmaW5lIEFXRV9QQVRfVFlQRV9HTQkJMQotI2RlZmluZSBBV0VfUEFUX1RZUEVfR1MJCTIKLSNkZWZpbmUgQVdFX1BBVF9UWVBFX01UMzIJMwotI2RlZmluZSBBV0VfUEFUX1RZUEVfWEcJCTQKLSNkZWZpbmUgQVdFX1BBVF9UWVBFX1NGWAk1Ci0jZGVmaW5lIEFXRV9QQVRfVFlQRV9HVVMJNgotI2RlZmluZSBBV0VfUEFUX1RZUEVfTUFQCTcKLQotI2RlZmluZSBBV0VfUEFUX0xPQ0tFRAkJMHgxMDAJLyogbG9jayB0aGUgc2FtcGxlcyAqLwotI2RlZmluZSBBV0VfUEFUX1NIQVJFRAkJMHgyMDAJLyogc2FtcGxlIGlzIHNoYXJlZCAqLwotCi0Jc2hvcnQgcmVzZXJ2ZWQ7Ci0JY2hhciBuYW1lW0FXRV9QQVRDSF9OQU1FX0xFTl07Ci19IGF3ZV9vcGVuX3Bhcm07Ci0KLS8qI2RlZmluZSBBV0VfT1BFTl9QQVJNX1NJWkUJMjgqLwotI2RlZmluZSBBV0VfT1BFTl9QQVJNX1NJWkUJc2l6ZW9mKGF3ZV9vcGVuX3Bhcm0pCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiByYXcgdm9pY2UgaW5mb3JtYXRpb24gcmVjb3JkCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB3YXZlIHRhYmxlIGVudmVsb3BlICYgZWZmZWN0IHBhcmFtZXRlcnMgdG8gY29udHJvbCBFTVU4MDAwICovCi10eXBlZGVmIHN0cnVjdCBfYXdlX3ZvaWNlX3Bhcm0gewotCXVuc2lnbmVkIHNob3J0IG1vZGRlbGF5OwkvKiBtb2R1bGF0aW9uIGRlbGF5ICgweDgwMDApICovCi0JdW5zaWduZWQgc2hvcnQgbW9kYXRraGxkOwkvKiBtb2R1bGF0aW9uIGF0dGFjayAmIGhvbGQgdGltZSAoMHg3ZjdmKSAqLwotCXVuc2lnbmVkIHNob3J0IG1vZGRjeXN1czsJLyogbW9kdWxhdGlvbiBkZWNheSAmIHN1c3RhaW4gKDB4N2Y3ZikgKi8KLQl1bnNpZ25lZCBzaG9ydCBtb2RyZWxlYXNlOwkvKiBtb2R1bGF0aW9uIHJlbGVhc2UgdGltZSAoMHg4MDdmKSAqLwotCXNob3J0IG1vZGtleWhvbGQsIG1vZGtleWRlY2F5OwkvKiBlbnZlbG9wZSBjaGFuZ2UgcGVyIGtleSAobm90IHVzZWQpICovCi0JdW5zaWduZWQgc2hvcnQgdm9sZGVsYXk7CS8qIHZvbHVtZSBkZWxheSAoMHg4MDAwKSAqLwotCXVuc2lnbmVkIHNob3J0IHZvbGF0a2hsZDsJLyogdm9sdW1lIGF0dGFjayAmIGhvbGQgdGltZSAoMHg3ZjdmKSAqLwotCXVuc2lnbmVkIHNob3J0IHZvbGRjeXN1czsJLyogdm9sdW1lIGRlY2F5ICYgc3VzdGFpbiAoMHg3ZjdmKSAqLwotCXVuc2lnbmVkIHNob3J0IHZvbHJlbGVhc2U7CS8qIHZvbHVtZSByZWxlYXNlIHRpbWUgKDB4ODA3ZikgKi8KLQlzaG9ydCB2b2xrZXlob2xkLCB2b2xrZXlkZWNheTsJLyogZW52ZWxvcGUgY2hhbmdlIHBlciBrZXkgKG5vdCB1c2VkKSAqLwotCXVuc2lnbmVkIHNob3J0IGxmbzFkZWxheTsJLyogTEZPMSBkZWxheSAoMHg4MDAwKSAqLwotCXVuc2lnbmVkIHNob3J0IGxmbzJkZWxheTsJLyogTEZPMiBkZWxheSAoMHg4MDAwKSAqLwotCXVuc2lnbmVkIHNob3J0IHBlZmU7CQkvKiBtb2R1bGF0aW9uIHBpdGNoICYgY3V0b2ZmICgweDAwMDApICovCi0JdW5zaWduZWQgc2hvcnQgZm1tb2Q7CQkvKiBMRk8xIHBpdGNoICYgY3V0b2ZmICgweDAwMDApICovCi0JdW5zaWduZWQgc2hvcnQgdHJlbWZycTsJCS8qIExGTzEgdm9sdW1lICYgZnJlcSAoMHgwMDAwKSAqLwotCXVuc2lnbmVkIHNob3J0IGZtMmZycTI7CQkvKiBMRk8yIHBpdGNoICYgZnJlcSAoMHgwMDAwKSAqLwotCXVuc2lnbmVkIGNoYXIgY3V0b2ZmOwkJLyogaW5pdGlhbCBjdXRvZmYgKDB4ZmYpICovCi0JdW5zaWduZWQgY2hhciBmaWx0ZXJROwkJLyogaW5pdGlhbCBmaWx0ZXIgUSBbMC0xNV0gKDB4MCkgKi8KLQl1bnNpZ25lZCBjaGFyIGNob3J1czsJCS8qIGNob3J1cyBzZW5kICgweDAwKSAqLwotCXVuc2lnbmVkIGNoYXIgcmV2ZXJiOwkJLyogcmV2ZXJiIHNlbmQgKDB4MDApICovCi0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWRbNF07CS8qIG5vdCB1c2VkICovCi19IGF3ZV92b2ljZV9wYXJtOwotCi10eXBlZGVmIHN0cnVjdCBfYXdlX3ZvaWNlX3Bhcm1fYmxvY2sgewotCXVuc2lnbmVkIHNob3J0IG1vZGRlbGF5OwkvKiBtb2R1bGF0aW9uIGRlbGF5ICgweDgwMDApICovCi0JdW5zaWduZWQgY2hhciBtb2RhdGssIG1vZGhsZDsKLQl1bnNpZ25lZCBjaGFyIG1vZGRjeSwgbW9kc3VzOwotCXVuc2lnbmVkIGNoYXIgbW9kcmVsLCBtb2RkdW1teTsKLQlzaG9ydCBtb2RrZXlob2xkLCBtb2RrZXlkZWNheTsJLyogZW52ZWxvcGUgY2hhbmdlIHBlciBrZXkgKG5vdCB1c2VkKSAqLwotCXVuc2lnbmVkIHNob3J0IHZvbGRlbGF5OwkvKiB2b2x1bWUgZGVsYXkgKDB4ODAwMCkgKi8KLQl1bnNpZ25lZCBjaGFyIHZvbGF0aywgdm9saGxkOwotCXVuc2lnbmVkIGNoYXIgdm9sZGN5LCB2b2xzdXM7Ci0JdW5zaWduZWQgY2hhciB2b2xyZWwsIHZvbGR1bW15OwotCXNob3J0IHZvbGtleWhvbGQsIHZvbGtleWRlY2F5OwkvKiBlbnZlbG9wZSBjaGFuZ2UgcGVyIGtleSAobm90IHVzZWQpICovCi0JdW5zaWduZWQgc2hvcnQgbGZvMWRlbGF5OwkvKiBMRk8xIGRlbGF5ICgweDgwMDApICovCi0JdW5zaWduZWQgc2hvcnQgbGZvMmRlbGF5OwkvKiBMRk8yIGRlbGF5ICgweDgwMDApICovCi0JdW5zaWduZWQgY2hhciBlbnYxZmMsIGVudjFwaXQ7Ci0JdW5zaWduZWQgY2hhciBsZm8xZmMsIGxmbzFwaXQ7Ci0JdW5zaWduZWQgY2hhciBsZm8xZnJlcSwgbGZvMXZvbDsKLQl1bnNpZ25lZCBjaGFyIGxmbzJmcmVxLCBsZm8ycGl0OwotCXVuc2lnbmVkIGNoYXIgY3V0b2ZmOwkJLyogaW5pdGlhbCBjdXRvZmYgKDB4ZmYpICovCi0JdW5zaWduZWQgY2hhciBmaWx0ZXJROwkJLyogaW5pdGlhbCBmaWx0ZXIgUSBbMC0xNV0gKDB4MCkgKi8KLQl1bnNpZ25lZCBjaGFyIGNob3J1czsJCS8qIGNob3J1cyBzZW5kICgweDAwKSAqLwotCXVuc2lnbmVkIGNoYXIgcmV2ZXJiOwkJLyogcmV2ZXJiIHNlbmQgKDB4MDApICovCi0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWRbNF07CS8qIG5vdCB1c2VkICovCi19IGF3ZV92b2ljZV9wYXJtX2Jsb2NrOwotCi0jZGVmaW5lIEFXRV9WT0lDRV9QQVJNX1NJWkUJNDgKLQotCi0vKiB3YXZlIHRhYmxlIHBhcmFtZXRlcnM6IDkyIGJ5dGVzICovCi10eXBlZGVmIHN0cnVjdCBfYXdlX3ZvaWNlX2luZm8gewotCXVuc2lnbmVkIHNob3J0IHNmX2lkOwkJLyogZmlsZSBpZCAoc2hvdWxkIGJlIHplcm8pICovCi0JdW5zaWduZWQgc2hvcnQgc2FtcGxlOwkJLyogc2FtcGxlIGlkICovCi0JaW50IHN0YXJ0LCBlbmQ7CQkJLyogc2FtcGxlIG9mZnNldCBjb3JyZWN0aW9uICovCi0JaW50IGxvb3BzdGFydCwgbG9vcGVuZDsJCS8qIGxvb3Agb2Zmc2V0IGNvcnJlY3Rpb24gKi8KLQlzaG9ydCByYXRlX29mZnNldDsJCS8qIHNhbXBsZSByYXRlIHBpdGNoIG9mZnNldCAqLwotCXVuc2lnbmVkIHNob3J0IG1vZGU7CQkvKiBzYW1wbGUgbW9kZSAqLwotI2RlZmluZSBBV0VfTU9ERV9ST01TT1VORAkJMHg4MDAwCi0jZGVmaW5lIEFXRV9NT0RFX1NURVJFTwkJCTEKLSNkZWZpbmUgQVdFX01PREVfTE9PUElORwkJMgotI2RlZmluZSBBV0VfTU9ERV9OT1JFTEVBU0UJCTQJLyogb2Jzb2xldGUgKi8KLSNkZWZpbmUgQVdFX01PREVfSU5JVF9QQVJNCQk4Ci0KLQlzaG9ydCByb290OwkJCS8qIG1pZGkgcm9vdCBrZXkgKi8KLQlzaG9ydCB0dW5lOwkJCS8qIHBpdGNoIHR1bmluZyAoaW4gY2VudHMpICovCi0Jc2lnbmVkIGNoYXIgbG93LCBoaWdoOwkJLyoga2V5IG5vdGUgcmFuZ2UgKi8KLQlzaWduZWQgY2hhciB2ZWxsb3csIHZlbGhpZ2g7CS8qIHZlbG9jaXR5IHJhbmdlICovCi0Jc2lnbmVkIGNoYXIgZml4a2V5LCBmaXh2ZWw7CS8qIGZpeGVkIGtleSwgdmVsb2NpdHkgKi8KLQlzaWduZWQgY2hhciBwYW4sIGZpeHBhbjsJLyogcGFubmluZywgZml4ZWQgcGFubmluZyAqLwotCXNob3J0IGV4Y2x1c2l2ZUNsYXNzOwkJLyogZXhjbHVzaXZlIGNsYXNzICgwID0gbm9uZSkgKi8KLQl1bnNpZ25lZCBjaGFyIGFtcGxpdHVkZTsJLyogc2FtcGxlIHZvbHVtZSAoMTI3IG1heCkgKi8KLQl1bnNpZ25lZCBjaGFyIGF0dGVudWF0aW9uOwkvKiBhdHRlbnVhdGlvbiAoMC4zNzVkQikgKi8KLQlzaG9ydCBzY2FsZVR1bmluZzsJCS8qIHBpdGNoIHNjYWxlIHR1bmluZyglKSwgbm9ybWFsbHkgMTAwICovCi0JYXdlX3ZvaWNlX3Bhcm0gcGFybTsJCS8qIHZvaWNlIGVudmVsb3BlIHBhcmFtZXRlcnMgKi8KLQlzaG9ydCBpbmRleDsJCQkvKiBpbnRlcm5hbCBpbmRleCAoc2V0IGJ5IGRyaXZlcikgKi8KLX0gYXdlX3ZvaWNlX2luZm87Ci0KLS8qI2RlZmluZSBBV0VfVk9JQ0VfSU5GT19TSVpFCTkyKi8KLSNkZWZpbmUgQVdFX1ZPSUNFX0lORk9fU0laRQlzaXplb2YoYXdlX3ZvaWNlX2luZm8pCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFRoZSBpbmZvIGVudHJ5IG9mIGF3ZV92b2ljZV9yZWMgaXMgY2hhbmdlZCBmcm9tIDAgdG8gMQotICogZm9yIHNvbWUgY29tcGlsZXJzIHJlZnVzaW5nIHplcm8gc2l6ZSBhcnJheS4KLSAqIER1ZSB0byB0aGlzIGNoYW5nZSwgc2l6ZW9mKGF3ZV92b2ljZV9yZWMpIGJlY29tZXMgZGlmZmVyZW50Ci0gKiBmcm9tIG9sZGVyIHZlcnNpb25zLgotICogVXNlIEFXRV9WT0lDRV9SRUNfU0laRSBpbnN0ZWFkLgotICovCi0KLS8qIGluc3RydW1lbnQgaW5mbyBoZWFkZXI6IDQgYnl0ZXMgKi8KLXR5cGVkZWYgc3RydWN0IF9hd2Vfdm9pY2VfcmVjX2hkciB7Ci0JdW5zaWduZWQgY2hhciBiYW5rOwkJLyogbWlkaSBiYW5rIG51bWJlciAqLwotCXVuc2lnbmVkIGNoYXIgaW5zdHI7CQkvKiBtaWRpIHByZXNldCBudW1iZXIgKi8KLQljaGFyIG52b2ljZXM7CQkJLyogbnVtYmVyIG9mIHZvaWNlcyAqLwotCWNoYXIgd3JpdGVfbW9kZTsJCS8qIHdyaXRlIG1vZGU7IG5vcm1hbGx5IDAgKi8KLSNkZWZpbmUgQVdFX1dSX0FQUEVORAkJMAkvKiBhcHBlbmQgYW55d2F5ICovCi0jZGVmaW5lIEFXRV9XUl9FWENMVVNJVkUJMQkvKiBza2lwIGlmIGFscmVhZHkgZXhpc3RzICovCi0jZGVmaW5lIEFXRV9XUl9SRVBMQUNFCQkyCS8qIHJlcGxhY2UgaWYgYWxyZWFkeSBleGlzdHMgKi8KLX0gYXdlX3ZvaWNlX3JlY19oZHI7Ci0KLS8qI2RlZmluZSBBV0VfVk9JQ0VfUkVDX1NJWkUJNCovCi0jZGVmaW5lIEFXRV9WT0lDRV9SRUNfU0laRQlzaXplb2YoYXdlX3ZvaWNlX3JlY19oZHIpCi0KLS8qIHRoZSBzdGFuZGFyZCBwYXRjaCBzdHJ1Y3R1cmUgZm9yIG9uZSBzYW1wbGUgKi8KLXR5cGVkZWYgc3RydWN0IF9hd2Vfdm9pY2VfcmVjX3BhdGNoIHsKLQlhd2VfcGF0Y2hfaW5mbwkJcGF0Y2g7Ci0JYXdlX3ZvaWNlX3JlY19oZHIJaGRyOwotCWF3ZV92b2ljZV9pbmZvCQlpbmZvOwotfSBhd2Vfdm9pY2VfcmVjX3BhdGNoOwotCi0KLS8qIG9ic29sZXRlIGRhdGEgdHlwZSAqLwotI2lmIGRlZmluZWQoQVdFX0NPTVBBVF8wMzApICYmIEFXRV9DT01QQVRfMDMwCi0jZGVmaW5lIEFXRV9JTkZPQVJSQVlfU0laRQkwCi0jZWxzZQotI2RlZmluZSBBV0VfSU5GT0FSUkFZX1NJWkUJMQotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IF9hd2Vfdm9pY2VfcmVjIHsKLQl1bnNpZ25lZCBjaGFyIGJhbms7CQkvKiBtaWRpIGJhbmsgbnVtYmVyICovCi0JdW5zaWduZWQgY2hhciBpbnN0cjsJCS8qIG1pZGkgcHJlc2V0IG51bWJlciAqLwotCXNob3J0IG52b2ljZXM7CQkJLyogbnVtYmVyIG9mIHZvaWNlcyAqLwotCS8qIHZvaWNlIGluZm9ybWF0aW9uIGZvbGxvd3MgaGVyZSAqLwotCWF3ZV92b2ljZV9pbmZvIGluZm9bQVdFX0lORk9BUlJBWV9TSVpFXTsKLX0gYXdlX3ZvaWNlX3JlYzsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHNhbXBsZSB3YXZlIGluZm9ybWF0aW9uCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB3YXZlIHRhYmxlIHNhbXBsZSBoZWFkZXI6IDMyIGJ5dGVzICovCi10eXBlZGVmIHN0cnVjdCBhd2Vfc2FtcGxlX2luZm8gewotCXVuc2lnbmVkIHNob3J0IHNmX2lkOwkJLyogZmlsZSBpZCAoc2hvdWxkIGJlIHplcm8pICovCi0JdW5zaWduZWQgc2hvcnQgc2FtcGxlOwkJLyogc2FtcGxlIGlkICovCi0JaW50IHN0YXJ0LCBlbmQ7CQkJLyogc3RhcnQgJiBlbmQgb2Zmc2V0ICovCi0JaW50IGxvb3BzdGFydCwgbG9vcGVuZDsJCS8qIGxvb3Agc3RhcnQgJiBlbmQgb2Zmc2V0ICovCi0JaW50IHNpemU7CQkJLyogc2l6ZSAoMCA9IFJPTSkgKi8KLQlzaG9ydCBjaGVja3N1bV9mbGFnOwkJLyogdXNlIGNoZWNrIHN1bSA9IDEgKi8KLQl1bnNpZ25lZCBzaG9ydCBtb2RlX2ZsYWdzOwkvKiBtb2RlIGZsYWdzICovCi0jZGVmaW5lIEFXRV9TQU1QTEVfOEJJVFMJMQkvKiB3YXZlIGRhdGEgaXMgOGJpdHMgKi8KLSNkZWZpbmUgQVdFX1NBTVBMRV9VTlNJR05FRAkyCS8qIHdhdmUgZGF0YSBpcyB1bnNpZ25lZCAqLwotI2RlZmluZSBBV0VfU0FNUExFX05PX0JMQU5LCTQJLyogbm8gYmxhbmsgbG9vcCBpcyBhdHRhY2hlZCAqLwotI2RlZmluZSBBV0VfU0FNUExFX1NJTkdMRVNIT1QJOAkvKiBzaW5nbGUtc2hvdCB3L28gbG9vcCAqLwotI2RlZmluZSBBV0VfU0FNUExFX0JJRElSX0xPT1AJMTYJLyogYmlkaXJlY3Rpb25hbCBsb29waW5nICovCi0jZGVmaW5lIEFXRV9TQU1QTEVfU1RFUkVPX0xFRlQJMzIJLyogc3RlcmVvIGxlZnQgc291bmQgKi8KLSNkZWZpbmUgQVdFX1NBTVBMRV9TVEVSRU9fUklHSFQJNjQJLyogc3RlcmVvIHJpZ2h0IHNvdW5kICovCi0jZGVmaW5lIEFXRV9TQU1QTEVfUkVWRVJTRV9MT09QIDEyOAkvKiByZXZlcnNlIGxvb3BpbmcgKi8KLQl1bnNpZ25lZCBpbnQgY2hlY2tzdW07CQkvKiBjaGVjayBzdW0gKi8KLSNpZiBkZWZpbmVkKEFXRV9DT01QQVRfMDMwKSAmJiBBV0VfQ09NUEFUXzAzMAotCXVuc2lnbmVkIHNob3J0IGRhdGFbMF07CQkvKiBzYW1wbGUgZGF0YSBmb2xsb3dzIGhlcmUgKi8KLSNlbmRpZgotfSBhd2Vfc2FtcGxlX2luZm87Ci0KLS8qI2RlZmluZSBBV0VfU0FNUExFX0lORk9fU0laRQkzMiovCi0jZGVmaW5lIEFXRV9TQU1QTEVfSU5GT19TSVpFCXNpemVvZihhd2Vfc2FtcGxlX2luZm8pCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB2b2ljZSBwcmVzZXQgbWFwcGluZwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotdHlwZWRlZiBzdHJ1Y3QgYXdlX3ZvaWNlX21hcCB7Ci0JaW50IG1hcF9iYW5rLCBtYXBfaW5zdHIsIG1hcF9rZXk7CS8qIGtleSA9IC0xIG1lYW5zIGFsbCBrZXlzICovCi0JaW50IHNyY19iYW5rLCBzcmNfaW5zdHIsIHNyY19rZXk7Ci19IGF3ZV92b2ljZV9tYXA7Ci0KLSNkZWZpbmUgQVdFX1ZPSUNFX01BUF9TSVpFCXNpemVvZihhd2Vfdm9pY2VfbWFwKQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogYXdlIGhhcmR3YXJlIGNvbnRyb2xzCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIF9BV0VfREVCVUdfTU9ERQkJCTB4MDAKLSNkZWZpbmUgX0FXRV9SRVZFUkJfTU9ERQkJMHgwMQotI2RlZmluZSBfQVdFX0NIT1JVU19NT0RFCQkweDAyCi0jZGVmaW5lIF9BV0VfUkVNT1ZFX0xBU1RfU0FNUExFUwkweDAzCi0jZGVmaW5lIF9BV0VfSU5JVElBTElaRV9DSElQCQkweDA0Ci0jZGVmaW5lIF9BV0VfU0VORF9FRkZFQ1QJCTB4MDUKLSNkZWZpbmUgX0FXRV9URVJNSU5BVEVfQ0hBTk5FTAkJMHgwNgotI2RlZmluZSBfQVdFX1RFUk1JTkFURV9BTEwJCTB4MDcKLSNkZWZpbmUgX0FXRV9JTklUSUFMX1ZPTFVNRQkJMHgwOAotI2RlZmluZSBfQVdFX0lOSVRJQUxfQVRURU4JX0FXRV9JTklUSUFMX1ZPTFVNRQotI2RlZmluZSBfQVdFX1JFU0VUX0NIQU5ORUwJCTB4MDkKLSNkZWZpbmUgX0FXRV9DSEFOTkVMX01PREUJCTB4MGEKLSNkZWZpbmUgX0FXRV9EUlVNX0NIQU5ORUxTCQkweDBiCi0jZGVmaW5lIF9BV0VfTUlTQ19NT0RFCQkJMHgwYwotI2RlZmluZSBfQVdFX1JFTEVBU0VfQUxMCQkweDBkCi0jZGVmaW5lIF9BV0VfTk9URU9GRl9BTEwJCTB4MGUKLSNkZWZpbmUgX0FXRV9DSE5fUFJFU1NVUkUJCTB4MGYKLS8qI2RlZmluZSBfQVdFX0dFVF9DVVJSRU5UX01PREUJCTB4MTAqLwotI2RlZmluZSBfQVdFX0VRVUFMSVpFUgkJCTB4MTEKLS8qI2RlZmluZSBfQVdFX0dFVF9NSVNDX01PREUJCTB4MTIqLwotLyojZGVmaW5lIF9BV0VfR0VUX0ZPTlRJTkZPCQkweDEzKi8KLQotI2RlZmluZSBfQVdFX01PREVfRkxBRwkJCTB4ODAKLSNkZWZpbmUgX0FXRV9DT09LRURfRkxBRwkJMHg0MAkvKiBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lIF9BV0VfTU9ERV9WQUxVRV9NQVNLCQkweDNGCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUgX0FXRV9TRVRfQ01EKHAsZGV2LHZvaWNlLGNtZCxwMSxwMikgXAoteygoY2hhciopKHApKVswXSA9IFNFUV9QUklWQVRFO1wKLSAoKGNoYXIqKShwKSlbMV0gPSBkZXY7XAotICgoY2hhciopKHApKVsyXSA9IF9BV0VfTU9ERV9GTEFHfChjbWQpO1wKLSAoKGNoYXIqKShwKSlbM10gPSB2b2ljZTtcCi0gKCh1bnNpZ25lZCBzaG9ydCopKHApKVsyXSA9IHAxO1wKLSAoKHVuc2lnbmVkIHNob3J0KikocCkpWzNdID0gcDI7fQotCi0vKiBidWZmZXJlZCBhY2Nlc3MgKi8KLSNkZWZpbmUgX0FXRV9DTUQoZGV2LCB2b2ljZSwgY21kLCBwMSwgcDIpIFwKLXtfU0VRX05FRURCVUYoOCk7XAotIF9BV0VfU0VUX0NNRChfc2VxYnVmICsgX3NlcWJ1ZnB0ciwgZGV2LCB2b2ljZSwgY21kLCBwMSwgcDIpO1wKLSBfU0VRX0FEVkJVRig4KTt9Ci0KLS8qIGRpcmVjdCBhY2Nlc3MgKi8KLSNkZWZpbmUgX0FXRV9DTURfTk9XKHNlcWZkLGRldix2b2ljZSxjbWQscDEscDIpIFwKLXtzdHJ1Y3Qgc2VxX2V2ZW50X3JlYyB0bXA7XAotIF9BV0VfU0VUX0NNRCgmdG1wLCBkZXYsIHZvaWNlLCBjbWQsIHAxLCBwMik7XAotIGlvY3RsKHNlcWZkLCBTTkRDVExfU0VRX09VVE9GQkFORCwgJnRtcCk7fQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBzZXQgZGVidWdnaW5nIG1vZGUgKi8KLSNkZWZpbmUgQVdFX0RFQlVHX01PREUoZGV2LHAxKQlfQVdFX0NNRChkZXYsIDAsIF9BV0VfREVCVUdfTU9ERSwgcDEsIDApCi0vKiBzZXQgcmV2ZXJiIG1vZGU7IGZyb20gMCB0byA3ICovCi0jZGVmaW5lIEFXRV9SRVZFUkJfTU9ERShkZXYscDEpCV9BV0VfQ01EKGRldiwgMCwgX0FXRV9SRVZFUkJfTU9ERSwgcDEsIDApCi0vKiBzZXQgY2hvcnVzIG1vZGU7IGZyb20gMCB0byA3ICovCi0jZGVmaW5lIEFXRV9DSE9SVVNfTU9ERShkZXYscDEpCV9BV0VfQ01EKGRldiwgMCwgX0FXRV9DSE9SVVNfTU9ERSwgcDEsIDApCi0KLS8qIHJlc2V0IGNoYW5uZWwgKi8KLSNkZWZpbmUgQVdFX1JFU0VUX0NIQU5ORUwoZGV2LGNoKSBfQVdFX0NNRChkZXYsIGNoLCBfQVdFX1JFU0VUX0NIQU5ORUwsIDAsIDApCi0jZGVmaW5lIEFXRV9SRVNFVF9DT05UUk9MKGRldixjaCkgX0FXRV9DTUQoZGV2LCBjaCwgX0FXRV9SRVNFVF9DSEFOTkVMLCAxLCAwKQotCi0vKiBzZW5kIGFuIGVmZmVjdCB0byBhbGwgbGF5ZXJzICovCi0jZGVmaW5lIEFXRV9TRU5EX0VGRkVDVChkZXYsdm9pY2UsdHlwZSx2YWx1ZSkgX0FXRV9DTUQoZGV2LHZvaWNlLF9BV0VfU0VORF9FRkZFQ1QsdHlwZSx2YWx1ZSkKLSNkZWZpbmUgQVdFX0FERF9FRkZFQ1QoZGV2LHZvaWNlLHR5cGUsdmFsdWUpIF9BV0VfQ01EKGRldix2b2ljZSxfQVdFX1NFTkRfRUZGRUNULCgodHlwZSl8MHg4MCksdmFsdWUpCi0jZGVmaW5lIEFXRV9VTlNFVF9FRkZFQ1QoZGV2LHZvaWNlLHR5cGUpIF9BV0VfQ01EKGRldix2b2ljZSxfQVdFX1NFTkRfRUZGRUNULCgodHlwZSl8MHg0MCksMCkKLS8qIHNlbmQgYW4gZWZmZWN0IHRvIGEgbGF5ZXIgKi8KLSNkZWZpbmUgQVdFX1NFTkRfTEFZRVJfRUZGRUNUKGRldix2b2ljZSxsYXllcix0eXBlLHZhbHVlKSBfQVdFX0NNRChkZXYsdm9pY2UsX0FXRV9TRU5EX0VGRkVDVCwoKGxheWVyKzEpPDw4fCh0eXBlKSksdmFsdWUpCi0jZGVmaW5lIEFXRV9BRERfTEFZRVJfRUZGRUNUKGRldix2b2ljZSxsYXllcix0eXBlLHZhbHVlKSBfQVdFX0NNRChkZXYsdm9pY2UsX0FXRV9TRU5EX0VGRkVDVCwoKGxheWVyKzEpPDw4fCh0eXBlKXwweDgwKSx2YWx1ZSkKLSNkZWZpbmUgQVdFX1VOU0VUX0xBWUVSX0VGRkVDVChkZXYsdm9pY2UsbGF5ZXIsdHlwZSkgX0FXRV9DTUQoZGV2LHZvaWNlLF9BV0VfU0VORF9FRkZFQ1QsKChsYXllcisxKTw8OHwodHlwZSl8MHg0MCksMCkKLQotLyogdGVybWluYXRlIHNvdW5kIG9uIHRoZSBjaGFubmVsL3ZvaWNlICovCi0jZGVmaW5lIEFXRV9URVJNSU5BVEVfQ0hBTk5FTChkZXYsdm9pY2UpIF9BV0VfQ01EKGRldix2b2ljZSxfQVdFX1RFUk1JTkFURV9DSEFOTkVMLDAsMCkKLS8qIHRlcm1pbmF0ZSBhbGwgc291bmRzICovCi0jZGVmaW5lIEFXRV9URVJNSU5BVEVfQUxMKGRldikgX0FXRV9DTUQoZGV2LCAwLCBfQVdFX1RFUk1JTkFURV9BTEwsIDAsIDApCi0vKiByZWxlYXNlIGFsbCBzb3VuZHMgKHcvbyBzdXN0YWluIGVmZmVjdCkgKi8KLSNkZWZpbmUgQVdFX1JFTEVBU0VfQUxMKGRldikgX0FXRV9DTUQoZGV2LCAwLCBfQVdFX1JFTEVBU0VfQUxMLCAwLCAwKQotLyogbm90ZSBvZmYgYWxsIHNvdW5kcyAodyBzdXN0YWluIGVmZmVjdCkgKi8KLSNkZWZpbmUgQVdFX05PVEVPRkZfQUxMKGRldikgX0FXRV9DTUQoZGV2LCAwLCBfQVdFX05PVEVPRkZfQUxMLCAwLCAwKQotCi0vKiBzZXQgaW5pdGlhbCBhdHRlbnVhdGlvbiAqLwotI2RlZmluZSBBV0VfSU5JVElBTF9WT0xVTUUoZGV2LGF0dGVuKSBfQVdFX0NNRChkZXYsIDAsIF9BV0VfSU5JVElBTF9WT0xVTUUsIGF0dGVuLCAwKQotI2RlZmluZSBBV0VfSU5JVElBTF9BVFRFTiAgQVdFX0lOSVRJQUxfVk9MVU1FCi0vKiByZWxhdGl2ZSBhdHRlbnVhdGlvbiAqLwotI2RlZmluZSBBV0VfU0VUX0FUVEVOKGRldixhdHRlbikgIF9BV0VfQ01EKGRldiwgMCwgX0FXRV9JTklUSUFMX1ZPTFVNRSwgYXR0ZW4sIDEpCi0KLS8qIHNldCBjaGFubmVsIHBsYXlpbmcgbW9kZTsgbW9kZT0wLzEvMiAqLwotI2RlZmluZSBBV0VfU0VUX0NIQU5ORUxfTU9ERShkZXYsbW9kZSkgX0FXRV9DTUQoZGV2LCAwLCBfQVdFX0NIQU5ORUxfTU9ERSwgbW9kZSwgMCkKLSNkZWZpbmUgQVdFX1BMQVlfSU5ESVJFQ1QJMAkvKiBpbmRpcmVjdCB2b2ljZSBtb2RlIChkZWZhdWx0KSAqLwotI2RlZmluZSBBV0VfUExBWV9NVUxUSQkJMQkvKiBtdWx0aSBub3RlIHZvaWNlIG1vZGUgKi8KLSNkZWZpbmUgQVdFX1BMQVlfRElSRUNUCQkyCS8qIGRpcmVjdCBzaW5nbGUgdm9pY2UgbW9kZSAqLwotI2RlZmluZSBBV0VfUExBWV9NVUxUSTIJCTMJLyogc2VxdWVuY2VyMiBtb2RlOyB1c2VkIGludGVybmFsbHkgKi8KLQotLyogc2V0IGRydW0gY2hhbm5lbCBtYXNrOyBjaGFubmVscyBpcyAzMmJpdCBsb25nIHZhbHVlICovCi0jZGVmaW5lIEFXRV9EUlVNX0NIQU5ORUxTKGRldixjaGFubmVscykgX0FXRV9DTUQoZGV2LCAwLCBfQVdFX0RSVU1fQ0hBTk5FTFMsICgoY2hhbm5lbHMpICYgMHhmZmZmKSwgKChjaGFubmVscykgPj4gMTYpKQotCi0vKiBzZXQgYmFzcyBhbmQgdHJlYmxlIGNvbnRyb2w7IHZhbHVlcyBhcmUgZnJvbSAwIHRvIDExICovCi0jZGVmaW5lIEFXRV9FUVVBTElaRVIoZGV2LGJhc3MsdHJlYmxlKSBfQVdFX0NNRChkZXYsIDAsIF9BV0VfRVFVQUxJWkVSLCBiYXNzLCB0cmVibGUpCi0KLS8qIHJlbW92ZSBsYXN0IGxvYWRlZCBzYW1wbGVzICovCi0jZGVmaW5lIEFXRV9SRU1PVkVfTEFTVF9TQU1QTEVTKHNlcWZkLGRldikgX0FXRV9DTURfTk9XKHNlcWZkLCBkZXYsIDAsIF9BV0VfUkVNT1ZFX0xBU1RfU0FNUExFUywgMCwgMCkKLS8qIGluaXRpYWxpemUgZW11ODAwMCBjaGlwICovCi0jZGVmaW5lIEFXRV9JTklUSUFMSVpFX0NISVAoc2VxZmQsZGV2KSBfQVdFX0NNRF9OT1coc2VxZmQsIGRldiwgMCwgX0FXRV9JTklUSUFMSVpFX0NISVAsIDAsIDApCi0KLS8qIHNldCBtaXNjZWxsYW5lb3VzIG1vZGVzOyBtZXRhIGNvbW1hbmQgKi8KLSNkZWZpbmUgQVdFX01JU0NfTU9ERShkZXYsbW9kZSx2YWx1ZSkgX0FXRV9DTUQoZGV2LCAwLCBfQVdFX01JU0NfTU9ERSwgbW9kZSwgdmFsdWUpCi0vKiBleGNsdXNpdmUgc291bmQgb2ZmOyAxPW9mZiAqLwotI2RlZmluZSBBV0VfRVhDTFVTSVZFX1NPVU5EKGRldixtb2RlKSBBV0VfTUlTQ19NT0RFKGRldixBV0VfTURfRVhDTFVTSVZFX1NPVU5ELG1vZGUpCi0vKiBkZWZhdWx0IEdVUyBiYW5rIG51bWJlciAqLwotI2RlZmluZSBBV0VfU0VUX0dVU19CQU5LKGRldixiYW5rKSBBV0VfTUlTQ19NT0RFKGRldixBV0VfTURfR1VTX0JBTkssYmFuaykKLS8qIGNoYW5nZSBwYW5uaW5nIHBvc2l0aW9uIGluIHJlYWx0aW1lOyAwPWRvbid0IDE9ZG8gKi8KLSNkZWZpbmUgQVdFX1JFQUxUSU1FX1BBTihkZXYsbW9kZSkgQVdFX01JU0NfTU9ERShkZXYsQVdFX01EX1JFQUxUSU1FX1BBTixtb2RlKQotCi0vKiBleHRlbmRlZCBwcmVzc3VyZSBjb250cm9sczsgbm90IHBvcnRhYmxlIHdpdGggb3RoZXIgc291bmQgZHJpdmVycyAqLwotI2RlZmluZSBBV0VfS0VZX1BSRVNTVVJFKGRldixjaCxub3RlLHZlbCkgU0VRX1NUQVJUX05PVEUoZGV2LGNoLChub3RlKSsxMjgsdmVsKQotI2RlZmluZSBBV0VfQ0hOX1BSRVNTVVJFKGRldixjaCx2ZWwpIF9BV0VfQ01EKGRldixjaCxfQVdFX0NITl9QUkVTU1VSRSx2ZWwsMCkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogcmV2ZXJiIG1vZGUgcGFyYW1ldGVycyAqLwotI2RlZmluZQlBV0VfUkVWRVJCX1JPT00xCTAKLSNkZWZpbmUgQVdFX1JFVkVSQl9ST09NMgkxCi0jZGVmaW5lCUFXRV9SRVZFUkJfUk9PTTMJMgotI2RlZmluZQlBV0VfUkVWRVJCX0hBTEwxCTMKLSNkZWZpbmUJQVdFX1JFVkVSQl9IQUxMMgk0Ci0jZGVmaW5lCUFXRV9SRVZFUkJfUExBVEUJNQotI2RlZmluZQlBV0VfUkVWRVJCX0RFTEFZCTYKLSNkZWZpbmUJQVdFX1JFVkVSQl9QQU5OSU5HREVMQVkgNwotI2RlZmluZSBBV0VfUkVWRVJCX1BSRURFRklORUQJOAotLyogdXNlciBjYW4gZGVmaW5lIHJldmVyYiBtb2RlcyB1cCB0byAzMiAqLwotI2RlZmluZSBBV0VfUkVWRVJCX05VTUJFUlMJMzIKLQotdHlwZWRlZiBzdHJ1Y3QgYXdlX3JldmVyYl9meF9yZWMgewotCXVuc2lnbmVkIHNob3J0IHBhcm1zWzI4XTsKLX0gYXdlX3JldmVyYl9meF9yZWM7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIGNob3J1cyBtb2RlIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgQVdFX0NIT1JVU18xCQkwCi0jZGVmaW5lCUFXRV9DSE9SVVNfMgkJMQotI2RlZmluZQlBV0VfQ0hPUlVTXzMJCTIKLSNkZWZpbmUJQVdFX0NIT1JVU180CQkzCi0jZGVmaW5lCUFXRV9DSE9SVVNfRkVFREJBQ0sJNAotI2RlZmluZQlBV0VfQ0hPUlVTX0ZMQU5HRVIJNQotI2RlZmluZQlBV0VfQ0hPUlVTX1NIT1JUREVMQVkJNgotI2RlZmluZQlBV0VfQ0hPUlVTX1NIT1JUREVMQVkyCTcKLSNkZWZpbmUgQVdFX0NIT1JVU19QUkVERUZJTkVECTgKLS8qIHVzZXIgY2FuIGRlZmluZSBjaG9ydXMgbW9kZXMgdXAgdG8gMzIgKi8KLSNkZWZpbmUgQVdFX0NIT1JVU19OVU1CRVJTCTMyCi0KLXR5cGVkZWYgc3RydWN0IGF3ZV9jaG9ydXNfZnhfcmVjIHsKLQl1bnNpZ25lZCBzaG9ydCBmZWVkYmFjazsJLyogZmVlZGJhY2sgbGV2ZWwgKDB4RTYwMC0weEU2RkYpICovCi0JdW5zaWduZWQgc2hvcnQgZGVsYXlfb2Zmc2V0OwkvKiBkZWxheSAoMC0weDBEQTMpIFsxLzQ0MTAwIHNlY10gKi8KLQl1bnNpZ25lZCBzaG9ydCBsZm9fZGVwdGg7CS8qIExGTyBkZXB0aCAoMHhCQzAwLTB4QkNGRikgKi8KLQl1bnNpZ25lZCBpbnQgZGVsYXk7CS8qIHJpZ2h0IGRlbGF5ICgwLTB4RkZGRkZGRkYpIFsxLzI1Ni80NDEwMCBzZWNdICovCi0JdW5zaWduZWQgaW50IGxmb19mcmVxOwkJLyogTEZPIGZyZXEgTEZPIGZyZXEgKDAtMHhGRkZGRkZGRikgKi8KLX0gYXdlX2Nob3J1c19meF9yZWM7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIG1pc2MgbW9kZSB0eXBlcyAqLwotZW51bSB7Ci0vKiAwKi8JQVdFX01EX0VYQ0xVU0lWRV9PRkYsCS8qIG9ic29sZXRlICovCi0vKiAxKi8JQVdFX01EX0VYQ0xVU0lWRV9PTiwJLyogb2Jzb2xldGUgKi8KLS8qIDIqLwlBV0VfTURfVkVSU0lPTiwJCS8qIHJlYWQgb25seSAqLwotLyogMyovCUFXRV9NRF9FWENMVVNJVkVfU09VTkQsCS8qIDAvMTogZXhjbHVzaXZlIG5vdGUgb24gKGRlZmF1bHQ9MSkgKi8KLS8qIDQqLwlBV0VfTURfUkVBTFRJTUVfUEFOLAkvKiAwLzE6IGRvIHJlYWx0aW1lIHBhbiBjaGFuZ2UgKGRlZmF1bHQ9MSkgKi8KLS8qIDUqLwlBV0VfTURfR1VTX0JBTkssCS8qIGJhbmsgbnVtYmVyIGZvciBHVVMgcGF0Y2hlcyAoZGVmYXVsdD0wKSAqLwotLyogNiovCUFXRV9NRF9LRUVQX0VGRkVDVCwJLyogMC8xOiBrZWVwIGVmZmVjdCB2YWx1ZXMsIChkZWZhdWx0PTApICovCi0vKiA3Ki8JQVdFX01EX1pFUk9fQVRURU4sCS8qIGF0dGVudWF0aW9uIG9mIG1heCB2b2x1bWUgKGRlZmF1bHQ9MzIpICovCi0vKiA4Ki8JQVdFX01EX0NITl9QUklPUiwJLyogMC8xOiBzZXQgTUlESSBjaGFubmVsIHByaW9yaXR5IG1vZGUgKGRlZmF1bHQ9MSkgKi8KLS8qIDkqLwlBV0VfTURfTU9EX1NFTlNFLAkvKiBpbnRlZ2VyOiBtb2R3aGVlbCBzZW5zaXRpdml0eSAoZGVmPTE4KSAqLwotLyoxMCovCUFXRV9NRF9ERUZfUFJFU0VULAkvKiBpbnRlZ2VyOiBkZWZhdWx0IHByZXNldCBudW1iZXIgKGRlZj0wKSAqLwotLyoxMSovCUFXRV9NRF9ERUZfQkFOSywJLyogaW50ZWdlcjogZGVmYXVsdCBiYW5rIG51bWJlciAoZGVmPTApICovCi0vKjEyKi8JQVdFX01EX0RFRl9EUlVNLAkvKiBpbnRlZ2VyOiBkZWZhdWx0IGRydW1zZXQgbnVtYmVyIChkZWY9MCkgKi8KLS8qMTMqLwlBV0VfTURfVE9HR0xFX0RSVU1fQkFOSywgLyogMC8xOiB0b2dnbGUgZHJ1bSBmbGFnIHdpdGggYmFuayMgKGRlZj0wKSAqLwotLyoxNCovCUFXRV9NRF9ORVdfVk9MVU1FX0NBTEMsCS8qIDAvMTogdm9sdW1lIGNhbGN1bGF0aW9uIG1vZGUgKGRlZj0xKSAqLwotLyoxNSovCUFXRV9NRF9DSE9SVVNfTU9ERSwJLyogaW50ZWdlcjogY2hvcnVzIG1vZGUgKGRlZj0yKSAqLwotLyoxNiovCUFXRV9NRF9SRVZFUkJfTU9ERSwJLyogaW50ZWdlcjogY2hvcnVzIG1vZGUgKGRlZj00KSAqLwotLyoxNyovCUFXRV9NRF9CQVNTX0xFVkVMLAkvKiBpbnRlZ2VyOiBiYXNzIGxldmVsIChkZWY9NSkgKi8KLS8qMTgqLwlBV0VfTURfVFJFQkxFX0xFVkVMLAkvKiBpbnRlZ2VyOiB0cmVibGUgbGV2ZWwgKGRlZj05KSAqLwotLyoxOSovCUFXRV9NRF9ERUJVR19NT0RFLAkvKiBpbnRlZ2VyOiBkZWJ1ZyBsZXZlbCAoZGVmPTApICovCi0vKjIwKi8JQVdFX01EX1BBTl9FWENIQU5HRSwJLyogMC8xOiBleGNoYW5nZSBwYW5uaW5nIGRpcmVjdGlvbiAoZGVmPTApICovCi0JQVdFX01EX0VORCwKLX07Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIGVmZmVjdCBwYXJhbWV0ZXJzICovCi1lbnVtIHsKLQotLyogbW9kdWxhdGlvbiBlbnZlbG9wZSBwYXJhbWV0ZXJzICovCi0vKiAwKi8JQVdFX0ZYX0VOVjFfREVMQVksCS8qIFdPUkQ6IEVOVlZBTCAqLwotLyogMSovCUFXRV9GWF9FTlYxX0FUVEFDSywJLyogQllURTogdXAgQVRLSExEICovCi0vKiAyKi8JQVdFX0ZYX0VOVjFfSE9MRCwJLyogQllURTogbHcgQVRLSExEICovCi0vKiAzKi8JQVdFX0ZYX0VOVjFfREVDQVksCS8qIEJZVEU6IGx3IERDWVNVUyAqLwotLyogNCovCUFXRV9GWF9FTlYxX1JFTEVBU0UsCS8qIEJZVEU6IGx3IERDWVNVUyAqLwotLyogNSovCUFXRV9GWF9FTlYxX1NVU1RBSU4sCS8qIEJZVEU6IHVwIERDWVNVUyAqLwotLyogNiovCUFXRV9GWF9FTlYxX1BJVENILAkvKiBCWVRFOiB1cCBQRUZFICovCi0vKiA3Ki8JQVdFX0ZYX0VOVjFfQ1VUT0ZGLAkvKiBCWVRFOiBsdyBQRUZFICovCi0KLS8qIHZvbHVtZSBlbnZlbG9wZSBwYXJhbWV0ZXJzICovCi0vKiA4Ki8JQVdFX0ZYX0VOVjJfREVMQVksCS8qIFdPUkQ6IEVOVlZPTCAqLwotLyogOSovCUFXRV9GWF9FTlYyX0FUVEFDSywJLyogQllURTogdXAgQVRLSExEViAqLwotLyoxMCovCUFXRV9GWF9FTlYyX0hPTEQsCS8qIEJZVEU6IGx3IEFUS0hMRFYgKi8KLS8qMTEqLwlBV0VfRlhfRU5WMl9ERUNBWSwJLyogQllURTogbHcgRENZU1VTViAqLwotLyoxMiovCUFXRV9GWF9FTlYyX1JFTEVBU0UsCS8qIEJZVEU6IGx3IERDWVNVU1YgKi8KLS8qMTMqLwlBV0VfRlhfRU5WMl9TVVNUQUlOLAkvKiBCWVRFOiB1cCBEQ1lTVVNWICovCi0JCi0vKiBMRk8xICh0cmVtb2xvICYgdmlicmF0bykgcGFyYW1ldGVycyAqLwotLyoxNCovCUFXRV9GWF9MRk8xX0RFTEFZLAkvKiBXT1JEOiBMRk8xVkFMICovCi0vKjE1Ki8JQVdFX0ZYX0xGTzFfRlJFUSwJLyogQllURTogbG8gVFJFTUZSUSAqLwotLyoxNiovCUFXRV9GWF9MRk8xX1ZPTFVNRSwJLyogQllURTogdXAgVFJFTUZSUSAqLwotLyoxNyovCUFXRV9GWF9MRk8xX1BJVENILAkvKiBCWVRFOiB1cCBGTU1PRCAqLwotLyoxOCovCUFXRV9GWF9MRk8xX0NVVE9GRiwJLyogQllURTogbG8gRk1NT0QgKi8KLQotLyogTEZPMiAodmlicmF0bykgcGFyYW1ldGVycyAqLwotLyoxOSovCUFXRV9GWF9MRk8yX0RFTEFZLAkvKiBXT1JEOiBMRk8yVkFMICovCi0vKjIwKi8JQVdFX0ZYX0xGTzJfRlJFUSwJLyogQllURTogbG8gRk0yRlJRMiAqLwotLyoyMSovCUFXRV9GWF9MRk8yX1BJVENILAkvKiBCWVRFOiB1cCBGTTJGUlEyICovCi0KLS8qIE90aGVyIG92ZXJhbGwgZWZmZWN0IHBhcmFtZXRlcnMgKi8KLS8qMjIqLwlBV0VfRlhfSU5JVF9QSVRDSCwJLyogU0hPUlQ6IHBpdGNoIG9mZnNldCAqLwotLyoyMyovCUFXRV9GWF9DSE9SVVMsCQkvKiBCWVRFOiBjaG9ydXMgZWZmZWN0cyBzZW5kICgwLTI1NSkgKi8KLS8qMjQqLwlBV0VfRlhfUkVWRVJCLAkJLyogQllURTogcmV2ZXJiIGVmZmVjdHMgc2VuZCAoMC0yNTUpICovCi0vKjI1Ki8JQVdFX0ZYX0NVVE9GRiwJCS8qIEJZVEU6IHVwIElGQVROICovCi0vKjI2Ki8JQVdFX0ZYX0ZJTFRFUlEsCQkvKiBCWVRFOiB1cCBDQ0NBICovCi0KLS8qIFNhbXBsZSAvIGxvb3Agb2Zmc2V0IGNoYW5nZXMgKi8KLS8qMjcqLwlBV0VfRlhfU0FNUExFX1NUQVJULAkvKiBTSE9SVDogb2Zmc2V0ICovCi0vKjI4Ki8JQVdFX0ZYX0xPT1BfU1RBUlQsCS8qIFNIT1JUOiBvZmZzZXQgKi8KLS8qMjkqLwlBV0VfRlhfTE9PUF9FTkQsCS8qIFNIT1JUOiBvZmZzZXQgKi8KLS8qMzAqLwlBV0VfRlhfQ09BUlNFX1NBTVBMRV9TVEFSVCwJLyogU0hPUlQ6IHVwcGVyIHdvcmQgb2Zmc2V0ICovCi0vKjMxKi8JQVdFX0ZYX0NPQVJTRV9MT09QX1NUQVJULAkvKiBTSE9SVDogdXBwZXIgd29yZCBvZmZzZXQgKi8KLS8qMzIqLwlBV0VfRlhfQ09BUlNFX0xPT1BfRU5ELAkJLyogU0hPUlQ6IHVwcGVyIHdvcmQgb2Zmc2V0ICovCi0vKjMzKi8JQVdFX0ZYX0FUVEVOLAkJLyogQllURTogbG8gSUZBVE4gKi8KLQotCUFXRV9GWF9FTkQsCi19OwotCi0jZW5kaWYgLyogQVdFX1ZPSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKaW5kZXggMmQ5NTZjZC4uZTFhNzA4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKQEAgLTE3LDYgKzE3LDggQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2RlZmluZSBDT1JFTkFNRV9NQVhfU0laRSAxMjgKKwogLyoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gaG9sZCB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIHVzZWQgd2hlbiBsb2FkaW5nIGJpbmFyaWVzLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCBhNjg2ZWFiLi5kYjViMDBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTg1NCw3ICs4NTQsNyBAQAogCiBzdHJ1Y3Qgd29ya19zdHJ1Y3Q7CiBpbnQga2Jsb2NrZF9zY2hlZHVsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci12b2lkIGtibG9ja2RfZmx1c2godm9pZCk7Cit2b2lkIGtibG9ja2RfZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiAjZGVmaW5lIE1PRFVMRV9BTElBU19CTE9DS0RFVihtYWpvcixtaW5vcikgXAogCU1PRFVMRV9BTElBUygiYmxvY2stbWFqb3ItIiBfX3N0cmluZ2lmeShtYWpvcikgIi0iIF9fc3RyaW5naWZ5KG1pbm9yKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKaW5kZXggMDM2NWVjOS4uYzgzNTM0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ib290bWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKQEAgLTU5LDYgKzU5LDcgQEAKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJICB1bnNpZ25lZCBsb25nIGdvYWwsCiAJCQkJICB1bnNpZ25lZCBsb25nIGxpbWl0KTsKK2V4dGVybiB2b2lkICphbGxvY19ib290bWVtX2hpZ2hfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiAjaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFCiBleHRlcm4gdm9pZCByZXNlcnZlX2Jvb3RtZW0odW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oCmluZGV4IGU4NmU0YTkuLjNkYzcxNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmgKQEAgLTEyNCwxOSArMTI0LDggQEAKICNkZWZpbmUgYmUzMl90b19jcHVzIF9fYmUzMl90b19jcHVzCiAjZGVmaW5lIGNwdV90b19iZTE2cyBfX2NwdV90b19iZTE2cwogI2RlZmluZSBiZTE2X3RvX2NwdXMgX19iZTE2X3RvX2NwdXMKLSNlbmRpZgogCi0KLSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCiAvKgotICogSGFuZGxlIG50b2hsIGFuZCBzdWNoZXMuIFRoZXNlIGhhdmUgdmFyaW91cyBjb21wYXRpYmlsaXR5Ci0gKiBpc3N1ZXMgLSBsaWtlIHdlIHdhbnQgdG8gZ2l2ZSB0aGUgcHJvdG90eXBlIGV2ZW4gdGhvdWdoIHdlCi0gKiBhbHNvIGhhdmUgYSBtYWNybyBmb3IgdGhlbSBpbiBjYXNlIHNvbWUgc3RyYW5nZSBwcm9ncmFtCi0gKiB3YW50cyB0byB0YWtlIHRoZSBhZGRyZXNzIG9mIHRoZSB0aGluZyBvciBzb21ldGhpbmcuLgotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSB1c2VkIHRvIHJldHVybiBhICJsb25nIiBpbiBsaWJjNSwgZXZlbiB0aG91Z2gKLSAqIGxvbmcgaXMgb2Z0ZW4gNjQtYml0IHRoZXNlIGRheXMuLiBUaHVzIHRoZSBjYXN0cy4KLSAqCiAgKiBUaGV5IGhhdmUgdG8gYmUgbWFjcm9zIGluIG9yZGVyIHRvIGRvIHRoZSBjb25zdGFudCBmb2xkaW5nCiAgKiBjb3JyZWN0bHkgLSBpZiB0aGUgYXJndW1lbnQgcGFzc2VkIGludG8gYSBpbmxpbmUgZnVuY3Rpb24KICAqIGl0IGlzIG5vIGxvbmdlciBjb25zdGFudCBhY2NvcmRpbmcgdG8gZ2NjLi4KQEAgLTE0NywxNyArMTM2LDYgQEAKICN1bmRlZiBodG9ubAogI3VuZGVmIGh0b25zCiAKLS8qCi0gKiBEbyB0aGUgcHJvdG90eXBlcy4gU29tZWJvZHkgbWlnaHQgd2FudCB0byB0YWtlIHRoZQotICogYWRkcmVzcyBvciBzb21lIHN1Y2ggc2ljayB0aGluZy4uCi0gKi8KLWV4dGVybiBfX3UzMgkJCW50b2hsKF9fYmUzMik7Ci1leHRlcm4gX19iZTMyCQkJaHRvbmwoX191MzIpOwotZXh0ZXJuIF9fdTE2CQkJbnRvaHMoX19iZTE2KTsKLWV4dGVybiBfX2JlMTYJCQlodG9ucyhfX3UxNik7Ci0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fT1BUSU1JWkVfXykKLQogI2RlZmluZSBfX19odG9ubCh4KSBfX2NwdV90b19iZTMyKHgpCiAjZGVmaW5lIF9fX2h0b25zKHgpIF9fY3B1X3RvX2JlMTYoeCkKICNkZWZpbmUgX19fbnRvaGwoeCkgX19iZTMyX3RvX2NwdSh4KQpAQCAtMTY4LDkgKzE0Niw2IEBACiAjZGVmaW5lIGh0b25zKHgpIF9fX2h0b25zKHgpCiAjZGVmaW5lIG50b2hzKHgpIF9fX250b2hzKHgpCiAKLSNlbmRpZiAvKiBPUFRJTUlaRSAqLwotCiAjZW5kaWYgLyogS0VSTkVMICovCiAKLQogI2VuZGlmIC8qIF9MSU5VWF9CWVRFT1JERVJfR0VORVJJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9zd2FiLmggYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9zd2FiLmgKaW5kZXggMjVmN2YzMi4uMTQyMTM0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaApAQCAtMTAsNiArMTAsMTAgQEAKICAqICAgIHNlcGFyYXRlZCBzd2FiIGZ1bmN0aW9ucyBmcm9tIGNwdV90b19YWCwKICAqICAgIHRvIGNsZWFuIHVwIHN1cHBvcnQgZm9yIGJpemFycmUtZW5kaWFuIGFyY2hpdGVjdHVyZXMuCiAgKgorICogVHJlbnQgUGllcGhvIDx4eXp6eUBzcGVha2Vhc3kub3JnPiAyMDA3MTE0CisgKiAgICBtYWtlIGNvbnN0YW50LWZvbGRpbmcgd29yaywgcHJvdmlkZSBDIHZlcnNpb25zIHRoYXQKKyAqICAgIGdjYyBjYW4gb3B0aW1pemUgYmV0dGVyLCBleHBsYWluIGRpZmZlcmVudCB2ZXJzaW9ucworICoKICAqIFNlZSBhc20taTM4Ni9ieXRlb3JkZXIuaCBhbmQgc3VjaGVzIGZvciBleGFtcGxlcyBvZiBob3cgdG8gcHJvdmlkZQogICogYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBvcHRpbWl6ZWQgdmVyc2lvbnMKICAqCkBAIC0xNyw0MCArMjEsNjYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKKy8qIEZ1bmN0aW9ucy9tYWNyb3MgZGVmaW5lZCwgdGhlcmUgYXJlIGEgbG90OgorICoKKyAqIF9fX3N3YWJYWAorICogICAgR2VuZXJpYyBDIHZlcnNpb25zIG9mIHRoZSBzd2FiIGZ1bmN0aW9ucy4KKyAqCisgKiBfX19jb25zdGFudF9zd2FiWFgKKyAqICAgIEMgdmVyc2lvbnMgdGhhdCBnY2MgY2FuIGZvbGQgaW50byBhIGNvbXBpbGUtdGltZSBjb25zdGFudCB3aGVuCisgKiAgICB0aGUgYXJndW1lbnQgaXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQuCisgKgorICogX19hcmNoX19zd2FiWFhbc3BdPworICogICAgQXJjaGl0ZWN0dXJlIG9wdGltaXplZCB2ZXJzaW9ucyBvZiBhbGwgdGhlIHN3YWIgZnVuY3Rpb25zCisgKiAgICAoaW5jbHVkaW5nIHRoZSBzIGFuZCBwIHZlcnNpb25zKS4gIFRoZXNlIGNhbiBiZSBkZWZpbmVkIGluCisgKiAgICBhc20tYXJjaC9ieXRlb3JkZXIuaC4gIEFueSB3aGljaCBhcmUgbm90LCBhcmUgZGVmaW5lZCBoZXJlLgorICogICAgX19hcmNoX19zd2FiWFhzKCkgaXMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBfX2FyY2hfX3N3YWJYWHAoKSwgd2hpY2gKKyAqICAgIGlzIGRlZmluZWQgaW4gdGVybXMgb2YgX19hcmNoX19zd2FiWFgoKSwgd2hpY2ggaXMgaW4gdHVybiBkZWZpbmVkCisgKiAgICBpbiB0ZXJtcyBvZiBfX19zd2FiWFgoeCkuCisgKiAgICBUaGVzZSBtdXN0IGJlIG1hY3Jvcy4gIFRoZXkgbWF5IGJlIHVuc2FmZSBmb3IgYXJndW1lbnRzIHdpdGgKKyAqICAgIHNpZGUtZWZmZWN0cy4KKyAqCisgKiBfX2Zzd2FiWFgKKyAqICAgIElubGluZSBmdW5jdGlvbiB2ZXJzaW9ucyBvZiB0aGUgX19hcmNoX18gbWFjcm9zLiAgVGhlc2UgX2FyZV8gc2FmZQorICogICAgaWYgdGhlIGFyZ3VtZW50cyBoYXZlIHNpZGUtZWZmZWN0cy4gIE5vdGUgdGhlcmUgYXJlIG5vIHMgYW5kIHAKKyAqICAgIHZlcnNpb25zIG9mIHRoZXNlLgorICoKKyAqIF9fc3dhYlhYW3NiXQorICogICAgVGhlcmUgYXJlIHRoZSBvbmVzIHlvdSBzaG91bGQgYWN0dWFsbHkgdXNlLiAgVGhlIF9fc3dhYlhYIHZlcnNpb25zCisgKiAgICB3aWxsIGJlIGEgY29uc3RhbnQgZ2l2ZW4gYSBjb25zdGFudCBhcmd1bWVudCBhbmQgdXNlIHRoZSBhcmNoCisgKiAgICBzcGVjaWZpYyBjb2RlIChpZiBhbnkpIGZvciBub24tY29uc3RhbnQgYXJndW1lbnRzLiAgVGhlIHMgYW5kIHAKKyAqICAgIHZlcnNpb25zIGFsd2F5cyB1c2UgdGhlIGFyY2ggc3BlY2lmaWMgY29kZSAoY29uc3RhbnQgZm9sZGluZworICogICAgZG9lc24ndCBhcHBseSkuICBUaGV5IGFyZSBzYWZlIHRvIHVzZSB3aXRoIGFyZ3VtZW50cyB3aXRoCisgKiAgICBzaWRlLWVmZmVjdHMuCisgKgorICogc3dhYlhYW3NiXQorICogICAgTmlja25hbWVzIGZvciBfX3N3YWJYWFtzYl0gdG8gdXNlIGluIHRoZSBrZXJuZWwuCisgKi8KKwogLyogY2FzdHMgYXJlIG5lY2Vzc2FyeSBmb3IgY29uc3RhbnRzLCBiZWNhdXNlIHdlIG5ldmVyIGtub3cgaG93IGZvciBzdXJlCiAgKiBob3cgVS9VTC9VTEwgbWFwIHRvIF9fdTE2LCBfX3UzMiwgX191NjQuIEF0IGxlYXN0IG5vdCBpbiBhIHBvcnRhYmxlIHdheS4KICAqLwotI2RlZmluZSBfX19zd2FiMTYoeCkgXAotKHsgXAotCV9fdTE2IF9feCA9ICh4KTsgXAotCSgoX191MTYpKCBcCi0JCSgoKF9fdTE2KShfX3gpICYgKF9fdTE2KTB4MDBmZlUpIDw8IDgpIHwgXAotCQkoKChfX3UxNikoX194KSAmIChfX3UxNikweGZmMDBVKSA+PiA4KSApKTsgXAotfSkKIAotI2RlZmluZSBfX19zd2FiMzIoeCkgXAotKHsgXAotCV9fdTMyIF9feCA9ICh4KTsgXAotCSgoX191MzIpKCBcCi0JCSgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgXAotCQkoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDBmZjAwVUwpIDw8ICA4KSB8IFwKLQkJKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiAgOCkgfCBcCi0JCSgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpOyBcCi19KQotCi0jZGVmaW5lIF9fX3N3YWI2NCh4KSBcCi0oeyBcCi0JX191NjQgX194ID0gKHgpOyBcCi0JKChfX3U2NCkoIFwKLQkJKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMDAwMDBmZlVMTCkgPDwgNTYpIHwgXAotCQkoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAwMDBmZjAwVUxMKSA8PCA0MCkgfCBcCi0JCShfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8IFwKLQkJKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDBmZjAwMDAwMFVMTCkgPDwgIDgpIHwgXAotCSAgICAgICAgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4gIDgpIHwgXAotCQkoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCBcCi0JCShfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwZmYwMDAwMDAwMDAwMDBVTEwpID4+IDQwKSB8IFwKLQkJKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgPj4gNTYpICkpOyBcCi19KQorc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UxNiBfX19zd2FiMTYoX191MTYgeCkKK3sKKwlyZXR1cm4geDw8OCB8IHg+Pjg7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX3N3YWIzMihfX3UzMiB4KQoreworCXJldHVybiB4PDwyNCB8IHg+PjI0IHwKKwkJKHggJiAoX191MzIpMHgwMDAwZmYwMFVMKTw8OCB8CisJCSh4ICYgKF9fdTMyKTB4MDBmZjAwMDBVTCk+Pjg7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTY0IF9fX3N3YWI2NChfX3U2NCB4KQoreworCXJldHVybiB4PDw1NiB8IHg+PjU2IHwKKwkJKHggJiAoX191NjQpMHgwMDAwMDAwMDAwMDBmZjAwVUxMKTw8NDAgfAorCQkoeCAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpPDwyNCB8CisJCSh4ICYgKF9fdTY0KTB4MDAwMDAwMDBmZjAwMDAwMFVMTCk8PCA4IHwKKwkgICAgICAgICh4ICYgKF9fdTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCk+PiA4IHwKKwkJKHggJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKT4+MjQgfAorCQkoeCAmIChfX3U2NCkweDAwZmYwMDAwMDAwMDAwMDBVTEwpPj40MDsKK30KIAogI2RlZmluZSBfX19jb25zdGFudF9zd2FiMTYoeCkgXAogCSgoX191MTYpKCBcCkBAIC03NywxMyArMTA3LDEzIEBACiAgKiBwcm92aWRlIGRlZmF1bHRzIHdoZW4gbm8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGltaXphdGlvbiBpcyBkZXRlY3RlZAogICovCiAjaWZuZGVmIF9fYXJjaF9fc3dhYjE2Ci0jICBkZWZpbmUgX19hcmNoX19zd2FiMTYoeCkgKHsgX191MTYgX190bXAgPSAoeCkgOyBfX19zd2FiMTYoX190bXApOyB9KQorIyAgZGVmaW5lIF9fYXJjaF9fc3dhYjE2KHgpIF9fX3N3YWIxNih4KQogI2VuZGlmCiAjaWZuZGVmIF9fYXJjaF9fc3dhYjMyCi0jICBkZWZpbmUgX19hcmNoX19zd2FiMzIoeCkgKHsgX191MzIgX190bXAgPSAoeCkgOyBfX19zd2FiMzIoX190bXApOyB9KQorIyAgZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpIF9fX3N3YWIzMih4KQogI2VuZGlmCiAjaWZuZGVmIF9fYXJjaF9fc3dhYjY0Ci0jICBkZWZpbmUgX19hcmNoX19zd2FiNjQoeCkgKHsgX191NjQgX190bXAgPSAoeCkgOyBfX19zd2FiNjQoX190bXApOyB9KQorIyAgZGVmaW5lIF9fYXJjaF9fc3dhYjY0KHgpIF9fX3N3YWI2NCh4KQogI2VuZGlmCiAKICNpZm5kZWYgX19hcmNoX19zd2FiMTZwCkBAIC05NywxMyArMTI3LDEzIEBACiAjZW5kaWYKIAogI2lmbmRlZiBfX2FyY2hfX3N3YWIxNnMKLSMgIGRlZmluZSBfX2FyY2hfX3N3YWIxNnMoeCkgZG8geyAqKHgpID0gX19hcmNoX19zd2FiMTZwKCh4KSk7IH0gd2hpbGUgKDApCisjICBkZWZpbmUgX19hcmNoX19zd2FiMTZzKHgpICgodm9pZCkoKih4KSA9IF9fYXJjaF9fc3dhYjE2cCh4KSkpCiAjZW5kaWYKICNpZm5kZWYgX19hcmNoX19zd2FiMzJzCi0jICBkZWZpbmUgX19hcmNoX19zd2FiMzJzKHgpIGRvIHsgKih4KSA9IF9fYXJjaF9fc3dhYjMycCgoeCkpOyB9IHdoaWxlICgwKQorIyAgZGVmaW5lIF9fYXJjaF9fc3dhYjMycyh4KSAoKHZvaWQpKCooeCkgPSBfX2FyY2hfX3N3YWIzMnAoeCkpKQogI2VuZGlmCiAjaWZuZGVmIF9fYXJjaF9fc3dhYjY0cwotIyAgZGVmaW5lIF9fYXJjaF9fc3dhYjY0cyh4KSBkbyB7ICooeCkgPSBfX2FyY2hfX3N3YWI2NHAoKHgpKTsgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBfX2FyY2hfX3N3YWI2NHMoeCkgKCh2b2lkKSgqKHgpID0gX19hcmNoX19zd2FiNjRwKHgpKSkKICNlbmRpZgogCiAKQEAgLTExMywxNSArMTQzLDE1IEBACiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX09QVElNSVpFX18pCiAjICBkZWZpbmUgX19zd2FiMTYoeCkgXAogKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UxNikoeCkpID8gXAotIF9fX3N3YWIxNigoeCkpIDogXAorIF9fX2NvbnN0YW50X3N3YWIxNigoeCkpIDogXAogIF9fZnN3YWIxNigoeCkpKQogIyAgZGVmaW5lIF9fc3dhYjMyKHgpIFwKIChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MzIpKHgpKSA/IFwKLSBfX19zd2FiMzIoKHgpKSA6IFwKKyBfX19jb25zdGFudF9zd2FiMzIoKHgpKSA6IFwKICBfX2Zzd2FiMzIoKHgpKSkKICMgIGRlZmluZSBfX3N3YWI2NCh4KSBcCiAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTY0KSh4KSkgPyBcCi0gX19fc3dhYjY0KCh4KSkgOiBcCisgX19fY29uc3RhbnRfc3dhYjY0KCh4KSkgOiBcCiAgX19mc3dhYjY0KCh4KSkpCiAjZWxzZQogIyAgZGVmaW5lIF9fc3dhYjE2KHgpIF9fZnN3YWIxNih4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmggYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAppbmRleCA2NTQ4YjM1Li5iYmY4ZGY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaApAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAorc3RydWN0IHRhc2tfc3RydWN0OworCiAvKiBVc2VyLWxldmVsIGRvIG1vc3Qgb2YgdGhlIG1hcHBpbmcgYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIKICAgIGNhcGFiaWxpdGllcyBiYXNlZCBvbiB0aGUgdmVyc2lvbiB0YWcgZ2l2ZW4gYnkgdGhlIGtlcm5lbC4gVGhlCiAgICBrZXJuZWwgbWlnaHQgYmUgc29tZXdoYXQgYmFja3dhcmRzIGNvbXBhdGlibGUsIGJ1dCBkb24ndCBiZXQgb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tjaGlwcy5oIGIvaW5jbHVkZS9saW51eC9jbG9ja2NoaXBzLmgKaW5kZXggNGVhN2U3Yi4uODQ4NmU3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbG9ja2NoaXBzLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja2NoaXBzLmgKQEAgLTU0LDE3ICs1NCwxNyBAQAogLyoqCiAgKiBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIC0gY2xvY2sgZXZlbnQgZGV2aWNlIGRlc2NyaXB0b3IKICAqIEBuYW1lOgkJcHRyIHRvIGNsb2NrIGV2ZW50IG5hbWUKLSAqIEBoaW50czoJCXVzYWdlIGhpbnRzCisgKiBAZmVhdHVyZXM6CQlmZWF0dXJlcwogICogQG1heF9kZWx0YV9uczoJbWF4aW11bSBkZWx0YSB2YWx1ZSBpbiBucwogICogQG1pbl9kZWx0YV9uczoJbWluaW11bSBkZWx0YSB2YWx1ZSBpbiBucwogICogQG11bHQ6CQluYW5vc2Vjb25kIHRvIGN5Y2xlcyBtdWx0aXBsaWVyCiAgKiBAc2hpZnQ6CQluYW5vc2Vjb25kcyB0byBjeWNsZXMgZGl2aXNvciAocG93ZXIgb2YgdHdvKQogICogQHJhdGluZzoJCXZhcmlhYmxlIHRvIHJhdGUgY2xvY2sgZXZlbnQgZGV2aWNlcwotICogQGlycToJCWlycSBudW1iZXIgKG9ubHkgZm9yIG5vbiBjcHUgbG9jYWwgZGV2aWNlcykKLSAqIEBjcHVtYXNrOgkJY3B1bWFzayB0byBpbmRpY2F0ZSBmb3Igd2hpY2ggY3B1cyB0aGlzIGRldmljZSB3b3JrcwotICogQHNldF9uZXh0X2V2ZW50OglzZXQgbmV4dCBldmVudAorICogQGlycToJCUlSUSBudW1iZXIgKG9ubHkgZm9yIG5vbiBDUFUgbG9jYWwgZGV2aWNlcykKKyAqIEBjcHVtYXNrOgkJY3B1bWFzayB0byBpbmRpY2F0ZSBmb3Igd2hpY2ggQ1BVcyB0aGlzIGRldmljZSB3b3JrcworICogQHNldF9uZXh0X2V2ZW50OglzZXQgbmV4dCBldmVudCBmdW5jdGlvbgogICogQHNldF9tb2RlOgkJc2V0IG1vZGUgZnVuY3Rpb24KLSAqIEBldnRoYW5kbGVyOgkJQXNzaWduZWQgYnkgdGhlIGZyYW1ld29yayB0byBiZSBjYWxsZWQgYnkgdGhlIGxvdworICogQGV2ZW50X2hhbmRsZXI6CUFzc2lnbmVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gYmUgY2FsbGVkIGJ5IHRoZSBsb3cKICAqCQkJbGV2ZWwgaGFuZGxlciBvZiB0aGUgZXZlbnQgc291cmNlCiAgKiBAYnJvYWRjYXN0OgkJZnVuY3Rpb24gdG8gYnJvYWRjYXN0IGV2ZW50cwogICogQGxpc3Q6CQlsaXN0IGhlYWQgZm9yIHRoZSBtYW5hZ2VtZW50IGNvZGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAppbmRleCBkYWE0OTQwLi5iZjI5N2IwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTQ4LDEwICs0OSwxNCBAQAogICogQHNoaWZ0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBkaXZpc29yIChwb3dlciBvZiB0d28pCiAgKiBAZmxhZ3M6CQlmbGFncyBkZXNjcmliaW5nIHNwZWNpYWwgcHJvcGVydGllcwogICogQHZyZWFkOgkJdnN5c2NhbGwgYmFzZWQgcmVhZAorICogQHJlc3VtZToJCXJlc3VtZSBmdW5jdGlvbiBmb3IgdGhlIGNsb2Nrc291cmNlLCBpZiBuZWNlc3NhcnkKICAqIEBjeWNsZV9pbnRlcnZhbDoJVXNlZCBpbnRlcm5hbGx5IGJ5IHRpbWVrZWVwaW5nIGNvcmUsIHBsZWFzZSBpZ25vcmUuCiAgKiBAeHRpbWVfaW50ZXJ2YWw6CVVzZWQgaW50ZXJuYWxseSBieSB0aW1la2VlcGluZyBjb3JlLCBwbGVhc2UgaWdub3JlLgogICovCiBzdHJ1Y3QgY2xvY2tzb3VyY2UgeworCS8qCisJICogRmlyc3QgcGFydCBvZiBzdHJ1Y3R1cmUgaXMgcmVhZCBtb3N0bHkKKwkgKi8KIAljaGFyICpuYW1lOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlpbnQgcmF0aW5nOwpAQCAtNjEsMTAgKzY2LDE4IEBACiAJdTMyIHNoaWZ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY3ljbGVfdCAoKnZyZWFkKSh2b2lkKTsKKwl2b2lkICgqcmVzdW1lKSh2b2lkKTsKIAogCS8qIHRpbWVrZWVwaW5nIHNwZWNpZmljIGRhdGEsIGlnbm9yZSAqLwotCWN5Y2xlX3QgY3ljbGVfbGFzdCwgY3ljbGVfaW50ZXJ2YWw7Ci0JdTY0IHh0aW1lX25zZWMsIHh0aW1lX2ludGVydmFsOworCWN5Y2xlX3QgY3ljbGVfaW50ZXJ2YWw7CisJdTY0CXh0aW1lX2ludGVydmFsOworCS8qCisJICogU2Vjb25kIHBhcnQgaXMgd3JpdHRlbiBhdCBlYWNoIHRpbWVyIGludGVycnVwdAorCSAqIEtlZXAgaXQgaW4gYSBkaWZmZXJlbnQgY2FjaGUgbGluZSB0byBkaXJ0eSBubworCSAqIG1vcmUgdGhhbiBvbmUgY2FjaGUgbGluZS4KKwkgKi8KKwljeWNsZV90IGN5Y2xlX2xhc3QgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKwl1NjQgeHRpbWVfbnNlYzsKIAlzNjQgZXJyb3I7CiAKICNpZmRlZiBDT05GSUdfQ0xPQ0tTT1VSQ0VfV0FUQ0hET0cKQEAgLTE5OCw2ICsyMTEsNyBAQAogZXh0ZXJuIGludCBjbG9ja3NvdXJjZV9yZWdpc3RlcihzdHJ1Y3QgY2xvY2tzb3VyY2UqKTsKIGV4dGVybiBzdHJ1Y3QgY2xvY2tzb3VyY2UqIGNsb2Nrc291cmNlX2dldF9uZXh0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2xvY2tzb3VyY2VfY2hhbmdlX3JhdGluZyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCBpbnQgcmF0aW5nKTsKK2V4dGVybiB2b2lkIGNsb2Nrc291cmNlX3Jlc3VtZSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEwKIGV4dGVybiB2b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKnRzLCBzdHJ1Y3QgY2xvY2tzb3VyY2UgKmMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXQuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKaW5kZXggY2NkODYzZC4uMGU2OWQyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCkBAIC0yMjUsNiArMjI1LDExIEBACiAJcmV0dXJuIGxocy0+dHZfbnNlYyAtIHJocy0+dHZfbnNlYzsKIH0KIAorZXh0ZXJuIGludCBnZXRfY29tcGF0X2l0aW1lcnNwZWMoc3RydWN0IGl0aW1lcnNwZWMgKmRzdCwKKwkJCQkgY29uc3Qgc3RydWN0IGNvbXBhdF9pdGltZXJzcGVjIF9fdXNlciAqc3JjKTsKK2V4dGVybiBpbnQgcHV0X2NvbXBhdF9pdGltZXJzcGVjKHN0cnVjdCBjb21wYXRfaXRpbWVyc3BlYyBfX3VzZXIgKmRzdCwKKwkJCQkgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKnNyYyk7CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2FkanRpbWV4KHN0cnVjdCBjb21wYXRfdGltZXggX191c2VyICp1dHApOwogCiBleHRlcm4gaW50IGNvbXBhdF9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOwpAQCAtMjUzLDUgKzI1OCwxNCBAQAogCQkJY29uc3QgY29tcGF0X3NpZ3NldF90IF9fdXNlciAqc2lnbWFzaywKIAkJCWNvbXBhdF9zaXplX3Qgc2lnc2V0c2l6ZSk7CiAKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3V0aW1lbnNhdCh1bnNpZ25lZCBpbnQgZGZkLCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsCisJCQkJc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKnQsIGludCBmbGFncyk7CisKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NpZ25hbGZkKGludCB1ZmQsCisJCQkJY29uc3QgY29tcGF0X3NpZ3NldF90IF9fdXNlciAqc2lnbWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0X3NpemVfdCBzaWdzZXRzaXplKTsKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3RpbWVyZmQoaW50IHVmZCwgaW50IGNsb2NraWQsIGludCBmbGFncywKKwkJCQljb25zdCBzdHJ1Y3QgY29tcGF0X2l0aW1lcnNwZWMgX191c2VyICp1dG1yKTsKKwogI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KICNlbmRpZiAvKiBfTElOVVhfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjZjM2FkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MzAgKzAsMCBAQAotLyogTGlzdCBoZXJlIGV4cGxpY2l0bHkgd2hpY2ggaW9jdGwncyBhcmUga25vd24gdG8gaGF2ZQotICogY29tcGF0aWJsZSB0eXBlcyBwYXNzZWQgb3Igbm9uZSBhdCBhbGwuLi4gUGxlYXNlIGluY2x1ZGUKLSAqIG9ubHkgc3R1ZmYgdGhhdCBpcyBjb21wYXRpYmxlIG9uICphbGwgYXJjaGl0ZWN0dXJlcyouCi0gKi8KLQotQ09NUEFUSUJMRV9JT0NUTCgweDRCNTApICAgLyogS0RHSFdDTEsgLSBub3QgaW4gdGhlIGtlcm5lbCwgYnV0IGRvbid0IGNvbXBsYWluICovCi1DT01QQVRJQkxFX0lPQ1RMKDB4NEI1MSkgICAvKiBLRFNIV0NMSyAtIG5vdCBpbiB0aGUga2VybmVsLCBidXQgZG9uJ3QgY29tcGxhaW4gKi8KLQotLyogQmlnIFQgKi8KLUNPTVBBVElCTEVfSU9DVEwoVENHRVRBKQotQ09NUEFUSUJMRV9JT0NUTChUQ1NFVEEpCi1DT01QQVRJQkxFX0lPQ1RMKFRDU0VUQVcpCi1DT01QQVRJQkxFX0lPQ1RMKFRDU0VUQUYpCi1DT01QQVRJQkxFX0lPQ1RMKFRDU0JSSykKLVVMT05HX0lPQ1RMKFRDU0JSS1ApCi1DT01QQVRJQkxFX0lPQ1RMKFRDWE9OQykKLUNPTVBBVElCTEVfSU9DVEwoVENGTFNIKQotQ09NUEFUSUJMRV9JT0NUTChUQ0dFVFMpCi1DT01QQVRJQkxFX0lPQ1RMKFRDU0VUUykKLUNPTVBBVElCTEVfSU9DVEwoVENTRVRTVykKLUNPTVBBVElCTEVfSU9DVEwoVENTRVRTRikKLUNPTVBBVElCTEVfSU9DVEwoVElPQ0xJTlVYKQotQ09NUEFUSUJMRV9JT0NUTChUSU9DU0JSSykKLUNPTVBBVElCTEVfSU9DVEwoVElPQ0NCUkspCi1VTE9OR19JT0NUTChUSU9DTUlXQUlUKQotQ09NUEFUSUJMRV9JT0NUTChUSU9DR0lDT1VOVCkKLS8qIExpdHRsZSB0ICovCi1DT01QQVRJQkxFX0lPQ1RMKFRJT0NHRVREKQotQ09NUEFUSUJMRV9JT0NUTChUSU9DU0VURCkKLUNPTVBBVElCTEVfSU9DVEwoVElPQ0VYQ0wpCi1DT01QQVRJQkxFX0lPQ1RMKFRJT0NOWENMKQotQ09NUEFUSUJMRV9JT0NUTChUSU9DQ09OUykKLUNPTVBBVElCTEVfSU9DVEwoVElPQ0dTT0ZUQ0FSKQotQ09NUEFUSUJMRV9JT0NUTChUSU9DU1NPRlRDQVIpCi1DT01QQVRJQkxFX0lPQ1RMKFRJT0NTV0lOU1opCi1DT01QQVRJQkxFX0lPQ1RMKFRJT0NHV0lOU1opCi1DT01QQVRJQkxFX0lPQ1RMKFRJT0NNR0VUKQotQ09NUEFUSUJMRV9JT0NUTChUSU9DTUJJQykKLUNPTVBBVElCTEVfSU9DVEwoVElPQ01CSVMpCi1DT01QQVRJQkxFX0lPQ1RMKFRJT0NNU0VUKQotQ09NUEFUSUJMRV9JT0NUTChUSU9DUEtUKQotQ09NUEFUSUJMRV9JT0NUTChUSU9DTk9UVFkpCi1DT01QQVRJQkxFX0lPQ1RMKFRJT0NTVEkpCi1DT01QQVRJQkxFX0lPQ1RMKFRJT0NPVVRRKQotQ09NUEFUSUJMRV9JT0NUTChUSU9DU1BHUlApCi1DT01QQVRJQkxFX0lPQ1RMKFRJT0NHUEdSUCkKLVVMT05HX0lPQ1RMKFRJT0NTQ1RUWSkKLUNPTVBBVElCTEVfSU9DVEwoVElPQ0dQVE4pCi1DT01QQVRJQkxFX0lPQ1RMKFRJT0NTUFRMQ0spCi1DT01QQVRJQkxFX0lPQ1RMKFRJT0NTRVJHRVRMU1IpCi0vKiBMaXR0bGUgZiAqLwotQ09NUEFUSUJMRV9JT0NUTChGSU9DTEVYKQotQ09NUEFUSUJMRV9JT0NUTChGSU9OQ0xFWCkKLUNPTVBBVElCTEVfSU9DVEwoRklPQVNZTkMpCi1DT01QQVRJQkxFX0lPQ1RMKEZJT05CSU8pCi1DT01QQVRJQkxFX0lPQ1RMKEZJT05SRUFEKSAgLyogVGhpcyBpcyBhbHNvIFRJT0NJTlEgKi8KLS8qIDB4MDAgKi8KLUNPTVBBVElCTEVfSU9DVEwoRklCTUFQKQotQ09NUEFUSUJMRV9JT0NUTChGSUdFVEJTWikKLS8qIDB4MDMgLS0gSEQvSURFIGlvY3RsJ3MgdXNlZCBieSBoZHBhcm0gYW5kIGZyaWVuZHMuCi0gKiAgICAgICAgIFNvbWUgbmVlZCB0cmFuc2xhdGlvbnMsIHRoZXNlIGRvIG5vdC4KLSAqLwotQ09NUEFUSUJMRV9JT0NUTChIRElPX0dFVF9JREVOVElUWSkKLUNPTVBBVElCTEVfSU9DVEwoSERJT19EUklWRV9UQVNLKQotQ09NUEFUSUJMRV9JT0NUTChIRElPX0RSSVZFX0NNRCkKLVVMT05HX0lPQ1RMKEhESU9fU0VUX01VTFRDT1VOVCkKLVVMT05HX0lPQ1RMKEhESU9fU0VUX1VOTUFTS0lOVFIpCi1VTE9OR19JT0NUTChIRElPX1NFVF9LRUVQU0VUVElOR1MpCi1VTE9OR19JT0NUTChIRElPX1NFVF8zMkJJVCkKLVVMT05HX0lPQ1RMKEhESU9fU0VUX05PV0VSUikKLVVMT05HX0lPQ1RMKEhESU9fU0VUX0RNQSkKLVVMT05HX0lPQ1RMKEhESU9fU0VUX1BJT19NT0RFKQotVUxPTkdfSU9DVEwoSERJT19TRVRfTklDRSkKLVVMT05HX0lPQ1RMKEhESU9fU0VUX1dDQUNIRSkKLVVMT05HX0lPQ1RMKEhESU9fU0VUX0FDT1VTVElDKQotVUxPTkdfSU9DVEwoSERJT19TRVRfQlVTU1RBVEUpCi1VTE9OR19JT0NUTChIRElPX1NFVF9BRERSRVNTKQotQ09NUEFUSUJMRV9JT0NUTChIRElPX1NDQU5fSFdJRikKLS8qIDB4MzMwIGlzIHJlc2VydmVkIC0tIGl0IHVzZWQgdG8gYmUgSERJT19HRVRHRU9fQklHICovCi1DT01QQVRJQkxFX0lPQ1RMKDB4MzMwKQotLyogMHgwMiAtLSBGbG9wcHkgaW9jdGxzICovCi1DT01QQVRJQkxFX0lPQ1RMKEZETVNHT04pCi1DT01QQVRJQkxFX0lPQ1RMKEZETVNHT0ZGKQotQ09NUEFUSUJMRV9JT0NUTChGRFNFVEVNU0dUUkVTSCkKLUNPTVBBVElCTEVfSU9DVEwoRkRGTFVTSCkKLUNPTVBBVElCTEVfSU9DVEwoRkRXRVJST1JDTFIpCi1DT01QQVRJQkxFX0lPQ1RMKEZEU0VUTUFYRVJSUykKLUNPTVBBVElCTEVfSU9DVEwoRkRHRVRNQVhFUlJTKQotQ09NUEFUSUJMRV9JT0NUTChGREdFVERSVlRZUCkKLUNPTVBBVElCTEVfSU9DVEwoRkRFSkVDVCkKLUNPTVBBVElCTEVfSU9DVEwoRkRDTFJQUk0pCi1DT01QQVRJQkxFX0lPQ1RMKEZERk1UQkVHKQotQ09NUEFUSUJMRV9JT0NUTChGREZNVEVORCkKLUNPTVBBVElCTEVfSU9DVEwoRkRSRVNFVCkKLUNPTVBBVElCTEVfSU9DVEwoRkRUV0FERExFKQotQ09NUEFUSUJMRV9JT0NUTChGREZNVFRSSykKLUNPTVBBVElCTEVfSU9DVEwoRkRSQVdDTUQpCi0vKiAweDEyICovCi0jaWZkZWYgQ09ORklHX0JMT0NLCi1DT01QQVRJQkxFX0lPQ1RMKEJMS1JBU0VUKQotQ09NUEFUSUJMRV9JT0NUTChCTEtST1NFVCkKLUNPTVBBVElCTEVfSU9DVEwoQkxLUk9HRVQpCi1DT01QQVRJQkxFX0lPQ1RMKEJMS1JSUEFSVCkKLUNPTVBBVElCTEVfSU9DVEwoQkxLRkxTQlVGKQotQ09NUEFUSUJMRV9JT0NUTChCTEtTRUNUU0VUKQotQ09NUEFUSUJMRV9JT0NUTChCTEtTU1pHRVQpCi1DT01QQVRJQkxFX0lPQ1RMKEJMS1RSQUNFU1RBUlQpCi1DT01QQVRJQkxFX0lPQ1RMKEJMS1RSQUNFU1RPUCkKLUNPTVBBVElCTEVfSU9DVEwoQkxLVFJBQ0VTRVRVUCkKLUNPTVBBVElCTEVfSU9DVEwoQkxLVFJBQ0VURUFSRE9XTikKLVVMT05HX0lPQ1RMKEJMS1JBU0VUKQotVUxPTkdfSU9DVEwoQkxLRlJBU0VUKQotI2VuZGlmCi0vKiBSQUlEICovCi1DT01QQVRJQkxFX0lPQ1RMKFJBSURfVkVSU0lPTikKLUNPTVBBVElCTEVfSU9DVEwoR0VUX0FSUkFZX0lORk8pCi1DT01QQVRJQkxFX0lPQ1RMKEdFVF9ESVNLX0lORk8pCi1DT01QQVRJQkxFX0lPQ1RMKFBSSU5UX1JBSURfREVCVUcpCi1DT01QQVRJQkxFX0lPQ1RMKFJBSURfQVVUT1JVTikKLUNPTVBBVElCTEVfSU9DVEwoQ0xFQVJfQVJSQVkpCi1DT01QQVRJQkxFX0lPQ1RMKEFERF9ORVdfRElTSykKLVVMT05HX0lPQ1RMKEhPVF9SRU1PVkVfRElTSykKLUNPTVBBVElCTEVfSU9DVEwoU0VUX0FSUkFZX0lORk8pCi1DT01QQVRJQkxFX0lPQ1RMKFNFVF9ESVNLX0lORk8pCi1DT01QQVRJQkxFX0lPQ1RMKFdSSVRFX1JBSURfSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoVU5QUk9URUNUX0FSUkFZKQotQ09NUEFUSUJMRV9JT0NUTChQUk9URUNUX0FSUkFZKQotVUxPTkdfSU9DVEwoSE9UX0FERF9ESVNLKQotVUxPTkdfSU9DVEwoU0VUX0RJU0tfRkFVTFRZKQotQ09NUEFUSUJMRV9JT0NUTChSVU5fQVJSQVkpCi1DT01QQVRJQkxFX0lPQ1RMKFNUT1BfQVJSQVkpCi1DT01QQVRJQkxFX0lPQ1RMKFNUT1BfQVJSQVlfUk8pCi1DT01QQVRJQkxFX0lPQ1RMKFJFU1RBUlRfQVJSQVlfUlcpCi1DT01QQVRJQkxFX0lPQ1RMKEdFVF9CSVRNQVBfRklMRSkKLVVMT05HX0lPQ1RMKFNFVF9CSVRNQVBfRklMRSkKLS8qIERNICovCi1DT01QQVRJQkxFX0lPQ1RMKERNX1ZFUlNJT05fMzIpCi1DT01QQVRJQkxFX0lPQ1RMKERNX1JFTU9WRV9BTExfMzIpCi1DT01QQVRJQkxFX0lPQ1RMKERNX0xJU1RfREVWSUNFU18zMikKLUNPTVBBVElCTEVfSU9DVEwoRE1fREVWX0NSRUFURV8zMikKLUNPTVBBVElCTEVfSU9DVEwoRE1fREVWX1JFTU9WRV8zMikKLUNPTVBBVElCTEVfSU9DVEwoRE1fREVWX1JFTkFNRV8zMikKLUNPTVBBVElCTEVfSU9DVEwoRE1fREVWX1NVU1BFTkRfMzIpCi1DT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9TVEFUVVNfMzIpCi1DT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9XQUlUXzMyKQotQ09NUEFUSUJMRV9JT0NUTChETV9UQUJMRV9MT0FEXzMyKQotQ09NUEFUSUJMRV9JT0NUTChETV9UQUJMRV9DTEVBUl8zMikKLUNPTVBBVElCTEVfSU9DVEwoRE1fVEFCTEVfREVQU18zMikKLUNPTVBBVElCTEVfSU9DVEwoRE1fVEFCTEVfU1RBVFVTXzMyKQotQ09NUEFUSUJMRV9JT0NUTChETV9MSVNUX1ZFUlNJT05TXzMyKQotQ09NUEFUSUJMRV9JT0NUTChETV9UQVJHRVRfTVNHXzMyKQotQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfU0VUX0dFT01FVFJZXzMyKQotQ09NUEFUSUJMRV9JT0NUTChETV9WRVJTSU9OKQotQ09NUEFUSUJMRV9JT0NUTChETV9SRU1PVkVfQUxMKQotQ09NUEFUSUJMRV9JT0NUTChETV9MSVNUX0RFVklDRVMpCi1DT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9DUkVBVEUpCi1DT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9SRU1PVkUpCi1DT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9SRU5BTUUpCi1DT01QQVRJQkxFX0lPQ1RMKERNX0RFVl9TVVNQRU5EKQotQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfU1RBVFVTKQotQ09NUEFUSUJMRV9JT0NUTChETV9ERVZfV0FJVCkKLUNPTVBBVElCTEVfSU9DVEwoRE1fVEFCTEVfTE9BRCkKLUNPTVBBVElCTEVfSU9DVEwoRE1fVEFCTEVfQ0xFQVIpCi1DT01QQVRJQkxFX0lPQ1RMKERNX1RBQkxFX0RFUFMpCi1DT01QQVRJQkxFX0lPQ1RMKERNX1RBQkxFX1NUQVRVUykKLUNPTVBBVElCTEVfSU9DVEwoRE1fTElTVF9WRVJTSU9OUykKLUNPTVBBVElCTEVfSU9DVEwoRE1fVEFSR0VUX01TRykKLUNPTVBBVElCTEVfSU9DVEwoRE1fREVWX1NFVF9HRU9NRVRSWSkKLS8qIEJpZyBLICovCi1DT01QQVRJQkxFX0lPQ1RMKFBJT19GT05UKQotQ09NUEFUSUJMRV9JT0NUTChHSU9fRk9OVCkKLVVMT05HX0lPQ1RMKEtEU0lHQUNDRVBUKQotQ09NUEFUSUJMRV9JT0NUTChLREdFVEtFWUNPREUpCi1DT01QQVRJQkxFX0lPQ1RMKEtEU0VUS0VZQ09ERSkKLVVMT05HX0lPQ1RMKEtJT0NTT1VORCkKLVVMT05HX0lPQ1RMKEtETUtUT05FKQotQ09NUEFUSUJMRV9JT0NUTChLREdLQlRZUEUpCi1VTE9OR19JT0NUTChLRFNFVE1PREUpCi1DT01QQVRJQkxFX0lPQ1RMKEtER0VUTU9ERSkKLVVMT05HX0lPQ1RMKEtEU0tCTU9ERSkKLUNPTVBBVElCTEVfSU9DVEwoS0RHS0JNT0RFKQotVUxPTkdfSU9DVEwoS0RTS0JNRVRBKQotQ09NUEFUSUJMRV9JT0NUTChLREdLQk1FVEEpCi1DT01QQVRJQkxFX0lPQ1RMKEtER0tCRU5UKQotQ09NUEFUSUJMRV9JT0NUTChLRFNLQkVOVCkKLUNPTVBBVElCTEVfSU9DVEwoS0RHS0JTRU5UKQotQ09NUEFUSUJMRV9JT0NUTChLRFNLQlNFTlQpCi1DT01QQVRJQkxFX0lPQ1RMKEtER0tCRElBQ1IpCi1DT01QQVRJQkxFX0lPQ1RMKEtEU0tCRElBQ1IpCi1DT01QQVRJQkxFX0lPQ1RMKEtES0JEUkVQKQotQ09NUEFUSUJMRV9JT0NUTChLREdLQkxFRCkKLVVMT05HX0lPQ1RMKEtEU0tCTEVEKQotQ09NUEFUSUJMRV9JT0NUTChLREdFVExFRCkKLVVMT05HX0lPQ1RMKEtEU0VUTEVEKQotQ09NUEFUSUJMRV9JT0NUTChHSU9fU0NSTk1BUCkKLUNPTVBBVElCTEVfSU9DVEwoUElPX1NDUk5NQVApCi1DT01QQVRJQkxFX0lPQ1RMKEdJT19VTklTQ1JOTUFQKQotQ09NUEFUSUJMRV9JT0NUTChQSU9fVU5JU0NSTk1BUCkKLUNPTVBBVElCTEVfSU9DVEwoUElPX0ZPTlRSRVNFVCkKLUNPTVBBVElCTEVfSU9DVEwoUElPX1VOSU1BUENMUikKLS8qIEJpZyBTICovCi1DT01QQVRJQkxFX0lPQ1RMKFNDU0lfSU9DVExfR0VUX0lETFVOKQotQ09NUEFUSUJMRV9JT0NUTChTQ1NJX0lPQ1RMX0RPT1JMT0NLKQotQ09NUEFUSUJMRV9JT0NUTChTQ1NJX0lPQ1RMX0RPT1JVTkxPQ0spCi1DT01QQVRJQkxFX0lPQ1RMKFNDU0lfSU9DVExfVEVTVF9VTklUX1JFQURZKQotQ09NUEFUSUJMRV9JT0NUTChTQ1NJX0lPQ1RMX0dFVF9CVVNfTlVNQkVSKQotQ09NUEFUSUJMRV9JT0NUTChTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORCkKLUNPTVBBVElCTEVfSU9DVEwoU0NTSV9JT0NUTF9QUk9CRV9IT1NUKQotQ09NUEFUSUJMRV9JT0NUTChTQ1NJX0lPQ1RMX0dFVF9QQ0kpCi0vKiBCaWcgVCAqLwotQ09NUEFUSUJMRV9JT0NUTChUVU5TRVROT0NTVU0pCi1DT01QQVRJQkxFX0lPQ1RMKFRVTlNFVERFQlVHKQotQ09NUEFUSUJMRV9JT0NUTChUVU5TRVRQRVJTSVNUKQotQ09NUEFUSUJMRV9JT0NUTChUVU5TRVRPV05FUikKLS8qIEJpZyBWICovCi1DT01QQVRJQkxFX0lPQ1RMKFZUX1NFVE1PREUpCi1DT01QQVRJQkxFX0lPQ1RMKFZUX0dFVE1PREUpCi1DT01QQVRJQkxFX0lPQ1RMKFZUX0dFVFNUQVRFKQotQ09NUEFUSUJMRV9JT0NUTChWVF9PUEVOUVJZKQotVUxPTkdfSU9DVEwoVlRfQUNUSVZBVEUpCi1VTE9OR19JT0NUTChWVF9XQUlUQUNUSVZFKQotVUxPTkdfSU9DVEwoVlRfUkVMRElTUCkKLVVMT05HX0lPQ1RMKFZUX0RJU0FMTE9DQVRFKQotQ09NUEFUSUJMRV9JT0NUTChWVF9SRVNJWkUpCi1DT01QQVRJQkxFX0lPQ1RMKFZUX1JFU0laRVgpCi1DT01QQVRJQkxFX0lPQ1RMKFZUX0xPQ0tTV0lUQ0gpCi1DT01QQVRJQkxFX0lPQ1RMKFZUX1VOTE9DS1NXSVRDSCkKLUNPTVBBVElCTEVfSU9DVEwoVlRfR0VUSElGT05UTUFTSykKLS8qIExpdHRsZSBwICgvZGV2L3J0YywgL2Rldi9lbnZjdHJsLCBldGMuKSAqLwotQ09NUEFUSUJMRV9JT0NUTChSVENfQUlFX09OKQotQ09NUEFUSUJMRV9JT0NUTChSVENfQUlFX09GRikKLUNPTVBBVElCTEVfSU9DVEwoUlRDX1VJRV9PTikKLUNPTVBBVElCTEVfSU9DVEwoUlRDX1VJRV9PRkYpCi1DT01QQVRJQkxFX0lPQ1RMKFJUQ19QSUVfT04pCi1DT01QQVRJQkxFX0lPQ1RMKFJUQ19QSUVfT0ZGKQotQ09NUEFUSUJMRV9JT0NUTChSVENfV0lFX09OKQotQ09NUEFUSUJMRV9JT0NUTChSVENfV0lFX09GRikKLUNPTVBBVElCTEVfSU9DVEwoUlRDX0FMTV9TRVQpCi1DT01QQVRJQkxFX0lPQ1RMKFJUQ19BTE1fUkVBRCkKLUNPTVBBVElCTEVfSU9DVEwoUlRDX1JEX1RJTUUpCi1DT01QQVRJQkxFX0lPQ1RMKFJUQ19TRVRfVElNRSkKLUNPTVBBVElCTEVfSU9DVEwoUlRDX1dLQUxNX1NFVCkKLUNPTVBBVElCTEVfSU9DVEwoUlRDX1dLQUxNX1JEKQotLyoKLSAqIFRoZXNlIHR3byBhcmUgb25seSBmb3IgdGhlIHNidXMgcnRjIGRyaXZlciwgYnV0Ci0gKiBod2Nsb2NrIHRyaWVzIHRoZW0gb24gZXZlcnkgcnRjIGRldmljZSBmaXJzdCB3aGVuCi0gKiBydW5uaW5nIG9uIHNwYXJjLiAgT24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0aGUgZW50cmllcwotICogYXJlIHVzZWxlc3MgYnV0IGhhcm1sZXNzLgotICovCi1DT01QQVRJQkxFX0lPQ1RMKF9JT1IoJ3AnLCAyMCwgaW50WzddKSkgLyogUlRDR0VUICovCi1DT01QQVRJQkxFX0lPQ1RMKF9JT1coJ3AnLCAyMSwgaW50WzddKSkgLyogUlRDU0VUICovCi0vKiBMaXR0bGUgbSAqLwotQ09NUEFUSUJMRV9JT0NUTChNVElPQ1RPUCkKLS8qIFNvY2tldCBsZXZlbCBzdHVmZiAqLwotQ09NUEFUSUJMRV9JT0NUTChGSU9RU0laRSkKLUNPTVBBVElCTEVfSU9DVEwoRklPU0VUT1dOKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU1BHUlApCi1DT01QQVRJQkxFX0lPQ1RMKEZJT0dFVE9XTikKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0dQR1JQKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DQVRNQVJLKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lGTElOSykKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NJRkVOQ0FQKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lGRU5DQVApCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSUZOQU1FKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0FSUCkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0dBUlApCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NEQVJQKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU1JBUlApCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHUkFSUCkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0RSQVJQKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DQURERExDSSkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0RFTERMQ0kpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHTUlJUEhZKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DR01JSVJFRykKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NNSUlSRUcpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHSUZWTEFOKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lGVkxBTikKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0JSQUREQlIpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NCUkRFTEJSKQotLyogU0cgc3R1ZmYgKi8KLUNPTVBBVElCTEVfSU9DVEwoU0dfU0VUX1RJTUVPVVQpCi1DT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9USU1FT1VUKQotQ09NUEFUSUJMRV9JT0NUTChTR19FTVVMQVRFRF9IT1NUKQotVUxPTkdfSU9DVEwoU0dfU0VUX1RSQU5TRk9STSkKLUNPTVBBVElCTEVfSU9DVEwoU0dfR0VUX1RSQU5TRk9STSkKLUNPTVBBVElCTEVfSU9DVEwoU0dfU0VUX1JFU0VSVkVEX1NJWkUpCi1DT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9SRVNFUlZFRF9TSVpFKQotQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfU0NTSV9JRCkKLUNPTVBBVElCTEVfSU9DVEwoU0dfU0VUX0ZPUkNFX0xPV19ETUEpCi1DT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9MT1dfRE1BKQotQ09NUEFUSUJMRV9JT0NUTChTR19TRVRfRk9SQ0VfUEFDS19JRCkKLUNPTVBBVElCTEVfSU9DVEwoU0dfR0VUX1BBQ0tfSUQpCi1DT01QQVRJQkxFX0lPQ1RMKFNHX0dFVF9OVU1fV0FJVElORykKLUNPTVBBVElCTEVfSU9DVEwoU0dfU0VUX0RFQlVHKQotQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfU0dfVEFCTEVTSVpFKQotQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfQ09NTUFORF9RKQotQ09NUEFUSUJMRV9JT0NUTChTR19TRVRfQ09NTUFORF9RKQotQ09NUEFUSUJMRV9JT0NUTChTR19HRVRfVkVSU0lPTl9OVU0pCi1DT01QQVRJQkxFX0lPQ1RMKFNHX05FWFRfQ01EX0xFTikKLUNPTVBBVElCTEVfSU9DVEwoU0dfU0NTSV9SRVNFVCkKLUNPTVBBVElCTEVfSU9DVEwoU0dfR0VUX1JFUVVFU1RfVEFCTEUpCi1DT01QQVRJQkxFX0lPQ1RMKFNHX1NFVF9LRUVQX09SUEhBTikKLUNPTVBBVElCTEVfSU9DVEwoU0dfR0VUX0tFRVBfT1JQSEFOKQotLyogUFBQIHN0dWZmICovCi1DT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dGTEFHUykKLUNPTVBBVElCTEVfSU9DVEwoUFBQSU9DU0ZMQUdTKQotQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NHQVNZTkNNQVApCi1DT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NBU1lOQ01BUCkKLUNPTVBBVElCTEVfSU9DVEwoUFBQSU9DR1VOSVQpCi1DT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dSQVNZTkNNQVApCi1DT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NSQVNZTkNNQVApCi1DT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dNUlUpCi1DT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NNUlUpCi1DT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NNQVhDSUQpCi1DT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dYQVNZTkNNQVApCi1DT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NYQVNZTkNNQVApCi1DT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1hGRVJVTklUKQotLyogUFBQSU9DU0NPTVBSRVNTIGlzIHRyYW5zbGF0ZWQgKi8KLUNPTVBBVElCTEVfSU9DVEwoUFBQSU9DR05QTU9ERSkKLUNPTVBBVElCTEVfSU9DVEwoUFBQSU9DU05QTU9ERSkKLUNPTVBBVElCTEVfSU9DVEwoUFBQSU9DR0RFQlVHKQotQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NTREVCVUcpCi0vKiBQUFBJT0NTUEFTUyBpcyB0cmFuc2xhdGVkICovCi0vKiBQUFBJT0NTQUNUSVZFIGlzIHRyYW5zbGF0ZWQgKi8KLS8qIFBQUElPQ0dJRExFIGlzIHRyYW5zbGF0ZWQgKi8KLUNPTVBBVElCTEVfSU9DVEwoUFBQSU9DTkVXVU5JVCkKLUNPTVBBVElCTEVfSU9DVEwoUFBQSU9DQVRUQUNIKQotQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NERVRBQ0gpCi1DT01QQVRJQkxFX0lPQ1RMKFBQUElPQ1NNUlJVKQotQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NDT05ORUNUKQotQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NESVNDT05OKQotQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NBVFRDSEFOKQotQ09NUEFUSUJMRV9JT0NUTChQUFBJT0NHQ0hBTikKLS8qIFBQUE9YICovCi1DT01QQVRJQkxFX0lPQ1RMKFBQUE9FSU9DU0ZXRCkKLUNPTVBBVElCTEVfSU9DVEwoUFBQT0VJT0NERldEKQotLyogTFAgKi8KLUNPTVBBVElCTEVfSU9DVEwoTFBHRVRTVEFUVVMpCi0vKiBwcGRldiAqLwotQ09NUEFUSUJMRV9JT0NUTChQUFNFVE1PREUpCi1DT01QQVRJQkxFX0lPQ1RMKFBQUlNUQVRVUykKLUNPTVBBVElCTEVfSU9DVEwoUFBSQ09OVFJPTCkKLUNPTVBBVElCTEVfSU9DVEwoUFBXQ09OVFJPTCkKLUNPTVBBVElCTEVfSU9DVEwoUFBGQ09OVFJPTCkKLUNPTVBBVElCTEVfSU9DVEwoUFBSREFUQSkKLUNPTVBBVElCTEVfSU9DVEwoUFBXREFUQSkKLUNPTVBBVElCTEVfSU9DVEwoUFBDTEFJTSkKLUNPTVBBVElCTEVfSU9DVEwoUFBSRUxFQVNFKQotQ09NUEFUSUJMRV9JT0NUTChQUFlJRUxEKQotQ09NUEFUSUJMRV9JT0NUTChQUEVYQ0wpCi1DT01QQVRJQkxFX0lPQ1RMKFBQREFUQURJUikKLUNPTVBBVElCTEVfSU9DVEwoUFBORUdPVCkKLUNPTVBBVElCTEVfSU9DVEwoUFBXQ1RMT05JUlEpCi1DT01QQVRJQkxFX0lPQ1RMKFBQQ0xSSVJRKQotQ09NUEFUSUJMRV9JT0NUTChQUFNFVFBIQVNFKQotQ09NUEFUSUJMRV9JT0NUTChQUEdFVE1PREVTKQotQ09NUEFUSUJMRV9JT0NUTChQUEdFVE1PREUpCi1DT01QQVRJQkxFX0lPQ1RMKFBQR0VUUEhBU0UpCi1DT01QQVRJQkxFX0lPQ1RMKFBQR0VURkxBR1MpCi1DT01QQVRJQkxFX0lPQ1RMKFBQU0VURkxBR1MpCi0vKiBDRFJPTSBzdHVmZiAqLwotQ09NUEFUSUJMRV9JT0NUTChDRFJPTVBBVVNFKQotQ09NUEFUSUJMRV9JT0NUTChDRFJPTVJFU1VNRSkKLUNPTVBBVElCTEVfSU9DVEwoQ0RST01QTEFZTVNGKQotQ09NUEFUSUJMRV9JT0NUTChDRFJPTVBMQVlUUktJTkQpCi1DT01QQVRJQkxFX0lPQ1RMKENEUk9NUkVBRFRPQ0hEUikKLUNPTVBBVElCTEVfSU9DVEwoQ0RST01SRUFEVE9DRU5UUlkpCi1DT01QQVRJQkxFX0lPQ1RMKENEUk9NU1RPUCkKLUNPTVBBVElCTEVfSU9DVEwoQ0RST01TVEFSVCkKLUNPTVBBVElCTEVfSU9DVEwoQ0RST01FSkVDVCkKLUNPTVBBVElCTEVfSU9DVEwoQ0RST01WT0xDVFJMKQotQ09NUEFUSUJMRV9JT0NUTChDRFJPTVNVQkNITkwpCi1VTE9OR19JT0NUTChDRFJPTUVKRUNUX1NXKQotQ09NUEFUSUJMRV9JT0NUTChDRFJPTU1VTFRJU0VTU0lPTikKLUNPTVBBVElCTEVfSU9DVEwoQ0RST01fR0VUX01DTikKLUNPTVBBVElCTEVfSU9DVEwoQ0RST01SRVNFVCkKLUNPTVBBVElCTEVfSU9DVEwoQ0RST01WT0xSRUFEKQotQ09NUEFUSUJMRV9JT0NUTChDRFJPTVNFRUspCi1DT01QQVRJQkxFX0lPQ1RMKENEUk9NUExBWUJMSykKLUNPTVBBVElCTEVfSU9DVEwoQ0RST01DTE9TRVRSQVkpCi1VTE9OR19JT0NUTChDRFJPTV9TRVRfT1BUSU9OUykKLVVMT05HX0lPQ1RMKENEUk9NX0NMRUFSX09QVElPTlMpCi1VTE9OR19JT0NUTChDRFJPTV9TRUxFQ1RfU1BFRUQpCi1VTE9OR19JT0NUTChDRFJPTV9TRUxFQ1RfRElTQykKLVVMT05HX0lPQ1RMKENEUk9NX01FRElBX0NIQU5HRUQpCi1VTE9OR19JT0NUTChDRFJPTV9EUklWRV9TVEFUVVMpCi1DT01QQVRJQkxFX0lPQ1RMKENEUk9NX0RJU0NfU1RBVFVTKQotQ09NUEFUSUJMRV9JT0NUTChDRFJPTV9DSEFOR0VSX05TTE9UUykKLVVMT05HX0lPQ1RMKENEUk9NX0xPQ0tET09SKQotVUxPTkdfSU9DVEwoQ0RST01fREVCVUcpCi1DT01QQVRJQkxFX0lPQ1RMKENEUk9NX0dFVF9DQVBBQklMSVRZKQotLyogSWdub3JlIGNkcm9tLmggYWJvdXQgdGhlc2UgbmV4dCA1IGlvY3RscywgdGhleSBhYnNvbHV0ZWx5IGRvCi0gKiBub3QgdGFrZSBhIHN0cnVjdCBjZHJvbV9yZWFkLCBpbnN0ZWFkIHRoZXkgdGFrZSBhIHN0cnVjdCBjZHJvbV9tc2YKLSAqIHdoaWNoIGlzIGNvbXBhdGlibGUuCi0gKi8KLUNPTVBBVElCTEVfSU9DVEwoQ0RST01SRUFETU9ERTIpCi1DT01QQVRJQkxFX0lPQ1RMKENEUk9NUkVBRE1PREUxKQotQ09NUEFUSUJMRV9JT0NUTChDRFJPTVJFQURSQVcpCi1DT01QQVRJQkxFX0lPQ1RMKENEUk9NUkVBRENPT0tFRCkKLUNPTVBBVElCTEVfSU9DVEwoQ0RST01SRUFEQUxMKQotLyogRFZEIGlvY3RscyAqLwotQ09NUEFUSUJMRV9JT0NUTChEVkRfUkVBRF9TVFJVQ1QpCi1DT01QQVRJQkxFX0lPQ1RMKERWRF9XUklURV9TVFJVQ1QpCi1DT01QQVRJQkxFX0lPQ1RMKERWRF9BVVRIKQotLyogcGt0Y2R2ZCAqLwotQ09NUEFUSUJMRV9JT0NUTChQQUNLRVRfQ1RSTF9DTUQpCi0vKiBCaWcgQSAqLwotLyogc3BhcmMgb25seSAqLwotLyogQmlnIFEgZm9yIHNvdW5kL09TUyAqLwotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX1JFU0VUKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX1NZTkMpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TWU5USF9JTkZPKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX0NUUkxSQVRFKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX0dFVE9VVENPVU5UKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX0dFVElOQ09VTlQpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TRVFfUEVSQ01PREUpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9GTV9MT0FEX0lOU1RSKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX1RFU1RNSURJKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX1JFU0VUU0FNUExFUykKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9OUlNZTlRIUykKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NFUV9OUk1JRElTKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfTUlESV9JTkZPKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX1RIUkVTSE9MRCkKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NZTlRIX01FTUFWTCkKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0ZNXzRPUF9FTkFCTEUpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TRVFfUEFOSUMpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TRVFfT1VUT0ZCQU5EKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfU0VRX0dFVFRJTUUpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TWU5USF9JRCkKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1NZTlRIX0NPTlRST0wpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9TWU5USF9SRU1PVkVTQU1QTEUpCi0vKiBCaWcgVCBmb3Igc291bmQvT1NTICovCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9UTVJfVElNRUJBU0UpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9UTVJfU1RBUlQpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9UTVJfU1RPUCkKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1RNUl9DT05USU5VRSkKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1RNUl9URU1QTykKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX1RNUl9TT1VSQ0UpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9UTVJfTUVUUk9OT01FKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfVE1SX1NFTEVDVCkKLS8qIExpdHRsZSBtIGZvciBzb3VuZC9PU1MgKi8KLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX01JRElfUFJFVElNRSkKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX01JRElfTVBVTU9ERSkKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX01JRElfTVBVQ01EKQotLyogQmlnIFAgZm9yIHNvdW5kL09TUyAqLwotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1JFU0VUKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1NZTkMpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfU1BFRUQpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfU1RFUkVPKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0dFVEJMS1NJWkUpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfQ0hBTk5FTFMpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX1BDTV9XUklURV9GSUxURVIpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfUE9TVCkKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9TVUJESVZJREUpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfU0VURlJBR01FTlQpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfR0VURk1UUykKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9TRVRGTVQpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfR0VUT1NQQUNFKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0dFVElTUEFDRSkKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9OT05CTE9DSykKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9HRVRDQVBTKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0dFVFRSSUdHRVIpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfU0VUVFJJR0dFUikKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9HRVRJUFRSKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX0dFVE9QVFIpCi0vKiBTTkRDVExfRFNQX01BUElOQlVGLCAgWFhYIG5lZWRzIHRyYW5zbGF0aW9uICovCi0vKiBTTkRDVExfRFNQX01BUE9VVEJVRiwgIFhYWCBuZWVkcyB0cmFuc2xhdGlvbiAqLwotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1NFVFNZTkNSTykKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0RTUF9TRVREVVBMRVgpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9EU1BfR0VUT0RFTEFZKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfRFNQX1BST0ZJTEUpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX1BDTV9SRUFEX1JBVEUpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9QQ01fUkVBRF9CSVRTKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9QQ01fUkVBRF9GSUxURVIpCi0vKiBCaWcgQyBmb3Igc291bmQvT1NTICovCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9DT1BSX1JFU0VUKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfQ09QUl9MT0FEKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfQ09QUl9SREFUQSkKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfUkNPREUpCi1DT01QQVRJQkxFX0lPQ1RMKFNORENUTF9DT1BSX1dEQVRBKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfQ09QUl9XQ09ERSkKLUNPTVBBVElCTEVfSU9DVEwoU05EQ1RMX0NPUFJfUlVOKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfQ09QUl9IQUxUKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfQ09QUl9TRU5ETVNHKQotQ09NUEFUSUJMRV9JT0NUTChTTkRDVExfQ09QUl9SQ1ZNU0cpCi0vKiBCaWcgTSBmb3Igc291bmQvT1NTICovCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfVk9MVU1FKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX0JBU1MpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfVFJFQkxFKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX1NZTlRIKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX1BDTSkKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9TUEVBS0VSKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX0xJTkUpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfTUlDKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX0NEKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX0lNSVgpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfQUxUUENNKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX1JFQ0xFVikKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9JR0FJTikKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9PR0FJTikKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9MSU5FMSkKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9MSU5FMikKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9MSU5FMykKLUNPTVBBVElCTEVfSU9DVEwoTUlYRVJfUkVBRChTT1VORF9NSVhFUl9ESUdJVEFMMSkpCi1DT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfRElHSVRBTDIpKQotQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0RJR0lUQUwzKSkKLUNPTVBBVElCTEVfSU9DVEwoTUlYRVJfUkVBRChTT1VORF9NSVhFUl9QSE9ORUlOKSkKLUNPTVBBVElCTEVfSU9DVEwoTUlYRVJfUkVBRChTT1VORF9NSVhFUl9QSE9ORU9VVCkpCi1DT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfVklERU8pKQotQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1JBRElPKSkKLUNPTVBBVElCTEVfSU9DVEwoTUlYRVJfUkVBRChTT1VORF9NSVhFUl9NT05JVE9SKSkKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9NVVRFKQotLyogU09VTkRfTUlYRVJfUkVBRF9FTkhBTkNFLCAgc2FtZSB2YWx1ZSBhcyBSRUFEX01VVEUgKi8KLS8qIFNPVU5EX01JWEVSX1JFQURfTE9VRCwgIHNhbWUgdmFsdWUgYXMgUkVBRF9NVVRFICovCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfUkVDU1JDKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX0RFVk1BU0spCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1JFQURfUkVDTUFTSykKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUkVBRF9TVEVSRU9ERVZTKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9SRUFEX0NBUFMpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX1ZPTFVNRSkKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfQkFTUykKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfVFJFQkxFKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9TWU5USCkKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfUENNKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9TUEVBS0VSKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9MSU5FKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9NSUMpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX0NEKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9JTUlYKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9BTFRQQ00pCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX1JFQ0xFVikKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfSUdBSU4pCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX09HQUlOKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9XUklURV9MSU5FMSkKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfV1JJVEVfTElORTIpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX0xJTkUzKQotQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9XUklURShTT1VORF9NSVhFUl9ESUdJVEFMMSkpCi1DT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0RJR0lUQUwyKSkKLUNPTVBBVElCTEVfSU9DVEwoTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfRElHSVRBTDMpKQotQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9XUklURShTT1VORF9NSVhFUl9QSE9ORUlOKSkKLUNPTVBBVElCTEVfSU9DVEwoTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfUEhPTkVPVVQpKQotQ09NUEFUSUJMRV9JT0NUTChNSVhFUl9XUklURShTT1VORF9NSVhFUl9WSURFTykpCi1DT01QQVRJQkxFX0lPQ1RMKE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1JBRElPKSkKLUNPTVBBVElCTEVfSU9DVEwoTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTU9OSVRPUikpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX01VVEUpCi0vKiBTT1VORF9NSVhFUl9XUklURV9FTkhBTkNFLCAgc2FtZSB2YWx1ZSBhcyBXUklURV9NVVRFICovCi0vKiBTT1VORF9NSVhFUl9XUklURV9MT1VELCAgc2FtZSB2YWx1ZSBhcyBXUklURV9NVVRFICovCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1dSSVRFX1JFQ1NSQykKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfT0xEX01JWEVSX0lORk8pCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX0FDQ0VTUykKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfQUdDKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl8zRFNFKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9QUklWQVRFMSkKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUFJJVkFURTIpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX1BSSVZBVEUzKQotQ09NUEFUSUJMRV9JT0NUTChTT1VORF9NSVhFUl9QUklWQVRFNCkKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfUFJJVkFURTUpCi1DT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX0dFVExFVkVMUykKLUNPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfU0VUTEVWRUxTKQotQ09NUEFUSUJMRV9JT0NUTChPU1NfR0VUVkVSU0lPTikKLS8qIEFVVE9GUyAqLwotVUxPTkdfSU9DVEwoQVVUT0ZTX0lPQ19SRUFEWSkKLVVMT05HX0lPQ1RMKEFVVE9GU19JT0NfRkFJTCkKLUNPTVBBVElCTEVfSU9DVEwoQVVUT0ZTX0lPQ19DQVRBVE9OSUMpCi1DT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfUFJPVE9WRVIpCi1DT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfRVhQSVJFKQotQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX0VYUElSRV9NVUxUSSkKLUNPTVBBVElCTEVfSU9DVEwoQVVUT0ZTX0lPQ19QUk9UT1NVQlZFUikKLUNPTVBBVElCTEVfSU9DVEwoQVVUT0ZTX0lPQ19BU0tSRUdIT1NUKQotQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX1RPR0dMRVJFR0hPU1QpCi1DT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfQVNLVU1PVU5UKQotLyogUmF3IGRldmljZXMgKi8KLUNPTVBBVElCTEVfSU9DVEwoUkFXX1NFVEJJTkQpCi1DT01QQVRJQkxFX0lPQ1RMKFJBV19HRVRCSU5EKQotLyogU01CIGlvY3RscyB3aGljaCBkbyBub3QgbmVlZCBhbnkgdHJhbnNsYXRpb25zICovCi1DT01QQVRJQkxFX0lPQ1RMKFNNQl9JT0NfTkVXQ09OTikKLS8qIExpdHRsZSBhICovCi1DT01QQVRJQkxFX0lPQ1RMKEFUTVNJR0RfQ1RSTCkKLUNPTVBBVElCTEVfSU9DVEwoQVRNQVJQRF9DVFJMKQotQ09NUEFUSUJMRV9JT0NUTChBVE1MRUNfQ1RSTCkKLUNPTVBBVElCTEVfSU9DVEwoQVRNTEVDX01DQVNUKQotQ09NUEFUSUJMRV9JT0NUTChBVE1MRUNfREFUQSkKLUNPTVBBVElCTEVfSU9DVEwoQVRNX1NFVFNDKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lGQVRNVENQKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DTUtDTElQKQotQ09NUEFUSUJMRV9JT0NUTChBVE1BUlBfTUtJUCkKLUNPTVBBVElCTEVfSU9DVEwoQVRNQVJQX1NFVEVOVFJZKQotQ09NUEFUSUJMRV9JT0NUTChBVE1BUlBfRU5DQVApCi1DT01QQVRJQkxFX0lPQ1RMKEFUTVRDUF9DUkVBVEUpCi1DT01QQVRJQkxFX0lPQ1RMKEFUTVRDUF9SRU1PVkUpCi1DT01QQVRJQkxFX0lPQ1RMKEFUTU1QQ19DVFJMKQotQ09NUEFUSUJMRV9JT0NUTChBVE1NUENfREFUQSkKLS8qIFdhdGNoZG9nICovCi1DT01QQVRJQkxFX0lPQ1RMKFdESU9DX0dFVFNVUFBPUlQpCi1DT01QQVRJQkxFX0lPQ1RMKFdESU9DX0dFVFNUQVRVUykKLUNPTVBBVElCTEVfSU9DVEwoV0RJT0NfR0VUQk9PVFNUQVRVUykKLUNPTVBBVElCTEVfSU9DVEwoV0RJT0NfR0VUVEVNUCkKLUNPTVBBVElCTEVfSU9DVEwoV0RJT0NfU0VUT1BUSU9OUykKLUNPTVBBVElCTEVfSU9DVEwoV0RJT0NfS0VFUEFMSVZFKQotQ09NUEFUSUJMRV9JT0NUTChXRElPQ19TRVRUSU1FT1VUKQotQ09NUEFUSUJMRV9JT0NUTChXRElPQ19HRVRUSU1FT1VUKQotLyogQmlnIFIgKi8KLUNPTVBBVElCTEVfSU9DVEwoUk5ER0VURU5UQ05UKQotQ09NUEFUSUJMRV9JT0NUTChSTkRBRERUT0VOVENOVCkKLUNPTVBBVElCTEVfSU9DVEwoUk5ER0VUUE9PTCkKLUNPTVBBVElCTEVfSU9DVEwoUk5EQURERU5UUk9QWSkKLUNPTVBBVElCTEVfSU9DVEwoUk5EWkFQRU5UQ05UKQotQ09NUEFUSUJMRV9JT0NUTChSTkRDTEVBUlBPT0wpCi0vKiBCbHVldG9vdGggKi8KLUNPTVBBVElCTEVfSU9DVEwoSENJREVWVVApCi1DT01QQVRJQkxFX0lPQ1RMKEhDSURFVkRPV04pCi1DT01QQVRJQkxFX0lPQ1RMKEhDSURFVlJFU0VUKQotQ09NUEFUSUJMRV9JT0NUTChIQ0lERVZSRVNUQVQpCi1DT01QQVRJQkxFX0lPQ1RMKEhDSUdFVERFVkxJU1QpCi1DT01QQVRJQkxFX0lPQ1RMKEhDSUdFVERFVklORk8pCi1DT01QQVRJQkxFX0lPQ1RMKEhDSUdFVENPTk5MSVNUKQotQ09NUEFUSUJMRV9JT0NUTChIQ0lHRVRDT05OSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoSENJU0VUUkFXKQotQ09NUEFUSUJMRV9JT0NUTChIQ0lTRVRTQ0FOKQotQ09NUEFUSUJMRV9JT0NUTChIQ0lTRVRBVVRIKQotQ09NUEFUSUJMRV9JT0NUTChIQ0lTRVRFTkNSWVBUKQotQ09NUEFUSUJMRV9JT0NUTChIQ0lTRVRQVFlQRSkKLUNPTVBBVElCTEVfSU9DVEwoSENJU0VUTElOS1BPTCkKLUNPTVBBVElCTEVfSU9DVEwoSENJU0VUTElOS01PREUpCi1DT01QQVRJQkxFX0lPQ1RMKEhDSVNFVEFDTE1UVSkKLUNPTVBBVElCTEVfSU9DVEwoSENJU0VUU0NPTVRVKQotQ09NUEFUSUJMRV9JT0NUTChIQ0lJTlFVSVJZKQotQ09NUEFUSUJMRV9JT0NUTChIQ0lVQVJUU0VUUFJPVE8pCi1DT01QQVRJQkxFX0lPQ1RMKEhDSVVBUlRHRVRQUk9UTykKLUNPTVBBVElCTEVfSU9DVEwoUkZDT01NQ1JFQVRFREVWKQotQ09NUEFUSUJMRV9JT0NUTChSRkNPTU1SRUxFQVNFREVWKQotQ09NUEFUSUJMRV9JT0NUTChSRkNPTU1HRVRERVZMSVNUKQotQ09NUEFUSUJMRV9JT0NUTChSRkNPTU1HRVRERVZJTkZPKQotQ09NUEFUSUJMRV9JT0NUTChSRkNPTU1TVEVBTERMQykKLUNPTVBBVElCTEVfSU9DVEwoQk5FUENPTk5BREQpCi1DT01QQVRJQkxFX0lPQ1RMKEJORVBDT05OREVMKQotQ09NUEFUSUJMRV9JT0NUTChCTkVQR0VUQ09OTkxJU1QpCi1DT01QQVRJQkxFX0lPQ1RMKEJORVBHRVRDT05OSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoQ01UUENPTk5BREQpCi1DT01QQVRJQkxFX0lPQ1RMKENNVFBDT05OREVMKQotQ09NUEFUSUJMRV9JT0NUTChDTVRQR0VUQ09OTkxJU1QpCi1DT01QQVRJQkxFX0lPQ1RMKENNVFBHRVRDT05OSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoSElEUENPTk5BREQpCi1DT01QQVRJQkxFX0lPQ1RMKEhJRFBDT05OREVMKQotQ09NUEFUSUJMRV9JT0NUTChISURQR0VUQ09OTkxJU1QpCi1DT01QQVRJQkxFX0lPQ1RMKEhJRFBHRVRDT05OSU5GTykKLS8qIENBUEkgKi8KLUNPTVBBVElCTEVfSU9DVEwoQ0FQSV9SRUdJU1RFUikKLUNPTVBBVElCTEVfSU9DVEwoQ0FQSV9HRVRfTUFOVUZBQ1RVUkVSKQotQ09NUEFUSUJMRV9JT0NUTChDQVBJX0dFVF9WRVJTSU9OKQotQ09NUEFUSUJMRV9JT0NUTChDQVBJX0dFVF9TRVJJQUwpCi1DT01QQVRJQkxFX0lPQ1RMKENBUElfR0VUX1BST0ZJTEUpCi1DT01QQVRJQkxFX0lPQ1RMKENBUElfTUFOVUZBQ1RVUkVSX0NNRCkKLUNPTVBBVElCTEVfSU9DVEwoQ0FQSV9HRVRfRVJSQ09ERSkKLUNPTVBBVElCTEVfSU9DVEwoQ0FQSV9JTlNUQUxMRUQpCi1DT01QQVRJQkxFX0lPQ1RMKENBUElfR0VUX0ZMQUdTKQotQ09NUEFUSUJMRV9JT0NUTChDQVBJX1NFVF9GTEFHUykKLUNPTVBBVElCTEVfSU9DVEwoQ0FQSV9DTFJfRkxBR1MpCi1DT01QQVRJQkxFX0lPQ1RMKENBUElfTkNDSV9PUEVOQ09VTlQpCi1DT01QQVRJQkxFX0lPQ1RMKENBUElfTkNDSV9HRVRVTklUKQotLyogU2llbWVucyBHaWdhc2V0ICovCi1DT01QQVRJQkxFX0lPQ1RMKEdJR0FTRVRfUkVESVIpCi1DT01QQVRJQkxFX0lPQ1RMKEdJR0FTRVRfQ09ORklHKQotQ09NUEFUSUJMRV9JT0NUTChHSUdBU0VUX0JSS0NIQVJTKQotQ09NUEFUSUJMRV9JT0NUTChHSUdBU0VUX1ZFUlNJT04pCi0vKiBNaXNjLiAqLwotQ09NUEFUSUJMRV9JT0NUTCgweDQxNTQ1OTAwKQkJLyogQVRZSU9fQ0xLUiAqLwotQ09NUEFUSUJMRV9JT0NUTCgweDQxNTQ1OTAxKQkJLyogQVRZSU9fQ0xLVyAqLwotQ09NUEFUSUJMRV9JT0NUTChQQ0lJT0NfQ09OVFJPTExFUikKLUNPTVBBVElCTEVfSU9DVEwoUENJSU9DX01NQVBfSVNfSU8pCi1DT01QQVRJQkxFX0lPQ1RMKFBDSUlPQ19NTUFQX0lTX01FTSkKLUNPTVBBVElCTEVfSU9DVEwoUENJSU9DX1dSSVRFX0NPTUJJTkUpCi0vKiBVU0IgKi8KLUNPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfUkVTRVRFUCkKLUNPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfU0VUSU5URVJGQUNFKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19TRVRDT05GSUdVUkFUSU9OKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19HRVREUklWRVIpCi1DT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX0RJU0NBUkRVUkIpCi1DT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX0NMQUlNSU5URVJGQUNFKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19SRUxFQVNFSU5URVJGQUNFKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19DT05ORUNUSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfSFVCX1BPUlRJTkZPKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19SRVNFVCkKLUNPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfU1VCTUlUVVJCMzIpCi1DT01QQVRJQkxFX0lPQ1RMKFVTQkRFVkZTX1JFQVBVUkIzMikKLUNPTVBBVElCTEVfSU9DVEwoVVNCREVWRlNfUkVBUFVSQk5ERUxBWTMyKQotQ09NUEFUSUJMRV9JT0NUTChVU0JERVZGU19DTEVBUl9IQUxUKQotLyogTVREICovCi1DT01QQVRJQkxFX0lPQ1RMKE1FTUdFVElORk8pCi1DT01QQVRJQkxFX0lPQ1RMKE1FTUVSQVNFKQotQ09NUEFUSUJMRV9JT0NUTChNRU1MT0NLKQotQ09NUEFUSUJMRV9JT0NUTChNRU1VTkxPQ0spCi1DT01QQVRJQkxFX0lPQ1RMKE1FTUdFVFJFR0lPTkNPVU5UKQotQ09NUEFUSUJMRV9JT0NUTChNRU1HRVRSRUdJT05JTkZPKQotQ09NUEFUSUJMRV9JT0NUTChNRU1HRVRCQURCTE9DSykKLUNPTVBBVElCTEVfSU9DVEwoTUVNU0VUQkFEQkxPQ0spCi0vKiBOQkQgKi8KLVVMT05HX0lPQ1RMKE5CRF9TRVRfU09DSykKLVVMT05HX0lPQ1RMKE5CRF9TRVRfQkxLU0laRSkKLVVMT05HX0lPQ1RMKE5CRF9TRVRfU0laRSkKLUNPTVBBVElCTEVfSU9DVEwoTkJEX0RPX0lUKQotQ09NUEFUSUJMRV9JT0NUTChOQkRfQ0xFQVJfU09DSykKLUNPTVBBVElCTEVfSU9DVEwoTkJEX0NMRUFSX1FVRSkKLUNPTVBBVElCTEVfSU9DVEwoTkJEX1BSSU5UX0RFQlVHKQotVUxPTkdfSU9DVEwoTkJEX1NFVF9TSVpFX0JMT0NLUykKLUNPTVBBVElCTEVfSU9DVEwoTkJEX0RJU0NPTk5FQ1QpCi0vKiBpMmMgKi8KLUNPTVBBVElCTEVfSU9DVEwoSTJDX1NMQVZFKQotQ09NUEFUSUJMRV9JT0NUTChJMkNfU0xBVkVfRk9SQ0UpCi1DT01QQVRJQkxFX0lPQ1RMKEkyQ19URU5CSVQpCi1DT01QQVRJQkxFX0lPQ1RMKEkyQ19QRUMpCi1DT01QQVRJQkxFX0lPQ1RMKEkyQ19SRVRSSUVTKQotQ09NUEFUSUJMRV9JT0NUTChJMkNfVElNRU9VVCkKLS8qIHdpcmVsZXNzICovCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdDT01NSVQpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdOQU1FKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXTldJRCkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV05XSUQpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdGUkVRKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXRlJFUSkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV01PREUpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdNT0RFKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXU0VOUykKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV1NFTlMpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdSQU5HRSkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1BSSVYpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdQUklWKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXU1RBVFMpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdTVEFUUykKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV0FQKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXQVApCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdTQ0FOKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXUkFURSkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV1JBVEUpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdSVFMpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdSVFMpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdGUkFHKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXRlJBRykKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ1NJV1RYUE9XKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DR0lXVFhQT1cpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NTSVdSRVRSWSkKLUNPTVBBVElCTEVfSU9DVEwoU0lPQ0dJV1JFVFJZKQotQ09NUEFUSUJMRV9JT0NUTChTSU9DU0lXUE9XRVIpCi1DT01QQVRJQkxFX0lPQ1RMKFNJT0NHSVdQT1dFUikKLS8qIGhpZGRldiAqLwotQ09NUEFUSUJMRV9JT0NUTChISURJT0NHVkVSU0lPTikKLUNPTVBBVElCTEVfSU9DVEwoSElESU9DQVBQTElDQVRJT04pCi1DT01QQVRJQkxFX0lPQ1RMKEhJRElPQ0dERVZJTkZPKQotQ09NUEFUSUJMRV9JT0NUTChISURJT0NHU1RSSU5HKQotQ09NUEFUSUJMRV9JT0NUTChISURJT0NJTklUUkVQT1JUKQotQ09NUEFUSUJMRV9JT0NUTChISURJT0NHUkVQT1JUKQotQ09NUEFUSUJMRV9JT0NUTChISURJT0NTUkVQT1JUKQotQ09NUEFUSUJMRV9JT0NUTChISURJT0NHUkVQT1JUSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoSElESU9DR0ZJRUxESU5GTykKLUNPTVBBVElCTEVfSU9DVEwoSElESU9DR1VTQUdFKQotQ09NUEFUSUJMRV9JT0NUTChISURJT0NTVVNBR0UpCi1DT01QQVRJQkxFX0lPQ1RMKEhJRElPQ0dVQ09ERSkKLUNPTVBBVElCTEVfSU9DVEwoSElESU9DR0ZMQUcpCi1DT01QQVRJQkxFX0lPQ1RMKEhJRElPQ1NGTEFHKQotQ09NUEFUSUJMRV9JT0NUTChISURJT0NHQ09MTEVDVElPTklOREVYKQotQ09NUEFUSUJMRV9JT0NUTChISURJT0NHQ09MTEVDVElPTklORk8pCi0vKiBkdmIgKi8KLUNPTVBBVElCTEVfSU9DVEwoQVVESU9fU1RPUCkKLUNPTVBBVElCTEVfSU9DVEwoQVVESU9fUExBWSkKLUNPTVBBVElCTEVfSU9DVEwoQVVESU9fUEFVU0UpCi1DT01QQVRJQkxFX0lPQ1RMKEFVRElPX0NPTlRJTlVFKQotQ09NUEFUSUJMRV9JT0NUTChBVURJT19TRUxFQ1RfU09VUkNFKQotQ09NUEFUSUJMRV9JT0NUTChBVURJT19TRVRfTVVURSkKLUNPTVBBVElCTEVfSU9DVEwoQVVESU9fU0VUX0FWX1NZTkMpCi1DT01QQVRJQkxFX0lPQ1RMKEFVRElPX1NFVF9CWVBBU1NfTU9ERSkKLUNPTVBBVElCTEVfSU9DVEwoQVVESU9fQ0hBTk5FTF9TRUxFQ1QpCi1DT01QQVRJQkxFX0lPQ1RMKEFVRElPX0dFVF9TVEFUVVMpCi1DT01QQVRJQkxFX0lPQ1RMKEFVRElPX0dFVF9DQVBBQklMSVRJRVMpCi1DT01QQVRJQkxFX0lPQ1RMKEFVRElPX0NMRUFSX0JVRkZFUikKLUNPTVBBVElCTEVfSU9DVEwoQVVESU9fU0VUX0lEKQotQ09NUEFUSUJMRV9JT0NUTChBVURJT19TRVRfTUlYRVIpCi1DT01QQVRJQkxFX0lPQ1RMKEFVRElPX1NFVF9TVFJFQU1UWVBFKQotQ09NUEFUSUJMRV9JT0NUTChBVURJT19TRVRfRVhUX0lEKQotQ09NUEFUSUJMRV9JT0NUTChBVURJT19TRVRfQVRUUklCVVRFUykKLUNPTVBBVElCTEVfSU9DVEwoQVVESU9fU0VUX0tBUkFPS0UpCi1DT01QQVRJQkxFX0lPQ1RMKERNWF9TVEFSVCkKLUNPTVBBVElCTEVfSU9DVEwoRE1YX1NUT1ApCi1DT01QQVRJQkxFX0lPQ1RMKERNWF9TRVRfRklMVEVSKQotQ09NUEFUSUJMRV9JT0NUTChETVhfU0VUX1BFU19GSUxURVIpCi1DT01QQVRJQkxFX0lPQ1RMKERNWF9TRVRfQlVGRkVSX1NJWkUpCi1DT01QQVRJQkxFX0lPQ1RMKERNWF9HRVRfUEVTX1BJRFMpCi1DT01QQVRJQkxFX0lPQ1RMKERNWF9HRVRfQ0FQUykKLUNPTVBBVElCTEVfSU9DVEwoRE1YX1NFVF9TT1VSQ0UpCi1DT01QQVRJQkxFX0lPQ1RMKERNWF9HRVRfU1RDKQotQ09NUEFUSUJMRV9JT0NUTChGRV9HRVRfSU5GTykKLUNPTVBBVElCTEVfSU9DVEwoRkVfRElTRVFDX1JFU0VUX09WRVJMT0FEKQotQ09NUEFUSUJMRV9JT0NUTChGRV9ESVNFUUNfU0VORF9NQVNURVJfQ01EKQotQ09NUEFUSUJMRV9JT0NUTChGRV9ESVNFUUNfUkVDVl9TTEFWRV9SRVBMWSkKLUNPTVBBVElCTEVfSU9DVEwoRkVfRElTRVFDX1NFTkRfQlVSU1QpCi1DT01QQVRJQkxFX0lPQ1RMKEZFX1NFVF9UT05FKQotQ09NUEFUSUJMRV9JT0NUTChGRV9TRVRfVk9MVEFHRSkKLUNPTVBBVElCTEVfSU9DVEwoRkVfRU5BQkxFX0hJR0hfTE5CX1ZPTFRBR0UpCi1DT01QQVRJQkxFX0lPQ1RMKEZFX1JFQURfU1RBVFVTKQotQ09NUEFUSUJMRV9JT0NUTChGRV9SRUFEX0JFUikKLUNPTVBBVElCTEVfSU9DVEwoRkVfUkVBRF9TSUdOQUxfU1RSRU5HVEgpCi1DT01QQVRJQkxFX0lPQ1RMKEZFX1JFQURfU05SKQotQ09NUEFUSUJMRV9JT0NUTChGRV9SRUFEX1VOQ09SUkVDVEVEX0JMT0NLUykKLUNPTVBBVElCTEVfSU9DVEwoRkVfU0VUX0ZST05URU5EKQotQ09NUEFUSUJMRV9JT0NUTChGRV9HRVRfRlJPTlRFTkQpCi1DT01QQVRJQkxFX0lPQ1RMKEZFX0dFVF9FVkVOVCkKLUNPTVBBVElCTEVfSU9DVEwoRkVfRElTSE5FVFdPUktfU0VORF9MRUdBQ1lfQ01EKQotQ09NUEFUSUJMRV9JT0NUTChWSURFT19TVE9QKQotQ09NUEFUSUJMRV9JT0NUTChWSURFT19QTEFZKQotQ09NUEFUSUJMRV9JT0NUTChWSURFT19GUkVFWkUpCi1DT01QQVRJQkxFX0lPQ1RMKFZJREVPX0NPTlRJTlVFKQotQ09NUEFUSUJMRV9JT0NUTChWSURFT19TRUxFQ1RfU09VUkNFKQotQ09NUEFUSUJMRV9JT0NUTChWSURFT19TRVRfQkxBTkspCi1DT01QQVRJQkxFX0lPQ1RMKFZJREVPX0dFVF9TVEFUVVMpCi1DT01QQVRJQkxFX0lPQ1RMKFZJREVPX1NFVF9ESVNQTEFZX0ZPUk1BVCkKLUNPTVBBVElCTEVfSU9DVEwoVklERU9fRkFTVF9GT1JXQVJEKQotQ09NUEFUSUJMRV9JT0NUTChWSURFT19TTE9XTU9USU9OKQotQ09NUEFUSUJMRV9JT0NUTChWSURFT19HRVRfQ0FQQUJJTElUSUVTKQotQ09NUEFUSUJMRV9JT0NUTChWSURFT19DTEVBUl9CVUZGRVIpCi1DT01QQVRJQkxFX0lPQ1RMKFZJREVPX1NFVF9JRCkKLUNPTVBBVElCTEVfSU9DVEwoVklERU9fU0VUX1NUUkVBTVRZUEUpCi1DT01QQVRJQkxFX0lPQ1RMKFZJREVPX1NFVF9GT1JNQVQpCi1DT01QQVRJQkxFX0lPQ1RMKFZJREVPX1NFVF9TWVNURU0pCi1DT01QQVRJQkxFX0lPQ1RMKFZJREVPX1NFVF9ISUdITElHSFQpCi1DT01QQVRJQkxFX0lPQ1RMKFZJREVPX1NFVF9TUFUpCi1DT01QQVRJQkxFX0lPQ1RMKFZJREVPX0dFVF9OQVZJKQotQ09NUEFUSUJMRV9JT0NUTChWSURFT19TRVRfQVRUUklCVVRFUykKLUNPTVBBVElCTEVfSU9DVEwoVklERU9fR0VUX1NJWkUpCi1DT01QQVRJQkxFX0lPQ1RMKFZJREVPX0dFVF9GUkFNRV9SQVRFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmgKaW5kZXggYTlmNzk0Ny4uMDNlYzIzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYy5oCkBAIC00MCwzICs0MCw0IEBACiAjZGVmaW5lICBub2lubGluZQkJCV9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKICNkZWZpbmUgX19hdHRyaWJ1dGVfcHVyZV9fCQlfX2F0dHJpYnV0ZV9fKChwdXJlKSkKICNkZWZpbmUgX19hdHRyaWJ1dGVfY29uc3RfXwkJX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkKKyNkZWZpbmUgX19tYXliZV91bnVzZWQJCQlfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MzLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzMuaAppbmRleCBlY2Q2MjFmLi5hOWUyODYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzMuaApAQCAtNCw5ICs0LDExIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXItZ2NjLmg+CiAKICNpZiBfX0dOVUNfTUlOT1JfXyA+PSAzCi0jIGRlZmluZSBfX2F0dHJpYnV0ZV91c2VkX18JX19hdHRyaWJ1dGVfXygoX191c2VkX18pKQorIyBkZWZpbmUgX191c2VkCQkJX19hdHRyaWJ1dGVfXygoX191c2VkX18pKQorIyBkZWZpbmUgX19hdHRyaWJ1dGVfdXNlZF9fCV9fdXNlZAkJCQkvKiBkZXByZWNhdGVkICovCiAjZWxzZQotIyBkZWZpbmUgX19hdHRyaWJ1dGVfdXNlZF9fCV9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorIyBkZWZpbmUgX191c2VkCQkJX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisjIGRlZmluZSBfX2F0dHJpYnV0ZV91c2VkX18JX191c2VkCQkJCS8qIGRlcHJlY2F0ZWQgKi8KICNlbmRpZgogCiAjaWYgX19HTlVDX01JTk9SX18gPj0gNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaAppbmRleCBmZDBjYzdjLi5hMDNlOTM5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmgKQEAgLTEyLDcgKzEyLDggQEAKICMgZGVmaW5lIF9faW5saW5lCQlfX2lubGluZQlfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKICNlbmRpZgogCi0jZGVmaW5lIF9fYXR0cmlidXRlX3VzZWRfXwlfX2F0dHJpYnV0ZV9fKChfX3VzZWRfXykpCisjZGVmaW5lIF9fdXNlZAkJCV9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkKKyNkZWZpbmUgX19hdHRyaWJ1dGVfdXNlZF9fCV9fdXNlZAkJCS8qIGRlcHJlY2F0ZWQgKi8KICNkZWZpbmUgX19tdXN0X2NoZWNrIAkJX19hdHRyaWJ1dGVfXygod2Fybl91bnVzZWRfcmVzdWx0KSkKICNkZWZpbmUgX19jb21waWxlcl9vZmZzZXRvZihhLGIpIF9fYnVpbHRpbl9vZmZzZXRvZihhLGIpCiAjZGVmaW5lIF9fYWx3YXlzX2lubGluZQkJaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCmluZGV4IDNiNjk0OWIuLjgyODdhNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTM2LDkgKzM2LDcgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2lmIF9fR05VQ19fID4gNAotI2Vycm9yIG5vIGNvbXBpbGVyLWdjYy5oIGZpbGUgZm9yIHRoaXMgZ2NjIHZlcnNpb24KLSNlbGlmIF9fR05VQ19fID09IDQKKyNpZiBfX0dOVUNfXyA+PSA0CiAjIGluY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLWdjYzQuaD4KICNlbGlmIF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMgogIyBpbmNsdWRlIDxsaW51eC9jb21waWxlci1nY2MzLmg+CkBAIC0xMDgsMTUgKzEwNiwzMCBAQAogICogQWxsb3cgdXMgdG8gYXZvaWQgJ2RlZmluZWQgYnV0IG5vdCB1c2VkJyB3YXJuaW5ncyBvbiBmdW5jdGlvbnMgYW5kIGRhdGEsCiAgKiBhcyB3ZWxsIGFzIGZvcmNlIHRoZW0gdG8gYmUgZW1pdHRlZCB0byB0aGUgYXNzZW1ibHkgZmlsZS4KICAqCi0gKiBBcyBvZiBnY2MgMy4zLCBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBtYXJrZWQgd2l0aCBhdHRyaWJ1dGUoKHVzZWQpKQotICogbWF5IGJlIGVsaWRlZCBmcm9tIHRoZSBhc3NlbWJseSBmaWxlLiAgQXMgb2YgZ2NjIDMuMywgc3RhdGljIGRhdGEgbm90IHNvCisgKiBBcyBvZiBnY2MgMy40LCBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBtYXJrZWQgd2l0aCBhdHRyaWJ1dGUoKHVzZWQpKQorICogbWF5IGJlIGVsaWRlZCBmcm9tIHRoZSBhc3NlbWJseSBmaWxlLiAgQXMgb2YgZ2NjIDMuNCwgc3RhdGljIGRhdGEgbm90IHNvCiAgKiBtYXJrZWQgd2lsbCBub3QgYmUgZWxpZGVkLCBidXQgdGhpcyBtYXkgY2hhbmdlIGluIGEgZnV0dXJlIGdjYyB2ZXJzaW9uLgogICoKKyAqIE5PVEU6IEJlY2F1c2UgZGlzdHJpYnV0aW9ucyBzaGlwcGVkIHdpdGggYSBiYWNrcG9ydGVkIHVuaXQtYXQtYS10aW1lCisgKiBjb21waWxlciBpbiBnY2MgMy4zLCB3ZSBtdXN0IGRlZmluZSBfX3VzZWQgdG8gYmUgX19hdHRyaWJ1dGVfXygodXNlZCkpCisgKiBmb3IgZ2NjID49My4zIGluc3RlYWQgb2YgMy40LgorICoKICAqIEluIHByaW9yIHZlcnNpb25zIG9mIGdjYywgc3VjaCBmdW5jdGlvbnMgYW5kIGRhdGEgd291bGQgYmUgZW1pdHRlZCwgYnV0CiAgKiB3b3VsZCBiZSB3YXJuZWQgYWJvdXQgZXhjZXB0IHdpdGggYXR0cmlidXRlKCh1bnVzZWQpKS4KKyAqCisgKiBNYXJrIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWZlcmVuY2VkIG9ubHkgaW4gaW5saW5lIGFzc2VtYmx5IGFzIF9fdXNlZCBzbworICogdGhlIGNvZGUgaXMgZW1pdHRlZCBldmVuIHRob3VnaCBpdCBhcHBlYXJzIHRvIGJlIHVucmVmZXJlbmNlZC4KICAqLwogI2lmbmRlZiBfX2F0dHJpYnV0ZV91c2VkX18KLSMgZGVmaW5lIF9fYXR0cmlidXRlX3VzZWRfXwkvKiB1bmltcGxlbWVudGVkICovCisjIGRlZmluZSBfX2F0dHJpYnV0ZV91c2VkX18JLyogZGVwcmVjYXRlZCAqLworI2VuZGlmCisKKyNpZm5kZWYgX191c2VkCisjIGRlZmluZSBfX3VzZWQJCQkvKiB1bmltcGxlbWVudGVkICovCisjZW5kaWYKKworI2lmbmRlZiBfX21heWJlX3VudXNlZAorIyBkZWZpbmUgX19tYXliZV91bnVzZWQJCS8qIHVuaW1wbGVtZW50ZWQgKi8KICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAppbmRleCBkZTI1ZWUzLi42MmVmNmUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaApAQCAtNTEsNyArNTEsNyBAQAogCWludAkoKmNvbl9zY3JvbGxkZWx0YSkoc3RydWN0IHZjX2RhdGEgKiwgaW50KTsKIAlpbnQJKCpjb25fc2V0X29yaWdpbikoc3RydWN0IHZjX2RhdGEgKik7CiAJdm9pZAkoKmNvbl9zYXZlX3NjcmVlbikoc3RydWN0IHZjX2RhdGEgKik7Ci0JdTgJKCpjb25fYnVpbGRfYXR0cikoc3RydWN0IHZjX2RhdGEgKiwgdTgsIHU4LCB1OCwgdTgsIHU4KTsKKwl1OAkoKmNvbl9idWlsZF9hdHRyKShzdHJ1Y3QgdmNfZGF0YSAqLCB1OCwgdTgsIHU4LCB1OCwgdTgsIHU4KTsKIAl2b2lkCSgqY29uX2ludmVydF9yZWdpb24pKHN0cnVjdCB2Y19kYXRhICosIHUxNiAqLCBpbnQpOwogCXUxNiAgICAqKCpjb25fc2NyZWVuX3Bvcykoc3RydWN0IHZjX2RhdGEgKiwgaW50KTsKIAl1bnNpZ25lZCBsb25nICgqY29uX2dldHh5KShzdHJ1Y3QgdmNfZGF0YSAqLCB1bnNpZ25lZCBsb25nLCBpbnQgKiwgaW50ICopOwpAQCAtOTIsOSArOTIsOCBAQAogI2RlZmluZSBDT05fQk9PVAkoOCkKICNkZWZpbmUgQ09OX0FOWVRJTUUJKDE2KSAvKiBTYWZlIHRvIGNhbGwgd2hlbiBjcHUgaXMgb2ZmbGluZSAqLwogCi1zdHJ1Y3QgY29uc29sZQotewotCWNoYXIJbmFtZVs4XTsKK3N0cnVjdCBjb25zb2xlIHsKKwljaGFyCW5hbWVbMTZdOwogCXZvaWQJKCp3cml0ZSkoc3RydWN0IGNvbnNvbGUgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCk7CiAJaW50CSgqcmVhZCkoc3RydWN0IGNvbnNvbGUgKiwgY2hhciAqLCB1bnNpZ25lZCk7CiAJc3RydWN0IHR0eV9kcml2ZXIgKigqZGV2aWNlKShzdHJ1Y3QgY29uc29sZSAqLCBpbnQgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGVfc3RydWN0LmggYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGVfc3RydWN0LmgKaW5kZXggYTg2MTYyYi4uYTQ2MWY3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25zb2xlX3N0cnVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29uc29sZV9zdHJ1Y3QuaApAQCAtMzcsNiArMzcsNyBAQAogCXVuc2lnbmVkIGNoYXIJdmNfY29sb3I7CQkvKiBGb3JlZ3JvdW5kICYgYmFja2dyb3VuZCAqLwogCXVuc2lnbmVkIGNoYXIJdmNfc19jb2xvcjsJCS8qIFNhdmVkIGZvcmVncm91bmQgJiBiYWNrZ3JvdW5kICovCiAJdW5zaWduZWQgY2hhcgl2Y191bGNvbG9yOwkJLyogQ29sb3IgZm9yIHVuZGVybGluZSBtb2RlICovCisJdW5zaWduZWQgY2hhciAgIHZjX2l0Y29sb3I7CiAJdW5zaWduZWQgY2hhcgl2Y19oYWxmY29sb3I7CQkvKiBDb2xvciBmb3IgaGFsZiBpbnRlbnNpdHkgbW9kZSAqLwogCS8qIGN1cnNvciAqLwogCXVuc2lnbmVkIGludAl2Y19jdXJzb3JfdHlwZTsKQEAgLTcxLDEwICs3MiwxMiBAQAogCXVuc2lnbmVkIGludAl2Y19kZWNjb2xtCTogMTsJLyogODAvMTMyIENvbHVtbiBNb2RlICovCiAJLyogYXR0cmlidXRlIGZsYWdzICovCiAJdW5zaWduZWQgaW50CXZjX2ludGVuc2l0eQk6IDI7CS8qIDA9aGFsZi1icmlnaHQsIDE9bm9ybWFsLCAyPWJvbGQgKi8KKwl1bnNpZ25lZCBpbnQgICAgdmNfaXRhbGljOjE7CiAJdW5zaWduZWQgaW50CXZjX3VuZGVybGluZQk6IDE7CiAJdW5zaWduZWQgaW50CXZjX2JsaW5rCTogMTsKIAl1bnNpZ25lZCBpbnQJdmNfcmV2ZXJzZQk6IDE7CiAJdW5zaWduZWQgaW50CXZjX3NfaW50ZW5zaXR5CTogMjsJLyogc2F2ZWQgcmVuZGl0aW9uICovCisJdW5zaWduZWQgaW50ICAgIHZjX3NfaXRhbGljOjE7CiAJdW5zaWduZWQgaW50CXZjX3NfdW5kZXJsaW5lCTogMTsKIAl1bnNpZ25lZCBpbnQJdmNfc19ibGluawk6IDE7CiAJdW5zaWduZWQgaW50CXZjX3NfcmV2ZXJzZQk6IDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY29uc3QuaCBiL2luY2x1ZGUvbGludXgvY29uc3QuaApzaW1pbGFyaXR5IGluZGV4IDcwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS14ODZfNjQvY29uc3QuaApyZW5hbWUgdG8gaW5jbHVkZS9saW51eC9jb25zdC5oCmluZGV4IDU0ZmIwOGYuLjA3YjMwMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jb25zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29uc3QuaApAQCAtMSwxMSArMSwxMSBAQAogLyogY29uc3QuaDogTWFjcm9zIGZvciBkZWFsaW5nIHdpdGggY29uc3RhbnRzLiAgKi8KIAotI2lmbmRlZiBfWDg2XzY0X0NPTlNUX0gKLSNkZWZpbmUgX1g4Nl82NF9DT05TVF9ICisjaWZuZGVmIF9MSU5VWF9DT05TVF9ICisjZGVmaW5lIF9MSU5VWF9DT05TVF9ICiAKIC8qIFNvbWUgY29uc3RhbnQgbWFjcm9zIGFyZSB1c2VkIGluIGJvdGggYXNzZW1ibGVyIGFuZAogICogQyBjb2RlLiAgVGhlcmVmb3JlIHdlIGNhbm5vdCBhbm5vdGF0ZSB0aGVtIGFsd2F5cyB3aXRoCi0gKiAnVUwnIGFuZCBvdGhlciB0eXBlIHNwZWNpZmljZXJzIHVuaWxhdGVyYWxseS4gIFdlCisgKiAnVUwnIGFuZCBvdGhlciB0eXBlIHNwZWNpZmllcnMgdW5pbGF0ZXJhbGx5LiAgV2UKICAqIHVzZSB0aGUgZm9sbG93aW5nIG1hY3JvcyB0byBkZWFsIHdpdGggdGhpcy4KICAqLwogCkBAIC0xNiw1ICsxNiw0IEBACiAjZGVmaW5lIF9BQyhYLFkpCV9fQUMoWCxZKQogI2VuZGlmCiAKLQotI2VuZGlmIC8qICEoX1g4Nl82NF9DT05TVF9IKSAqLworI2VuZGlmIC8qICEoX0xJTlVYX0NPTlNUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdS5oIGIvaW5jbHVkZS9saW51eC9jcHUuaAppbmRleCBjMjJiMGRmLi4zYjJkZjI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1LmgKQEAgLTQxLDYgKzQxLDkgQEAKIGV4dGVybiBpbnQgY3B1X2FkZF9zeXNkZXZfYXR0cl9ncm91cChzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICphdHRycyk7CiBleHRlcm4gdm9pZCBjcHVfcmVtb3ZlX3N5c2Rldl9hdHRyX2dyb3VwKHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmF0dHJzKTsKIAorZXh0ZXJuIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlIGF0dHJfc2NoZWRfbWNfcG93ZXJfc2F2aW5nczsKK2V4dGVybiBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSBhdHRyX3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzOworZXh0ZXJuIGludCBzY2hlZF9jcmVhdGVfc3lzZnNfcG93ZXJfc2F2aW5nc19lbnRyaWVzKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNscyk7CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfY3B1KHN0cnVjdCBjcHUgKmNwdSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyYy1pdHUtdC5oIGIvaW5jbHVkZS9saW51eC9jcmMtaXR1LXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDkyMGYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jcmMtaXR1LXQuaApAQCAtMCwwICsxLDI4IEBACisvKgorICoJY3JjLWl0dS10LmggLSBDUkMgSVRVLVQgVi40MSByb3V0aW5lCisgKgorICogSW1wbGVtZW50cyB0aGUgc3RhbmRhcmQgQ1JDIElUVS1UIFYuNDE6CisgKiAgIFdpZHRoIDE2CisgKiAgIFBvbHkgIDB4MHgxMDIxICh4XjE2ICsgeF4xMiArIHheMTUgKyAxKQorICogICBJbml0ICAwCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiBWZXJzaW9uIDIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBDUkNfSVRVX1RfSAorI2RlZmluZSBDUkNfSVRVX1RfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZXh0ZXJuIHUxNiBjb25zdCBjcmNfaXR1X3RfdGFibGVbMjU2XTsKKworZXh0ZXJuIHUxNiBjcmNfaXR1X3QodTE2IGNyYywgY29uc3QgdTggKmJ1ZmZlciwgc2l6ZV90IGxlbik7CisKK3N0YXRpYyBpbmxpbmUgdTE2IGNyY19pdHVfdF9ieXRlKHUxNiBjcmMsIGNvbnN0IHU4IGRhdGEpCit7CisJcmV0dXJuIChjcmMgPDwgOCkgXiBjcmNfaXR1X3RfdGFibGVbKChjcmMgPj4gOCkgXiBkYXRhKSAmIDB4ZmZdOworfQorCisjZW5kaWYgLyogQ1JDX0lUVV9UX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oIGIvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCmluZGV4IDQ2ZDgyNTQuLjcyYWEwMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKQEAgLTY3LDYgKzY3LDggQEAKICNpZm5kZWYgX0xJTlVYX0NZQ0xBREVTX0gKICNkZWZpbmUgX0xJTlVYX0NZQ0xBREVTX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCBjeWNsYWRlc19tb25pdG9yIHsKICAgICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgaW50X2NvdW50OwogICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBjaGFyX2NvdW50OwpAQCAtMTA4LDcgKzExMCw2IEBACiAjZGVmaW5lIENZWlNFVFBPTExDWUNMRQkJMHg0MzU5MGUKICNkZWZpbmUgQ1laR0VUUE9MTENZQ0xFCQkweDQzNTkwZgogI2RlZmluZSBDWUdFVENEMTQwMFZFUgkJMHg0MzU5MTAKLSNkZWZpbmUgQ1lHRVRDQVJESU5GTwkJMHg0MzU5MTEKICNkZWZpbmUJQ1lTRVRXQUlUCQkweDQzNTkxMgogI2RlZmluZQlDWUdFVFdBSVQJCTB4NDM1OTEzCiAKQEAgLTE0OSwxNCArMTUwLDEyIEBACiAgKglhcmNoaXRlY3R1cmVzIGFuZCBjb21waWxlcnMuCiAgKi8KIAotI2lmIGRlZmluZWQoX19hbHBoYV9fKQotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXVjZG91YmxlOwkvKiA2NCBiaXRzLCB1bnNpZ25lZCAqLwotdHlwZWRlZiB1bnNpZ25lZCBpbnQJdWNsb25nOwkJLyogMzIgYml0cywgdW5zaWduZWQgKi8KLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcJdWNsb25nOwkJLyogMzIgYml0cywgdW5zaWduZWQgKi8KLSNlbmRpZgotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAl1Y3Nob3J0OwkvKiAxNiBiaXRzLCB1bnNpZ25lZCAqLwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyCXVjY2hhcjsJCS8qIDggYml0cywgdW5zaWduZWQgKi8KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKwordHlwZWRlZiBfX3U2NCAgdWNkb3VibGU7CQkvKiA2NCBiaXRzLCB1bnNpZ25lZCAqLwordHlwZWRlZiBfX3UzMiAgdWNsb25nOwkJCS8qIDMyIGJpdHMsIHVuc2lnbmVkICovCit0eXBlZGVmIF9fdTE2ICB1Y3Nob3J0OwkJLyogMTYgYml0cywgdW5zaWduZWQgKi8KK3R5cGVkZWYgX191OCAgIHVjY2hhcjsJCQkvKiA4IGJpdHMsIHVuc2lnbmVkICovCiAKIC8qCiAgKglNZW1vcnkgV2luZG93IFNpemVzCkBAIC0xNzQsMjQgKzE3MywyNCBAQAogICovCiAKIHN0cnVjdAlDVVNUT01fUkVHIHsKLQl1Y2xvbmcJZnBnYV9pZDsJCS8qIEZQR0EgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgKi8KLQl1Y2xvbmcJZnBnYV92ZXJzaW9uOwkJLyogRlBHQSBWZXJzaW9uIE51bWJlciBSZWdpc3RlciAqLwotCXVjbG9uZwljcHVfc3RhcnQ7CQkvKiBDUFUgc3RhcnQgUmVnaXN0ZXIgKHdyaXRlKSAqLwotCXVjbG9uZwljcHVfc3RvcDsJCS8qIENQVSBzdG9wIFJlZ2lzdGVyICh3cml0ZSkgKi8KLQl1Y2xvbmcJbWlzY19yZWc7CQkvKiBNaXNjZWxhbmVvdXMgUmVnaXN0ZXIgKi8KLQl1Y2xvbmcJaWR0X21vZGU7CQkvKiBJRFQgbW9kZSBSZWdpc3RlciAqLwotCXVjbG9uZwl1YXJ0X2lycV9zdGF0dXM7CS8qIFVBUlQgSVJRIHN0YXR1cyBSZWdpc3RlciAqLwotCXVjbG9uZwljbGVhcl90aW1lcjBfaXJxOwkvKiBDbGVhciB0aW1lciBpbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KLQl1Y2xvbmcJY2xlYXJfdGltZXIxX2lycTsJLyogQ2xlYXIgdGltZXIgaW50ZXJydXB0IFJlZ2lzdGVyICovCi0JdWNsb25nCWNsZWFyX3RpbWVyMl9pcnE7CS8qIENsZWFyIHRpbWVyIGludGVycnVwdCBSZWdpc3RlciAqLwotCXVjbG9uZwl0ZXN0X3JlZ2lzdGVyOwkJLyogVGVzdCBSZWdpc3RlciAqLwotCXVjbG9uZwl0ZXN0X2NvdW50OwkJLyogVGVzdCBDb3VudCBSZWdpc3RlciAqLwotCXVjbG9uZwl0aW1lcl9zZWxlY3Q7CQkvKiBUaW1lciBzZWxlY3QgcmVnaXN0ZXIgKi8KLQl1Y2xvbmcJcHJfdWFydF9pcnFfc3RhdHVzOwkvKiBQcmlvcml0aXplZCBVQVJUIElSUSBzdGF0IFJlZyAqLwotCXVjbG9uZwlyYW1fd2FpdF9zdGF0ZTsJCS8qIFJBTSB3YWl0LXN0YXRlIFJlZ2lzdGVyICovCi0JdWNsb25nCXVhcnRfd2FpdF9zdGF0ZTsJLyogVUFSVCB3YWl0LXN0YXRlIFJlZ2lzdGVyICovCi0JdWNsb25nCXRpbWVyX3dhaXRfc3RhdGU7CS8qIHRpbWVyIHdhaXQtc3RhdGUgUmVnaXN0ZXIgKi8KLQl1Y2xvbmcJYWNrX3dhaXRfc3RhdGU7CQkvKiBBQ0sgd2FpdCBTdGF0ZSBSZWdpc3RlciAqLworCV9fdTMyCWZwZ2FfaWQ7CQkvKiBGUEdBIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICovCisJX191MzIJZnBnYV92ZXJzaW9uOwkJLyogRlBHQSBWZXJzaW9uIE51bWJlciBSZWdpc3RlciAqLworCV9fdTMyCWNwdV9zdGFydDsJCS8qIENQVSBzdGFydCBSZWdpc3RlciAod3JpdGUpICovCisJX191MzIJY3B1X3N0b3A7CQkvKiBDUFUgc3RvcCBSZWdpc3RlciAod3JpdGUpICovCisJX191MzIJbWlzY19yZWc7CQkvKiBNaXNjZWxhbmVvdXMgUmVnaXN0ZXIgKi8KKwlfX3UzMglpZHRfbW9kZTsJCS8qIElEVCBtb2RlIFJlZ2lzdGVyICovCisJX191MzIJdWFydF9pcnFfc3RhdHVzOwkvKiBVQVJUIElSUSBzdGF0dXMgUmVnaXN0ZXIgKi8KKwlfX3UzMgljbGVhcl90aW1lcjBfaXJxOwkvKiBDbGVhciB0aW1lciBpbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKwlfX3UzMgljbGVhcl90aW1lcjFfaXJxOwkvKiBDbGVhciB0aW1lciBpbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKwlfX3UzMgljbGVhcl90aW1lcjJfaXJxOwkvKiBDbGVhciB0aW1lciBpbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKwlfX3UzMgl0ZXN0X3JlZ2lzdGVyOwkJLyogVGVzdCBSZWdpc3RlciAqLworCV9fdTMyCXRlc3RfY291bnQ7CQkvKiBUZXN0IENvdW50IFJlZ2lzdGVyICovCisJX191MzIJdGltZXJfc2VsZWN0OwkJLyogVGltZXIgc2VsZWN0IHJlZ2lzdGVyICovCisJX191MzIJcHJfdWFydF9pcnFfc3RhdHVzOwkvKiBQcmlvcml0aXplZCBVQVJUIElSUSBzdGF0IFJlZyAqLworCV9fdTMyCXJhbV93YWl0X3N0YXRlOwkJLyogUkFNIHdhaXQtc3RhdGUgUmVnaXN0ZXIgKi8KKwlfX3UzMgl1YXJ0X3dhaXRfc3RhdGU7CS8qIFVBUlQgd2FpdC1zdGF0ZSBSZWdpc3RlciAqLworCV9fdTMyCXRpbWVyX3dhaXRfc3RhdGU7CS8qIHRpbWVyIHdhaXQtc3RhdGUgUmVnaXN0ZXIgKi8KKwlfX3UzMglhY2tfd2FpdF9zdGF0ZTsJCS8qIEFDSyB3YWl0IFN0YXRlIFJlZ2lzdGVyICovCiB9OwogCiAvKgpAQCAtMjAxLDM0ICsyMDAsMzQgQEAKICAqLwogCiBzdHJ1Y3QgUlVOVElNRV85MDYwIHsKLQl1Y2xvbmcJbG9jX2FkZHJfcmFuZ2U7CS8qIDAwaCAtIExvY2FsIEFkZHJlc3MgUmFuZ2UgKi8KLQl1Y2xvbmcJbG9jX2FkZHJfYmFzZTsJLyogMDRoIC0gTG9jYWwgQWRkcmVzcyBCYXNlICovCi0JdWNsb25nCWxvY19hcmJpdHI7CS8qIDA4aCAtIExvY2FsIEFyYml0cmF0aW9uICovCi0JdWNsb25nCWVuZGlhbl9kZXNjcjsJLyogMENoIC0gQmlnL0xpdHRsZSBFbmRpYW4gRGVzY3JpcHRvciAqLwotCXVjbG9uZwlsb2Nfcm9tX3JhbmdlOwkvKiAxMGggLSBMb2NhbCBST00gUmFuZ2UgKi8KLQl1Y2xvbmcJbG9jX3JvbV9iYXNlOwkvKiAxNGggLSBMb2NhbCBST00gQmFzZSAqLwotCXVjbG9uZwlsb2NfYnVzX2Rlc2NyOwkvKiAxOGggLSBMb2NhbCBCdXMgZGVzY3JpcHRvciAqLwotCXVjbG9uZwlsb2NfcmFuZ2VfbXN0OwkvKiAxQ2ggLSBMb2NhbCBSYW5nZSBmb3IgTWFzdGVyIHRvIFBDSSAqLwotCXVjbG9uZwlsb2NfYmFzZV9tc3Q7CS8qIDIwaCAtIExvY2FsIEJhc2UgZm9yIE1hc3RlciBQQ0kgKi8KLQl1Y2xvbmcJbG9jX3JhbmdlX2lvOwkvKiAyNGggLSBMb2NhbCBSYW5nZSBmb3IgTWFzdGVyIElPICovCi0JdWNsb25nCXBjaV9iYXNlX21zdDsJLyogMjhoIC0gUENJIEJhc2UgZm9yIE1hc3RlciBQQ0kgKi8KLQl1Y2xvbmcJcGNpX2NvbmZfaW87CS8qIDJDaCAtIFBDSSBjb25maWd1cmF0aW9uIGZvciBNYXN0ZXIgSU8gKi8KLQl1Y2xvbmcJZmlsbGVyMTsJLyogMzBoICovCi0JdWNsb25nCWZpbGxlcjI7CS8qIDM0aCAqLwotCXVjbG9uZwlmaWxsZXIzOwkvKiAzOGggKi8KLQl1Y2xvbmcJZmlsbGVyNDsJLyogM0NoICovCi0JdWNsb25nCW1haWxfYm94XzA7CS8qIDQwaCAtIE1haWwgQm94IDAgKi8KLQl1Y2xvbmcJbWFpbF9ib3hfMTsJLyogNDRoIC0gTWFpbCBCb3ggMSAqLwotCXVjbG9uZwltYWlsX2JveF8yOwkvKiA0OGggLSBNYWlsIEJveCAyICovCi0JdWNsb25nCW1haWxfYm94XzM7CS8qIDRDaCAtIE1haWwgQm94IDMgKi8KLQl1Y2xvbmcJZmlsbGVyNTsJLyogNTBoICovCi0JdWNsb25nCWZpbGxlcjY7CS8qIDU0aCAqLwotCXVjbG9uZwlmaWxsZXI3OwkvKiA1OGggKi8KLQl1Y2xvbmcJZmlsbGVyODsJLyogNUNoICovCi0JdWNsb25nCXBjaV9kb29yYmVsbDsJLyogNjBoIC0gUENJIHRvIExvY2FsIERvb3JiZWxsICovCi0JdWNsb25nCWxvY19kb29yYmVsbDsJLyogNjRoIC0gTG9jYWwgdG8gUENJIERvb3JiZWxsICovCi0JdWNsb25nCWludHJfY3RybF9zdGF0OwkvKiA2OGggLSBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgKi8KLQl1Y2xvbmcJaW5pdF9jdHJsOwkvKiA2Q2ggLSBFRVBST00gY29udHJvbCwgSW5pdCBDb250cm9sLCBldGMgKi8KKwlfX3UzMglsb2NfYWRkcl9yYW5nZTsJLyogMDBoIC0gTG9jYWwgQWRkcmVzcyBSYW5nZSAqLworCV9fdTMyCWxvY19hZGRyX2Jhc2U7CS8qIDA0aCAtIExvY2FsIEFkZHJlc3MgQmFzZSAqLworCV9fdTMyCWxvY19hcmJpdHI7CS8qIDA4aCAtIExvY2FsIEFyYml0cmF0aW9uICovCisJX191MzIJZW5kaWFuX2Rlc2NyOwkvKiAwQ2ggLSBCaWcvTGl0dGxlIEVuZGlhbiBEZXNjcmlwdG9yICovCisJX191MzIJbG9jX3JvbV9yYW5nZTsJLyogMTBoIC0gTG9jYWwgUk9NIFJhbmdlICovCisJX191MzIJbG9jX3JvbV9iYXNlOwkvKiAxNGggLSBMb2NhbCBST00gQmFzZSAqLworCV9fdTMyCWxvY19idXNfZGVzY3I7CS8qIDE4aCAtIExvY2FsIEJ1cyBkZXNjcmlwdG9yICovCisJX191MzIJbG9jX3JhbmdlX21zdDsJLyogMUNoIC0gTG9jYWwgUmFuZ2UgZm9yIE1hc3RlciB0byBQQ0kgKi8KKwlfX3UzMglsb2NfYmFzZV9tc3Q7CS8qIDIwaCAtIExvY2FsIEJhc2UgZm9yIE1hc3RlciBQQ0kgKi8KKwlfX3UzMglsb2NfcmFuZ2VfaW87CS8qIDI0aCAtIExvY2FsIFJhbmdlIGZvciBNYXN0ZXIgSU8gKi8KKwlfX3UzMglwY2lfYmFzZV9tc3Q7CS8qIDI4aCAtIFBDSSBCYXNlIGZvciBNYXN0ZXIgUENJICovCisJX191MzIJcGNpX2NvbmZfaW87CS8qIDJDaCAtIFBDSSBjb25maWd1cmF0aW9uIGZvciBNYXN0ZXIgSU8gKi8KKwlfX3UzMglmaWxsZXIxOwkvKiAzMGggKi8KKwlfX3UzMglmaWxsZXIyOwkvKiAzNGggKi8KKwlfX3UzMglmaWxsZXIzOwkvKiAzOGggKi8KKwlfX3UzMglmaWxsZXI0OwkvKiAzQ2ggKi8KKwlfX3UzMgltYWlsX2JveF8wOwkvKiA0MGggLSBNYWlsIEJveCAwICovCisJX191MzIJbWFpbF9ib3hfMTsJLyogNDRoIC0gTWFpbCBCb3ggMSAqLworCV9fdTMyCW1haWxfYm94XzI7CS8qIDQ4aCAtIE1haWwgQm94IDIgKi8KKwlfX3UzMgltYWlsX2JveF8zOwkvKiA0Q2ggLSBNYWlsIEJveCAzICovCisJX191MzIJZmlsbGVyNTsJLyogNTBoICovCisJX191MzIJZmlsbGVyNjsJLyogNTRoICovCisJX191MzIJZmlsbGVyNzsJLyogNThoICovCisJX191MzIJZmlsbGVyODsJLyogNUNoICovCisJX191MzIJcGNpX2Rvb3JiZWxsOwkvKiA2MGggLSBQQ0kgdG8gTG9jYWwgRG9vcmJlbGwgKi8KKwlfX3UzMglsb2NfZG9vcmJlbGw7CS8qIDY0aCAtIExvY2FsIHRvIFBDSSBEb29yYmVsbCAqLworCV9fdTMyCWludHJfY3RybF9zdGF0OwkvKiA2OGggLSBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgKi8KKwlfX3UzMglpbml0X2N0cmw7CS8qIDZDaCAtIEVFUFJPTSBjb250cm9sLCBJbml0IENvbnRyb2wsIGV0YyAqLwogfTsKIAogLyogVmFsdWVzIGZvciB0aGUgTG9jYWwgQmFzZSBBZGRyZXNzIHJlLW1hcCByZWdpc3RlciAqLwpAQCAtMjcwLDggKzI2OSw4IEBACiAjZGVmaW5lCVpGX1RJTkFDVAlaRl9USU5BQ1RfREVGCiAKIHN0cnVjdAlGSVJNX0lEIHsKLQl1Y2xvbmcJc2lnbmF0dXJlOwkJLyogWkZJUk0vVSBzaWduYXR1cmUgKi8KLQl1Y2xvbmcJemZ3Y3RybF9hZGRyOwkJLyogcG9pbnRlciB0byBaRldfQ1RSTCBzdHJ1Y3R1cmUgKi8KKwlfX3UzMglzaWduYXR1cmU7CQkvKiBaRklSTS9VIHNpZ25hdHVyZSAqLworCV9fdTMyCXpmd2N0cmxfYWRkcjsJCS8qIHBvaW50ZXIgdG8gWkZXX0NUUkwgc3RydWN0dXJlICovCiB9OwogCiAvKiBPcC4gU3lzdGVtIGlkICovCkBAIC00MDgsMjQgKzQwNywyNCBAQAogICovCiAKIHN0cnVjdCBDSF9DVFJMIHsKLQl1Y2xvbmcJb3BfbW9kZTsJLyogb3BlcmF0aW9uIG1vZGUgKi8KLQl1Y2xvbmcJaW50cl9lbmFibGU7CS8qIGludGVycnVwdCBtYXNraW5nICovCi0JdWNsb25nCXN3X2Zsb3c7CS8qIFNXIGZsb3cgY29udHJvbCAqLwotCXVjbG9uZwlmbG93X3N0YXR1czsJLyogb3V0cHV0IGZsb3cgc3RhdHVzICovCi0JdWNsb25nCWNvbW1fYmF1ZDsJLyogYmF1ZCByYXRlICAtIG51bWVyaWNhbGx5IHNwZWNpZmllZCAqLwotCXVjbG9uZwljb21tX3Bhcml0eTsJLyogcGFyaXR5ICovCi0JdWNsb25nCWNvbW1fZGF0YV9sOwkvKiBkYXRhIGxlbmd0aC9zdG9wICovCi0JdWNsb25nCWNvbW1fZmxhZ3M7CS8qIG90aGVyIGZsYWdzICovCi0JdWNsb25nCWh3X2Zsb3c7CS8qIEhXIGZsb3cgY29udHJvbCAqLwotCXVjbG9uZwlyc19jb250cm9sOwkvKiBSUy0yMzIgb3V0cHV0cyAqLwotCXVjbG9uZwlyc19zdGF0dXM7CS8qIFJTLTIzMiBpbnB1dHMgKi8KLQl1Y2xvbmcJZmxvd194b247CS8qIHhvbiBjaGFyICovCi0JdWNsb25nCWZsb3dfeG9mZjsJLyogeG9mZiBjaGFyICovCi0JdWNsb25nCWh3X292ZXJmbG93OwkvKiBodyBvdmVyZmxvdyBjb3VudGVyICovCi0JdWNsb25nCXN3X292ZXJmbG93OwkvKiBzdyBvdmVyZmxvdyBjb3VudGVyICovCi0JdWNsb25nCWNvbW1fZXJyb3I7CS8qIGZyYW1lL3Bhcml0eSBlcnJvciBjb3VudGVyICovCi0JdWNsb25nIGljaGFyOwotCXVjbG9uZyBmaWxsZXJbN107CisJX191MzIJb3BfbW9kZTsJLyogb3BlcmF0aW9uIG1vZGUgKi8KKwlfX3UzMglpbnRyX2VuYWJsZTsJLyogaW50ZXJydXB0IG1hc2tpbmcgKi8KKwlfX3UzMglzd19mbG93OwkvKiBTVyBmbG93IGNvbnRyb2wgKi8KKwlfX3UzMglmbG93X3N0YXR1czsJLyogb3V0cHV0IGZsb3cgc3RhdHVzICovCisJX191MzIJY29tbV9iYXVkOwkvKiBiYXVkIHJhdGUgIC0gbnVtZXJpY2FsbHkgc3BlY2lmaWVkICovCisJX191MzIJY29tbV9wYXJpdHk7CS8qIHBhcml0eSAqLworCV9fdTMyCWNvbW1fZGF0YV9sOwkvKiBkYXRhIGxlbmd0aC9zdG9wICovCisJX191MzIJY29tbV9mbGFnczsJLyogb3RoZXIgZmxhZ3MgKi8KKwlfX3UzMglod19mbG93OwkvKiBIVyBmbG93IGNvbnRyb2wgKi8KKwlfX3UzMglyc19jb250cm9sOwkvKiBSUy0yMzIgb3V0cHV0cyAqLworCV9fdTMyCXJzX3N0YXR1czsJLyogUlMtMjMyIGlucHV0cyAqLworCV9fdTMyCWZsb3dfeG9uOwkvKiB4b24gY2hhciAqLworCV9fdTMyCWZsb3dfeG9mZjsJLyogeG9mZiBjaGFyICovCisJX191MzIJaHdfb3ZlcmZsb3c7CS8qIGh3IG92ZXJmbG93IGNvdW50ZXIgKi8KKwlfX3UzMglzd19vdmVyZmxvdzsJLyogc3cgb3ZlcmZsb3cgY291bnRlciAqLworCV9fdTMyCWNvbW1fZXJyb3I7CS8qIGZyYW1lL3Bhcml0eSBlcnJvciBjb3VudGVyICovCisJX191MzIgaWNoYXI7CisJX191MzIgZmlsbGVyWzddOwogfTsKIAogCkBAIC00MzUsMTggKzQzNCwxOCBAQAogICovCiAKIHN0cnVjdAlCVUZfQ1RSTAl7Ci0JdWNsb25nCWZsYWdfZG1hOwkvKiBidWZmZXJzIGFyZSBpbiBIb3N0IG1lbW9yeSAqLwotCXVjbG9uZwl0eF9idWZhZGRyOwkvKiBhZGRyZXNzIG9mIHRoZSB0eCBidWZmZXIgKi8KLQl1Y2xvbmcJdHhfYnVmc2l6ZTsJLyogdHggYnVmZmVyIHNpemUgKi8KLQl1Y2xvbmcJdHhfdGhyZXNob2xkOwkvKiB0eCBsb3cgd2F0ZXIgbWFyayAqLwotCXVjbG9uZwl0eF9nZXQ7CQkvKiB0YWlsIGluZGV4IHR4IGJ1ZiAqLwotCXVjbG9uZwl0eF9wdXQ7CQkvKiBoZWFkIGluZGV4IHR4IGJ1ZiAqLwotCXVjbG9uZwlyeF9idWZhZGRyOwkvKiBhZGRyZXNzIG9mIHRoZSByeCBidWZmZXIgKi8KLQl1Y2xvbmcJcnhfYnVmc2l6ZTsJLyogcnggYnVmZmVyIHNpemUgKi8KLQl1Y2xvbmcJcnhfdGhyZXNob2xkOwkvKiByeCBoaWdoIHdhdGVyIG1hcmsgKi8KLQl1Y2xvbmcJcnhfZ2V0OwkJLyogdGFpbCBpbmRleCByeCBidWYgKi8KLQl1Y2xvbmcJcnhfcHV0OwkJLyogaGVhZCBpbmRleCByeCBidWYgKi8KLQl1Y2xvbmcJZmlsbGVyWzVdOwkvKiBmaWxsZXIgdG8gYWxpZ24gc3RydWN0dXJlcyAqLworCV9fdTMyCWZsYWdfZG1hOwkvKiBidWZmZXJzIGFyZSBpbiBIb3N0IG1lbW9yeSAqLworCV9fdTMyCXR4X2J1ZmFkZHI7CS8qIGFkZHJlc3Mgb2YgdGhlIHR4IGJ1ZmZlciAqLworCV9fdTMyCXR4X2J1ZnNpemU7CS8qIHR4IGJ1ZmZlciBzaXplICovCisJX191MzIJdHhfdGhyZXNob2xkOwkvKiB0eCBsb3cgd2F0ZXIgbWFyayAqLworCV9fdTMyCXR4X2dldDsJCS8qIHRhaWwgaW5kZXggdHggYnVmICovCisJX191MzIJdHhfcHV0OwkJLyogaGVhZCBpbmRleCB0eCBidWYgKi8KKwlfX3UzMglyeF9idWZhZGRyOwkvKiBhZGRyZXNzIG9mIHRoZSByeCBidWZmZXIgKi8KKwlfX3UzMglyeF9idWZzaXplOwkvKiByeCBidWZmZXIgc2l6ZSAqLworCV9fdTMyCXJ4X3RocmVzaG9sZDsJLyogcnggaGlnaCB3YXRlciBtYXJrICovCisJX191MzIJcnhfZ2V0OwkJLyogdGFpbCBpbmRleCByeCBidWYgKi8KKwlfX3UzMglyeF9wdXQ7CQkvKiBoZWFkIGluZGV4IHJ4IGJ1ZiAqLworCV9fdTMyCWZpbGxlcls1XTsJLyogZmlsbGVyIHRvIGFsaWduIHN0cnVjdHVyZXMgKi8KIH07CiAKIC8qCkBAIC00NTcsMjcgKzQ1NiwyNyBAQAogc3RydWN0IEJPQVJEX0NUUkwgewogCiAJLyogc3RhdGljIGluZm8gcHJvdmlkZWQgYnkgdGhlIG9uLWJvYXJkIENQVSAqLwotCXVjbG9uZwluX2NoYW5uZWw7CS8qIG51bWJlciBvZiBjaGFubmVscyAqLwotCXVjbG9uZwlmd192ZXJzaW9uOwkvKiBmaXJtd2FyZSB2ZXJzaW9uICovCisJX191MzIJbl9jaGFubmVsOwkvKiBudW1iZXIgb2YgY2hhbm5lbHMgKi8KKwlfX3UzMglmd192ZXJzaW9uOwkvKiBmaXJtd2FyZSB2ZXJzaW9uICovCiAKIAkvKiBzdGF0aWMgaW5mbyBwcm92aWRlZCBieSB0aGUgZHJpdmVyICovCi0JdWNsb25nCW9wX3N5c3RlbTsJLyogb3Bfc3lzdGVtIGlkICovCi0JdWNsb25nCWRyX3ZlcnNpb247CS8qIGRyaXZlciB2ZXJzaW9uICovCisJX191MzIJb3Bfc3lzdGVtOwkvKiBvcF9zeXN0ZW0gaWQgKi8KKwlfX3UzMglkcl92ZXJzaW9uOwkvKiBkcml2ZXIgdmVyc2lvbiAqLwogCiAJLyogYm9hcmQgY29udHJvbCBhcmVhICovCi0JdWNsb25nCWluYWN0aXZpdHk7CS8qIGluYWN0aXZpdHkgY29udHJvbCAqLworCV9fdTMyCWluYWN0aXZpdHk7CS8qIGluYWN0aXZpdHkgY29udHJvbCAqLwogCiAJLyogaG9zdCB0byBGVyBjb21tYW5kcyAqLwotCXVjbG9uZwloY21kX2NoYW5uZWw7CS8qIGNoYW5uZWwgbnVtYmVyICovCi0JdWNsb25nCWhjbWRfcGFyYW07CS8qIHBvaW50ZXIgdG8gcGFyYW1ldGVycyAqLworCV9fdTMyCWhjbWRfY2hhbm5lbDsJLyogY2hhbm5lbCBudW1iZXIgKi8KKwlfX3UzMgloY21kX3BhcmFtOwkvKiBwb2ludGVyIHRvIHBhcmFtZXRlcnMgKi8KIAogCS8qIEZXIHRvIEhvc3QgY29tbWFuZHMgKi8KLQl1Y2xvbmcJZndjbWRfY2hhbm5lbDsJLyogY2hhbm5lbCBudW1iZXIgKi8KLQl1Y2xvbmcJZndjbWRfcGFyYW07CS8qIHBvaW50ZXIgdG8gcGFyYW1ldGVycyAqLwotCXVjbG9uZwl6Zl9pbnRfcXVldWVfYWRkcjsgLyogb2Zmc2V0IGZvciBJTlRfUVVFVUUgc3RydWN0dXJlICovCisJX191MzIJZndjbWRfY2hhbm5lbDsJLyogY2hhbm5lbCBudW1iZXIgKi8KKwlfX3UzMglmd2NtZF9wYXJhbTsJLyogcG9pbnRlciB0byBwYXJhbWV0ZXJzICovCisJX191MzIJemZfaW50X3F1ZXVlX2FkZHI7IC8qIG9mZnNldCBmb3IgSU5UX1FVRVVFIHN0cnVjdHVyZSAqLwogCiAJLyogZmlsbGVyIHNvIHRoZSBzdHJ1Y3R1cmVzIGFyZSBhbGlnbmVkICovCi0JdWNsb25nCWZpbGxlcls2XTsKKwlfX3UzMglmaWxsZXJbNl07CiB9OwogCiAvKiBIb3N0IEludGVycnVwdCBRdWV1ZSAqLwpAQCAtNTA2LDExICs1MDUsMTAgQEAKIC8qKioqKioqKioqKioqKioqKiogKioqKioqKioqKioqKioqKioqICoqKioqKioqKioqKioqKioqKiovCiAjZW5kaWYKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogLyogUGVyIGNhcmQgZGF0YSBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCByZXNvdXJjZTsKIHN0cnVjdCBjeWNsYWRlc19jYXJkIHsKLSAgICB1bnNpZ25lZCBsb25nIGJhc2VfcGh5czsKLSAgICB1bnNpZ25lZCBsb25nIGN0bF9waHlzOwogICAgIHZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwogICAgIHZvaWQgX19pb21lbSAqY3RsX2FkZHI7CiAgICAgaW50IGlycTsKQEAgLTUxOSwzMyArNTE3LDE4IEBACiAgICAgaW50IG5wb3J0czsJCS8qIE51bWJlciBvZiBwb3J0cyBpbiB0aGUgY2FyZCAqLwogICAgIGludCBidXNfaW5kZXg7CS8qIGFkZHJlc3Mgc2hpZnQgLSAwIGZvciBJU0EsIDEgZm9yIFBDSSAqLwogICAgIGludAlpbnRyX2VuYWJsZWQ7CS8qIEZXIEludGVycnVwdCBmbGFnIC0gMCBkaXNhYmxlZCwgMSBlbmFibGVkICovCi0gICAgc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0jaWZkZWYgX19LRVJORUxfXwogICAgIHNwaW5sb2NrX3QgY2FyZF9sb2NrOwotI2Vsc2UKLSAgICB1bnNpZ25lZCBsb25nIGZpbGxlcjsKLSNlbmRpZgorICAgIHN0cnVjdCBjeWNsYWRlc19wb3J0ICpwb3J0czsKIH07CiAKLXN0cnVjdCBjeWNsYWRlc19jaGlwIHsKLSAgaW50IGZpbGxlcjsKLX07Ci0KLQotI2lmZGVmIF9fS0VSTkVMX18KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMvbWFjcm9zICAgICAgKgogICogKHJlcXVpcmVkIHRvIHN1cHBvcnQgQWxwaGEgc3lzdGVtcykgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBjeV93cml0ZWIocG9ydCx2YWwpICAgICB7d3JpdGViKCh2YWwpLChwb3J0KSk7IG1iKCk7fQotI2RlZmluZSBjeV93cml0ZXcocG9ydCx2YWwpICAgICB7d3JpdGV3KCh2YWwpLChwb3J0KSk7IG1iKCk7fQotI2RlZmluZSBjeV93cml0ZWwocG9ydCx2YWwpICAgICB7d3JpdGVsKCh2YWwpLChwb3J0KSk7IG1iKCk7fQotCi0jZGVmaW5lIGN5X3JlYWRiKHBvcnQpICByZWFkYihwb3J0KQotI2RlZmluZSBjeV9yZWFkdyhwb3J0KSAgcmVhZHcocG9ydCkKLSNkZWZpbmUgY3lfcmVhZGwocG9ydCkgIHJlYWRsKHBvcnQpCisjZGVmaW5lIGN5X3dyaXRlYihwb3J0LHZhbCkgICAgIGRvIHsgd3JpdGViKCh2YWwpLCAocG9ydCkpOyBtYigpOyB9IHdoaWxlICgwKQorI2RlZmluZSBjeV93cml0ZXcocG9ydCx2YWwpICAgICBkbyB7IHdyaXRldygodmFsKSwgKHBvcnQpKTsgbWIoKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgY3lfd3JpdGVsKHBvcnQsdmFsKSAgICAgZG8geyB3cml0ZWwoKHZhbCksIChwb3J0KSk7IG1iKCk7IH0gd2hpbGUgKDApCiAKIC8qCiAgKiBTdGF0aXN0aWNzIGNvdW50ZXJzCkBAIC01NjcsNyArNTUwLDcgQEAKIAogc3RydWN0IGN5Y2xhZGVzX3BvcnQgewogCWludCAgICAgICAgICAgICAgICAgICAgIG1hZ2ljOwotCWludAkJCWNhcmQ7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQJKmNhcmQ7CiAJaW50CQkJbGluZTsKIAlpbnQJCQlmbGFnczsgCQkvKiBkZWZpbmVkIGluIHR0eS5oICovCiAJaW50ICAgICAgICAgICAgICAgICAgICAgdHlwZTsJCS8qIFVBUlQgdHlwZSAqLwpAQCAtNTg3LDcgKzU3MCw2IEBACiAJaW50CQkJY2xvc2VfZGVsYXk7CiAJdW5zaWduZWQgc2hvcnQJCWNsb3Npbmdfd2FpdDsKIAl1bnNpZ25lZCBsb25nCQlldmVudDsKLQl1bnNpZ25lZCBsb25nCQlsYXN0X2FjdGl2ZTsKIAlpbnQJCQljb3VudDsJLyogIyBvZiBmZCBvbiBkZXZpY2UgKi8KIAlpbnQgICAgICAgICAgICAgICAgICAgICBicmVha29uOwogCWludCAgICAgICAgICAgICAgICAgICAgIGJyZWFrb2ZmOwpAQCAtNTk4LDcgKzU4MCw2IEBACiAJaW50CQkJeG1pdF9jbnQ7CiAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdGhyZXNob2xkOwogICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3RpbWVvdXQ7Ci0JdW5zaWduZWQgbG9uZwkJamlmZmllc1szXTsKIAl1bnNpZ25lZCBsb25nCQlyZmx1c2hfY291bnQ7CiAJc3RydWN0IGN5Y2xhZGVzX21vbml0b3IJbW9uOwogCXN0cnVjdCBjeWNsYWRlc19pZGxlX3N0YXRzCWlkbGVfc3RhdHM7CkBAIC02MDYsNyArNTg3LDcgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdHF1ZXVlOwogCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIG9wZW5fd2FpdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBjbG9zZV93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIHNodXRkb3duX3dhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gICAgICAgc2h1dGRvd25fd2FpdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBkZWx0YV9tc3Jfd2FpdDsKIAlpbnQgdGhyb3R0bGU7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKaW5kZXggNjNmNjRhOS4uYWFiNTNkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCkBAIC0xMzMsNiArMTMzLDcgQEAKIAlpbnQgKCpkX2RlbGV0ZSkoc3RydWN0IGRlbnRyeSAqKTsKIAl2b2lkICgqZF9yZWxlYXNlKShzdHJ1Y3QgZGVudHJ5ICopOwogCXZvaWQgKCpkX2lwdXQpKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOworCWNoYXIgKigqZF9kbmFtZSkoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIGludCk7CiB9OwogCiAvKiB0aGUgZGVudHJ5IHBhcmFtZXRlciBwYXNzZWQgdG8gZF9oYXNoIGFuZCBkX2NvbXBhcmUgaXMgdGhlIHBhcmVudApAQCAtMjkzLDYgKzI5NCwxMSBAQAogLyogdmFsaWRhdGUgImluc2VjdXJlIiBkZW50cnkgcG9pbnRlciAqLwogZXh0ZXJuIGludCBkX3ZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGRlbnRyeSAqKTsKIAorLyoKKyAqIGhlbHBlciBmdW5jdGlvbiBmb3IgZGVudHJ5X29wZXJhdGlvbnMuZF9kbmFtZSgpIG1lbWJlcnMKKyAqLworZXh0ZXJuIGNoYXIgKmR5bmFtaWNfZG5hbWUoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIGludCwgY29uc3QgY2hhciAqLCAuLi4pOworCiBleHRlcm4gY2hhciAqIGRfcGF0aChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCB2ZnNtb3VudCAqLCBjaGFyICosIGludCk7CiAgIAogLyogQWxsb2NhdGlvbiBjb3VudHMuLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggNjU3OTA2OC4uMmUxYTI5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC00MTIsMTIgKzQxMiwxMyBAQAogCXN0cnVjdCBrbGlzdF9ub2RlCWtub2RlX3BhcmVudDsJCS8qIG5vZGUgaW4gc2libGluZyBsaXN0ICovCiAJc3RydWN0IGtsaXN0X25vZGUJa25vZGVfZHJpdmVyOwogCXN0cnVjdCBrbGlzdF9ub2RlCWtub2RlX2J1czsKLQlzdHJ1Y3QgZGV2aWNlIAkqIHBhcmVudDsKKwlzdHJ1Y3QgZGV2aWNlCQkqcGFyZW50OwogCiAJc3RydWN0IGtvYmplY3Qga29iajsKIAljaGFyCWJ1c19pZFtCVVNfSURfU0laRV07CS8qIHBvc2l0aW9uIG9uIHBhcmVudCBidXMgKi8KIAlzdHJ1Y3QgZGV2aWNlX3R5cGUJKnR5cGU7CiAJdW5zaWduZWQJCWlzX3JlZ2lzdGVyZWQ6MTsKKwl1bnNpZ25lZAkJdWV2ZW50X3N1cHByZXNzOjE7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdWV2ZW50X2F0dHI7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldnRfYXR0cjsKIApAQCAtNDU4LDcgKzQ1OSw2IEBACiAJc3RydWN0IGNsYXNzCQkqY2xhc3M7CiAJZGV2X3QJCQlkZXZ0OwkJLyogZGV2X3QsIGNyZWF0ZXMgdGhlIHN5c2ZzICJkZXYiICovCiAJc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqKmdyb3VwczsJLyogb3B0aW9uYWwgZ3JvdXBzICovCi0JaW50CQkJdWV2ZW50X3N1cHByZXNzOwogCiAJdm9pZAkoKnJlbGVhc2UpKHN0cnVjdCBkZXZpY2UgKiBkZXYpOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGlzcGxheS5oIGIvaW5jbHVkZS9saW51eC9kaXNwbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmNzBkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZGlzcGxheS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEphbWVzIFNpbW1vbnMgPGpzaW1tb25zQGluZnJhZGVhZC5vcmc+CisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKi8KKworI2lmbmRlZiBfTElOVVhfRElTUExBWV9ICisjZGVmaW5lIF9MSU5VWF9ESVNQTEFZX0gKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCitzdHJ1Y3QgZGlzcGxheV9kZXZpY2U7CisKKy8qIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgYWxsIHRoZSBwcm9wZXJ0aWVzIG9mIGEgRGlzcGxheS4gKi8KK3N0cnVjdCBkaXNwbGF5X2RyaXZlciB7CisJaW50ICAoKnNldF9jb250cmFzdCkoc3RydWN0IGRpc3BsYXlfZGV2aWNlICosIHVuc2lnbmVkIGludCk7CisJaW50ICAoKmdldF9jb250cmFzdCkoc3RydWN0IGRpc3BsYXlfZGV2aWNlICopOworCXZvaWQgKCpzdXNwZW5kKShzdHJ1Y3QgZGlzcGxheV9kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKwl2b2lkICgqcmVzdW1lKShzdHJ1Y3QgZGlzcGxheV9kZXZpY2UgKik7CisJaW50ICAoKnByb2JlKShzdHJ1Y3QgZGlzcGxheV9kZXZpY2UgKiwgdm9pZCAqKTsKKwlpbnQgICgqcmVtb3ZlKShzdHJ1Y3QgZGlzcGxheV9kZXZpY2UgKik7CisJaW50ICBtYXhfY29udHJhc3Q7Cit9OworCitzdHJ1Y3QgZGlzcGxheV9kZXZpY2UgeworCXN0cnVjdCBtb2R1bGUgKm93bmVyOwkJCS8qIE93bmVyIG1vZHVsZSAqLworCXN0cnVjdCBkaXNwbGF5X2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsJCQkvKiBUaGlzIGlzIHRoZSBwYXJlbnQgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CQkJLyogVGhpcyBpcyB0aGlzIGRpc3BsYXkgZGV2aWNlICovCisJc3RydWN0IG11dGV4IGxvY2s7CisJdm9pZCAqcHJpdl9kYXRhOworCWNoYXIgdHlwZVsxNl07CisJY2hhciAqbmFtZTsKKwlpbnQgaWR4OworfTsKKworZXh0ZXJuIHN0cnVjdCBkaXNwbGF5X2RldmljZSAqZGlzcGxheV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRpc3BsYXlfZHJpdmVyICpkcml2ZXIsCisJCQkJCXN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGV2ZGF0YSk7CitleHRlcm4gdm9pZCBkaXNwbGF5X2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBkaXNwbGF5X2RldmljZSAqZGV2KTsKKworZXh0ZXJuIGludCBwcm9iZV9lZGlkKHN0cnVjdCBkaXNwbGF5X2RldmljZSAqZGV2LCB2b2lkICpkZXZkYXRhKTsKKworI2RlZmluZSB0b19kaXNwbGF5X2RldmljZShvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkaXNwbGF5X2RldmljZSwgY2xhc3NfZGV2KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHMxd20uaCBiL2luY2x1ZGUvbGludXgvZHMxd20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWY2ZTNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kczF3bS5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qIHBsYXRmb3JtIGRhdGEgZm9yIHRoZSBEUzFXTSBkcml2ZXIgKi8KKworc3RydWN0IGRzMXdtX3BsYXRmb3JtX2RhdGEgeworCWludCBidXNfc2hpZnQ7CSAgICAvKiBudW1iZXIgb2Ygc2hpZnRzIG5lZWRlZCB0byBjYWxjdWxhdGUgdGhlCisJCQkgICAgICogb2Zmc2V0IGJldHdlZW4gRFMxV00gcmVnaXN0ZXJzOworCQkJICAgICAqIGUuZy4gb24gaDV4eHggYW5kIGgyMjAwIHRoaXMgaXMgMgorCQkJICAgICAqIChyZWdpc3RlcnMgYWxpZ25lZCB0byA0LWJ5dGUgYm91bmRhcmllcyksCisJCQkgICAgICogd2hpbGUgb24gaHg0NzAwIHRoaXMgaXMgMSAqLworCXZvaWQgKCplbmFibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworCXZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK307CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaAppbmRleCBmOGViZDdjLi4wYjk1NzlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VmaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmgKQEAgLTIxMyw3ICsyMTMsNiBAQAogfSBlZmlfY29uZmlnX3RhYmxlX3Q7CiAKICNkZWZpbmUgRUZJX1NZU1RFTV9UQUJMRV9TSUdOQVRVUkUgKCh1NjQpMHg1NDUzNTk1MzIwNDk0MjQ5VUxMKQotI2RlZmluZSBFRklfU1lTVEVNX1RBQkxFX1JFVklTSU9OICAoKDEgPDwgMTYpIHwgMDApCiAKIHR5cGVkZWYgc3RydWN0IHsKIAllZmlfdGFibGVfaGRyX3QgaGRyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lcnJuby5oIGIvaW5jbHVkZS9saW51eC9lcnJuby5oCmluZGV4IGQ5MGI4MGYuLjQ2Njg1ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXJybm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Vycm5vLmgKQEAgLTUsNyArNSwxMiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0vKiBTaG91bGQgbmV2ZXIgYmUgc2VlbiBieSB1c2VyIHByb2dyYW1zICovCisvKgorICogVGhlc2Ugc2hvdWxkIG5ldmVyIGJlIHNlZW4gYnkgdXNlciBwcm9ncmFtcy4gIFRvIHJldHVybiBvbmUgb2YgRVJFU1RBUlQqCisgKiBjb2Rlcywgc2lnbmFsX3BlbmRpbmcoKSBNVVNUIGJlIHNldC4gIE5vdGUgdGhhdCBwdHJhY2UgY2FuIG9ic2VydmUgdGhlc2UKKyAqIGF0IHN5c2NhbGwgZXhpdCB0cmFjaW5nLCBidXQgdGhleSB3aWxsIG5ldmVyIGJlIGxlZnQgZm9yIHRoZSBkZWJ1Z2dlZCB1c2VyCisgKiBwcm9jZXNzIHRvIHNlZS4KKyAqLwogI2RlZmluZSBFUkVTVEFSVFNZUwk1MTIKICNkZWZpbmUgRVJFU1RBUlROT0lOVFIJNTEzCiAjZGVmaW5lIEVSRVNUQVJUTk9IQU5ECTUxNAkvKiByZXN0YXJ0IGlmIG5vIGhhbmRsZXIuLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldmVudGZkLmggYi9pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDZlY2M2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ldmVudGZkLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqICBpbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfRVZFTlRGRF9ICisjZGVmaW5lIF9MSU5VWF9FVkVOVEZEX0gKKworCisjaWZkZWYgX19LRVJORUxfXworCisjaWZkZWYgQ09ORklHX0VWRU5URkQKKworc3RydWN0IGZpbGUgKmV2ZW50ZmRfZmdldChpbnQgZmQpOworaW50IGV2ZW50ZmRfc2lnbmFsKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbik7CisKKyNlbHNlIC8qIENPTkZJR19FVkVOVEZEICovCisKKyNkZWZpbmUgZXZlbnRmZF9mZ2V0KGZkKSBFUlJfUFRSKC1FTk9TWVMpCisjZGVmaW5lIGV2ZW50ZmRfc2lnbmFsKGYsIG4pIDAKKworI2VuZGlmIC8qIENPTkZJR19FVkVOVEZEICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfRVZFTlRGRF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKaW5kZXggNGViMThhYy4uZWNlNDlhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKQEAgLTgyNCw2ICs4MjQsNyBAQAogZXh0ZXJuIGludCBleHQzX2dldF9pbm9kZV9sb2Moc3RydWN0IGlub2RlICosIHN0cnVjdCBleHQzX2lsb2MgKik7CiBleHRlcm4gdm9pZCBleHQzX3RydW5jYXRlIChzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBleHQzX3NldF9pbm9kZV9mbGFncyhzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBleHQzX2dldF9pbm9kZV9mbGFncyhzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvICopOwogZXh0ZXJuIHZvaWQgZXh0M19zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyogaW9jdGwuYyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKaW5kZXggNDM5NWU1Mi4uNzg5NGRkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCkBAIC01NCw3ICs1NCw3IEBACiAJLyoKIAkgKiBXYXMgaV9uZXh0X2FsbG9jX2dvYWwgaW4gZXh0M19pbm9kZV9pbmZvCiAJICogaXMgdGhlICpwaHlzaWNhbCogY29tcGFuaW9uIHRvIGlfbmV4dF9hbGxvY19ibG9jay4KLQkgKiBpdCB0aGUgdGhlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBvZiB0aGUgYmxvY2sgd2hpY2ggd2FzIG1vc3QtcmVjZW50bAorCSAqIGl0IHRoZSBwaHlzaWNhbCBibG9jayBudW1iZXIgb2YgdGhlIGJsb2NrIHdoaWNoIHdhcyBtb3N0LXJlY2VudGwKIAkgKiBhbGxvY2F0ZWQgdG8gdGhpcyBmaWxlLiAgVGhpcyBnaXZlIHVzIHRoZSBnb2FsICh0YXJnZXQpIGZvciB0aGUgbmV4dAogCSAqIGFsbG9jYXRpb24gd2hlbiB3ZSBkZXRlY3QgbGluZWFybHkgYXNjZW5kaW5nIHJlcXVlc3RzLgogCSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQ0X2ZzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDRfZnMuaAppbmRleCA1NGM1NzZkLi5kZTFmOWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDRfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDRfZnMuaApAQCAtMzIsOSArMzIsOSBAQAogLyoKICAqIERlZmluZSBFWFQ0X1JFU0VSVkFUSU9OIHRvIHJlc2VydmUgZGF0YSBibG9ja3MgZm9yIGV4cGFuZGluZyBmaWxlcwogICovCi0jZGVmaW5lIEVYVDRfREVGQVVMVF9SRVNFUlZFX0JMT0NLUyAgICAgOAorI2RlZmluZSBFWFQ0X0RFRkFVTFRfUkVTRVJWRV9CTE9DS1MJOAogLyptYXggd2luZG93IHNpemU6IDEwMjQoZGlyZWN0IGJsb2NrcykgKyAzKFt0LGRdaW5kaXJlY3QgYmxvY2tzKSAqLwotI2RlZmluZSBFWFQ0X01BWF9SRVNFUlZFX0JMT0NLUyAgICAgICAgIDEwMjcKKyNkZWZpbmUgRVhUNF9NQVhfUkVTRVJWRV9CTE9DS1MJCTEwMjcKICNkZWZpbmUgRVhUNF9SRVNFUlZFX1dJTkRPV19OT1RfQUxMT0NBVEVEIDAKIC8qCiAgKiBBbHdheXMgZW5hYmxlIGhhc2hlZCBkaXJlY3RvcmllcwpAQCAtMjA0LDEyICsyMDQsMTIgQEAKIAogLyogVXNlZCB0byBwYXNzIGdyb3VwIGRlc2NyaXB0b3IgZGF0YSB3aGVuIG9ubGluZSByZXNpemUgaXMgZG9uZSAqLwogc3RydWN0IGV4dDRfbmV3X2dyb3VwX2lucHV0IHsKLQlfX3UzMiBncm91cDsgICAgICAgICAgICAvKiBHcm91cCBudW1iZXIgZm9yIHRoaXMgZGF0YSAqLwotCV9fdTY0IGJsb2NrX2JpdG1hcDsgICAgIC8qIEFic29sdXRlIGJsb2NrIG51bWJlciBvZiBibG9jayBiaXRtYXAgKi8KLQlfX3U2NCBpbm9kZV9iaXRtYXA7ICAgICAvKiBBYnNvbHV0ZSBibG9jayBudW1iZXIgb2YgaW5vZGUgYml0bWFwICovCi0JX191NjQgaW5vZGVfdGFibGU7ICAgICAgLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGlub2RlIHRhYmxlIHN0YXJ0ICovCi0JX191MzIgYmxvY2tzX2NvdW50OyAgICAgLyogVG90YWwgbnVtYmVyIG9mIGJsb2NrcyBpbiB0aGlzIGdyb3VwICovCi0JX191MTYgcmVzZXJ2ZWRfYmxvY2tzOyAgLyogTnVtYmVyIG9mIHJlc2VydmVkIGJsb2NrcyBpbiB0aGlzIGdyb3VwICovCisJX191MzIgZ3JvdXA7CQkvKiBHcm91cCBudW1iZXIgZm9yIHRoaXMgZGF0YSAqLworCV9fdTY0IGJsb2NrX2JpdG1hcDsJLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGJsb2NrIGJpdG1hcCAqLworCV9fdTY0IGlub2RlX2JpdG1hcDsJLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGlub2RlIGJpdG1hcCAqLworCV9fdTY0IGlub2RlX3RhYmxlOwkvKiBBYnNvbHV0ZSBibG9jayBudW1iZXIgb2YgaW5vZGUgdGFibGUgc3RhcnQgKi8KKwlfX3UzMiBibG9ja3NfY291bnQ7CS8qIFRvdGFsIG51bWJlciBvZiBibG9ja3MgaW4gdGhpcyBncm91cCAqLworCV9fdTE2IHJlc2VydmVkX2Jsb2NrczsJLyogTnVtYmVyIG9mIHJlc2VydmVkIGJsb2NrcyBpbiB0aGlzIGdyb3VwICovCiAJX191MTYgdW51c2VkOwogfTsKIApAQCAtMzEwLDcgKzMxMCw3IEBACiAJCQlfX3U4CWxfaV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KIAkJCV9fdTgJbF9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCiAJCQlfX2xlMTYJbF9pX2ZpbGVfYWNsX2hpZ2g7Ci0JCQlfX2xlMTYJbF9pX3VpZF9oaWdoOwkvKiB0aGVzZSAyIGZpZWxkcyAgICAqLworCQkJX19sZTE2CWxfaV91aWRfaGlnaDsJLyogdGhlc2UgMiBmaWVsZHMgKi8KIAkJCV9fbGUxNglsX2lfZ2lkX2hpZ2g7CS8qIHdlcmUgcmVzZXJ2ZWQyWzBdICovCiAJCQlfX3UzMglsX2lfcmVzZXJ2ZWQyOwogCQl9IGxpbnV4MjsKQEAgLTUxMyw3ICs1MTMsMTQgQEAKIC8qMTUwKi8JX19sZTMyCXNfYmxvY2tzX2NvdW50X2hpOwkvKiBCbG9ja3MgY291bnQgKi8KIAlfX2xlMzIJc19yX2Jsb2Nrc19jb3VudF9oaTsJLyogUmVzZXJ2ZWQgYmxvY2tzIGNvdW50ICovCiAJX19sZTMyCXNfZnJlZV9ibG9ja3NfY291bnRfaGk7CS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCi0JX191MzIJc19yZXNlcnZlZFsxNjldOwkvKiBQYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCisJX191MTYJc19taW5fZXh0cmFfaXNpemU7CS8qIEFsbCBpbm9kZXMgaGF2ZSBhdCBsZWFzdCAjIGJ5dGVzICovCisJX191MTYJc193YW50X2V4dHJhX2lzaXplOyAJLyogTmV3IGlub2RlcyBzaG91bGQgcmVzZXJ2ZSAjIGJ5dGVzICovCisJX191MzIJc19mbGFnczsJCS8qIE1pc2NlbGxhbmVvdXMgZmxhZ3MgKi8KKwlfX3UxNiAgIHNfcmFpZF9zdHJpZGU7CQkvKiBSQUlEIHN0cmlkZSAqLworCV9fdTE2ICAgc19tbXBfaW50ZXJ2YWw7ICAgICAgICAgLyogIyBzZWNvbmRzIHRvIHdhaXQgaW4gTU1QIGNoZWNraW5nICovCisJX191NjQgICBzX21tcF9ibG9jazsgICAgICAgICAgICAvKiBCbG9jayBmb3IgbXVsdGktbW91bnQgcHJvdGVjdGlvbiAqLworCV9fdTMyICAgc19yYWlkX3N0cmlwZV93aWR0aDsgICAgLyogYmxvY2tzIG9uIGFsbCBkYXRhIGRpc2tzIChOKnN0cmlkZSkqLworCV9fdTMyICAgc19yZXNlcnZlZFsxNjNdOyAgICAgICAgLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLwogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KQEAgLTc4MCw5ICs3ODcsOSBAQAogICogT2ssIHRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgYWxzbyBpbiA8bGludXgva2VybmVsLmg+IGJ1dCBub25lIG9mIHRoZQogICogZXh0NCBzb3VyY2UgcHJvZ3JhbXMgbmVlZHMgdG8gaW5jbHVkZSBpdCBzbyB0aGV5IGFyZSBkdXBsaWNhdGVkIGhlcmUuCiAgKi8KLSMgZGVmaW5lIE5PUkVUX1RZUEUgICAgLyoqLwotIyBkZWZpbmUgQVRUUklCX05PUkVUICBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCi0jIGRlZmluZSBOT1JFVF9BTkQgICAgIG5vcmV0dXJuLAorIyBkZWZpbmUgTk9SRVRfVFlQRQkvKiovCisjIGRlZmluZSBBVFRSSUJfTk9SRVQJX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKQorIyBkZWZpbmUgTk9SRVRfQU5ECW5vcmV0dXJuLAogCiAvKiBiYWxsb2MuYyAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCBleHQ0X2Jsb2NrX2dyb3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfZXh0ZW50cy5oIGIvaW5jbHVkZS9saW51eC9leHQ0X2ZzX2V4dGVudHMuaAppbmRleCA3ZWIxZDczLi5hY2ZlNTk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfZXh0ZW50cy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0NF9mc19leHRlbnRzLmgKQEAgLTE1MSw4ICsxNTEsOCBAQAogCSgoc3RydWN0IGV4dDRfZXh0ZW50X2lkeCAqKSAoKChjaGFyICopIChfX2hkcl9fKSkgKwlcCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlcikpKQogI2RlZmluZSBFWFRfSEFTX0ZSRUVfSU5ERVgoX19wYXRoX18pIFwKLSAgICAgICAgKGxlMTZfdG9fY3B1KChfX3BhdGhfXyktPnBfaGRyLT5laF9lbnRyaWVzKSBcCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IGxlMTZfdG9fY3B1KChfX3BhdGhfXyktPnBfaGRyLT5laF9tYXgpKQorCShsZTE2X3RvX2NwdSgoX19wYXRoX18pLT5wX2hkci0+ZWhfZW50cmllcykgXAorCQkJCSAgICAgPCBsZTE2X3RvX2NwdSgoX19wYXRoX18pLT5wX2hkci0+ZWhfbWF4KSkKICNkZWZpbmUgRVhUX0xBU1RfRVhURU5UKF9faGRyX18pIFwKIAkoRVhUX0ZJUlNUX0VYVEVOVCgoX19oZHJfXykpICsgbGUxNl90b19jcHUoKF9faGRyX18pLT5laF9lbnRyaWVzKSAtIDEpCiAjZGVmaW5lIEVYVF9MQVNUX0lOREVYKF9faGRyX18pIFwKQEAgLTE5MCw2ICsxOTAsNyBAQAogCiBleHRlcm4gaW50IGV4dDRfZXh0ZW50X3RyZWVfaW5pdChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IGV4dDRfZXh0X2NhbGNfY3JlZGl0c19mb3JfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZXh0NF9leHRfY2hlY2tfb3ZlcmxhcChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dDRfZXh0ZW50ICosIHN0cnVjdCBleHQ0X2V4dF9wYXRoICopOwogZXh0ZXJuIGludCBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKik7CiBleHRlcm4gaW50IGV4dDRfZXh0X3dhbGtfc3BhY2Uoc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGV4dF9wcmVwYXJlX2NhbGxiYWNrLCB2b2lkICopOwogZXh0ZXJuIHN0cnVjdCBleHQ0X2V4dF9wYXRoICogZXh0NF9leHRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICosIGludCwgc3RydWN0IGV4dDRfZXh0X3BhdGggKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9leHQ0X2ZzX2kuaAppbmRleCBiYjQyMzc5Li45ZGU0OTQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0NF9mc19pLmgKQEAgLTQxLDIyICs0MSwyMiBAQAogCiBzdHJ1Y3QgZXh0NF9ibG9ja19hbGxvY19pbmZvIHsKIAkvKiBpbmZvcm1hdGlvbiBhYm91dCByZXNlcnZhdGlvbiB3aW5kb3cgKi8KLQlzdHJ1Y3QgZXh0NF9yZXNlcnZlX3dpbmRvd19ub2RlCXJzdl93aW5kb3dfbm9kZTsKKwlzdHJ1Y3QgZXh0NF9yZXNlcnZlX3dpbmRvd19ub2RlIHJzdl93aW5kb3dfbm9kZTsKIAkvKgogCSAqIHdhcyBpX25leHRfYWxsb2NfYmxvY2sgaW4gZXh0NF9pbm9kZV9pbmZvCiAJICogaXMgdGhlIGxvZ2ljYWwgKGZpbGUtcmVsYXRpdmUpIG51bWJlciBvZiB0aGUKIAkgKiBtb3N0LXJlY2VudGx5LWFsbG9jYXRlZCBibG9jayBpbiB0aGlzIGZpbGUuCiAJICogV2UgdXNlIHRoaXMgZm9yIGRldGVjdGluZyBsaW5lYXJseSBhc2NlbmRpbmcgYWxsb2NhdGlvbiByZXF1ZXN0cy4KIAkgKi8KLQlfX3UzMiAgICAgICAgICAgICAgICAgICBsYXN0X2FsbG9jX2xvZ2ljYWxfYmxvY2s7CisJX191MzIgbGFzdF9hbGxvY19sb2dpY2FsX2Jsb2NrOwogCS8qCiAJICogV2FzIGlfbmV4dF9hbGxvY19nb2FsIGluIGV4dDRfaW5vZGVfaW5mbwogCSAqIGlzIHRoZSAqcGh5c2ljYWwqIGNvbXBhbmlvbiB0byBpX25leHRfYWxsb2NfYmxvY2suCi0JICogaXQgdGhlIHRoZSBwaHlzaWNhbCBibG9jayBudW1iZXIgb2YgdGhlIGJsb2NrIHdoaWNoIHdhcyBtb3N0LXJlY2VudGwKKwkgKiBpdCB0aGUgcGh5c2ljYWwgYmxvY2sgbnVtYmVyIG9mIHRoZSBibG9jayB3aGljaCB3YXMgbW9zdC1yZWNlbnRsCiAJICogYWxsb2NhdGVkIHRvIHRoaXMgZmlsZS4gIFRoaXMgZ2l2ZSB1cyB0aGUgZ29hbCAodGFyZ2V0KSBmb3IgdGhlIG5leHQKIAkgKiBhbGxvY2F0aW9uIHdoZW4gd2UgZGV0ZWN0IGxpbmVhcmx5IGFzY2VuZGluZyByZXF1ZXN0cy4KIAkgKi8KLQlleHQ0X2ZzYmxrX3QJCWxhc3RfYWxsb2NfcGh5c2ljYWxfYmxvY2s7CisJZXh0NF9mc2Jsa190IGxhc3RfYWxsb2NfcGh5c2ljYWxfYmxvY2s7CiB9OwogCiAjZGVmaW5lIHJzdl9zdGFydCByc3Zfd2luZG93Ll9yc3Zfc3RhcnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCBiZTkxM2VjLi42NjIyNjgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC00LDYgKzQsOCBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCitzdHJ1Y3QgZGVudHJ5OworCiAvKiBEZWZpbml0aW9ucyBvZiBmcmFtZSBidWZmZXJzCQkJCQkJKi8KIAogI2RlZmluZSBGQl9NQUpPUgkJMjkKQEAgLTUyNSwxMiArNTI3LDIwIEBACiAjZGVmaW5lIEZCX0VWRU5UX01PREVfQ0hBTkdFX0FMTAkweDBCCiAvKglBIHNvZnR3YXJlIGRpc3BsYXkgYmxhbmsgY2hhbmdlIG9jY3VyZWQgKi8KICNkZWZpbmUgRkJfRVZFTlRfQ09OQkxBTksgICAgICAgICAgICAgICAweDBDCisvKiAgICAgIEdldCBkcmF3aW5nIHJlcXVpcmVtZW50cyAgICAgICAgKi8KKyNkZWZpbmUgRkJfRVZFTlRfR0VUX1JFUSAgICAgICAgICAgICAgICAweDBECiAKIHN0cnVjdCBmYl9ldmVudCB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJdm9pZCAqZGF0YTsKIH07CiAKK3N0cnVjdCBmYl9ibGl0X2NhcHMgeworCXUzMiB4OworCXUzMiB5OworCXUzMiBsZW47CisJdTMyIGZsYWdzOworfTsKIAogZXh0ZXJuIGludCBmYl9yZWdpc3Rlcl9jbGllbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiBleHRlcm4gaW50IGZiX3VucmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwpAQCAtNTU2LDExICs1NjYsMjUgQEAKIAl1MzIgc2Nhbl9hbGlnbjsJCS8qIGFsaWdubWVudCBwZXIgc2NhbmxpbmUJCSovCiAJdTMyIGFjY2Vzc19hbGlnbjsJLyogYWxpZ25tZW50IHBlciByZWFkL3dyaXRlIChiaXRzKQkqLwogCXUzMiBmbGFnczsJCS8qIHNlZSBGQl9QSVhNQVBfKgkJCSovCisJdTMyIGJsaXRfeDsgICAgICAgICAgICAgLyogc3VwcG9ydGVkIGJpdCBibG9jayBkaW1lbnNpb25zICgxLTMyKSovCisJdTMyIGJsaXRfeTsgICAgICAgICAgICAgLyogRm9ybWF0OiBibGl0X3ggPSAxIDw8ICh3aWR0aCAtIDEpICAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICBibGl0X3kgPSAxIDw8IChoZWlnaHQgLSAxKSAgICovCisJICAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgMCwgd2lsbCBiZSBzZXQgdG8gMHhmZmZmZmZmZiAoYWxsKSovCiAJLyogYWNjZXNzIG1ldGhvZHMgKi8KIAl2b2lkICgqd3JpdGVpbykoc3RydWN0IGZiX2luZm8gKmluZm8sIHZvaWQgX19pb21lbSAqZHN0LCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzaXplKTsKIAl2b2lkICgqcmVhZGlvKSAoc3RydWN0IGZiX2luZm8gKmluZm8sIHZvaWQgKmRzdCwgdm9pZCBfX2lvbWVtICpzcmMsIHVuc2lnbmVkIGludCBzaXplKTsKIH07CiAKKyNpZmRlZiBDT05GSUdfRkJfREVGRVJSRURfSU8KK3N0cnVjdCBmYl9kZWZlcnJlZF9pbyB7CisJLyogZGVsYXkgYmV0d2VlbiBta3dyaXRlIGFuZCBkZWZlcnJlZCBoYW5kbGVyICovCisJdW5zaWduZWQgbG9uZyBkZWxheTsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogbXV0ZXggdGhhdCBwcm90ZWN0cyB0aGUgcGFnZSBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBwYWdlbGlzdDsgLyogbGlzdCBvZiB0b3VjaGVkIHBhZ2VzICovCisJLyogY2FsbGJhY2sgKi8KKwl2b2lkICgqZGVmZXJyZWRfaW8pKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCk7Cit9OworI2VuZGlmCiAKIC8qCiAgKiBGcmFtZSBidWZmZXIgb3BlcmF0aW9ucwpAQCAtNTc5LDggKzYwMywxMCBAQAogCS8qIEZvciBmcmFtZWJ1ZmZlcnMgd2l0aCBzdHJhbmdlIG5vbiBsaW5lYXIgbGF5b3V0cyBvciB0aGF0IGRvIG5vdAogCSAqIHdvcmsgd2l0aCBub3JtYWwgbWVtb3J5IG1hcHBlZCBhY2Nlc3MKIAkgKi8KLQlzc2l6ZV90ICgqZmJfcmVhZCkoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKLQlzc2l6ZV90ICgqZmJfd3JpdGUpKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CisJc3NpemVfdCAoKmZiX3JlYWQpKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworCXNzaXplX3QgKCpmYl93cml0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwogCiAJLyogY2hlY2tzIHZhciBhbmQgZXZlbnR1YWxseSB0d2Vha3MgaXQgdG8gc29tZXRoaW5nIHN1cHBvcnRlZCwKIAkgKiBETyBOT1QgTU9ESUZZIFBBUiAqLwpAQCAtNjM0LDEwICs2NjAsMTMgQEAKIAogCS8qIHJlc3RvcmUgc2F2ZWQgc3RhdGUgKi8KIAl2b2lkICgqZmJfcmVzdG9yZV9zdGF0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8pOworCisJLyogZ2V0IGNhcGFiaWxpdHkgZ2l2ZW4gdmFyICovCisJdm9pZCAoKmZiX2dldF9jYXBzKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2JsaXRfY2FwcyAqY2FwcywKKwkJCSAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcik7CiB9OwogCiAjaWZkZWYgQ09ORklHX0ZCX1RJTEVCTElUVElORwotCiAjZGVmaW5lIEZCX1RJTEVfQ1VSU09SX05PTkUgICAgICAgIDAKICNkZWZpbmUgRkJfVElMRV9DVVJTT1JfVU5ERVJMSU5FICAgMQogI2RlZmluZSBGQl9USUxFX0NVUlNPUl9MT1dFUl9USElSRCAyCkBAIC03MDksNiArNzM4LDggQEAKIAkvKiBjdXJzb3IgKi8KIAl2b2lkICgqZmJfdGlsZWN1cnNvcikoc3RydWN0IGZiX2luZm8gKmluZm8sCiAJCQkgICAgICBzdHJ1Y3QgZmJfdGlsZWN1cnNvciAqY3Vyc29yKTsKKwkvKiBnZXQgbWF4aW11bSBsZW5ndGggb2YgdGhlIHRpbGUgbWFwICovCisJaW50ICgqZmJfZ2V0X3RpbGVtYXgpKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIH07CiAjZW5kaWYgLyogQ09ORklHX0ZCX1RJTEVCTElUVElORyAqLwogCkBAIC03NzgsNiArODA5LDEwIEBACiAJc3RydWN0IG11dGV4IGJsX2N1cnZlX211dGV4OwkKIAl1OCBibF9jdXJ2ZVtGQl9CQUNLTElHSFRfTEVWRUxTXTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19GQl9ERUZFUlJFRF9JTworCXN0cnVjdCBkZWxheWVkX3dvcmsgZGVmZXJyZWRfd29yazsKKwlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gKmZiZGVmaW87CisjZW5kaWYKIAogCXN0cnVjdCBmYl9vcHMgKmZib3BzOwogCXN0cnVjdCBkZXZpY2UgKmRldmljZTsJCS8qIFRoaXMgaXMgdGhlIHBhcmVudCAqLwpAQCAtODMzLDcgKzg2OCw3IEBACiAjZGVmaW5lIGZiX3dyaXRlcSBzYnVzX3dyaXRlcQogI2RlZmluZSBmYl9tZW1zZXQgc2J1c19tZW1zZXRfaW8KIAotI2VsaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2hwcGFfXykgfHwgKGRlZmluZWQoX19zaF9fKSAmJiAhZGVmaW5lZChfX1NINV9fKSkgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykKKyNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19ocHBhX18pIHx8IChkZWZpbmVkKF9fc2hfXykgJiYgIWRlZmluZWQoX19TSDVfXykpIHx8IGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19hdnIzMl9fKQogCiAjZGVmaW5lIGZiX3JlYWRiIF9fcmF3X3JlYWRiCiAjZGVmaW5lIGZiX3JlYWR3IF9fcmF3X3JlYWR3CkBAIC04NzksNiArOTE0LDE2IEBACiBleHRlcm4gdm9pZCBjZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCk7IAogZXh0ZXJuIHZvaWQgY2ZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpOyAKIGV4dGVybiB2b2lkIGNmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpOworLyoKKyAqIERyYXdpbmcgb3BlcmF0aW9ucyB3aGVyZSBmcmFtZWJ1ZmZlciBpcyBpbiBzeXN0ZW0gUkFNCisgKi8KK2V4dGVybiB2b2lkIHN5c19maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KTsKK2V4dGVybiB2b2lkIHN5c19jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKTsKK2V4dGVybiB2b2lkIHN5c19pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpOworZXh0ZXJuIHNzaXplX3QgZmJfc3lzX3JlYWQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNoYXIgX191c2VyICpidWYsCisJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CitleHRlcm4gc3NpemVfdCBmYl9zeXNfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwogCiAvKiBkcml2ZXJzL3ZpZGVvL2ZibWVtLmMgKi8KIGV4dGVybiBpbnQgcmVnaXN0ZXJfZnJhbWVidWZmZXIoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwpAQCAtODk3LDYgKzk0Miw3IEBACiAKIGV4dGVybiBzdHJ1Y3QgZmJfaW5mbyAqcmVnaXN0ZXJlZF9mYltGQl9NQVhdOwogZXh0ZXJuIGludCBudW1fcmVnaXN0ZXJlZF9mYjsKK2V4dGVybiBzdHJ1Y3QgY2xhc3MgKmZiX2NsYXNzOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19mYl9wYWRfYWxpZ25lZF9idWZmZXIodTggKmRzdCwgdTMyIGRfcGl0Y2gsCiAJCQkJCSAgIHU4ICpzcmMsIHUzMiBzX3BpdGNoLCB1MzIgaGVpZ2h0KQpAQCAtOTEzLDYgKzk1OSwxMiBAQAogCX0KIH0KIAorLyogZHJpdmVycy92aWRlby9mYl9kZWZpby5jICovCitleHRlcm4gdm9pZCBmYl9kZWZlcnJlZF9pb19pbml0KHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK2V4dGVybiB2b2lkIGZiX2RlZmVycmVkX2lvX2NsZWFudXAoc3RydWN0IGZiX2luZm8gKmluZm8pOworZXh0ZXJuIGludCBmYl9kZWZlcnJlZF9pb19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCWludCBkYXRhc3luYyk7CisKIC8qIGRyaXZlcnMvdmlkZW8vZmJzeXNmcy5jICovCiBleHRlcm4gc3RydWN0IGZiX2luZm8gKmZyYW1lYnVmZmVyX2FsbG9jKHNpemVfdCBzaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZnJhbWVidWZmZXJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaCBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYmUxZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENoYXIgZGV2aWNlIGludGVyZmFjZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiAgS3Jpc3RpYW4gSG9lZ3NiZXJnIDxrcmhAYml0cGxhbmV0Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0ZJUkVXSVJFX0NERVZfSAorI2RlZmluZSBfTElOVVhfRklSRVdJUkVfQ0RFVl9ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUtY29uc3RhbnRzLmg+CisKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9CVVNfUkVTRVQJCTB4MDAKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9SRVNQT05TRQkJMHgwMQorI2RlZmluZSBGV19DREVWX0VWRU5UX1JFUVVFU1QJCTB4MDIKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9JU09fSU5URVJSVVBUCTB4MDMKKworLyogVGhlICdjbG9zdXJlJyBmaWVsZHMgYXJlIGZvciB1c2VyIHNwYWNlIHRvIHVzZS4gIERhdGEgcGFzc2VkIGluIHRoZQorICogJ2Nsb3N1cmUnIGZpZWxkIGZvciBhIHJlcXVlc3Qgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgY29ycmVzcG9uZGluZworICogZXZlbnQuICBJdCdzIGEgNjQtYml0IHR5cGUgc28gdGhhdCBpdCdzIGEgZml4ZWQgc2l6ZSB0eXBlIGJpZworICogZW5vdWdoIHRvIGhvbGQgYSBwb2ludGVyIG9uIGFsbCBwbGF0Zm9ybXMuICovCisKK3N0cnVjdCBmd19jZGV2X2V2ZW50X2NvbW1vbiB7CisJX191NjQgY2xvc3VyZTsKKwlfX3UzMiB0eXBlOworfTsKKworc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0IHsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIHR5cGU7CisJX191MzIgbm9kZV9pZDsKKwlfX3UzMiBsb2NhbF9ub2RlX2lkOworCV9fdTMyIGJtX25vZGVfaWQ7CisJX191MzIgaXJtX25vZGVfaWQ7CisJX191MzIgcm9vdF9ub2RlX2lkOworCV9fdTMyIGdlbmVyYXRpb247Cit9OworCitzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXNwb25zZSB7CisJX191NjQgY2xvc3VyZTsKKwlfX3UzMiB0eXBlOworCV9fdTMyIHJjb2RlOworCV9fdTMyIGxlbmd0aDsKKwlfX3UzMiBkYXRhWzBdOworfTsKKworc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdCB7CisJX191NjQgY2xvc3VyZTsKKwlfX3UzMiB0eXBlOworCV9fdTMyIHRjb2RlOworCV9fdTY0IG9mZnNldDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgbGVuZ3RoOworCV9fdTMyIGRhdGFbMF07Cit9OworCitzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0IHsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIHR5cGU7CisJX191MzIgY3ljbGU7CisJX191MzIgaGVhZGVyX2xlbmd0aDsJLyogTGVuZ3RoIGluIGJ5dGVzIG9mIGZvbGxvd2luZyBoZWFkZXJzLiAqLworCV9fdTMyIGhlYWRlclswXTsKK307CisKK3VuaW9uIGZ3X2NkZXZfZXZlbnQgeworCXN0cnVjdCBmd19jZGV2X2V2ZW50X2NvbW1vbiBjb21tb247CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0IGJ1c19yZXNldDsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXNwb25zZSByZXNwb25zZTsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXF1ZXN0IHJlcXVlc3Q7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCBpc29faW50ZXJydXB0OworfTsKKworI2RlZmluZSBGV19DREVWX0lPQ19HRVRfSU5GTwkJX0lPV1IoJyMnLCAweDAwLCBzdHJ1Y3QgZndfY2Rldl9nZXRfaW5mbykKKyNkZWZpbmUgRldfQ0RFVl9JT0NfU0VORF9SRVFVRVNUCV9JT1coJyMnLCAweDAxLCBzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QpCisjZGVmaW5lIEZXX0NERVZfSU9DX0FMTE9DQVRFCQlfSU9XUignIycsIDB4MDIsIHN0cnVjdCBmd19jZGV2X2FsbG9jYXRlKQorI2RlZmluZSBGV19DREVWX0lPQ19ERUFMTE9DQVRFCQlfSU9XKCcjJywgMHgwMywgc3RydWN0IGZ3X2NkZXZfZGVhbGxvY2F0ZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfU0VORF9SRVNQT05TRQlfSU9XKCcjJywgMHgwNCwgc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXNwb25zZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfSU5JVElBVEVfQlVTX1JFU0VUCV9JT1coJyMnLCAweDA1LCBzdHJ1Y3QgZndfY2Rldl9pbml0aWF0ZV9idXNfcmVzZXQpCisjZGVmaW5lIEZXX0NERVZfSU9DX0FERF9ERVNDUklQVE9SCV9JT1dSKCcjJywgMHgwNiwgc3RydWN0IGZ3X2NkZXZfYWRkX2Rlc2NyaXB0b3IpCisjZGVmaW5lIEZXX0NERVZfSU9DX1JFTU9WRV9ERVNDUklQVE9SCV9JT1coJyMnLCAweDA3LCBzdHJ1Y3QgZndfY2Rldl9yZW1vdmVfZGVzY3JpcHRvcikKKworI2RlZmluZSBGV19DREVWX0lPQ19DUkVBVEVfSVNPX0NPTlRFWFQJX0lPV1IoJyMnLCAweDA4LCBzdHJ1Y3QgZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQpCisjZGVmaW5lIEZXX0NERVZfSU9DX1FVRVVFX0lTTwkJX0lPV1IoJyMnLCAweDA5LCBzdHJ1Y3QgZndfY2Rldl9xdWV1ZV9pc28pCisjZGVmaW5lIEZXX0NERVZfSU9DX1NUQVJUX0lTTwkJX0lPVygnIycsIDB4MGEsIHN0cnVjdCBmd19jZGV2X3N0YXJ0X2lzbykKKyNkZWZpbmUgRldfQ0RFVl9JT0NfU1RPUF9JU08JCV9JT1coJyMnLCAweDBiLCBzdHJ1Y3QgZndfY2Rldl9zdG9wX2lzbykKKworLyogRldfQ0RFVl9WRVJTSU9OIEhpc3RvcnkKKyAqCisgKiAxCUZlYiAxOCwgMjAwNzogIEluaXRpYWwgdmVyc2lvbi4KKyAqLworI2RlZmluZSBGV19DREVWX1ZFUlNJT04JCTEKKworc3RydWN0IGZ3X2NkZXZfZ2V0X2luZm8geworCS8qIFRoZSB2ZXJzaW9uIGZpZWxkIGlzIGp1c3QgYSBydW5uaW5nIHNlcmlhbCBudW1iZXIuICBXZQorCSAqIG5ldmVyIGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAgVXNlcnNwYWNlIHBhc3NlcyBpbgorCSAqIHRoZSB2ZXJzaW9uIGl0IGV4cGVjdHMgYW5kIHRoZSBrZXJuZWwgcGFzc2VzIGJhY2sgdGhlCisJICogaGlnaGVzdCB2ZXJzaW9uIGl0IGNhbiBwcm92aWRlLiAgRXZlbiBpZiB0aGUgc3RydWN0cyBpbgorCSAqIHRoaXMgaW50ZXJmYWNlIGFyZSBleHRlbmRlZCBpbiBhIGxhdGVyIHZlcnNpb24sIHRoZSBrZXJuZWwKKwkgKiB3aWxsIG5vdCBjb3B5IGJhY2sgbW9yZSBkYXRhIHRoYW4gd2hhdCB3YXMgcHJlc2VudCBpbiB0aGUKKwkgKiBpbnRlcmZhY2UgdmVyc2lvbiB1c2Vyc3BhY2UgZXhwZWN0cy4gKi8KKwlfX3UzMiB2ZXJzaW9uOworCisJLyogSWYgbm9uLXplcm8sIGF0IG1vc3Qgcm9tX2xlbmd0aCBieXRlcyBvZiBjb25maWcgcm9tIHdpbGwgYmUKKwkgKiBjb3BpZWQgaW50byB0aGF0IHVzZXIgc3BhY2UgYWRkcmVzcy4gIEluIGVpdGhlciBjYXNlLAorCSAqIHJvbV9sZW5ndGggaXMgdXBkYXRlZCB3aXRoIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBjb25maWcKKwkgKiByb20uICovCisJX191MzIgcm9tX2xlbmd0aDsKKwlfX3U2NCByb207CisKKwkvKiBJZiBub24temVybywgYSBmd19jZGV2X2V2ZW50X2J1c19yZXNldCBzdHJ1Y3Qgd2lsbCBiZQorCSAqIGNvcGllZCBoZXJlIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1cy4gIFRoaXMgZG9lcworCSAqIG5vdCBjYXVzZSBhIGJ1cyByZXNldCB0byBoYXBwZW4uICBUaGUgdmFsdWUgb2YgY2xvc3VyZSBpbgorCSAqIHRoaXMgYW5kIHN1Yi1zZXF1ZW50IGJ1cyByZXNldCBldmVudHMgaXMgc2V0IHRvCisJICogYnVzX3Jlc2V0X2Nsb3N1cmUuICovCisJX191NjQgYnVzX3Jlc2V0OworCV9fdTY0IGJ1c19yZXNldF9jbG9zdXJlOworCisJLyogVGhlIGluZGV4IG9mIHRoZSBjYXJkIHRoaXMgZGV2aWNlcyBiZWxvbmdzIHRvLiAqLworCV9fdTMyIGNhcmQ7Cit9OworCitzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QgeworCV9fdTMyIHRjb2RlOworCV9fdTMyIGxlbmd0aDsKKwlfX3U2NCBvZmZzZXQ7CisJX191NjQgY2xvc3VyZTsKKwlfX3U2NCBkYXRhOworCV9fdTMyIGdlbmVyYXRpb247Cit9OworCitzdHJ1Y3QgZndfY2Rldl9zZW5kX3Jlc3BvbnNlIHsKKwlfX3UzMiByY29kZTsKKwlfX3UzMiBsZW5ndGg7CisJX191NjQgZGF0YTsKKwlfX3UzMiBoYW5kbGU7Cit9OworCitzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZSB7CisJX191NjQgb2Zmc2V0OworCV9fdTY0IGNsb3N1cmU7CisJX191MzIgbGVuZ3RoOworCV9fdTMyIGhhbmRsZTsKK307CisKK3N0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUgeworCV9fdTMyIGhhbmRsZTsKK307CisKKyNkZWZpbmUgRldfQ0RFVl9MT05HX1JFU0VUCTAKKyNkZWZpbmUgRldfQ0RFVl9TSE9SVF9SRVNFVAkxCisKK3N0cnVjdCBmd19jZGV2X2luaXRpYXRlX2J1c19yZXNldCB7CisJX191MzIgdHlwZTsKK307CisKK3N0cnVjdCBmd19jZGV2X2FkZF9kZXNjcmlwdG9yIHsKKwlfX3UzMiBpbW1lZGlhdGU7CisJX191MzIga2V5OworCV9fdTY0IGRhdGE7CisJX191MzIgbGVuZ3RoOworCV9fdTMyIGhhbmRsZTsKK307CisKK3N0cnVjdCBmd19jZGV2X3JlbW92ZV9kZXNjcmlwdG9yIHsKKwlfX3UzMiBoYW5kbGU7Cit9OworCisjZGVmaW5lIEZXX0NERVZfSVNPX0NPTlRFWFRfVFJBTlNNSVQJMAorI2RlZmluZSBGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkUJMQorCisjZGVmaW5lIEZXX0NERVZfSVNPX0NPTlRFWFRfTUFUQ0hfVEFHMAkJIDEKKyNkZWZpbmUgRldfQ0RFVl9JU09fQ09OVEVYVF9NQVRDSF9UQUcxCQkgMgorI2RlZmluZSBGV19DREVWX0lTT19DT05URVhUX01BVENIX1RBRzIJCSA0CisjZGVmaW5lIEZXX0NERVZfSVNPX0NPTlRFWFRfTUFUQ0hfVEFHMwkJIDgKKyNkZWZpbmUgRldfQ0RFVl9JU09fQ09OVEVYVF9NQVRDSF9BTExfVEFHUwkxNQorCitzdHJ1Y3QgZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQgeworCV9fdTMyIHR5cGU7CisJX191MzIgaGVhZGVyX3NpemU7CisJX191MzIgY2hhbm5lbDsKKwlfX3UzMiBzcGVlZDsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIGhhbmRsZTsKK307CisKKyNkZWZpbmUgRldfQ0RFVl9JU09fUEFZTE9BRF9MRU5HVEgodikJKHYpCisjZGVmaW5lIEZXX0NERVZfSVNPX0lOVEVSUlVQVAkJKDEgPDwgMTYpCisjZGVmaW5lIEZXX0NERVZfSVNPX1NLSVAJCSgxIDw8IDE3KQorI2RlZmluZSBGV19DREVWX0lTT19UQUcodikJCSgodikgPDwgMTgpCisjZGVmaW5lIEZXX0NERVZfSVNPX1NZKHYpCQkoKHYpIDw8IDIwKQorI2RlZmluZSBGV19DREVWX0lTT19IRUFERVJfTEVOR1RIKHYpCSgodikgPDwgMjQpCisKK3N0cnVjdCBmd19jZGV2X2lzb19wYWNrZXQgeworCV9fdTMyIGNvbnRyb2w7CisJX191MzIgaGVhZGVyWzBdOworfTsKKworc3RydWN0IGZ3X2NkZXZfcXVldWVfaXNvIHsKKwlfX3U2NCBwYWNrZXRzOworCV9fdTY0IGRhdGE7CisJX191MzIgc2l6ZTsKKwlfX3UzMiBoYW5kbGU7Cit9OworCitzdHJ1Y3QgZndfY2Rldl9zdGFydF9pc28geworCV9fczMyIGN5Y2xlOworCV9fdTMyIHN5bmM7CisJX191MzIgdGFnczsKKwlfX3UzMiBoYW5kbGU7Cit9OworCitzdHJ1Y3QgZndfY2Rldl9zdG9wX2lzbyB7CisJX191MzIgaGFuZGxlOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9GSVJFV0lSRV9DREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY29uc3RhbnRzLmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNvbnN0YW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTY3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNvbnN0YW50cy5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZm5kZWYgX0xJTlVYX0ZJUkVXSVJFX0NPTlNUQU5UU19ICisjZGVmaW5lIF9MSU5VWF9GSVJFV0lSRV9DT05TVEFOVFNfSAorCisjZGVmaW5lIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVAkweDAKKyNkZWZpbmUgVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVAkweDEKKyNkZWZpbmUgVENPREVfV1JJVEVfUkVTUE9OU0UJCTB4MgorI2RlZmluZSBUQ09ERV9SRUFEX1FVQURMRVRfUkVRVUVTVAkweDQKKyNkZWZpbmUgVENPREVfUkVBRF9CTE9DS19SRVFVRVNUCTB4NQorI2RlZmluZSBUQ09ERV9SRUFEX1FVQURMRVRfUkVTUE9OU0UJMHg2CisjZGVmaW5lIFRDT0RFX1JFQURfQkxPQ0tfUkVTUE9OU0UJMHg3CisjZGVmaW5lIFRDT0RFX0NZQ0xFX1NUQVJUCQkweDgKKyNkZWZpbmUgVENPREVfTE9DS19SRVFVRVNUCQkweDkKKyNkZWZpbmUgVENPREVfU1RSRUFNX0RBVEEJCTB4YQorI2RlZmluZSBUQ09ERV9MT0NLX1JFU1BPTlNFCQkweGIKKworI2RlZmluZSBFWFRDT0RFX01BU0tfU1dBUAkJMHgxCisjZGVmaW5lIEVYVENPREVfQ09NUEFSRV9TV0FQCQkweDIKKyNkZWZpbmUgRVhUQ09ERV9GRVRDSF9BREQJCTB4MworI2RlZmluZSBFWFRDT0RFX0xJVFRMRV9BREQJCTB4NAorI2RlZmluZSBFWFRDT0RFX0JPVU5ERURfQURECQkweDUKKyNkZWZpbmUgRVhUQ09ERV9XUkFQX0FERAkJMHg2CisjZGVmaW5lIEVYVENPREVfVkVORE9SX0RFUEVOREVOVAkweDcKKworLyogSnVqdSBzcGVjaWZpYyB0Y29kZXMgKi8KKyNkZWZpbmUgVENPREVfTE9DS19NQVNLX1NXQVAJCSgweDEwIHwgRVhUQ09ERV9NQVNLX1NXQVApCisjZGVmaW5lIFRDT0RFX0xPQ0tfQ09NUEFSRV9TV0FQCQkoMHgxMCB8IEVYVENPREVfQ09NUEFSRV9TV0FQKQorI2RlZmluZSBUQ09ERV9MT0NLX0ZFVENIX0FERAkJKDB4MTAgfCBFWFRDT0RFX0ZFVENIX0FERCkKKyNkZWZpbmUgVENPREVfTE9DS19MSVRUTEVfQURECQkoMHgxMCB8IEVYVENPREVfTElUVExFX0FERCkKKyNkZWZpbmUgVENPREVfTE9DS19CT1VOREVEX0FERAkJKDB4MTAgfCBFWFRDT0RFX0JPVU5ERURfQUREKQorI2RlZmluZSBUQ09ERV9MT0NLX1dSQVBfQURECQkoMHgxMCB8IEVYVENPREVfV1JBUF9BREQpCisjZGVmaW5lIFRDT0RFX0xPQ0tfVkVORE9SX0RFUEVOREVOVAkoMHgxMCB8IEVYVENPREVfVkVORE9SX0RFUEVOREVOVCkKKworI2RlZmluZSBSQ09ERV9DT01QTEVURQkJCTB4MAorI2RlZmluZSBSQ09ERV9DT05GTElDVF9FUlJPUgkJMHg0CisjZGVmaW5lIFJDT0RFX0RBVEFfRVJST1IJCTB4NQorI2RlZmluZSBSQ09ERV9UWVBFX0VSUk9SCQkweDYKKyNkZWZpbmUgUkNPREVfQUREUkVTU19FUlJPUgkJMHg3CisKKy8qIEp1anUgc3BlY2lmaWMgcmNvZGVzICovCisjZGVmaW5lIFJDT0RFX1NFTkRfRVJST1IJCTB4MTAKKyNkZWZpbmUgUkNPREVfQ0FOQ0VMTEVECQkJMHgxMQorI2RlZmluZSBSQ09ERV9CVVNZCQkJMHgxMgorI2RlZmluZSBSQ09ERV9HRU5FUkFUSU9OCQkweDEzCisjZGVmaW5lIFJDT0RFX05PX0FDSwkJCTB4MTQKKworI2RlZmluZSBTQ09ERV8xMDAJCQkweDAKKyNkZWZpbmUgU0NPREVfMjAwCQkJMHgxCisjZGVmaW5lIFNDT0RFXzQwMAkJCTB4MgorI2RlZmluZSBTQ09ERV84MDAJCQkweDMKKyNkZWZpbmUgU0NPREVfMTYwMAkJCTB4NAorI2RlZmluZSBTQ09ERV8zMjAwCQkJMHg1CisjZGVmaW5lIFNDT0RFX0JFVEEJCQkweDMKKworI2RlZmluZSBBQ0tfQ09NUExFVEUJCQkweDEKKyNkZWZpbmUgQUNLX1BFTkRJTkcJCQkweDIKKyNkZWZpbmUgQUNLX0JVU1lfWAkJCTB4NAorI2RlZmluZSBBQ0tfQlVTWV9BCQkJMHg1CisjZGVmaW5lIEFDS19CVVNZX0IJCQkweDYKKyNkZWZpbmUgQUNLX0RBVEFfRVJST1IJCQkweGQKKyNkZWZpbmUgQUNLX1RZUEVfRVJST1IJCQkweGUKKworI2RlZmluZSBSRVRSWV8xCQkJCTB4MDAKKyNkZWZpbmUgUkVUUllfWAkJCQkweDAxCisjZGVmaW5lIFJFVFJZX0EJCQkJMHgwMgorI2RlZmluZSBSRVRSWV9CCQkJCTB4MDMKKworI2VuZGlmIC8qIF9MSU5VWF9GSVJFV0lSRV9DT05TVEFOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mb250LmggYi9pbmNsdWRlL2xpbnV4L2ZvbnQuaAppbmRleCA1M2IxMjlmLi40MGEyNGFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZvbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZvbnQuaApAQCAtNDksNyArNDksOCBAQAogCiAvKiBHZXQgdGhlIGRlZmF1bHQgZm9udCBmb3IgYSBzcGVjaWZpYyBzY3JlZW4gc2l6ZSAqLwogCi1leHRlcm4gY29uc3Qgc3RydWN0IGZvbnRfZGVzYyAqZ2V0X2RlZmF1bHRfZm9udChpbnQgeHJlcywgaW50IHlyZXMpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmb250X2Rlc2MgKmdldF9kZWZhdWx0X2ZvbnQoaW50IHhyZXMsIGludCB5cmVzLAorCQkJCQkJdTMyIGZvbnRfdywgdTMyIGZvbnRfaCk7CiAKIC8qIE1heC4gbGVuZ3RoIGZvciB0aGUgbmFtZSBvZiBhIHByZWRlZmluZWQgZm9udCAqLwogI2RlZmluZSBNQVhfRk9OVF9OQU1FCTMyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaCBiL2luY2x1ZGUvbGludXgvZnJlZXplci5oCmluZGV4IDVlNzVlMjYuLjQ2MzEwODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oCisrKyBiL2luY2x1ZGUvbGludXgvZnJlZXplci5oCkBAIC0zNywyNSArMzcsMjUgQEAKIAogLyoKICAqIFdha2UgdXAgYSBmcm96ZW4gcHJvY2VzcworICoKKyAqIHRhc2tfbG9jaygpIGlzIHRha2VuIHRvIHByZXZlbnQgdGhlIHJhY2Ugd2l0aCByZWZyaWdlcmF0b3IoKSB3aGljaCBtYXkKKyAqIG9jY3VyIGlmIHRoZSBmcmVlemluZyBvZiB0YXNrcyBmYWlscy4gIE5hbWVseSwgd2l0aG91dCB0aGUgbG9jaywgaWYgdGhlCisgKiBmcmVlemluZyBvZiB0YXNrcyBmYWlsZWQsIHRoYXdfdGFza3MoKSBtaWdodCBoYXZlIHJ1biBiZWZvcmUgYSB0YXNrIGluCisgKiByZWZyaWdlcmF0b3IoKSBjb3VsZCBjYWxsIGZyb3plbl9wcm9jZXNzKCksIGluIHdoaWNoIGNhc2UgdGhlIHRhc2sgd291bGQgYmUKKyAqIGZyb3plbiBhbmQgbm8gb25lIHdvdWxkIHRoYXcgaXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CisJdGFza19sb2NrKHApOwogCWlmIChmcm96ZW4ocCkpIHsKIAkJcC0+ZmxhZ3MgJj0gflBGX0ZST1pFTjsKKwkJdGFza191bmxvY2socCk7CiAJCXdha2VfdXBfcHJvY2VzcyhwKTsKIAkJcmV0dXJuIDE7CiAJfQotCXJldHVybiAwOwotfQotCi0vKgotICogZnJlZXppbmcgaXMgY29tcGxldGUsIG1hcmsgcHJvY2VzcyBhcyBmcm96ZW4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZyb3plbl9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQlwLT5mbGFncyB8PSBQRl9GUk9aRU47Ci0Jd21iKCk7CiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9GUkVFWkUpOworCXRhc2tfdW5sb2NrKHApOworCXJldHVybiAwOwogfQogCiBleHRlcm4gdm9pZCByZWZyaWdlcmF0b3Iodm9pZCk7CkBAIC03MSwxNCArNzEsNTUgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLWV4dGVybiB2b2lkIHRoYXdfc29tZV9wcm9jZXNzZXMoaW50IGFsbCk7CisvKgorICogVGhlIFBGX0ZSRUVaRVJfU0tJUCBmbGFnIHNob3VsZCBiZSBzZXQgYnkgYSB2Zm9yayBwYXJlbnQgcmlnaHQgYmVmb3JlIGl0CisgKiBjYWxscyB3YWl0X2Zvcl9jb21wbGV0aW9uKCZ2Zm9yaykgYW5kIHJlc2V0IHJpZ2h0IGFmdGVyIGl0IHJldHVybnMgZnJvbSB0aGlzCisgKiBmdW5jdGlvbi4gIE5leHQsIHRoZSBwYXJlbnQgc2hvdWxkIGNhbGwgdHJ5X3RvX2ZyZWV6ZSgpIHRvIGZyZWV6ZSBpdHNlbGYKKyAqIGFwcHJvcHJpYXRlbHkgaW4gY2FzZSB0aGUgY2hpbGQgaGFzIGV4aXRlZCBiZWZvcmUgdGhlIGZyZWV6aW5nIG9mIHRhc2tzIGlzCisgKiBjb21wbGV0ZS4gIEhvd2V2ZXIsIHdlIGRvbid0IHdhbnQga2VybmVsIHRocmVhZHMgdG8gYmUgZnJvemVuIGluIHVuZXhwZWN0ZWQKKyAqIHBsYWNlcywgc28gd2UgYWxsb3cgdGhlbSB0byBibG9jayBmcmVlemVfcHJvY2Vzc2VzKCkgaW5zdGVhZCBvciB0byBzZXQKKyAqIFBGX05PRlJFRVpFIGlmIG5lZWRlZCBhbmQgUEZfRlJFRVpFUl9TS0lQIGlzIG9ubHkgc2V0IGZvciB1c2VybGFuZCB2Zm9yaworICogcGFyZW50cy4gIEZvcnR1bmF0ZWx5LCBpbiB0aGUgX19fX2NhbGxfdXNlcm1vZGVoZWxwZXIoKSBjYXNlIHRoZSBwYXJlbnQgd29uJ3QKKyAqIHJlYWxseSBibG9jayBmcmVlemVfcHJvY2Vzc2VzKCksIHNpbmNlIF9fX19jYWxsX3VzZXJtb2RlaGVscGVyKCkgKHRoZSBjaGlsZCkKKyAqIGRvZXMgYSBsaXR0bGUgYmVmb3JlIGV4ZWMvZXhpdCBhbmQgaXQgY2FuJ3QgYmUgZnJvemVuIGJlZm9yZSB3YWtpbmcgdXAgdGhlCisgKiBwYXJlbnQuCisgKi8KKworLyoKKyAqIElmIHRoZSBjdXJyZW50IHRhc2sgaXMgYSB1c2VyIHNwYWNlIG9uZSwgdGVsbCB0aGUgZnJlZXplciBub3QgdG8gY291bnQgaXQgYXMKKyAqIGZyZWV6YWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZyZWV6ZXJfZG9fbm90X2NvdW50KHZvaWQpCit7CisJaWYgKGN1cnJlbnQtPm1tKQorCQljdXJyZW50LT5mbGFncyB8PSBQRl9GUkVFWkVSX1NLSVA7Cit9CisKKy8qCisgKiBJZiB0aGUgY3VycmVudCB0YXNrIGlzIGEgdXNlciBzcGFjZSBvbmUsIHRlbGwgdGhlIGZyZWV6ZXIgdG8gY291bnQgaXQgYXMKKyAqIGZyZWV6YWJsZSBhZ2FpbiBhbmQgdHJ5IHRvIGZyZWV6ZSBpdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZyZWV6ZXJfY291bnQodm9pZCkKK3sKKwlpZiAoY3VycmVudC0+bW0pIHsKKwkJY3VycmVudC0+ZmxhZ3MgJj0gflBGX0ZSRUVaRVJfU0tJUDsKKwkJdHJ5X3RvX2ZyZWV6ZSgpOworCX0KK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSB0YXNrIHNob3VsZCBiZSBjb3VudGVkIGFzIGZyZWV6ZWFibGUgYnkgdGhlIGZyZWV6ZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgZnJlZXplcl9zaG91bGRfc2tpcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuICEhKHAtPmZsYWdzICYgUEZfRlJFRVpFUl9TS0lQKTsKK30KIAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGZyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGZyZWV6ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgQlVHKCk7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIDE7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcm96ZW5fcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgQlVHKCk7IH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlZnJpZ2VyYXRvcih2b2lkKSB7fQogc3RhdGljIGlubGluZSBpbnQgZnJlZXplX3Byb2Nlc3Nlcyh2b2lkKSB7IEJVRygpOyByZXR1cm4gMDsgfQpAQCAtODYsNSArMTI3LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgdHJ5X3RvX2ZyZWV6ZSh2b2lkKSB7IHJldHVybiAwOyB9CiAKLQorc3RhdGljIGlubGluZSB2b2lkIGZyZWV6ZXJfZG9fbm90X2NvdW50KHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZXplcl9jb3VudCh2b2lkKSB7fQorc3RhdGljIGlubGluZSBpbnQgZnJlZXplcl9zaG91bGRfc2tpcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIDA7IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGJjNmQyN2MuLjdjZjBjNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgU0VFS19TRVQJMAkvKiBzZWVrIHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBmaWxlICovCiAjZGVmaW5lIFNFRUtfQ1VSCTEJLyogc2VlayByZWxhdGl2ZSB0byBjdXJyZW50IGZpbGUgcG9zaXRpb24gKi8KICNkZWZpbmUgU0VFS19FTkQJMgkvKiBzZWVrIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlICovCisjZGVmaW5lIFNFRUtfTUFYCVNFRUtfRU5ECiAKIC8qIEFuZCBkeW5hbWljYWxseS10dW5hYmxlIGxpbWl0cyBhbmQgZGVmYXVsdHM6ICovCiBzdHJ1Y3QgZmlsZXNfc3RhdF9zdHJ1Y3QgewpAQCAtOTEsNiArOTIsNyBAQAogLyogcHVibGljIGZsYWdzIGZvciBmaWxlX3N5c3RlbV90eXBlICovCiAjZGVmaW5lIEZTX1JFUVVJUkVTX0RFViAxIAogI2RlZmluZSBGU19CSU5BUllfTU9VTlREQVRBIDIKKyNkZWZpbmUgRlNfSEFTX1NVQlRZUEUgNAogI2RlZmluZSBGU19SRVZBTF9ET1QJMTYzODQJLyogQ2hlY2sgdGhlIHBhdGhzICIuIiwgIi4uIiBmb3Igc3RhbGVuZXNzICovCiAjZGVmaW5lIEZTX1JFTkFNRV9ET0VTX0RfTU9WRQkzMjc2OAkvKiBGUyB3aWxsIGhhbmRsZSBkX21vdmUoKQogCQkJCQkgKiBkdXJpbmcgcmVuYW1lKCkgaW50ZXJuYWxseS4KQEAgLTg0NywxMSArODQ5LDYgQEAKIC8qIGZzL3N5bmMuYyAqLwogZXh0ZXJuIGludCBkb19zeW5jX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBvZmZzZXQsCiAJCQlsb2ZmX3QgZW5kYnl0ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKLXN0YXRpYyBpbmxpbmUgaW50IGRvX3N5bmNfZmlsZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwKLQkJCWxvZmZfdCBlbmRieXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JcmV0dXJuIGRvX3N5bmNfbWFwcGluZ19yYW5nZShmaWxlLT5mX21hcHBpbmcsIG9mZnNldCwgZW5kYnl0ZSwgZmxhZ3MpOwotfQogCiAvKiBmcy9sb2Nrcy5jICovCiBleHRlcm4gdm9pZCBsb2Nrc19pbml0X2xvY2soc3RydWN0IGZpbGVfbG9jayAqKTsKQEAgLTk2MCw2ICs5NTcsMTIgQEAKIAkvKiBHcmFudWxhcml0eSBvZiBjL20vYXRpbWUgaW4gbnMuCiAJICAgQ2Fubm90IGJlIHdvcnNlIHRoYW4gYSBzZWNvbmQgKi8KIAl1MzIJCSAgIHNfdGltZV9ncmFuOworCisJLyoKKwkgKiBGaWxlc3lzdGVtIHN1YnR5cGUuICBJZiBub24tZW1wdHkgdGhlIGZpbGVzeXN0ZW0gdHlwZSBmaWVsZAorCSAqIGluIC9wcm9jL21vdW50cyB3aWxsIGJlICJ0eXBlLnN1YnR5cGUiCisJICovCisJY2hhciAqc19zdWJ0eXBlOwogfTsKIAogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyBjdXJyZW50X2ZzX3RpbWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CkBAIC0xNzM1LDYgKzE3MzgsOCBAQAogZXh0ZXJuIHZvaWQgZG9fZ2VuZXJpY19tYXBwaW5nX3JlYWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJICAgIHN0cnVjdCBmaWxlX3JhX3N0YXRlICosIHN0cnVjdCBmaWxlICosCiAJCQkJICAgIGxvZmZfdCAqLCByZWFkX2Rlc2NyaXB0b3JfdCAqLCByZWFkX2FjdG9yX3QpOworZXh0ZXJuIGludCBnZW5lcmljX3NlZ21lbnRfY2hlY2tzKGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQl1bnNpZ25lZCBsb25nICpucl9zZWdzLCBzaXplX3QgKmNvdW50LCBpbnQgYWNjZXNzX2ZsYWdzKTsKIAogLyogZnMvc3BsaWNlLmMgKi8KIGV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnV0ZXguaCBiL2luY2x1ZGUvbGludXgvZnV0ZXguaAppbmRleCAzZjE1M2I0Li44OTlmYzdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9saW51eC9mdXRleC5oCkBAIC0zLDYgKzMsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAordW5pb24ga3RpbWU7CisKIC8qIFNlY29uZCBhcmd1bWVudCB0byBmdXRleCBzeXNjYWxsICovCiAKIApAQCAtMTUsNiArMTcsMTkgQEAKICNkZWZpbmUgRlVURVhfTE9DS19QSQkJNgogI2RlZmluZSBGVVRFWF9VTkxPQ0tfUEkJCTcKICNkZWZpbmUgRlVURVhfVFJZTE9DS19QSQk4CisjZGVmaW5lIEZVVEVYX0NNUF9SRVFVRVVFX1BJCTkKKworI2RlZmluZSBGVVRFWF9QUklWQVRFX0ZMQUcJMTI4CisjZGVmaW5lIEZVVEVYX0NNRF9NQVNLCQl+RlVURVhfUFJJVkFURV9GTEFHCisKKyNkZWZpbmUgRlVURVhfV0FJVF9QUklWQVRFCShGVVRFWF9XQUlUIHwgRlVURVhfUFJJVkFURV9GTEFHKQorI2RlZmluZSBGVVRFWF9XQUtFX1BSSVZBVEUJKEZVVEVYX1dBS0UgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCisjZGVmaW5lIEZVVEVYX1JFUVVFVUVfUFJJVkFURQkoRlVURVhfUkVRVUVVRSB8IEZVVEVYX1BSSVZBVEVfRkxBRykKKyNkZWZpbmUgRlVURVhfQ01QX1JFUVVFVUVfUFJJVkFURSAoRlVURVhfQ01QX1JFUVVFVUUgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCisjZGVmaW5lIEZVVEVYX1dBS0VfT1BfUFJJVkFURQkoRlVURVhfV0FLRV9PUCB8IEZVVEVYX1BSSVZBVEVfRkxBRykKKyNkZWZpbmUgRlVURVhfTE9DS19QSV9QUklWQVRFCShGVVRFWF9MT0NLX1BJIHwgRlVURVhfUFJJVkFURV9GTEFHKQorI2RlZmluZSBGVVRFWF9VTkxPQ0tfUElfUFJJVkFURQkoRlVURVhfVU5MT0NLX1BJIHwgRlVURVhfUFJJVkFURV9GTEFHKQorI2RlZmluZSBGVVRFWF9UUllMT0NLX1BJX1BSSVZBVEUgKEZVVEVYX1RSWUxPQ0tfUEkgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCiAKIC8qCiAgKiBTdXBwb3J0IGZvciByb2J1c3QgZnV0ZXhlczogdGhlIGtlcm5lbCBjbGVhbnMgdXAgaGVsZCBmdXRleGVzIGF0CkBAIC04Myw5ICs5OCwxNCBAQAogI2RlZmluZSBGVVRFWF9PV05FUl9ESUVECTB4NDAwMDAwMDAKIAogLyoKKyAqIFNvbWUgcHJvY2Vzc2VzIGhhdmUgYmVlbiByZXF1ZXVlZCBvbiB0aGlzIFBJLWZ1dGV4CisgKi8KKyNkZWZpbmUgRlVURVhfV0FJVEVSX1JFUVVFVUVECTB4MjAwMDAwMDAKKworLyoKICAqIFRoZSByZXN0IG9mIHRoZSByb2J1c3QtZnV0ZXggZmllbGQgaXMgZm9yIHRoZSBUSUQ6CiAgKi8KLSNkZWZpbmUgRlVURVhfVElEX01BU0sJCTB4M2ZmZmZmZmYKKyNkZWZpbmUgRlVURVhfVElEX01BU0sJCTB4MGZmZmZmZmYKIAogLyoKICAqIFRoaXMgbGltaXQgcHJvdGVjdHMgYWdhaW5zdCBhIGRlbGliZXJhdGVseSBjaXJjdWxhciBsaXN0LgpAQCAtOTQsMTIgKzExNCw1MyBAQAogI2RlZmluZSBST0JVU1RfTElTVF9MSU1JVAkyMDQ4CiAKICNpZmRlZiBfX0tFUk5FTF9fCi1sb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwKK2xvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwgdW5pb24ga3RpbWUgKnRpbWVvdXQsCiAJICAgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpOwogCiBleHRlcm4gaW50CiBoYW5kbGVfZnV0ZXhfZGVhdGgodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgaW50IHBpKTsKIAorLyoKKyAqIEZ1dGV4ZXMgYXJlIG1hdGNoZWQgb24gZXF1YWwgdmFsdWVzIG9mIHRoaXMga2V5LgorICogVGhlIGtleSB0eXBlIGRlcGVuZHMgb24gd2hldGhlciBpdCdzIGEgc2hhcmVkIG9yIHByaXZhdGUgbWFwcGluZy4KKyAqIERvbid0IHJlYXJyYW5nZSBtZW1iZXJzIHdpdGhvdXQgbG9va2luZyBhdCBoYXNoX2Z1dGV4KCkuCisgKgorICogb2Zmc2V0IGlzIGFsaWduZWQgdG8gYSBtdWx0aXBsZSBvZiBzaXplb2YodTMyKSAoPT0gNCkgYnkgZGVmaW5pdGlvbi4KKyAqIFdlIHVzZSB0aGUgdHdvIGxvdyBvcmRlciBiaXRzIG9mIG9mZnNldCB0byB0ZWxsIHdoYXQgaXMgdGhlIGtpbmQgb2Yga2V5IDoKKyAqICAwMCA6IFByaXZhdGUgcHJvY2VzcyBmdXRleCAoUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUpCisgKiAgICAgICAobm8gcmVmZXJlbmNlIG9uIGFuIGlub2RlIG9yIG1tKQorICogIDAxIDogU2hhcmVkIGZ1dGV4IChQVEhSRUFEX1BST0NFU1NfU0hBUkVEKQorICoJbWFwcGVkIG9uIGEgZmlsZSAocmVmZXJlbmNlIG9uIHRoZSB1bmRlcmx5aW5nIGlub2RlKQorICogIDEwIDogU2hhcmVkIGZ1dGV4IChQVEhSRUFEX1BST0NFU1NfU0hBUkVEKQorICogICAgICAgKGJ1dCBwcml2YXRlIG1hcHBpbmcgb24gYW4gbW0sIGFuZCByZWZlcmVuY2UgdGFrZW4gb24gaXQpCisqLworCisjZGVmaW5lIEZVVF9PRkZfSU5PREUgICAgMSAvKiBXZSBzZXQgYml0IDAgaWYga2V5IGhhcyBhIHJlZmVyZW5jZSBvbiBpbm9kZSAqLworI2RlZmluZSBGVVRfT0ZGX01NU0hBUkVEIDIgLyogV2Ugc2V0IGJpdCAxIGlmIGtleSBoYXMgYSByZWZlcmVuY2Ugb24gbW0gKi8KKwordW5pb24gZnV0ZXhfa2V5IHsKKwl1MzIgX191c2VyICp1YWRkcjsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIHBnb2ZmOworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCQlpbnQgb2Zmc2V0OworCX0gc2hhcmVkOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwkJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJCWludCBvZmZzZXQ7CisJfSBwcml2YXRlOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgd29yZDsKKwkJdm9pZCAqcHRyOworCQlpbnQgb2Zmc2V0OworCX0gYm90aDsKK307CitpbnQgZ2V0X2Z1dGV4X2tleSh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2hhcmVkLAorCQkgIHVuaW9uIGZ1dGV4X2tleSAqa2V5KTsKK3ZvaWQgZ2V0X2Z1dGV4X2tleV9yZWZzKHVuaW9uIGZ1dGV4X2tleSAqa2V5KTsKK3ZvaWQgZHJvcF9mdXRleF9rZXlfcmVmcyh1bmlvbiBmdXRleF9rZXkgKmtleSk7CisKICNpZmRlZiBDT05GSUdfRlVURVgKIGV4dGVybiB2b2lkIGV4aXRfcm9idXN0X2xpc3Qoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKTsKIGV4dGVybiB2b2lkIGV4aXRfcGlfc3RhdGVfbGlzdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5lcmljX2FjbC5oIGIvaW5jbHVkZS9saW51eC9nZW5lcmljX2FjbC5oCmluZGV4IDgwNzY0ZjQuLjg4NmY1ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuZXJpY19hY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfYWNsLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogZnMvZ2VuZXJpY19hY2wuYworICogaW5jbHVkZS9saW51eC9nZW5lcmljX2FjbC5oCiAgKgogICogKEMpIDIwMDUgQW5kcmVhcyBHcnVlbmJhY2hlciA8YWdydWVuQHN1c2UuZGU+CiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCmluZGV4IDJjNjVkYTcuLjk3NTZmYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiBzdHJ1Y3QgcGFydGl0aW9uIHsKIAl1bnNpZ25lZCBjaGFyIGJvb3RfaW5kOwkJLyogMHg4MCAtIGFjdGl2ZSAqLwpAQCAtOTQsNiArOTUsNyBAQAogCiAjZGVmaW5lIEdFTkhEX0ZMX1JFTU9WQUJMRQkJCTEKICNkZWZpbmUgR0VOSERfRkxfRFJJVkVSRlMJCQkyCisjZGVmaW5lIEdFTkhEX0ZMX01FRElBX0NIQU5HRV9OT1RJRlkJCTQKICNkZWZpbmUgR0VOSERfRkxfQ0QJCQkJOAogI2RlZmluZSBHRU5IRF9GTF9VUAkJCQkxNgogI2RlZmluZSBHRU5IRF9GTF9TVVBQUkVTU19QQVJUSVRJT05fSU5GTwkzMgpAQCAtMTM4LDYgKzE0MCw3IEBACiAjZWxzZQogCXN0cnVjdCBkaXNrX3N0YXRzIGRrc3RhdHM7CiAjZW5kaWYKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXN5bmNfbm90aWZ5OwogfTsKIAogLyogU3RydWN0dXJlIGZvciBzeXNmcyBhdHRyaWJ1dGVzIG9uIGJsb2NrIGRldmljZXMgKi8KQEAgLTQxMywxMiArNDE2LDEzIEBACiBleHRlcm4gaW50IHJlc2Nhbl9wYXJ0aXRpb25zKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKIGV4dGVybiB2b2lkIGFkZF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKiwgaW50LCBzZWN0b3JfdCwgc2VjdG9yX3QsIGludCk7CiBleHRlcm4gdm9pZCBkZWxldGVfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICosIGludCk7CitleHRlcm4gdm9pZCBwcmludGtfYWxsX3BhcnRpdGlvbnModm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3QgZ2VuZGlzayAqYWxsb2NfZGlza19ub2RlKGludCBtaW5vcnMsIGludCBub2RlX2lkKTsKIGV4dGVybiBzdHJ1Y3QgZ2VuZGlzayAqYWxsb2NfZGlzayhpbnQgbWlub3JzKTsKIGV4dGVybiBzdHJ1Y3Qga29iamVjdCAqZ2V0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spOwogZXh0ZXJuIHZvaWQgcHV0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spOwotCitleHRlcm4gdm9pZCBnZW5oZF9tZWRpYV9jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIGV4dGVybiB2b2lkIGJsa19yZWdpc3Rlcl9yZWdpb24oZGV2X3QgZGV2LCB1bnNpZ25lZCBsb25nIHJhbmdlLAogCQkJc3RydWN0IG1vZHVsZSAqbW9kdWxlLAogCQkJc3RydWN0IGtvYmplY3QgKigqcHJvYmUpKGRldl90LCBpbnQgKiwgdm9pZCAqKSwKQEAgLTQzMyw2ICs0MzcsMTAgQEAKIAogI2VuZGlmCiAKLSNlbmRpZgorI2Vsc2UgLyogQ09ORklHX0JMT0NLICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmludGtfYWxsX3BhcnRpdGlvbnModm9pZCkgeyB9CisKKyNlbmRpZiAvKiBDT05GSUdfQkxPQ0sgKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCA5N2EzNmMzLi4wZDJlZjBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTE3NiwxMCArMTc2LDYgQEAKICNkZWZpbmUgZnJlZV9wYWdlKGFkZHIpIGZyZWVfcGFnZXMoKGFkZHIpLDApCiAKIHZvaWQgcGFnZV9hbGxvY19pbml0KHZvaWQpOwotI2lmZGVmIENPTkZJR19OVU1BCi12b2lkIGRyYWluX25vZGVfcGFnZXMoaW50IG5vZGUpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBkcmFpbl9ub2RlX3BhZ2VzKGludCBub2RlKSB7IH07Ci0jZW5kaWYKK3ZvaWQgZHJhaW5fem9uZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcCk7CiAKICNlbmRpZiAvKiBfX0xJTlVYX0dGUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZC5oIGIvaW5jbHVkZS9saW51eC9oaWQuaAppbmRleCAzNzA3NmIxLi44MjdlZTc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlkLmgKQEAgLTI3NSw2ICsyNzUsNyBAQAogI2RlZmluZSBISURfUVVJUktfTE9HSVRFQ0hfREVTQ1JJUFRPUgkJMHgwMDEwMDAwMAogI2RlZmluZSBISURfUVVJUktfRFVQTElDQVRFX1VTQUdFUwkJMHgwMDIwMDAwMAogI2RlZmluZSBISURfUVVJUktfUkVTRVRfTEVEUwkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgSElEX1FVSVJLX1NXQVBQRURfTUlOX01BWAkJMHgwMDgwMDAwMAogCiAvKgogICogVGhpcyBpcyB0aGUgZ2xvYmFsIGVudmlyb25tZW50IG9mIHRoZSBwYXJzZXIuIFRoaXMgaW5mb3JtYXRpb24gaXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKaW5kZXggYTUxNWViMC4uOThlMmNjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKQEAgLTk0LDE3ICs5NCwyNiBAQAogCiAvKgogICogU2FtZSBidXQgYWxzbyBmbHVzaGVzIGFsaWFzZWQgY2FjaGUgY29udGVudHMgdG8gUkFNLgorICoKKyAqIFRoaXMgbXVzdCBiZSBhIG1hY3JvIGJlY2F1c2UgS01fVVNFUjAgYW5kIGZyaWVuZHMgYXJlbid0IGRlZmluZWQgaWYKKyAqICFDT05GSUdfSElHSE1FTQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2xlYXJfaGlnaHBhZ2VfZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplKQorI2RlZmluZSB6ZXJvX3VzZXJfcGFnZShwYWdlLCBvZmZzZXQsIHNpemUsIGttX3R5cGUpCQlcCisJZG8gewkJCQkJCQlcCisJCXZvaWQgKmthZGRyOwkJCQkJXAorCQkJCQkJCQlcCisJCUJVR19PTigob2Zmc2V0KSArIChzaXplKSA+IFBBR0VfU0laRSk7CQlcCisJCQkJCQkJCVwKKwkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBrbV90eXBlKTsJCVwKKwkJbWVtc2V0KChjaGFyICopa2FkZHIgKyAob2Zmc2V0KSwgMCwgKHNpemUpKTsJXAorCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsJCQlcCisJCWt1bm1hcF9hdG9taWMoa2FkZHIsIChrbV90eXBlKSk7CQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBtZW1jbGVhcl9oaWdocGFnZV9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCXVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplKQogewotCXZvaWQgKmthZGRyOwotCi0JQlVHX09OKG9mZnNldCArIHNpemUgPiBQQUdFX1NJWkUpOwotCi0Ja2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JbWVtc2V0KChjaGFyICopa2FkZHIgKyBvZmZzZXQsIDAsIHNpemUpOwotCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwl6ZXJvX3VzZXJfcGFnZShwYWdlLCBvZmZzZXQsIHNpemUsIEtNX1VTRVIwKTsKIH0KIAogI2lmbmRlZiBfX0hBVkVfQVJDSF9DT1BZX1VTRVJfSElHSFBBR0UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tYml0LmggYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWJpdC5oCmluZGV4IDllZTBmODAuLjExMTMzNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tYml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1iaXQuaApAQCAtMTgsNyArMTgsNyBAQAogICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQgZXZlbgorLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQgZXZlbgogICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAqLwogCiAjaWZuZGVmIF9MSU5VWF9JMkNfQUxHT19CSVRfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtYWxnby1wY2YuaCBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNmLmgKaW5kZXggOTk0ZWI4Ni4uNzdhZmJiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtYWxnby1wY2YuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjZi5oCkBAIC0xOSw3ICsxOSw3IEBACiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZCBldmVuCisvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZCBldmVuCiAgICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+ICovCiAKICNpZm5kZWYgX0xJTlVYX0kyQ19BTEdPX1BDRl9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCAwZThkYTY4Li5hYTgzZDQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKQEAgLTExNyw2ICsxMTcsNyBAQAogI2RlZmluZSBJMkNfRFJJVkVSSURfSVNMMTIwOAk4OAkvKiBJbnRlcnNpbCBJU0wxMjA4IFJUQwkJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1dNODczMQkJODkJLyogV29sZnNvbiBXTTg3MzEgYXVkaW8gY29kZWMgKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1dNODc1MAkJOTAJLyogV29sZnNvbiBXTTg3NTAgYXVkaW8gY29kZWMgKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1dNODc1MwkJOTEJLyogV29sZnNvbiBXTTg3NTMgYXVkaW8gY29kZWMgKi8KIAogI2RlZmluZSBJMkNfRFJJVkVSSURfSTJDREVWCTkwMAogI2RlZmluZSBJMkNfRFJJVkVSSURfQVJQICAgICAgICA5MDIgICAgLyogU01CdXMgQVJQIENsaWVudCAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IDQxOGRmYjUuLjA3YWJhODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMjIzLDggKzIyMyw5IEBACiAvKgogICogUmVnaXN0ZXIgbmV3IGhhcmR3YXJlIHdpdGggaWRlCiAgKi8KLWludCBpZGVfcmVnaXN0ZXJfaHcoaHdfcmVnc190ICpodywgc3RydWN0IGh3aWZfcyAqKmh3aWZwKTsKLWludCBpZGVfcmVnaXN0ZXJfaHdfd2l0aF9maXh1cChod19yZWdzX3QgKiwgc3RydWN0IGh3aWZfcyAqKiwgdm9pZCAoKikoc3RydWN0IGh3aWZfcyAqKSk7CitpbnQgaWRlX3JlZ2lzdGVyX2h3KGh3X3JlZ3NfdCAqLCBpbnQsIHN0cnVjdCBod2lmX3MgKiopOworaW50IGlkZV9yZWdpc3Rlcl9od193aXRoX2ZpeHVwKGh3X3JlZ3NfdCAqLCBpbnQsIHN0cnVjdCBod2lmX3MgKiosCisJCQkgICAgICAgdm9pZCAoKikoc3RydWN0IGh3aWZfcyAqKSk7CiAKIC8qCiAgKiBTZXQgdXAgaHdfcmVnc190IHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyBpZGVfcmVnaXN0ZXJfaHcgKG9wdGlvbmFsKQpAQCAtNTU5LDkgKzU2MCwxMCBAQAogCXN0cnVjdCBpZGVfZHJpdmVfcyAJKm5leHQ7CS8qIGNpcmN1bGFyIGxpc3Qgb2YgaHdncm91cCBkcml2ZXMgKi8KIAl2b2lkCQkqZHJpdmVyX2RhdGE7CS8qIGV4dHJhIGRyaXZlciBkYXRhICovCiAJc3RydWN0IGhkX2RyaXZlaWQJKmlkOwkvKiBkcml2ZSBtb2RlbCBpZGVudGlmaWNhdGlvbiBpbmZvICovCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwkvKiAvcHJvYy9pZGUvIGRpcmVjdG9yeSBlbnRyeSAqLwogCXN0cnVjdCBpZGVfc2V0dGluZ3NfcyAqc2V0dGluZ3M7LyogL3Byb2MvaWRlLyBkcml2ZSBzZXR0aW5ncyAqLwotCisjZW5kaWYKIAlzdHJ1Y3QgaHdpZl9zCQkqaHdpZjsJLyogYWN0dWFsbHkgKGlkZV9od2lmX3QgKikgKi8KIAogCXVuc2lnbmVkIGxvbmcgc2xlZXA7CQkvKiBzbGVlcCB1bnRpbCB0aGlzIHRpbWUgKi8KQEAgLTYwMSwxNiArNjAzLDEyIEBACiAJdW5zaWduZWQgcmVtYXBfMF90b18xCTogMTsJLyogMD1ub3JlbWFwLCAxPXJlbWFwIDAtPjEgKGZvciBFWkRyaXZlKSAqLwogCXVuc2lnbmVkIGJsb2NrZWQgICAgICAgIDogMTsJLyogMT1wb3dlcm1hbmFnbWVudCB0b2xkIHVzIG5vdCB0byBkbyBhbnl0aGluZywgc28gc2xlZXAgbmljZWx5ICovCiAJdW5zaWduZWQgdmRtYQkJOiAxOwkvKiAxPWRvaW5nIFBJTyBvdmVyIERNQSAwPWRvaW5nIG5vcm1hbCBETUEgKi8KLQl1bnNpZ25lZCBhZGRyZXNzaW5nOwkJLyogICAgICA6IDM7Ci0JCQkJCSAqICAwPTI4LWJpdAotCQkJCQkgKiAgMT00OC1iaXQKLQkJCQkJICogIDI9NDgtYml0IGRvaW5nIDI4LWJpdAotCQkJCQkgKiAgMz02NC1iaXQKLQkJCQkJICovCiAJdW5zaWduZWQgc2NzaQkJOiAxOwkvKiAwPWRlZmF1bHQsIDE9aWRlLXNjc2kgZW11bGF0aW9uICovCiAJdW5zaWduZWQgc2xlZXBpbmcJOiAxOwkvKiAxPXNsZWVwaW5nICYgc2xlZXAgZmllbGQgdmFsaWQgKi8KIAl1bnNpZ25lZCBwb3N0X3Jlc2V0CTogMTsKKwl1bnNpZ25lZCB1ZG1hMzNfd2FybmVkCTogMTsKIAorCXU4CWFkZHJlc3Npbmc7CS8qIDA9MjgtYml0LCAxPTQ4LWJpdCwgMj00OC1iaXQgZG9pbmcgMjgtYml0ICovCiAgICAgICAgIHU4CXF1aXJrX2xpc3Q7CS8qIGNvbnNpZGVyZWQgcXVpcmt5LCBzZXQgZm9yIGEgc3BlY2lmaWMgaG9zdCAqLwogICAgICAgICB1OAlpbml0X3NwZWVkOwkvKiB0cmFuc2ZlciByYXRlIHNldCBhdCBib290ICovCiAgICAgICAgIHU4CWN1cnJlbnRfc3BlZWQ7CS8qIGN1cnJlbnQgdHJhbnNmZXIgcmF0ZSBzZXQgKi8KQEAgLTcxNywxMSArNzE1LDggQEAKIAlpbnQJKCpxdWlya3Byb2MpKGlkZV9kcml2ZV90ICopOwogCS8qIGRyaXZlciBzb2Z0LXBvd2VyIGludGVyZmFjZSAqLwogCWludAkoKmJ1c3Byb2MpKGlkZV9kcml2ZV90ICosIGludCk7Ci0vLwkvKiBob3N0IHJhdGUgbGltaXRlciAqLwotLy8JdTgJKCpyYXRlbWFzaykoaWRlX2RyaXZlX3QgKik7Ci0vLwkvKiBkZXZpY2UgcmF0ZSBsaW1pdGVyICovCi0vLwl1OAkoKnJhdGVmaWx0ZXIpKGlkZV9kcml2ZV90ICosIHU4KTsKICNlbmRpZgorCXU4ICgqdWRtYV9maWx0ZXIpKGlkZV9kcml2ZV90ICopOwogCiAJdm9pZCAoKmF0YV9pbnB1dF9kYXRhKShpZGVfZHJpdmVfdCAqLCB2b2lkICosIHUzMik7CiAJdm9pZCAoKmF0YV9vdXRwdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgdm9pZCAqLCB1MzIpOwpAQCAtODY2LDE2ICs4NjEsMjIgQEAKIAl1bnNpZ25lZCBjaGFyIGNtZF9idWZbNF07CiB9IGlkZV9od2dyb3VwX3Q7CiAKLS8qIHN0cnVjdHVyZSBhdHRhY2hlZCB0byB0aGUgcmVxdWVzdCBmb3IgSURFX1RBU0tfQ01EUyAqLwordHlwZWRlZiBzdHJ1Y3QgaWRlX2RyaXZlcl9zIGlkZV9kcml2ZXJfdDsKIAorZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgaWRlX3NldHRpbmdfc2VtOworCitpbnQgc2V0X2lvXzMyYml0KGlkZV9kcml2ZV90ICosIGludCk7CitpbnQgc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICosIGludCk7CitpbnQgc2V0X3VzaW5nX2RtYShpZGVfZHJpdmVfdCAqLCBpbnQpOworCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAvKgogICogY29uZmlndXJhYmxlIGRyaXZlIHNldHRpbmdzCiAgKi8KIAogI2RlZmluZSBUWVBFX0lOVAkwCi0jZGVmaW5lIFRZUEVfSU5UQQkxCi0jZGVmaW5lIFRZUEVfQllURQkyCi0jZGVmaW5lIFRZUEVfU0hPUlQJMworI2RlZmluZSBUWVBFX0JZVEUJMQorI2RlZmluZSBUWVBFX1NIT1JUCTIKIAogI2RlZmluZSBTRVRUSU5HX1JFQUQJKDEgPDwgMCkKICNkZWZpbmUgU0VUVElOR19XUklURQkoMSA8PCAxKQpAQCAtODg1LDggKzg4Niw2IEBACiB0eXBlZGVmIHN0cnVjdCBpZGVfc2V0dGluZ3NfcyB7CiAJY2hhcgkJCSpuYW1lOwogCWludAkJCXJ3OwotCWludAkJCXJlYWRfaW9jdGw7Ci0JaW50CQkJd3JpdGVfaW9jdGw7CiAJaW50CQkJZGF0YV90eXBlOwogCWludAkJCW1pbjsKIAlpbnQJCQltYXg7CkBAIC04OTgsMTIgKzg5Nyw3IEBACiAJc3RydWN0IGlkZV9zZXR0aW5nc19zCSpuZXh0OwogfSBpZGVfc2V0dGluZ3NfdDsKIAotZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgaWRlX3NldHRpbmdfc2VtOwotZXh0ZXJuIGludCBpZGVfYWRkX3NldHRpbmcoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgcncsIGludCByZWFkX2lvY3RsLCBpbnQgd3JpdGVfaW9jdGwsIGludCBkYXRhX3R5cGUsIGludCBtaW4sIGludCBtYXgsIGludCBtdWxfZmFjdG9yLCBpbnQgZGl2X2ZhY3Rvciwgdm9pZCAqZGF0YSwgaWRlX3Byb2NzZXRfdCAqc2V0KTsKLWV4dGVybiBpZGVfc2V0dGluZ3NfdCAqaWRlX2ZpbmRfc2V0dGluZ19ieV9uYW1lKGlkZV9kcml2ZV90ICpkcml2ZSwgY2hhciAqbmFtZSk7Ci1leHRlcm4gaW50IGlkZV9yZWFkX3NldHRpbmcoaWRlX2RyaXZlX3QgKnQsIGlkZV9zZXR0aW5nc190ICpzZXR0aW5nKTsKLWV4dGVybiBpbnQgaWRlX3dyaXRlX3NldHRpbmcoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfc2V0dGluZ3NfdCAqc2V0dGluZywgaW50IHZhbCk7Ci1leHRlcm4gdm9pZCBpZGVfYWRkX2dlbmVyaWNfc2V0dGluZ3MoaWRlX2RyaXZlX3QgKmRyaXZlKTsKK2ludCBpZGVfYWRkX3NldHRpbmcoaWRlX2RyaXZlX3QgKiwgY29uc3QgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCB2b2lkICosIGlkZV9wcm9jc2V0X3QgKnNldCk7CiAKIC8qCiAgKiAvcHJvYy9pZGUgaW50ZXJmYWNlCkBAIC05MTUsMTUgKzkwOSwxNSBAQAogCXdyaXRlX3Byb2NfdAkqd3JpdGVfcHJvYzsKIH0gaWRlX3Byb2NfZW50cnlfdDsKIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1leHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2lkZV9yb290Owordm9pZCBwcm9jX2lkZV9jcmVhdGUodm9pZCk7Cit2b2lkIHByb2NfaWRlX2Rlc3Ryb3kodm9pZCk7Cit2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqKTsKK3ZvaWQgaWRlX3Byb2NfdW5yZWdpc3Rlcl9wb3J0KGlkZV9od2lmX3QgKik7Cit2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqLCBpZGVfZHJpdmVyX3QgKik7Cit2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGlkZV9kcml2ZV90ICosIGlkZV9kcml2ZXJfdCAqKTsKIAotZXh0ZXJuIHZvaWQgcHJvY19pZGVfY3JlYXRlKHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJvY19pZGVfZGVzdHJveSh2b2lkKTsKLWV4dGVybiB2b2lkIGNyZWF0ZV9wcm9jX2lkZV9pbnRlcmZhY2VzKHZvaWQpOwotdm9pZCBkZXN0cm95X3Byb2NfaWRlX2ludGVyZmFjZShpZGVfaHdpZl90ICopOwotZXh0ZXJuIHZvaWQgaWRlX2FkZF9wcm9jX2VudHJpZXMoc3RydWN0IHByb2NfZGlyX2VudHJ5ICosIGlkZV9wcm9jX2VudHJ5X3QgKiwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIGlkZV9yZW1vdmVfcHJvY19lbnRyaWVzKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqLCBpZGVfcHJvY19lbnRyeV90ICopOwordm9pZCBpZGVfYWRkX2dlbmVyaWNfc2V0dGluZ3MoaWRlX2RyaXZlX3QgKik7CisKIHJlYWRfcHJvY190IHByb2NfaWRlX3JlYWRfY2FwYWNpdHk7CiByZWFkX3Byb2NfdCBwcm9jX2lkZV9yZWFkX2dlb21ldHJ5OwogCkBAIC05NDcsOCArOTQxLDEzIEBACiAJcmV0dXJuIGxlbjsJCQlcCiB9CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9wcm9jX2lkZV9pbnRlcmZhY2VzKHZvaWQpIHsgOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9wcm9jX2lkZV9pbnRlcmZhY2UoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2lkZV9jcmVhdGUodm9pZCkgeyA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2lkZV9kZXN0cm95KHZvaWQpIHsgOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICpod2lmKSB7IDsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICpod2lmKSB7IDsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9kcml2ZXJfdCAqZHJpdmVyKSB7IDsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2RyaXZlcl90ICpkcml2ZXIpIHsgOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FkZF9nZW5lcmljX3NldHRpbmdzKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KICNkZWZpbmUgUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSxzdGFydCxvZmYsY291bnQsZW9mLGxlbikgcmV0dXJuIDA7CiAjZW5kaWYKIApAQCAtOTkxLDcgKzk5MCw3IEBACiAgKiBUaGUgZ2VuZHJpdmVyLm93bmVyIGZpZWxkIHNob3VsZCBiZSBzZXQgdG8gdGhlIG1vZHVsZSBvd25lciBvZiB0aGlzIGRyaXZlci4KICAqIFRoZSBnZW5kcml2ZXIubmFtZSBmaWVsZCBzaG91bGQgYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoaXMgZHJpdmVyCiAgKi8KLXR5cGVkZWYgc3RydWN0IGlkZV9kcml2ZXJfcyB7CitzdHJ1Y3QgaWRlX2RyaXZlcl9zIHsKIAljb25zdCBjaGFyCQkJKnZlcnNpb247CiAJdTgJCQkJbWVkaWE7CiAJdW5zaWduZWQgc3VwcG9ydHNfZHNjX292ZXJsYXAJOiAxOwpAQCAtOTk5LDEyICs5OTgsMTQgQEAKIAlpbnQJCSgqZW5kX3JlcXVlc3QpKGlkZV9kcml2ZV90ICosIGludCwgaW50KTsKIAlpZGVfc3RhcnRzdG9wX3QJKCplcnJvcikoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCwgdTgpOwogCWlkZV9zdGFydHN0b3BfdAkoKmFib3J0KShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpOwotCWlkZV9wcm9jX2VudHJ5X3QJKnByb2M7CiAJc3RydWN0IGRldmljZV9kcml2ZXIJZ2VuX2RyaXZlcjsKIAlpbnQJCSgqcHJvYmUpKGlkZV9kcml2ZV90ICopOwogCXZvaWQJCSgqcmVtb3ZlKShpZGVfZHJpdmVfdCAqKTsKIAl2b2lkCQkoKnNodXRkb3duKShpZGVfZHJpdmVfdCAqKTsKLX0gaWRlX2RyaXZlcl90OworI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworCWlkZV9wcm9jX2VudHJ5X3QJKnByb2M7CisjZW5kaWYKK307CiAKICNkZWZpbmUgdG9faWRlX2RyaXZlcihkcnYpIGNvbnRhaW5lcl9vZihkcnYsIGlkZV9kcml2ZXJfdCwgZ2VuX2RyaXZlcikKIApAQCAtMTIwNCw5ICsxMjA1LDE0IEBACiAKIGV4dGVybiBpbnQgaWRlcHJvYmVfaW5pdCh2b2lkKTsKIAorI2lmZGVmIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSCiBleHRlcm4gdm9pZCBpZGVfc2Nhbl9wY2lidXMoaW50IHNjYW5fZGlyZWN0aW9uKSBfX2luaXQ7CiBleHRlcm4gaW50IF9faWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm1vZF9uYW1lKTsKICNkZWZpbmUgaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoZCkgX19pZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcihkLCBUSElTX01PRFVMRSwgS0JVSUxEX01PRE5BTUUpCisjZWxzZQorI2RlZmluZSBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcihkKSBwY2lfcmVnaXN0ZXJfZHJpdmVyKGQpCisjZW5kaWYKKwogdm9pZCBpZGVfcGNpX3NldHVwX3BvcnRzKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCBpZGVfcGNpX2RldmljZV9zICosIGludCwgYXRhX2luZGV4X3QgKik7CiBleHRlcm4gdm9pZCBpZGVfc2V0dXBfcGNpX25vaXNlIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgaWRlX3BjaV9kZXZpY2VfcyAqZCk7CiAKQEAgLTEyMTQsOSArMTIyMCw2IEBACiBleHRlcm4gdm9pZCBkZWZhdWx0X2h3aWZfbW1pb3BzKGlkZV9od2lmX3QgKik7CiBleHRlcm4gdm9pZCBkZWZhdWx0X2h3aWZfdHJhbnNwb3J0KGlkZV9od2lmX3QgKik7CiAKLXZvaWQgaWRlX3JlZ2lzdGVyX3N1YmRyaXZlcihpZGVfZHJpdmVfdCAqLCBpZGVfZHJpdmVyX3QgKik7Ci12b2lkIGlkZV91bnJlZ2lzdGVyX3N1YmRyaXZlcihpZGVfZHJpdmVfdCAqLCBpZGVfZHJpdmVyX3QgKik7Ci0KICNkZWZpbmUgT05fQk9BUkQJCTEKICNkZWZpbmUgTkVWRVJfQk9BUkQJCTAKIApAQCAtMTI1Nyw2ICsxMjYwLDcgQEAKIAl1bnNpZ25lZCBpbnQJCWV4dHJhOwogCXN0cnVjdCBpZGVfcGNpX2RldmljZV9zCSpuZXh0OwogCXU4CQkJZmxhZ3M7CisJdTgJCQl1ZG1hX21hc2s7CiB9IGlkZV9wY2lfZGV2aWNlX3Q7CiAKIGV4dGVybiBpbnQgaWRlX3NldHVwX3BjaV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKiwgaWRlX3BjaV9kZXZpY2VfdCAqKTsKQEAgLTEyNzcsNyArMTI4MSw4IEBACiBpbnQgaWRlX2luX2RyaXZlX2xpc3Qoc3RydWN0IGhkX2RyaXZlaWQgKiwgY29uc3Qgc3RydWN0IGRyaXZlX2xpc3RfZW50cnkgKik7CiBpbnQgX19pZGVfZG1hX2JhZF9kcml2ZShpZGVfZHJpdmVfdCAqKTsKIGludCBfX2lkZV9kbWFfZ29vZF9kcml2ZShpZGVfZHJpdmVfdCAqKTsKLWludCBpZGVfdXNlX2RtYShpZGVfZHJpdmVfdCAqKTsKK3U4IGlkZV9tYXhfZG1hX21vZGUoaWRlX2RyaXZlX3QgKik7CitpbnQgaWRlX3R1bmVfZG1hKGlkZV9kcml2ZV90ICopOwogdm9pZCBpZGVfZG1hX29mZihpZGVfZHJpdmVfdCAqKTsKIHZvaWQgaWRlX2RtYV92ZXJib3NlKGlkZV9kcml2ZV90ICopOwogaW50IGlkZV9zZXRfZG1hKGlkZV9kcml2ZV90ICopOwpAQCAtMTMwMyw3ICsxMzA4LDggQEAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJICovCiAKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBpZGVfdXNlX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdTggaWRlX21heF9kbWFfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGlkZV90dW5lX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfZG1hX29mZihpZGVfZHJpdmVfdCAqZHJpdmUpIHsgOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2RtYV92ZXJib3NlKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9zZXRfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMTsgfQpAQCAtMTM0OCw5ICsxMzU0LDcgQEAKIH0KIAogLyogaWRlLWxpYi5jICovCi1leHRlcm4gdTggaWRlX2RtYV9zcGVlZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IG1vZGUpOwotZXh0ZXJuIHU4IGlkZV9yYXRlX2ZpbHRlcih1OCBtb2RlLCB1OCBzcGVlZCk7IAotZXh0ZXJuIGludCBpZGVfZG1hX2VuYWJsZShpZGVfZHJpdmVfdCAqZHJpdmUpOwordTggaWRlX3JhdGVfZmlsdGVyKGlkZV9kcml2ZV90ICosIHU4KTsKIGV4dGVybiBjaGFyICppZGVfeGZlcl92ZXJib3NlKHU4IHhmZXJfcmF0ZSk7CiBleHRlcm4gdm9pZCBpZGVfdG9nZ2xlX2JvdW5jZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBvbik7CiBleHRlcm4gaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmggYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKaW5kZXggMWRiNzc0Yy4uMzIxM2Y2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaApAQCAtMzMsNiArMzMsNyBAQAogI2RlZmluZSBFVEhfWkxFTgk2MAkJLyogTWluLiBvY3RldHMgaW4gZnJhbWUgc2FucyBGQ1MgKi8KICNkZWZpbmUgRVRIX0RBVEFfTEVOCTE1MDAJCS8qIE1heC4gb2N0ZXRzIGluIHBheWxvYWQJICovCiAjZGVmaW5lIEVUSF9GUkFNRV9MRU4JMTUxNAkJLyogTWF4LiBvY3RldHMgaW4gZnJhbWUgc2FucyBGQ1MgKi8KKyNkZWZpbmUgRVRIX0ZDU19MRU4JNAkJLyogT2N0ZXRzIGluIHRoZSBGQ1MJCSAqLwogCiAvKgogICoJVGhlc2UgYXJlIHRoZSBkZWZpbmVkIEV0aGVybmV0IFByb3RvY29sIElEJ3MuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXQuaCBiL2luY2x1ZGUvbGludXgvaW5pdC5oCmluZGV4IGRiYmRiZDEuLjU2ZWM0YzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdC5oCkBAIC00NSw2ICs0NSwxOSBAQAogI2RlZmluZSBfX2V4aXRkYXRhCV9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXygiLmV4aXQuZGF0YSIpKSkKICNkZWZpbmUgX19leGl0X2NhbGwJX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5leGl0Y2FsbC5leGl0IikpKQogCisvKiBtb2Rwb3N0IGNoZWNrIGZvciBzZWN0aW9uIG1pc21hdGNoZXMgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQuCisgKiBBIHNlY3Rpb24gbWlzbWF0Y2ggaGFwcGVucyB3aGVuIHRoZXJlIGFyZSByZWZlcmVuY2VzIGZyb20gYQorICogY29kZSBvciBkYXRhIHNlY3Rpb24gdG8gYW4gaW5pdCBzZWN0aW9uIChib3RoIGNvZGUgb3IgZGF0YSkuCisgKiBUaGUgaW5pdCBzZWN0aW9ucyBhcmUgKGZvciBtb3N0IGFyY2hzKSBkaXNjYXJkZWQgYnkgdGhlIGtlcm5lbAorICogd2hlbiBlYXJseSBpbml0IGhhcyBjb21wbGV0ZWQgc28gYWxsIHN1Y2ggcmVmZXJlbmNlcyBhcmUgcG90ZW50aWFsIGJ1Z3MuCisgKiBGb3IgZXhpdCBzZWN0aW9ucyB0aGUgc2FtZSBpc3N1ZSBleGlzdHMuCisgKiBUaGUgZm9sbG93aW5nIG1hcmtlcnMgYXJlIHVzZWQgZm9yIHRoZSBjYXNlcyB3aGVyZSB0aGUgcmVmZXJlbmNlIHRvCisgKiB0aGUgaW5pdC9leGl0IHNlY3Rpb24gKGNvZGUgb3IgZGF0YSkgaXMgdmFsaWQgYW5kIHdpbGwgdGVhY2ggbW9kcG9zdAorICogbm90IHRvIGlzc3VlIGEgd2FybmluZy4KKyAqIFRoZSBtYXJrZXJzIGZvbGxvdyBzYW1lIHN5bnRheCBydWxlcyBhcyBfX2luaXQgLyBfX2luaXRkYXRhLiAqLworI2RlZmluZSBfX2luaXRfcmVmb2sgICAgIG5vaW5saW5lIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi50ZXh0LmluaXQucmVmb2siKSkpCisjZGVmaW5lIF9faW5pdGRhdGFfcmVmb2sgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEuaW5pdC5yZWZvayIpKSkKKwogI2lmZGVmIE1PRFVMRQogI2RlZmluZSBfX2V4aXQJCV9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXygiLmV4aXQudGV4dCIpKSkKICNlbHNlCkBAIC01MiwxNCArNjUsOSBAQAogI2VuZGlmCiAKIC8qIEZvciBhc3NlbWJseSByb3V0aW5lcyAqLwotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotI2RlZmluZSBfX0lOSVQJCS5zZWN0aW9uCSIudGV4dCIsImF4IgotI2RlZmluZSBfX0lOSVREQVRBCS5zZWN0aW9uCSIuZGF0YSIsImF3IgotI2Vsc2UKICNkZWZpbmUgX19JTklUCQkuc2VjdGlvbgkiLmluaXQudGV4dCIsImF4IgotI2RlZmluZSBfX0lOSVREQVRBCS5zZWN0aW9uCSIuaW5pdC5kYXRhIiwiYXciCi0jZW5kaWYKICNkZWZpbmUgX19GSU5JVAkJLnByZXZpb3VzCisjZGVmaW5lIF9fSU5JVERBVEEJLnNlY3Rpb24JIi5pbml0LmRhdGEiLCJhdyIKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qCkBAIC03Nyw3ICs4NSw4IEBACiBleHRlcm4gdW5zaWduZWQgaW50IHJlc2V0X2RldmljZXM7CiAKIC8qIHVzZWQgYnkgaW5pdC9tYWluLmMgKi8KLWV4dGVybiB2b2lkIHNldHVwX2FyY2goY2hhciAqKik7Cit2b2lkIHNldHVwX2FyY2goY2hhciAqKik7Cit2b2lkIHByZXBhcmVfbmFtZXNwYWNlKHZvaWQpOwogCiAjZW5kaWYKICAgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAppbmRleCBhMmQ5NWZmLi4yNzZjY2FhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKQEAgLTY1LDkgKzY1LDkgQEAKIAkucG9zaXhfdGltZXJzCSA9IExJU1RfSEVBRF9JTklUKHNpZy5wb3NpeF90aW1lcnMpLAkJXAogCS5jcHVfdGltZXJzCT0gSU5JVF9DUFVfVElNRVJTKHNpZy5jcHVfdGltZXJzKSwJCVwKIAkucmxpbQkJPSBJTklUX1JMSU1JVFMsCQkJCQlcCi0JLnBncnAJCT0gMSwJCQkJCQlcCisJLnBncnAJCT0gMCwJCQkJCQlcCiAJLnR0eV9vbGRfcGdycCAgID0gTlVMTCwJCQkJCQlcCi0JeyAuX19zZXNzaW9uICAgICAgPSAxfSwJCQkJCQlcCisJeyAuX19zZXNzaW9uICAgICAgPSAwfSwJCQkJCQlcCiB9CiAKIGV4dGVybiBzdHJ1Y3QgbnNwcm94eSBpbml0X25zcHJveHk7CkBAIC04NCwxMCArODQsMzMgQEAKIAkuY291bnQJCT0gQVRPTUlDX0lOSVQoMSksIAkJCQlcCiAJLmFjdGlvbgkJPSB7IHsgeyAuc2FfaGFuZGxlciA9IE5VTEwsIH0gfSwgfSwJCVwKIAkuc2lnbG9jawk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHNpZ2hhbmQuc2lnbG9jayksCVwKKwkuc2lnbmFsZmRfbGlzdAk9IExJU1RfSEVBRF9JTklUKHNpZ2hhbmQuc2lnbmFsZmRfbGlzdCksCVwKIH0KIAogZXh0ZXJuIHN0cnVjdCBncm91cF9pbmZvIGluaXRfZ3JvdXBzOwogCisjZGVmaW5lIElOSVRfU1RSVUNUX1BJRCB7CQkJCQkJXAorCS5jb3VudCAJCT0gQVRPTUlDX0lOSVQoMSksCQkJCVwKKwkubnIJCT0gMCwgCQkJCQkJXAorCS8qIERvbid0IHB1dCB0aGlzIHN0cnVjdCBwaWQgaW4gcGlkX2hhc2ggKi8JCQlcCisJLnBpZF9jaGFpbgk9IHsgLm5leHQgPSBOVUxMLCAucHByZXYgPSBOVUxMIH0sCQlcCisJLnRhc2tzCQk9IHsJCQkJCQlcCisJCXsgLmZpcnN0ID0gJmluaXRfdGFzay5waWRzW1BJRFRZUEVfUElEXS5ub2RlIH0sCQlcCisJCXsgLmZpcnN0ID0gJmluaXRfdGFzay5waWRzW1BJRFRZUEVfUEdJRF0ubm9kZSB9LAlcCisJCXsgLmZpcnN0ID0gJmluaXRfdGFzay5waWRzW1BJRFRZUEVfU0lEXS5ub2RlIH0sCQlcCisJfSwJCQkJCQkJCVwKKwkucmN1CQk9IFJDVV9IRUFEX0lOSVQsCQkJCVwKK30KKworI2RlZmluZSBJTklUX1BJRF9MSU5LKHR5cGUpIAkJCQkJXAorewkJCQkJCQkJXAorCS5ub2RlID0gewkJCQkJCVwKKwkJLm5leHQgPSBOVUxMLAkJCQkJXAorCQkucHByZXYgPSAmaW5pdF9zdHJ1Y3RfcGlkLnRhc2tzW3R5cGVdLmZpcnN0LAlcCisJfSwJCQkJCQkJXAorCS5waWQgPSAmaW5pdF9zdHJ1Y3RfcGlkLAkJCQlcCit9CisKIC8qCiAgKiAgSU5JVF9UQVNLIGlzIHVzZWQgdG8gc2V0IHVwIHRoZSBmaXJzdCB0YXNrIHRhYmxlLCB0b3VjaCBhdAogICogeW91ciBvd24gcmlzayEuIEJhc2U9MCwgbGltaXQ9MHgxZmZmZmYgKD0yTUIpCkBAIC05NSw3ICsxMTgsNyBAQAogI2RlZmluZSBJTklUX1RBU0sodHNrKQlcCiB7CQkJCQkJCQkJXAogCS5zdGF0ZQkJPSAwLAkJCQkJCVwKLQkudGhyZWFkX2luZm8JPSAmaW5pdF90aHJlYWRfaW5mbywJCQkJXAorCS5zdGFjawkJPSAmaW5pdF90aHJlYWRfaW5mbywJCQkJXAogCS51c2FnZQkJPSBBVE9NSUNfSU5JVCgyKSwJCQkJXAogCS5mbGFncwkJPSAwLAkJCQkJCVwKIAkubG9ja19kZXB0aAk9IC0xLAkJCQkJCVwKQEAgLTEzOCw3ICsxNjEsMTIgQEAKIAkuam91cm5hbF9pbmZvCT0gTlVMTCwJCQkJCQlcCiAJLmNwdV90aW1lcnMJPSBJTklUX0NQVV9USU1FUlModHNrLmNwdV90aW1lcnMpLAkJXAogCS5mc19leGNsCT0gQVRPTUlDX0lOSVQoMCksCQkJCVwKLQkucGlfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwJCQkJXAorCS5waV9sb2NrCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQodHNrLnBpX2xvY2spLAkJXAorCS5waWRzID0gewkJCQkJCQlcCisJCVtQSURUWVBFX1BJRF0gID0gSU5JVF9QSURfTElOSyhQSURUWVBFX1BJRCksCQlcCisJCVtQSURUWVBFX1BHSURdID0gSU5JVF9QSURfTElOSyhQSURUWVBFX1BHSUQpLAkJXAorCQlbUElEVFlQRV9TSURdICA9IElOSVRfUElEX0xJTksoUElEVFlQRV9TSUQpLAkJXAorCX0sCQkJCQkJCQlcCiAJSU5JVF9UUkFDRV9JUlFGTEFHUwkJCQkJCVwKIAlJTklUX0xPQ0tERVAJCQkJCQkJXAogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggMDMxOWY2Ni4uNTMyM2Y2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC00NCw2ICs0NCw5IEBACiAgKiBJUlFGX1RJTUVSIC0gRmxhZyB0byBtYXJrIHRoaXMgaW50ZXJydXB0IGFzIHRpbWVyIGludGVycnVwdAogICogSVJRRl9QRVJDUFUgLSBJbnRlcnJ1cHQgaXMgcGVyIGNwdQogICogSVJRRl9OT0JBTEFOQ0lORyAtIEZsYWcgdG8gZXhjbHVkZSB0aGlzIGludGVycnVwdCBmcm9tIGlycSBiYWxhbmNpbmcKKyAqIElSUUZfSVJRUE9MTCAtIEludGVycnVwdCBpcyB1c2VkIGZvciBwb2xsaW5nIChvbmx5IHRoZSBpbnRlcnJ1cHQgdGhhdCBpcworICogICAgICAgICAgICAgICAgcmVnaXN0ZXJlZCBmaXJzdCBpbiBhbiBzaGFyZWQgaW50ZXJydXB0IGlzIGNvbnNpZGVyZWQgZm9yCisgKiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZSByZWFzb25zKQogICovCiAjZGVmaW5lIElSUUZfRElTQUJMRUQJCTB4MDAwMDAwMjAKICNkZWZpbmUgSVJRRl9TQU1QTEVfUkFORE9NCTB4MDAwMDAwNDAKQEAgLTUyLDIyICs1NSwyOSBAQAogI2RlZmluZSBJUlFGX1RJTUVSCQkweDAwMDAwMjAwCiAjZGVmaW5lIElSUUZfUEVSQ1BVCQkweDAwMDAwNDAwCiAjZGVmaW5lIElSUUZfTk9CQUxBTkNJTkcJMHgwMDAwMDgwMAorI2RlZmluZSBJUlFGX0lSUVBPTEwJCTB4MDAwMDEwMDAKIAogLyoKLSAqIE1pZ3JhdGlvbiBoZWxwZXJzLiBTY2hlZHVsZWQgZm9yIHJlbW92YWwgaW4gMS8yMDA3CisgKiBNaWdyYXRpb24gaGVscGVycy4gU2NoZWR1bGVkIGZvciByZW1vdmFsIGluIDkvMjAwNwogICogRG8gbm90IHVzZSBmb3IgbmV3IGNvZGUgIQogICovCi0jZGVmaW5lIFNBX0lOVEVSUlVQVAkJSVJRRl9ESVNBQkxFRAotI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NCUlSUUZfU0FNUExFX1JBTkRPTQotI2RlZmluZSBTQV9TSElSUQkJSVJRRl9TSEFSRUQKLSNkZWZpbmUgU0FfUFJPQkVJUlEJCUlSUUZfUFJPQkVfU0hBUkVECi0jZGVmaW5lIFNBX1BFUkNQVQkJSVJRRl9QRVJDUFUKK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGxvbmcgX19kZXByZWNhdGVkIGRlcHJlY2F0ZWRfaXJxX2ZsYWcodW5zaWduZWQgbG9uZyBmbGFnKQoreworCXJldHVybiBmbGFnOworfQogCi0jZGVmaW5lIFNBX1RSSUdHRVJfTE9XCQlJUlFGX1RSSUdHRVJfTE9XCi0jZGVmaW5lIFNBX1RSSUdHRVJfSElHSAkJSVJRRl9UUklHR0VSX0hJR0gKLSNkZWZpbmUgU0FfVFJJR0dFUl9GQUxMSU5HCUlSUUZfVFJJR0dFUl9GQUxMSU5HCi0jZGVmaW5lIFNBX1RSSUdHRVJfUklTSU5HCUlSUUZfVFJJR0dFUl9SSVNJTkcKLSNkZWZpbmUgU0FfVFJJR0dFUl9NQVNLCQlJUlFGX1RSSUdHRVJfTUFTSworI2RlZmluZSBTQV9JTlRFUlJVUFQJCWRlcHJlY2F0ZWRfaXJxX2ZsYWcoSVJRRl9ESVNBQkxFRCkKKyNkZWZpbmUgU0FfU0FNUExFX1JBTkRPTQlkZXByZWNhdGVkX2lycV9mbGFnKElSUUZfU0FNUExFX1JBTkRPTSkKKyNkZWZpbmUgU0FfU0hJUlEJCWRlcHJlY2F0ZWRfaXJxX2ZsYWcoSVJRRl9TSEFSRUQpCisjZGVmaW5lIFNBX1BST0JFSVJRCQlkZXByZWNhdGVkX2lycV9mbGFnKElSUUZfUFJPQkVfU0hBUkVEKQorI2RlZmluZSBTQV9QRVJDUFUJCWRlcHJlY2F0ZWRfaXJxX2ZsYWcoSVJRRl9QRVJDUFUpCisKKyNkZWZpbmUgU0FfVFJJR0dFUl9MT1cJCWRlcHJlY2F0ZWRfaXJxX2ZsYWcoSVJRRl9UUklHR0VSX0xPVykKKyNkZWZpbmUgU0FfVFJJR0dFUl9ISUdICQlkZXByZWNhdGVkX2lycV9mbGFnKElSUUZfVFJJR0dFUl9ISUdIKQorI2RlZmluZSBTQV9UUklHR0VSX0ZBTExJTkcJZGVwcmVjYXRlZF9pcnFfZmxhZyhJUlFGX1RSSUdHRVJfRkFMTElORykKKyNkZWZpbmUgU0FfVFJJR0dFUl9SSVNJTkcJZGVwcmVjYXRlZF9pcnFfZmxhZyhJUlFGX1RSSUdHRVJfUklTSU5HKQorI2RlZmluZSBTQV9UUklHR0VSX01BU0sJCWRlcHJlY2F0ZWRfaXJxX2ZsYWcoSVJRRl9UUklHR0VSX01BU0spCiAKIHR5cGVkZWYgaXJxcmV0dXJuX3QgKCppcnFfaGFuZGxlcl90KShpbnQsIHZvaWQgKik7CiAKQEAgLTgzLDExICs5MywxMSBAQAogfTsKIAogZXh0ZXJuIGlycXJldHVybl90IG5vX2FjdGlvbihpbnQgY3BsLCB2b2lkICpkZXZfaWQpOwotZXh0ZXJuIGludCByZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQsIGlycV9oYW5kbGVyX3QgaGFuZGxlciwKK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIHJlcXVlc3RfaXJxKHVuc2lnbmVkIGludCwgaXJxX2hhbmRsZXJfdCBoYW5kbGVyLAogCQkgICAgICAgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciAqLCB2b2lkICopOwogZXh0ZXJuIHZvaWQgZnJlZV9pcnEodW5zaWduZWQgaW50LCB2b2lkICopOwogCi1leHRlcm4gaW50IGRldm1fcmVxdWVzdF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaXJxLAorZXh0ZXJuIGludCBfX211c3RfY2hlY2sgZGV2bV9yZXF1ZXN0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpcnEsCiAJCQkgICAgaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzLAogCQkJICAgIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCk7CiBleHRlcm4gdm9pZCBkZXZtX2ZyZWVfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKQEAgLTIzMSw2ICsyNDEsMTYgQEAKICNkZWZpbmUgc2F2ZV9hbmRfY2xpKHgpCXNhdmVfYW5kX2NsaSgmeCkKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKKy8qIFNvbWUgYXJjaGl0ZWN0dXJlcyBtaWdodCBpbXBsZW1lbnQgbGF6eSBlbmFibGluZy9kaXNhYmxpbmcgb2YKKyAqIGludGVycnVwdHMuIEluIHNvbWUgY2FzZXMsIHN1Y2ggYXMgc3RvcF9tYWNoaW5lLCB3ZSBtaWdodCB3YW50CisgKiB0byBlbnN1cmUgdGhhdCBhZnRlciBhIGxvY2FsX2lycV9kaXNhYmxlKCksIGludGVycnVwdHMgaGF2ZQorICogcmVhbGx5IGJlZW4gZGlzYWJsZWQgaW4gaGFyZHdhcmUuIFN1Y2ggYXJjaGl0ZWN0dXJlcyBuZWVkIHRvCisgKiBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBob29rLgorICovCisjaWZuZGVmIGhhcmRfaXJxX2Rpc2FibGUKKyNkZWZpbmUgaGFyZF9pcnFfZGlzYWJsZSgpCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKIC8qIFBMRUFTRSwgYXZvaWQgdG8gYWxsb2NhdGUgbmV3IHNvZnRpcnFzLCBpZiB5b3UgbmVlZCBub3QgX3JlYWxseV8gaGlnaAogICAgZnJlcXVlbmN5IHRocmVhZGVkIGpvYiBzY2hlZHVsaW5nLiBGb3IgYWxtb3N0IGFsbCB0aGUgcHVycG9zZXMKICAgIHRhc2tsZXRzIGFyZSBtb3JlIHRoYW4gZW5vdWdoLiBGLmUuIGFsbCBzZXJpYWwgZGV2aWNlIEJIcyBldApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pby5oIGIvaW5jbHVkZS9saW51eC9pby5oCmluZGV4IDA5ZDM1MTIuLjg0MjNkZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvLmgKQEAgLTI3LDggKzI3LDE2IEBACiB2b2lkIF9faW93cml0ZTMyX2NvcHkodm9pZCBfX2lvbWVtICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGNvdW50KTsKIHZvaWQgX19pb3dyaXRlNjRfY29weSh2b2lkIF9faW9tZW0gKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgY291bnQpOwogCisjaWZkZWYgQ09ORklHX01NVQogaW50IGlvcmVtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGlvcmVtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogLyoKICAqIE1hbmFnZWQgaW9tYXAgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvY3RsMzIuaCBiL2luY2x1ZGUvbGludXgvaW9jdGwzMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDg4MDlkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvaW9jdGwzMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotI2lmbmRlZiBJT0NUTDMyX0gKLSNkZWZpbmUgSU9DVEwzMl9IIDEKLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CS8qIGZvciBfX2RlcHJlY2F0ZWQgKi8KLQotc3RydWN0IGZpbGU7Ci0KLXR5cGVkZWYgaW50ICgqaW9jdGxfdHJhbnNfaGFuZGxlcl90KSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKLQkJCQkJdW5zaWduZWQgbG9uZywgc3RydWN0IGZpbGUgKik7Ci0KLXN0cnVjdCBpb2N0bF90cmFucyB7Ci0JdW5zaWduZWQgbG9uZyBjbWQ7Ci0JaW9jdGxfdHJhbnNfaGFuZGxlcl90IGhhbmRsZXI7Ci0Jc3RydWN0IGlvY3RsX3RyYW5zICpuZXh0OwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwYy5oIGIvaW5jbHVkZS9saW51eC9pcGMuaAppbmRleCA2ZGE2NzcyLi4xOTgwODY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwYy5oCisrKyBiL2luY2x1ZGUvbGludXgvaXBjLmgKQEAgLTkyLDE2ICs5MiwxOSBAQAogCiAjaWZkZWYgQ09ORklHX1NZU1ZJUEMKICNkZWZpbmUgSU5JVF9JUENfTlMobnMpCQkubnMJCT0gJmluaXRfaXBjX25zLAotZXh0ZXJuIGludCBjb3B5X2lwY3ModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIHN0cnVjdCBpcGNfbmFtZXNwYWNlICpjb3B5X2lwY3ModW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkJCXN0cnVjdCBpcGNfbmFtZXNwYWNlICpucyk7CiAjZWxzZQogI2RlZmluZSBJTklUX0lQQ19OUyhucykKLXN0YXRpYyBpbmxpbmUgaW50IGNvcHlfaXBjcyh1bnNpZ25lZCBsb25nIGZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwY19uYW1lc3BhY2UgKmNvcHlfaXBjcyh1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCQkJc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zKQoreworCXJldHVybiBuczsKK30KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lQQ19OUwogZXh0ZXJuIHZvaWQgZnJlZV9pcGNfbnMoc3RydWN0IGtyZWYgKmtyZWYpOwotZXh0ZXJuIGludCB1bnNoYXJlX2lwY3ModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IGlwY19uYW1lc3BhY2UgKipucyk7CiAjZW5kaWYKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqZ2V0X2lwY19ucyhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwdjYuaCBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCmluZGV4IDA5ZWEwMWEuLjY0OGJkMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCkBAIC0yMDksOSArMjA5LDggQEAKIAlERVZDT05GX1JUUl9QUk9CRV9JTlRFUlZBTCwKIAlERVZDT05GX0FDQ0VQVF9SQV9SVF9JTkZPX01BWF9QTEVOLAogCURFVkNPTkZfUFJPWFlfTkRQLAotCV9fREVWQ09ORl9PUFRJTUlTVElDX0RBRCwKLQlERVZDT05GX0FDQ0VQVF9TT1VSQ0VfUk9VVEUsCiAJREVWQ09ORl9PUFRJTUlTVElDX0RBRCwKKwlERVZDT05GX0FDQ0VQVF9TT1VSQ0VfUk9VVEUsCiAJREVWQ09ORl9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJkYS5oIGIvaW5jbHVkZS9saW51eC9pcmRhLmgKaW5kZXggMDlkOGYxMC4uOTQ1YmEzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcmRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcmRhLmgKQEAgLTE2LDcgKzE2LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqICAKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggYTY4OTk0MC4uMTY5NTA1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC0xNDcsOCArMTQ3LDYgQEAKICAqIEBkaXI6CQkvcHJvYy9pcnEvIHByb2NmcyBlbnRyeQogICogQGFmZmluaXR5X2VudHJ5OgkvcHJvYy9pcnEvc21wX2FmZmluaXR5IHByb2NmcyBlbnRyeSBvbiBTTVAKICAqIEBuYW1lOgkJZmxvdyBoYW5kbGVyIG5hbWUgZm9yIC9wcm9jL2ludGVycnVwdHMgb3V0cHV0Ci0gKgotICogUGFkIHRoaXMgb3V0IHRvIDMyIGJ5dGVzIGZvciBjYWNoZSBhbmQgaW5kZXhpbmcgcmVhc29ucy4KICAqLwogc3RydWN0IGlycV9kZXNjIHsKIAlpcnFfZmxvd19oYW5kbGVyX3QJaGFuZGxlX2lycTsKQEAgLTE3NSw3ICsxNzMsNyBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqZGlyOwogI2VuZGlmCiAJY29uc3QgY2hhcgkJKm5hbWU7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKK30gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKIAogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY1tOUl9JUlFTXTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2RuL2NhcGl1dGlsLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4vY2FwaXV0aWwuaAppbmRleCA2M2JkOWNmLi41YTUyZjJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzZG4vY2FwaXV0aWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG4vY2FwaXV0aWwuaApAQCAtMTg3LDcgKzE4Nyw2IEBACiAjZGVmaW5lCUNERUJVR19TSVpFCTEwMjQKICNkZWZpbmUJQ0RFQlVHX0dTSVpFCTQwOTYKIAotX2NkZWJidWYgKmNkZWJidWZfYWxsb2Modm9pZCk7CiB2b2lkIGNkZWJidWZfZnJlZShfY2RlYmJ1ZiAqY2RiKTsKIGludCBjZGVidWdfaW5pdCh2b2lkKTsKIHZvaWQgY2RlYnVnX2V4aXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzZG5fZGl2ZXJ0aWYuaCBiL2luY2x1ZGUvbGludXgvaXNkbl9kaXZlcnRpZi5oCmluZGV4IDBlN2U0NGMuLjA3ODIxY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXNkbl9kaXZlcnRpZi5oCisrKyBiL2luY2x1ZGUvbGludXgvaXNkbl9kaXZlcnRpZi5oCkBAIC0yNCw2ICsyNCwxMCBAQAogI2RlZmluZSBESVZFUlRfUkVMX0VSUiAgMHgwNCAgLyogbW9kdWxlIG5vdCByZWdpc3RlcmVkICovCiAjZGVmaW5lIERJVkVSVF9SRUdfTkFNRSBpc2RuX3JlZ2lzdGVyX2RpdmVydAogCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2lzZG5pZi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBzdHJ1Y3R1cmUgZXhjaGFuZ2luZyBkYXRhIGJldHdlZW4gaXNkbiBobCBhbmQgZGl2ZXJ0IG1vZHVsZSAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCkBAIC00MCwzICs0NCw0IEBACiAvKiBmdW5jdGlvbiByZWdpc3RlciAqLwogLyoqKioqKioqKioqKioqKioqKioqKi8KIGV4dGVybiBpbnQgRElWRVJUX1JFR19OQU1FKGlzZG5fZGl2ZXJ0X2lmICopOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmggYi9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKaW5kZXggM2UzYjkyZC4uMTIxNzhkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCisrKyBiL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaApAQCAtMzAsNiArMzAsOSBAQAogLyogTG9vayB1cCBhIGtlcm5lbCBzeW1ib2wgYW5kIHByaW50IGl0IHRvIHRoZSBrZXJuZWwgbWVzc2FnZXMuICovCiBleHRlcm4gdm9pZCBfX3ByaW50X3N5bWJvbChjb25zdCBjaGFyICpmbXQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKK2ludCBsb29rdXBfc3ltYm9sX25hbWUodW5zaWduZWQgbG9uZyBhZGRyLCBjaGFyICpzeW1uYW1lKTsKK2ludCBsb29rdXBfc3ltYm9sX2F0dHJzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyAqc2l6ZSwgdW5zaWduZWQgbG9uZyAqb2Zmc2V0LCBjaGFyICptb2RuYW1lLCBjaGFyICpuYW1lKTsKKwogI2Vsc2UgLyogIUNPTkZJR19LQUxMU1lNUyAqLwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga2FsbHN5bXNfbG9va3VwX25hbWUoY29uc3QgY2hhciAqbmFtZSkKQEAgLTU4LDYgKzYxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGxvb2t1cF9zeW1ib2xfbmFtZSh1bnNpZ25lZCBsb25nIGFkZHIsIGNoYXIgKnN5bW5hbWUpCit7CisJcmV0dXJuIC1FUkFOR0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvb2t1cF9zeW1ib2xfYXR0cnModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpzaXplLCB1bnNpZ25lZCBsb25nICpvZmZzZXQsIGNoYXIgKm1vZG5hbWUsIGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIC1FUkFOR0U7Cit9CisKIC8qIFN0dXBpZCB0aGF0IHRoaXMgZG9lcyBub3RoaW5nLCBidXQgSSBkaWRuJ3QgY3JlYXRlIHRoaXMgbWVzcy4gKi8KICNkZWZpbmUgX19wcmludF9zeW1ib2woZm10LCBhZGRyKQogI2VuZGlmIC8qQ09ORklHX0tBTExTWU1TKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2RlYnVnLmggYi9pbmNsdWRlL2xpbnV4L2tkZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjM4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2tkZWJ1Zy5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX0xJTlVYX0tERUJVR19ICisjZGVmaW5lIF9MSU5VWF9LREVCVUdfSAorCisjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgorCitzdHJ1Y3QgZGllX2FyZ3MgeworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWNvbnN0IGNoYXIgKnN0cjsKKwlsb25nIGVycjsKKwlpbnQgdHJhcG5yOworCWludCBzaWducjsKK307CisKK2ludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitpbnQgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CisKK2ludCBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKKwkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyLCBpbnQgdHJhcCwgaW50IHNpZyk7CisKKyNlbmRpZiAvKiBfTElOVVhfS0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDE0NGI2MTUuLjQ1MzUzZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtNDEsNiArNDEsMTYgQEAKICNkZWZpbmUgRElWX1JPVU5EX1VQKG4sZCkgKCgobikgKyAoZCkgLSAxKSAvIChkKSkKICNkZWZpbmUgcm91bmR1cCh4LCB5KSAoKCgoeCkgKyAoKHkpIC0gMSkpIC8gKHkpKSAqICh5KSkKIAorLyoqCisgKiB1cHBlcl8zMl9iaXRzIC0gcmV0dXJuIGJpdHMgMzItNjMgb2YgYSBudW1iZXIKKyAqIEBuOiB0aGUgbnVtYmVyIHdlJ3JlIGFjY2Vzc2luZworICoKKyAqIEEgYmFzaWMgc2hpZnQtcmlnaHQgb2YgYSA2NC0gb3IgMzItYml0IHF1YW50aXR5LiAgVXNlIHRoaXMgdG8gc3VwcHJlc3MKKyAqIHRoZSAicmlnaHQgc2hpZnQgY291bnQgPj0gd2lkdGggb2YgdHlwZSIgd2FybmluZyB3aGVuIHRoYXQgcXVhbnRpdHkgaXMKKyAqIDMyLWJpdHMuCisgKi8KKyNkZWZpbmUgdXBwZXJfMzJfYml0cyhuKSAoKHUzMikoKChuKSA+PiAxNikgPj4gMTYpKQorCiAjZGVmaW5lCUtFUk5fRU1FUkcJIjwwPiIJLyogc3lzdGVtIGlzIHVudXNhYmxlCQkJKi8KICNkZWZpbmUJS0VSTl9BTEVSVAkiPDE+IgkvKiBhY3Rpb24gbXVzdCBiZSB0YWtlbiBpbW1lZGlhdGVseQkqLwogI2RlZmluZQlLRVJOX0NSSVQJIjwyPiIJLyogY3JpdGljYWwgY29uZGl0aW9ucwkJCSovCkBAIC0yMDMsNiArMjEzLDE3IEBACiAKIGV4dGVybiB2b2lkIGR1bXBfc3RhY2sodm9pZCk7CiAKK2VudW0geworCURVTVBfUFJFRklYX05PTkUsCisJRFVNUF9QUkVGSVhfQUREUkVTUywKKwlEVU1QX1BSRUZJWF9PRkZTRVQKK307CitleHRlcm4gdm9pZCBoZXhfZHVtcF90b19idWZmZXIoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBjaGFyICpsaW5lYnVmLAorCQkJCXNpemVfdCBsaW5lYnVmbGVuKTsKK2V4dGVybiB2b2lkIHByaW50X2hleF9kdW1wKGNvbnN0IGNoYXIgKmxldmVsLCBpbnQgcHJlZml4X3R5cGUsCisJCQkJdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKKyNkZWZpbmUgaGV4X2FzYyh4KQkiMDEyMzQ1Njc4OWFiY2RlZiJbeF0KKwogI2lmZGVmIERFQlVHCiAvKiBJZiB5b3UgYXJlIHdyaXRpbmcgYSBkcml2ZXIsIHBsZWFzZSB1c2UgZGV2X2RiZyBpbnN0ZWFkICovCiAjZGVmaW5lIHByX2RlYnVnKGZtdCxhcmcuLi4pIFwKQEAgLTI4OSw4ICszMTAsOCBAQAogICoKICAqLwogI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpICh7CQkJXAotICAgICAgICBjb25zdCB0eXBlb2YoICgodHlwZSAqKTApLT5tZW1iZXIgKSAqX19tcHRyID0gKHB0cik7CVwKLSAgICAgICAgKHR5cGUgKikoIChjaGFyICopX19tcHRyIC0gb2Zmc2V0b2YodHlwZSxtZW1iZXIpICk7fSkKKwljb25zdCB0eXBlb2YoICgodHlwZSAqKTApLT5tZW1iZXIgKSAqX19tcHRyID0gKHB0cik7CVwKKwkodHlwZSAqKSggKGNoYXIgKilfX21wdHIgLSBvZmZzZXRvZih0eXBlLG1lbWJlcikgKTt9KQogCiAvKgogICogQ2hlY2sgYXQgY29tcGlsZSB0aW1lIHRoYXQgc29tZXRoaW5nIGlzIG9mIGEgcGFydGljdWxhciB0eXBlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlYy5oIGIvaW5jbHVkZS9saW51eC9rZXhlYy5oCmluZGV4IDY5NmU1ZWMuLjhjMmM3ZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tleGVjLmgKQEAgLTcsNiArNyw4IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KIAogLyogVmVyaWZ5IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBtYWNyb3MgYXJlIGRlZmluZWQgKi8KQEAgLTMxLDYgKzMzLDE5IEBACiAjZXJyb3IgS0VYRUNfQVJDSCBub3QgZGVmaW5lZAogI2VuZGlmCiAKKyNkZWZpbmUgS0VYRUNfTk9URV9IRUFEX0JZVEVTIEFMSUdOKHNpemVvZihzdHJ1Y3QgZWxmX25vdGUpLCA0KQorI2RlZmluZSBLRVhFQ19DT1JFX05PVEVfTkFNRSAiQ09SRSIKKyNkZWZpbmUgS0VYRUNfQ09SRV9OT1RFX05BTUVfQllURVMgQUxJR04oc2l6ZW9mKEtFWEVDX0NPUkVfTk9URV9OQU1FKSwgNCkKKyNkZWZpbmUgS0VYRUNfQ09SRV9OT1RFX0RFU0NfQllURVMgQUxJR04oc2l6ZW9mKHN0cnVjdCBlbGZfcHJzdGF0dXMpLCA0KQorLyoKKyAqIFRoZSBwZXItY3B1IG5vdGVzIGFyZWEgaXMgYSBsaXN0IG9mIG5vdGVzIHRlcm1pbmF0ZWQgYnkgYSAiTlVMTCIKKyAqIG5vdGUgaGVhZGVyLiAgRm9yIGtkdW1wLCB0aGUgY29kZSBpbiB2bWNvcmUuYyBydW5zIGluIHRoZSBjb250ZXh0CisgKiBvZiB0aGUgc2Vjb25kIGtlcm5lbCB0byBjb21iaW5lIHRoZW0gaW50byBvbmUgbm90ZS4KKyAqLworI2RlZmluZSBLRVhFQ19OT1RFX0JZVEVTICggKEtFWEVDX05PVEVfSEVBRF9CWVRFUyAqIDIpICsJCVwKKwkJCSAgICBLRVhFQ19DT1JFX05PVEVfTkFNRV9CWVRFUyArCQlcCisJCQkgICAgS0VYRUNfQ09SRV9OT1RFX0RFU0NfQllURVMgKQorCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudHMgdGhhdCBhcmUgdXNlZCB3aGVuIGxvYWRpbmcKICAqIGtlcm5lbCBiaW5hcmllcy4KQEAgLTEzNiw3ICsxNTEsNyBAQAogLyogTG9jYXRpb24gb2YgYSByZXNlcnZlZCByZWdpb24gdG8gaG9sZCB0aGUgY3Jhc2gga2VybmVsLgogICovCiBleHRlcm4gc3RydWN0IHJlc291cmNlIGNyYXNoa19yZXM7Ci10eXBlZGVmIHUzMiBub3RlX2J1Zl90W01BWF9OT1RFX0JZVEVTLzRdOwordHlwZWRlZiB1MzIgbm90ZV9idWZfdFtLRVhFQ19OT1RFX0JZVEVTLzRdOwogZXh0ZXJuIG5vdGVfYnVmX3QgKmNyYXNoX25vdGVzOwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21hbGxvY19zaXplcy5oIGIvaW5jbHVkZS9saW51eC9rbWFsbG9jX3NpemVzLmgKaW5kZXggYmRhMjNlMC4uZTU3NmI4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbWFsbG9jX3NpemVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbWFsbG9jX3NpemVzLmgKQEAgLTE5LDE3ICsxOSwyNyBAQAogCUNBQ0hFKDMyNzY4KQogCUNBQ0hFKDY1NTM2KQogCUNBQ0hFKDEzMTA3MikKLSNpZiAoTlJfQ1BVUyA+IDUxMikgfHwgKE1BWF9OVU1OT0RFUyA+IDI1NikgfHwgIWRlZmluZWQoQ09ORklHX01NVSkKKyNpZiBLTUFMTE9DX01BWF9TSVpFID49IDI2MjE0NAogCUNBQ0hFKDI2MjE0NCkKICNlbmRpZgotI2lmbmRlZiBDT05GSUdfTU1VCisjaWYgS01BTExPQ19NQVhfU0laRSA+PSA1MjQyODgKIAlDQUNIRSg1MjQyODgpCisjZW5kaWYKKyNpZiBLTUFMTE9DX01BWF9TSVpFID49IDEwNDg1NzYKIAlDQUNIRSgxMDQ4NTc2KQotI2lmZGVmIENPTkZJR19MQVJHRV9BTExPQ1MKKyNlbmRpZgorI2lmIEtNQUxMT0NfTUFYX1NJWkUgPj0gMjA5NzE1MgogCUNBQ0hFKDIwOTcxNTIpCisjZW5kaWYKKyNpZiBLTUFMTE9DX01BWF9TSVpFID49IDQxOTQzMDQKIAlDQUNIRSg0MTk0MzA0KQorI2VuZGlmCisjaWYgS01BTExPQ19NQVhfU0laRSA+PSA4Mzg4NjA4CiAJQ0FDSEUoODM4ODYwOCkKKyNlbmRpZgorI2lmIEtNQUxMT0NfTUFYX1NJWkUgPj0gMTY3NzcyMTYKIAlDQUNIRSgxNjc3NzIxNikKKyNlbmRpZgorI2lmIEtNQUxMT0NfTUFYX1NJWkUgPj0gMzM1NTQ0MzIKIAlDQUNIRSgzMzU1NDQzMikKLSNlbmRpZiAvKiBDT05GSUdfTEFSR0VfQUxMT0NTICovCi0jZW5kaWYgLyogQ09ORklHX01NVSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaCBiL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oCmluZGV4IDc2OWJlMzkuLjIzYWRmNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oCisrKyBiL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oCkBAIC03OCw3ICs3OCw3IEBACiAJa3Byb2JlX29wY29kZV90ICphZGRyOwogCiAJLyogQWxsb3cgdXNlciB0byBpbmRpY2F0ZSBzeW1ib2wgbmFtZSBvZiB0aGUgcHJvYmUgcG9pbnQgKi8KLQljaGFyICpzeW1ib2xfbmFtZTsKKwljb25zdCBjaGFyICpzeW1ib2xfbmFtZTsKIAogCS8qIE9mZnNldCBpbnRvIHRoZSBzeW1ib2wgKi8KIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwpAQCAtMTIzLDEyICsxMjMsMTggQEAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlX2N0bGJsaywga3Byb2JlX2N0bGJsayk7CiAKICNpZmRlZiBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMKLWV4dGVybiB2b2lkIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZSAqcnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCisJCQkJICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIGludCBhcmNoX3RyYW1wb2xpbmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApOwogI2Vsc2UgLyogQVJDSF9TVVBQT1JUU19LUkVUUFJPQkVTICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9wcmVwYXJlX2tyZXRwcm9iZShzdHJ1Y3Qga3JldHByb2JlICpycCwKIAkJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiB9CitzdGF0aWMgaW5saW5lIGludCBhcmNoX3RyYW1wb2xpbmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYgLyogQVJDSF9TVVBQT1JUU19LUkVUUFJPQkVTICovCiAvKgogICogRnVuY3Rpb24tcmV0dXJuIHByb2JlIC0KQEAgLTE1Nyw2ICsxNjMsMTYgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQga3JldHByb2JlX2Fzc2VydChzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwKKwl1bnNpZ25lZCBsb25nIG9yaWdfcmV0X2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgdHJhbXBvbGluZV9hZGRyZXNzKQoreworCWlmICghb3JpZ19yZXRfYWRkcmVzcyB8fCAob3JpZ19yZXRfYWRkcmVzcyA9PSB0cmFtcG9saW5lX2FkZHJlc3MpKSB7CisJCXByaW50aygia3JldHByb2JlIEJVRyE6IFByb2Nlc3Npbmcga3JldHByb2JlICVwIEAgJXBcbiIsCisJCQkJcmktPnJwLCByaS0+cnAtPmtwLmFkZHIpOworCQlCVUcoKTsKKwl9Cit9CisKIGV4dGVybiBzcGlubG9ja190IGtyZXRwcm9iZV9sb2NrOwogZXh0ZXJuIHN0cnVjdCBtdXRleCBrcHJvYmVfbXV0ZXg7CiBleHRlcm4gaW50IGFyY2hfcHJlcGFyZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCk7CkBAIC0xOTksOCArMjE1LDYgQEAKIGludCByZWdpc3Rlcl9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZSAqcnApOwogdm9pZCB1bnJlZ2lzdGVyX2tyZXRwcm9iZShzdHJ1Y3Qga3JldHByb2JlICpycCk7CiAKLXN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKmdldF9mcmVlX3JwX2luc3Qoc3RydWN0IGtyZXRwcm9iZSAqcnApOwotdm9pZCBhZGRfcnBfaW5zdChzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSk7CiB2b2lkIGtwcm9iZV9mbHVzaF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGspOwogdm9pZCByZWN5Y2xlX3JwX2luc3Qoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkKTsKICNlbHNlIC8qIENPTkZJR19LUFJPQkVTICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaCBiL2luY2x1ZGUvbGludXgva3RocmVhZC5oCmluZGV4IDFjNjVlN2EuLjAwZGQ5NTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3RocmVhZC5oCisrKyBiL2luY2x1ZGUvbGludXgva3RocmVhZC5oCkBAIC0zMCw0ICszMCw3IEBACiBpbnQga3RocmVhZF9zdG9wKHN0cnVjdCB0YXNrX3N0cnVjdCAqayk7CiBpbnQga3RocmVhZF9zaG91bGRfc3RvcCh2b2lkKTsKIAoraW50IGt0aHJlYWRkKHZvaWQgKnVudXNlZCk7CitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICprdGhyZWFkZF90YXNrOworCiAjZW5kaWYgLyogX0xJTlVYX0tUSFJFQURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdGltZS5oIGIvaW5jbHVkZS9saW51eC9rdGltZS5oCmluZGV4IDgxYmI5YzcuLmM3NjI5NTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t0aW1lLmgKQEAgLTQzLDcgKzQzLDcgQEAKICAqIHBsYWluIHNjYWxhciBuYW5vc2Vjb25kIGJhc2VkIHJlcHJlc2VudGF0aW9uIGNhbiBiZSBzZWxlY3RlZCBieSB0aGUKICAqIGNvbmZpZyBzd2l0Y2ggQ09ORklHX0tUSU1FX1NDQUxBUi4KICAqLwotdHlwZWRlZiB1bmlvbiB7Cit1bmlvbiBrdGltZSB7CiAJczY0CXR2NjQ7CiAjaWYgQklUU19QRVJfTE9ORyAhPSA2NCAmJiAhZGVmaW5lZChDT05GSUdfS1RJTUVfU0NBTEFSKQogCXN0cnVjdCB7CkBAIC01NCw3ICs1NCw5IEBACiAjIGVuZGlmCiAJfSB0djsKICNlbmRpZgotfSBrdGltZV90OworfTsKKwordHlwZWRlZiB1bmlvbiBrdGltZSBrdGltZV90OwkJLyogS2lsbCB0aGlzICovCiAKICNkZWZpbmUgS1RJTUVfTUFYCQkJKChzNjQpfigodTY0KTEgPDwgNjMpKQogI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggZDhjZmM3Mi4uODVmN2IxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogCUFUQV9ERkxBR19QSU8JCT0gKDEgPDwgOCksIC8qIGRldmljZSBsaW1pdGVkIHRvIFBJTyBtb2RlICovCiAJQVRBX0RGTEFHX05DUV9PRkYJPSAoMSA8PCA5KSwgLyogZGV2aWNlIGxpbWl0ZWQgdG8gbm9uLU5DUSBtb2RlICovCi0JQVRBX0RGTEFHX1NVU1BFTkRFRAk9ICgxIDw8IDEwKSwgLyogZGV2aWNlIHN1c3BlbmRlZCAqLworCUFUQV9ERkxBR19TUFVORE9XTgk9ICgxIDw8IDEwKSwgLyogWFhYOiBmb3Igc3BpbmRvd25fY29tcGF0ICovCiAJQVRBX0RGTEFHX0lOSVRfTUFTSwk9ICgxIDw8IDE2KSAtIDEsCiAKIAlBVEFfREZMQUdfREVUQUNICT0gKDEgPDwgMTYpLApAQCAtMTc0LDYgKzE3NCw3IEBACiAJQVRBX0ZMQUdfU0VUWEZFUl9QT0xMSU5HPSAoMSA8PCAxNCksIC8qIHVzZSBwb2xsaW5nIGZvciBTRVRYRkVSICovCiAJQVRBX0ZMQUdfSUdOX1NJTVBMRVgJPSAoMSA8PCAxNSksIC8qIGlnbm9yZSBTSU1QTEVYICovCiAJQVRBX0ZMQUdfTk9fSU9SRFkJPSAoMSA8PCAxNiksIC8qIGNvbnRyb2xsZXIgbGFja3MgaW9yZHkgKi8KKwlBVEFfRkxBR19BQ1BJX1NBVEEJPSAoMSA8PCAxNyksIC8qIG5lZWQgbmF0aXZlIFNBVEEgQUNQSSBsYXlvdXQgKi8KIAogCS8qIFRoZSBmb2xsb3dpbmcgZmxhZyBiZWxvbmdzIHRvIGFwLT5wZmxhZ3MgYnV0IGlzIGtlcHQgaW4KIAkgKiBhcC0+ZmxhZ3MgYmVjYXVzZSBpdCdzIHJlZmVyZW5jZWQgaW4gbWFueSBMTERzIGFuZCB3aWxsIGJlCkBAIC0xOTEsNiArMTkyLDcgQEAKIAlBVEFfUEZMQUdfTE9BRElORwk9ICgxIDw8IDQpLCAvKiBib290L2xvYWRpbmcgcHJvYmUgKi8KIAlBVEFfUEZMQUdfVU5MT0FESU5HCT0gKDEgPDwgNSksIC8qIG1vZHVsZSBpcyB1bmxvYWRpbmcgKi8KIAlBVEFfUEZMQUdfU0NTSV9IT1RQTFVHCT0gKDEgPDwgNiksIC8qIFNDU0kgaG90cGx1ZyBzY2hlZHVsZWQgKi8KKwlBVEFfUEZMQUdfSU5JVElBTElaSU5HCT0gKDEgPDwgNyksIC8qIGJlaW5nIGluaXRpYWxpemVkLCBkb24ndCB0b3VjaCAqLwogCiAJQVRBX1BGTEFHX0ZMVVNIX1BPUlRfVEFTSyA9ICgxIDw8IDE2KSwgLyogZmx1c2ggcG9ydCB0YXNrICovCiAJQVRBX1BGTEFHX1NVU1BFTkRFRAk9ICgxIDw8IDE3KSwgLyogcG9ydCBpcyBzdXNwZW5kZWQgKHBvd2VyKSAqLwpAQCAtMjU0LDEwICsyNTYsNiBAQAogCUFUQV9ETUFfUEFEX1NaCQk9IDQsCiAJQVRBX0RNQV9QQURfQlVGX1NaCT0gQVRBX0RNQV9QQURfU1ogKiBBVEFfTUFYX1FVRVVFLAogCi0JLyogbWFza3MgZm9yIHBvcnQgZnVuY3Rpb25zICovCi0JQVRBX1BPUlRfUFJJTUFSWQk9ICgxIDw8IDApLAotCUFUQV9QT1JUX1NFQ09OREFSWQk9ICgxIDw8IDEpLAotCiAJLyogZXJpbmcgc2l6ZSAqLwogCUFUQV9FUklOR19TSVpFCQk9IDMyLAogCkBAIC0yNjgsMTMgKzI2Niw5IEBACiAJQVRBX0VIX1JFVkFMSURBVEUJPSAoMSA8PCAwKSwKIAlBVEFfRUhfU09GVFJFU0VUCT0gKDEgPDwgMSksCiAJQVRBX0VIX0hBUkRSRVNFVAk9ICgxIDw8IDIpLAotCUFUQV9FSF9TVVNQRU5ECQk9ICgxIDw8IDMpLAotCUFUQV9FSF9SRVNVTUUJCT0gKDEgPDwgNCksCi0JQVRBX0VIX1BNX0ZSRUVaRQk9ICgxIDw8IDUpLAogCiAJQVRBX0VIX1JFU0VUX01BU0sJPSBBVEFfRUhfU09GVFJFU0VUIHwgQVRBX0VIX0hBUkRSRVNFVCwKLQlBVEFfRUhfUEVSREVWX01BU0sJPSBBVEFfRUhfUkVWQUxJREFURSB8IEFUQV9FSF9TVVNQRU5EIHwKLQkJCQkgIEFUQV9FSF9SRVNVTUUgfCBBVEFfRUhfUE1fRlJFRVpFLAorCUFUQV9FSF9QRVJERVZfTUFTSwk9IEFUQV9FSF9SRVZBTElEQVRFLAogCiAJLyogYXRhX2VoX2luZm8tPmZsYWdzICovCiAJQVRBX0VISV9IT1RQTFVHR0VECT0gKDEgPDwgMCksICAvKiBjb3VsZCBoYXZlIGJlZW4gaG90cGx1Z2dlZCAqLwpAQCAtMjk2LDE4ICsyOTAsOCBAQAogCiAJLyogaG93IGhhcmQgYXJlIHdlIGdvbm5hIHRyeSB0byBwcm9iZS9yZWNvdmVyIGRldmljZXMgKi8KIAlBVEFfUFJPQkVfTUFYX1RSSUVTCT0gMywKLQlBVEFfRUhfUkVTRVRfVFJJRVMJPSAzLAogCUFUQV9FSF9ERVZfVFJJRVMJPSAzLAogCi0JLyogRHJpdmUgc3BpbnVwIHRpbWUgKHRpbWUgZnJvbSBwb3dlci1vbiB0byB0aGUgZmlyc3QgRDJIIEZJUykKLQkgKiBpbiBtc2VjcyAtIDhzIGN1cnJlbnRseS4gIEZhaWxpbmcgdG8gZ2V0IHJlYWR5IGluIHRoaXMgdGltZQotCSAqIGlzbid0IGNyaXRpY2FsLiAgSXQgd2lsbCByZXN1bHQgaW4gcmVzZXQgZmFpbHVyZSBmb3IKLQkgKiBjb250cm9sbGVycyB3aGljaCBjYW4ndCB3YWl0IGZvciB0aGUgZmlyc3QgRDJIIEZJUy4gIGxpYmF0YQotCSAqIHdpbGwgcmV0cnksIHNvIGl0IGp1c3QgaGFzIHRvIGJlIGxvbmcgZW5vdWdoIHRvIHNwaW4gdXAKLQkgKiBtb3N0IGRldmljZXMuCi0JICovCi0JQVRBX1NQSU5VUF9XQUlUCQk9IDgwMDAsCi0KIAkvKiBIb3JrYWdlIHR5cGVzLiBNYXkgYmUgc2V0IGJ5IGxpYmF0YSBvciBjb250cm9sbGVyIG9uIGRyaXZlcwogCSAgIChzb21lIGhvcmthZ2UgbWF5IGJlIGRyaXZlL2NvbnRyb2xsZXIgcGFpciBkZXBlbmRhbnQgKi8KIApAQCAtMzQ4LDggKzMzMiw5IEBACiAKIC8qIHR5cGVkZWZzICovCiB0eXBlZGVmIHZvaWQgKCphdGFfcWNfY2JfdCkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotdHlwZWRlZiBpbnQgKCphdGFfcHJlcmVzZXRfZm5fdCkoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci10eXBlZGVmIGludCAoKmF0YV9yZXNldF9mbl90KShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpOwordHlwZWRlZiBpbnQgKCphdGFfcHJlcmVzZXRfZm5fdCkoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7Cit0eXBlZGVmIGludCAoKmF0YV9yZXNldF9mbl90KShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKIHR5cGVkZWYgdm9pZCAoKmF0YV9wb3N0cmVzZXRfZm5fdCkoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzc2VzKTsKIAogc3RydWN0IGF0YV9pb3BvcnRzIHsKQEAgLTQ0OCw3ICs0MzMsNiBAQAogCXN0cnVjdCBzY3NpX2RldmljZQkqc2RldjsJCS8qIGF0dGFjaGVkIFNDU0kgZGV2aWNlICovCiAJLyogbl9zZWN0b3IgaXMgdXNlZCBhcyBDTEVBUl9PRkZTRVQsIHJlYWQgY29tbWVudCBhYm92ZSBDTEVBUl9PRkZTRVQgKi8KIAl1NjQJCQluX3NlY3RvcnM7CS8qIHNpemUgb2YgZGV2aWNlLCBpZiBBVEEgKi8KLQl1NjQJCQluX3NlY3RvcnNfYm9vdDsJLyogc2l6ZSBvZiBBVEEgZGV2aWNlIGF0IHN0YXJ0dXAgKi8KIAl1bnNpZ25lZCBpbnQJCWNsYXNzOwkJLyogQVRBX0RFVl94eHggKi8KIAl1MTYJCQlpZFtBVEFfSURfV09SRFNdOyAvKiBJREVOVElGWSB4eHggREVWSUNFIGRhdGEgKi8KIAl1OAkJCXBpb19tb2RlOwpAQCAtNDc1LDcgKzQ1OSw3IEBACiAJc3RydWN0IGF0YV9lcmluZwllcmluZzsKIAlpbnQJCQlzcGRuX2NudDsKIAl1bnNpZ25lZCBpbnQJCWhvcmthZ2U7CS8qIExpc3Qgb2YgYnJva2VuIGZlYXR1cmVzICovCi0jaWZkZWYgQ09ORklHX1NBVEFfQUNQSQorI2lmZGVmIENPTkZJR19BVEFfQUNQSQogCS8qIEFDUEkgb2JqZWN0cyBpbmZvICovCiAJYWNwaV9oYW5kbGUgb2JqX2hhbmRsZTsKICNlbmRpZgpAQCAtNDk0LDcgKzQ3OCw2IEBACiAJdW5zaWduZWQgaW50CQlkZXZfYWN0aW9uW0FUQV9NQVhfREVWSUNFU107IC8qIGRldiBFSCBhY3Rpb24gKi8KIAl1bnNpZ25lZCBpbnQJCWZsYWdzOwkJLyogQVRBX0VISV8qIGZsYWdzICovCiAKLQl1bnNpZ25lZCBsb25nCQlob3RwbHVnX3RpbWVzdGFtcDsKIAl1bnNpZ25lZCBpbnQJCXByb2JlX21hc2s7CiAKIAljaGFyCQkJZGVzY1tBVEFfRUhfREVTQ19MRU5dOwpAQCAtNTkxLDggKzU3NCw2IEBACiAJdm9pZCAoKnBoeV9yZXNldCkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOyAvKiBvYnNvbGV0ZSAqLwogCWludCAgKCpzZXRfbW9kZSkgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICoqcl9mYWlsZWRfZGV2KTsKIAotCXZvaWQgKCpwb3N0X3NldF9tb2RlKSAoc3RydWN0IGF0YV9wb3J0ICphcCk7Ci0KIAlpbnQgKCpjYWJsZV9kZXRlY3QpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAogCWludCAgKCpjaGVja19hdGFwaV9kbWEpIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKQEAgLTY4OCwxOSArNjY5LDIzIEBACiBleHRlcm4gdm9pZCBzYXRhX3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9idXNfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gaW50IHNhdGFfc2V0X3NwZChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLWV4dGVybiBpbnQgc2F0YV9waHlfZGVib3VuY2Uoc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3QgdW5zaWduZWQgbG9uZyAqcGFyYW0pOwotZXh0ZXJuIGludCBzYXRhX3BoeV9yZXN1bWUoc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3QgdW5zaWduZWQgbG9uZyAqcGFyYW0pOwotZXh0ZXJuIGludCBhdGFfc3RkX3ByZXJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwotZXh0ZXJuIGludCBhdGFfc3RkX3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpOwotZXh0ZXJuIGludCBzYXRhX3BvcnRfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsCi0JCQkgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqdGltaW5nKTsKLWV4dGVybiBpbnQgc2F0YV9zdGRfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3MpOworZXh0ZXJuIGludCBzYXRhX3BoeV9kZWJvdW5jZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCB1bnNpZ25lZCBsb25nICpwYXJhbSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSk7CitleHRlcm4gaW50IHNhdGFfcGh5X3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCB1bnNpZ25lZCBsb25nICpwYXJhbSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOworZXh0ZXJuIGludCBhdGFfc3RkX3ByZXJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOworZXh0ZXJuIGludCBhdGFfc3RkX3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOworZXh0ZXJuIGludCBzYXRhX3BvcnRfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnRpbWluZywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKK2V4dGVybiBpbnQgc2F0YV9zdGRfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3MsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKIGV4dGVybiB2b2lkIGF0YV9zdGRfcG9zdHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3Nlcyk7CiBleHRlcm4gdm9pZCBhdGFfcG9ydF9kaXNhYmxlKHN0cnVjdCBhdGFfcG9ydCAqKTsKIGV4dGVybiB2b2lkIGF0YV9zdGRfcG9ydHMoc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIpOwogI2lmZGVmIENPTkZJR19QQ0kKLWV4dGVybiBpbnQgYXRhX3BjaV9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBhdGFfcG9ydF9pbmZvICoqcG9ydF9pbmZvLAotCQkJICAgICB1bnNpZ25lZCBpbnQgbl9wb3J0cyk7CitleHRlcm4gaW50IGF0YV9wY2lfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICAgICBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqIGNvbnN0ICogcHBpKTsKIGV4dGVybiB2b2lkIGF0YV9wY2lfcmVtb3ZlX29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogI2lmZGVmIENPTkZJR19QTQogZXh0ZXJuIHZvaWQgYXRhX3BjaV9kZXZpY2VfZG9fc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpOwpAQCAtNzQyLDE0ICs3MjcsMTMgQEAKIGV4dGVybiBpbnQgYXRhX3BvcnRfb25saW5lKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIGludCBhdGFfcG9ydF9vZmZsaW5lKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogI2lmZGVmIENPTkZJR19QTQotZXh0ZXJuIGludCBhdGFfc2NzaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKLWV4dGVybiBpbnQgYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQoc3RydWN0IHNjc2lfZGV2aWNlICosIHBtX21lc3NhZ2VfdCBtZXNnKTsKIGV4dGVybiBpbnQgYXRhX2hvc3Rfc3VzcGVuZChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsIHBtX21lc3NhZ2VfdCBtZXNnKTsKIGV4dGVybiB2b2lkIGF0YV9ob3N0X3Jlc3VtZShzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpOwogI2VuZGlmCiBleHRlcm4gaW50IGF0YV9yYXRlbGltaXQodm9pZCk7CiBleHRlcm4gaW50IGF0YV9idXN5X3NsZWVwKHN0cnVjdCBhdGFfcG9ydCAqYXAsCiAJCQkgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9wYXQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7CitleHRlcm4gaW50IGF0YV93YWl0X3JlYWR5KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOwogZXh0ZXJuIHZvaWQgYXRhX3BvcnRfcXVldWVfdGFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB3b3JrX2Z1bmNfdCBmbiwKIAkJCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGRlbGF5KTsKIGV4dGVybiB1MzIgYXRhX3dhaXRfcmVnaXN0ZXIodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrLCB1MzIgdmFsLApAQCAtODY2LDExICs4NTAsMTEgQEAKIAl1bnNpZ25lZCBsb25nCQl2YWw7CiB9OwogCi1leHRlcm4gaW50IGF0YV9wY2lfaW5pdF9uYXRpdmVfaG9zdChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsCi0JCQkJICAgIHVuc2lnbmVkIGludCBwb3J0X21hc2spOworZXh0ZXJuIGludCBhdGFfcGNpX2luaXRfbmF0aXZlX2hvc3Qoc3RydWN0IGF0YV9ob3N0ICpob3N0KTsKK2V4dGVybiBpbnQgYXRhX3BjaV9pbml0X2JtZG1hKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCk7CiBleHRlcm4gaW50IGF0YV9wY2lfcHJlcGFyZV9uYXRpdmVfaG9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqIGNvbnN0ICogcHBpLAotCQkJCWludCBuX3BvcnRzLCBzdHJ1Y3QgYXRhX2hvc3QgKipyX2hvc3QpOworCQkJCXN0cnVjdCBhdGFfaG9zdCAqKnJfaG9zdCk7CiBleHRlcm4gaW50IHBjaV90ZXN0X2NvbmZpZ19iaXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgKmJpdHMpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXRhX3BjaV9kZWZhdWx0X2ZpbHRlcihzdHJ1Y3QgYXRhX2RldmljZSAqLCB1bnNpZ25lZCBsb25nKTsKICNlbmRpZiAvKiBDT05GSUdfUENJICovCkBAIC05MTksMTIgKzkwMyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2F0YV9laGlfaG90cGx1Z2dlZChzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaSkKIHsKLQlpZiAoZWhpLT5mbGFncyAmIEFUQV9FSElfSE9UUExVR0dFRCkKLQkJcmV0dXJuOwotCiAJZWhpLT5mbGFncyB8PSBBVEFfRUhJX0hPVFBMVUdHRUQgfCBBVEFfRUhJX1JFU1VNRV9MSU5LOwotCWVoaS0+aG90cGx1Z190aW1lc3RhbXAgPSBqaWZmaWVzOwotCiAJZWhpLT5hY3Rpb24gfD0gQVRBX0VIX1NPRlRSRVNFVDsKIAllaGktPnByb2JlX21hc2sgfD0gKDEgPDwgQVRBX01BWF9ERVZJQ0VTKSAtIDE7CiB9CkBAIC0xMDE4LDExICs5OTcsNiBAQAogCXJldHVybiBhdGFfY2xhc3NfYWJzZW50KGRldi0+Y2xhc3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGFfZGV2X3JlYWR5KGNvbnN0IHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGF0YV9kZXZfZW5hYmxlZChkZXYpICYmICEoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19TVVNQRU5ERUQpOwotfQotCiAvKgogICogcG9ydCBoZWxwZXJzCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdC5oIGIvaW5jbHVkZS9saW51eC9saXN0LmgKaW5kZXggZjlkNzFlYS4uZjI5ZmM5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9saXN0LmgKQEAgLTI2NCw4ICsyNjQsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0gICAgICAgIF9fbGlzdF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7Ci0gICAgICAgIGxpc3RfYWRkKGxpc3QsIGhlYWQpOworCV9fbGlzdF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7CisJbGlzdF9hZGQobGlzdCwgaGVhZCk7CiB9CiAKIC8qKgpAQCAtMjc2LDggKzI3Niw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlX3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKIAkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0gICAgICAgIF9fbGlzdF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7Ci0gICAgICAgIGxpc3RfYWRkX3RhaWwobGlzdCwgaGVhZCk7CisJX19saXN0X2RlbChsaXN0LT5wcmV2LCBsaXN0LT5uZXh0KTsKKwlsaXN0X2FkZF90YWlsKGxpc3QsIGhlYWQpOwogfQogCiAvKioKQEAgLTQyNiw2ICs0MjYsMTcgQEAKIAljb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpCiAKIC8qKgorICogbGlzdF9maXJzdF9lbnRyeSAtIGdldCB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGEgbGlzdAorICogQHB0cjoJdGhlIGxpc3QgaGVhZCB0byB0YWtlIHRoZSBlbGVtZW50IGZyb20uCisgKiBAdHlwZToJdGhlIHR5cGUgb2YgdGhlIHN0cnVjdCB0aGlzIGlzIGVtYmVkZGVkIGluLgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICoKKyAqIE5vdGUsIHRoYXQgbGlzdCBpcyBleHBlY3RlZCB0byBiZSBub3QgZW1wdHkuCisgKi8KKyNkZWZpbmUgbGlzdF9maXJzdF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgXAorCWxpc3RfZW50cnkoKHB0ciktPm5leHQsIHR5cGUsIG1lbWJlcikKKworLyoqCiAgKiBsaXN0X2Zvcl9lYWNoCS0JaXRlcmF0ZSBvdmVyIGEgbGlzdAogICogQHBvczoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgogICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL3hkcjQuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QveGRyNC5oCmluZGV4IGRkMTJiNGMuLjEyYmZlMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2QveGRyNC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2QveGRyNC5oCkBAIC00Miw1ICs0Miw2IEBACiBpbnQJbmxtY2x0X2VuY29kZV9jYW5jYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKiwgdTMyICosIHN0cnVjdCBubG1fYXJncyAqKTsKIGludAlubG1jbHRfZW5jb2RlX3VubG9ja2FyZ3Moc3RydWN0IHJwY19ycXN0ICosIHUzMiAqLCBzdHJ1Y3QgbmxtX2FyZ3MgKik7CiAgKi8KK2V4dGVybiBzdHJ1Y3QgcnBjX3ZlcnNpb24gbmxtX3ZlcnNpb240OwogCiAjZW5kaWYgLyogTE9DS0RfWERSNF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvZzIuaCBiL2luY2x1ZGUvbGludXgvbG9nMi5oCmluZGV4IDU3ZTY0MWUuLjFiOGEyYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9nMi5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9nMi5oCkBAIC0xNTksNyArMTU5LDcgQEAKICNkZWZpbmUgcm91bmR1cF9wb3dfb2ZfdHdvKG4pCQkJXAogKAkJCQkJCVwKIAlfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/ICgJCVwKLQkJKG4gPT0gMSkgPyAwIDoJCQlcCisJCShuID09IDEpID8gMSA6CQkJXAogCQkoMVVMIDw8IChpbG9nMigobikgLSAxKSArIDEpKQlcCiAJCQkJICAgKSA6CQlcCiAJX19yb3VuZHVwX3Bvd19vZl90d28obikJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvb3AuaCBiL2luY2x1ZGUvbGludXgvbG9vcC5oCmluZGV4IDE5MWE1OTUuLjBiOTliMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9vcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9vcC5oCkBAIC02NCw2ICs2NCw4IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJbG9fZXZlbnQ7CiAKIAlyZXF1ZXN0X3F1ZXVlX3QJCSpsb19xdWV1ZTsKKwlzdHJ1Y3QgZ2VuZGlzawkJKmxvX2Rpc2s7CisJc3RydWN0IGxpc3RfaGVhZAlsb19saXN0OwogfTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFnaWMuaCBiL2luY2x1ZGUvbGludXgvbWFnaWMuaAppbmRleCBhOWM2NTY3Li45ZDcxM2MwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKKysrIGIvaW5jbHVkZS9saW51eC9tYWdpYy5oCkBAIC0xNCw2ICsxNCw3IEBACiAjZGVmaW5lIElTT0ZTX1NVUEVSX01BR0lDCTB4OTY2MAogI2RlZmluZSBKRkZTMl9TVVBFUl9NQUdJQwkweDcyYjYKICNkZWZpbmUgS1ZNRlNfU1VQRVJfTUFHSUMJMHgxOTcwMDQyNgorI2RlZmluZSBBTk9OX0lOT0RFX0ZTX01BR0lDCTB4MDkwNDE5MzQKIAogI2RlZmluZSBNSU5JWF9TVVBFUl9NQUdJQwkweDEzN0YJCS8qIG9yaWdpbmFsIG1pbml4IGZzICovCiAjZGVmaW5lIE1JTklYX1NVUEVSX01BR0lDMgkweDEzOEYJCS8qIG1pbml4IGZzLCAzMCBjaGFyIG5hbWVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21ham9yLmggYi9pbmNsdWRlL2xpbnV4L21ham9yLmgKaW5kZXggMGE3NGM1Mi4uN2U3YzkwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYWpvci5oCisrKyBiL2luY2x1ZGUvbGludXgvbWFqb3IuaApAQCAtMTUyLDYgKzE1Miw4IEBACiAjZGVmaW5lIFVTQl9BQ01fQVVYX01BSk9SCTE2NwogI2RlZmluZSBVU0JfQ0hBUl9NQUpPUgkJMTgwCiAKKyNkZWZpbmUgTU1DX0JMT0NLX01BSk9SCQkxNzkKKwogI2RlZmluZSBWWFZNX01BSk9SCQkxOTkJLyogVkVSSVRBUyB2b2x1bWUgaS9vIGRyaXZlciAgICAqLwogI2RlZmluZSBWWFNQRUNfTUFKT1IJCTIwMAkvKiBWRVJJVEFTIHZvbHVtZSBjb25maWcgZHJpdmVyICovCiAjZGVmaW5lIFZYRE1QX01BSk9SCQkyMDEJLyogVkVSSVRBUyB2b2x1bWUgbXVsdGlwYXRoIGRyaXZlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYzE0NjgxOHJ0Yy5oIGIvaW5jbHVkZS9saW51eC9tYzE0NjgxOHJ0Yy5oCmluZGV4IGJkYzAxMTIuLjU4MGIzZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWMxNDY4MThydGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21jMTQ2ODE4cnRjLmgKQEAgLTIyLDggKzIyLDE1IEBACiAvKiBTb21lIFJUQ3MgZXh0ZW5kIHRoZSBtYzE0NjgxOCByZWdpc3RlciBzZXQgdG8gc3VwcG9ydCBhbGFybXMgb2YgbW9yZQogICogdGhhbiAyNCBob3VycyBpbiB0aGUgZnV0dXJlOyBvciBkYXRlcyB0aGF0IGluY2x1ZGUgYSBjZW50dXJ5IGNvZGUuCiAgKiBUaGlzIHBsYXRmb3JtX2RhdGEgc3RydWN0dXJlIGNhbiBwYXNzIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGRyaXZlci4KKyAqCisgKiBBbHNvLCBzb21lIHBsYXRmb3JtcyBuZWVkIHN1c3BlbmQoKS9yZXN1bWUoKSBob29rcyB0byBraWNrIGluIHNwZWNpYWwKKyAqIGhhbmRsaW5nIG9mIHdha2UgYWxhcm1zLCBlLmcuIGFjdGl2YXRpbmcgQUNQSSBCSU9TIGhvb2tzIG9yIHNldHRpbmcgdXAKKyAqIGEgc2VwYXJhdGUgd2FrZXVwIGFsYXJtIHVzZWQgYnkgc29tZSBhbG1vc3QtY2xvbmUgY2hpcHMuCiAgKi8KIHN0cnVjdCBjbW9zX3J0Y19ib2FyZF9pbmZvIHsKKwl2b2lkCSgqd2FrZV9vbikoc3RydWN0IGRldmljZSAqZGV2KTsKKwl2b2lkCSgqd2FrZV9vZmYpKHN0cnVjdCBkZXZpY2UgKmRldik7CisKIAl1OAlydGNfZGF5X2FsYXJtOwkJLyogemVybywgb3IgcmVnaXN0ZXIgaW5kZXggKi8KIAl1OAlydGNfbW9uX2FsYXJtOwkJLyogemVybywgb3IgcmVnaXN0ZXIgaW5kZXggKi8KIAl1OAlydGNfY2VudHVyeTsJCS8qIHplcm8sIG9yIHJlZ2lzdGVyIGluZGV4ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21jYS5oIGIvaW5jbHVkZS9saW51eC9tY2EuaAppbmRleCA1Y2ZmMjkyLi4zNzk3MjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21jYS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWNhLmgKQEAgLTk0LDYgKzk0LDcgQEAKIHN0cnVjdCBtY2FfZHJpdmVyIHsKIAljb25zdCBzaG9ydAkJKmlkX3RhYmxlOwogCXZvaWQJCQkqZHJpdmVyX2RhdGE7CisJaW50CQkJaW50ZWdyYXRlZF9pZDsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglkcml2ZXI7CiB9OwogI2RlZmluZSB0b19tY2FfZHJpdmVyKG1kcml2ZXIpIGNvbnRhaW5lcl9vZihtZHJpdmVyLCBzdHJ1Y3QgbWNhX2RyaXZlciwgZHJpdmVyKQpAQCAtMTI1LDYgKzEyNiw3IEBACiBleHRlcm4gc3RydWN0IGJ1c190eXBlIG1jYV9idXNfdHlwZTsKIAogZXh0ZXJuIGludCBtY2FfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtY2FfZHJpdmVyICpkcnYpOworZXh0ZXJuIGludCBtY2FfcmVnaXN0ZXJfZHJpdmVyX2ludGVncmF0ZWQoc3RydWN0IG1jYV9kcml2ZXIgKiwgaW50KTsKIGV4dGVybiB2b2lkIG1jYV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgbWNhX2RyaXZlciAqZHJ2KTsKIAogLyogV0FSTklORzogb25seSBjYWxsZWQgYnkgdGhlIGJvb3QgdGltZSBkZXZpY2Ugc2V0dXAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWV5ZS5oIGIvaW5jbHVkZS9saW51eC9tZXllLmgKaW5kZXggMTFlYzQ1ZS4uMzlmZDljOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZXllLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZXllLmgKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgU3RlbGlhbiBQb3AgPHN0ZWxpYW5AcG9waWVzLm5ldD4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBBbGP0dmUgPHd3dy5hbGNvdmUuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgQWxjw7R2ZSA8d3d3LmFsY292ZS5jb20+CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAwIEFuZHJldyBUcmlkZ2VsbCA8dHJpZGdlQHZhbGludXguY29tPgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlpLmggYi9pbmNsdWRlL2xpbnV4L21paS5oCmluZGV4IGJlZGRjNmQuLjE1MWI3ZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWlpLmgKKysrIGIvaW5jbHVkZS9saW51eC9taWkuaApAQCAtNTYsOCArNTYsOCBAQAogI2RlZmluZSBCTVNSX0FORUdDT01QTEVURSAgICAgICAweDAwMjAgIC8qIEF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgICAqLwogI2RlZmluZSBCTVNSX1JFU1YgICAgICAgICAgICAgICAweDAwYzAgIC8qIFVudXNlZC4uLiAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBCTVNSX0VTVEFURU4JCTB4MDEwMAkvKiBFeHRlbmRlZCBTdGF0dXMgaW4gUjE1ICovCi0jZGVmaW5lIEJNU1JfMTAwRlVMTDIJCTB4MDIwMAkvKiBDYW4gZG8gMTAwQkFTRS1UMiBIRFggKi8KLSNkZWZpbmUgQk1TUl8xMDBIQUxGMgkJMHgwNDAwCS8qIENhbiBkbyAxMDBCQVNFLVQyIEZEWCAqLworI2RlZmluZSBCTVNSXzEwMEhBTEYyICAgICAgICAgICAweDAyMDAgIC8qIENhbiBkbyAxMDBCQVNFLVQyIEhEWCAqLworI2RlZmluZSBCTVNSXzEwMEZVTEwyICAgICAgICAgICAweDA0MDAgIC8qIENhbiBkbyAxMDBCQVNFLVQyIEZEWCAqLwogI2RlZmluZSBCTVNSXzEwSEFMRiAgICAgICAgICAgICAweDA4MDAgIC8qIENhbiBkbyAxMG1icHMsIGhhbGYtZHVwbGV4ICAqLwogI2RlZmluZSBCTVNSXzEwRlVMTCAgICAgICAgICAgICAweDEwMDAgIC8qIENhbiBkbyAxMG1icHMsIGZ1bGwtZHVwbGV4ICAqLwogI2RlZmluZSBCTVNSXzEwMEhBTEYgICAgICAgICAgICAweDIwMDAgIC8qIENhbiBkbyAxMDBtYnBzLCBoYWxmLWR1cGxleCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYjU1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvY21kLmgKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgTUxYNF9DTURfSAorI2RlZmluZSBNTFg0X0NNRF9ICisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCitlbnVtIHsKKwkvKiBpbml0aWFsaXphdGlvbiBhbmQgZ2VuZXJhbCBjb21tYW5kcyAqLworCU1MWDRfQ01EX1NZU19FTgkJID0gMHgxLAorCU1MWDRfQ01EX1NZU19ESVMJID0gMHgyLAorCU1MWDRfQ01EX01BUF9GQQkJID0gMHhmZmYsCisJTUxYNF9DTURfVU5NQVBfRkEJID0gMHhmZmUsCisJTUxYNF9DTURfUlVOX0ZXCQkgPSAweGZmNiwKKwlNTFg0X0NNRF9NT0RfU1RBVF9DRkcJID0gMHgzNCwKKwlNTFg0X0NNRF9RVUVSWV9ERVZfQ0FQCSA9IDB4MywKKwlNTFg0X0NNRF9RVUVSWV9GVwkgPSAweDQsCisJTUxYNF9DTURfRU5BQkxFX0xBTQkgPSAweGZmOCwKKwlNTFg0X0NNRF9ESVNBQkxFX0xBTQkgPSAweGZmNywKKwlNTFg0X0NNRF9RVUVSWV9ERFIJID0gMHg1LAorCU1MWDRfQ01EX1FVRVJZX0FEQVBURVIJID0gMHg2LAorCU1MWDRfQ01EX0lOSVRfSENBCSA9IDB4NywKKwlNTFg0X0NNRF9DTE9TRV9IQ0EJID0gMHg4LAorCU1MWDRfQ01EX0lOSVRfUE9SVAkgPSAweDksCisJTUxYNF9DTURfQ0xPU0VfUE9SVAkgPSAweGEsCisJTUxYNF9DTURfUVVFUllfSENBCSA9IDB4YiwKKwlNTFg0X0NNRF9TRVRfUE9SVAkgPSAweGMsCisJTUxYNF9DTURfQUNDRVNTX0REUgkgPSAweDJlLAorCU1MWDRfQ01EX01BUF9JQ00JID0gMHhmZmEsCisJTUxYNF9DTURfVU5NQVBfSUNNCSA9IDB4ZmY5LAorCU1MWDRfQ01EX01BUF9JQ01fQVVYCSA9IDB4ZmZjLAorCU1MWDRfQ01EX1VOTUFQX0lDTV9BVVgJID0gMHhmZmIsCisJTUxYNF9DTURfU0VUX0lDTV9TSVpFCSA9IDB4ZmZkLAorCisJLyogVFBUIGNvbW1hbmRzICovCisJTUxYNF9DTURfU1cySFdfTVBUCSA9IDB4ZCwKKwlNTFg0X0NNRF9RVUVSWV9NUFQJID0gMHhlLAorCU1MWDRfQ01EX0hXMlNXX01QVAkgPSAweGYsCisJTUxYNF9DTURfUkVBRF9NVFQJID0gMHgxMCwKKwlNTFg0X0NNRF9XUklURV9NVFQJID0gMHgxMSwKKwlNTFg0X0NNRF9TWU5DX1RQVAkgPSAweDJmLAorCisJLyogRVEgY29tbWFuZHMgKi8KKwlNTFg0X0NNRF9NQVBfRVEJCSA9IDB4MTIsCisJTUxYNF9DTURfU1cySFdfRVEJID0gMHgxMywKKwlNTFg0X0NNRF9IVzJTV19FUQkgPSAweDE0LAorCU1MWDRfQ01EX1FVRVJZX0VRCSA9IDB4MTUsCisKKwkvKiBDUSBjb21tYW5kcyAqLworCU1MWDRfQ01EX1NXMkhXX0NRCSA9IDB4MTYsCisJTUxYNF9DTURfSFcyU1dfQ1EJID0gMHgxNywKKwlNTFg0X0NNRF9RVUVSWV9DUQkgPSAweDE4LAorCU1MWDRfQ01EX1JFU0laRV9DUQkgPSAweDJjLAorCisJLyogU1JRIGNvbW1hbmRzICovCisJTUxYNF9DTURfU1cySFdfU1JRCSA9IDB4MzUsCisJTUxYNF9DTURfSFcyU1dfU1JRCSA9IDB4MzYsCisJTUxYNF9DTURfUVVFUllfU1JRCSA9IDB4MzcsCisJTUxYNF9DTURfQVJNX1NSUQkgPSAweDQwLAorCisJLyogUVAvRUUgY29tbWFuZHMgKi8KKwlNTFg0X0NNRF9SU1QySU5JVF9RUAkgPSAweDE5LAorCU1MWDRfQ01EX0lOSVQyUlRSX1FQCSA9IDB4MWEsCisJTUxYNF9DTURfUlRSMlJUU19RUAkgPSAweDFiLAorCU1MWDRfQ01EX1JUUzJSVFNfUVAJID0gMHgxYywKKwlNTFg0X0NNRF9TUUVSUjJSVFNfUVAJID0gMHgxZCwKKwlNTFg0X0NNRF8yRVJSX1FQCSA9IDB4MWUsCisJTUxYNF9DTURfUlRTMlNRRF9RUAkgPSAweDFmLAorCU1MWDRfQ01EX1NRRDJTUURfUVAJID0gMHgzOCwKKwlNTFg0X0NNRF9TUUQyUlRTX1FQCSA9IDB4MjAsCisJTUxYNF9DTURfMlJTVF9RUAkgPSAweDIxLAorCU1MWDRfQ01EX1FVRVJZX1FQCSA9IDB4MjIsCisJTUxYNF9DTURfSU5JVDJJTklUX1FQCSA9IDB4MmQsCisJTUxYNF9DTURfU1VTUEVORF9RUAkgPSAweDMyLAorCU1MWDRfQ01EX1VOU1VTUEVORF9RUAkgPSAweDMzLAorCS8qIHNwZWNpYWwgUVAgYW5kIG1hbmFnZW1lbnQgY29tbWFuZHMgKi8KKwlNTFg0X0NNRF9DT05GX1NQRUNJQUxfUVAgPSAweDIzLAorCU1MWDRfQ01EX01BRF9JRkMJID0gMHgyNCwKKworCS8qIG11bHRpY2FzdCBjb21tYW5kcyAqLworCU1MWDRfQ01EX1JFQURfTUNHCSA9IDB4MjUsCisJTUxYNF9DTURfV1JJVEVfTUNHCSA9IDB4MjYsCisJTUxYNF9DTURfTUdJRF9IQVNICSA9IDB4MjcsCisKKwkvKiBtaXNjZWxsYW5lb3VzIGNvbW1hbmRzICovCisJTUxYNF9DTURfRElBR19SUFJUCSA9IDB4MzAsCisJTUxYNF9DTURfTk9QCQkgPSAweDMxLAorCisJLyogZGVidWcgY29tbWFuZHMgKi8KKwlNTFg0X0NNRF9RVUVSWV9ERUJVR19NU0cgPSAweDJhLAorCU1MWDRfQ01EX1NFVF9ERUJVR19NU0cJID0gMHgyYiwKK307CisKK2VudW0geworCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQQk9IDEwMDAwLAorCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQgk9IDEwMDAwLAorCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQwk9IDEwMDAwLAorfTsKKworZW51bSB7CisJTUxYNF9NQUlMQk9YX1NJWkUJPSAgNDA5NgorfTsKKworc3RydWN0IG1seDRfZGV2OworCitzdHJ1Y3QgbWx4NF9jbWRfbWFpbGJveCB7CisJdm9pZAkJICAgICAgICpidWY7CisJZG1hX2FkZHJfdAkJZG1hOworfTsKKworaW50IF9fbWx4NF9jbWQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHU2NCBpbl9wYXJhbSwgdTY0ICpvdXRfcGFyYW0sCisJICAgICAgIGludCBvdXRfaXNfaW1tLCB1MzIgaW5fbW9kaWZpZXIsIHU4IG9wX21vZGlmaWVyLAorCSAgICAgICB1MTYgb3AsIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7CisKKy8qIEludm9rZSBhIGNvbW1hbmQgd2l0aCBubyBvdXRwdXQgcGFyYW1ldGVyICovCitzdGF0aWMgaW5saW5lIGludCBtbHg0X2NtZChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTY0IGluX3BhcmFtLCB1MzIgaW5fbW9kaWZpZXIsCisJCQkgICB1OCBvcF9tb2RpZmllciwgdTE2IG9wLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJcmV0dXJuIF9fbWx4NF9jbWQoZGV2LCBpbl9wYXJhbSwgTlVMTCwgMCwgaW5fbW9kaWZpZXIsCisJCQkgIG9wX21vZGlmaWVyLCBvcCwgdGltZW91dCk7Cit9CisKKy8qIEludm9rZSBhIGNvbW1hbmQgd2l0aCBhbiBvdXRwdXQgbWFpbGJveCAqLworc3RhdGljIGlubGluZSBpbnQgbWx4NF9jbWRfYm94KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1NjQgaW5fcGFyYW0sIHU2NCBvdXRfcGFyYW0sCisJCQkgICAgICAgdTMyIGluX21vZGlmaWVyLCB1OCBvcF9tb2RpZmllciwgdTE2IG9wLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlyZXR1cm4gX19tbHg0X2NtZChkZXYsIGluX3BhcmFtLCAmb3V0X3BhcmFtLCAwLCBpbl9tb2RpZmllciwKKwkJCSAgb3BfbW9kaWZpZXIsIG9wLCB0aW1lb3V0KTsKK30KKworLyoKKyAqIEludm9rZSBhIGNvbW1hbmQgd2l0aCBhbiBpbW1lZGlhdGUgb3V0cHV0IHBhcmFtZXRlciAoYW5kIGNvcHkgdGhlCisgKiBvdXRwdXQgaW50byB0aGUgY2FsbGVyJ3Mgb3V0X3BhcmFtIHBvaW50ZXIgYWZ0ZXIgdGhlIGNvbW1hbmQKKyAqIGV4ZWN1dGVzKS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbWx4NF9jbWRfaW1tKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1NjQgaW5fcGFyYW0sIHU2NCAqb3V0X3BhcmFtLAorCQkJICAgICAgIHUzMiBpbl9tb2RpZmllciwgdTggb3BfbW9kaWZpZXIsIHUxNiBvcCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJcmV0dXJuIF9fbWx4NF9jbWQoZGV2LCBpbl9wYXJhbSwgb3V0X3BhcmFtLCAxLCBpbl9tb2RpZmllciwKKwkJCSAgb3BfbW9kaWZpZXIsIG9wLCB0aW1lb3V0KTsKK30KKworc3RydWN0IG1seDRfY21kX21haWxib3ggKm1seDRfYWxsb2NfY21kX21haWxib3goc3RydWN0IG1seDRfZGV2ICpkZXYpOwordm9pZCBtbHg0X2ZyZWVfY21kX21haWxib3goc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94KTsKKworI2VuZGlmIC8qIE1MWDRfQ01EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9jcS5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2NxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4MWUwYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWx4NC9jcS5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqCS0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICoJICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICoJICBkaXNjbGFpbWVyLgorICoKKyAqCS0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICoJICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICoJICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqCSAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBNTFg0X0NRX0gKKyNkZWZpbmUgTUxYNF9DUV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bGludXgvbWx4NC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbHg0L2Rvb3JiZWxsLmg+CisKK3N0cnVjdCBtbHg0X2NxZSB7CisJX19iZTMyCQkJbXlfcXBuOworCV9fYmUzMgkJCWltbWVkX3Jzc19pbnZhbGlkOworCV9fYmUzMgkJCWdfbWxwYXRoX3JxcG47CisJdTgJCQlzbDsKKwl1OAkJCXJlc2VydmVkMTsKKwlfX2JlMTYJCQlybGlkOworCXUzMgkJCXJlc2VydmVkMjsKKwlfX2JlMzIJCQlieXRlX2NudDsKKwlfX2JlMTYJCQl3cWVfaW5kZXg7CisJX19iZTE2CQkJY2hlY2tzdW07CisJdTgJCQlyZXNlcnZlZDNbM107CisJdTgJCQlvd25lcl9zcl9vcGNvZGU7Cit9OworCitzdHJ1Y3QgbWx4NF9lcnJfY3FlIHsKKwlfX2JlMzIJCQlteV9xcG47CisJdTMyCQkJcmVzZXJ2ZWQxWzVdOworCV9fYmUxNgkJCXdxZV9pbmRleDsKKwl1OAkJCXZlbmRvcl9lcnJfc3luZHJvbWU7CisJdTgJCQlzeW5kcm9tZTsKKwl1OAkJCXJlc2VydmVkMlszXTsKKwl1OAkJCW93bmVyX3NyX29wY29kZTsKK307CisKK2VudW0geworCU1MWDRfQ1FFX09XTkVSX01BU0sJPSAweDgwLAorCU1MWDRfQ1FFX0lTX1NFTkRfTUFTSwk9IDB4NDAsCisJTUxYNF9DUUVfT1BDT0RFX01BU0sJPSAweDFmCit9OworCitlbnVtIHsKKwlNTFg0X0NRRV9TWU5EUk9NRV9MT0NBTF9MRU5HVEhfRVJSCQk9IDB4MDEsCisJTUxYNF9DUUVfU1lORFJPTUVfTE9DQUxfUVBfT1BfRVJSCQk9IDB4MDIsCisJTUxYNF9DUUVfU1lORFJPTUVfTE9DQUxfUFJPVF9FUlIJCT0gMHgwNCwKKwlNTFg0X0NRRV9TWU5EUk9NRV9XUl9GTFVTSF9FUlIJCQk9IDB4MDUsCisJTUxYNF9DUUVfU1lORFJPTUVfTVdfQklORF9FUlIJCQk9IDB4MDYsCisJTUxYNF9DUUVfU1lORFJPTUVfQkFEX1JFU1BfRVJSCQkJPSAweDEwLAorCU1MWDRfQ1FFX1NZTkRST01FX0xPQ0FMX0FDQ0VTU19FUlIJCT0gMHgxMSwKKwlNTFg0X0NRRV9TWU5EUk9NRV9SRU1PVEVfSU5WQUxfUkVRX0VSUgkJPSAweDEyLAorCU1MWDRfQ1FFX1NZTkRST01FX1JFTU9URV9BQ0NFU1NfRVJSCQk9IDB4MTMsCisJTUxYNF9DUUVfU1lORFJPTUVfUkVNT1RFX09QX0VSUgkJCT0gMHgxNCwKKwlNTFg0X0NRRV9TWU5EUk9NRV9UUkFOU1BPUlRfUkVUUllfRVhDX0VSUgk9IDB4MTUsCisJTUxYNF9DUUVfU1lORFJPTUVfUk5SX1JFVFJZX0VYQ19FUlIJCT0gMHgxNiwKKwlNTFg0X0NRRV9TWU5EUk9NRV9SRU1PVEVfQUJPUlRFRF9FUlIJCT0gMHgyMiwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbHg0X2NxX2FybShzdHJ1Y3QgbWx4NF9jcSAqY3EsIHUzMiBjbWQsCisJCQkgICAgICAgdm9pZCBfX2lvbWVtICp1YXJfcGFnZSwKKwkJCSAgICAgICBzcGlubG9ja190ICpkb29yYmVsbF9sb2NrKQoreworCV9fYmUzMiBkb29yYmVsbFsyXTsKKwl1MzIgc247CisJdTMyIGNpOworCisJc24gPSBjcS0+YXJtX3NuICYgMzsKKwljaSA9IGNxLT5jb25zX2luZGV4ICYgMHhmZmZmZmY7CisKKwkqY3EtPmFybV9kYiA9IGNwdV90b19iZTMyKHNuIDw8IDI4IHwgY21kIHwgY2kpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgZG9vcmJlbGwgcmVjb3JkIGluIGhvc3QgbWVtb3J5IGlzCisJICogd3JpdHRlbiBiZWZvcmUgcmluZ2luZyB0aGUgZG9vcmJlbGwgdmlhIFBDSSBNTUlPLgorCSAqLworCXdtYigpOworCisJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMihzbiA8PCAyOCB8IGNtZCB8IGNxLT5jcW4pOworCWRvb3JiZWxsWzFdID0gY3B1X3RvX2JlMzIoY2kpOworCisJbWx4NF93cml0ZTY0KGRvb3JiZWxsLCB1YXJfcGFnZSArIE1MWDRfQ1FfRE9PUkJFTEwsIGRvb3JiZWxsX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWx4NF9jcV9zZXRfY2koc3RydWN0IG1seDRfY3EgKmNxKQoreworCSpjcS0+c2V0X2NpX2RiID0gY3B1X3RvX2JlMzIoY3EtPmNvbnNfaW5kZXggJiAweGZmZmZmZik7Cit9CisKK2VudW0geworCU1MWDRfQ1FfREJfUkVRX05PVF9TT0wJCT0gMSA8PCAyNCwKKwlNTFg0X0NRX0RCX1JFUV9OT1QJCT0gMiA8PCAyNAorfTsKKworI2VuZGlmIC8qIE1MWDRfQ1FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNWY4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKgkgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKgkgIGRpc2NsYWltZXIuCisgKgorICoJLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKgkgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKgkgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICoJICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIE1MWDRfREVWSUNFX0gKKyNkZWZpbmUgTUxYNF9ERVZJQ0VfSAorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworZW51bSB7CisJTUxYNF9GTEFHX01TSV9YCQk9IDEgPDwgMCwKK307CisKK2VudW0geworCU1MWDRfTUFYX1BPUlRTCQk9IDIKK307CisKK2VudW0geworCU1MWDRfREVWX0NBUF9GTEFHX1JDCQk9IDEgPDwgIDAsCisJTUxYNF9ERVZfQ0FQX0ZMQUdfVUMJCT0gMSA8PCAgMSwKKwlNTFg0X0RFVl9DQVBfRkxBR19VRAkJPSAxIDw8ICAyLAorCU1MWDRfREVWX0NBUF9GTEFHX1NSUQkJPSAxIDw8ICA2LAorCU1MWDRfREVWX0NBUF9GTEFHX0lQT0lCX0NTVU0JPSAxIDw8ICA3LAorCU1MWDRfREVWX0NBUF9GTEFHX0JBRF9QS0VZX0NOVFIJPSAxIDw8ICA4LAorCU1MWDRfREVWX0NBUF9GTEFHX0JBRF9RS0VZX0NOVFIJPSAxIDw8ICA5LAorCU1MWDRfREVWX0NBUF9GTEFHX01FTV9XSU5ET1cJPSAxIDw8IDE2LAorCU1MWDRfREVWX0NBUF9GTEFHX0FQTQkJPSAxIDw8IDE3LAorCU1MWDRfREVWX0NBUF9GTEFHX0FUT01JQwk9IDEgPDwgMTgsCisJTUxYNF9ERVZfQ0FQX0ZMQUdfUkFXX01DQVNUCT0gMSA8PCAxOSwKKwlNTFg0X0RFVl9DQVBfRkxBR19VRF9BVl9QT1JUCT0gMSA8PCAyMCwKKwlNTFg0X0RFVl9DQVBfRkxBR19VRF9NQ0FTVAk9IDEgPDwgMjEKK307CisKK2VudW0gbWx4NF9ldmVudCB7CisJTUxYNF9FVkVOVF9UWVBFX0NPTVAJCSAgID0gMHgwMCwKKwlNTFg0X0VWRU5UX1RZUEVfUEFUSF9NSUcJICAgPSAweDAxLAorCU1MWDRfRVZFTlRfVFlQRV9DT01NX0VTVAkgICA9IDB4MDIsCisJTUxYNF9FVkVOVF9UWVBFX1NRX0RSQUlORUQJICAgPSAweDAzLAorCU1MWDRfRVZFTlRfVFlQRV9TUlFfUVBfTEFTVF9XUUUJICAgPSAweDEzLAorCU1MWDRfRVZFTlRfVFlQRV9TUlFfTElNSVQJICAgPSAweDE0LAorCU1MWDRfRVZFTlRfVFlQRV9DUV9FUlJPUgkgICA9IDB4MDQsCisJTUxYNF9FVkVOVF9UWVBFX1dRX0NBVEFTX0VSUk9SCSAgID0gMHgwNSwKKwlNTFg0X0VWRU5UX1RZUEVfRUVDX0NBVEFTX0VSUk9SCSAgID0gMHgwNiwKKwlNTFg0X0VWRU5UX1RZUEVfUEFUSF9NSUdfRkFJTEVECSAgID0gMHgwNywKKwlNTFg0X0VWRU5UX1RZUEVfV1FfSU5WQUxfUkVRX0VSUk9SID0gMHgxMCwKKwlNTFg0X0VWRU5UX1RZUEVfV1FfQUNDRVNTX0VSUk9SCSAgID0gMHgxMSwKKwlNTFg0X0VWRU5UX1RZUEVfU1JRX0NBVEFTX0VSUk9SCSAgID0gMHgxMiwKKwlNTFg0X0VWRU5UX1RZUEVfTE9DQUxfQ0FUQVNfRVJST1IgID0gMHgwOCwKKwlNTFg0X0VWRU5UX1RZUEVfUE9SVF9DSEFOR0UJICAgPSAweDA5LAorCU1MWDRfRVZFTlRfVFlQRV9FUV9PVkVSRkxPVwkgICA9IDB4MGYsCisJTUxYNF9FVkVOVF9UWVBFX0VDQ19ERVRFQ1QJICAgPSAweDBlLAorCU1MWDRfRVZFTlRfVFlQRV9DTUQJCSAgID0gMHgwYQorfTsKKworZW51bSB7CisJTUxYNF9QT1JUX0NIQU5HRV9TVUJUWVBFX0RPV04JPSAxLAorCU1MWDRfUE9SVF9DSEFOR0VfU1VCVFlQRV9BQ1RJVkUJPSA0Cit9OworCitlbnVtIHsKKwlNTFg0X1BFUk1fTE9DQUxfUkVBRAk9IDEgPDwgMTAsCisJTUxYNF9QRVJNX0xPQ0FMX1dSSVRFCT0gMSA8PCAxMSwKKwlNTFg0X1BFUk1fUkVNT1RFX1JFQUQJPSAxIDw8IDEyLAorCU1MWDRfUEVSTV9SRU1PVEVfV1JJVEUJPSAxIDw8IDEzLAorCU1MWDRfUEVSTV9BVE9NSUMJPSAxIDw8IDE0Cit9OworCitlbnVtIHsKKwlNTFg0X09QQ09ERV9OT1AJCQk9IDB4MDAsCisJTUxYNF9PUENPREVfU0VORF9JTlZBTAkJPSAweDAxLAorCU1MWDRfT1BDT0RFX1JETUFfV1JJVEUJCT0gMHgwOCwKKwlNTFg0X09QQ09ERV9SRE1BX1dSSVRFX0lNTQk9IDB4MDksCisJTUxYNF9PUENPREVfU0VORAkJPSAweDBhLAorCU1MWDRfT1BDT0RFX1NFTkRfSU1NCQk9IDB4MGIsCisJTUxYNF9PUENPREVfTFNPCQkJPSAweDBlLAorCU1MWDRfT1BDT0RFX1JETUFfUkVBRAkJPSAweDEwLAorCU1MWDRfT1BDT0RFX0FUT01JQ19DUwkJPSAweDExLAorCU1MWDRfT1BDT0RFX0FUT01JQ19GQQkJPSAweDEyLAorCU1MWDRfT1BDT0RFX0FUT01JQ19NQVNLX0NTCT0gMHgxNCwKKwlNTFg0X09QQ09ERV9BVE9NSUNfTUFTS19GQQk9IDB4MTUsCisJTUxYNF9PUENPREVfQklORF9NVwkJPSAweDE4LAorCU1MWDRfT1BDT0RFX0ZNUgkJCT0gMHgxOSwKKwlNTFg0X09QQ09ERV9MT0NBTF9JTlZBTAkJPSAweDFiLAorCU1MWDRfT1BDT0RFX0NPTkZJR19DTUQJCT0gMHgxZiwKKworCU1MWDRfUkVDVl9PUENPREVfUkRNQV9XUklURV9JTU0JPSAweDAwLAorCU1MWDRfUkVDVl9PUENPREVfU0VORAkJPSAweDAxLAorCU1MWDRfUkVDVl9PUENPREVfU0VORF9JTU0JPSAweDAyLAorCU1MWDRfUkVDVl9PUENPREVfU0VORF9JTlZBTAk9IDB4MDMsCisKKwlNTFg0X0NRRV9PUENPREVfRVJST1IJCT0gMHgxZSwKKwlNTFg0X0NRRV9PUENPREVfUkVTSVpFCQk9IDB4MTYsCit9OworCitlbnVtIHsKKwlNTFg0X1NUQVRfUkFURV9PRkZTRVQJPSA1Cit9OworCitzdHJ1Y3QgbWx4NF9jYXBzIHsKKwl1NjQJCQlmd192ZXI7CisJaW50CQkJbnVtX3BvcnRzOworCWludAkJCXZsX2NhcDsKKwlpbnQJCQltdHVfY2FwOworCWludAkJCWdpZF90YWJsZV9sZW47CisJaW50CQkJcGtleV90YWJsZV9sZW47CisJaW50CQkJbG9jYWxfY2FfYWNrX2RlbGF5OworCWludAkJCW51bV91YXJzOworCWludAkJCWJmX3JlZ19zaXplOworCWludAkJCWJmX3JlZ3NfcGVyX3BhZ2U7CisJaW50CQkJbWF4X3NxX3NnOworCWludAkJCW1heF9ycV9zZzsKKwlpbnQJCQludW1fcXBzOworCWludAkJCW1heF93cWVzOworCWludAkJCW1heF9zcV9kZXNjX3N6OworCWludAkJCW1heF9ycV9kZXNjX3N6OworCWludAkJCW1heF9xcF9pbml0X3JkbWE7CisJaW50CQkJbWF4X3FwX2Rlc3RfcmRtYTsKKwlpbnQJCQlyZXNlcnZlZF9xcHM7CisJaW50CQkJc3FwX3N0YXJ0OworCWludAkJCW51bV9zcnFzOworCWludAkJCW1heF9zcnFfd3FlczsKKwlpbnQJCQltYXhfc3JxX3NnZTsKKwlpbnQJCQlyZXNlcnZlZF9zcnFzOworCWludAkJCW51bV9jcXM7CisJaW50CQkJbWF4X2NxZXM7CisJaW50CQkJcmVzZXJ2ZWRfY3FzOworCWludAkJCW51bV9lcXM7CisJaW50CQkJcmVzZXJ2ZWRfZXFzOworCWludAkJCW51bV9tcHRzOworCWludAkJCW51bV9tdHRfc2VnczsKKwlpbnQJCQlmbXJfcmVzZXJ2ZWRfbXR0czsKKwlpbnQJCQlyZXNlcnZlZF9tdHRzOworCWludAkJCXJlc2VydmVkX21yd3M7CisJaW50CQkJcmVzZXJ2ZWRfdWFyczsKKwlpbnQJCQludW1fbWdtczsKKwlpbnQJCQludW1fYW1nbXM7CisJaW50CQkJcmVzZXJ2ZWRfbWNnczsKKwlpbnQJCQludW1fcXBfcGVyX21nbTsKKwlpbnQJCQludW1fcGRzOworCWludAkJCXJlc2VydmVkX3BkczsKKwlpbnQJCQltdHRfZW50cnlfc3o7CisJdTMyCQkJcGFnZV9zaXplX2NhcDsKKwl1MzIJCQlmbGFnczsKKwl1MTYJCQlzdGF0X3JhdGVfc3VwcG9ydDsKKwl1OAkJCXBvcnRfd2lkdGhfY2FwOworfTsKKworc3RydWN0IG1seDRfYnVmX2xpc3QgeworCXZvaWQJCSAgICAgICAqYnVmOworCWRtYV9hZGRyX3QJCW1hcDsKK307CisKK3N0cnVjdCBtbHg0X2J1ZiB7CisJdW5pb24geworCQlzdHJ1Y3QgbWx4NF9idWZfbGlzdAlkaXJlY3Q7CisJCXN0cnVjdCBtbHg0X2J1Zl9saXN0ICAgKnBhZ2VfbGlzdDsKKwl9IHU7CisJaW50CQkJbmJ1ZnM7CisJaW50CQkJbnBhZ2VzOworCWludAkJCXBhZ2Vfc2hpZnQ7Cit9OworCitzdHJ1Y3QgbWx4NF9tdHQgeworCXUzMgkJCWZpcnN0X3NlZzsKKwlpbnQJCQlvcmRlcjsKKwlpbnQJCQlwYWdlX3NoaWZ0OworfTsKKworc3RydWN0IG1seDRfbXIgeworCXN0cnVjdCBtbHg0X210dAkJbXR0OworCXU2NAkJCWlvdmE7CisJdTY0CQkJc2l6ZTsKKwl1MzIJCQlrZXk7CisJdTMyCQkJcGQ7CisJdTMyCQkJYWNjZXNzOworCWludAkJCWVuYWJsZWQ7Cit9OworCitzdHJ1Y3QgbWx4NF91YXIgeworCXVuc2lnbmVkIGxvbmcJCXBmbjsKKwlpbnQJCQlpbmRleDsKK307CisKK3N0cnVjdCBtbHg0X2NxIHsKKwl2b2lkICgqY29tcCkJCShzdHJ1Y3QgbWx4NF9jcSAqKTsKKwl2b2lkICgqZXZlbnQpCQkoc3RydWN0IG1seDRfY3EgKiwgZW51bSBtbHg0X2V2ZW50KTsKKworCXN0cnVjdCBtbHg0X3VhcgkgICAgICAgKnVhcjsKKworCXUzMgkJCWNvbnNfaW5kZXg7CisKKwlfX2JlMzIJCSAgICAgICAqc2V0X2NpX2RiOworCV9fYmUzMgkJICAgICAgICphcm1fZGI7CisJaW50CQkJYXJtX3NuOworCisJaW50CQkJY3FuOworCisJYXRvbWljX3QJCXJlZmNvdW50OworCXN0cnVjdCBjb21wbGV0aW9uCWZyZWU7Cit9OworCitzdHJ1Y3QgbWx4NF9xcCB7CisJdm9pZCAoKmV2ZW50KQkJKHN0cnVjdCBtbHg0X3FwICosIGVudW0gbWx4NF9ldmVudCk7CisKKwlpbnQJCQlxcG47CisKKwlhdG9taWNfdAkJcmVmY291bnQ7CisJc3RydWN0IGNvbXBsZXRpb24JZnJlZTsKK307CisKK3N0cnVjdCBtbHg0X3NycSB7CisJdm9pZCAoKmV2ZW50KQkJKHN0cnVjdCBtbHg0X3NycSAqLCBlbnVtIG1seDRfZXZlbnQpOworCisJaW50CQkJc3JxbjsKKwlpbnQJCQltYXg7CisJaW50CQkJbWF4X2dzOworCWludAkJCXdxZV9zaGlmdDsKKworCWF0b21pY190CQlyZWZjb3VudDsKKwlzdHJ1Y3QgY29tcGxldGlvbglmcmVlOworfTsKKworc3RydWN0IG1seDRfYXYgeworCV9fYmUzMgkJCXBvcnRfcGQ7CisJdTgJCQlyZXNlcnZlZDE7CisJdTgJCQlnX3NsaWQ7CisJX19iZTE2CQkJZGxpZDsKKwl1OAkJCXJlc2VydmVkMjsKKwl1OAkJCWdpZF9pbmRleDsKKwl1OAkJCXN0YXRfcmF0ZTsKKwl1OAkJCWhvcF9saW1pdDsKKwlfX2JlMzIJCQlzbF90Y2xhc3NfZmxvd2xhYmVsOworCXU4CQkJZGdpZFsxNl07Cit9OworCitzdHJ1Y3QgbWx4NF9kZXYgeworCXN0cnVjdCBwY2lfZGV2CSAgICAgICAqcGRldjsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgbWx4NF9jYXBzCWNhcHM7CisJc3RydWN0IHJhZGl4X3RyZWVfcm9vdAlxcF90YWJsZV90cmVlOworfTsKKworc3RydWN0IG1seDRfaW5pdF9wb3J0X3BhcmFtIHsKKwlpbnQJCQlzZXRfZ3VpZDA7CisJaW50CQkJc2V0X25vZGVfZ3VpZDsKKwlpbnQJCQlzZXRfc2lfZ3VpZDsKKwl1MTYJCQltdHU7CisJaW50CQkJcG9ydF93aWR0aF9jYXA7CisJdTE2CQkJdmxfY2FwOworCXUxNgkJCW1heF9naWQ7CisJdTE2CQkJbWF4X3BrZXk7CisJdTY0CQkJZ3VpZDA7CisJdTY0CQkJbm9kZV9ndWlkOworCXU2NAkJCXNpX2d1aWQ7Cit9OworCitpbnQgbWx4NF9idWZfYWxsb2Moc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBzaXplLCBpbnQgbWF4X2RpcmVjdCwKKwkJICAgc3RydWN0IG1seDRfYnVmICpidWYpOwordm9pZCBtbHg0X2J1Zl9mcmVlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgc2l6ZSwgc3RydWN0IG1seDRfYnVmICpidWYpOworCitpbnQgbWx4NF9wZF9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTMyICpwZG4pOwordm9pZCBtbHg0X3BkX2ZyZWUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHUzMiBwZG4pOworCitpbnQgbWx4NF91YXJfYWxsb2Moc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X3VhciAqdWFyKTsKK3ZvaWQgbWx4NF91YXJfZnJlZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfdWFyICp1YXIpOworCitpbnQgbWx4NF9tdHRfaW5pdChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IG5wYWdlcywgaW50IHBhZ2Vfc2hpZnQsCisJCSAgc3RydWN0IG1seDRfbXR0ICptdHQpOwordm9pZCBtbHg0X210dF9jbGVhbnVwKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9tdHQgKm10dCk7Cit1NjQgbWx4NF9tdHRfYWRkcihzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfbXR0ICptdHQpOworCitpbnQgbWx4NF9tcl9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTMyIHBkLCB1NjQgaW92YSwgdTY0IHNpemUsIHUzMiBhY2Nlc3MsCisJCSAgaW50IG5wYWdlcywgaW50IHBhZ2Vfc2hpZnQsIHN0cnVjdCBtbHg0X21yICptcik7Cit2b2lkIG1seDRfbXJfZnJlZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfbXIgKm1yKTsKK2ludCBtbHg0X21yX2VuYWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfbXIgKm1yKTsKK2ludCBtbHg0X3dyaXRlX210dChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfbXR0ICptdHQsCisJCSAgIGludCBzdGFydF9pbmRleCwgaW50IG5wYWdlcywgdTY0ICpwYWdlX2xpc3QpOworaW50IG1seDRfYnVmX3dyaXRlX210dChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfbXR0ICptdHQsCisJCSAgICAgICBzdHJ1Y3QgbWx4NF9idWYgKmJ1Zik7CisKK2ludCBtbHg0X2NxX2FsbG9jKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgbmVudCwgc3RydWN0IG1seDRfbXR0ICptdHQsCisJCSAgc3RydWN0IG1seDRfdWFyICp1YXIsIHU2NCBkYl9yZWMsIHN0cnVjdCBtbHg0X2NxICpjcSk7Cit2b2lkIG1seDRfY3FfZnJlZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfY3EgKmNxKTsKKworaW50IG1seDRfcXBfYWxsb2Moc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBzcXBuLCBzdHJ1Y3QgbWx4NF9xcCAqcXApOwordm9pZCBtbHg0X3FwX2ZyZWUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X3FwICpxcCk7CisKK2ludCBtbHg0X3NycV9hbGxvYyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTMyIHBkbiwgc3RydWN0IG1seDRfbXR0ICptdHQsCisJCSAgIHU2NCBkYl9yZWMsIHN0cnVjdCBtbHg0X3NycSAqc3JxKTsKK3ZvaWQgbWx4NF9zcnFfZnJlZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfc3JxICpzcnEpOworaW50IG1seDRfc3JxX2FybShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfc3JxICpzcnEsIGludCBsaW1pdF93YXRlcm1hcmspOworCitpbnQgbWx4NF9JTklUX1BPUlQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2luaXRfcG9ydF9wYXJhbSAqcGFyYW0sIGludCBwb3J0KTsKK2ludCBtbHg0X0NMT1NFX1BPUlQoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBwb3J0KTsKKworaW50IG1seDRfbXVsdGljYXN0X2F0dGFjaChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfcXAgKnFwLCB1OCBnaWRbMTZdKTsKK2ludCBtbHg0X211bHRpY2FzdF9kZXRhY2goc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X3FwICpxcCwgdTggZ2lkWzE2XSk7CisKKyNlbmRpZiAvKiBNTFg0X0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDQvZG9vcmJlbGwuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9kb29yYmVsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMmRhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvZG9vcmJlbGwuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIE1MWDRfRE9PUkJFTExfSAorI2RlZmluZSBNTFg0X0RPT1JCRUxMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2RlZmluZSBNTFg0X1NFTkRfRE9PUkJFTEwgICAgMHgxNAorI2RlZmluZSBNTFg0X0NRX0RPT1JCRUxMICAgICAgMHgyMAorCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorLyoKKyAqIEFzc3VtZSB0aGF0IHdlIGNhbiBqdXN0IHdyaXRlIGEgNjQtYml0IGRvb3JiZWxsIGF0b21pY2FsbHkuICBzMzkwCisgKiBhY3R1YWxseSBkb2Vzbid0IGhhdmUgd3JpdGVxKCkgYnV0IFMvMzkwIHN5c3RlbXMgZG9uJ3QgZXZlbiBoYXZlCisgKiBQQ0kgc28gd2Ugd29uJ3Qgd29ycnkgYWJvdXQgaXQuCisgKi8KKworI2RlZmluZSBNTFg0X0RFQ0xBUkVfRE9PUkJFTExfTE9DSyhuYW1lKQorI2RlZmluZSBNTFg0X0lOSVRfRE9PUkJFTExfTE9DSyhwdHIpICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTUxYNF9HRVRfRE9PUkJFTExfTE9DSyhwdHIpICAgICAgKE5VTEwpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbHg0X3dyaXRlNjRfcmF3KF9fYmU2NCB2YWwsIHZvaWQgX19pb21lbSAqZGVzdCkKK3sKKwlfX3Jhd193cml0ZXEoKF9fZm9yY2UgdTY0KSB2YWwsIGRlc3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWx4NF93cml0ZTY0KF9fYmUzMiB2YWxbMl0sIHZvaWQgX19pb21lbSAqZGVzdCwKKwkJCQlzcGlubG9ja190ICpkb29yYmVsbF9sb2NrKQoreworCV9fcmF3X3dyaXRlcSgqKHU2NCAqKSB2YWwsIGRlc3QpOworfQorCisjZWxzZQorCisvKgorICogSnVzdCBmYWxsIGJhY2sgdG8gYSBzcGlubG9jayB0byBwcm90ZWN0IHRoZSBkb29yYmVsbCBpZgorICogQklUU19QRVJfTE9ORyBpcyAzMiAtLSB0aGVyZSdzIG5vIHBvcnRhYmxlIHdheSB0byBkbyBhdG9taWMgNjQtYml0CisgKiBNTUlPIHdyaXRlcy4KKyAqLworCisjZGVmaW5lIE1MWDRfREVDTEFSRV9ET09SQkVMTF9MT0NLKG5hbWUpIHNwaW5sb2NrX3QgbmFtZTsKKyNkZWZpbmUgTUxYNF9JTklUX0RPT1JCRUxMX0xPQ0socHRyKSAgICAgc3Bpbl9sb2NrX2luaXQocHRyKQorI2RlZmluZSBNTFg0X0dFVF9ET09SQkVMTF9MT0NLKHB0cikgICAgICAocHRyKQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWx4NF93cml0ZTY0X3JhdyhfX2JlNjQgdmFsLCB2b2lkIF9faW9tZW0gKmRlc3QpCit7CisJX19yYXdfd3JpdGVsKCgoX19mb3JjZSB1MzIgKikgJnZhbClbMF0sIGRlc3QpOworCV9fcmF3X3dyaXRlbCgoKF9fZm9yY2UgdTMyICopICZ2YWwpWzFdLCBkZXN0ICsgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbHg0X3dyaXRlNjQoX19iZTMyIHZhbFsyXSwgdm9pZCBfX2lvbWVtICpkZXN0LAorCQkJCXNwaW5sb2NrX3QgKmRvb3JiZWxsX2xvY2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKGRvb3JiZWxsX2xvY2ssIGZsYWdzKTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSB2YWxbMF0sIGRlc3QpOworCV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpIHZhbFsxXSwgZGVzdCArIDQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZG9vcmJlbGxfbG9jaywgZmxhZ3MpOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIE1MWDRfRE9PUkJFTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg0L2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2RyaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiODM1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvZHJpdmVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBNTFg0X0RSSVZFUl9ICisjZGVmaW5lIE1MWDRfRFJJVkVSX0gKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCitzdHJ1Y3QgbWx4NF9kZXY7CisKK2VudW0gbWx4NF9kZXZfZXZlbnQgeworCU1MWDRfREVWX0VWRU5UX0NBVEFTVFJPUEhJQ19FUlJPUiwKKwlNTFg0X0RFVl9FVkVOVF9QT1JUX1VQLAorCU1MWDRfREVWX0VWRU5UX1BPUlRfRE9XTiwKKwlNTFg0X0RFVl9FVkVOVF9QT1JUX1JFSU5JVCwKK307CisKK3N0cnVjdCBtbHg0X2ludGVyZmFjZSB7CisJdm9pZCAqCQkJKCphZGQpCSAoc3RydWN0IG1seDRfZGV2ICpkZXYpOworCXZvaWQJCQkoKnJlbW92ZSkoc3RydWN0IG1seDRfZGV2ICpkZXYsIHZvaWQgKmNvbnRleHQpOworCXZvaWQJCQkoKmV2ZW50KSAoc3RydWN0IG1seDRfZGV2ICpkZXYsIHZvaWQgKmNvbnRleHQsCisJCQkJCSAgZW51bSBtbHg0X2Rldl9ldmVudCBldmVudCwgaW50IHN1YnR5cGUsCisJCQkJCSAgaW50IHBvcnQpOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKK307CisKK2ludCBtbHg0X3JlZ2lzdGVyX2ludGVyZmFjZShzdHJ1Y3QgbWx4NF9pbnRlcmZhY2UgKmludGYpOwordm9pZCBtbHg0X3VucmVnaXN0ZXJfaW50ZXJmYWNlKHN0cnVjdCBtbHg0X2ludGVyZmFjZSAqaW50Zik7CisKKyNlbmRpZiAvKiBNTFg0X0RSSVZFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDQvcXAuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9xcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZWI2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvcXAuaApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKgktIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqCSAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqCSAgZGlzY2xhaW1lci4KKyAqCisgKgktIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqCSAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqCSAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKgkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgTUxYNF9RUF9ICisjZGVmaW5lIE1MWDRfUVBfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L21seDQvZGV2aWNlLmg+CisKKyNkZWZpbmUgTUxYNF9JTlZBTElEX0xLRVkJMHgxMDAKKworZW51bSBtbHg0X3FwX29wdHBhciB7CisJTUxYNF9RUF9PUFRQQVJfQUxUX0FERFJfUEFUSAkJPSAxIDw8IDAsCisJTUxYNF9RUF9PUFRQQVJfUlJFCQkJPSAxIDw8IDEsCisJTUxYNF9RUF9PUFRQQVJfUkFFCQkJPSAxIDw8IDIsCisJTUxYNF9RUF9PUFRQQVJfUldFCQkJPSAxIDw8IDMsCisJTUxYNF9RUF9PUFRQQVJfUEtFWV9JTkRFWAkJPSAxIDw8IDQsCisJTUxYNF9RUF9PUFRQQVJfUV9LRVkJCQk9IDEgPDwgNSwKKwlNTFg0X1FQX09QVFBBUl9STlJfVElNRU9VVAkJPSAxIDw8IDYsCisJTUxYNF9RUF9PUFRQQVJfUFJJTUFSWV9BRERSX1BBVEgJPSAxIDw8IDcsCisJTUxYNF9RUF9PUFRQQVJfU1JBX01BWAkJCT0gMSA8PCA4LAorCU1MWDRfUVBfT1BUUEFSX1JSQV9NQVgJCQk9IDEgPDwgOSwKKwlNTFg0X1FQX09QVFBBUl9QTV9TVEFURQkJCT0gMSA8PCAxMCwKKwlNTFg0X1FQX09QVFBBUl9SRVRSWV9DT1VOVAkJPSAxIDw8IDEyLAorCU1MWDRfUVBfT1BUUEFSX1JOUl9SRVRSWQkJPSAxIDw8IDEzLAorCU1MWDRfUVBfT1BUUEFSX0FDS19USU1FT1VUCQk9IDEgPDwgMTQsCisJTUxYNF9RUF9PUFRQQVJfU0NIRURfUVVFVUUJCT0gMSA8PCAxNgorfTsKKworZW51bSBtbHg0X3FwX3N0YXRlIHsKKwlNTFg0X1FQX1NUQVRFX1JTVAkJCT0gMCwKKwlNTFg0X1FQX1NUQVRFX0lOSVQJCQk9IDEsCisJTUxYNF9RUF9TVEFURV9SVFIJCQk9IDIsCisJTUxYNF9RUF9TVEFURV9SVFMJCQk9IDMsCisJTUxYNF9RUF9TVEFURV9TUUVSCQkJPSA0LAorCU1MWDRfUVBfU1RBVEVfU1FECQkJPSA1LAorCU1MWDRfUVBfU1RBVEVfRVJSCQkJPSA2LAorCU1MWDRfUVBfU1RBVEVfU1FfRFJBSU5JTkcJCT0gNywKKwlNTFg0X1FQX05VTV9TVEFURQorfTsKKworZW51bSB7CisJTUxYNF9RUF9TVF9SQwkJCQk9IDB4MCwKKwlNTFg0X1FQX1NUX1VDCQkJCT0gMHgxLAorCU1MWDRfUVBfU1RfUkQJCQkJPSAweDIsCisJTUxYNF9RUF9TVF9VRAkJCQk9IDB4MywKKwlNTFg0X1FQX1NUX01MWAkJCQk9IDB4NworfTsKKworZW51bSB7CisJTUxYNF9RUF9QTV9NSUdSQVRFRAkJCT0gMHgzLAorCU1MWDRfUVBfUE1fQVJNRUQJCQk9IDB4MCwKKwlNTFg0X1FQX1BNX1JFQVJNCQkJPSAweDEKK307CisKK2VudW0geworCS8qIHBhcmFtczEgKi8KKwlNTFg0X1FQX0JJVF9TUkUJCQkJPSAxIDw8IDE1LAorCU1MWDRfUVBfQklUX1NXRQkJCQk9IDEgPDwgMTQsCisJTUxYNF9RUF9CSVRfU0FFCQkJCT0gMSA8PCAxMywKKwkvKiBwYXJhbXMyICovCisJTUxYNF9RUF9CSVRfUlJFCQkJCT0gMSA8PCAxNSwKKwlNTFg0X1FQX0JJVF9SV0UJCQkJPSAxIDw8IDE0LAorCU1MWDRfUVBfQklUX1JBRQkJCQk9IDEgPDwgMTMsCisJTUxYNF9RUF9CSVRfUklDCQkJCT0gMSA8PAk0LAorfTsKKworc3RydWN0IG1seDRfcXBfcGF0aCB7CisJdTgJCQlmbDsKKwl1OAkJCXJlc2VydmVkMVsyXTsKKwl1OAkJCXBrZXlfaW5kZXg7CisJdTgJCQlyZXNlcnZlZDI7CisJdTgJCQlncmhfbXlsbWM7CisJX19iZTE2CQkJcmxpZDsKKwl1OAkJCWFja3RvOworCXU4CQkJbWdpZF9pbmRleDsKKwl1OAkJCXN0YXRpY19yYXRlOworCXU4CQkJaG9wX2xpbWl0OworCV9fYmUzMgkJCXRjbGFzc19mbG93bGFiZWw7CisJdTgJCQlyZ2lkWzE2XTsKKwl1OAkJCXNjaGVkX3F1ZXVlOworCXU4CQkJc25vb3Blcl9mbGFnczsKKwl1OAkJCXJlc2VydmVkM1syXTsKKwl1OAkJCWNvdW50ZXJfaW5kZXg7CisJdTgJCQlyZXNlcnZlZDRbN107Cit9OworCitzdHJ1Y3QgbWx4NF9xcF9jb250ZXh0IHsKKwlfX2JlMzIJCQlmbGFnczsKKwlfX2JlMzIJCQlwZDsKKwl1OAkJCW10dV9tc2dtYXg7CisJdTgJCQlycV9zaXplX3N0cmlkZTsKKwl1OAkJCXNxX3NpemVfc3RyaWRlOworCXU4CQkJcmxrZXk7CisJX19iZTMyCQkJdXNyX3BhZ2U7CisJX19iZTMyCQkJbG9jYWxfcXBuOworCV9fYmUzMgkJCXJlbW90ZV9xcG47CisJc3RydWN0CQkJbWx4NF9xcF9wYXRoIHByaV9wYXRoOworCXN0cnVjdAkJCW1seDRfcXBfcGF0aCBhbHRfcGF0aDsKKwlfX2JlMzIJCQlwYXJhbXMxOworCXUzMgkJCXJlc2VydmVkMTsKKwlfX2JlMzIJCQluZXh0X3NlbmRfcHNuOworCV9fYmUzMgkJCWNxbl9zZW5kOworCXUzMgkJCXJlc2VydmVkMlsyXTsKKwlfX2JlMzIJCQlsYXN0X2Fja2VkX3BzbjsKKwlfX2JlMzIJCQlzc247CisJX19iZTMyCQkJcGFyYW1zMjsKKwlfX2JlMzIJCQlybnJfbmV4dHJlY3Zwc247CisJX19iZTMyCQkJc3JjZDsKKwlfX2JlMzIJCQljcW5fcmVjdjsKKwlfX2JlNjQJCQlkYl9yZWNfYWRkcjsKKwlfX2JlMzIJCQlxa2V5OworCV9fYmUzMgkJCXNycW47CisJX19iZTMyCQkJbXNuOworCV9fYmUxNgkJCXJxX3dxZV9jb3VudGVyOworCV9fYmUxNgkJCXNxX3dxZV9jb3VudGVyOworCXUzMgkJCXJlc2VydmVkM1syXTsKKwlfX2JlMzIJCQlwYXJhbTM7CisJX19iZTMyCQkJbnVtbW1jcGVlcnNfYmFzZW1rZXk7CisJdTgJCQlsb2dfcGFnZV9zaXplOworCXU4CQkJcmVzZXJ2ZWQ0WzJdOworCXU4CQkJbXR0X2Jhc2VfYWRkcl9oOworCV9fYmUzMgkJCW10dF9iYXNlX2FkZHJfbDsKKwl1MzIJCQlyZXNlcnZlZDVbMTBdOworfTsKKworZW51bSB7CisJTUxYNF9XUUVfQ1RSTF9GRU5DRQk9IDEgPDwgNiwKKwlNTFg0X1dRRV9DVFJMX0NRX1VQREFURQk9IDMgPDwgMiwKKwlNTFg0X1dRRV9DVFJMX1NPTElDSVRFRAk9IDEgPDwgMSwKK307CisKK3N0cnVjdCBtbHg0X3dxZV9jdHJsX3NlZyB7CisJX19iZTMyCQkJb3duZXJfb3Bjb2RlOworCXU4CQkJcmVzZXJ2ZWQyWzNdOworCXU4CQkJZmVuY2Vfc2l6ZTsKKwkvKgorCSAqIEhpZ2ggMjQgYml0cyBhcmUgU1JDIHJlbW90ZSBidWZmZXI7IGxvdyA4IGJpdHMgYXJlIGZsYWdzOgorCSAqIFs3XSAgIFNPIChzdHJvbmcgb3JkZXJpbmcpCisJICogWzVdICAgVENQL1VEUCBjaGVja3N1bQorCSAqIFs0XSAgIElQIGNoZWNrc3VtCisJICogWzM6Ml0gQyAoZ2VuZXJhdGUgY29tcGxldGlvbiBxdWV1ZSBlbnRyeSkKKwkgKiBbMV0gICBTRSAoc29saWNpdGVkIGV2ZW50KQorCSAqLworCV9fYmUzMgkJCXNyY3JiX2ZsYWdzOworCS8qCisJICogaW1tIGlzIGltbWVkaWF0ZSBkYXRhIGZvciBzZW5kL1JETUEgd3JpdGUgdy8gaW1tZWRpYXRlOworCSAqIGFsc28gaW52YWxpZGF0aW9uIGtleSBmb3Igc2VuZCB3aXRoIGludmFsaWRhdGU7IGlucHV0CisJICogbW9kaWZpZXIgZm9yIFdRRXMgb24gQ0NRcy4KKwkgKi8KKwlfX2JlMzIJCQlpbW07Cit9OworCitlbnVtIHsKKwlNTFg0X1dRRV9NTFhfVkwxNQk9IDEgPDwgMTcsCisJTUxYNF9XUUVfTUxYX1NMUgk9IDEgPDwgMTYKK307CisKK3N0cnVjdCBtbHg0X3dxZV9tbHhfc2VnIHsKKwl1OAkJCW93bmVyOworCXU4CQkJcmVzZXJ2ZWQxWzJdOworCXU4CQkJb3Bjb2RlOworCXU4CQkJcmVzZXJ2ZWQyWzNdOworCXU4CQkJc2l6ZTsKKwkvKgorCSAqIFsxN10gICAgVkwxNQorCSAqIFsxNl0gICAgU0xSCisJICogWzE1OjEyXSBzdGF0aWMgcmF0ZQorCSAqIFsxMTo4XSAgU0wKKwkgKiBbNF0gICAgIElDUkMKKwkgKiBbMzoyXSAgIEMKKwkgKiBbMF0gICAgIEZMIChmb3JjZSBsb29wYmFjaykKKwkgKi8KKwlfX2JlMzIJCQlmbGFnczsKKwlfX2JlMTYJCQlybGlkOworCXUxNgkJCXJlc2VydmVkMzsKK307CisKK3N0cnVjdCBtbHg0X3dxZV9kYXRhZ3JhbV9zZWcgeworCV9fYmUzMgkJCWF2WzhdOworCV9fYmUzMgkJCWRxcG47CisJX19iZTMyCQkJcWtleTsKKwlfX2JlMzIJCQlyZXNlcnZkWzJdOworfTsKKworc3RydWN0IG1seDRfd3FlX2JpbmRfc2VnIHsKKwlfX2JlMzIJCQlmbGFnczE7CisJX19iZTMyCQkJZmxhZ3MyOworCV9fYmUzMgkJCW5ld19ya2V5OworCV9fYmUzMgkJCWxrZXk7CisJX19iZTY0CQkJYWRkcjsKKwlfX2JlNjQJCQlsZW5ndGg7Cit9OworCitzdHJ1Y3QgbWx4NF93cWVfZm1yX3NlZyB7CisJX19iZTMyCQkJZmxhZ3M7CisJX19iZTMyCQkJbWVtX2tleTsKKwlfX2JlNjQJCQlidWZfbGlzdDsKKwlfX2JlNjQJCQlzdGFydF9hZGRyOworCV9fYmU2NAkJCXJlZ19sZW47CisJX19iZTMyCQkJb2Zmc2V0OworCV9fYmUzMgkJCXBhZ2Vfc2l6ZTsKKwl1MzIJCQlyZXNlcnZlZFsyXTsKK307CisKK3N0cnVjdCBtbHg0X3dxZV9mbXJfZXh0X3NlZyB7CisJdTgJCQlmbGFnczsKKwl1OAkJCXJlc2VydmVkOworCV9fYmUxNgkJCWFwcF9tYXNrOworCV9fYmUxNgkJCXdpcmVfYXBwX3RhZzsKKwlfX2JlMTYJCQltZW1fYXBwX3RhZzsKKwlfX2JlMzIJCQl3aXJlX3JlZl90YWdfYmFzZTsKKwlfX2JlMzIJCQltZW1fcmVmX3RhZ19iYXNlOworfTsKKworc3RydWN0IG1seDRfd3FlX2xvY2FsX2ludmFsX3NlZyB7CisJdTgJCQlmbGFnczsKKwl1OAkJCXJlc2VydmVkMVszXTsKKwlfX2JlMzIJCQltZW1fa2V5OworCXU4CQkJcmVzZXJ2ZWQyWzNdOworCXU4CQkJZ3Vlc3RfaWQ7CisJX19iZTY0CQkJcGE7Cit9OworCitzdHJ1Y3QgbWx4NF93cWVfcmFkZHJfc2VnIHsKKwlfX2JlNjQJCQlyYWRkcjsKKwlfX2JlMzIJCQlya2V5OworCXUzMgkJCXJlc2VydmVkOworfTsKKworc3RydWN0IG1seDRfd3FlX2F0b21pY19zZWcgeworCV9fYmU2NAkJCXN3YXBfYWRkOworCV9fYmU2NAkJCWNvbXBhcmU7Cit9OworCitzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcgeworCV9fYmUzMgkJCWJ5dGVfY291bnQ7CisJX19iZTMyCQkJbGtleTsKKwlfX2JlNjQJCQlhZGRyOworfTsKKworc3RydWN0IG1seDRfd3FlX2lubGluZV9zZWcgeworCV9fYmUzMgkJCWJ5dGVfY291bnQ7Cit9OworCitpbnQgbWx4NF9xcF9tb2RpZnkoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X210dCAqbXR0LAorCQkgICBlbnVtIG1seDRfcXBfc3RhdGUgY3VyX3N0YXRlLCBlbnVtIG1seDRfcXBfc3RhdGUgbmV3X3N0YXRlLAorCQkgICBzdHJ1Y3QgbWx4NF9xcF9jb250ZXh0ICpjb250ZXh0LCBlbnVtIG1seDRfcXBfb3B0cGFyIG9wdHBhciwKKwkJICAgaW50IHNxZF9ldmVudCwgc3RydWN0IG1seDRfcXAgKnFwKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWx4NF9xcCAqX19tbHg0X3FwX2xvb2t1cChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTMyIHFwbikKK3sKKwlyZXR1cm4gcmFkaXhfdHJlZV9sb29rdXAoJmRldi0+cXBfdGFibGVfdHJlZSwgcXBuICYgKGRldi0+Y2Fwcy5udW1fcXBzIC0gMSkpOworfQorCit2b2lkIG1seDRfcXBfcmVtb3ZlKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBzdHJ1Y3QgbWx4NF9xcCAqcXApOworCisjZW5kaWYgLyogTUxYNF9RUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDQvc3JxLmggYi9pbmNsdWRlL2xpbnV4L21seDQvc3JxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5YTA2OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWx4NC9zcnEuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqCS0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICoJICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICoJICBkaXNjbGFpbWVyLgorICoKKyAqCS0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICoJICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICoJICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqCSAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBNTFg0X1NSUV9ICisjZGVmaW5lIE1MWDRfU1JRX0gKKworc3RydWN0IG1seDRfd3FlX3NycV9uZXh0X3NlZyB7CisJdTE2CQkJcmVzZXJ2ZWQxOworCV9fYmUxNgkJCW5leHRfd3FlX2luZGV4OworCXUzMgkJCXJlc2VydmVkMlszXTsKK307CisKKyNlbmRpZiAvKiBNTFg0X1NSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggNDY3MGViZC4uZTQxODNjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX01NX0gKICNkZWZpbmUgX0xJTlVYX01NX0gKIAotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAKQEAgLTIwLDYgKzE5LDcgQEAKIAogc3RydWN0IG1lbXBvbGljeTsKIHN0cnVjdCBhbm9uX3ZtYTsKK3N0cnVjdCB1c2VyX3N0cnVjdDsKIAogI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNICAgICAgICAgIC8qIERvbid0IHVzZSBtYXBucnMsIGRvIGl0IHByb3Blcmx5ICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbWFwbnI7CkBAIC03MTcsMTQgKzcxNyw3IEBACiAJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBpbnQgY2FuX2RvX21sb2NrKHZvaWQpCi17Ci0JaWYgKGNhcGFibGUoQ0FQX0lQQ19MT0NLKSkKLQkJcmV0dXJuIDE7Ci0JaWYgKGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXIgIT0gMCkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19CitleHRlcm4gaW50IGNhbl9kb19tbG9jayh2b2lkKTsKIGV4dGVybiBpbnQgdXNlcl9zaG1fbG9jayhzaXplX3QsIHN0cnVjdCB1c2VyX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHVzZXJfc2htX3VubG9jayhzaXplX3QsIHN0cnVjdCB1c2VyX3N0cnVjdCAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCmluZGV4IGUzMDY4N2IuLmQ1YmIxNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTUwLDEzICs1MCwxNiBAQAogCSAgICBzcGlubG9ja190IHB0bDsKICNlbmRpZgogCSAgICBzdHJ1Y3QgewkJCS8qIFNMVUIgdXNlcyAqLwotCQlzdHJ1Y3QgcGFnZSAqZmlyc3RfcGFnZTsJLyogQ29tcG91bmQgcGFnZXMgKi8KKwkgICAgCXZvaWQgKipsb2NrbGVzc19mcmVlbGlzdDsKIAkJc3RydWN0IGttZW1fY2FjaGUgKnNsYWI7CS8qIFBvaW50ZXIgdG8gc2xhYiAqLwogCSAgICB9OworCSAgICBzdHJ1Y3QgeworCQlzdHJ1Y3QgcGFnZSAqZmlyc3RfcGFnZTsJLyogQ29tcG91bmQgcGFnZXMgKi8KKwkgICAgfTsKIAl9OwogCXVuaW9uIHsKIAkJcGdvZmZfdCBpbmRleDsJCS8qIE91ciBvZmZzZXQgd2l0aGluIG1hcHBpbmcuICovCi0JCXZvaWQgKmZyZWVsaXN0OwkJLyogU0xVQjogcG9pbnRlciB0byBmcmVlIG9iamVjdCAqLworCQl2b2lkICpmcmVlbGlzdDsJCS8qIFNMVUI6IGZyZWVsaXN0IHJlcS4gc2xhYiBsb2NrICovCiAJfTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxydTsJCS8qIFBhZ2VvdXQgbGlzdCwgZWcuIGFjdGl2ZV9saXN0CiAJCQkJCSAqIHByb3RlY3RlZCBieSB6b25lLT5scnVfbG9jayAhCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCAyZjE1NDRlLi5kMDliMTM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTgzLDYgKzgzLDkgQEAKIAogc3RydWN0IHBlcl9jcHVfcGFnZXNldCB7CiAJc3RydWN0IHBlcl9jcHVfcGFnZXMgcGNwWzJdOwkvKiAwOiBob3QuICAxOiBjb2xkICovCisjaWZkZWYgQ09ORklHX05VTUEKKwlzOCBleHBpcmU7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCiAJczggc3RhdF90aHJlc2hvbGQ7CiAJczggdm1fc3RhdF9kaWZmW05SX1ZNX1pPTkVfU1RBVF9JVEVNU107CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oCmluZGV4IDRhZjBiMWYuLjFmYTRkOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oCkBAIC0xNCwxMCArMTQsOSBAQAogCWludCBldmVudDsKIH07CiAKLWV4dGVybiBpbnQgY29weV9tbnRfbnMoaW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci1leHRlcm4gdm9pZCBfX3B1dF9tbnRfbnMoc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zKTsKLWV4dGVybiBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqZHVwX21udF9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwKK2V4dGVybiBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqY29weV9tbnRfbnMoaW50LCBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqLAogCQlzdHJ1Y3QgZnNfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgX19wdXRfbW50X25zKHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucyk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfbW50X25zKHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IGYwYjBmYWYuLmU2ZTBmODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtMTI0LDcgKzEyNCw3IEBACiAgKi8KICNkZWZpbmUgTU9EVUxFX0xJQ0VOU0UoX2xpY2Vuc2UpIE1PRFVMRV9JTkZPKGxpY2Vuc2UsIF9saWNlbnNlKQogCi0vKiBBdXRob3IsIGlkZWFsbHkgb2YgZm9ybSBOQU1FIDxFTUFJTD5bLCBOQU1FIDxFTUFJTD5dKlsgYW5kIE5BTUUgPEVNQUlMPl0gKi8KKy8qIEF1dGhvciwgaWRlYWxseSBvZiBmb3JtIE5BTUVbLCBOQU1FXSpbIGFuZCBOQU1FXSAqLwogI2RlZmluZSBNT0RVTEVfQVVUSE9SKF9hdXRob3IpIE1PRFVMRV9JTkZPKGF1dGhvciwgX2F1dGhvcikKICAgCiAvKiBXaGF0IHlvdXIgbW9kdWxlIGRvZXMuICovCkBAIC0zNTYsNiArMzU2LDkgQEAKIAkgICBrZWVwaW5nIHBvaW50ZXJzIHRvIHRoaXMgc3R1ZmYgKi8KIAljaGFyICphcmdzOwogfTsKKyNpZm5kZWYgTU9EVUxFX0FSQ0hfSU5JVAorI2RlZmluZSBNT0RVTEVfQVJDSF9JTklUIHt9CisjZW5kaWYKIAogLyogRklYTUU6IEl0J2QgYmUgbmljZSB0byBpc29sYXRlIG1vZHVsZXMgZHVyaW5nIGluaXQsIHRvbywgc28gdGhleQogICAgYXJlbid0IHVzZWQgYmVmb3JlIHRoZXkgKG1heSkgZmFpbC4gIEJ1dCBwcmVzZW50bHkgdG9vIG11Y2ggY29kZQpAQCAtMzcwLDE2ICszNzMsMTQgQEAKIHN0cnVjdCBtb2R1bGUgKl9fbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpOwogaW50IGlzX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLS8qIFJldHVybnMgbW9kdWxlIGFuZCBmaWxscyBpbiB2YWx1ZSwgZGVmaW5lZCBhbmQgbmFtZWJ1Ziwgb3IgTlVMTCBpZgorLyogUmV0dXJucyAwIGFuZCBmaWxscyBpbiB2YWx1ZSwgZGVmaW5lZCBhbmQgbmFtZWJ1Ziwgb3IgLUVSQU5HRSBpZgogICAgc3ltbnVtIG91dCBvZiByYW5nZS4gKi8KLXN0cnVjdCBtb2R1bGUgKm1vZHVsZV9nZXRfa2FsbHN5bSh1bnNpZ25lZCBpbnQgc3ltbnVtLCB1bnNpZ25lZCBsb25nICp2YWx1ZSwKLQkJCQljaGFyICp0eXBlLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbik7CitpbnQgbW9kdWxlX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sIHVuc2lnbmVkIGxvbmcgKnZhbHVlLCBjaGFyICp0eXBlLAorCQkJY2hhciAqbmFtZSwgY2hhciAqbW9kdWxlX25hbWUsIGludCAqZXhwb3J0ZWQpOwogCiAvKiBMb29rIGZvciB0aGlzIG5hbWU6IGNhbiBiZSBvZiBmb3JtIG1vZHVsZTpuYW1lLiAqLwogdW5zaWduZWQgbG9uZyBtb2R1bGVfa2FsbHN5bXNfbG9va3VwX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CiAKLWludCBpc19leHBvcnRlZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpOwotCiBleHRlcm4gdm9pZCBfX21vZHVsZV9wdXRfYW5kX2V4aXQoc3RydWN0IG1vZHVsZSAqbW9kLCBsb25nIGNvZGUpCiAJX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKICNkZWZpbmUgbW9kdWxlX3B1dF9hbmRfZXhpdChjb2RlKSBfX21vZHVsZV9wdXRfYW5kX2V4aXQoVEhJU19NT0RVTEUsIGNvZGUpOwpAQCAtNDU2LDYgKzQ1Nyw4IEBACiAJCQkJICB1bnNpZ25lZCBsb25nICpzeW1ib2xzaXplLAogCQkJCSAgdW5zaWduZWQgbG9uZyAqb2Zmc2V0LAogCQkJCSAgY2hhciAqKm1vZG5hbWUpOworaW50IGxvb2t1cF9tb2R1bGVfc3ltYm9sX25hbWUodW5zaWduZWQgbG9uZyBhZGRyLCBjaGFyICpzeW1uYW1lKTsKK2ludCBsb29rdXBfbW9kdWxlX3N5bWJvbF9hdHRycyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgKnNpemUsIHVuc2lnbmVkIGxvbmcgKm9mZnNldCwgY2hhciAqbW9kbmFtZSwgY2hhciAqbmFtZSk7CiAKIC8qIEZvciBleHRhYmxlLmMgdG8gc2VhcmNoIG1vZHVsZXMnIGV4Y2VwdGlvbiB0YWJsZXMuICovCiBjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpzZWFyY2hfbW9kdWxlX2V4dGFibGVzKHVuc2lnbmVkIGxvbmcgYWRkcik7CkBAIC01MjcsMTIgKzUzMCwyMSBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtb2R1bGUgKm1vZHVsZV9nZXRfa2FsbHN5bSh1bnNpZ25lZCBpbnQgc3ltbnVtLAotCQkJCQkJdW5zaWduZWQgbG9uZyAqdmFsdWUsCi0JCQkJCQljaGFyICp0eXBlLCBjaGFyICpuYW1lLAotCQkJCQkJc2l6ZV90IG5hbWVsZW4pCitzdGF0aWMgaW5saW5lIGludCBsb29rdXBfbW9kdWxlX3N5bWJvbF9uYW1lKHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqc3ltbmFtZSkKIHsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gLUVSQU5HRTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9va3VwX21vZHVsZV9zeW1ib2xfYXR0cnModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpzaXplLCB1bnNpZ25lZCBsb25nICpvZmZzZXQsIGNoYXIgKm1vZG5hbWUsIGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIC1FUkFOR0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1vZHVsZV9nZXRfa2FsbHN5bSh1bnNpZ25lZCBpbnQgc3ltbnVtLCB1bnNpZ25lZCBsb25nICp2YWx1ZSwKKwkJCQkJY2hhciAqdHlwZSwgY2hhciAqbmFtZSwKKwkJCQkJY2hhciAqbW9kdWxlX25hbWUsIGludCAqZXhwb3J0ZWQpCit7CisJcmV0dXJuIC1FUkFOR0U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtb2R1bGVfa2FsbHN5bXNfbG9va3VwX25hbWUoY29uc3QgY2hhciAqbmFtZSkKQEAgLTU0MCwxMSArNTUyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaXNfZXhwb3J0ZWQoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogbmIpCiB7CiAJLyogbm8gZXZlbnRzIHdpbGwgaGFwcGVuIGFueXdheSwgc28gdGhpcyBjYW4gYWx3YXlzIHN1Y2NlZWQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaAppbmRleCBkYWI2OWFmLi42ZDMwNDdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCkBAIC0zMyw3ICszMyw3IEBACiAKICNkZWZpbmUgTU5UX1NIQVJFRAkweDEwMDAJLyogaWYgdGhlIHZmc21vdW50IGlzIGEgc2hhcmVkIG1vdW50ICovCiAjZGVmaW5lIE1OVF9VTkJJTkRBQkxFCTB4MjAwMAkvKiBpZiB0aGUgdmZzbW91bnQgaXMgYSB1bmJpbmRhYmxlIG1vdW50ICovCi0jZGVmaW5lIE1OVF9QTk9ERV9NQVNLCTB4MzAwMAkvKiBwcm9wb2dhdGlvbiBmbGFnIG1hc2sgKi8KKyNkZWZpbmUgTU5UX1BOT0RFX01BU0sJMHgzMDAwCS8qIHByb3BhZ2F0aW9uIGZsYWcgbWFzayAqLwogCiBzdHJ1Y3QgdmZzbW91bnQgewogCXN0cnVjdCBsaXN0X2hlYWQgbW50X2hhc2g7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21wYWdlLmggYi9pbmNsdWRlL2xpbnV4L21wYWdlLmgKaW5kZXggY2M1ZmI3NS4uMDY4YTBjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcGFnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXBhZ2UuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmZGVmIENPTkZJR19CTE9DSwogCiBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2w7Ci10eXBlZGVmIGludCAod3JpdGVwYWdlX3QpKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiAKIGludCBtcGFnZV9yZWFkcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAogCQkJCXVuc2lnbmVkIG5yX3BhZ2VzLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tc2Rvc19mcy5oIGIvaW5jbHVkZS9saW51eC9tc2Rvc19mcy5oCmluZGV4IGZhMjUzZmEuLjBlMDljMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXNkb3NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzLmgKQEAgLTIwNSw3ICsyMDUsOCBAQAogCQkgbnVtdGFpbDoxLCAgICAgICAvKiBEb2VzIGZpcnN0IGFsaWFzIGhhdmUgYSBudW1lcmljICd+MScgdHlwZSB0YWlsPyAqLwogCQkgYXRhcmk6MSwgICAgICAgICAvKiBVc2UgQXRhcmkgR0VNRE9TIHZhcmlhdGlvbiBvZiBNUy1ET1MgZnMgKi8KIAkJIGZsdXNoOjEsCSAgLyogd3JpdGUgdGhpbmdzIHF1aWNrbHkgKi8KLQkJIG5vY2FzZToxOwkgIC8qIERvZXMgdGhpcyBuZWVkIGNhc2UgY29udmVyc2lvbj8gMD1uZWVkIGNhc2UgY29udmVyc2lvbiovCisJCSBub2Nhc2U6MSwJICAvKiBEb2VzIHRoaXMgbmVlZCBjYXNlIGNvbnZlcnNpb24/IDA9bmVlZCBjYXNlIGNvbnZlcnNpb24qLworCQkgdXNlZnJlZToxOwkgIC8qIFVzZSBmcmVlX2NsdXN0ZXJzIGZvciBGQVQzMiAqLwogfTsKIAogI2RlZmluZSBGQVRfSEFTSF9CSVRTCTgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKaW5kZXggNDVkNDgyYy4uZmQ2NGNjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKQEAgLTksMTAgKzksNiBAQAogI2lmbmRlZiBfX01URF9NVERfSF9fCiAjZGVmaW5lIF9fTVREX01URF9IX18KIAotI2lmbmRlZiBfX0tFUk5FTF9fCi0jZXJyb3IgVGhpcyBpcyBhIGtlcm5lbCBoZWFkZXIuIFBlcmhhcHMgaW5jbHVkZSBtdGQtdXNlci5oIGluc3RlYWQ/Ci0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CkBAIC0xMzcsOSArMTMzLDYgQEAKIAlpbnQgbnVtZXJhc2VyZWdpb25zOwogCXN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8gKmVyYXNlcmVnaW9uczsKIAotCS8qIFRoaXMgcmVhbGx5IHNob3VsZG4ndCBiZSBoZXJlLiBJdCBjYW4gZ28gYXdheSBpbiAyLjUgKi8KLQl1X2ludDMyX3QgYmFua19zaXplOwotCiAJaW50ICgqZXJhc2UpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKTsKIAogCS8qIFRoaXMgc3R1ZmYgZm9yIGVYZWN1dGUtSW4tUGxhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAppbmRleCBjZjE5N2FkLi5kMjM2NWM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCkBAIC01NjAsNiArNTYwLDcgQEAKICAqIEBjaGlwX2RlbGF5OgkJUi9CIGRlbGF5IHZhbHVlIGluIHVzCiAgKiBAb3B0aW9uczoJCU9wdGlvbiBmbGFncywgZS5nLiAxNmJpdCBidXN3aWR0aAogICogQGVjY2xheW91dDoJCWVjYyBsYXlvdXQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBwYXJ0X3Byb2JlX3R5cGVzOglOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgcHJvYmUgdHlwZXMKICAqIEBwcml2OgkJaGFyZHdhcmUgY29udHJvbGxlciBzcGVjaWZpYyBzZXR0aW5ncwogICovCiBzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jaGlwIHsKQEAgLTU3MCw2ICs1NzEsNyBAQAogCXN0cnVjdCBuYW5kX2VjY2xheW91dAkqZWNjbGF5b3V0OwogCWludAkJCWNoaXBfZGVsYXk7CiAJdW5zaWduZWQgaW50CQlvcHRpb25zOworCWNvbnN0IGNoYXIJCSoqcGFydF9wcm9iZV90eXBlczsKIAl2b2lkCQkJKnByaXY7CiB9OwogCkBAIC01NzgsNiArNTgwLDggQEAKICAqIEBod2NvbnRyb2w6CQlwbGF0Zm9ybSBzcGVjaWZpYyBoYXJkd2FyZSBjb250cm9sIHN0cnVjdHVyZQogICogQGRldl9yZWFkeToJCXBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9uIHRvIHJlYWQgcmVhZHkvYnVzeSBwaW4KICAqIEBzZWxlY3RfY2hpcDoJcGxhdGZvcm0gc3BlY2lmaWMgY2hpcCBzZWxlY3QgZnVuY3Rpb24KKyAqIEBjbWRfY3RybDoJCXBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9uIGZvciBjb250cm9sbGluZworICoJCQlBTEUvQ0xFL25DRS4gQWxzbyB1c2VkIHRvIHdyaXRlIGNvbW1hbmQgYW5kIGFkZHJlc3MKICAqIEBwcml2OgkJcHJpdmF0ZSBkYXRhIHRvIHRyYW5zcG9ydCBkcml2ZXIgc3BlY2lmaWMgc2V0dGluZ3MKICAqCiAgKiBBbGwgZmllbGRzIGFyZSBvcHRpb25hbCBhbmQgZGVwZW5kIG9uIHRoZSBoYXJkd2FyZSBkcml2ZXIgcmVxdWlyZW1lbnRzCkBAIC01ODYsOSArNTkwLDIxIEBACiAJdm9pZAkJKCpod2NvbnRyb2wpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKTsKIAlpbnQJCSgqZGV2X3JlYWR5KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAJdm9pZAkJKCpzZWxlY3RfY2hpcCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKTsKKwl2b2lkCQkoKmNtZF9jdHJsKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGRhdCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGN0cmwpOwogCXZvaWQJCSpwcml2OwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIC0gY29udGFpbmVyIHN0cnVjdHVyZSBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgZGF0YQorICogQGNoaXA6CQljaGlwIGxldmVsIGNoaXAgc3RydWN0dXJlCisgKiBAY3RybDoJCWNvbnRyb2xsZXIgbGV2ZWwgZGV2aWNlIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jaGlwCWNoaXA7CisJc3RydWN0IHBsYXRmb3JtX25hbmRfY3RybAljdHJsOworfTsKKwogLyogU29tZSBoZWxwZXJzIHRvIGFjY2VzcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzICovCiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jaGlwICpnZXRfcGxhdGZvcm1fbmFuZGNoaXAoc3RydWN0IG10ZF9pbmZvICptdGQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L211dGV4LmggYi9pbmNsdWRlL2xpbnV4L211dGV4LmgKaW5kZXggYjgxYmMyYS4uMGQ1MGVhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdXRleC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXV0ZXguaApAQCAtMTIxLDExICsxMjEsMTIgQEAKICAqIEFsc28gc2VlIERvY3VtZW50YXRpb24vbXV0ZXgtZGVzaWduLnR4dC4KICAqLwogZXh0ZXJuIHZvaWQgZmFzdGNhbGwgbXV0ZXhfbG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2spOwotZXh0ZXJuIGludCBmYXN0Y2FsbCBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoc3RydWN0IG11dGV4ICpsb2NrKTsKK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIGZhc3RjYWxsIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShzdHJ1Y3QgbXV0ZXggKmxvY2spOwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIGV4dGVybiB2b2lkIG11dGV4X2xvY2tfbmVzdGVkKHN0cnVjdCBtdXRleCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzKTsKLWV4dGVybiBpbnQgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX25lc3RlZChzdHJ1Y3QgbXV0ZXggKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyk7CitleHRlcm4gaW50IF9fbXVzdF9jaGVjayBtdXRleF9sb2NrX2ludGVycnVwdGlibGVfbmVzdGVkKHN0cnVjdCBtdXRleCAqbG9jaywKKwkJCQkJdW5zaWduZWQgaW50IHN1YmNsYXNzKTsKICNlbHNlCiAjIGRlZmluZSBtdXRleF9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcykgbXV0ZXhfbG9jayhsb2NrKQogIyBkZWZpbmUgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX25lc3RlZChsb2NrLCBzdWJjbGFzcykgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGxvY2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCAzMDQ0NjIyLi4zYTcwZjU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTQ2Nyw2ICs0NjcsOCBAQAogCS8qIGRldmljZSBpbmRleCBoYXNoIGNoYWluICovCiAJc3RydWN0IGhsaXN0X25vZGUJaW5kZXhfaGxpc3Q7CiAKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbGlua193YXRjaF9uZXh0OworCiAJLyogcmVnaXN0ZXIvdW5yZWdpc3RlciBzdGF0ZSBtYWNoaW5lICovCiAJZW51bSB7IE5FVFJFR19VTklOSVRJQUxJWkVEPTAsCiAJICAgICAgIE5FVFJFR19SRUdJU1RFUkVELAkvKiBjb21wbGV0ZWQgcmVnaXN0ZXJfbmV0ZGV2aWNlICovCkBAIC05MDgsNiArOTEwLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHNhbWUgYXMgbmV0aWZfcnhfY29tcGxldGUsIGV4Y2VwdCB0aGF0IGxvY2FsX2lycV9zYXZlKGZsYWdzKQorICogaGFzIGFscmVhZHkgYmVlbiBpc3N1ZWQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlCVUdfT04oIXRlc3RfYml0KF9fTElOS19TVEFURV9SWF9TQ0hFRCwgJmRldi0+c3RhdGUpKTsKKwlsaXN0X2RlbCgmZGV2LT5wb2xsX2xpc3QpOworCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCWNsZWFyX2JpdChfX0xJTktfU1RBVEVfUlhfU0NIRUQsICZkZXYtPnN0YXRlKTsKK30KKwogLyogUmVtb3ZlIGludGVyZmFjZSBmcm9tIHBvbGwgbGlzdDogaXQgbXVzdCBiZSBpbiB0aGUgcG9sbCBsaXN0CiAgKiBvbiBjdXJyZW50IGNwdS4gVGhpcyBwcmltaXRpdmUgaXMgY2FsbGVkIGJ5IGRldi0+cG9sbCgpLCB3aGVuCiAgKiBpdCBjb21wbGV0ZXMgdGhlIHdvcmsuIFRoZSBkZXZpY2UgY2Fubm90IGJlIG91dCBvZiBwb2xsIGxpc3QgYXQgdGhpcwpAQCAtOTE4LDEwICs5MzEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JQlVHX09OKCF0ZXN0X2JpdChfX0xJTktfU1RBVEVfUlhfU0NIRUQsICZkZXYtPnN0YXRlKSk7Ci0JbGlzdF9kZWwoJmRldi0+cG9sbF9saXN0KTsKLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKLQljbGVhcl9iaXQoX19MSU5LX1NUQVRFX1JYX1NDSEVELCAmZGV2LT5zdGF0ZSk7CisJX19uZXRpZl9yeF9jb21wbGV0ZShkZXYpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtOTM4LDE3ICs5NDgsNiBAQAogCWNsZWFyX2JpdChfX0xJTktfU1RBVEVfUlhfU0NIRUQsICZkZXYtPnN0YXRlKTsKIH0KIAotLyogc2FtZSBhcyBuZXRpZl9yeF9jb21wbGV0ZSwgZXhjZXB0IHRoYXQgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCi0gKiBoYXMgYWxyZWFkeSBiZWVuIGlzc3VlZAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRpZl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCUJVR19PTighdGVzdF9iaXQoX19MSU5LX1NUQVRFX1JYX1NDSEVELCAmZGV2LT5zdGF0ZSkpOwotCWxpc3RfZGVsKCZkZXYtPnBvbGxfbGlzdCk7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7Ci0JY2xlYXJfYml0KF9fTElOS19TVEFURV9SWF9TQ0hFRCwgJmRldi0+c3RhdGUpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfdHhfbG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXNwaW5fbG9jaygmZGV2LT5feG1pdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuaAppbmRleCA4MTQ1M2VhLi5iN2MzNjBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5oCkBAIC0zNyw4ICszNyw3IEBACiAJCQkJICAgICAgIGVudW0gbmZfY3RfZnRwX3R5cGUgdHlwZSwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG1hdGNob2ZmLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCi0JCQkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsCi0JCQkJICAgICAgIHUzMiAqc2VxKTsKKwkJCQkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX05GX0NPTk5UUkFDS19GVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmgKaW5kZXggMzhkNzRkNS4uZjM1YjZiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oCkBAIC0xLDQgKzEsNCBAQAotLyogR2VuZXJhdGVkIGJ5IEppbmcgTWluIFpoYW8ncyBBU04uMSBwYXJzZXIsIEFwciAyMCAyMDA2CisvKiBHZW5lcmF0ZWQgYnkgSmluZyBNaW4gWmhhbydzIEFTTi4xIHBhcnNlciwgTWF5IDE2IDIwMDcKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICoKQEAgLTEyLDcgKzEyLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgVHJhbnNwb3J0QWRkcmVzc19pcDZBZGRyZXNzIHsJLyogU0VRVUVOQ0UgKi8KIAlpbnQgb3B0aW9uczsJCS8qIE5vIHVzZSAqLwotCXVuc2lnbmVkIGlwNjsKKwl1bnNpZ25lZCBpcDsKIH0gVHJhbnNwb3J0QWRkcmVzc19pcDZBZGRyZXNzOwogCiB0eXBlZGVmIHN0cnVjdCBUcmFuc3BvcnRBZGRyZXNzIHsJLyogQ0hPSUNFICovCkBAIC0zNjQsMjMgKzM2NCw2IEBACiAJQWxlcnRpbmdfVVVJRV9mYXN0U3RhcnQgZmFzdFN0YXJ0OwogfSBBbGVydGluZ19VVUlFOwogCi10eXBlZGVmIHN0cnVjdCBJbmZvcm1hdGlvbl9VVUlFX2Zhc3RTdGFydCB7CS8qIFNFUVVFTkNFIE9GICovCi0JaW50IGNvdW50OwotCU9wZW5Mb2dpY2FsQ2hhbm5lbCBpdGVtWzMwXTsKLX0gSW5mb3JtYXRpb25fVVVJRV9mYXN0U3RhcnQ7Ci0KLXR5cGVkZWYgc3RydWN0IEluZm9ybWF0aW9uX1VVSUUgewkvKiBTRVFVRU5DRSAqLwotCWVudW0gewotCQllSW5mb3JtYXRpb25fVVVJRV9jYWxsSWRlbnRpZmllciA9ICgxIDw8IDMxKSwKLQkJZUluZm9ybWF0aW9uX1VVSUVfdG9rZW5zID0gKDEgPDwgMzApLAotCQllSW5mb3JtYXRpb25fVVVJRV9jcnlwdG9Ub2tlbnMgPSAoMSA8PCAyOSksCi0JCWVJbmZvcm1hdGlvbl9VVUlFX2Zhc3RTdGFydCA9ICgxIDw8IDI4KSwKLQkJZUluZm9ybWF0aW9uX1VVSUVfZmFzdENvbm5lY3RSZWZ1c2VkID0gKDEgPDwgMjcpLAotCQllSW5mb3JtYXRpb25fVVVJRV9jaXJjdWl0SW5mbyA9ICgxIDw8IDI2KSwKLQl9IG9wdGlvbnM7Ci0JSW5mb3JtYXRpb25fVVVJRV9mYXN0U3RhcnQgZmFzdFN0YXJ0OwotfSBJbmZvcm1hdGlvbl9VVUlFOwotCiB0eXBlZGVmIHN0cnVjdCBGYWNpbGl0eVJlYXNvbiB7CS8qIENIT0lDRSAqLwogCWVudW0gewogCQllRmFjaWxpdHlSZWFzb25fcm91dGVDYWxsVG9HYXRla2VlcGVyLApAQCAtNDcxLDcgKzQ1NCw2IEBACiAJCUNhbGxQcm9jZWVkaW5nX1VVSUUgY2FsbFByb2NlZWRpbmc7CiAJCUNvbm5lY3RfVVVJRSBjb25uZWN0OwogCQlBbGVydGluZ19VVUlFIGFsZXJ0aW5nOwotCQlJbmZvcm1hdGlvbl9VVUlFIGluZm9ybWF0aW9uOwogCQlGYWNpbGl0eV9VVUlFIGZhY2lsaXR5OwogCQlQcm9ncmVzc19VVUlFIHByb2dyZXNzOwogCX07CkBAIC01NjEsNiArNTQzLDcgQEAKIAl9IG9wdGlvbnM7CiAJT3BlbkxvZ2ljYWxDaGFubmVsQWNrX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMKIAkgICAgcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyczsKKwlOZXR3b3JrQWNjZXNzUGFyYW1ldGVycyBzZXBhcmF0ZVN0YWNrOwogCU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19mb3J3YXJkTXVsdGlwbGV4QWNrUGFyYW1ldGVycwogCSAgICBmb3J3YXJkTXVsdGlwbGV4QWNrUGFyYW1ldGVyczsKIH0gT3BlbkxvZ2ljYWxDaGFubmVsQWNrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggMDIyZWRmYS4uN2U3MzNhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC01NCw2ICs1NCwxNCBAQAogCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKIH07CiAKKyNkZWZpbmUgWFRfVEFSR0VUX0lOSVQoX19uYW1lLCBfX3NpemUpCQkJCQkgICAgICAgXAorewkJCQkJCQkJCSAgICAgICBcCisJLnRhcmdldC51LnVzZXIgPSB7CQkJCQkJICAgICAgIFwKKwkJLnRhcmdldF9zaXplCT0gWFRfQUxJR04oX19zaXplKSwJCQkgICAgICAgXAorCQkubmFtZQkJPSBfX25hbWUsCQkJCSAgICAgICBcCisJfSwJCQkJCQkJCSAgICAgICBcCit9CisKIHN0cnVjdCB4dF9zdGFuZGFyZF90YXJnZXQKIHsKIAlzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0IHRhcmdldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCmluZGV4IDI0Yzg3ODZkLi41ODRjZDFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmgKQEAgLTIzOCw2ICsyMzgsNDcgQEAKICAqLwogI2lmZGVmIF9fS0VSTkVMX18KIAorLyogU3RhbmRhcmQgZW50cnkuICovCitzdHJ1Y3QgYXJwdF9zdGFuZGFyZAoreworCXN0cnVjdCBhcnB0X2VudHJ5IGVudHJ5OworCXN0cnVjdCBhcnB0X3N0YW5kYXJkX3RhcmdldCB0YXJnZXQ7Cit9OworCitzdHJ1Y3QgYXJwdF9lcnJvcl90YXJnZXQKK3sKKwlzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgdGFyZ2V0OworCWNoYXIgZXJyb3JuYW1lW0FSUFRfRlVOQ1RJT05fTUFYTkFNRUxFTl07Cit9OworCitzdHJ1Y3QgYXJwdF9lcnJvcgoreworCXN0cnVjdCBhcnB0X2VudHJ5IGVudHJ5OworCXN0cnVjdCBhcnB0X2Vycm9yX3RhcmdldCB0YXJnZXQ7Cit9OworCisjZGVmaW5lIEFSUFRfRU5UUllfSU5JVChfX3NpemUpCQkJCQkJICAgICAgIFwKK3sJCQkJCQkJCQkgICAgICAgXAorCS50YXJnZXRfb2Zmc2V0CT0gc2l6ZW9mKHN0cnVjdCBhcnB0X2VudHJ5KSwJCQkgICAgICAgXAorCS5uZXh0X29mZnNldAk9IChfX3NpemUpLAkJCQkJICAgICAgIFwKK30KKworI2RlZmluZSBBUlBUX1NUQU5EQVJEX0lOSVQoX192ZXJkaWN0KQkJCQkJICAgICAgIFwKK3sJCQkJCQkJCQkgICAgICAgXAorCS5lbnRyeQkJPSBBUlBUX0VOVFJZX0lOSVQoc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSksICAgICAgIFwKKwkudGFyZ2V0CQk9IFhUX1RBUkdFVF9JTklUKEFSUFRfU1RBTkRBUkRfVEFSR0VULAkJICAgICAgIFwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgYXJwdF9zdGFuZGFyZF90YXJnZXQpKSwgXAorCS50YXJnZXQudmVyZGljdAk9IC0oX192ZXJkaWN0KSAtIDEsCQkJCSAgICAgICBcCit9CisKKyNkZWZpbmUgQVJQVF9FUlJPUl9JTklUCQkJCQkJCSAgICAgICBcCit7CQkJCQkJCQkJICAgICAgIFwKKwkuZW50cnkJCT0gQVJQVF9FTlRSWV9JTklUKHNpemVvZihzdHJ1Y3QgYXJwdF9lcnJvcikpLAkgICAgICAgXAorCS50YXJnZXQJCT0gWFRfVEFSR0VUX0lOSVQoQVJQVF9FUlJPUl9UQVJHRVQsCQkgICAgICAgXAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBhcnB0X2Vycm9yX3RhcmdldCkpLCAgICBcCisJLnRhcmdldC5lcnJvcm5hbWUgPSAiRVJST1IiLAkJCQkJICAgICAgIFwKK30KKwogI2RlZmluZSBhcnB0X3JlZ2lzdGVyX3RhcmdldCh0Z3QpIAlcCiAoewkodGd0KS0+ZmFtaWx5ID0gTkZfQVJQOwkJXAogIAl4dF9yZWdpc3Rlcl90YXJnZXQodGd0KTsgfSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCmluZGV4IDk1MjcyOTYuLjJmNDZkZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaApAQCAtMjk1LDYgKzI5NSwyOCBAQAogCXN0cnVjdCBpcHRfZXJyb3JfdGFyZ2V0IHRhcmdldDsKIH07CiAKKyNkZWZpbmUgSVBUX0VOVFJZX0lOSVQoX19zaXplKQkJCQkJCSAgICAgICBcCit7CQkJCQkJCQkJICAgICAgIFwKKwkudGFyZ2V0X29mZnNldAk9IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KSwJCQkgICAgICAgXAorCS5uZXh0X29mZnNldAk9IChfX3NpemUpLAkJCQkJICAgICAgIFwKK30KKworI2RlZmluZSBJUFRfU1RBTkRBUkRfSU5JVChfX3ZlcmRpY3QpCQkJCQkgICAgICAgXAorewkJCQkJCQkJCSAgICAgICBcCisJLmVudHJ5CQk9IElQVF9FTlRSWV9JTklUKHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSksCSAgICAgICBcCisJLnRhcmdldAkJPSBYVF9UQVJHRVRfSU5JVChJUFRfU1RBTkRBUkRfVEFSR0VULAkJICAgICAgIFwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgeHRfc3RhbmRhcmRfdGFyZ2V0KSksICAgXAorCS50YXJnZXQudmVyZGljdAk9IC0oX192ZXJkaWN0KSAtIDEsCQkJCSAgICAgICBcCit9CisKKyNkZWZpbmUgSVBUX0VSUk9SX0lOSVQJCQkJCQkJICAgICAgIFwKK3sJCQkJCQkJCQkgICAgICAgXAorCS5lbnRyeQkJPSBJUFRfRU5UUllfSU5JVChzaXplb2Yoc3RydWN0IGlwdF9lcnJvcikpLAkgICAgICAgXAorCS50YXJnZXQJCT0gWFRfVEFSR0VUX0lOSVQoSVBUX0VSUk9SX1RBUkdFVCwJCSAgICAgICBcCisJCQkJCSBzaXplb2Yoc3RydWN0IGlwdF9lcnJvcl90YXJnZXQpKSwgICAgIFwKKwkudGFyZ2V0LmVycm9ybmFtZSA9ICJFUlJPUiIsCQkJCQkgICAgICAgXAorfQorCiBleHRlcm4gdW5zaWduZWQgaW50IGlwdF9kb190YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCiAJCQkJIHVuc2lnbmVkIGludCBob29rLAogCQkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCmluZGV4IDYxYWExMDQuLjQ2ODZmODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCkBAIC0xMjMsNiArMTIzLDI4IEBACiAJc3RydWN0IGlwNnRfZXJyb3JfdGFyZ2V0IHRhcmdldDsKIH07CiAKKyNkZWZpbmUgSVA2VF9FTlRSWV9JTklUKF9fc2l6ZSkJCQkJCQkgICAgICAgXAorewkJCQkJCQkJCSAgICAgICBcCisJLnRhcmdldF9vZmZzZXQJPSBzaXplb2Yoc3RydWN0IGlwNnRfZW50cnkpLAkJCSAgICAgICBcCisJLm5leHRfb2Zmc2V0CT0gKF9fc2l6ZSksCQkJCQkgICAgICAgXAorfQorCisjZGVmaW5lIElQNlRfU1RBTkRBUkRfSU5JVChfX3ZlcmRpY3QpCQkJCQkgICAgICAgXAorewkJCQkJCQkJCSAgICAgICBcCisJLmVudHJ5CQk9IElQNlRfRU5UUllfSU5JVChzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpKSwgICAgICAgXAorCS50YXJnZXQJCT0gWFRfVEFSR0VUX0lOSVQoSVA2VF9TVEFOREFSRF9UQVJHRVQsCQkgICAgICAgXAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCkpLCBcCisJLnRhcmdldC52ZXJkaWN0CT0gLShfX3ZlcmRpY3QpIC0gMSwJCQkJICAgICAgIFwKK30KKworI2RlZmluZSBJUDZUX0VSUk9SX0lOSVQJCQkJCQkJICAgICAgIFwKK3sJCQkJCQkJCQkgICAgICAgXAorCS5lbnRyeQkJPSBJUDZUX0VOVFJZX0lOSVQoc2l6ZW9mKHN0cnVjdCBpcDZ0X2Vycm9yKSksCSAgICAgICBcCisJLnRhcmdldAkJPSBYVF9UQVJHRVRfSU5JVChJUDZUX0VSUk9SX1RBUkdFVCwJCSAgICAgICBcCisJCQkJCSBzaXplb2Yoc3RydWN0IGlwNnRfZXJyb3JfdGFyZ2V0KSksICAgIFwKKwkudGFyZ2V0LmVycm9ybmFtZSA9ICJFUlJPUiIsCQkJCQkgICAgICAgXAorfQorCiAvKgogICogTmV3IElQIGZpcmV3YWxsIG9wdGlvbnMgZm9yIFtnc11ldHNvY2tvcHQgYXQgdGhlIFJBVyBJUCBsZXZlbC4KICAqIFVubGlrZSBCU0QgTGludXggaW5oZXJpdHMgSVAgb3B0aW9ucyBzbyB5b3UgZG9uJ3QgaGF2ZSB0byB1c2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzNC5oIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKaW5kZXggMWJlNWJlOC4uN2U3ZjMzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnM0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIE5GUzRfVkVSSUZJRVJfU0laRQk4CisjZGVmaW5lIE5GUzRfU1RBVEVJRF9TSVpFCTE2CiAjZGVmaW5lIE5GUzRfRkhTSVpFCQkxMjgKICNkZWZpbmUgTkZTNF9NQVhQQVRITEVOCQlQQVRIX01BWAogI2RlZmluZSBORlM0X01BWE5BTUxFTgkJTkFNRV9NQVgKQEAgLTExMyw3ICsxMTQsNyBAQAogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIGRhdGFbTkZTNF9WRVJJRklFUl9TSVpFXTsgfSBuZnM0X3ZlcmlmaWVyOwotdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIGRhdGFbMTZdOyB9IG5mczRfc3RhdGVpZDsKK3R5cGVkZWYgc3RydWN0IHsgY2hhciBkYXRhW05GUzRfU1RBVEVJRF9TSVpFXTsgfSBuZnM0X3N0YXRlaWQ7CiAKIGVudW0gbmZzX29wbnVtNCB7CiAJT1BfQUNDRVNTID0gMywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzNF9hY2wuaCBiL2luY2x1ZGUvbGludXgvbmZzNF9hY2wuaAppbmRleCA0MDliNmUwLi5jOWMwNWE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mczRfYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnM0X2FjbC5oCkBAIC00NCw3ICs0NCw2IEBACiAjZGVmaW5lIE5GUzRfQUNMX01BWCAxNzAKIAogc3RydWN0IG5mczRfYWNsICpuZnM0X2FjbF9uZXcoaW50KTsKLXZvaWQgbmZzNF9hY2xfYWRkX2FjZShzdHJ1Y3QgbmZzNF9hY2wgKiwgdTMyLCB1MzIsIHUzMiwgaW50LCB1aWRfdCk7CiBpbnQgbmZzNF9hY2xfZ2V0X3dob3R5cGUoY2hhciAqLCB1MzIpOwogaW50IG5mczRfYWNsX3dyaXRlX3dobyhpbnQgd2hvLCBjaGFyICpwKTsKIGludCBuZnM0X2FjbF9wZXJtaXNzaW9uKHN0cnVjdCBuZnM0X2FjbCAqYWNsLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAppbmRleCBjOTVkNWU2Li41MmI0Mzc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKQEAgLTgyLDcgKzgyLDcgQEAKIAlzdHJ1Y3QgcnBjX2NsbnQgKgljbGllbnRfYWNsOwkvKiBBQ0wgUlBDIGNsaWVudCBoYW5kbGUgKi8KIAlzdHJ1Y3QgbmZzX2lvc3RhdHMgKglpb19zdGF0czsJLyogSS9PIHN0YXRpc3RpY3MgKi8KIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbwliYWNraW5nX2Rldl9pbmZvOwotCWF0b21pY190CQl3cml0ZWJhY2s7CS8qIG51bWJlciBvZiB3cml0ZWJhY2sgcGFnZXMgKi8KKwlhdG9taWNfbG9uZ190CQl3cml0ZWJhY2s7CS8qIG51bWJlciBvZiB3cml0ZWJhY2sgcGFnZXMgKi8KIAlpbnQJCQlmbGFnczsJCS8qIHZhcmlvdXMgZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQJCWNhcHM7CQkvKiBzZXJ2ZXIgY2FwYWJpbGl0aWVzICovCiAJdW5zaWduZWQgaW50CQlyc2l6ZTsJCS8qIHJlYWQgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfcGFnZS5oIGIvaW5jbHVkZS9saW51eC9uZnNfcGFnZS5oCmluZGV4IDQxYWZhYjYuLmJkMTkzYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX3BhZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19wYWdlLmgKQEAgLTgxLDYgKzgxLDcgQEAKIGV4dGVybglpbnQgbmZzX3BhZ2Vpb19hZGRfcmVxdWVzdChzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICosCiAJCQkJICAgc3RydWN0IG5mc19wYWdlICopOwogZXh0ZXJuCXZvaWQgbmZzX3BhZ2Vpb19jb21wbGV0ZShzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpkZXNjKTsKK2V4dGVybgl2b2lkIG5mc19wYWdlaW9fY29uZF9jb21wbGV0ZShzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICosIHBnb2ZmX3QpOwogZXh0ZXJuICBpbnQgbmZzX3dhaXRfb25fcmVxdWVzdChzdHJ1Y3QgbmZzX3BhZ2UgKik7CiBleHRlcm4Jdm9pZCBuZnNfdW5sb2NrX3JlcXVlc3Qoc3RydWN0IG5mc19wYWdlICpyZXEpOwogZXh0ZXJuICBpbnQgbmZzX3NldF9wYWdlX3dyaXRlYmFja19sb2NrZWQoc3RydWN0IG5mc19wYWdlICpyZXEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ub3RpZmllci5oIGIvaW5jbHVkZS9saW51eC9ub3RpZmllci5oCmluZGV4IDEwYTQzZWQuLjk0MzExMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmgKQEAgLTExMiwzMiArMTEyLDQwIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLWV4dGVybiBpbnQgYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCAqLAotCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7Ci1leHRlcm4gaW50IGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkICosCi0JCXN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgcmF3X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKHN0cnVjdCByYXdfbm90aWZpZXJfaGVhZCAqLAotCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7Ci1leHRlcm4gaW50IHNyY3Vfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoc3RydWN0IHNyY3Vfbm90aWZpZXJfaGVhZCAqLAotCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CitleHRlcm4gaW50IGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgKm5oLAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgKm5oLAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgcmF3X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKHN0cnVjdCByYXdfbm90aWZpZXJfaGVhZCAqbmgsCisJCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIGludCBzcmN1X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKHN0cnVjdCBzcmN1X25vdGlmaWVyX2hlYWQgKm5oLAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIAotZXh0ZXJuIGludCBhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgKiwKLQkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwotZXh0ZXJuIGludCBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkICosCi0JCXN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgcmF3X25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoc3RydWN0IHJhd19ub3RpZmllcl9oZWFkICosCi0JCXN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgc3JjdV9ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKHN0cnVjdCBzcmN1X25vdGlmaWVyX2hlYWQgKiwKLQkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOworZXh0ZXJuIGludCBhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgKm5oLAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCAqbmgsCisJCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIGludCByYXdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihzdHJ1Y3QgcmF3X25vdGlmaWVyX2hlYWQgKm5oLAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgc3JjdV9ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKHN0cnVjdCBzcmN1X25vdGlmaWVyX2hlYWQgKm5oLAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIAotZXh0ZXJuIGludCBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgKiwKK2V4dGVybiBpbnQgYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkICpuaCwKIAkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpOwotZXh0ZXJuIGludCBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkICosCitleHRlcm4gaW50IF9fYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkICpuaCwKKwl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdiwgaW50IG5yX3RvX2NhbGwsIGludCAqbnJfY2FsbHMpOworZXh0ZXJuIGludCBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkICpuaCwKIAkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpOwotZXh0ZXJuIGludCByYXdfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgcmF3X25vdGlmaWVyX2hlYWQgKiwKK2V4dGVybiBpbnQgX19ibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkICpuaCwKKwl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdiwgaW50IG5yX3RvX2NhbGwsIGludCAqbnJfY2FsbHMpOworZXh0ZXJuIGludCByYXdfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgcmF3X25vdGlmaWVyX2hlYWQgKm5oLAogCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdik7Ci1leHRlcm4gaW50IHNyY3Vfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3Qgc3JjdV9ub3RpZmllcl9oZWFkICosCitleHRlcm4gaW50IF9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHJhd19ub3RpZmllcl9oZWFkICpuaCwKKwl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdiwgaW50IG5yX3RvX2NhbGwsIGludCAqbnJfY2FsbHMpOworZXh0ZXJuIGludCBzcmN1X25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHNyY3Vfbm90aWZpZXJfaGVhZCAqbmgsCiAJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTsKK2V4dGVybiBpbnQgX19zcmN1X25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHNyY3Vfbm90aWZpZXJfaGVhZCAqbmgsCisJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYsIGludCBucl90b19jYWxsLCBpbnQgKm5yX2NhbGxzKTsKIAogI2RlZmluZSBOT1RJRllfRE9ORQkJMHgwMDAwCQkvKiBEb24ndCBjYXJlICovCiAjZGVmaW5lIE5PVElGWV9PSwkJMHgwMDAxCQkvKiBTdWl0cyBtZSAqLwpAQCAtMTg2LDYgKzE5NCwyMCBAQAogI2RlZmluZSBDUFVfRE9XTl9QUkVQQVJFCTB4MDAwNSAvKiBDUFUgKHVuc2lnbmVkKXYgZ29pbmcgZG93biAqLwogI2RlZmluZSBDUFVfRE9XTl9GQUlMRUQJCTB4MDAwNiAvKiBDUFUgKHVuc2lnbmVkKXYgTk9UIGdvaW5nIGRvd24gKi8KICNkZWZpbmUgQ1BVX0RFQUQJCTB4MDAwNyAvKiBDUFUgKHVuc2lnbmVkKXYgZGVhZCAqLworI2RlZmluZSBDUFVfTE9DS19BQ1FVSVJFCTB4MDAwOCAvKiBBY3F1aXJlIGFsbCBob3RjcHUgbG9ja3MgKi8KKyNkZWZpbmUgQ1BVX0xPQ0tfUkVMRUFTRQkweDAwMDkgLyogUmVsZWFzZSBhbGwgaG90Y3B1IGxvY2tzICovCisKKy8qIFVzZWQgZm9yIENQVSBob3RwbHVnIGV2ZW50cyBvY2N1cmluZyB3aGlsZSB0YXNrcyBhcmUgZnJvemVuIGR1ZSB0byBhIHN1c3BlbmQKKyAqIG9wZXJhdGlvbiBpbiBwcm9ncmVzcworICovCisjZGVmaW5lIENQVV9UQVNLU19GUk9aRU4JMHgwMDEwCisKKyNkZWZpbmUgQ1BVX09OTElORV9GUk9aRU4JKENQVV9PTkxJTkUgfCBDUFVfVEFTS1NfRlJPWkVOKQorI2RlZmluZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU4JKENQVV9VUF9QUkVQQVJFIHwgQ1BVX1RBU0tTX0ZST1pFTikKKyNkZWZpbmUgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTgkoQ1BVX1VQX0NBTkNFTEVEIHwgQ1BVX1RBU0tTX0ZST1pFTikKKyNkZWZpbmUgQ1BVX0RPV05fUFJFUEFSRV9GUk9aRU4JKENQVV9ET1dOX1BSRVBBUkUgfCBDUFVfVEFTS1NfRlJPWkVOKQorI2RlZmluZSBDUFVfRE9XTl9GQUlMRURfRlJPWkVOCShDUFVfRE9XTl9GQUlMRUQgfCBDUFVfVEFTS1NfRlJPWkVOKQorI2RlZmluZSBDUFVfREVBRF9GUk9aRU4JCShDUFVfREVBRCB8IENQVV9UQVNLU19GUk9aRU4pCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0xJTlVYX05PVElGSUVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbnNwcm94eS5oIGIvaW5jbHVkZS9saW51eC9uc3Byb3h5LmgKaW5kZXggMGI5ZjBkYy4uMTg5ZTBkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uc3Byb3h5LmgKKysrIGIvaW5jbHVkZS9saW51eC9uc3Byb3h5LmgKQEAgLTMxLDEwICszMSwxMSBAQAogfTsKIGV4dGVybiBzdHJ1Y3QgbnNwcm94eSBpbml0X25zcHJveHk7CiAKLXN0cnVjdCBuc3Byb3h5ICpkdXBfbmFtZXNwYWNlcyhzdHJ1Y3QgbnNwcm94eSAqb3JpZyk7CiBpbnQgY29weV9uYW1lc3BhY2VzKGludCBmbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogdm9pZCBnZXRfdGFza19uYW1lc3BhY2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIHZvaWQgZnJlZV9uc3Byb3h5KHN0cnVjdCBuc3Byb3h5ICpucyk7CitpbnQgdW5zaGFyZV9uc3Byb3h5X25hbWVzcGFjZXModW5zaWduZWQgbG9uZywgc3RydWN0IG5zcHJveHkgKiosCisJc3RydWN0IGZzX3N0cnVjdCAqKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHB1dF9uc3Byb3h5KHN0cnVjdCBuc3Byb3h5ICpucykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggYjRkZWY1ZS4uOGE4MzUzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKIC8qCiAgKiBCaXRzIGluIG1hcHBpbmctPmZsYWdzLiAgVGhlIGxvd2VyIF9fR0ZQX0JJVFNfU0hJRlQgYml0cyBhcmUgdGhlIHBhZ2UKQEAgLTE5LDYgKzIwLDE2IEBACiAjZGVmaW5lCUFTX0VJTwkJKF9fR0ZQX0JJVFNfU0hJRlQgKyAwKQkvKiBJTyBlcnJvciBvbiBhc3luYyB3cml0ZSAqLwogI2RlZmluZSBBU19FTk9TUEMJKF9fR0ZQX0JJVFNfU0hJRlQgKyAxKQkvKiBFTk9TUEMgb24gYXN5bmMgd3JpdGUgKi8KIAorc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2Vycm9yKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBpbnQgZXJyb3IpCit7CisJaWYgKGVycm9yKSB7CisJCWlmIChlcnJvciA9PSAtRU5PU1BDKQorCQkJc2V0X2JpdChBU19FTk9TUEMsICZtYXBwaW5nLT5mbGFncyk7CisJCWVsc2UKKwkJCXNldF9iaXQoQVNfRUlPLCAmbWFwcGluZy0+ZmxhZ3MpOworCX0KK30KKwogc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICogbWFwcGluZykKIHsKIAlyZXR1cm4gKF9fZm9yY2UgZ2ZwX3QpbWFwcGluZy0+ZmxhZ3MgJiBfX0dGUF9CSVRTX01BU0s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaCBiL2luY2x1ZGUvbGludXgvcGFycG9ydC5oCmluZGV4IDgwNjgyYWEuLjljZGQ2OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFycG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFycG9ydC5oCkBAIC0yNzksNiArMjc5LDEwIEBACiAJaW50IGRtYTsKIAlpbnQgbXV4cG9ydDsJCS8qIHdoaWNoIG11eHBvcnQgKGlmIGFueSkgdGhpcyBpcyAqLwogCWludCBwb3J0bnVtOwkJLyogd2hpY2ggcGh5c2ljYWwgcGFyYWxsZWwgcG9ydCAobm90IG11eCkgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CS8qIFBoeXNpY2FsIGRldmljZSBhc3NvY2lhdGVkIHdpdGggSU8vRE1BLgorCQkJCSAqIFRoaXMgbWF5IHVuZm9ydHVsYXRlbHkgYmUgbnVsbCBpZiB0aGUKKwkJCQkgKiBwb3J0IGhhcyBhIGxlZ2FjeSBkcml2ZXIuCisJCQkJICovCiAKIAlzdHJ1Y3QgcGFycG9ydCAqcGh5c3BvcnQ7CiAJCQkJLyogSWYgdGhpcyBpcyBhIG5vbi1kZWZhdWx0IG11eApAQCAtMjg5LDcgKzI5Myw3IEBACiAJCQkJICAgZm9sbG93aW5nIHN0cnVjdHVyZSBtZW1iZXJzIGFyZQogCQkJCSAgIG1lYW5pbmdsZXNzOiBkZXZpY2VzLCBjYWQsIG11eHNlbCwKIAkJCQkgICB3YWl0aGVhZCwgd2FpdHRhaWwsIGZsYWdzLCBwZGlyLAotCQkJCSAgIGllZWUxMjg0LCAqX2xvY2suCisJCQkJICAgZGV2LCBpZWVlMTI4NCwgKl9sb2NrLgogCiAJCQkJICAgSXQgdGhpcyBpcyBhIGRlZmF1bHQgbXV4IHBhcnBvcnQsIG9yCiAJCQkJICAgdGhlcmUgaXMgbm8gbXV4IGludm9sdmVkLCB0aGlzIHBvaW50cyB0bwpAQCAtMzAyLDcgKzMwNiw3IEBACiAKIAlzdHJ1Y3QgcGFyZGV2aWNlICp3YWl0aGVhZDsKIAlzdHJ1Y3QgcGFyZGV2aWNlICp3YWl0dGFpbDsKLQkKKwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFycG9ydF9wYy5oIGIvaW5jbHVkZS9saW51eC9wYXJwb3J0X3BjLmgKaW5kZXggMWNjMGY2Yi4uZWE4YzZkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYXJwb3J0X3BjLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYXJwb3J0X3BjLmgKQEAgLTM4LDcgKzM4LDYgQEAKIAkvKiBidWZmZXIgc3VpdGFibGUgZm9yIERNQSwgaWYgRE1BIGVuYWJsZWQgKi8KIAljaGFyICpkbWFfYnVmOwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgcGFycG9ydCAqcG9ydDsKIH07CkBAIC0yMzIsNyArMjMxLDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGFycG9ydCAqcGFycG9ydF9wY19wcm9iZV9wb3J0ICh1bnNpZ25lZCBsb25nIGJhc2UsCiAJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9oaSwKIAkJCQkJICAgICAgaW50IGlycSwgaW50IGRtYSwKLQkJCQkJICAgICAgc3RydWN0IHBjaV9kZXYgKmRldik7CisJCQkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBwYXJwb3J0X3BjX3VucmVnaXN0ZXJfcG9ydCAoc3RydWN0IHBhcnBvcnQgKnApOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggYWU4NDlmMC4uNmExMTVjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTM3MCw2ICszNzAsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfU0FUQQkweDQzODAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NNQlVTCTB4NDM4NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFCTB4NDM4YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfU0FUQQkweDQzOTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX0lERQkweDQzOWMKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZMU0kJCTB4MTAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZMU0lfODJDNTkyCTB4MDAwNQpAQCAtNDcwLDYgKzQ3Miw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fREVWX0lEXzIJMHgwMjE5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fVjJfVFdPX1BPUlRTX1JWWAkJMHgwMjFBCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fVjJfT05FX1BPUlRfUlZYX09ORV9QT1JUX01ETQkweDAyNTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fSUNPTV9WMl9PTkVfUE9SVF9SVlhfT05FX1BPUlRfTURNX1BDSUUgMHgwMzYxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fRk9VUl9QT1JUX01PREVMCTB4MjUyCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT01QRVgyCQkweDEwMWEgLyogcGNpLmlkcyBzYXlzICJBVCZUIEdJUyAoTkNSKSIgKi8KQEAgLTEyODcsNyArMTI5MCw5IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNjNfMAkweDAzMDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UJMHgwMzE0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1A0TTg5MAkweDAzMjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0CTB4MDMyNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMzYJMHgwMzM2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1ZUMzM1MQkweDAzNTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM3MV8wCTB4MDM5MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzAJMHgwNTAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU2MQkweDA1NjEKQEAgLTE0MzMsNiArMTQzOCw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfTEUJICAweDAwMDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19HQ05CX0xFIDB4MDAxNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0VQQgkgIDB4MDEwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMTAwMF9QQ0lYCTB4MDEwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMjAwMF9QQ0lFCTB4MDEzMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjQJICAweDAyMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1CSAgMHgwMjAxCkBAIC0yMjYzLDExICsyMjY5LDExIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF81CTB4MjgzZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfNgkweDI4NTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g5XzAJMHgyOTEwCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOV8xCTB4MjkxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfMQkweDI5MTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g5XzIJMHgyOTEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOV8zCTB4MjkxMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfNAkweDI5MTQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g5XzUJMHgyOTE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOV81CTB4MjkxOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfNgkweDI5MzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg1NVBNX0hCCTB4MzM0MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODMwX0hCCTB4MzU3NQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waGFudG9tLmggYi9pbmNsdWRlL2xpbnV4L3BoYW50b20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2ViYmZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9waGFudG9tLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19QSEFOVE9NX0gKKyNkZWZpbmUgX19QSEFOVE9NX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisvKiBQSE5fKEcvUylFVF9SRUcgcGFyYW0gKi8KK3N0cnVjdCBwaG1fcmVnIHsKKwlfX3UzMiByZWc7CisJX191MzIgdmFsdWU7Cit9OworCisvKiBQSE5fKEcvUylFVF9SRUdTIHBhcmFtICovCitzdHJ1Y3QgcGhtX3JlZ3MgeworCV9fdTMyIGNvdW50OworCV9fdTMyIG1hc2s7CisJX191MzIgdmFsdWVzWzhdOworfTsKKworI2RlZmluZSBQSF9JT0NfTUFHSUMJCSdwJworI2RlZmluZSBQSE5fR0VUX1JFRwkJX0lPV1IoUEhfSU9DX01BR0lDLCAwLCBzdHJ1Y3QgcGhtX3JlZyAqKQorI2RlZmluZSBQSE5fU0VUX1JFRwkJX0lPVyAoUEhfSU9DX01BR0lDLCAxLCBzdHJ1Y3QgcGhtX3JlZyAqKQorI2RlZmluZSBQSE5fR0VUX1JFR1MJCV9JT1dSKFBIX0lPQ19NQUdJQywgMiwgc3RydWN0IHBobV9yZWdzICopCisjZGVmaW5lIFBITl9TRVRfUkVHUwkJX0lPVyAoUEhfSU9DX01BR0lDLCAzLCBzdHJ1Y3QgcGhtX3JlZ3MgKikKKyNkZWZpbmUgUEhfSU9DX01BWE5SCQkzCisKKyNkZWZpbmUgUEhOX0NPTlRST0wJCTB4NiAgICAgLyogY29udHJvbCBieXRlIGluIGlhZGRyIHNwYWNlICovCisjZGVmaW5lIFBITl9DVExfQU1QCQkweDEgICAgIC8qICAgc3dpdGNoIGFmdGVyIHRvcnF1ZXMgY2hhbmdlICovCisjZGVmaW5lIFBITl9DVExfQlVUCQkweDIgICAgIC8qICAgaXMgYnV0dG9uIHN3aXRjaGVkICovCisjZGVmaW5lIFBITl9DVExfSVJRCQkweDEwICAgIC8qICAgaXMgaXJxIGVuYWJsZWQgKi8KKworI2RlZmluZSBQSE5fWkVST19GT1JDRQkJMjA0OAkvKiB6ZXJvIHRvcnF1ZSBvbiBtb3RvciAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlkLmggYi9pbmNsdWRlL2xpbnV4L3BpZC5oCmluZGV4IDJhYzI3ZjkuLjFlMGU0ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9waWQuaApAQCAtNTEsNiArNTEsOCBAQAogCXN0cnVjdCByY3VfaGVhZCByY3U7CiB9OwogCitleHRlcm4gc3RydWN0IHBpZCBpbml0X3N0cnVjdF9waWQ7CisKIHN0cnVjdCBwaWRfbGluawogewogCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CkBAIC03Niw4ICs3OCw3IEBACiAgKiB3cml0ZS1oZWxkLgogICovCiBleHRlcm4gaW50IEZBU1RDQUxMKGF0dGFjaF9waWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJCWVudW0gcGlkX3R5cGUgdHlwZSwgaW50IG5yKSk7Ci0KKwkJCQllbnVtIHBpZF90eXBlIHR5cGUsIHN0cnVjdCBwaWQgKnBpZCkpOwogZXh0ZXJuIHZvaWQgRkFTVENBTEwoZGV0YWNoX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gcGlkX3R5cGUpKTsKIGV4dGVybiB2b2lkIEZBU1RDQUxMKHRyYW5zZmVyX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZCwKIAkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3LCBlbnVtIHBpZF90eXBlKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpZF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvcGlkX25hbWVzcGFjZS5oCmluZGV4IDI4MzM4MDYuLjE2OWM2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGlkX25hbWVzcGFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGlkX25hbWVzcGFjZS5oCkBAIC0yOSw3ICsyOSw3IEBACiAJa3JlZl9nZXQoJm5zLT5rcmVmKTsKIH0KIAotZXh0ZXJuIGludCBjb3B5X3BpZF9ucyhpbnQgZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqY29weV9waWRfbnMoaW50IGZsYWdzLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpOwogZXh0ZXJuIHZvaWQgZnJlZV9waWRfbnMoc3RydWN0IGtyZWYgKmtyZWYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3BpZF9ucyhzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggNmU4ZmEzMC4uODc1NDVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMTA3LDI2ICsxMDcsMTEgQEAKICNkZWZpbmUgUE1fU1VTUEVORF9PTgkJKChfX2ZvcmNlIHN1c3BlbmRfc3RhdGVfdCkgMCkKICNkZWZpbmUgUE1fU1VTUEVORF9TVEFOREJZCSgoX19mb3JjZSBzdXNwZW5kX3N0YXRlX3QpIDEpCiAjZGVmaW5lIFBNX1NVU1BFTkRfTUVNCQkoKF9fZm9yY2Ugc3VzcGVuZF9zdGF0ZV90KSAzKQotI2RlZmluZSBQTV9TVVNQRU5EX0RJU0sJCSgoX19mb3JjZSBzdXNwZW5kX3N0YXRlX3QpIDQpCi0jZGVmaW5lIFBNX1NVU1BFTkRfTUFYCQkoKF9fZm9yY2Ugc3VzcGVuZF9zdGF0ZV90KSA1KQotCi10eXBlZGVmIGludCBfX2JpdHdpc2Ugc3VzcGVuZF9kaXNrX21ldGhvZF90OwotCi0vKiBpbnZhbGlkIG11c3QgYmUgMCBzbyBzdHJ1Y3QgcG1fb3BzIGluaXRpYWxpc2VycyBjYW4gbGVhdmUgaXQgb3V0ICovCi0jZGVmaW5lIFBNX0RJU0tfSU5WQUxJRAkJKChfX2ZvcmNlIHN1c3BlbmRfZGlza19tZXRob2RfdCkgMCkKLSNkZWZpbmUJUE1fRElTS19QTEFURk9STQkoKF9fZm9yY2Ugc3VzcGVuZF9kaXNrX21ldGhvZF90KSAxKQotI2RlZmluZQlQTV9ESVNLX1NIVVRET1dOCSgoX19mb3JjZSBzdXNwZW5kX2Rpc2tfbWV0aG9kX3QpIDIpCi0jZGVmaW5lCVBNX0RJU0tfUkVCT09UCQkoKF9fZm9yY2Ugc3VzcGVuZF9kaXNrX21ldGhvZF90KSAzKQotI2RlZmluZQlQTV9ESVNLX1RFU1QJCSgoX19mb3JjZSBzdXNwZW5kX2Rpc2tfbWV0aG9kX3QpIDQpCi0jZGVmaW5lCVBNX0RJU0tfVEVTVFBST0MJKChfX2ZvcmNlIHN1c3BlbmRfZGlza19tZXRob2RfdCkgNSkKLSNkZWZpbmUJUE1fRElTS19NQVgJCSgoX19mb3JjZSBzdXNwZW5kX2Rpc2tfbWV0aG9kX3QpIDYpCisjZGVmaW5lIFBNX1NVU1BFTkRfTUFYCQkoKF9fZm9yY2Ugc3VzcGVuZF9zdGF0ZV90KSA0KQogCiAvKioKICAqIHN0cnVjdCBwbV9vcHMgLSBDYWxsYmFja3MgZm9yIG1hbmFnaW5nIHBsYXRmb3JtIGRlcGVuZGVudCBzdXNwZW5kIHN0YXRlcy4KICAqIEB2YWxpZDogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIHN0YXRlIGNhbiBiZSBlbnRlcmVkLgotICogCUlmICVDT05GSUdfU09GVFdBUkVfU1VTUEVORCBpcyBzZXQgdGhlbiAlUE1fU1VTUEVORF9ESVNLIGlzCi0gKglhbHdheXMgdmFsaWQgYW5kIG5ldmVyIHBhc3NlZCB0byB0aGlzIGNhbGwuIElmIG5vdCBhc3NpZ25lZCwKLSAqCW5vIHN1c3BlbmQgc3RhdGVzIGFyZSB2YWxpZC4KICAqCVZhbGlkIHN0YXRlcyBhcmUgYWR2ZXJ0aXNlZCBpbiAvc3lzL3Bvd2VyL3N0YXRlIGJ1dCBjYW4gc3RpbGwKICAqCWJlIHJlamVjdGVkIGJ5IHByZXBhcmUgb3IgZW50ZXIgaWYgdGhlIGNvbmRpdGlvbnMgYXJlbid0IHJpZ2h0LgogICoJVGhlcmUgaXMgYSAlcG1fdmFsaWRfb25seV9tZW0gZnVuY3Rpb24gYXZhaWxhYmxlIHRoYXQgY2FuIGJlIGFzc2lnbmVkCkBAIC0xNDAsMjQgKzEyNSwxMiBAQAogICoKICAqIEBmaW5pc2g6IENhbGxlZCB3aGVuIHRoZSBzeXN0ZW0gaGFzIGxlZnQgdGhlIGdpdmVuIHN0YXRlIGFuZCBhbGwgZGV2aWNlcwogICoJYXJlIHJlc3VtZWQuIFRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KLSAqCi0gKiBAcG1fZGlza19tb2RlOiBUaGUgZ2VuZXJpYyBjb2RlIGFsd2F5cyBhbGxvd3Mgb25lIG9mIHRoZSBzaHV0ZG93biBtZXRob2RzCi0gKgklUE1fRElTS19TSFVURE9XTiwgJVBNX0RJU0tfUkVCT09ULCAlUE1fRElTS19URVNUIGFuZAotICoJJVBNX0RJU0tfVEVTVFBST0MuIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0LCB0aGUgbW9kZSBpdCBpcyBzZXQKLSAqCXRvIGlzIGFsbG93ZWQgaW4gYWRkaXRpb24gdG8gdGhvc2UgbW9kZXMgYW5kIGlzIGFsc28gbWFkZSBkZWZhdWx0LgotICoJV2hlbiB0aGlzIG1vZGUgaXMgc2VudCBzZWxlY3RlZCwgdGhlIEBwcmVwYXJlIGNhbGwgd2lsbCBiZSBjYWxsZWQKLSAqCWJlZm9yZSBzdXNwZW5kaW5nIHRvIGRpc2sgKGlmIHByZXNlbnQpLCB0aGUgQGVudGVyIGNhbGwgc2hvdWxkIGJlCi0gKglwcmVzZW50IGFuZCB3aWxsIGJlIGNhbGxlZCBhZnRlciBhbGwgc3RhdGUgaGFzIGJlZW4gc2F2ZWQgYW5kIHRoZQotICoJbWFjaGluZSBpcyByZWFkeSB0byBiZSBwb3dlcmVkIG9mZjsgdGhlIEBmaW5pc2ggY2FsbGJhY2sgaXMgY2FsbGVkCi0gKglhZnRlciBzdGF0ZSBoYXMgYmVlbiByZXN0b3JlZC4gQWxsIHRoZXNlIGNhbGxzIGFyZSBjYWxsZWQgd2l0aAotICoJJVBNX1NVU1BFTkRfRElTSyBhcyB0aGUgc3RhdGUuCiAgKi8KIHN0cnVjdCBwbV9vcHMgewogCWludCAoKnZhbGlkKShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOwogCWludCAoKnByZXBhcmUpKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSk7CiAJaW50ICgqZW50ZXIpKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSk7CiAJaW50ICgqZmluaXNoKShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOwotCXN1c3BlbmRfZGlza19tZXRob2RfdCBwbV9kaXNrX21vZGU7CiB9OwogCiAvKioKQEAgLTI3Niw4ICsyNDksNiBAQAogZXh0ZXJuIHZvaWQgZGV2aWNlX3Jlc3VtZSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19QTQotZXh0ZXJuIHN1c3BlbmRfZGlza19tZXRob2RfdCBwbV9kaXNrX21vZGU7Ci0KIGV4dGVybiBpbnQgZGV2aWNlX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKTsKIGV4dGVybiBpbnQgZGV2aWNlX3ByZXBhcmVfc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtdS5oIGIvaW5jbHVkZS9saW51eC9wbXUuaAppbmRleCBiMDk1MmU1Li41YWQ5MTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtdS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG11LmgKQEAgLTIyNSw0ICsyMjUsMTIgQEAKIC8qIEJhY2tsaWdodCAqLwogZXh0ZXJuIHZvaWQgcG11X2JhY2tsaWdodF9pbml0KHZvaWQpOwogCisvKiBzb21lIGNvZGUgbmVlZHMgdG8ga25vdyBpZiB0aGUgUE1VIHdhcyBzdXNwZW5kZWQgZm9yIGhpYmVybmF0aW9uICovCisjaWYgZGVmaW5lZChDT05GSUdfUE0pICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQorZXh0ZXJuIGludCBwbXVfc3lzX3N1c3BlbmRlZDsKKyNlbHNlCisvKiBpZiBwb3dlciBtYW5hZ2VtZW50IGlzIG5vdCBjb25maWd1cmVkIGl0IGNhbid0IGJlIHN1c3BlbmRlZCAqLworI2RlZmluZSBwbXVfc3lzX3N1c3BlbmRlZAkwCisjZW5kaWYKKwogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG5wLmggYi9pbmNsdWRlL2xpbnV4L3BucC5oCmluZGV4IDlhNTIyNmYuLjJhMTg5N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG5wLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbnAuaApAQCAtMTc3LDYgKzE3Nyw3IEBACiAKIHN0cnVjdCBwbnBfZGV2IHsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsJCS8qIERyaXZlciBNb2RlbCBkZXZpY2UgaW50ZXJmYWNlICovCisJdTY0IGRtYV9tYXNrOwogCXVuc2lnbmVkIGNoYXIgbnVtYmVyOwkJLyogdXNlZCBhcyBhbiBpbmRleCwgbXVzdCBiZSB1bmlxdWUgKi8KIAlpbnQgc3RhdHVzOwogCkBAIC0zNjMsNiArMzY0LDcgQEAKIGludCBwbnBfZGV2aWNlX2F0dGFjaChzdHJ1Y3QgcG5wX2RldiAqcG5wX2Rldik7CiB2b2lkIHBucF9kZXZpY2VfZGV0YWNoKHN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2KTsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHBucF9nbG9iYWw7CitleHRlcm4gaW50IHBucF9wbGF0Zm9ybV9kZXZpY2VzOwogCiAvKiBtdWx0aWRldmljZSBjYXJkIHN1cHBvcnQgKi8KIGludCBwbnBfYWRkX2NhcmQoc3RydWN0IHBucF9jYXJkICpjYXJkKTsKQEAgLTQxMCw2ICs0MTIsNyBAQAogc3RhdGljIGlubGluZSBpbnQgcG5wX2FkZF9kZXZpY2Uoc3RydWN0IHBucF9kZXYgKmRldikgeyByZXR1cm4gLUVOT0RFVjsgfQogc3RhdGljIGlubGluZSBpbnQgcG5wX2RldmljZV9hdHRhY2goc3RydWN0IHBucF9kZXYgKnBucF9kZXYpIHsgcmV0dXJuIC1FTk9ERVY7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwbnBfZGV2aWNlX2RldGFjaChzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldikgeyA7IH0KKyNkZWZpbmUgcG5wX3BsYXRmb3JtX2RldmljZXMgMAogCiAvKiBtdWx0aWRldmljZSBjYXJkIHN1cHBvcnQgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHBucF9hZGRfY2FyZChzdHJ1Y3QgcG5wX2NhcmQgKmNhcmQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9pc29uLmggYi9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oCmluZGV4IDk1ZjUxOGIuLmQ5M2MzMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9pc29uLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb2lzb24uaApAQCAtMTUsOCArMTUsOCBAQAogICogTWFnaWMgbnVtcyBmb3Igb2JqIHJlZCB6b25pbmcuCiAgKiBQbGFjZWQgaW4gdGhlIGZpcnN0IHdvcmQgYmVmb3JlIGFuZCB0aGUgZmlyc3Qgd29yZCBhZnRlciBhbiBvYmouCiAgKi8KLSNkZWZpbmUJUkVEX0lOQUNUSVZFCTB4NUEyQ0YwNzFVTAkvKiB3aGVuIG9iaiBpcyBpbmFjdGl2ZSAqLwotI2RlZmluZQlSRURfQUNUSVZFCTB4MTcwRkMyQTVVTAkvKiB3aGVuIG9iaiBpcyBhY3RpdmUgKi8KKyNkZWZpbmUJUkVEX0lOQUNUSVZFCTB4MDlGOTExMDI5RDc0RTM1QlVMTAkvKiB3aGVuIG9iaiBpcyBpbmFjdGl2ZSAqLworI2RlZmluZQlSRURfQUNUSVZFCTB4RDg0MTU2QzU2MzU2ODhDMFVMTAkvKiB3aGVuIG9iaiBpcyBhY3RpdmUgKi8KIAogI2RlZmluZSBTTFVCX1JFRF9JTkFDVElWRQkweGJiCiAjZGVmaW5lIFNMVUJfUkVEX0FDVElWRQkJMHhjYwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAppbmRleCBmNGY3YTYzLi4zNDY5Zjk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaApAQCAtMTA2LDYgKzEwNiw5IEBACiBjaGFyICp0YXNrX21lbShzdHJ1Y3QgbW1fc3RydWN0ICosIGNoYXIgKik7CiB2b2lkIGNsZWFyX3JlZnNfc21hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKK3N0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGVfZ2V0KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpOwordm9pZCBkZV9wdXQoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSk7CisKIGV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmNyZWF0ZV9wcm9jX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAogCQkJCQkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX3Byb2NfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCmluZGV4IDc3ZGI4MGEuLjYyNDM5ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTQ0LDggKzQ0LDYgQEAKIHR5cGVkZWYgX19rZXJuZWxfdWlkMzJfdCBxaWRfdDsgLyogVHlwZSBpbiB3aGljaCB3ZSBzdG9yZSBpZHMgaW4gbWVtb3J5ICovCiB0eXBlZGVmIF9fdTY0IHFzaXplX3Q7ICAgICAgICAgIC8qIFR5cGUgaW4gd2hpY2ggd2Ugc3RvcmUgc2l6ZXMgKi8KIAotZXh0ZXJuIHNwaW5sb2NrX3QgZHFfZGF0YV9sb2NrOwotCiAvKiBTaXplIG9mIGJsb2NrcyBpbiB3aGljaCBhcmUgY291bnRlZCBzaXplIGxpbWl0cyAqLwogI2RlZmluZSBRVU9UQUJMT0NLX0JJVFMgMTAKICNkZWZpbmUgUVVPVEFCTE9DS19TSVpFICgxIDw8IFFVT1RBQkxPQ0tfQklUUykKQEAgLTEzOSw2ICsxMzcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RxYmxrX3YxLmg+CiAjaW5jbHVkZSA8bGludXgvZHFibGtfdjIuaD4KIAorZXh0ZXJuIHNwaW5sb2NrX3QgZHFfZGF0YV9sb2NrOworCiAvKiBNYXhpbWFsIG51bWJlcnMgb2Ygd3JpdGVzIGZvciBxdW90YSBvcGVyYXRpb24gKGluc2VydC9kZWxldGUvdXBkYXRlKQogICogKG92ZXIgVkZTIGFsbCBmb3JtYXRzKSAqLwogI2RlZmluZSBEUVVPVF9JTklUX0FMTE9DIG1heChWMV9JTklUX0FMTE9DLCBWMl9JTklUX0FMTE9DKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCmluZGV4IDkwYzIzZjYuLjUxMTAyMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKQEAgLTM3LDkgKzM3LDYgQEAKIGV4dGVybiBpbnQgZHF1b3RfY29tbWl0X2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwogZXh0ZXJuIGludCBkcXVvdF9tYXJrX2RxdW90X2RpcnR5KHN0cnVjdCBkcXVvdCAqZHF1b3QpOwogCi1pbnQgcmVtb3ZlX2lub2RlX2RxdW90X3JlZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwKLQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnRvZnJlZV9oZWFkKTsKLQogZXh0ZXJuIGludCB2ZnNfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsIGNoYXIgKnBhdGgpOwogZXh0ZXJuIGludCB2ZnNfcXVvdGFfb25fbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciAqcWZfbmFtZSwKIAkJaW50IGZvcm1hdF9pZCwgaW50IHR5cGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JhZGl4LXRyZWUuaAppbmRleCAwZGViODQyLi5mOWU3N2QyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhZGl4LXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhZGl4LXRyZWUuaApAQCAtODcsMTAgKzg3LDEwIEBACiAgKiBtYW5hZ2VtZW50IG9mIHRoZWlyIGxpZmV0aW1lcyBtdXN0IGJlIGNvbXBsZXRlbHkgbWFuYWdlZCBieSBBUEkgdXNlcnMuCiAgKgogICogRm9yIEFQSSB1c2FnZSwgaW4gZ2VuZXJhbCwKLSAqIC0gYW55IGZ1bmN0aW9uIF9tb2RpZnlpbmdfIHRoZSB0aGUgdHJlZSBvciB0YWdzIChpbnNlcnRpbmcgb3IgZGVsZXRpbmcKKyAqIC0gYW55IGZ1bmN0aW9uIF9tb2RpZnlpbmdfIHRoZSB0cmVlIG9yIHRhZ3MgKGluc2VydGluZyBvciBkZWxldGluZwogICogICBpdGVtcywgc2V0dGluZyBvciBjbGVhcmluZyB0YWdzIG11c3QgZXhjbHVkZSBvdGhlciBtb2RpZmljYXRpb25zLCBhbmQKICAqICAgZXhjbHVkZSBhbnkgZnVuY3Rpb25zIHJlYWRpbmcgdGhlIHRyZWUuCi0gKiAtIGFueSBmdW5jdGlvbiBfcmVhZGluZ18gdGhlIHRoZSB0cmVlIG9yIHRhZ3MgKGxvb2tpbmcgdXAgaXRlbXMgb3IgdGFncywKKyAqIC0gYW55IGZ1bmN0aW9uIF9yZWFkaW5nXyB0aGUgdHJlZSBvciB0YWdzIChsb29raW5nIHVwIGl0ZW1zIG9yIHRhZ3MsCiAgKiAgIGdhbmcgbG9va3VwcykgbXVzdCBleGNsdWRlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHRyZWUsIGJ1dCBtYXkgb2NjdXIKICAqICAgY29uY3VycmVudGx5IHdpdGggb3RoZXIgcmVhZGVycy4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmgKaW5kZXggNmRiOWE0Yy4uZGQ1YTA1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL2JpdG1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9iaXRtYXAuaApAQCAtMjMyLDYgKzIzMiw3IEBACiAJc3RydWN0IHBhZ2UgKipmaWxlbWFwOyAvKiBsaXN0IG9mIGNhY2hlIHBhZ2VzIGZvciB0aGUgZmlsZSAqLwogCXVuc2lnbmVkIGxvbmcgKmZpbGVtYXBfYXR0cjsgLyogYXR0cmlidXRlcyBhc3NvY2lhdGVkIHcvIGZpbGVtYXAgcGFnZXMgKi8KIAl1bnNpZ25lZCBsb25nIGZpbGVfcGFnZXM7IC8qIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgZmlsZSAqLworCWludCBsYXN0X3BhZ2Vfc2l6ZTsgLyogYnl0ZXMgaW4gdGhlIGxhc3QgcGFnZSAqLwogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oCmluZGV4IDNhMjg3NDIuLjFlNTQ4OGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgKQEAgLTQwMSw5ICs0MDEsMTAgQEAKIAlpbnQgcmVzZXJ2ZWRfYmxvY2tzOwkvKiBhbW91bnQgb2YgYmxvY2tzIHJlc2VydmVkIGZvciBmdXJ0aGVyIGFsbG9jYXRpb25zICovCiAJc3BpbmxvY2tfdCBiaXRtYXBfbG9jazsJLyogdGhpcyBsb2NrIG9uIG5vdyBvbmx5IHVzZWQgdG8gcHJvdGVjdCByZXNlcnZlZF9ibG9ja3MgdmFyaWFibGUgKi8KIAlzdHJ1Y3QgZGVudHJ5ICpwcml2X3Jvb3Q7CS8qIHJvb3Qgb2YgLy5yZWlzZXJmc19wcml2ICovCisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCiAJc3RydWN0IGRlbnRyeSAqeGF0dHJfcm9vdDsJLyogcm9vdCBvZiAvLnJlaXNlcmZzX3ByaXYvLnhhICovCiAJc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9kaXJfc2VtOwotCisjZW5kaWYKIAlpbnQgal9lcnJubzsKICNpZmRlZiBDT05GSUdfUVVPVEEKIAljaGFyICpzX3FmX25hbWVzW01BWFFVT1RBU107CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlbGF5LmggYi9pbmNsdWRlL2xpbnV4L3JlbGF5LmgKaW5kZXggNzU5YTBmOS4uNmNkOGM0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWxheS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVsYXkuaApAQCAtMTIsNiArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMzgsNyArMzksNyBAQAogCXNpemVfdCBzdWJidWZzX2NvbnN1bWVkOwkvKiBjb3VudCBvZiBzdWItYnVmZmVycyBjb25zdW1lZCAqLwogCXN0cnVjdCByY2hhbiAqY2hhbjsJCS8qIGFzc29jaWF0ZWQgY2hhbm5lbCAqLwogCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfd2FpdDsJLyogcmVhZGVyIHdhaXQgcXVldWUgKi8KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdha2VfcmVhZGVyczsgLyogcmVhZGVyIHdha2UtdXAgd29yayBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsgCS8qIHJlYWRlciB3YWtlLXVwIHRpbWVyICovCiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwkJLyogY2hhbm5lbCBmaWxlIGRlbnRyeSAqLwogCXN0cnVjdCBrcmVmIGtyZWY7CQkvKiBjaGFubmVsIGJ1ZmZlciByZWZjb3VudCAqLwogCXN0cnVjdCBwYWdlICoqcGFnZV9hcnJheTsJLyogYXJyYXkgb2YgY3VycmVudCBidWZmZXIgcGFnZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggYmRkMjc3Mi4uOTczNDdmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTc0LDE3ICs3NCwxNCBAQAogdm9pZCBwYWdlX2FkZF9maWxlX3JtYXAoc3RydWN0IHBhZ2UgKik7CiB2b2lkIHBhZ2VfcmVtb3ZlX3JtYXAoc3RydWN0IHBhZ2UgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogCi0vKioKLSAqIHBhZ2VfZHVwX3JtYXAgLSBkdXBsaWNhdGUgcHRlIG1hcHBpbmcgdG8gYSBwYWdlCi0gKiBAcGFnZToJdGhlIHBhZ2UgdG8gYWRkIHRoZSBtYXBwaW5nIHRvCi0gKgotICogRm9yIGNvcHlfcGFnZV9yYW5nZSBvbmx5OiBtaW5pbWFsIGV4dHJhY3QgZnJvbSBwYWdlX2FkZF9ybWFwLAotICogYXZvaWRpbmcgdW5uZWNlc3NhcnkgdGVzdHMgKGFscmVhZHkgY2hlY2tlZCkgc28gaXQncyBxdWlja2VyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9kdXBfcm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KK3ZvaWQgcGFnZV9kdXBfcm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfZHVwX3JtYXAoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJYXRvbWljX2luYygmcGFnZS0+X21hcGNvdW50KTsKIH0KKyNlbmRpZgogCiAvKgogICogQ2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgdG8gaGFuZGxlIHBhZ2luZyBvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnNsaWIuaCBiL2luY2x1ZGUvbGludXgvcnNsaWIuaAppbmRleCBhY2UyNWFjLi43NDY1ODBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JzbGliLmgKKysrIGIvaW5jbHVkZS9saW51eC9yc2xpYi5oCkBAIC0zNCw2ICszNCw3IEBACiAgKiBAcHJpbToJUHJpbWl0aXZlIGVsZW1lbnQsIGluZGV4IGZvcm0KICAqIEBpcHJpbToJcHJpbS10aCByb290IG9mIDEsIGluZGV4IGZvcm0KICAqIEBnZnBvbHk6CVRoZSBwcmltaXRpdmUgZ2VuZXJhdG9yIHBvbHlub21pbmFsCisgKiBAZ2ZmdW5jOglGdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgZmllbGQsIGlmIG5vbi1jYW5vbmljYWwgcmVwcmVzZW50YXRpb24KICAqIEB1c2VyczoJVXNlcnMgb2YgdGhpcyBzdHJ1Y3R1cmUKICAqIEBsaXN0OglMaXN0IGVudHJ5IGZvciB0aGUgcnMgY29udHJvbCBsaXN0CiAqLwpAQCAtNDgsNiArNDksNyBAQAogCWludCAJCXByaW07CiAJaW50IAkJaXByaW07CiAJaW50CQlnZnBvbHk7CisJaW50CQkoKmdmZnVuYykoaW50KTsKIAlpbnQJCXVzZXJzOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CkBAIC03Nyw2ICs3OSw4IEBACiAvKiBDcmVhdGUgb3IgZ2V0IGEgbWF0Y2hpbmcgcnMgY29udHJvbCBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCByc19jb250cm9sICppbml0X3JzKGludCBzeW1zaXplLCBpbnQgZ2Zwb2x5LCBpbnQgZmNyLCBpbnQgcHJpbSwKIAkJCSAgIGludCBucm9vdHMpOworc3RydWN0IHJzX2NvbnRyb2wgKmluaXRfcnNfbm9uX2Nhbm9uaWNhbChpbnQgc3ltc2l6ZSwgaW50ICgqZnVuYykoaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZjciwgaW50IHByaW0sIGludCBucm9vdHMpOwogCiAvKiBSZWxlYXNlIGEgcnMgY29udHJvbCBzdHJ1Y3R1cmUgKi8KIHZvaWQgZnJlZV9ycyhzdHJ1Y3QgcnNfY29udHJvbCAqcnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydGMuaCBiL2luY2x1ZGUvbGludXgvcnRjLmgKaW5kZXggNWUyMmQ0NS4uNmQ1ZTRhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCkBAIC00LDcgKzQsNyBAQAogICogc2VydmljZS4gSXQgaXMgdXNlZCB3aXRoIGJvdGggdGhlIGxlZ2FjeSBtYzE0NjgxOCBhbmQgYWxzbyAgRUZJCiAgKiBTdHJ1Y3QgcnRjX3RpbWUgYW5kIGZpcnN0IDEyIGlvY3RsIGJ5IFBhdWwgR29ydG1ha2VyLCAxOTk2IC0gc2VwYXJhdGVkIG91dAogICogZnJvbSA8bGludXgvbWMxNDY4MThydGMuaD4gdG8gdGhpcyBmaWxlIGZvciAyLjQga2VybmVscy4KLSAqIAorICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBIZXdsZXR0LVBhY2thcmQgQ28uCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU3RlcGhhbmUgRXJhbmlhbiA8ZXJhbmlhbkBocGwuaHAuY29tPgogICovCkBAIC0xMyw3ICsxMyw3IEBACiAKIC8qCiAgKiBUaGUgc3RydWN0IHVzZWQgdG8gcGFzcyBkYXRhIHZpYSB0aGUgZm9sbG93aW5nIGlvY3RsLiBTaW1pbGFyIHRvIHRoZQotICogc3RydWN0IHRtIGluIDx0aW1lLmg+LCBidXQgaXQgbmVlZHMgdG8gYmUgaGVyZSBzbyB0aGF0IHRoZSBrZXJuZWwgCisgKiBzdHJ1Y3QgdG0gaW4gPHRpbWUuaD4sIGJ1dCBpdCBuZWVkcyB0byBiZSBoZXJlIHNvIHRoYXQgdGhlIGtlcm5lbAogICogc291cmNlIGlzIHNlbGYgY29udGFpbmVkLCBhbGxvd2luZyBjcm9zcy1jb21waWxlcywgZXRjLiBldGMuCiAgKi8KIApAQCAtNTAsNyArNTAsNyBAQAogICogICBwbGxfdmFsdWUqcGxsX3Bvc211bHQvcGxsX2Nsb2NrCiAgKiAtdmUgcGxsX3ZhbHVlIG1lYW5zIGNsb2NrIHdpbGwgcnVuIHNsb3dlciBieQogICogICBwbGxfdmFsdWUqcGxsX25lZ211bHQvcGxsX2Nsb2NrCi0gKi8gCisgKi8KIAogc3RydWN0IHJ0Y19wbGxfaW5mbyB7CiAJaW50IHBsbF9jdHJsOyAgICAgICAvKiBwbGFjZWhvbGRlciBmb3IgZmFuY2llciBjb250cm9sICovCkBAIC0xMDYsNyArMTA2LDYgQEAKIGV4dGVybiBpbnQgcnRjX3ZhbGlkX3RtKHN0cnVjdCBydGNfdGltZSAqdG0pOwogZXh0ZXJuIGludCBydGNfdG1fdG9fdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtLCB1bnNpZ25lZCBsb25nICp0aW1lKTsKIGV4dGVybiB2b2lkIHJ0Y190aW1lX3RvX3RtKHVuc2lnbmVkIGxvbmcgdGltZSwgc3RydWN0IHJ0Y190aW1lICp0bSk7Ci1leHRlcm4gdm9pZCBydGNfbWVyZ2VfYWxhcm0oc3RydWN0IHJ0Y190aW1lICpub3csIHN0cnVjdCBydGNfdGltZSAqYWxhcm0pOwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KQEAgLTEzNiw3ICsxMzUsNyBAQAogCiBzdHJ1Y3QgcnRjX2RldmljZQogewotCXN0cnVjdCBjbGFzc19kZXZpY2UgY2xhc3NfZGV2OworCXN0cnVjdCBkZXZpY2UgZGV2OwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCiAJaW50IGlkOwpAQCAtMTQ1LDcgKzE0NCw2IEBACiAJY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgKm9wczsKIAlzdHJ1Y3QgbXV0ZXggb3BzX2xvY2s7CiAKLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpydGNfZGV2OwogCXN0cnVjdCBjZGV2IGNoYXJfZGV2OwogCXN0cnVjdCBtdXRleCBjaGFyX2xvY2s7CiAKQEAgLTE2OSwzNSArMTY3LDM0IEBACiAJdW5zaWduZWQgaW50IHVpZV90aW1lcl9hY3RpdmU6MTsKICNlbmRpZgogfTsKLSNkZWZpbmUgdG9fcnRjX2RldmljZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHJ0Y19kZXZpY2UsIGNsYXNzX2RldikKKyNkZWZpbmUgdG9fcnRjX2RldmljZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHJ0Y19kZXZpY2UsIGRldikKIAogZXh0ZXJuIHN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2aWNlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCXN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgKm9wcywKIAkJCQkJc3RydWN0IG1vZHVsZSAqb3duZXIpOwotZXh0ZXJuIHZvaWQgcnRjX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBydGNfZGV2aWNlICpyZGV2KTsKLWV4dGVybiBpbnQgcnRjX2ludGVyZmFjZV9yZWdpc3RlcihzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICppbnRmKTsKK2V4dGVybiB2b2lkIHJ0Y19kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKTsKIAotZXh0ZXJuIGludCBydGNfcmVhZF90aW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2Rldiwgc3RydWN0IHJ0Y190aW1lICp0bSk7Ci1leHRlcm4gaW50IHJ0Y19zZXRfdGltZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pOwotZXh0ZXJuIGludCBydGNfc2V0X21tc3Moc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCB1bnNpZ25lZCBsb25nIHNlY3MpOwotZXh0ZXJuIGludCBydGNfcmVhZF9hbGFybShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsCitleHRlcm4gaW50IHJ0Y19yZWFkX3RpbWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lICp0bSk7CitleHRlcm4gaW50IHJ0Y19zZXRfdGltZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKK2V4dGVybiBpbnQgcnRjX3NldF9tbXNzKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHVuc2lnbmVkIGxvbmcgc2Vjcyk7CitleHRlcm4gaW50IHJ0Y19yZWFkX2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsCiAJCQlzdHJ1Y3QgcnRjX3drYWxybSAqYWxybSk7Ci1leHRlcm4gaW50IHJ0Y19zZXRfYWxhcm0oc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorZXh0ZXJuIGludCBydGNfc2V0X2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsCiAJCQkJc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pOwotZXh0ZXJuIHZvaWQgcnRjX3VwZGF0ZV9pcnEoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorZXh0ZXJuIHZvaWQgcnRjX3VwZGF0ZV9pcnEoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywKIAkJCXVuc2lnbmVkIGxvbmcgbnVtLCB1bnNpZ25lZCBsb25nIGV2ZW50cyk7CiAKLWV4dGVybiBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpydGNfY2xhc3Nfb3BlbihjaGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIHJ0Y19jbGFzc19jbG9zZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYpOworZXh0ZXJuIHN0cnVjdCBydGNfZGV2aWNlICpydGNfY2xhc3Nfb3BlbihjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIHJ0Y19jbGFzc19jbG9zZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKTsKIAotZXh0ZXJuIGludCBydGNfaXJxX3JlZ2lzdGVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKK2V4dGVybiBpbnQgcnRjX2lycV9yZWdpc3RlcihzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLAogCQkJCXN0cnVjdCBydGNfdGFzayAqdGFzayk7Ci1leHRlcm4gdm9pZCBydGNfaXJxX3VucmVnaXN0ZXIoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorZXh0ZXJuIHZvaWQgcnRjX2lycV91bnJlZ2lzdGVyKHN0cnVjdCBydGNfZGV2aWNlICpydGMsCiAJCQkJc3RydWN0IHJ0Y190YXNrICp0YXNrKTsKLWV4dGVybiBpbnQgcnRjX2lycV9zZXRfc3RhdGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorZXh0ZXJuIGludCBydGNfaXJxX3NldF9zdGF0ZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLAogCQkJCXN0cnVjdCBydGNfdGFzayAqdGFzaywgaW50IGVuYWJsZWQpOwotZXh0ZXJuIGludCBydGNfaXJxX3NldF9mcmVxKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKK2V4dGVybiBpbnQgcnRjX2lycV9zZXRfZnJlcShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLAogCQkJCXN0cnVjdCBydGNfdGFzayAqdGFzaywgaW50IGZyZXEpOwogCiB0eXBlZGVmIHN0cnVjdCBydGNfdGFzayB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggYTE3MDc1OC4uZDU4ZTc0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtODgsNiArODgsNyBAQAogCiBzdHJ1Y3QgZXhlY19kb21haW47CiBzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGU7CitzdHJ1Y3QgYmlvOwogCiAvKgogICogTGlzdCBvZiBmbGFncyB3ZSB3YW50IHRvIHNoYXJlIGZvciBrZXJuZWwgdGhyZWFkcywKQEAgLTE5NCw2ICsxOTUsMTQgQEAKIGV4dGVybiB2b2lkIGluaXRfaWRsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUsIGludCBjcHUpOwogCiBleHRlcm4gY3B1bWFza190IG5vaHpfY3B1X21hc2s7CisjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19OT19IWikKK2V4dGVybiBpbnQgc2VsZWN0X25vaHpfbG9hZF9iYWxhbmNlcihpbnQgY3B1KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBzZWxlY3Rfbm9oel9sb2FkX2JhbGFuY2VyKGludCBjcHUpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogLyoKICAqIE9ubHkgZHVtcCBUQVNLXyogdGFza3MuICgwIGZvciBhbGwgdGFza3MpCkBAIC0yMjYsNiArMjM1LDcgQEAKIGV4dGVybiB2b2lkIHNvZnRsb2NrdXBfdGljayh2b2lkKTsKIGV4dGVybiB2b2lkIHNwYXduX3NvZnRsb2NrdXBfdGFzayh2b2lkKTsKIGV4dGVybiB2b2lkIHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2codm9pZCk7CitleHRlcm4gdm9pZCB0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3Modm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHNvZnRsb2NrdXBfdGljayh2b2lkKQogewpAQCAtMjM2LDYgKzI0Niw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyh2b2lkKQogewogfQorc3RhdGljIGlubGluZSB2b2lkIHRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncyh2b2lkKQoreworfQogI2VuZGlmCiAKIApAQCAtMzc5LDYgKzM5Miw3IEBACiAJYXRvbWljX3QJCWNvdW50OwogCXN0cnVjdCBrX3NpZ2FjdGlvbglhY3Rpb25bX05TSUddOwogCXNwaW5sb2NrX3QJCXNpZ2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgc2lnbmFsZmRfbGlzdDsKIH07CiAKIHN0cnVjdCBwYWNjdF9zdHJ1Y3QgewpAQCAtNDU3LDYgKzQ3MSw3IEBACiAJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWU7CiAJdW5zaWduZWQgbG9uZyBudmNzdywgbml2Y3N3LCBjbnZjc3csIGNuaXZjc3c7CiAJdW5zaWduZWQgbG9uZyBtaW5fZmx0LCBtYWpfZmx0LCBjbWluX2ZsdCwgY21hal9mbHQ7CisJdW5zaWduZWQgbG9uZyBpbmJsb2NrLCBvdWJsb2NrLCBjaW5ibG9jaywgY291YmxvY2s7CiAKIAkvKgogCSAqIEN1bXVsYXRpdmUgbnMgb2Ygc2NoZWR1bGVkIENQVSB0aW1lIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlCkBAIC02NjgsOCArNjgzLDE0IEBACiAJLyoKIAkgKiBDUFUgcG93ZXIgb2YgdGhpcyBncm91cCwgU0NIRURfTE9BRF9TQ0FMRSBiZWluZyBtYXggcG93ZXIgZm9yIGEKIAkgKiBzaW5nbGUgQ1BVLiBUaGlzIGlzIHJlYWQgb25seSAoZXhjZXB0IGZvciBzZXR1cCwgaG90cGx1ZyBDUFUpLgorCSAqIE5vdGUgOiBOZXZlciBjaGFuZ2UgY3B1X3Bvd2VyIHdpdGhvdXQgcmVjb21wdXRlIGl0cyByZWNpcHJvY2FsCiAJICovCi0JdW5zaWduZWQgbG9uZyBjcHVfcG93ZXI7CisJdW5zaWduZWQgaW50IF9fY3B1X3Bvd2VyOworCS8qCisJICogcmVjaXByb2NhbCB2YWx1ZSBvZiBjcHVfcG93ZXIgdG8gYXZvaWQgZXhwZW5zaXZlIGRpdmlkZXMKKwkgKiAoc2VlIGluY2x1ZGUvbGludXgvcmVjaXByb2NhbF9kaXYuaCkKKwkgKi8KKwl1MzIgcmVjaXByb2NhbF9jcHVfcG93ZXI7CiB9OwogCiBzdHJ1Y3Qgc2NoZWRfZG9tYWluIHsKQEAgLTc5OSwxMCArODIwLDEwIEBACiAKIHN0cnVjdCB0YXNrX3N0cnVjdCB7CiAJdm9sYXRpbGUgbG9uZyBzdGF0ZTsJLyogLTEgdW5ydW5uYWJsZSwgMCBydW5uYWJsZSwgPjAgc3RvcHBlZCAqLwotCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkX2luZm87CisJdm9pZCAqc3RhY2s7CiAJYXRvbWljX3QgdXNhZ2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsJLyogcGVyIHByb2Nlc3MgZmxhZ3MsIGRlZmluZWQgYmVsb3cgKi8KLQl1bnNpZ25lZCBsb25nIHB0cmFjZTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CS8qIHBlciBwcm9jZXNzIGZsYWdzLCBkZWZpbmVkIGJlbG93ICovCisJdW5zaWduZWQgaW50IHB0cmFjZTsKIAogCWludCBsb2NrX2RlcHRoOwkJLyogQktMIGxvY2sgZGVwdGggKi8KIApAQCAtODI1LDcgKzg0Niw3IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX3RpbWU7IC8qIHNjaGVkX2Nsb2NrIHRpbWUgc3BlbnQgcnVubmluZyAqLwogCWVudW0gc2xlZXBfdHlwZSBzbGVlcF90eXBlOwogCi0JdW5zaWduZWQgbG9uZyBwb2xpY3k7CisJdW5zaWduZWQgaW50IHBvbGljeTsKIAljcHVtYXNrX3QgY3B1c19hbGxvd2VkOwogCXVuc2lnbmVkIGludCB0aW1lX3NsaWNlLCBmaXJzdF90aW1lX3NsaWNlOwogCkBAIC04NDUsMTEgKzg2NiwxMSBAQAogCiAvKiB0YXNrIHN0YXRlICovCiAJc3RydWN0IGxpbnV4X2JpbmZtdCAqYmluZm10OwotCWxvbmcgZXhpdF9zdGF0ZTsKKwlpbnQgZXhpdF9zdGF0ZTsKIAlpbnQgZXhpdF9jb2RlLCBleGl0X3NpZ25hbDsKIAlpbnQgcGRlYXRoX3NpZ25hbDsgIC8qICBUaGUgc2lnbmFsIHNlbnQgd2hlbiB0aGUgcGFyZW50IGRpZXMgICovCiAJLyogPz8/ICovCi0JdW5zaWduZWQgbG9uZyBwZXJzb25hbGl0eTsKKwl1bnNpZ25lZCBpbnQgcGVyc29uYWxpdHk7CiAJdW5zaWduZWQgZGlkX2V4ZWM6MTsKIAlwaWRfdCBwaWQ7CiAJcGlkX3QgdGdpZDsKQEAgLTg4MSw3ICs5MDIsNyBAQAogCWludCBfX3VzZXIgKnNldF9jaGlsZF90aWQ7CQkvKiBDTE9ORV9DSElMRF9TRVRUSUQgKi8KIAlpbnQgX191c2VyICpjbGVhcl9jaGlsZF90aWQ7CQkvKiBDTE9ORV9DSElMRF9DTEVBUlRJRCAqLwogCi0JdW5zaWduZWQgbG9uZyBydF9wcmlvcml0eTsKKwl1bnNpZ25lZCBpbnQgcnRfcHJpb3JpdHk7CiAJY3B1dGltZV90IHV0aW1lLCBzdGltZTsKIAl1bnNpZ25lZCBsb25nIG52Y3N3LCBuaXZjc3c7IC8qIGNvbnRleHQgc3dpdGNoIGNvdW50cyAqLwogCXN0cnVjdCB0aW1lc3BlYyBzdGFydF90aW1lOwpAQCAtOTk2LDYgKzEwMTcsOSBAQAogLyogam91cm5hbGxpbmcgZmlsZXN5c3RlbSBpbmZvICovCiAJdm9pZCAqam91cm5hbF9pbmZvOwogCisvKiBzdGFja2VkIGJsb2NrIGRldmljZSBpbmZvICovCisJc3RydWN0IGJpbyAqYmlvX2xpc3QsICoqYmlvX3RhaWw7CisKIC8qIFZNIHN0YXRlICovCiAJc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJlY2xhaW1fc3RhdGU7CiAKQEAgLTExNTgsNiArMTE4Miw3IEBACiAjZGVmaW5lIFBGX1NQUkVBRF9TTEFCCTB4MDIwMDAwMDAJLyogU3ByZWFkIHNvbWUgc2xhYiBjYWNoZXMgb3ZlciBjcHVzZXQgKi8KICNkZWZpbmUgUEZfTUVNUE9MSUNZCTB4MTAwMDAwMDAJLyogTm9uLWRlZmF1bHQgTlVNQSBtZW1wb2xpY3kgKi8KICNkZWZpbmUgUEZfTVVURVhfVEVTVEVSCTB4MjAwMDAwMDAJLyogVGhyZWFkIGJlbG9uZ3MgdG8gdGhlIHJ0IG11dGV4IHRlc3RlciAqLworI2RlZmluZSBQRl9GUkVFWkVSX1NLSVAJMHg0MDAwMDAwMAkvKiBGcmVlemVyIHNob3VsZCBub3QgY291bnQgaXQgYXMgZnJlZXplYWJsZSAqLwogCiAvKgogICogT25seSB0aGUgX2N1cnJlbnRfIHRhc2sgY2FuIHJlYWQvd3JpdGUgdG8gdHNrLT5mbGFncywgYnV0IG90aGVyCkBAIC0xMjk5LDYgKzEzMjQsNyBAQAogCiBleHRlcm4gdm9pZCBwcm9jX2NhY2hlc19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZmx1c2hfc2lnbmFscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBpZ25vcmVfc2lnbmFscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBmbHVzaF9zaWduYWxfaGFuZGxlcnMoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCBmb3JjZV9kZWZhdWx0KTsKIGV4dGVybiBpbnQgZGVxdWV1ZV9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHNpZ3NldF90ICptYXNrLCBzaWdpbmZvX3QgKmluZm8pOwogCkBAIC0xNDk0LDggKzE1MjAsOCBAQAogCiAjaWZuZGVmIF9fSEFWRV9USFJFQURfRlVOQ1RJT05TCiAKLSNkZWZpbmUgdGFza190aHJlYWRfaW5mbyh0YXNrKSAodGFzayktPnRocmVhZF9pbmZvCi0jZGVmaW5lIHRhc2tfc3RhY2tfcGFnZSh0YXNrKSAoKHZvaWQqKSgodGFzayktPnRocmVhZF9pbmZvKSkKKyNkZWZpbmUgdGFza190aHJlYWRfaW5mbyh0YXNrKQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSh0YXNrKS0+c3RhY2spCisjZGVmaW5lIHRhc2tfc3RhY2tfcGFnZSh0YXNrKQkoKHRhc2spLT5zdGFjaykKIAogc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3RocmVhZF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqb3JnKQogewpAQCAtMTUwNSw3ICsxNTMxLDcgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICplbmRfb2Zfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXJldHVybiAodW5zaWduZWQgbG9uZyAqKShwLT50aHJlYWRfaW5mbyArIDEpOworCXJldHVybiAodW5zaWduZWQgbG9uZyAqKSh0YXNrX3RocmVhZF9pbmZvKHApICsgMSk7CiB9CiAKICNlbmRpZgpAQCAtMTU5MCwxMSArMTYxNiwxMyBAQAogCXJldHVybiAwOwogfQogCi0vKiBSZWV2YWx1YXRlIHdoZXRoZXIgdGhlIHRhc2sgaGFzIHNpZ25hbHMgcGVuZGluZyBkZWxpdmVyeS4KLSAgIFRoaXMgaXMgcmVxdWlyZWQgZXZlcnkgdGltZSB0aGUgYmxvY2tlZCBzaWdzZXRfdCBjaGFuZ2VzLgotICAgY2FsbGVycyBtdXN0IGhvbGQgc2lnaGFuZC0+c2lnbG9jay4gICovCi0KLWV4dGVybiBGQVNUQ0FMTCh2b2lkIHJlY2FsY19zaWdwZW5kaW5nX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpKTsKKy8qCisgKiBSZWV2YWx1YXRlIHdoZXRoZXIgdGhlIHRhc2sgaGFzIHNpZ25hbHMgcGVuZGluZyBkZWxpdmVyeS4KKyAqIFdha2UgdGhlIHRhc2sgaWYgc28uCisgKiBUaGlzIGlzIHJlcXVpcmVkIGV2ZXJ5IHRpbWUgdGhlIGJsb2NrZWQgc2lnc2V0X3QgY2hhbmdlcy4KKyAqIGNhbGxlcnMgbXVzdCBob2xkIHNpZ2hhbmQtPnNpZ2xvY2suCisgKi8KK2V4dGVybiB2b2lkIHJlY2FsY19zaWdwZW5kaW5nX2FuZF93YWtlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CiBleHRlcm4gdm9pZCByZWNhbGNfc2lncGVuZGluZyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgc2lnbmFsX3dha2VfdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgcmVzdW1lX3N0b3BwZWQpOwpAQCAtMTY0MSwxMCArMTY2OSw3IEBACiBleHRlcm4gbG9uZyBzY2hlZF9zZXRhZmZpbml0eShwaWRfdCBwaWQsIGNwdW1hc2tfdCBuZXdfbWFzayk7CiBleHRlcm4gbG9uZyBzY2hlZF9nZXRhZmZpbml0eShwaWRfdCBwaWQsIGNwdW1hc2tfdCAqbWFzayk7CiAKLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KIGV4dGVybiBpbnQgc2NoZWRfbWNfcG93ZXJfc2F2aW5ncywgc2NoZWRfc210X3Bvd2VyX3NhdmluZ3M7Ci1leHRlcm4gc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgYXR0cl9zY2hlZF9tY19wb3dlcl9zYXZpbmdzLCBhdHRyX3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzOwotZXh0ZXJuIGludCBzY2hlZF9jcmVhdGVfc3lzZnNfcG93ZXJfc2F2aW5nc19lbnRyaWVzKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNscyk7CiAKIGV4dGVybiB2b2lkIG5vcm1hbGl6ZV9ydF90YXNrcyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDQ3ZTgyYzEuLjllYjllMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTMyMiw3ICszMjIsNyBAQAogICoJQGRpciBjb250YWlucyB0aGUgaW5vZGUgc3RydWN0dXJlIG9mIHBhcmVudCBvZiB0aGUgbmV3IGZpbGUuCiAgKglAZGVudHJ5IGNvbnRhaW5zIHRoZSBkZW50cnkgc3RydWN0dXJlIG9mIHRoZSBuZXcgZmlsZS4KICAqCUBtb2RlIGNvbnRhaW5zIHRoZSBtb2RlIG9mIHRoZSBuZXcgZmlsZS4KLSAqCUBkZXYgY29udGFpbnMgdGhlIHRoZSBkZXZpY2UgbnVtYmVyLgorICoJQGRldiBjb250YWlucyB0aGUgZGV2aWNlIG51bWJlci4KICAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqIEBpbm9kZV9yZW5hbWU6CiAgKglDaGVjayBmb3IgcGVybWlzc2lvbiB0byByZW5hbWUgYSBmaWxlIG9yIGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAppbmRleCBhYTI2NTNhLi43ZjJjOTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCkBAIC0xMzksNiArMTM5LDEwIEBACiAvKiBCbGFja2ZpbiBiZjV4eCAqLwogI2RlZmluZSBQT1JUX0JGSU4JNzUKIAorLyogTWljcmVsIEtTODY5NSAqLworI2RlZmluZSBQT1JUX0tTODY5NQk3NgorCisKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpAQCAtMTQ4LDYgKzE1Miw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAKIHN0cnVjdCB1YXJ0X3BvcnQ7CiBzdHJ1Y3QgdWFydF9pbmZvOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKaW5kZXggMTQ3NDkwNS4uOWE1ZWFjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCkBAIC0yMzMsNiArMjMzLDcgQEAKIAlyZXR1cm4gc2lnIDw9IF9OU0lHID8gMSA6IDA7CiB9CiAKK2V4dGVybiBpbnQgbmV4dF9zaWduYWwoc3RydWN0IHNpZ3BlbmRpbmcgKnBlbmRpbmcsIHNpZ3NldF90ICptYXNrKTsKIGV4dGVybiBpbnQgZ3JvdXBfc2VuZF9zaWdfaW5mbyhpbnQgc2lnLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIGV4dGVybiBpbnQgX19ncm91cF9zZW5kX3NpZ19pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIGxvbmcgZG9fc2lncGVuZGluZyh2b2lkIF9fdXNlciAqLCB1bnNpZ25lZCBsb25nKTsKQEAgLTI0Myw2ICsyNDQsMTMxIEBACiAKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqc2lnaGFuZF9jYWNoZXA7CiAKKy8qCisgKiBJbiBQT1NJWCBhIHNpZ25hbCBpcyBzZW50IGVpdGhlciB0byBhIHNwZWNpZmljIHRocmVhZCAoTGludXggdGFzaykKKyAqIG9yIHRvIHRoZSBwcm9jZXNzIGFzIGEgd2hvbGUgKExpbnV4IHRocmVhZCBncm91cCkuICBIb3cgdGhlIHNpZ25hbAorICogaXMgc2VudCBkZXRlcm1pbmVzIHdoZXRoZXIgaXQncyB0byBvbmUgdGhyZWFkIG9yIHRoZSB3aG9sZSBncm91cCwKKyAqIHdoaWNoIGRldGVybWluZXMgd2hpY2ggc2lnbmFsIG1hc2socykgYXJlIGludm9sdmVkIGluIGJsb2NraW5nIGl0CisgKiBmcm9tIGJlaW5nIGRlbGl2ZXJlZCB1bnRpbCBsYXRlci4gIFdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQsCisgKiBlaXRoZXIgaXQncyBjYXVnaHQgb3IgaWdub3JlZCBieSBhIHVzZXIgaGFuZGxlciBvciBpdCBoYXMgYSBkZWZhdWx0CisgKiBlZmZlY3QgdGhhdCBhcHBsaWVzIHRvIHRoZSB3aG9sZSB0aHJlYWQgZ3JvdXAgKFBPU0lYIHByb2Nlc3MpLgorICoKKyAqIFRoZSBwb3NzaWJsZSBlZmZlY3RzIGFuIHVuYmxvY2tlZCBzaWduYWwgc2V0IHRvIFNJR19ERkwgY2FuIGhhdmUgYXJlOgorICogICBpZ25vcmUJLSBOb3RoaW5nIEhhcHBlbnMKKyAqICAgdGVybWluYXRlCS0ga2lsbCB0aGUgcHJvY2VzcywgaS5lLiBhbGwgdGhyZWFkcyBpbiB0aGUgZ3JvdXAsCisgKiAJCSAgc2ltaWxhciB0byBleGl0X2dyb3VwLiAgVGhlIGdyb3VwIGxlYWRlciAob25seSkgcmVwb3J0cworICoJCSAgV0lGU0lHTkFMRUQgc3RhdHVzIHRvIGl0cyBwYXJlbnQuCisgKiAgIGNvcmVkdW1wCS0gd3JpdGUgYSBjb3JlIGR1bXAgZmlsZSBkZXNjcmliaW5nIGFsbCB0aHJlYWRzIHVzaW5nCisgKgkJICB0aGUgc2FtZSBtbSBhbmQgdGhlbiBraWxsIGFsbCB0aG9zZSB0aHJlYWRzCisgKiAgIHN0b3AgCS0gc3RvcCBhbGwgdGhlIHRocmVhZHMgaW4gdGhlIGdyb3VwLCBpLmUuIFRBU0tfU1RPUFBFRCBzdGF0ZQorICoKKyAqIFNJR0tJTEwgYW5kIFNJR1NUT1AgY2Fubm90IGJlIGNhdWdodCwgYmxvY2tlZCwgb3IgaWdub3JlZC4KKyAqIE90aGVyIHNpZ25hbHMgd2hlbiBub3QgYmxvY2tlZCBhbmQgc2V0IHRvIFNJR19ERkwgYmVoYXZlcyBhcyBmb2xsb3dzLgorICogVGhlIGpvYiBjb250cm9sIHNpZ25hbHMgYWxzbyBoYXZlIG90aGVyIHNwZWNpYWwgZWZmZWN0cy4KKyAqCisgKgkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKworICoJfCAgUE9TSVggc2lnbmFsICAgICAgfCAgZGVmYXVsdCBhY3Rpb24gIHwKKyAqCSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rCisgKgl8ICBTSUdIVVAgICAgICAgICAgICB8ICB0ZXJtaW5hdGUJfAorICoJfCAgU0lHSU5UICAgICAgICAgICAgfAl0ZXJtaW5hdGUJfAorICoJfCAgU0lHUVVJVCAgICAgICAgICAgfAljb3JlZHVtcCAJfAorICoJfCAgU0lHSUxMICAgICAgICAgICAgfAljb3JlZHVtcCAJfAorICoJfCAgU0lHVFJBUCAgICAgICAgICAgfAljb3JlZHVtcCAJfAorICoJfCAgU0lHQUJSVC9TSUdJT1QgICAgfAljb3JlZHVtcCAJfAorICoJfCAgU0lHQlVTICAgICAgICAgICAgfAljb3JlZHVtcCAJfAorICoJfCAgU0lHRlBFICAgICAgICAgICAgfAljb3JlZHVtcCAJfAorICoJfCAgU0lHS0lMTCAgICAgICAgICAgfAl0ZXJtaW5hdGUoKykJfAorICoJfCAgU0lHVVNSMSAgICAgICAgICAgfAl0ZXJtaW5hdGUJfAorICoJfCAgU0lHU0VHViAgICAgICAgICAgfAljb3JlZHVtcCAJfAorICoJfCAgU0lHVVNSMiAgICAgICAgICAgfAl0ZXJtaW5hdGUJfAorICoJfCAgU0lHUElQRSAgICAgICAgICAgfAl0ZXJtaW5hdGUJfAorICoJfCAgU0lHQUxSTSAgICAgICAgICAgfAl0ZXJtaW5hdGUJfAorICoJfCAgU0lHVEVSTSAgICAgICAgICAgfAl0ZXJtaW5hdGUJfAorICoJfCAgU0lHQ0hMRCAgICAgICAgICAgfAlpZ25vcmUgICAJfAorICoJfCAgU0lHQ09OVCAgICAgICAgICAgfAlpZ25vcmUoKikJfAorICoJfCAgU0lHU1RPUCAgICAgICAgICAgfAlzdG9wKCopKCspICAJfAorICoJfCAgU0lHVFNUUCAgICAgICAgICAgfAlzdG9wKCopICAJfAorICoJfCAgU0lHVFRJTiAgICAgICAgICAgfAlzdG9wKCopICAJfAorICoJfCAgU0lHVFRPVSAgICAgICAgICAgfAlzdG9wKCopICAJfAorICoJfCAgU0lHVVJHICAgICAgICAgICAgfAlpZ25vcmUgICAJfAorICoJfCAgU0lHWENQVSAgICAgICAgICAgfAljb3JlZHVtcCAJfAorICoJfCAgU0lHWEZTWiAgICAgICAgICAgfAljb3JlZHVtcCAJfAorICoJfCAgU0lHVlRBTFJNICAgICAgICAgfAl0ZXJtaW5hdGUJfAorICoJfCAgU0lHUFJPRiAgICAgICAgICAgfAl0ZXJtaW5hdGUJfAorICoJfCAgU0lHUE9MTC9TSUdJTyAgICAgfAl0ZXJtaW5hdGUJfAorICoJfCAgU0lHU1lTL1NJR1VOVVNFRCAgfAljb3JlZHVtcCAJfAorICoJfCAgU0lHU1RLRkxUICAgICAgICAgfAl0ZXJtaW5hdGUJfAorICoJfCAgU0lHV0lOQ0ggICAgICAgICAgfAlpZ25vcmUgICAJfAorICoJfCAgU0lHUFdSICAgICAgICAgICAgfAl0ZXJtaW5hdGUJfAorICoJfCAgU0lHUlRNSU4tU0lHUlRNQVggfAl0ZXJtaW5hdGUgICAgICAgfAorICoJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCXwgIG5vbi1QT1NJWCBzaWduYWwgIHwgIGRlZmF1bHQgYWN0aW9uICB8CisgKgkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKworICoJfCAgU0lHRU1UICAgICAgICAgICAgfCAgY29yZWR1bXAJfAorICoJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiAoKykgRm9yIFNJR0tJTEwgYW5kIFNJR1NUT1AgdGhlIGFjdGlvbiBpcyAiYWx3YXlzIiwgbm90IGp1c3QgImRlZmF1bHQiLgorICogKCopIFNwZWNpYWwgam9iIGNvbnRyb2wgZWZmZWN0czoKKyAqIFdoZW4gU0lHQ09OVCBpcyBzZW50LCBpdCByZXN1bWVzIHRoZSBwcm9jZXNzIChhbGwgdGhyZWFkcyBpbiB0aGUgZ3JvdXApCisgKiBmcm9tIFRBU0tfU1RPUFBFRCBzdGF0ZSBhbmQgYWxzbyBjbGVhcnMgYW55IHBlbmRpbmcvcXVldWVkIHN0b3Agc2lnbmFscworICogKGFueSBvZiB0aG9zZSBtYXJrZWQgd2l0aCAic3RvcCgqKSIpLiAgVGhpcyBoYXBwZW5zIHJlZ2FyZGxlc3Mgb2YgYmxvY2tpbmcsCisgKiBjYXRjaGluZywgb3IgaWdub3JpbmcgU0lHQ09OVC4gIFdoZW4gYW55IHN0b3Agc2lnbmFsIGlzIHNlbnQsIGl0IGNsZWFycworICogYW55IHBlbmRpbmcvcXVldWVkIFNJR0NPTlQgc2lnbmFsczsgdGhpcyBoYXBwZW5zIHJlZ2FyZGxlc3Mgb2YgYmxvY2tpbmcsCisgKiBjYXRjaGluZywgb3IgaWdub3JlZCB0aGUgc3RvcCBzaWduYWwsIHRob3VnaCAoZXhjZXB0IGZvciBTSUdTVE9QKSB0aGUKKyAqIGRlZmF1bHQgYWN0aW9uIG9mIHN0b3BwaW5nIHRoZSBwcm9jZXNzIG1heSBoYXBwZW4gbGF0ZXIgb3IgbmV2ZXIuCisgKi8KKworI2lmZGVmIFNJR0VNVAorI2RlZmluZSBTSUdFTVRfTUFTSwlydF9zaWdtYXNrKFNJR0VNVCkKKyNlbHNlCisjZGVmaW5lIFNJR0VNVF9NQVNLCTAKKyNlbmRpZgorCisjaWYgU0lHUlRNSU4gPiBCSVRTX1BFUl9MT05HCisjZGVmaW5lIHJ0X3NpZ21hc2soc2lnKQkoMVVMTCA8PCAoKHNpZyktMSkpCisjZWxzZQorI2RlZmluZSBydF9zaWdtYXNrKHNpZykJc2lnbWFzayhzaWcpCisjZW5kaWYKKyNkZWZpbmUgc2lnaW5tYXNrKHNpZywgbWFzaykgKHJ0X3NpZ21hc2soc2lnKSAmIChtYXNrKSkKKworI2RlZmluZSBTSUdfS0VSTkVMX09OTFlfTUFTSyAoXAorCXJ0X3NpZ21hc2soU0lHS0lMTCkgICB8ICBydF9zaWdtYXNrKFNJR1NUT1ApKQorCisjZGVmaW5lIFNJR19LRVJORUxfU1RPUF9NQVNLIChcCisJcnRfc2lnbWFzayhTSUdTVE9QKSAgIHwgIHJ0X3NpZ21hc2soU0lHVFNUUCkgICB8IFwKKwlydF9zaWdtYXNrKFNJR1RUSU4pICAgfCAgcnRfc2lnbWFzayhTSUdUVE9VKSAgICkKKworI2RlZmluZSBTSUdfS0VSTkVMX0NPUkVEVU1QX01BU0sgKFwKKyAgICAgICAgcnRfc2lnbWFzayhTSUdRVUlUKSAgIHwgIHJ0X3NpZ21hc2soU0lHSUxMKSAgICB8IFwKKwlydF9zaWdtYXNrKFNJR1RSQVApICAgfCAgcnRfc2lnbWFzayhTSUdBQlJUKSAgIHwgXAorICAgICAgICBydF9zaWdtYXNrKFNJR0ZQRSkgICAgfCAgcnRfc2lnbWFzayhTSUdTRUdWKSAgIHwgXAorCXJ0X3NpZ21hc2soU0lHQlVTKSAgICB8ICBydF9zaWdtYXNrKFNJR1NZUykgICAgfCBcCisgICAgICAgIHJ0X3NpZ21hc2soU0lHWENQVSkgICB8ICBydF9zaWdtYXNrKFNJR1hGU1opICAgfCBcCisJU0lHRU1UX01BU0sJCQkJICAgICAgICkKKworI2RlZmluZSBTSUdfS0VSTkVMX0lHTk9SRV9NQVNLIChcCisgICAgICAgIHJ0X3NpZ21hc2soU0lHQ09OVCkgICB8ICBydF9zaWdtYXNrKFNJR0NITEQpICAgfCBcCisJcnRfc2lnbWFzayhTSUdXSU5DSCkgIHwgIHJ0X3NpZ21hc2soU0lHVVJHKSAgICApCisKKyNkZWZpbmUgc2lnX2tlcm5lbF9vbmx5KHNpZykgXAorCSgoKHNpZykgPCBTSUdSVE1JTikgJiYgc2lnaW5tYXNrKHNpZywgU0lHX0tFUk5FTF9PTkxZX01BU0spKQorI2RlZmluZSBzaWdfa2VybmVsX2NvcmVkdW1wKHNpZykgXAorCSgoKHNpZykgPCBTSUdSVE1JTikgJiYgc2lnaW5tYXNrKHNpZywgU0lHX0tFUk5FTF9DT1JFRFVNUF9NQVNLKSkKKyNkZWZpbmUgc2lnX2tlcm5lbF9pZ25vcmUoc2lnKSBcCisJKCgoc2lnKSA8IFNJR1JUTUlOKSAmJiBzaWdpbm1hc2soc2lnLCBTSUdfS0VSTkVMX0lHTk9SRV9NQVNLKSkKKyNkZWZpbmUgc2lnX2tlcm5lbF9zdG9wKHNpZykgXAorCSgoKHNpZykgPCBTSUdSVE1JTikgJiYgc2lnaW5tYXNrKHNpZywgU0lHX0tFUk5FTF9TVE9QX01BU0spKQorCisjZGVmaW5lIHNpZ19uZWVkc190YXNrbGlzdChzaWcpCSgoc2lnKSA9PSBTSUdDT05UKQorCisjZGVmaW5lIHNpZ191c2VyX2RlZmluZWQodCwgc2lnbnIpIFwKKwkoKCh0KS0+c2lnaGFuZC0+YWN0aW9uWyhzaWduciktMV0uc2Euc2FfaGFuZGxlciAhPSBTSUdfREZMKSAmJglcCisJICgodCktPnNpZ2hhbmQtPmFjdGlvblsoc2lnbnIpLTFdLnNhLnNhX2hhbmRsZXIgIT0gU0lHX0lHTikpCisKKyNkZWZpbmUgc2lnX2ZhdGFsKHQsIHNpZ25yKSBcCisJKCFzaWdpbm1hc2soc2lnbnIsIFNJR19LRVJORUxfSUdOT1JFX01BU0t8U0lHX0tFUk5FTF9TVE9QX01BU0spICYmIFwKKwkgKHQpLT5zaWdoYW5kLT5hY3Rpb25bKHNpZ25yKS0xXS5zYS5zYV9oYW5kbGVyID09IFNJR19ERkwpCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfTElOVVhfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2lnbmFsZmQuaCBiL2luY2x1ZGUvbGludXgvc2lnbmFsZmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTA0Mjk0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zaWduYWxmZC5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiAgaW5jbHVkZS9saW51eC9zaWduYWxmZC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNyAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TSUdOQUxGRF9ICisjZGVmaW5lIF9MSU5VWF9TSUdOQUxGRF9ICisKKworc3RydWN0IHNpZ25hbGZkX3NpZ2luZm8geworCV9fdTMyIHNpZ25vOworCV9fczMyIGVycjsKKwlfX3MzMiBjb2RlOworCV9fdTMyIHBpZDsKKwlfX3UzMiB1aWQ7CisJX19zMzIgZmQ7CisJX191MzIgdGlkOworCV9fdTMyIGJhbmQ7CisJX191MzIgb3ZlcnJ1bjsKKwlfX3UzMiB0cmFwbm87CisJX19zMzIgc3RhdHVzOworCV9fczMyIHN2aW50OworCV9fdTY0IHN2cHRyOworCV9fdTY0IHV0aW1lOworCV9fdTY0IHN0aW1lOworCV9fdTY0IGFkZHI7CisKKwkvKgorCSAqIFBhZCBzdHJjdHVyZSB0byAxMjggYnl0ZXMuIFJlbWVtYmVyIHRvIHVwZGF0ZSB0aGUKKwkgKiBwYWQgc2l6ZSB3aGVuIHlvdSBhZGQgbmV3IG1lbWViZXJzLiBXZSB1c2UgYSBmaXhlZAorCSAqIHNpemUgc3RydWN0dXJlIHRvIGF2b2lkIGNvbXBhdGliaWxpdHkgcHJvYmxlbXMgd2l0aAorCSAqIGZ1dHVyZSB2ZXJzaW9ucywgYW5kIHdlIGxlYXZlIGV4dHJhIHNwYWNlIGZvciBhZGRpdGlvbmFsCisJICogbWVtYmVycy4gV2UgdXNlIGZpeGVkIHNpemUgbWVtYmVycyBiZWNhdXNlIHRoaXMgc3RyY3R1cmUKKwkgKiBjb21lcyBvdXQgb2YgYSByZWFkKDIpIGFuZCB3ZSByZWFsbHkgZG9uJ3Qgd2FudCB0byBoYXZlCisJICogYSBjb21wYXQgb24gcmVhZCgyKS4KKwkgKi8KKwlfX3U4IF9fcGFkWzQ4XTsKK307CisKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmZGVmIENPTkZJR19TSUdOQUxGRAorCisvKgorICogRGVsaXZlciB0aGUgc2lnbmFsIHRvIGxpc3RlbmluZyBzaWduYWxmZC4gVGhpcyBtdXN0IGJlIGNhbGxlZAorICogd2l0aCB0aGUgc2lnaGFuZCBsb2NrIGhlbGQuIFNhbWUgYXJlIHRoZSBmb2xsb3dpbmcgdGhhdCBlbmQgdXAKKyAqIGNhbGxpbmcgc2lnbmFsZmRfZGVsaXZlcigpLgorICovCit2b2lkIHNpZ25hbGZkX2RlbGl2ZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBzaWcpOworCisvKgorICogTm8gbmVlZCB0byBmYWxsIGluc2lkZSBzaWduYWxmZF9kZWxpdmVyKCkgaWYgbm8gc2lnbmFsIGxpc3RlbmVycworICogYXJlIGF2YWlsYWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNpZ25hbGZkX25vdGlmeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHNpZykKK3sKKwlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJnRzay0+c2lnaGFuZC0+c2lnbmFsZmRfbGlzdCkpKQorCQlzaWduYWxmZF9kZWxpdmVyKHRzaywgc2lnKTsKK30KKworLyoKKyAqIFRoZSBzaWduYWwgLTEgaXMgdXNlZCB0byBub3RpZnkgdGhlIHNpZ25hbGZkIHRoYXQgdGhlIHNpZ2hhbmQKKyAqIGlzIG9uIGl0cyB3YXkgdG8gYmUgZGV0YWNoZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWduYWxmZF9kZXRhY2hfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmdHNrLT5zaWdoYW5kLT5zaWduYWxmZF9saXN0KSkpCisJCXNpZ25hbGZkX2RlbGl2ZXIodHNrLCAtMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWduYWxmZF9kZXRhY2goc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoYW5kID0gdHNrLT5zaWdoYW5kOworCisJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZzaWdoYW5kLT5zaWduYWxmZF9saXN0KSkpIHsKKwkJc3Bpbl9sb2NrX2lycSgmc2lnaGFuZC0+c2lnbG9jayk7CisJCXNpZ25hbGZkX2RlbGl2ZXIodHNrLCAtMSk7CisJCXNwaW5fdW5sb2NrX2lycSgmc2lnaGFuZC0+c2lnbG9jayk7CisJfQorfQorCisjZWxzZSAvKiBDT05GSUdfU0lHTkFMRkQgKi8KKworI2RlZmluZSBzaWduYWxmZF9kZWxpdmVyKHQsIHMpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2lnbmFsZmRfbm90aWZ5KHQsIHMpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2lnbmFsZmRfZGV0YWNoX2xvY2tlZCh0KSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNpZ25hbGZkX2RldGFjaCh0KSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBDT05GSUdfU0lHTkFMRkQgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9MSU5VWF9TSUdOQUxGRF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKaW5kZXggNzE4MjllZi4uYTAxNTIzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTMyLDkgKzMyLDYgQEAKICNkZWZpbmUgU0xBQl9NRU1fU1BSRUFECQkweDAwMTAwMDAwVUwJLyogU3ByZWFkIHNvbWUgbWVtb3J5IG92ZXIgY3B1c2V0ICovCiAjZGVmaW5lIFNMQUJfVFJBQ0UJCTB4MDAyMDAwMDBVTAkvKiBUcmFjZSBhbGxvY2F0aW9ucyBhbmQgZnJlZXMgKi8KIAotLyogRmxhZ3MgcGFzc2VkIHRvIGEgY29uc3RydWN0b3IgZnVuY3Rpb25zICovCi0jZGVmaW5lIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUgkweDAwMVVMCQkvKiBJZiBub3Qgc2V0LCB0aGVuIGRlY29uc3RydWN0b3IgKi8KLQogLyoKICAqIHN0cnVjdCBrbWVtX2NhY2hlIHJlbGF0ZWQgcHJvdG90eXBlcwogICovCkBAIC03Nyw2ICs3NCwyMSBAQAogI2VuZGlmCiAKIC8qCisgKiBUaGUgbGFyZ2VzdCBrbWFsbG9jIHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBzbGFiIGFsbG9jYXRvcnMgaXMKKyAqIDMyIG1lZ2FieXRlICgyXjI1KSBvciB0aGUgbWF4aW11bSBhbGxvY2F0YWJsZSBwYWdlIG9yZGVyIGlmIHRoYXQgaXMKKyAqIGxlc3MgdGhhbiAzMiBNQi4KKyAqCisgKiBXQVJOSU5HOiBJdHMgbm90IGVhc3kgdG8gaW5jcmVhc2UgdGhpcyB2YWx1ZSBzaW5jZSB0aGUgYWxsb2NhdG9ycyBoYXZlCisgKiB0byBkbyB2YXJpb3VzIHRyaWNrcyB0byB3b3JrIGFyb3VuZCBjb21waWxlciBsaW1pdGF0aW9ucyBpbiBvcmRlciB0bworICogZW5zdXJlIHByb3BlciBjb25zdGFudCBmb2xkaW5nLgorICovCisjZGVmaW5lIEtNQUxMT0NfU0hJRlRfSElHSAkoKE1BWF9PUkRFUiArIFBBR0VfU0hJRlQpIDw9IDI1ID8gXAorCQkJCShNQVhfT1JERVIgKyBQQUdFX1NISUZUKSA6IDI1KQorCisjZGVmaW5lIEtNQUxMT0NfTUFYX1NJWkUJKDFVTCA8PCBLTUFMTE9DX1NISUZUX0hJR0gpCisjZGVmaW5lIEtNQUxMT0NfTUFYX09SREVSCShLTUFMTE9DX1NISUZUX0hJR0ggLSBQQUdFX1NISUZUKQorCisvKgogICogQ29tbW9uIGttYWxsb2MgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGFsbCBhbGxvY2F0b3JzCiAgKi8KIHZvaWQgKl9fa21hbGxvYyhzaXplX3QsIGdmcF90KTsKQEAgLTIzMyw5ICsyNDUsNiBAQAogCiAjZW5kaWYgLyogREVCVUdfU0xBQiAqLwogCi1leHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNsYWJpbmZvX29wOwotc3NpemVfdCBzbGFiaW5mb193cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKLQogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgkvKiBfTElOVVhfU0xBQl9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2xhYl9kZWYuaAppbmRleCA1ZTQzNjQ2Li44ZDgxYTYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiX2RlZi5oCkBAIC0xMDksNCArMTA5LDcgQEAKIAogI2VuZGlmCS8qIENPTkZJR19OVU1BICovCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2xhYmluZm9fb3A7Citzc2l6ZV90IHNsYWJpbmZvX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOworCiAjZW5kaWYJLyogX0xJTlVYX1NMQUJfREVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAppbmRleCBlYTI3MDY1Li4wNzY0YzgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCkBAIC00MCw3ICs0MCw2IEBACiAJaW50IG9iamVjdHM7CQkvKiBOdW1iZXIgb2Ygb2JqZWN0cyBpbiBzbGFiICovCiAJaW50IHJlZmNvdW50OwkJLyogUmVmY291bnQgZm9yIHNsYWIgY2FjaGUgZGVzdHJveSAqLwogCXZvaWQgKCpjdG9yKSh2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCpkdG9yKSh2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpOwogCWludCBpbnVzZTsJCS8qIE9mZnNldCB0byBtZXRhZGF0YSAqLwogCWludCBhbGlnbjsJCS8qIEFsaWdubWVudCAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CS8qIE5hbWUgKG9ubHkgZm9yIGRpc3BsYXkhKSAqLwpAQCAtNTksMTYgKzU4LDYgQEAKICAqLwogI2RlZmluZSBLTUFMTE9DX1NISUZUX0xPVyAzCiAKLSNpZmRlZiBDT05GSUdfTEFSR0VfQUxMT0NTCi0jZGVmaW5lIEtNQUxMT0NfU0hJRlRfSElHSCAyNQotI2Vsc2UKLSNpZiAhZGVmaW5lZChDT05GSUdfTU1VKSB8fCBOUl9DUFVTID4gNTEyIHx8IE1BWF9OVU1OT0RFUyA+IDI1NgotI2RlZmluZSBLTUFMTE9DX1NISUZUX0hJR0ggMjAKLSNlbHNlCi0jZGVmaW5lIEtNQUxMT0NfU0hJRlRfSElHSCAxOAotI2VuZGlmCi0jZW5kaWYKLQogLyoKICAqIFdlIGtlZXAgdGhlIGdlbmVyYWwgY2FjaGVzIGluIGFuIGFycmF5IG9mIHNsYWIgY2FjaGVzIHRoYXQgYXJlIHVzZWQgZm9yCiAgKiAyXnggYnl0ZXMgb2YgYWxsb2NhdGlvbnMuCkBAIC03OSw3ICs2OCw3IEBACiAgKiBTb3JyeSB0aGF0IHRoZSBmb2xsb3dpbmcgaGFzIHRvIGJlIHRoYXQgdWdseSBidXQgc29tZSB2ZXJzaW9ucyBvZiBHQ0MKICAqIGhhdmUgdHJvdWJsZSB3aXRoIGNvbnN0YW50IHByb3BhZ2F0aW9uIGFuZCBsb29wcy4KICAqLwotc3RhdGljIGlubGluZSBpbnQga21hbGxvY19pbmRleChpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGttYWxsb2NfaW5kZXgoc2l6ZV90IHNpemUpCiB7CiAJLyoKIAkgKiBXZSBzaG91bGQgcmV0dXJuIDAgaWYgc2l6ZSA9PSAwIGJ1dCB3ZSB1c2UgdGhlIHNtYWxsZXN0IG9iamVjdApAQCAtODcsNiArNzYsOSBAQAogCSAqLwogCVdBUk5fT05fT05DRShzaXplID09IDApOwogCisJaWYgKHNpemUgPiBLTUFMTE9DX01BWF9TSVpFKQorCQlyZXR1cm4gLTE7CisKIAlpZiAoc2l6ZSA+IDY0ICYmIHNpemUgPD0gOTYpCiAJCXJldHVybiAxOwogCWlmIChzaXplID4gMTI4ICYmIHNpemUgPD0gMTkyKQpAQCAtMTA3LDE3ICs5OSwxMyBAQAogCWlmIChzaXplIDw9ICA2NCAqIDEwMjQpIHJldHVybiAxNjsKIAlpZiAoc2l6ZSA8PSAxMjggKiAxMDI0KSByZXR1cm4gMTc7CiAJaWYgKHNpemUgPD0gMjU2ICogMTAyNCkgcmV0dXJuIDE4OwotI2lmIEtNQUxMT0NfU0hJRlRfSElHSCA+IDE4CiAJaWYgKHNpemUgPD0gIDUxMiAqIDEwMjQpIHJldHVybiAxOTsKIAlpZiAoc2l6ZSA8PSAxMDI0ICogMTAyNCkgcmV0dXJuIDIwOwotI2VuZGlmCi0jaWYgS01BTExPQ19TSElGVF9ISUdIID4gMjAKIAlpZiAoc2l6ZSA8PSAgMiAqIDEwMjQgKiAxMDI0KSByZXR1cm4gMjE7CiAJaWYgKHNpemUgPD0gIDQgKiAxMDI0ICogMTAyNCkgcmV0dXJuIDIyOwogCWlmIChzaXplIDw9ICA4ICogMTAyNCAqIDEwMjQpIHJldHVybiAyMzsKIAlpZiAoc2l6ZSA8PSAxNiAqIDEwMjQgKiAxMDI0KSByZXR1cm4gMjQ7CiAJaWYgKHNpemUgPD0gMzIgKiAxMDI0ICogMTAyNCkgcmV0dXJuIDI1OwotI2VuZGlmCiAJcmV0dXJuIC0xOwogCiAvKgpAQCAtMTQyLDcgKzEzMCwxMiBAQAogCWlmIChpbmRleCA9PSAwKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChpbmRleCA8IDApIHsKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gb25seSBnZXRzIGV4cGFuZGVkIGlmIF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpLCBzbworCSAqIHRlc3RpbmcgaXQgaGVyZSBzaG91bGRuJ3QgYmUgbmVlZGVkLiAgQnV0IHNvbWUgdmVyc2lvbnMgb2YgZ2NjIG5lZWQKKwkgKiBoZWxwLgorCSAqLworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJiBpbmRleCA8IDApIHsKIAkJLyoKIAkJICogR2VuZXJhdGUgYSBsaW5rIGZhaWx1cmUuIFdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkCiAJCSAqIGRvIHNvbWV0aGluZyB0byBzdG9wIHRoZSBjb21waWxlIGhlcmUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtYl9mcy5oIGIvaW5jbHVkZS9saW51eC9zbWJfZnMuaAppbmRleCAxM2IzYWY1Li4yYzVjZDU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtYl9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc21iX2ZzLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYl9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNtYl9zYl9pbmZvICpTTUJfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21wLmggYi9pbmNsdWRlL2xpbnV4L3NtcC5oCmluZGV4IDdiYTIzZWMuLjk2YWMyMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbXAuaApAQCAtNiw2ICs2LDcgQEAKICAqCQlBbGFuIENveC4gPGFsYW5AcmVkaGF0LmNvbT4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAogZXh0ZXJuIHZvaWQgY3B1X2lkbGUodm9pZCk7CiAKQEAgLTgzLDcgKzg0LDYgQEAKICAqCVRoZXNlIG1hY3JvcyBmb2xkIHRoZSBTTVAgZnVuY3Rpb25hbGl0eSBpbnRvIGEgc2luZ2xlIENQVSBzeXN0ZW0KICAqLwogI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCQkJMAotI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJCTAKIHN0YXRpYyBpbmxpbmUgaW50IHVwX3NtcF9jYWxsX2Z1bmN0aW9uKHZvaWQpCiB7CiAJcmV0dXJuIDA7CkBAIC0xMDAsMTEgKzEwMCw5IEBACiAjZGVmaW5lIG51bV9ib290aW5nX2NwdXMoKQkJCTEKICNkZWZpbmUgc21wX3ByZXBhcmVfYm9vdF9jcHUoKQkJCWRvIHt9IHdoaWxlICgwKQogc3RhdGljIGlubGluZSBpbnQgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGludCBjcHVpZCwgdm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwKLQkJCQl2b2lkICppbmZvLCBpbnQgcmV0cnksIGludCB3YWl0KQorCQkJCQkgICB2b2lkICppbmZvLCBpbnQgcmV0cnksIGludCB3YWl0KQogewotCS8qIERpc2FibGUgaW50ZXJydXB0cyBoZXJlPyAqLwotCWZ1bmMoaW5mbyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIC1FQlVTWTsKIH0KIAogI2VuZGlmIC8qICFTTVAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ueXBpLmggYi9pbmNsdWRlL2xpbnV4L3NvbnlwaS5oCmluZGV4IGY1NmQyNDcuLjM0ZDRiMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc29ueXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zb255cGkuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTmFyYXlhbmFuIFIgUyA8bmFyc0BrYWRhbWJhLm9yZz4KIAotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgQWxj9HZlIDx3d3cuYWxjb3ZlLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEFsY8O0dmUgPHd3dy5hbGNvdmUuY29tPgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBNaWNoYWVsIEFzaGxleSA8bS5hc2hsZXlAdW5zdy5lZHUuYXU+CiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9zcGkvS2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzVhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9LYnVpbGQKQEAgLTAsMCArMSBAQAoraGVhZGVyLXkgKz0gc3BpZGV2LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKaW5kZXggNGYwZjhjMi4uYjZiZWRjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKQEAgLTMyLDExICszMiwxMiBAQAogICogQG1heF9zcGVlZF9oejogTWF4aW11bSBjbG9jayByYXRlIHRvIGJlIHVzZWQgd2l0aCB0aGlzIGNoaXAKICAqCShvbiB0aGlzIGJvYXJkKTsgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIGRldmljZSdzIGRyaXZlci4KICAqCVRoZSBzcGlfdHJhbnNmZXIuc3BlZWRfaHogY2FuIG92ZXJyaWRlIHRoaXMgZm9yIGVhY2ggdHJhbnNmZXIuCi0gKiBAY2hpcC1zZWxlY3Q6IENoaXBzZWxlY3QsIGRpc3Rpbmd1aXNoaW5nIGNoaXBzIGhhbmRsZWQgYnkgIm1hc3RlciIuCisgKiBAY2hpcF9zZWxlY3Q6IENoaXBzZWxlY3QsIGRpc3Rpbmd1aXNoaW5nIGNoaXBzIGhhbmRsZWQgYnkgQG1hc3Rlci4KICAqIEBtb2RlOiBUaGUgc3BpIG1vZGUgZGVmaW5lcyBob3cgZGF0YSBpcyBjbG9ja2VkIG91dCBhbmQgaW4uCiAgKglUaGlzIG1heSBiZSBjaGFuZ2VkIGJ5IHRoZSBkZXZpY2UncyBkcml2ZXIuCi0gKglUaGUgImFjdGl2ZSBsb3ciIGRlZmF1bHQgZm9yIGNoaXBzZWxlY3QgbW9kZSBjYW4gYmUgb3ZlcnJpZGRlbiwKLSAqCWFzIGNhbiB0aGUgIk1TQiBmaXJzdCIgZGVmYXVsdCBmb3IgZWFjaCB3b3JkIGluIGEgdHJhbnNmZXIuCisgKglUaGUgImFjdGl2ZSBsb3ciIGRlZmF1bHQgZm9yIGNoaXBzZWxlY3QgbW9kZSBjYW4gYmUgb3ZlcnJpZGRlbgorICoJKGJ5IHNwZWNpZnlpbmcgU1BJX0NTX0hJR0gpIGFzIGNhbiB0aGUgIk1TQiBmaXJzdCIgZGVmYXVsdCBmb3IKKyAqCWVhY2ggd29yZCBpbiBhIHRyYW5zZmVyIChieSBzcGVjaWZ5aW5nIFNQSV9MU0JfRklSU1QpLgogICogQGJpdHNfcGVyX3dvcmQ6IERhdGEgdHJhbnNmZXJzIGludm9sdmUgb25lIG9yIG1vcmUgd29yZHM7IHdvcmQgc2l6ZXMKICAqCWxpa2UgZWlnaHQgb3IgMTIgYml0cyBhcmUgY29tbW9uLiAgSW4tbWVtb3J5IHdvcmRzaXplcyBhcmUKICAqCXBvd2VycyBvZiB0d28gYnl0ZXMgKGUuZy4gMjAgYml0IHNhbXBsZXMgdXNlIDMyIGJpdHMpLgpAQCAtNDgsMTQgKzQ5LDE4IEBACiAgKiBAY29udHJvbGxlcl9zdGF0ZTogQ29udHJvbGxlcidzIHJ1bnRpbWUgc3RhdGUKICAqIEBjb250cm9sbGVyX2RhdGE6IEJvYXJkLXNwZWNpZmljIGRlZmluaXRpb25zIGZvciBjb250cm9sbGVyLCBzdWNoIGFzCiAgKglGSUZPIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnM7IGZyb20gYm9hcmRfaW5mby5jb250cm9sbGVyX2RhdGEKKyAqIEBtb2RhbGlhczogTmFtZSBvZiB0aGUgZHJpdmVyIHRvIHVzZSB3aXRoIHRoaXMgZGV2aWNlLCBvciBhbiBhbGlhcworICoJZm9yIHRoYXQgbmFtZS4gIFRoaXMgYXBwZWFycyBpbiB0aGUgc3lzZnMgIm1vZGFsaWFzIiBhdHRyaWJ1dGUKKyAqCWZvciBkcml2ZXIgY29sZHBsdWdnaW5nLCBhbmQgaW4gdWV2ZW50cyB1c2VkIGZvciBob3RwbHVnZ2luZwogICoKLSAqIEFuIHNwaV9kZXZpY2UgaXMgdXNlZCB0byBpbnRlcmNoYW5nZSBkYXRhIGJldHdlZW4gYW4gU1BJIHNsYXZlCisgKiBBIEBzcGlfZGV2aWNlIGlzIHVzZWQgdG8gaW50ZXJjaGFuZ2UgZGF0YSBiZXR3ZWVuIGFuIFNQSSBzbGF2ZQogICogKHVzdWFsbHkgYSBkaXNjcmV0ZSBjaGlwKSBhbmQgQ1BVIG1lbW9yeS4KICAqCi0gKiBJbiAiZGV2IiwgdGhlIHBsYXRmb3JtX2RhdGEgaXMgdXNlZCB0byBob2xkIGluZm9ybWF0aW9uIGFib3V0IHRoaXMKKyAqIEluIEBkZXYsIHRoZSBwbGF0Zm9ybV9kYXRhIGlzIHVzZWQgdG8gaG9sZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzCiAgKiBkZXZpY2UgdGhhdCdzIG1lYW5pbmdmdWwgdG8gdGhlIGRldmljZSdzIHByb3RvY29sIGRyaXZlciwgYnV0IG5vdAogICogdG8gaXRzIGNvbnRyb2xsZXIuICBPbmUgZXhhbXBsZSBtaWdodCBiZSBhbiBpZGVudGlmaWVyIGZvciBhIGNoaXAKLSAqIHZhcmlhbnQgd2l0aCBzbGlnaHRseSBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eS4KKyAqIHZhcmlhbnQgd2l0aCBzbGlnaHRseSBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eTsgYW5vdGhlciBtaWdodCBiZQorICogaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoaXMgcGFydGljdWxhciBib2FyZCB3aXJlcyB0aGUgY2hpcCdzIHBpbnMuCiAgKi8KIHN0cnVjdCBzcGlfZGV2aWNlIHsKIAlzdHJ1Y3QgZGV2aWNlCQlkZXY7CkBAIC03NywxMyArODIsMTUgQEAKIAl2b2lkCQkJKmNvbnRyb2xsZXJfZGF0YTsKIAljb25zdCBjaGFyCQkqbW9kYWxpYXM7CiAKLQkvLyBsaWtlbHkgbmVlZCBtb3JlIGhvb2tzIGZvciBtb3JlIHByb3RvY29sIG9wdGlvbnMgYWZmZWN0aW5nIGhvdwotCS8vIHRoZSBjb250cm9sbGVyIHRhbGtzIHRvIGVhY2ggY2hpcCwgbGlrZToKLQkvLyAgLSBtZW1vcnkgcGFja2luZyAoMTIgYml0IHNhbXBsZXMgaW50byBsb3cgYml0cywgb3RoZXJzIHplcm9lZCkKLQkvLyAgLSBwcmlvcml0eQotCS8vICAtIGRyb3AgY2hpcHNlbGVjdCBhZnRlciBlYWNoIHdvcmQKLQkvLyAgLSBjaGlwc2VsZWN0IGRlbGF5cwotCS8vICAtIC4uLgorCS8qCisJICogbGlrZWx5IG5lZWQgbW9yZSBob29rcyBmb3IgbW9yZSBwcm90b2NvbCBvcHRpb25zIGFmZmVjdGluZyBob3cKKwkgKiB0aGUgY29udHJvbGxlciB0YWxrcyB0byBlYWNoIGNoaXAsIGxpa2U6CisJICogIC0gbWVtb3J5IHBhY2tpbmcgKDEyIGJpdCBzYW1wbGVzIGludG8gbG93IGJpdHMsIG90aGVycyB6ZXJvZWQpCisJICogIC0gcHJpb3JpdHkKKwkgKiAgLSBkcm9wIGNoaXBzZWxlY3QgYWZ0ZXIgZWFjaCB3b3JkCisJICogIC0gY2hpcHNlbGVjdCBkZWxheXMKKwkgKiAgLSAuLi4KKwkgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNwaV9kZXZpY2UgKnRvX3NwaV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTQ2LDYgKzE1MywxMSBAQAogCiBleHRlcm4gaW50IHNwaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNwaV9kcml2ZXIgKnNkcnYpOwogCisvKioKKyAqIHNwaV91bnJlZ2lzdGVyX2RyaXZlciAtIHJldmVyc2UgZWZmZWN0IG9mIHNwaV9yZWdpc3Rlcl9kcml2ZXIKKyAqIEBzZHJ2OiB0aGUgZHJpdmVyIHRvIHVucmVnaXN0ZXIKKyAqIENvbnRleHQ6IGNhbiBzbGVlcAorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc3BpX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzcGlfZHJpdmVyICpzZHJ2KQogewogCWlmIChzZHJ2KQpAQCAtMTY1LDE4ICsxNzcsMjAgQEAKICAqIEBzZXR1cDogdXBkYXRlcyB0aGUgZGV2aWNlIG1vZGUgYW5kIGNsb2NraW5nIHJlY29yZHMgdXNlZCBieSBhCiAgKglkZXZpY2UncyBTUEkgY29udHJvbGxlcjsgcHJvdG9jb2wgY29kZSBtYXkgY2FsbCB0aGlzLiAgVGhpcwogICoJbXVzdCBmYWlsIGlmIGFuIHVucmVjb2duaXplZCBvciB1bnN1cHBvcnRlZCBtb2RlIGlzIHJlcXVlc3RlZC4KKyAqCUl0J3MgYWx3YXlzIHNhZmUgdG8gY2FsbCB0aGlzIHVubGVzcyB0cmFuc2ZlcnMgYXJlIHBlbmRpbmcgb24KKyAqCXRoZSBkZXZpY2Ugd2hvc2Ugc2V0dGluZ3MgYXJlIGJlaW5nIG1vZGlmaWVkLgogICogQHRyYW5zZmVyOiBhZGRzIGEgbWVzc2FnZSB0byB0aGUgY29udHJvbGxlcidzIHRyYW5zZmVyIHF1ZXVlLgogICogQGNsZWFudXA6IGZyZWVzIGNvbnRyb2xsZXItc3BlY2lmaWMgc3RhdGUKICAqCi0gKiBFYWNoIFNQSSBtYXN0ZXIgY29udHJvbGxlciBjYW4gY29tbXVuaWNhdGUgd2l0aCBvbmUgb3IgbW9yZSBzcGlfZGV2aWNlCisgKiBFYWNoIFNQSSBtYXN0ZXIgY29udHJvbGxlciBjYW4gY29tbXVuaWNhdGUgd2l0aCBvbmUgb3IgbW9yZSBAc3BpX2RldmljZQogICogY2hpbGRyZW4uICBUaGVzZSBtYWtlIGEgc21hbGwgYnVzLCBzaGFyaW5nIE1PU0ksIE1JU08gYW5kIFNDSyBzaWduYWxzCiAgKiBidXQgbm90IGNoaXAgc2VsZWN0IHNpZ25hbHMuICBFYWNoIGRldmljZSBtYXkgYmUgY29uZmlndXJlZCB0byB1c2UgYQogICogZGlmZmVyZW50IGNsb2NrIHJhdGUsIHNpbmNlIHRob3NlIHNoYXJlZCBzaWduYWxzIGFyZSBpZ25vcmVkIHVubGVzcwogICogdGhlIGNoaXAgaXMgc2VsZWN0ZWQuCiAgKgogICogVGhlIGRyaXZlciBmb3IgYW4gU1BJIGNvbnRyb2xsZXIgbWFuYWdlcyBhY2Nlc3MgdG8gdGhvc2UgZGV2aWNlcyB0aHJvdWdoCi0gKiBhIHF1ZXVlIG9mIHNwaV9tZXNzYWdlIHRyYW5zYWN0aW9ucywgY29weWluIGRhdGEgYmV0d2VlbiBDUFUgbWVtb3J5IGFuZAotICogYW4gU1BJIHNsYXZlIGRldmljZSkuICBGb3IgZWFjaCBzdWNoIG1lc3NhZ2UgaXQgcXVldWVzLCBpdCBjYWxscyB0aGUKKyAqIGEgcXVldWUgb2Ygc3BpX21lc3NhZ2UgdHJhbnNhY3Rpb25zLCBjb3B5aW5nIGRhdGEgYmV0d2VlbiBDUFUgbWVtb3J5IGFuZAorICogYW4gU1BJIHNsYXZlIGRldmljZS4gIEZvciBlYWNoIHN1Y2ggbWVzc2FnZSBpdCBxdWV1ZXMsIGl0IGNhbGxzIHRoZQogICogbWVzc2FnZSdzIGNvbXBsZXRpb24gZnVuY3Rpb24gd2hlbiB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGVzLgogICovCiBzdHJ1Y3Qgc3BpX21hc3RlciB7CkBAIC0yODAsMjcgKzI5NCwyNyBAQAogICogc3RydWN0IHNwaV90cmFuc2ZlciAtIGEgcmVhZC93cml0ZSBidWZmZXIgcGFpcgogICogQHR4X2J1ZjogZGF0YSB0byBiZSB3cml0dGVuIChkbWEtc2FmZSBtZW1vcnkpLCBvciBOVUxMCiAgKiBAcnhfYnVmOiBkYXRhIHRvIGJlIHJlYWQgKGRtYS1zYWZlIG1lbW9yeSksIG9yIE5VTEwKLSAqIEB0eF9kbWE6IERNQSBhZGRyZXNzIG9mIHR4X2J1ZiwgaWYgc3BpX21lc3NhZ2UuaXNfZG1hX21hcHBlZAotICogQHJ4X2RtYTogRE1BIGFkZHJlc3Mgb2YgcnhfYnVmLCBpZiBzcGlfbWVzc2FnZS5pc19kbWFfbWFwcGVkCisgKiBAdHhfZG1hOiBETUEgYWRkcmVzcyBvZiB0eF9idWYsIGlmIEBzcGlfbWVzc2FnZS5pc19kbWFfbWFwcGVkCisgKiBAcnhfZG1hOiBETUEgYWRkcmVzcyBvZiByeF9idWYsIGlmIEBzcGlfbWVzc2FnZS5pc19kbWFfbWFwcGVkCiAgKiBAbGVuOiBzaXplIG9mIHJ4IGFuZCB0eCBidWZmZXJzIChpbiBieXRlcykKICAqIEBzcGVlZF9oejogU2VsZWN0IGEgc3BlZWQgb3RoZXIgdGhlbiB0aGUgZGV2aWNlIGRlZmF1bHQgZm9yIHRoaXMKLSAqICAgICAgdHJhbnNmZXIuIElmIDAgdGhlIGRlZmF1bHQgKGZyb20gc3BpX2RldmljZSkgaXMgdXNlZC4KKyAqICAgICAgdHJhbnNmZXIuIElmIDAgdGhlIGRlZmF1bHQgKGZyb20gQHNwaV9kZXZpY2UpIGlzIHVzZWQuCiAgKiBAYml0c19wZXJfd29yZDogc2VsZWN0IGEgYml0c19wZXJfd29yZCBvdGhlciB0aGVuIHRoZSBkZXZpY2UgZGVmYXVsdAotICogICAgICBmb3IgdGhpcyB0cmFuc2Zlci4gSWYgMCB0aGUgZGVmYXVsdCAoZnJvbSBzcGlfZGV2aWNlKSBpcyB1c2VkLgorICogICAgICBmb3IgdGhpcyB0cmFuc2Zlci4gSWYgMCB0aGUgZGVmYXVsdCAoZnJvbSBAc3BpX2RldmljZSkgaXMgdXNlZC4KICAqIEBjc19jaGFuZ2U6IGFmZmVjdHMgY2hpcHNlbGVjdCBhZnRlciB0aGlzIHRyYW5zZmVyIGNvbXBsZXRlcwogICogQGRlbGF5X3VzZWNzOiBtaWNyb3NlY29uZHMgdG8gZGVsYXkgYWZ0ZXIgdGhpcyB0cmFuc2ZlciBiZWZvcmUKICAqCShvcHRpb25hbGx5KSBjaGFuZ2luZyB0aGUgY2hpcHNlbGVjdCBzdGF0dXMsIHRoZW4gc3RhcnRpbmcKLSAqCXRoZSBuZXh0IHRyYW5zZmVyIG9yIGNvbXBsZXRpbmcgdGhpcyBzcGlfbWVzc2FnZS4KLSAqIEB0cmFuc2Zlcl9saXN0OiB0cmFuc2ZlcnMgYXJlIHNlcXVlbmNlZCB0aHJvdWdoIHNwaV9tZXNzYWdlLnRyYW5zZmVycworICoJdGhlIG5leHQgdHJhbnNmZXIgb3IgY29tcGxldGluZyB0aGlzIEBzcGlfbWVzc2FnZS4KKyAqIEB0cmFuc2Zlcl9saXN0OiB0cmFuc2ZlcnMgYXJlIHNlcXVlbmNlZCB0aHJvdWdoIEBzcGlfbWVzc2FnZS50cmFuc2ZlcnMKICAqCiAgKiBTUEkgdHJhbnNmZXJzIGFsd2F5cyB3cml0ZSB0aGUgc2FtZSBudW1iZXIgb2YgYnl0ZXMgYXMgdGhleSByZWFkLgotICogUHJvdG9jb2wgZHJpdmVycyBzaG91bGQgYWx3YXlzIHByb3ZpZGUgcnhfYnVmIGFuZC9vciB0eF9idWYuCisgKiBQcm90b2NvbCBkcml2ZXJzIHNob3VsZCBhbHdheXMgcHJvdmlkZSBAcnhfYnVmIGFuZC9vciBAdHhfYnVmLgogICogSW4gc29tZSBjYXNlcywgdGhleSBtYXkgYWxzbyB3YW50IHRvIHByb3ZpZGUgRE1BIGFkZHJlc3NlcyBmb3IKICAqIHRoZSBkYXRhIGJlaW5nIHRyYW5zZmVycmVkOyB0aGF0IG1heSByZWR1Y2Ugb3ZlcmhlYWQsIHdoZW4gdGhlCiAgKiB1bmRlcmx5aW5nIGRyaXZlciB1c2VzIGRtYS4KICAqCiAgKiBJZiB0aGUgdHJhbnNtaXQgYnVmZmVyIGlzIG51bGwsIHplcm9lcyB3aWxsIGJlIHNoaWZ0ZWQgb3V0Ci0gKiB3aGlsZSBmaWxsaW5nIHJ4X2J1Zi4gIElmIHRoZSByZWNlaXZlIGJ1ZmZlciBpcyBudWxsLCB0aGUgZGF0YQorICogd2hpbGUgZmlsbGluZyBAcnhfYnVmLiAgSWYgdGhlIHJlY2VpdmUgYnVmZmVyIGlzIG51bGwsIHRoZSBkYXRhCiAgKiBzaGlmdGVkIGluIHdpbGwgYmUgZGlzY2FyZGVkLiAgT25seSAibGVuIiBieXRlcyBzaGlmdCBvdXQgKG9yIGluKS4KICAqIEl0J3MgYW4gZXJyb3IgdG8gdHJ5IHRvIHNoaWZ0IG91dCBhIHBhcnRpYWwgd29yZC4gIChGb3IgZXhhbXBsZSwgYnkKICAqIHNoaWZ0aW5nIG91dCB0aHJlZSBieXRlcyB3aXRoIHdvcmQgc2l6ZSBvZiBzaXh0ZWVuIG9yIHR3ZW50eSBiaXRzOwpAQCAtMzA5LDcgKzMyMyw3IEBACiAgKiBJbi1tZW1vcnkgZGF0YSB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBuYXRpdmUgQ1BVIGJ5dGUgb3JkZXIsIHRyYW5zbGF0ZWQKICAqIGZyb20gdGhlIHdpcmUgYnl0ZSBvcmRlciAoYmlnLWVuZGlhbiBleGNlcHQgd2l0aCBTUElfTFNCX0ZJUlNUKS4gIFNvCiAgKiBmb3IgZXhhbXBsZSB3aGVuIGJpdHNfcGVyX3dvcmQgaXMgc2l4dGVlbiwgYnVmZmVycyBhcmUgMk4gYnl0ZXMgbG9uZwotICogYW5kIGhvbGQgTiBzaXh0ZWVuIGJpdCB3b3JkcyBpbiBDUFUgYnl0ZSBvcmRlci4KKyAqIChAbGVuID0gMk4pIGFuZCBob2xkIE4gc2l4dGVlbiBiaXQgd29yZHMgaW4gQ1BVIGJ5dGUgb3JkZXIuCiAgKgogICogV2hlbiB0aGUgd29yZCBzaXplIG9mIHRoZSBTUEkgdHJhbnNmZXIgaXMgbm90IGEgcG93ZXItb2YtdHdvIG11bHRpcGxlCiAgKiBvZiBlaWdodCBiaXRzLCB0aG9zZSBpbi1tZW1vcnkgd29yZHMgaW5jbHVkZSBleHRyYSBiaXRzLiAgSW4tbWVtb3J5CkBAIC0zMTgsNyArMzMyLDcgQEAKICAqCiAgKiBBbGwgU1BJIHRyYW5zZmVycyBzdGFydCB3aXRoIHRoZSByZWxldmFudCBjaGlwc2VsZWN0IGFjdGl2ZS4gIE5vcm1hbGx5CiAgKiBpdCBzdGF5cyBzZWxlY3RlZCB1bnRpbCBhZnRlciB0aGUgbGFzdCB0cmFuc2ZlciBpbiBhIG1lc3NhZ2UuICBEcml2ZXJzCi0gKiBjYW4gYWZmZWN0IHRoZSBjaGlwc2VsZWN0IHNpZ25hbCB1c2luZyBjc19jaGFuZ2U6CisgKiBjYW4gYWZmZWN0IHRoZSBjaGlwc2VsZWN0IHNpZ25hbCB1c2luZyBjc19jaGFuZ2UuCiAgKgogICogKGkpIElmIHRoZSB0cmFuc2ZlciBpc24ndCB0aGUgbGFzdCBvbmUgaW4gdGhlIG1lc3NhZ2UsIHRoaXMgZmxhZyBpcwogICogdXNlZCB0byBtYWtlIHRoZSBjaGlwc2VsZWN0IGJyaWVmbHkgZ28gaW5hY3RpdmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUKQEAgLTM3Miw3ICszODYsNyBAQAogICogQHF1ZXVlOiBmb3IgdXNlIGJ5IHdoaWNoZXZlciBkcml2ZXIgY3VycmVudGx5IG93bnMgdGhlIG1lc3NhZ2UKICAqIEBzdGF0ZTogZm9yIHVzZSBieSB3aGljaGV2ZXIgZHJpdmVyIGN1cnJlbnRseSBvd25zIHRoZSBtZXNzYWdlCiAgKgotICogQW4gc3BpX21lc3NhZ2UgaXMgdXNlZCB0byBleGVjdXRlIGFuIGF0b21pYyBzZXF1ZW5jZSBvZiBkYXRhIHRyYW5zZmVycywKKyAqIEEgQHNwaV9tZXNzYWdlIGlzIHVzZWQgdG8gZXhlY3V0ZSBhbiBhdG9taWMgc2VxdWVuY2Ugb2YgZGF0YSB0cmFuc2ZlcnMsCiAgKiBlYWNoIHJlcHJlc2VudGVkIGJ5IGEgc3RydWN0IHNwaV90cmFuc2Zlci4gIFRoZSBzZXF1ZW5jZSBpcyAiYXRvbWljIgogICogaW4gdGhlIHNlbnNlIHRoYXQgbm8gb3RoZXIgc3BpX21lc3NhZ2UgbWF5IHVzZSB0aGF0IFNQSSBidXMgdW50aWwgdGhhdAogICogc2VxdWVuY2UgY29tcGxldGVzLiAgT24gc29tZSBzeXN0ZW1zLCBtYW55IHN1Y2ggc2VxdWVuY2VzIGNhbiBleGVjdXRlIGFzCkBAIC00NjQsOCArNDc4LDkgQEAKIH0KIAogLyoqCi0gKiBzcGlfc2V0dXAgLS0gc2V0dXAgU1BJIG1vZGUgYW5kIGNsb2NrIHJhdGUKKyAqIHNwaV9zZXR1cCAtIHNldHVwIFNQSSBtb2RlIGFuZCBjbG9jayByYXRlCiAgKiBAc3BpOiB0aGUgZGV2aWNlIHdob3NlIHNldHRpbmdzIGFyZSBiZWluZyBtb2RpZmllZAorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogU1BJIHByb3RvY29sIGRyaXZlcnMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoZSB0cmFuc2ZlciBtb2RlIGlmIHRoZQogICogZGV2aWNlIGRvZXNuJ3Qgd29yayB3aXRoIHRoZSBtb2RlIDAgZGVmYXVsdC4gIFRoZXkgbWF5IGxpa2V3aXNlIG5lZWQKQEAgLTQ3NCw3ICs0ODksNyBAQAogICogVGhlIGNoYW5nZXMgdGFrZSBlZmZlY3QgdGhlIG5leHQgdGltZSB0aGUgZGV2aWNlIGlzIHNlbGVjdGVkIGFuZCBkYXRhCiAgKiBpcyB0cmFuc2ZlcnJlZCB0byBvciBmcm9tIGl0LgogICoKLSAqIE5vdGUgdGhhdCB0aGlzIGNhbGwgd2lsIGZhaWwgaWYgdGhlIHByb3RvY29sIGRyaXZlciBzcGVjaWZpZXMgYW4gb3B0aW9uCisgKiBOb3RlIHRoYXQgdGhpcyBjYWxsIHdpbGwgZmFpbCBpZiB0aGUgcHJvdG9jb2wgZHJpdmVyIHNwZWNpZmllcyBhbiBvcHRpb24KICAqIHRoYXQgdGhlIHVuZGVybHlpbmcgY29udHJvbGxlciBvciBpdHMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQuICBGb3IKICAqIGV4YW1wbGUsIG5vdCBhbGwgaGFyZHdhcmUgc3VwcG9ydHMgd2lyZSB0cmFuc2ZlcnMgdXNpbmcgbmluZSBiaXQgd29yZHMsCiAgKiBMU0ItZmlyc3Qgd2lyZSBlbmNvZGluZywgb3IgYWN0aXZlLWhpZ2ggY2hpcHNlbGVjdHMuCkBAIC00ODcsOSArNTAyLDEwIEBACiAKIAogLyoqCi0gKiBzcGlfYXN5bmMgLS0gYXN5bmNocm9ub3VzIFNQSSB0cmFuc2ZlcgorICogc3BpX2FzeW5jIC0gYXN5bmNocm9ub3VzIFNQSSB0cmFuc2ZlcgogICogQHNwaTogZGV2aWNlIHdpdGggd2hpY2ggZGF0YSB3aWxsIGJlIGV4Y2hhbmdlZAogICogQG1lc3NhZ2U6IGRlc2NyaWJlcyB0aGUgZGF0YSB0cmFuc2ZlcnMsIGluY2x1ZGluZyBjb21wbGV0aW9uIGNhbGxiYWNrCisgKiBDb250ZXh0OiBhbnkgKGlycXMgbWF5IGJlIGJsb2NrZWQsIGV0YykKICAqCiAgKiBUaGlzIGNhbGwgbWF5IGJlIHVzZWQgaW5faXJxIGFuZCBvdGhlciBjb250ZXh0cyB3aGljaCBjYW4ndCBzbGVlcCwKICAqIGFzIHdlbGwgYXMgZnJvbSB0YXNrIGNvbnRleHRzIHdoaWNoIGNhbiBzbGVlcC4KQEAgLTUzNSw2ICs1NTEsNyBAQAogICogQHNwaTogZGV2aWNlIHRvIHdoaWNoIGRhdGEgd2lsbCBiZSB3cml0dGVuCiAgKiBAYnVmOiBkYXRhIGJ1ZmZlcgogICogQGxlbjogZGF0YSBidWZmZXIgc2l6ZQorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogVGhpcyB3cml0ZXMgdGhlIGJ1ZmZlciBhbmQgcmV0dXJucyB6ZXJvIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqIENhbGxhYmxlIG9ubHkgZnJvbSBjb250ZXh0cyB0aGF0IGNhbiBzbGVlcC4KQEAgLTU1OCw4ICs1NzUsOSBAQAogICogQHNwaTogZGV2aWNlIGZyb20gd2hpY2ggZGF0YSB3aWxsIGJlIHJlYWQKICAqIEBidWY6IGRhdGEgYnVmZmVyCiAgKiBAbGVuOiBkYXRhIGJ1ZmZlciBzaXplCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCi0gKiBUaGlzIHdyaXRlcyB0aGUgYnVmZmVyIGFuZCByZXR1cm5zIHplcm8gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICogVGhpcyByZWFkcyB0aGUgYnVmZmVyIGFuZCByZXR1cm5zIHplcm8gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICogQ2FsbGFibGUgb25seSBmcm9tIGNvbnRleHRzIHRoYXQgY2FuIHNsZWVwLgogICovCiBzdGF0aWMgaW5saW5lIGludApAQCAtNTg1LDYgKzYwMyw3IEBACiAgKiBzcGlfdzhyOCAtIFNQSSBzeW5jaHJvbm91cyA4IGJpdCB3cml0ZSBmb2xsb3dlZCBieSA4IGJpdCByZWFkCiAgKiBAc3BpOiBkZXZpY2Ugd2l0aCB3aGljaCBkYXRhIHdpbGwgYmUgZXhjaGFuZ2VkCiAgKiBAY21kOiBjb21tYW5kIHRvIGJlIHdyaXR0ZW4gYmVmb3JlIGRhdGEgaXMgcmVhZCBiYWNrCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCiAgKiBUaGlzIHJldHVybnMgdGhlICh1bnNpZ25lZCkgZWlnaHQgYml0IG51bWJlciByZXR1cm5lZCBieSB0aGUKICAqIGRldmljZSwgb3IgZWxzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuICBDYWxsYWJsZSBvbmx5IGZyb20KQEAgLTYwNSw2ICs2MjQsNyBAQAogICogc3BpX3c4cjE2IC0gU1BJIHN5bmNocm9ub3VzIDggYml0IHdyaXRlIGZvbGxvd2VkIGJ5IDE2IGJpdCByZWFkCiAgKiBAc3BpOiBkZXZpY2Ugd2l0aCB3aGljaCBkYXRhIHdpbGwgYmUgZXhjaGFuZ2VkCiAgKiBAY21kOiBjb21tYW5kIHRvIGJlIHdyaXR0ZW4gYmVmb3JlIGRhdGEgaXMgcmVhZCBiYWNrCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCiAgKiBUaGlzIHJldHVybnMgdGhlICh1bnNpZ25lZCkgc2l4dGVlbiBiaXQgbnVtYmVyIHJldHVybmVkIGJ5IHRoZQogICogZGV2aWNlLCBvciBlbHNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4gIENhbGxhYmxlIG9ubHkgZnJvbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvc3BpZGV2LmggYi9pbmNsdWRlL2xpbnV4L3NwaS9zcGlkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDcwMGJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpZGV2LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L3NwaS9zcGlkZXYuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTV0FQUAorICoJQW5kcmVhIFBhdGVybmlhbmkgPGEucGF0ZXJuaWFuaUBzd2FwcC1lbmcuaXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgICovCisKKyNpZm5kZWYgU1BJREVWX0gKKyNkZWZpbmUgU1BJREVWX0gKKworCisvKiBVc2VyIHNwYWNlIHZlcnNpb25zIG9mIGtlcm5lbCBzeW1ib2xzIGZvciBTUEkgY2xvY2tpbmcgbW9kZXMsCisgKiBtYXRjaGluZyA8bGludXgvc3BpL3NwaS5oPgorICovCisKKyNkZWZpbmUgU1BJX0NQSEEJCTB4MDEKKyNkZWZpbmUgU1BJX0NQT0wJCTB4MDIKKworI2RlZmluZSBTUElfTU9ERV8wCQkoMHwwKQorI2RlZmluZSBTUElfTU9ERV8xCQkoMHxTUElfQ1BIQSkKKyNkZWZpbmUgU1BJX01PREVfMgkJKFNQSV9DUE9MfDApCisjZGVmaW5lIFNQSV9NT0RFXzMJCShTUElfQ1BPTHxTUElfQ1BIQSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIElPQ1RMIGNvbW1hbmRzICovCisKKyNkZWZpbmUgU1BJX0lPQ19NQUdJQwkJCSdrJworCisvKioKKyAqIHN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyIC0gZGVzY3JpYmVzIGEgc2luZ2xlIFNQSSB0cmFuc2ZlcgorICogQHR4X2J1ZjogSG9sZHMgcG9pbnRlciB0byB1c2Vyc3BhY2UgYnVmZmVyIHdpdGggdHJhbnNtaXQgZGF0YSwgb3IgbnVsbC4KKyAqCUlmIG5vIGRhdGEgaXMgcHJvdmlkZWQsIHplcm9lcyBhcmUgc2hpZnRlZCBvdXQuCisgKiBAcnhfYnVmOiBIb2xkcyBwb2ludGVyIHRvIHVzZXJzcGFjZSBidWZmZXIgZm9yIHJlY2VpdmUgZGF0YSwgb3IgbnVsbC4KKyAqIEBsZW46IExlbmd0aCBvZiB0eCBhbmQgcnggYnVmZmVycywgaW4gYnl0ZXMuCisgKiBAc3BlZWRfaHo6IFRlbXBvcmFyeSBvdmVycmlkZSBvZiB0aGUgZGV2aWNlJ3MgYml0cmF0ZS4KKyAqIEBiaXRzX3Blcl93b3JkOiBUZW1wb3Jhcnkgb3ZlcnJpZGUgb2YgdGhlIGRldmljZSdzIHdvcmRzaXplLgorICogQGRlbGF5X3VzZWNzOiBJZiBub256ZXJvLCBob3cgbG9uZyB0byBkZWxheSBhZnRlciB0aGUgbGFzdCBiaXQgdHJhbnNmZXIKKyAqCWJlZm9yZSBvcHRpb25hbGx5IGRlc2VsZWN0aW5nIHRoZSBkZXZpY2UgYmVmb3JlIHRoZSBuZXh0IHRyYW5zZmVyLgorICogQGNzX2NoYW5nZTogVHJ1ZSB0byBkZXNlbGVjdCBkZXZpY2UgYmVmb3JlIHN0YXJ0aW5nIHRoZSBuZXh0IHRyYW5zZmVyLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIG1hcHBlZCBkaXJlY3RseSB0byB0aGUga2VybmVsIHNwaV90cmFuc2ZlciBzdHJ1Y3R1cmU7CisgKiB0aGUgZmllbGRzIGhhdmUgdGhlIHNhbWUgbWVhbmluZ3MsIGV4Y2VwdCBvZiBjb3Vyc2UgdGhhdCB0aGUgcG9pbnRlcnMKKyAqIGFyZSBpbiBhIGRpZmZlcmVudCBhZGRyZXNzIHNwYWNlIChhbmQgbWF5IGJlIG9mIGRpZmZlcmVudCBzaXplcyBpbiBzb21lCisgKiBjYXNlcywgc3VjaCBhcyAzMi1iaXQgaTM4NiB1c2Vyc3BhY2Ugb3ZlciBhIDY0LWJpdCB4ODZfNjQga2VybmVsKS4KKyAqIFplcm8taW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlLCBpbmNsdWRpbmcgY3VycmVudGx5IHVudXNlZCBmaWVsZHMsIHRvCisgKiBhY2NvbW9kYXRlIHBvdGVudGlhbCBmdXR1cmUgdXBkYXRlcy4KKyAqCisgKiBTUElfSU9DX01FU1NBR0UgZ2l2ZXMgdXNlcnNwYWNlIHRoZSBlcXVpdmFsZW50IG9mIGtlcm5lbCBzcGlfc3luYygpLgorICogUGFzcyBpdCBhbiBhcnJheSBvZiByZWxhdGVkIHRyYW5zZmVycywgdGhleSdsbCBleGVjdXRlIHRvZ2V0aGVyLgorICogRWFjaCB0cmFuc2ZlciBtYXkgYmUgaGFsZiBkdXBsZXggKGVpdGhlciBkaXJlY3Rpb24pIG9yIGZ1bGwgZHVwbGV4LgorICoKKyAqCXN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyIG1lc2dbNF07CisgKgkuLi4KKyAqCXN0YXR1cyA9IGlvY3RsKGZkLCBTUElfSU9DX01FU1NBR0UoNCksIG1lc2cpOworICoKKyAqIFNvIGZvciBleGFtcGxlIG9uZSB0cmFuc2ZlciBtaWdodCBzZW5kIGEgbmluZSBiaXQgY29tbWFuZCAocmlnaHQgYWxpZ25lZAorICogaW4gYSAxNi1iaXQgd29yZCksIHRoZSBuZXh0IGNvdWxkIHJlYWQgYSBibG9jayBvZiA4LWJpdCBkYXRhIGJlZm9yZQorICogdGVybWluYXRpbmcgdGhhdCBjb21tYW5kIGJ5IHRlbXBvcmFyaWx5IGRlc2VsZWN0aW5nIHRoZSBjaGlwOyB0aGUgbmV4dAorICogY291bGQgc2VuZCBhIGRpZmZlcmVudCBuaW5lIGJpdCBjb21tYW5kIChyZS1zZWxlY3RpbmcgdGhlIGNoaXApLCBhbmQgdGhlCisgKiBsYXN0IHRyYW5zZmVyIG1pZ2h0IHdyaXRlIHNvbWUgcmVnaXN0ZXIgdmFsdWVzLgorICovCitzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlciB7CisJX191NjQJCXR4X2J1ZjsKKwlfX3U2NAkJcnhfYnVmOworCisJX191MzIJCWxlbjsKKwlfX3UzMgkJc3BlZWRfaHo7CisKKwlfX3UxNgkJZGVsYXlfdXNlY3M7CisJX191OAkJYml0c19wZXJfd29yZDsKKwlfX3U4CQljc19jaGFuZ2U7CisJX191MzIJCXBhZDsKKworCS8qIElmIHRoZSBjb250ZW50cyBvZiAnc3RydWN0IHNwaV9pb2NfdHJhbnNmZXInIGV2ZXIgY2hhbmdlCisJICogaW5jb21wYXRpYmx5LCB0aGVuIHRoZSBpb2N0bCBudW1iZXIgKGN1cnJlbnRseSAwKSBtdXN0IGNoYW5nZTsKKwkgKiBpb2N0bHMgd2l0aCBjb25zdGFudCBzaXplIGZpZWxkcyBnZXQgYSBiaXQgbW9yZSBpbiB0aGUgd2F5IG9mCisJICogZXJyb3IgY2hlY2tpbmcgdGhhbiBvbmVzIChsaWtlIHRoaXMpIHdoZXJlIHRoYXQgZmllbGQgdmFyaWVzLgorCSAqCisJICogTk9URTogc3RydWN0IGxheW91dCBpcyB0aGUgc2FtZSBpbiA2NGJpdCBhbmQgMzJiaXQgdXNlcnNwYWNlLgorCSAqLworfTsKKworLyogbm90IGFsbCBwbGF0Zm9ybXMgdXNlIDxhc20tZ2VuZXJpYy9pb2N0bC5oPiBvciBfSU9DX1RZUEVDSEVDSygpIC4uLiAqLworI2RlZmluZSBTUElfTVNHU0laRShOKSBcCisJKCgoKE4pKihzaXplb2YgKHN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyKSkpIDwgKDEgPDwgX0lPQ19TSVpFQklUUykpIFwKKwkJPyAoKE4pKihzaXplb2YgKHN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyKSkpIDogMCkKKyNkZWZpbmUgU1BJX0lPQ19NRVNTQUdFKE4pIF9JT1coU1BJX0lPQ19NQUdJQywgMCwgY2hhcltTUElfTVNHU0laRShOKV0pCisKKworLyogUmVhZCAvIFdyaXRlIG9mIFNQSSBtb2RlIChTUElfTU9ERV8wLi5TUElfTU9ERV8zKSAqLworI2RlZmluZSBTUElfSU9DX1JEX01PREUJCQlfSU9SKFNQSV9JT0NfTUFHSUMsIDEsIF9fdTgpCisjZGVmaW5lIFNQSV9JT0NfV1JfTU9ERQkJCV9JT1coU1BJX0lPQ19NQUdJQywgMSwgX191OCkKKworLyogUmVhZCAvIFdyaXRlIFNQSSBiaXQganVzdGlmaWNhdGlvbiAqLworI2RlZmluZSBTUElfSU9DX1JEX0xTQl9GSVJTVAkJX0lPUihTUElfSU9DX01BR0lDLCAyLCBfX3U4KQorI2RlZmluZSBTUElfSU9DX1dSX0xTQl9GSVJTVAkJX0lPVyhTUElfSU9DX01BR0lDLCAyLCBfX3U4KQorCisvKiBSZWFkIC8gV3JpdGUgU1BJIGRldmljZSB3b3JkIGxlbmd0aCAoMS4uTikgKi8KKyNkZWZpbmUgU1BJX0lPQ19SRF9CSVRTX1BFUl9XT1JECV9JT1IoU1BJX0lPQ19NQUdJQywgMywgX191OCkKKyNkZWZpbmUgU1BJX0lPQ19XUl9CSVRTX1BFUl9XT1JECV9JT1coU1BJX0lPQ19NQUdJQywgMywgX191OCkKKworLyogUmVhZCAvIFdyaXRlIFNQSSBkZXZpY2UgZGVmYXVsdCBtYXggc3BlZWQgaHogKi8KKyNkZWZpbmUgU1BJX0lPQ19SRF9NQVhfU1BFRURfSFoJCV9JT1IoU1BJX0lPQ19NQUdJQywgNCwgX191MzIpCisjZGVmaW5lIFNQSV9JT0NfV1JfTUFYX1NQRUVEX0haCQlfSU9XKFNQSV9JT0NfTUFHSUMsIDQsIF9fdTMyKQorCisKKworI2VuZGlmIC8qIFNQSURFVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3R5cGVzLmgKaW5kZXggZGM1ZmI2OS4uMjEwNTQ5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9ja190eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdHlwZXMuaApAQCAtODUsNiArODUsMTIgQEAKIAkJCQlSV19ERVBfTUFQX0lOSVQobG9ja25hbWUpIH0KICNlbmRpZgogCisvKgorICogU1BJTl9MT0NLX1VOTE9DS0VEIGFuZCBSV19MT0NLX1VOTE9DS0VEIGRlZmVhdCBsb2NrZGVwIHN0YXRlIHRyYWNraW5nIGFuZAorICogYXJlIGhlbmNlIGRlcHJlY2F0ZWQuCisgKiBQbGVhc2UgdXNlIERFRklORV9TUElOTE9DSygpL0RFRklORV9SV0xPQ0soKSBvcgorICogX19TUElOX0xPQ0tfVU5MT0NLRUQoKS9fX1JXX0xPQ0tfVU5MT0NLRUQoKSBhcyBhcHByb3ByaWF0ZS4KKyAqLwogI2RlZmluZSBTUElOX0xPQ0tfVU5MT0NLRUQJX19TUElOX0xPQ0tfVU5MT0NLRUQob2xkX3N0eWxlX3NwaW5faW5pdCkKICNkZWZpbmUgUldfTE9DS19VTkxPQ0tFRAlfX1JXX0xPQ0tfVU5MT0NLRUQob2xkX3N0eWxlX3J3X2luaXQpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RhY2t0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9zdGFja3RyYWNlLmgKaW5kZXggNTBlMmIwMS4uMWQyYjA4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdGFja3RyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdGFja3RyYWNlLmgKQEAgLTYsMTUgKzYsMTMgQEAKIAl1bnNpZ25lZCBpbnQgbnJfZW50cmllcywgbWF4X2VudHJpZXM7CiAJdW5zaWduZWQgbG9uZyAqZW50cmllczsKIAlpbnQgc2tpcDsJLyogaW5wdXQgYXJndW1lbnQ6IEhvdyBtYW55IGVudHJpZXMgdG8gc2tpcCAqLwotCWludCBhbGxfY29udGV4dHM7IC8qIGlucHV0IGFyZ3VtZW50OiBpZiB0cnVlIGRvIHRoYW4gb25lIHN0YWNrICovCiB9OwogCi1leHRlcm4gdm9pZCBzYXZlX3N0YWNrX3RyYWNlKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UsCi0JCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CitleHRlcm4gdm9pZCBzYXZlX3N0YWNrX3RyYWNlKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpOwogCiBleHRlcm4gdm9pZCBwcmludF9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlLCBpbnQgc3BhY2VzKTsKICNlbHNlCi0jIGRlZmluZSBzYXZlX3N0YWNrX3RyYWNlKHRyYWNlLCB0YXNrKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHNhdmVfc3RhY2tfdHJhY2UodHJhY2UpCQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgcHJpbnRfc3RhY2tfdHJhY2UodHJhY2UpCQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RhdC5oIGIvaW5jbHVkZS9saW51eC9zdGF0LmgKaW5kZXggNjc5ZWYwZC4uNjExYzM5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdGF0LmgKQEAgLTUzLDYgKzUzLDkgQEAKICNkZWZpbmUgU19JV1VHTwkJKFNfSVdVU1J8U19JV0dSUHxTX0lXT1RIKQogI2RlZmluZSBTX0lYVUdPCQkoU19JWFVTUnxTX0lYR1JQfFNfSVhPVEgpCiAKKyNkZWZpbmUgVVRJTUVfTk9XCSgoMWwgPDwgMzApIC0gMWwpCisjZGVmaW5lIFVUSU1FX09NSVQJKCgxbCA8PCAzMCkgLSAybCkKKwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9ycGNfcGlwZV9mcy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvcnBjX3BpcGVfZnMuaAppbmRleCA0YTY4MTI1Li5hZDI5Mzc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9ycGNfcGlwZV9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3JwY19waXBlX2ZzLmgKQEAgLTQ3LDYgKzQ3LDggQEAKIGV4dGVybiBpbnQgcnBjX3VubGluayhzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqcnBjX2dldF9tb3VudCh2b2lkKTsKIGV4dGVybiB2b2lkIHJwY19wdXRfbW91bnQodm9pZCk7CitleHRlcm4gaW50IHJlZ2lzdGVyX3JwY19waXBlZnModm9pZCk7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3JwY19waXBlZnModm9pZCk7CiAKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCmluZGV4IDM1ZmE0ZDUuLjRhN2FlOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCkBAIC0zOTYsNCArMzk2LDIzIEBACiAKICNkZWZpbmUJUlBDX01BWF9BRERSQlVGTEVOCSg2M1UpCiAKKy8qCisgKiBXaGVuIHdlIHdhbnQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSByZXNlcnZlZCBzcGFjZSBpbiB0aGUgcmVzcG9uc2UKKyAqIGJ1ZmZlciwgd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgc2l6ZSBvZiBhbnkgY2hlY2tzdW0gZGF0YSB0aGF0CisgKiBtYXkgYmUgYXQgdGhlIGVuZCBvZiB0aGUgcGFja2V0LiBUaGlzIGlzIGRpZmZpY3VsdCB0byBkZXRlcm1pbmUgZXhhY3RseQorICogZm9yIGFsbCBjYXNlcyB3aXRob3V0IGFjdHVhbGx5IGdlbmVyYXRpbmcgdGhlIGNoZWNrc3VtLCBzbyB3ZSBqdXN0IHVzZSBhCisgKiBzdGF0aWMgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc3ZjX3Jlc2VydmVfYXV0aChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBpbnQgc3BhY2UpCit7CisJaW50CQkJYWRkZWRfc3BhY2UgPSAwOworCisJc3dpdGNoKHJxc3RwLT5ycV9hdXRob3AtPmZsYXZvdXIpIHsKKwkJY2FzZSBSUENfQVVUSF9HU1M6CisJCQlhZGRlZF9zcGFjZSA9IFJQQ19NQVhfQVVUSF9TSVpFOworCX0KKwlyZXR1cm4gc3ZjX3Jlc2VydmUocnFzdHAsIHNwYWNlICsgYWRkZWRfc3BhY2UpOworfQorCiAjZW5kaWYgLyogU1VOUlBDX1NWQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgKaW5kZXggNzkwOTY4Ny4uZTIxZGQ5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaApAQCAtMzcsNyArMzcsOCBAQAogCiAJYXRvbWljX3QgICAgCSAgICAJc2tfcmVzZXJ2ZWQ7CS8qIHNwYWNlIG9uIG91dHEgdGhhdCBpcyByZXNlcnZlZCAqLwogCi0Jc3BpbmxvY2tfdAkJc2tfZGVmZXJfbG9jazsJLyogcHJvdGVjdHMgc2tfZGVmZXJyZWQgKi8KKwlzcGlubG9ja190CQlza19sb2NrOwkvKiBwcm90ZWN0cyBza19kZWZlcnJlZCBhbmQKKwkJCQkJCSAqIHNrX2luZm9fYXV0aHVuaXggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXNrX2RlZmVycmVkOwkvKiBkZWZlcnJlZCByZXF1ZXN0cyB0aGF0IG5lZWQgdG8KIAkJCQkJCSAqIGJlIHJldmlzdGVkICovCiAJc3RydWN0IG11dGV4CQlza19tdXRleDsJLyogdG8gc2VyaWFsaXplIHNlbmRpbmcgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCmluZGV4IGZhODljZTYuLjM0Zjc1OTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKQEAgLTI0NCw2ICsyNDQsOCBAQAogICovCiBzdHJ1Y3QgcnBjX3hwcnQgKgl4c19zZXR1cF91ZHAoc3RydWN0IHNvY2thZGRyICphZGRyLCBzaXplX3QgYWRkcmxlbiwgc3RydWN0IHJwY190aW1lb3V0ICp0byk7CiBzdHJ1Y3QgcnBjX3hwcnQgKgl4c19zZXR1cF90Y3Aoc3RydWN0IHNvY2thZGRyICphZGRyLCBzaXplX3QgYWRkcmxlbiwgc3RydWN0IHJwY190aW1lb3V0ICp0byk7CitpbnQJCQlpbml0X3NvY2tldF94cHJ0KHZvaWQpOwordm9pZAkJCWNsZWFudXBfc29ja2V0X3hwcnQodm9pZCk7CiAKIC8qCiAgKiBSZXNlcnZlZCBiaXQgcG9zaXRpb25zIGluIHhwcnQtPnN0YXRlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaCBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCmluZGV4IDk2ODY4YmUuLjljN2NiNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfTElOVVhfU1dTVVNQX0gKICNkZWZpbmUgX0xJTlVYX1NXU1VTUF9ICiAKLSNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX0ZSVikgfHwgZGVmaW5lZChDT05GSUdfUFBDMzIpCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KSB8fCBkZWZpbmVkKENPTkZJR19GUlYpIHx8IGRlZmluZWQoQ09ORklHX1BQQzMyKSB8fCBkZWZpbmVkKENPTkZJR19QUEM2NCkKICNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgpAQCAtMzIsMTggKzMyLDUxIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcG1fcmVzdG9yZV9jb25zb2xlKHZvaWQpIHt9CiAjZW5kaWYKIAorLyoqCisgKiBzdHJ1Y3QgaGliZXJuYXRpb25fb3BzIC0gaGliZXJuYXRpb24gcGxhdGZvcm0gc3VwcG9ydAorICoKKyAqIFRoZSBtZXRob2RzIGluIHRoaXMgc3RydWN0dXJlIGFsbG93IGEgcGxhdGZvcm0gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKyAqIG1lY2hhbmlzbSBvZiBzaHV0dGluZyBkb3duIHRoZSBtYWNoaW5lIGR1cmluZyBhIGhpYmVybmF0aW9uIHRyYW5zaXRpb24uCisgKgorICogQWxsIHRocmVlIG1ldGhvZHMgbXVzdCBiZSBhc3NpZ25lZC4KKyAqCisgKiBAcHJlcGFyZTogcHJlcGFyZSBzeXN0ZW0gZm9yIGhpYmVybmF0aW9uCisgKiBAZW50ZXI6IHNodXQgZG93biBzeXN0ZW0gYWZ0ZXIgc3RhdGUgaGFzIGJlZW4gc2F2ZWQgdG8gZGlzaworICogQGZpbmlzaDogZmluaXNoL2NsZWFuIHVwIGFmdGVyIHN0YXRlIGhhcyBiZWVuIHJlbG9hZGVkCisgKi8KK3N0cnVjdCBoaWJlcm5hdGlvbl9vcHMgeworCWludCAoKnByZXBhcmUpKHZvaWQpOworCWludCAoKmVudGVyKSh2b2lkKTsKKwl2b2lkICgqZmluaXNoKSh2b2lkKTsKK307CisKICNpZiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfU09GVFdBUkVfU1VTUEVORCkKIC8qIGtlcm5lbC9wb3dlci9zbmFwc2hvdC5jICovCi1leHRlcm4gdm9pZCBfX2luaXQgcmVnaXN0ZXJfbm9zYXZlX3JlZ2lvbih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIF9fcmVnaXN0ZXJfbm9zYXZlX3JlZ2lvbih1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgZSwgaW50IGttKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ub3NhdmVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyBlKQoreworCV9fcmVnaXN0ZXJfbm9zYXZlX3JlZ2lvbihiLCBlLCAwKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ub3NhdmVfcmVnaW9uX2xhdGUodW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nIGUpCit7CisJX19yZWdpc3Rlcl9ub3NhdmVfcmVnaW9uKGIsIGUsIDEpOworfQogZXh0ZXJuIGludCBzd3N1c3BfcGFnZV9pc19mb3JiaWRkZW4oc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gdm9pZCBzd3N1c3Bfc2V0X3BhZ2VfZnJlZShzdHJ1Y3QgcGFnZSAqKTsKIGV4dGVybiB2b2lkIHN3c3VzcF91bnNldF9wYWdlX2ZyZWUoc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfc2FmZV9wYWdlKGdmcF90IGdmcF9tYXNrKTsKKworZXh0ZXJuIHZvaWQgaGliZXJuYXRpb25fc2V0X29wcyhzdHJ1Y3QgaGliZXJuYXRpb25fb3BzICpvcHMpOworZXh0ZXJuIGludCBoaWJlcm5hdGUodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX25vc2F2ZV9yZWdpb24odW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nIGUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfbm9zYXZlX3JlZ2lvbl9sYXRlKHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyBlKSB7fQogc3RhdGljIGlubGluZSBpbnQgc3dzdXNwX3BhZ2VfaXNfZm9yYmlkZGVuKHN0cnVjdCBwYWdlICpwKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc3dzdXNwX3NldF9wYWdlX2ZyZWUoc3RydWN0IHBhZ2UgKnApIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgc3dzdXNwX3Vuc2V0X3BhZ2VfZnJlZShzdHJ1Y3QgcGFnZSAqcCkge30KKworc3RhdGljIGlubGluZSB2b2lkIGhpYmVybmF0aW9uX3NldF9vcHMoc3RydWN0IGhpYmVybmF0aW9uX29wcyAqb3BzKSB7fQorc3RhdGljIGlubGluZSBpbnQgaGliZXJuYXRlKHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH0KICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfU09GVFdBUkVfU1VTUEVORCkgKi8KIAogdm9pZCBzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3ZnYS5oIGIvaW5jbHVkZS9saW51eC9zdmdhLmgKaW5kZXggZWFkYjk4MS4uMTNhZDBiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdmdhLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdmdhLmgKQEAgLTExMiw2ICsxMTIsOSBAQAogdm9pZCBzdmdhX3RpbGVmaWxsKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfdGlsZXJlY3QgKnJlY3QpOwogdm9pZCBzdmdhX3RpbGVibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfdGlsZWJsaXQgKmJsaXQpOwogdm9pZCBzdmdhX3RpbGVjdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl90aWxlY3Vyc29yICpjdXJzb3IpOworaW50IHN2Z2FfZ2V0X3RpbGVtYXgoc3RydWN0IGZiX2luZm8gKmluZm8pOwordm9pZCBzdmdhX2dldF9jYXBzKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfYmxpdF9jYXBzICpjYXBzLAorCQkgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcik7CiAKIGludCBzdmdhX2NvbXB1dGVfcGxsKGNvbnN0IHN0cnVjdCBzdmdhX3BsbCAqcGxsLCB1MzIgZl93YW50ZWQsIHUxNiAqbSwgdTE2ICpuLCB1MTYgKnIsIGludCBub2RlKTsKIGludCBzdmdhX2NoZWNrX3RpbWluZ3MoY29uc3Qgc3RydWN0IHN2Z2FfdGltaW5nX3JlZ3MgKnRtLCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgaW50IG5vZGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeW5jbGluay5oIGIvaW5jbHVkZS9saW51eC9zeW5jbGluay5oCmluZGV4IGM4YjA0MjYuLjU1NjJmYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3luY2xpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5bmNsaW5rLmgKQEAgLTI5MSw0ICsyOTEsMjggQEAKICNkZWZpbmUgTUdTTF9JT0NHR1BJTwkJX0lPUihNR1NMX01BR0lDX0lPQywxNyxzdHJ1Y3QgZ3Bpb19kZXNjKQogI2RlZmluZSBNR1NMX0lPQ1dBSVRHUElPCV9JT1dSKE1HU0xfTUFHSUNfSU9DLDE4LHN0cnVjdCBncGlvX2Rlc2MpCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBwcm92aWRlIDMyIGJpdCBpb2N0bCBjb21wYXRpYmlsaXR5IG9uIDY0IGJpdCBzeXN0ZW1zICovCisjaWZkZWYgQ09ORklHX0NPTVBBVAorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorc3RydWN0IE1HU0xfUEFSQU1TMzIgeworCWNvbXBhdF91bG9uZ190CW1vZGU7CisJdW5zaWduZWQgY2hhcglsb29wYmFjazsKKwl1bnNpZ25lZCBzaG9ydAlmbGFnczsKKwl1bnNpZ25lZCBjaGFyCWVuY29kaW5nOworCWNvbXBhdF91bG9uZ190CWNsb2NrX3NwZWVkOworCXVuc2lnbmVkIGNoYXIJYWRkcl9maWx0ZXI7CisJdW5zaWduZWQgc2hvcnQJY3JjX3R5cGU7CisJdW5zaWduZWQgY2hhcglwcmVhbWJsZV9sZW5ndGg7CisJdW5zaWduZWQgY2hhcglwcmVhbWJsZTsKKwljb21wYXRfdWxvbmdfdAlkYXRhX3JhdGU7CisJdW5zaWduZWQgY2hhcglkYXRhX2JpdHM7CisJdW5zaWduZWQgY2hhcglzdG9wX2JpdHM7CisJdW5zaWduZWQgY2hhcglwYXJpdHk7Cit9OworI2RlZmluZSBNR1NMX0lPQ1NQQVJBTVMzMiBfSU9XKE1HU0xfTUFHSUNfSU9DLDAsc3RydWN0IE1HU0xfUEFSQU1TMzIpCisjZGVmaW5lIE1HU0xfSU9DR1BBUkFNUzMyIF9JT1IoTUdTTF9NQUdJQ19JT0MsMSxzdHJ1Y3QgTUdTTF9QQVJBTVMzMikKKyNlbmRpZgorI2VuZGlmCisKICNlbmRpZiAvKiBfU1lOQ0xJTktfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCAxOTEyYzZjLi5iMDIwNzBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC01NzYsNiArNTc2LDggQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc3RhdDY0IF9fdXNlciAqc3RhdGJ1ZiwgaW50IGZsYWcpOwogYXNtbGlua2FnZSBsb25nIHN5c19yZWFkbGlua2F0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRoLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgIGludCBidWZzaXopOworYXNtbGlua2FnZSBsb25nIHN5c191dGltZW5zYXQoaW50IGRmZCwgY2hhciBfX3VzZXIgKmZpbGVuYW1lLAorCQkJCXN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnV0aW1lcywgaW50IGZsYWdzKTsKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2Z1dGltZXNhdCh1bnNpZ25lZCBpbnQgZGZkLCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsCiAJCQkJICAgICBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0KTsKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX25ld2ZzdGF0YXQodW5zaWduZWQgaW50IGRmZCwgY2hhciBfX3VzZXIgKiBmaWxlbmFtZSwKQEAgLTYwMiw2ICs2MDQsMTAgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0X3JvYnVzdF9saXN0KHN0cnVjdCByb2J1c3RfbGlzdF9oZWFkIF9fdXNlciAqaGVhZCwKIAkJCQkgICAgc2l6ZV90IGxlbik7CiBhc21saW5rYWdlIGxvbmcgc3lzX2dldGNwdSh1bnNpZ25lZCBfX3VzZXIgKmNwdSwgdW5zaWduZWQgX191c2VyICpub2RlLCBzdHJ1Y3QgZ2V0Y3B1X2NhY2hlIF9fdXNlciAqY2FjaGUpOworYXNtbGlua2FnZSBsb25nIHN5c19zaWduYWxmZChpbnQgdWZkLCBzaWdzZXRfdCBfX3VzZXIgKnVzZXJfbWFzaywgc2l6ZV90IHNpemVtYXNrKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdGltZXJmZChpbnQgdWZkLCBpbnQgY2xvY2tpZCwgaW50IGZsYWdzLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjIF9fdXNlciAqdXRtcik7Cithc21saW5rYWdlIGxvbmcgc3lzX2V2ZW50ZmQodW5zaWduZWQgaW50IGNvdW50KTsKIAogaW50IGtlcm5lbF9leGVjdmUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3QgZW52cFtdKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNkZXYuaCBiL2luY2x1ZGUvbGludXgvc3lzZGV2LmgKaW5kZXggMzg5Y2NmOC4uZTY5OWFiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2Rldi5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIF9TWVNERVZfSF8KIAogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oIGIvaW5jbHVkZS9saW51eC90YXNrX2lvX2FjY291bnRpbmdfb3BzLmgKaW5kZXggZGYyYTMxOS4uZmY0NmM2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90YXNrX2lvX2FjY291bnRpbmdfb3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC90YXNrX2lvX2FjY291bnRpbmdfb3BzLmgKQEAgLTQsMTcgKzQsMzcgQEAKICNpZm5kZWYgX19UQVNLX0lPX0FDQ09VTlRJTkdfT1BTX0lOQ0xVREVECiAjZGVmaW5lIF9fVEFTS19JT19BQ0NPVU5USU5HX09QU19JTkNMVURFRAogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKwogI2lmZGVmIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkcKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lvX2FjY291bnRfcmVhZChzaXplX3QgYnl0ZXMpCiB7CiAJY3VycmVudC0+aW9hYy5yZWFkX2J5dGVzICs9IGJ5dGVzOwogfQogCisvKgorICogV2UgYXBwcm94aW1hdGUgbnVtYmVyIG9mIGJsb2NrcywgYmVjYXVzZSB3ZSBhY2NvdW50IGJ5dGVzIG9ubHkuCisgKiBBICdibG9jaycgaXMgNTEyIGJ5dGVzCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0YXNrX2lvX2dldF9pbmJsb2NrKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gcC0+aW9hYy5yZWFkX2J5dGVzID4+IDk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lvX2FjY291bnRfd3JpdGUoc2l6ZV90IGJ5dGVzKQogewogCWN1cnJlbnQtPmlvYWMud3JpdGVfYnl0ZXMgKz0gYnl0ZXM7CiB9CiAKKy8qCisgKiBXZSBhcHByb3hpbWF0ZSBudW1iZXIgb2YgYmxvY2tzLCBiZWNhdXNlIHdlIGFjY291bnQgYnl0ZXMgb25seS4KKyAqIEEgJ2Jsb2NrJyBpcyA1MTIgYnl0ZXMKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRhc2tfaW9fZ2V0X291YmxvY2soY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiBwLT5pb2FjLndyaXRlX2J5dGVzID4+IDk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lvX2FjY291bnRfY2FuY2VsbGVkX3dyaXRlKHNpemVfdCBieXRlcykKIHsKIAljdXJyZW50LT5pb2FjLmNhbmNlbGxlZF93cml0ZV9ieXRlcyArPSBieXRlczsKQEAgLTMxLDEwICs1MSwyMCBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGFza19pb19nZXRfaW5ibG9jayhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lvX2FjY291bnRfd3JpdGUoc2l6ZV90IGJ5dGVzKQogewogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGFza19pb19nZXRfb3VibG9jayhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lvX2FjY291bnRfY2FuY2VsbGVkX3dyaXRlKHNpemVfdCBieXRlcykKIHsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGlmbS5oIGIvaW5jbHVkZS9saW51eC90aWZtLmgKaW5kZXggMmExOTY5OC4uNmIzYTMxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aWZtLmgKKysrIGIvaW5jbHVkZS9saW51eC90aWZtLmgKQEAgLTYzLDYgKzYzLDcgQEAKIAogI2RlZmluZSBUSUZNX0NUUkxfTEVEICAgICAgICAgICAgIDB4MDAwMDAwNDAKICNkZWZpbmUgVElGTV9DVFJMX0ZBU1RfQ0xLICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFRJRk1fQ1RSTF9QT1dFUl9NQVNLICAgICAgMHgwMDAwMDAwNwogCiAjZGVmaW5lIFRJRk1fU09DS19TVEFURV9PQ0NVUElFRCAgMHgwMDAwMDAwOAogI2RlZmluZSBUSUZNX1NPQ0tfU1RBVEVfUE9XRVJFRCAgIDB4MDAwMDAwODAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZS5oIGIvaW5jbHVkZS9saW51eC90aW1lLmgKaW5kZXggOGVhOGRlYS4uZGRhOWJlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogZXh0ZXJuIGludCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dik7CiBleHRlcm4gaW50IGRvX3N5c19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0diwgc3RydWN0IHRpbWV6b25lICp0eik7CiAjZGVmaW5lIGRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKHRzKSBrdGltZV9nZXRfdHModHMpCi1leHRlcm4gbG9uZyBkb191dGltZXMoaW50IGRmZCwgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBzdHJ1Y3QgdGltZXZhbCAqdGltZXMpOworZXh0ZXJuIGxvbmcgZG9fdXRpbWVzKGludCBkZmQsIGNoYXIgX191c2VyICpmaWxlbmFtZSwgc3RydWN0IHRpbWVzcGVjICp0aW1lcywgaW50IGZsYWdzKTsKIHN0cnVjdCBpdGltZXJ2YWw7CiBleHRlcm4gaW50IGRvX3NldGl0aW1lcihpbnQgd2hpY2gsIHN0cnVjdCBpdGltZXJ2YWwgKnZhbHVlLAogCQkJc3RydWN0IGl0aW1lcnZhbCAqb3ZhbHVlKTsKQEAgLTExOSw2ICsxMTksNyBAQAogCiBleHRlcm4gc3RydWN0IHRpbWVzcGVjIHRpbWVzcGVjX3RydW5jKHN0cnVjdCB0aW1lc3BlYyB0LCB1bnNpZ25lZCBncmFuKTsKIGV4dGVybiBpbnQgdGltZWtlZXBpbmdfaXNfY29udGludW91cyh2b2lkKTsKK2V4dGVybiB2b2lkIHVwZGF0ZV93YWxsX3RpbWUodm9pZCk7CiAKIC8qKgogICogdGltZXNwZWNfdG9fbnMgLSBDb252ZXJ0IHRpbWVzcGVjIHRvIG5hbm9zZWNvbmRzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKaW5kZXggNzE5MTEzYi4uYzY2MTcxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXIuaApAQCAtMzcsNiArMzcsNyBAQAogCQlUSU1FUl9JTklUSUFMSVpFUihfZnVuY3Rpb24sIF9leHBpcmVzLCBfZGF0YSkKIAogdm9pZCBmYXN0Y2FsbCBpbml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpOwordm9pZCBmYXN0Y2FsbCBpbml0X3RpbWVyX2RlZmVycmFibGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIsCiAJCQkJdm9pZCAoKmZ1bmN0aW9uKSh1bnNpZ25lZCBsb25nKSwKQEAgLTY4LDYgKzY5LDEyIEBACiBleHRlcm4gaW50IG1vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcyk7CiAKIC8qCisgKiBUaGUgamlmZmllcyB2YWx1ZSB3aGljaCBpcyBhZGRlZCB0byBub3csIHdoZW4gdGhlcmUgaXMgbm8gdGltZXIKKyAqIGluIHRoZSB0aW1lciB3aGVlbDoKKyAqLworI2RlZmluZSBORVhUX1RJTUVSX01BWF9ERUxUQQkoKDFVTCA8PCAzMCkgLSAxKQorCisvKgogICogUmV0dXJuIHdoZW4gdGhlIG5leHQgdGltZXItd2hlZWwgdGltZW91dCBvY2N1cnMgKGluIGFic29sdXRlIGppZmZpZXMpLAogICogbG9ja3MgdGhlIHRpbWVyIGJhc2U6CiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXJmZC5oIGIvaW5jbHVkZS9saW51eC90aW1lcmZkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyYjEwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXJmZC5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiAgaW5jbHVkZS9saW51eC90aW1lcmZkLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1RJTUVSRkRfSAorI2RlZmluZSBfTElOVVhfVElNRVJGRF9ICisKKworI2RlZmluZSBURkRfVElNRVJfQUJTVElNRSAoMSA8PCAwKQorCisKKworI2VuZGlmIC8qIF9MSU5VWF9USU1FUkZEX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHkuaCBiL2luY2x1ZGUvbGludXgvdHR5LmgKaW5kZXggZGVlNzJiOS4uYmI0NTc2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC0zMTMsNiArMzEzLDcgQEAKIGV4dGVybiB2b2lkIGRvX1NBSyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIF9fZG9fU0FLKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgZGlzYXNzb2NpYXRlX2N0dHkoaW50IHByaXYpOworZXh0ZXJuIHZvaWQgbm9fdHR5KHZvaWQpOwogZXh0ZXJuIHZvaWQgdHR5X2ZsaXBfYnVmZmVyX3B1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gc3BlZWRfdCB0dHlfZ2V0X2JhdWRfcmF0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiBzcGVlZF90IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MpOwpAQCAtMzMzLDcgKzMzNCw2IEBACiAKIGV4dGVybiBkZXZfdCB0dHlfZGV2bnVtKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgcHJvY19jbGVhcl90dHkoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKLWV4dGVybiB2b2lkIHByb2Nfc2V0X3R0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gc3RydWN0IHR0eV9zdHJ1Y3QgKmdldF9jdXJyZW50X3R0eSh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBtdXRleCB0dHlfbXV0ZXg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oCmluZGV4IDY1OTQ4N2UuLjg1Yzk1Y2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oCkBAIC01Miw2ICs1MiwxMSBAQAogICogCVRoaXMgcm91dGluZSBhbGxvd3MgdGhlIHR0eSBkcml2ZXIgdG8gaW1wbGVtZW50CiAgKglkZXZpY2Utc3BlY2lmaWMgaW9jdGwncy4gIElmIHRoZSBpb2N0bCBudW1iZXIgcGFzc2VkIGluIGNtZAogICogCWlzIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIGl0IHNob3VsZCByZXR1cm4gRU5PSU9DVExDTUQuCisgKgorICogbG9uZyAoKmNvbXBhdF9pb2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAorICogCSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisgKgorICogCWltcGxlbWVudCBpb2N0bCBwcm9jZXNzaW5nIGZvciAzMiBiaXQgcHJvY2VzcyBvbiA2NCBiaXQgc3lzdGVtCiAgKiAKICAqIHZvaWQgKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICogb2xkKTsKICAqCkBAIC0xMzIsNiArMTM3LDggQEAKIAlpbnQgICgqY2hhcnNfaW5fYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAlpbnQgICgqaW9jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKIAkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwlsb25nICgqY29tcGF0X2lvY3RsKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAl2b2lkICgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqIG9sZCk7CiAJdm9pZCAoKnRocm90dGxlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CiAJdm9pZCAoKnVudGhyb3R0bGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKQEAgLTE5Myw2ICsyMDAsOCBAQAogCWludCAgKCpjaGFyc19pbl9idWZmZXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCWludCAgKCppb2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCWxvbmcgKCpjb21wYXRfaW9jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCXZvaWQgKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICogb2xkKTsKIAl2b2lkICgqdGhyb3R0bGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKIAl2b2lkICgqdW50aHJvdHRsZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaCBiL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgKaW5kZXggZDc1OTMyZS4uNjIyNjUwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oCkBAIC01OSw2ICs1OSwxMSBAQAogICogCWxvdy1sZXZlbCBkcml2ZXIgY2FuICJncmFiIiBhbiBpb2N0bCByZXF1ZXN0IGJlZm9yZSB0aGUgbGluZQogICogCWRpc2NwbGluZSBoYXMgYSBjaGFuY2UgdG8gc2VlIGl0LgogICogCisgKiBsb25nCSgqY29tcGF0X2lvY3RsKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAorICogCQkgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKyAqCisgKiAgICAgIFByb2Nlc3MgaW9jdGwgY2FsbHMgZnJvbSAzMi1iaXQgcHJvY2VzcyBvbiA2NC1iaXQgc3lzdGVtCisgKgogICogdm9pZAkoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpOwogICoKICAqIAlUaGlzIGZ1bmN0aW9uIG5vdGlmaWVzIHRoZSBsaW5lIGRpc2NwbGluZSB0aGF0IGEgY2hhbmdlIGhhcwpAQCAtMTE4LDYgKzEyMyw4IEBACiAJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1Ziwgc2l6ZV90IG5yKTsJCiAJaW50CSgqaW9jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCWxvbmcJKCpjb21wYXRfaW9jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCXZvaWQJKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICogb2xkKTsKIAl1bnNpZ25lZCBpbnQgKCpwb2xsKShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgZmlsZSAqLAogCQkJICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCBjZmJkMmJiLi45NGJkMzhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTEyNiw3ICsxMjYsNyBAQAogICogRWFjaCBpbnRlcmZhY2UgbWF5IGhhdmUgYWx0ZXJuYXRlIHNldHRpbmdzLiAgVGhlIGluaXRpYWwgY29uZmlndXJhdGlvbgogICogb2YgYSBkZXZpY2Ugc2V0cyBhbHRzZXR0aW5nIDAsIGJ1dCB0aGUgZGV2aWNlIGRyaXZlciBjYW4gY2hhbmdlCiAgKiB0aGF0IHNldHRpbmcgdXNpbmcgdXNiX3NldF9pbnRlcmZhY2UoKS4gIEFsdGVybmF0ZSBzZXR0aW5ncyBhcmUgb2Z0ZW4KLSAqIHVzZWQgdG8gY29udHJvbCB0aGUgdGhlIHVzZSBvZiBwZXJpb2RpYyBlbmRwb2ludHMsIHN1Y2ggYXMgYnkgaGF2aW5nCisgKiB1c2VkIHRvIGNvbnRyb2wgdGhlIHVzZSBvZiBwZXJpb2RpYyBlbmRwb2ludHMsIHN1Y2ggYXMgYnkgaGF2aW5nCiAgKiBkaWZmZXJlbnQgZW5kcG9pbnRzIHVzZSBkaWZmZXJlbnQgYW1vdW50cyBvZiByZXNlcnZlZCBVU0IgYmFuZHdpZHRoLgogICogQWxsIHN0YW5kYXJkcy1jb25mb3JtYW50IFVTQiBkZXZpY2VzIHRoYXQgdXNlIGlzb2Nocm9ub3VzIGVuZHBvaW50cwogICogd2lsbCB1c2UgdGhlbSBpbiBub24tZGVmYXVsdCBzZXR0aW5ncy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXRzbmFtZS5oIGIvaW5jbHVkZS9saW51eC91dHNuYW1lLmgKaW5kZXggZTEwMjY3ZC4uZjhkM2IzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91dHNuYW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC91dHNuYW1lLmgKQEAgLTQ5LDkgKzQ5LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19VVFNfTlMKLWV4dGVybiBpbnQgdW5zaGFyZV91dHNuYW1lKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncywKLQkJCQlzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqKm5ld191dHMpOwotZXh0ZXJuIGludCBjb3B5X3V0c25hbWUoaW50IGZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gc3RydWN0IHV0c19uYW1lc3BhY2UgKmNvcHlfdXRzbmFtZShpbnQgZmxhZ3MsIHN0cnVjdCB1dHNfbmFtZXNwYWNlICpucyk7CiBleHRlcm4gdm9pZCBmcmVlX3V0c19ucyhzdHJ1Y3Qga3JlZiAqa3JlZik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdXRzX25zKHN0cnVjdCB1dHNfbmFtZXNwYWNlICpucykKQEAgLTU5LDIxICs1NywxMiBAQAogCWtyZWZfcHV0KCZucy0+a3JlZiwgZnJlZV91dHNfbnMpOwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHVuc2hhcmVfdXRzbmFtZSh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsCi0JCQlzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqKm5ld191dHMpCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1dHNfbmFtZXNwYWNlICpjb3B5X3V0c25hbWUoaW50IGZsYWdzLAorCQkJCQkJc3RydWN0IHV0c19uYW1lc3BhY2UgKm5zKQogewotCWlmICh1bnNoYXJlX2ZsYWdzICYgQ0xPTkVfTkVXVVRTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOworCXJldHVybiBuczsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY29weV91dHNuYW1lKGludCBmbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JaWYgKGZsYWdzICYgQ0xPTkVfTkVXVVRTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKLX0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdXRzX25zKHN0cnVjdCB1dHNfbmFtZXNwYWNlICpucykKIHsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IGEyNWMyYWYuLmU3NTYwMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtMjY3LDggKzI2Nyw2IEBACiAJX191MzIgICAgICAgICAgCQlzaXplaW1hZ2U7CiAJZW51bSB2NGwyX2NvbG9yc3BhY2UJY29sb3JzcGFjZTsKIAlfX3UzMgkJCXByaXY7CQkvKiBwcml2YXRlIGRhdGEsIGRlcGVuZHMgb24gcGl4ZWxmb3JtYXQgKi8KLQlfX3UzMiAJCQlsZWZ0OwkvKiBvbmx5IHZhbGlkIGlmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9QT1MgaXMgc2V0ICovCi0JX191MzIgCQkJdG9wOwkvKiBvbmx5IHZhbGlkIGlmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9QT1MgaXMgc2V0ICovCiB9OwogCiAvKiAgICAgIFBpeGVsIGZvcm1hdCAgICAgICAgIEZPVVJDQyAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoICBEZXNjcmlwdGlvbiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKaW5kZXggOTI0ZTUwMi4uNGI3ZWU4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmgKQEAgLTUzLDYgKzUzLDcgQEAKIAogZXh0ZXJuIGludCByZW1hcF92bWFsbG9jX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphZGRyLAogCQkJCQkJCXVuc2lnbmVkIGxvbmcgcGdvZmYpOwordm9pZCB2bWFsbG9jX3N5bmNfYWxsKHZvaWQpOwogIAogLyoKICAqCUxvd2xldmVsLUFQSXMgKG5vdCBmb3IgZHJpdmVyIHVzZSEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaAppbmRleCBhY2IxZjEwLi5kOTMyNWNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKQEAgLTIxMiw4ICsyMTIsNiBAQAogZXh0ZXJuIHZvaWQgX19kZWNfem9uZV9zdGF0ZShzdHJ1Y3Qgem9uZSAqLCBlbnVtIHpvbmVfc3RhdF9pdGVtKTsKIAogdm9pZCByZWZyZXNoX2NwdV92bV9zdGF0cyhpbnQpOwotdm9pZCByZWZyZXNoX3ZtX3N0YXRzKHZvaWQpOwotCiAjZWxzZSAvKiBDT05GSUdfU01QICovCiAKIC8qCkBAIC0yNjAsNyArMjU4LDYgQEAKICNkZWZpbmUgbW9kX3pvbmVfcGFnZV9zdGF0ZSBfX21vZF96b25lX3BhZ2Vfc3RhdGUKIAogc3RhdGljIGlubGluZSB2b2lkIHJlZnJlc2hfY3B1X3ZtX3N0YXRzKGludCBjcHUpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHJlZnJlc2hfdm1fc3RhdHModm9pZCkgeyB9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9WTVNUQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dF9rZXJuLmggYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAppbmRleCBlMGRiNjY5Li5kOTYxNjM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaApAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC92dC5oPgogI2luY2x1ZGUgPGxpbnV4L2tkLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlX3N0cnVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKQEAgLTgyLDcgKzgzLDcgQEAKIAogI2RlZmluZSBDT05fQlVGX1NJWkUgKENPTkZJR19CQVNFX1NNQUxMID8gMjU2IDogUEFHRV9TSVpFKQogZXh0ZXJuIGNoYXIgY29uX2J1ZltDT05fQlVGX1NJWkVdOwotZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgY29uX2J1Zl9zZW07CitleHRlcm4gc3RydWN0IG11dGV4IGNvbl9idWZfbXR4OwogZXh0ZXJuIGNoYXIgdnRfZG9udF9zd2l0Y2g7CiAKIHN0cnVjdCB2dF9zcGF3bl9jb25zb2xlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IGI4YWJmYzcuLmNlMDcxOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjQsMTUgKzI0LDEzIEBACiBzdHJ1Y3Qgd29ya19zdHJ1Y3QgewogCWF0b21pY19sb25nX3QgZGF0YTsKICNkZWZpbmUgV09SS19TVFJVQ1RfUEVORElORyAwCQkvKiBUIGlmIHdvcmsgaXRlbSBwZW5kaW5nIGV4ZWN1dGlvbiAqLwotI2RlZmluZSBXT1JLX1NUUlVDVF9OT0FVVE9SRUwgMQkJLyogRiBpZiB3b3JrIGl0ZW0gYXV0b21hdGljYWxseSByZWxlYXNlZCBvbiBleGVjICovCiAjZGVmaW5lIFdPUktfU1RSVUNUX0ZMQUdfTUFTSyAoM1VMKQogI2RlZmluZSBXT1JLX1NUUlVDVF9XUV9EQVRBX01BU0sgKH5XT1JLX1NUUlVDVF9GTEFHX01BU0spCiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKIAl3b3JrX2Z1bmNfdCBmdW5jOwogfTsKIAotI2RlZmluZSBXT1JLX0RBVEFfSU5JVChhdXRvcmVsZWFzZSkgXAotCUFUT01JQ19MT05HX0lOSVQoKGF1dG9yZWxlYXNlKSA8PCBXT1JLX1NUUlVDVF9OT0FVVE9SRUwpCisjZGVmaW5lIFdPUktfREFUQV9JTklUKCkJQVRPTUlDX0xPTkdfSU5JVCgwKQogCiBzdHJ1Y3QgZGVsYXllZF93b3JrIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKQEAgLTQ0LDE0ICs0Miw4IEBACiB9OwogCiAjZGVmaW5lIF9fV09SS19JTklUSUFMSVpFUihuLCBmKSB7CQkJCVwKLQkuZGF0YSA9IFdPUktfREFUQV9JTklUKDApLAkJCQlcCi0gICAgICAgIC5lbnRyeQk9IHsgJihuKS5lbnRyeSwgJihuKS5lbnRyeSB9LAkJCVwKLQkuZnVuYyA9IChmKSwJCQkJCQlcCi0JfQotCi0jZGVmaW5lIF9fV09SS19JTklUSUFMSVpFUl9OQVIobiwgZikgewkJCQlcCi0JLmRhdGEgPSBXT1JLX0RBVEFfSU5JVCgxKSwJCQkJXAotICAgICAgICAuZW50cnkJPSB7ICYobikuZW50cnksICYobikuZW50cnkgfSwJCQlcCisJLmRhdGEgPSBXT1JLX0RBVEFfSU5JVCgpLAkJCQlcCisJLmVudHJ5CT0geyAmKG4pLmVudHJ5LCAmKG4pLmVudHJ5IH0sCQkJXAogCS5mdW5jID0gKGYpLAkJCQkJCVwKIAl9CiAKQEAgLTYwLDIzICs1MiwxMiBAQAogCS50aW1lciA9IFRJTUVSX0lOSVRJQUxJWkVSKE5VTEwsIDAsIDApLAkJCVwKIAl9CiAKLSNkZWZpbmUgX19ERUxBWUVEX1dPUktfSU5JVElBTElaRVJfTkFSKG4sIGYpIHsJCQlcCi0JLndvcmsgPSBfX1dPUktfSU5JVElBTElaRVJfTkFSKChuKS53b3JrLCAoZikpLAkJXAotCS50aW1lciA9IFRJTUVSX0lOSVRJQUxJWkVSKE5VTEwsIDAsIDApLAkJCVwKLQl9Ci0KICNkZWZpbmUgREVDTEFSRV9XT1JLKG4sIGYpCQkJCQlcCiAJc3RydWN0IHdvcmtfc3RydWN0IG4gPSBfX1dPUktfSU5JVElBTElaRVIobiwgZikKIAotI2RlZmluZSBERUNMQVJFX1dPUktfTkFSKG4sIGYpCQkJCQlcCi0Jc3RydWN0IHdvcmtfc3RydWN0IG4gPSBfX1dPUktfSU5JVElBTElaRVJfTkFSKG4sIGYpCi0KICNkZWZpbmUgREVDTEFSRV9ERUxBWUVEX1dPUksobiwgZikJCQkJXAogCXN0cnVjdCBkZWxheWVkX3dvcmsgbiA9IF9fREVMQVlFRF9XT1JLX0lOSVRJQUxJWkVSKG4sIGYpCiAKLSNkZWZpbmUgREVDTEFSRV9ERUxBWUVEX1dPUktfTkFSKG4sIGYpCQkJXAotCXN0cnVjdCBkd29ya19zdHJ1Y3QgbiA9IF9fREVMQVlFRF9XT1JLX0lOSVRJQUxJWkVSX05BUihuLCBmKQotCiAvKgogICogaW5pdGlhbGl6ZSBhIHdvcmsgaXRlbSdzIGZ1bmN0aW9uIHBvaW50ZXIKICAqLwpAQCAtOTUsMTYgKzc2LDkgQEAKICAqIGFzc2lnbm1lbnQgb2YgdGhlIHdvcmsgZGF0YSBpbml0aWFsaXplciBhbGxvd3MgdGhlIGNvbXBpbGVyCiAgKiB0byBnZW5lcmF0ZSBiZXR0ZXIgY29kZS4KICAqLwotI2RlZmluZSBJTklUX1dPUksoX3dvcmssIF9mdW5jKQkJCQkJXAotCWRvIHsJCQkJCQkJXAotCQkoX3dvcmspLT5kYXRhID0gKGF0b21pY19sb25nX3QpIFdPUktfREFUQV9JTklUKDApOwlcCi0JCUlOSVRfTElTVF9IRUFEKCYoX3dvcmspLT5lbnRyeSk7CQlcCi0JCVBSRVBBUkVfV09SSygoX3dvcmspLCAoX2Z1bmMpKTsJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBJTklUX1dPUktfTkFSKF93b3JrLCBfZnVuYykJCQkJCVwKKyNkZWZpbmUgSU5JVF9XT1JLKF93b3JrLCBfZnVuYykJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQkoX3dvcmspLT5kYXRhID0gKGF0b21pY19sb25nX3QpIFdPUktfREFUQV9JTklUKDEpOwlcCisJCShfd29yayktPmRhdGEgPSAoYXRvbWljX2xvbmdfdCkgV09SS19EQVRBX0lOSVQoKTsJXAogCQlJTklUX0xJU1RfSEVBRCgmKF93b3JrKS0+ZW50cnkpOwkJCVwKIAkJUFJFUEFSRV9XT1JLKChfd29yayksIChfZnVuYykpOwkJCQlcCiAJfSB3aGlsZSAoMCkKQEAgLTExNSwxMCArODksMTAgQEAKIAkJaW5pdF90aW1lcigmKF93b3JrKS0+dGltZXIpOwkJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIElOSVRfREVMQVlFRF9XT1JLX05BUihfd29yaywgX2Z1bmMpCQkJXAorI2RlZmluZSBJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKF93b3JrLCBfZnVuYykJCQlcCiAJZG8gewkJCQkJCQlcCi0JCUlOSVRfV09SS19OQVIoJihfd29yayktPndvcmssIChfZnVuYykpOwkJXAotCQlpbml0X3RpbWVyKCYoX3dvcmspLT50aW1lcik7CQkJXAorCQlJTklUX1dPUksoJihfd29yayktPndvcmssIChfZnVuYykpOwkJXAorCQlpbml0X3RpbWVyX2RlZmVycmFibGUoJihfd29yayktPnRpbWVyKTsJCVwKIAl9IHdoaWxlICgwKQogCiAvKioKQEAgLTEzNywyNCArMTExLDEwIEBACiAJd29ya19wZW5kaW5nKCYodyktPndvcmspCiAKIC8qKgotICogd29ya19yZWxlYXNlIC0gUmVsZWFzZSBhIHdvcmsgaXRlbSB1bmRlciBleGVjdXRpb24KLSAqIEB3b3JrOiBUaGUgd29yayBpdGVtIHRvIHJlbGVhc2UKLSAqCi0gKiBUaGlzIGlzIHVzZWQgdG8gcmVsZWFzZSBhIHdvcmsgaXRlbSB0aGF0IGhhcyBiZWVuIGluaXRpYWxpc2VkIHdpdGggYXV0b21hdGljCi0gKiByZWxlYXNlIG1vZGUgZGlzYWJsZWQgKFdPUktfU1RSVUNUX05PQVVUT1JFTCBpcyBzZXQpLiAgVGhpcyBnaXZlcyB0aGUgd29yawotICogZnVuY3Rpb24gdGhlIG9wcG9ydHVuaXR5IHRvIGdyYWIgYXV4aWxpYXJ5IGRhdGEgZnJvbSB0aGUgY29udGFpbmVyIG9mIHRoZQotICogd29ya19zdHJ1Y3QgYmVmb3JlIGNsZWFyaW5nIHRoZSBwZW5kaW5nIGJpdCBhcyB0aGUgd29ya19zdHJ1Y3QgbWF5IGJlCi0gKiBzdWJqZWN0IHRvIGRlYWxsb2NhdGlvbiB0aGUgbW9tZW50IHRoZSBwZW5kaW5nIGJpdCBpcyBjbGVhcmVkLgotICoKLSAqIEluIHN1Y2ggYSBjYXNlLCB0aGlzIHNob3VsZCBiZSBjYWxsZWQgaW4gdGhlIHdvcmsgZnVuY3Rpb24gYWZ0ZXIgaXQgaGFzCi0gKiBmZXRjaGVkIGFueSBkYXRhIGl0IG1heSByZXF1aXJlIGZyb20gdGhlIGNvbnRhaW50ZXIgb2YgdGhlIHdvcmtfc3RydWN0LgotICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQsIHRoZSB3b3JrX3N0cnVjdCBtYXkgYmUgc2NoZWR1bGVkIGZvcgotICogZnVydGhlciBleGVjdXRpb24gb3IgaXQgbWF5IGJlIGRlYWxsb2NhdGVkIHVubGVzcyBvdGhlciBwcmVjYXV0aW9ucyBhcmUKLSAqIHRha2VuLgotICoKLSAqIFRoaXMgc2hvdWxkIGFsc28gYmUgdXNlZCB0byByZWxlYXNlIGEgZGVsYXllZCB3b3JrIGl0ZW0uCisgKiB3b3JrX2NsZWFyX3BlbmRpbmcgLSBmb3IgaW50ZXJuYWwgdXNlIG9ubHksIG1hcmsgYSB3b3JrIGl0ZW0gYXMgbm90IHBlbmRpbmcKKyAqIEB3b3JrOiBUaGUgd29yayBpdGVtIGluIHF1ZXN0aW9uCiAgKi8KLSNkZWZpbmUgd29ya19yZWxlYXNlKHdvcmspIFwKKyNkZWZpbmUgd29ya19jbGVhcl9wZW5kaW5nKHdvcmspIFwKIAljbGVhcl9iaXQoV09SS19TVFJVQ1RfUEVORElORywgd29ya19kYXRhX2JpdHMod29yaykpCiAKIApAQCAtMTYyLDMzICsxMjIsMzQgQEAKIAkJCQkJCSAgICBpbnQgc2luZ2xldGhyZWFkLAogCQkJCQkJICAgIGludCBmcmVlemVhYmxlKTsKICNkZWZpbmUgY3JlYXRlX3dvcmtxdWV1ZShuYW1lKSBfX2NyZWF0ZV93b3JrcXVldWUoKG5hbWUpLCAwLCAwKQotI2RlZmluZSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUobmFtZSkgX19jcmVhdGVfd29ya3F1ZXVlKChuYW1lKSwgMCwgMSkKKyNkZWZpbmUgY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKG5hbWUpIF9fY3JlYXRlX3dvcmtxdWV1ZSgobmFtZSksIDEsIDEpCiAjZGVmaW5lIGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG5hbWUpIF9fY3JlYXRlX3dvcmtxdWV1ZSgobmFtZSksIDEsIDApCiAKIGV4dGVybiB2b2lkIGRlc3Ryb3lfd29ya3F1ZXVlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSk7CiAKIGV4dGVybiBpbnQgRkFTVENBTEwocXVldWVfd29yayhzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykpOwotZXh0ZXJuIGludCBGQVNUQ0FMTChxdWV1ZV9kZWxheWVkX3dvcmsoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLCBzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrLCB1bnNpZ25lZCBsb25nIGRlbGF5KSk7CitleHRlcm4gaW50IEZBU1RDQUxMKHF1ZXVlX2RlbGF5ZWRfd29yayhzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsCisJCQlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrLCB1bnNpZ25lZCBsb25nIGRlbGF5KSk7CiBleHRlcm4gaW50IHF1ZXVlX2RlbGF5ZWRfd29ya19vbihpbnQgY3B1LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsCi0Jc3RydWN0IGRlbGF5ZWRfd29yayAqd29yaywgdW5zaWduZWQgbG9uZyBkZWxheSk7CisJCQlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrLCB1bnNpZ25lZCBsb25nIGRlbGF5KTsKKwogZXh0ZXJuIHZvaWQgRkFTVENBTEwoZmx1c2hfd29ya3F1ZXVlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSkpOworZXh0ZXJuIHZvaWQgZmx1c2hfc2NoZWR1bGVkX3dvcmsodm9pZCk7CiAKIGV4dGVybiBpbnQgRkFTVENBTEwoc2NoZWR1bGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspKTsKLWV4dGVybiBpbnQgRkFTVENBTEwocnVuX3NjaGVkdWxlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykpOwotZXh0ZXJuIGludCBGQVNUQ0FMTChzY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqd29yaywgdW5zaWduZWQgbG9uZyBkZWxheSkpOwotCi1leHRlcm4gaW50IHNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihpbnQgY3B1LCBzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrLCB1bnNpZ25lZCBsb25nIGRlbGF5KTsKK2V4dGVybiBpbnQgRkFTVENBTEwoc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCBkZWxheWVkX3dvcmsgKndvcmssCisJCQkJCXVuc2lnbmVkIGxvbmcgZGVsYXkpKTsKK2V4dGVybiBpbnQgc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGludCBjcHUsIHN0cnVjdCBkZWxheWVkX3dvcmsgKndvcmssCisJCQkJCXVuc2lnbmVkIGxvbmcgZGVsYXkpOwogZXh0ZXJuIGludCBzY2hlZHVsZV9vbl9lYWNoX2NwdSh3b3JrX2Z1bmNfdCBmdW5jKTsKLWV4dGVybiB2b2lkIGZsdXNoX3NjaGVkdWxlZF93b3JrKHZvaWQpOwogZXh0ZXJuIGludCBjdXJyZW50X2lzX2tldmVudGQodm9pZCk7CiBleHRlcm4gaW50IGtldmVudGRfdXAodm9pZCk7CiAKIGV4dGVybiB2b2lkIGluaXRfd29ya3F1ZXVlcyh2b2lkKTsKLXZvaWQgY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yayhzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrKTsKLXZvaWQgY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICosCi0JCQkJICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKik7CiBpbnQgZXhlY3V0ZV9pbl9wcm9jZXNzX2NvbnRleHQod29ya19mdW5jX3QgZm4sIHN0cnVjdCBleGVjdXRlX3dvcmsgKik7CiAKK2V4dGVybiB2b2lkIGNhbmNlbF93b3JrX3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKwogLyoKICAqIEtpbGwgb2ZmIGEgcGVuZGluZyBzY2hlZHVsZV9kZWxheWVkX3dvcmsoKS4gIE5vdGUgdGhhdCB0aGUgd29yayBjYWxsYmFjawogICogZnVuY3Rpb24gbWF5IHN0aWxsIGJlIHJ1bm5pbmcgb24gcmV0dXJuIGZyb20gY2FuY2VsX2RlbGF5ZWRfd29yaygpLCB1bmxlc3MKQEAgLTE5OSwxMCArMTYwLDIwIEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IGRlbF90aW1lcigmd29yay0+dGltZXIpOworCXJldCA9IGRlbF90aW1lcl9zeW5jKCZ3b3JrLT50aW1lcik7CiAJaWYgKHJldCkKLQkJd29ya19yZWxlYXNlKCZ3b3JrLT53b3JrKTsKKwkJd29ya19jbGVhcl9wZW5kaW5nKCZ3b3JrLT53b3JrKTsKIAlyZXR1cm4gcmV0OwogfQogCitleHRlcm4gdm9pZCBjYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKHN0cnVjdCBkZWxheWVkX3dvcmsgKndvcmspOworCisvKiBPYnNvbGV0ZS4gdXNlIGNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoKSAqLworc3RhdGljIGlubGluZQordm9pZCBjYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLAorCQkJCQlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrKQoreworCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsod29yayk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaCBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKaW5kZXggZGFhNmMxMi4uNGVmNGQyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCkBAIC00LDYgKzQsOCBAQAogI2lmbmRlZiBXUklURUJBQ0tfSAogI2RlZmluZSBXUklURUJBQ0tfSAogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKwogc3RydWN0IGJhY2tpbmdfZGV2X2luZm87CiAKIGV4dGVybiBzcGlubG9ja190IGlub2RlX2xvY2s7CkBAIC0xMTEsOSArMTEzLDE1IEBACiAJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZF9ucihtYXBwaW5nLCAxKTsKIH0KIAordHlwZWRlZiBpbnQgKCp3cml0ZXBhZ2VfdCkoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLAorCQkJCXZvaWQgKmRhdGEpOworCiBpbnQgcGRmbHVzaF9vcGVyYXRpb24odm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBhcmcwKTsKLWV4dGVybiBpbnQgZ2VuZXJpY193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOworaW50IGdlbmVyaWNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJICAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKK2ludCB3cml0ZV9jYWNoZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsIHdyaXRlcGFnZV90IHdyaXRlcGFnZSwKKwkJICAgICAgdm9pZCAqZGF0YSk7CiBpbnQgZG9fd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogaW50IHN5bmNfcGFnZV9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCWxvZmZfdCBwb3MsIGxvZmZfdCBjb3VudCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21hdGgtZW11L2V4dGVuZGVkLmggYi9pbmNsdWRlL21hdGgtZW11L2V4dGVuZGVkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzcwZmMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9tYXRoLWVtdS9leHRlbmRlZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzk2ICswLDAgQEAKLS8qIFNvZnR3YXJlIGZsb2F0aW5nLXBvaW50IGVtdWxhdGlvbi4KLSAgIERlZmluaXRpb25zIGZvciBJRUVFIEV4dGVuZGVkIFByZWNpc2lvbi4KLSAgIENvcHlyaWdodCAoQykgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgotICAgQ29udHJpYnV0ZWQgYnkgSmFrdWIgSmVsaW5layAoampAdWx0cmEubGludXguY3opLgotCi0gICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQotICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmCi0gICBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KLQotCi0jaWZuZGVmICAgIF9fTUFUSF9FTVVfRVhURU5ERURfSF9fCi0jZGVmaW5lICAgIF9fTUFUSF9FTVVfRVhURU5ERURfSF9fCi0KLSNpZiBfRlBfV19UWVBFX1NJWkUgPCAzMgotI2Vycm9yICJIZXJlJ3MgYSBuaWNrZWwsIGtpZC4gR28gYnV5IHlvdXJzZWxmIGEgcmVhbCBjb21wdXRlci4iCi0jZW5kaWYKLQotI2lmIF9GUF9XX1RZUEVfU0laRSA8IDY0Ci0jZGVmaW5lIF9GUF9GUkFDVEJJVFNfRSAgICAgICAgICg0Kl9GUF9XX1RZUEVfU0laRSkKLSNlbHNlCi0jZGVmaW5lIF9GUF9GUkFDVEJJVFNfRQkJKDIqX0ZQX1dfVFlQRV9TSVpFKQotI2VuZGlmCi0KLSNkZWZpbmUgX0ZQX0ZSQUNCSVRTX0UJCTY0Ci0jZGVmaW5lIF9GUF9GUkFDWEJJVFNfRQkJKF9GUF9GUkFDVEJJVFNfRSAtIF9GUF9GUkFDQklUU19FKQotI2RlZmluZSBfRlBfV0ZSQUNCSVRTX0UJCShfRlBfV09SS0JJVFMgKyBfRlBfRlJBQ0JJVFNfRSkKLSNkZWZpbmUgX0ZQX1dGUkFDWEJJVFNfRQkoX0ZQX0ZSQUNUQklUU19FIC0gX0ZQX1dGUkFDQklUU19FKQotI2RlZmluZSBfRlBfRVhQQklUU19FCQkxNQotI2RlZmluZSBfRlBfRVhQQklBU19FCQkxNjM4MwotI2RlZmluZSBfRlBfRVhQTUFYX0UJCTMyNzY3Ci0KLSNkZWZpbmUgX0ZQX1FOQU5CSVRfRQkJXAotCSgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfRlJBQ0JJVFNfRS0yKSAlIF9GUF9XX1RZUEVfU0laRSkKLSNkZWZpbmUgX0ZQX0lNUExCSVRfRQkJXAotCSgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfRlJBQ0JJVFNfRS0xKSAlIF9GUF9XX1RZUEVfU0laRSkKLSNkZWZpbmUgX0ZQX09WRVJGTE9XX0UJCVwKLQkoKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dGUkFDQklUU19FICUgX0ZQX1dfVFlQRV9TSVpFKSkKLQotI2lmIF9GUF9XX1RZUEVfU0laRSA8IDY0Ci0KLXVuaW9uIF9GUF9VTklPTl9FCi17Ci0gICBsb25nIGRvdWJsZSBmbHQ7Ci0gICBzdHJ1Y3QgCi0gICB7Ci0jaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgotICAgICAgdW5zaWduZWQgbG9uZyBwYWQxIDogX0ZQX1dfVFlQRV9TSVpFOwotICAgICAgdW5zaWduZWQgbG9uZyBwYWQyIDogKF9GUF9XX1RZUEVfU0laRSAtIDEgLSBfRlBfRVhQQklUU19FKTsKLSAgICAgIHVuc2lnbmVkIGxvbmcgc2lnbiA6IDE7Ci0gICAgICB1bnNpZ25lZCBsb25nIGV4cCA6IF9GUF9FWFBCSVRTX0U7Ci0gICAgICB1bnNpZ25lZCBsb25nIGZyYWMxIDogX0ZQX1dfVFlQRV9TSVpFOwotICAgICAgdW5zaWduZWQgbG9uZyBmcmFjMCA6IF9GUF9XX1RZUEVfU0laRTsKLSNlbHNlCi0gICAgICB1bnNpZ25lZCBsb25nIGZyYWMwIDogX0ZQX1dfVFlQRV9TSVpFOwotICAgICAgdW5zaWduZWQgbG9uZyBmcmFjMSA6IF9GUF9XX1RZUEVfU0laRTsKLSAgICAgIHVuc2lnbmVkIGV4cCA6IF9GUF9FWFBCSVRTX0U7Ci0gICAgICB1bnNpZ25lZCBzaWduIDogMTsKLSNlbmRpZiAvKiBub3QgYmlnZW5kaWFuICovCi0gICB9IGJpdHMgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci19OwotCi0KLSNkZWZpbmUgRlBfREVDTF9FKFgpCQlfRlBfREVDTCg0LFgpCi0KLSNkZWZpbmUgRlBfVU5QQUNLX1JBV19FKFgsIHZhbCkJCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fRSBfZmxvOyBfZmxvLmZsdCA9ICh2YWwpOwkJXAotCQkJCQkJCVwKLSAgICBYIyNfZlsyXSA9IDA7IFgjI19mWzNdID0gMDsJCQkJXAotICAgIFgjI19mWzBdID0gX2Zsby5iaXRzLmZyYWMwOwkJCQlcCi0gICAgWCMjX2ZbMV0gPSBfZmxvLmJpdHMuZnJhYzE7CQkJCVwKLSAgICBYIyNfZSAgPSBfZmxvLmJpdHMuZXhwOwkJCQlcCi0gICAgWCMjX3MgID0gX2Zsby5iaXRzLnNpZ247CQkJCVwKLSAgICBpZiAoIVgjI19lICYmIChYIyNfZlsxXSB8fCBYIyNfZlswXSkJCVwKLSAgICAgICAgJiYgIShYIyNfZlsxXSAmIF9GUF9JTVBMQklUX0UpKQkJCVwKLSAgICAgIHsJCQkJCQkJXAotICAgICAgICBYIyNfZSsrOwkJCQkJXAotICAgICAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0RFTk9STSk7CQkJXAotICAgICAgfQkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlBfVU5QQUNLX1JBV19FUChYLCB2YWwpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fRSAqX2ZsbyA9CQkJCVwKLSAgICAodW5pb24gX0ZQX1VOSU9OX0UgKikodmFsKTsJCQkJXAotCQkJCQkJCVwKLSAgICBYIyNfZlsyXSA9IDA7IFgjI19mWzNdID0gMDsJCQkJXAotICAgIFgjI19mWzBdID0gX2Zsby0+Yml0cy5mcmFjMDsJCQlcCi0gICAgWCMjX2ZbMV0gPSBfZmxvLT5iaXRzLmZyYWMxOwkJCVwKLSAgICBYIyNfZSAgPSBfZmxvLT5iaXRzLmV4cDsJCQkJXAotICAgIFgjI19zICA9IF9mbG8tPmJpdHMuc2lnbjsJCQkJXAotICAgIGlmICghWCMjX2UgJiYgKFgjI19mWzFdIHx8IFgjI19mWzBdKQkJXAotICAgICAgICAmJiAhKFgjI19mWzFdICYgX0ZQX0lNUExCSVRfRSkpCQkJXAotICAgICAgewkJCQkJCQlcCi0gICAgICAgIFgjI19lKys7CQkJCQlcCi0gICAgICAgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfREVOT1JNKTsJCQlcCi0gICAgICB9CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUF9QQUNLX1JBV19FKHZhbCwgWCkJCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fRSBfZmxvOwkJCQlcCi0JCQkJCQkJXAotICAgIGlmIChYIyNfZSkgWCMjX2ZbMV0gfD0gX0ZQX0lNUExCSVRfRTsJCVwKLSAgICBlbHNlIFgjI19mWzFdICY9IH4oX0ZQX0lNUExCSVRfRSk7CQkJXAotICAgIF9mbG8uYml0cy5mcmFjMCA9IFgjI19mWzBdOwkJCQlcCi0gICAgX2Zsby5iaXRzLmZyYWMxID0gWCMjX2ZbMV07CQkJCVwKLSAgICBfZmxvLmJpdHMuZXhwICAgPSBYIyNfZTsJCQkJXAotICAgIF9mbG8uYml0cy5zaWduICA9IFgjI19zOwkJCQlcCi0JCQkJCQkJXAotICAgICh2YWwpID0gX2Zsby5mbHQ7CQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlBfUEFDS19SQVdfRVAodmFsLCBYKQkJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIGlmICghRlBfSU5ISUJJVF9SRVNVTFRTKQkJCQlcCi0gICAgICB7CQkJCQkJCVwKLQl1bmlvbiBfRlBfVU5JT05fRSAqX2ZsbyA9CQkJXAotCSAgKHVuaW9uIF9GUF9VTklPTl9FICopKHZhbCk7CQkJXAotCQkJCQkJCVwKLQlpZiAoWCMjX2UpIFgjI19mWzFdIHw9IF9GUF9JTVBMQklUX0U7CQlcCi0JZWxzZSBYIyNfZlsxXSAmPSB+KF9GUF9JTVBMQklUX0UpOwkJXAotCV9mbG8tPmJpdHMuZnJhYzAgPSBYIyNfZlswXTsJCQlcCi0JX2Zsby0+Yml0cy5mcmFjMSA9IFgjI19mWzFdOwkJCVwKLQlfZmxvLT5iaXRzLmV4cCAgID0gWCMjX2U7CQkJXAotCV9mbG8tPmJpdHMuc2lnbiAgPSBYIyNfczsJCQlcCi0gICAgICB9CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUF9VTlBBQ0tfRShYLHZhbCkJCVwKLSAgZG8gewkJCQkJXAotICAgIEZQX1VOUEFDS19SQVdfRShYLHZhbCk7CQlcCi0gICAgX0ZQX1VOUEFDS19DQU5PTklDQUwoRSw0LFgpOwlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlBfVU5QQUNLX0VQKFgsdmFsKQkJXAotICBkbyB7CQkJCQlcCi0gICAgRlBfVU5QQUNLX1JBV18yX1AoWCx2YWwpOwkJXAotICAgIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKEUsNCxYKTsJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX1BBQ0tfRSh2YWwsWCkJCVwKLSAgZG8gewkJCQkJXAotICAgIF9GUF9QQUNLX0NBTk9OSUNBTChFLDQsWCk7CQlcCi0gICAgRlBfUEFDS19SQVdfRSh2YWwsWCk7CQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlBfUEFDS19FUCh2YWwsWCkJCVwKLSAgZG8gewkJCQkJXAotICAgIF9GUF9QQUNLX0NBTk9OSUNBTChFLDQsWCk7CQlcCi0gICAgRlBfUEFDS19SQVdfRVAodmFsLFgpOwkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX0lTU0lHTkFOX0UoWCkJX0ZQX0lTU0lHTkFOKEUsNCxYKQotI2RlZmluZSBGUF9ORUdfRShSLFgpCQlfRlBfTkVHKEUsNCxSLFgpCi0jZGVmaW5lIEZQX0FERF9FKFIsWCxZKQkJX0ZQX0FERChFLDQsUixYLFkpCi0jZGVmaW5lIEZQX1NVQl9FKFIsWCxZKQkJX0ZQX1NVQihFLDQsUixYLFkpCi0jZGVmaW5lIEZQX01VTF9FKFIsWCxZKQkJX0ZQX01VTChFLDQsUixYLFkpCi0jZGVmaW5lIEZQX0RJVl9FKFIsWCxZKQkJX0ZQX0RJVihFLDQsUixYLFkpCi0jZGVmaW5lIEZQX1NRUlRfRShSLFgpCQlfRlBfU1FSVChFLDQsUixYKQotCi0vKgotICogU3F1YXJlIHJvb3QgYWxnb3JpdGhtczoKLSAqIFdlIGhhdmUganVzdCBvbmUgcmlnaHQgbm93LCBtYXliZSBOZXd0b24gYXBwcm94aW1hdGlvbgotICogc2hvdWxkIGJlIGFkZGVkIGZvciB0aG9zZSBtYWNoaW5lcyB3aGVyZSBkaXZpc2lvbiBpcyBmYXN0LgotICogVGhpcyBoYXMgc3BlY2lhbCBfRSB2ZXJzaW9uIGJlY2F1c2Ugc3RhbmRhcmQgXzQgc3F1YXJlCi0gKiByb290IHdvdWxkIG5vdCB3b3JrIChpdCBoYXMgdG8gc3RhcnQgbm9ybWFsbHkgd2l0aCB0aGUKLSAqIHNlY29uZCB3b3JkIGFuZCBub3QgdGhlIGZpcnN0KSwgYnV0IGFzIHdlIGhhdmUgdG8gZG8gaXQKLSAqIGFueXdheSwgd2Ugb3B0aW1pemUgaXQgYnkgZG9pbmcgbW9zdCBvZiB0aGUgY2FsY3VsYXRpb25zCi0gKiBpbiB0d28gVVd0eXBlIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIGZvdXIuCi0gKi8KLSAKLSNkZWZpbmUgX0ZQX1NRUlRfTUVBVF9FKFIsIFMsIFQsIFgsIHEpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICBxID0gKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dfVFlQRV9TSVpFIC0gMSk7CQlcCi0gICAgX0ZQX0ZSQUNfU1JMXzQoWCwgKF9GUF9XT1JLQklUUykpOwkJCVwKLSAgICB3aGlsZSAocSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCVwKLQlUIyNfZlsxXSA9IFMjI19mWzFdICsgcTsJCQlcCi0JaWYgKFQjI19mWzFdIDw9IFgjI19mWzFdKQkJCVwKLQkgIHsJCQkJCQlcCi0JICAgIFMjI19mWzFdID0gVCMjX2ZbMV0gKyBxOwkJCVwKLQkgICAgWCMjX2ZbMV0gLT0gVCMjX2ZbMV07CQkJXAotCSAgICBSIyNfZlsxXSArPSBxOwkJCQlcCi0JICB9CQkJCQkJXAotCV9GUF9GUkFDX1NMTF8yKFgsIDEpOwkJCQlcCi0JcSA+Pj0gMTsJCQkJCVwKLSAgICAgIH0JCQkJCQkJXAotICAgIHEgPSAoX0ZQX1dfVFlQRSkxIDw8IChfRlBfV19UWVBFX1NJWkUgLSAxKTsJCVwKLSAgICB3aGlsZSAocSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCVwKLQlUIyNfZlswXSA9IFMjI19mWzBdICsgcTsJCQlcCi0JVCMjX2ZbMV0gPSBTIyNfZlsxXTsJCQkJXAotCWlmIChUIyNfZlsxXSA8IFgjI19mWzFdIHx8IAkJCVwKLQkgICAgKFQjI19mWzFdID09IFgjI19mWzFdICYmCQkJXAotCSAgICAgVCMjX2ZbMF0gPD0gWCMjX2ZbMF0pKQkJCVwKLQkgIHsJCQkJCQlcCi0JICAgIFMjI19mWzBdID0gVCMjX2ZbMF0gKyBxOwkJCVwKLQkgICAgUyMjX2ZbMV0gKz0gKFQjI19mWzBdID4gUyMjX2ZbMF0pOwkJXAotCSAgICBfRlBfRlJBQ19ERUNfMihYLCBUKTsJCQlcCi0JICAgIFIjI19mWzBdICs9IHE7CQkJCVwKLQkgIH0JCQkJCQlcCi0JX0ZQX0ZSQUNfU0xMXzIoWCwgMSk7CQkJCVwKLQlxID4+PSAxOwkJCQkJXAotICAgICAgfQkJCQkJCQlcCi0gICAgX0ZQX0ZSQUNfU0xMXzQoUiwgKF9GUF9XT1JLQklUUykpOwkJCVwKLSAgICBpZiAoWCMjX2ZbMF0gfCBYIyNfZlsxXSkJCQkJXAotICAgICAgewkJCQkJCQlcCi0JaWYgKFMjI19mWzFdIDwgWCMjX2ZbMV0gfHwgCQkJXAotCSAgICAoUyMjX2ZbMV0gPT0gWCMjX2ZbMV0gJiYJCQlcCi0JICAgICBTIyNfZlswXSA8IFgjI19mWzBdKSkJCQlcCi0JICBSIyNfZlswXSB8PSBfRlBfV09SS19ST1VORDsJCQlcCi0JUiMjX2ZbMF0gfD0gX0ZQX1dPUktfU1RJQ0tZOwkJCVwKLSAgICAgIH0JCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX0NNUF9FKHIsWCxZLHVuKQlfRlBfQ01QKEUsNCxyLFgsWSx1bikKLSNkZWZpbmUgRlBfQ01QX0VRX0UocixYLFkpCV9GUF9DTVBfRVEoRSw0LHIsWCxZKQotCi0jZGVmaW5lIEZQX1RPX0lOVF9FKHIsWCxyc3oscnNnKQlfRlBfVE9fSU5UKEUsNCxyLFgscnN6LHJzZykKLSNkZWZpbmUgRlBfVE9fSU5UX1JPVU5EX0UocixYLHJzeixyc2cpCV9GUF9UT19JTlRfUk9VTkQoRSw0LHIsWCxyc3oscnNnKQotI2RlZmluZSBGUF9GUk9NX0lOVF9FKFgscixycyxydCkJX0ZQX0ZST01fSU5UKEUsNCxYLHIscnMscnQpCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfSElHSF9FKFgpCShYIyNfZlsyXSkKLSNkZWZpbmUgX0ZQX0ZSQUNfSElHSF9SQVdfRShYKQkoWCMjX2ZbMV0pCi0KLSNlbHNlICAgLyogbm90IF9GUF9XX1RZUEVfU0laRSA8IDY0ICovCi11bmlvbiBfRlBfVU5JT05fRQotewotICBsb25nIGRvdWJsZSBmbHQgLyogX19hdHRyaWJ1dGVfXygobW9kZShURikpKSAqLyA7Ci0gIHN0cnVjdCB7Ci0jaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgotICAgIHVuc2lnbmVkIGxvbmcgcGFkIDogKF9GUF9XX1RZUEVfU0laRSAtIDEgLSBfRlBfRVhQQklUU19FKTsKLSAgICB1bnNpZ25lZCBzaWduICA6IDE7Ci0gICAgdW5zaWduZWQgZXhwICAgOiBfRlBfRVhQQklUU19FOwotICAgIHVuc2lnbmVkIGxvbmcgZnJhYyA6IF9GUF9XX1RZUEVfU0laRTsKLSNlbHNlCi0gICAgdW5zaWduZWQgbG9uZyBmcmFjIDogX0ZQX1dfVFlQRV9TSVpFOwotICAgIHVuc2lnbmVkIGV4cCAgIDogX0ZQX0VYUEJJVFNfRTsKLSAgICB1bnNpZ25lZCBzaWduICA6IDE7Ci0jZW5kaWYKLSAgfSBiaXRzOwotfTsKLQotI2RlZmluZSBGUF9ERUNMX0UoWCkJCV9GUF9ERUNMKDIsWCkKLQotI2RlZmluZSBGUF9VTlBBQ0tfUkFXX0UoWCwgdmFsKQkJCQkJXAotICBkbyB7CQkJCQkJCQlcCi0gICAgdW5pb24gX0ZQX1VOSU9OX0UgX2ZsbzsgX2Zsby5mbHQgPSAodmFsKTsJCQlcCi0JCQkJCQkJCVwKLSAgICBYIyNfZjAgPSBfZmxvLmJpdHMuZnJhYzsJCQkJCVwKLSAgICBYIyNfZjEgPSAwOwkJCQkJCQlcCi0gICAgWCMjX2UgPSBfZmxvLmJpdHMuZXhwOwkJCQkJXAotICAgIFgjI19zID0gX2Zsby5iaXRzLnNpZ247CQkJCQlcCi0gICAgaWYgKCFYIyNfZSAmJiBYIyNfZjAgJiYgIShYIyNfZjAgJiBfRlBfSU1QTEJJVF9FKSkJCVwKLSAgICAgIHsJCQkJCQkJCVwKLSAgICAgICAgWCMjX2UrKzsJCQkJCQlcCi0gICAgICAgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfREVOT1JNKTsJCQkJXAotICAgICAgfQkJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX1VOUEFDS19SQVdfRVAoWCwgdmFsKQkJCQlcCi0gIGRvIHsJCQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fRSAqX2ZsbyA9CQkJCQlcCi0gICAgICAodW5pb24gX0ZQX1VOSU9OX0UgKikodmFsKTsJCQkJXAotCQkJCQkJCQlcCi0gICAgWCMjX2YwID0gX2Zsby0+Yml0cy5mcmFjOwkJCQkJXAotICAgIFgjI19mMSA9IDA7CQkJCQkJCVwKLSAgICBYIyNfZSA9IF9mbG8tPmJpdHMuZXhwOwkJCQkJXAotICAgIFgjI19zID0gX2Zsby0+Yml0cy5zaWduOwkJCQkJXAotICAgIGlmICghWCMjX2UgJiYgWCMjX2YwICYmICEoWCMjX2YwICYgX0ZQX0lNUExCSVRfRSkpCQlcCi0gICAgICB7CQkJCQkJCQlcCi0gICAgICAgIFgjI19lKys7CQkJCQkJXAotICAgICAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0RFTk9STSk7CQkJCVwKLSAgICAgIH0JCQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUF9QQUNLX1JBV19FKHZhbCwgWCkJCQkJCVwKLSAgZG8gewkJCQkJCQkJXAotICAgIHVuaW9uIF9GUF9VTklPTl9FIF9mbG87CQkJCQlcCi0JCQkJCQkJCVwKLSAgICBpZiAoWCMjX2UpIFgjI19mMCB8PSBfRlBfSU1QTEJJVF9FOwkJCQlcCi0gICAgZWxzZSBYIyNfZjAgJj0gfihfRlBfSU1QTEJJVF9FKTsJCQkJXAotICAgIF9mbG8uYml0cy5mcmFjID0gWCMjX2YwOwkJCQkJXAotICAgIF9mbG8uYml0cy5leHAgID0gWCMjX2U7CQkJCQlcCi0gICAgX2Zsby5iaXRzLnNpZ24gPSBYIyNfczsJCQkJCVwKLQkJCQkJCQkJXAotICAgICh2YWwpID0gX2Zsby5mbHQ7CQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX1BBQ0tfUkFXX0VQKGZzLCB2YWwsIFgpCQkJCVwKLSAgZG8gewkJCQkJCQkJXAotICAgIGlmICghRlBfSU5ISUJJVF9SRVNVTFRTKQkJCQkJXAotICAgICAgewkJCQkJCQkJXAotCXVuaW9uIF9GUF9VTklPTl9FICpfZmxvID0JCQkJXAotCSAgKHVuaW9uIF9GUF9VTklPTl9FICopKHZhbCk7CQkJCVwKLQkJCQkJCQkJXAotCWlmIChYIyNfZSkgWCMjX2YwIHw9IF9GUF9JTVBMQklUX0U7CQkJXAotCWVsc2UgWCMjX2YwICY9IH4oX0ZQX0lNUExCSVRfRSk7CQkJXAotCV9mbG8tPmJpdHMuZnJhYyA9IFgjI19mMDsJCQkJXAotCV9mbG8tPmJpdHMuZXhwICA9IFgjI19lOwkJCQlcCi0JX2Zsby0+Yml0cy5zaWduID0gWCMjX3M7CQkJCVwKLSAgICAgIH0JCQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0jZGVmaW5lIEZQX1VOUEFDS19FKFgsdmFsKQkJXAotICBkbyB7CQkJCQlcCi0gICAgRlBfVU5QQUNLX1JBV19FKFgsdmFsKTsJCVwKLSAgICBfRlBfVU5QQUNLX0NBTk9OSUNBTChFLDIsWCk7CVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUF9VTlBBQ0tfRVAoWCx2YWwpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBGUF9VTlBBQ0tfUkFXX0VQKFgsdmFsKTsJCVwKLSAgICBfRlBfVU5QQUNLX0NBTk9OSUNBTChFLDIsWCk7CVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUF9QQUNLX0UodmFsLFgpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBfRlBfUEFDS19DQU5PTklDQUwoRSwyLFgpOwkJXAotICAgIEZQX1BBQ0tfUkFXX0UodmFsLFgpOwkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX1BBQ0tfRVAodmFsLFgpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBfRlBfUEFDS19DQU5PTklDQUwoRSwyLFgpOwkJXAotICAgIEZQX1BBQ0tfUkFXX0VQKHZhbCxYKTsJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUF9JU1NJR05BTl9FKFgpCV9GUF9JU1NJR05BTihFLDIsWCkKLSNkZWZpbmUgRlBfTkVHX0UoUixYKQkJX0ZQX05FRyhFLDIsUixYKQotI2RlZmluZSBGUF9BRERfRShSLFgsWSkJCV9GUF9BREQoRSwyLFIsWCxZKQotI2RlZmluZSBGUF9TVUJfRShSLFgsWSkJCV9GUF9TVUIoRSwyLFIsWCxZKQotI2RlZmluZSBGUF9NVUxfRShSLFgsWSkJCV9GUF9NVUwoRSwyLFIsWCxZKQotI2RlZmluZSBGUF9ESVZfRShSLFgsWSkJCV9GUF9ESVYoRSwyLFIsWCxZKQotI2RlZmluZSBGUF9TUVJUX0UoUixYKQkJX0ZQX1NRUlQoRSwyLFIsWCkKLQotLyoKLSAqIFNxdWFyZSByb290IGFsZ29yaXRobXM6Ci0gKiBXZSBoYXZlIGp1c3Qgb25lIHJpZ2h0IG5vdywgbWF5YmUgTmV3dG9uIGFwcHJveGltYXRpb24KLSAqIHNob3VsZCBiZSBhZGRlZCBmb3IgdGhvc2UgbWFjaGluZXMgd2hlcmUgZGl2aXNpb24gaXMgZmFzdC4KLSAqIFdlIG9wdGltaXplIGl0IGJ5IGRvaW5nIG1vc3Qgb2YgdGhlIGNhbGN1bGF0aW9ucwotICogaW4gb25lIFVXdHlwZSByZWdpc3RlcnMgaW5zdGVhZCBvZiB0d28sIGFsdGhvdWdoIHdlIGRvbid0Ci0gKiBoYXZlIHRvLgotICovCi0jZGVmaW5lIF9GUF9TUVJUX01FQVRfRShSLCBTLCBULCBYLCBxKQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgcSA9IChfRlBfV19UWVBFKTEgPDwgKF9GUF9XX1RZUEVfU0laRSAtIDEpOwkJXAotICAgIF9GUF9GUkFDX1NSTF8yKFgsIChfRlBfV09SS0JJVFMpKTsJCQlcCi0gICAgd2hpbGUgKHEpCQkJCQkJXAotICAgICAgewkJCQkJCQlcCi0gICAgICAgIFQjI19mMCA9IFMjI19mMCArIHE7CQkJCVwKLSAgICAgICAgaWYgKFQjI19mMCA8PSBYIyNfZjApCQkJCVwKLSAgICAgICAgICB7CQkJCQkJXAotICAgICAgICAgICAgUyMjX2YwID0gVCMjX2YwICsgcTsJCQlcCi0gICAgICAgICAgICBYIyNfZjAgLT0gVCMjX2YwOwkJCQlcCi0gICAgICAgICAgICBSIyNfZjAgKz0gcTsJCQkJXAotICAgICAgICAgIH0JCQkJCQlcCi0gICAgICAgIF9GUF9GUkFDX1NMTF8xKFgsIDEpOwkJCQlcCi0gICAgICAgIHEgPj49IDE7CQkJCQlcCi0gICAgICB9CQkJCQkJCVwKLSAgICBfRlBfRlJBQ19TTExfMihSLCAoX0ZQX1dPUktCSVRTKSk7CQkJXAotICAgIGlmIChYIyNfZjApCQkJCQkJXAotICAgICAgewkJCQkJCQlcCi0JaWYgKFMjI19mMCA8IFgjI19mMCkJCQkJXAotCSAgUiMjX2YwIHw9IF9GUF9XT1JLX1JPVU5EOwkJCVwKLQlSIyNfZjAgfD0gX0ZQX1dPUktfU1RJQ0tZOwkJCVwKLSAgICAgIH0JCQkJCQkJXAotICB9IHdoaWxlICgwKQotIAotI2RlZmluZSBGUF9DTVBfRShyLFgsWSx1bikJX0ZQX0NNUChFLDIscixYLFksdW4pCi0jZGVmaW5lIEZQX0NNUF9FUV9FKHIsWCxZKQlfRlBfQ01QX0VRKEUsMixyLFgsWSkKLQotI2RlZmluZSBGUF9UT19JTlRfRShyLFgscnN6LHJzZykJX0ZQX1RPX0lOVChFLDIscixYLHJzeixyc2cpCi0jZGVmaW5lIEZQX1RPX0lOVF9ST1VORF9FKHIsWCxyc3oscnNnKQlfRlBfVE9fSU5UX1JPVU5EKEUsMixyLFgscnN6LHJzZykKLSNkZWZpbmUgRlBfRlJPTV9JTlRfRShYLHIscnMscnQpCV9GUF9GUk9NX0lOVChFLDIsWCxyLHJzLHJ0KQotCi0jZGVmaW5lIF9GUF9GUkFDX0hJR0hfRShYKQkoWCMjX2YxKQotI2RlZmluZSBfRlBfRlJBQ19ISUdIX1JBV19FKFgpCShYIyNfZjApCi0KLSNlbmRpZiAvKiBub3QgX0ZQX1dfVFlQRV9TSVpFIDwgNjQgKi8KLQotI2VuZGlmIC8qIF9fTUFUSF9FTVVfRVhURU5ERURfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxNDYuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oCmluZGV4IDc5NmJjZjEuLmQzZjRmNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oCkBAIC01OCw2ICs1OCw3IEBACiAJdW5zaWduZWQgbG9uZwlvZmZzZXQ7CiAJLyogdXNlZCBmb3IgY3VzdG9tIHBhZ2V0YWJsZXMgKHVzZWQgZm9yIGV4YW1wbGUgYnkgYnVkZ2V0IGR2YiBjYXJkcykgKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNsaXN0OworCWludAkJbmVudHM7CiB9OwogCiBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgewpAQCAtMTU3LDYgKzE1OCw3IEBACiB2b2lkIHNhYTcxNDZfcGd0YWJsZV9mcmVlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBzYWE3MTQ2X3BndGFibGUgKnB0KTsKIGludCBzYWE3MTQ2X3BndGFibGVfYnVpbGRfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBzYWE3MTQ2X3BndGFibGUgKnB0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmxpc3QsIGludCBsZW5ndGggKTsKIGNoYXIgKnNhYTcxNDZfdm1hbGxvY19idWlsZF9wZ3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGxvbmcgbGVuZ3RoLCBzdHJ1Y3Qgc2FhNzE0Nl9wZ3RhYmxlICpwdCk7Cit2b2lkIHNhYTcxNDZfdmZyZWVfZGVzdHJveV9wZ3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNoYXIgKm1lbSwgc3RydWN0IHNhYTcxNDZfcGd0YWJsZSAqcHQpOwogdm9pZCBzYWE3MTQ2X3NldGdwaW8oc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIGludCBwb3J0LCB1MzIgZGF0YSk7CiBpbnQgc2FhNzE0Nl93YWl0X2Zvcl9kZWJpX2RvbmUoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIGludCBub2J1c3lsb29wKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmggYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAppbmRleCA1MGUzM2IwLi5jY2UyMGVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaApAQCAtMjE2LDYgKzIxNiw4IEBACiBleHRlcm4gc3RydWN0IHNhYTcxNDZfdXNlX29wcyBzYWE3MTQ2X3ZpZGVvX3VvcHM7CiBpbnQgc2FhNzE0Nl9zdGFydF9wcmV2aWV3KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCk7CiBpbnQgc2FhNzE0Nl9zdG9wX3ByZXZpZXcoc3RydWN0IHNhYTcxNDZfZmggKmZoKTsKK2ludCBzYWE3MTQ2X3ZpZGVvX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKIAogLyogZnJvbSBzYWE3MTQ2X3ZiaS5jICovCiBleHRlcm4gc3RydWN0IHNhYTcxNDZfdXNlX29wcyBzYWE3MTQ2X3ZiaV91b3BzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oCmluZGV4IGMwMzk4ZjUuLjY1ZjQ5ZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3VuaXguaAorKysgYi9pbmNsdWRlL25ldC9hZl91bml4LmgKQEAgLTYyLDEzICs2MiwxMSBAQAogI2RlZmluZSBVTklYQ1JFRFMoc2tiKQkoJlVOSVhDQigoc2tiKSkuY3JlZHMpCiAjZGVmaW5lIFVOSVhTSUQoc2tiKQkoJlVOSVhDQigoc2tiKSkuc2VjaWQpCiAKLSNkZWZpbmUgdW5peF9zdGF0ZV9ybG9jayhzKQlzcGluX2xvY2soJnVuaXhfc2socyktPmxvY2spCi0jZGVmaW5lIHVuaXhfc3RhdGVfcnVubG9jayhzKQlzcGluX3VubG9jaygmdW5peF9zayhzKS0+bG9jaykKLSNkZWZpbmUgdW5peF9zdGF0ZV93bG9jayhzKQlzcGluX2xvY2soJnVuaXhfc2socyktPmxvY2spCi0jZGVmaW5lIHVuaXhfc3RhdGVfd2xvY2tfbmVzdGVkKHMpIFwKKyNkZWZpbmUgdW5peF9zdGF0ZV9sb2NrKHMpCXNwaW5fbG9jaygmdW5peF9zayhzKS0+bG9jaykKKyNkZWZpbmUgdW5peF9zdGF0ZV91bmxvY2socykJc3Bpbl91bmxvY2soJnVuaXhfc2socyktPmxvY2spCisjZGVmaW5lIHVuaXhfc3RhdGVfbG9ja19uZXN0ZWQocykgXAogCQkJCXNwaW5fbG9ja19uZXN0ZWQoJnVuaXhfc2socyktPmxvY2ssIFwKIAkJCQlTSU5HTEVfREVQVEhfTkVTVElORykKLSNkZWZpbmUgdW5peF9zdGF0ZV93dW5sb2NrKHMpCXNwaW5fdW5sb2NrKCZ1bml4X3NrKHMpLT5sb2NrKQogCiAjaWZkZWYgX19LRVJORUxfXwogLyogVGhlIEFGX1VOSVggc29ja2V0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCmluZGV4IDgyNDJhMGUuLjg3ZGY0ZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCkBAIC0xMjksOCArMTI5LDEwIEBACiAJX191OCAgICAgICBkYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgTDJDQVBfQ09ORl9TVUNDRVNTCTB4MDAKLSNkZWZpbmUgTDJDQVBfQ09ORl9VTkFDQ0VQVAkweDAxCisjZGVmaW5lIEwyQ0FQX0NPTkZfU1VDQ0VTUwkweDAwMDAKKyNkZWZpbmUgTDJDQVBfQ09ORl9VTkFDQ0VQVAkweDAwMDEKKyNkZWZpbmUgTDJDQVBfQ09ORl9SRUpFQ1QJMHgwMDAyCisjZGVmaW5lIEwyQ0FQX0NPTkZfVU5LTk9XTgkweDAwMDMKIAogc3RydWN0IGwyY2FwX2NvbmZfb3B0IHsKIAlfX3U4ICAgICAgIHR5cGU7CkBAIC0yMTUsNiArMjE3LDggQEAKIAogCV9fdTMyCQlsaW5rX21vZGU7CiAKKwlfX3U4CQljb25mX3JlcVs2NF07CisJX191OAkJY29uZl9sZW47CiAJX191OAkJY29uZl9zdGF0ZTsKIAlfX3U4CQljb25mX3JldHJ5OwogCV9fdTE2CQljb25mX210dTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzdC5oIGIvaW5jbHVkZS9uZXQvZHN0LmgKaW5kZXggZTEyYThjZS4uODIyNzBmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHN0LmgKKysrIGIvaW5jbHVkZS9uZXQvZHN0LmgKQEAgLTI2NSw5ICsyNjUsMTYgQEAKIHsKIAlyZXR1cm4gMDsKIH0gCitzdGF0aWMgaW5saW5lIGludCBfX3hmcm1fbG9va3VwKHN0cnVjdCBkc3RfZW50cnkgKipkc3RfcCwgc3RydWN0IGZsb3dpICpmbCwKKwkJCQlzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KICNlbHNlCiBleHRlcm4gaW50IHhmcm1fbG9va3VwKHN0cnVjdCBkc3RfZW50cnkgKipkc3RfcCwgc3RydWN0IGZsb3dpICpmbCwKIAkJICAgICAgIHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgX194ZnJtX2xvb2t1cChzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0X3AsIHN0cnVjdCBmbG93aSAqZmwsCisJCQkgc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpOwogI2VuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAppbmRleCBkNTZiMjkyLi5iYmQ4NWNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaApAQCAtMTI5MSw2ICsxMjkxLDggQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmllZWU4MDIxMV9nZXRfY2hhbm5lbChzdHJ1Y3QKIAkJCQkJCQkgICAgIGllZWU4MDIxMV9kZXZpY2UKIAkJCQkJCQkgICAgICppZWVlLCB1OCBjaGFubmVsKTsKK2V4dGVybiB1MzIgaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGllZWUsCisJCQkJICAgICAgdTggY2hhbm5lbCk7CiAKIC8qIGllZWU4MDIxMV93eC5jICovCiBleHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCA0ZmE1ZGZlLi43OGEwZDA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC00NjksNiArNDY5LDkgQEAKIGV4dGVybiBpbnQJCQlpcDZfZHN0X2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LAogCQkJCQkgICAgICAgc3RydWN0IGZsb3dpICpmbCk7CitleHRlcm4gaW50CQkJaXA2X2RzdF9ibGFja2hvbGUoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LAorCQkJCQkJICBzdHJ1Y3QgZmxvd2kgKmZsKTsKIGV4dGVybiBpbnQJCQlpcDZfc2tfZHN0X2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCQkgIHN0cnVjdCBkc3RfZW50cnkgKipkc3QsCiAJCQkJCQkgIHN0cnVjdCBmbG93aSAqZmwpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9hZl9pcmRhLmggYi9pbmNsdWRlL25ldC9pcmRhL2FmX2lyZGEuaAppbmRleCA3YTIwOWY2Li4wZGY1NzQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2FmX2lyZGEuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2FmX2lyZGEuaApAQCAtMTcsNyArMTcsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogIAotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqICAgICAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKaW5kZXggODlmZTUzNC4uMzZiZWU0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKQEAgLTE3LDcgKzE3LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqICAKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKiAgICAgCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyaWFwLmggYi9pbmNsdWRlL25ldC9pcmRhL2lyaWFwLmgKaW5kZXggMjAwN2M1YS4uZmNjODk2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmlhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJpYXAuaApAQCAtMTcsNyArMTcsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmlhcF9ldmVudC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmlhcF9ldmVudC5oCmluZGV4IDRjYTNkMjAuLjg5NzQ3ZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJpYXBfZXZlbnQuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyaWFwX2V2ZW50LmgKQEAgLTE2LDcgKzE2LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmggYi9pbmNsdWRlL25ldC9pcmRhL2lyaWFzX29iamVjdC5oCmluZGV4IGM0MTE5NmIuLjgzZjc4MDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmlhc19vYmplY3QuaApAQCAtMTYsNyArMTYsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogIAotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqICAgICAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fY2xpZW50LmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2NsaWVudC5oCmluZGV4IDczNmRhYmUuLmZhODQ1NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fY2xpZW50LmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9jbGllbnQuaApAQCAtMTYsNyArMTYsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9jb21tb24uaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fY29tbW9uLmgKaW5kZXggOTU5MmMzNy4uNzNjYWNiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9jb21tb24uaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2NvbW1vbi5oCkBAIC0xNyw3ICsxNyw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2V0aC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9ldGguaAppbmRleCA5YTliMzYxLi4wMDYyMzQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2V0aC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZXRoLmgKQEAgLTE2LDcgKzE2LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqICAKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKiAgICAgCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2V2ZW50LmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2V2ZW50LmgKaW5kZXggYjliYWFjOS4uNmQ5NTM5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZXZlbnQuaApAQCAtMTYsNyArMTYsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9maWx0ZXIuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fZmlsdGVyLmgKaW5kZXggMTcyMDUzOS4uYTVhMjUzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9maWx0ZXIuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2ZpbHRlci5oCkBAIC0xNiw3ICsxNiw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiAgCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICogICAgIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9wcm92aWRlci5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9wcm92aWRlci5oCmluZGV4IGNhNTFkNWIuLjkyZjNiMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fcHJvdmlkZXIuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX3Byb3ZpZGVyLmgKQEAgLTE2LDcgKzE2LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXAuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXAuaAppbmRleCBlNzdlYjg4Li5mMDI0OGZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lybGFwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcC5oCkBAIC0xOCw3ICsxOCw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybG1wLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wLmgKaW5kZXggZTIxMmI5Yi4uM2ZmYzFkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXAuaApAQCAtMTgsNyArMTgsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9ldmVudC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9ldmVudC5oCmluZGV4IDAzYzZmODEuLmUwM2FlNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXBfZXZlbnQuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2V2ZW50LmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXBfZnJhbWUuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXBfZnJhbWUuaAppbmRleCBjNDYzZjhiLi4xOTA2ZWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2ZyYW1lLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9mcmFtZS5oCkBAIC0xNyw3ICsxNyw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybW9kLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybW9kLmgKaW5kZXggNzJiNDQ2Yy4uODZmMGRiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcm1vZC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJtb2QuaApAQCAtMTcsNyArMTcsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogIAotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnLgogICogICAgIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcnF1ZXVlLmggYi9pbmNsdWRlL25ldC9pcmRhL2lycXVldWUuaAppbmRleCAzMzViMGFjLi4zN2Y1MTJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lycXVldWUuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lycXVldWUuaApAQCAtMjEsNyArMjEsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogIAotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqICAgICAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJ0dHAuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJ0dHAuaAppbmRleCBhODk5ZTU4Li5jZjgwYzFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lydHRwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcnR0cC5oCkBAIC0xOCw3ICsxOCw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL3BhcmFtZXRlcnMuaCBiL2luY2x1ZGUvbmV0L2lyZGEvcGFyYW1ldGVycy5oCmluZGV4IDNhNjA1ZDMuLmMwZDkzODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvcGFyYW1ldGVycy5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvcGFyYW1ldGVycy5oCkBAIC0yNiw3ICsyNiw3IEBACiAgKiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgCiAgKiAgICAgTUEgMDIxMTEtMTMwNyBVU0EKICAqCi0gKiAgICAgTWljaGVsIETkbnplciA8ZGFlbnplckBkZWJpYW4ub3JnPiwgMTAvMjAwMQorICogICAgIE1pY2hlbCBEw6RuemVyIDxkYWVuemVyQGRlYmlhbi5vcmc+LCAxMC8yMDAxCiAgKiAgICAgLSBzaW1wbGlmeSBpcmRhX3B2X3QgdG8gYXZvaWQgZW5kaWFubmVzcyBpc3N1ZXMKICAqICAgICAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvdGltZXIuaCBiL2luY2x1ZGUvbmV0L2lyZGEvdGltZXIuaAppbmRleCBjYjYxNTY4Li5jYjI2MTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL3RpbWVyLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS90aW1lci5oCkBAIC0xOCw3ICsxOCw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL3dyYXBwZXIuaCBiL2luY2x1ZGUvbmV0L2lyZGEvd3JhcHBlci5oCmluZGV4IDk4NzY4YjMuLjI5NDJhZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvd3JhcHBlci5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvd3JhcHBlci5oCkBAIC0xNyw3ICsxNyw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKaW5kZXggMWM2YjhiZC4uNDczMjQzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaApAQCAtMTgzLDEzICsxODMsNiBAQAogCiBleHRlcm4gdm9pZCBuZl9jb25udHJhY2tfZmx1c2godm9pZCk7CiAKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCi1uZl9jdF9oZWxwZXJfZmluZF9nZXQoIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKLWV4dGVybiB2b2lkIG5mX2N0X2hlbHBlcl9wdXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcik7Ci0KLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCi1fX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUoY29uc3QgY2hhciAqbmFtZSk7Ci0KIGV4dGVybiBpbnQgbmZfY3RfaW52ZXJ0X3R1cGxlcHIoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqaW52ZXJzZSwKIAkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaAppbmRleCBmMzJmNzE0Li45NmE1OGQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaApAQCAtNTYsOSArNTYsNiBAQAogCSAqLwogCWludCAoKm5ldykoc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLQkvKiBDYWxsZWQgd2hlbiBhIGNvbm50cmFjayBlbnRyeSBpcyBkZXN0cm95ZWQgKi8KLQl2b2lkICgqZGVzdHJveSkoc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjayk7Ci0KIAkvKgogCSAqIENhbGxlZCBiZWZvcmUgdHJhY2tpbmcuIAogCSAqCSpkYXRhb2ZmOiBvZmZzZXQgb2YgcHJvdG9jb2wgaGVhZGVyIChUQ1AsIFVEUCwuLi4pIGluICpwc2tiCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oCmluZGV4IGU3NjU2NTQuLmY5NzQzMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oCkBAIC0xMCwxNiArMTAsMTEgQEAKIAkJCSAgICB1bnNpZ25lZCBpbnQgaG9va251bSwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJCSAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkgICAgc3RydWN0IG5mX25hdF9pbmZvICppbmZvKTsKKwkJCSAgICBzdHJ1Y3QgbmZfY29ubiAqY3QpOwogCiBleHRlcm4gdW5zaWduZWQgaW50Ci1hbGxvY19udWxsX2JpbmRpbmcoc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkgICBzdHJ1Y3QgbmZfbmF0X2luZm8gKmluZm8sCi0JCSAgIHVuc2lnbmVkIGludCBob29rbnVtKTsKK2FsbG9jX251bGxfYmluZGluZyhzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGludCBob29rbnVtKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludAotYWxsb2NfbnVsbF9iaW5kaW5nX2NvbmZpcm1lZChzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkgICAgIHN0cnVjdCBuZl9uYXRfaW5mbyAqaW5mbywKLQkJCSAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pOworYWxsb2NfbnVsbF9iaW5kaW5nX2NvbmZpcm1lZChzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGludCBob29rbnVtKTsKICNlbmRpZiAvKiBfTkZfTkFUX1JVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDI1YzM3ZTMuLmRmZWI4YjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTIxOCwxMyArMjE4LDEzIEBACiAJYXRvbWljX3QJCXNrX3JtZW1fYWxsb2M7CiAJYXRvbWljX3QJCXNrX3dtZW1fYWxsb2M7CiAJYXRvbWljX3QJCXNrX29tZW1fYWxsb2M7CisJaW50CQkJc2tfc25kYnVmOwogCXN0cnVjdCBza19idWZmX2hlYWQJc2tfcmVjZWl2ZV9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXNrX3dyaXRlX3F1ZXVlOwogCXN0cnVjdCBza19idWZmX2hlYWQJc2tfYXN5bmNfd2FpdF9xdWV1ZTsKIAlpbnQJCQlza193bWVtX3F1ZXVlZDsKIAlpbnQJCQlza19mb3J3YXJkX2FsbG9jOwogCWdmcF90CQkJc2tfYWxsb2NhdGlvbjsKLQlpbnQJCQlza19zbmRidWY7CiAJaW50CQkJc2tfcm91dGVfY2FwczsKIAlpbnQJCQlza19nc29fdHlwZTsKIAlpbnQJCQlza19yY3Zsb3dhdDsKQEAgLTEzNjEsMTUgKzEzNjEsNiBAQAogZXh0ZXJuIF9fdTMyIHN5c2N0bF93bWVtX21heDsKIGV4dGVybiBfX3UzMiBzeXNjdGxfcm1lbV9tYXg7CiAKLSNpZmRlZiBDT05GSUdfTkVUCi1pbnQgc2lvY2RldnByaXZhdGVfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgc2lvY2RldnByaXZhdGVfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLSNlbmRpZgotCiBleHRlcm4gdm9pZCBza19pbml0KHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1NZU0NUTApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCBlMjJiNGYwLi5hOGFmOWFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtMjU0LDYgKzI1NCwxMiBAQAogCXJldHVybiBzZXEzIC0gc2VxMiA+PSBzZXExIC0gc2VxMjsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgdGNwX3Rvb19tYW55X29ycGhhbnMoc3RydWN0IHNvY2sgKnNrLCBpbnQgbnVtKQoreworCXJldHVybiAobnVtID4gc3lzY3RsX3RjcF9tYXhfb3JwaGFucykgfHwKKwkJKHNrLT5za193bWVtX3F1ZXVlZCA+IFNPQ0tfTUlOX1NOREJVRiAmJgorCQkgYXRvbWljX3JlYWQoJnRjcF9tZW1vcnlfYWxsb2NhdGVkKSA+IHN5c2N0bF90Y3BfbWVtWzJdKTsKK30KIAogZXh0ZXJuIHN0cnVjdCBwcm90byB0Y3BfcHJvdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdWRwLmggYi9pbmNsdWRlL25ldC91ZHAuaAppbmRleCA5ODc1NWViLi40OTZmODlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC91ZHAuaAorKysgYi9pbmNsdWRlL25ldC91ZHAuaApAQCAtMTE5LDkgKzExOSwxNiBAQAogfQogCiAKK3N0cnVjdCB1ZHBfZ2V0X3BvcnRfb3BzIHsKKwlpbnQgKCpzYWRkcl9jbXApKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpOworCWludCAoKnNhZGRyX2FueSkoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTsKKwl1bnNpZ25lZCBpbnQgKCpoYXNoX3BvcnRfYW5kX3Jjdl9zYWRkcikoX191MTYgcG9ydCwKKwkJCQkJCWNvbnN0IHN0cnVjdCBzb2NrICpzayk7Cit9OworCiAvKiBuZXQvaXB2NC91ZHAuYyAqLwogZXh0ZXJuIGludAl1ZHBfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtLAotCQkJICAgICBpbnQgKCpzYWRkcl9jbXApKGNvbnN0IHN0cnVjdCBzb2NrICosIGNvbnN0IHN0cnVjdCBzb2NrICopKTsKKwkJCSAgICAgY29uc3Qgc3RydWN0IHVkcF9nZXRfcG9ydF9vcHMgKm9wcyk7CiBleHRlcm4gdm9pZAl1ZHBfZXJyKHN0cnVjdCBza19idWZmICosIHUzMik7CiAKIGV4dGVybiBpbnQJdWRwX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC91ZHBsaXRlLmggYi9pbmNsdWRlL25ldC91ZHBsaXRlLmgKaW5kZXggNjM1YjBlYS4uNTBiNGI0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdWRwbGl0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L3VkcGxpdGUuaApAQCAtMTIwLDUgKzEyMCw1IEBACiAKIGV4dGVybiB2b2lkCXVkcGxpdGU0X3JlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIGludCAJdWRwbGl0ZV9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCi0JCQlpbnQgKCpzY21wKShjb25zdCBzdHJ1Y3Qgc29jayAqLCBjb25zdCBzdHJ1Y3Qgc29jayAqKSk7CisJCQkJIGNvbnN0IHN0cnVjdCB1ZHBfZ2V0X3BvcnRfb3BzICpvcHMpOwogI2VuZGlmCS8qIF9VRFBMSVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaAppbmRleCAzOWVmOTI1Li45MDE4NWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94ZnJtLmgKKysrIGIvaW5jbHVkZS9uZXQveGZybS5oCkBAIC0yMzcsNyArMjM3LDYgQEAKIGV4dGVybiBpbnQgeGZybV9wb2xpY3lfdW5yZWdpc3Rlcl9hZmluZm8oc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvKTsKIGV4dGVybiB2b2lkIGttX3BvbGljeV9ub3RpZnkoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgc3RydWN0IGttX2V2ZW50ICpjKTsKIGV4dGVybiB2b2lkIGttX3N0YXRlX25vdGlmeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IGttX2V2ZW50ICpjKTsKLSNkZWZpbmUgWEZSTV9BQ1FfRVhQSVJFUwkzMAogCiBzdHJ1Y3QgeGZybV90bXBsOwogZXh0ZXJuIGludCBrbV9xdWVyeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqdCwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3VtZW0uaCBiL2luY2x1ZGUvcmRtYS9pYl91bWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzM2Q2YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcmRtYS9pYl91bWVtLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgSUJfVU1FTV9ICisjZGVmaW5lIElCX1VNRU1fSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKK3N0cnVjdCBpYl91Y29udGV4dDsKKworc3RydWN0IGliX3VtZW0geworCXN0cnVjdCBpYl91Y29udGV4dCAgICAgKmNvbnRleHQ7CisJc2l6ZV90CQkJbGVuZ3RoOworCWludAkJCW9mZnNldDsKKwlpbnQJCQlwYWdlX3NpemU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU7CisJc3RydWN0IGxpc3RfaGVhZAljaHVua19saXN0OworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCXN0cnVjdCBtbV9zdHJ1Y3QgICAgICAgKm1tOworCXVuc2lnbmVkIGxvbmcJCWRpZmY7Cit9OworCitzdHJ1Y3QgaWJfdW1lbV9jaHVuayB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCWludCAgICAgICAgICAgICAgICAgICAgIG5lbnRzOworCWludCAgICAgICAgICAgICAgICAgICAgIG5tYXA7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgcGFnZV9saXN0WzBdOworfTsKKworI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUVNCisKK3N0cnVjdCBpYl91bWVtICppYl91bWVtX2dldChzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGFjY2Vzcyk7Cit2b2lkIGliX3VtZW1fcmVsZWFzZShzdHJ1Y3QgaWJfdW1lbSAqdW1lbSk7CitpbnQgaWJfdW1lbV9wYWdlX2NvdW50KHN0cnVjdCBpYl91bWVtICp1bWVtKTsKKworI2Vsc2UgLyogQ09ORklHX0lORklOSUJBTkRfVVNFUl9NRU0gKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl91bWVtICppYl91bWVtX2dldChzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkJICBpbnQgYWNjZXNzKSB7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaWJfdW1lbV9yZWxlYXNlKHN0cnVjdCBpYl91bWVtICp1bWVtKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGliX3VtZW1fcGFnZV9jb3VudChzdHJ1Y3QgaWJfdW1lbSAqdW1lbSkgeyByZXR1cm4gMDsgfQorCisjZW5kaWYgLyogQ09ORklHX0lORklOSUJBTkRfVVNFUl9NRU0gKi8KKworI2VuZGlmIC8qIElCX1VNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAppbmRleCA1MzQyYWM2Li4wNjI3YTZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwNCBUb3BzcGluIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNCBWb2x0YWlyZSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2LCAyMDA3IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC03MTAsNiArNzEwLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXFwX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAlzcnFfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWFoX2xpc3Q7CisJaW50CQkJY2xvc2luZzsKIH07CiAKIHN0cnVjdCBpYl91b2JqZWN0IHsKQEAgLTcyMywyMyArNzI0LDYgQEAKIAlpbnQJCQlsaXZlOwogfTsKIAotc3RydWN0IGliX3VtZW0gewotCXVuc2lnbmVkIGxvbmcJCXVzZXJfYmFzZTsKLQl1bnNpZ25lZCBsb25nCQl2aXJ0X2Jhc2U7Ci0Jc2l6ZV90CQkJbGVuZ3RoOwotCWludAkJCW9mZnNldDsKLQlpbnQJCQlwYWdlX3NpemU7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU7Ci0Jc3RydWN0IGxpc3RfaGVhZAljaHVua19saXN0OwotfTsKLQotc3RydWN0IGliX3VtZW1fY2h1bmsgewotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBuZW50czsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBubWFwOwotCXN0cnVjdCBzY2F0dGVybGlzdCAgICAgIHBhZ2VfbGlzdFswXTsKLX07Ci0KIHN0cnVjdCBpYl91ZGF0YSB7CiAJdm9pZCBfX3VzZXIgKmluYnVmOwogCXZvaWQgX191c2VyICpvdXRidWY7CkBAIC03NTIsMTEgKzczNiw2IEBACiAJICgodm9pZCAqKSAmKChzdHJ1Y3QgaWJfdW1lbV9jaHVuayAqKSAwKS0+cGFnZV9saXN0WzFdIC0JXAogCSAgKHZvaWQgKikgJigoc3RydWN0IGliX3VtZW1fY2h1bmsgKikgMCktPnBhZ2VfbGlzdFswXSkpCiAKLXN0cnVjdCBpYl91bWVtX29iamVjdCB7Ci0Jc3RydWN0IGliX3VvYmplY3QJdW9iamVjdDsKLQlzdHJ1Y3QgaWJfdW1lbQkJdW1lbTsKLX07Ci0KIHN0cnVjdCBpYl9wZCB7CiAJc3RydWN0IGliX2RldmljZSAgICAgICAqZGV2aWNlOwogCXN0cnVjdCBpYl91b2JqZWN0ICAgICAgKnVvYmplY3Q7CkBAIC05MTEsNiArODkwLDggQEAKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgICBjbGllbnRfZGF0YV9sb2NrOwogCiAJc3RydWN0IGliX2NhY2hlICAgICAgICAgICAgICAgY2FjaGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAqcGtleV90YmxfbGVuOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgKmdpZF90YmxfbGVuOwogCiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CiAKQEAgLTEwMDMsNyArOTg0LDggQEAKIAkJCQkJCSAgaW50IG1yX2FjY2Vzc19mbGFncywKIAkJCQkJCSAgdTY0ICppb3ZhX3N0YXJ0KTsKIAlzdHJ1Y3QgaWJfbXIgKiAgICAgICAgICAgICAoKnJlZ191c2VyX21yKShzdHJ1Y3QgaWJfcGQgKnBkLAotCQkJCQkJICBzdHJ1Y3QgaWJfdW1lbSAqcmVnaW9uLAorCQkJCQkJICB1NjQgc3RhcnQsIHU2NCBsZW5ndGgsCisJCQkJCQkgIHU2NCB2aXJ0X2FkZHIsCiAJCQkJCQkgIGludCBtcl9hY2Nlc3NfZmxhZ3MsCiAJCQkJCQkgIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcXVlcnlfbXIpKHN0cnVjdCBpYl9tciAqbXIsCkBAIC0xMTM4LDYgKzExMjAsMTIgQEAKIAkJICAgdTggcG9ydF9udW0sIGludCBwb3J0X21vZGlmeV9tYXNrLAogCQkgICBzdHJ1Y3QgaWJfcG9ydF9tb2RpZnkgKnBvcnRfbW9kaWZ5KTsKIAoraW50IGliX2ZpbmRfZ2lkKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdW5pb24gaWJfZ2lkICpnaWQsCisJCXU4ICpwb3J0X251bSwgdTE2ICppbmRleCk7CisKK2ludCBpYl9maW5kX3BrZXkoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAorCQkgdTggcG9ydF9udW0sIHUxNiBwa2V5LCB1MTYgKmluZGV4KTsKKwogLyoqCiAgKiBpYl9hbGxvY19wZCAtIEFsbG9jYXRlcyBhbiB1bnVzZWQgcHJvdGVjdGlvbiBkb21haW4uCiAgKiBAZGV2aWNlOiBUaGUgZGV2aWNlIG9uIHdoaWNoIHRvIGFsbG9jYXRlIHRoZSBwcm90ZWN0aW9uIGRvbWFpbi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJzYXMuaCBiL2luY2x1ZGUvc2NzaS9saWJzYXMuaAppbmRleCBhZDAxODJlLi4yZTZiZGM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGlic2FzLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYnNhcy5oCkBAIC0zMTQsOCArMzE0LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICB0YXNrX3F1ZXVlOwogCWludCAgICAgICAgICAgICAgIHRhc2tfcXVldWVfc2l6ZTsKIAotCXN0cnVjdCBzZW1hcGhvcmUgIHF1ZXVlX3RocmVhZF9zZW1hOwotCWludCAgICAgICAgICAgICAgIHF1ZXVlX3RocmVhZF9raWxsOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcXVldWVfdGhyZWFkOwogfTsKIAogc3RydWN0IHNhc19oYV9ldmVudCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2FrNDExNC5oIGIvaW5jbHVkZS9zb3VuZC9hazQxMTQuaAppbmRleCBjMTQ5ZDNiMjUuLmQ2NDdkYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYWs0MTE0LmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hazQxMTQuaApAQCAtNzMsNyArNzMsNyBAQAogCiAvKiBBSzQxMTRfUkVRX0ZPUk1BVCBiaXRzICovCiAjZGVmaW5lIEFLNDExNF9NT05PCQkoMTw8NykJLyogRG91YmxlIFNhbXBsaW5nIEZyZXF1ZW5jeSBNb2RlOiAwID0gc3RlcmVvLCAxID0gbW9ubyAqLwotI2RlZmluZSBBSzQxMTRfRElGMgkJKDE8PDUpCS8qIEF1ZGlvIERhdGEgQ29udHJvbCAqLworI2RlZmluZSBBSzQxMTRfRElGMgkJKDE8PDYpCS8qIEF1ZGlvIERhdGEgQ29udHJvbCAqLwogI2RlZmluZSBBSzQxMTRfRElGMQkJKDE8PDUpCS8qIEF1ZGlvIERhdGEgQ29udHJvbCAqLwogI2RlZmluZSBBSzQxMTRfRElGMAkJKDE8PDQpCS8qIEF1ZGlvIERhdGEgQ29udHJvbCAqLwogI2RlZmluZSBBSzQxMTRfRElGXzE2UgkJKDApCQkJCS8qIFNURE86IDE2LWJpdCwgcmlnaHQganVzdGlmaWVkICovCkBAIC0xNTgsNyArMTU4LDcgQEAKICNkZWZpbmUgQUs0MTE0X0NIRUNLX05PX1NUQVQJKDE8PDApCS8qIG5vIHN0YXRpc3RpY3MgKi8KICNkZWZpbmUgQUs0MTE0X0NIRUNLX05PX1JBVEUJKDE8PDEpCS8qIG5vIHJhdGUgY2hlY2sgKi8KIAotI2RlZmluZSBBSzQxMTRfQ09OVFJPTFMJCTE0CisjZGVmaW5lIEFLNDExNF9DT05UUk9MUwkJMTUKIAogdHlwZWRlZiB2b2lkIChhazQxMTRfd3JpdGVfdCkodm9pZCAqcHJpdmF0ZV9kYXRhLCB1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGNoYXIgZGF0YSk7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgKGFrNDExNF9yZWFkX3QpKHZvaWQgKnByaXZhdGVfZGF0YSwgdW5zaWduZWQgY2hhciBhZGRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvbXB1NDAxLmggYi9pbmNsdWRlL3NvdW5kL21wdTQwMS5oCmluZGV4IDhjODgyNjcuLmQ1YzEzOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvbXB1NDAxLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9tcHU0MDEuaApAQCAtNTAsNiArNTAsNyBAQAogI2RlZmluZSBNUFU0MDFfSU5GT19JTlRFR1JBVEVECSgxIDw8IDIpCS8qIGludGVncmF0ZWQgaC93IHBvcnQgKi8KICNkZWZpbmUgTVBVNDAxX0lORk9fTU1JTwkoMSA8PCAzKQkvKiBNTUlPIGFjY2VzcyAqLwogI2RlZmluZSBNUFU0MDFfSU5GT19UWF9JUlEJKDEgPDwgNCkJLyogaW5kZXBlbmRlbnQgVFggaXJxICovCisjZGVmaW5lIE1QVTQwMV9JTkZPX1VBUlRfT05MWQkoMSA8PCA1KQkvKiBObyBFTlRFUl9VQVJUIGNtZCBuZWVkZWQgKi8KIAogI2RlZmluZSBNUFU0MDFfTU9ERV9CSVRfSU5QVVQJCTAKICNkZWZpbmUgTVBVNDAxX01PREVfQklUX09VVFBVVAkJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggZGVmZjVhOS4uNzMzMzRlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC02MDMsMTEgKzYwMyw4IEBACiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmc25kX3BjbV9saW5rX3J3bG9jaywgKGZsYWdzKSk7IFwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnN0cmVhbSkgXAotCWxpc3RfZm9yX2VhY2gocG9zLCAmc3Vic3RyZWFtLT5ncm91cC0+c3Vic3RyZWFtcykKLQotI2RlZmluZSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpIFwKLQlsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtLCBsaW5rX2xpc3QpCisjZGVmaW5lIHNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSBcCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmc3Vic3RyZWFtLT5ncm91cC0+c3Vic3RyZWFtcywgbGlua19saXN0KQogCiBzdGF0aWMgaW5saW5lIGludCBzbmRfcGNtX3J1bm5pbmcoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy5oIGIvaW5jbHVkZS9zb3VuZC9zb2MuaAppbmRleCBiMWRjMzY0Li5kYjZlZGJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgogCi0jZGVmaW5lIFNORF9TT0NfVkVSU0lPTiAiMC4xMy4wIgorI2RlZmluZSBTTkRfU09DX1ZFUlNJT04gIjAuMTMuMSIKIAogLyoKICAqIENvbnZlbmllbmNlIGtjb250cm9sIGJ1aWxkZXJzCkBAIC04Myw2ICs4Myw3IEBACiAjZGVmaW5lIFNORF9TT0NfREFJX0FDOTcJMHgxCiAjZGVmaW5lIFNORF9TT0NfREFJX0kyUwkJMHgyCiAjZGVmaW5lIFNORF9TT0NfREFJX1BDTQkJMHg0CisjZGVmaW5lIFNORF9TT0NfREFJX0FDOTdfQlVTCTB4OAkvKiBmb3IgY3VzdG9tIGkuZS4gbm9uIGFjOTdfY29kZWMuYyAqLwogCiAvKgogICogREFJIGhhcmR3YXJlIGF1ZGlvIGZvcm1hdHMKQEAgLTI3OCw2ICsyNzksNyBAQAogc3RydWN0IHNuZF9zb2NfY29kZWNfZGFpIHsKIAljaGFyICpuYW1lOwogCWludCBpZDsKKwl1bnNpZ25lZCBjaGFyIHR5cGU7CiAKIAkvKiBEQUkgY2FwYWJpbGl0aWVzICovCiAJc3RydWN0IHNuZF9zb2NfcGNtX3N0cmVhbSBwbGF5YmFjazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKaW5kZXggNDJhMThjYy4uOGU1YjJmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKQEAgLTEsMyArMSwzIEBACiAvKiBpbmNsdWRlL3ZlcnNpb24uaC4gIEdlbmVyYXRlZCBieSBhbHNhL2tzeW5jIHNjcmlwdC4gICovCi0jZGVmaW5lIENPTkZJR19TTkRfVkVSU0lPTiAiMS4wLjE0cmMzIgotI2RlZmluZSBDT05GSUdfU05EX0RBVEUgIiAoV2VkIE1hciAxNCAwNzoyNTo1MCAyMDA3IFVUQykiCisjZGVmaW5lIENPTkZJR19TTkRfVkVSU0lPTiAiMS4wLjE0IgorI2RlZmluZSBDT05GSUdfU05EX0RBVEUgIiAoVGh1IE1heSAzMSAwOTowMzoyNSAyMDA3IFVUQykiCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2F0bWVsX2xjZGMuaCBiL2luY2x1ZGUvdmlkZW8vYXRtZWxfbGNkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZWE2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL2F0bWVsX2xjZGMuaApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqICBIZWFkZXIgZmlsZSBmb3IgQVQ5MS9BVDMyIExDRCBDb250cm9sbGVyCisgKgorICogIERhdGEgc3RydWN0dXJlIGFuZCByZWdpc3RlciB1c2VyIGludGVyZmFjZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BVE1FTF9MQ0RDX0hfXworI2RlZmluZSBfX0FUTUVMX0xDRENfSF9fCisKKyAvKiBMQ0QgQ29udHJvbGxlciBpbmZvIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgZmJfaW5mbwkJKmluZm87CisJdm9pZCBfX2lvbWVtCQkqbW1pbzsKKwl1bnNpZ25lZCBsb25nCQlpcnFfYmFzZTsKKworCXVuc2lnbmVkIGludAkJZ3VhcmRfdGltZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OworCXN0cnVjdCBjbGsJCSpidXNfY2xrOworCXN0cnVjdCBjbGsJCSpsY2RjX2NsazsKKwl1bnNpZ25lZCBpbnQJCWRlZmF1bHRfYnBwOworCXVuc2lnbmVkIGludAkJZGVmYXVsdF9sY2Rjb24yOworCXVuc2lnbmVkIGludAkJZGVmYXVsdF9kbWFjb247CisJdm9pZCAoKmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wpKGludCBvbik7CisJc3RydWN0IGZiX21vbnNwZWNzCSpkZWZhdWx0X21vbnNwZWNzOworCXUzMgkJCXBzZXVkb19wYWxldHRlWzE2XTsKK307CisKKyNkZWZpbmUgQVRNRUxfTENEQ19ETUFCQUREUjEJMHgwMAorI2RlZmluZSBBVE1FTF9MQ0RDX0RNQUJBRERSMgkweDA0CisjZGVmaW5lIEFUTUVMX0xDRENfRE1BRlJNUFQxCTB4MDgKKyNkZWZpbmUgQVRNRUxfTENEQ19ETUFGUk1QVDIJMHgwYworI2RlZmluZSBBVE1FTF9MQ0RDX0RNQUZSTUFERDEJMHgxMAorI2RlZmluZSBBVE1FTF9MQ0RDX0RNQUZSTUFERDIJMHgxNAorCisjZGVmaW5lIEFUTUVMX0xDRENfRE1BRlJNQ0ZHCTB4MTgKKyNkZWZpbmUJQVRNRUxfTENEQ19GUlNJWkUJKDB4N2ZmZmZmIDw8ICAwKQorI2RlZmluZQlBVE1FTF9MQ0RDX0JMRU5HVEhfT0ZGU0VUCTI0CisjZGVmaW5lCUFUTUVMX0xDRENfQkxFTkdUSAkoMHg3ZiAgICAgPDwgQVRNRUxfTENEQ19CTEVOR1RIX09GRlNFVCkKKworI2RlZmluZSBBVE1FTF9MQ0RDX0RNQUNPTgkweDFjCisjZGVmaW5lCUFUTUVMX0xDRENfRE1BRU4JKDB4MSA8PCAwKQorI2RlZmluZQlBVE1FTF9MQ0RDX0RNQVJTVAkoMHgxIDw8IDEpCisjZGVmaW5lCUFUTUVMX0xDRENfRE1BQlVTWQkoMHgxIDw8IDIpCisjZGVmaW5lCQlBVE1FTF9MQ0RDX0RNQVVQRFQJKDB4MSA8PCAzKQorI2RlZmluZQkJQVRNRUxfTENEQ19ETUEyREVOCSgweDEgPDwgNCkKKworI2RlZmluZSBBVE1FTF9MQ0RDX0RNQTJEQ0ZHCTB4MjAKKyNkZWZpbmUJCUFUTUVMX0xDRENfQUREUklOQ19PRkZTRVQJMAorI2RlZmluZQkJQVRNRUxfTENEQ19BRERSSU5DCQkoMHhmZmZmKQorI2RlZmluZQkJQVRNRUxfTENEQ19QSVhFTE9GRl9PRkZTRVQJMjQKKyNkZWZpbmUJCUFUTUVMX0xDRENfUElYRUxPRkYJCSgweDFmIDw8IDI0KQorCisjZGVmaW5lIEFUTUVMX0xDRENfTENEQ09OMQkweDA4MDAKKyNkZWZpbmUJQVRNRUxfTENEQ19CWVBBU1MJKDEgICAgIDw8ICAwKQorI2RlZmluZQlBVE1FTF9MQ0RDX0NMS1ZBTF9PRkZTRVQJMTIKKyNkZWZpbmUJQVRNRUxfTENEQ19DTEtWQUwJKDB4MWZmIDw8IEFUTUVMX0xDRENfQ0xLVkFMX09GRlNFVCkKKyNkZWZpbmUJQVRNRUxfTENEQ19MSU5DTlQJKDB4N2ZmIDw8IDIxKQorCisjZGVmaW5lIEFUTUVMX0xDRENfTENEQ09OMgkweDA4MDQKKyNkZWZpbmUJQVRNRUxfTENEQ19ESVNUWVBFCSgzIDw8IDApCisjZGVmaW5lCQlBVE1FTF9MQ0RDX0RJU1RZUEVfU1ROTU9OTwkoMCA8PCAwKQorI2RlZmluZQkJQVRNRUxfTENEQ19ESVNUWVBFX1NUTkNPTE9SCSgxIDw8IDApCisjZGVmaW5lCQlBVE1FTF9MQ0RDX0RJU1RZUEVfVEZUCQkoMiA8PCAwKQorI2RlZmluZQlBVE1FTF9MQ0RDX1NDQU5NT0QJKDEgPDwgMikKKyNkZWZpbmUJCUFUTUVMX0xDRENfU0NBTk1PRF9TSU5HTEUJKDAgPDwgMikKKyNkZWZpbmUJCUFUTUVMX0xDRENfU0NBTk1PRF9EVUFMCQkoMSA8PCAyKQorI2RlZmluZQlBVE1FTF9MQ0RDX0lGV0lEVEgJKDMgPDwgMykKKyNkZWZpbmUJCUFUTUVMX0xDRENfSUZXSURUSF80CQkoMCA8PCAzKQorI2RlZmluZQkJQVRNRUxfTENEQ19JRldJRFRIXzgJCSgxIDw8IDMpCisjZGVmaW5lCQlBVE1FTF9MQ0RDX0lGV0lEVEhfMTYJCSgyIDw8IDMpCisjZGVmaW5lCUFUTUVMX0xDRENfUElYRUxTSVpFCSg3IDw8IDUpCisjZGVmaW5lCQlBVE1FTF9MQ0RDX1BJWEVMU0laRV8xCQkoMCA8PCA1KQorI2RlZmluZQkJQVRNRUxfTENEQ19QSVhFTFNJWkVfMgkJKDEgPDwgNSkKKyNkZWZpbmUJCUFUTUVMX0xDRENfUElYRUxTSVpFXzQJCSgyIDw8IDUpCisjZGVmaW5lCQlBVE1FTF9MQ0RDX1BJWEVMU0laRV84CQkoMyA8PCA1KQorI2RlZmluZQkJQVRNRUxfTENEQ19QSVhFTFNJWkVfMTYJCSg0IDw8IDUpCisjZGVmaW5lCQlBVE1FTF9MQ0RDX1BJWEVMU0laRV8yNAkJKDUgPDwgNSkKKyNkZWZpbmUJCUFUTUVMX0xDRENfUElYRUxTSVpFXzMyCQkoNiA8PCA1KQorI2RlZmluZQlBVE1FTF9MQ0RDX0lOVlZECSgxIDw8IDgpCisjZGVmaW5lCQlBVE1FTF9MQ0RDX0lOVlZEX05PUk1BTAkJKDAgPDwgOCkKKyNkZWZpbmUJCUFUTUVMX0xDRENfSU5WVkRfSU5WRVJURUQJKDEgPDwgOCkKKyNkZWZpbmUJQVRNRUxfTENEQ19JTlZGUkFNRQkoMSA8PCA5ICkKKyNkZWZpbmUJCUFUTUVMX0xDRENfSU5WRlJBTUVfTk9STUFMCSgwIDw8IDkpCisjZGVmaW5lCQlBVE1FTF9MQ0RDX0lOVkZSQU1FX0lOVkVSVEVECSgxIDw8IDkpCisjZGVmaW5lCUFUTUVMX0xDRENfSU5WTElORQkoMSA8PCAxMCkKKyNkZWZpbmUJCUFUTUVMX0xDRENfSU5WTElORV9OT1JNQUwJKDAgPDwgMTApCisjZGVmaW5lCQlBVE1FTF9MQ0RDX0lOVkxJTkVfSU5WRVJURUQJKDEgPDwgMTApCisjZGVmaW5lCUFUTUVMX0xDRENfSU5WQ0xLCSgxIDw8IDExKQorI2RlZmluZQkJQVRNRUxfTENEQ19JTlZDTEtfTk9STUFMCSgwIDw8IDExKQorI2RlZmluZQkJQVRNRUxfTENEQ19JTlZDTEtfSU5WRVJURUQJKDEgPDwgMTEpCisjZGVmaW5lCUFUTUVMX0xDRENfSU5WRFZBTAkoMSA8PCAxMikKKyNkZWZpbmUJCUFUTUVMX0xDRENfSU5WRFZBTF9OT1JNQUwJKDAgPDwgMTIpCisjZGVmaW5lCQlBVE1FTF9MQ0RDX0lOVkRWQUxfSU5WRVJURUQJKDEgPDwgMTIpCisjZGVmaW5lCUFUTUVMX0xDRENfQ0xLTU9ECSgxIDw8IDE1KQorI2RlZmluZQkJQVRNRUxfTENEQ19DTEtNT0RfQUNUSVZFRElTUExBWQkoMCA8PCAxNSkKKyNkZWZpbmUJCUFUTUVMX0xDRENfQ0xLTU9EX0FMV0FZU0FDVElWRQkoMSA8PCAxNSkKKyNkZWZpbmUJQVRNRUxfTENEQ19NRU1PUgkoMSA8PCAzMSkKKyNkZWZpbmUJCUFUTUVMX0xDRENfTUVNT1JfQklHCQkoMCA8PCAzMSkKKyNkZWZpbmUJCUFUTUVMX0xDRENfTUVNT1JfTElUVExFCQkoMSA8PCAzMSkKKworI2RlZmluZSBBVE1FTF9MQ0RDX1RJTTEJCTB4MDgwOAorI2RlZmluZQlBVE1FTF9MQ0RDX1ZGUAkJKDB4ZmYgPDwgIDApCisjZGVmaW5lCUFUTUVMX0xDRENfVkJQX09GRlNFVAkJOAorI2RlZmluZQlBVE1FTF9MQ0RDX1ZCUAkJKDB4ZmYgPDwgIEFUTUVMX0xDRENfVkJQX09GRlNFVCkKKyNkZWZpbmUJQVRNRUxfTENEQ19WUFdfT0ZGU0VUCQkxNgorI2RlZmluZQlBVE1FTF9MQ0RDX1ZQVwkJKDB4M2YgPDwgQVRNRUxfTENEQ19WUFdfT0ZGU0VUKQorI2RlZmluZQlBVE1FTF9MQ0RDX1ZIRExZX09GRlNFVAkJMjQKKyNkZWZpbmUJQVRNRUxfTENEQ19WSERMWQkoMHhmICA8PCBBVE1FTF9MQ0RDX1ZIRExZX09GRlNFVCkKKworI2RlZmluZSBBVE1FTF9MQ0RDX1RJTTIJCTB4MDgwYworI2RlZmluZQlBVE1FTF9MQ0RDX0hCUAkJKDB4ZmYgIDw8ICAwKQorI2RlZmluZQlBVE1FTF9MQ0RDX0hQV19PRkZTRVQJCTgKKyNkZWZpbmUJQVRNRUxfTENEQ19IUFcJCSgweDNmICA8PCAgQVRNRUxfTENEQ19IUFdfT0ZGU0VUKQorI2RlZmluZQlBVE1FTF9MQ0RDX0hGUF9PRkZTRVQJCTIxCisjZGVmaW5lCUFUTUVMX0xDRENfSEZQCQkoMHg3ZmYgPDwgQVRNRUxfTENEQ19IRlBfT0ZGU0VUKQorCisjZGVmaW5lIEFUTUVMX0xDRENfTENERlJNQ0ZHCTB4MDgxMAorI2RlZmluZQlBVE1FTF9MQ0RDX0xJTkVWQUwJKDB4N2ZmIDw8ICAwKQorI2RlZmluZQlBVE1FTF9MQ0RDX0hPWlZBTF9PRkZTRVQJMjEKKyNkZWZpbmUJQVRNRUxfTENEQ19IT1pWQUwJKDB4N2ZmIDw8IEFUTUVMX0xDRENfSE9aVkFMX09GRlNFVCkKKworI2RlZmluZSBBVE1FTF9MQ0RDX0ZJRk8JCTB4MDgxNAorI2RlZmluZQlBVE1FTF9MQ0RDX0ZJRk9USAkoMHhmZmZmKQorCisjZGVmaW5lIEFUTUVMX0xDRENfTVZBTAkJMHgwODE4CisKKyNkZWZpbmUgQVRNRUxfTENEQ19EUDFfMgkweDA4MWMKKyNkZWZpbmUgQVRNRUxfTENEQ19EUDRfNwkweDA4MjAKKyNkZWZpbmUgQVRNRUxfTENEQ19EUDNfNQkweDA4MjQKKyNkZWZpbmUgQVRNRUxfTENEQ19EUDJfMwkweDA4MjgKKyNkZWZpbmUgQVRNRUxfTENEQ19EUDVfNwkweDA4MmMKKyNkZWZpbmUgQVRNRUxfTENEQ19EUDNfNAkweDA4MzAKKyNkZWZpbmUgQVRNRUxfTENEQ19EUDRfNQkweDA4MzQKKyNkZWZpbmUgQVRNRUxfTENEQ19EUDZfNwkweDA4MzgKKyNkZWZpbmUJQVRNRUxfTENEQ19EUDFfMl9WQUwJKDB4ZmYpCisjZGVmaW5lCUFUTUVMX0xDRENfRFA0XzdfVkFMCSgweGZmZmZmZmYpCisjZGVmaW5lCUFUTUVMX0xDRENfRFAzXzVfVkFMCSgweGZmZmZmKQorI2RlZmluZQlBVE1FTF9MQ0RDX0RQMl8zX1ZBTAkoMHhmZmYpCisjZGVmaW5lCUFUTUVMX0xDRENfRFA1XzdfVkFMCSgweGZmZmZmZmYpCisjZGVmaW5lCUFUTUVMX0xDRENfRFAzXzRfVkFMCSgweGZmZmYpCisjZGVmaW5lCUFUTUVMX0xDRENfRFA0XzVfVkFMCSgweGZmZmZmKQorI2RlZmluZQlBVE1FTF9MQ0RDX0RQNl83X1ZBTAkoMHhmZmZmZmZmKQorCisjZGVmaW5lIEFUTUVMX0xDRENfUFdSQ09OCTB4MDgzYworI2RlZmluZQlBVE1FTF9MQ0RDX1BXUgkJKDEgICAgPDwgIDApCisjZGVmaW5lCUFUTUVMX0xDRENfR1VBUkRUX09GRlNFVAkxCisjZGVmaW5lCUFUTUVMX0xDRENfR1VBUkRUCSgweDdmIDw8ICBBVE1FTF9MQ0RDX0dVQVJEVF9PRkZTRVQpCisjZGVmaW5lCUFUTUVMX0xDRENfQlVTWQkJKDEgICAgPDwgMzEpCisKKyNkZWZpbmUgQVRNRUxfTENEQ19DT05UUkFTVF9DVFIJMHgwODQwCisjZGVmaW5lCUFUTUVMX0xDRENfUFMJCSgzIDw8IDApCisjZGVmaW5lCQlBVE1FTF9MQ0RDX1BTX0RJVjEJCSgwIDw8IDApCisjZGVmaW5lCQlBVE1FTF9MQ0RDX1BTX0RJVjIJCSgxIDw8IDApCisjZGVmaW5lCQlBVE1FTF9MQ0RDX1BTX0RJVjQJCSgyIDw8IDApCisjZGVmaW5lCQlBVE1FTF9MQ0RDX1BTX0RJVjgJCSgzIDw8IDApCisjZGVmaW5lCUFUTUVMX0xDRENfUE9MCQkoMSA8PCAyKQorI2RlZmluZQkJQVRNRUxfTENEQ19QT0xfTkVHQVRJVkUJCSgwIDw8IDIpCisjZGVmaW5lCQlBVE1FTF9MQ0RDX1BPTF9QT1NJVElWRQkJKDEgPDwgMikKKyNkZWZpbmUJQVRNRUxfTENEQ19FTkEJCSgxIDw8IDMpCisjZGVmaW5lCQlBVE1FTF9MQ0RDX0VOQV9QV01ESVNBQkxFCSgwIDw8IDMpCisjZGVmaW5lCQlBVE1FTF9MQ0RDX0VOQV9QV01FTkFCTEUJKDEgPDwgMykKKworI2RlZmluZSBBVE1FTF9MQ0RDX0NPTlRSQVNUX1ZBTAkweDA4NDQKKyNkZWZpbmUJQVRNRUxfTENEQ19DVkFMCSgweGZmKQorCisjZGVmaW5lIEFUTUVMX0xDRENfSUVSCQkweDA4NDgKKyNkZWZpbmUgQVRNRUxfTENEQ19JRFIJCTB4MDg0YworI2RlZmluZSBBVE1FTF9MQ0RDX0lNUgkJMHgwODUwCisjZGVmaW5lIEFUTUVMX0xDRENfSVNSCQkweDA4NTQKKyNkZWZpbmUgQVRNRUxfTENEQ19JQ1IJCTB4MDg1OAorI2RlZmluZQlBVE1FTF9MQ0RDX0xOSQkJKDEgPDwgMCkKKyNkZWZpbmUJQVRNRUxfTENEQ19MU1RMTkkJKDEgPDwgMSkKKyNkZWZpbmUJQVRNRUxfTENEQ19FT0ZJCQkoMSA8PCAyKQorI2RlZmluZQlBVE1FTF9MQ0RDX1VGTFdJCSgxIDw8IDQpCisjZGVmaW5lCUFUTUVMX0xDRENfT1dSSQkJKDEgPDwgNSkKKyNkZWZpbmUJQVRNRUxfTENEQ19NRVJJCQkoMSA8PCA2KQorCisjZGVmaW5lIEFUTUVMX0xDRENfTFVUKG4pCSgweDBjMDAgKyAoKG4pKjQpKQorCisjZW5kaWYgLyogX19BVE1FTF9MQ0RDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9tYWNoNjQuaCBiL2luY2x1ZGUvdmlkZW8vbWFjaDY0LmgKaW5kZXggMDlhN2Y0YS4uYTgzMzJlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9tYWNoNjQuaAorKysgYi9pbmNsdWRlL3ZpZGVvL21hY2g2NC5oCkBAIC04ODUsNiArODg1LDcgQEAKICNkZWZpbmUgU0RSQU0JCQk0CiAjZGVmaW5lIFNHUkFNCQkJNQogI2RlZmluZSBXUkFNCQkJNgorI2RlZmluZSBTRFJBTTMyCQkJNgogCiAjZGVmaW5lIERBQ19JTlRFUk5BTAkJMHgwMAogI2RlZmluZSBEQUNfSUJNUkdCNTE0CQkweDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3Blcm1lZGlhMi5oIGIvaW5jbHVkZS92aWRlby9wZXJtZWRpYTIuaAppbmRleCBiOTVkMzYyLi45ZTQ5Yzk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL3Blcm1lZGlhMi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vcGVybWVkaWEyLmgKQEAgLTE1NCw2ICsxNTQsMTAgQEAKICNkZWZpbmUgUE0yVklfUkRfQ0xLMV9QUkVTQ0FMRQkJCQkweDIwNAogI2RlZmluZSBQTTJWSV9SRF9DTEsxX0ZFRURCQUNLCQkJCTB4MjA1CiAjZGVmaW5lIFBNMlZJX1JEX0NMSzFfUE9TVFNDQUxFCQkJCTB4MjA2CisjZGVmaW5lIFBNMlZJX1JEX01DTEtfQ09OVFJPTAkJCQkweDIwRAorI2RlZmluZSBQTTJWSV9SRF9NQ0xLX1BSRVNDQUxFCQkJCTB4MjBFCisjZGVmaW5lIFBNMlZJX1JEX01DTEtfRkVFREJBQ0sJCQkJMHgyMEYKKyNkZWZpbmUgUE0yVklfUkRfTUNMS19QT1NUU0NBTEUJCQkJMHgyMTAKICNkZWZpbmUgUE0yVklfUkRfQ1VSU09SX1BBTEVUVEUJCQkJMHgzMDMKICNkZWZpbmUgUE0yVklfUkRfQ1VSU09SX1BBVFRFUk4JCQkJMHg0MDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9wbTNmYi5oIGIvaW5jbHVkZS92aWRlby9wbTNmYi5oCmluZGV4IDk0YzdkMmQuLmQ1MmU0NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vcG0zZmIuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3BtM2ZiLmgKQEAgLTcsOSArNyw2IEBACiAgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgogICogIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgJEhlYWRlcjogL2N2c3Jvb3QvbGludXgvZHJpdmVycy92aWRlby9wbTNmYi5oLHYgMS4xIDIwMDIvMDIvMjUgMTk6MTE6MDYgbWFyY2VsbyBFeHAgJAotICoKICAqLwogCiAjaWZuZGVmIFBNM0ZCX0gKQEAgLTExMTksMTE3ICsxMTE2LDEwIEBACiAvKiAqKioqKiBwbTNmYiB1c2VmdWwgZGVmaW5lIGFuZCBtYWNybyAqKioqKiAqLwogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAotLyogcGVybWVkaWEzIC1zcGVjaWZpYyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBQTTNfU0NBTEVfVE9fQ0xPQ0socHIsIGZlLCBwbykgKCgyICogUE0zX1JFRl9DTE9DSyAqIGZlKSAvIChwciAqICgxIDw8IChwbykpKSkKLQotLyogaW4gY2FzZSBpdCdzIG5vdCBpbiBsaW51eC9wY2kuaCAqLwotI2lmbmRlZiBQQ0lfREVWSUNFX0lEXzNETEFCU19QRVJNRURJQTMKLSNkZWZpbmUgUENJX0RFVklDRV9JRF8zRExBQlNfUEVSTUVESUEzIDB4MDAwYQotI2VuZGlmCi0KLS8qIG1heCBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIGJvYXJkICovCi0jZGVmaW5lIFBNM19NQVhfQk9BUkQgNAotCiAvKiBtYXggc2l6ZSBvZiBvcHRpb25zICovCiAjZGVmaW5lIFBNM19PUFRJT05TX1NJWkUgMjU2CiAKIC8qIG1heCBzaXplIG9mIGZvbnQgbmFtZSAqLwogI2RlZmluZSBQTTNfRk9OVE5BTUVfU0laRSA0MAogCi0vKiBkbyB3ZSB3YW50IGFjY2VsZXJhdGVkIGNvbnNvbGUgICovCi0jZGVmaW5lIFBNM0ZCX1VTRV9BQ0NFTCAxCi0KLS8qIGZvciBkcml2ZXIgZGVidWdnaW5nIE9OTFkgKi8KLS8qIDAgPSBhc3NlcnQgb25seSwgMSA9IGVycm9yLCAyID0gaW5mbywgMysgPSB2ZXJib3NlICovCi0vKiBkZWZpbmUgUE0zRkJfTUFTVEVSX0RFQlVHIDEgKi8KLSNpZiBkZWZpbmVkKFBNM0ZCX01BU1RFUl9ERUJVRykgJiYgKFBNM0ZCX01BU1RFUl9ERUJVRyA+PSAzKQotI2RlZmluZSBQTTNGQl9UUkFDRQotI2VuZGlmIC8qIGRlZmluZWQoUE0zRkJfTUFTVEVSX0RFQlVHKSAmJiAoUE0zRkJfTUFTVEVSX0RFQlVHID49IDMpICovCi0KLSNpZmRlZiBQTTNGQl9NQVNURVJfREVCVUcKLSNkZWZpbmUgRFBSSU5USyhsLGEsYi4uLikgZG8geyBpZiAoKGwpIDw9IFBNM0ZCX01BU1RFUl9ERUJVRykgcHJpbnRrKCJwbTNmYjogJXM6ICIgYSwgX19GVU5DVElPTl9fICwgIyMgYik7IH0gd2hpbGUgKDApCi0jZGVmaW5lIERBU1NFUlQodCxhLGIuLi4pIGRvIHsgaWYgKCEodCkpIHByaW50aygicG0zZmI6IF9hc3NlcnQgZmFpbGVkOiAlczogIiBhLCBfX0ZVTkNUSU9OX18gLCAjIyBiKTsgfSB3aGlsZSAoMCkKLSNpZmRlZiBQTTNGQl9UUkFDRQotI2RlZmluZSBEVFJBQ0UgcHJpbnRrKCJwbTNmYjogX2VudGVyICVzXG4iLCBfX0ZVTkNUSU9OX18pCi0jZWxzZSAvKiBQTTNGQl9UUkFDRSAqLwotI2RlZmluZSBEVFJBQ0UKLSNlbmRpZiAvKiBQTTNGQl9UUkFDRSAqLwotI2Vsc2UgLyogUE0zRkJfTUFTVEVSX0RFQlVHICovCi0jZGVmaW5lIERQUklOVEsobCxhLGIuLi4pCi0jZGVmaW5lIERBU1NFUlQodCxhLGIuLi4pCi0jZGVmaW5lIERUUkFDRQotI2VuZGlmIC8qIFBNM0ZCX01BU1RFUl9ERUJVRyAqLwotCi0jaWYgZGVmaW5lZChQTTNGQl9NQVNURVJfREVCVUcpICYmIChQTTNGQl9NQVNURVJfREVCVUcgPj0gMikKLSNkZWZpbmUgUE0zX1NIT1dfQ1VSX01PREUgcG0zZmJfc2hvd19jdXJfbW9kZShsX2ZiX2luZm8pCi0jZWxzZQotI2RlZmluZSBQTTNfU0hPV19DVVJfTU9ERSAvKiBwbTNmYl9zaG93X2N1cl9tb2RlKCkgKi8KLSNlbmRpZgotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotLyogKioqKiogQSBidW5jaCBvZiByZWdpc3Rlci1hY2Nlc3MgbWFjcm8gKioqKiogKi8KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLSNkZWZpbmUgUE0zX1dSSVRFX1JFRyhyLCB2KSBmYl93cml0ZWwodiwgKGxfZmJfaW5mby0+dklPQmFzZSArIHIpKQotI2RlZmluZSBQTTNfUkVBRF9SRUcocikgZmJfcmVhZGwoKGxfZmJfaW5mby0+dklPQmFzZSArIHIpKQotCi0KLSNkZWZpbmUgZGVwdGgyYnBwKGQpICgoZCArIDdMKSAmIH43TCkKLSNkZWZpbmUgZGVwdGgyQnlQUChkKSAoZGVwdGgyYnBwKGQpIC8gOCkKLQotI2RlZmluZSBkZXB0aF9zdXBwb3J0ZWQoZCkgKChkID09IDgpIHx8IChkID09IDEyKSB8fCAoZCA9PSAxNSkgfHwgKGQgPT0gMTYpIHx8IChkPT0zMikpCi0KLQotI2RlZmluZSBQTTNfV0FJVChuKSBcCi1kb3sgXAotCXdoaWxlKFBNM19SRUFEX1JFRyhQTTNJbkZJRk9TcGFjZSk8KG4pKTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIFBNM19ERUxBWSh4KSBkbyB7IFwKLSAgICAgICAgaW50IGRlbGF5ID0geDsgXAotICAgICAgICB1bnNpZ25lZCBjaGFyIHRtcDsgXAotICAgICAgICB3aGlsZShkZWxheS0tKXt0bXAgPSBQTTNfUkVBRF9SRUcoUE0zSW5GSUZPU3BhY2UpO307IFwKLX0gd2hpbGUoMCkKLQotI2RlZmluZSBQTTNfU0xPV19XUklURV9SRUcocix2KQlcCi1kb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBEQVNTRVJUKChsX2ZiX2luZm8tPnZJT0Jhc2UgIT0gKHVuc2lnbmVkIGNoYXIqKSgtMSkpLCAibF9mYl9pbmZvLT52SU9CYXNlIG1hcHBlZCBpbiBzbG93IHdyaXRlXG4iKTsgXAotCW1iKCk7ICAgICAgICAgICAgICAgICAgIFwKLQlQTTNfV0FJVCgxKTsgICAgICAgICAgICBcCi0JbWIoKTsgICAgICAgICAgICAgICAgICAgXAotICAgIFBNM19XUklURV9SRUcocix2KTsgICAgIFwKLX0gd2hpbGUoMCkKLQotI2RlZmluZSBQTTNfU0VUX0lOREVYKGluZGV4KSBcCi1kb3sgXAotCVBNM19TTE9XX1dSSVRFX1JFRyhQTTNSRF9JbmRleEhpZ2gsKCgoaW5kZXgpPj44KSYweGZmKSk7IFwKLQlQTTNfU0xPV19XUklURV9SRUcoUE0zUkRfSW5kZXhMb3csKChpbmRleCkmMHhmZikpOyBcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUgUE0zX1dSSVRFX0RBQ19SRUcociwgdikgXAotZG8geyBcCi0gICAgIERBU1NFUlQoKGxfZmJfaW5mby0+dklPQmFzZSAhPSAodW5zaWduZWQgY2hhciopKC0xKSksICJsX2ZiX2luZm8tPnZJT0Jhc2UgbWFwcGVkIGluIHdyaXRlIGRhYyByZWdcbiIpOyBcCi0gICAgIFBNM19TRVRfSU5ERVgocik7IFwKLSAgICAgbWIoKTsgXAotICAgICBQTTNfV1JJVEVfUkVHKFBNM1JEX0luZGV4ZWREYXRhLCB2KTsgXAotfSB3aGlsZSAoMCkKLQotLyogbmV4dCBvbmUgaXMgcmVhbGx5IGEgZnVuY3Rpb24sIGFkZGVkIGFzIGEgbWFjcm8gdG8gYmUgY29uc2lzdGVudCAqLwotI2RlZmluZSBQTTNfUkVBRF9EQUNfUkVHKHIpIHBtM2ZiX3JlYWRfZGFjX3JlZyhsX2ZiX2luZm8sIHIpCi0KLQotI2RlZmluZSBQTTNfQ09MT1IoYykgXAotZG8geyBcCi0gIGlmIChsX2ZiX2luZm8tPmN1cnJlbnRfcGFyLT5kZXB0aCA9PSA4KSBcCi0gICAgeyBcCi0gICAgICBjID0gKGMgJiAweEZGKTsgXAotICAgICAgYyA9IGMgfCAoYyA8PCA4KTsgXAotICAgIH0gXAotICBpZiAoKGxfZmJfaW5mby0+Y3VycmVudF9wYXItPmRlcHRoID09IDgpIHx8IChkZXB0aDJicHAobF9mYl9pbmZvLT5jdXJyZW50X3Bhci0+ZGVwdGgpID09IDE2KSkgXAotICAgIHsgXAotICAgICAgYyA9IChjICYgMHhGRkZGKTsgXAotICAgICAgYyA9IGMgfCAoYyA8PCAxNik7IFwKLSAgICB9IFwKLX0gd2hpbGUgKDApCi0KICNlbmRpZiAvKiBQTTNGQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3RnYWZiLmggYi9pbmNsdWRlL3ZpZGVvL3RnYWZiLmgKaW5kZXggYmUyYjNlOS4uMDNkMGRiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby90Z2FmYi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vdGdhZmIuaApAQCAtMzksNiArMzksNyBAQAogI2RlZmluZQlUR0FfUkFTVEVST1BfUkVHCQkweDAwMzQKICNkZWZpbmUJVEdBX1BJWEVMU0hJRlRfUkVHCQkweDAwMzgKICNkZWZpbmUJVEdBX0RFRVBfUkVHCQkJMHgwMDUwCisjZGVmaW5lCVRHQV9TVEFSVF9SRUcJCQkweDAwNTQKICNkZWZpbmUJVEdBX1BJWEVMTUFTS19SRUcJCTB4MDA1YwogI2RlZmluZQlUR0FfQ1VSU09SX0JBU0VfUkVHCQkweDAwNjAKICNkZWZpbmUJVEdBX0hPUklaX1JFRwkJCTB4MDA2NApAQCAtMTQwLDcgKzE0MSw3IEBACiAKIAogLyoKLSAqIFVzZWZ1bCBkZWZpbmVzIGZvciBtYW5hZ2luZyB0aGUgQlQ0NjMgb24gdGhlIDI0LXBsYW5lIFRHQXMKKyAqIFVzZWZ1bCBkZWZpbmVzIGZvciBtYW5hZ2luZyB0aGUgQlQ0NjMgb24gdGhlIDI0LXBsYW5lIFRHQXMvU0ZCK3MKICAqLwogCiAjZGVmaW5lCUJUNDYzX0FERFJfTE8JCTB4MApAQCAtMTY4LDEyICsxNjksMzUgQEAKICNkZWZpbmUJQlQ0NjNfV0lORE9XX1RZUEVfQkFTRQkweDAzMDAKIAogLyoKKyAqIFVzZWZ1bCBkZWZpbmVzIGZvciBtYW5hZ2luZyB0aGUgQlQ0NTkgb24gdGhlIDgtcGxhbmUgU0ZCK3MKKyAqLworCisjZGVmaW5lCUJUNDU5X0FERFJfTE8JCTB4MAorI2RlZmluZQlCVDQ1OV9BRERSX0hJCQkweDEKKyNkZWZpbmUJQlQ0NTlfUkVHX0FDQwkJMHgyCisjZGVmaW5lCUJUNDU5X1BBTEVUVEUJCTB4MworCisjZGVmaW5lCUJUNDU5X0NVUl9DTFJfMQkJMHgwMTgxCisjZGVmaW5lCUJUNDU5X0NVUl9DTFJfMgkJMHgwMTgyCisjZGVmaW5lCUJUNDU5X0NVUl9DTFJfMwkJMHgwMTgzCisKKyNkZWZpbmUJQlQ0NTlfQ01EX1JFR18wCQkweDAyMDEKKyNkZWZpbmUJQlQ0NTlfQ01EX1JFR18xCQkweDAyMDIKKyNkZWZpbmUJQlQ0NTlfQ01EX1JFR18yCQkweDAyMDMKKworI2RlZmluZQlCVDQ1OV9SRUFEX01BU0sJCTB4MDIwNAorCisjZGVmaW5lCUJUNDU5X0JMSU5LX01BU0sJMHgwMjA2CisKKyNkZWZpbmUJQlQ0NTlfQ1VSX0NNRF9SRUcJMHgwMzAwCisKKy8qCiAgKiBUaGUgZnJhbWVidWZmZXIgZHJpdmVyIHByaXZhdGUgZGF0YS4KICAqLwogCiBzdHJ1Y3QgdGdhX3BhciB7Ci0JLyogUENJIGRldmljZS4gICovCi0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJLyogUENJL1RDIGRldmljZS4gICovCisJc3RydWN0IGRldmljZSAqZGV2OwogCiAJLyogRGV2aWNlIGRlcGVuZGVudCBpbmZvcm1hdGlvbi4gICovCiAJdm9pZCBfX2lvbWVtICp0Z2FfbWVtX2Jhc2U7CkBAIC0yMzUsNCArMjU5LDIxIEBACiAJVEdBX1dSSVRFX1JFRyhwYXIsIG0gPDwgMTAgfCB2LCBUR0FfUkFNREFDX1JFRyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorQlQ0NTlfTE9BRF9BRERSKHN0cnVjdCB0Z2FfcGFyICpwYXIsIHUxNiBhKQoreworCVRHQV9XUklURV9SRUcocGFyLCBCVDQ1OV9BRERSX0xPIDw8IDIsIFRHQV9SQU1EQUNfU0VUVVBfUkVHKTsKKwlUR0FfV1JJVEVfUkVHKHBhciwgYSAmIDB4ZmYsIFRHQV9SQU1EQUNfUkVHKTsKKwlUR0FfV1JJVEVfUkVHKHBhciwgQlQ0NTlfQUREUl9ISSA8PCAyLCBUR0FfUkFNREFDX1NFVFVQX1JFRyk7CisJVEdBX1dSSVRFX1JFRyhwYXIsIGEgPj4gOCwgVEdBX1JBTURBQ19SRUcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0JUNDU5X1dSSVRFKHN0cnVjdCB0Z2FfcGFyICpwYXIsIHUzMiBtLCB1MTYgYSwgdTggdikKK3sKKwlCVDQ1OV9MT0FEX0FERFIocGFyLCBhKTsKKwlUR0FfV1JJVEVfUkVHKHBhciwgbSA8PCAyLCBUR0FfUkFNREFDX1NFVFVQX1JFRyk7CisJVEdBX1dSSVRFX1JFRyhwYXIsIHYsIFRHQV9SQU1EQUNfUkVHKTsKK30KKwogI2VuZGlmIC8qIFRHQUZCX0ggKi8KZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCBlYmUwNGY1Li5hOWU5OWY4IDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0xNDMsOSArMTQzLDcgQEAKIAkgIHF1ZXVlcyBldmVyeSBtZXNzYWdlIGhhcyBhIHByaW9yaXR5IHdoaWNoIGRlY2lkZXMgYWJvdXQgc3VjY2Vzc2lvbgogCSAgb2YgcmVjZWl2aW5nIGl0IGJ5IGEgcHJvY2Vzcy4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBhbmQgcnVuCiAJICBwcm9ncmFtcyB3cml0dGVuIGUuZy4gZm9yIFNvbGFyaXMgd2l0aCB1c2Ugb2YgaXRzIFBPU0lYIG1lc3NhZ2UKLQkgIHF1ZXVlcyAoZnVuY3Rpb25zIG1xXyopIHNheSBZIGhlcmUuIFRvIHVzZSB0aGlzIGZlYXR1cmUgeW91IHdpbGwKLQkgIGFsc28gbmVlZCBtcXVldWUgbGlicmFyeSwgYXZhaWxhYmxlIGZyb20KLQkgIDxodHRwOi8vd3d3Lm1hdC51bmkudG9ydW4ucGwvfndyb25hL3Bvc2l4X2lwYy8+CisJICBxdWV1ZXMgKGZ1bmN0aW9ucyBtcV8qKSBzYXkgWSBoZXJlLgogCiAJICBQT1NJWCBtZXNzYWdlIHF1ZXVlcyBhcmUgdmlzaWJsZSBhcyBhIGZpbGVzeXN0ZW0gY2FsbGVkICdtcXVldWUnCiAJICBhbmQgY2FuIGJlIG1vdW50ZWQgc29tZXdoZXJlIGlmIHlvdSB3YW50IHRvIGRvIGZpbGVzeXN0ZW0KQEAgLTI2Niw2ICsyNjQsMjMgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYWNjZXNzIHRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlCiAJICB0aHJvdWdoIC9wcm9jL2NvbmZpZy5nei4KIAorY29uZmlnIExPR19CVUZfU0hJRlQKKwlpbnQgIktlcm5lbCBsb2cgYnVmZmVyIHNpemUgKDE2ID0+IDY0S0IsIDE3ID0+IDEyOEtCKSIKKwlyYW5nZSAxMiAyMQorCWRlZmF1bHQgMTcgaWYgUzM5MCB8fCBMT0NLREVQCisJZGVmYXVsdCAxNiBpZiBYODZfTlVNQVEgfHwgSUE2NAorCWRlZmF1bHQgMTUgaWYgU01QCisJZGVmYXVsdCAxNAorCWhlbHAKKwkgIFNlbGVjdCBrZXJuZWwgbG9nIGJ1ZmZlciBzaXplIGFzIGEgcG93ZXIgb2YgMi4KKwkgIERlZmF1bHRzIGFuZCBFeGFtcGxlczoKKwkgIAkgICAgIDE3ID0+IDEyOCBLQiBmb3IgUy8zOTAKKwkJICAgICAxNiA9PiA2NCBLQiBmb3IgeDg2IE5VTUFRIG9yIElBLTY0CisJICAgICAgICAgICAgIDE1ID0+IDMyIEtCIGZvciBTTVAKKwkgICAgICAgICAgICAgMTQgPT4gMTYgS0IgZm9yIHVuaXByb2Nlc3NvcgorCQkgICAgIDEzID0+ICA4IEtCCisJCSAgICAgMTIgPT4gIDQgS0IKKwogY29uZmlnIENQVVNFVFMKIAlib29sICJDcHVzZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNNUApAQCAtMjkxLDcgKzMwNiw3IEBACiAJICByZWxlYXNlcy4KIAogCSAgSWYgZW5hYmxlZCwgdGhpcyBvcHRpb24gd2lsbCBhbHNvIG1vdmUgYW55IGRldmljZSBzdHJ1Y3R1cmVzCi0JICB0aGF0IGJlbG9uZyB0byBhIGNsYXNzLCBiYWNrIGludG8gdGhlIC9zeXMvY2xhc3MgaGVpcmFjaHksIGluCisJICB0aGF0IGJlbG9uZyB0byBhIGNsYXNzLCBiYWNrIGludG8gdGhlIC9zeXMvY2xhc3MgaGllcmFyY2h5LCBpbgogCSAgb3JkZXIgdG8gc3VwcG9ydCBvbGRlciB2ZXJzaW9ucyBvZiB1ZGV2LgogCiAJICBJZiB5b3UgYXJlIHVzaW5nIGEgZGlzdHJvIHRoYXQgd2FzIHJlbGVhc2VkIGluIDIwMDYgb3IgbGF0ZXIsCkBAIC00NjAsMTMgKzQ3NSw1MyBAQAogCSAgc3VwcG9ydCBmb3IgImZhc3QgdXNlcnNwYWNlIG11dGV4ZXMiLiAgVGhlIHJlc3VsdGluZyBrZXJuZWwgbWF5IG5vdAogCSAgcnVuIGdsaWJjLWJhc2VkIGFwcGxpY2F0aW9ucyBjb3JyZWN0bHkuCiAKK2NvbmZpZyBBTk9OX0lOT0RFUworCWJvb2wgIkVuYWJsZSBhbm9ueW1vdXMgaW5vZGUgc291cmNlIiBpZiBFTUJFRERFRAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIEFub255bW91cyBpbm9kZSBzb3VyY2UgZm9yIHBzZXVkby1maWxlcyBsaWtlIGVwb2xsLCBzaWduYWxmZCwKKwkgIHRpbWVyZmQgYW5kIGV2ZW50ZmQuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBFUE9MTAogCWJvb2wgIkVuYWJsZSBldmVudHBvbGwgc3VwcG9ydCIgaWYgRU1CRURERUQKIAlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEFOT05fSU5PREVTCiAJaGVscAogCSAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiZSBidWlsdCB3aXRob3V0CiAJICBzdXBwb3J0IGZvciBlcG9sbCBmYW1pbHkgb2Ygc3lzdGVtIGNhbGxzLgogCitjb25maWcgU0lHTkFMRkQKKwlib29sICJFbmFibGUgc2lnbmFsZmQoKSBzeXN0ZW0gY2FsbCIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIEFOT05fSU5PREVTCisJZGVmYXVsdCB5CisJaGVscAorCSAgRW5hYmxlIHRoZSBzaWduYWxmZCgpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIHJlY2VpdmUgc2lnbmFscworCSAgb24gYSBmaWxlIGRlc2NyaXB0b3IuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBUSU1FUkZECisJYm9vbCAiRW5hYmxlIHRpbWVyZmQoKSBzeXN0ZW0gY2FsbCIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIEFOT05fSU5PREVTCisJZGVmYXVsdCB5CisJaGVscAorCSAgRW5hYmxlIHRoZSB0aW1lcmZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gcmVjZWl2ZSB0aW1lcgorCSAgZXZlbnRzIG9uIGEgZmlsZSBkZXNjcmlwdG9yLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgRVZFTlRGRAorCWJvb2wgIkVuYWJsZSBldmVudGZkKCkgc3lzdGVtIGNhbGwiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBBTk9OX0lOT0RFUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIEVuYWJsZSB0aGUgZXZlbnRmZCgpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIHJlY2VpdmUgYm90aAorCSAga2VybmVsIG5vdGlmaWNhdGlvbiAoaWUuIEtBSU8pIG9yIHVzZXJzcGFjZSBub3RpZmljYXRpb25zLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCiBjb25maWcgU0hNRU0KIAlib29sICJVc2UgZnVsbCBzaG1lbSBmaWxlc3lzdGVtIiBpZiBFTUJFRERFRAogCWRlZmF1bHQgeQpAQCAtNDg3LDYgKzU0MiwxNiBAQAogCSAgb24gRU1CRURERUQgc3lzdGVtcy4gIC9wcm9jL3Ztc3RhdCB3aWxsIG9ubHkgc2hvdyBwYWdlIGNvdW50cwogCSAgaWYgVk0gZXZlbnQgY291bnRlcnMgYXJlIGRpc2FibGVkLgogCitjb25maWcgU0xVQl9ERUJVRworCWRlZmF1bHQgeQorCWJvb2wgIkVuYWJsZSBTTFVCIGRlYnVnZ2luZyBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gU0xVQgorCWhlbHAKKwkgIFNMVUIgaGFzIGV4dGVuc2l2ZSBkZWJ1ZyBzdXBwb3J0IGZlYXR1cmVzLiBEaXNhYmxpbmcgdGhlc2UgY2FuCisJICByZXN1bHQgaW4gc2lnbmlmaWNhbnQgc2F2aW5ncyBpbiBjb2RlIHNpemUuIFRoaXMgYWxzbyBkaXNhYmxlcworCSAgU0xVQiBzeXNmcyBzdXBwb3J0LiAvc3lzL3NsYWIgd2lsbCBub3QgZXhpc3QgYW5kIHRoZXJlIHdpbGwgYmUKKwkgIG5vIHN1cHBvcnQgZm9yIGNhY2hlIHZhbGlkYXRpb24gZXRjLgorCiBjaG9pY2UKIAlwcm9tcHQgIkNob29zZSBTTEFCIGFsbG9jYXRvciIKIAlkZWZhdWx0IFNMQUIKQEAgLTQ5NywzMyArNTYyLDI4IEBACiAJYm9vbCAiU0xBQiIKIAloZWxwCiAJICBUaGUgcmVndWxhciBzbGFiIGFsbG9jYXRvciB0aGF0IGlzIGVzdGFibGlzaGVkIGFuZCBrbm93biB0byB3b3JrCi0JICB3ZWxsIGluIGFsbCBlbnZpcm9ubWVudHMuIEl0IG9yZ2FuaXplcyBjaGFjaGUgaG90IG9iamVjdHMgaW4KKwkgIHdlbGwgaW4gYWxsIGVudmlyb25tZW50cy4gSXQgb3JnYW5pemVzIGNhY2hlIGhvdCBvYmplY3RzIGluCiAJICBwZXIgY3B1IGFuZCBwZXIgbm9kZSBxdWV1ZXMuIFNMQUIgaXMgdGhlIGRlZmF1bHQgY2hvaWNlIGZvcgotCSAgc2xhYiBhbGxvY2F0b3IuCisJICBhIHNsYWIgYWxsb2NhdG9yLgogCiBjb25maWcgU0xVQgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmICFBUkNIX1VTRVNfU0xBQl9QQUdFX1NUUlVDVAogCWJvb2wgIlNMVUIgKFVucXVldWVkIEFsbG9jYXRvcikiCiAJaGVscAogCSAgIFNMVUIgaXMgYSBzbGFiIGFsbG9jYXRvciB0aGF0IG1pbmltaXplcyBjYWNoZSBsaW5lIHVzYWdlCiAJICAgaW5zdGVhZCBvZiBtYW5hZ2luZyBxdWV1ZXMgb2YgY2FjaGVkIG9iamVjdHMgKFNMQUIgYXBwcm9hY2gpLgogCSAgIFBlciBjcHUgY2FjaGluZyBpcyByZWFsaXplZCB1c2luZyBzbGFicyBvZiBvYmplY3RzIGluc3RlYWQKIAkgICBvZiBxdWV1ZXMgb2Ygb2JqZWN0cy4gU0xVQiBjYW4gdXNlIG1lbW9yeSBlZmZpY2llbnRseQotCSAgIHdheSBhbmQgaGFzIGVuaGFuY2VkIGRpYWdub3N0aWNzLgorCSAgIGFuZCBoYXMgZW5oYW5jZWQgZGlhZ25vc3RpY3MuCiAKIGNvbmZpZyBTTE9CCi0jCi0jCVNMT0IgY2Fubm90IHN1cHBvcnQgU01QIGJlY2F1c2UgU0xBQl9ERVNUUk9ZX0JZX1JDVSBkb2VzIG5vdCB3b3JrCi0jCXByb3Blcmx5LgotIwotCWRlcGVuZHMgb24gRU1CRURERUQgJiYgIVNNUCAmJiAhU1BBUlNFTUVNCisJZGVwZW5kcyBvbiBFTUJFRERFRCAmJiAhU1BBUlNFTUVNCiAJYm9vbCAiU0xPQiAoU2ltcGxlIEFsbG9jYXRvcikiCiAJaGVscAogCSAgIFNMT0IgcmVwbGFjZXMgdGhlIFNMQUIgYWxsb2NhdG9yIHdpdGggYSBkcmFzdGljYWxseSBzaW1wbGVyCi0JICAgYWxsb2NhdG9yLiAgU0xPQiBpcyBtb3JlIHNwYWNlIGVmZmljaWVudCB0aGF0IFNMQUIgYnV0IGRvZXMgbm90Ci0JICAgc2NhbGUgd2VsbCAoc2luZ2xlIGxvY2sgZm9yIGFsbCBvcGVyYXRpb25zKSBhbmQgaXMgbW9yZSBzdXNjZXB0aWJsZQotCSAgIHRvIGZyYWdtZW50YXRpb24uIFNMT0IgaXQgaXMgYSBncmVhdCBjaG9pY2UgdG8gcmVkdWNlCi0JICAgbWVtb3J5IHVzYWdlIGFuZCBjb2RlIHNpemUgZm9yIGVtYmVkZGVkIHN5c3RlbXMuCisJICAgYWxsb2NhdG9yLiAgU0xPQiBpcyBtb3JlIHNwYWNlIGVmZmljaWVudCB0aGFuIFNMQUIgYnV0IGRvZXMgbm90CisJICAgc2NhbGUgd2VsbCAoc2luZ2xlIGxvY2sgZm9yIGFsbCBvcGVyYXRpb25zKSBhbmQgaXMgYWxzbyBoaWdobHkKKwkgICBzdXNjZXB0aWJsZSB0byBmcmFnbWVudGF0aW9uLiBTTFVCIGNhbiBhY2NvbXBsaXNoIGEgaGlnaGVyIG9iamVjdAorCSAgIGRlbnNpdHkuIEl0IGlzIHVzdWFsbHkgYmV0dGVyIHRvIHVzZSBTTFVCIGluc3RlYWQgb2YgU0xPQi4KIAogZW5kY2hvaWNlCiAKZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzLmMgYi9pbml0L2RvX21vdW50cy5jCmluZGV4IGRjMWVjMDguLjQ2ZmU0MDcgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzLmMKKysrIGIvaW5pdC9kb19tb3VudHMuYwpAQCAtNyw4ICs3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L25mc19mc19zYi5oPgpAQCAtMzA3LDE3ICszMDksMjEgQEAKIAkgICAgICAgIC8qCiAJCSAqIEFsbG93IHRoZSB1c2VyIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZmFpbGVkIHN5c19vcGVuCiAJCSAqIGFuZCBiYWQgc3VwZXJibG9jayBvbiByb290IGRldmljZS4KKwkJICogYW5kIGdpdmUgdGhlbSBhIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZSBkZXZpY2VzCiAJCSAqLwogI2lmZGVmIENPTkZJR19CTE9DSwogCQlfX2JkZXZuYW1lKFJPT1RfREVWLCBiKTsKICNlbmRpZgogCQlwcmludGsoIlZGUzogQ2Fubm90IG9wZW4gcm9vdCBkZXZpY2UgXCIlc1wiIG9yICVzXG4iLAogCQkJCXJvb3RfZGV2aWNlX25hbWUsIGIpOwotCQlwcmludGsoIlBsZWFzZSBhcHBlbmQgYSBjb3JyZWN0IFwicm9vdD1cIiBib290IG9wdGlvblxuIik7CisJCXByaW50aygiUGxlYXNlIGFwcGVuZCBhIGNvcnJlY3QgXCJyb290PVwiIGJvb3Qgb3B0aW9uOyBoZXJlIGFyZSB0aGUgYXZhaWxhYmxlIHBhcnRpdGlvbnM6XG4iKTsKIAorCQlwcmludGtfYWxsX3BhcnRpdGlvbnMoKTsKIAkJcGFuaWMoIlZGUzogVW5hYmxlIHRvIG1vdW50IHJvb3QgZnMgb24gJXMiLCBiKTsKIAl9CiAKKwlwcmludGsoIkxpc3Qgb2YgYWxsIHBhcnRpdGlvbnM6XG4iKTsKKwlwcmludGtfYWxsX3BhcnRpdGlvbnMoKTsKIAlwcmludGsoIk5vIGZpbGVzeXN0ZW0gY291bGQgbW91bnQgcm9vdCwgdHJpZWQ6ICIpOwogCWZvciAocCA9IGZzX25hbWVzOyAqcDsgcCArPSBzdHJsZW4ocCkrMSkKIAkJcHJpbnRrKCIgJXMiLCBwKTsKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggMGUyMmY0MC4uZWI4YmRiYSAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+CkBAIC05NCw3ICs5NSw2IEBACiBleHRlcm4gdm9pZCBwcmlvX3RyZWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHJhZGl4X3RyZWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKTsKLWV4dGVybiB2b2lkIHByZXBhcmVfbmFtZXNwYWNlKHZvaWQpOwogI2lmZGVmCUNPTkZJR19BQ1BJCiBleHRlcm4gdm9pZCBhY3BpX2Vhcmx5X2luaXQodm9pZCk7CiAjZWxzZQpAQCAtNDIzLDExICs0MjMsMTUgQEAKICAqIGdjYy0zLjQgYWNjaWRlbnRhbGx5IGlubGluZXMgdGhpcyBmdW5jdGlvbiwgc28gdXNlIG5vaW5saW5lLgogICovCiAKLXN0YXRpYyB2b2lkIG5vaW5saW5lIHJlc3RfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgbm9pbmxpbmUgX19pbml0X3JlZm9rIHJlc3RfaW5pdCh2b2lkKQogCV9fcmVsZWFzZXMoa2VybmVsX2xvY2spCiB7CisJaW50IHBpZDsKKwogCWtlcm5lbF90aHJlYWQoa2VybmVsX2luaXQsIE5VTEwsIENMT05FX0ZTIHwgQ0xPTkVfU0lHSEFORCk7CiAJbnVtYV9kZWZhdWx0X3BvbGljeSgpOworCXBpZCA9IGtlcm5lbF90aHJlYWQoa3RocmVhZGQsIE5VTEwsIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMpOworCWt0aHJlYWRkX3Rhc2sgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCiAJLyoKQEAgLTY0OSw2ICs2NTMsNyBAQAogCWludCBjb3VudCA9IHByZWVtcHRfY291bnQoKTsKIAogCWZvciAoY2FsbCA9IF9faW5pdGNhbGxfc3RhcnQ7IGNhbGwgPCBfX2luaXRjYWxsX2VuZDsgY2FsbCsrKSB7CisJCWt0aW1lX3QgdDAsIHQxLCBkZWx0YTsKIAkJY2hhciAqbXNnID0gTlVMTDsKIAkJY2hhciBtc2didWZbNDBdOwogCQlpbnQgcmVzdWx0OwpAQCAtNjU4LDEwICs2NjMsMjYgQEAKIAkJCXByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKCI6ICVzKCkiLAogCQkJCQkodW5zaWduZWQgbG9uZykgKmNhbGwpOwogCQkJcHJpbnRrKCJcbiIpOworCQkJdDAgPSBrdGltZV9nZXQoKTsKIAkJfQogCiAJCXJlc3VsdCA9ICgqY2FsbCkoKTsKIAorCQlpZiAoaW5pdGNhbGxfZGVidWcpIHsKKwkJCXQxID0ga3RpbWVfZ2V0KCk7CisJCQlkZWx0YSA9IGt0aW1lX3N1Yih0MSwgdDApOworCisJCQlwcmludGsoImluaXRjYWxsIDB4JXAiLCAqY2FsbCk7CisJCQlwcmludF9mbl9kZXNjcmlwdG9yX3N5bWJvbCgiOiAlcygpIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpICpjYWxsKTsKKwkJCXByaW50aygiIHJldHVybmVkICVkLlxuIiwgcmVzdWx0KTsKKworCQkJcHJpbnRrKCJpbml0Y2FsbCAweCVwIHJhbiBmb3IgJUxkIG1zZWNzOiAiLAorCQkJCSpjYWxsLCAodW5zaWduZWQgbG9uZyBsb25nKWRlbHRhLnR2NjQgPj4gMjApOworCQkJcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woIiVzKClcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcpICpjYWxsKTsKKwkJfQorCiAJCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYgJiYgaW5pdGNhbGxfZGVidWcpIHsKIAkJCXNwcmludGYobXNnYnVmLCAiZXJyb3IgY29kZSAlZCIsIHJlc3VsdCk7CiAJCQltc2cgPSBtc2didWY7CkBAIC03ODAsNiArODAxLDcgQEAKIAkgKi8KIAlpbml0X3BpZF9ucy5jaGlsZF9yZWFwZXIgPSBjdXJyZW50OwogCisJX19zZXRfc3BlY2lhbF9waWRzKDEsIDEpOwogCWNhZF9waWQgPSB0YXNrX3BpZChjdXJyZW50KTsKIAogCXNtcF9wcmVwYXJlX2NwdXMobWF4X2NwdXMpOwpkaWZmIC0tZ2l0IGEvaXBjL2NvbXBhdC5jIGIvaXBjL2NvbXBhdC5jCmluZGV4IGZhMTgxNDEuLjhiNDRhYTkgMTAwNjQ0Ci0tLSBhL2lwYy9jb21wYXQuYworKysgYi9pcGMvY29tcGF0LmMKQEAgLTU0Miw2ICs1NDIsOCBAQAogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1cDY0LCBzaXplb2YoKnVwNjQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHNtaS0+c2htbWF4ID4gSU5UX01BWCkKKwkJc21pLT5zaG1tYXggPSBJTlRfTUFYOwogCWVyciAgPSBfX3B1dF91c2VyKHNtaS0+c2htbWF4LCAmdXA2NC0+c2htbWF4KTsKIAllcnIgfD0gX19wdXRfdXNlcihzbWktPnNobW1pbiwgJnVwNjQtPnNobW1pbik7CiAJZXJyIHw9IF9fcHV0X3VzZXIoc21pLT5zaG1tbmksICZ1cDY0LT5zaG1tbmkpOwpAQCAtNTU3LDYgKzU1OSw4IEBACiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVwLCBzaXplb2YoKnVwKSkpCiAJCXJldHVybiAtRUZBVUxUOworCWlmIChzbWktPnNobW1heCA+IElOVF9NQVgpCisJCXNtaS0+c2htbWF4ID0gSU5UX01BWDsKIAllcnIgID0gX19wdXRfdXNlcihzbWktPnNobW1heCwgJnVwLT5zaG1tYXgpOwogCWVyciB8PSBfX3B1dF91c2VyKHNtaS0+c2htbWluLCAmdXAtPnNobW1pbik7CiAJZXJyIHw9IF9fcHV0X3VzZXIoc21pLT5zaG1tbmksICZ1cC0+c2htbW5pKTsKZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCBkMTc4MjFkLi5hMjQyYzgzIDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC0yMTUsOCArMjE1LDcgQEAKIHsKIAlzdHJ1Y3QgbXF1ZXVlX2lub2RlX2luZm8gKnAgPSAoc3RydWN0IG1xdWV1ZV9pbm9kZV9pbmZvICopIGZvbzsKIAotCWlmIChmbGFncyAmIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKLQkJaW5vZGVfaW5pdF9vbmNlKCZwLT52ZnNfaW5vZGUpOworCWlub2RlX2luaXRfb25jZSgmcC0+dmZzX2lub2RlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpbm9kZSAqbXF1ZXVlX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC02ODEsNiArNjgwLDcgQEAKIAogCWlmIChvZmxhZyAmIE9fQ1JFQVQpIHsKIAkJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgewkvKiBlbnRyeSBhbHJlYWR5IGV4aXN0cyAqLworCQkJYXVkaXRfaW5vZGUobmFtZSwgZGVudHJ5LT5kX2lub2RlKTsKIAkJCWVycm9yID0gLUVFWElTVDsKIAkJCWlmIChvZmxhZyAmIE9fRVhDTCkKIAkJCQlnb3RvIG91dDsKQEAgLTY5Myw2ICs2OTMsNyBAQAogCQllcnJvciA9IC1FTk9FTlQ7CiAJCWlmICghZGVudHJ5LT5kX2lub2RlKQogCQkJZ290byBvdXQ7CisJCWF1ZGl0X2lub2RlKG5hbWUsIGRlbnRyeS0+ZF9pbm9kZSk7CiAJCWZpbHAgPSBkb19vcGVuKGRlbnRyeSwgb2ZsYWcpOwogCX0KIApAQCAtODQwLDYgKzg0MSw3IEBACiAJaWYgKHVubGlrZWx5KGZpbHAtPmZfb3AgIT0gJm1xdWV1ZV9maWxlX29wZXJhdGlvbnMpKQogCQlnb3RvIG91dF9mcHV0OwogCWluZm8gPSBNUVVFVUVfSShpbm9kZSk7CisJYXVkaXRfaW5vZGUoTlVMTCwgaW5vZGUpOwogCiAJaWYgKHVubGlrZWx5KCEoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKSkKIAkJZ290byBvdXRfZnB1dDsKQEAgLTkyMyw2ICs5MjUsNyBAQAogCWlmICh1bmxpa2VseShmaWxwLT5mX29wICE9ICZtcXVldWVfZmlsZV9vcGVyYXRpb25zKSkKIAkJZ290byBvdXRfZnB1dDsKIAlpbmZvID0gTVFVRVVFX0koaW5vZGUpOworCWF1ZGl0X2lub2RlKE5VTEwsIGlub2RlKTsKIAogCWlmICh1bmxpa2VseSghKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKSkKIAkJZ290byBvdXRfZnB1dDsKZGlmZiAtLWdpdCBhL2lwYy9zZW0uYyBiL2lwYy9zZW0uYwppbmRleCBkM2UxMmVmLi45OTY0YjIyIDEwMDY0NAotLS0gYS9pcGMvc2VtLmMKKysrIGIvaXBjL3NlbS5jCkBAIC03NSw3ICs3NSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KZGlmZiAtLWdpdCBhL2lwYy91dGlsLmMgYi9pcGMvdXRpbC5jCmluZGV4IDBiNjUyMzguLjc1MzZhNzIgMTAwNjQ0Ci0tLSBhL2lwYy91dGlsLmMKKysrIGIvaXBjL3V0aWwuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NobS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tc2cuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgpAQCAtODUsNTMgKzg0LDIwIEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAotaW50IHVuc2hhcmVfaXBjcyh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsIHN0cnVjdCBpcGNfbmFtZXNwYWNlICoqbmV3X2lwYykKK3N0cnVjdCBpcGNfbmFtZXNwYWNlICpjb3B5X2lwY3ModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zKQogewotCXN0cnVjdCBpcGNfbmFtZXNwYWNlICpuZXc7Ci0KLQlpZiAodW5zaGFyZV9mbGFncyAmIENMT05FX05FV0lQQykgewotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCi0JCW5ldyA9IGNsb25lX2lwY19ucyhjdXJyZW50LT5uc3Byb3h5LT5pcGNfbnMpOwotCQlpZiAoSVNfRVJSKG5ldykpCi0JCQlyZXR1cm4gUFRSX0VSUihuZXcpOwotCi0JCSpuZXdfaXBjID0gbmV3OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgY29weV9pcGNzKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCXN0cnVjdCBpcGNfbmFtZXNwYWNlICpvbGRfbnMgPSB0c2stPm5zcHJveHktPmlwY19uczsKIAlzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbmV3X25zOwotCWludCBlcnIgPSAwOwogCi0JaWYgKCFvbGRfbnMpCi0JCXJldHVybiAwOwotCi0JZ2V0X2lwY19ucyhvbGRfbnMpOworCUJVR19PTighbnMpOworCWdldF9pcGNfbnMobnMpOwogCiAJaWYgKCEoZmxhZ3MgJiBDTE9ORV9ORVdJUEMpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIG5zOwogCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7Ci0JCWVyciA9IC1FUEVSTTsKLQkJZ290byBvdXQ7Ci0JfQorCW5ld19ucyA9IGNsb25lX2lwY19ucyhucyk7CiAKLQluZXdfbnMgPSBjbG9uZV9pcGNfbnMob2xkX25zKTsKLQlpZiAoIW5ld19ucykgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl0c2stPm5zcHJveHktPmlwY19ucyA9IG5ld19uczsKLW91dDoKLQlwdXRfaXBjX25zKG9sZF9ucyk7Ci0JcmV0dXJuIGVycjsKKwlwdXRfaXBjX25zKG5zKTsKKwlyZXR1cm4gbmV3X25zOwogfQogCiB2b2lkIGZyZWVfaXBjX25zKHN0cnVjdCBrcmVmICprcmVmKQpAQCAtMTQ1LDExICsxMTEsMTEgQEAKIAlrZnJlZShucyk7CiB9CiAjZWxzZQotaW50IGNvcHlfaXBjcyh1bnNpZ25lZCBsb25nIGZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3N0cnVjdCBpcGNfbmFtZXNwYWNlICpjb3B5X2lwY3ModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zKQogewogCWlmIChmbGFncyAmIENMT05FX05FV0lQQykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCXJldHVybiBuczsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9rZXJuZWwvS2NvbmZpZy5wcmVlbXB0IGIva2VybmVsL0tjb25maWcucHJlZW1wdAppbmRleCAwYjQ2YTVkLi5jNjRjZTljIDEwMDY0NAotLS0gYS9rZXJuZWwvS2NvbmZpZy5wcmVlbXB0CisrKyBiL2tlcm5lbC9LY29uZmlnLnByZWVtcHQKQEAgLTIzLDcgKzIzLDcgQEAKIAkgICJleHBsaWNpdCBwcmVlbXB0aW9uIHBvaW50cyIgdG8gdGhlIGtlcm5lbCBjb2RlLiBUaGVzZSBuZXcKIAkgIHByZWVtcHRpb24gcG9pbnRzIGhhdmUgYmVlbiBzZWxlY3RlZCB0byByZWR1Y2UgdGhlIG1heGltdW0KIAkgIGxhdGVuY3kgb2YgcmVzY2hlZHVsaW5nLCBwcm92aWRpbmcgZmFzdGVyIGFwcGxpY2F0aW9uIHJlYWN0aW9ucywKLQkgIGF0IHRoZSBjb3N0IG9mIHNsaWdobHkgbG93ZXIgdGhyb3VnaHB1dC4KKwkgIGF0IHRoZSBjb3N0IG9mIHNsaWdodGx5IGxvd2VyIHRocm91Z2hwdXQuCiAKIAkgIFRoaXMgYWxsb3dzIHJlYWN0aW9uIHRvIGludGVyYWN0aXZlIGV2ZW50cyBieSBhbGxvd2luZyBhCiAJICBsb3cgcHJpb3JpdHkgcHJvY2VzcyB0byB2b2x1bnRhcmlseSBwcmVlbXB0IGl0c2VsZiBldmVuIGlmIGl0CkBAIC00Myw3ICs0Myw3IEBACiAJICBldmVuIGlmIGl0IGlzIGluIGtlcm5lbCBtb2RlIGV4ZWN1dGluZyBhIHN5c3RlbSBjYWxsIGFuZCB3b3VsZAogCSAgb3RoZXJ3aXNlIG5vdCBiZSBhYm91dCB0byByZWFjaCBhIG5hdHVyYWwgcHJlZW1wdGlvbiBwb2ludC4KIAkgIFRoaXMgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBydW4gbW9yZSAnc21vb3RobHknIGV2ZW4gd2hlbiB0aGUKLQkgIHN5c3RlbSBpcyB1bmRlciBsb2FkLCBhdCB0aGUgY29zdCBvZiBzbGlnaGx5IGxvd2VyIHRocm91Z2hwdXQKKwkgIHN5c3RlbSBpcyB1bmRlciBsb2FkLCBhdCB0aGUgY29zdCBvZiBzbGlnaHRseSBsb3dlciB0aHJvdWdocHV0CiAJICBhbmQgYSBzbGlnaHQgcnVudGltZSBvdmVyaGVhZCB0byBrZXJuZWwgY29kZS4KIAogCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3IgYSBkZXNrdG9wIG9yCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYWM2YjI3YS4uNjQyZDQyNyAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtOCw3ICs4LDcgQEAKIAkgICAgc2lnbmFsLm8gc3lzLm8ga21vZC5vIHdvcmtxdWV1ZS5vIHBpZC5vIFwKIAkgICAgcmN1cGRhdGUubyBleHRhYmxlLm8gcGFyYW1zLm8gcG9zaXgtdGltZXJzLm8gXAogCSAgICBrdGhyZWFkLm8gd2FpdC5vIGtmaWZvLm8gc3lzX25pLm8gcG9zaXgtY3B1LXRpbWVycy5vIG11dGV4Lm8gXAotCSAgICBocnRpbWVyLm8gcndzZW0ubyBsYXRlbmN5Lm8gbnNwcm94eS5vIHNyY3UubworCSAgICBocnRpbWVyLm8gcndzZW0ubyBsYXRlbmN5Lm8gbnNwcm94eS5vIHNyY3UubyBkaWVfbm90aWZpZXIubwogCiBvYmotJChDT05GSUdfU1RBQ0tUUkFDRSkgKz0gc3RhY2t0cmFjZS5vCiBvYmoteSArPSB0aW1lLwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmMgYi9rZXJuZWwvYXVkaXQuYwppbmRleCA0ZTlkMjA4Li5kMTMyNzZkIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXQuYworKysgYi9rZXJuZWwvYXVkaXQuYwpAQCAtNTE1LDggKzUxNSw4IEBACiAJCQllcnIgPSAtRVBFUk07CiAJCWJyZWFrOwogCWNhc2UgQVVESVRfVVNFUjoKLQljYXNlIEFVRElUX0ZJUlNUX1VTRVJfTVNHLi4uQVVESVRfTEFTVF9VU0VSX01TRzoKLQljYXNlIEFVRElUX0ZJUlNUX1VTRVJfTVNHMi4uLkFVRElUX0xBU1RfVVNFUl9NU0cyOgorCWNhc2UgQVVESVRfRklSU1RfVVNFUl9NU0cgLi4uIEFVRElUX0xBU1RfVVNFUl9NU0c6CisJY2FzZSBBVURJVF9GSVJTVF9VU0VSX01TRzIgLi4uIEFVRElUX0xBU1RfVVNFUl9NU0cyOgogCQlpZiAoc2VjdXJpdHlfbmV0bGlua19yZWN2KHNrYiwgQ0FQX0FVRElUX1dSSVRFKSkKIAkJCWVyciA9IC1FUEVSTTsKIAkJYnJlYWs7CkBAIC02MTQsOCArNjE0LDggQEAKIAkJCQkJCQlsb2dpbnVpZCwgc2lkKTsKIAkJYnJlYWs7CiAJY2FzZSBBVURJVF9VU0VSOgotCWNhc2UgQVVESVRfRklSU1RfVVNFUl9NU0cuLi5BVURJVF9MQVNUX1VTRVJfTVNHOgotCWNhc2UgQVVESVRfRklSU1RfVVNFUl9NU0cyLi4uQVVESVRfTEFTVF9VU0VSX01TRzI6CisJY2FzZSBBVURJVF9GSVJTVF9VU0VSX01TRyAuLi4gQVVESVRfTEFTVF9VU0VSX01TRzoKKwljYXNlIEFVRElUX0ZJUlNUX1VTRVJfTVNHMiAuLi4gQVVESVRfTEFTVF9VU0VSX01TRzI6CiAJCWlmICghYXVkaXRfZW5hYmxlZCAmJiBtc2dfdHlwZSAhPSBBVURJVF9VU0VSX0FWQykKIAkJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXQuaCBiL2tlcm5lbC9hdWRpdC5oCmluZGV4IGEzMzcwMjMuLjgxNWQ2ZjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdC5oCisrKyBiL2tlcm5lbC9hdWRpdC5oCkBAIC04Myw2ICs4Myw3IEBACiAJdTMyCQkJZmllbGRfY291bnQ7CiAJY2hhcgkJCSpmaWx0ZXJrZXk7IC8qIHRpZXMgZXZlbnRzIHRvIHJ1bGVzICovCiAJc3RydWN0IGF1ZGl0X2ZpZWxkCSpmaWVsZHM7CisJc3RydWN0IGF1ZGl0X2ZpZWxkCSphcmNoX2Y7IC8qIHF1aWNrIGFjY2VzcyB0byBhcmNoIGZpZWxkICovCiAJc3RydWN0IGF1ZGl0X2ZpZWxkCSppbm9kZV9mOyAvKiBxdWljayBhY2Nlc3MgdG8gYW4gaW5vZGUgZmllbGQgKi8KIAlzdHJ1Y3QgYXVkaXRfd2F0Y2gJKndhdGNoOwkvKiBhc3NvY2lhdGVkIHdhdGNoICovCiAJc3RydWN0IGxpc3RfaGVhZAlybGlzdDsJLyogZW50cnkgaW4gYXVkaXRfd2F0Y2gucnVsZXMgbGlzdCAqLwpAQCAtMTMxLDE3ICsxMzIsMTkgQEAKIGV4dGVybiBpbnQgc2VsaW51eF9hdWRpdF9ydWxlX3VwZGF0ZSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKLWV4dGVybiB2b2lkIF9fYXVkaXRfc2lnbmFsX2luZm8oaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9zaWduYWxfaW5mbyhpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCitleHRlcm4gaW50IF9fYXVkaXRfc2lnbmFsX2luZm8oaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X3NpZ25hbF9pbmZvKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKLQlpZiAodW5saWtlbHkoYXVkaXRfcGlkICYmIHQtPnRnaWQgPT0gYXVkaXRfcGlkKSkKLQkJX19hdWRpdF9zaWduYWxfaW5mbyhzaWcsIHQpOworCWlmICh1bmxpa2VseSgoYXVkaXRfcGlkICYmIHQtPnRnaWQgPT0gYXVkaXRfcGlkKSB8fAorCQkgICAgIChhdWRpdF9zaWduYWxzICYmICFhdWRpdF9kdW1teV9jb250ZXh0KCkpKSkKKwkJcmV0dXJuIF9fYXVkaXRfc2lnbmFsX2luZm8oc2lnLCB0KTsKKwlyZXR1cm4gMDsKIH0KIGV4dGVybiBlbnVtIGF1ZGl0X3N0YXRlIGF1ZGl0X2ZpbHRlcl9pbm9kZXMoc3RydWN0IHRhc2tfc3RydWN0ICosCiAJCQkJCSAgICBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqKTsKIGV4dGVybiB2b2lkIGF1ZGl0X3NldF9hdWRpdGFibGUoc3RydWN0IGF1ZGl0X2NvbnRleHQgKik7CiAjZWxzZQotI2RlZmluZSBhdWRpdF9zaWduYWxfaW5mbyhzLHQpCisjZGVmaW5lIGF1ZGl0X3NpZ25hbF9pbmZvKHMsdCkgQVVESVRfRElTQUJMRUQKICNkZWZpbmUgYXVkaXRfZmlsdGVyX2lub2Rlcyh0LGMpIEFVRElUX0RJU0FCTEVECiAjZGVmaW5lIGF1ZGl0X3NldF9hdWRpdGFibGUoYykKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwppbmRleCAzNzQ5MTkzLi43NGNjMGZjIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRmaWx0ZXIuYworKysgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwpAQCAtMzExLDYgKzMxMSw0NSBAQAogCXJldHVybiBjbGFzc2VzW2NsYXNzXVtBVURJVF9XT1JEKHN5c2NhbGwpXSAmIEFVRElUX0JJVChzeXNjYWxsKTsKIH0KIAorI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X21hdGNoX2NsYXNzX2JpdHMoaW50IGNsYXNzLCB1MzIgKm1hc2spCit7CisJaW50IGk7CisKKwlpZiAoY2xhc3Nlc1tjbGFzc10pIHsKKwkJZm9yIChpID0gMDsgaSA8IEFVRElUX0JJVE1BU0tfU0laRTsgaSsrKQorCQkJaWYgKG1hc2tbaV0gJiBjbGFzc2VzW2NsYXNzXVtpXSkKKwkJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYXVkaXRfbWF0Y2hfc2lnbmFsKHN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IGF1ZGl0X2ZpZWxkICphcmNoID0gZW50cnktPnJ1bGUuYXJjaF9mOworCisJaWYgKCFhcmNoKSB7CisJCS8qIFdoZW4gYXJjaCBpcyB1bnNwZWNpZmllZCwgd2UgbXVzdCBjaGVjayBib3RoIG1hc2tzIG9uIGJpYXJjaAorCQkgKiBhcyBzeXNjYWxsIG51bWJlciBhbG9uZSBpcyBhbWJpZ3VvdXMuICovCisJCXJldHVybiAoYXVkaXRfbWF0Y2hfY2xhc3NfYml0cyhBVURJVF9DTEFTU19TSUdOQUwsCisJCQkJCSAgICAgICBlbnRyeS0+cnVsZS5tYXNrKSAmJgorCQkJYXVkaXRfbWF0Y2hfY2xhc3NfYml0cyhBVURJVF9DTEFTU19TSUdOQUxfMzIsCisJCQkJCSAgICAgICBlbnRyeS0+cnVsZS5tYXNrKSk7CisJfQorCisJc3dpdGNoKGF1ZGl0X2NsYXNzaWZ5X2FyY2goYXJjaC0+dmFsKSkgeworCWNhc2UgMDogLyogbmF0aXZlICovCisJCXJldHVybiAoYXVkaXRfbWF0Y2hfY2xhc3NfYml0cyhBVURJVF9DTEFTU19TSUdOQUwsCisJCQkJCSAgICAgICBlbnRyeS0+cnVsZS5tYXNrKSk7CisJY2FzZSAxOiAvKiAzMmJpdCBvbiBiaWFyY2ggKi8KKwkJcmV0dXJuIChhdWRpdF9tYXRjaF9jbGFzc19iaXRzKEFVRElUX0NMQVNTX1NJR05BTF8zMiwKKwkJCQkJICAgICAgIGVudHJ5LT5ydWxlLm1hc2spKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9Cit9CisjZW5kaWYKKwogLyogQ29tbW9uIHVzZXItc3BhY2UgdG8ga2VybmVsIHJ1bGUgdHJhbnNsYXRpb24uICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdWRpdF9lbnRyeSAqYXVkaXRfdG9fZW50cnlfY29tbW9uKHN0cnVjdCBhdWRpdF9ydWxlICpydWxlKQogewpAQCAtNDI5LDYgKzQ2OCw3IEBACiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIGV4aXRfZnJlZTsKIAkJCX0KKwkJCWVudHJ5LT5ydWxlLmFyY2hfZiA9IGY7CiAJCQlicmVhazsKIAkJY2FzZSBBVURJVF9QRVJNOgogCQkJaWYgKGYtPnZhbCAmIH4xNSkKQEAgLTUxOSw3ICs1NTksNiBAQAogCQljYXNlIEFVRElUX0ZTR0lEOgogCQljYXNlIEFVRElUX0xPR0lOVUlEOgogCQljYXNlIEFVRElUX1BFUlM6Ci0JCWNhc2UgQVVESVRfQVJDSDoKIAkJY2FzZSBBVURJVF9NU0dUWVBFOgogCQljYXNlIEFVRElUX1BQSUQ6CiAJCWNhc2UgQVVESVRfREVWTUFKT1I6CkBAIC01MzEsNiArNTcwLDkgQEAKIAkJY2FzZSBBVURJVF9BUkcyOgogCQljYXNlIEFVRElUX0FSRzM6CiAJCQlicmVhazsKKwkJY2FzZSBBVURJVF9BUkNIOgorCQkJZW50cnktPnJ1bGUuYXJjaF9mID0gZjsKKwkJCWJyZWFrOwogCQljYXNlIEFVRElUX1NVQkpfVVNFUjoKIAkJY2FzZSBBVURJVF9TVUJKX1JPTEU6CiAJCWNhc2UgQVVESVRfU1VCSl9UWVBFOgpAQCAtMTIyMSw2ICsxMjYzLDkgQEAKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAJaWYgKCFkb250X2NvdW50KQogCQlhdWRpdF9uX3J1bGVzKys7CisKKwlpZiAoIWF1ZGl0X21hdGNoX3NpZ25hbChlbnRyeSkpCisJCWF1ZGl0X3NpZ25hbHMrKzsKICNlbmRpZgogCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKIApAQCAtMTI5NCw2ICsxMzM5LDkgQEAKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAJaWYgKCFkb250X2NvdW50KQogCQlhdWRpdF9uX3J1bGVzLS07CisKKwlpZiAoIWF1ZGl0X21hdGNoX3NpZ25hbChlbnRyeSkpCisJCWF1ZGl0X3NpZ25hbHMtLTsKICNlbmRpZgogCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggNjI4YzdhYy4uZTM2NDgxZSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC03OCwxNyArNzgsMTUgQEAKICAqIGZvciBzYXZpbmcgbmFtZXMgZnJvbSBnZXRuYW1lKCkuICovCiAjZGVmaW5lIEFVRElUX05BTUVTICAgIDIwCiAKLS8qIEFVRElUX05BTUVTX1JFU0VSVkVEIGlzIHRoZSBudW1iZXIgb2Ygc2xvdHMgd2UgcmVzZXJ2ZSBpbiB0aGUKLSAqIGF1ZGl0X2NvbnRleHQgZnJvbSBiZWluZyB1c2VkIGZvciBuYW1lbGVzcyBpbm9kZXMgZnJvbQotICogcGF0aF9sb29rdXAuICovCi0jZGVmaW5lIEFVRElUX05BTUVTX1JFU0VSVkVEIDcKLQogLyogSW5kaWNhdGVzIHRoYXQgYXVkaXQgc2hvdWxkIGxvZyB0aGUgZnVsbCBwYXRobmFtZS4gKi8KICNkZWZpbmUgQVVESVRfTkFNRV9GVUxMIC0xCiAKIC8qIG51bWJlciBvZiBhdWRpdCBydWxlcyAqLwogaW50IGF1ZGl0X25fcnVsZXM7CiAKKy8qIGRldGVybWluZXMgd2hldGhlciB3ZSBjb2xsZWN0IGRhdGEgZm9yIHNpZ25hbHMgc2VudCAqLworaW50IGF1ZGl0X3NpZ25hbHM7CisKIC8qIFdoZW4gZnMvbmFtZWkuYzpnZXRuYW1lKCkgaXMgY2FsbGVkLCB3ZSBzdG9yZSB0aGUgcG9pbnRlciBpbiBuYW1lIGFuZAogICogd2UgZG9uJ3QgbGV0IHB1dG5hbWUoKSBmcmVlIGl0IChpbnN0ZWFkIHdlIGZyZWUgYWxsIG9mIHRoZSBzYXZlZAogICogcG9pbnRlcnMgYXQgc3lzY2FsbCBleGl0IHRpbWUpLgpAQCAtMTE0LDYgKzExMiw5IEBACiAKICNkZWZpbmUgQVVESVRfQVVYX0lQQ1BFUk0JMAogCisvKiBOdW1iZXIgb2YgdGFyZ2V0IHBpZHMgcGVyIGF1eCBzdHJ1Y3QuICovCisjZGVmaW5lIEFVRElUX0FVWF9QSURTCTE2CisKIHN0cnVjdCBhdWRpdF9hdXhfZGF0YV9tcV9vcGVuIHsKIAlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKIAlpbnQJCQlvZmxhZzsKQEAgLTE4MSw2ICsxODIsMTMgQEAKIAlzdHJ1Y3QgdmZzbW91bnQJCSptbnQ7CiB9OwogCitzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfcGlkcyB7CisJc3RydWN0IGF1ZGl0X2F1eF9kYXRhCWQ7CisJcGlkX3QJCQl0YXJnZXRfcGlkW0FVRElUX0FVWF9QSURTXTsKKwl1MzIJCQl0YXJnZXRfc2lkW0FVRElUX0FVWF9QSURTXTsKKwlpbnQJCQlwaWRfY291bnQ7Cit9OworCiAvKiBUaGUgcGVyLXRhc2sgYXVkaXQgY29udGV4dC4gKi8KIHN0cnVjdCBhdWRpdF9jb250ZXh0IHsKIAlpbnQJCSAgICBkdW1teTsJLyogbXVzdCBiZSB0aGUgZmlyc3QgZWxlbWVudCAqLwpAQCAtMjAxLDYgKzIwOSw3IEBACiAJc3RydWN0IHZmc21vdW50ICogICBwd2RtbnQ7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKnByZXZpb3VzOyAvKiBGb3IgbmVzdGVkIHN5c2NhbGxzICovCiAJc3RydWN0IGF1ZGl0X2F1eF9kYXRhICphdXg7CisJc3RydWN0IGF1ZGl0X2F1eF9kYXRhICphdXhfcGlkczsKIAogCQkJCS8qIFNhdmUgdGhpbmdzIHRvIHByaW50IGFib3V0IHRhc2tfc3RydWN0ICovCiAJcGlkX3QJCSAgICBwaWQsIHBwaWQ7CkBAIC0yMDksNiArMjE4LDkgQEAKIAl1bnNpZ25lZCBsb25nCSAgICBwZXJzb25hbGl0eTsKIAlpbnQJCSAgICBhcmNoOwogCisJcGlkX3QJCSAgICB0YXJnZXRfcGlkOworCXUzMgkJICAgIHRhcmdldF9zaWQ7CisKICNpZiBBVURJVF9ERUJVRwogCWludAkJICAgIHB1dF9jb3VudDsKIAlpbnQJCSAgICBpbm9fY291bnQ7CkBAIC02NTQsNiArNjY2LDEwIEBACiAJCWNvbnRleHQtPmF1eCA9IGF1eC0+bmV4dDsKIAkJa2ZyZWUoYXV4KTsKIAl9CisJd2hpbGUgKChhdXggPSBjb250ZXh0LT5hdXhfcGlkcykpIHsKKwkJY29udGV4dC0+YXV4X3BpZHMgPSBhdXgtPm5leHQ7CisJCWtmcmVlKGF1eCk7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXVkaXRfemVyb19jb250ZXh0KHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0LApAQCAtNzk1LDYgKzgxMSwyOSBAQAogCWF1ZGl0X2xvZ190YXNrX2NvbnRleHQoYWIpOwogfQogCitzdGF0aWMgaW50IGF1ZGl0X2xvZ19waWRfY29udGV4dChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCwgcGlkX3QgcGlkLAorCQkJCSB1MzIgc2lkKQoreworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOworCWNoYXIgKnMgPSBOVUxMOworCXUzMiBsZW47CisJaW50IHJjID0gMDsKKworCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGNvbnRleHQsIEdGUF9LRVJORUwsIEFVRElUX09CSl9QSUQpOworCWlmICghYWIpCisJCXJldHVybiAxOworCisJaWYgKHNlbGludXhfc2lkX3RvX3N0cmluZyhzaWQsICZzLCAmbGVuKSkgeworCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAib3BpZD0lZCBvYmo9KG5vbmUpIiwgcGlkKTsKKwkJcmMgPSAxOworCX0gZWxzZQorCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAib3BpZD0lZCAgb2JqPSVzIiwgcGlkLCBzKTsKKwlhdWRpdF9sb2dfZW5kKGFiKTsKKwlrZnJlZShzKTsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIHZvaWQgYXVkaXRfbG9nX2V4aXQoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCWludCBpLCBjYWxsX3BhbmljID0gMDsKQEAgLTk3Myw2ICsxMDEyLDIxIEBACiAJCWF1ZGl0X2xvZ19lbmQoYWIpOwogCX0KIAorCWZvciAoYXV4ID0gY29udGV4dC0+YXV4X3BpZHM7IGF1eDsgYXV4ID0gYXV4LT5uZXh0KSB7CisJCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9waWRzICpheHMgPSAodm9pZCAqKWF1eDsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGF4cy0+cGlkX2NvdW50OyBpKyspCisJCQlpZiAoYXVkaXRfbG9nX3BpZF9jb250ZXh0KGNvbnRleHQsIGF4cy0+dGFyZ2V0X3BpZFtpXSwKKwkJCQkJCSAgYXhzLT50YXJnZXRfc2lkW2ldKSkKKwkJCQljYWxsX3BhbmljID0gMTsKKwl9CisKKwlpZiAoY29udGV4dC0+dGFyZ2V0X3BpZCAmJgorCSAgICBhdWRpdF9sb2dfcGlkX2NvbnRleHQoY29udGV4dCwgY29udGV4dC0+dGFyZ2V0X3BpZCwKKwkJCQkgIGNvbnRleHQtPnRhcmdldF9zaWQpKQorCQkJY2FsbF9wYW5pYyA9IDE7CisKIAlpZiAoY29udGV4dC0+cHdkICYmIGNvbnRleHQtPnB3ZG1udCkgewogCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBHRlBfS0VSTkVMLCBBVURJVF9DV0QpOwogCQlpZiAoYWIpIHsKQEAgLTExOTMsNiArMTI0NywxMCBAQAogCX0gZWxzZSB7CiAJCWF1ZGl0X2ZyZWVfbmFtZXMoY29udGV4dCk7CiAJCWF1ZGl0X2ZyZWVfYXV4KGNvbnRleHQpOworCQljb250ZXh0LT5hdXggPSBOVUxMOworCQljb250ZXh0LT5hdXhfcGlkcyA9IE5VTEw7CisJCWNvbnRleHQtPnRhcmdldF9waWQgPSAwOworCQljb250ZXh0LT50YXJnZXRfc2lkID0gMDsKIAkJa2ZyZWUoY29udGV4dC0+ZmlsdGVya2V5KTsKIAkJY29udGV4dC0+ZmlsdGVya2V5ID0gTlVMTDsKIAkJdHNrLT5hdWRpdF9jb250ZXh0ID0gY29udGV4dDsKQEAgLTEyMjYsNiArMTI4NCw3IEBACiAJY29udGV4dC0+bmFtZXNbY29udGV4dC0+bmFtZV9jb3VudF0ubmFtZV9sZW4gPSBBVURJVF9OQU1FX0ZVTEw7CiAJY29udGV4dC0+bmFtZXNbY29udGV4dC0+bmFtZV9jb3VudF0ubmFtZV9wdXQgPSAxOwogCWNvbnRleHQtPm5hbWVzW2NvbnRleHQtPm5hbWVfY291bnRdLmlubyAgPSAodW5zaWduZWQgbG9uZyktMTsKKwljb250ZXh0LT5uYW1lc1tjb250ZXh0LT5uYW1lX2NvdW50XS5vc2lkID0gMDsKIAkrK2NvbnRleHQtPm5hbWVfY291bnQ7CiAJaWYgKCFjb250ZXh0LT5wd2QpIHsKIAkJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CkBAIC0xMjc5LDYgKzEzMzgsMjggQEAKICNlbmRpZgogfQogCitzdGF0aWMgaW50IGF1ZGl0X2luY19uYW1lX2NvdW50KHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0LAorCQkJCWNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKGNvbnRleHQtPm5hbWVfY291bnQgPj0gQVVESVRfTkFNRVMpIHsKKwkJaWYgKGlub2RlKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIm5hbWVfY291bnQgbWF4ZWQsIGxvc2luZyBpbm9kZSBkYXRhOiAiCisJCQkgICAgICAgImRldj0lMDJ4OiUwMngsIGlub2RlPSVsdSIsCisJCQkgICAgICAgTUFKT1IoaW5vZGUtPmlfc2ItPnNfZGV2KSwKKwkJCSAgICAgICBNSU5PUihpbm9kZS0+aV9zYi0+c19kZXYpLAorCQkJICAgICAgIGlub2RlLT5pX2lubyk7CisKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIm5hbWVfY291bnQgbWF4ZWQsIGxvc2luZyBpbm9kZSBkYXRhIik7CisJCXJldHVybiAxOworCX0KKwljb250ZXh0LT5uYW1lX2NvdW50Kys7CisjaWYgQVVESVRfREVCVUcKKwljb250ZXh0LT5pbm9fY291bnQrKzsKKyNlbmRpZgorCXJldHVybiAwOworfQorCiAvKiBDb3B5IGlub2RlIGRhdGEgaW50byBhbiBhdWRpdF9uYW1lcy4gKi8KIHN0YXRpYyB2b2lkIGF1ZGl0X2NvcHlfaW5vZGUoc3RydWN0IGF1ZGl0X25hbWVzICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtMTMxNiwxMyArMTM5NywxMCBAQAogCWVsc2UgewogCQkvKiBGSVhNRTogaG93IG11Y2ggZG8gd2UgY2FyZSBhYm91dCBpbm9kZXMgdGhhdCBoYXZlIG5vCiAJCSAqIGFzc29jaWF0ZWQgbmFtZT8gKi8KLQkJaWYgKGNvbnRleHQtPm5hbWVfY291bnQgPj0gQVVESVRfTkFNRVMgLSBBVURJVF9OQU1FU19SRVNFUlZFRCkKKwkJaWYgKGF1ZGl0X2luY19uYW1lX2NvdW50KGNvbnRleHQsIGlub2RlKSkKIAkJCXJldHVybjsKLQkJaWR4ID0gY29udGV4dC0+bmFtZV9jb3VudCsrOworCQlpZHggPSBjb250ZXh0LT5uYW1lX2NvdW50IC0gMTsKIAkJY29udGV4dC0+bmFtZXNbaWR4XS5uYW1lID0gTlVMTDsKLSNpZiBBVURJVF9ERUJVRwotCQkrK2NvbnRleHQtPmlub19jb3VudDsKLSNlbmRpZgogCX0KIAlhdWRpdF9jb3B5X2lub2RlKCZjb250ZXh0LT5uYW1lc1tpZHhdLCBpbm9kZSk7CiB9CkBAIC0xMzQ2LDcgKzE0MjQsNyBAQAogewogCWludCBpZHg7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwotCWNvbnN0IGNoYXIgKmZvdW5kX25hbWUgPSBOVUxMOworCWNvbnN0IGNoYXIgKmZvdW5kX3BhcmVudCA9IE5VTEwsICpmb3VuZF9jaGlsZCA9IE5VTEw7CiAJaW50IGRpcmxlbiA9IDA7CiAKIAlpZiAoIWNvbnRleHQtPmluX3N5c2NhbGwpCkBAIC0xMzU0LDg4ICsxNDMyLDczIEBACiAKIAkvKiBkZXRlcm1pbmUgbWF0Y2hpbmcgcGFyZW50ICovCiAJaWYgKCFkbmFtZSkKLQkJZ290byB1cGRhdGVfY29udGV4dDsKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IGNvbnRleHQtPm5hbWVfY291bnQ7IGlkeCsrKQotCQlpZiAoY29udGV4dC0+bmFtZXNbaWR4XS5pbm8gPT0gcGFyZW50LT5pX2lubykgewotCQkJY29uc3QgY2hhciAqbmFtZSA9IGNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZTsKKwkJZ290byBhZGRfbmFtZXM7CiAKLQkJCWlmICghbmFtZSkKLQkJCQljb250aW51ZTsKKwkvKiBwYXJlbnQgaXMgbW9yZSBsaWtlbHksIGxvb2sgZm9yIGl0IGZpcnN0ICovCisJZm9yIChpZHggPSAwOyBpZHggPCBjb250ZXh0LT5uYW1lX2NvdW50OyBpZHgrKykgeworCQlzdHJ1Y3QgYXVkaXRfbmFtZXMgKm4gPSAmY29udGV4dC0+bmFtZXNbaWR4XTsKIAotCQkJaWYgKGF1ZGl0X2NvbXBhcmVfZG5hbWVfcGF0aChkbmFtZSwgbmFtZSwgJmRpcmxlbikgPT0gMCkgewotCQkJCWNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZV9sZW4gPSBkaXJsZW47Ci0JCQkJZm91bmRfbmFtZSA9IG5hbWU7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCWlmICghbi0+bmFtZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChuLT5pbm8gPT0gcGFyZW50LT5pX2lubyAmJgorCQkgICAgIWF1ZGl0X2NvbXBhcmVfZG5hbWVfcGF0aChkbmFtZSwgbi0+bmFtZSwgJmRpcmxlbikpIHsKKwkJCW4tPm5hbWVfbGVuID0gZGlybGVuOyAvKiB1cGRhdGUgcGFyZW50IGRhdGEgaW4gcGxhY2UgKi8KKwkJCWZvdW5kX3BhcmVudCA9IG4tPm5hbWU7CisJCQlnb3RvIGFkZF9uYW1lczsKIAkJfQotCi11cGRhdGVfY29udGV4dDoKLQlpZHggPSBjb250ZXh0LT5uYW1lX2NvdW50OwotCWlmIChjb250ZXh0LT5uYW1lX2NvdW50ID09IEFVRElUX05BTUVTKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJuYW1lX2NvdW50IG1heGVkIGFuZCBsb3NpbmcgJXNcbiIsCi0JCQlmb3VuZF9uYW1lID86ICIobnVsbCkiKTsKLQkJcmV0dXJuOwogCX0KLQljb250ZXh0LT5uYW1lX2NvdW50Kys7Ci0jaWYgQVVESVRfREVCVUcKLQljb250ZXh0LT5pbm9fY291bnQrKzsKLSNlbmRpZgotCS8qIFJlLXVzZSB0aGUgbmFtZSBiZWxvbmdpbmcgdG8gdGhlIHNsb3QgZm9yIGEgbWF0Y2hpbmcgcGFyZW50IGRpcmVjdG9yeS4KLQkgKiBBbGwgbmFtZXMgZm9yIHRoaXMgY29udGV4dCBhcmUgcmVsaW5xdWlzaGVkIGluIGF1ZGl0X2ZyZWVfbmFtZXMoKSAqLwotCWNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZSA9IGZvdW5kX25hbWU7Ci0JY29udGV4dC0+bmFtZXNbaWR4XS5uYW1lX2xlbiA9IEFVRElUX05BTUVfRlVMTDsKLQljb250ZXh0LT5uYW1lc1tpZHhdLm5hbWVfcHV0ID0gMDsJLyogZG9uJ3QgY2FsbCBfX3B1dG5hbWUoKSAqLwogCi0JaWYgKCFpbm9kZSkKLQkJY29udGV4dC0+bmFtZXNbaWR4XS5pbm8gPSAodW5zaWduZWQgbG9uZyktMTsKLQllbHNlCi0JCWF1ZGl0X2NvcHlfaW5vZGUoJmNvbnRleHQtPm5hbWVzW2lkeF0sIGlub2RlKTsKKwkvKiBubyBtYXRjaGluZyBwYXJlbnQsIGxvb2sgZm9yIG1hdGNoaW5nIGNoaWxkICovCisJZm9yIChpZHggPSAwOyBpZHggPCBjb250ZXh0LT5uYW1lX2NvdW50OyBpZHgrKykgeworCQlzdHJ1Y3QgYXVkaXRfbmFtZXMgKm4gPSAmY29udGV4dC0+bmFtZXNbaWR4XTsKIAotCS8qIEEgcGFyZW50IHdhcyBub3QgZm91bmQgaW4gYXVkaXRfbmFtZXMsIHNvIGNvcHkgdGhlIGlub2RlIGRhdGEgZm9yIHRoZQotCSAqIHByb3ZpZGVkIHBhcmVudC4gKi8KLQlpZiAoIWZvdW5kX25hbWUpIHsKLQkJaWR4ID0gY29udGV4dC0+bmFtZV9jb3VudDsKLQkJaWYgKGNvbnRleHQtPm5hbWVfY291bnQgPT0gQVVESVRfTkFNRVMpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJIm5hbWVfY291bnQgbWF4ZWQgYW5kIGxvc2luZyBwYXJlbnQgaW5vZGUgZGF0YTogZGV2PSUwMng6JTAyeCwgaW5vZGU9JWx1IiwKLQkJCQlNQUpPUihwYXJlbnQtPmlfc2ItPnNfZGV2KSwKLQkJCQlNSU5PUihwYXJlbnQtPmlfc2ItPnNfZGV2KSwKLQkJCQlwYXJlbnQtPmlfaW5vKTsKLQkJCXJldHVybjsKKwkJaWYgKCFuLT5uYW1lKQorCQkJY29udGludWU7CisKKwkJLyogc3RyY21wKCkgaXMgdGhlIG1vcmUgbGlrZWx5IHNjZW5hcmlvICovCisJCWlmICghc3RyY21wKGRuYW1lLCBuLT5uYW1lKSB8fAorCQkgICAgICFhdWRpdF9jb21wYXJlX2RuYW1lX3BhdGgoZG5hbWUsIG4tPm5hbWUsICZkaXJsZW4pKSB7CisJCQlpZiAoaW5vZGUpCisJCQkJYXVkaXRfY29weV9pbm9kZShuLCBpbm9kZSk7CisJCQllbHNlCisJCQkJbi0+aW5vID0gKHVuc2lnbmVkIGxvbmcpLTE7CisJCQlmb3VuZF9jaGlsZCA9IG4tPm5hbWU7CisJCQlnb3RvIGFkZF9uYW1lczsKIAkJfQotCQljb250ZXh0LT5uYW1lX2NvdW50Kys7Ci0jaWYgQVVESVRfREVCVUcKLQkJY29udGV4dC0+aW5vX2NvdW50Kys7Ci0jZW5kaWYKKwl9CisKK2FkZF9uYW1lczoKKwlpZiAoIWZvdW5kX3BhcmVudCkgeworCQlpZiAoYXVkaXRfaW5jX25hbWVfY291bnQoY29udGV4dCwgcGFyZW50KSkKKwkJCXJldHVybjsKKwkJaWR4ID0gY29udGV4dC0+bmFtZV9jb3VudCAtIDE7CisJCWNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZSA9IE5VTEw7CiAJCWF1ZGl0X2NvcHlfaW5vZGUoJmNvbnRleHQtPm5hbWVzW2lkeF0sIHBhcmVudCk7CiAJfQotfQogCi0vKioKLSAqIGF1ZGl0X2lub2RlX3VwZGF0ZSAtIHVwZGF0ZSBpbm9kZSBpbmZvIGZvciBsYXN0IGNvbGxlY3RlZCBuYW1lCi0gKiBAaW5vZGU6IGlub2RlIGJlaW5nIGF1ZGl0ZWQKLSAqCi0gKiBXaGVuIG9wZW4oKSBpcyBjYWxsZWQgb24gYW4gZXhpc3Rpbmcgb2JqZWN0IHdpdGggdGhlIE9fQ1JFQVQgZmxhZywgdGhlIGlub2RlCi0gKiBkYXRhIGF1ZGl0IGluaXRpYWxseSBjb2xsZWN0cyBpcyBpbmNvcnJlY3QuICBUaGlzIGFkZGl0aW9uYWwgaG9vayBlbnN1cmVzCi0gKiBhdWRpdCBoYXMgdGhlIGlub2RlIGRhdGEgZm9yIHRoZSBhY3R1YWwgb2JqZWN0IHRvIGJlIG9wZW5lZC4KLSAqLwotdm9pZCBfX2F1ZGl0X2lub2RlX3VwZGF0ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKLQlpbnQgaWR4OworCWlmICghZm91bmRfY2hpbGQpIHsKKwkJaWYgKGF1ZGl0X2luY19uYW1lX2NvdW50KGNvbnRleHQsIGlub2RlKSkKKwkJCXJldHVybjsKKwkJaWR4ID0gY29udGV4dC0+bmFtZV9jb3VudCAtIDE7CiAKLQlpZiAoIWNvbnRleHQtPmluX3N5c2NhbGwgfHwgIWlub2RlKQotCQlyZXR1cm47CisJCS8qIFJlLXVzZSB0aGUgbmFtZSBiZWxvbmdpbmcgdG8gdGhlIHNsb3QgZm9yIGEgbWF0Y2hpbmcgcGFyZW50CisJCSAqIGRpcmVjdG9yeS4gQWxsIG5hbWVzIGZvciB0aGlzIGNvbnRleHQgYXJlIHJlbGlucXVpc2hlZCBpbgorCQkgKiBhdWRpdF9mcmVlX25hbWVzKCkgKi8KKwkJaWYgKGZvdW5kX3BhcmVudCkgeworCQkJY29udGV4dC0+bmFtZXNbaWR4XS5uYW1lID0gZm91bmRfcGFyZW50OworCQkJY29udGV4dC0+bmFtZXNbaWR4XS5uYW1lX2xlbiA9IEFVRElUX05BTUVfRlVMTDsKKwkJCS8qIGRvbid0IGNhbGwgX19wdXRuYW1lKCkgKi8KKwkJCWNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZV9wdXQgPSAwOworCQl9IGVsc2UgeworCQkJY29udGV4dC0+bmFtZXNbaWR4XS5uYW1lID0gTlVMTDsKKwkJfQogCi0JaWYgKGNvbnRleHQtPm5hbWVfY291bnQgPT0gMCkgewotCQljb250ZXh0LT5uYW1lX2NvdW50Kys7Ci0jaWYgQVVESVRfREVCVUcKLQkJY29udGV4dC0+aW5vX2NvdW50Kys7Ci0jZW5kaWYKKwkJaWYgKGlub2RlKQorCQkJYXVkaXRfY29weV9pbm9kZSgmY29udGV4dC0+bmFtZXNbaWR4XSwgaW5vZGUpOworCQllbHNlCisJCQljb250ZXh0LT5uYW1lc1tpZHhdLmlubyA9ICh1bnNpZ25lZCBsb25nKS0xOwogCX0KLQlpZHggPSBjb250ZXh0LT5uYW1lX2NvdW50IC0gMTsKLQotCWF1ZGl0X2NvcHlfaW5vZGUoJmNvbnRleHQtPm5hbWVzW2lkeF0sIGlub2RlKTsKIH0KIAogLyoqCkBAIC0xODgwLDYgKzE5NDMsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBfX2F1ZGl0X3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCit7CisJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OworCisJY29udGV4dC0+dGFyZ2V0X3BpZCA9IHQtPnBpZDsKKwlzZWxpbnV4X2dldF90YXNrX3NpZCh0LCAmY29udGV4dC0+dGFyZ2V0X3NpZCk7Cit9CisKIC8qKgogICogYXVkaXRfYXZjX3BhdGggLSByZWNvcmQgdGhlIGdyYW50aW5nIG9yIGRlbmlhbCBvZiBwZXJtaXNzaW9ucwogICogQGRlbnRyeTogZGVudHJ5IHRvIHJlY29yZApAQCAtMTkxOCwxNSArMTk4OSwxNyBAQAogICogSWYgdGhlIGF1ZGl0IHN1YnN5c3RlbSBpcyBiZWluZyB0ZXJtaW5hdGVkLCByZWNvcmQgdGhlIHRhc2sgKHBpZCkKICAqIGFuZCB1aWQgdGhhdCBpcyBkb2luZyB0aGF0LgogICovCi12b2lkIF9fYXVkaXRfc2lnbmFsX2luZm8oaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICp0KQoraW50IF9fYXVkaXRfc2lnbmFsX2luZm8oaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICp0KQogeworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9waWRzICpheHA7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHggPSB0c2stPmF1ZGl0X2NvbnRleHQ7CiAJZXh0ZXJuIHBpZF90IGF1ZGl0X3NpZ19waWQ7CiAJZXh0ZXJuIHVpZF90IGF1ZGl0X3NpZ191aWQ7CiAJZXh0ZXJuIHUzMiBhdWRpdF9zaWdfc2lkOwogCi0JaWYgKHNpZyA9PSBTSUdURVJNIHx8IHNpZyA9PSBTSUdIVVAgfHwgc2lnID09IFNJR1VTUjEpIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCQlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4ID0gdHNrLT5hdWRpdF9jb250ZXh0OworCWlmIChhdWRpdF9waWQgJiYgdC0+dGdpZCA9PSBhdWRpdF9waWQgJiYKKwkgICAgKHNpZyA9PSBTSUdURVJNIHx8IHNpZyA9PSBTSUdIVVAgfHwgc2lnID09IFNJR1VTUjEpKSB7CiAJCWF1ZGl0X3NpZ19waWQgPSB0c2stPnBpZDsKIAkJaWYgKGN0eCkKIAkJCWF1ZGl0X3NpZ191aWQgPSBjdHgtPmxvZ2ludWlkOwpAQCAtMTkzNCw0ICsyMDA3LDcyIEBACiAJCQlhdWRpdF9zaWdfdWlkID0gdHNrLT51aWQ7CiAJCXNlbGludXhfZ2V0X3Rhc2tfc2lkKHRzaywgJmF1ZGl0X3NpZ19zaWQpOwogCX0KKworCWlmICghYXVkaXRfc2lnbmFscykgLyogYXVkaXRfY29udGV4dCBjaGVja2VkIGluIHdyYXBwZXIgKi8KKwkJcmV0dXJuIDA7CisKKwkvKiBvcHRpbWl6ZSB0aGUgY29tbW9uIGNhc2UgYnkgcHV0dGluZyBmaXJzdCBzaWduYWwgcmVjaXBpZW50IGRpcmVjdGx5CisJICogaW4gYXVkaXRfY29udGV4dCAqLworCWlmICghY3R4LT50YXJnZXRfcGlkKSB7CisJCWN0eC0+dGFyZ2V0X3BpZCA9IHQtPnRnaWQ7CisJCXNlbGludXhfZ2V0X3Rhc2tfc2lkKHQsICZjdHgtPnRhcmdldF9zaWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlheHAgPSAodm9pZCAqKWN0eC0+YXV4X3BpZHM7CisJaWYgKCFheHAgfHwgYXhwLT5waWRfY291bnQgPT0gQVVESVRfQVVYX1BJRFMpIHsKKwkJYXhwID0ga3phbGxvYyhzaXplb2YoKmF4cCksIEdGUF9BVE9NSUMpOworCQlpZiAoIWF4cCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWF4cC0+ZC50eXBlID0gQVVESVRfT0JKX1BJRDsKKwkJYXhwLT5kLm5leHQgPSBjdHgtPmF1eF9waWRzOworCQljdHgtPmF1eF9waWRzID0gKHZvaWQgKilheHA7CisJfQorCUJVR19PTihheHAtPnBpZF9jb3VudCA+IEFVRElUX0FVWF9QSURTKTsKKworCWF4cC0+dGFyZ2V0X3BpZFtheHAtPnBpZF9jb3VudF0gPSB0LT50Z2lkOworCXNlbGludXhfZ2V0X3Rhc2tfc2lkKHQsICZheHAtPnRhcmdldF9zaWRbYXhwLT5waWRfY291bnRdKTsKKwlheHAtPnBpZF9jb3VudCsrOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYXVkaXRfY29yZV9kdW1wcyAtIHJlY29yZCBpbmZvcm1hdGlvbiBhYm91dCBwcm9jZXNzZXMgdGhhdCBlbmQgYWJub3JtYWxseQorICogQHNpZzogc2lnbmFsIHZhbHVlCisgKgorICogSWYgYSBwcm9jZXNzIGVuZHMgd2l0aCBhIGNvcmUgZHVtcCwgc29tZXRoaW5nIGZpc2h5IGlzIGdvaW5nIG9uIGFuZCB3ZQorICogc2hvdWxkIHJlY29yZCB0aGUgZXZlbnQgZm9yIGludmVzdGlnYXRpb24uCisgKi8KK3ZvaWQgYXVkaXRfY29yZV9kdW1wcyhsb25nIHNpZ25yKQoreworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOworCXUzMiBzaWQ7CisKKwlpZiAoIWF1ZGl0X2VuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChzaWduciA9PSBTSUdRVUlUKQkvKiBkb24ndCBjYXJlIGZvciB0aG9zZSAqLworCQlyZXR1cm47CisKKwlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9BTk9NX0FCRU5EKTsKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiYXVpZD0ldSB1aWQ9JXUgZ2lkPSV1IiwKKwkJCWF1ZGl0X2dldF9sb2dpbnVpZChjdXJyZW50LT5hdWRpdF9jb250ZXh0KSwKKwkJCWN1cnJlbnQtPnVpZCwgY3VycmVudC0+Z2lkKTsKKwlzZWxpbnV4X2dldF90YXNrX3NpZChjdXJyZW50LCAmc2lkKTsKKwlpZiAoc2lkKSB7CisJCWNoYXIgKmN0eCA9IE5VTEw7CisJCXUzMiBsZW47CisKKwkJaWYgKHNlbGludXhfc2lkX3RvX3N0cmluZyhzaWQsICZjdHgsICZsZW4pKQorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBzc2lkPSV1Iiwgc2lkKTsKKwkJZWxzZQorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBzdWJqPSVzIiwgY3R4KTsKKwkJa2ZyZWUoY3R4KTsKKwl9CisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBwaWQ9JWQgY29tbT0iLCBjdXJyZW50LT5waWQpOworCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIGN1cnJlbnQtPmNvbW0pOworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgc2lnPSVsZCIsIHNpZ25yKTsKKwlhdWRpdF9sb2dfZW5kKGFiKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jb21wYXQuYyBiL2tlcm5lbC9jb21wYXQuYwppbmRleCBjZWJiNGMyLi4zYmFlMzc0IDEwMDY0NAotLS0gYS9rZXJuZWwvY29tcGF0LmMKKysrIGIva2VybmVsL2NvbXBhdC5jCkBAIC00NzUsOCArNDc1LDggQEAKIAlyZXR1cm4gbWluX2xlbmd0aDsKIH0KIAotc3RhdGljIGludCBnZXRfY29tcGF0X2l0aW1lcnNwZWMoc3RydWN0IGl0aW1lcnNwZWMgKmRzdCwgCi0JCQkJIHN0cnVjdCBjb21wYXRfaXRpbWVyc3BlYyBfX3VzZXIgKnNyYykKK2ludCBnZXRfY29tcGF0X2l0aW1lcnNwZWMoc3RydWN0IGl0aW1lcnNwZWMgKmRzdCwKKwkJCSAgY29uc3Qgc3RydWN0IGNvbXBhdF9pdGltZXJzcGVjIF9fdXNlciAqc3JjKQogeyAKIAlpZiAoZ2V0X2NvbXBhdF90aW1lc3BlYygmZHN0LT5pdF9pbnRlcnZhbCwgJnNyYy0+aXRfaW50ZXJ2YWwpIHx8CiAJICAgIGdldF9jb21wYXRfdGltZXNwZWMoJmRzdC0+aXRfdmFsdWUsICZzcmMtPml0X3ZhbHVlKSkKQEAgLTQ4NCw4ICs0ODQsOCBAQAogCXJldHVybiAwOwogfSAKIAotc3RhdGljIGludCBwdXRfY29tcGF0X2l0aW1lcnNwZWMoc3RydWN0IGNvbXBhdF9pdGltZXJzcGVjIF9fdXNlciAqZHN0LCAKLQkJCQkgc3RydWN0IGl0aW1lcnNwZWMgKnNyYykKK2ludCBwdXRfY29tcGF0X2l0aW1lcnNwZWMoc3RydWN0IGNvbXBhdF9pdGltZXJzcGVjIF9fdXNlciAqZHN0LAorCQkJICBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqc3JjKQogeyAKIAlpZiAocHV0X2NvbXBhdF90aW1lc3BlYygmc3JjLT5pdF9pbnRlcnZhbCwgJmRzdC0+aXRfaW50ZXJ2YWwpIHx8CiAJICAgIHB1dF9jb21wYXRfdGltZXNwZWMoJnNyYy0+aXRfdmFsdWUsICZkc3QtPml0X3ZhbHVlKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9jb25maWdzLmMgYi9rZXJuZWwvY29uZmlncy5jCmluZGV4IDhmYTFmYjIuLmU4NGQzZjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jb25maWdzLmMKKysrIGIva2VybmVsL2NvbmZpZ3MuYwpAQCAtNjEsMTggKzYxLDkgQEAKIGlrY29uZmlnX3JlYWRfY3VycmVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJICAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICogb2Zmc2V0KQogewotCWxvZmZfdCBwb3MgPSAqb2Zmc2V0OwotCXNzaXplX3QgY291bnQ7Ci0KLQlpZiAocG9zID49IGtlcm5lbF9jb25maWdfZGF0YV9zaXplKQotCQlyZXR1cm4gMDsKLQotCWNvdW50ID0gbWluKGxlbiwgKHNpemVfdCkoa2VybmVsX2NvbmZpZ19kYXRhX3NpemUgLSBwb3MpKTsKLQlpZiAoY29weV90b191c2VyKGJ1Ziwga2VybmVsX2NvbmZpZ19kYXRhICsgTUFHSUNfU0laRSArIHBvcywgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCSpvZmZzZXQgKz0gY291bnQ7Ci0JcmV0dXJuIGNvdW50OworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGxlbiwgb2Zmc2V0LAorCQkJCSAgICAgICBrZXJuZWxfY29uZmlnX2RhdGEgKyBNQUdJQ19TSVpFLAorCQkJCSAgICAgICBrZXJuZWxfY29uZmlnX2RhdGFfc2l6ZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlrY29uZmlnX2ZpbGVfb3BzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IDM2ZTcwODQuLjIwOGNmMzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTk3LDcgKzk3LDcgQEAKIAkJICAgICghY3B1dGltZV9lcShwLT51dGltZSwgY3B1dGltZV96ZXJvKSB8fAogCQkgICAgICFjcHV0aW1lX2VxKHAtPnN0aW1lLCBjcHV0aW1lX3plcm8pKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRhc2sgJXMgKHBpZCA9ICVkKSBpcyBvbiBjcHUgJWRcCi0JCQkJKHN0YXRlID0gJWxkLCBmbGFncyA9ICVseCkgXG4iLAorCQkJCShzdGF0ZSA9ICVsZCwgZmxhZ3MgPSAleCkgXG4iLAogCQkJCSBwLT5jb21tLCBwLT5waWQsIGNwdSwgcC0+c3RhdGUsIHAtPmZsYWdzKTsKIAl9CiAJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CkBAIC0xMjAsMTEgKzEyMCwxMyBAQAogfQogCiAvKiBSZXF1aXJlcyBjcHVfYWRkX3JlbW92ZV9sb2NrIHRvIGJlIGhlbGQgKi8KLXN0YXRpYyBpbnQgX2NwdV9kb3duKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW50IF9jcHVfZG93bih1bnNpZ25lZCBpbnQgY3B1LCBpbnQgdGFza3NfZnJvemVuKQogewotCWludCBlcnI7CisJaW50IGVyciwgbnJfY2FsbHMgPSAwOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAljcHVtYXNrX3Qgb2xkX2FsbG93ZWQsIHRtcDsKKwl2b2lkICpoY3B1ID0gKHZvaWQgKikobG9uZyljcHU7CisJdW5zaWduZWQgbG9uZyBtb2QgPSB0YXNrc19mcm96ZW4gPyBDUFVfVEFTS1NfRlJPWkVOIDogMDsKIAogCWlmIChudW1fb25saW5lX2NwdXMoKSA9PSAxKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTMyLDEyICsxMzQsMTYgQEAKIAlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSByYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLCBDUFVfRE9XTl9QUkVQQVJFLAotCQkJCQkJKHZvaWQgKikobG9uZyljcHUpOworCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZjcHVfY2hhaW4sIENQVV9MT0NLX0FDUVVJUkUsIGhjcHUpOworCWVyciA9IF9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX0RPV05fUFJFUEFSRSB8IG1vZCwKKwkJCQkJaGNwdSwgLTEsICZucl9jYWxscyk7CiAJaWYgKGVyciA9PSBOT1RJRllfQkFEKSB7CisJCV9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX0RPV05fRkFJTEVEIHwgbW9kLAorCQkJCQkgIGhjcHUsIG5yX2NhbGxzLCBOVUxMKTsKIAkJcHJpbnRrKCIlczogYXR0ZW1wdCB0byB0YWtlIGRvd24gQ1BVICV1IGZhaWxlZFxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIGNwdSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9yZWxlYXNlOwogCX0KIAogCS8qIEVuc3VyZSB0aGF0IHdlIGFyZSBub3QgcnVubmFibGUgb24gZHlpbmcgY3B1ICovCkBAIC0xNTIsOCArMTU4LDggQEAKIAogCWlmIChJU19FUlIocCkgfHwgY3B1X29ubGluZShjcHUpKSB7CiAJCS8qIENQVSBkaWRuJ3QgZGllOiB0ZWxsIGV2ZXJ5b25lLiAgQ2FuJ3QgY29tcGxhaW4uICovCi0JCWlmIChyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLCBDUFVfRE9XTl9GQUlMRUQsCi0JCQkJKHZvaWQgKikobG9uZyljcHUpID09IE5PVElGWV9CQUQpCisJCWlmIChyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLCBDUFVfRE9XTl9GQUlMRUQgfCBtb2QsCisJCQkJCSAgICBoY3B1KSA9PSBOT1RJRllfQkFEKQogCQkJQlVHKCk7CiAKIAkJaWYgKElTX0VSUihwKSkgewpAQCAtMTcwLDEzICsxNzYsOSBAQAogCS8qIFRoaXMgYWN0dWFsbHkga2lsbHMgdGhlIENQVS4gKi8KIAlfX2NwdV9kaWUoY3B1KTsKIAotCS8qIE1vdmUgaXQgaGVyZSBzbyBpdCBjYW4gcnVuLiAqLwotCWt0aHJlYWRfYmluZChwLCBnZXRfY3B1KCkpOwotCXB1dF9jcHUoKTsKLQogCS8qIENQVSBpcyBjb21wbGV0ZWx5IGRlYWQ6IHRlbGwgZXZlcnlvbmUuICBUb28gbGF0ZSB0byBjb21wbGFpbi4gKi8KLQlpZiAocmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX0RFQUQsCi0JCQkodm9pZCAqKShsb25nKWNwdSkgPT0gTk9USUZZX0JBRCkKKwlpZiAocmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX0RFQUQgfCBtb2QsCisJCQkJICAgIGhjcHUpID09IE5PVElGWV9CQUQpCiAJCUJVRygpOwogCiAJY2hlY2tfZm9yX3Rhc2tzKGNwdSk7CkBAIC0xODUsNiArMTg3LDggQEAKIAllcnIgPSBrdGhyZWFkX3N0b3AocCk7CiBvdXRfYWxsb3dlZDoKIAlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZF9hbGxvd2VkKTsKK291dF9yZWxlYXNlOgorCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZjcHVfY2hhaW4sIENQVV9MT0NLX1JFTEVBU0UsIGhjcHUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE5Niw3ICsyMDAsNyBAQAogCWlmIChjcHVfaG90cGx1Z19kaXNhYmxlZCkKIAkJZXJyID0gLUVCVVNZOwogCWVsc2UKLQkJZXJyID0gX2NwdV9kb3duKGNwdSk7CisJCWVyciA9IF9jcHVfZG93bihjcHUsIDApOwogCiAJbXV0ZXhfdW5sb2NrKCZjcHVfYWRkX3JlbW92ZV9sb2NrKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjA0LDE1ICsyMDgsMTggQEAKICNlbmRpZiAvKkNPTkZJR19IT1RQTFVHX0NQVSovCiAKIC8qIFJlcXVpcmVzIGNwdV9hZGRfcmVtb3ZlX2xvY2sgdG8gYmUgaGVsZCAqLwotc3RhdGljIGludCBfX2NwdWluaXQgX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGludCBfX2NwdWluaXQgX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgdGFza3NfZnJvemVuKQogewotCWludCByZXQ7CisJaW50IHJldCwgbnJfY2FsbHMgPSAwOwogCXZvaWQgKmhjcHUgPSAodm9pZCAqKShsb25nKWNwdTsKKwl1bnNpZ25lZCBsb25nIG1vZCA9IHRhc2tzX2Zyb3plbiA/IENQVV9UQVNLU19GUk9aRU4gOiAwOwogCiAJaWYgKGNwdV9vbmxpbmUoY3B1KSB8fCAhY3B1X3ByZXNlbnQoY3B1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSByYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLCBDUFVfVVBfUFJFUEFSRSwgaGNwdSk7CisJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX0xPQ0tfQUNRVUlSRSwgaGNwdSk7CisJcmV0ID0gX19yYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLCBDUFVfVVBfUFJFUEFSRSB8IG1vZCwgaGNwdSwKKwkJCQkJCQktMSwgJm5yX2NhbGxzKTsKIAlpZiAocmV0ID09IE5PVElGWV9CQUQpIHsKIAkJcHJpbnRrKCIlczogYXR0ZW1wdCB0byBicmluZyB1cCBDUFUgJXUgZmFpbGVkXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgY3B1KTsKQEAgLTIyOSwxMiArMjM2LDEzIEBACiAJQlVHX09OKCFjcHVfb25saW5lKGNwdSkpOwogCiAJLyogTm93IGNhbGwgbm90aWZpZXIgaW4gcHJlcGFyYXRpb24uICovCi0JcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX09OTElORSwgaGNwdSk7CisJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX09OTElORSB8IG1vZCwgaGNwdSk7CiAKIG91dF9ub3RpZnk6CiAJaWYgKHJldCAhPSAwKQotCQlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLAotCQkJCUNQVV9VUF9DQU5DRUxFRCwgaGNwdSk7CisJCV9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwKKwkJCQlDUFVfVVBfQ0FOQ0VMRUQgfCBtb2QsIGhjcHUsIG5yX2NhbGxzLCBOVUxMKTsKKwlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLCBDUFVfTE9DS19SRUxFQVNFLCBoY3B1KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNDcsMTkgKzI1NSwxMyBAQAogCWlmIChjcHVfaG90cGx1Z19kaXNhYmxlZCkKIAkJZXJyID0gLUVCVVNZOwogCWVsc2UKLQkJZXJyID0gX2NwdV91cChjcHUpOworCQllcnIgPSBfY3B1X3VwKGNwdSwgMCk7CiAKIAltdXRleF91bmxvY2soJmNwdV9hZGRfcmVtb3ZlX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiAKICNpZmRlZiBDT05GSUdfU1VTUEVORF9TTVAKLS8qIE5lZWRlZCB0byBwcmV2ZW50IHRoZSBtaWNyb2NvZGUgZHJpdmVyIGZyb20gcmVxdWVzdGluZyBmaXJtd2FyZSBpbiBpdHMgQ1BVCi0gKiBob3RwbHVnIG5vdGlmaWVyIGR1cmluZyB0aGUgc3VzcGVuZC9yZXN1bWUuCi0gKi8KLWludCBzdXNwZW5kX2NwdV9ob3RwbHVnOwotRVhQT1JUX1NZTUJPTChzdXNwZW5kX2NwdV9ob3RwbHVnKTsKLQogc3RhdGljIGNwdW1hc2tfdCBmcm96ZW5fY3B1czsKIAogaW50IGRpc2FibGVfbm9uYm9vdF9jcHVzKHZvaWQpCkBAIC0yNjcsNyArMjY5LDYgQEAKIAlpbnQgY3B1LCBmaXJzdF9jcHUsIGVycm9yID0gMDsKIAogCW11dGV4X2xvY2soJmNwdV9hZGRfcmVtb3ZlX2xvY2spOwotCXN1c3BlbmRfY3B1X2hvdHBsdWcgPSAxOwogCWZpcnN0X2NwdSA9IGZpcnN0X2NwdShjcHVfb25saW5lX21hcCk7CiAJLyogV2UgdGFrZSBkb3duIGFsbCBvZiB0aGUgbm9uLWJvb3QgQ1BVcyBpbiBvbmUgc2hvdCB0byBhdm9pZCByYWNlcwogCSAqIHdpdGggdGhlIHVzZXJzcGFjZSB0cnlpbmcgdG8gdXNlIHRoZSBDUFUgaG90cGx1ZyBhdCB0aGUgc2FtZSB0aW1lCkBAIC0yNzcsNyArMjc4LDcgQEAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpZiAoY3B1ID09IGZpcnN0X2NwdSkKIAkJCWNvbnRpbnVlOwotCQllcnJvciA9IF9jcHVfZG93bihjcHUpOworCQllcnJvciA9IF9jcHVfZG93bihjcHUsIDEpOwogCQlpZiAoIWVycm9yKSB7CiAJCQljcHVfc2V0KGNwdSwgZnJvemVuX2NwdXMpOwogCQkJcHJpbnRrKCJDUFUlZCBpcyBkb3duXG4iLCBjcHUpOwpAQCAtMjk0LDcgKzI5NSw2IEBACiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJOb24tYm9vdCBDUFVzIGFyZSBub3QgZGlzYWJsZWRcbiIpOwogCX0KLQlzdXNwZW5kX2NwdV9ob3RwbHVnID0gMDsKIAltdXRleF91bmxvY2soJmNwdV9hZGRfcmVtb3ZlX2xvY2spOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTMwOSwxMCArMzA5LDkgQEAKIAlpZiAoY3B1c19lbXB0eShmcm96ZW5fY3B1cykpCiAJCWdvdG8gb3V0OwogCi0Jc3VzcGVuZF9jcHVfaG90cGx1ZyA9IDE7CiAJcHJpbnRrKCJFbmFibGluZyBub24tYm9vdCBDUFVzIC4uLlxuIik7CiAJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBmcm96ZW5fY3B1cykgewotCQllcnJvciA9IF9jcHVfdXAoY3B1KTsKKwkJZXJyb3IgPSBfY3B1X3VwKGNwdSwgMSk7CiAJCWlmICghZXJyb3IpIHsKIAkJCXByaW50aygiQ1BVJWQgaXMgdXBcbiIsIGNwdSk7CiAJCQljb250aW51ZTsKQEAgLTMyMCw3ICszMTksNiBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJFcnJvciB0YWtpbmcgQ1BVJWQgdXA6ICVkXG4iLCBjcHUsIGVycm9yKTsKIAl9CiAJY3B1c19jbGVhcihmcm96ZW5fY3B1cyk7Ci0Jc3VzcGVuZF9jcHVfaG90cGx1ZyA9IDA7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZjcHVfYWRkX3JlbW92ZV9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCBkMjQwMzQ5Li5mNTc4NTRiIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtODIyLDExICs4MjEsMjIgQEAKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAl0cmlhbGNzID0gKmNzOwotCXJldHZhbCA9IGNwdWxpc3RfcGFyc2UoYnVmLCB0cmlhbGNzLmNwdXNfYWxsb3dlZCk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7CisKKwkvKgorCSAqIFdlIGFsbG93IGEgY3B1c2V0J3MgY3B1c19hbGxvd2VkIHRvIGJlIGVtcHR5OyBpZiBpdCBoYXMgYXR0YWNoZWQKKwkgKiB0YXNrcywgd2UnbGwgY2F0Y2ggaXQgbGF0ZXIgd2hlbiB3ZSB2YWxpZGF0ZSB0aGUgY2hhbmdlIGFuZCByZXR1cm4KKwkgKiAtRU5PU1BDLgorCSAqLworCWlmICghYnVmWzBdIHx8IChidWZbMF0gPT0gJ1xuJyAmJiAhYnVmWzFdKSkgeworCQljcHVzX2NsZWFyKHRyaWFsY3MuY3B1c19hbGxvd2VkKTsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBjcHVsaXN0X3BhcnNlKGJ1ZiwgdHJpYWxjcy5jcHVzX2FsbG93ZWQpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJfQogCWNwdXNfYW5kKHRyaWFsY3MuY3B1c19hbGxvd2VkLCB0cmlhbGNzLmNwdXNfYWxsb3dlZCwgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRyaWFsY3MuY3B1c19hbGxvd2VkKSkKKwkvKiBjcHVzX2FsbG93ZWQgY2Fubm90IGJlIGVtcHR5IGZvciBhIGNwdXNldCB3aXRoIGF0dGFjaGVkIHRhc2tzLiAqLworCWlmIChhdG9taWNfcmVhZCgmY3MtPmNvdW50KSAmJiBjcHVzX2VtcHR5KHRyaWFsY3MuY3B1c19hbGxvd2VkKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAJcmV0dmFsID0gdmFsaWRhdGVfY2hhbmdlKGNzLCAmdHJpYWxjcyk7CiAJaWYgKHJldHZhbCA8IDApCkBAIC05MTksMTYgKzkyOSwyNyBAQAogCQlyZXR1cm4gLUVBQ0NFUzsKIAogCXRyaWFsY3MgPSAqY3M7Ci0JcmV0dmFsID0gbm9kZWxpc3RfcGFyc2UoYnVmLCB0cmlhbGNzLm1lbXNfYWxsb3dlZCk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gZG9uZTsKKworCS8qCisJICogV2UgYWxsb3cgYSBjcHVzZXQncyBtZW1zX2FsbG93ZWQgdG8gYmUgZW1wdHk7IGlmIGl0IGhhcyBhdHRhY2hlZAorCSAqIHRhc2tzLCB3ZSdsbCBjYXRjaCBpdCBsYXRlciB3aGVuIHdlIHZhbGlkYXRlIHRoZSBjaGFuZ2UgYW5kIHJldHVybgorCSAqIC1FTk9TUEMuCisJICovCisJaWYgKCFidWZbMF0gfHwgKGJ1ZlswXSA9PSAnXG4nICYmICFidWZbMV0pKSB7CisJCW5vZGVzX2NsZWFyKHRyaWFsY3MubWVtc19hbGxvd2VkKTsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBub2RlbGlzdF9wYXJzZShidWYsIHRyaWFsY3MubWVtc19hbGxvd2VkKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlnb3RvIGRvbmU7CisJfQogCW5vZGVzX2FuZCh0cmlhbGNzLm1lbXNfYWxsb3dlZCwgdHJpYWxjcy5tZW1zX2FsbG93ZWQsIG5vZGVfb25saW5lX21hcCk7CiAJb2xkbWVtID0gY3MtPm1lbXNfYWxsb3dlZDsKIAlpZiAobm9kZXNfZXF1YWwob2xkbWVtLCB0cmlhbGNzLm1lbXNfYWxsb3dlZCkpIHsKIAkJcmV0dmFsID0gMDsJCS8qIFRvbyBlYXN5IC0gbm90aGluZyB0byBkbyAqLwogCQlnb3RvIGRvbmU7CiAJfQotCWlmIChub2Rlc19lbXB0eSh0cmlhbGNzLm1lbXNfYWxsb3dlZCkpIHsKKwkvKiBtZW1zX2FsbG93ZWQgY2Fubm90IGJlIGVtcHR5IGZvciBhIGNwdXNldCB3aXRoIGF0dGFjaGVkIHRhc2tzLiAqLworCWlmIChhdG9taWNfcmVhZCgmY3MtPmNvdW50KSAmJiBub2Rlc19lbXB0eSh0cmlhbGNzLm1lbXNfYWxsb3dlZCkpIHsKIAkJcmV0dmFsID0gLUVOT1NQQzsKIAkJZ290byBkb25lOwogCX0KQEAgLTE3NTEsMTIgKzE3NzIsNyBAQAogewogCXN0cnVjdCBjdHJfc3RydWN0ICpjdHIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoKnBwb3MgKyBuYnl0ZXMgPiBjdHItPmJ1ZnN6KQotCQluYnl0ZXMgPSBjdHItPmJ1ZnN6IC0gKnBwb3M7Ci0JaWYgKGNvcHlfdG9fdXNlcihidWYsIGN0ci0+YnVmICsgKnBwb3MsIG5ieXRlcykpCi0JCXJldHVybiAtRUZBVUxUOwotCSpwcG9zICs9IG5ieXRlczsKLQlyZXR1cm4gbmJ5dGVzOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcHBvcywgY3RyLT5idWYsIGN0ci0+YnVmc3opOwogfQogCiBzdGF0aWMgaW50IGNwdXNldF90YXNrc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqdW51c2VkX2lub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTIyMDAsMTAgKzIyMTYsNiBAQAogICogaXQgaXMgaG9sZGluZyB0aGF0IG11dGV4IHdoaWxlIGNhbGxpbmcgY2hlY2tfZm9yX3JlbGVhc2UoKSwKICAqIHdoaWNoIGNhbGxzIGttYWxsb2MoKSwgc28gY2FuJ3QgYmUgY2FsbGVkIGhvbGRpbmcgY2FsbGJhY2tfbXV0ZXgoKS4KICAqCi0gKiBXZSBkb24ndCBuZWVkIHRvIHRhc2tfbG9jaygpIHRoaXMgcmVmZXJlbmNlIHRvIHRzay0+Y3B1c2V0LAotICogYmVjYXVzZSB0c2sgaXMgYWxyZWFkeSBtYXJrZWQgUEZfRVhJVElORywgc28gYXR0YWNoX3Rhc2soKSB3b24ndAotICogbWVzcyB3aXRoIGl0LCBvciB0YXNrIGlzIGEgZmFpbGVkIGZvcmssIG5ldmVyIHZpc2libGUgdG8gYXR0YWNoX3Rhc2suCi0gKgogICogdGhlX3RvcF9jcHVzZXRfaGFjazoKICAqCiAgKiAgICBTZXQgdGhlIGV4aXRpbmcgdGFza3MgY3B1c2V0IHRvIHRoZSByb290IGNwdXNldCAodG9wX2NwdXNldCkuCkBAIC0yMjQyLDggKzIyNTQsMTAgQEAKIHsKIAlzdHJ1Y3QgY3B1c2V0ICpjczsKIAorCXRhc2tfbG9jayhjdXJyZW50KTsKIAljcyA9IHRzay0+Y3B1c2V0OwogCXRzay0+Y3B1c2V0ID0gJnRvcF9jcHVzZXQ7CS8qIHRoZV90b3BfY3B1c2V0X2hhY2sgLSBzZWUgYWJvdmUgKi8KKwl0YXNrX3VubG9jayhjdXJyZW50KTsKIAogCWlmIChub3RpZnlfb25fcmVsZWFzZShjcykpIHsKIAkJY2hhciAqcGF0aGJ1ZiA9IE5VTEw7CmRpZmYgLS1naXQgYS9rZXJuZWwvZGllX25vdGlmaWVyLmMgYi9rZXJuZWwvZGllX25vdGlmaWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5ODgyNwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9kaWVfbm90aWZpZXIuYwpAQCAtMCwwICsxLDM4IEBACisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKworCitzdGF0aWMgQVRPTUlDX05PVElGSUVSX0hFQUQoZGllX2NoYWluKTsKKworaW50IG5vdGlmeV9kaWUoZW51bSBkaWVfdmFsIHZhbCwgY29uc3QgY2hhciAqc3RyLAorCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIsIGludCB0cmFwLCBpbnQgc2lnKQoreworCXN0cnVjdCBkaWVfYXJncyBhcmdzID0geworCQkucmVncwkJPSByZWdzLAorCQkuc3RyCQk9IHN0ciwKKwkJLmVycgkJPSBlcnIsCisJCS50cmFwbnIJCT0gdHJhcCwKKwkJLnNpZ25yCQk9IHNpZywKKworCX07CisKKwlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmRpZV9jaGFpbiwgdmFsLCAmYXJncyk7Cit9CisKK2ludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwl2bWFsbG9jX3N5bmNfYWxsKCk7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmZGllX2NoYWluLCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9kaWVfbm90aWZpZXIpOworCitpbnQgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmRpZV9jaGFpbiwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIpOworCisKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDkyMzY5MjQuLjViODg4YzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtNyw3ICs3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CkBAIC0yNSw4ICsyNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsZmQuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGFza3N0YXRzX2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheWFjY3QuaD4KQEAgLTQyLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPiAvKiBmb3IgYXVkaXRfZnJlZSgpICovCiAjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC90YXNrX2lvX2FjY291bnRpbmdfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTgyLDYgKzg0LDE0IEBACiAJc2lnaGFuZCA9IHJjdV9kZXJlZmVyZW5jZSh0c2stPnNpZ2hhbmQpOwogCXNwaW5fbG9jaygmc2lnaGFuZC0+c2lnbG9jayk7CiAKKwkvKgorCSAqIE5vdGlmeSB0aGF0IHRoaXMgc2lnaGFuZCBoYXMgYmVlbiBkZXRhY2hlZC4gVGhpcyBtdXN0CisJICogYmUgY2FsbGVkIHdpdGggdGhlIHRzay0+c2lnaGFuZCBsb2NrIGhlbGQuIEFsc28sIHRoaXMKKwkgKiBhY2Nlc3MgdHNrLT5zaWdoYW5kIGludGVybmFsbHksIHNvIGl0IG11c3QgYmUgY2FsbGVkCisJICogYmVmb3JlIHRzay0+c2lnaGFuZCBpcyByZXNldC4KKwkgKi8KKwlzaWduYWxmZF9kZXRhY2hfbG9ja2VkKHRzayk7CisKIAlwb3NpeF9jcHVfdGltZXJzX2V4aXQodHNrKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2lnLT5jb3VudCkpCiAJCXBvc2l4X2NwdV90aW1lcnNfZXhpdF9ncm91cCh0c2spOwpAQCAtMTEzLDYgKzEyMyw4IEBACiAJCXNpZy0+bnZjc3cgKz0gdHNrLT5udmNzdzsKIAkJc2lnLT5uaXZjc3cgKz0gdHNrLT5uaXZjc3c7CiAJCXNpZy0+c2NoZWRfdGltZSArPSB0c2stPnNjaGVkX3RpbWU7CisJCXNpZy0+aW5ibG9jayArPSB0YXNrX2lvX2dldF9pbmJsb2NrKHRzayk7CisJCXNpZy0+b3VibG9jayArPSB0YXNrX2lvX2dldF9vdWJsb2NrKHRzayk7CiAJCXNpZyA9IE5VTEw7IC8qIE1hcmtlciBmb3IgYmVsb3cuICovCiAJfQogCkBAIC0yNTUsMjYgKzI2NywyNSBAQAogfQogCiAvKioKLSAqIHJlcGFyZW50X3RvX2luaXQgLSBSZXBhcmVudCB0aGUgY2FsbGluZyBrZXJuZWwgdGhyZWFkIHRvIHRoZSBpbml0IHRhc2sgb2YgdGhlIHBpZCBzcGFjZSB0aGF0IHRoZSB0aHJlYWQgYmVsb25ncyB0by4KKyAqIHJlcGFyZW50X3RvX2t0aHJlYWRkIC0gUmVwYXJlbnQgdGhlIGNhbGxpbmcga2VybmVsIHRocmVhZCB0byBrdGhyZWFkZAogICoKICAqIElmIGEga2VybmVsIHRocmVhZCBpcyBsYXVuY2hlZCBhcyBhIHJlc3VsdCBvZiBhIHN5c3RlbSBjYWxsLCBvciBpZgotICogaXQgZXZlciBleGl0cywgaXQgc2hvdWxkIGdlbmVyYWxseSByZXBhcmVudCBpdHNlbGYgdG8gaW5pdCBzbyB0aGF0Ci0gKiBpdCBpcyBjb3JyZWN0bHkgY2xlYW5lZCB1cCBvbiBleGl0LgorICogaXQgZXZlciBleGl0cywgaXQgc2hvdWxkIGdlbmVyYWxseSByZXBhcmVudCBpdHNlbGYgdG8ga3RocmVhZGQgc28gaXQKKyAqIGlzbid0IGluIHRoZSB3YXkgb2Ygb3RoZXIgcHJvY2Vzc2VzIGFuZCBpcyBjb3JyZWN0bHkgY2xlYW5lZCB1cCBvbiBleGl0LgogICoKICAqIFRoZSB2YXJpb3VzIHRhc2sgc3RhdGUgc3VjaCBhcyBzY2hlZHVsaW5nIHBvbGljeSBhbmQgcHJpb3JpdHkgbWF5IGhhdmUKICAqIGJlZW4gaW5oZXJpdGVkIGZyb20gYSB1c2VyIHByb2Nlc3MsIHNvIHdlIHJlc2V0IHRoZW0gdG8gc2FuZSB2YWx1ZXMgaGVyZS4KICAqCi0gKiBOT1RFIHRoYXQgcmVwYXJlbnRfdG9faW5pdCgpIGdpdmVzIHRoZSBjYWxsZXIgZnVsbCBjYXBhYmlsaXRpZXMuCisgKiBOT1RFIHRoYXQgcmVwYXJlbnRfdG9fa3RocmVhZGQoKSBnaXZlcyB0aGUgY2FsbGVyIGZ1bGwgY2FwYWJpbGl0aWVzLgogICovCi1zdGF0aWMgdm9pZCByZXBhcmVudF90b19pbml0KHZvaWQpCitzdGF0aWMgdm9pZCByZXBhcmVudF90b19rdGhyZWFkZCh2b2lkKQogewogCXdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAogCXB0cmFjZV91bmxpbmsoY3VycmVudCk7CiAJLyogUmVwYXJlbnQgdG8gaW5pdCAqLwogCXJlbW92ZV9wYXJlbnQoY3VycmVudCk7Ci0JY3VycmVudC0+cGFyZW50ID0gY2hpbGRfcmVhcGVyKGN1cnJlbnQpOwotCWN1cnJlbnQtPnJlYWxfcGFyZW50ID0gY2hpbGRfcmVhcGVyKGN1cnJlbnQpOworCWN1cnJlbnQtPnJlYWxfcGFyZW50ID0gY3VycmVudC0+cGFyZW50ID0ga3RocmVhZGRfdGFzazsKIAlhZGRfcGFyZW50KGN1cnJlbnQpOwogCiAJLyogU2V0IHRoZSBleGl0IHNpZ25hbCB0byBTSUdDSExEIHNvIHdlIHNpZ25hbCBpbml0IG9uIGV4aXQgKi8KQEAgLTMwMCwxMiArMzExLDEyIEBACiAJaWYgKHByb2Nlc3Nfc2Vzc2lvbihjdXJyKSAhPSBzZXNzaW9uKSB7CiAJCWRldGFjaF9waWQoY3VyciwgUElEVFlQRV9TSUQpOwogCQlzZXRfc2lnbmFsX3Nlc3Npb24oY3Vyci0+c2lnbmFsLCBzZXNzaW9uKTsKLQkJYXR0YWNoX3BpZChjdXJyLCBQSURUWVBFX1NJRCwgc2Vzc2lvbik7CisJCWF0dGFjaF9waWQoY3VyciwgUElEVFlQRV9TSUQsIGZpbmRfcGlkKHNlc3Npb24pKTsKIAl9CiAJaWYgKHByb2Nlc3NfZ3JvdXAoY3VycikgIT0gcGdycCkgewogCQlkZXRhY2hfcGlkKGN1cnIsIFBJRFRZUEVfUEdJRCk7CiAJCWN1cnItPnNpZ25hbC0+cGdycCA9IHBncnA7Ci0JCWF0dGFjaF9waWQoY3VyciwgUElEVFlQRV9QR0lELCBwZ3JwKTsKKwkJYXR0YWNoX3BpZChjdXJyLCBQSURUWVBFX1BHSUQsIGZpbmRfcGlkKHBncnApKTsKIAl9CiB9CiAKQEAgLTM0OCw3ICszNTksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXNpZ2FkZHNldCgmY3VycmVudC0+YmxvY2tlZCwgc2lnKTsKKwljdXJyZW50LT5zaWdoYW5kLT5hY3Rpb25bKHNpZyktMV0uc2Euc2FfaGFuZGxlciA9IFNJR19JR047CiAJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCXJldHVybiAwOwpAQCAtNDAxLDcgKzQxMiw3IEBACiAJY3VycmVudC0+ZmlsZXMgPSBpbml0X3Rhc2suZmlsZXM7CiAJYXRvbWljX2luYygmY3VycmVudC0+ZmlsZXMtPmNvdW50KTsKIAotCXJlcGFyZW50X3RvX2luaXQoKTsKKwlyZXBhcmVudF90b19rdGhyZWFkZCgpOwogfQogCiBFWFBPUlRfU1lNQk9MKGRhZW1vbml6ZSk7CkBAIC03NTEsMTEgKzc2Miw4IEBACiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJCWZvciAodCA9IG5leHRfdGhyZWFkKHRzayk7IHQgIT0gdHNrOyB0ID0gbmV4dF90aHJlYWQodCkpCi0JCQlpZiAoIXNpZ25hbF9wZW5kaW5nKHQpICYmICEodC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkgewotCQkJCXJlY2FsY19zaWdwZW5kaW5nX3Rzayh0KTsKLQkJCQlpZiAoc2lnbmFsX3BlbmRpbmcodCkpCi0JCQkJCXNpZ25hbF93YWtlX3VwKHQsIDApOwotCQkJfQorCQkJaWYgKCFzaWduYWxfcGVuZGluZyh0KSAmJiAhKHQtPmZsYWdzICYgUEZfRVhJVElORykpCisJCQkJcmVjYWxjX3NpZ3BlbmRpbmdfYW5kX3dha2UodCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCX0KQEAgLTExOTQsNiArMTIwMiwxMiBAQAogCQkJcC0+bnZjc3cgKyBzaWctPm52Y3N3ICsgc2lnLT5jbnZjc3c7CiAJCXBzaWctPmNuaXZjc3cgKz0KIAkJCXAtPm5pdmNzdyArIHNpZy0+bml2Y3N3ICsgc2lnLT5jbml2Y3N3OworCQlwc2lnLT5jaW5ibG9jayArPQorCQkJdGFza19pb19nZXRfaW5ibG9jayhwKSArCisJCQlzaWctPmluYmxvY2sgKyBzaWctPmNpbmJsb2NrOworCQlwc2lnLT5jb3VibG9jayArPQorCQkJdGFza19pb19nZXRfb3VibG9jayhwKSArCisJCQlzaWctPm91YmxvY2sgKyBzaWctPmNvdWJsb2NrOwogCQlzcGluX3VubG9ja19pcnEoJnAtPnBhcmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCBiN2QxNjlkLi43M2FkNWNkIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KQEAgLTQ2LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHNhY2N0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9jbl9wcm9jLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5YWNjdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Rhc2tzdGF0c19rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CkBAIC0xMDYsNyArMTA2LDcgQEAKIAogdm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JZnJlZV90aHJlYWRfaW5mbyh0c2stPnRocmVhZF9pbmZvKTsKKwlmcmVlX3RocmVhZF9pbmZvKHRzay0+c3RhY2spOwogCXJ0X211dGV4X2RlYnVnX3Rhc2tfZnJlZSh0c2spOwogCWZyZWVfdGFza19zdHJ1Y3QodHNrKTsKIH0KQEAgLTE3Niw3ICsxNzYsNyBAQAogCX0KIAogCSp0c2sgPSAqb3JpZzsKLQl0c2stPnRocmVhZF9pbmZvID0gdGk7CisJdHNrLT5zdGFjayA9IHRpOwogCXNldHVwX3RocmVhZF9zdGFjayh0c2ssIG9yaWcpOwogCiAjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCkBAIC04NzYsNiArODc2LDcgQEAKIAlzaWctPnV0aW1lID0gc2lnLT5zdGltZSA9IHNpZy0+Y3V0aW1lID0gc2lnLT5jc3RpbWUgPSBjcHV0aW1lX3plcm87CiAJc2lnLT5udmNzdyA9IHNpZy0+bml2Y3N3ID0gc2lnLT5jbnZjc3cgPSBzaWctPmNuaXZjc3cgPSAwOwogCXNpZy0+bWluX2ZsdCA9IHNpZy0+bWFqX2ZsdCA9IHNpZy0+Y21pbl9mbHQgPSBzaWctPmNtYWpfZmx0ID0gMDsKKwlzaWctPmluYmxvY2sgPSBzaWctPm91YmxvY2sgPSBzaWctPmNpbmJsb2NrID0gc2lnLT5jb3VibG9jayA9IDA7CiAJc2lnLT5zY2hlZF90aW1lID0gMDsKIAlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzBdKTsKIAlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzFdKTsKQEAgLTk1Niw3ICs5NTcsNyBAQAogCQkJCQl1bnNpZ25lZCBsb25nIHN0YWNrX3NpemUsCiAJCQkJCWludCBfX3VzZXIgKnBhcmVudF90aWRwdHIsCiAJCQkJCWludCBfX3VzZXIgKmNoaWxkX3RpZHB0ciwKLQkJCQkJaW50IHBpZCkKKwkJCQkJc3RydWN0IHBpZCAqcGlkKQogewogCWludCByZXR2YWw7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gTlVMTDsKQEAgLTEwMjMsNyArMTAyNCw3IEBACiAJcC0+ZGlkX2V4ZWMgPSAwOwogCWRlbGF5YWNjdF90c2tfaW5pdChwKTsJLyogTXVzdCByZW1haW4gYWZ0ZXIgZHVwX3Rhc2tfc3RydWN0KCkgKi8KIAljb3B5X2ZsYWdzKGNsb25lX2ZsYWdzLCBwKTsKLQlwLT5waWQgPSBwaWQ7CisJcC0+cGlkID0gcGlkX25yKHBpZCk7CiAJcmV0dmFsID0gLUVGQVVMVDsKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9QQVJFTlRfU0VUVElEKQogCQlpZiAocHV0X3VzZXIocC0+cGlkLCBwYXJlbnRfdGlkcHRyKSkKQEAgLTEyNTIsMTMgKzEyNTMsMTMgQEAKIAkJCXAtPnNpZ25hbC0+dHR5ID0gY3VycmVudC0+c2lnbmFsLT50dHk7CiAJCQlwLT5zaWduYWwtPnBncnAgPSBwcm9jZXNzX2dyb3VwKGN1cnJlbnQpOwogCQkJc2V0X3NpZ25hbF9zZXNzaW9uKHAtPnNpZ25hbCwgcHJvY2Vzc19zZXNzaW9uKGN1cnJlbnQpKTsKLQkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9QR0lELCBwcm9jZXNzX2dyb3VwKHApKTsKLQkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9TSUQsIHByb2Nlc3Nfc2Vzc2lvbihwKSk7CisJCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfUEdJRCwgdGFza19wZ3JwKGN1cnJlbnQpKTsKKwkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9TSUQsIHRhc2tfc2Vzc2lvbihjdXJyZW50KSk7CiAKIAkJCWxpc3RfYWRkX3RhaWxfcmN1KCZwLT50YXNrcywgJmluaXRfdGFzay50YXNrcyk7CiAJCQlfX2dldF9jcHVfdmFyKHByb2Nlc3NfY291bnRzKSsrOwogCQl9Ci0JCWF0dGFjaF9waWQocCwgUElEVFlQRV9QSUQsIHAtPnBpZCk7CisJCWF0dGFjaF9waWQocCwgUElEVFlQRV9QSUQsIHBpZCk7CiAJCW5yX3RocmVhZHMrKzsKIAl9CiAKQEAgLTEzMjIsNyArMTMyMyw4IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CiAKLQl0YXNrID0gY29weV9wcm9jZXNzKENMT05FX1ZNLCAwLCBpZGxlX3JlZ3MoJnJlZ3MpLCAwLCBOVUxMLCBOVUxMLCAwKTsKKwl0YXNrID0gY29weV9wcm9jZXNzKENMT05FX1ZNLCAwLCBpZGxlX3JlZ3MoJnJlZ3MpLCAwLCBOVUxMLCBOVUxMLAorCQkJCSZpbml0X3N0cnVjdF9waWQpOwogCWlmICghSVNfRVJSKHRhc2spKQogCQlpbml0X2lkbGUodGFzaywgY3B1KTsKIApAQCAtMTM3Miw3ICsxMzc0LDcgQEAKIAkJCWNsb25lX2ZsYWdzIHw9IENMT05FX1BUUkFDRTsKIAl9CiAKLQlwID0gY29weV9wcm9jZXNzKGNsb25lX2ZsYWdzLCBzdGFja19zdGFydCwgcmVncywgc3RhY2tfc2l6ZSwgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyLCBucik7CisJcCA9IGNvcHlfcHJvY2VzcyhjbG9uZV9mbGFncywgc3RhY2tfc3RhcnQsIHJlZ3MsIHN0YWNrX3NpemUsIHBhcmVudF90aWRwdHIsIGNoaWxkX3RpZHB0ciwgcGlkKTsKIAkvKgogCSAqIERvIHRoaXMgcHJpb3Igd2FraW5nIHVwIHRoZSBuZXcgdGhyZWFkIC0gdGhlIHRocmVhZCBwb2ludGVyCiAJICogbWlnaHQgZ2V0IGludmFsaWQgYWZ0ZXIgdGhhdCBwb2ludCwgaWYgdGhlIHRocmVhZCBleGl0cyBxdWlja2x5LgpAQCAtMTQwNCw3ICsxNDA2LDkgQEAKIAkJfQogCiAJCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1ZGT1JLKSB7CisJCQlmcmVlemVyX2RvX25vdF9jb3VudCgpOwogCQkJd2FpdF9mb3JfY29tcGxldGlvbigmdmZvcmspOworCQkJZnJlZXplcl9jb3VudCgpOwogCQkJaWYgKHVubGlrZWx5IChjdXJyZW50LT5wdHJhY2UgJiBQVF9UUkFDRV9WRk9SS19ET05FKSkgewogCQkJCWN1cnJlbnQtPnB0cmFjZV9tZXNzYWdlID0gbnI7CiAJCQkJcHRyYWNlX25vdGlmeSAoKFBUUkFDRV9FVkVOVF9WRk9SS19ET05FIDw8IDgpIHwgU0lHVFJBUCk7CkBAIC0xNDIxLDEyICsxNDI1LDEzIEBACiAjZGVmaW5lIEFSQ0hfTUlOX01NU1RSVUNUX0FMSUdOIDAKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBzaWdoYW5kX2N0b3Iodm9pZCAqZGF0YSwgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyB2b2lkIHNpZ2hhbmRfY3Rvcih2b2lkICpkYXRhLCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLAorCQkJdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnNpZ2hhbmQgPSBkYXRhOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKQotCQlzcGluX2xvY2tfaW5pdCgmc2lnaGFuZC0+c2lnbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnNpZ2hhbmQtPnNpZ2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZzaWdoYW5kLT5zaWduYWxmZF9saXN0KTsKIH0KIAogdm9pZCBfX2luaXQgcHJvY19jYWNoZXNfaW5pdCh2b2lkKQpAQCAtMTQ1Miw3ICsxNDU3LDYgQEAKIAkJCVNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLCBOVUxMLCBOVUxMKTsKIH0KIAotCiAvKgogICogQ2hlY2sgY29uc3RyYWludHMgb24gZmxhZ3MgcGFzc2VkIHRvIHRoZSB1bnNoYXJlIHN5c3RlbSBjYWxsIGFuZAogICogZm9yY2UgdW5zaGFyaW5nIG9mIGFkZGl0aW9uYWwgcHJvY2VzcyBjb250ZXh0IGFzIGFwcHJvcHJpYXRlLgpAQCAtMTUxNiwyNiArMTUyMCw2IEBACiB9CiAKIC8qCi0gKiBVbnNoYXJlIHRoZSBtbnRfbmFtZXNwYWNlIHN0cnVjdHVyZSBpZiBpdCBpcyBiZWluZyBzaGFyZWQKLSAqLwotc3RhdGljIGludCB1bnNoYXJlX21udF9uYW1lc3BhY2UodW5zaWduZWQgbG9uZyB1bnNoYXJlX2ZsYWdzLAotCQlzdHJ1Y3QgbW50X25hbWVzcGFjZSAqKm5ld19uc3AsIHN0cnVjdCBmc19zdHJ1Y3QgKm5ld19mcykKLXsKLQlzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMgPSBjdXJyZW50LT5uc3Byb3h5LT5tbnRfbnM7Ci0KLQlpZiAoKHVuc2hhcmVfZmxhZ3MgJiBDTE9ORV9ORVdOUykgJiYgbnMpIHsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQotCQkqbmV3X25zcCA9IGR1cF9tbnRfbnMoY3VycmVudCwgbmV3X2ZzID8gbmV3X2ZzIDogY3VycmVudC0+ZnMpOwotCQlpZiAoISpuZXdfbnNwKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBVbnNoYXJpbmcgb2Ygc2lnaGFuZCBpcyBub3Qgc3VwcG9ydGVkIHlldAogICovCiBzdGF0aWMgaW50IHVuc2hhcmVfc2lnaGFuZCh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsIHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqKm5ld19zaWdocCkKQEAgLTE1OTMsMTYgKzE1NzcsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZuZGVmIENPTkZJR19JUENfTlMKLXN0YXRpYyBpbmxpbmUgaW50IHVuc2hhcmVfaXBjcyh1bnNpZ25lZCBsb25nIGZsYWdzLCBzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqKm5zKQotewotCWlmIChmbGFncyAmIENMT05FX05FV0lQQykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiAvKgogICogdW5zaGFyZSBhbGxvd3MgYSBwcm9jZXNzIHRvICd1bnNoYXJlJyBwYXJ0IG9mIHRoZSBwcm9jZXNzCiAgKiBjb250ZXh0IHdoaWNoIHdhcyBvcmlnaW5hbGx5IHNoYXJlZCB1c2luZyBjbG9uZS4gIGNvcHlfKgpAQCAtMTYxNSwxNCArMTU4OSwxMSBAQAogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBmc19zdHJ1Y3QgKmZzLCAqbmV3X2ZzID0gTlVMTDsKLQlzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMsICpuZXdfbnMgPSBOVUxMOwogCXN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqbmV3X3NpZ2ggPSBOVUxMOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqbmV3X21tID0gTlVMTCwgKmFjdGl2ZV9tbSA9IE5VTEw7CiAJc3RydWN0IGZpbGVzX3N0cnVjdCAqZmQsICpuZXdfZmQgPSBOVUxMOwogCXN0cnVjdCBzZW1fdW5kb19saXN0ICpuZXdfdWxpc3QgPSBOVUxMOwogCXN0cnVjdCBuc3Byb3h5ICpuZXdfbnNwcm94eSA9IE5VTEwsICpvbGRfbnNwcm94eSA9IE5VTEw7Ci0Jc3RydWN0IHV0c19uYW1lc3BhY2UgKnV0cywgKm5ld191dHMgPSBOVUxMOwotCXN0cnVjdCBpcGNfbmFtZXNwYWNlICppcGMsICpuZXdfaXBjID0gTlVMTDsKIAogCWNoZWNrX3Vuc2hhcmVfZmxhZ3MoJnVuc2hhcmVfZmxhZ3MpOwogCkBAIC0xNjM3LDM2ICsxNjA4LDI0IEBACiAJCWdvdG8gYmFkX3Vuc2hhcmVfb3V0OwogCWlmICgoZXJyID0gdW5zaGFyZV9mcyh1bnNoYXJlX2ZsYWdzLCAmbmV3X2ZzKSkpCiAJCWdvdG8gYmFkX3Vuc2hhcmVfY2xlYW51cF90aHJlYWQ7Ci0JaWYgKChlcnIgPSB1bnNoYXJlX21udF9uYW1lc3BhY2UodW5zaGFyZV9mbGFncywgJm5ld19ucywgbmV3X2ZzKSkpCi0JCWdvdG8gYmFkX3Vuc2hhcmVfY2xlYW51cF9mczsKIAlpZiAoKGVyciA9IHVuc2hhcmVfc2lnaGFuZCh1bnNoYXJlX2ZsYWdzLCAmbmV3X3NpZ2gpKSkKLQkJZ290byBiYWRfdW5zaGFyZV9jbGVhbnVwX25zOworCQlnb3RvIGJhZF91bnNoYXJlX2NsZWFudXBfZnM7CiAJaWYgKChlcnIgPSB1bnNoYXJlX3ZtKHVuc2hhcmVfZmxhZ3MsICZuZXdfbW0pKSkKIAkJZ290byBiYWRfdW5zaGFyZV9jbGVhbnVwX3NpZ2g7CiAJaWYgKChlcnIgPSB1bnNoYXJlX2ZkKHVuc2hhcmVfZmxhZ3MsICZuZXdfZmQpKSkKIAkJZ290byBiYWRfdW5zaGFyZV9jbGVhbnVwX3ZtOwogCWlmICgoZXJyID0gdW5zaGFyZV9zZW11bmRvKHVuc2hhcmVfZmxhZ3MsICZuZXdfdWxpc3QpKSkKIAkJZ290byBiYWRfdW5zaGFyZV9jbGVhbnVwX2ZkOwotCWlmICgoZXJyID0gdW5zaGFyZV91dHNuYW1lKHVuc2hhcmVfZmxhZ3MsICZuZXdfdXRzKSkpCisJaWYgKChlcnIgPSB1bnNoYXJlX25zcHJveHlfbmFtZXNwYWNlcyh1bnNoYXJlX2ZsYWdzLCAmbmV3X25zcHJveHksCisJCQluZXdfZnMpKSkKIAkJZ290byBiYWRfdW5zaGFyZV9jbGVhbnVwX3NlbXVuZG87Ci0JaWYgKChlcnIgPSB1bnNoYXJlX2lwY3ModW5zaGFyZV9mbGFncywgJm5ld19pcGMpKSkKLQkJZ290byBiYWRfdW5zaGFyZV9jbGVhbnVwX3V0czsKIAotCWlmIChuZXdfbnMgfHwgbmV3X3V0cyB8fCBuZXdfaXBjKSB7Ci0JCW9sZF9uc3Byb3h5ID0gY3VycmVudC0+bnNwcm94eTsKLQkJbmV3X25zcHJveHkgPSBkdXBfbmFtZXNwYWNlcyhvbGRfbnNwcm94eSk7Ci0JCWlmICghbmV3X25zcHJveHkpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIGJhZF91bnNoYXJlX2NsZWFudXBfaXBjOwotCQl9Ci0JfQotCi0JaWYgKG5ld19mcyB8fCBuZXdfbnMgfHwgbmV3X21tIHx8IG5ld19mZCB8fCBuZXdfdWxpc3QgfHwKLQkJCQluZXdfdXRzIHx8IG5ld19pcGMpIHsKKwlpZiAobmV3X2ZzIHx8ICBuZXdfbW0gfHwgbmV3X2ZkIHx8IG5ld191bGlzdCB8fCBuZXdfbnNwcm94eSkgewogCiAJCXRhc2tfbG9jayhjdXJyZW50KTsKIAogCQlpZiAobmV3X25zcHJveHkpIHsKKwkJCW9sZF9uc3Byb3h5ID0gY3VycmVudC0+bnNwcm94eTsKIAkJCWN1cnJlbnQtPm5zcHJveHkgPSBuZXdfbnNwcm94eTsKIAkJCW5ld19uc3Byb3h5ID0gb2xkX25zcHJveHk7CiAJCX0KQEAgLTE2NzcsMTIgKzE2MzYsNiBAQAogCQkJbmV3X2ZzID0gZnM7CiAJCX0KIAotCQlpZiAobmV3X25zKSB7Ci0JCQlucyA9IGN1cnJlbnQtPm5zcHJveHktPm1udF9uczsKLQkJCWN1cnJlbnQtPm5zcHJveHktPm1udF9ucyA9IG5ld19uczsKLQkJCW5ld19ucyA9IG5zOwotCQl9Ci0KIAkJaWYgKG5ld19tbSkgewogCQkJbW0gPSBjdXJyZW50LT5tbTsKIAkJCWFjdGl2ZV9tbSA9IGN1cnJlbnQtPmFjdGl2ZV9tbTsKQEAgLTE2OTgsMzIgKzE2NTEsMTIgQEAKIAkJCW5ld19mZCA9IGZkOwogCQl9CiAKLQkJaWYgKG5ld191dHMpIHsKLQkJCXV0cyA9IGN1cnJlbnQtPm5zcHJveHktPnV0c19uczsKLQkJCWN1cnJlbnQtPm5zcHJveHktPnV0c19ucyA9IG5ld191dHM7Ci0JCQluZXdfdXRzID0gdXRzOwotCQl9Ci0KLQkJaWYgKG5ld19pcGMpIHsKLQkJCWlwYyA9IGN1cnJlbnQtPm5zcHJveHktPmlwY19uczsKLQkJCWN1cnJlbnQtPm5zcHJveHktPmlwY19ucyA9IG5ld19pcGM7Ci0JCQluZXdfaXBjID0gaXBjOwotCQl9Ci0KIAkJdGFza191bmxvY2soY3VycmVudCk7CiAJfQogCiAJaWYgKG5ld19uc3Byb3h5KQogCQlwdXRfbnNwcm94eShuZXdfbnNwcm94eSk7CiAKLWJhZF91bnNoYXJlX2NsZWFudXBfaXBjOgotCWlmIChuZXdfaXBjKQotCQlwdXRfaXBjX25zKG5ld19pcGMpOwotCi1iYWRfdW5zaGFyZV9jbGVhbnVwX3V0czoKLQlpZiAobmV3X3V0cykKLQkJcHV0X3V0c19ucyhuZXdfdXRzKTsKLQogYmFkX3Vuc2hhcmVfY2xlYW51cF9zZW11bmRvOgogYmFkX3Vuc2hhcmVfY2xlYW51cF9mZDoKIAlpZiAobmV3X2ZkKQpAQCAtMTczOCwxMCArMTY3MSw2IEBACiAJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZuZXdfc2lnaC0+Y291bnQpKQogCQkJa21lbV9jYWNoZV9mcmVlKHNpZ2hhbmRfY2FjaGVwLCBuZXdfc2lnaCk7CiAKLWJhZF91bnNoYXJlX2NsZWFudXBfbnM6Ci0JaWYgKG5ld19ucykKLQkJcHV0X21udF9ucyhuZXdfbnMpOwotCiBiYWRfdW5zaGFyZV9jbGVhbnVwX2ZzOgogCWlmIChuZXdfZnMpCiAJCXB1dF9mc19zdHJ1Y3QobmV3X2ZzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC5jIGIva2VybmVsL2Z1dGV4LmMKaW5kZXggNWEyNzBiNS4uYjdjZTE1YyAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTE2LDYgKzE2LDkgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IFRpbWVzeXMgQ29ycC4sIFRob21hcyBHbGVpeG5lciA8dGdseEB0aW1lc3lzLmNvbT4KICAqCisgKiAgUFJJVkFURSBmdXRleGVzIGJ5IEVyaWMgRHVtYXpldAorICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIER1bWF6ZXQgPGRhZGExQGNvc21vc2JheS5jb20+CisgKgogICogIFRoYW5rcyB0byBCZW4gTGFIYWlzZSBmb3IgeWVsbGluZyAiaGFzaGVkIHdhaXRxdWV1ZXMiIGxvdWRseQogICogIGVub3VnaCBhdCBtZSwgTGludXMgZm9yIHRoZSBvcmlnaW5hbCAoZmxhd2VkKSBpZGVhLCBNYXR0aGV3CiAgKiAgS2lya3dvb2QgZm9yIHByb29mLW9mLWNvbmNlcHQgaW1wbGVtZW50YXRpb24uCkBAIC00OCwzNyArNTEsMTggQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vZnV0ZXguaD4KIAogI2luY2x1ZGUgInJ0bXV0ZXhfY29tbW9uLmgiCiAKLSNkZWZpbmUgRlVURVhfSEFTSEJJVFMgKENPTkZJR19CQVNFX1NNQUxMID8gNCA6IDgpCisjaWZkZWYgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMKKyMgaW5jbHVkZSAicnRtdXRleC1kZWJ1Zy5oIgorI2Vsc2UKKyMgaW5jbHVkZSAicnRtdXRleC5oIgorI2VuZGlmCiAKLS8qCi0gKiBGdXRleGVzIGFyZSBtYXRjaGVkIG9uIGVxdWFsIHZhbHVlcyBvZiB0aGlzIGtleS4KLSAqIFRoZSBrZXkgdHlwZSBkZXBlbmRzIG9uIHdoZXRoZXIgaXQncyBhIHNoYXJlZCBvciBwcml2YXRlIG1hcHBpbmcuCi0gKiBEb24ndCByZWFycmFuZ2UgbWVtYmVycyB3aXRob3V0IGxvb2tpbmcgYXQgaGFzaF9mdXRleCgpLgotICoKLSAqIG9mZnNldCBpcyBhbGlnbmVkIHRvIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKHUzMikgKD09IDQpIGJ5IGRlZmluaXRpb24uCi0gKiBXZSBzZXQgYml0IDAgdG8gaW5kaWNhdGUgaWYgaXQncyBhbiBpbm9kZS1iYXNlZCBrZXkuCi0gKi8KLXVuaW9uIGZ1dGV4X2tleSB7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgbG9uZyBwZ29mZjsKLQkJc3RydWN0IGlub2RlICppbm9kZTsKLQkJaW50IG9mZnNldDsKLQl9IHNoYXJlZDsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7Ci0JCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCQlpbnQgb2Zmc2V0OwotCX0gcHJpdmF0ZTsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsb25nIHdvcmQ7Ci0JCXZvaWQgKnB0cjsKLQkJaW50IG9mZnNldDsKLQl9IGJvdGg7Ci19OworI2RlZmluZSBGVVRFWF9IQVNIQklUUyAoQ09ORklHX0JBU0VfU01BTEwgPyA0IDogOCkKIAogLyoKICAqIFByaW9yaXR5IEluaGVyaXRhbmNlIHN0YXRlOgpAQCAtMTA2LDEyICs5MCwxMiBAQAogICogd2UgY2FuIHdha2Ugb25seSB0aGUgcmVsZXZhbnQgb25lcyAoaGFzaGVkIHF1ZXVlcyBtYXkgYmUgc2hhcmVkKS4KICAqCiAgKiBBIGZ1dGV4X3EgaGFzIGEgd29rZW4gc3RhdGUsIGp1c3QgbGlrZSB0YXNrcyBoYXZlIFRBU0tfUlVOTklORy4KLSAqIEl0IGlzIGNvbnNpZGVyZWQgd29rZW4gd2hlbiBsaXN0X2VtcHR5KCZxLT5saXN0KSB8fCBxLT5sb2NrX3B0ciA9PSAwLgorICogSXQgaXMgY29uc2lkZXJlZCB3b2tlbiB3aGVuIHBsaXN0X25vZGVfZW1wdHkoJnEtPmxpc3QpIHx8IHEtPmxvY2tfcHRyID09IDAuCiAgKiBUaGUgb3JkZXIgb2Ygd2FrdXAgaXMgYWx3YXlzIHRvIG1ha2UgdGhlIGZpcnN0IGNvbmRpdGlvbiB0cnVlLCB0aGVuCiAgKiB3YWtlIHVwIHEtPndhaXRlcnMsIHRoZW4gbWFrZSB0aGUgc2Vjb25kIGNvbmRpdGlvbiB0cnVlLgogICovCiBzdHJ1Y3QgZnV0ZXhfcSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdGVyczsKIAogCS8qIFdoaWNoIGhhc2ggbGlzdCBsb2NrIHRvIHVzZTogKi8KQEAgLTEyNywxNCArMTExLDIwIEBACiAJLyogT3B0aW9uYWwgcHJpb3JpdHkgaW5oZXJpdGFuY2Ugc3RhdGU6ICovCiAJc3RydWN0IGZ1dGV4X3BpX3N0YXRlICpwaV9zdGF0ZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisKKwkvKgorCSAqIFRoaXMgd2FpdGVyIGlzIHVzZWQgaW4gY2FzZSBvZiByZXF1ZXVlIGZyb20gYQorCSAqIG5vcm1hbCBmdXRleCB0byBhIFBJLWZ1dGV4CisJICovCisJc3RydWN0IHJ0X211dGV4X3dhaXRlciB3YWl0ZXI7CiB9OwogCiAvKgogICogU3BsaXQgdGhlIGdsb2JhbCBmdXRleF9sb2NrIGludG8gZXZlcnkgaGFzaCBsaXN0IGxvY2suCiAgKi8KIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCB7Ci0gICAgICAgc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsKLSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGNoYWluOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgcGxpc3RfaGVhZCBjaGFpbjsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgZnV0ZXhfcXVldWVzWzE8PEZVVEVYX0hBU0hCSVRTXTsKQEAgLTE2MywxOSArMTUzLDI2IEBACiAJCSYmIGtleTEtPmJvdGgub2Zmc2V0ID09IGtleTItPmJvdGgub2Zmc2V0KTsKIH0KIAotLyoKLSAqIEdldCBwYXJhbWV0ZXJzIHdoaWNoIGFyZSB0aGUga2V5cyBmb3IgYSBmdXRleC4KKy8qKgorICogZ2V0X2Z1dGV4X2tleSAtIEdldCBwYXJhbWV0ZXJzIHdoaWNoIGFyZSB0aGUga2V5cyBmb3IgYSBmdXRleC4KKyAqIEB1YWRkcjogdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBmdXRleAorICogQHNoYXJlZDogTlVMTCBmb3IgYSBQUk9DRVNTX1BSSVZBVEUgZnV0ZXgsCisgKgkmY3VycmVudC0+bW0tPm1tYXBfc2VtIGZvciBhIFBST0NFU1NfU0hBUkVEIGZ1dGV4CisgKiBAa2V5OiBhZGRyZXNzIHdoZXJlIHJlc3VsdCBpcyBzdG9yZWQuCisgKgorICogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgMAorICogVGhlIGtleSB3b3JkcyBhcmUgc3RvcmVkIGluICprZXkgb24gc3VjY2Vzcy4KICAqCiAgKiBGb3Igc2hhcmVkIG1hcHBpbmdzLCBpdCdzIChwYWdlLT5pbmRleCwgdm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLAogICogb2Zmc2V0X3dpdGhpbl9wYWdlKS4gIEZvciBwcml2YXRlIG1hcHBpbmdzLCBpdCdzICh1YWRkciwgY3VycmVudC0+bW0pLgogICogV2UgY2FuIHVzdWFsbHkgd29yayBvdXQgdGhlIGluZGV4IHdpdGhvdXQgc3dhcHBpbmcgaW4gdGhlIHBhZ2UuCiAgKgotICogUmV0dXJuczogMCwgb3IgbmVnYXRpdmUgZXJyb3IgY29kZS4KLSAqIFRoZSBrZXkgd29yZHMgYXJlIHN0b3JlZCBpbiAqa2V5IG9uIHN1Y2Nlc3MuCi0gKgotICogU2hvdWxkIGJlIGNhbGxlZCB3aXRoICZjdXJyZW50LT5tbS0+bW1hcF9zZW0gYnV0IE5PVCBhbnkgc3BpbmxvY2tzLgorICogZnNoYXJlZCBpcyBOVUxMIGZvciBQUk9DRVNTX1BSSVZBVEUgZnV0ZXhlcworICogRm9yIG90aGVyIGZ1dGV4ZXMsIGl0IHBvaW50cyB0byAmY3VycmVudC0+bW0tPm1tYXBfc2VtIGFuZAorICogY2FsbGVyIG11c3QgaGF2ZSB0YWtlbiB0aGUgcmVhZGVyIGxvY2suIGJ1dCBOT1QgYW55IHNwaW5sb2Nrcy4KICAqLwotc3RhdGljIGludCBnZXRfZnV0ZXhfa2V5KHUzMiBfX3VzZXIgKnVhZGRyLCB1bmlvbiBmdXRleF9rZXkgKmtleSkKK2ludCBnZXRfZnV0ZXhfa2V5KHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpmc2hhcmVkLAorCQkgIHVuaW9uIGZ1dGV4X2tleSAqa2V5KQogewogCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKXVhZGRyOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CkBAIC0xODcsMTEgKzE4NCwyNSBAQAogCSAqIFRoZSBmdXRleCBhZGRyZXNzIG11c3QgYmUgIm5hdHVyYWxseSIgYWxpZ25lZC4KIAkgKi8KIAlrZXktPmJvdGgub2Zmc2V0ID0gYWRkcmVzcyAlIFBBR0VfU0laRTsKLQlpZiAodW5saWtlbHkoKGtleS0+Ym90aC5vZmZzZXQgJSBzaXplb2YodTMyKSkgIT0gMCkpCisJaWYgKHVubGlrZWx5KChhZGRyZXNzICUgc2l6ZW9mKHUzMikpICE9IDApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlhZGRyZXNzIC09IGtleS0+Ym90aC5vZmZzZXQ7CiAKIAkvKgorCSAqIFBST0NFU1NfUFJJVkFURSBmdXRleGVzIGFyZSBmYXN0LgorCSAqIEFzIHRoZSBtbSBjYW5ub3QgZGlzYXBwZWFyIHVuZGVyIHVzIGFuZCB0aGUgJ2tleScgb25seSBuZWVkcworCSAqIHZpcnR1YWwgYWRkcmVzcywgd2UgZG9udCBldmVuIGhhdmUgdG8gZmluZCB0aGUgdW5kZXJseWluZyB2bWEuCisJICogTm90ZSA6IFdlIGRvIGhhdmUgdG8gY2hlY2sgJ3VhZGRyJyBpcyBhIHZhbGlkIHVzZXIgYWRkcmVzcywKKwkgKiAgICAgICAgYnV0IGFjY2Vzc19vaygpIHNob3VsZCBiZSBmYXN0ZXIgdGhhbiBmaW5kX3ZtYSgpCisJICovCisJaWYgKCFmc2hhcmVkKSB7CisJCWlmICh1bmxpa2VseSghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWFkZHIsIHNpemVvZih1MzIpKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJa2V5LT5wcml2YXRlLm1tID0gbW07CisJCWtleS0+cHJpdmF0ZS5hZGRyZXNzID0gYWRkcmVzczsKKwkJcmV0dXJuIDA7CisJfQorCS8qCiAJICogVGhlIGZ1dGV4IGlzIGhhc2hlZCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hldGhlcgogCSAqIGl0J3MgaW4gYSBzaGFyZWQgb3IgcHJpdmF0ZSBtYXBwaW5nLiAgU28gY2hlY2sgdm1hIGZpcnN0LgogCSAqLwpAQCAtMjA1LDYgKzIxNiw5IEBACiAJaWYgKHVubGlrZWx5KCh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPfFZNX1JFQUQpKSAhPSBWTV9SRUFEKSkKIAkJcmV0dXJuICh2bWEtPnZtX2ZsYWdzICYgVk1fSU8pID8gLUVQRVJNIDogLUVBQ0NFUzsKIAorCS8qIFNhdmUgdGhlIHVzZXIgYWRkcmVzcyBpbiB0aGUgbGV5ICovCisJa2V5LT51YWRkciA9IHVhZGRyOworCiAJLyoKIAkgKiBQcml2YXRlIG1hcHBpbmdzIGFyZSBoYW5kbGVkIGluIGEgc2ltcGxlIHdheS4KIAkgKgpAQCAtMjE1LDYgKzIyOSw3IEBACiAJICogbWFwcGluZ3Mgb2YgX3dyaXRhYmxlXyBoYW5kbGVzLgogCSAqLwogCWlmIChsaWtlbHkoISh2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpKSkgeworCQlrZXktPmJvdGgub2Zmc2V0IHw9IEZVVF9PRkZfTU1TSEFSRUQ7IC8qIHJlZmVyZW5jZSB0YWtlbiBvbiBtbSAqLwogCQlrZXktPnByaXZhdGUubW0gPSBtbTsKIAkJa2V5LT5wcml2YXRlLmFkZHJlc3MgPSBhZGRyZXNzOwogCQlyZXR1cm4gMDsKQEAgLTIyNCw3ICsyMzksNyBAQAogCSAqIExpbmVhciBmaWxlIG1hcHBpbmdzIGFyZSBhbHNvIHNpbXBsZS4KIAkgKi8KIAlrZXktPnNoYXJlZC5pbm9kZSA9IHZtYS0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlrZXktPmJvdGgub2Zmc2V0Kys7IC8qIEJpdCAwIG9mIG9mZnNldCBpbmRpY2F0ZXMgaW5vZGUtYmFzZWQga2V5LiAqLworCWtleS0+Ym90aC5vZmZzZXQgfD0gRlVUX09GRl9JTk9ERTsgLyogaW5vZGUtYmFzZWQga2V5LiAqLwogCWlmIChsaWtlbHkoISh2bWEtPnZtX2ZsYWdzICYgVk1fTk9OTElORUFSKSkpIHsKIAkJa2V5LT5zaGFyZWQucGdvZmYgPSAoKChhZGRyZXNzIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCkKIAkJCQkgICAgICsgdm1hLT52bV9wZ29mZik7CkBAIC0yNDYsMzcgKzI2MSw0NiBAQAogCX0KIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X2Z1dGV4X2tleSk7CiAKIC8qCiAgKiBUYWtlIGEgcmVmZXJlbmNlIHRvIHRoZSByZXNvdXJjZSBhZGRyZXNzZWQgYnkgYSBrZXkuCiAgKiBDYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgc3BpbmxvY2tzLgogICoKLSAqIE5PVEU6IG1tYXBfc2VtIE1VU1QgYmUgaGVsZCBiZXR3ZWVuIGdldF9mdXRleF9rZXkoKSBhbmQgY2FsbGluZyB0aGlzCi0gKiBmdW5jdGlvbiwgaWYgaXQgaXMgY2FsbGVkIGF0IGFsbC4gIG1tYXBfc2VtIGtlZXBzIGtleS0+c2hhcmVkLmlub2RlIHZhbGlkLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2tleV9yZWZzKHVuaW9uIGZ1dGV4X2tleSAqa2V5KQoraW5saW5lIHZvaWQgZ2V0X2Z1dGV4X2tleV9yZWZzKHVuaW9uIGZ1dGV4X2tleSAqa2V5KQogewotCWlmIChrZXktPmJvdGgucHRyICE9IDApIHsKLQkJaWYgKGtleS0+Ym90aC5vZmZzZXQgJiAxKQorCWlmIChrZXktPmJvdGgucHRyID09IDApCisJCXJldHVybjsKKwlzd2l0Y2ggKGtleS0+Ym90aC5vZmZzZXQgJiAoRlVUX09GRl9JTk9ERXxGVVRfT0ZGX01NU0hBUkVEKSkgeworCQljYXNlIEZVVF9PRkZfSU5PREU6CiAJCQlhdG9taWNfaW5jKCZrZXktPnNoYXJlZC5pbm9kZS0+aV9jb3VudCk7Ci0JCWVsc2UKKwkJCWJyZWFrOworCQljYXNlIEZVVF9PRkZfTU1TSEFSRUQ6CiAJCQlhdG9taWNfaW5jKCZrZXktPnByaXZhdGUubW0tPm1tX2NvdW50KTsKKwkJCWJyZWFrOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGdldF9mdXRleF9rZXlfcmVmcyk7CiAKIC8qCiAgKiBEcm9wIGEgcmVmZXJlbmNlIHRvIHRoZSByZXNvdXJjZSBhZGRyZXNzZWQgYnkgYSBrZXkuCiAgKiBUaGUgaGFzaCBidWNrZXQgc3BpbmxvY2sgbXVzdCBub3QgYmUgaGVsZC4KICAqLwotc3RhdGljIHZvaWQgZHJvcF9rZXlfcmVmcyh1bmlvbiBmdXRleF9rZXkgKmtleSkKK3ZvaWQgZHJvcF9mdXRleF9rZXlfcmVmcyh1bmlvbiBmdXRleF9rZXkgKmtleSkKIHsKLQlpZiAoa2V5LT5ib3RoLnB0ciAhPSAwKSB7Ci0JCWlmIChrZXktPmJvdGgub2Zmc2V0ICYgMSkKKwlpZiAoa2V5LT5ib3RoLnB0ciA9PSAwKQorCQlyZXR1cm47CisJc3dpdGNoIChrZXktPmJvdGgub2Zmc2V0ICYgKEZVVF9PRkZfSU5PREV8RlVUX09GRl9NTVNIQVJFRCkpIHsKKwkJY2FzZSBGVVRfT0ZGX0lOT0RFOgogCQkJaXB1dChrZXktPnNoYXJlZC5pbm9kZSk7Ci0JCWVsc2UKKwkJCWJyZWFrOworCQljYXNlIEZVVF9PRkZfTU1TSEFSRUQ6CiAJCQltbWRyb3Aoa2V5LT5wcml2YXRlLm1tKTsKKwkJCWJyZWFrOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGRyb3BfZnV0ZXhfa2V5X3JlZnMpOwogCiBzdGF0aWMgaW5saW5lIGludCBnZXRfZnV0ZXhfdmFsdWVfbG9ja2VkKHUzMiAqZGVzdCwgdTMyIF9fdXNlciAqZnJvbSkKIHsKQEAgLTI5MCwyOCArMzE0LDM4IEBACiB9CiAKIC8qCi0gKiBGYXVsdCBoYW5kbGluZy4gQ2FsbGVkIHdpdGggY3VycmVudC0+bW0tPm1tYXBfc2VtIGhlbGQuCisgKiBGYXVsdCBoYW5kbGluZy4KKyAqIGlmIGZzaGFyZWQgaXMgbm9uIE5VTEwsIGN1cnJlbnQtPm1tLT5tbWFwX3NlbSBpcyBhbHJlYWR5IGhlbGQKICAqLwotc3RhdGljIGludCBmdXRleF9oYW5kbGVfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgYXR0ZW1wdCkKK3N0YXRpYyBpbnQgZnV0ZXhfaGFuZGxlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgICAgIHN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQsIGludCBhdHRlbXB0KQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCWludCByZXQgPSAtRUZBVUxUOwogCi0JaWYgKGF0dGVtcHQgPiAyIHx8ICEodm1hID0gZmluZF92bWEobW0sIGFkZHJlc3MpKSB8fAotCSAgICB2bWEtPnZtX3N0YXJ0ID4gYWRkcmVzcyB8fCAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCi0JCXJldHVybiAtRUZBVUxUOworCWlmIChhdHRlbXB0ID4gMikKKwkJcmV0dXJuIHJldDsKIAotCXN3aXRjaCAoaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHJlc3MsIDEpKSB7Ci0JY2FzZSBWTV9GQVVMVF9NSU5PUjoKLQkJY3VycmVudC0+bWluX2ZsdCsrOwotCQlicmVhazsKLQljYXNlIFZNX0ZBVUxUX01BSk9SOgotCQljdXJyZW50LT5tYWpfZmx0Kys7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUZBVUxUOworCWlmICghZnNoYXJlZCkKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyZXNzKTsKKwlpZiAodm1hICYmIGFkZHJlc3MgPj0gdm1hLT52bV9zdGFydCAmJgorCSAgICAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkgeworCQlzd2l0Y2ggKGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLCAxKSkgeworCQljYXNlIFZNX0ZBVUxUX01JTk9SOgorCQkJcmV0ID0gMDsKKwkJCWN1cnJlbnQtPm1pbl9mbHQrKzsKKwkJCWJyZWFrOworCQljYXNlIFZNX0ZBVUxUX01BSk9SOgorCQkJcmV0ID0gMDsKKwkJCWN1cnJlbnQtPm1hal9mbHQrKzsKKwkJCWJyZWFrOworCQl9CiAJfQotCXJldHVybiAwOworCWlmICghZnNoYXJlZCkKKwkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtNDYxLDE4ICs0OTUsMTkgQEAKIH0KIAogc3RhdGljIGludAotbG9va3VwX3BpX3N0YXRlKHUzMiB1dmFsLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCBzdHJ1Y3QgZnV0ZXhfcSAqbWUpCitsb29rdXBfcGlfc3RhdGUodTMyIHV2YWwsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsCisJCXVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGUgKipwcykKIHsKIAlzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGUgKnBpX3N0YXRlID0gTlVMTDsKIAlzdHJ1Y3QgZnV0ZXhfcSAqdGhpcywgKm5leHQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgcGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJcGlkX3QgcGlkOwogCiAJaGVhZCA9ICZoYi0+Y2hhaW47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGhpcywgbmV4dCwgaGVhZCwgbGlzdCkgewotCQlpZiAobWF0Y2hfZnV0ZXgoJnRoaXMtPmtleSwgJm1lLT5rZXkpKSB7CisJcGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0aGlzLCBuZXh0LCBoZWFkLCBsaXN0KSB7CisJCWlmIChtYXRjaF9mdXRleCgmdGhpcy0+a2V5LCBrZXkpKSB7CiAJCQkvKgogCQkJICogQW5vdGhlciB3YWl0ZXIgYWxyZWFkeSBleGlzdHMgLSBidW1wIHVwCiAJCQkgKiB0aGUgcmVmY291bnQgYW5kIHJldHVybiBpdHMgcGlfc3RhdGU6CkBAIC00ODcsNyArNTIyLDcgQEAKIAkJCVdBUk5fT04oIWF0b21pY19yZWFkKCZwaV9zdGF0ZS0+cmVmY291bnQpKTsKIAogCQkJYXRvbWljX2luYygmcGlfc3RhdGUtPnJlZmNvdW50KTsKLQkJCW1lLT5waV9zdGF0ZSA9IHBpX3N0YXRlOworCQkJKnBzID0gcGlfc3RhdGU7CiAKIAkJCXJldHVybiAwOwogCQl9CkBAIC01MTQsNyArNTQ5LDcgQEAKIAlydF9tdXRleF9pbml0X3Byb3h5X2xvY2tlZCgmcGlfc3RhdGUtPnBpX211dGV4LCBwKTsKIAogCS8qIFN0b3JlIHRoZSBrZXkgZm9yIHBvc3NpYmxlIGV4aXQgY2xlYW51cHM6ICovCi0JcGlfc3RhdGUtPmtleSA9IG1lLT5rZXk7CisJcGlfc3RhdGUtPmtleSA9ICprZXk7CiAKIAlzcGluX2xvY2tfaXJxKCZwLT5waV9sb2NrKTsKIAlXQVJOX09OKCFsaXN0X2VtcHR5KCZwaV9zdGF0ZS0+bGlzdCkpOwpAQCAtNTI0LDcgKzU1OSw3IEBACiAKIAlwdXRfdGFza19zdHJ1Y3QocCk7CiAKLQltZS0+cGlfc3RhdGUgPSBwaV9zdGF0ZTsKKwkqcHMgPSBwaV9zdGF0ZTsKIAogCXJldHVybiAwOwogfQpAQCAtNTM1LDEyICs1NzAsMTIgQEAKICAqLwogc3RhdGljIHZvaWQgd2FrZV9mdXRleChzdHJ1Y3QgZnV0ZXhfcSAqcSkKIHsKLQlsaXN0X2RlbF9pbml0KCZxLT5saXN0KTsKKwlwbGlzdF9kZWwoJnEtPmxpc3QsICZxLT5saXN0LnBsaXN0KTsKIAlpZiAocS0+ZmlscCkKIAkJc2VuZF9zaWdpbygmcS0+ZmlscC0+Zl9vd25lciwgcS0+ZmQsIFBPTExfSU4pOwogCS8qCiAJICogVGhlIGxvY2sgaW4gd2FrZV91cF9hbGwoKSBpcyBhIGNydWNpYWwgbWVtb3J5IGJhcnJpZXIgYWZ0ZXIgdGhlCi0JICogbGlzdF9kZWxfaW5pdCgpIGFuZCBhbHNvIGJlZm9yZSBhc3NpZ25pbmcgdG8gcS0+bG9ja19wdHIuCisJICogcGxpc3RfZGVsKCkgYW5kIGFsc28gYmVmb3JlIGFzc2lnbmluZyB0byBxLT5sb2NrX3B0ci4KIAkgKi8KIAl3YWtlX3VwX2FsbCgmcS0+d2FpdGVycyk7CiAJLyoKQEAgLTU4NCw2ICs2MTksOCBAQAogCSAqLwogCWlmICghKHV2YWwgJiBGVVRFWF9PV05FUl9ESUVEKSkgewogCQluZXd2YWwgPSBGVVRFWF9XQUlURVJTIHwgbmV3X293bmVyLT5waWQ7CisJCS8qIEtlZXAgdGhlIEZVVEVYX1dBSVRFUl9SRVFVRVVFRCBmbGFnIGlmIGl0IHdhcyBzZXQgKi8KKwkJbmV3dmFsIHw9ICh1dmFsICYgRlVURVhfV0FJVEVSX1JFUVVFVUVEKTsKIAogCQlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCQljdXJ2YWwgPSBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyh1YWRkciwgdXZhbCwgbmV3dmFsKTsKQEAgLTY1MSwxNyArNjg4LDE5IEBACiAgKiBXYWtlIHVwIGFsbCB3YWl0ZXJzIGhhc2hlZCBvbiB0aGUgcGh5c2ljYWwgcGFnZSB0aGF0IGlzIG1hcHBlZAogICogdG8gdGhpcyB2aXJ0dWFsIGFkZHJlc3M6CiAgKi8KLXN0YXRpYyBpbnQgZnV0ZXhfd2FrZSh1MzIgX191c2VyICp1YWRkciwgaW50IG5yX3dha2UpCitzdGF0aWMgaW50IGZ1dGV4X3dha2UodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQsCisJCSAgICAgIGludCBucl93YWtlKQogewogCXN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7CiAJc3RydWN0IGZ1dGV4X3EgKnRoaXMsICpuZXh0OwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQ7CiAJdW5pb24gZnV0ZXhfa2V5IGtleTsKIAlpbnQgcmV0OwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWlmIChmc2hhcmVkKQorCQlkb3duX3JlYWQoZnNoYXJlZCk7CiAKLQlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyLCAma2V5KTsKKwlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyLCBmc2hhcmVkLCAma2V5KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKIApAQCAtNjY5LDcgKzcwOCw3IEBACiAJc3Bpbl9sb2NrKCZoYi0+bG9jayk7CiAJaGVhZCA9ICZoYi0+Y2hhaW47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGhpcywgbmV4dCwgaGVhZCwgbGlzdCkgeworCXBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGhpcywgbmV4dCwgaGVhZCwgbGlzdCkgewogCQlpZiAobWF0Y2hfZnV0ZXggKCZ0aGlzLT5rZXksICZrZXkpKSB7CiAJCQlpZiAodGhpcy0+cGlfc3RhdGUpIHsKIAkJCQlyZXQgPSAtRUlOVkFMOwpAQCAtNjgzLDcgKzcyMiwyNjEgQEAKIAogCXNwaW5fdW5sb2NrKCZoYi0+bG9jayk7CiBvdXQ6Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlpZiAoZnNoYXJlZCkKKwkJdXBfcmVhZChmc2hhcmVkKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ2FsbGVkIGZyb20gZnV0ZXhfcmVxdWV1ZV9waS4KKyAqIFNldCBGVVRFWF9XQUlURVJTIGFuZCBGVVRFWF9XQUlURVJfUkVRVUVVRUQgZmxhZ3Mgb24gdGhlCisgKiBQSS1mdXRleCB2YWx1ZTsgc2VhcmNoIGl0cyBhc3NvY2lhdGVkIHBpX3N0YXRlIGlmIGFuIG93bmVyIGV4aXN0CisgKiBvciBjcmVhdGUgYSBuZXcgb25lIHdpdGhvdXQgb3duZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citsb29rdXBfcGlfc3RhdGVfZm9yX3JlcXVldWUodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsCisJCQkgICAgdW5pb24gZnV0ZXhfa2V5ICprZXksCisJCQkgICAgc3RydWN0IGZ1dGV4X3BpX3N0YXRlICoqcGlfc3RhdGUpCit7CisJdTMyIGN1cnZhbCwgdXZhbCwgbmV3dmFsOworCityZXRyeToKKwkvKgorCSAqIFdlIGNhbid0IGhhbmRsZSBhIGZhdWx0IGNsZWFubHkgYmVjYXVzZSB3ZSBjYW4ndAorCSAqIHJlbGVhc2UgdGhlIGxvY2tzIGhlcmUuIFNpbXBseSByZXR1cm4gdGhlIGZhdWx0LgorCSAqLworCWlmIChnZXRfZnV0ZXhfdmFsdWVfbG9ja2VkKCZjdXJ2YWwsIHVhZGRyKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBzZXQgdGhlIGZsYWdzIEZVVEVYX1dBSVRFUlMgYW5kIEZVVEVYX1dBSVRFUl9SRVFVRVVFRCAqLworCWlmICgoY3VydmFsICYgKEZVVEVYX1dBSVRFUlMgfCBGVVRFWF9XQUlURVJfUkVRVUVVRUQpKQorCSAgICAhPSAoRlVURVhfV0FJVEVSUyB8IEZVVEVYX1dBSVRFUl9SRVFVRVVFRCkpIHsKKwkJLyoKKwkJICogTm8gd2FpdGVycyB5ZXQsIHdlIHByZXBhcmUgdGhlIGZ1dGV4IHRvIGhhdmUgc29tZSB3YWl0ZXJzLgorCQkgKi8KKworCQl1dmFsID0gY3VydmFsOworCQluZXd2YWwgPSB1dmFsIHwgRlVURVhfV0FJVEVSUyB8IEZVVEVYX1dBSVRFUl9SRVFVRVVFRDsKKworCQlwYWdlZmF1bHRfZGlzYWJsZSgpOworCQljdXJ2YWwgPSBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyh1YWRkciwgdXZhbCwgbmV3dmFsKTsKKwkJcGFnZWZhdWx0X2VuYWJsZSgpOworCisJCWlmICh1bmxpa2VseShjdXJ2YWwgPT0gLUVGQVVMVCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHVubGlrZWx5KGN1cnZhbCAhPSB1dmFsKSkKKwkJCWdvdG8gcmV0cnk7CisJfQorCisJaWYgKCEoY3VydmFsICYgRlVURVhfVElEX01BU0spCisJICAgIHx8IGxvb2t1cF9waV9zdGF0ZShjdXJ2YWwsIGhiLCBrZXksIHBpX3N0YXRlKSkgeworCQkvKiB0aGUgZnV0ZXggaGFzIG5vIG93bmVyICh5ZXQpIG9yIHRoZSBsb29rdXAgZmFpbGVkOgorCQkgICBhbGxvY2F0ZSBvbmUgcGlfc3RhdGUgd2l0aG91dCBvd25lciAqLworCisJCSpwaV9zdGF0ZSA9IGFsbG9jX3BpX3N0YXRlKCk7CisKKwkJLyogQWxyZWFkeSBzdG9yZXMgdGhlIGtleTogKi8KKwkJKCpwaV9zdGF0ZSktPmtleSA9ICprZXk7CisKKwkJLyogaW5pdCB0aGUgbXV0ZXggd2l0aG91dCBvd25lciAqLworCQlfX3J0X211dGV4X2luaXQoJigqcGlfc3RhdGUpLT5waV9tdXRleCwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBLZWVwIHRoZSBmaXJzdCBucl93YWtlIHdhaXRlciBmcm9tIGZ1dGV4MSwgd2FrZSB1cCBvbmUsCisgKiBhbmQgcmVxdWV1ZSB0aGUgbmV4dCBucl9yZXF1ZXVlIHdhaXRlcnMgZm9sbG93aW5nIGhhc2hlZCBvbgorICogb25lIHBoeXNpY2FsIHBhZ2UgdG8gYW5vdGhlciBwaHlzaWNhbCBwYWdlIChQSS1mdXRleCB1YWRkcjIpCisgKi8KK3N0YXRpYyBpbnQgZnV0ZXhfcmVxdWV1ZV9waSh1MzIgX191c2VyICp1YWRkcjEsCisJCQkgICAgc3RydWN0IHJ3X3NlbWFwaG9yZSAqZnNoYXJlZCwKKwkJCSAgICB1MzIgX191c2VyICp1YWRkcjIsCisJCQkgICAgaW50IG5yX3dha2UsIGludCBucl9yZXF1ZXVlLCB1MzIgKmNtcHZhbCkKK3sKKwl1bmlvbiBmdXRleF9rZXkga2V5MSwga2V5MjsKKwlzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSwgKmhiMjsKKwlzdHJ1Y3QgcGxpc3RfaGVhZCAqaGVhZDE7CisJc3RydWN0IGZ1dGV4X3EgKnRoaXMsICpuZXh0OworCXN0cnVjdCBmdXRleF9waV9zdGF0ZSAqcGlfc3RhdGUyID0gTlVMTDsKKwlzdHJ1Y3QgcnRfbXV0ZXhfd2FpdGVyICp3YWl0ZXIsICp0b3Bfd2FpdGVyID0gTlVMTDsKKwlzdHJ1Y3QgcnRfbXV0ZXggKmxvY2syID0gTlVMTDsKKwlpbnQgcmV0LCBkcm9wX2NvdW50ID0gMDsKKworCWlmIChyZWZpbGxfcGlfc3RhdGVfY2FjaGUoKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKK3JldHJ5OgorCS8qCisJICogRmlyc3QgdGFrZSBhbGwgdGhlIGZ1dGV4IHJlbGF0ZWQgbG9ja3M6CisJICovCisJaWYgKGZzaGFyZWQpCisJCWRvd25fcmVhZChmc2hhcmVkKTsKKworCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIxLCBmc2hhcmVkLCAma2V5MSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXQ7CisJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjIsIGZzaGFyZWQsICZrZXkyKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dDsKKworCWhiMSA9IGhhc2hfZnV0ZXgoJmtleTEpOworCWhiMiA9IGhhc2hfZnV0ZXgoJmtleTIpOworCisJZG91YmxlX2xvY2tfaGIoaGIxLCBoYjIpOworCisJaWYgKGxpa2VseShjbXB2YWwgIT0gTlVMTCkpIHsKKwkJdTMyIGN1cnZhbDsKKworCQlyZXQgPSBnZXRfZnV0ZXhfdmFsdWVfbG9ja2VkKCZjdXJ2YWwsIHVhZGRyMSk7CisKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCXNwaW5fdW5sb2NrKCZoYjEtPmxvY2spOworCQkJaWYgKGhiMSAhPSBoYjIpCisJCQkJc3Bpbl91bmxvY2soJmhiMi0+bG9jayk7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSB3b3VsZCBoYXZlIGZhdWx0ZWQsIHJlbGVhc2UgbW1hcF9zZW0sIGZhdWx0CisJCQkgKiBpdCBpbiBhbmQgc3RhcnQgYWxsIG92ZXIgYWdhaW4uCisJCQkgKi8KKwkJCWlmIChmc2hhcmVkKQorCQkJCXVwX3JlYWQoZnNoYXJlZCk7CisKKwkJCXJldCA9IGdldF91c2VyKGN1cnZhbCwgdWFkZHIxKTsKKworCQkJaWYgKCFyZXQpCisJCQkJZ290byByZXRyeTsKKworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpZiAoY3VydmFsICE9ICpjbXB2YWwpIHsKKwkJCXJldCA9IC1FQUdBSU47CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwl9CisKKwloZWFkMSA9ICZoYjEtPmNoYWluOworCXBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGhpcywgbmV4dCwgaGVhZDEsIGxpc3QpIHsKKwkJaWYgKCFtYXRjaF9mdXRleCAoJnRoaXMtPmtleSwgJmtleTEpKQorCQkJY29udGludWU7CisJCWlmICgrK3JldCA8PSBucl93YWtlKSB7CisJCQl3YWtlX2Z1dGV4KHRoaXMpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEZJUlNUOiBnZXQgYW5kIHNldCB0aGUgcGlfc3RhdGUKKwkJCSAqLworCQkJaWYgKCFwaV9zdGF0ZTIpIHsKKwkJCQlpbnQgczsKKwkJCQkvKiBkbyB0aGlzIG9ubHkgdGhlIGZpcnN0IHRpbWUgd2UgcmVxdWV1ZSBzb21lb25lICovCisJCQkJcyA9IGxvb2t1cF9waV9zdGF0ZV9mb3JfcmVxdWV1ZSh1YWRkcjIsIGhiMiwKKwkJCQkJCQkJJmtleTIsICZwaV9zdGF0ZTIpOworCQkJCWlmIChzKSB7CisJCQkJCXJldCA9IHM7CisJCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCQl9CisKKwkJCQlsb2NrMiA9ICZwaV9zdGF0ZTItPnBpX211dGV4OworCQkJCXNwaW5fbG9jaygmbG9jazItPndhaXRfbG9jayk7CisKKwkJCQkvKiBTYXZlIHRoZSB0b3Agd2FpdGVyIG9mIHRoZSB3YWl0X2xpc3QgKi8KKwkJCQlpZiAocnRfbXV0ZXhfaGFzX3dhaXRlcnMobG9jazIpKQorCQkJCQl0b3Bfd2FpdGVyID0gcnRfbXV0ZXhfdG9wX3dhaXRlcihsb2NrMik7CisJCQl9IGVsc2UKKwkJCQlhdG9taWNfaW5jKCZwaV9zdGF0ZTItPnJlZmNvdW50KTsKKworCisJCQl0aGlzLT5waV9zdGF0ZSA9IHBpX3N0YXRlMjsKKworCQkJLyoKKwkJCSAqIFNFQ09ORDogcmVxdWV1ZSBmdXRleF9xIHRvIHRoZSBjb3JyZWN0IGhhc2hidWNrZXQKKwkJCSAqLworCisJCQkvKgorCQkJICogSWYga2V5MSBhbmQga2V5MiBoYXNoIHRvIHRoZSBzYW1lIGJ1Y2tldCwgbm8gbmVlZCB0bworCQkJICogcmVxdWV1ZS4KKwkJCSAqLworCQkJaWYgKGxpa2VseShoZWFkMSAhPSAmaGIyLT5jaGFpbikpIHsKKwkJCQlwbGlzdF9kZWwoJnRoaXMtPmxpc3QsICZoYjEtPmNoYWluKTsKKwkJCQlwbGlzdF9hZGQoJnRoaXMtPmxpc3QsICZoYjItPmNoYWluKTsKKwkJCQl0aGlzLT5sb2NrX3B0ciA9ICZoYjItPmxvY2s7CisjaWZkZWYgQ09ORklHX0RFQlVHX1BJX0xJU1QKKwkJCQl0aGlzLT5saXN0LnBsaXN0LmxvY2sgPSAmaGIyLT5sb2NrOworI2VuZGlmCisJCQl9CisJCQl0aGlzLT5rZXkgPSBrZXkyOworCQkJZ2V0X2Z1dGV4X2tleV9yZWZzKCZrZXkyKTsKKwkJCWRyb3BfY291bnQrKzsKKworCisJCQkvKgorCQkJICogVEhJUkQ6IHF1ZXVlIGl0IHRvIGxvY2syCisJCQkgKi8KKwkJCXNwaW5fbG9ja19pcnEoJnRoaXMtPnRhc2stPnBpX2xvY2spOworCQkJd2FpdGVyID0gJnRoaXMtPndhaXRlcjsKKwkJCXdhaXRlci0+dGFzayA9IHRoaXMtPnRhc2s7CisJCQl3YWl0ZXItPmxvY2sgPSBsb2NrMjsKKwkJCXBsaXN0X25vZGVfaW5pdCgmd2FpdGVyLT5saXN0X2VudHJ5LCB0aGlzLT50YXNrLT5wcmlvKTsKKwkJCXBsaXN0X25vZGVfaW5pdCgmd2FpdGVyLT5waV9saXN0X2VudHJ5LCB0aGlzLT50YXNrLT5wcmlvKTsKKwkJCXBsaXN0X2FkZCgmd2FpdGVyLT5saXN0X2VudHJ5LCAmbG9jazItPndhaXRfbGlzdCk7CisJCQl0aGlzLT50YXNrLT5waV9ibG9ja2VkX29uID0gd2FpdGVyOworCQkJc3Bpbl91bmxvY2tfaXJxKCZ0aGlzLT50YXNrLT5waV9sb2NrKTsKKworCQkJaWYgKHJldCAtIG5yX3dha2UgPj0gbnJfcmVxdWV1ZSkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCS8qIElmIHdlJ3ZlIHJlcXVldWVkIHNvbWUgdGFza3MgYW5kIHRoZSB0b3Bfd2FpdGVyIG9mIHRoZSBydF9tdXRleAorCSAgIGhhcyBjaGFuZ2VkLCB3ZSBtdXN0IGFkanVzdCB0aGUgcHJpb3JpdHkgb2YgdGhlIG93bmVyLCBpZiBhbnkgKi8KKwlpZiAoZHJvcF9jb3VudCkgeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm93bmVyID0gcnRfbXV0ZXhfb3duZXIobG9jazIpOworCQlpZiAob3duZXIgJiYKKwkJICAgICh0b3Bfd2FpdGVyICE9ICh3YWl0ZXIgPSBydF9tdXRleF90b3Bfd2FpdGVyKGxvY2syKSkpKSB7CisJCQlpbnQgY2hhaW5fd2FsayA9IDA7CisKKwkJCXNwaW5fbG9ja19pcnEoJm93bmVyLT5waV9sb2NrKTsKKwkJCWlmICh0b3Bfd2FpdGVyKQorCQkJCXBsaXN0X2RlbCgmdG9wX3dhaXRlci0+cGlfbGlzdF9lbnRyeSwgJm93bmVyLT5waV93YWl0ZXJzKTsKKwkJCWVsc2UKKwkJCQkvKgorCQkJCSAqIFRoZXJlIHdhcyBubyB3YWl0ZXJzIGJlZm9yZSB0aGUgcmVxdWV1ZSwKKwkJCQkgKiB0aGUgZmxhZyBtdXN0IGJlIHVwZGF0ZWQKKwkJCQkgKi8KKwkJCQltYXJrX3J0X211dGV4X3dhaXRlcnMobG9jazIpOworCisJCQlwbGlzdF9hZGQoJndhaXRlci0+cGlfbGlzdF9lbnRyeSwgJm93bmVyLT5waV93YWl0ZXJzKTsKKwkJCV9fcnRfbXV0ZXhfYWRqdXN0X3ByaW8ob3duZXIpOworCQkJaWYgKG93bmVyLT5waV9ibG9ja2VkX29uKSB7CisJCQkJY2hhaW5fd2FsayA9IDE7CisJCQkJZ2V0X3Rhc2tfc3RydWN0KG93bmVyKTsKKwkJCX0KKworCQkJc3Bpbl91bmxvY2tfaXJxKCZvd25lci0+cGlfbG9jayk7CisJCQlzcGluX3VubG9jaygmbG9jazItPndhaXRfbG9jayk7CisKKwkJCWlmIChjaGFpbl93YWxrKQorCQkJCXJ0X211dGV4X2FkanVzdF9wcmlvX2NoYWluKG93bmVyLCAwLCBsb2NrMiwgTlVMTCwKKwkJCQkJCQkgICBjdXJyZW50KTsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vIG93bmVyIG9yIHRoZSB0b3Bfd2FpdGVyIGRvZXMgbm90IGNoYW5nZSAqLworCQkJbWFya19ydF9tdXRleF93YWl0ZXJzKGxvY2syKTsKKwkJCXNwaW5fdW5sb2NrKCZsb2NrMi0+d2FpdF9sb2NrKTsKKwkJfQorCX0KKworb3V0X3VubG9jazoKKwlzcGluX3VubG9jaygmaGIxLT5sb2NrKTsKKwlpZiAoaGIxICE9IGhiMikKKwkJc3Bpbl91bmxvY2soJmhiMi0+bG9jayk7CisKKwkvKiBkcm9wX2Z1dGV4X2tleV9yZWZzKCkgbXVzdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGUgc3BpbmxvY2tzLiAqLworCXdoaWxlICgtLWRyb3BfY291bnQgPj0gMCkKKwkJZHJvcF9mdXRleF9rZXlfcmVmcygma2V5MSk7CisKK291dDoKKwlpZiAoZnNoYXJlZCkKKwkJdXBfcmVhZChmc2hhcmVkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02OTIsMjIgKzk4NSwyNCBAQAogICogdG8gdGhpcyB2aXJ0dWFsIGFkZHJlc3M6CiAgKi8KIHN0YXRpYyBpbnQKLWZ1dGV4X3dha2Vfb3AodTMyIF9fdXNlciAqdWFkZHIxLCB1MzIgX191c2VyICp1YWRkcjIsCitmdXRleF93YWtlX29wKHUzMiBfX3VzZXIgKnVhZGRyMSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqZnNoYXJlZCwKKwkgICAgICB1MzIgX191c2VyICp1YWRkcjIsCiAJICAgICAgaW50IG5yX3dha2UsIGludCBucl93YWtlMiwgaW50IG9wKQogewogCXVuaW9uIGZ1dGV4X2tleSBrZXkxLCBrZXkyOwogCXN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLCAqaGIyOwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IGZ1dGV4X3EgKnRoaXMsICpuZXh0OwogCWludCByZXQsIG9wX3JldCwgYXR0ZW1wdCA9IDA7CiAKIHJldHJ5ZnVsbDoKLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJaWYgKGZzaGFyZWQpCisJCWRvd25fcmVhZChmc2hhcmVkKTsKIAotCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIxLCAma2V5MSk7CisJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjEsIGZzaGFyZWQsICZrZXkxKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKLQlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyMiwgJmtleTIpOworCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIyLCBmc2hhcmVkLCAma2V5Mik7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXQ7CiAKQEAgLTc0NywxMSArMTA0MiwxMCBAQAogCQkgKiBzdGlsbCBob2xkaW5nIHRoZSBtbWFwX3NlbS4KIAkJICovCiAJCWlmIChhdHRlbXB0KyspIHsKLQkJCWlmIChmdXRleF9oYW5kbGVfZmF1bHQoKHVuc2lnbmVkIGxvbmcpdWFkZHIyLAotCQkJCQkJYXR0ZW1wdCkpIHsKLQkJCQlyZXQgPSAtRUZBVUxUOworCQkJcmV0ID0gZnV0ZXhfaGFuZGxlX2ZhdWx0KCh1bnNpZ25lZCBsb25nKXVhZGRyMiwKKwkJCQkJCWZzaGFyZWQsIGF0dGVtcHQpOworCQkJaWYgKHJldCkKIAkJCQlnb3RvIG91dDsKLQkJCX0KIAkJCWdvdG8gcmV0cnk7CiAJCX0KIApAQCAtNzU5LDcgKzEwNTMsOCBAQAogCQkgKiBJZiB3ZSB3b3VsZCBoYXZlIGZhdWx0ZWQsIHJlbGVhc2UgbW1hcF9zZW0sCiAJCSAqIGZhdWx0IGl0IGluIGFuZCBzdGFydCBhbGwgb3ZlciBhZ2Fpbi4KIAkJICovCi0JCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCWlmIChmc2hhcmVkKQorCQkJdXBfcmVhZChmc2hhcmVkKTsKIAogCQlyZXQgPSBnZXRfdXNlcihkdW1teSwgdWFkZHIyKTsKIAkJaWYgKHJldCkKQEAgLTc3MCw3ICsxMDY1LDcgQEAKIAogCWhlYWQgPSAmaGIxLT5jaGFpbjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0aGlzLCBuZXh0LCBoZWFkLCBsaXN0KSB7CisJcGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0aGlzLCBuZXh0LCBoZWFkLCBsaXN0KSB7CiAJCWlmIChtYXRjaF9mdXRleCAoJnRoaXMtPmtleSwgJmtleTEpKSB7CiAJCQl3YWtlX2Z1dGV4KHRoaXMpOwogCQkJaWYgKCsrcmV0ID49IG5yX3dha2UpCkBAIC03ODIsNyArMTA3Nyw3IEBACiAJCWhlYWQgPSAmaGIyLT5jaGFpbjsKIAogCQlvcF9yZXQgPSAwOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGhpcywgbmV4dCwgaGVhZCwgbGlzdCkgeworCQlwbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRoaXMsIG5leHQsIGhlYWQsIGxpc3QpIHsKIAkJCWlmIChtYXRjaF9mdXRleCAoJnRoaXMtPmtleSwgJmtleTIpKSB7CiAJCQkJd2FrZV9mdXRleCh0aGlzKTsKIAkJCQlpZiAoKytvcF9yZXQgPj0gbnJfd2FrZTIpCkBAIC03OTYsNyArMTA5MSw4IEBACiAJaWYgKGhiMSAhPSBoYjIpCiAJCXNwaW5fdW5sb2NrKCZoYjItPmxvY2spOwogb3V0OgotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJaWYgKGZzaGFyZWQpCisJCXVwX3JlYWQoZnNoYXJlZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODA0LDIyICsxMTAwLDI0IEBACiAgKiBSZXF1ZXVlIGFsbCB3YWl0ZXJzIGhhc2hlZCBvbiBvbmUgcGh5c2ljYWwgcGFnZSB0byBhbm90aGVyCiAgKiBwaHlzaWNhbCBwYWdlLgogICovCi1zdGF0aWMgaW50IGZ1dGV4X3JlcXVldWUodTMyIF9fdXNlciAqdWFkZHIxLCB1MzIgX191c2VyICp1YWRkcjIsCitzdGF0aWMgaW50IGZ1dGV4X3JlcXVldWUodTMyIF9fdXNlciAqdWFkZHIxLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpmc2hhcmVkLAorCQkJIHUzMiBfX3VzZXIgKnVhZGRyMiwKIAkJCSBpbnQgbnJfd2FrZSwgaW50IG5yX3JlcXVldWUsIHUzMiAqY21wdmFsKQogewogCXVuaW9uIGZ1dGV4X2tleSBrZXkxLCBrZXkyOwogCXN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLCAqaGIyOwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQxOworCXN0cnVjdCBwbGlzdF9oZWFkICpoZWFkMTsKIAlzdHJ1Y3QgZnV0ZXhfcSAqdGhpcywgKm5leHQ7CiAJaW50IHJldCwgZHJvcF9jb3VudCA9IDA7CiAKICByZXRyeToKLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJaWYgKGZzaGFyZWQpCisJCWRvd25fcmVhZChmc2hhcmVkKTsKIAotCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIxLCAma2V5MSk7CisJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjEsIGZzaGFyZWQsICZrZXkxKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKLQlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyMiwgJmtleTIpOworCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIyLCBmc2hhcmVkLCAma2V5Mik7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXQ7CiAKQEAgLTg0Miw3ICsxMTQwLDggQEAKIAkJCSAqIElmIHdlIHdvdWxkIGhhdmUgZmF1bHRlZCwgcmVsZWFzZSBtbWFwX3NlbSwgZmF1bHQKIAkJCSAqIGl0IGluIGFuZCBzdGFydCBhbGwgb3ZlciBhZ2Fpbi4KIAkJCSAqLwotCQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJCWlmIChmc2hhcmVkKQorCQkJCXVwX3JlYWQoZnNoYXJlZCk7CiAKIAkJCXJldCA9IGdldF91c2VyKGN1cnZhbCwgdWFkZHIxKTsKIApAQCAtODU4LDcgKzExNTcsNyBAQAogCX0KIAogCWhlYWQxID0gJmhiMS0+Y2hhaW47Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRoaXMsIG5leHQsIGhlYWQxLCBsaXN0KSB7CisJcGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0aGlzLCBuZXh0LCBoZWFkMSwgbGlzdCkgewogCQlpZiAoIW1hdGNoX2Z1dGV4ICgmdGhpcy0+a2V5LCAma2V5MSkpCiAJCQljb250aW51ZTsKIAkJaWYgKCsrcmV0IDw9IG5yX3dha2UpIHsKQEAgLTg2OSwxMSArMTE2OCwxNSBAQAogCQkJICogcmVxdWV1ZS4KIAkJCSAqLwogCQkJaWYgKGxpa2VseShoZWFkMSAhPSAmaGIyLT5jaGFpbikpIHsKLQkJCQlsaXN0X21vdmVfdGFpbCgmdGhpcy0+bGlzdCwgJmhiMi0+Y2hhaW4pOworCQkJCXBsaXN0X2RlbCgmdGhpcy0+bGlzdCwgJmhiMS0+Y2hhaW4pOworCQkJCXBsaXN0X2FkZCgmdGhpcy0+bGlzdCwgJmhiMi0+Y2hhaW4pOwogCQkJCXRoaXMtPmxvY2tfcHRyID0gJmhiMi0+bG9jazsKLQkJCX0KKyNpZmRlZiBDT05GSUdfREVCVUdfUElfTElTVAorCQkJCXRoaXMtPmxpc3QucGxpc3QubG9jayA9ICZoYjItPmxvY2s7CisjZW5kaWYKKyAJCQl9CiAJCQl0aGlzLT5rZXkgPSBrZXkyOwotCQkJZ2V0X2tleV9yZWZzKCZrZXkyKTsKKwkJCWdldF9mdXRleF9rZXlfcmVmcygma2V5Mik7CiAJCQlkcm9wX2NvdW50Kys7CiAKIAkJCWlmIChyZXQgLSBucl93YWtlID49IG5yX3JlcXVldWUpCkBAIC04ODYsMTIgKzExODksMTMgQEAKIAlpZiAoaGIxICE9IGhiMikKIAkJc3Bpbl91bmxvY2soJmhiMi0+bG9jayk7CiAKLQkvKiBkcm9wX2tleV9yZWZzKCkgbXVzdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGUgc3BpbmxvY2tzLiAqLworCS8qIGRyb3BfZnV0ZXhfa2V5X3JlZnMoKSBtdXN0IGJlIGNhbGxlZCBvdXRzaWRlIHRoZSBzcGlubG9ja3MuICovCiAJd2hpbGUgKC0tZHJvcF9jb3VudCA+PSAwKQotCQlkcm9wX2tleV9yZWZzKCZrZXkxKTsKKwkJZHJvcF9mdXRleF9rZXlfcmVmcygma2V5MSk7CiAKIG91dDoKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWlmIChmc2hhcmVkKQorCQl1cF9yZWFkKGZzaGFyZWQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTkwNiw3ICsxMjEwLDcgQEAKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnEtPndhaXRlcnMpOwogCi0JZ2V0X2tleV9yZWZzKCZxLT5rZXkpOworCWdldF9mdXRleF9rZXlfcmVmcygmcS0+a2V5KTsKIAloYiA9IGhhc2hfZnV0ZXgoJnEtPmtleSk7CiAJcS0+bG9ja19wdHIgPSAmaGItPmxvY2s7CiAKQEAgLTkxNiw3ICsxMjIwLDIzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3F1ZXVlX21lKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKQogewotCWxpc3RfYWRkX3RhaWwoJnEtPmxpc3QsICZoYi0+Y2hhaW4pOworCWludCBwcmlvOworCisJLyoKKwkgKiBUaGUgcHJpb3JpdHkgdXNlZCB0byByZWdpc3RlciB0aGlzIGVsZW1lbnQgaXMKKwkgKiAtIGVpdGhlciB0aGUgcmVhbCB0aHJlYWQtcHJpb3JpdHkgZm9yIHRoZSByZWFsLXRpbWUgdGhyZWFkcworCSAqIChpLmUuIHRocmVhZHMgd2l0aCBhIHByaW9yaXR5IGxvd2VyIHRoYW4gTUFYX1JUX1BSSU8pCisJICogLSBvciBNQVhfUlRfUFJJTyBmb3Igbm9uLVJUIHRocmVhZHMuCisJICogVGh1cywgYWxsIFJULXRocmVhZHMgYXJlIHdva2VuIGZpcnN0IGluIHByaW9yaXR5IG9yZGVyLCBhbmQKKwkgKiB0aGUgb3RoZXJzIGFyZSB3b2tlbiBsYXN0LCBpbiBGSUZPIG9yZGVyLgorCSAqLworCXByaW8gPSBtaW4oY3VycmVudC0+bm9ybWFsX3ByaW8sIE1BWF9SVF9QUklPKTsKKworCXBsaXN0X25vZGVfaW5pdCgmcS0+bGlzdCwgcHJpbyk7CisjaWZkZWYgQ09ORklHX0RFQlVHX1BJX0xJU1QKKwlxLT5saXN0LnBsaXN0LmxvY2sgPSAmaGItPmxvY2s7CisjZW5kaWYKKwlwbGlzdF9hZGQoJnEtPmxpc3QsICZoYi0+Y2hhaW4pOwogCXEtPnRhc2sgPSBjdXJyZW50OwogCXNwaW5fdW5sb2NrKCZoYi0+bG9jayk7CiB9CkBAIC05MjUsNyArMTI0NSw3IEBACiBxdWV1ZV91bmxvY2soc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpCiB7CiAJc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKLQlkcm9wX2tleV9yZWZzKCZxLT5rZXkpOworCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7CiB9CiAKIC8qCkBAIC05NzEsOCArMTI5MSw4IEBACiAJCQlzcGluX3VubG9jayhsb2NrX3B0cik7CiAJCQlnb3RvIHJldHJ5OwogCQl9Ci0JCVdBUk5fT04obGlzdF9lbXB0eSgmcS0+bGlzdCkpOwotCQlsaXN0X2RlbCgmcS0+bGlzdCk7CisJCVdBUk5fT04ocGxpc3Rfbm9kZV9lbXB0eSgmcS0+bGlzdCkpOworCQlwbGlzdF9kZWwoJnEtPmxpc3QsICZxLT5saXN0LnBsaXN0KTsKIAogCQlCVUdfT04ocS0+cGlfc3RhdGUpOwogCkBAIC05ODAsMjkgKzEzMDAsOTQgQEAKIAkJcmV0ID0gMTsKIAl9CiAKLQlkcm9wX2tleV9yZWZzKCZxLT5rZXkpOworCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7CiAJcmV0dXJuIHJldDsKIH0KIAogLyoKICAqIFBJIGZ1dGV4ZXMgY2FuIG5vdCBiZSByZXF1ZXVlZCBhbmQgbXVzdCByZW1vdmUgdGhlbXNlbGYgZnJvbSB0aGUKLSAqIGhhc2ggYnVja2V0LiBUaGUgaGFzaCBidWNrZXQgbG9jayBpcyBoZWxkIG9uIGVudHJ5IGFuZCBkcm9wcGVkIGhlcmUuCisgKiBoYXNoIGJ1Y2tldC4gVGhlIGhhc2ggYnVja2V0IGxvY2sgKGkuZS4gbG9ja19wdHIpIGlzIGhlbGQgb24gZW50cnkKKyAqIGFuZCBkcm9wcGVkIGhlcmUuCiAgKi8KLXN0YXRpYyB2b2lkIHVucXVldWVfbWVfcGkoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpCitzdGF0aWMgdm9pZCB1bnF1ZXVlX21lX3BpKHN0cnVjdCBmdXRleF9xICpxKQogewotCVdBUk5fT04obGlzdF9lbXB0eSgmcS0+bGlzdCkpOwotCWxpc3RfZGVsKCZxLT5saXN0KTsKKwlXQVJOX09OKHBsaXN0X25vZGVfZW1wdHkoJnEtPmxpc3QpKTsKKwlwbGlzdF9kZWwoJnEtPmxpc3QsICZxLT5saXN0LnBsaXN0KTsKIAogCUJVR19PTighcS0+cGlfc3RhdGUpOwogCWZyZWVfcGlfc3RhdGUocS0+cGlfc3RhdGUpOwogCXEtPnBpX3N0YXRlID0gTlVMTDsKIAotCXNwaW5fdW5sb2NrKCZoYi0+bG9jayk7CisJc3Bpbl91bmxvY2socS0+bG9ja19wdHIpOwogCi0JZHJvcF9rZXlfcmVmcygmcS0+a2V5KTsKKwlkcm9wX2Z1dGV4X2tleV9yZWZzKCZxLT5rZXkpOwogfQogCi1zdGF0aWMgaW50IGZ1dGV4X3dhaXQodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB2YWwsIHVuc2lnbmVkIGxvbmcgdGltZSkKKy8qCisgKiBGaXh1cCB0aGUgcGlfc3RhdGUgb3duZXIgd2l0aCBjdXJyZW50LgorICoKKyAqIFRoZSBjdXItPm1tIHNlbWFwaG9yZSBtdXN0IGJlICBoZWxkLCBpdCBpcyByZWxlYXNlZCBhdCByZXR1cm4gb2YgdGhpcworICogZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgZml4dXBfcGlfc3RhdGVfb3duZXIodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQsCisJCQkJc3RydWN0IGZ1dGV4X3EgKnEsCisJCQkJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYiwKKwkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCit7CisJdTMyIG5ld3RpZCA9IGN1cnItPnBpZCB8IEZVVEVYX1dBSVRFUlM7CisJc3RydWN0IGZ1dGV4X3BpX3N0YXRlICpwaV9zdGF0ZSA9IHEtPnBpX3N0YXRlOworCXUzMiB1dmFsLCBjdXJ2YWwsIG5ld3ZhbDsKKwlpbnQgcmV0OworCisJLyogT3duZXIgZGllZD8gKi8KKwlpZiAocGlfc3RhdGUtPm93bmVyICE9IE5VTEwpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcGlfc3RhdGUtPm93bmVyLT5waV9sb2NrKTsKKwkJV0FSTl9PTihsaXN0X2VtcHR5KCZwaV9zdGF0ZS0+bGlzdCkpOworCQlsaXN0X2RlbF9pbml0KCZwaV9zdGF0ZS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycSgmcGlfc3RhdGUtPm93bmVyLT5waV9sb2NrKTsKKwl9IGVsc2UKKwkJbmV3dGlkIHw9IEZVVEVYX09XTkVSX0RJRUQ7CisKKwlwaV9zdGF0ZS0+b3duZXIgPSBjdXJyOworCisJc3Bpbl9sb2NrX2lycSgmY3Vyci0+cGlfbG9jayk7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmcGlfc3RhdGUtPmxpc3QpKTsKKwlsaXN0X2FkZCgmcGlfc3RhdGUtPmxpc3QsICZjdXJyLT5waV9zdGF0ZV9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmN1cnItPnBpX2xvY2spOworCisJLyogVW5xdWV1ZSBhbmQgZHJvcCB0aGUgbG9jayAqLworCXVucXVldWVfbWVfcGkocSk7CisJaWYgKGZzaGFyZWQpCisJCXVwX3JlYWQoZnNoYXJlZCk7CisJLyoKKwkgKiBXZSBvd24gaXQsIHNvIHdlIGhhdmUgdG8gcmVwbGFjZSB0aGUgcGVuZGluZyBvd25lcgorCSAqIFRJRC4gVGhpcyBtdXN0IGJlIGF0b21pYyBhcyB3ZSBoYXZlIHByZXNlcnZlIHRoZQorCSAqIG93bmVyIGRpZWQgYml0IGhlcmUuCisJICovCisJcmV0ID0gZ2V0X3VzZXIodXZhbCwgdWFkZHIpOworCXdoaWxlICghcmV0KSB7CisJCW5ld3ZhbCA9ICh1dmFsICYgRlVURVhfT1dORVJfRElFRCkgfCBuZXd0aWQ7CisJCW5ld3ZhbCB8PSAodXZhbCAmIEZVVEVYX1dBSVRFUl9SRVFVRVVFRCk7CisJCWN1cnZhbCA9IGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKHVhZGRyLAorCQkJCQkJICAgICAgIHV2YWwsIG5ld3ZhbCk7CisJCWlmIChjdXJ2YWwgPT0gLUVGQVVMVCkKKyAJCQlyZXQgPSAtRUZBVUxUOworCQlpZiAoY3VydmFsID09IHV2YWwpCisJCQlicmVhazsKKwkJdXZhbCA9IGN1cnZhbDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEluIGNhc2Ugd2UgbXVzdCB1c2UgcmVzdGFydF9ibG9jayB0byByZXN0YXJ0IGEgZnV0ZXhfd2FpdCwKKyAqIHdlIGVuY29kZSBpbiB0aGUgJ2FyZzMnIHNoYXJlZCBjYXBhYmlsaXR5CisgKi8KKyNkZWZpbmUgQVJHM19TSEFSRUQgIDEKKworc3RhdGljIGxvbmcgZnV0ZXhfd2FpdF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0KTsKK3N0YXRpYyBpbnQgZnV0ZXhfd2FpdCh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqZnNoYXJlZCwKKwkJICAgICAgdTMyIHZhbCwga3RpbWVfdCAqYWJzX3RpbWUpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyKTsKQEAgLTEwMTAsMTIgKzEzOTUsMTUgQEAKIAlzdHJ1Y3QgZnV0ZXhfcSBxOwogCXUzMiB1dmFsOwogCWludCByZXQ7CisJc3RydWN0IGhydGltZXJfc2xlZXBlciB0LCAqdG8gPSBOVUxMOworCWludCByZW0gPSAwOwogCiAJcS5waV9zdGF0ZSA9IE5VTEw7CiAgcmV0cnk6Ci0JZG93bl9yZWFkKCZjdXJyLT5tbS0+bW1hcF9zZW0pOworCWlmIChmc2hhcmVkKQorCQlkb3duX3JlYWQoZnNoYXJlZCk7CiAKLQlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyLCAmcS5rZXkpOworCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIsIGZzaGFyZWQsICZxLmtleSk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfcmVsZWFzZV9zZW07CiAKQEAgLTEwMzgsOCArMTQyNiw4IEBACiAJICogYSB3YWtldXAgd2hlbiAqdWFkZHIgIT0gdmFsIG9uIGVudHJ5IHRvIHRoZSBzeXNjYWxsLiAgVGhpcyBpcwogCSAqIHJhcmUsIGJ1dCBub3JtYWwuCiAJICoKLQkgKiBXZSBob2xkIHRoZSBtbWFwIHNlbWFwaG9yZSwgc28gdGhlIG1hcHBpbmcgY2Fubm90IGhhdmUgY2hhbmdlZAotCSAqIHNpbmNlIHdlIGxvb2tlZCBpdCB1cCBpbiBnZXRfZnV0ZXhfa2V5LgorCSAqIGZvciBzaGFyZWQgZnV0ZXhlcywgd2UgaG9sZCB0aGUgbW1hcCBzZW1hcGhvcmUsIHNvIHRoZSBtYXBwaW5nCisJICogY2Fubm90IGhhdmUgY2hhbmdlZCBzaW5jZSB3ZSBsb29rZWQgaXQgdXAgaW4gZ2V0X2Z1dGV4X2tleS4KIAkgKi8KIAlyZXQgPSBnZXRfZnV0ZXhfdmFsdWVfbG9ja2VkKCZ1dmFsLCB1YWRkcik7CiAKQEAgLTEwNTAsNyArMTQzOCw4IEBACiAJCSAqIElmIHdlIHdvdWxkIGhhdmUgZmF1bHRlZCwgcmVsZWFzZSBtbWFwX3NlbSwgZmF1bHQgaXQgaW4gYW5kCiAJCSAqIHN0YXJ0IGFsbCBvdmVyIGFnYWluLgogCQkgKi8KLQkJdXBfcmVhZCgmY3Vyci0+bW0tPm1tYXBfc2VtKTsKKwkJaWYgKGZzaGFyZWQpCisJCQl1cF9yZWFkKGZzaGFyZWQpOwogCiAJCXJldCA9IGdldF91c2VyKHV2YWwsIHVhZGRyKTsKIApAQCAtMTA2Miw2ICsxNDUxLDE0IEBACiAJaWYgKHV2YWwgIT0gdmFsKQogCQlnb3RvIG91dF91bmxvY2tfcmVsZWFzZV9zZW07CiAKKwkvKgorCSAqIFRoaXMgcnRfbXV0ZXhfd2FpdGVyIHN0cnVjdHVyZSBpcyBwcmVwYXJlZCBoZXJlIGFuZCB3aWxsCisJICogYmUgdXNlZCBvbmx5IGlmIHRoaXMgdGFzayBpcyByZXF1ZXVlZCBmcm9tIGEgbm9ybWFsIGZ1dGV4IHRvCisJICogYSBQSS1mdXRleCB3aXRoIGZ1dGV4X3JlcXVldWVfcGkuCisJICovCisJZGVidWdfcnRfbXV0ZXhfaW5pdF93YWl0ZXIoJnEud2FpdGVyKTsKKwlxLndhaXRlci50YXNrID0gTlVMTDsKKwogCS8qIE9ubHkgYWN0dWFsbHkgcXVldWUgaWYgKnVhZGRyIGNvbnRhaW5lZCB2YWwuICAqLwogCV9fcXVldWVfbWUoJnEsIGhiKTsKIApAQCAtMTA2OSw3ICsxNDY2LDggQEAKIAkgKiBOb3cgdGhlIGZ1dGV4IGlzIHF1ZXVlZCBhbmQgd2UgaGF2ZSBjaGVja2VkIHRoZSBkYXRhLCB3ZQogCSAqIGRvbid0IHdhbnQgdG8gaG9sZCBtbWFwX3NlbSB3aGlsZSB3ZSBzbGVlcC4KIAkgKi8KLQl1cF9yZWFkKCZjdXJyLT5tbS0+bW1hcF9zZW0pOworCWlmIChmc2hhcmVkKQorCQl1cF9yZWFkKGZzaGFyZWQpOwogCiAJLyoKIAkgKiBUaGVyZSBtaWdodCBoYXZlIGJlZW4gc2NoZWR1bGluZyBzaW5jZSB0aGUgcXVldWVfbWUoKSwgYXMgd2UKQEAgLTEwODQsMTEgKzE0ODIsMzQgQEAKIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJYWRkX3dhaXRfcXVldWUoJnEud2FpdGVycywgJndhaXQpOwogCS8qCi0JICogIWxpc3RfZW1wdHkoKSBpcyBzYWZlIGhlcmUgd2l0aG91dCBhbnkgbG9jay4KKwkgKiAhcGxpc3Rfbm9kZV9lbXB0eSgpIGlzIHNhZmUgaGVyZSB3aXRob3V0IGFueSBsb2NrLgogCSAqIHEubG9ja19wdHIgIT0gMCBpcyBub3Qgc2FmZSwgYmVjYXVzZSBvZiBvcmRlcmluZyBhZ2FpbnN0IHdha2V1cC4KIAkgKi8KLQlpZiAobGlrZWx5KCFsaXN0X2VtcHR5KCZxLmxpc3QpKSkKLQkJdGltZSA9IHNjaGVkdWxlX3RpbWVvdXQodGltZSk7CisJaWYgKGxpa2VseSghcGxpc3Rfbm9kZV9lbXB0eSgmcS5saXN0KSkpIHsKKwkJaWYgKCFhYnNfdGltZSkKKwkJCXNjaGVkdWxlKCk7CisJCWVsc2UgeworCQkJdG8gPSAmdDsKKwkJCWhydGltZXJfaW5pdCgmdC50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfQUJTKTsKKwkJCWhydGltZXJfaW5pdF9zbGVlcGVyKCZ0LCBjdXJyZW50KTsKKwkJCXQudGltZXIuZXhwaXJlcyA9ICphYnNfdGltZTsKKworCQkJaHJ0aW1lcl9zdGFydCgmdC50aW1lciwgdC50aW1lci5leHBpcmVzLCBIUlRJTUVSX01PREVfQUJTKTsKKworCQkJLyoKKwkJCSAqIHRoZSB0aW1lciBjb3VsZCBoYXZlIGFscmVhZHkgZXhwaXJlZCwgaW4gd2hpY2gKKwkJCSAqIGNhc2UgY3VycmVudCB3b3VsZCBiZSBmbGFnZ2VkIGZvciByZXNjaGVkdWxpbmcuCisJCQkgKiBEb24ndCBib3RoZXIgY2FsbGluZyBzY2hlZHVsZS4KKwkJCSAqLworCQkJaWYgKGxpa2VseSh0LnRhc2spKQorCQkJCXNjaGVkdWxlKCk7CisKKwkJCWhydGltZXJfY2FuY2VsKCZ0LnRpbWVyKTsKKworCQkJLyogRmxhZyBpZiBhIHRpbWVvdXQgb2NjdXJlZCAqLworCQkJcmVtID0gKHQudGFzayA9PSBOVUxMKTsKKwkJfQorCX0KIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKIAkvKgpAQCAtMTA5Niw2MiArMTUxNywyMDMgQEAKIAkgKiB3ZSBhcmUgdGhlIG9ubHkgdXNlciBvZiBpdC4KIAkgKi8KIAorCWlmIChxLnBpX3N0YXRlKSB7CisJCS8qCisJCSAqIFdlIHdlcmUgd29rZW4gYnV0IGhhdmUgYmVlbiByZXF1ZXVlZCBvbiBhIFBJLWZ1dGV4LgorCQkgKiBXZSBoYXZlIHRvIGNvbXBsZXRlIHRoZSBsb2NrIGFjcXVpc2l0aW9uIGJ5IHRha2luZworCQkgKiB0aGUgcnRtdXRleC4KKwkJICovCisKKwkJc3RydWN0IHJ0X211dGV4ICpsb2NrID0gJnEucGlfc3RhdGUtPnBpX211dGV4OworCisJCXNwaW5fbG9jaygmbG9jay0+d2FpdF9sb2NrKTsKKwkJaWYgKHVubGlrZWx5KHEud2FpdGVyLnRhc2spKSB7CisJCQlyZW1vdmVfd2FpdGVyKGxvY2ssICZxLndhaXRlcik7CisJCX0KKwkJc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CisKKwkJaWYgKHJlbSkKKwkJCXJldCA9IC1FVElNRURPVVQ7CisJCWVsc2UKKwkJCXJldCA9IHJ0X211dGV4X3RpbWVkX2xvY2sobG9jaywgdG8sIDEpOworCisJCWlmIChmc2hhcmVkKQorCQkJZG93bl9yZWFkKGZzaGFyZWQpOworCQlzcGluX2xvY2socS5sb2NrX3B0cik7CisKKwkJLyoKKwkJICogR290IHRoZSBsb2NrLiBXZSBtaWdodCBub3QgYmUgdGhlIGFudGljaXBhdGVkIG93bmVyIGlmIHdlCisJCSAqIGRpZCBhIGxvY2stc3RlYWwgLSBmaXggdXAgdGhlIFBJLXN0YXRlIGluIHRoYXQgY2FzZS4KKwkJICovCisJCWlmICghcmV0ICYmIHEucGlfc3RhdGUtPm93bmVyICE9IGN1cnIpIHsKKwkJCS8qCisJCQkgKiBXZSBNVVNUIHBsYXkgd2l0aCB0aGUgZnV0ZXggd2Ugd2VyZSByZXF1ZXVlZCBvbiwKKwkJCSAqIE5PVCB0aGUgY3VycmVudCBmdXRleC4KKwkJCSAqIFdlIGNhbiByZXRyaWV2ZSBpdCBmcm9tIHRoZSBrZXkgb2YgdGhlIHBpX3N0YXRlCisJCQkgKi8KKwkJCXVhZGRyID0gcS5waV9zdGF0ZS0+a2V5LnVhZGRyOworCisJCQkvKiBtbWFwX3NlbSBhbmQgaGFzaF9idWNrZXQgbG9jayBhcmUgdW5sb2NrZWQgYXQKKwkJCSAgIHJldHVybiBvZiB0aGlzIGZ1bmN0aW9uICovCisJCQlyZXQgPSBmaXh1cF9waV9zdGF0ZV9vd25lcih1YWRkciwgZnNoYXJlZCwKKwkJCQkJCSAgICZxLCBoYiwgY3Vycik7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQ2F0Y2ggdGhlIHJhcmUgY2FzZSwgd2hlcmUgdGhlIGxvY2sgd2FzIHJlbGVhc2VkCisJCQkgKiB3aGVuIHdlIHdlcmUgb24gdGhlIHdheSBiYWNrIGJlZm9yZSB3ZSBsb2NrZWQKKwkJCSAqIHRoZSBoYXNoIGJ1Y2tldC4KKwkJCSAqLworCQkJaWYgKHJldCAmJiBxLnBpX3N0YXRlLT5vd25lciA9PSBjdXJyKSB7CisJCQkJaWYgKHJ0X211dGV4X3RyeWxvY2soJnEucGlfc3RhdGUtPnBpX211dGV4KSkKKwkJCQkJcmV0ID0gMDsKKwkJCX0KKwkJCS8qIFVucXVldWUgYW5kIGRyb3AgdGhlIGxvY2sgKi8KKwkJCXVucXVldWVfbWVfcGkoJnEpOworCQkJaWYgKGZzaGFyZWQpCisJCQkJdXBfcmVhZChmc2hhcmVkKTsKKwkJfQorCisJCWRlYnVnX3J0X211dGV4X2ZyZWVfd2FpdGVyKCZxLndhaXRlcik7CisKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZWJ1Z19ydF9tdXRleF9mcmVlX3dhaXRlcigmcS53YWl0ZXIpOworCiAJLyogSWYgd2Ugd2VyZSB3b2tlbiAoYW5kIHVucXVldWVkKSwgd2Ugc3VjY2VlZGVkLCB3aGF0ZXZlci4gKi8KIAlpZiAoIXVucXVldWVfbWUoJnEpKQogCQlyZXR1cm4gMDsKLQlpZiAodGltZSA9PSAwKQorCWlmIChyZW0pCiAJCXJldHVybiAtRVRJTUVET1VUOworCiAJLyoKIAkgKiBXZSBleHBlY3Qgc2lnbmFsX3BlbmRpbmcoY3VycmVudCksIGJ1dCBhbm90aGVyIHRocmVhZCBtYXkKIAkgKiBoYXZlIGhhbmRsZWQgaXQgZm9yIHVzIGFscmVhZHkuCiAJICovCi0JcmV0dXJuIC1FSU5UUjsKKwlpZiAoIWFic190aW1lKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWVsc2UgeworCQlzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydDsKKwkJcmVzdGFydCA9ICZjdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2s7CisJCXJlc3RhcnQtPmZuID0gZnV0ZXhfd2FpdF9yZXN0YXJ0OworCQlyZXN0YXJ0LT5hcmcwID0gKHVuc2lnbmVkIGxvbmcpdWFkZHI7CisJCXJlc3RhcnQtPmFyZzEgPSAodW5zaWduZWQgbG9uZyl2YWw7CisJCXJlc3RhcnQtPmFyZzIgPSAodW5zaWduZWQgbG9uZylhYnNfdGltZTsKKwkJcmVzdGFydC0+YXJnMyA9IDA7CisJCWlmIChmc2hhcmVkKQorCQkJcmVzdGFydC0+YXJnMyB8PSBBUkczX1NIQVJFRDsKKwkJcmV0dXJuIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s7CisJfQogCiAgb3V0X3VubG9ja19yZWxlYXNlX3NlbToKIAlxdWV1ZV91bmxvY2soJnEsIGhiKTsKIAogIG91dF9yZWxlYXNlX3NlbToKLQl1cF9yZWFkKCZjdXJyLT5tbS0+bW1hcF9zZW0pOworCWlmIChmc2hhcmVkKQorCQl1cF9yZWFkKGZzaGFyZWQpOwogCXJldHVybiByZXQ7CiB9CiAKKworc3RhdGljIGxvbmcgZnV0ZXhfd2FpdF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0KQoreworCXUzMiBfX3VzZXIgKnVhZGRyID0gKHUzMiBfX3VzZXIgKilyZXN0YXJ0LT5hcmcwOworCXUzMiB2YWwgPSAodTMyKXJlc3RhcnQtPmFyZzE7CisJa3RpbWVfdCAqYWJzX3RpbWUgPSAoa3RpbWVfdCAqKXJlc3RhcnQtPmFyZzI7CisJc3RydWN0IHJ3X3NlbWFwaG9yZSAqZnNoYXJlZCA9IE5VTEw7CisKKwlyZXN0YXJ0LT5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKKwlpZiAocmVzdGFydC0+YXJnMyAmIEFSRzNfU0hBUkVEKQorCQlmc2hhcmVkID0gJmN1cnJlbnQtPm1tLT5tbWFwX3NlbTsKKwlyZXR1cm4gKGxvbmcpZnV0ZXhfd2FpdCh1YWRkciwgZnNoYXJlZCwgdmFsLCBhYnNfdGltZSk7Cit9CisKKworc3RhdGljIHZvaWQgc2V0X3BpX2Z1dGV4X293bmVyKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsCisJCQkgICAgICAgdW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlzdHJ1Y3QgcGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgZnV0ZXhfcSAqdGhpcywgKm5leHQ7CisJc3RydWN0IGZ1dGV4X3BpX3N0YXRlICpwaV9zdGF0ZSA9IE5VTEw7CisJc3RydWN0IHJ0X211dGV4ICpsb2NrOworCisJLyogU2VhcmNoIGEgd2FpdGVyIHRoYXQgc2hvdWxkIGFscmVhZHkgZXhpc3RzICovCisKKwloZWFkID0gJmhiLT5jaGFpbjsKKworCXBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGhpcywgbmV4dCwgaGVhZCwgbGlzdCkgeworCQlpZiAobWF0Y2hfZnV0ZXggKCZ0aGlzLT5rZXksIGtleSkpIHsKKwkJCXBpX3N0YXRlID0gdGhpcy0+cGlfc3RhdGU7CisJCQlicmVhazsKKwkJfQorCX0KKworCUJVR19PTighcGlfc3RhdGUpOworCisJLyogc2V0IHAgYXMgcGlfc3RhdGUncyBvd25lciAqLworCWxvY2sgPSAmcGlfc3RhdGUtPnBpX211dGV4OworCisJc3Bpbl9sb2NrKCZsb2NrLT53YWl0X2xvY2spOworCXNwaW5fbG9ja19pcnEoJnAtPnBpX2xvY2spOworCisJbGlzdF9hZGQoJnBpX3N0YXRlLT5saXN0LCAmcC0+cGlfc3RhdGVfbGlzdCk7CisJcGlfc3RhdGUtPm93bmVyID0gcDsKKworCisJLyogc2V0IHAgYXMgcGlfbXV0ZXgncyBvd25lciAqLworCWRlYnVnX3J0X211dGV4X3Byb3h5X2xvY2sobG9jaywgcCk7CisJV0FSTl9PTihydF9tdXRleF9vd25lcihsb2NrKSk7CisJcnRfbXV0ZXhfc2V0X293bmVyKGxvY2ssIHAsIDApOworCXJ0X211dGV4X2RlYWRsb2NrX2FjY291bnRfbG9jayhsb2NrLCBwKTsKKworCXBsaXN0X2FkZCgmcnRfbXV0ZXhfdG9wX3dhaXRlcihsb2NrKS0+cGlfbGlzdF9lbnRyeSwKKwkJICAmcC0+cGlfd2FpdGVycyk7CisJX19ydF9tdXRleF9hZGp1c3RfcHJpbyhwKTsKKworCXNwaW5fdW5sb2NrX2lycSgmcC0+cGlfbG9jayk7CisJc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7Cit9CisKIC8qCiAgKiBVc2Vyc3BhY2UgdHJpZWQgYSAwIC0+IFRJRCBhdG9taWMgdHJhbnNpdGlvbiBvZiB0aGUgZnV0ZXggdmFsdWUKICAqIGFuZCBmYWlsZWQuIFRoZSBrZXJuZWwgc2lkZSBoZXJlIGRvZXMgdGhlIHdob2xlIGxvY2tpbmcgb3BlcmF0aW9uOgogICogaWYgdGhlcmUgYXJlIHdhaXRlcnMgdGhlbiBpdCB3aWxsIGJsb2NrLCBpdCBkb2VzIFBJLCBldGMuIChEdWUgdG8KICAqIHJhY2VzIHRoZSBrZXJuZWwgbWlnaHQgc2VlIGEgMCB2YWx1ZSBvZiB0aGUgZnV0ZXggdG9vLikKICAqLwotc3RhdGljIGludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgZGV0ZWN0LCB1bnNpZ25lZCBsb25nIHNlYywKLQkJCSBsb25nIG5zZWMsIGludCB0cnlsb2NrKQorc3RhdGljIGludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpmc2hhcmVkLAorCQkJIGludCBkZXRlY3QsIGt0aW1lX3QgKnRpbWUsIGludCB0cnlsb2NrKQogewogCXN0cnVjdCBocnRpbWVyX3NsZWVwZXIgdGltZW91dCwgKnRvID0gTlVMTDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OwogCXN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7CiAJdTMyIHV2YWwsIG5ld3ZhbCwgY3VydmFsOwogCXN0cnVjdCBmdXRleF9xIHE7Ci0JaW50IHJldCwgYXR0ZW1wdCA9IDA7CisJaW50IHJldCwgbG9ja19oZWxkLCBhdHRlbXB0ID0gMDsKIAogCWlmIChyZWZpbGxfcGlfc3RhdGVfY2FjaGUoKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoc2VjICE9IE1BWF9TQ0hFRFVMRV9USU1FT1VUKSB7CisJaWYgKHRpbWUpIHsKIAkJdG8gPSAmdGltZW91dDsKIAkJaHJ0aW1lcl9pbml0KCZ0by0+dGltZXIsIENMT0NLX1JFQUxUSU1FLCBIUlRJTUVSX01PREVfQUJTKTsKIAkJaHJ0aW1lcl9pbml0X3NsZWVwZXIodG8sIGN1cnJlbnQpOwotCQl0by0+dGltZXIuZXhwaXJlcyA9IGt0aW1lX3NldChzZWMsIG5zZWMpOworCQl0by0+dGltZXIuZXhwaXJlcyA9ICp0aW1lOwogCX0KIAogCXEucGlfc3RhdGUgPSBOVUxMOwogIHJldHJ5OgotCWRvd25fcmVhZCgmY3Vyci0+bW0tPm1tYXBfc2VtKTsKKwlpZiAoZnNoYXJlZCkKKwkJZG93bl9yZWFkKGZzaGFyZWQpOwogCi0JcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkciwgJnEua2V5KTsKKwlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyLCBmc2hhcmVkLCAmcS5rZXkpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0X3JlbGVhc2Vfc2VtOwogCiAJaGIgPSBxdWV1ZV9sb2NrKCZxLCAtMSwgTlVMTCk7CiAKICByZXRyeV9sb2NrZWQ6CisJbG9ja19oZWxkID0gMDsKKwogCS8qCiAJICogVG8gYXZvaWQgcmFjZXMsIHdlIGF0dGVtcHQgdG8gdGFrZSB0aGUgbG9jayBoZXJlIGFnYWluCiAJICogKGJ5IGRvaW5nIGEgMCAtPiBUSUQgYXRvbWljIGNtcHhjaGcpLCB3aGlsZSBob2xkaW5nIGFsbApAQCAtMTE3MCw3ICsxNzMyLDE2IEBACiAJaWYgKHVubGlrZWx5KChjdXJ2YWwgJiBGVVRFWF9USURfTUFTSykgPT0gY3VycmVudC0+cGlkKSkgewogCQlpZiAoIWRldGVjdCAmJiAwKQogCQkJZm9yY2Vfc2lnKFNJR0tJTEwsIGN1cnJlbnQpOwotCQlyZXQgPSAtRURFQURMSzsKKwkJLyoKKwkJICogTm9ybWFsbHksIHRoaXMgY2hlY2sgaXMgZG9uZSBpbiB1c2VyIHNwYWNlLgorCQkgKiBJbiBjYXNlIG9mIHJlcXVldWUsIHRoZSBvd25lciBtYXkgYXR0ZW1wdCB0byBsb2NrIHRoaXMgZnV0ZXgsCisJCSAqIGV2ZW4gaWYgdGhlIG93bmVyc2hpcCBoYXMgYWxyZWFkeSBiZWVuIGdpdmVuIGJ5IHRoZSBwcmV2aW91cworCQkgKiB3YWtlci4KKwkJICogSW4gdGhlIHVzdWFsIGNhc2UsIHRoaXMgaXMgYSBjYXNlIG9mIGRlYWRsb2NrLCBidXQgbm90IGluIGNhc2UKKwkJICogb2YgUkVRVUVVRV9QSS4KKwkJICovCisJCWlmICghKGN1cnZhbCAmIEZVVEVYX1dBSVRFUl9SRVFVRVVFRCkpCisJCQlyZXQgPSAtRURFQURMSzsKIAkJZ290byBvdXRfdW5sb2NrX3JlbGVhc2Vfc2VtOwogCX0KIApAQCAtMTE4Miw3ICsxNzUzLDE4IEBACiAJCWdvdG8gb3V0X3VubG9ja19yZWxlYXNlX3NlbTsKIAogCXV2YWwgPSBjdXJ2YWw7Ci0JbmV3dmFsID0gdXZhbCB8IEZVVEVYX1dBSVRFUlM7CisJLyoKKwkgKiBJbiBjYXNlIG9mIGEgcmVxdWV1ZSwgY2hlY2sgaWYgdGhlcmUgYWxyZWFkeSBpcyBhbiBvd25lcgorCSAqIElmIG5vdCwganVzdCB0YWtlIHRoZSBmdXRleC4KKwkgKi8KKwlpZiAoKGN1cnZhbCAmIEZVVEVYX1dBSVRFUl9SRVFVRVVFRCkgJiYgIShjdXJ2YWwgJiBGVVRFWF9USURfTUFTSykpIHsKKwkJLyogc2V0IGN1cnJlbnQgYXMgZnV0ZXggb3duZXIgKi8KKwkJbmV3dmFsID0gY3VydmFsIHwgY3VycmVudC0+cGlkOworCQlsb2NrX2hlbGQgPSAxOworCX0gZWxzZQorCQkvKiBTZXQgdGhlIFdBSVRFUlMgZmxhZywgc28gdGhlIG93bmVyIHdpbGwga25vdyBpdCBoYXMgc29tZW9uZQorCQkgICB0byB3YWtlIGF0IG5leHQgdW5sb2NrICovCisJCW5ld3ZhbCA9IGN1cnZhbCB8IEZVVEVYX1dBSVRFUlM7CiAKIAlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCWN1cnZhbCA9IGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKHVhZGRyLCB1dmFsLCBuZXd2YWwpOwpAQCAtMTE5MywxMSArMTc3NSwxNiBAQAogCWlmICh1bmxpa2VseShjdXJ2YWwgIT0gdXZhbCkpCiAJCWdvdG8gcmV0cnlfbG9ja2VkOwogCisJaWYgKGxvY2tfaGVsZCkgeworCQlzZXRfcGlfZnV0ZXhfb3duZXIoaGIsICZxLmtleSwgY3Vycik7CisJCWdvdG8gb3V0X3VubG9ja19yZWxlYXNlX3NlbTsKKwl9CisKIAkvKgogCSAqIFdlIGRvbnQgaGF2ZSB0aGUgbG9jay4gTG9vayB1cCB0aGUgUEkgc3RhdGUgKG9yIGNyZWF0ZSBpdCBpZgogCSAqIHdlIGFyZSB0aGUgZmlyc3Qgd2FpdGVyKToKIAkgKi8KLQlyZXQgPSBsb29rdXBfcGlfc3RhdGUodXZhbCwgaGIsICZxKTsKKwlyZXQgPSBsb29rdXBfcGlfc3RhdGUodXZhbCwgaGIsICZxLmtleSwgJnEucGlfc3RhdGUpOwogCiAJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJLyoKQEAgLTEyMzksNyArMTgyNiw4IEBACiAJICogTm93IHRoZSBmdXRleCBpcyBxdWV1ZWQgYW5kIHdlIGhhdmUgY2hlY2tlZCB0aGUgZGF0YSwgd2UKIAkgKiBkb24ndCB3YW50IHRvIGhvbGQgbW1hcF9zZW0gd2hpbGUgd2Ugc2xlZXAuCiAJICovCi0JdXBfcmVhZCgmY3Vyci0+bW0tPm1tYXBfc2VtKTsKKwlpZiAoZnNoYXJlZCkKKwkJdXBfcmVhZChmc2hhcmVkKTsKIAogCVdBUk5fT04oIXEucGlfc3RhdGUpOwogCS8qCkBAIC0xMjUzLDUyICsxODQxLDE4IEBACiAJCXJldCA9IHJldCA/IDAgOiAtRVdPVUxEQkxPQ0s7CiAJfQogCi0JZG93bl9yZWFkKCZjdXJyLT5tbS0+bW1hcF9zZW0pOworCWlmIChmc2hhcmVkKQorCQlkb3duX3JlYWQoZnNoYXJlZCk7CiAJc3Bpbl9sb2NrKHEubG9ja19wdHIpOwogCiAJLyoKIAkgKiBHb3QgdGhlIGxvY2suIFdlIG1pZ2h0IG5vdCBiZSB0aGUgYW50aWNpcGF0ZWQgb3duZXIgaWYgd2UKIAkgKiBkaWQgYSBsb2NrLXN0ZWFsIC0gZml4IHVwIHRoZSBQSS1zdGF0ZSBpbiB0aGF0IGNhc2UuCiAJICovCi0JaWYgKCFyZXQgJiYgcS5waV9zdGF0ZS0+b3duZXIgIT0gY3VycikgewotCQl1MzIgbmV3dGlkID0gY3VycmVudC0+cGlkIHwgRlVURVhfV0FJVEVSUzsKLQotCQkvKiBPd25lciBkaWVkPyAqLwotCQlpZiAocS5waV9zdGF0ZS0+b3duZXIgIT0gTlVMTCkgewotCQkJc3Bpbl9sb2NrX2lycSgmcS5waV9zdGF0ZS0+b3duZXItPnBpX2xvY2spOwotCQkJV0FSTl9PTihsaXN0X2VtcHR5KCZxLnBpX3N0YXRlLT5saXN0KSk7Ci0JCQlsaXN0X2RlbF9pbml0KCZxLnBpX3N0YXRlLT5saXN0KTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcS5waV9zdGF0ZS0+b3duZXItPnBpX2xvY2spOwotCQl9IGVsc2UKLQkJCW5ld3RpZCB8PSBGVVRFWF9PV05FUl9ESUVEOwotCi0JCXEucGlfc3RhdGUtPm93bmVyID0gY3VycmVudDsKLQotCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5waV9sb2NrKTsKLQkJV0FSTl9PTighbGlzdF9lbXB0eSgmcS5waV9zdGF0ZS0+bGlzdCkpOwotCQlsaXN0X2FkZCgmcS5waV9zdGF0ZS0+bGlzdCwgJmN1cnJlbnQtPnBpX3N0YXRlX2xpc3QpOwotCQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnBpX2xvY2spOwotCi0JCS8qIFVucXVldWUgYW5kIGRyb3AgdGhlIGxvY2sgKi8KLQkJdW5xdWV1ZV9tZV9waSgmcSwgaGIpOwotCQl1cF9yZWFkKCZjdXJyLT5tbS0+bW1hcF9zZW0pOwotCQkvKgotCQkgKiBXZSBvd24gaXQsIHNvIHdlIGhhdmUgdG8gcmVwbGFjZSB0aGUgcGVuZGluZyBvd25lcgotCQkgKiBUSUQuIFRoaXMgbXVzdCBiZSBhdG9taWMgYXMgd2UgaGF2ZSBwcmVzZXJ2ZSB0aGUKLQkJICogb3duZXIgZGllZCBiaXQgaGVyZS4KLQkJICovCi0JCXJldCA9IGdldF91c2VyKHV2YWwsIHVhZGRyKTsKLQkJd2hpbGUgKCFyZXQpIHsKLQkJCW5ld3ZhbCA9ICh1dmFsICYgRlVURVhfT1dORVJfRElFRCkgfCBuZXd0aWQ7Ci0JCQljdXJ2YWwgPSBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyh1YWRkciwKLQkJCQkJCQkgICAgICAgdXZhbCwgbmV3dmFsKTsKLQkJCWlmIChjdXJ2YWwgPT0gLUVGQVVMVCkKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJaWYgKGN1cnZhbCA9PSB1dmFsKQotCQkJCWJyZWFrOwotCQkJdXZhbCA9IGN1cnZhbDsKLQkJfQotCX0gZWxzZSB7CisJaWYgKCFyZXQgJiYgcS5waV9zdGF0ZS0+b3duZXIgIT0gY3VycikKKwkJLyogbW1hcF9zZW0gaXMgdW5sb2NrZWQgYXQgcmV0dXJuIG9mIHRoaXMgZnVuY3Rpb24gKi8KKwkJcmV0ID0gZml4dXBfcGlfc3RhdGVfb3duZXIodWFkZHIsIGZzaGFyZWQsICZxLCBoYiwgY3Vycik7CisJZWxzZSB7CiAJCS8qCiAJCSAqIENhdGNoIHRoZSByYXJlIGNhc2UsIHdoZXJlIHRoZSBsb2NrIHdhcyByZWxlYXNlZAogCQkgKiB3aGVuIHdlIHdlcmUgb24gdGhlIHdheSBiYWNrIGJlZm9yZSB3ZSBsb2NrZWQKQEAgLTEzMDksOCArMTg2Myw5IEBACiAJCQkJcmV0ID0gMDsKIAkJfQogCQkvKiBVbnF1ZXVlIGFuZCBkcm9wIHRoZSBsb2NrICovCi0JCXVucXVldWVfbWVfcGkoJnEsIGhiKTsKLQkJdXBfcmVhZCgmY3Vyci0+bW0tPm1tYXBfc2VtKTsKKwkJdW5xdWV1ZV9tZV9waSgmcSk7CisJCWlmIChmc2hhcmVkKQorCQkJdXBfcmVhZChmc2hhcmVkKTsKIAl9CiAKIAlpZiAoIWRldGVjdCAmJiByZXQgPT0gLUVERUFETEsgJiYgMCkKQEAgLTEzMjIsNyArMTg3Nyw4IEBACiAJcXVldWVfdW5sb2NrKCZxLCBoYik7CiAKICBvdXRfcmVsZWFzZV9zZW06Ci0JdXBfcmVhZCgmY3Vyci0+bW0tPm1tYXBfc2VtKTsKKwlpZiAoZnNoYXJlZCkKKwkJdXBfcmVhZChmc2hhcmVkKTsKIAlyZXR1cm4gcmV0OwogCiAgdWFkZHJfZmF1bHRlZDoKQEAgLTEzMzMsMTUgKzE4ODksMTYgQEAKIAkgKiBzdGlsbCBob2xkaW5nIHRoZSBtbWFwX3NlbS4KIAkgKi8KIAlpZiAoYXR0ZW1wdCsrKSB7Ci0JCWlmIChmdXRleF9oYW5kbGVfZmF1bHQoKHVuc2lnbmVkIGxvbmcpdWFkZHIsIGF0dGVtcHQpKSB7Ci0JCQlyZXQgPSAtRUZBVUxUOworCQlyZXQgPSBmdXRleF9oYW5kbGVfZmF1bHQoKHVuc2lnbmVkIGxvbmcpdWFkZHIsIGZzaGFyZWQsCisJCQkJCSBhdHRlbXB0KTsKKwkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X3VubG9ja19yZWxlYXNlX3NlbTsKLQkJfQogCQlnb3RvIHJldHJ5X2xvY2tlZDsKIAl9CiAKIAlxdWV1ZV91bmxvY2soJnEsIGhiKTsKLQl1cF9yZWFkKCZjdXJyLT5tbS0+bW1hcF9zZW0pOworCWlmIChmc2hhcmVkKQorCQl1cF9yZWFkKGZzaGFyZWQpOwogCiAJcmV0ID0gZ2V0X3VzZXIodXZhbCwgdWFkZHIpOwogCWlmICghcmV0ICYmICh1dmFsICE9IC1FRkFVTFQpKQpAQCAtMTM1NSwxMiArMTkxMiwxMiBAQAogICogVGhpcyBpcyB0aGUgaW4ta2VybmVsIHNsb3dwYXRoOiB3ZSBsb29rIHVwIHRoZSBQSSBzdGF0ZSAoaWYgYW55KSwKICAqIGFuZCBkbyB0aGUgcnQtbXV0ZXggdW5sb2NrLgogICovCi1zdGF0aWMgaW50IGZ1dGV4X3VubG9ja19waSh1MzIgX191c2VyICp1YWRkcikKK3N0YXRpYyBpbnQgZnV0ZXhfdW5sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpmc2hhcmVkKQogewogCXN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7CiAJc3RydWN0IGZ1dGV4X3EgKnRoaXMsICpuZXh0OwogCXUzMiB1dmFsOwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQ7CiAJdW5pb24gZnV0ZXhfa2V5IGtleTsKIAlpbnQgcmV0LCBhdHRlbXB0ID0gMDsKIApAQCAtMTM3NSw5ICsxOTMyLDEwIEBACiAJLyoKIAkgKiBGaXJzdCB0YWtlIGFsbCB0aGUgZnV0ZXggcmVsYXRlZCBsb2NrczoKIAkgKi8KLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJaWYgKGZzaGFyZWQpCisJCWRvd25fcmVhZChmc2hhcmVkKTsKIAotCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIsICZrZXkpOworCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIsIGZzaGFyZWQsICZrZXkpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwogCkBAIC0xNDExLDcgKzE5NjksNyBAQAogCSAqLwogCWhlYWQgPSAmaGItPmNoYWluOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRoaXMsIG5leHQsIGhlYWQsIGxpc3QpIHsKKwlwbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRoaXMsIG5leHQsIGhlYWQsIGxpc3QpIHsKIAkJaWYgKCFtYXRjaF9mdXRleCAoJnRoaXMtPmtleSwgJmtleSkpCiAJCQljb250aW51ZTsKIAkJcmV0ID0gd2FrZV9mdXRleF9waSh1YWRkciwgdXZhbCwgdGhpcyk7CkBAIC0xNDM2LDcgKzE5OTQsOCBAQAogb3V0X3VubG9jazoKIAlzcGluX3VubG9jaygmaGItPmxvY2spOwogb3V0OgotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJaWYgKGZzaGFyZWQpCisJCXVwX3JlYWQoZnNoYXJlZCk7CiAKIAlyZXR1cm4gcmV0OwogCkBAIC0xNDQ4LDE1ICsyMDA3LDE2IEBACiAJICogc3RpbGwgaG9sZGluZyB0aGUgbW1hcF9zZW0uCiAJICovCiAJaWYgKGF0dGVtcHQrKykgewotCQlpZiAoZnV0ZXhfaGFuZGxlX2ZhdWx0KCh1bnNpZ25lZCBsb25nKXVhZGRyLCBhdHRlbXB0KSkgewotCQkJcmV0ID0gLUVGQVVMVDsKKwkJcmV0ID0gZnV0ZXhfaGFuZGxlX2ZhdWx0KCh1bnNpZ25lZCBsb25nKXVhZGRyLCBmc2hhcmVkLAorCQkJCQkgYXR0ZW1wdCk7CisJCWlmIChyZXQpCiAJCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KIAkJZ290byByZXRyeV9sb2NrZWQ7CiAJfQogCiAJc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWlmIChmc2hhcmVkKQorCQl1cF9yZWFkKGZzaGFyZWQpOwogCiAJcmV0ID0gZ2V0X3VzZXIodXZhbCwgdWFkZHIpOwogCWlmICghcmV0ICYmICh1dmFsICE9IC1FRkFVTFQpKQpAQCAtMTQ4NSwxMCArMjA0NSwxMCBAQAogCXBvbGxfd2FpdChmaWxwLCAmcS0+d2FpdGVycywgd2FpdCk7CiAKIAkvKgotCSAqIGxpc3RfZW1wdHkoKSBpcyBzYWZlIGhlcmUgd2l0aG91dCBhbnkgbG9jay4KKwkgKiBwbGlzdF9ub2RlX2VtcHR5KCkgaXMgc2FmZSBoZXJlIHdpdGhvdXQgYW55IGxvY2suCiAJICogcS0+bG9ja19wdHIgIT0gMCBpcyBub3Qgc2FmZSwgYmVjYXVzZSBvZiBvcmRlcmluZyBhZ2FpbnN0IHdha2V1cC4KIAkgKi8KLQlpZiAobGlzdF9lbXB0eSgmcS0+bGlzdCkpCisJaWYgKHBsaXN0X25vZGVfZW1wdHkoJnEtPmxpc3QpKQogCQlyZXQgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCiAJcmV0dXJuIHJldDsKQEAgLTE1MDgsNiArMjA2OCw3IEBACiAJc3RydWN0IGZ1dGV4X3EgKnE7CiAJc3RydWN0IGZpbGUgKmZpbHA7CiAJaW50IHJldCwgZXJyOworCXN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQ7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJpbnRrX2ludGVydmFsOwogCiAJaWYgKHByaW50a190aW1lZF9yYXRlbGltaXQoJnByaW50a19pbnRlcnZhbCwgNjAgKiA2MCAqIDEwMDApKSB7CkBAIC0xNTQ5LDExICsyMTEwLDEyIEBACiAJfQogCXEtPnBpX3N0YXRlID0gTlVMTDsKIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQllcnIgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyLCAmcS0+a2V5KTsKKwlmc2hhcmVkID0gJmN1cnJlbnQtPm1tLT5tbWFwX3NlbTsKKwlkb3duX3JlYWQoZnNoYXJlZCk7CisJZXJyID0gZ2V0X2Z1dGV4X2tleSh1YWRkciwgZnNoYXJlZCwgJnEtPmtleSk7CiAKIAlpZiAodW5saWtlbHkoZXJyICE9IDApKSB7Ci0JCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCXVwX3JlYWQoZnNoYXJlZCk7CiAJCWtmcmVlKHEpOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTE1NjUsNyArMjEyNyw3IEBACiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gcTsKIAogCXF1ZXVlX21lKHEsIHJldCwgZmlscCk7Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwl1cF9yZWFkKGZzaGFyZWQpOwogCiAJLyogTm93IHdlIG1hcCBmZCB0byBmaWxwLCBzbyB1c2Vyc3BhY2UgY2FuIGFjY2VzcyBpdCAqLwogCWZkX2luc3RhbGwocmV0LCBmaWxwKTsKQEAgLTE2NzgsNiArMjI0MCw4IEBACiAJCSAqIHVzZXJzcGFjZS4KIAkJICovCiAJCW12YWwgPSAodXZhbCAmIEZVVEVYX1dBSVRFUlMpIHwgRlVURVhfT1dORVJfRElFRDsKKwkJLyogQWxzbyBrZWVwIHRoZSBGVVRFWF9XQUlURVJfUkVRVUVVRUQgZmxhZyBpZiBzZXQgKi8KKwkJbXZhbCB8PSAodXZhbCAmIEZVVEVYX1dBSVRFUl9SRVFVRVVFRCk7CiAJCW52YWwgPSBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyh1YWRkciwgdXZhbCwgbXZhbCk7CiAKIAkJaWYgKG52YWwgPT0gLUVGQVVMVCkKQEAgLTE2OTIsNyArMjI1Niw3IEBACiAJCSAqLwogCQlpZiAoIXBpKSB7CiAJCQlpZiAodXZhbCAmIEZVVEVYX1dBSVRFUlMpCi0JCQkJZnV0ZXhfd2FrZSh1YWRkciwgMSk7CisJCQkJZnV0ZXhfd2FrZSh1YWRkciwgJmN1cnItPm1tLT5tbWFwX3NlbSwgMSk7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0xNzQ4LDcgKzIzMTIsOCBAQAogCQlyZXR1cm47CiAKIAlpZiAocGVuZGluZykKLQkJaGFuZGxlX2Z1dGV4X2RlYXRoKCh2b2lkIF9fdXNlciAqKXBlbmRpbmcgKyBmdXRleF9vZmZzZXQsIGN1cnIsIHBpcCk7CisJCWhhbmRsZV9mdXRleF9kZWF0aCgodm9pZCBfX3VzZXIgKilwZW5kaW5nICsgZnV0ZXhfb2Zmc2V0LAorCQkJCSAgIGN1cnIsIHBpcCk7CiAKIAl3aGlsZSAoZW50cnkgIT0gJmhlYWQtPmxpc3QpIHsKIAkJLyoKQEAgLTE3NzQsMzkgKzIzMzksNDcgQEAKIAl9CiB9CiAKLWxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LAorbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LAogCQl1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMykKIHsKIAlpbnQgcmV0OworCWludCBjbWQgPSBvcCAmIEZVVEVYX0NNRF9NQVNLOworCXN0cnVjdCByd19zZW1hcGhvcmUgKmZzaGFyZWQgPSBOVUxMOwogCi0Jc3dpdGNoIChvcCkgeworCWlmICghKG9wICYgRlVURVhfUFJJVkFURV9GTEFHKSkKKwkJZnNoYXJlZCA9ICZjdXJyZW50LT5tbS0+bW1hcF9zZW07CisKKwlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRlVURVhfV0FJVDoKLQkJcmV0ID0gZnV0ZXhfd2FpdCh1YWRkciwgdmFsLCB0aW1lb3V0KTsKKwkJcmV0ID0gZnV0ZXhfd2FpdCh1YWRkciwgZnNoYXJlZCwgdmFsLCB0aW1lb3V0KTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9XQUtFOgotCQlyZXQgPSBmdXRleF93YWtlKHVhZGRyLCB2YWwpOworCQlyZXQgPSBmdXRleF93YWtlKHVhZGRyLCBmc2hhcmVkLCB2YWwpOwogCQlicmVhazsKIAljYXNlIEZVVEVYX0ZEOgogCQkvKiBub24temVybyB2YWwgbWVhbnMgRl9TRVRPV04oZ2V0cGlkKCkpICYgRl9TRVRTSUcodmFsKSAqLwogCQlyZXQgPSBmdXRleF9mZCh1YWRkciwgdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9SRVFVRVVFOgotCQlyZXQgPSBmdXRleF9yZXF1ZXVlKHVhZGRyLCB1YWRkcjIsIHZhbCwgdmFsMiwgTlVMTCk7CisJCXJldCA9IGZ1dGV4X3JlcXVldWUodWFkZHIsIGZzaGFyZWQsIHVhZGRyMiwgdmFsLCB2YWwyLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9DTVBfUkVRVUVVRToKLQkJcmV0ID0gZnV0ZXhfcmVxdWV1ZSh1YWRkciwgdWFkZHIyLCB2YWwsIHZhbDIsICZ2YWwzKTsKKwkJcmV0ID0gZnV0ZXhfcmVxdWV1ZSh1YWRkciwgZnNoYXJlZCwgdWFkZHIyLCB2YWwsIHZhbDIsICZ2YWwzKTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9XQUtFX09QOgotCQlyZXQgPSBmdXRleF93YWtlX29wKHVhZGRyLCB1YWRkcjIsIHZhbCwgdmFsMiwgdmFsMyk7CisJCXJldCA9IGZ1dGV4X3dha2Vfb3AodWFkZHIsIGZzaGFyZWQsIHVhZGRyMiwgdmFsLCB2YWwyLCB2YWwzKTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9MT0NLX1BJOgotCQlyZXQgPSBmdXRleF9sb2NrX3BpKHVhZGRyLCB2YWwsIHRpbWVvdXQsIHZhbDIsIDApOworCQlyZXQgPSBmdXRleF9sb2NrX3BpKHVhZGRyLCBmc2hhcmVkLCB2YWwsIHRpbWVvdXQsIDApOwogCQlicmVhazsKIAljYXNlIEZVVEVYX1VOTE9DS19QSToKLQkJcmV0ID0gZnV0ZXhfdW5sb2NrX3BpKHVhZGRyKTsKKwkJcmV0ID0gZnV0ZXhfdW5sb2NrX3BpKHVhZGRyLCBmc2hhcmVkKTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9UUllMT0NLX1BJOgotCQlyZXQgPSBmdXRleF9sb2NrX3BpKHVhZGRyLCAwLCB0aW1lb3V0LCB2YWwyLCAxKTsKKwkJcmV0ID0gZnV0ZXhfbG9ja19waSh1YWRkciwgZnNoYXJlZCwgMCwgdGltZW91dCwgMSk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfQ01QX1JFUVVFVUVfUEk6CisJCXJldCA9IGZ1dGV4X3JlcXVldWVfcGkodWFkZHIsIGZzaGFyZWQsIHVhZGRyMiwgdmFsLCB2YWwyLCAmdmFsMyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9TWVM7CkBAIC0xODE5LDI5ICsyMzkyLDMwIEBACiAJCQkgIHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnV0aW1lLCB1MzIgX191c2VyICp1YWRkcjIsCiAJCQkgIHUzMiB2YWwzKQogewotCXN0cnVjdCB0aW1lc3BlYyB0OwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlrdGltZV90IHQsICp0cCA9IE5VTEw7CiAJdTMyIHZhbDIgPSAwOworCWludCBjbWQgPSBvcCAmIEZVVEVYX0NNRF9NQVNLOwogCi0JaWYgKHV0aW1lICYmIChvcCA9PSBGVVRFWF9XQUlUIHx8IG9wID09IEZVVEVYX0xPQ0tfUEkpKSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdCwgdXRpbWUsIHNpemVvZih0KSkgIT0gMCkKKwlpZiAodXRpbWUgJiYgKGNtZCA9PSBGVVRFWF9XQUlUIHx8IGNtZCA9PSBGVVRFWF9MT0NLX1BJKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJnRzLCB1dGltZSwgc2l6ZW9mKHRzKSkgIT0gMCkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoIXRpbWVzcGVjX3ZhbGlkKCZ0KSkKKwkJaWYgKCF0aW1lc3BlY192YWxpZCgmdHMpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChvcCA9PSBGVVRFWF9XQUlUKQotCQkJdGltZW91dCA9IHRpbWVzcGVjX3RvX2ppZmZpZXMoJnQpICsgMTsKLQkJZWxzZSB7Ci0JCQl0aW1lb3V0ID0gdC50dl9zZWM7Ci0JCQl2YWwyID0gdC50dl9uc2VjOwotCQl9CisKKwkJdCA9IHRpbWVzcGVjX3RvX2t0aW1lKHRzKTsKKwkJaWYgKGNtZCA9PSBGVVRFWF9XQUlUKQorCQkJdCA9IGt0aW1lX2FkZChrdGltZV9nZXQoKSwgdCk7CisJCXRwID0gJnQ7CiAJfQogCS8qCi0JICogcmVxdWV1ZSBwYXJhbWV0ZXIgaW4gJ3V0aW1lJyBpZiBvcCA9PSBGVVRFWF9SRVFVRVVFLgorCSAqIHJlcXVldWUgcGFyYW1ldGVyIGluICd1dGltZScgaWYgY21kID09IEZVVEVYX1JFUVVFVUUuCiAJICovCi0JaWYgKG9wID09IEZVVEVYX1JFUVVFVUUgfHwgb3AgPT0gRlVURVhfQ01QX1JFUVVFVUUpCisJaWYgKGNtZCA9PSBGVVRFWF9SRVFVRVVFIHx8IGNtZCA9PSBGVVRFWF9DTVBfUkVRVUVVRQorCSAgICB8fCBjbWQgPT0gRlVURVhfQ01QX1JFUVVFVUVfUEkpCiAJCXZhbDIgPSAodTMyKSAodW5zaWduZWQgbG9uZykgdXRpbWU7CiAKLQlyZXR1cm4gZG9fZnV0ZXgodWFkZHIsIG9wLCB2YWwsIHRpbWVvdXQsIHVhZGRyMiwgdmFsMiwgdmFsMyk7CisJcmV0dXJuIGRvX2Z1dGV4KHVhZGRyLCBvcCwgdmFsLCB0cCwgdWFkZHIyLCB2YWwyLCB2YWwzKTsKIH0KIAogc3RhdGljIGludCBmdXRleGZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKQEAgLTE4NzEsNyArMjQ0NSw3IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZnV0ZXhfcXVldWVzKTsgaSsrKSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZmdXRleF9xdWV1ZXNbaV0uY2hhaW4pOworCQlwbGlzdF9oZWFkX2luaXQoJmZ1dGV4X3F1ZXVlc1tpXS5jaGFpbiwgJmZ1dGV4X3F1ZXVlc1tpXS5sb2NrKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmZ1dGV4X3F1ZXVlc1tpXS5sb2NrKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXhfY29tcGF0LmMgYi9rZXJuZWwvZnV0ZXhfY29tcGF0LmMKaW5kZXggNTBmMjRlZS4uMjc0Nzg5NCAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4X2NvbXBhdC5jCisrKyBiL2tlcm5lbC9mdXRleF9jb21wYXQuYwpAQCAtMTQxLDI0ICsxNDEsMjUgQEAKIAkJc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKnV0aW1lLCB1MzIgX191c2VyICp1YWRkcjIsCiAJCXUzMiB2YWwzKQogewotCXN0cnVjdCB0aW1lc3BlYyB0OwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlrdGltZV90IHQsICp0cCA9IE5VTEw7CiAJaW50IHZhbDIgPSAwOworCWludCBjbWQgPSBvcCAmIEZVVEVYX0NNRF9NQVNLOwogCi0JaWYgKHV0aW1lICYmIChvcCA9PSBGVVRFWF9XQUlUIHx8IG9wID09IEZVVEVYX0xPQ0tfUEkpKSB7Ci0JCWlmIChnZXRfY29tcGF0X3RpbWVzcGVjKCZ0LCB1dGltZSkpCisJaWYgKHV0aW1lICYmIChjbWQgPT0gRlVURVhfV0FJVCB8fCBjbWQgPT0gRlVURVhfTE9DS19QSSkpIHsKKwkJaWYgKGdldF9jb21wYXRfdGltZXNwZWMoJnRzLCB1dGltZSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKCF0aW1lc3BlY192YWxpZCgmdCkpCisJCWlmICghdGltZXNwZWNfdmFsaWQoJnRzKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAob3AgPT0gRlVURVhfV0FJVCkKLQkJCXRpbWVvdXQgPSB0aW1lc3BlY190b19qaWZmaWVzKCZ0KSArIDE7Ci0JCWVsc2UgewotCQkJdGltZW91dCA9IHQudHZfc2VjOwotCQkJdmFsMiA9IHQudHZfbnNlYzsKLQkJfQorCisJCXQgPSB0aW1lc3BlY190b19rdGltZSh0cyk7CisJCWlmIChjbWQgPT0gRlVURVhfV0FJVCkKKwkJCXQgPSBrdGltZV9hZGQoa3RpbWVfZ2V0KCksIHQpOworCQl0cCA9ICZ0OwogCX0KLQlpZiAob3AgPT0gRlVURVhfUkVRVUVVRSB8fCBvcCA9PSBGVVRFWF9DTVBfUkVRVUVVRSkKKwlpZiAoY21kID09IEZVVEVYX1JFUVVFVUUgfHwgY21kID09IEZVVEVYX0NNUF9SRVFVRVVFCisJICAgIHx8IGNtZCA9PSBGVVRFWF9DTVBfUkVRVUVVRV9QSSkKIAkJdmFsMiA9IChpbnQpICh1bnNpZ25lZCBsb25nKSB1dGltZTsKIAotCXJldHVybiBkb19mdXRleCh1YWRkciwgb3AsIHZhbCwgdGltZW91dCwgdWFkZHIyLCB2YWwyLCB2YWwzKTsKKwlyZXR1cm4gZG9fZnV0ZXgodWFkZHIsIG9wLCB2YWwsIHRwLCB1YWRkcjIsIHZhbDIsIHZhbDMpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2hydGltZXIuYyBiL2tlcm5lbC9ocnRpbWVyLmMKaW5kZXggMWIzMDMzMS4uMjNjMDNmNCAxMDA2NDQKLS0tIGEva2VybmVsL2hydGltZXIuYworKysgYi9rZXJuZWwvaHJ0aW1lci5jCkBAIC02NjksNiArNjY5LDcgQEAKIAogCXJldHVybiBvcnVuOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9mb3J3YXJkKTsKIAogLyoKICAqIGVucXVldWVfaHJ0aW1lciAtIGludGVybmFsIGZ1bmN0aW9uIHRvIChyZSlzdGFydCBhIHRpbWVyCkBAIC0xNDEwLDExICsxNDExLDEzIEBACiAJc3dpdGNoIChhY3Rpb24pIHsKIAogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CiAJCWluaXRfaHJ0aW1lcnNfY3B1KGNwdSk7CiAJCWJyZWFrOwogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJY2FzZSBDUFVfREVBRDoKKwljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAkJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQ1BVX0RFQUQsICZjcHUpOwogCQltaWdyYXRlX2hydGltZXJzKGNwdSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9oYW5kbGUuYyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKaW5kZXggYWZmMWYwZi4uZTM5MWNiYiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9oYW5kbGUuYworKysgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBoYW5kbGVfYmFkX2lycSAtIGhhbmRsZSBzcHVyaW91cyBhbmQgdW5oYW5kbGVkIGlycXMKICAqIEBpcnE6ICAgICAgIHRoZSBpbnRlcnJ1cHQgbnVtYmVyCiAgKiBAZGVzYzogICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgaW50ZXJydXB0Ci0gKiBAcmVnczogICAgICBwb2ludGVyIHRvIGEgcmVnaXN0ZXIgc3RydWN0dXJlCiAgKgogICogSGFuZGxlcyBzcHVyaW91cyBhbmQgdW5oYW5kbGVkIElSUSdzLiBJdCBhbHNvIHByaW50cyBhIGRlYnVnbWVzc2FnZS4KICAqLwpAQCAtNDgsNyArNDcsNyBAQAogICoKICAqIENvbnRyb2xsZXIgbWFwcGluZ3MgZm9yIGFsbCBpbnRlcnJ1cHQgc291cmNlczoKICAqLwotc3RydWN0IGlycV9kZXNjIGlycV9kZXNjW05SX0lSUVNdIF9fY2FjaGVsaW5lX2FsaWduZWQgPSB7CitzdHJ1Y3QgaXJxX2Rlc2MgaXJxX2Rlc2NbTlJfSVJRU10gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgPSB7CiAJWzAgLi4uIE5SX0lSUVMtMV0gPSB7CiAJCS5zdGF0dXMgPSBJUlFfRElTQUJMRUQsCiAJCS5jaGlwID0gJm5vX2lycV9jaGlwLApAQCAtMTgwLDYgKzE3OSw4IEBACiAJCWlmIChkZXNjLT5jaGlwLT5hY2spCiAJCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKIAkJYWN0aW9uX3JldCA9IGhhbmRsZV9JUlFfZXZlbnQoaXJxLCBkZXNjLT5hY3Rpb24pOworCQlpZiAoIW5vaXJxZGVidWcpCisJCQlub3RlX2ludGVycnVwdChpcnEsIGRlc2MsIGFjdGlvbl9yZXQpOwogCQlkZXNjLT5jaGlwLT5lbmQoaXJxKTsKIAkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggNTU5N2MxNS4uMjAzYTUxOCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9tYW5hZ2UuYworKysgYi9rZXJuZWwvaXJxL21hbmFnZS5jCkBAIC0zMTcsMTAgKzMxNyw3IEBACiAJfQogCiAJKnAgPSBuZXc7Ci0jaWYgZGVmaW5lZChDT05GSUdfSVJRX1BFUl9DUFUpCi0JaWYgKG5ldy0+ZmxhZ3MgJiBJUlFGX1BFUkNQVSkKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9QRVJfQ1BVOwotI2VuZGlmCisKIAkvKiBFeGNsdWRlIElSUSBmcm9tIGJhbGFuY2luZyAqLwogCWlmIChuZXctPmZsYWdzICYgSVJRRl9OT0JBTEFOQ0lORykKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9OT19CQUxBTkNJTkc7CkBAIC0zMjgsNiArMzI1LDExIEBACiAJaWYgKCFzaGFyZWQpIHsKIAkJaXJxX2NoaXBfc2V0X2RlZmF1bHRzKGRlc2MtPmNoaXApOwogCisjaWYgZGVmaW5lZChDT05GSUdfSVJRX1BFUl9DUFUpCisJCWlmIChuZXctPmZsYWdzICYgSVJRRl9QRVJDUFUpCisJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1BFUl9DUFU7CisjZW5kaWYKKwogCQkvKiBTZXR1cCB0aGUgdHlwZSAobGV2ZWwsIGVkZ2UgcG9sYXJpdHkpIGlmIGNvbmZpZ3VyZWQ6ICovCiAJCWlmIChuZXctPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spIHsKIAkJCWlmIChkZXNjLT5jaGlwICYmIGRlc2MtPmNoaXAtPnNldF90eXBlKQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9wcm9jLmMgYi9rZXJuZWwvaXJxL3Byb2MuYwppbmRleCAyZGI5MWViLi5iNGYxNjc0IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3Byb2MuYworKysgYi9rZXJuZWwvaXJxL3Byb2MuYwpAQCAtMjcsNiArMjcsMTAgQEAKIAlyZXR1cm4gbGVuOwogfQogCisjaWZuZGVmIGlzX2FmZmluaXR5X21hc2tfdmFsaWQKKyNkZWZpbmUgaXNfYWZmaW5pdHlfbWFza192YWxpZCh2YWwpIDEKKyNlbmRpZgorCiBpbnQgbm9faXJxX2FmZmluaXR5Owogc3RhdGljIGludCBpcnFfYWZmaW5pdHlfd3JpdGVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCQkgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQpAQCAtNDIsNiArNDYsOSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwlpZiAoIWlzX2FmZmluaXR5X21hc2tfdmFsaWQobmV3X3ZhbHVlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKgogCSAqIERvIG5vdCBhbGxvdyBkaXNhYmxpbmcgSVJRcyBjb21wbGV0ZWx5IC0gaXQncyBhIHRvbyBlYXN5CiAJICogd2F5IHRvIG1ha2UgdGhlIHN5c3RlbSB1bnVzYWJsZSBhY2NpZGVudGFsbHkgOi0pIEF0IGxlYXN0CkBAIC02NiwxMiArNzMsMTkgQEAKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMTsKIAotCWZvciAoYWN0aW9uID0gZGVzYy0+YWN0aW9uIDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGFjdGlvbiA9IGRlc2MtPmFjdGlvbiA7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KSB7CiAJCWlmICgoYWN0aW9uICE9IG5ld19hY3Rpb24pICYmIGFjdGlvbi0+bmFtZSAmJgotCQkJCSFzdHJjbXAobmV3X2FjdGlvbi0+bmFtZSwgYWN0aW9uLT5uYW1lKSkKLQkJCXJldHVybiAwOwotCXJldHVybiAxOworCQkJCSFzdHJjbXAobmV3X2FjdGlvbi0+bmFtZSwgYWN0aW9uLT5uYW1lKSkgeworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIHJlZ2lzdGVyX2hhbmRsZXJfcHJvYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKaW5kZXggOWQ4Yzc5Yi4uYmQ5ZTI3MiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9zcHVyaW91cy5jCisrKyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwpAQCAtMTM1LDYgKzEzNSwzOSBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSBpbnQgdHJ5X21pc3JvdXRlZF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBpcnFyZXR1cm5fdCBhY3Rpb25fcmV0KQoreworCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKworCWlmICghaXJxZml4dXApCisJCXJldHVybiAwOworCisJLyogV2UgZGlkbid0IGFjdHVhbGx5IGhhbmRsZSB0aGUgSVJRIC0gc2VlIGlmIGl0IHdhcyBtaXNyb3V0ZWQ/ICovCisJaWYgKGFjdGlvbl9yZXQgPT0gSVJRX05PTkUpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBCdXQgZm9yICdpcnFmaXh1cCA9PSAyJyB3ZSBhbHNvIGRvIGl0IGZvciBoYW5kbGVkIGludGVycnVwdHMgaWYKKwkgKiB0aGV5IGFyZSBtYXJrZWQgYXMgSVJRRl9JUlFQT0xMIChvciBmb3IgaXJxIHplcm8sIHdoaWNoIGlzIHRoZQorCSAqIHRyYWRpdGlvbmFsIFBDIHRpbWVyIGludGVycnVwdC4uIExlZ2FjeSkKKwkgKi8KKwlpZiAoaXJxZml4dXAgPCAyKQorCQlyZXR1cm4gMDsKKworCWlmICghaXJxKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogU2luY2Ugd2UgZG9uJ3QgZ2V0IHRoZSBkZXNjcmlwdG9yIGxvY2ssICJhY3Rpb24iIGNhbgorCSAqIGNoYW5nZSB1bmRlciB1cy4gIFdlIGRvbid0IHJlYWxseSBjYXJlLCBidXQgd2UgZG9uJ3QKKwkgKiB3YW50IHRvIGZvbGxvdyBhIE5VTEwgcG9pbnRlci4gU28gdGVsbCB0aGUgY29tcGlsZXIgdG8KKwkgKiBqdXN0IGxvYWQgaXQgb25jZSBieSB1c2luZyBhIGJhcnJpZXIuCisJICovCisJYWN0aW9uID0gZGVzYy0+YWN0aW9uOworCWJhcnJpZXIoKTsKKwlyZXR1cm4gYWN0aW9uICYmIChhY3Rpb24tPmZsYWdzICYgSVJRRl9JUlFQT0xMKTsKK30KKwogdm9pZCBub3RlX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCiAJCSAgICBpcnFyZXR1cm5fdCBhY3Rpb25fcmV0KQogewpAQCAtMTQ0LDEzICsxNzcsMTAgQEAKIAkJCXJlcG9ydF9iYWRfaXJxKGlycSwgZGVzYywgYWN0aW9uX3JldCk7CiAJfQogCi0JaWYgKHVubGlrZWx5KGlycWZpeHVwKSkgewotCQkvKiBEb24ndCBwdW5pc2ggd29ya2luZyBjb21wdXRlcnMgKi8KLQkJaWYgKChpcnFmaXh1cCA9PSAyICYmIGlycSA9PSAwKSB8fCBhY3Rpb25fcmV0ID09IElSUV9OT05FKSB7Ci0JCQlpbnQgb2sgPSBtaXNyb3V0ZWRfaXJxKGlycSk7Ci0JCQlpZiAoYWN0aW9uX3JldCA9PSBJUlFfTk9ORSkKLQkJCQlkZXNjLT5pcnFzX3VuaGFuZGxlZCAtPSBvazsKLQkJfQorCWlmICh1bmxpa2VseSh0cnlfbWlzcm91dGVkX2lycShpcnEsIGRlc2MsIGFjdGlvbl9yZXQpKSkgeworCQlpbnQgb2sgPSBtaXNyb3V0ZWRfaXJxKGlycSk7CisJCWlmIChhY3Rpb25fcmV0ID09IElSUV9OT05FKQorCQkJZGVzYy0+aXJxc191bmhhbmRsZWQgLT0gb2s7CiAJfQogCiAJZGVzYy0+aXJxX2NvdW50Kys7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXRpbWVyLmMgYi9rZXJuZWwvaXRpbWVyLmMKaW5kZXggMzA3YzZhNi4uMzIwNWU4ZSAxMDA2NDQKLS0tIGEva2VybmVsL2l0aW1lci5jCisrKyBiL2tlcm5lbC9pdGltZXIuYwpAQCAtNyw3ICs3LDYgQEAKIC8qIFRoZXNlIGFyZSBhbGwgdGhlIGZ1bmN0aW9ucyBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IGl0aW1lcnMgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KQEAgLTEzOSw1OSArMTM4LDExIEBACiB9CiAKIC8qCi0gKiBXZSBkbyBub3QgY2FyZSBhYm91dCBjb3JyZWN0bmVzcy4gV2UganVzdCBzYW5pdGl6ZSB0aGUgdmFsdWVzIHNvCi0gKiB0aGUga3RpbWVfdCBvcGVyYXRpb25zIHdoaWNoIGV4cGVjdCBub3JtYWxpemVkIHZhbHVlcyBkbyBub3QKLSAqIGJyZWFrLiBUaGlzIGNvbnZlcnRzIG5lZ2F0aXZlIHZhbHVlcyB0byBsb25nIHRpbWVvdXRzIHNpbWlsYXIgdG8KLSAqIHRoZSBjb2RlIGluIGtlcm5lbCB2ZXJzaW9ucyA8IDIuNi4xNgotICoKLSAqIFByaW50IGEgbGltaXRlZCBudW1iZXIgb2Ygd2FybmluZyBtZXNzYWdlcyB3aGVuIGFuIGludmFsaWQgdGltZXZhbAotICogaXMgZGV0ZWN0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGZpeHVwX3RpbWV2YWwoc3RydWN0IHRpbWV2YWwgKnR2LCBpbnQgaW50ZXJ2YWwpCi17Ci0Jc3RhdGljIGludCB3YXJubGltaXQgPSAxMDsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCWlmICh3YXJubGltaXQgPiAwKSB7Ci0JCXdhcm5saW1pdC0tOwotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAic2V0aXRpbWVyOiAlcyAocGlkID0gJWQpIHByb3ZpZGVkICIKLQkJICAgICAgICJpbnZhbGlkIHRpbWV2YWwgJXM6IHR2X3NlYyA9ICVsZCB0dl91c2VjID0gJWxkXG4iLAotCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAotCQkgICAgICAgaW50ZXJ2YWwgPyAiaXRfaW50ZXJ2YWwiIDogIml0X3ZhbHVlIiwKLQkJICAgICAgIHR2LT50dl9zZWMsIChsb25nKSB0di0+dHZfdXNlYyk7Ci0JfQotCi0JdG1wID0gdHYtPnR2X3VzZWM7Ci0JaWYgKHRtcCA+PSBVU0VDX1BFUl9TRUMpIHsKLQkJdHYtPnR2X3VzZWMgPSB0bXAgJSBVU0VDX1BFUl9TRUM7Ci0JCXR2LT50dl9zZWMgKz0gdG1wIC8gVVNFQ19QRVJfU0VDOwotCX0KLQotCXRtcCA9IHR2LT50dl9zZWM7Ci0JaWYgKHRtcCA+IExPTkdfTUFYKQotCQl0di0+dHZfc2VjID0gTE9OR19NQVg7Ci19Ci0KLS8qCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRpbWV2YWwgaXMgaW4gY2Fub25pY2FsIGZvcm0KICAqLwogI2RlZmluZSB0aW1ldmFsX3ZhbGlkKHQpIFwKIAkoKCh0KS0+dHZfc2VjID49IDApICYmICgoKHVuc2lnbmVkIGxvbmcpICh0KS0+dHZfdXNlYykgPCBVU0VDX1BFUl9TRUMpKQogCi0vKgotICogQ2hlY2sgZm9yIGludmFsaWQgdGltZXZhbHMsIHNhbml0aXplIHRoZW0gYW5kIHByaW50IGEgbGltaXRlZAotICogbnVtYmVyIG9mIHdhcm5pbmdzLgotICovCi1zdGF0aWMgdm9pZCBjaGVja19pdGltZXJ2YWwoc3RydWN0IGl0aW1lcnZhbCAqdmFsdWUpIHsKLQotCWlmICh1bmxpa2VseSghdGltZXZhbF92YWxpZCgmdmFsdWUtPml0X3ZhbHVlKSkpCi0JCWZpeHVwX3RpbWV2YWwoJnZhbHVlLT5pdF92YWx1ZSwgMCk7Ci0KLQlpZiAodW5saWtlbHkoIXRpbWV2YWxfdmFsaWQoJnZhbHVlLT5pdF9pbnRlcnZhbCkpKQotCQlmaXh1cF90aW1ldmFsKCZ2YWx1ZS0+aXRfaW50ZXJ2YWwsIDEpOwotfQotCiBpbnQgZG9fc2V0aXRpbWVyKGludCB3aGljaCwgc3RydWN0IGl0aW1lcnZhbCAqdmFsdWUsIHN0cnVjdCBpdGltZXJ2YWwgKm92YWx1ZSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CkBAIC0yMDEsMTUgKzE1MiwxMCBAQAogCiAJLyoKIAkgKiBWYWxpZGF0ZSB0aGUgdGltZXZhbHMgaW4gdmFsdWUuCi0JICoKLQkgKiBOb3RlOiBBbHRob3VnaCB0aGUgc3BlYyByZXF1aXJlcyB0aGF0IGludmFsaWQgdmFsdWVzIHNoYWxsCi0JICogcmV0dXJuIC1FSU5WQUwsIHdlIGp1c3QgZml4dXAgdGhlIHZhbHVlIGFuZCBwcmludCBhIGxpbWl0ZWQKLQkgKiBudW1iZXIgb2Ygd2FybmluZ3MgaW4gb3JkZXIgbm90IHRvIGJyZWFrIHVzZXJzIG9mIHRoaXMKLQkgKiBoaXN0b3JpY2FsIG1pc2ZlYXR1cmUuCi0JICoKLQkgKiBTY2hlZHVsZWQgZm9yIHJlcGxhY2VtZW50IGluIE1hcmNoIDIwMDcKIAkgKi8KLQljaGVja19pdGltZXJ2YWwodmFsdWUpOworCWlmICghdGltZXZhbF92YWxpZCgmdmFsdWUtPml0X3ZhbHVlKSB8fAorCSAgICAhdGltZXZhbF92YWxpZCgmdmFsdWUtPml0X2ludGVydmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKHdoaWNoKSB7CiAJY2FzZSBJVElNRVJfUkVBTDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9rYWxsc3ltcy5jIGIva2VybmVsL2thbGxzeW1zLmMKaW5kZXggNWEwZGU4NC4uZmVkNTQ0MSAxMDA2NDQKLS0tIGEva2VybmVsL2thbGxzeW1zLmMKKysrIGIva2VybmVsL2thbGxzeW1zLmMKQEAgLTIxNCw4ICsyMTQsMTAgQEAKIAkJCXN5bWJvbF9lbmQgPSAodW5zaWduZWQgbG9uZylfZXRleHQ7CiAJfQogCi0JKnN5bWJvbHNpemUgPSBzeW1ib2xfZW5kIC0gc3ltYm9sX3N0YXJ0OwotCSpvZmZzZXQgPSBhZGRyIC0gc3ltYm9sX3N0YXJ0OworCWlmIChzeW1ib2xzaXplKQorCQkqc3ltYm9sc2l6ZSA9IHN5bWJvbF9lbmQgLSBzeW1ib2xfc3RhcnQ7CisJaWYgKG9mZnNldCkKKwkJKm9mZnNldCA9IGFkZHIgLSBzeW1ib2xfc3RhcnQ7CiAKIAlyZXR1cm4gbG93OwogfQpAQCAtMjU1LDcgKzI1Nyw4IEBACiAJCXBvcyA9IGdldF9zeW1ib2xfcG9zKGFkZHIsIHN5bWJvbHNpemUsIG9mZnNldCk7CiAJCS8qIEdyYWIgbmFtZSAqLwogCQlrYWxsc3ltc19leHBhbmRfc3ltYm9sKGdldF9zeW1ib2xfb2Zmc2V0KHBvcyksIG5hbWVidWYpOwotCQkqbW9kbmFtZSA9IE5VTEw7CisJCWlmIChtb2RuYW1lKQorCQkJKm1vZG5hbWUgPSBOVUxMOwogCQlyZXR1cm4gbmFtZWJ1ZjsKIAl9CiAKQEAgLTI2Nyw2ICsyNzAsNDIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAoraW50IGxvb2t1cF9zeW1ib2xfbmFtZSh1bnNpZ25lZCBsb25nIGFkZHIsIGNoYXIgKnN5bW5hbWUpCit7CisJc3ltbmFtZVswXSA9ICdcMCc7CisJc3ltbmFtZVtLU1lNX05BTUVfTEVOXSA9ICdcMCc7CisKKwlpZiAoaXNfa3N5bV9hZGRyKGFkZHIpKSB7CisJCXVuc2lnbmVkIGxvbmcgcG9zOworCisJCXBvcyA9IGdldF9zeW1ib2xfcG9zKGFkZHIsIE5VTEwsIE5VTEwpOworCQkvKiBHcmFiIG5hbWUgKi8KKwkJa2FsbHN5bXNfZXhwYW5kX3N5bWJvbChnZXRfc3ltYm9sX29mZnNldChwb3MpLCBzeW1uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIHNlZSBpZiBpdCdzIGluIGEgbW9kdWxlICovCisJcmV0dXJuIGxvb2t1cF9tb2R1bGVfc3ltYm9sX25hbWUoYWRkciwgc3ltbmFtZSk7Cit9CisKK2ludCBsb29rdXBfc3ltYm9sX2F0dHJzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCXVuc2lnbmVkIGxvbmcgKm9mZnNldCwgY2hhciAqbW9kbmFtZSwgY2hhciAqbmFtZSkKK3sKKwluYW1lWzBdID0gJ1wwJzsKKwluYW1lW0tTWU1fTkFNRV9MRU5dID0gJ1wwJzsKKworCWlmIChpc19rc3ltX2FkZHIoYWRkcikpIHsKKwkJdW5zaWduZWQgbG9uZyBwb3M7CisKKwkJcG9zID0gZ2V0X3N5bWJvbF9wb3MoYWRkciwgc2l6ZSwgb2Zmc2V0KTsKKwkJLyogR3JhYiBuYW1lICovCisJCWthbGxzeW1zX2V4cGFuZF9zeW1ib2woZ2V0X3N5bWJvbF9vZmZzZXQocG9zKSwgbmFtZSk7CisJCW1vZG5hbWVbMF0gPSAnXDAnOworCQlyZXR1cm4gMDsKKwl9CisJLyogc2VlIGlmIGl0J3MgaW4gYSBtb2R1bGUgKi8KKwlyZXR1cm4gbG9va3VwX21vZHVsZV9zeW1ib2xfYXR0cnMoYWRkciwgc2l6ZSwgb2Zmc2V0LCBtb2RuYW1lLCBuYW1lKTsKK30KKwogLyogTG9vayB1cCBhIGtlcm5lbCBzeW1ib2wgYW5kIHJldHVybiBpdCBpbiBhIHRleHQgYnVmZmVyLiAqLwogaW50IHNwcmludF9zeW1ib2woY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0zMDEsMjUgKzM0MCwyMCBAQAogc3RydWN0IGthbGxzeW1faXRlcgogewogCWxvZmZfdCBwb3M7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAl1bnNpZ25lZCBpbnQgbmFtZW9mZjsgLyogSWYgaXRlcmF0aW5nIGluIGNvcmUga2VybmVsIHN5bWJvbHMgKi8KIAljaGFyIHR5cGU7CiAJY2hhciBuYW1lW0tTWU1fTkFNRV9MRU4rMV07CisJY2hhciBtb2R1bGVfbmFtZVtNT0RVTEVfTkFNRV9MRU4gKyAxXTsKKwlpbnQgZXhwb3J0ZWQ7CiB9OwogCiBzdGF0aWMgaW50IGdldF9rc3ltYm9sX21vZChzdHJ1Y3Qga2FsbHN5bV9pdGVyICppdGVyKQogewotCWl0ZXItPm93bmVyID0gbW9kdWxlX2dldF9rYWxsc3ltKGl0ZXItPnBvcyAtIGthbGxzeW1zX251bV9zeW1zLAotCQkJCQkgJml0ZXItPnZhbHVlLCAmaXRlci0+dHlwZSwKLQkJCQkJIGl0ZXItPm5hbWUsIHNpemVvZihpdGVyLT5uYW1lKSk7Ci0JaWYgKGl0ZXItPm93bmVyID09IE5VTEwpCisJaWYgKG1vZHVsZV9nZXRfa2FsbHN5bShpdGVyLT5wb3MgLSBrYWxsc3ltc19udW1fc3ltcywgJml0ZXItPnZhbHVlLAorCQkJCSZpdGVyLT50eXBlLCBpdGVyLT5uYW1lLCBpdGVyLT5tb2R1bGVfbmFtZSwKKwkJCQkmaXRlci0+ZXhwb3J0ZWQpIDwgMCkKIAkJcmV0dXJuIDA7Ci0KLQkvKiBMYWJlbCBpdCAiZ2xvYmFsIiBpZiBpdCBpcyBleHBvcnRlZCwgImxvY2FsIiBpZiBub3QgZXhwb3J0ZWQuICovCi0JaXRlci0+dHlwZSA9IGlzX2V4cG9ydGVkKGl0ZXItPm5hbWUsIGl0ZXItPm93bmVyKQotCQk/IHRvdXBwZXIoaXRlci0+dHlwZSkgOiB0b2xvd2VyKGl0ZXItPnR5cGUpOwotCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTMyOCw3ICszNjIsNyBAQAogewogCXVuc2lnbmVkIG9mZiA9IGl0ZXItPm5hbWVvZmY7CiAKLQlpdGVyLT5vd25lciA9IE5VTEw7CisJaXRlci0+bW9kdWxlX25hbWVbMF0gPSAnXDAnOwogCWl0ZXItPnZhbHVlID0ga2FsbHN5bXNfYWRkcmVzc2VzW2l0ZXItPnBvc107CiAKIAlpdGVyLT50eXBlID0ga2FsbHN5bXNfZ2V0X3N5bWJvbF90eXBlKG9mZik7CkBAIC0zOTIsMTIgKzQyNiwxNyBAQAogCWlmICghaXRlci0+bmFtZVswXSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaXRlci0+b3duZXIpCisJaWYgKGl0ZXItPm1vZHVsZV9uYW1lWzBdKSB7CisJCWNoYXIgdHlwZTsKKworCQkvKiBMYWJlbCBpdCAiZ2xvYmFsIiBpZiBpdCBpcyBleHBvcnRlZCwKKwkJICogImxvY2FsIiBpZiBub3QgZXhwb3J0ZWQuICovCisJCXR5cGUgPSBpdGVyLT5leHBvcnRlZCA/IHRvdXBwZXIoaXRlci0+dHlwZSkgOgorCQkJCQl0b2xvd2VyKGl0ZXItPnR5cGUpOwogCQlzZXFfcHJpbnRmKG0sICIlMCpseCAlYyAlc1x0WyVzXVxuIiwKIAkJCSAgIChpbnQpKDIqc2l6ZW9mKHZvaWQqKSksCi0JCQkgICBpdGVyLT52YWx1ZSwgaXRlci0+dHlwZSwgaXRlci0+bmFtZSwKLQkJCSAgIG1vZHVsZV9uYW1lKGl0ZXItPm93bmVyKSk7Ci0JZWxzZQorCQkJICAgaXRlci0+dmFsdWUsIHR5cGUsIGl0ZXItPm5hbWUsIGl0ZXItPm1vZHVsZV9uYW1lKTsKKwl9IGVsc2UKIAkJc2VxX3ByaW50ZihtLCAiJTAqbHggJWMgJXNcbiIsCiAJCQkgICAoaW50KSgyKnNpemVvZih2b2lkKikpLAogCQkJICAgaXRlci0+dmFsdWUsIGl0ZXItPnR5cGUsIGl0ZXItPm5hbWUpOwpAQCAtNDMyLDE4ICs0NzEsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGthbGxzeW1zX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlrZnJlZShtLT5wcml2YXRlKTsKLQlyZXR1cm4gc2VxX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrYWxsc3ltc19vcGVyYXRpb25zID0gewogCS5vcGVuID0ga2FsbHN5bXNfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBrYWxsc3ltc19yZWxlYXNlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGthbGxzeW1zX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlYy5jIGIva2VybmVsL2tleGVjLmMKaW5kZXggMmE1OWM4YS4uMjVkYjE0YiAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjLmMKKysrIGIva2VybmVsL2tleGVjLmMKQEAgLTExMTgsOCArMTExOCw4IEBACiAJbWVtc2V0KCZwcnN0YXR1cywgMCwgc2l6ZW9mKHByc3RhdHVzKSk7CiAJcHJzdGF0dXMucHJfcGlkID0gY3VycmVudC0+cGlkOwogCWVsZl9jb3JlX2NvcHlfcmVncygmcHJzdGF0dXMucHJfcmVnLCByZWdzKTsKLQlidWYgPSBhcHBlbmRfZWxmX25vdGUoYnVmLCAiQ09SRSIsIE5UX1BSU1RBVFVTLCAmcHJzdGF0dXMsCi0JCQkJc2l6ZW9mKHByc3RhdHVzKSk7CisJYnVmID0gYXBwZW5kX2VsZl9ub3RlKGJ1ZiwgS0VYRUNfQ09SRV9OT1RFX05BTUUsIE5UX1BSU1RBVFVTLAorCQkgICAgICAJICAgICAgJnByc3RhdHVzLCBzaXplb2YocHJzdGF0dXMpKTsKIAlmaW5hbF9ub3RlKGJ1Zik7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IDc5NjI3NjEuLjRkMzJlYjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21udF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CkBAIC0xMzYsNyArMTM1LDYgQEAKIAogCS8qIFVuYmxvY2sgYWxsIHNpZ25hbHMgYW5kIHNldCB0aGUgc2Vzc2lvbiBrZXlyaW5nLiAqLwogCW5ld19zZXNzaW9uID0ga2V5X2dldChzdWJfaW5mby0+cmluZyk7Ci0JZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlvbGRfc2Vzc2lvbiA9IF9faW5zdGFsbF9zZXNzaW9uX2tleXJpbmcoY3VycmVudCwgbmV3X3Nlc3Npb24pOwogCWZsdXNoX3NpZ25hbF9oYW5kbGVycyhjdXJyZW50LCAxKTsKQEAgLTE2Niw2ICsxNjQsMTIgQEAKIAkvKiBXZSBjYW4gcnVuIGFueXdoZXJlLCB1bmxpa2Ugb3VyIHBhcmVudCBrZXZlbnRkKCkuICovCiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBDUFVfTUFTS19BTEwpOwogCisJLyoKKwkgKiBPdXIgcGFyZW50IGlzIGtldmVudGQsIHdoaWNoIHJ1bnMgd2l0aCBlbGV2YXRlZCBzY2hlZHVsaW5nIHByaW9yaXR5LgorCSAqIEF2b2lkIHByb3BhZ2F0aW5nIHRoYXQgaW50byB0aGUgdXNlcnNwYWNlIGNoaWxkLgorCSAqLworCXNldF91c2VyX25pY2UoY3VycmVudCwgMCk7CisKIAlyZXR2YWwgPSAtRVBFUk07CiAJaWYgKGN1cnJlbnQtPmZzLT5yb290KQogCQlyZXR2YWwgPSBrZXJuZWxfZXhlY3ZlKHN1Yl9pbmZvLT5wYXRoLApAQCAtMTgxLDE0ICsxODUsOSBAQAogewogCXN0cnVjdCBzdWJwcm9jZXNzX2luZm8gKnN1Yl9pbmZvID0gZGF0YTsKIAlwaWRfdCBwaWQ7Ci0Jc3RydWN0IGtfc2lnYWN0aW9uIHNhOwogCiAJLyogSW5zdGFsbCBhIGhhbmRsZXI6IGlmIFNJR0NMRCBpc24ndCBoYW5kbGVkIHN5c193YWl0NCB3b24ndAogCSAqIHBvcHVsYXRlIHRoZSBzdGF0dXMsIGJ1dCB3aWxsIHJldHVybiAtRUNISUxELiAqLwotCXNhLnNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOOwotCXNhLnNhLnNhX2ZsYWdzID0gMDsKLQlzaWdpbml0c2V0KCZzYS5zYS5zYV9tYXNrLCBzaWdtYXNrKFNJR0NITEQpKTsKLQlkb19zaWdhY3Rpb24oU0lHQ0hMRCwgJnNhLCBOVUxMKTsKIAlhbGxvd19zaWduYWwoU0lHQ0hMRCk7CiAKIAlwaWQgPSBrZXJuZWxfdGhyZWFkKF9fX19jYWxsX3VzZXJtb2RlaGVscGVyLCBzdWJfaW5mbywgU0lHQ0hMRCk7CmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBkMjVhOWFkLi45ZTQ3ZDhjIDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTM1LDE2ICszNSwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjZGVmaW5lIEtQUk9CRV9IQVNIX0JJVFMgNgogI2RlZmluZSBLUFJPQkVfVEFCTEVfU0laRSAoMSA8PCBLUFJPQkVfSEFTSF9CSVRTKQpAQCAtNjMsNiArNjYsOSBAQAogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGtyZXRwcm9iZV9pbnN0X3RhYmxlW0tQUk9CRV9UQUJMRV9TSVpFXTsKIHN0YXRpYyBhdG9taWNfdCBrcHJvYmVfY291bnQ7CiAKKy8qIE5PVEU6IGNoYW5nZSB0aGlzIHZhbHVlIG9ubHkgd2l0aCBrcHJvYmVfbXV0ZXggaGVsZCAqLworc3RhdGljIGJvb2wga3Byb2JlX2VuYWJsZWQ7CisKIERFRklORV9NVVRFWChrcHJvYmVfbXV0ZXgpOwkJLyogUHJvdGVjdHMga3Byb2JlX3RhYmxlICovCiBERUZJTkVfU1BJTkxPQ0soa3JldHByb2JlX2xvY2spOwkvKiBQcm90ZWN0cyBrcmV0cHJvYmVfaW5zdF90YWJsZSAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrcHJvYmUgKiwga3Byb2JlX2luc3RhbmNlKSA9IE5VTEw7CkBAIC0xMzIsOSArMTM4LDggQEAKIAlzdHJ1Y3Qga3Byb2JlX2luc25fcGFnZSAqa2lwOwogCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CiAKLSAgICAgIHJldHJ5OgotCWhsaXN0X2Zvcl9lYWNoKHBvcywgJmtwcm9iZV9pbnNuX3BhZ2VzKSB7Ci0JCWtpcCA9IGhsaXN0X2VudHJ5KHBvcywgc3RydWN0IGtwcm9iZV9pbnNuX3BhZ2UsIGhsaXN0KTsKKyByZXRyeToKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShraXAsIHBvcywgJmtwcm9iZV9pbnNuX3BhZ2VzLCBobGlzdCkgewogCQlpZiAoa2lwLT5udXNlZCA8IElOU05TX1BFUl9QQUdFKSB7CiAJCQlpbnQgaTsKIAkJCWZvciAoaSA9IDA7IGkgPCBJTlNOU19QRVJfUEFHRTsgaSsrKSB7CkBAIC0xNTUsOSArMTYwLDggQEAKIAl9CiAJLyogQWxsIG91dCBvZiBzcGFjZS4gIE5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgcGFnZS4gVXNlIHNsb3QgMC4gKi8KIAlraXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3Byb2JlX2luc25fcGFnZSksIEdGUF9LRVJORUwpOwotCWlmICgha2lwKSB7CisJaWYgKCFraXApCiAJCXJldHVybiBOVUxMOwotCX0KIAogCS8qCiAJICogVXNlIG1vZHVsZV9hbGxvYyBzbyB0aGlzIHBhZ2UgaXMgd2l0aGluICsvLSAyR0Igb2Ygd2hlcmUgdGhlCkBAIC0yMTMsOSArMjE3LDggQEAKIAlpZiAoY2hlY2tfc2FmZXR5KCkgIT0gMCkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlobGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgJmtwcm9iZV9pbnNuX3BhZ2VzKSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShraXAsIHBvcywgbmV4dCwgJmtwcm9iZV9pbnNuX3BhZ2VzLCBobGlzdCkgewogCQlpbnQgaTsKLQkJa2lwID0gaGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qga3Byb2JlX2luc25fcGFnZSwgaGxpc3QpOwogCQlpZiAoa2lwLT5uZ2FyYmFnZSA9PSAwKQogCQkJY29udGludWU7CiAJCWtpcC0+bmdhcmJhZ2UgPSAwOwkvKiB3ZSB3aWxsIGNvbGxlY3QgYWxsIGdhcmJhZ2VzICovCkBAIC0yMzQsOCArMjM3LDcgQEAKIAlzdHJ1Y3Qga3Byb2JlX2luc25fcGFnZSAqa2lwOwogCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CiAKLQlobGlzdF9mb3JfZWFjaChwb3MsICZrcHJvYmVfaW5zbl9wYWdlcykgewotCQlraXAgPSBobGlzdF9lbnRyeShwb3MsIHN0cnVjdCBrcHJvYmVfaW5zbl9wYWdlLCBobGlzdCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoa2lwLCBwb3MsICZrcHJvYmVfaW5zbl9wYWdlcywgaGxpc3QpIHsKIAkJaWYgKGtpcC0+aW5zbnMgPD0gc2xvdCAmJgogCQkgICAgc2xvdCA8IGtpcC0+aW5zbnMgKyAoSU5TTlNfUEVSX1BBR0UgKiBNQVhfSU5TTl9TSVpFKSkgewogCQkJaW50IGkgPSAoc2xvdCAtIGtpcC0+aW5zbnMpIC8gTUFYX0lOU05fU0laRTsKQEAgLTI0OCw5ICsyNTAsOSBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JaWYgKGRpcnR5ICYmICgrK2twcm9iZV9nYXJiYWdlX3Nsb3RzID4gSU5TTlNfUEVSX1BBR0UpKSB7CisKKwlpZiAoZGlydHkgJiYgKytrcHJvYmVfZ2FyYmFnZV9zbG90cyA+IElOU05TX1BFUl9QQUdFKQogCQljb2xsZWN0X2dhcmJhZ2Vfc2xvdHMoKTsKLQl9CiB9CiAjZW5kaWYKIApAQCAtMzE2LDcgKzMxOCw2IEBACiAJCQlyZXNldF9rcHJvYmVfaW5zdGFuY2UoKTsKIAkJfQogCX0KLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIGFnZ3JfZmF1bHRfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKQEAgLTM2Miw0NiArMzYzLDYgQEAKIH0KIAogLyogQ2FsbGVkIHdpdGgga3JldHByb2JlX2xvY2sgaGVsZCAqLwotc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSBfX2twcm9iZXMgKmdldF9mcmVlX3JwX2luc3Qoc3RydWN0IGtyZXRwcm9iZSAqcnApCi17Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkocmksIG5vZGUsICZycC0+ZnJlZV9pbnN0YW5jZXMsIHVmbGlzdCkKLQkJcmV0dXJuIHJpOwotCXJldHVybiBOVUxMOwotfQotCi0vKiBDYWxsZWQgd2l0aCBrcmV0cHJvYmVfbG9jayBoZWxkICovCi1zdGF0aWMgc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSBfX2twcm9iZXMgKmdldF91c2VkX3JwX2luc3Qoc3RydWN0IGtyZXRwcm9iZQotCQkJCQkJCSAgICAgICpycCkKLXsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShyaSwgbm9kZSwgJnJwLT51c2VkX2luc3RhbmNlcywgdWZsaXN0KQotCQlyZXR1cm4gcmk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIENhbGxlZCB3aXRoIGtyZXRwcm9iZV9sb2NrIGhlbGQgKi8KLXZvaWQgX19rcHJvYmVzIGFkZF9ycF9pbnN0KHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpKQotewotCS8qCi0JICogUmVtb3ZlIHJwIGluc3Qgb2ZmIHRoZSBmcmVlIGxpc3QgLQotCSAqIEFkZCBpdCBiYWNrIHdoZW4gcHJvYmVkIGZ1bmN0aW9uIHJldHVybnMKLQkgKi8KLQlobGlzdF9kZWwoJnJpLT51Zmxpc3QpOwotCi0JLyogQWRkIHJwIGluc3Qgb250byB0YWJsZSAqLwotCUlOSVRfSExJU1RfTk9ERSgmcmktPmhsaXN0KTsKLQlobGlzdF9hZGRfaGVhZCgmcmktPmhsaXN0LAotCQkJJmtyZXRwcm9iZV9pbnN0X3RhYmxlW2hhc2hfcHRyKHJpLT50YXNrLCBLUFJPQkVfSEFTSF9CSVRTKV0pOwotCi0JLyogQWxzbyBhZGQgdGhpcyBycCBpbnN0IHRvIHRoZSB1c2VkIGxpc3QuICovCi0JSU5JVF9ITElTVF9OT0RFKCZyaS0+dWZsaXN0KTsKLQlobGlzdF9hZGRfaGVhZCgmcmktPnVmbGlzdCwgJnJpLT5ycC0+dXNlZF9pbnN0YW5jZXMpOwotfQotCi0vKiBDYWxsZWQgd2l0aCBrcmV0cHJvYmVfbG9jayBoZWxkICovCiB2b2lkIF9fa3Byb2JlcyByZWN5Y2xlX3JwX2luc3Qoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCiAJCQkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpCiB7CkBAIC00NTQsNyArNDE1LDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3JwX2luc3Qoc3RydWN0IGtyZXRwcm9iZSAqcnApCiB7CiAJc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmk7Ci0Jd2hpbGUgKChyaSA9IGdldF9mcmVlX3JwX2luc3QocnApKSAhPSBOVUxMKSB7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvcywgKm5leHQ7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJpLCBwb3MsIG5leHQsICZycC0+ZnJlZV9pbnN0YW5jZXMsIHVmbGlzdCkgewogCQlobGlzdF9kZWwoJnJpLT51Zmxpc3QpOwogCQlrZnJlZShyaSk7CiAJfQpAQCAtNTM1LDggKzQ5OCw4IEBACiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIGluX2twcm9iZXNfZnVuY3Rpb25zKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlpZiAoYWRkciA+PSAodW5zaWduZWQgbG9uZylfX2twcm9iZXNfdGV4dF9zdGFydAotCQkmJiBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpX19rcHJvYmVzX3RleHRfZW5kKQorCWlmIChhZGRyID49ICh1bnNpZ25lZCBsb25nKV9fa3Byb2Jlc190ZXh0X3N0YXJ0ICYmCisJICAgIGFkZHIgPCAodW5zaWduZWQgbG9uZylfX2twcm9iZXNfdGV4dF9lbmQpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiAwOwogfQpAQCAtNTYzLDE5ICs1MjYsMjQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcC0+YWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikoKChjaGFyICopcC0+YWRkcikrIHAtPm9mZnNldCk7CiAKLQlpZiAoKCFrZXJuZWxfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKSBwLT5hZGRyKSkgfHwKLQkJaW5fa3Byb2Jlc19mdW5jdGlvbnMoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIpKQorCWlmICgha2VybmVsX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZykgcC0+YWRkcikgfHwKKwkgICAgaW5fa3Byb2Jlc19mdW5jdGlvbnMoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXAtPm1vZF9yZWZjb3VudGVkID0gMDsKLQkvKiBDaGVjayBhcmUgd2UgcHJvYmluZyBhIG1vZHVsZSAqLwotCWlmICgocHJvYmVkX21vZCA9IG1vZHVsZV90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIpKSkgeworCisJLyoKKwkgKiBDaGVjayBpZiBhcmUgd2UgcHJvYmluZyBhIG1vZHVsZS4KKwkgKi8KKwlwcm9iZWRfbW9kID0gbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZykgcC0+YWRkcik7CisJaWYgKHByb2JlZF9tb2QpIHsKIAkJc3RydWN0IG1vZHVsZSAqY2FsbGluZ19tb2QgPSBtb2R1bGVfdGV4dF9hZGRyZXNzKGNhbGxlZF9mcm9tKTsKLQkJLyogV2UgbXVzdCBhbGxvdyBtb2R1bGVzIHRvIHByb2JlIHRoZW1zZWxmIGFuZAotCQkgKiBpbiB0aGlzIGNhc2UgYXZvaWQgaW5jcmVtZW50aW5nIHRoZSBtb2R1bGUgcmVmY291bnQsCi0JCSAqIHNvIGFzIHRvIGFsbG93IHVubG9hZGluZyBvZiBzZWxmIHByb2JpbmcgbW9kdWxlcy4KKwkJLyoKKwkJICogV2UgbXVzdCBhbGxvdyBtb2R1bGVzIHRvIHByb2JlIHRoZW1zZWxmIGFuZCBpbiB0aGlzIGNhc2UKKwkJICogYXZvaWQgaW5jcmVtZW50aW5nIHRoZSBtb2R1bGUgcmVmY291bnQsIHNvIGFzIHRvIGFsbG93CisJCSAqIHVubG9hZGluZyBvZiBzZWxmIHByb2JpbmcgbW9kdWxlcy4KIAkJICovCi0JCWlmIChjYWxsaW5nX21vZCAmJiAoY2FsbGluZ19tb2QgIT0gcHJvYmVkX21vZCkpIHsKKwkJaWYgKGNhbGxpbmdfbW9kICYmIGNhbGxpbmdfbW9kICE9IHByb2JlZF9tb2QpIHsKIAkJCWlmICh1bmxpa2VseSghdHJ5X21vZHVsZV9nZXQocHJvYmVkX21vZCkpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJcC0+bW9kX3JlZmNvdW50ZWQgPSAxOwpAQCAtNTkzLDE5ICs1NjEsMjEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKChyZXQgPSBhcmNoX3ByZXBhcmVfa3Byb2JlKHApKSAhPSAwKQorCXJldCA9IGFyY2hfcHJlcGFyZV9rcHJvYmUocCk7CisJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKIAlJTklUX0hMSVNUX05PREUoJnAtPmhsaXN0KTsKIAlobGlzdF9hZGRfaGVhZF9yY3UoJnAtPmhsaXN0LAogCQkgICAgICAgJmtwcm9iZV90YWJsZVtoYXNoX3B0cihwLT5hZGRyLCBLUFJPQkVfSEFTSF9CSVRTKV0pOwogCi0JaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZrcHJvYmVfY291bnQpID09IFwKKwlpZiAoa3Byb2JlX2VuYWJsZWQpIHsKKwkJaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZrcHJvYmVfY291bnQpID09IFwKIAkJCQkoQVJDSF9JTkFDVElWRV9LUFJPQkVfQ09VTlQgKyAxKSkKLQkJcmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcigma3Byb2JlX3BhZ2VfZmF1bHRfbmIpOworCQkJcmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcigma3Byb2JlX3BhZ2VfZmF1bHRfbmIpOwogCi0JYXJjaF9hcm1fa3Byb2JlKHApOwotCisJCWFyY2hfYXJtX2twcm9iZShwKTsKKwl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogCkBAIC02MTYsOCArNTg2LDcgQEAKIAogaW50IF9fa3Byb2JlcyByZWdpc3Rlcl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKLQlyZXR1cm4gX19yZWdpc3Rlcl9rcHJvYmUocCwKLQkJKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwlyZXR1cm4gX19yZWdpc3Rlcl9rcHJvYmUocCwgKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIAogdm9pZCBfX2twcm9iZXMgdW5yZWdpc3Rlcl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKQEAgLTY0MSwxMSArNjEwLDE2IEBACiAJCXJldHVybjsKIAl9CiB2YWxpZF9wOgotCWlmICgob2xkX3AgPT0gcCkgfHwgKChvbGRfcC0+cHJlX2hhbmRsZXIgPT0gYWdncl9wcmVfaGFuZGxlcikgJiYKLQkJKHAtPmxpc3QubmV4dCA9PSAmb2xkX3AtPmxpc3QpICYmCi0JCShwLT5saXN0LnByZXYgPT0gJm9sZF9wLT5saXN0KSkpIHsKLQkJLyogT25seSBwcm9iZSBvbiB0aGUgaGFzaCBsaXN0ICovCi0JCWFyY2hfZGlzYXJtX2twcm9iZShwKTsKKwlpZiAob2xkX3AgPT0gcCB8fAorCSAgICAob2xkX3AtPnByZV9oYW5kbGVyID09IGFnZ3JfcHJlX2hhbmRsZXIgJiYKKwkgICAgIHAtPmxpc3QubmV4dCA9PSAmb2xkX3AtPmxpc3QgJiYgcC0+bGlzdC5wcmV2ID09ICZvbGRfcC0+bGlzdCkpIHsKKwkJLyoKKwkJICogT25seSBwcm9iZSBvbiB0aGUgaGFzaCBsaXN0LiBEaXNhcm0gb25seSBpZiBrcHJvYmVzIGFyZQorCQkgKiBlbmFibGVkIC0gb3RoZXJ3aXNlLCB0aGUgYnJlYWtwb2ludCB3b3VsZCBhbHJlYWR5IGhhdmUKKwkJICogYmVlbiByZW1vdmVkLiBXZSBzYXZlIG9uIGZsdXNoaW5nIGljYWNoZS4KKwkJICovCisJCWlmIChrcHJvYmVfZW5hYmxlZCkKKwkJCWFyY2hfZGlzYXJtX2twcm9iZShwKTsKIAkJaGxpc3RfZGVsX3JjdSgmb2xkX3AtPmhsaXN0KTsKIAkJY2xlYW51cF9wID0gMTsKIAl9IGVsc2UgewpAQCAtNjU2LDkgKzYzMCwxMSBAQAogCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKIAogCXN5bmNocm9uaXplX3NjaGVkKCk7Ci0JaWYgKHAtPm1vZF9yZWZjb3VudGVkICYmCi0JICAgIChtb2QgPSBtb2R1bGVfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIpKSkKLQkJbW9kdWxlX3B1dChtb2QpOworCWlmIChwLT5tb2RfcmVmY291bnRlZCkgeworCQltb2QgPSBtb2R1bGVfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIpOworCQlpZiAobW9kKQorCQkJbW9kdWxlX3B1dChtb2QpOworCX0KIAogCWlmIChjbGVhbnVwX3ApIHsKIAkJaWYgKHAgIT0gb2xkX3ApIHsKQEAgLTcyOSw3ICs3MDUsMjEgQEAKIAogCS8qVE9ETzogY29uc2lkZXIgdG8gb25seSBzd2FwIHRoZSBSQSBhZnRlciB0aGUgbGFzdCBwcmVfaGFuZGxlciBmaXJlZCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZrcmV0cHJvYmVfbG9jaywgZmxhZ3MpOwotCWFyY2hfcHJlcGFyZV9rcmV0cHJvYmUocnAsIHJlZ3MpOworCWlmICghaGxpc3RfZW1wdHkoJnJwLT5mcmVlX2luc3RhbmNlcykpIHsKKwkJc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmk7CisKKwkJcmkgPSBobGlzdF9lbnRyeShycC0+ZnJlZV9pbnN0YW5jZXMuZmlyc3QsCisJCQkJIHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UsIHVmbGlzdCk7CisJCXJpLT5ycCA9IHJwOworCQlyaS0+dGFzayA9IGN1cnJlbnQ7CisJCWFyY2hfcHJlcGFyZV9rcmV0cHJvYmUocmksIHJlZ3MpOworCisJCS8qIFhYWChoY2gpOiB3aHkgaXMgdGhlcmUgbm8gaGxpc3RfbW92ZV9oZWFkPyAqLworCQlobGlzdF9kZWwoJnJpLT51Zmxpc3QpOworCQlobGlzdF9hZGRfaGVhZCgmcmktPnVmbGlzdCwgJnJpLT5ycC0+dXNlZF9pbnN0YW5jZXMpOworCQlobGlzdF9hZGRfaGVhZCgmcmktPmhsaXN0LCBrcmV0cHJvYmVfaW5zdF90YWJsZV9oZWFkKHJpLT50YXNrKSk7CisJfSBlbHNlCisJCXJwLT5ubWlzc2VkKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma3JldHByb2JlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTc5MiwxMSArNzgyLDEzIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDsKIAogCXVucmVnaXN0ZXJfa3Byb2JlKCZycC0+a3ApOworCiAJLyogTm8gcmFjZSBoZXJlICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmtyZXRwcm9iZV9sb2NrLCBmbGFncyk7Ci0Jd2hpbGUgKChyaSA9IGdldF91c2VkX3JwX2luc3QocnApKSAhPSBOVUxMKSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyaSwgcG9zLCBuZXh0LCAmcnAtPnVzZWRfaW5zdGFuY2VzLCB1Zmxpc3QpIHsKIAkJcmktPnJwID0gTlVMTDsKIAkJaGxpc3RfZGVsKCZyaS0+dWZsaXN0KTsKIAl9CkBAIC04MTYsNiArODA4LDkgQEAKIAl9CiAJYXRvbWljX3NldCgma3Byb2JlX2NvdW50LCAwKTsKIAorCS8qIEJ5IGRlZmF1bHQsIGtwcm9iZXMgYXJlIGVuYWJsZWQgKi8KKwlrcHJvYmVfZW5hYmxlZCA9IHRydWU7CisKIAllcnIgPSBhcmNoX2luaXRfa3Byb2JlcygpOwogCWlmICghZXJyKQogCQllcnIgPSByZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmtwcm9iZV9leGNlcHRpb25zX25iKTsKQEAgLTgyNSw3ICs4MjAsNyBAQAogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVwb3J0X3Byb2JlKHN0cnVjdCBzZXFfZmlsZSAqcGksIHN0cnVjdCBrcHJvYmUgKnAsCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyICpzeW0sIGludCBvZmZzZXQsY2hhciAqbW9kbmFtZSkKKwkJY29uc3QgY2hhciAqc3ltLCBpbnQgb2Zmc2V0LGNoYXIgKm1vZG5hbWUpCiB7CiAJY2hhciAqa3Byb2JlX3R5cGU7CiAKQEAgLTg2NywxMyArODYyLDEzIEBACiAJc3RydWN0IGtwcm9iZSAqcCwgKmtwOwogCWNvbnN0IGNoYXIgKnN5bSA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGkgPSAqKGxvZmZfdCAqKSB2OwotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CiAJY2hhciAqbW9kbmFtZSwgbmFtZWJ1ZlsxMjhdOwogCiAJaGVhZCA9ICZrcHJvYmVfdGFibGVbaV07CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIG5vZGUsIGhlYWQsIGhsaXN0KSB7Ci0JCXN5bSA9IGthbGxzeW1zX2xvb2t1cCgodW5zaWduZWQgbG9uZylwLT5hZGRyLCAmc2l6ZSwKKwkJc3ltID0ga2FsbHN5bXNfbG9va3VwKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIsIE5VTEwsCiAJCQkJCSZvZmZzZXQsICZtb2RuYW1lLCBuYW1lYnVmKTsKIAkJaWYgKHAtPnByZV9oYW5kbGVyID09IGFnZ3JfcHJlX2hhbmRsZXIpIHsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGtwLCAmcC0+bGlzdCwgbGlzdCkKQEAgLTkwNCwyMSArODk5LDE0OSBAQAogCS5yZWxlYXNlICAgICAgICA9IHNlcV9yZWxlYXNlLAogfTsKIAorc3RhdGljIHZvaWQgX19rcHJvYmVzIGVuYWJsZV9hbGxfa3Byb2Jlcyh2b2lkKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBrcHJvYmUgKnA7CisJdW5zaWduZWQgaW50IGk7CisKKwltdXRleF9sb2NrKCZrcHJvYmVfbXV0ZXgpOworCisJLyogSWYga3Byb2JlcyBhcmUgYWxyZWFkeSBlbmFibGVkLCBqdXN0IHJldHVybiAqLworCWlmIChrcHJvYmVfZW5hYmxlZCkKKwkJZ290byBhbHJlYWR5X2VuYWJsZWQ7CisKKwkvKgorCSAqIFJlLXJlZ2lzdGVyIHRoZSBwYWdlIGZhdWx0IG5vdGlmaWVyIG9ubHkgaWYgdGhlcmUgYXJlIGFueQorCSAqIGFjdGl2ZSBwcm9iZXMgYXQgdGhlIHRpbWUgb2YgZW5hYmxpbmcga3Byb2JlcyBnbG9iYWxseQorCSAqLworCWlmIChhdG9taWNfcmVhZCgma3Byb2JlX2NvdW50KSA+IEFSQ0hfSU5BQ1RJVkVfS1BST0JFX0NPVU5UKQorCQlyZWdpc3Rlcl9wYWdlX2ZhdWx0X25vdGlmaWVyKCZrcHJvYmVfcGFnZV9mYXVsdF9uYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgS1BST0JFX1RBQkxFX1NJWkU7IGkrKykgeworCQloZWFkID0gJmtwcm9iZV90YWJsZVtpXTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIG5vZGUsIGhlYWQsIGhsaXN0KQorCQkJYXJjaF9hcm1fa3Byb2JlKHApOworCX0KKworCWtwcm9iZV9lbmFibGVkID0gdHJ1ZTsKKwlwcmludGsoS0VSTl9JTkZPICJLcHJvYmVzIGdsb2JhbGx5IGVuYWJsZWRcbiIpOworCithbHJlYWR5X2VuYWJsZWQ6CisJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzIGRpc2FibGVfYWxsX2twcm9iZXModm9pZCkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3Qga3Byb2JlICpwOworCXVuc2lnbmVkIGludCBpOworCisJbXV0ZXhfbG9jaygma3Byb2JlX211dGV4KTsKKworCS8qIElmIGtwcm9iZXMgYXJlIGFscmVhZHkgZGlzYWJsZWQsIGp1c3QgcmV0dXJuICovCisJaWYgKCFrcHJvYmVfZW5hYmxlZCkKKwkJZ290byBhbHJlYWR5X2Rpc2FibGVkOworCisJa3Byb2JlX2VuYWJsZWQgPSBmYWxzZTsKKwlwcmludGsoS0VSTl9JTkZPICJLcHJvYmVzIGdsb2JhbGx5IGRpc2FibGVkXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgS1BST0JFX1RBQkxFX1NJWkU7IGkrKykgeworCQloZWFkID0gJmtwcm9iZV90YWJsZVtpXTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIG5vZGUsIGhlYWQsIGhsaXN0KSB7CisJCQlpZiAoIWFyY2hfdHJhbXBvbGluZV9rcHJvYmUocCkpCisJCQkJYXJjaF9kaXNhcm1fa3Byb2JlKHApOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOworCS8qIEFsbG93IGFsbCBjdXJyZW50bHkgcnVubmluZyBrcHJvYmVzIHRvIGNvbXBsZXRlICovCisJc3luY2hyb25pemVfc2NoZWQoKTsKKworCW11dGV4X2xvY2soJmtwcm9iZV9tdXRleCk7CisJLyogVW5jb25kaXRpb25hbGx5IHVucmVnaXN0ZXIgdGhlIHBhZ2VfZmF1bHQgbm90aWZpZXIgKi8KKwl1bnJlZ2lzdGVyX3BhZ2VfZmF1bHRfbm90aWZpZXIoJmtwcm9iZV9wYWdlX2ZhdWx0X25iKTsKKworYWxyZWFkeV9kaXNhYmxlZDoKKwltdXRleF91bmxvY2soJmtwcm9iZV9tdXRleCk7CisJcmV0dXJuOworfQorCisvKgorICogWFhYOiBUaGUgZGVidWdmcyBib29sIGZpbGUgaW50ZXJmYWNlIGRvZXNuJ3QgYWxsb3cgZm9yIGNhbGxiYWNrcworICogd2hlbiB0aGUgYm9vbCBzdGF0ZSBpcyBzd2l0Y2hlZC4gV2UgY2FuIHJldXNlIHRoYXQgZmFjaWxpdHkgd2hlbgorICogYXZhaWxhYmxlCisgKi8KK3N0YXRpYyBzc2l6ZV90IHJlYWRfZW5hYmxlZF9maWxlX2Jvb2woc3RydWN0IGZpbGUgKmZpbGUsCisJICAgICAgIGNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciBidWZbM107CisKKwlpZiAoa3Byb2JlX2VuYWJsZWQpCisJCWJ1ZlswXSA9ICcxJzsKKwllbHNlCisJCWJ1ZlswXSA9ICcwJzsKKwlidWZbMV0gPSAnXG4nOworCWJ1ZlsyXSA9IDB4MDA7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCAyKTsKK30KKworc3RhdGljIHNzaXplX3Qgd3JpdGVfZW5hYmxlZF9maWxlX2Jvb2woc3RydWN0IGZpbGUgKmZpbGUsCisJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciBidWZbMzJdOworCWludCBidWZfc2l6ZTsKKworCWJ1Zl9zaXplID0gbWluKGNvdW50LCAoc2l6ZW9mKGJ1ZiktMSkpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJc3dpdGNoIChidWZbMF0pIHsKKwljYXNlICd5JzoKKwljYXNlICdZJzoKKwljYXNlICcxJzoKKwkJZW5hYmxlX2FsbF9rcHJvYmVzKCk7CisJCWJyZWFrOworCWNhc2UgJ24nOgorCWNhc2UgJ04nOgorCWNhc2UgJzAnOgorCQlkaXNhYmxlX2FsbF9rcHJvYmVzKCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19rcCA9IHsKKwkucmVhZCA9ICAgICAgICAgcmVhZF9lbmFibGVkX2ZpbGVfYm9vbCwKKwkud3JpdGUgPSAgICAgICAgd3JpdGVfZW5hYmxlZF9maWxlX2Jvb2wsCit9OworCiBzdGF0aWMgaW50IF9fa3Byb2JlcyBkZWJ1Z2ZzX2twcm9iZV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGlyLCAqZmlsZTsKKwl1bnNpZ25lZCBpbnQgdmFsdWUgPSAxOwogCiAJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJrcHJvYmVzIiwgTlVMTCk7CiAJaWYgKCFkaXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImxpc3QiLCAwNDQ0LCBkaXIgLCAwICwKKwlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgibGlzdCIsIDA0NDQsIGRpciwgTlVMTCwKIAkJCQkmZGVidWdmc19rcHJvYmVzX29wZXJhdGlvbnMpOwogCWlmICghZmlsZSkgewogCQlkZWJ1Z2ZzX3JlbW92ZShkaXIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZW5hYmxlZCIsIDA2MDAsIGRpciwKKwkJCQkJJnZhbHVlLCAmZm9wc19rcCk7CisJaWYgKCFmaWxlKSB7CisJCWRlYnVnZnNfcmVtb3ZlKGRpcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCA4N2M1MGNjLi5iYmQ1MWI4IDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTEsNyArMSw3IEBACiAvKiBLZXJuZWwgdGhyZWFkIGhlbHBlciBmdW5jdGlvbnMuCiAgKiAgIENvcHlyaWdodCAoQykgMjAwNCBJQk0gQ29ycG9yYXRpb24sIFJ1c3R5IFJ1c3NlbGwuCiAgKgotICogQ3JlYXRpb24gaXMgZG9uZSB2aWEga2V2ZW50ZCwgc28gdGhhdCB3ZSBnZXQgYSBjbGVhbiBlbnZpcm9ubWVudAorICogQ3JlYXRpb24gaXMgZG9uZSB2aWEga3RocmVhZGQsIHNvIHRoYXQgd2UgZ2V0IGEgY2xlYW4gZW52aXJvbm1lbnQKICAqIGV2ZW4gaWYgd2UncmUgaW52b2tlZCBmcm9tIHVzZXJzcGFjZSAodGhpbmsgbW9kcHJvYmUsIGhvdHBsdWcgY3B1LAogICogZXRjLikuCiAgKi8KQEAgLTE1LDI0ICsxNSwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCi0vKgotICogV2UgZG9udCB3YW50IHRvIGV4ZWN1dGUgb2ZmIGtldmVudGQgc2luY2UgaXQgbWlnaHQKLSAqIGhvbGQgYSBzZW1hcGhvcmUgb3VyIGNhbGxlcnMgaG9sZCB0b286Ci0gKi8KLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqaGVscGVyX3dxOworc3RhdGljIERFRklORV9TUElOTE9DSyhrdGhyZWFkX2NyZWF0ZV9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoa3RocmVhZF9jcmVhdGVfbGlzdCk7CitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmt0aHJlYWRkX3Rhc2s7CiAKIHN0cnVjdCBrdGhyZWFkX2NyZWF0ZV9pbmZvCiB7Ci0JLyogSW5mb3JtYXRpb24gcGFzc2VkIHRvIGt0aHJlYWQoKSBmcm9tIGtldmVudGQuICovCisJLyogSW5mb3JtYXRpb24gcGFzc2VkIHRvIGt0aHJlYWQoKSBmcm9tIGt0aHJlYWRkLiAqLwogCWludCAoKnRocmVhZGZuKSh2b2lkICpkYXRhKTsKIAl2b2lkICpkYXRhOwogCXN0cnVjdCBjb21wbGV0aW9uIHN0YXJ0ZWQ7CiAKLQkvKiBSZXN1bHQgcGFzc2VkIGJhY2sgdG8ga3RocmVhZF9jcmVhdGUoKSBmcm9tIGtldmVudGQuICovCisJLyogUmVzdWx0IHBhc3NlZCBiYWNrIHRvIGt0aHJlYWRfY3JlYXRlKCkgZnJvbSBrdGhyZWFkZC4gKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlc3VsdDsKIAlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOwogCi0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAogc3RydWN0IGt0aHJlYWRfc3RvcF9pbmZvCkBAIC02MCw0NCArNTgsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woa3RocmVhZF9zaG91bGRfc3RvcCk7CiAKLXN0YXRpYyB2b2lkIGt0aHJlYWRfZXhpdF9maWxlcyh2b2lkKQotewotCXN0cnVjdCBmc19zdHJ1Y3QgKmZzOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQotCWV4aXRfZnModHNrKTsJCS8qIGN1cnJlbnQtPmZzLT5jb3VudC0tOyAqLwotCWZzID0gaW5pdF90YXNrLmZzOwotCXRzay0+ZnMgPSBmczsKLQlhdG9taWNfaW5jKCZmcy0+Y291bnQpOwotIAlleGl0X2ZpbGVzKHRzayk7Ci0JY3VycmVudC0+ZmlsZXMgPSBpbml0X3Rhc2suZmlsZXM7Ci0JYXRvbWljX2luYygmdHNrLT5maWxlcy0+Y291bnQpOwotfQotCiBzdGF0aWMgaW50IGt0aHJlYWQodm9pZCAqX2NyZWF0ZSkKIHsKIAlzdHJ1Y3Qga3RocmVhZF9jcmVhdGVfaW5mbyAqY3JlYXRlID0gX2NyZWF0ZTsKIAlpbnQgKCp0aHJlYWRmbikodm9pZCAqZGF0YSk7CiAJdm9pZCAqZGF0YTsKLQlzaWdzZXRfdCBibG9ja2VkOwogCWludCByZXQgPSAtRUlOVFI7CiAKLQlrdGhyZWFkX2V4aXRfZmlsZXMoKTsKLQotCS8qIENvcHkgZGF0YTogaXQncyBvbiBrZXZlbnRkJ3Mgc3RhY2sgKi8KKwkvKiBDb3B5IGRhdGE6IGl0J3Mgb24ga3RocmVhZCdzIHN0YWNrICovCiAJdGhyZWFkZm4gPSBjcmVhdGUtPnRocmVhZGZuOwogCWRhdGEgPSBjcmVhdGUtPmRhdGE7CiAKLQkvKiBCbG9jayBhbmQgZmx1c2ggYWxsIHNpZ25hbHMgKGluIGNhc2Ugd2UncmUgbm90IGZyb20ga2V2ZW50ZCkuICovCi0Jc2lnZmlsbHNldCgmYmxvY2tlZCk7Ci0Jc2lncHJvY21hc2soU0lHX0JMT0NLLCAmYmxvY2tlZCwgTlVMTCk7Ci0JZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKLQotCS8qIEJ5IGRlZmF1bHQgd2UgY2FuIHJ1biBhbnl3aGVyZSwgdW5saWtlIGtldmVudGQuICovCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBDUFVfTUFTS19BTEwpOwotCiAJLyogT0ssIHRlbGwgdXNlciB3ZSdyZSBzcGF3bmVkLCB3YWl0IGZvciBzdG9wIG9yIHdha2V1cCAqLwotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAljb21wbGV0ZSgmY3JlYXRlLT5zdGFydGVkKTsKIAlzY2hlZHVsZSgpOwogCkBAIC0xMTIsMTEgKzg1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogV2UgYXJlIGtldmVudGQ6IGNyZWF0ZSBhIHRocmVhZC4gKi8KLXN0YXRpYyB2b2lkIGtldmVudGRfY3JlYXRlX2t0aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgY3JlYXRlX2t0aHJlYWQoc3RydWN0IGt0aHJlYWRfY3JlYXRlX2luZm8gKmNyZWF0ZSkKIHsKLQlzdHJ1Y3Qga3RocmVhZF9jcmVhdGVfaW5mbyAqY3JlYXRlID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBrdGhyZWFkX2NyZWF0ZV9pbmZvLCB3b3JrKTsKIAlpbnQgcGlkOwogCiAJLyogV2Ugd2FudCBvdXIgb3duIHNpZ25hbCBoYW5kbGVyICh3ZSB0YWtlIG5vIHNpZ25hbHMgYnkgZGVmYXVsdCkuICovCkBAIC0xNjIsMTcgKzEzMiwxNCBAQAogCWNyZWF0ZS5kYXRhID0gZGF0YTsKIAlpbml0X2NvbXBsZXRpb24oJmNyZWF0ZS5zdGFydGVkKTsKIAlpbml0X2NvbXBsZXRpb24oJmNyZWF0ZS5kb25lKTsKLQlJTklUX1dPUksoJmNyZWF0ZS53b3JrLCBrZXZlbnRkX2NyZWF0ZV9rdGhyZWFkKTsKIAotCS8qCi0JICogVGhlIHdvcmtxdWV1ZSBuZWVkcyB0byBzdGFydCB1cCBmaXJzdDoKLQkgKi8KLQlpZiAoIWhlbHBlcl93cSkKLQkJY3JlYXRlLndvcmsuZnVuYygmY3JlYXRlLndvcmspOwotCWVsc2UgewotCQlxdWV1ZV93b3JrKGhlbHBlcl93cSwgJmNyZWF0ZS53b3JrKTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmY3JlYXRlLmRvbmUpOwotCX0KKwlzcGluX2xvY2soJmt0aHJlYWRfY3JlYXRlX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmNyZWF0ZS5saXN0LCAma3RocmVhZF9jcmVhdGVfbGlzdCk7CisJd2FrZV91cF9wcm9jZXNzKGt0aHJlYWRkX3Rhc2spOworCXNwaW5fdW5sb2NrKCZrdGhyZWFkX2NyZWF0ZV9sb2NrKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNyZWF0ZS5kb25lKTsKKwogCWlmICghSVNfRVJSKGNyZWF0ZS5yZXN1bHQpKSB7CiAJCXZhX2xpc3QgYXJnczsKIAkJdmFfc3RhcnQoYXJncywgbmFtZWZtdCk7CkBAIC0xODAsNyArMTQ3LDYgQEAKIAkJCSAgbmFtZWZtdCwgYXJncyk7CiAJCXZhX2VuZChhcmdzKTsKIAl9Ci0KIAlyZXR1cm4gY3JlYXRlLnJlc3VsdDsKIH0KIEVYUE9SVF9TWU1CT0woa3RocmVhZF9jcmVhdGUpOwpAQCAtMTk2LDcgKzE2MiwxMCBAQAogICovCiB2b2lkIGt0aHJlYWRfYmluZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmssIHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JQlVHX09OKGstPnN0YXRlICE9IFRBU0tfSU5URVJSVVBUSUJMRSk7CisJaWYgKGstPnN0YXRlICE9IFRBU0tfVU5JTlRFUlJVUFRJQkxFKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CiAJLyogTXVzdCBoYXZlIGRvbmUgc2NoZWR1bGUoKSBpbiBrdGhyZWFkKCkgYmVmb3JlIHdlIHNldF90YXNrX2NwdSAqLwogCXdhaXRfdGFza19pbmFjdGl2ZShrKTsKIAlzZXRfdGFza19jcHUoaywgY3B1KTsKQEAgLTI0NSwxMiArMjE0LDQ3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGt0aHJlYWRfc3RvcCk7CiAKLXN0YXRpYyBfX2luaXQgaW50IGhlbHBlcl9pbml0KHZvaWQpCisKK3N0YXRpYyBfX2luaXQgdm9pZCBrdGhyZWFkZF9zZXR1cCh2b2lkKQogewotCWhlbHBlcl93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrdGhyZWFkIik7Ci0JQlVHX09OKCFoZWxwZXJfd3EpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCXNldF90YXNrX2NvbW0odHNrLCAia3RocmVhZGQiKTsKKworCWlnbm9yZV9zaWduYWxzKHRzayk7CisKKwlzZXRfdXNlcl9uaWNlKHRzaywgLTUpOworCXNldF9jcHVzX2FsbG93ZWQodHNrLCBDUFVfTUFTS19BTEwpOworfQorCitpbnQga3RocmVhZGQodm9pZCAqdW51c2VkKQoreworCS8qIFNldHVwIGEgY2xlYW4gY29udGV4dCBmb3Igb3VyIGNoaWxkcmVuIHRvIGluaGVyaXQuICovCisJa3RocmVhZGRfc2V0dXAoKTsKKworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOworCisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAobGlzdF9lbXB0eSgma3RocmVhZF9jcmVhdGVfbGlzdCkpCisJCQlzY2hlZHVsZSgpOworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKKwkJc3Bpbl9sb2NrKCZrdGhyZWFkX2NyZWF0ZV9sb2NrKTsKKwkJd2hpbGUgKCFsaXN0X2VtcHR5KCZrdGhyZWFkX2NyZWF0ZV9saXN0KSkgeworCQkJc3RydWN0IGt0aHJlYWRfY3JlYXRlX2luZm8gKmNyZWF0ZTsKKworCQkJY3JlYXRlID0gbGlzdF9lbnRyeShrdGhyZWFkX2NyZWF0ZV9saXN0Lm5leHQsCisJCQkJCSAgICBzdHJ1Y3Qga3RocmVhZF9jcmVhdGVfaW5mbywgbGlzdCk7CisJCQlsaXN0X2RlbF9pbml0KCZjcmVhdGUtPmxpc3QpOworCQkJc3Bpbl91bmxvY2soJmt0aHJlYWRfY3JlYXRlX2xvY2spOworCisJCQljcmVhdGVfa3RocmVhZChjcmVhdGUpOworCisJCQlzcGluX2xvY2soJmt0aHJlYWRfY3JlYXRlX2xvY2spOworCQl9CisJCXNwaW5fdW5sb2NrKCZrdGhyZWFkX2NyZWF0ZV9sb2NrKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KLQotY29yZV9pbml0Y2FsbChoZWxwZXJfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCA3MDY1YTY4Li4xYTVmZjIyIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTI1Nyw5ICsyNTcsOCBAQAogCXRyYWNlLT5lbnRyaWVzID0gc3RhY2tfdHJhY2UgKyBucl9zdGFja190cmFjZV9lbnRyaWVzOwogCiAJdHJhY2UtPnNraXAgPSAzOwotCXRyYWNlLT5hbGxfY29udGV4dHMgPSAwOwogCi0Jc2F2ZV9zdGFja190cmFjZSh0cmFjZSwgTlVMTCk7CisJc2F2ZV9zdGFja190cmFjZSh0cmFjZSk7CiAKIAl0cmFjZS0+bWF4X2VudHJpZXMgPSB0cmFjZS0+bnJfZW50cmllczsKIApAQCAtMzQxLDEwICszNDAsNyBAQAogCiBjb25zdCBjaGFyICogX19nZXRfa2V5X25hbWUoc3RydWN0IGxvY2tkZXBfc3ViY2xhc3Nfa2V5ICprZXksIGNoYXIgKnN0cikKIHsKLQl1bnNpZ25lZCBsb25nIG9mZnMsIHNpemU7Ci0JY2hhciAqbW9kbmFtZTsKLQotCXJldHVybiBrYWxsc3ltc19sb29rdXAoKHVuc2lnbmVkIGxvbmcpa2V5LCAmc2l6ZSwgJm9mZnMsICZtb2RuYW1lLCBzdHIpOworCXJldHVybiBrYWxsc3ltc19sb29rdXAoKHVuc2lnbmVkIGxvbmcpa2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOwogfQogCiB2b2lkCkBAIC0xMzEzLDggKzEzMDksOSBAQAogCiAvKgogICogTG9vayB1cCBhIGRlcGVuZGVuY3kgY2hhaW4uIElmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQgeWV0IHRoZW4KLSAqIGFkZCBpdCBhbmQgcmV0dXJuIDAgLSBpbiB0aGlzIGNhc2UgdGhlIG5ldyBkZXBlbmRlbmN5IGNoYWluIGlzCi0gKiB2YWxpZGF0ZWQuIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBoYXNoZWQsIHJldHVybiAxLgorICogYWRkIGl0IGFuZCByZXR1cm4gMSAtIGluIHRoaXMgY2FzZSB0aGUgbmV3IGRlcGVuZGVuY3kgY2hhaW4gaXMKKyAqIHZhbGlkYXRlZC4gSWYgdGhlIGtleSBpcyBhbHJlYWR5IGhhc2hlZCwgcmV0dXJuIDAuCisgKiAoT24gcmV0dXJuIHdpdGggMSBncmFwaF9sb2NrIGlzIGhlbGQuKQogICovCiBzdGF0aWMgaW5saW5lIGludCBsb29rdXBfY2hhaW5fY2FjaGUodTY0IGNoYWluX2tleSwgc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQogewpAQCAtMTU3Nyw3ICsxNTc0LDcgQEAKICAqIE1hcmsgYSBsb2NrIHdpdGggYSB1c2FnZSBiaXQsIGFuZCB2YWxpZGF0ZSB0aGUgc3RhdGUgdHJhbnNpdGlvbjoKICAqLwogc3RhdGljIGludCBtYXJrX2xvY2soc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICp0aGlzLAotCQkgICAgIGVudW0gbG9ja191c2FnZV9iaXQgbmV3X2JpdCwgdW5zaWduZWQgbG9uZyBpcCkKKwkJICAgICBlbnVtIGxvY2tfdXNhZ2VfYml0IG5ld19iaXQpCiB7CiAJdW5zaWduZWQgaW50IG5ld19tYXNrID0gMSA8PCBuZXdfYml0LCByZXQgPSAxOwogCkBAIC0xNjAwLDE0ICsxNTk3LDYgQEAKIAogCXRoaXMtPmNsYXNzLT51c2FnZV9tYXNrIHw9IG5ld19tYXNrOwogCi0jaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JaWYgKG5ld19iaXQgPT0gTE9DS19FTkFCTEVEX0hBUkRJUlFTIHx8Ci0JCQluZXdfYml0ID09IExPQ0tfRU5BQkxFRF9IQVJESVJRU19SRUFEKQotCQlpcCA9IGN1cnItPmhhcmRpcnFfZW5hYmxlX2lwOwotCWVsc2UgaWYgKG5ld19iaXQgPT0gTE9DS19FTkFCTEVEX1NPRlRJUlFTIHx8Ci0JCQluZXdfYml0ID09IExPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKQotCQlpcCA9IGN1cnItPnNvZnRpcnFfZW5hYmxlX2lwOwotI2VuZGlmCiAJaWYgKCFzYXZlX3RyYWNlKHRoaXMtPmNsYXNzLT51c2FnZV90cmFjZXMgKyBuZXdfYml0KSkKIAkJcmV0dXJuIDA7CiAKQEAgLTE4MDYsNyArMTc5NSw3IEBACiAgKiBNYXJrIGFsbCBoZWxkIGxvY2tzIHdpdGggYSB1c2FnZSBiaXQ6CiAgKi8KIHN0YXRpYyBpbnQKLW1hcmtfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBoYXJkaXJxLCB1bnNpZ25lZCBsb25nIGlwKQorbWFya19oZWxkX2xvY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgaW50IGhhcmRpcnEpCiB7CiAJZW51bSBsb2NrX3VzYWdlX2JpdCB1c2FnZV9iaXQ7CiAJc3RydWN0IGhlbGRfbG9jayAqaGxvY2s7CkBAIC0xODI2LDcgKzE4MTUsNyBAQAogCQkJZWxzZQogCQkJCXVzYWdlX2JpdCA9IExPQ0tfRU5BQkxFRF9TT0ZUSVJRUzsKIAkJfQotCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywgdXNhZ2VfYml0LCBpcCkpCisJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLCB1c2FnZV9iaXQpKQogCQkJcmV0dXJuIDA7CiAJfQogCkBAIC0xODc5LDcgKzE4NjgsNyBAQAogCSAqIFdlIGFyZSBnb2luZyB0byB0dXJuIGhhcmRpcnFzIG9uLCBzbyBzZXQgdGhlCiAJICogdXNhZ2UgYml0IGZvciBhbGwgaGVsZCBsb2NrczoKIAkgKi8KLQlpZiAoIW1hcmtfaGVsZF9sb2NrcyhjdXJyLCAxLCBpcCkpCisJaWYgKCFtYXJrX2hlbGRfbG9ja3MoY3VyciwgMSkpCiAJCXJldHVybjsKIAkvKgogCSAqIElmIHdlIGhhdmUgc29mdGlycXMgZW5hYmxlZCwgdGhlbiBzZXQgdGhlIHVzYWdlCkBAIC0xODg3LDcgKzE4NzYsNyBAQAogCSAqIHRoaXMgYml0IGZyb20gYmVpbmcgc2V0IGJlZm9yZSkKIAkgKi8KIAlpZiAoY3Vyci0+c29mdGlycXNfZW5hYmxlZCkKLQkJaWYgKCFtYXJrX2hlbGRfbG9ja3MoY3VyciwgMCwgaXApKQorCQlpZiAoIW1hcmtfaGVsZF9sb2NrcyhjdXJyLCAwKSkKIAkJCXJldHVybjsKIAogCWN1cnItPmhhcmRpcnFfZW5hYmxlX2lwID0gaXA7CkBAIC0xOTU1LDcgKzE5NDQsNyBAQAogCSAqIGVuYWJsZWQgdG9vOgogCSAqLwogCWlmIChjdXJyLT5oYXJkaXJxc19lbmFibGVkKQotCQltYXJrX2hlbGRfbG9ja3MoY3VyciwgMCwgaXApOworCQltYXJrX2hlbGRfbG9ja3MoY3VyciwgMCk7CiB9CiAKIC8qCkBAIC0yMDkzLDQzICsyMDgyLDQzIEBACiAJCWlmIChyZWFkKSB7CiAJCQlpZiAoY3Vyci0+aGFyZGlycV9jb250ZXh0KQogCQkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLAotCQkJCQkJTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRCwgaXApKQorCQkJCQkJTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRCkpCiAJCQkJCXJldHVybiAwOwogCQkJaWYgKGN1cnItPnNvZnRpcnFfY29udGV4dCkKIAkJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywKLQkJCQkJCUxPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQsIGlwKSkKKwkJCQkJCUxPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQpKQogCQkJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCWlmIChjdXJyLT5oYXJkaXJxX2NvbnRleHQpCi0JCQkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssIExPQ0tfVVNFRF9JTl9IQVJESVJRLCBpcCkpCisJCQkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssIExPQ0tfVVNFRF9JTl9IQVJESVJRKSkKIAkJCQkJcmV0dXJuIDA7CiAJCQlpZiAoY3Vyci0+c29mdGlycV9jb250ZXh0KQotCQkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLCBMT0NLX1VTRURfSU5fU09GVElSUSwgaXApKQorCQkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLCBMT0NLX1VTRURfSU5fU09GVElSUSkpCiAJCQkJCXJldHVybiAwOwogCQl9CiAJfQogCWlmICghaGFyZGlycXNfb2ZmKSB7CiAJCWlmIChyZWFkKSB7CiAJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywKLQkJCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQsIGlwKSkKKwkJCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQpKQogCQkJCXJldHVybiAwOwogCQkJaWYgKGN1cnItPnNvZnRpcnFzX2VuYWJsZWQpCiAJCQkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssCi0JCQkJCQlMT0NLX0VOQUJMRURfU09GVElSUVNfUkVBRCwgaXApKQorCQkJCQkJTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQpKQogCQkJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLAotCQkJCQlMT0NLX0VOQUJMRURfSEFSRElSUVMsIGlwKSkKKwkJCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFTKSkKIAkJCQlyZXR1cm4gMDsKIAkJCWlmIChjdXJyLT5zb2Z0aXJxc19lbmFibGVkKQogCQkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLAotCQkJCQkJTE9DS19FTkFCTEVEX1NPRlRJUlFTLCBpcCkpCisJCQkJCQlMT0NLX0VOQUJMRURfU09GVElSUVMpKQogCQkJCQlyZXR1cm4gMDsKIAkJfQogCX0KICNlbmRpZgogCS8qIG1hcmsgaXQgYXMgdXNlZDogKi8KLQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywgTE9DS19VU0VELCBpcCkpCisJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssIExPQ0tfVVNFRCkpCiAJCXJldHVybiAwOwogb3V0X2NhbGNfaGFzaDoKIAkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDFlYjhjYTUuLjliZDkzZGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtOTUsOSArOTYsOSBAQAogCW1vZC0+dGFpbnRzIHw9IGZsYWc7CiB9CiAKLS8qIEEgdGhyZWFkIHRoYXQgd2FudHMgdG8gaG9sZCBhIHJlZmVyZW5jZSB0byBhIG1vZHVsZSBvbmx5IHdoaWxlIGl0Ci0gKiBpcyBydW5uaW5nIGNhbiBjYWxsIHRocyB0byBzYWZlbHkgZXhpdC4KLSAqIG5mc2QgYW5kIGxvY2tkIHVzZSB0aGlzLgorLyoKKyAqIEEgdGhyZWFkIHRoYXQgd2FudHMgdG8gaG9sZCBhIHJlZmVyZW5jZSB0byBhIG1vZHVsZSBvbmx5IHdoaWxlIGl0CisgKiBpcyBydW5uaW5nIGNhbiBjYWxsIHRoaXMgdG8gc2FmZWx5IGV4aXQuICBuZnNkIGFuZCBsb2NrZCB1c2UgdGhpcy4KICAqLwogdm9pZCBfX21vZHVsZV9wdXRfYW5kX2V4aXQoc3RydWN0IG1vZHVsZSAqbW9kLCBsb25nIGNvZGUpCiB7CkBAIC0zMTAsMTQgKzMxMSwxNCBAQAogewogCS8qIFJlYWxsb2NhdGlvbiByZXF1aXJlZD8gKi8KIAlpZiAocGNwdV9udW1fdXNlZCArIDEgPiBwY3B1X251bV9hbGxvY2F0ZWQpIHsKLQkJaW50ICpuZXcgPSBrbWFsbG9jKHNpemVvZihuZXdbMF0pICogcGNwdV9udW1fYWxsb2NhdGVkKjIsCi0JCQkJICAgR0ZQX0tFUk5FTCk7CisJCWludCAqbmV3OworCisJCW5ldyA9IGtyZWFsbG9jKHBjcHVfc2l6ZSwgc2l6ZW9mKG5ld1swXSkqcGNwdV9udW1fYWxsb2NhdGVkKjIsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghbmV3KQogCQkJcmV0dXJuIDA7CiAKLQkJbWVtY3B5KG5ldywgcGNwdV9zaXplLCBzaXplb2YobmV3WzBdKSpwY3B1X251bV9hbGxvY2F0ZWQpOwogCQlwY3B1X251bV9hbGxvY2F0ZWQgKj0gMjsKLQkJa2ZyZWUocGNwdV9zaXplKTsKIAkJcGNwdV9zaXplID0gbmV3OwogCX0KIApAQCAtMTE5OCw3ICsxMTk5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogRnJlZSBhIG1vZHVsZSwgcmVtb3ZlIGZyb20gbGlzdHMsIGV0YyAobXVzdCBob2xkIG1vZHVsZSBtdXRleCkuICovCisvKiBGcmVlIGEgbW9kdWxlLCByZW1vdmUgZnJvbSBsaXN0cywgZXRjIChtdXN0IGhvbGQgbW9kdWxlX211dGV4KS4gKi8KIHN0YXRpYyB2b2lkIGZyZWVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAkvKiBEZWxldGUgZnJvbSB2YXJpb3VzIGxpc3RzICovCkBAIC0xMjQ1LDcgKzEyNDYsNyBAQAogCiAvKgogICogRW5zdXJlIHRoYXQgYW4gZXhwb3J0ZWQgc3ltYm9sIFtnbG9iYWwgbmFtZXNwYWNlXSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0Ci0gKiBpbiB0aGUgS2VybmVsIG9yIGluIHNvbWUgb3RoZXIgbW9kdWxlcyBleHBvcnRlZCBzeW1ib2wgdGFibGUuCisgKiBpbiB0aGUga2VybmVsIG9yIGluIHNvbWUgb3RoZXIgbW9kdWxlJ3MgZXhwb3J0ZWQgc3ltYm9sIHRhYmxlLgogICovCiBzdGF0aWMgaW50IHZlcmlmeV9leHBvcnRfc3ltYm9scyhzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CkBAIC0xNDcxLDcgKzE0NzIsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0tBTExTWU1TCi1pbnQgaXNfZXhwb3J0ZWQoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKQorc3RhdGljIGludCBpc19leHBvcnRlZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJaWYgKCFtb2QgJiYgbG9va3VwX3N5bWJvbChuYW1lLCBfX3N0YXJ0X19fa3N5bXRhYiwgX19zdG9wX19fa3N5bXRhYikpCiAJCXJldHVybiAxOwpAQCAtMjA5Nyw4ICsyMDk4LDEwIEBACiAJaWYgKCFiZXN0KQogCQlyZXR1cm4gTlVMTDsKIAotCSpzaXplID0gbmV4dHZhbCAtIG1vZC0+c3ltdGFiW2Jlc3RdLnN0X3ZhbHVlOwotCSpvZmZzZXQgPSBhZGRyIC0gbW9kLT5zeW10YWJbYmVzdF0uc3RfdmFsdWU7CisJaWYgKHNpemUpCisJCSpzaXplID0gbmV4dHZhbCAtIG1vZC0+c3ltdGFiW2Jlc3RdLnN0X3ZhbHVlOworCWlmIChvZmZzZXQpCisJCSpvZmZzZXQgPSBhZGRyIC0gbW9kLT5zeW10YWJbYmVzdF0uc3RfdmFsdWU7CiAJcmV0dXJuIG1vZC0+c3RydGFiICsgbW9kLT5zeW10YWJbYmVzdF0uc3RfbmFtZTsKIH0KIApAQCAtMjEyMyw4ICsyMTI2LDU4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0cnVjdCBtb2R1bGUgKm1vZHVsZV9nZXRfa2FsbHN5bSh1bnNpZ25lZCBpbnQgc3ltbnVtLCB1bnNpZ25lZCBsb25nICp2YWx1ZSwKLQkJCQljaGFyICp0eXBlLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbikKK2ludCBsb29rdXBfbW9kdWxlX3N5bWJvbF9uYW1lKHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqc3ltbmFtZSkKK3sKKwlzdHJ1Y3QgbW9kdWxlICptb2Q7CisKKwltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkgeworCQlpZiAod2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2luaXQsIG1vZC0+aW5pdF9zaXplKSB8fAorCQkgICAgd2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV9zaXplKSkgeworCQkJY29uc3QgY2hhciAqc3ltOworCisJCQlzeW0gPSBnZXRfa3N5bWJvbChtb2QsIGFkZHIsIE5VTEwsIE5VTEwpOworCQkJaWYgKCFzeW0pCisJCQkJZ290byBvdXQ7CisJCQlzdHJsY3B5KHN5bW5hbWUsIHN5bSwgS1NZTV9OQU1FX0xFTiArIDEpOworCQkJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOworCXJldHVybiAtRVJBTkdFOworfQorCitpbnQgbG9va3VwX21vZHVsZV9zeW1ib2xfYXR0cnModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpzaXplLAorCQkJdW5zaWduZWQgbG9uZyAqb2Zmc2V0LCBjaGFyICptb2RuYW1lLCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBtb2R1bGUgKm1vZDsKKworCW11dGV4X2xvY2soJm1vZHVsZV9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVzLCBsaXN0KSB7CisJCWlmICh3aXRoaW4oYWRkciwgbW9kLT5tb2R1bGVfaW5pdCwgbW9kLT5pbml0X3NpemUpIHx8CisJCSAgICB3aXRoaW4oYWRkciwgbW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3NpemUpKSB7CisJCQljb25zdCBjaGFyICpzeW07CisKKwkJCXN5bSA9IGdldF9rc3ltYm9sKG1vZCwgYWRkciwgc2l6ZSwgb2Zmc2V0KTsKKwkJCWlmICghc3ltKQorCQkJCWdvdG8gb3V0OworCQkJaWYgKG1vZG5hbWUpCisJCQkJc3RybGNweShtb2RuYW1lLCBtb2QtPm5hbWUsIE1PRFVMRV9OQU1FX0xFTiArIDEpOworCQkJaWYgKG5hbWUpCisJCQkJc3RybGNweShuYW1lLCBzeW0sIEtTWU1fTkFNRV9MRU4gKyAxKTsKKwkJCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKKwlyZXR1cm4gLUVSQU5HRTsKK30KKworaW50IG1vZHVsZV9nZXRfa2FsbHN5bSh1bnNpZ25lZCBpbnQgc3ltbnVtLCB1bnNpZ25lZCBsb25nICp2YWx1ZSwgY2hhciAqdHlwZSwKKwkJCWNoYXIgKm5hbWUsIGNoYXIgKm1vZHVsZV9uYW1lLCBpbnQgKmV4cG9ydGVkKQogewogCXN0cnVjdCBtb2R1bGUgKm1vZDsKIApAQCAtMjEzNCwxNCArMjE4NywxNiBAQAogCQkJKnZhbHVlID0gbW9kLT5zeW10YWJbc3ltbnVtXS5zdF92YWx1ZTsKIAkJCSp0eXBlID0gbW9kLT5zeW10YWJbc3ltbnVtXS5zdF9pbmZvOwogCQkJc3RybGNweShuYW1lLCBtb2QtPnN0cnRhYiArIG1vZC0+c3ltdGFiW3N5bW51bV0uc3RfbmFtZSwKLQkJCQluYW1lbGVuKTsKKwkJCQlLU1lNX05BTUVfTEVOICsgMSk7CisJCQlzdHJsY3B5KG1vZHVsZV9uYW1lLCBtb2QtPm5hbWUsIE1PRFVMRV9OQU1FX0xFTiArIDEpOworCQkJKmV4cG9ydGVkID0gaXNfZXhwb3J0ZWQobmFtZSwgbW9kKTsKIAkJCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKLQkJCXJldHVybiBtb2Q7CisJCQlyZXR1cm4gMDsKIAkJfQogCQlzeW1udW0gLT0gbW9kLT5udW1fc3ltdGFiOwogCX0KIAltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIC1FUkFOR0U7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZF9maW5kX3N5bW5hbWUoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lKQpkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LmMgYi9rZXJuZWwvbXV0ZXguYwppbmRleCBlN2NiYmI4Li4zMDNlYWIxIDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXguYworKysgYi9rZXJuZWwvbXV0ZXguYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAKIAlkZWJ1Z19tdXRleF9sb2NrX2NvbW1vbihsb2NrLCAmd2FpdGVyKTsKIAltdXRleF9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCBzdWJjbGFzcywgMCwgX1JFVF9JUF8pOwotCWRlYnVnX211dGV4X2FkZF93YWl0ZXIobG9jaywgJndhaXRlciwgdGFzay0+dGhyZWFkX2luZm8pOworCWRlYnVnX211dGV4X2FkZF93YWl0ZXIobG9jaywgJndhaXRlciwgdGFza190aHJlYWRfaW5mbyh0YXNrKSk7CiAKIAkvKiBhZGQgd2FpdGluZyB0YXNrcyB0byB0aGUgZW5kIG9mIHRoZSB3YWl0cXVldWUgKEZJRk8pOiAqLwogCWxpc3RfYWRkX3RhaWwoJndhaXRlci5saXN0LCAmbG9jay0+d2FpdF9saXN0KTsKQEAgLTE1OSw3ICsxNTksNyBAQAogCQkgKi8KIAkJaWYgKHVubGlrZWx5KHN0YXRlID09IFRBU0tfSU5URVJSVVBUSUJMRSAmJgogCQkJCQkJc2lnbmFsX3BlbmRpbmcodGFzaykpKSB7Ci0JCQltdXRleF9yZW1vdmVfd2FpdGVyKGxvY2ssICZ3YWl0ZXIsIHRhc2stPnRocmVhZF9pbmZvKTsKKwkJCW11dGV4X3JlbW92ZV93YWl0ZXIobG9jaywgJndhaXRlciwgdGFza190aHJlYWRfaW5mbyh0YXNrKSk7CiAJCQltdXRleF9yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CiAJCQlzcGluX3VubG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7CiAKQEAgLTE3NSw4ICsxNzUsOCBAQAogCX0KIAogCS8qIGdvdCB0aGUgbG9jayAtIHJlam9pY2UhICovCi0JbXV0ZXhfcmVtb3ZlX3dhaXRlcihsb2NrLCAmd2FpdGVyLCB0YXNrLT50aHJlYWRfaW5mbyk7Ci0JZGVidWdfbXV0ZXhfc2V0X293bmVyKGxvY2ssIHRhc2stPnRocmVhZF9pbmZvKTsKKwltdXRleF9yZW1vdmVfd2FpdGVyKGxvY2ssICZ3YWl0ZXIsIHRhc2tfdGhyZWFkX2luZm8odGFzaykpOworCWRlYnVnX211dGV4X3NldF9vd25lcihsb2NrLCB0YXNrX3RocmVhZF9pbmZvKHRhc2spKTsKIAogCS8qIHNldCBpdCB0byAwIGlmIHRoZXJlIGFyZSBubyB3YWl0ZXJzIGxlZnQ6ICovCiAJaWYgKGxpa2VseShsaXN0X2VtcHR5KCZsb2NrLT53YWl0X2xpc3QpKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9uc3Byb3h5LmMgYi9rZXJuZWwvbnNwcm94eS5jCmluZGV4IGY1YjllZTYuLjFiYzRiNTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9uc3Byb3h5LmMKKysrIGIva2VybmVsL25zcHJveHkuYwpAQCAtMzgsMTAgKzM4LDggQEAKIAogLyoKICAqIGNyZWF0ZXMgYSBjb3B5IG9mICJvcmlnIiB3aXRoIHJlZmNvdW50IDEuCi0gKiBUaGlzIGRvZXMgbm90IGdyYWIgcmVmZXJlbmNlcyB0byB0aGUgY29udGFpbmVkIG5hbWVzcGFjZXMsCi0gKiBzbyB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgYnkgZHVwX25hbWVzcGFjZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5zcHJveHkgKmNsb25lX25hbWVzcGFjZXMoc3RydWN0IG5zcHJveHkgKm9yaWcpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuc3Byb3h5ICpjbG9uZV9uc3Byb3h5KHN0cnVjdCBuc3Byb3h5ICpvcmlnKQogewogCXN0cnVjdCBuc3Byb3h5ICpuczsKIApAQCAtNTIsMjYgKzUwLDQ5IEBACiB9CiAKIC8qCi0gKiBjb3BpZXMgdGhlIG5zcHJveHksIHNldHRpbmcgcmVmY291bnQgdG8gMSwgYW5kIGdyYWJiaW5nIGEKLSAqIHJlZmVyZW5jZSB0byBhbGwgY29udGFpbmVkIG5hbWVzcGFjZXMuICBDYWxsZWQgZnJvbQotICogc3lzX3Vuc2hhcmUoKQorICogQ3JlYXRlIG5ldyBuc3Byb3h5IGFuZCBhbGwgb2YgaXRzIHRoZSBhc3NvY2lhdGVkIG5hbWVzcGFjZXMuCisgKiBSZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgbnNwcm94eS4gIERvIG5vdCBhdHRhY2ggdGhpcyB0byB0aGUgdGFzaywKKyAqIGxlYXZlIGl0IHRvIHRoZSBjYWxsZXIgdG8gZG8gcHJvcGVyIGxvY2tpbmcgYW5kIGF0dGFjaCBpdCB0byB0YXNrLgogICovCi1zdHJ1Y3QgbnNwcm94eSAqZHVwX25hbWVzcGFjZXMoc3RydWN0IG5zcHJveHkgKm9yaWcpCitzdGF0aWMgc3RydWN0IG5zcHJveHkgKmNyZWF0ZV9uZXdfbmFtZXNwYWNlcyhpbnQgZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJc3RydWN0IGZzX3N0cnVjdCAqbmV3X2ZzKQogewotCXN0cnVjdCBuc3Byb3h5ICpucyA9IGNsb25lX25hbWVzcGFjZXMob3JpZyk7CisJc3RydWN0IG5zcHJveHkgKm5ld19uc3A7CiAKLQlpZiAobnMpIHsKLQkJaWYgKG5zLT5tbnRfbnMpCi0JCQlnZXRfbW50X25zKG5zLT5tbnRfbnMpOwotCQlpZiAobnMtPnV0c19ucykKLQkJCWdldF91dHNfbnMobnMtPnV0c19ucyk7Ci0JCWlmIChucy0+aXBjX25zKQotCQkJZ2V0X2lwY19ucyhucy0+aXBjX25zKTsKLQkJaWYgKG5zLT5waWRfbnMpCi0JCQlnZXRfcGlkX25zKG5zLT5waWRfbnMpOwotCX0KKwluZXdfbnNwID0gY2xvbmVfbnNwcm94eSh0c2stPm5zcHJveHkpOworCWlmICghbmV3X25zcCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlyZXR1cm4gbnM7CisJbmV3X25zcC0+bW50X25zID0gY29weV9tbnRfbnMoZmxhZ3MsIHRzay0+bnNwcm94eS0+bW50X25zLCBuZXdfZnMpOworCWlmIChJU19FUlIobmV3X25zcC0+bW50X25zKSkKKwkJZ290byBvdXRfbnM7CisKKwluZXdfbnNwLT51dHNfbnMgPSBjb3B5X3V0c25hbWUoZmxhZ3MsIHRzay0+bnNwcm94eS0+dXRzX25zKTsKKwlpZiAoSVNfRVJSKG5ld19uc3AtPnV0c19ucykpCisJCWdvdG8gb3V0X3V0czsKKworCW5ld19uc3AtPmlwY19ucyA9IGNvcHlfaXBjcyhmbGFncywgdHNrLT5uc3Byb3h5LT5pcGNfbnMpOworCWlmIChJU19FUlIobmV3X25zcC0+aXBjX25zKSkKKwkJZ290byBvdXRfaXBjOworCisJbmV3X25zcC0+cGlkX25zID0gY29weV9waWRfbnMoZmxhZ3MsIHRzay0+bnNwcm94eS0+cGlkX25zKTsKKwlpZiAoSVNfRVJSKG5ld19uc3AtPnBpZF9ucykpCisJCWdvdG8gb3V0X3BpZDsKKworCXJldHVybiBuZXdfbnNwOworCitvdXRfcGlkOgorCWlmIChuZXdfbnNwLT5pcGNfbnMpCisJCXB1dF9pcGNfbnMobmV3X25zcC0+aXBjX25zKTsKK291dF9pcGM6CisJaWYgKG5ld19uc3AtPnV0c19ucykKKwkJcHV0X3V0c19ucyhuZXdfbnNwLT51dHNfbnMpOworb3V0X3V0czoKKwlpZiAobmV3X25zcC0+bW50X25zKQorCQlwdXRfbW50X25zKG5ld19uc3AtPm1udF9ucyk7CitvdXRfbnM6CisJa2ZyZWUobmV3X25zcCk7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIC8qCkBAIC05Miw0NyArMTEzLDIxIEBACiAJaWYgKCEoZmxhZ3MgJiAoQ0xPTkVfTkVXTlMgfCBDTE9ORV9ORVdVVFMgfCBDTE9ORV9ORVdJUEMpKSkKIAkJcmV0dXJuIDA7CiAKLQluZXdfbnMgPSBjbG9uZV9uYW1lc3BhY2VzKG9sZF9ucyk7Ci0JaWYgKCFuZXdfbnMpIHsKLQkJZXJyID0gLUVOT01FTTsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKKwkJZXJyID0gLUVQRVJNOworCQlnb3RvIG91dDsKKwl9CisKKwluZXdfbnMgPSBjcmVhdGVfbmV3X25hbWVzcGFjZXMoZmxhZ3MsIHRzaywgdHNrLT5mcyk7CisJaWYgKElTX0VSUihuZXdfbnMpKSB7CisJCWVyciA9IFBUUl9FUlIobmV3X25zKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJdHNrLT5uc3Byb3h5ID0gbmV3X25zOwotCi0JZXJyID0gY29weV9tbnRfbnMoZmxhZ3MsIHRzayk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfbnM7Ci0KLQllcnIgPSBjb3B5X3V0c25hbWUoZmxhZ3MsIHRzayk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfdXRzOwotCi0JZXJyID0gY29weV9pcGNzKGZsYWdzLCB0c2spOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2lwYzsKLQotCWVyciA9IGNvcHlfcGlkX25zKGZsYWdzLCB0c2spOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X3BpZDsKLQogb3V0OgogCXB1dF9uc3Byb3h5KG9sZF9ucyk7CiAJcmV0dXJuIGVycjsKLQotb3V0X3BpZDoKLQlpZiAobmV3X25zLT5pcGNfbnMpCi0JCXB1dF9pcGNfbnMobmV3X25zLT5pcGNfbnMpOwotb3V0X2lwYzoKLQlpZiAobmV3X25zLT51dHNfbnMpCi0JCXB1dF91dHNfbnMobmV3X25zLT51dHNfbnMpOwotb3V0X3V0czoKLQlpZiAobmV3X25zLT5tbnRfbnMpCi0JCXB1dF9tbnRfbnMobmV3X25zLT5tbnRfbnMpOwotb3V0X25zOgotCXRzay0+bnNwcm94eSA9IG9sZF9uczsKLQlrZnJlZShuZXdfbnMpOwotCWdvdG8gb3V0OwogfQogCiB2b2lkIGZyZWVfbnNwcm94eShzdHJ1Y3QgbnNwcm94eSAqbnMpCkBAIC0xNDcsMyArMTQyLDQxIEBACiAJCXB1dF9waWRfbnMobnMtPnBpZF9ucyk7CiAJa2ZyZWUobnMpOwogfQorCisvKgorICogQ2FsbGVkIGZyb20gdW5zaGFyZS4gVW5zaGFyZSBhbGwgdGhlIG5hbWVzcGFjZXMgcGFydCBvZiBuc3Byb3h5LgorICogT24gc3VjZXNzLCByZXR1cm5zIHRoZSBuZXcgbnNwcm94eSBhbmQgYSByZWZlcmVuY2UgdG8gb2xkIG5zcHJveHkKKyAqIHRvIG1ha2Ugc3VyZSBpdCBzdGF5cyBhcm91bmQuCisgKi8KK2ludCB1bnNoYXJlX25zcHJveHlfbmFtZXNwYWNlcyh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsCisJCXN0cnVjdCBuc3Byb3h5ICoqbmV3X25zcCwgc3RydWN0IGZzX3N0cnVjdCAqbmV3X2ZzKQoreworCXN0cnVjdCBuc3Byb3h5ICpvbGRfbnMgPSBjdXJyZW50LT5uc3Byb3h5OworCWludCBlcnIgPSAwOworCisJaWYgKCEodW5zaGFyZV9mbGFncyAmIChDTE9ORV9ORVdOUyB8IENMT05FX05FV1VUUyB8IENMT05FX05FV0lQQykpKQorCQlyZXR1cm4gMDsKKworI2lmbmRlZiBDT05GSUdfSVBDX05TCisJaWYgKHVuc2hhcmVfZmxhZ3MgJiBDTE9ORV9ORVdJUEMpCisJCXJldHVybiAtRUlOVkFMOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1VUU19OUworCWlmICh1bnNoYXJlX2ZsYWdzICYgQ0xPTkVfTkVXVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgorCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJZ2V0X25zcHJveHkob2xkX25zKTsKKworCSpuZXdfbnNwID0gY3JlYXRlX25ld19uYW1lc3BhY2VzKHVuc2hhcmVfZmxhZ3MsIGN1cnJlbnQsCisJCQkJbmV3X2ZzID8gbmV3X2ZzIDogY3VycmVudC0+ZnMpOworCWlmIChJU19FUlIoKm5ld19uc3ApKSB7CisJCWVyciA9IFBUUl9FUlIoKm5ld19uc3ApOworCQlwdXRfbnNwcm94eShvbGRfbnMpOworCX0KKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3BhcmFtcy5jIGIva2VybmVsL3BhcmFtcy5jCmluZGV4IDMxMjE3MjMuLmU2MWM0NmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCXJldHVybiBwYXJhbV9nZXRfYm9vbChidWZmZXIsICZkdW1teSk7CiB9CiAKLS8qIFdlIGNoZWF0IGhlcmUgYW5kIHRlbXBvcmFyaWx5IG1hbmdsZSB0aGUgc3RyaW5nLiAqLworLyogV2UgYnJlYWsgdGhlIHJ1bGUgYW5kIG1hbmdsZSB0aGUgc3RyaW5nLiAqLwogc3RhdGljIGludCBwYXJhbV9hcnJheShjb25zdCBjaGFyICpuYW1lLAogCQkgICAgICAgY29uc3QgY2hhciAqdmFsLAogCQkgICAgICAgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCA5YzgwYmMyLi5lYjY2YmQyIDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC0yNywxMSArMjcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0X3Rhc2suaD4KIAogI2RlZmluZSBwaWRfaGFzaGZuKG5yKSBoYXNoX2xvbmcoKHVuc2lnbmVkIGxvbmcpbnIsIHBpZGhhc2hfc2hpZnQpCiBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKnBpZF9oYXNoOwogc3RhdGljIGludCBwaWRoYXNoX3NoaWZ0Owogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwaWRfY2FjaGVwOworc3RydWN0IHBpZCBpbml0X3N0cnVjdF9waWQgPSBJTklUX1NUUlVDVF9QSUQ7CiAKIGludCBwaWRfbWF4ID0gUElEX01BWF9ERUZBVUxUOwogCkBAIC0yNDcsMTMgKzI0OSwxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmluZF9waWQpOwogCi1pbnQgZmFzdGNhbGwgYXR0YWNoX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gcGlkX3R5cGUgdHlwZSwgaW50IG5yKQorLyoKKyAqIGF0dGFjaF9waWQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSB0YXNrbGlzdF9sb2NrIHdyaXRlLWhlbGQuCisgKi8KK2ludCBmYXN0Y2FsbCBhdHRhY2hfcGlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgZW51bSBwaWRfdHlwZSB0eXBlLAorCQlzdHJ1Y3QgcGlkICpwaWQpCiB7CiAJc3RydWN0IHBpZF9saW5rICpsaW5rOwotCXN0cnVjdCBwaWQgKnBpZDsKIAogCWxpbmsgPSAmdGFzay0+cGlkc1t0eXBlXTsKLQlsaW5rLT5waWQgPSBwaWQgPSBmaW5kX3BpZChucik7CisJbGluay0+cGlkID0gcGlkOwogCWhsaXN0X2FkZF9oZWFkX3JjdSgmbGluay0+bm9kZSwgJnBpZC0+dGFza3NbdHlwZV0pOwogCiAJcmV0dXJuIDA7CkBAIC0zNjAsMTYgKzM2NSwxMSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmluZF9nZXRfcGlkKTsKIAotaW50IGNvcHlfcGlkX25zKGludCBmbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqY29weV9waWRfbnMoaW50IGZsYWdzLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqb2xkX25zKQogewotCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpvbGRfbnMgPSB0c2stPm5zcHJveHktPnBpZF9uczsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghb2xkX25zKQotCQlyZXR1cm4gMDsKLQorCUJVR19PTighb2xkX25zKTsKIAlnZXRfcGlkX25zKG9sZF9ucyk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gb2xkX25zOwogfQogCiB2b2lkIGZyZWVfcGlkX25zKHN0cnVjdCBrcmVmICprcmVmKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKaW5kZXggNjU3Zjc3Ni4uMWRlNzEwZTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwpAQCAtOTcxLDcgKzk3MSw3IEBACiAJbWF4ZmlyZSA9IDIwOwogCXRzay0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7Ci0JCXN0cnVjdCBjcHVfdGltZXJfbGlzdCAqdCA9IGxpc3RfZW50cnkodGltZXJzLT5uZXh0LAorCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2ZpcnN0X2VudHJ5KHRpbWVycywKIAkJCQkJCSAgICAgIHN0cnVjdCBjcHVfdGltZXJfbGlzdCwKIAkJCQkJCSAgICAgIGVudHJ5KTsKIAkJaWYgKCEtLW1heGZpcmUgfHwgY3B1dGltZV9sdChwcm9mX3RpY2tzKHRzayksIHQtPmV4cGlyZXMuY3B1KSkgewpAQCAtOTg2LDcgKzk4Niw3IEBACiAJbWF4ZmlyZSA9IDIwOwogCXRzay0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7Ci0JCXN0cnVjdCBjcHVfdGltZXJfbGlzdCAqdCA9IGxpc3RfZW50cnkodGltZXJzLT5uZXh0LAorCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2ZpcnN0X2VudHJ5KHRpbWVycywKIAkJCQkJCSAgICAgIHN0cnVjdCBjcHVfdGltZXJfbGlzdCwKIAkJCQkJCSAgICAgIGVudHJ5KTsKIAkJaWYgKCEtLW1heGZpcmUgfHwgY3B1dGltZV9sdCh2aXJ0X3RpY2tzKHRzayksIHQtPmV4cGlyZXMuY3B1KSkgewpAQCAtMTAwMSw3ICsxMDAxLDcgQEAKIAltYXhmaXJlID0gMjA7CiAJdHNrLT5pdF9zY2hlZF9leHBpcmVzID0gMDsKIAl3aGlsZSAoIWxpc3RfZW1wdHkodGltZXJzKSkgewotCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2VudHJ5KHRpbWVycy0+bmV4dCwKKwkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlzdF9maXJzdF9lbnRyeSh0aW1lcnMsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7CiAJCWlmICghLS1tYXhmaXJlIHx8IHRzay0+c2NoZWRfdGltZSA8IHQtPmV4cGlyZXMuc2NoZWQpIHsKQEAgLTEwNTcsNyArMTA1Nyw3IEBACiAJbWF4ZmlyZSA9IDIwOwogCXByb2ZfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKIAl3aGlsZSAoIWxpc3RfZW1wdHkodGltZXJzKSkgewotCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2VudHJ5KHRpbWVycy0+bmV4dCwKKwkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlzdF9maXJzdF9lbnRyeSh0aW1lcnMsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7CiAJCWlmICghLS1tYXhmaXJlIHx8IGNwdXRpbWVfbHQocHRpbWUsIHQtPmV4cGlyZXMuY3B1KSkgewpAQCAtMTA3Miw3ICsxMDcyLDcgQEAKIAltYXhmaXJlID0gMjA7CiAJdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7Ci0JCXN0cnVjdCBjcHVfdGltZXJfbGlzdCAqdCA9IGxpc3RfZW50cnkodGltZXJzLT5uZXh0LAorCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2ZpcnN0X2VudHJ5KHRpbWVycywKIAkJCQkJCSAgICAgIHN0cnVjdCBjcHVfdGltZXJfbGlzdCwKIAkJCQkJCSAgICAgIGVudHJ5KTsKIAkJaWYgKCEtLW1heGZpcmUgfHwgY3B1dGltZV9sdCh1dGltZSwgdC0+ZXhwaXJlcy5jcHUpKSB7CkBAIC0xMDg3LDcgKzEwODcsNyBAQAogCW1heGZpcmUgPSAyMDsKIAlzY2hlZF9leHBpcmVzID0gMDsKIAl3aGlsZSAoIWxpc3RfZW1wdHkodGltZXJzKSkgewotCQlzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QgKnQgPSBsaXN0X2VudHJ5KHRpbWVycy0+bmV4dCwKKwkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlzdF9maXJzdF9lbnRyeSh0aW1lcnMsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7CiAJCWlmICghLS1tYXhmaXJlIHx8IHNjaGVkX3RpbWUgPCB0LT5leHBpcmVzLnNjaGVkKSB7CkBAIC0xNDAwLDcgKzE0MDAsNyBAQAogCSAqLwogCWhlYWQgPSAmdHNrLT5zaWduYWwtPmNwdV90aW1lcnNbY2xvY2tfaWR4XTsKIAlpZiAobGlzdF9lbXB0eShoZWFkKSB8fAotCSAgICBjcHV0aW1lX2dlKGxpc3RfZW50cnkoaGVhZC0+bmV4dCwKKwkgICAgY3B1dGltZV9nZShsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsCiAJCQkJICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsIGVudHJ5KS0+ZXhwaXJlcy5jcHUsCiAJCSAgICAgICAqbmV3dmFsKSkgewogCQkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCmluZGV4IDQ0MzE4Y2EuLjU4OGM5OWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqIFBPU0lYIGNsb2NrcyAmIHRpbWVycwogICovCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2NvbmZpZyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCmluZGV4IDg3NzcyMTcuLjQ5NWI3ZDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9LY29uZmlnCisrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCkBAIC03OSw3ICs3OSw3IEBACiAKIGNvbmZpZyBTT0ZUV0FSRV9TVVNQRU5ECiAJYm9vbCAiU29mdHdhcmUgU3VzcGVuZCAoSGliZXJuYXRpb24pIgotCWRlcGVuZHMgb24gUE0gJiYgU1dBUCAmJiAoKFg4NiAmJiAoIVNNUCB8fCBTVVNQRU5EX1NNUCkpIHx8ICgoRlJWIHx8IFBQQzMyKSAmJiAhU01QKSkKKwlkZXBlbmRzIG9uIFBNICYmIFNXQVAgJiYgKCgoWDg2IHx8IFBQQzY0X1NXU1VTUCkgJiYgKCFTTVAgfHwgU1VTUEVORF9TTVApKSB8fCAoKEZSViB8fCBQUEMzMikgJiYgIVNNUCkpCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIHRoZSBzdXNwZW5kIHRvIGRpc2sgKFNURCkgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgdXN1YWxseQogCSAgY2FsbGVkICJoaWJlcm5hdGlvbiIgaW4gdXNlciBpbnRlcmZhY2VzLiAgU1REIGNoZWNrcG9pbnRzIHRoZQpAQCAtMTM5LDcgKzEzOSw3IEBACiAKIGNvbmZpZyBTVVNQRU5EX1NNUAogCWJvb2wKLQlkZXBlbmRzIG9uIEhPVFBMVUdfQ1BVICYmIFg4NiAmJiBQTQorCWRlcGVuZHMgb24gSE9UUExVR19DUFUgJiYgKFg4NiB8fCBQUEM2NCkgJiYgUE0KIAlkZWZhdWx0IHkKIAogY29uZmlnIEFQTV9FTVVMQVRJT04KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9kaXNrLmMgYi9rZXJuZWwvcG93ZXIvZGlzay5jCmluZGV4IDA2MzMxMzcuLmY0NDViOWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9kaXNrLmMKKysrIGIva2VybmVsL3Bvd2VyL2Rpc2suYwpAQCAtMzAsMzAgKzMwLDY5IEBACiBkZXZfdCBzd3N1c3BfcmVzdW1lX2RldmljZTsKIHNlY3Rvcl90IHN3c3VzcF9yZXN1bWVfYmxvY2s7CiAKK2VudW0geworCUhJQkVSTkFUSU9OX0lOVkFMSUQsCisJSElCRVJOQVRJT05fUExBVEZPUk0sCisJSElCRVJOQVRJT05fVEVTVCwKKwlISUJFUk5BVElPTl9URVNUUFJPQywKKwlISUJFUk5BVElPTl9TSFVURE9XTiwKKwlISUJFUk5BVElPTl9SRUJPT1QsCisJLyoga2VlcCBsYXN0ICovCisJX19ISUJFUk5BVElPTl9BRlRFUl9MQVNUCit9OworI2RlZmluZSBISUJFUk5BVElPTl9NQVggKF9fSElCRVJOQVRJT05fQUZURVJfTEFTVC0xKQorI2RlZmluZSBISUJFUk5BVElPTl9GSVJTVCAoSElCRVJOQVRJT05fSU5WQUxJRCArIDEpCisKK3N0YXRpYyBpbnQgaGliZXJuYXRpb25fbW9kZSA9IEhJQkVSTkFUSU9OX1NIVVRET1dOOworCitzdHJ1Y3QgaGliZXJuYXRpb25fb3BzICpoaWJlcm5hdGlvbl9vcHM7CisKKy8qKgorICogaGliZXJuYXRpb25fc2V0X29wcyAtIHNldCB0aGUgZ2xvYmFsIGhpYmVybmF0ZSBvcGVyYXRpb25zCisgKiBAb3BzOiB0aGUgaGliZXJuYXRpb24gb3BlcmF0aW9ucyB0byB1c2UgaW4gc3Vic2VxdWVudCBoaWJlcm5hdGlvbiB0cmFuc2l0aW9ucworICovCisKK3ZvaWQgaGliZXJuYXRpb25fc2V0X29wcyhzdHJ1Y3QgaGliZXJuYXRpb25fb3BzICpvcHMpCit7CisJaWYgKG9wcyAmJiAhKG9wcy0+cHJlcGFyZSAmJiBvcHMtPmVudGVyICYmIG9wcy0+ZmluaXNoKSkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCW11dGV4X2xvY2soJnBtX211dGV4KTsKKwloaWJlcm5hdGlvbl9vcHMgPSBvcHM7CisJaWYgKG9wcykKKwkJaGliZXJuYXRpb25fbW9kZSA9IEhJQkVSTkFUSU9OX1BMQVRGT1JNOworCWVsc2UgaWYgKGhpYmVybmF0aW9uX21vZGUgPT0gSElCRVJOQVRJT05fUExBVEZPUk0pCisJCWhpYmVybmF0aW9uX21vZGUgPSBISUJFUk5BVElPTl9TSFVURE9XTjsKKworCW11dGV4X3VubG9jaygmcG1fbXV0ZXgpOworfQorCisKIC8qKgogICoJcGxhdGZvcm1fcHJlcGFyZSAtIHByZXBhcmUgdGhlIG1hY2hpbmUgZm9yIGhpYmVybmF0aW9uIHVzaW5nIHRoZQogICoJcGxhdGZvcm0gZHJpdmVyIGlmIHNvIGNvbmZpZ3VyZWQgYW5kIHJldHVybiBhbiBlcnJvciBjb2RlIGlmIGl0IGZhaWxzCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgcGxhdGZvcm1fcHJlcGFyZSh2b2lkKQorc3RhdGljIGludCBwbGF0Zm9ybV9wcmVwYXJlKHZvaWQpCiB7Ci0JaW50IGVycm9yID0gMDsKLQotCXN3aXRjaCAocG1fZGlza19tb2RlKSB7Ci0JY2FzZSBQTV9ESVNLX1RFU1Q6Ci0JY2FzZSBQTV9ESVNLX1RFU1RQUk9DOgotCWNhc2UgUE1fRElTS19TSFVURE9XTjoKLQljYXNlIFBNX0RJU0tfUkVCT09UOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZiAocG1fb3BzICYmIHBtX29wcy0+cHJlcGFyZSkKLQkJCWVycm9yID0gcG1fb3BzLT5wcmVwYXJlKFBNX1NVU1BFTkRfRElTSyk7Ci0JfQotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gKGhpYmVybmF0aW9uX21vZGUgPT0gSElCRVJOQVRJT05fUExBVEZPUk0gJiYgaGliZXJuYXRpb25fb3BzKSA/CisJCWhpYmVybmF0aW9uX29wcy0+cHJlcGFyZSgpIDogMDsKIH0KIAogLyoqCi0gKglwb3dlcl9kb3duIC0gU2h1dCBtYWNoaW5lIGRvd24gZm9yIGhpYmVybmF0ZS4KKyAqCXBsYXRmb3JtX2ZpbmlzaCAtIHN3aXRjaCB0aGUgbWFjaGluZSB0byB0aGUgbm9ybWFsIG1vZGUgb2Ygb3BlcmF0aW9uCisgKgl1c2luZyB0aGUgcGxhdGZvcm0gZHJpdmVyIChtdXN0IGJlIGNhbGxlZCBhZnRlciBwbGF0Zm9ybV9wcmVwYXJlKCkpCisgKi8KKworc3RhdGljIHZvaWQgcGxhdGZvcm1fZmluaXNoKHZvaWQpCit7CisJaWYgKGhpYmVybmF0aW9uX21vZGUgPT0gSElCRVJOQVRJT05fUExBVEZPUk0gJiYgaGliZXJuYXRpb25fb3BzKQorCQloaWJlcm5hdGlvbl9vcHMtPmZpbmlzaCgpOworfQorCisvKioKKyAqCXBvd2VyX2Rvd24gLSBTaHV0IHRoZSBtYWNoaW5lIGRvd24gZm9yIGhpYmVybmF0aW9uLgogICoKICAqCVVzZSB0aGUgcGxhdGZvcm0gZHJpdmVyLCBpZiBjb25maWd1cmVkIHNvOyBvdGhlcndpc2UgdHJ5CiAgKgl0byBwb3dlciBvZmYgb3IgcmVib290LgpAQCAtNjEsMjAgKzEwMCwyMCBAQAogCiBzdGF0aWMgdm9pZCBwb3dlcl9kb3duKHZvaWQpCiB7Ci0Jc3dpdGNoIChwbV9kaXNrX21vZGUpIHsKLQljYXNlIFBNX0RJU0tfVEVTVDoKLQljYXNlIFBNX0RJU0tfVEVTVFBST0M6CisJc3dpdGNoIChoaWJlcm5hdGlvbl9tb2RlKSB7CisJY2FzZSBISUJFUk5BVElPTl9URVNUOgorCWNhc2UgSElCRVJOQVRJT05fVEVTVFBST0M6CiAJCWJyZWFrOwotCWNhc2UgUE1fRElTS19TSFVURE9XTjoKKwljYXNlIEhJQkVSTkFUSU9OX1NIVVRET1dOOgogCQlrZXJuZWxfcG93ZXJfb2ZmKCk7CiAJCWJyZWFrOwotCWNhc2UgUE1fRElTS19SRUJPT1Q6CisJY2FzZSBISUJFUk5BVElPTl9SRUJPT1Q6CiAJCWtlcm5lbF9yZXN0YXJ0KE5VTEwpOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZiAocG1fb3BzICYmIHBtX29wcy0+ZW50ZXIpIHsKKwljYXNlIEhJQkVSTkFUSU9OX1BMQVRGT1JNOgorCQlpZiAoaGliZXJuYXRpb25fb3BzKSB7CiAJCQlrZXJuZWxfc2h1dGRvd25fcHJlcGFyZShTWVNURU1fU1VTUEVORF9ESVNLKTsKLQkJCXBtX29wcy0+ZW50ZXIoUE1fU1VTUEVORF9ESVNLKTsKKwkJCWhpYmVybmF0aW9uX29wcy0+ZW50ZXIoKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtODcsMjAgKzEyNiw2IEBACiAJd2hpbGUoMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybV9maW5pc2godm9pZCkKLXsKLQlzd2l0Y2ggKHBtX2Rpc2tfbW9kZSkgewotCWNhc2UgUE1fRElTS19URVNUOgotCWNhc2UgUE1fRElTS19URVNUUFJPQzoKLQljYXNlIFBNX0RJU0tfU0hVVERPV046Ci0JY2FzZSBQTV9ESVNLX1JFQk9PVDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKHBtX29wcyAmJiBwbV9vcHMtPmZpbmlzaCkKLQkJCXBtX29wcy0+ZmluaXNoKFBNX1NVU1BFTkRfRElTSyk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCB1bnByZXBhcmVfcHJvY2Vzc2VzKHZvaWQpCiB7CiAJdGhhd19wcm9jZXNzZXMoKTsKQEAgLTEyMCwxMyArMTQ1LDEwIEBACiB9CiAKIC8qKgotICoJcG1fc3VzcGVuZF9kaXNrIC0gVGhlIGdyYW5wYXBweSBvZiBoaWJlcm5hdGlvbiBwb3dlciBtYW5hZ2VtZW50LgotICoKLSAqCUlmIG5vdCwgdGhlbiBjYWxsIHN3c3VzcCB0byBkbyBpdHMgdGhpbmcsIHRoZW4gZmlndXJlIG91dCBob3cKLSAqCXRvIHBvd2VyIGRvd24gdGhlIHN5c3RlbS4KKyAqCWhpYmVybmF0ZSAtIFRoZSBncmFucGFwcHkgb2YgdGhlIGJ1aWx0LWluIGhpYmVybmF0aW9uIG1hbmFnZW1lbnQKICAqLwogCi1pbnQgcG1fc3VzcGVuZF9kaXNrKHZvaWQpCitpbnQgaGliZXJuYXRlKHZvaWQpCiB7CiAJaW50IGVycm9yOwogCkBAIC0xNDMsNyArMTY1LDggQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gRmluaXNoOwogCi0JaWYgKHBtX2Rpc2tfbW9kZSA9PSBQTV9ESVNLX1RFU1RQUk9DKSB7CisJbXV0ZXhfbG9jaygmcG1fbXV0ZXgpOworCWlmIChoaWJlcm5hdGlvbl9tb2RlID09IEhJQkVSTkFUSU9OX1RFU1RQUk9DKSB7CiAJCXByaW50aygic3dzdXNwIGRlYnVnOiBXYWl0aW5nIGZvciA1IHNlY29uZHMuXG4iKTsKIAkJbWRlbGF5KDUwMDApOwogCQlnb3RvIFRoYXc7CkBAIC0xNjgsNyArMTkxLDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gRW5hYmxlX2NwdXM7CiAKLQlpZiAocG1fZGlza19tb2RlID09IFBNX0RJU0tfVEVTVCkgeworCWlmIChoaWJlcm5hdGlvbl9tb2RlID09IEhJQkVSTkFUSU9OX1RFU1QpIHsKIAkJcHJpbnRrKCJzd3N1c3AgZGVidWc6IFdhaXRpbmcgZm9yIDUgc2Vjb25kcy5cbiIpOwogCQltZGVsYXkoNTAwMCk7CiAJCWdvdG8gRW5hYmxlX2NwdXM7CkBAIC0yMDUsNiArMjI4LDcgQEAKIAlkZXZpY2VfcmVzdW1lKCk7CiAJcmVzdW1lX2NvbnNvbGUoKTsKICBUaGF3OgorCW11dGV4X3VubG9jaygmcG1fbXV0ZXgpOwogCXVucHJlcGFyZV9wcm9jZXNzZXMoKTsKICBGaW5pc2g6CiAJZnJlZV9iYXNpY19tZW1vcnlfYml0bWFwcygpOwpAQCAtMjIwLDcgKzI0NCw3IEBACiAgKglDYWxsZWQgYXMgYSBsYXRlX2luaXRjYWxsIChzbyBhbGwgZGV2aWNlcyBhcmUgZGlzY292ZXJlZCBhbmQKICAqCWluaXRpYWxpemVkKSwgd2UgY2FsbCBzd3N1c3AgdG8gc2VlIGlmIHdlIGhhdmUgYSBzYXZlZCBpbWFnZSBvciBub3QuCiAgKglJZiBzbywgd2UgcXVpZXNjZSBkZXZpY2VzLCB0aGUgcmVzdG9yZSB0aGUgc2F2ZWQgaW1hZ2UuIFdlIHdpbGwKLSAqCXJldHVybiBhYm92ZSAoaW4gcG1fc3VzcGVuZF9kaXNrKCkgKSBpZiBldmVyeXRoaW5nIGdvZXMgd2VsbC4KKyAqCXJldHVybiBhYm92ZSAoaW4gaGliZXJuYXRlKCkgKSBpZiBldmVyeXRoaW5nIGdvZXMgd2VsbC4KICAqCU90aGVyd2lzZSwgd2UgZmFpbCBncmFjZWZ1bGx5IGFuZCByZXR1cm4gdG8gdGhlIG5vcm1hbGx5CiAgKglzY2hlZHVsZWQgcHJvZ3JhbS4KICAqCkBAIC0zMTUsMjUgKzMzOSwyNiBAQAogbGF0ZV9pbml0Y2FsbChzb2Z0d2FyZV9yZXN1bWUpOwogCiAKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcG1fZGlza19tb2Rlc1tdID0gewotCVtQTV9ESVNLX1BMQVRGT1JNXQk9ICJwbGF0Zm9ybSIsCi0JW1BNX0RJU0tfU0hVVERPV05dCT0gInNodXRkb3duIiwKLQlbUE1fRElTS19SRUJPT1RdCT0gInJlYm9vdCIsCi0JW1BNX0RJU0tfVEVTVF0JCT0gInRlc3QiLAotCVtQTV9ESVNLX1RFU1RQUk9DXQk9ICJ0ZXN0cHJvYyIsCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGhpYmVybmF0aW9uX21vZGVzW10gPSB7CisJW0hJQkVSTkFUSU9OX1BMQVRGT1JNXQk9ICJwbGF0Zm9ybSIsCisJW0hJQkVSTkFUSU9OX1NIVVRET1dOXQk9ICJzaHV0ZG93biIsCisJW0hJQkVSTkFUSU9OX1JFQk9PVF0JPSAicmVib290IiwKKwlbSElCRVJOQVRJT05fVEVTVF0JPSAidGVzdCIsCisJW0hJQkVSTkFUSU9OX1RFU1RQUk9DXQk9ICJ0ZXN0cHJvYyIsCiB9OwogCiAvKioKLSAqCWRpc2sgLSBDb250cm9sIHN1c3BlbmQtdG8tZGlzayBtb2RlCisgKglkaXNrIC0gQ29udHJvbCBoaWJlcm5hdGlvbiBtb2RlCiAgKgogICoJU3VzcGVuZC10by1kaXNrIGNhbiBiZSBoYW5kbGVkIGluIHNldmVyYWwgd2F5cy4gV2UgaGF2ZSBhIGZldyBvcHRpb25zCiAgKglmb3IgcHV0dGluZyB0aGUgc3lzdGVtIHRvIHNsZWVwIC0gdXNpbmcgdGhlIHBsYXRmb3JtIGRyaXZlciAoZS5nLiBBQ1BJCi0gKglvciBvdGhlciBwbV9vcHMpLCBwb3dlcmluZyBvZmYgdGhlIHN5c3RlbSBvciByZWJvb3RpbmcgdGhlIHN5c3RlbQotICoJKGZvciB0ZXN0aW5nKSBhcyB3ZWxsIGFzIHRoZSB0d28gdGVzdCBtb2Rlcy4KKyAqCW9yIG90aGVyIGhpYmVybmF0aW9uX29wcyksIHBvd2VyaW5nIG9mZiB0aGUgc3lzdGVtIG9yIHJlYm9vdGluZyB0aGUKKyAqCXN5c3RlbSAoZm9yIHRlc3RpbmcpIGFzIHdlbGwgYXMgdGhlIHR3byB0ZXN0IG1vZGVzLgogICoKICAqCVRoZSBzeXN0ZW0gY2FuIHN1cHBvcnQgJ3BsYXRmb3JtJywgYW5kIHRoYXQgaXMga25vd24gYSBwcmlvcmkgKGFuZAotICoJZW5jb2RlZCBpbiBwbV9vcHMpLiBIb3dldmVyLCB0aGUgdXNlciBtYXkgY2hvb3NlICdzaHV0ZG93bicgb3IgJ3JlYm9vdCcKLSAqCWFzIGFsdGVybmF0aXZlcywgYXMgd2VsbCBhcyB0aGUgdGVzdCBtb2RlcyAndGVzdCcgYW5kICd0ZXN0cHJvYycuCisgKgllbmNvZGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBoaWJlcm5hdGlvbl9vcHMpLiBIb3dldmVyLCB0aGUgdXNlciBtYXkKKyAqCWNob29zZSAnc2h1dGRvd24nIG9yICdyZWJvb3QnIGFzIGFsdGVybmF0aXZlcywgYXMgd2VsbCBhcyBvbmUgZm8gdGhlCisgKgl0ZXN0IG1vZGVzLCAndGVzdCcgb3IgJ3Rlc3Rwcm9jJy4KICAqCiAgKglzaG93KCkgd2lsbCBkaXNwbGF5IHdoYXQgdGhlIG1vZGUgaXMgY3VycmVudGx5IHNldCB0by4KICAqCXN0b3JlKCkgd2lsbCBhY2NlcHQgb25lIG9mCkBAIC0zNDUsNyArMzcwLDcgQEAKICAqCSd0ZXN0cHJvYycKICAqCiAgKglJdCB3aWxsIG9ubHkgY2hhbmdlIHRvICdwbGF0Zm9ybScgaWYgdGhlIHN5c3RlbQotICoJc3VwcG9ydHMgaXQgKGFzIGRldGVybWluZWQgZnJvbSBwbV9vcHMtPnBtX2Rpc2tfbW9kZSkuCisgKglzdXBwb3J0cyBpdCAoYXMgZGV0ZXJtaW5lZCBieSBoYXZpbmcgaGliZXJuYXRpb25fb3BzKS4KICAqLwogCiBzdGF0aWMgc3NpemVfdCBkaXNrX3Nob3coc3RydWN0IGtzZXQgKmtzZXQsIGNoYXIgKmJ1ZikKQEAgLTM1MywyOCArMzc4LDI1IEBACiAJaW50IGk7CiAJY2hhciAqc3RhcnQgPSBidWY7CiAKLQlmb3IgKGkgPSBQTV9ESVNLX1BMQVRGT1JNOyBpIDwgUE1fRElTS19NQVg7IGkrKykgewotCQlpZiAoIXBtX2Rpc2tfbW9kZXNbaV0pCisJZm9yIChpID0gSElCRVJOQVRJT05fRklSU1Q7IGkgPD0gSElCRVJOQVRJT05fTUFYOyBpKyspIHsKKwkJaWYgKCFoaWJlcm5hdGlvbl9tb2Rlc1tpXSkKIAkJCWNvbnRpbnVlOwogCQlzd2l0Y2ggKGkpIHsKLQkJY2FzZSBQTV9ESVNLX1NIVVRET1dOOgotCQljYXNlIFBNX0RJU0tfUkVCT09UOgotCQljYXNlIFBNX0RJU0tfVEVTVDoKLQkJY2FzZSBQTV9ESVNLX1RFU1RQUk9DOgorCQljYXNlIEhJQkVSTkFUSU9OX1NIVVRET1dOOgorCQljYXNlIEhJQkVSTkFUSU9OX1JFQk9PVDoKKwkJY2FzZSBISUJFUk5BVElPTl9URVNUOgorCQljYXNlIEhJQkVSTkFUSU9OX1RFU1RQUk9DOgogCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAocG1fb3BzICYmIHBtX29wcy0+ZW50ZXIgJiYKLQkJCSAgICAoaSA9PSBwbV9vcHMtPnBtX2Rpc2tfbW9kZSkpCisJCWNhc2UgSElCRVJOQVRJT05fUExBVEZPUk06CisJCQlpZiAoaGliZXJuYXRpb25fb3BzKQogCQkJCWJyZWFrOwogCQkJLyogbm90IGEgdmFsaWQgbW9kZSwgY29udGludWUgd2l0aCBsb29wICovCiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoaSA9PSBwbV9kaXNrX21vZGUpCi0JCQlidWYgKz0gc3ByaW50ZihidWYsICJbJXNdIiwgcG1fZGlza19tb2Rlc1tpXSk7CisJCWlmIChpID09IGhpYmVybmF0aW9uX21vZGUpCisJCQlidWYgKz0gc3ByaW50ZihidWYsICJbJXNdICIsIGhpYmVybmF0aW9uX21vZGVzW2ldKTsKIAkJZWxzZQotCQkJYnVmICs9IHNwcmludGYoYnVmLCAiJXMiLCBwbV9kaXNrX21vZGVzW2ldKTsKLQkJaWYgKGkrMSAhPSBQTV9ESVNLX01BWCkKLQkJCWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgIiAiKTsKKwkJCWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgIiVzICIsIGhpYmVybmF0aW9uX21vZGVzW2ldKTsKIAl9CiAJYnVmICs9IHNwcmludGYoYnVmLCAiXG4iKTsKIAlyZXR1cm4gYnVmLXN0YXJ0OwpAQCAtMzg3LDM5ICs0MDksMzkgQEAKIAlpbnQgaTsKIAlpbnQgbGVuOwogCWNoYXIgKnA7Ci0Jc3VzcGVuZF9kaXNrX21ldGhvZF90IG1vZGUgPSAwOworCWludCBtb2RlID0gSElCRVJOQVRJT05fSU5WQUxJRDsKIAogCXAgPSBtZW1jaHIoYnVmLCAnXG4nLCBuKTsKIAlsZW4gPSBwID8gcCAtIGJ1ZiA6IG47CiAKIAltdXRleF9sb2NrKCZwbV9tdXRleCk7Ci0JZm9yIChpID0gUE1fRElTS19QTEFURk9STTsgaSA8IFBNX0RJU0tfTUFYOyBpKyspIHsKLQkJaWYgKCFzdHJuY21wKGJ1ZiwgcG1fZGlza19tb2Rlc1tpXSwgbGVuKSkgeworCWZvciAoaSA9IEhJQkVSTkFUSU9OX0ZJUlNUOyBpIDw9IEhJQkVSTkFUSU9OX01BWDsgaSsrKSB7CisJCWlmIChsZW4gPT0gc3RybGVuKGhpYmVybmF0aW9uX21vZGVzW2ldKQorCQkgICAgJiYgIXN0cm5jbXAoYnVmLCBoaWJlcm5hdGlvbl9tb2Rlc1tpXSwgbGVuKSkgewogCQkJbW9kZSA9IGk7CiAJCQlicmVhazsKIAkJfQogCX0KLQlpZiAobW9kZSkgeworCWlmIChtb2RlICE9IEhJQkVSTkFUSU9OX0lOVkFMSUQpIHsKIAkJc3dpdGNoIChtb2RlKSB7Ci0JCWNhc2UgUE1fRElTS19TSFVURE9XTjoKLQkJY2FzZSBQTV9ESVNLX1JFQk9PVDoKLQkJY2FzZSBQTV9ESVNLX1RFU1Q6Ci0JCWNhc2UgUE1fRElTS19URVNUUFJPQzoKLQkJCXBtX2Rpc2tfbW9kZSA9IG1vZGU7CisJCWNhc2UgSElCRVJOQVRJT05fU0hVVERPV046CisJCWNhc2UgSElCRVJOQVRJT05fUkVCT09UOgorCQljYXNlIEhJQkVSTkFUSU9OX1RFU1Q6CisJCWNhc2UgSElCRVJOQVRJT05fVEVTVFBST0M6CisJCQloaWJlcm5hdGlvbl9tb2RlID0gbW9kZTsKIAkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWYgKHBtX29wcyAmJiBwbV9vcHMtPmVudGVyICYmCi0JCQkgICAgKG1vZGUgPT0gcG1fb3BzLT5wbV9kaXNrX21vZGUpKQotCQkJCXBtX2Rpc2tfbW9kZSA9IG1vZGU7CisJCWNhc2UgSElCRVJOQVRJT05fUExBVEZPUk06CisJCQlpZiAoaGliZXJuYXRpb25fb3BzKQorCQkJCWhpYmVybmF0aW9uX21vZGUgPSBtb2RlOwogCQkJZWxzZQogCQkJCWVycm9yID0gLUVJTlZBTDsKIAkJfQotCX0gZWxzZSB7CisJfSBlbHNlCiAJCWVycm9yID0gLUVJTlZBTDsKLQl9CiAKLQlwcl9kZWJ1ZygiUE06IHN1c3BlbmQtdG8tZGlzayBtb2RlIHNldCB0byAnJXMnXG4iLAotCQkgcG1fZGlza19tb2Rlc1ttb2RlXSk7CisJaWYgKCFlcnJvcikKKwkJcHJfZGVidWcoIlBNOiBzdXNwZW5kLXRvLWRpc2sgbW9kZSBzZXQgdG8gJyVzJ1xuIiwKKwkJCSBoaWJlcm5hdGlvbl9tb2Rlc1ttb2RlXSk7CiAJbXV0ZXhfdW5sb2NrKCZwbV9tdXRleCk7CiAJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBuOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggZjZkZGE2OC4uODgxMjk4NSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYworKysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC0zMCw3ICszMCw2IEBACiBERUZJTkVfTVVURVgocG1fbXV0ZXgpOwogCiBzdHJ1Y3QgcG1fb3BzICpwbV9vcHM7Ci1zdXNwZW5kX2Rpc2tfbWV0aG9kX3QgcG1fZGlza19tb2RlID0gUE1fRElTS19TSFVURE9XTjsKIAogLyoqCiAgKglwbV9zZXRfb3BzIC0gU2V0IHRoZSBnbG9iYWwgcG93ZXIgbWV0aG9kIHRhYmxlLiAKQEAgLTQxLDEwICs0MCw2IEBACiB7CiAJbXV0ZXhfbG9jaygmcG1fbXV0ZXgpOwogCXBtX29wcyA9IG9wczsKLQlpZiAob3BzICYmIG9wcy0+cG1fZGlza19tb2RlICE9IFBNX0RJU0tfSU5WQUxJRCkgewotCQlwbV9kaXNrX21vZGUgPSBvcHMtPnBtX2Rpc2tfbW9kZTsKLQl9IGVsc2UKLQkJcG1fZGlza19tb2RlID0gUE1fRElTS19TSFVURE9XTjsKIAltdXRleF91bmxvY2soJnBtX211dGV4KTsKIH0KIApAQCAtMTAyLDI1ICs5NywyNiBAQAogCQl9CiAJfQogCi0JaWYgKHBtX29wcy0+cHJlcGFyZSkgewotCQlpZiAoKGVycm9yID0gcG1fb3BzLT5wcmVwYXJlKHN0YXRlKSkpCi0JCQlnb3RvIFRoYXc7Ci0JfQotCiAJc3VzcGVuZF9jb25zb2xlKCk7CiAJZXJyb3IgPSBkZXZpY2Vfc3VzcGVuZChQTVNHX1NVU1BFTkQpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgIlNvbWUgZGV2aWNlcyBmYWlsZWQgdG8gc3VzcGVuZFxuIik7Ci0JCWdvdG8gUmVzdW1lX2RldmljZXM7CisJCWdvdG8gUmVzdW1lX2NvbnNvbGU7CiAJfQorCWlmIChwbV9vcHMtPnByZXBhcmUpIHsKKwkJaWYgKChlcnJvciA9IHBtX29wcy0+cHJlcGFyZShzdGF0ZSkpKQorCQkJZ290byBSZXN1bWVfZGV2aWNlczsKKwl9CisKIAllcnJvciA9IGRpc2FibGVfbm9uYm9vdF9jcHVzKCk7CiAJaWYgKCFlcnJvcikKIAkJcmV0dXJuIDA7CiAKIAllbmFibGVfbm9uYm9vdF9jcHVzKCk7Ci0gUmVzdW1lX2RldmljZXM6CiAJcG1fZmluaXNoKHN0YXRlKTsKKyBSZXN1bWVfZGV2aWNlczoKIAlkZXZpY2VfcmVzdW1lKCk7CisgUmVzdW1lX2NvbnNvbGU6CiAJcmVzdW1lX2NvbnNvbGUoKTsKICBUaGF3OgogCXRoYXdfcHJvY2Vzc2VzKCk7CkBAIC0xODQsMjQgKzE4MCwxMiBAQAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwbV9zdGF0ZXNbUE1fU1VTUEVORF9NQVhdID0gewogCVtQTV9TVVNQRU5EX1NUQU5EQlldCT0gInN0YW5kYnkiLAogCVtQTV9TVVNQRU5EX01FTV0JPSAibWVtIiwKLQlbUE1fU1VTUEVORF9ESVNLXQk9ICJkaXNrIiwKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHZhbGlkX3N0YXRlKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKLQkvKiBTdXNwZW5kLXRvLWRpc2sgZG9lcyBub3QgcmVhbGx5IG5lZWQgbG93LWxldmVsIHN1cHBvcnQuCi0JICogSXQgY2FuIHdvcmsgd2l0aCBzaHV0ZG93bi9yZWJvb3QgaWYgbmVlZGVkLiBJZiBpdCBpc24ndAotCSAqIGNvbmZpZ3VyZWQsIHRoZW4gaXQgY2Fubm90IGJlIHN1cHBvcnRlZC4KLQkgKi8KLQlpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9ESVNLKQotI2lmZGVmIENPTkZJR19TT0ZUV0FSRV9TVVNQRU5ECi0JCXJldHVybiAxOwotI2Vsc2UKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQotCS8qIGFsbCBvdGhlciBzdGF0ZXMgbmVlZCBsb3dsZXZlbCBzdXBwb3J0IGFuZCBuZWVkIHRvIGJlCi0JICogdmFsaWQgdG8gdGhlIGxvd2xldmVsIGltcGxlbWVudGF0aW9uLCBubyB2YWxpZCBjYWxsYmFjaworCS8qIEFsbCBzdGF0ZXMgbmVlZCBsb3dsZXZlbCBzdXBwb3J0IGFuZCBuZWVkIHRvIGJlIHZhbGlkCisJICogdG8gdGhlIGxvd2xldmVsIGltcGxlbWVudGF0aW9uLCBubyB2YWxpZCBjYWxsYmFjawogCSAqIGltcGxpZXMgdGhhdCBub25lIGFyZSB2YWxpZC4gKi8KIAlpZiAoIXBtX29wcyB8fCAhcG1fb3BzLT52YWxpZCB8fCAhcG1fb3BzLT52YWxpZChzdGF0ZSkpCiAJCXJldHVybiAwOwpAQCAtMjI5LDExICsyMTMsNiBAQAogCWlmICghbXV0ZXhfdHJ5bG9jaygmcG1fbXV0ZXgpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JaWYgKHN0YXRlID09IFBNX1NVU1BFTkRfRElTSykgewotCQllcnJvciA9IHBtX3N1c3BlbmRfZGlzaygpOwotCQlnb3RvIFVubG9jazsKLQl9Ci0KIAlwcl9kZWJ1ZygiUE06IFByZXBhcmluZyBzeXN0ZW0gZm9yICVzIHNsZWVwXG4iLCBwbV9zdGF0ZXNbc3RhdGVdKTsKIAlpZiAoKGVycm9yID0gc3VzcGVuZF9wcmVwYXJlKHN0YXRlKSkpCiAJCWdvdG8gVW5sb2NrOwpAQCAtMjUxLDcgKzIzMCw3IEBACiAKIC8qKgogICoJcG1fc3VzcGVuZCAtIEV4dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbiBmb3Igc3VzcGVuZGluZyBzeXN0ZW0uCi0gKglAc3RhdGU6CQlFbnVtYXJ0ZWQgdmFsdWUgb2Ygc3RhdGUgdG8gZW50ZXIuCisgKglAc3RhdGU6CQlFbnVtZXJhdGVkIHZhbHVlIG9mIHN0YXRlIHRvIGVudGVyLgogICoKICAqCURldGVybWluZSB3aGV0aGVyIG9yIG5vdCB2YWx1ZSBpcyB3aXRoaW4gcmFuZ2UsIGdldCBzdGF0ZSAKICAqCXN0cnVjdHVyZSwgYW5kIGVudGVyIChhYm92ZSkuCkBAIC0yODksNyArMjY4LDEzIEBACiAJCWlmIChwbV9zdGF0ZXNbaV0gJiYgdmFsaWRfc3RhdGUoaSkpCiAJCQlzICs9IHNwcmludGYocywiJXMgIiwgcG1fc3RhdGVzW2ldKTsKIAl9Ci0JcyArPSBzcHJpbnRmKHMsIlxuIik7CisjaWZkZWYgQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQKKwlzICs9IHNwcmludGYocywgIiVzXG4iLCAiZGlzayIpOworI2Vsc2UKKwlpZiAocyAhPSBidWYpCisJCS8qIGNvbnZlcnQgdGhlIGxhc3Qgc3BhY2UgdG8gYSBuZXdsaW5lICovCisJCSoocy0xKSA9ICdcbic7CisjZW5kaWYKIAlyZXR1cm4gKHMgLSBidWYpOwogfQogCkBAIC0zMDQsOCArMjg5LDE0IEBACiAJcCA9IG1lbWNocihidWYsICdcbicsIG4pOwogCWxlbiA9IHAgPyBwIC0gYnVmIDogbjsKIAorCS8qIEZpcnN0LCBjaGVjayBpZiB3ZSBhcmUgcmVxdWVzdGVkIHRvIGhpYmVybmF0ZSAqLworCWlmIChsZW4gPT0gNCAmJiAhc3RybmNtcChidWYsICJkaXNrIiwgbGVuKSkgeworCQllcnJvciA9IGhpYmVybmF0ZSgpOworCQlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IG47CisJfQorCiAJZm9yIChzID0gJnBtX3N0YXRlc1tzdGF0ZV07IHN0YXRlIDwgUE1fU1VTUEVORF9NQVg7IHMrKywgc3RhdGUrKykgewotCQlpZiAoKnMgJiYgIXN0cm5jbXAoYnVmLCAqcywgbGVuKSkKKwkJaWYgKCpzICYmIGxlbiA9PSBzdHJsZW4oKnMpICYmICFzdHJuY21wKGJ1ZiwgKnMsIGxlbikpCiAJCQlicmVhazsKIAl9CiAJaWYgKHN0YXRlIDwgUE1fU1VTUEVORF9NQVggJiYgKnMpCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcG93ZXIuaCBiL2tlcm5lbC9wb3dlci9wb3dlci5oCmluZGV4IDM0YjQzNTQuLjUxMzgxNDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wb3dlci5oCisrKyBiL2tlcm5lbC9wb3dlci9wb3dlci5oCkBAIC0yNSwxMiArMjUsNyBAQAogICovCiAjZGVmaW5lIFNQQVJFX1BBR0VTCSgoMTAyNCAqIDEwMjQpID4+IFBBR0VfU0hJRlQpCiAKLWV4dGVybiBpbnQgcG1fc3VzcGVuZF9kaXNrKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHBtX3N1c3BlbmRfZGlzayh2b2lkKQotewotCXJldHVybiAtRVBFUk07Ci19CitleHRlcm4gc3RydWN0IGhpYmVybmF0aW9uX29wcyAqaGliZXJuYXRpb25fb3BzOwogI2VuZGlmCiAKIGV4dGVybiBpbnQgcGZuX2lzX25vc2F2ZSh1bnNpZ25lZCBsb25nKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCmluZGV4IDBlYjVjNDIuLmUwMjMzZDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKKysrIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwpAQCAtOCw3ICs4LDYgQEAKIAogI3VuZGVmIERFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI1LDI0ICsyNCw0MyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBmcmVlemVhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApCiB7Ci0JaWYgKChwID09IGN1cnJlbnQpIHx8IAorCWlmICgocCA9PSBjdXJyZW50KSB8fAogCSAgICAocC0+ZmxhZ3MgJiBQRl9OT0ZSRUVaRSkgfHwKLQkgICAgKHAtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpIHx8Ci0JICAgIChwLT5leGl0X3N0YXRlID09IEVYSVRfREVBRCkpCisJICAgIChwLT5leGl0X3N0YXRlICE9IDApKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIGZyZWV6aW5nIGlzIGNvbXBsZXRlLCBtYXJrIGN1cnJlbnQgcHJvY2VzcyBhcyBmcm96ZW4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZyb3plbl9wcm9jZXNzKHZvaWQpCit7CisJaWYgKCF1bmxpa2VseShjdXJyZW50LT5mbGFncyAmIFBGX05PRlJFRVpFKSkgeworCQljdXJyZW50LT5mbGFncyB8PSBQRl9GUk9aRU47CisJCXdtYigpOworCX0KKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY3VycmVudCwgVElGX0ZSRUVaRSk7Cit9CisKIC8qIFJlZnJpZ2VyYXRvciBpcyBwbGFjZSB3aGVyZSBmcm96ZW4gcHJvY2Vzc2VzIGFyZSBzdG9yZWQgOi0pLiAqLwogdm9pZCByZWZyaWdlcmF0b3Iodm9pZCkKIHsKIAkvKiBIbW0sIHNob3VsZCB3ZSBiZSBhbGxvd2VkIHRvIHN1c3BlbmQgd2hlbiB0aGVyZSBhcmUgcmVhbHRpbWUKIAkgICBwcm9jZXNzZXMgYXJvdW5kPyAqLwogCWxvbmcgc2F2ZTsKKworCXRhc2tfbG9jayhjdXJyZW50KTsKKwlpZiAoZnJlZXppbmcoY3VycmVudCkpIHsKKwkJZnJvemVuX3Byb2Nlc3MoKTsKKwkJdGFza191bmxvY2soY3VycmVudCk7CisJfSBlbHNlIHsKKwkJdGFza191bmxvY2soY3VycmVudCk7CisJCXJldHVybjsKKwl9CiAJc2F2ZSA9IGN1cnJlbnQtPnN0YXRlOwogCXByX2RlYnVnKCIlcyBlbnRlcmVkIHJlZnJpZ2VyYXRvclxuIiwgY3VycmVudC0+Y29tbSk7CiAKLQlmcm96ZW5fcHJvY2VzcyhjdXJyZW50KTsKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlyZWNhbGNfc2lncGVuZGluZygpOyAvKiBXZSBzZW50IGZha2Ugc2lnbmFsLCBjbGVhbiBpdCB1cCAqLwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CkBAIC04Myw3ICsxMDEsNyBAQAogCQlwcl9kZWJ1ZygiICBjbGVhbiB1cDogJXNcbiIsIHAtPmNvbW0pOwogCQlkb19ub3RfZnJlZXplKHApOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQlyZWNhbGNfc2lncGVuZGluZ190c2socCk7CisJCXJlY2FsY19zaWdwZW5kaW5nX2FuZF93YWtlKHApOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CiAJfQogfQpAQCAtMTE0LDIyICsxMzIsMTIgQEAKIAkJCQljYW5jZWxfZnJlZXppbmcocCk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAoaXNfdXNlcl9zcGFjZShwKSkgewotCQkJCWlmICghZnJlZXplX3VzZXJfc3BhY2UpCi0JCQkJCWNvbnRpbnVlOworCQkJaWYgKGZyZWV6ZV91c2VyX3NwYWNlICYmICFpc191c2VyX3NwYWNlKHApKQorCQkJCWNvbnRpbnVlOwogCi0JCQkJLyogRnJlZXplIHRoZSB0YXNrIHVubGVzcyB0aGVyZSBpcyBhIHZmb3JrCi0JCQkJICogY29tcGxldGlvbiBwZW5kaW5nCi0JCQkJICovCi0JCQkJaWYgKCFwLT52Zm9ya19kb25lKQotCQkJCQlmcmVlemVfcHJvY2VzcyhwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGZyZWV6ZV91c2VyX3NwYWNlKQotCQkJCQljb250aW51ZTsKLQotCQkJCWZyZWV6ZV9wcm9jZXNzKHApOwotCQkJfQotCQkJdG9kbysrOworCQkJZnJlZXplX3Byb2Nlc3MocCk7CisJCQlpZiAoIWZyZWV6ZXJfc2hvdWxkX3NraXAocCkpCisJCQkJdG9kbysrOwogCQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXlpZWxkKCk7CQkJLyogWWllbGQgaXMgb2theSBoZXJlICovCkBAIC0xNTEsMTMgKzE1OSwxNiBAQAogCQkJCVRJTUVPVVQgLyBIWiwgdG9kbyk7CiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKLQkJCWlmIChpc191c2VyX3NwYWNlKHApID09ICFmcmVlemVfdXNlcl9zcGFjZSkKKwkJCWlmIChmcmVlemVfdXNlcl9zcGFjZSAmJiAhaXNfdXNlcl9zcGFjZShwKSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKGZyZWV6ZWFibGUocCkgJiYgIWZyb3plbihwKSkKKwkJCXRhc2tfbG9jayhwKTsKKwkJCWlmIChmcmVlemVhYmxlKHApICYmICFmcm96ZW4ocCkgJiYKKwkJCSAgICAhZnJlZXplcl9zaG91bGRfc2tpcChwKSkKIAkJCQlwcmludGsoS0VSTl9FUlIgIiAlc1xuIiwgcC0+Y29tbSk7CiAKIAkJCWNhbmNlbF9mcmVlemluZyhwKTsKKwkJCXRhc2tfdW5sb2NrKHApOwogCQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJfQpAQCAtMjAyLDkgKzIxMyw3IEBACiAJCWlmIChpc191c2VyX3NwYWNlKHApID09ICF0aGF3X3VzZXJfc3BhY2UpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIXRoYXdfcHJvY2VzcyhwKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiBTdHJhbmdlLCAlcyBub3Qgc3RvcHBlZFxuIiwKLQkJCQlwLT5jb21tICk7CisJCXRoYXdfcHJvY2VzcyhwKTsKIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKaW5kZXggMTI4ZGExMS4uYTNiNzg1NCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKKysrIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTYwOCw3ICs2MDcsOCBAQAogICovCiAKIHZvaWQgX19pbml0Ci1yZWdpc3Rlcl9ub3NhdmVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCitfX3JlZ2lzdGVyX25vc2F2ZV9yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbiwKKwkJCSBpbnQgdXNlX2ttYWxsb2MpCiB7CiAJc3RydWN0IG5vc2F2ZV9yZWdpb24gKnJlZ2lvbjsKIApAQCAtNjI0LDggKzYyNCwxMyBAQAogCQkJZ290byBSZXBvcnQ7CiAJCX0KIAl9Ci0JLyogVGhpcyBhbGxvY2F0aW9uIGNhbm5vdCBmYWlsICovCi0JcmVnaW9uID0gYWxsb2NfYm9vdG1lbV9sb3coc2l6ZW9mKHN0cnVjdCBub3NhdmVfcmVnaW9uKSk7CisJaWYgKHVzZV9rbWFsbG9jKSB7CisJCS8qIGR1cmluZyBpbml0LCB0aGlzIHNob3VsZG4ndCBmYWlsICovCisJCXJlZ2lvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBub3NhdmVfcmVnaW9uKSwgR0ZQX0tFUk5FTCk7CisJCUJVR19PTighcmVnaW9uKTsKKwl9IGVsc2UKKwkJLyogVGhpcyBhbGxvY2F0aW9uIGNhbm5vdCBmYWlsICovCisJCXJlZ2lvbiA9IGFsbG9jX2Jvb3RtZW1fbG93KHNpemVvZihzdHJ1Y3Qgbm9zYXZlX3JlZ2lvbikpOwogCXJlZ2lvbi0+c3RhcnRfcGZuID0gc3RhcnRfcGZuOwogCXJlZ2lvbi0+ZW5kX3BmbiA9IGVuZF9wZm47CiAJbGlzdF9hZGRfdGFpbCgmcmVnaW9uLT5saXN0LCAmbm9zYXZlX3JlZ2lvbnMpOwpAQCAtMTIyOCw3ICsxMjMzLDcgQEAKIAlucl9jb3B5X3BhZ2VzID0gbnJfcGFnZXM7CiAJbnJfbWV0YV9wYWdlcyA9IERJVl9ST1VORF9VUChucl9wYWdlcyAqIHNpemVvZihsb25nKSwgUEFHRV9TSVpFKTsKIAotCXByaW50aygic3dzdXNwOiBjcml0aWNhbCBzZWN0aW9uLzogZG9uZSAoJWQgcGFnZXMgY29waWVkKVxuIiwgbnJfcGFnZXMpOworCXByaW50aygic3dzdXNwOiBjcml0aWNhbCBzZWN0aW9uOiBkb25lICglZCBwYWdlcyBjb3BpZWQpXG4iLCBucl9wYWdlcyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zd2FwLmMgYi9rZXJuZWwvcG93ZXIvc3dhcC5jCmluZGV4IGU4M2VkOTkuLjhiMWExYjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zd2FwLmMKKysrIGIva2VybmVsL3Bvd2VyL3N3YXAuYwpAQCAtMTIsNyArMTIsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgpAQCAtNTg1LDcgKzU4NCw3IEBACiAJcmVzdW1lX2JkZXYgPSBvcGVuX2J5X2Rldm51bShzd3N1c3BfcmVzdW1lX2RldmljZSwgRk1PREVfUkVBRCk7CiAJaWYgKCFJU19FUlIocmVzdW1lX2JkZXYpKSB7CiAJCXNldF9ibG9ja3NpemUocmVzdW1lX2JkZXYsIFBBR0VfU0laRSk7Ci0JCW1lbXNldChzd3N1c3BfaGVhZGVyLCAwLCBzaXplb2YoUEFHRV9TSVpFKSk7CisJCW1lbXNldChzd3N1c3BfaGVhZGVyLCAwLCBQQUdFX1NJWkUpOwogCQllcnJvciA9IGJpb19yZWFkX3BhZ2Uoc3dzdXNwX3Jlc3VtZV9ibG9jaywKIAkJCQkJc3dzdXNwX2hlYWRlciwgTlVMTCk7CiAJCWlmIChlcnJvcikKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci91c2VyLmMgYi9rZXJuZWwvcG93ZXIvdXNlci5jCmluZGV4IDA0MDU2MGQuLjI0ZDdkNzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci91c2VyLmMKKysrIGIva2VybmVsL3Bvd2VyL3VzZXIuYwpAQCAtMTMwLDE2ICsxMzAsMTYgQEAKIHsKIAlpbnQgZXJyb3IgPSAwOwogCi0JaWYgKHBtX29wcyAmJiBwbV9vcHMtPnByZXBhcmUpCi0JCWVycm9yID0gcG1fb3BzLT5wcmVwYXJlKFBNX1NVU1BFTkRfRElTSyk7CisJaWYgKGhpYmVybmF0aW9uX29wcykKKwkJZXJyb3IgPSBoaWJlcm5hdGlvbl9vcHMtPnByZXBhcmUoKTsKIAogCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtX2ZpbmlzaCh2b2lkKQogewotCWlmIChwbV9vcHMgJiYgcG1fb3BzLT5maW5pc2gpCi0JCXBtX29wcy0+ZmluaXNoKFBNX1NVU1BFTkRfRElTSyk7CisJaWYgKGhpYmVybmF0aW9uX29wcykKKwkJaGliZXJuYXRpb25fb3BzLT5maW5pc2goKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc25hcHNob3Rfc3VzcGVuZChpbnQgcGxhdGZvcm1fc3VzcGVuZCkKQEAgLTM4NCw3ICszODQsNyBAQAogCQlzd2l0Y2ggKGFyZykgewogCiAJCWNhc2UgUE1PUFNfUFJFUEFSRToKLQkJCWlmIChwbV9vcHMgJiYgcG1fb3BzLT5lbnRlcikgeworCQkJaWYgKGhpYmVybmF0aW9uX29wcykgewogCQkJCWRhdGEtPnBsYXRmb3JtX3N1c3BlbmQgPSAxOwogCQkJCWVycm9yID0gMDsKIAkJCX0gZWxzZSB7CkBAIC0zOTUsOCArMzk1LDcgQEAKIAkJY2FzZSBQTU9QU19FTlRFUjoKIAkJCWlmIChkYXRhLT5wbGF0Zm9ybV9zdXNwZW5kKSB7CiAJCQkJa2VybmVsX3NodXRkb3duX3ByZXBhcmUoU1lTVEVNX1NVU1BFTkRfRElTSyk7Ci0JCQkJZXJyb3IgPSBwbV9vcHMtPmVudGVyKFBNX1NVU1BFTkRfRElTSyk7Ci0JCQkJZXJyb3IgPSAwOworCQkJCWVycm9yID0gaGliZXJuYXRpb25fb3BzLT5lbnRlcigpOwogCQkJfQogCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCA0YjQ3ZTU5Li4wYmJkZWFjIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtOTMxLDggKzkzMCwxNiBAQAogewogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNvbnNvbGUgKmJvb3Rjb25zb2xlID0gTlVMTDsKIAotCWlmIChwcmVmZXJyZWRfY29uc29sZSA8IDApCisJaWYgKGNvbnNvbGVfZHJpdmVycykgeworCQlpZiAoY29uc29sZS0+ZmxhZ3MgJiBDT05fQk9PVCkKKwkJCXJldHVybjsKKwkJaWYgKGNvbnNvbGVfZHJpdmVycy0+ZmxhZ3MgJiBDT05fQk9PVCkKKwkJCWJvb3Rjb25zb2xlID0gY29uc29sZV9kcml2ZXJzOworCX0KKworCWlmIChwcmVmZXJyZWRfY29uc29sZSA8IDAgfHwgYm9vdGNvbnNvbGUgfHwgIWNvbnNvbGVfZHJpdmVycykKIAkJcHJlZmVycmVkX2NvbnNvbGUgPSBzZWxlY3RlZF9jb25zb2xlOwogCiAJLyoKQEAgLTk3OCw4ICs5ODUsMTEgQEAKIAlpZiAoIShjb25zb2xlLT5mbGFncyAmIENPTl9FTkFCTEVEKSkKIAkJcmV0dXJuOwogCi0JaWYgKGNvbnNvbGVfZHJpdmVycyAmJiAoY29uc29sZV9kcml2ZXJzLT5mbGFncyAmIENPTl9CT09UKSkgewotCQl1bnJlZ2lzdGVyX2NvbnNvbGUoY29uc29sZV9kcml2ZXJzKTsKKwlpZiAoYm9vdGNvbnNvbGUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY29uc29sZSBoYW5kb3ZlcjogYm9vdCBbJXMlZF0gLT4gcmVhbCBbJXMlZF1cbiIsCisJCSAgICAgICBib290Y29uc29sZS0+bmFtZSwgYm9vdGNvbnNvbGUtPmluZGV4LAorCQkgICAgICAgY29uc29sZS0+bmFtZSwgY29uc29sZS0+aW5kZXgpOworCQl1bnJlZ2lzdGVyX2NvbnNvbGUoYm9vdGNvbnNvbGUpOwogCQljb25zb2xlLT5mbGFncyAmPSB+Q09OX1BSSU5UQlVGRkVSOwogCX0KIApAQCAtMTAzMCwxNiArMTA0MCwxMSBAQAogCQl9CiAJfQogCi0JLyogSWYgbGFzdCBjb25zb2xlIGlzIHJlbW92ZWQsIHdlIHJlLWVuYWJsZSBwaWNraW5nIHRoZSBmaXJzdAotCSAqIG9uZSB0aGF0IGdldHMgcmVnaXN0ZXJlZC4gV2l0aG91dCB0aGF0LCBwbWFjIGVhcmx5IGJvb3QgY29uc29sZQotCSAqIHdvdWxkIHByZXZlbnQgZmJjb24gZnJvbSB0YWtpbmcgb3Zlci4KLQkgKgorCS8qCiAJICogSWYgdGhpcyBpc24ndCB0aGUgbGFzdCBjb25zb2xlIGFuZCBpdCBoYXMgQ09OX0NPTlNERVYgc2V0LCB3ZQogCSAqIG5lZWQgdG8gc2V0IGl0IG9uIHRoZSBuZXh0IHByZWZlcnJlZCBjb25zb2xlLgogCSAqLwotCWlmIChjb25zb2xlX2RyaXZlcnMgPT0gTlVMTCkKLQkJcHJlZmVycmVkX2NvbnNvbGUgPSBzZWxlY3RlZF9jb25zb2xlOwotCWVsc2UgaWYgKGNvbnNvbGUtPmZsYWdzICYgQ09OX0NPTlNERVYpCisJaWYgKGNvbnNvbGVfZHJpdmVycyAhPSBOVUxMICYmIGNvbnNvbGUtPmZsYWdzICYgQ09OX0NPTlNERVYpCiAJCWNvbnNvbGVfZHJpdmVycy0+ZmxhZ3MgfD0gQ09OX0NPTlNERVY7CiAKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHJvZmlsZS5jIGIva2VybmVsL3Byb2ZpbGUuYwppbmRleCA5YmZhZGIyLi41YjIwZmU5IDEwMDY0NAotLS0gYS9rZXJuZWwvcHJvZmlsZS5jCisrKyBiL2tlcm5lbC9wcm9maWxlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiBzdHJ1Y3QgcHJvZmlsZV9oaXQgewogCXUzMiBwYywgaGl0czsKQEAgLTM0MCw2ICszNDEsNyBAQAogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIENQVV9VUF9QUkVQQVJFOgorCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgogCQlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKIAkJcGVyX2NwdShjcHVfcHJvZmlsZV9mbGlwLCBjcHUpID0gMDsKIAkJaWYgKCFwZXJfY3B1KGNwdV9wcm9maWxlX2hpdHMsIGNwdSlbMV0pIHsKQEAgLTM2NSwxMCArMzY3LDEzIEBACiAJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCQlyZXR1cm4gTk9USUZZX0JBRDsKIAljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKIAkJY3B1X3NldChjcHUsIHByb2ZfY3B1X21hc2spOwogCQlicmVhazsKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CiAJY2FzZSBDUFVfREVBRDoKKwljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAkJY3B1X2NsZWFyKGNwdSwgcHJvZl9jcHVfbWFzayk7CiAJCWlmIChwZXJfY3B1KGNwdV9wcm9maWxlX2hpdHMsIGNwdSlbMF0pIHsKIAkJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UocGVyX2NwdShjcHVfcHJvZmlsZV9oaXRzLCBjcHUpWzBdKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCA0ZDUwZTA2Li5hZDc5NDlhIDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTYxLDYgKzE2Miw4IEBACiB7CiAJaW50IHJldHZhbDsKIAorCWF1ZGl0X3B0cmFjZSh0YXNrKTsKKwogCXJldHZhbCA9IC1FUEVSTTsKIAlpZiAodGFzay0+cGlkIDw9IDEpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXBkYXRlLmMgYi9rZXJuZWwvcmN1cGRhdGUuYwppbmRleCAzNTU0Yjc2Li4yYzJkZDg0IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cGRhdGUuYworKysgYi9rZXJuZWwvcmN1cGRhdGUuYwpAQCAtNTU4LDkgKzU1OCwxMSBAQAogCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CiAJCXJjdV9vbmxpbmVfY3B1KGNwdSk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RFQUQ6CisJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCXJjdV9vZmZsaW5lX2NwdShjcHUpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggYmNkMTRlOC4uNTViYTgyYSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC01MDIsMTAgKzUwMiw2IEBACiAJLm5hbWUgPSAic2NoZWQiCiB9OwogCi1zdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyAqdG9ydHVyZV9vcHNbXSA9Ci0JeyAmcmN1X29wcywgJnJjdV9zeW5jX29wcywgJnJjdV9iaF9vcHMsICZyY3VfYmhfc3luY19vcHMsICZzcmN1X29wcywKLQkgICZzY2hlZF9vcHMsIE5VTEwgfTsKLQogLyoKICAqIFJDVSB0b3J0dXJlIHdyaXRlciBrdGhyZWFkLiAgUmVwZWF0ZWRseSBzdWJzdGl0dXRlcyBhIG5ldyBzdHJ1Y3R1cmUKICAqIGZvciB0aGF0IHBvaW50ZWQgdG8gYnkgcmN1X3RvcnR1cmVfY3VycmVudCwgZnJlZWluZyB0aGUgb2xkIHN0cnVjdHVyZQpAQCAtNTM0LDcgKzUzMCw3IEBACiAJCXJwLT5ydG9ydF9tYnRlc3QgPSAxOwogCQlyY3VfYXNzaWduX3BvaW50ZXIocmN1X3RvcnR1cmVfY3VycmVudCwgcnApOwogCQlzbXBfd21iKCk7Ci0JCWlmIChvbGRfcnAgIT0gTlVMTCkgeworCQlpZiAob2xkX3JwKSB7CiAJCQlpID0gb2xkX3JwLT5ydG9ydF9waXBlX2NvdW50OwogCQkJaWYgKGkgPiBSQ1VfVE9SVFVSRV9QSVBFX0xFTikKIAkJCQlpID0gUkNVX1RPUlRVUkVfUElQRV9MRU47CkBAIC02ODUsNyArNjgxLDcgQEAKIAkJCSAgICAgICBhdG9taWNfcmVhZCgmcmN1X3RvcnR1cmVfd2NvdW50W2ldKSk7CiAJfQogCWNudCArPSBzcHJpbnRmKCZwYWdlW2NudF0sICJcbiIpOwotCWlmIChjdXJfb3BzLT5zdGF0cyAhPSBOVUxMKQorCWlmIChjdXJfb3BzLT5zdGF0cykKIAkJY250ICs9IGN1cl9vcHMtPnN0YXRzKCZwYWdlW2NudF0pOwogCXJldHVybiBjbnQ7CiB9CkBAIC03NDksMTMgKzc0NSwxMyBAQAogCiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCB0bXBfbWFzayk7CiAKLQlpZiAocmVhZGVyX3Rhc2tzICE9IE5VTEwpIHsKKwlpZiAocmVhZGVyX3Rhc2tzKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBucmVhbHJlYWRlcnM7IGkrKykKIAkJCWlmIChyZWFkZXJfdGFza3NbaV0pCiAJCQkJc2V0X2NwdXNfYWxsb3dlZChyZWFkZXJfdGFza3NbaV0sIHRtcF9tYXNrKTsKIAl9CiAKLQlpZiAoZmFrZXdyaXRlcl90YXNrcyAhPSBOVUxMKSB7CisJaWYgKGZha2V3cml0ZXJfdGFza3MpIHsKIAkJZm9yIChpID0gMDsgaSA8IG5mYWtld3JpdGVyczsgaSsrKQogCQkJaWYgKGZha2V3cml0ZXJfdGFza3NbaV0pCiAJCQkJc2V0X2NwdXNfYWxsb3dlZChmYWtld3JpdGVyX3Rhc2tzW2ldLCB0bXBfbWFzayk7CkBAIC04MDgsMjEgKzgwNCwyMSBAQAogCWludCBpOwogCiAJZnVsbHN0b3AgPSAxOwotCWlmIChzaHVmZmxlcl90YXNrICE9IE5VTEwpIHsKKwlpZiAoc2h1ZmZsZXJfdGFzaykgewogCQlWRVJCT1NFX1BSSU5US19TVFJJTkcoIlN0b3BwaW5nIHJjdV90b3J0dXJlX3NodWZmbGUgdGFzayIpOwogCQlrdGhyZWFkX3N0b3Aoc2h1ZmZsZXJfdGFzayk7CiAJfQogCXNodWZmbGVyX3Rhc2sgPSBOVUxMOwogCi0JaWYgKHdyaXRlcl90YXNrICE9IE5VTEwpIHsKKwlpZiAod3JpdGVyX3Rhc2spIHsKIAkJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJTdG9wcGluZyByY3VfdG9ydHVyZV93cml0ZXIgdGFzayIpOwogCQlrdGhyZWFkX3N0b3Aod3JpdGVyX3Rhc2spOwogCX0KIAl3cml0ZXJfdGFzayA9IE5VTEw7CiAKLQlpZiAocmVhZGVyX3Rhc2tzICE9IE5VTEwpIHsKKwlpZiAocmVhZGVyX3Rhc2tzKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBucmVhbHJlYWRlcnM7IGkrKykgewotCQkJaWYgKHJlYWRlcl90YXNrc1tpXSAhPSBOVUxMKSB7CisJCQlpZiAocmVhZGVyX3Rhc2tzW2ldKSB7CiAJCQkJVkVSQk9TRV9QUklOVEtfU1RSSU5HKAogCQkJCQkiU3RvcHBpbmcgcmN1X3RvcnR1cmVfcmVhZGVyIHRhc2siKTsKIAkJCQlrdGhyZWFkX3N0b3AocmVhZGVyX3Rhc2tzW2ldKTsKQEAgLTgzNCw5ICs4MzAsOSBAQAogCX0KIAlyY3VfdG9ydHVyZV9jdXJyZW50ID0gTlVMTDsKIAotCWlmIChmYWtld3JpdGVyX3Rhc2tzICE9IE5VTEwpIHsKKwlpZiAoZmFrZXdyaXRlcl90YXNrcykgewogCQlmb3IgKGkgPSAwOyBpIDwgbmZha2V3cml0ZXJzOyBpKyspIHsKLQkJCWlmIChmYWtld3JpdGVyX3Rhc2tzW2ldICE9IE5VTEwpIHsKKwkJCWlmIChmYWtld3JpdGVyX3Rhc2tzW2ldKSB7CiAJCQkJVkVSQk9TRV9QUklOVEtfU1RSSU5HKAogCQkJCQkiU3RvcHBpbmcgcmN1X3RvcnR1cmVfZmFrZXdyaXRlciB0YXNrIik7CiAJCQkJa3RocmVhZF9zdG9wKGZha2V3cml0ZXJfdGFza3NbaV0pOwpAQCAtODQ3LDcgKzg0Myw3IEBACiAJCWZha2V3cml0ZXJfdGFza3MgPSBOVUxMOwogCX0KIAotCWlmIChzdGF0c190YXNrICE9IE5VTEwpIHsKKwlpZiAoc3RhdHNfdGFzaykgewogCQlWRVJCT1NFX1BSSU5US19TVFJJTkcoIlN0b3BwaW5nIHJjdV90b3J0dXJlX3N0YXRzIHRhc2siKTsKIAkJa3RocmVhZF9zdG9wKHN0YXRzX3Rhc2spOwogCX0KQEAgLTg1OCw3ICs4NTQsNyBAQAogCiAJcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQoKTsgIC8qIC1BZnRlci0gdGhlIHN0YXRzIHRocmVhZCBpcyBzdG9wcGVkISAqLwogCi0JaWYgKGN1cl9vcHMtPmNsZWFudXAgIT0gTlVMTCkKKwlpZiAoY3VyX29wcy0+Y2xlYW51cCkKIAkJY3VyX29wcy0+Y2xlYW51cCgpOwogCWlmIChhdG9taWNfcmVhZCgmbl9yY3VfdG9ydHVyZV9lcnJvcikpCiAJCXJjdV90b3J0dXJlX3ByaW50X21vZHVsZV9wYXJtcygiRW5kIG9mIHRlc3Q6IEZBSUxVUkUiKTsKQEAgLTg2NiwyNyArODYyLDI4IEBACiAJCXJjdV90b3J0dXJlX3ByaW50X21vZHVsZV9wYXJtcygiRW5kIG9mIHRlc3Q6IFNVQ0NFU1MiKTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIGludCBfX2luaXQKIHJjdV90b3J0dXJlX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIAlpbnQgY3B1OwogCWludCBmaXJzdGVyciA9IDA7CisJc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKnRvcnR1cmVfb3BzW10gPQorCQl7ICZyY3Vfb3BzLCAmcmN1X3N5bmNfb3BzLCAmcmN1X2JoX29wcywgJnJjdV9iaF9zeW5jX29wcywKKwkJICAmc3JjdV9vcHMsICZzY2hlZF9vcHMsIH07CiAKIAkvKiBQcm9jZXNzIGFyZ3MgYW5kIHRlbGwgdGhlIHdvcmxkIHRoYXQgdGhlIHRvcnR1cmVyIGlzIG9uIHRoZSBqb2IuICovCi0KLQlmb3IgKGkgPSAwOyBjdXJfb3BzID0gdG9ydHVyZV9vcHNbaV0sIGN1cl9vcHMgIT0gTlVMTDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodG9ydHVyZV9vcHMpOyBpKyspIHsKIAkJY3VyX29wcyA9IHRvcnR1cmVfb3BzW2ldOwotCQlpZiAoc3RyY21wKHRvcnR1cmVfdHlwZSwgY3VyX29wcy0+bmFtZSkgPT0gMCkgeworCQlpZiAoc3RyY21wKHRvcnR1cmVfdHlwZSwgY3VyX29wcy0+bmFtZSkgPT0gMCkKIAkJCWJyZWFrOwotCQl9CiAJfQotCWlmIChjdXJfb3BzID09IE5VTEwpIHsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKHRvcnR1cmVfb3BzKSkgewogCQlwcmludGsoS0VSTl9BTEVSVCAicmN1dG9ydHVyZTogaW52YWxpZCB0b3J0dXJlIHR5cGU6IFwiJXNcIlxuIiwKIAkJICAgICAgIHRvcnR1cmVfdHlwZSk7CiAJCXJldHVybiAoLUVJTlZBTCk7CiAJfQotCWlmIChjdXJfb3BzLT5pbml0ICE9IE5VTEwpCisJaWYgKGN1cl9vcHMtPmluaXQpCiAJCWN1cl9vcHMtPmluaXQoKTsgLyogbm8gImdvdG8gdW53aW5kIiBwcmlvciB0byB0aGlzIHBvaW50ISEhICovCiAKIAlpZiAobnJlYWRlcnMgPj0gMCkKQEAgLTg5OSw3ICs4OTYsNyBAQAogCS8qIFNldCB1cCB0aGUgZnJlZWxpc3QuICovCiAKIAlJTklUX0xJU1RfSEVBRCgmcmN1X3RvcnR1cmVfZnJlZWxpc3QpOwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocmN1X3RvcnR1cmVzKSAvIHNpemVvZihyY3VfdG9ydHVyZXNbMF0pOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyY3VfdG9ydHVyZXMpOyBpKyspIHsKIAkJcmN1X3RvcnR1cmVzW2ldLnJ0b3J0X21idGVzdCA9IDA7CiAJCWxpc3RfYWRkX3RhaWwoJnJjdV90b3J0dXJlc1tpXS5ydG9ydF9mcmVlLAogCQkJICAgICAgJnJjdV90b3J0dXJlX2ZyZWVsaXN0KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKaW5kZXggNTc3ZjI1MS4uNDMxMTEwMSAxMDA2NDQKLS0tIGEva2VybmVsL3JlbGF5LmMKKysrIGIva2VybmVsL3JlbGF5LmMKQEAgLTMxMCwxNiArMzEwLDEzIEBACiAKIC8qKgogICoJd2FrZXVwX3JlYWRlcnMgLSB3YWtlIHVwIHJlYWRlcnMgd2FpdGluZyBvbiBhIGNoYW5uZWwKLSAqCUB3b3JrOiB3b3JrIHN0cnVjdCB0aGF0IGNvbnRhaW5zIHRoZSB0aGUgY2hhbm5lbCBidWZmZXIKKyAqCUBkYXRhOiBjb250YWlucyB0aGUgY2hhbm5lbCBidWZmZXIKICAqCi0gKglUaGlzIGlzIHRoZSB3b3JrIGZ1bmN0aW9uIHVzZWQgdG8gZGVmZXIgcmVhZGVyIHdha2luZy4gIFRoZQotICoJcmVhc29uIHdha2luZyBpcyBkZWZlcnJlZCBpcyB0aGF0IGNhbGxpbmcgZGlyZWN0bHkgZnJvbSB3cml0ZQotICoJY2F1c2VzIHByb2JsZW1zIGlmIHlvdSdyZSB3cml0aW5nIGZyb20gc2F5IHRoZSBzY2hlZHVsZXIuCisgKglUaGlzIGlzIHRoZSB0aW1lciBmdW5jdGlvbiB1c2VkIHRvIGRlZmVyIHJlYWRlciB3YWtpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIHdha2V1cF9yZWFkZXJzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIHdha2V1cF9yZWFkZXJzKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgcmNoYW5fYnVmICpidWYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJjaGFuX2J1Ziwgd2FrZV9yZWFkZXJzLndvcmspOworCXN0cnVjdCByY2hhbl9idWYgKmJ1ZiA9IChzdHJ1Y3QgcmNoYW5fYnVmICopZGF0YTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmJ1Zi0+cmVhZF93YWl0KTsKIH0KIApAQCAtMzM3LDExICszMzQsOSBAQAogCWlmIChpbml0KSB7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJ1Zi0+cmVhZF93YWl0KTsKIAkJa3JlZl9pbml0KCZidWYtPmtyZWYpOwotCQlJTklUX0RFTEFZRURfV09SSygmYnVmLT53YWtlX3JlYWRlcnMsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJmJ1Zi0+d2FrZV9yZWFkZXJzKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQl9CisJCXNldHVwX3RpbWVyKCZidWYtPnRpbWVyLCB3YWtldXBfcmVhZGVycywgKHVuc2lnbmVkIGxvbmcpYnVmKTsKKwl9IGVsc2UKKwkJZGVsX3RpbWVyX3N5bmMoJmJ1Zi0+dGltZXIpOwogCiAJYnVmLT5zdWJidWZzX3Byb2R1Y2VkID0gMDsKIAlidWYtPnN1YmJ1ZnNfY29uc3VtZWQgPSAwOwpAQCAtNDQ3LDggKzQ0Miw3IEBACiBzdGF0aWMgdm9pZCByZWxheV9jbG9zZV9idWYoc3RydWN0IHJjaGFuX2J1ZiAqYnVmKQogewogCWJ1Zi0+ZmluYWxpemVkID0gMTsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZidWYtPndha2VfcmVhZGVycyk7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlkZWxfdGltZXJfc3luYygmYnVmLT50aW1lcik7CiAJa3JlZl9wdXQoJmJ1Zi0+a3JlZiwgcmVsYXlfcmVtb3ZlX2J1Zik7CiB9CiAKQEAgLTQ5MCw2ICs0ODQsNyBAQAogCiAJc3dpdGNoKGFjdGlvbikgewogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CiAJCW11dGV4X2xvY2soJnJlbGF5X2NoYW5uZWxzX211dGV4KTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmcmVsYXlfY2hhbm5lbHMsIGxpc3QpIHsKIAkJCWlmIChjaGFuLT5idWZbaG90Y3B1XSkKQEAgLTUwNiw2ICs1MDEsNyBAQAogCQltdXRleF91bmxvY2soJnJlbGF5X2NoYW5uZWxzX211dGV4KTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfREVBRDoKKwljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAkJLyogTm8gbmVlZCB0byBmbHVzaCB0aGUgY3B1IDogd2lsbCBiZSBmbHVzaGVkIHVwb24KIAkJICogZmluYWwgcmVsYXlfZmx1c2goKSBjYWxsLiAqLwogCQlicmVhazsKQEAgLTYwOCwxMSArNjA0LDE0IEBACiAJCWJ1Zi0+ZGVudHJ5LT5kX2lub2RlLT5pX3NpemUgKz0gYnVmLT5jaGFuLT5zdWJidWZfc2l6ZSAtCiAJCQlidWYtPnBhZGRpbmdbb2xkX3N1YmJ1Zl07CiAJCXNtcF9tYigpOwotCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmYnVmLT5yZWFkX3dhaXQpKSB7Ci0JCQlQUkVQQVJFX0RFTEFZRURfV09SSygmYnVmLT53YWtlX3JlYWRlcnMsCi0JCQkJCSAgICAgd2FrZXVwX3JlYWRlcnMpOwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZidWYtPndha2VfcmVhZGVycywgMSk7Ci0JCX0KKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmJ1Zi0+cmVhZF93YWl0KSkKKwkJCS8qCisJCQkgKiBDYWxsaW5nIHdha2VfdXBfaW50ZXJydXB0aWJsZSgpIGZyb20gaGVyZQorCQkJICogd2lsbCBkZWFkbG9jayBpZiB3ZSBoYXBwZW4gdG8gYmUgbG9nZ2luZworCQkJICogZnJvbSB0aGUgc2NoZWR1bGVyICh0cnlpbmcgdG8gcmUtZ3JhYgorCQkJICogcnEtPmxvY2spLCBzbyBkZWZlciBpdC4KKwkJCSAqLworCQkJX19tb2RfdGltZXIoJmJ1Zi0+dGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKIAlvbGQgPSBidWYtPmRhdGE7CmRpZmYgLS1naXQgYS9rZXJuZWwvcnRtdXRleC5jIGIva2VybmVsL3J0bXV0ZXguYwppbmRleCAxODA5NzhjLi4xMjg3OWY2IDEwMDY0NAotLS0gYS9rZXJuZWwvcnRtdXRleC5jCisrKyBiL2tlcm5lbC9ydG11dGV4LmMKQEAgLTU2LDcgKzU2LDcgQEAKICAqIHN0YXRlLgogICovCiAKLXN0YXRpYyB2b2lkCit2b2lkCiBydF9tdXRleF9zZXRfb3duZXIoc3RydWN0IHJ0X211dGV4ICpsb2NrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm93bmVyLAogCQkgICB1bnNpZ25lZCBsb25nIG1hc2spCiB7CkBAIC04MSwyOSArODEsNiBAQAogfQogCiAvKgotICogV2UgY2FuIHNwZWVkIHVwIHRoZSBhY3F1aXJlL3JlbGVhc2UsIGlmIHRoZSBhcmNoaXRlY3R1cmUKLSAqIHN1cHBvcnRzIGNtcHhjaGcgYW5kIGlmIHRoZXJlJ3Mgbm8gZGVidWdnaW5nIHN0YXRlIHRvIGJlIHNldCB1cAotICovCi0jaWYgZGVmaW5lZChfX0hBVkVfQVJDSF9DTVBYQ0hHKSAmJiAhZGVmaW5lZChDT05GSUdfREVCVUdfUlRfTVVURVhFUykKLSMgZGVmaW5lIHJ0X211dGV4X2NtcHhjaGcobCxjLG4pCShjbXB4Y2hnKCZsLT5vd25lciwgYywgbikgPT0gYykKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX3J0X211dGV4X3dhaXRlcnMoc3RydWN0IHJ0X211dGV4ICpsb2NrKQotewotCXVuc2lnbmVkIGxvbmcgb3duZXIsICpwID0gKHVuc2lnbmVkIGxvbmcgKikgJmxvY2stPm93bmVyOwotCi0JZG8gewotCQlvd25lciA9ICpwOwotCX0gd2hpbGUgKGNtcHhjaGcocCwgb3duZXIsIG93bmVyIHwgUlRfTVVURVhfSEFTX1dBSVRFUlMpICE9IG93bmVyKTsKLX0KLSNlbHNlCi0jIGRlZmluZSBydF9tdXRleF9jbXB4Y2hnKGwsYyxuKQkoMCkKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX3J0X211dGV4X3dhaXRlcnMoc3RydWN0IHJ0X211dGV4ICpsb2NrKQotewotCWxvY2stPm93bmVyID0gKHN0cnVjdCB0YXNrX3N0cnVjdCAqKQotCQkJKCh1bnNpZ25lZCBsb25nKWxvY2stPm93bmVyIHwgUlRfTVVURVhfSEFTX1dBSVRFUlMpOwotfQotI2VuZGlmCi0KLS8qCiAgKiBDYWxjdWxhdGUgdGFzayBwcmlvcml0eSBmcm9tIHRoZSB3YWl0ZXIgbGlzdCBwcmlvcml0eQogICoKICAqIFJldHVybiB0YXNrLT5ub3JtYWxfcHJpbyB3aGVuIHRoZSB3YWl0ZXIgbGlzdCBpcyBlbXB0eSBvciB3aGVuCkBAIC0xMjMsNyArMTAwLDcgQEAKICAqCiAgKiBUaGlzIGNhbiBiZSBib3RoIGJvb3N0aW5nIGFuZCB1bmJvb3N0aW5nLiB0YXNrLT5waV9sb2NrIG11c3QgYmUgaGVsZC4KICAqLwotc3RhdGljIHZvaWQgX19ydF9tdXRleF9hZGp1c3RfcHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit2b2lkIF9fcnRfbXV0ZXhfYWRqdXN0X3ByaW8oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCWludCBwcmlvID0gcnRfbXV0ZXhfZ2V0cHJpbyh0YXNrKTsKIApAQCAtMTU5LDExICsxMzYsMTEgQEAKICAqIERlY3JlYXNlcyB0YXNrJ3MgdXNhZ2UgYnkgb25lIC0gbWF5IHRodXMgZnJlZSB0aGUgdGFzay4KICAqIFJldHVybnMgMCBvciAtRURFQURMSy4KICAqLwotc3RhdGljIGludCBydF9tdXRleF9hZGp1c3RfcHJpb19jaGFpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkJICAgICAgaW50IGRlYWRsb2NrX2RldGVjdCwKLQkJCQkgICAgICBzdHJ1Y3QgcnRfbXV0ZXggKm9yaWdfbG9jaywKLQkJCQkgICAgICBzdHJ1Y3QgcnRfbXV0ZXhfd2FpdGVyICpvcmlnX3dhaXRlciwKLQkJCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvcF90YXNrKQoraW50IHJ0X211dGV4X2FkanVzdF9wcmlvX2NoYWluKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCSAgICAgICBpbnQgZGVhZGxvY2tfZGV0ZWN0LAorCQkJICAgICAgIHN0cnVjdCBydF9tdXRleCAqb3JpZ19sb2NrLAorCQkJICAgICAgIHN0cnVjdCBydF9tdXRleF93YWl0ZXIgKm9yaWdfd2FpdGVyLAorCQkJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdG9wX3Rhc2spCiB7CiAJc3RydWN0IHJ0X211dGV4ICpsb2NrOwogCXN0cnVjdCBydF9tdXRleF93YWl0ZXIgKndhaXRlciwgKnRvcF93YWl0ZXIgPSBvcmlnX3dhaXRlcjsKQEAgLTUyNCw4ICs1MDEsOCBAQAogICoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jay0+d2FpdF9sb2NrIGhlbGQKICAqLwotc3RhdGljIHZvaWQgcmVtb3ZlX3dhaXRlcihzdHJ1Y3QgcnRfbXV0ZXggKmxvY2ssCi0JCQkgIHN0cnVjdCBydF9tdXRleF93YWl0ZXIgKndhaXRlcikKK3ZvaWQgcmVtb3ZlX3dhaXRlcihzdHJ1Y3QgcnRfbXV0ZXggKmxvY2ssCisJCSAgIHN0cnVjdCBydF9tdXRleF93YWl0ZXIgKndhaXRlcikKIHsKIAlpbnQgZmlyc3QgPSAod2FpdGVyID09IHJ0X211dGV4X3RvcF93YWl0ZXIobG9jaykpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXIgPSBydF9tdXRleF9vd25lcihsb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ydG11dGV4X2NvbW1vbi5oIGIva2VybmVsL3J0bXV0ZXhfY29tbW9uLmgKaW5kZXggOWM3NTg1Ni4uMjQyZWM3ZSAxMDA2NDQKLS0tIGEva2VybmVsL3J0bXV0ZXhfY29tbW9uLmgKKysrIGIva2VybmVsL3J0bXV0ZXhfY29tbW9uLmgKQEAgLTExMyw2ICsxMTMsMjkgQEAKIH0KIAogLyoKKyAqIFdlIGNhbiBzcGVlZCB1cCB0aGUgYWNxdWlyZS9yZWxlYXNlLCBpZiB0aGUgYXJjaGl0ZWN0dXJlCisgKiBzdXBwb3J0cyBjbXB4Y2hnIGFuZCBpZiB0aGVyZSdzIG5vIGRlYnVnZ2luZyBzdGF0ZSB0byBiZSBzZXQgdXAKKyAqLworI2lmIGRlZmluZWQoX19IQVZFX0FSQ0hfQ01QWENIRykgJiYgIWRlZmluZWQoQ09ORklHX0RFQlVHX1JUX01VVEVYRVMpCisjIGRlZmluZSBydF9tdXRleF9jbXB4Y2hnKGwsYyxuKQkoY21weGNoZygmbC0+b3duZXIsIGMsIG4pID09IGMpCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19ydF9tdXRleF93YWl0ZXJzKHN0cnVjdCBydF9tdXRleCAqbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIG93bmVyLCAqcCA9ICh1bnNpZ25lZCBsb25nICopICZsb2NrLT5vd25lcjsKKworCWRvIHsKKwkJb3duZXIgPSAqcDsKKwl9IHdoaWxlIChjbXB4Y2hnKHAsIG93bmVyLCBvd25lciB8IFJUX01VVEVYX0hBU19XQUlURVJTKSAhPSBvd25lcik7Cit9CisjZWxzZQorIyBkZWZpbmUgcnRfbXV0ZXhfY21weGNoZyhsLGMsbikJKDApCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19ydF9tdXRleF93YWl0ZXJzKHN0cnVjdCBydF9tdXRleCAqbG9jaykKK3sKKwlsb2NrLT5vd25lciA9IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKikKKwkJCSgodW5zaWduZWQgbG9uZylsb2NrLT5vd25lciB8IFJUX01VVEVYX0hBU19XQUlURVJTKTsKK30KKyNlbmRpZgorCisvKgogICogUEktZnV0ZXggc3VwcG9ydCAocHJveHkgbG9ja2luZyBmdW5jdGlvbnMsIGV0Yy4pOgogICovCiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpydF9tdXRleF9uZXh0X293bmVyKHN0cnVjdCBydF9tdXRleCAqbG9jayk7CkBAIC0xMjAsNCArMTQzLDE1IEBACiAJCQkJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJveHlfb3duZXIpOwogZXh0ZXJuIHZvaWQgcnRfbXV0ZXhfcHJveHlfdW5sb2NrKHN0cnVjdCBydF9tdXRleCAqbG9jaywKIAkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJveHlfb3duZXIpOworCitleHRlcm4gdm9pZCBydF9tdXRleF9zZXRfb3duZXIoc3RydWN0IHJ0X211dGV4ICpsb2NrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm93bmVyLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWFzayk7CitleHRlcm4gdm9pZCBfX3J0X211dGV4X2FkanVzdF9wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CitleHRlcm4gaW50IHJ0X211dGV4X2FkanVzdF9wcmlvX2NoYWluKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgICAgICBpbnQgZGVhZGxvY2tfZGV0ZWN0LAorCQkJCSAgICAgIHN0cnVjdCBydF9tdXRleCAqb3JpZ19sb2NrLAorCQkJCSAgICAgIHN0cnVjdCBydF9tdXRleF93YWl0ZXIgKm9yaWdfd2FpdGVyLAorCQkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdG9wX3Rhc2spOworZXh0ZXJuIHZvaWQgcmVtb3ZlX3dhaXRlcihzdHJ1Y3QgcnRfbXV0ZXggKmxvY2ssCisJCQkgIHN0cnVjdCBydF9tdXRleF93YWl0ZXIgKndhaXRlcik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9yd3NlbS5jIGIva2VybmVsL3J3c2VtLmMKaW5kZXggMjkxZGVkNS4uOWE4Nzg4NiAxMDA2NDQKLS0tIGEva2VybmVsL3J3c2VtLmMKKysrIGIva2VybmVsL3J3c2VtLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAlpbnQgcmV0ID0gX19kb3duX3dyaXRlX3RyeWxvY2soc2VtKTsKIAogCWlmIChyZXQgPT0gMSkKLQkJcndzZW1fYWNxdWlyZSgmc2VtLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CisJCXJ3c2VtX2FjcXVpcmUoJnNlbS0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggMDIyN2YxNi4uMTNjZGFiMyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTUyLDggKzUyLDkgQEAKICNpbmNsdWRlIDxsaW51eC90c2FjY3Rfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheWFjY3QuaD4KLSNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8bGludXgvcmVjaXByb2NhbF9kaXYuaD4KIAorI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKIC8qCkBAIC0xODEsNiArMTgyLDI3IEBACiAJCXJldHVybiBTQ0FMRV9QUklPKERFRl9USU1FU0xJQ0UsIHN0YXRpY19wcmlvKTsKIH0KIAorI2lmZGVmIENPTkZJR19TTVAKKy8qCisgKiBEaXZpZGUgYSBsb2FkIGJ5IGEgc2NoZWQgZ3JvdXAgY3B1X3Bvd2VyIDogKGxvYWQgLyBzZy0+X19jcHVfcG93ZXIpCisgKiBTaW5jZSBjcHVfcG93ZXIgaXMgYSAnY29uc3RhbnQnLCB3ZSBjYW4gdXNlIGEgcmVjaXByb2NhbCBkaXZpZGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHNnX2Rpdl9jcHVfcG93ZXIoY29uc3Qgc3RydWN0IHNjaGVkX2dyb3VwICpzZywgdTMyIGxvYWQpCit7CisJcmV0dXJuIHJlY2lwcm9jYWxfZGl2aWRlKGxvYWQsIHNnLT5yZWNpcHJvY2FsX2NwdV9wb3dlcik7Cit9CisKKy8qCisgKiBFYWNoIHRpbWUgYSBzY2hlZCBncm91cCBjcHVfcG93ZXIgaXMgY2hhbmdlZCwKKyAqIHdlIG11c3QgY29tcHV0ZSBpdHMgcmVjaXByb2NhbCB2YWx1ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2dfaW5jX2NwdV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnLCB1MzIgdmFsKQoreworCXNnLT5fX2NwdV9wb3dlciArPSB2YWw7CisJc2ctPnJlY2lwcm9jYWxfY3B1X3Bvd2VyID0gcmVjaXByb2NhbF92YWx1ZShzZy0+X19jcHVfcG93ZXIpOworfQorI2VuZGlmCisKIC8qCiAgKiB0YXNrX3RpbWVzbGljZSgpIHNjYWxlcyB1c2VyLW5pY2UgdmFsdWVzIFsgLTIwIC4uLiAwIC4uLiAxOSBdCiAgKiB0byB0aW1lIHNsaWNlIHZhbHVlczogWzgwMG1zIC4uLiAxMDBtcyAuLi4gNW1zXQpAQCAtMjIzLDYgKzI0NSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgcmF3X3dlaWdodGVkX2xvYWQ7CiAjaWZkZWYgQ09ORklHX1NNUAogCXVuc2lnbmVkIGxvbmcgY3B1X2xvYWRbM107CisJdW5zaWduZWQgY2hhciBpZGxlX2F0X3RpY2s7CisjaWZkZWYgQ09ORklHX05PX0haCisJdW5zaWduZWQgY2hhciBpbl9ub2h6X3JlY2VudGx5OworI2VuZGlmCiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nIGxvbmcgbnJfc3dpdGNoZXM7CiAKQEAgLTI3OCw3ICszMDQsOCBAQAogCXN0cnVjdCBsb2NrX2NsYXNzX2tleSBycV9sb2NrX2tleTsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcnEsIHJ1bnF1ZXVlcyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJxLCBydW5xdWV1ZXMpIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CitzdGF0aWMgREVGSU5FX01VVEVYKHNjaGVkX2hvdGNwdV9tdXRleCk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNwdV9vZihzdHJ1Y3QgcnEgKnJxKQogewpAQCAtMTA0OSw2ICsxMDc2LDE3IEBACiAJaWYgKCF0c2tfaXNfcG9sbGluZyhwKSkKIAkJc21wX3NlbmRfcmVzY2hlZHVsZShjcHUpOwogfQorCitzdGF0aWMgdm9pZCByZXNjaGVkX2NwdShpbnQgY3B1KQoreworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKSkKKwkJcmV0dXJuOworCXJlc2NoZWRfdGFzayhjcHVfY3VycihjcHUpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNjaGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtMTI0MSw3ICsxMjc5LDggQEAKIAkJfQogCiAJCS8qIEFkanVzdCBieSByZWxhdGl2ZSBDUFUgcG93ZXIgb2YgdGhlIGdyb3VwICovCi0JCWF2Z19sb2FkID0gKGF2Z19sb2FkICogU0NIRURfTE9BRF9TQ0FMRSkgLyBncm91cC0+Y3B1X3Bvd2VyOworCQlhdmdfbG9hZCA9IHNnX2Rpdl9jcHVfcG93ZXIoZ3JvdXAsCisJCQkJYXZnX2xvYWQgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKIAogCQlpZiAobG9jYWxfZ3JvdXApIHsKIAkJCXRoaXNfbG9hZCA9IGF2Z19sb2FkOwpAQCAtMTM2OCw3ICsxNDA3LDE2IEBACiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAJaW50IGk7CiAKLQlpZiAoaWRsZV9jcHUoY3B1KSkKKwkvKgorCSAqIElmIGl0IGlzIGlkbGUsIHRoZW4gaXQgaXMgdGhlIGJlc3QgY3B1IHRvIHJ1biB0aGlzIHRhc2suCisJICoKKwkgKiBUaGlzIGNwdSBpcyBhbHNvIHRoZSBiZXN0LCBpZiBpdCBoYXMgbW9yZSB0aGFuIG9uZSB0YXNrIGFscmVhZHkuCisJICogU2libGluZ3MgbXVzdCBiZSBhbHNvIGJ1c3koaW4gbW9zdCBjYXNlcykgYXMgdGhleSBkaWRuJ3QgYWxyZWFkeQorCSAqIHBpY2t1cCB0aGUgZXh0cmEgbG9hZCBmcm9tIHRoaXMgY3B1IGFuZCBoZW5jZSB3ZSBuZWVkIG5vdCBjaGVjaworCSAqIHNpYmxpbmcgcnVucXVldWUgaW5mby4gVGhpcyB3aWxsIGF2b2lkIHRoZSBjaGVja3MgYW5kIGNhY2hlIG1pc3MKKwkgKiBwZW5hbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGF0LgorCSAqLworCWlmIChpZGxlX2NwdShjcHUpIHx8IGNwdV9ycShjcHUpLT5ucl9ydW5uaW5nID4gMSkKIAkJcmV0dXJuIGNwdTsKIAogCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKSB7CkBAIC0yMzUyLDEyICsyNDAwLDEzIEBACiAJCX0KIAogCQl0b3RhbF9sb2FkICs9IGF2Z19sb2FkOwotCQl0b3RhbF9wd3IgKz0gZ3JvdXAtPmNwdV9wb3dlcjsKKwkJdG90YWxfcHdyICs9IGdyb3VwLT5fX2NwdV9wb3dlcjsKIAogCQkvKiBBZGp1c3QgYnkgcmVsYXRpdmUgQ1BVIHBvd2VyIG9mIHRoZSBncm91cCAqLwotCQlhdmdfbG9hZCA9IChhdmdfbG9hZCAqIFNDSEVEX0xPQURfU0NBTEUpIC8gZ3JvdXAtPmNwdV9wb3dlcjsKKwkJYXZnX2xvYWQgPSBzZ19kaXZfY3B1X3Bvd2VyKGdyb3VwLAorCQkJCWF2Z19sb2FkICogU0NIRURfTE9BRF9TQ0FMRSk7CiAKLQkJZ3JvdXBfY2FwYWNpdHkgPSBncm91cC0+Y3B1X3Bvd2VyIC8gU0NIRURfTE9BRF9TQ0FMRTsKKwkJZ3JvdXBfY2FwYWNpdHkgPSBncm91cC0+X19jcHVfcG93ZXIgLyBTQ0hFRF9MT0FEX1NDQUxFOwogCiAJCWlmIChsb2NhbF9ncm91cCkgewogCQkJdGhpc19sb2FkID0gYXZnX2xvYWQ7CkBAIC0yNDY4LDggKzI1MTcsOCBAQAogCW1heF9wdWxsID0gbWluKG1heF9sb2FkIC0gYXZnX2xvYWQsIG1heF9sb2FkIC0gYnVzaWVzdF9sb2FkX3Blcl90YXNrKTsKIAogCS8qIEhvdyBtdWNoIGxvYWQgdG8gYWN0dWFsbHkgbW92ZSB0byBlcXVhbGlzZSB0aGUgaW1iYWxhbmNlICovCi0JKmltYmFsYW5jZSA9IG1pbihtYXhfcHVsbCAqIGJ1c2llc3QtPmNwdV9wb3dlciwKLQkJCQkoYXZnX2xvYWQgLSB0aGlzX2xvYWQpICogdGhpcy0+Y3B1X3Bvd2VyKQorCSppbWJhbGFuY2UgPSBtaW4obWF4X3B1bGwgKiBidXNpZXN0LT5fX2NwdV9wb3dlciwKKwkJCQkoYXZnX2xvYWQgLSB0aGlzX2xvYWQpICogdGhpcy0+X19jcHVfcG93ZXIpCiAJCQkvIFNDSEVEX0xPQURfU0NBTEU7CiAKIAkvKgpAQCAtMjUwMywyOCArMjU1MiwyOSBAQAogCQkgKiBtb3ZpbmcgdGhlbS4KIAkJICovCiAKLQkJcHdyX25vdyArPSBidXNpZXN0LT5jcHVfcG93ZXIgKgotCQkJbWluKGJ1c2llc3RfbG9hZF9wZXJfdGFzaywgbWF4X2xvYWQpOwotCQlwd3Jfbm93ICs9IHRoaXMtPmNwdV9wb3dlciAqCi0JCQltaW4odGhpc19sb2FkX3Blcl90YXNrLCB0aGlzX2xvYWQpOworCQlwd3Jfbm93ICs9IGJ1c2llc3QtPl9fY3B1X3Bvd2VyICoKKwkJCQltaW4oYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBtYXhfbG9hZCk7CisJCXB3cl9ub3cgKz0gdGhpcy0+X19jcHVfcG93ZXIgKgorCQkJCW1pbih0aGlzX2xvYWRfcGVyX3Rhc2ssIHRoaXNfbG9hZCk7CiAJCXB3cl9ub3cgLz0gU0NIRURfTE9BRF9TQ0FMRTsKIAogCQkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIHN1YnRyYWN0ICovCi0JCXRtcCA9IGJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUgLwotCQkJYnVzaWVzdC0+Y3B1X3Bvd2VyOworCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKGJ1c2llc3QsCisJCQkJYnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7CiAJCWlmIChtYXhfbG9hZCA+IHRtcCkKLQkJCXB3cl9tb3ZlICs9IGJ1c2llc3QtPmNwdV9wb3dlciAqCisJCQlwd3JfbW92ZSArPSBidXNpZXN0LT5fX2NwdV9wb3dlciAqCiAJCQkJbWluKGJ1c2llc3RfbG9hZF9wZXJfdGFzaywgbWF4X2xvYWQgLSB0bXApOwogCiAJCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2QgYWRkICovCi0JCWlmIChtYXhfbG9hZCAqIGJ1c2llc3QtPmNwdV9wb3dlciA8CisJCWlmIChtYXhfbG9hZCAqIGJ1c2llc3QtPl9fY3B1X3Bvd2VyIDwKIAkJCQlidXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKQotCQkJdG1wID0gbWF4X2xvYWQgKiBidXNpZXN0LT5jcHVfcG93ZXIgLyB0aGlzLT5jcHVfcG93ZXI7CisJCQl0bXAgPSBzZ19kaXZfY3B1X3Bvd2VyKHRoaXMsCisJCQkJCW1heF9sb2FkICogYnVzaWVzdC0+X19jcHVfcG93ZXIpOwogCQllbHNlCi0JCQl0bXAgPSBidXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFIC8KLQkJCQl0aGlzLT5jcHVfcG93ZXI7Ci0JCXB3cl9tb3ZlICs9IHRoaXMtPmNwdV9wb3dlciAqCi0JCQltaW4odGhpc19sb2FkX3Blcl90YXNrLCB0aGlzX2xvYWQgKyB0bXApOworCQkJdG1wID0gc2dfZGl2X2NwdV9wb3dlcih0aGlzLAorCQkJCWJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpOworCQlwd3JfbW92ZSArPSB0aGlzLT5fX2NwdV9wb3dlciAqCisJCQkJbWluKHRoaXNfbG9hZF9wZXJfdGFzaywgdGhpc19sb2FkICsgdG1wKTsKIAkJcHdyX21vdmUgLz0gU0NIRURfTE9BRF9TQ0FMRTsKIAogCQkvKiBNb3ZlIGlmIHdlIGdhaW4gdGhyb3VnaHB1dCAqLwpAQCAtMjY1Nyw2ICsyNzA3LDEyIEBACiAJCWRvdWJsZV9ycV91bmxvY2sodGhpc19ycSwgYnVzaWVzdCk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAorCQkvKgorCQkgKiBzb21lIG90aGVyIGNwdSBkaWQgdGhlIGxvYWQgYmFsYW5jZSBmb3IgdXMuCisJCSAqLworCQlpZiAobnJfbW92ZWQgJiYgdGhpc19jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJcmVzY2hlZF9jcHUodGhpc19jcHUpOworCiAJCS8qIEFsbCB0YXNrcyBvbiB0aGlzIHJ1bnF1ZXVlIHdlcmUgcGlubmVkIGJ5IENQVSBhZmZpbml0eSAqLwogCQlpZiAodW5saWtlbHkoYWxsX3Bpbm5lZCkpIHsKIAkJCWNwdV9jbGVhcihjcHVfb2YoYnVzaWVzdCksIGNwdXMpOwpAQCAtMjkyNywzMiArMjk4Myw5OCBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19OT19IWgorc3RhdGljIHN0cnVjdCB7CisJYXRvbWljX3QgbG9hZF9iYWxhbmNlcjsKKwljcHVtYXNrX3QgIGNwdV9tYXNrOworfSBub2h6IF9fX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsKKwkubG9hZF9iYWxhbmNlciA9IEFUT01JQ19JTklUKC0xKSwKKwkuY3B1X21hc2sgPSBDUFVfTUFTS19OT05FLAorfTsKKwogLyoKLSAqIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyBpcyB0cmlnZ2VyZWQgd2hlbiBuZWVkZWQgZnJvbSB0aGUgc2NoZWR1bGVyIHRpY2suCisgKiBUaGlzIHJvdXRpbmUgd2lsbCB0cnkgdG8gbm9taW5hdGUgdGhlIGlsYiAoaWRsZSBsb2FkIGJhbGFuY2luZykKKyAqIG93bmVyIGFtb25nIHRoZSBjcHVzIHdob3NlIHRpY2tzIGFyZSBzdG9wcGVkLiBpbGIgb3duZXIgd2lsbCBkbyB0aGUgaWRsZQorICogbG9hZCBiYWxhbmNpbmcgb24gYmVoYWxmIG9mIGFsbCB0aG9zZSBjcHVzLiBJZiBhbGwgdGhlIGNwdXMgaW4gdGhlIHN5c3RlbQorICogZ28gaW50byB0aGlzIHRpY2tsZXNzIG1vZGUsIHRoZW4gdGhlcmUgd2lsbCBiZSBubyBpbGIgb3duZXIgKGFzIHRoZXJlIGlzCisgKiBubyBuZWVkIGZvciBvbmUpIGFuZCBhbGwgdGhlIGNwdXMgd2lsbCBzbGVlcCB0aWxsIHRoZSBuZXh0IHdha2V1cCBldmVudAorICogYXJyaXZlcy4uLgogICoKKyAqIEZvciB0aGUgaWxiIG93bmVyLCB0aWNrIGlzIG5vdCBzdG9wcGVkLiBBbmQgdGhpcyB0aWNrIHdpbGwgYmUgdXNlZAorICogZm9yIGlkbGUgbG9hZCBiYWxhbmNpbmcuIGlsYiBvd25lciB3aWxsIHN0aWxsIGJlIHBhcnQgb2YKKyAqIG5vaHouY3B1X21hc2suLgorICoKKyAqIFdoaWxlIHN0b3BwaW5nIHRoZSB0aWNrLCB0aGlzIGNwdSB3aWxsIGJlY29tZSB0aGUgaWxiIG93bmVyIGlmIHRoZXJlCisgKiBpcyBubyBvdGhlciBvd25lci4gQW5kIHdpbGwgYmUgdGhlIG93bmVyIHRpbGwgdGhhdCBjcHUgYmVjb21lcyBidXN5CisgKiBvciBpZiBhbGwgY3B1cyBpbiB0aGUgc3lzdGVtIHN0b3AgdGhlaXIgdGlja3MgYXQgd2hpY2ggcG9pbnQKKyAqIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGlsYiBvd25lci4KKyAqCisgKiBXaGVuIHRoZSBpbGIgb3duZXIgYmVjb21lcyBidXN5LCBpdCBub21pbmF0ZXMgYW5vdGhlciBvd25lciwgZHVyaW5nIHRoZQorICogbmV4dCBidXN5IHNjaGVkdWxlcl90aWNrKCkKKyAqLworaW50IHNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoaW50IHN0b3BfdGljaykKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHN0b3BfdGljaykgeworCQljcHVfc2V0KGNwdSwgbm9oei5jcHVfbWFzayk7CisJCWNwdV9ycShjcHUpLT5pbl9ub2h6X3JlY2VudGx5ID0gMTsKKworCQkvKgorCQkgKiBJZiB3ZSBhcmUgZ29pbmcgb2ZmbGluZSBhbmQgc3RpbGwgdGhlIGxlYWRlciwgZ2l2ZSB1cCEKKwkJICovCisJCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpICYmCisJCSAgICBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpIHsKKwkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBjcHUsIC0xKSAhPSBjcHUpCisJCQkJQlVHKCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIHRpbWUgZm9yIGlsYiBvd25lciBhbHNvIHRvIHNsZWVwICovCisJCWlmIChjcHVzX3dlaWdodChub2h6LmNwdV9tYXNrKSA9PSBudW1fb25saW5lX2NwdXMoKSkgeworCQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkKKwkJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IC0xKSB7CisJCQkvKiBtYWtlIG1lIHRoZSBpbGIgb3duZXIgKi8KKwkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSwgY3B1KSA9PSAtMSkKKwkJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpCisJCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlpZiAoIWNwdV9pc3NldChjcHUsIG5vaHouY3B1X21hc2spKQorCQkJcmV0dXJuIDA7CisKKwkJY3B1X2NsZWFyKGNwdSwgbm9oei5jcHVfbWFzayk7CisKKwkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkKKwkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBjcHUsIC0xKSAhPSBjcHUpCisJCQkJQlVHKCk7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmFsYW5jaW5nKTsKKworLyoKICAqIEl0IGNoZWNrcyBlYWNoIHNjaGVkdWxpbmcgZG9tYWluIHRvIHNlZSBpZiBpdCBpcyBkdWUgdG8gYmUgYmFsYW5jZWQsCiAgKiBhbmQgaW5pdGlhdGVzIGEgYmFsYW5jaW5nIG9wZXJhdGlvbiBpZiBzby4KICAqCiAgKiBCYWxhbmNpbmcgcGFyYW1ldGVycyBhcmUgc2V0IHVwIGluIGFyY2hfaW5pdF9zY2hlZF9kb21haW5zLgogICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJhbGFuY2luZyk7Ci0KLXN0YXRpYyB2b2lkIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyhzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgpCitzdGF0aWMgaW5saW5lIHZvaWQgcmViYWxhbmNlX2RvbWFpbnMoaW50IGNwdSwgZW51bSBpZGxlX3R5cGUgaWRsZSkKIHsKLQlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCksIGJhbGFuY2UgPSAxOwotCXN0cnVjdCBycSAqdGhpc19ycSA9IGNwdV9ycSh0aGlzX2NwdSk7CisJaW50IGJhbGFuY2UgPSAxOworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKIAl1bnNpZ25lZCBsb25nIGludGVydmFsOwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCS8qCi0JICogV2UgYXJlIGlkbGUgaWYgdGhlcmUgYXJlIG5vIHByb2Nlc3NlcyBydW5uaW5nLiBUaGlzCi0JICogaXMgdmFsaWQgZXZlbiBpZiB3ZSBhcmUgdGhlIGlkbGUgcHJvY2VzcyAoU01UKS4KLQkgKi8KLQllbnVtIGlkbGVfdHlwZSBpZGxlID0gIXRoaXNfcnEtPm5yX3J1bm5pbmcgPwotCQkJCVNDSEVEX0lETEUgOiBOT1RfSURMRTsKLQkvKiBFYXJsaWVzdCB0aW1lIHdoZW4gd2UgaGF2ZSB0byBjYWxsIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyBhZ2FpbiAqLworCS8qIEVhcmxpZXN0IHRpbWUgd2hlbiB3ZSBoYXZlIHRvIGRvIHJlYmFsYW5jZSBhZ2FpbiAqLwogCXVuc2lnbmVkIGxvbmcgbmV4dF9iYWxhbmNlID0gamlmZmllcyArIDYwKkhaOwogCi0JZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgeworCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKSB7CiAJCWlmICghKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkpCiAJCQljb250aW51ZTsKIApAQCAtMjk3MSw3ICszMDkzLDcgQEAKIAkJfQogCiAJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpIHsKLQkJCWlmIChsb2FkX2JhbGFuY2UodGhpc19jcHUsIHRoaXNfcnEsIHNkLCBpZGxlLCAmYmFsYW5jZSkpIHsKKwkJCWlmIChsb2FkX2JhbGFuY2UoY3B1LCBycSwgc2QsIGlkbGUsICZiYWxhbmNlKSkgewogCQkJCS8qCiAJCQkJICogV2UndmUgcHVsbGVkIHRhc2tzIG92ZXIgc28gZWl0aGVyIHdlJ3JlIG5vCiAJCQkJICogbG9uZ2VyIGlkbGUsIG9yIG9uZSBvZiBvdXIgU01UIHNpYmxpbmdzIGlzCkBAIC0yOTk1LDcgKzMxMTcsMTE0IEBACiAJCWlmICghYmFsYW5jZSkKIAkJCWJyZWFrOwogCX0KLQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7CisJcnEtPm5leHRfYmFsYW5jZSA9IG5leHRfYmFsYW5jZTsKK30KKworLyoKKyAqIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyBpcyB0cmlnZ2VyZWQgd2hlbiBuZWVkZWQgZnJvbSB0aGUgc2NoZWR1bGVyIHRpY2suCisgKiBJbiBDT05GSUdfTk9fSFogY2FzZSwgdGhlIGlkbGUgbG9hZCBiYWxhbmNlIG93bmVyIHdpbGwgZG8gdGhlCisgKiByZWJhbGFuY2luZyBmb3IgYWxsIHRoZSBjcHVzIGZvciB3aG9tIHNjaGVkdWxlciB0aWNrcyBhcmUgc3RvcHBlZC4KKyAqLworc3RhdGljIHZvaWQgcnVuX3JlYmFsYW5jZV9kb21haW5zKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCkKK3sKKwlpbnQgbG9jYWxfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBycSAqbG9jYWxfcnEgPSBjcHVfcnEobG9jYWxfY3B1KTsKKwllbnVtIGlkbGVfdHlwZSBpZGxlID0gbG9jYWxfcnEtPmlkbGVfYXRfdGljayA/IFNDSEVEX0lETEUgOiBOT1RfSURMRTsKKworCXJlYmFsYW5jZV9kb21haW5zKGxvY2FsX2NwdSwgaWRsZSk7CisKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwkvKgorCSAqIElmIHRoaXMgY3B1IGlzIHRoZSBvd25lciBmb3IgaWRsZSBsb2FkIGJhbGFuY2luZywgdGhlbiBkbyB0aGUKKwkgKiBiYWxhbmNpbmcgb24gYmVoYWxmIG9mIHRoZSBvdGhlciBpZGxlIGNwdXMgd2hvc2UgdGlja3MgYXJlCisJICogc3RvcHBlZC4KKwkgKi8KKwlpZiAobG9jYWxfcnEtPmlkbGVfYXRfdGljayAmJgorCSAgICBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBsb2NhbF9jcHUpIHsKKwkJY3B1bWFza190IGNwdXMgPSBub2h6LmNwdV9tYXNrOworCQlzdHJ1Y3QgcnEgKnJxOworCQlpbnQgYmFsYW5jZV9jcHU7CisKKwkJY3B1X2NsZWFyKGxvY2FsX2NwdSwgY3B1cyk7CisJCWZvcl9lYWNoX2NwdV9tYXNrKGJhbGFuY2VfY3B1LCBjcHVzKSB7CisJCQkvKgorCQkJICogSWYgdGhpcyBjcHUgZ2V0cyB3b3JrIHRvIGRvLCBzdG9wIHRoZSBsb2FkIGJhbGFuY2luZworCQkJICogd29yayBiZWluZyBkb25lIGZvciBvdGhlciBjcHVzLiBOZXh0IGxvYWQKKwkJCSAqIGJhbGFuY2luZyBvd25lciB3aWxsIHBpY2sgaXQgdXAuCisJCQkgKi8KKwkJCWlmIChuZWVkX3Jlc2NoZWQoKSkKKwkJCQlicmVhazsKKworCQkJcmViYWxhbmNlX2RvbWFpbnMoYmFsYW5jZV9jcHUsIFNDSEVEX0lETEUpOworCisJCQlycSA9IGNwdV9ycShiYWxhbmNlX2NwdSk7CisJCQlpZiAodGltZV9hZnRlcihsb2NhbF9ycS0+bmV4dF9iYWxhbmNlLCBycS0+bmV4dF9iYWxhbmNlKSkKKwkJCQlsb2NhbF9ycS0+bmV4dF9iYWxhbmNlID0gcnEtPm5leHRfYmFsYW5jZTsKKwkJfQorCX0KKyNlbmRpZgorfQorCisvKgorICogVHJpZ2dlciB0aGUgU0NIRURfU09GVElSUSBpZiBpdCBpcyB0aW1lIHRvIGRvIHBlcmlvZGljIGxvYWQgYmFsYW5jaW5nLgorICoKKyAqIEluIGNhc2Ugb2YgQ09ORklHX05PX0haLCB0aGlzIGlzIHRoZSBwbGFjZSB3aGVyZSB3ZSBub21pbmF0ZSBhIG5ldworICogaWRsZSBsb2FkIGJhbGFuY2luZyBvd25lciBvciBkZWNpZGUgdG8gc3RvcCB0aGUgcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcsCisgKiBpZiB0aGUgd2hvbGUgc3lzdGVtIGlzIGlkbGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmlnZ2VyX2xvYWRfYmFsYW5jZShpbnQgY3B1KQoreworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwkvKgorCSAqIElmIHdlIHdlcmUgaW4gdGhlIG5vaHogbW9kZSByZWNlbnRseSBhbmQgYnVzeSBhdCB0aGUgY3VycmVudAorCSAqIHNjaGVkdWxlciB0aWNrLCB0aGVuIGNoZWNrIGlmIHdlIG5lZWQgdG8gbm9taW5hdGUgbmV3IGlkbGUKKwkgKiBsb2FkIGJhbGFuY2VyLgorCSAqLworCWlmIChycS0+aW5fbm9oel9yZWNlbnRseSAmJiAhcnEtPmlkbGVfYXRfdGljaykgeworCQlycS0+aW5fbm9oel9yZWNlbnRseSA9IDA7CisKKwkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkgeworCQkJY3B1X2NsZWFyKGNwdSwgbm9oei5jcHVfbWFzayk7CisJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKKwkJfQorCisJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSAtMSkgeworCQkJLyoKKwkJCSAqIHNpbXBsZSBzZWxlY3Rpb24gZm9yIG5vdzogTm9taW5hdGUgdGhlCisJCQkgKiBmaXJzdCBjcHUgaW4gdGhlIG5vaHogbGlzdCB0byBiZSB0aGUgbmV4dAorCQkJICogaWxiIG93bmVyLgorCQkJICoKKwkJCSAqIFRCRDogVHJhdmVyc2UgdGhlIHNjaGVkIGRvbWFpbnMgYW5kIG5vbWluYXRlCisJCQkgKiB0aGUgbmVhcmVzdCBjcHUgaW4gdGhlIG5vaHouY3B1X21hc2suCisJCQkgKi8KKwkJCWludCBpbGIgPSBmaXJzdF9jcHUobm9oei5jcHVfbWFzayk7CisKKwkJCWlmIChpbGIgIT0gTlJfQ1BVUykKKwkJCQlyZXNjaGVkX2NwdShpbGIpOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGNwdSBpcyBpZGxlIGFuZCBkb2luZyBpZGxlIGxvYWQgYmFsYW5jaW5nIGZvciBhbGwgdGhlCisJICogY3B1cyB3aXRoIHRpY2tzIHN0b3BwZWQsIGlzIGl0IHRpbWUgZm9yIHRoYXQgdG8gc3RvcD8KKwkgKi8KKwlpZiAocnEtPmlkbGVfYXRfdGljayAmJiBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUgJiYKKwkgICAgY3B1c193ZWlnaHQobm9oei5jcHVfbWFzaykgPT0gbnVtX29ubGluZV9jcHVzKCkpIHsKKwkJcmVzY2hlZF9jcHUoY3B1KTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdGhpcyBjcHUgaXMgaWRsZSBhbmQgdGhlIGlkbGUgbG9hZCBiYWxhbmNpbmcgaXMgZG9uZSBieQorCSAqIHNvbWVvbmUgZWxzZSwgdGhlbiBubyBuZWVkIHJhaXNlIHRoZSBTQ0hFRF9TT0ZUSVJRCisJICovCisJaWYgKHJxLT5pZGxlX2F0X3RpY2sgJiYgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgIT0gY3B1ICYmCisJICAgIGNwdV9pc3NldChjcHUsIG5vaHouY3B1X21hc2spKQorCQlyZXR1cm47CisjZW5kaWYKKwlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBycS0+bmV4dF9iYWxhbmNlKSkKKwkJcmFpc2Vfc29mdGlycShTQ0hFRF9TT0ZUSVJRKTsKIH0KICNlbHNlCiAvKgpAQCAtMzIxOCwxNiArMzQ0NywxNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBub3cgPSBzY2hlZF9jbG9jaygpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGN1cnJlbnQ7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgaWRsZV9hdF90aWNrID0gaWRsZV9jcHUoY3B1KTsKIAlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CiAKIAl1cGRhdGVfY3B1X2Nsb2NrKHAsIHJxLCBub3cpOwogCi0JaWYgKHAgIT0gcnEtPmlkbGUpCisJaWYgKCFpZGxlX2F0X3RpY2spCiAJCXRhc2tfcnVubmluZ190aWNrKHJxLCBwKTsKICNpZmRlZiBDT05GSUdfU01QCiAJdXBkYXRlX2xvYWQocnEpOwotCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJxLT5uZXh0X2JhbGFuY2UpKQotCQlyYWlzZV9zb2Z0aXJxKFNDSEVEX1NPRlRJUlEpOworCXJxLT5pZGxlX2F0X3RpY2sgPSBpZGxlX2F0X3RpY2s7CisJdHJpZ2dlcl9sb2FkX2JhbGFuY2UoY3B1KTsKICNlbmRpZgogfQogCkBAIC00MjkxLDEzICs0NTIxLDEzIEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCWludCByZXR2YWw7CiAKLQlsb2NrX2NwdV9ob3RwbHVnKCk7CisJbXV0ZXhfbG9jaygmc2NoZWRfaG90Y3B1X211dGV4KTsKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCiAJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKIAlpZiAoIXApIHsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKKwkJbXV0ZXhfdW5sb2NrKCZzY2hlZF9ob3RjcHVfbXV0ZXgpOwogCQlyZXR1cm4gLUVTUkNIOwogCX0KIApAQCAtNDMyNCw3ICs0NTU0LDcgQEAKIAogb3V0X3VubG9jazoKIAlwdXRfdGFza19zdHJ1Y3QocCk7Ci0JdW5sb2NrX2NwdV9ob3RwbHVnKCk7CisJbXV0ZXhfdW5sb2NrKCZzY2hlZF9ob3RjcHVfbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQzODEsNyArNDYxMSw3IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCWludCByZXR2YWw7CiAKLQlsb2NrX2NwdV9ob3RwbHVnKCk7CisJbXV0ZXhfbG9jaygmc2NoZWRfaG90Y3B1X211dGV4KTsKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCiAJcmV0dmFsID0gLUVTUkNIOwpAQCAtNDM5Nyw3ICs0NjI3LDcgQEAKIAogb3V0X3VubG9jazoKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JdW5sb2NrX2NwdV9ob3RwbHVnKCk7CisJbXV0ZXhfdW5sb2NrKCZzY2hlZF9ob3RjcHVfbXV0ZXgpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTQ1NDUsOSArNDc3NSw3IEBACiAJQlVHX09OKCFpbl9zb2Z0aXJxKCkpOwogCiAJaWYgKG5lZWRfcmVzY2hlZCgpICYmIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykgewotCQlyYXdfbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJX2xvY2FsX2JoX2VuYWJsZSgpOwotCQlyYXdfbG9jYWxfaXJxX2VuYWJsZSgpOworCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJX19jb25kX3Jlc2NoZWQoKTsKIAkJbG9jYWxfYmhfZGlzYWJsZSgpOwogCQlyZXR1cm4gMTsKQEAgLTQ3NTAsNiArNDk3OCw4IEBACiAJCQlzaG93X3Rhc2socCk7CiAJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKIAorCXRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncygpOworCiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCS8qCiAJICogT25seSBzaG93IGxvY2tzIGlmIGFsbCB0YXNrcyBhcmUgZHVtcGVkOgpAQCAtNTE1Nyw3ICs1Mzg3LDEyIEBACiAJc3RydWN0IHJxICpycTsKIAogCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfTE9DS19BQ1FVSVJFOgorCQltdXRleF9sb2NrKCZzY2hlZF9ob3RjcHVfbXV0ZXgpOworCQlicmVhazsKKwogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CiAJCXAgPSBrdGhyZWFkX2NyZWF0ZShtaWdyYXRpb25fdGhyZWFkLCBoY3B1LCAibWlncmF0aW9uLyVkIixjcHUpOwogCQlpZiAoSVNfRVJSKHApKQogCQkJcmV0dXJuIE5PVElGWV9CQUQ7CkBAIC01MTcxLDEyICs1NDA2LDE0IEBACiAJCWJyZWFrOwogCiAJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CiAJCS8qIFN0cmljdGx5IHVubmVjY2Vzc2FyeSwgYXMgZmlyc3QgdXNlciB3aWxsIHdha2UgaXQuICovCiAJCXdha2VfdXBfcHJvY2VzcyhjcHVfcnEoY3B1KS0+bWlncmF0aW9uX3RocmVhZCk7CiAJCWJyZWFrOwogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CisJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgogCQlpZiAoIWNwdV9ycShjcHUpLT5taWdyYXRpb25fdGhyZWFkKQogCQkJYnJlYWs7CiAJCS8qIFVuYmluZCBpdCBmcm9tIG9mZmxpbmUgY3B1IHNvIGl0IGNhbiBydW4uICBGYWxsIHRocnUuICovCkBAIC01MTg3LDYgKzU0MjQsNyBAQAogCQlicmVhazsKIAogCWNhc2UgQ1BVX0RFQUQ6CisJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCW1pZ3JhdGVfbGl2ZV90YXNrcyhjcHUpOwogCQlycSA9IGNwdV9ycShjcHUpOwogCQlrdGhyZWFkX3N0b3AocnEtPm1pZ3JhdGlvbl90aHJlYWQpOwpAQCAtNTIwMiw3ICs1NDQwLDcgQEAKIAkJQlVHX09OKHJxLT5ucl9ydW5uaW5nICE9IDApOwogCiAJCS8qIE5vIG5lZWQgdG8gbWlncmF0ZSB0aGUgdGFza3M6IGl0IHdhcyBiZXN0LWVmZm9ydCBpZgotCQkgKiB0aGV5IGRpZG4ndCBkbyBsb2NrX2NwdV9ob3RwbHVnKCkuICBKdXN0IHdha2UgdXAKKwkJICogdGhleSBkaWRuJ3QgdGFrZSBzY2hlZF9ob3RjcHVfbXV0ZXguICBKdXN0IHdha2UgdXAKIAkJICogdGhlIHJlcXVlc3RvcnMuICovCiAJCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZycS0+bWlncmF0aW9uX3F1ZXVlKSkgewpAQCAtNTIxNiw2ICs1NDU0LDkgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CiAJCWJyZWFrOwogI2VuZGlmCisJY2FzZSBDUFVfTE9DS19SRUxFQVNFOgorCQltdXRleF91bmxvY2soJnNjaGVkX2hvdGNwdV9tdXRleCk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gTk9USUZZX09LOwogfQpAQCAtNTMwNCw3ICs1NTQ1LDcgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKCFncm91cC0+Y3B1X3Bvd2VyKSB7CisJCQlpZiAoIWdyb3VwLT5fX2NwdV9wb3dlcikgewogCQkJCXByaW50aygiXG4iKTsKIAkJCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBkb21haW4tPmNwdV9wb3dlciBub3QgIgogCQkJCQkJInNldFxuIik7CkBAIC01NDgxLDcgKzU3MjIsNyBAQAogCQkJY29udGludWU7CiAKIAkJc2ctPmNwdW1hc2sgPSBDUFVfTUFTS19OT05FOwotCQlzZy0+Y3B1X3Bvd2VyID0gMDsKKwkJc2ctPl9fY3B1X3Bvd2VyID0gMDsKIAogCQlmb3JfZWFjaF9jcHVfbWFzayhqLCBzcGFuKSB7CiAJCQlpZiAoZ3JvdXBfZm4oaiwgY3B1X21hcCwgTlVMTCkgIT0gZ3JvdXApCkBAIC02MTcwLDcgKzY0MTEsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlzZy0+Y3B1X3Bvd2VyICs9IHNkLT5ncm91cHMtPmNwdV9wb3dlcjsKKwkJc2dfaW5jX2NwdV9wb3dlcihzZywgc2QtPmdyb3Vwcy0+X19jcHVfcG93ZXIpOwogCX0KIAlzZyA9IHNnLT5uZXh0OwogCWlmIChzZyAhPSBncm91cF9oZWFkKQpAQCAtNjI0NSw2ICs2NDg2LDggQEAKIAogCWNoaWxkID0gc2QtPmNoaWxkOwogCisJc2QtPmdyb3Vwcy0+X19jcHVfcG93ZXIgPSAwOworCiAJLyoKIAkgKiBGb3IgcGVyZiBwb2xpY3ksIGlmIHRoZSBncm91cHMgaW4gY2hpbGQgZG9tYWluIHNoYXJlIHJlc291cmNlcwogCSAqIChmb3IgZXhhbXBsZSBjb3JlcyBzaGFyaW5nIHNvbWUgcG9ydGlvbnMgb2YgdGhlIGNhY2hlIGhpZXJhcmNoeQpAQCAtNjI1NSwxOCArNjQ5OCwxNiBAQAogCWlmICghY2hpbGQgfHwgKCEoc2QtPmZsYWdzICYgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpICYmCiAJCSAgICAgICAoY2hpbGQtPmZsYWdzICYKIAkJCShTRF9TSEFSRV9DUFVQT1dFUiB8IFNEX1NIQVJFX1BLR19SRVNPVVJDRVMpKSkpIHsKLQkJc2QtPmdyb3Vwcy0+Y3B1X3Bvd2VyID0gU0NIRURfTE9BRF9TQ0FMRTsKKwkJc2dfaW5jX2NwdV9wb3dlcihzZC0+Z3JvdXBzLCBTQ0hFRF9MT0FEX1NDQUxFKTsKIAkJcmV0dXJuOwogCX0KIAotCXNkLT5ncm91cHMtPmNwdV9wb3dlciA9IDA7Ci0KIAkvKgogCSAqIGFkZCBjcHVfcG93ZXIgb2YgZWFjaCBjaGlsZCBncm91cCB0byB0aGlzIGdyb3VwcyBjcHVfcG93ZXIKIAkgKi8KIAlncm91cCA9IGNoaWxkLT5ncm91cHM7CiAJZG8gewotCQlzZC0+Z3JvdXBzLT5jcHVfcG93ZXIgKz0gZ3JvdXAtPmNwdV9wb3dlcjsKKwkJc2dfaW5jX2NwdV9wb3dlcihzZC0+Z3JvdXBzLCBncm91cC0+X19jcHVfcG93ZXIpOwogCQlncm91cCA9IGdyb3VwLT5uZXh0OwogCX0gd2hpbGUgKGdyb3VwICE9IGNoaWxkLT5ncm91cHMpOwogfQpAQCAtNjQyNiw3ICs2NjY3LDcgQEAKIAkJCXNkID0gJnBlcl9jcHUobm9kZV9kb21haW5zLCBqKTsKIAkJCXNkLT5ncm91cHMgPSBzZzsKIAkJfQotCQlzZy0+Y3B1X3Bvd2VyID0gMDsKKwkJc2ctPl9fY3B1X3Bvd2VyID0gMDsKIAkJc2ctPmNwdW1hc2sgPSBub2RlbWFzazsKIAkJc2ctPm5leHQgPSBzZzsKIAkJY3B1c19vcihjb3ZlcmVkLCBjb3ZlcmVkLCBub2RlbWFzayk7CkBAIC02NDU0LDcgKzY2OTUsNyBAQAogCQkJCSJDYW4gbm90IGFsbG9jIGRvbWFpbiBncm91cCBmb3Igbm9kZSAlZFxuIiwgaik7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KLQkJCXNnLT5jcHVfcG93ZXIgPSAwOworCQkJc2ctPl9fY3B1X3Bvd2VyID0gMDsKIAkJCXNnLT5jcHVtYXNrID0gdG1wOwogCQkJc2ctPm5leHQgPSBwcmV2LT5uZXh0OwogCQkJY3B1c19vcihjb3ZlcmVkLCBjb3ZlcmVkLCB0bXApOwpAQCAtNjU5MSwxMCArNjgzMiwxMCBAQAogewogCWludCBlcnI7CiAKLQlsb2NrX2NwdV9ob3RwbHVnKCk7CisJbXV0ZXhfbG9jaygmc2NoZWRfaG90Y3B1X211dGV4KTsKIAlkZXRhY2hfZGVzdHJveV9kb21haW5zKCZjcHVfb25saW5lX21hcCk7CiAJZXJyID0gYXJjaF9pbml0X3NjaGVkX2RvbWFpbnMoJmNwdV9vbmxpbmVfbWFwKTsKLQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKKwltdXRleF91bmxvY2soJnNjaGVkX2hvdGNwdV9tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjY3MywxNCArNjkxNCwyMCBAQAogewogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKIAljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKIAkJZGV0YWNoX2Rlc3Ryb3lfZG9tYWlucygmY3B1X29ubGluZV9tYXApOwogCQlyZXR1cm4gTk9USUZZX09LOwogCiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CisJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgogCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEX0ZST1pFTjoKIAljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQkvKgogCQkgKiBGYWxsIHRocm91Z2ggYW5kIHJlLWluaXRpYWxpc2UgdGhlIGRvbWFpbnMuCiAJCSAqLwpAQCAtNjY5OSwxMiArNjk0NiwxMiBAQAogewogCWNwdW1hc2tfdCBub25faXNvbGF0ZWRfY3B1czsKIAotCWxvY2tfY3B1X2hvdHBsdWcoKTsKKwltdXRleF9sb2NrKCZzY2hlZF9ob3RjcHVfbXV0ZXgpOwogCWFyY2hfaW5pdF9zY2hlZF9kb21haW5zKCZjcHVfb25saW5lX21hcCk7CiAJY3B1c19hbmRub3Qobm9uX2lzb2xhdGVkX2NwdXMsIGNwdV9wb3NzaWJsZV9tYXAsIGNwdV9pc29sYXRlZF9tYXApOwogCWlmIChjcHVzX2VtcHR5KG5vbl9pc29sYXRlZF9jcHVzKSkKIAkJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG5vbl9pc29sYXRlZF9jcHVzKTsKLQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKKwltdXRleF91bmxvY2soJnNjaGVkX2hvdGNwdV9tdXRleCk7CiAJLyogWFhYOiBUaGVvcmV0aWNhbCByYWNlIGhlcmUgLSBDUFUgbWF5IGJlIGhvdHBsdWdnZWQgbm93ICovCiAJaG90Y3B1X25vdGlmaWVyKHVwZGF0ZV9zY2hlZF9kb21haW5zLCAwKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDJiNDA4N2QuLmFjZGZjMDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTEyLDcgKzEyLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0yMiw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWxmZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgpAQCAtMzksMTI1ICszOSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqc2lncXVldWVfY2FjaGVwOwogCi0vKgotICogSW4gUE9TSVggYSBzaWduYWwgaXMgc2VudCBlaXRoZXIgdG8gYSBzcGVjaWZpYyB0aHJlYWQgKExpbnV4IHRhc2spCi0gKiBvciB0byB0aGUgcHJvY2VzcyBhcyBhIHdob2xlIChMaW51eCB0aHJlYWQgZ3JvdXApLiAgSG93IHRoZSBzaWduYWwKLSAqIGlzIHNlbnQgZGV0ZXJtaW5lcyB3aGV0aGVyIGl0J3MgdG8gb25lIHRocmVhZCBvciB0aGUgd2hvbGUgZ3JvdXAsCi0gKiB3aGljaCBkZXRlcm1pbmVzIHdoaWNoIHNpZ25hbCBtYXNrKHMpIGFyZSBpbnZvbHZlZCBpbiBibG9ja2luZyBpdAotICogZnJvbSBiZWluZyBkZWxpdmVyZWQgdW50aWwgbGF0ZXIuICBXaGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLAotICogZWl0aGVyIGl0J3MgY2F1Z2h0IG9yIGlnbm9yZWQgYnkgYSB1c2VyIGhhbmRsZXIgb3IgaXQgaGFzIGEgZGVmYXVsdAotICogZWZmZWN0IHRoYXQgYXBwbGllcyB0byB0aGUgd2hvbGUgdGhyZWFkIGdyb3VwIChQT1NJWCBwcm9jZXNzKS4KLSAqCi0gKiBUaGUgcG9zc2libGUgZWZmZWN0cyBhbiB1bmJsb2NrZWQgc2lnbmFsIHNldCB0byBTSUdfREZMIGNhbiBoYXZlIGFyZToKLSAqICAgaWdub3JlCS0gTm90aGluZyBIYXBwZW5zCi0gKiAgIHRlcm1pbmF0ZQktIGtpbGwgdGhlIHByb2Nlc3MsIGkuZS4gYWxsIHRocmVhZHMgaW4gdGhlIGdyb3VwLAotICogCQkgIHNpbWlsYXIgdG8gZXhpdF9ncm91cC4gIFRoZSBncm91cCBsZWFkZXIgKG9ubHkpIHJlcG9ydHMKLSAqCQkgIFdJRlNJR05BTEVEIHN0YXR1cyB0byBpdHMgcGFyZW50LgotICogICBjb3JlZHVtcAktIHdyaXRlIGEgY29yZSBkdW1wIGZpbGUgZGVzY3JpYmluZyBhbGwgdGhyZWFkcyB1c2luZwotICoJCSAgdGhlIHNhbWUgbW0gYW5kIHRoZW4ga2lsbCBhbGwgdGhvc2UgdGhyZWFkcwotICogICBzdG9wIAktIHN0b3AgYWxsIHRoZSB0aHJlYWRzIGluIHRoZSBncm91cCwgaS5lLiBUQVNLX1NUT1BQRUQgc3RhdGUKLSAqCi0gKiBTSUdLSUxMIGFuZCBTSUdTVE9QIGNhbm5vdCBiZSBjYXVnaHQsIGJsb2NrZWQsIG9yIGlnbm9yZWQuCi0gKiBPdGhlciBzaWduYWxzIHdoZW4gbm90IGJsb2NrZWQgYW5kIHNldCB0byBTSUdfREZMIGJlaGF2ZXMgYXMgZm9sbG93cy4KLSAqIFRoZSBqb2IgY29udHJvbCBzaWduYWxzIGFsc28gaGF2ZSBvdGhlciBzcGVjaWFsIGVmZmVjdHMuCi0gKgotICoJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqCXwgIFBPU0lYIHNpZ25hbCAgICAgIHwgIGRlZmF1bHQgYWN0aW9uICB8Ci0gKgkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKwotICoJfCAgU0lHSFVQICAgICAgICAgICAgfCAgdGVybWluYXRlCXwKLSAqCXwgIFNJR0lOVCAgICAgICAgICAgIHwJdGVybWluYXRlCXwKLSAqCXwgIFNJR1FVSVQgICAgICAgICAgIHwJY29yZWR1bXAgCXwKLSAqCXwgIFNJR0lMTCAgICAgICAgICAgIHwJY29yZWR1bXAgCXwKLSAqCXwgIFNJR1RSQVAgICAgICAgICAgIHwJY29yZWR1bXAgCXwKLSAqCXwgIFNJR0FCUlQvU0lHSU9UICAgIHwJY29yZWR1bXAgCXwKLSAqCXwgIFNJR0JVUyAgICAgICAgICAgIHwJY29yZWR1bXAgCXwKLSAqCXwgIFNJR0ZQRSAgICAgICAgICAgIHwJY29yZWR1bXAgCXwKLSAqCXwgIFNJR0tJTEwgICAgICAgICAgIHwJdGVybWluYXRlKCspCXwKLSAqCXwgIFNJR1VTUjEgICAgICAgICAgIHwJdGVybWluYXRlCXwKLSAqCXwgIFNJR1NFR1YgICAgICAgICAgIHwJY29yZWR1bXAgCXwKLSAqCXwgIFNJR1VTUjIgICAgICAgICAgIHwJdGVybWluYXRlCXwKLSAqCXwgIFNJR1BJUEUgICAgICAgICAgIHwJdGVybWluYXRlCXwKLSAqCXwgIFNJR0FMUk0gICAgICAgICAgIHwJdGVybWluYXRlCXwKLSAqCXwgIFNJR1RFUk0gICAgICAgICAgIHwJdGVybWluYXRlCXwKLSAqCXwgIFNJR0NITEQgICAgICAgICAgIHwJaWdub3JlICAgCXwKLSAqCXwgIFNJR0NPTlQgICAgICAgICAgIHwJaWdub3JlKCopCXwKLSAqCXwgIFNJR1NUT1AgICAgICAgICAgIHwJc3RvcCgqKSgrKSAgCXwKLSAqCXwgIFNJR1RTVFAgICAgICAgICAgIHwJc3RvcCgqKSAgCXwKLSAqCXwgIFNJR1RUSU4gICAgICAgICAgIHwJc3RvcCgqKSAgCXwKLSAqCXwgIFNJR1RUT1UgICAgICAgICAgIHwJc3RvcCgqKSAgCXwKLSAqCXwgIFNJR1VSRyAgICAgICAgICAgIHwJaWdub3JlICAgCXwKLSAqCXwgIFNJR1hDUFUgICAgICAgICAgIHwJY29yZWR1bXAgCXwKLSAqCXwgIFNJR1hGU1ogICAgICAgICAgIHwJY29yZWR1bXAgCXwKLSAqCXwgIFNJR1ZUQUxSTSAgICAgICAgIHwJdGVybWluYXRlCXwKLSAqCXwgIFNJR1BST0YgICAgICAgICAgIHwJdGVybWluYXRlCXwKLSAqCXwgIFNJR1BPTEwvU0lHSU8gICAgIHwJdGVybWluYXRlCXwKLSAqCXwgIFNJR1NZUy9TSUdVTlVTRUQgIHwJY29yZWR1bXAgCXwKLSAqCXwgIFNJR1NUS0ZMVCAgICAgICAgIHwJdGVybWluYXRlCXwKLSAqCXwgIFNJR1dJTkNIICAgICAgICAgIHwJaWdub3JlICAgCXwKLSAqCXwgIFNJR1BXUiAgICAgICAgICAgIHwJdGVybWluYXRlCXwKLSAqCXwgIFNJR1JUTUlOLVNJR1JUTUFYIHwJdGVybWluYXRlICAgICAgIHwKLSAqCSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rCi0gKgl8ICBub24tUE9TSVggc2lnbmFsICB8ICBkZWZhdWx0IGFjdGlvbiAgfAotICoJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqCXwgIFNJR0VNVCAgICAgICAgICAgIHwgIGNvcmVkdW1wCXwKLSAqCSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rCi0gKgotICogKCspIEZvciBTSUdLSUxMIGFuZCBTSUdTVE9QIHRoZSBhY3Rpb24gaXMgImFsd2F5cyIsIG5vdCBqdXN0ICJkZWZhdWx0Ii4KLSAqICgqKSBTcGVjaWFsIGpvYiBjb250cm9sIGVmZmVjdHM6Ci0gKiBXaGVuIFNJR0NPTlQgaXMgc2VudCwgaXQgcmVzdW1lcyB0aGUgcHJvY2VzcyAoYWxsIHRocmVhZHMgaW4gdGhlIGdyb3VwKQotICogZnJvbSBUQVNLX1NUT1BQRUQgc3RhdGUgYW5kIGFsc28gY2xlYXJzIGFueSBwZW5kaW5nL3F1ZXVlZCBzdG9wIHNpZ25hbHMKLSAqIChhbnkgb2YgdGhvc2UgbWFya2VkIHdpdGggInN0b3AoKikiKS4gIFRoaXMgaGFwcGVucyByZWdhcmRsZXNzIG9mIGJsb2NraW5nLAotICogY2F0Y2hpbmcsIG9yIGlnbm9yaW5nIFNJR0NPTlQuICBXaGVuIGFueSBzdG9wIHNpZ25hbCBpcyBzZW50LCBpdCBjbGVhcnMKLSAqIGFueSBwZW5kaW5nL3F1ZXVlZCBTSUdDT05UIHNpZ25hbHM7IHRoaXMgaGFwcGVucyByZWdhcmRsZXNzIG9mIGJsb2NraW5nLAotICogY2F0Y2hpbmcsIG9yIGlnbm9yZWQgdGhlIHN0b3Agc2lnbmFsLCB0aG91Z2ggKGV4Y2VwdCBmb3IgU0lHU1RPUCkgdGhlCi0gKiBkZWZhdWx0IGFjdGlvbiBvZiBzdG9wcGluZyB0aGUgcHJvY2VzcyBtYXkgaGFwcGVuIGxhdGVyIG9yIG5ldmVyLgotICovCi0KLSNpZmRlZiBTSUdFTVQKLSNkZWZpbmUgTV9TSUdFTVQJTShTSUdFTVQpCi0jZWxzZQotI2RlZmluZSBNX1NJR0VNVAkwCi0jZW5kaWYKLQotI2lmIFNJR1JUTUlOID4gQklUU19QRVJfTE9ORwotI2RlZmluZSBNKHNpZykgKDFVTEwgPDwgKChzaWcpLTEpKQotI2Vsc2UKLSNkZWZpbmUgTShzaWcpICgxVUwgPDwgKChzaWcpLTEpKQotI2VuZGlmCi0jZGVmaW5lIFQoc2lnLCBtYXNrKSAoTShzaWcpICYgKG1hc2spKQotCi0jZGVmaW5lIFNJR19LRVJORUxfT05MWV9NQVNLIChcCi0JTShTSUdLSUxMKSAgIHwgIE0oU0lHU1RPUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLQotI2RlZmluZSBTSUdfS0VSTkVMX1NUT1BfTUFTSyAoXAotCU0oU0lHU1RPUCkgICB8ICBNKFNJR1RTVFApICAgfCAgTShTSUdUVElOKSAgIHwgIE0oU0lHVFRPVSkgICApCi0KLSNkZWZpbmUgU0lHX0tFUk5FTF9DT1JFRFVNUF9NQVNLIChcCi0gICAgICAgIE0oU0lHUVVJVCkgICB8ICBNKFNJR0lMTCkgICAgfCAgTShTSUdUUkFQKSAgIHwgIE0oU0lHQUJSVCkgICB8IFwKLSAgICAgICAgTShTSUdGUEUpICAgIHwgIE0oU0lHU0VHVikgICB8ICBNKFNJR0JVUykgICAgfCAgTShTSUdTWVMpICAgIHwgXAotICAgICAgICBNKFNJR1hDUFUpICAgfCAgTShTSUdYRlNaKSAgIHwgIE1fU0lHRU1UICAgICAgICAgICAgICAgICAgICAgKQotCi0jZGVmaW5lIFNJR19LRVJORUxfSUdOT1JFX01BU0sgKFwKLSAgICAgICAgTShTSUdDT05UKSAgIHwgIE0oU0lHQ0hMRCkgICB8ICBNKFNJR1dJTkNIKSAgfCAgTShTSUdVUkcpICAgICkKLQotI2RlZmluZSBzaWdfa2VybmVsX29ubHkoc2lnKSBcCi0JCSgoKHNpZykgPCBTSUdSVE1JTikgICYmIFQoc2lnLCBTSUdfS0VSTkVMX09OTFlfTUFTSykpCi0jZGVmaW5lIHNpZ19rZXJuZWxfY29yZWR1bXAoc2lnKSBcCi0JCSgoKHNpZykgPCBTSUdSVE1JTikgICYmIFQoc2lnLCBTSUdfS0VSTkVMX0NPUkVEVU1QX01BU0spKQotI2RlZmluZSBzaWdfa2VybmVsX2lnbm9yZShzaWcpIFwKLQkJKCgoc2lnKSA8IFNJR1JUTUlOKSAgJiYgVChzaWcsIFNJR19LRVJORUxfSUdOT1JFX01BU0spKQotI2RlZmluZSBzaWdfa2VybmVsX3N0b3Aoc2lnKSBcCi0JCSgoKHNpZykgPCBTSUdSVE1JTikgICYmIFQoc2lnLCBTSUdfS0VSTkVMX1NUT1BfTUFTSykpCi0KLSNkZWZpbmUgc2lnX25lZWRzX3Rhc2tsaXN0KHNpZykJKChzaWcpID09IFNJR0NPTlQpCi0KLSNkZWZpbmUgc2lnX3VzZXJfZGVmaW5lZCh0LCBzaWducikgXAotCSgoKHQpLT5zaWdoYW5kLT5hY3Rpb25bKHNpZ25yKS0xXS5zYS5zYV9oYW5kbGVyICE9IFNJR19ERkwpICYmCVwKLQkgKCh0KS0+c2lnaGFuZC0+YWN0aW9uWyhzaWduciktMV0uc2Euc2FfaGFuZGxlciAhPSBTSUdfSUdOKSkKLQotI2RlZmluZSBzaWdfZmF0YWwodCwgc2lnbnIpIFwKLQkoIVQoc2lnbnIsIFNJR19LRVJORUxfSUdOT1JFX01BU0t8U0lHX0tFUk5FTF9TVE9QX01BU0spICYmIFwKLQkgKHQpLT5zaWdoYW5kLT5hY3Rpb25bKHNpZ25yKS0xXS5zYS5zYV9oYW5kbGVyID09IFNJR19ERkwpCiAKIHN0YXRpYyBpbnQgc2lnX2lnbm9yZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgc2lnKQogewpAQCAtMjE1LDE1ICs5NiwyNyBAQAogCiAjZGVmaW5lIFBFTkRJTkcocCxiKSBoYXNfcGVuZGluZ19zaWduYWxzKCYocCktPnNpZ25hbCwgKGIpKQogCi1mYXN0Y2FsbCB2b2lkIHJlY2FsY19zaWdwZW5kaW5nX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCitzdGF0aWMgaW50IHJlY2FsY19zaWdwZW5kaW5nX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCiB7CiAJaWYgKHQtPnNpZ25hbC0+Z3JvdXBfc3RvcF9jb3VudCA+IDAgfHwKIAkgICAgKGZyZWV6aW5nKHQpKSB8fAogCSAgICBQRU5ESU5HKCZ0LT5wZW5kaW5nLCAmdC0+YmxvY2tlZCkgfHwKLQkgICAgUEVORElORygmdC0+c2lnbmFsLT5zaGFyZWRfcGVuZGluZywgJnQtPmJsb2NrZWQpKQorCSAgICBQRU5ESU5HKCZ0LT5zaWduYWwtPnNoYXJlZF9wZW5kaW5nLCAmdC0+YmxvY2tlZCkpIHsKIAkJc2V0X3Rza190aHJlYWRfZmxhZyh0LCBUSUZfU0lHUEVORElORyk7Ci0JZWxzZQotCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcodCwgVElGX1NJR1BFTkRJTkcpOworCQlyZXR1cm4gMTsKKwl9CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHQsIFRJRl9TSUdQRU5ESU5HKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFmdGVyIHJlY2FsY3VsYXRpbmcgVElGX1NJR1BFTkRJTkcsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0YXNrIHdha2VzIHVwLgorICogVGhpcyBpcyBzdXBlcmZsdW91cyB3aGVuIGNhbGxlZCBvbiBjdXJyZW50LCB0aGUgd2FrZXVwIGlzIGEgaGFybWxlc3Mgbm8tb3AuCisgKi8KK3ZvaWQgcmVjYWxjX3NpZ3BlbmRpbmdfYW5kX3dha2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0KQoreworCWlmIChyZWNhbGNfc2lncGVuZGluZ190c2sodCkpCisJCXNpZ25hbF93YWtlX3VwKHQsIDApOwogfQogCiB2b2lkIHJlY2FsY19zaWdwZW5kaW5nKHZvaWQpCkBAIC0yMzMsOCArMTI2LDcgQEAKIAogLyogR2l2ZW4gdGhlIG1hc2ssIGZpbmQgdGhlIGZpcnN0IGF2YWlsYWJsZSBzaWduYWwgdGhhdCBzaG91bGQgYmUgc2VydmljZWQuICovCiAKLXN0YXRpYyBpbnQKLW5leHRfc2lnbmFsKHN0cnVjdCBzaWdwZW5kaW5nICpwZW5kaW5nLCBzaWdzZXRfdCAqbWFzaykKK2ludCBuZXh0X3NpZ25hbChzdHJ1Y3Qgc2lncGVuZGluZyAqcGVuZGluZywgc2lnc2V0X3QgKm1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBpLCAqcywgKm0sIHg7CiAJaW50IHNpZyA9IDA7CkBAIC0zMjksNiArMjIxLDE2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwogfQogCit2b2lkIGlnbm9yZV9zaWduYWxzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBfTlNJRzsgKytpKQorCQl0LT5zaWdoYW5kLT5hY3Rpb25baV0uc2Euc2FfaGFuZGxlciA9IFNJR19JR047CisKKwlmbHVzaF9zaWduYWxzKHQpOworfQorCiAvKgogICogRmx1c2ggYWxsIGhhbmRsZXJzIGZvciBhIHRhc2suCiAgKi8KQEAgLTYwNyw2ICs1MDksMTEgQEAKIAlpbnQgZXJyb3IgPSAtRUlOVkFMOwogCWlmICghdmFsaWRfc2lnbmFsKHNpZykpCiAJCXJldHVybiBlcnJvcjsKKworCWVycm9yID0gYXVkaXRfc2lnbmFsX2luZm8oc2lnLCB0KTsgLyogTGV0IGF1ZGl0IHN5c3RlbSBzZWUgdGhlIHNpZ25hbCAqLworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCiAJZXJyb3IgPSAtRVBFUk07CiAJaWYgKChpbmZvID09IFNFTkRfU0lHX05PSU5GTyB8fCAoIWlzX3NpX3NwZWNpYWwoaW5mbykgJiYgU0lfRlJPTVVTRVIoaW5mbykpKQogCSAgICAmJiAoKHNpZyAhPSBTSUdDT05UKSB8fApAQCAtNjE2LDEwICs1MjMsNyBAQAogCSAgICAmJiAhY2FwYWJsZShDQVBfS0lMTCkpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gc2VjdXJpdHlfdGFza19raWxsKHQsIGluZm8sIHNpZywgMCk7Ci0JaWYgKCFlcnJvcikKLQkJYXVkaXRfc2lnbmFsX2luZm8oc2lnLCB0KTsgLyogTGV0IGF1ZGl0IHN5c3RlbSBzZWUgdGhlIHNpZ25hbCAqLwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gc2VjdXJpdHlfdGFza19raWxsKHQsIGluZm8sIHNpZywgMCk7CiB9CiAKIC8qIGZvcndhcmQgZGVjbCAqLwpAQCAtNzQwLDYgKzY0NCwxMiBAQAogCWludCByZXQgPSAwOwogCiAJLyoKKwkgKiBEZWxpdmVyIHRoZSBzaWduYWwgdG8gbGlzdGVuaW5nIHNpZ25hbGZkcy4gVGhpcyBtdXN0IGJlIGNhbGxlZAorCSAqIHdpdGggdGhlIHNpZ2hhbmQgbG9jayBoZWxkLgorCSAqLworCXNpZ25hbGZkX25vdGlmeSh0LCBzaWcpOworCisJLyoKIAkgKiBmYXN0LXBhdGhlZCBzaWduYWxzIGZvciBrZXJuZWwtaW50ZXJuYWwgdGhpbmdzIGxpa2UgU0lHU1RPUAogCSAqIG9yIFNJR0tJTEwuCiAJICovCkBAIC04NDYsNyArNzU2LDcgQEAKIAkJYWN0aW9uLT5zYS5zYV9oYW5kbGVyID0gU0lHX0RGTDsKIAkJaWYgKGJsb2NrZWQpIHsKIAkJCXNpZ2RlbHNldCgmdC0+YmxvY2tlZCwgc2lnKTsKLQkJCXJlY2FsY19zaWdwZW5kaW5nX3Rzayh0KTsKKwkJCXJlY2FsY19zaWdwZW5kaW5nX2FuZF93YWtlKHQpOwogCQl9CiAJfQogCXJldCA9IHNwZWNpZmljX3NlbmRfc2lnX2luZm8oc2lnLCBpbmZvLCB0KTsKQEAgLTEwMzMsMTcgKzk0Myw2IEBACiAJCWlmICh0LT5leGl0X3N0YXRlKQogCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogV2UgZG9uJ3Qgd2FudCB0byBub3RpZnkgdGhlIHBhcmVudCwgc2luY2Ugd2UgYXJlCi0JCSAqIGtpbGxlZCBhcyBwYXJ0IG9mIGEgdGhyZWFkIGdyb3VwIGR1ZSB0byBhbm90aGVyCi0JCSAqIHRocmVhZCBkb2luZyBhbiBleGVjdmUoKSBvciBzaW1pbGFyLiBTbyBzZXQgdGhlCi0JCSAqIGV4aXQgc2lnbmFsIHRvIC0xIHRvIGFsbG93IGltbWVkaWF0ZSByZWFwaW5nIG9mCi0JCSAqIHRoZSBwcm9jZXNzLiAgQnV0IGRvbid0IGRldGFjaCB0aGUgdGhyZWFkIGdyb3VwCi0JCSAqIGxlYWRlci4KLQkJICovCi0JCWlmICh0ICE9IHAtPmdyb3VwX2xlYWRlcikKLQkJCXQtPmV4aXRfc2lnbmFsID0gLTE7Ci0KIAkJLyogU0lHS0lMTCB3aWxsIGJlIGhhbmRsZWQgYmVmb3JlIGFueSBwZW5kaW5nIFNJR1NUT1AgKi8KIAkJc2lnYWRkc2V0KCZ0LT5wZW5kaW5nLnNpZ25hbCwgU0lHS0lMTCk7CiAJCXNpZ25hbF93YWtlX3VwKHQsIDEpOwpAQCAtMTQwMSw2ICsxMzAwLDExIEBACiAJCXJldCA9IDE7CiAJCWdvdG8gb3V0OwogCX0KKwkvKgorCSAqIERlbGl2ZXIgdGhlIHNpZ25hbCB0byBsaXN0ZW5pbmcgc2lnbmFsZmRzLiBUaGlzIG11c3QgYmUgY2FsbGVkCisJICogd2l0aCB0aGUgc2lnaGFuZCBsb2NrIGhlbGQuCisJICovCisJc2lnbmFsZmRfbm90aWZ5KHAsIHNpZyk7CiAKIAlsaXN0X2FkZF90YWlsKCZxLT5saXN0LCAmcC0+cGVuZGluZy5saXN0KTsKIAlzaWdhZGRzZXQoJnAtPnBlbmRpbmcuc2lnbmFsLCBzaWcpOwpAQCAtMTQ0NCw2ICsxMzQ4LDExIEBACiAJCXEtPmluZm8uc2lfb3ZlcnJ1bisrOwogCQlnb3RvIG91dDsKIAl9IAorCS8qCisJICogRGVsaXZlciB0aGUgc2lnbmFsIHRvIGxpc3RlbmluZyBzaWduYWxmZHMuIFRoaXMgbXVzdCBiZSBjYWxsZWQKKwkgKiB3aXRoIHRoZSBzaWdoYW5kIGxvY2sgaGVsZC4KKwkgKi8KKwlzaWduYWxmZF9ub3RpZnkocCwgc2lnKTsKIAogCS8qCiAJICogUHV0IHRoaXMgc2lnbmFsIG9uIHRoZSBzaGFyZWQtcGVuZGluZyBxdWV1ZS4KQEAgLTIxMDQsNiArMjAxMyw4IEBACiAJLyoKIAkgKiBJZiB5b3UgY2hhbmdlIHNpZ2luZm9fdCBzdHJ1Y3R1cmUsIHBsZWFzZSBiZSBzdXJlCiAJICogdGhpcyBjb2RlIGlzIGZpeGVkIGFjY29yZGluZ2x5LgorCSAqIFBsZWFzZSByZW1lbWJlciB0byB1cGRhdGUgdGhlIHNpZ25hbGZkX2NvcHlpbmZvKCkgZnVuY3Rpb24KKwkgKiBpbnNpZGUgZnMvc2lnbmFsZmQuYyB0b28sIGluIGNhc2Ugc2lnaW5mb190IGNoYW5nZXMuCiAJICogSXQgc2hvdWxkIG5ldmVyIGNvcHkgYW55IHBhZCBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZQogCSAqIHRvIGF2b2lkIHNlY3VyaXR5IGxlYWtzLCBidXQgbXVzdCBjb3B5IHRoZSBnZW5lcmljCiAJICogMyBpbnRzIHBsdXMgdGhlIHJlbGV2YW50IHVuaW9uIG1lbWJlci4KQEAgLTIzNzQsNyArMjI4NSw3IEBACiAJCQlybV9mcm9tX3F1ZXVlX2Z1bGwoJm1hc2ssICZ0LT5zaWduYWwtPnNoYXJlZF9wZW5kaW5nKTsKIAkJCWRvIHsKIAkJCQlybV9mcm9tX3F1ZXVlX2Z1bGwoJm1hc2ssICZ0LT5wZW5kaW5nKTsKLQkJCQlyZWNhbGNfc2lncGVuZGluZ190c2sodCk7CisJCQkJcmVjYWxjX3NpZ3BlbmRpbmdfYW5kX3dha2UodCk7CiAJCQkJdCA9IG5leHRfdGhyZWFkKHQpOwogCQkJfSB3aGlsZSAodCAhPSBjdXJyZW50KTsKIAkJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggOGI3NTAwOC4uMGI5ODg2YSAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC01OTMsNiArNTkzLDcgQEAKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKIAkJcCA9IGt0aHJlYWRfY3JlYXRlKGtzb2Z0aXJxZCwgaGNwdSwgImtzb2Z0aXJxZC8lZCIsIGhvdGNwdSk7CiAJCWlmIChJU19FUlIocCkpIHsKIAkJCXByaW50aygia3NvZnRpcnFkIGZvciAlaSBmYWlsZWRcbiIsIGhvdGNwdSk7CkBAIC02MDIsMTYgKzYwMywxOSBAQAogICAJCXBlcl9jcHUoa3NvZnRpcnFkLCBob3RjcHUpID0gcDsKICAJCWJyZWFrOwogCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgogCQl3YWtlX3VwX3Byb2Nlc3MocGVyX2NwdShrc29mdGlycWQsIGhvdGNwdSkpOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CiAJCWlmICghcGVyX2NwdShrc29mdGlycWQsIGhvdGNwdSkpCiAJCQlicmVhazsKIAkJLyogVW5iaW5kIHNvIGl0IGNhbiBydW4uICBGYWxsIHRocnUuICovCiAJCWt0aHJlYWRfYmluZChwZXJfY3B1KGtzb2Z0aXJxZCwgaG90Y3B1KSwKIAkJCSAgICAgYW55X29ubGluZV9jcHUoY3B1X29ubGluZV9tYXApKTsKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQlwID0gcGVyX2NwdShrc29mdGlycWQsIGhvdGNwdSk7CiAJCXBlcl9jcHUoa3NvZnRpcnFkLCBob3RjcHUpID0gTlVMTDsKIAkJa3RocmVhZF9zdG9wKHApOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRsb2NrdXAuYyBiL2tlcm5lbC9zb2Z0bG9ja3VwLmMKaW5kZXggNTBhZmViOC4uMDEzMWUyOSAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRsb2NrdXAuYworKysgYi9rZXJuZWwvc29mdGxvY2t1cC5jCkBAIC0zNCwxMiArMzQsMzIgQEAKIAkubm90aWZpZXJfY2FsbCA9IHNvZnRsb2NrX3BhbmljLAogfTsKIAorLyoKKyAqIFJldHVybnMgc2Vjb25kcywgYXBwcm94aW1hdGVseS4gIFdlIGRvbid0IG5lZWQgbmFub3NlY29uZAorICogcmVzb2x1dGlvbiwgYW5kIHdlIGRvbid0IG5lZWQgdG8gd2FzdGUgdGltZSB3aXRoIGEgYmlnIGRpdmlkZSB3aGVuCisgKiAyXjMwbnMgPT0gMS4wNzRzLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfdGltZXN0YW1wKHZvaWQpCit7CisJcmV0dXJuIHNjaGVkX2Nsb2NrKCkgPj4gMzA7ICAvKiAyXjMwIH49IDEwXjkgKi8KK30KKwogdm9pZCB0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKHZvaWQpCiB7Ci0JX19yYXdfZ2V0X2NwdV92YXIodG91Y2hfdGltZXN0YW1wKSA9IGppZmZpZXM7CisJX19yYXdfZ2V0X2NwdV92YXIodG91Y2hfdGltZXN0YW1wKSA9IGdldF90aW1lc3RhbXAoKTsKIH0KIEVYUE9SVF9TWU1CT0wodG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyk7CiAKK3ZvaWQgdG91Y2hfYWxsX3NvZnRsb2NrdXBfd2F0Y2hkb2dzKHZvaWQpCit7CisJaW50IGNwdTsKKworCS8qIENhdXNlIGVhY2ggQ1BVIHRvIHJlLXVwZGF0ZSBpdHMgdGltZXN0YW1wIHJhdGhlciB0aGFuIGNvbXBsYWluICovCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCXBlcl9jcHUodG91Y2hfdGltZXN0YW1wLCBjcHUpID0gMDsKK30KK0VYUE9SVF9TWU1CT0wodG91Y2hfYWxsX3NvZnRsb2NrdXBfd2F0Y2hkb2dzKTsKKwogLyoKICAqIFRoaXMgY2FsbGJhY2sgcnVucyBmcm9tIHRoZSB0aW1lciBpbnRlcnJ1cHQsIGFuZCBjaGVja3MKICAqIHdoZXRoZXIgdGhlIHdhdGNoZG9nIHRocmVhZCBoYXMgaHVuZyBvciBub3Q6CkBAIC00OCw5ICs2OCwxOCBAQAogewogCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl1bnNpZ25lZCBsb25nIHRvdWNoX3RpbWVzdGFtcCA9IHBlcl9jcHUodG91Y2hfdGltZXN0YW1wLCB0aGlzX2NwdSk7CisJdW5zaWduZWQgbG9uZyBwcmludF90aW1lc3RhbXA7CisJdW5zaWduZWQgbG9uZyBub3c7CiAKLQkvKiBwcmV2ZW50IGRvdWJsZSByZXBvcnRzOiAqLwotCWlmIChwZXJfY3B1KHByaW50X3RpbWVzdGFtcCwgdGhpc19jcHUpID09IHRvdWNoX3RpbWVzdGFtcCB8fAorCWlmICh0b3VjaF90aW1lc3RhbXAgPT0gMCkgeworCQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CisJCXJldHVybjsKKwl9CisKKwlwcmludF90aW1lc3RhbXAgPSBwZXJfY3B1KHByaW50X3RpbWVzdGFtcCwgdGhpc19jcHUpOworCisJLyogcmVwb3J0IGF0IG1vc3Qgb25jZSBhIHNlY29uZCAqLworCWlmIChwcmludF90aW1lc3RhbXAgPCAodG91Y2hfdGltZXN0YW1wICsgMSkgfHwKIAkJZGlkX3BhbmljIHx8CiAJCQkhcGVyX2NwdSh3YXRjaGRvZ190YXNrLCB0aGlzX2NwdSkpCiAJCXJldHVybjsKQEAgLTYxLDEyICs5MCwxNCBAQAogCQlyZXR1cm47CiAJfQogCisJbm93ID0gZ2V0X3RpbWVzdGFtcCgpOworCiAJLyogV2FrZSB1cCB0aGUgaGlnaC1wcmlvIHdhdGNoZG9nIHRhc2sgZXZlcnkgc2Vjb25kOiAqLwotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRvdWNoX3RpbWVzdGFtcCArIEhaKSkKKwlpZiAobm93ID4gKHRvdWNoX3RpbWVzdGFtcCArIDEpKQogCQl3YWtlX3VwX3Byb2Nlc3MocGVyX2NwdSh3YXRjaGRvZ190YXNrLCB0aGlzX2NwdSkpOwogCiAJLyogV2FybiBhYm91dCB1bnJlYXNvbmFibGUgMTArIHNlY29uZHMgZGVsYXlzOiAqLwotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRvdWNoX3RpbWVzdGFtcCArIDEwKkhaKSkgeworCWlmIChub3cgPiAodG91Y2hfdGltZXN0YW1wICsgMTApKSB7CiAJCXBlcl9jcHUocHJpbnRfdGltZXN0YW1wLCB0aGlzX2NwdSkgPSB0b3VjaF90aW1lc3RhbXA7CiAKIAkJc3Bpbl9sb2NrKCZwcmludF9sb2NrKTsKQEAgLTgyLDExICsxMTMsMTQgQEAKICAqLwogc3RhdGljIGludCB3YXRjaGRvZyh2b2lkICogX19iaW5kX2NwdSkKIHsKLQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9IDk5IH07CisJc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJpb3JpdHkgPSBNQVhfUlRfUFJJTy0xIH07CiAKIAlzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCwgU0NIRURfRklGTywgJnBhcmFtKTsKIAljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKIAorCS8qIGluaXRpYWxpemUgdGltZXN0YW1wICovCisJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOworCiAJLyoKIAkgKiBSdW4gYnJpZWZseSBvbmNlIHBlciBzZWNvbmQgdG8gcmVzZXQgdGhlIHNvZnRsb2NrdXAgdGltZXN0YW1wLgogCSAqIElmIHRoaXMgZ2V0cyBkZWxheWVkIGZvciBtb3JlIHRoYW4gMTAgc2Vjb25kcyB0aGVuIHRoZQpAQCAtMTEyLDI3ICsxNDYsMzEgQEAKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKIAkJQlVHX09OKHBlcl9jcHUod2F0Y2hkb2dfdGFzaywgaG90Y3B1KSk7CiAJCXAgPSBrdGhyZWFkX2NyZWF0ZSh3YXRjaGRvZywgaGNwdSwgIndhdGNoZG9nLyVkIiwgaG90Y3B1KTsKIAkJaWYgKElTX0VSUihwKSkgewogCQkJcHJpbnRrKCJ3YXRjaGRvZyBmb3IgJWkgZmFpbGVkXG4iLCBob3RjcHUpOwogCQkJcmV0dXJuIE5PVElGWV9CQUQ7CiAJCX0KLSAgCQlwZXJfY3B1KHRvdWNoX3RpbWVzdGFtcCwgaG90Y3B1KSA9IGppZmZpZXM7CisgIAkJcGVyX2NwdSh0b3VjaF90aW1lc3RhbXAsIGhvdGNwdSkgPSAwOwogICAJCXBlcl9jcHUod2F0Y2hkb2dfdGFzaywgaG90Y3B1KSA9IHA7CiAJCWt0aHJlYWRfYmluZChwLCBob3RjcHUpOwogIAkJYnJlYWs7CiAJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CiAJCXdha2VfdXBfcHJvY2VzcyhwZXJfY3B1KHdhdGNoZG9nX3Rhc2ssIGhvdGNwdSkpOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CiAJCWlmICghcGVyX2NwdSh3YXRjaGRvZ190YXNrLCBob3RjcHUpKQogCQkJYnJlYWs7CiAJCS8qIFVuYmluZCBzbyBpdCBjYW4gcnVuLiAgRmFsbCB0aHJ1LiAqLwogCQlrdGhyZWFkX2JpbmQocGVyX2NwdSh3YXRjaGRvZ190YXNrLCBob3RjcHUpLAogCQkJICAgICBhbnlfb25saW5lX2NwdShjcHVfb25saW5lX21hcCkpOwogCWNhc2UgQ1BVX0RFQUQ6CisJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCXAgPSBwZXJfY3B1KHdhdGNoZG9nX3Rhc2ssIGhvdGNwdSk7CiAJCXBlcl9jcHUod2F0Y2hkb2dfdGFzaywgaG90Y3B1KSA9IE5VTEw7CiAJCWt0aHJlYWRfc3RvcChwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zdG9wX21hY2hpbmUuYyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwppbmRleCAxMjQ1ODA0Li5mY2VlMmE4IDEwMDY0NAotLS0gYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKKysrIGIva2VybmVsL3N0b3BfbWFjaGluZS5jCkBAIC0xLDEyICsxLDE1IEBACiAvKiBDb3B5cmlnaHQgMjAwNSBSdXN0eSBSdXNzZWxsIHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdSBJQk0gQ29ycG9yYXRpb24uCiAgKiBHUEwgdjIgYW5kIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTQ0LDYgKzQ3LDcgQEAKIAkJaWYgKHN0b3BtYWNoaW5lX3N0YXRlID09IFNUT1BNQUNISU5FX0RJU0FCTEVfSVJRIAogCQkgICAgJiYgIWlycXNfZGlzYWJsZWQpIHsKIAkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCQloYXJkX2lycV9kaXNhYmxlKCk7CiAJCQlpcnFzX2Rpc2FibGVkID0gMTsKIAkJCS8qIEFjazogaXJxcyBkaXNhYmxlZC4gKi8KIAkJCXNtcF9tYigpOyAvKiBNdXN0IHJlYWQgc3RhdGUgZmlyc3QuICovCkBAIC0xMjMsNiArMTI3LDcgQEAKIAogCS8qIE1ha2UgdGhlbSBkaXNhYmxlIGlycXMuICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwloYXJkX2lycV9kaXNhYmxlKCk7CiAJc3RvcG1hY2hpbmVfc2V0X3N0YXRlKFNUT1BNQUNISU5FX0RJU0FCTEVfSVJRKTsKIAogCXJldHVybiAwOwpAQCAtMjA4LDMgKzIxMyw0IEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc3RvcF9tYWNoaW5lX3J1bik7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggZmUxZjNhYi4uODcyMjcxYyAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpAQCAtMjksNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NuX3Byb2MuaD4KICNpbmNsdWRlIDxsaW51eC9nZXRjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC90YXNrX2lvX2FjY291bnRpbmdfb3BzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgpAQCAtMTM0LDE5ICsxMzYsMzkgQEAKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIAorLyoqCisgKiBub3RpZmllcl9jYWxsX2NoYWluIC0gSW5mb3JtcyB0aGUgcmVnaXN0ZXJlZCBub3RpZmllcnMgYWJvdXQgYW4gZXZlbnQuCisgKglAbmw6CQlQb2ludGVyIHRvIGhlYWQgb2YgdGhlIGJsb2NraW5nIG5vdGlmaWVyIGNoYWluCisgKglAdmFsOgkJVmFsdWUgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KKyAqCUB2OgkJUG9pbnRlciBwYXNzZWQgdW5tb2RpZmllZCB0byBub3RpZmllciBmdW5jdGlvbgorICoJQG5yX3RvX2NhbGw6CU51bWJlciBvZiBub3RpZmllciBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkLiBEb24ndCBjYXJlCisgKgkJICAgICAJdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgLTEuCisgKglAbnJfY2FsbHM6CVJlY29yZHMgdGhlIG51bWJlciBvZiBub3RpZmljYXRpb25zIHNlbnQuIERvbid0IGNhcmUKKyAqCQkgICAJdmFsdWUgb2YgdGhpcyBmaWVsZCBpcyBOVUxMLgorICogCUByZXR1cm5zOglub3RpZmllcl9jYWxsX2NoYWluIHJldHVybnMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZQorICoJCQlsYXN0IG5vdGlmaWVyIGZ1bmN0aW9uIGNhbGxlZC4KKyAqLworCiBzdGF0aWMgaW50IF9fa3Byb2JlcyBub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKm5sLAotCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKKwkJCQkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYsCisJCQkJCWludCBucl90b19jYWxsLAlpbnQgKm5yX2NhbGxzKQogewogCWludCByZXQgPSBOT1RJRllfRE9ORTsKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCAqbmV4dF9uYjsKIAogCW5iID0gcmN1X2RlcmVmZXJlbmNlKCpubCk7Ci0Jd2hpbGUgKG5iKSB7CisKKwl3aGlsZSAobmIgJiYgbnJfdG9fY2FsbCkgewogCQluZXh0X25iID0gcmN1X2RlcmVmZXJlbmNlKG5iLT5uZXh0KTsKIAkJcmV0ID0gbmItPm5vdGlmaWVyX2NhbGwobmIsIHZhbCwgdik7CisKKwkJaWYgKG5yX2NhbGxzKQorCQkJKCpucl9jYWxscykrKzsKKwogCQlpZiAoKHJldCAmIE5PVElGWV9TVE9QX01BU0spID09IE5PVElGWV9TVE9QX01BU0spCiAJCQlicmVhazsKIAkJbmIgPSBuZXh0X25iOworCQlucl90b19jYWxsLS07CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0yMDUsMTAgKzIyNywxMiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIpOwogCiAvKioKLSAqCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluIC0gQ2FsbCBmdW5jdGlvbnMgaW4gYW4gYXRvbWljIG5vdGlmaWVyIGNoYWluCisgKglfX2F0b21pY19ub3RpZmllcl9jYWxsX2NoYWluIC0gQ2FsbCBmdW5jdGlvbnMgaW4gYW4gYXRvbWljIG5vdGlmaWVyIGNoYWluCiAgKglAbmg6IFBvaW50ZXIgdG8gaGVhZCBvZiB0aGUgYXRvbWljIG5vdGlmaWVyIGNoYWluCiAgKglAdmFsOiBWYWx1ZSBwYXNzZWQgdW5tb2RpZmllZCB0byBub3RpZmllciBmdW5jdGlvbgogICoJQHY6IFBvaW50ZXIgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KKyAqCUBucl90b19jYWxsOiBTZWUgdGhlIGNvbW1lbnQgZm9yIG5vdGlmaWVyX2NhbGxfY2hhaW4uCisgKglAbnJfY2FsbHM6IFNlZSB0aGUgY29tbWVudCBmb3Igbm90aWZpZXJfY2FsbF9jaGFpbi4KICAqCiAgKglDYWxscyBlYWNoIGZ1bmN0aW9uIGluIGEgbm90aWZpZXIgY2hhaW4gaW4gdHVybi4gIFRoZSBmdW5jdGlvbnMKICAqCXJ1biBpbiBhbiBhdG9taWMgY29udGV4dCwgc28gdGhleSBtdXN0IG5vdCBibG9jay4KQEAgLTIyMiwxOSArMjQ2LDI3IEBACiAgKglvZiB0aGUgbGFzdCBub3RpZmllciBmdW5jdGlvbiBjYWxsZWQuCiAgKi8KICAKLWludCBfX2twcm9iZXMgYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkICpuaCwKLQkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCitpbnQgX19rcHJvYmVzIF9fYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkICpuaCwKKwkJCQkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYsCisJCQkJCWludCBucl90b19jYWxsLCBpbnQgKm5yX2NhbGxzKQogewogCWludCByZXQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JcmV0ID0gbm90aWZpZXJfY2FsbF9jaGFpbigmbmgtPmhlYWQsIHZhbCwgdik7CisJcmV0ID0gbm90aWZpZXJfY2FsbF9jaGFpbigmbmgtPmhlYWQsIHZhbCwgdiwgbnJfdG9fY2FsbCwgbnJfY2FsbHMpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9fYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4pOwogCitpbnQgX19rcHJvYmVzIGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCAqbmgsCisJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQoreworCXJldHVybiBfX2F0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKG5oLCB2YWwsIHYsIC0xLCBOVUxMKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4pOwogLyoKICAqCUJsb2NraW5nIG5vdGlmaWVyIGNoYWluIHJvdXRpbmVzLiAgQWxsIGFjY2VzcyB0byB0aGUgY2hhaW4gaXMKICAqCXN5bmNocm9uaXplZCBieSBhbiByd3NlbS4KQEAgLTMwNCwxMCArMzM2LDEyIEBACiBFWFBPUlRfU1lNQk9MX0dQTChibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKTsKIAogLyoqCi0gKglibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluIC0gQ2FsbCBmdW5jdGlvbnMgaW4gYSBibG9ja2luZyBub3RpZmllciBjaGFpbgorICoJX19ibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluIC0gQ2FsbCBmdW5jdGlvbnMgaW4gYSBibG9ja2luZyBub3RpZmllciBjaGFpbgogICoJQG5oOiBQb2ludGVyIHRvIGhlYWQgb2YgdGhlIGJsb2NraW5nIG5vdGlmaWVyIGNoYWluCiAgKglAdmFsOiBWYWx1ZSBwYXNzZWQgdW5tb2RpZmllZCB0byBub3RpZmllciBmdW5jdGlvbgogICoJQHY6IFBvaW50ZXIgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KKyAqCUBucl90b19jYWxsOiBTZWUgY29tbWVudCBmb3Igbm90aWZpZXJfY2FsbF9jaGFpbi4KKyAqCUBucl9jYWxsczogU2VlIGNvbW1lbnQgZm9yIG5vdGlmaWVyX2NhbGxfY2hhaW4uCiAgKgogICoJQ2FsbHMgZWFjaCBmdW5jdGlvbiBpbiBhIG5vdGlmaWVyIGNoYWluIGluIHR1cm4uICBUaGUgZnVuY3Rpb25zCiAgKglydW4gaW4gYSBwcm9jZXNzIGNvbnRleHQsIHNvIHRoZXkgYXJlIGFsbG93ZWQgdG8gYmxvY2suCkBAIC0zMjAsOCArMzU0LDkgQEAKICAqCW9mIHRoZSBsYXN0IG5vdGlmaWVyIGZ1bmN0aW9uIGNhbGxlZC4KICAqLwogIAotaW50IGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgKm5oLAotCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKK2ludCBfX2Jsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgKm5oLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2LAorCQkJCSAgIGludCBucl90b19jYWxsLCBpbnQgKm5yX2NhbGxzKQogewogCWludCByZXQgPSBOT1RJRllfRE9ORTsKIApAQCAtMzMyLDEyICszNjcsMTkgQEAKIAkgKi8KIAlpZiAocmN1X2RlcmVmZXJlbmNlKG5oLT5oZWFkKSkgewogCQlkb3duX3JlYWQoJm5oLT5yd3NlbSk7Ci0JCXJldCA9IG5vdGlmaWVyX2NhbGxfY2hhaW4oJm5oLT5oZWFkLCB2YWwsIHYpOworCQlyZXQgPSBub3RpZmllcl9jYWxsX2NoYWluKCZuaC0+aGVhZCwgdmFsLCB2LCBucl90b19jYWxsLAorCQkJCQlucl9jYWxscyk7CiAJCXVwX3JlYWQoJm5oLT5yd3NlbSk7CiAJfQogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChfX2Jsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4pOwogCitpbnQgYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCAqbmgsCisJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQoreworCXJldHVybiBfX2Jsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4obmgsIHZhbCwgdiwgLTEsIE5VTEwpOworfQogRVhQT1JUX1NZTUJPTF9HUEwoYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbik7CiAKIC8qCkBAIC0zODMsMTAgKzQyNSwxMiBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmF3X25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIpOwogCiAvKioKLSAqCXJhd19ub3RpZmllcl9jYWxsX2NoYWluIC0gQ2FsbCBmdW5jdGlvbnMgaW4gYSByYXcgbm90aWZpZXIgY2hhaW4KKyAqCV9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4gLSBDYWxsIGZ1bmN0aW9ucyBpbiBhIHJhdyBub3RpZmllciBjaGFpbgogICoJQG5oOiBQb2ludGVyIHRvIGhlYWQgb2YgdGhlIHJhdyBub3RpZmllciBjaGFpbgogICoJQHZhbDogVmFsdWUgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KICAqCUB2OiBQb2ludGVyIHBhc3NlZCB1bm1vZGlmaWVkIHRvIG5vdGlmaWVyIGZ1bmN0aW9uCisgKglAbnJfdG9fY2FsbDogU2VlIGNvbW1lbnQgZm9yIG5vdGlmaWVyX2NhbGxfY2hhaW4uCisgKglAbnJfY2FsbHM6IFNlZSBjb21tZW50IGZvciBub3RpZmllcl9jYWxsX2NoYWluCiAgKgogICoJQ2FsbHMgZWFjaCBmdW5jdGlvbiBpbiBhIG5vdGlmaWVyIGNoYWluIGluIHR1cm4uICBUaGUgZnVuY3Rpb25zCiAgKglydW4gaW4gYW4gdW5kZWZpbmVkIGNvbnRleHQuCkBAIC00MDAsMTAgKzQ0NCwxOSBAQAogICoJb2YgdGhlIGxhc3Qgbm90aWZpZXIgZnVuY3Rpb24gY2FsbGVkLgogICovCiAKK2ludCBfX3Jhd19ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCByYXdfbm90aWZpZXJfaGVhZCAqbmgsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdiwKKwkJCSAgICAgIGludCBucl90b19jYWxsLCBpbnQgKm5yX2NhbGxzKQoreworCXJldHVybiBub3RpZmllcl9jYWxsX2NoYWluKCZuaC0+aGVhZCwgdmFsLCB2LCBucl90b19jYWxsLCBucl9jYWxscyk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKF9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4pOworCiBpbnQgcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHJhd19ub3RpZmllcl9oZWFkICpuaCwKIAkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCiB7Ci0JcmV0dXJuIG5vdGlmaWVyX2NhbGxfY2hhaW4oJm5oLT5oZWFkLCB2YWwsIHYpOworCXJldHVybiBfX3Jhd19ub3RpZmllcl9jYWxsX2NoYWluKG5oLCB2YWwsIHYsIC0xLCBOVUxMKTsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwocmF3X25vdGlmaWVyX2NhbGxfY2hhaW4pOwpAQCAtNDc4LDEwICs1MzEsMTIgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNyY3Vfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3Rlcik7CiAKIC8qKgotICoJc3JjdV9ub3RpZmllcl9jYWxsX2NoYWluIC0gQ2FsbCBmdW5jdGlvbnMgaW4gYW4gU1JDVSBub3RpZmllciBjaGFpbgorICoJX19zcmN1X25vdGlmaWVyX2NhbGxfY2hhaW4gLSBDYWxsIGZ1bmN0aW9ucyBpbiBhbiBTUkNVIG5vdGlmaWVyIGNoYWluCiAgKglAbmg6IFBvaW50ZXIgdG8gaGVhZCBvZiB0aGUgU1JDVSBub3RpZmllciBjaGFpbgogICoJQHZhbDogVmFsdWUgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KICAqCUB2OiBQb2ludGVyIHBhc3NlZCB1bm1vZGlmaWVkIHRvIG5vdGlmaWVyIGZ1bmN0aW9uCisgKglAbnJfdG9fY2FsbDogU2VlIGNvbW1lbnQgZm9yIG5vdGlmaWVyX2NhbGxfY2hhaW4uCisgKglAbnJfY2FsbHM6IFNlZSBjb21tZW50IGZvciBub3RpZmllcl9jYWxsX2NoYWluCiAgKgogICoJQ2FsbHMgZWFjaCBmdW5jdGlvbiBpbiBhIG5vdGlmaWVyIGNoYWluIGluIHR1cm4uICBUaGUgZnVuY3Rpb25zCiAgKglydW4gaW4gYSBwcm9jZXNzIGNvbnRleHQsIHNvIHRoZXkgYXJlIGFsbG93ZWQgdG8gYmxvY2suCkBAIC00OTQsMTggKzU0OSwyNSBAQAogICoJb2YgdGhlIGxhc3Qgbm90aWZpZXIgZnVuY3Rpb24gY2FsbGVkLgogICovCiAKLWludCBzcmN1X25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHNyY3Vfbm90aWZpZXJfaGVhZCAqbmgsCi0JCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQoraW50IF9fc3JjdV9ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBzcmN1X25vdGlmaWVyX2hlYWQgKm5oLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2LAorCQkJICAgICAgIGludCBucl90b19jYWxsLCBpbnQgKm5yX2NhbGxzKQogewogCWludCByZXQ7CiAJaW50IGlkeDsKIAogCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZuaC0+c3JjdSk7Ci0JcmV0ID0gbm90aWZpZXJfY2FsbF9jaGFpbigmbmgtPmhlYWQsIHZhbCwgdik7CisJcmV0ID0gbm90aWZpZXJfY2FsbF9jaGFpbigmbmgtPmhlYWQsIHZhbCwgdiwgbnJfdG9fY2FsbCwgbnJfY2FsbHMpOwogCXNyY3VfcmVhZF91bmxvY2soJm5oLT5zcmN1LCBpZHgpOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChfX3NyY3Vfbm90aWZpZXJfY2FsbF9jaGFpbik7CiAKK2ludCBzcmN1X25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHNyY3Vfbm90aWZpZXJfaGVhZCAqbmgsCisJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQoreworCXJldHVybiBfX3NyY3Vfbm90aWZpZXJfY2FsbF9jaGFpbihuaCwgdmFsLCB2LCAtMSwgTlVMTCk7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTChzcmN1X25vdGlmaWVyX2NhbGxfY2hhaW4pOwogCiAvKioKQEAgLTU5OCw3ICs2NjAsNyBAQAogCWludCBlcnJvciA9IC1FSU5WQUw7CiAJc3RydWN0IHBpZCAqcGdycDsKIAotCWlmICh3aGljaCA+IDIgfHwgd2hpY2ggPCAwKQorCWlmICh3aGljaCA+IFBSSU9fVVNFUiB8fCB3aGljaCA8IFBSSU9fUFJPQ0VTUykKIAkJZ290byBvdXQ7CiAKIAkvKiBub3JtYWxpemU6IGF2b2lkIHNpZ25lZCBkaXZpc2lvbiAocm91bmRpbmcgcHJvYmxlbXMpICovCkBAIC02NjIsNyArNzI0LDcgQEAKIAlsb25nIG5pY2V2YWwsIHJldHZhbCA9IC1FU1JDSDsKIAlzdHJ1Y3QgcGlkICpwZ3JwOwogCi0JaWYgKHdoaWNoID4gMiB8fCB3aGljaCA8IDApCisJaWYgKHdoaWNoID4gUFJJT19VU0VSIHx8IHdoaWNoIDwgUFJJT19QUk9DRVNTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CkBAIC04ODEsNyArOTQzLDcgQEAKICNpZmRlZiBDT05GSUdfU09GVFdBUkVfU1VTUEVORAogCWNhc2UgTElOVVhfUkVCT09UX0NNRF9TV19TVVNQRU5EOgogCQl7Ci0JCQlpbnQgcmV0ID0gcG1fc3VzcGVuZChQTV9TVVNQRU5EX0RJU0spOworCQkJaW50IHJldCA9IGhpYmVybmF0ZSgpOwogCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtMTI5Miw3ICsxMzU0LDcgQEAKIH0KIAogLyoKLSAqIFNhbW1hIHDlIHN2ZW5za2EuLgorICogU2FtbWEgcMOlIHN2ZW5za2EuLgogICovCiBhc21saW5rYWdlIGxvbmcgc3lzX3NldGZzZ2lkKGdpZF90IGdpZCkKIHsKQEAgLTE0MjYsNyArMTQ4OCw3IEBACiAJaWYgKHByb2Nlc3NfZ3JvdXAocCkgIT0gcGdpZCkgewogCQlkZXRhY2hfcGlkKHAsIFBJRFRZUEVfUEdJRCk7CiAJCXAtPnNpZ25hbC0+cGdycCA9IHBnaWQ7Ci0JCWF0dGFjaF9waWQocCwgUElEVFlQRV9QR0lELCBwZ2lkKTsKKwkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1BHSUQsIGZpbmRfcGlkKHBnaWQpKTsKIAl9CiAKIAllcnIgPSAwOwpAQCAtMTkyMyw2ICsxOTg1LDE2IEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAorCWlmIChyZXNvdXJjZSA9PSBSTElNSVRfQ1BVICYmIG5ld19ybGltLnJsaW1fY3VyID09IDApIHsKKwkJLyoKKwkJICogVGhlIGNhbGxlciBpcyBhc2tpbmcgZm9yIGFuIGltbWVkaWF0ZSBSTElNSVRfQ1BVCisJCSAqIGV4cGlyeS4gIEJ1dCB3ZSB1c2UgdGhlIHplcm8gdmFsdWUgdG8gbWVhbiAiaXQgd2FzCisJCSAqIG5ldmVyIHNldCIuICBTbyBsZXQncyBjaGVhdCBhbmQgbWFrZSBpdCBvbmUgc2Vjb25kCisJCSAqIGluc3RlYWQKKwkJICovCisJCW5ld19ybGltLnJsaW1fY3VyID0gMTsKKwl9CisKIAl0YXNrX2xvY2soY3VycmVudC0+Z3JvdXBfbGVhZGVyKTsKIAkqb2xkX3JsaW0gPSBuZXdfcmxpbTsKIAl0YXNrX3VubG9jayhjdXJyZW50LT5ncm91cF9sZWFkZXIpOwpAQCAtMTk0NCwxNSArMjAxNiw2IEBACiAJCXVuc2lnbmVkIGxvbmcgcmxpbV9jdXIgPSBuZXdfcmxpbS5ybGltX2N1cjsKIAkJY3B1dGltZV90IGNwdXRpbWU7CiAKLQkJaWYgKHJsaW1fY3VyID09IDApIHsKLQkJCS8qCi0JCQkgKiBUaGUgY2FsbGVyIGlzIGFza2luZyBmb3IgYW4gaW1tZWRpYXRlIFJMSU1JVF9DUFUKLQkJCSAqIGV4cGlyeS4gIEJ1dCB3ZSB1c2UgdGhlIHplcm8gdmFsdWUgdG8gbWVhbiAiaXQgd2FzCi0JCQkgKiBuZXZlciBzZXQiLiAgU28gbGV0J3MgY2hlYXQgYW5kIG1ha2UgaXQgb25lIHNlY29uZAotCQkJICogaW5zdGVhZAotCQkJICovCi0JCQlybGltX2N1ciA9IDE7Ci0JCX0KIAkJY3B1dGltZSA9IHNlY3NfdG9fY3B1dGltZShybGltX2N1cik7CiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpAQCAtMjAyMSw2ICsyMDg0LDggQEAKIAkJCXItPnJ1X25pdmNzdyA9IHAtPnNpZ25hbC0+Y25pdmNzdzsKIAkJCXItPnJ1X21pbmZsdCA9IHAtPnNpZ25hbC0+Y21pbl9mbHQ7CiAJCQlyLT5ydV9tYWpmbHQgPSBwLT5zaWduYWwtPmNtYWpfZmx0OworCQkJci0+cnVfaW5ibG9jayA9IHAtPnNpZ25hbC0+Y2luYmxvY2s7CisJCQlyLT5ydV9vdWJsb2NrID0gcC0+c2lnbmFsLT5jb3VibG9jazsKIAogCQkJaWYgKHdobyA9PSBSVVNBR0VfQ0hJTERSRU4pCiAJCQkJYnJlYWs7CkBAIC0yMDMyLDYgKzIwOTcsOCBAQAogCQkJci0+cnVfbml2Y3N3ICs9IHAtPnNpZ25hbC0+bml2Y3N3OwogCQkJci0+cnVfbWluZmx0ICs9IHAtPnNpZ25hbC0+bWluX2ZsdDsKIAkJCXItPnJ1X21hamZsdCArPSBwLT5zaWduYWwtPm1hal9mbHQ7CisJCQlyLT5ydV9pbmJsb2NrICs9IHAtPnNpZ25hbC0+aW5ibG9jazsKKwkJCXItPnJ1X291YmxvY2sgKz0gcC0+c2lnbmFsLT5vdWJsb2NrOwogCQkJdCA9IHA7CiAJCQlkbyB7CiAJCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgdC0+dXRpbWUpOwpAQCAtMjA0MCw2ICsyMTA3LDggQEAKIAkJCQlyLT5ydV9uaXZjc3cgKz0gdC0+bml2Y3N3OwogCQkJCXItPnJ1X21pbmZsdCArPSB0LT5taW5fZmx0OwogCQkJCXItPnJ1X21hamZsdCArPSB0LT5tYWpfZmx0OworCQkJCXItPnJ1X2luYmxvY2sgKz0gdGFza19pb19nZXRfaW5ibG9jayh0KTsKKwkJCQlyLT5ydV9vdWJsb2NrICs9IHRhc2tfaW9fZ2V0X291YmxvY2sodCk7CiAJCQkJdCA9IG5leHRfdGhyZWFkKHQpOwogCQkJfSB3aGlsZSAodCAhPSBwKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c19uaS5jIGIva2VybmVsL3N5c19uaS5jCmluZGV4IGQ3MzA2ZDAuLjdlMTFlMmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNfbmkuYworKysgYi9rZXJuZWwvc3lzX25pLmMKQEAgLTE0MSwzICsxNDEsMTAgQEAKIGNvbmRfc3lzY2FsbChzeXNfYmRmbHVzaCk7CiBjb25kX3N5c2NhbGwoc3lzX2lvcHJpb19zZXQpOwogY29uZF9zeXNjYWxsKHN5c19pb3ByaW9fZ2V0KTsKKworLyogTmV3IGZpbGUgZGVzY3JpcHRvcnMgKi8KK2NvbmRfc3lzY2FsbChzeXNfc2lnbmFsZmQpOworY29uZF9zeXNjYWxsKHN5c190aW1lcmZkKTsKK2NvbmRfc3lzY2FsbChjb21wYXRfc3lzX3NpZ25hbGZkKTsKK2NvbmRfc3lzY2FsbChjb21wYXRfc3lzX3RpbWVyZmQpOworY29uZF9zeXNjYWxsKHN5c19ldmVudGZkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCBjOTA0NzQ4Li4zMGVlNDYyIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC03Niw2ICs3Niw4IEBACiBleHRlcm4gaW50IHN5c2N0bF9kcm9wX2NhY2hlczsKIGV4dGVybiBpbnQgcGVyY3B1X3BhZ2VsaXN0X2ZyYWN0aW9uOwogZXh0ZXJuIGludCBjb21wYXRfbG9nOworZXh0ZXJuIGludCBtYXBzX3Byb3RlY3Q7CitleHRlcm4gaW50IHN5c2N0bF9zdGF0X2ludGVydmFsOwogCiAvKiB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlIHByb2NfZG9pbnR2ZWNfbWlubWF4IGZvciBbZnNfXW92ZXJmbG93IFVJRCBhbmQgR0lEICovCiBzdGF0aWMgaW50IG1heG9sZHVpZCA9IDY1NTM1OwpAQCAtMjI1LDcgKzIyNyw3IEBACiAJCS5jdGxfbmFtZQk9IEtFUk5fQ09SRV9QQVRURVJOLAogCQkucHJvY25hbWUJPSAiY29yZV9wYXR0ZXJuIiwKIAkJLmRhdGEJCT0gY29yZV9wYXR0ZXJuLAotCQkubWF4bGVuCQk9IDEyOCwKKwkJLm1heGxlbgkJPSBDT1JFTkFNRV9NQVhfU0laRSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2Rvc3RyaW5nLAogCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX3N0cmluZywKQEAgLTYwMyw2ICs2MDUsMTYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXBzX3Byb3RlY3QiLAorCQkuZGF0YSAgICAgICAgICAgPSAmbWFwc19wcm90ZWN0LAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YoaW50KSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKyNlbmRpZgogCiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CkBAIC04NDYsNiArODU4LDE3IEBACiAJCS5leHRyYTIJCT0gJm9uZV9odW5kcmVkLAogCX0sCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfU01QCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInN0YXRfaW50ZXJ2YWwiLAorCQkuZGF0YQkJPSAmc3lzY3RsX3N0YXRfaW50ZXJ2YWwsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9zdGF0X2ludGVydmFsKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJCS5zdHJhdGVneQk9ICZzeXNjdGxfamlmZmllcywKKwl9LAorI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSB8fCBcCiAgICAoZGVmaW5lZChDT05GSUdfU1VQRVJIKSAmJiBkZWZpbmVkKENPTkZJR19WU1lTQ0FMTCkpCiAJewpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUuYyBiL2tlcm5lbC90aW1lLmMKaW5kZXggYmExOGVjNC4uZjA0NzkxZiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUuYworKysgYi9rZXJuZWwvdGltZS5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMjQ3LDYgKzI0NiwzNiBAQAogfQogRVhQT1JUX1NZTUJPTChjdXJyZW50X2ZzX3RpbWUpOwogCisvKgorICogQ29udmVydCBqaWZmaWVzIHRvIG1pbGxpc2Vjb25kcyBhbmQgYmFjay4KKyAqCisgKiBBdm9pZCB1bm5lY2Vzc2FyeSBtdWx0aXBsaWNhdGlvbnMvZGl2aXNpb25zIGluIHRoZQorICogdHdvIG1vc3QgY29tbW9uIEhaIGNhc2VzOgorICovCit1bnNpZ25lZCBpbnQgaW5saW5lIGppZmZpZXNfdG9fbXNlY3MoY29uc3QgdW5zaWduZWQgbG9uZyBqKQoreworI2lmIEhaIDw9IE1TRUNfUEVSX1NFQyAmJiAhKE1TRUNfUEVSX1NFQyAlIEhaKQorCXJldHVybiAoTVNFQ19QRVJfU0VDIC8gSFopICogajsKKyNlbGlmIEhaID4gTVNFQ19QRVJfU0VDICYmICEoSFogJSBNU0VDX1BFUl9TRUMpCisJcmV0dXJuIChqICsgKEhaIC8gTVNFQ19QRVJfU0VDKSAtIDEpLyhIWiAvIE1TRUNfUEVSX1NFQyk7CisjZWxzZQorCXJldHVybiAoaiAqIE1TRUNfUEVSX1NFQykgLyBIWjsKKyNlbmRpZgorfQorRVhQT1JUX1NZTUJPTChqaWZmaWVzX3RvX21zZWNzKTsKKwordW5zaWduZWQgaW50IGlubGluZSBqaWZmaWVzX3RvX3VzZWNzKGNvbnN0IHVuc2lnbmVkIGxvbmcgaikKK3sKKyNpZiBIWiA8PSBVU0VDX1BFUl9TRUMgJiYgIShVU0VDX1BFUl9TRUMgJSBIWikKKwlyZXR1cm4gKFVTRUNfUEVSX1NFQyAvIEhaKSAqIGo7CisjZWxpZiBIWiA+IFVTRUNfUEVSX1NFQyAmJiAhKEhaICUgVVNFQ19QRVJfU0VDKQorCXJldHVybiAoaiArIChIWiAvIFVTRUNfUEVSX1NFQykgLSAxKS8oSFogLyBVU0VDX1BFUl9TRUMpOworI2Vsc2UKKwlyZXR1cm4gKGogKiBVU0VDX1BFUl9TRUMpIC8gSFo7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0woamlmZmllc190b191c2Vjcyk7CisKIC8qKgogICogdGltZXNwZWNfdHJ1bmMgLSBUcnVuY2F0ZSB0aW1lc3BlYyB0byBhIGdyYW51bGFyaXR5CiAgKiBAdDogVGltZXNwZWMKQEAgLTQ3MywzNiArNTAyLDYgQEAKIEVYUE9SVF9TWU1CT0wobnNfdG9fdGltZXZhbCk7CiAKIC8qCi0gKiBDb252ZXJ0IGppZmZpZXMgdG8gbWlsbGlzZWNvbmRzIGFuZCBiYWNrLgotICoKLSAqIEF2b2lkIHVubmVjZXNzYXJ5IG11bHRpcGxpY2F0aW9ucy9kaXZpc2lvbnMgaW4gdGhlCi0gKiB0d28gbW9zdCBjb21tb24gSFogY2FzZXM6Ci0gKi8KLXVuc2lnbmVkIGludCBqaWZmaWVzX3RvX21zZWNzKGNvbnN0IHVuc2lnbmVkIGxvbmcgaikKLXsKLSNpZiBIWiA8PSBNU0VDX1BFUl9TRUMgJiYgIShNU0VDX1BFUl9TRUMgJSBIWikKLQlyZXR1cm4gKE1TRUNfUEVSX1NFQyAvIEhaKSAqIGo7Ci0jZWxpZiBIWiA+IE1TRUNfUEVSX1NFQyAmJiAhKEhaICUgTVNFQ19QRVJfU0VDKQotCXJldHVybiAoaiArIChIWiAvIE1TRUNfUEVSX1NFQykgLSAxKS8oSFogLyBNU0VDX1BFUl9TRUMpOwotI2Vsc2UKLQlyZXR1cm4gKGogKiBNU0VDX1BFUl9TRUMpIC8gSFo7Ci0jZW5kaWYKLX0KLUVYUE9SVF9TWU1CT0woamlmZmllc190b19tc2Vjcyk7Ci0KLXVuc2lnbmVkIGludCBqaWZmaWVzX3RvX3VzZWNzKGNvbnN0IHVuc2lnbmVkIGxvbmcgaikKLXsKLSNpZiBIWiA8PSBVU0VDX1BFUl9TRUMgJiYgIShVU0VDX1BFUl9TRUMgJSBIWikKLQlyZXR1cm4gKFVTRUNfUEVSX1NFQyAvIEhaKSAqIGo7Ci0jZWxpZiBIWiA+IFVTRUNfUEVSX1NFQyAmJiAhKEhaICUgVVNFQ19QRVJfU0VDKQotCXJldHVybiAoaiArIChIWiAvIFVTRUNfUEVSX1NFQykgLSAxKS8oSFogLyBVU0VDX1BFUl9TRUMpOwotI2Vsc2UKLQlyZXR1cm4gKGogKiBVU0VDX1BFUl9TRUMpIC8gSFo7Ci0jZW5kaWYKLX0KLUVYUE9SVF9TWU1CT0woamlmZmllc190b191c2Vjcyk7Ci0KLS8qCiAgKiBXaGVuIHdlIGNvbnZlcnQgdG8gamlmZmllcyB0aGVuIHdlIGludGVycHJldCBpbmNvbWluZyB2YWx1ZXMKICAqIHRoZSBmb2xsb3dpbmcgd2F5OgogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL01ha2VmaWxlIGIva2VybmVsL3RpbWUvTWFrZWZpbGUKaW5kZXggOTNiY2NiYS4uOTliNjAzNCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvTWFrZWZpbGUKKysrIGIva2VybmVsL3RpbWUvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1vYmoteSArPSBudHAubyBjbG9ja3NvdXJjZS5vIGppZmZpZXMubyB0aW1lcl9saXN0Lm8KK29iai15ICs9IHRpbWVrZWVwaW5nLm8gbnRwLm8gY2xvY2tzb3VyY2UubyBqaWZmaWVzLm8gdGltZXJfbGlzdC5vCiAKIG9iai0kKENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTKQkJKz0gY2xvY2tldmVudHMubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMpCQkrPSB0aWNrLWNvbW1vbi5vCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCBmZTVjN2RiLi41MWI2YTZhIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTc0LDE1ICs3NCwxNyBAQAogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOwogc3RhdGljIERFRklORV9TUElOTE9DSyh3YXRjaGRvZ19sb2NrKTsKIHN0YXRpYyBjeWNsZV90IHdhdGNoZG9nX2xhc3Q7CitzdGF0aWMgdW5zaWduZWQgbG9uZyB3YXRjaGRvZ19yZXN1bWVkOworCiAvKgotICogSW50ZXJ2YWw6IDAuNXNlYyBUcmVzaG9sZDogMC4wNjI1cworICogSW50ZXJ2YWw6IDAuNXNlYyBUaHJlc2hvbGQ6IDAuMDYyNXMKICAqLwogI2RlZmluZSBXQVRDSERPR19JTlRFUlZBTCAoSFogPj4gMSkKLSNkZWZpbmUgV0FUQ0hET0dfVFJFU0hPTEQgKE5TRUNfUEVSX1NFQyA+PiA0KQorI2RlZmluZSBXQVRDSERPR19USFJFU0hPTEQgKE5TRUNfUEVSX1NFQyA+PiA0KQogCiBzdGF0aWMgdm9pZCBjbG9ja3NvdXJjZV9yYXRld2Qoc3RydWN0IGNsb2Nrc291cmNlICpjcywgaW50NjRfdCBkZWx0YSkKIHsKLQlpZiAoZGVsdGEgPiAtV0FUQ0hET0dfVFJFU0hPTEQgJiYgZGVsdGEgPCBXQVRDSERPR19UUkVTSE9MRCkKKwlpZiAoZGVsdGEgPiAtV0FUQ0hET0dfVEhSRVNIT0xEICYmIGRlbHRhIDwgV0FUQ0hET0dfVEhSRVNIT0xEKQogCQlyZXR1cm47CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJDbG9ja3NvdXJjZSAlcyB1bnN0YWJsZSAoZGVsdGEgPSAlTGQgbnMpXG4iLApAQCAtOTgsMTUgKzEwMCwyNCBAQAogCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsICp0bXA7CiAJY3ljbGVfdCBjc25vdywgd2Rub3c7CiAJaW50NjRfdCB3ZF9uc2VjLCBjc19uc2VjOworCWludCByZXN1bWVkOwogCiAJc3Bpbl9sb2NrKCZ3YXRjaGRvZ19sb2NrKTsKIAorCXJlc3VtZWQgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJndhdGNoZG9nX3Jlc3VtZWQpOworCiAJd2Rub3cgPSB3YXRjaGRvZy0+cmVhZCgpOwogCXdkX25zZWMgPSBjeWMybnMod2F0Y2hkb2csICh3ZG5vdyAtIHdhdGNoZG9nX2xhc3QpICYgd2F0Y2hkb2ctPm1hc2spOwogCXdhdGNoZG9nX2xhc3QgPSB3ZG5vdzsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjcywgdG1wLCAmd2F0Y2hkb2dfbGlzdCwgd2RfbGlzdCkgewogCQljc25vdyA9IGNzLT5yZWFkKCk7CisKKwkJaWYgKHVubGlrZWx5KHJlc3VtZWQpKSB7CisJCQljcy0+d2RfbGFzdCA9IGNzbm93OworCQkJY29udGludWU7CisJCX0KKwogCQkvKiBJbml0aWFsaXplZCA/ICovCiAJCWlmICghKGNzLT5mbGFncyAmIENMT0NLX1NPVVJDRV9XQVRDSERPRykpIHsKIAkJCWlmICgoY3MtPmZsYWdzICYgQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMpICYmCkBAIC0xMzYsNiArMTQ3LDExIEBACiAJfQogCXNwaW5fdW5sb2NrKCZ3YXRjaGRvZ19sb2NrKTsKIH0KK3N0YXRpYyB2b2lkIGNsb2Nrc291cmNlX3Jlc3VtZV93YXRjaGRvZyh2b2lkKQoreworCXNldF9iaXQoMCwgJndhdGNoZG9nX3Jlc3VtZWQpOworfQorCiBzdGF0aWMgdm9pZCBjbG9ja3NvdXJjZV9jaGVja193YXRjaGRvZyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3NlOwpAQCAtMTgyLDkgKzE5OCwzNCBAQAogCWlmIChjcy0+ZmxhZ3MgJiBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUykKIAkJY3MtPmZsYWdzIHw9IENMT0NLX1NPVVJDRV9WQUxJRF9GT1JfSFJFUzsKIH0KKworc3RhdGljIGlubGluZSB2b2lkIGNsb2Nrc291cmNlX3Jlc3VtZV93YXRjaGRvZyh2b2lkKSB7IH0KICNlbmRpZgogCiAvKioKKyAqIGNsb2Nrc291cmNlX3Jlc3VtZSAtIHJlc3VtZSB0aGUgY2xvY2tzb3VyY2UocykKKyAqLwordm9pZCBjbG9ja3NvdXJjZV9yZXN1bWUodm9pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NvdXJjZV9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJmNsb2Nrc291cmNlX2xpc3QpIHsKKwkJc3RydWN0IGNsb2Nrc291cmNlICpjczsKKworCQljcyA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgY2xvY2tzb3VyY2UsIGxpc3QpOworCQlpZiAoY3MtPnJlc3VtZSkKKwkJCWNzLT5yZXN1bWUoKTsKKwl9CisKKwljbG9ja3NvdXJjZV9yZXN1bWVfd2F0Y2hkb2coKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc291cmNlX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCiAgKiBjbG9ja3NvdXJjZV9nZXRfbmV4dCAtIFJldHVybnMgdGhlIHNlbGVjdGVkIGNsb2Nrc291cmNlCiAgKgogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9udHAuYyBiL2tlcm5lbC90aW1lL250cC5jCmluZGV4IGNiMjU2NDkuLjg3YWE1ZmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL250cC5jCisrKyBiL2tlcm5lbC90aW1lL250cC5jCkBAIC0xMSw2ICsxMSw4IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jIGIva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYwppbmRleCBlYWRmY2UyLi44MDAxZDM3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKQEAgLTI0MywxMSArMjQzLDE4IEBACiB7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIAotCWlmIChjcHUgPT0gKm9uY3B1KQotCQl0aWNrX2RvX2Jyb2FkY2FzdF9vbl9vZmYoJnJlYXNvbik7Ci0JZWxzZQotCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoKm9uY3B1LCB0aWNrX2RvX2Jyb2FkY2FzdF9vbl9vZmYsCi0JCQkJCSAmcmVhc29uLCAxLCAxKTsKKwlpZiAoIWNwdV9pc3NldCgqb25jcHUsIGNwdV9vbmxpbmVfbWFwKSkgeworCQlwcmludGsoS0VSTl9FUlIgInRpY2stYnJhb2RjYXN0OiBpZ25vcmluZyBicm9hZGNhc3QgZm9yICIKKwkJICAgICAgICJvZmZsaW5lIENQVSAjJWRcbiIsICpvbmNwdSk7CisJfSBlbHNlIHsKKworCQlpZiAoY3B1ID09ICpvbmNwdSkKKwkJCXRpY2tfZG9fYnJvYWRjYXN0X29uX29mZigmcmVhc29uKTsKKwkJZWxzZQorCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKCpvbmNwdSwKKwkJCQkJCSB0aWNrX2RvX2Jyb2FkY2FzdF9vbl9vZmYsCisJCQkJCQkgJnJlYXNvbiwgMSwgMSk7CisJfQogCXB1dF9jcHUoKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1jb21tb24uYyBiL2tlcm5lbC90aW1lL3RpY2stY29tbW9uLmMKaW5kZXggYmZkYTNmNy4uYTk2ZWM5YSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1jb21tb24uYworKysgYi9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jCkBAIC0zMSw3ICszMSw3IEBACiAgKi8KIGt0aW1lX3QgdGlja19uZXh0X3BlcmlvZDsKIGt0aW1lX3QgdGlja19wZXJpb2Q7Ci1zdGF0aWMgaW50IHRpY2tfZG9fdGltZXJfY3B1ID0gLTE7CitpbnQgdGlja19kb190aW1lcl9jcHUgX19yZWFkX21vc3RseSA9IC0xOwogREVGSU5FX1NQSU5MT0NLKHRpY2tfZGV2aWNlX2xvY2spOwogCiAvKgpAQCAtMjk1LDYgKzI5NSwxMiBAQAogCQljbG9ja2V2ZW50c19leGNoYW5nZV9kZXZpY2UoZGV2LCBOVUxMKTsKIAkJdGQtPmV2dGRldiA9IE5VTEw7CiAJfQorCS8qIFRyYW5zZmVyIHRoZSBkb190aW1lciBqb2IgYXdheSBmcm9tIHRoaXMgY3B1ICovCisJaWYgKCpjcHVwID09IHRpY2tfZG9fdGltZXJfY3B1KSB7CisJCWludCBjcHUgPSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOworCisJCXRpY2tfZG9fdGltZXJfY3B1ID0gKGNwdSAhPSBOUl9DUFVTKSA/IGNwdSA6IC0xOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWNrX2RldmljZV9sb2NrLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaCBiL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaAppbmRleCBjOWQyMDNiLi5iYjEzZjI3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmgKKysrIGIva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oCkBAIC01LDYgKzUsNyBAQAogZXh0ZXJuIHNwaW5sb2NrX3QgdGlja19kZXZpY2VfbG9jazsKIGV4dGVybiBrdGltZV90IHRpY2tfbmV4dF9wZXJpb2Q7CiBleHRlcm4ga3RpbWVfdCB0aWNrX3BlcmlvZDsKK2V4dGVybiBpbnQgdGlja19kb190aW1lcl9jcHUgX19yZWFkX21vc3RseTsKIAogZXh0ZXJuIHZvaWQgdGlja19zZXR1cF9wZXJpb2RpYyhzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYsIGludCBicm9hZGNhc3QpOwogZXh0ZXJuIHZvaWQgdGlja19oYW5kbGVfcGVyaW9kaWMoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwppbmRleCA1MTU1NmI5Li41MmRiOWUzIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKKysrIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCkBAIC0xNjcsOSArMTY3LDE1IEBACiAJCWdvdG8gZW5kOwogCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlmICh1bmxpa2VseShsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSkpCi0JCXByaW50ayhLRVJOX0VSUiAiTk9IWjogbG9jYWxfc29mdGlycV9wZW5kaW5nICUwMnhcbiIsCi0JCSAgICAgICBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSk7CisJaWYgKHVubGlrZWx5KGxvY2FsX3NvZnRpcnFfcGVuZGluZygpKSkgeworCQlzdGF0aWMgaW50IHJhdGVsaW1pdDsKKworCQlpZiAocmF0ZWxpbWl0IDwgMTApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiTk9IWjogbG9jYWxfc29mdGlycV9wZW5kaW5nICUwMnhcbiIsCisJCQkgICAgICAgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkpOworCQkJcmF0ZWxpbWl0Kys7CisJCX0KKwl9CiAKIAlub3cgPSBrdGltZV9nZXQoKTsKIAkvKgpAQCAtMjE3LDEwICsyMjMsNDUgQEAKIAkJICogdGhlIHNjaGVkdWxlciB0aWNrIGluIG5vaHpfcmVzdGFydF9zY2hlZF90aWNrLgogCQkgKi8KIAkJaWYgKCF0cy0+dGlja19zdG9wcGVkKSB7CisJCQlpZiAoc2VsZWN0X25vaHpfbG9hZF9iYWxhbmNlcigxKSkgeworCQkJCS8qCisJCQkJICogc2NoZWQgdGljayBub3Qgc3RvcHBlZCEKKwkJCQkgKi8KKwkJCQljcHVfY2xlYXIoY3B1LCBub2h6X2NwdV9tYXNrKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwogCQkJdHMtPmlkbGVfdGljayA9IHRzLT5zY2hlZF90aW1lci5leHBpcmVzOwogCQkJdHMtPnRpY2tfc3RvcHBlZCA9IDE7CiAJCQl0cy0+aWRsZV9qaWZmaWVzID0gbGFzdF9qaWZmaWVzOwogCQl9CisKKwkJLyoKKwkJICogSWYgdGhpcyBjcHUgaXMgdGhlIG9uZSB3aGljaCB1cGRhdGVzIGppZmZpZXMsIHRoZW4KKwkJICogZ2l2ZSB1cCB0aGUgYXNzaWdubWVudCBhbmQgbGV0IGl0IGJlIHRha2VuIGJ5IHRoZQorCQkgKiBjcHUgd2hpY2ggcnVucyB0aGUgdGljayB0aW1lciBuZXh0LCB3aGljaCBtaWdodCBiZQorCQkgKiB0aGlzIGNwdSBhcyB3ZWxsLiBJZiB3ZSBkb24ndCBkcm9wIHRoaXMgaGVyZSB0aGUKKwkJICogamlmZmllcyBtaWdodCBiZSBzdGFsZSBhbmQgZG9fdGltZXIoKSBuZXZlcgorCQkgKiBpbnZva2VkLgorCQkgKi8KKwkJaWYgKGNwdSA9PSB0aWNrX2RvX3RpbWVyX2NwdSkKKwkJCXRpY2tfZG9fdGltZXJfY3B1ID0gLTE7CisKKwkJdHMtPmlkbGVfc2xlZXBzKys7CisKKwkJLyoKKwkJICogZGVsdGFfamlmZmllcyA+PSBORVhUX1RJTUVSX01BWF9ERUxUQSBzaWduYWxzIHRoYXQKKwkJICogdGhlcmUgaXMgbm8gdGltZXIgcGVuZGluZyBvciBhdCBsZWFzdCBleHRyZW1seSBmYXIKKwkJICogaW50byB0aGUgZnV0dXJlICgxMiBkYXlzIGZvciBIWj0xMDAwKS4gSW4gdGhpcyBjYXNlCisJCSAqIHdlIHNpbXBseSBzdG9wIHRoZSB0aWNrIHRpbWVyOgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KGRlbHRhX2ppZmZpZXMgPj0gTkVYVF9USU1FUl9NQVhfREVMVEEpKSB7CisJCQl0cy0+aWRsZV9leHBpcmVzLnR2NjQgPSBLVElNRV9NQVg7CisJCQlpZiAodHMtPm5vaHpfbW9kZSA9PSBOT0haX01PREVfSElHSFJFUykKKwkJCQlocnRpbWVyX2NhbmNlbCgmdHMtPnNjaGVkX3RpbWVyKTsKKwkJCWdvdG8gb3V0OworCQl9CisKIAkJLyoKIAkJICogY2FsY3VsYXRlIHRoZSBleHBpcnkgdGltZSBmb3IgdGhlIG5leHQgdGltZXIgd2hlZWwKIAkJICogdGltZXIKQEAgLTIyOCw3ICsyNjksNiBAQAogCQlleHBpcmVzID0ga3RpbWVfYWRkX25zKGxhc3RfdXBkYXRlLCB0aWNrX3BlcmlvZC50djY0ICoKIAkJCQkgICAgICAgZGVsdGFfamlmZmllcyk7CiAJCXRzLT5pZGxlX2V4cGlyZXMgPSBleHBpcmVzOwotCQl0cy0+aWRsZV9zbGVlcHMrKzsKIAogCQlpZiAodHMtPm5vaHpfbW9kZSA9PSBOT0haX01PREVfSElHSFJFUykgewogCQkJaHJ0aW1lcl9zdGFydCgmdHMtPnNjaGVkX3RpbWVyLCBleHBpcmVzLApAQCAtMjczLDYgKzMxMyw3IEBACiAJbm93ID0ga3RpbWVfZ2V0KCk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoMCk7CiAJdGlja19kb191cGRhdGVfamlmZmllczY0KG5vdyk7CiAJY3B1X2NsZWFyKGNwdSwgbm9oel9jcHVfbWFzayk7CiAKQEAgLTMzOCwxMiArMzc5LDI0IEBACiB7CiAJc3RydWN0IHRpY2tfc2NoZWQgKnRzID0gJl9fZ2V0X2NwdV92YXIodGlja19jcHVfc2NoZWQpOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X2lycV9yZWdzKCk7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlrdGltZV90IG5vdyA9IGt0aW1lX2dldCgpOwogCiAJZGV2LT5uZXh0X2V2ZW50LnR2NjQgPSBLVElNRV9NQVg7CiAKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBkb190aW1lciBkdXR5IHdhcyBkcm9wcGVkLiBXZSBkb24ndCBjYXJlIGFib3V0CisJICogY29uY3VycmVuY3k6IFRoaXMgaGFwcGVucyBvbmx5IHdoZW4gdGhlIGNwdSBpbiBjaGFyZ2Ugd2VudAorCSAqIGludG8gYSBsb25nIHNsZWVwLiBJZiB0d28gY3B1cyBoYXBwZW4gdG8gYXNzaWduIHRoZW1zZWxmIHRvCisJICogdGhpcyBkdXR5LCB0aGVuIHRoZSBqaWZmaWVzIHVwZGF0ZSBpcyBzdGlsbCBzZXJpYWxpemVkIGJ5CisJICogeHRpbWVfbG9jay4KKwkgKi8KKwlpZiAodW5saWtlbHkodGlja19kb190aW1lcl9jcHUgPT0gLTEpKQorCQl0aWNrX2RvX3RpbWVyX2NwdSA9IGNwdTsKKwogCS8qIENoZWNrLCBpZiB0aGUgamlmZmllcyBuZWVkIGFuIHVwZGF0ZSAqLwotCXRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NChub3cpOworCWlmICh0aWNrX2RvX3RpbWVyX2NwdSA9PSBjcHUpCisJCXRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NChub3cpOwogCiAJLyoKIAkgKiBXaGVuIHdlIGFyZSBpZGxlIGFuZCB0aGUgdGljayBpcyBzdG9wcGVkLCB3ZSBoYXZlIHRvIHRvdWNoCkBAIC00MzEsOSArNDg0LDIzIEBACiAJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmJhc2UgPSB0aW1lci0+YmFzZS0+Y3B1X2Jhc2U7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAlrdGltZV90IG5vdyA9IGt0aW1lX2dldCgpOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBkb190aW1lciBkdXR5IHdhcyBkcm9wcGVkLiBXZSBkb24ndCBjYXJlIGFib3V0CisJICogY29uY3VycmVuY3k6IFRoaXMgaGFwcGVucyBvbmx5IHdoZW4gdGhlIGNwdSBpbiBjaGFyZ2Ugd2VudAorCSAqIGludG8gYSBsb25nIHNsZWVwLiBJZiB0d28gY3B1cyBoYXBwZW4gdG8gYXNzaWduIHRoZW1zZWxmIHRvCisJICogdGhpcyBkdXR5LCB0aGVuIHRoZSBqaWZmaWVzIHVwZGF0ZSBpcyBzdGlsbCBzZXJpYWxpemVkIGJ5CisJICogeHRpbWVfbG9jay4KKwkgKi8KKwlpZiAodW5saWtlbHkodGlja19kb190aW1lcl9jcHUgPT0gLTEpKQorCQl0aWNrX2RvX3RpbWVyX2NwdSA9IGNwdTsKKyNlbmRpZgogCiAJLyogQ2hlY2ssIGlmIHRoZSBqaWZmaWVzIG5lZWQgYW4gdXBkYXRlICovCi0JdGlja19kb191cGRhdGVfamlmZmllczY0KG5vdyk7CisJaWYgKHRpY2tfZG9fdGltZXJfY3B1ID09IGNwdSkKKwkJdGlja19kb191cGRhdGVfamlmZmllczY0KG5vdyk7CiAKIAkvKgogCSAqIERvIG5vdCBjYWxsLCB3aGVuIHdlIGFyZSBub3QgaW4gaXJxIGNvbnRleHQgYW5kIGhhdmUKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMTA0MmYKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC0wLDAgKzEsNDc4IEBACisvKgorICogIGxpbnV4L2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKyAqCisgKiAgS2VybmVsIHRpbWVrZWVwaW5nIGNvZGUgYW5kIGFjY2Vzc29yIGZ1bmN0aW9ucworICoKKyAqICBUaGlzIGNvZGUgd2FzIG1vdmVkIGZyb20gbGludXgva2VybmVsL3RpbWVyLmMuCisgKiAgUGxlYXNlIHNlZSB0aGF0IGZpbGUgZm9yIGNvcHlyaWdodCBhbmQgaGlzdG9yeSBsb2dzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KKworCisvKgorICogVGhpcyByZWFkLXdyaXRlIHNwaW5sb2NrIHByb3RlY3RzIHVzIGZyb20gcmFjZXMgaW4gU01QIHdoaWxlCisgKiBwbGF5aW5nIHdpdGggeHRpbWUgYW5kIGF2ZW5ydW4uCisgKi8KK19fYXR0cmlidXRlX18oKHdlYWspKSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU0VRTE9DSyh4dGltZV9sb2NrKTsKKworRVhQT1JUX1NZTUJPTCh4dGltZV9sb2NrKTsKKworCisvKgorICogVGhlIGN1cnJlbnQgdGltZQorICogd2FsbF90b19tb25vdG9uaWMgaXMgd2hhdCB3ZSBuZWVkIHRvIGFkZCB0byB4dGltZSAob3IgeHRpbWUgY29ycmVjdGVkCisgKiBmb3Igc3ViIGppZmZpZSB0aW1lcykgdG8gZ2V0IHRvIG1vbm90b25pYyB0aW1lLiAgTW9ub3RvbmljIGlzIHBlZ2dlZAorICogYXQgemVybyBhdCBzeXN0ZW0gYm9vdCB0aW1lLCBzbyB3YWxsX3RvX21vbm90b25pYyB3aWxsIGJlIG5lZ2F0aXZlLAorICogaG93ZXZlciwgd2Ugd2lsbCBBTFdBWVMga2VlcCB0aGUgdHZfbnNlYyBwYXJ0IHBvc2l0aXZlIHNvIHdlIGNhbiB1c2UKKyAqIHRoZSB1c3VhbCBub3JtYWxpemF0aW9uLgorICovCitzdHJ1Y3QgdGltZXNwZWMgeHRpbWUgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpOworc3RydWN0IHRpbWVzcGVjIHdhbGxfdG9fbW9ub3RvbmljIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKKworRVhQT1JUX1NZTUJPTCh4dGltZSk7CisKKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSAqY2xvY2s7IC8qIHBvaW50ZXIgdG8gY3VycmVudCBjbG9ja3NvdXJjZSAqLworCisKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19USU1FCisvKioKKyAqIF9fZ2V0X25zZWNfb2Zmc2V0IC0gUmV0dXJucyBuYW5vc2Vjb25kcyBzaW5jZSBsYXN0IGNhbGwgdG8gcGVyaW9kaWNfaG9vaworICoKKyAqIHByaXZhdGUgZnVuY3Rpb24sIG11c3QgaG9sZCB4dGltZV9sb2NrIGxvY2sgd2hlbiBiZWluZworICogY2FsbGVkLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbmFub3NlY29uZHMgc2luY2UgdGhlCisgKiBsYXN0IGNhbGwgdG8gdXBkYXRlX3dhbGxfdGltZSgpIChhZGp1c3RlZCBieSBOVFAgc2NhbGluZykKKyAqLworc3RhdGljIGlubGluZSBzNjQgX19nZXRfbnNlY19vZmZzZXQodm9pZCkKK3sKKwljeWNsZV90IGN5Y2xlX25vdywgY3ljbGVfZGVsdGE7CisJczY0IG5zX29mZnNldDsKKworCS8qIHJlYWQgY2xvY2tzb3VyY2U6ICovCisJY3ljbGVfbm93ID0gY2xvY2tzb3VyY2VfcmVhZChjbG9jayk7CisKKwkvKiBjYWxjdWxhdGUgdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZV93YWxsX3RpbWU6ICovCisJY3ljbGVfZGVsdGEgPSAoY3ljbGVfbm93IC0gY2xvY2stPmN5Y2xlX2xhc3QpICYgY2xvY2stPm1hc2s7CisKKwkvKiBjb252ZXJ0IHRvIG5hbm9zZWNvbmRzOiAqLworCW5zX29mZnNldCA9IGN5YzJucyhjbG9jaywgY3ljbGVfZGVsdGEpOworCisJcmV0dXJuIG5zX29mZnNldDsKK30KKworLyoqCisgKiBfX2dldF9yZWFsdGltZV9jbG9ja190cyAtIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXNwZWMKKyAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHRvIGJlIHNldAorICoKKyAqIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXNwZWMuIFVzZWQgYnkKKyAqIGRvX2dldHRpbWVvZmRheSgpIGFuZCBnZXRfcmVhbHRpbWVfY2xvY2tfdHMoKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fZ2V0X3JlYWx0aW1lX2Nsb2NrX3RzKHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJdW5zaWduZWQgbG9uZyBzZXE7CisJczY0IG5zZWNzOworCisJZG8geworCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKKworCQkqdHMgPSB4dGltZTsKKwkJbnNlY3MgPSBfX2dldF9uc2VjX29mZnNldCgpOworCisJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CisKKwl0aW1lc3BlY19hZGRfbnModHMsIG5zZWNzKTsKK30KKworLyoqCisgKiBnZXRuc3RpbWVvZmRheSAtIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXNwZWMKKyAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHRvIGJlIHNldAorICoKKyAqIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXNwZWMuCisgKi8KK3ZvaWQgZ2V0bnN0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlfX2dldF9yZWFsdGltZV9jbG9ja190cyh0cyk7Cit9CisKK0VYUE9SVF9TWU1CT0woZ2V0bnN0aW1lb2ZkYXkpOworCisvKioKKyAqIGRvX2dldHRpbWVvZmRheSAtIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXZhbAorICogQHR2OgkJcG9pbnRlciB0byB0aGUgdGltZXZhbCB0byBiZSBzZXQKKyAqCisgKiBOT1RFOiBVc2VycyBzaG91bGQgYmUgY29udmVydGVkIHRvIHVzaW5nIGdldF9yZWFsdGltZV9jbG9ja190cygpCisgKi8KK3ZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgbm93OworCisJX19nZXRfcmVhbHRpbWVfY2xvY2tfdHMoJm5vdyk7CisJdHYtPnR2X3NlYyA9IG5vdy50dl9zZWM7CisJdHYtPnR2X3VzZWMgPSBub3cudHZfbnNlYy8xMDAwOworfQorCitFWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7CisvKioKKyAqIGRvX3NldHRpbWVvZmRheSAtIFNldHMgdGhlIHRpbWUgb2YgZGF5CisgKiBAdHY6CQlwb2ludGVyIHRvIHRoZSB0aW1lc3BlYyB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBuZXcgdGltZQorICoKKyAqIFNldHMgdGhlIHRpbWUgb2YgZGF5IHRvIHRoZSBuZXcgdGltZSBhbmQgdXBkYXRlIE5UUCBhbmQgbm90aWZ5IGhydGltZXJzCisgKi8KK2ludCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXRpbWVfdCB3dG1fc2VjLCBzZWMgPSB0di0+dHZfc2VjOworCWxvbmcgd3RtX25zZWMsIG5zZWMgPSB0di0+dHZfbnNlYzsKKworCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisKKwluc2VjIC09IF9fZ2V0X25zZWNfb2Zmc2V0KCk7CisKKwl3dG1fc2VjICA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyArICh4dGltZS50dl9zZWMgLSBzZWMpOworCXd0bV9uc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfbnNlYyArICh4dGltZS50dl9uc2VjIC0gbnNlYyk7CisKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmeHRpbWUsIHNlYywgbnNlYyk7CisJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLCB3dG1fc2VjLCB3dG1fbnNlYyk7CisKKwljbG9jay0+ZXJyb3IgPSAwOworCW50cF9jbGVhcigpOworCisJdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgY2xvY2spOworCisJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKworCS8qIHNpZ25hbCBocnRpbWVycyBhYm91dCB0aW1lIGNoYW5nZSAqLworCWNsb2NrX3dhc19zZXQoKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7CisKKy8qKgorICogY2hhbmdlX2Nsb2Nrc291cmNlIC0gU3dhcHMgY2xvY2tzb3VyY2VzIGlmIGEgbmV3IG9uZSBpcyBhdmFpbGFibGUKKyAqCisgKiBBY2N1bXVsYXRlcyBjdXJyZW50IHRpbWUgaW50ZXJ2YWwgYW5kIGluaXRpYWxpemVzIG5ldyBjbG9ja3NvdXJjZQorICovCitzdGF0aWMgdm9pZCBjaGFuZ2VfY2xvY2tzb3VyY2Uodm9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tzb3VyY2UgKm5ldzsKKwljeWNsZV90IG5vdzsKKwl1NjQgbnNlYzsKKworCW5ldyA9IGNsb2Nrc291cmNlX2dldF9uZXh0KCk7CisKKwlpZiAoY2xvY2sgPT0gbmV3KQorCQlyZXR1cm47CisKKwlub3cgPSBjbG9ja3NvdXJjZV9yZWFkKG5ldyk7CisJbnNlYyA9ICBfX2dldF9uc2VjX29mZnNldCgpOworCXRpbWVzcGVjX2FkZF9ucygmeHRpbWUsIG5zZWMpOworCisJY2xvY2sgPSBuZXc7CisJY2xvY2stPmN5Y2xlX2xhc3QgPSBub3c7CisKKwljbG9jay0+ZXJyb3IgPSAwOworCWNsb2NrLT54dGltZV9uc2VjID0gMDsKKwljbG9ja3NvdXJjZV9jYWxjdWxhdGVfaW50ZXJ2YWwoY2xvY2ssIE5UUF9JTlRFUlZBTF9MRU5HVEgpOworCisJdGlja19jbG9ja19ub3RpZnkoKTsKKworCXByaW50ayhLRVJOX0lORk8gIlRpbWU6ICVzIGNsb2Nrc291cmNlIGhhcyBiZWVuIGluc3RhbGxlZC5cbiIsCisJICAgICAgIGNsb2NrLT5uYW1lKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2Nsb2Nrc291cmNlKHZvaWQpIHsgfQorI2VuZGlmCisKKy8qKgorICogdGltZWtlZXBpbmdfaXNfY29udGludW91cyAtIGNoZWNrIHRvIHNlZSBpZiB0aW1la2VlcGluZyBpcyBmcmVlIHJ1bm5pbmcKKyAqLworaW50IHRpbWVrZWVwaW5nX2lzX2NvbnRpbnVvdXModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNlcTsKKwlpbnQgcmV0OworCisJZG8geworCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKKworCQlyZXQgPSBjbG9jay0+ZmxhZ3MgJiBDTE9DS19TT1VSQ0VfVkFMSURfRk9SX0hSRVM7CisKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcmVhZF9wZXJzaXN0ZW50X2Nsb2NrIC0gIFJldHVybiB0aW1lIGluIHNlY29uZHMgZnJvbSB0aGUgcGVyc2lzdGVudCBjbG9jay4KKyAqCisgKiBXZWFrIGR1bW15IGZ1bmN0aW9uIGZvciBhcmNoZXMgdGhhdCBkbyBub3QgeWV0IHN1cHBvcnQgaXQuCisgKiBSZXR1cm5zIHNlY29uZHMgZnJvbSBlcG9jaCB1c2luZyB0aGUgYmF0dGVyeSBiYWNrZWQgcGVyc2lzdGVudCBjbG9jay4KKyAqIFJldHVybnMgemVybyBpZiB1bnN1cHBvcnRlZC4KKyAqCisgKiAgWFhYIC0gRG8gYmUgc3VyZSB0byByZW1vdmUgaXQgb25jZSBhbGwgYXJjaGVzIGltcGxlbWVudCBpdC4KKyAqLwordW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aW1la2VlcGluZ19pbml0IC0gSW5pdGlhbGl6ZXMgdGhlIGNsb2Nrc291cmNlIGFuZCBjb21tb24gdGltZWtlZXBpbmcgdmFsdWVzCisgKi8KK3ZvaWQgX19pbml0IHRpbWVrZWVwaW5nX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgc2VjID0gcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKCk7CisKKwl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKworCW50cF9jbGVhcigpOworCisJY2xvY2sgPSBjbG9ja3NvdXJjZV9nZXRfbmV4dCgpOworCWNsb2Nrc291cmNlX2NhbGN1bGF0ZV9pbnRlcnZhbChjbG9jaywgTlRQX0lOVEVSVkFMX0xFTkdUSCk7CisJY2xvY2stPmN5Y2xlX2xhc3QgPSBjbG9ja3NvdXJjZV9yZWFkKGNsb2NrKTsKKworCXh0aW1lLnR2X3NlYyA9IHNlYzsKKwl4dGltZS50dl9uc2VjID0gMDsKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCisJCS14dGltZS50dl9zZWMsIC14dGltZS50dl9uc2VjKTsKKworCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7Cit9CisKKy8qIGZsYWcgZm9yIGlmIHRpbWVrZWVwaW5nIGlzIHN1c3BlbmRlZCAqLworc3RhdGljIGludCB0aW1la2VlcGluZ19zdXNwZW5kZWQ7CisvKiB0aW1lIGluIHNlY29uZHMgd2hlbiBzdXNwZW5kIGJlZ2FuICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1la2VlcGluZ19zdXNwZW5kX3RpbWU7CisKKy8qKgorICogdGltZWtlZXBpbmdfcmVzdW1lIC0gUmVzdW1lcyB0aGUgZ2VuZXJpYyB0aW1la2VlcGluZyBzdWJzeXN0ZW0uCisgKiBAZGV2Ogl1bnVzZWQKKyAqCisgKiBUaGlzIGlzIGZvciB0aGUgZ2VuZXJpYyBjbG9ja3NvdXJjZSB0aW1la2VlcGluZy4KKyAqIHh0aW1lL3dhbGxfdG9fbW9ub3RvbmljL2ppZmZpZXMvZXRjIGFyZQorICogc3RpbGwgbWFuYWdlZCBieSBhcmNoIHNwZWNpZmljIHN1c3BlbmQvcmVzdW1lIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgdGltZWtlZXBpbmdfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIG5vdyA9IHJlYWRfcGVyc2lzdGVudF9jbG9jaygpOworCisJY2xvY2tzb3VyY2VfcmVzdW1lKCk7CisKKwl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKworCWlmIChub3cgJiYgKG5vdyA+IHRpbWVrZWVwaW5nX3N1c3BlbmRfdGltZSkpIHsKKwkJdW5zaWduZWQgbG9uZyBzbGVlcF9sZW5ndGggPSBub3cgLSB0aW1la2VlcGluZ19zdXNwZW5kX3RpbWU7CisKKwkJeHRpbWUudHZfc2VjICs9IHNsZWVwX2xlbmd0aDsKKwkJd2FsbF90b19tb25vdG9uaWMudHZfc2VjIC09IHNsZWVwX2xlbmd0aDsKKwl9CisJLyogcmUtYmFzZSB0aGUgbGFzdCBjeWNsZSB2YWx1ZSAqLworCWNsb2NrLT5jeWNsZV9sYXN0ID0gY2xvY2tzb3VyY2VfcmVhZChjbG9jayk7CisJY2xvY2stPmVycm9yID0gMDsKKwl0aW1la2VlcGluZ19zdXNwZW5kZWQgPSAwOworCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisKKwl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CisKKwljbG9ja2V2ZW50c19ub3RpZnkoQ0xPQ0tfRVZUX05PVElGWV9SRVNVTUUsIE5VTEwpOworCisJLyogUmVzdW1lIGhydGltZXJzICovCisJaHJlc190aW1lcnNfcmVzdW1lKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1la2VlcGluZ19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisJdGltZWtlZXBpbmdfc3VzcGVuZGVkID0gMTsKKwl0aW1la2VlcGluZ19zdXNwZW5kX3RpbWUgPSByZWFkX3BlcnNpc3RlbnRfY2xvY2soKTsKKwl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOworCisJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfU1VTUEVORCwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogc3lzZnMgcmVzdW1lL3N1c3BlbmQgYml0cyBmb3IgdGltZWtlZXBpbmcgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHRpbWVrZWVwaW5nX3N5c2NsYXNzID0geworCS5yZXN1bWUJCT0gdGltZWtlZXBpbmdfcmVzdW1lLAorCS5zdXNwZW5kCT0gdGltZWtlZXBpbmdfc3VzcGVuZCwKKwlzZXRfa3NldF9uYW1lKCJ0aW1la2VlcGluZyIpLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGRldmljZV90aW1lciA9IHsKKwkuaWQJCT0gMCwKKwkuY2xzCQk9ICZ0aW1la2VlcGluZ19zeXNjbGFzcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRpbWVrZWVwaW5nX2luaXRfZGV2aWNlKHZvaWQpCit7CisJaW50IGVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZ0aW1la2VlcGluZ19zeXNjbGFzcyk7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoJmRldmljZV90aW1lcik7CisJcmV0dXJuIGVycm9yOworfQorCitkZXZpY2VfaW5pdGNhbGwodGltZWtlZXBpbmdfaW5pdF9kZXZpY2UpOworCisvKgorICogSWYgdGhlIGVycm9yIGlzIGFscmVhZHkgbGFyZ2VyLCB3ZSBsb29rIGFoZWFkIGV2ZW4gZnVydGhlcgorICogdG8gY29tcGVuc2F0ZSBmb3IgbGF0ZSBvciBsb3N0IGFkanVzdG1lbnRzLgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBjbG9ja3NvdXJjZV9iaWdhZGp1c3QoczY0IGVycm9yLCBzNjQgKmludGVydmFsLAorCQkJCQkJIHM2NCAqb2Zmc2V0KQoreworCXM2NCB0aWNrX2Vycm9yLCBpOworCXUzMiBsb29rX2FoZWFkLCBhZGo7CisJczMyIGVycm9yMiwgbXVsdDsKKworCS8qCisJICogVXNlIHRoZSBjdXJyZW50IGVycm9yIHZhbHVlIHRvIGRldGVybWluZSBob3cgbXVjaCB0byBsb29rIGFoZWFkLgorCSAqIFRoZSBsYXJnZXIgdGhlIGVycm9yIHRoZSBzbG93ZXIgd2UgYWRqdXN0IGZvciBpdCB0byBhdm9pZCBwcm9ibGVtcworCSAqIHdpdGggbG9zaW5nIHRvbyBtYW55IHRpY2tzLCBvdGhlcndpc2Ugd2Ugd291bGQgb3ZlcmFkanVzdCBhbmQKKwkgKiBwcm9kdWNlIGFuIGV2ZW4gbGFyZ2VyIGVycm9yLiAgVGhlIHNtYWxsZXIgdGhlIGFkanVzdG1lbnQgdGhlCisJICogZmFzdGVyIHdlIHRyeSB0byBhZGp1c3QgZm9yIGl0LCBhcyBsb3N0IHRpY2tzIGNhbiBkbyBsZXNzIGhhcm0KKwkgKiBoZXJlLiAgVGhpcyBpcyB0dW5lZCBzbyB0aGF0IGFuIGVycm9yIG9mIGFib3V0IDEgbXNlYyBpcyBhZHVzdGVkCisJICogd2l0aGluIGFib3V0IDEgc2VjIChvciAyXjIwIG5zZWMgaW4gMl5TSElGVF9IWiB0aWNrcykuCisJICovCisJZXJyb3IyID0gY2xvY2stPmVycm9yID4+IChUSUNLX0xFTkdUSF9TSElGVCArIDIyIC0gMiAqIFNISUZUX0haKTsKKwllcnJvcjIgPSBhYnMoZXJyb3IyKTsKKwlmb3IgKGxvb2tfYWhlYWQgPSAwOyBlcnJvcjIgPiAwOyBsb29rX2FoZWFkKyspCisJCWVycm9yMiA+Pj0gMjsKKworCS8qCisJICogTm93IGNhbGN1bGF0ZSB0aGUgZXJyb3IgaW4gKDEgPDwgbG9va19haGVhZCkgdGlja3MsIGJ1dCBmaXJzdAorCSAqIHJlbW92ZSB0aGUgc2luZ2xlIGxvb2sgYWhlYWQgYWxyZWFkeSBpbmNsdWRlZCBpbiB0aGUgZXJyb3IuCisJICovCisJdGlja19lcnJvciA9IGN1cnJlbnRfdGlja19sZW5ndGgoKSA+PgorCQkoVElDS19MRU5HVEhfU0hJRlQgLSBjbG9jay0+c2hpZnQgKyAxKTsKKwl0aWNrX2Vycm9yIC09IGNsb2NrLT54dGltZV9pbnRlcnZhbCA+PiAxOworCWVycm9yID0gKChlcnJvciAtIHRpY2tfZXJyb3IpID4+IGxvb2tfYWhlYWQpICsgdGlja19lcnJvcjsKKworCS8qIEZpbmFsbHkgY2FsY3VsYXRlIHRoZSBhZGp1c3RtZW50IHNoaWZ0IHZhbHVlLiAgKi8KKwlpID0gKmludGVydmFsOworCW11bHQgPSAxOworCWlmIChlcnJvciA8IDApIHsKKwkJZXJyb3IgPSAtZXJyb3I7CisJCSppbnRlcnZhbCA9IC0qaW50ZXJ2YWw7CisJCSpvZmZzZXQgPSAtKm9mZnNldDsKKwkJbXVsdCA9IC0xOworCX0KKwlmb3IgKGFkaiA9IDA7IGVycm9yID4gaTsgYWRqKyspCisJCWVycm9yID4+PSAxOworCisJKmludGVydmFsIDw8PSBhZGo7CisJKm9mZnNldCA8PD0gYWRqOworCXJldHVybiBtdWx0IDw8IGFkajsKK30KKworLyoKKyAqIEFkanVzdCB0aGUgbXVsdGlwbGllciB0byByZWR1Y2UgdGhlIGVycm9yIHZhbHVlLAorICogdGhpcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBtb3N0IGNvbW1vbiBhZGp1c3RtZW50cyBvZiAtMSwwLDEsCisgKiBmb3Igb3RoZXIgdmFsdWVzIHdlIGNhbiBkbyBhIGJpdCBtb3JlIHdvcmsuCisgKi8KK3N0YXRpYyB2b2lkIGNsb2Nrc291cmNlX2FkanVzdChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNsb2NrLCBzNjQgb2Zmc2V0KQoreworCXM2NCBlcnJvciwgaW50ZXJ2YWwgPSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWw7CisJaW50IGFkajsKKworCWVycm9yID0gY2xvY2stPmVycm9yID4+IChUSUNLX0xFTkdUSF9TSElGVCAtIGNsb2NrLT5zaGlmdCAtIDEpOworCWlmIChlcnJvciA+IGludGVydmFsKSB7CisJCWVycm9yID4+PSAyOworCQlpZiAobGlrZWx5KGVycm9yIDw9IGludGVydmFsKSkKKwkJCWFkaiA9IDE7CisJCWVsc2UKKwkJCWFkaiA9IGNsb2Nrc291cmNlX2JpZ2FkanVzdChlcnJvciwgJmludGVydmFsLCAmb2Zmc2V0KTsKKwl9IGVsc2UgaWYgKGVycm9yIDwgLWludGVydmFsKSB7CisJCWVycm9yID4+PSAyOworCQlpZiAobGlrZWx5KGVycm9yID49IC1pbnRlcnZhbCkpIHsKKwkJCWFkaiA9IC0xOworCQkJaW50ZXJ2YWwgPSAtaW50ZXJ2YWw7CisJCQlvZmZzZXQgPSAtb2Zmc2V0OworCQl9IGVsc2UKKwkJCWFkaiA9IGNsb2Nrc291cmNlX2JpZ2FkanVzdChlcnJvciwgJmludGVydmFsLCAmb2Zmc2V0KTsKKwl9IGVsc2UKKwkJcmV0dXJuOworCisJY2xvY2stPm11bHQgKz0gYWRqOworCWNsb2NrLT54dGltZV9pbnRlcnZhbCArPSBpbnRlcnZhbDsKKwljbG9jay0+eHRpbWVfbnNlYyAtPSBvZmZzZXQ7CisJY2xvY2stPmVycm9yIC09IChpbnRlcnZhbCAtIG9mZnNldCkgPDwKKwkJCShUSUNLX0xFTkdUSF9TSElGVCAtIGNsb2NrLT5zaGlmdCk7Cit9CisKKy8qKgorICogdXBkYXRlX3dhbGxfdGltZSAtIFVzZXMgdGhlIGN1cnJlbnQgY2xvY2tzb3VyY2UgdG8gaW5jcmVtZW50IHRoZSB3YWxsIHRpbWUKKyAqCisgKiBDYWxsZWQgZnJvbSB0aGUgdGltZXIgaW50ZXJydXB0LCBtdXN0IGhvbGQgYSB3cml0ZSBvbiB4dGltZV9sb2NrLgorICovCit2b2lkIHVwZGF0ZV93YWxsX3RpbWUodm9pZCkKK3sKKwljeWNsZV90IG9mZnNldDsKKworCS8qIE1ha2Ugc3VyZSB3ZSdyZSBmdWxseSByZXN1bWVkOiAqLworCWlmICh1bmxpa2VseSh0aW1la2VlcGluZ19zdXNwZW5kZWQpKQorCQlyZXR1cm47CisKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19USU1FCisJb2Zmc2V0ID0gKGNsb2Nrc291cmNlX3JlYWQoY2xvY2spIC0gY2xvY2stPmN5Y2xlX2xhc3QpICYgY2xvY2stPm1hc2s7CisjZWxzZQorCW9mZnNldCA9IGNsb2NrLT5jeWNsZV9pbnRlcnZhbDsKKyNlbmRpZgorCWNsb2NrLT54dGltZV9uc2VjICs9IChzNjQpeHRpbWUudHZfbnNlYyA8PCBjbG9jay0+c2hpZnQ7CisKKwkvKiBub3JtYWxseSB0aGlzIGxvb3Agd2lsbCBydW4ganVzdCBvbmNlLCBob3dldmVyIGluIHRoZQorCSAqIGNhc2Ugb2YgbG9zdCBvciBsYXRlIHRpY2tzLCBpdCB3aWxsIGFjY3VtdWxhdGUgY29ycmVjdGx5LgorCSAqLworCXdoaWxlIChvZmZzZXQgPj0gY2xvY2stPmN5Y2xlX2ludGVydmFsKSB7CisJCS8qIGFjY3VtdWxhdGUgb25lIGludGVydmFsICovCisJCWNsb2NrLT54dGltZV9uc2VjICs9IGNsb2NrLT54dGltZV9pbnRlcnZhbDsKKwkJY2xvY2stPmN5Y2xlX2xhc3QgKz0gY2xvY2stPmN5Y2xlX2ludGVydmFsOworCQlvZmZzZXQgLT0gY2xvY2stPmN5Y2xlX2ludGVydmFsOworCisJCWlmIChjbG9jay0+eHRpbWVfbnNlYyA+PSAodTY0KU5TRUNfUEVSX1NFQyA8PCBjbG9jay0+c2hpZnQpIHsKKwkJCWNsb2NrLT54dGltZV9uc2VjIC09ICh1NjQpTlNFQ19QRVJfU0VDIDw8IGNsb2NrLT5zaGlmdDsKKwkJCXh0aW1lLnR2X3NlYysrOworCQkJc2Vjb25kX292ZXJmbG93KCk7CisJCX0KKworCQkvKiBpbnRlcnBvbGF0b3IgYml0cyAqLworCQl0aW1lX2ludGVycG9sYXRvcl91cGRhdGUoY2xvY2stPnh0aW1lX2ludGVydmFsCisJCQkJCQk+PiBjbG9jay0+c2hpZnQpOworCisJCS8qIGFjY3VtdWxhdGUgZXJyb3IgYmV0d2VlbiBOVFAgYW5kIGNsb2NrIGludGVydmFsICovCisJCWNsb2NrLT5lcnJvciArPSBjdXJyZW50X3RpY2tfbGVuZ3RoKCk7CisJCWNsb2NrLT5lcnJvciAtPSBjbG9jay0+eHRpbWVfaW50ZXJ2YWwgPDwgKFRJQ0tfTEVOR1RIX1NISUZUIC0gY2xvY2stPnNoaWZ0KTsKKwl9CisKKwkvKiBjb3JyZWN0IHRoZSBjbG9jayB3aGVuIE5UUCBlcnJvciBpcyB0b28gYmlnICovCisJY2xvY2tzb3VyY2VfYWRqdXN0KGNsb2NrLCBvZmZzZXQpOworCisJLyogc3RvcmUgZnVsbCBuYW5vc2Vjb25kcyBpbnRvIHh0aW1lICovCisJeHRpbWUudHZfbnNlYyA9IChzNjQpY2xvY2stPnh0aW1lX25zZWMgPj4gY2xvY2stPnNoaWZ0OworCWNsb2NrLT54dGltZV9uc2VjIC09IChzNjQpeHRpbWUudHZfbnNlYyA8PCBjbG9jay0+c2hpZnQ7CisKKwkvKiBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBuZXcgY2xvY2tzb3VyY2UgdG8gdXNlICovCisJY2hhbmdlX2Nsb2Nrc291cmNlKCk7CisJdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgY2xvY2spOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCmluZGV4IDU5ZGY1ZTguLjhiYmNmYjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYworKysgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKQEAgLTM4LDE3ICszOCwxMiBAQAogCiBzdGF0aWMgdm9pZCBwcmludF9uYW1lX29mZnNldChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnN5bSkKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylzeW07Ci0JY2hhciBuYW1lYnVmW0tTWU1fTkFNRV9MRU4rMV07Ci0JdW5zaWduZWQgbG9uZyBzaXplLCBvZmZzZXQ7Ci0JY29uc3QgY2hhciAqc3ltX25hbWU7Ci0JY2hhciAqbW9kbmFtZTsKKwljaGFyIHN5bW5hbWVbS1NZTV9OQU1FX0xFTisxXTsKIAotCXN5bV9uYW1lID0ga2FsbHN5bXNfbG9va3VwKGFkZHIsICZzaXplLCAmb2Zmc2V0LCAmbW9kbmFtZSwgbmFtZWJ1Zik7Ci0JaWYgKHN5bV9uYW1lKQotCQlTRVFfcHJpbnRmKG0sICIlcyIsIHN5bV9uYW1lKTsKLQllbHNlCisJaWYgKGxvb2t1cF9zeW1ib2xfbmFtZSgodW5zaWduZWQgbG9uZylzeW0sIHN5bW5hbWUpIDwgMCkKIAkJU0VRX3ByaW50ZihtLCAiPCVwPiIsIHN5bSk7CisJZWxzZQorCQlTRVFfcHJpbnRmKG0sICIlcyIsIHN5bW5hbWUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNzAsNyArNjUsNyBAQAogCVNFUV9wcmludGYobSwgIiwgJXMvJWQiLCB0bXAsIHRpbWVyLT5zdGFydF9waWQpOwogI2VuZGlmCiAJU0VRX3ByaW50ZihtLCAiXG4iKTsKLQlTRVFfcHJpbnRmKG0sICIgIyBleHBpcmVzIGF0ICVMZCBuc2VjcyBbaW4gJUxkIG5zZWNzXVxuIiwKKwlTRVFfcHJpbnRmKG0sICIgIyBleHBpcmVzIGF0ICVMdSBuc2VjcyBbaW4gJUx1IG5zZWNzXVxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucyh0aW1lci0+ZXhwaXJlcyksCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpKGt0aW1lX3RvX25zKHRpbWVyLT5leHBpcmVzKSAtIG5vdykpOwogfQpAQCAtMTE2LDE0ICsxMTEsMTQgQEAKIHsKIAlTRVFfcHJpbnRmKG0sICIgIC5pbmRleDogICAgICAlZFxuIiwKIAkJCWJhc2UtPmluZGV4KTsKLQlTRVFfcHJpbnRmKG0sICIgIC5yZXNvbHV0aW9uOiAlTGQgbnNlY3NcbiIsCisJU0VRX3ByaW50ZihtLCAiICAucmVzb2x1dGlvbjogJUx1IG5zZWNzXG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucyhiYXNlLT5yZXNvbHV0aW9uKSk7CiAJU0VRX3ByaW50ZihtLCAgICIgIC5nZXRfdGltZTogICAiKTsKIAlwcmludF9uYW1lX29mZnNldChtLCBiYXNlLT5nZXRfdGltZSk7CiAJU0VRX3ByaW50ZihtLCAgICJcbiIpOwogI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKLQlTRVFfcHJpbnRmKG0sICIgIC5vZmZzZXQ6ICAgICAlTGQgbnNlY3NcbiIsCi0JCQlrdGltZV90b19ucyhiYXNlLT5vZmZzZXQpKTsKKwlTRVFfcHJpbnRmKG0sICIgIC5vZmZzZXQ6ICAgICAlTHUgbnNlY3NcbiIsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGt0aW1lX3RvX25zKGJhc2UtPm9mZnNldCkpOwogI2VuZGlmCiAJU0VRX3ByaW50ZihtLCAgICJhY3RpdmUgdGltZXJzOlxuIik7CiAJcHJpbnRfYWN0aXZlX3RpbWVycyhtLCBiYXNlLCBub3cpOwpAQCAtMTQwLDEwICsxMzUsMTEgQEAKIAkJcHJpbnRfYmFzZShtLCBjcHVfYmFzZS0+Y2xvY2tfYmFzZSArIGksIG5vdyk7CiAJfQogI2RlZmluZSBQKHgpIFwKLQlTRVFfcHJpbnRmKG0sICIgIC4lLTE1czogJUxkXG4iLCAjeCwgKHU2NCkoY3B1X2Jhc2UtPngpKQorCVNFUV9wcmludGYobSwgIiAgLiUtMTVzOiAlTHVcbiIsICN4LCBcCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpKGNwdV9iYXNlLT54KSkKICNkZWZpbmUgUF9ucyh4KSBcCi0JU0VRX3ByaW50ZihtLCAiICAuJS0xNXM6ICVMZCBuc2Vjc1xuIiwgI3gsIFwKLQkJKHU2NCkoa3RpbWVfdG9fbnMoY3B1X2Jhc2UtPngpKSkKKwlTRVFfcHJpbnRmKG0sICIgIC4lLTE1czogJUx1IG5zZWNzXG4iLCAjeCwgXAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKShrdGltZV90b19ucyhjcHVfYmFzZS0+eCkpKQogCiAjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwogCVBfbnMoZXhwaXJlc19uZXh0KTsKQEAgLTE1NSwxMCArMTUxLDExIEBACiAKICNpZmRlZiBDT05GSUdfVElDS19PTkVTSE9UCiAjIGRlZmluZSBQKHgpIFwKLQlTRVFfcHJpbnRmKG0sICIgIC4lLTE1czogJUxkXG4iLCAjeCwgKHU2NCkodHMtPngpKQorCVNFUV9wcmludGYobSwgIiAgLiUtMTVzOiAlTHVcbiIsICN4LCBcCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHRzLT54KSkKICMgZGVmaW5lIFBfbnMoeCkgXAotCVNFUV9wcmludGYobSwgIiAgLiUtMTVzOiAlTGQgbnNlY3NcbiIsICN4LCBcCi0JCSh1NjQpKGt0aW1lX3RvX25zKHRzLT54KSkpCisJU0VRX3ByaW50ZihtLCAiICAuJS0xNXM6ICVMdSBuc2Vjc1xuIiwgI3gsIFwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoa3RpbWVfdG9fbnModHMtPngpKSkKIAl7CiAJCXN0cnVjdCB0aWNrX3NjaGVkICp0cyA9IHRpY2tfZ2V0X3RpY2tfc2NoZWQoY3B1KTsKIAkJUChub2h6X21vZGUpOwpAQCAtMTcyLDcgKzE2OSw4IEBACiAJCVAobGFzdF9qaWZmaWVzKTsKIAkJUChuZXh0X2ppZmZpZXMpOwogCQlQX25zKGlkbGVfZXhwaXJlcyk7Ci0JCVNFUV9wcmludGYobSwgImppZmZpZXM6ICVMZFxuIiwgKHU2NClqaWZmaWVzKTsKKwkJU0VRX3ByaW50ZihtLCAiamlmZmllczogJUx1XG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylqaWZmaWVzKTsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYyBiL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMKaW5kZXggMWJjNDg4Mi4uMzIxNjkzNyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYworKysgYi9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jCkBAIC0xMTcsMjEgKzExNyw2IEBACiAKIHN0YXRpYyBhdG9taWNfdCBvdmVyZmxvd19jb3VudDsKIAotc3RhdGljIHZvaWQgcmVzZXRfZW50cmllcyh2b2lkKQotewotCW5yX2VudHJpZXMgPSAwOwotCW1lbXNldChlbnRyaWVzLCAwLCBzaXplb2YoZW50cmllcykpOwotCWF0b21pY19zZXQoJm92ZXJmbG93X2NvdW50LCAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBlbnRyeSAqYWxsb2NfZW50cnkodm9pZCkKLXsKLQlpZiAobnJfZW50cmllcyA+PSBNQVhfRU5UUklFUykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gZW50cmllcyArIG5yX2VudHJpZXMrKzsKLX0KLQogLyoKICAqIFRoZSBlbnRyaWVzIGFyZSBpbiBhIGhhc2gtdGFibGUsIGZvciBmYXN0IGxvb2t1cDoKICAqLwpAQCAtMTQ5LDYgKzEzNCwyMiBAQAogCiBzdGF0aWMgc3RydWN0IGVudHJ5ICp0c3RhdF9oYXNoX3RhYmxlW1RTVEFUX0hBU0hfU0laRV0gX19yZWFkX21vc3RseTsKIAorc3RhdGljIHZvaWQgcmVzZXRfZW50cmllcyh2b2lkKQoreworCW5yX2VudHJpZXMgPSAwOworCW1lbXNldChlbnRyaWVzLCAwLCBzaXplb2YoZW50cmllcykpOworCW1lbXNldCh0c3RhdF9oYXNoX3RhYmxlLCAwLCBzaXplb2YodHN0YXRfaGFzaF90YWJsZSkpOworCWF0b21pY19zZXQoJm92ZXJmbG93X2NvdW50LCAwKTsKK30KKworc3RhdGljIHN0cnVjdCBlbnRyeSAqYWxsb2NfZW50cnkodm9pZCkKK3sKKwlpZiAobnJfZW50cmllcyA+PSBNQVhfRU5UUklFUykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZW50cmllcyArIG5yX2VudHJpZXMrKzsKK30KKwogc3RhdGljIGludCBtYXRjaF9lbnRyaWVzKHN0cnVjdCBlbnRyeSAqZW50cnkxLCBzdHJ1Y3QgZW50cnkgKmVudHJ5MikKIHsKIAlyZXR1cm4gZW50cnkxLT50aW1lciAgICAgICA9PSBlbnRyeTItPnRpbWVyCSAgJiYKQEAgLTIwMiwxMiArMjAzLDE1IEBACiAJaWYgKGN1cnIpIHsKIAkJKmN1cnIgPSAqZW50cnk7CiAJCWN1cnItPmNvdW50ID0gMDsKKwkJY3Vyci0+bmV4dCA9IE5VTEw7CiAJCW1lbWNweShjdXJyLT5jb21tLCBjb21tLCBUQVNLX0NPTU1fTEVOKTsKKworCQlzbXBfbWIoKTsgLyogRW5zdXJlIHRoYXQgY3VyciBpcyBpbml0aWFsaXplZCBiZWZvcmUgaW5zZXJ0ICovCisKIAkJaWYgKHByZXYpCiAJCQlwcmV2LT5uZXh0ID0gY3VycjsKIAkJZWxzZQogCQkJKmhlYWQgPSBjdXJyOwotCQljdXJyLT5uZXh0ID0gTlVMTDsKIAl9CiAgb3V0X3VubG9jazoKIAlzcGluX3VubG9jaygmdGFibGVfbG9jayk7CkBAIC0yMzIsMTAgKzIzNiwxNSBAQAogCS8qCiAJICogSXQgZG9lc250IG1hdHRlciB3aGljaCBsb2NrIHdlIHRha2U6CiAJICovCi0Jc3BpbmxvY2tfdCAqbG9jayA9ICZwZXJfY3B1KGxvb2t1cF9sb2NrLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzcGlubG9ja190ICpsb2NrOwogCXN0cnVjdCBlbnRyeSAqZW50cnksIGlucHV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAobGlrZWx5KCFhY3RpdmUpKQorCQlyZXR1cm47CisKKwlsb2NrID0gJnBlcl9jcHUobG9va3VwX2xvY2ssIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCiAJaW5wdXQudGltZXIgPSB0aW1lcjsKIAlpbnB1dC5zdGFydF9mdW5jID0gc3RhcnRmOwogCWlucHV0LmV4cGlyZV9mdW5jID0gdGltZXJmOwpAQCAtMjU3LDE2ICsyNjYsMTIgQEAKIAogc3RhdGljIHZvaWQgcHJpbnRfbmFtZV9vZmZzZXQoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JY2hhciBuYW1lYnVmW0tTWU1fTkFNRV9MRU4rMV07Ci0JdW5zaWduZWQgbG9uZyBzaXplLCBvZmZzZXQ7Ci0JY29uc3QgY2hhciAqc3ltX25hbWU7Ci0JY2hhciAqbW9kbmFtZTsKKwljaGFyIHN5bW5hbWVbS1NZTV9OQU1FX0xFTisxXTsKIAotCXN5bV9uYW1lID0ga2FsbHN5bXNfbG9va3VwKGFkZHIsICZzaXplLCAmb2Zmc2V0LCAmbW9kbmFtZSwgbmFtZWJ1Zik7Ci0JaWYgKHN5bV9uYW1lKQotCQlzZXFfcHJpbnRmKG0sICIlcyIsIHN5bV9uYW1lKTsKLQllbHNlCisJaWYgKGxvb2t1cF9zeW1ib2xfbmFtZShhZGRyLCBzeW1uYW1lKSA8IDApCiAJCXNlcV9wcmludGYobSwgIjwlcD4iLCAodm9pZCAqKWFkZHIpOworCWVsc2UKKwkJc2VxX3ByaW50ZihtLCAiJXMiLCBzeW1uYW1lKTsKIH0KIAogc3RhdGljIGludCB0c3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCkBAIC0zNjQsNiArMzY5LDcgQEAKIAkJaWYgKCFhY3RpdmUpIHsKIAkJCXJlc2V0X2VudHJpZXMoKTsKIAkJCXRpbWVfc3RhcnQgPSBrdGltZV9nZXQoKTsKKwkJCXNtcF9tYigpOwogCQkJYWN0aXZlID0gMTsKIAkJfQogCQlicmVhazsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggYjIyYmQzOS4uMWE2OTcwNSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2tlcm5lbC90aW1lci5jCiAgKgotICogIEtlcm5lbCBpbnRlcm5hbCB0aW1lcnMsIGtlcm5lbCB0aW1la2VlcGluZywgYmFzaWMgcHJvY2VzcyBzeXN0ZW0gY2FsbHMKKyAqICBLZXJuZWwgaW50ZXJuYWwgdGltZXJzLCBiYXNpYyBwcm9jZXNzIHN5c3RlbSBjYWxscwogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCiAgKgpAQCAtNzQsNyArNzQsNyBAQAogCXR2ZWNfdCB0djM7CiAJdHZlY190IHR2NDsKIAl0dmVjX3QgdHY1OwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKIHR5cGVkZWYgc3RydWN0IHR2ZWNfdF9iYXNlX3MgdHZlY19iYXNlX3Q7CiAKQEAgLTgyLDYgKzgyLDM3IEBACiBFWFBPUlRfU1lNQk9MKGJvb3RfdHZlY19iYXNlcyk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodHZlY19iYXNlX3QgKiwgdHZlY19iYXNlcykgPSAmYm9vdF90dmVjX2Jhc2VzOwogCisvKgorICogTm90ZSB0aGF0IGFsbCB0dmVjX2Jhc2VzIGlzIDIgYnl0ZSBhbGlnbmVkIGFuZCBsb3dlciBiaXQgb2YKKyAqIGJhc2UgaW4gdGltZXJfbGlzdCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm8uIFVzZSB0aGUgTFNCIGZvcgorICogdGhlIG5ldyBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHRpbWVyIGlzIGRlZmVycmFibGUKKyAqLworI2RlZmluZSBUQkFTRV9ERUZFUlJBQkxFX0ZMQUcJCSgweDEpCisKKy8qIEZ1bmN0aW9ucyBiZWxvdyBoZWxwIHVzIG1hbmFnZSAnZGVmZXJyYWJsZScgZmxhZyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGJhc2VfZ2V0X2RlZmVycmFibGUodHZlY19iYXNlX3QgKmJhc2UpCit7CisJcmV0dXJuICgodW5zaWduZWQgaW50KSh1bnNpZ25lZCBsb25nKWJhc2UgJiBUQkFTRV9ERUZFUlJBQkxFX0ZMQUcpOworfQorCitzdGF0aWMgaW5saW5lIHR2ZWNfYmFzZV90ICp0YmFzZV9nZXRfYmFzZSh0dmVjX2Jhc2VfdCAqYmFzZSkKK3sKKwlyZXR1cm4gKCh0dmVjX2Jhc2VfdCAqKSgodW5zaWduZWQgbG9uZyliYXNlICYgflRCQVNFX0RFRkVSUkFCTEVfRkxBRykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc2V0X2RlZmVycmFibGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQoreworCXRpbWVyLT5iYXNlID0gKCh0dmVjX2Jhc2VfdCAqKSgodW5zaWduZWQgbG9uZykodGltZXItPmJhc2UpIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJBU0VfREVGRVJSQUJMRV9GTEFHKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGltZXJfc2V0X2Jhc2Uoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB0dmVjX2Jhc2VfdCAqbmV3X2Jhc2UpCit7CisJdGltZXItPmJhc2UgPSAodHZlY19iYXNlX3QgKikoKHVuc2lnbmVkIGxvbmcpKG5ld19iYXNlKSB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJhc2VfZ2V0X2RlZmVycmFibGUodGltZXItPmJhc2UpKTsKK30KKwogLyoqCiAgKiBfX3JvdW5kX2ppZmZpZXMgLSBmdW5jdGlvbiB0byByb3VuZCBqaWZmaWVzIHRvIGEgZnVsbCBzZWNvbmQKICAqIEBqOiB0aGUgdGltZSBpbiAoYWJzb2x1dGUpIGppZmZpZXMgdGhhdCBzaG91bGQgYmUgcm91bmRlZApAQCAtMjk1LDYgKzMyNiwxMyBAQAogfQogRVhQT1JUX1NZTUJPTChpbml0X3RpbWVyKTsKIAordm9pZCBmYXN0Y2FsbCBpbml0X3RpbWVyX2RlZmVycmFibGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQoreworCWluaXRfdGltZXIodGltZXIpOworCXRpbWVyX3NldF9kZWZlcnJhYmxlKHRpbWVyKTsKK30KK0VYUE9SVF9TWU1CT0woaW5pdF90aW1lcl9kZWZlcnJhYmxlKTsKKwogc3RhdGljIGlubGluZSB2b2lkIGRldGFjaF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCiAJCQkJaW50IGNsZWFyX3BlbmRpbmcpCiB7CkBAIC0zMjUsMTAgKzM2MywxMSBAQAogCXR2ZWNfYmFzZV90ICpiYXNlOwogCiAJZm9yICg7OykgewotCQliYXNlID0gdGltZXItPmJhc2U7CisJCXR2ZWNfYmFzZV90ICpwcmVsb2NrX2Jhc2UgPSB0aW1lci0+YmFzZTsKKwkJYmFzZSA9IHRiYXNlX2dldF9iYXNlKHByZWxvY2tfYmFzZSk7CiAJCWlmIChsaWtlbHkoYmFzZSAhPSBOVUxMKSkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJhc2UtPmxvY2ssICpmbGFncyk7Ci0JCQlpZiAobGlrZWx5KGJhc2UgPT0gdGltZXItPmJhc2UpKQorCQkJaWYgKGxpa2VseShwcmVsb2NrX2Jhc2UgPT0gdGltZXItPmJhc2UpKQogCQkJCXJldHVybiBiYXNlOwogCQkJLyogVGhlIHRpbWVyIGhhcyBtaWdyYXRlZCB0byBhbm90aGVyIENQVSAqLwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFzZS0+bG9jaywgKmZsYWdzKTsKQEAgLTM2NSwxMSArNDA0LDExIEBACiAJCSAqLwogCQlpZiAobGlrZWx5KGJhc2UtPnJ1bm5pbmdfdGltZXIgIT0gdGltZXIpKSB7CiAJCQkvKiBTZWUgdGhlIGNvbW1lbnQgaW4gbG9ja190aW1lcl9iYXNlKCkgKi8KLQkJCXRpbWVyLT5iYXNlID0gTlVMTDsKKwkJCXRpbWVyX3NldF9iYXNlKHRpbWVyLCBOVUxMKTsKIAkJCXNwaW5fdW5sb2NrKCZiYXNlLT5sb2NrKTsKIAkJCWJhc2UgPSBuZXdfYmFzZTsKIAkJCXNwaW5fbG9jaygmYmFzZS0+bG9jayk7Ci0JCQl0aW1lci0+YmFzZSA9IGJhc2U7CisJCQl0aW1lcl9zZXRfYmFzZSh0aW1lciwgYmFzZSk7CiAJCX0KIAl9CiAKQEAgLTM5Nyw3ICs0MzYsNyBAQAogCXRpbWVyX3N0YXRzX3RpbWVyX3NldF9zdGFydF9pbmZvKHRpbWVyKTsKICAgCUJVR19PTih0aW1lcl9wZW5kaW5nKHRpbWVyKSB8fCAhdGltZXItPmZ1bmN0aW9uKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+bG9jaywgZmxhZ3MpOwotCXRpbWVyLT5iYXNlID0gYmFzZTsKKwl0aW1lcl9zZXRfYmFzZSh0aW1lciwgYmFzZSk7CiAJaW50ZXJuYWxfYWRkX3RpbWVyKGJhc2UsIHRpbWVyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5sb2NrLCBmbGFncyk7CiB9CkBAIC01NTAsNyArNTg5LDcgQEAKIAkgKiBkb24ndCBoYXZlIHRvIGRldGFjaCB0aGVtIGluZGl2aWR1YWxseS4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGltZXIsIHRtcCwgJnR2X2xpc3QsIGVudHJ5KSB7Ci0JCUJVR19PTih0aW1lci0+YmFzZSAhPSBiYXNlKTsKKwkJQlVHX09OKHRiYXNlX2dldF9iYXNlKHRpbWVyLT5iYXNlKSAhPSBiYXNlKTsKIAkJaW50ZXJuYWxfYWRkX3RpbWVyKGJhc2UsIHRpbWVyKTsKIAl9CiAKQEAgLTU5MCw3ICs2MjksNyBAQAogCQkJdm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nKTsKIAkJCXVuc2lnbmVkIGxvbmcgZGF0YTsKIAotCQkJdGltZXIgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsc3RydWN0IHRpbWVyX2xpc3QsZW50cnkpOworCQkJdGltZXIgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCB0aW1lcl9saXN0LGVudHJ5KTsKICAJCQlmbiA9IHRpbWVyLT5mdW5jdGlvbjsKICAJCQlkYXRhID0gdGltZXItPmRhdGE7CiAKQEAgLTYyNyw3ICs2NjYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19uZXh0X3RpbWVyX2ludGVycnVwdCh0dmVjX2Jhc2VfdCAqYmFzZSkKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVyX2ppZmZpZXMgPSBiYXNlLT50aW1lcl9qaWZmaWVzOwotCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IHRpbWVyX2ppZmZpZXMgKyAoTE9OR19NQVggPj4gMSk7CisJdW5zaWduZWQgbG9uZyBleHBpcmVzID0gdGltZXJfamlmZmllcyArIE5FWFRfVElNRVJfTUFYX0RFTFRBOwogCWludCBpbmRleCwgc2xvdCwgYXJyYXksIGZvdW5kID0gMDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCAqbnRlOwogCXR2ZWNfdCAqdmFycmF5WzRdOwpAQCAtNjM2LDYgKzY3NSw5IEBACiAJaW5kZXggPSBzbG90ID0gdGltZXJfamlmZmllcyAmIFRWUl9NQVNLOwogCWRvIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShudGUsIGJhc2UtPnR2MS52ZWMgKyBzbG90LCBlbnRyeSkgeworIAkJCWlmICh0YmFzZV9nZXRfZGVmZXJyYWJsZShudGUtPmJhc2UpKQorIAkJCQljb250aW51ZTsKKwogCQkJZm91bmQgPSAxOwogCQkJZXhwaXJlcyA9IG50ZS0+ZXhwaXJlczsKIAkJCS8qIExvb2sgYXQgdGhlIGNhc2NhZGUgYnVja2V0KHMpPyAqLwpAQCAtNzEwLDYgKzc1MiwxNCBAQAogCiAJdHNkZWx0YSA9IGt0aW1lX3RvX3RpbWVzcGVjKGhyX2RlbHRhKTsKIAlkZWx0YSA9IHRpbWVzcGVjX3RvX2ppZmZpZXMoJnRzZGVsdGEpOworCisJLyoKKwkgKiBMaW1pdCB0aGUgZGVsdGEgdG8gdGhlIG1heCB2YWx1ZSwgd2hpY2ggaXMgY2hlY2tlZCBpbgorCSAqIHRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2soKToKKwkgKi8KKwlpZiAoZGVsdGEgPiBORVhUX1RJTUVSX01BWF9ERUxUQSkKKwkJZGVsdGEgPSBORVhUX1RJTUVSX01BWF9ERUxUQTsKKwogCS8qCiAJICogVGFrZSByb3VuZGluZyBlcnJvcnMgaW4gdG8gYWNjb3VudCBhbmQgbWFrZSBzdXJlLCB0aGF0IGl0CiAJICogZXhwaXJlcyBpbiB0aGUgbmV4dCB0aWNrLiBPdGhlcndpc2Ugd2UgZ28gaW50byBhbiBlbmRsZXNzCkBAIC03NTIsNDU1ICs4MDIsNiBAQAogCiAjZW5kaWYKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogCi0gKiBUaGUgY3VycmVudCB0aW1lIAotICogd2FsbF90b19tb25vdG9uaWMgaXMgd2hhdCB3ZSBuZWVkIHRvIGFkZCB0byB4dGltZSAob3IgeHRpbWUgY29ycmVjdGVkIAotICogZm9yIHN1YiBqaWZmaWUgdGltZXMpIHRvIGdldCB0byBtb25vdG9uaWMgdGltZS4gIE1vbm90b25pYyBpcyBwZWdnZWQKLSAqIGF0IHplcm8gYXQgc3lzdGVtIGJvb3QgdGltZSwgc28gd2FsbF90b19tb25vdG9uaWMgd2lsbCBiZSBuZWdhdGl2ZSwKLSAqIGhvd2V2ZXIsIHdlIHdpbGwgQUxXQVlTIGtlZXAgdGhlIHR2X25zZWMgcGFydCBwb3NpdGl2ZSBzbyB3ZSBjYW4gdXNlCi0gKiB0aGUgdXN1YWwgbm9ybWFsaXphdGlvbi4KLSAqLwotc3RydWN0IHRpbWVzcGVjIHh0aW1lIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKLXN0cnVjdCB0aW1lc3BlYyB3YWxsX3RvX21vbm90b25pYyBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7Ci0KLUVYUE9SVF9TWU1CT0woeHRpbWUpOwotCi0KLS8qIFhYWCAtIGFsbCBvZiB0aGlzIHRpbWVrZWVwaW5nIGNvZGUgc2hvdWxkIGJlIGxhdGVyIG1vdmVkIHRvIHRpbWUuYyAqLwotI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+Ci1zdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlICpjbG9jazsgLyogcG9pbnRlciB0byBjdXJyZW50IGNsb2Nrc291cmNlICovCi0KLSNpZmRlZiBDT05GSUdfR0VORVJJQ19USU1FCi0vKioKLSAqIF9fZ2V0X25zZWNfb2Zmc2V0IC0gUmV0dXJucyBuYW5vc2Vjb25kcyBzaW5jZSBsYXN0IGNhbGwgdG8gcGVyaW9kaWNfaG9vawotICoKLSAqIHByaXZhdGUgZnVuY3Rpb24sIG11c3QgaG9sZCB4dGltZV9sb2NrIGxvY2sgd2hlbiBiZWluZwotICogY2FsbGVkLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbmFub3NlY29uZHMgc2luY2UgdGhlCi0gKiBsYXN0IGNhbGwgdG8gdXBkYXRlX3dhbGxfdGltZSgpIChhZGp1c3RlZCBieSBOVFAgc2NhbGluZykKLSAqLwotc3RhdGljIGlubGluZSBzNjQgX19nZXRfbnNlY19vZmZzZXQodm9pZCkKLXsKLQljeWNsZV90IGN5Y2xlX25vdywgY3ljbGVfZGVsdGE7Ci0JczY0IG5zX29mZnNldDsKLQotCS8qIHJlYWQgY2xvY2tzb3VyY2U6ICovCi0JY3ljbGVfbm93ID0gY2xvY2tzb3VyY2VfcmVhZChjbG9jayk7Ci0KLQkvKiBjYWxjdWxhdGUgdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZV93YWxsX3RpbWU6ICovCi0JY3ljbGVfZGVsdGEgPSAoY3ljbGVfbm93IC0gY2xvY2stPmN5Y2xlX2xhc3QpICYgY2xvY2stPm1hc2s7Ci0KLQkvKiBjb252ZXJ0IHRvIG5hbm9zZWNvbmRzOiAqLwotCW5zX29mZnNldCA9IGN5YzJucyhjbG9jaywgY3ljbGVfZGVsdGEpOwotCi0JcmV0dXJuIG5zX29mZnNldDsKLX0KLQotLyoqCi0gKiBfX2dldF9yZWFsdGltZV9jbG9ja190cyAtIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXNwZWMKLSAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHRvIGJlIHNldAotICoKLSAqIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXNwZWMuIFVzZWQgYnkKLSAqIGRvX2dldHRpbWVvZmRheSgpIGFuZCBnZXRfcmVhbHRpbWVfY2xvY2tfdHMoKS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fZ2V0X3JlYWx0aW1lX2Nsb2NrX3RzKHN0cnVjdCB0aW1lc3BlYyAqdHMpCi17Ci0JdW5zaWduZWQgbG9uZyBzZXE7Ci0JczY0IG5zZWNzOwotCi0JZG8gewotCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQotCQkqdHMgPSB4dGltZTsKLQkJbnNlY3MgPSBfX2dldF9uc2VjX29mZnNldCgpOwotCi0JfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7Ci0KLQl0aW1lc3BlY19hZGRfbnModHMsIG5zZWNzKTsKLX0KLQotLyoqCi0gKiBnZXRuc3RpbWVvZmRheSAtIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXNwZWMKLSAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHRvIGJlIHNldAotICoKLSAqIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXNwZWMuCi0gKi8KLXZvaWQgZ2V0bnN0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0cykKLXsKLQlfX2dldF9yZWFsdGltZV9jbG9ja190cyh0cyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZ2V0bnN0aW1lb2ZkYXkpOwotCi0vKioKLSAqIGRvX2dldHRpbWVvZmRheSAtIFJldHVybnMgdGhlIHRpbWUgb2YgZGF5IGluIGEgdGltZXZhbAotICogQHR2OgkJcG9pbnRlciB0byB0aGUgdGltZXZhbCB0byBiZSBzZXQKLSAqCi0gKiBOT1RFOiBVc2VycyBzaG91bGQgYmUgY29udmVydGVkIHRvIHVzaW5nIGdldF9yZWFsdGltZV9jbG9ja190cygpCi0gKi8KLXZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgbm93OwotCi0JX19nZXRfcmVhbHRpbWVfY2xvY2tfdHMoJm5vdyk7Ci0JdHYtPnR2X3NlYyA9IG5vdy50dl9zZWM7Ci0JdHYtPnR2X3VzZWMgPSBub3cudHZfbnNlYy8xMDAwOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7Ci0vKioKLSAqIGRvX3NldHRpbWVvZmRheSAtIFNldHMgdGhlIHRpbWUgb2YgZGF5Ci0gKiBAdHY6CQlwb2ludGVyIHRvIHRoZSB0aW1lc3BlYyB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBuZXcgdGltZQotICoKLSAqIFNldHMgdGhlIHRpbWUgb2YgZGF5IHRvIHRoZSBuZXcgdGltZSBhbmQgdXBkYXRlIE5UUCBhbmQgbm90aWZ5IGhydGltZXJzCi0gKi8KLWludCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXRpbWVfdCB3dG1fc2VjLCBzZWMgPSB0di0+dHZfc2VjOwotCWxvbmcgd3RtX25zZWMsIG5zZWMgPSB0di0+dHZfbnNlYzsKLQotCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0KLQluc2VjIC09IF9fZ2V0X25zZWNfb2Zmc2V0KCk7Ci0KLQl3dG1fc2VjICA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyArICh4dGltZS50dl9zZWMgLSBzZWMpOwotCXd0bV9uc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfbnNlYyArICh4dGltZS50dl9uc2VjIC0gbnNlYyk7Ci0KLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmeHRpbWUsIHNlYywgbnNlYyk7Ci0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLCB3dG1fc2VjLCB3dG1fbnNlYyk7Ci0KLQljbG9jay0+ZXJyb3IgPSAwOwotCW50cF9jbGVhcigpOwotCi0JdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgY2xvY2spOwotCi0Jd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQotCS8qIHNpZ25hbCBocnRpbWVycyBhYm91dCB0aW1lIGNoYW5nZSAqLwotCWNsb2NrX3dhc19zZXQoKTsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7Ci0KLS8qKgotICogY2hhbmdlX2Nsb2Nrc291cmNlIC0gU3dhcHMgY2xvY2tzb3VyY2VzIGlmIGEgbmV3IG9uZSBpcyBhdmFpbGFibGUKLSAqCi0gKiBBY2N1bXVsYXRlcyBjdXJyZW50IHRpbWUgaW50ZXJ2YWwgYW5kIGluaXRpYWxpemVzIG5ldyBjbG9ja3NvdXJjZQotICovCi1zdGF0aWMgdm9pZCBjaGFuZ2VfY2xvY2tzb3VyY2Uodm9pZCkKLXsKLQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKm5ldzsKLQljeWNsZV90IG5vdzsKLQl1NjQgbnNlYzsKLQotCW5ldyA9IGNsb2Nrc291cmNlX2dldF9uZXh0KCk7Ci0KLQlpZiAoY2xvY2sgPT0gbmV3KQotCQlyZXR1cm47Ci0KLQlub3cgPSBjbG9ja3NvdXJjZV9yZWFkKG5ldyk7Ci0JbnNlYyA9ICBfX2dldF9uc2VjX29mZnNldCgpOwotCXRpbWVzcGVjX2FkZF9ucygmeHRpbWUsIG5zZWMpOwotCi0JY2xvY2sgPSBuZXc7Ci0JY2xvY2stPmN5Y2xlX2xhc3QgPSBub3c7Ci0KLQljbG9jay0+ZXJyb3IgPSAwOwotCWNsb2NrLT54dGltZV9uc2VjID0gMDsKLQljbG9ja3NvdXJjZV9jYWxjdWxhdGVfaW50ZXJ2YWwoY2xvY2ssIE5UUF9JTlRFUlZBTF9MRU5HVEgpOwotCi0JdGlja19jbG9ja19ub3RpZnkoKTsKLQotCXByaW50ayhLRVJOX0lORk8gIlRpbWU6ICVzIGNsb2Nrc291cmNlIGhhcyBiZWVuIGluc3RhbGxlZC5cbiIsCi0JICAgICAgIGNsb2NrLT5uYW1lKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2Nsb2Nrc291cmNlKHZvaWQpIHsgfQotI2VuZGlmCi0KLS8qKgotICogdGltZWtlZXBpbmdfaXNfY29udGludW91cyAtIGNoZWNrIHRvIHNlZSBpZiB0aW1la2VlcGluZyBpcyBmcmVlIHJ1bm5pbmcKLSAqLwotaW50IHRpbWVrZWVwaW5nX2lzX2NvbnRpbnVvdXModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHNlcTsKLQlpbnQgcmV0OwotCi0JZG8gewotCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQotCQlyZXQgPSBjbG9jay0+ZmxhZ3MgJiBDTE9DS19TT1VSQ0VfVkFMSURfRk9SX0hSRVM7Ci0KLQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogcmVhZF9wZXJzaXN0ZW50X2Nsb2NrIC0gIFJldHVybiB0aW1lIGluIHNlY29uZHMgZnJvbSB0aGUgcGVyc2lzdGVudCBjbG9jay4KLSAqCi0gKiBXZWFrIGR1bW15IGZ1bmN0aW9uIGZvciBhcmNoZXMgdGhhdCBkbyBub3QgeWV0IHN1cHBvcnQgaXQuCi0gKiBSZXR1cm5zIHNlY29uZHMgZnJvbSBlcG9jaCB1c2luZyB0aGUgYmF0dGVyeSBiYWNrZWQgcGVyc2lzdGVudCBjbG9jay4KLSAqIFJldHVybnMgemVybyBpZiB1bnN1cHBvcnRlZC4KLSAqCi0gKiAgWFhYIC0gRG8gYmUgc3VyZSB0byByZW1vdmUgaXQgb25jZSBhbGwgYXJjaGVzIGltcGxlbWVudCBpdC4KLSAqLwotdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiB0aW1la2VlcGluZ19pbml0IC0gSW5pdGlhbGl6ZXMgdGhlIGNsb2Nrc291cmNlIGFuZCBjb21tb24gdGltZWtlZXBpbmcgdmFsdWVzCi0gKi8KLXZvaWQgX19pbml0IHRpbWVrZWVwaW5nX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgc2VjID0gcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKCk7Ci0KLQl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQotCW50cF9jbGVhcigpOwotCi0JY2xvY2sgPSBjbG9ja3NvdXJjZV9nZXRfbmV4dCgpOwotCWNsb2Nrc291cmNlX2NhbGN1bGF0ZV9pbnRlcnZhbChjbG9jaywgTlRQX0lOVEVSVkFMX0xFTkdUSCk7Ci0JY2xvY2stPmN5Y2xlX2xhc3QgPSBjbG9ja3NvdXJjZV9yZWFkKGNsb2NrKTsKLQotCXh0aW1lLnR2X3NlYyA9IHNlYzsKLQl4dGltZS50dl9uc2VjID0gMDsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCi0JCS14dGltZS50dl9zZWMsIC14dGltZS50dl9uc2VjKTsKLQotCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qIGZsYWcgZm9yIGlmIHRpbWVrZWVwaW5nIGlzIHN1c3BlbmRlZCAqLwotc3RhdGljIGludCB0aW1la2VlcGluZ19zdXNwZW5kZWQ7Ci0vKiB0aW1lIGluIHNlY29uZHMgd2hlbiBzdXNwZW5kIGJlZ2FuICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1la2VlcGluZ19zdXNwZW5kX3RpbWU7Ci0KLS8qKgotICogdGltZWtlZXBpbmdfcmVzdW1lIC0gUmVzdW1lcyB0aGUgZ2VuZXJpYyB0aW1la2VlcGluZyBzdWJzeXN0ZW0uCi0gKiBAZGV2Ogl1bnVzZWQKLSAqCi0gKiBUaGlzIGlzIGZvciB0aGUgZ2VuZXJpYyBjbG9ja3NvdXJjZSB0aW1la2VlcGluZy4KLSAqIHh0aW1lL3dhbGxfdG9fbW9ub3RvbmljL2ppZmZpZXMvZXRjIGFyZQotICogc3RpbGwgbWFuYWdlZCBieSBhcmNoIHNwZWNpZmljIHN1c3BlbmQvcmVzdW1lIGNvZGUuCi0gKi8KLXN0YXRpYyBpbnQgdGltZWtlZXBpbmdfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIG5vdyA9IHJlYWRfcGVyc2lzdGVudF9jbG9jaygpOwotCi0Jd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAobm93ICYmIChub3cgPiB0aW1la2VlcGluZ19zdXNwZW5kX3RpbWUpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc2xlZXBfbGVuZ3RoID0gbm93IC0gdGltZWtlZXBpbmdfc3VzcGVuZF90aW1lOwotCi0JCXh0aW1lLnR2X3NlYyArPSBzbGVlcF9sZW5ndGg7Ci0JCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyAtPSBzbGVlcF9sZW5ndGg7Ci0JfQotCS8qIHJlLWJhc2UgdGhlIGxhc3QgY3ljbGUgdmFsdWUgKi8KLQljbG9jay0+Y3ljbGVfbGFzdCA9IGNsb2Nrc291cmNlX3JlYWQoY2xvY2spOwotCWNsb2NrLT5lcnJvciA9IDA7Ci0JdGltZWtlZXBpbmdfc3VzcGVuZGVkID0gMDsKLQl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCi0JdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwotCi0JY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfUkVTVU1FLCBOVUxMKTsKLQotCS8qIFJlc3VtZSBocnRpbWVycyAqLwotCWhyZXNfdGltZXJzX3Jlc3VtZSgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdGltZWtlZXBpbmdfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCXRpbWVrZWVwaW5nX3N1c3BlbmRlZCA9IDE7Ci0JdGltZWtlZXBpbmdfc3VzcGVuZF90aW1lID0gcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKCk7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQotCWNsb2NrZXZlbnRzX25vdGlmeShDTE9DS19FVlRfTk9USUZZX1NVU1BFTkQsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIHN5c2ZzIHJlc3VtZS9zdXNwZW5kIGJpdHMgZm9yIHRpbWVrZWVwaW5nICovCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyB0aW1la2VlcGluZ19zeXNjbGFzcyA9IHsKLQkucmVzdW1lCQk9IHRpbWVrZWVwaW5nX3Jlc3VtZSwKLQkuc3VzcGVuZAk9IHRpbWVrZWVwaW5nX3N1c3BlbmQsCi0Jc2V0X2tzZXRfbmFtZSgidGltZWtlZXBpbmciKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfdGltZXIgPSB7Ci0JLmlkCQk9IDAsCi0JLmNscwkJPSAmdGltZWtlZXBpbmdfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB0aW1la2VlcGluZ19pbml0X2RldmljZSh2b2lkKQotewotCWludCBlcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmdGltZWtlZXBpbmdfc3lzY2xhc3MpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZkZXZpY2VfdGltZXIpOwotCXJldHVybiBlcnJvcjsKLX0KLQotZGV2aWNlX2luaXRjYWxsKHRpbWVrZWVwaW5nX2luaXRfZGV2aWNlKTsKLQotLyoKLSAqIElmIHRoZSBlcnJvciBpcyBhbHJlYWR5IGxhcmdlciwgd2UgbG9vayBhaGVhZCBldmVuIGZ1cnRoZXIKLSAqIHRvIGNvbXBlbnNhdGUgZm9yIGxhdGUgb3IgbG9zdCBhZGp1c3RtZW50cy4KLSAqLwotc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgY2xvY2tzb3VyY2VfYmlnYWRqdXN0KHM2NCBlcnJvciwgczY0ICppbnRlcnZhbCwKLQkJCQkJCSBzNjQgKm9mZnNldCkKLXsKLQlzNjQgdGlja19lcnJvciwgaTsKLQl1MzIgbG9va19haGVhZCwgYWRqOwotCXMzMiBlcnJvcjIsIG11bHQ7Ci0KLQkvKgotCSAqIFVzZSB0aGUgY3VycmVudCBlcnJvciB2YWx1ZSB0byBkZXRlcm1pbmUgaG93IG11Y2ggdG8gbG9vayBhaGVhZC4KLQkgKiBUaGUgbGFyZ2VyIHRoZSBlcnJvciB0aGUgc2xvd2VyIHdlIGFkanVzdCBmb3IgaXQgdG8gYXZvaWQgcHJvYmxlbXMKLQkgKiB3aXRoIGxvc2luZyB0b28gbWFueSB0aWNrcywgb3RoZXJ3aXNlIHdlIHdvdWxkIG92ZXJhZGp1c3QgYW5kCi0JICogcHJvZHVjZSBhbiBldmVuIGxhcmdlciBlcnJvci4gIFRoZSBzbWFsbGVyIHRoZSBhZGp1c3RtZW50IHRoZQotCSAqIGZhc3RlciB3ZSB0cnkgdG8gYWRqdXN0IGZvciBpdCwgYXMgbG9zdCB0aWNrcyBjYW4gZG8gbGVzcyBoYXJtCi0JICogaGVyZS4gIFRoaXMgaXMgdHVuZWQgc28gdGhhdCBhbiBlcnJvciBvZiBhYm91dCAxIG1zZWMgaXMgYWR1c3RlZAotCSAqIHdpdGhpbiBhYm91dCAxIHNlYyAob3IgMl4yMCBuc2VjIGluIDJeU0hJRlRfSFogdGlja3MpLgotCSAqLwotCWVycm9yMiA9IGNsb2NrLT5lcnJvciA+PiAoVElDS19MRU5HVEhfU0hJRlQgKyAyMiAtIDIgKiBTSElGVF9IWik7Ci0JZXJyb3IyID0gYWJzKGVycm9yMik7Ci0JZm9yIChsb29rX2FoZWFkID0gMDsgZXJyb3IyID4gMDsgbG9va19haGVhZCsrKQotCQllcnJvcjIgPj49IDI7Ci0KLQkvKgotCSAqIE5vdyBjYWxjdWxhdGUgdGhlIGVycm9yIGluICgxIDw8IGxvb2tfYWhlYWQpIHRpY2tzLCBidXQgZmlyc3QKLQkgKiByZW1vdmUgdGhlIHNpbmdsZSBsb29rIGFoZWFkIGFscmVhZHkgaW5jbHVkZWQgaW4gdGhlIGVycm9yLgotCSAqLwotCXRpY2tfZXJyb3IgPSBjdXJyZW50X3RpY2tfbGVuZ3RoKCkgPj4KLQkJKFRJQ0tfTEVOR1RIX1NISUZUIC0gY2xvY2stPnNoaWZ0ICsgMSk7Ci0JdGlja19lcnJvciAtPSBjbG9jay0+eHRpbWVfaW50ZXJ2YWwgPj4gMTsKLQllcnJvciA9ICgoZXJyb3IgLSB0aWNrX2Vycm9yKSA+PiBsb29rX2FoZWFkKSArIHRpY2tfZXJyb3I7Ci0KLQkvKiBGaW5hbGx5IGNhbGN1bGF0ZSB0aGUgYWRqdXN0bWVudCBzaGlmdCB2YWx1ZS4gICovCi0JaSA9ICppbnRlcnZhbDsKLQltdWx0ID0gMTsKLQlpZiAoZXJyb3IgPCAwKSB7Ci0JCWVycm9yID0gLWVycm9yOwotCQkqaW50ZXJ2YWwgPSAtKmludGVydmFsOwotCQkqb2Zmc2V0ID0gLSpvZmZzZXQ7Ci0JCW11bHQgPSAtMTsKLQl9Ci0JZm9yIChhZGogPSAwOyBlcnJvciA+IGk7IGFkaisrKQotCQllcnJvciA+Pj0gMTsKLQotCSppbnRlcnZhbCA8PD0gYWRqOwotCSpvZmZzZXQgPDw9IGFkajsKLQlyZXR1cm4gbXVsdCA8PCBhZGo7Ci19Ci0KLS8qCi0gKiBBZGp1c3QgdGhlIG11bHRpcGxpZXIgdG8gcmVkdWNlIHRoZSBlcnJvciB2YWx1ZSwKLSAqIHRoaXMgaXMgb3B0aW1pemVkIGZvciB0aGUgbW9zdCBjb21tb24gYWRqdXN0bWVudHMgb2YgLTEsMCwxLAotICogZm9yIG90aGVyIHZhbHVlcyB3ZSBjYW4gZG8gYSBiaXQgbW9yZSB3b3JrLgotICovCi1zdGF0aWMgdm9pZCBjbG9ja3NvdXJjZV9hZGp1c3Qoc3RydWN0IGNsb2Nrc291cmNlICpjbG9jaywgczY0IG9mZnNldCkKLXsKLQlzNjQgZXJyb3IsIGludGVydmFsID0gY2xvY2stPmN5Y2xlX2ludGVydmFsOwotCWludCBhZGo7Ci0KLQllcnJvciA9IGNsb2NrLT5lcnJvciA+PiAoVElDS19MRU5HVEhfU0hJRlQgLSBjbG9jay0+c2hpZnQgLSAxKTsKLQlpZiAoZXJyb3IgPiBpbnRlcnZhbCkgewotCQllcnJvciA+Pj0gMjsKLQkJaWYgKGxpa2VseShlcnJvciA8PSBpbnRlcnZhbCkpCi0JCQlhZGogPSAxOwotCQllbHNlCi0JCQlhZGogPSBjbG9ja3NvdXJjZV9iaWdhZGp1c3QoZXJyb3IsICZpbnRlcnZhbCwgJm9mZnNldCk7Ci0JfSBlbHNlIGlmIChlcnJvciA8IC1pbnRlcnZhbCkgewotCQllcnJvciA+Pj0gMjsKLQkJaWYgKGxpa2VseShlcnJvciA+PSAtaW50ZXJ2YWwpKSB7Ci0JCQlhZGogPSAtMTsKLQkJCWludGVydmFsID0gLWludGVydmFsOwotCQkJb2Zmc2V0ID0gLW9mZnNldDsKLQkJfSBlbHNlCi0JCQlhZGogPSBjbG9ja3NvdXJjZV9iaWdhZGp1c3QoZXJyb3IsICZpbnRlcnZhbCwgJm9mZnNldCk7Ci0JfSBlbHNlCi0JCXJldHVybjsKLQotCWNsb2NrLT5tdWx0ICs9IGFkajsKLQljbG9jay0+eHRpbWVfaW50ZXJ2YWwgKz0gaW50ZXJ2YWw7Ci0JY2xvY2stPnh0aW1lX25zZWMgLT0gb2Zmc2V0OwotCWNsb2NrLT5lcnJvciAtPSAoaW50ZXJ2YWwgLSBvZmZzZXQpIDw8Ci0JCQkoVElDS19MRU5HVEhfU0hJRlQgLSBjbG9jay0+c2hpZnQpOwotfQotCi0vKioKLSAqIHVwZGF0ZV93YWxsX3RpbWUgLSBVc2VzIHRoZSBjdXJyZW50IGNsb2Nrc291cmNlIHRvIGluY3JlbWVudCB0aGUgd2FsbCB0aW1lCi0gKgotICogQ2FsbGVkIGZyb20gdGhlIHRpbWVyIGludGVycnVwdCwgbXVzdCBob2xkIGEgd3JpdGUgb24geHRpbWVfbG9jay4KLSAqLwotc3RhdGljIHZvaWQgdXBkYXRlX3dhbGxfdGltZSh2b2lkKQotewotCWN5Y2xlX3Qgb2Zmc2V0OwotCi0JLyogTWFrZSBzdXJlIHdlJ3JlIGZ1bGx5IHJlc3VtZWQ6ICovCi0JaWYgKHVubGlrZWx5KHRpbWVrZWVwaW5nX3N1c3BlbmRlZCkpCi0JCXJldHVybjsKLQotI2lmZGVmIENPTkZJR19HRU5FUklDX1RJTUUKLQlvZmZzZXQgPSAoY2xvY2tzb3VyY2VfcmVhZChjbG9jaykgLSBjbG9jay0+Y3ljbGVfbGFzdCkgJiBjbG9jay0+bWFzazsKLSNlbHNlCi0Jb2Zmc2V0ID0gY2xvY2stPmN5Y2xlX2ludGVydmFsOwotI2VuZGlmCi0JY2xvY2stPnh0aW1lX25zZWMgKz0gKHM2NCl4dGltZS50dl9uc2VjIDw8IGNsb2NrLT5zaGlmdDsKLQotCS8qIG5vcm1hbGx5IHRoaXMgbG9vcCB3aWxsIHJ1biBqdXN0IG9uY2UsIGhvd2V2ZXIgaW4gdGhlCi0JICogY2FzZSBvZiBsb3N0IG9yIGxhdGUgdGlja3MsIGl0IHdpbGwgYWNjdW11bGF0ZSBjb3JyZWN0bHkuCi0JICovCi0Jd2hpbGUgKG9mZnNldCA+PSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWwpIHsKLQkJLyogYWNjdW11bGF0ZSBvbmUgaW50ZXJ2YWwgKi8KLQkJY2xvY2stPnh0aW1lX25zZWMgKz0gY2xvY2stPnh0aW1lX2ludGVydmFsOwotCQljbG9jay0+Y3ljbGVfbGFzdCArPSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWw7Ci0JCW9mZnNldCAtPSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWw7Ci0KLQkJaWYgKGNsb2NrLT54dGltZV9uc2VjID49ICh1NjQpTlNFQ19QRVJfU0VDIDw8IGNsb2NrLT5zaGlmdCkgewotCQkJY2xvY2stPnh0aW1lX25zZWMgLT0gKHU2NClOU0VDX1BFUl9TRUMgPDwgY2xvY2stPnNoaWZ0OwotCQkJeHRpbWUudHZfc2VjKys7Ci0JCQlzZWNvbmRfb3ZlcmZsb3coKTsKLQkJfQotCi0JCS8qIGludGVycG9sYXRvciBiaXRzICovCi0JCXRpbWVfaW50ZXJwb2xhdG9yX3VwZGF0ZShjbG9jay0+eHRpbWVfaW50ZXJ2YWwKLQkJCQkJCT4+IGNsb2NrLT5zaGlmdCk7Ci0KLQkJLyogYWNjdW11bGF0ZSBlcnJvciBiZXR3ZWVuIE5UUCBhbmQgY2xvY2sgaW50ZXJ2YWwgKi8KLQkJY2xvY2stPmVycm9yICs9IGN1cnJlbnRfdGlja19sZW5ndGgoKTsKLQkJY2xvY2stPmVycm9yIC09IGNsb2NrLT54dGltZV9pbnRlcnZhbCA8PCAoVElDS19MRU5HVEhfU0hJRlQgLSBjbG9jay0+c2hpZnQpOwotCX0KLQotCS8qIGNvcnJlY3QgdGhlIGNsb2NrIHdoZW4gTlRQIGVycm9yIGlzIHRvbyBiaWcgKi8KLQljbG9ja3NvdXJjZV9hZGp1c3QoY2xvY2ssIG9mZnNldCk7Ci0KLQkvKiBzdG9yZSBmdWxsIG5hbm9zZWNvbmRzIGludG8geHRpbWUgKi8KLQl4dGltZS50dl9uc2VjID0gKHM2NCljbG9jay0+eHRpbWVfbnNlYyA+PiBjbG9jay0+c2hpZnQ7Ci0JY2xvY2stPnh0aW1lX25zZWMgLT0gKHM2NCl4dGltZS50dl9uc2VjIDw8IGNsb2NrLT5zaGlmdDsKLQotCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIG5ldyBjbG9ja3NvdXJjZSB0byB1c2UgKi8KLQljaGFuZ2VfY2xvY2tzb3VyY2UoKTsKLQl1cGRhdGVfdnN5c2NhbGwoJnh0aW1lLCBjbG9jayk7Ci19Ci0KIC8qCiAgKiBDYWxsZWQgZnJvbSB0aGUgdGltZXIgaW50ZXJydXB0IGhhbmRsZXIgdG8gY2hhcmdlIG9uZSB0aWNrIHRvIHRoZSBjdXJyZW50IAogICogcHJvY2Vzcy4gIHVzZXJfdGljayBpcyAxIGlmIHRoZSB0aWNrIGlzIHVzZXIgdGltZSwgMCBmb3Igc3lzdGVtLgpAQCAtMTI2NCwxNCArODY1LDYgQEAKIH0KIAogLyoKLSAqIFRoaXMgcmVhZC13cml0ZSBzcGlubG9jayBwcm90ZWN0cyB1cyBmcm9tIHJhY2VzIGluIFNNUCB3aGlsZQotICogcGxheWluZyB3aXRoIHh0aW1lIGFuZCBhdmVucnVuLgotICovCi1fX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NFUUxPQ0soeHRpbWVfbG9jayk7Ci0KLUVYUE9SVF9TWU1CT0woeHRpbWVfbG9jayk7Ci0KLS8qCiAgKiBUaGlzIGZ1bmN0aW9uIHJ1bnMgdGltZXJzIGFuZCB0aGUgdGltZXItdHEgaW4gYm90dG9tIGhhbGYgY29udGV4dC4KICAqLwogc3RhdGljIHZvaWQgcnVuX3RpbWVyX3NvZnRpcnEoc3RydWN0IHNvZnRpcnFfYWN0aW9uICpoKQpAQCAtMTYxNyw2ICsxMjEwLDEzIEBACiAJCQkJCQljcHVfdG9fbm9kZShjcHUpKTsKIAkJCWlmICghYmFzZSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJLyogTWFrZSBzdXJlIHRoYXQgdHZlY19iYXNlIGlzIDIgYnl0ZSBhbGlnbmVkICovCisJCQlpZiAodGJhc2VfZ2V0X2RlZmVycmFibGUoYmFzZSkpIHsKKwkJCQlXQVJOX09OKDEpOworCQkJCWtmcmVlKGJhc2UpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQogCQkJbWVtc2V0KGJhc2UsIDAsIHNpemVvZigqYmFzZSkpOwogCQkJcGVyX2NwdSh0dmVjX2Jhc2VzLCBjcHUpID0gYmFzZTsKIAkJfSBlbHNlIHsKQEAgLTE2NTYsOSArMTI1Niw5IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7Ci0JCXRpbWVyID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgdGltZXJfbGlzdCwgZW50cnkpOworCQl0aW1lciA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IHRpbWVyX2xpc3QsIGVudHJ5KTsKIAkJZGV0YWNoX3RpbWVyKHRpbWVyLCAwKTsKLQkJdGltZXItPmJhc2UgPSBuZXdfYmFzZTsKKwkJdGltZXJfc2V0X2Jhc2UodGltZXIsIG5ld19iYXNlKTsKIAkJaW50ZXJuYWxfYWRkX3RpbWVyKG5ld19iYXNlLCB0aW1lcik7CiAJfQogfQpAQCAtMTcwMSwxMSArMTMwMSwxMyBAQAogCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsKIAlzd2l0Y2goYWN0aW9uKSB7CiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKIAkJaWYgKGluaXRfdGltZXJzX2NwdShjcHUpIDwgMCkKIAkJCXJldHVybiBOT1RJRllfQkFEOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQltaWdyYXRlX3RpbWVycyhjcHUpOwogCQlicmVhazsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3VpZDE2LmMgYi9rZXJuZWwvdWlkMTYuYwppbmRleCAxODdlMmE0Li5kZDMwOGJhIDEwMDY0NAotLS0gYS9rZXJuZWwvdWlkMTYuYworKysgYi9rZXJuZWwvdWlkMTYuYwpAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvdXRzbmFtZS5jIGIva2VybmVsL3V0c25hbWUuYwppbmRleCBjODU5MTY0Li4xNjBjOGM1IDEwMDY0NAotLS0gYS9rZXJuZWwvdXRzbmFtZS5jCisrKyBiL2tlcm5lbC91dHNuYW1lLmMKQEAgLTMyLDU4ICszMiwyNSBAQAogfQogCiAvKgotICogdW5zaGFyZSB0aGUgY3VycmVudCBwcm9jZXNzJyB1dHNuYW1lIG5hbWVzcGFjZS4KLSAqIGNhbGxlZCBvbmx5IGluIHN5c191bnNoYXJlKCkKLSAqLwotaW50IHVuc2hhcmVfdXRzbmFtZSh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsIHN0cnVjdCB1dHNfbmFtZXNwYWNlICoqbmV3X3V0cykKLXsKLQlpZiAodW5zaGFyZV9mbGFncyAmIENMT05FX05FV1VUUykgewotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCi0JCSpuZXdfdXRzID0gY2xvbmVfdXRzX25zKGN1cnJlbnQtPm5zcHJveHktPnV0c19ucyk7Ci0JCWlmICghKm5ld191dHMpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIENvcHkgdGFzayB0c2sncyB1dHNuYW1lIG5hbWVzcGFjZSwgb3IgY2xvbmUgaXQgaWYgZmxhZ3MKICAqIHNwZWNpZmllcyBDTE9ORV9ORVdVVFMuICBJbiBsYXR0ZXIgY2FzZSwgY2hhbmdlcyB0byB0aGUKICAqIHV0c25hbWUgb2YgdGhpcyBwcm9jZXNzIHdvbid0IGJlIHNlZW4gYnkgcGFyZW50LCBhbmQgdmljZQogICogdmVyc2EuCiAgKi8KLWludCBjb3B5X3V0c25hbWUoaW50IGZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3N0cnVjdCB1dHNfbmFtZXNwYWNlICpjb3B5X3V0c25hbWUoaW50IGZsYWdzLCBzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqb2xkX25zKQogewotCXN0cnVjdCB1dHNfbmFtZXNwYWNlICpvbGRfbnMgPSB0c2stPm5zcHJveHktPnV0c19uczsKIAlzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqbmV3X25zOwotCWludCBlcnIgPSAwOwogCi0JaWYgKCFvbGRfbnMpCi0JCXJldHVybiAwOwotCisJQlVHX09OKCFvbGRfbnMpOwogCWdldF91dHNfbnMob2xkX25zKTsKIAogCWlmICghKGZsYWdzICYgQ0xPTkVfTkVXVVRTKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJZXJyID0gLUVQRVJNOwotCQlnb3RvIG91dDsKLQl9CisJCXJldHVybiBvbGRfbnM7CiAKIAluZXdfbnMgPSBjbG9uZV91dHNfbnMob2xkX25zKTsKLQlpZiAoIW5ld19ucykgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0JdHNrLT5uc3Byb3h5LT51dHNfbnMgPSBuZXdfbnM7CiAKLW91dDoKIAlwdXRfdXRzX25zKG9sZF9ucyk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gbmV3X25zOwogfQogCiB2b2lkIGZyZWVfdXRzX25zKHN0cnVjdCBrcmVmICprcmVmKQpkaWZmIC0tZ2l0IGEva2VybmVsL3dhaXQuYyBiL2tlcm5lbC93YWl0LmMKaW5kZXggNTlhODJmNi4uNDQ0ZGRiZiAxMDA2NDQKLS0tIGEva2VybmVsL3dhaXQuYworKysgYi9rZXJuZWwvd2FpdC5jCkBAIC02MSw3ICs2MSw3IEBACiAgKiBUaGUgc3Bpbl91bmxvY2soKSBpdHNlbGYgaXMgc2VtaS1wZXJtZWFibGUgYW5kIG9ubHkgcHJvdGVjdHMKICAqIG9uZSB3YXkgKGl0IG9ubHkgcHJvdGVjdHMgc3R1ZmYgaW5zaWRlIHRoZSBjcml0aWNhbCByZWdpb24gYW5kCiAgKiBzdG9wcyB0aGVtIGZyb20gYmxlZWRpbmcgb3V0IC0gaXQgd291bGQgc3RpbGwgYWxsb3cgc3Vic2VxdWVudAotICogbG9hZHMgdG8gbW92ZSBpbnRvIHRoZSB0aGUgY3JpdGljYWwgcmVnaW9uKS4KKyAqIGxvYWRzIHRvIG1vdmUgaW50byB0aGUgY3JpdGljYWwgcmVnaW9uKS4KICAqLwogdm9pZCBmYXN0Y2FsbAogcHJlcGFyZV90b193YWl0KHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKndhaXQsIGludCBzdGF0ZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCBiNmZhNWU2Li4zYmViZjczIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0zNiwzMCArMzYsMTkgQEAKIC8qCiAgKiBUaGUgcGVyLUNQVSB3b3JrcXVldWUgKGlmIHNpbmdsZSB0aHJlYWQsIHdlIGFsd2F5cyB1c2UgdGhlIGZpcnN0CiAgKiBwb3NzaWJsZSBjcHUpLgotICoKLSAqIFRoZSBzZXF1ZW5jZSBjb3VudGVycyBhcmUgZm9yIGZsdXNoX3NjaGVkdWxlZF93b3JrKCkuICBJdCB3YW50cyB0byB3YWl0Ci0gKiB1bnRpbCBhbGwgY3VycmVudGx5LXNjaGVkdWxlZCB3b3JrcyBhcmUgY29tcGxldGVkLCBidXQgaXQgZG9lc24ndAotICogd2FudCB0byBiZSBsaXZlbG9ja2VkIGJ5IG5ldywgaW5jb21pbmcgb25lcy4gIFNvIGl0IHdhaXRzIHVudGlsCi0gKiByZW1vdmVfc2VxdWVuY2UgaXMgPj0gdGhlIGluc2VydF9zZXF1ZW5jZSB3aGljaCBwZXJ0YWluZWQgd2hlbgotICogZmx1c2hfc2NoZWR1bGVkX3dvcmsoKSB3YXMgY2FsbGVkLgogICovCiBzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgewogCiAJc3BpbmxvY2tfdCBsb2NrOwogCi0JbG9uZyByZW1vdmVfc2VxdWVuY2U7CS8qIExlYXN0LXJlY2VudGx5IGFkZGVkIChuZXh0IHRvIHJ1bikgKi8KLQlsb25nIGluc2VydF9zZXF1ZW5jZTsJLyogTmV4dCB0byBhZGQgKi8KLQogCXN0cnVjdCBsaXN0X2hlYWQgd29ya2xpc3Q7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgbW9yZV93b3JrOwotCXdhaXRfcXVldWVfaGVhZF90IHdvcmtfZG9uZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmN1cnJlbnRfd29yazsKIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKIAogCWludCBydW5fZGVwdGg7CQkvKiBEZXRlY3QgcnVuX3dvcmtxdWV1ZSgpIHJlY3Vyc2lvbiBkZXB0aCAqLwotCi0JaW50IGZyZWV6ZWFibGU7CQkvKiBGcmVlemUgdGhlIHRocmVhZCBkdXJpbmcgc3VzcGVuZCAqLwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKIC8qCkBAIC02OCw4ICs1NywxMCBAQAogICovCiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCB7CiAJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjcHVfd3E7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWNvbnN0IGNoYXIgKm5hbWU7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAJLyogRW1wdHkgaWYgc2luZ2xlIHRocmVhZCAqLworCWludCBzaW5nbGV0aHJlYWQ7CisJaW50IGZyZWV6ZWFibGU7CQkvKiBGcmVlemUgdGhyZWFkcyBkdXJpbmcgc3VzcGVuZCAqLwogfTsKIAogLyogQWxsIHRoZSBwZXItY3B1IHdvcmtxdWV1ZXMgb24gdGhlIHN5c3RlbSwgZm9yIGhvdHBsdWcgY3B1IHRvIGFkZC9yZW1vdmUKQEAgLTc3LDEwNyArNjgsNzUgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgod29ya3F1ZXVlX211dGV4KTsKIHN0YXRpYyBMSVNUX0hFQUQod29ya3F1ZXVlcyk7CiAKLXN0YXRpYyBpbnQgc2luZ2xldGhyZWFkX2NwdTsKK3N0YXRpYyBpbnQgc2luZ2xldGhyZWFkX2NwdSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGNwdW1hc2tfdCBjcHVfc2luZ2xldGhyZWFkX21hcCBfX3JlYWRfbW9zdGx5OworLyoKKyAqIF9jcHVfZG93bigpIGZpcnN0IHJlbW92ZXMgQ1BVIGZyb20gY3B1X29ubGluZV9tYXAsIHRoZW4gQ1BVX0RFQUQKKyAqIGZsdXNoZXMgY3dxLT53b3JrbGlzdC4gVGhpcyBtZWFucyB0aGF0IGZsdXNoX3dvcmtxdWV1ZS93YWl0X29uX3dvcmsKKyAqIHdoaWNoIGNvbWVzIGluIGJldHdlZW4gY2FuJ3QgdXNlIGZvcl9lYWNoX29ubGluZV9jcHUoKS4gV2UgY291bGQKKyAqIHVzZSBjcHVfcG9zc2libGVfbWFwLCB0aGUgY3B1bWFzayBiZWxvdyBpcyBtb3JlIGEgZG9jdW1lbnRhdGlvbgorICogdGhhbiBvcHRpbWl6YXRpb24uCisgKi8KK3N0YXRpYyBjcHVtYXNrX3QgY3B1X3BvcHVsYXRlZF9tYXAgX19yZWFkX21vc3RseTsKIAogLyogSWYgaXQncyBzaW5nbGUgdGhyZWFkZWQsIGl0IGlzbid0IGluIHRoZSBsaXN0IG9mIHdvcmtxdWV1ZXMuICovCiBzdGF0aWMgaW5saW5lIGludCBpc19zaW5nbGVfdGhyZWFkZWQoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKQogewotCXJldHVybiBsaXN0X2VtcHR5KCZ3cS0+bGlzdCk7CisJcmV0dXJuIHdxLT5zaW5nbGV0aHJlYWQ7Cit9CisKK3N0YXRpYyBjb25zdCBjcHVtYXNrX3QgKndxX2NwdV9tYXAoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKQoreworCXJldHVybiBpc19zaW5nbGVfdGhyZWFkZWQod3EpCisJCT8gJmNwdV9zaW5nbGV0aHJlYWRfbWFwIDogJmNwdV9wb3B1bGF0ZWRfbWFwOworfQorCitzdGF0aWMKK3N0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqd3FfcGVyX2NwdShzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsIGludCBjcHUpCit7CisJaWYgKHVubGlrZWx5KGlzX3NpbmdsZV90aHJlYWRlZCh3cSkpKQorCQljcHUgPSBzaW5nbGV0aHJlYWRfY3B1OworCXJldHVybiBwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpOwogfQogCiAvKgogICogU2V0IHRoZSB3b3JrcXVldWUgb24gd2hpY2ggYSB3b3JrIGl0ZW0gaXMgdG8gYmUgcnVuCiAgKiAtIE11c3QgKm9ubHkqIGJlIGNhbGxlZCBpZiB0aGUgcGVuZGluZyBmbGFnIGlzIHNldAogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3dxX2RhdGEoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrLCB2b2lkICp3cSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfd3FfZGF0YShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssCisJCQkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EpCiB7CiAJdW5zaWduZWQgbG9uZyBuZXc7CiAKIAlCVUdfT04oIXdvcmtfcGVuZGluZyh3b3JrKSk7CiAKLQluZXcgPSAodW5zaWduZWQgbG9uZykgd3EgfCAoMVVMIDw8IFdPUktfU1RSVUNUX1BFTkRJTkcpOworCW5ldyA9ICh1bnNpZ25lZCBsb25nKSBjd3EgfCAoMVVMIDw8IFdPUktfU1RSVUNUX1BFTkRJTkcpOwogCW5ldyB8PSBXT1JLX1NUUlVDVF9GTEFHX01BU0sgJiAqd29ya19kYXRhX2JpdHMod29yayk7CiAJYXRvbWljX2xvbmdfc2V0KCZ3b3JrLT5kYXRhLCBuZXcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmdldF93cV9kYXRhKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqZ2V0X3dxX2RhdGEoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXJldHVybiAodm9pZCAqKSAoYXRvbWljX2xvbmdfcmVhZCgmd29yay0+ZGF0YSkgJiBXT1JLX1NUUlVDVF9XUV9EQVRBX01BU0spOwogfQogCi1zdGF0aWMgaW50IF9fcnVuX3dvcmsoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGluc2VydF93b3JrKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxLAorCQkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaywgaW50IHRhaWwpCiB7Ci0JaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjd3EtPmxvY2ssIGZsYWdzKTsKKwlzZXRfd3FfZGF0YSh3b3JrLCBjd3EpOwogCS8qCi0JICogV2UgbmVlZCB0byByZS12YWxpZGF0ZSB0aGUgd29yayBpbmZvIGFmdGVyIHdlJ3ZlIGdvdHRlbgotCSAqIHRoZSBjcHVfd29ya3F1ZXVlIGxvY2suIFdlIGNhbiBydW4gdGhlIHdvcmsgbm93IGlmZjoKLQkgKgotCSAqICAtIHRoZSB3cV9kYXRhIHN0aWxsIG1hdGNoZXMgdGhlIGNwdV93b3JrcXVldWVfc3RydWN0Ci0JICogIC0gQU5EIHRoZSB3b3JrIGlzIHN0aWxsIG1hcmtlZCBwZW5kaW5nCi0JICogIC0gQU5EIHRoZSB3b3JrIGlzIHN0aWxsIG9uIGEgbGlzdCAod2hpY2ggd2lsbCBiZSB0aGlzCi0JICogICAgd29ya3F1ZXVlX3N0cnVjdCBsaXN0KQotCSAqCi0JICogQWxsIHRoZXNlIGNvbmRpdGlvbnMgYXJlIGltcG9ydGFudCwgYmVjYXVzZSB3ZQotCSAqIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoZSB3b3JrIGJlaW5nIHJ1biByaWdodAotCSAqIG5vdyBvbiBhbm90aGVyIENQVSAoYWxsIGJ1dCB0aGUgbGFzdCBvbmUgbWlnaHQgYmUKLQkgKiB0cnVlIGlmIGl0J3MgY3VycmVudGx5IHJ1bm5pbmcgYW5kIGhhcyBub3QgYmVlbgotCSAqIHJlbGVhc2VkIHlldCwgZm9yIGV4YW1wbGUpLgorCSAqIEVuc3VyZSB0aGF0IHdlIGdldCB0aGUgcmlnaHQgd29yay0+ZGF0YSBpZiB3ZSBzZWUgdGhlCisJICogcmVzdWx0IG9mIGxpc3RfYWRkKCkgYmVsb3csIHNlZSB0cnlfdG9fZ3JhYl9wZW5kaW5nKCkuCiAJICovCi0JaWYgKGdldF93cV9kYXRhKHdvcmspID09IGN3cQotCSAgICAmJiB3b3JrX3BlbmRpbmcod29yaykKLQkgICAgJiYgIWxpc3RfZW1wdHkoJndvcmstPmVudHJ5KSkgewotCQl3b3JrX2Z1bmNfdCBmID0gd29yay0+ZnVuYzsKLQkJbGlzdF9kZWxfaW5pdCgmd29yay0+ZW50cnkpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjd3EtPmxvY2ssIGZsYWdzKTsKLQotCQlpZiAoIXRlc3RfYml0KFdPUktfU1RSVUNUX05PQVVUT1JFTCwgd29ya19kYXRhX2JpdHMod29yaykpKQotCQkJd29ya19yZWxlYXNlKHdvcmspOwotCQlmKHdvcmspOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjd3EtPmxvY2ssIGZsYWdzKTsKLQkJY3dxLT5yZW1vdmVfc2VxdWVuY2UrKzsKLQkJd2FrZV91cCgmY3dxLT53b3JrX2RvbmUpOwotCQlyZXQgPSAxOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjd3EtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OworCXNtcF93bWIoKTsKKwlpZiAodGFpbCkKKwkJbGlzdF9hZGRfdGFpbCgmd29yay0+ZW50cnksICZjd3EtPndvcmtsaXN0KTsKKwllbHNlCisJCWxpc3RfYWRkKCZ3b3JrLT5lbnRyeSwgJmN3cS0+d29ya2xpc3QpOworCXdha2VfdXAoJmN3cS0+bW9yZV93b3JrKTsKIH0KIAotLyoqCi0gKiBydW5fc2NoZWR1bGVkX3dvcmsgLSBydW4gc2NoZWR1bGVkIHdvcmsgc3luY2hyb25vdXNseQotICogQHdvcms6IHdvcmsgdG8gcnVuCi0gKgotICogVGhpcyBjaGVja3MgaWYgdGhlIHdvcmsgd2FzIHBlbmRpbmcsIGFuZCBydW5zIGl0Ci0gKiBzeW5jaHJvbm91c2x5IGlmIHNvLiBJdCByZXR1cm5zIGEgYm9vbGVhbiB0byBpbmRpY2F0ZQotICogd2hldGhlciBpdCBoYWQgYW55IHNjaGVkdWxlZCB3b3JrIHRvIHJ1biBvciBub3QuCi0gKgotICogTk9URSEgVGhpcyBfb25seV8gd29ya3MgZm9yIG5vcm1hbCB3b3JrX3N0cnVjdHMuIFlvdQotICogQ0FOTk9UIHVzZSB0aGlzIGZvciBkZWxheWVkIHdvcmssIGJlY2F1c2UgdGhlIHdxIGRhdGEKLSAqIGZvciBkZWxheWVkIHdvcmsgd2lsbCBub3QgcG9pbnQgcHJvcGVybHkgdG8gdGhlIHBlci0KLSAqIENQVSB3b3JrcXVldWUgc3RydWN0LCBidXQgd2lsbCBjaGFuZ2UhCi0gKi8KLWludCBmYXN0Y2FsbCBydW5fc2NoZWR1bGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCWZvciAoOzspIHsKLQkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3E7Ci0KLQkJaWYgKCF3b3JrX3BlbmRpbmcod29yaykpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKGxpc3RfZW1wdHkoJndvcmstPmVudHJ5KSkKLQkJCXJldHVybiAwOwotCQkvKiBOT1RFISBUaGlzIGRlcGVuZHMgaW50aW1hdGVseSBvbiBfX3F1ZXVlX3dvcmshICovCi0JCWN3cSA9IGdldF93cV9kYXRhKHdvcmspOwotCQlpZiAoIWN3cSkKLQkJCXJldHVybiAwOwotCQlpZiAoX19ydW5fd29yayhjd3EsIHdvcmspKQotCQkJcmV0dXJuIDE7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChydW5fc2NoZWR1bGVkX3dvcmspOwotCiAvKiBQcmVlbXB0IG11c3QgYmUgZGlzYWJsZWQuICovCiBzdGF0aWMgdm9pZCBfX3F1ZXVlX3dvcmsoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EsCiAJCQkgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMTg1LDEwICsxNDQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3dxLT5sb2NrLCBmbGFncyk7Ci0Jc2V0X3dxX2RhdGEod29yaywgY3dxKTsKLQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5lbnRyeSwgJmN3cS0+d29ya2xpc3QpOwotCWN3cS0+aW5zZXJ0X3NlcXVlbmNlKys7Ci0Jd2FrZV91cCgmY3dxLT5tb3JlX3dvcmspOworCWluc2VydF93b3JrKGN3cSwgd29yaywgMSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3dxLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTIwNCwxNiArMTYwLDE0IEBACiAgKi8KIGludCBmYXN0Y2FsbCBxdWV1ZV93b3JrKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCByZXQgPSAwLCBjcHUgPSBnZXRfY3B1KCk7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV09SS19TVFJVQ1RfUEVORElORywgd29ya19kYXRhX2JpdHMod29yaykpKSB7Ci0JCWlmICh1bmxpa2VseShpc19zaW5nbGVfdGhyZWFkZWQod3EpKSkKLQkJCWNwdSA9IHNpbmdsZXRocmVhZF9jcHU7CiAJCUJVR19PTighbGlzdF9lbXB0eSgmd29yay0+ZW50cnkpKTsKLQkJX19xdWV1ZV93b3JrKHBlcl9jcHVfcHRyKHdxLT5jcHVfd3EsIGNwdSksIHdvcmspOworCQlfX3F1ZXVlX3dvcmsod3FfcGVyX2NwdSh3cSwgZ2V0X2NwdSgpKSwgd29yayk7CisJCXB1dF9jcHUoKTsKIAkJcmV0ID0gMTsKIAl9Ci0JcHV0X2NwdSgpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV93b3JrKTsKQEAgLTIyMSwxMyArMTc1LDEwIEBACiB2b2lkIGRlbGF5ZWRfd29ya190aW1lcl9mbih1bnNpZ25lZCBsb25nIF9fZGF0YSkKIHsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IChzdHJ1Y3QgZGVsYXllZF93b3JrICopX19kYXRhOwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSA9IGdldF93cV9kYXRhKCZkd29yay0+d29yayk7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSA9IGdldF93cV9kYXRhKCZkd29yay0+d29yayk7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxID0gY3dxLT53cTsKIAotCWlmICh1bmxpa2VseShpc19zaW5nbGVfdGhyZWFkZWQod3EpKSkKLQkJY3B1ID0gc2luZ2xldGhyZWFkX2NwdTsKLQotCV9fcXVldWVfd29yayhwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpLCAmZHdvcmstPndvcmspOworCV9fcXVldWVfd29yayh3cV9wZXJfY3B1KHdxLCBzbXBfcHJvY2Vzc29yX2lkKCkpLCAmZHdvcmstPndvcmspOwogfQogCiAvKioKQEAgLTI0MSwyNyArMTkyLDExIEBACiBpbnQgZmFzdGNhbGwgcXVldWVfZGVsYXllZF93b3JrKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSwKIAkJCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrLCB1bnNpZ25lZCBsb25nIGRlbGF5KQogewotCWludCByZXQgPSAwOwotCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZkd29yay0+dGltZXI7Ci0Jc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrID0gJmR3b3JrLT53b3JrOwotCi0JdGltZXJfc3RhdHNfdGltZXJfc2V0X3N0YXJ0X2luZm8odGltZXIpOworCXRpbWVyX3N0YXRzX3RpbWVyX3NldF9zdGFydF9pbmZvKCZkd29yay0+dGltZXIpOwogCWlmIChkZWxheSA9PSAwKQotCQlyZXR1cm4gcXVldWVfd29yayh3cSwgd29yayk7CisJCXJldHVybiBxdWV1ZV93b3JrKHdxLCAmZHdvcmstPndvcmspOwogCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKSkgewotCQlCVUdfT04odGltZXJfcGVuZGluZyh0aW1lcikpOwotCQlCVUdfT04oIWxpc3RfZW1wdHkoJndvcmstPmVudHJ5KSk7Ci0KLQkJLyogVGhpcyBzdG9yZXMgd3EgZm9yIHRoZSBtb21lbnQsIGZvciB0aGUgdGltZXJfZm4gKi8KLQkJc2V0X3dxX2RhdGEod29yaywgd3EpOwotCQl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBkZWxheTsKLQkJdGltZXItPmRhdGEgPSAodW5zaWduZWQgbG9uZylkd29yazsKLQkJdGltZXItPmZ1bmN0aW9uID0gZGVsYXllZF93b3JrX3RpbWVyX2ZuOwotCQlhZGRfdGltZXIodGltZXIpOwotCQlyZXQgPSAxOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBxdWV1ZV9kZWxheWVkX3dvcmtfb24oLTEsIHdxLCBkd29yaywgZGVsYXkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocXVldWVfZGVsYXllZF93b3JrKTsKIApAQCAtMjg1LDEyICsyMjAsMTYgQEAKIAkJQlVHX09OKHRpbWVyX3BlbmRpbmcodGltZXIpKTsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZ3b3JrLT5lbnRyeSkpOwogCi0JCS8qIFRoaXMgc3RvcmVzIHdxIGZvciB0aGUgbW9tZW50LCBmb3IgdGhlIHRpbWVyX2ZuICovCi0JCXNldF93cV9kYXRhKHdvcmssIHdxKTsKKwkJLyogVGhpcyBzdG9yZXMgY3dxIGZvciB0aGUgbW9tZW50LCBmb3IgdGhlIHRpbWVyX2ZuICovCisJCXNldF93cV9kYXRhKHdvcmssIHdxX3Blcl9jcHUod3EsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpKTsKIAkJdGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgZGVsYXk7CiAJCXRpbWVyLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZHdvcms7CiAJCXRpbWVyLT5mdW5jdGlvbiA9IGRlbGF5ZWRfd29ya190aW1lcl9mbjsKLQkJYWRkX3RpbWVyX29uKHRpbWVyLCBjcHUpOworCisJCWlmICh1bmxpa2VseShjcHUgPj0gMCkpCisJCQlhZGRfdGltZXJfb24odGltZXIsIGNwdSk7CisJCWVsc2UKKwkJCWFkZF90aW1lcih0aW1lcik7CiAJCXJldCA9IDE7CiAJfQogCXJldHVybiByZXQ7CkBAIC0yOTksMTMgKzIzOCw3IEBACiAKIHN0YXRpYyB2b2lkIHJ1bl93b3JrcXVldWUoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qCi0JICogS2VlcCB0YWtpbmcgb2ZmIHdvcmsgZnJvbSB0aGUgcXVldWUgdW50aWwKLQkgKiBkb25lLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZjd3EtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZjd3EtPmxvY2spOwogCWN3cS0+cnVuX2RlcHRoKys7CiAJaWYgKGN3cS0+cnVuX2RlcHRoID4gMykgewogCQkvKiBtb3J0b24gZ2V0cyB0byBlYXQgaGlzIGhhdCAqLwpAQCAtMzE4LDEyICsyNTEsMTIgQEAKIAkJCQkJCXN0cnVjdCB3b3JrX3N0cnVjdCwgZW50cnkpOwogCQl3b3JrX2Z1bmNfdCBmID0gd29yay0+ZnVuYzsKIAorCQljd3EtPmN1cnJlbnRfd29yayA9IHdvcms7CiAJCWxpc3RfZGVsX2luaXQoY3dxLT53b3JrbGlzdC5uZXh0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3dxLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmY3dxLT5sb2NrKTsKIAogCQlCVUdfT04oZ2V0X3dxX2RhdGEod29yaykgIT0gY3dxKTsKLQkJaWYgKCF0ZXN0X2JpdChXT1JLX1NUUlVDVF9OT0FVVE9SRUwsIHdvcmtfZGF0YV9iaXRzKHdvcmspKSkKLQkJCXdvcmtfcmVsZWFzZSh3b3JrKTsKKwkJd29ya19jbGVhcl9wZW5kaW5nKHdvcmspOwogCQlmKHdvcmspOwogCiAJCWlmICh1bmxpa2VseShpbl9hdG9taWMoKSB8fCBsb2NrZGVwX2RlcHRoKGN1cnJlbnQpID4gMCkpIHsKQEAgLTMzNyw4OCArMjcwLDkxIEBACiAJCQlkdW1wX3N0YWNrKCk7CiAJCX0KIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3dxLT5sb2NrLCBmbGFncyk7Ci0JCWN3cS0+cmVtb3ZlX3NlcXVlbmNlKys7Ci0JCXdha2VfdXAoJmN3cS0+d29ya19kb25lKTsKKwkJc3Bpbl9sb2NrX2lycSgmY3dxLT5sb2NrKTsKKwkJY3dxLT5jdXJyZW50X3dvcmsgPSBOVUxMOwogCX0KIAljd3EtPnJ1bl9kZXB0aC0tOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN3cS0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmY3dxLT5sb2NrKTsKIH0KIAogc3RhdGljIGludCB3b3JrZXJfdGhyZWFkKHZvaWQgKl9fY3dxKQogewogCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gX19jd3E7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0Jc3RydWN0IGtfc2lnYWN0aW9uIHNhOwotCXNpZ3NldF90IGJsb2NrZWQ7CisJREVGSU5FX1dBSVQod2FpdCk7CiAKLQlpZiAoIWN3cS0+ZnJlZXplYWJsZSkKKwlpZiAoIWN3cS0+d3EtPmZyZWV6ZWFibGUpCiAJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOwogCiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAtNSk7CiAKLQkvKiBCbG9jayBhbmQgZmx1c2ggYWxsIHNpZ25hbHMgKi8KLQlzaWdmaWxsc2V0KCZibG9ja2VkKTsKLQlzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZibG9ja2VkLCBOVUxMKTsKLQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOwotCi0JLyoKLQkgKiBXZSBpbmhlcml0ZWQgTVBPTF9JTlRFUkxFQVZFIGZyb20gdGhlIGJvb3Rpbmcga2VybmVsLgotCSAqIFNldCBNUE9MX0RFRkFVTFQgdG8gaW5zdXJlIG5vZGUgbG9jYWwgYWxsb2NhdGlvbnMuCi0JICovCi0JbnVtYV9kZWZhdWx0X3BvbGljeSgpOwotCi0JLyogU0lHX0lHTiBtYWtlcyBjaGlsZHJlbiBhdXRvcmVhcDogc2VlIGRvX25vdGlmeV9wYXJlbnQoKS4gKi8KLQlzYS5zYS5zYV9oYW5kbGVyID0gU0lHX0lHTjsKLQlzYS5zYS5zYV9mbGFncyA9IDA7Ci0Jc2lnaW5pdHNldCgmc2Euc2Euc2FfbWFzaywgc2lnbWFzayhTSUdDSExEKSk7Ci0JZG9fc2lnYWN0aW9uKFNJR0NITEQsICZzYSwgKHN0cnVjdCBrX3NpZ2FjdGlvbiAqKTApOwotCi0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQlpZiAoY3dxLT5mcmVlemVhYmxlKQotCQkJdHJ5X3RvX2ZyZWV6ZSgpOwotCi0JCWFkZF93YWl0X3F1ZXVlKCZjd3EtPm1vcmVfd29yaywgJndhaXQpOwotCQlpZiAobGlzdF9lbXB0eSgmY3dxLT53b3JrbGlzdCkpCisJZm9yICg7OykgeworCQlwcmVwYXJlX3RvX3dhaXQoJmN3cS0+bW9yZV93b3JrLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKCFmcmVlemluZyhjdXJyZW50KSAmJgorCQkgICAgIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJgorCQkgICAgbGlzdF9lbXB0eSgmY3dxLT53b3JrbGlzdCkpCiAJCQlzY2hlZHVsZSgpOwotCQllbHNlCi0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZjd3EtPm1vcmVfd29yaywgJndhaXQpOworCQlmaW5pc2hfd2FpdCgmY3dxLT5tb3JlX3dvcmssICZ3YWl0KTsKIAotCQlpZiAoIWxpc3RfZW1wdHkoJmN3cS0+d29ya2xpc3QpKQotCQkJcnVuX3dvcmtxdWV1ZShjd3EpOwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQl0cnlfdG9fZnJlZXplKCk7CisKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWJyZWFrOworCisJCXJ1bl93b3JrcXVldWUoY3dxKTsKIAl9Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGZsdXNoX2NwdV93b3JrcXVldWUoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EpCitzdHJ1Y3Qgd3FfYmFycmllciB7CisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJc3RydWN0IGNvbXBsZXRpb24JZG9uZTsKK307CisKK3N0YXRpYyB2b2lkIHdxX2JhcnJpZXJfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CisJc3RydWN0IHdxX2JhcnJpZXIgKmJhcnIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdxX2JhcnJpZXIsIHdvcmspOworCWNvbXBsZXRlKCZiYXJyLT5kb25lKTsKK30KKworc3RhdGljIHZvaWQgaW5zZXJ0X3dxX2JhcnJpZXIoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EsCisJCQkJCXN0cnVjdCB3cV9iYXJyaWVyICpiYXJyLCBpbnQgdGFpbCkKK3sKKwlJTklUX1dPUksoJmJhcnItPndvcmssIHdxX2JhcnJpZXJfZnVuYyk7CisJX19zZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKCZiYXJyLT53b3JrKSk7CisKKwlpbml0X2NvbXBsZXRpb24oJmJhcnItPmRvbmUpOworCisJaW5zZXJ0X3dvcmsoY3dxLCAmYmFyci0+d29yaywgdGFpbCk7Cit9CisKK3N0YXRpYyBpbnQgZmx1c2hfY3B1X3dvcmtxdWV1ZShzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSkKK3sKKwlpbnQgYWN0aXZlOworCiAJaWYgKGN3cS0+dGhyZWFkID09IGN1cnJlbnQpIHsKIAkJLyoKIAkJICogUHJvYmFibHkga2V2ZW50ZCB0cnlpbmcgdG8gZmx1c2ggaXRzIG93biBxdWV1ZS4gU28gc2ltcGx5IHJ1bgogCQkgKiBpdCBieSBoYW5kIHJhdGhlciB0aGFuIGRlYWRsb2NraW5nLgogCQkgKi8KIAkJcnVuX3dvcmtxdWV1ZShjd3EpOworCQlhY3RpdmUgPSAxOwogCX0gZWxzZSB7Ci0JCURFRklORV9XQUlUKHdhaXQpOwotCQlsb25nIHNlcXVlbmNlX25lZWRlZDsKKwkJc3RydWN0IHdxX2JhcnJpZXIgYmFycjsKIAorCQlhY3RpdmUgPSAwOwogCQlzcGluX2xvY2tfaXJxKCZjd3EtPmxvY2spOwotCQlzZXF1ZW5jZV9uZWVkZWQgPSBjd3EtPmluc2VydF9zZXF1ZW5jZTsKLQotCQl3aGlsZSAoc2VxdWVuY2VfbmVlZGVkIC0gY3dxLT5yZW1vdmVfc2VxdWVuY2UgPiAwKSB7Ci0JCQlwcmVwYXJlX3RvX3dhaXQoJmN3cS0+d29ya19kb25lLCAmd2FpdCwKLQkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZjd3EtPmxvY2spOwotCQkJc2NoZWR1bGUoKTsKLQkJCXNwaW5fbG9ja19pcnEoJmN3cS0+bG9jayk7CisJCWlmICghbGlzdF9lbXB0eSgmY3dxLT53b3JrbGlzdCkgfHwgY3dxLT5jdXJyZW50X3dvcmsgIT0gTlVMTCkgeworCQkJaW5zZXJ0X3dxX2JhcnJpZXIoY3dxLCAmYmFyciwgMSk7CisJCQlhY3RpdmUgPSAxOwogCQl9Ci0JCWZpbmlzaF93YWl0KCZjd3EtPndvcmtfZG9uZSwgJndhaXQpOwogCQlzcGluX3VubG9ja19pcnEoJmN3cS0+bG9jayk7CisKKwkJaWYgKGFjdGl2ZSkKKwkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJhcnIuZG9uZSk7CiAJfQorCisJcmV0dXJuIGFjdGl2ZTsKIH0KIAogLyoqCkBAIC00MjgsMTUxICszNjQsMTQ1IEBACiAgKiBGb3JjZXMgZXhlY3V0aW9uIG9mIHRoZSB3b3JrcXVldWUgYW5kIGJsb2NrcyB1bnRpbCBpdHMgY29tcGxldGlvbi4KICAqIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgaW4gZHJpdmVyIHNodXRkb3duIGhhbmRsZXJzLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzYW1wbGUgZWFjaCB3b3JrcXVldWUncyBjdXJyZW50IGluc2VydF9zZXF1ZW5jZSBudW1iZXIgYW5kCi0gKiB3aWxsIHNsZWVwIHVudGlsIHRoZSBoZWFkIHNlcXVlbmNlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGF0LiAgVGhpcwotICogbWVhbnMgdGhhdCB3ZSBzbGVlcCB1bnRpbCBhbGwgd29ya3Mgd2hpY2ggd2VyZSBxdWV1ZWQgb24gZW50cnkgaGF2ZSBiZWVuCi0gKiBoYW5kbGVkLCBidXQgd2UgYXJlIG5vdCBsaXZlbG9ja2VkIGJ5IG5ldyBpbmNvbWluZyBvbmVzLgorICogV2Ugc2xlZXAgdW50aWwgYWxsIHdvcmtzIHdoaWNoIHdlcmUgcXVldWVkIG9uIGVudHJ5IGhhdmUgYmVlbiBoYW5kbGVkLAorICogYnV0IHdlIGFyZSBub3QgbGl2ZWxvY2tlZCBieSBuZXcgaW5jb21pbmcgb25lcy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gcnVuIHRoZSB3b3JrcXVldWVzIGl0c2VsZi4gIE5vdyB3ZSBqdXN0IHdhaXQgZm9yIHRoZQogICogaGVscGVyIHRocmVhZHMgdG8gZG8gaXQuCiAgKi8KIHZvaWQgZmFzdGNhbGwgZmx1c2hfd29ya3F1ZXVlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSkKIHsKKwljb25zdCBjcHVtYXNrX3QgKmNwdV9tYXAgPSB3cV9jcHVfbWFwKHdxKTsKKwlpbnQgY3B1OworCiAJbWlnaHRfc2xlZXAoKTsKLQotCWlmIChpc19zaW5nbGVfdGhyZWFkZWQod3EpKSB7Ci0JCS8qIEFsd2F5cyB1c2UgZmlyc3QgY3B1J3MgYXJlYS4gKi8KLQkJZmx1c2hfY3B1X3dvcmtxdWV1ZShwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBzaW5nbGV0aHJlYWRfY3B1KSk7Ci0JfSBlbHNlIHsKLQkJaW50IGNwdTsKLQotCQltdXRleF9sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJCWZsdXNoX2NwdV93b3JrcXVldWUocGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KSk7Ci0JCW11dGV4X3VubG9jaygmd29ya3F1ZXVlX211dGV4KTsKLQl9CisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCAqY3B1X21hcCkKKwkJZmx1c2hfY3B1X3dvcmtxdWV1ZShwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZsdXNoX3dvcmtxdWV1ZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNyZWF0ZV93b3JrcXVldWVfdGhyZWFkKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSwKLQkJCQkJCSAgIGludCBjcHUsIGludCBmcmVlemVhYmxlKQotewotCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gcGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0KLQlzcGluX2xvY2tfaW5pdCgmY3dxLT5sb2NrKTsKLQljd3EtPndxID0gd3E7Ci0JY3dxLT50aHJlYWQgPSBOVUxMOwotCWN3cS0+aW5zZXJ0X3NlcXVlbmNlID0gMDsKLQljd3EtPnJlbW92ZV9zZXF1ZW5jZSA9IDA7Ci0JY3dxLT5mcmVlemVhYmxlID0gZnJlZXplYWJsZTsKLQlJTklUX0xJU1RfSEVBRCgmY3dxLT53b3JrbGlzdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmY3dxLT5tb3JlX3dvcmspOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN3cS0+d29ya19kb25lKTsKLQotCWlmIChpc19zaW5nbGVfdGhyZWFkZWQod3EpKQotCQlwID0ga3RocmVhZF9jcmVhdGUod29ya2VyX3RocmVhZCwgY3dxLCAiJXMiLCB3cS0+bmFtZSk7Ci0JZWxzZQotCQlwID0ga3RocmVhZF9jcmVhdGUod29ya2VyX3RocmVhZCwgY3dxLCAiJXMvJWQiLCB3cS0+bmFtZSwgY3B1KTsKLQlpZiAoSVNfRVJSKHApKQotCQlyZXR1cm4gTlVMTDsKLQljd3EtPnRocmVhZCA9IHA7Ci0JcmV0dXJuIHA7Ci19Ci0KLXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpfX2NyZWF0ZV93b3JrcXVldWUoY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJICAgIGludCBzaW5nbGV0aHJlYWQsIGludCBmcmVlemVhYmxlKQotewotCWludCBjcHUsIGRlc3Ryb3kgPSAwOwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0KLQl3cSA9IGt6YWxsb2Moc2l6ZW9mKCp3cSksIEdGUF9LRVJORUwpOwotCWlmICghd3EpCi0JCXJldHVybiBOVUxMOwotCi0Jd3EtPmNwdV93cSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QpOwotCWlmICghd3EtPmNwdV93cSkgewotCQlrZnJlZSh3cSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXdxLT5uYW1lID0gbmFtZTsKLQltdXRleF9sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOwotCWlmIChzaW5nbGV0aHJlYWQpIHsKLQkJSU5JVF9MSVNUX0hFQUQoJndxLT5saXN0KTsKLQkJcCA9IGNyZWF0ZV93b3JrcXVldWVfdGhyZWFkKHdxLCBzaW5nbGV0aHJlYWRfY3B1LCBmcmVlemVhYmxlKTsKLQkJaWYgKCFwKQotCQkJZGVzdHJveSA9IDE7Ci0JCWVsc2UKLQkJCXdha2VfdXBfcHJvY2VzcyhwKTsKLQl9IGVsc2UgewotCQlsaXN0X2FkZCgmd3EtPmxpc3QsICZ3b3JrcXVldWVzKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJCXAgPSBjcmVhdGVfd29ya3F1ZXVlX3RocmVhZCh3cSwgY3B1LCBmcmVlemVhYmxlKTsKLQkJCWlmIChwKSB7Ci0JCQkJa3RocmVhZF9iaW5kKHAsIGNwdSk7Ci0JCQkJd2FrZV91cF9wcm9jZXNzKHApOwotCQkJfSBlbHNlCi0JCQkJZGVzdHJveSA9IDE7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOwotCi0JLyoKLQkgKiBXYXMgdGhlcmUgYW55IGVycm9yIGR1cmluZyBzdGFydHVwPyBJZiB5ZXMgdGhlbiBjbGVhbiB1cDoKLQkgKi8KLQlpZiAoZGVzdHJveSkgewotCQlkZXN0cm95X3dvcmtxdWV1ZSh3cSk7Ci0JCXdxID0gTlVMTDsKLQl9Ci0JcmV0dXJuIHdxOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoX19jcmVhdGVfd29ya3F1ZXVlKTsKLQotc3RhdGljIHZvaWQgY2xlYW51cF93b3JrcXVldWVfdGhyZWFkKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSwgaW50IGNwdSkKKy8qCisgKiBVcG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4sIHRoZSBjYWxsZXIgIm93bnMiIFdPUktfU1RSVUNUX1BFTkRJTkcgYml0LAorICogc28gdGhpcyB3b3JrIGNhbid0IGJlIHJlLWFybWVkIGluIGFueSB3YXkuCisgKi8KK3N0YXRpYyBpbnQgdHJ5X3RvX2dyYWJfcGVuZGluZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3E7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJaW50IHJldCA9IDA7CiAKLQljd3EgPSBwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjd3EtPmxvY2ssIGZsYWdzKTsKLQlwID0gY3dxLT50aHJlYWQ7Ci0JY3dxLT50aHJlYWQgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN3cS0+bG9jaywgZmxhZ3MpOwotCWlmIChwKQotCQlrdGhyZWFkX3N0b3AocCk7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIFRoZSBxdWV1ZWluZyBpcyBpbiBwcm9ncmVzcywgb3IgaXQgaXMgYWxyZWFkeSBxdWV1ZWQuIFRyeSB0bworCSAqIHN0ZWFsIGl0IGZyb20gLT53b3JrbGlzdCB3aXRob3V0IGNsZWFyaW5nIFdPUktfU1RSVUNUX1BFTkRJTkcuCisJICovCisKKwljd3EgPSBnZXRfd3FfZGF0YSh3b3JrKTsKKwlpZiAoIWN3cSkKKwkJcmV0dXJuIHJldDsKKworCXNwaW5fbG9ja19pcnEoJmN3cS0+bG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZ3b3JrLT5lbnRyeSkpIHsKKwkJLyoKKwkJICogVGhpcyB3b3JrIGlzIHF1ZXVlZCwgYnV0IHBlcmhhcHMgd2UgbG9ja2VkIHRoZSB3cm9uZyBjd3EuCisJCSAqIEluIHRoYXQgY2FzZSB3ZSBtdXN0IHNlZSB0aGUgbmV3IHZhbHVlIGFmdGVyIHJtYigpLCBzZWUKKwkJICogaW5zZXJ0X3dvcmsoKS0+d21iKCkuCisJCSAqLworCQlzbXBfcm1iKCk7CisJCWlmIChjd3EgPT0gZ2V0X3dxX2RhdGEod29yaykpIHsKKwkJCWxpc3RfZGVsX2luaXQoJndvcmstPmVudHJ5KTsKKwkJCXJldCA9IDE7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZjd3EtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd2FpdF9vbl9jcHVfd29yayhzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSwKKwkJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdxX2JhcnJpZXIgYmFycjsKKwlpbnQgcnVubmluZyA9IDA7CisKKwlzcGluX2xvY2tfaXJxKCZjd3EtPmxvY2spOworCWlmICh1bmxpa2VseShjd3EtPmN1cnJlbnRfd29yayA9PSB3b3JrKSkgeworCQlpbnNlcnRfd3FfYmFycmllcihjd3EsICZiYXJyLCAwKTsKKwkJcnVubmluZyA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmY3dxLT5sb2NrKTsKKworCWlmICh1bmxpa2VseShydW5uaW5nKSkKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmYmFyci5kb25lKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9vbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisJY29uc3QgY3B1bWFza190ICpjcHVfbWFwOworCWludCBjcHU7CisKKwltaWdodF9zbGVlcCgpOworCisJY3dxID0gZ2V0X3dxX2RhdGEod29yayk7CisJaWYgKCFjd3EpCisJCXJldHVybjsKKworCXdxID0gY3dxLT53cTsKKwljcHVfbWFwID0gd3FfY3B1X21hcCh3cSk7CisKKwlmb3JfZWFjaF9jcHVfbWFzayhjcHUsICpjcHVfbWFwKQorCQl3YWl0X29uX2NwdV93b3JrKHBlcl9jcHVfcHRyKHdxLT5jcHVfd3EsIGNwdSksIHdvcmspOwogfQogCiAvKioKLSAqIGRlc3Ryb3lfd29ya3F1ZXVlIC0gc2FmZWx5IHRlcm1pbmF0ZSBhIHdvcmtxdWV1ZQotICogQHdxOiB0YXJnZXQgd29ya3F1ZXVlCisgKiBjYW5jZWxfd29ya19zeW5jIC0gYmxvY2sgdW50aWwgYSB3b3JrX3N0cnVjdCdzIGNhbGxiYWNrIGhhcyB0ZXJtaW5hdGVkCisgKiBAd29yazogdGhlIHdvcmsgd2hpY2ggaXMgdG8gYmUgZmx1c2hlZAogICoKLSAqIFNhZmVseSBkZXN0cm95IGEgd29ya3F1ZXVlLiBBbGwgd29yayBjdXJyZW50bHkgcGVuZGluZyB3aWxsIGJlIGRvbmUgZmlyc3QuCisgKiBjYW5jZWxfd29ya19zeW5jKCkgd2lsbCBjYW5jZWwgdGhlIHdvcmsgaWYgaXQgaXMgcXVldWVkLiBJZiB0aGUgd29yaydzCisgKiBjYWxsYmFjayBhcHBlYXJzIHRvIGJlIHJ1bm5pbmcsIGNhbmNlbF93b3JrX3N5bmMoKSB3aWxsIGJsb2NrIHVudGlsIGl0CisgKiBoYXMgY29tcGxldGVkLgorICoKKyAqIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGlmIHRoZSB3b3JrIHJlLXF1ZXVlcyBpdHNlbGYuIEl0IGNhbgorICogY2FuY2VsIHRoZSB3b3JrIGV2ZW4gaWYgaXQgbWlncmF0ZXMgdG8gYW5vdGhlciB3b3JrcXVldWUsIGhvd2V2ZXIgaW4gdGhhdAorICogY2FzZSBpdCBvbmx5IGd1YXJhbnRlZXMgdGhhdCB3b3JrLT5mdW5jKCkgaGFzIGNvbXBsZXRlZCBvbiB0aGUgbGFzdCBxdWV1ZWQKKyAqIHdvcmtxdWV1ZS4KKyAqCisgKiBjYW5jZWxfd29ya19zeW5jKCZkZWxheWVkX3dvcmstPndvcmspIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgLT50aW1lciBpcyBub3QKKyAqIHBlbmRpbmcsIG90aGVyd2lzZSBpdCBnb2VzIGludG8gYSBidXN5LXdhaXQgbG9vcCB1bnRpbCB0aGUgdGltZXIgZXhwaXJlcy4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgd29ya3F1ZXVlX3N0cnVjdCBvbiB3aGljaCB0aGlzIHdvcmsgd2FzIGxhc3QKKyAqIHF1ZXVlZCBjYW4ndCBiZSBkZXN0cm95ZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KICAqLwotdm9pZCBkZXN0cm95X3dvcmtxdWV1ZShzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpCit2b2lkIGNhbmNlbF93b3JrX3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBjcHU7Ci0KLQlmbHVzaF93b3JrcXVldWUod3EpOwotCi0JLyogV2UgZG9uJ3QgbmVlZCB0aGUgZGlzdHJhY3Rpb24gb2YgQ1BVcyBhcHBlYXJpbmcgYW5kIHZhbmlzaGluZy4gKi8KLQltdXRleF9sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOwotCWlmIChpc19zaW5nbGVfdGhyZWFkZWQod3EpKQotCQljbGVhbnVwX3dvcmtxdWV1ZV90aHJlYWQod3EsIHNpbmdsZXRocmVhZF9jcHUpOwotCWVsc2UgewotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJCWNsZWFudXBfd29ya3F1ZXVlX3RocmVhZCh3cSwgY3B1KTsKLQkJbGlzdF9kZWwoJndxLT5saXN0KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOwotCWZyZWVfcGVyY3B1KHdxLT5jcHVfd3EpOwotCWtmcmVlKHdxKTsKKwl3aGlsZSAoIXRyeV90b19ncmFiX3BlbmRpbmcod29yaykpCisJCWNwdV9yZWxheCgpOworCXdhaXRfb25fd29yayh3b3JrKTsKKwl3b3JrX2NsZWFyX3BlbmRpbmcod29yayk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChkZXN0cm95X3dvcmtxdWV1ZSk7CitFWFBPUlRfU1lNQk9MX0dQTChjYW5jZWxfd29ya19zeW5jKTsKIAotc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprZXZlbnRkX3dxOworLyoqCisgKiBjYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrIC0gcmVsaWFibHkga2lsbCBvZmYgYSBkZWxheWVkIHdvcmsuCisgKiBAZHdvcms6IHRoZSBkZWxheWVkIHdvcmsgc3RydWN0CisgKgorICogSXQgaXMgcG9zc2libGUgdG8gdXNlIHRoaXMgZnVuY3Rpb24gaWYgQGR3b3JrIHJlYXJtcyBpdHNlbGYgdmlhIHF1ZXVlX3dvcmsoKQorICogb3IgcXVldWVfZGVsYXllZF93b3JrKCkuIFNlZSBhbHNvIHRoZSBjb21tZW50IGZvciBjYW5jZWxfd29ya19zeW5jKCkuCisgKi8KK3ZvaWQgY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yayhzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaykKK3sKKwl3aGlsZSAoIWRlbF90aW1lcigmZHdvcmstPnRpbWVyKSAmJgorCSAgICAgICAhdHJ5X3RvX2dyYWJfcGVuZGluZygmZHdvcmstPndvcmspKQorCQljcHVfcmVsYXgoKTsKKwl3YWl0X29uX3dvcmsoJmR3b3JrLT53b3JrKTsKKwl3b3JrX2NsZWFyX3BlbmRpbmcoJmR3b3JrLT53b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yayk7CisKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2V2ZW50ZF93cSBfX3JlYWRfbW9zdGx5OwogCiAvKioKICAqIHNjaGVkdWxlX3dvcmsgLSBwdXQgd29yayB0YXNrIGluIGdsb2JhbCB3b3JrcXVldWUKQEAgLTYzOCw3ICs1NjgsNyBAQAogCWlmICghd29ya3MpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbXV0ZXhfbG9jaygmd29ya3F1ZXVlX211dGV4KTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsJCS8qIENQVSBob3RwbHVnICovCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrID0gcGVyX2NwdV9wdHIod29ya3MsIGNwdSk7CiAKQEAgLTY0Niw3ICs1NzYsNyBAQAogCQlzZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKTsKIAkJX19xdWV1ZV93b3JrKHBlcl9jcHVfcHRyKGtldmVudGRfd3EtPmNwdV93cSwgY3B1KSwgd29yayk7CiAJfQotCW11dGV4X3VubG9jaygmd29ya3F1ZXVlX211dGV4KTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogCWZsdXNoX3dvcmtxdWV1ZShrZXZlbnRkX3dxKTsKIAlmcmVlX3BlcmNwdSh3b3Jrcyk7CiAJcmV0dXJuIDA7CkBAIC02NTksMjkgKzU4OSw2IEBACiBFWFBPUlRfU1lNQk9MKGZsdXNoX3NjaGVkdWxlZF93b3JrKTsKIAogLyoqCi0gKiBjYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUgLSByZWxpYWJseSBraWxsIG9mZiBhIGRlbGF5ZWQgd29yayB3aG9zZSBoYW5kbGVyIHJlYXJtcyB0aGUgZGVsYXllZCB3b3JrLgotICogQHdxOiAgIHRoZSBjb250cm9sbGluZyB3b3JrcXVldWUgc3RydWN0dXJlCi0gKiBAZHdvcms6IHRoZSBkZWxheWVkIHdvcmsgc3RydWN0Ci0gKi8KLXZvaWQgY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSwKLQkJCQkgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmspCi17Ci0Jd2hpbGUgKCFjYW5jZWxfZGVsYXllZF93b3JrKGR3b3JrKSkKLQkJZmx1c2hfd29ya3F1ZXVlKHdxKTsKLX0KLUVYUE9SVF9TWU1CT0woY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKTsKLQotLyoqCi0gKiBjYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrIC0gcmVsaWFibHkga2lsbCBvZmYgYSBkZWxheWVkIGtldmVudGQgd29yayB3aG9zZSBoYW5kbGVyIHJlYXJtcyB0aGUgZGVsYXllZCB3b3JrLgotICogQGR3b3JrOiB0aGUgZGVsYXllZCB3b3JrIHN0cnVjdAotICovCi12b2lkIGNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmspCi17Ci0JY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKGtldmVudGRfd3EsIGR3b3JrKTsKLX0KLUVYUE9SVF9TWU1CT0woY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yayk7Ci0KLS8qKgogICogZXhlY3V0ZV9pbl9wcm9jZXNzX2NvbnRleHQgLSByZWxpYWJseSBleGVjdXRlIHRoZSByb3V0aW5lIHdpdGggdXNlciBjb250ZXh0CiAgKiBAZm46CQl0aGUgZnVuY3Rpb24gdG8gZXhlY3V0ZQogICogQGV3OgkJZ3VhcmFudGVlZCBzdG9yYWdlIGZvciB0aGUgZXhlY3V0ZSB3b3JrIHN0cnVjdHVyZSAobXVzdApAQCAtNzI4LDk0ICs2MzUsMjA2IEBACiAKIH0KIAotLyogVGFrZSB0aGUgd29yayBmcm9tIHRoaXMgKGRvd25lZCkgQ1BVLiAqLwotc3RhdGljIHZvaWQgdGFrZV9vdmVyX3dvcmsoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLCB1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqCitpbml0X2NwdV93b3JrcXVldWUoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLCBpbnQgY3B1KQogewogCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gcGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOwogCi0Jc3Bpbl9sb2NrX2lycSgmY3dxLT5sb2NrKTsKLQlsaXN0X3JlcGxhY2VfaW5pdCgmY3dxLT53b3JrbGlzdCwgJmxpc3QpOworCWN3cS0+d3EgPSB3cTsKKwlzcGluX2xvY2tfaW5pdCgmY3dxLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY3dxLT53b3JrbGlzdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY3dxLT5tb3JlX3dvcmspOwogCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZsaXN0KSkgewotCQlwcmludGsoIlRha2luZyB3b3JrIGZvciAlc1xuIiwgd3EtPm5hbWUpOwotCQl3b3JrID0gbGlzdF9lbnRyeShsaXN0Lm5leHQsc3RydWN0IHdvcmtfc3RydWN0LGVudHJ5KTsKLQkJbGlzdF9kZWwoJndvcmstPmVudHJ5KTsKLQkJX19xdWV1ZV93b3JrKHBlcl9jcHVfcHRyKHdxLT5jcHVfd3EsIHNtcF9wcm9jZXNzb3JfaWQoKSksIHdvcmspOwotCX0KLQlzcGluX3VubG9ja19pcnEoJmN3cS0+bG9jayk7CisJcmV0dXJuIGN3cTsKIH0KIAotLyogV2UncmUgaG9sZGluZyB0aGUgY3B1Y29udHJvbCBtdXRleCBoZXJlICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3b3JrcXVldWVfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAotCQkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sCi0JCQkJICB2b2lkICpoY3B1KQorc3RhdGljIGludCBjcmVhdGVfd29ya3F1ZXVlX3RocmVhZChzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSwgaW50IGNwdSkKIHsKLQl1bnNpZ25lZCBpbnQgaG90Y3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EgPSBjd3EtPndxOworCWNvbnN0IGNoYXIgKmZtdCA9IGlzX3NpbmdsZV90aHJlYWRlZCh3cSkgPyAiJXMiIDogIiVzLyVkIjsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisKKwlwID0ga3RocmVhZF9jcmVhdGUod29ya2VyX3RocmVhZCwgY3dxLCBmbXQsIHdxLT5uYW1lLCBjcHUpOworCS8qCisJICogTm9ib2R5IGNhbiBhZGQgdGhlIHdvcmtfc3RydWN0IHRvIHRoaXMgY3dxLAorCSAqCWlmIChjYWxsZXIgaXMgX19jcmVhdGVfd29ya3F1ZXVlKQorCSAqCQlub2JvZHkgc2hvdWxkIHNlZSB0aGlzIHdxCisJICoJZWxzZSAvLyBjYWxsZXIgaXMgQ1BVX1VQX1BSRVBBUkUKKwkgKgkJY3B1IGlzIG5vdCBvbiBjcHVfb25saW5lX21hcAorCSAqIHNvIHdlIGNhbiBhYm9ydCBzYWZlbHkuCisJICovCisJaWYgKElTX0VSUihwKSkKKwkJcmV0dXJuIFBUUl9FUlIocCk7CisKKwljd3EtPnRocmVhZCA9IHA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfd29ya3F1ZXVlX3RocmVhZChzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjd3EtPnRocmVhZDsKKworCWlmIChwICE9IE5VTEwpIHsKKwkJaWYgKGNwdSA+PSAwKQorCQkJa3RocmVhZF9iaW5kKHAsIGNwdSk7CisJCXdha2VfdXBfcHJvY2VzcyhwKTsKKwl9Cit9CisKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpfX2NyZWF0ZV93b3JrcXVldWUoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICAgIGludCBzaW5nbGV0aHJlYWQsIGludCBmcmVlemVhYmxlKQoreworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cTsKKwlpbnQgZXJyID0gMCwgY3B1OworCisJd3EgPSBremFsbG9jKHNpemVvZigqd3EpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdxKQorCQlyZXR1cm4gTlVMTDsKKworCXdxLT5jcHVfd3EgPSBhbGxvY19wZXJjcHUoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0KTsKKwlpZiAoIXdxLT5jcHVfd3EpIHsKKwkJa2ZyZWUod3EpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl3cS0+bmFtZSA9IG5hbWU7CisJd3EtPnNpbmdsZXRocmVhZCA9IHNpbmdsZXRocmVhZDsKKwl3cS0+ZnJlZXplYWJsZSA9IGZyZWV6ZWFibGU7CisJSU5JVF9MSVNUX0hFQUQoJndxLT5saXN0KTsKKworCWlmIChzaW5nbGV0aHJlYWQpIHsKKwkJY3dxID0gaW5pdF9jcHVfd29ya3F1ZXVlKHdxLCBzaW5nbGV0aHJlYWRfY3B1KTsKKwkJZXJyID0gY3JlYXRlX3dvcmtxdWV1ZV90aHJlYWQoY3dxLCBzaW5nbGV0aHJlYWRfY3B1KTsKKwkJc3RhcnRfd29ya3F1ZXVlX3RocmVhZChjd3EsIC0xKTsKKwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOworCQlsaXN0X2FkZCgmd3EtPmxpc3QsICZ3b3JrcXVldWVzKTsKKworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCQljd3EgPSBpbml0X2NwdV93b3JrcXVldWUod3EsIGNwdSk7CisJCQlpZiAoZXJyIHx8ICFjcHVfb25saW5lKGNwdSkpCisJCQkJY29udGludWU7CisJCQllcnIgPSBjcmVhdGVfd29ya3F1ZXVlX3RocmVhZChjd3EsIGNwdSk7CisJCQlzdGFydF93b3JrcXVldWVfdGhyZWFkKGN3cSwgY3B1KTsKKwkJfQorCQltdXRleF91bmxvY2soJndvcmtxdWV1ZV9tdXRleCk7CisJfQorCisJaWYgKGVycikgeworCQlkZXN0cm95X3dvcmtxdWV1ZSh3cSk7CisJCXdxID0gTlVMTDsKKwl9CisJcmV0dXJuIHdxOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19jcmVhdGVfd29ya3F1ZXVlKTsKKworc3RhdGljIHZvaWQgY2xlYW51cF93b3JrcXVldWVfdGhyZWFkKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxLCBpbnQgY3B1KQoreworCS8qCisJICogT3VyIGNhbGxlciBpcyBlaXRoZXIgZGVzdHJveV93b3JrcXVldWUoKSBvciBDUFVfREVBRCwKKwkgKiB3b3JrcXVldWVfbXV0ZXggcHJvdGVjdHMgY3dxLT50aHJlYWQKKwkgKi8KKwlpZiAoY3dxLT50aHJlYWQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgY2FsbGVyIGlzIENQVV9ERUFEIHRoZSBzaW5nbGUgZmx1c2hfY3B1X3dvcmtxdWV1ZSgpCisJICogaXMgbm90IGVub3VnaCwgYSBjb25jdXJyZW50IGZsdXNoX3dvcmtxdWV1ZSgpIGNhbiBpbnNlcnQgYQorCSAqIGJhcnJpZXIgYWZ0ZXIgdXMuCisJICogV2hlbiAtPndvcmtsaXN0IGJlY29tZXMgZW1wdHkgaXQgaXMgc2FmZSB0byBleGl0IGJlY2F1c2Ugbm8KKwkgKiBtb3JlIHdvcmtfc3RydWN0cyBjYW4gYmUgcXVldWVkIG9uIHRoaXMgY3dxOiBmbHVzaF93b3JrcXVldWUKKwkgKiBjaGVja3MgbGlzdF9lbXB0eSgpLCBhbmQgYSAibm9ybWFsIiBxdWV1ZV93b3JrKCkgY2FuJ3QgdXNlCisJICogYSBkZWFkIENQVS4KKwkgKi8KKwl3aGlsZSAoZmx1c2hfY3B1X3dvcmtxdWV1ZShjd3EpKQorCQk7CisKKwlrdGhyZWFkX3N0b3AoY3dxLT50aHJlYWQpOworCWN3cS0+dGhyZWFkID0gTlVMTDsKK30KKworLyoqCisgKiBkZXN0cm95X3dvcmtxdWV1ZSAtIHNhZmVseSB0ZXJtaW5hdGUgYSB3b3JrcXVldWUKKyAqIEB3cTogdGFyZ2V0IHdvcmtxdWV1ZQorICoKKyAqIFNhZmVseSBkZXN0cm95IGEgd29ya3F1ZXVlLiBBbGwgd29yayBjdXJyZW50bHkgcGVuZGluZyB3aWxsIGJlIGRvbmUgZmlyc3QuCisgKi8KK3ZvaWQgZGVzdHJveV93b3JrcXVldWUoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKQoreworCWNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCA9IHdxX2NwdV9tYXAod3EpOworCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxOworCWludCBjcHU7CisKKwltdXRleF9sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOworCWxpc3RfZGVsKCZ3cS0+bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOworCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCAqY3B1X21hcCkgeworCQljd3EgPSBwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpOworCQljbGVhbnVwX3dvcmtxdWV1ZV90aHJlYWQoY3dxLCBjcHUpOworCX0KKworCWZyZWVfcGVyY3B1KHdxLT5jcHVfd3EpOworCWtmcmVlKHdxKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRlc3Ryb3lfd29ya3F1ZXVlKTsKKworc3RhdGljIGludCBfX2RldmluaXQgd29ya3F1ZXVlX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQkJCQkJdm9pZCAqaGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAKKwlhY3Rpb24gJj0gfkNQVV9UQVNLU19GUk9aRU47CisKIAlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX0xPQ0tfQUNRVUlSRToKKwkJbXV0ZXhfbG9jaygmd29ya3F1ZXVlX211dGV4KTsKKwkJcmV0dXJuIE5PVElGWV9PSzsKKworCWNhc2UgQ1BVX0xPQ0tfUkVMRUFTRToKKwkJbXV0ZXhfdW5sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOworCQlyZXR1cm4gTk9USUZZX09LOworCiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKLQkJbXV0ZXhfbG9jaygmd29ya3F1ZXVlX211dGV4KTsKLQkJLyogQ3JlYXRlIGEgbmV3IHdvcmtxdWV1ZSB0aHJlYWQgZm9yIGl0LiAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdxLCAmd29ya3F1ZXVlcywgbGlzdCkgewotCQkJaWYgKCFjcmVhdGVfd29ya3F1ZXVlX3RocmVhZCh3cSwgaG90Y3B1LCAwKSkgewotCQkJCXByaW50aygid29ya3F1ZXVlIGZvciAlaSBmYWlsZWRcbiIsIGhvdGNwdSk7Ci0JCQkJcmV0dXJuIE5PVElGWV9CQUQ7Ci0JCQl9CisJCWNwdV9zZXQoY3B1LCBjcHVfcG9wdWxhdGVkX21hcCk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3cSwgJndvcmtxdWV1ZXMsIGxpc3QpIHsKKwkJY3dxID0gcGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KTsKKworCQlzd2l0Y2ggKGFjdGlvbikgeworCQljYXNlIENQVV9VUF9QUkVQQVJFOgorCQkJaWYgKCFjcmVhdGVfd29ya3F1ZXVlX3RocmVhZChjd3EsIGNwdSkpCisJCQkJYnJlYWs7CisJCQlwcmludGsoS0VSTl9FUlIgIndvcmtxdWV1ZSBmb3IgJWkgZmFpbGVkXG4iLCBjcHUpOworCQkJcmV0dXJuIE5PVElGWV9CQUQ7CisKKwkJY2FzZSBDUFVfT05MSU5FOgorCQkJc3RhcnRfd29ya3F1ZXVlX3RocmVhZChjd3EsIGNwdSk7CisJCQlicmVhazsKKworCQljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwkJCXN0YXJ0X3dvcmtxdWV1ZV90aHJlYWQoY3dxLCAtMSk7CisJCWNhc2UgQ1BVX0RFQUQ6CisJCQljbGVhbnVwX3dvcmtxdWV1ZV90aHJlYWQoY3dxLCBjcHUpOworCQkJYnJlYWs7CiAJCX0KLQkJYnJlYWs7Ci0KLQljYXNlIENQVV9PTkxJTkU6Ci0JCS8qIEtpY2sgb2ZmIHdvcmtlciB0aHJlYWRzLiAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdxLCAmd29ya3F1ZXVlcywgbGlzdCkgewotCQkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3E7Ci0KLQkJCWN3cSA9IHBlcl9jcHVfcHRyKHdxLT5jcHVfd3EsIGhvdGNwdSk7Ci0JCQlrdGhyZWFkX2JpbmQoY3dxLT50aHJlYWQsIGhvdGNwdSk7Ci0JCQl3YWtlX3VwX3Byb2Nlc3MoY3dxLT50aHJlYWQpOwotCQl9Ci0JCW11dGV4X3VubG9jaygmd29ya3F1ZXVlX211dGV4KTsKLQkJYnJlYWs7Ci0KLQljYXNlIENQVV9VUF9DQU5DRUxFRDoKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3cSwgJndvcmtxdWV1ZXMsIGxpc3QpIHsKLQkJCWlmICghcGVyX2NwdV9wdHIod3EtPmNwdV93cSwgaG90Y3B1KS0+dGhyZWFkKQotCQkJCWNvbnRpbnVlOwotCQkJLyogVW5iaW5kIHNvIGl0IGNhbiBydW4uICovCi0JCQlrdGhyZWFkX2JpbmQocGVyX2NwdV9wdHIod3EtPmNwdV93cSwgaG90Y3B1KS0+dGhyZWFkLAotCQkJCSAgICAgYW55X29ubGluZV9jcHUoY3B1X29ubGluZV9tYXApKTsKLQkJCWNsZWFudXBfd29ya3F1ZXVlX3RocmVhZCh3cSwgaG90Y3B1KTsKLQkJfQotCQltdXRleF91bmxvY2soJndvcmtxdWV1ZV9tdXRleCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgotCQltdXRleF9sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOwotCQlicmVhazsKLQotCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgotCQltdXRleF91bmxvY2soJndvcmtxdWV1ZV9tdXRleCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBDUFVfREVBRDoKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3cSwgJndvcmtxdWV1ZXMsIGxpc3QpCi0JCQljbGVhbnVwX3dvcmtxdWV1ZV90aHJlYWQod3EsIGhvdGNwdSk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkod3EsICZ3b3JrcXVldWVzLCBsaXN0KQotCQkJdGFrZV9vdmVyX3dvcmsod3EsIGhvdGNwdSk7Ci0JCW11dGV4X3VubG9jaygmd29ya3F1ZXVlX211dGV4KTsKLQkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotdm9pZCBpbml0X3dvcmtxdWV1ZXModm9pZCkKK3ZvaWQgX19pbml0IGluaXRfd29ya3F1ZXVlcyh2b2lkKQogeworCWNwdV9wb3B1bGF0ZWRfbWFwID0gY3B1X29ubGluZV9tYXA7CiAJc2luZ2xldGhyZWFkX2NwdSA9IGZpcnN0X2NwdShjcHVfcG9zc2libGVfbWFwKTsKKwljcHVfc2luZ2xldGhyZWFkX21hcCA9IGNwdW1hc2tfb2ZfY3B1KHNpbmdsZXRocmVhZF9jcHUpOwogCWhvdGNwdV9ub3RpZmllcih3b3JrcXVldWVfY3B1X2NhbGxiYWNrLCAwKTsKIAlrZXZlbnRkX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgiZXZlbnRzIik7CiAJQlVHX09OKCFrZXZlbnRkX3dxKTsKIH0KLQpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCA5NmQ2ZThjLi4yZTdhZTZiIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAtMjMsNiArMjMsMTQgQEAKIAkgIHRoZSBrZXJuZWwgdHJlZSBkb2VzLiBTdWNoIG1vZHVsZXMgdGhhdCB1c2UgbGlicmFyeSBDUkMxNgogCSAgZnVuY3Rpb25zIHJlcXVpcmUgTSBoZXJlLgogCitjb25maWcgQ1JDX0lUVV9UCisJdHJpc3RhdGUgIkNSQyBJVFUtVCBWLjQxIGZ1bmN0aW9ucyIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBpcyBwcm92aWRlZCBmb3IgdGhlIGNhc2Ugd2hlcmUgbm8gaW4ta2VybmVsLXRyZWUKKwkgIG1vZHVsZXMgcmVxdWlyZSBDUkMgSVRVLVQgVi40MSBmdW5jdGlvbnMsIGJ1dCBhIG1vZHVsZSBidWlsdCBvdXRzaWRlCisJICB0aGUga2VybmVsIHRyZWUgZG9lcy4gU3VjaCBtb2R1bGVzIHRoYXQgdXNlIGxpYnJhcnkgQ1JDIElUVS1UIFYuNDEKKwkgIGZ1bmN0aW9ucyByZXF1aXJlIE0gaGVyZS4KKwogY29uZmlnIENSQzMyCiAJdHJpc3RhdGUgIkNSQzMyIGZ1bmN0aW9ucyIKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggOWEyODc3OS4uZGE5NWUxMCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTg2LDIzICs4Niw2IEBACiAJICBEcml2ZXJzIG91Z2h0IHRvIGJlIGFibGUgdG8gaGFuZGxlIGludGVycnVwdHMgY29taW5nIGluIGF0IHRob3NlCiAJICBwb2ludHM7IHNvbWUgZG9uJ3QgYW5kIG5lZWQgdG8gYmUgY2F1Z2h0LgogCi1jb25maWcgTE9HX0JVRl9TSElGVAotCWludCAiS2VybmVsIGxvZyBidWZmZXIgc2l6ZSAoMTYgPT4gNjRLQiwgMTcgPT4gMTI4S0IpIiBpZiBERUJVR19LRVJORUwKLQlyYW5nZSAxMiAyMQotCWRlZmF1bHQgMTcgaWYgUzM5MCB8fCBMT0NLREVQCi0JZGVmYXVsdCAxNiBpZiBYODZfTlVNQVEgfHwgSUE2NAotCWRlZmF1bHQgMTUgaWYgU01QCi0JZGVmYXVsdCAxNAotCWhlbHAKLQkgIFNlbGVjdCBrZXJuZWwgbG9nIGJ1ZmZlciBzaXplIGFzIGEgcG93ZXIgb2YgMi4KLQkgIERlZmF1bHRzIGFuZCBFeGFtcGxlczoKLQkgIAkgICAgIDE3ID0+IDEyOCBLQiBmb3IgUy8zOTAKLQkJICAgICAxNiA9PiA2NCBLQiBmb3IgeDg2IE5VTUFRIG9yIElBLTY0Ci0JICAgICAgICAgICAgIDE1ID0+IDMyIEtCIGZvciBTTVAKLQkgICAgICAgICAgICAgMTQgPT4gMTYgS0IgZm9yIHVuaXByb2Nlc3NvcgotCQkgICAgIDEzID0+ICA4IEtCCi0JCSAgICAgMTIgPT4gIDQgS0IKLQogY29uZmlnIERFVEVDVF9TT0ZUTE9DS1VQCiAJYm9vbCAiRGV0ZWN0IFNvZnQgTG9ja3VwcyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiAhUzM5MApAQCAtMTQzLDcgKzEyNiwxMCBAQAogCSAgcmVwcm9ncmFtbWVkLiBUaGUgc3RhdGlzdGljcyBjYW4gYmUgcmVhZCBmcm9tIC9wcm9jL3RpbWVyX3N0YXRzLgogCSAgVGhlIHN0YXRpc3RpY3MgY29sbGVjdGlvbiBpcyBzdGFydGVkIGJ5IHdyaXRpbmcgMSB0byAvcHJvYy90aW1lcl9zdGF0cywKIAkgIHdyaXRpbmcgMCBzdG9wcyBpdC4gVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCB0byBjb2xsZWN0IGluZm9ybWF0aW9uCi0JICBhYm91dCB0aW1lciB1c2FnZSBwYXR0ZXJucyBpbiBrZXJuZWwgYW5kIHVzZXJzcGFjZS4KKwkgIGFib3V0IHRpbWVyIHVzYWdlIHBhdHRlcm5zIGluIGtlcm5lbCBhbmQgdXNlcnNwYWNlLiBUaGlzIGZlYXR1cmUKKwkgIGlzIGxpZ2h0d2VpZ2h0IGlmIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgYnV0IG5vdCBhY3RpdmF0ZWQKKwkgIChpdCBkZWZhdWx0cyB0byBkZWFjdGl2YXRlZCBvbiBib290dXAgYW5kIHdpbGwgb25seSBiZSBhY3RpdmF0ZWQKKwkgIGlmIHNvbWUgYXBwbGljYXRpb24gbGlrZSBwb3dlcnRvcCBhY3RpdmF0ZXMgaXQgZXhwbGljaXRseSkuCiAKIGNvbmZpZyBERUJVR19TTEFCCiAJYm9vbCAiRGVidWcgc2xhYiBtZW1vcnkgYWxsb2NhdGlvbnMiCkBAIC0yMDEsNiArMTg3LDE2IEBACiAJIFRoaXMgZmVhdHVyZSBhbGxvd3MgbXV0ZXggc2VtYW50aWNzIHZpb2xhdGlvbnMgdG8gYmUgZGV0ZWN0ZWQgYW5kCiAJIHJlcG9ydGVkLgogCitjb25maWcgREVCVUdfU0VNQVBIT1JFCisJYm9vbCAiU2VtYXBob3JlIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWRlcGVuZHMgb24gQUxQSEEgfHwgRlJWCisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlbiBzZW1hcGhvcmUgcHJvY2Vzc2luZyB3aWxsIGlzc3VlIGxvdHMgb2YKKwkgIHZlcmJvc2UgZGVidWdnaW5nIG1lc3NhZ2VzLiAgSWYgeW91IHN1c3BlY3QgYSBzZW1hcGhvcmUgcHJvYmxlbSBvciBhCisJICBrZXJuZWwgaGFja2VyIGFza3MgZm9yIHRoaXMgb3B0aW9uIHRoZW4gc2F5IFkuICBPdGhlcndpc2Ugc2F5IE4uCisKIGNvbmZpZyBERUJVR19MT0NLX0FMTE9DCiAJYm9vbCAiTG9jayBkZWJ1Z2dpbmc6IGRldGVjdCBpbmNvcnJlY3QgZnJlZWluZyBvZiBsaXZlIGxvY2tzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQgJiYgU1RBQ0tUUkFDRV9TVVBQT1JUICYmIExPQ0tERVBfU1VQUE9SVApAQCAtMzg1LDE0ICszODEsMTMgQEAKIGNvbmZpZyBSQ1VfVE9SVFVSRV9URVNUCiAJdHJpc3RhdGUgInRvcnR1cmUgdGVzdHMgZm9yIFJDVSIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWRlcGVuZHMgb24gbQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGEga2VybmVsIG1vZHVsZSB0aGF0IHJ1bnMgdG9ydHVyZSB0ZXN0cwogCSAgb24gdGhlIFJDVSBpbmZyYXN0cnVjdHVyZS4gIFRoZSBrZXJuZWwgbW9kdWxlIG1heSBiZSBidWlsdAogCSAgYWZ0ZXIgdGhlIGZhY3Qgb24gdGhlIHJ1bm5pbmcga2VybmVsIHRvIGJlIHRlc3RlZCwgaWYgZGVzaXJlZC4KIAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBSQ1UgdG9ydHVyZSB0ZXN0cyB0byBzdGFydCBhdXRvbWF0aWNhbGx5Ci0JICBhdCBib290IHRpbWUgKHlvdSBwcm9iYWJseSBkb24ndCkuCiAJICBTYXkgTSBpZiB5b3Ugd2FudCB0aGUgUkNVIHRvcnR1cmUgdGVzdHMgdG8gYnVpbGQgYXMgYSBtb2R1bGUuCiAJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KIApAQCAtNDQ1LDYgKzQ0MCw3IEBACiBjb25maWcgRkFVTFRfSU5KRUNUSU9OX1NUQUNLVFJBQ0VfRklMVEVSCiAJYm9vbCAic3RhY2t0cmFjZSBmaWx0ZXIgZm9yIGZhdWx0LWluamVjdGlvbiBjYXBhYmlsaXRpZXMiCiAJZGVwZW5kcyBvbiBGQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMgJiYgU1RBQ0tUUkFDRV9TVVBQT1JUCisJZGVwZW5kcyBvbiAhWDg2XzY0CiAJc2VsZWN0IFNUQUNLVFJBQ0UKIAlzZWxlY3QgRlJBTUVfUE9JTlRFUgogCWhlbHAKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCBhZTU3ZjM1Li5jOGM4ZTIwIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC0xMyw3ICsxMyw3IEBACiBsaWIteQkrPSBrb2JqZWN0Lm8ga3JlZi5vIGtvYmplY3RfdWV2ZW50Lm8ga2xpc3QubwogCiBvYmoteSArPSBkaXY2NC5vIHNvcnQubyBwYXJzZXIubyBoYWxmbWQ0Lm8gZGVidWdfbG9ja3MubyByYW5kb20zMi5vIFwKLQkgYnVzdF9zcGlubG9ja3MubworCSBidXN0X3NwaW5sb2Nrcy5vIGhleGR1bXAubwogCiBpZmVxICgkKENPTkZJR19ERUJVR19LT0JKRUNUKSx5KQogQ0ZMQUdTX2tvYmplY3QubyArPSAtRERFQlVHCkBAIC00MSw2ICs0MSw3IEBACiBvYmotJChDT05GSUdfQklUUkVWRVJTRSkgKz0gYml0cmV2Lm8KIG9iai0kKENPTkZJR19DUkNfQ0NJVFQpCSs9IGNyYy1jY2l0dC5vCiBvYmotJChDT05GSUdfQ1JDMTYpCSs9IGNyYzE2Lm8KK29iai0kKENPTkZJR19DUkNfSVRVX1QpCSs9IGNyYy1pdHUtdC5vCiBvYmotJChDT05GSUdfQ1JDMzIpCSs9IGNyYzMyLm8KIG9iai0kKENPTkZJR19MSUJDUkMzMkMpCSs9IGxpYmNyYzMyYy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19BTExPQ0FUT1IpICs9IGdlbmFsbG9jLm8KZGlmZiAtLWdpdCBhL2xpYi9hdWRpdC5jIGIvbGliL2F1ZGl0LmMKaW5kZXggM2IxMjg5Zi4uOGU3ZGMxYyAxMDA2NDQKLS0tIGEvbGliL2F1ZGl0LmMKKysrIGIvbGliL2F1ZGl0LmMKQEAgLTIzLDYgKzIzLDE2IEBACiB+MFUKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBzaWduYWxfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9zaWduYWwuaD4KK34wVQorfTsKKworaW50IGF1ZGl0X2NsYXNzaWZ5X2FyY2goaW50IGFyY2gpCit7CisJcmV0dXJuIDA7Cit9CisKIGludCBhdWRpdF9jbGFzc2lmeV9zeXNjYWxsKGludCBhYmksIHVuc2lnbmVkIHN5c2NhbGwpCiB7CiAJc3dpdGNoKHN5c2NhbGwpIHsKQEAgLTQ5LDYgKzU5LDcgQEAKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19SRUFELCByZWFkX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEUsIGRpcl9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfQ0hBVFRSLCBjaGF0dHJfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1NJR05BTCwgc2lnbmFsX2NsYXNzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbGliL2NyYy1pdHUtdC5jIGIvbGliL2NyYy1pdHUtdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MzQ3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvY3JjLWl0dS10LmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqICAgICAgY3JjLWl0dS10LmMKKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIFZlcnNpb24gMi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMtaXR1LXQuaD4KKworLyoqIENSQyB0YWJsZSBmb3IgdGhlIENSQyBJVFUtVCBWLjQxIDB4MHgxMDIxICh4XjE2ICsgeF4xMiArIHheMTUgKyAxKSAqLworY29uc3QgdTE2IGNyY19pdHVfdF90YWJsZVsyNTZdID0geworCTB4MDAwMCwgMHgxMDIxLCAweDIwNDIsIDB4MzA2MywgMHg0MDg0LCAweDUwYTUsIDB4NjBjNiwgMHg3MGU3LAorCTB4ODEwOCwgMHg5MTI5LCAweGExNGEsIDB4YjE2YiwgMHhjMThjLCAweGQxYWQsIDB4ZTFjZSwgMHhmMWVmLAorCTB4MTIzMSwgMHgwMjEwLCAweDMyNzMsIDB4MjI1MiwgMHg1MmI1LCAweDQyOTQsIDB4NzJmNywgMHg2MmQ2LAorCTB4OTMzOSwgMHg4MzE4LCAweGIzN2IsIDB4YTM1YSwgMHhkM2JkLCAweGMzOWMsIDB4ZjNmZiwgMHhlM2RlLAorCTB4MjQ2MiwgMHgzNDQzLCAweDA0MjAsIDB4MTQwMSwgMHg2NGU2LCAweDc0YzcsIDB4NDRhNCwgMHg1NDg1LAorCTB4YTU2YSwgMHhiNTRiLCAweDg1MjgsIDB4OTUwOSwgMHhlNWVlLCAweGY1Y2YsIDB4YzVhYywgMHhkNThkLAorCTB4MzY1MywgMHgyNjcyLCAweDE2MTEsIDB4MDYzMCwgMHg3NmQ3LCAweDY2ZjYsIDB4NTY5NSwgMHg0NmI0LAorCTB4Yjc1YiwgMHhhNzdhLCAweDk3MTksIDB4ODczOCwgMHhmN2RmLCAweGU3ZmUsIDB4ZDc5ZCwgMHhjN2JjLAorCTB4NDhjNCwgMHg1OGU1LCAweDY4ODYsIDB4NzhhNywgMHgwODQwLCAweDE4NjEsIDB4MjgwMiwgMHgzODIzLAorCTB4YzljYywgMHhkOWVkLCAweGU5OGUsIDB4ZjlhZiwgMHg4OTQ4LCAweDk5NjksIDB4YTkwYSwgMHhiOTJiLAorCTB4NWFmNSwgMHg0YWQ0LCAweDdhYjcsIDB4NmE5NiwgMHgxYTcxLCAweDBhNTAsIDB4M2EzMywgMHgyYTEyLAorCTB4ZGJmZCwgMHhjYmRjLCAweGZiYmYsIDB4ZWI5ZSwgMHg5Yjc5LCAweDhiNTgsIDB4YmIzYiwgMHhhYjFhLAorCTB4NmNhNiwgMHg3Yzg3LCAweDRjZTQsIDB4NWNjNSwgMHgyYzIyLCAweDNjMDMsIDB4MGM2MCwgMHgxYzQxLAorCTB4ZWRhZSwgMHhmZDhmLCAweGNkZWMsIDB4ZGRjZCwgMHhhZDJhLCAweGJkMGIsIDB4OGQ2OCwgMHg5ZDQ5LAorCTB4N2U5NywgMHg2ZWI2LCAweDVlZDUsIDB4NGVmNCwgMHgzZTEzLCAweDJlMzIsIDB4MWU1MSwgMHgwZTcwLAorCTB4ZmY5ZiwgMHhlZmJlLCAweGRmZGQsIDB4Y2ZmYywgMHhiZjFiLCAweGFmM2EsIDB4OWY1OSwgMHg4Zjc4LAorCTB4OTE4OCwgMHg4MWE5LCAweGIxY2EsIDB4YTFlYiwgMHhkMTBjLCAweGMxMmQsIDB4ZjE0ZSwgMHhlMTZmLAorCTB4MTA4MCwgMHgwMGExLCAweDMwYzIsIDB4MjBlMywgMHg1MDA0LCAweDQwMjUsIDB4NzA0NiwgMHg2MDY3LAorCTB4ODNiOSwgMHg5Mzk4LCAweGEzZmIsIDB4YjNkYSwgMHhjMzNkLCAweGQzMWMsIDB4ZTM3ZiwgMHhmMzVlLAorCTB4MDJiMSwgMHgxMjkwLCAweDIyZjMsIDB4MzJkMiwgMHg0MjM1LCAweDUyMTQsIDB4NjI3NywgMHg3MjU2LAorCTB4YjVlYSwgMHhhNWNiLCAweDk1YTgsIDB4ODU4OSwgMHhmNTZlLCAweGU1NGYsIDB4ZDUyYywgMHhjNTBkLAorCTB4MzRlMiwgMHgyNGMzLCAweDE0YTAsIDB4MDQ4MSwgMHg3NDY2LCAweDY0NDcsIDB4NTQyNCwgMHg0NDA1LAorCTB4YTdkYiwgMHhiN2ZhLCAweDg3OTksIDB4OTdiOCwgMHhlNzVmLCAweGY3N2UsIDB4YzcxZCwgMHhkNzNjLAorCTB4MjZkMywgMHgzNmYyLCAweDA2OTEsIDB4MTZiMCwgMHg2NjU3LCAweDc2NzYsIDB4NDYxNSwgMHg1NjM0LAorCTB4ZDk0YywgMHhjOTZkLCAweGY5MGUsIDB4ZTkyZiwgMHg5OWM4LCAweDg5ZTksIDB4Yjk4YSwgMHhhOWFiLAorCTB4NTg0NCwgMHg0ODY1LCAweDc4MDYsIDB4NjgyNywgMHgxOGMwLCAweDA4ZTEsIDB4Mzg4MiwgMHgyOGEzLAorCTB4Y2I3ZCwgMHhkYjVjLCAweGViM2YsIDB4ZmIxZSwgMHg4YmY5LCAweDliZDgsIDB4YWJiYiwgMHhiYjlhLAorCTB4NGE3NSwgMHg1YTU0LCAweDZhMzcsIDB4N2ExNiwgMHgwYWYxLCAweDFhZDAsIDB4MmFiMywgMHgzYTkyLAorCTB4ZmQyZSwgMHhlZDBmLCAweGRkNmMsIDB4Y2Q0ZCwgMHhiZGFhLCAweGFkOGIsIDB4OWRlOCwgMHg4ZGM5LAorCTB4N2MyNiwgMHg2YzA3LCAweDVjNjQsIDB4NGM0NSwgMHgzY2EyLCAweDJjODMsIDB4MWNlMCwgMHgwY2MxLAorCTB4ZWYxZiwgMHhmZjNlLCAweGNmNWQsIDB4ZGY3YywgMHhhZjliLCAweGJmYmEsIDB4OGZkOSwgMHg5ZmY4LAorCTB4NmUxNywgMHg3ZTM2LCAweDRlNTUsIDB4NWU3NCwgMHgyZTkzLCAweDNlYjIsIDB4MGVkMSwgMHgxZWYwCit9OworCitFWFBPUlRfU1lNQk9MKGNyY19pdHVfdF90YWJsZSk7CisKKy8qKgorICogY3JjX2l0dV90IC0gQ29tcHV0ZSB0aGUgQ1JDLUlUVS1UIGZvciB0aGUgZGF0YSBidWZmZXIKKyAqCisgKiBAY3JjOiAgICAgcHJldmlvdXMgQ1JDIHZhbHVlCisgKiBAYnVmZmVyOiAgZGF0YSBwb2ludGVyCisgKiBAbGVuOiAgICAgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIKKyAqCisgKiBSZXR1cm5zIHRoZSB1cGRhdGVkIENSQyB2YWx1ZQorICovCit1MTYgY3JjX2l0dV90KHUxNiBjcmMsIGNvbnN0IHU4ICpidWZmZXIsIHNpemVfdCBsZW4pCit7CisJd2hpbGUgKGxlbi0tKQorCQljcmMgPSBjcmNfaXR1X3RfYnl0ZShjcmMsICpidWZmZXIrKyk7CisJcmV0dXJuIGNyYzsKK30KK0VYUE9SVF9TWU1CT0woY3JjX2l0dV90KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJDUkMgSVRVLVQgVi40MSBjYWxjdWxhdGlvbnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvbGliL2ZhdWx0LWluamVjdC5jIGIvbGliL2ZhdWx0LWluamVjdC5jCmluZGV4IDBmYWJkMTIuLmIxOGZjMmYgMTAwNjQ0Ci0tLSBhL2xpYi9mYXVsdC1pbmplY3QuYworKysgYi9saWIvZmF1bHQtaW5qZWN0LmMKQEAgLTcyLDkgKzcyLDggQEAKIAl0cmFjZS5lbnRyaWVzID0gZW50cmllczsKIAl0cmFjZS5tYXhfZW50cmllcyA9IGRlcHRoOwogCXRyYWNlLnNraXAgPSAxOwotCXRyYWNlLmFsbF9jb250ZXh0cyA9IDA7CiAKLQlzYXZlX3N0YWNrX3RyYWNlKCZ0cmFjZSwgTlVMTCk7CisJc2F2ZV9zdGFja190cmFjZSgmdHJhY2UpOwogCWZvciAobiA9IDA7IG4gPCB0cmFjZS5ucl9lbnRyaWVzOyBuKyspIHsKIAkJaWYgKGF0dHItPnJlamVjdF9zdGFydCA8PSBlbnRyaWVzW25dICYmCiAJCQkgICAgICAgZW50cmllc1tuXSA8IGF0dHItPnJlamVjdF9lbmQpCmRpZmYgLS1naXQgYS9saWIvaGV4ZHVtcC5jIGIvbGliL2hleGR1bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmRhNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2hleGR1bXAuYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIGxpYi9oZXhkdW1wLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBTZWUgUkVBRE1FIGFuZCBDT1BZSU5HIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKy8qKgorICogaGV4X2R1bXBfdG9fYnVmZmVyIC0gY29udmVydCBhIGJsb2Igb2YgZGF0YSB0byAiaGV4IEFTQ0lJIiBpbiBtZW1vcnkKKyAqIEBidWY6IGRhdGEgYmxvYiB0byBkdW1wCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIEBidWYKKyAqIEBsaW5lYnVmOiB3aGVyZSB0byBwdXQgdGhlIGNvbnZlcnRlZCBkYXRhCisgKiBAbGluZWJ1ZmxlbjogdG90YWwgc2l6ZSBvZiBAbGluZWJ1ZiwgaW5jbHVkaW5nIHNwYWNlIGZvciB0ZXJtaW5hdGluZyBOVUwKKyAqCisgKiBoZXhfZHVtcF90b19idWZmZXIoKSB3b3JrcyBvbiBvbmUgImxpbmUiIG9mIG91dHB1dCBhdCBhIHRpbWUsIGkuZS4sCisgKiAxNiBieXRlcyBvZiBpbnB1dCBkYXRhIGNvbnZlcnRlZCB0byBoZXggKyBBU0NJSSBvdXRwdXQuCisgKgorICogR2l2ZW4gYSBidWZmZXIgb2YgdTggZGF0YSwgaGV4X2R1bXBfdG9fYnVmZmVyKCkgY29udmVydHMgdGhlIGlucHV0IGRhdGEKKyAqIHRvIGEgaGV4ICsgQVNDSUkgZHVtcCBhdCB0aGUgc3VwcGxpZWQgbWVtb3J5IGxvY2F0aW9uLgorICogVGhlIGNvbnZlcnRlZCBvdXRwdXQgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLgorICoKKyAqIEUuZy46CisgKgloZXhfZHVtcF90b19idWZmZXIoZnJhbWUtPmRhdGEsIGZyYW1lLT5sZW4sIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKSk7CisgKgorICogZXhhbXBsZSBvdXRwdXQgYnVmZmVyOgorICogNDA0MTQyNDMgNDQ0NTQ2NDcgNDg0OTRhNGIgNGM0ZDRlNGYgIEBBQkNERUZHSElKS0xNTk8KKyAqLwordm9pZCBoZXhfZHVtcF90b19idWZmZXIoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBjaGFyICpsaW5lYnVmLAorCQkJc2l6ZV90IGxpbmVidWZsZW4pCit7CisJY29uc3QgdTggKnB0ciA9IGJ1ZjsKKwl1OCBjaDsKKwlpbnQgaiwgbHggPSAwOworCisJZm9yIChqID0gMDsgKGogPCAxNikgJiYgKGogPCBsZW4pICYmIChseCArIDMpIDwgbGluZWJ1ZmxlbjsgaisrKSB7CisJCWlmIChqICYmICEoaiAlIDQpKQorCQkJbGluZWJ1ZltseCsrXSA9ICcgJzsKKwkJY2ggPSBwdHJbal07CisJCWxpbmVidWZbbHgrK10gPSBoZXhfYXNjKGNoID4+IDQpOworCQlsaW5lYnVmW2x4KytdID0gaGV4X2FzYyhjaCAmIDB4MGYpOworCX0KKwlpZiAoKGx4ICsgMikgPCBsaW5lYnVmbGVuKSB7CisJCWxpbmVidWZbbHgrK10gPSAnICc7CisJCWxpbmVidWZbbHgrK10gPSAnICc7CisJfQorCWZvciAoaiA9IDA7IChqIDwgMTYpICYmIChqIDwgbGVuKSAmJiAobHggKyAyKSA8IGxpbmVidWZsZW47IGorKykKKwkJbGluZWJ1ZltseCsrXSA9IGlzcHJpbnQocHRyW2pdKSA/IHB0cltqXSA6ICcuJzsKKwlsaW5lYnVmW2x4KytdID0gJ1wwJzsKK30KK0VYUE9SVF9TWU1CT0woaGV4X2R1bXBfdG9fYnVmZmVyKTsKKworLyoqCisgKiBwcmludF9oZXhfZHVtcCAtIHByaW50IGEgdGV4dCBoZXggZHVtcCB0byBzeXNsb2cgZm9yIGEgYmluYXJ5IGJsb2Igb2YgZGF0YQorICogQGxldmVsOiBrZXJuZWwgbG9nIGxldmVsIChlLmcuIEtFUk5fREVCVUcpCisgKiBAcHJlZml4X3R5cGU6IGNvbnRyb2xzIHdoZXRoZXIgcHJlZml4IG9mIGFuIG9mZnNldCwgYWRkcmVzcywgb3Igbm9uZQorICogIGlzIHByaW50ZWQgKCVEVU1QX1BSRUZJWF9PRkZTRVQsICVEVU1QX1BSRUZJWF9BRERSRVNTLCAlRFVNUF9QUkVGSVhfTk9ORSkKKyAqIEBidWY6IGRhdGEgYmxvYiB0byBkdW1wCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIEBidWYKKyAqCisgKiBHaXZlbiBhIGJ1ZmZlciBvZiB1OCBkYXRhLCBwcmludF9oZXhfZHVtcCgpIHByaW50cyBhIGhleCArIEFTQ0lJIGR1bXAKKyAqIHRvIHRoZSBrZXJuZWwgbG9nIGF0IHRoZSBzcGVjaWZpZWQga2VybmVsIGxvZyBsZXZlbCwgd2l0aCBhbiBvcHRpb25hbAorICogbGVhZGluZyBwcmVmaXguCisgKgorICogRS5nLjoKKyAqICAgcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgRFVNUF9QUkVGSVhfQUREUkVTUywgZnJhbWUtPmRhdGEsIGZyYW1lLT5sZW4pOworICoKKyAqIEV4YW1wbGUgb3V0cHV0IHVzaW5nICVEVU1QX1BSRUZJWF9PRkZTRVQ6CisgKiAwMDA5YWI0MjogNDA0MTQyNDMgNDQ0NTQ2NDcgNDg0OTRhNGIgNGM0ZDRlNGYgIEBBQkNERUZHSElKS0xNTk8KKyAqIEV4YW1wbGUgb3V0cHV0IHVzaW5nICVEVU1QX1BSRUZJWF9BRERSRVNTOgorICogZmZmZmZmZmY4ODA4OWFmMDogNzA3MTcyNzMgNzQ3NTc2NzcgNzg3OTdhN2IgN2M3ZDdlN2YgIHBxcnN0dXZ3eHl6e3x9fi4KKyAqLwordm9pZCBwcmludF9oZXhfZHVtcChjb25zdCBjaGFyICpsZXZlbCwgaW50IHByZWZpeF90eXBlLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJdTggKnB0ciA9IGJ1ZjsKKwlpbnQgaSwgbGluZWxlbiwgcmVtYWluaW5nID0gbGVuOworCXVuc2lnbmVkIGNoYXIgbGluZWJ1ZlsxMDBdOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAxNikgeworCQlsaW5lbGVuID0gbWluKHJlbWFpbmluZywgMTYpOworCQlyZW1haW5pbmcgLT0gMTY7CisJCWhleF9kdW1wX3RvX2J1ZmZlcihwdHIgKyBpLCBsaW5lbGVuLCBsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpOworCisJCXN3aXRjaCAocHJlZml4X3R5cGUpIHsKKwkJY2FzZSBEVU1QX1BSRUZJWF9BRERSRVNTOgorCQkJcHJpbnRrKCIlcyUqcDogJXNcbiIsIGxldmVsLAorCQkJCShpbnQpKDIgKiBzaXplb2Yodm9pZCAqKSksIHB0ciArIGksIGxpbmVidWYpOworCQkJYnJlYWs7CisJCWNhc2UgRFVNUF9QUkVGSVhfT0ZGU0VUOgorCQkJcHJpbnRrKCIlcyUuOHg6ICVzXG4iLCBsZXZlbCwgaSwgbGluZWJ1Zik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiJXMlc1xuIiwgbGV2ZWwsIGxpbmVidWYpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CitFWFBPUlRfU1lNQk9MKHByaW50X2hleF9kdW1wKTsKZGlmZiAtLWdpdCBhL2xpYi9pb3JlbWFwLmMgYi9saWIvaW9yZW1hcC5jCmluZGV4IGE5ZTQ0MTUuLjc2MDUyMTQgMTAwNjQ0Ci0tLSBhL2xpYi9pb3JlbWFwLmMKKysrIGIvbGliL2lvcmVtYXAuYwpAQCAtNyw3ICs3LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKZGlmZiAtLWdpdCBhL2xpYi9yYWRpeC10cmVlLmMgYi9saWIvcmFkaXgtdHJlZS5jCmluZGV4IGQ2OWRkYmUuLjQwMmViNGUgMTAwNjQ0Ci0tLSBhL2xpYi9yYWRpeC10cmVlLmMKKysrIGIvbGliL3JhZGl4LXRyZWUuYwpAQCAtMTAwNCw3ICsxMDA0LDcgQEAKICAgICAgICBzdHJ1Y3QgcmFkaXhfdHJlZV9wcmVsb2FkICpydHA7CiAKICAgICAgICAvKiBGcmVlIHBlci1jcHUgcG9vbCBvZiBwZXJsb2FkZWQgbm9kZXMgKi8KLSAgICAgICBpZiAoYWN0aW9uID09IENQVV9ERUFEKSB7CisgICAgICAgaWYgKGFjdGlvbiA9PSBDUFVfREVBRCB8fCBhY3Rpb24gPT0gQ1BVX0RFQURfRlJPWkVOKSB7CiAgICAgICAgICAgICAgICBydHAgPSAmcGVyX2NwdShyYWRpeF90cmVlX3ByZWxvYWRzLCBjcHUpOwogICAgICAgICAgICAgICAgd2hpbGUgKHJ0cC0+bnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAga21lbV9jYWNoZV9mcmVlKHJhZGl4X3RyZWVfbm9kZV9jYWNoZXAsCmRpZmYgLS1naXQgYS9saWIvcmVlZF9zb2xvbW9uL3JlZWRfc29sb21vbi5jIGIvbGliL3JlZWRfc29sb21vbi9yZWVkX3NvbG9tb24uYwppbmRleCBhNGI3MzBhLi41YjBkODUyIDEwMDY0NAotLS0gYS9saWIvcmVlZF9zb2xvbW9uL3JlZWRfc29sb21vbi5jCisrKyBiL2xpYi9yZWVkX3NvbG9tb24vcmVlZF9zb2xvbW9uLmMKQEAgLTU2LDYgKzU2LDcgQEAKICAqIHJzX2luaXQgLSBJbml0aWFsaXplIGEgUmVlZC1Tb2xvbW9uIGNvZGVjCiAgKiBAc3ltc2l6ZToJc3ltYm9sIHNpemUsIGJpdHMgKDEtOCkKICAqIEBnZnBvbHk6CUZpZWxkIGdlbmVyYXRvciBwb2x5bm9taWFsIGNvZWZmaWNpZW50cworICogQGdmZnVuYzoJRmllbGQgZ2VuZXJhdG9yIGZ1bmN0aW9uCiAgKiBAZmNyOglmaXJzdCByb290IG9mIFJTIGNvZGUgZ2VuZXJhdG9yIHBvbHlub21pYWwsIGluZGV4IGZvcm0KICAqIEBwcmltOglwcmltaXRpdmUgZWxlbWVudCB0byBnZW5lcmF0ZSBwb2x5bm9taWFsIHJvb3RzCiAgKiBAbnJvb3RzOglSUyBjb2RlIGdlbmVyYXRvciBwb2x5bm9taWFsIGRlZ3JlZSAobnVtYmVyIG9mIHJvb3RzKQpAQCAtNjMsOCArNjQsOCBAQAogICogQWxsb2NhdGUgYSBjb250cm9sIHN0cnVjdHVyZSBhbmQgdGhlIHBvbHlub20gYXJyYXlzIGZvciBmYXN0ZXIKICAqIGVuL2RlY29kaW5nLiBGaWxsIHRoZSBhcnJheXMgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgogICovCi1zdGF0aWMgc3RydWN0IHJzX2NvbnRyb2wgKnJzX2luaXQoaW50IHN5bXNpemUsIGludCBnZnBvbHksIGludCBmY3IsCi0JCQkJICAgaW50IHByaW0sIGludCBucm9vdHMpCitzdGF0aWMgc3RydWN0IHJzX2NvbnRyb2wgKnJzX2luaXQoaW50IHN5bXNpemUsIGludCBnZnBvbHksIGludCAoKmdmZnVuYykoaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmNyLCBpbnQgcHJpbSwgaW50IG5yb290cykKIHsKIAlzdHJ1Y3QgcnNfY29udHJvbCAqcnM7CiAJaW50IGksIGosIHNyLCByb290LCBpcHJpbTsKQEAgLTgyLDYgKzgzLDcgQEAKIAlycy0+cHJpbSA9IHByaW07CiAJcnMtPm5yb290cyA9IG5yb290czsKIAlycy0+Z2Zwb2x5ID0gZ2Zwb2x5OworCXJzLT5nZmZ1bmMgPSBnZmZ1bmM7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgYXJyYXlzICovCiAJcnMtPmFscGhhX3RvID0ga21hbGxvYyhzaXplb2YodWludDE2X3QpICogKHJzLT5ubiArIDEpLCBHRlBfS0VSTkVMKTsKQEAgLTk5LDE3ICsxMDEsMjYgQEAKIAkvKiBHZW5lcmF0ZSBHYWxvaXMgZmllbGQgbG9va3VwIHRhYmxlcyAqLwogCXJzLT5pbmRleF9vZlswXSA9IHJzLT5ubjsJLyogbG9nKHplcm8pID0gLWluZiAqLwogCXJzLT5hbHBoYV90b1tycy0+bm5dID0gMDsJLyogYWxwaGEqKi1pbmYgPSAwICovCi0Jc3IgPSAxOwotCWZvciAoaSA9IDA7IGkgPCBycy0+bm47IGkrKykgewotCQlycy0+aW5kZXhfb2Zbc3JdID0gaTsKLQkJcnMtPmFscGhhX3RvW2ldID0gc3I7Ci0JCXNyIDw8PSAxOwotCQlpZiAoc3IgJiAoMSA8PCBzeW1zaXplKSkKLQkJCXNyIF49IGdmcG9seTsKLQkJc3IgJj0gcnMtPm5uOworCWlmIChnZnBvbHkpIHsKKwkJc3IgPSAxOworCQlmb3IgKGkgPSAwOyBpIDwgcnMtPm5uOyBpKyspIHsKKwkJCXJzLT5pbmRleF9vZltzcl0gPSBpOworCQkJcnMtPmFscGhhX3RvW2ldID0gc3I7CisJCQlzciA8PD0gMTsKKwkJCWlmIChzciAmICgxIDw8IHN5bXNpemUpKQorCQkJCXNyIF49IGdmcG9seTsKKwkJCXNyICY9IHJzLT5ubjsKKwkJfQorCX0gZWxzZSB7CisJCXNyID0gZ2ZmdW5jKDApOworCQlmb3IgKGkgPSAwOyBpIDwgcnMtPm5uOyBpKyspIHsKKwkJCXJzLT5pbmRleF9vZltzcl0gPSBpOworCQkJcnMtPmFscGhhX3RvW2ldID0gc3I7CisJCQlzciA9IGdmZnVuYyhzcik7CisJCX0KIAl9CiAJLyogSWYgaXQncyBub3QgcHJpbWl0aXZlLCBleGl0ICovCi0JaWYoc3IgIT0gMSkKKwlpZihzciAhPSBycy0+YWxwaGFfdG9bMF0pCiAJCWdvdG8gZXJycG9sOwogCiAJLyogRmluZCBwcmltLXRoIHJvb3Qgb2YgMSwgdXNlZCBpbiBkZWNvZGluZyAqLwpAQCAtMTczLDE4ICsxODQsMjIgQEAKIH0KIAogLyoqCi0gKiBpbml0X3JzIC0gRmluZCBhIG1hdGNoaW5nIG9yIGFsbG9jYXRlIGEgbmV3IHJzIGNvbnRyb2wgc3RydWN0dXJlCisgKiBpbml0X3JzX2ludGVybmFsIC0gRmluZCBhIG1hdGNoaW5nIG9yIGFsbG9jYXRlIGEgbmV3IHJzIGNvbnRyb2wgc3RydWN0dXJlCiAgKiAgQHN5bXNpemU6CXRoZSBzeW1ib2wgc2l6ZSAobnVtYmVyIG9mIGJpdHMpCiAgKiAgQGdmcG9seToJdGhlIGV4dGVuZGVkIEdhbG9pcyBmaWVsZCBnZW5lcmF0b3IgcG9seW5vbWlhbCBjb2VmZmljaWVudHMsCiAgKgkJd2l0aCB0aGUgMHRoIGNvZWZmaWNpZW50IGluIHRoZSBsb3cgb3JkZXIgYml0LiBUaGUgcG9seW5vbWlhbAogICoJCW11c3QgYmUgcHJpbWl0aXZlOworICogIEBnZmZ1bmM6CXBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIG5leHQgZmllbGQgZWxlbWVudCwKKyAqCQlvciB0aGUgbXVsdGlwbGljYXRpdmUgaWRlbnRpdHkgZWxlbWVudCBpZiBnaXZlbiAwLiAgVXNlZAorICoJCWluc3RlYWQgb2YgZ2Zwb2x5IGlmIGdmcG9seSBpcyAwCiAgKiAgQGZjcjogIAl0aGUgZmlyc3QgY29uc2VjdXRpdmUgcm9vdCBvZiB0aGUgcnMgY29kZSBnZW5lcmF0b3IgcG9seW5vbWlhbAogICoJCWluIGluZGV4IGZvcm0KICAqICBAcHJpbToJcHJpbWl0aXZlIGVsZW1lbnQgdG8gZ2VuZXJhdGUgcG9seW5vbWlhbCByb290cwogICogIEBucm9vdHM6CVJTIGNvZGUgZ2VuZXJhdG9yIHBvbHlub21pYWwgZGVncmVlIChudW1iZXIgb2Ygcm9vdHMpCiAgKi8KLXN0cnVjdCByc19jb250cm9sICppbml0X3JzKGludCBzeW1zaXplLCBpbnQgZ2Zwb2x5LCBpbnQgZmNyLCBpbnQgcHJpbSwKLQkJCSAgIGludCBucm9vdHMpCitzdGF0aWMgc3RydWN0IHJzX2NvbnRyb2wgKmluaXRfcnNfaW50ZXJuYWwoaW50IHN5bXNpemUsIGludCBnZnBvbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZ2ZmdW5jKShpbnQpLCBpbnQgZmNyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmltLCBpbnQgbnJvb3RzKQogewogCXN0cnVjdCBsaXN0X2hlYWQJKnRtcDsKIAlzdHJ1Y3QgcnNfY29udHJvbAkqcnM7CkBAIC0yMDgsNiArMjIzLDggQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoZ2Zwb2x5ICE9IHJzLT5nZnBvbHkpCiAJCQljb250aW51ZTsKKwkJaWYgKGdmZnVuYyAhPSBycy0+Z2ZmdW5jKQorCQkJY29udGludWU7CiAJCWlmIChmY3IgIT0gcnMtPmZjcikKIAkJCWNvbnRpbnVlOwogCQlpZiAocHJpbSAhPSBycy0+cHJpbSkKQEAgLTIyMCw3ICsyMzcsNyBAQAogCX0KIAogCS8qIENyZWF0ZSBhIG5ldyBvbmUgKi8KLQlycyA9IHJzX2luaXQoc3ltc2l6ZSwgZ2Zwb2x5LCBmY3IsIHByaW0sIG5yb290cyk7CisJcnMgPSByc19pbml0KHN5bXNpemUsIGdmcG9seSwgZ2ZmdW5jLCBmY3IsIHByaW0sIG5yb290cyk7CiAJaWYgKHJzKSB7CiAJCXJzLT51c2VycyA9IDE7CiAJCWxpc3RfYWRkKCZycy0+bGlzdCwgJnJzbGlzdCk7CkBAIC0yMzAsNiArMjQ3LDQyIEBACiAJcmV0dXJuIHJzOwogfQogCisvKioKKyAqIGluaXRfcnMgLSBGaW5kIGEgbWF0Y2hpbmcgb3IgYWxsb2NhdGUgYSBuZXcgcnMgY29udHJvbCBzdHJ1Y3R1cmUKKyAqICBAc3ltc2l6ZToJdGhlIHN5bWJvbCBzaXplIChudW1iZXIgb2YgYml0cykKKyAqICBAZ2Zwb2x5Ogl0aGUgZXh0ZW5kZWQgR2Fsb2lzIGZpZWxkIGdlbmVyYXRvciBwb2x5bm9taWFsIGNvZWZmaWNpZW50cywKKyAqCQl3aXRoIHRoZSAwdGggY29lZmZpY2llbnQgaW4gdGhlIGxvdyBvcmRlciBiaXQuIFRoZSBwb2x5bm9taWFsCisgKgkJbXVzdCBiZSBwcmltaXRpdmU7CisgKiAgQGZjcjogIAl0aGUgZmlyc3QgY29uc2VjdXRpdmUgcm9vdCBvZiB0aGUgcnMgY29kZSBnZW5lcmF0b3IgcG9seW5vbWlhbAorICoJCWluIGluZGV4IGZvcm0KKyAqICBAcHJpbToJcHJpbWl0aXZlIGVsZW1lbnQgdG8gZ2VuZXJhdGUgcG9seW5vbWlhbCByb290cworICogIEBucm9vdHM6CVJTIGNvZGUgZ2VuZXJhdG9yIHBvbHlub21pYWwgZGVncmVlIChudW1iZXIgb2Ygcm9vdHMpCisgKi8KK3N0cnVjdCByc19jb250cm9sICppbml0X3JzKGludCBzeW1zaXplLCBpbnQgZ2Zwb2x5LCBpbnQgZmNyLCBpbnQgcHJpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBucm9vdHMpCit7CisJcmV0dXJuIGluaXRfcnNfaW50ZXJuYWwoc3ltc2l6ZSwgZ2Zwb2x5LCBOVUxMLCBmY3IsIHByaW0sIG5yb290cyk7Cit9CisKKy8qKgorICogaW5pdF9yc19ub25fY2Fub25pY2FsIC0gRmluZCBhIG1hdGNoaW5nIG9yIGFsbG9jYXRlIGEgbmV3IHJzIGNvbnRyb2wKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgZm9yIGZpZWxkcyB3aXRoIG5vbi1jYW5vbmljYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudGF0aW9uCisgKiAgQHN5bXNpemU6CXRoZSBzeW1ib2wgc2l6ZSAobnVtYmVyIG9mIGJpdHMpCisgKiAgQGdmZnVuYzoJcG9pbnRlciB0byBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgbmV4dCBmaWVsZCBlbGVtZW50LAorICoJCW9yIHRoZSBtdWx0aXBsaWNhdGl2ZSBpZGVudGl0eSBlbGVtZW50IGlmIGdpdmVuIDAuICBVc2VkCisgKgkJaW5zdGVhZCBvZiBnZnBvbHkgaWYgZ2Zwb2x5IGlzIDAKKyAqICBAZmNyOiAgCXRoZSBmaXJzdCBjb25zZWN1dGl2ZSByb290IG9mIHRoZSBycyBjb2RlIGdlbmVyYXRvciBwb2x5bm9taWFsCisgKgkJaW4gaW5kZXggZm9ybQorICogIEBwcmltOglwcmltaXRpdmUgZWxlbWVudCB0byBnZW5lcmF0ZSBwb2x5bm9taWFsIHJvb3RzCisgKiAgQG5yb290czoJUlMgY29kZSBnZW5lcmF0b3IgcG9seW5vbWlhbCBkZWdyZWUgKG51bWJlciBvZiByb290cykKKyAqLworc3RydWN0IHJzX2NvbnRyb2wgKmluaXRfcnNfbm9uX2Nhbm9uaWNhbChpbnQgc3ltc2l6ZSwgaW50ICgqZ2ZmdW5jKShpbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmNyLCBpbnQgcHJpbSwgaW50IG5yb290cykKK3sKKwlyZXR1cm4gaW5pdF9yc19pbnRlcm5hbChzeW1zaXplLCAwLCBnZmZ1bmMsIGZjciwgcHJpbSwgbnJvb3RzKTsKK30KKwogI2lmZGVmIENPTkZJR19SRUVEX1NPTE9NT05fRU5DOAogLyoqCiAgKiAgZW5jb2RlX3JzOCAtIENhbGN1bGF0ZSB0aGUgcGFyaXR5IGZvciBkYXRhIHZhbHVlcyAoOGJpdCBkYXRhIHdpZHRoKQpAQCAtMzIxLDYgKzM3NCw3IEBACiAjZW5kaWYKIAogRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9ycyk7CitFWFBPUlRfU1lNQk9MX0dQTChpbml0X3JzX25vbl9jYW5vbmljYWwpOwogRVhQT1JUX1NZTUJPTF9HUEwoZnJlZV9ycyk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2xpYi9zd2lvdGxiLmMgYi9saWIvc3dpb3RsYi5jCmluZGV4IDk5NzBlNTUuLjEwYzEzYWQgMTAwNjQ0Ci0tLSBhL2xpYi9zd2lvdGxiLmMKKysrIGIvbGliL3N3aW90bGIuYwpAQCAtNzc4LDcgKzc3OCw2IEBACiAJcmV0dXJuIHZpcnRfdG9fYnVzKGlvX3RsYl9lbmQgLSAxKSA8PSBtYXNrOwogfQogCi1FWFBPUlRfU1lNQk9MKHN3aW90bGJfaW5pdCk7CiBFWFBPUlRfU1lNQk9MKHN3aW90bGJfbWFwX3NpbmdsZSk7CiBFWFBPUlRfU1lNQk9MKHN3aW90bGJfdW5tYXBfc2luZ2xlKTsKIEVYUE9SVF9TWU1CT0woc3dpb3RsYl9tYXBfc2cpOwpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCBjYmFiMWRmLi4wMTcyOTAyIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpAQCAtODI1LDYgKzgyNSwxNyBAQAogCQkJYnJlYWs7CiAJCXN0ciA9IG5leHQ7CiAJfQorCisJLyoKKwkgKiBOb3cgd2UndmUgY29tZSBhbGwgdGhlIHdheSB0aHJvdWdoIHNvIGVpdGhlciB0aGUgaW5wdXQgc3RyaW5nIG9yIHRoZQorCSAqIGZvcm1hdCBlbmRlZC4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGVyZSBjYW4gYmUgYSAlbiBhdCB0aGUgY3VycmVudAorCSAqIHBvc2l0aW9uIGluIHRoZSBmb3JtYXQgdGhhdCBuZWVkcyB0byBiZSBmaWxsZWQuCisJICovCisJaWYgKCpmbXQgPT0gJyUnICYmICooZm10ICsgMSkgPT0gJ24nKSB7CisJCWludCAqcCA9IChpbnQgKil2YV9hcmcoYXJncywgaW50ICopOworCQkqcCA9IHN0ciAtIGJ1ZjsKKwl9CisKIAlyZXR1cm4gbnVtOwogfQogCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAxYWM3MThmLi44YWM0MTJiIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTE2Niw1ICsxNjYsNSBAQAogY29uZmlnIE5SX1FVSUNLCiAJaW50CiAJZGVwZW5kcyBvbiBRVUlDS0xJU1QKKwlkZWZhdWx0ICIyIiBpZiAoU1VQRVJIICYmICFTVVBFUkg2NCkKIAlkZWZhdWx0ICIxIgotCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNTYzMWQ2Yi4uZWRiMWIwYiAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtNjcwLDcgKzY3MCw4IEBACiAJcGFnZSA9IGZpbmRfbG9ja19wYWdlKG1hcHBpbmcsIGluZGV4KTsKIAlpZiAoIXBhZ2UpIHsKIAkJaWYgKCFjYWNoZWRfcGFnZSkgewotCQkJY2FjaGVkX3BhZ2UgPSBhbGxvY19wYWdlKGdmcF9tYXNrKTsKKwkJCWNhY2hlZF9wYWdlID0KKwkJCQlfX3BhZ2VfY2FjaGVfYWxsb2MoZ2ZwX21hc2spOwogCQkJaWYgKCFjYWNoZWRfcGFnZSkKIAkJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtNzUwLDYgKzc1MSw3IEBACiAJcmVhZF91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwogCXJldHVybiBpOwogfQorRVhQT1JUX1NZTUJPTChmaW5kX2dldF9wYWdlc19jb250aWcpOwogCiAvKioKICAqIGZpbmRfZ2V0X3BhZ2VzX3RhZyAtIGZpbmQgYW5kIHJldHVybiBwYWdlcyB0aGF0IG1hdGNoIEB0YWcKQEAgLTc3OCw2ICs3ODAsNyBAQAogCXJlYWRfdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChmaW5kX2dldF9wYWdlc190YWcpOwogCiAvKioKICAqIGdyYWJfY2FjaGVfcGFnZV9ub3dhaXQgLSByZXR1cm5zIGxvY2tlZCBwYWdlIGF0IGdpdmVuIGluZGV4IGluIGdpdmVuIGNhY2hlCkBAIC0xMTEwLDYgKzExMTMsNDUgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAorLyoKKyAqIFBlcmZvcm1zIG5lY2Vzc2FyeSBjaGVja3MgYmVmb3JlIGRvaW5nIGEgd3JpdGUKKyAqIEBpb3Y6CWlvIHZlY3RvciByZXF1ZXN0CisgKiBAbnJfc2VnczoJbnVtYmVyIG9mIHNlZ21lbnRzIGluIHRoZSBpb3ZlYworICogQGNvdW50OgludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqIEBhY2Nlc3NfZmxhZ3M6IHR5cGUgb2YgYWNjZXNzOiAlVkVSSUZZX1JFQUQgb3IgJVZFUklGWV9XUklURQorICoKKyAqIEFkanVzdCBudW1iZXIgb2Ygc2VnbWVudHMgYW5kIGFtb3VudCBvZiBieXRlcyB0byB3cml0ZSAobnJfc2VncyBzaG91bGQgYmUKKyAqIHByb3Blcmx5IGluaXRpYWxpemVkIGZpcnN0KS4gUmV0dXJucyBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIHRoYXQgY2FsbGVyCisgKiBzaG91bGQgcmV0dXJuIG9yIHplcm8gaW4gY2FzZSB0aGF0IHdyaXRlIHNob3VsZCBiZSBhbGxvd2VkLgorICovCitpbnQgZ2VuZXJpY19zZWdtZW50X2NoZWNrcyhjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCXVuc2lnbmVkIGxvbmcgKm5yX3NlZ3MsIHNpemVfdCAqY291bnQsIGludCBhY2Nlc3NfZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyAgIHNlZzsKKwlzaXplX3QgY250ID0gMDsKKwlmb3IgKHNlZyA9IDA7IHNlZyA8ICpucl9zZWdzOyBzZWcrKykgeworCQljb25zdCBzdHJ1Y3QgaW92ZWMgKml2ID0gJmlvdltzZWddOworCisJCS8qCisJCSAqIElmIGFueSBzZWdtZW50IGhhcyBhIG5lZ2F0aXZlIGxlbmd0aCwgb3IgdGhlIGN1bXVsYXRpdmUKKwkJICogbGVuZ3RoIGV2ZXIgd3JhcHMgbmVnYXRpdmUgdGhlbiByZXR1cm4gLUVJTlZBTC4KKwkJICovCisJCWNudCArPSBpdi0+aW92X2xlbjsKKwkJaWYgKHVubGlrZWx5KChzc2l6ZV90KShjbnR8aXYtPmlvdl9sZW4pIDwgMCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGFjY2Vzc19vayhhY2Nlc3NfZmxhZ3MsIGl2LT5pb3ZfYmFzZSwgaXYtPmlvdl9sZW4pKQorCQkJY29udGludWU7CisJCWlmIChzZWcgPT0gMCkKKwkJCXJldHVybiAtRUZBVUxUOworCQkqbnJfc2VncyA9IHNlZzsKKwkJY250IC09IGl2LT5pb3ZfbGVuOwkvKiBUaGlzIHNlZ21lbnQgaXMgbm8gZ29vZCAqLworCQlicmVhazsKKwl9CisJKmNvdW50ID0gY250OworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChnZW5lcmljX3NlZ21lbnRfY2hlY2tzKTsKKwogLyoqCiAgKiBnZW5lcmljX2ZpbGVfYWlvX3JlYWQgLSBnZW5lcmljIGZpbGVzeXN0ZW0gcmVhZCByb3V0aW5lCiAgKiBAaW9jYjoJa2VybmVsIEkvTyBjb250cm9sIGJsb2NrCkBAIC0xMTMxLDI0ICsxMTczLDkgQEAKIAlsb2ZmX3QgKnBwb3MgPSAmaW9jYi0+a2lfcG9zOwogCiAJY291bnQgPSAwOwotCWZvciAoc2VnID0gMDsgc2VnIDwgbnJfc2Vnczsgc2VnKyspIHsKLQkJY29uc3Qgc3RydWN0IGlvdmVjICppdiA9ICZpb3Zbc2VnXTsKLQotCQkvKgotCQkgKiBJZiBhbnkgc2VnbWVudCBoYXMgYSBuZWdhdGl2ZSBsZW5ndGgsIG9yIHRoZSBjdW11bGF0aXZlCi0JCSAqIGxlbmd0aCBldmVyIHdyYXBzIG5lZ2F0aXZlIHRoZW4gcmV0dXJuIC1FSU5WQUwuCi0JCSAqLwotCQljb3VudCArPSBpdi0+aW92X2xlbjsKLQkJaWYgKHVubGlrZWx5KChzc2l6ZV90KShjb3VudHxpdi0+aW92X2xlbikgPCAwKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgaXYtPmlvdl9iYXNlLCBpdi0+aW92X2xlbikpCi0JCQljb250aW51ZTsKLQkJaWYgKHNlZyA9PSAwKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCW5yX3NlZ3MgPSBzZWc7Ci0JCWNvdW50IC09IGl2LT5pb3ZfbGVuOwkvKiBUaGlzIHNlZ21lbnQgaXMgbm8gZ29vZCAqLwotCQlicmVhazsKLQl9CisJcmV0dmFsID0gZ2VuZXJpY19zZWdtZW50X2NoZWNrcyhpb3YsICZucl9zZWdzLCAmY291bnQsIFZFUklGWV9XUklURSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKIAogCS8qIGNvYWxlc2NlIHRoZSBpb3ZlY3MgYW5kIGdvIGRpcmVjdC10by1CSU8gZm9yIE9fRElSRUNUICovCiAJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX0RJUkVDVCkgewpAQCAtMTc1OCw3ICsxNzg1LDcgQEAKIHJldHJ5OgogCXBhZ2UgPSBfX3JlYWRfY2FjaGVfcGFnZShtYXBwaW5nLCBpbmRleCwgZmlsbGVyLCBkYXRhKTsKIAlpZiAoSVNfRVJSKHBhZ2UpKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIHBhZ2U7CiAJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOwogCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpCiAJCWdvdG8gb3V0OwpAQCAtMTc3Niw5ICsxODAzLDkgQEAKIAllcnIgPSBmaWxsZXIoZGF0YSwgcGFnZSk7CiAJaWYgKGVyciA8IDApIHsKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQlwYWdlID0gRVJSX1BUUihlcnIpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KLSBvdXQ6CitvdXQ6CiAJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOwogCXJldHVybiBwYWdlOwogfQpAQCAtMjIxOCwzMCArMjI0NSwxNCBAQAogCXNpemVfdCBvY291bnQ7CQkvKiBvcmlnaW5hbCBjb3VudCAqLwogCXNpemVfdCBjb3VudDsJCS8qIGFmdGVyIGZpbGUgbGltaXQgY2hlY2tzICovCiAJc3RydWN0IGlub2RlIAkqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwotCXVuc2lnbmVkIGxvbmcJc2VnOwogCWxvZmZfdAkJcG9zOwogCXNzaXplX3QJCXdyaXR0ZW47CiAJc3NpemVfdAkJZXJyOwogCiAJb2NvdW50ID0gMDsKLQlmb3IgKHNlZyA9IDA7IHNlZyA8IG5yX3NlZ3M7IHNlZysrKSB7Ci0JCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYgPSAmaW92W3NlZ107Ci0KLQkJLyoKLQkJICogSWYgYW55IHNlZ21lbnQgaGFzIGEgbmVnYXRpdmUgbGVuZ3RoLCBvciB0aGUgY3VtdWxhdGl2ZQotCQkgKiBsZW5ndGggZXZlciB3cmFwcyBuZWdhdGl2ZSB0aGVuIHJldHVybiAtRUlOVkFMLgotCQkgKi8KLQkJb2NvdW50ICs9IGl2LT5pb3ZfbGVuOwotCQlpZiAodW5saWtlbHkoKHNzaXplX3QpKG9jb3VudHxpdi0+aW92X2xlbikgPCAwKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoYWNjZXNzX29rKFZFUklGWV9SRUFELCBpdi0+aW92X2Jhc2UsIGl2LT5pb3ZfbGVuKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoc2VnID09IDApCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJbnJfc2VncyA9IHNlZzsKLQkJb2NvdW50IC09IGl2LT5pb3ZfbGVuOwkvKiBUaGlzIHNlZ21lbnQgaXMgbm8gZ29vZCAqLwotCQlicmVhazsKLQl9CisJZXJyID0gZ2VuZXJpY19zZWdtZW50X2NoZWNrcyhpb3YsICZucl9zZWdzLCAmb2NvdW50LCBWRVJJRllfUkVBRCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWNvdW50ID0gb2NvdW50OwogCXBvcyA9ICpwcG9zOwpAQCAtMjMwMSwxMCArMjMxMiwxMCBAQAogCQkgKiBzZW1hbnRpY3MuCiAJCSAqLwogCQllbmRieXRlID0gcG9zICsgd3JpdHRlbl9idWZmZXJlZCAtIHdyaXR0ZW4gLSAxOwotCQllcnIgPSBkb19zeW5jX2ZpbGVfcmFuZ2UoZmlsZSwgcG9zLCBlbmRieXRlLAotCQkJCQkgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFfAotCQkJCQkgU1lOQ19GSUxFX1JBTkdFX1dSSVRFfAotCQkJCQkgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIpOworCQllcnIgPSBkb19zeW5jX21hcHBpbmdfcmFuZ2UoZmlsZS0+Zl9tYXBwaW5nLCBwb3MsIGVuZGJ5dGUsCisJCQkJCSAgICBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkV8CisJCQkJCSAgICBTWU5DX0ZJTEVfUkFOR0VfV1JJVEV8CisJCQkJCSAgICBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUik7CiAJCWlmIChlcnIgPT0gMCkgewogCQkJd3JpdHRlbiA9IHdyaXR0ZW5fYnVmZmVyZWQ7CiAJCQlpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMobWFwcGluZywKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXBfeGlwLmMgYi9tbS9maWxlbWFwX3hpcC5jCmluZGV4IGNiYjMzNTguLmZhMzYwZTUgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXBfeGlwLmMKKysrIGIvbW0vZmlsZW1hcF94aXAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgImZpbGVtYXAuaCIKIApAQCAtNDM0LDcgKzQzNSw2IEBACiAJdW5zaWduZWQgYmxvY2tzaXplOwogCXVuc2lnbmVkIGxlbmd0aDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl2b2lkICprYWRkcjsKIAogCUJVR19PTighbWFwcGluZy0+YV9vcHMtPmdldF94aXBfcGFnZSk7CiAKQEAgLTQ1OCwxMSArNDU4LDcgQEAKIAkJZWxzZQogCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CiAJfQotCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCW1lbXNldChrYWRkciArIG9mZnNldCwgMCwgbGVuZ3RoKTsKLQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0KLQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwl6ZXJvX3VzZXJfcGFnZShwYWdlLCBvZmZzZXQsIGxlbmd0aCwgS01fVVNFUjApOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeGlwX3RydW5jYXRlX3BhZ2UpOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDM2ZGIwMTIuLmViNzE4MGQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTE0MCw2ICsxNDAsOCBAQAogCXJldHVybiBwYWdlOwogCiBmYWlsOgorCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpCisJCXJlc3ZfaHVnZV9wYWdlcysrOwogCXNwaW5fdW5sb2NrKCZodWdldGxiX2xvY2spOwogCXJldHVybiBOVUxMOwogfQpAQCAtMTcyLDYgKzE3NCwxNyBAQAogfQogX19zZXR1cCgiaHVnZXBhZ2VzPSIsIGh1Z2V0bGJfc2V0dXApOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGNwdXNldF9tZW1zX25yKHVuc2lnbmVkIGludCAqYXJyYXkpCit7CisJaW50IG5vZGU7CisJdW5zaWduZWQgaW50IG5yID0gMDsKKworCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpCisJCW5yICs9IGFycmF5W25vZGVdOworCisJcmV0dXJuIG5yOworfQorCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogc3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC04MTcsNiArODMwLDI2IEBACiAJY2hnID0gcmVnaW9uX2NoZygmaW5vZGUtPmlfbWFwcGluZy0+cHJpdmF0ZV9saXN0LCBmcm9tLCB0byk7CiAJaWYgKGNoZyA8IDApCiAJCXJldHVybiBjaGc7CisJLyoKKwkgKiBXaGVuIGNwdXNldCBpcyBjb25maWd1cmVkLCBpdCBicmVha3MgdGhlIHN0cmljdCBodWdldGxiIHBhZ2UKKwkgKiByZXNlcnZhdGlvbiBhcyB0aGUgYWNjb3VudGluZyBpcyBkb25lIG9uIGEgZ2xvYmFsIHZhcmlhYmxlLiBTdWNoCisJICogcmVzZXJ2YXRpb24gaXMgY29tcGxldGVseSBydWJiaXNoIGluIHRoZSBwcmVzZW5jZSBvZiBjcHVzZXQgYmVjYXVzZQorCSAqIHRoZSByZXNlcnZhdGlvbiBpcyBub3QgY2hlY2tlZCBhZ2FpbnN0IHBhZ2UgYXZhaWxhYmlsaXR5IGZvciB0aGUKKwkgKiBjdXJyZW50IGNwdXNldC4gQXBwbGljYXRpb24gY2FuIHN0aWxsIHBvdGVudGlhbGx5IE9PTSdlZCBieSBrZXJuZWwKKwkgKiB3aXRoIGxhY2sgb2YgZnJlZSBodGxiIHBhZ2UgaW4gY3B1c2V0IHRoYXQgdGhlIHRhc2sgaXMgaW4uCisJICogQXR0ZW1wdCB0byBlbmZvcmNlIHN0cmljdCBhY2NvdW50aW5nIHdpdGggY3B1c2V0IGlzIGFsbW9zdAorCSAqIGltcG9zc2libGUgKG9yIHRvbyB1Z2x5KSBiZWNhdXNlIGNwdXNldCBpcyB0b28gZmx1aWQgdGhhdAorCSAqIHRhc2sgb3IgbWVtb3J5IG5vZGUgY2FuIGJlIGR5bmFtaWNhbGx5IG1vdmVkIGJldHdlZW4gY3B1c2V0cy4KKwkgKgorCSAqIFRoZSBjaGFuZ2Ugb2Ygc2VtYW50aWNzIGZvciBzaGFyZWQgaHVnZXRsYiBtYXBwaW5nIHdpdGggY3B1c2V0IGlzCisJICogdW5kZXNpcmFibGUuIEhvd2V2ZXIsIGluIG9yZGVyIHRvIHByZXNlcnZlIHNvbWUgb2YgdGhlIHNlbWFudGljcywKKwkgKiB3ZSBmYWxsIGJhY2sgdG8gY2hlY2sgYWdhaW5zdCBjdXJyZW50IGZyZWUgcGFnZSBhdmFpbGFiaWxpdHkgYXMKKwkgKiBhIGJlc3QgYXR0ZW1wdCBhbmQgaG9wZWZ1bGx5IHRvIG1pbmltaXplIHRoZSBpbXBhY3Qgb2YgY2hhbmdpbmcKKwkgKiBzZW1hbnRpY3MgdGhhdCBjcHVzZXQgaGFzLgorCSAqLworCWlmIChjaGcgPiBjcHVzZXRfbWVtc19ucihmcmVlX2h1Z2VfcGFnZXNfbm9kZSkpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmV0ID0gaHVnZXRsYl9hY2N0X21lbW9yeShjaGcpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IGU3NTA5NmIuLjYwNTQyZDAgMTAwNjQ0Ci0tLSBhL21tL21hZHZpc2UuYworKysgYi9tbS9tYWR2aXNlLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKgogICogQW55IGJlaGF2aW91ciB3aGljaCByZXN1bHRzIGluIGNoYW5nZXMgdG8gdGhlIHZtYS0+dm1fZmxhZ3MgbmVlZHMgdG8KZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggMWQ2NDdhYi4uY2I5NDQ4OCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCXBhZ2UgPSB2bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB0ZSk7CiAJaWYgKHBhZ2UpIHsKIAkJZ2V0X3BhZ2UocGFnZSk7Ci0JCXBhZ2VfZHVwX3JtYXAocGFnZSk7CisJCXBhZ2VfZHVwX3JtYXAocGFnZSwgdm1hLCBhZGRyKTsKIAkJcnNzWyEhUGFnZUFub24ocGFnZSldKys7CiAJfQogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCA4NDI3OTEyLi5kZjlkNTU0IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAlpbnQgem9uZV90eXBlOwogCiAJem9uZV90eXBlID0gem9uZSAtIHBnZGF0LT5ub2RlX3pvbmVzOwotCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpIHsKKwlpZiAoIXpvbmUtPndhaXRfdGFibGUpIHsKIAkJaW50IHJldCA9IDA7CiAJCXJldCA9IGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoem9uZSwgcGh5c19zdGFydF9wZm4sCiAJCQkJCQlucl9wYWdlcywgTUVNTUFQX0hPVFBMVUcpOwpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggMzQ0NmI3ZS4uNGQzZmVhMiAxMDA2NDQKLS0tIGEvbW0vbWxvY2suYworKysgYi9tbS9tbG9jay5jCkBAIC0xMCw3ICsxMCwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCitpbnQgY2FuX2RvX21sb2NrKHZvaWQpCit7CisJaWYgKGNhcGFibGUoQ0FQX0lQQ19MT0NLKSkKKwkJcmV0dXJuIDE7CisJaWYgKGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXIgIT0gMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNhbl9kb19tbG9jayk7CiAKIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnByZXYsCiAJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGludCBuZXdmbGFncykKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCA1MjY0NmQ2Li42OGI5YWQyIDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0xMzY2LDcgKzEzNjYsNiBAQAogZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCXVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyByZXQ7CiAJdW5zaWduZWQgbG9uZyAoKmdldF9hcmVhKShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLAogCQkJCSAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAKQEAgLTE3MjEsNyArMTcyMCw3IEBACiAKIC8qCiAgKiBTcGxpdCBhIHZtYSBpbnRvIHR3byBwaWVjZXMgYXQgYWRkcmVzcyAnYWRkcicsIGEgbmV3IHZtYSBpcyBhbGxvY2F0ZWQKLSAqIGVpdGhlciBmb3IgdGhlIGZpcnN0IHBhcnQgb3IgdGhlIHRoZSB0YWlsLgorICogZWl0aGVyIGZvciB0aGUgZmlyc3QgcGFydCBvciB0aGUgdGFpbC4KICAqLwogaW50IHNwbGl0X3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKIAkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBuZXdfYmVsb3cpCmRpZmYgLS1naXQgYS9tbS9tc3luYy5jIGIvbW0vbXN5bmMuYwppbmRleCAzNThkNzNjLi4xNDRhNzU3IDEwMDY0NAotLS0gYS9tbS9tc3luYy5jCisrKyBiL21tL21zeW5jLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLyoKICAqIE1TX1NZTkMgc3luY3MgdGhlIGVudGlyZSBmaWxlIC0gaW5jbHVkaW5nIG1hcHBpbmdzLgpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggMWY2MDE5NC4uMmIxNmIwMCAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYworKysgYi9tbS9ub21tdS5jCkBAIC0yNjIsNiArMjYyLDE0IEBACiB9CiAKIC8qCisgKiBJbXBsZW1lbnQgYSBzdHViIGZvciB2bWFsbG9jX3N5bmNfYWxsKCkgaWYgdGhlIGFyY2hpdGVjdHVyZSBjaG9zZSBub3QgdG8KKyAqIGhhdmUgb25lLgorICovCit2b2lkICBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgdm1hbGxvY19zeW5jX2FsbCh2b2lkKQoreworfQorCisvKgogICogIHN5c19icmsoKSBmb3IgdGhlIG1vc3QgcGFydCBkb2Vzbid0IG5lZWQgdGhlIGdsb2JhbCBrZXJuZWwKICAqICBsb2NrLCBleGNlcHQgd2hlbiBhbiBhcHBsaWNhdGlvbiBpcyBkb2luZyBzb21ldGhpbmcgbmFzdHkKICAqICBsaWtlIHRyeWluZyB0byB1bi1icmsgYW4gYXJlYSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gbWFwcGVkCmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCAwMjlkZmFkLi5lZWMxNDgxIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTU4OCwzMSArNTg4LDI3IEBACiB9CiAKIC8qKgotICogZ2VuZXJpY193cml0ZXBhZ2VzIC0gd2FsayB0aGUgbGlzdCBvZiBkaXJ0eSBwYWdlcyBvZiB0aGUgZ2l2ZW4gYWRkcmVzcyBzcGFjZSBhbmQgd3JpdGVwYWdlKCkgYWxsIG9mIHRoZW0uCisgKiB3cml0ZV9jYWNoZV9wYWdlcyAtIHdhbGsgdGhlIGxpc3Qgb2YgZGlydHkgcGFnZXMgb2YgdGhlIGdpdmVuIGFkZHJlc3Mgc3BhY2UgYW5kIHdyaXRlIGFsbCBvZiB0aGVtLgogICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2Ugc3RydWN0dXJlIHRvIHdyaXRlCiAgKiBAd2JjOiBzdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gcGFnZXMgZnJvbSAqQHdiYy0+bnJfdG9fd3JpdGUKKyAqIEB3cml0ZXBhZ2U6IGZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCBwYWdlCisgKiBAZGF0YTogZGF0YSBwYXNzZWQgdG8gd3JpdGVwYWdlIGZ1bmN0aW9uCiAgKgotICogVGhpcyBpcyBhIGxpYnJhcnkgZnVuY3Rpb24sIHdoaWNoIGltcGxlbWVudHMgdGhlIHdyaXRlcGFnZXMoKQotICogYWRkcmVzc19zcGFjZV9vcGVyYXRpb24uCi0gKgotICogSWYgYSBwYWdlIGlzIGFscmVhZHkgdW5kZXIgSS9PLCBnZW5lcmljX3dyaXRlcGFnZXMoKSBza2lwcyBpdCwgZXZlbgorICogSWYgYSBwYWdlIGlzIGFscmVhZHkgdW5kZXIgSS9PLCB3cml0ZV9jYWNoZV9wYWdlcygpIHNraXBzIGl0LCBldmVuCiAgKiBpZiBpdCdzIGRpcnR5LiAgVGhpcyBpcyBkZXNpcmFibGUgYmVoYXZpb3VyIGZvciBtZW1vcnktY2xlYW5pbmcgd3JpdGViYWNrLAogICogYnV0IGl0IGlzIElOQ09SUkVDVCBmb3IgZGF0YS1pbnRlZ3JpdHkgc3lzdGVtIGNhbGxzIHN1Y2ggYXMgZnN5bmMoKS4gIGZzeW5jKCkKICAqIGFuZCBtc3luYygpIG5lZWQgdG8gZ3VhcmFudGVlIHRoYXQgYWxsIHRoZSBkYXRhIHdoaWNoIHdhcyBkaXJ0eSBhdCB0aGUgdGltZQogICogdGhlIGNhbGwgd2FzIG1hZGUgZ2V0IG5ldyBJL08gc3RhcnRlZCBhZ2FpbnN0IHRoZW0uICBJZiB3YmMtPnN5bmNfbW9kZSBpcwogICogV0JfU1lOQ19BTEwgdGhlbiB3ZSB3ZXJlIGNhbGxlZCBmb3IgZGF0YSBpbnRlZ3JpdHkgYW5kIHdlIG11c3Qgd2FpdCBmb3IKICAqIGV4aXN0aW5nIElPIHRvIGNvbXBsZXRlLgotICoKLSAqIERlcml2ZWQgZnJvbSBtcGFnZV93cml0ZXBhZ2VzKCkgLSBpZiB5b3UgZml4IHRoaXMgeW91IHNob3VsZCBjaGVjayB0aGF0Ci0gKiBhbHNvIQogICovCi1pbnQgZ2VuZXJpY193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkgICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCitpbnQgd3JpdGVfY2FjaGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCB3cml0ZXBhZ2VfdCB3cml0ZXBhZ2UsCisJCSAgICAgIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87CiAJaW50IHJldCA9IDA7CiAJaW50IGRvbmUgPSAwOwotCWludCAoKndyaXRlcGFnZSkoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIAlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwogCWludCBucl9wYWdlczsKIAlwZ29mZl90IGluZGV4OwpAQCAtNjI1LDEyICs2MjEsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQl3cml0ZXBhZ2UgPSBtYXBwaW5nLT5hX29wcy0+d3JpdGVwYWdlOwotCi0JLyogZGVhbCB3aXRoIGNoYXJkZXZzIGFuZCBvdGhlciBzcGVjaWFsIGZpbGUgKi8KLQlpZiAoIXdyaXRlcGFnZSkKLQkJcmV0dXJuIDA7Ci0KIAlwYWdldmVjX2luaXQoJnB2ZWMsIDApOwogCWlmICh3YmMtPnJhbmdlX2N5Y2xpYykgewogCQlpbmRleCA9IG1hcHBpbmctPndyaXRlYmFja19pbmRleDsgLyogU3RhcnQgZnJvbSBwcmV2IG9mZnNldCAqLwpAQCAtNjgyLDEzICs2NzIsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQlyZXQgPSAoKndyaXRlcGFnZSkocGFnZSwgd2JjKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlpZiAocmV0ID09IC1FTk9TUEMpCi0JCQkJCXNldF9iaXQoQVNfRU5PU1BDLCAmbWFwcGluZy0+ZmxhZ3MpOwotCQkJCWVsc2UKLQkJCQkJc2V0X2JpdChBU19FSU8sICZtYXBwaW5nLT5mbGFncyk7Ci0JCQl9CisJCQlyZXQgPSAoKndyaXRlcGFnZSkocGFnZSwgd2JjLCBkYXRhKTsKIAogCQkJaWYgKHVubGlrZWx5KHJldCA9PSBBT1BfV1JJVEVQQUdFX0FDVElWQVRFKSkKIAkJCQl1bmxvY2tfcGFnZShwYWdlKTsKQEAgLTcxNSw2ICs2OTksMzggQEAKIAkJbWFwcGluZy0+d3JpdGViYWNrX2luZGV4ID0gaW5kZXg7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0wod3JpdGVfY2FjaGVfcGFnZXMpOworCisvKgorICogRnVuY3Rpb24gdXNlZCBieSBnZW5lcmljX3dyaXRlcGFnZXMgdG8gY2FsbCB0aGUgcmVhbCB3cml0ZXBhZ2UKKyAqIGZ1bmN0aW9uIGFuZCBzZXQgdGhlIG1hcHBpbmcgZmxhZ3Mgb24gZXJyb3IKKyAqLworc3RhdGljIGludCBfX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCisJCSAgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZGF0YTsKKwlpbnQgcmV0ID0gbWFwcGluZy0+YV9vcHMtPndyaXRlcGFnZShwYWdlLCB3YmMpOworCW1hcHBpbmdfc2V0X2Vycm9yKG1hcHBpbmcsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnZW5lcmljX3dyaXRlcGFnZXMgLSB3YWxrIHRoZSBsaXN0IG9mIGRpcnR5IHBhZ2VzIG9mIHRoZSBnaXZlbiBhZGRyZXNzIHNwYWNlIGFuZCB3cml0ZXBhZ2UoKSBhbGwgb2YgdGhlbS4KKyAqIEBtYXBwaW5nOiBhZGRyZXNzIHNwYWNlIHN0cnVjdHVyZSB0byB3cml0ZQorICogQHdiYzogc3VidHJhY3QgdGhlIG51bWJlciBvZiB3cml0dGVuIHBhZ2VzIGZyb20gKkB3YmMtPm5yX3RvX3dyaXRlCisgKgorICogVGhpcyBpcyBhIGxpYnJhcnkgZnVuY3Rpb24sIHdoaWNoIGltcGxlbWVudHMgdGhlIHdyaXRlcGFnZXMoKQorICogYWRkcmVzc19zcGFjZV9vcGVyYXRpb24uCisgKi8KK2ludCBnZW5lcmljX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCSAgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3sKKwkvKiBkZWFsIHdpdGggY2hhcmRldnMgYW5kIG90aGVyIHNwZWNpYWwgZmlsZSAqLworCWlmICghbWFwcGluZy0+YV9vcHMtPndyaXRlcGFnZSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gd3JpdGVfY2FjaGVfcGFnZXMobWFwcGluZywgd2JjLCBfX3dyaXRlcGFnZSwgbWFwcGluZyk7Cit9CiAKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY193cml0ZXBhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDU5MTY0MzEuLmJkOGUzMzUgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCiB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgbnJfa2VybmVsX3BhZ2VzOwogdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIG5yX2FsbF9wYWdlczsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgZG1hX3Jlc2VydmU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIGRtYV9yZXNlcnZlOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQCiAgIC8qCkBAIC0xMjYsMTYgKzEyNiwyMSBAQAogICAgICNlbmRpZgogICAjZW5kaWYKIAotICBzdHJ1Y3Qgbm9kZV9hY3RpdmVfcmVnaW9uIF9faW5pdGRhdGEgZWFybHlfbm9kZV9tYXBbTUFYX0FDVElWRV9SRUdJT05TXTsKLSAgaW50IF9faW5pdGRhdGEgbnJfbm9kZW1hcF9lbnRyaWVzOwotICB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm5bTUFYX05SX1pPTkVTXTsKLSAgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3BmbltNQVhfTlJfWk9ORVNdOworICBzdHJ1Y3Qgbm9kZV9hY3RpdmVfcmVnaW9uIF9fbWVtaW5pdGRhdGEgZWFybHlfbm9kZV9tYXBbTUFYX0FDVElWRV9SRUdJT05TXTsKKyAgaW50IF9fbWVtaW5pdGRhdGEgbnJfbm9kZW1hcF9lbnRyaWVzOworICB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm5bTUFYX05SX1pPTkVTXTsKKyAgdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3BmbltNQVhfTlJfWk9ORVNdOwogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR19SRVNFUlZFCiAgIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBub2RlX2JvdW5kYXJ5X3N0YXJ0X3BmbltNQVhfTlVNTk9ERVNdOwogICB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbm9kZV9ib3VuZGFyeV9lbmRfcGZuW01BWF9OVU1OT0RFU107CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHX1JFU0VSVkUgKi8KICNlbmRpZiAvKiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVAgKi8KIAorI2lmIE1BWF9OVU1OT0RFUyA+IDEKK2ludCBucl9ub2RlX2lkcyBfX3JlYWRfbW9zdGx5ID0gTUFYX05VTU5PREVTOworRVhQT1JUX1NZTUJPTChucl9ub2RlX2lkcyk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19ERUJVR19WTQogc3RhdGljIGludCBwYWdlX291dHNpZGVfem9uZV9ib3VuZGFyaWVzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKQEAgLTY2OSw2NSArNjc0LDI4IEBACiAJcmV0dXJuIGk7CiB9CiAKLSNpZiBNQVhfTlVNTk9ERVMgPiAxCi1pbnQgbnJfbm9kZV9pZHMgX19yZWFkX21vc3RseSA9IE1BWF9OVU1OT0RFUzsKLUVYUE9SVF9TWU1CT0wobnJfbm9kZV9pZHMpOwotCi0vKgotICogRmlndXJlIG91dCB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIG5vZGUgaWRzLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbnJfbm9kZV9pZHModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgbm9kZTsKLQl1bnNpZ25lZCBpbnQgaGlnaGVzdCA9IDA7Ci0KLQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZV9wb3NzaWJsZV9tYXApCi0JCWhpZ2hlc3QgPSBub2RlOwotCW5yX25vZGVfaWRzID0gaGlnaGVzdCArIDE7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX25yX25vZGVfaWRzKHZvaWQpIHt9Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19OVU1BCiAvKgotICogQ2FsbGVkIGZyb20gdGhlIHNsYWIgcmVhcGVyIHRvIGRyYWluIHBhZ2VzZXRzIG9uIGEgcGFydGljdWxhciBub2RlIHRoYXQKLSAqIGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcHJvY2Vzc29yLgorICogQ2FsbGVkIGZyb20gdGhlIHZtc3RhdCBjb3VudGVyIHVwZGF0ZXIgdG8gZHJhaW4gcGFnZXNldHMgb2YgdGhpcworICogY3VycmVudGx5IGV4ZWN1dGluZyBwcm9jZXNzb3Igb24gcmVtb3RlIG5vZGVzIGFmdGVyIHRoZXkgaGF2ZQorICogZXhwaXJlZC4KKyAqCiAgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSB0aHJlYWQgcGlubmVkIHRvCiAgKiBhIHNpbmdsZSBwcm9jZXNzb3IuCiAgKi8KLXZvaWQgZHJhaW5fbm9kZV9wYWdlcyhpbnQgbm9kZWlkKQordm9pZCBkcmFpbl96b25lX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwKQogewotCWludCBpOwotCWVudW0gem9uZV90eXBlIHo7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdG9fZHJhaW47CiAKLQlmb3IgKHogPSAwOyB6IDwgTUFYX05SX1pPTkVTOyB6KyspIHsKLQkJc3RydWN0IHpvbmUgKnpvbmUgPSBOT0RFX0RBVEEobm9kZWlkKS0+bm9kZV96b25lcyArIHo7Ci0JCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzZXQ7Ci0KLQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKLQkJCWNvbnRpbnVlOwotCi0JCXBzZXQgPSB6b25lX3BjcCh6b25lLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwc2V0LT5wY3ApOyBpKyspIHsKLQkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7Ci0KLQkJCXBjcCA9ICZwc2V0LT5wY3BbaV07Ci0JCQlpZiAocGNwLT5jb3VudCkgewotCQkJCWludCB0b19kcmFpbjsKLQotCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCQlpZiAocGNwLT5jb3VudCA+PSBwY3AtPmJhdGNoKQotCQkJCQl0b19kcmFpbiA9IHBjcC0+YmF0Y2g7Ci0JCQkJZWxzZQotCQkJCQl0b19kcmFpbiA9IHBjcC0+Y291bnQ7Ci0JCQkJZnJlZV9wYWdlc19idWxrKHpvbmUsIHRvX2RyYWluLCAmcGNwLT5saXN0LCAwKTsKLQkJCQlwY3AtPmNvdW50IC09IHRvX2RyYWluOwotCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJCX0KLQkJfQotCX0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKHBjcC0+Y291bnQgPj0gcGNwLT5iYXRjaCkKKwkJdG9fZHJhaW4gPSBwY3AtPmJhdGNoOworCWVsc2UKKwkJdG9fZHJhaW4gPSBwY3AtPmNvdW50OworCWZyZWVfcGFnZXNfYnVsayh6b25lLCB0b19kcmFpbiwgJnBjcC0+bGlzdCwgMCk7CisJcGNwLT5jb3VudCAtPSB0b19kcmFpbjsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAjZW5kaWYKIApAQCAtMjE0OCwxMSArMjExNiwxNCBAQAogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIENQVV9VUF9QUkVQQVJFOgorCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgogCQlpZiAocHJvY2Vzc196b25lcyhjcHUpKQogCQkJcmV0ID0gTk9USUZZX0JBRDsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CisJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgogCWNhc2UgQ1BVX0RFQUQ6CisJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCWZyZWVfem9uZV9wYWdlc2V0cyhjcHUpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjE3OSw3ICsyMTUwLDcgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBfX21lbWluaXQKK3N0YXRpYyBub2lubGluZSBfX2luaXRfcmVmb2sKIGludCB6b25lX3dhaXRfdGFibGVfaW5pdChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyB6b25lX3NpemVfcGFnZXMpCiB7CiAJaW50IGk7CkBAIC0yMjY3LDcgKzIyMzgsNyBAQAogICogQmFzaWMgaXRlcmF0b3Igc3VwcG9ydC4gUmV0dXJuIHRoZSBmaXJzdCByYW5nZSBvZiBQRk5zIGZvciBhIG5vZGUKICAqIE5vdGU6IG5pZCA9PSBNQVhfTlVNTk9ERVMgcmV0dXJucyBmaXJzdCByZWdpb24gcmVnYXJkbGVzcyBvZiBub2RlCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGZpcnN0X2FjdGl2ZV9yZWdpb25faW5kZXhfaW5fbmlkKGludCBuaWQpCitzdGF0aWMgaW50IF9fbWVtaW5pdCBmaXJzdF9hY3RpdmVfcmVnaW9uX2luZGV4X2luX25pZChpbnQgbmlkKQogewogCWludCBpOwogCkBAIC0yMjgyLDcgKzIyNTMsNyBAQAogICogQmFzaWMgaXRlcmF0b3Igc3VwcG9ydC4gUmV0dXJuIHRoZSBuZXh0IGFjdGl2ZSByYW5nZSBvZiBQRk5zIGZvciBhIG5vZGUKICAqIE5vdGU6IG5pZCA9PSBNQVhfTlVNTk9ERVMgcmV0dXJucyBuZXh0IHJlZ2lvbiByZWdhcmRsZXMgb2Ygbm9kZQogICovCi1zdGF0aWMgaW50IF9faW5pdCBuZXh0X2FjdGl2ZV9yZWdpb25faW5kZXhfaW5fbmlkKGludCBpbmRleCwgaW50IG5pZCkKK3N0YXRpYyBpbnQgX19tZW1pbml0IG5leHRfYWN0aXZlX3JlZ2lvbl9pbmRleF9pbl9uaWQoaW50IGluZGV4LCBpbnQgbmlkKQogewogCWZvciAoaW5kZXggPSBpbmRleCArIDE7IGluZGV4IDwgbnJfbm9kZW1hcF9lbnRyaWVzOyBpbmRleCsrKQogCQlpZiAobmlkID09IE1BWF9OVU1OT0RFUyB8fCBlYXJseV9ub2RlX21hcFtpbmRleF0ubmlkID09IG5pZCkKQEAgLTIyOTgsNyArMjI2OSw3IEBACiAgKiB3YXMgdXNlZCBhbmQgdGhlcmUgYXJlIG5vIHNwZWNpYWwgcmVxdWlyZW1lbnRzLCB0aGlzIGlzIGEgY29udmVuaWVudAogICogYWx0ZXJuYXRpdmUKICAqLwotaW50IF9faW5pdCBlYXJseV9wZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKQoraW50IF9fbWVtaW5pdCBlYXJseV9wZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKQogewogCWludCBpOwogCkBAIC0yNDM1LDcgKzI0MDYsNyBAQAogICogd2l0aCBubyBhdmFpbGFibGUgbWVtb3J5LCBhIHdhcm5pbmcgaXMgcHJpbnRlZCBhbmQgdGhlIHN0YXJ0IGFuZCBlbmQKICAqIFBGTnMgd2lsbCBiZSAwLgogICovCi12b2lkIF9faW5pdCBnZXRfcGZuX3JhbmdlX2Zvcl9uaWQodW5zaWduZWQgaW50IG5pZCwKK3ZvaWQgX19tZW1pbml0IGdldF9wZm5fcmFuZ2VfZm9yX25pZCh1bnNpZ25lZCBpbnQgbmlkLAogCQkJdW5zaWduZWQgbG9uZyAqc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nICplbmRfcGZuKQogewogCWludCBpOwpAQCAtMjQ2MCw3ICsyNDMxLDcgQEAKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGEgem9uZSBzcGFucyBpbiBhIG5vZGUsIGluY2x1ZGluZyBob2xlcwogICogcHJlc2VudF9wYWdlcyA9IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKCkgLSB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKCkKICAqLwotdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoaW50IG5pZCwKK3Vuc2lnbmVkIGxvbmcgX19tZW1pbml0IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKGludCBuaWQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgem9uZV90eXBlLAogCQkJCQl1bnNpZ25lZCBsb25nICppZ25vcmVkKQogewpAQCAtMjQ4OCw3ICsyNDU5LDcgQEAKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGhvbGVzIGluIGEgcmFuZ2Ugb24gYSBub2RlLiBJZiBuaWQgaXMgTUFYX05VTU5PREVTLAogICogdGhlbiBhbGwgaG9sZXMgaW4gdGhlIHJlcXVlc3RlZCByYW5nZSB3aWxsIGJlIGFjY291bnRlZCBmb3IuCiAgKi8KLXVuc2lnbmVkIGxvbmcgX19pbml0IF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKGludCBuaWQsCit1bnNpZ25lZCBsb25nIF9fbWVtaW5pdCBfX2Fic2VudF9wYWdlc19pbl9yYW5nZShpbnQgbmlkLAogCQkJCXVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnRfcGZuLAogCQkJCXVuc2lnbmVkIGxvbmcgcmFuZ2VfZW5kX3BmbikKIHsKQEAgLTI1NDgsNyArMjUxOSw3IEBACiB9CiAKIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2UgZnJhbWVzIGluIGhvbGVzIGluIGEgem9uZSBvbiBhIG5vZGUgKi8KLXVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoaW50IG5pZCwKK3Vuc2lnbmVkIGxvbmcgX19tZW1pbml0IHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoaW50IG5pZCwKIAkJCQkJdW5zaWduZWQgbG9uZyB6b25lX3R5cGUsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKmlnbm9yZWQpCiB7CkBAIC0yNTg0LDcgKzI1NTUsNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKK3N0YXRpYyB2b2lkIF9fbWVtaW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCiAJCXVuc2lnbmVkIGxvbmcgKnpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgKnpob2xlc19zaXplKQogewogCXVuc2lnbmVkIGxvbmcgcmVhbHRvdGFscGFnZXMsIHRvdGFscGFnZXMgPSAwOwpAQCAtMjY5Miw3ICsyNjYzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhbGxvY19ub2RlX21lbV9tYXAoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKK3N0YXRpYyB2b2lkIF9faW5pdF9yZWZvayBhbGxvY19ub2RlX21lbV9tYXAoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKIHsKIAkvKiBTa2lwIGVtcHR5IG5vZGVzICovCiAJaWYgKCFwZ2RhdC0+bm9kZV9zcGFubmVkX3BhZ2VzKQpAQCAtMjcxOCw3ICsyNjg5LDcgQEAKIAkJCW1hcCA9IGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgc2l6ZSk7CiAJCXBnZGF0LT5ub2RlX21lbV9tYXAgPSBtYXAgKyAocGdkYXQtPm5vZGVfc3RhcnRfcGZuIC0gc3RhcnQpOwogCX0KLSNpZmRlZiBDT05GSUdfRkxBVE1FTQorI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwogCS8qCiAJICogV2l0aCBubyBESVNDT05USUcsIHRoZSBnbG9iYWwgbWVtX21hcCBpcyBqdXN0IHNldCBhcyBub2RlIDAncwogCSAqLwpAQCAtMjc0Nyw2ICsyNzE4LDI2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVAKKworI2lmIE1BWF9OVU1OT0RFUyA+IDEKKy8qCisgKiBGaWd1cmUgb3V0IHRoZSBudW1iZXIgb2YgcG9zc2libGUgbm9kZSBpZHMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ucl9ub2RlX2lkcyh2b2lkKQoreworCXVuc2lnbmVkIGludCBub2RlOworCXVuc2lnbmVkIGludCBoaWdoZXN0ID0gMDsKKworCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlX3Bvc3NpYmxlX21hcCkKKwkJaGlnaGVzdCA9IG5vZGU7CisJbnJfbm9kZV9pZHMgPSBoaWdoZXN0ICsgMTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbnJfbm9kZV9pZHModm9pZCkKK3sKK30KKyNlbmRpZgorCiAvKioKICAqIGFkZF9hY3RpdmVfcmFuZ2UgLSBSZWdpc3RlciBhIHJhbmdlIG9mIFBGTnMgYmFja2VkIGJ5IHBoeXNpY2FsIG1lbW9yeQogICogQG5pZDogVGhlIG5vZGUgSUQgdGhlIHJhbmdlIHJlc2lkZXMgb24KQEAgLTMwMTIsNyArMzAwMyw3IEBACiB7CiAJaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CiAKLQlpZiAoYWN0aW9uID09IENQVV9ERUFEKSB7CisJaWYgKGFjdGlvbiA9PSBDUFVfREVBRCB8fCBhY3Rpb24gPT0gQ1BVX0RFQURfRlJPWkVOKSB7CiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCV9fZHJhaW5fcGFnZXMoY3B1KTsKIAkJdm1fZXZlbnRzX2ZvbGRfY3B1KGNwdSk7CmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggNzVhMzJiZS4uODUwMTY1ZCAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtMTYyLDEyICsxNjIsMTAgQEAKIHN0YXRpYyB2b2lkIGFub25fdm1hX2N0b3Iodm9pZCAqZGF0YSwgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKIAkJCSAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGRhdGE7CisJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGRhdGE7CiAKLQkJc3Bpbl9sb2NrX2luaXQoJmFub25fdm1hLT5sb2NrKTsKLQkJSU5JVF9MSVNUX0hFQUQoJmFub25fdm1hLT5oZWFkKTsKLQl9CisJc3Bpbl9sb2NrX2luaXQoJmFub25fdm1hLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmYW5vbl92bWEtPmhlYWQpOwogfQogCiB2b2lkIF9faW5pdCBhbm9uX3ZtYV9pbml0KHZvaWQpCkBAIC01MDUsNiArNTAzLDcgQEAKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwYWdlX21rY2xlYW4pOwogCiAvKioKICAqIHBhZ2Vfc2V0X2Fub25fcm1hcCAtIHNldHVwIG5ldyBhbm9ueW1vdXMgcm1hcApAQCAtNTMxLDE5ICs1MzAsNTEgQEAKIH0KIAogLyoqCisgKiBwYWdlX3NldF9hbm9uX3JtYXAgLSBzYW5pdHkgY2hlY2sgYW5vbnltb3VzIHJtYXAgYWRkaXRpb24KKyAqIEBwYWdlOgl0aGUgcGFnZSB0byBhZGQgdGhlIG1hcHBpbmcgdG8KKyAqIEB2bWE6CXRoZSB2bSBhcmVhIGluIHdoaWNoIHRoZSBtYXBwaW5nIGlzIGFkZGVkCisgKiBAYWRkcmVzczoJdGhlIHVzZXIgdmlydHVhbCBhZGRyZXNzIG1hcHBlZAorICovCitzdGF0aWMgdm9pZCBfX3BhZ2VfY2hlY2tfYW5vbl9ybWFwKHN0cnVjdCBwYWdlICpwYWdlLAorCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCisJLyoKKwkgKiBUaGUgcGFnZSdzIGFub24tcm1hcCBkZXRhaWxzIChtYXBwaW5nIGFuZCBpbmRleCkgYXJlIGd1YXJhbnRlZWQgdG8KKwkgKiBiZSBzZXQgdXAgY29ycmVjdGx5IGF0IHRoaXMgcG9pbnQuCisJICoKKwkgKiBXZSBoYXZlIGV4Y2x1c2lvbiBhZ2FpbnN0IHBhZ2VfYWRkX2Fub25fcm1hcCBiZWNhdXNlIHRoZSBjYWxsZXIKKwkgKiBhbHdheXMgaG9sZHMgdGhlIHBhZ2UgbG9ja2VkLCBleGNlcHQgaWYgY2FsbGVkIGZyb20gcGFnZV9kdXBfcm1hcCwKKwkgKiBpbiB3aGljaCBjYXNlIHRoZSBwYWdlIGlzIGFscmVhZHkga25vd24gdG8gYmUgc2V0dXAuCisJICoKKwkgKiBXZSBoYXZlIGV4Y2x1c2lvbiBhZ2FpbnN0IHBhZ2VfYWRkX25ld19hbm9uX3JtYXAgYmVjYXVzZSB0aG9zZSBwYWdlcworCSAqIGFyZSBpbml0aWFsbHkgb25seSB2aXNpYmxlIHZpYSB0aGUgcGFnZXRhYmxlcywgYW5kIHRoZSBwdGUgaXMgbG9ja2VkCisJICogb3ZlciB0aGUgY2FsbCB0byBwYWdlX2FkZF9uZXdfYW5vbl9ybWFwLgorCSAqLworCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOworCWFub25fdm1hID0gKHZvaWQgKikgYW5vbl92bWEgKyBQQUdFX01BUFBJTkdfQU5PTjsKKwlCVUdfT04ocGFnZS0+bWFwcGluZyAhPSAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKilhbm9uX3ZtYSk7CisJQlVHX09OKHBhZ2UtPmluZGV4ICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykpOworI2VuZGlmCit9CisKKy8qKgogICogcGFnZV9hZGRfYW5vbl9ybWFwIC0gYWRkIHB0ZSBtYXBwaW5nIHRvIGFuIGFub255bW91cyBwYWdlCiAgKiBAcGFnZToJdGhlIHBhZ2UgdG8gYWRkIHRoZSBtYXBwaW5nIHRvCiAgKiBAdm1hOgl0aGUgdm0gYXJlYSBpbiB3aGljaCB0aGUgbWFwcGluZyBpcyBhZGRlZAogICogQGFkZHJlc3M6CXRoZSB1c2VyIHZpcnR1YWwgYWRkcmVzcyBtYXBwZWQKICAqCi0gKiBUaGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIHB0ZSBsb2NrLgorICogVGhlIGNhbGxlciBuZWVkcyB0byBob2xkIHRoZSBwdGUgbG9jayBhbmQgdGhlIHBhZ2UgbXVzdCBiZSBsb2NrZWQuCiAgKi8KIHZvaWQgcGFnZV9hZGRfYW5vbl9ybWFwKHN0cnVjdCBwYWdlICpwYWdlLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CisJVk1fQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwlWTV9CVUdfT04oYWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQgfHwgYWRkcmVzcyA+PSB2bWEtPnZtX2VuZCk7CiAJaWYgKGF0b21pY19pbmNfYW5kX3Rlc3QoJnBhZ2UtPl9tYXBjb3VudCkpCiAJCV9fcGFnZV9zZXRfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7Ci0JLyogZWxzZSBjaGVja2luZyBwYWdlIGluZGV4IGFuZCBtYXBwaW5nIGlzIHJhY3kgKi8KKwllbHNlCisJCV9fcGFnZV9jaGVja19hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKIH0KIAogLyoKQEAgLTU1NCwxMCArNTg1LDEyIEBACiAgKgogICogU2FtZSBhcyBwYWdlX2FkZF9hbm9uX3JtYXAgYnV0IG11c3Qgb25seSBiZSBjYWxsZWQgb24gKm5ldyogcGFnZXMuCiAgKiBUaGlzIG1lYW5zIHRoZSBpbmMtYW5kLXRlc3QgY2FuIGJlIGJ5cGFzc2VkLgorICogUGFnZSBkb2VzIG5vdCBoYXZlIHRvIGJlIGxvY2tlZC4KICAqLwogdm9pZCBwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKHN0cnVjdCBwYWdlICpwYWdlLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CisJQlVHX09OKGFkZHJlc3MgPCB2bWEtPnZtX3N0YXJ0IHx8IGFkZHJlc3MgPj0gdm1hLT52bV9lbmQpOwogCWF0b21pY19zZXQoJnBhZ2UtPl9tYXBjb3VudCwgMCk7IC8qIGVsZXZhdGUgY291bnQgYnkgMSAoc3RhcnRzIGF0IC0xKSAqLwogCV9fcGFnZV9zZXRfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiB9CkBAIC01NzQsNiArNjA3LDI2IEBACiAJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX01BUFBFRCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KKy8qKgorICogcGFnZV9kdXBfcm1hcCAtIGR1cGxpY2F0ZSBwdGUgbWFwcGluZyB0byBhIHBhZ2UKKyAqIEBwYWdlOgl0aGUgcGFnZSB0byBhZGQgdGhlIG1hcHBpbmcgdG8KKyAqCisgKiBGb3IgY29weV9wYWdlX3JhbmdlIG9ubHk6IG1pbmltYWwgZXh0cmFjdCBmcm9tIHBhZ2VfYWRkX2ZpbGVfcm1hcCAvCisgKiBwYWdlX2FkZF9hbm9uX3JtYXAsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHRlc3RzIChhbHJlYWR5IGNoZWNrZWQpIHNvIGl0J3MKKyAqIHF1aWNrZXIuCisgKgorICogVGhlIGNhbGxlciBuZWVkcyB0byBob2xkIHRoZSBwdGUgbG9jay4KKyAqLwordm9pZCBwYWdlX2R1cF9ybWFwKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCUJVR19PTihwYWdlX21hcGNvdW50KHBhZ2UpID09IDApOworCWlmIChQYWdlQW5vbihwYWdlKSkKKwkJX19wYWdlX2NoZWNrX2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MpOworCWF0b21pY19pbmMoJnBhZ2UtPl9tYXBjb3VudCk7Cit9CisjZW5kaWYKKwogLyoqCiAgKiBwYWdlX3JlbW92ZV9ybWFwIC0gdGFrZSBkb3duIHB0ZSBtYXBwaW5nIGZyb20gYSBwYWdlCiAgKiBAcGFnZTogcGFnZSB0byByZW1vdmUgbWFwcGluZyBmcm9tCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCBmMDFlOGRlLi5lNTM3MzE3IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCisrKyBiL21tL3NobWVtLmMKQEAgLTIzNTgsMTMgKzIzNTgsMTEgQEAKIHsKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqcCA9IChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqKSBmb287CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJaW5vZGVfaW5pdF9vbmNlKCZwLT52ZnNfaW5vZGUpOworCWlub2RlX2luaXRfb25jZSgmcC0+dmZzX2lub2RlKTsKICNpZmRlZiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMCi0JCXAtPmlfYWNsID0gTlVMTDsKLQkJcC0+aV9kZWZhdWx0X2FjbCA9IE5VTEw7CisJcC0+aV9hY2wgPSBOVUxMOworCXAtPmlfZGVmYXVsdF9hY2wgPSBOVUxMOwogI2VuZGlmCi0JfQogfQogCiBzdGF0aWMgaW50IGluaXRfaW5vZGVjYWNoZSh2b2lkKQpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IDU5MjBhNDEuLjJlNzFhMzIgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTE0OCwxMCArMTQ4LDExIEBACiAgKiBVc3VhbGx5LCB0aGUga21hbGxvYyBjYWNoZXMgYXJlIGNhY2hlX2xpbmVfc2l6ZSgpIGFsaWduZWQsIGV4Y2VwdCB3aGVuCiAgKiBERUJVRyBhbmQgRk9SQ0VEX0RFQlVHIGFyZSBlbmFibGVkLCB0aGVuIHRoZXkgYXJlIEJZVEVTX1BFUl9XT1JEIGFsaWduZWQuCiAgKiBTb21lIGFyY2hzIHdhbnQgdG8gcGVyZm9ybSBETUEgaW50byBrbWFsbG9jIGNhY2hlcyBhbmQgbmVlZCBhIGd1YXJhbnRlZWQKLSAqIGFsaWdubWVudCBsYXJnZXIgdGhhbiBCWVRFU19QRVJfV09SRC4gQVJDSF9LTUFMTE9DX01JTkFMSUdOIGFsbG93cyB0aGF0LgotICogTm90ZSB0aGF0IHRoaXMgZmxhZyBkaXNhYmxlcyBzb21lIGRlYnVnIGZlYXR1cmVzLgorICogYWxpZ25tZW50IGxhcmdlciB0aGFuIHRoZSBhbGlnbm1lbnQgb2YgYSA2NC1iaXQgaW50ZWdlci4KKyAqIEFSQ0hfS01BTExPQ19NSU5BTElHTiBhbGxvd3MgdGhhdC4KKyAqIE5vdGUgdGhhdCBpbmNyZWFzaW5nIHRoaXMgdmFsdWUgbWF5IGRpc2FibGUgc29tZSBkZWJ1ZyBmZWF0dXJlcy4KICAqLwotI2RlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04gMAorI2RlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04gX19hbGlnbm9mX18odW5zaWduZWQgbG9uZyBsb25nKQogI2VuZGlmCiAKICNpZm5kZWYgQVJDSF9TTEFCX01JTkFMSUdOCkBAIC00MDgsOSArNDA5LDYgQEAKIAkvKiBjb25zdHJ1Y3RvciBmdW5jICovCiAJdm9pZCAoKmN0b3IpICh2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpOwogCi0JLyogZGUtY29uc3RydWN0b3IgZnVuYyAqLwotCXZvaWQgKCpkdG9yKSAodm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNoZSAqLCB1bnNpZ25lZCBsb25nKTsKLQogLyogNSkgY2FjaGUgY3JlYXRpb24vcmVtb3ZhbCAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGxpc3RfaGVhZCBuZXh0OwpAQCAtNTM2LDE5ICs1MzQsMjIgQEAKIAlyZXR1cm4gY2FjaGVwLT5vYmpfc2l6ZTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgKmRiZ19yZWR6b25lMShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpvYmpwKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqZGJnX3JlZHpvbmUxKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKm9ianApCiB7CiAJQlVHX09OKCEoY2FjaGVwLT5mbGFncyAmIFNMQUJfUkVEX1pPTkUpKTsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcqKSAob2JqcCtvYmpfb2Zmc2V0KGNhY2hlcCktQllURVNfUEVSX1dPUkQpOworCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKikgKG9ianAgKyBvYmpfb2Zmc2V0KGNhY2hlcCkgLQorCQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgKmRiZ19yZWR6b25lMihzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpvYmpwKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqZGJnX3JlZHpvbmUyKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKm9ianApCiB7CiAJQlVHX09OKCEoY2FjaGVwLT5mbGFncyAmIFNMQUJfUkVEX1pPTkUpKTsKIAlpZiAoY2FjaGVwLT5mbGFncyAmIFNMQUJfU1RPUkVfVVNFUikKLQkJcmV0dXJuICh1bnNpZ25lZCBsb25nICopKG9ianAgKyBjYWNoZXAtPmJ1ZmZlcl9zaXplIC0KLQkJCQkJIDIgKiBCWVRFU19QRVJfV09SRCk7Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nICopKG9ianAgKyBjYWNoZXAtPmJ1ZmZlcl9zaXplIC0gQllURVNfUEVSX1dPUkQpOworCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShvYmpwICsgY2FjaGVwLT5idWZmZXJfc2l6ZSAtCisJCQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpIC0KKwkJCQkJICAgICAgQllURVNfUEVSX1dPUkQpOworCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nICopIChvYmpwICsgY2FjaGVwLT5idWZmZXJfc2l6ZSAtCisJCQkJICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKIH0KIAogc3RhdGljIHZvaWQgKipkYmdfdXNlcndvcmQoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqb2JqcCkKQEAgLTU2MSwyOCArNTYyLDEzIEBACiAKICNkZWZpbmUgb2JqX29mZnNldCh4KQkJCTAKICNkZWZpbmUgb2JqX3NpemUoY2FjaGVwKQkJKGNhY2hlcC0+YnVmZmVyX3NpemUpCi0jZGVmaW5lIGRiZ19yZWR6b25lMShjYWNoZXAsIG9ianApCSh7QlVHKCk7ICh1bnNpZ25lZCBsb25nICopTlVMTDt9KQotI2RlZmluZSBkYmdfcmVkem9uZTIoY2FjaGVwLCBvYmpwKQkoe0JVRygpOyAodW5zaWduZWQgbG9uZyAqKU5VTEw7fSkKKyNkZWZpbmUgZGJnX3JlZHpvbmUxKGNhY2hlcCwgb2JqcCkJKHtCVUcoKTsgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKU5VTEw7fSkKKyNkZWZpbmUgZGJnX3JlZHpvbmUyKGNhY2hlcCwgb2JqcCkJKHtCVUcoKTsgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKU5VTEw7fSkKICNkZWZpbmUgZGJnX3VzZXJ3b3JkKGNhY2hlcCwgb2JqcCkJKHtCVUcoKTsgKHZvaWQgKiopTlVMTDt9KQogCiAjZW5kaWYKIAogLyoKLSAqIE1heGltdW0gc2l6ZSBvZiBhbiBvYmogKGluIDJeb3JkZXIgcGFnZXMpIGFuZCBhYnNvbHV0ZSBsaW1pdCBmb3IgdGhlIGdmcAotICogb3JkZXIuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19MQVJHRV9BTExPQ1MpCi0jZGVmaW5lCU1BWF9PQkpfT1JERVIJMTMJLyogdXAgdG8gMzJNYiAqLwotI2RlZmluZQlNQVhfR0ZQX09SREVSCTEzCS8qIHVwIHRvIDMyTWIgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX01NVSkKLSNkZWZpbmUJTUFYX09CSl9PUkRFUgk1CS8qIDMyIHBhZ2VzICovCi0jZGVmaW5lCU1BWF9HRlBfT1JERVIJNQkvKiAzMiBwYWdlcyAqLwotI2Vsc2UKLSNkZWZpbmUJTUFYX09CSl9PUkRFUgk4CS8qIHVwIHRvIDFNYiAqLwotI2RlZmluZQlNQVhfR0ZQX09SREVSCTgJLyogdXAgdG8gMU1iICovCi0jZW5kaWYKLQotLyoKICAqIERvIG5vdCBnbyBhYm92ZSB0aGlzIG9yZGVyIHVubGVzcyAwIG9iamVjdHMgZml0IGludG8gdGhlIHNsYWIuCiAgKi8KICNkZWZpbmUJQlJFQUtfR0ZQX09SREVSX0hJCTEKQEAgLTc4OCw2ICs3NzQsNyBAQAogCSAqLwogCUJVR19PTihtYWxsb2Nfc2l6ZXNbSU5ERVhfQUNdLmNzX2NhY2hlcCA9PSBOVUxMKTsKICNlbmRpZgorCVdBUk5fT05fT05DRShzaXplID09IDApOwogCXdoaWxlIChzaXplID4gY3NpemVwLT5jc19zaXplKQogCQljc2l6ZXArKzsKIApAQCAtOTI0LDEyICs5MTEsNiBAQAogewogCWludCBub2RlID0gX19nZXRfY3B1X3ZhcihyZWFwX25vZGUpOwogCi0JLyoKLQkgKiBBbHNvIGRyYWluIHBlciBjcHUgcGFnZXMgb24gcmVtb3RlIHpvbmVzCi0JICovCi0JaWYgKG5vZGUgIT0gbnVtYV9ub2RlX2lkKCkpCi0JCWRyYWluX25vZGVfcGFnZXMobm9kZSk7Ci0KIAlub2RlID0gbmV4dF9ub2RlKG5vZGUsIG5vZGVfb25saW5lX21hcCk7CiAJaWYgKHVubGlrZWx5KG5vZGUgPj0gTUFYX05VTU5PREVTKSkKIAkJbm9kZSA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKQEAgLTExODIsOCArMTE2MywxMSBAQAogCWludCBtZW1zaXplID0gc2l6ZW9mKHN0cnVjdCBrbWVtX2xpc3QzKTsKIAogCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9MT0NLX0FDUVVJUkU6CiAJCW11dGV4X2xvY2soJmNhY2hlX2NoYWluX211dGV4KTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKIAkJLyoKIAkJICogV2UgbmVlZCB0byBkbyB0aGlzIHJpZ2h0IGluIHRoZSBiZWdpbm5pbmcgc2luY2UKIAkJICogYWxsb2NfYXJyYXljYWNoZSdzIGFyZSBnb2luZyB0byB1c2UgdGhpcyBsaXN0LgpAQCAtMTI3MCwxNyArMTI1NCwyOCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1BVX09OTElORToKLQkJbXV0ZXhfdW5sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7CisJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKIAkJc3RhcnRfY3B1X3RpbWVyKGNwdSk7CiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKLQkJbXV0ZXhfbG9jaygmY2FjaGVfY2hhaW5fbXV0ZXgpOwotCQlicmVhazsKLQljYXNlIENQVV9ET1dOX0ZBSUxFRDoKLQkJbXV0ZXhfdW5sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7Ci0JCWJyZWFrOworICAJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorICAJY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKKwkJLyoKKwkJICogU2h1dGRvd24gY2FjaGUgcmVhcGVyLiBOb3RlIHRoYXQgdGhlIGNhY2hlX2NoYWluX211dGV4IGlzCisJCSAqIGhlbGQgc28gdGhhdCBpZiBjYWNoZV9yZWFwKCkgaXMgaW52b2tlZCBpdCBjYW5ub3QgZG8KKwkJICogYW55dGhpbmcgZXhwZW5zaXZlIGJ1dCB3aWxsIG9ubHkgbW9kaWZ5IHJlYXBfd29yaworCQkgKiBhbmQgcmVzY2hlZHVsZSB0aGUgdGltZXIuCisJCSovCisJCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJnBlcl9jcHUocmVhcF93b3JrLCBjcHUpKTsKKwkJLyogTm93IHRoZSBjYWNoZV9yZWFwZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBub3QgcnVubmluZy4gKi8KKwkJcGVyX2NwdShyZWFwX3dvcmssIGNwdSkud29yay5mdW5jID0gTlVMTDsKKyAgCQlicmVhazsKKyAgCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorICAJY2FzZSBDUFVfRE9XTl9GQUlMRURfRlJPWkVOOgorCQlzdGFydF9jcHVfdGltZXIoY3B1KTsKKyAgCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQkvKgogCQkgKiBFdmVuIGlmIGFsbCB0aGUgY3B1cyBvZiBhIG5vZGUgYXJlIGRvd24sIHdlIGRvbid0IGZyZWUgdGhlCiAJCSAqIGttZW1fbGlzdDMgb2YgYW55IGNhY2hlLiBUaGlzIHRvIGF2b2lkIGEgcmFjZSBiZXR3ZWVuCkBAIC0xMjkyLDYgKzEyODcsNyBAQAogCQkvKiBmYWxsIHRocnUgKi8KICNlbmRpZgogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWNoZXAsICZjYWNoZV9jaGFpbiwgbmV4dCkgewogCQkJc3RydWN0IGFycmF5X2NhY2hlICpuYzsKIAkJCXN0cnVjdCBhcnJheV9jYWNoZSAqc2hhcmVkOwpAQCAtMTM1MCw2ICsxMzQ2LDggQEAKIAkJCQljb250aW51ZTsKIAkJCWRyYWluX2ZyZWVsaXN0KGNhY2hlcCwgbDMsIGwzLT5mcmVlX29iamVjdHMpOwogCQl9CisJCWJyZWFrOworCWNhc2UgQ1BVX0xPQ0tfUkVMRUFTRToKIAkJbXV0ZXhfdW5sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7CiAJCWJyZWFrOwogCX0KQEAgLTE3NzYsNyArMTc3NCw3IEBACiAJY2hhciAqcmVhbG9iajsKIAogCWlmIChjYWNoZXAtPmZsYWdzICYgU0xBQl9SRURfWk9ORSkgewotCQlwcmludGsoS0VSTl9FUlIgIlJlZHpvbmU6IDB4JWx4LzB4JWx4LlxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICJSZWR6b25lOiAweCVsbHgvMHglbGx4LlxuIiwKIAkJCSpkYmdfcmVkem9uZTEoY2FjaGVwLCBvYmpwKSwKIAkJCSpkYmdfcmVkem9uZTIoY2FjaGVwLCBvYmpwKSk7CiAJfQpAQCAtMTg5NiwyMCArMTg5NCwxMSBAQAogCQkJCXNsYWJfZXJyb3IoY2FjaGVwLCAiZW5kIG9mIGEgZnJlZWQgb2JqZWN0ICIKIAkJCQkJICAgIndhcyBvdmVyd3JpdHRlbiIpOwogCQl9Ci0JCWlmIChjYWNoZXAtPmR0b3IgJiYgIShjYWNoZXAtPmZsYWdzICYgU0xBQl9QT0lTT04pKQotCQkJKGNhY2hlcC0+ZHRvcikgKG9ianAgKyBvYmpfb2Zmc2V0KGNhY2hlcCksIGNhY2hlcCwgMCk7CiAJfQogfQogI2Vsc2UKIHN0YXRpYyB2b2lkIHNsYWJfZGVzdHJveV9vYmpzKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHN0cnVjdCBzbGFiICpzbGFicCkKIHsKLQlpZiAoY2FjaGVwLT5kdG9yKSB7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgY2FjaGVwLT5udW07IGkrKykgewotCQkJdm9pZCAqb2JqcCA9IGluZGV4X3RvX29iaihjYWNoZXAsIHNsYWJwLCBpKTsKLQkJCShjYWNoZXAtPmR0b3IpIChvYmpwLCBjYWNoZXAsIDApOwotCQl9Ci0JfQogfQogI2VuZGlmCiAKQEAgLTE5OTgsNyArMTk4Nyw3IEBACiAJc2l6ZV90IGxlZnRfb3ZlciA9IDA7CiAJaW50IGdmcG9yZGVyOwogCi0JZm9yIChnZnBvcmRlciA9IDA7IGdmcG9yZGVyIDw9IE1BWF9HRlBfT1JERVI7IGdmcG9yZGVyKyspIHsKKwlmb3IgKGdmcG9yZGVyID0gMDsgZ2Zwb3JkZXIgPD0gS01BTExPQ19NQVhfT1JERVI7IGdmcG9yZGVyKyspIHsKIAkJdW5zaWduZWQgaW50IG51bTsKIAkJc2l6ZV90IHJlbWFpbmRlcjsKIApAQCAtMjA0OCw3ICsyMDM3LDcgQEAKIAlyZXR1cm4gbGVmdF9vdmVyOwogfQogCi1zdGF0aWMgaW50IHNldHVwX2NwdV9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQorc3RhdGljIGludCBfX2luaXRfcmVmb2sgc2V0dXBfY3B1X2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCiB7CiAJaWYgKGdfY3B1Y2FjaGVfdXAgPT0gRlVMTCkKIAkJcmV0dXJuIGVuYWJsZV9jcHVjYWNoZShjYWNoZXApOwpAQCAtMjEwOSw3ICsyMDk4LDcgQEAKICAqIEBhbGlnbjogVGhlIHJlcXVpcmVkIGFsaWdubWVudCBmb3IgdGhlIG9iamVjdHMuCiAgKiBAZmxhZ3M6IFNMQUIgZmxhZ3MKICAqIEBjdG9yOiBBIGNvbnN0cnVjdG9yIGZvciB0aGUgb2JqZWN0cy4KLSAqIEBkdG9yOiBBIGRlc3RydWN0b3IgZm9yIHRoZSBvYmplY3RzLgorICogQGR0b3I6IEEgZGVzdHJ1Y3RvciBmb3IgdGhlIG9iamVjdHMgKG5vdCBpbXBsZW1lbnRlZCBhbnltb3JlKS4KICAqCiAgKiBSZXR1cm5zIGEgcHRyIHRvIHRoZSBjYWNoZSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCiAgKiBDYW5ub3QgYmUgY2FsbGVkIHdpdGhpbiBhIGludCwgYnV0IGNhbiBiZSBpbnRlcnJ1cHRlZC4KQEAgLTIxNDQsNyArMjEzMyw3IEBACiAJICogU2FuaXR5IGNoZWNrcy4uLiB0aGVzZSBhcmUgYWxsIHNlcmlvdXMgdXNhZ2UgYnVncy4KIAkgKi8KIAlpZiAoIW5hbWUgfHwgaW5faW50ZXJydXB0KCkgfHwgKHNpemUgPCBCWVRFU19QRVJfV09SRCkgfHwKLQkgICAgKHNpemUgPiAoMSA8PCBNQVhfT0JKX09SREVSKSAqIFBBR0VfU0laRSkgfHwgKGR0b3IgJiYgIWN0b3IpKSB7CisJICAgIHNpemUgPiBLTUFMTE9DX01BWF9TSVpFIHx8IGR0b3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRWFybHkgZXJyb3IgaW4gc2xhYiAlc1xuIiwgX19GVU5DVElPTl9fLAogCQkJCW5hbWUpOwogCQlCVUcoKTsKQEAgLTIxOTgsOSArMjE4Nyw2IEBACiAJaWYgKGZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZX1JDVSkKIAkJQlVHX09OKGZsYWdzICYgU0xBQl9QT0lTT04pOwogI2VuZGlmCi0JaWYgKGZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZX1JDVSkKLQkJQlVHX09OKGR0b3IpOwotCiAJLyoKIAkgKiBBbHdheXMgY2hlY2tzIGZsYWdzLCBhIGNhbGxlciBtaWdodCBiZSBleHBlY3RpbmcgZGVidWcgc3VwcG9ydCB3aGljaAogCSAqIGlzbid0IGF2YWlsYWJsZS4KQEAgLTIyMzksNyArMjIyNSw3IEBACiAJICogaXMgZ3JlYXRlciB0aGFuIEJZVEVTX1BFUl9XT1JELgogCSAqLwogCWlmIChmbGFncyAmIFNMQUJfUkVEX1pPTkUgfHwgZmxhZ3MgJiBTTEFCX1NUT1JFX1VTRVIpCi0JCXJhbGlnbiA9IEJZVEVTX1BFUl9XT1JEOworCQlyYWxpZ24gPSBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nIGxvbmcpOwogCiAJLyogMikgYXJjaCBtYW5kYXRlZCBhbGlnbm1lbnQgKi8KIAlpZiAocmFsaWduIDwgQVJDSF9TTEFCX01JTkFMSUdOKSB7CkBAIC0yMjUwLDcgKzIyMzYsNyBAQAogCQlyYWxpZ24gPSBhbGlnbjsKIAl9CiAJLyogZGlzYWJsZSBkZWJ1ZyBpZiBuZWNlc3NhcnkgKi8KLQlpZiAocmFsaWduID4gQllURVNfUEVSX1dPUkQpCisJaWYgKHJhbGlnbiA+IF9fYWxpZ25vZl9fKHVuc2lnbmVkIGxvbmcgbG9uZykpCiAJCWZsYWdzICY9IH4oU0xBQl9SRURfWk9ORSB8IFNMQUJfU1RPUkVfVVNFUik7CiAJLyoKIAkgKiA0KSBTdG9yZSBpdC4KQEAgLTIyNzEsOCArMjI1Nyw4IEBACiAJICovCiAJaWYgKGZsYWdzICYgU0xBQl9SRURfWk9ORSkgewogCQkvKiBhZGQgc3BhY2UgZm9yIHJlZCB6b25lIHdvcmRzICovCi0JCWNhY2hlcC0+b2JqX29mZnNldCArPSBCWVRFU19QRVJfV09SRDsKLQkJc2l6ZSArPSAyICogQllURVNfUEVSX1dPUkQ7CisJCWNhY2hlcC0+b2JqX29mZnNldCArPSBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKTsKKwkJc2l6ZSArPSAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZyk7CiAJfQogCWlmIChmbGFncyAmIFNMQUJfU1RPUkVfVVNFUikgewogCQkvKiB1c2VyIHN0b3JlIHJlcXVpcmVzIG9uZSB3b3JkIHN0b3JhZ2UgYmVoaW5kIHRoZSBlbmQgb2YKQEAgLTIzNTUsNyArMjM0MSw2IEBACiAJCUJVR19PTighY2FjaGVwLT5zbGFicF9jYWNoZSk7CiAJfQogCWNhY2hlcC0+Y3RvciA9IGN0b3I7Ci0JY2FjaGVwLT5kdG9yID0gZHRvcjsKIAljYWNoZXAtPm5hbWUgPSBuYW1lOwogCiAJaWYgKHNldHVwX2NwdV9jYWNoZShjYWNoZXApKSB7CkBAIC0yNjEwLDcgKzI1OTUsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBjYWNoZV9pbml0X29ianMoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKLQkJCSAgICBzdHJ1Y3Qgc2xhYiAqc2xhYnAsIHVuc2lnbmVkIGxvbmcgY3Rvcl9mbGFncykKKwkJCSAgICBzdHJ1Y3Qgc2xhYiAqc2xhYnApCiB7CiAJaW50IGk7CiAKQEAgLTI2MzQsNyArMjYxOSw3IEBACiAJCSAqLwogCQlpZiAoY2FjaGVwLT5jdG9yICYmICEoY2FjaGVwLT5mbGFncyAmIFNMQUJfUE9JU09OKSkKIAkJCWNhY2hlcC0+Y3RvcihvYmpwICsgb2JqX29mZnNldChjYWNoZXApLCBjYWNoZXAsCi0JCQkJICAgICBjdG9yX2ZsYWdzKTsKKwkJCQkgICAgIDApOwogCiAJCWlmIChjYWNoZXAtPmZsYWdzICYgU0xBQl9SRURfWk9ORSkgewogCQkJaWYgKCpkYmdfcmVkem9uZTIoY2FjaGVwLCBvYmpwKSAhPSBSRURfSU5BQ1RJVkUpCkBAIC0yNjUwLDcgKzI2MzUsNyBAQAogCQkJCQkgY2FjaGVwLT5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRSwgMCk7CiAjZWxzZQogCQlpZiAoY2FjaGVwLT5jdG9yKQotCQkJY2FjaGVwLT5jdG9yKG9ianAsIGNhY2hlcCwgY3Rvcl9mbGFncyk7CisJCQljYWNoZXAtPmN0b3Iob2JqcCwgY2FjaGVwLCAwKTsKICNlbmRpZgogCQlzbGFiX2J1ZmN0bChzbGFicClbaV0gPSBpICsgMTsKIAl9CkBAIC0yNzM5LDcgKzI3MjQsNiBAQAogCXN0cnVjdCBzbGFiICpzbGFicDsKIAlzaXplX3Qgb2Zmc2V0OwogCWdmcF90IGxvY2FsX2ZsYWdzOwotCXVuc2lnbmVkIGxvbmcgY3Rvcl9mbGFnczsKIAlzdHJ1Y3Qga21lbV9saXN0MyAqbDM7CiAKIAkvKgpAQCAtMjc0OCw3ICsyNzMyLDYgQEAKIAkgKi8KIAlCVUdfT04oZmxhZ3MgJiB+KEdGUF9ETUEgfCBHRlBfTEVWRUxfTUFTSykpOwogCi0JY3Rvcl9mbGFncyA9IFNMQUJfQ1RPUl9DT05TVFJVQ1RPUjsKIAlsb2NhbF9mbGFncyA9IChmbGFncyAmIEdGUF9MRVZFTF9NQVNLKTsKIAkvKiBUYWtlIHRoZSBsMyBsaXN0IGxvY2sgdG8gY2hhbmdlIHRoZSBjb2xvdXJfbmV4dCBvbiB0aGlzIG5vZGUgKi8KIAljaGVja19pcnFfb2ZmKCk7CkBAIC0yNzkzLDcgKzI3NzYsNyBAQAogCXNsYWJwLT5ub2RlaWQgPSBub2RlaWQ7CiAJc2xhYl9tYXBfcGFnZXMoY2FjaGVwLCBzbGFicCwgb2JqcCk7CiAKLQljYWNoZV9pbml0X29ianMoY2FjaGVwLCBzbGFicCwgY3Rvcl9mbGFncyk7CisJY2FjaGVfaW5pdF9vYmpzKGNhY2hlcCwgc2xhYnApOwogCiAJaWYgKGxvY2FsX2ZsYWdzICYgX19HRlBfV0FJVCkKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKQEAgLTI4MjAsNyArMjgwMyw2IEBACiAgKiBQZXJmb3JtIGV4dHJhIGZyZWVpbmcgY2hlY2tzOgogICogLSBkZXRlY3QgYmFkIHBvaW50ZXJzLgogICogLSBQT0lTT04vUkVEX1pPTkUgY2hlY2tpbmcKLSAqIC0gZGVzdHJ1Y3RvciBjYWxscywgZm9yIGNhY2hlcyB3aXRoIFBPSVNPTitkdG9yCiAgKi8KIHN0YXRpYyB2b2lkIGtmcmVlX2RlYnVnY2hlY2soY29uc3Qgdm9pZCAqb2JqcCkKIHsKQEAgLTI4MzMsNyArMjgxNSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZXJpZnlfcmVkem9uZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqKQogewotCXVuc2lnbmVkIGxvbmcgcmVkem9uZTEsIHJlZHpvbmUyOworCXVuc2lnbmVkIGxvbmcgbG9uZyByZWR6b25lMSwgcmVkem9uZTI7CiAKIAlyZWR6b25lMSA9ICpkYmdfcmVkem9uZTEoY2FjaGUsIG9iaik7CiAJcmVkem9uZTIgPSAqZGJnX3JlZHpvbmUyKGNhY2hlLCBvYmopOwpAQCAtMjg0OSw3ICsyODMxLDcgQEAKIAllbHNlCiAJCXNsYWJfZXJyb3IoY2FjaGUsICJtZW1vcnkgb3V0c2lkZSBvYmplY3Qgd2FzIG92ZXJ3cml0dGVuIik7CiAKLQlwcmludGsoS0VSTl9FUlIgIiVwOiByZWR6b25lIDE6MHglbHgsIHJlZHpvbmUgMjoweCVseC5cbiIsCisJcHJpbnRrKEtFUk5fRVJSICIlcDogcmVkem9uZSAxOjB4JWxseCwgcmVkem9uZSAyOjB4JWxseC5cbiIsCiAJCQlvYmosIHJlZHpvbmUxLCByZWR6b25lMik7CiB9CiAKQEAgLTI4NzksMTIgKzI4NjEsNiBAQAogCUJVR19PTihvYmpuciA+PSBjYWNoZXAtPm51bSk7CiAJQlVHX09OKG9ianAgIT0gaW5kZXhfdG9fb2JqKGNhY2hlcCwgc2xhYnAsIG9iam5yKSk7CiAKLQlpZiAoY2FjaGVwLT5mbGFncyAmIFNMQUJfUE9JU09OICYmIGNhY2hlcC0+ZHRvcikgewotCQkvKiB3ZSB3YW50IHRvIGNhY2hlIHBvaXNvbiB0aGUgb2JqZWN0LAotCQkgKiBjYWxsIHRoZSBkZXN0cnVjdGlvbiBjYWxsYmFjawotCQkgKi8KLQkJY2FjaGVwLT5kdG9yKG9ianAgKyBvYmpfb2Zmc2V0KGNhY2hlcCksIGNhY2hlcCwgMCk7Ci0JfQogI2lmZGVmIENPTkZJR19ERUJVR19TTEFCX0xFQUsKIAlzbGFiX2J1ZmN0bChzbGFicClbb2JqbnJdID0gQlVGQ1RMX0ZSRUU7CiAjZW5kaWYKQEAgLTMwNjUsNyArMzA0MSw3IEBACiAJCQlzbGFiX2Vycm9yKGNhY2hlcCwgImRvdWJsZSBmcmVlLCBvciBtZW1vcnkgb3V0c2lkZSIKIAkJCQkJCSIgb2JqZWN0IHdhcyBvdmVyd3JpdHRlbiIpOwogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJIiVwOiByZWR6b25lIDE6MHglbHgsIHJlZHpvbmUgMjoweCVseFxuIiwKKwkJCQkiJXA6IHJlZHpvbmUgMToweCVsbHgsIHJlZHpvbmUgMjoweCVsbHhcbiIsCiAJCQkJb2JqcCwgKmRiZ19yZWR6b25lMShjYWNoZXAsIG9ianApLAogCQkJCSpkYmdfcmVkem9uZTIoY2FjaGVwLCBvYmpwKSk7CiAJCX0KQEAgLTMwODQsNyArMzA2MCw3IEBACiAjZW5kaWYKIAlvYmpwICs9IG9ial9vZmZzZXQoY2FjaGVwKTsKIAlpZiAoY2FjaGVwLT5jdG9yICYmIGNhY2hlcC0+ZmxhZ3MgJiBTTEFCX1BPSVNPTikKLQkJY2FjaGVwLT5jdG9yKG9ianAsIGNhY2hlcCwgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKTsKKwkJY2FjaGVwLT5jdG9yKG9ianAsIGNhY2hlcCwgMCk7CiAjaWYgQVJDSF9TTEFCX01JTkFMSUdOCiAJaWYgKCh1MzIpb2JqcCAmIChBUkNIX1NMQUJfTUlOQUxJR04tMSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIweCVwOiBub3QgYWxpZ25lZCB0byBBUkNIX1NMQUJfTUlOQUxJR049JWRcbiIsCkBAIC0zNzM4LDcgKzM3MTQsNiBAQAogCiAvKioKICAqIGtyZWFsbG9jIC0gcmVhbGxvY2F0ZSBtZW1vcnkuIFRoZSBjb250ZW50cyB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuCi0gKgogICogQHA6IG9iamVjdCB0byByZWFsbG9jYXRlIG1lbW9yeSBmb3IuCiAgKiBAbmV3X3NpemU6IGhvdyBtYW55IGJ5dGVzIG9mIG1lbW9yeSBhcmUgcmVxdWlyZWQuCiAgKiBAZmxhZ3M6IHRoZSB0eXBlIG9mIG1lbW9yeSB0byBhbGxvY2F0ZS4KQEAgLTQxMzYsNyArNDExMSw2IEBACiAJY2hlY2tfaXJxX29uKCk7CiAJbXV0ZXhfdW5sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7CiAJbmV4dF9yZWFwX25vZGUoKTsKLQlyZWZyZXNoX2NwdV92bV9zdGF0cyhzbXBfcHJvY2Vzc29yX2lkKCkpOwogb3V0OgogCS8qIFNldCB1cCB0aGUgbmV4dCBpdGVyYXRpb24gKi8KIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsod29yaywgcm91bmRfamlmZmllc19yZWxhdGl2ZShSRUFQVElNRU9VVF9DUFVDKSk7CkBAIC00NDI4LDE2ICs0NDAyLDEyIEBACiBzdGF0aWMgdm9pZCBzaG93X3N5bWJvbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKICNpZmRlZiBDT05GSUdfS0FMTFNZTVMKLQljaGFyICptb2RuYW1lOwotCWNvbnN0IGNoYXIgKm5hbWU7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7Ci0JY2hhciBuYW1lYnVmW0tTWU1fTkFNRV9MRU4rMV07CisJY2hhciBtb2RuYW1lW01PRFVMRV9OQU1FX0xFTiArIDFdLCBuYW1lW0tTWU1fTkFNRV9MRU4gKyAxXTsKIAotCW5hbWUgPSBrYWxsc3ltc19sb29rdXAoYWRkcmVzcywgJnNpemUsICZvZmZzZXQsICZtb2RuYW1lLCBuYW1lYnVmKTsKLQotCWlmIChuYW1lKSB7CisJaWYgKGxvb2t1cF9zeW1ib2xfYXR0cnMoYWRkcmVzcywgJnNpemUsICZvZmZzZXQsIG1vZG5hbWUsIG5hbWUpID09IDApIHsKIAkJc2VxX3ByaW50ZihtLCAiJXMrJSNseC8lI2x4IiwgbmFtZSwgb2Zmc2V0LCBzaXplKTsKLQkJaWYgKG1vZG5hbWUpCisJCWlmIChtb2RuYW1lWzBdKQogCQkJc2VxX3ByaW50ZihtLCAiIFslc10iLCBtb2RuYW1lKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL21tL3Nsb2IuYyBiL21tL3Nsb2IuYwppbmRleCBjNjkzM2JjLi43MTk3NmM1IDEwMDY0NAotLS0gYS9tbS9zbG9iLmMKKysrIGIvbW0vc2xvYi5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KIAogc3RydWN0IHNsb2JfYmxvY2sgewogCWludCB1bml0czsKQEAgLTUzLDYgKzU0LDE2IEBACiB9OwogdHlwZWRlZiBzdHJ1Y3QgYmlnYmxvY2sgYmlnYmxvY2tfdDsKIAorLyoKKyAqIHN0cnVjdCBzbG9iX3JjdSBpcyBpbnNlcnRlZCBhdCB0aGUgdGFpbCBvZiBhbGxvY2F0ZWQgc2xvYiBibG9ja3MsIHdoaWNoCisgKiB3ZXJlIGNyZWF0ZWQgd2l0aCBhIFNMQUJfREVTVFJPWV9CWV9SQ1Ugc2xhYi4gc2xvYl9yY3UgaXMgdXNlZCB0byBmcmVlCisgKiB0aGUgYmxvY2sgdXNpbmcgY2FsbF9yY3UuCisgKi8KK3N0cnVjdCBzbG9iX3JjdSB7CisJc3RydWN0IHJjdV9oZWFkIGhlYWQ7CisJaW50IHNpemU7Cit9OworCiBzdGF0aWMgc2xvYl90IGFyZW5hID0geyAubmV4dCA9ICZhcmVuYSwgLnVuaXRzID0gMSB9Owogc3RhdGljIHNsb2JfdCAqc2xvYmZyZWUgPSAmYXJlbmE7CiBzdGF0aWMgYmlnYmxvY2tfdCAqYmlnYmxvY2tzOwpAQCAtMjY2LDkgKzI3Nyw5IEBACiAKIHN0cnVjdCBrbWVtX2NhY2hlIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZSwgYWxpZ247CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljb25zdCBjaGFyICpuYW1lOwogCXZvaWQgKCpjdG9yKSh2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCpkdG9yKSh2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpOwogfTsKIAogc3RydWN0IGttZW1fY2FjaGUgKmttZW1fY2FjaGVfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLApAQCAtMjgzLDggKzI5NCwxMiBAQAogCWlmIChjKSB7CiAJCWMtPm5hbWUgPSBuYW1lOwogCQljLT5zaXplID0gc2l6ZTsKKwkJaWYgKGZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZX1JDVSkgeworCQkJLyogbGVhdmUgcm9vbSBmb3IgcmN1IGZvb3RlciBhdCB0aGUgZW5kIG9mIG9iamVjdCAqLworCQkJYy0+c2l6ZSArPSBzaXplb2Yoc3RydWN0IHNsb2JfcmN1KTsKKwkJfQorCQljLT5mbGFncyA9IGZsYWdzOwogCQljLT5jdG9yID0gY3RvcjsKLQkJYy0+ZHRvciA9IGR0b3I7CiAJCS8qIGlnbm9yZSBhbGlnbm1lbnQgdW5sZXNzIGl0J3MgZm9yY2VkICovCiAJCWMtPmFsaWduID0gKGZsYWdzICYgU0xBQl9IV0NBQ0hFX0FMSUdOKSA/IFNMT0JfQUxJR04gOiAwOwogCQlpZiAoYy0+YWxpZ24gPCBhbGlnbikKQEAgLTMxMiw3ICszMjcsNyBAQAogCQliID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKGZsYWdzLCBnZXRfb3JkZXIoYy0+c2l6ZSkpOwogCiAJaWYgKGMtPmN0b3IpCi0JCWMtPmN0b3IoYiwgYywgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKTsKKwkJYy0+Y3RvcihiLCBjLCAwKTsKIAogCXJldHVybiBiOwogfQpAQCAtMzI4LDE1ICszNDMsMzMgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV96YWxsb2MpOwogCitzdGF0aWMgdm9pZCBfX2ttZW1fY2FjaGVfZnJlZSh2b2lkICpiLCBpbnQgc2l6ZSkKK3sKKwlpZiAoc2l6ZSA8IFBBR0VfU0laRSkKKwkJc2xvYl9mcmVlKGIsIHNpemUpOworCWVsc2UKKwkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyliLCBnZXRfb3JkZXIoc2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCBrbWVtX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3Qgc2xvYl9yY3UgKnNsb2JfcmN1ID0gKHN0cnVjdCBzbG9iX3JjdSAqKWhlYWQ7CisJdm9pZCAqYiA9ICh2b2lkICopc2xvYl9yY3UgLSAoc2xvYl9yY3UtPnNpemUgLSBzaXplb2Yoc3RydWN0IHNsb2JfcmN1KSk7CisKKwlfX2ttZW1fY2FjaGVfZnJlZShiLCBzbG9iX3JjdS0+c2l6ZSk7Cit9CisKIHZvaWQga21lbV9jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpjLCB2b2lkICpiKQogewotCWlmIChjLT5kdG9yKQotCQljLT5kdG9yKGIsIGMsIDApOwotCi0JaWYgKGMtPnNpemUgPCBQQUdFX1NJWkUpCi0JCXNsb2JfZnJlZShiLCBjLT5zaXplKTsKLQllbHNlCi0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYiwgZ2V0X29yZGVyKGMtPnNpemUpKTsKKwlpZiAodW5saWtlbHkoYy0+ZmxhZ3MgJiBTTEFCX0RFU1RST1lfQllfUkNVKSkgeworCQlzdHJ1Y3Qgc2xvYl9yY3UgKnNsb2JfcmN1OworCQlzbG9iX3JjdSA9IGIgKyAoYy0+c2l6ZSAtIHNpemVvZihzdHJ1Y3Qgc2xvYl9yY3UpKTsKKwkJSU5JVF9SQ1VfSEVBRCgmc2xvYl9yY3UtPmhlYWQpOworCQlzbG9iX3JjdS0+c2l6ZSA9IGMtPnNpemU7CisJCWNhbGxfcmN1KCZzbG9iX3JjdS0+aGVhZCwga21lbV9yY3VfZnJlZSk7CisJfSBlbHNlIHsKKwkJX19rbWVtX2NhY2hlX2ZyZWUoYiwgYy0+c2l6ZSk7CisJfQogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpOwogCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggNWRiM2RhNS4uNTE2NjNhMyAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtNjYsMTEgKzY2LDExIEBACiAgKiBTTFVCIGFzc2lnbnMgb25lIHNsYWIgZm9yIGFsbG9jYXRpb24gdG8gZWFjaCBwcm9jZXNzb3IuCiAgKiBBbGxvY2F0aW9ucyBvbmx5IG9jY3VyIGZyb20gdGhlc2Ugc2xhYnMgY2FsbGVkIGNwdSBzbGFicy4KICAqCi0gKiBTbGFicyB3aXRoIGZyZWUgZWxlbWVudHMgYXJlIGtlcHQgb24gYSBwYXJ0aWFsIGxpc3QuCi0gKiBUaGVyZSBpcyBubyBsaXN0IGZvciBmdWxsIHNsYWJzLiBJZiBhbiBvYmplY3QgaW4gYSBmdWxsIHNsYWIgaXMKKyAqIFNsYWJzIHdpdGggZnJlZSBlbGVtZW50cyBhcmUga2VwdCBvbiBhIHBhcnRpYWwgbGlzdCBhbmQgZHVyaW5nIHJlZ3VsYXIKKyAqIG9wZXJhdGlvbnMgbm8gbGlzdCBmb3IgZnVsbCBzbGFicyBpcyB1c2VkLiBJZiBhbiBvYmplY3QgaW4gYSBmdWxsIHNsYWIgaXMKICAqIGZyZWVkIHRoZW4gdGhlIHNsYWIgd2lsbCBzaG93IHVwIGFnYWluIG9uIHRoZSBwYXJ0aWFsIGxpc3RzLgotICogT3RoZXJ3aXNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gdHJhY2sgZnVsbCBzbGFicyB1bmxlc3Mgd2UgaGF2ZSB0bwotICogdHJhY2sgZnVsbCBzbGFicyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICogV2UgdHJhY2sgZnVsbCBzbGFicyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHRob3VnaCBiZWNhdXNlIG90aGVyd2lzZSB3ZQorICogY2Fubm90IHNjYW4gYWxsIG9iamVjdHMuCiAgKgogICogU2xhYnMgYXJlIGZyZWVkIHdoZW4gdGhleSBiZWNvbWUgZW1wdHkuIFRlYXJkb3duIGFuZCBzZXR1cCBpcwogICogbWluaW1hbCBzbyB3ZSByZWx5IG9uIHRoZSBwYWdlIGFsbG9jYXRvcnMgcGVyIGNwdSBjYWNoZXMgZm9yCkBAIC03OCwyMiArNzgsNzIgQEAKICAqCiAgKiBPdmVybG9hZGluZyBvZiBwYWdlIGZsYWdzIHRoYXQgYXJlIG90aGVyd2lzZSB1c2VkIGZvciBMUlUgbWFuYWdlbWVudC4KICAqCi0gKiBQYWdlQWN0aXZlIAkJVGhlIHNsYWIgaXMgdXNlZCBhcyBhIGNwdSBjYWNoZS4gQWxsb2NhdGlvbnMKLSAqIAkJCW1heSBiZSBwZXJmb3JtZWQgZnJvbSB0aGUgc2xhYi4gVGhlIHNsYWIgaXMgbm90Ci0gKiAJCQlvbiBhbnkgc2xhYiBsaXN0IGFuZCBjYW5ub3QgYmUgbW92ZWQgb250byBvbmUuCisgKiBQYWdlQWN0aXZlIAkJVGhlIHNsYWIgaXMgZnJvemVuIGFuZCBleGVtcHQgZnJvbSBsaXN0IHByb2Nlc3NpbmcuCisgKiAJCQlUaGlzIG1lYW5zIHRoYXQgdGhlIHNsYWIgaXMgZGVkaWNhdGVkIHRvIGEgcHVycG9zZQorICogCQkJc3VjaCBhcyBzYXRpc2Z5aW5nIGFsbG9jYXRpb25zIGZvciBhIHNwZWNpZmljCisgKiAJCQlwcm9jZXNzb3IuIE9iamVjdHMgbWF5IGJlIGZyZWVkIGluIHRoZSBzbGFiIHdoaWxlCisgKiAJCQlpdCBpcyBmcm96ZW4gYnV0IHNsYWJfZnJlZSB3aWxsIHRoZW4gc2tpcCB0aGUgdXN1YWwKKyAqIAkJCWxpc3Qgb3BlcmF0aW9ucy4gSXQgaXMgdXAgdG8gdGhlIHByb2Nlc3NvciBob2xkaW5nCisgKiAJCQl0aGUgc2xhYiB0byBpbnRlZ3JhdGUgdGhlIHNsYWIgaW50byB0aGUgc2xhYiBsaXN0cworICogCQkJd2hlbiB0aGUgc2xhYiBpcyBubyBsb25nZXIgbmVlZGVkLgorICoKKyAqIAkJCU9uZSB1c2Ugb2YgdGhpcyBmbGFnIGlzIHRvIG1hcmsgc2xhYnMgdGhhdCBhcmUKKyAqIAkJCXVzZWQgZm9yIGFsbG9jYXRpb25zLiBUaGVuIHN1Y2ggYSBzbGFiIGJlY29tZXMgYSBjcHUKKyAqIAkJCXNsYWIuIFRoZSBjcHUgc2xhYiBtYXkgYmUgZXF1aXBwZWQgd2l0aCBhbiBhZGRpdGlvbmFsCisgKiAJCQlsb2NrbGVzc19mcmVlbGlzdCB0aGF0IGFsbG93cyBsb2NrbGVzcyBhY2Nlc3MgdG8KKyAqIAkJCWZyZWUgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byB0aGUgcmVndWxhciBmcmVlbGlzdAorICogCQkJdGhhdCByZXF1aXJlcyB0aGUgc2xhYiBsb2NrLgogICoKICAqIFBhZ2VFcnJvcgkJU2xhYiByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nIGR1ZSB0byBkZWJ1ZwogICogCQkJb3B0aW9ucyBzZXQuIFRoaXMgbW92ZXMJc2xhYiBoYW5kbGluZyBvdXQgb2YKLSAqIAkJCXRoZSBmYXN0IHBhdGguCisgKiAJCQl0aGUgZmFzdCBwYXRoIGFuZCBkaXNhYmxlcyBsb2NrbGVzcyBmcmVlbGlzdHMuCiAgKi8KIAorI2RlZmluZSBGUk9aRU4gKDEgPDwgUEdfYWN0aXZlKQorCisjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKKyNkZWZpbmUgU0xBQkRFQlVHICgxIDw8IFBHX2Vycm9yKQorI2Vsc2UKKyNkZWZpbmUgU0xBQkRFQlVHIDAKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBTbGFiRnJvemVuKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBwYWdlLT5mbGFncyAmIEZST1pFTjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIFNldFNsYWJGcm96ZW4oc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcGFnZS0+ZmxhZ3MgfD0gRlJPWkVOOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgQ2xlYXJTbGFiRnJvemVuKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXBhZ2UtPmZsYWdzICY9IH5GUk9aRU47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IFNsYWJEZWJ1ZyhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gcGFnZS0+ZmxhZ3MgJiBTTEFCREVCVUc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBTZXRTbGFiRGVidWcoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcGFnZS0+ZmxhZ3MgfD0gU0xBQkRFQlVHOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgQ2xlYXJTbGFiRGVidWcoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcGFnZS0+ZmxhZ3MgJj0gflNMQUJERUJVRzsKK30KKwogLyoKICAqIElzc3VlcyBzdGlsbCB0byBiZSByZXNvbHZlZDoKICAqCiAgKiAtIFRoZSBwZXIgY3B1IGFycmF5IGlzIHVwZGF0ZWQgZm9yIGVhY2ggbmV3IHNsYWIgYW5kIGFuZCBpcyBhIHJlbW90ZQogICogICBjYWNoZWxpbmUgZm9yIG1vc3Qgbm9kZXMuIFRoaXMgY291bGQgYmVjb21lIGEgYm91bmNpbmcgY2FjaGVsaW5lIGdpdmVuCi0gKiAgIGVub3VnaCBmcmVxdWVudCB1cGRhdGVzLiBUaGVyZSBhcmUgMTYgcG9pbnRlcnMgaW4gYSBjYWNoZWxpbmUuc28gYXQKLSAqICAgbWF4IDE2IGNwdXMgY291bGQgY29tcGV0ZS4gTGlrZWx5IG9rYXkuCisgKiAgIGVub3VnaCBmcmVxdWVudCB1cGRhdGVzLiBUaGVyZSBhcmUgMTYgcG9pbnRlcnMgaW4gYSBjYWNoZWxpbmUsIHNvIGF0CisgKiAgIG1heCAxNiBjcHVzIGNvdWxkIGNvbXBldGUgZm9yIHRoZSBjYWNoZWxpbmUgd2hpY2ggbWF5IGJlIG9rYXkuCiAgKgogICogLSBTdXBwb3J0IFBBR0VfQUxMT0NfREVCVUcuIFNob3VsZCBiZSBlYXN5IHRvIGRvLgogICoKQEAgLTEzNyw2ICsxODcsNyBAQAogCiAjZGVmaW5lIERFQlVHX0RFRkFVTFRfRkxBR1MgKFNMQUJfREVCVUdfRlJFRSB8IFNMQUJfUkVEX1pPTkUgfCBcCiAJCQkJU0xBQl9QT0lTT04gfCBTTEFCX1NUT1JFX1VTRVIpCisKIC8qCiAgKiBTZXQgb2YgZmxhZ3MgdGhhdCB3aWxsIHByZXZlbnQgc2xhYiBtZXJnaW5nCiAgKi8KQEAgLTE1Nyw2ICsyMDgsMTEgQEAKIC8qIEludGVybmFsIFNMVUIgZmxhZ3MgKi8KICNkZWZpbmUgX19PQkpFQ1RfUE9JU09OIDB4ODAwMDAwMDAJLyogUG9pc29uIG9iamVjdCAqLwogCisvKiBOb3QgYWxsIGFyY2hlcyBkZWZpbmUgY2FjaGVfbGluZV9zaXplICovCisjaWZuZGVmIGNhY2hlX2xpbmVfc2l6ZQorI2RlZmluZSBjYWNoZV9saW5lX3NpemUoKQlMMV9DQUNIRV9CWVRFUworI2VuZGlmCisKIHN0YXRpYyBpbnQga21lbV9zaXplID0gc2l6ZW9mKHN0cnVjdCBrbWVtX2NhY2hlKTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTE2Niw3ICsyMjIsNyBAQAogc3RhdGljIGVudW0gewogCURPV04sCQkvKiBObyBzbGFiIGZ1bmN0aW9uYWxpdHkgYXZhaWxhYmxlICovCiAJUEFSVElBTCwJLyoga21lbV9jYWNoZV9vcGVuKCkgd29ya3MgYnV0IGttYWxsb2MgZG9lcyBub3QgKi8KLQlVUCwJCS8qIEV2ZXJ5dGhpbmcgd29ya3MgKi8KKwlVUCwJCS8qIEV2ZXJ5dGhpbmcgd29ya3MgYnV0IGRvZXMgbm90IHNob3cgdXAgaW4gc3lzZnMgKi8KIAlTWVNGUwkJLyogU3lzZnMgdXAgKi8KIH0gc2xhYl9zdGF0ZSA9IERPV047CiAKQEAgLTE3NCw3ICsyMzAsMTkgQEAKIHN0YXRpYyBERUNMQVJFX1JXU0VNKHNsdWJfbG9jayk7CiBMSVNUX0hFQUQoc2xhYl9jYWNoZXMpOwogCi0jaWZkZWYgQ09ORklHX1NZU0ZTCisvKgorICogVHJhY2tpbmcgdXNlciBvZiBhIHNsYWIuCisgKi8KK3N0cnVjdCB0cmFjayB7CisJdm9pZCAqYWRkcjsJCS8qIENhbGxlZCBmcm9tIGFkZHJlc3MgKi8KKwlpbnQgY3B1OwkJLyogV2FzIHJ1bm5pbmcgb24gY3B1ICovCisJaW50IHBpZDsJCS8qIFBpZCBjb250ZXh0ICovCisJdW5zaWduZWQgbG9uZyB3aGVuOwkvKiBXaGVuIGRpZCB0aGUgb3BlcmF0aW9uIG9jY3VyICovCit9OworCitlbnVtIHRyYWNrX2l0ZW0geyBUUkFDS19BTExPQywgVFJBQ0tfRlJFRSB9OworCisjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpICYmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpCiBzdGF0aWMgaW50IHN5c2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICopOwogc3RhdGljIGludCBzeXNmc19zbGFiX2FsaWFzKHN0cnVjdCBrbWVtX2NhY2hlICosIGNvbnN0IGNoYXIgKik7CiBzdGF0aWMgdm9pZCBzeXNmc19zbGFiX3JlbW92ZShzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKQEAgLTIwMiw2ICsyNzAsNjMgQEAKICNlbmRpZgogfQogCitzdGF0aWMgaW5saW5lIGludCBjaGVja192YWxpZF9wb2ludGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLAorCQkJCXN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCB2b2lkICpvYmplY3QpCit7CisJdm9pZCAqYmFzZTsKKworCWlmICghb2JqZWN0KQorCQlyZXR1cm4gMTsKKworCWJhc2UgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJaWYgKG9iamVjdCA8IGJhc2UgfHwgb2JqZWN0ID49IGJhc2UgKyBzLT5vYmplY3RzICogcy0+c2l6ZSB8fAorCQkob2JqZWN0IC0gYmFzZSkgJSBzLT5zaXplKSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICogU2xvdyB2ZXJzaW9uIG9mIGdldCBhbmQgc2V0IGZyZWUgcG9pbnRlci4KKyAqCisgKiBUaGlzIHZlcnNpb24gcmVxdWlyZXMgdG91Y2hpbmcgdGhlIGNhY2hlIGxpbmVzIG9mIGttZW1fY2FjaGUgd2hpY2gKKyAqIHdlIGF2b2lkIHRvIGRvIGluIHRoZSBmYXN0IGFsbG9jIGZyZWUgcGF0aHMuIFRoZXJlIHdlIG9idGFpbiB0aGUgb2Zmc2V0CisgKiBmcm9tIHRoZSBwYWdlIHN0cnVjdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICpnZXRfZnJlZXBvaW50ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCkKK3sKKwlyZXR1cm4gKih2b2lkICoqKShvYmplY3QgKyBzLT5vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZyZWVwb2ludGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIHZvaWQgKmZwKQoreworCSoodm9pZCAqKikob2JqZWN0ICsgcy0+b2Zmc2V0KSA9IGZwOworfQorCisvKiBMb29wIG92ZXIgYWxsIG9iamVjdHMgaW4gYSBzbGFiICovCisjZGVmaW5lIGZvcl9lYWNoX29iamVjdChfX3AsIF9fcywgX19hZGRyKSBcCisJZm9yIChfX3AgPSAoX19hZGRyKTsgX19wIDwgKF9fYWRkcikgKyAoX19zKS0+b2JqZWN0cyAqIChfX3MpLT5zaXplO1wKKwkJCV9fcCArPSAoX19zKS0+c2l6ZSkKKworLyogU2NhbiBmcmVlbGlzdCAqLworI2RlZmluZSBmb3JfZWFjaF9mcmVlX29iamVjdChfX3AsIF9fcywgX19mcmVlKSBcCisJZm9yIChfX3AgPSAoX19mcmVlKTsgX19wOyBfX3AgPSBnZXRfZnJlZXBvaW50ZXIoKF9fcyksIF9fcCkpCisKKy8qIERldGVybWluZSBvYmplY3QgaW5kZXggZnJvbSBhIGdpdmVuIHBvc2l0aW9uICovCitzdGF0aWMgaW5saW5lIGludCBzbGFiX2luZGV4KHZvaWQgKnAsIHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICphZGRyKQoreworCXJldHVybiAocCAtIGFkZHIpIC8gcy0+c2l6ZTsKK30KKworI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCisvKgorICogRGVidWcgc2V0dGluZ3M6CisgKi8KK3N0YXRpYyBpbnQgc2x1Yl9kZWJ1ZzsKKworc3RhdGljIGNoYXIgKnNsdWJfZGVidWdfc2xhYnM7CisKIC8qCiAgKiBPYmplY3QgZGVidWdnaW5nCiAgKi8KQEAgLTIzNywzNSArMzYyLDYgQEAKIAl9CiB9CiAKLS8qCi0gKiBTbG93IHZlcnNpb24gb2YgZ2V0IGFuZCBzZXQgZnJlZSBwb2ludGVyLgotICoKLSAqIFRoaXMgcmVxdWlyZXMgdG91Y2hpbmcgdGhlIGNhY2hlIGxpbmVzIG9mIGttZW1fY2FjaGUuCi0gKiBUaGUgb2Zmc2V0IGNhbiBhbHNvIGJlIG9idGFpbmVkIGZyb20gdGhlIHBhZ2UuIEluIHRoYXQKLSAqIGNhc2UgaXQgaXMgaW4gdGhlIGNhY2hlbGluZSB0aGF0IHdlIGFscmVhZHkgbmVlZCB0byB0b3VjaC4KLSAqLwotc3RhdGljIHZvaWQgKmdldF9mcmVlcG9pbnRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KQotewotCXJldHVybiAqKHZvaWQgKiopKG9iamVjdCArIHMtPm9mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9mcmVlcG9pbnRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCB2b2lkICpmcCkKLXsKLQkqKHZvaWQgKiopKG9iamVjdCArIHMtPm9mZnNldCkgPSBmcDsKLX0KLQotLyoKLSAqIFRyYWNraW5nIHVzZXIgb2YgYSBzbGFiLgotICovCi1zdHJ1Y3QgdHJhY2sgewotCXZvaWQgKmFkZHI7CQkvKiBDYWxsZWQgZnJvbSBhZGRyZXNzICovCi0JaW50IGNwdTsJCS8qIFdhcyBydW5uaW5nIG9uIGNwdSAqLwotCWludCBwaWQ7CQkvKiBQaWQgY29udGV4dCAqLwotCXVuc2lnbmVkIGxvbmcgd2hlbjsJLyogV2hlbiBkaWQgdGhlIG9wZXJhdGlvbiBvY2N1ciAqLwotfTsKLQotZW51bSB0cmFja19pdGVtIHsgVFJBQ0tfQUxMT0MsIFRSQUNLX0ZSRUUgfTsKLQogc3RhdGljIHN0cnVjdCB0cmFjayAqZ2V0X3RyYWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsCiAJZW51bSB0cmFja19pdGVtIGFsbG9jKQogewpAQCAtNDAwLDI0ICs0OTYsNiBAQAogCXJldHVybiAxOwogfQogCi0KLXN0YXRpYyBpbnQgY2hlY2tfdmFsaWRfcG9pbnRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJCSB2b2lkICpvYmplY3QpCi17Ci0Jdm9pZCAqYmFzZTsKLQotCWlmICghb2JqZWN0KQotCQlyZXR1cm4gMTsKLQotCWJhc2UgPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JaWYgKG9iamVjdCA8IGJhc2UgfHwgb2JqZWN0ID49IGJhc2UgKyBzLT5vYmplY3RzICogcy0+c2l6ZSB8fAotCQkob2JqZWN0IC0gYmFzZSkgJSBzLT5zaXplKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCiAvKgogICogT2JqZWN0IGxheW91dDoKICAqCkBAIC00MjUsMjYgKzUwMywzNCBAQAogICogCUJ5dGVzIG9mIHRoZSBvYmplY3QgdG8gYmUgbWFuYWdlZC4KICAqIAlJZiB0aGUgZnJlZXBvaW50ZXIgbWF5IG92ZXJsYXkgdGhlIG9iamVjdCB0aGVuIHRoZSBmcmVlCiAgKiAJcG9pbnRlciBpcyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgb2JqZWN0LgorICoKICAqIAlQb2lzb25pbmcgdXNlcyAweDZiIChQT0lTT05fRlJFRSkgYW5kIHRoZSBsYXN0IGJ5dGUgaXMKICAqIAkweGE1IChQT0lTT05fRU5EKQogICoKICAqIG9iamVjdCArIHMtPm9ianNpemUKICAqIAlQYWRkaW5nIHRvIHJlYWNoIHdvcmQgYm91bmRhcnkuIFRoaXMgaXMgYWxzbyB1c2VkIGZvciBSZWR6b25pbmcuCi0gKiAJUGFkZGluZyBpcyBleHRlbmRlZCB0byB3b3JkIHNpemUgaWYgUmVkem9uaW5nIGlzIGVuYWJsZWQKLSAqIAlhbmQgb2Jqc2l6ZSA9PSBpbnVzZS4KKyAqIAlQYWRkaW5nIGlzIGV4dGVuZGVkIGJ5IGFub3RoZXIgd29yZCBpZiBSZWR6b25pbmcgaXMgZW5hYmxlZCBhbmQKKyAqIAlvYmpzaXplID09IGludXNlLgorICoKICAqIAlXZSBmaWxsIHdpdGggMHhiYiAoUkVEX0lOQUNUSVZFKSBmb3IgaW5hY3RpdmUgb2JqZWN0cyBhbmQgd2l0aAogICogCTB4Y2MgKFJFRF9BQ1RJVkUpIGZvciBvYmplY3RzIGluIHVzZS4KICAqCiAgKiBvYmplY3QgKyBzLT5pbnVzZQorICogCU1ldGEgZGF0YSBzdGFydHMgaGVyZS4KKyAqCiAgKiAJQS4gRnJlZSBwb2ludGVyIChpZiB3ZSBjYW5ub3Qgb3ZlcndyaXRlIG9iamVjdCBvbiBmcmVlKQogICogCUIuIFRyYWNraW5nIGRhdGEgZm9yIFNMQUJfU1RPUkVfVVNFUgotICogCUMuIFBhZGRpbmcgdG8gcmVhY2ggcmVxdWlyZWQgYWxpZ25tZW50IGJvdW5kYXJ5Ci0gKiAJCVBhZGRpbmcgaXMgZG9uZSB1c2luZyAweDVhIChQT0lTT05fSU5VU0UpCisgKiAJQy4gUGFkZGluZyB0byByZWFjaCByZXF1aXJlZCBhbGlnbm1lbnQgYm91bmRhcnkgb3IgYXQgbWluaW51bQorICogCQlvbmUgd29yZCBpZiBkZWJ1Z2dpbiBpcyBvbiB0byBiZSBhYmxlIHRvIGRldGVjdCB3cml0ZXMKKyAqIAkJYmVmb3JlIHRoZSB3b3JkIGJvdW5kYXJ5LgorICoKKyAqCVBhZGRpbmcgaXMgZG9uZSB1c2luZyAweDVhIChQT0lTT05fSU5VU0UpCiAgKgogICogb2JqZWN0ICsgcy0+c2l6ZQorICogCU5vdGhpbmcgaXMgdXNlZCBiZXlvbmQgcy0+c2l6ZS4KICAqCi0gKiBJZiBzbGFiY2FjaGVzIGFyZSBtZXJnZWQgdGhlbiB0aGUgb2Jqc2l6ZSBhbmQgaW51c2UgYm91bmRhcmllcyBhcmUgdG8KLSAqIGJlIGlnbm9yZWQuIEFuZCB0aGVyZWZvcmUgbm8gc2xhYiBvcHRpb25zIHRoYXQgcmVseSBvbiB0aGVzZSBib3VuZGFyaWVzCisgKiBJZiBzbGFiY2FjaGVzIGFyZSBtZXJnZWQgdGhlbiB0aGUgb2Jqc2l6ZSBhbmQgaW51c2UgYm91bmRhcmllcyBhcmUgbW9zdGx5CisgKiBpZ25vcmVkLiBBbmQgdGhlcmVmb3JlIG5vIHNsYWIgb3B0aW9ucyB0aGF0IHJlbHkgb24gdGhlc2UgYm91bmRhcmllcwogICogbWF5IGJlIHVzZWQgd2l0aCBtZXJnZWQgc2xhYmNhY2hlcy4KICAqLwogCkBAIC01NzAsOCArNjU2LDcgQEAKIAkJLyoKIAkJICogTm8gY2hvaWNlIGJ1dCB0byB6YXAgaXQgYW5kIHRodXMgbG9vc2UgdGhlIHJlbWFpbmRlcgogCQkgKiBvZiB0aGUgZnJlZSBvYmplY3RzIGluIHRoaXMgc2xhYi4gTWF5IGNhdXNlCi0JCSAqIGFub3RoZXIgZXJyb3IgYmVjYXVzZSB0aGUgb2JqZWN0IGNvdW50IG1heWJlCi0JCSAqIHdyb25nIG5vdy4KKwkJICogYW5vdGhlciBlcnJvciBiZWNhdXNlIHRoZSBvYmplY3QgY291bnQgaXMgbm93IHdyb25nLgogCQkgKi8KIAkJc2V0X2ZyZWVwb2ludGVyKHMsIHAsIE5VTEwpOwogCQlyZXR1cm4gMDsKQEAgLTYxMSw5ICs2OTYsOCBAQAogfQogCiAvKgotICogRGV0ZXJtaW5lIGlmIGEgY2VydGFpbiBvYmplY3Qgb24gYSBwYWdlIGlzIG9uIHRoZSBmcmVlbGlzdCBhbmQKLSAqIHRoZXJlZm9yZSBmcmVlLiBNdXN0IGhvbGQgdGhlIHNsYWIgbG9jayBmb3IgY3B1IHNsYWJzIHRvCi0gKiBndWFyYW50ZWUgdGhhdCB0aGUgY2hhaW5zIGFyZSBjb25zaXN0ZW50LgorICogRGV0ZXJtaW5lIGlmIGEgY2VydGFpbiBvYmplY3Qgb24gYSBwYWdlIGlzIG9uIHRoZSBmcmVlbGlzdC4gTXVzdCBob2xkIHRoZQorICogc2xhYiBsb2NrIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBjaGFpbnMgYXJlIGluIGEgY29uc2lzdGVudCBzdGF0ZS4KICAqLwogc3RhdGljIGludCBvbl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKnNlYXJjaCkKIHsKQEAgLTY1OCw4ICs3NDIsMjQgQEAKIAlyZXR1cm4gc2VhcmNoID09IE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHRyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0LCBpbnQgYWxsb2MpCit7CisJaWYgKHMtPmZsYWdzICYgU0xBQl9UUkFDRSkgeworCQlwcmludGsoS0VSTl9JTkZPICJUUkFDRSAlcyAlcyAweCVwIGludXNlPSVkIGZwPTB4JXBcbiIsCisJCQlzLT5uYW1lLAorCQkJYWxsb2MgPyAiYWxsb2MiIDogImZyZWUiLAorCQkJb2JqZWN0LCBwYWdlLT5pbnVzZSwKKwkJCXBhZ2UtPmZyZWVsaXN0KTsKKworCQlpZiAoIWFsbG9jKQorCQkJcHJpbnRfc2VjdGlvbigiT2JqZWN0IiwgKHZvaWQgKilvYmplY3QsIHMtPm9ianNpemUpOworCisJCWR1bXBfc3RhY2soKTsKKwl9Cit9CisKIC8qCi0gKiBUcmFja2luZyBvZiBmdWxseSBhbGxvY2F0ZWQgc2xhYnMgZm9yIGRlYnVnZ2luZworICogVHJhY2tpbmcgb2YgZnVsbHkgYWxsb2NhdGVkIHNsYWJzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCiAgKi8KIHN0YXRpYyB2b2lkIGFkZF9mdWxsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sIHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtNjgyLDggKzc4MiwxOCBAQAogCXNwaW5fdW5sb2NrKCZuLT5saXN0X2xvY2spOwogfQogCi1zdGF0aWMgaW50IGFsbG9jX29iamVjdF9jaGVja3Moc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCQkJCXZvaWQgKm9iamVjdCkKK3N0YXRpYyB2b2lkIHNldHVwX29iamVjdF9kZWJ1ZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCQkJCXZvaWQgKm9iamVjdCkKK3sKKwlpZiAoIShzLT5mbGFncyAmIChTTEFCX1NUT1JFX1VTRVJ8U0xBQl9SRURfWk9ORXxfX09CSkVDVF9QT0lTT04pKSkKKwkJcmV0dXJuOworCisJaW5pdF9vYmplY3Qocywgb2JqZWN0LCAwKTsKKwlpbml0X3RyYWNraW5nKHMsIG9iamVjdCk7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfZGVidWdfcHJvY2Vzc2luZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCQl2b2lkICpvYmplY3QsIHZvaWQgKmFkZHIpCiB7CiAJaWYgKCFjaGVja19zbGFiKHMsIHBhZ2UpKQogCQlnb3RvIGJhZDsKQEAgLTY5OCwxOSArODA4LDIyIEBACiAJCWdvdG8gYmFkOwogCX0KIAotCWlmICghb2JqZWN0KQotCQlyZXR1cm4gMTsKLQotCWlmICghY2hlY2tfb2JqZWN0KHMsIHBhZ2UsIG9iamVjdCwgMCkpCisJaWYgKG9iamVjdCAmJiAhY2hlY2tfb2JqZWN0KHMsIHBhZ2UsIG9iamVjdCwgMCkpCiAJCWdvdG8gYmFkOwogCisJLyogU3VjY2VzcyBwZXJmb3JtIHNwZWNpYWwgZGVidWcgYWN0aXZpdGllcyBmb3IgYWxsb2NzICovCisJaWYgKHMtPmZsYWdzICYgU0xBQl9TVE9SRV9VU0VSKQorCQlzZXRfdHJhY2socywgb2JqZWN0LCBUUkFDS19BTExPQywgYWRkcik7CisJdHJhY2UocywgcGFnZSwgb2JqZWN0LCAxKTsKKwlpbml0X29iamVjdChzLCBvYmplY3QsIDEpOwogCXJldHVybiAxOworCiBiYWQ6CiAJaWYgKFBhZ2VTbGFiKHBhZ2UpKSB7CiAJCS8qCiAJCSAqIElmIHRoaXMgaXMgYSBzbGFiIHBhZ2UgdGhlbiBsZXRzIGRvIHRoZSBiZXN0IHdlIGNhbgogCQkgKiB0byBhdm9pZCBpc3N1ZXMgaW4gdGhlIGZ1dHVyZS4gTWFya2luZyBhbGwgb2JqZWN0cwotCQkgKiBhcyB1c2VkIGF2b2lkcyB0b3VjaGluZyB0aGUgcmVtYWluZGVyLgorCQkgKiBhcyB1c2VkIGF2b2lkcyB0b3VjaGluZyB0aGUgcmVtYWluaW5nIG9iamVjdHMuCiAJCSAqLwogCQlwcmludGsoS0VSTl9FUlIgIkBAQCBTTFVCOiAlcyBzbGFiIDB4JXAuIE1hcmtpbmcgYWxsIG9iamVjdHMgdXNlZC5cbiIsCiAJCQlzLT5uYW1lLCBwYWdlKTsKQEAgLTcyMiw4ICs4MzUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZyZWVfb2JqZWN0X2NoZWNrcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJCQkJdm9pZCAqb2JqZWN0KQorc3RhdGljIGludCBmcmVlX2RlYnVnX3Byb2Nlc3Npbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkJdm9pZCAqb2JqZWN0LCB2b2lkICphZGRyKQogewogCWlmICghY2hlY2tfc2xhYihzLCBwYWdlKSkKIAkJZ290byBmYWlsOwpAQCAtNzU3LDEzICs4NzAsMTA3IEBACiAJCQkJInRvIHNsYWIgJXMiLCBvYmplY3QsIHBhZ2UtPnNsYWItPm5hbWUpOwogCQlnb3RvIGZhaWw7CiAJfQorCisJLyogU3BlY2lhbCBkZWJ1ZyBhY3Rpdml0aWVzIGZvciBmcmVlaW5nIG9iamVjdHMgKi8KKwlpZiAoIVNsYWJGcm96ZW4ocGFnZSkgJiYgIXBhZ2UtPmZyZWVsaXN0KQorCQlyZW1vdmVfZnVsbChzLCBwYWdlKTsKKwlpZiAocy0+ZmxhZ3MgJiBTTEFCX1NUT1JFX1VTRVIpCisJCXNldF90cmFjayhzLCBvYmplY3QsIFRSQUNLX0ZSRUUsIGFkZHIpOworCXRyYWNlKHMsIHBhZ2UsIG9iamVjdCwgMCk7CisJaW5pdF9vYmplY3Qocywgb2JqZWN0LCAwKTsKIAlyZXR1cm4gMTsKKwogZmFpbDoKIAlwcmludGsoS0VSTl9FUlIgIkBAQCBTTFVCOiAlcyBzbGFiIDB4JXAgb2JqZWN0IGF0IDB4JXAgbm90IGZyZWVkLlxuIiwKIAkJcy0+bmFtZSwgcGFnZSwgb2JqZWN0KTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX2luaXQgc2V0dXBfc2x1Yl9kZWJ1ZyhjaGFyICpzdHIpCit7CisJaWYgKCFzdHIgfHwgKnN0ciAhPSAnPScpCisJCXNsdWJfZGVidWcgPSBERUJVR19ERUZBVUxUX0ZMQUdTOworCWVsc2UgeworCQlzdHIrKzsKKwkJaWYgKCpzdHIgPT0gMCB8fCAqc3RyID09ICcsJykKKwkJCXNsdWJfZGVidWcgPSBERUJVR19ERUZBVUxUX0ZMQUdTOworCQllbHNlCisJCWZvciggOypzdHIgJiYgKnN0ciAhPSAnLCc7IHN0cisrKQorCQkJc3dpdGNoICgqc3RyKSB7CisJCQljYXNlICdmJyA6IGNhc2UgJ0YnIDoKKwkJCQlzbHViX2RlYnVnIHw9IFNMQUJfREVCVUdfRlJFRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3onIDogY2FzZSAnWicgOgorCQkJCXNsdWJfZGVidWcgfD0gU0xBQl9SRURfWk9ORTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3AnIDogY2FzZSAnUCcgOgorCQkJCXNsdWJfZGVidWcgfD0gU0xBQl9QT0lTT047CisJCQkJYnJlYWs7CisJCQljYXNlICd1JyA6IGNhc2UgJ1UnIDoKKwkJCQlzbHViX2RlYnVnIHw9IFNMQUJfU1RPUkVfVVNFUjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3QnIDogY2FzZSAnVCcgOgorCQkJCXNsdWJfZGVidWcgfD0gU0xBQl9UUkFDRTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKEtFUk5fRVJSICJzbHViX2RlYnVnIG9wdGlvbiAnJWMnICIKKwkJCQkJInVua25vd24uIHNraXBwZWRcbiIsKnN0cik7CisJCQl9CisJfQorCisJaWYgKCpzdHIgPT0gJywnKQorCQlzbHViX2RlYnVnX3NsYWJzID0gc3RyICsgMTsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgic2x1Yl9kZWJ1ZyIsIHNldHVwX3NsdWJfZGVidWcpOworCitzdGF0aWMgdm9pZCBrbWVtX2NhY2hlX29wZW5fZGVidWdfY2hlY2soc3RydWN0IGttZW1fY2FjaGUgKnMpCit7CisJLyoKKwkgKiBUaGUgcGFnZS0+b2Zmc2V0IGZpZWxkIGlzIG9ubHkgMTYgYml0IHdpZGUuIFRoaXMgaXMgYW4gb2Zmc2V0CisJICogaW4gdW5pdHMgb2Ygd29yZHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGFuIG9iamVjdC4gSWYgdGhlIHNsYWIKKwkgKiBzaXplIGlzIGJpZ2dlciB0aGVuIHdlIGNhbm5vdCBtb3ZlIHRoZSBmcmVlIHBvaW50ZXIgYmVoaW5kIHRoZQorCSAqIG9iamVjdCBhbnltb3JlLgorCSAqCisJICogT24gMzIgYml0IHBsYXRmb3JtcyB0aGUgbGltaXQgaXMgMjU2ay4gT24gNjRiaXQgcGxhdGZvcm1zCisJICogdGhlIGxpbWl0IGlzIDUxMmsuCisJICoKKwkgKiBEZWJ1Z2dpbmcgb3IgY3RvciBtYXkgY3JlYXRlIGEgbmVlZCB0byBtb3ZlIHRoZSBmcmVlCisJICogcG9pbnRlci4gRmFpbCBpZiB0aGlzIGhhcHBlbnMuCisJICovCisJaWYgKHMtPm9ianNpemUgPj0gNjU1MzUgKiBzaXplb2Yodm9pZCAqKSkgeworCQlCVUdfT04ocy0+ZmxhZ3MgJiAoU0xBQl9SRURfWk9ORSB8IFNMQUJfUE9JU09OIHwKKwkJCQlTTEFCX1NUT1JFX1VTRVIgfCBTTEFCX0RFU1RST1lfQllfUkNVKSk7CisJCUJVR19PTihzLT5jdG9yKTsKKwl9CisJZWxzZQorCQkvKgorCQkgKiBFbmFibGUgZGVidWdnaW5nIGlmIHNlbGVjdGVkIG9uIHRoZSBrZXJuZWwgY29tbWFuZGxpbmUuCisJCSAqLworCQlpZiAoc2x1Yl9kZWJ1ZyAmJiAoIXNsdWJfZGVidWdfc2xhYnMgfHwKKwkJICAgIHN0cm5jbXAoc2x1Yl9kZWJ1Z19zbGFicywgcy0+bmFtZSwKKwkJICAgIAlzdHJsZW4oc2x1Yl9kZWJ1Z19zbGFicykpID09IDApKQorCQkJCXMtPmZsYWdzIHw9IHNsdWJfZGVidWc7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldHVwX29iamVjdF9kZWJ1ZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywKKwkJCXN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QpIHt9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFsbG9jX2RlYnVnX3Byb2Nlc3Npbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsCisJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9iamVjdCwgdm9pZCAqYWRkcikgeyByZXR1cm4gMDsgfQorCitzdGF0aWMgaW5saW5lIGludCBmcmVlX2RlYnVnX3Byb2Nlc3Npbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsCisJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9iamVjdCwgdm9pZCAqYWRkcikgeyByZXR1cm4gMDsgfQorCitzdGF0aWMgaW5saW5lIGludCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UpCisJCQl7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIGludCBjaGVja19vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJdm9pZCAqb2JqZWN0LCBpbnQgYWN0aXZlKSB7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX2Z1bGwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0IHBhZ2UgKnBhZ2UpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQga21lbV9jYWNoZV9vcGVuX2RlYnVnX2NoZWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzKSB7fQorI2RlZmluZSBzbHViX2RlYnVnIDAKKyNlbmRpZgogLyoKICAqIFNsYWIgYWxsb2NhdGlvbiBhbmQgZnJlZWluZwogICovCkBAIC03OTcsMTMgKzEwMDQsOSBAQAogc3RhdGljIHZvaWQgc2V0dXBfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQl2b2lkICpvYmplY3QpCiB7Ci0JaWYgKFBhZ2VFcnJvcihwYWdlKSkgewotCQlpbml0X29iamVjdChzLCBvYmplY3QsIDApOwotCQlpbml0X3RyYWNraW5nKHMsIG9iamVjdCk7Ci0JfQotCisJc2V0dXBfb2JqZWN0X2RlYnVnKHMsIHBhZ2UsIG9iamVjdCk7CiAJaWYgKHVubGlrZWx5KHMtPmN0b3IpKQotCQlzLT5jdG9yKG9iamVjdCwgcywgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKTsKKwkJcy0+Y3RvcihvYmplY3QsIHMsIDApOwogfQogCiBzdGF0aWMgc3RydWN0IHBhZ2UgKm5ld19zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCkBAIC04MzIsNyArMTAzNSw3IEBACiAJcGFnZS0+ZmxhZ3MgfD0gMSA8PCBQR19zbGFiOwogCWlmIChzLT5mbGFncyAmIChTTEFCX0RFQlVHX0ZSRUUgfCBTTEFCX1JFRF9aT05FIHwgU0xBQl9QT0lTT04gfAogCQkJU0xBQl9TVE9SRV9VU0VSIHwgU0xBQl9UUkFDRSkpCi0JCXBhZ2UtPmZsYWdzIHw9IDEgPDwgUEdfZXJyb3I7CisJCVNldFNsYWJEZWJ1ZyhwYWdlKTsKIAogCXN0YXJ0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWVuZCA9IHN0YXJ0ICsgcy0+b2JqZWN0cyAqIHMtPnNpemU7CkBAIC04NDEsNyArMTA0NCw3IEBACiAJCW1lbXNldChzdGFydCwgUE9JU09OX0lOVVNFLCBQQUdFX1NJWkUgPDwgcy0+b3JkZXIpOwogCiAJbGFzdCA9IHN0YXJ0OwotCWZvciAocCA9IHN0YXJ0ICsgcy0+c2l6ZTsgcCA8IGVuZDsgcCArPSBzLT5zaXplKSB7CisJZm9yX2VhY2hfb2JqZWN0KHAsIHMsIHN0YXJ0KSB7CiAJCXNldHVwX29iamVjdChzLCBwYWdlLCBsYXN0KTsKIAkJc2V0X2ZyZWVwb2ludGVyKHMsIGxhc3QsIHApOwogCQlsYXN0ID0gcDsKQEAgLTg1MCw2ICsxMDUzLDcgQEAKIAlzZXRfZnJlZXBvaW50ZXIocywgbGFzdCwgTlVMTCk7CiAKIAlwYWdlLT5mcmVlbGlzdCA9IHN0YXJ0OworCXBhZ2UtPmxvY2tsZXNzX2ZyZWVsaXN0ID0gTlVMTDsKIAlwYWdlLT5pbnVzZSA9IDA7CiBvdXQ6CiAJaWYgKGZsYWdzICYgX19HRlBfV0FJVCkKQEAgLTg2MSwxNyArMTA2NSwxMiBAQAogewogCWludCBwYWdlcyA9IDEgPDwgcy0+b3JkZXI7CiAKLQlpZiAodW5saWtlbHkoUGFnZUVycm9yKHBhZ2UpIHx8IHMtPmR0b3IpKSB7Ci0JCXZvaWQgKnN0YXJ0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwotCQl2b2lkICplbmQgPSBzdGFydCArIChwYWdlcyA8PCBQQUdFX1NISUZUKTsKKwlpZiAodW5saWtlbHkoU2xhYkRlYnVnKHBhZ2UpKSkgewogCQl2b2lkICpwOwogCiAJCXNsYWJfcGFkX2NoZWNrKHMsIHBhZ2UpOwotCQlmb3IgKHAgPSBzdGFydDsgcCA8PSBlbmQgLSBzLT5zaXplOyBwICs9IHMtPnNpemUpIHsKLQkJCWlmIChzLT5kdG9yKQotCQkJCXMtPmR0b3IocCwgcywgMCk7CisJCWZvcl9lYWNoX29iamVjdChwLCBzLCBwYWdlX2FkZHJlc3MocGFnZSkpCiAJCQljaGVja19vYmplY3QocywgcGFnZSwgcCwgMCk7Ci0JCX0KIAl9CiAKIAltb2Rfem9uZV9wYWdlX3N0YXRlKHBhZ2Vfem9uZShwYWdlKSwKQEAgLTkxMCw3ICsxMTA5LDggQEAKIAogCWF0b21pY19sb25nX2RlYygmbi0+bnJfc2xhYnMpOwogCXJlc2V0X3BhZ2VfbWFwY291bnQocGFnZSk7Ci0JcGFnZS0+ZmxhZ3MgJj0gfigxIDw8IFBHX3NsYWIgfCAxIDw8IFBHX2Vycm9yKTsKKwlDbGVhclNsYWJEZWJ1ZyhwYWdlKTsKKwlfX0NsZWFyUGFnZVNsYWIocGFnZSk7CiAJZnJlZV9zbGFiKHMsIHBhZ2UpOwogfQogCkBAIC05NjYsMjIgKzExNjYsMjMgQEAKIH0KIAogLyoKLSAqIExvY2sgcGFnZSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHBhcnRpYWwgbGlzdAorICogTG9jayBzbGFiIGFuZCByZW1vdmUgZnJvbSB0aGUgcGFydGlhbCBsaXN0LgogICoKLSAqIE11c3QgaG9sZCBsaXN0X2xvY2sKKyAqIE11c3QgaG9sZCBsaXN0X2xvY2suCiAgKi8KLXN0YXRpYyBpbnQgbG9ja19hbmRfZGVsX3NsYWIoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgaW5saW5lIGludCBsb2NrX2FuZF9mcmVlemVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlpZiAoc2xhYl90cnlsb2NrKHBhZ2UpKSB7CiAJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwogCQluLT5ucl9wYXJ0aWFsLS07CisJCVNldFNsYWJGcm96ZW4ocGFnZSk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIFRyeSB0byBnZXQgYSBwYXJ0aWFsIHNsYWIgZnJvbSBhIHNwZWNpZmljIG5vZGUKKyAqIFRyeSB0byBhbGxvY2F0ZSBhIHBhcnRpYWwgc2xhYiBmcm9tIGEgc3BlY2lmaWMgbm9kZS4KICAqLwogc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pCiB7CkBAIC05OTAsMTQgKzExOTEsMTUgQEAKIAkvKgogCSAqIFJhY3kgY2hlY2suIElmIHdlIG1pc3Rha2VubHkgc2VlIG5vIHBhcnRpYWwgc2xhYnMgdGhlbiB3ZQogCSAqIGp1c3QgYWxsb2NhdGUgYW4gZW1wdHkgc2xhYi4gSWYgd2UgbWlzdGFrZW5seSB0cnkgdG8gZ2V0IGEKLQkgKiBwYXJ0aWFsIHNsYWIgdGhlbiBnZXRfcGFydGlhbHMoKSB3aWxsIHJldHVybiBOVUxMLgorCSAqIHBhcnRpYWwgc2xhYiBhbmQgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUgdGhlbiBnZXRfcGFydGlhbHMoKQorCSAqIHdpbGwgcmV0dXJuIE5VTEwuCiAJICovCiAJaWYgKCFuIHx8ICFuLT5ucl9wYXJ0aWFsKQogCQlyZXR1cm4gTlVMTDsKIAogCXNwaW5fbG9jaygmbi0+bGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsICZuLT5wYXJ0aWFsLCBscnUpCi0JCWlmIChsb2NrX2FuZF9kZWxfc2xhYihuLCBwYWdlKSkKKwkJaWYgKGxvY2tfYW5kX2ZyZWV6ZV9zbGFiKG4sIHBhZ2UpKQogCQkJZ290byBvdXQ7CiAJcGFnZSA9IE5VTEw7CiBvdXQ6CkBAIC0xMDA2LDggKzEyMDgsNyBAQAogfQogCiAvKgotICogR2V0IGEgcGFnZSBmcm9tIHNvbWV3aGVyZS4gU2VhcmNoIGluIGluY3JlYXNpbmcgTlVNQQotICogZGlzdGFuY2VzLgorICogR2V0IGEgcGFnZSBmcm9tIHNvbWV3aGVyZS4gU2VhcmNoIGluIGluY3JlYXNpbmcgTlVNQSBkaXN0YW5jZXMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncykKIHsKQEAgLTEwMTcsMjQgKzEyMTgsMjIgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCS8qCi0JICogVGhlIGRlZnJhZyByYXRpbyBhbGxvd3MgdG8gY29uZmlndXJlIHRoZSB0cmFkZW9mZnMgYmV0d2VlbgotCSAqIGludGVyIG5vZGUgZGVmcmFnbWVudGF0aW9uIGFuZCBub2RlIGxvY2FsIGFsbG9jYXRpb25zLgotCSAqIEEgbG93ZXIgZGVmcmFnX3JhdGlvIGluY3JlYXNlcyB0aGUgdGVuZGVuY3kgdG8gZG8gbG9jYWwKLQkgKiBhbGxvY2F0aW9ucyBpbnN0ZWFkIG9mIHNjYW5uaW5nIHRocm91Z2h0IHRoZSBwYXJ0aWFsCi0JICogbGlzdHMgb24gb3RoZXIgbm9kZXMuCisJICogVGhlIGRlZnJhZyByYXRpbyBhbGxvd3MgYSBjb25maWd1cmF0aW9uIG9mIHRoZSB0cmFkZW9mZnMgYmV0d2VlbgorCSAqIGludGVyIG5vZGUgZGVmcmFnbWVudGF0aW9uIGFuZCBub2RlIGxvY2FsIGFsbG9jYXRpb25zLiBBIGxvd2VyCisJICogZGVmcmFnX3JhdGlvIGluY3JlYXNlcyB0aGUgdGVuZGVuY3kgdG8gZG8gbG9jYWwgYWxsb2NhdGlvbnMKKwkgKiBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgdG8gb2J0YWluIHBhcnRpYWwgc2xhYnMgZnJvbSBvdGhlciBub2Rlcy4KIAkgKgotCSAqIElmIGRlZnJhZ19yYXRpbyBpcyBzZXQgdG8gMCB0aGVuIGttYWxsb2MoKSBhbHdheXMKLQkgKiByZXR1cm5zIG5vZGUgbG9jYWwgb2JqZWN0cy4gSWYgaXRzIGhpZ2hlciB0aGVuIGttYWxsb2MoKQotCSAqIG1heSByZXR1cm4gb2ZmIG5vZGUgb2JqZWN0cyBpbiBvcmRlciB0byBhdm9pZCBmcmFnbWVudGF0aW9uLgotCSAqCi0JICogQSBoaWdoZXIgcmF0aW8gbWVhbnMgc2xhYnMgbWF5IGJlIHRha2VuIGZyb20gb3RoZXIgbm9kZXMKLQkgKiB0aHVzIHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgcGFydGlhbCBzbGFicyBvbiB0aG9zZSBub2Rlcy4KKwkgKiBJZiB0aGUgZGVmcmFnX3JhdGlvIGlzIHNldCB0byAwIHRoZW4ga21hbGxvYygpIGFsd2F5cworCSAqIHJldHVybnMgbm9kZSBsb2NhbCBvYmplY3RzLiBJZiB0aGUgcmF0aW8gaXMgaGlnaGVyIHRoZW4ga21hbGxvYygpCisJICogbWF5IHJldHVybiBvZmYgbm9kZSBvYmplY3RzIGJlY2F1c2UgcGFydGlhbCBzbGFicyBhcmUgb2J0YWluZWQKKwkgKiBmcm9tIG90aGVyIG5vZGVzIGFuZCBmaWxsZWQgdXAuCiAJICoKIAkgKiBJZiAvc3lzL3NsYWIveHgvZGVmcmFnX3JhdGlvIGlzIHNldCB0byAxMDAgKHdoaWNoIG1ha2VzCi0JICogZGVmcmFnX3JhdGlvID0gMTAwMCkgdGhlbiBldmVyeSAod2VsbCBhbG1vc3QpIGFsbG9jYXRpb24KLQkgKiB3aWxsIGZpcnN0IGF0dGVtcHQgdG8gZGVmcmFnIHNsYWIgY2FjaGVzIG9uIG90aGVyIG5vZGVzLiBUaGlzCi0JICogbWVhbnMgc2Nhbm5pbmcgb3ZlciBhbGwgbm9kZXMgdG8gbG9vayBmb3IgcGFydGlhbCBzbGFicyB3aGljaAotCSAqIG1heSBiZSBhIGJpdCBleHBlbnNpdmUgdG8gZG8gb24gZXZlcnkgc2xhYiBhbGxvY2F0aW9uLgorCSAqIGRlZnJhZ19yYXRpbyA9IDEwMDApIHRoZW4gZXZlcnkgKHdlbGwgYWxtb3N0KSBhbGxvY2F0aW9uIHdpbGwKKwkgKiBmaXJzdCBhdHRlbXB0IHRvIGRlZnJhZyBzbGFiIGNhY2hlcyBvbiBvdGhlciBub2Rlcy4gVGhpcyBtZWFucworCSAqIHNjYW5uaW5nIG92ZXIgYWxsIG5vZGVzIHRvIGxvb2sgZm9yIHBhcnRpYWwgc2xhYnMgd2hpY2ggbWF5IGJlCisJICogZXhwZW5zaXZlIGlmIHdlIGRvIGl0IGV2ZXJ5IHRpbWUgd2UgYXJlIHRyeWluZyB0byBmaW5kIGEgc2xhYgorCSAqIHdpdGggYXZhaWxhYmxlIG9iamVjdHMuCiAJICovCiAJaWYgKCFzLT5kZWZyYWdfcmF0aW8gfHwgZ2V0X2N5Y2xlcygpICUgMTAyNCA+IHMtPmRlZnJhZ19yYXRpbykKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMDc5LDI2ICsxMjc4LDI4IEBACiAgKgogICogT24gZXhpdCB0aGUgc2xhYiBsb2NrIHdpbGwgaGF2ZSBiZWVuIGRyb3BwZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHB1dGJhY2tfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgdm9pZCB1bmZyZWV6ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gZ2V0X25vZGUocywgcGFnZV90b19uaWQocGFnZSkpOwogCisJQ2xlYXJTbGFiRnJvemVuKHBhZ2UpOwogCWlmIChwYWdlLT5pbnVzZSkgewogCiAJCWlmIChwYWdlLT5mcmVlbGlzdCkKIAkJCWFkZF9wYXJ0aWFsKG4sIHBhZ2UpOwotCQllbHNlIGlmIChQYWdlRXJyb3IocGFnZSkgJiYgKHMtPmZsYWdzICYgU0xBQl9TVE9SRV9VU0VSKSkKKwkJZWxzZSBpZiAoU2xhYkRlYnVnKHBhZ2UpICYmIChzLT5mbGFncyAmIFNMQUJfU1RPUkVfVVNFUikpCiAJCQlhZGRfZnVsbChuLCBwYWdlKTsKIAkJc2xhYl91bmxvY2socGFnZSk7CiAKIAl9IGVsc2UgewogCQlpZiAobi0+bnJfcGFydGlhbCA8IE1JTl9QQVJUSUFMKSB7CiAJCQkvKgotCQkJICogQWRkaW5nIGFuIGVtcHR5IHBhZ2UgdG8gdGhlIHBhcnRpYWwgc2xhYnMgaW4gb3JkZXIKLQkJCSAqIHRvIGF2b2lkIHBhZ2UgYWxsb2NhdG9yIG92ZXJoZWFkLiBUaGlzIHBhZ2UgbmVlZHMgdG8KLQkJCSAqIGNvbWUgYWZ0ZXIgYWxsIHRoZSBvdGhlcnMgdGhhdCBhcmUgbm90IGZ1bGx5IGVtcHR5Ci0JCQkgKiBpbiBvcmRlciB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBtYXhpbXVtCi0JCQkgKiBkZWZyYWdtZW50YXRpb24uCisJCQkgKiBBZGRpbmcgYW4gZW1wdHkgc2xhYiB0byB0aGUgcGFydGlhbCBzbGFicyBpbiBvcmRlcgorCQkJICogdG8gYXZvaWQgcGFnZSBhbGxvY2F0b3Igb3ZlcmhlYWQuIFRoaXMgc2xhYiBuZWVkcworCQkJICogdG8gY29tZSBhZnRlciB0aGUgb3RoZXIgc2xhYnMgd2l0aCBvYmplY3RzIGluCisJCQkgKiBvcmRlciB0byBmaWxsIHRoZW0gdXAuIFRoYXQgd2F5IHRoZSBzaXplIG9mIHRoZQorCQkJICogcGFydGlhbCBsaXN0IHN0YXlzIHNtYWxsLiBrbWVtX2NhY2hlX3NocmluayBjYW4KKwkJCSAqIHJlY2xhaW0gZW1wdHkgc2xhYnMgZnJvbSB0aGUgcGFydGlhbCBsaXN0LgogCQkJICovCiAJCQlhZGRfcGFydGlhbF90YWlsKG4sIHBhZ2UpOwogCQkJc2xhYl91bmxvY2socGFnZSk7CkBAIC0xMTE0LDEwICsxMzE1LDI1IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRlYWN0aXZhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBjcHUpCiB7Ci0Jcy0+Y3B1X3NsYWJbY3B1XSA9IE5VTEw7Ci0JQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOworCS8qCisJICogTWVyZ2UgY3B1IGZyZWVsaXN0IGludG8gZnJlZWxpc3QuIFR5cGljYWxseSB3ZSBnZXQgaGVyZQorCSAqIGJlY2F1c2UgYm90aCBmcmVlbGlzdHMgYXJlIGVtcHR5LiBTbyB0aGlzIGlzIHVubGlrZWx5CisJICogdG8gb2NjdXIuCisJICovCisJd2hpbGUgKHVubGlrZWx5KHBhZ2UtPmxvY2tsZXNzX2ZyZWVsaXN0KSkgeworCQl2b2lkICoqb2JqZWN0OwogCi0JcHV0YmFja19zbGFiKHMsIHBhZ2UpOworCQkvKiBSZXRyaWV2ZSBvYmplY3QgZnJvbSBjcHVfZnJlZWxpc3QgKi8KKwkJb2JqZWN0ID0gcGFnZS0+bG9ja2xlc3NfZnJlZWxpc3Q7CisJCXBhZ2UtPmxvY2tsZXNzX2ZyZWVsaXN0ID0gcGFnZS0+bG9ja2xlc3NfZnJlZWxpc3RbcGFnZS0+b2Zmc2V0XTsKKworCQkvKiBBbmQgcHV0IG9udG8gdGhlIHJlZ3VsYXIgZnJlZWxpc3QgKi8KKwkJb2JqZWN0W3BhZ2UtPm9mZnNldF0gPSBwYWdlLT5mcmVlbGlzdDsKKwkJcGFnZS0+ZnJlZWxpc3QgPSBvYmplY3Q7CisJCXBhZ2UtPmludXNlLS07CisJfQorCXMtPmNwdV9zbGFiW2NwdV0gPSBOVUxMOworCXVuZnJlZXplX3NsYWIocywgcGFnZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZsdXNoX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgY3B1KQpAQCAtMTE2MCw0NyArMTM3Niw0NiBAQAogfQogCiAvKgotICogc2xhYl9hbGxvYyBpcyBvcHRpbWl6ZWQgdG8gb25seSBtb2RpZnkgdHdvIGNhY2hlbGluZXMgb24gdGhlIGZhc3QgcGF0aAotICogKGFzaWRlIGZyb20gdGhlIHN0YWNrKToKKyAqIFNsb3cgcGF0aC4gVGhlIGxvY2tsZXNzIGZyZWVsaXN0IGlzIGVtcHR5IG9yIHdlIG5lZWQgdG8gcGVyZm9ybQorICogZGVidWdnaW5nIGR1dGllcy4KICAqCi0gKiAxLiBUaGUgcGFnZSBzdHJ1Y3QKLSAqIDIuIFRoZSBmaXJzdCBjYWNoZWxpbmUgb2YgdGhlIG9iamVjdCB0byBiZSBhbGxvY2F0ZWQuCisgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KICAqCi0gKiBUaGUgb25seSBjYWNoZSBsaW5lcyB0aGF0IGFyZSByZWFkIChhcGFydCBmcm9tIGNvZGUpIGlzIHRoZQotICogcGVyIGNwdSBhcnJheSBpbiB0aGUga21lbV9jYWNoZSBzdHJ1Y3QuCisgKiBQcm9jZXNzaW5nIGlzIHN0aWxsIHZlcnkgZmFzdCBpZiBuZXcgb2JqZWN0cyBoYXZlIGJlZW4gZnJlZWQgdG8gdGhlCisgKiByZWd1bGFyIGZyZWVsaXN0LiBJbiB0aGF0IGNhc2Ugd2Ugc2ltcGx5IHRha2Ugb3ZlciB0aGUgcmVndWxhciBmcmVlbGlzdAorICogYXMgdGhlIGxvY2tsZXNzIGZyZWVsaXN0IGFuZCB6YXAgdGhlIHJlZ3VsYXIgZnJlZWxpc3QuCiAgKgotICogRmFzdHBhdGggaXMgbm90IHBvc3NpYmxlIGlmIHdlIG5lZWQgdG8gZ2V0IGEgbmV3IHNsYWIgb3IgaGF2ZQotICogZGVidWdnaW5nIGVuYWJsZWQgKHdoaWNoIG1lYW5zIGFsbCBzbGFicyBhcmUgbWFya2VkIHdpdGggUGFnZUVycm9yKQorICogSWYgdGhhdCBpcyBub3Qgd29ya2luZyB0aGVuIHdlIGZhbGwgYmFjayB0byB0aGUgcGFydGlhbCBsaXN0cy4gV2UgdGFrZSB0aGUKKyAqIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGZyZWVsaXN0IGFzIHRoZSBvYmplY3QgdG8gYWxsb2NhdGUgbm93IGFuZCBtb3ZlIHRoZQorICogcmVzdCBvZiB0aGUgZnJlZWxpc3QgdG8gdGhlIGxvY2tsZXNzIGZyZWVsaXN0LgorICoKKyAqIEFuZCBpZiB3ZSB3ZXJlIHVuYWJsZSB0byBnZXQgYSBuZXcgc2xhYiBmcm9tIHRoZSBwYXJ0aWFsIHNsYWIgbGlzdHMgdGhlbgorICogd2UgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBzbGFiLiBUaGlzIGlzIHNsb3dlc3QgcGF0aCBzaW5jZSB3ZSBtYXkgc2xlZXAuCiAgKi8KLXN0YXRpYyB2b2lkICpzbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLAotCQkJCWdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSwgdm9pZCAqYWRkcikKK3N0YXRpYyB2b2lkICpfX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsCisJCWdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSwgdm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdm9pZCAqKm9iamVjdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjcHU7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JcGFnZSA9IHMtPmNwdV9zbGFiW2NwdV07CiAJaWYgKCFwYWdlKQogCQlnb3RvIG5ld19zbGFiOwogCiAJc2xhYl9sb2NrKHBhZ2UpOwogCWlmICh1bmxpa2VseShub2RlICE9IC0xICYmIHBhZ2VfdG9fbmlkKHBhZ2UpICE9IG5vZGUpKQogCQlnb3RvIGFub3RoZXJfc2xhYjsKLXJlZG86Citsb2FkX2ZyZWVsaXN0OgogCW9iamVjdCA9IHBhZ2UtPmZyZWVsaXN0OwogCWlmICh1bmxpa2VseSghb2JqZWN0KSkKIAkJZ290byBhbm90aGVyX3NsYWI7Ci0JaWYgKHVubGlrZWx5KFBhZ2VFcnJvcihwYWdlKSkpCisJaWYgKHVubGlrZWx5KFNsYWJEZWJ1ZyhwYWdlKSkpCiAJCWdvdG8gZGVidWc7CiAKLWhhdmVfb2JqZWN0OgotCXBhZ2UtPmludXNlKys7Ci0JcGFnZS0+ZnJlZWxpc3QgPSBvYmplY3RbcGFnZS0+b2Zmc2V0XTsKKwlvYmplY3QgPSBwYWdlLT5mcmVlbGlzdDsKKwlwYWdlLT5sb2NrbGVzc19mcmVlbGlzdCA9IG9iamVjdFtwYWdlLT5vZmZzZXRdOworCXBhZ2UtPmludXNlID0gcy0+b2JqZWN0czsKKwlwYWdlLT5mcmVlbGlzdCA9IE5VTEw7CiAJc2xhYl91bmxvY2socGFnZSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiBvYmplY3Q7CiAKIGFub3RoZXJfc2xhYjoKQEAgLTEyMDgsMTEgKzE0MjMsOSBAQAogCiBuZXdfc2xhYjoKIAlwYWdlID0gZ2V0X3BhcnRpYWwocywgZ2ZwZmxhZ3MsIG5vZGUpOwotCWlmIChsaWtlbHkocGFnZSkpIHsKLWhhdmVfc2xhYjoKKwlpZiAocGFnZSkgewogCQlzLT5jcHVfc2xhYltjcHVdID0gcGFnZTsKLQkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKLQkJZ290byByZWRvOworCQlnb3RvIGxvYWRfZnJlZWxpc3Q7CiAJfQogCiAJcGFnZSA9IG5ld19zbGFiKHMsIGdmcGZsYWdzLCBub2RlKTsKQEAgLTEyMjAsOSArMTQzMywxMSBAQAogCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJCWlmIChzLT5jcHVfc2xhYltjcHVdKSB7CiAJCQkvKgotCQkJICogU29tZW9uZSBlbHNlIHBvcHVsYXRlZCB0aGUgY3B1X3NsYWIgd2hpbGUgd2UgZW5hYmxlZAotCQkJICogaW50ZXJydXB0cywgb3Igd2UgaGF2ZSBnb3Qgc2NoZWR1bGVkIG9uIGFub3RoZXIgY3B1LgotCQkJICogVGhlIHBhZ2UgbWF5IG5vdCBiZSBvbiB0aGUgcmVxdWVzdGVkIG5vZGUuCisJCQkgKiBTb21lb25lIGVsc2UgcG9wdWxhdGVkIHRoZSBjcHVfc2xhYiB3aGlsZSB3ZQorCQkJICogZW5hYmxlZCBpbnRlcnJ1cHRzLCBvciB3ZSBoYXZlIGdvdHRlbiBzY2hlZHVsZWQKKwkJCSAqIG9uIGFub3RoZXIgY3B1LiBUaGUgcGFnZSBtYXkgbm90IGJlIG9uIHRoZQorCQkJICogcmVxdWVzdGVkIG5vZGUgZXZlbiBpZiBfX0dGUF9USElTTk9ERSB3YXMKKwkJCSAqIHNwZWNpZmllZC4gU28gd2UgbmVlZCB0byByZWNoZWNrLgogCQkJICovCiAJCQlpZiAobm9kZSA9PSAtMSB8fAogCQkJCXBhZ2VfdG9fbmlkKHMtPmNwdV9zbGFiW2NwdV0pID09IG5vZGUpIHsKQEAgLTEyMzMsMjkgKzE0NDgsNTggQEAKIAkJCQlkaXNjYXJkX3NsYWIocywgcGFnZSk7CiAJCQkJcGFnZSA9IHMtPmNwdV9zbGFiW2NwdV07CiAJCQkJc2xhYl9sb2NrKHBhZ2UpOwotCQkJCWdvdG8gcmVkbzsKKwkJCQlnb3RvIGxvYWRfZnJlZWxpc3Q7CiAJCQl9Ci0JCQkvKiBEdW1wIHRoZSBjdXJyZW50IHNsYWIgKi8KKwkJCS8qIE5ldyBzbGFiIGRvZXMgbm90IGZpdCBvdXIgZXhwZWN0YXRpb25zICovCiAJCQlmbHVzaF9zbGFiKHMsIHMtPmNwdV9zbGFiW2NwdV0sIGNwdSk7CiAJCX0KIAkJc2xhYl9sb2NrKHBhZ2UpOwotCQlnb3RvIGhhdmVfc2xhYjsKKwkJU2V0U2xhYkZyb3plbihwYWdlKTsKKwkJcy0+Y3B1X3NsYWJbY3B1XSA9IHBhZ2U7CisJCWdvdG8gbG9hZF9mcmVlbGlzdDsKIAl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiBOVUxMOwogZGVidWc6Ci0JaWYgKCFhbGxvY19vYmplY3RfY2hlY2tzKHMsIHBhZ2UsIG9iamVjdCkpCisJb2JqZWN0ID0gcGFnZS0+ZnJlZWxpc3Q7CisJaWYgKCFhbGxvY19kZWJ1Z19wcm9jZXNzaW5nKHMsIHBhZ2UsIG9iamVjdCwgYWRkcikpCiAJCWdvdG8gYW5vdGhlcl9zbGFiOwotCWlmIChzLT5mbGFncyAmIFNMQUJfU1RPUkVfVVNFUikKLQkJc2V0X3RyYWNrKHMsIG9iamVjdCwgVFJBQ0tfQUxMT0MsIGFkZHIpOwotCWlmIChzLT5mbGFncyAmIFNMQUJfVFJBQ0UpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVFJBQ0UgJXMgYWxsb2MgMHglcCBpbnVzZT0lZCBmcD0weCVwXG4iLAotCQkJcy0+bmFtZSwgb2JqZWN0LCBwYWdlLT5pbnVzZSwKLQkJCXBhZ2UtPmZyZWVsaXN0KTsKLQkJZHVtcF9zdGFjaygpOworCisJcGFnZS0+aW51c2UrKzsKKwlwYWdlLT5mcmVlbGlzdCA9IG9iamVjdFtwYWdlLT5vZmZzZXRdOworCXNsYWJfdW5sb2NrKHBhZ2UpOworCXJldHVybiBvYmplY3Q7Cit9CisKKy8qCisgKiBJbmxpbmVkIGZhc3RwYXRoIHNvIHRoYXQgYWxsb2NhdGlvbiBmdW5jdGlvbnMgKGttYWxsb2MsIGttZW1fY2FjaGVfYWxsb2MpCisgKiBoYXZlIHRoZSBmYXN0cGF0aCBmb2xkZWQgaW50byB0aGVpciBmdW5jdGlvbnMuIFNvIG5vIGZ1bmN0aW9uIGNhbGwKKyAqIG92ZXJoZWFkIGZvciByZXF1ZXN0cyB0aGF0IGNhbiBiZSBzYXRpc2ZpZWQgb24gdGhlIGZhc3RwYXRoLgorICoKKyAqIFRoZSBmYXN0cGF0aCB3b3JrcyBieSBmaXJzdCBjaGVja2luZyBpZiB0aGUgbG9ja2xlc3MgZnJlZWxpc3QgY2FuIGJlIHVzZWQuCisgKiBJZiBub3QgdGhlbiBfX3NsYWJfYWxsb2MgaXMgY2FsbGVkIGZvciBzbG93IHByb2Nlc3NpbmcuCisgKgorICogT3RoZXJ3aXNlIHdlIGNhbiBzaW1wbHkgcGljayB0aGUgbmV4dCBvYmplY3QgZnJvbSB0aGUgbG9ja2xlc3MgZnJlZSBsaXN0LgorICovCitzdGF0aWMgdm9pZCBfX2Fsd2F5c19pbmxpbmUgKnNsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsCisJCQkJZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLCB2b2lkICphZGRyKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXZvaWQgKipvYmplY3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlwYWdlID0gcy0+Y3B1X3NsYWJbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlpZiAodW5saWtlbHkoIXBhZ2UgfHwgIXBhZ2UtPmxvY2tsZXNzX2ZyZWVsaXN0IHx8CisJCQkobm9kZSAhPSAtMSAmJiBwYWdlX3RvX25pZChwYWdlKSAhPSBub2RlKSkpCisKKwkJb2JqZWN0ID0gX19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBhZGRyLCBwYWdlKTsKKworCWVsc2UgeworCQlvYmplY3QgPSBwYWdlLT5sb2NrbGVzc19mcmVlbGlzdDsKKwkJcGFnZS0+bG9ja2xlc3NfZnJlZWxpc3QgPSBvYmplY3RbcGFnZS0+b2Zmc2V0XTsKIAl9Ci0JaW5pdF9vYmplY3Qocywgb2JqZWN0LCAxKTsKLQlnb3RvIGhhdmVfb2JqZWN0OworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gb2JqZWN0OwogfQogCiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncykKQEAgLTEyNzMsMzMgKzE1MTcsMjkgQEAKICNlbmRpZgogCiAvKgotICogVGhlIGZhc3RwYXRoIG9ubHkgd3JpdGVzIHRoZSBjYWNoZWxpbmUgb2YgdGhlIHBhZ2Ugc3RydWN0IGFuZCB0aGUgZmlyc3QKLSAqIGNhY2hlbGluZSBvZiB0aGUgb2JqZWN0LgorICogU2xvdyBwYXRjaCBoYW5kbGluZy4gVGhpcyBtYXkgc3RpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHkgc2luY2Ugb2JqZWN0cworICogaGF2ZSBhIGxvbmdlciBsaWZldGltZSB0aGFuIHRoZSBjcHUgc2xhYnMgaW4gbW9zdCBwcm9jZXNzaW5nIGxvYWRzLgogICoKLSAqIE5vIHNwZWNpYWwgY2FjaGVsaW5lcyBuZWVkIHRvIGJlIHJlYWQKKyAqIFNvIHdlIHN0aWxsIGF0dGVtcHQgdG8gcmVkdWNlIGNhY2hlIGxpbmUgdXNhZ2UuIEp1c3QgdGFrZSB0aGUgc2xhYgorICogbG9jayBhbmQgZnJlZSB0aGUgaXRlbS4gSWYgdGhlcmUgaXMgbm8gYWRkaXRpb25hbCBwYXJ0aWFsIHBhZ2UKKyAqIGhhbmRsaW5nIHJlcXVpcmVkIHRoZW4gd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseS4KICAqLwotc3RhdGljIHZvaWQgc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKK3N0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkJdm9pZCAqeCwgdm9pZCAqYWRkcikKIHsKIAl2b2lkICpwcmlvcjsKIAl2b2lkICoqb2JqZWN0ID0gKHZvaWQgKil4OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJc2xhYl9sb2NrKHBhZ2UpOwogCi0JaWYgKHVubGlrZWx5KFBhZ2VFcnJvcihwYWdlKSkpCisJaWYgKHVubGlrZWx5KFNsYWJEZWJ1ZyhwYWdlKSkpCiAJCWdvdG8gZGVidWc7CiBjaGVja3Nfb2s6CiAJcHJpb3IgPSBvYmplY3RbcGFnZS0+b2Zmc2V0XSA9IHBhZ2UtPmZyZWVsaXN0OwogCXBhZ2UtPmZyZWVsaXN0ID0gb2JqZWN0OwogCXBhZ2UtPmludXNlLS07CiAKLQlpZiAodW5saWtlbHkoUGFnZUFjdGl2ZShwYWdlKSkpCi0JCS8qCi0JCSAqIENwdSBzbGFicyBhcmUgbmV2ZXIgb24gcGFydGlhbCBsaXN0cyBhbmQgYXJlCi0JCSAqIG5ldmVyIGZyZWVkLgotCQkgKi8KKwlpZiAodW5saWtlbHkoU2xhYkZyb3plbihwYWdlKSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmICh1bmxpa2VseSghcGFnZS0+aW51c2UpKQpAQCAtMTMxNSwzOSArMTU1NSw1MyBAQAogCiBvdXRfdW5sb2NrOgogCXNsYWJfdW5sb2NrKHBhZ2UpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm47CiAKIHNsYWJfZW1wdHk6CiAJaWYgKHByaW9yKQogCQkvKgotCQkgKiBTbGFiIG9uIHRoZSBwYXJ0aWFsIGxpc3QuCisJCSAqIFNsYWIgc3RpbGwgb24gdGhlIHBhcnRpYWwgbGlzdC4KIAkJICovCiAJCXJlbW92ZV9wYXJ0aWFsKHMsIHBhZ2UpOwogCiAJc2xhYl91bmxvY2socGFnZSk7CiAJZGlzY2FyZF9zbGFiKHMsIHBhZ2UpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm47CiAKIGRlYnVnOgotCWlmICghZnJlZV9vYmplY3RfY2hlY2tzKHMsIHBhZ2UsIHgpKQorCWlmICghZnJlZV9kZWJ1Z19wcm9jZXNzaW5nKHMsIHBhZ2UsIHgsIGFkZHIpKQogCQlnb3RvIG91dF91bmxvY2s7Ci0JaWYgKCFQYWdlQWN0aXZlKHBhZ2UpICYmICFwYWdlLT5mcmVlbGlzdCkKLQkJcmVtb3ZlX2Z1bGwocywgcGFnZSk7Ci0JaWYgKHMtPmZsYWdzICYgU0xBQl9TVE9SRV9VU0VSKQotCQlzZXRfdHJhY2socywgeCwgVFJBQ0tfRlJFRSwgYWRkcik7Ci0JaWYgKHMtPmZsYWdzICYgU0xBQl9UUkFDRSkgewotCQlwcmludGsoS0VSTl9JTkZPICJUUkFDRSAlcyBmcmVlIDB4JXAgaW51c2U9JWQgZnA9MHglcFxuIiwKLQkJCXMtPm5hbWUsIG9iamVjdCwgcGFnZS0+aW51c2UsCi0JCQlwYWdlLT5mcmVlbGlzdCk7Ci0JCXByaW50X3NlY3Rpb24oIk9iamVjdCIsICh2b2lkICopb2JqZWN0LCBzLT5vYmpzaXplKTsKLQkJZHVtcF9zdGFjaygpOwotCX0KLQlpbml0X29iamVjdChzLCBvYmplY3QsIDApOwogCWdvdG8gY2hlY2tzX29rOwogfQogCisvKgorICogRmFzdHBhdGggd2l0aCBmb3JjZWQgaW5saW5pbmcgdG8gcHJvZHVjZSBhIGtmcmVlIGFuZCBrbWVtX2NhY2hlX2ZyZWUgdGhhdAorICogY2FuIHBlcmZvcm0gZmFzdHBhdGggZnJlZWluZyB3aXRob3V0IGFkZGl0aW9uYWwgZnVuY3Rpb24gY2FsbHMuCisgKgorICogVGhlIGZhc3RwYXRoIGlzIG9ubHkgcG9zc2libGUgaWYgd2UgYXJlIGZyZWVpbmcgdG8gdGhlIGN1cnJlbnQgY3B1IHNsYWIKKyAqIG9mIHRoaXMgcHJvY2Vzc29yLiBUaGlzIHR5cGljYWxseSB0aGUgY2FzZSBpZiB3ZSBoYXZlIGp1c3QgYWxsb2NhdGVkCisgKiB0aGUgaXRlbSBiZWZvcmUuCisgKgorICogSWYgZmFzdHBhdGggaXMgbm90IHBvc3NpYmxlIHRoZW4gZmFsbCBiYWNrIHRvIF9fc2xhYl9mcmVlIHdoZXJlIHdlIGRlYWwKKyAqIHdpdGggYWxsIHNvcnRzIG9mIHNwZWNpYWwgcHJvY2Vzc2luZy4KKyAqLworc3RhdGljIHZvaWQgX19hbHdheXNfaW5saW5lIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKKwkJCXN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICp4LCB2b2lkICphZGRyKQoreworCXZvaWQgKipvYmplY3QgPSAodm9pZCAqKXg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAobGlrZWx5KHBhZ2UgPT0gcy0+Y3B1X3NsYWJbc21wX3Byb2Nlc3Nvcl9pZCgpXSAmJgorCQkJCQkJIVNsYWJEZWJ1ZyhwYWdlKSkpIHsKKwkJb2JqZWN0W3BhZ2UtPm9mZnNldF0gPSBwYWdlLT5sb2NrbGVzc19mcmVlbGlzdDsKKwkJcGFnZS0+bG9ja2xlc3NfZnJlZWxpc3QgPSBvYmplY3Q7CisJfSBlbHNlCisJCV9fc2xhYl9mcmVlKHMsIHBhZ2UsIHgsIGFkZHIpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCiB2b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTEzNzAsMjIgKzE2MjQsMTYgQEAKIH0KIAogLyoKLSAqIGttZW1fY2FjaGVfb3BlbiBwcm9kdWNlcyBvYmplY3RzIGFsaWduZWQgYXQgInNpemUiIGFuZCB0aGUgZmlyc3Qgb2JqZWN0Ci0gKiBpcyBwbGFjZWQgYXQgb2Zmc2V0IDAgaW4gdGhlIHNsYWIgKFdlIGhhdmUgbm8gbWV0YWluZm9ybWF0aW9uIG9uIHRoZQotICogc2xhYiwgYWxsIHNsYWJzIGFyZSBpbiBlc3NlbmNlICJvZmYgc2xhYiIpLgotICoKLSAqIEluIG9yZGVyIHRvIGdldCB0aGUgZGVzaXJlZCBhbGlnbm1lbnQgb25lIGp1c3QgbmVlZHMgdG8gYWxpZ24gdGhlCi0gKiBzaXplLgorICogT2JqZWN0IHBsYWNlbWVudCBpbiBhIHNsYWIgaXMgbWFkZSB2ZXJ5IGVhc3kgYmVjYXVzZSB3ZSBhbHdheXMgc3RhcnQgYXQKKyAqIG9mZnNldCAwLiBJZiB3ZSB0dW5lIHRoZSBzaXplIG9mIHRoZSBvYmplY3QgdG8gdGhlIGFsaWdubWVudCB0aGVuIHdlIGNhbgorICogZ2V0IHRoZSByZXF1aXJlZCBhbGlnbm1lbnQgYnkgcHV0dGluZyBvbmUgcHJvcGVybHkgc2l6ZWQgb2JqZWN0IGFmdGVyCisgKiBhbm90aGVyLgogICoKICAqIE5vdGljZSB0aGF0IHRoZSBhbGxvY2F0aW9uIG9yZGVyIGRldGVybWluZXMgdGhlIHNpemVzIG9mIHRoZSBwZXIgY3B1CiAgKiBjYWNoZXMuIEVhY2ggcHJvY2Vzc29yIGhhcyBhbHdheXMgb25lIHNsYWIgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9ucy4KICAqIEluY3JlYXNpbmcgdGhlIGFsbG9jYXRpb24gb3JkZXIgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgc2xhYnMKLSAqIG11c3QgYmUgbW92ZWQgb24gYW5kIG9mZiB0aGUgcGFydGlhbCBsaXN0cyBhbmQgdGhlcmVmb3JlIG1heSBpbmZsdWVuY2UKKyAqIG11c3QgYmUgbW92ZWQgb24gYW5kIG9mZiB0aGUgcGFydGlhbCBsaXN0cyBhbmQgaXMgdGhlcmVmb3JlIGEgZmFjdG9yIGluCiAgKiBsb2NraW5nIG92ZXJoZWFkLgotICoKLSAqIFRoZSBvZmZzZXQgaXMgdXNlZCB0byByZWxvY2F0ZSB0aGUgZnJlZSBsaXN0IGxpbmsgaW4gZWFjaCBvYmplY3QuIEl0IGlzCi0gKiB0aGVyZWZvcmUgcG9zc2libGUgdG8gbW92ZSB0aGUgZnJlZSBsaXN0IGxpbmsgYmVoaW5kIHRoZSBvYmplY3QuIFRoaXMKLSAqIGlzIG5lY2Vzc2FyeSBmb3IgUkNVIHRvIHdvcmsgcHJvcGVybHkgYW5kIGFsc28gdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCiAgKi8KIAogLyoKQEAgLTEzOTYsNzYgKzE2NDQsMTEwIEBACiAgKi8KIHN0YXRpYyBpbnQgc2x1Yl9taW5fb3JkZXI7CiBzdGF0aWMgaW50IHNsdWJfbWF4X29yZGVyID0gREVGQVVMVF9NQVhfT1JERVI7Ci0KLS8qCi0gKiBNaW5pbXVtIG51bWJlciBvZiBvYmplY3RzIHBlciBzbGFiLiBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0bwotICogcmVkdWNlIGxvY2tpbmcgb3ZlcmhlYWQuIFNpbWlsYXIgdG8gdGhlIHF1ZXVlIHNpemUgaW4gU0xBQi4KLSAqLwogc3RhdGljIGludCBzbHViX21pbl9vYmplY3RzID0gREVGQVVMVF9NSU5fT0JKRUNUUzsKIAogLyoKICAqIE1lcmdlIGNvbnRyb2wuIElmIHRoaXMgaXMgc2V0IHRoZW4gbm8gbWVyZ2luZyBvZiBzbGFiIGNhY2hlcyB3aWxsIG9jY3VyLgorICogKENvdWxkIGJlIHJlbW92ZWQuIFRoaXMgd2FzIGludHJvZHVjZWQgdG8gcGFjaWZ5IHRoZSBtZXJnZSBza2VwdGljcy4pCiAgKi8KIHN0YXRpYyBpbnQgc2x1Yl9ub21lcmdlOwogCiAvKgotICogRGVidWcgc2V0dGluZ3M6Ci0gKi8KLXN0YXRpYyBpbnQgc2x1Yl9kZWJ1ZzsKLQotc3RhdGljIGNoYXIgKnNsdWJfZGVidWdfc2xhYnM7Ci0KLS8qCiAgKiBDYWxjdWxhdGUgdGhlIG9yZGVyIG9mIGFsbG9jYXRpb24gZ2l2ZW4gYW4gc2xhYiBvYmplY3Qgc2l6ZS4KICAqCi0gKiBUaGUgb3JkZXIgb2YgYWxsb2NhdGlvbiBoYXMgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIG90aGVyIGVsZW1lbnRzCi0gKiBvZiB0aGUgc3lzdGVtLiBHZW5lcmFsbHkgb3JkZXIgMCBhbGxvY2F0aW9ucyBzaG91bGQgYmUgcHJlZmVycmVkCi0gKiBzaW5jZSB0aGV5IGRvIG5vdCBjYXVzZSBmcmFnbWVudGF0aW9uIGluIHRoZSBwYWdlIGFsbG9jYXRvci4gTGFyZ2VyCi0gKiBvYmplY3RzIG1heSBoYXZlIHByb2JsZW1zIHdpdGggb3JkZXIgMCBiZWNhdXNlIHRoZXJlIG1heSBiZSB0b28gbXVjaAotICogc3BhY2UgbGVmdCB1bnVzZWQgaW4gYSBzbGFiLiBXZSBnbyB0byBhIGhpZ2hlciBvcmRlciBpZiBtb3JlIHRoYW4gMS84dGgKLSAqIG9mIHRoZSBzbGFiIHdvdWxkIGJlIHdhc3RlZC4KKyAqIFRoZSBvcmRlciBvZiBhbGxvY2F0aW9uIGhhcyBzaWduaWZpY2FudCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIG90aGVyCisgKiBzeXN0ZW0gY29tcG9uZW50cy4gR2VuZXJhbGx5IG9yZGVyIDAgYWxsb2NhdGlvbnMgc2hvdWxkIGJlIHByZWZlcnJlZCBzaW5jZQorICogb3JkZXIgMCBkb2VzIG5vdCBjYXVzZSBmcmFnbWVudGF0aW9uIGluIHRoZSBwYWdlIGFsbG9jYXRvci4gTGFyZ2VyIG9iamVjdHMKKyAqIGJlIHByb2JsZW1hdGljIHRvIHB1dCBpbnRvIG9yZGVyIDAgc2xhYnMgYmVjYXVzZSB0aGVyZSBtYXkgYmUgdG9vIG11Y2gKKyAqIHVudXNlZCBzcGFjZSBsZWZ0LiBXZSBnbyB0byBhIGhpZ2hlciBvcmRlciBpZiBtb3JlIHRoYW4gMS84dGggb2YgdGhlIHNsYWIKKyAqIHdvdWxkIGJlIHdhc3RlZC4KICAqCi0gKiBJbiBvcmRlciB0byByZWFjaCBzYXRpc2ZhY3RvcnkgcGVyZm9ybWFuY2Ugd2UgbXVzdCBlbnN1cmUgdGhhdAotICogYSBtaW5pbXVtIG51bWJlciBvZiBvYmplY3RzIGlzIGluIG9uZSBzbGFiLiBPdGhlcndpc2Ugd2UgbWF5Ci0gKiBnZW5lcmF0ZSB0b28gbXVjaCBhY3Rpdml0eSBvbiB0aGUgcGFydGlhbCBsaXN0cy4gVGhpcyBpcyBsZXNzIGEKLSAqIGNvbmNlcm4gZm9yIGxhcmdlIHNsYWJzIHRob3VnaC4gc2x1Yl9tYXhfb3JkZXIgc3BlY2lmaWVzIHRoZSBvcmRlcgotICogd2hlcmUgd2UgYmVnaW4gdG8gc3RvcCBjb25zaWRlcmluZyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gYSBzbGFiLgorICogSW4gb3JkZXIgdG8gcmVhY2ggc2F0aXNmYWN0b3J5IHBlcmZvcm1hbmNlIHdlIG11c3QgZW5zdXJlIHRoYXQgYSBtaW5pbXVtCisgKiBudW1iZXIgb2Ygb2JqZWN0cyBpcyBpbiBvbmUgc2xhYi4gT3RoZXJ3aXNlIHdlIG1heSBnZW5lcmF0ZSB0b28gbXVjaAorICogYWN0aXZpdHkgb24gdGhlIHBhcnRpYWwgbGlzdHMgd2hpY2ggcmVxdWlyZXMgdGFraW5nIHRoZSBsaXN0X2xvY2suIFRoaXMgaXMKKyAqIGxlc3MgYSBjb25jZXJuIGZvciBsYXJnZSBzbGFicyB0aG91Z2ggd2hpY2ggYXJlIHJhcmVseSB1c2VkLgogICoKLSAqIEhpZ2hlciBvcmRlciBhbGxvY2F0aW9ucyBhbHNvIGFsbG93IHRoZSBwbGFjZW1lbnQgb2YgbW9yZSBvYmplY3RzCi0gKiBpbiBhIHNsYWIgYW5kIHRoZXJlYnkgcmVkdWNlIG9iamVjdCBoYW5kbGluZyBvdmVyaGVhZC4gSWYgdGhlIHVzZXIKLSAqIGhhcyByZXF1ZXN0ZWQgYSBoaWdoZXIgbWluaW51bSBvcmRlciB0aGVuIHdlIHN0YXJ0IHdpdGggdGhhdCBvbmUKLSAqIGluc3RlYWQgb2YgemVyby4KKyAqIHNsdWJfbWF4X29yZGVyIHNwZWNpZmllcyB0aGUgb3JkZXIgd2hlcmUgd2UgYmVnaW4gdG8gc3RvcCBjb25zaWRlcmluZyB0aGUKKyAqIG51bWJlciBvZiBvYmplY3RzIGluIGEgc2xhYiBhcyBjcml0aWNhbC4gSWYgd2UgcmVhY2ggc2x1Yl9tYXhfb3JkZXIgdGhlbgorICogd2UgdHJ5IHRvIGtlZXAgdGhlIHBhZ2Ugb3JkZXIgYXMgbG93IGFzIHBvc3NpYmxlLiBTbyB3ZSBhY2NlcHQgbW9yZSB3YXN0ZQorICogb2Ygc3BhY2UgaW4gZmF2b3Igb2YgYSBzbWFsbCBwYWdlIG9yZGVyLgorICoKKyAqIEhpZ2hlciBvcmRlciBhbGxvY2F0aW9ucyBhbHNvIGFsbG93IHRoZSBwbGFjZW1lbnQgb2YgbW9yZSBvYmplY3RzIGluIGEKKyAqIHNsYWIgYW5kIHRoZXJlYnkgcmVkdWNlIG9iamVjdCBoYW5kbGluZyBvdmVyaGVhZC4gSWYgdGhlIHVzZXIgaGFzCisgKiByZXF1ZXN0ZWQgYSBoaWdoZXIgbWluaW51bSBvcmRlciB0aGVuIHdlIHN0YXJ0IHdpdGggdGhhdCBvbmUgaW5zdGVhZCBvZgorICogdGhlIHNtYWxsZXN0IG9yZGVyIHdoaWNoIHdpbGwgZml0IHRoZSBvYmplY3QuCiAgKi8KLXN0YXRpYyBpbnQgY2FsY3VsYXRlX29yZGVyKGludCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgc2xhYl9vcmRlcihpbnQgc2l6ZSwgaW50IG1pbl9vYmplY3RzLAorCQkJCWludCBtYXhfb3JkZXIsIGludCBmcmFjdF9sZWZ0b3ZlcikKIHsKIAlpbnQgb3JkZXI7CiAJaW50IHJlbTsKIAotCWZvciAob3JkZXIgPSBtYXgoc2x1Yl9taW5fb3JkZXIsIGZscyhzaXplIC0gMSkgLSBQQUdFX1NISUZUKTsKLQkJCW9yZGVyIDwgTUFYX09SREVSOyBvcmRlcisrKSB7CisJZm9yIChvcmRlciA9IG1heChzbHViX21pbl9vcmRlciwKKwkJCQlmbHMobWluX29iamVjdHMgKiBzaXplIC0gMSkgLSBQQUdFX1NISUZUKTsKKwkJCW9yZGVyIDw9IG1heF9vcmRlcjsgb3JkZXIrKykgeworCiAJCXVuc2lnbmVkIGxvbmcgc2xhYl9zaXplID0gUEFHRV9TSVpFIDw8IG9yZGVyOwogCi0JCWlmIChzbHViX21heF9vcmRlciA+IG9yZGVyICYmCi0JCQkJc2xhYl9zaXplIDwgc2x1Yl9taW5fb2JqZWN0cyAqIHNpemUpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc2xhYl9zaXplIDwgc2l6ZSkKKwkJaWYgKHNsYWJfc2l6ZSA8IG1pbl9vYmplY3RzICogc2l6ZSkKIAkJCWNvbnRpbnVlOwogCiAJCXJlbSA9IHNsYWJfc2l6ZSAlIHNpemU7CiAKLQkJaWYgKHJlbSA8PSAoUEFHRV9TSVpFIDw8IG9yZGVyKSAvIDgpCisJCWlmIChyZW0gPD0gc2xhYl9zaXplIC8gZnJhY3RfbGVmdG92ZXIpCiAJCQlicmVhazsKIAogCX0KLQlpZiAob3JkZXIgPj0gTUFYX09SREVSKQotCQlyZXR1cm4gLUUyQklHOworCiAJcmV0dXJuIG9yZGVyOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjYWxjdWxhdGVfb3JkZXIoaW50IHNpemUpCit7CisJaW50IG9yZGVyOworCWludCBtaW5fb2JqZWN0czsKKwlpbnQgZnJhY3Rpb247CisKKwkvKgorCSAqIEF0dGVtcHQgdG8gZmluZCBiZXN0IGNvbmZpZ3VyYXRpb24gZm9yIGEgc2xhYi4gVGhpcworCSAqIHdvcmtzIGJ5IGZpcnN0IGF0dGVtcHRpbmcgdG8gZ2VuZXJhdGUgYSBsYXlvdXQgd2l0aAorCSAqIHRoZSBiZXN0IGNvbmZpZ3VyYXRpb24gYW5kIGJhY2tpbmcgb2ZmIGdyYWR1YWxseS4KKwkgKgorCSAqIEZpcnN0IHdlIHJlZHVjZSB0aGUgYWNjZXB0YWJsZSB3YXN0ZSBpbiBhIHNsYWIuIFRoZW4KKwkgKiB3ZSByZWR1Y2UgdGhlIG1pbmltdW0gb2JqZWN0cyByZXF1aXJlZCBpbiBhIHNsYWIuCisJICovCisJbWluX29iamVjdHMgPSBzbHViX21pbl9vYmplY3RzOworCXdoaWxlIChtaW5fb2JqZWN0cyA+IDEpIHsKKwkJZnJhY3Rpb24gPSA4OworCQl3aGlsZSAoZnJhY3Rpb24gPj0gNCkgeworCQkJb3JkZXIgPSBzbGFiX29yZGVyKHNpemUsIG1pbl9vYmplY3RzLAorCQkJCQkJc2x1Yl9tYXhfb3JkZXIsIGZyYWN0aW9uKTsKKwkJCWlmIChvcmRlciA8PSBzbHViX21heF9vcmRlcikKKwkJCQlyZXR1cm4gb3JkZXI7CisJCQlmcmFjdGlvbiAvPSAyOworCQl9CisJCW1pbl9vYmplY3RzIC89IDI7CisJfQorCisJLyoKKwkgKiBXZSB3ZXJlIHVuYWJsZSB0byBwbGFjZSBtdWx0aXBsZSBvYmplY3RzIGluIGEgc2xhYi4gTm93CisJICogbGV0cyBzZWUgaWYgd2UgY2FuIHBsYWNlIGEgc2luZ2xlIG9iamVjdCB0aGVyZS4KKwkgKi8KKwlvcmRlciA9IHNsYWJfb3JkZXIoc2l6ZSwgMSwgc2x1Yl9tYXhfb3JkZXIsIDEpOworCWlmIChvcmRlciA8PSBzbHViX21heF9vcmRlcikKKwkJcmV0dXJuIG9yZGVyOworCisJLyoKKwkgKiBEb2ggdGhpcyBzbGFiIGNhbm5vdCBiZSBwbGFjZWQgdXNpbmcgc2x1Yl9tYXhfb3JkZXIuCisJICovCisJb3JkZXIgPSBzbGFiX29yZGVyKHNpemUsIDEsIE1BWF9PUkRFUiwgMSk7CisJaWYgKG9yZGVyIDw9IE1BWF9PUkRFUikKKwkJcmV0dXJuIG9yZGVyOworCXJldHVybiAtRU5PU1lTOworfQorCiAvKgotICogRnVuY3Rpb24gdG8gZmlndXJlIG91dCB3aGljaCBhbGlnbm1lbnQgdG8gdXNlIGZyb20gdGhlCi0gKiB2YXJpb3VzIHdheXMgb2Ygc3BlY2lmeWluZyBpdC4KKyAqIEZpZ3VyZSBvdXQgd2hhdCB0aGUgYWxpZ25tZW50IG9mIHRoZSBvYmplY3RzIHdpbGwgYmUuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9hbGlnbm1lbnQodW5zaWduZWQgbG9uZyBmbGFncywKIAkJdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBzaXplKQpAQCAtMTQ4MCw4ICsxNzYyLDggQEAKIAkgKiB0aGVuIHVzZSBpdC4KIAkgKi8KIAlpZiAoKGZsYWdzICYgU0xBQl9IV0NBQ0hFX0FMSUdOKSAmJgotCQkJc2l6ZSA+IEwxX0NBQ0hFX0JZVEVTIC8gMikKLQkJcmV0dXJuIG1heF90KHVuc2lnbmVkIGxvbmcsIGFsaWduLCBMMV9DQUNIRV9CWVRFUyk7CisJCQlzaXplID4gY2FjaGVfbGluZV9zaXplKCkgLyAyKQorCQlyZXR1cm4gbWF4X3QodW5zaWduZWQgbG9uZywgYWxpZ24sIGNhY2hlX2xpbmVfc2l6ZSgpKTsKIAogCWlmIChhbGlnbiA8IEFSQ0hfU0xBQl9NSU5BTElHTikKIAkJcmV0dXJuIEFSQ0hfU0xBQl9NSU5BTElHTjsKQEAgLTE1MjUsNyArMTgwNyw3IEBACiAJcGFnZS0+ZnJlZWxpc3QgPSBnZXRfZnJlZXBvaW50ZXIoa21hbGxvY19jYWNoZXMsIG4pOwogCXBhZ2UtPmludXNlKys7CiAJa21hbGxvY19jYWNoZXMtPm5vZGVbbm9kZV0gPSBuOwotCWluaXRfb2JqZWN0KGttYWxsb2NfY2FjaGVzLCBuLCAxKTsKKwlzZXR1cF9vYmplY3RfZGVidWcoa21hbGxvY19jYWNoZXMsIHBhZ2UsIG4pOwogCWluaXRfa21lbV9jYWNoZV9ub2RlKG4pOwogCWF0b21pY19sb25nX2luYygmbi0+bnJfc2xhYnMpOwogCWFkZF9wYXJ0aWFsKG4sIHBhZ2UpOwpAQCAtMTYwNyw3ICsxODg5LDcgQEAKIAkgKiB0aGVuIHdlIHNob3VsZCBuZXZlciBwb2lzb24gdGhlIG9iamVjdCBpdHNlbGYuCiAJICovCiAJaWYgKChmbGFncyAmIFNMQUJfUE9JU09OKSAmJiAhKGZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZX1JDVSkgJiYKLQkJCSFzLT5jdG9yICYmICFzLT5kdG9yKQorCQkJIXMtPmN0b3IpCiAJCXMtPmZsYWdzIHw9IF9fT0JKRUNUX1BPSVNPTjsKIAllbHNlCiAJCXMtPmZsYWdzICY9IH5fX09CSkVDVF9QT0lTT047CkBAIC0xNjE5LDI0ICsxOTAxLDI0IEBACiAJICovCiAJc2l6ZSA9IEFMSUdOKHNpemUsIHNpemVvZih2b2lkICopKTsKIAorI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCiAJLyoKLQkgKiBJZiB3ZSBhcmUgcmVkem9uaW5nIHRoZW4gY2hlY2sgaWYgdGhlcmUgaXMgc29tZSBzcGFjZSBiZXR3ZWVuIHRoZQorCSAqIElmIHdlIGFyZSBSZWR6b25pbmcgdGhlbiBjaGVjayBpZiB0aGVyZSBpcyBzb21lIHNwYWNlIGJldHdlZW4gdGhlCiAJICogZW5kIG9mIHRoZSBvYmplY3QgYW5kIHRoZSBmcmVlIHBvaW50ZXIuIElmIG5vdCB0aGVuIGFkZCBhbgotCSAqIGFkZGl0aW9uYWwgd29yZCwgc28gdGhhdCB3ZSBjYW4gZXN0YWJsaXNoIGEgcmVkem9uZSBiZXR3ZWVuCi0JICogdGhlIG9iamVjdCBhbmQgdGhlIGZyZWVwb2ludGVyIHRvIGJlIGFibGUgdG8gY2hlY2sgZm9yIG92ZXJ3cml0ZXMuCisJICogYWRkaXRpb25hbCB3b3JkIHRvIGhhdmUgc29tZSBieXRlcyB0byBzdG9yZSBSZWR6b25lIGluZm9ybWF0aW9uLgogCSAqLwogCWlmICgoZmxhZ3MgJiBTTEFCX1JFRF9aT05FKSAmJiBzaXplID09IHMtPm9ianNpemUpCiAJCXNpemUgKz0gc2l6ZW9mKHZvaWQgKik7CisjZW5kaWYKIAogCS8qCi0JICogV2l0aCB0aGF0IHdlIGhhdmUgZGV0ZXJtaW5lZCBob3cgbXVjaCBvZiB0aGUgc2xhYiBpcyBpbiBhY3R1YWwKLQkgKiB1c2UgYnkgdGhlIG9iamVjdC4gVGhpcyBpcyB0aGUgcG90ZW50aWFsIG9mZnNldCB0byB0aGUgZnJlZQotCSAqIHBvaW50ZXIuCisJICogV2l0aCB0aGF0IHdlIGhhdmUgZGV0ZXJtaW5lZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFjdHVhbCB1c2UKKwkgKiBieSB0aGUgb2JqZWN0LiBUaGlzIGlzIHRoZSBwb3RlbnRpYWwgb2Zmc2V0IHRvIHRoZSBmcmVlIHBvaW50ZXIuCiAJICovCiAJcy0+aW51c2UgPSBzaXplOwogCiAJaWYgKCgoZmxhZ3MgJiAoU0xBQl9ERVNUUk9ZX0JZX1JDVSB8IFNMQUJfUE9JU09OKSkgfHwKLQkJcy0+Y3RvciB8fCBzLT5kdG9yKSkgeworCQlzLT5jdG9yKSkgewogCQkvKgogCQkgKiBSZWxvY2F0ZSBmcmVlIHBvaW50ZXIgYWZ0ZXIgdGhlIG9iamVjdCBpZiBpdCBpcyBub3QKIAkJICogcGVybWl0dGVkIHRvIG92ZXJ3cml0ZSB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgb2JqZWN0IG9uCkBAIC0xNjQ5LDYgKzE5MzEsNyBAQAogCQlzaXplICs9IHNpemVvZih2b2lkICopOwogCX0KIAorI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCiAJaWYgKGZsYWdzICYgU0xBQl9TVE9SRV9VU0VSKQogCQkvKgogCQkgKiBOZWVkIHRvIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IGFsbG9jcyBhbmQgZnJlZXMgYWZ0ZXIKQEAgLTE2NTYsNyArMTkzOSw3IEBACiAJCSAqLwogCQlzaXplICs9IDIgKiBzaXplb2Yoc3RydWN0IHRyYWNrKTsKIAotCWlmIChmbGFncyAmIERFQlVHX0RFRkFVTFRfRkxBR1MpCisJaWYgKGZsYWdzICYgU0xBQl9SRURfWk9ORSkKIAkJLyoKIAkJICogQWRkIHNvbWUgZW1wdHkgcGFkZGluZyBzbyB0aGF0IHdlIGNhbiBjYXRjaAogCQkgKiBvdmVyd3JpdGVzIGZyb20gZWFybGllciBvYmplY3RzIHJhdGhlciB0aGFuIGxldApAQCAtMTY2NSwxMCArMTk0OCwxMiBAQAogCQkgKiBvZiB0aGUgb2JqZWN0LgogCQkgKi8KIAkJc2l6ZSArPSBzaXplb2Yodm9pZCAqKTsKKyNlbmRpZgorCiAJLyoKIAkgKiBEZXRlcm1pbmUgdGhlIGFsaWdubWVudCBiYXNlZCBvbiB2YXJpb3VzIHBhcmFtZXRlcnMgdGhhdCB0aGUKLQkgKiB1c2VyIHNwZWNpZmllZCAodGhpcyBpcyB1bmVjZXNzYXJpbHkgY29tcGxleCBkdWUgdG8gdGhlIGF0dGVtcHQKLQkgKiB0byBiZSBjb21wYXRpYmxlIHdpdGggU0xBQi4gU2hvdWxkIGJlIGNsZWFuZWQgdXAgc29tZSBkYXkpLgorCSAqIHVzZXIgc3BlY2lmaWVkIGFuZCB0aGUgZHluYW1pYyBkZXRlcm1pbmF0aW9uIG9mIGNhY2hlIGxpbmUgc2l6ZQorCSAqIG9uIGJvb3R1cC4KIAkgKi8KIAlhbGlnbiA9IGNhbGN1bGF0ZV9hbGlnbm1lbnQoZmxhZ3MsIGFsaWduLCBzLT5vYmpzaXplKTsKIApAQCAtMTcwMCw2MiArMTk4NSwxOCBAQAogCiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGZpbmlzaF9ib290c3RyYXAodm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpoOwotCWludCBlcnI7Ci0KLQlzbGFiX3N0YXRlID0gU1lTRlM7Ci0KLQlsaXN0X2Zvcl9lYWNoKGgsICZzbGFiX2NhY2hlcykgewotCQlzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9Ci0JCQljb250YWluZXJfb2YoaCwgc3RydWN0IGttZW1fY2FjaGUsIGxpc3QpOwotCi0JCWVyciA9IHN5c2ZzX3NsYWJfYWRkKHMpOwotCQlCVUdfT04oZXJyKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQga21lbV9jYWNoZV9vcGVuKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywKIAkJY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsCiAJCXNpemVfdCBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJdm9pZCAoKmN0b3IpKHZvaWQgKiwgc3RydWN0IGttZW1fY2FjaGUgKiwgdW5zaWduZWQgbG9uZyksCi0JCXZvaWQgKCpkdG9yKSh2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpKQorCQl2b2lkICgqY3Rvcikodm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNoZSAqLCB1bnNpZ25lZCBsb25nKSkKIHsKIAltZW1zZXQocywgMCwga21lbV9zaXplKTsKIAlzLT5uYW1lID0gbmFtZTsKIAlzLT5jdG9yID0gY3RvcjsKLQlzLT5kdG9yID0gZHRvcjsKIAlzLT5vYmpzaXplID0gc2l6ZTsKIAlzLT5mbGFncyA9IGZsYWdzOwogCXMtPmFsaWduID0gYWxpZ247Ci0KLQkvKgotCSAqIFRoZSBwYWdlLT5vZmZzZXQgZmllbGQgaXMgb25seSAxNiBiaXQgd2lkZS4gVGhpcyBpcyBhbiBvZmZzZXQKLQkgKiBpbiB1bml0cyBvZiB3b3JkcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYW4gb2JqZWN0LiBJZiB0aGUgc2xhYgotCSAqIHNpemUgaXMgYmlnZ2VyIHRoZW4gd2UgY2Fubm90IG1vdmUgdGhlIGZyZWUgcG9pbnRlciBiZWhpbmQgdGhlCi0JICogb2JqZWN0IGFueW1vcmUuCi0JICoKLQkgKiBPbiAzMiBiaXQgcGxhdGZvcm1zIHRoZSBsaW1pdCBpcyAyNTZrLiBPbiA2NGJpdCBwbGF0Zm9ybXMKLQkgKiB0aGUgbGltaXQgaXMgNTEyay4KLQkgKgotCSAqIERlYnVnZ2luZyBvciBjdG9yL2R0b3JzIG1heSBjcmVhdGUgYSBuZWVkIHRvIG1vdmUgdGhlIGZyZWUKLQkgKiBwb2ludGVyLiBGYWlsIGlmIHRoaXMgaGFwcGVucy4KLQkgKi8KLQlpZiAocy0+c2l6ZSA+PSA2NTUzNSAqIHNpemVvZih2b2lkICopKSB7Ci0JCUJVR19PTihmbGFncyAmIChTTEFCX1JFRF9aT05FIHwgU0xBQl9QT0lTT04gfAotCQkJCVNMQUJfU1RPUkVfVVNFUiB8IFNMQUJfREVTVFJPWV9CWV9SQ1UpKTsKLQkJQlVHX09OKGN0b3IgfHwgZHRvcik7Ci0JfQotCWVsc2UKLQkJLyoKLQkJICogRW5hYmxlIGRlYnVnZ2luZyBpZiBzZWxlY3RlZCBvbiB0aGUga2VybmVsIGNvbW1hbmRsaW5lLgotCQkgKi8KLQkJaWYgKHNsdWJfZGVidWcgJiYgKCFzbHViX2RlYnVnX3NsYWJzIHx8Ci0JCSAgICBzdHJuY21wKHNsdWJfZGVidWdfc2xhYnMsIG5hbWUsCi0JCSAgICAJc3RybGVuKHNsdWJfZGVidWdfc2xhYnMpKSA9PSAwKSkKLQkJCQlzLT5mbGFncyB8PSBzbHViX2RlYnVnOworCWttZW1fY2FjaGVfb3Blbl9kZWJ1Z19jaGVjayhzKTsKIAogCWlmICghY2FsY3VsYXRlX3NpemVzKHMpKQogCQlnb3RvIGVycm9yOwpAQCAtMTc4Myw3ICsyMDI0LDYgQEAKIGludCBrbWVtX3B0cl92YWxpZGF0ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3Qgdm9pZCAqb2JqZWN0KQogewogCXN0cnVjdCBwYWdlICogcGFnZTsKLQl2b2lkICphZGRyOwogCiAJcGFnZSA9IGdldF9vYmplY3RfcGFnZShvYmplY3QpOwogCkBAIC0xNzkxLDEzICsyMDMxLDcgQEAKIAkJLyogTm8gc2xhYiBvciB3cm9uZyBzbGFiICovCiAJCXJldHVybiAwOwogCi0JYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKLQlpZiAob2JqZWN0IDwgYWRkciB8fCBvYmplY3QgPj0gYWRkciArIHMtPm9iamVjdHMgKiBzLT5zaXplKQotCQkvKiBPdXQgb2YgYm91bmRzICovCi0JCXJldHVybiAwOwotCi0JaWYgKChvYmplY3QgLSBhZGRyKSAlIHMtPnNpemUpCi0JCS8qIEltcHJvcGVybHkgYWxpZ25lZCAqLworCWlmICghY2hlY2tfdmFsaWRfcG9pbnRlcihzLCBwYWdlLCBvYmplY3QpKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC0xODI2LDcgKzIwNjAsOCBAQAogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX25hbWUpOwogCiAvKgotICogQXR0ZW1wdCB0byBmcmVlIGFsbCBzbGFicyBvbiBhIG5vZGUKKyAqIEF0dGVtcHQgdG8gZnJlZSBhbGwgc2xhYnMgb24gYSBub2RlLiBSZXR1cm4gdGhlIG51bWJlciBvZiBzbGFicyB3ZQorICogd2VyZSB1bmFibGUgdG8gZnJlZS4KICAqLwogc3RhdGljIGludCBmcmVlX2xpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sCiAJCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQpAQCAtMTg0Nyw3ICsyMDgyLDcgQEAKIH0KIAogLyoKLSAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyB1c2VkIGJ5IHNsYWIgY2FjaGUKKyAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyB1c2VkIGJ5IGEgc2xhYiBjYWNoZS4KICAqLwogc3RhdGljIGludCBrbWVtX2NhY2hlX2Nsb3NlKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogewpAQCAtMTkzMiw0NSArMjE2Nyw2IEBACiAKIF9fc2V0dXAoInNsdWJfbm9tZXJnZSIsIHNldHVwX3NsdWJfbm9tZXJnZSk7CiAKLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX3NsdWJfZGVidWcoY2hhciAqc3RyKQotewotCWlmICghc3RyIHx8ICpzdHIgIT0gJz0nKQotCQlzbHViX2RlYnVnID0gREVCVUdfREVGQVVMVF9GTEFHUzsKLQllbHNlIHsKLQkJc3RyKys7Ci0JCWlmICgqc3RyID09IDAgfHwgKnN0ciA9PSAnLCcpCi0JCQlzbHViX2RlYnVnID0gREVCVUdfREVGQVVMVF9GTEFHUzsKLQkJZWxzZQotCQlmb3IoIDsqc3RyICYmICpzdHIgIT0gJywnOyBzdHIrKykKLQkJCXN3aXRjaCAoKnN0cikgewotCQkJY2FzZSAnZicgOiBjYXNlICdGJyA6Ci0JCQkJc2x1Yl9kZWJ1ZyB8PSBTTEFCX0RFQlVHX0ZSRUU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICd6JyA6IGNhc2UgJ1onIDoKLQkJCQlzbHViX2RlYnVnIHw9IFNMQUJfUkVEX1pPTkU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdwJyA6IGNhc2UgJ1AnIDoKLQkJCQlzbHViX2RlYnVnIHw9IFNMQUJfUE9JU09OOwotCQkJCWJyZWFrOwotCQkJY2FzZSAndScgOiBjYXNlICdVJyA6Ci0JCQkJc2x1Yl9kZWJ1ZyB8PSBTTEFCX1NUT1JFX1VTRVI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICd0JyA6IGNhc2UgJ1QnIDoKLQkJCQlzbHViX2RlYnVnIHw9IFNMQUJfVFJBQ0U7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXByaW50ayhLRVJOX0VSUiAic2x1Yl9kZWJ1ZyBvcHRpb24gJyVjJyAiCi0JCQkJCSJ1bmtub3duLiBza2lwcGVkXG4iLCpzdHIpOwotCQkJfQotCX0KLQotCWlmICgqc3RyID09ICcsJykKLQkJc2x1Yl9kZWJ1Z19zbGFicyA9IHN0ciArIDE7Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoInNsdWJfZGVidWciLCBzZXR1cF9zbHViX2RlYnVnKTsKLQogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpjcmVhdGVfa21hbGxvY19jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAkJY29uc3QgY2hhciAqbmFtZSwgaW50IHNpemUsIGdmcF90IGdmcF9mbGFncykKIHsKQEAgLTE5ODEsNyArMjE3Nyw3IEBACiAKIAlkb3duX3dyaXRlKCZzbHViX2xvY2spOwogCWlmICgha21lbV9jYWNoZV9vcGVuKHMsIGdmcF9mbGFncywgbmFtZSwgc2l6ZSwgQVJDSF9LTUFMTE9DX01JTkFMSUdOLAotCQkJZmxhZ3MsIE5VTEwsIE5VTEwpKQorCQkJZmxhZ3MsIE5VTEwpKQogCQlnb3RvIHBhbmljOwogCiAJbGlzdF9hZGQoJnMtPmxpc3QsICZzbGFiX2NhY2hlcyk7CkBAIC0yMTA4LDEzICsyMzA0LDE0IEBACiBFWFBPUlRfU1lNQk9MKGtmcmVlKTsKIAogLyoKLSAqICBrbWVtX2NhY2hlX3NocmluayByZW1vdmVzIGVtcHR5IHNsYWJzIGZyb20gdGhlIHBhcnRpYWwgbGlzdHMKLSAqICBhbmQgdGhlbiBzb3J0cyB0aGUgcGFydGlhbGx5IGFsbG9jYXRlZCBzbGFicyBieSB0aGUgbnVtYmVyCi0gKiAgb2YgaXRlbXMgaW4gdXNlLiBUaGUgc2xhYnMgd2l0aCB0aGUgbW9zdCBpdGVtcyBpbiB1c2UKLSAqICBjb21lIGZpcnN0LiBOZXcgYWxsb2NhdGlvbnMgd2lsbCByZW1vdmUgdGhlc2UgZnJvbSB0aGUKLSAqICBwYXJ0aWFsIGxpc3QgYmVjYXVzZSB0aGV5IGFyZSBmdWxsLiBUaGUgc2xhYnMgd2l0aCB0aGUKLSAqICBsZWFzdCBpdGVtcyBhcmUgcGxhY2VkIGxhc3QuIElmIGl0IGhhcHBlbnMgdGhhdCB0aGUgb2JqZWN0cwotICogIGFyZSBmcmVlZCB0aGVuIHRoZSBwYWdlIGNhbiBiZSByZXR1cm5lZCB0byB0aGUgcGFnZSBhbGxvY2F0b3IuCisgKiBrbWVtX2NhY2hlX3NocmluayByZW1vdmVzIGVtcHR5IHNsYWJzIGZyb20gdGhlIHBhcnRpYWwgbGlzdHMgYW5kIHNvcnRzCisgKiB0aGUgcmVtYWluaW5nIHNsYWJzIGJ5IHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdXNlLiBUaGUgc2xhYnMgd2l0aCB0aGUKKyAqIG1vc3QgaXRlbXMgaW4gdXNlIGNvbWUgZmlyc3QuIE5ldyBhbGxvY2F0aW9ucyB3aWxsIHRoZW4gZmlsbCB0aG9zZSB1cAorICogYW5kIHRodXMgdGhleSBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBwYXJ0aWFsIGxpc3RzLgorICoKKyAqIFRoZSBzbGFicyB3aXRoIHRoZSBsZWFzdCBpdGVtcyBhcmUgcGxhY2VkIGxhc3QuIFRoaXMgcmVzdWx0cyBpbiB0aGVtCisgKiBiZWluZyBhbGxvY2F0ZWQgZnJvbSBsYXN0IGluY3JlYXNpbmcgdGhlIGNoYW5jZSB0aGF0IHRoZSBsYXN0IG9iamVjdHMKKyAqIGFyZSBmcmVlZCBpbiB0aGVtLgogICovCiBpbnQga21lbV9jYWNoZV9zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpCiB7CkBAIC0yMTQzLDEyICsyMzQwLDEwIEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZuLT5saXN0X2xvY2ssIGZsYWdzKTsKIAogCQkvKgotCQkgKiBCdWlsZCBsaXN0cyBpbmRleGVkIGJ5IHRoZSBpdGVtcyBpbiB1c2UgaW4KLQkJICogZWFjaCBzbGFiIG9yIGZyZWUgc2xhYnMgaWYgZW1wdHkuCisJCSAqIEJ1aWxkIGxpc3RzIGluZGV4ZWQgYnkgdGhlIGl0ZW1zIGluIHVzZSBpbiBlYWNoIHNsYWIuCiAJCSAqCi0JCSAqIE5vdGUgdGhhdCBjb25jdXJyZW50IGZyZWVzIG1heSBvY2N1ciB3aGlsZQotCQkgKiB3ZSBob2xkIHRoZSBsaXN0X2xvY2suIHBhZ2UtPmludXNlIGhlcmUgaXMKLQkJICogdGhlIHVwcGVyIGxpbWl0LgorCQkgKiBOb3RlIHRoYXQgY29uY3VycmVudCBmcmVlcyBtYXkgb2NjdXIgd2hpbGUgd2UgaG9sZCB0aGUKKwkJICogbGlzdF9sb2NrLiBwYWdlLT5pbnVzZSBoZXJlIGlzIHRoZSB1cHBlciBsaW1pdC4KIAkJICovCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0LCAmbi0+cGFydGlhbCwgbHJ1KSB7CiAJCQlpZiAoIXBhZ2UtPmludXNlICYmIHNsYWJfdHJ5bG9jayhwYWdlKSkgewpAQCAtMjE3Miw4ICsyMzY3LDggQEAKIAkJCWdvdG8gb3V0OwogCiAJCS8qCi0JCSAqIFJlYnVpbGQgdGhlIHBhcnRpYWwgbGlzdCB3aXRoIHRoZSBzbGFicyBmaWxsZWQgdXAKLQkJICogbW9zdCBmaXJzdCBhbmQgdGhlIGxlYXN0IHVzZWQgc2xhYnMgYXQgdGhlIGVuZC4KKwkJICogUmVidWlsZCB0aGUgcGFydGlhbCBsaXN0IHdpdGggdGhlIHNsYWJzIGZpbGxlZCB1cCBtb3N0CisJCSAqIGZpcnN0IGFuZCB0aGUgbGVhc3QgdXNlZCBzbGFicyBhdCB0aGUgZW5kLgogCQkgKi8KIAkJZm9yIChpID0gcy0+b2JqZWN0cyAtIDE7IGkgPj0gMDsgaS0tKQogCQkJbGlzdF9zcGxpY2Uoc2xhYnNfYnlfaW51c2UgKyBpLCBuLT5wYXJ0aWFsLnByZXYpOwpAQCAtMjE4OSw3ICsyMzg0LDYgQEAKIAogLyoqCiAgKiBrcmVhbGxvYyAtIHJlYWxsb2NhdGUgbWVtb3J5LiBUaGUgY29udGVudHMgd2lsbCByZW1haW4gdW5jaGFuZ2VkLgotICoKICAqIEBwOiBvYmplY3QgdG8gcmVhbGxvY2F0ZSBtZW1vcnkgZm9yLgogICogQG5ld19zaXplOiBob3cgbWFueSBieXRlcyBvZiBtZW1vcnkgYXJlIHJlcXVpcmVkLgogICogQGZsYWdzOiB0aGUgdHlwZSBvZiBtZW1vcnkgdG8gYWxsb2NhdGUuCkBAIC0yMjAxLDkgKzIzOTUsOCBAQAogICovCiB2b2lkICprcmVhbGxvYyhjb25zdCB2b2lkICpwLCBzaXplX3QgbmV3X3NpemUsIGdmcF90IGZsYWdzKQogewotCXN0cnVjdCBrbWVtX2NhY2hlICpuZXdfY2FjaGU7CiAJdm9pZCAqcmV0OwotCXN0cnVjdCBwYWdlICpwYWdlOworCXNpemVfdCBrczsKIAogCWlmICh1bmxpa2VseSghcCkpCiAJCXJldHVybiBrbWFsbG9jKG5ld19zaXplLCBmbGFncyk7CkBAIC0yMjEzLDE5ICsyNDA2LDEzIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZShwKTsKLQotCW5ld19jYWNoZSA9IGdldF9zbGFiKG5ld19zaXplLCBmbGFncyk7Ci0KLQkvKgotIAkgKiBJZiBuZXcgc2l6ZSBmaXRzIGluIHRoZSBjdXJyZW50IGNhY2hlLCBiYWlsIG91dC4KLSAJICovCi0JaWYgKGxpa2VseShwYWdlLT5zbGFiID09IG5ld19jYWNoZSkpCisJa3MgPSBrc2l6ZShwKTsKKwlpZiAoa3MgPj0gbmV3X3NpemUpCiAJCXJldHVybiAodm9pZCAqKXA7CiAKIAlyZXQgPSBrbWFsbG9jKG5ld19zaXplLCBmbGFncyk7CiAJaWYgKHJldCkgewotCQltZW1jcHkocmV0LCBwLCBtaW4obmV3X3NpemUsIGtzaXplKHApKSk7CisJCW1lbWNweShyZXQsIHAsIG1pbihuZXdfc2l6ZSwga3MpKTsKIAkJa2ZyZWUocCk7CiAJfQogCXJldHVybiByZXQ7CkBAIC0yMjQzLDExICsyNDMwLDEyIEBACiAjaWZkZWYgQ09ORklHX05VTUEKIAkvKgogCSAqIE11c3QgZmlyc3QgaGF2ZSB0aGUgc2xhYiBjYWNoZSBhdmFpbGFibGUgZm9yIHRoZSBhbGxvY2F0aW9ucyBvZiB0aGUKLQkgKiBzdHJ1Y3Qga21hbGxvY19jYWNoZV9ub2RlJ3MuIFRoZXJlIGlzIHNwZWNpYWwgYm9vdHN0cmFwIGNvZGUgaW4KKwkgKiBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlJ3MuIFRoZXJlIGlzIHNwZWNpYWwgYm9vdHN0cmFwIGNvZGUgaW4KIAkgKiBrbWVtX2NhY2hlX29wZW4gZm9yIHNsYWJfc3RhdGUgPT0gRE9XTi4KIAkgKi8KIAljcmVhdGVfa21hbGxvY19jYWNoZSgma21hbGxvY19jYWNoZXNbMF0sICJrbWVtX2NhY2hlX25vZGUiLAogCQlzaXplb2Yoc3RydWN0IGttZW1fY2FjaGVfbm9kZSksIEdGUF9LRVJORUwpOworCWttYWxsb2NfY2FjaGVzWzBdLnJlZmNvdW50ID0gLTE7CiAjZW5kaWYKIAogCS8qIEFibGUgdG8gYWxsb2NhdGUgdGhlIHBlciBub2RlIHN0cnVjdHVyZXMgKi8KQEAgLTIyNzQsMTMgKzI0NjIsMTIgQEAKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnNsYWJfbm90aWZpZXIpOwogI2VuZGlmCiAKLQlpZiAobnJfY3B1X2lkcykJLyogUmVtb3ZlIHdoZW4gbnJfY3B1X2lkcyBpcyBmaXhlZCB1cHN0cmVhbSAhICovCi0JCWttZW1fc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBrbWVtX2NhY2hlLCBjcHVfc2xhYikKLQkJCSArIG5yX2NwdV9pZHMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7CisJa21lbV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGttZW1fY2FjaGUsIGNwdV9zbGFiKSArCisJCQkJbnJfY3B1X2lkcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlNMVUI6IEdlbnNsYWJzPSVkLCBIV2FsaWduPSVkLCBPcmRlcj0lZC0lZCwgTWluT2JqZWN0cz0lZCwiCiAJCSIgUHJvY2Vzc29ycz0lZCwgTm9kZXM9JWRcbiIsCi0JCUtNQUxMT0NfU0hJRlRfSElHSCwgTDFfQ0FDSEVfQllURVMsCisJCUtNQUxMT0NfU0hJRlRfSElHSCwgY2FjaGVfbGluZV9zaXplKCksCiAJCXNsdWJfbWluX29yZGVyLCBzbHViX21heF9vcmRlciwgc2x1Yl9taW5fb2JqZWN0cywKIAkJbnJfY3B1X2lkcywgbnJfbm9kZV9pZHMpOwogfQpAQCAtMjI5Myw3ICsyNDgwLDEzIEBACiAJaWYgKHNsdWJfbm9tZXJnZSB8fCAocy0+ZmxhZ3MgJiBTTFVCX05FVkVSX01FUkdFKSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAocy0+Y3RvciB8fCBzLT5kdG9yKQorCWlmIChzLT5jdG9yKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogV2UgbWF5IGhhdmUgc2V0IGEgc2xhYiB0byBiZSB1bm1lcmdlYWJsZSBkdXJpbmcgYm9vdHN0cmFwLgorCSAqLworCWlmIChzLT5yZWZjb3VudCA8IDApCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC0yMzAxLDE1ICsyNDk0LDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZmluZF9tZXJnZWFibGUoc2l6ZV90IHNpemUsCiAJCXNpemVfdCBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJdm9pZCAoKmN0b3IpKHZvaWQgKiwgc3RydWN0IGttZW1fY2FjaGUgKiwgdW5zaWduZWQgbG9uZyksCi0JCXZvaWQgKCpkdG9yKSh2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpKQorCQl2b2lkICgqY3Rvcikodm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNoZSAqLCB1bnNpZ25lZCBsb25nKSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoOwogCiAJaWYgKHNsdWJfbm9tZXJnZSB8fCAoZmxhZ3MgJiBTTFVCX05FVkVSX01FUkdFKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoY3RvciB8fCBkdG9yKQorCWlmIChjdG9yKQogCQlyZXR1cm4gTlVMTDsKIAogCXNpemUgPSBBTElHTihzaXplLCBzaXplb2Yodm9pZCAqKSk7CkBAIC0yMzUxLDggKzI1NDMsOSBAQAogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCisJQlVHX09OKGR0b3IpOwogCWRvd25fd3JpdGUoJnNsdWJfbG9jayk7Ci0JcyA9IGZpbmRfbWVyZ2VhYmxlKHNpemUsIGFsaWduLCBmbGFncywgZHRvciwgY3Rvcik7CisJcyA9IGZpbmRfbWVyZ2VhYmxlKHNpemUsIGFsaWduLCBmbGFncywgY3Rvcik7CiAJaWYgKHMpIHsKIAkJcy0+cmVmY291bnQrKzsKIAkJLyoKQEAgLTIzNjYsNyArMjU1OSw3IEBACiAJfSBlbHNlIHsKIAkJcyA9IGttYWxsb2Moa21lbV9zaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHMgJiYga21lbV9jYWNoZV9vcGVuKHMsIEdGUF9LRVJORUwsIG5hbWUsCi0JCQkJc2l6ZSwgYWxpZ24sIGZsYWdzLCBjdG9yLCBkdG9yKSkgeworCQkJCXNpemUsIGFsaWduLCBmbGFncywgY3RvcikpIHsKIAkJCWlmIChzeXNmc19zbGFiX2FkZChzKSkgewogCQkJCWtmcmVlKHMpOwogCQkJCWdvdG8gZXJyOwpAQCAtMjQxNSw4ICsyNjA4LDIxIEBACiB9CiAKIC8qCi0gKiBVc2UgdGhlIGNwdSBub3RpZmllciB0byBpbnN1cmUgdGhhdCB0aGUgc2xhYiBhcmUgZmx1c2hlZAotICogd2hlbiBuZWNlc3NhcnkuCisgKiBWZXJzaW9uIG9mIF9fZmx1c2hfY3B1X3NsYWIgZm9yIHRoZSBjYXNlIHRoYXQgaW50ZXJydXB0cworICogYXJlIGVuYWJsZWQuCisgKi8KK3N0YXRpYyB2b2lkIGNwdV9zbGFiX2ZsdXNoKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19mbHVzaF9jcHVfc2xhYihzLCBjcHUpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFVzZSB0aGUgY3B1IG5vdGlmaWVyIHRvIGluc3VyZSB0aGF0IHRoZSBjcHUgc2xhYnMgYXJlIGZsdXNoZWQgd2hlbgorICogbmVjZXNzYXJ5LgogICovCiBzdGF0aWMgaW50IF9fY3B1aW5pdCBzbGFiX2NwdXVwX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKQEAgLTI0MjUsOCArMjYzMSwxMCBAQAogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CiAJY2FzZSBDUFVfREVBRDoKLQkJZm9yX2FsbF9zbGFicyhfX2ZsdXNoX2NwdV9zbGFiLCBjcHUpOworCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgorCQlmb3JfYWxsX3NsYWJzKGNwdV9zbGFiX2ZsdXNoLCBjcHUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTI0MzksOTQgKzI2NDcsMTIyIEBACiAKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX05VTUEKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBHZW5lcmljIHJlYXBlciB1c2VkIHRvIHN1cHBvcnQgdGhlIHBhZ2UgYWxsb2NhdG9yCi0gKiAodGhlIGNwdSBzbGFicyBhcmUgcmVhcGVkIGJ5IGEgcGVyIHNsYWIgd29ya3F1ZXVlKS4KLSAqCi0gKiBNYXliZSBtb3ZlIHRoaXMgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yPwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCByZWFwX25vZGUpOwotCi1zdGF0aWMgdm9pZCBpbml0X3JlYXBfbm9kZShpbnQgY3B1KQordm9pZCAqX19rbWFsbG9jX3RyYWNrX2NhbGxlcihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwZmxhZ3MsIHZvaWQgKmNhbGxlcikKIHsKLQlpbnQgbm9kZTsKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9IGdldF9zbGFiKHNpemUsIGdmcGZsYWdzKTsKIAotCW5vZGUgPSBuZXh0X25vZGUoY3B1X3RvX25vZGUoY3B1KSwgbm9kZV9vbmxpbmVfbWFwKTsKLQlpZiAobm9kZSA9PSBNQVhfTlVNTk9ERVMpCi0JCW5vZGUgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7CisJaWYgKCFzKQorCQlyZXR1cm4gTlVMTDsKIAotCV9fZ2V0X2NwdV92YXIocmVhcF9ub2RlKSA9IG5vZGU7CisJcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIC0xLCBjYWxsZXIpOwogfQogCi1zdGF0aWMgdm9pZCBuZXh0X3JlYXBfbm9kZSh2b2lkKQordm9pZCAqX19rbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNpemVfdCBzaXplLCBnZnBfdCBnZnBmbGFncywKKwkJCQkJaW50IG5vZGUsIHZvaWQgKmNhbGxlcikKIHsKLQlpbnQgbm9kZSA9IF9fZ2V0X2NwdV92YXIocmVhcF9ub2RlKTsKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9IGdldF9zbGFiKHNpemUsIGdmcGZsYWdzKTsKIAotCS8qCi0JICogQWxzbyBkcmFpbiBwZXIgY3B1IHBhZ2VzIG9uIHJlbW90ZSB6b25lcwotCSAqLwotCWlmIChub2RlICE9IG51bWFfbm9kZV9pZCgpKQotCQlkcmFpbl9ub2RlX3BhZ2VzKG5vZGUpOworCWlmICghcykKKwkJcmV0dXJuIE5VTEw7CiAKLQlub2RlID0gbmV4dF9ub2RlKG5vZGUsIG5vZGVfb25saW5lX21hcCk7Ci0JaWYgKHVubGlrZWx5KG5vZGUgPj0gTUFYX05VTU5PREVTKSkKLQkJbm9kZSA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKLQlfX2dldF9jcHVfdmFyKHJlYXBfbm9kZSkgPSBub2RlOwotfQotI2Vsc2UKLSNkZWZpbmUgaW5pdF9yZWFwX25vZGUoY3B1KSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIG5leHRfcmVhcF9ub2RlKHZvaWQpIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZGVmaW5lIFJFQVBUSU1FT1VUX0NQVUMJKDIqSFopCi0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlbGF5ZWRfd29yaywgcmVhcF93b3JrKTsKLQotc3RhdGljIHZvaWQgY2FjaGVfcmVhcChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKLXsKLQluZXh0X3JlYXBfbm9kZSgpOwotCXJlZnJlc2hfY3B1X3ZtX3N0YXRzKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZfX2dldF9jcHVfdmFyKHJlYXBfd29yayksCi0JCQkJICAgICAgUkVBUFRJTUVPVVRfQ1BVQyk7CisJcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGNhbGxlcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzdGFydF9jcHVfdGltZXIoaW50IGNwdSkKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgJiYgZGVmaW5lZChDT05GSUdfU0xVQl9ERUJVRykKK3N0YXRpYyBpbnQgdmFsaWRhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqcmVhcF93b3JrID0gJnBlcl9jcHUocmVhcF93b3JrLCBjcHUpOworCXZvaWQgKnA7CisJdm9pZCAqYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwlERUNMQVJFX0JJVE1BUChtYXAsIHMtPm9iamVjdHMpOwogCi0JLyoKLQkgKiBXaGVuIHRoaXMgZ2V0cyBjYWxsZWQgZnJvbSBkb19pbml0Y2FsbHMgdmlhIGNwdWNhY2hlX2luaXQoKSwKLQkgKiBpbml0X3dvcmtxdWV1ZXMoKSBoYXMgYWxyZWFkeSBydW4sIHNvIGtldmVudGQgd2lsbCBiZSBzZXR1cAotCSAqIGF0IHRoYXQgdGltZS4KLQkgKi8KLQlpZiAoa2V2ZW50ZF91cCgpICYmIHJlYXBfd29yay0+d29yay5mdW5jID09IE5VTEwpIHsKLQkJaW5pdF9yZWFwX25vZGUoY3B1KTsKLQkJSU5JVF9ERUxBWUVEX1dPUksocmVhcF93b3JrLCBjYWNoZV9yZWFwKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgcmVhcF93b3JrLCBIWiArIDMgKiBjcHUpOworCWlmICghY2hlY2tfc2xhYihzLCBwYWdlKSB8fAorCQkJIW9uX2ZyZWVsaXN0KHMsIHBhZ2UsIE5VTEwpKQorCQlyZXR1cm4gMDsKKworCS8qIE5vdyB3ZSBrbm93IHRoYXQgYSB2YWxpZCBmcmVlbGlzdCBleGlzdHMgKi8KKwliaXRtYXBfemVybyhtYXAsIHMtPm9iamVjdHMpOworCisJZm9yX2VhY2hfZnJlZV9vYmplY3QocCwgcywgcGFnZS0+ZnJlZWxpc3QpIHsKKwkJc2V0X2JpdChzbGFiX2luZGV4KHAsIHMsIGFkZHIpLCBtYXApOworCQlpZiAoIWNoZWNrX29iamVjdChzLCBwYWdlLCBwLCAwKSkKKwkJCXJldHVybiAwOworCX0KKworCWZvcl9lYWNoX29iamVjdChwLCBzLCBhZGRyKQorCQlpZiAoIXRlc3RfYml0KHNsYWJfaW5kZXgocCwgcywgYWRkciksIG1hcCkpCisJCQlpZiAoIWNoZWNrX29iamVjdChzLCBwYWdlLCBwLCAxKSkKKwkJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgdmFsaWRhdGVfc2xhYl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoc2xhYl90cnlsb2NrKHBhZ2UpKSB7CisJCXZhbGlkYXRlX3NsYWIocywgcGFnZSk7CisJCXNsYWJfdW5sb2NrKHBhZ2UpOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9JTkZPICJTTFVCICVzOiBTa2lwcGVkIGJ1c3kgc2xhYiAweCVwXG4iLAorCQkJcy0+bmFtZSwgcGFnZSk7CisKKwlpZiAocy0+ZmxhZ3MgJiBERUJVR19ERUZBVUxUX0ZMQUdTKSB7CisJCWlmICghU2xhYkRlYnVnKHBhZ2UpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJTTFVCICVzOiBTbGFiRGVidWcgbm90IHNldCAiCisJCQkJIm9uIHNsYWIgMHglcFxuIiwgcy0+bmFtZSwgcGFnZSk7CisJfSBlbHNlIHsKKwkJaWYgKFNsYWJEZWJ1ZyhwYWdlKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiU0xVQiAlczogU2xhYkRlYnVnIHNldCBvbiAiCisJCQkJInNsYWIgMHglcFxuIiwgcy0+bmFtZSwgcGFnZSk7CiAJfQogfQogCi1zdGF0aWMgaW50IF9faW5pdCBjcHVjYWNoZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IHZhbGlkYXRlX3NsYWJfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbikKIHsKLQlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgY291bnQgPSAwOworCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKgotCSAqIFJlZ2lzdGVyIHRoZSB0aW1lcnMgdGhhdCBkcmFpbiBwY3AgcGFnZXMgYW5kIHVwZGF0ZSB2bSBzdGF0aXN0aWNzCi0JICovCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCXN0YXJ0X2NwdV90aW1lcihjcHUpOwotCXJldHVybiAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZuLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJm4tPnBhcnRpYWwsIGxydSkgeworCQl2YWxpZGF0ZV9zbGFiX3NsYWIocywgcGFnZSk7CisJCWNvdW50Kys7CisJfQorCWlmIChjb3VudCAhPSBuLT5ucl9wYXJ0aWFsKQorCQlwcmludGsoS0VSTl9FUlIgIlNMVUIgJXM6ICVsZCBwYXJ0aWFsIHNsYWJzIGNvdW50ZWQgYnV0ICIKKwkJCSJjb3VudGVyPSVsZFxuIiwgcy0+bmFtZSwgY291bnQsIG4tPm5yX3BhcnRpYWwpOworCisJaWYgKCEocy0+ZmxhZ3MgJiBTTEFCX1NUT1JFX1VTRVIpKQorCQlnb3RvIG91dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJm4tPmZ1bGwsIGxydSkgeworCQl2YWxpZGF0ZV9zbGFiX3NsYWIocywgcGFnZSk7CisJCWNvdW50Kys7CisJfQorCWlmIChjb3VudCAhPSBhdG9taWNfbG9uZ19yZWFkKCZuLT5ucl9zbGFicykpCisJCXByaW50ayhLRVJOX0VSUiAiU0xVQjogJXMgJWxkIHNsYWJzIGNvdW50ZWQgYnV0ICIKKwkJCSJjb3VudGVyPSVsZFxuIiwgcy0+bmFtZSwgY291bnQsCisJCQlhdG9taWNfbG9uZ19yZWFkKCZuLT5ucl9zbGFicykpOworCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbi0+bGlzdF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNvdW50OwogfQotX19pbml0Y2FsbChjcHVjYWNoZV9pbml0KTsKLSNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2YWxpZGF0ZV9zbGFiX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKQoreworCWludCBub2RlOworCXVuc2lnbmVkIGxvbmcgY291bnQgPSAwOworCisJZmx1c2hfYWxsKHMpOworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKKwkJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IGdldF9ub2RlKHMsIG5vZGUpOworCisJCWNvdW50ICs9IHZhbGlkYXRlX3NsYWJfbm9kZShzLCBuKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQogCiAjaWZkZWYgU0xVQl9SRVNJTElFTkNZX1RFU1QKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZhbGlkYXRlX3NsYWJfY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpOwotCiBzdGF0aWMgdm9pZCByZXNpbGllbmN5X3Rlc3Qodm9pZCkKIHsKIAl1OCAqcDsKQEAgLTI1ODIsMTM0ICsyODE4LDIwIEBACiAjZW5kaWYKIAogLyoKLSAqIFRoZXNlIGFyZSBub3QgYXMgZWZmaWNpZW50IGFzIGttYWxsb2MgZm9yIHRoZSBub24gZGVidWcgY2FzZS4KLSAqIFdlIGRvIG5vdCBoYXZlIHRoZSBwYWdlIHN0cnVjdCBhdmFpbGFibGUgc28gd2UgaGF2ZSB0byB0b3VjaCBvbmUKLSAqIGNhY2hlbGluZSBpbiBzdHJ1Y3Qga21lbV9jYWNoZSB0byBjaGVjayBzbGFiIGZsYWdzLgotICovCi12b2lkICpfX2ttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemVfdCBzaXplLCBnZnBfdCBnZnBmbGFncywgdm9pZCAqY2FsbGVyKQotewotCXN0cnVjdCBrbWVtX2NhY2hlICpzID0gZ2V0X3NsYWIoc2l6ZSwgZ2ZwZmxhZ3MpOwotCi0JaWYgKCFzKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCAtMSwgY2FsbGVyKTsKLX0KLQotdm9pZCAqX19rbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNpemVfdCBzaXplLCBnZnBfdCBnZnBmbGFncywKLQkJCQkJaW50IG5vZGUsIHZvaWQgKmNhbGxlcikKLXsKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9IGdldF9zbGFiKHNpemUsIGdmcGZsYWdzKTsKLQotCWlmICghcykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgY2FsbGVyKTsKLX0KLQotI2lmZGVmIENPTkZJR19TWVNGUwotCi1zdGF0aWMgaW50IHZhbGlkYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCXZvaWQgKnA7Ci0Jdm9pZCAqYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKLQl1bnNpZ25lZCBsb25nIG1hcFtCSVRTX1RPX0xPTkdTKHMtPm9iamVjdHMpXTsKLQotCWlmICghY2hlY2tfc2xhYihzLCBwYWdlKSB8fAotCQkJIW9uX2ZyZWVsaXN0KHMsIHBhZ2UsIE5VTEwpKQotCQlyZXR1cm4gMDsKLQotCS8qIE5vdyB3ZSBrbm93IHRoYXQgYSB2YWxpZCBmcmVlbGlzdCBleGlzdHMgKi8KLQliaXRtYXBfemVybyhtYXAsIHMtPm9iamVjdHMpOwotCi0JZm9yKHAgPSBwYWdlLT5mcmVlbGlzdDsgcDsgcCA9IGdldF9mcmVlcG9pbnRlcihzLCBwKSkgewotCQlzZXRfYml0KChwIC0gYWRkcikgLyBzLT5zaXplLCBtYXApOwotCQlpZiAoIWNoZWNrX29iamVjdChzLCBwYWdlLCBwLCAwKSkKLQkJCXJldHVybiAwOwotCX0KLQotCWZvcihwID0gYWRkcjsgcCA8IGFkZHIgKyBzLT5vYmplY3RzICogcy0+c2l6ZTsgcCArPSBzLT5zaXplKQotCQlpZiAoIXRlc3RfYml0KChwIC0gYWRkcikgLyBzLT5zaXplLCBtYXApKQotCQkJaWYgKCFjaGVja19vYmplY3QocywgcGFnZSwgcCwgMSkpCi0JCQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHZhbGlkYXRlX3NsYWJfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JaWYgKHNsYWJfdHJ5bG9jayhwYWdlKSkgewotCQl2YWxpZGF0ZV9zbGFiKHMsIHBhZ2UpOwotCQlzbGFiX3VubG9jayhwYWdlKTsKLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiU0xVQiAlczogU2tpcHBlZCBidXN5IHNsYWIgMHglcFxuIiwKLQkJCXMtPm5hbWUsIHBhZ2UpOwotCi0JaWYgKHMtPmZsYWdzICYgREVCVUdfREVGQVVMVF9GTEFHUykgewotCQlpZiAoIVBhZ2VFcnJvcihwYWdlKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiU0xVQiAlczogUGFnZUVycm9yIG5vdCBzZXQgIgotCQkJCSJvbiBzbGFiIDB4JXBcbiIsIHMtPm5hbWUsIHBhZ2UpOwotCX0gZWxzZSB7Ci0JCWlmIChQYWdlRXJyb3IocGFnZSkpCi0JCQlwcmludGsoS0VSTl9FUlIgIlNMVUIgJXM6IFBhZ2VFcnJvciBzZXQgb24gIgotCQkJCSJzbGFiIDB4JXBcbiIsIHMtPm5hbWUsIHBhZ2UpOwotCX0KLX0KLQotc3RhdGljIGludCB2YWxpZGF0ZV9zbGFiX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pCi17Ci0JdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZuLT5saXN0X2xvY2ssIGZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJm4tPnBhcnRpYWwsIGxydSkgewotCQl2YWxpZGF0ZV9zbGFiX3NsYWIocywgcGFnZSk7Ci0JCWNvdW50Kys7Ci0JfQotCWlmIChjb3VudCAhPSBuLT5ucl9wYXJ0aWFsKQotCQlwcmludGsoS0VSTl9FUlIgIlNMVUIgJXM6ICVsZCBwYXJ0aWFsIHNsYWJzIGNvdW50ZWQgYnV0ICIKLQkJCSJjb3VudGVyPSVsZFxuIiwgcy0+bmFtZSwgY291bnQsIG4tPm5yX3BhcnRpYWwpOwotCi0JaWYgKCEocy0+ZmxhZ3MgJiBTTEFCX1NUT1JFX1VTRVIpKQotCQlnb3RvIG91dDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJm4tPmZ1bGwsIGxydSkgewotCQl2YWxpZGF0ZV9zbGFiX3NsYWIocywgcGFnZSk7Ci0JCWNvdW50Kys7Ci0JfQotCWlmIChjb3VudCAhPSBhdG9taWNfbG9uZ19yZWFkKCZuLT5ucl9zbGFicykpCi0JCXByaW50ayhLRVJOX0VSUiAiU0xVQjogJXMgJWxkIHNsYWJzIGNvdW50ZWQgYnV0ICIKLQkJCSJjb3VudGVyPSVsZFxuIiwgcy0+bmFtZSwgY291bnQsCi0JCQlhdG9taWNfbG9uZ19yZWFkKCZuLT5ucl9zbGFicykpOwotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbi0+bGlzdF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB2YWxpZGF0ZV9zbGFiX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKQotewotCWludCBub2RlOwotCXVuc2lnbmVkIGxvbmcgY291bnQgPSAwOwotCi0JZmx1c2hfYWxsKHMpOwotCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKLQkJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IGdldF9ub2RlKHMsIG5vZGUpOwotCi0JCWNvdW50ICs9IHZhbGlkYXRlX3NsYWJfbm9kZShzLCBuKTsKLQl9Ci0JcmV0dXJuIGNvdW50OwotfQotCi0vKgotICogR2VuZXJhdGUgbGlzdHMgb2YgbG9jYXRpb25zIHdoZXJlIHNsYWJjYWNoZSBvYmplY3RzIGFyZSBhbGxvY2F0ZWQKKyAqIEdlbmVyYXRlIGxpc3RzIG9mIGNvZGUgYWRkcmVzc2VzIHdoZXJlIHNsYWJjYWNoZSBvYmplY3RzIGFyZSBhbGxvY2F0ZWQKICAqIGFuZCBmcmVlZC4KICAqLwogCiBzdHJ1Y3QgbG9jYXRpb24gewogCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAJdm9pZCAqYWRkcjsKKwlsb25nIGxvbmcgc3VtX3RpbWU7CisJbG9uZyBtaW5fdGltZTsKKwlsb25nIG1heF90aW1lOworCWxvbmcgbWluX3BpZDsKKwlsb25nIG1heF9waWQ7CisJY3B1bWFza190IGNwdXM7CisJbm9kZW1hc2tfdCBub2RlczsKIH07CiAKIHN0cnVjdCBsb2NfdHJhY2sgewpAQCAtMjc1MCwxMSArMjg3MiwxMiBAQAogfQogCiBzdGF0aWMgaW50IGFkZF9sb2NhdGlvbihzdHJ1Y3QgbG9jX3RyYWNrICp0LCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywKLQkJCQkJCXZvaWQgKmFkZHIpCisJCQkJY29uc3Qgc3RydWN0IHRyYWNrICp0cmFjaykKIHsKIAlsb25nIHN0YXJ0LCBlbmQsIHBvczsKIAlzdHJ1Y3QgbG9jYXRpb24gKmw7CiAJdm9pZCAqY2FkZHI7CisJdW5zaWduZWQgbG9uZyBhZ2UgPSBqaWZmaWVzIC0gdHJhY2stPndoZW47CiAKIAlzdGFydCA9IC0xOwogCWVuZCA9IHQtPmNvdW50OwpAQCAtMjc3MCwxOSArMjg5MywzNiBAQAogCQkJYnJlYWs7CiAKIAkJY2FkZHIgPSB0LT5sb2NbcG9zXS5hZGRyOwotCQlpZiAoYWRkciA9PSBjYWRkcikgewotCQkJdC0+bG9jW3Bvc10uY291bnQrKzsKKwkJaWYgKHRyYWNrLT5hZGRyID09IGNhZGRyKSB7CisKKwkJCWwgPSAmdC0+bG9jW3Bvc107CisJCQlsLT5jb3VudCsrOworCQkJaWYgKHRyYWNrLT53aGVuKSB7CisJCQkJbC0+c3VtX3RpbWUgKz0gYWdlOworCQkJCWlmIChhZ2UgPCBsLT5taW5fdGltZSkKKwkJCQkJbC0+bWluX3RpbWUgPSBhZ2U7CisJCQkJaWYgKGFnZSA+IGwtPm1heF90aW1lKQorCQkJCQlsLT5tYXhfdGltZSA9IGFnZTsKKworCQkJCWlmICh0cmFjay0+cGlkIDwgbC0+bWluX3BpZCkKKwkJCQkJbC0+bWluX3BpZCA9IHRyYWNrLT5waWQ7CisJCQkJaWYgKHRyYWNrLT5waWQgPiBsLT5tYXhfcGlkKQorCQkJCQlsLT5tYXhfcGlkID0gdHJhY2stPnBpZDsKKworCQkJCWNwdV9zZXQodHJhY2stPmNwdSwgbC0+Y3B1cyk7CisJCQl9CisJCQlub2RlX3NldChwYWdlX3RvX25pZCh2aXJ0X3RvX3BhZ2UodHJhY2spKSwgbC0+bm9kZXMpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAotCQlpZiAoYWRkciA8IGNhZGRyKQorCQlpZiAodHJhY2stPmFkZHIgPCBjYWRkcikKIAkJCWVuZCA9IHBvczsKIAkJZWxzZQogCQkJc3RhcnQgPSBwb3M7CiAJfQogCiAJLyoKLQkgKiBOb3QgZm91bmQuIEluc2VydCBuZXcgdHJhY2tpbmcgZWxlbWVudAorCSAqIE5vdCBmb3VuZC4gSW5zZXJ0IG5ldyB0cmFja2luZyBlbGVtZW50LgogCSAqLwogCWlmICh0LT5jb3VudCA+PSB0LT5tYXggJiYgIWFsbG9jX2xvY190cmFjayh0LCAyICogdC0+bWF4KSkKIAkJcmV0dXJuIDA7CkBAIC0yNzkzLDcgKzI5MzMsMTYgQEAKIAkJCSh0LT5jb3VudCAtIHBvcykgKiBzaXplb2Yoc3RydWN0IGxvY2F0aW9uKSk7CiAJdC0+Y291bnQrKzsKIAlsLT5jb3VudCA9IDE7Ci0JbC0+YWRkciA9IGFkZHI7CisJbC0+YWRkciA9IHRyYWNrLT5hZGRyOworCWwtPnN1bV90aW1lID0gYWdlOworCWwtPm1pbl90aW1lID0gYWdlOworCWwtPm1heF90aW1lID0gYWdlOworCWwtPm1pbl9waWQgPSB0cmFjay0+cGlkOworCWwtPm1heF9waWQgPSB0cmFjay0+cGlkOworCWNwdXNfY2xlYXIobC0+Y3B1cyk7CisJY3B1X3NldCh0cmFjay0+Y3B1LCBsLT5jcHVzKTsKKwlub2Rlc19jbGVhcihsLT5ub2Rlcyk7CisJbm9kZV9zZXQocGFnZV90b19uaWQodmlydF90b19wYWdlKHRyYWNrKSksIGwtPm5vZGVzKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMjgwMSwxOSArMjk1MCwxNiBAQAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB0cmFja19pdGVtIGFsbG9jKQogewogCXZvaWQgKmFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JdW5zaWduZWQgbG9uZyBtYXBbQklUU19UT19MT05HUyhzLT5vYmplY3RzKV07CisJREVDTEFSRV9CSVRNQVAobWFwLCBzLT5vYmplY3RzKTsKIAl2b2lkICpwOwogCiAJYml0bWFwX3plcm8obWFwLCBzLT5vYmplY3RzKTsKLQlmb3IgKHAgPSBwYWdlLT5mcmVlbGlzdDsgcDsgcCA9IGdldF9mcmVlcG9pbnRlcihzLCBwKSkKLQkJc2V0X2JpdCgocCAtIGFkZHIpIC8gcy0+c2l6ZSwgbWFwKTsKKwlmb3JfZWFjaF9mcmVlX29iamVjdChwLCBzLCBwYWdlLT5mcmVlbGlzdCkKKwkJc2V0X2JpdChzbGFiX2luZGV4KHAsIHMsIGFkZHIpLCBtYXApOwogCi0JZm9yIChwID0gYWRkcjsgcCA8IGFkZHIgKyBzLT5vYmplY3RzICogcy0+c2l6ZTsgcCArPSBzLT5zaXplKQotCQlpZiAoIXRlc3RfYml0KChwIC0gYWRkcikgLyBzLT5zaXplLCBtYXApKSB7Ci0JCQl2b2lkICphZGRyID0gZ2V0X3RyYWNrKHMsIHAsIGFsbG9jKS0+YWRkcjsKLQotCQkJYWRkX2xvY2F0aW9uKHQsIHMsIGFkZHIpOwotCQl9CisJZm9yX2VhY2hfb2JqZWN0KHAsIHMsIGFkZHIpCisJCWlmICghdGVzdF9iaXQoc2xhYl9pbmRleChwLCBzLCBhZGRyKSwgbWFwKSkKKwkJCWFkZF9sb2NhdGlvbih0LCBzLCBnZXRfdHJhY2socywgcCwgYWxsb2MpKTsKIH0KIAogc3RhdGljIGludCBsaXN0X2xvY2F0aW9ucyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmLApAQCAtMjg0NywxNSArMjk5Myw0NyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCB0LmNvdW50OyBpKyspIHsKLQkJdm9pZCAqYWRkciA9IHQubG9jW2ldLmFkZHI7CisJCXN0cnVjdCBsb2NhdGlvbiAqbCA9ICZ0LmxvY1tpXTsKIAogCQlpZiAobiA+IFBBR0VfU0laRSAtIDEwMCkKIAkJCWJyZWFrOwotCQluICs9IHNwcmludGYoYnVmICsgbiwgIiU3bGQgIiwgdC5sb2NbaV0uY291bnQpOwotCQlpZiAoYWRkcikKLQkJCW4gKz0gc3ByaW50X3N5bWJvbChidWYgKyBuLCAodW5zaWduZWQgbG9uZyl0LmxvY1tpXS5hZGRyKTsKKwkJbiArPSBzcHJpbnRmKGJ1ZiArIG4sICIlN2xkICIsIGwtPmNvdW50KTsKKworCQlpZiAobC0+YWRkcikKKwkJCW4gKz0gc3ByaW50X3N5bWJvbChidWYgKyBuLCAodW5zaWduZWQgbG9uZylsLT5hZGRyKTsKIAkJZWxzZQogCQkJbiArPSBzcHJpbnRmKGJ1ZiArIG4sICI8bm90LWF2YWlsYWJsZT4iKTsKKworCQlpZiAobC0+c3VtX3RpbWUgIT0gbC0+bWluX3RpbWUpIHsKKwkJCXVuc2lnbmVkIGxvbmcgcmVtYWluZGVyOworCisJCQluICs9IHNwcmludGYoYnVmICsgbiwgIiBhZ2U9JWxkLyVsZC8lbGQiLAorCQkJbC0+bWluX3RpbWUsCisJCQlkaXZfbG9uZ19sb25nX3JlbShsLT5zdW1fdGltZSwgbC0+Y291bnQsICZyZW1haW5kZXIpLAorCQkJbC0+bWF4X3RpbWUpOworCQl9IGVsc2UKKwkJCW4gKz0gc3ByaW50ZihidWYgKyBuLCAiIGFnZT0lbGQiLAorCQkJCWwtPm1pbl90aW1lKTsKKworCQlpZiAobC0+bWluX3BpZCAhPSBsLT5tYXhfcGlkKQorCQkJbiArPSBzcHJpbnRmKGJ1ZiArIG4sICIgcGlkPSVsZC0lbGQiLAorCQkJCWwtPm1pbl9waWQsIGwtPm1heF9waWQpOworCQllbHNlCisJCQluICs9IHNwcmludGYoYnVmICsgbiwgIiBwaWQ9JWxkIiwKKwkJCQlsLT5taW5fcGlkKTsKKworCQlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxICYmICFjcHVzX2VtcHR5KGwtPmNwdXMpKSB7CisJCQluICs9IHNwcmludGYoYnVmICsgbiwgIiBjcHVzPSIpOworCQkJbiArPSBjcHVsaXN0X3NjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuIC0gNTAsCisJCQkJCWwtPmNwdXMpOworCQl9CisKKwkJaWYgKG51bV9vbmxpbmVfbm9kZXMoKSA+IDEgJiYgIW5vZGVzX2VtcHR5KGwtPm5vZGVzKSkgeworCQkJbiArPSBzcHJpbnRmKGJ1ZiArIG4sICIgbm9kZXM9Iik7CisJCQluICs9IG5vZGVsaXN0X3NjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuIC0gNTAsCisJCQkJCWwtPm5vZGVzKTsKKwkJfQorCiAJCW4gKz0gc3ByaW50ZihidWYgKyBuLCAiXG4iKTsKIAl9CiAKQEAgLTMwMzUsMTcgKzMyMTMsNiBAQAogfQogU0xBQl9BVFRSX1JPKGN0b3IpOwogCi1zdGF0aWMgc3NpemVfdCBkdG9yX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZikKLXsKLQlpZiAocy0+ZHRvcikgewotCQlpbnQgbiA9IHNwcmludF9zeW1ib2woYnVmLCAodW5zaWduZWQgbG9uZylzLT5kdG9yKTsKLQotCQlyZXR1cm4gbiArIHNwcmludGYoYnVmICsgbiwgIlxuIik7Ci0JfQotCXJldHVybiAwOwotfQotU0xBQl9BVFRSX1JPKGR0b3IpOwotCiBzdGF0aWMgc3NpemVfdCBhbGlhc2VzX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcy0+cmVmY291bnQgLSAxKTsKQEAgLTMyNzcsNyArMzQ0NCw2IEBACiAJJnBhcnRpYWxfYXR0ci5hdHRyLAogCSZjcHVfc2xhYnNfYXR0ci5hdHRyLAogCSZjdG9yX2F0dHIuYXR0ciwKLQkmZHRvcl9hdHRyLmF0dHIsCiAJJmFsaWFzZXNfYXR0ci5hdHRyLAogCSZhbGlnbl9hdHRyLmF0dHIsCiAJJnNhbml0eV9jaGVja3NfYXR0ci5hdHRyLApAQCAtMzQ5MSw2ICszNjU3LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2xhYl9zeXNmc19pbml0KHZvaWQpCiB7CisJc3RydWN0IGxpc3RfaGVhZCAqaDsKIAlpbnQgZXJyOwogCiAJZXJyID0gc3Vic3lzdGVtX3JlZ2lzdGVyKCZzbGFiX3N1YnN5cyk7CkBAIC0zNDk5LDcgKzM2NjYsMTUgQEAKIAkJcmV0dXJuIC1FTk9TWVM7CiAJfQogCi0JZmluaXNoX2Jvb3RzdHJhcCgpOworCXNsYWJfc3RhdGUgPSBTWVNGUzsKKworCWxpc3RfZm9yX2VhY2goaCwgJnNsYWJfY2FjaGVzKSB7CisJCXN0cnVjdCBrbWVtX2NhY2hlICpzID0KKwkJCWNvbnRhaW5lcl9vZihoLCBzdHJ1Y3Qga21lbV9jYWNoZSwgbGlzdCk7CisKKwkJZXJyID0gc3lzZnNfc2xhYl9hZGQocyk7CisJCUJVR19PTihlcnIpOworCX0KIAogCXdoaWxlIChhbGlhc19saXN0KSB7CiAJCXN0cnVjdCBzYXZlZF9hbGlhcyAqYWwgPSBhbGlhc19saXN0OwpAQCAtMzUxNSw2ICszNjkwLDQgQEAKIH0KIAogX19pbml0Y2FsbChzbGFiX3N5c2ZzX2luaXQpOwotI2Vsc2UKLV9faW5pdGNhbGwoZmluaXNoX2Jvb3RzdHJhcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggODkzZTU2Mi4uNTQ1ZTRkMyAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLmMKKysrIGIvbW0vc3BhcnNlLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FCi1zdGF0aWMgc3RydWN0IG1lbV9zZWN0aW9uICpzcGFyc2VfaW5kZXhfYWxsb2MoaW50IG5pZCkKK3N0YXRpYyBzdHJ1Y3QgbWVtX3NlY3Rpb24gbm9pbmxpbmUgX19pbml0X3JlZm9rICpzcGFyc2VfaW5kZXhfYWxsb2MoaW50IG5pZCkKIHsKIAlzdHJ1Y3QgbWVtX3NlY3Rpb24gKnNlY3Rpb24gPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgYXJyYXlfc2l6ZSA9IFNFQ1RJT05TX1BFUl9ST09UICoKQEAgLTYxLDcgKzYxLDcgQEAKIAlyZXR1cm4gc2VjdGlvbjsKIH0KIAotc3RhdGljIGludCBzcGFyc2VfaW5kZXhfaW5pdCh1bnNpZ25lZCBsb25nIHNlY3Rpb25fbnIsIGludCBuaWQpCitzdGF0aWMgaW50IF9fbWVtaW5pdCBzcGFyc2VfaW5kZXhfaW5pdCh1bnNpZ25lZCBsb25nIHNlY3Rpb25fbnIsIGludCBuaWQpCiB7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhpbmRleF9pbml0X2xvY2spOwogCXVuc2lnbmVkIGxvbmcgcm9vdCA9IFNFQ1RJT05fTlJfVE9fUk9PVChzZWN0aW9uX25yKTsKQEAgLTEzOCw3ICsxMzgsNyBAQAogfQogCiAvKiBSZWNvcmQgYSBtZW1vcnkgYXJlYSBhZ2FpbnN0IGEgbm9kZS4gKi8KLXZvaWQgbWVtb3J5X3ByZXNlbnQoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit2b2lkIF9faW5pdCBtZW1vcnlfcHJlc2VudChpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAl1bnNpZ25lZCBsb25nIHBmbjsKIApAQCAtMTk3LDcgKzE5Nyw3IEBACiAJcmV0dXJuICgoc3RydWN0IHBhZ2UgKiljb2RlZF9tZW1fbWFwKSArIHNlY3Rpb25fbnJfdG9fcGZuKHBudW0pOwogfQogCi1zdGF0aWMgaW50IHNwYXJzZV9pbml0X29uZV9zZWN0aW9uKHN0cnVjdCBtZW1fc2VjdGlvbiAqbXMsCitzdGF0aWMgaW50IF9fbWVtaW5pdCBzcGFyc2VfaW5pdF9vbmVfc2VjdGlvbihzdHJ1Y3QgbWVtX3NlY3Rpb24gKm1zLAogCQl1bnNpZ25lZCBsb25nIHBudW0sIHN0cnVjdCBwYWdlICptZW1fbWFwKQogewogCWlmICghdmFsaWRfc2VjdGlvbihtcykpCkBAIC0yMDksNyArMjA5LDEzIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqc3BhcnNlX2Vhcmx5X21lbV9tYXBfYWxsb2ModW5zaWduZWQgbG9uZyBwbnVtKQorX19hdHRyaWJ1dGVfXygod2VhaykpCit2b2lkICphbGxvY19ib290bWVtX2hpZ2hfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSBfX2luaXQgKnNwYXJzZV9lYXJseV9tZW1fbWFwX2FsbG9jKHVuc2lnbmVkIGxvbmcgcG51bSkKIHsKIAlzdHJ1Y3QgcGFnZSAqbWFwOwogCXN0cnVjdCBtZW1fc2VjdGlvbiAqbXMgPSBfX25yX3RvX3NlY3Rpb24ocG51bSk7CkBAIC0yMTksNiArMjI1LDExIEBACiAJaWYgKG1hcCkKIAkJcmV0dXJuIG1hcDsKIAorICAJbWFwID0gYWxsb2NfYm9vdG1lbV9oaWdoX25vZGUoTk9ERV9EQVRBKG5pZCksCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgcGFnZSkgKiBQQUdFU19QRVJfU0VDVElPTik7CisJaWYgKG1hcCkKKwkJcmV0dXJuIG1hcDsKKwogCW1hcCA9IGFsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobmlkKSwKIAkJCXNpemVvZihzdHJ1Y3QgcGFnZSkgKiBQQUdFU19QRVJfU0VDVElPTik7CiAJaWYgKG1hcCkKQEAgLTI4OCw2ICsyOTksNyBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwogLyoKICAqIHJldHVybnMgdGhlIG51bWJlciBvZiBzZWN0aW9ucyB3aG9zZSBtZW1fbWFwcyB3ZXJlIHByb3Blcmx5CiAgKiBzZXQuICBJZiB0aGlzIGlzIDw9MCwgdGhlbiB0aGF0IG1lYW5zIHRoYXQgdGhlIHBhc3NlZC1pbgpAQCAtMzI3LDMgKzMzOSw0IEBACiAJCV9fa2ZyZWVfc2VjdGlvbl9tZW1tYXAobWVtbWFwLCBucl9wYWdlcyk7CiAJcmV0dXJuIHJldDsKIH0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IDIxOGM1MmEuLmQzY2I5NjYgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYworKysgYi9tbS9zd2FwLmMKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCWxvbmcgKmNvbW1pdHRlZDsKIAogCWNvbW1pdHRlZCA9ICZwZXJfY3B1KGNvbW1pdHRlZF9zcGFjZSwgKGxvbmcpaGNwdSk7Ci0JaWYgKGFjdGlvbiA9PSBDUFVfREVBRCkgeworCWlmIChhY3Rpb24gPT0gQ1BVX0RFQUQgfHwgYWN0aW9uID09IENQVV9ERUFEX0ZST1pFTikgewogCQlhdG9taWNfYWRkKCpjb21taXR0ZWQsICZ2bV9jb21taXR0ZWRfc3BhY2UpOwogCQkqY29tbWl0dGVkID0gMDsKIAkJX19scnVfYWRkX2RyYWluKChsb25nKWhjcHUpOwpkaWZmIC0tZ2l0IGEvbW0vdGhyYXNoLmMgYi9tbS90aHJhc2guYwppbmRleCA5ZWY5MDcxLi5jNGM1MjA1IDEwMDY0NAotLS0gYS9tbS90aHJhc2guYworKysgYi9tbS90aHJhc2guYwpAQCAtNDgsOSArNDgsOCBAQAogCQlpZiAoY3VycmVudF9pbnRlcnZhbCA8IGN1cnJlbnQtPm1tLT5sYXN0X2ludGVydmFsKQogCQkJY3VycmVudC0+bW0tPnRva2VuX3ByaW9yaXR5Kys7CiAJCWVsc2UgewotCQkJY3VycmVudC0+bW0tPnRva2VuX3ByaW9yaXR5LS07Ci0JCQlpZiAodW5saWtlbHkoY3VycmVudC0+bW0tPnRva2VuX3ByaW9yaXR5IDwgMCkpCi0JCQkJY3VycmVudC0+bW0tPnRva2VuX3ByaW9yaXR5ID0gMDsKKwkJCWlmIChsaWtlbHkoY3VycmVudC0+bW0tPnRva2VuX3ByaW9yaXR5ID4gMCkpCisJCQkJY3VycmVudC0+bW0tPnRva2VuX3ByaW9yaXR5LS07CiAJCX0KIAkJLyogQ2hlY2sgaWYgd2UgZGVzZXJ2ZSB0aGUgdG9rZW4gKi8KIAkJaWYgKGN1cnJlbnQtPm1tLT50b2tlbl9wcmlvcml0eSA+CmRpZmYgLS1naXQgYS9tbS90cnVuY2F0ZS5jIGIvbW0vdHJ1bmNhdGUuYwppbmRleCAwZjRiNmQxLi40ZmJlMWEyIDEwMDY0NAotLS0gYS9tbS90cnVuY2F0ZS5jCisrKyBiL21tL3RydW5jYXRlLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CS8qIGdyci4gdHJ5X3RvX3JlbGVhc2VfcGFnZSwKQEAgLTQ2LDcgKzQ3LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHRydW5jYXRlX3BhcnRpYWxfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgcGFydGlhbCkKIHsKLQltZW1jbGVhcl9oaWdocGFnZV9mbHVzaChwYWdlLCBwYXJ0aWFsLCBQQUdFX0NBQ0hFX1NJWkUtcGFydGlhbCk7CisJemVyb191c2VyX3BhZ2UocGFnZSwgcGFydGlhbCwgUEFHRV9DQUNIRV9TSVpFIC0gcGFydGlhbCwgS01fVVNFUjApOwogCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkKIAkJZG9faW52YWxpZGF0ZXBhZ2UocGFnZSwgcGFydGlhbCk7CiB9CmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggY2I1YWFiZC4uZDNhOWM1MyAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJcmV0dXJuIHY7CiB9CiAKLXZvaWQgX192dW5tYXAodm9pZCAqYWRkciwgaW50IGRlYWxsb2NhdGVfcGFnZXMpCitzdGF0aWMgdm9pZCBfX3Z1bm1hcCh2b2lkICphZGRyLCBpbnQgZGVhbGxvY2F0ZV9wYWdlcykKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCkBAIC03NTUsMyArNzU1LDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHJlbWFwX3ZtYWxsb2NfcmFuZ2UpOwogCisvKgorICogSW1wbGVtZW50IGEgc3R1YiBmb3Igdm1hbGxvY19zeW5jX2FsbCgpIGlmIHRoZSBhcmNoaXRlY3R1cmUgY2hvc2Ugbm90IHRvCisgKiBoYXZlIG9uZS4KKyAqLwordm9pZCAgX19hdHRyaWJ1dGVfXygod2VhaykpIHZtYWxsb2Nfc3luY19hbGwodm9pZCkKK3sKK30KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNTY2NTFhMS4uMWJlNWE2MyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTI4NCwxMiArMjg0LDggQEAKIAkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGVycm9yKQogewogCWxvY2tfcGFnZShwYWdlKTsKLQlpZiAocGFnZV9tYXBwaW5nKHBhZ2UpID09IG1hcHBpbmcpIHsKLQkJaWYgKGVycm9yID09IC1FTk9TUEMpCi0JCQlzZXRfYml0KEFTX0VOT1NQQywgJm1hcHBpbmctPmZsYWdzKTsKLQkJZWxzZQotCQkJc2V0X2JpdChBU19FSU8sICZtYXBwaW5nLT5mbGFncyk7Ci0JfQorCWlmIChwYWdlX21hcHBpbmcocGFnZSkgPT0gbWFwcGluZykKKwkJbWFwcGluZ19zZXRfZXJyb3IobWFwcGluZywgZXJyb3IpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogfQogCkBAIC0xNTMyLDcgKzE1MjgsNyBAQAogCXBnX2RhdGFfdCAqcGdkYXQ7CiAJY3B1bWFza190IG1hc2s7CiAKLQlpZiAoYWN0aW9uID09IENQVV9PTkxJTkUpIHsKKwlpZiAoYWN0aW9uID09IENQVV9PTkxJTkUgfHwgYWN0aW9uID09IENQVV9PTkxJTkVfRlJPWkVOKSB7CiAJCWZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkgewogCQkJbWFzayA9IG5vZGVfdG9fY3B1bWFzayhwZ2RhdC0+bm9kZV9pZCk7CiAJCQlpZiAoYW55X29ubGluZV9jcHUobWFzaykgIT0gTlJfQ1BVUykKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggNmM0ODhkNi4uMzgyNTQyOSAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpZmRlZiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMKIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2bV9ldmVudF9zdGF0ZSwgdm1fZXZlbnRfc3RhdGVzKSA9IHt7MH19OwpAQCAtMjgxLDYgKzI4MiwxNyBAQAogCiAvKgogICogVXBkYXRlIHRoZSB6b25lIGNvdW50ZXJzIGZvciBvbmUgY3B1LgorICoKKyAqIE5vdGUgdGhhdCByZWZyZXNoX2NwdV92bV9zdGF0cyBzdHJpdmVzIHRvIG9ubHkgYWNjZXNzCisgKiBub2RlIGxvY2FsIG1lbW9yeS4gVGhlIHBlciBjcHUgcGFnZXNldHMgb24gcmVtb3RlIHpvbmVzIGFyZSBwbGFjZWQKKyAqIGluIHRoZSBtZW1vcnkgbG9jYWwgdG8gdGhlIHByb2Nlc3NvciB1c2luZyB0aGF0IHBhZ2VzZXQuIFNvIHRoZQorICogbG9vcCBvdmVyIGFsbCB6b25lcyB3aWxsIGFjY2VzcyBhIHNlcmllcyBvZiBjYWNoZWxpbmVzIGxvY2FsIHRvCisgKiB0aGUgcHJvY2Vzc29yLgorICoKKyAqIFRoZSBjYWxsIHRvIHpvbmVfcGFnZV9zdGF0ZV9hZGQgdXBkYXRlcyB0aGUgY2FjaGVsaW5lcyB3aXRoIHRoZQorICogc3RhdGlzdGljcyBpbiB0aGUgcmVtb3RlIHpvbmUgc3RydWN0IGFzIHdlbGwgYXMgdGhlIGdsb2JhbCBjYWNoZWxpbmVzCisgKiB3aXRoIHRoZSBnbG9iYWwgY291bnRlcnMuIFRoZXNlIGNvdWxkIGNhdXNlIHJlbW90ZSBub2RlIGNhY2hlIGxpbmUKKyAqIGJvdW5jaW5nIGFuZCB3aWxsIGhhdmUgdG8gYmUgb25seSBkb25lIHdoZW4gbmVjZXNzYXJ5LgogICovCiB2b2lkIHJlZnJlc2hfY3B1X3ZtX3N0YXRzKGludCBjcHUpCiB7CkBAIC0yODksMjEgKzMwMSw1NCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlmb3JfZWFjaF96b25lKHpvbmUpIHsKLQkJc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwOworCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwOwogCiAJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCiAJCQljb250aW51ZTsKIAotCQlwY3AgPSB6b25lX3BjcCh6b25lLCBjcHUpOworCQlwID0gem9uZV9wY3Aoem9uZSwgY3B1KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgTlJfVk1fWk9ORV9TVEFUX0lURU1TOyBpKyspCi0JCQlpZiAocGNwLT52bV9zdGF0X2RpZmZbaV0pIHsKKwkJCWlmIChwLT52bV9zdGF0X2RpZmZbaV0pIHsKIAkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQkJem9uZV9wYWdlX3N0YXRlX2FkZChwY3AtPnZtX3N0YXRfZGlmZltpXSwKKwkJCQl6b25lX3BhZ2Vfc3RhdGVfYWRkKHAtPnZtX3N0YXRfZGlmZltpXSwKIAkJCQkJem9uZSwgaSk7Ci0JCQkJcGNwLT52bV9zdGF0X2RpZmZbaV0gPSAwOworCQkJCXAtPnZtX3N0YXRfZGlmZltpXSA9IDA7CisjaWZkZWYgQ09ORklHX05VTUEKKwkJCQkvKiAzIHNlY29uZHMgaWRsZSB0aWxsIGZsdXNoICovCisJCQkJcC0+ZXhwaXJlID0gMzsKKyNlbmRpZgogCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCX0KKyNpZmRlZiBDT05GSUdfTlVNQQorCQkvKgorCQkgKiBEZWFsIHdpdGggZHJhaW5pbmcgdGhlIHJlbW90ZSBwYWdlc2V0IG9mIHRoaXMKKwkJICogcHJvY2Vzc29yCisJCSAqCisJCSAqIENoZWNrIGlmIHRoZXJlIGFyZSBwYWdlcyByZW1haW5pbmcgaW4gdGhpcyBwYWdlc2V0CisJCSAqIGlmIG5vdCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZXhwaXJlLgorCQkgKi8KKwkJaWYgKCFwLT5leHBpcmUgfHwgKCFwLT5wY3BbMF0uY291bnQgJiYgIXAtPnBjcFsxXS5jb3VudCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBuZXZlciBkcmFpbiB6b25lcyBsb2NhbCB0byB0aGlzIHByb2Nlc3Nvci4KKwkJICovCisJCWlmICh6b25lX3RvX25pZCh6b25lKSA9PSBudW1hX25vZGVfaWQoKSkgeworCQkJcC0+ZXhwaXJlID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcC0+ZXhwaXJlLS07CisJCWlmIChwLT5leHBpcmUpCisJCQljb250aW51ZTsKKworCQlpZiAocC0+cGNwWzBdLmNvdW50KQorCQkJZHJhaW5fem9uZV9wYWdlcyh6b25lLCBwLT5wY3AgKyAwKTsKKworCQlpZiAocC0+cGNwWzFdLmNvdW50KQorCQkJZHJhaW5fem9uZV9wYWdlcyh6b25lLCBwLT5wY3AgKyAxKTsKKyNlbmRpZgogCX0KIH0KIApAQCAtNjQwLDYgKzY4NSwyNCBAQAogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKICNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGRlbGF5ZWRfd29yaywgdm1zdGF0X3dvcmspOworaW50IHN5c2N0bF9zdGF0X2ludGVydmFsIF9fcmVhZF9tb3N0bHkgPSBIWjsKKworc3RhdGljIHZvaWQgdm1zdGF0X3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisJcmVmcmVzaF9jcHVfdm1fc3RhdHMoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJl9fZ2V0X2NwdV92YXIodm1zdGF0X3dvcmspLAorCQlzeXNjdGxfc3RhdF9pbnRlcnZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzdGFydF9jcHVfdGltZXIoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICp2bXN0YXRfd29yayA9ICZwZXJfY3B1KHZtc3RhdF93b3JrLCBjcHUpOworCisJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSh2bXN0YXRfd29yaywgdm1zdGF0X3VwZGF0ZSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgdm1zdGF0X3dvcmssIEhaICsgY3B1KTsKK30KKwogLyoKICAqIFVzZSB0aGUgY3B1IG5vdGlmaWVyIHRvIGluc3VyZSB0aGF0IHRoZSB0aHJlc2hvbGRzIGFyZSByZWNhbGN1bGF0ZWQKICAqIHdoZW4gbmVjZXNzYXJ5LgpAQCAtNjQ4LDEwICs3MTEsMjQgQEAKIAkJdW5zaWduZWQgbG9uZyBhY3Rpb24sCiAJCXZvaWQgKmhjcHUpCiB7CisJbG9uZyBjcHUgPSAobG9uZyloY3B1OworCiAJc3dpdGNoIChhY3Rpb24pIHsKLQljYXNlIENQVV9VUF9QUkVQQVJFOgotCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgorCQlzdGFydF9jcHVfdGltZXIoY3B1KTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCWNhc2UgQ1BVX0RPV05fUFJFUEFSRV9GUk9aRU46CisJCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJnBlcl9jcHUodm1zdGF0X3dvcmssIGNwdSkpOworCQlwZXJfY3B1KHZtc3RhdF93b3JrLCBjcHUpLndvcmsuZnVuYyA9IE5VTEw7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEX0ZST1pFTjoKKwkJc3RhcnRfY3B1X3RpbWVyKGNwdSk7CisJCWJyZWFrOwogCWNhc2UgQ1BVX0RFQUQ6CisJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCXJlZnJlc2hfem9uZV9zdGF0X3RocmVzaG9sZHMoKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTY2NSw4ICs3NDIsMTMgQEAKIAogaW50IF9faW5pdCBzZXR1cF92bXN0YXQodm9pZCkKIHsKKwlpbnQgY3B1OworCiAJcmVmcmVzaF96b25lX3N0YXRfdGhyZXNob2xkcygpOwogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmdm1zdGF0X25vdGlmaWVyKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQlzdGFydF9jcHVfdGltZXIoY3B1KTsKIAlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KHNldHVwX3Ztc3RhdCkKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IGJkOTNjNDUuLmRlNzhjOWQgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtMjQwLDEwICsyNDAsOCBAQAogCQkJICogaW50ZXJsb2NrIHdpdGggSFcgYWNjZWxlcmF0aW5nIGRldmljZXMgb3IgU1cgdmxhbgogCQkJICogaW5wdXQgcGFja2V0IHByb2Nlc3NpbmcuCiAJCQkgKi8KLQkJCWlmIChyZWFsX2Rldi0+ZmVhdHVyZXMgJgotCQkJICAgIChORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSKSkgeworCQkJaWYgKHJlYWxfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9GSUxURVIpCiAJCQkJcmVhbF9kZXYtPnZsYW5fcnhfa2lsbF92aWQocmVhbF9kZXYsIHZsYW5faWQpOwotCQkJfQogCiAJCQl2bGFuX2dyb3VwX3NldF9kZXZpY2UoZ3JwLCB2bGFuX2lkLCBOVUxMKTsKIAkJCXN5bmNocm9uaXplX25ldCgpOwpAQCAtNDA5LDE2ICs0MDcsMTQgQEAKIAl9CiAKIAlpZiAoKHJlYWxfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCkgJiYKLQkgICAgKHJlYWxfZGV2LT52bGFuX3J4X3JlZ2lzdGVyID09IE5VTEwgfHwKLQkgICAgIHJlYWxfZGV2LT52bGFuX3J4X2tpbGxfdmlkID09IE5VTEwpKSB7CisJICAgICFyZWFsX2Rldi0+dmxhbl9yeF9yZWdpc3RlcikgewogCQlwcmludGsoVkxBTl9EQkcgIiVzOiBEZXZpY2UgJXMgaGFzIGJ1Z2d5IFZMQU4gaHcgYWNjZWwuXG4iLAogCQkJX19GVU5DVElPTl9fLCByZWFsX2Rldi0+bmFtZSk7CiAJCWdvdG8gb3V0X3B1dF9kZXY7CiAJfQogCiAJaWYgKChyZWFsX2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fRklMVEVSKSAmJgotCSAgICAocmVhbF9kZXYtPnZsYW5fcnhfYWRkX3ZpZCA9PSBOVUxMIHx8Ci0JICAgICByZWFsX2Rldi0+dmxhbl9yeF9raWxsX3ZpZCA9PSBOVUxMKSkgeworCSAgICAoIXJlYWxfZGV2LT52bGFuX3J4X2FkZF92aWQgfHwgIXJlYWxfZGV2LT52bGFuX3J4X2tpbGxfdmlkKSkgewogCQlwcmludGsoVkxBTl9EQkcgIiVzOiBEZXZpY2UgJXMgaGFzIGJ1Z2d5IFZMQU4gaHcgYWNjZWwuXG4iLAogCQkJX19GVU5DVElPTl9fLCByZWFsX2Rldi0+bmFtZSk7CiAJCWdvdG8gb3V0X3B1dF9kZXY7CkBAIC03NDAsOCArNzM2LDcgQEAKIAljYXNlIFNFVF9WTEFOX05BTUVfVFlQRV9DTUQ6CiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07Ci0JCWlmICgoYXJncy51Lm5hbWVfdHlwZSA+PSAwKSAmJgotCQkgICAgKGFyZ3MudS5uYW1lX3R5cGUgPCBWTEFOX05BTUVfVFlQRV9ISUdIRVNUKSkgeworCQlpZiAoYXJncy51Lm5hbWVfdHlwZSA8IFZMQU5fTkFNRV9UWVBFX0hJR0hFU1QpIHsKIAkJCXZsYW5fbmFtZV90eXBlID0gYXJncy51Lm5hbWVfdHlwZTsKIAkJCWVyciA9IDA7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvS2NvbmZpZyBiL25ldC9LY29uZmlnCmluZGV4IGNhZWFjZDEuLmYzZGU3MjkgMTAwNjQ0Ci0tLSBhL25ldC9LY29uZmlnCisrKyBiL25ldC9LY29uZmlnCkBAIC0yMTgsNiArMjE4LDcgQEAKIAlib29sCiAKIG1lbnUgIldpcmVsZXNzIgorCWRlcGVuZHMgb24gIVMzOTAKIAogc291cmNlICJuZXQvd2lyZWxlc3MvS2NvbmZpZyIKIHNvdXJjZSAibmV0L21hYzgwMjExL0tjb25maWciCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2RkcC5jIGIvbmV0L2FwcGxldGFsay9kZHAuYwppbmRleCBmNmE5MmEwLi5mYmRmYjEyIDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2RkcC5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKQEAgLTE4NDQsNyArMTg0NCw2IEBACiAJLnNlbmRwYWdlCT0gc29ja19ub19zZW5kcGFnZSwKIH07CiAKLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogU09DS09QU19XUkFQKGF0YWxrX2RncmFtLCBQRl9BUFBMRVRBTEspOwogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRkcF9ub3RpZmllciA9IHsKZGlmZiAtLWdpdCBhL25ldC9heDI1L0tjb25maWcgYi9uZXQvYXgyNS9LY29uZmlnCmluZGV4IDQzZGQ4NmYuLjJhNzJhYTkgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L0tjb25maWcKKysrIGIvbmV0L2F4MjUvS2NvbmZpZwpAQCAtMyw3ICszLDcgQEAKICMKIAogbWVudWNvbmZpZyBIQU1SQURJTwotCWRlcGVuZHMgb24gTkVUCisJZGVwZW5kcyBvbiBORVQgJiYgIVMzOTAKIAlib29sICJBbWF0ZXVyIFJhZGlvIHN1cHBvcnQiCiAJaGVscAogCSAgSWYgeW91IHdhbnQgdG8gY29ubmVjdCB5b3VyIExpbnV4IGJveCB0byBhbiBhbWF0ZXVyIHJhZGlvLCBhbnN3ZXIgWQpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYWZfYXgyNS5jIGIvbmV0L2F4MjUvYWZfYXgyNS5jCmluZGV4IDZkZWQ5NTIuLjQyOWUxM2EgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2FmX2F4MjUuYworKysgYi9uZXQvYXgyNS9hZl9heDI1LmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bmV0L2F4MjUuaD4KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvS2NvbmZpZyBiL25ldC9ibHVldG9vdGgvS2NvbmZpZwppbmRleCA2OTI5NDkwLi43NzI1ZGE5IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL0tjb25maWcKKysrIGIvbmV0L2JsdWV0b290aC9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogIwogCiBtZW51Y29uZmlnIEJUCi0JZGVwZW5kcyBvbiBORVQKKwlkZXBlbmRzIG9uIE5FVCAmJiAhUzM5MAogCXRyaXN0YXRlICJCbHVldG9vdGggc3Vic3lzdGVtIHN1cHBvcnQiCiAJaGVscAogCSAgQmx1ZXRvb3RoIGlzIGxvdy1jb3N0LCBsb3ctcG93ZXIsIHNob3J0LXJhbmdlIHdpcmVsZXNzIHRlY2hub2xvZ3kuCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYwppbmRleCBhYjJkYjU1Li4xYzhmNGEwIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKaW5kZXggYmZjOWEzNS4uMWRhZTNkZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYwpAQCAtNjY1LDcgKzY2NSw4IEBACiAJCS8qIERldGFjaCBzb2NrZXRzIGZyb20gZGV2aWNlICovCiAJCXJlYWRfbG9jaygmaGNpX3NrX2xpc3QubG9jayk7CiAJCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmaGNpX3NrX2xpc3QuaGVhZCkgewotCQkJbG9ja19zb2NrKHNrKTsKKwkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwkJCWJoX2xvY2tfc29ja19uZXN0ZWQoc2spOwogCQkJaWYgKGhjaV9waShzayktPmhkZXYgPT0gaGRldikgewogCQkJCWhjaV9waShzayktPmhkZXYgPSBOVUxMOwogCQkJCXNrLT5za19lcnIgPSBFUElQRTsKQEAgLTY3NCw3ICs2NzUsOCBAQAogCiAJCQkJaGNpX2Rldl9wdXQoaGRldik7CiAJCQl9Ci0JCQlyZWxlYXNlX3NvY2soc2spOworCQkJYmhfdW5sb2NrX3NvY2soc2spOworCQkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCX0KIAkJcmVhZF91bmxvY2soJmhjaV9za19saXN0LmxvY2spOwogCX0KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCmluZGV4IGQzNDJlODkuLmNlYWRmY2YgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAKIHN0YXRpYyBpbnQgaGlkcF9oaWRpbnB1dF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQogewotCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbiA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKIAlyZXR1cm4gaGlkcF9xdWV1ZV9ldmVudChzZXNzaW9uLCBkZXYsIHR5cGUsIGNvZGUsIHZhbHVlKTsKQEAgLTE4Miw3ICsxODIsNyBAQAogCiBzdGF0aWMgaW50IGhpZHBfaW5wdXRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24gPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcmV0dXJuIGhpZHBfcXVldWVfZXZlbnQoc2Vzc2lvbiwgZGV2LCB0eXBlLCBjb2RlLCB2YWx1ZSk7CiB9CkBAIC02MzAsNyArNjMwLDcgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IHNlc3Npb24tPmlucHV0OwogCWludCBpOwogCi0JaW5wdXQtPnByaXZhdGUgPSBzZXNzaW9uOworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0LCBzZXNzaW9uKTsKIAogCWlucHV0LT5uYW1lID0gIkJsdWV0b290aCBISUQgQm9vdCBQcm90b2NvbCBEZXZpY2UiOwogCkBAIC02NjMsNyArNjYzLDcgQEAKIAkJaW5wdXQtPnJlbGJpdFswXSB8PSBCSVQoUkVMX1dIRUVMKTsKIAl9CiAKLQlpbnB1dC0+Y2Rldi5kZXYgPSBoaWRwX2dldF9kZXZpY2Uoc2Vzc2lvbik7CisJaW5wdXQtPmRldi5wYXJlbnQgPSBoaWRwX2dldF9kZXZpY2Uoc2Vzc2lvbik7CiAKIAlpbnB1dC0+ZXZlbnQgPSBoaWRwX2lucHV0X2V2ZW50OwogCkBAIC03MzcsMTAgKzczNyw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9GRUFUVVJFX1JFUE9SVF0ucmVwb3J0X2xpc3QsIGxpc3QpCiAJCWhpZHBfc2VuZF9yZXBvcnQoc2Vzc2lvbiwgcmVwb3J0KTsKIAotCWlmIChoaWRpbnB1dF9jb25uZWN0KGhpZCkgPT0gMCkgeworCWlmIChoaWRpbnB1dF9jb25uZWN0KGhpZCkgPT0gMCkKIAkJaGlkLT5jbGFpbWVkIHw9IEhJRF9DTEFJTUVEX0lOUFVUOwotCQloaWRfZmZfaW5pdChoaWQpOwotCX0KIH0KIAogaW50IGhpZHBfYWRkX2Nvbm5lY3Rpb24oc3RydWN0IGhpZHBfY29ubmFkZF9yZXEgKnJlcSwgc3RydWN0IHNvY2tldCAqY3RybF9zb2NrLCBzdHJ1Y3Qgc29ja2V0ICppbnRyX3NvY2spCkBAIC04NjQsNyArODYyLDcgQEAKIAlpZiAoc2Vzc2lvbi0+aGlkKQogCQloaWRfZnJlZV9kZXZpY2Uoc2Vzc2lvbi0+aGlkKTsKIAotCWtmcmVlKHNlc3Npb24tPmlucHV0KTsKKwlpbnB1dF9mcmVlX2RldmljZShzZXNzaW9uLT5pbnB1dCk7CiAJa2ZyZWUoc2Vzc2lvbik7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCBhNTliMWZiLi42NzBmZjk1IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC01MDcsNiArNTA3LDcgQEAKIAl9CiAKIAkvKiBEZWZhdWx0IGNvbmZpZyBvcHRpb25zICovCisJcGktPmNvbmZfbGVuID0gMDsKIAlwaS0+Y29uZl9tdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKIAlwaS0+Zmx1c2hfdG8gPSBMMkNBUF9ERUZBVUxUX0ZMVVNIX1RPOwogfQpAQCAtMTI3MSw0MiArMTI3Miw2IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX3BhcnNlX2NvbmZfcmVxKHN0cnVjdCBzb2NrICpzaywgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLQlpbnQgdHlwZSwgaGludCwgb2xlbjsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQl2b2lkICpwdHIgPSBkYXRhOwotCi0JQlRfREJHKCJzayAlcCBsZW4gJWQiLCBzaywgbGVuKTsKLQotCXdoaWxlIChsZW4gPj0gTDJDQVBfQ09ORl9PUFRfU0laRSkgewotCQlsZW4gLT0gbDJjYXBfZ2V0X2NvbmZfb3B0KCZwdHIsICZ0eXBlLCAmb2xlbiwgJnZhbCk7Ci0KLQkJaGludCAgPSB0eXBlICYgMHg4MDsKLQkJdHlwZSAmPSAweDdmOwotCi0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIEwyQ0FQX0NPTkZfTVRVOgotCQkJbDJjYXBfcGkoc2spLT5jb25mX210dSA9IHZhbDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTDJDQVBfQ09ORl9GTFVTSF9UTzoKLQkJCWwyY2FwX3BpKHNrKS0+Zmx1c2hfdG8gPSB2YWw7Ci0JCQlicmVhazsKLQotCQljYXNlIEwyQ0FQX0NPTkZfUU9TOgotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWlmIChoaW50KQotCQkJCWJyZWFrOwotCi0JCQkvKiBGSVhNRTogUmVqZWN0IHVua25vd24gb3B0aW9uICovCi0JCQlicmVhazsKLQkJfQotCX0KLX0KLQogc3RhdGljIHZvaWQgbDJjYXBfYWRkX2NvbmZfb3B0KHZvaWQgKipwdHIsIHU4IHR5cGUsIHU4IGxlbiwgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJc3RydWN0IGwyY2FwX2NvbmZfb3B0ICpvcHQgPSAqcHRyOwpAQCAtMTM1OCwzOSArMTMyMyw3NSBAQAogCXJldHVybiBwdHIgLSBkYXRhOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBsMmNhcF9jb25mX291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKipwdHIpCitzdGF0aWMgaW50IGwyY2FwX3BhcnNlX2NvbmZfcmVxKHN0cnVjdCBzb2NrICpzaywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwotCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBsMmNhcF9jb25mX3JzcCAqcnNwID0gZGF0YTsKKwl2b2lkICpwdHIgPSByc3AtPmRhdGE7CisJdm9pZCAqcmVxID0gcGktPmNvbmZfcmVxOworCWludCBsZW4gPSBwaS0+Y29uZl9sZW47CisJaW50IHR5cGUsIGhpbnQsIG9sZW47CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdTE2IHJlc3VsdCA9IEwyQ0FQX0NPTkZfU1VDQ0VTUzsKIAotCS8qIENvbmZpZ3VyZSBvdXRwdXQgb3B0aW9ucyBhbmQgbGV0IHRoZSBvdGhlciBzaWRlIGtub3cKLQkgKiB3aGljaCBvbmVzIHdlIGRvbid0IGxpa2UuICovCi0JaWYgKHBpLT5jb25mX210dSA8IHBpLT5vbXR1KQotCQlyZXN1bHQgPSBMMkNBUF9DT05GX1VOQUNDRVBUOwotCWVsc2UKLQkJcGktPm9tdHUgPSBwaS0+Y29uZl9tdHU7CisJQlRfREJHKCJzayAlcCIsIHNrKTsKIAotCWwyY2FwX2FkZF9jb25mX29wdChwdHIsIEwyQ0FQX0NPTkZfTVRVLCAyLCBwaS0+b210dSk7CisJd2hpbGUgKGxlbiA+PSBMMkNBUF9DT05GX09QVF9TSVpFKSB7CisJCWxlbiAtPSBsMmNhcF9nZXRfY29uZl9vcHQoJnJlcSwgJnR5cGUsICZvbGVuLCAmdmFsKTsKIAotCUJUX0RCRygic2sgJXAgcmVzdWx0ICVkIiwgc2ssIHJlc3VsdCk7Ci0JcmV0dXJuIHJlc3VsdDsKKwkJaGludCAgPSB0eXBlICYgMHg4MDsKKwkJdHlwZSAmPSAweDdmOworCisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEwyQ0FQX0NPTkZfTVRVOgorCQkJcGktPmNvbmZfbXR1ID0gdmFsOworCQkJYnJlYWs7CisKKwkJY2FzZSBMMkNBUF9DT05GX0ZMVVNIX1RPOgorCQkJcGktPmZsdXNoX3RvID0gdmFsOworCQkJYnJlYWs7CisKKwkJY2FzZSBMMkNBUF9DT05GX1FPUzoKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlpZiAoaGludCkKKwkJCQlicmVhazsKKworCQkJcmVzdWx0ID0gTDJDQVBfQ09ORl9VTktOT1dOOworCQkJKigodTggKikgcHRyKyspID0gdHlwZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHJlc3VsdCA9PSBMMkNBUF9DT05GX1NVQ0NFU1MpIHsKKwkJLyogQ29uZmlndXJlIG91dHB1dCBvcHRpb25zIGFuZCBsZXQgdGhlIG90aGVyIHNpZGUga25vdworCQkgKiB3aGljaCBvbmVzIHdlIGRvbid0IGxpa2UuICovCisKKwkJaWYgKHBpLT5jb25mX210dSA8IHBpLT5vbXR1KQorCQkJcmVzdWx0ID0gTDJDQVBfQ09ORl9VTkFDQ0VQVDsKKwkJZWxzZQorCQkJcGktPm9tdHUgPSBwaS0+Y29uZl9tdHU7CisKKwkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfTVRVLCAyLCBwaS0+b210dSk7CisJfQorCisJcnNwLT5zY2lkICAgPSBjcHVfdG9fbGUxNihwaS0+ZGNpZCk7CisJcnNwLT5yZXN1bHQgPSBjcHVfdG9fbGUxNihyZXN1bHQpOworCXJzcC0+ZmxhZ3MgID0gY3B1X3RvX2xlMTYoMHgwMDAwKTsKKworCXJldHVybiBwdHIgLSBkYXRhOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX2J1aWxkX2NvbmZfcnNwKHN0cnVjdCBzb2NrICpzaywgdm9pZCAqZGF0YSwgaW50ICpyZXN1bHQpCitzdGF0aWMgaW50IGwyY2FwX2J1aWxkX2NvbmZfcnNwKHN0cnVjdCBzb2NrICpzaywgdm9pZCAqZGF0YSwgdTE2IHJlc3VsdCwgdTE2IGZsYWdzKQogewogCXN0cnVjdCBsMmNhcF9jb25mX3JzcCAqcnNwID0gZGF0YTsKIAl2b2lkICpwdHIgPSByc3AtPmRhdGE7Ci0JdTE2IGZsYWdzID0gMDsKIAotCUJUX0RCRygic2sgJXAgY29tcGxldGUgJWQiLCBzaywgcmVzdWx0ID8gMSA6IDApOwotCi0JaWYgKHJlc3VsdCkKLQkJKnJlc3VsdCA9IGwyY2FwX2NvbmZfb3V0cHV0KHNrLCAmcHRyKTsKLQllbHNlCi0JCWZsYWdzID0gMHgwMDAxOworCUJUX0RCRygic2sgJXAiLCBzayk7CiAKIAlyc3AtPnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7Ci0JcnNwLT5yZXN1bHQgPSBjcHVfdG9fbGUxNihyZXN1bHQgPyAqcmVzdWx0IDogMCk7CisJcnNwLT5yZXN1bHQgPSBjcHVfdG9fbGUxNihyZXN1bHQpOwogCXJzcC0+ZmxhZ3MgID0gY3B1X3RvX2xlMTYoZmxhZ3MpOwogCiAJcmV0dXJuIHB0ciAtIGRhdGE7CkBAIC0xNTM1LDcgKzE1MzYsNyBAQAogCXUxNiBkY2lkLCBmbGFnczsKIAl1OCByc3BbNjRdOwogCXN0cnVjdCBzb2NrICpzazsKLQlpbnQgcmVzdWx0OworCWludCBsZW47CiAKIAlkY2lkICA9IF9fbGUxNl90b19jcHUocmVxLT5kY2lkKTsKIAlmbGFncyA9IF9fbGUxNl90b19jcHUocmVxLT5mbGFncyk7CkBAIC0xNTQ4LDI1ICsxNTQ5LDQwIEBACiAJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9ESVNDT05OKQogCQlnb3RvIHVubG9jazsKIAotCWwyY2FwX3BhcnNlX2NvbmZfcmVxKHNrLCByZXEtPmRhdGEsIGNtZC0+bGVuIC0gc2l6ZW9mKCpyZXEpKTsKKwkvKiBSZWplY3QgaWYgY29uZmlnIGJ1ZmZlciBpcyB0b28gc21hbGwuICovCisJbGVuID0gY21kLT5sZW4gLSBzaXplb2YoKnJlcSk7CisJaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9sZW4gKyBsZW4gPiBzaXplb2YobDJjYXBfcGkoc2spLT5jb25mX3JlcSkpIHsKKwkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwgTDJDQVBfQ09ORl9SU1AsCisJCQkJbDJjYXBfYnVpbGRfY29uZl9yc3Aoc2ssIHJzcCwKKwkJCQkJTDJDQVBfQ09ORl9SRUpFQ1QsIGZsYWdzKSwgcnNwKTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJLyogU3RvcmUgY29uZmlnLiAqLworCW1lbWNweShsMmNhcF9waShzayktPmNvbmZfcmVxICsgbDJjYXBfcGkoc2spLT5jb25mX2xlbiwgcmVxLT5kYXRhLCBsZW4pOworCWwyY2FwX3BpKHNrKS0+Y29uZl9sZW4gKz0gbGVuOwogCiAJaWYgKGZsYWdzICYgMHgwMDAxKSB7CiAJCS8qIEluY29tcGxldGUgY29uZmlnLiBTZW5kIGVtcHR5IHJlc3BvbnNlLiAqLwogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LCBMMkNBUF9DT05GX1JTUCwKLQkJCQlsMmNhcF9idWlsZF9jb25mX3JzcChzaywgcnNwLCBOVUxMKSwgcnNwKTsKKwkJCQlsMmNhcF9idWlsZF9jb25mX3JzcChzaywgcnNwLAorCQkJCQlMMkNBUF9DT05GX1NVQ0NFU1MsIDB4MDAwMSksIHJzcCk7CiAJCWdvdG8gdW5sb2NrOwogCX0KIAogCS8qIENvbXBsZXRlIGNvbmZpZy4gKi8KLQlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LCBMMkNBUF9DT05GX1JTUCwKLQkJCWwyY2FwX2J1aWxkX2NvbmZfcnNwKHNrLCByc3AsICZyZXN1bHQpLCByc3ApOwotCi0JaWYgKHJlc3VsdCkKKwlsZW4gPSBsMmNhcF9wYXJzZV9jb25mX3JlcShzaywgcnNwKTsKKwlpZiAobGVuIDwgMCkKIAkJZ290byB1bmxvY2s7CiAKLQkvKiBPdXRwdXQgY29uZmlnIGRvbmUgKi8KKwlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LCBMMkNBUF9DT05GX1JTUCwgbGVuLCByc3ApOworCisJLyogT3V0cHV0IGNvbmZpZyBkb25lLiAqLwogCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX09VVFBVVF9ET05FOwogCisJLyogUmVzZXQgY29uZmlnIGJ1ZmZlci4gKi8KKwlsMmNhcF9waShzayktPmNvbmZfbGVuID0gMDsKKwogCWlmIChsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX0lOUFVUX0RPTkUpIHsKIAkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVEVEOwogCQlsMmNhcF9jaGFuX3JlYWR5KHNrKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZmRiLmMgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCmluZGV4IDkxYjAxNzAuLjNmYzY5NzIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZmRiLmMKKysrIGIvbmV0L2JyaWRnZS9icl9mZGIuYwpAQCAtMTIxLDYgKzEyMSw3IEBACiB7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gKHN0cnVjdCBuZXRfYnJpZGdlICopX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBkZWxheSA9IGhvbGRfdGltZShicik7CisJdW5zaWduZWQgbG9uZyBuZXh0X3RpbWVyID0gamlmZmllcyArIGJyLT5mb3J3YXJkX2RlbGF5OwogCWludCBpOwogCiAJc3Bpbl9sb2NrX2JoKCZici0+aGFzaF9sb2NrKTsKQEAgLTEyOSwxNCArMTMwLDIxIEBACiAJCXN0cnVjdCBobGlzdF9ub2RlICpoLCAqbjsKIAogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGYsIGgsIG4sICZici0+aGFzaFtpXSwgaGxpc3QpIHsKLQkJCWlmICghZi0+aXNfc3RhdGljICYmCi0JCQkgICAgdGltZV9iZWZvcmVfZXEoZi0+YWdlaW5nX3RpbWVyICsgZGVsYXksIGppZmZpZXMpKQorCQkJdW5zaWduZWQgbG9uZyB0aGlzX3RpbWVyOworCQkJaWYgKGYtPmlzX3N0YXRpYykKKwkJCQljb250aW51ZTsKKwkJCXRoaXNfdGltZXIgPSBmLT5hZ2VpbmdfdGltZXIgKyBkZWxheTsKKwkJCWlmICh0aW1lX2JlZm9yZV9lcSh0aGlzX3RpbWVyLCBqaWZmaWVzKSkKIAkJCQlmZGJfZGVsZXRlKGYpOworCQkJZWxzZSBpZiAodGhpc190aW1lciA8IG5leHRfdGltZXIpCisJCQkJbmV4dF90aW1lciA9IHRoaXNfdGltZXI7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmJyLT5oYXNoX2xvY2spOwogCi0JbW9kX3RpbWVyKCZici0+Z2NfdGltZXIsIGppZmZpZXMgKyBIWi8xMCk7CisJLyogQWRkIEhaLzQgdG8gZW5zdXJlIHdlIHJvdW5kIHRoZSBqaWZmaWVzIHVwd2FyZHMgdG8gYmUgYWZ0ZXIgdGhlIG5leHQKKwkgKiB0aW1lciwgb3RoZXJ3aXNlIHdlIG1pZ2h0IHJvdW5kIGRvd24gYW5kIHdpbGwgaGF2ZSBuby1vcCBydW4uICovCisJbW9kX3RpbWVyKCZici0+Z2NfdGltZXIsIHJvdW5kX2ppZmZpZXMobmV4dF90aW1lciArIEhaLzQpKTsKIH0KIAogLyogQ29tcGxldGVseSBmbHVzaCBhbGwgZHluYW1pYyBlbnRyaWVzIGluIGZvcndhcmRpbmcgZGF0YWJhc2UuKi8KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3RwLmMgYi9uZXQvYnJpZGdlL2JyX3N0cC5jCmluZGV4IGViYjA4NjEuLmUzODAzNGEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zdHAuYwpAQCAtMTMsNyArMTMsNiBAQAogICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlICJicl9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYnJfcHJpdmF0ZV9zdHAuaCIKQEAgLTE3OSw3ICsxNzgsOCBAQAogCQlicl9zZW5kX2NvbmZpZ19icGR1KHAsICZicGR1KTsKIAkJcC0+dG9wb2xvZ3lfY2hhbmdlX2FjayA9IDA7CiAJCXAtPmNvbmZpZ19wZW5kaW5nID0gMDsKLQkJbW9kX3RpbWVyKCZwLT5ob2xkX3RpbWVyLCBqaWZmaWVzICsgQlJfSE9MRF9USU1FKTsKKwkJbW9kX3RpbWVyKCZwLT5ob2xkX3RpbWVyLAorCQkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBCUl9IT0xEX1RJTUUpKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMgYi9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCmluZGV4IDNlMjQ2YjMuLmE3ODZlNzggMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zdHBfaWYuYwpAQCAtMTQsNyArMTQsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3RwX3RpbWVyLmMgYi9uZXQvYnJpZGdlL2JyX3N0cF90aW1lci5jCmluZGV4IDAzMGFhNzkuLjc3ZjUyNTUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwX3RpbWVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zdHBfdGltZXIuYwpAQCAtMTUsNyArMTUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImJyX3ByaXZhdGVfc3RwLmgiCkBAIC00Myw3ICs0Miw3IEBACiAJaWYgKGJyLT5kZXYtPmZsYWdzICYgSUZGX1VQKSB7CiAJCWJyX2NvbmZpZ19icGR1X2dlbmVyYXRpb24oYnIpOwogCi0JCW1vZF90aW1lcigmYnItPmhlbGxvX3RpbWVyLCBqaWZmaWVzICsgYnItPmhlbGxvX3RpbWUpOworCQltb2RfdGltZXIoJmJyLT5oZWxsb190aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgYnItPmhlbGxvX3RpbWUpKTsKIAl9CiAJc3Bpbl91bmxvY2soJmJyLT5sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNDMxN2MxYi4uNWE3ZjIwZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExNiw2ICsxMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAKIC8qCiAgKglUaGUgbGlzdCBvZiBwYWNrZXQgdHlwZXMgd2Ugd2lsbCByZWNlaXZlIChhcyBvcHBvc2VkIHRvIGRpc2NhcmQpCkBAIC0yMTcsNiArMjE4LDczIEBACiAjZGVmaW5lCW5ldGRldl91bnJlZ2lzdGVyX3N5c2ZzKGRldikJZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisvKgorICogcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgaW5pdHMgZGV2LT5feG1pdF9sb2NrIGFuZCBzZXRzIGxvY2tkZXAgY2xhc3MKKyAqIGFjY29yZGluZyB0byBkZXYtPnR5cGUKKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5ldGRldl9sb2NrX3R5cGVbXSA9CisJe0FSUEhSRF9ORVRST00sIEFSUEhSRF9FVEhFUiwgQVJQSFJEX0VFVEhFUiwgQVJQSFJEX0FYMjUsCisJIEFSUEhSRF9QUk9ORVQsIEFSUEhSRF9DSEFPUywgQVJQSFJEX0lFRUU4MDIsIEFSUEhSRF9BUkNORVQsCisJIEFSUEhSRF9BUFBMRVRMSywgQVJQSFJEX0RMQ0ksIEFSUEhSRF9BVE0sIEFSUEhSRF9NRVRSSUNPTSwKKwkgQVJQSFJEX0lFRUUxMzk0LCBBUlBIUkRfRVVJNjQsIEFSUEhSRF9JTkZJTklCQU5ELCBBUlBIUkRfU0xJUCwKKwkgQVJQSFJEX0NTTElQLCBBUlBIUkRfU0xJUDYsIEFSUEhSRF9DU0xJUDYsIEFSUEhSRF9SU1JWRCwKKwkgQVJQSFJEX0FEQVBULCBBUlBIUkRfUk9TRSwgQVJQSFJEX1gyNSwgQVJQSFJEX0hXWDI1LAorCSBBUlBIUkRfUFBQLCBBUlBIUkRfQ0lTQ08sIEFSUEhSRF9MQVBCLCBBUlBIUkRfRERDTVAsCisJIEFSUEhSRF9SQVdIRExDLCBBUlBIUkRfVFVOTkVMLCBBUlBIUkRfVFVOTkVMNiwgQVJQSFJEX0ZSQUQsCisJIEFSUEhSRF9TS0lQLCBBUlBIUkRfTE9PUEJBQ0ssIEFSUEhSRF9MT0NBTFRMSywgQVJQSFJEX0ZEREksCisJIEFSUEhSRF9CSUYsIEFSUEhSRF9TSVQsIEFSUEhSRF9JUEREUCwgQVJQSFJEX0lQR1JFLAorCSBBUlBIUkRfUElNUkVHLCBBUlBIUkRfSElQUEksIEFSUEhSRF9BU0gsIEFSUEhSRF9FQ09ORVQsCisJIEFSUEhSRF9JUkRBLCBBUlBIUkRfRkNQUCwgQVJQSFJEX0ZDQUwsIEFSUEhSRF9GQ1BMLAorCSBBUlBIUkRfRkNGQUJSSUMsIEFSUEhSRF9JRUVFODAyX1RSLCBBUlBIUkRfSUVFRTgwMjExLAorCSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNLCBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQLCBBUlBIUkRfVk9JRCwKKwkgQVJQSFJEX05PTkV9OworCitzdGF0aWMgY29uc3QgY2hhciAqbmV0ZGV2X2xvY2tfbmFtZVtdID0KKwl7Il94bWl0X05FVFJPTSIsICJfeG1pdF9FVEhFUiIsICJfeG1pdF9FRVRIRVIiLCAiX3htaXRfQVgyNSIsCisJICJfeG1pdF9QUk9ORVQiLCAiX3htaXRfQ0hBT1MiLCAiX3htaXRfSUVFRTgwMiIsICJfeG1pdF9BUkNORVQiLAorCSAiX3htaXRfQVBQTEVUTEsiLCAiX3htaXRfRExDSSIsICJfeG1pdF9BVE0iLCAiX3htaXRfTUVUUklDT00iLAorCSAiX3htaXRfSUVFRTEzOTQiLCAiX3htaXRfRVVJNjQiLCAiX3htaXRfSU5GSU5JQkFORCIsICJfeG1pdF9TTElQIiwKKwkgIl94bWl0X0NTTElQIiwgIl94bWl0X1NMSVA2IiwgIl94bWl0X0NTTElQNiIsICJfeG1pdF9SU1JWRCIsCisJICJfeG1pdF9BREFQVCIsICJfeG1pdF9ST1NFIiwgIl94bWl0X1gyNSIsICJfeG1pdF9IV1gyNSIsCisJICJfeG1pdF9QUFAiLCAiX3htaXRfQ0lTQ08iLCAiX3htaXRfTEFQQiIsICJfeG1pdF9ERENNUCIsCisJICJfeG1pdF9SQVdIRExDIiwgIl94bWl0X1RVTk5FTCIsICJfeG1pdF9UVU5ORUw2IiwgIl94bWl0X0ZSQUQiLAorCSAiX3htaXRfU0tJUCIsICJfeG1pdF9MT09QQkFDSyIsICJfeG1pdF9MT0NBTFRMSyIsICJfeG1pdF9GRERJIiwKKwkgIl94bWl0X0JJRiIsICJfeG1pdF9TSVQiLCAiX3htaXRfSVBERFAiLCAiX3htaXRfSVBHUkUiLAorCSAiX3htaXRfUElNUkVHIiwgIl94bWl0X0hJUFBJIiwgIl94bWl0X0FTSCIsICJfeG1pdF9FQ09ORVQiLAorCSAiX3htaXRfSVJEQSIsICJfeG1pdF9GQ1BQIiwgIl94bWl0X0ZDQUwiLCAiX3htaXRfRkNQTCIsCisJICJfeG1pdF9GQ0ZBQlJJQyIsICJfeG1pdF9JRUVFODAyX1RSIiwgIl94bWl0X0lFRUU4MDIxMSIsCisJICJfeG1pdF9JRUVFODAyMTFfUFJJU00iLCAiX3htaXRfSUVFRTgwMjExX1JBRElPVEFQIiwgIl94bWl0X1ZPSUQiLAorCSAiX3htaXRfTk9ORSJ9OworCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG5ldGRldl94bWl0X2xvY2tfa2V5W0FSUkFZX1NJWkUobmV0ZGV2X2xvY2tfdHlwZSldOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG5ldGRldl9sb2NrX3Bvcyh1bnNpZ25lZCBzaG9ydCBkZXZfdHlwZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5ldGRldl9sb2NrX3R5cGUpOyBpKyspCisJCWlmIChuZXRkZXZfbG9ja190eXBlW2ldID09IGRldl90eXBlKQorCQkJcmV0dXJuIGk7CisJLyogdGhlIGxhc3Qga2V5IGlzIHVzZWQgYnkgZGVmYXVsdCAqLworCXJldHVybiBBUlJBWV9TSVpFKG5ldGRldl9sb2NrX3R5cGUpIC0gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9zZXRfbG9ja2RlcF9jbGFzcyhzcGlubG9ja190ICpsb2NrLAorCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgZGV2X3R5cGUpCit7CisJaW50IGk7CisKKwlpID0gbmV0ZGV2X2xvY2tfcG9zKGRldl90eXBlKTsKKwlsb2NrZGVwX3NldF9jbGFzc19hbmRfbmFtZShsb2NrLCAmbmV0ZGV2X3htaXRfbG9ja19rZXlbaV0sCisJCQkJICAgbmV0ZGV2X2xvY2tfbmFtZVtpXSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9zZXRfbG9ja2RlcF9jbGFzcyhzcGlubG9ja190ICpsb2NrLAorCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgZGV2X3R5cGUpCit7Cit9CisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIApAQCAtMzAwMSw2ICszMDY5LDcgQEAKIAogCXNwaW5fbG9ja19pbml0KCZkZXYtPnF1ZXVlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPl94bWl0X2xvY2spOworCW5ldGRldl9zZXRfbG9ja2RlcF9jbGFzcygmZGV2LT5feG1pdF9sb2NrLCBkZXYtPnR5cGUpOwogCWRldi0+eG1pdF9sb2NrX293bmVyID0gLTE7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+aW5ncmVzc19sb2NrKTsKIApAQCAtMzI0NSw3ICszMzE0LDYgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJbmV0ZGV2X3VucmVnaXN0ZXJfc3lzZnMoZGV2KTsKIAkJZGV2LT5yZWdfc3RhdGUgPSBORVRSRUdfVU5SRUdJU1RFUkVEOwogCiAJCW5ldGRldl93YWl0X2FsbHJlZnMoZGV2KTsKQEAgLTMyNTYsMTEgKzMzMjQsMTEgQEAKIAkJQlVHX1RSQVAoIWRldi0+aXA2X3B0cik7CiAJCUJVR19UUkFQKCFkZXYtPmRuX3B0cik7CiAKLQkJLyogSXQgbXVzdCBiZSB0aGUgdmVyeSBsYXN0IGFjdGlvbiwKLQkJICogYWZ0ZXIgdGhpcyAnZGV2JyBtYXkgcG9pbnQgdG8gZnJlZWQgdXAgbWVtb3J5LgotCQkgKi8KIAkJaWYgKGRldi0+ZGVzdHJ1Y3RvcikKIAkJCWRldi0+ZGVzdHJ1Y3RvcihkZXYpOworCisJCS8qIEZyZWUgbmV0d29yayBkZXZpY2UgKi8KKwkJa29iamVjdF9wdXQoJmRldi0+ZGV2LmtvYmopOwogCX0KIAogb3V0OgpAQCAtMzQxMSw2ICszNDc5LDkgQEAKIAkvKiBOb3RpZmllciBjaGFpbiBNVVNUIGRldGFjaCB1cyBmcm9tIG1hc3RlciBkZXZpY2UuICovCiAJQlVHX1RSQVAoIWRldi0+bWFzdGVyKTsKIAorCS8qIFJlbW92ZSBlbnRyaWVzIGZyb20gc3lzZnMgKi8KKwluZXRkZXZfdW5yZWdpc3Rlcl9zeXNmcyhkZXYpOworCiAJLyogRmluaXNoIHByb2Nlc3NpbmcgdW5yZWdpc3RlciBhZnRlciB1bmxvY2sgKi8KIAluZXRfc2V0X3RvZG8oZGV2KTsKIApAQCAtMzQ1MCw3ICszNTIxLDcgQEAKIAl1bnNpZ25lZCBpbnQgY3B1LCBvbGRjcHUgPSAodW5zaWduZWQgbG9uZylvY3B1OwogCXN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkLCAqb2xkc2Q7CiAKLQlpZiAoYWN0aW9uICE9IENQVV9ERUFEKQorCWlmIChhY3Rpb24gIT0gQ1BVX0RFQUQgJiYgYWN0aW9uICE9IENQVV9ERUFEX0ZST1pFTikKIAkJcmV0dXJuIE5PVElGWV9PSzsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9mbG93LmMgYi9uZXQvY29yZS9mbG93LmMKaW5kZXggNWQyNTY5Ny4uMDUxNDMwNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmxvdy5jCisrKyBiL25ldC9jb3JlL2Zsb3cuYwpAQCAtMzM4LDcgKzMzOCw3IEBACiAJCQkgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAogCQkJICB2b2lkICpoY3B1KQogewotCWlmIChhY3Rpb24gPT0gQ1BVX0RFQUQpCisJaWYgKGFjdGlvbiA9PSBDUFVfREVBRCB8fCBhY3Rpb24gPT0gQ1BVX0RFQURfRlJPWkVOKQogCQlfX2Zsb3dfY2FjaGVfc2hyaW5rKCh1bnNpZ25lZCBsb25nKWhjcHUsIDApOwogCXJldHVybiBOT1RJRllfT0s7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9saW5rX3dhdGNoLmMgYi9uZXQvY29yZS9saW5rX3dhdGNoLmMKaW5kZXggZTNjMjZhOS4uYTVlMzcyYiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbGlua193YXRjaC5jCisrKyBiL25ldC9jb3JlL2xpbmtfd2F0Y2guYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC0yNyw4ICsyNiw3IEBACiAKIAogZW51bSBsd19iaXRzIHsKLQlMV19SVU5OSU5HID0gMCwKLQlMV19TRV9VU0VECisJTFdfVVJHRU5UID0gMCwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxpbmt3YXRjaF9mbGFnczsKQEAgLTM3LDE3ICszNSw5IEBACiBzdGF0aWMgdm9pZCBsaW5rd2F0Y2hfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICpkdW1teSk7CiBzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksobGlua3dhdGNoX3dvcmssIGxpbmt3YXRjaF9ldmVudCk7CiAKLXN0YXRpYyBMSVNUX0hFQUQobHdldmVudGxpc3QpOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpsd2V2ZW50bGlzdDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobHdldmVudGxpc3RfbG9jayk7CiAKLXN0cnVjdCBsd19ldmVudCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci19OwotCi0vKiBBdm9pZCBrbWFsbG9jKCkgZm9yIG1vc3Qgc3lzdGVtcyAqLwotc3RhdGljIHN0cnVjdCBsd19ldmVudCBzaW5nbGVldmVudDsKLQogc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVmYXVsdF9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkKQEAgLTg3LDI1ICs3NywxMDIgQEAKIH0KIAogCi0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBydG5sIHNlbWFwaG9yZSBoZWxkICovCi12b2lkIGxpbmt3YXRjaF9ydW5fcXVldWUodm9pZCkKK3N0YXRpYyBpbnQgbGlua3dhdGNoX3VyZ2VudF9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsaXN0X2hlYWQgaGVhZCwgKm4sICpuZXh0OworCXJldHVybiBuZXRpZl9ydW5uaW5nKGRldikgJiYgbmV0aWZfY2Fycmllcl9vayhkZXYpICYmCisJICAgICAgIGRldi0+cWRpc2MgIT0gZGV2LT5xZGlzY19zbGVlcGluZzsKK30KKworCitzdGF0aWMgdm9pZCBsaW5rd2F0Y2hfYWRkX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsd2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7CisJZGV2LT5saW5rX3dhdGNoX25leHQgPSBsd2V2ZW50bGlzdDsKKwlsd2V2ZW50bGlzdCA9IGRldjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsd2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7Cit9CisKKworc3RhdGljIHZvaWQgbGlua3dhdGNoX3NjaGVkdWxlX3dvcmsoaW50IHVyZ2VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGRlbGF5ID0gbGlua3dhdGNoX25leHRldmVudCAtIGppZmZpZXM7CisKKwlpZiAodGVzdF9iaXQoTFdfVVJHRU5ULCAmbGlua3dhdGNoX2ZsYWdzKSkKKwkJcmV0dXJuOworCisJLyogTWluaW1pc2UgZG93bi10aW1lOiBkcm9wIGRlbGF5IGZvciB1cCBldmVudC4gKi8KKwlpZiAodXJnZW50KSB7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KExXX1VSR0VOVCwgJmxpbmt3YXRjaF9mbGFncykpCisJCQlyZXR1cm47CisJCWRlbGF5ID0gMDsKKwl9CisKKwkvKiBJZiB3ZSB3cmFwIGFyb3VuZCB3ZSdsbCBkZWxheSBpdCBieSBhdCBtb3N0IEhaLiAqLworCWlmIChkZWxheSA+IEhaKQorCQlkZWxheSA9IDA7CisKKwkvKgorCSAqIFRoaXMgaXMgdHJ1ZSBpZiB3ZSd2ZSBzY2hlZHVsZWQgaXQgaW1tZWRpdGF0ZWx5IG9yIGlmIHdlIGRvbid0CisJICogbmVlZCBhbiBpbW1lZGlhdGUgZXhlY3V0aW9uIGFuZCBpdCdzIGFscmVhZHkgcGVuZGluZy4KKwkgKi8KKwlpZiAoc2NoZWR1bGVfZGVsYXllZF93b3JrKCZsaW5rd2F0Y2hfd29yaywgZGVsYXkpID09ICFkZWxheSkKKwkJcmV0dXJuOworCisJLyogRG9uJ3QgYm90aGVyIGlmIHRoZXJlIGlzIG5vdGhpbmcgdXJnZW50LiAqLworCWlmICghdGVzdF9iaXQoTFdfVVJHRU5ULCAmbGlua3dhdGNoX2ZsYWdzKSkKKwkJcmV0dXJuOworCisJLyogSXQncyBhbHJlYWR5IHJ1bm5pbmcgd2hpY2ggaXMgZ29vZCBlbm91Z2guICovCisJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZsaW5rd2F0Y2hfd29yaykpCisJCXJldHVybjsKKworCS8qIE90aGVyd2lzZSB3ZSByZXNjaGVkdWxlIGl0IGFnYWluIGZvciBpbW1lZGlhdGUgZXhlY3Rpb24uICovCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZsaW5rd2F0Y2hfd29yaywgMCk7Cit9CisKKworc3RhdGljIHZvaWQgX19saW5rd2F0Y2hfcnVuX3F1ZXVlKGludCB1cmdlbnRfb25seSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV4dDsKKworCS8qCisJICogTGltaXQgdGhlIG51bWJlciBvZiBsaW5rd2F0Y2ggZXZlbnRzIHRvIG9uZQorCSAqIHBlciBzZWNvbmQgc28gdGhhdCBhIHJ1bmF3YXkgZHJpdmVyIGRvZXMgbm90CisJICogY2F1c2UgYSBzdG9ybSBvZiBtZXNzYWdlcyBvbiB0aGUgbmV0bGluaworCSAqIHNvY2tldC4gIFRoaXMgbGltaXQgZG9lcyBub3QgYXBwbHkgdG8gdXAgZXZlbnRzCisJICogd2hpbGUgdGhlIGRldmljZSBxZGlzYyBpcyBkb3duLgorCSAqLworCWlmICghdXJnZW50X29ubHkpCisJCWxpbmt3YXRjaF9uZXh0ZXZlbnQgPSBqaWZmaWVzICsgSFo7CisJLyogTGltaXQgd3JhcC1hcm91bmQgZWZmZWN0IG9uIGRlbGF5LiAqLworCWVsc2UgaWYgKHRpbWVfYWZ0ZXIobGlua3dhdGNoX25leHRldmVudCwgamlmZmllcyArIEhaKSkKKwkJbGlua3dhdGNoX25leHRldmVudCA9IGppZmZpZXM7CisKKwljbGVhcl9iaXQoTFdfVVJHRU5ULCAmbGlua3dhdGNoX2ZsYWdzKTsKIAogCXNwaW5fbG9ja19pcnEoJmx3ZXZlbnRsaXN0X2xvY2spOwotCWxpc3RfcmVwbGFjZV9pbml0KCZsd2V2ZW50bGlzdCwgJmhlYWQpOworCW5leHQgPSBsd2V2ZW50bGlzdDsKKwlsd2V2ZW50bGlzdCA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxKCZsd2V2ZW50bGlzdF9sb2NrKTsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShuLCBuZXh0LCAmaGVhZCkgewotCQlzdHJ1Y3QgbHdfZXZlbnQgKmV2ZW50ID0gbGlzdF9lbnRyeShuLCBzdHJ1Y3QgbHdfZXZlbnQsIGxpc3QpOwotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZXZlbnQtPmRldjsKKwl3aGlsZSAobmV4dCkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV4dDsKIAotCQlpZiAoZXZlbnQgPT0gJnNpbmdsZWV2ZW50KSB7Ci0JCQljbGVhcl9iaXQoTFdfU0VfVVNFRCwgJmxpbmt3YXRjaF9mbGFncyk7Ci0JCX0gZWxzZSB7Ci0JCQlrZnJlZShldmVudCk7CisJCW5leHQgPSBkZXYtPmxpbmtfd2F0Y2hfbmV4dDsKKworCQlpZiAodXJnZW50X29ubHkgJiYgIWxpbmt3YXRjaF91cmdlbnRfZXZlbnQoZGV2KSkgeworCQkJbGlua3dhdGNoX2FkZF9ldmVudChkZXYpOworCQkJY29udGludWU7CiAJCX0KIAorCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHJlYWQgaXMgY29tcGxldGUgc2luY2UgaXQgY2FuIGJlCisJCSAqIHJld3JpdHRlbiBhcyBzb29uIGFzIHdlIGNsZWFyIHRoZSBiaXQgYmVsb3cuCisJCSAqLworCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwogCQkvKiBXZSBhcmUgYWJvdXQgdG8gaGFuZGxlIHRoaXMgZGV2aWNlLAogCQkgKiBzbyBuZXcgZXZlbnRzIGNhbiBiZSBhY2NlcHRlZAogCQkgKi8KQEAgLTEyNCw1OCArMTkxLDM5IEBACiAKIAkJZGV2X3B1dChkZXYpOwogCX0KKworCWlmIChsd2V2ZW50bGlzdCkKKwkJbGlua3dhdGNoX3NjaGVkdWxlX3dvcmsoMCk7Cit9CisKKworLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcnRubCBzZW1hcGhvcmUgaGVsZCAqLwordm9pZCBsaW5rd2F0Y2hfcnVuX3F1ZXVlKHZvaWQpCit7CisJX19saW5rd2F0Y2hfcnVuX3F1ZXVlKDApOwogfQogCiAKIHN0YXRpYyB2b2lkIGxpbmt3YXRjaF9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmR1bW15KQogewotCS8qIExpbWl0IHRoZSBudW1iZXIgb2YgbGlua3dhdGNoIGV2ZW50cyB0byBvbmUKLQkgKiBwZXIgc2Vjb25kIHNvIHRoYXQgYSBydW5hd2F5IGRyaXZlciBkb2VzIG5vdAotCSAqIGNhdXNlIGEgc3Rvcm0gb2YgbWVzc2FnZXMgb24gdGhlIG5ldGxpbmsKLQkgKiBzb2NrZXQKLQkgKi8KLQlsaW5rd2F0Y2hfbmV4dGV2ZW50ID0gamlmZmllcyArIEhaOwotCWNsZWFyX2JpdChMV19SVU5OSU5HLCAmbGlua3dhdGNoX2ZsYWdzKTsKLQogCXJ0bmxfbG9jaygpOwotCWxpbmt3YXRjaF9ydW5fcXVldWUoKTsKKwlfX2xpbmt3YXRjaF9ydW5fcXVldWUodGltZV9hZnRlcihsaW5rd2F0Y2hfbmV4dGV2ZW50LCBqaWZmaWVzKSk7CiAJcnRubF91bmxvY2soKTsKIH0KIAogCiB2b2lkIGxpbmt3YXRjaF9maXJlX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJaW50IHVyZ2VudCA9IGxpbmt3YXRjaF91cmdlbnRfZXZlbnQoZGV2KTsKKwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChfX0xJTktfU1RBVEVfTElOS1dBVENIX1BFTkRJTkcsICZkZXYtPnN0YXRlKSkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzdHJ1Y3QgbHdfZXZlbnQgKmV2ZW50OwotCi0JCWlmICh0ZXN0X2FuZF9zZXRfYml0KExXX1NFX1VTRUQsICZsaW5rd2F0Y2hfZmxhZ3MpKSB7Ci0JCQlldmVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsd19ldmVudCksIEdGUF9BVE9NSUMpOwotCi0JCQlpZiAodW5saWtlbHkoZXZlbnQgPT0gTlVMTCkpIHsKLQkJCQljbGVhcl9iaXQoX19MSU5LX1NUQVRFX0xJTktXQVRDSF9QRU5ESU5HLCAmZGV2LT5zdGF0ZSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9IGVsc2UgewotCQkJZXZlbnQgPSAmc2luZ2xlZXZlbnQ7Ci0JCX0KLQogCQlkZXZfaG9sZChkZXYpOwotCQlldmVudC0+ZGV2ID0gZGV2OwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZsd2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5saXN0LCAmbHdldmVudGxpc3QpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsd2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7CisJCWxpbmt3YXRjaF9hZGRfZXZlbnQoZGV2KTsKKwl9IGVsc2UgaWYgKCF1cmdlbnQpCisJCXJldHVybjsKIAotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTFdfUlVOTklORywgJmxpbmt3YXRjaF9mbGFncykpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBsaW5rd2F0Y2hfbmV4dGV2ZW50IC0gamlmZmllczsKLQotCQkJLyogSWYgd2Ugd3JhcCBhcm91bmQgd2UnbGwgZGVsYXkgaXQgYnkgYXQgbW9zdCBIWi4gKi8KLQkJCWlmIChkZWxheSA+IEhaKQotCQkJCWRlbGF5ID0gMDsKLQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbGlua3dhdGNoX3dvcmssIGRlbGF5KTsKLQkJfQotCX0KKwlsaW5rd2F0Y2hfc2NoZWR1bGVfd29yayh1cmdlbnQpOwogfQogCiBFWFBPUlRfU1lNQk9MKGxpbmt3YXRjaF9maXJlX2V2ZW50KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggYjIxMzA3Yi4uNWMxOWIwNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTQ1Niw5ICs0NTYsMTUgQEAKICNlbmRpZgogfTsKIAorLyogRGVsZXRlIHN5c2ZzIGVudHJpZXMgYnV0IGhvbGQga29iamVjdCByZWZlcmVuY2UgdW50aWwgYWZ0ZXIgYWxsCisgKiBuZXRkZXYgcmVmZXJlbmNlcyBhcmUgZ29uZS4KKyAqLwogdm9pZCBuZXRkZXZfdW5yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgbmV0X2RldmljZSAqIG5ldCkKIHsKLQlkZXZpY2VfZGVsKCYobmV0LT5kZXYpKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmKG5ldC0+ZGV2KTsKKworCWtvYmplY3RfZ2V0KCZkZXYtPmtvYmopOworCWRldmljZV9kZWwoZGV2KTsKIH0KIAogLyogQ3JlYXRlIHN5c2ZzIGVudHJpZXMgZm9yIG5ldHdvcmsgZGV2aWNlLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jCmluZGV4IGIzMTY0MzUuLjc1OGRhZmUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYworKysgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTksNyArOSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgIFJlZCBIYXQsIEluYy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCBiOTJhMzIyLi45Y2QzYTFjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMTE3LDcgKzExNyw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDhjOTcxYTIuLjI3ZGE5Y2QgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC00MzcsNyArNDM3LDcgQEAKIAlhLT50eF9jb21wcmVzc2VkID0gYi0+dHhfY29tcHJlc3NlZDsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGlmX25sbXNnX3NpemUoaW50IGl3YnVmbGVuKQorc3RhdGljIGlubGluZSBzaXplX3QgaWZfbmxtc2dfc2l6ZSh2b2lkKQogewogCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpCiAJICAgICAgICsgbmxhX3RvdGFsX3NpemUoSUZOQU1TSVopIC8qIElGTEFfSUZOQU1FICovCkBAIC00NTIsMTMgKzQ1MiwxMiBAQAogCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIElGTEFfTElOSyAqLwogCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIElGTEFfTUFTVEVSICovCiAJICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogSUZMQV9PUEVSU1RBVEUgKi8KLQkgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBJRkxBX0xJTktNT0RFICovCi0JICAgICAgICsgbmxhX3RvdGFsX3NpemUoaXdidWZsZW4pOworCSAgICAgICArIG5sYV90b3RhbF9zaXplKDEpOyAvKiBJRkxBX0xJTktNT0RFICovCiB9CiAKIHN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIHZvaWQgKml3YnVmLCBpbnQgaXdidWZsZW4sIGludCB0eXBlLCB1MzIgcGlkLAotCQkJICAgIHUzMiBzZXEsIHUzMiBjaGFuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKKwkJCSAgICBpbnQgdHlwZSwgdTMyIHBpZCwgdTMyIHNlcSwgdTMyIGNoYW5nZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGlmaW5mb21zZyAqaWZtOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwpAQCAtNTIzLDkgKzUyMiw2IEBACiAJCX0KIAl9CiAKLQlpZiAoaXdidWYpCi0JCU5MQV9QVVQoc2tiLCBJRkxBX1dJUkVMRVNTLCBpd2J1ZmxlbiwgaXdidWYpOwotCiAJcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CiAKIG5sYV9wdXRfZmFpbHVyZToKQEAgLTU0Myw3ICs1MzksNyBAQAogCWZvcl9lYWNoX25ldGRldihkZXYpIHsKIAkJaWYgKGlkeCA8IHNfaWR4KQogCQkJZ290byBjb250OwotCQlpZiAocnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgTlVMTCwgMCwgUlRNX05FV0xJTkssCisJCWlmIChydG5sX2ZpbGxfaWZpbmZvKHNrYiwgZGV2LCBSVE1fTkVXTElOSywKIAkJCQkgICAgIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAogCQkJCSAgICAgY2ItPm5saC0+bmxtc2dfc2VxLCAwLCBOTE1fRl9NVUxUSSkgPD0gMCkKIAkJCWJyZWFrOwpAQCAtNjg5LDggKzY4NSwxNSBAQAogCX0KIAogCi0JaWYgKGlmbS0+aWZpX2ZsYWdzKQotCQlkZXZfY2hhbmdlX2ZsYWdzKGRldiwgaWZtLT5pZmlfZmxhZ3MpOworCWlmIChpZm0tPmlmaV9mbGFncyB8fCBpZm0tPmlmaV9jaGFuZ2UpIHsKKwkJdW5zaWduZWQgaW50IGZsYWdzID0gaWZtLT5pZmlfZmxhZ3M7CisKKwkJLyogYnVnd2FyZHMgY29tcGF0aWJpbGl0eTogaWZpX2NoYW5nZSA9PSAwIGlzIHRyZWF0ZWQgYXMgfjAgKi8KKwkJaWYgKGlmbS0+aWZpX2NoYW5nZSkKKwkJCWZsYWdzID0gKGZsYWdzICYgaWZtLT5pZmlfY2hhbmdlKSB8CisJCQkJKGRldi0+ZmxhZ3MgJiB+aWZtLT5pZmlfY2hhbmdlKTsKKwkJZGV2X2NoYW5nZV9mbGFncyhkZXYsIGZsYWdzKTsKKwl9CiAKIAlpZiAodGJbSUZMQV9UWFFMRU5dKQogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IG5sYV9nZXRfdTMyKHRiW0lGTEFfVFhRTEVOXSk7CkBAIC03MzAsOCArNzMzLDYgQEAKIAlzdHJ1Y3QgbmxhdHRyICp0YltJRkxBX01BWCsxXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKLQljaGFyICppd19idWYgPSBOVUxMLCAqaXcgPSBOVUxMOwotCWludCBpd19idWZfbGVuID0gMDsKIAlpbnQgZXJyOwogCiAJZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkxBX01BWCwgaWZsYV9wb2xpY3kpOwpAQCAtNzQ2LDE0ICs3NDcsMTQgQEAKIAl9IGVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQluc2tiID0gbmxtc2dfbmV3KGlmX25sbXNnX3NpemUoaXdfYnVmX2xlbiksIEdGUF9LRVJORUwpOworCW5za2IgPSBubG1zZ19uZXcoaWZfbmxtc2dfc2l6ZSgpLCBHRlBfS0VSTkVMKTsKIAlpZiAobnNrYiA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9CVUZTOwogCQlnb3RvIGVycm91dDsKIAl9CiAKLQllcnIgPSBydG5sX2ZpbGxfaWZpbmZvKG5za2IsIGRldiwgaXcsIGl3X2J1Zl9sZW4sIFJUTV9ORVdMSU5LLAotCQkJICAgICAgIE5FVExJTktfQ0Ioc2tiKS5waWQsIG5saC0+bmxtc2dfc2VxLCAwLCAwKTsKKwllcnIgPSBydG5sX2ZpbGxfaWZpbmZvKG5za2IsIGRldiwgUlRNX05FV0xJTkssIE5FVExJTktfQ0Ioc2tiKS5waWQsCisJCQkgICAgICAgbmxoLT5ubG1zZ19zZXEsIDAsIDApOwogCWlmIChlcnIgPCAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBpZl9ubG1zZ19zaXplICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CkBAIC03NjIsNyArNzYzLDYgQEAKIAl9CiAJZXJyID0gcnRubF91bmljYXN0KG5za2IsIE5FVExJTktfQ0Ioc2tiKS5waWQpOwogZXJyb3V0OgotCWtmcmVlKGl3X2J1Zik7CiAJZGV2X3B1dChkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTc5NywxMSArNzk3LDExIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZXJyID0gLUVOT0JVRlM7CiAKLQlza2IgPSBubG1zZ19uZXcoaWZfbmxtc2dfc2l6ZSgwKSwgR0ZQX0tFUk5FTCk7CisJc2tiID0gbmxtc2dfbmV3KGlmX25sbXNnX3NpemUoKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIGVycm91dDsKIAotCWVyciA9IHJ0bmxfZmlsbF9pZmluZm8oc2tiLCBkZXYsIE5VTEwsIDAsIHR5cGUsIDAsIDAsIGNoYW5nZSwgMCk7CisJZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgdHlwZSwgMCwgMCwgY2hhbmdlLCAwKTsKIAlpZiAoZXJyIDwgMCkgewogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gaWZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDE0MjI1NzMuLjdjNmEzNGUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC02NDQsMTEgKzY0NCwxMCBAQAogCiAJLyogQ29weSBvbmx5IHJlYWwgZGF0YS4uLiBhbmQsIGFsYXMsIGhlYWRlci4gVGhpcyBzaG91bGQgYmUKIAkgKiBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyB3aGVuIGhlYWRlciBpcyB2b2lkLiAqLwotCW1lbWNweShkYXRhICsgbmhlYWQsIHNrYi0+aGVhZCwKICNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVQKLQkJc2tiLT50YWlsKTsKKwltZW1jcHkoZGF0YSArIG5oZWFkLCBza2ItPmhlYWQsIHNrYi0+dGFpbCk7CiAjZWxzZQotCQlza2ItPnRhaWwgLSBza2ItPmhlYWQpOworCW1lbWNweShkYXRhICsgbmhlYWQsIHNrYi0+aGVhZCwgc2tiLT50YWlsIC0gc2tiLT5oZWFkKTsKICNlbmRpZgogCW1lbWNweShkYXRhICsgc2l6ZSwgc2tiX2VuZF9wb2ludGVyKHNrYiksCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggMjIxODNjMi4uYzE0Y2UwMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMjA2LDcgKzIwNiwxOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoY29weV9mcm9tX3VzZXIoJnR2LCBvcHR2YWwsIHNpemVvZih0dikpKQogCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAodHYudHZfdXNlYyA8IDAgfHwgdHYudHZfdXNlYyA+PSBVU0VDX1BFUl9TRUMpCisJCXJldHVybiAtRURPTTsKIAorCWlmICh0di50dl9zZWMgPCAwKSB7CisJCXN0YXRpYyBpbnQgd2FybmVkID0gMDsKKwkJKnRpbWVvX3AgPSAwOworCQlpZiAod2FybmVkIDwgMTAgJiYgbmV0X3JhdGVsaW1pdCgpKQorCQkJd2FybmVkKys7CisJCQlwcmludGsoS0VSTl9JTkZPICJzb2NrX3NldF90aW1lb3V0OiBgJXMnIChwaWQgJWQpICIKKwkJCSAgICAgICAidHJpZXMgdG8gc2V0IG5lZ2F0aXZlIHRpbWVvdXRcbiIsCisJCQkgICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisJCXJldHVybiAwOworCX0KIAkqdGltZW9fcCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwogCWlmICh0di50dl9zZWMgPT0gMCAmJiB0di50dl91c2VjID09IDApCiAJCXJldHVybiAwOwpAQCAtOTg2LDcgKzk5OCw3IEBACiAJX19za19kc3Rfc2V0KHNrLCBkc3QpOwogCXNrLT5za19yb3V0ZV9jYXBzID0gZHN0LT5kZXYtPmZlYXR1cmVzOwogCWlmIChzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfR1NPKQotCQlzay0+c2tfcm91dGVfY2FwcyB8PSBORVRJRl9GX0dTT19NQVNLOworCQlzay0+c2tfcm91dGVfY2FwcyB8PSBORVRJRl9GX0dTT19TT0ZUV0FSRTsKIAlpZiAoc2tfY2FuX2dzbyhzaykpIHsKIAkJaWYgKGRzdC0+aGVhZGVyX2xlbikKIAkJCXNrLT5za19yb3V0ZV9jYXBzICY9IH5ORVRJRl9GX0dTT19NQVNLOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwppbmRleCBiMjk3MTIwLi42ZDVlYTk3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYworKysgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwpAQCAtMjQsNiArMjQsOCBAQAogI2lmZGVmIENPTkZJR19YRlJNCiBleHRlcm4gdTMyIHN5c2N0bF94ZnJtX2FldmVudF9ldGltZTsKIGV4dGVybiB1MzIgc3lzY3RsX3hmcm1fYWV2ZW50X3JzZXF0aDsKK2V4dGVybiBpbnQgc3lzY3RsX3hmcm1fbGFydmFsX2Ryb3A7CitleHRlcm4gdTMyIHN5c2N0bF94ZnJtX2FjcV9leHBpcmVzOwogI2VuZGlmCiAKIGN0bF90YWJsZSBjb3JlX3RhYmxlW10gPSB7CkBAIC0xMTgsNiArMTIwLDIyIEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYwogCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInhmcm1fbGFydmFsX2Ryb3AiLAorCQkuZGF0YQkJPSAmc3lzY3RsX3hmcm1fbGFydmFsX2Ryb3AsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYworCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInhmcm1fYWNxX2V4cGlyZXMiLAorCQkuZGF0YQkJPSAmc3lzY3RsX3hmcm1fYWNxX2V4cGlyZXMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYworCX0sCiAjZW5kaWYgLyogQ09ORklHX1hGUk0gKi8KICNlbmRpZiAvKiBDT05GSUdfTkVUICovCiAJewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvdXRpbHMuYyBiL25ldC9jb3JlL3V0aWxzLmMKaW5kZXggYWRlY2ZkMi4uMjAzMGJiOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvdXRpbHMuYworKysgYi9uZXQvY29yZS91dGlscy5jCkBAIC0xMzksMTYgKzEzOSwxNiBAQAogCXdoaWxlKDEpIHsKIAkJaW50IGM7CiAJCWMgPSB4ZGlnaXQyYmluKHNyY2xlbiA+IDAgPyAqcyA6ICdcMCcsIGRlbGltKTsKLQkJaWYgKCEoYyAmIChJTjZQVE9OX0RJR0lUIHwgSU42UFRPTl9ET1QgfCBJTjZQVE9OX0RFTElNKSkpIHsKKwkJaWYgKCEoYyAmIChJTjZQVE9OX0RJR0lUIHwgSU42UFRPTl9ET1QgfCBJTjZQVE9OX0RFTElNIHwgSU42UFRPTl9DT0xPTl9NQVNLKSkpIHsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWlmIChjICYgKElONlBUT05fRE9UIHwgSU42UFRPTl9ERUxJTSkpIHsKKwkJaWYgKGMgJiAoSU42UFRPTl9ET1QgfCBJTjZQVE9OX0RFTElNIHwgSU42UFRPTl9DT0xPTl9NQVNLKSkgewogCQkJaWYgKHcgPT0gMCkKIAkJCQlnb3RvIG91dDsKIAkJCSpkKysgPSB3ICYgMHhmZjsKIAkJCXcgPSAwOwogCQkJaSsrOwotCQkJaWYgKGMgJiBJTjZQVE9OX0RFTElNKSB7CisJCQlpZiAoYyAmIChJTjZQVE9OX0RFTElNIHwgSU42UFRPTl9DT0xPTl9NQVNLKSkgewogCQkJCWlmIChpICE9IDQpCiAJCQkJCWdvdG8gb3V0OwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvS2NvbmZpZyBiL25ldC9kY2NwL0tjb25maWcKaW5kZXggYjhhNjhkZC4uMDU0OWU0NyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvS2NvbmZpZworKysgYi9uZXQvZGNjcC9LY29uZmlnCkBAIC0xLDggKzEsNiBAQAotbWVudSAiRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gSU5FVCAmJiBFWFBFUklNRU5UQUwKLQotY29uZmlnIElQX0RDQ1AKK21lbnVjb25maWcgSVBfRENDUAogCXRyaXN0YXRlICJUaGUgRENDUCBQcm90b2NvbCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIElORVQgJiYgRVhQRVJJTUVOVEFMCiAJLS0taGVscC0tLQogCSAgRGF0YWdyYW0gQ29uZ2VzdGlvbiBDb250cm9sIFByb3RvY29sIChSRkMgNDM0MCkKIApAQCAtMTksMTkgKzE3LDIwIEBACiAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTi4KIAoraWYgSVBfRENDUAorCiBjb25maWcgSU5FVF9EQ0NQX0RJQUcKLQlkZXBlbmRzIG9uIElQX0RDQ1AgJiYgSU5FVF9ESUFHCisJZGVwZW5kcyBvbiBJTkVUX0RJQUcKIAlkZWZfdHJpc3RhdGUgeSBpZiAoSVBfRENDUCA9IHkgJiYgSU5FVF9ESUFHID0geSkKIAlkZWZfdHJpc3RhdGUgbQogCiBjb25maWcgSVBfRENDUF9BQ0tWRUMKLQlkZXBlbmRzIG9uIElQX0RDQ1AKIAlib29sCiAKIHNvdXJjZSAibmV0L2RjY3AvY2NpZHMvS2NvbmZpZyIKIAogbWVudSAiRENDUCBLZXJuZWwgSGFja2luZyIKLQlkZXBlbmRzIG9uIElQX0RDQ1AgJiYgREVCVUdfS0VSTkVMPXkKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTD15CiAKIGNvbmZpZyBJUF9EQ0NQX0RFQlVHCiAJYm9vbCAiRENDUCBkZWJ1ZyBtZXNzYWdlcyIKQEAgLTYxLDQgKzYwLDQgQEAKIAogZW5kbWVudQogCi1lbmRtZW51CitlbmRpZiAjIElQX0REQ1AKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCmluZGV4IGQ3ZDljZTcuLmVjN2ZhNGQgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKKysrIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYwpAQCAtNDE5LDcgKzQxOSw2IEBACiAKIHN0YXRpYyB2b2lkIGNjaWQzX2hjX3R4X3BhY2tldF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQljb25zdCBzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCXN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4ID0gY2NpZDNfaGNfdHhfc2soc2spOwogCXN0cnVjdCBjY2lkM19vcHRpb25zX3JlY2VpdmVkICpvcHRfcmVjdjsKIAlzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICpwYWNrZXQ7CkBAIC00OTEsNyArNDkwLDcgQEAKIAkJCWNjaWQzX3ByX2RlYnVnKCIlcyglcCksIHM9JXUsIE1TUz0ldSwgIgogCQkJCSAgICAgICAiUl9zYW1wbGU9JXV1cywgWD0ldVxuIiwgZGNjcF9yb2xlKHNrKSwKIAkJCQkgICAgICAgc2ssIGhjdHgtPmNjaWQzaGN0eF9zLAotCQkJCSAgICAgICBkcC0+ZGNjcHNfbXNzX2NhY2hlLCByX3NhbXBsZSwKKwkJCQkgICAgICAgZGNjcF9zayhzayktPmRjY3BzX21zc19jYWNoZSwgcl9zYW1wbGUsCiAJCQkJICAgICAgICh1bnNpZ25lZCkoaGN0eC0+Y2NpZDNoY3R4X3ggPj4gNikpOwogCiAJCQljY2lkM19oY190eF9zZXRfc3RhdGUoc2ssIFRGUkNfU1NUQVRFX0ZCQUNLKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCA2NGVhYzI1Li4zMTczN2NkIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC0xMDQzLDkgKzEwNDMsMTMgQEAKIAlpZiAoZmluYWxfcCkKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIGZpbmFsX3ApOwogCi0JZXJyID0geGZybV9sb29rdXAoJmRzdCwgJmZsLCBzaywgMSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZmFpbHVyZTsKKwllcnIgPSBfX3hmcm1fbG9va3VwKCZkc3QsICZmbCwgc2ssIDEpOworCWlmIChlcnIgPCAwKSB7CisJCWlmIChlcnIgPT0gLUVSRU1PVEUpCisJCQllcnIgPSBpcDZfZHN0X2JsYWNraG9sZShzaywgJmRzdCwgJmZsKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGZhaWx1cmU7CisJfQogCiAJaWYgKHNhZGRyID09IE5VTEwpIHsKIAkJc2FkZHIgPSAmZmwuZmw2X3NyYzsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb2JlLmMgYi9uZXQvZGNjcC9wcm9iZS5jCmluZGV4IDFmNWUzYmEuLjQzYTNhZGIgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb2JlLmMKKysrIGIvbmV0L2RjY3AvcHJvYmUuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJaW50IGVycm9yID0gMCwgY250ID0gMDsKIAl1bnNpZ25lZCBjaGFyICp0YnVmOwogCi0JaWYgKCFidWYgfHwgbGVuIDwgMCkKKwlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobGVuID09IDApCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwppbmRleCA5ZmJlODdjLi5iZmE5MTBiIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKQEAgLTE4MzksNyArMTgzOSw3IEBACiB9CiAKIC8qCi0gKiBUaGUgREVDbmV0IHNwZWMgcmVxdWlyZXMgdGhlIHRoZSAicm91dGluZyBsYXllciIgYWNjZXB0cyBwYWNrZXRzIHdoaWNoCisgKiBUaGUgREVDbmV0IHNwZWMgcmVxdWlyZXMgdGhhdCB0aGUgInJvdXRpbmcgbGF5ZXIiIGFjY2VwdHMgcGFja2V0cyB3aGljaAogICogYXJlIGF0IGxlYXN0IDIzMCBieXRlcyBpbiBzaXplLiBUaGlzIGV4Y2x1ZGVzIGFueSBoZWFkZXJzIHdoaWNoIHRoZSBOU1AKICAqIGxheWVyIG1pZ2h0IGFkZCwgc28gd2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlJ2xsIGJlIHVzaW5nIHRoZSBtYXhpbWFsCiAgKiBsZW5ndGggaGVhZGVyIG9uIGRhdGEgcGFja2V0cy4gVGhlIHZhcmlhdGlvbiBpbiBsZW5ndGggaXMgZHVlIHRvIHRoZQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfZ2VvLmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9nZW8uYwppbmRleCAzMDVhMDlkLi45NjBhZDEzIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9nZW8uYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9nZW8uYwpAQCAtOTQsNiArOTQsMjEgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3UzMiBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSwgdTggY2hhbm5lbCkKK3sKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKiBjaDsKKworCS8qIERyaXZlciBuZWVkcyB0byBpbml0aWFsaXplIHRoZSBnZW9ncmFwaHkgbWFwIGJlZm9yZSB1c2luZworCSAqIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgKi8KKwlpZiAoaWVlZS0+Z2VvLmJnX2NoYW5uZWxzID09IDAgJiYgaWVlZS0+Z2VvLmFfY2hhbm5lbHMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwljaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChpZWVlLCBjaGFubmVsKTsKKwlpZiAoIWNoLT5jaGFubmVsKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gY2gtPmZyZXE7Cit9CisKIHU4IGllZWU4MDIxMV9mcmVxX3RvX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlLCB1MzIgZnJlcSkKIHsKIAlpbnQgaTsKQEAgLTE3NCw2ICsxODksNyBAQAogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2NoYW5uZWxfZmxhZ3MpOwogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbCk7CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9mcmVxX3RvX2NoYW5uZWwpOworRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxKTsKIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2NoYW5uZWxfdG9faW5kZXgpOwogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2V0X2dlbyk7CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9nZXRfZ2VvKTsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggN2VjNjYxMC4uMTdhZDI3OCAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKSArIHNpemVvZl9wcml2KTsKIAlpZiAoIWRldikgewotCQlJRUVFODAyMTFfRVJST1IoIlVuYWJsZSB0byBuZXR3b3JrIGRldmljZS5cbiIpOworCQlJRUVFODAyMTFfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZS5cbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAJaWVlZSA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCBjZWU1ZTEzLi41MjNhMTM3IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTg5LDE1ICs4OSwxNyBAQAogCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7CiAJfQogCi0JLyogQWRkIGZyZXF1ZW5jeS9jaGFubmVsICovCisJLyogQWRkIGNoYW5uZWwgYW5kIGZyZXF1ZW5jeSAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLS8qCWl3ZS51LmZyZXEubSA9IGllZWU4MDIxMV9mcmVxdWVuY3kobmV0d29yay0+Y2hhbm5lbCwgbmV0d29yay0+bW9kZSk7Ci0JaXdlLnUuZnJlcS5lID0gMzsgKi8KIAlpd2UudS5mcmVxLm0gPSBuZXR3b3JrLT5jaGFubmVsOwogCWl3ZS51LmZyZXEuZSA9IDA7CiAJaXdlLnUuZnJlcS5pID0gMDsKIAlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CiAKKwlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxKGllZWUsIG5ldHdvcmstPmNoYW5uZWwpOworCWl3ZS51LmZyZXEuZSA9IDY7CisJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCiAJLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwogCWlmIChuZXR3b3JrLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCmluZGV4IGU5Y2RjNjYuLmMzMDg3NTYgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCkBAIC0zMyw3ICszMywxMCBAQAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc29mdG1hYzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JZGV2ID0gYWxsb2NfaWVlZTgwMjExKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UpICsgc2l6ZW9mX3ByaXYpOworCWRldiA9IGFsbG9jX2llZWU4MDIxMShzaXplb2YoKnNvZnRtYWMpICsgc2l6ZW9mX3ByaXYpOworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKwogCXNvZnRtYWMgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXNvZnRtYWMtPmRldiA9IGRldjsKIAlzb2Z0bWFjLT5pZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L0tjb25maWcgYi9uZXQvaXB2NC9LY29uZmlnCmluZGV4IGU2MmFlZTAuLjAxMGZiYjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L0tjb25maWcKKysrIGIvbmV0L2lwdjQvS2NvbmZpZwpAQCAtNDMsMTEgKzQzLDExIEBACiAJICBhc3ltbWV0cmljIHJvdXRpbmcgKHBhY2tldHMgZnJvbSB5b3UgdG8gYSBob3N0IHRha2UgYSBkaWZmZXJlbnQgcGF0aAogCSAgdGhhbiBwYWNrZXRzIGZyb20gdGhhdCBob3N0IHRvIHlvdSkgb3IgaWYgeW91IG9wZXJhdGUgYSBub24tcm91dGluZwogCSAgaG9zdCB3aGljaCBoYXMgc2V2ZXJhbCBJUCBhZGRyZXNzZXMgb24gZGlmZmVyZW50IGludGVyZmFjZXMuIFRvIHR1cm4KLQkgIHJwX2ZpbHRlciBvZmYgdXNlOgorCSAgcnBfZmlsdGVyIG9uIHVzZToKIAotCSAgZWNobyAwID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvPGRldmljZT4vcnBfZmlsdGVyCisJICBlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi88ZGV2aWNlPi9ycF9maWx0ZXIKIAkgIG9yCi0JICBlY2hvIDAgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9hbGwvcnBfZmlsdGVyCisJICBlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9hbGwvcnBfZmlsdGVyCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4gaGVyZS4KIApAQCAtMTMwLDcgKzEzMCw3IEBACiAJdHJpc3RhdGUgIk1VTFRJUEFUSDogcm91bmQgcm9iaW4gYWxnb3JpdGhtIgogCWRlcGVuZHMgb24gSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRAogCWhlbHAKLQkgIE11bGl0cGF0aCByb3V0ZXMgYXJlIGNob3NlbiBhY2NvcmRpbmcgdG8gUm91bmQgUm9iaW4KKwkgIE11bHRpcGF0aCByb3V0ZXMgYXJlIGNob3NlbiBhY2NvcmRpbmcgdG8gUm91bmQgUm9iaW4KIAogY29uZmlnIElQX1JPVVRFX01VTFRJUEFUSF9SQU5ET00KIAl0cmlzdGF0ZSAiTVVMVElQQVRIOiByYW5kb20gYWxnb3JpdGhtIgpAQCAtNTc3LDYgKzU3Nyw3IEBACiBjb25maWcgVENQX0NPTkdfWUVBSAogCXRyaXN0YXRlICJZZUFIIFRDUCIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBUQ1BfQ09OR19WRUdBUwogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAlZZUFILVRDUCBpcyBhIHNlbmRlci1zaWRlIGhpZ2gtc3BlZWQgZW5hYmxlZCBUQ1AgY29uZ2VzdGlvbiBjb250cm9sCkBAIC02NTEsNyArNjUyLDcgQEAKIAlzZWxlY3QgQ1JZUFRPCiAJc2VsZWN0IENSWVBUT19NRDUKIAktLS1oZWxwLS0tCi0JICBSRkMyMzg1IHNwZWNpZmljZXMgYSBtZXRob2Qgb2YgZ2l2aW5nIE1ENSBwcm90ZWN0aW9uIHRvIFRDUCBzZXNzaW9ucy4KKwkgIFJGQzIzODUgc3BlY2lmaWVzIGEgbWV0aG9kIG9mIGdpdmluZyBNRDUgcHJvdGVjdGlvbiB0byBUQ1Agc2Vzc2lvbnMuCiAJICBJdHMgbWFpbiAob25seT8pIHVzZSBpcyB0byBwcm90ZWN0IEJHUCBzZXNzaW9ucyBiZXR3ZWVuIGNvcmUgcm91dGVycwogCSAgb24gdGhlIEludGVybmV0LgogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggMTZhYWU4ZS4uMDQxZmJhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCisrKyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtOTIsNyArOTIsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWdtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2NpcHNvX2lwdjQuYyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwppbmRleCBlMWYxODQ4Li44NmEyYjUyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMKKysrIGIvbmV0L2lwdjQvY2lwc29faXB2NC5jCkBAIC02MjksNyArNjI5LDcgQEAKICAqIEBkb21haW46IHRoZSBkb21haW4gdG8gYWRkCiAgKgogICogRGVzY3JpcHRpb246Ci0gKiBBZGRzIHRoZSBAZG9tYWluIHRvIHRoZSB0aGUgRE9JIHNwZWNpZmllZCBieSBAZG9pX2RlZiwgdGhpcyBmdW5jdGlvbgorICogQWRkcyB0aGUgQGRvbWFpbiB0byB0aGUgRE9JIHNwZWNpZmllZCBieSBAZG9pX2RlZiwgdGhpcyBmdW5jdGlvbgogICogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IGV4dGVybmFsIGZ1bmN0aW9ucyAoaS5lLiBOZXRMYWJlbCkuICBUaGlzIGZ1bmN0aW9uCiAgKiBkb2VzIGFsbG9jYXRlIG1lbW9yeS4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kYXRhZ3JhbS5jIGIvbmV0L2lwdjQvZGF0YWdyYW0uYwppbmRleCBkZDAyYTQ1Li4wMzAxZGQ0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kYXRhZ3JhbS5jCisrKyBiL25ldC9pcHY0L2RhdGFncmFtLmMKQEAgLTUwLDggKzUwLDEyIEBACiAJCQkgICAgICAgUlRfQ09OTl9GTEFHUyhzayksIG9pZiwKIAkJCSAgICAgICBzay0+c2tfcHJvdG9jb2wsCiAJCQkgICAgICAgaW5ldC0+c3BvcnQsIHVzaW4tPnNpbl9wb3J0LCBzaywgMSk7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVORVRVTlJFQUNIKQorCQkJSVBfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKIAkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoKHJ0LT5ydF9mbGFncyAmIFJUQ0ZfQlJPQURDQVNUKSAmJiAhc29ja19mbGFnKHNrLCBTT0NLX0JST0FEQ0FTVCkpIHsKIAkJaXBfcnRfcHV0KHJ0KTsKIAkJcmV0dXJuIC1FQUNDRVM7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IDgzN2YyOTUuLjlhZDFmNjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC0yNTAsOCArMjUwLDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotI2lmbmRlZiBDT05GSUdfSVBfTk9TSU9DUlQKLQogc3RhdGljIGlubGluZSBfX2JlMzIgc2tfZXh0cmFjdF9hZGRyKHN0cnVjdCBzb2NrYWRkciAqYWRkcikKIHsKIAlyZXR1cm4gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkciktPnNpbl9hZGRyLnNfYWRkcjsKQEAgLTQ0MywxNSArNDQxLDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotI2Vsc2UKLQotaW50IGlwX3J0X2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotI2VuZGlmCi0KIHN0cnVjdCBubGFfcG9saWN5IHJ0bV9pcHY0X3BvbGljeVtSVEFfTUFYKzFdIF9fcmVhZF9tb3N0bHkgPSB7CiAJW1JUQV9EU1RdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW1JUQV9TUkNdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfaGFzaC5jIGIvbmV0L2lwdjQvZmliX2hhc2guYwppbmRleCA5Y2ZlY2YxLi4wN2U4NDNhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfaGFzaC5jCisrKyBiL25ldC9pcHY0L2ZpYl9oYXNoLmMKQEAgLTQ1Niw2ICs0NTYsOCBAQAogCQkJZmliX3JlbGVhc2VfaW5mbyhmaV9kcm9wKTsKIAkJCWlmIChzdGF0ZSAmIEZBX1NfQUNDRVNTRUQpCiAJCQkJcnRfY2FjaGVfZmx1c2goLTEpOworCQkJcnRtc2dfZmliKFJUTV9ORVdST1VURSwga2V5LCBmYSwgY2ZnLT5mY19kc3RfbGVuLCB0Yi0+dGJfaWQsCisJCQkJICAmY2ZnLT5mY19ubGluZm8sIE5MTV9GX1JFUExBQ0UpOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtNTIzLDcgKzUyNSw3IEBACiAJcnRfY2FjaGVfZmx1c2goLTEpOwogCiAJcnRtc2dfZmliKFJUTV9ORVdST1VURSwga2V5LCBuZXdfZmEsIGNmZy0+ZmNfZHN0X2xlbiwgdGItPnRiX2lkLAotCQkgICZjZmctPmZjX25saW5mbyk7CisJCSAgJmNmZy0+ZmNfbmxpbmZvLCAwKTsKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWVfbmV3X2ZhOgpAQCAtNTg5LDcgKzU5MSw3IEBACiAKIAkJZmEgPSBmYV90b19kZWxldGU7CiAJCXJ0bXNnX2ZpYihSVE1fREVMUk9VVEUsIGtleSwgZmEsIGNmZy0+ZmNfZHN0X2xlbiwKLQkJCSAgdGItPnRiX2lkLCAmY2ZnLT5mY19ubGluZm8pOworCQkJICB0Yi0+dGJfaWQsICZjZmctPmZjX25saW5mbywgMCk7CiAKIAkJa2lsbF9mbiA9IDA7CiAJCXdyaXRlX2xvY2tfYmgoJmZpYl9oYXNoX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2xvb2t1cC5oIGIvbmV0L2lwdjQvZmliX2xvb2t1cC5oCmluZGV4IDBlOGI3MGIuLmVlZjllZWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9sb29rdXAuaAorKysgYi9uZXQvaXB2NC9maWJfbG9va3VwLmgKQEAgLTMwLDcgKzMwLDggQEAKIAkJCSBpbnQgZHN0X2xlbiwgdTggdG9zLCBzdHJ1Y3QgZmliX2luZm8gKmZpLAogCQkJIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBydG1zZ19maWIoaW50IGV2ZW50LCBfX2JlMzIga2V5LCBzdHJ1Y3QgZmliX2FsaWFzICpmYSwKLQkJICAgICAgaW50IGRzdF9sZW4sIHUzMiB0Yl9pZCwgc3RydWN0IG5sX2luZm8gKmluZm8pOworCQkgICAgICBpbnQgZHN0X2xlbiwgdTMyIHRiX2lkLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKKwkJICAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncyk7CiBleHRlcm4gc3RydWN0IGZpYl9hbGlhcyAqZmliX2ZpbmRfYWxpYXMoc3RydWN0IGxpc3RfaGVhZCAqZmFoLAogCQkJCQl1OCB0b3MsIHUzMiBwcmlvKTsKIGV4dGVybiBpbnQgZmliX2RldGVjdF9kZWF0aChzdHJ1Y3QgZmliX2luZm8gKmZpLCBpbnQgb3JkZXIsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggNDA2ZWE3MC4uYmI5NDU1MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtMzAxLDcgKzMwMSw4IEBACiB9CiAKIHZvaWQgcnRtc2dfZmliKGludCBldmVudCwgX19iZTMyIGtleSwgc3RydWN0IGZpYl9hbGlhcyAqZmEsCi0JICAgICAgIGludCBkc3RfbGVuLCB1MzIgdGJfaWQsIHN0cnVjdCBubF9pbmZvICppbmZvKQorCSAgICAgICBpbnQgZHN0X2xlbiwgdTMyIHRiX2lkLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKKwkgICAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUzMiBzZXEgPSBpbmZvLT5ubGggPyBpbmZvLT5ubGgtPm5sbXNnX3NlcSA6IDA7CkBAIC0zMTMsNyArMzE0LDcgQEAKIAogCWVyciA9IGZpYl9kdW1wX2luZm8oc2tiLCBpbmZvLT5waWQsIHNlcSwgZXZlbnQsIHRiX2lkLAogCQkJICAgIGZhLT5mYV90eXBlLCBmYS0+ZmFfc2NvcGUsIGtleSwgZHN0X2xlbiwKLQkJCSAgICBmYS0+ZmFfdG9zLCBmYS0+ZmFfaW5mbywgMCk7CisJCQkgICAgZmEtPmZhX3RvcywgZmEtPmZhX2luZm8sIG5sbV9mbGFncyk7CiAJaWYgKGVyciA8IDApIHsKIAkJLyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGZpYl9ubG1zZ19zaXplKCkgKi8KIAkJV0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl90cmllLmMgYi9uZXQvaXB2NC9maWJfdHJpZS5jCmluZGV4IDliZTdkYTcuLjMwZTMzMmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl90cmllLmMKKysrIGIvbmV0L2lwdjQvZmliX3RyaWUuYwpAQCAtMTIyNiw2ICsxMjI2LDggQEAKIAkJCWZpYl9yZWxlYXNlX2luZm8oZmlfZHJvcCk7CiAJCQlpZiAoc3RhdGUgJiBGQV9TX0FDQ0VTU0VEKQogCQkJCXJ0X2NhY2hlX2ZsdXNoKC0xKTsKKwkJCXJ0bXNnX2ZpYihSVE1fTkVXUk9VVEUsIGh0b25sKGtleSksIG5ld19mYSwgcGxlbiwKKwkJCQl0Yi0+dGJfaWQsICZjZmctPmZjX25saW5mbywgTkxNX0ZfUkVQTEFDRSk7CiAKIAkJCWdvdG8gc3VjY2VlZGVkOwogCQl9CkBAIC0xMjc4LDcgKzEyODAsNyBAQAogCiAJcnRfY2FjaGVfZmx1c2goLTEpOwogCXJ0bXNnX2ZpYihSVE1fTkVXUk9VVEUsIGh0b25sKGtleSksIG5ld19mYSwgcGxlbiwgdGItPnRiX2lkLAotCQkgICZjZmctPmZjX25saW5mbyk7CisJCSAgJmNmZy0+ZmNfbmxpbmZvLCAwKTsKIHN1Y2NlZWRlZDoKIAlyZXR1cm4gMDsKIApAQCAtMTYyNCw3ICsxNjI2LDcgQEAKIAogCWZhID0gZmFfdG9fZGVsZXRlOwogCXJ0bXNnX2ZpYihSVE1fREVMUk9VVEUsIGh0b25sKGtleSksIGZhLCBwbGVuLCB0Yi0+dGJfaWQsCi0JCSAgJmNmZy0+ZmNfbmxpbmZvKTsKKwkJICAmY2ZnLT5mY19ubGluZm8sIDApOwogCiAJbCA9IGZpYl9maW5kX25vZGUodCwga2V5KTsKIAlsaSA9IGZpbmRfbGVhZl9pbmZvKGwsIHBsZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IGQzOGNiYmEuLjAyYTg5OWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ljbXAuYworKysgYi9uZXQvaXB2NC9pY21wLmMKQEAgLTUxNCw5ICs1MTQsMTUgQEAKIAogCXNhZGRyID0gaXBoLT5kYWRkcjsKIAlpZiAoIShydC0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMKSkgewotCQlpZiAoc3lzY3RsX2ljbXBfZXJyb3JzX3VzZV9pbmJvdW5kX2lmYWRkcikKLQkJCXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihza2JfaW4tPmRldiwgMCwgUlRfU0NPUEVfTElOSyk7Ci0JCWVsc2UKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisKKwkJaWYgKHJ0LT5mbC5paWYgJiYgc3lzY3RsX2ljbXBfZXJyb3JzX3VzZV9pbmJvdW5kX2lmYWRkcikKKwkJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgocnQtPmZsLmlpZik7CisKKwkJaWYgKGRldikgeworCQkJc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldiwgMCwgUlRfU0NPUEVfTElOSyk7CisJCQlkZXZfcHV0KGRldik7CisJCX0gZWxzZQogCQkJc2FkZHIgPSAwOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggNDNmYjE2MC4uZmJlNzcxNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC0zMSwxMCArMzEsOCBAQAogCiAvKgogICogVGhpcyBhcnJheSBob2xkcyB0aGUgZmlyc3QgYW5kIGxhc3QgbG9jYWwgcG9ydCBudW1iZXIuCi0gKiBGb3IgaGlnaC11c2FnZSBzeXN0ZW1zLCB1c2Ugc3lzY3RsIHRvIGNoYW5nZSB0aGlzIHRvCi0gKiAzMjc2OC02MTAwMAogICovCi1pbnQgc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMl0gPSB7IDEwMjQsIDQ5OTkgfTsKK2ludCBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVsyXSA9IHsgMzI3NjgsIDYxMDAwIH07CiAKIGludCBpbmV0X2Nza19iaW5kX2NvbmZsaWN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCSAgIGNvbnN0IHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0YikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvS2NvbmZpZyBiL25ldC9pcHY0L2lwdnMvS2NvbmZpZwppbmRleCA4OTFiOTM1Li4wOWQwYzNmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL0tjb25maWcKKysrIGIvbmV0L2lwdjQvaXB2cy9LY29uZmlnCkBAIC0xLDEwICsxLDcgQEAKICMKICMgSVAgVmlydHVhbCBTZXJ2ZXIgY29uZmlndXJhdGlvbgogIwotbWVudQkiSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24iCi0JZGVwZW5kcyBvbiBORVRGSUxURVIKLQotY29uZmlnCUlQX1ZTCittZW51Y29uZmlnIElQX1ZTCiAJdHJpc3RhdGUgIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBORVRGSUxURVIKIAktLS1oZWxwLS0tCkBAIC0yNSw5ICsyMiwxMCBAQAogCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBpbiBrZXJuZWwsIHNheSBZLiBUbyBjb21waWxlIGl0IGFzIGEKIAkgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi4KIAoraWYgSVBfVlMKKwogY29uZmlnCUlQX1ZTX0RFQlVHCiAJYm9vbCAiSVAgdmlydHVhbCBzZXJ2ZXIgZGVidWdnaW5nIgotCWRlcGVuZHMgb24gSVBfVlMKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGdldCBhZGRpdGlvbmFsIG1lc3NhZ2VzIHVzZWZ1bCBpbgogCSAgZGVidWdnaW5nIHRoZSBJUCB2aXJ0dWFsIHNlcnZlciBjb2RlLiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVidWcKQEAgLTM1LDcgKzMzLDYgQEAKIAogY29uZmlnCUlQX1ZTX1RBQl9CSVRTCiAJaW50ICJJUFZTIGNvbm5lY3Rpb24gdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKSIKLQlkZXBlbmRzIG9uIElQX1ZTIAogCWRlZmF1bHQgIjEyIiAKIAktLS1oZWxwLS0tCiAJICBUaGUgSVBWUyBjb25uZWN0aW9uIGhhc2ggdGFibGUgdXNlcyB0aGUgY2hhaW5pbmcgc2NoZW1lIHRvIGhhbmRsZQpAQCAtNjEsNDIgKzU4LDM1IEBACiAJICBuZWVkZWQgZm9yIHlvdXIgYm94LgogCiBjb21tZW50ICJJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0IgotICAgICAgICBkZXBlbmRzIG9uIElQX1ZTCiAKIGNvbmZpZwlJUF9WU19QUk9UT19UQ1AKIAlib29sICJUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElQX1ZTCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBUQ1AgdHJhbnNwb3J0CiAJICBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLgogCiBjb25maWcJSVBfVlNfUFJPVE9fVURQCiAJYm9vbCAiVURQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJUF9WUwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgVURQIHRyYW5zcG9ydAogCSAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS4KIAogY29uZmlnCUlQX1ZTX1BST1RPX0VTUAogCWJvb2wgIkVTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVBfVlMKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIEVTUCAoRW5jYXBzdWxhdGlvbgogCSAgU2VjdXJpdHkgUGF5bG9hZCkgdHJhbnNwb3J0IHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuCiAKIGNvbmZpZwlJUF9WU19QUk9UT19BSAogCWJvb2wgIkFIIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJUF9WUwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgQUggKEF1dGhlbnRpY2F0aW9uCiAJICBIZWFkZXIpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLgogCiBjb21tZW50ICJJUFZTIHNjaGVkdWxlciIKLSAgICAgICAgZGVwZW5kcyBvbiBJUF9WUwogCiBjb25maWcJSVBfVlNfUlIKIAl0cmlzdGF0ZSAicm91bmQtcm9iaW4gc2NoZWR1bGluZyIKLQlkZXBlbmRzIG9uIElQX1ZTCiAJLS0taGVscC0tLQogCSAgVGhlIHJvYmluLXJvYmluIHNjaGVkdWxpbmcgYWxnb3JpdGhtIHNpbXBseSBkaXJlY3RzIG5ldHdvcmsKIAkgIGNvbm5lY3Rpb25zIHRvIGRpZmZlcmVudCByZWFsIHNlcnZlcnMgaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuCkBAIC0xMDYsNyArOTYsNiBAQAogIAogY29uZmlnCUlQX1ZTX1dSUgogICAgICAgICB0cmlzdGF0ZSAid2VpZ2h0ZWQgcm91bmQtcm9iaW4gc2NoZWR1bGluZyIgCi0JZGVwZW5kcyBvbiBJUF9WUwogCS0tLWhlbHAtLS0KIAkgIFRoZSB3ZWlnaHRlZCByb2Jpbi1yb2JpbiBzY2hlZHVsaW5nIGFsZ29yaXRobSBkaXJlY3RzIG5ldHdvcmsKIAkgIGNvbm5lY3Rpb25zIHRvIGRpZmZlcmVudCByZWFsIHNlcnZlcnMgYmFzZWQgb24gc2VydmVyIHdlaWdodHMKQEAgLTEyMCw3ICsxMDksNiBAQAogCiBjb25maWcJSVBfVlNfTEMKICAgICAgICAgdHJpc3RhdGUgImxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZyIKLSAgICAgICAgZGVwZW5kcyBvbiBJUF9WUwogCS0tLWhlbHAtLS0KIAkgIFRoZSBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGRpcmVjdHMgbmV0d29yawogCSAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBsZWFzdCBudW1iZXIgb2YgYWN0aXZlIApAQCAtMTMxLDcgKzExOSw2IEBACiAKIGNvbmZpZwlJUF9WU19XTEMKICAgICAgICAgdHJpc3RhdGUgIndlaWdodGVkIGxlYXN0LWNvbm5lY3Rpb24gc2NoZWR1bGluZyIKLSAgICAgICAgZGVwZW5kcyBvbiBJUF9WUwogCS0tLWhlbHAtLS0KIAkgIFRoZSB3ZWlnaHRlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGRpcmVjdHMgbmV0d29yawogCSAgY29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBsZWFzdCBhY3RpdmUgY29ubmVjdGlvbnMKQEAgLTE0Miw3ICsxMjksNiBAQAogCiBjb25maWcJSVBfVlNfTEJMQwogCXRyaXN0YXRlICJsb2NhbGl0eS1iYXNlZCBsZWFzdC1jb25uZWN0aW9uIHNjaGVkdWxpbmciCi0gICAgICAgIGRlcGVuZHMgb24gSVBfVlMKIAktLS1oZWxwLS0tCiAJICBUaGUgbG9jYWxpdHktYmFzZWQgbGVhc3QtY29ubmVjdGlvbiBzY2hlZHVsaW5nIGFsZ29yaXRobSBpcyBmb3IKIAkgIGRlc3RpbmF0aW9uIElQIGxvYWQgYmFsYW5jaW5nLiBJdCBpcyB1c3VhbGx5IHVzZWQgaW4gY2FjaGUgY2x1c3Rlci4KQEAgLTE1Nyw3ICsxNDMsNiBAQAogCiBjb25maWcgIElQX1ZTX0xCTENSCiAJdHJpc3RhdGUgImxvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gd2l0aCByZXBsaWNhdGlvbiBzY2hlZHVsaW5nIgotICAgICAgICBkZXBlbmRzIG9uIElQX1ZTCiAJLS0taGVscC0tLQogCSAgVGhlIGxvY2FsaXR5LWJhc2VkIGxlYXN0LWNvbm5lY3Rpb24gd2l0aCByZXBsaWNhdGlvbiBzY2hlZHVsaW5nCiAJICBhbGdvcml0aG0gaXMgYWxzbyBmb3IgZGVzdGluYXRpb24gSVAgbG9hZCBiYWxhbmNpbmcuIEl0IGlzIApAQCAtMTc2LDcgKzE2MSw2IEBACiAKIGNvbmZpZwlJUF9WU19ESAogCXRyaXN0YXRlICJkZXN0aW5hdGlvbiBoYXNoaW5nIHNjaGVkdWxpbmciCi0gICAgICAgIGRlcGVuZHMgb24gSVBfVlMKIAktLS1oZWxwLS0tCiAJICBUaGUgZGVzdGluYXRpb24gaGFzaGluZyBzY2hlZHVsaW5nIGFsZ29yaXRobSBhc3NpZ25zIG5ldHdvcmsKIAkgIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXJzIHRocm91Z2ggbG9va2luZyB1cCBhIHN0YXRpY2FsbHkgYXNzaWduZWQKQEAgLTE4Nyw3ICsxNzEsNiBAQAogCiBjb25maWcJSVBfVlNfU0gKIAl0cmlzdGF0ZSAic291cmNlIGhhc2hpbmcgc2NoZWR1bGluZyIKLSAgICAgICAgZGVwZW5kcyBvbiBJUF9WUwogCS0tLWhlbHAtLS0KIAkgIFRoZSBzb3VyY2UgaGFzaGluZyBzY2hlZHVsaW5nIGFsZ29yaXRobSBhc3NpZ25zIG5ldHdvcmsKIAkgIGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXJzIHRocm91Z2ggbG9va2luZyB1cCBhIHN0YXRpY2FsbHkgYXNzaWduZWQKQEAgLTE5OCw3ICsxODEsNiBAQAogCiBjb25maWcJSVBfVlNfU0VECiAJdHJpc3RhdGUgInNob3J0ZXN0IGV4cGVjdGVkIGRlbGF5IHNjaGVkdWxpbmciCi0gICAgICAgIGRlcGVuZHMgb24gSVBfVlMKIAktLS1oZWxwLS0tCiAJICBUaGUgc2hvcnRlc3QgZXhwZWN0ZWQgZGVsYXkgc2NoZWR1bGluZyBhbGdvcml0aG0gYXNzaWducyBuZXR3b3JrCiAJICBjb25uZWN0aW9ucyB0byB0aGUgc2VydmVyIHdpdGggdGhlIHNob3J0ZXN0IGV4cGVjdGVkIGRlbGF5LiBUaGUgCkBAIC0yMTIsNyArMTk0LDYgQEAKIAogY29uZmlnCUlQX1ZTX05RCiAJdHJpc3RhdGUgIm5ldmVyIHF1ZXVlIHNjaGVkdWxpbmciCi0gICAgICAgIGRlcGVuZHMgb24gSVBfVlMKIAktLS1oZWxwLS0tCiAJICBUaGUgbmV2ZXIgcXVldWUgc2NoZWR1bGluZyBhbGdvcml0aG0gYWRvcHRzIGEgdHdvLXNwZWVkIG1vZGVsLgogCSAgV2hlbiB0aGVyZSBpcyBhbiBpZGxlIHNlcnZlciBhdmFpbGFibGUsIHRoZSBqb2Igd2lsbCBiZSBzZW50IHRvCkBAIC0yMjUsMTEgKzIwNiwxMCBAQAogCSAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLgogCiBjb21tZW50ICdJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcicKLQlkZXBlbmRzIG9uIElQX1ZTCiAKIGNvbmZpZwlJUF9WU19GVFAKICAgCXRyaXN0YXRlICJGVFAgcHJvdG9jb2wgaGVscGVyIgotICAgICAgICBkZXBlbmRzIG9uIElQX1ZTICYmIElQX1ZTX1BST1RPX1RDUAorICAgICAgICBkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUAogCS0tLWhlbHAtLS0KIAkgIEZUUCBpcyBhIHByb3RvY29sIHRoYXQgdHJhbnNmZXJzIElQIGFkZHJlc3MgYW5kL29yIHBvcnQgbnVtYmVyIGluCiAJICB0aGUgcGF5bG9hZC4gSW4gdGhlIHZpcnR1YWwgc2VydmVyIHZpYSBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24sCkBAIC0yNDEsNCArMjIxLDQgQEAKIAkgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhCiAJICBtb2R1bGUsIGNob29zZSBNIGhlcmUuIElmIHVuc3VyZSwgc2F5IE4uCiAKLWVuZG1lbnUKK2VuZGlmICMgSVBfVlMKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2N0bC5jCmluZGV4IGIzMDUwYTYuLjY4ZmUxZDQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfY3RsLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19jdGwuYwpAQCAtMjM4Nyw2ICsyMzg3LDcgQEAKIAlFbnRlckZ1bmN0aW9uKDIpOwogCWlwX3ZzX3RyYXNoX2NsZWFudXAoKTsKIAljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZkZWZlbnNlX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJmRlZmVuc2Vfd29yay53b3JrKTsKIAlpcF92c19raWxsX2VzdGltYXRvcigmaXBfdnNfc3RhdHMpOwogCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN5c2N0bF9oZWFkZXIpOwogCXByb2NfbmV0X3JlbW92ZSgiaXBfdnNfc3RhdHMiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfc2VkLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3NlZC5jCmluZGV4IGZmMzY2ZjcuLmRkN2MxMjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfc2VkLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zZWQuYwpAQCAtMTgsNyArMTgsNyBAQAogICogVGhlIFNFRCBhbGdvcml0aG0gYXR0ZW1wdHMgdG8gbWluaW1pemUgZWFjaCBqb2IncyBleHBlY3RlZCBkZWxheSB1bnRpbAogICogY29tcGxldGlvbi4gVGhlIGV4cGVjdGVkIGRlbGF5IHRoYXQgdGhlIGpvYiB3aWxsIGV4cGVyaWVuY2UgaXMKICAqIChDaSArIDEpIC8gVWkgaWYgc2VudCB0byB0aGUgaXRoIHNlcnZlciwgaW4gd2hpY2ggQ2kgaXMgdGhlIG51bWJlciBvZgotICogam9icyBvbiB0aGUgdGhlIGl0aCBzZXJ2ZXIgYW5kIFVpIGlzIHRoZSBmaXhlZCBzZXJ2aWNlIHJhdGUgKHdlaWdodCkgb2YKKyAqIGpvYnMgb24gdGhlIGl0aCBzZXJ2ZXIgYW5kIFVpIGlzIHRoZSBmaXhlZCBzZXJ2aWNlIHJhdGUgKHdlaWdodCkgb2YKICAqIHRoZSBpdGggc2VydmVyLiBUaGUgU0VEIGFsZ29yaXRobSBhZG9wdHMgYSBncmVlZHkgcG9saWN5IHRoYXQgZWFjaCBkb2VzCiAgKiB3aGF0IGlzIGluIGl0cyBvd24gYmVzdCBpbnRlcmVzdCwgaS5lLiB0byBqb2luIHRoZSBxdWV1ZSB3aGljaCB3b3VsZAogICogbWluaW1pemUgaXRzIGV4cGVjdGVkIGRlbGF5IG9mIGNvbXBsZXRpb24uCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKaW5kZXggN2VkZWEyYS4uNzVjMDIzMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwpAQCAtMTUsMTI4ICsxNSwzNCBAQAogI2RlZmluZSBGSUxURVJfVkFMSURfSE9PS1MgKCgxIDw8IE5GX0FSUF9JTikgfCAoMSA8PCBORl9BUlBfT1VUKSB8IFwKIAkJCSAgICgxIDw8IE5GX0FSUF9GT1JXQVJEKSkKIAotLyogU3RhbmRhcmQgZW50cnkuICovCi1zdHJ1Y3QgYXJwdF9zdGFuZGFyZAotewotCXN0cnVjdCBhcnB0X2VudHJ5IGVudHJ5OwotCXN0cnVjdCBhcnB0X3N0YW5kYXJkX3RhcmdldCB0YXJnZXQ7Ci19OwotCi1zdHJ1Y3QgYXJwdF9lcnJvcl90YXJnZXQKLXsKLQlzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgdGFyZ2V0OwotCWNoYXIgZXJyb3JuYW1lW0FSUFRfRlVOQ1RJT05fTUFYTkFNRUxFTl07Ci19OwotCi1zdHJ1Y3QgYXJwdF9lcnJvcgotewotCXN0cnVjdCBhcnB0X2VudHJ5IGVudHJ5OwotCXN0cnVjdCBhcnB0X2Vycm9yX3RhcmdldCB0YXJnZXQ7Ci19OwotCiBzdGF0aWMgc3RydWN0CiB7CiAJc3RydWN0IGFycHRfcmVwbGFjZSByZXBsOwogCXN0cnVjdCBhcnB0X3N0YW5kYXJkIGVudHJpZXNbM107CiAJc3RydWN0IGFycHRfZXJyb3IgdGVybTsKLX0gaW5pdGlhbF90YWJsZSBfX2luaXRkYXRhCi09IHsgeyAiZmlsdGVyIiwgRklMVEVSX1ZBTElEX0hPT0tTLCA0LAotICAgICAgc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSAqIDMgKyBzaXplb2Yoc3RydWN0IGFycHRfZXJyb3IpLAotICAgICAgeyBbTkZfQVJQX0lOXSA9IDAsCi0JW05GX0FSUF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSwKLQlbTkZfQVJQX0ZPUldBUkRdID0gMiAqIHNpemVvZihzdHJ1Y3QgYXJwdF9zdGFuZGFyZCksIH0sCi0gICAgICB7IFtORl9BUlBfSU5dID0gMCwKLQlbTkZfQVJQX09VVF0gPSBzaXplb2Yoc3RydWN0IGFycHRfc3RhbmRhcmQpLAotCVtORl9BUlBfRk9SV0FSRF0gPSAyICogc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSwgfSwKLSAgICAgIDAsIE5VTEwsIHsgfSB9LAotICAgIHsKLQkgICAgLyogQVJQX0lOICovCi0JICAgIHsKLQkJICAgIHsKLQkJCSAgICB7Ci0JCQkJICAgIHsgMCB9LCB7IDAgfSwgeyAwIH0sIHsgMCB9LAotCQkJCSAgICAwLCAwLAotCQkJCSAgICB7IHsgMCwgfSwgeyAwLCB9IH0sCi0JCQkJICAgIHsgeyAwLCB9LCB7IDAsIH0gfSwKLQkJCQkgICAgMCwgMCwKLQkJCQkgICAgMCwgMCwKLQkJCQkgICAgMCwgMCwKLQkJCQkgICAgIiIsICIiLCB7IDAgfSwgeyAwIH0sCi0JCQkJICAgIDAsIDAKLQkJCSAgICB9LAotCQkJICAgIHNpemVvZihzdHJ1Y3QgYXJwdF9lbnRyeSksCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSwKLQkJCSAgICAwLAotCQkJICAgIHsgMCwgMCB9LCB7IH0gfSwKLQkJICAgIHsgeyB7IHsgQVJQVF9BTElHTihzaXplb2Yoc3RydWN0IGFycHRfc3RhbmRhcmRfdGFyZ2V0KSksICIiIH0gfSwgeyB9IH0sCi0JCSAgICAgIC1ORl9BQ0NFUFQgLSAxIH0KLQkgICAgfSwKLQkgICAgLyogQVJQX09VVCAqLwotCSAgICB7Ci0JCSAgICB7Ci0JCQkgICAgewotCQkJCSAgICB7IDAgfSwgeyAwIH0sIHsgMCB9LCB7IDAgfSwKLQkJCQkgICAgMCwgMCwKLQkJCQkgICAgeyB7IDAsIH0sIHsgMCwgfSB9LAotCQkJCSAgICB7IHsgMCwgfSwgeyAwLCB9IH0sCi0JCQkJICAgIDAsIDAsCi0JCQkJICAgIDAsIDAsCi0JCQkJICAgIDAsIDAsCi0JCQkJICAgICIiLCAiIiwgeyAwIH0sIHsgMCB9LAotCQkJCSAgICAwLCAwCi0JCQkgICAgfSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IGFycHRfZW50cnkpLAotCQkJICAgIHNpemVvZihzdHJ1Y3QgYXJwdF9zdGFuZGFyZCksCi0JCQkgICAgMCwKLQkJCSAgICB7IDAsIDAgfSwgeyB9IH0sCi0JCSAgICB7IHsgeyB7IEFSUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkX3RhcmdldCkpLCAiIiB9IH0sIHsgfSB9LAotCQkgICAgICAtTkZfQUNDRVBUIC0gMSB9Ci0JICAgIH0sCi0JICAgIC8qIEFSUF9GT1JXQVJEICovCi0JICAgIHsKLQkJICAgIHsKLQkJCSAgICB7Ci0JCQkJICAgIHsgMCB9LCB7IDAgfSwgeyAwIH0sIHsgMCB9LAotCQkJCSAgICAwLCAwLAotCQkJCSAgICB7IHsgMCwgfSwgeyAwLCB9IH0sCi0JCQkJICAgIHsgeyAwLCB9LCB7IDAsIH0gfSwKLQkJCQkgICAgMCwgMCwKLQkJCQkgICAgMCwgMCwKLQkJCQkgICAgMCwgMCwKLQkJCQkgICAgIiIsICIiLCB7IDAgfSwgeyAwIH0sCi0JCQkJICAgIDAsIDAKLQkJCSAgICB9LAotCQkJICAgIHNpemVvZihzdHJ1Y3QgYXJwdF9lbnRyeSksCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSwKLQkJCSAgICAwLAotCQkJICAgIHsgMCwgMCB9LCB7IH0gfSwKLQkJICAgIHsgeyB7IHsgQVJQVF9BTElHTihzaXplb2Yoc3RydWN0IGFycHRfc3RhbmRhcmRfdGFyZ2V0KSksICIiIH0gfSwgeyB9IH0sCi0JCSAgICAgIC1ORl9BQ0NFUFQgLSAxIH0KLQkgICAgfQotICAgIH0sCi0gICAgLyogRVJST1IgKi8KLSAgICB7Ci0JICAgIHsKLQkJICAgIHsKLQkJCSAgICB7IDAgfSwgeyAwIH0sIHsgMCB9LCB7IDAgfSwKLQkJCSAgICAwLCAwLAotCQkJICAgIHsgeyAwLCB9LCB7IDAsIH0gfSwKLQkJCSAgICB7IHsgMCwgfSwgeyAwLCB9IH0sCi0JCQkgICAgMCwgMCwKLQkJCSAgICAwLCAwLAotCQkJICAgIDAsIDAsCi0JCQkgICAgIiIsICIiLCB7IDAgfSwgeyAwIH0sCi0JCQkgICAgMCwgMAotCQkgICAgfSwKLQkJICAgIHNpemVvZihzdHJ1Y3QgYXJwdF9lbnRyeSksCi0JCSAgICBzaXplb2Yoc3RydWN0IGFycHRfZXJyb3IpLAotCQkgICAgMCwKLQkJICAgIHsgMCwgMCB9LCB7IH0gfSwKLQkgICAgeyB7IHsgeyBBUlBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgYXJwdF9lcnJvcl90YXJnZXQpKSwgQVJQVF9FUlJPUl9UQVJHRVQgfSB9LAotCQl7IH0gfSwKLQkgICAgICAiRVJST1IiCi0JICAgIH0KLSAgICB9Cit9IGluaXRpYWxfdGFibGUgX19pbml0ZGF0YSA9IHsKKwkucmVwbCA9IHsKKwkJLm5hbWUgPSAiZmlsdGVyIiwKKwkJLnZhbGlkX2hvb2tzID0gRklMVEVSX1ZBTElEX0hPT0tTLAorCQkubnVtX2VudHJpZXMgPSA0LAorCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXJwdF9zdGFuZGFyZCkgKiAzICsgc2l6ZW9mKHN0cnVjdCBhcnB0X2Vycm9yKSwKKwkJLmhvb2tfZW50cnkgPSB7CisJCQlbTkZfQVJQX0lOXSA9IDAsCisJCQlbTkZfQVJQX09VVF0gPSBzaXplb2Yoc3RydWN0IGFycHRfc3RhbmRhcmQpLAorCQkJW05GX0FSUF9GT1JXQVJEXSA9IDIgKiBzaXplb2Yoc3RydWN0IGFycHRfc3RhbmRhcmQpLAorCQl9LAorCQkudW5kZXJmbG93ID0geworCQkJW05GX0FSUF9JTl0gPSAwLAorCQkJW05GX0FSUF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSwKKwkJCVtORl9BUlBfRk9SV0FSRF0gPSAyICogc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSwKKwkJfSwKKwl9LAorCS5lbnRyaWVzID0geworCQlBUlBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogQVJQX0lOICovCisJCUFSUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBBUlBfT1VUICovCisJCUFSUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBBUlBfRk9SV0FSRCAqLworCX0sCisJLnRlcm0gPSBBUlBUX0VSUk9SX0lOSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFycHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKaW5kZXggNDI3Mjg5MC4uNGY1MWMxZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKQEAgLTI2LDUzICsyNiwyOSBAQAogCXN0cnVjdCBpcHRfcmVwbGFjZSByZXBsOwogCXN0cnVjdCBpcHRfc3RhbmRhcmQgZW50cmllc1szXTsKIAlzdHJ1Y3QgaXB0X2Vycm9yIHRlcm07Ci19IGluaXRpYWxfdGFibGUgX19pbml0ZGF0YQotPSB7IHsgImZpbHRlciIsIEZJTFRFUl9WQUxJRF9IT09LUywgNCwKLSAgICAgIHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDMgKyBzaXplb2Yoc3RydWN0IGlwdF9lcnJvciksCi0gICAgICB7IFtORl9JUF9MT0NBTF9JTl0gPSAwLAotCVtORl9JUF9GT1JXQVJEXSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSwKLQlbTkZfSVBfTE9DQUxfT1VUXSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIgfSwKLSAgICAgIHsgW05GX0lQX0xPQ0FMX0lOXSA9IDAsCi0JW05GX0lQX0ZPUldBUkRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAotCVtORl9JUF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMiB9LAotICAgICAgMCwgTlVMTCwgeyB9IH0sCi0gICAgewotCSAgICAvKiBMT0NBTF9JTiAqLwotCSAgICB7IHsgeyB7IDAgfSwgeyAwIH0sIHsgMCB9LCB7IDAgfSwgIiIsICIiLCB7IDAgfSwgeyAwIH0sIDAsIDAsIDAgfSwKLQkJMCwKLQkJc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpLAotCQlzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCTAsIHsgMCwgMCB9LCB7IH0gfSwKLQkgICAgICB7IHsgeyB7IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQpKSwgIiIgfSB9LCB7IH0gfSwKLQkJLU5GX0FDQ0VQVCAtIDEgfSB9LAotCSAgICAvKiBGT1JXQVJEICovCi0JICAgIHsgeyB7IHsgMCB9LCB7IDAgfSwgeyAwIH0sIHsgMCB9LCAiIiwgIiIsIHsgMCB9LCB7IDAgfSwgMCwgMCwgMCB9LAotCQkwLAotCQlzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSksCi0JCXNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSwKLQkJMCwgeyAwLCAwIH0sIHsgfSB9LAotCSAgICAgIHsgeyB7IHsgSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCkpLCAiIiB9IH0sIHsgfSB9LAotCQktTkZfQUNDRVBUIC0gMSB9IH0sCi0JICAgIC8qIExPQ0FMX09VVCAqLwotCSAgICB7IHsgeyB7IDAgfSwgeyAwIH0sIHsgMCB9LCB7IDAgfSwgIiIsICIiLCB7IDAgfSwgeyAwIH0sIDAsIDAsIDAgfSwKLQkJMCwKLQkJc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpLAotCQlzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCTAsIHsgMCwgMCB9LCB7IH0gfSwKLQkgICAgICB7IHsgeyB7IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQpKSwgIiIgfSB9LCB7IH0gfSwKLQkJLU5GX0FDQ0VQVCAtIDEgfSB9Ci0gICAgfSwKLSAgICAvKiBFUlJPUiAqLwotICAgIHsgeyB7IHsgMCB9LCB7IDAgfSwgeyAwIH0sIHsgMCB9LCAiIiwgIiIsIHsgMCB9LCB7IDAgfSwgMCwgMCwgMCB9LAotCTAsCi0Jc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpLAotCXNpemVvZihzdHJ1Y3QgaXB0X2Vycm9yKSwKLQkwLCB7IDAsIDAgfSwgeyB9IH0sCi0gICAgICB7IHsgeyB7IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9lcnJvcl90YXJnZXQpKSwgSVBUX0VSUk9SX1RBUkdFVCB9IH0sCi0JICB7IH0gfSwKLQkiRVJST1IiCi0gICAgICB9Ci0gICAgfQorfSBpbml0aWFsX3RhYmxlIF9faW5pdGRhdGEgPSB7CisJLnJlcGwgPSB7CisJCS5uYW1lID0gImZpbHRlciIsCisJCS52YWxpZF9ob29rcyA9IEZJTFRFUl9WQUxJRF9IT09LUywKKwkJLm51bV9lbnRyaWVzID0gNCwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAzICsgc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3IpLAorCQkuaG9va19lbnRyeSA9IHsKKwkJCVtORl9JUF9MT0NBTF9JTl0gPSAwLAorCQkJW05GX0lQX0ZPUldBUkRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAorCQkJW05GX0lQX0xPQ0FMX09VVF0gPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAyLAorCQl9LAorCQkudW5kZXJmbG93ID0geworCQkJW05GX0lQX0xPQ0FMX0lOXSA9IDAsCisJCQlbTkZfSVBfRk9SV0FSRF0gPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCisJCQlbTkZfSVBfTE9DQUxfT1VUXSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIsCisJCX0sCisJfSwKKwkuZW50cmllcyA9IHsKKwkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfSU4gKi8KKwkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogRk9SV0FSRCAqLworCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9PVVQgKi8KKwl9LAorCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKQEAgLTEwNSw3ICs4MSw4IEBACiAJaWYgKCgqcHNrYiktPmxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpCiAJICAgIHx8IGlwX2hkcmxlbigqcHNrYikgPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKCJpcHRfaG9vazogaGFwcHkgY3JhY2tpbmcuXG4iKTsKKwkJCXByaW50aygiaXB0YWJsZV9maWx0ZXI6IGlnbm9yaW5nIHNob3J0IFNPQ0tfUkFXICIKKwkJCSAgICAgICAicGFja2V0LlxuIik7CiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCmluZGV4IDkyNzg4MDIuLjkwMjQ0NmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCkBAIC0zMyw3MyArMzMsMzUgQEAKIAlzdHJ1Y3QgaXB0X3JlcGxhY2UgcmVwbDsKIAlzdHJ1Y3QgaXB0X3N0YW5kYXJkIGVudHJpZXNbNV07CiAJc3RydWN0IGlwdF9lcnJvciB0ZXJtOwotfSBpbml0aWFsX3RhYmxlIF9faW5pdGRhdGEKLT0geyB7ICJtYW5nbGUiLCBNQU5HTEVfVkFMSURfSE9PS1MsIDYsCi0gICAgICBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiA1ICsgc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3IpLAotICAgICAgeyBbTkZfSVBfUFJFX1JPVVRJTkddIAk9IDAsCi0JW05GX0lQX0xPQ0FMX0lOXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JW05GX0lQX0ZPUldBUkRdIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIsCi0JW05GX0lQX0xPQ0FMX09VVF0gCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMywKLQlbTkZfSVBfUE9TVF9ST1VUSU5HXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiA0IH0sCi0gICAgICB7IFtORl9JUF9QUkVfUk9VVElOR10gCT0gMCwKLQlbTkZfSVBfTE9DQUxfSU5dIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSwKLQlbTkZfSVBfRk9SV0FSRF0gCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMiwKLQlbTkZfSVBfTE9DQUxfT1VUXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAzLAotCVtORl9JUF9QT1NUX1JPVVRJTkddCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogNCB9LAotICAgICAgMCwgTlVMTCwgeyB9IH0sCi0gICAgewotCSAgICAvKiBQUkVfUk9VVElORyAqLwotCSAgICB7IHsgeyB7IDAgfSwgeyAwIH0sIHsgMCB9LCB7IDAgfSwgIiIsICIiLCB7IDAgfSwgeyAwIH0sIDAsIDAsIDAgfSwKLQkJMCwKLQkJc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpLAotCQlzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCTAsIHsgMCwgMCB9LCB7IH0gfSwKLQkgICAgICB7IHsgeyB7IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQpKSwgIiIgfSB9LCB7IH0gfSwKLQkJLU5GX0FDQ0VQVCAtIDEgfSB9LAotCSAgICAvKiBMT0NBTF9JTiAqLwotCSAgICB7IHsgeyB7IDAgfSwgeyAwIH0sIHsgMCB9LCB7IDAgfSwgIiIsICIiLCB7IDAgfSwgeyAwIH0sIDAsIDAsIDAgfSwKLQkJMCwKLQkJc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpLAotCQlzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCTAsIHsgMCwgMCB9LCB7IH0gfSwKLQkgICAgICB7IHsgeyB7IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQpKSwgIiIgfSB9LCB7IH0gfSwKLQkJLU5GX0FDQ0VQVCAtIDEgfSB9LAotCSAgICAvKiBGT1JXQVJEICovCi0JICAgIHsgeyB7IHsgMCB9LCB7IDAgfSwgeyAwIH0sIHsgMCB9LCAiIiwgIiIsIHsgMCB9LCB7IDAgfSwgMCwgMCwgMCB9LAotCQkwLAotCQlzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSksCi0JCXNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSwKLQkJMCwgeyAwLCAwIH0sIHsgfSB9LAotCSAgICAgIHsgeyB7IHsgSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCkpLCAiIiB9IH0sIHsgfSB9LAotCQktTkZfQUNDRVBUIC0gMSB9IH0sCi0JICAgIC8qIExPQ0FMX09VVCAqLwotCSAgICB7IHsgeyB7IDAgfSwgeyAwIH0sIHsgMCB9LCB7IDAgfSwgIiIsICIiLCB7IDAgfSwgeyAwIH0sIDAsIDAsIDAgfSwKLQkJMCwKLQkJc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpLAotCQlzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCTAsIHsgMCwgMCB9LCB7IH0gfSwKLQkgICAgICB7IHsgeyB7IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQpKSwgIiIgfSB9LCB7IH0gfSwKLQkJLU5GX0FDQ0VQVCAtIDEgfSB9LAotCSAgICAvKiBQT1NUX1JPVVRJTkcgKi8KLQkgICAgeyB7IHsgeyAwIH0sIHsgMCB9LCB7IDAgfSwgeyAwIH0sICIiLCAiIiwgeyAwIH0sIHsgMCB9LCAwLCAwLCAwIH0sCi0JCTAsCi0JCXNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KSwKLQkJc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAotCQkwLCB7IDAsIDAgfSwgeyB9IH0sCi0JICAgICAgeyB7IHsgeyBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmRfdGFyZ2V0KSksICIiIH0gfSwgeyB9IH0sCi0JCS1ORl9BQ0NFUFQgLSAxIH0gfSwKLSAgICB9LAotICAgIC8qIEVSUk9SICovCi0gICAgeyB7IHsgeyAwIH0sIHsgMCB9LCB7IDAgfSwgeyAwIH0sICIiLCAiIiwgeyAwIH0sIHsgMCB9LCAwLCAwLCAwIH0sCi0JMCwKLQlzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSksCi0Jc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3IpLAotCTAsIHsgMCwgMCB9LCB7IH0gfSwKLSAgICAgIHsgeyB7IHsgSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X2Vycm9yX3RhcmdldCkpLCBJUFRfRVJST1JfVEFSR0VUIH0gfSwKLQkgIHsgfSB9LAotCSJFUlJPUiIKLSAgICAgIH0KLSAgICB9Cit9IGluaXRpYWxfdGFibGUgX19pbml0ZGF0YSA9IHsKKwkucmVwbCA9IHsKKwkJLm5hbWUgPSAibWFuZ2xlIiwKKwkJLnZhbGlkX2hvb2tzID0gTUFOR0xFX1ZBTElEX0hPT0tTLAorCQkubnVtX2VudHJpZXMgPSA2LAorCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDUgKyBzaXplb2Yoc3RydWN0IGlwdF9lcnJvciksCisJCS5ob29rX2VudHJ5ID0geworCQkJW05GX0lQX1BSRV9ST1VUSU5HXSAJPSAwLAorCQkJW05GX0lQX0xPQ0FMX0lOXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCisJCQlbTkZfSVBfRk9SV0FSRF0gCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMiwKKwkJCVtORl9JUF9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDMsCisJCQlbTkZfSVBfUE9TVF9ST1VUSU5HXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiA0LAorCQl9LAorCQkudW5kZXJmbG93ID0geworCQkJW05GX0lQX1BSRV9ST1VUSU5HXSAJPSAwLAorCQkJW05GX0lQX0xPQ0FMX0lOXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCisJCQlbTkZfSVBfRk9SV0FSRF0gCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMiwKKwkJCVtORl9JUF9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDMsCisJCQlbTkZfSVBfUE9TVF9ST1VUSU5HXQk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDQsCisJCX0sCisJfSwKKwkuZW50cmllcyA9IHsKKwkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogUFJFX1JPVVRJTkcgKi8KKwkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfSU4gKi8KKwkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogRk9SV0FSRCAqLworCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9PVVQgKi8KKwkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogUE9TVF9ST1VUSU5HICovCisJfSwKKwkudGVybSA9IElQVF9FUlJPUl9JTklULAkJCS8qIEVSUk9SICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0gewpAQCAtMTM4LDcgKzEwMCw4IEBACiAJaWYgKCgqcHNrYiktPmxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpCiAJICAgIHx8IGlwX2hkcmxlbigqcHNrYikgPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKCJpcHRfaG9vazogaGFwcHkgY3JhY2tpbmcuXG4iKTsKKwkJCXByaW50aygiaXB0YWJsZV9tYW5nbGU6IGlnbm9yaW5nIHNob3J0IFNPQ0tfUkFXICIKKwkJCSAgICAgICAicGFja2V0LlxuIik7CiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCmluZGV4IDE4YzNkNGMuLmQ2ZTUwMzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCkBAIC01LDYgKzUsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CiAKICNkZWZpbmUgUkFXX1ZBTElEX0hPT0tTICgoMSA8PCBORl9JUF9QUkVfUk9VVElORykgfCAoMSA8PCBORl9JUF9MT0NBTF9PVVQpKQogCkBAIC0yMSw2MiArMjIsMTggQEAKIAkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAyICsgc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3IpLAogCQkuaG9va19lbnRyeSA9IHsKIAkJCVtORl9JUF9QUkVfUk9VVElOR10gPSAwLAotCQkJW05GX0lQX0xPQ0FMX09VVF0gPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgfSwKKwkJCVtORl9JUF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpCisJCX0sCiAJCS51bmRlcmZsb3cgPSB7CiAJCQlbTkZfSVBfUFJFX1JPVVRJTkddID0gMCwKLQkJCVtORl9JUF9MT0NBTF9PVVRdICA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSB9LAorCQkJW05GX0lQX0xPQ0FMX09VVF0gID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpCisJCX0sCiAJfSwKIAkuZW50cmllcyA9IHsKLQkgICAgIC8qIFBSRV9ST1VUSU5HICovCi0JICAgICB7Ci0JCSAgICAgLmVudHJ5ID0gewotCQkJICAgICAudGFyZ2V0X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KSwKLQkJCSAgICAgLm5leHRfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAotCQkgICAgIH0sCi0JCSAgICAgLnRhcmdldCA9IHsKLQkJCSAgLnRhcmdldCA9IHsKLQkJCQkgIC51ID0gewotCQkJCQkgIC50YXJnZXRfc2l6ZSA9IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQpKSwKLQkJCQkgIH0sCi0JCQkgIH0sCi0JCQkgIC52ZXJkaWN0ID0gLU5GX0FDQ0VQVCAtIDEsCi0JCSAgICAgfSwKLQkgICAgIH0sCi0KLQkgICAgIC8qIExPQ0FMX09VVCAqLwotCSAgICAgewotCQkgICAgIC5lbnRyeSA9IHsKLQkJCSAgICAgLnRhcmdldF9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSksCi0JCQkgICAgIC5uZXh0X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSwKLQkJICAgICB9LAotCQkgICAgIC50YXJnZXQgPSB7Ci0JCQkgICAgIC50YXJnZXQgPSB7Ci0JCQkJICAgICAudSA9IHsKLQkJCQkJICAgICAudGFyZ2V0X3NpemUgPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmRfdGFyZ2V0KSksCi0JCQkJICAgICB9LAotCQkJICAgICB9LAotCQkJICAgICAudmVyZGljdCA9IC1ORl9BQ0NFUFQgLSAxLAotCQkgICAgIH0sCi0JICAgICB9LAorCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBQUkVfUk9VVElORyAqLworCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9PVVQgKi8KIAl9LAotCS8qIEVSUk9SICovCi0JLnRlcm0gPSB7Ci0JCS5lbnRyeSA9IHsKLQkJCS50YXJnZXRfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpLAotCQkJLm5leHRfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3IpLAotCQl9LAotCQkudGFyZ2V0ID0gewotCQkJLnRhcmdldCA9IHsKLQkJCQkudSA9IHsKLQkJCQkJLnVzZXIgPSB7Ci0JCQkJCQkudGFyZ2V0X3NpemUgPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3JfdGFyZ2V0KSksCi0JCQkJCQkubmFtZSA9IElQVF9FUlJPUl9UQVJHRVQsCi0JCQkJCX0sCi0JCQkJfSwKLQkJCX0sCi0JCQkuZXJyb3JuYW1lID0gIkVSUk9SIiwKLQkJfSwKLQl9CisJLnRlcm0gPSBJUFRfRVJST1JfSU5JVCwJCQkvKiBFUlJPUiAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfcmF3ID0gewpAQCAtOTgsNiArNTUsMjQgQEAKIAlyZXR1cm4gaXB0X2RvX3RhYmxlKHBza2IsIGhvb2ssIGluLCBvdXQsICZwYWNrZXRfcmF3KTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludAoraXB0X2xvY2FsX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCisJICAgICAgIHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCSAgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwkvKiByb290IGlzIHBsYXlpbmcgd2l0aCByYXcgc29ja2V0cy4gKi8KKwlpZiAoKCpwc2tiKS0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpcGhkcikgfHwKKwkgICAgaXBfaGRybGVuKCpwc2tiKSA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoImlwdGFibGVfcmF3OiBpZ25vcmluZyBzaG9ydCBTT0NLX1JBVyIKKwkJCSAgICAgICAicGFja2V0LlxuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCXJldHVybiBpcHRfZG9fdGFibGUocHNrYiwgaG9vaywgaW4sIG91dCwgJnBhY2tldF9yYXcpOworfQorCiAvKiAncmF3JyBpcyB0aGUgdmVyeSBmaXJzdCB0YWJsZS4gKi8KIHN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB0X29wc1tdID0gewogCXsKQEAgLTEwOCw3ICs4Myw3IEBACiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewotCQkuaG9vayA9IGlwdF9ob29rLAorCQkuaG9vayA9IGlwdF9sb2NhbF9ob29rLAogCQkucGYgPSBQRl9JTkVULAogCQkuaG9va251bSA9IE5GX0lQX0xPQ0FMX09VVCwKIAkJLnByaW9yaXR5ID0gTkZfSVBfUFJJX1JBVywKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCmluZGV4IDA2NTRlYWEuLmZkNjJhNDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpAQCAtMTU0LDEyICsxNTQsMTAgQEAKIAkJCQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJCQkgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewotI2lmICFkZWZpbmVkKENPTkZJR19JUF9ORl9OQVQpICYmICFkZWZpbmVkKENPTkZJR19JUF9ORl9OQVRfTU9EVUxFKQogCS8qIFByZXZpb3VzbHkgc2VlbiAobG9vcGJhY2spPyAgSWdub3JlLiAgRG8gdGhpcyBiZWZvcmUKIAkgICBmcmFnbWVudCBjaGVjay4gKi8KIAlpZiAoKCpwc2tiKS0+bmZjdCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKLSNlbmRpZgogCiAJLyogR2F0aGVyIGZyYWdtZW50cy4gKi8KIAlpZiAoaXBfaGRyKCpwc2tiKS0+ZnJhZ19vZmYgJiBodG9ucyhJUF9NRiB8IElQX09GRlNFVCkpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfZnRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2Z0cC5jCmluZGV4IDc1MWI1OTguLmU2YmM4ZTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfZnRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9mdHAuYwpAQCAtNDAsOCArNDAsNyBAQAogCQkgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKIAkJICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCiAJCSAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkgICAgIHUzMiAqc2VxKQorCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQogewogCWNoYXIgYnVmZmVyW3NpemVvZigibm5uLG5ubixubm4sbm5uLG5ubixubm4iKV07CiAKQEAgLTUwLDcgKzQ5LDYgQEAKIAogCURFQlVHUCgiY2FsbGluZyBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXRcbiIpOwogCi0JKnNlcSArPSBzdHJsZW4oYnVmZmVyKSAtIG1hdGNobGVuOwogCXJldHVybiBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQocHNrYiwgY3QsIGN0aW5mbywgbWF0Y2hvZmYsCiAJCQkJCW1hdGNobGVuLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKIH0KQEAgLTYzLDggKzYxLDcgQEAKIAkJICAgdW5zaWduZWQgaW50IG1hdGNob2ZmLAogCQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCiAJCSAgIHN0cnVjdCBuZl9jb25uICpjdCwKLQkJICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCSAgIHUzMiAqc2VxKQorCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKIHsKIAljaGFyIGJ1ZmZlcltzaXplb2YoInwxfDI1NS4yNTUuMjU1LjI1NXw2NTUzNXwiKV07CiAKQEAgLTcyLDcgKzY5LDYgQEAKIAogCURFQlVHUCgiY2FsbGluZyBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXRcbiIpOwogCi0JKnNlcSArPSBzdHJsZW4oYnVmZmVyKSAtIG1hdGNobGVuOwogCXJldHVybiBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQocHNrYiwgY3QsIGN0aW5mbywgbWF0Y2hvZmYsCiAJCQkJCW1hdGNobGVuLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKIH0KQEAgLTg1LDggKzgxLDcgQEAKIAkJICAgdW5zaWduZWQgaW50IG1hdGNob2ZmLAogCQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCiAJCSAgIHN0cnVjdCBuZl9jb25uICpjdCwKLQkJICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCSAgIHUzMiAqc2VxKQorCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKIHsKIAljaGFyIGJ1ZmZlcltzaXplb2YoInx8fDY1NTM1fCIpXTsKIApAQCAtOTQsMTQgKzg5LDEzIEBACiAKIAlERUJVR1AoImNhbGxpbmcgbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0XG4iKTsKIAotCSpzZXEgKz0gc3RybGVuKGJ1ZmZlcikgLSBtYXRjaGxlbjsKIAlyZXR1cm4gbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHBza2IsIGN0LCBjdGluZm8sIG1hdGNob2ZmLAogCQkJCQltYXRjaGxlbiwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CiB9CiAKIHN0YXRpYyBpbnQgKCptYW5nbGVbXSkoc3RydWN0IHNrX2J1ZmYgKiosIF9fYmUzMiwgdV9pbnQxNl90LAogCQkgICAgICAgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBuZl9jb25uICosCi0JCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvLCB1MzIgKnNlcSkKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8pCiA9IHsKIAlbTkZfQ1RfRlRQX1BPUlRdID0gbWFuZ2xlX3JmYzk1OV9wYWNrZXQsCiAJW05GX0NUX0ZUUF9QQVNWXSA9IG1hbmdsZV9yZmM5NTlfcGFja2V0LApAQCAtMTE2LDggKzExMCw3IEBACiAJCQkgICAgICAgZW51bSBuZl9jdF9mdHBfdHlwZSB0eXBlLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCi0JCQkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwKLQkJCSAgICAgICB1MzIgKnNlcSkKKwkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQogewogCV9fYmUzMiBuZXdpcDsKIAl1X2ludDE2X3QgcG9ydDsKQEAgLTE0NSw4ICsxMzgsNyBAQAogCWlmIChwb3J0ID09IDApCiAJCXJldHVybiBORl9EUk9QOwogCi0JaWYgKCFtYW5nbGVbdHlwZV0ocHNrYiwgbmV3aXAsIHBvcnQsIG1hdGNob2ZmLCBtYXRjaGxlbiwgY3QsIGN0aW5mbywKLQkJCSAgc2VxKSkgeworCWlmICghbWFuZ2xlW3R5cGVdKHBza2IsIG5ld2lwLCBwb3J0LCBtYXRjaG9mZiwgbWF0Y2hsZW4sIGN0LCBjdGluZm8pKSB7CiAJCW5mX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cCk7CiAJCXJldHVybiBORl9EUk9QOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmMKaW5kZXggZmNlYmM5Ni4uYzVkMmEyZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmMKQEAgLTQ1NSw5ICs0NTUsOSBAQAogCQlpZiAoaWR4ID4gMCAmJgogCQkgICAgZ2V0X2gyMjVfYWRkcihjdCwgKmRhdGEsICZ0YWRkclswXSwgJmFkZHIsICZwb3J0KSAmJgogCQkgICAgKG50b2hsKGFkZHIuaXApICYgMHhmZjAwMDAwMCkgPT0gMHg3ZjAwMDAwMCkgewotCQkJc2V0X2gyMjVfYWRkcl9ob29rKHBza2IsIGRhdGEsIDAsICZ0YWRkclswXSwKLQkJCQkJICAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAotCQkJCQkgICBpbmZvLT5zaWdfcG9ydFshZGlyXSk7CisJCQlzZXRfaDIyNV9hZGRyKHBza2IsIGRhdGEsIDAsICZ0YWRkclswXSwKKwkJCQkgICAgICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCisJCQkJICAgICAgaW5mby0+c2lnX3BvcnRbIWRpcl0pOwogCQl9CiAJfSBlbHNlIHsKIAkJbmZfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKaW5kZXggMjUzNGY3MS4uNjc0MDczNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKQEAgLTQ2LDc3ICs0NiwyMCBAQAogCQkuaG9va19lbnRyeSA9IHsKIAkJCVtORl9JUF9QUkVfUk9VVElOR10gPSAwLAogCQkJW05GX0lQX1BPU1RfUk9VVElOR10gPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCQlbTkZfSVBfTE9DQUxfT1VUXSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIgfSwKKwkJCVtORl9JUF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMgorCQl9LAogCQkudW5kZXJmbG93ID0gewogCQkJW05GX0lQX1BSRV9ST1VUSU5HXSA9IDAsCiAJCQlbTkZfSVBfUE9TVF9ST1VUSU5HXSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSwKLQkJCVtORl9JUF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMiB9LAorCQkJW05GX0lQX0xPQ0FMX09VVF0gPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAyCisJCX0sCiAJfSwKIAkuZW50cmllcyA9IHsKLQkJLyogUFJFX1JPVVRJTkcgKi8KLQkJewotCQkJLmVudHJ5ID0gewotCQkJCS50YXJnZXRfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpLAotCQkJCS5uZXh0X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSwKLQkJCX0sCi0JCQkudGFyZ2V0ID0gewotCQkJCS50YXJnZXQgPSB7Ci0JCQkJCS51ID0gewotCQkJCQkJLnRhcmdldF9zaXplID0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCkpLAotCQkJCQl9LAotCQkJCX0sCi0JCQkJLnZlcmRpY3QgPSAtTkZfQUNDRVBUIC0gMSwKLQkJCX0sCi0JCX0sCi0JCS8qIFBPU1RfUk9VVElORyAqLwotCQl7Ci0JCQkuZW50cnkgPSB7Ci0JCQkJLnRhcmdldF9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSksCi0JCQkJLm5leHRfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAotCQkJfSwKLQkJCS50YXJnZXQgPSB7Ci0JCQkJLnRhcmdldCA9IHsKLQkJCQkJLnUgPSB7Ci0JCQkJCQkudGFyZ2V0X3NpemUgPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmRfdGFyZ2V0KSksCi0JCQkJCX0sCi0JCQkJfSwKLQkJCQkudmVyZGljdCA9IC1ORl9BQ0NFUFQgLSAxLAotCQkJfSwKLQkJfSwKLQkJLyogTE9DQUxfT1VUICovCi0JCXsKLQkJCS5lbnRyeSA9IHsKLQkJCQkudGFyZ2V0X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KSwKLQkJCQkubmV4dF9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCQl9LAotCQkJLnRhcmdldCA9IHsKLQkJCQkudGFyZ2V0ID0gewotCQkJCQkudSA9IHsKLQkJCQkJCS50YXJnZXRfc2l6ZSA9IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQpKSwKLQkJCQkJfSwKLQkJCQl9LAotCQkJCS52ZXJkaWN0ID0gLU5GX0FDQ0VQVCAtIDEsCi0JCQl9LAotCQl9LAorCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBQUkVfUk9VVElORyAqLworCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBQT1NUX1JPVVRJTkcgKi8KKwkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfT1VUICovCiAJfSwKLQkvKiBFUlJPUiAqLwotCS50ZXJtID0gewotCQkuZW50cnkgPSB7Ci0JCQkudGFyZ2V0X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KSwKLQkJCS5uZXh0X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXB0X2Vycm9yKSwKLQkJfSwKLQkJLnRhcmdldCA9IHsKLQkJCS50YXJnZXQgPSB7Ci0JCQkJLnUgPSB7Ci0JCQkJCS51c2VyID0gewotCQkJCQkJLnRhcmdldF9zaXplID0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X2Vycm9yX3RhcmdldCkpLAotCQkJCQkJLm5hbWUgPSBJUFRfRVJST1JfVEFSR0VULAotCQkJCQl9LAotCQkJCX0sCi0JCQl9LAotCQkJLmVycm9ybmFtZSA9ICJFUlJPUiIsCi0JCX0sCi0JfQorCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgbmF0X3RhYmxlID0gewpAQCAtMjMwLDkgKzE3Myw3IEBACiB9CiAKIGlubGluZSB1bnNpZ25lZCBpbnQKLWFsbG9jX251bGxfYmluZGluZyhzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCSAgIHN0cnVjdCBuZl9uYXRfaW5mbyAqaW5mbywKLQkJICAgdW5zaWduZWQgaW50IGhvb2tudW0pCithbGxvY19udWxsX2JpbmRpbmcoc3RydWN0IG5mX2Nvbm4gKmN0LCB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAkvKiBGb3JjZSByYW5nZSB0byB0aGlzIElQOyBsZXQgcHJvdG8gZGVjaWRlIG1hcHBpbmcgZm9yCiAJICAgcGVyLXByb3RvIHBhcnRzIChoZW5jZSBub3QgSVBfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRCkuCkBAIC0yNTEsOSArMTkyLDcgQEAKIH0KIAogdW5zaWduZWQgaW50Ci1hbGxvY19udWxsX2JpbmRpbmdfY29uZmlybWVkKHN0cnVjdCBuZl9jb25uICpjdCwKLQkJCSAgICAgc3RydWN0IG5mX25hdF9pbmZvICppbmZvLAotCQkJICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKK2FsbG9jX251bGxfYmluZGluZ19jb25maXJtZWQoc3RydWN0IG5mX2Nvbm4gKmN0LCB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlfX2JlMzIgaXAKIAkJPSAoSE9PSzJNQU5JUChob29rbnVtKSA9PSBJUF9OQVRfTUFOSVBfU1JDCkBAIC0yNzUsOCArMjE0LDcgQEAKIAkJICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwKIAkJICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCSAgICAgc3RydWN0IG5mX25hdF9pbmZvICppbmZvKQorCQkgICAgIHN0cnVjdCBuZl9jb25uICpjdCkKIHsKIAlpbnQgcmV0OwogCkBAIC0yODUsNyArMjIzLDcgQEAKIAlpZiAocmV0ID09IE5GX0FDQ0VQVCkgewogCQlpZiAoIW5mX25hdF9pbml0aWFsaXplZChjdCwgSE9PSzJNQU5JUChob29rbnVtKSkpCiAJCQkvKiBOVUwgbWFwcGluZyAqLwotCQkJcmV0ID0gYWxsb2NfbnVsbF9iaW5kaW5nKGN0LCBpbmZvLCBob29rbnVtKTsKKwkJCXJldCA9IGFsbG9jX251bGxfYmluZGluZyhjdCwgaG9va251bSk7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCmluZGV4IDY0YmJlZDIuLjU1ZGFjMzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCkBAIC04MCw3ICs4MCw2IEBACiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZl9jb25uX25hdCAqbmF0OwotCXN0cnVjdCBuZl9uYXRfaW5mbyAqaW5mbzsKIAkvKiBtYW5pcHR5cGUgPT0gU1JDIGZvciBwb3N0cm91dGluZy4gKi8KIAllbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSA9IEhPT0syTUFOSVAoaG9va251bSk7CiAKQEAgLTEyOSw3ICsxMjgsNiBAQAogCQl9CiAJCS8qIEZhbGwgdGhydS4uLiAoT25seSBJQ01QcyBjYW4gYmUgSVBfQ1RfSVNfUkVQTFkpICovCiAJY2FzZSBJUF9DVF9ORVc6Ci0JCWluZm8gPSAmbmF0LT5pbmZvOwogCiAJCS8qIFNlZW4gaXQgYmVmb3JlPyAgVGhpcyBjYW4gaGFwcGVuIGZvciBsb29wYmFjaywgcmV0cmFucywKIAkJICAgb3IgbG9jYWwgcGFja2V0cy4uICovCkBAIC0xMzgsMTQgKzEzNiwxMyBAQAogCiAJCQlpZiAodW5saWtlbHkobmZfY3RfaXNfY29uZmlybWVkKGN0KSkpCiAJCQkJLyogTkFUIG1vZHVsZSB3YXMgbG9hZGVkIGxhdGUgKi8KLQkJCQlyZXQgPSBhbGxvY19udWxsX2JpbmRpbmdfY29uZmlybWVkKGN0LCBpbmZvLAotCQkJCQkJCQkgICBob29rbnVtKTsKKwkJCQlyZXQgPSBhbGxvY19udWxsX2JpbmRpbmdfY29uZmlybWVkKGN0LCBob29rbnVtKTsKIAkJCWVsc2UgaWYgKGhvb2tudW0gPT0gTkZfSVBfTE9DQUxfSU4pCiAJCQkJLyogTE9DQUxfSU4gaG9vayBkb2Vzbid0IGhhdmUgYSBjaGFpbiEgICovCi0JCQkJcmV0ID0gYWxsb2NfbnVsbF9iaW5kaW5nKGN0LCBpbmZvLCBob29rbnVtKTsKKwkJCQlyZXQgPSBhbGxvY19udWxsX2JpbmRpbmcoY3QsIGhvb2tudW0pOwogCQkJZWxzZQogCQkJCXJldCA9IG5mX25hdF9ydWxlX2ZpbmQocHNrYiwgaG9va251bSwgaW4sIG91dCwKLQkJCQkJCSAgICAgICBjdCwgaW5mbyk7CisJCQkJCQkgICAgICAgY3QpOwogCiAJCQlpZiAocmV0ICE9IE5GX0FDQ0VQVCkgewogCQkJCXJldHVybiByZXQ7CkBAIC0xNjAsMTAgKzE1Nyw4IEBACiAJCS8qIEVTVEFCTElTSEVEICovCiAJCU5GX0NUX0FTU0VSVChjdGluZm8gPT0gSVBfQ1RfRVNUQUJMSVNIRUQgfHwKIAkJCSAgICAgY3RpbmZvID09IChJUF9DVF9FU1RBQkxJU0hFRCtJUF9DVF9JU19SRVBMWSkpOwotCQlpbmZvID0gJm5hdC0+aW5mbzsKIAl9CiAKLQlORl9DVF9BU1NFUlQoaW5mbyk7CiAJcmV0dXJuIG5mX25hdF9wYWNrZXQoY3QsIGN0aW5mbywgaG9va251bSwgcHNrYik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCAzN2FiNTgwLi5jZGJjNmMxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9wcm9jLmMKKysrIGIvbmV0L2lwdjQvcHJvYy5jCkBAIC0xMDksNiArMTA5LDE3IEBACiAJU05NUF9NSUJfU0VOVElORUwKIH07CiAKKy8qIEZvbGxvd2luZyBSRkM0MjkzIGl0ZW1zIGFyZSBkaXNwbGF5ZWQgaW4gL3Byb2MvbmV0L25ldHN0YXQgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgc25tcDRfaXBleHRzdGF0c19saXN0W10gPSB7CisJU05NUF9NSUJfSVRFTSgiSW5Ob1JvdXRlcyIsIElQU1RBVFNfTUlCX0lOTk9ST1VURVMpLAorCVNOTVBfTUlCX0lURU0oIkluVHJ1bmNhdGVkUGt0cyIsIElQU1RBVFNfTUlCX0lOVFJVTkNBVEVEUEtUUyksCisJU05NUF9NSUJfSVRFTSgiSW5NY2FzdFBrdHMiLCBJUFNUQVRTX01JQl9JTk1DQVNUUEtUUyksCisJU05NUF9NSUJfSVRFTSgiT3V0TWNhc3RQa3RzIiwgSVBTVEFUU19NSUJfT1VUTUNBU1RQS1RTKSwKKwlTTk1QX01JQl9JVEVNKCJJbkJjYXN0UGt0cyIsIElQU1RBVFNfTUlCX0lOQkNBU1RQS1RTKSwKKwlTTk1QX01JQl9JVEVNKCJPdXRCY2FzdFBrdHMiLCBJUFNUQVRTX01JQl9PVVRCQ0FTVFBLVFMpLAorCVNOTVBfTUlCX1NFTlRJTkVMCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIHNubXA0X2ljbXBfbGlzdFtdID0gewogCVNOTVBfTUlCX0lURU0oIkluTXNncyIsIElDTVBfTUlCX0lOTVNHUyksCiAJU05NUF9NSUJfSVRFTSgiSW5FcnJvcnMiLCBJQ01QX01JQl9JTkVSUk9SUyksCkBAIC0zMzgsNiArMzQ5LDE2IEBACiAJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopbmV0X3N0YXRpc3RpY3MsCiAJCQkJCSAgIHNubXA0X25ldF9saXN0W2ldLmVudHJ5KSk7CiAKKwlzZXFfcHV0cyhzZXEsICJcbklwRXh0OiIpOworCWZvciAoaSA9IDA7IHNubXA0X2lwZXh0c3RhdHNfbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKKwkJc2VxX3ByaW50ZihzZXEsICIgJXMiLCBzbm1wNF9pcGV4dHN0YXRzX2xpc3RbaV0ubmFtZSk7CisKKwlzZXFfcHV0cyhzZXEsICJcbklwRXh0OiIpOworCWZvciAoaSA9IDA7IHNubXA0X2lwZXh0c3RhdHNfbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKKwkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKKwkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKilpcF9zdGF0aXN0aWNzLAorCQkJCQkgICBzbm1wNF9pcGV4dHN0YXRzX2xpc3RbaV0uZW50cnkpKTsKKwogCXNlcV9wdXRjKHNlcSwgJ1xuJyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCBjYjc2ZTNjLi44NjAzY2ZiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTIzOTYsNyArMjM5Niw3IEBACiAKIAkJLyogSXQgaXMgZXF1aXZhbGVudCB0byBpbmV0X2FkZHJfdHlwZShzYWRkcikgPT0gUlROX0xPQ0FMICovCiAJCWRldl9vdXQgPSBpcF9kZXZfZmluZChvbGRmbHAtPmZsNF9zcmMpOwotCQlpZiAoKGRldl9vdXQgPT0gTlVMTCkgJiYgIShzeXNjdGxfaXBfbm9ubG9jYWxfYmluZCkpCisJCWlmIChkZXZfb3V0ID09IE5VTEwpCiAJCQlnb3RvIG91dDsKIAogCQkvKiBJIHJlbW92ZWQgY2hlY2sgZm9yIG9pZiA9PSBkZXZfb3V0LT5vaWYgaGVyZS4KQEAgLTI0MDcsNyArMjQwNyw3IEBACiAJCSAgICAgIG9mIGFub3RoZXIgaWZhY2UuIC0tQU5LCiAJCSAqLwogCi0JCWlmIChkZXZfb3V0ICYmIG9sZGZscC0+b2lmID09IDAKKwkJaWYgKG9sZGZscC0+b2lmID09IDAKIAkJICAgICYmIChNVUxUSUNBU1Qob2xkZmxwLT5mbDRfZHN0KSB8fCBvbGRmbHAtPmZsNF9kc3QgPT0gaHRvbmwoMHhGRkZGRkZGRikpKSB7CiAJCQkvKiBTcGVjaWFsIGhhY2s6IHVzZXIgY2FuIGRpcmVjdCBtdWx0aWNhc3RzCiAJCQkgICBhbmQgbGltaXRlZCBicm9hZGNhc3QgdmlhIG5lY2Vzc2FyeSBpbnRlcmZhY2UKQEAgLTI1OTgsNiArMjU5OCw2OSBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChfX2lwX3JvdXRlX291dHB1dF9rZXkpOwogCitzdGF0aWMgdm9pZCBpcHY0X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBtdHUpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9ibGFja2hvbGVfb3BzID0geworCS5mYW1pbHkJCQk9CUFGX0lORVQsCisJLnByb3RvY29sCQk9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApLAorCS5kZXN0cm95CQk9CWlwdjRfZHN0X2Rlc3Ryb3ksCisJLmNoZWNrCQkJPQlpcHY0X2RzdF9jaGVjaywKKwkudXBkYXRlX3BtdHUJCT0JaXB2NF9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCisJLmVudHJ5X3NpemUJCT0Jc2l6ZW9mKHN0cnVjdCBydGFibGUpLAorfTsKKworCitzdGF0aWMgaW50IGlwdjRfYmxhY2tob2xlX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWtmcmVlX3NrYihza2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwdjRfZHN0X2JsYWNraG9sZShzdHJ1Y3QgcnRhYmxlICoqcnAsIHN0cnVjdCBmbG93aSAqZmxwLCBzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHJ0YWJsZSAqb3J0ID0gKnJwOworCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKikKKwkJZHN0X2FsbG9jKCZpcHY0X2RzdF9ibGFja2hvbGVfb3BzKTsKKworCWlmIChydCkgeworCQlzdHJ1Y3QgZHN0X2VudHJ5ICpuZXcgPSAmcnQtPnUuZHN0OworCisJCWF0b21pY19zZXQoJm5ldy0+X19yZWZjbnQsIDEpOworCQluZXctPl9fdXNlID0gMTsKKwkJbmV3LT5pbnB1dCA9IGlwdjRfYmxhY2tob2xlX291dHB1dDsKKwkJbmV3LT5vdXRwdXQgPSBpcHY0X2JsYWNraG9sZV9vdXRwdXQ7CisJCW1lbWNweShuZXctPm1ldHJpY3MsIG9ydC0+dS5kc3QubWV0cmljcywgUlRBWF9NQVgqc2l6ZW9mKHUzMikpOworCisJCW5ldy0+ZGV2ID0gb3J0LT51LmRzdC5kZXY7CisJCWlmIChuZXctPmRldikKKwkJCWRldl9ob2xkKG5ldy0+ZGV2KTsKKworCQlydC0+ZmwgPSBvcnQtPmZsOworCisJCXJ0LT5pZGV2ID0gb3J0LT5pZGV2OworCQlpZiAocnQtPmlkZXYpCisJCQlpbl9kZXZfaG9sZChydC0+aWRldik7CisJCXJ0LT5ydF9mbGFncyA9IG9ydC0+cnRfZmxhZ3M7CisJCXJ0LT5ydF90eXBlID0gb3J0LT5ydF90eXBlOworCQlydC0+cnRfZHN0ID0gb3J0LT5ydF9kc3Q7CisJCXJ0LT5ydF9zcmMgPSBvcnQtPnJ0X3NyYzsKKwkJcnQtPnJ0X2lpZiA9IG9ydC0+cnRfaWlmOworCQlydC0+cnRfZ2F0ZXdheSA9IG9ydC0+cnRfZ2F0ZXdheTsKKwkJcnQtPnJ0X3NwZWNfZHN0ID0gb3J0LT5ydF9zcGVjX2RzdDsKKwkJcnQtPnBlZXIgPSBvcnQtPnBlZXI7CisJCWlmIChydC0+cGVlcikKKwkJCWF0b21pY19pbmMoJnJ0LT5wZWVyLT5yZWZjbnQpOworCisJCWRzdF9mcmVlKG5ldyk7CisJfQorCisJZHN0X3JlbGVhc2UoJigqcnApLT51LmRzdCk7CisJKnJwID0gcnQ7CisJcmV0dXJuIChydCA/IDAgOiAtRU5PTUVNKTsKK30KKwogaW50IGlwX3JvdXRlX291dHB1dF9mbG93KHN0cnVjdCBydGFibGUgKipycCwgc3RydWN0IGZsb3dpICpmbHAsIHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKQogewogCWludCBlcnI7CkBAIC0yNjEwLDcgKzI2NzMsMTEgQEAKIAkJCWZscC0+Zmw0X3NyYyA9ICgqcnApLT5ydF9zcmM7CiAJCWlmICghZmxwLT5mbDRfZHN0KQogCQkJZmxwLT5mbDRfZHN0ID0gKCpycCktPnJ0X2RzdDsKLQkJcmV0dXJuIHhmcm1fbG9va3VwKChzdHJ1Y3QgZHN0X2VudHJ5ICoqKXJwLCBmbHAsIHNrLCBmbGFncyk7CisJCWVyciA9IF9feGZybV9sb29rdXAoKHN0cnVjdCBkc3RfZW50cnkgKiopcnAsIGZscCwgc2ssIGZsYWdzKTsKKwkJaWYgKGVyciA9PSAtRVJFTU9URSkKKwkJCWVyciA9IGlwdjRfZHN0X2JsYWNraG9sZShycCwgZmxwLCBzayk7CisKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMxMzksNiArMzIwNiw4IEBACiAJCWttZW1fY2FjaGVfY3JlYXRlKCJpcF9kc3RfY2FjaGUiLCBzaXplb2Yoc3RydWN0IHJ0YWJsZSksIDAsCiAJCQkJICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQywgTlVMTCwgTlVMTCk7CiAKKwlpcHY0X2RzdF9ibGFja2hvbGVfb3BzLmttZW1fY2FjaGVwID0gaXB2NF9kc3Rfb3BzLmttZW1fY2FjaGVwOworCiAJcnRfaGFzaF90YWJsZSA9IChzdHJ1Y3QgcnRfaGFzaF9idWNrZXQgKikKIAkJYWxsb2NfbGFyZ2Vfc3lzdGVtX2hhc2goIklQIHJvdXRlIGNhY2hlIiwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBydF9oYXNoX2J1Y2tldCksCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDhiMTI0ZWEuLmNkM2M3ZTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC0yNTIsNyArMjUyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KQEAgLTE2NzUsOSArMTY3NCw4IEBACiAJfQogCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0NMT1NFKSB7CiAJCXNrX3N0cmVhbV9tZW1fcmVjbGFpbShzayk7Ci0JCWlmIChhdG9taWNfcmVhZChzay0+c2tfcHJvdC0+b3JwaGFuX2NvdW50KSA+IHN5c2N0bF90Y3BfbWF4X29ycGhhbnMgfHwKLQkJICAgIChzay0+c2tfd21lbV9xdWV1ZWQgPiBTT0NLX01JTl9TTkRCVUYgJiYKLQkJICAgICBhdG9taWNfcmVhZCgmdGNwX21lbW9yeV9hbGxvY2F0ZWQpID4gc3lzY3RsX3RjcF9tZW1bMl0pKSB7CisJCWlmICh0Y3BfdG9vX21hbnlfb3JwaGFucyhzaywKKwkJCQlhdG9taWNfcmVhZChzay0+c2tfcHJvdC0+b3JwaGFuX2NvdW50KSkpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiVENQOiB0b28gbWFueSBvZiBvcnBoYW5lZCAiCiAJCQkJICAgICAgICJzb2NrZXRzXG4iKTsKQEAgLTI0NjYsMTMgKzI0NjQsMTAgQEAKIAkJCW9yZGVyKyspCiAJCTsKIAlpZiAob3JkZXIgPj0gNCkgewotCQlzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVswXSA9IDMyNzY4OwotCQlzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVsxXSA9IDYxMDAwOwogCQl0Y3BfZGVhdGhfcm93LnN5c2N0bF9tYXhfdHdfYnVja2V0cyA9IDE4MDAwMDsKIAkJc3lzY3RsX3RjcF9tYXhfb3JwaGFucyA9IDQwOTYgPDwgKG9yZGVyIC0gNCk7CiAJCXN5c2N0bF9tYXhfc3luX2JhY2tsb2cgPSAxMDI0OwogCX0gZWxzZSBpZiAob3JkZXIgPCAzKSB7Ci0JCXN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzBdID0gMTAyNCAqICgzIC0gb3JkZXIpOwogCQl0Y3BfZGVhdGhfcm93LnN5c2N0bF9tYXhfdHdfYnVja2V0cyA+Pj0gKDMgLSBvcmRlcik7CiAJCXN5c2N0bF90Y3BfbWF4X29ycGhhbnMgPj49ICgzIC0gb3JkZXIpOwogCQlzeXNjdGxfbWF4X3N5bl9iYWNrbG9nID0gMTI4OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggODZiMjY1My4uMTI2MGU1MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYworKysgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0yNzYsMzAgKzI3NiwzNCBAQAogCiAKIC8qCi0gKiBTbG93IHN0YXJ0IChleHBvbmVudGlhbCBpbmNyZWFzZSkgd2l0aAotICogUkZDMzc0MiBMaW1pdGVkIFNsb3cgU3RhcnQgKGZhc3QgbGluZWFyIGluY3JlYXNlKSBzdXBwb3J0LgorICogU2xvdyBzdGFydCBpcyB1c2VkIHdoZW4gY29uZ2VzdGlvbiB3aW5kb3cgaXMgbGVzcyB0aGFuIHNsb3cgc3RhcnQKKyAqIHRocmVzaG9sZC4gVGhpcyB2ZXJzaW9uIGltcGxlbWVudHMgdGhlIGJhc2ljIFJGQzI1ODEgdmVyc2lvbgorICogYW5kIG9wdGlvbmFsbHkgc3VwcG9ydHM6CisgKiAJUkZDMzc0MiBMaW1pdGVkIFNsb3cgU3RhcnQgIAkgIC0gZ3Jvd3RoIGxpbWl0ZWQgdG8gbWF4X3NzdGhyZXNoCisgKglSRkMzNDY1IEFwcHJvcHJpYXRlIEJ5dGUgQ291bnRpbmcgLSBncm93dGggbGltaXRlZCBieSBieXRlcyBhY2tub3dsZWRnZWQKICAqLwogdm9pZCB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwKQogewotCWludCBjbnQgPSAwOworCWludCBjbnQ7IC8qIGluY3JlYXNlIGluIHBhY2tldHMgKi8KIAotCWlmIChzeXNjdGxfdGNwX2FiYykgewotCQkvKiBSRkMzNDY1OiBTbG93IFN0YXJ0Ci0JCSAqIFRDUCBzZW5kZXIgU0hPVUxEIGluY3JlYXNlIGN3bmQgYnkgdGhlIG51bWJlciBvZgotCQkgKiBwcmV2aW91c2x5IHVuYWNrbm93bGVkZ2VkIGJ5dGVzIEFDS2VkIGJ5IGVhY2ggaW5jb21pbmcKLQkJICogYWNrbm93bGVkZ21lbnQsIHByb3ZpZGVkIHRoZSBpbmNyZWFzZSBpcyBub3QgbW9yZSB0aGFuIEwKLQkJICovCi0JCWlmICh0cC0+Ynl0ZXNfYWNrZWQgPCB0cC0+bXNzX2NhY2hlKQotCQkJcmV0dXJuOwotCX0KKwkvKiBSRkMzNDY1OiBBQkMgU2xvdyBzdGFydAorCSAqIEluY3JlYXNlIG9ubHkgYWZ0ZXIgYSBmdWxsIE1TUyBvZiBieXRlcyBpcyBhY2tlZAorCSAqCisJICogVENQIHNlbmRlciBTSE9VTEQgaW5jcmVhc2UgY3duZCBieSB0aGUgbnVtYmVyIG9mCisJICogcHJldmlvdXNseSB1bmFja25vd2xlZGdlZCBieXRlcyBBQ0tlZCBieSBlYWNoIGluY29taW5nCisJICogYWNrbm93bGVkZ21lbnQsIHByb3ZpZGVkIHRoZSBpbmNyZWFzZSBpcyBub3QgbW9yZSB0aGFuIEwKKwkgKi8KKwlpZiAoc3lzY3RsX3RjcF9hYmMgJiYgdHAtPmJ5dGVzX2Fja2VkIDwgdHAtPm1zc19jYWNoZSkKKwkJcmV0dXJuOwogCi0JaWYgKHN5c2N0bF90Y3BfbWF4X3NzdGhyZXNoID4gMCAmJgotCSAgICB0cC0+c25kX2N3bmQgPiBzeXNjdGxfdGNwX21heF9zc3RocmVzaCkKLQkJY250ICs9IHN5c2N0bF90Y3BfbWF4X3NzdGhyZXNoPj4xOworCWlmIChzeXNjdGxfdGNwX21heF9zc3RocmVzaCA+IDAgJiYgdHAtPnNuZF9jd25kID4gc3lzY3RsX3RjcF9tYXhfc3N0aHJlc2gpCisJCWNudCA9IHN5c2N0bF90Y3BfbWF4X3NzdGhyZXNoID4+IDE7CS8qIGxpbWl0ZWQgc2xvdyBzdGFydCAqLwogCWVsc2UKLQkJY250ICs9IHRwLT5zbmRfY3duZDsKKwkJY250ID0gdHAtPnNuZF9jd25kOwkJCS8qIGV4cG9uZW50aWFsIGluY3JlYXNlICovCiAKLQkvKiBSRkMzNDY1OiBXZSBNQVkgaW5jcmVhc2UgYnkgMiBpZiBkaXNjb3ZlcmVkIGRlbGF5ZWQgYWNrICovCisJLyogUkZDMzQ2NTogQUJDCisJICogV2UgTUFZIGluY3JlYXNlIGJ5IDIgaWYgZGlzY292ZXJlZCBkZWxheWVkIGFjaworCSAqLwogCWlmIChzeXNjdGxfdGNwX2FiYyA+IDEgJiYgdHAtPmJ5dGVzX2Fja2VkID49IDIqdHAtPm1zc19jYWNoZSkKIAkJY250IDw8PSAxOwogCXRwLT5ieXRlc19hY2tlZCA9IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IDc2NDFiMjcuLjc0NjgzZDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC0xNTAxLDYgKzE1MDEsOCBAQAogCXRjcF9zZXRfY2Ffc3RhdGUoc2ssIFRDUF9DQV9Mb3NzKTsKIAl0cC0+aGlnaF9zZXEgPSB0cC0+c25kX254dDsKIAlUQ1BfRUNOX3F1ZXVlX2N3cih0cCk7CisJLyogQWJvcnQgRlJUTyBhbGdvcml0aG0gaWYgb25lIGlzIGluIHByb2dyZXNzICovCisJdHAtPmZydG9fY291bnRlciA9IDA7CiAKIAljbGVhcl9hbGxfcmV0cmFuc19oaW50cyh0cCk7CiB9CkBAIC0yNDA1LDggKzI0MDcsOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJX191MzIgbm93ID0gdGNwX3RpbWVfc3RhbXA7CiAJaW50IGFja2VkID0gMDsKKwlpbnQgcHJpb3JfcGFja2V0cyA9IHRwLT5wYWNrZXRzX291dDsKIAlfX3MzMiBzZXFfcnR0ID0gLTE7Ci0JdTMyIHBrdHNfYWNrZWQgPSAwOwogCWt0aW1lX3QgbGFzdF9hY2t0ID0ga3RpbWVfc2V0KDAsMCk7CiAKIAl3aGlsZSAoKHNrYiA9IHRjcF93cml0ZV9xdWV1ZV9oZWFkKHNrKSkgJiYKQEAgLTI0MzUsNyArMjQzNyw2IEBACiAJCSAqLwogCQlpZiAoIShzY2ItPmZsYWdzICYgVENQQ0JfRkxBR19TWU4pKSB7CiAJCQlhY2tlZCB8PSBGTEFHX0RBVEFfQUNLRUQ7Ci0JCQkrK3BrdHNfYWNrZWQ7CiAJCX0gZWxzZSB7CiAJCQlhY2tlZCB8PSBGTEFHX1NZTl9BQ0tFRDsKIAkJCXRwLT5yZXRyYW5zX3N0YW1wID0gMDsKQEAgLTI0NzksNiArMjQ4MCw3IEBACiAJfQogCiAJaWYgKGFja2VkJkZMQUdfQUNLRUQpIHsKKwkJdTMyIHBrdHNfYWNrZWQgPSBwcmlvcl9wYWNrZXRzIC0gdHAtPnBhY2tldHNfb3V0OwogCQljb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMKIAkJCT0gaW5ldF9jc2soc2spLT5pY3NrX2NhX29wczsKIApAQCAtMjYwOCw2ICsyNjEwLDcgQEAKIHsKIAl0cC0+c25kX2N3bmQgPSBtaW4odHAtPnNuZF9jd25kLCB0cC0+c25kX3NzdGhyZXNoKTsKIAl0cC0+c25kX2N3bmRfY250ID0gMDsKKwlUQ1BfRUNOX3F1ZXVlX2N3cih0cCk7CiAJdGNwX21vZGVyYXRlX2N3bmQodHApOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCA1YTNlN2Y4Li40N2M2MTA1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTE5Miw4ICsxOTIsMTEgQEAKIAkJCSAgICAgICBSVF9DT05OX0ZMQUdTKHNrKSwgc2stPnNrX2JvdW5kX2Rldl9pZiwKIAkJCSAgICAgICBJUFBST1RPX1RDUCwKIAkJCSAgICAgICBpbmV0LT5zcG9ydCwgdXNpbi0+c2luX3BvcnQsIHNrLCAxKTsKLQlpZiAodG1wIDwgMCkKKwlpZiAodG1wIDwgMCkgeworCQlpZiAodG1wID09IC1FTkVUVU5SRUFDSCkKKwkJCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CiAJCXJldHVybiB0bXA7CisJfQogCiAJaWYgKHJ0LT5ydF9mbGFncyAmIChSVENGX01VTFRJQ0FTVCB8IFJUQ0ZfQlJPQURDQVNUKSkgewogCQlpcF9ydF9wdXQocnQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IDBmYWFjZjkuLjUzMjMyZGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTQwLDcgKzQwLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogLyogUGVvcGxlIGNhbiB0dXJuIHRoaXMgb2ZmIGZvciBidWdneSBUQ1AncyBmb3VuZCBpbiBwcmludGVycyBldGMuICovCiBpbnQgc3lzY3RsX3RjcF9yZXRyYW5zX2NvbGxhcHNlIF9fcmVhZF9tb3N0bHkgPSAxOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3Byb2JlLmMgYi9uZXQvaXB2NC90Y3BfcHJvYmUuYwppbmRleCAzOTM4ZDVkLi43NjAxNjVhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfcHJvYmUuYworKysgYi9uZXQvaXB2NC90Y3BfcHJvYmUuYwpAQCAtODAsNyArODAsOCBAQAogCiAJa2ZpZm9fcHV0KHRjcHcuZmlmbywgdGJ1ZiwgbGVuKTsKIAl3YWtlX3VwKCZ0Y3B3LndhaXQpOwotfQorfSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisKIAogLyoKICAqIEhvb2sgaW5zZXJ0ZWQgdG8gYmUgY2FsbGVkIGJlZm9yZSBlYWNoIHJlY2VpdmUgcGFja2V0LgpAQCAtOTUsNyArOTYsNyBAQAogCS8qIE9ubHkgdXBkYXRlIGlmIHBvcnQgbWF0Y2hlcyAqLwogCWlmICgocG9ydCA9PSAwIHx8IG50b2hzKGluZXQtPmRwb3J0KSA9PSBwb3J0IHx8IG50b2hzKGluZXQtPnNwb3J0KSA9PSBwb3J0KQogCSAgICAmJiAoZnVsbCB8fCB0cC0+c25kX2N3bmQgIT0gdGNwdy5sYXN0Y3duZCkpIHsKLQkJcHJpbnRsKCIlZC4lZC4lZC4lZDoldSAlZC4lZC4lZC4lZDoldSAlZCAlI3ggJSN4ICV1ICV1ICV1XG4iLAorCQlwcmludGwoIiVkLiVkLiVkLiVkOiV1ICVkLiVkLiVkLiVkOiV1ICVkICUjeCAlI3ggJXUgJXUgJXUgJXVcbiIsCiAJCSAgICAgICBOSVBRVUFEKGluZXQtPnNhZGRyKSwgbnRvaHMoaW5ldC0+c3BvcnQpLAogCQkgICAgICAgTklQUVVBRChpbmV0LT5kYWRkciksIG50b2hzKGluZXQtPmRwb3J0KSwKIAkJICAgICAgIHNrYi0+bGVuLCB0cC0+c25kX254dCwgdHAtPnNuZF91bmEsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDJjYTk3YjIuLmU2MTM0MDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC03OCw5ICs3OCw3IEBACiAJaWYgKHNrLT5za19lcnJfc29mdCkKIAkJb3JwaGFucyA8PD0gMTsKIAotCWlmIChvcnBoYW5zID49IHN5c2N0bF90Y3BfbWF4X29ycGhhbnMgfHwKLQkgICAgKHNrLT5za193bWVtX3F1ZXVlZCA+IFNPQ0tfTUlOX1NOREJVRiAmJgotCSAgICAgYXRvbWljX3JlYWQoJnRjcF9tZW1vcnlfYWxsb2NhdGVkKSA+IHN5c2N0bF90Y3BfbWVtWzJdKSkgeworCWlmICh0Y3BfdG9vX21hbnlfb3JwaGFucyhzaywgb3JwaGFucykpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX0lORk8gIk91dCBvZiBzb2NrZXQgbWVtb3J5XG4iKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCAxMTNlMGM0Li41ZGE3MDNlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtMTE4LDE1ICsxMTgsMTUgQEAKICAqIE5vdGUgYWJvdXQgdGhpcyBoYXNoIGZ1bmN0aW9uIDoKICAqIFR5cGljYWwgdXNlIGlzIHByb2JhYmx5IGRhZGRyID0gMCwgb25seSBkcG9ydCBpcyBnb2luZyB0byB2YXJ5IGhhc2gKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaGFzaF9wb3J0X2FuZF9hZGRyKF9fdTE2IHBvcnQsIF9fYmUzMiBhZGRyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWRwX2hhc2hfcG9ydChfX3UxNiBwb3J0KQogewotCWFkZHIgXj0gYWRkciA+PiAxNjsKLQlhZGRyIF49IGFkZHIgPj4gODsKLQlyZXR1cm4gcG9ydCBeIGFkZHI7CisJcmV0dXJuIHBvcnQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fdWRwX2xpYl9wb3J0X2ludXNlKHVuc2lnbmVkIGludCBoYXNoLCBpbnQgcG9ydCwKLQlfX2JlMzIgZGFkZHIsIHN0cnVjdCBobGlzdF9oZWFkIHVkcHRhYmxlW10pCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrICp0aGlzX3NrLAorCQkJCSAgICAgICBzdHJ1Y3QgaGxpc3RfaGVhZCB1ZHB0YWJsZVtdLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdWRwX2dldF9wb3J0X29wcyAqb3BzKQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKQEAgLTEzOCw3ICsxMzgsMTAgQEAKIAkJaW5ldCA9IGluZXRfc2soc2spOwogCQlpZiAoaW5ldC0+bnVtICE9IHBvcnQpCiAJCQljb250aW51ZTsKLQkJaWYgKGluZXQtPnJjdl9zYWRkciA9PSBkYWRkcikKKwkJaWYgKHRoaXNfc2spIHsKKwkJCWlmIChvcHMtPnNhZGRyX2NtcChzaywgdGhpc19zaykpCisJCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAob3BzLT5zYWRkcl9hbnkoc2spKQogCQkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtMTUxLDEyICsxNTQsMTEgQEAKICAqICBAc251bTogICAgICAgIHBvcnQgbnVtYmVyIHRvIGxvb2sgdXAKICAqICBAdWRwdGFibGU6ICAgIGhhc2ggbGlzdCB0YWJsZSwgbXVzdCBiZSBvZiBVRFBfSFRBQkxFX1NJWkUKICAqICBAcG9ydF9yb3ZlcjogIHBvaW50ZXIgdG8gcmVjb3JkIG9mIGxhc3QgdW5hbGxvY2F0ZWQgcG9ydAotICogIEBzYWRkcl9jb21wOiAgQUYtZGVwZW5kZW50IGNvbXBhcmlzb24gb2YgYm91bmQgbG9jYWwgSVAgYWRkcmVzc2VzCisgKiAgQG9wczogICAgICAgICBBRi1kZXBlbmRlbnQgYWRkcmVzcyBvcGVyYXRpb25zCiAgKi8KIGludCBfX3VkcF9saWJfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtLAogCQkgICAgICAgc3RydWN0IGhsaXN0X2hlYWQgdWRwdGFibGVbXSwgaW50ICpwb3J0X3JvdmVyLAotCQkgICAgICAgaW50ICgqc2FkZHJfY29tcCkoY29uc3Qgc3RydWN0IHNvY2sgKnNrMSwKLQkJCQkJIGNvbnN0IHN0cnVjdCBzb2NrICpzazIgKSAgICApCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdWRwX2dldF9wb3J0X29wcyAqb3BzKQogewogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwpAQCAtMTc2LDggKzE3OCw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBVRFBfSFRBQkxFX1NJWkU7IGkrKywgcmVzdWx0KyspIHsKIAkJCWludCBzaXplOwogCi0JCQloYXNoID0gaGFzaF9wb3J0X2FuZF9hZGRyKHJlc3VsdCwKLQkJCQkJaW5ldF9zayhzayktPnJjdl9zYWRkcik7CisJCQloYXNoID0gb3BzLT5oYXNoX3BvcnRfYW5kX3Jjdl9zYWRkcihyZXN1bHQsIHNrKTsKIAkJCWhlYWQgPSAmdWRwdGFibGVbaGFzaCAmIChVRFBfSFRBQkxFX1NJWkUgLSAxKV07CiAJCQlpZiAoaGxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJCQlpZiAocmVzdWx0ID4gc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMV0pCkBAIC0yMDMsMTcgKzIwNCwxNiBAQAogCQkJCXJlc3VsdCA9IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzBdCiAJCQkJCSsgKChyZXN1bHQgLSBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVswXSkgJgogCQkJCQkgICAoVURQX0hUQUJMRV9TSVpFIC0gMSkpOwotCQkJaGFzaCA9IGhhc2hfcG9ydF9hbmRfYWRkcihyZXN1bHQsIDApOworCQkJaGFzaCA9IHVkcF9oYXNoX3BvcnQocmVzdWx0KTsKIAkJCWlmIChfX3VkcF9saWJfcG9ydF9pbnVzZShoYXNoLCByZXN1bHQsCi0JCQkJCQkgMCwgdWRwdGFibGUpKQorCQkJCQkJIE5VTEwsIHVkcHRhYmxlLCBvcHMpKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFpbmV0X3NrKHNrKS0+cmN2X3NhZGRyKQorCQkJaWYgKG9wcy0+c2FkZHJfYW55KHNrKSkKIAkJCQlicmVhazsKIAotCQkJaGFzaCA9IGhhc2hfcG9ydF9hbmRfYWRkcihyZXN1bHQsCi0JCQkJCWluZXRfc2soc2spLT5yY3Zfc2FkZHIpOworCQkJaGFzaCA9IG9wcy0+aGFzaF9wb3J0X2FuZF9yY3Zfc2FkZHIocmVzdWx0LCBzayk7CiAJCQlpZiAoISBfX3VkcF9saWJfcG9ydF9pbnVzZShoYXNoLCByZXN1bHQsCi0JCQkJaW5ldF9zayhzayktPnJjdl9zYWRkciwgdWRwdGFibGUpKQorCQkJCQkJICAgc2ssIHVkcHRhYmxlLCBvcHMpKQogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChpID49ICgxIDw8IDE2KSAvIFVEUF9IVEFCTEVfU0laRSkKQEAgLTIyMSw3ICsyMjEsNyBAQAogZ290aXQ6CiAJCSpwb3J0X3JvdmVyID0gc251bSA9IHJlc3VsdDsKIAl9IGVsc2UgewotCQloYXNoID0gaGFzaF9wb3J0X2FuZF9hZGRyKHNudW0sIDApOworCQloYXNoID0gdWRwX2hhc2hfcG9ydChzbnVtKTsKIAkJaGVhZCA9ICZ1ZHB0YWJsZVtoYXNoICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXTsKIAogCQlza19mb3JfZWFjaChzazIsIG5vZGUsIGhlYWQpCkBAIC0yMzEsMTIgKzIzMSwxMSBAQAogCQkJICAgICghc2syLT5za19yZXVzZSB8fCAhc2stPnNrX3JldXNlKSAmJgogCQkJICAgICghc2syLT5za19ib3VuZF9kZXZfaWYgfHwgIXNrLT5za19ib3VuZF9kZXZfaWYgfHwKIAkJCSAgICAgc2syLT5za19ib3VuZF9kZXZfaWYgPT0gc2stPnNrX2JvdW5kX2Rldl9pZikgJiYKLQkJCSAgICAoKnNhZGRyX2NvbXApKHNrLCBzazIpKQorCQkJICAgIG9wcy0+c2FkZHJfY21wKHNrLCBzazIpKQogCQkJCWdvdG8gZmFpbDsKIAotCQlpZiAoaW5ldF9zayhzayktPnJjdl9zYWRkcikgewotCQkJaGFzaCA9IGhhc2hfcG9ydF9hbmRfYWRkcihzbnVtLAotCQkJCQkJICBpbmV0X3NrKHNrKS0+cmN2X3NhZGRyKTsKKwkJaWYgKCFvcHMtPnNhZGRyX2FueShzaykpIHsKKwkJCWhhc2ggPSBvcHMtPmhhc2hfcG9ydF9hbmRfcmN2X3NhZGRyKHNudW0sIHNrKTsKIAkJCWhlYWQgPSAmdWRwdGFibGVbaGFzaCAmIChVRFBfSFRBQkxFX1NJWkUgLSAxKV07CiAKIAkJCXNrX2Zvcl9lYWNoKHNrMiwgbm9kZSwgaGVhZCkKQEAgLTI0OCw3ICsyNDcsNyBAQAogCQkJCSAgICAgIXNrLT5za19ib3VuZF9kZXZfaWYgfHwKIAkJCQkgICAgIHNrMi0+c2tfYm91bmRfZGV2X2lmID09CiAJCQkJICAgICBzay0+c2tfYm91bmRfZGV2X2lmKSAmJgotCQkJCSAgICAoKnNhZGRyX2NvbXApKHNrLCBzazIpKQorCQkJCSAgICBvcHMtPnNhZGRyX2NtcChzaywgc2syKSkKIAkJCQkJZ290byBmYWlsOwogCQl9CiAJfQpAQCAtMjY2LDEyICsyNjUsMTIgQEAKIH0KIAogaW50IHVkcF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCi0JCQlpbnQgKCpzY21wKShjb25zdCBzdHJ1Y3Qgc29jayAqLCBjb25zdCBzdHJ1Y3Qgc29jayAqKSkKKwkJIGNvbnN0IHN0cnVjdCB1ZHBfZ2V0X3BvcnRfb3BzICpvcHMpCiB7Ci0JcmV0dXJuICBfX3VkcF9saWJfZ2V0X3BvcnQoc2ssIHNudW0sIHVkcF9oYXNoLCAmdWRwX3BvcnRfcm92ZXIsIHNjbXApOworCXJldHVybiAgX191ZHBfbGliX2dldF9wb3J0KHNrLCBzbnVtLCB1ZHBfaGFzaCwgJnVkcF9wb3J0X3JvdmVyLCBvcHMpOwogfQogCi1pbnQgaXB2NF9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrMSwgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKK3N0YXRpYyBpbnQgaXB2NF9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrMSwgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0MSA9IGluZXRfc2soc2sxKSwgKmluZXQyID0gaW5ldF9zayhzazIpOwogCkBAIC0yODAsOSArMjc5LDMzIEBACiAJCSAgIGluZXQxLT5yY3Zfc2FkZHIgPT0gaW5ldDItPnJjdl9zYWRkciAgICAgICkpOwogfQogCitzdGF0aWMgaW50IGlwdjRfcmN2X3NhZGRyX2FueShjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuICFpbmV0X3NrKHNrKS0+cmN2X3NhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcHY0X2hhc2hfcG9ydF9hbmRfYWRkcihfX3UxNiBwb3J0LCBfX2JlMzIgYWRkcikKK3sKKwlhZGRyIF49IGFkZHIgPj4gMTY7CisJYWRkciBePSBhZGRyID4+IDg7CisJcmV0dXJuIHBvcnQgXiBhZGRyOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfaGFzaF9wb3J0X2FuZF9yY3Zfc2FkZHIoX191MTYgcG9ydCwKKwkJCQkJCSBjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIGlwdjRfaGFzaF9wb3J0X2FuZF9hZGRyKHBvcnQsIGluZXRfc2soc2spLT5yY3Zfc2FkZHIpOworfQorCitjb25zdCBzdHJ1Y3QgdWRwX2dldF9wb3J0X29wcyB1ZHBfaXB2NF9vcHMgPSB7CisJLnNhZGRyX2NtcCA9IGlwdjRfcmN2X3NhZGRyX2VxdWFsLAorCS5zYWRkcl9hbnkgPSBpcHY0X3Jjdl9zYWRkcl9hbnksCisJLmhhc2hfcG9ydF9hbmRfcmN2X3NhZGRyID0gaXB2NF9oYXNoX3BvcnRfYW5kX3Jjdl9zYWRkciwKK307CisKIHN0YXRpYyBpbmxpbmUgaW50IHVkcF92NF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCiB7Ci0JcmV0dXJuIHVkcF9nZXRfcG9ydChzaywgc251bSwgaXB2NF9yY3Zfc2FkZHJfZXF1YWwpOworCXJldHVybiB1ZHBfZ2V0X3BvcnQoc2ssIHNudW0sICZ1ZHBfaXB2NF9vcHMpOwogfQogCiAvKiBVRFAgaXMgbmVhcmx5IGFsd2F5cyB3aWxkY2FyZHMgb3V0IHRoZSB3YXpvbywgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gdHJ5CkBAIC0yOTcsOCArMzIwLDggQEAKIAl1bnNpZ25lZCBpbnQgaGFzaCwgaGFzaHdpbGQ7CiAJaW50IHNjb3JlLCBiZXN0ID0gLTEsIGhwb3J0ID0gbnRvaHMoZHBvcnQpOwogCi0gCWhhc2ggPSBoYXNoX3BvcnRfYW5kX2FkZHIoaHBvcnQsIGRhZGRyKTsKLSAJaGFzaHdpbGQgPSBoYXNoX3BvcnRfYW5kX2FkZHIoaHBvcnQsIDApOworCWhhc2ggPSBpcHY0X2hhc2hfcG9ydF9hbmRfYWRkcihocG9ydCwgZGFkZHIpOworCWhhc2h3aWxkID0gdWRwX2hhc2hfcG9ydChocG9ydCk7CiAKIAlyZWFkX2xvY2soJnVkcF9oYXNoX2xvY2spOwogCkBAIC02OTksOCArNzIyLDExIEBACiAJCQkJCQkgLmRwb3J0ID0gZHBvcnQgfSB9IH07CiAJCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssICZmbCk7CiAJCWVyciA9IGlwX3JvdXRlX291dHB1dF9mbG93KCZydCwgJmZsLCBzaywgMSk7Ci0JCWlmIChlcnIpCisJCWlmIChlcnIpIHsKKwkJCWlmIChlcnIgPT0gLUVORVRVTlJFQUNIKQorCQkJCUlQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CiAJCQlnb3RvIG91dDsKKwkJfQogCiAJCWVyciA9IC1FQUNDRVM7CiAJCWlmICgocnQtPnJ0X2ZsYWdzICYgUlRDRl9CUk9BRENBU1QpICYmCkBAIC05ODMsNyArMTAwOSw3IEBACiB9CiAKIC8qIHJldHVybjoKLSAqIAkxICBpZiB0aGUgdGhlIFVEUCBzeXN0ZW0gc2hvdWxkIHByb2Nlc3MgaXQKKyAqIAkxICBpZiB0aGUgVURQIHN5c3RlbSBzaG91bGQgcHJvY2VzcyBpdAogICoJMCAgaWYgd2Ugc2hvdWxkIGRyb3AgdGhpcyBwYWNrZXQKICAqIAktMSBpZiBpdCBzaG91bGQgZ2V0IHByb2Nlc3NlZCBieSB4ZnJtNF9yY3ZfZW5jYXAKICAqLwpAQCAtMTE5OCw4ICsxMjI0LDggQEAKIAlzdHJ1Y3Qgc29jayAqc2ssICpza3csICpza25leHQ7CiAJaW50IGRpZjsKIAlpbnQgaHBvcnQgPSBudG9ocyh1aC0+ZGVzdCk7Ci0JdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX3BvcnRfYW5kX2FkZHIoaHBvcnQsIGRhZGRyKTsKLQl1bnNpZ25lZCBpbnQgaGFzaHdpbGQgPSBoYXNoX3BvcnRfYW5kX2FkZHIoaHBvcnQsIDApOworCXVuc2lnbmVkIGludCBoYXNoID0gaXB2NF9oYXNoX3BvcnRfYW5kX2FkZHIoaHBvcnQsIGRhZGRyKTsKKwl1bnNpZ25lZCBpbnQgaGFzaHdpbGQgPSB1ZHBfaGFzaF9wb3J0KGhwb3J0KTsKIAogCWRpZiA9IHNrYi0+ZGV2LT5pZmluZGV4OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBfaW1wbC5oIGIvbmV0L2lwdjQvdWRwX2ltcGwuaAppbmRleCA4MjBhNDc3Li4wNmQ5NDE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHBfaW1wbC5oCisrKyBiL25ldC9pcHY0L3VkcF9pbXBsLmgKQEAgLTUsMTQgKzUsMTQgQEAKICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZHBfZ2V0X3BvcnRfb3BzIHVkcF9pcHY0X29wczsKKwogZXh0ZXJuIGludCAgCV9fdWRwNF9saWJfcmN2KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBobGlzdF9oZWFkIFtdLCBpbnQgKTsKIGV4dGVybiB2b2lkIAlfX3VkcDRfbGliX2VycihzdHJ1Y3Qgc2tfYnVmZiAqLCB1MzIsIHN0cnVjdCBobGlzdF9oZWFkIFtdKTsKIAogZXh0ZXJuIGludAlfX3VkcF9saWJfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtLAogCQkJCSAgIHN0cnVjdCBobGlzdF9oZWFkIHVkcHRhYmxlW10sIGludCAqcG9ydF9yb3ZlciwKLQkJCQkgICBpbnQgKCopKGNvbnN0IHN0cnVjdCBzb2NrKixjb25zdCBzdHJ1Y3Qgc29jayopKTsKLWV4dGVybiBpbnQJaXB2NF9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKiwgY29uc3Qgc3RydWN0IHNvY2sgKik7Ci0KKwkJCQkgICBjb25zdCBzdHJ1Y3QgdWRwX2dldF9wb3J0X29wcyAqb3BzKTsKIAogZXh0ZXJuIGludAl1ZHBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkgICAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBsaXRlLmMgYi9uZXQvaXB2NC91ZHBsaXRlLmMKaW5kZXggZjM0ZmQ2OC4uMzY1M2IzMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwbGl0ZS5jCisrKyBiL25ldC9pcHY0L3VkcGxpdGUuYwpAQCAtMTksMTQgKzE5LDE1IEBACiBzdGF0aWMgaW50CQl1ZHBsaXRlX3BvcnRfcm92ZXI7CiAKIGludCB1ZHBsaXRlX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgcCwKLQkJICAgICBpbnQgKCpjKShjb25zdCBzdHJ1Y3Qgc29jayAqLCBjb25zdCBzdHJ1Y3Qgc29jayAqKSkKKwkJICAgICBjb25zdCBzdHJ1Y3QgdWRwX2dldF9wb3J0X29wcyAqb3BzKQogewotCXJldHVybiAgX191ZHBfbGliX2dldF9wb3J0KHNrLCBwLCB1ZHBsaXRlX2hhc2gsICZ1ZHBsaXRlX3BvcnRfcm92ZXIsIGMpOworCXJldHVybiAgX191ZHBfbGliX2dldF9wb3J0KHNrLCBwLCB1ZHBsaXRlX2hhc2gsCisJCQkJICAgJnVkcGxpdGVfcG9ydF9yb3Zlciwgb3BzKTsKIH0KIAogc3RhdGljIGludCB1ZHBsaXRlX3Y0X2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSkKIHsKLQlyZXR1cm4gdWRwbGl0ZV9nZXRfcG9ydChzaywgc251bSwgaXB2NF9yY3Zfc2FkZHJfZXF1YWwpOworCXJldHVybiB1ZHBsaXRlX2dldF9wb3J0KHNrLCBzbnVtLCAmdWRwX2lwdjRfb3BzKTsKIH0KIAogc3RhdGljIGludCB1ZHBsaXRlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfaW5wdXQuYyBiL25ldC9pcHY0L3hmcm00X2lucHV0LmMKaW5kZXggNWNlY2E5NS4uZmExOTAyZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfaW5wdXQuYworKysgYi9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jCkBAIC0xMzksMTAgKzEzOSw4IEBACiAJbmZfcmVzZXQoc2tiKTsKIAogCWlmIChkZWNhcHMpIHsKLQkJaWYgKCEoc2tiLT5kZXYtPmZsYWdzJklGRl9MT09QQkFDSykpIHsKLQkJCWRzdF9yZWxlYXNlKHNrYi0+ZHN0KTsKLQkJCXNrYi0+ZHN0ID0gTlVMTDsKLQkJfQorCQlkc3RfcmVsZWFzZShza2ItPmRzdCk7CisJCXNrYi0+ZHN0ID0gTlVMTDsKIAkJbmV0aWZfcngoc2tiKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X21vZGVfdHVubmVsLmMgYi9uZXQvaXB2NC94ZnJtNF9tb2RlX3R1bm5lbC5jCmluZGV4IGEyZjJlNmEuLjk5NjM3MDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X21vZGVfdHVubmVsLmMKKysrIGIvbmV0L2lwdjQveGZybTRfbW9kZV90dW5uZWwuYwpAQCAtODUsNiArODUsOCBAQAogCXRvcF9pcGgtPnNhZGRyID0geC0+cHJvcHMuc2FkZHIuYTQ7CiAJdG9wX2lwaC0+ZGFkZHIgPSB4LT5pZC5kYWRkci5hNDsKIAorCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CisKIAltZW1zZXQoJihJUENCKHNrYiktPm9wdCksIDAsIHNpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggZDAyNjg1Yy4uMzI5ZGU2NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0yMTU0LDE1ICsyMTU0LDYgQEAKIAogCUFTU0VSVF9SVE5MKCk7CiAKLQlpZiAoKGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpICYmCi0JICAgIChkZXYtPnR5cGUgIT0gQVJQSFJEX0ZEREkpICYmCi0JICAgIChkZXYtPnR5cGUgIT0gQVJQSFJEX0lFRUU4MDJfVFIpICYmCi0JICAgIChkZXYtPnR5cGUgIT0gQVJQSFJEX0FSQ05FVCkgJiYKLQkgICAgKGRldi0+dHlwZSAhPSBBUlBIUkRfSU5GSU5JQkFORCkpIHsKLQkJLyogQWxhcywgd2Ugc3VwcG9ydCBvbmx5IEV0aGVybmV0IGF1dG9jb25maWd1cmF0aW9uLiAqLwotCQlyZXR1cm47Ci0JfQotCiAJaWRldiA9IGFkZHJjb25mX2FkZF9kZXYoZGV2KTsKIAlpZiAoaWRldiA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0yMjUwLDEzICsyMjQxLDMzIEBACiAJaXA2X3RubF9hZGRfbGlua2xvY2FsKGlkZXYpOwogfQogCitzdGF0aWMgaW50IGlwdjZfaHd0eXBlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKChkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKSB8fAorCSAgICAoZGV2LT50eXBlID09IEFSUEhSRF9MT09QQkFDSykgfHwKKwkgICAgKGRldi0+dHlwZSA9PSBBUlBIUkRfU0lUKSB8fAorCSAgICAoZGV2LT50eXBlID09IEFSUEhSRF9UVU5ORUw2KSB8fAorCSAgICAoZGV2LT50eXBlID09IEFSUEhSRF9GRERJKSB8fAorCSAgICAoZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyX1RSKSB8fAorCSAgICAoZGV2LT50eXBlID09IEFSUEhSRF9BUkNORVQpIHx8CisJICAgIChkZXYtPnR5cGUgPT0gQVJQSFJEX0lORklOSUJBTkQpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGFkZHJjb25mX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCiAJCQkgICB2b2lkICogZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKKwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCWludCBydW5fcGVuZGluZyA9IDA7CiAKKwlpZiAoIWlwdjZfaHd0eXBlKGRldikpCisJCXJldHVybiBOT1RJRllfT0s7CisKKwlpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpOworCiAJc3dpdGNoKGV2ZW50KSB7CiAJY2FzZSBORVRERVZfUkVHSVNURVI6CiAJCWlmICghaWRldikgewpAQCAtNDIwNCw2ICs0MjE1LDEwIEBACiAJCXJldHVybiBlcnI7CiAKIAlpcDZfbnVsbF9lbnRyeS5ydDZpX2lkZXYgPSBpbjZfZGV2X2dldCgmbG9vcGJhY2tfZGV2KTsKKyNpZmRlZiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMKKwlpcDZfcHJvaGliaXRfZW50cnkucnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoJmxvb3BiYWNrX2Rldik7CisJaXA2X2Jsa19ob2xlX2VudHJ5LnJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KCZsb29wYmFja19kZXYpOworI2VuZGlmCiAKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwdjZfZGV2X25vdGYpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCAxOGNiOTI4Li42ZGQzNzcyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcHY2Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgogCiAjaW5jbHVkZSA8bmV0L2lwLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9haDYuYyBiL25ldC9pcHY2L2FoNi5jCmluZGV4IGI2OTZjODQuLjEyOGY5NGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FoNi5jCisrKyBiL25ldC9pcHY2L2FoNi5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAltZW1jcHkodG1wX2Jhc2UsIHRvcF9pcGgsIHNpemVvZih0bXBfYmFzZSkpOwogCiAJdG1wX2V4dCA9IE5VTEw7Ci0JZXh0bGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CisJZXh0bGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAtIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CiAJaWYgKGV4dGxlbikgewogCQlleHRsZW4gKz0gc2l6ZW9mKCp0bXBfZXh0KTsKIAkJdG1wX2V4dCA9IGttYWxsb2MoZXh0bGVuLCBHRlBfQVRPTUlDKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2RhdGFncmFtLmMgYi9uZXQvaXB2Ni9kYXRhZ3JhbS5jCmluZGV4IDQwM2VlZTYuLmIxZmU3YWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2RhdGFncmFtLmMKKysrIGIvbmV0L2lwdjYvZGF0YWdyYW0uYwpAQCAtMTc3LDggKzE3NywxMiBAQAogCWlmIChmaW5hbF9wKQogCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZmluYWxfcCk7CiAKLQlpZiAoKGVyciA9IHhmcm1fbG9va3VwKCZkc3QsICZmbCwgc2ssIDEpKSA8IDApCi0JCWdvdG8gb3V0OworCWlmICgoZXJyID0gX194ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAxKSkgPCAwKSB7CisJCWlmIChlcnIgPT0gLUVSRU1PVEUpCisJCQllcnIgPSBpcDZfZHN0X2JsYWNraG9sZShzaywgJmRzdCwgJmZsKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBzb3VyY2UgYWRkcmVzcyBsb29rdXAgZG9uZSBpbiBpcDZfZHN0X2xvb2t1cCAqLwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmMKaW5kZXggNmQ4ZTRhYy4uMTRiZTBiOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jCisrKyBiL25ldC9pcHY2L2V4dGhkcnMuYwpAQCAtNjYwLDYgKzY2MCwxNCBAQAogICBIb3AtYnktaG9wIG9wdGlvbnMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyoKKyAqIE5vdGU6IHdlIGNhbm5vdCByZWx5IG9uIHNrYi0+ZHN0IGJlZm9yZSB3ZSBhc3NpZ24gaXQgaW4gaXA2X3JvdXRlX2lucHV0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqaXB2Nl9za2JfaWRldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2ItPmRzdCA/IGlwNl9kc3RfaWRldihza2ItPmRzdCkgOiBfX2luNl9kZXZfZ2V0KHNrYi0+ZGV2KTsKK30KKwogLyogUm91dGVyIEFsZXJ0IGFzIG9mIFJGQyAyNzExICovCiAKIHN0YXRpYyBpbnQgaXB2Nl9ob3BfcmEoc3RydWN0IHNrX2J1ZmYgKipza2JwLCBpbnQgb3B0b2ZmKQpAQCAtNjg4LDI1ICs2OTYsMjUgQEAKIAlpZiAobmhbb3B0b2ZmICsgMV0gIT0gNCB8fCAob3B0b2ZmICYgMykgIT0gMikgewogCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJpcHY2X2hvcF9qdW1ibzogd3JvbmcganVtYm8gb3B0IGxlbmd0aC9hbGlnbm1lbnQgJWRcbiIsCiAJCQkgICAgICAgbmhbb3B0b2ZmKzFdKTsKLQkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLAorCQlJUDZfSU5DX1NUQVRTX0JIKGlwdjZfc2tiX2lkZXYoc2tiKSwKIAkJCQkgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCQlnb3RvIGRyb3A7CiAJfQogCiAJcGt0X2xlbiA9IG50b2hsKCooX19iZTMyICopKG5oICsgb3B0b2ZmICsgMikpOwogCWlmIChwa3RfbGVuIDw9IElQVjZfTUFYUExFTikgewotCQlJUDZfSU5DX1NUQVRTX0JIKGlwNl9kc3RfaWRldihza2ItPmRzdCksIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKKwkJSVA2X0lOQ19TVEFUU19CSChpcHY2X3NrYl9pZGV2KHNrYiksIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJaWNtcHY2X3BhcmFtX3Byb2Ioc2tiLCBJQ01QVjZfSERSX0ZJRUxELCBvcHRvZmYrMik7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4pIHsKLQkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CisJCUlQNl9JTkNfU1RBVFNfQkgoaXB2Nl9za2JfaWRldihza2IpLCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCWljbXB2Nl9wYXJhbV9wcm9iKHNrYiwgSUNNUFY2X0hEUl9GSUVMRCwgb3B0b2ZmKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHBrdF9sZW4gPiBza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpIHsKLQkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLCBJUFNUQVRTX01JQl9JTlRSVU5DQVRFRFBLVFMpOworCQlJUDZfSU5DX1NUQVRTX0JIKGlwdjZfc2tiX2lkZXYoc2tiKSwgSVBTVEFUU19NSUJfSU5UUlVOQ0FURURQS1RTKTsKIAkJZ290byBkcm9wOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IGNhMDhlZTguLjY2MmE3ZDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYworKysgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTYxOSwxNCArNjE5LDYgQEAKIAogCWlucyA9ICZmbi0+bGVhZjsKIAotCWlmIChmbi0+Zm5fZmxhZ3MmUlROX1RMX1JPT1QgJiYKLQkgICAgZm4tPmxlYWYgPT0gJmlwNl9udWxsX2VudHJ5ICYmCi0JICAgICEocnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX0RFRkFVTFQgfCBSVEZfQUREUkNPTkYpKSApewotCQlmbi0+bGVhZiA9IHJ0OwotCQlydC0+dS5kc3QucnQ2X25leHQgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlmb3IgKGl0ZXIgPSBmbi0+bGVhZjsgaXRlcjsgaXRlcj1pdGVyLT51LmRzdC5ydDZfbmV4dCkgewogCQkvKgogCQkgKglTZWFyY2ggZm9yIGR1cGxpY2F0ZXMKQEAgLTY2Niw3ICs2NTgsNiBAQAogCSAqCWluc2VydCBub2RlCiAJICovCiAKLW91dDoKIAlydC0+dS5kc3QucnQ2X25leHQgPSBpdGVyOwogCSppbnMgPSBydDsKIAlydC0+cnQ2aV9ub2RlID0gZm47CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IGJlMGVlOGEuLjMwYTVjYjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC0yMzUsNyArMjM1LDcgQEAKIAlJUDZfSU5DX1NUQVRTX0JIKGlwNl9kc3RfaWRldihza2ItPmRzdCksIElQU1RBVFNfTUlCX0lOTUNBU1RQS1RTKTsKIAogCWhkciA9IGlwdjZfaGRyKHNrYik7Ci0JZGVsaXZlciA9IGxpa2VseSghKHNrYi0+ZGV2LT5mbGFncyAmIChJRkZfUFJPTUlTQ3xJRkZfQUxMTVVMVEkpKSkgfHwKKwlkZWxpdmVyID0gdW5saWtlbHkoc2tiLT5kZXYtPmZsYWdzICYgKElGRl9QUk9NSVNDfElGRl9BTExNVUxUSSkpIHx8CiAJICAgIGlwdjZfY2hrX21jYXN0X2FkZHIoc2tiLT5kZXYsICZoZHItPmRhZGRyLCBOVUxMKTsKIAogCS8qCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggZjUwODE3MS4uNDcwNGI1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtNDYzLDEwICs0NjMsMTcgQEAKIAkJICovCiAJCWlmICh4cmxpbV9hbGxvdyhkc3QsIDEqSFopKQogCQkJbmRpc2Nfc2VuZF9yZWRpcmVjdChza2IsIG4sIHRhcmdldCk7Ci0JfSBlbHNlIGlmIChpcHY2X2FkZHJfdHlwZSgmaGRyLT5zYWRkcikmKElQVjZfQUREUl9NVUxUSUNBU1R8SVBWNl9BRERSX0xPT1BCQUNLCi0JCQkJCQl8SVBWNl9BRERSX0xJTktMT0NBTCkpIHsKKwl9IGVsc2UgeworCQlpbnQgYWRkcnR5cGUgPSBpcHY2X2FkZHJfdHlwZSgmaGRyLT5zYWRkcik7CisKIAkJLyogVGhpcyBjaGVjayBpcyBzZWN1cml0eSBjcml0aWNhbC4gKi8KLQkJZ290byBlcnJvcjsKKwkJaWYgKGFkZHJ0eXBlICYgKElQVjZfQUREUl9NVUxUSUNBU1R8SVBWNl9BRERSX0xPT1BCQUNLKSkKKwkJCWdvdG8gZXJyb3I7CisJCWlmIChhZGRydHlwZSAmIElQVjZfQUREUl9MSU5LTE9DQUwpIHsKKwkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwKKwkJCQlJQ01QVjZfTk9UX05FSUdIQk9VUiwgMCwgc2tiLT5kZXYpOworCQkJZ290byBlcnJvcjsKKwkJfQogCX0KIAogCWlmIChza2ItPmxlbiA+IGRzdF9tdHUoZHN0KSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCBiYmU5OWY4Li44MzhiOGRkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMjgsNyArMjgsNyBAQAogCSAgcGFja2V0cyB3aGljaCBlbmFibGVzIHVzZXJzIHRvIHJlY2VpdmUgdGhlIGZpbHRlcmVkIHBhY2tldHMKIAkgIHdpdGggUVVFVUUgdGFyZ2V0IHVzaW5nIGxpYmlwcS4KIAotCSAgVEhpcyBvcHRpb24gZW5hYmxlcyB0aGUgb2xkIElQdjYtb25seSAiaXA2X3F1ZXVlIiBpbXBsZW1lbnRhdGlvbgorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgb2xkIElQdjYtb25seSAiaXA2X3F1ZXVlIiBpbXBsZW1lbnRhdGlvbgogCSAgd2hpY2ggaGFzIGJlZW4gb2Jzb2xldGVkIGJ5IHRoZSBuZXcgIm5mbmV0bGlua19xdWV1ZSIgY29kZSAoc2VlCiAJICBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUpLgogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKaW5kZXggNzZmMGNmNi4uN2UzMmUyYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwpAQCAtMjQsNTMgKzI0LDI5IEBACiAJc3RydWN0IGlwNnRfcmVwbGFjZSByZXBsOwogCXN0cnVjdCBpcDZ0X3N0YW5kYXJkIGVudHJpZXNbM107CiAJc3RydWN0IGlwNnRfZXJyb3IgdGVybTsKLX0gaW5pdGlhbF90YWJsZSBfX2luaXRkYXRhCi09IHsgeyAiZmlsdGVyIiwgRklMVEVSX1ZBTElEX0hPT0tTLCA0LAotICAgICAgc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDMgKyBzaXplb2Yoc3RydWN0IGlwNnRfZXJyb3IpLAotICAgICAgeyBbTkZfSVA2X0xPQ0FMX0lOXSA9IDAsCi0JW05GX0lQNl9GT1JXQVJEXSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JW05GX0lQNl9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDIgfSwKLSAgICAgIHsgW05GX0lQNl9MT0NBTF9JTl0gPSAwLAotCVtORl9JUDZfRk9SV0FSRF0gPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpLAotCVtORl9JUDZfTE9DQUxfT1VUXSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAyIH0sCi0gICAgICAwLCBOVUxMLCB7IH0gfSwKLSAgICB7Ci0JICAgIC8qIExPQ0FMX0lOICovCi0JICAgIHsgeyB7IHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sICIiLCAiIiwgeyAwIH0sIHsgMCB9LCAwLCAwLCAwIH0sCi0JCTAsCi0JCXNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSksCi0JCXNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCTAsIHsgMCwgMCB9LCB7IH0gfSwKLQkgICAgICB7IHsgeyB7IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCkpLCAiIiB9IH0sIHsgfSB9LAotCQktTkZfQUNDRVBUIC0gMSB9IH0sCi0JICAgIC8qIEZPUldBUkQgKi8KLQkgICAgeyB7IHsgeyB7IHsgMCB9IH0gfSwgeyB7IHsgMCB9IH0gfSwgeyB7IHsgMCB9IH0gfSwgeyB7IHsgMCB9IH0gfSwgIiIsICIiLCB7IDAgfSwgeyAwIH0sIDAsIDAsIDAgfSwKLQkJMCwKLQkJc2l6ZW9mKHN0cnVjdCBpcDZ0X2VudHJ5KSwKLQkJc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSwKLQkJMCwgeyAwLCAwIH0sIHsgfSB9LAotCSAgICAgIHsgeyB7IHsgSVA2VF9BTElHTihzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmRfdGFyZ2V0KSksICIiIH0gfSwgeyB9IH0sCi0JCS1ORl9BQ0NFUFQgLSAxIH0gfSwKLQkgICAgLyogTE9DQUxfT1VUICovCi0JICAgIHsgeyB7IHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sICIiLCAiIiwgeyAwIH0sIHsgMCB9LCAwLCAwLCAwIH0sCi0JCTAsCi0JCXNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSksCi0JCXNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCTAsIHsgMCwgMCB9LCB7IH0gfSwKLQkgICAgICB7IHsgeyB7IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCkpLCAiIiB9IH0sIHsgfSB9LAotCQktTkZfQUNDRVBUIC0gMSB9IH0KLSAgICB9LAotICAgIC8qIEVSUk9SICovCi0gICAgeyB7IHsgeyB7IHsgMCB9IH0gfSwgeyB7IHsgMCB9IH0gfSwgeyB7IHsgMCB9IH0gfSwgeyB7IHsgMCB9IH0gfSwgIiIsICIiLCB7IDAgfSwgeyAwIH0sIDAsIDAsIDAgfSwKLQkwLAotCXNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSksCi0Jc2l6ZW9mKHN0cnVjdCBpcDZ0X2Vycm9yKSwKLQkwLCB7IDAsIDAgfSwgeyB9IH0sCi0gICAgICB7IHsgeyB7IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X2Vycm9yX3RhcmdldCkpLCBJUDZUX0VSUk9SX1RBUkdFVCB9IH0sCi0JICB7IH0gfSwKLQkiRVJST1IiCi0gICAgICB9Ci0gICAgfQorfSBpbml0aWFsX3RhYmxlIF9faW5pdGRhdGEgPSB7CisJLnJlcGwgPSB7CisJCS5uYW1lID0gImZpbHRlciIsCisJCS52YWxpZF9ob29rcyA9IEZJTFRFUl9WQUxJRF9IT09LUywKKwkJLm51bV9lbnRyaWVzID0gNCwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogMyArIHNpemVvZihzdHJ1Y3QgaXA2dF9lcnJvciksCisJCS5ob29rX2VudHJ5ID0geworCQkJW05GX0lQNl9MT0NBTF9JTl0gPSAwLAorCQkJW05GX0lQNl9GT1JXQVJEXSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCisJCQlbTkZfSVA2X0xPQ0FMX09VVF0gPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogMgorCQl9LAorCQkudW5kZXJmbG93ID0geworCQkJW05GX0lQNl9MT0NBTF9JTl0gPSAwLAorCQkJW05GX0lQNl9GT1JXQVJEXSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCisJCQlbTkZfSVA2X0xPQ0FMX09VVF0gPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogMgorCQl9LAorCX0sCisJLmVudHJpZXMgPSB7CisJCUlQNlRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9JTiAqLworCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogRk9SV0FSRCAqLworCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfT1VUICovCisJfSwKKwkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKaW5kZXggYTlmMTBlMy4uZjJkMjY0OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwpAQCAtMzIsNzMgKzMyLDM1IEBACiAJc3RydWN0IGlwNnRfcmVwbGFjZSByZXBsOwogCXN0cnVjdCBpcDZ0X3N0YW5kYXJkIGVudHJpZXNbNV07CiAJc3RydWN0IGlwNnRfZXJyb3IgdGVybTsKLX0gaW5pdGlhbF90YWJsZSBfX2luaXRkYXRhCi09IHsgeyAibWFuZ2xlIiwgTUFOR0xFX1ZBTElEX0hPT0tTLCA2LAotICAgICAgc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDUgKyBzaXplb2Yoc3RydWN0IGlwNnRfZXJyb3IpLAotICAgICAgeyBbTkZfSVA2X1BSRV9ST1VUSU5HXSAJPSAwLAotCVtORl9JUDZfTE9DQUxfSU5dCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSwKLQlbTkZfSVA2X0ZPUldBUkRdCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDIsCi0JW05GX0lQNl9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAzLAotCVtORl9JUDZfUE9TVF9ST1VUSU5HXQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiA0fSwKLSAgICAgIHsgW05GX0lQNl9QUkVfUk9VVElOR10gCT0gMCwKLQlbTkZfSVA2X0xPQ0FMX0lOXQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JW05GX0lQNl9GT1JXQVJEXQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAyLAotCVtORl9JUDZfTE9DQUxfT1VUXSAJPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogMywKLQlbTkZfSVA2X1BPU1RfUk9VVElOR10JPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogNH0sCi0gICAgICAwLCBOVUxMLCB7IH0gfSwKLSAgICB7Ci0JICAgIC8qIFBSRV9ST1VUSU5HICovCi0JICAgIHsgeyB7IHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sICIiLCAiIiwgeyAwIH0sIHsgMCB9LCAwLCAwLCAwIH0sCi0JCTAsCi0JCXNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSksCi0JCXNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCTAsIHsgMCwgMCB9LCB7IH0gfSwKLQkgICAgICB7IHsgeyB7IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCkpLCAiIiB9IH0sIHsgfSB9LAotCQktTkZfQUNDRVBUIC0gMSB9IH0sCi0JICAgIC8qIExPQ0FMX0lOICovCi0JICAgIHsgeyB7IHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sICIiLCAiIiwgeyAwIH0sIHsgMCB9LCAwLCAwLCAwIH0sCi0JCTAsCi0JCXNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSksCi0JCXNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCTAsIHsgMCwgMCB9LCB7IH0gfSwKLQkgICAgICB7IHsgeyB7IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCkpLCAiIiB9IH0sIHsgfSB9LAotCQktTkZfQUNDRVBUIC0gMSB9IH0sCi0JICAgIC8qIEZPUldBUkQgKi8KLQkgICAgeyB7IHsgeyB7IHsgMCB9IH0gfSwgeyB7IHsgMCB9IH0gfSwgeyB7IHsgMCB9IH0gfSwgeyB7IHsgMCB9IH0gfSwgIiIsICIiLCB7IDAgfSwgeyAwIH0sIDAsIDAsIDAgfSwKLQkJMCwKLQkJc2l6ZW9mKHN0cnVjdCBpcDZ0X2VudHJ5KSwKLQkJc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSwKLQkJMCwgeyAwLCAwIH0sIHsgfSB9LAotCSAgICAgIHsgeyB7IHsgSVA2VF9BTElHTihzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmRfdGFyZ2V0KSksICIiIH0gfSwgeyB9IH0sCi0JCS1ORl9BQ0NFUFQgLSAxIH0gfSwKLQkgICAgLyogTE9DQUxfT1VUICovCi0JICAgIHsgeyB7IHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sICIiLCAiIiwgeyAwIH0sIHsgMCB9LCAwLCAwLCAwIH0sCi0JCTAsCi0JCXNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSksCi0JCXNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCTAsIHsgMCwgMCB9LCB7IH0gfSwKLQkgICAgICB7IHsgeyB7IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCkpLCAiIiB9IH0sIHsgfSB9LAotCQktTkZfQUNDRVBUIC0gMSB9IH0sCi0JICAgIC8qIFBPU1RfUk9VVElORyAqLwotCSAgICB7IHsgeyB7IHsgeyAwIH0gfSB9LCB7IHsgeyAwIH0gfSB9LCB7IHsgeyAwIH0gfSB9LCB7IHsgeyAwIH0gfSB9LCAiIiwgIiIsIHsgMCB9LCB7IDAgfSwgMCwgMCwgMCB9LAotCQkwLAotCQlzaXplb2Yoc3RydWN0IGlwNnRfZW50cnkpLAotCQlzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpLAotCQkwLCB7IDAsIDAgfSwgeyB9IH0sCi0JICAgICAgeyB7IHsgeyBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZF90YXJnZXQpKSwgIiIgfSB9LCB7IH0gfSwKLQkJLU5GX0FDQ0VQVCAtIDEgfSB9Ci0gICAgfSwKLSAgICAvKiBFUlJPUiAqLwotICAgIHsgeyB7IHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sIHsgeyB7IDAgfSB9IH0sICIiLCAiIiwgeyAwIH0sIHsgMCB9LCAwLCAwLCAwIH0sCi0JMCwKLQlzaXplb2Yoc3RydWN0IGlwNnRfZW50cnkpLAotCXNpemVvZihzdHJ1Y3QgaXA2dF9lcnJvciksCi0JMCwgeyAwLCAwIH0sIHsgfSB9LAotICAgICAgeyB7IHsgeyBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXA2dF9lcnJvcl90YXJnZXQpKSwgSVA2VF9FUlJPUl9UQVJHRVQgfSB9LAotCSAgeyB9IH0sCi0JIkVSUk9SIgotICAgICAgfQotICAgIH0KK30gaW5pdGlhbF90YWJsZSBfX2luaXRkYXRhID0geworCS5yZXBsID0geworCQkubmFtZSA9ICJtYW5nbGUiLAorCQkudmFsaWRfaG9va3MgPSBNQU5HTEVfVkFMSURfSE9PS1MsCisJCS5udW1fZW50cmllcyA9IDYsCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDUgKyBzaXplb2Yoc3RydWN0IGlwNnRfZXJyb3IpLAorCQkuaG9va19lbnRyeSA9IHsKKwkJCVtORl9JUDZfUFJFX1JPVVRJTkddIAk9IDAsCisJCQlbTkZfSVA2X0xPQ0FMX0lOXQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCisJCQlbTkZfSVA2X0ZPUldBUkRdCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDIsCisJCQlbTkZfSVA2X0xPQ0FMX09VVF0gCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDMsCisJCQlbTkZfSVA2X1BPU1RfUk9VVElOR10JPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogNCwKKwkJfSwKKwkJLnVuZGVyZmxvdyA9IHsKKwkJCVtORl9JUDZfUFJFX1JPVVRJTkddIAk9IDAsCisJCQlbTkZfSVA2X0xPQ0FMX0lOXQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCisJCQlbTkZfSVA2X0ZPUldBUkRdCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDIsCisJCQlbTkZfSVA2X0xPQ0FMX09VVF0gCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDMsCisJCQlbTkZfSVA2X1BPU1RfUk9VVElOR10JPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogNCwKKwkJfSwKKwl9LAorCS5lbnRyaWVzID0geworCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogUFJFX1JPVVRJTkcgKi8KKwkJSVA2VF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIExPQ0FMX0lOICovCisJCUlQNlRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBGT1JXQVJEICovCisJCUlQNlRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9PVVQgKi8KKwkJSVA2VF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIFBPU1RfUk9VVElORyAqLworCX0sCisJLnRlcm0gPSBJUDZUX0VSUk9SX0lOSVQsCQkvKiBFUlJPUiAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfbWFuZ2xlciA9IHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwppbmRleCBhM2ViNWI4Li4wYWNkYTQ1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCkBAIC0zNSw1NiArMzUsMTAgQEAKIAkJfSwKIAl9LAogCS5lbnRyaWVzID0gewotCQkvKiBQUkVfUk9VVElORyAqLwotCQl7Ci0JCQkuZW50cnkgPSB7Ci0JCQkJLnRhcmdldF9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGlwNnRfZW50cnkpLAotCQkJCS5uZXh0X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCQl9LAotCQkJLnRhcmdldCA9IHsKLQkJCQkudGFyZ2V0ID0gewotCQkJCQkudSA9IHsKLQkJCQkJCS50YXJnZXRfc2l6ZSA9IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCkpLAotCQkJCQl9LAotCQkJCX0sCi0JCQkJLnZlcmRpY3QgPSAtTkZfQUNDRVBUIC0gMSwKLQkJCX0sCi0JCX0sCi0KLQkJLyogTE9DQUxfT1VUICovCi0JCXsKLQkJCS5lbnRyeSA9IHsKLQkJCQkudGFyZ2V0X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSksCi0JCQkJLm5leHRfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSwKLQkJCX0sCi0JCQkudGFyZ2V0ID0gewotCQkJCS50YXJnZXQgPSB7Ci0JCQkJCS51ID0gewotCQkJCQkJLnRhcmdldF9zaXplID0gSVA2VF9BTElHTihzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmRfdGFyZ2V0KSksCi0JCQkJCX0sCi0JCQkJfSwKLQkJCQkudmVyZGljdCA9IC1ORl9BQ0NFUFQgLSAxLAotCQkJfSwKLQkJfSwKKwkJSVA2VF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIFBSRV9ST1VUSU5HICovCisJCUlQNlRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9PVVQgKi8KIAl9LAotCS8qIEVSUk9SICovCi0JLnRlcm0gPSB7Ci0JCS5lbnRyeSA9IHsKLQkJCS50YXJnZXRfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2VudHJ5KSwKLQkJCS5uZXh0X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXA2dF9lcnJvciksCi0JCX0sCi0JCS50YXJnZXQgPSB7Ci0JCQkudGFyZ2V0ID0gewotCQkJCS51ID0gewotCQkJCQkudXNlciA9IHsKLQkJCQkJCS50YXJnZXRfc2l6ZSA9IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X2Vycm9yX3RhcmdldCkpLAotCQkJCQkJLm5hbWUgPSBJUDZUX0VSUk9SX1RBUkdFVCwKLQkJCQkJfSwKLQkJCQl9LAotCQkJfSwKLQkJCS5lcnJvcm5hbWUgPSAiRVJST1IiLAotCQl9LAotCX0KKwkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwppbmRleCA2ZDJhMDgyLi5kYzQ0MmZiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKQEAgLTE3Nyw4ICsxNzcsNyBAQAogCiAJcHJvdG9mZiA9IG5mX2N0X2lwdjZfc2tpcF9leHRoZHIoKnBza2IsIGV4dG9mZiwgJnBudW0sCiAJCQkJCSAoKnBza2IpLT5sZW4gLSBleHRvZmYpOwotCWlmIChwcm90b2ZmIDwgMCB8fCBwcm90b2ZmID4gKCpwc2tiKS0+bGVuIHx8Ci0JICAgIHBudW0gPT0gTkVYVEhEUl9GUkFHTUVOVCkgeworCWlmIChwcm90b2ZmID4gKCpwc2tiKS0+bGVuIHx8IHBudW0gPT0gTkVYVEhEUl9GUkFHTUVOVCkgewogCQlERUJVR1AoInByb3RvIGhlYWRlciBub3QgZm91bmRcbiIpOwogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCmluZGV4IDBiZTc5MGQuLjg4MTRiOTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwpAQCAtMTY4LDggKzE2OCw3IEBACiAJCQkJCSAgIHNrYi0+bGVuIC0gaW5pcDZvZmYKIAkJCQkJCSAgICAtIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwogCi0JaWYgKChpbnByb3RvZmYgPCAwKSB8fCAoaW5wcm90b2ZmID4gc2tiLT5sZW4pIHx8Ci0JICAgIChpbnByb3RvbnVtID09IE5FWFRIRFJfRlJBR01FTlQpKSB7CisJaWYgKChpbnByb3RvZmYgPiBza2ItPmxlbikgfHwgKGlucHJvdG9udW0gPT0gTkVYVEhEUl9GUkFHTUVOVCkpIHsKIAkJREVCVUdQKCJpY21wdjZfZXJyb3I6IENhbid0IGdldCBwcm90b2NvbCBoZWFkZXIgaW4gSUNNUHY2IHBheWxvYWQuXG4iKTsKIAkJcmV0dXJuIC1ORl9BQ0NFUFQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCAwMDlhMTA0Li5hNTg0NTlhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtODE4LDggKzgxOCwxMiBAQAogCWlmIChmaW5hbF9wKQogCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZmluYWxfcCk7CiAKLQlpZiAoKGVyciA9IHhmcm1fbG9va3VwKCZkc3QsICZmbCwgc2ssIDEpKSA8IDApCi0JCWdvdG8gb3V0OworCWlmICgoZXJyID0gX194ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAxKSkgPCAwKSB7CisJCWlmIChlcnIgPT0gLUVSRU1PVEUpCisJCQllcnIgPSBpcDZfZHN0X2JsYWNraG9sZShzaywgJmRzdCwgJmZsKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAoaGxpbWl0IDwgMCkgewogCQlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmZmwuZmw2X2RzdCkpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBiNDZhZDUzLi4xMzI0YjA2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTExOSw2ICsxMTksMTkgQEAKIAkuZW50cnlfc2l6ZQkJPQlzaXplb2Yoc3RydWN0IHJ0Nl9pbmZvKSwKIH07CiAKK3N0YXRpYyB2b2lkIGlwNl9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgbXR1KQoreworfQorCitzdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0geworCS5mYW1pbHkJCQk9CUFGX0lORVQ2LAorCS5wcm90b2NvbAkJPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpLAorCS5kZXN0cm95CQk9CWlwNl9kc3RfZGVzdHJveSwKKwkuY2hlY2sJCQk9CWlwNl9kc3RfY2hlY2ssCisJLnVwZGF0ZV9wbXR1CQk9CWlwNl9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCisJLmVudHJ5X3NpemUJCT0Jc2l6ZW9mKHN0cnVjdCBydDZfaW5mbyksCit9OworCiBzdHJ1Y3QgcnQ2X2luZm8gaXA2X251bGxfZW50cnkgPSB7CiAJLnUgPSB7CiAJCS5kc3QgPSB7CkBAIC04MzMsNiArODQ2LDU0IEBACiAKIEVYUE9SVF9TWU1CT0woaXA2X3JvdXRlX291dHB1dCk7CiAKK3N0YXRpYyBpbnQgaXA2X2JsYWNraG9sZV9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGlwNl9kc3RfYmxhY2tob2xlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqKmRzdHAsIHN0cnVjdCBmbG93aSAqZmwpCit7CisJc3RydWN0IHJ0Nl9pbmZvICpvcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopICpkc3RwOworCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopCisJCWRzdF9hbGxvYygmaXA2X2RzdF9ibGFja2hvbGVfb3BzKTsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpuZXcgPSBOVUxMOworCisJaWYgKHJ0KSB7CisJCW5ldyA9ICZydC0+dS5kc3Q7CisKKwkJYXRvbWljX3NldCgmbmV3LT5fX3JlZmNudCwgMSk7CisJCW5ldy0+X191c2UgPSAxOworCQluZXctPmlucHV0ID0gaXA2X2JsYWNraG9sZV9vdXRwdXQ7CisJCW5ldy0+b3V0cHV0ID0gaXA2X2JsYWNraG9sZV9vdXRwdXQ7CisKKwkJbWVtY3B5KG5ldy0+bWV0cmljcywgb3J0LT51LmRzdC5tZXRyaWNzLCBSVEFYX01BWCpzaXplb2YodTMyKSk7CisJCW5ldy0+ZGV2ID0gb3J0LT51LmRzdC5kZXY7CisJCWlmIChuZXctPmRldikKKwkJCWRldl9ob2xkKG5ldy0+ZGV2KTsKKwkJcnQtPnJ0NmlfaWRldiA9IG9ydC0+cnQ2aV9pZGV2OworCQlpZiAocnQtPnJ0NmlfaWRldikKKwkJCWluNl9kZXZfaG9sZChydC0+cnQ2aV9pZGV2KTsKKwkJcnQtPnJ0NmlfZXhwaXJlcyA9IDA7CisKKwkJaXB2Nl9hZGRyX2NvcHkoJnJ0LT5ydDZpX2dhdGV3YXksICZvcnQtPnJ0NmlfZ2F0ZXdheSk7CisJCXJ0LT5ydDZpX2ZsYWdzID0gb3J0LT5ydDZpX2ZsYWdzICYgflJURl9FWFBJUkVTOworCQlydC0+cnQ2aV9tZXRyaWMgPSAwOworCisJCW1lbWNweSgmcnQtPnJ0NmlfZHN0LCAmb3J0LT5ydDZpX2RzdCwgc2l6ZW9mKHN0cnVjdCBydDZrZXkpKTsKKyNpZmRlZiBDT05GSUdfSVBWNl9TVUJUUkVFUworCQltZW1jcHkoJnJ0LT5ydDZpX3NyYywgJm9ydC0+cnQ2aV9zcmMsIHNpemVvZihzdHJ1Y3QgcnQ2a2V5KSk7CisjZW5kaWYKKworCQlkc3RfZnJlZShuZXcpOworCX0KKworCWRzdF9yZWxlYXNlKCpkc3RwKTsKKwkqZHN0cCA9IG5ldzsKKwlyZXR1cm4gKG5ldyA/IDAgOiAtRU5PTUVNKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlwNl9kc3RfYmxhY2tob2xlKTsKKwogLyoKICAqCURlc3RpbmF0aW9uIGNhY2hlIHN1cHBvcnQgZnVuY3Rpb25zCiAgKi8KQEAgLTI0OTUsNiArMjU1Niw4IEBACiAJaXA2X2RzdF9vcHMua21lbV9jYWNoZXAgPQogCQlrbWVtX2NhY2hlX2NyZWF0ZSgiaXA2X2RzdF9jYWNoZSIsIHNpemVvZihzdHJ1Y3QgcnQ2X2luZm8pLCAwLAogCQkJCSAgU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUEFOSUMsIE5VTEwsIE5VTEwpOworCWlwNl9kc3RfYmxhY2tob2xlX29wcy5rbWVtX2NhY2hlcCA9IGlwNl9kc3Rfb3BzLmttZW1fY2FjaGVwOworCiAJZmliNl9pbml0KCk7CiAjaWZkZWYgCUNPTkZJR19QUk9DX0ZTCiAJcCA9IHByb2NfbmV0X2NyZWF0ZSgiaXB2Nl9yb3V0ZSIsIDAsIHJ0Nl9wcm9jX2luZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggZTJmMjVlYS4uNGYwNmE1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC0yNjUsOCArMjY1LDEyIEBACiAJaWYgKGZpbmFsX3ApCiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBmaW5hbF9wKTsKIAotCWlmICgoZXJyID0geGZybV9sb29rdXAoJmRzdCwgJmZsLCBzaywgMSkpIDwgMCkKLQkJZ290byBmYWlsdXJlOworCWlmICgoZXJyID0gX194ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAxKSkgPCAwKSB7CisJCWlmIChlcnIgPT0gLUVSRU1PVEUpCisJCQllcnIgPSBpcDZfZHN0X2JsYWNraG9sZShzaywgJmRzdCwgJmZsKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGZhaWx1cmU7CisJfQogCiAJaWYgKHNhZGRyID09IE5VTEwpIHsKIAkJc2FkZHIgPSAmZmwuZmw2X3NyYzsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggYjA4M2MwOS4uZDFmYmRkZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTUyLDkgKzUyLDI4IEBACiAKIERFRklORV9TTk1QX1NUQVQoc3RydWN0IHVkcF9taWIsIHVkcF9zdGF0c19pbjYpIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyBpbnQgaXB2Nl9yY3Zfc2FkZHJfYW55KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisKKwlyZXR1cm4gaXB2Nl9hZGRyX2FueSgmbnAtPnJjdl9zYWRkcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXB2Nl9oYXNoX3BvcnRfYW5kX3Jjdl9zYWRkcihfX3UxNiBwb3J0LAorCQkJCQkJIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gcG9ydDsKK30KKworY29uc3Qgc3RydWN0IHVkcF9nZXRfcG9ydF9vcHMgdWRwX2lwdjZfb3BzID0geworCS5zYWRkcl9jbXAgPSBpcHY2X3Jjdl9zYWRkcl9lcXVhbCwKKwkuc2FkZHJfYW55ID0gaXB2Nl9yY3Zfc2FkZHJfYW55LAorCS5oYXNoX3BvcnRfYW5kX3Jjdl9zYWRkciA9IGlwdjZfaGFzaF9wb3J0X2FuZF9yY3Zfc2FkZHIsCit9OworCiBzdGF0aWMgaW5saW5lIGludCB1ZHBfdjZfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKQogewotCXJldHVybiB1ZHBfZ2V0X3BvcnQoc2ssIHNudW0sIGlwdjZfcmN2X3NhZGRyX2VxdWFsKTsKKwlyZXR1cm4gdWRwX2dldF9wb3J0KHNrLCBzbnVtLCAmdWRwX2lwdjZfb3BzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzb2NrICpfX3VkcDZfbGliX2xvb2t1cChzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBfX2JlMTYgc3BvcnQsCkBAIC03NDgsOCArNzY3LDEyIEBACiAJaWYgKGZpbmFsX3ApCiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBmaW5hbF9wKTsKIAotCWlmICgoZXJyID0geGZybV9sb29rdXAoJmRzdCwgJmZsLCBzaywgMSkpIDwgMCkKLQkJZ290byBvdXQ7CisJaWYgKChlcnIgPSBfX3hmcm1fbG9va3VwKCZkc3QsICZmbCwgc2ssIDEpKSA8IDApIHsKKwkJaWYgKGVyciA9PSAtRVJFTU9URSkKKwkJCWVyciA9IGlwNl9kc3RfYmxhY2tob2xlKHNrLCAmZHN0LCAmZmwpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0OworCX0KIAogCWlmIChobGltaXQgPCAwKSB7CiAJCWlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KCZmbC5mbDZfZHN0KSkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcF9pbXBsLmggYi9uZXQvaXB2Ni91ZHBfaW1wbC5oCmluZGV4IDZlMjUyZjMuLjM2YjBjMTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcF9pbXBsLmgKKysrIGIvbmV0L2lwdjYvdWRwX2ltcGwuaApAQCAtNiw2ICs2LDggQEAKICNpbmNsdWRlIDxuZXQvYWRkcmNvbmYuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZHBfZ2V0X3BvcnRfb3BzIHVkcF9pcHY2X29wczsKKwogZXh0ZXJuIGludCAgCV9fdWRwNl9saWJfcmN2KHN0cnVjdCBza19idWZmICoqLCBzdHJ1Y3QgaGxpc3RfaGVhZCBbXSwgaW50ICk7CiBleHRlcm4gdm9pZCAJX191ZHA2X2xpYl9lcnIoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICosCiAJCQkgICAgICAgaW50ICwgaW50ICwgaW50ICwgX19iZTMyICwgc3RydWN0IGhsaXN0X2hlYWQgW10pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwbGl0ZS5jIGIvbmV0L2lwdjYvdWRwbGl0ZS5jCmluZGV4IGY1NDAxNmEuLmM0MGE1MTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcGxpdGUuYworKysgYi9uZXQvaXB2Ni91ZHBsaXRlLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogc3RhdGljIGludCB1ZHBsaXRlX3Y2X2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSkKIHsKLQlyZXR1cm4gdWRwbGl0ZV9nZXRfcG9ydChzaywgc251bSwgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwpOworCXJldHVybiB1ZHBsaXRlX2dldF9wb3J0KHNrLCBzbnVtLCAmdWRwX2lwdjZfb3BzKTsKIH0KIAogc3RydWN0IHByb3RvIHVkcGxpdGV2Nl9wcm90ID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKaW5kZXggZDdlZDhhYS4uYzg1ODUzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCkBAIC0xMDQsMTAgKzEwNCw4IEBACiAJbmZfcmVzZXQoc2tiKTsKIAogCWlmIChkZWNhcHMpIHsKLQkJaWYgKCEoc2tiLT5kZXYtPmZsYWdzJklGRl9MT09QQkFDSykpIHsKLQkJCWRzdF9yZWxlYXNlKHNrYi0+ZHN0KTsKLQkJCXNrYi0+ZHN0ID0gTlVMTDsKLQkJfQorCQlkc3RfcmVsZWFzZShza2ItPmRzdCk7CisJCXNrYi0+ZHN0ID0gTlVMTDsKIAkJbmV0aWZfcngoc2tiKTsKIAkJcmV0dXJuIC0xOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jIGIvbmV0L2lwdjYveGZybTZfbW9kZV90dW5uZWwuYwppbmRleCBhNmMwY2RmLi45ZmM5NWJjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L3hmcm02X21vZGVfdHVubmVsLmMKQEAgLTgwLDYgKzgwLDcgQEAKIAl0b3BfaXBoLT5ob3BfbGltaXQgPSBkc3RfbWV0cmljKGRzdC0+Y2hpbGQsIFJUQVhfSE9QTElNSVQpOwogCWlwdjZfYWRkcl9jb3B5KCZ0b3BfaXBoLT5zYWRkciwgKHN0cnVjdCBpbjZfYWRkciAqKSZ4LT5wcm9wcy5zYWRkcik7CiAJaXB2Nl9hZGRyX2NvcHkoJnRvcF9pcGgtPmRhZGRyLCAoc3RydWN0IGluNl9hZGRyICopJngtPmlkLmRhZGRyKTsKKwlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHgvYWZfaXB4LmMgYi9uZXQvaXB4L2FmX2lweC5jCmluZGV4IDM5MmY4YmMuLjg0MDA1MjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHgvYWZfaXB4LmMKKysrIGIvbmV0L2lweC9hZl9pcHguYwpAQCAtODcsNyArODcsNyBAQAogCQkJICAgIHVuc2lnbmVkIGNoYXIgKm5vZGUpOwogZXh0ZXJuIHZvaWQgaXB4cnRyX2RlbF9yb3V0ZXMoc3RydWN0IGlweF9pbnRlcmZhY2UgKmludHJmYyk7CiBleHRlcm4gaW50IGlweHJ0cl9yb3V0ZV9wYWNrZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfaXB4ICp1c2lweCwKLQkJCSAgICAgICBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGxlbiwgaW50IG5vYmxvY2spOworCQkJICAgICAgIHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3QgbGVuLCBpbnQgbm9ibG9jayk7CiBleHRlcm4gaW50IGlweHJ0cl9yb3V0ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gc3RydWN0IGlweF9yb3V0ZSAqaXB4cnRyX2xvb2t1cChfX2JlMzIgbmV0KTsKIGV4dGVybiBpbnQgaXB4cnRyX2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwpAQCAtMTk2MSw3ICsxOTYxLDYgQEAKIAkuc2VuZHBhZ2UJPSBzb2NrX25vX3NlbmRwYWdlLAogfTsKIAotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiBTT0NLT1BTX1dSQVAoaXB4X2RncmFtLCBQRl9JUFgpOwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlweF84MDIzX3BhY2tldF90eXBlID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvS2NvbmZpZyBiL25ldC9pcmRhL0tjb25maWcKaW5kZXggOWVmYjE3Yi4uYzg2NzFhNyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvS2NvbmZpZworKysgYi9uZXQvaXJkYS9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogIwogCiBtZW51Y29uZmlnIElSREEKLQlkZXBlbmRzIG9uIE5FVAorCWRlcGVuZHMgb24gTkVUICYmICFTMzkwCiAJdHJpc3RhdGUgIklyREEgKGluZnJhcmVkKSBzdWJzeXN0ZW0gc3VwcG9ydCIKIAlzZWxlY3QgQ1JDX0NDSVRUCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvYWZfaXJkYS5jIGIvbmV0L2lyZGEvYWZfaXJkYS5jCmluZGV4IDA2Yzk3YzYuLmRjZDdlMzIgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2FmX2lyZGEuYworKysgYi9uZXQvaXJkYS9hZl9pcmRhLmMKQEAgLTI1MzgsNyArMjUzOCw2IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19JUkRBX1VMVFJBICovCiAKLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogU09DS09QU19XUkFQKGlyZGFfc3RyZWFtLCBQRl9JUkRBKTsKIFNPQ0tPUFNfV1JBUChpcmRhX3NlcXBhY2tldCwgUEZfSVJEQSk7CiBTT0NLT1BTX1dSQVAoaXJkYV9kZ3JhbSwgUEZfSVJEQSk7CmRpZmYgLS1naXQgYS9uZXQvaXVjdi9pdWN2LmMgYi9uZXQvaXVjdi9pdWN2LmMKaW5kZXggZmIzZmFmNy4uYjczMzMwNiAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvaXVjdi5jCisrKyBiL25ldC9pdWN2L2l1Y3YuYwpAQCAtNTU2LDYgKzU1Niw3IEBACiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CiAJCWlmICghcGVyY3B1X3BvcHVsYXRlKGl1Y3ZfaXJxX2RhdGEsCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IGl1Y3ZfaXJxX2RhdGEpLAogCQkJCSAgICAgR0ZQX0tFUk5FTHxHRlBfRE1BLCBjcHUpKQpAQCAtNTY3LDE1ICs1NjgsMjAgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CiAJY2FzZSBDUFVfREVBRDoKKwljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAkJcGVyY3B1X2RlcG9wdWxhdGUoaXVjdl9wYXJhbSwgY3B1KTsKIAkJcGVyY3B1X2RlcG9wdWxhdGUoaXVjdl9pcnFfZGF0YSwgY3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CiAJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CisJY2FzZSBDUFVfRE9XTl9GQUlMRURfRlJPWkVOOgogCQlzbXBfY2FsbF9mdW5jdGlvbl9vbihpdWN2X2RlY2xhcmVfY3B1LCBOVUxMLCAwLCAxLCBjcHUpOwogCQlicmVhazsKIAljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKIAkJY3B1bWFzayA9IGl1Y3ZfYnVmZmVyX2NwdW1hc2s7CiAJCWNwdV9jbGVhcihjcHUsIGNwdW1hc2spOwogCQlpZiAoY3B1c19lbXB0eShjcHVtYXNrKSkKZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jCmluZGV4IGE5OTQ0NDEuLmQzMDJkZGEgMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKKysrIGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtMTQ0OCw4ICsxNDQ4LDYgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBrbV9ldmVudCBjOwogCi0JeGZybV9wcm9iZV9hbGdzKCk7Ci0KIAl4ID0gcGZrZXlfbXNnMnhmcm1fc3RhdGUoaGRyLCBleHRfaGRycyk7CiAJaWYgKElTX0VSUih4KSkKIAkJcmV0dXJuIFBUUl9FUlIoeCk7CmRpZmYgLS1naXQgYS9uZXQvbGxjL2FmX2xsYy5jIGIvbmV0L2xsYy9hZl9sbGMuYwppbmRleCA3ZDlmYTM4Li42YjhhMTAzIDEwMDY0NAotLS0gYS9uZXQvbGxjL2FmX2xsYy5jCisrKyBiL25ldC9sbGMvYWZfbGxjLmMKQEAgLTMyNCw3ICszMjQsNyBAQAogCQltZW1zZXQoJmxhZGRyLCAwLCBzaXplb2YobGFkZHIpKTsKIAkJbWVtc2V0KCZkYWRkciwgMCwgc2l6ZW9mKGRhZGRyKSk7CiAJCS8qCi0JCSAqIEZJWE1FOiBjaGVjayBpZiB0aGUgdGhlIGFkZHJlc3MgaXMgbXVsdGljYXN0LAorCQkgKiBGSVhNRTogY2hlY2sgaWYgdGhlIGFkZHJlc3MgaXMgbXVsdGljYXN0LAogCQkgKiAJICBvbmx5IFNPQ0tfREdSQU0gY2FuIGRvIHRoaXMuCiAJCSAqLwogCQltZW1jcHkobGFkZHIubWFjLCBhZGRyLT5zbGxjX21hYywgSUZIV0FERFJMRU4pOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMS5jIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMS5jCmluZGV4IDZlMzZkZjYuLjRlODRmMjQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTEuYworKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExLmMKQEAgLTI0NzQsNiArMjQ3NCw4IEBACiAJaWYgKHNkYXRhLT50eXBlID09IElFRUU4MDIxMV9JRl9UWVBFX1NUQSAmJgogCSAgICAhbG9jYWwtPnVzZXJfc3BhY2VfbWxtZSkKIAkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwllbHNlCisJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJcmV0dXJuIDA7CkBAIC0zMjc4LDggKzMyODAsMTAgQEAKIAkJCXJldHVybiBUWFJYX0RST1A7CiAJCX0KIAl9Ci0Jd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZlbnRyeS0+c2tiX2xpc3QpKSkKKwl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJmVudHJ5LT5za2JfbGlzdCkpKSB7CiAJCW1lbWNweShza2JfcHV0KHJ4LT5za2IsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwl9CiAKIAkvKiBDb21wbGV0ZSBmcmFtZSBoYXMgYmVlbiByZWFzc2VtYmxlZCAtIHByb2Nlc3MgaXQgbm93ICovCiAJcngtPmZyYWdtZW50ZWQgPSAxOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9zdGEuYyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfc3RhLmMKaW5kZXggODIyOTE3ZC4uOWYzMGFlNCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9zdGEuYworKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX3N0YS5jCkBAIC0xNyw2ICsxNyw3IEBACiAgKiBzY2FuIHJlc3VsdCB0YWJsZSBmaWx0ZXJpbmcgKGJ5IGNhcGFiaWxpdHkgKHByaXZhY3ksIElCU1MvQlNTLCBXUEEvUlNOIElFLAogICogICAgU1NJRCkKICAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTI3LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKQEAgLTExNTUsNiArMTE1NSw4IEBACiAJaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBUCBkZW5pZWQgYXNzb2NpYXRpb24gKGNvZGU9JWQpXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXNfY29kZSk7CisJCWlmIChzdGF0dXNfY29kZSA9PSBXTEFOX1NUQVRVU19SRUFTU09DX05PX0FTU09DKQorCQkJaWZzdGEtPnByZXZfYnNzaWRfc2V0ID0gMDsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjk5NSw3ICsyOTk3LDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKIAkvKiBUT0RPOiBDb3VsZCBjb25zaWRlciByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyeSBhbmQKIAkgKiBhbGxvdyBuZXcgb25lIHRvIGJlIGFkZGVkLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGVhNjIxMWMuLmE1NjdkYWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCiAJICBQbGVhc2Ugbm90ZSB0aGF0IG5vdCBhbGwgUFBUUCBtb2RlcyBvZiBvcGVyYXRpb24gYXJlIHN1cHBvcnRlZCB5ZXQuCiAJICBTcGVjaWZpY2FsbHkgdGhlc2UgbGltaXRhdGlvbnMgZXhpc3Q6Ci0JICAgIC0gQmxpbmR5IGFzc3VtZXMgdGhhdCBjb250cm9sIGNvbm5lY3Rpb25zIGFyZSBhbHdheXMgZXN0YWJsaXNoZWQKKwkgICAgLSBCbGluZGx5IGFzc3VtZXMgdGhhdCBjb250cm9sIGNvbm5lY3Rpb25zIGFyZSBhbHdheXMgZXN0YWJsaXNoZWQKIAkgICAgICBpbiBQTlMtPlBBQyBkaXJlY3Rpb24uIFRoaXMgaXMgYSB2aW9sYXRpb24gb2YgUkZDMjYzNy4KIAkgICAgLSBPbmx5IHN1cHBvcnRzIGEgc2luZ2xlIGNhbGwgd2l0aGluIGVhY2ggc2Vzc2lvbgogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggZTEzMmM4YS4uNDgzZTkyNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtMjk4LDggKzI5OCw2IEBACiBkZXN0cm95X2Nvbm50cmFjayhzdHJ1Y3QgbmZfY29ubnRyYWNrICpuZmN0KQogewogCXN0cnVjdCBuZl9jb25uICpjdCA9IChzdHJ1Y3QgbmZfY29ubiAqKW5mY3Q7Ci0Jc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscCA9IG5mY3RfaGVscChjdCk7Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvOwogCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bzsKIAl0eXBlb2YobmZfY29ubnRyYWNrX2Rlc3Ryb3llZCkgZGVzdHJveWVkOwogCkBAIC0zMTAsMTcgKzMwOCwxMCBAQAogCW5mX2Nvbm50cmFja19ldmVudChJUENUX0RFU1RST1ksIGN0KTsKIAlzZXRfYml0KElQU19EWUlOR19CSVQsICZjdC0+c3RhdHVzKTsKIAotCWlmIChoZWxwICYmIGhlbHAtPmhlbHBlciAmJiBoZWxwLT5oZWxwZXItPmRlc3Ryb3kpCi0JCWhlbHAtPmhlbHBlci0+ZGVzdHJveShjdCk7Ci0KIAkvKiBUbyBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSB3ZWlyZCBsb2NraW5nIGlzc3VlcyBoZXJlOgogCSAqIGRlc3Ryb3lfY29ubnRyYWNrKCkgTVVTVCBOT1QgYmUgY2FsbGVkIHdpdGggYSB3cml0ZSBsb2NrCiAJICogdG8gbmZfY29ubnRyYWNrX2xvY2shISEgLUhXICovCiAJcmN1X3JlYWRfbG9jaygpOwotCWwzcHJvdG8gPSBfX25mX2N0X2wzcHJvdG9fZmluZChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLmwzbnVtKTsKLQlpZiAobDNwcm90byAmJiBsM3Byb3RvLT5kZXN0cm95KQotCQlsM3Byb3RvLT5kZXN0cm95KGN0KTsKLQogCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLmwzbnVtLAogCQkJCSAgICAgICBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LnByb3RvbnVtKTsKIAlpZiAobDRwcm90byAmJiBsNHByb3RvLT5kZXN0cm95KQpAQCAtMzU4LDYgKzM0OSwxMCBAQAogc3RhdGljIHZvaWQgZGVhdGhfYnlfdGltZW91dCh1bnNpZ25lZCBsb25nIHVsX2Nvbm50cmFjaykKIHsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSAodm9pZCAqKXVsX2Nvbm50cmFjazsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKKworCWlmIChoZWxwICYmIGhlbHAtPmhlbHBlciAmJiBoZWxwLT5oZWxwZXItPmRlc3Ryb3kpCisJCWhlbHAtPmhlbHBlci0+ZGVzdHJveShjdCk7CiAKIAl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAJLyogSW5zaWRlIGxvY2sgc28gcHJlZW1wdCBpcyBkaXNhYmxlZCBvbiBtb2R1bGUgcmVtb3ZhbCBwYXRoLgpAQCAtODkzLDggKzg4OCwxMyBAQAogCU5GX0NUX0RVTVBfVFVQTEUobmV3cmVwbHkpOwogCiAJY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlID0gKm5ld3JlcGx5OwotCWlmICghY3QtPm1hc3RlciAmJiBoZWxwICYmIGhlbHAtPmV4cGVjdGluZyA9PSAwKQotCQloZWxwLT5oZWxwZXIgPSBfX25mX2N0X2hlbHBlcl9maW5kKG5ld3JlcGx5KTsKKwlpZiAoIWN0LT5tYXN0ZXIgJiYgaGVscCAmJiBoZWxwLT5leHBlY3RpbmcgPT0gMCkgeworCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyOworCQloZWxwZXIgPSBfX25mX2N0X2hlbHBlcl9maW5kKG5ld3JlcGx5KTsKKwkJaWYgKGhlbHBlcikKKwkJCW1lbXNldCgmaGVscC0+aGVscCwgMCwgc2l6ZW9mKGhlbHAtPmhlbHApKTsKKwkJaGVscC0+aGVscGVyID0gaGVscGVyOworCX0KIAl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19hbHRlcl9yZXBseSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCmluZGV4IGMzMWFmMjkuLjExN2NiZmQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaTsKIAogCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkvKiBjaG9vc2UgdGhlIHRoZSBvbGRlc3QgZXhwZWN0YXRpb24gdG8gZXZpY3QgKi8KKwkvKiBjaG9vc2UgdGhlIG9sZGVzdCBleHBlY3RhdGlvbiB0byBldmljdCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShpLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7CiAJCWlmIChleHBlY3RfbWF0Y2hlcyhpLCBleHApICYmIGRlbF90aW1lcigmaS0+dGltZW91dCkpIHsKIAkJCW5mX2N0X3VubGlua19leHBlY3QoaSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCmluZGV4IGExODY3OTkuLjgyZGIyYWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCkBAIC00OCw4ICs0OCw3IEBACiAJCQkJZW51bSBuZl9jdF9mdHBfdHlwZSB0eXBlLAogCQkJCXVuc2lnbmVkIGludCBtYXRjaG9mZiwKIAkJCQl1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCi0JCQkJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwKLQkJCQl1MzIgKnNlcSk7CisJCQkJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfZnRwX2hvb2spOwogCiAjaWYgMApAQCAtMzM1LDE1ICszMzQsMTcgQEAKIAkJaWYgKGluZm8tPnNlcV9hZnRfbmxbZGlyXVtpXSA9PSBubF9zZXEpCiAJCQlyZXR1cm47CiAKLQkJaWYgKG9sZGVzdCA9PSBpbmZvLT5zZXFfYWZ0X25sX251bVtkaXJdCi0JCSAgICB8fCBiZWZvcmUoaW5mby0+c2VxX2FmdF9ubFtkaXJdW2ldLCBvbGRlc3QpKQorCQlpZiAob2xkZXN0ID09IGluZm8tPnNlcV9hZnRfbmxfbnVtW2Rpcl0gfHwKKwkJICAgIGJlZm9yZShpbmZvLT5zZXFfYWZ0X25sW2Rpcl1baV0sCisJCQkgICBpbmZvLT5zZXFfYWZ0X25sW2Rpcl1bb2xkZXN0XSkpCiAJCQlvbGRlc3QgPSBpOwogCX0KIAogCWlmIChpbmZvLT5zZXFfYWZ0X25sX251bVtkaXJdIDwgTlVNX1NFUV9UT19SRU1FTUJFUikgewogCQlpbmZvLT5zZXFfYWZ0X25sW2Rpcl1baW5mby0+c2VxX2FmdF9ubF9udW1bZGlyXSsrXSA9IG5sX3NlcTsKIAkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfSEVMUElORk9fVk9MQVRJTEUsIHNrYik7Ci0JfSBlbHNlIGlmIChvbGRlc3QgIT0gTlVNX1NFUV9UT19SRU1FTUJFUikgeworCX0gZWxzZSBpZiAob2xkZXN0ICE9IE5VTV9TRVFfVE9fUkVNRU1CRVIgJiYKKwkJICAgYWZ0ZXIobmxfc2VxLCBpbmZvLT5zZXFfYWZ0X25sW2Rpcl1bb2xkZXN0XSkpIHsKIAkJaW5mby0+c2VxX2FmdF9ubFtkaXJdW29sZGVzdF0gPSBubF9zZXE7CiAJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX0hFTFBJTkZPX1ZPTEFUSUxFLCBza2IpOwogCX0KQEAgLTUxOSw3ICs1MjAsNyBAQAogCW5mX25hdF9mdHAgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X2Z0cF9ob29rKTsKIAlpZiAobmZfbmF0X2Z0cCAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKQogCQlyZXQgPSBuZl9uYXRfZnRwKHBza2IsIGN0aW5mbywgc2VhcmNoW2Rpcl1baV0uZnRwdHlwZSwKLQkJCQkgbWF0Y2hvZmYsIG1hdGNobGVuLCBleHAsICZzZXEpOworCQkJCSBtYXRjaG9mZiwgbWF0Y2hsZW4sIGV4cCk7CiAJZWxzZSB7CiAJCS8qIENhbid0IGV4cGVjdCB0aGlzPyAgQmVzdCB0byBkcm9wIHBhY2tldCBub3cuICovCiAJCWlmIChuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSAhPSAwKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwppbmRleCBiMjg0ZGI3Li5hMWI5NWFjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwpAQCAtNTIwLDYgKzUyMCwxNiBAQAogCQl9CiAJfQogCisJaWYgKChvbGNhLT5vcHRpb25zICYgZU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19zZXBhcmF0ZVN0YWNrKSAmJgorCQlvbGNhLT5zZXBhcmF0ZVN0YWNrLm5ldHdvcmtBZGRyZXNzLmNob2ljZSA9PQorCQllTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnNfbmV0d29ya0FkZHJlc3NfbG9jYWxBcmVhQWRkcmVzcykgeworCQlyZXQgPSBleHBlY3RfdDEyMChwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCSAgJm9sY2EtPnNlcGFyYXRlU3RhY2submV0d29ya0FkZHJlc3MuCisJCQkJICBsb2NhbEFyZWFBZGRyZXNzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY0MCw3ICs2NTAsNyBAQAogCWNhc2UgZVRyYW5zcG9ydEFkZHJlc3NfaXA2QWRkcmVzczoKIAkJaWYgKGZhbWlseSAhPSBBRl9JTkVUNikKIAkJCXJldHVybiAwOwotCQlwID0gZGF0YSArIHRhZGRyLT5pcDZBZGRyZXNzLmlwNjsKKwkJcCA9IGRhdGEgKyB0YWRkci0+aXA2QWRkcmVzcy5pcDsKIAkJbGVuID0gMTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC05NzcsMzAgKzk4Nyw2IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwcm9jZXNzX2luZm9ybWF0aW9uKHN0cnVjdCBza19idWZmICoqcHNrYiwKLQkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCi0JCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAotCQkJICAgICAgIEluZm9ybWF0aW9uX1VVSUUgKmluZm8pCi17Ci0JaW50IHJldDsKLQlpbnQgaTsKLQotCURFQlVHUCgibmZfY3RfcTkzMTogSW5mb3JtYXRpb25cbiIpOwotCi0JaWYgKGluZm8tPm9wdGlvbnMgJiBlSW5mb3JtYXRpb25fVVVJRV9mYXN0U3RhcnQpIHsKLQkJZm9yIChpID0gMDsgaSA8IGluZm8tPmZhc3RTdGFydC5jb3VudDsgaSsrKSB7Ci0JCQlyZXQgPSBwcm9jZXNzX29sYyhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAotCQkJCQkgICZpbmZvLT5mYXN0U3RhcnQuaXRlbVtpXSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IHByb2Nlc3NfZmFjaWxpdHkoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCiAJCQkgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLApAQCAtMTA5NiwxMSArMTA4Miw2IEBACiAJCXJldCA9IHByb2Nlc3NfYWxlcnRpbmcocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKIAkJCQkgICAgICAgJnBkdS0+aDMyM19tZXNzYWdlX2JvZHkuYWxlcnRpbmcpOwogCQlicmVhazsKLQljYXNlIGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9pbmZvcm1hdGlvbjoKLQkJcmV0ID0gcHJvY2Vzc19pbmZvcm1hdGlvbihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAotCQkJCQkgICZwZHUtPmgzMjNfbWVzc2FnZV9ib2R5LgotCQkJCQkgIGluZm9ybWF0aW9uKTsKLQkJYnJlYWs7CiAJY2FzZSBlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfZmFjaWxpdHk6CiAJCXJldCA9IHByb2Nlc3NfZmFjaWxpdHkocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKIAkJCQkgICAgICAgJnBkdS0+aDMyM19tZXNzYWdlX2JvZHkuZmFjaWxpdHkpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jCmluZGV4IDRjNmY4YjMuLjNhMjFmZGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMKQEAgLTEsNCArMSw0IEBACi0vKiBHZW5lcmF0ZWQgYnkgSmluZyBNaW4gWmhhbydzIEFTTi4xIHBhcnNlciwgQXByIDIwIDIwMDYKKy8qIEdlbmVyYXRlZCBieSBKaW5nIE1pbiBaaGFvJ3MgQVNOLjEgcGFyc2VyLCBNYXkgMTYgMjAwNwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNiBKaW5nIE1pbiBaaGFvIDx6aGFvamluZ21pbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgKgpAQCAtMzcsNyArMzcsNyBAQAogCiBzdGF0aWMgZmllbGRfdCBfVHJhbnNwb3J0QWRkcmVzc19pcDZBZGRyZXNzW10gPSB7CS8qIFNFUVVFTkNFICovCiAJe0ZOQU1FKCJpcCIpIE9DVFNUUiwgRklYRCwgMTYsIDAsIERFQ09ERSwKLQkgb2Zmc2V0b2YoVHJhbnNwb3J0QWRkcmVzc19pcDZBZGRyZXNzLCBpcDYpLCBOVUxMfSwKKwkgb2Zmc2V0b2YoVHJhbnNwb3J0QWRkcmVzc19pcDZBZGRyZXNzLCBpcCksIE5VTEx9LAogCXtGTkFNRSgicG9ydCIpIElOVCwgV09SRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCiB9OwogCkBAIC02Nyw3ICs2Nyw4IEBACiAJe0ZOQU1FKCJpcHhBZGRyZXNzIikgU0VRLCAwLCAzLCAzLCBTS0lQLCAwLAogCSBfVHJhbnNwb3J0QWRkcmVzc19pcHhBZGRyZXNzfSwKIAl7Rk5BTUUoImlwNkFkZHJlc3MiKSBTRVEsIDAsIDIsIDIsIERFQ09ERSB8IEVYVCwKLQlvZmZzZXRvZihUcmFuc3BvcnRBZGRyZXNzLCBpcDZBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3NfaXA2QWRkcmVzc30sCisJIG9mZnNldG9mKFRyYW5zcG9ydEFkZHJlc3MsIGlwNkFkZHJlc3MpLAorCSBfVHJhbnNwb3J0QWRkcmVzc19pcDZBZGRyZXNzfSwKIAl7Rk5BTUUoIm5ldEJpb3MiKSBPQ1RTVFIsIEZJWEQsIDE2LCAwLCBTS0lQLCAwLCBOVUxMfSwKIAl7Rk5BTUUoIm5zYXAiKSBPQ1RTVFIsIDUsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAogCXtGTkFNRSgibm9uU3RhbmRhcmRBZGRyZXNzIikgU0VRLCAwLCAyLCAyLCBTS0lQLCAwLApAQCAtNjM4LDcgKzYzOSw4IEBACiB9OwogCiBzdGF0aWMgZmllbGRfdCBfVW5pY2FzdEFkZHJlc3NfaVA2QWRkcmVzc1tdID0gewkvKiBTRVFVRU5DRSAqLwotCXtGTkFNRSgibmV0d29yayIpIE9DVFNUUiwgRklYRCwgMTYsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibmV0d29yayIpIE9DVFNUUiwgRklYRCwgMTYsIDAsIERFQ09ERSwKKwkgb2Zmc2V0b2YoVW5pY2FzdEFkZHJlc3NfaVA2QWRkcmVzcywgbmV0d29yayksIE5VTEx9LAogCXtGTkFNRSgidHNhcElkZW50aWZpZXIiKSBJTlQsIFdPUkQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAogfTsKIApAQCAtNjY1LDggKzY2Nyw4IEBACiAJIG9mZnNldG9mKFVuaWNhc3RBZGRyZXNzLCBpUEFkZHJlc3MpLCBfVW5pY2FzdEFkZHJlc3NfaVBBZGRyZXNzfSwKIAl7Rk5BTUUoImlQWEFkZHJlc3MiKSBTRVEsIDAsIDMsIDMsIFNLSVAgfCBFWFQsIDAsCiAJIF9VbmljYXN0QWRkcmVzc19pUFhBZGRyZXNzfSwKLQl7Rk5BTUUoImlQNkFkZHJlc3MiKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBFWFQsIDAsCi0JIF9VbmljYXN0QWRkcmVzc19pUDZBZGRyZXNzfSwKKwl7Rk5BTUUoImlQNkFkZHJlc3MiKSBTRVEsIDAsIDIsIDIsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoVW5pY2FzdEFkZHJlc3MsIGlQNkFkZHJlc3MpLCBfVW5pY2FzdEFkZHJlc3NfaVA2QWRkcmVzc30sCiAJe0ZOQU1FKCJuZXRCaW9zIikgT0NUU1RSLCBGSVhELCAxNiwgMCwgU0tJUCwgMCwgTlVMTH0sCiAJe0ZOQU1FKCJpUFNvdXJjZVJvdXRlQWRkcmVzcyIpIFNFUSwgMCwgNCwgNCwgU0tJUCB8IEVYVCwgMCwKIAkgX1VuaWNhc3RBZGRyZXNzX2lQU291cmNlUm91dGVBZGRyZXNzfSwKQEAgLTk4NCwxOSArOTg2LDEyIEBACiAJe0ZOQU1FKCJmZWF0dXJlU2V0IikgU0VRLCAzLCA0LCA0LCBTS0lQIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKIH07CiAKLXN0YXRpYyBmaWVsZF90IF9JbmZvcm1hdGlvbl9VVUlFX2Zhc3RTdGFydFtdID0gewkvKiBTRVFVRU5DRSBPRiAqLwotCXtGTkFNRSgiaXRlbSIpIFNFUSwgMSwgMywgNSwgREVDT0RFIHwgT1BFTiB8IEVYVCwKLQkgc2l6ZW9mKE9wZW5Mb2dpY2FsQ2hhbm5lbCksIF9PcGVuTG9naWNhbENoYW5uZWx9Ci0JLAotfTsKLQogc3RhdGljIGZpZWxkX3QgX0luZm9ybWF0aW9uX1VVSUVbXSA9IHsJLyogU0VRVUVOQ0UgKi8KIAl7Rk5BTUUoInByb3RvY29sSWRlbnRpZmllciIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCiAJe0ZOQU1FKCJjYWxsSWRlbnRpZmllciIpIFNFUSwgMCwgMSwgMSwgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCiAJe0ZOQU1FKCJ0b2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCiAJe0ZOQU1FKCJjcnlwdG9Ub2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCi0Je0ZOQU1FKCJmYXN0U3RhcnQiKSBTRVFPRiwgU0VNSSwgMCwgMzAsIERFQ09ERSB8IE9QVCwKLQkgb2Zmc2V0b2YoSW5mb3JtYXRpb25fVVVJRSwgZmFzdFN0YXJ0KSwgX0luZm9ybWF0aW9uX1VVSUVfZmFzdFN0YXJ0fSwKKwl7Rk5BTUUoImZhc3RTdGFydCIpIFNFUU9GLCBTRU1JLCAwLCAzMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCiAJe0ZOQU1FKCJmYXN0Q29ubmVjdFJlZnVzZWQiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAogCXtGTkFNRSgiY2lyY3VpdEluZm8iKSBTRVEsIDMsIDMsIDMsIFNLSVAgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAogfTsKQEAgLTEzNDMsOSArMTMzOCw3IEBACiAJIG9mZnNldG9mKEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5LCBjb25uZWN0KSwgX0Nvbm5lY3RfVVVJRX0sCiAJe0ZOQU1FKCJhbGVydGluZyIpIFNFUSwgMSwgMywgMTcsIERFQ09ERSB8IEVYVCwKIAkgb2Zmc2V0b2YoSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHksIGFsZXJ0aW5nKSwgX0FsZXJ0aW5nX1VVSUV9LAotCXtGTkFNRSgiaW5mb3JtYXRpb24iKSBTRVEsIDAsIDEsIDcsIERFQ09ERSB8IEVYVCwKLQkgb2Zmc2V0b2YoSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHksIGluZm9ybWF0aW9uKSwKLQkgX0luZm9ybWF0aW9uX1VVSUV9LAorCXtGTkFNRSgiaW5mb3JtYXRpb24iKSBTRVEsIDAsIDEsIDcsIFNLSVAgfCBFWFQsIDAsIF9JbmZvcm1hdGlvbl9VVUlFfSwKIAl7Rk5BTUUoInJlbGVhc2VDb21wbGV0ZSIpIFNFUSwgMSwgMiwgMTEsIFNLSVAgfCBFWFQsIDAsCiAJIF9SZWxlYXNlQ29tcGxldGVfVVVJRX0sCiAJe0ZOQU1FKCJmYWNpbGl0eSIpIFNFUSwgMywgNSwgMjEsIERFQ09ERSB8IEVYVCwKQEAgLTE0MzAsNyArMTQyMyw5IEBACiAJIERFQ09ERSB8IEVYVCB8IE9QVCwgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsQWNrLAogCQkJCSAgICAgIHJldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMpLAogCSBfT3BlbkxvZ2ljYWxDaGFubmVsQWNrX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnN9LAotCXtGTkFNRSgic2VwYXJhdGVTdGFjayIpIFNFUSwgMiwgNCwgNSwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzZXBhcmF0ZVN0YWNrIikgU0VRLCAyLCA0LCA1LCBERUNPREUgfCBFWFQgfCBPUFQsCisJIG9mZnNldG9mKE9wZW5Mb2dpY2FsQ2hhbm5lbEFjaywgc2VwYXJhdGVTdGFjayksCisJIF9OZXR3b3JrQWNjZXNzUGFyYW1ldGVyc30sCiAJe0ZOQU1FKCJmb3J3YXJkTXVsdGlwbGV4QWNrUGFyYW1ldGVycyIpIENIT0lDRSwgMCwgMSwgMSwKIAkgREVDT0RFIHwgRVhUIHwgT1BULCBvZmZzZXRvZihPcGVuTG9naWNhbENoYW5uZWxBY2ssCiAJCQkJICAgICAgZm9yd2FyZE11bHRpcGxleEFja1BhcmFtZXRlcnMpLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IGFhMWE5N2UuLmQ2ZDM5ZTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTgzMCwxMSArODMwLDYgQEAKIAljaGFyICpoZWxwbmFtZTsKIAlpbnQgZXJyOwogCi0JaWYgKCFoZWxwKSB7Ci0JCS8qIEZJWE1FOiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW5kIHJlaGFzaCAqLwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQogCS8qIGRvbid0IGNoYW5nZSBoZWxwZXIgb2Ygc2libGluZyBjb25uZWN0aW9ucyAqLwogCWlmIChjdC0+bWFzdGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg0MywyNSArODM4LDM0IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQloZWxwZXIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUoaGVscG5hbWUpOwotCWlmICghaGVscGVyKSB7Ci0JCWlmICghc3RyY21wKGhlbHBuYW1lLCAiIikpCi0JCQloZWxwZXIgPSBOVUxMOwotCQllbHNlCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoaGVscC0+aGVscGVyKSB7Ci0JCWlmICghaGVscGVyKSB7CisJaWYgKCFzdHJjbXAoaGVscG5hbWUsICIiKSkgeworCQlpZiAoaGVscCAmJiBoZWxwLT5oZWxwZXIpIHsKIAkJCS8qIHdlIGhhZCBhIGhlbHBlciBiZWZvcmUgLi4uICovCiAJCQluZl9jdF9yZW1vdmVfZXhwZWN0YXRpb25zKGN0KTsKIAkJCWhlbHAtPmhlbHBlciA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBuZWVkIHRvIHplcm8gZGF0YSBvZiBvbGQgaGVscGVyICovCi0JCQltZW1zZXQoJmhlbHAtPmhlbHAsIDAsIHNpemVvZihoZWxwLT5oZWxwKSk7CiAJCX0KKworCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoIWhlbHApIHsKKwkJLyogRklYTUU6IHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBhbmQgcmVoYXNoICovCisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGhlbHBuYW1lKTsKKwlpZiAoaGVscGVyID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGhlbHAtPmhlbHBlciA9PSBoZWxwZXIpCisJCXJldHVybiAwOworCisJaWYgKGhlbHAtPmhlbHBlcikKKwkJLyogd2UgaGFkIGEgaGVscGVyIGJlZm9yZSAuLi4gKi8KKwkJbmZfY3RfcmVtb3ZlX2V4cGVjdGF0aW9ucyhjdCk7CisKKwkvKiBuZWVkIHRvIHplcm8gZGF0YSBvZiBvbGQgaGVscGVyICovCisJbWVtc2V0KCZoZWxwLT5oZWxwLCAwLCBzaXplb2YoaGVscC0+aGVscCkpOwogCWhlbHAtPmhlbHBlciA9IGhlbHBlcjsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMKaW5kZXggZjRlYThmZS4uMTg5ZGVkNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jCkBAIC0xMzQsMTIgKzEzNCw2NiBAQAogCW5mX2N0X2wzcHJvdG9fbW9kdWxlX3B1dChtYXRjaC0+ZmFtaWx5KTsKIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfeHRfY29ubnRyYWNrX2luZm8KK3sKKwljb21wYXRfdWludF90CQkJc3RhdGVtYXNrOworCWNvbXBhdF91aW50X3QJCQlzdGF0dXNtYXNrOworCXN0cnVjdCBpcF9jb25udHJhY2tfb2xkX3R1cGxlCXR1cGxlW0lQX0NUX0RJUl9NQVhdOworCXN0cnVjdCBpbl9hZGRyCQkJc2lwbXNrW0lQX0NUX0RJUl9NQVhdOworCXN0cnVjdCBpbl9hZGRyCQkJZGlwbXNrW0lQX0NUX0RJUl9NQVhdOworCWNvbXBhdF91bG9uZ190CQkJZXhwaXJlc19taW47CisJY29tcGF0X3Vsb25nX3QJCQlleHBpcmVzX21heDsKKwl1X2ludDhfdAkJCWZsYWdzOworCXVfaW50OF90CQkJaW52ZmxhZ3M7Cit9OworCitzdGF0aWMgdm9pZCBjb21wYXRfZnJvbV91c2VyKHZvaWQgKmRzdCwgdm9pZCAqc3JjKQoreworCXN0cnVjdCBjb21wYXRfeHRfY29ubnRyYWNrX2luZm8gKmNtID0gc3JjOworCXN0cnVjdCB4dF9jb25udHJhY2tfaW5mbyBtID0geworCQkuc3RhdGVtYXNrCT0gY20tPnN0YXRlbWFzaywKKwkJLnN0YXR1c21hc2sJPSBjbS0+c3RhdHVzbWFzaywKKwkJLmV4cGlyZXNfbWluCT0gY20tPmV4cGlyZXNfbWluLAorCQkuZXhwaXJlc19tYXgJPSBjbS0+ZXhwaXJlc19tYXgsCisJCS5mbGFncwkJPSBjbS0+ZmxhZ3MsCisJCS5pbnZmbGFncwk9IGNtLT5pbnZmbGFncywKKwl9OworCW1lbWNweShtLnR1cGxlLCBjbS0+dHVwbGUsIHNpemVvZihtLnR1cGxlKSk7CisJbWVtY3B5KG0uc2lwbXNrLCBjbS0+c2lwbXNrLCBzaXplb2YobS5zaXBtc2spKTsKKwltZW1jcHkobS5kaXBtc2ssIGNtLT5kaXBtc2ssIHNpemVvZihtLmRpcG1zaykpOworCW1lbWNweShkc3QsICZtLCBzaXplb2YobSkpOworfQorCitzdGF0aWMgaW50IGNvbXBhdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKK3sKKwlzdHJ1Y3QgeHRfY29ubnRyYWNrX2luZm8gKm0gPSBzcmM7CisJc3RydWN0IGNvbXBhdF94dF9jb25udHJhY2tfaW5mbyBjbSA9IHsKKwkJLnN0YXRlbWFzawk9IG0tPnN0YXRlbWFzaywKKwkJLnN0YXR1c21hc2sJPSBtLT5zdGF0dXNtYXNrLAorCQkuZXhwaXJlc19taW4JPSBtLT5leHBpcmVzX21pbiwKKwkJLmV4cGlyZXNfbWF4CT0gbS0+ZXhwaXJlc19tYXgsCisJCS5mbGFncwkJPSBtLT5mbGFncywKKwkJLmludmZsYWdzCT0gbS0+aW52ZmxhZ3MsCisJfTsKKwltZW1jcHkoY20udHVwbGUsIG0tPnR1cGxlLCBzaXplb2YoY20udHVwbGUpKTsKKwltZW1jcHkoY20uc2lwbXNrLCBtLT5zaXBtc2ssIHNpemVvZihjbS5zaXBtc2spKTsKKwltZW1jcHkoY20uZGlwbXNrLCBtLT5kaXBtc2ssIHNpemVvZihjbS5kaXBtc2spKTsKKwlyZXR1cm4gY29weV90b191c2VyKGRzdCwgJmNtLCBzaXplb2YoY20pKSA/IC1FRkFVTFQgOiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggY29ubnRyYWNrX21hdGNoID0gewogCS5uYW1lCQk9ICJjb25udHJhY2siLAogCS5tYXRjaAkJPSBtYXRjaCwKIAkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCiAJLmRlc3Ryb3kJPSBkZXN0cm95LAogCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2Nvbm50cmFja19pbmZvKSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdHNpemUJPSBzaXplb2Yoc3RydWN0IGNvbXBhdF94dF9jb25udHJhY2tfaW5mbyksCisJLmNvbXBhdF9mcm9tX3VzZXIgPSBjb21wYXRfZnJvbV91c2VyLAorCS5jb21wYXRfdG9fdXNlcgk9IGNvbXBhdF90b191c2VyLAorI2VuZGlmCiAJLmZhbWlseQkJPSBBRl9JTkVULAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggNTA3ODI4ZC4uMWYxNTgyMSAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCAwMmU0MDFjLi5mOGI4MzAxIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTgzLDIyICs4Myw2IEBACiAjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CiAjZW5kaWYKIAotI2RlZmluZSBDT05GSUdfU09DS19QQUNLRVQJMQotCi0vKgotICAgUHJvcG9zZWQgcmVwbGFjZW1lbnQgZm9yIFNJT0N7QURELERFTH1NVUxUSSBhbmQKLSAgIElGRl9QUk9NSVNDLCBJRkZfQUxMTVVMVEkgZmxhZ3MuCi0KLSAgIEl0IGlzIG1vcmUgZXhwZW5zaXZlLCBidXQgSSBiZWxpZXZlLAotICAgaXQgaXMgcmVhbGx5IGNvcnJlY3Qgc29sdXRpb246IHJlZW50ZXJlYmxlLCBzYWZlIGFuZCBmYXVsdCB0b2xlcmFudC4KLQotICAgSUZGX1BST01JU0MvSUZGX0FMTE1VTFRJL1NJT0N7QUREL0RFTH1NVUxUSSBhcmUgZmFrZWQgYnkga2VlcGluZwotICAgcmVmZXJlbmNlIGNvdW50IGFuZCBnbG9iYWwgZmxhZywgc28gdGhhdCByZWFsIHN0YXR1cyBpcwotICAgKGdmbGFnfChjb3VudCAhPSAwKSksIHNvIHRoYXQgd2UgY2FuIHVzZSBvYnNvbGV0ZSBmYXVsdHkgaW50ZXJmYWNlCi0gICBub3QgaGFybWluZyBjbGV2ZXIgdXNlcnMuCi0gKi8KLSNkZWZpbmUgQ09ORklHX1BBQ0tFVF9NVUxUSUNBU1QJMQotCiAvKgogICAgQXNzdW1wdGlvbnM6CiAgICAtIGlmIGRldmljZSBoYXMgbm8gZGV2LT5oYXJkX2hlYWRlciByb3V0aW5lLCBpdCBhZGRzIGFuZCByZW1vdmVzIGxsIGhlYWRlcgpAQCAtMTU5LDcgKzE0Myw2IEBACiAKIC8qIFByaXZhdGUgcGFja2V0IHNvY2tldCBzdHJ1Y3R1cmVzLiAqLwogCi0jaWZkZWYgQ09ORklHX1BBQ0tFVF9NVUxUSUNBU1QKIHN0cnVjdCBwYWNrZXRfbWNsaXN0CiB7CiAJc3RydWN0IHBhY2tldF9tY2xpc3QJKm5leHQ7CkBAIC0xNzksNyArMTYyLDcgQEAKIAl1bnNpZ25lZCBzaG9ydAltcl9hbGVuOwogCXVuc2lnbmVkIGNoYXIJbXJfYWRkcmVzc1tNQVhfQUREUl9MRU5dOwogfTsKLSNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BBQ0tFVF9NTUFQCiBzdGF0aWMgaW50IHBhY2tldF9zZXRfcmluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0cGFja2V0X3JlcSAqcmVxLCBpbnQgY2xvc2luZyk7CiAjZW5kaWYKQEAgLTIwNSw5ICsxODgsNyBAQAogCQkJCW9yaWdkZXY6MTsKIAlpbnQJCQlpZmluZGV4OwkvKiBib3VuZCBkZXZpY2UJCSovCiAJX19iZTE2CQkJbnVtOwotI2lmZGVmIENPTkZJR19QQUNLRVRfTVVMVElDQVNUCiAJc3RydWN0IHBhY2tldF9tY2xpc3QJKm1jbGlzdDsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19QQUNLRVRfTU1BUAogCWF0b21pY190CQltYXBwZWQ7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgcGdfdmVjX29yZGVyOwpAQCAtMjYzLDcgKzI0NCw2IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHM7CiAKLSNpZmRlZiBDT05GSUdfU09DS19QQUNLRVQKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHNfc3BrdDsKIAogc3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKQEAgLTQzNSw3ICs0MTUsNiBAQAogCQlkZXZfcHV0KGRldik7CiAJcmV0dXJuIGVycjsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBydW5fZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVzKQpAQCAtODUxLDkgKzgzMCw3IEBACiAJCV9fc29ja19wdXQoc2spOwogCX0KIAotI2lmZGVmIENPTkZJR19QQUNLRVRfTVVMVElDQVNUCiAJcGFja2V0X2ZsdXNoX21jbGlzdChzayk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQUNLRVRfTU1BUAogCWlmIChwby0+cGdfdmVjKSB7CkBAIC05MzYsOCArOTEzLDYgQEAKICAqCUJpbmQgYSBwYWNrZXQgc29ja2V0IHRvIGEgZGV2aWNlCiAgKi8KIAotI2lmZGVmIENPTkZJR19TT0NLX1BBQ0tFVAotCiBzdGF0aWMgaW50IHBhY2tldF9iaW5kX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKQogewogCXN0cnVjdCBzb2NrICpzaz1zb2NrLT5zazsKQEAgLTk2MCw3ICs5MzUsNiBAQAogCX0KIAlyZXR1cm4gZXJyOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgcGFja2V0X2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKQogewpAQCAtMTAxMiwxMSArOTg2LDggQEAKIAogCWlmICghY2FwYWJsZShDQVBfTkVUX1JBVykpCiAJCXJldHVybiAtRVBFUk07Ci0JaWYgKHNvY2stPnR5cGUgIT0gU09DS19ER1JBTSAmJiBzb2NrLT50eXBlICE9IFNPQ0tfUkFXCi0jaWZkZWYgQ09ORklHX1NPQ0tfUEFDS0VUCi0JICAgICYmIHNvY2stPnR5cGUgIT0gU09DS19QQUNLRVQKLSNlbmRpZgotCSAgICApCisJaWYgKHNvY2stPnR5cGUgIT0gU09DS19ER1JBTSAmJiBzb2NrLT50eXBlICE9IFNPQ0tfUkFXICYmCisJICAgIHNvY2stPnR5cGUgIT0gU09DS19QQUNLRVQpCiAJCXJldHVybiAtRVNPQ0tUTk9TVVBQT1JUOwogCiAJc29jay0+c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKQEAgLTEwMjcsMTAgKzk5OCw5IEBACiAJCWdvdG8gb3V0OwogCiAJc29jay0+b3BzID0gJnBhY2tldF9vcHM7Ci0jaWZkZWYgQ09ORklHX1NPQ0tfUEFDS0VUCiAJaWYgKHNvY2stPnR5cGUgPT0gU09DS19QQUNLRVQpCiAJCXNvY2stPm9wcyA9ICZwYWNrZXRfb3BzX3Nwa3Q7Ci0jZW5kaWYKKwogCXNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsKIAogCXBvID0gcGt0X3NrKHNrKTsKQEAgLTEwNDYsMTAgKzEwMTYsMTAgQEAKIAogCXNwaW5fbG9ja19pbml0KCZwby0+YmluZF9sb2NrKTsKIAlwby0+cHJvdF9ob29rLmZ1bmMgPSBwYWNrZXRfcmN2OwotI2lmZGVmIENPTkZJR19TT0NLX1BBQ0tFVAorCiAJaWYgKHNvY2stPnR5cGUgPT0gU09DS19QQUNLRVQpCiAJCXBvLT5wcm90X2hvb2suZnVuYyA9IHBhY2tldF9yY3Zfc3BrdDsKLSNlbmRpZgorCiAJcG8tPnByb3RfaG9vay5hZl9wYWNrZXRfcHJpdiA9IHNrOwogCiAJaWYgKHByb3RvKSB7CkBAIC0xMTY5LDcgKzExMzksNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNpZmRlZiBDT05GSUdfU09DS19QQUNLRVQKIHN0YXRpYyBpbnQgcGFja2V0X2dldG5hbWVfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAogCQkJICAgICAgIGludCAqdWFkZHJfbGVuLCBpbnQgcGVlcikKIHsKQEAgLTExOTAsNyArMTE1OSw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW50IHBhY2tldF9nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCiAJCQkgIGludCAqdWFkZHJfbGVuLCBpbnQgcGVlcikKQEAgLTEyMjEsNyArMTE4OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUEFDS0VUX01VTFRJQ0FTVAogc3RhdGljIHZvaWQgcGFja2V0X2Rldl9tYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X21jbGlzdCAqaSwgaW50IHdoYXQpCiB7CiAJc3dpdGNoIChpLT50eXBlKSB7CkBAIC0xMzQ5LDcgKzEzMTYsNiBAQAogCX0KIAlydG5sX3VubG9jaygpOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQKIHBhY2tldF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCkBAIC0xMzYyLDcgKzEzMjgsNiBAQAogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCiAJc3dpdGNoKG9wdG5hbWUpCXsKLSNpZmRlZiBDT05GSUdfUEFDS0VUX01VTFRJQ0FTVAogCWNhc2UgUEFDS0VUX0FERF9NRU1CRVJTSElQOgogCWNhc2UgUEFDS0VUX0RST1BfTUVNQkVSU0hJUDoKIAl7CkBAIC0xMzgzLDcgKzEzNDgsNyBAQAogCQkJcmV0ID0gcGFja2V0X21jX2Ryb3Aoc2ssICZtcmVxKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0jZW5kaWYKKwogI2lmZGVmIENPTkZJR19QQUNLRVRfTU1BUAogCWNhc2UgUEFDS0VUX1JYX1JJTkc6CiAJewpAQCAtMTUwNiwxMSArMTQ3MSwxMCBAQAogCiAJCXN3aXRjaCAobXNnKSB7CiAJCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6Ci0jaWZkZWYgQ09ORklHX1BBQ0tFVF9NVUxUSUNBU1QKIAkJCWlmIChwby0+bWNsaXN0KQogCQkJCXBhY2tldF9kZXZfbWNsaXN0KGRldiwgcG8tPm1jbGlzdCwgLTEpOwotCQkJLy8gZmFsbHRocm91Z2gKLSNlbmRpZgorCQkJLyogZmFsbHRocm91Z2ggKi8KKwogCQljYXNlIE5FVERFVl9ET1dOOgogCQkJaWYgKGRldi0+aWZpbmRleCA9PSBwby0+aWZpbmRleCkgewogCQkJCXNwaW5fbG9jaygmcG8tPmJpbmRfbG9jayk7CkBAIC0xODU2LDcgKzE4MjAsNiBAQAogI2VuZGlmCiAKIAotI2lmZGVmIENPTkZJR19TT0NLX1BBQ0tFVAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wc19zcGt0ID0gewogCS5mYW1pbHkgPQlQRl9QQUNLRVQsCiAJLm93bmVyID0JVEhJU19NT0RVTEUsCkBAIC0xODc3LDcgKzE4NDAsNiBAQAogCS5tbWFwID0JCXNvY2tfbm9fbW1hcCwKIAkuc2VuZHBhZ2UgPQlzb2NrX25vX3NlbmRwYWdlLAogfTsKLSNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0gewogCS5mYW1pbHkgPQlQRl9QQUNLRVQsCmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL3Jma2lsbC5jIGIvbmV0L3Jma2lsbC9yZmtpbGwuYwppbmRleCBhOTczNjAzLi5mMzk4NmQ0IDEwMDY0NAotLS0gYS9uZXQvcmZraWxsL3Jma2lsbC5jCisrKyBiL25ldC9yZmtpbGwvcmZraWxsLmMKQEAgLTI5Niw3ICsyOTYsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCXJma2lsbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZmtpbGwpLCBHRlBfS0VSTkVMKTsKLQlpZiAocmZraWxsKQorCWlmICghcmZraWxsKQogCQlyZXR1cm4gTlVMTDsKIAogCW11dGV4X2luaXQoJnJma2lsbC0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL0tjb25maWcgYi9uZXQvcnhycGMvS2NvbmZpZwppbmRleCA5MWIzZDUyLi5lNjYyZjFkIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvS2NvbmZpZworKysgYi9uZXQvcnhycGMvS2NvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIAogY29uZmlnIEFGX1JYUlBDCiAJdHJpc3RhdGUgIlJ4UlBDIHNlc3Npb24gc29ja2V0cyIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSU5FVCAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgS0VZUwogCWhlbHAKIAkgIFNheSBZIG9yIE0gaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFJ4UlBDIHNlc3Npb24gc29ja2V0cyAoanVzdApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWNhbGwuYyBiL25ldC9yeHJwYy9hci1jYWxsLmMKaW5kZXggNGQ5MmQ4OC4uM2MwNGIwMCAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLWNhbGwuYworKysgYi9uZXQvcnhycGMvYXItY2FsbC5jCkBAIC0xNSw2ICsxNSwyNSBAQAogI2luY2x1ZGUgPG5ldC9hZl9yeHJwYy5oPgogI2luY2x1ZGUgImFyLWludGVybmFsLmgiCiAKK2NvbnN0IGNoYXIgKnJ4cnBjX2NhbGxfc3RhdGVzW10gPSB7CisJW1JYUlBDX0NBTExfQ0xJRU5UX1NFTkRfUkVRVUVTVF0JPSAiQ2xTbmRSZXEiLAorCVtSWFJQQ19DQUxMX0NMSUVOVF9BV0FJVF9SRVBMWV0JCT0gIkNsQXd0UnBsIiwKKwlbUlhSUENfQ0FMTF9DTElFTlRfUkVDVl9SRVBMWV0JCT0gIkNsUmN2UnBsIiwKKwlbUlhSUENfQ0FMTF9DTElFTlRfRklOQUxfQUNLXQkJPSAiQ2xGbmxBQ0siLAorCVtSWFJQQ19DQUxMX1NFUlZFUl9TRUNVUklOR10JCT0gIlN2U2VjdXJlIiwKKwlbUlhSUENfQ0FMTF9TRVJWRVJfQUNDRVBUSU5HXQkJPSAiU3ZBY2NlcHQiLAorCVtSWFJQQ19DQUxMX1NFUlZFUl9SRUNWX1JFUVVFU1RdCT0gIlN2UmN2UmVxIiwKKwlbUlhSUENfQ0FMTF9TRVJWRVJfQUNLX1JFUVVFU1RdCQk9ICJTdkFja1JlcSIsCisJW1JYUlBDX0NBTExfU0VSVkVSX1NFTkRfUkVQTFldCQk9ICJTdlNuZFJwbCIsCisJW1JYUlBDX0NBTExfU0VSVkVSX0FXQUlUX0FDS10JCT0gIlN2QXd0QUNLIiwKKwlbUlhSUENfQ0FMTF9DT01QTEVURV0JCQk9ICJDb21wbGV0ZSIsCisJW1JYUlBDX0NBTExfU0VSVkVSX0JVU1ldCQk9ICJTdkJ1c3kgICIsCisJW1JYUlBDX0NBTExfUkVNT1RFTFlfQUJPUlRFRF0JCT0gIlJtdEFib3J0IiwKKwlbUlhSUENfQ0FMTF9MT0NBTExZX0FCT1JURURdCQk9ICJMb2NBYm9ydCIsCisJW1JYUlBDX0NBTExfTkVUV09SS19FUlJPUl0JCT0gIk5ldEVycm9yIiwKKwlbUlhSUENfQ0FMTF9ERUFEXQkJCT0gIkRlYWQgICAgIiwKK307CisKIHN0cnVjdCBrbWVtX2NhY2hlICpyeHJwY19jYWxsX2phcjsKIExJU1RfSEVBRChyeHJwY19jYWxscyk7CiBERUZJTkVfUldMT0NLKHJ4cnBjX2NhbGxfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItcGVlci5jIGIvbmV0L3J4cnBjL2FyLXBlZXIuYwppbmRleCBjZTA4Yjc4Li45MGZhMTA3IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItcGVlci5jCisrKyBiL25ldC9yeHJwYy9hci1wZWVyLmMKQEAgLTU5LDE0ICs1OSwxNCBAQAogCiAJcmV0ID0gaXBfcm91dGVfb3V0cHV0X2tleSgmcnQsICZmbCk7CiAJaWYgKHJldCA8IDApIHsKLQkJa2xlYXZlKCIgW3JvdXRlIGVyciAlZF0iLCByZXQpOworCQlfbGVhdmUoIiBbcm91dGUgZXJyICVkXSIsIHJldCk7CiAJCXJldHVybjsKIAl9CiAKIAlwZWVyLT5pZl9tdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpOwogCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwogCi0Ja2xlYXZlKCIgW2lmX210dSAldV0iLCBwZWVyLT5pZl9tdHUpOworCV9sZWF2ZSgiIFtpZl9tdHUgJXVdIiwgcGVlci0+aWZfbXR1KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1wcm9jLmMgYi9uZXQvcnhycGMvYXItcHJvYy5jCmluZGV4IDU4ZjRiNGUuLjFjMGJlMGUgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1wcm9jLmMKKysrIGIvbmV0L3J4cnBjL2FyLXByb2MuYwpAQCAtMjUsMjUgKzI1LDYgQEAKIAlbUlhSUENfQ09OTl9ORVRXT1JLX0VSUk9SXQk9ICJOZXRFcnJvciIsCiB9OwogCi1jb25zdCBjaGFyICpyeHJwY19jYWxsX3N0YXRlc1tdID0gewotCVtSWFJQQ19DQUxMX0NMSUVOVF9TRU5EX1JFUVVFU1RdCT0gIkNsU25kUmVxIiwKLQlbUlhSUENfQ0FMTF9DTElFTlRfQVdBSVRfUkVQTFldCQk9ICJDbEF3dFJwbCIsCi0JW1JYUlBDX0NBTExfQ0xJRU5UX1JFQ1ZfUkVQTFldCQk9ICJDbFJjdlJwbCIsCi0JW1JYUlBDX0NBTExfQ0xJRU5UX0ZJTkFMX0FDS10JCT0gIkNsRm5sQUNLIiwKLQlbUlhSUENfQ0FMTF9TRVJWRVJfU0VDVVJJTkddCQk9ICJTdlNlY3VyZSIsCi0JW1JYUlBDX0NBTExfU0VSVkVSX0FDQ0VQVElOR10JCT0gIlN2QWNjZXB0IiwKLQlbUlhSUENfQ0FMTF9TRVJWRVJfUkVDVl9SRVFVRVNUXQk9ICJTdlJjdlJlcSIsCi0JW1JYUlBDX0NBTExfU0VSVkVSX0FDS19SRVFVRVNUXQkJPSAiU3ZBY2tSZXEiLAotCVtSWFJQQ19DQUxMX1NFUlZFUl9TRU5EX1JFUExZXQkJPSAiU3ZTbmRScGwiLAotCVtSWFJQQ19DQUxMX1NFUlZFUl9BV0FJVF9BQ0tdCQk9ICJTdkF3dEFDSyIsCi0JW1JYUlBDX0NBTExfQ09NUExFVEVdCQkJPSAiQ29tcGxldGUiLAotCVtSWFJQQ19DQUxMX1NFUlZFUl9CVVNZXQkJPSAiU3ZCdXN5ICAiLAotCVtSWFJQQ19DQUxMX1JFTU9URUxZX0FCT1JURURdCQk9ICJSbXRBYm9ydCIsCi0JW1JYUlBDX0NBTExfTE9DQUxMWV9BQk9SVEVEXQkJPSAiTG9jQWJvcnQiLAotCVtSWFJQQ19DQUxMX05FVFdPUktfRVJST1JdCQk9ICJOZXRFcnJvciIsCi0JW1JYUlBDX0NBTExfREVBRF0JCQk9ICJEZWFkICAgICIsCi19OwotCiAvKgogICogZ2VuZXJhdGUgYSBsaXN0IG9mIGV4dGFudCBhbmQgZGVhZCBjYWxscyBpbiAvcHJvYy9uZXQvcnhycGNfY2FsbHMKICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCmluZGV4IDQ1YjNjZGEuLjZmODY4NGIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYworKysgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKQEAgLTE2NCw4ICsxNjQsNyBAQAogCQkJCXByaW50aygib2Zmc2V0IG11c3QgYmUgb24gMzIgYml0IGJvdW5kYXJpZXNcbiIpOwogCQkJCWdvdG8gYmFkOwogCQkJfQotCQkJaWYgKHNrYi0+bGVuIDwgMCB8fAotCQkJICAgIChvZmZzZXQgPiAwICYmIG9mZnNldCA+IHNrYi0+bGVuKSkgeworCQkJaWYgKG9mZnNldCA+IDAgJiYgb2Zmc2V0ID4gc2tiLT5sZW4pIHsKIAkJCQlwcmludGsoIm9mZnNldCAlZCBjYW50IGV4Y2VlZCBwa3QgbGVuZ3RoICVkXG4iLAogCQkJCSAgICAgICBvZmZzZXQsIHNrYi0+bGVuKTsKIAkJCQlnb3RvIGJhZDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggMzM4NWVlNS4uZjRkMzQ0OCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTcxLDEyICs3MSw5IEBACiAKIAogLyogS2ljayBkZXZpY2UuCi0gICBOb3RlLCB0aGF0IHRoaXMgcHJvY2VkdXJlIGNhbiBiZSBjYWxsZWQgYnkgYSB3YXRjaGRvZyB0aW1lciwgc28gdGhhdAotICAgd2UgZG8gbm90IGNoZWNrIGRldi0+dGJ1c3kgZmxhZyBoZXJlLgogCi0gICBSZXR1cm5zOiAgMCAgLSBxdWV1ZSBpcyBlbXB0eS4KLQkgICAgPjAgIC0gcXVldWUgaXMgbm90IGVtcHR5LCBidXQgdGhyb3R0bGVkLgotCSAgICA8MCAgLSBxdWV1ZSBpcyBub3QgZW1wdHkuIERldmljZSBpcyB0aHJvdHRsZWQsIGlmIGRldi0+dGJ1c3kgIT0gMC4KKyAgIFJldHVybnM6ICAwICAtIHF1ZXVlIGlzIGVtcHR5IG9yIHRocm90dGxlZC4KKwkgICAgPjAgIC0gcXVldWUgaXMgbm90IGVtcHR5LgogCiAgICBOT1RFOiBDYWxsZWQgdW5kZXIgZGV2LT5xdWV1ZV9sb2NrIHdpdGggbG9jYWxseSBkaXNhYmxlZCBCSC4KICovCkBAIC0xMTUsNyArMTEyLDcgQEAKIAkJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiRGVhZCBsb29wIG9uIG5ldGRldmljZSAlcywgZml4IGl0IHVyZ2VudGx5IVxuIiwgZGV2LT5uYW1lKTsKLQkJCQkJcmV0dXJuIC0xOworCQkJCQlnb3RvIG91dDsKIAkJCQl9CiAJCQkJX19nZXRfY3B1X3ZhcihuZXRkZXZfcnhfc3RhdCkuY3B1X2NvbGxpc2lvbisrOwogCQkJCWdvdG8gcmVxdWV1ZTsKQEAgLTEzNSwxMCArMTMyLDEyIEBACiAJCQkJCQluZXRpZl90eF91bmxvY2soZGV2KTsKIAkJCQkJfQogCQkJCQlzcGluX2xvY2soJmRldi0+cXVldWVfbG9jayk7Ci0JCQkJCXJldHVybiAtMTsKKwkJCQkJcSA9IGRldi0+cWRpc2M7CisJCQkJCWdvdG8gb3V0OwogCQkJCX0KIAkJCQlpZiAocmV0ID09IE5FVERFVl9UWF9MT0NLRUQgJiYgbm9sb2NrKSB7CiAJCQkJCXNwaW5fbG9jaygmZGV2LT5xdWV1ZV9sb2NrKTsKKwkJCQkJcSA9IGRldi0+cWRpc2M7CiAJCQkJCWdvdG8gY29sbGlzaW9uOwogCQkJCX0KIAkJCX0KQEAgLTE2MywyNiArMTYyLDI4IEBACiAJCSAqLwogCiByZXF1ZXVlOgotCQlpZiAoc2tiLT5uZXh0KQorCQlpZiAodW5saWtlbHkocSA9PSAmbm9vcF9xZGlzYykpCisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJZWxzZSBpZiAoc2tiLT5uZXh0KQogCQkJZGV2LT5nc29fc2tiID0gc2tiOwogCQllbHNlCiAJCQlxLT5vcHMtPnJlcXVldWUoc2tiLCBxKTsKIAkJbmV0aWZfc2NoZWR1bGUoZGV2KTsKLQkJcmV0dXJuIDE7CiAJfQorCXJldHVybiAwOworCitvdXQ6CiAJQlVHX09OKChpbnQpIHEtPnEucWxlbiA8IDApOwogCXJldHVybiBxLT5xLnFsZW47CiB9CiAKIHZvaWQgX19xZGlzY19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpZiAodW5saWtlbHkoZGV2LT5xZGlzYyA9PSAmbm9vcF9xZGlzYykpCi0JCWdvdG8gb3V0OworCWRvIHsKKwkJaWYgKCFxZGlzY19yZXN0YXJ0KGRldikpCisJCQlicmVhazsKKwl9IHdoaWxlICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKTsKIAotCXdoaWxlIChxZGlzY19yZXN0YXJ0KGRldikgPCAwICYmICFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCi0JCS8qIE5PVEhJTkcgKi87Ci0KLW91dDoKIAljbGVhcl9iaXQoX19MSU5LX1NUQVRFX1FESVNDX1JVTk5JTkcsICZkZXYtPnN0YXRlKTsKIH0KIApAQCAtMjIzLDcgKzIyNCw4IEBACiAJaWYgKGRldi0+dHhfdGltZW91dCkgewogCQlpZiAoZGV2LT53YXRjaGRvZ190aW1lbyA8PSAwKQogCQkJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7Ci0JCWlmICghbW9kX3RpbWVyKCZkZXYtPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgZGV2LT53YXRjaGRvZ190aW1lbykpCisJCWlmICghbW9kX3RpbWVyKCZkZXYtPndhdGNoZG9nX3RpbWVyLAorCQkJICAgICAgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIGRldi0+d2F0Y2hkb2dfdGltZW8pKSkKIAkJCWRldl9ob2xkKGRldik7CiAJfQogfQpAQCAtNTQ0LDYgKzU0Niw3IEBACiB2b2lkIGRldl9kZWFjdGl2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFFkaXNjICpxZGlzYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJc3Bpbl9sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOwogCXFkaXNjID0gZGV2LT5xZGlzYzsKQEAgLTU1MSw4ICs1NTQsMTIgQEAKIAogCXFkaXNjX3Jlc2V0KHFkaXNjKTsKIAorCXNrYiA9IGRldi0+Z3NvX3NrYjsKKwlkZXYtPmdzb19za2IgPSBOVUxMOwogCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOwogCisJa2ZyZWVfc2tiKHNrYik7CisKIAlkZXZfd2F0Y2hkb2dfZG93bihkZXYpOwogCiAJLyogV2FpdCBmb3Igb3V0c3RhbmRpbmcgZGV2X3F1ZXVlX3htaXQgY2FsbHMuICovCkBAIC01NjEsMTEgKzU2OCw2IEBACiAJLyogV2FpdCBmb3Igb3V0c3RhbmRpbmcgcWRpc2NfcnVuIGNhbGxzLiAqLwogCXdoaWxlICh0ZXN0X2JpdChfX0xJTktfU1RBVEVfUURJU0NfUlVOTklORywgJmRldi0+c3RhdGUpKQogCQl5aWVsZCgpOwotCi0JaWYgKGRldi0+Z3NvX3NrYikgewotCQlrZnJlZV9za2IoZGV2LT5nc29fc2tiKTsKLQkJZGV2LT5nc29fc2tiID0gTlVMTDsKLQl9CiB9CiAKIHZvaWQgZGV2X2luaXRfc2NoZWR1bGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuYwppbmRleCA5OWJjZWM4Li4wMzU3ODhjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCisrKyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTk3Niw4ICs5NzYsOSBAQAogCiAJCWlmIChxLT5ub3cgPj0gcS0+bmVhcl9ldl9jYWNoZVtsZXZlbF0pIHsKIAkJCWV2ZW50ID0gaHRiX2RvX2V2ZW50cyhxLCBsZXZlbCk7Ci0JCQlxLT5uZWFyX2V2X2NhY2hlW2xldmVsXSA9IGV2ZW50ID8gZXZlbnQgOgotCQkJCQkJCSAgUFNDSEVEX1RJQ0tTX1BFUl9TRUM7CisJCQlpZiAoIWV2ZW50KQorCQkJCWV2ZW50ID0gcS0+bm93ICsgUFNDSEVEX1RJQ0tTX1BFUl9TRUM7CisJCQlxLT5uZWFyX2V2X2NhY2hlW2xldmVsXSA9IGV2ZW50OwogCQl9IGVsc2UKIAkJCWV2ZW50ID0gcS0+bmVhcl9ldl9jYWNoZVtsZXZlbF07CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcHJpby5jIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKaW5kZXggMjY5YTZlMS4uNmQ3NTQyYyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKQEAgLTc1LDcgKzc1LDcgQEAKIAkJYmFuZCA9IHJlcy5jbGFzc2lkOwogCX0KIAliYW5kID0gVENfSF9NSU4oYmFuZCkgLSAxOwotCWlmIChiYW5kID4gcS0+YmFuZHMpCisJaWYgKGJhbmQgPj0gcS0+YmFuZHMpCiAJCXJldHVybiBxLT5xdWV1ZXNbcS0+cHJpbzJiYW5kWzBdXTsKIAogCXJldHVybiBxLT5xdWV1ZXNbYmFuZF07CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RlcWwuYyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCmluZGV4IGQyNDkxNGQuLmYwNWFkOWEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGVxbC5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCkBAIC05NCwxNCArOTQsMTMgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2NoLT5kZXY7CiAJc3RydWN0IHRlcWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAotCV9fc2tiX3F1ZXVlX3RhaWwoJnEtPnEsIHNrYik7Ci0JaWYgKHEtPnEucWxlbiA8PSBkZXYtPnR4X3F1ZXVlX2xlbikgeworCWlmIChxLT5xLnFsZW4gPCBkZXYtPnR4X3F1ZXVlX2xlbikgeworCQlfX3NrYl9xdWV1ZV90YWlsKCZxLT5xLCBza2IpOwogCQlzY2gtPmJzdGF0cy5ieXRlcyArPSBza2ItPmxlbjsKIAkJc2NoLT5ic3RhdHMucGFja2V0cysrOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlfX3NrYl91bmxpbmsoc2tiLCAmcS0+cSk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJc2NoLT5xc3RhdHMuZHJvcHMrKzsKIAlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL0tjb25maWcgYi9uZXQvc2N0cC9LY29uZmlnCmluZGV4IDljYmE0OWUuLjgyMTBmNTQgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL0tjb25maWcKKysrIGIvbmV0L3NjdHAvS2NvbmZpZwpAQCAtMiwxMSArMiw5IEBACiAjIFNDVFAgY29uZmlndXJhdGlvbgogIwogCi1tZW51ICJTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBJTkVUICYmIEVYUEVSSU1FTlRBTAotCi1jb25maWcgSVBfU0NUUAorbWVudWNvbmZpZyBJUF9TQ1RQCiAJdHJpc3RhdGUgIlRoZSBTQ1RQIFByb3RvY29sIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gSU5FVCAmJiBFWFBFUklNRU5UQUwKIAlkZXBlbmRzIG9uIElQVjYgfHwgSVBWNj1uCiAJc2VsZWN0IENSWVBUTyBpZiBTQ1RQX0hNQUNfU0hBMSB8fCBTQ1RQX0hNQUNfTUQ1CiAJc2VsZWN0IENSWVBUT19ITUFDIGlmIFNDVFBfSE1BQ19TSEExIHx8IFNDVFBfSE1BQ19NRDUKQEAgLTM2LDkgKzM0LDEwIEBACiAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTi4KIAoraWYgSVBfU0NUUAorCiBjb25maWcgU0NUUF9EQkdfTVNHCiAJYm9vbCAiU0NUUDogRGVidWcgbWVzc2FnZXMiCi0JZGVwZW5kcyBvbiBJUF9TQ1RQCiAJaGVscAogCSAgSWYgeW91IHNheSBZLCB0aGlzIHdpbGwgZW5hYmxlIHZlcmJvc2UgZGVidWdnaW5nIG1lc3NhZ2VzLiAKIApAQCAtNDcsNyArNDYsNiBAQAogCiBjb25maWcgU0NUUF9EQkdfT0JKQ05UCiAJYm9vbCAiU0NUUDogRGVidWcgb2JqZWN0IGNvdW50cyIKLQlkZXBlbmRzIG9uIElQX1NDVFAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFksIHRoaXMgd2lsbCBlbmFibGUgZGVidWdnaW5nIHN1cHBvcnQgZm9yIGNvdW50aW5nIHRoZSAKIAkgIHR5cGUgb2Ygb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYWxsb2NhdGVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yIApAQCAtNTksNyArNTcsNiBAQAogCiBjaG9pY2UKIAlwcm9tcHQgIlNDVFA6IENvb2tpZSBITUFDIEFsZ29yaXRobSIKLQlkZXBlbmRzIG9uIElQX1NDVFAKIAlkZWZhdWx0IFNDVFBfSE1BQ19NRDUKIAloZWxwCiAJICBITUFDIGFsZ29yaXRobSB0byBiZSB1c2VkIGR1cmluZyBhc3NvY2lhdGlvbiBpbml0aWFsaXphdGlvbi4gIEl0CkBAIC04Niw0ICs4Myw1IEBACiAJICBhZHZpc2VkIHRvIHVzZSBlaXRoZXIgSE1BQy1NRDUgb3IgSE1BQy1TSEExLgogCiBlbmRjaG9pY2UKLWVuZG1lbnUKKworZW5kaWYgIyBJUF9TQ1RQCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9jaHVuay5jIGIvbmV0L3NjdHAvY2h1bmsuYwppbmRleCA4M2VmNDExLi43N2ZiN2IwIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9jaHVuay5jCisrKyBiL25ldC9zY3RwL2NodW5rLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFNDVFAga2VybmVsIHJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbgogICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29kZSByZWxhdGluZyB0aGUgdGhlIGNodW5rIGFic3RyYWN0aW9uLgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb2RlIHJlbGF0aW5nIHRoZSBjaHVuayBhYnN0cmFjdGlvbi4KICAqCiAgKiBUaGUgU0NUUCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsKICAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9kZWJ1Zy5jIGIvbmV0L3NjdHAvZGVidWcuYwppbmRleCBlOGMwZjc0Li44MGY3MGFhIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9kZWJ1Zy5jCisrKyBiL25ldC9zY3RwL2RlYnVnLmMKQEAgLTc3LDggKzc3LDYgQEAKIC8qIExvb2t1cCAiY2h1bmsgdHlwZSIgZGVidWcgbmFtZS4gKi8KIGNvbnN0IGNoYXIgKnNjdHBfY25hbWUoY29uc3Qgc2N0cF9zdWJ0eXBlX3QgY2lkKQogewotCWlmIChjaWQuY2h1bmsgPCAwKQotCQlyZXR1cm4gImlsbGVnYWwgY2h1bmsgaWQiOwogCWlmIChjaWQuY2h1bmsgPD0gU0NUUF9DSURfQkFTRV9NQVgpCiAJCXJldHVybiBzY3RwX2NpZF90YmxbY2lkLmNodW5rXTsKIApAQCAtMTQ2LDggKzE0NCw2IEBACiAvKiBMb29rdXAgcHJpbWl0aXZlIGRlYnVnIG5hbWUuICovCiBjb25zdCBjaGFyICpzY3RwX3BuYW1lKGNvbnN0IHNjdHBfc3VidHlwZV90IGlkKQogewotCWlmIChpZC5wcmltaXRpdmUgPCAwKQotCQlyZXR1cm4gImlsbGVnYWwgcHJpbWl0aXZlIjsKIAlpZiAoaWQucHJpbWl0aXZlIDw9IFNDVFBfRVZFTlRfUFJJTUlUSVZFX01BWCkKIAkJcmV0dXJuIHNjdHBfcHJpbWl0aXZlX3RibFtpZC5wcmltaXRpdmVdOwogCXJldHVybiAidW5rbm93bl9wcmltaXRpdmUiOwpAQCAtMTYxLDggKzE1Nyw2IEBACiAvKiBMb29rdXAgIm90aGVyIiBkZWJ1ZyBuYW1lLiAqLwogY29uc3QgY2hhciAqc2N0cF9vbmFtZShjb25zdCBzY3RwX3N1YnR5cGVfdCBpZCkKIHsKLQlpZiAoaWQub3RoZXIgPCAwKQotCQlyZXR1cm4gImlsbGVnYWwgJ290aGVyJyBldmVudCI7CiAJaWYgKGlkLm90aGVyIDw9IFNDVFBfRVZFTlRfT1RIRVJfTUFYKQogCQlyZXR1cm4gc2N0cF9vdGhlcl90YmxbaWQub3RoZXJdOwogCXJldHVybiAidW5rbm93biAnb3RoZXInIGV2ZW50IjsKQEAgLTE4NCw4ICsxNzgsNiBAQAogLyogTG9va3VwIHRpbWVyIGRlYnVnIG5hbWUuICovCiBjb25zdCBjaGFyICpzY3RwX3RuYW1lKGNvbnN0IHNjdHBfc3VidHlwZV90IGlkKQogewotCWlmIChpZC50aW1lb3V0IDwgMCkKLQkJcmV0dXJuICJpbGxlZ2FsICd0aW1lcicgZXZlbnQiOwogCWlmIChpZC50aW1lb3V0IDw9IFNDVFBfRVZFTlRfVElNRU9VVF9NQVgpCiAJCXJldHVybiBzY3RwX3RpbWVyX3RibFtpZC50aW1lb3V0XTsKIAlyZXR1cm4gInVua25vd25fdGltZXIiOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jIGIvbmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jCmluZGV4IDUyMzA3MWMuLjcwYTkxZWMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRldGFibGUuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMKQEAgLTk2MCw3ICs5NjAsNyBAQAogCWlmIChzdGF0ZSA+IFNDVFBfU1RBVEVfTUFYKQogCQlyZXR1cm4gJmJ1ZzsKIAotCWlmIChjaWQgPj0gMCAmJiBjaWQgPD0gU0NUUF9DSURfQkFTRV9NQVgpCisJaWYgKGNpZCA8PSBTQ1RQX0NJRF9CQVNFX01BWCkKIAkJcmV0dXJuICZjaHVua19ldmVudF90YWJsZVtjaWRdW3N0YXRlXTsKIAogCWlmIChzY3RwX3Byc2N0cF9lbmFibGUpIHsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggOWYxYTkwOC4uNGRjZGFiZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTI1ODYsNyArMjU4Niw3IEBACiAgKgogICogNy4xLjIgU0NUUF9BU1NPQ0lORk8KICAqCi0gKiBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHR1bmUgdGhlIHRoZSBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIGF0dGVtcHRzCisgKiBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHR1bmUgdGhlIG1heGltdW0gcmV0cmFuc21pc3Npb24gYXR0ZW1wdHMKICAqIG9mIHRoZSBhc3NvY2lhdGlvbi4KICAqIFJldHVybnMgYW4gZXJyb3IgaWYgdGhlIG5ldyBhc3NvY2lhdGlvbiByZXRyYW5zbWlzc2lvbiB2YWx1ZSBpcwogICogZ3JlYXRlciB0aGFuIHRoZSBzdW0gb2YgdGhlIHJldHJhbnNtaXNzaW9uIHZhbHVlICBvZiB0aGUgcGVlci4KQEAgLTQxNjQsNiArNDE2NCw3IEBACiAJcndsb2NrX3QgKmFkZHJfbG9jazsKIAlpbnQgZXJyID0gMDsKIAl2b2lkICphZGRyczsKKwl2b2lkICpidWY7CiAJaW50IGJ5dGVzX2NvcGllZCA9IDA7CiAKIAlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRyc19vbGQpKQpAQCAtNDIxNywxMyArNDIxOCwxNCBAQAogCQl9CiAJfQogCisJYnVmID0gYWRkcnM7CiAJbGlzdF9mb3JfZWFjaChwb3MsICZicC0+YWRkcmVzc19saXN0KSB7CiAJCWFkZHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnksIGxpc3QpOwogCQltZW1jcHkoJnRlbXAsICZhZGRyLT5hLCBzaXplb2YodGVtcCkpOwogCQlzY3RwX2dldF9wZl9zcGVjaWZpYyhzay0+c2tfZmFtaWx5KS0+YWRkcl92NG1hcChzcCwgJnRlbXApOwogCQlhZGRybGVuID0gc2N0cF9nZXRfYWZfc3BlY2lmaWModGVtcC5zYS5zYV9mYW1pbHkpLT5zb2NrYWRkcl9sZW47Ci0JCW1lbWNweShhZGRycywgJnRlbXAsIGFkZHJsZW4pOwotCQl0byArPSBhZGRybGVuOworCQltZW1jcHkoYnVmLCAmdGVtcCwgYWRkcmxlbik7CisJCWJ1ZiArPSBhZGRybGVuOwogCQlieXRlc19jb3BpZWQgKz0gYWRkcmxlbjsKIAkJY250ICsrOwogCQlpZiAoY250ID49IGdldGFkZHJzLmFkZHJfbnVtKSBicmVhazsKQEAgLTQyNjYsNiArNDI2OCw3IEBACiAJc2l6ZV90IHNwYWNlX2xlZnQ7CiAJaW50IGJ5dGVzX2NvcGllZCA9IDA7CiAJdm9pZCAqYWRkcnM7CisJdm9pZCAqYnVmOwogCiAJaWYgKGxlbiA8PSBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcnMpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQzMTYsNiArNDMxOSw3IEBACiAJCX0KIAl9CiAKKwlidWYgPSBhZGRyczsKIAlsaXN0X2Zvcl9lYWNoKHBvcywgJmJwLT5hZGRyZXNzX2xpc3QpIHsKIAkJYWRkciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSwgbGlzdCk7CiAJCW1lbWNweSgmdGVtcCwgJmFkZHItPmEsIHNpemVvZih0ZW1wKSk7CkBAIC00MzI1LDggKzQzMjksOCBAQAogCQkJZXJyID0gIC1FTk9NRU07IC8qZml4bWU6IHJpZ2h0IGVycm9yPyovCiAJCQlnb3RvIGVycm9yOwogCQl9Ci0JCW1lbWNweShhZGRycywgJnRlbXAsIGFkZHJsZW4pOwotCQl0byArPSBhZGRybGVuOworCQltZW1jcHkoYnVmLCAmdGVtcCwgYWRkcmxlbik7CisJCWJ1ZiArPSBhZGRybGVuOwogCQlieXRlc19jb3BpZWQgKz0gYWRkcmxlbjsKIAkJY250ICsrOwogCQlzcGFjZV9sZWZ0IC09IGFkZHJsZW47CkBAIC00NTQ3LDcgKzQ1NTEsNyBAQAogICoKICAqIDcuMS4yIFNDVFBfQVNTT0NJTkZPCiAgKgotICogVGhpcyBvcHRpb24gaXMgdXNlZCB0byB0dW5lIHRoZSB0aGUgbWF4aW11bSByZXRyYW5zbWlzc2lvbiBhdHRlbXB0cworICogVGhpcyBvcHRpb24gaXMgdXNlZCB0byB0dW5lIHRoZSBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIGF0dGVtcHRzCiAgKiBvZiB0aGUgYXNzb2NpYXRpb24uCiAgKiBSZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBuZXcgYXNzb2NpYXRpb24gcmV0cmFuc21pc3Npb24gdmFsdWUgaXMKICAqIGdyZWF0ZXIgdGhhbiB0aGUgc3VtIG9mIHRoZSByZXRyYW5zbWlzc2lvbiB2YWx1ZSAgb2YgdGhlIHBlZXIuCkBAIC01MjI3LDcgKzUyMzEsMTIgQEAKIAkvKiBBbGxvY2F0ZSBITUFDIGZvciBnZW5lcmF0aW5nIGNvb2tpZS4gKi8KIAlpZiAoc2N0cF9obWFjX2FsZykgewogCQl0Zm0gPSBjcnlwdG9fYWxsb2NfaGFzaChzY3RwX2htYWNfYWxnLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKLQkJaWYgKCF0Zm0pIHsKKwkJaWYgKElTX0VSUih0Zm0pKSB7CisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSAgICAgICAiU0NUUDogZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciAlczogJWxkXG4iLAorCQkJCQlzY3RwX2htYWNfYWxnLCBQVFJfRVJSKHRmbSkpOworCQkJfQogCQkJZXJyID0gLUVOT1NZUzsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC91bHBldmVudC5jIGIvbmV0L3NjdHAvdWxwZXZlbnQuYwppbmRleCA2NjFlYTJkLi5iZmVjYjM1IDEwMDY0NAotLS0gYS9uZXQvc2N0cC91bHBldmVudC5jCisrKyBiL25ldC9zY3RwL3VscGV2ZW50LmMKQEAgLTE0MSwxMSArMTQxLDYgQEAKIAkgKiBhbiBBQk9SVCwgc28gd2UgbmVlZCB0byBpbmNsdWRlIGl0IGluIHRoZSBzYWNfaW5mby4KIAkgKi8KIAlpZiAoY2h1bmspIHsKLQkJLyogc2N0cF9pbnF1X3BvcCgpIGhhcyBhbGxyZWFkeSBwdWxsZWQgb2ZmIHRoZSBjaHVuawotCQkgKiBoZWFkZXIuICBXZSBuZWVkIHRvIHB1dCBpdCBiYWNrIHRlbXBvcmFyaWx5Ci0JCSAqLwotCQlza2JfcHVzaChjaHVuay0+c2tiLCBzaXplb2Yoc2N0cF9jaHVua2hkcl90KSk7Ci0KIAkJLyogQ29weSB0aGUgY2h1bmsgZGF0YSB0byBhIG5ldyBza2IgYW5kIHJlc2VydmUgZW5vdWdoCiAJCSAqIGhlYWQgcm9vbSB0byB1c2UgYXMgbm90aWZpY2F0aW9uLgogCQkgKi8KQEAgLTE1NSw5ICsxNTAsNiBAQAogCQlpZiAoIXNrYikKIAkJCWdvdG8gZmFpbDsKIAotCQkvKiBwdXQgYmFjayB0aGUgY2h1bmsgaGVhZGVyIG5vdyB0aGF0IHdlIGhhdmUgYSBjb3B5ICovCi0JCXNrYl9wdWxsKGNodW5rLT5za2IsIHNpemVvZihzY3RwX2NodW5raGRyX3QpKTsKLQogCQkvKiBFbWJlZCB0aGUgZXZlbnQgZmllbGRzIGluc2lkZSB0aGUgY2xvbmVkIHNrYi4gICovCiAJCWV2ZW50ID0gc2N0cF9za2IyZXZlbnQoc2tiKTsKIAkJc2N0cF91bHBldmVudF9pbml0KGV2ZW50LCBNU0dfTk9USUZJQ0FUSU9OLCBza2ItPnRydWVzaXplKTsKQEAgLTE2OCw3ICsxNjAsOCBAQAogCiAJCS8qIFRyaW0gdGhlIGJ1ZmZlciB0byB0aGUgcmlnaHQgbGVuZ3RoLiAgKi8KIAkJc2tiX3RyaW0oc2tiLCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKSArCi0JCQkgbnRvaHMoY2h1bmstPmNodW5rX2hkci0+bGVuZ3RoKSk7CisJCQkgbnRvaHMoY2h1bmstPmNodW5rX2hkci0+bGVuZ3RoKSAtCisJCQkgc2l6ZW9mKHNjdHBfY2h1bmtoZHJfdCkpOwogCX0gZWxzZSB7CiAJCWV2ZW50ID0gc2N0cF91bHBldmVudF9uZXcoc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSksCiAJCQkJICBNU0dfTk9USUZJQ0FUSU9OLCBnZnApOwpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDc1OTgyNWIuLmY0NTMwMTkgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTI2MSw4ICsyNjEsNyBAQAogewogCXN0cnVjdCBzb2NrZXRfYWxsb2MgKmVpID0gKHN0cnVjdCBzb2NrZXRfYWxsb2MgKilmb287CiAKLQlpZiAoZmxhZ3MgJiBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpCi0JCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CisJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIH0KIAogc3RhdGljIGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKQEAgLTMxMyw4ICszMTIsMTkgQEAKIAlkZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX1VOSEFTSEVEOwogCXJldHVybiAwOwogfQorCisvKgorICogc29ja2ZzX2RuYW1lKCkgaXMgY2FsbGVkIGZyb20gZF9wYXRoKCkuCisgKi8KK3N0YXRpYyBjaGFyICpzb2NrZnNfZG5hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pCit7CisJcmV0dXJuIGR5bmFtaWNfZG5hbWUoZGVudHJ5LCBidWZmZXIsIGJ1ZmxlbiwgInNvY2tldDpbJWx1XSIsCisJCQkJZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc29ja2ZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZSA9IHNvY2tmc19kZWxldGVfZGVudHJ5LAorCS5kX2RuYW1lICA9IHNvY2tmc19kbmFtZSwKIH07CiAKIC8qCkBAIC0zNTQsMTQgKzM2NCw5IEBACiAKIHN0YXRpYyBpbnQgc29ja19hdHRhY2hfZmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHFzdHIgdGhpczsKLQljaGFyIG5hbWVbMzJdOworCXN0cnVjdCBxc3RyIG5hbWUgPSB7IC5uYW1lID0gIiIgfTsKIAotCXRoaXMubGVuID0gc3ByaW50ZihuYW1lLCAiWyVsdV0iLCBTT0NLX0lOT0RFKHNvY2spLT5pX2lubyk7Ci0JdGhpcy5uYW1lID0gbmFtZTsKLQl0aGlzLmhhc2ggPSAwOwotCi0JZmlsZS0+Zl9wYXRoLmRlbnRyeSA9IGRfYWxsb2Moc29ja19tbnQtPm1udF9zYi0+c19yb290LCAmdGhpcyk7CisJZmlsZS0+Zl9wYXRoLmRlbnRyeSA9IGRfYWxsb2Moc29ja19tbnQtPm1udF9zYi0+c19yb290LCAmbmFtZSk7CiAJaWYgKHVubGlrZWx5KCFmaWxlLT5mX3BhdGguZGVudHJ5KSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwppbmRleCBkYjI5OGI1Li4wOTlhOTgzIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCkBAIC05MjQsNiArOTI0LDcgQEAKIGdzc193cml0ZV9pbml0X3ZlcmYoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHJzaSAqcnNpcCkKIHsKIAlzdHJ1Y3QgcnNjICpyc2NpOworCWludCAgICAgICAgcmM7CiAKIAlpZiAocnNpcC0+bWFqb3Jfc3RhdHVzICE9IEdTU19TX0NPTVBMRVRFKQogCQlyZXR1cm4gZ3NzX3dyaXRlX251bGxfdmVyZihycXN0cCk7CkBAIC05MzIsNyArOTMzLDkgQEAKIAkJcnNpcC0+bWFqb3Jfc3RhdHVzID0gR1NTX1NfTk9fQ09OVEVYVDsKIAkJcmV0dXJuIGdzc193cml0ZV9udWxsX3ZlcmYocnFzdHApOwogCX0KLQlyZXR1cm4gZ3NzX3dyaXRlX3ZlcmYocnFzdHAsIHJzY2ktPm1lY2hjdHgsIEdTU19TRVFfV0lOKTsKKwlyYyA9IGdzc193cml0ZV92ZXJmKHJxc3RwLCByc2NpLT5tZWNoY3R4LCBHU1NfU0VRX1dJTik7CisJY2FjaGVfcHV0KCZyc2NpLT5oLCAmcnNjX2NhY2hlKTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qCkBAIC0xMDg5LDYgKzEwOTIsOCBAQAogCQl9CiAJCWdvdG8gY29tcGxldGU7CiAJY2FzZSBSUENfR1NTX1BST0NfREVTVFJPWToKKwkJaWYgKGdzc193cml0ZV92ZXJmKHJxc3RwLCByc2NpLT5tZWNoY3R4LCBnYy0+Z2Nfc2VxKSkKKwkJCWdvdG8gYXV0aF9lcnI7CiAJCXNldF9iaXQoQ0FDSEVfTkVHQVRJVkUsICZyc2NpLT5oLmZsYWdzKTsKIAkJaWYgKHJlc3YtPmlvdl9sZW4gKyA0ID4gUEFHRV9TSVpFKQogCQkJZ290byBkcm9wOwpAQCAtMTE5NiwxMyArMTIwMSw3IEBACiAJaWYgKHhkcl9idWZfc3Vic2VnbWVudChyZXNidWYsICZpbnRlZ19idWYsIGludGVnX29mZnNldCwKIAkJCQlpbnRlZ19sZW4pKQogCQlCVUcoKTsKLQlpZiAocmVzYnVmLT5wYWdlX2xlbiA9PSAwCi0JCQkmJiByZXNidWYtPmhlYWRbMF0uaW92X2xlbiArIFJQQ19NQVhfQVVUSF9TSVpFCi0JCQk8IFBBR0VfU0laRSkgewotCQlCVUdfT04ocmVzYnVmLT50YWlsWzBdLmlvdl9sZW4pOwotCQkvKiBVc2UgaGVhZCBmb3IgZXZlcnl0aGluZyAqLwotCQlyZXN2ID0gJnJlc2J1Zi0+aGVhZFswXTsKLQl9IGVsc2UgaWYgKHJlc2J1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9PSBOVUxMKSB7CisJaWYgKHJlc2J1Zi0+dGFpbFswXS5pb3ZfYmFzZSA9PSBOVUxMKSB7CiAJCWlmIChyZXNidWYtPmhlYWRbMF0uaW92X2xlbiArIFJQQ19NQVhfQVVUSF9TSVpFID4gUEFHRV9TSVpFKQogCQkJZ290byBvdXRfZXJyOwogCQlyZXNidWYtPnRhaWxbMF0uaW92X2Jhc2UgPSByZXNidWYtPmhlYWRbMF0uaW92X2Jhc2UKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwppbmRleCBhZDM5YjQ3Li41ODg3NDU3ZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCisrKyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwpAQCAtODI4LDIzICs4MjgsMjMgQEAKIHsKIAlzdHJ1Y3QgcnBjX2lub2RlICpycGNpID0gKHN0cnVjdCBycGNfaW5vZGUgKikgZm9vOwogCi0JaWYgKGZsYWdzICYgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKSB7Ci0JCWlub2RlX2luaXRfb25jZSgmcnBjaS0+dmZzX2lub2RlKTsKLQkJcnBjaS0+cHJpdmF0ZSA9IE5VTEw7Ci0JCXJwY2ktPm5yZWFkZXJzID0gMDsKLQkJcnBjaS0+bndyaXRlcnMgPSAwOwotCQlJTklUX0xJU1RfSEVBRCgmcnBjaS0+aW5fdXBjYWxsKTsKLQkJSU5JVF9MSVNUX0hFQUQoJnJwY2ktPnBpcGUpOwotCQlycGNpLT5waXBlbGVuID0gMDsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmcnBjaS0+d2FpdHEpOwotCQlJTklUX0RFTEFZRURfV09SSygmcnBjaS0+cXVldWVfdGltZW91dCwKLQkJCQkgICAgcnBjX3RpbWVvdXRfdXBjYWxsX3F1ZXVlKTsKLQkJcnBjaS0+b3BzID0gTlVMTDsKLQl9CisJaW5vZGVfaW5pdF9vbmNlKCZycGNpLT52ZnNfaW5vZGUpOworCXJwY2ktPnByaXZhdGUgPSBOVUxMOworCXJwY2ktPm5yZWFkZXJzID0gMDsKKwlycGNpLT5ud3JpdGVycyA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnJwY2ktPmluX3VwY2FsbCk7CisJSU5JVF9MSVNUX0hFQUQoJnJwY2ktPnBpcGUpOworCXJwY2ktPnBpcGVsZW4gPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJwY2ktPndhaXRxKTsKKwlJTklUX0RFTEFZRURfV09SSygmcnBjaS0+cXVldWVfdGltZW91dCwKKwkJCSAgICBycGNfdGltZW91dF91cGNhbGxfcXVldWUpOworCXJwY2ktPm9wcyA9IE5VTEw7CiB9CiAKIGludCByZWdpc3Rlcl9ycGNfcGlwZWZzKHZvaWQpCiB7CisJaW50IGVycjsKKwogCXJwY19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicnBjX2lub2RlX2NhY2hlIiwKIAkJCQlzaXplb2Yoc3RydWN0IHJwY19pbm9kZSksCiAJCQkJMCwgKFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKQEAgLTg1Miw3ICs4NTIsMTIgQEAKIAkJCQlpbml0X29uY2UsIE5VTEwpOwogCWlmICghcnBjX2lub2RlX2NhY2hlcCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmVnaXN0ZXJfZmlsZXN5c3RlbSgmcnBjX3BpcGVfZnNfdHlwZSk7CisJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmcnBjX3BpcGVfZnNfdHlwZSk7CisJaWYgKGVycikgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3kocnBjX2lub2RlX2NhY2hlcCk7CisJCXJldHVybiBlcnI7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuYwppbmRleCA0YTUzZTk0Li45NDRkNzUzIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3NjaGVkLmMKKysrIGIvbmV0L3N1bnJwYy9zY2hlZC5jCkBAIC03MzYsNiArNzM2LDExIEBACiAJX19ycGNfZXhlY3V0ZShjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dvcmspKTsKIH0KIAorc3RydWN0IHJwY19idWZmZXIgeworCXNpemVfdAlsZW47CisJY2hhcglkYXRhW107Cit9OworCiAvKioKICAqIHJwY19tYWxsb2MgLSBhbGxvY2F0ZSBhbiBSUEMgYnVmZmVyCiAgKiBAdGFzazogUlBDIHRhc2sgdGhhdCB3aWxsIHVzZSB0aGlzIGJ1ZmZlcgpAQCAtNzU0LDE4ICs3NTksMjIgQEAKICAqLwogdm9pZCAqcnBjX21hbGxvYyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHNpemVfdCBzaXplKQogewotCXNpemVfdCAqYnVmOworCXN0cnVjdCBycGNfYnVmZmVyICpidWY7CiAJZ2ZwX3QgZ2ZwID0gUlBDX0lTX1NXQVBQRVIodGFzaykgPyBHRlBfQVRPTUlDIDogR0ZQX05PV0FJVDsKIAotCXNpemUgKz0gc2l6ZW9mKHNpemVfdCk7CisJc2l6ZSArPSBzaXplb2Yoc3RydWN0IHJwY19idWZmZXIpOwogCWlmIChzaXplIDw9IFJQQ19CVUZGRVJfTUFYU0laRSkKIAkJYnVmID0gbWVtcG9vbF9hbGxvYyhycGNfYnVmZmVyX21lbXBvb2wsIGdmcCk7CiAJZWxzZQogCQlidWYgPSBrbWFsbG9jKHNpemUsIGdmcCk7Ci0JKmJ1ZiA9IHNpemU7Ci0JZHByaW50aygiUlBDOiAlNXUgYWxsb2NhdGVkIGJ1ZmZlciBvZiBzaXplICV1IGF0ICVwXG4iLAorCisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCisJYnVmLT5sZW4gPSBzaXplOworCWRwcmludGsoIlJQQzogJTV1IGFsbG9jYXRlZCBidWZmZXIgb2Ygc2l6ZSAlenUgYXQgJXBcbiIsCiAJCQl0YXNrLT50a19waWQsIHNpemUsIGJ1Zik7Ci0JcmV0dXJuICh2b2lkICopICsrYnVmOworCXJldHVybiAmYnVmLT5kYXRhOwogfQogCiAvKioKQEAgLTc3NSwxNSArNzg0LDE4IEBACiAgKi8KIHZvaWQgcnBjX2ZyZWUodm9pZCAqYnVmZmVyKQogewotCXNpemVfdCBzaXplLCAqYnVmID0gKHNpemVfdCAqKSBidWZmZXI7CisJc2l6ZV90IHNpemU7CisJc3RydWN0IHJwY19idWZmZXIgKmJ1ZjsKIAogCWlmICghYnVmZmVyKQogCQlyZXR1cm47Ci0Jc2l6ZSA9ICpidWY7Ci0JYnVmLS07CiAKLQlkcHJpbnRrKCJSUEM6ICAgICAgIGZyZWVpbmcgYnVmZmVyIG9mIHNpemUgJXUgYXQgJXBcbiIsCisJYnVmID0gY29udGFpbmVyX29mKGJ1ZmZlciwgc3RydWN0IHJwY19idWZmZXIsIGRhdGEpOworCXNpemUgPSBidWYtPmxlbjsKKworCWRwcmludGsoIlJQQzogICAgICAgZnJlZWluZyBidWZmZXIgb2Ygc2l6ZSAlenUgYXQgJXBcbiIsCiAJCQlzaXplLCBidWYpOworCiAJaWYgKHNpemUgPD0gUlBDX0JVRkZFUl9NQVhTSVpFKQogCQltZW1wb29sX2ZyZWUoYnVmLCBycGNfYnVmZmVyX21lbXBvb2wpOwogCWVsc2UKQEAgLTk3Nyw4ICs5ODksNiBAQAogCXNwaW5fdW5sb2NrKCZycGNfc2NoZWRfbG9jayk7CiB9CiAKLXN0YXRpYyBERUNMQVJFX01VVEVYX0xPQ0tFRChycGNpb2RfcnVubmluZyk7Ci0KIHN0YXRpYyB2b2lkIHJwY2lvZF9raWxsYWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYyBiL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYwppbmRleCA0M2VjZjYyLi43MzA3NWRlIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N1bnJwY19zeW1zLmMKKysrIGIvbmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jCkBAIC0xMzQsMTEgKzEzNCw3IEBACiBFWFBPUlRfU1lNQk9MKG5sbV9kZWJ1Zyk7CiAjZW5kaWYKIAotZXh0ZXJuIGludCByZWdpc3Rlcl9ycGNfcGlwZWZzKHZvaWQpOwotZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9ycGNfcGlwZWZzKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBjYWNoZV9kZXRhaWwgaXBfbWFwX2NhY2hlLCB1bml4X2dpZF9jYWNoZTsKLWV4dGVybiBpbnQgaW5pdF9zb2NrZXRfeHBydCh2b2lkKTsKLWV4dGVybiB2b2lkIGNsZWFudXBfc29ja2V0X3hwcnQodm9pZCk7CiAKIHN0YXRpYyBpbnQgX19pbml0CiBpbml0X3N1bnJwYyh2b2lkKQpAQCAtMTQ2LDkgKzE0MiwxMSBAQAogCWludCBlcnIgPSByZWdpc3Rlcl9ycGNfcGlwZWZzKCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7Ci0JZXJyID0gcnBjX2luaXRfbWVtcG9vbCgpICE9IDA7Ci0JaWYgKGVycikKKwllcnIgPSBycGNfaW5pdF9tZW1wb29sKCk7CisJaWYgKGVycikgeworCQl1bnJlZ2lzdGVyX3JwY19waXBlZnMoKTsKIAkJZ290byBvdXQ7CisJfQogI2lmZGVmIFJQQ19ERUJVRwogCXJwY19yZWdpc3Rlcl9zeXNjdGwoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmMKaW5kZXggYjc1MDNjMS4uZTY3M2VmOSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYworKysgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC05MDcsNyArOTA3LDcgQEAKIAkgKiBiZXR0ZXIgaWRlYSBvZiByZXBseSBzaXplCiAJICovCiAJaWYgKHByb2NwLT5wY194ZHJyZXNzaXplKQotCQlzdmNfcmVzZXJ2ZShycXN0cCwgcHJvY3AtPnBjX3hkcnJlc3NpemU8PDIpOworCQlzdmNfcmVzZXJ2ZV9hdXRoKHJxc3RwLCBwcm9jcC0+cGNfeGRycmVzc2l6ZTw8Mik7CiAKIAkvKiBDYWxsIHRoZSBmdW5jdGlvbiB0aGF0IHByb2Nlc3NlcyB0aGUgcmVxdWVzdC4gKi8KIAlpZiAoIXZlcnNwLT52c19kaXNwYXRjaCkgewpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNhdXRoLmMgYi9uZXQvc3VucnBjL3N2Y2F1dGguYwppbmRleCBmNWMzODA4Li5hZjdjNWYwIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y2F1dGguYworKysgYi9uZXQvc3VucnBjL3N2Y2F1dGguYwpAQCAtNjQsNyArNjQsNyBAQAogfQogCiAvKiBBIHJlcXVlc3QsIHdoaWNoIHdhcyBhdXRoZW50aWNhdGVkLCBoYXMgbm93IGV4ZWN1dGVkLgotICogVGltZSB0byBmaW5hbGlzZSB0aGUgdGhlIGNyZWRlbnRpYWxzIGFuZCB2ZXJpZmllcgorICogVGltZSB0byBmaW5hbGlzZSB0aGUgY3JlZGVudGlhbHMgYW5kIHZlcmlmaWVyCiAgKiBhbmQgcmVsZWFzZSBhbmQgcmVzb3VyY2VzCiAgKi8KIGludCBzdmNfYXV0aG9yaXNlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jIGIvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYwppbmRleCAyYmQyM2VhLi4wN2RjZDIwIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMKQEAgLTM4NSw3ICszODUsNyBAQAogewogCXN0cnVjdCBpcF9tYXAgKmlwbTsKIAlzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2sgPSBycXN0cC0+cnFfc29jazsKLQlzcGluX2xvY2tfYmgoJnN2c2stPnNrX2RlZmVyX2xvY2spOworCXNwaW5fbG9jaygmc3Zzay0+c2tfbG9jayk7CiAJaXBtID0gc3Zzay0+c2tfaW5mb19hdXRodW5peDsKIAlpZiAoaXBtICE9IE5VTEwpIHsKIAkJaWYgKCFjYWNoZV92YWxpZCgmaXBtLT5oKSkgewpAQCAtMzk1LDEzICszOTUsMTMgQEAKIAkJCSAqIHNhbWUgSVAgYWRkcmVzcy4KIAkJCSAqLwogCQkJc3Zzay0+c2tfaW5mb19hdXRodW5peCA9IE5VTEw7Ci0JCQlzcGluX3VubG9ja19iaCgmc3Zzay0+c2tfZGVmZXJfbG9jayk7CisJCQlzcGluX3VubG9jaygmc3Zzay0+c2tfbG9jayk7CiAJCQljYWNoZV9wdXQoJmlwbS0+aCwgJmlwX21hcF9jYWNoZSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQljYWNoZV9nZXQoJmlwbS0+aCk7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZzdnNrLT5za19kZWZlcl9sb2NrKTsKKwlzcGluX3VubG9jaygmc3Zzay0+c2tfbG9jayk7CiAJcmV0dXJuIGlwbTsKIH0KIApAQCAtNDEwLDE0ICs0MTAsMTQgQEAKIHsKIAlzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2sgPSBycXN0cC0+cnFfc29jazsKIAotCXNwaW5fbG9ja19iaCgmc3Zzay0+c2tfZGVmZXJfbG9jayk7CisJc3Bpbl9sb2NrKCZzdnNrLT5za19sb2NrKTsKIAlpZiAoc3Zzay0+c2tfc29jay0+dHlwZSA9PSBTT0NLX1NUUkVBTSAmJgogCSAgICBzdnNrLT5za19pbmZvX2F1dGh1bml4ID09IE5VTEwpIHsKIAkJLyogbmV3bHkgY2FjaGVkLCBrZWVwIHRoZSByZWZlcmVuY2UgKi8KIAkJc3Zzay0+c2tfaW5mb19hdXRodW5peCA9IGlwbTsKIAkJaXBtID0gTlVMTDsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnN2c2stPnNrX2RlZmVyX2xvY2spOworCXNwaW5fdW5sb2NrKCZzdnNrLT5za19sb2NrKTsKIAlpZiAoaXBtKQogCQljYWNoZV9wdXQoJmlwbS0+aCwgJmlwX21hcF9jYWNoZSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDIyZjYxYWUuLjViYWY0OGQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC01Myw3ICs1Myw4IEBACiAgKiAJc3ZjX3NlcnYtPnN2X2xvY2sgcHJvdGVjdHMgc3ZfdGVtcHNvY2tzLCBzdl9wZXJtc29ja3MsIHN2X3RtcGNudC4KICAqCXdoZW4gYm90aCBuZWVkIHRvIGJlIHRha2VuIChyYXJlKSwgc3ZjX3NlcnYtPnN2X2xvY2sgaXMgZmlyc3QuCiAgKglCS0wgcHJvdGVjdHMgc3ZjX3NlcnYtPnN2X25ydGhyZWFkLgotICoJc3ZjX3NvY2stPnNrX2RlZmVyX2xvY2sgcHJvdGVjdHMgdGhlIHN2Y19zb2NrLT5za19kZWZlcnJlZCBsaXN0CisgKglzdmNfc29jay0+c2tfbG9jayBwcm90ZWN0cyB0aGUgc3ZjX3NvY2stPnNrX2RlZmVycmVkIGxpc3QKKyAqICAgICAgICAgICAgIGFuZCB0aGUgLT5za19pbmZvX2F1dGh1bml4IGNhY2hlLgogICoJc3ZjX3NvY2stPnNrX2ZsYWdzLlNLX0JVU1kgcHJldmVudHMgYSBzdmNfc29jayBiZWluZyBlbnF1ZXVlZCBtdWx0aXBseS4KICAqCiAgKglTb21lIGZsYWdzIGNhbiBiZSBzZXQgdG8gY2VydGFpbiB2YWx1ZXMgYXQgYW55IHRpbWUKQEAgLTc4NywxNSArNzg4LDIwIEBACiAJfQogCiAJY2xlYXJfYml0KFNLX0RBVEEsICZzdnNrLT5za19mbGFncyk7Ci0Jd2hpbGUgKChlcnIgPSBrZXJuZWxfcmVjdm1zZyhzdnNrLT5za19zb2NrLCAmbXNnLCBOVUxMLAotCQkJCSAgICAgMCwgMCwgTVNHX1BFRUsgfCBNU0dfRE9OVFdBSVQpKSA8IDAgfHwKLQkgICAgICAgKHNrYiA9IHNrYl9yZWN2X2RhdGFncmFtKHN2c2stPnNrX3NrLCAwLCAxLCAmZXJyKSkgPT0gTlVMTCkgewotCQlpZiAoZXJyID09IC1FQUdBSU4pIHsKLQkJCXN2Y19zb2NrX3JlY2VpdmVkKHN2c2spOwotCQkJcmV0dXJuIGVycjsKKwlza2IgPSBOVUxMOworCWVyciA9IGtlcm5lbF9yZWN2bXNnKHN2c2stPnNrX3NvY2ssICZtc2csIE5VTEwsCisJCQkgICAgIDAsIDAsIE1TR19QRUVLIHwgTVNHX0RPTlRXQUlUKTsKKwlpZiAoZXJyID49IDApCisJCXNrYiA9IHNrYl9yZWN2X2RhdGFncmFtKHN2c2stPnNrX3NrLCAwLCAxLCAmZXJyKTsKKworCWlmIChza2IgPT0gTlVMTCkgeworCQlpZiAoZXJyICE9IC1FQUdBSU4pIHsKKwkJCS8qIHBvc3NpYmx5IGFuIGljbXAgZXJyb3IgKi8KKwkJCWRwcmludGsoInN2YzogcmVjdmZyb20gcmV0dXJuZWQgZXJyb3IgJWRcbiIsIC1lcnIpOworCQkJc2V0X2JpdChTS19EQVRBLCAmc3Zzay0+c2tfZmxhZ3MpOwogCQl9Ci0JCS8qIHBvc3NpYmx5IGFuIGljbXAgZXJyb3IgKi8KLQkJZHByaW50aygic3ZjOiByZWN2ZnJvbSByZXR1cm5lZCBlcnJvciAlZFxuIiwgLWVycik7CisJCXN2Y19zb2NrX3JlY2VpdmVkKHN2c2spOworCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAJcnFzdHAtPnJxX2FkZHJsZW4gPSBzaXplb2YocnFzdHAtPnJxX2FkZHIpOwogCWlmIChza2ItPnRzdGFtcC50djY0ID09IDApIHsKQEAgLTE2MzMsNyArMTYzOSw3IEBACiAJc3Zzay0+c2tfc2VydmVyID0gc2VydjsKIAlhdG9taWNfc2V0KCZzdnNrLT5za19pbnVzZSwgMSk7CiAJc3Zzay0+c2tfbGFzdHJlY3YgPSBnZXRfc2Vjb25kcygpOwotCXNwaW5fbG9ja19pbml0KCZzdnNrLT5za19kZWZlcl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmc3Zzay0+c2tfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnN2c2stPnNrX2RlZmVycmVkKTsKIAlJTklUX0xJU1RfSEVBRCgmc3Zzay0+c2tfcmVhZHkpOwogCW11dGV4X2luaXQoJnN2c2stPnNrX211dGV4KTsKQEAgLTE4NTcsOSArMTg2Myw5IEBACiAJZHByaW50aygicmV2aXNpdCBxdWV1ZWRcbiIpOwogCXN2c2sgPSBkci0+c3ZzazsKIAlkci0+c3ZzayA9IE5VTEw7Ci0Jc3Bpbl9sb2NrX2JoKCZzdnNrLT5za19kZWZlcl9sb2NrKTsKKwlzcGluX2xvY2soJnN2c2stPnNrX2xvY2spOwogCWxpc3RfYWRkKCZkci0+aGFuZGxlLnJlY2VudCwgJnN2c2stPnNrX2RlZmVycmVkKTsKLQlzcGluX3VubG9ja19iaCgmc3Zzay0+c2tfZGVmZXJfbG9jayk7CisJc3Bpbl91bmxvY2soJnN2c2stPnNrX2xvY2spOwogCXNldF9iaXQoU0tfREVGRVJSRUQsICZzdnNrLT5za19mbGFncyk7CiAJc3ZjX3NvY2tfZW5xdWV1ZShzdnNrKTsKIAlzdmNfc29ja19wdXQoc3Zzayk7CkBAIC0xOTI1LDcgKzE5MzEsNyBAQAogCiAJaWYgKCF0ZXN0X2JpdChTS19ERUZFUlJFRCwgJnN2c2stPnNrX2ZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7Ci0Jc3Bpbl9sb2NrX2JoKCZzdnNrLT5za19kZWZlcl9sb2NrKTsKKwlzcGluX2xvY2soJnN2c2stPnNrX2xvY2spOwogCWNsZWFyX2JpdChTS19ERUZFUlJFRCwgJnN2c2stPnNrX2ZsYWdzKTsKIAlpZiAoIWxpc3RfZW1wdHkoJnN2c2stPnNrX2RlZmVycmVkKSkgewogCQlkciA9IGxpc3RfZW50cnkoc3Zzay0+c2tfZGVmZXJyZWQubmV4dCwKQEAgLTE5MzQsNiArMTk0MCw2IEBACiAJCWxpc3RfZGVsX2luaXQoJmRyLT5oYW5kbGUucmVjZW50KTsKIAkJc2V0X2JpdChTS19ERUZFUlJFRCwgJnN2c2stPnNrX2ZsYWdzKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnN2c2stPnNrX2RlZmVyX2xvY2spOworCXNwaW5fdW5sb2NrKCZzdnNrLT5za19sb2NrKTsKIAlyZXR1cm4gZHI7CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9LY29uZmlnIGIvbmV0L3RpcGMvS2NvbmZpZwppbmRleCBmOWUzNjdkLi4zYjMwZDExIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9LY29uZmlnCisrKyBiL25ldC90aXBjL0tjb25maWcKQEAgLTIsMTEgKzIsOSBAQAogIyBUSVBDIGNvbmZpZ3VyYXRpb24KICMKIAotbWVudSAiVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gSU5FVCAmJiBFWFBFUklNRU5UQUwKLQotY29uZmlnIFRJUEMKK21lbnVjb25maWcgVElQQwogCXRyaXN0YXRlICJUaGUgVElQQyBQcm90b2NvbCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIElORVQgJiYgRVhQRVJJTUVOVEFMCiAJLS0taGVscC0tLQogCSAgVGhlIFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbiAoVElQQykgcHJvdG9jb2wgaXMKIAkgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sCkBAIC0yMiw5ICsyMCwxMCBAQAogCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKK2lmIFRJUEMKKwogY29uZmlnIFRJUENfQURWQU5DRUQKIAlib29sICJUSVBDOiBBZHZhbmNlZCBjb25maWd1cmF0aW9uIgotCWRlcGVuZHMgb24gVElQQwogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFNheWluZyBZIGhlcmUgd2lsbCBvcGVuIHNvbWUgYWR2YW5jZWQgY29uZmlndXJhdGlvbgpAQCAtMzMsNyArMzIsNyBAQAogCiBjb25maWcgVElQQ19aT05FUwogCWludCAiTWF4aW11bSBudW1iZXIgb2Ygem9uZXMgaW4gbmV0d29yayIKLQlkZXBlbmRzIG9uIFRJUEMgJiYgVElQQ19BRFZBTkNFRAorCWRlcGVuZHMgb24gVElQQ19BRFZBTkNFRAogCWRlZmF1bHQgIjMiCiAJaGVscAogCSBNYXggbnVtYmVyIG9mIHpvbmVzIGluc2lkZSBUSVBDIG5ldHdvcmsuIE1heCBzdXBwb3J0ZWQgdmFsdWUgCkBAIC00NCw3ICs0Myw3IEBACiAKIGNvbmZpZyBUSVBDX0NMVVNURVJTCiAJaW50ICJNYXhpbXVtIG51bWJlciBvZiBjbHVzdGVycyBpbiBhIHpvbmUiCi0JZGVwZW5kcyBvbiBUSVBDICYmIFRJUENfQURWQU5DRUQKKwlkZXBlbmRzIG9uIFRJUENfQURWQU5DRUQKIAlkZWZhdWx0ICIxIgogCWhlbHAKICAgICAgICAgICAqKipPbmx5IDEgKG9uZSBjbHVzdGVyIGluIGEgem9uZSkgaXMgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgY29kZS4KQEAgLTU5LDcgKzU4LDcgQEAKIAogY29uZmlnIFRJUENfTk9ERVMKIAlpbnQgIk1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGluIGNsdXN0ZXIiCi0JZGVwZW5kcyBvbiBUSVBDICYmIFRJUENfQURWQU5DRUQKKwlkZXBlbmRzIG9uIFRJUENfQURWQU5DRUQKIAlkZWZhdWx0ICIyNTUiCiAJaGVscAogCSAgTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgaW5zaWRlIGEgVElQQyBjbHVzdGVyLiBNYXhpbXVtIApAQCAtNzAsNyArNjksNyBAQAogCiBjb25maWcgVElQQ19TTEFWRV9OT0RFUwogCWludCAiTWF4aW11bSBudW1iZXIgb2Ygc2xhdmUgbm9kZXMgaW4gY2x1c3RlciIKLQlkZXBlbmRzIG9uIFRJUEMgJiYgVElQQ19BRFZBTkNFRAorCWRlcGVuZHMgb24gVElQQ19BRFZBTkNFRAogCWRlZmF1bHQgIjAiCiAJaGVscAogICAgICAgICAgICoqKlRoaXMgY2FwYWJpbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgY29kZS4qKioKQEAgLTgzLDcgKzgyLDcgQEAKIAogY29uZmlnIFRJUENfUE9SVFMKIAlpbnQgIk1heGltdW0gbnVtYmVyIG9mIHBvcnRzIGluIGEgbm9kZSIKLQlkZXBlbmRzIG9uIFRJUEMgJiYgVElQQ19BRFZBTkNFRAorCWRlcGVuZHMgb24gVElQQ19BRFZBTkNFRAogCWRlZmF1bHQgIjgxOTEiCiAJaGVscAogCSAgTWF4aW11bSBudW1iZXIgb2YgcG9ydHMgd2l0aGluIGEgbm9kZS4gTWF4aW11bSAKQEAgLTk0LDcgKzkzLDcgQEAKIAogY29uZmlnIFRJUENfTE9HCiAJaW50ICJTaXplIG9mIGxvZyBidWZmZXIiCi0JZGVwZW5kcyBvbiBUSVBDICYmIFRJUENfQURWQU5DRUQKKwlkZXBlbmRzIG9uIFRJUENfQURWQU5DRUQKIAlkZWZhdWx0IDAKIAloZWxwCiAgCSAgU2l6ZSAoaW4gYnl0ZXMpIG9mIFRJUEMncyBpbnRlcm5hbCBsb2cgYnVmZmVyLCB3aGljaCByZWNvcmRzIHRoZQpAQCAtMTA2LDcgKzEwNSw2IEBACiAKIGNvbmZpZyBUSVBDX0RFQlVHCiAJYm9vbCAiRW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVElQQwogCWRlZmF1bHQgbgogCWhlbHAKICAJICBUaGlzIHdpbGwgZW5hYmxlIGRlYnVnZ2luZyBvZiBUSVBDLgpAQCAtMTE0LDQgKzExMiw0IEBACiAJICBPbmx5IHNheSBZIGhlcmUgaWYgeW91IGFyZSBoYXZpbmcgdHJvdWJsZSB3aXRoIFRJUEMuICBJdCB3aWxsCiAJICBlbmFibGUgdGhlIGRpc3BsYXkgb2YgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBpcyBnb2luZyBvbi4KIAotZW5kbWVudQorZW5kaWYgIyBUSVBDCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ldGhfbWVkaWEuYyBiL25ldC90aXBjL2V0aF9tZWRpYS5jCmluZGV4IDBlZTZkZWQuLjc3ZDJkOWMgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2V0aF9tZWRpYS5jCisrKyBiL25ldC90aXBjL2V0aF9tZWRpYS5jCkBAIC0xMjAsMTggKzEyMCwyMCBAQAogCiBzdGF0aWMgaW50IGVuYWJsZV9iZWFyZXIoc3RydWN0IHRpcGNfYmVhcmVyICp0Yl9wdHIpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IG5ldF9kZXZpY2UgKnBkZXYgPSBOVUxMOwogCXN0cnVjdCBldGhfYmVhcmVyICplYl9wdHIgPSAmZXRoX2JlYXJlcnNbMF07CiAJc3RydWN0IGV0aF9iZWFyZXIgKnN0b3AgPSAmZXRoX2JlYXJlcnNbTUFYX0VUSF9CRUFSRVJTXTsKIAljaGFyICpkcml2ZXJfbmFtZSA9IHN0cmNocigoY29uc3QgY2hhciAqKXRiX3B0ci0+bmFtZSwgJzonKSArIDE7CiAKIAkvKiBGaW5kIGRldmljZSB3aXRoIHNwZWNpZmllZCBuYW1lICovCi0JZGV2ID0gTlVMTDsKLQlmb3JfZWFjaF9uZXRkZXYocGRldikKLQkJaWYgKCFzdHJuY21wKGRldi0+bmFtZSwgZHJpdmVyX25hbWUsIElGTkFNU0laKSkgeworCisJZm9yX2VhY2hfbmV0ZGV2KHBkZXYpeworCQlpZiAoIXN0cm5jbXAocGRldi0+bmFtZSwgZHJpdmVyX25hbWUsIElGTkFNU0laKSkgewogCQkJZGV2ID0gcGRldjsKIAkJCWJyZWFrOwogCQl9CisJfQogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IGFlYzhjZjEuLjg3Yzc5NGQ4IDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xMTEsNyArMTExLDYgQEAKICNpbmNsdWRlIDxuZXQvc2NtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CkBAIC0xNzUsMTEgKzE3NCwxMSBAQAogewogCXN0cnVjdCBzb2NrICpwZWVyOwogCi0JdW5peF9zdGF0ZV9ybG9jayhzKTsKKwl1bml4X3N0YXRlX2xvY2socyk7CiAJcGVlciA9IHVuaXhfcGVlcihzKTsKIAlpZiAocGVlcikKIAkJc29ja19ob2xkKHBlZXIpOwotCXVuaXhfc3RhdGVfcnVubG9jayhzKTsKKwl1bml4X3N0YXRlX3VubG9jayhzKTsKIAlyZXR1cm4gcGVlcjsKIH0KIApAQCAtMzcwLDcgKzM2OSw3IEBACiAJdW5peF9yZW1vdmVfc29ja2V0KHNrKTsKIAogCS8qIENsZWFyIHN0YXRlICovCi0JdW5peF9zdGF0ZV93bG9jayhzayk7CisJdW5peF9zdGF0ZV9sb2NrKHNrKTsKIAlzb2NrX29ycGhhbihzayk7CiAJc2stPnNrX3NodXRkb3duID0gU0hVVERPV05fTUFTSzsKIAlkZW50cnkJICAgICA9IHUtPmRlbnRyeTsKQEAgLTM3OSw3ICszNzgsNyBAQAogCXUtPm1udAkgICAgID0gTlVMTDsKIAlzdGF0ZSA9IHNrLT5za19zdGF0ZTsKIAlzay0+c2tfc3RhdGUgPSBUQ1BfQ0xPU0U7Ci0JdW5peF9zdGF0ZV93dW5sb2NrKHNrKTsKKwl1bml4X3N0YXRlX3VubG9jayhzayk7CiAKIAl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZ1LT5wZWVyX3dhaXQpOwogCkBAIC0zODcsMTIgKzM4NiwxMiBAQAogCiAJaWYgKHNrcGFpciE9TlVMTCkgewogCQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0gfHwgc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHsKLQkJCXVuaXhfc3RhdGVfd2xvY2soc2twYWlyKTsKKwkJCXVuaXhfc3RhdGVfbG9jayhza3BhaXIpOwogCQkJLyogTm8gbW9yZSB3cml0ZXMgKi8KIAkJCXNrcGFpci0+c2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLOwogCQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSB8fCBlbWJyaW9uKQogCQkJCXNrcGFpci0+c2tfZXJyID0gRUNPTk5SRVNFVDsKLQkJCXVuaXhfc3RhdGVfd3VubG9jayhza3BhaXIpOworCQkJdW5peF9zdGF0ZV91bmxvY2soc2twYWlyKTsKIAkJCXNrcGFpci0+c2tfc3RhdGVfY2hhbmdlKHNrcGFpcik7CiAJCQlyZWFkX2xvY2soJnNrcGFpci0+c2tfY2FsbGJhY2tfbG9jayk7CiAJCQlza193YWtlX2FzeW5jKHNrcGFpciwxLFBPTExfSFVQKTsKQEAgLTQ0OSw3ICs0NDgsNyBAQAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKCF1LT5hZGRyKQogCQlnb3RvIG91dDsJCQkvKiBObyBsaXN0ZW5zIG9uIGFuIHVuYm91bmQgc29ja2V0ICovCi0JdW5peF9zdGF0ZV93bG9jayhzayk7CisJdW5peF9zdGF0ZV9sb2NrKHNrKTsKIAlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9DTE9TRSAmJiBzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTikKIAkJZ290byBvdXRfdW5sb2NrOwogCWlmIChiYWNrbG9nID4gc2stPnNrX21heF9hY2tfYmFja2xvZykKQEAgLTQ2Myw3ICs0NjIsNyBAQAogCWVyciA9IDA7CiAKIG91dF91bmxvY2s6Ci0JdW5peF9zdGF0ZV93dW5sb2NrKHNrKTsKKwl1bml4X3N0YXRlX3VubG9jayhzayk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTg1OSw2ICs4NTgsMzEgQEAKIAlnb3RvIG91dF91cDsKIH0KIAorc3RhdGljIHZvaWQgdW5peF9zdGF0ZV9kb3VibGVfbG9jayhzdHJ1Y3Qgc29jayAqc2sxLCBzdHJ1Y3Qgc29jayAqc2syKQoreworCWlmICh1bmxpa2VseShzazEgPT0gc2syKSB8fCAhc2syKSB7CisJCXVuaXhfc3RhdGVfbG9jayhzazEpOworCQlyZXR1cm47CisJfQorCWlmIChzazEgPCBzazIpIHsKKwkJdW5peF9zdGF0ZV9sb2NrKHNrMSk7CisJCXVuaXhfc3RhdGVfbG9ja19uZXN0ZWQoc2syKTsKKwl9IGVsc2UgeworCQl1bml4X3N0YXRlX2xvY2soc2syKTsKKwkJdW5peF9zdGF0ZV9sb2NrX25lc3RlZChzazEpOworCX0KK30KKworc3RhdGljIHZvaWQgdW5peF9zdGF0ZV9kb3VibGVfdW5sb2NrKHN0cnVjdCBzb2NrICpzazEsIHN0cnVjdCBzb2NrICpzazIpCit7CisJaWYgKHVubGlrZWx5KHNrMSA9PSBzazIpIHx8ICFzazIpIHsKKwkJdW5peF9zdGF0ZV91bmxvY2soc2sxKTsKKwkJcmV0dXJuOworCX0KKwl1bml4X3N0YXRlX3VubG9jayhzazEpOworCXVuaXhfc3RhdGVfdW5sb2NrKHNrMik7Cit9CisKIHN0YXRpYyBpbnQgdW5peF9kZ3JhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKIAkJCSAgICAgIGludCBhbGVuLCBpbnQgZmxhZ3MpCiB7CkBAIC04NzgsMTEgKzkwMiwxOSBAQAogCQkgICAgIXVuaXhfc2soc2spLT5hZGRyICYmIChlcnIgPSB1bml4X2F1dG9iaW5kKHNvY2spKSAhPSAwKQogCQkJZ290byBvdXQ7CiAKK3Jlc3RhcnQ6CiAJCW90aGVyPXVuaXhfZmluZF9vdGhlcihzdW5hZGRyLCBhbGVuLCBzb2NrLT50eXBlLCBoYXNoLCAmZXJyKTsKIAkJaWYgKCFvdGhlcikKIAkJCWdvdG8gb3V0OwogCi0JCXVuaXhfc3RhdGVfd2xvY2soc2spOworCQl1bml4X3N0YXRlX2RvdWJsZV9sb2NrKHNrLCBvdGhlcik7CisKKwkJLyogQXBwYXJlbnRseSBWRlMgb3ZlcnNsZXB0IHNvY2tldCBkZWF0aC4gUmV0cnkuICovCisJCWlmIChzb2NrX2ZsYWcob3RoZXIsIFNPQ0tfREVBRCkpIHsKKwkJCXVuaXhfc3RhdGVfZG91YmxlX3VubG9jayhzaywgb3RoZXIpOworCQkJc29ja19wdXQob3RoZXIpOworCQkJZ290byByZXN0YXJ0OworCQl9CiAKIAkJZXJyID0gLUVQRVJNOwogCQlpZiAoIXVuaXhfbWF5X3NlbmQoc2ssIG90aGVyKSkKQEAgLTg5Nyw3ICs5MjksNyBAQAogCQkgKgkxMDAzLjFnIGJyZWFraW5nIGNvbm5lY3RlZCBzdGF0ZSB3aXRoIEFGX1VOU1BFQwogCQkgKi8KIAkJb3RoZXIgPSBOVUxMOwotCQl1bml4X3N0YXRlX3dsb2NrKHNrKTsKKwkJdW5peF9zdGF0ZV9kb3VibGVfbG9jayhzaywgb3RoZXIpOwogCX0KIAogCS8qCkBAIC05MDYsMTkgKzkzOCwxOSBAQAogCWlmICh1bml4X3BlZXIoc2spKSB7CiAJCXN0cnVjdCBzb2NrICpvbGRfcGVlciA9IHVuaXhfcGVlcihzayk7CiAJCXVuaXhfcGVlcihzayk9b3RoZXI7Ci0JCXVuaXhfc3RhdGVfd3VubG9jayhzayk7CisJCXVuaXhfc3RhdGVfZG91YmxlX3VubG9jayhzaywgb3RoZXIpOwogCiAJCWlmIChvdGhlciAhPSBvbGRfcGVlcikKIAkJCXVuaXhfZGdyYW1fZGlzY29ubmVjdGVkKHNrLCBvbGRfcGVlcik7CiAJCXNvY2tfcHV0KG9sZF9wZWVyKTsKIAl9IGVsc2UgewogCQl1bml4X3BlZXIoc2spPW90aGVyOwotCQl1bml4X3N0YXRlX3d1bmxvY2soc2spOworCQl1bml4X3N0YXRlX2RvdWJsZV91bmxvY2soc2ssIG90aGVyKTsKIAl9CiAJcmV0dXJuIDA7CiAKIG91dF91bmxvY2s6Ci0JdW5peF9zdGF0ZV93dW5sb2NrKHNrKTsKKwl1bml4X3N0YXRlX2RvdWJsZV91bmxvY2soc2ssIG90aGVyKTsKIAlzb2NrX3B1dChvdGhlcik7CiBvdXQ6CiAJcmV0dXJuIGVycjsKQEAgLTkzNyw3ICs5NjksNyBAQAogCQkoc2tiX3F1ZXVlX2xlbigmb3RoZXItPnNrX3JlY2VpdmVfcXVldWUpID4KIAkJIG90aGVyLT5za19tYXhfYWNrX2JhY2tsb2cpOwogCi0JdW5peF9zdGF0ZV9ydW5sb2NrKG90aGVyKTsKKwl1bml4X3N0YXRlX3VubG9jayhvdGhlcik7CiAKIAlpZiAoc2NoZWQpCiAJCXRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7CkBAIC05OTUsMTEgKzEwMjcsMTEgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBMYXRjaCBzdGF0ZSBvZiBwZWVyICovCi0JdW5peF9zdGF0ZV9ybG9jayhvdGhlcik7CisJdW5peF9zdGF0ZV9sb2NrKG90aGVyKTsKIAogCS8qIEFwcGFyZW50bHkgVkZTIG92ZXJzbGVwdCBzb2NrZXQgZGVhdGguIFJldHJ5LiAqLwogCWlmIChzb2NrX2ZsYWcob3RoZXIsIFNPQ0tfREVBRCkpIHsKLQkJdW5peF9zdGF0ZV9ydW5sb2NrKG90aGVyKTsKKwkJdW5peF9zdGF0ZV91bmxvY2sob3RoZXIpOwogCQlzb2NrX3B1dChvdGhlcik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CkBAIC0xMDQ5LDE4ICsxMDgxLDE4IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQl1bml4X3N0YXRlX3dsb2NrX25lc3RlZChzayk7CisJdW5peF9zdGF0ZV9sb2NrX25lc3RlZChzayk7CiAKIAlpZiAoc2stPnNrX3N0YXRlICE9IHN0KSB7Ci0JCXVuaXhfc3RhdGVfd3VubG9jayhzayk7Ci0JCXVuaXhfc3RhdGVfcnVubG9jayhvdGhlcik7CisJCXVuaXhfc3RhdGVfdW5sb2NrKHNrKTsKKwkJdW5peF9zdGF0ZV91bmxvY2sob3RoZXIpOwogCQlzb2NrX3B1dChvdGhlcik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKIAllcnIgPSBzZWN1cml0eV91bml4X3N0cmVhbV9jb25uZWN0KHNvY2ssIG90aGVyLT5za19zb2NrZXQsIG5ld3NrKTsKIAlpZiAoZXJyKSB7Ci0JCXVuaXhfc3RhdGVfd3VubG9jayhzayk7CisJCXVuaXhfc3RhdGVfdW5sb2NrKHNrKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIApAQCAtMTA5Nyw3ICsxMTI5LDcgQEAKIAlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsJLyogc29ja19ob2xkKCkgZG9lcyBhbiBhdG9taWNfaW5jKCkgKi8KIAl1bml4X3BlZXIoc2spCT0gbmV3c2s7CiAKLQl1bml4X3N0YXRlX3d1bmxvY2soc2spOworCXVuaXhfc3RhdGVfdW5sb2NrKHNrKTsKIAogCS8qIHRha2UgdGVuIGFuZCBhbmQgc2VuZCBpbmZvIHRvIGxpc3RlbmluZyBzb2NrICovCiAJc3Bpbl9sb2NrKCZvdGhlci0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKQEAgLTExMDYsMTQgKzExMzgsMTQgQEAKIAkgKiBpcyBpbnN0YWxsZWQgdG8gbGlzdGVuaW5nIHNvY2tldC4gKi8KIAlhdG9taWNfaW5jKCZuZXd1LT5pbmZsaWdodCk7CiAJc3Bpbl91bmxvY2soJm90aGVyLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOwotCXVuaXhfc3RhdGVfcnVubG9jayhvdGhlcik7CisJdW5peF9zdGF0ZV91bmxvY2sob3RoZXIpOwogCW90aGVyLT5za19kYXRhX3JlYWR5KG90aGVyLCAwKTsKIAlzb2NrX3B1dChvdGhlcik7CiAJcmV0dXJuIDA7CiAKIG91dF91bmxvY2s6CiAJaWYgKG90aGVyKQotCQl1bml4X3N0YXRlX3J1bmxvY2sob3RoZXIpOworCQl1bml4X3N0YXRlX3VubG9jayhvdGhlcik7CiAKIG91dDoKIAlpZiAoc2tiKQpAQCAtMTE3OSwxMCArMTIxMSwxMCBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdW5peF9zayhzayktPnBlZXJfd2FpdCk7CiAKIAkvKiBhdHRhY2ggYWNjZXB0ZWQgc29jayB0byBzb2NrZXQgKi8KLQl1bml4X3N0YXRlX3dsb2NrKHRzayk7CisJdW5peF9zdGF0ZV9sb2NrKHRzayk7CiAJbmV3c29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7CiAJc29ja19ncmFmdCh0c2ssIG5ld3NvY2spOwotCXVuaXhfc3RhdGVfd3VubG9jayh0c2spOworCXVuaXhfc3RhdGVfdW5sb2NrKHRzayk7CiAJcmV0dXJuIDA7CiAKIG91dDoKQEAgLTEyMDksNyArMTI0MSw3IEBACiAJfQogCiAJdSA9IHVuaXhfc2soc2spOwotCXVuaXhfc3RhdGVfcmxvY2soc2spOworCXVuaXhfc3RhdGVfbG9jayhzayk7CiAJaWYgKCF1LT5hZGRyKSB7CiAJCXN1bmFkZHItPnN1bl9mYW1pbHkgPSBBRl9VTklYOwogCQlzdW5hZGRyLT5zdW5fcGF0aFswXSA9IDA7CkBAIC0xMjIwLDcgKzEyNTIsNyBAQAogCQkqdWFkZHJfbGVuID0gYWRkci0+bGVuOwogCQltZW1jcHkoc3VuYWRkciwgYWRkci0+bmFtZSwgKnVhZGRyX2xlbik7CiAJfQotCXVuaXhfc3RhdGVfcnVubG9jayhzayk7CisJdW5peF9zdGF0ZV91bmxvY2soc2spOwogCXNvY2tfcHV0KHNrKTsKIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtMTMzOCw3ICsxMzcwLDcgQEAKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCi0JdW5peF9zdGF0ZV9ybG9jayhvdGhlcik7CisJdW5peF9zdGF0ZV9sb2NrKG90aGVyKTsKIAllcnIgPSAtRVBFUk07CiAJaWYgKCF1bml4X21heV9zZW5kKHNrLCBvdGhlcikpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTEzNDgsMjAgKzEzODAsMjAgQEAKIAkJICoJQ2hlY2sgd2l0aCAxMDAzLjFnIC0gd2hhdCBzaG91bGQKIAkJICoJZGF0YWdyYW0gZXJyb3IKIAkJICovCi0JCXVuaXhfc3RhdGVfcnVubG9jayhvdGhlcik7CisJCXVuaXhfc3RhdGVfdW5sb2NrKG90aGVyKTsKIAkJc29ja19wdXQob3RoZXIpOwogCiAJCWVyciA9IDA7Ci0JCXVuaXhfc3RhdGVfd2xvY2soc2spOworCQl1bml4X3N0YXRlX2xvY2soc2spOwogCQlpZiAodW5peF9wZWVyKHNrKSA9PSBvdGhlcikgewogCQkJdW5peF9wZWVyKHNrKT1OVUxMOwotCQkJdW5peF9zdGF0ZV93dW5sb2NrKHNrKTsKKwkJCXVuaXhfc3RhdGVfdW5sb2NrKHNrKTsKIAogCQkJdW5peF9kZ3JhbV9kaXNjb25uZWN0ZWQoc2ssIG90aGVyKTsKIAkJCXNvY2tfcHV0KG90aGVyKTsKIAkJCWVyciA9IC1FQ09OTlJFRlVTRUQ7CiAJCX0gZWxzZSB7Ci0JCQl1bml4X3N0YXRlX3d1bmxvY2soc2spOworCQkJdW5peF9zdGF0ZV91bmxvY2soc2spOwogCQl9CiAKIAkJb3RoZXIgPSBOVUxMOwpAQCAtMTM5OCwxNCArMTQzMCwxNCBAQAogCX0KIAogCXNrYl9xdWV1ZV90YWlsKCZvdGhlci0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKLQl1bml4X3N0YXRlX3J1bmxvY2sob3RoZXIpOworCXVuaXhfc3RhdGVfdW5sb2NrKG90aGVyKTsKIAlvdGhlci0+c2tfZGF0YV9yZWFkeShvdGhlciwgbGVuKTsKIAlzb2NrX3B1dChvdGhlcik7CiAJc2NtX2Rlc3Ryb3koc2lvY2ItPnNjbSk7CiAJcmV0dXJuIGxlbjsKIAogb3V0X3VubG9jazoKLQl1bml4X3N0YXRlX3J1bmxvY2sob3RoZXIpOworCXVuaXhfc3RhdGVfdW5sb2NrKG90aGVyKTsKIG91dF9mcmVlOgogCWtmcmVlX3NrYihza2IpOwogb3V0OgpAQCAtMTQ5NSwxNCArMTUyNywxNCBAQAogCQkJZ290byBvdXRfZXJyOwogCQl9CiAKLQkJdW5peF9zdGF0ZV9ybG9jayhvdGhlcik7CisJCXVuaXhfc3RhdGVfbG9jayhvdGhlcik7CiAKIAkJaWYgKHNvY2tfZmxhZyhvdGhlciwgU09DS19ERUFEKSB8fAogCQkgICAgKG90aGVyLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikpCiAJCQlnb3RvIHBpcGVfZXJyX2ZyZWU7CiAKIAkJc2tiX3F1ZXVlX3RhaWwoJm90aGVyLT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOwotCQl1bml4X3N0YXRlX3J1bmxvY2sob3RoZXIpOworCQl1bml4X3N0YXRlX3VubG9jayhvdGhlcik7CiAJCW90aGVyLT5za19kYXRhX3JlYWR5KG90aGVyLCBzaXplKTsKIAkJc2VudCs9c2l6ZTsKIAl9CkBAIC0xNTEzLDcgKzE1NDUsNyBAQAogCXJldHVybiBzZW50OwogCiBwaXBlX2Vycl9mcmVlOgotCXVuaXhfc3RhdGVfcnVubG9jayhvdGhlcik7CisJdW5peF9zdGF0ZV91bmxvY2sob3RoZXIpOwogCWtmcmVlX3NrYihza2IpOwogcGlwZV9lcnI6CiAJaWYgKHNlbnQ9PTAgJiYgIShtc2ctPm1zZ19mbGFncyZNU0dfTk9TSUdOQUwpKQpAQCAtMTY0Miw3ICsxNjc0LDcgQEAKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAotCXVuaXhfc3RhdGVfcmxvY2soc2spOworCXVuaXhfc3RhdGVfbG9jayhzayk7CiAKIAlmb3IgKDs7KSB7CiAJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwpAQCAtMTY1NSwxNCArMTY4NywxNCBAQAogCQkJYnJlYWs7CiAKIAkJc2V0X2JpdChTT0NLX0FTWU5DX1dBSVREQVRBLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOwotCQl1bml4X3N0YXRlX3J1bmxvY2soc2spOworCQl1bml4X3N0YXRlX3VubG9jayhzayk7CiAJCXRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7Ci0JCXVuaXhfc3RhdGVfcmxvY2soc2spOworCQl1bml4X3N0YXRlX2xvY2soc2spOwogCQljbGVhcl9iaXQoU09DS19BU1lOQ19XQUlUREFUQSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKIAl9CiAKIAlmaW5pc2hfd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0KTsKLQl1bml4X3N0YXRlX3J1bmxvY2soc2spOworCXVuaXhfc3RhdGVfdW5sb2NrKHNrKTsKIAlyZXR1cm4gdGltZW87CiB9CiAKQEAgLTE4MTcsMTIgKzE4NDksMTIgQEAKIAltb2RlID0gKG1vZGUrMSkmKFJDVl9TSFVURE9XTnxTRU5EX1NIVVRET1dOKTsKIAogCWlmIChtb2RlKSB7Ci0JCXVuaXhfc3RhdGVfd2xvY2soc2spOworCQl1bml4X3N0YXRlX2xvY2soc2spOwogCQlzay0+c2tfc2h1dGRvd24gfD0gbW9kZTsKIAkJb3RoZXI9dW5peF9wZWVyKHNrKTsKIAkJaWYgKG90aGVyKQogCQkJc29ja19ob2xkKG90aGVyKTsKLQkJdW5peF9zdGF0ZV93dW5sb2NrKHNrKTsKKwkJdW5peF9zdGF0ZV91bmxvY2soc2spOwogCQlzay0+c2tfc3RhdGVfY2hhbmdlKHNrKTsKIAogCQlpZiAob3RoZXIgJiYKQEAgLTE4MzQsOSArMTg2Niw5IEBACiAJCQkJcGVlcl9tb2RlIHw9IFNFTkRfU0hVVERPV047CiAJCQlpZiAobW9kZSZTRU5EX1NIVVRET1dOKQogCQkJCXBlZXJfbW9kZSB8PSBSQ1ZfU0hVVERPV047Ci0JCQl1bml4X3N0YXRlX3dsb2NrKG90aGVyKTsKKwkJCXVuaXhfc3RhdGVfbG9jayhvdGhlcik7CiAJCQlvdGhlci0+c2tfc2h1dGRvd24gfD0gcGVlcl9tb2RlOwotCQkJdW5peF9zdGF0ZV93dW5sb2NrKG90aGVyKTsKKwkJCXVuaXhfc3RhdGVfdW5sb2NrKG90aGVyKTsKIAkJCW90aGVyLT5za19zdGF0ZV9jaGFuZ2Uob3RoZXIpOwogCQkJcmVhZF9sb2NrKCZvdGhlci0+c2tfY2FsbGJhY2tfbG9jayk7CiAJCQlpZiAocGVlcl9tb2RlID09IFNIVVRET1dOX01BU0spCkBAIC0xOTc0LDcgKzIwMDYsNyBAQAogCWVsc2UgewogCQlzdHJ1Y3Qgc29jayAqcyA9IHY7CiAJCXN0cnVjdCB1bml4X3NvY2sgKnUgPSB1bml4X3NrKHMpOwotCQl1bml4X3N0YXRlX3Jsb2NrKHMpOworCQl1bml4X3N0YXRlX2xvY2socyk7CiAKIAkJc2VxX3ByaW50ZihzZXEsICIlcDogJTA4WCAlMDhYICUwOFggJTA0WCAlMDJYICU1bHUiLAogCQkJcywKQEAgLTIwMDIsNyArMjAzNCw3IEBACiAJCQlmb3IgKCA7IGkgPCBsZW47IGkrKykKIAkJCQlzZXFfcHV0YyhzZXEsIHUtPmFkZHItPm5hbWUtPnN1bl9wYXRoW2ldKTsKIAkJfQotCQl1bml4X3N0YXRlX3J1bmxvY2socyk7CisJCXVuaXhfc3RhdGVfdW5sb2NrKHMpOwogCQlzZXFfcHV0YyhzZXEsICdcbicpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3dhbnJvdXRlci93YW5tYWluLmMgYi9uZXQvd2Fucm91dGVyL3dhbm1haW4uYwppbmRleCA3YTE5ZTBlLi44NDljYzA2IDEwMDY0NAotLS0gYS9uZXQvd2Fucm91dGVyL3dhbm1haW4uYworKysgYi9uZXQvd2Fucm91dGVyL3dhbm1haW4uYwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJfQogCiAJaWYgKGNvbmYtPmRhdGFfc2l6ZSAmJiBjb25mLT5kYXRhKSB7Ci0JCWlmIChjb25mLT5kYXRhX3NpemUgPiAxMjgwMDAgfHwgY29uZi0+ZGF0YV9zaXplIDwgMCkgeworCQlpZiAoY29uZi0+ZGF0YV9zaXplID4gMTI4MDAwKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgIiVzOiBFUlJPUiwgSW52YWxpZCBmaXJtd2FyZSBkYXRhIHNpemUgJWkgIVxuIiwKIAkJCQkJd2FuZGV2LT5uYW1lLCBjb25mLT5kYXRhX3NpemUpOwpkaWZmIC0tZ2l0IGEvbmV0L3gyNS9hZl94MjUuYyBiL25ldC94MjUvYWZfeDI1LmMKaW5kZXggMGQ2MDAyZmMuLjQ3OTkyN2MgMTAwNjQ0Ci0tLSBhL25ldC94MjUvYWZfeDI1LmMKKysrIGIvbmV0L3gyNS9hZl94MjUuYwpAQCAtMTYwNSw3ICsxNjA1LDYgQEAKIAkuc2VuZHBhZ2UgPQlzb2NrX25vX3NlbmRwYWdlLAogfTsKIAotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiBTT0NLT1BTX1dSQVAoeDI1X3Byb3RvLCBBRl9YMjUpOwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHgyNV9wYWNrZXRfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fYWxnby5jIGIvbmV0L3hmcm0veGZybV9hbGdvLmMKaW5kZXggNjI0OWE5NC4uNWNlZDYyYyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9hbGdvLmMKKysrIGIvbmV0L3hmcm0veGZybV9hbGdvLmMKQEAgLTM0Nyw2NyArMzQ3LDQ0IEBACiAJcmV0dXJuIEFSUkFZX1NJWkUoY2FsZ19saXN0KTsKIH0KIAotLyogVG9kbzogZ2VuZXJpYyBpdGVyYXRvcnMgKi8KLXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9hYWxnX2dldF9ieWlkKGludCBhbGdfaWQpCitzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgeworCXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqYWxnczsKKwlpbnQgZW50cmllczsKKwl1MzIgdHlwZTsKKwl1MzIgbWFzazsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgeGZybV9hYWxnX2xpc3QgPSB7CisJLmFsZ3MgPSBhYWxnX2xpc3QsCisJLmVudHJpZXMgPSBBUlJBWV9TSVpFKGFhbGdfbGlzdCksCisJLnR5cGUgPSBDUllQVE9fQUxHX1RZUEVfSEFTSCwKKwkubWFzayA9IENSWVBUT19BTEdfVFlQRV9IQVNIX01BU0sgfCBDUllQVE9fQUxHX0FTWU5DLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2FsZ29fbGlzdCB4ZnJtX2VhbGdfbGlzdCA9IHsKKwkuYWxncyA9IGVhbGdfbGlzdCwKKwkuZW50cmllcyA9IEFSUkFZX1NJWkUoZWFsZ19saXN0KSwKKwkudHlwZSA9IENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLm1hc2sgPSBDUllQVE9fQUxHX1RZUEVfTUFTSyB8IENSWVBUT19BTEdfQVNZTkMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0IHhmcm1fY2FsZ19saXN0ID0geworCS5hbGdzID0gY2FsZ19saXN0LAorCS5lbnRyaWVzID0gQVJSQVlfU0laRShjYWxnX2xpc3QpLAorCS50eXBlID0gQ1JZUFRPX0FMR19UWVBFX0NPTVBSRVNTLAorCS5tYXNrID0gQ1JZUFRPX0FMR19UWVBFX01BU0sgfCBDUllQVE9fQUxHX0FTWU5DLAorfTsKKworc3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9maW5kX2FsZ28oCisJY29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0ICphbGdvX2xpc3QsCisJaW50IG1hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqZW50cnksIGNvbnN0IHZvaWQgKmRhdGEpLAorCWNvbnN0IHZvaWQgKmRhdGEsIGludCBwcm9iZSkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBhYWxnX2VudHJpZXMoKTsgaSsrKSB7Ci0JCWlmIChhYWxnX2xpc3RbaV0uZGVzYy5zYWRiX2FsZ19pZCA9PSBhbGdfaWQpIHsKLQkJCWlmIChhYWxnX2xpc3RbaV0uYXZhaWxhYmxlKQotCQkJCXJldHVybiAmYWFsZ19saXN0W2ldOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoeGZybV9hYWxnX2dldF9ieWlkKTsKLQotc3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBlYWxnX2VudHJpZXMoKTsgaSsrKSB7Ci0JCWlmIChlYWxnX2xpc3RbaV0uZGVzYy5zYWRiX2FsZ19pZCA9PSBhbGdfaWQpIHsKLQkJCWlmIChlYWxnX2xpc3RbaV0uYXZhaWxhYmxlKQotCQkJCXJldHVybiAmZWFsZ19saXN0W2ldOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoeGZybV9lYWxnX2dldF9ieWlkKTsKLQotc3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2NhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBjYWxnX2VudHJpZXMoKTsgaSsrKSB7Ci0JCWlmIChjYWxnX2xpc3RbaV0uZGVzYy5zYWRiX2FsZ19pZCA9PSBhbGdfaWQpIHsKLQkJCWlmIChjYWxnX2xpc3RbaV0uYXZhaWxhYmxlKQotCQkJCXJldHVybiAmY2FsZ19saXN0W2ldOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoeGZybV9jYWxnX2dldF9ieWlkKTsKLQotc3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9nZXRfYnluYW1lKHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqbGlzdCwKLQkJCQkJICAgICAgaW50IGVudHJpZXMsIHUzMiB0eXBlLCB1MzIgbWFzaywKLQkJCQkJICAgICAgY2hhciAqbmFtZSwgaW50IHByb2JlKQoteworCXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqbGlzdCA9IGFsZ29fbGlzdC0+YWxnczsKIAlpbnQgaSwgc3RhdHVzOwogCi0JaWYgKCFuYW1lKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKLQkJaWYgKHN0cmNtcChuYW1lLCBsaXN0W2ldLm5hbWUpICYmCi0JCSAgICAoIWxpc3RbaV0uY29tcGF0IHx8IHN0cmNtcChuYW1lLCBsaXN0W2ldLmNvbXBhdCkpKQorCWZvciAoaSA9IDA7IGkgPCBhbGdvX2xpc3QtPmVudHJpZXM7IGkrKykgeworCQlpZiAoIW1hdGNoKGxpc3QgKyBpLCBkYXRhKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsaXN0W2ldLmF2YWlsYWJsZSkKQEAgLTQxNiw4ICszOTMsOCBAQAogCQlpZiAoIXByb2JlKQogCQkJYnJlYWs7CiAKLQkJc3RhdHVzID0gY3J5cHRvX2hhc19hbGcobGlzdFtpXS5uYW1lLCB0eXBlLAotCQkJCQltYXNrIHwgQ1JZUFRPX0FMR19BU1lOQyk7CisJCXN0YXR1cyA9IGNyeXB0b19oYXNfYWxnKGxpc3RbaV0ubmFtZSwgYWxnb19saXN0LT50eXBlLAorCQkJCQlhbGdvX2xpc3QtPm1hc2spOwogCQlpZiAoIXN0YXR1cykKIAkJCWJyZWFrOwogCkBAIC00MjcsMjcgKzQwNCw2MCBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50IHhmcm1fYWxnX2lkX21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqZW50cnksCisJCQkgICAgIGNvbnN0IHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGVudHJ5LT5kZXNjLnNhZGJfYWxnX2lkID09ICh1bnNpZ25lZCBsb25nKWRhdGE7Cit9CisKK3N0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9hYWxnX2dldF9ieWlkKGludCBhbGdfaWQpCit7CisJcmV0dXJuIHhmcm1fZmluZF9hbGdvKCZ4ZnJtX2FhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsCisJCQkgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFsZ19pZCwgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2FhbGdfZ2V0X2J5aWQpOworCitzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKQoreworCXJldHVybiB4ZnJtX2ZpbmRfYWxnbygmeGZybV9lYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLAorCQkJICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylhbGdfaWQsIDEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGZybV9lYWxnX2dldF9ieWlkKTsKKworc3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2NhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZCkKK3sKKwlyZXR1cm4geGZybV9maW5kX2FsZ28oJnhmcm1fY2FsZ19saXN0LCB4ZnJtX2FsZ19pZF9tYXRjaCwKKwkJCSAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHhmcm1fY2FsZ19nZXRfYnlpZCk7CisKK3N0YXRpYyBpbnQgeGZybV9hbGdfbmFtZV9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmVudHJ5LAorCQkJICAgICAgIGNvbnN0IHZvaWQgKmRhdGEpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IGRhdGE7CisKKwlyZXR1cm4gbmFtZSAmJiAoIXN0cmNtcChuYW1lLCBlbnRyeS0+bmFtZSkgfHwKKwkJCShlbnRyeS0+Y29tcGF0ICYmICFzdHJjbXAobmFtZSwgZW50cnktPmNvbXBhdCkpKTsKK30KKwogc3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2FhbGdfZ2V0X2J5bmFtZShjaGFyICpuYW1lLCBpbnQgcHJvYmUpCiB7Ci0JcmV0dXJuIHhmcm1fZ2V0X2J5bmFtZShhYWxnX2xpc3QsIGFhbGdfZW50cmllcygpLAotCQkJICAgICAgIENSWVBUT19BTEdfVFlQRV9IQVNILCBDUllQVE9fQUxHX1RZUEVfSEFTSF9NQVNLLAotCQkJICAgICAgIG5hbWUsIHByb2JlKTsKKwlyZXR1cm4geGZybV9maW5kX2FsZ28oJnhmcm1fYWFsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLAorCQkJICAgICAgcHJvYmUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeGZybV9hYWxnX2dldF9ieW5hbWUpOwogCiBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnluYW1lKGNoYXIgKm5hbWUsIGludCBwcm9iZSkKIHsKLQlyZXR1cm4geGZybV9nZXRfYnluYW1lKGVhbGdfbGlzdCwgZWFsZ19lbnRyaWVzKCksCi0JCQkgICAgICAgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwgQ1JZUFRPX0FMR19UWVBFX01BU0ssCi0JCQkgICAgICAgbmFtZSwgcHJvYmUpOworCXJldHVybiB4ZnJtX2ZpbmRfYWxnbygmeGZybV9lYWxnX2xpc3QsIHhmcm1fYWxnX25hbWVfbWF0Y2gsIG5hbWUsCisJCQkgICAgICBwcm9iZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2VhbGdfZ2V0X2J5bmFtZSk7CiAKIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9jYWxnX2dldF9ieW5hbWUoY2hhciAqbmFtZSwgaW50IHByb2JlKQogewotCXJldHVybiB4ZnJtX2dldF9ieW5hbWUoY2FsZ19saXN0LCBjYWxnX2VudHJpZXMoKSwKLQkJCSAgICAgICBDUllQVE9fQUxHX1RZUEVfQ09NUFJFU1MsIENSWVBUT19BTEdfVFlQRV9NQVNLLAotCQkJICAgICAgIG5hbWUsIHByb2JlKTsKKwlyZXR1cm4geGZybV9maW5kX2FsZ28oJnhmcm1fY2FsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLAorCQkJICAgICAgcHJvYmUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeGZybV9jYWxnX2dldF9ieW5hbWUpOwogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2hhc2guYyBiL25ldC94ZnJtL3hmcm1faGFzaC5jCmluZGV4IDM3NjQzYmIuLjU1YWI1NzkgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faGFzaC5jCisrKyBiL25ldC94ZnJtL3hmcm1faGFzaC5jCkBAIC0yMiw3ICsyMiw4IEBACiAJCW4gPSBfX3ZtYWxsb2Moc3osIEdGUF9LRVJORUwsIFBBR0VfS0VSTkVMKTsKIAllbHNlCiAJCW4gPSAoc3RydWN0IGhsaXN0X2hlYWQgKikKLQkJCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgZ2V0X29yZGVyKHN6KSk7CisJCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sCisJCQkJCSBnZXRfb3JkZXIoc3opKTsKIAogCWlmIChuKQogCQltZW1zZXQobiwgMCwgc3opOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKaW5kZXggOTUyNzFlOC4uNjRhMzc1MSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYworKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCkBAIC0yNiw5ICsyNiwxMiBAQAogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogCiAjaW5jbHVkZSAieGZybV9oYXNoLmgiCiAKK2ludCBzeXNjdGxfeGZybV9sYXJ2YWxfZHJvcCBfX3JlYWRfbW9zdGx5OworCiBERUZJTkVfTVVURVgoeGZybV9jZmdfbXV0ZXgpOwogRVhQT1JUX1NZTUJPTCh4ZnJtX2NmZ19tdXRleCk7CiAKQEAgLTc5Niw2ICs3OTksMTAgQEAKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47CiAJc3RydWN0IGhsaXN0X25vZGUgKmVudHJ5OwogCisJKmVyciA9IC1FTk9FTlQ7CisJaWYgKHhmcm1fcG9saWN5X2lkMmRpcihpZCkgIT0gZGlyKQorCQlyZXR1cm4gTlVMTDsKKwogCSplcnIgPSAwOwogCXdyaXRlX2xvY2tfYmgoJnhmcm1fcG9saWN5X2xvY2spOwogCWNoYWluID0geGZybV9wb2xpY3lfYnlpZHggKyBpZHhfaGFzaChpZCk7CkBAIC0xMzg2LDggKzEzOTMsOCBAQAogICogQXQgdGhlIG1vbWVudCB3ZSBlYXQgYSByYXcgSVAgcm91dGUuIE1vc3RseSB0byBzcGVlZCB1cCBsb29rdXBzCiAgKiBvbiBpbnRlcmZhY2VzIHdpdGggZGlzYWJsZWQgSVBzZWMuCiAgKi8KLWludCB4ZnJtX2xvb2t1cChzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0X3AsIHN0cnVjdCBmbG93aSAqZmwsCi0JCXN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKQoraW50IF9feGZybV9sb29rdXAoc3RydWN0IGRzdF9lbnRyeSAqKmRzdF9wLCBzdHJ1Y3QgZmxvd2kgKmZsLAorCQkgIHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKQogewogCXN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5OwogCXN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sc1tYRlJNX1BPTElDWV9UWVBFX01BWF07CkBAIC0xNTA1LDYgKzE1MTIsMTMgQEAKIAogCQlpZiAodW5saWtlbHkobng8MCkpIHsKIAkJCWVyciA9IG54OworCQkJaWYgKGVyciA9PSAtRUFHQUlOICYmIHN5c2N0bF94ZnJtX2xhcnZhbF9kcm9wKSB7CisJCQkJLyogRVJFTU9URSB0ZWxscyB0aGUgY2FsbGVyIHRvIGdlbmVyYXRlCisJCQkJICogYSBvbmUtc2hvdCBibGFja2hvbGUgcm91dGUuCisJCQkJICovCisJCQkJeGZybV9wb2xfcHV0KHBvbGljeSk7CisJCQkJcmV0dXJuIC1FUkVNT1RFOworCQkJfQogCQkJaWYgKGVyciA9PSAtRUFHQUlOICYmIGZsYWdzKSB7CiAJCQkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKQEAgLTE1OTQsNiArMTYwOCwyMSBAQAogCSpkc3RfcCA9IE5VTEw7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woX194ZnJtX2xvb2t1cCk7CisKK2ludCB4ZnJtX2xvb2t1cChzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0X3AsIHN0cnVjdCBmbG93aSAqZmwsCisJCXN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKQoreworCWludCBlcnIgPSBfX3hmcm1fbG9va3VwKGRzdF9wLCBmbCwgc2ssIGZsYWdzKTsKKworCWlmIChlcnIgPT0gLUVSRU1PVEUpIHsKKwkJZHN0X3JlbGVhc2UoKmRzdF9wKTsKKwkJKmRzdF9wID0gTlVMTDsKKwkJZXJyID0gLUVBR0FJTjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQogRVhQT1JUX1NZTUJPTCh4ZnJtX2xvb2t1cCk7CiAKIHN0YXRpYyBpbmxpbmUgaW50CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKaW5kZXggOTk1NWZmNC4uMzcyZjA2ZSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jCisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwpAQCAtMjEsMTggKzIxLDIxIEBACiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIAogI2luY2x1ZGUgInhmcm1faGFzaC5oIgogCiBzdHJ1Y3Qgc29jayAqeGZybV9ubDsKIEVYUE9SVF9TWU1CT0woeGZybV9ubCk7CiAKLXUzMiBzeXNjdGxfeGZybV9hZXZlbnRfZXRpbWUgPSBYRlJNX0FFX0VUSU1FOwordTMyIHN5c2N0bF94ZnJtX2FldmVudF9ldGltZSBfX3JlYWRfbW9zdGx5ID0gWEZSTV9BRV9FVElNRTsKIEVYUE9SVF9TWU1CT0woc3lzY3RsX3hmcm1fYWV2ZW50X2V0aW1lKTsKIAotdTMyIHN5c2N0bF94ZnJtX2FldmVudF9yc2VxdGggPSBYRlJNX0FFX1NFUVRfU0laRTsKK3UzMiBzeXNjdGxfeGZybV9hZXZlbnRfcnNlcXRoIF9fcmVhZF9tb3N0bHkgPSBYRlJNX0FFX1NFUVRfU0laRTsKIEVYUE9SVF9TWU1CT0woc3lzY3RsX3hmcm1fYWV2ZW50X3JzZXF0aCk7CiAKK3UzMiBzeXNjdGxfeGZybV9hY3FfZXhwaXJlcyBfX3JlYWRfbW9zdGx5ID0gMzA7CisKIC8qIEVhY2ggeGZybV9zdGF0ZSBtYXkgYmUgbGlua2VkIHRvIHR3byB0YWJsZXM6CiAKICAgIDEuIEhhc2ggdGFibGUgYnkgKHNwaSxkYWRkcixhaC9lc3ApIHRvIGZpbmQgU0EgYnkgU1BJLiAoaW5wdXQsY3RsKQpAQCAtNjIyLDggKzYyNSw4IEBACiAJCQkJaCA9IHhmcm1fc3BpX2hhc2goJngtPmlkLmRhZGRyLCB4LT5pZC5zcGksIHgtPmlkLnByb3RvLCBmYW1pbHkpOwogCQkJCWhsaXN0X2FkZF9oZWFkKCZ4LT5ieXNwaSwgeGZybV9zdGF0ZV9ieXNwaStoKTsKIAkJCX0KLQkJCXgtPmxmdC5oYXJkX2FkZF9leHBpcmVzX3NlY29uZHMgPSBYRlJNX0FDUV9FWFBJUkVTOwotCQkJeC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBYRlJNX0FDUV9FWFBJUkVTKkhaOworCQkJeC0+bGZ0LmhhcmRfYWRkX2V4cGlyZXNfc2Vjb25kcyA9IHN5c2N0bF94ZnJtX2FjcV9leHBpcmVzOworCQkJeC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBzeXNjdGxfeGZybV9hY3FfZXhwaXJlcypIWjsKIAkJCWFkZF90aW1lcigmeC0+dGltZXIpOwogCQkJeGZybV9zdGF0ZV9udW0rKzsKIAkJCXhmcm1faGFzaF9ncm93X2NoZWNrKHgtPmJ5ZHN0Lm5leHQgIT0gTlVMTCk7CkBAIC03NzIsOSArNzc1LDkgQEAKIAkJeC0+cHJvcHMuZmFtaWx5ID0gZmFtaWx5OwogCQl4LT5wcm9wcy5tb2RlID0gbW9kZTsKIAkJeC0+cHJvcHMucmVxaWQgPSByZXFpZDsKLQkJeC0+bGZ0LmhhcmRfYWRkX2V4cGlyZXNfc2Vjb25kcyA9IFhGUk1fQUNRX0VYUElSRVM7CisJCXgtPmxmdC5oYXJkX2FkZF9leHBpcmVzX3NlY29uZHMgPSBzeXNjdGxfeGZybV9hY3FfZXhwaXJlczsKIAkJeGZybV9zdGF0ZV9ob2xkKHgpOwotCQl4LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIFhGUk1fQUNRX0VYUElSRVMqSFo7CisJCXgtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgc3lzY3RsX3hmcm1fYWNxX2V4cGlyZXMqSFo7CiAJCWFkZF90aW1lcigmeC0+dGltZXIpOwogCQlobGlzdF9hZGRfaGVhZCgmeC0+Ynlkc3QsIHhmcm1fc3RhdGVfYnlkc3QraCk7CiAJCWggPSB4ZnJtX3NyY19oYXNoKGRhZGRyLCBzYWRkciwgZmFtaWx5KTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuaGVhZGVyc2luc3QgYi9zY3JpcHRzL01ha2VmaWxlLmhlYWRlcnNpbnN0CmluZGV4IGY3YjY3MDUuLjhjZDYzMDEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUuaGVhZGVyc2luc3QKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5oZWFkZXJzaW5zdApAQCAtMTQ0LDcgKzE0NCw3IEBACiAJJChjYWxsIGNtZCxjaGVjaykKIAogIyBPdGhlciBkZXBlbmRlbmNpZXMgZm9yICQoY2hlY2steSkKLS1pbmNsdWRlIC9kZXYvbnVsbCAkKGNoZWNrLXkpCitpbmNsdWRlIC9kZXYvbnVsbCAkKHdpbGRjYXJkICQoY2hlY2steSkpCiAKICMgLi4uIGJ1dCBsZWF2ZSAkKGNoZWNrLXkpIGFzIC5QSE9OWSBmb3Igbm93IHVudGlsIHRob3NlIGRlcHMgYXJlIGFjdHVhbGx5IGNvcnJlY3QuCiAuUEhPTlk6ICQoY2hlY2steSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmFzaWMvZG9jcHJvYy5jIGIvc2NyaXB0cy9iYXNpYy9kb2Nwcm9jLmMKaW5kZXggZDYwNzFjYi4uZjRkMmY2OCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9iYXNpYy9kb2Nwcm9jLmMKKysrIGIvc2NyaXB0cy9iYXNpYy9kb2Nwcm9jLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogICogRG9jdW1lbnQgYWxsIGV4dGVybmFsIG9yIGludGVybmFsIGZ1bmN0aW9ucyBpbiBhIGZpbGUuCiAgKiBDYWxsIGtlcm5lbC1kb2Mgd2l0aCBmb2xsb3dpbmcgcGFyYW1ldGVyczoKICAqIGtlcm5lbC1kb2MgLWRvY2Jvb2sgLW5vZnVuY3Rpb24gZnVuY3Rpb25fbmFtZTEgZmlsZW5hbWUKLSAqIGZ1bmN0aW9uIG5hbWVzIGFyZSBvYnRhaW5lZCBmcm9tIGFsbCB0aGUgdGhlIHNyYyBmaWxlcworICogZnVuY3Rpb24gbmFtZXMgYXJlIG9idGFpbmVkIGZyb20gYWxsIHRoZSBzcmMgZmlsZXMKICAqIGJ5IGZpbmRfZXhwb3J0X3N5bWJvbHMuCiAgKiBpbnRmdW5jIHVzZXMgLW5vZnVuY3Rpb24KICAqIGV4dGZ1bmMgdXNlcyAtZnVuY3Rpb24KZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbCBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjE2ZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCkBAIC0wLDAgKzEsNTk1IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMgKGMpIDIwMDEsIERhdmUgSm9uZXMuIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4gKHRoZSBmaWxlIGhhbmRsaW5nIGJpdCkKKyMgKGMpIDIwMDUsIEpvZWwgU2NvaHBwIDxqc2Nob3BwQGF1c3Rpbi5pYm0uY29tPiAodGhlIHVnbHkgYml0KQorIyAoYykgMjAwNywgQW5keSBXaGl0Y3JvZnQgPGFwd0B1ay5pYm0uY29tPiAobmV3IGNvbmRpdGlvbnMsIHRlc3Qgc3VpdGUsIGV0YykKKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisKK3VzZSBzdHJpY3Q7CisKK215ICRQID0gJDA7CisKK215ICRWID0gJzAuMDEnOworCit1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9fYXV0b19hYmJyZXYpOworCitteSAkcXVpZXQgPSAwOworbXkgJHRyZWUgPSAxOworbXkgJGNoa19zaWdub2ZmID0gMTsKK215ICRjaGtfcGF0Y2ggPSAxOworR2V0T3B0aW9ucygKKwkncXxxdWlldCcJPT4gXCRxdWlldCwKKwkndHJlZSEnCQk9PiBcJHRyZWUsCisJJ3NpZ25vZmYhJwk9PiBcJGNoa19zaWdub2ZmLAorCSdwYXRjaCEnCT0+IFwkY2hrX3BhdGNoLAorKSBvciBleGl0OworCitteSAkZXhpdCA9IDA7CisKK2lmICgkI0FSR1YgPCAwKSB7CisJcHJpbnQgInVzYWdlOiBwYXRjaHN0eWxlY2hlY2tlbWFpbC5wbCBbb3B0aW9uc10gcGF0Y2hmaWxlXG4iOworCXByaW50ICJ2ZXJzaW9uOiAkVlxuIjsKKwlwcmludCAib3B0aW9uczogLXEgICAgICAgICAgID0+IHF1aWV0XG4iOworCXByaW50ICIgICAgICAgICAtLW5vLXRyZWUgICAgPT4gcnVuIHdpdGhvdXQgYSBrZXJuZWwgdHJlZVxuIjsKKwlleGl0KDEpOworfQorCitpZiAoJHRyZWUgJiYgIXRvcF9vZl9rZXJuZWxfdHJlZSgpKSB7CisJcHJpbnQgIk11c3QgYmUgcnVuIGZyb20gdGhlIHRvcC1sZXZlbCBkaXIuIG9mIGEga2VybmVsIHRyZWVcbiI7CisJZXhpdCgyKTsKK30KKworbXkgQGRlcHJlY2F0ZWQgPSAoKTsKK215ICRyZW1vdmFsID0gJ0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCc7CitpZiAoJHRyZWUgJiYgLWYgJHJlbW92YWwpIHsKKwlvcGVuKFJFTU9WRSwgIjwkcmVtb3ZhbCIpIHx8IGRpZSAiJFA6ICRyZW1vdmFsOiBvcGVuIGZhaWxlZCAtICQhXG4iOworCXdoaWxlICg8UkVNT1ZFPikgeworCQlpZiAoL15GaWxlczpccysoLipcUykvKSB7CisJCQlmb3IgbXkgJGZpbGUgKHNwbGl0KC9bLCBdKy8sICQxKSkgeworCQkJCWlmICgkZmlsZSA9fiBtQGluY2x1ZGUvKC4qKUApIHsKKwkJCQkJcHVzaChAZGVwcmVjYXRlZCwgJDEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKworbXkgQGxpbmVzID0gKCk7Cit3aGlsZSAoPD4pIHsKKwljaG9tcDsKKwlwdXNoKEBsaW5lcywgJF8pOworCWlmIChlb2YoQVJHVikpIHsKKwkJaWYgKCFwcm9jZXNzKCRBUkdWLCBAbGluZXMpKSB7CisJCQkkZXhpdCA9IDE7CisJCX0KKwkJQGxpbmVzID0gKCk7CisJfQorfQorCitleGl0KCRleGl0KTsKKworc3ViIHRvcF9vZl9rZXJuZWxfdHJlZSB7CisJaWYgKCgtZiAiQ09QWUlORyIpICYmICgtZiAiQ1JFRElUUyIpICYmICgtZiAiS2J1aWxkIikgJiYKKwkgICAgKC1mICJNQUlOVEFJTkVSUyIpICYmICgtZiAiTWFrZWZpbGUiKSAmJiAoLWYgIlJFQURNRSIpICYmCisJICAgICgtZCAiRG9jdW1lbnRhdGlvbiIpICYmICgtZCAiYXJjaCIpICYmICgtZCAiaW5jbHVkZSIpICYmCisJICAgICgtZCAiZHJpdmVycyIpICYmICgtZCAiZnMiKSAmJiAoLWQgImluaXQiKSAmJiAoLWQgImlwYyIpICYmCisJICAgICgtZCAia2VybmVsIikgJiYgKC1kICJsaWIiKSAmJiAoLWQgInNjcmlwdHMiKSkgeworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N1YiBleHBhbmRfdGFicyB7CisJbXkgKCRzdHIpID0gQF87CisKKwlteSAkcmVzID0gJyc7CisJbXkgJG4gPSAwOworCWZvciBteSAkYyAoc3BsaXQoLy8sICRzdHIpKSB7CisJCWlmICgkYyBlcSAiXHQiKSB7CisJCQkkcmVzIC49ICcgJzsKKwkJCSRuKys7CisJCQlmb3IgKDsgKCRuICUgOCkgIT0gMDsgJG4rKykgeworCQkJCSRyZXMgLj0gJyAnOworCQkJfQorCQkJbmV4dDsKKwkJfQorCQkkcmVzIC49ICRjOworCQkkbisrOworCX0KKworCXJldHVybiAkcmVzOworfQorCitzdWIgY2F0X3ZldCB7CisJbXkgKCR2ZXQpID0gQF87CisKKwkkdmV0ID1+IHMvXHQvXkkvOworCSR2ZXQgPX4gcy8kL1wkLzsKKworCXJldHVybiAkdmV0OworfQorCitzdWIgcHJvY2VzcyB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJbXkgQGxpbmVzID0gQF87CisKKwlteSAkbGluZW5yPTA7CisJbXkgJHByZXZsaW5lPSIiOworCW15ICRzdGFzaGxpbmU9IiI7CisKKwlteSAkbGluZWZvcmNvdW50aW5nPScnOworCW15ICRpbmRlbnQ7CisJbXkgJHByZXZpbmRlbnQ9MDsKKwlteSAkc3Rhc2hpbmRlbnQ9MDsKKworCW15ICRjbGVhbiA9IDE7CisJbXkgJHNpZ25vZmYgPSAwOworCW15ICRpc19wYXRjaCA9IDA7CisKKwkjIFRyYWNlIHRoZSByZWFsIGZpbGUvbGluZSBhcyB3ZSBnby4KKwlteSAkcmVhbGZpbGUgPSAnJzsKKwlteSAkcmVhbGxpbmUgPSAwOworCW15ICRyZWFsY250ID0gMDsKKwlteSAkaGVyZSA9ICcnOworCW15ICRpbl9jb21tZW50ID0gMDsKKwlteSAkZmlyc3RfbGluZSA9IDA7CisKKwlmb3JlYWNoIG15ICRsaW5lIChAbGluZXMpIHsKKwkJJGxpbmVucisrOworCisjZXh0cmFjdCB0aGUgZmlsZW5hbWUgYXMgaXQgcGFzc2VzCisJCWlmICgkbGluZT1+L15cK1wrXCtccysoXFMrKS8pIHsKKwkJCSRyZWFsZmlsZT0kMTsKKwkJCSRpbl9jb21tZW50ID0gMDsKKwkJCW5leHQ7CisJCX0KKyNleHRyYWN0IHRoZSBsaW5lIHJhbmdlIGluIHRoZSBmaWxlIGFmdGVyIHRoZSBwYXRjaCBpcyBhcHBsaWVkCisJCWlmICgkbGluZT1+L15cQFxAIC1cZCssXGQrIFwrKFxkKykoLChcZCspKT8gXEBcQC8pIHsKKwkJCSRpc19wYXRjaCA9IDE7CisJCQkkZmlyc3RfbGluZSA9IDE7CisJCQkkaW5fY29tbWVudCA9IDA7CisJCQkkcmVhbGxpbmU9JDEtMTsKKwkJCWlmIChkZWZpbmVkICQyKSB7CisJCQkJJHJlYWxjbnQ9JDMrMTsKKwkJCX0gZWxzZSB7CisJCQkJJHJlYWxjbnQ9MSsxOworCQkJfQorCQkJbmV4dDsKKwkJfQorCisjdHJhY2sgdGhlIGxpbmUgbnVtYmVyIGFzIHdlIG1vdmUgdGhyb3VnaCB0aGUgaHVuaworCQlpZiAoJGxpbmU9fi9eWyBcK10vKSB7CisJCQkkcmVhbGxpbmUrKzsKKwkJCSRyZWFsY250LS0gaWYgKCRyZWFsY250ICE9IDApOworCisJCQkjIHRyYWNrIGFueSBzb3J0IG9mIG11bHRpLWxpbmUgY29tbWVudC4gIE9idmlvdXNseSBpZgorCQkJIyB0aGUgYWRkZWQgdGV4dCBvciBjb250ZXh0IGRvIG5vdCBpbmNsdWRlIHRoZSB3aG9sZQorCQkJIyBjb21tZW50IHdlIHdpbGwgbm90IHNlZSBpdC4gU3VjaCBpcyBsaWZlLgorCQkJIworCQkJIyBHdWVzdGltYXRlIGlmIHRoaXMgaXMgYSBjb250aW51aW5nIGNvbW1lbnQuICBJZiB0aGlzCisJCQkjIGlzIHRoZSBzdGFydCBvZiBhIGRpZmYgYmxvY2sgYW5kIHRoaXMgbGluZSBzdGFydHMKKwkJCSMgJyAqJyB0aGVuIGl0IGlzIHZlcnkgbGlrZWx5IGEgY29tbWVudC4KKwkJCWlmICgkZmlyc3RfbGluZSBhbmQgJGxpbmUgPX4gbUBeLlxzKlwqQCkgeworCQkJCSRpbl9jb21tZW50ID0gMTsKKwkJCX0KKwkJCWlmICgkbGluZSA9fiBtQC9cKkApIHsKKwkJCQkkaW5fY29tbWVudCA9IDE7CisJCQl9CisJCQlpZiAoJGxpbmUgPX4gbUBcKi9AKSB7CisJCQkJJGluX2NvbW1lbnQgPSAwOworCQkJfQorCisJCQkkbGluZWZvcmNvdW50aW5nID0gJGxpbmU7CisJCQkkbGluZWZvcmNvdW50aW5nID1+IHMvXlwrLy87CisJCQkkbGluZWZvcmNvdW50aW5nID0gZXhwYW5kX3RhYnMoJGxpbmVmb3Jjb3VudGluZyk7CisKKwkJCW15ICgkd2hpdGUpID0gKCRsaW5lZm9yY291bnRpbmcgPX4gL14oXHMqKS8pOworCQkJJGluZGVudCA9IGxlbmd0aCgkd2hpdGUpOworCisJCQkjIFRyYWNrIHRoZSBwcmV2aW91cyBsaW5lLgorCQkJKCRwcmV2bGluZSwgJHN0YXNobGluZSkgPSAoJHN0YXNobGluZSwgJGxpbmUpOworCQkJKCRwcmV2aW5kZW50LCAkc3Rhc2hpbmRlbnQpID0gKCRzdGFzaGluZGVudCwgJGluZGVudCk7CisJCQkkZmlyc3RfbGluZSA9IDA7CisJCX0KKworI21ha2UgdXAgdGhlIGhhbmRsZSBmb3IgYW55IGVycm9yIHdlIHJlcG9ydCBvbiB0aGlzIGxpbmUKKwkJJGhlcmUgPSAiUEFUQ0g6ICRBUkdWOiRsaW5lbnI6IjsKKwkJJGhlcmUgLj0gIlxuRklMRTogJHJlYWxmaWxlOiRyZWFsbGluZToiIGlmICgkcmVhbGNudCAhPSAwKTsKKworCQlteSAkaGVyZWN1cnIgPSAiJGhlcmVcbiRsaW5lXG5cbiI7CisJCW15ICRoZXJlcHJldiA9ICIkaGVyZVxuJHByZXZsaW5lXG4kbGluZVxuXG4iOworCisjY2hlY2sgdGhlIHBhdGNoIGZvciBhIHNpZ25vZmY6CisJCWlmICgkbGluZSA9fiAvXlxzKlNpZ25lZC1vZmYtYnk6XHMvKSB7CisJCQkkc2lnbm9mZisrOworCisJCX0gZWxzaWYgKCRsaW5lID1+IC9eXHMqc2lnbmVkLW9mZi1ieTovaSkgeworCQkJaWYgKCEoJGxpbmUgPX4gL15ccypTaWduZWQtb2ZmLWJ5Oi8pKSB7CisJCQkJcHJpbnQgInVzZSBTaWduZWQtb2ZmLWJ5OlxuIjsKKwkJCQlwcmludCAiJGhlcmVjdXJyIjsKKwkJCQkkY2xlYW4gPSAwOworCQkJfQorCQkJaWYgKCRsaW5lID1+IC9eXHMqc2lnbmVkLW9mZi1ieTpcUy9pKSB7CisJCQkJcHJpbnQgIm5lZWQgc3BhY2UgYWZ0ZXIgU2lnbmVkLW9mZi1ieTpcbiI7CisJCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkJJGNsZWFuID0gMDsKKwkJCX0KKwkJfQorCisjaWdub3JlIGxpbmVzIG5vdCBiZWluZyBhZGRlZAorCQlpZiAoJGxpbmU9fi9eW15cK10vKSB7bmV4dDt9CisKKyMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgc291cmNlIGZpbGUgKi5baGNzU10gaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuaworCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuW2hjc1NdJC8pOworCisjdHJhaWxpbmcgd2hpdGVzcGFjZQorCQlpZiAoJGxpbmU9fi9cU1xzKyQvKSB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJGxpbmUpIC4gIlxuXG4iOworCQkJcHJpbnQgInRyYWlsaW5nIHdoaXRlc3BhY2VcbiI7CisJCQlwcmludCAiJGhlcmV2ZXQiOworCQkJJGNsZWFuID0gMDsKKwkJfQorIzgwIGNvbHVtbiBsaW1pdAorCQlpZiAoISgkcHJldmxpbmU9fi9cL1wqXCovKSAmJiBsZW5ndGgoJGxpbmVmb3Jjb3VudGluZykgPiA4MCkgeworCQkJcHJpbnQgImxpbmUgb3ZlciA4MCBjaGFyYWN0ZXJzXG4iOworCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkkY2xlYW4gPSAwOworCQl9CisKKyMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgc291cmNlIGZpbGUgKi5baGNdIGlmIG5vdCB0aGVuIGlnbm9yZSB0aGlzIGh1bmsKKwkJbmV4dCBpZiAoJHJlYWxmaWxlICF+IC9cLltoY10kLyk7CisKKyMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgYW55IHRhYnMgbXVzdCBjb21lIGZpcnN0IGFuZCBhbnl0aGluZworIyBtb3JlIHRoYW4gOCBtdXN0IHVzZSB0YWJzLgorCQlpZiAoJGxpbmU9fi9eXCtccyogXHRccypcUy8gb3IgJGxpbmU9fi9eXCtccyogICAgICAgIFxzKi8pIHsKKwkJCW15ICRoZXJldmV0ID0gIiRoZXJlXG4iIC4gY2F0X3ZldCgkbGluZSkgLiAiXG5cbiI7CisJCQlwcmludCAidXNlIHRhYnMgbm90IHNwYWNlc1xuIjsKKwkJCXByaW50ICIkaGVyZXZldCI7CisJCQkkY2xlYW4gPSAwOworCQl9CisKKwkJIworCQkjIFRoZSByZXN0IG9mIG91ciBjaGVja3MgcmVmZXIgc3BlY2lmaWNhbGx5IHRvIEMgc3R5bGUKKwkJIyBvbmx5IGFwcGx5IHRob3NlIF9vdXRzaWRlXyBjb21tZW50cy4KKwkJIworCQluZXh0IGlmICgkaW5fY29tbWVudCk7CisKKyMgbm8gQzk5IC8vIGNvbW1lbnRzCisJCWlmICgkbGluZSA9fiBtQC8vQCBhbmQgISgkbGluZSA9fiBtQFwiLiovLy4qXCJAKSkgeworCQkJcHJpbnQgImRvIG5vdCB1c2UgQzk5IC8vIGNvbW1lbnRzXG4iOworCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkkY2xlYW4gPSAwOworCQl9CisKKwkJIyBSZW1vdmUgY29tbWVudHMgZnJvbSB0aGUgbGluZSBiZWZvcmUgcHJvY2Vzc2luZy4KKwkJJGxpbmUgPX4gc0AvXCouKlwqL0BAZzsKKwkJJGxpbmUgPX4gc0AvXCouKkBAOworCQkkbGluZSA9fiBzQC4qXCovQEA7CisJCSRsaW5lID1+IHNALy8uKkBAOworCisjRVhQT1JUX1NZTUJPTCBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IGl0cyBmdW5jdGlvbiBjbG9zaW5nIH0uCisJCWlmICgoJGxpbmUgPX4gL0VYUE9SVF9TWU1CT0wuKlwoLipcKS8pIHx8CisJCSAgICAoJGxpbmUgPX4gL0VYUE9SVF9VTlVTRURfU1lNQk9MLipcKC4qXCkvKSkgeworCQkJaWYgKCgkcHJldmxpbmUgIX4gL159LykgJiYKKwkJCSAgICgkcHJldmxpbmUgIX4gL15cK30vKSAmJgorCQkJICAgKCRwcmV2bGluZSAhfiAvXiB9LykpIHsKKwkJCQlwcmludCAiRVhQT1JUX1NZTUJPTChmdW5jKTsgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb25cbiI7CisJCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkJJGNsZWFuID0gMDsKKwkJCX0KKwkJfQorCisJCSMgY2hlY2sgZm9yIHN0YXRpYyBpbml0aWFsaXNlcnMuCisJCWlmICgkbGluZT1+L1xzKnN0YXRpY1xzLio9XHMrKDB8TlVMTCk7LykgeworCQkJcHJpbnQgImRvIG5vdCBpbml0aWFsaXNlIHN0YXRpY3MgdG8gMCBvciBOVUxMXG4iOworCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkkY2xlYW4gPSAwOworCQl9CisKKwkJIyBjaGVjayBmb3IgbmV3IHR5cGVkZWZzLgorCQlpZiAoJGxpbmU9fi9ccyp0eXBlZGVmXHMvKSB7CisJCQlwcmludCAiZG8gbm90IGFkZCBuZXcgdHlwZWRlZnNcbiI7CisJCQlwcmludCAiJGhlcmVjdXJyIjsKKwkJCSRjbGVhbiA9IDA7CisJCX0KKworIyAqIGdvZXMgb24gdmFyaWFibGUgbm90IG9uIHR5cGUKKwkJaWYgKCRsaW5lPX4vW0EtWmEtelxkX10rXCogW0EtWmEtelxkX10rLykgeworCQkJcHJpbnQgIlwiZm9vKiBiYXJcIiBzaG91bGQgYmUgXCJmb28gKmJhclwiXG4iOworCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkkY2xlYW4gPSAwOworCQl9CisKKyMgIyBubyBCVUcoKSBvciBCVUdfT04oKQorIyAJCWlmICgkbGluZSA9fiAvXGIoQlVHfEJVR19PTilcYi8pIHsKKyMgCQkJcHJpbnQgIlRyeSB0byB1c2UgV0FSTl9PTiAmIFJlY292ZXJ5IGNvZGUgcmF0aGVyIHRoYW4gQlVHKCkgb3IgQlVHX09OKClcbiI7CisjIAkJCXByaW50ICIkaGVyZWN1cnIiOworIyAJCQkkY2xlYW4gPSAwOworIyAJCX0KKworIyBwcmludGsgc2hvdWxkIHVzZSBLRVJOXyogbGV2ZWxzCisJCWlmICgkbGluZSA9fiAvXGJwcmludGtcKCg/IUtFUk5fKS8pIHsKKwkJCXByaW50ICJwcmludGsoKSBzaG91bGQgaW5jbHVkZSBLRVJOXyBmYWNpbGl0eSBsZXZlbFxuIjsKKwkJCXByaW50ICIkaGVyZWN1cnIiOworCQkJJGNsZWFuID0gMDsKKwkJfQorCisjZnVuY3Rpb24gYnJhY2UgY2FuJ3QgYmUgb24gc2FtZSBsaW5lLCBleGNlcHQgZm9yICNkZWZpbmVzIG9mIGRvIHdoaWxlLCBvciBpZiBjbG9zZWQgb24gc2FtZSBsaW5lCisJCWlmICgoJGxpbmU9fi9bQS1aYS16XGRfXStcKipccytcKipbQS1aYS16XGRfXStcKC4qXCkuKiB7LykgYW5kCisJCSAgICAhKCRsaW5lPX4vXCNkZWZpbmUuKmRvXHN7LykgYW5kICEoJGxpbmU9fi99LykpIHsKKwkJCXByaW50ICJicmFjZXMgZm9sbG93aW5nIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBnbyBvbiB0aGUgbmV4dCBsaW5lXG4iOworCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkkY2xlYW4gPSAwOworCQl9CisJCW15ICRvcGxpbmUgPSAkbGluZTsKKwkJJG9wbGluZSA9fiBzL14uLy87CisJCWlmICghKCRsaW5lPX4vXCNccyppbmNsdWRlLykpIHsKKwkJCSMgQ2hlY2sgb3BlcmF0b3Igc3BhY2luZy4KKwkJCW15IEBlbGVtZW50cyA9IHNwbGl0KC8oPDw9fD4+PXw8PXw+PXw9PXwhPXxcKz18LT18XCo9fFwvPXwlPXxcXj18XHw9fCY9fC0+fDw8fD4+fDx8Pnw9fCF8fnwmJnxcfFx8fCx8XF58XCtcK3wtLXw7fCZ8XHx8XCt8LXxcKnxcL1wvfFwvKS8sICRvcGxpbmUpOworCQkJZm9yIChteSAkbiA9IDA7ICRuIDwgJCNlbGVtZW50czsgJG4gKz0gMikgeworCQkJCSMgJHdOIHNheXMgd2UgaGF2ZSB3aGl0ZS1zcGFjZSBiZWZvcmUgb3IgYWZ0ZXIKKwkJCQkjICRzTiBzYXlzIHdlIGhhdmUgYSBzZXBhcmF0b3IgYmVmb3JlIG9yIGFmdGVyCisJCQkJIyAkb04gc2F5cyB3ZSBoYXZlIGFub3RoZXIgb3BlcmF0b3IgYmVmb3JlIG9yIGFmdGVyCisJCQkJbXkgJHcxID0gJGVsZW1lbnRzWyRuXSA9fiAvXHMkLzsKKwkJCQlteSAkczEgPSAkZWxlbWVudHNbJG5dID1+IC8oXFt8XCh8XHMpJC87CisJCQkJbXkgJG8xID0gJGVsZW1lbnRzWyRuXSBlcSAnJzsKKwkJCQlteSAkb3AgPSAkZWxlbWVudHNbJG4gKyAxXTsKKwkJCQlteSAkdzIgPSAxOworCQkJCW15ICRzMiA9IDE7CisJCQkJbXkgJG8yID0gMDsKKwkJCQkjIElmIHdlIGhhdmUgc29tZXRoaW5nIGFmdGVyIHRoZSBvcGVyYXRvciBoYW5kbGUgaXQuCisJCQkJaWYgKGRlZmluZWQgJGVsZW1lbnRzWyRuICsgMl0pIHsKKwkJCQkJJHcyID0gJGVsZW1lbnRzWyRuICsgMl0gPX4gL15ccy87CisJCQkJCSRzMiA9ICRlbGVtZW50c1skbiArIDJdID1+IC9eKFxzfFwpfFxdfDspLzsKKwkJCQkJJG8yID0gJGVsZW1lbnRzWyRuICsgMl0gZXEgJyc7CisJCQkJfQorCisJCQkJIyBHZW5lcmF0ZSB0aGUgY29udGV4dC4KKwkJCQlteSAkYXQgPSAiaGVyZTogIjsKKwkJCQlmb3IgKG15ICRtID0gJG47ICRtID49IDA7ICRtLS0pIHsKKwkJCQkJaWYgKCRlbGVtZW50c1skbV0gbmUgJycpIHsKKwkJCQkJCSRhdCAuPSAkZWxlbWVudHNbJG1dOworCQkJCQkJbGFzdDsKKwkJCQkJfQorCQkJCX0KKwkJCQkkYXQgLj0gJG9wOworCQkJCWZvciAobXkgJG0gPSAkbiArIDI7IGRlZmluZWQgJGVsZW1lbnRzWyRtXTsgJG0rKykgeworCQkJCQlpZiAoJGVsZW1lbnRzWyRtXSBuZSAnJykgeworCQkJCQkJJGF0IC49ICRlbGVtZW50c1skbV07CisJCQkJCQlsYXN0OworCQkJCQl9CisJCQkJfQorCisJCQkJIyNwcmludCAiPCRzMTokb3A6JHMyPiA8JGVsZW1lbnRzWyRuXTokZWxlbWVudHNbJG4gKyAxXTokZWxlbWVudHNbJG4gKyAyXT5cbiI7CisJCQkJIyBTa2lwIHRoaW5ncyBhcHBhcmVudGx5IGluIHF1b3Rlcy4KKwkJCQluZXh0IGlmICgkbGluZT1+L1wiLipcUSRvcFxFLipcIi8gb3IgJGxpbmU9fi9cJ1xRJG9wXEVcJy8pOworCisJCQkJIyBXZSBuZWVkIDsgYXMgYW4gb3BlcmF0b3IuICAvLyBpcyBhIGNvbW1lbnQuCisJCQkJaWYgKCRvcCBlcSAnOycgb3IgJG9wIGVxICcvLycpIHsKKworCQkJCSMgLT4gc2hvdWxkIGhhdmUgbm8gc3BhY2VzCisJCQkJfSBlbHNpZiAoJG9wIGVxICctPicpIHsKKwkJCQkJaWYgKCRzMSBvciAkczIpIHsKKwkJCQkJCXByaW50ICJubyBzcGFjZXMgYXJvdW5kIHRoYXQgJyRvcCcgJGF0XG4iOworCQkJCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkJCQkkY2xlYW4gPSAwOworCQkJCQl9CisKKwkJCQkjICwgbXVzdCBoYXZlIGEgc3BhY2Ugb24gdGhlIHJpZ2h0LgorCQkJCX0gZWxzaWYgKCRvcCBlcSAnLCcpIHsKKwkJCQkJaWYgKCEkczIpIHsKKwkJCQkJCXByaW50ICJuZWVkIHNwYWNlIGFmdGVyIHRoYXQgJyRvcCcgJGF0XG4iOworCQkJCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkJCQkkY2xlYW4gPSAwOworCQkJCQl9CisKKwkJCQkjIHVuYXJ5ICEgYW5kIHVuYXJ5IH4gYXJlIGFsbG93ZWQgbm8gc3BhY2Ugb24gdGhlIHJpZ2h0CisJCQkJfSBlbHNpZiAoJG9wIGVxICchJyBvciAkb3AgZXEgJ34nKSB7CisJCQkJCWlmICghJHMxICYmICEkbzEpIHsKKwkJCQkJCXByaW50ICJuZWVkIHNwYWNlIGJlZm9yZSB0aGF0ICckb3AnICRhdFxuIjsKKwkJCQkJCXByaW50ICIkaGVyZWN1cnIiOworCQkJCQkJJGNsZWFuID0gMDsKKwkJCQkJfQorCQkJCQlpZiAoJHMyKSB7CisJCQkJCQlwcmludCAibm8gc3BhY2UgYWZ0ZXIgdGhhdCAnJG9wJyAkYXRcbiI7CisJCQkJCQlwcmludCAiJGhlcmVjdXJyIjsKKwkJCQkJCSRjbGVhbiA9IDA7CisJCQkJCX0KKworCQkJCSMgdW5hcnkgKysgYW5kIHVuYXJ5IC0tIGFyZSBhbGxvd2VkIG5vIHNwYWNlIG9uIG9uZSBzaWRlLgorCQkJCX0gZWxzaWYgKCRvcCBlcSAnKysnIG9yICRvcCBlcSAnLS0nKSB7CisJCQkJCWlmICgoJHMxICYmICRzMikgfHwgKCghJHMxICYmICEkbzEpICYmICghJHMyICYmICEkbzIpKSkgeworCQkJCQkJcHJpbnQgIm5lZWQgc3BhY2Ugb25lIHNpZGUgb2YgdGhhdCAnJG9wJyAkYXRcbiI7CisJCQkJCQlwcmludCAiJGhlcmVjdXJyIjsKKwkJCQkJCSRjbGVhbiA9IDA7CisJCQkJCX0KKworCQkJCSMgJiBpcyBib3RoIHVuYXJ5IGFuZCBiaW5hcnkKKwkJCQkjIHVuYXJ5OgorCQkJCSMgCWEgJmIKKwkJCQkjIGJpbmFyeSAoY29uc2lzdGVudCBzcGFjaW5nKToKKwkJCQkjCWEmYgkJT0sKKwkJCQkjCWEgJiBiCQlPSworCQkJCSMKKwkJCQkjIGJvaWxpbmcgZG93biB0bzogaWYgdGhlcmUgaXMgYSBzcGFjZSBvbiB0aGUgcmlnaHQgdGhlbiB0aGVyZQorCQkJCSMgc2hvdWxkIGJlIG9uZSBvbiB0aGUgbGVmdC4KKwkJCQkjCisJCQkJIyAtIGlzIHRoZSBzYW1lCisJCQkJIworCQkJCSMgKiBpcyB0aGUgc2FtZSBvbmx5IGFkZGluZzoKKwkJCQkjIHR5cGU6CisJCQkJIyAJKGZvbyAqKQorCQkJCSMJKGZvbyAqKikKKwkJCQkjCisJCQkJfSBlbHNpZiAoJG9wIGVxICcmJyBvciAkb3AgZXEgJy0nIG9yICRvcCBlcSAnKicpIHsKKwkJCQkJaWYgKCR3MiBhbmQgISR3MSkgeworCQkJCQkJcHJpbnQgIm5lZWQgc3BhY2UgYmVmb3JlIHRoYXQgJyRvcCcgJGF0XG4iOworCQkJCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkJCQkkY2xlYW4gPSAwOworCQkJCQl9CisKKwkJCQkjIDw8IGFuZCA+PiBtYXkgZWl0aGVyIGhhdmUgb3Igbm90IGhhdmUgc3BhY2VzIGJvdGggc2lkZXMKKwkJCQl9IGVsc2lmICgkb3AgZXEgJzw8JyBvciAkb3AgZXEgJz4+JyBvciAkb3AgZXEgJysnIG9yICRvcCBlcSAnLycgb3IKKwkJCQkJICRvcCBlcSAnXicgb3IgJG9wIGVxICd8JykKKwkJCQl7CisJCQkJCWlmICgkczEgIT0gJHMyKSB7CisJCQkJCQlwcmludCAibmVlZCBjb25zaXN0ZW50IHNwYWNpbmcgYXJvdW5kICckb3AnICRhdFxuIjsKKwkJCQkJCXByaW50ICIkaGVyZWN1cnIiOworCQkJCQkJJGNsZWFuID0gMDsKKwkJCQkJfQorCisJCQkJIyBBbGwgdGhlIG90aGVycyBuZWVkIHNwYWNlcyBib3RoIHNpZGVzLgorCQkJCX0gZWxzaWYgKCEkczEgb3IgISRzMikgeworCQkJCQlwcmludCAibmVlZCBzcGFjZXMgYXJvdW5kIHRoYXQgJyRvcCcgJGF0XG4iOworCQkJCQlwcmludCAiJGhlcmVjdXJyIjsKKwkJCQkJJGNsZWFuID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKworI25lZWQgc3BhY2UgYmVmb3JlIGJyYWNlIGZvbGxvd2luZyBpZiwgd2hpbGUsIGV0YworCQlpZiAoJGxpbmU9fi9cKC4qXCl7LykgeworCQkJcHJpbnQgIm5lZWQgYSBzcGFjZSBiZWZvcmUgdGhlIGJyYWNlXG4iOworCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkkY2xlYW4gPSAwOworCQl9CisKKyNnb3RvIGxhYmVscyBhcmVuJ3QgaW5kZW50ZWQsIGFsbG93IGEgc2luZ2xlIHNwYWNlIGhvd2V2ZXIKKwkJaWYgKCRsaW5lPX4vXi5ccytbQS1aYS16XGRfXSs6LyBhbmQKKwkJICAgISgkbGluZT1+L14uIFtBLVphLXpcZF9dKzovKSBhbmQgISgkbGluZT1+L14uXHMrZGVmYXVsdDovKSkgeworCQkJcHJpbnQgImxhYmVscyBzaG91bGQgbm90IGJlIGluZGVudGVkXG4iOworCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkkY2xlYW4gPSAwOworCQl9CisKKyMgTmVlZCBhIHNwYWNlIGJlZm9yZSBvcGVuIHBhcmVudGhlc2lzIGFmdGVyIGlmLCB3aGlsZSBldGMKKwkJaWYgKCRsaW5lPX4vKGlmfHdoaWxlfGZvcnxzd2l0Y2gpXCgvKSB7CisJCQlwcmludCAibmVlZCBhIHNwYWNlIGJlZm9yZSB0aGUgb3BlbiBwYXJlbnRoZXNpc1xuIjsKKwkJCXByaW50ICIkaGVyZWN1cnIiOworCQkJJGNsZWFuID0gMDsKKwkJfQorCisjIENoZWNrIGZvciBpbGxlZ2FsIGFzc2lnbm1lbnQgaW4gaWYgY29uZGl0aW9uYWwuCisJCWlmICgkbGluZT1+LyhpZnx3aGlsZSlccypcKC4qW148PiE9XT1bXj1dLipcKS8pIHsKKwkJCXByaW50ICJkbyBub3QgdXNlIGFzc2lnbm1lbnQgaW4gaWYgY29uZGl0aW9uXG4iOworCQkJcHJpbnQgIiRoZXJlY3VyciI7CisJCQkkY2xlYW4gPSAwOworCQl9CisKKwkJIyBDaGVjayBmb3IgfTxubD5lbHNlIHssIHRoZXNlIG11c3QgYmUgYXQgdGhlIHNhbWUKKwkJIyBpbmRlbnQgbGV2ZWwgdG8gYmUgcmVsZXZhbnQgdG8gZWFjaCBvdGhlci4KKwkJaWYgKCRwcmV2bGluZT1+L31ccyokLyBhbmQgJGxpbmU9fi9eLlxzKmVsc2VccyovIGFuZAorCQkJCQkJJHByZXZpbmRlbnQgPT0gJGluZGVudCkgeworCQkJcHJpbnQgImVsc2Ugc2hvdWxkIGZvbGxvdyBjbG9zZSBicmFjZVxuIjsKKwkJCXByaW50ICIkaGVyZXByZXYiOworCQkJJGNsZWFuID0gMDsKKwkJfQorCisJCSMgQ2hlY2sgZm9yIHN3aXRjaCAoKSB7PG5sPmNhc2UsIHRoZXNlIG11c3QgYmUgYXQgdGhlCisJCSMgc2FtZSBpbmRlbnQuICBXZSB3aWxsIG9ubHkgY2F0Y2ggdGhlIGZpcnN0IG9uZSwgYXMgb3VyCisJCSMgY29udGV4dCBpcyB2ZXJ5IHNtYWxsIGJ1dCBwZW9wbGUgdGVuZCB0byBiZSBjb25zaXN0ZW50CisJCSMgc28gd2Ugd2lsbCBjYXRjaCB0aGVtIG91dCBtb3JlIG9mdGVuIHRoYW4gbm90LgorCQlpZiAoJHByZXZsaW5lPX4vXHMqc3dpdGNoXHMqXCguKlwpLyBhbmQgJGxpbmU9fi9ccypjYXNlXHMrLworCQkJCQkJYW5kICRwcmV2aW5kZW50ICE9ICRpbmRlbnQpIHsKKwkJCXByaW50ICJzd2l0Y2ggYW5kIGNhc2Ugc2hvdWxkIGJlIGF0IHRoZSBzYW1lIGluZGVudFxuIjsKKwkJCXByaW50ICIkaGVyZXByZXYiOworCQkJJGNsZWFuID0gMDsKKwkJfQorCisjc3R1ZGx5IGNhcHMsIGNvbW1lbnRlZCBvdXQgdW50aWwgZmlndXJlIG91dCBob3cgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1c2Ugb2YgZXhpc3RpbmcgYW5kIGFkZGluZyBuZXcKKyMJCWlmICgoJGxpbmU9fi9bXHdfXVthLXpcZF0rW0EtWl0vKSBhbmQgISgkbGluZT1+L3ByaW50LykpIHsKKyMJCSAgICBwcmludCAiTm8gc3R1ZGx5IGNhcHMsIHVzZSBfXG4iOworIwkJICAgIHByaW50ICIkaGVyZWN1cnIiOworIwkJICAgICRjbGVhbiA9IDA7CisjCQl9CisKKyNubyBzcGFjZXMgYWxsb3dlZCBhZnRlciBcIGluIGRlZmluZQorCQlpZiAoJGxpbmU9fi9cI2RlZmluZS4qXFxccyQvKSB7CisJCQlwcmludCgiV2hpdGVwc3BhY2UgYWZ0ZXIgXFwgbWFrZXMgbmV4dCBsaW5lcyB1c2VsZXNzXG4iKTsKKwkJCXByaW50ICIkaGVyZWN1cnIiOworCQkJJGNsZWFuID0gMDsKKwkJfQorCisjd2FybiBpZiA8YXNtL2Zvby5oPiBpcyAjaW5jbHVkZWQgYW5kIDxsaW51eC9mb28uaD4gaXMgYXZhaWxhYmxlLgorCQlpZiAoJHRyZWUgJiYgJGxpbmUgPX4gcXJ8XHMqXCNccyppbmNsdWRlXHMqXDxhc21cLyguKilcLmhcPnwpIHsKKwkJCW15ICRjaGVja2ZpbGUgPSAiaW5jbHVkZS9saW51eC8kMS5oIjsKKwkJCWlmICgtZiAkY2hlY2tmaWxlKSB7CisJCQkJcHJpbnQgIlVzZSAjaW5jbHVkZSA8bGludXgvJDEuaD4gaW5zdGVhZCBvZiA8YXNtLyQxLmg+XG4iOworCQkJCXByaW50ICRoZXJlY3VycjsKKwkJCQkkY2xlYW4gPSAwOworCQkJfQorCQl9CisKKyNpZi93aGlsZS9ldGMgYnJhY2UgZG8gbm90IGdvIG9uIG5leHQgbGluZSwgdW5sZXNzICNkZWZpbmluZyBhIGRvIHdoaWxlIGxvb3AsIG9yIGlmIHRoYXQgYnJhY2Ugb24gdGhlIG5leHQgbGluZSBpcyBmb3Igc29tZXRoaW5nIGVsc2UKKwkJaWYgKCRwcmV2bGluZT1+LyhpZnx3aGlsZXxmb3J8c3dpdGNoKVxzKlwoLykgeworCQkJbXkgQG9wZW5lZCA9ICRwcmV2bGluZT1+L1woL2c7CisJCQlteSBAY2xvc2VkID0gJHByZXZsaW5lPX4vXCkvZzsKKwkJCW15ICRucl9saW5lID0gJGxpbmVucjsKKwkJCW15ICRyZW1haW5pbmcgPSAkcmVhbGNudDsKKwkJCW15ICRuZXh0X2xpbmUgPSAkbGluZTsKKwkJCW15ICRleHRyYV9saW5lcyA9IDA7CisJCQlteSAkZGlzcGxheV9zZWdtZW50ID0gJHByZXZsaW5lOworCisJCQl3aGlsZSAoJHJlbWFpbmluZyA+IDAgJiYgc2NhbGFyIEBvcGVuZWQgPiBzY2FsYXIgQGNsb3NlZCkgeworCQkJCSRwcmV2bGluZSAuPSAkbmV4dF9saW5lOworCQkJCSRkaXNwbGF5X3NlZ21lbnQgLj0gIlxuIiAuICRuZXh0X2xpbmU7CisJCQkJJG5leHRfbGluZSA9ICRsaW5lc1skbnJfbGluZV07CisJCQkJJG5yX2xpbmUrKzsKKwkJCQkkcmVtYWluaW5nLS07CisKKwkJCQlAb3BlbmVkID0gJHByZXZsaW5lPX4vXCgvZzsKKwkJCQlAY2xvc2VkID0gJHByZXZsaW5lPX4vXCkvZzsKKwkJCX0KKworCQkJaWYgKCgkcHJldmxpbmU9fi8oaWZ8d2hpbGV8Zm9yfHN3aXRjaClccypcKC4qXClccyokLykgYW5kICgkbmV4dF9saW5lPX4vey8pIGFuZAorCQkJICAgISgkbmV4dF9saW5lPX4vKGlmfHdoaWxlfGZvcikvKSBhbmQgISgkbmV4dF9saW5lPX4vXCNkZWZpbmUuKmRvLip3aGlsZS8pKSB7CisJCQkJcHJpbnQgIlRoYXQgeyBzaG91bGQgYmUgb24gdGhlIHByZXZpb3VzIGxpbmVcbiI7CisJCQkJcHJpbnQgIiRkaXNwbGF5X3NlZ21lbnRcbiRuZXh0X2xpbmVcblxuIjsKKwkJCQkkY2xlYW4gPSAwOworCQkJfQorCQl9CisKKyNtdWx0aWxpbmUgbWFjcm9zIHNob3VsZCBiZSBlbmNsb3NlZCBpbiBhIGRvIHdoaWxlIGxvb3AKKwkJaWYgKCgkcHJldmxpbmU9fi9cI2RlZmluZS4qXFwvKSBhbmQgISgkcHJldmxpbmU9fi9kb1xzK3svKSBhbmQKKwkJICAgISgkcHJldmxpbmU9fi9cKFx7LykgYW5kICgkbGluZT1+LztccypcXC8pIGFuZAorCQkgICAhKCRsaW5lPX4vZG8uKnsvKSBhbmQgISgkbGluZT1+L1woXHsvKSkgeworCQkJcHJpbnQgIk1hY3JvcyB3aXRoIG11bHRpcGxlIHN0YXRlbWVudHMgc2hvdWxkIGJlIGVuY2xvc2VkIGluIGEgZG8gLSB3aGlsZSBsb29wXG4iOworCQkJcHJpbnQgIiRoZXJlcHJldiI7CisJCQkkY2xlYW4gPSAwOworCQl9CisKKyMgZG9uJ3QgaW5jbHVkZSBkZXByZWNhdGVkIGluY2x1ZGUgZmlsZXMKKwkJZm9yIG15ICRpbmMgKEBkZXByZWNhdGVkKSB7CisJCQlpZiAoJGxpbmUgPX4gbUBcI1xzKmluY2x1ZGVccypcPCRpbmM+QCkgeworCQkJCXByaW50ICJEb24ndCB1c2UgPCRpbmM+OiBzZWUgRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0XG4iOworCQkJCXByaW50ICIkaGVyZWN1cnIiOworCQkJCSRjbGVhbiA9IDA7CisJCQl9CisJCX0KKworIyBkb24ndCB1c2Uga2VybmVsX3RocmVhZCgpCisJCWlmICgkbGluZSA9fiAvXGJrZXJuZWxfdGhyZWFkXGIvKSB7CisJCQlwcmludCAiRG9uJ3QgdXNlIGtlcm5lbF90aHJlYWQoKSwgdXNlIGt0aHJlYWQoKTogc2VlIERvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dFxuIjsKKwkJCXByaW50ICIkaGVyZWN1cnIiOworCQkJJGNsZWFuID0gMDsKKwkJfQorCX0KKworCWlmICgkY2hrX3BhdGNoICYmICEkaXNfcGF0Y2gpIHsKKwkJJGNsZWFuID0gMDsKKwkJcHJpbnQgIkRvZXMgbm90IGFwcGVhciB0byBiZSBhIHVuaWZpZWQtZGlmZiBmb3JtYXQgcGF0Y2hcbiI7CisJfQorCWlmICgkaXNfcGF0Y2ggJiYgJGNoa19zaWdub2ZmICYmICRzaWdub2ZmID09IDApIHsKKwkJJGNsZWFuID0gMDsKKwkJcHJpbnQgIk1pc3NpbmcgU2lnbmVkLW9mZi1ieTogbGluZShzKVxuIjsKKwl9CisKKwlpZiAoJGNsZWFuID09IDEgJiYgJHF1aWV0ID09IDApIHsKKwkJcHJpbnQgIllvdXIgcGF0Y2ggaGFzIG5vIG9idmlvdXMgc3R5bGUgcHJvYmxlbXMgYW5kIGlzIHJlYWR5IGZvciBzdWJtaXNzaW9uLlxuIgorCX0KKwlpZiAoJGNsZWFuID09IDAgJiYgJHF1aWV0ID09IDApIHsKKwkJcHJpbnQgIllvdXIgcGF0Y2ggaGFzIHN0eWxlIHByb2JsZW1zLCBwbGVhc2UgcmV2aWV3LiAgSWYgYW55IG9mIHRoZXNlIGVycm9yc1xuIjsKKwkJcHJpbnQgImFyZSBmYWxzZSBwb3NpdGl2ZXMgcmVwb3J0IHRoZW0gdG8gdGhlIG1haW50YWluZXIsIHNlZVxuIjsKKwkJcHJpbnQgIkNIRUNLUEFUQ0ggaW4gTUFJTlRBSU5FUlMuXG4iOworCX0KKwlyZXR1cm4gJGNsZWFuOworfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoIGIvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoCmluZGV4IDEyMGQ2MjQuLmNkY2E3MzggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5zaAorKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gKQEAgLTQsMjEgKzQsMTUgQEAKICMgV2hhdCBsaWJyYXJ5IHRvIGxpbmsKIGxkZmxhZ3MoKQogewotCSRjYyAtcHJpbnQtZmlsZS1uYW1lPWxpYm5jdXJzZXN3LnNvIHwgZ3JlcCAtcSAvCi0JaWYgWyAkPyAtZXEgMCBdOyB0aGVuCi0JCWVjaG8gJy1sbmN1cnNlc3cnCi0JCWV4aXQKLQlmaQotCSRjYyAtcHJpbnQtZmlsZS1uYW1lPWxpYm5jdXJzZXMuc28gfCBncmVwIC1xIC8KLQlpZiBbICQ/IC1lcSAwIF07IHRoZW4KLQkJZWNobyAnLWxuY3Vyc2VzJwotCQlleGl0Ci0JZmkKLQkkY2MgLXByaW50LWZpbGUtbmFtZT1saWJjdXJzZXMuc28gfCBncmVwIC1xIC8KLQlpZiBbICQ/IC1lcSAwIF07IHRoZW4KLQkJZWNobyAnLWxjdXJzZXMnCi0JCWV4aXQKLQlmaQorCWZvciBleHQgaW4gc28gYSBkeWxpYiA7IGRvCisJCWZvciBsaWIgaW4gbmN1cnNlc3cgbmN1cnNlcyBjdXJzZXMgOyBkbworCQkJJGNjIC1wcmludC1maWxlLW5hbWU9bGliJHtsaWJ9LiR7ZXh0fSB8IGdyZXAgLXEgLworCQkJaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJCQkJZWNobyAiLWwke2xpYn0iCisJCQkJZXhpdAorCQkJZmkKKwkJZG9uZQorCWRvbmUKIAlleGl0IDEKIH0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rZXJuZWwtZG9jIGIvc2NyaXB0cy9rZXJuZWwtZG9jCmluZGV4IDhiZTI2OWYuLmU1YmY2NDkgMTAwNzU1Ci0tLSBhL3NjcmlwdHMva2VybmVsLWRvYworKysgYi9zY3JpcHRzL2tlcm5lbC1kb2MKQEAgLTE1OSw3ICsxNTksOCBAQAogbXkgJHR5cGVfY29uc3RhbnQgPSAnXCUoWy1fXHddKyknOwogbXkgJHR5cGVfZnVuYyA9ICcoXHcrKVwoXCknOwogbXkgJHR5cGVfcGFyYW0gPSAnXEAoXHcrKSc7Ci1teSAkdHlwZV9zdHJ1Y3QgPSAnXCYoKHN0cnVjdFxzKik/W19cd10rKSc7CitteSAkdHlwZV9zdHJ1Y3QgPSAnXCYoKHN0cnVjdFxzKikqW19cd10rKSc7CitteSAkdHlwZV9zdHJ1Y3RfeG1sID0gJ1xcXGFtcDsoKHN0cnVjdFxzKikqW19cd10rKSc7CiBteSAkdHlwZV9lbnYgPSAnKFwkXHcrKSc7CiAKICMgT3V0cHV0IGNvbnZlcnNpb24gc3Vic3RpdHV0aW9ucy4KQEAgLTE2OCw3ICsxNjksOCBAQAogIyB0aGVzZSB3b3JrIGZhaXJseSB3ZWxsCiBteSAlaGlnaGxpZ2h0c19odG1sID0gKCAkdHlwZV9jb25zdGFudCwgIjxpPlwkMTwvaT4iLAogCQkJJHR5cGVfZnVuYywgIjxiPlwkMTwvYj4iLAotCQkJJHR5cGVfc3RydWN0LCAiPGk+XCQxPC9pPiIsCisJCQkkdHlwZV9zdHJ1Y3RfeG1sLCAiPGk+XCQxPC9pPiIsCisJCQkkdHlwZV9lbnYsICI8Yj48aT5cJDE8L2k+PC9iPiIsCiAJCQkkdHlwZV9wYXJhbSwgIjx0dD48Yj5cJDE8L2I+PC90dD4iICk7CiBteSAkYmxhbmtsaW5lX2h0bWwgPSAiPHA+IjsKIApAQCAtMzI2LDEyICszMjgsMjIgQEAKICAgICB9CiB9CiAKKyMgZ2V0IGtlcm5lbCB2ZXJzaW9uIGZyb20gZW52CitzdWIgZ2V0X2tlcm5lbF92ZXJzaW9uKCkgeworICAgIG15ICR2ZXJzaW9uOworCisgICAgaWYgKGRlZmluZWQoJEVOVnsnS0VSTkVMVkVSU0lPTid9KSkgeworCSR2ZXJzaW9uID0gJEVOVnsnS0VSTkVMVkVSU0lPTid9OworICAgIH0KKyAgICByZXR1cm4gJHZlcnNpb247Cit9CitteSAka2VybmVsdmVyc2lvbiA9IGdldF9rZXJuZWxfdmVyc2lvbigpOwogCiAjIGdlbmVyYXRlIGEgc2VxdWVuY2Ugb2YgY29kZSB0aGF0IHdpbGwgc3BsaWNlIGluIGhpZ2hsaWdodGluZyBpbmZvcm1hdGlvbgogIyB1c2luZyB0aGUgcy8vIG9wZXJhdG9yLgogbXkgJGRvaGlnaGxpZ2h0ID0gIiI7CiBmb3JlYWNoIG15ICRwYXR0ZXJuIChrZXlzICVoaWdobGlnaHRzKSB7Ci0jICAgIHByaW50ICJzY2FubmluZyBwYXR0ZXJuICRwYXR0ZXJuICgkaGlnaGxpZ2h0c3skcGF0dGVybn0pXG4iOworIyAgIHByaW50IFNUREVSUiAic2Nhbm5pbmcgcGF0dGVybjokcGF0dGVybiwgaGlnaGxpZ2h0OigkaGlnaGxpZ2h0c3skcGF0dGVybn0pXG4iOwogICAgICRkb2hpZ2hsaWdodCAuPSAgIlwkY29udGVudHMgPX4gczokcGF0dGVybjokaGlnaGxpZ2h0c3skcGF0dGVybn06Z3M7XG4iOwogfQogCkBAIC0zNzgsMTMgKzM5MCwxOSBAQAogIwljb25mZXNzICJvdXRwdXRfaGlnaGxpZ2h0IGdvdCBjYWxsZWQgd2l0aCBubyBhcmdzP1xuIjsKICMgICB9CiAKKyMgICBwcmludCBTVERFUlIgImNvbnRlbnRzIGI0OiRjb250ZW50c1xuIjsKICAgICBldmFsICRkb2hpZ2hsaWdodDsKICAgICBkaWUgJEAgaWYgJEA7CisgICAgaWYgKCRvdXRwdXRfbW9kZSBlcSAiaHRtbCIpIHsKKwkkY29udGVudHMgPX4gcy9cXFxcLy87CisgICAgfQorIyAgIHByaW50IFNUREVSUiAiY29udGVudHMgYWY6JGNvbnRlbnRzXG4iOworCiAgICAgZm9yZWFjaCAkbGluZSAoc3BsaXQgIlxuIiwgJGNvbnRlbnRzKSB7Ci0gICAgICBpZiAoJGxpbmUgZXEgIiIpeworCWlmICgkbGluZSBlcSAiIil7CiAJICAgIHByaW50ICRsaW5lcHJlZml4LCAkYmxhbmtsaW5lOwogCX0gZWxzZSB7Ci0gICAgICAgICAgICAkbGluZSA9fiBzL1xcXFxcXC9cJi9nOworCSAgICAkbGluZSA9fiBzL1xcXFxcXC9cJi9nOwogCSAgICBwcmludCAkbGluZXByZWZpeCwgJGxpbmU7CiAJfQogCXByaW50ICJcbiI7CkBAIC00MTQsNyArNDMyLDcgQEAKICAgICBwcmludCAiPGI+ZW51bSAiLiRhcmdzeydlbnVtJ30uIjwvYj4gezxicj5cbiI7CiAgICAgJGNvdW50ID0gMDsKICAgICBmb3JlYWNoICRwYXJhbWV0ZXIgKEB7JGFyZ3N7J3BhcmFtZXRlcmxpc3QnfX0pIHsKLSAgICAgICAgcHJpbnQgIiA8Yj4iLiRwYXJhbWV0ZXIuIjwvYj4iOworCXByaW50ICIgPGI+Ii4kcGFyYW1ldGVyLiI8L2I+IjsKIAlpZiAoJGNvdW50ICE9ICQjeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7CiAJICAgICRjb3VudCsrOwogCSAgICBwcmludCAiLFxuIjsKQEAgLTQ2MiwxNSArNDgwLDE2IEBACiAJbXkgJHBhcmFtZXRlcl9uYW1lID0gJHBhcmFtZXRlcjsKIAkkcGFyYW1ldGVyX25hbWUgPX4gcy9cWy4qLy87CiAKLSAgICAgICAgKCRhcmdzeydwYXJhbWV0ZXJkZXNjcyd9eyRwYXJhbWV0ZXJfbmFtZX0gbmUgJHVuZGVzY3JpYmVkKSB8fCBuZXh0OworCSgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyX25hbWV9IG5lICR1bmRlc2NyaWJlZCkgfHwgbmV4dDsKIAkkdHlwZSA9ICRhcmdzeydwYXJhbWV0ZXJ0eXBlcyd9eyRwYXJhbWV0ZXJ9OwogCWlmICgkdHlwZSA9fiBtLyhbXlwoXSpcKFwqKVxzKlwpXHMqXCgoW15cKV0qKVwpLykgewogCSAgICAjIHBvaW50ZXItdG8tZnVuY3Rpb24KLQkgICAgcHJpbnQgIiA8aT4kMTwvaT48Yj4kcGFyYW1ldGVyPC9iPikgPGk+KCQyKTwvaT47PGJyPlxuIjsKKwkgICAgcHJpbnQgIiZuYnNwOyAmbmJzcDsgPGk+JDE8L2k+PGI+JHBhcmFtZXRlcjwvYj4pIDxpPigkMik8L2k+Ozxicj5cbiI7CiAJfSBlbHNpZiAoJHR5cGUgPX4gbS9eKC4qPylccyooOi4qKS8pIHsKLQkgICAgcHJpbnQgIiA8aT4kMTwvaT4gPGI+JHBhcmFtZXRlcjwvYj4kMjs8YnI+XG4iOworCSAgICAjIGJpdGZpZWxkCisJICAgIHByaW50ICImbmJzcDsgJm5ic3A7IDxpPiQxPC9pPiA8Yj4kcGFyYW1ldGVyPC9iPiQyOzxicj5cbiI7CiAJfSBlbHNlIHsKLQkgICAgcHJpbnQgIiA8aT4kdHlwZTwvaT4gPGI+JHBhcmFtZXRlcjwvYj47PGJyPlxuIjsKKwkgICAgcHJpbnQgIiZuYnNwOyAmbmJzcDsgPGk+JHR5cGU8L2k+IDxiPiRwYXJhbWV0ZXI8L2I+Ozxicj5cbiI7CiAJfQogICAgIH0KICAgICBwcmludCAifTs8YnI+XG4iOwpAQCAtNDgzLDcgKzUwMiw3IEBACiAJbXkgJHBhcmFtZXRlcl9uYW1lID0gJHBhcmFtZXRlcjsKIAkkcGFyYW1ldGVyX25hbWUgPX4gcy9cWy4qLy87CiAKLSAgICAgICAgKCRhcmdzeydwYXJhbWV0ZXJkZXNjcyd9eyRwYXJhbWV0ZXJfbmFtZX0gbmUgJHVuZGVzY3JpYmVkKSB8fCBuZXh0OworCSgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyX25hbWV9IG5lICR1bmRlc2NyaWJlZCkgfHwgbmV4dDsKIAlwcmludCAiPGR0PjxiPiIuJHBhcmFtZXRlci4iPC9iPlxuIjsKIAlwcmludCAiPGRkPiI7CiAJb3V0cHV0X2hpZ2hsaWdodCgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyX25hbWV9KTsKQEAgLTUyNSw3ICs1NDQsNyBAQAogCW15ICRwYXJhbWV0ZXJfbmFtZSA9ICRwYXJhbWV0ZXI7CiAJJHBhcmFtZXRlcl9uYW1lID1+IHMvXFsuKi8vOwogCi0gICAgICAgICgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyX25hbWV9IG5lICR1bmRlc2NyaWJlZCkgfHwgbmV4dDsKKwkoJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFtZXRlcl9uYW1lfSBuZSAkdW5kZXNjcmliZWQpIHx8IG5leHQ7CiAJcHJpbnQgIjxkdD48Yj4iLiRwYXJhbWV0ZXIuIjwvYj5cbiI7CiAJcHJpbnQgIjxkZD4iOwogCW91dHB1dF9oaWdobGlnaHQoJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFtZXRlcl9uYW1lfSk7CkBAIC01OTIsNiArNjExLDcgQEAKICAgICBwcmludCAiPHJlZm1ldGE+XG4iOwogICAgIHByaW50ICIgPHJlZmVudHJ5dGl0bGU+PHBocmFzZT4iLiRhcmdzeydmdW5jdGlvbid9LiI8L3BocmFzZT48L3JlZmVudHJ5dGl0bGU+XG4iOwogICAgIHByaW50ICIgPG1hbnZvbG51bT45PC9tYW52b2xudW0+XG4iOworICAgIHByaW50ICIgPHJlZm1pc2NpbmZvIGNsYXNzPVwidmVyc2lvblwiPiIgLiAka2VybmVsdmVyc2lvbiAuICI8L3JlZm1pc2NpbmZvPlxuIjsKICAgICBwcmludCAiPC9yZWZtZXRhPlxuIjsKICAgICBwcmludCAiPHJlZm5hbWVkaXY+XG4iOwogICAgIHByaW50ICIgPHJlZm5hbWU+Ii4kYXJnc3snZnVuY3Rpb24nfS4iPC9yZWZuYW1lPlxuIjsKQEAgLTY2OCw2ICs2ODgsNyBAQAogICAgIHByaW50ICI8cmVmbWV0YT5cbiI7CiAgICAgcHJpbnQgIiA8cmVmZW50cnl0aXRsZT48cGhyYXNlPiIuJGFyZ3N7J3R5cGUnfS4iICIuJGFyZ3N7J3N0cnVjdCd9LiI8L3BocmFzZT48L3JlZmVudHJ5dGl0bGU+XG4iOwogICAgIHByaW50ICIgPG1hbnZvbG51bT45PC9tYW52b2xudW0+XG4iOworICAgIHByaW50ICIgPHJlZm1pc2NpbmZvIGNsYXNzPVwidmVyc2lvblwiPiIgLiAka2VybmVsdmVyc2lvbiAuICI8L3JlZm1pc2NpbmZvPlxuIjsKICAgICBwcmludCAiPC9yZWZtZXRhPlxuIjsKICAgICBwcmludCAiPHJlZm5hbWVkaXY+XG4iOwogICAgIHByaW50ICIgPHJlZm5hbWU+Ii4kYXJnc3sndHlwZSd9LiIgIi4kYXJnc3snc3RydWN0J30uIjwvcmVmbmFtZT5cbiI7CkBAIC02OTEsNyArNzEyLDcgQEAKIAkkcGFyYW1ldGVyX25hbWUgPX4gcy9cWy4qLy87CiAKIAlkZWZpbmVkKCRhcmdzeydwYXJhbWV0ZXJkZXNjcyd9eyRwYXJhbWV0ZXJfbmFtZX0pIHx8IG5leHQ7Ci0gICAgICAgICgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyX25hbWV9IG5lICR1bmRlc2NyaWJlZCkgfHwgbmV4dDsKKwkoJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFtZXRlcl9uYW1lfSBuZSAkdW5kZXNjcmliZWQpIHx8IG5leHQ7CiAJJHR5cGUgPSAkYXJnc3sncGFyYW1ldGVydHlwZXMnfXskcGFyYW1ldGVyfTsKIAlpZiAoJHR5cGUgPX4gbS8oW15cKF0qXChcKilccypcKVxzKlwoKFteXCldKilcKS8pIHsKIAkgICAgIyBwb2ludGVyLXRvLWZ1bmN0aW9uCkBAIC03NTIsNiArNzczLDcgQEAKICAgICBwcmludCAiPHJlZm1ldGE+XG4iOwogICAgIHByaW50ICIgPHJlZmVudHJ5dGl0bGU+PHBocmFzZT5lbnVtICIuJGFyZ3N7J2VudW0nfS4iPC9waHJhc2U+PC9yZWZlbnRyeXRpdGxlPlxuIjsKICAgICBwcmludCAiIDxtYW52b2xudW0+OTwvbWFudm9sbnVtPlxuIjsKKyAgICBwcmludCAiIDxyZWZtaXNjaW5mbyBjbGFzcz1cInZlcnNpb25cIj4iIC4gJGtlcm5lbHZlcnNpb24gLiAiPC9yZWZtaXNjaW5mbz5cbiI7CiAgICAgcHJpbnQgIjwvcmVmbWV0YT5cbiI7CiAgICAgcHJpbnQgIjxyZWZuYW1lZGl2PlxuIjsKICAgICBwcmludCAiIDxyZWZuYW1lPmVudW0gIi4kYXJnc3snZW51bSd9LiI8L3JlZm5hbWU+XG4iOwpAQCAtNzY3LDExICs3ODksMTEgQEAKICAgICBwcmludCAiZW51bSAiLiRhcmdzeydlbnVtJ30uIiB7XG4iOwogICAgICRjb3VudCA9IDA7CiAgICAgZm9yZWFjaCAkcGFyYW1ldGVyIChAeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7Ci0gICAgICAgIHByaW50ICIgICRwYXJhbWV0ZXIiOwotICAgICAgICBpZiAoJGNvdW50ICE9ICQjeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7CisJcHJpbnQgIiAgJHBhcmFtZXRlciI7CisJaWYgKCRjb3VudCAhPSAkI3skYXJnc3sncGFyYW1ldGVybGlzdCd9fSkgewogCSAgICAkY291bnQrKzsKIAkgICAgcHJpbnQgIiwiOwotICAgICAgICB9CisJfQogCXByaW50ICJcbiI7CiAgICAgfQogICAgIHByaW50ICJ9OyI7CkBAIC0xMDA3LDcgKzEwMjksNyBAQAogICAgIHByaW50ICJlbnVtICIuJGFyZ3N7J2VudW0nfS4iIHtcbiI7CiAgICAgJGNvdW50ID0gMDsKICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGFyZ3N7J3BhcmFtZXRlcmxpc3QnfX0pIHsKLSAgICAgICAgcHJpbnQgIi5iclxuLkJJIFwiICAgICRwYXJhbWV0ZXJcIlxuIjsKKwlwcmludCAiLmJyXG4uQkkgXCIgICAgJHBhcmFtZXRlclwiXG4iOwogCWlmICgkY291bnQgPT0gJCN7JGFyZ3N7J3BhcmFtZXRlcmxpc3QnfX0pIHsKIAkgICAgcHJpbnQgIlxufTtcbiI7CiAJICAgIGxhc3Q7CkBAIC0xMDU0LDcgKzEwNzYsNyBAQAogCW15ICRwYXJhbWV0ZXJfbmFtZSA9ICRwYXJhbWV0ZXI7CiAJJHBhcmFtZXRlcl9uYW1lID1+IHMvXFsuKi8vOwogCi0gICAgICAgICgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyX25hbWV9IG5lICR1bmRlc2NyaWJlZCkgfHwgbmV4dDsKKwkoJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFtZXRlcl9uYW1lfSBuZSAkdW5kZXNjcmliZWQpIHx8IG5leHQ7CiAJJHR5cGUgPSAkYXJnc3sncGFyYW1ldGVydHlwZXMnfXskcGFyYW1ldGVyfTsKIAlpZiAoJHR5cGUgPX4gbS8oW15cKF0qXChcKilccypcKVxzKlwoKFteXCldKilcKS8pIHsKIAkgICAgIyBwb2ludGVyLXRvLWZ1bmN0aW9uCkBAIC0xMDc3LDcgKzEwOTksNyBAQAogCW15ICRwYXJhbWV0ZXJfbmFtZSA9ICRwYXJhbWV0ZXI7CiAJJHBhcmFtZXRlcl9uYW1lID1+IHMvXFsuKi8vOwogCi0gICAgICAgICgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyX25hbWV9IG5lICR1bmRlc2NyaWJlZCkgfHwgbmV4dDsKKwkoJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFtZXRlcl9uYW1lfSBuZSAkdW5kZXNjcmliZWQpIHx8IG5leHQ7CiAJcHJpbnQgIi5JUCBcIiIuJHBhcmFtZXRlci4iXCIgMTJcbiI7CiAJb3V0cHV0X2hpZ2hsaWdodCgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyX25hbWV9KTsKICAgICB9CkBAIC0xMTg3LDcgKzEyMDksNyBAQAogICAgIHByaW50ICJlbnVtICIuJGFyZ3N7J2VudW0nfS4iIHtcbiI7CiAgICAgJGNvdW50ID0gMDsKICAgICBmb3JlYWNoICRwYXJhbWV0ZXIgKEB7JGFyZ3N7J3BhcmFtZXRlcmxpc3QnfX0pIHsKLSAgICAgICAgcHJpbnQgIlx0JHBhcmFtZXRlciI7CisJcHJpbnQgIlx0JHBhcmFtZXRlciI7CiAJaWYgKCRjb3VudCAhPSAkI3skYXJnc3sncGFyYW1ldGVybGlzdCd9fSkgewogCSAgICAkY291bnQrKzsKIAkgICAgcHJpbnQgIiwiOwpAQCAtMTIzMiw3ICsxMjU0LDcgQEAKIAlteSAkcGFyYW1ldGVyX25hbWUgPSAkcGFyYW1ldGVyOwogCSRwYXJhbWV0ZXJfbmFtZSA9fiBzL1xbLiovLzsKIAotICAgICAgICAoJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFtZXRlcl9uYW1lfSBuZSAkdW5kZXNjcmliZWQpIHx8IG5leHQ7CisJKCRhcmdzeydwYXJhbWV0ZXJkZXNjcyd9eyRwYXJhbWV0ZXJfbmFtZX0gbmUgJHVuZGVzY3JpYmVkKSB8fCBuZXh0OwogCSR0eXBlID0gJGFyZ3N7J3BhcmFtZXRlcnR5cGVzJ317JHBhcmFtZXRlcn07CiAJaWYgKCR0eXBlID1+IG0vKFteXChdKlwoXCopXHMqXClccypcKChbXlwpXSopXCkvKSB7CiAJICAgICMgcG9pbnRlci10by1mdW5jdGlvbgpAQCAtMTI1Miw3ICsxMjc0LDcgQEAKIAlteSAkcGFyYW1ldGVyX25hbWUgPSAkcGFyYW1ldGVyOwogCSRwYXJhbWV0ZXJfbmFtZSA9fiBzL1xbLiovLzsKIAotICAgICAgICAoJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFtZXRlcl9uYW1lfSBuZSAkdW5kZXNjcmliZWQpIHx8IG5leHQ7CisJKCRhcmdzeydwYXJhbWV0ZXJkZXNjcyd9eyRwYXJhbWV0ZXJfbmFtZX0gbmUgJHVuZGVzY3JpYmVkKSB8fCBuZXh0OwogCXByaW50ICIkcGFyYW1ldGVyXG5cdCI7CiAJcHJpbnQgJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFtZXRlcl9uYW1lfS4iXG4iOwogICAgIH0KQEAgLTEyODQsNyArMTMwNiw3IEBACiAJKCAkZnVuY3Rpb25fb25seSA9PSAxICYmIGRlZmluZWQoJGZ1bmN0aW9uX3RhYmxleyRuYW1lfSkpIHx8CiAJKCAkZnVuY3Rpb25fb25seSA9PSAyICYmICFkZWZpbmVkKCRmdW5jdGlvbl90YWJsZXskbmFtZX0pKSkKICAgICB7Ci0gICAgICAgICYkZnVuYyhAXyk7CisJJiRmdW5jKEBfKTsKIAkkc2VjdGlvbl9jb3VudGVyKys7CiAgICAgfQogfQpAQCAtMTMxNyw4ICsxMzM5LDggQEAKICAgICBteSAkZmlsZSA9IHNoaWZ0OwogCiAgICAgaWYgKCR4ID1+LyhzdHJ1Y3R8dW5pb24pXHMrKFx3Kylccyp7KC4qKX0vKSB7Ci0gICAgICAgICRkZWNsYXJhdGlvbl9uYW1lID0gJDI7Ci0gICAgICAgIG15ICRtZW1iZXJzID0gJDM7CisJJGRlY2xhcmF0aW9uX25hbWUgPSAkMjsKKwlteSAkbWVtYmVycyA9ICQzOwogCiAJIyBpZ25vcmUgZW1iZWRkZWQgc3RydWN0cyBvciB1bmlvbnMKIAkkbWVtYmVycyA9fiBzL3suKj99Ly9nOwpAQCAtMTM0NSw3ICsxMzY3LDcgQEAKIAkJCSAgIH0pOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcHJpbnQgU1RERVJSICJFcnJvcigke2ZpbGV9OiQuKTogQ2Fubm90IHBhcnNlIHN0cnVjdCBvciB1bmlvbiFcbiI7CisJcHJpbnQgU1RERVJSICJFcnJvcigke2ZpbGV9OiQuKTogQ2Fubm90IHBhcnNlIHN0cnVjdCBvciB1bmlvbiFcbiI7CiAJKyskZXJyb3JzOwogICAgIH0KIH0KQEAgLTEzNTYsMTUgKzEzNzgsMTUgQEAKIAogICAgICR4ID1+IHNAL1wqLio/XCovQEBnb3M7CSMgc3RyaXAgY29tbWVudHMuCiAgICAgaWYgKCR4ID1+IC9lbnVtXHMrKFx3Kylccyp7KC4qKX0vKSB7Ci0gICAgICAgICRkZWNsYXJhdGlvbl9uYW1lID0gJDE7Ci0gICAgICAgIG15ICRtZW1iZXJzID0gJDI7CisJJGRlY2xhcmF0aW9uX25hbWUgPSAkMTsKKwlteSAkbWVtYmVycyA9ICQyOwogCiAJZm9yZWFjaCBteSAkYXJnIChzcGxpdCAnLCcsICRtZW1iZXJzKSB7CiAJICAgICRhcmcgPX4gcy9eXHMqKFx3KykuKi8kMS87CiAJICAgIHB1c2ggQHBhcmFtZXRlcmxpc3QsICRhcmc7CiAJICAgIGlmICghJHBhcmFtZXRlcmRlc2NzeyRhcmd9KSB7Ci0JICAgICAgICAkcGFyYW1ldGVyZGVzY3N7JGFyZ30gPSAkdW5kZXNjcmliZWQ7Ci0JICAgICAgICBwcmludCBTVERFUlIgIldhcm5pbmcoJHtmaWxlfTokLik6IEVudW0gdmFsdWUgJyRhcmcnICIuCisJCSRwYXJhbWV0ZXJkZXNjc3skYXJnfSA9ICR1bmRlc2NyaWJlZDsKKwkJcHJpbnQgU1RERVJSICJXYXJuaW5nKCR7ZmlsZX06JC4pOiBFbnVtIHZhbHVlICckYXJnJyAiLgogCQkgICAgIm5vdCBkZXNjcmliZWQgaW4gZW51bSAnJGRlY2xhcmF0aW9uX25hbWUnXG4iOwogCSAgICB9CiAKQEAgLTEzODIsNyArMTQwNCw3IEBACiAJCQkgICB9KTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHByaW50IFNUREVSUiAiRXJyb3IoJHtmaWxlfTokLik6IENhbm5vdCBwYXJzZSBlbnVtIVxuIjsKKwlwcmludCBTVERFUlIgIkVycm9yKCR7ZmlsZX06JC4pOiBDYW5ub3QgcGFyc2UgZW51bSFcbiI7CiAJKyskZXJyb3JzOwogICAgIH0KIH0KQEAgLTEzOTMsMTIgKzE0MTUsMTIgQEAKIAogICAgICR4ID1+IHNAL1wqLio/XCovQEBnb3M7CSMgc3RyaXAgY29tbWVudHMuCiAgICAgd2hpbGUgKCgkeCA9fiAvXCgqLlwpXHMqOyQvKSB8fCAoJHggPX4gL1xbKi5cXVxzKjskLykpIHsKLSAgICAgICAgJHggPX4gcy9cKCouXClccyo7JC87LzsKKwkkeCA9fiBzL1woKi5cKVxzKjskLzsvOwogCSR4ID1+IHMvXFsqLlxdXHMqOyQvOy87CiAgICAgfQogCiAgICAgaWYgKCR4ID1+IC90eXBlZGVmLipccysoXHcrKVxzKjsvKSB7Ci0gICAgICAgICRkZWNsYXJhdGlvbl9uYW1lID0gJDE7CisJJGRlY2xhcmF0aW9uX25hbWUgPSAkMTsKIAogCW91dHB1dF9kZWNsYXJhdGlvbigkZGVjbGFyYXRpb25fbmFtZSwKIAkJCSAgICd0eXBlZGVmJywKQEAgLTE0MTAsNyArMTQzMiw3IEBACiAJCQkgICB9KTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHByaW50IFNUREVSUiAiRXJyb3IoJHtmaWxlfTokLik6IENhbm5vdCBwYXJzZSB0eXBlZGVmIVxuIjsKKwlwcmludCBTVERFUlIgIkVycm9yKCR7ZmlsZX06JC4pOiBDYW5ub3QgcGFyc2UgdHlwZWRlZiFcbiI7CiAJKyskZXJyb3JzOwogICAgIH0KIH0KQEAgLTE0MjQsMTQgKzE0NDYsMTQgQEAKIAogICAgICMgdGVtcG9yYXJpbHkgcmVwbGFjZSBjb21tYXMgaW5zaWRlIGZ1bmN0aW9uIHBvaW50ZXIgZGVmaW5pdGlvbgogICAgIHdoaWxlICgkYXJncyA9fiAvKFwoW15cKSxdKyksLykgewotICAgICAgICAkYXJncyA9fiBzLyhcKFteXCksXSspLC8kMSMvZzsKKwkkYXJncyA9fiBzLyhcKFteXCksXSspLC8kMSMvZzsKICAgICB9CiAKICAgICBmb3JlYWNoIG15ICRhcmcgKHNwbGl0KCRzcGxpdHRlciwgJGFyZ3MpKSB7CiAJIyBzdHJpcCBjb21tZW50cwogCSRhcmcgPX4gcy9cL1wqLipcKlwvLy87Ci0gICAgICAgICMgc3RyaXAgbGVhZGluZy90cmFpbGluZyBzcGFjZXMKLSAgICAgICAgJGFyZyA9fiBzL15ccyovLzsKKwkjIHN0cmlwIGxlYWRpbmcvdHJhaWxpbmcgc3BhY2VzCisJJGFyZyA9fiBzL15ccyovLzsKIAkkYXJnID1+IHMvXHMqJC8vOwogCSRhcmcgPX4gcy9ccysvIC87CiAKQEAgLTE0NTYsNyArMTQ3OCwxNiBAQAogCSAgICBpZiAoJGFyZ3NbMF0gPX4gbS9cKi8pIHsKIAkJJGFyZ3NbMF0gPX4gcy8oXCorKVxzKi8gJDEvOwogCSAgICB9Ci0JICAgIG15IEBmaXJzdF9hcmcgPSBzcGxpdCgnXHMrJywgc2hpZnQgQGFyZ3MpOworCisJICAgIG15IEBmaXJzdF9hcmc7CisJICAgIGlmICgkYXJnc1swXSA9fiAvXiguKlxzKykoLio/XFsuKlxdLiopJC8pIHsKKwkJICAgIHNoaWZ0IEBhcmdzOworCQkgICAgcHVzaChAZmlyc3RfYXJnLCBzcGxpdCgnXHMrJywgJDEpKTsKKwkJICAgIHB1c2goQGZpcnN0X2FyZywgJDIpOworCSAgICB9IGVsc2UgeworCQkgICAgQGZpcnN0X2FyZyA9IHNwbGl0KCdccysnLCBzaGlmdCBAYXJncyk7CisJICAgIH0KKwogCSAgICB1bnNoaWZ0KEBhcmdzLCBwb3AgQGZpcnN0X2FyZyk7CiAJICAgICR0eXBlID0gam9pbiAiICIsIEBmaXJzdF9hcmc7CiAKQEAgLTE1MTQsMTUgKzE1NDUsMTUgQEAKIAkgICAgJHBhcmFtZXRlcmRlc2NzeyRwYXJhbV9uYW1lfSA9ICR1bmRlc2NyaWJlZDsKIAogCSAgICBpZiAoKCR0eXBlIGVxICdmdW5jdGlvbicpIHx8ICgkdHlwZSBlcSAnZW51bScpKSB7Ci0JICAgICAgICBwcmludCBTVERFUlIgIldhcm5pbmcoJHtmaWxlfTokLik6IEZ1bmN0aW9uIHBhcmFtZXRlciAiLgorCQlwcmludCBTVERFUlIgIldhcm5pbmcoJHtmaWxlfTokLik6IEZ1bmN0aW9uIHBhcmFtZXRlciAiLgogCQkgICAgIm9yIG1lbWJlciAnJHBhcmFtJyBub3QgIiAuCiAJCSAgICAiZGVzY3JpYmVkIGluICckZGVjbGFyYXRpb25fbmFtZSdcbiI7CiAJICAgIH0KIAkgICAgcHJpbnQgU1RERVJSICJXYXJuaW5nKCR7ZmlsZX06JC4pOiIuCi0JICAgICAgICAgICAgICAgICAiIE5vIGRlc2NyaXB0aW9uIGZvdW5kIGZvciBwYXJhbWV0ZXIgJyRwYXJhbSdcbiI7CisJCQkgIiBObyBkZXNjcmlwdGlvbiBmb3VuZCBmb3IgcGFyYW1ldGVyICckcGFyYW0nXG4iOwogCSAgICArKyR3YXJuaW5nczsKLSAgICAgICAgfQotICAgICAgICB9CisJfQorCX0KIAogCXB1c2ggQHBhcmFtZXRlcmxpc3QsICRwYXJhbTsKIAkkcGFyYW1ldGVydHlwZXN7JHBhcmFtfSA9ICR0eXBlOwpAQCAtMTY2NCwxMCArMTY5NSwxMCBAQAogCSMgZG8gbm90aGluZwogICAgIH0KICAgICBlbHNpZiAoJHggPX4gLyhbXlx7XSopLykgewotICAgICAgICAkcHJvdG90eXBlIC49ICQxOworCSRwcm90b3R5cGUgLj0gJDE7CiAgICAgfQogICAgIGlmICgoJHggPX4gL1x7LykgfHwgKCR4ID1+IC9cI2RlZmluZS8pIHx8ICgkeCA9fiAvOy8pKSB7Ci0gICAgICAgICRwcm90b3R5cGUgPX4gc0AvXCouKj9cKi9AQGdvczsJIyBzdHJpcCBjb21tZW50cy4KKwkkcHJvdG90eXBlID1+IHNAL1wqLio/XCovQEBnb3M7CSMgc3RyaXAgY29tbWVudHMuCiAJJHByb3RvdHlwZSA9fiBzQFtcclxuXStAIEBnb3M7ICMgc3RyaXAgbmV3bGluZXMvY3Incy4KIAkkcHJvdG90eXBlID1+IHNAXlxzK0BAZ29zOyAjIHN0cmlwIGxlYWRpbmcgc3BhY2VzCiAJZHVtcF9mdW5jdGlvbigkcHJvdG90eXBlLCRmaWxlKTsKQEAgLTE2ODgsMTcgKzE3MTksMTcgQEAKICAgICB9CiAKICAgICB3aGlsZSAoMSkgewotICAgICAgICBpZiAoICR4ID1+IC8oW157fTtdKikoW3t9O10pKC4qKS8gKSB7CisJaWYgKCAkeCA9fiAvKFtee307XSopKFt7fTtdKSguKikvICkgewogCSAgICAkcHJvdG90eXBlIC49ICQxIC4gJDI7CiAJICAgICgkMiBlcSAneycpICYmICRicmNvdW50Kys7CiAJICAgICgkMiBlcSAnfScpICYmICRicmNvdW50LS07CiAJICAgIGlmICgoJDIgZXEgJzsnKSAmJiAoJGJyY291bnQgPT0gMCkpIHsKLQkgICAgICAgIGR1bXBfZGVjbGFyYXRpb24oJHByb3RvdHlwZSwkZmlsZSk7CisJCWR1bXBfZGVjbGFyYXRpb24oJHByb3RvdHlwZSwkZmlsZSk7CiAJCXJlc2V0X3N0YXRlKCk7Ci0JICAgICAgICBsYXN0OworCQlsYXN0OwogCSAgICB9CiAJICAgICR4ID0gJDM7Ci0gICAgICAgIH0gZWxzZSB7CisJfSBlbHNlIHsKIAkgICAgJHByb3RvdHlwZSAuPSAkeDsKIAkgICAgbGFzdDsKIAl9CkBAIC0xNzU2LDcgKzE3ODcsNyBAQAogCQl9IGVsc2UgewogCQkJJHNlY3Rpb24gPSAkMTsKIAkJfQotICAgICAgICAgICAgfQorCSAgICB9CiAJICAgIGVsc2lmICgvJGRvY19kZWNsL28pIHsKIAkJJGlkZW50aWZpZXIgPSAkMTsKIAkJaWYgKC9ccyooW1x3XHNdKz8pXHMqLS8pIHsKQEAgLTE4NDksMTMgKzE4ODAsMTMgQEAKIAkgICAgfQogCX0gZWxzaWYgKCRzdGF0ZSA9PSAzKSB7CSMgc2Nhbm5pbmcgZm9yIGZ1bmN0aW9uICd7JyAoZW5kIG9mIHByb3RvdHlwZSkKIAkgICAgaWYgKCRkZWNsX3R5cGUgZXEgJ2Z1bmN0aW9uJykgewotCSAgICAgICAgcHJvY2Vzc19zdGF0ZTNfZnVuY3Rpb24oJF8sICRmaWxlKTsKKwkJcHJvY2Vzc19zdGF0ZTNfZnVuY3Rpb24oJF8sICRmaWxlKTsKIAkgICAgfSBlbHNlIHsKLQkgICAgICAgIHByb2Nlc3Nfc3RhdGUzX3R5cGUoJF8sICRmaWxlKTsKKwkJcHJvY2Vzc19zdGF0ZTNfdHlwZSgkXywgJGZpbGUpOwogCSAgICB9CiAJfSBlbHNpZiAoJHN0YXRlID09IDQpIHsKIAkJIyBEb2N1bWVudGF0aW9uIGJsb2NrCi0JICAgICAgICBpZiAoLyRkb2NfYmxvY2svKSB7CisJCWlmICgvJGRvY19ibG9jay8pIHsKIAkJCWR1bXBfc2VjdGlvbigkc2VjdGlvbiwgJGNvbnRlbnRzKTsKIAkJCW91dHB1dF9pbnRybyh7J3NlY3Rpb25saXN0JyA9PiBcQHNlY3Rpb25saXN0LAogCQkJCSAgICAgICdzZWN0aW9ucycgPT4gXCVzZWN0aW9ucyB9KTsKQEAgLTE4NzMsNyArMTkwNCw3IEBACiAJCQl9IGVsc2UgewogCQkJCSRzZWN0aW9uID0gJDE7CiAJCQl9Ci0gICAgICAgICAgICAgICAgfQorCQl9CiAJCWVsc2lmICgvJGRvY19lbmQvKQogCQl7CiAJCQlkdW1wX3NlY3Rpb24oJHNlY3Rpb24sICRjb250ZW50cyk7CkBAIC0xOTAwLDggKzE5MzEsOCBAQAogCQkJewogCQkJCSRjb250ZW50cyAuPSAkMSAuICJcbiI7CiAJCQl9Ci0gICAgICAgIAl9Ci0gICAgICAgICAgfQorCQl9CisJfQogICAgIH0KICAgICBpZiAoJGluaXRpYWxfc2VjdGlvbl9jb3VudGVyID09ICRzZWN0aW9uX2NvdW50ZXIpIHsKIAlwcmludCBTVERFUlIgIldhcm5pbmcoJHtmaWxlfSk6IG5vIHN0cnVjdHVyZWQgY29tbWVudHMgZm91bmRcbiI7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKaW5kZXggZWQxMjQ0ZC4uZjY0NjM4MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCisrKyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwpAQCAtMzUzLDExICszNTMsMTYgQEAKIAogc3RhdGljIGludCBkb19vZl9lbnRyeSAoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mLCBjaGFyICphbGlhcykKIHsKKyAgICBpbnQgbGVuOwogICAgIGNoYXIgKnRtcDsKLSAgICBzcHJpbnRmIChhbGlhcywgIm9mOk4lc1Qlc0MlcyIsCisgICAgbGVuID0gc3ByaW50ZiAoYWxpYXMsICJvZjpOJXNUJXMiLAogICAgICAgICAgICAgICAgICAgICBvZi0+bmFtZVswXSA/IG9mLT5uYW1lIDogIioiLAotICAgICAgICAgICAgICAgICAgICBvZi0+dHlwZVswXSA/IG9mLT50eXBlIDogIioiLAotICAgICAgICAgICAgICAgICAgICBvZi0+Y29tcGF0aWJsZVswXSA/IG9mLT5jb21wYXRpYmxlIDogIioiKTsKKyAgICAgICAgICAgICAgICAgICAgb2YtPnR5cGVbMF0gPyBvZi0+dHlwZSA6ICIqIik7CisKKyAgICBpZiAob2YtPmNvbXBhdGlibGVbMF0pCisgICAgICAgIHNwcmludGYgKCZhbGlhc1tsZW5dLCAiJXNDJXMiLAorICAgICAgICAgICAgICAgICAgICAgb2YtPnR5cGVbMF0gPyAiKiIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgIG9mLT5jb21wYXRpYmxlKTsKIAogICAgIC8qIFJlcGxhY2UgYWxsIHdoaXRlc3BhY2Ugd2l0aCB1bmRlcnNjb3JlcyAqLwogICAgIGZvciAodG1wID0gYWxpYXM7IHRtcCAmJiAqdG1wOyB0bXArKykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCA0YWIzNmRlLi44ZTU2MTBkIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC01ODIsNiArNTgyLDEyIEBACiAKIC8qKgogICogV2hpdGVsaXN0IHRvIGFsbG93IGNlcnRhaW4gcmVmZXJlbmNlcyB0byBwYXNzIHdpdGggbm8gd2FybmluZy4KKyAqCisgKiBQYXR0ZXJuIDA6CisgKiAgIERvIG5vdCB3YXJuIGlmIGZ1bnRpb24vZGF0YSBhcmUgbWFya2VkIHdpdGggX19pbml0X3JlZm9rL19faW5pdGRhdGFfcmVmb2suCisgKiAgIFRoZSBwYXR0ZXJuIGlzIGlkZW50aWZpZWQgYnk6CisgKiAgIGZyb21zZWMgPSAudGV4dC5pbml0LnJlZm9rIHwgLmRhdGEuaW5pdC5yZWZvaworICoKICAqIFBhdHRlcm4gMToKICAqICAgSWYgYSBtb2R1bGUgcGFyYW1ldGVyIGlzIGRlY2xhcmVkIF9faW5pdGRhdGEgYW5kIHBlcm1pc3Npb25zPTAKICAqICAgdGhlbiB0aGlzIGlzIGxlZ2FsIGRlc3BpdGUgdGhlIHdhcm5pbmcgZ2VuZXJhdGVkLgpAQCAtNjE5LDE0ICs2MjUsNiBAQAogICogICBUaGlzIHBhdHRlcm4gaXMgaWRlbnRpZmllZCBieQogICogICByZWZzeW1uYW1lID0gX19pbml0X2JlZ2luLCBfc2luaXR0ZXh0LCBfZWluaXR0ZXh0CiAgKgotICogUGF0dGVybiA2OgotICogICBEdXJpbmcgdGhlIGVhcmx5IGluaXQgcGhhc2Ugd2UgaGF2ZSByZWZlcmVuY2VzIGZyb20gLmluaXQudGV4dCB0bwotICogICAudGV4dCB3ZSBoYXZlIGFuIGludGVuZGVkIHNlY3Rpb24gbWlzbWF0Y2ggLSBkbyBub3Qgd2FybiBhYm91dCBpdC4KLSAqICAgU2VlIGtlcm5lbF9pbml0KCkgaW4gaW5pdC9tYWluLmMKLSAqICAgdG9zZWMgICA9IC5pbml0LnRleHQKLSAqICAgZnJvbXNlYyA9IC50ZXh0Ci0gKiAgIGF0c3ltID0ga2VybmVsX2luaXQKLSAqCiAgKiBQYXR0ZXJuIDc6CiAgKiAgTG9nb3MgdXNlZCBpbiBkcml2ZXJzL3ZpZGVvL2xvZ28gcmVzaWRlIGluIF9faW5pdGRhdGEgYnV0IHRoZQogICogIGZ1bnRpb24gdGhhdCByZWZlcmVuY2VzIHRoZW0gYXJlIEVYUE9SVF9TWU1CT0woKSBzbyBjYW5ub3QgYmUKQEAgLTY0Miw2ICs2NDAsMTEgQEAKICAqICB0b3NlYyAgID0gLmluaXQudGV4dAogICogIGZyb21zZWMgID0gLnBhcmF2aXJ0cHJvYmUKICAqCisgKiBQYXR0ZXJuIDEwOgorICogIGlhNjQgaGFzIG1hY2h2ZWMgdGFibGUgZm9yIGVhY2ggcGxhdGZvcm0gYW5kCisgKiAgcG93ZXJwYyBoYXMgYSBtYWNoaW5lIGRlc2MgdGFibGUgZm9yIGVhY2ggcGxhdGZvcm0uCisgKiAgSXQgaXMgbWl4dHVyZSBvZiBmdW5jdGlvbiBwb2ludGVycyBvZiAuaW5pdC50ZXh0IGFuZCAudGV4dC4KKyAqICBmcm9tc2VjICA9IC5tYWNodmVjIHwgLm1hY2hpbmUuZGVzYwogICoqLwogc3RhdGljIGludCBzZWNyZWZfd2hpdGVsaXN0KGNvbnN0IGNoYXIgKm1vZG5hbWUsIGNvbnN0IGNoYXIgKnRvc2VjLAogCQkJICAgIGNvbnN0IGNoYXIgKmZyb21zZWMsIGNvbnN0IGNoYXIgKmF0c3ltLApAQCAtNjY4LDYgKzY3MSwxMSBAQAogCQlOVUxMCiAJfTsKIAorCS8qIENoZWNrIGZvciBwYXR0ZXJuIDAgKi8KKwlpZiAoKHN0cmNtcChmcm9tc2VjLCAiLnRleHQuaW5pdC5yZWZvayIpID09IDApIHx8CisJICAgIChzdHJjbXAoZnJvbXNlYywgIi5kYXRhLmluaXQucmVmb2siKSA9PSAwKSkKKwkJcmV0dXJuIDE7CisKIAkvKiBDaGVjayBmb3IgcGF0dGVybiAxICovCiAJaWYgKHN0cmNtcCh0b3NlYywgIi5pbml0LmRhdGEiKSAhPSAwKQogCQlmMSA9IDA7CkBAIC03MDksMTIgKzcxNyw2IEBACiAJCWlmIChzdHJjbXAocmVmc3ltbmFtZSwgKnMpID09IDApCiAJCQlyZXR1cm4gMTsKIAotCS8qIENoZWNrIGZvciBwYXR0ZXJuIDYgKi8KLQlpZiAoKHN0cmNtcCh0b3NlYywgIi5pbml0LnRleHQiKSA9PSAwKSAmJgotCSAgICAoc3RyY21wKGZyb21zZWMsICIudGV4dCIpID09IDApICYmCi0JICAgIChzdHJjbXAocmVmc3ltbmFtZSwgImtlcm5lbF9pbml0IikgPT0gMCkpCi0JCXJldHVybiAxOwotCiAJLyogQ2hlY2sgZm9yIHBhdHRlcm4gNyAqLwogCWlmICgoc3RyY21wKHRvc2VjLCAiLmluaXQuZGF0YSIpID09IDApICYmCiAJICAgIChzdHJuY21wKGZyb21zZWMsICIudGV4dCIsIHN0cmxlbigiLnRleHQiKSkgPT0gMCkgJiYKQEAgLTcyNiw2ICs3MjgsMTEgQEAKIAkgICAgKHN0cmNtcChmcm9tc2VjLCAiLnBhcmF2aXJ0cHJvYmUiKSA9PSAwKSkKIAkJcmV0dXJuIDE7CiAKKwkvKiBDaGVjayBmb3IgcGF0dGVybiAxMCAqLworCWlmICgoc3RyY21wKGZyb21zZWMsICIubWFjaHZlYyIpID09IDApIHx8CisJICAgIChzdHJjbXAoZnJvbXNlYywgIi5tYWNoaW5lLmRlc2MiKSA9PSAwKSkKKwkJcmV0dXJuIDE7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODU3LDMwICs4NjQsMzQgQEAKIAkJCSAgICAgZWxmLT5zdHJ0YWIgKyBiZWZvcmUtPnN0X25hbWUsIHJlZnN5bW5hbWUpKQogCQlyZXR1cm47CiAKKwkvKiBmcm9tc2VjIHdoaXRlbGlzdCAtIHdpdGhvdXQgYSB2YWxpZCAnYmVmb3JlJworCSAqIHBvd2VycGMgaGFzIGEgR09UIHRhYmxlIGluIC5nb3QyIHNlY3Rpb24gKi8KKwlpZiAoc3RyY21wKGZyb21zZWMsICIuZ290MiIpID09IDApCisJCXJldHVybjsKKwogCWlmIChiZWZvcmUgJiYgYWZ0ZXIpIHsKLQkJd2FybigiJXMgLSBTZWN0aW9uIG1pc21hdGNoOiByZWZlcmVuY2UgdG8gJXM6JXMgZnJvbSAlcyAiCi0JCSAgICAgImJldHdlZW4gJyVzJyAoYXQgb2Zmc2V0IDB4JWxseCkgYW5kICclcydcbiIsCi0JCSAgICAgbW9kbmFtZSwgc2VjbmFtZSwgcmVmc3ltbmFtZSwgZnJvbXNlYywKKwkJd2FybigiJXMoJXMrMHglbGx4KTogU2VjdGlvbiBtaXNtYXRjaDogcmVmZXJlbmNlIHRvICVzOiVzICIKKwkJICAgICAiKGJldHdlZW4gJyVzJyBhbmQgJyVzJylcbiIsCisJCSAgICAgbW9kbmFtZSwgZnJvbXNlYywgKHVuc2lnbmVkIGxvbmcgbG9uZylyLnJfb2Zmc2V0LAorCQkgICAgIHNlY25hbWUsIHJlZnN5bW5hbWUsCiAJCSAgICAgZWxmLT5zdHJ0YWIgKyBiZWZvcmUtPnN0X25hbWUsCi0JCSAgICAgKGxvbmcgbG9uZylyLnJfb2Zmc2V0LAogCQkgICAgIGVsZi0+c3RydGFiICsgYWZ0ZXItPnN0X25hbWUpOwogCX0gZWxzZSBpZiAoYmVmb3JlKSB7Ci0JCXdhcm4oIiVzIC0gU2VjdGlvbiBtaXNtYXRjaDogcmVmZXJlbmNlIHRvICVzOiVzIGZyb20gJXMgIgotCQkgICAgICJhZnRlciAnJXMnIChhdCBvZmZzZXQgMHglbGx4KVxuIiwKLQkJICAgICBtb2RuYW1lLCBzZWNuYW1lLCByZWZzeW1uYW1lLCBmcm9tc2VjLAotCQkgICAgIGVsZi0+c3RydGFiICsgYmVmb3JlLT5zdF9uYW1lLAotCQkgICAgIChsb25nIGxvbmcpci5yX29mZnNldCk7CisJCXdhcm4oIiVzKCVzKzB4JWxseCk6IFNlY3Rpb24gbWlzbWF0Y2g6IHJlZmVyZW5jZSB0byAlczolcyAiCisJCSAgICAgIihhZnRlciAnJXMnKVxuIiwKKwkJICAgICBtb2RuYW1lLCBmcm9tc2VjLCAodW5zaWduZWQgbG9uZyBsb25nKXIucl9vZmZzZXQsCisJCSAgICAgc2VjbmFtZSwgcmVmc3ltbmFtZSwKKwkJICAgICBlbGYtPnN0cnRhYiArIGJlZm9yZS0+c3RfbmFtZSk7CiAJfSBlbHNlIGlmIChhZnRlcikgewotCQl3YXJuKCIlcyAtIFNlY3Rpb24gbWlzbWF0Y2g6IHJlZmVyZW5jZSB0byAlczolcyBmcm9tICVzICIKKwkJd2FybigiJXMoJXMrMHglbGx4KTogU2VjdGlvbiBtaXNtYXRjaDogcmVmZXJlbmNlIHRvICVzOiVzICIKIAkJICAgICAiYmVmb3JlICclcycgKGF0IG9mZnNldCAtMHglbGx4KVxuIiwKLQkJICAgICBtb2RuYW1lLCBzZWNuYW1lLCByZWZzeW1uYW1lLCBmcm9tc2VjLAotCQkgICAgIGVsZi0+c3RydGFiICsgYWZ0ZXItPnN0X25hbWUsCi0JCSAgICAgKGxvbmcgbG9uZylyLnJfb2Zmc2V0KTsKKwkJICAgICBtb2RuYW1lLCBmcm9tc2VjLCAodW5zaWduZWQgbG9uZyBsb25nKXIucl9vZmZzZXQsCisJCSAgICAgc2VjbmFtZSwgcmVmc3ltbmFtZSwKKwkJICAgICBlbGYtPnN0cnRhYiArIGFmdGVyLT5zdF9uYW1lKTsKIAl9IGVsc2UgewotCQl3YXJuKCIlcyAtIFNlY3Rpb24gbWlzbWF0Y2g6IHJlZmVyZW5jZSB0byAlczolcyBmcm9tICVzICIKLQkJICAgICAiKG9mZnNldCAweCVsbHgpXG4iLAotCQkgICAgIG1vZG5hbWUsIHNlY25hbWUsIGZyb21zZWMsIHJlZnN5bW5hbWUsCi0JCSAgICAgKGxvbmcgbG9uZylyLnJfb2Zmc2V0KTsKKwkJd2FybigiJXMoJXMrMHglbGx4KTogU2VjdGlvbiBtaXNtYXRjaDogcmVmZXJlbmNlIHRvICVzOiVzXG4iLAorCQkgICAgIG1vZG5hbWUsIGZyb21zZWMsICh1bnNpZ25lZCBsb25nIGxvbmcpci5yX29mZnNldCwKKwkJICAgICBzZWNuYW1lLCByZWZzeW1uYW1lKTsKIAl9CiB9CiAKQEAgLTEzMTYsNiArMTMyNyw3IEBACiAJCWJ1Zl9wcmludGYoYiwgIiNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRFxuIgogCQkJICAgICAgIiAuZXhpdCA9IGNsZWFudXBfbW9kdWxlLFxuIgogCQkJICAgICAgIiNlbmRpZlxuIik7CisJYnVmX3ByaW50ZihiLCAiIC5hcmNoID0gTU9EVUxFX0FSQ0hfSU5JVCxcbiIpOwogCWJ1Zl9wcmludGYoYiwgIn07XG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2Qvc3VtdmVyc2lvbi5jIGIvc2NyaXB0cy9tb2Qvc3VtdmVyc2lvbi5jCmluZGV4IDY4NzNkNWEuLmQ5Y2M2OTAgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL3N1bXZlcnNpb24uYworKysgYi9zY3JpcHRzL21vZC9zdW12ZXJzaW9uLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgIm1vZHBvc3QuaCIKIAogLyoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhciBiL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhcgppbmRleCA4OGI1MjgxLi5hYTBjY2RiIDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIKKysrIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyCkBAIC02OSw4ICs2OSw4IEBACiAjIEluc3RhbGwgYXJjaC1zcGVjaWZpYyBrZXJuZWwgaW1hZ2UocykKICMKIGNhc2UgIiR7QVJDSH0iIGluCi0JaTM4NikKLQkJWyAtZiAiJHtvYmp0cmVlfS9hcmNoL2kzODYvYm9vdC9iekltYWdlIiBdICYmIGNwIC12IC0tICIke29ianRyZWV9L2FyY2gvaTM4Ni9ib290L2J6SW1hZ2UiICIke3RtcGRpcn0vYm9vdC92bWxpbnV6LSR7S0VSTkVMUkVMRUFTRX0iCisJaTM4Nnx4ODZfNjQpCisJCVsgLWYgIiR7b2JqdHJlZX0vYXJjaC8kQVJDSC9ib290L2J6SW1hZ2UiIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vYXJjaC8kQVJDSC9ib290L2J6SW1hZ2UiICIke3RtcGRpcn0vYm9vdC92bWxpbnV6LSR7S0VSTkVMUkVMRUFTRX0iCiAJCTs7CiAJYWxwaGEpCiAJCVsgLWYgIiR7b2JqdHJlZX0vYXJjaC9hbHBoYS9ib290L3ZtbGludXguZ3oiIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vYXJjaC9hbHBoYS9ib290L3ZtbGludXguZ3oiICIke3RtcGRpcn0vYm9vdC92bWxpbnV6LSR7S0VSTkVMUkVMRUFTRX0iCmRpZmYgLS1naXQgYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMgYi9zZWN1cml0eS9jYXBhYmlsaXR5LmMKaW5kZXggYjg2OGU3ZS4uMzgyOTZhMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCisrKyBiL3NlY3VyaXR5L2NhcGFiaWxpdHkuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvY29tbW9uY2FwLmMgYi9zZWN1cml0eS9jb21tb25jYXAuYwppbmRleCA1YTVlZjVjLi4zODQzNzllIDEwMDY0NAotLS0gYS9zZWN1cml0eS9jb21tb25jYXAuYworKysgYi9zZWN1cml0eS9jb21tb25jYXAuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnIGIvc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnCmluZGV4IDIzYjUxMDQuLmIzMmE0NTkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvS2NvbmZpZworKysgYi9zZWN1cml0eS9zZWxpbnV4L0tjb25maWcKQEAgLTEzNyw3ICsxMzcsNyBAQAogCiAJICBFeGFtcGxlczoKIAkgIEZvciB0aGUgRmVkb3JhIENvcmUgMyBvciA0IExpbnV4IGRpc3RyaWJ1dGlvbnMsIGVuYWJsZSB0aGlzIG9wdGlvbgotCSAgYW5kIHNldCB0aGUgdmFsdWUgdmlhIHRoZSBuZXh0IG9wdGlvbi4gRm9yIEZlZG9yZSBDb3JlIDUgYW5kIGxhdGVyLAorCSAgYW5kIHNldCB0aGUgdmFsdWUgdmlhIHRoZSBuZXh0IG9wdGlvbi4gRm9yIEZlZG9yYSBDb3JlIDUgYW5kIGxhdGVyLAogCSAgZG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbi4KIAogCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA4ODVhOWE5Li5hZDhkZDRlIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgpAQCAtMTc1OCwxMiArMTc1NywxMSBAQAogCQkJfQogCQl9CiAJCWZpbGVfbGlzdF91bmxvY2soKTsKLQotCQkvKiBSZXNldCBjb250cm9sbGluZyB0dHkuICovCi0JCWlmIChkcm9wX3R0eSkKLQkJCXByb2Nfc2V0X3R0eShjdXJyZW50LCBOVUxMKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOworCS8qIFJlc2V0IGNvbnRyb2xsaW5nIHR0eS4gKi8KKwlpZiAoZHJvcF90dHkpCisJCW5vX3R0eSgpOwogCiAJLyogUmV2YWxpZGF0ZSBhY2Nlc3MgdG8gaW5oZXJpdGVkIG9wZW4gZmlsZXMuICovCiAKZGlmZiAtLWdpdCBhL3NvdW5kL0tjb25maWcgYi9zb3VuZC9LY29uZmlnCmluZGV4IDk3NTMyYmIuLjllYTQ3MzggMTAwNjQ0Ci0tLSBhL3NvdW5kL0tjb25maWcKKysrIGIvc291bmQvS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKICMKIAogbWVudSAiU291bmQiCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0KIAogY29uZmlnIFNPVU5ECiAJdHJpc3RhdGUgIlNvdW5kIGNhcmQgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb2RlY3Mvc25kLWFvYS1jb2RlYy1vbnl4LmMgYi9zb3VuZC9hb2EvY29kZWNzL3NuZC1hb2EtY29kZWMtb255eC5jCmluZGV4IDdmOTgwYmUuLmRlZDUxNjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb2RlY3Mvc25kLWFvYS1jb2RlYy1vbnl4LmMKKysrIGIvc291bmQvYW9hL2NvZGVjcy9zbmQtYW9hLWNvZGVjLW9ueXguYwpAQCAtMTAxOCw3ICsxMDE4LDcgQEAKIAlvbnl4LT5pMmMuZHJpdmVyID0gJm9ueXhfZHJpdmVyOwogCW9ueXgtPmkyYy5hZGFwdGVyID0gYWRhcHRlcjsKIAlvbnl4LT5pMmMuYWRkciA9IGFkZHIgJiAweDdmOwotCXN0cmxjcHkob255eC0+aTJjLm5hbWUsICJvbnl4IGF1ZGlvIGNvZGVjIiwgSTJDX05BTUVfU0laRS0xKTsKKwlzdHJsY3B5KG9ueXgtPmkyYy5uYW1lLCAib255eCBhdWRpbyBjb2RlYyIsIEkyQ19OQU1FX1NJWkUpOwogCiAJaWYgKGkyY19hdHRhY2hfY2xpZW50KCZvbnl4LT5pMmMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byBhdHRhY2ggdG8gaTJjXG4iKTsKQEAgLTEwMzMsNyArMTAzMyw3IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlzdHJsY3B5KG9ueXgtPmNvZGVjLm5hbWUsICJvbnl4IiwgTUFYX0NPREVDX05BTUVfTEVOLTEpOworCXN0cmxjcHkob255eC0+Y29kZWMubmFtZSwgIm9ueXgiLCBNQVhfQ09ERUNfTkFNRV9MRU4pOwogCW9ueXgtPmNvZGVjLm93bmVyID0gVEhJU19NT0RVTEU7CiAJb255eC0+Y29kZWMuaW5pdCA9IG9ueXhfaW5pdF9jb2RlYzsKIAlvbnl4LT5jb2RlYy5leGl0ID0gb255eF9leGl0X2NvZGVjOwpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIAlidXNub2RlID0gcG1hY19pMmNfZ2V0X2J1c19ub2RlKGJ1cyk7CiAKIAl3aGlsZSAoKGRldiA9IG9mX2dldF9uZXh0X2NoaWxkKGJ1c25vZGUsIGRldikpICE9IE5VTEwpIHsKLQkJaWYgKGRldmljZV9pc19jb21wYXRpYmxlKGRldiwgInBjbTMwNTIiKSkgeworCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LCAicGNtMzA1MiIpKSB7CiAJCQljb25zdCB1MzIgKmFkZHI7CiAJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggImZvdW5kIHBjbTMwNTJcbiIpOwogCQkJYWRkciA9IG9mX2dldF9wcm9wZXJ0eShkZXYsICJyZWciLCBOVUxMKTsKQEAgLTEwNzQsNyArMTA3NCw3IEBACiAJLyogaWYgdGhhdCBkaWRuJ3Qgd29yaywgdHJ5IGRlc3BlcmF0ZSBtb2RlIGZvciBvbGRlcgogCSAqIG1hY2hpbmVzIHRoYXQgaGF2ZSBzdHVmZiBtaXNzaW5nIGZyb20gdGhlIGRldmljZSB0cmVlICovCiAJCi0JaWYgKCFkZXZpY2VfaXNfY29tcGF0aWJsZShidXNub2RlLCAiazItaTJjIikpCisJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShidXNub2RlLCAiazItaTJjIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJmb3VuZCBrMi1pMmMsIGNoZWNraW5nIGlmIG9ueXggY2hpcCBpcyBvbiBpdFxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvY29kZWNzL3NuZC1hb2EtY29kZWMtdGFzLmMgYi9zb3VuZC9hb2EvY29kZWNzL3NuZC1hb2EtY29kZWMtdGFzLmMKaW5kZXggY2VjYTM4NC4uMmY3NzFmNSAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2NvZGVjcy9zbmQtYW9hLWNvZGVjLXRhcy5jCisrKyBiL3NvdW5kL2FvYS9jb2RlY3Mvc25kLWFvYS1jb2RlYy10YXMuYwpAQCAtODk5LDE0ICs4OTksMTQgQEAKIAl0YXMtPmkyYy5hZGRyID0gYWRkcjsKIAkvKiBzZWVtcyB0aGF0IGhhbGYgaXMgYSBzYW5lciBkZWZhdWx0ICovCiAJdGFzLT5kcmNfcmFuZ2UgPSBUQVMzMDA0X0RSQ19NQVggLyAyOwotCXN0cmxjcHkodGFzLT5pMmMubmFtZSwgInRhcyBhdWRpbyBjb2RlYyIsIEkyQ19OQU1FX1NJWkUtMSk7CisJc3RybGNweSh0YXMtPmkyYy5uYW1lLCAidGFzIGF1ZGlvIGNvZGVjIiwgSTJDX05BTUVfU0laRSk7CiAKIAlpZiAoaTJjX2F0dGFjaF9jbGllbnQoJnRhcy0+aTJjKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gYXR0YWNoIHRvIGkyY1xuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlzdHJsY3B5KHRhcy0+Y29kZWMubmFtZSwgInRhcyIsIE1BWF9DT0RFQ19OQU1FX0xFTi0xKTsKKwlzdHJsY3B5KHRhcy0+Y29kZWMubmFtZSwgInRhcyIsIE1BWF9DT0RFQ19OQU1FX0xFTik7CiAJdGFzLT5jb2RlYy5vd25lciA9IFRISVNfTU9EVUxFOwogCXRhcy0+Y29kZWMuaW5pdCA9IHRhc19pbml0X2NvZGVjOwogCXRhcy0+Y29kZWMuZXhpdCA9IHRhc19leGl0X2NvZGVjOwpAQCAtOTM4LDcgKzkzOCw3IEBACiAJYnVzbm9kZSA9IHBtYWNfaTJjX2dldF9idXNfbm9kZShidXMpOwogCiAJd2hpbGUgKChkZXYgPSBvZl9nZXRfbmV4dF9jaGlsZChidXNub2RlLCBkZXYpKSAhPSBOVUxMKSB7Ci0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJ0YXMzMDA0IikpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldiwgInRhczMwMDQiKSkgewogCQkJY29uc3QgdTMyICphZGRyOwogCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJmb3VuZCB0YXMzMDA0XG4iKTsKIAkJCWFkZHIgPSBvZl9nZXRfcHJvcGVydHkoZGV2LCAicmVnIiwgTlVMTCk7CmRpZmYgLS1naXQgYS9zb3VuZC9hb2Evc291bmRidXMvY29yZS5jIGIvc291bmQvYW9hL3NvdW5kYnVzL2NvcmUuYwppbmRleCA4YjJlOWI5Li42NGQxNjM5IDEwMDY0NAotLS0gYS9zb3VuZC9hb2Evc291bmRidXMvY29yZS5jCisrKyBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9jb3JlLmMKQEAgLTE2Myw4ICsxNjMsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBzb3VuZGJ1c19kZXZfYXR0cnNbXTsKLQogc3RhdGljIHN0cnVjdCBidXNfdHlwZSBzb3VuZGJ1c19idXNfdHlwZSA9IHsKIAkubmFtZQkJPSAiYW9hLXNvdW5kYnVzIiwKIAkucHJvYmUJCT0gc291bmRidXNfcHJvYmUsCmRpZmYgLS1naXQgYS9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2kyc2J1cy1jb3JlLmMgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2kyc2J1cy1jb3JlLmMKaW5kZXggNzlmYzRiYy4uZWZiOTQ0MSAxMDA2NDQKLS0tIGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9pMnNidXMtY29yZS5jCisrKyBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvaTJzYnVzLWNvcmUuYwpAQCAtMjMsOSArMjMsNiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQXBwbGUgU291bmRidXM6IEkyUyBzdXBwb3J0Iik7Ci0vKiBmb3IgYXV0by1sb2FkaW5nLCBkZWNsYXJlIHRoYXQgd2UgaGFuZGxlIHRoaXMgd2VpcmQKLSAqIHN0cmluZyB0aGF0IG1hY2lvIHB1dHMgaW50byB0aGUgcmVsZXZhbnQgZGV2aWNlICovCi1NT0RVTEVfQUxJQVMoIm9mOk5pMnNUaTJzQyIpOwogCiBzdGF0aWMgaW50IGZvcmNlOwogbW9kdWxlX3BhcmFtKGZvcmNlLCBpbnQsIDA0NDQpOwpAQCAtMzcsNiArMzQsOCBAQAogCXsgfQogfTsKIAorTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaTJzYnVzX21hdGNoKTsKKwogc3RhdGljIGludCBhbGxvY19kYmRtYV9kZXNjcmlwdG9yX3Jpbmcoc3RydWN0IGkyc2J1c19kZXYgKmkyc2RldiwKIAkJCQkgICAgICAgc3RydWN0IGRiZG1hX2NvbW1hbmRfbWVtICpyLAogCQkJCSAgICAgICBpbnQgbnVtY21kcykKQEAgLTMzNiw4ICszMzUsOCBAQAogCX0KIAogCXdoaWxlICgobnAgPSBvZl9nZXRfbmV4dF9jaGlsZChkZXYtPm9mZGV2Lm5vZGUsIG5wKSkpIHsKLQkJaWYgKGRldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaTJzYnVzIikgfHwKLQkJICAgIGRldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaTJzLW1vZGVtIikpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaTJzYnVzIikgfHwKKwkJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaTJzLW1vZGVtIikpIHsKIAkJCWdvdCArPSBpMnNidXNfYWRkX2RldihkZXYsIGNvbnRyb2wsIG5wKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9zb3VuZGJ1cy9zb3VuZGJ1cy5oIGIvc291bmQvYW9hL3NvdW5kYnVzL3NvdW5kYnVzLmgKaW5kZXggNWMyNzI5Ny4uNjIyY2QzNyAxMDA2NDQKLS0tIGEvc291bmQvYW9hL3NvdW5kYnVzL3NvdW5kYnVzLmgKKysrIGIvc291bmQvYW9hL3NvdW5kYnVzL3NvdW5kYnVzLmgKQEAgLTE5OSw0ICsxOTksNiBAQAogZXh0ZXJuIGludCBzb3VuZGJ1c19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNvdW5kYnVzX2RyaXZlciAqZHJ2KTsKIGV4dGVybiB2b2lkIHNvdW5kYnVzX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzb3VuZGJ1c19kcml2ZXIgKmRydik7CiAKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBzb3VuZGJ1c19kZXZfYXR0cnNbXTsKKwogI2VuZGlmIC8qIF9fU09VTkRCVVNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3NhMTF4eC11ZGExMzQxLmMgYi9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYwppbmRleCBjN2UxYjI2Li5lN2VkODY4IDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYworKysgYi9zb3VuZC9hcm0vc2ExMXh4LXVkYTEzNDEuYwpAQCAtOTg3LDcgKzk4Nyw3IEBACiAJCWlmIChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKQogCQkJcmV0dXJuIDA7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JCWVyciA9IC1FTk9ERVYKKwkJZXJyID0gLUVOT0RFVjsKIAl9IGVsc2UKIAkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExeHhfdWRhMTM0MV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9LY29uZmlnIGIvc291bmQvY29yZS9LY29uZmlnCmluZGV4IGIyOTI3NTIuLjgyOWNhMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvS2NvbmZpZworKysgYi9zb3VuZC9jb3JlL0tjb25maWcKQEAgLTE0Niw3ICsxNDYsNyBAQAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBjb2RlIGZvciB2ZXJib3NlIHByb2NmcyBjb250ZW50cyAocHJvdmlkZXMKLSAgICAgICAgICB1c2VmdWxsIGluZm9ybWF0aW9uIHRvIGRldmVsb3BlcnMgd2hlbiBhIHByb2JsZW0gb2NjdXJzKS4gT24gdGhlCisgICAgICAgICAgdXNlZnVsIGluZm9ybWF0aW9uIHRvIGRldmVsb3BlcnMgd2hlbiBhIHByb2JsZW0gb2NjdXJzKS4gIE9uIHRoZQogICAgICAgICAgIG90aGVyIHNpZGUsIGl0IG1ha2VzIHRoZSBBTFNBIHN1YnN5c3RlbSBsYXJnZXIuCiAKIGNvbmZpZyBTTkRfVkVSQk9TRV9QUklOVEsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvY29udHJvbC5jIGIvc291bmQvY29yZS9jb250cm9sLmMKaW5kZXggODZkZTcyNS4uMWYxYWI5YyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9jb250cm9sLmMKKysrIGIvc291bmQvY29yZS9jb250cm9sLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaHdkZXAuYyBiL3NvdW5kL2NvcmUvaHdkZXAuYwppbmRleCA5NmZmZGYxLi41MWFkOTViIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2h3ZGVwLmMKKysrIGIvc291bmQvY29yZS9od2RlcC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYyBiL3NvdW5kL2NvcmUvb3NzL21peGVyX29zcy5jCmluZGV4IDc0YTI5MjMuLmZjY2FkOGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL21peGVyX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL21peGVyX29zcy5jCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCmluZGV4IGM0NzQ0YmIuLmZjMTE1NzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCAzZTI3NmZjLi5hOTY3MzNhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMjEsNyArMjEsNiBAQAogCiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpAQCAtNzEzLDI2ICs3MTIsMjMgQEAKIAkJCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQlpbnQgc3RhdGUsIGludCBkb19sb2NrKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnMgPSBOVUxMOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczE7CiAJaW50IHJlcyA9IDA7CiAKLQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoKHBvcywgc3Vic3RyZWFtKSB7Ci0JCXMgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOworCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CiAJCWlmIChkb19sb2NrICYmIHMgIT0gc3Vic3RyZWFtKQotCQkJc3Bpbl9sb2NrKCZzLT5zZWxmX2dyb3VwLmxvY2spOworCQkJc3Bpbl9sb2NrX25lc3RlZCgmcy0+c2VsZl9ncm91cC5sb2NrLAorCQkJCQkgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCQlyZXMgPSBvcHMtPnByZV9hY3Rpb24ocywgc3RhdGUpOwogCQlpZiAocmVzIDwgMCkKIAkJCWdvdG8gX3VubG9jazsKIAl9Ci0Jc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnN0cmVhbSkgewotCQlzID0gc25kX3BjbV9ncm91cF9zdWJzdHJlYW1fZW50cnkocG9zKTsKKwlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQlyZXMgPSBvcHMtPmRvX2FjdGlvbihzLCBzdGF0ZSk7CiAJCWlmIChyZXMgPCAwKSB7CiAJCQlpZiAob3BzLT51bmRvX2FjdGlvbikgewotCQkJCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2gocG9zLCBzdWJzdHJlYW0pIHsKLQkJCQkJczEgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOworCQkJCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkoczEsIHN1YnN0cmVhbSkgewogCQkJCQlpZiAoczEgPT0gcykgLyogZmFpbGVkIHN0cmVhbSAqLwogCQkJCQkJYnJlYWs7CiAJCQkJCW9wcy0+dW5kb19hY3Rpb24oczEsIHN0YXRlKTsKQEAgLTc0MiwxNSArNzM4LDEzIEBACiAJCQlnb3RvIF91bmxvY2s7CiAJCX0KIAl9Ci0Jc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnN0cmVhbSkgewotCQlzID0gc25kX3BjbV9ncm91cF9zdWJzdHJlYW1fZW50cnkocG9zKTsKKwlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQlvcHMtPnBvc3RfYWN0aW9uKHMsIHN0YXRlKTsKIAl9CiAgX3VubG9jazoKIAlpZiAoZG9fbG9jaykgewogCQkvKiB1bmxvY2sgc3RyZWFtcyAqLwotCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoKHBvcywgc3Vic3RyZWFtKSB7Ci0JCQlzMSA9IHNuZF9wY21fZ3JvdXBfc3Vic3RyZWFtX2VudHJ5KHBvcyk7CisJCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkoczEsIHN1YnN0cmVhbSkgewogCQkJaWYgKHMxICE9IHN1YnN0cmVhbSkKIAkJCQlzcGluX3VubG9jaygmczEtPnNlbGZfZ3JvdXAubG9jayk7CiAJCQlpZiAoczEgPT0gcykJLyogZW5kICovCkBAIC0xNDM5LDcgKzE0MzMsNyBAQAogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7CiAJaW50IHJlc3VsdCA9IDA7CiAJaW50IGksIG51bV9kcmVjczsKIAlzdHJ1Y3QgZHJhaW5fcmVjICpkcmVjLCBkcmVjX3RtcCwgKmQ7CkBAIC0xNDc0LDggKzE0NjgsNyBAQAogCiAJLyogY291bnQgb25seSBwbGF5YmFjayBzdHJlYW1zICovCiAJbnVtX2RyZWNzID0gMDsKLQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoKHBvcywgc3Vic3RyZWFtKSB7Ci0JCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcyA9IHNuZF9wY21fZ3JvdXBfc3Vic3RyZWFtX2VudHJ5KHBvcyk7CisJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKIAkJcnVudGltZSA9IHMtPnJ1bnRpbWU7CiAJCWlmIChzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewogCQkJZCA9ICZkcmVjW251bV9kcmVjcysrXTsKQEAgLTE2NzUsNyArMTY2OCw3IEBACiAKIHN0YXRpYyBpbnQgc25kX3BjbV91bmxpbmsoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKIAlpbnQgcmVzID0gMDsKIAogCWRvd25fd3JpdGUoJnNuZF9wY21fbGlua19yd3NlbSk7CkBAIC0xNjg3LDggKzE2ODAsOCBAQAogCWxpc3RfZGVsKCZzdWJzdHJlYW0tPmxpbmtfbGlzdCk7CiAJc3Vic3RyZWFtLT5ncm91cC0+Y291bnQtLTsKIAlpZiAoc3Vic3RyZWFtLT5ncm91cC0+Y291bnQgPT0gMSkgewkvKiBkZXRhY2ggdGhlIGxhc3Qgc3RyZWFtLCB0b28gKi8KLQkJc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnN0cmVhbSkgewotCQkJcmVsaW5rX3RvX2xvY2FsKHNuZF9wY21fZ3JvdXBfc3Vic3RyZWFtX2VudHJ5KHBvcykpOworCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgeworCQkJcmVsaW5rX3RvX2xvY2FsKHMpOwogCQkJYnJlYWs7CiAJCX0KIAkJa2ZyZWUoc3Vic3RyZWFtLT5ncm91cCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3Jhd21pZGkuYyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCmluZGV4IGQxNGRjYmIuLmU0NzBjM2M3IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3Jhd21pZGkuYworKysgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcnRjdGltZXIuYyBiL3NvdW5kL2NvcmUvcnRjdGltZXIuYwppbmRleCA5ZjdiMzJlLi43Y2Q1ZThmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3J0Y3RpbWVyLmMKKysrIGIvc291bmQvY29yZS9ydGN0aW1lci5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC90aW1lci5oPgogCkBAIC0xMjksNyArMTMwLDcgQEAKIAlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcjsKIAogCWlmIChydGN0aW1lcl9mcmVxIDwgMiB8fCBydGN0aW1lcl9mcmVxID4gODE5MiB8fAotCSAgICAocnRjdGltZXJfZnJlcSAmIChydGN0aW1lcl9mcmVxIC0gMSkpICE9IDApIHsKKwkgICAgIWlzX3Bvd2VyX29mXzIocnRjdGltZXJfZnJlcSkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAicnRjdGltZXI6IGludmFsaWQgZnJlcXVlbmN5ICVkXG4iLAogCQkJICAgcnRjdGltZXJfZnJlcSk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3MuYyBiL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzLmMKaW5kZXggMmViOTg3My4uYmMwOTkyMyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3MuYworKysgYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zcy5jCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jIGIvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jCmluZGV4IDY5NGVmZTguLmIzMWI1MjggMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfY2xpZW50bWdyLmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvbWlub3JzLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3RpbWVyLmMgYi9zb3VuZC9jb3JlL3RpbWVyLmMKaW5kZXggMTYwZTQwZS4uNjc1MjBiMyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvdGltZXIuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwppbmRleCAyZGUxODFhLi4xZDU2M2U1IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYworKysgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwpAQCAtNDIsNiArNDIsNyBAQAogI2VuZGlmCiBzdGF0aWMgbG9uZyBwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogTVBVLTQwMSBwb3J0IG51bWJlciAqLwogc3RhdGljIGludCBpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CS8qIE1QVS00MDEgSVJRICovCitzdGF0aWMgaW50IHVhcnRfZW50ZXJbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAxfTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBNUFUtNDAxIGRldmljZS4iKTsKQEAgLTU3LDYgKzU4LDggQEAKIE1PRFVMRV9QQVJNX0RFU0MocG9ydCwgIlBvcnQgIyBmb3IgTVBVLTQwMSBkZXZpY2UuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEgIyBmb3IgTVBVLTQwMSBkZXZpY2UuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkodWFydF9lbnRlciwgYm9vbCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHVhcnRfZW50ZXIsICJJc3N1ZSBVQVJUX0VOVEVSIGNvbW1hbmQgYXQgb3Blbi4iKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbU05EUlZfQ0FSRFNdOwogc3RhdGljIGludCBwbnBfcmVnaXN0ZXJlZDsKQEAgLTgwLDEwICs4MywxMSBAQAogCQlzdHJjYXQoY2FyZC0+bG9uZ25hbWUsICJwb2xsZWQiKTsKIAl9CiAKLQlpZiAoKGVyciA9IHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwKLQkJCQkgICAgICAgTVBVNDAxX0hXX01QVTQwMSwKLQkJCQkgICAgICAgcG9ydFtkZXZdLCAwLAotCQkJCSAgICAgICBpcnFbZGV2XSwgaXJxW2Rldl0gPj0gMCA/IElSUUZfRElTQUJMRUQgOiAwLCBOVUxMKSkgPCAwKSB7CisJZXJyID0gc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfTVBVNDAxLCBwb3J0W2Rldl0sCisJCQkJICB1YXJ0X2VudGVyW2Rldl0gPyAwIDogTVBVNDAxX0lORk9fVUFSVF9PTkxZLAorCQkJCSAgaXJxW2Rldl0sIGlycVtkZXZdID49IDAgPyBJUlFGX0RJU0FCTEVEIDogMCwKKwkJCQkgIE5VTEwpOworCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTVBVNDAxIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgcG9ydFtkZXZdKTsKIAkJZ290byBfZXJyOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDFfdWFydC5jCmluZGV4IDNkYWE5ZmEuLjg1YWVkYzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMKKysrIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxX3VhcnQuYwpAQCAtMjY2LDYgKzI2NiwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNuZF9tcHU0MDFfZG9fcmVzZXQoc3RydWN0IHNuZF9tcHU0MDEgKm1wdSkKK3sKKwlpZiAoc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9SRVNFVCwgMSkpCisJCXJldHVybiAtRUlPOworCWlmICghKG1wdS0+aW5mb19mbGFncyAmIE1QVTQwMV9JTkZPX1VBUlRfT05MWSkgJiYKKwkgICAgc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9FTlRFUl9VQVJULCAxKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBpbnB1dC9vdXRwdXQgb3Blbi9jbG9zZSAtIHByb3RlY3RlZCBieSBvcGVuX211dGV4IGluIHJhd21pZGkuYwogICovCkBAIC0yNzgsOSArMjg4LDcgQEAKIAlpZiAobXB1LT5vcGVuX2lucHV0ICYmIChlcnIgPSBtcHUtPm9wZW5faW5wdXQobXB1KSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCWlmICghIHRlc3RfYml0KE1QVTQwMV9NT0RFX0JJVF9PVVRQVVQsICZtcHUtPm1vZGUpKSB7Ci0JCWlmIChzbmRfbXB1NDAxX3VhcnRfY21kKG1wdSwgTVBVNDAxX1JFU0VULCAxKSkKLQkJCWdvdG8gZXJyb3Jfb3V0OwotCQlpZiAoc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9FTlRFUl9VQVJULCAxKSkKKwkJaWYgKHNuZF9tcHU0MDFfZG9fcmVzZXQobXB1KSA8IDApCiAJCQlnb3RvIGVycm9yX291dDsKIAl9CiAJbXB1LT5zdWJzdHJlYW1faW5wdXQgPSBzdWJzdHJlYW07CkBAIC0zMDIsOSArMzEwLDcgQEAKIAlpZiAobXB1LT5vcGVuX291dHB1dCAmJiAoZXJyID0gbXB1LT5vcGVuX291dHB1dChtcHUpKSA8IDApCiAJCXJldHVybiBlcnI7CiAJaWYgKCEgdGVzdF9iaXQoTVBVNDAxX01PREVfQklUX0lOUFVULCAmbXB1LT5tb2RlKSkgewotCQlpZiAoc25kX21wdTQwMV91YXJ0X2NtZChtcHUsIE1QVTQwMV9SRVNFVCwgMSkpCi0JCQlnb3RvIGVycm9yX291dDsKLQkJaWYgKHNuZF9tcHU0MDFfdWFydF9jbWQobXB1LCBNUFU0MDFfRU5URVJfVUFSVCwgMSkpCisJCWlmIChzbmRfbXB1NDAxX2RvX3Jlc2V0KG1wdSkgPCAwKQogCQkJZ290byBlcnJvcl9vdXQ7CiAJfQogCW1wdS0+c3Vic3RyZWFtX291dHB1dCA9IHN1YnN0cmVhbTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXRzNjQuYyBiL3NvdW5kL2RyaXZlcnMvbXRzNjQuYwppbmRleCA2YzlmNGM5Li5lYmIxYmRhIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL210czY0LmMKKysrIGIvc291bmQvZHJpdmVycy9tdHM2NC5jCkBAIC04OTIsMTMgKzg5MiwxMyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKIAogCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhQTEFURk9STV9EUklWRVIsIGRldmljZV9jb3VudCk7Ci0JaWYgKCFkZXZpY2UpIAorCWlmICghZGV2aWNlKQogCQlyZXR1cm47CiAKIAkvKiBUZW1wb3JhcnkgYXNzaWdubWVudCB0byBmb3J3YXJkIHRoZSBwYXJwb3J0ICovCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2aWNlLCBwKTsKIAotCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoZGV2aWNlKSA8IDApIHsKKwlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZChkZXZpY2UpIDwgMCkgewogCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGRldmljZSk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3BvcnRtYW4yeDQuYyBiL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCmluZGV4IGIyZDBiYTQuLjQ5N2NhZmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCkBAIC02NzYsMTMgKzY3NiwxMyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKIAogCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhQTEFURk9STV9EUklWRVIsIGRldmljZV9jb3VudCk7Ci0JaWYgKCFkZXZpY2UpIAorCWlmICghZGV2aWNlKQogCQlyZXR1cm47CiAKIAkvKiBUZW1wb3JhcnkgYXNzaWdubWVudCB0byBmb3J3YXJkIHRoZSBwYXJwb3J0ICovCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2aWNlLCBwKTsKIAotCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoZGV2aWNlKSA8IDApIHsKKwlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZChkZXZpY2UpIDwgMCkgewogCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGRldmljZSk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMKaW5kZXggZTE5MjBhZi4uOWE4MTU0YyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYwpAQCAtMzAsNiArMzAsMjAgQEAKIAogI2lmZGVmIFNORF9WWF9GV19MT0FERVIKIAorTU9EVUxFX0ZJUk1XQVJFKCJ2eC9ieF8xX3Z4cC5iNTYiKTsKK01PRFVMRV9GSVJNV0FSRSgidngvYnhfMV92cDQuYjU2Iik7CitNT0RVTEVfRklSTVdBUkUoInZ4L3gxXzFfdngyLnhseCIpOworTU9EVUxFX0ZJUk1XQVJFKCJ2eC94MV8yX3YyMi54bHgiKTsKK01PRFVMRV9GSVJNV0FSRSgidngveDFfMV92eHAueGx4Iik7CitNT0RVTEVfRklSTVdBUkUoInZ4L3gxXzFfdnA0LnhseCIpOworTU9EVUxFX0ZJUk1XQVJFKCJ2eC9iZDU2MDAyLmJvb3QiKTsKK01PRFVMRV9GSVJNV0FSRSgidngvYmQ1NjN2Mi5ib290Iik7CitNT0RVTEVfRklSTVdBUkUoInZ4L2JkNTYzczMuYm9vdCIpOworTU9EVUxFX0ZJUk1XQVJFKCJ2eC9sXzFfdngyLmQ1NiIpOworTU9EVUxFX0ZJUk1XQVJFKCJ2eC9sXzFfdjIyLmQ1NiIpOworTU9EVUxFX0ZJUk1XQVJFKCJ2eC9sXzFfdnhwLmQ1NiIpOworTU9EVUxFX0ZJUk1XQVJFKCJ2eC9sXzFfdnA0LmQ1NiIpOworCiBpbnQgc25kX3Z4X3NldHVwX2Zpcm13YXJlKHN0cnVjdCB2eF9jb3JlICpjaGlwKQogewogCXN0YXRpYyBjaGFyICpmd19maWxlc1tWWF9UWVBFX05VTVNdWzRdID0gewpkaWZmIC0tZ2l0IGEvc291bmQvaTJjL290aGVyL2FrNDExNC5jIGIvc291bmQvaTJjL290aGVyL2FrNDExNC5jCmluZGV4IGFkYmZkNTguLjFlZmI5NzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2kyYy9vdGhlci9hazQxMTQuYworKysgYi9zb3VuZC9pMmMvb3RoZXIvYWs0MTE0LmMKQEAgLTM2LDYgKzM2LDcgQEAKICNkZWZpbmUgQUs0MTE0X0FERFIJCQkweDAwIC8qIGZpeGVkIGFkZHJlc3MgKi8KIAogc3RhdGljIHZvaWQgYWs0MTE0X3N0YXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgdm9pZCBhazQxMTRfaW5pdF9yZWdzKHN0cnVjdCBhazQxMTQgKmNoaXApOwogCiBzdGF0aWMgdm9pZCByZWdfd3JpdGUoc3RydWN0IGFrNDExNCAqYWs0MTE0LCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWwpCiB7CkBAIC0xMDUsNyArMTA2LDcgQEAKIAlmb3IgKHJlZyA9IDA7IHJlZyA8IDU7IHJlZysrKQogCQljaGlwLT50eGNzYltyZWddID0gdHhjc2JbcmVnXTsKIAotCXNuZF9hazQxMTRfcmVpbml0KGNoaXApOworCWFrNDExNF9pbml0X3JlZ3MoY2hpcCk7CiAKIAljaGlwLT5yY3MwID0gcmVnX3JlYWQoY2hpcCwgQUs0MTE0X1JFR19SQ1MwKSAmIH4oQUs0MTE0X1FJTlQgfCBBSzQxMTRfQ0lOVCk7CiAJY2hpcC0+cmNzMSA9IHJlZ19yZWFkKGNoaXAsIEFLNDExNF9SRUdfUkNTMSk7CkBAIC0xMzEsMTMgKzEzMiwxMCBAQAogCQkJICAoY2hpcC0+dHhjc2JbcmVnLUFLNDExNF9SRUdfVFhDU0IwXSAmIH5tYXNrKSB8IHZhbCk7CiB9CiAKLXZvaWQgc25kX2FrNDExNF9yZWluaXQoc3RydWN0IGFrNDExNCAqY2hpcCkKK3N0YXRpYyB2b2lkIGFrNDExNF9pbml0X3JlZ3Moc3RydWN0IGFrNDExNCAqY2hpcCkKIHsKIAl1bnNpZ25lZCBjaGFyIG9sZCA9IGNoaXAtPnJlZ21hcFtBSzQxMTRfUkVHX1BXUkROXSwgcmVnOwogCi0JY2hpcC0+aW5pdCA9IDE7Ci0JbWIoKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCS8qIGJyaW5nIHRoZSBjaGlwIHRvIHJlc2V0IHN0YXRlIGFuZCBwb3dlcmRvd24gc3RhdGUgKi8KIAlyZWdfd3JpdGUoY2hpcCwgQUs0MTE0X1JFR19QV1JETiwgb2xkICYgfihBSzQxMTRfUlNUfEFLNDExNF9QV04pKTsKIAl1ZGVsYXkoMjAwKTsKQEAgLTE1MCw5ICsxNDgsMTggQEAKIAkJcmVnX3dyaXRlKGNoaXAsIHJlZyArIEFLNDExNF9SRUdfVFhDU0IwLCBjaGlwLT50eGNzYltyZWddKTsKIAkvKiByZWxlYXNlIHBvd2VyZG93biwgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBub3cgKi8KIAlyZWdfd3JpdGUoY2hpcCwgQUs0MTE0X1JFR19QV1JETiwgb2xkIHwgQUs0MTE0X1JTVCB8IEFLNDExNF9QV04pOworfQorCit2b2lkIHNuZF9hazQxMTRfcmVpbml0KHN0cnVjdCBhazQxMTQgKmNoaXApCit7CisJY2hpcC0+aW5pdCA9IDE7CisJbWIoKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWFrNDExNF9pbml0X3JlZ3MoY2hpcCk7CiAJLyogYnJpbmcgdXAgc3RhdGlzdGljcyAvIGV2ZW50IHF1ZWluZyAqLwogCWNoaXAtPmluaXQgPSAwOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2hpcC0+d29yaywgSFogLyAxMCk7CisJaWYgKGNoaXAtPmtjdGxzWzBdKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNoaXAtPndvcmssIEhaIC8gMTApOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGV4dGVybmFsX3JhdGUodW5zaWduZWQgY2hhciByY3MxKQpAQCAtNDI4LDcgKzQzNSw3IEBACiAJLmFjY2VzcyA9CVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLAogCS5pbmZvID0JCXNuZF9hazQxMTRfaW5fYml0X2luZm8sCiAJLmdldCA9CQlzbmRfYWs0MTE0X2luX2JpdF9nZXQsCi0JLnByaXZhdGVfdmFsdWUgPSAoNjw8OCkgfCBBSzQxMTRfUkVHX1JDUzEsCisJLnByaXZhdGVfdmFsdWUgPSAoNjw8OCkgfCBBSzQxMTRfUkVHX1JDUzAsCiB9LAogewogCS5pZmFjZSA9CVNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKQEAgLTQzNiw3ICs0NDMsMTUgQEAKIAkuYWNjZXNzID0JU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsCiAJLmluZm8gPQkJc25kX2FrNDExNF9pbl9iaXRfaW5mbywKIAkuZ2V0ID0JCXNuZF9hazQxMTRfaW5fYml0X2dldCwKLQkucHJpdmF0ZV92YWx1ZSA9ICgzPDw4KSB8IEFLNDExNF9SRUdfUkNTMSwKKwkucHJpdmF0ZV92YWx1ZSA9ICgzPDw4KSB8IEFLNDExNF9SRUdfUkNTMCwKK30sCit7CisJLmlmYWNlID0JU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCS5uYW1lID0JCSJJRUM5NTggUFBMIExvY2sgU3RhdHVzIiwKKwkuYWNjZXNzID0JU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsCisJLmluZm8gPQkJc25kX2FrNDExNF9pbl9iaXRfaW5mbywKKwkuZ2V0ID0JCXNuZF9hazQxMTRfaW5fYml0X2dldCwKKwkucHJpdmF0ZV92YWx1ZSA9ICgxPDwzMSkgfCAoNDw8OCkgfCBBSzQxMTRfUkVHX1JDUzAsCiB9CiB9OwogCkBAIC00NTUsNyArNDcwLDcgQEAKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MSgmc25kX2FrNDExNF9pZWM5NThfY29udHJvbHNbaWR4XSwgYWs0MTE0KTsKIAkJaWYgKGtjdGwgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoIXN0cnN0cihrY3RsLT5pZC5uYW1lLCAiUGxheWJhY2siKSkgeworCQlpZiAoc3Ryc3RyKGtjdGwtPmlkLm5hbWUsICJQbGF5YmFjayIpKSB7CiAJCQlpZiAocGx5X3N1YnN0cmVhbSA9PSBOVUxMKSB7CiAJCQkJc25kX2N0bF9mcmVlX29uZShrY3RsKTsKIAkJCQlhazQxMTQtPmtjdGxzW2lkeF0gPSBOVUxMOwpAQCAtNDcyLDkgKzQ4Nyw1OCBAQAogCQkJcmV0dXJuIGVycjsKIAkJYWs0MTE0LT5rY3Rsc1tpZHhdID0ga2N0bDsKIAl9CisJLyogdHJpZ2dlciB3b3JrcSAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYWs0MTE0LT53b3JrLCBIWiAvIDEwKTsKIAlyZXR1cm4gMDsKIH0KIAorLyogbm90aWZ5IGtjb250cm9scyBpZiBhbnkgcGFyYW1ldGVycyBhcmUgY2hhbmdlZCAqLworc3RhdGljIHZvaWQgYWs0MTE0X25vdGlmeShzdHJ1Y3QgYWs0MTE0ICphazQxMTQsCisJCQkgIHVuc2lnbmVkIGNoYXIgcmNzMCwgdW5zaWduZWQgY2hhciByY3MxLAorCQkJICB1bnNpZ25lZCBjaGFyIGMwLCB1bnNpZ25lZCBjaGFyIGMxKQoreworCWlmICghYWs0MTE0LT5rY3Rsc1swXSkKKwkJcmV0dXJuOworCisJaWYgKHJjczAgJiBBSzQxMTRfUEFSKQorCQlzbmRfY3RsX25vdGlmeShhazQxMTQtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJICAgICAgICZhazQxMTQtPmtjdGxzWzBdLT5pZCk7CisJaWYgKHJjczAgJiBBSzQxMTRfVikKKwkJc25kX2N0bF9ub3RpZnkoYWs0MTE0LT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwKKwkJCSAgICAgICAmYWs0MTE0LT5rY3Rsc1sxXS0+aWQpOworCWlmIChyY3MxICYgQUs0MTE0X0NDUkMpCisJCXNuZF9jdGxfbm90aWZ5KGFrNDExNC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsCisJCQkgICAgICAgJmFrNDExNC0+a2N0bHNbMl0tPmlkKTsKKwlpZiAocmNzMSAmIEFLNDExNF9RQ1JDKQorCQlzbmRfY3RsX25vdGlmeShhazQxMTQtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJICAgICAgICZhazQxMTQtPmtjdGxzWzNdLT5pZCk7CisKKwkvKiByYXRlIGNoYW5nZSAqLworCWlmIChjMSAmIDB4ZjApCisJCXNuZF9jdGxfbm90aWZ5KGFrNDExNC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsCisJCQkgICAgICAgJmFrNDExNC0+a2N0bHNbNF0tPmlkKTsKKworCWlmICgoYzAgJiBBSzQxMTRfUEVNKSB8IChjMCAmIEFLNDExNF9DSU5UKSkKKwkJc25kX2N0bF9ub3RpZnkoYWs0MTE0LT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwKKwkJCSAgICAgICAmYWs0MTE0LT5rY3Rsc1s5XS0+aWQpOworCWlmIChjMCAmIEFLNDExNF9RSU5UKQorCQlzbmRfY3RsX25vdGlmeShhazQxMTQtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJICAgICAgICZhazQxMTQtPmtjdGxzWzEwXS0+aWQpOworCisJaWYgKGMwICYgQUs0MTE0X0FVRElPTikKKwkJc25kX2N0bF9ub3RpZnkoYWs0MTE0LT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwKKwkJCSAgICAgICAmYWs0MTE0LT5rY3Rsc1sxMV0tPmlkKTsKKwlpZiAoYzAgJiBBSzQxMTRfQVVUTykKKwkJc25kX2N0bF9ub3RpZnkoYWs0MTE0LT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwKKwkJCSAgICAgICAmYWs0MTE0LT5rY3Rsc1sxMl0tPmlkKTsKKwlpZiAoYzAgJiBBSzQxMTRfRFRTQ0QpCisJCXNuZF9jdGxfbm90aWZ5KGFrNDExNC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsCisJCQkgICAgICAgJmFrNDExNC0+a2N0bHNbMTNdLT5pZCk7CisJaWYgKGMwICYgQUs0MTE0X1VOTENLKQorCQlzbmRfY3RsX25vdGlmeShhazQxMTQtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJICAgICAgICZhazQxMTQtPmtjdGxzWzE0XS0+aWQpOworfQorCiBpbnQgc25kX2FrNDExNF9leHRlcm5hbF9yYXRlKHN0cnVjdCBhazQxMTQgKmFrNDExNCkKIHsKIAl1bnNpZ25lZCBjaGFyIHJjczE7CkBAIC01MTEsMzEgKzU3NSw3IEBACiAJYWs0MTE0LT5yY3MxID0gcmNzMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhazQxMTQtPmxvY2ssIF9mbGFncyk7CiAKLQlpZiAocmNzMCAmIEFLNDExNF9QQVIpCi0JCXNuZF9jdGxfbm90aWZ5KGFrNDExNC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsICZhazQxMTQtPmtjdGxzWzBdLT5pZCk7Ci0JaWYgKHJjczAgJiBBSzQxMTRfVikKLQkJc25kX2N0bF9ub3RpZnkoYWs0MTE0LT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwgJmFrNDExNC0+a2N0bHNbMV0tPmlkKTsKLQlpZiAocmNzMSAmIEFLNDExNF9DQ1JDKQotCQlzbmRfY3RsX25vdGlmeShhazQxMTQtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLCAmYWs0MTE0LT5rY3Rsc1syXS0+aWQpOwotCWlmIChyY3MxICYgQUs0MTE0X1FDUkMpCi0JCXNuZF9jdGxfbm90aWZ5KGFrNDExNC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsICZhazQxMTQtPmtjdGxzWzNdLT5pZCk7Ci0KLQkvKiByYXRlIGNoYW5nZSAqLwotCWlmIChjMSAmIDB4ZjApCi0JCXNuZF9jdGxfbm90aWZ5KGFrNDExNC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsICZhazQxMTQtPmtjdGxzWzRdLT5pZCk7Ci0KLQlpZiAoKGMwICYgQUs0MTE0X1BFTSkgfCAoYzAgJiBBSzQxMTRfQ0lOVCkpCi0JCXNuZF9jdGxfbm90aWZ5KGFrNDExNC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsICZhazQxMTQtPmtjdGxzWzldLT5pZCk7Ci0JaWYgKGMwICYgQUs0MTE0X1FJTlQpCi0JCXNuZF9jdGxfbm90aWZ5KGFrNDExNC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsICZhazQxMTQtPmtjdGxzWzEwXS0+aWQpOwotCi0JaWYgKGMwICYgQUs0MTE0X0FVRElPTikKLQkJc25kX2N0bF9ub3RpZnkoYWs0MTE0LT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwgJmFrNDExNC0+a2N0bHNbMTFdLT5pZCk7Ci0JaWYgKGMwICYgQUs0MTE0X0FVVE8pCi0JCXNuZF9jdGxfbm90aWZ5KGFrNDExNC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsICZhazQxMTQtPmtjdGxzWzEyXS0+aWQpOwotCWlmIChjMCAmIEFLNDExNF9EVFNDRCkKLQkJc25kX2N0bF9ub3RpZnkoYWs0MTE0LT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwgJmFrNDExNC0+a2N0bHNbMTNdLT5pZCk7Ci0KKwlhazQxMTRfbm90aWZ5KGFrNDExNCwgcmNzMCwgcmNzMSwgYzAsIGMxKTsKIAlpZiAoYWs0MTE0LT5jaGFuZ2VfY2FsbGJhY2sgJiYgKGMwIHwgYzEpICE9IDApCiAJCWFrNDExNC0+Y2hhbmdlX2NhbGxiYWNrKGFrNDExNCwgYzAsIGMxKTsKIApAQCAtNTU4LDkgKzU5OCw5IEBACiB7CiAJc3RydWN0IGFrNDExNCAqY2hpcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWs0MTE0LCB3b3JrLndvcmspOwogCi0JaWYgKGNoaXAtPmluaXQpCi0JCXJldHVybjsKLQlzbmRfYWs0MTE0X2NoZWNrX3JhdGVfYW5kX2Vycm9ycyhjaGlwLCAwKTsKKwlpZiAoIWNoaXAtPmluaXQpCisJCXNuZF9hazQxMTRfY2hlY2tfcmF0ZV9hbmRfZXJyb3JzKGNoaXAsIDApOworCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaGlwLT53b3JrLCBIWiAvIDEwKTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL0tjb25maWcgYi9zb3VuZC9pc2EvS2NvbmZpZwppbmRleCA0ZTNhOTcyLi5jZjM4MDNjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvS2NvbmZpZworKysgYi9zb3VuZC9pc2EvS2NvbmZpZwpAQCAtMzU4LDEyICszNTgsMjEgQEAKIGNvbmZpZyBTTkRfU0IxNl9DU1AKIAlib29sICJTb3VuZCBCbGFzdGVyIDE2L0FXRSBDU1Agc3VwcG9ydCIKIAlkZXBlbmRzIG9uIChTTkRfU0IxNiB8fCBTTkRfU0JBV0UpICYmIChCUk9LRU4gfHwgIVBQQykKLQlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IEZXX0xPQURFUiBpZiAhU05EX1NCMTZfQ1NQX0ZJUk1XQVJFX0lOX0tFUk5FTAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQ1NQIGNvcmUuICBUaGlzIHNwZWNpYWwKIAkgIGNvcHJvY2Vzc29yIGNhbiBkbyB2YXJpYWJsZSB0YXNrcyBsaWtlIHZhcmlvdXMgY29tcHJlc3Npb24gYW5kCiAJICBkZWNvbXByZXNzaW9uIGFsZ29yaXRobXMuCiAKK2NvbmZpZyBTTkRfU0IxNl9DU1BfRklSTVdBUkVfSU5fS0VSTkVMCisJYm9vbCAiSW4ta2VybmVsIGZpcm13YXJlIGZvciBTQjE2IENTUCIKKwlkZXBlbmRzIG9uIFNORF9TQjE2X0NTUAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSB0aGUgc3RhdGljIGZpcm13YXJlIGJ1aWx0IGluIHRoZSBrZXJuZWwKKwkgIGZvciB0aGUgU0IxNiBDU1AgY29udHJvbGxlci4gIElmIHlvdSBjaG9vc2UgTiBoZXJlLCB5b3UgbmVlZAorCSAgdG8gaW5zdGFsbCB0aGUgZmlybXdhcmUgZmlsZXMgZnJvbSB0aGUgYWxzYS1maXJtd2FyZSBwYWNrYWdlLgorCiBjb25maWcgU05EX1NHQUxBWFkKIAl0cmlzdGF0ZSAiQXp0ZWNoIFNvdW5kIEdhbGF4eSIKIAlkZXBlbmRzIG9uIFNORApAQCAtMzkxLDcgKzQwMCw3IEBACiBjb25maWcgU05EX1dBVkVGUk9OVAogCXRyaXN0YXRlICJUdXJ0bGUgQmVhY2ggTWF1aSxUcm9wZXosVHJvcGV6KyAoV2F2ZWZyb250KSIKIAlkZXBlbmRzIG9uIFNORAotCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgRldfTE9BREVSIGlmICFTTkRfV0FWRUZST05UX0ZJUk1XQVJFX0lOX0tFUk5FTAogCXNlbGVjdCBTTkRfT1BMM19MSUIKIAlzZWxlY3QgU05EX01QVTQwMV9VQVJUCiAJc2VsZWN0IFNORF9DUzQyMzFfTElCCkBAIC00MDIsNCArNDExLDEzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtd2F2ZWZyb250LgogCitjb25maWcgU05EX1dBVkVGUk9OVF9GSVJNV0FSRV9JTl9LRVJORUwKKwlib29sICJJbi1rZXJuZWwgZmlybXdhcmUgZm9yIFdhdmVmcm9udCIKKwlkZXBlbmRzIG9uIFNORF9XQVZFRlJPTlQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgdGhlIHN0YXRpYyBmaXJtd2FyZSBidWlsdCBpbiB0aGUga2VybmVsCisJICBmb3IgdGhlIFdhdmVmcm9udCBkcml2ZXIuICBJZiB5b3UgY2hvb3NlIE4gaGVyZSwgeW91IG5lZWQgdG8KKwkgIGluc3RhbGwgdGhlIGZpcm13YXJlIGZpbGVzIGZyb20gdGhlIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jCmluZGV4IDU5MDM0NTAuLmZjODhhMzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYworKysgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMKQEAgLTEyOSw4ICsxMjksOCBAQAogCX0KIAlhY2FyZC0+ZGV2bXB1ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgaWQtPmRldnNbMV0uaWQsIE5VTEwpOwogCWlmIChhY2FyZC0+ZGV2bXB1ID09IE5VTEwpIHsKLQkJa2ZyZWUoY2ZnKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJbXB1X3BvcnRbZGV2XSA9IC0xOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIk1QVTQwMSBkZXZpY2UgYnVzeSwgc2tpcHBpbmcuXG4iKTsKIAl9CiAKIAlwZGV2ID0gYWNhcmQtPmRldjsKQEAgLTE2Miw2ICsxNjIsMTAgQEAKIAlkbWEyW2Rldl0gPSBwbnBfZG1hKHBkZXYsIDEpOwogCWlycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKIAorCWlmIChhY2FyZC0+ZGV2bXB1ID09IE5VTEwpIHsKKwkJa2ZyZWUoY2ZnKTsKKwkJcmV0dXJuIDA7CisJfQogCXBkZXYgPSBhY2FyZC0+ZGV2bXB1OwogCXBucF9pbml0X3Jlc291cmNlX3RhYmxlKGNmZyk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCmluZGV4IDc0ZTUwMWQuLmQwOWE3ZmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2EuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CkBAIC0zMiw4ICszMiwxMSBAQAogI2luY2x1ZGUgPHNvdW5kL2FkMTg0OC5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIAorI2RlZmluZSBDUkRfTkFNRSAiR2VuZXJpYyBBRDE4NDgvQUQxODQ3L0NTNDI0OCIKKyNkZWZpbmUgREVWX05BTUUgImFkMTg0OCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKENSRF9OQU1FKTsKIE1PRFVMRV9BVVRIT1IoIlR1Z3J1bCBHYWxhdGFsaSA8Z2FsYXRhbHRAc3R1eS5lZHU+LCBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHN1c2UuY3o+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkFEMTg0OC9BRDE4NDcvQ1M0MjQ4Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tBbmFsb2cgRGV2aWNlcyxBRDE4NDh9LCIKIAkgICAgICAgICJ7QW5hbG9nIERldmljZXMsQUQxODQ3fSwiCkBAIC00OCw5NSArNTEsOTggQEAKIHN0YXRpYyBpbnQgdGhpbmtwYWRbU05EUlZfQ0FSRFNdOwkJCS8qIFRoaW5rcGFkIHNwZWNpYWwgY2FzZSAqLwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIEFEMTg0OCBzb3VuZGNhcmQuIik7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yICIgQ1JEX05BTUUgIiBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIEFEMTg0OCBzb3VuZGNhcmQuIik7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciAiIENSRF9OQU1FICIgc291bmRjYXJkLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBBRDE4NDggc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBDUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShwb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocG9ydCwgIlBvcnQgIyBmb3IgQUQxODQ4IGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydCwgIlBvcnQgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSAjIGZvciBBRDE4NDggZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShkbWExLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkbWExLCAiRE1BMSAjIGZvciBBRDE4NDggZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhkbWExLCAiRE1BMSAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHRoaW5rcGFkLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModGhpbmtwYWQsICJFbmFibGUgb25seSBmb3IgdGhlIG9uYm9hcmQgQ1M0MjQ4IG9mIElCTSBUaGlua3BhZCAzNjAvNzUwLzc1NSBzZXJpZXMuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW1NORFJWX0NBUkRTXTsKLQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWQxODQ4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWQxODQ4X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pCiB7Ci0JaW50IGRldiA9IHBkZXYtPmlkOworCWlmICghZW5hYmxlW25dKQorCQlyZXR1cm4gMDsKKworCWlmIChwb3J0W25dID09IFNORFJWX0FVVE9fUE9SVCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlczogcGxlYXNlIHNwZWNpZnkgcG9ydFxuIiwgZGV2LT5idXNfaWQpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGlycVtuXSA9PSBTTkRSVl9BVVRPX0lSUSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlczogcGxlYXNlIHNwZWNpZnkgaXJxXG4iLCBkZXYtPmJ1c19pZCk7CisJCXJldHVybiAwOwkKKwl9CisJaWYgKGRtYTFbbl0gPT0gU05EUlZfQVVUT19ETUEpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSBzcGVjaWZ5IGRtYTFcbiIsIGRldi0+YnVzX2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWQxODQ4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pCit7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfYWQxODQ4ICpjaGlwOwogCXN0cnVjdCBzbmRfcGNtICpwY207Ci0JaW50IGVycjsKKwlpbnQgZXJyb3I7CiAKLQlpZiAocG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhZDE4NDg6IHNwZWNpZnkgcG9ydFxuIik7CisJY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKKwlpZiAoIWNhcmQpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoaXJxW2Rldl0gPT0gU05EUlZfQVVUT19JUlEpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWQxODQ4OiBzcGVjaWZ5IGlycVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoZG1hMVtkZXZdID09IFNORFJWX0FVVE9fRE1BKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgImFkMTg0ODogc3BlY2lmeSBkbWExXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfYWQxODQ4X2NyZWF0ZShjYXJkLCBwb3J0W25dLCBpcnFbbl0sIGRtYTFbbl0sCisJCQl0aGlua3BhZFtuXSA/IEFEMTg0OF9IV19USElOS1BBRCA6IEFEMTg0OF9IV19ERVRFQ1QsICZjaGlwKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIG91dDsKIAotCWlmICgoZXJyID0gc25kX2FkMTg0OF9jcmVhdGUoY2FyZCwgcG9ydFtkZXZdLAotCQkJCSAgICAgaXJxW2Rldl0sCi0JCQkJICAgICBkbWExW2Rldl0sCi0JCQkJICAgICB0aGlua3BhZFtkZXZdID8gQUQxODQ4X0hXX1RISU5LUEFEIDogQUQxODQ4X0hXX0RFVEVDVCwKLQkJCQkgICAgICZjaGlwKSkgPCAwKQotCQlnb3RvIF9lcnI7CiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAotCWlmICgoZXJyID0gc25kX2FkMTg0OF9wY20oY2hpcCwgMCwgJnBjbSkpIDwgMCkKLQkJZ290byBfZXJyOworCWVycm9yID0gc25kX2FkMTg0OF9wY20oY2hpcCwgMCwgJnBjbSk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXQ7CiAKLQlpZiAoKGVyciA9IHNuZF9hZDE4NDhfbWl4ZXIoY2hpcCkpIDwgMCkKLQkJZ290byBfZXJyOworCWVycm9yID0gc25kX2FkMTg0OF9taXhlcihjaGlwKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIG91dDsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBRDE4NDgiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwY20tPm5hbWUpOwogCiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCIsCi0JCXBjbS0+bmFtZSwgY2hpcC0+cG9ydCwgaXJxW2Rldl0sIGRtYTFbZGV2XSk7Ci0KLQlpZiAodGhpbmtwYWRbZGV2XSkKKwkJcGNtLT5uYW1lLCBjaGlwLT5wb3J0LCBpcnFbbl0sIGRtYTFbbl0pOworCWlmICh0aGlua3BhZFtuXSkKIAkJc3RyY2F0KGNhcmQtPmxvbmduYW1lLCAiIFtUaGlua3BhZF0iKTsKIAotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBkZXYtPmRldik7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXYpOwogCi0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKQotCQlnb3RvIF9lcnI7CisJZXJyb3IgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIG91dDsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNhcmQpOwogCXJldHVybiAwOwogCi0gX2VycjoKLQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCXJldHVybiBlcnI7CitvdXQ6CXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfYWQxODQ4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfYWQxODQ4X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKQogewotCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzbmRfYWQxODQ4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzbmRfYWQxODQ4X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfYWQxODQ4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwpAQCAtMTQ0LDkgKzE1MCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2FkMTg0OF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgc25kX2FkMTg0OF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbikKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX2FkMTg0OCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWNoaXAtPnJlc3VtZShjaGlwKTsKQEAgLTE1NSw5ICsxNjEsOCBAQAogfQogI2VuZGlmCiAKLSNkZWZpbmUgU05EX0FEMTg0OF9EUklWRVIJInNuZF9hZDE4NDgiCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9hZDE4NDhfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9hZDE4NDhfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfYWQxODQ4X21hdGNoLAogCS5wcm9iZQkJPSBzbmRfYWQxODQ4X3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2FkMTg0OF9yZW1vdmUpLAogI2lmZGVmIENPTkZJR19QTQpAQCAtMTY1LDU3ICsxNzAsMTkgQEAKIAkucmVzdW1lCQk9IHNuZF9hZDE4NDhfcmVzdW1lLAogI2VuZGlmCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gU05EX0FEMTg0OF9EUklWRVIKLQl9LAorCQkubmFtZQk9IERFVl9OQU1FCisJfQogfTsKIAotc3RhdGljIHZvaWQgX19pbml0X29yX21vZHVsZSBzbmRfYWQxODQ4X3VucmVnaXN0ZXJfYWxsKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZpY2VzKTsgKytpKQotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2VzW2ldKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX2FkMTg0OF9kcml2ZXIpOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfYWQxODQ4X2luaXQodm9pZCkKIHsKLQlpbnQgaSwgY2FyZHMsIGVycjsKLQotCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX2FkMTg0OF9kcml2ZXIpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JY2FyZHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7Ci0JCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKLQkJaWYgKCEgZW5hYmxlW2ldKQotCQkJY29udGludWU7Ci0JCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX0FEMTg0OF9EUklWRVIsCi0JCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQkJY29udGludWU7Ci0JCX0KLQkJZGV2aWNlc1tpXSA9IGRldmljZTsKLQkJY2FyZHMrKzsKLQl9Ci0JaWYgKCFjYXJkcykgewotI2lmZGVmIE1PRFVMRQotCQlwcmludGsoS0VSTl9FUlIgIkFEMTg0OCBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKLSNlbmRpZgotCQlzbmRfYWQxODQ4X3VucmVnaXN0ZXJfYWxsKCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc25kX2FkMTg0OF9kcml2ZXIsIFNORFJWX0NBUkRTKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9hZDE4NDhfZXhpdCh2b2lkKQogewotCXNuZF9hZDE4NDhfdW5yZWdpc3Rlcl9hbGwoKTsKKwlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9hZDE4NDhfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQoYWxzYV9jYXJkX2FkMTg0OF9pbml0KQotbW9kdWxlX2V4aXQoYWxzYV9jYXJkX2FkMTg0OF9leGl0KQorbW9kdWxlX2luaXQoYWxzYV9jYXJkX2FkMTg0OF9pbml0KTsKK21vZHVsZV9leGl0KGFsc2FfY2FyZF9hZDE4NDhfZXhpdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWRsaWIuYyBiL3NvdW5kL2lzYS9hZGxpYi5jCmluZGV4IDExMjQzNDQuLmQ2ODcyMDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZGxpYi5jCisrKyBiL3NvdW5kL2lzYS9hZGxpYi5jCkBAIC01LDEzICs1LDEzIEBACiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CiAKICNkZWZpbmUgQ1JEX05BTUUgIkFkTGliIEZNIgotI2RlZmluZSBEUlZfTkFNRSAic25kX2FkbGliIgorI2RlZmluZSBERVZfTkFNRSAiYWRsaWIiCiAKIE1PRFVMRV9ERVNDUklQVElPTihDUkRfTkFNRSk7CiBNT0RVTEVfQVVUSE9SKCJSZW5lIEhlcm1hbiIpOwpAQCAtMzEsMTMzICszMSw5OSBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHBvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwb3J0LCAiUG9ydCAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tTTkRSVl9DQVJEU107CitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWRsaWJfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbikKK3sKKwlpZiAoIWVuYWJsZVtuXSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocG9ydFtuXSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSBzcGVjaWZ5IHBvcnRcbiIsIGRldi0+YnVzX2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQogCiBzdGF0aWMgdm9pZCBzbmRfYWRsaWJfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCiB7CiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjYXJkLT5wcml2YXRlX2RhdGEpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWRsaWJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgc25kX2FkbGliX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKKwlpbnQgZXJyb3I7CiAKLQlpbnQgZXJyb3IsIGkgPSBkZXZpY2UtPmlkOwotCi0JaWYgKHBvcnRbaV0gPT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogcGxlYXNlIHNwZWNpZnkgcG9ydFxuIik7Ci0JCWVycm9yID0gLUVJTlZBTDsKLQkJZ290byBvdXQwOwotCX0KLQotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbaV0sIGlkW2ldLCBUSElTX01PRFVMRSwgMCk7CisJY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKIAlpZiAoIWNhcmQpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBjb3VsZCBub3QgY3JlYXRlIGNhcmRcbiIpOwotCQllcnJvciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0MDsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBjcmVhdGUgY2FyZFxuIiwgZGV2LT5idXNfaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljYXJkLT5wcml2YXRlX2RhdGEgPSByZXF1ZXN0X3JlZ2lvbihwb3J0W2ldLCA0LCBDUkRfTkFNRSk7CisJY2FyZC0+cHJpdmF0ZV9kYXRhID0gcmVxdWVzdF9yZWdpb24ocG9ydFtuXSwgNCwgQ1JEX05BTUUpOwogCWlmICghY2FyZC0+cHJpdmF0ZV9kYXRhKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY291bGQgbm90IGdyYWIgcG9ydHNcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGdyYWIgcG9ydHNcbiIsIGRldi0+YnVzX2lkKTsKIAkJZXJyb3IgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0MTsKKwkJZ290byBvdXQ7CiAJfQogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9hZGxpYl9mcmVlOwogCi0JZXJyb3IgPSBzbmRfb3BsM19jcmVhdGUoY2FyZCwgcG9ydFtpXSwgcG9ydFtpXSArIDIsIE9QTDNfSFdfQVVUTywgMSwgJm9wbDMpOworCXN0cmNweShjYXJkLT5kcml2ZXIsIERFVl9OQU1FKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBDUkRfTkFNRSk7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgQ1JEX05BTUUgIiBhdCAlI2x4IiwgcG9ydFtuXSk7CisKKwllcnJvciA9IHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBwb3J0W25dLCBwb3J0W25dICsgMiwgT1BMM19IV19BVVRPLCAxLCAmb3BsMyk7CiAJaWYgKGVycm9yIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGNvdWxkIG5vdCBjcmVhdGUgT1BMXG4iKTsKLQkJZ290byBvdXQxOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGNyZWF0ZSBPUExcbiIsIGRldi0+YnVzX2lkKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJZXJyb3IgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMCwgTlVMTCk7CiAJaWYgKGVycm9yIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGNvdWxkIG5vdCBjcmVhdGUgRk1cbiIpOwotCQlnb3RvIG91dDE7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgY3JlYXRlIEZNXG4iLCBkZXYtPmJ1c19pZCk7CisJCWdvdG8gb3V0OwogCX0KIAotCXN0cmNweShjYXJkLT5kcml2ZXIsIERSVl9OQU1FKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBDUkRfTkFNRSk7Ci0Jc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgQ1JEX05BTUUgIiBhdCAlI2x4IiwgcG9ydFtpXSk7Ci0KLQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZkZXZpY2UtPmRldik7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXYpOwogCiAJZXJyb3IgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKIAlpZiAoZXJyb3IgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY291bGQgbm90IHJlZ2lzdGVyIGNhcmRcbiIpOwotCQlnb3RvIG91dDE7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgcmVnaXN0ZXIgY2FyZFxuIiwgZGV2LT5idXNfaWQpOworCQlnb3RvIG91dDsKIAl9CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZpY2UsIGNhcmQpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNhcmQpOwogCXJldHVybiAwOwogCi1vdXQxOglzbmRfY2FyZF9mcmVlKGNhcmQpOwotb3V0MDoJcmV0dXJuIGVycm9yOworb3V0OglzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgc25kX2FkbGliX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfYWRsaWJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pCiB7Ci0Jc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOworCXNuZF9jYXJkX2ZyZWUoZGV2X2dldF9kcnZkYXRhKGRldikpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfYWRsaWJfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9hZGxpYl9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF9hZGxpYl9tYXRjaCwKIAkucHJvYmUJCT0gc25kX2FkbGliX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2FkbGliX3JlbW92ZSksCiAKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBEUlZfTkFNRQorCQkubmFtZQk9IERFVl9OQU1FCiAJfQogfTsKIAogc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX2FkbGliX2luaXQodm9pZCkKIHsKLQlpbnQgaSwgY2FyZHM7Ci0KLQlpZiAocGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfYWRsaWJfZHJpdmVyKSA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBjb3VsZCBub3QgcmVnaXN0ZXIgZHJpdmVyXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JZm9yIChjYXJkcyA9IDAsIGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewotCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7Ci0KLQkJaWYgKCFlbmFibGVbaV0pCi0JCQljb250aW51ZTsKLQotCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKERSVl9OQU1FLCBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlkZXZpY2VzW2ldID0gZGV2aWNlOwotCQljYXJkcysrOwotCX0KLQotCWlmICghY2FyZHMpIHsKLSNpZmRlZiBNT0RVTEUKLQkJcHJpbnRrKEtFUk5fRVJSIENSRF9OQU1FICIgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7Ci0jZW5kaWYKLQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9hZGxpYl9kcml2ZXIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGlzYV9yZWdpc3Rlcl9kcml2ZXIoJnNuZF9hZGxpYl9kcml2ZXIsIFNORFJWX0NBUkRTKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9hZGxpYl9leGl0KHZvaWQpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlc1tpXSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9hZGxpYl9kcml2ZXIpOworCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmc25kX2FkbGliX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGFsc2FfY2FyZF9hZGxpYl9pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jbWk4MzMwLmMgYi9zb3VuZC9pc2EvY21pODMzMC5jCmluZGV4IGMwOWE4MDAuLmY0NzFmOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jbWk4MzMwLmMKKysrIGIvc291bmQvaXNhL2NtaTgzMzAuYwpAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2EuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTEwOCw4ICsxMDgsOCBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHdzc2RtYSwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Mod3NzZG1hLCAiRE1BIGZvciBDTUk4MzMwIFdTUyBkcml2ZXIuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW1NORFJWX0NBUkRTXTsKICNpZmRlZiBDT05GSUdfUE5QCitzdGF0aWMgaW50IGlzYV9yZWdpc3RlcmVkOwogc3RhdGljIGludCBwbnBfcmVnaXN0ZXJlZDsKICNlbmRpZgogCkBAIC01NDcsNzAgKzU0Nyw3OCBAQAogCXJldHVybiBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgc25kX2NtaTgzMzBfbm9ucG5wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY21pODMzMF9pc2FfbWF0Y2goc3RydWN0IGRldmljZSAqcGRldiwKKwkJCQkJICAgdW5zaWduZWQgaW50IGRldikKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0JaW50IGVycjsKLQlpbnQgZGV2ID0gcGRldi0+aWQ7Ci0KKwlpZiAoIWVuYWJsZVtkZXZdIHx8IGlzX2lzYXBucF9zZWxlY3RlZChkZXYpKQorCQlyZXR1cm4gMDsKIAlpZiAod3NzcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAic3BlY2lmeSB3c3Nwb3J0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOwogCX0KIAlpZiAoc2Jwb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJzcGVjaWZ5IHNicG9ydFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKIAl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jbWk4MzMwX2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LAorCQkJCQkgICB1bnNpZ25lZCBpbnQgZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOwogCiAJY2FyZCA9IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGRldik7CiAJaWYgKCEgY2FyZCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0Jc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGRldi0+ZGV2KTsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOwogCWlmICgoZXJyID0gc25kX2NtaTgzMzBfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CiAJfQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCWRldl9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgc25kX2NtaTgzMzBfbm9ucG5wX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfY21pODMzMF9pc2FfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBkZXYpCiB7Ci0Jc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOworCXNuZF9jYXJkX2ZyZWUoZGV2X2dldF9kcnZkYXRhKGRldnB0cikpOworCWRldl9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOwogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNuZF9jbWk4MzMwX25vbnBucF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzbmRfY21pODMzMF9pc2Ffc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuLAorCQkJCSAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gc25kX2NtaTgzMzBfc3VzcGVuZChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlyZXR1cm4gc25kX2NtaTgzMzBfc3VzcGVuZChkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2NtaTgzMzBfbm9ucG5wX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNuZF9jbWk4MzMwX2lzYV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbikKIHsKLQlyZXR1cm4gc25kX2NtaTgzMzBfcmVzdW1lKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldikpOworCXJldHVybiBzbmRfY21pODMzMF9yZXN1bWUoZGV2X2dldF9kcnZkYXRhKGRldikpOwogfQogI2VuZGlmCiAKLSNkZWZpbmUgQ01JODMzMF9EUklWRVIJInNuZF9jbWk4MzMwIgorI2RlZmluZSBERVZfTkFNRQkiY21pODMzMCIKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX2NtaTgzMzBfZHJpdmVyID0gewotCS5wcm9iZQkJPSBzbmRfY21pODMzMF9ub25wbnBfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfY21pODMzMF9ub25wbnBfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgaXNhX2RyaXZlciBzbmRfY21pODMzMF9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF9jbWk4MzMwX2lzYV9tYXRjaCwKKwkucHJvYmUJCT0gc25kX2NtaTgzMzBfaXNhX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2NtaTgzMzBfaXNhX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzbmRfY21pODMzMF9ub25wbnBfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNuZF9jbWk4MzMwX25vbnBucF9yZXN1bWUsCisJLnN1c3BlbmQJPSBzbmRfY21pODMzMF9pc2Ffc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNuZF9jbWk4MzMwX2lzYV9yZXN1bWUsCiAjZW5kaWYKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBDTUk4MzMwX0RSSVZFUgorCQkubmFtZQk9IERFVl9OQU1FCiAJfSwKIH07CiAKIAogI2lmZGVmIENPTkZJR19QTlAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0ZGF0YSBjbWk4MzMwX3BucF9kZXZpY2VzOwotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY21pODMzMF9wbnBfZGV0ZWN0KHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKnBpZCkKIHsKQEAgLTY0MCw3ICs2NDgsNiBAQAogCX0KIAlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgY2FyZCk7CiAJZGV2Kys7Ci0JY21pODMzMF9wbnBfZGV2aWNlcysrOwogCXJldHVybiAwOwogfQogCkBAIC02NzUsNjMgKzY4MiwzNCBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdF9vcl9tb2R1bGUgc25kX2NtaTgzMzBfdW5yZWdpc3Rlcl9hbGwodm9pZCkKLXsKLQlpbnQgaTsKLQotI2lmZGVmIENPTkZJR19QTlAKLQlpZiAocG5wX3JlZ2lzdGVyZWQpCi0JCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZjbWk4MzMwX3BucGNfZHJpdmVyKTsKLSNlbmRpZgotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpOyArK2kpCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBsYXRmb3JtX2RldmljZXNbaV0pOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfY21pODMzMF9kcml2ZXIpOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfY21pODMzMF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIGVyciwgY2FyZHMgPSAwOworCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX2NtaTgzMzBfZHJpdmVyKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKLQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwotCQlpZiAoISBlbmFibGVbaV0gfHwgaXNfaXNhcG5wX3NlbGVjdGVkKGkpKQotCQkJY29udGludWU7Ci0JCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoQ01JODMzMF9EUklWRVIsCi0JCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQkJY29udGludWU7Ci0JCX0KLQkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKLQkJY2FyZHMrKzsKLQl9Ci0KKwllcnIgPSBpc2FfcmVnaXN0ZXJfZHJpdmVyKCZzbmRfY21pODMzMF9kcml2ZXIsIFNORFJWX0NBUkRTKTsKICNpZmRlZiBDT05GSUdfUE5QCi0JZXJyID0gcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZjbWk4MzMwX3BucGNfZHJpdmVyKTsKLQlpZiAoIWVycikgewotCQlwbnBfcmVnaXN0ZXJlZCA9IDE7Ci0JCWNhcmRzICs9IGNtaTgzMzBfcG5wX2RldmljZXM7Ci0JfQotI2VuZGlmCisJaWYgKCFlcnIpCisJCWlzYV9yZWdpc3RlcmVkID0gMTsKIAotCWlmICghY2FyZHMpIHsKLSNpZmRlZiBNT0RVTEUKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ01JODMzMCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOworCWVyciA9IHBucF9yZWdpc3Rlcl9jYXJkX2RyaXZlcigmY21pODMzMF9wbnBjX2RyaXZlcik7CisJaWYgKCFlcnIpCisJCXBucF9yZWdpc3RlcmVkID0gMTsKKworCWlmIChpc2FfcmVnaXN0ZXJlZCkKKwkJZXJyID0gMDsKICNlbmRpZgotCQlzbmRfY21pODMzMF91bnJlZ2lzdGVyX2FsbCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9jbWk4MzMwX2V4aXQodm9pZCkKIHsKLQlzbmRfY21pODMzMF91bnJlZ2lzdGVyX2FsbCgpOworI2lmZGVmIENPTkZJR19QTlAKKwlpZiAocG5wX3JlZ2lzdGVyZWQpCisJCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZjbWk4MzMwX3BucGNfZHJpdmVyKTsKKworCWlmIChpc2FfcmVnaXN0ZXJlZCkKKyNlbmRpZgorCQlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9jbWk4MzMwX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGFsc2FfY2FyZF9jbWk4MzMwX2luaXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwppbmRleCA2OTZhNWM4Li5hYzQwNDExIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtMzIsOCArMzIsMTEgQEAKICNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKKyNkZWZpbmUgQ1JEX05BTUUgIkdlbmVyaWMgQ1M0MjMxIgorI2RlZmluZSBERVZfTkFNRSAiY3M0MjMxIgorCitNT0RVTEVfREVTQ1JJUFRJT04oQ1JEX05BTUUpOwogTU9EVUxFX0FVVEhPUigiSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIENTNDIzMSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzF9fSIpOwogCkBAIC00OCwxMzIgKzUxLDEzNiBAQAogc3RhdGljIGludCBkbWEyW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOwkvKiAwLDEsMyw1LDYsNyAqLwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIENTNDIzMSBzb3VuZGNhcmQuIik7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yICIgQ1JEX05BTUUgIiBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIENTNDIzMSBzb3VuZGNhcmQuIik7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciAiIENSRF9OQU1FICIgc291bmRjYXJkLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBDUzQyMzEgc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBDUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShwb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocG9ydCwgIlBvcnQgIyBmb3IgQ1M0MjMxIGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydCwgIlBvcnQgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShtcHVfcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1wdV9wb3J0LCAiTVBVLTQwMSBwb3J0ICMgZm9yIENTNDIzMSBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKG1wdV9wb3J0LCAiTVBVLTQwMSBwb3J0ICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEgIyBmb3IgQ1M0MjMxIGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lycSwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobXB1X2lycSwgIk1QVS00MDEgSVJRICMgZm9yIENTNDIzMSBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKG1wdV9pcnEsICJNUFUtNDAxIElSUSAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGRtYTEsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRtYTEsICJETUExICMgZm9yIENTNDIzMSBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKGRtYTEsICJETUExICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZG1hMiwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZG1hMiwgIkRNQTIgIyBmb3IgQ1M0MjMxIGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hMiwgIkRNQTIgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbU05EUlZfQ0FSRFNdOwotCi0KLXN0YXRpYyBpbnQgX19pbml0IHNuZF9jczQyMzFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jczQyMzFfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbikKIHsKLQlpbnQgZGV2ID0gcGRldi0+aWQ7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBzbmRfcGNtICpwY207Ci0Jc3RydWN0IHNuZF9jczQyMzEgKmNoaXA7Ci0JaW50IGVycjsKKwlpZiAoIWVuYWJsZVtuXSkKKwkJcmV0dXJuIDA7CiAKLQlpZiAocG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IHBvcnRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocG9ydFtuXSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSBzcGVjaWZ5IHBvcnRcbiIsIGRldi0+YnVzX2lkKTsKKwkJcmV0dXJuIDA7CiAJfQotCWlmIChpcnFbZGV2XSA9PSBTTkRSVl9BVVRPX0lSUSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IGlycVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCWlmIChpcnFbbl0gPT0gU05EUlZfQVVUT19JUlEpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSBzcGVjaWZ5IGlycVxuIiwgZGV2LT5idXNfaWQpOworCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKGRtYTFbZGV2XSA9PSBTTkRSVl9BVVRPX0RNQSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IGRtYTFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZG1hMVtuXSA9PSBTTkRSVl9BVVRPX0RNQSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlczogcGxlYXNlIHNwZWNpZnkgZG1hMVxuIiwgZGV2LT5idXNfaWQpOworCQlyZXR1cm4gMDsKIAl9Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKChlcnIgPSBzbmRfY3M0MjMxX2NyZWF0ZShjYXJkLCBwb3J0W2Rldl0sIC0xLAotCQkJCSAgICAgaXJxW2Rldl0sCi0JCQkJICAgICBkbWExW2Rldl0sCi0JCQkJICAgICBkbWEyW2Rldl0sCi0JCQkJICAgICBDUzQyMzFfSFdfREVURUNULAotCQkJCSAgICAgMCwgJmNoaXApKSA8IDApCi0JCWdvdG8gX2VycjsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzMV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX2NzNDIzMSAqY2hpcDsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCWludCBlcnJvcjsKKworCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVycm9yID0gc25kX2NzNDIzMV9jcmVhdGUoY2FyZCwgcG9ydFtuXSwgLTEsIGlycVtuXSwgZG1hMVtuXSwgZG1hMltuXSwKKwkJCUNTNDIzMV9IV19ERVRFQ1QsIDAsICZjaGlwKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIG91dDsKKwogCWNhcmQtPnByaXZhdGVfZGF0YSA9IGNoaXA7CiAKLQlpZiAoKGVyciA9IHNuZF9jczQyMzFfcGNtKGNoaXAsIDAsICZwY20pKSA8IDApCi0JCWdvdG8gX2VycjsKKwllcnJvciA9IHNuZF9jczQyMzFfcGNtKGNoaXAsIDAsICZwY20pOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gb3V0OwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkNTNDIzMSIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBjbS0+bmFtZSk7CisKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlZCwgZG1hICVkIiwKLQkJcGNtLT5uYW1lLCBjaGlwLT5wb3J0LCBpcnFbZGV2XSwgZG1hMVtkZXZdKTsKLQlpZiAoZG1hMltkZXZdID49IDApCi0JCXNwcmludGYoY2FyZC0+bG9uZ25hbWUgKyBzdHJsZW4oY2FyZC0+bG9uZ25hbWUpLCAiJiVkIiwgZG1hMltkZXZdKTsKKwkJcGNtLT5uYW1lLCBjaGlwLT5wb3J0LCBpcnFbbl0sIGRtYTFbbl0pOworCWlmIChkbWEyW25dID49IDApCisJCXNwcmludGYoY2FyZC0+bG9uZ25hbWUgKyBzdHJsZW4oY2FyZC0+bG9uZ25hbWUpLCAiJiVkIiwgZG1hMltuXSk7CiAKLQlpZiAoKGVyciA9IHNuZF9jczQyMzFfbWl4ZXIoY2hpcCkpIDwgMCkKLQkJZ290byBfZXJyOwotCWlmICgoZXJyID0gc25kX2NzNDIzMV90aW1lcihjaGlwLCAwLCBOVUxMKSkgPCAwKQotCQlnb3RvIF9lcnI7CisJZXJyb3IgPSBzbmRfY3M0MjMxX21peGVyKGNoaXApOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gb3V0OwogCi0JaWYgKG1wdV9wb3J0W2Rldl0gPiAwICYmIG1wdV9wb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCWlmIChtcHVfaXJxW2Rldl0gPT0gU05EUlZfQVVUT19JUlEpCi0JCQltcHVfaXJxW2Rldl0gPSAtMTsKKwllcnJvciA9IHNuZF9jczQyMzFfdGltZXIoY2hpcCwgMCwgTlVMTCk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAobXB1X3BvcnRbbl0gPiAwICYmIG1wdV9wb3J0W25dICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlpZiAobXB1X2lycVtuXSA9PSBTTkRSVl9BVVRPX0lSUSkKKwkJCW1wdV9pcnFbbl0gPSAtMTsKIAkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX0NTNDIzMiwKLQkJCQkJbXB1X3BvcnRbZGV2XSwgMCwKLQkJCQkJbXB1X2lycVtkZXZdLAotCQkJCQltcHVfaXJxW2Rldl0gPj0gMCA/IElSUUZfRElTQUJMRUQgOiAwLAorCQkJCQltcHVfcG9ydFtuXSwgMCwgbXB1X2lycVtuXSwKKwkJCQkJbXB1X2lycVtuXSA+PSAwID8gSVJRRl9ESVNBQkxFRCA6IDAsCiAJCQkJCU5VTEwpIDwgMCkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNzNDIzMTogTVBVNDAxIG5vdCBkZXRlY3RlZFxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTVBVNDAxIG5vdCBkZXRlY3RlZFxuIiwgZGV2LT5idXNfaWQpOwogCX0KIAotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBkZXYtPmRldik7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXYpOwogCi0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKQotCQlnb3RvIF9lcnI7CisJZXJyb3IgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIG91dDsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNhcmQpOwogCXJldHVybiAwOwogCi0gX2VycjoKLQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCXJldHVybiBlcnI7CitvdXQ6CXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfY3M0MjMxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfY3M0MjMxX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKQogewotCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzbmRfY3M0MjMxX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNuZF9jczQyMzFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBzbmRfY3M0MjMxICpjaGlwOwotCWNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbmRfY3M0MjMxICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCiAJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwotCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJY2hpcC0+c3VzcGVuZChjaGlwKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfY3M0MjMxX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNuZF9jczQyMzFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBzbmRfY3M0MjMxICpjaGlwOwotCWNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNuZF9jczQyMzEgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKIAljaGlwLT5yZXN1bWUoY2hpcCk7CiAJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOwogCXJldHVybiAwOwogfQogI2VuZGlmCiAKLSNkZWZpbmUgU05EX0NTNDIzMV9EUklWRVIJInNuZF9jczQyMzEiCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9jczQyMzFfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9jczQyMzFfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfY3M0MjMxX21hdGNoLAogCS5wcm9iZQkJPSBzbmRfY3M0MjMxX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2NzNDIzMV9yZW1vdmUpLAogI2lmZGVmIENPTkZJR19QTQpAQCAtMTgxLDU3ICsxODgsMTkgQEAKIAkucmVzdW1lCQk9IHNuZF9jczQyMzFfcmVzdW1lLAogI2VuZGlmCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gU05EX0NTNDIzMV9EUklWRVIKLQl9LAorCQkubmFtZQk9IERFVl9OQU1FCisJfQogfTsKIAotc3RhdGljIHZvaWQgX19pbml0X29yX21vZHVsZSBzbmRfY3M0MjMxX3VucmVnaXN0ZXJfYWxsKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZpY2VzKTsgKytpKQotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2VzW2ldKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX2NzNDIzMV9kcml2ZXIpOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfY3M0MjMxX2luaXQodm9pZCkKIHsKLQlpbnQgaSwgY2FyZHMsIGVycjsKLQotCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX2NzNDIzMV9kcml2ZXIpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JY2FyZHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7Ci0JCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKLQkJaWYgKCEgZW5hYmxlW2ldKQotCQkJY29udGludWU7Ci0JCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX0NTNDIzMV9EUklWRVIsCi0JCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQkJY29udGludWU7Ci0JCX0KLQkJZGV2aWNlc1tpXSA9IGRldmljZTsKLQkJY2FyZHMrKzsKLQl9Ci0JaWYgKCFjYXJkcykgewotI2lmZGVmIE1PRFVMRQotCQlwcmludGsoS0VSTl9FUlIgIkNTNDIzMSBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKLSNlbmRpZgotCQlzbmRfY3M0MjMxX3VucmVnaXN0ZXJfYWxsKCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc25kX2NzNDIzMV9kcml2ZXIsIFNORFJWX0NBUkRTKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9jczQyMzFfZXhpdCh2b2lkKQogewotCXNuZF9jczQyMzFfdW5yZWdpc3Rlcl9hbGwoKTsKKwlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9jczQyMzFfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQoYWxzYV9jYXJkX2NzNDIzMV9pbml0KQotbW9kdWxlX2V4aXQoYWxzYV9jYXJkX2NzNDIzMV9leGl0KQorbW9kdWxlX2luaXQoYWxzYV9jYXJkX2NzNDIzMV9pbml0KTsKK21vZHVsZV9leGl0KGFsc2FfY2FyZF9jczQyMzFfZXhpdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMV9saWIuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxX2xpYi5jCmluZGV4IDc1YzdjNWYuLjkxNGQ3N2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxX2xpYi5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxX2xpYi5jCkBAIC00MDUsNyArNDA1LDYgQEAKIAlzdHJ1Y3Qgc25kX2NzNDIzMSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlpbnQgcmVzdWx0ID0gMDsKIAl1bnNpZ25lZCBpbnQgd2hhdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzOwogCWludCBkb19zdGFydDsKIApAQCAtNDI1LDggKzQyNCw3IEBACiAJfQogCiAJd2hhdCA9IDA7Ci0Jc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnN0cmVhbSkgewotCQlzID0gc25kX3BjbV9ncm91cF9zdWJzdHJlYW1fZW50cnkocG9zKTsKKwlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQlpZiAocyA9PSBjaGlwLT5wbGF5YmFja19zdWJzdHJlYW0pIHsKIAkJCXdoYXQgfD0gQ1M0MjMxX1BMQVlCQUNLX0VOQUJMRTsKIAkJCXNuZF9wY21fdHJpZ2dlcl9kb25lKHMsIHN1YnN0cmVhbSk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYwppbmRleCAwN2ZmZDVjLi4xYTE0ZjMzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CkBAIC03NSwxMCArNzUsMTAgQEAKIAogI2lmZGVmIENTNDIzMgogI2RlZmluZSBJREVOVCAiQ1M0MjMyIgotI2RlZmluZSBDUzQyM1hfRFJJVkVSICJzbmRfY3M0MjMyIgorI2RlZmluZSBERVZfTkFNRSAiY3M0MjMyIgogI2Vsc2UKICNkZWZpbmUgSURFTlQgIkNTNDIzNisiCi0jZGVmaW5lIENTNDIzWF9EUklWRVIgInNuZF9jczQyMzYiCisjZGVmaW5lIERFVl9OQU1FICJjczQyMzYiCiAjZW5kaWYKIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KQEAgLTEyNiwxNCArMTI2LDEzIEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZG1hMiwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZG1hMiwgIkRNQTIgIyBmb3IgIiBJREVOVCAiIGRyaXZlci4iKTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbU05EUlZfQ0FSRFNdOwogI2lmZGVmIENPTkZJR19QTlAKK3N0YXRpYyBpbnQgaXNhX3JlZ2lzdGVyZWQ7CiBzdGF0aWMgaW50IHBucGNfcmVnaXN0ZXJlZDsKICNpZmRlZiBDUzQyMzIKIHN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CiAjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNuZF9jczQyM3hfZGV2aWNlczsKIAogc3RydWN0IHNuZF9jYXJkX2NzNDIzNiB7CiAJc3RydWN0IHNuZF9jczQyMzEgKmNoaXA7CkBAIC01NDIsMzggKzU0MSw1NSBAQAogCXJldHVybiBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX2NzNDIzeF9ub25wbnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jczQyM3hfaXNhX21hdGNoKHN0cnVjdCBkZXZpY2UgKnBkZXYsCisJCQkJCSAgdW5zaWduZWQgaW50IGRldikKIHsKLQlpbnQgZGV2ID0gcGRldi0+aWQ7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCWludCBlcnI7CisJaWYgKCFlbmFibGVbZGV2XSB8fCBpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KSkKKwkJcmV0dXJuIDA7CiAKIAlpZiAocG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzcGVjaWZ5IHBvcnRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSBzcGVjaWZ5IHBvcnRcbiIsIHBkZXYtPmJ1c19pZCk7CisJCXJldHVybiAwOwogCX0KIAlpZiAoY3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAic3BlY2lmeSBjcG9ydFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlczogcGxlYXNlIHNwZWNpZnkgY3BvcnRcbiIsIHBkZXYtPmJ1c19pZCk7CisJCXJldHVybiAwOwogCX0KKwlpZiAoaXJxW2Rldl0gPT0gU05EUlZfQVVUT19JUlEpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSBzcGVjaWZ5IGlycVxuIiwgcGRldi0+YnVzX2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChkbWExW2Rldl0gPT0gU05EUlZfQVVUT19ETUEpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSBzcGVjaWZ5IGRtYTFcbiIsIHBkZXYtPmJ1c19pZCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2NzNDIzeF9pc2FfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOwogCiAJY2FyZCA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2KTsKIAlpZiAoISBjYXJkKQogCQlyZXR1cm4gLUVOT01FTTsKLQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwZGV2LT5kZXYpOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfY3M0MjN4X3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCWRldl9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgc25kX2NzNDIzeF9ub25wbnBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9jczQyM3hfaXNhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpwZGV2LAorCQkJCQkgICB1bnNpZ25lZCBpbnQgZGV2KQogewotCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGRldl9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJZGV2X3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJldHVybiAwOwogfQogCkBAIC01OTQsMjYgKzYxMCwyOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9jczQyM3hfbm9ucG5wX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNuZF9jczQyM3hfaXNhX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbiwKKwkJCQkgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gc25kX2NzNDIzeF9zdXNwZW5kKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldikpOworCXJldHVybiBzbmRfY3M0MjN4X3N1c3BlbmQoZGV2X2dldF9kcnZkYXRhKGRldikpOwogfQogCi1zdGF0aWMgaW50IHNuZF9jczQyM3hfbm9ucG5wX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNuZF9jczQyM3hfaXNhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKQogewotCXJldHVybiBzbmRfY3M0MjN4X3Jlc3VtZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlyZXR1cm4gc25kX2NzNDIzeF9yZXN1bWUoZGV2X2dldF9kcnZkYXRhKGRldikpOwogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNzNDIzeF9ub25wbnBfZHJpdmVyID0gewotCS5wcm9iZQkJPSBzbmRfY3M0MjN4X25vbnBucF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9jczQyM3hfbm9ucG5wX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IGlzYV9kcml2ZXIgY3M0MjN4X2lzYV9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF9jczQyM3hfaXNhX21hdGNoLAorCS5wcm9iZQkJPSBzbmRfY3M0MjN4X2lzYV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9jczQyM3hfaXNhX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzbmRfY3M0MjN4X25vbnBucF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc25kX2NzNDIzeF9ub25wbnBfcmVzdW1lLAorCS5zdXNwZW5kCT0gc25kX2NzNDIzeF9pc2Ffc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNuZF9jczQyM3hfaXNhX3Jlc3VtZSwKICNlbmRpZgogCS5kcml2ZXIJCT0gewotCQkubmFtZQk9IENTNDIzWF9EUklWRVIKKwkJLm5hbWUJPSBERVZfTkFNRQogCX0sCiB9OwogCkBAIC02NTEsNyArNjY5LDYgQEAKIAl9CiAJcG5wX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOwogCWRldisrOwotCXNuZF9jczQyM3hfZGV2aWNlcysrOwogCXJldHVybiAwOwogfQogCkBAIC03MTUsNyArNzMyLDYgQEAKIAl9CiAJcG5wX3NldF9jYXJkX2RydmRhdGEocGNhcmQsIGNhcmQpOwogCWRldisrOwotCXNuZF9jczQyM3hfZGV2aWNlcysrOwogCXJldHVybiAwOwogfQogCkBAIC03NTAsNDYgKzc2NiwxNCBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdF9vcl9tb2R1bGUgc25kX2NzNDIzeF91bnJlZ2lzdGVyX2FsbCh2b2lkKQotewotCWludCBpOwotCi0jaWZkZWYgQ09ORklHX1BOUAotCWlmIChwbnBjX3JlZ2lzdGVyZWQpCi0JCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZjczQyM3hfcG5wY19kcml2ZXIpOwotI2lmZGVmIENTNDIzMgotCWlmIChwbnBfcmVnaXN0ZXJlZCkKLQkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZjczQyMzJfcG5wX2RyaXZlcik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBDT05GSUdfUE5QICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcyk7ICsraSkKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGxhdGZvcm1fZGV2aWNlc1tpXSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNzNDIzeF9ub25wbnBfZHJpdmVyKTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX2NzNDIzeF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCi0JaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNzNDIzeF9ub25wbnBfZHJpdmVyKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKLQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwotCQlpZiAoISBlbmFibGVbaV0gfHwgaXNfaXNhcG5wX3NlbGVjdGVkKGkpKQotCQkJY29udGludWU7Ci0JCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoQ1M0MjNYX0RSSVZFUiwKLQkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKLQkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwotCQlzbmRfY3M0MjN4X2RldmljZXMrKzsKLQl9CisJZXJyID0gaXNhX3JlZ2lzdGVyX2RyaXZlcigmY3M0MjN4X2lzYV9kcml2ZXIsIFNORFJWX0NBUkRTKTsKICNpZmRlZiBDT05GSUdfUE5QCisJaWYgKCFlcnIpCisJCWlzYV9yZWdpc3RlcmVkID0gMTsKICNpZmRlZiBDUzQyMzIKIAllcnIgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZjczQyMzJfcG5wX2RyaXZlcik7CiAJaWYgKCFlcnIpCkBAIC03OTgsMjEgKzc4MiwyOCBAQAogCWVyciA9IHBucF9yZWdpc3Rlcl9jYXJkX2RyaXZlcigmY3M0MjN4X3BucGNfZHJpdmVyKTsKIAlpZiAoIWVycikKIAkJcG5wY19yZWdpc3RlcmVkID0gMTsKLSNlbmRpZiAvKiBDT05GSUdfUE5QICovCi0KLQlpZiAoIXNuZF9jczQyM3hfZGV2aWNlcykgewotI2lmZGVmIE1PRFVMRQotCQlwcmludGsoS0VSTl9FUlIgSURFTlQgIiBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKKyNpZmRlZiBDUzQyMzIKKwlpZiAocG5wX3JlZ2lzdGVyZWQpCisJCWVyciA9IDA7CiAjZW5kaWYKLQkJc25kX2NzNDIzeF91bnJlZ2lzdGVyX2FsbCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmV0dXJuIDA7CisJaWYgKGlzYV9yZWdpc3RlcmVkKQorCQllcnIgPSAwOworI2VuZGlmCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9jczQyM3hfZXhpdCh2b2lkKQogewotCXNuZF9jczQyM3hfdW5yZWdpc3Rlcl9hbGwoKTsKKyNpZmRlZiBDT05GSUdfUE5QCisJaWYgKHBucGNfcmVnaXN0ZXJlZCkKKwkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmNzNDIzeF9wbnBjX2RyaXZlcik7CisjaWZkZWYgQ1M0MjMyCisJaWYgKHBucF9yZWdpc3RlcmVkKQorCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzMl9wbnBfZHJpdmVyKTsKKyNlbmRpZgorCWlmIChpc2FfcmVnaXN0ZXJlZCkKKyNlbmRpZgorCQlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNDIzeF9pc2FfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYWxzYV9jYXJkX2NzNDIzeF9pbml0KQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKaW5kZXggNjVmOTdmZi4uZWRjMzk4NyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYworKysgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTM1LDggKzM1LDExIEBACiAjZGVmaW5lIFNORFJWX0xFR0FDWV9GSU5EX0ZSRUVfRE1BCiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCisjZGVmaW5lIENSRF9OQU1FICJHZW5lcmljIEVTUyBFUzE2ODgvRVM2ODggQXVkaW9Ecml2ZSIKKyNkZWZpbmUgREVWX05BTUUgImVzMTY4OCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKENSRF9OQU1FKTsKIE1PRFVMRV9BVVRIT1IoIkphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRVNTIEVTeDY4OCBBdWRpb0RyaXZlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tFU1MsRVM2ODggUG5QIEF1ZGlvRHJpdmUscG5wOkVTUzAxMDB9LCIKIAkgICAgICAgICJ7RVNTLEVTMTY4OCBQblAgQXVkaW9Ecml2ZSxwbnA6RVNTMDEwMn0sIgpAQCAtNTMsMTg5ICs1NiwxNTcgQEAKIHN0YXRpYyBpbnQgZG1hOFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0RNQTsJLyogMCwxLDMgKi8KIAogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBFU3g2ODggc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciAiIENSRF9OQU1FICIgc291bmRjYXJkLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBFU3g2ODggc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgIiBDUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgRVN4Njg4IHNvdW5kY2FyZC4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlICIgQ1JEX05BTUUgIiBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkocG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBvcnQsICJQb3J0ICMgZm9yIEVTeDY4OCBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnQsICJQb3J0ICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkobXB1X3BvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhtcHVfcG9ydCwgIk1QVS00MDEgcG9ydCAjIGZvciBFU3g2ODggZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhtcHVfcG9ydCwgIk1QVS00MDEgcG9ydCAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRICMgZm9yIEVTeDY4OCBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9pcnEsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1wdV9pcnEsICJNUFUtNDAxIElSUSAjIGZvciBFU3g2ODggZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhtcHVfaXJxLCAiTVBVLTQwMSBJUlEgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShkbWE4LCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkbWE4LCAiOC1iaXQgRE1BICMgZm9yIEVTeDY4OCBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKGRtYTgsICI4LWJpdCBETUEgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbU05EUlZfQ0FSRFNdOwotCi0jZGVmaW5lIFBGWAkiZXMxNjg4OiAiCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9lczE2ODhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9lczE2ODhfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbikKIHsKLQlpbnQgZGV2ID0gcGRldi0+aWQ7CisJcmV0dXJuIGVuYWJsZVtuXTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2VzMTY4OF9sZWdhY3lfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgCisJCXN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4sIHN0cnVjdCBzbmRfZXMxNjg4ICoqcmNoaXApCit7CisJc3RhdGljIGxvbmcgcG9zc2libGVfcG9ydHNbXSA9IHsweDIyMCwgMHgyNDAsIDB4MjYwfTsKIAlzdGF0aWMgaW50IHBvc3NpYmxlX2lycXNbXSA9IHs1LCA5LCAxMCwgNywgLTF9OwogCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hc1tdID0gezEsIDMsIDAsIC0xfTsKLQlpbnQgeGlycSwgeGRtYSwgeG1wdV9pcnE7CisKKwlpbnQgaSwgZXJyb3I7CisKKwlpZiAoaXJxW25dID09IFNORFJWX0FVVE9fSVJRKSB7CisJCWlycVtuXSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lycShwb3NzaWJsZV9pcnFzKTsKKwkJaWYgKGlycVtuXSA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZmluZCBhIGZyZWUgSVJRXG4iLAorCQkJCWRldi0+YnVzX2lkKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisJaWYgKGRtYThbbl0gPT0gU05EUlZfQVVUT19ETUEpIHsKKwkJZG1hOFtuXSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzKTsKKwkJaWYgKGRtYThbbl0gPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQVxuIiwKKwkJCQlkZXYtPmJ1c19pZCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJaWYgKHBvcnRbbl0gIT0gU05EUlZfQVVUT19QT1JUKQorCQlyZXR1cm4gc25kX2VzMTY4OF9jcmVhdGUoY2FyZCwgcG9ydFtuXSwgbXB1X3BvcnRbbl0sIGlycVtuXSwKKwkJCQltcHVfaXJxW25dLCBkbWE4W25dLCBFUzE2ODhfSFdfQVVUTywgcmNoaXApOworCisJaSA9IDA7CisJZG8geworCQlwb3J0W25dID0gcG9zc2libGVfcG9ydHNbaV07CisJCWVycm9yID0gc25kX2VzMTY4OF9jcmVhdGUoY2FyZCwgcG9ydFtuXSwgbXB1X3BvcnRbbl0sIGlycVtuXSwKKwkJCQltcHVfaXJxW25dLCBkbWE4W25dLCBFUzE2ODhfSFdfQVVUTywgcmNoaXApOworCX0gd2hpbGUgKGVycm9yIDwgMCAmJiArK2kgPCBBUlJBWV9TSVpFKHBvc3NpYmxlX3BvcnRzKSk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9lczE2ODhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbikKK3sKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9lczE2ODggKmNoaXA7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCXN0cnVjdCBzbmRfcGNtICpwY207Ci0JaW50IGVycjsKKwlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQl4aXJxID0gaXJxW2Rldl07Ci0JaWYgKHhpcnEgPT0gU05EUlZfQVVUT19JUlEpIHsKLQkJaWYgKCh4aXJxID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaXJxKHBvc3NpYmxlX2lycXMpKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgSVJRXG4iKTsKLQkJCWVyciA9IC1FQlVTWTsKLQkJCWdvdG8gX2VycjsKLQkJfQotCX0KLQl4bXB1X2lycSA9IG1wdV9pcnFbZGV2XTsKLQl4ZG1hID0gZG1hOFtkZXZdOwotCWlmICh4ZG1hID09IFNORFJWX0FVVE9fRE1BKSB7Ci0JCWlmICgoeGRtYSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQVxuIik7Ci0JCQllcnIgPSAtRUJVU1k7Ci0JCQlnb3RvIF9lcnI7Ci0JCX0KLQl9CisJZXJyb3IgPSBzbmRfZXMxNjg4X2xlZ2FjeV9jcmVhdGUoY2FyZCwgZGV2LCBuLCAmY2hpcCk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXQ7CiAKLQlpZiAocG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkgewotCQlpZiAoKGVyciA9IHNuZF9lczE2ODhfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwgbXB1X3BvcnRbZGV2XSwKLQkJCQkJICAgICB4aXJxLCB4bXB1X2lycSwgeGRtYSwKLQkJCQkJICAgICBFUzE2ODhfSFdfQVVUTywgJmNoaXApKSA8IDApCi0JCQlnb3RvIF9lcnI7Ci0JfSBlbHNlIHsKLQkJLyogYXV0by1wcm9iZSBsZWdhY3kgcG9ydHMgKi8KLQkJc3RhdGljIHVuc2lnbmVkIGxvbmcgcG9zc2libGVfcG9ydHNbXSA9IHsKLQkJCTB4MjIwLCAweDI0MCwgMHgyNjAsCi0JCX07Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwb3NzaWJsZV9wb3J0cyk7IGkrKykgewotCQkJZXJyID0gc25kX2VzMTY4OF9jcmVhdGUoY2FyZCwgcG9zc2libGVfcG9ydHNbaV0sCi0JCQkJCQltcHVfcG9ydFtkZXZdLAotCQkJCQkJeGlycSwgeG1wdV9pcnEsIHhkbWEsCi0JCQkJCQlFUzE2ODhfSFdfQVVUTywgJmNoaXApOwotCQkJaWYgKGVyciA+PSAwKSB7Ci0JCQkJcG9ydFtkZXZdID0gcG9zc2libGVfcG9ydHNbaV07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKGkgPj0gQVJSQVlfU0laRShwb3NzaWJsZV9wb3J0cykpCi0JCQlnb3RvIF9lcnI7Ci0JfQorCWVycm9yID0gc25kX2VzMTY4OF9wY20oY2hpcCwgMCwgJnBjbSk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXQ7CiAKLQlpZiAoKGVyciA9IHNuZF9lczE2ODhfcGNtKGNoaXAsIDAsICZwY20pKSA8IDApCi0JCWdvdG8gX2VycjsKLQotCWlmICgoZXJyID0gc25kX2VzMTY4OF9taXhlcihjaGlwKSkgPCAwKQotCQlnb3RvIF9lcnI7CisJZXJyb3IgPSBzbmRfZXMxNjg4X21peGVyKGNoaXApOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gb3V0OwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkVTMTY4OCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBjbS0+bmFtZSk7Ci0Jc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWksIGRtYSAlaSIsIHBjbS0+bmFtZSwgY2hpcC0+cG9ydCwgeGlycSwgeGRtYSk7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWksIGRtYSAlaSIsIHBjbS0+bmFtZSwKKwkJY2hpcC0+cG9ydCwgY2hpcC0+aXJxLCBjaGlwLT5kbWE4KTsKIAotCWlmICgoc25kX29wbDNfY3JlYXRlKGNhcmQsIGNoaXAtPnBvcnQsIGNoaXAtPnBvcnQgKyAyLCBPUEwzX0hXX09QTDMsIDAsICZvcGwzKSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJvcGwzIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgY2hpcC0+cG9ydCk7Ci0JfSBlbHNlIHsKLQkJaWYgKChlcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCkpIDwgMCkKLQkJCWdvdG8gX2VycjsKKwlpZiAoc25kX29wbDNfY3JlYXRlKGNhcmQsIGNoaXAtPnBvcnQsIGNoaXAtPnBvcnQgKyAyLAorCQkJT1BMM19IV19PUEwzLCAwLCAmb3BsMykgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogb3BsMyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsCisJCQlkZXYtPmJ1c19pZCwgY2hpcC0+cG9ydCk7CisJZWxzZSB7CisJCWVycm9yID0Jc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOworCQlpZiAoZXJyb3IgPCAwKQorCQkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHhtcHVfaXJxID49IDAgJiYgeG1wdV9pcnEgIT0gU05EUlZfQVVUT19JUlEgJiYgY2hpcC0+bXB1X3BvcnQgPiAwKSB7Ci0JCWlmICgoZXJyID0gc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfRVMxNjg4LAotCQkJCQkgICAgICAgY2hpcC0+bXB1X3BvcnQsIDAsCi0JCQkJCSAgICAgICB4bXB1X2lycSwKLQkJCQkJICAgICAgIElSUUZfRElTQUJMRUQsCi0JCQkJCSAgICAgICBOVUxMKSkgPCAwKQotCQkJZ290byBfZXJyOworCWlmIChtcHVfaXJxW25dID49IDAgJiYgbXB1X2lycVtuXSAhPSBTTkRSVl9BVVRPX0lSUSAmJgorCQkJY2hpcC0+bXB1X3BvcnQgPiAwKSB7CisJCWVycm9yID0gc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfRVMxNjg4LAorCQkJCWNoaXAtPm1wdV9wb3J0LCAwLAorCQkJCW1wdV9pcnFbbl0sIElSUUZfRElTQUJMRUQsIE5VTEwpOworCQlpZiAoZXJyb3IgPCAwKQorCQkJZ290byBvdXQ7CiAJfQogCi0Jc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGRldi0+ZGV2KTsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIGRldik7CiAKLQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApCi0JCWdvdG8gX2VycjsKKwllcnJvciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gb3V0OwogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgY2FyZCk7CiAJcmV0dXJuIDA7CiAKLSBfZXJyOgotCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JcmV0dXJuIGVycjsKK291dDoJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9lczE2ODhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9lczE2ODhfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pCiB7Ci0Jc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOworCXNuZF9jYXJkX2ZyZWUoZGV2X2dldF9kcnZkYXRhKGRldikpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEVTMTY4OF9EUklWRVIJInNuZF9lczE2ODgiCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9lczE2ODhfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9lczE2ODhfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfZXMxNjg4X21hdGNoLAogCS5wcm9iZQkJPSBzbmRfZXMxNjg4X3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2VzMTY4OF9yZW1vdmUpLAotCS8qIEZJWE1FOiBzdXNwZW5kL3Jlc3VtZSAqLworCS5yZW1vdmUJCT0gc25kX2VzMTY4OF9yZW1vdmUsCisjaWYgMAkvKiBGSVhNRSAqLworCS5zdXNwZW5kCT0gc25kX2VzMTY4OF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc25kX2VzMTY4OF9yZXN1bWUsCisjZW5kaWYKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBFUzE2ODhfRFJJVkVSCi0JfSwKKwkJLm5hbWUJPSBERVZfTkFNRQorCX0KIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdF9vcl9tb2R1bGUgc25kX2VzMTY4OF91bnJlZ2lzdGVyX2FsbCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2aWNlcyk7ICsraSkKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlc1tpXSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9lczE2ODhfZHJpdmVyKTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX2VzMTY4OF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIGNhcmRzLCBlcnI7Ci0KLQllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNuZF9lczE2ODhfZHJpdmVyKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWNhcmRzID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewotCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7Ci0JCWlmICghIGVuYWJsZVtpXSkKLQkJCWNvbnRpbnVlOwotCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEVTMTY4OF9EUklWRVIsCi0JCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQkJY29udGludWU7Ci0JCX0KLQkJZGV2aWNlc1tpXSA9IGRldmljZTsKLQkJY2FyZHMrKzsKLQl9Ci0JaWYgKCFjYXJkcykgewotI2lmZGVmIE1PRFVMRQotCQlwcmludGsoS0VSTl9FUlIgIkVTUyBBdWRpb0RyaXZlIEVTMTY4OCBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKLSNlbmRpZgotCQlzbmRfZXMxNjg4X3VucmVnaXN0ZXJfYWxsKCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc25kX2VzMTY4OF9kcml2ZXIsIFNORFJWX0NBUkRTKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9lczE2ODhfZXhpdCh2b2lkKQogewotCXNuZF9lczE2ODhfdW5yZWdpc3Rlcl9hbGwoKTsKKwlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9lczE2ODhfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQoYWxzYV9jYXJkX2VzMTY4OF9pbml0KQotbW9kdWxlX2V4aXQoYWxzYV9jYXJkX2VzMTY4OF9leGl0KQorbW9kdWxlX2luaXQoYWxzYV9jYXJkX2VzMTY4OF9pbml0KTsKK21vZHVsZV9leGl0KGFsc2FfY2FyZF9lczE2ODhfZXhpdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxOHh4LmMgYi9zb3VuZC9pc2EvZXMxOHh4LmMKaW5kZXggNzI1YzExNS4uZjc3MzJiZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTh4eC5jCisrKyBiL3NvdW5kL2lzYS9lczE4eHguYwpAQCAtODAsNyArODAsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2EuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAjaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+CkBAIC0yMDM1LDEwICsyMDM1LDEwIEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZG1hMiwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZG1hMiwgIkRNQSAyICMgZm9yIEVTMTh4eCBkcml2ZXIuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW1NORFJWX0NBUkRTXTsKLQogI2lmZGVmIENPTkZJR19QTlAKLXN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQsIHBucGNfcmVnaXN0ZXJlZDsKK3N0YXRpYyBpbnQgaXNhX3JlZ2lzdGVyZWQ7CitzdGF0aWMgaW50IHBucF9yZWdpc3RlcmVkOworc3RhdGljIGludCBwbnBjX3JlZ2lzdGVyZWQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2RldmljZV9pZCBzbmRfYXVkaW9kcml2ZV9wbnBiaW9zaWRzW10gPSB7CiAJeyAuaWQgPSAiRVNTMTg2OSIgfSwKQEAgLTIyMzcsNyArMjIzNywxMiBAQAogCXJldHVybiBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgc25kX2VzMTh4eF9ub25wbnBfcHJvYmUxKGludCBkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9lczE4eHhfaXNhX21hdGNoKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBkZXYpCit7CisJcmV0dXJuIGVuYWJsZVtkZXZdICYmICFpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2VzMTh4eF9pc2FfcHJvYmUxKGludCBkZXYsIHN0cnVjdCBkZXZpY2UgKmRldnB0cikKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKQEAgLTIyNDUsMTggKzIyNTAsMTcgQEAKIAljYXJkID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYpOwogCWlmICghIGNhcmQpCiAJCXJldHVybiAtRU5PTUVNOwotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmRldnB0ci0+ZGV2KTsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIGRldnB0cik7CiAJaWYgKChlcnIgPSBzbmRfYXVkaW9kcml2ZV9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBjYXJkKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBjYXJkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgc25kX2VzMTh4eF9ub25wbnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9lczE4eHhfaXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBkZXYpCiB7Ci0JaW50IGRldiA9IHBkZXYtPmlkOwogCWludCBlcnI7CiAJc3RhdGljIGludCBwb3NzaWJsZV9pcnFzW10gPSB7NSwgOSwgMTAsIDcsIDExLCAxMiwgLTF9OwogCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hc1tdID0gezEsIDAsIDMsIDUsIC0xfTsKQEAgLTIyODEsMTMgKzIyODUsMTMgQEAKIAl9CiAKIAlpZiAocG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkgewotCQlyZXR1cm4gc25kX2VzMTh4eF9ub25wbnBfcHJvYmUxKGRldiwgcGRldik7CisJCXJldHVybiBzbmRfZXMxOHh4X2lzYV9wcm9iZTEoZGV2LCBwZGV2KTsKIAl9IGVsc2UgewogCQlzdGF0aWMgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9wb3J0c1tdID0gezB4MjIwLCAweDI0MCwgMHgyNjAsIDB4MjgwfTsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBvc3NpYmxlX3BvcnRzKTsgaSsrKSB7CiAJCQlwb3J0W2Rldl0gPSBwb3NzaWJsZV9wb3J0c1tpXTsKLQkJCWVyciA9IHNuZF9lczE4eHhfbm9ucG5wX3Byb2JlMShkZXYsIHBkZXYpOworCQkJZXJyID0gc25kX2VzMTh4eF9pc2FfcHJvYmUxKGRldiwgcGRldik7CiAJCQlpZiAoISBlcnIpCiAJCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTIyOTUsNDMgKzIyOTksNDQgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9lczE4eHhfbm9ucG5wX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfZXMxOHh4X2lzYV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2cHRyLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgZGV2KQogewotCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGRldl9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzbmRfZXMxOHh4X25vbnBucF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzbmRfZXMxOHh4X2lzYV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4sCisJCQkJICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHNuZF9lczE4eHhfc3VzcGVuZChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpLCBzdGF0ZSk7CisJcmV0dXJuIHNuZF9lczE4eHhfc3VzcGVuZChkZXZfZ2V0X2RydmRhdGEoZGV2KSwgc3RhdGUpOwogfQogCi1zdGF0aWMgaW50IHNuZF9lczE4eHhfbm9ucG5wX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNuZF9lczE4eHhfaXNhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKQogewotCXJldHVybiBzbmRfZXMxOHh4X3Jlc3VtZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlyZXR1cm4gc25kX2VzMTh4eF9yZXN1bWUoZGV2X2dldF9kcnZkYXRhKGRldikpOwogfQogI2VuZGlmCiAKLSNkZWZpbmUgRVMxOFhYX0RSSVZFUgkic25kX2VzMTh4eCIKKyNkZWZpbmUgREVWX05BTUUgImVzMTh4eCIKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX2VzMTh4eF9ub25wbnBfZHJpdmVyID0gewotCS5wcm9iZQkJPSBzbmRfZXMxOHh4X25vbnBucF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9lczE4eHhfbm9ucG5wX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IGlzYV9kcml2ZXIgc25kX2VzMTh4eF9pc2FfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfZXMxOHh4X2lzYV9tYXRjaCwKKwkucHJvYmUJCT0gc25kX2VzMTh4eF9pc2FfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfZXMxOHh4X2lzYV9yZW1vdmUpLAogI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gc25kX2VzMTh4eF9ub25wbnBfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNuZF9lczE4eHhfbm9ucG5wX3Jlc3VtZSwKKwkuc3VzcGVuZAk9IHNuZF9lczE4eHhfaXNhX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzbmRfZXMxOHh4X2lzYV9yZXN1bWUsCiAjZW5kaWYKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBFUzE4WFhfRFJJVkVSCisJCS5uYW1lCT0gREVWX05BTUUKIAl9LAogfTsKIAogCiAjaWZkZWYgQ09ORklHX1BOUAotc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXRkYXRhIGVzMTh4eF9wbnBfZGV2aWNlczsKLQogc3RhdGljIGludCBfX2RldmluaXQgc25kX2F1ZGlvZHJpdmVfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2RldiAqcGRldiwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICppZCkKIHsKQEAgLTIzNjIsNyArMjM2Nyw2IEBACiAJfQogCXBucF9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKIAlkZXYrKzsKLQllczE4eHhfcG5wX2RldmljZXMrKzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQyNCw3ICsyNDI4LDYgQEAKIAogCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBjYXJkKTsKIAlkZXYrKzsKLQllczE4eHhfcG5wX2RldmljZXMrKzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ2MCw2NyArMjQ2MywzOSBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdF9vcl9tb2R1bGUgc25kX2VzMTh4eF91bnJlZ2lzdGVyX2FsbCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX2VzMTh4eF9pbml0KHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGVycjsKIAorCWVyciA9IGlzYV9yZWdpc3Rlcl9kcml2ZXIoJnNuZF9lczE4eHhfaXNhX2RyaXZlciwgU05EUlZfQ0FSRFMpOworI2lmZGVmIENPTkZJR19QTlAKKwlpZiAoIWVycikKKwkJaXNhX3JlZ2lzdGVyZWQgPSAxOworCisJZXJyID0gcG5wX3JlZ2lzdGVyX2RyaXZlcigmZXMxOHh4X3BucF9kcml2ZXIpOworCWlmICghZXJyKQorCQlwbnBfcmVnaXN0ZXJlZCA9IDE7CisKKwllcnIgPSBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmVzMTh4eF9wbnBjX2RyaXZlcik7CisJaWYgKCFlcnIpCisJCXBucGNfcmVnaXN0ZXJlZCA9IDE7CisKKwlpZiAoaXNhX3JlZ2lzdGVyZWQgfHwgcG5wX3JlZ2lzdGVyZWQpCisJCWVyciA9IDA7CisjZW5kaWYKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2VzMTh4eF9leGl0KHZvaWQpCit7CiAjaWZkZWYgQ09ORklHX1BOUAogCWlmIChwbnBjX3JlZ2lzdGVyZWQpCiAJCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZlczE4eHhfcG5wY19kcml2ZXIpOwogCWlmIChwbnBfcmVnaXN0ZXJlZCkKIAkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZlczE4eHhfcG5wX2RyaXZlcik7CisJaWYgKGlzYV9yZWdpc3RlcmVkKQogI2VuZGlmCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcyk7ICsraSkKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGxhdGZvcm1fZGV2aWNlc1tpXSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9lczE4eHhfbm9ucG5wX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9lczE4eHhfaW5pdCh2b2lkKQotewotCWludCBpLCBlcnIsIGNhcmRzID0gMDsKLQotCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfZXMxOHh4X25vbnBucF9kcml2ZXIpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewotCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7Ci0JCWlmICghIGVuYWJsZVtpXSB8fCBpc19pc2FwbnBfc2VsZWN0ZWQoaSkpCi0JCQljb250aW51ZTsKLQkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShFUzE4WFhfRFJJVkVSLAotCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKQotCSAgICAgICAJCWNvbnRpbnVlOwotCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKLQkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwotCQljYXJkcysrOwotCX0KLQotI2lmZGVmIENPTkZJR19QTlAKLQllcnIgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZlczE4eHhfcG5wX2RyaXZlcik7Ci0JaWYgKCFlcnIpCi0JCXBucF9yZWdpc3RlcmVkID0gMTsKLQllcnIgPSBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmVzMTh4eF9wbnBjX2RyaXZlcik7Ci0JaWYgKCFlcnIpCi0JCXBucGNfcmVnaXN0ZXJlZCA9IDE7Ci0JY2FyZHMgKz0gZXMxOHh4X3BucF9kZXZpY2VzOwotI2VuZGlmCi0KLQlpZighY2FyZHMpIHsKLSNpZmRlZiBNT0RVTEUKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiRVNTIEF1ZGlvRHJpdmUgRVMxOHh4IHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwotI2VuZGlmCi0JCXNuZF9lczE4eHhfdW5yZWdpc3Rlcl9hbGwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2VzMTh4eF9leGl0KHZvaWQpCi17Ci0Jc25kX2VzMTh4eF91bnJlZ2lzdGVyX2FsbCgpOworCQlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9lczE4eHhfaXNhX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGFsc2FfY2FyZF9lczE4eHhfaW5pdCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKaW5kZXggMDM5NWUyZS4uOGYyM2Y0MyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTMzLDggKzMzLDExIEBACiAjZGVmaW5lIFNORFJWX0xFR0FDWV9GSU5EX0ZSRUVfRE1BCiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCisjZGVmaW5lIENSRF9OQU1FICJHcmF2aXMgVWx0cmFTb3VuZCBDbGFzc2ljIgorI2RlZmluZSBERVZfTkFNRSAiZ3VzY2xhc3NpYyIKKworTU9EVUxFX0RFU0NSSVBUSU9OKENSRF9OQU1FKTsKIE1PRFVMRV9BVVRIT1IoIkphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiR3JhdmlzIFVsdHJhU291bmQgQ2xhc3NpYyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7R3JhdmlzLFVsdHJhU291bmQgQ2xhc3NpY319Iik7CiAKQEAgLTUxLDMyICs1NCw4MCBAQAogc3RhdGljIGludCBwY21fY2hhbm5lbHNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAyfTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBHVVMgQ2xhc3NpYyBzb3VuZGNhcmQuIik7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yICIgQ1JEX05BTUUgIiBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIEdVUyBDbGFzc2ljIHNvdW5kY2FyZC4iKTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yICIgQ1JEX05BTUUgIiBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEdVUyBDbGFzc2ljIHNvdW5kY2FyZC4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlICIgQ1JEX05BTUUgIiBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkocG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBvcnQsICJQb3J0ICMgZm9yIEdVUyBDbGFzc2ljIGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydCwgIlBvcnQgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSAjIGZvciBHVVMgQ2xhc3NpYyBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGRtYTEsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRtYTEsICJETUExICMgZm9yIEdVUyBDbGFzc2ljIGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hMSwgIkRNQTEgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShkbWEyLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkbWEyLCAiRE1BMiAjIGZvciBHVVMgQ2xhc3NpYyBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKGRtYTIsICJETUEyICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoam95c3RpY2tfZGFjLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhqb3lzdGlja19kYWMsICJKb3lzdGljayBEQUMgbGV2ZWwgMC41OVYtNC41MlYgb3IgMC4zODlWLTIuOThWIGZvciBHVVMgQ2xhc3NpYyBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKGpveXN0aWNrX2RhYywgIkpveXN0aWNrIERBQyBsZXZlbCAwLjU5Vi00LjUyViBvciAwLjM4OVYtMi45OFYgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoY2hhbm5lbHMsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGNoYW5uZWxzLCAiR0YxIGNoYW5uZWxzIGZvciBHVVMgQ2xhc3NpYyBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKGNoYW5uZWxzLCAiR0YxIGNoYW5uZWxzIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHBjbV9jaGFubmVscywgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocGNtX2NoYW5uZWxzLCAiUmVzZXJ2ZWQgUENNIGNoYW5uZWxzIGZvciBHVVMgQ2xhc3NpYyBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHBjbV9jaGFubmVscywgIlJlc2VydmVkIFBDTSBjaGFubmVscyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbU05EUlZfQ0FSRFNdOworc3RhdGljIGludCBfX2RldmluaXQgc25kX2d1c2NsYXNzaWNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbikKK3sKKwlyZXR1cm4gZW5hYmxlW25dOworfQogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZ3VzY2xhc3NpY19jcmVhdGUoc3RydWN0IHNuZF9jYXJkICpjYXJkLAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuLCBzdHJ1Y3Qgc25kX2d1c19jYXJkICoqcmd1cykKK3sKKwlzdGF0aWMgbG9uZyBwb3NzaWJsZV9wb3J0c1tdID0gezB4MjIwLCAweDIzMCwgMHgyNDAsIDB4MjUwLCAweDI2MH07CisJc3RhdGljIGludCBwb3NzaWJsZV9pcnFzW10gPSB7NSwgMTEsIDEyLCA5LCA3LCAxNSwgMywgNCwgLTF9OworCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hc1tdID0gezUsIDYsIDcsIDEsIDMsIC0xfTsKIAotI2RlZmluZSBQRlgJImd1c2NsYXNzaWM6ICIKKwlpbnQgaSwgZXJyb3I7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9ndXNjbGFzc2ljX2RldGVjdChzdHJ1Y3Qgc25kX2d1c19jYXJkICogZ3VzKQorCWlmIChpcnFbbl0gPT0gU05EUlZfQVVUT19JUlEpIHsKKwkJaXJxW25dID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaXJxKHBvc3NpYmxlX2lycXMpOworCQlpZiAoaXJxW25dIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlFcbiIsCisJCQkJZGV2LT5idXNfaWQpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKwlpZiAoZG1hMVtuXSA9PSBTTkRSVl9BVVRPX0RNQSkgeworCQlkbWExW25dID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYXMpOworCQlpZiAoZG1hMVtuXSA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMVxuIiwKKwkJCQlkZXYtPmJ1c19pZCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCWlmIChkbWEyW25dID09IFNORFJWX0FVVE9fRE1BKSB7CisJCWRtYTJbbl0gPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hcyk7CisJCWlmIChkbWEyW25dIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUEyXG4iLAorCQkJCWRldi0+YnVzX2lkKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwlpZiAocG9ydFtuXSAhPSBTTkRSVl9BVVRPX1BPUlQpCisJCXJldHVybiBzbmRfZ3VzX2NyZWF0ZShjYXJkLCBwb3J0W25dLCBpcnFbbl0sIGRtYTFbbl0sIGRtYTJbbl0sCisJCQkJMCwgY2hhbm5lbHNbbl0sIHBjbV9jaGFubmVsc1tuXSwgMCwgcmd1cyk7CisKKwlpID0gMDsKKwlkbyB7CisJCXBvcnRbbl0gPSBwb3NzaWJsZV9wb3J0c1tpXTsKKwkJZXJyb3IgPSBzbmRfZ3VzX2NyZWF0ZShjYXJkLCBwb3J0W25dLCBpcnFbbl0sIGRtYTFbbl0sIGRtYTJbbl0sCisJCQkJMCwgY2hhbm5lbHNbbl0sIHBjbV9jaGFubmVsc1tuXSwgMCwgcmd1cyk7CisJfSB3aGlsZSAoZXJyb3IgPCAwICYmICsraSA8IEFSUkFZX1NJWkUocG9zc2libGVfcG9ydHMpKTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2d1c2NsYXNzaWNfZGV0ZWN0KHN0cnVjdCBzbmRfZ3VzX2NhcmQgKmd1cykKIHsKIAl1bnNpZ25lZCBjaGFyIGQ7CiAKQEAgLTk1LDE4NyArMTQ2LDEwNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc25kX2d1c2NsYXNzaWNfaW5pdChpbnQgZGV2LCBzdHJ1Y3Qgc25kX2d1c19jYXJkICogZ3VzKQorc3RhdGljIGludCBfX2RldmluaXQgc25kX2d1c2NsYXNzaWNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbikKIHsKLQlndXMtPmVxdWFsX2lycSA9IDA7Ci0JZ3VzLT5jb2RlY19mbGFnID0gMDsKLQlndXMtPm1heF9mbGFnID0gMDsKLQlndXMtPmpveXN0aWNrX2RhYyA9IGpveXN0aWNrX2RhY1tkZXZdOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZ3VzY2xhc3NpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWludCBkZXYgPSBwZGV2LT5pZDsKLQlzdGF0aWMgaW50IHBvc3NpYmxlX2lycXNbXSA9IHs1LCAxMSwgMTIsIDksIDcsIDE1LCAzLCA0LCAtMX07Ci0Jc3RhdGljIGludCBwb3NzaWJsZV9kbWFzW10gPSB7NSwgNiwgNywgMSwgMywgLTF9OwotCWludCB4aXJxLCB4ZG1hMSwgeGRtYTI7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBzbmRfZ3VzX2NhcmQgKmd1cyA9IE5VTEw7Ci0JaW50IGVycjsKKwlzdHJ1Y3Qgc25kX2d1c19jYXJkICpndXM7CisJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKHBjbV9jaGFubmVsc1tkZXZdIDwgMikKLQkJcGNtX2NoYW5uZWxzW2Rldl0gPSAyOworCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXhpcnEgPSBpcnFbZGV2XTsKLQlpZiAoeGlycSA9PSBTTkRSVl9BVVRPX0lSUSkgewotCQlpZiAoKHhpcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcykpIDwgMCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlFcbiIpOwotCQkJZXJyID0gLUVCVVNZOwotCQkJZ290byBfZXJyOwotCQl9Ci0JfQotCXhkbWExID0gZG1hMVtkZXZdOwotCWlmICh4ZG1hMSA9PSBTTkRSVl9BVVRPX0RNQSkgewotCQlpZiAoKHhkbWExID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfZG1hKHBvc3NpYmxlX2RtYXMpKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BMVxuIik7Ci0JCQllcnIgPSAtRUJVU1k7Ci0JCQlnb3RvIF9lcnI7Ci0JCX0KLQl9Ci0JeGRtYTIgPSBkbWEyW2Rldl07Ci0JaWYgKHhkbWEyID09IFNORFJWX0FVVE9fRE1BKSB7Ci0JCWlmICgoeGRtYTIgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hcykpIDwgMCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUEyXG4iKTsKLQkJCWVyciA9IC1FQlVTWTsKLQkJCWdvdG8gX2VycjsKLQkJfQotCX0KKwlpZiAocGNtX2NoYW5uZWxzW25dIDwgMikKKwkJcGNtX2NoYW5uZWxzW25dID0gMjsKIAotCWlmIChwb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCWVyciA9IHNuZF9ndXNfY3JlYXRlKGNhcmQsCi0JCQkJICAgICBwb3J0W2Rldl0sCi0JCQkJICAgICB4aXJxLCB4ZG1hMSwgeGRtYTIsCi0JCQkJICAgICAwLCBjaGFubmVsc1tkZXZdLCBwY21fY2hhbm5lbHNbZGV2XSwKLQkJCQkgICAgIDAsICZndXMpOwotCX0gZWxzZSB7Ci0JCS8qIGF1dG8tcHJvYmUgbGVnYWN5IHBvcnRzICovCi0JCXN0YXRpYyB1bnNpZ25lZCBsb25nIHBvc3NpYmxlX3BvcnRzW10gPSB7Ci0JCQkweDIyMCwgMHgyMzAsIDB4MjQwLCAweDI1MCwgMHgyNjAsCi0JCX07Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwb3NzaWJsZV9wb3J0cyk7IGkrKykgewotCQkJZXJyID0gc25kX2d1c19jcmVhdGUoY2FyZCwKLQkJCQkJICAgICBwb3NzaWJsZV9wb3J0c1tpXSwKLQkJCQkJICAgICB4aXJxLCB4ZG1hMSwgeGRtYTIsCi0JCQkJCSAgICAgMCwgY2hhbm5lbHNbZGV2XSwgcGNtX2NoYW5uZWxzW2Rldl0sCi0JCQkJCSAgICAgMCwgJmd1cyk7Ci0JCQlpZiAoZXJyID49IDApIHsKLQkJCQlwb3J0W2Rldl0gPSBwb3NzaWJsZV9wb3J0c1tpXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlpZiAoZXJyIDwgMCkKLQkJZ290byBfZXJyOworCWVycm9yID0gc25kX2d1c2NsYXNzaWNfY3JlYXRlKGNhcmQsIGRldiwgbiwgJmd1cyk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXQ7CiAKLQlpZiAoKGVyciA9IHNuZF9ndXNjbGFzc2ljX2RldGVjdChndXMpKSA8IDApCi0JCWdvdG8gX2VycjsKKwllcnJvciA9IHNuZF9ndXNjbGFzc2ljX2RldGVjdChndXMpOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gb3V0OwogCi0Jc25kX2d1c2NsYXNzaWNfaW5pdChkZXYsIGd1cyk7Ci0JaWYgKChlcnIgPSBzbmRfZ3VzX2luaXRpYWxpemUoZ3VzKSkgPCAwKQotCQlnb3RvIF9lcnI7CisJZ3VzLT5qb3lzdGlja19kYWMgPSBqb3lzdGlja19kYWNbbl07CiAKKwllcnJvciA9IHNuZF9ndXNfaW5pdGlhbGl6ZShndXMpOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gb3V0OworCisJZXJyb3IgPSAtRU5PREVWOwogCWlmIChndXMtPm1heF9mbGFnIHx8IGd1cy0+ZXNzX2ZsYWcpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIkdVUyBDbGFzc2ljIG9yIEFDRSBzb3VuZGNhcmQgd2FzIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgZ3VzLT5nZjEucG9ydCk7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gX2VycjsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IEdVUyBDbGFzc2ljIG9yIEFDRSBzb3VuZGNhcmQgd2FzICIKKwkJCSJub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGRldi0+YnVzX2lkLCBndXMtPmdmMS5wb3J0KTsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKChlcnIgPSBzbmRfZ2YxX25ld19taXhlcihndXMpKSA8IDApCi0JCWdvdG8gX2VycjsKKwllcnJvciA9IHNuZF9nZjFfbmV3X21peGVyKGd1cyk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXQ7CiAKLQlpZiAoKGVyciA9IHNuZF9nZjFfcGNtX25ldyhndXMsIDAsIDAsIE5VTEwpKSA8IDApCi0JCWdvdG8gX2VycjsKKwllcnJvciA9IHNuZF9nZjFfcGNtX25ldyhndXMsIDAsIDAsIE5VTEwpOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gb3V0OwogCiAJaWYgKCFndXMtPmFjZV9mbGFnKSB7Ci0JCWlmICgoZXJyID0gc25kX2dmMV9yYXdtaWRpX25ldyhndXMsIDAsIE5VTEwpKSA8IDApCi0JCQlnb3RvIF9lcnI7CisJCWVycm9yID0gc25kX2dmMV9yYXdtaWRpX25ldyhndXMsIDAsIE5VTEwpOworCQlpZiAoZXJyb3IgPCAwKQorCQkJZ290byBvdXQ7CiAJfQotCXNwcmludGYoY2FyZC0+bG9uZ25hbWUgKyBzdHJsZW4oY2FyZC0+bG9uZ25hbWUpLCAiIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCIsIGd1cy0+Z2YxLnBvcnQsIHhpcnEsIHhkbWExKTsKLQlpZiAoeGRtYTIgPj0gMCkKLQkJc3ByaW50ZihjYXJkLT5sb25nbmFtZSArIHN0cmxlbihjYXJkLT5sb25nbmFtZSksICImJWQiLCB4ZG1hMik7CiAKLQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwZGV2LT5kZXYpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUgKyBzdHJsZW4oY2FyZC0+bG9uZ25hbWUpLAorCQkiIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCIsCisJCWd1cy0+Z2YxLnBvcnQsIGd1cy0+Z2YxLmlycSwgZ3VzLT5nZjEuZG1hMSk7CiAKLQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApCi0JCWdvdG8gX2VycjsKKwlpZiAoZ3VzLT5nZjEuZG1hMiA+PSAwKQorCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lICsgc3RybGVuKGNhcmQtPmxvbmduYW1lKSwKKwkJCSImJWQiLCBndXMtPmdmMS5kbWEyKTsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgZGV2KTsKKworCWVycm9yID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXQ7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBjYXJkKTsKIAlyZXR1cm4gMDsKIAotIF9lcnI6Ci0Jc25kX2NhcmRfZnJlZShjYXJkKTsKLQlyZXR1cm4gZXJyOworb3V0OglzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgc25kX2d1c2NsYXNzaWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9ndXNjbGFzc2ljX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKQogewotCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBHVVNDTEFTU0lDX0RSSVZFUgkic25kX2d1c2NsYXNzaWMiCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9ndXNjbGFzc2ljX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXNhX2RyaXZlciBzbmRfZ3VzY2xhc3NpY19kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF9ndXNjbGFzc2ljX21hdGNoLAogCS5wcm9iZQkJPSBzbmRfZ3VzY2xhc3NpY19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9ndXNjbGFzc2ljX3JlbW92ZSksCi0JLyogRklYTUU6IHN1c3BlbmQvcmVzdW1lICovCisjaWYgMAkvKiBGSVhNRSAqLworCS5zdXNwZW5kCT0gc25kX2d1c2NsYXNzaWNfc3VzcGVuZCwKKwkucmVtb3ZlCQk9IHNuZF9ndXNjbGFzc2ljX3JlbW92ZSwKKyNlbmRpZgogCS5kcml2ZXIJCT0gewotCQkubmFtZQk9IEdVU0NMQVNTSUNfRFJJVkVSCi0JfSwKKwkJLm5hbWUJPSBERVZfTkFNRQorCX0KIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdF9vcl9tb2R1bGUgc25kX2d1c2NsYXNzaWNfdW5yZWdpc3Rlcl9hbGwodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldmljZXMpOyArK2kpCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZXNbaV0pOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfZ3VzY2xhc3NpY19kcml2ZXIpOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfZ3VzY2xhc3NpY19pbml0KHZvaWQpCiB7Ci0JaW50IGksIGNhcmRzLCBlcnI7Ci0KLQllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNuZF9ndXNjbGFzc2ljX2RyaXZlcik7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQljYXJkcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKLQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwotCQlpZiAoISBlbmFibGVbaV0pCi0JCQljb250aW51ZTsKLQkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShHVVNDTEFTU0lDX0RSSVZFUiwKLQkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKLQkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlkZXZpY2VzW2ldID0gZGV2aWNlOwotCQljYXJkcysrOwotCX0KLQlpZiAoIWNhcmRzKSB7Ci0jaWZkZWYgTU9EVUxFCi0JCXByaW50ayhLRVJOX0VSUiAiR1VTIENsYXNzaWMgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7Ci0jZW5kaWYKLQkJc25kX2d1c2NsYXNzaWNfdW5yZWdpc3Rlcl9hbGwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJldHVybiAwOworCXJldHVybiBpc2FfcmVnaXN0ZXJfZHJpdmVyKCZzbmRfZ3VzY2xhc3NpY19kcml2ZXIsIFNORFJWX0NBUkRTKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9ndXNjbGFzc2ljX2V4aXQodm9pZCkKIHsKLQlzbmRfZ3VzY2xhc3NpY191bnJlZ2lzdGVyX2FsbCgpOworCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmc25kX2d1c2NsYXNzaWNfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQoYWxzYV9jYXJkX2d1c2NsYXNzaWNfaW5pdCkKLW1vZHVsZV9leGl0KGFsc2FfY2FyZF9ndXNjbGFzc2ljX2V4aXQpCittb2R1bGVfaW5pdChhbHNhX2NhcmRfZ3VzY2xhc3NpY19pbml0KTsKK21vZHVsZV9leGl0KGFsc2FfY2FyZF9ndXNjbGFzc2ljX2V4aXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwppbmRleCA0ZjU1ZmMzLi4wYWVhYTZjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2EuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtMzcsOCArMzcsMTEgQEAKICNkZWZpbmUgU05EUlZfTEVHQUNZX0ZJTkRfRlJFRV9ETUEKICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKKyNkZWZpbmUgQ1JEX05BTUUgIkdyYXZpcyBVbHRyYVNvdW5kIEV4dHJlbWUiCisjZGVmaW5lIERFVl9OQU1FICJndXNleHRyZW1lIgorCitNT0RVTEVfREVTQ1JJUFRJT04oQ1JEX05BTUUpOwogTU9EVUxFX0FVVEhPUigiSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHcmF2aXMgVWx0cmFTb3VuZCBFeHRyZW1lIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tHcmF2aXMsVWx0cmFTb3VuZCBFeHRyZW1lfX0iKTsKIApAQCAtNTksNDMgKzYyLDEwNyBAQAogc3RhdGljIGludCBwY21fY2hhbm5lbHNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAyfTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBHVVMgRXh0cmVtZSBzb3VuZGNhcmQuIik7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yICIgQ1JEX05BTUUgIiBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIEdVUyBFeHRyZW1lIHNvdW5kY2FyZC4iKTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yICIgQ1JEX05BTUUgIiBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEdVUyBFeHRyZW1lIHNvdW5kY2FyZC4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlICIgQ1JEX05BTUUgIiBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkocG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBvcnQsICJQb3J0ICMgZm9yIEdVUyBFeHRyZW1lIGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydCwgIlBvcnQgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShnZjFfcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGdmMV9wb3J0LCAiR0YxIHBvcnQgIyBmb3IgR1VTIEV4dHJlbWUgZHJpdmVyIChvcHRpb25hbCkuIik7CitNT0RVTEVfUEFSTV9ERVNDKGdmMV9wb3J0LCAiR0YxIHBvcnQgIyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlciAob3B0aW9uYWwpLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9wb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobXB1X3BvcnQsICJNUFUtNDAxIHBvcnQgIyBmb3IgR1VTIEV4dHJlbWUgZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhtcHVfcG9ydCwgIk1QVS00MDEgcG9ydCAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRICMgZm9yIEdVUyBFeHRyZW1lIGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lycSwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobXB1X2lycSwgIk1QVS00MDEgSVJRICMgZm9yIEdVUyBFeHRyZW1lIGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0MobXB1X2lycSwgIk1QVS00MDEgSVJRICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZ2YxX2lycSwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZ2YxX2lycSwgIkdGMSBJUlEgIyBmb3IgR1VTIEV4dHJlbWUgZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhnZjFfaXJxLCAiR0YxIElSUSAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGRtYTgsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRtYTgsICI4LWJpdCBETUEgIyBmb3IgR1VTIEV4dHJlbWUgZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhkbWE4LCAiOC1iaXQgRE1BICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZG1hMSwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZG1hMSwgIkdGMSBETUEgIyBmb3IgR1VTIEV4dHJlbWUgZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhkbWExLCAiR0YxIERNQSAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGpveXN0aWNrX2RhYywgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Moam95c3RpY2tfZGFjLCAiSm95c3RpY2sgREFDIGxldmVsIDAuNTlWLTQuNTJWIG9yIDAuMzg5Vi0yLjk4ViBmb3IgR1VTIEV4dHJlbWUgZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhqb3lzdGlja19kYWMsICJKb3lzdGljayBEQUMgbGV2ZWwgMC41OVYtNC41MlYgb3IgMC4zODlWLTIuOThWIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGNoYW5uZWxzLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhjaGFubmVscywgIkdGMSBjaGFubmVscyBmb3IgR1VTIEV4dHJlbWUgZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhjaGFubmVscywgIkdGMSBjaGFubmVscyBmb3IgIiBDUkRfTkFNRSAiIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShwY21fY2hhbm5lbHMsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBjbV9jaGFubmVscywgIlJlc2VydmVkIFBDTSBjaGFubmVscyBmb3IgR1VTIEV4dHJlbWUgZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhwY21fY2hhbm5lbHMsICJSZXNlcnZlZCBQQ00gY2hhbm5lbHMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW1NORFJWX0NBUkRTXTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9ndXNleHRyZW1lX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pCit7CisJcmV0dXJuIGVuYWJsZVtuXTsKK30KIAorc3RhdGljIGludCBfX2RldmluaXQgc25kX2d1c2V4dHJlbWVfZXMxNjg4X2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4sIHN0cnVjdCBzbmRfZXMxNjg4ICoqcmNoaXApCit7CisJc3RhdGljIGxvbmcgcG9zc2libGVfcG9ydHNbXSA9IHsweDIyMCwgMHgyNDAsIDB4MjYwfTsKKwlzdGF0aWMgaW50IHBvc3NpYmxlX2lycXNbXSA9IHs1LCA5LCAxMCwgNywgLTF9OworCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hc1tdID0gezEsIDMsIDAsIC0xfTsKIAotI2RlZmluZSBQRlgJImd1c2V4dHJlbWU6ICIKKwlpbnQgaSwgZXJyb3I7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9ndXNleHRyZW1lX2RldGVjdChpbnQgZGV2LAotCQkJCQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCi0JCQkJCXN0cnVjdCBzbmRfZ3VzX2NhcmQgKiBndXMsCi0JCQkJCXN0cnVjdCBzbmRfZXMxNjg4ICplczE2ODgpCisJaWYgKGlycVtuXSA9PSBTTkRSVl9BVVRPX0lSUSkgeworCQlpcnFbbl0gPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcyk7CisJCWlmIChpcnFbbl0gPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUSAiCisJCQkJImZvciBFUzE2ODhcbiIsIGRldi0+YnVzX2lkKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisJaWYgKGRtYThbbl0gPT0gU05EUlZfQVVUT19ETUEpIHsKKwkJZG1hOFtuXSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzKTsKKwkJaWYgKGRtYThbbl0gPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQSAiCisJCQkJImZvciBFUzE2ODhcbiIsIGRldi0+YnVzX2lkKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwlpZiAocG9ydFtuXSAhPSBTTkRSVl9BVVRPX1BPUlQpCisJCXJldHVybiBzbmRfZXMxNjg4X2NyZWF0ZShjYXJkLCBwb3J0W25dLCBtcHVfcG9ydFtuXSwgaXJxW25dLAorCQkJCW1wdV9pcnFbbl0sIGRtYThbbl0sIEVTMTY4OF9IV18xNjg4LCByY2hpcCk7CisKKwlpID0gMDsKKwlkbyB7CisJCXBvcnRbbl0gPSBwb3NzaWJsZV9wb3J0c1tpXTsKKwkJZXJyb3IgPSBzbmRfZXMxNjg4X2NyZWF0ZShjYXJkLCBwb3J0W25dLCBtcHVfcG9ydFtuXSwgaXJxW25dLAorCQkJCW1wdV9pcnFbbl0sIGRtYThbbl0sIEVTMTY4OF9IV18xNjg4LCByY2hpcCk7CisJfSB3aGlsZSAoZXJyb3IgPCAwICYmICsraSA8IEFSUkFZX1NJWkUocG9zc2libGVfcG9ydHMpKTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2d1c2V4dHJlbWVfZ3VzX2NhcmRfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKKwkJc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbiwgc3RydWN0IHNuZF9ndXNfY2FyZCAqKnJndXMpCit7CisJc3RhdGljIGludCBwb3NzaWJsZV9pcnFzW10gPSB7MTEsIDEyLCAxNSwgOSwgNSwgNywgMywgLTF9OworCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hc1tdID0gezUsIDYsIDcsIDMsIDEsIC0xfTsKKworCWlmIChnZjFfaXJxW25dID09IFNORFJWX0FVVE9fSVJRKSB7CisJCWdmMV9pcnFbbl0gPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcyk7CisJCWlmIChnZjFfaXJxW25dIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlEgIgorCQkJCSJmb3IgR0YxXG4iLCBkZXYtPmJ1c19pZCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCWlmIChkbWExW25dID09IFNORFJWX0FVVE9fRE1BKSB7CisJCWRtYTFbbl0gPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZG1hcyk7CisJCWlmIChkbWExW25dIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUEgIgorCQkJCSJmb3IgR0YxXG4iLCBkZXYtPmJ1c19pZCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCXJldHVybiBzbmRfZ3VzX2NyZWF0ZShjYXJkLCBnZjFfcG9ydFtuXSwgZ2YxX2lycVtuXSwgZG1hMVtuXSwgLTEsCisJCQkwLCBjaGFubmVsc1tuXSwgcGNtX2NoYW5uZWxzW25dLCAwLCByZ3VzKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2d1c2V4dHJlbWVfZGV0ZWN0KHN0cnVjdCBzbmRfZ3VzX2NhcmQgKmd1cywKKwlzdHJ1Y3Qgc25kX2VzMTY4OCAqZXMxNjg4KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciBkOwpAQCAtMTE3LDEyICsxODQsMTMgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXMxNjg4LT5taXhlcl9sb2NrLCBmbGFncyk7CiAJc25kX2VzMTY4OF9taXhlcl93cml0ZShlczE2ODgsIDB4NDAsIDB4MGIpOwkvKiBkb24ndCBjaGFuZ2UhISEgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlczE2ODgtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZlczE2ODgtPnJlZ19sb2NrLCBmbGFncyk7Ci0Jb3V0YihnZjFfcG9ydFtkZXZdICYgMHgwNDAgPyAyIDogMCwgRVMxNjg4UChlczE2ODgsIElOSVQxKSk7CisJb3V0YihndXMtPmdmMS5wb3J0ICYgMHgwNDAgPyAyIDogMCwgRVMxNjg4UChlczE2ODgsIElOSVQxKSk7CiAJb3V0YigwLCAweDIwMSk7Ci0Jb3V0YihnZjFfcG9ydFtkZXZdICYgMHgwMjAgPyAyIDogMCwgRVMxNjg4UChlczE2ODgsIElOSVQxKSk7CisJb3V0YihndXMtPmdmMS5wb3J0ICYgMHgwMjAgPyAyIDogMCwgRVMxNjg4UChlczE2ODgsIElOSVQxKSk7CiAJb3V0YigwLCAweDIwMSk7Ci0Jb3V0YihnZjFfcG9ydFtkZXZdICYgMHgwMTAgPyAzIDogMSwgRVMxNjg4UChlczE2ODgsIElOSVQxKSk7CisJb3V0YihndXMtPmdmMS5wb3J0ICYgMHgwMTAgPyAzIDogMSwgRVMxNjg4UChlczE2ODgsIElOSVQxKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXMxNjg4LT5yZWdfbG9jaywgZmxhZ3MpOwogCiAJdWRlbGF5KDEwMCk7CkBAIC0xMzksMjUzICsyMDcsMTcyIEBACiAJCXNuZF9wcmludGRkKCJbMHglbHhdIGNoZWNrIDIgZmFpbGVkIC0gMHgleFxuIiwgZ3VzLT5nZjEucG9ydCwgZCk7CiAJCXJldHVybiAtRUlPOwogCX0KLQlyZXR1cm4gMDsKLX0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHNuZF9ndXNleHRyZW1lX2luaXQoaW50IGRldiwgc3RydWN0IHNuZF9ndXNfY2FyZCAqIGd1cykKLXsKLQlndXMtPmpveXN0aWNrX2RhYyA9IGpveXN0aWNrX2RhY1tkZXZdOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZ3VzZXh0cmVtZV9taXhlcihzdHJ1Y3Qgc25kX2VzMTY4OCAqY2hpcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBjaGlwLT5jYXJkOwogCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQxLCBpZDI7Ci0JaW50IGVycjsKKwlpbnQgZXJyb3I7CiAKIAltZW1zZXQoJmlkMSwgMCwgc2l6ZW9mKGlkMSkpOwogCW1lbXNldCgmaWQyLCAwLCBzaXplb2YoaWQyKSk7CiAJaWQxLmlmYWNlID0gaWQyLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVI7CisKIAkvKiByZWFzc2lnbiBBVVggdG8gU1lOVEhFU0laRVIgKi8KIAlzdHJjcHkoaWQxLm5hbWUsICJBdXggUGxheWJhY2sgVm9sdW1lIik7CiAJc3RyY3B5KGlkMi5uYW1lLCAiU3ludGggUGxheWJhY2sgVm9sdW1lIik7Ci0JaWYgKChlcnIgPSBzbmRfY3RsX3JlbmFtZV9pZChjYXJkLCAmaWQxLCAmaWQyKSkgPCAwKQotCQlyZXR1cm4gZXJyOworCWVycm9yID0gc25kX2N0bF9yZW5hbWVfaWQoY2FyZCwgJmlkMSwgJmlkMik7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCiAJLyogcmVhc3NpZ24gTWFzdGVyIFBsYXliYWNrIFN3aXRjaCB0byBTeW50aCBQbGF5YmFjayBTd2l0Y2ggKi8KIAlzdHJjcHkoaWQxLm5hbWUsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIik7CiAJc3RyY3B5KGlkMi5uYW1lLCAiU3ludGggUGxheWJhY2sgU3dpdGNoIik7Ci0JaWYgKChlcnIgPSBzbmRfY3RsX3JlbmFtZV9pZChjYXJkLCAmaWQxLCAmaWQyKSkgPCAwKQotCQlyZXR1cm4gZXJyOworCWVycm9yID0gc25kX2N0bF9yZW5hbWVfaWQoY2FyZCwgJmlkMSwgJmlkMik7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9ndXNleHRyZW1lX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZ3VzZXh0cmVtZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuKQogewotCWludCBkZXYgPSBwZGV2LT5pZDsKLQlzdGF0aWMgaW50IHBvc3NpYmxlX2Vzc19pcnFzW10gPSB7NSwgOSwgMTAsIDcsIC0xfTsKLQlzdGF0aWMgaW50IHBvc3NpYmxlX2Vzc19kbWFzW10gPSB7MSwgMywgMCwgLTF9OwotCXN0YXRpYyBpbnQgcG9zc2libGVfZ2YxX2lycXNbXSA9IHs1LCAxMSwgMTIsIDksIDcsIDE1LCAzLCAtMX07Ci0Jc3RhdGljIGludCBwb3NzaWJsZV9nZjFfZG1hc1tdID0gezUsIDYsIDcsIDEsIDMsIC0xfTsKLQlpbnQgeGdmMV9pcnEsIHhnZjFfZG1hLCB4ZXNzX2lycSwgeG1wdV9pcnEsIHhlc3NfZG1hOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2d1c19jYXJkICpndXM7CiAJc3RydWN0IHNuZF9lczE2ODggKmVzMTY4ODsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7Ci0JaW50IGVycjsKKwlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQl4Z2YxX2lycSA9IGdmMV9pcnFbZGV2XTsKLQlpZiAoeGdmMV9pcnEgPT0gU05EUlZfQVVUT19JUlEpIHsKLQkJaWYgKCh4Z2YxX2lycSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lycShwb3NzaWJsZV9nZjFfaXJxcykpIDwgMCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBmaW5kIGEgZnJlZSBJUlEgZm9yIEdGMVxuIik7Ci0JCQllcnIgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQl4ZXNzX2lycSA9IGlycVtkZXZdOwotCWlmICh4ZXNzX2lycSA9PSBTTkRSVl9BVVRPX0lSUSkgewotCQlpZiAoKHhlc3NfaXJxID0gc25kX2xlZ2FjeV9maW5kX2ZyZWVfaXJxKHBvc3NpYmxlX2Vzc19pcnFzKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUSBmb3IgRVMxNjg4XG4iKTsKLQkJCWVyciA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCWlmIChtcHVfcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkKLQkJbXB1X3BvcnRbZGV2XSA9IDA7Ci0JeG1wdV9pcnEgPSBtcHVfaXJxW2Rldl07Ci0JaWYgKHhtcHVfaXJxID4gMTUpCi0JCXhtcHVfaXJxID0gLTE7Ci0JeGdmMV9kbWEgPSBkbWExW2Rldl07Ci0JaWYgKHhnZjFfZG1hID09IFNORFJWX0FVVE9fRE1BKSB7Ci0JCWlmICgoeGdmMV9kbWEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZ2YxX2RtYXMpKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BIGZvciBHRjFcbiIpOwotCQkJZXJyID0gLUVCVVNZOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0JeGVzc19kbWEgPSBkbWE4W2Rldl07Ci0JaWYgKHhlc3NfZG1hID09IFNORFJWX0FVVE9fRE1BKSB7Ci0JCWlmICgoeGVzc19kbWEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9kbWEocG9zc2libGVfZXNzX2RtYXMpKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gZmluZCBhIGZyZWUgRE1BIGZvciBFUzE2ODhcbiIpOwotCQkJZXJyID0gLUVCVVNZOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9CisJaWYgKG1wdV9wb3J0W25dID09IFNORFJWX0FVVE9fUE9SVCkKKwkJbXB1X3BvcnRbbl0gPSAwOwogCi0JaWYgKHBvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJZXJyID0gc25kX2VzMTY4OF9jcmVhdGUoY2FyZCwgcG9ydFtkZXZdLCBtcHVfcG9ydFtkZXZdLAotCQkJCQl4ZXNzX2lycSwgeG1wdV9pcnEsIHhlc3NfZG1hLAotCQkJCQlFUzE2ODhfSFdfMTY4OCwgJmVzMTY4OCk7Ci0JfSBlbHNlIHsKLQkJLyogYXV0by1wcm9iZSBsZWdhY3kgcG9ydHMgKi8KLQkJc3RhdGljIHVuc2lnbmVkIGxvbmcgcG9zc2libGVfcG9ydHNbXSA9IHsweDIyMCwgMHgyNDAsIDB4MjYwfTsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBvc3NpYmxlX3BvcnRzKTsgaSsrKSB7Ci0JCQllcnIgPSBzbmRfZXMxNjg4X2NyZWF0ZShjYXJkLAotCQkJCQkJcG9zc2libGVfcG9ydHNbaV0sCi0JCQkJCQltcHVfcG9ydFtkZXZdLAotCQkJCQkJeGVzc19pcnEsIHhtcHVfaXJxLCB4ZXNzX2RtYSwKLQkJCQkJCUVTMTY4OF9IV18xNjg4LCAmZXMxNjg4KTsKLQkJCWlmIChlcnIgPj0gMCkgewotCQkJCXBvcnRbZGV2XSA9IHBvc3NpYmxlX3BvcnRzW2ldOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCWlmIChlcnIgPCAwKQorCWlmIChtcHVfaXJxW25dID4gMTUpCisJCW1wdV9pcnFbbl0gPSAtMTsKKworCWVycm9yID0gc25kX2d1c2V4dHJlbWVfZXMxNjg4X2NyZWF0ZShjYXJkLCBkZXYsIG4sICZlczE2ODgpOworCWlmIChlcnJvciA8IDApCiAJCWdvdG8gb3V0OwogCi0JaWYgKGdmMV9wb3J0W2Rldl0gPCAwKQotCQlnZjFfcG9ydFtkZXZdID0gcG9ydFtkZXZdICsgMHgyMDsKLQlpZiAoKGVyciA9IHNuZF9ndXNfY3JlYXRlKGNhcmQsCi0JCQkJICBnZjFfcG9ydFtkZXZdLAotCQkJCSAgeGdmMV9pcnEsCi0JCQkJICB4Z2YxX2RtYSwKLQkJCQkgIC0xLAotCQkJCSAgMCwgY2hhbm5lbHNbZGV2XSwKLQkJCQkgIHBjbV9jaGFubmVsc1tkZXZdLCAwLAotCQkJCSAgJmd1cykpIDwgMCkKKwlpZiAoZ2YxX3BvcnRbbl0gPCAwKQorCQlnZjFfcG9ydFtuXSA9IGVzMTY4OC0+cG9ydCArIDB4MjA7CisKKwllcnJvciA9IHNuZF9ndXNleHRyZW1lX2d1c19jYXJkX2NyZWF0ZShjYXJkLCBkZXYsIG4sICZndXMpOworCWlmIChlcnJvciA8IDApCiAJCWdvdG8gb3V0OwogCi0JaWYgKChlcnIgPSBzbmRfZ3VzZXh0cmVtZV9kZXRlY3QoZGV2LCBjYXJkLCBndXMsIGVzMTY4OCkpIDwgMCkKKwllcnJvciA9IHNuZF9ndXNleHRyZW1lX2RldGVjdChndXMsIGVzMTY4OCk7CisJaWYgKGVycm9yIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlzbmRfZ3VzZXh0cmVtZV9pbml0KGRldiwgZ3VzKTsKLQlpZiAoKGVyciA9IHNuZF9ndXNfaW5pdGlhbGl6ZShndXMpKSA8IDApCisJZ3VzLT5qb3lzdGlja19kYWMgPSBqb3lzdGlja19kYWNbbl07CisKKwllcnJvciA9IHNuZF9ndXNfaW5pdGlhbGl6ZShndXMpOworCWlmIChlcnJvciA8IDApCiAJCWdvdG8gb3V0OwogCisJZXJyb3IgPSAtRU5PREVWOwogCWlmICghZ3VzLT5lc3NfZmxhZykgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiR1VTIEV4dHJlbWUgc291bmRjYXJkIHdhcyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGd1cy0+Z2YxLnBvcnQpOwotCQllcnIgPSAtRU5PREVWOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlczogR1VTIEV4dHJlbWUgc291bmRjYXJkIHdhcyBub3QgIgorCQkJImRldGVjdGVkIGF0IDB4JWx4XG4iLCBkZXYtPmJ1c19pZCwgZ3VzLT5nZjEucG9ydCk7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoKGVyciA9IHNuZF9lczE2ODhfcGNtKGVzMTY4OCwgMCwgTlVMTCkpIDwgMCkKKwlndXMtPmNvZGVjX2ZsYWcgPSAxOworCisJZXJyb3IgPSBzbmRfZXMxNjg4X3BjbShlczE2ODgsIDAsIE5VTEwpOworCWlmIChlcnJvciA8IDApCiAJCWdvdG8gb3V0OwogCi0JaWYgKChlcnIgPSBzbmRfZXMxNjg4X21peGVyKGVzMTY4OCkpIDwgMCkKKwllcnJvciA9IHNuZF9lczE2ODhfbWl4ZXIoZXMxNjg4KTsKKwlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dDsKIAogCXNuZF9jb21wb25lbnRfYWRkKGNhcmQsICJFUzE2ODgiKTsKLQlpZiAocGNtX2NoYW5uZWxzW2Rldl0gPiAwKSB7Ci0JCWlmICgoZXJyID0gc25kX2dmMV9wY21fbmV3KGd1cywgMSwgMSwgTlVMTCkpIDwgMCkKKworCWlmIChwY21fY2hhbm5lbHNbbl0gPiAwKSB7CisJCWVycm9yID0gc25kX2dmMV9wY21fbmV3KGd1cywgMSwgMSwgTlVMTCk7CisJCWlmIChlcnJvciA8IDApCiAJCQlnb3RvIG91dDsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfZ2YxX25ld19taXhlcihndXMpKSA8IDApCisKKwllcnJvciA9IHNuZF9nZjFfbmV3X21peGVyKGd1cyk7CisJaWYgKGVycm9yIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoKGVyciA9IHNuZF9ndXNleHRyZW1lX21peGVyKGVzMTY4OCkpIDwgMCkKKwllcnJvciA9IHNuZF9ndXNleHRyZW1lX21peGVyKGVzMTY4OCk7CisJaWYgKGVycm9yIDwgMCkKIAkJZ290byBvdXQ7CiAKIAlpZiAoc25kX29wbDNfY3JlYXRlKGNhcmQsIGVzMTY4OC0+cG9ydCwgZXMxNjg4LT5wb3J0ICsgMiwKLQkJCSAgICBPUEwzX0hXX09QTDMsIDAsICZvcGwzKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZ3VzZXh0cmVtZTogb3BsMyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsIGVzMTY4OC0+cG9ydCk7Ci0JfSBlbHNlIHsKLQkJaWYgKChlcnIgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMiwgTlVMTCkpIDwgMCkKKwkJCU9QTDNfSFdfT1BMMywgMCwgJm9wbDMpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogb3BsMyBub3QgZGV0ZWN0ZWQgYXQgMHglbHhcbiIsCisJCQlkZXYtPmJ1c19pZCwgZXMxNjg4LT5wb3J0KTsKKwllbHNlIHsKKwkJZXJyb3IgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMiwgTlVMTCk7CisJCWlmIChlcnJvciA8IDApCiAJCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZXMxNjg4LT5tcHVfcG9ydCA+PSAweDMwMCAmJgotCSAgICAoZXJyID0gc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfRVMxNjg4LAotCQkJCQkgICAgICAgZXMxNjg4LT5tcHVfcG9ydCwgMCwKLQkJCQkJICAgICAgIHhtcHVfaXJxLAotCQkJCQkgICAgICAgSVJRRl9ESVNBQkxFRCwKLQkJCQkJICAgICAgIE5VTEwpKSA8IDApCisJaWYgKGVzMTY4OC0+bXB1X3BvcnQgPj0gMHgzMDApIHsKKwkJZXJyb3IgPSBzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19FUzE2ODgsCisJCQkJZXMxNjg4LT5tcHVfcG9ydCwgMCwKKwkJCQltcHVfaXJxW25dLCBJUlFGX0RJU0FCTEVELCBOVUxMKTsKKwkJaWYgKGVycm9yIDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICJHcmF2aXMgVWx0cmFTb3VuZCBFeHRyZW1lIGF0IDB4JWx4LCAiCisJCSJpcnEgJWkmJWksIGRtYSAlaSYlaSIsIGVzMTY4OC0+cG9ydCwKKwkJZ3VzLT5nZjEuaXJxLCBlczE2ODgtPmlycSwgZ3VzLT5nZjEuZG1hMSwgZXMxNjg4LT5kbWE4KTsKKworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgZGV2KTsKKworCWVycm9yID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiR3JhdmlzIFVsdHJhU291bmQgRXh0cmVtZSBhdCAweCVseCwgaXJxICVpJiVpLCBkbWEgJWkmJWkiLAotCQllczE2ODgtPnBvcnQsIHhnZjFfaXJxLCB4ZXNzX2lycSwgeGdmMV9kbWEsIHhlc3NfZG1hKTsKLQotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBkZXYtPmRldik7Ci0KLQlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApCi0JCWdvdG8gb3V0OwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgY2FyZCk7CiAJcmV0dXJuIDA7CiAKLSAgICAgIG91dDoKLQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCXJldHVybiBlcnI7CitvdXQ6CXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfZ3VzZXh0cmVtZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX2d1c2V4dHJlbWVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pCiB7Ci0Jc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOworCXNuZF9jYXJkX2ZyZWUoZGV2X2dldF9kcnZkYXRhKGRldikpOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEdVU0VYVFJFTUVfRFJJVkVSCSJzbmRfZ3VzZXh0cmVtZSIKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX2d1c2V4dHJlbWVfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9ndXNleHRyZW1lX2RyaXZlciA9IHsKKwkubWF0Y2gJCT0gc25kX2d1c2V4dHJlbWVfbWF0Y2gsCiAJLnByb2JlCQk9IHNuZF9ndXNleHRyZW1lX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2d1c2V4dHJlbWVfcmVtb3ZlKSwKLQkvKiBGSVhNRTogc3VzcGVuZC9yZXN1bWUgKi8KKwkucmVtb3ZlCQk9IHNuZF9ndXNleHRyZW1lX3JlbW92ZSwKKyNpZiAwCS8qIEZJWE1FICovCisJLnN1c3BlbmQJPSBzbmRfZ3VzZXh0cmVtZV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc25kX2d1c2V4dHJlbWVfcmVzdW1lLAorI2VuZGlmCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gR1VTRVhUUkVNRV9EUklWRVIKLQl9LAorCQkubmFtZQk9IERFVl9OQU1FCisJfQogfTsKIAotc3RhdGljIHZvaWQgX19pbml0X29yX21vZHVsZSBzbmRfZ3VzZXh0cmVtZV91bnJlZ2lzdGVyX2FsbCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2aWNlcyk7ICsraSkKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlc1tpXSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9ndXNleHRyZW1lX2RyaXZlcik7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9ndXNleHRyZW1lX2luaXQodm9pZCkKIHsKLQlpbnQgaSwgY2FyZHMsIGVycjsKLQotCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX2d1c2V4dHJlbWVfZHJpdmVyKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWNhcmRzID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewotCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7Ci0JCWlmICghIGVuYWJsZVtpXSkKLQkJCWNvbnRpbnVlOwotCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEdVU0VYVFJFTUVfRFJJVkVSLAotCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKQotCQkJY29udGludWU7Ci0JCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgewotCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWRldmljZXNbaV0gPSBkZXZpY2U7Ci0JCWNhcmRzKys7Ci0JfQotCWlmICghY2FyZHMpIHsKLSNpZmRlZiBNT0RVTEUKLQkJcHJpbnRrKEtFUk5fRVJSICJHVVMgRXh0cmVtZSBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKLSNlbmRpZgotCQlzbmRfZ3VzZXh0cmVtZV91bnJlZ2lzdGVyX2FsbCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGlzYV9yZWdpc3Rlcl9kcml2ZXIoJnNuZF9ndXNleHRyZW1lX2RyaXZlciwgU05EUlZfQ0FSRFMpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2d1c2V4dHJlbWVfZXhpdCh2b2lkKQogewotCXNuZF9ndXNleHRyZW1lX3VucmVnaXN0ZXJfYWxsKCk7CisJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZzbmRfZ3VzZXh0cmVtZV9kcml2ZXIpOwogfQogCi1tb2R1bGVfaW5pdChhbHNhX2NhcmRfZ3VzZXh0cmVtZV9pbml0KQotbW9kdWxlX2V4aXQoYWxzYV9jYXJkX2d1c2V4dHJlbWVfZXhpdCkKK21vZHVsZV9pbml0KGFsc2FfY2FyZF9ndXNleHRyZW1lX2luaXQpOworbW9kdWxlX2V4aXQoYWxzYV9jYXJkX2d1c2V4dHJlbWVfZXhpdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c21heC5jIGIvc291bmQvaXNhL2d1cy9ndXNtYXguYwppbmRleCBkMWFkOTBjLi43MDg3ODNkIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTcyLDggKzcyLDYgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShwY21fY2hhbm5lbHMsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBjbV9jaGFubmVscywgIlJlc2VydmVkIFBDTSBjaGFubmVscyBmb3IgR1VTIE1BWCBkcml2ZXIuIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW1NORFJWX0NBUkRTXTsKLQogc3RydWN0IHNuZF9ndXNtYXggewogCWludCBpcnE7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwpAQCAtMjA1LDkgKzIwMywxMyBAQAogCQlmcmVlX2lycShtYXhjYXJkLT5pcnEsICh2b2lkICopbWF4Y2FyZCk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9ndXNtYXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9ndXNtYXhfbWF0Y2goc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldikKIHsKLQlpbnQgZGV2ID0gcGRldi0+aWQ7CisJcmV0dXJuIGVuYWJsZVtkZXZdOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZ3VzbWF4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBkZXYpCit7CiAJc3RhdGljIGludCBwb3NzaWJsZV9pcnFzW10gPSB7NSwgMTEsIDEyLCA5LCA3LCAxNSwgMywgLTF9OwogCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hc1tdID0gezUsIDYsIDcsIDEsIDMsIC0xfTsKIAlpbnQgeGlycSwgeGRtYTEsIHhkbWEyLCBlcnI7CkBAIC0zMzMsNyArMzM1LDcgQEAKIAlpZiAoeGRtYTIgPj0gMCkKIAkJc3ByaW50ZihjYXJkLT5sb25nbmFtZSArIHN0cmxlbihjYXJkLT5sb25nbmFtZSksICImJWkiLCB4ZG1hMik7CiAKLQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwZGV2LT5kZXYpOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAKIAlpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApCiAJCWdvdG8gX2VycjsKQEAgLTM0MSw3ICszNDMsNyBAQAogCW1heGNhcmQtPmd1cyA9IGd1czsKIAltYXhjYXJkLT5jczQyMzEgPSBjczQyMzE7CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CiAJcmV0dXJuIDA7CiAKICBfZXJyOgpAQCAtMzQ5LDcwICszNTEsMzMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfZ3VzbWF4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfZ3VzbWF4X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpCiB7Ci0Jc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOworCXNuZF9jYXJkX2ZyZWUoZGV2X2dldF9kcnZkYXRhKGRldnB0cikpOworCWRldl9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOwogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEdVU01BWF9EUklWRVIJInNuZF9ndXNtYXgiCisjZGVmaW5lIERFVl9OQU1FICJndXNtYXgiCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9ndXNtYXhfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9ndXNtYXhfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfZ3VzbWF4X21hdGNoLAogCS5wcm9iZQkJPSBzbmRfZ3VzbWF4X3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2d1c21heF9yZW1vdmUpLAogCS8qIEZJWE1FOiBzdXNwZW5kL3Jlc3VtZSAqLwogCS5kcml2ZXIJCT0gewotCQkubmFtZQk9IEdVU01BWF9EUklWRVIKKwkJLm5hbWUJPSBERVZfTkFNRQogCX0sCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlIHNuZF9ndXNtYXhfdW5yZWdpc3Rlcl9hbGwodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldmljZXMpOyArK2kpCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZXNbaV0pOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfZ3VzbWF4X2RyaXZlcik7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9ndXNtYXhfaW5pdCh2b2lkKQogewotCWludCBpLCBjYXJkcywgZXJyOwotCi0JZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfZ3VzbWF4X2RyaXZlcik7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQljYXJkcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKLQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwotCQlpZiAoISBlbmFibGVbaV0pCi0JCQljb250aW51ZTsKLQkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShHVVNNQVhfRFJJVkVSLAotCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKQotCQkJY29udGludWU7Ci0JCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgewotCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWRldmljZXNbaV0gPSBkZXZpY2U7Ci0JCWNhcmRzKys7Ci0JfQotCWlmICghY2FyZHMpIHsKLSNpZmRlZiBNT0RVTEUKLQkJcHJpbnRrKEtFUk5fRVJSICJHVVMgTUFYIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwotI2VuZGlmCi0JCXNuZF9ndXNtYXhfdW5yZWdpc3Rlcl9hbGwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJldHVybiAwOworCXJldHVybiBpc2FfcmVnaXN0ZXJfZHJpdmVyKCZzbmRfZ3VzbWF4X2RyaXZlciwgU05EUlZfQ0FSRFMpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX2d1c21heF9leGl0KHZvaWQpCiB7Ci0Jc25kX2d1c21heF91bnJlZ2lzdGVyX2FsbCgpOworCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmc25kX2d1c21heF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhbHNhX2NhcmRfZ3VzbWF4X2luaXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jIGIvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYwppbmRleCA0ZWMyZDc5Li4wMjIwY2RiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CkBAIC0xMTUsOSArMTE1LDYgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShlZmZlY3QsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGVmZmVjdCwgIkVmZmVjdHMgZW5hYmxlIGZvciBJbnRlcldhdmUgZHJpdmVyLiIpOwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tTTkRSVl9DQVJEU107Ci1zdGF0aWMgaW50IHBucF9yZWdpc3RlcmVkOwotCiBzdHJ1Y3Qgc25kX2ludGVyd2F2ZSB7CiAJaW50IGlycTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CkBAIC0xMzgsNiArMTM1LDggQEAKIAogCiAjaWZkZWYgQ09ORklHX1BOUAorc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKK3N0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9pbnRlcndhdmVfcG5waWRzW10gPSB7CiAjaWZuZGVmIFNORFJWX1NUQgpAQCAtNzkzLDcgKzc5Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9pbnRlcndhdmVfbm9ucG5wX3Byb2JlMShpbnQgZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaW50ZXJ3YXZlX2lzYV9wcm9iZTEoaW50IGRldiwgc3RydWN0IGRldmljZSAqZGV2cHRyKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwpAQCAtODAyLDE4ICs4MDEsMzAgQEAKIAlpZiAoISBjYXJkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmRldnB0ci0+ZGV2KTsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIGRldnB0cik7CiAJaWYgKChlcnIgPSBzbmRfaW50ZXJ3YXZlX3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIGNhcmQpOworCWRldl9zZXRfZHJ2ZGF0YShkZXZwdHIsIGNhcmQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaW50ZXJ3YXZlX25vbnBucF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc25kX2ludGVyd2F2ZV9pc2FfbWF0Y2goc3RydWN0IGRldmljZSAqcGRldiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgZGV2KQogewotCWludCBkZXYgPSBwZGV2LT5pZDsKKwlpZiAoIWVuYWJsZVtkZXZdKQorCQlyZXR1cm4gMDsKKyNpZmRlZiBDT05GSUdfUE5QCisJaWYgKGlzYXBucFtkZXZdKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaW50ZXJ3YXZlX2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXYpCit7CiAJaW50IGVycjsKIAlzdGF0aWMgaW50IHBvc3NpYmxlX2lycXNbXSA9IHs1LCAxMSwgMTIsIDksIDcsIDE1LCAzLCAtMX07CiAJc3RhdGljIGludCBwb3NzaWJsZV9kbWFzW10gPSB7MCwgMSwgMywgNSwgNiwgNywgLTF9OwpAQCAtODM4LDEzICs4NDksMTMgQEAKIAl9CiAKIAlpZiAocG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkKLQkJcmV0dXJuIHNuZF9pbnRlcndhdmVfbm9ucG5wX3Byb2JlMShkZXYsIHBkZXYpOworCQlyZXR1cm4gc25kX2ludGVyd2F2ZV9pc2FfcHJvYmUxKGRldiwgcGRldik7CiAJZWxzZSB7CiAJCXN0YXRpYyBsb25nIHBvc3NpYmxlX3BvcnRzW10gPSB7MHgyMTAsIDB4MjIwLCAweDIzMCwgMHgyNDAsIDB4MjUwLCAweDI2MH07CiAJCWludCBpOwogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwb3NzaWJsZV9wb3J0cyk7IGkrKykgewogCQkJcG9ydFtkZXZdID0gcG9zc2libGVfcG9ydHNbaV07Ci0JCQllcnIgPSBzbmRfaW50ZXJ3YXZlX25vbnBucF9wcm9iZTEoZGV2LCBwZGV2KTsKKwkJCWVyciA9IHNuZF9pbnRlcndhdmVfaXNhX3Byb2JlMShkZXYsIHBkZXYpOwogCQkJaWYgKCEgZXJyKQogCQkJCXJldHVybiAwOwogCQl9CkBAIC04NTIsMTYgKzg2MywxNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgc25kX2ludGVyd2F2ZV9ub25wbnBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9pbnRlcndhdmVfaXNhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpCiB7Ci0Jc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOworCXNuZF9jYXJkX2ZyZWUoZGV2X2dldF9kcnZkYXRhKGRldnB0cikpOworCWRldl9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfaW50ZXJ3YXZlX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gc25kX2ludGVyd2F2ZV9ub25wbnBfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfaW50ZXJ3YXZlX25vbnBucF9yZW1vdmUpLAorc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9pbnRlcndhdmVfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfaW50ZXJ3YXZlX2lzYV9tYXRjaCwKKwkucHJvYmUJCT0gc25kX2ludGVyd2F2ZV9pc2FfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfaW50ZXJ3YXZlX2lzYV9yZW1vdmUpLAogCS8qIEZJWE1FOiBzdXNwZW5kLHJlc3VtZSAqLwogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9IElOVEVSV0FWRV9EUklWRVIKQEAgLTg2OSw4ICs4ODEsNiBAQAogfTsKIAogI2lmZGVmIENPTkZJR19QTlAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0ZGF0YSBpbnRlcndhdmVfcG5wX2RldmljZXM7Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9pbnRlcndhdmVfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsCiAJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKnBpZCkKIHsKQEAgLTkwMCw3ICs5MTAsNiBAQAogCX0KIAlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgY2FyZCk7CiAJZGV2Kys7Ci0JaW50ZXJ3YXZlX3BucF9kZXZpY2VzKys7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyMSw2NCArOTMwLDMzIEBACiAKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdF9vcl9tb2R1bGUgc25kX2ludGVyd2F2ZV91bnJlZ2lzdGVyX2FsbCh2b2lkKQotewotCWludCBpOwotCi0JaWYgKHBucF9yZWdpc3RlcmVkKQotCQlwbnBfdW5yZWdpc3Rlcl9jYXJkX2RyaXZlcigmaW50ZXJ3YXZlX3BucGNfZHJpdmVyKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKTsgKytpKQotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwbGF0Zm9ybV9kZXZpY2VzW2ldKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX2ludGVyd2F2ZV9kcml2ZXIpOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfaW50ZXJ3YXZlX2luaXQodm9pZCkKIHsKLQlpbnQgaSwgZXJyLCBjYXJkcyA9IDA7CisJaW50IGVycjsKIAotCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfaW50ZXJ3YXZlX2RyaXZlcikpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7Ci0JCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKLQkJaWYgKCEgZW5hYmxlW2ldKQotCQkJY29udGludWU7CisJZXJyID0gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc25kX2ludGVyd2F2ZV9kcml2ZXIsIFNORFJWX0NBUkRTKTsKICNpZmRlZiBDT05GSUdfUE5QCi0JCWlmIChpc2FwbnBbaV0pCi0JCQljb250aW51ZTsKLSNlbmRpZgotCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKElOVEVSV0FWRV9EUklWRVIsCi0JCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQkJY29udGludWU7Ci0JCX0KLQkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKLQkJY2FyZHMrKzsKLQl9CisJaWYgKCFlcnIpCisJCWlzYV9yZWdpc3RlcmVkID0gMTsKIAotCS8qIElTQSBQblAgY2FyZHMgKi8KIAllcnIgPSBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmludGVyd2F2ZV9wbnBjX2RyaXZlcik7Ci0JaWYgKCFlcnIpIHsKKwlpZiAoIWVycikKIAkJcG5wX3JlZ2lzdGVyZWQgPSAxOwotCQljYXJkcyArPSBpbnRlcndhdmVfcG5wX2RldmljZXM7OwotCX0KIAotCWlmICghY2FyZHMpIHsKLSNpZmRlZiBNT0RVTEUKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnRlcldhdmUgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7CisJaWYgKGlzYV9yZWdpc3RlcmVkKQorCQllcnIgPSAwOwogI2VuZGlmCi0JCXNuZF9pbnRlcndhdmVfdW5yZWdpc3Rlcl9hbGwoKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfaW50ZXJ3YXZlX2V4aXQodm9pZCkKIHsKLQlzbmRfaW50ZXJ3YXZlX3VucmVnaXN0ZXJfYWxsKCk7CisjaWZkZWYgQ09ORklHX1BOUAorCWlmIChwbnBfcmVnaXN0ZXJlZCkKKwkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmludGVyd2F2ZV9wbnBjX2RyaXZlcik7CisJaWYgKGlzYV9yZWdpc3RlcmVkKQorI2VuZGlmCisJCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmc25kX2ludGVyd2F2ZV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhbHNhX2NhcmRfaW50ZXJ3YXZlX2luaXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3BsM3NhMi5jIGIvc291bmQvaXNhL29wbDNzYTIuYwppbmRleCBmM2RiNjg2Li42MWEzMjNjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3BsM3NhMi5jCisrKyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC05MSwxMiArOTEsMTEgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShvcGwzc2EzX3ltb2RlLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhvcGwzc2EzX3ltb2RlLCAiU3BlYWtlciBzaXplIHNlbGVjdGlvbiBmb3IgM0QgRW5oYW5jZW1lbnQgbW9kZTogRGVza3RvcC9MYXJnZSBOb3RlYm9vay9TbWFsbCBOb3RlYm9vay9IaUZpLiIpOwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tTTkRSVl9DQVJEU107CiAjaWZkZWYgQ09ORklHX1BOUAorc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKIHN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CiBzdGF0aWMgaW50IHBucGNfcmVnaXN0ZXJlZDsKICNlbmRpZgotc3RhdGljIHVuc2lnbmVkIGludCBzbmRfb3BsM3NhMl9kZXZpY2VzOwogCiAvKiBjb250cm9sIHBvcnRzICovCiAjZGVmaW5lIE9QTDNTQTJfUE1fQ1RSTAkJMHgwMQpAQCAtNzgzLDcgKzc4Miw2IEBACiAJfQogCXBucF9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKIAlkZXYrKzsKLQlzbmRfb3BsM3NhMl9kZXZpY2VzKys7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg1MCw3ICs4NDgsNiBAQAogCX0KIAlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgY2FyZCk7CiAJZGV2Kys7Ci0Jc25kX29wbDNzYTJfZGV2aWNlcysrOwogCXJldHVybiAwOwogfQogCkBAIC04ODQsMTM4ICs4ODEsMTIxIEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgc25kX29wbDNzYTJfbm9ucG5wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfb3BsM3NhMl9pc2FfbWF0Y2goc3RydWN0IGRldmljZSAqcGRldiwKKwkJCQkJICAgdW5zaWduZWQgaW50IGRldikKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0JaW50IGVycjsKLQlpbnQgZGV2ID0gcGRldi0+aWQ7Ci0KKwlpZiAoIWVuYWJsZVtkZXZdKQorCQlyZXR1cm4gMDsKKyNpZmRlZiBDT05GSUdfUE5QCisJaWYgKGlzYXBucFtkZXZdKQorCQlyZXR1cm4gMDsKKyNlbmRpZgogCWlmIChwb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJzcGVjaWZ5IHBvcnRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CiAJfQogCWlmICh3c3NfcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAic3BlY2lmeSB3c3NfcG9ydFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGZtX3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInNwZWNpZnkgZm1fcG9ydFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKIAl9CiAJaWYgKG1pZGlfcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAic3BlY2lmeSBtaWRpX3BvcnRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CiAJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfb3BsM3NhMl9pc2FfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwKKwkJCQkJICAgdW5zaWduZWQgaW50IGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKIAogCWNhcmQgPSBzbmRfb3BsM3NhMl9jYXJkX25ldyhkZXYpOwogCWlmICghIGNhcmQpCiAJCXJldHVybiAtRU5PTUVNOwotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBkZXYtPmRldik7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKIAlpZiAoKGVyciA9IHNuZF9vcGwzc2EyX3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9vcGwzc2EyX25vbnBucF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX29wbDNzYTJfaXNhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZGV2KQogewotCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGRldl9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzbmRfb3BsM3NhMl9ub25wbnBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc25kX29wbDNzYTJfaXNhX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbiwKKwkJCQkgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHNuZF9vcGwzc2EyX3N1c3BlbmQocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KSwgc3RhdGUpOworCXJldHVybiBzbmRfb3BsM3NhMl9zdXNwZW5kKGRldl9nZXRfZHJ2ZGF0YShkZXYpLCBzdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgc25kX29wbDNzYTJfbm9ucG5wX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNuZF9vcGwzc2EyX2lzYV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbikKIHsKLQlyZXR1cm4gc25kX29wbDNzYTJfcmVzdW1lKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldikpOworCXJldHVybiBzbmRfb3BsM3NhMl9yZXN1bWUoZGV2X2dldF9kcnZkYXRhKGRldikpOwogfQogI2VuZGlmCiAKLSNkZWZpbmUgT1BMM1NBMl9EUklWRVIJInNuZF9vcGwzc2EyIgorI2RlZmluZSBERVZfTkFNRSAib3BsM3NhMiIKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX29wbDNzYTJfbm9ucG5wX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gc25kX29wbDNzYTJfbm9ucG5wX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0KCBzbmRfb3BsM3NhMl9ub25wbnBfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgaXNhX2RyaXZlciBzbmRfb3BsM3NhMl9pc2FfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfb3BsM3NhMl9pc2FfbWF0Y2gsCisJLnByb2JlCQk9IHNuZF9vcGwzc2EyX2lzYV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdCggc25kX29wbDNzYTJfaXNhX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzbmRfb3BsM3NhMl9ub25wbnBfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNuZF9vcGwzc2EyX25vbnBucF9yZXN1bWUsCisJLnN1c3BlbmQJPSBzbmRfb3BsM3NhMl9pc2Ffc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNuZF9vcGwzc2EyX2lzYV9yZXN1bWUsCiAjZW5kaWYKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBPUEwzU0EyX0RSSVZFUgorCQkubmFtZQk9IERFVl9OQU1FCiAJfSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdF9vcl9tb2R1bGUgc25kX29wbDNzYTJfdW5yZWdpc3Rlcl9hbGwodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9vcGwzc2EyX2luaXQodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgZXJyOwogCisJZXJyID0gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc25kX29wbDNzYTJfaXNhX2RyaXZlciwgU05EUlZfQ0FSRFMpOworI2lmZGVmIENPTkZJR19QTlAKKwlpZiAoIWVycikKKwkJaXNhX3JlZ2lzdGVyZWQgPSAxOworCisJZXJyID0gcG5wX3JlZ2lzdGVyX2RyaXZlcigmb3BsM3NhMl9wbnBfZHJpdmVyKTsKKwlpZiAoIWVycikKKwkJcG5wX3JlZ2lzdGVyZWQgPSAxOworCisJZXJyID0gcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZvcGwzc2EyX3BucGNfZHJpdmVyKTsKKwlpZiAoIWVycikKKwkJcG5wY19yZWdpc3RlcmVkID0gMTsKKworCWlmIChpc2FfcmVnaXN0ZXJlZCB8fCBwbnBfcmVnaXN0ZXJlZCkKKwkJZXJyID0gMDsKKyNlbmRpZgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfb3BsM3NhMl9leGl0KHZvaWQpCit7CiAjaWZkZWYgQ09ORklHX1BOUAogCWlmIChwbnBjX3JlZ2lzdGVyZWQpCiAJCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZvcGwzc2EyX3BucGNfZHJpdmVyKTsKIAlpZiAocG5wX3JlZ2lzdGVyZWQpCiAJCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmb3BsM3NhMl9wbnBfZHJpdmVyKTsKKwlpZiAoaXNhX3JlZ2lzdGVyZWQpCiAjZW5kaWYKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKTsgKytpKQotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwbGF0Zm9ybV9kZXZpY2VzW2ldKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX29wbDNzYTJfbm9ucG5wX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9vcGwzc2EyX2luaXQodm9pZCkKLXsKLQlpbnQgaSwgZXJyOwotCi0JaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNuZF9vcGwzc2EyX25vbnBucF9kcml2ZXIpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewotCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7Ci0JCWlmICghIGVuYWJsZVtpXSkKLQkJCWNvbnRpbnVlOwotI2lmZGVmIENPTkZJR19QTlAKLQkJaWYgKGlzYXBucFtpXSkKLQkJCWNvbnRpbnVlOwotI2VuZGlmCi0JCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoT1BMM1NBMl9EUklWRVIsCi0JCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQkJY29udGludWU7Ci0JCX0KLQkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKLQkJc25kX29wbDNzYTJfZGV2aWNlcysrOwotCX0KLQotI2lmZGVmIENPTkZJR19QTlAKLQllcnIgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZvcGwzc2EyX3BucF9kcml2ZXIpOwotCWlmICghZXJyKQotCQlwbnBfcmVnaXN0ZXJlZCA9IDE7Ci0JZXJyID0gcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZvcGwzc2EyX3BucGNfZHJpdmVyKTsKLQlpZiAoIWVycikKLQkJcG5wY19yZWdpc3RlcmVkID0gMTsKLSNlbmRpZgotCi0JaWYgKCFzbmRfb3BsM3NhMl9kZXZpY2VzKSB7Ci0jaWZkZWYgTU9EVUxFCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgIllhbWFoYSBPUEwzLVNBIHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwotI2VuZGlmCi0JCXNuZF9vcGwzc2EyX3VucmVnaXN0ZXJfYWxsKCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9vcGwzc2EyX2V4aXQodm9pZCkKLXsKLQlzbmRfb3BsM3NhMl91bnJlZ2lzdGVyX2FsbCgpOworCQlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9vcGwzc2EyX2lzYV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhbHNhX2NhcmRfb3BsM3NhMl9pbml0KQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvbWlyby5jIGIvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCmluZGV4IDFkZDk4MzcuLmNkMjliMzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CkBAIC0xMzcsMTAgKzEzNyw2IEBACiAKIHN0YXRpYyB2b2lkIHNuZF9taXJvX3Byb2NfaW5pdChzdHJ1Y3Qgc25kX21pcm8gKiBtaXJvKTsKIAotI2RlZmluZSBEUklWRVJfTkFNRSAic25kLW1pcm8iCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7Ci0KIHN0YXRpYyBjaGFyICogc25kX29wdGk5eHhfbmFtZXNbXSA9IHsKIAkidW5rb3duIiwKIAkiODJDOTI4IiwgIjgyQzkyOSIsCkBAIC01NTgsNyArNTU0LDcgQEAKIAlyZXR1cm4gY2hhbmdlOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX21pcm9fY29udHJvbHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19jb250cm9sc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiBNSVJPX0RPVUJMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDAsIEFDSV9HRVRfTUFTVEVSLCBBQ0lfU0VUX01BU1RFUiksCiBNSVJPX0RPVUJMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDEsIEFDSV9HRVRfTUlDLCBBQ0lfU0VUX01JQyksCiBNSVJPX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAxLCBBQ0lfR0VUX0xJTkUsIEFDSV9TRVRfTElORSksCkBAIC01NzAsNyArNTY2LDcgQEAKIAogLyogRXF1YWxpemVyIHdpdGggc2V2ZW4gYmFuZHMgKG9ubHkgUENNMjApIAogICAgZnJvbSAtMTJkQiB1cCB0byArMTJkQiBvbiBlYWNoIGJhbmQgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19lcV9jb250cm9sc1tdID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9taXJvX2VxX2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKIE1JUk9fRE9VQkxFKCJUb25lIENvbnRyb2wgLSAyOCBIeiIsIDAsIEFDSV9HRVRfRVExLCBBQ0lfU0VUX0VRMSksCiBNSVJPX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gMTYwIEh6IiwgMCwgQUNJX0dFVF9FUTIsIEFDSV9TRVRfRVEyKSwKIE1JUk9fRE9VQkxFKCJUb25lIENvbnRyb2wgLSA0MDAgSHoiLCAwLCBBQ0lfR0VUX0VRMywgQUNJX1NFVF9FUTMpLApAQCAtNTgwLDE1ICs1NzYsMTUgQEAKIE1JUk9fRE9VQkxFKCJUb25lIENvbnRyb2wgLSAxNiBrSHoiLCAwLCBBQ0lfR0VUX0VRNywgQUNJX1NFVF9FUTcpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9taXJvX3JhZGlvX2NvbnRyb2xbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19yYWRpb19jb250cm9sW10gX19kZXZpbml0ZGF0YSA9IHsKIE1JUk9fRE9VQkxFKCJSYWRpbyBQbGF5YmFjayBWb2x1bWUiLCAwLCBBQ0lfR0VUX0xJTkUxLCBBQ0lfU0VUX0xJTkUxKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19saW5lX2NvbnRyb2xbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19saW5lX2NvbnRyb2xbXSBfX2RldmluaXRkYXRhID0gewogTUlST19ET1VCTEUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMiwgQUNJX0dFVF9MSU5FMSwgQUNJX1NFVF9MSU5FMSksCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX21pcm9fcHJlYW1wX2NvbnRyb2xbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19wcmVhbXBfY29udHJvbFtdIF9fZGV2aW5pdGRhdGEgPSB7CiB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSAiTWljIEJvb3N0IiwKQEAgLTU5OCw3ICs1OTQsNyBAQAogCS5wdXQgPSBzbmRfbWlyb19wdXRfcHJlYW1wLAogfX07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19hbXBfY29udHJvbFtdID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9taXJvX2FtcF9jb250cm9sW10gX19kZXZpbml0ZGF0YSA9IHsKIHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9ICJMaW5lIEJvb3N0IiwKQEAgLTYwOCw3ICs2MDQsNyBAQAogCS5wdXQgPSBzbmRfbWlyb19wdXRfYW1wLAogfX07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19jYXB0dXJlX2NvbnRyb2xbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfbWlyb19jYXB0dXJlX2NvbnRyb2xbXSBfX2RldmluaXRkYXRhID0gewogewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCS5uYW1lID0gIlBDTSBDYXB0dXJlIFN3aXRjaCIsCkBAIC02MTgsNyArNjE0LDcgQEAKIAkucHV0ID0gc25kX21pcm9fcHV0X2NhcHR1cmUsCiB9fTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgYWNpX2luaXRfdmFsdWVzW11bMl0gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFjaV9pbml0X3ZhbHVlc1tdWzJdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyBBQ0lfU0VUX01VVEUsIDB4MDAgfSwKIAl7IEFDSV9TRVRfUE9XRVJBTVAsIDB4MDAgfSwKIAl7IEFDSV9TRVRfUFJFQU1QLCAweDAwIH0sCkBAIC02NDEsNyArNjM3LDcgQEAKIAl7IEFDSV9TRVRfTUFTVEVSICsgMSwgMHgyMCB9LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgc25kX3NldF9hY2lfaW5pdF92YWx1ZXMoc3RydWN0IHNuZF9taXJvICptaXJvKQorc3RhdGljIGludCBfX2RldmluaXQgc25kX3NldF9hY2lfaW5pdF92YWx1ZXMoc3RydWN0IHNuZF9taXJvICptaXJvKQogewogCWludCBpZHgsIGVycm9yOwogCkBAIC03NTEsNyArNzQ3LDggQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHNuZF9taXJvX2luaXQoc3RydWN0IHNuZF9taXJvICpjaGlwLCB1bnNpZ25lZCBzaG9ydCBoYXJkd2FyZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9taXJvX2luaXQoc3RydWN0IHNuZF9taXJvICpjaGlwLAorCQkJCSAgIHVuc2lnbmVkIHNob3J0IGhhcmR3YXJlKQogewogCXN0YXRpYyBpbnQgb3B0aTl4eF9tY19zaXplW10gPSB7NywgNywgMTAsIDEwLCAyLCAyLCAyfTsKIApAQCAtOTYyLDcgKzk1OSw3IEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiICBwcmVhbXAgIDogMHgleFxuIiwgbWlyby0+YWNpX3ByZWFtcCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzbmRfbWlyb19wcm9jX2luaXQoc3RydWN0IHNuZF9taXJvICogbWlybykKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbmRfbWlyb19wcm9jX2luaXQoc3RydWN0IHNuZF9taXJvICogbWlybykKIHsKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwogCkBAIC05NzQsNyArOTcxLDcgQEAKICAqICBJbml0CiAgKi8KIAotc3RhdGljIGludCBfX2luaXQgc25kX21pcm9fY29uZmlndXJlKHN0cnVjdCBzbmRfbWlybyAqY2hpcCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9taXJvX2NvbmZpZ3VyZShzdHJ1Y3Qgc25kX21pcm8gKmNoaXApCiB7CiAJdW5zaWduZWQgY2hhciB3c3NfYmFzZV9iaXRzOwogCXVuc2lnbmVkIGNoYXIgaXJxX2JpdHM7CkBAIC0xMTMxLDcgKzExMjgsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfY2FyZF9taXJvX2RldGVjdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBzbmRfbWlybyAqY2hpcCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX21pcm9fZGV0ZWN0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKKwkJCQkJICBzdHJ1Y3Qgc25kX21pcm8gKmNoaXApCiB7CiAJaW50IGksIGVycjsKIAl1bnNpZ25lZCBjaGFyIHZhbHVlOwpAQCAtMTE1Nyw3ICsxMTU1LDggQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX2NhcmRfbWlyb19hY2lfZGV0ZWN0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9taXJvICogbWlybykKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX21pcm9fYWNpX2RldGVjdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisJCQkJCSAgICAgIHN0cnVjdCBzbmRfbWlybyAqIG1pcm8pCiB7CiAJdW5zaWduZWQgY2hhciByZWd2YWw7CiAJaW50IGk7CkBAIC0xMjEzLDcgKzEyMTIsMTIgQEAKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKG1pcm8tPnJlc19tY19iYXNlKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX21pcm9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmluaXQgc25kX21pcm9fbWF0Y2goc3RydWN0IGRldmljZSAqZGV2cHRyLCB1bnNpZ25lZCBpbnQgbikKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21pcm9fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2cHRyLCB1bnNpZ25lZCBpbnQgbikKIHsKIAlzdGF0aWMgbG9uZyBwb3NzaWJsZV9wb3J0c1tdID0gezB4NTMwLCAweGU4MCwgMHhmNDAsIDB4NjA0LCAtMX07CiAJc3RhdGljIGxvbmcgcG9zc2libGVfbXB1X3BvcnRzW10gPSB7MHgzMzAsIDB4MzAwLCAweDMxMCwgMHgzMjAsIC0xfTsKQEAgLTEzOTksNTYgKzE0MDMsNDQgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAJfQogCi0Jc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2cHRyLT5kZXYpOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgZGV2cHRyKTsKIAogCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkpIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgY2FyZCk7CisJZGV2X3NldF9kcnZkYXRhKGRldnB0ciwgY2FyZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9taXJvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfbWlyb19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2cHRyLCB1bnNpZ25lZCBpbnQgZGV2KQogewotCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGRldl9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX21pcm9fZHJpdmVyID0geworI2RlZmluZSBERVZfTkFNRSAibWlybyIKKworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9taXJvX2RyaXZlciA9IHsKKwkubWF0Y2gJCT0gc25kX21pcm9fbWF0Y2gsCiAJLnByb2JlCQk9IHNuZF9taXJvX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX21pcm9fcmVtb3ZlKSwKIAkvKiBGSVhNRTogc3VzcGVuZC9yZXN1bWUgKi8KIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBEUklWRVJfTkFNRQorCQkubmFtZQk9IERFVl9OQU1FCiAJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9taXJvX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoKGVycm9yID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfbWlyb19kcml2ZXIpKSA8IDApCi0JCXJldHVybiBlcnJvcjsKLQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKERSSVZFUl9OQU1FLCAtMSwgTlVMTCwgMCk7Ci0JaWYgKCEgSVNfRVJSKGRldmljZSkpIHsKLQkJaWYgKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpCi0JCQlyZXR1cm4gMDsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKLQl9Ci0jaWZkZWYgTU9EVUxFCi0JcHJpbnRrKEtFUk5fRVJSICJubyBtaXJvIHNvdW5kY2FyZCBmb3VuZFxuIik7Ci0jZW5kaWYKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX21pcm9fZHJpdmVyKTsKLQlyZXR1cm4gUFRSX0VSUihkZXZpY2UpOworCXJldHVybiBpc2FfcmVnaXN0ZXJfZHJpdmVyKCZzbmRfbWlyb19kcml2ZXIsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX21pcm9fZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9taXJvX2RyaXZlcik7CisJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZzbmRfbWlyb19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhbHNhX2NhcmRfbWlyb19pbml0KQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKaW5kZXggZGYyMjczNy4uNjBjMTIwZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgpAQCAtMjU5LDcgKzI1OSw2IEBACiB9OwogCiBzdGF0aWMgaW50IHNuZF9vcHRpOXh4X3BucF9pc19wcm9iZWQ7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc25kX29wdGk5eHhfcGxhdGZvcm1fZGV2aWNlOwogCiAjaWZkZWYgQ09ORklHX1BOUAogCkBAIC0yODEsMTAgKzI4MCwxMCBAQAogI2VuZGlmCS8qIENPTkZJR19QTlAgKi8KIAogI2lmZGVmIE9QVGk5M1gKLSNkZWZpbmUgRFJJVkVSX05BTUUJInNuZC1jYXJkLW9wdGk5M3giCisjZGVmaW5lIERFVl9OQU1FICJvcHRpOTN4IgogI2Vsc2UKLSNkZWZpbmUgRFJJVkVSX05BTUUJInNuZC1jYXJkLW9wdGk5MngiCi0jZW5kaWYJLyogT1BUaTkzWCAqLworI2RlZmluZSBERVZfTkFNRSAib3B0aTkyeCIKKyNlbmRpZgogCiBzdGF0aWMgY2hhciAqIHNuZF9vcHRpOXh4X25hbWVzW10gPSB7CiAJInVua293biIsCkBAIC0yOTQsNyArMjkzLDcgQEAKIH07CiAKIAotc3RhdGljIGxvbmcgX19pbml0IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lvcG9ydChsb25nICpwb3J0X3RhYmxlLCBsb25nIHNpemUpCitzdGF0aWMgbG9uZyBfX2RldmluaXQgc25kX2xlZ2FjeV9maW5kX2ZyZWVfaW9wb3J0KGxvbmcgKnBvcnRfdGFibGUsIGxvbmcgc2l6ZSkKIHsKIAl3aGlsZSAoKnBvcnRfdGFibGUgIT0gLTEpIHsKIAkJaWYgKHJlcXVlc3RfcmVnaW9uKCpwb3J0X3RhYmxlLCBzaXplLCAiQUxTQSB0ZXN0IikpIHsKQEAgLTMwNiw3ICszMDUsOCBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX29wdGk5eHhfaW5pdChzdHJ1Y3Qgc25kX29wdGk5eHggKmNoaXAsIHVuc2lnbmVkIHNob3J0IGhhcmR3YXJlKQorc3RhdGljIGludCBfX2RldmluaXQgc25kX29wdGk5eHhfaW5pdChzdHJ1Y3Qgc25kX29wdGk5eHggKmNoaXAsCisJCQkJICAgICAgdW5zaWduZWQgc2hvcnQgaGFyZHdhcmUpCiB7CiAJc3RhdGljIGludCBvcHRpOXh4X21jX3NpemVbXSA9IHs3LCA3LCAxMCwgMTAsIDIsIDIsIDJ9OwogCkBAIC00NTEsNyArNDUxLDcgQEAKIAkJKHNuZF9vcHRpOXh4X3JlYWQoY2hpcCwgcmVnKSAmIH4obWFzaykpIHwgKCh2YWx1ZSkgJiAobWFzaykpKQogCiAKLXN0YXRpYyBpbnQgX19pbml0IHNuZF9vcHRpOXh4X2NvbmZpZ3VyZShzdHJ1Y3Qgc25kX29wdGk5eHggKmNoaXApCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfb3B0aTl4eF9jb25maWd1cmUoc3RydWN0IHNuZF9vcHRpOXh4ICpjaGlwKQogewogCXVuc2lnbmVkIGNoYXIgd3NzX2Jhc2VfYml0czsKIAl1bnNpZ25lZCBjaGFyIGlycV9iaXRzOwpAQCAtOTM0LDEwICs5MzQsOCBAQAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAl7CiAJCXVuc2lnbmVkIGludCB3aGF0ID0gMDsKLQkJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7Ci0JCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2gocG9zLCBzdWJzdHJlYW0pIHsKLQkJCXMgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOworCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQkJaWYgKHMgPT0gY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKSB7CiAJCQkJd2hhdCB8PSBPUFRpOTNYX1BMQVlCQUNLX0VOQUJMRTsKIAkJCQlzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwpAQCAtMTI5MSw3ICsxMjg5LDcgQEAKIAl9CiAJY29kZWMtPmRtYTIgPSBjaGlwLT5kbWEyOwogCi0JaWYgKHJlcXVlc3RfaXJxKGNoaXAtPmlycSwgc25kX29wdGk5M3hfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBEUklWRVJfTkFNRSIgLSBXU1MiLCBjb2RlYykpIHsKKwlpZiAocmVxdWVzdF9pcnEoY2hpcC0+aXJxLCBzbmRfb3B0aTkzeF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIERFVl9OQU1FIiAtIFdTUyIsIGNvZGVjKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJvcHRpOXh4OiBjYW4ndCBncmFiIElSUSAlZFxuIiwgY2hpcC0+aXJxKTsKIAkJc25kX29wdGk5M3hfZnJlZShjb2RlYyk7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0xNTYxLDcgKzE1NTksNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfb3B0aTkzeF9jb250cm9sc1tdID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9vcHRpOTN4X2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKIE9QVGk5M1hfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMCwgT1BUaTkzWF9PVVRfTEVGVCwgT1BUaTkzWF9PVVRfUklHSFQsIDcsIDcsIDEsIDEpLAogT1BUaTkzWF9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAwLCBPUFRpOTNYX09VVF9MRUZULCBPUFRpOTNYX09VVF9SSUdIVCwgMSwgMSwgMzEsIDEpLCAKIE9QVGk5M1hfRE9VQkxFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMCwgT1BUaTkzWF9EQUNfTEVGVCwgT1BUaTkzWF9EQUNfUklHSFQsIDcsIDcsIDEsIDEpLApAQCAtMTYyMiw3ICsxNjIwLDggQEAKIAogI2VuZGlmIC8qIE9QVGk5M1ggKi8KIAotc3RhdGljIGludCBfX2luaXQgc25kX2NhcmRfb3B0aTl4eF9kZXRlY3Qoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX29wdGk5eHggKmNoaXApCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9vcHRpOXh4X2RldGVjdChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisJCQkJCSAgICAgc3RydWN0IHNuZF9vcHRpOXh4ICpjaGlwKQogewogCWludCBpLCBlcnI7CiAKQEAgLTE2NzYsOCArMTY3NSw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE5QCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfY2FyZF9vcHRpOXh4X3BucChzdHJ1Y3Qgc25kX29wdGk5eHggKmNoaXAsIHN0cnVjdCBwbnBfY2FyZF9saW5rICpjYXJkLAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9vcHRpOXh4X3BucChzdHJ1Y3Qgc25kX29wdGk5eHggKmNoaXAsCisJCQkJCSAgc3RydWN0IHBucF9jYXJkX2xpbmsgKmNhcmQsCisJCQkJCSAgY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQogewogCXN0cnVjdCBwbnBfZGV2ICpwZGV2OwogCXN0cnVjdCBwbnBfcmVzb3VyY2VfdGFibGUgKmNmZyA9IGttYWxsb2Moc2l6ZW9mKCpjZmcpLCBHRlBfS0VSTkVMKTsKQEAgLTE3NzgsNyArMTc3OCw3IEBACiAJCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UoY2hpcC0+cmVzX21jX2Jhc2UpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfb3B0aTl4eF9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfb3B0aTl4eF9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCiB7CiAJc3RhdGljIGxvbmcgcG9zc2libGVfcG9ydHNbXSA9IHsweDUzMCwgMHhlODAsIDB4ZjQwLCAweDYwNCwgLTF9OwogCWludCBlcnJvcjsKQEAgLTE5MjQsNyArMTkyNCwxOCBAQAogCXJldHVybiBjYXJkOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfb3B0aTl4eF9ub25wbnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmluaXQgc25kX29wdGk5eHhfaXNhX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwKKwkJCQkJICAgdW5zaWduZWQgaW50IGRldikKK3sKKwlpZiAoc25kX29wdGk5eHhfcG5wX2lzX3Byb2JlZCkKKwkJcmV0dXJuIDA7CisJaWYgKGlzYXBucCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9vcHRpOXh4X2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsCisJCQkJCSAgIHVuc2lnbmVkIGludCBkZXYpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnJvcjsKQEAgLTE5NDAsOSArMTk1MSw2IEBACiAJc3RhdGljIGludCBwb3NzaWJsZV9kbWEyc1tdWzJdID0ge3sxLC0xfSwgezAsLTF9LCB7LTEsLTF9LCB7MCwtMX19OwogI2VuZGlmCS8qIENTNDIzMSB8fCBPUFRpOTNYICovCiAKLQlpZiAoc25kX29wdGk5eHhfcG5wX2lzX3Byb2JlZCkKLQkJcmV0dXJuIC1FQlVTWTsKLQogCWlmIChtcHVfcG9ydCA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKIAkJaWYgKChtcHVfcG9ydCA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lvcG9ydChwb3NzaWJsZV9tcHVfcG9ydHMsIDIpKSA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBNUFU0MDEgcG9ydFxuIik7CkBAIC0xOTg0LDM0ICsxOTkyLDM2IEBACiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnJvcjsKIAl9Ci0Jc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2cHRyLT5kZXYpOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgZGV2cHRyKTsKIAlpZiAoKGVycm9yID0gc25kX29wdGk5eHhfcHJvYmUoY2FyZCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgY2FyZCk7CisJZGV2X3NldF9kcnZkYXRhKGRldnB0ciwgY2FyZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9vcHRpOXh4X25vbnBucF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX29wdGk5eHhfaXNhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZGV2KQogewotCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGRldl9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX29wdGk5eHhfZHJpdmVyID0gewotCS5wcm9iZQkJPSBzbmRfb3B0aTl4eF9ub25wbnBfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfb3B0aTl4eF9ub25wbnBfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgaXNhX2RyaXZlciBzbmRfb3B0aTl4eF9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF9vcHRpOXh4X2lzYV9tYXRjaCwKKwkucHJvYmUJCT0gc25kX29wdGk5eHhfaXNhX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX29wdGk5eHhfaXNhX3JlbW92ZSksCiAJLyogRklYTUU6IHN1c3BlbmQvcmVzdW1lICovCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gRFJJVkVSX05BTUUKKwkJLm5hbWUJPSBERVZfTkFNRQogCX0sCiB9OwogCiAjaWZkZWYgQ09ORklHX1BOUAotc3RhdGljIGludCBfX2luaXQgc25kX29wdGk5eHhfcG5wX3Byb2JlKHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwKLQkJCQkJY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQorc3RhdGljIGludCBfX2RldmluaXQgc25kX29wdGk5eHhfcG5wX3Byb2JlKHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyb3IsIGh3OwpAQCAtMjA3NCwxMSArMjA4NCw2IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUE5QCi0jZGVmaW5lIGlzX2lzYXBucF9zZWxlY3RlZCgpCWlzYXBucAotI2Vsc2UKLSNkZWZpbmUgaXNfaXNhcG5wX3NlbGVjdGVkKCkJMAotI2VuZGlmCiAjaWZkZWYgT1BUaTkzWAogI2RlZmluZSBDSElQX05BTUUJIjgyQzkzeCIKICNlbHNlCkBAIC0yMDg3LDQyICsyMDkyLDE5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9vcHRpOXh4X2luaXQodm9pZCkKIHsKLQlpbnQgZXJyb3I7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwotCiAjaWZkZWYgQ09ORklHX1BOUAogCXBucF9yZWdpc3Rlcl9jYXJkX2RyaXZlcigmb3B0aTl4eF9wbnBjX2RyaXZlcik7CiAJaWYgKHNuZF9vcHRpOXh4X3BucF9pc19wcm9iZWQpCiAJCXJldHVybiAwOwogI2VuZGlmCi0JaWYgKCEgaXNfaXNhcG5wX3NlbGVjdGVkKCkpIHsKLQkJZXJyb3IgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNuZF9vcHRpOXh4X2RyaXZlcik7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJJVkVSX05BTUUsIC0xLCBOVUxMLCAwKTsKLQkJaWYgKCFJU19FUlIoZGV2aWNlKSkgewotCQkJaWYgKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKLQkJCQlzbmRfb3B0aTl4eF9wbGF0Zm9ybV9kZXZpY2UgPSBkZXZpY2U7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQl9Ci0JCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfb3B0aTl4eF9kcml2ZXIpOwotCX0KLSNpZmRlZiBDT05GSUdfUE5QCi0JcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJm9wdGk5eHhfcG5wY19kcml2ZXIpOwotI2VuZGlmCi0jaWZkZWYgTU9EVUxFCi0JcHJpbnRrKEtFUk5fRVJSICJubyBPUFRpICIgQ0hJUF9OQU1FICIgc291bmRjYXJkIGZvdW5kXG4iKTsKLSNlbmRpZgotCXJldHVybiAtRU5PREVWOworCXJldHVybiBpc2FfcmVnaXN0ZXJfZHJpdmVyKCZzbmRfb3B0aTl4eF9kcml2ZXIsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX29wdGk5eHhfZXhpdCh2b2lkKQogewogCWlmICghc25kX29wdGk5eHhfcG5wX2lzX3Byb2JlZCkgewotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzbmRfb3B0aTl4eF9wbGF0Zm9ybV9kZXZpY2UpOwotCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX29wdGk5eHhfZHJpdmVyKTsKKwkJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZzbmRfb3B0aTl4eF9kcml2ZXIpOworCQlyZXR1cm47CiAJfQogI2lmZGVmIENPTkZJR19QTlAKIAlwbnBfdW5yZWdpc3Rlcl9jYXJkX2RyaXZlcigmb3B0aTl4eF9wbnBjX2RyaXZlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2IxNi5jIGIvc291bmQvaXNhL3NiL3NiMTYuYwppbmRleCBkNjRlNjdmLi5jNGJhMjRiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2IxNi5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYjE2LmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXNhLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvc2IuaD4KQEAgLTEyOCw4ICsxMjgsOCBAQAogTU9EVUxFX1BBUk1fREVTQyhzZXFfcG9ydHMsICJOdW1iZXIgb2Ygc2VxdWVuY2VyIHBvcnRzIGZvciBXYXZlVGFibGUgc3ludGguIik7CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbU05EUlZfQ0FSRFNdOwogI2lmZGVmIENPTkZJR19QTlAKK3N0YXRpYyBpbnQgaXNhX3JlZ2lzdGVyZWQ7CiBzdGF0aWMgaW50IHBucF9yZWdpc3RlcmVkOwogI2VuZGlmCiAKQEAgLTUxOSw3ICs1MTksNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9zYjE2X25vbnBucF9wcm9iZTEoaW50IGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQorc3RhdGljIGludCBfX2RldmluaXQgc25kX3NiMTZfaXNhX3Byb2JlMShpbnQgZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfY2FyZF9zYjE2ICphY2FyZDsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CkBAIC01MzksMTkgKzUzOSwyMyBAQAogCWF3ZV9wb3J0W2Rldl0gPSBwb3J0W2Rldl0gKyAweDQwMDsKICNlbmRpZgogCi0Jc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2cHRyLT5kZXYpOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgcGRldik7CiAJaWYgKChlcnIgPSBzbmRfc2IxNl9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBjYXJkKTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIGludCBfX2RldmluaXQgc25kX3NiMTZfbm9ucG5wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfc2IxNl9pc2FfbWF0Y2goc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldikKIHsKLQlpbnQgZGV2ID0gcGRldi0+aWQ7CisJcmV0dXJuIGVuYWJsZVtkZXZdICYmICFpc19pc2FwbnBfc2VsZWN0ZWQoZGV2KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX3NiMTZfaXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBkZXYpCit7CiAJaW50IGVycjsKIAlzdGF0aWMgaW50IHBvc3NpYmxlX2lycXNbXSA9IHs1LCA5LCAxMCwgNywgLTF9OwogCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hczhbXSA9IHsxLCAzLCAwLCAtMX07CkBAIC01NzcsMTMgKzU4MSwxMyBAQAogCX0KIAogCWlmIChwb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKQotCQlyZXR1cm4gc25kX3NiMTZfbm9ucG5wX3Byb2JlMShkZXYsIHBkZXYpOworCQlyZXR1cm4gc25kX3NiMTZfaXNhX3Byb2JlMShkZXYsIHBkZXYpOwogCWVsc2UgewogCQlzdGF0aWMgaW50IHBvc3NpYmxlX3BvcnRzW10gPSB7MHgyMjAsIDB4MjQwLCAweDI2MCwgMHgyODB9OwogCQlpbnQgaTsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG9zc2libGVfcG9ydHMpOyBpKyspIHsKIAkJCXBvcnRbZGV2XSA9IHBvc3NpYmxlX3BvcnRzW2ldOwotCQkJZXJyID0gc25kX3NiMTZfbm9ucG5wX3Byb2JlMShkZXYsIHBkZXYpOworCQkJZXJyID0gc25kX3NiMTZfaXNhX3Byb2JlMShkZXYsIHBkZXYpOwogCQkJaWYgKCEgZXJyKQogCQkJCXJldHVybiAwOwogCQl9CkBAIC01OTEsNDcgKzU5NSw0NyBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgc25kX3NiMTZfbm9ucG5wX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfc2IxNl9pc2FfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBkZXYpCiB7Ci0Jc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOworCXNuZF9jYXJkX2ZyZWUoZGV2X2dldF9kcnZkYXRhKHBkZXYpKTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc25kX3NiMTZfbm9ucG5wX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNuZF9zYjE2X2lzYV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4sCisJCQkJcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXJldHVybiBzbmRfc2IxNl9zdXNwZW5kKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldiksIHN0YXRlKTsKKwlyZXR1cm4gc25kX3NiMTZfc3VzcGVuZChkZXZfZ2V0X2RydmRhdGEoZGV2KSwgc3RhdGUpOwogfQogCi1zdGF0aWMgaW50IHNuZF9zYjE2X25vbnBucF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBzbmRfc2IxNl9pc2FfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pCiB7Ci0JcmV0dXJuIHNuZF9zYjE2X3Jlc3VtZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlyZXR1cm4gc25kX3NiMTZfcmVzdW1lKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKIH0KICNlbmRpZgogCiAjaWZkZWYgU05EUlZfU0JBV0UKLSNkZWZpbmUgU05EX1NCMTZfRFJJVkVSCSJzbmRfc2Jhd2UiCisjZGVmaW5lIERFVl9OQU1FICJzYmF3ZSIKICNlbHNlCi0jZGVmaW5lIFNORF9TQjE2X0RSSVZFUgkic25kX3NiMTYiCisjZGVmaW5lIERFVl9OQU1FICJzYjE2IgogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9zYjE2X25vbnBucF9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHNuZF9zYjE2X25vbnBucF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9zYjE2X25vbnBucF9yZW1vdmUpLAorc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9zYjE2X2lzYV9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF9zYjE2X2lzYV9tYXRjaCwKKwkucHJvYmUJCT0gc25kX3NiMTZfaXNhX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX3NiMTZfaXNhX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBzbmRfc2IxNl9ub25wbnBfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNuZF9zYjE2X25vbnBucF9yZXN1bWUsCisJLnN1c3BlbmQJPSBzbmRfc2IxNl9pc2Ffc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNuZF9zYjE2X2lzYV9yZXN1bWUsCiAjZW5kaWYKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBTTkRfU0IxNl9EUklWRVIKKwkJLm5hbWUJPSBERVZfTkFNRQogCX0sCiB9OwogCiAKICNpZmRlZiBDT05GSUdfUE5QCi1zdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdGRhdGEgc2IxNl9wbnBfZGV2aWNlczsKLQogc3RhdGljIGludCBfX2RldmluaXQgc25kX3NiMTZfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsCiAJCQkJCSBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCiB7CkBAIC02NTMsNyArNjU3LDYgQEAKIAkJfQogCQlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgY2FyZCk7CiAJCWRldisrOwotCQlzYjE2X3BucF9kZXZpY2VzKys7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNjk1LDY4ICs2OTgsMzMgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KIAotc3RhdGljIHZvaWQgX19pbml0X29yX21vZHVsZSBzbmRfc2IxNl91bnJlZ2lzdGVyX2FsbCh2b2lkKQotewotCWludCBpOwotCi0jaWZkZWYgQ09ORklHX1BOUAotCWlmIChwbnBfcmVnaXN0ZXJlZCkKLQkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJnNiMTZfcG5wY19kcml2ZXIpOwotI2VuZGlmCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcyk7ICsraSkKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGxhdGZvcm1fZGV2aWNlc1tpXSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9zYjE2X25vbnBucF9kcml2ZXIpOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfc2IxNl9pbml0KHZvaWQpCiB7Ci0JaW50IGksIGVyciwgY2FyZHMgPSAwOworCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX3NiMTZfbm9ucG5wX2RyaXZlcikpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7Ci0JCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKLQkJaWYgKCEgZW5hYmxlW2ldIHx8IGlzX2lzYXBucF9zZWxlY3RlZChpKSkKLQkJCWNvbnRpbnVlOwotCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFNORF9TQjE2X0RSSVZFUiwKLQkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKLQkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlwbGF0Zm9ybV9kZXZpY2VzW2ldID0gZGV2aWNlOwotCQljYXJkcysrOwotCX0KKwllcnIgPSBpc2FfcmVnaXN0ZXJfZHJpdmVyKCZzbmRfc2IxNl9pc2FfZHJpdmVyLCBTTkRSVl9DQVJEUyk7CiAjaWZkZWYgQ09ORklHX1BOUAotCS8qIFBuUCBjYXJkcyBhdCBsYXN0ICovCi0JZXJyID0gcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZzYjE2X3BucGNfZHJpdmVyKTsKLQlpZiAoIWVycikgewotCQlwbnBfcmVnaXN0ZXJlZCA9IDE7Ci0JCWNhcmRzICs9IHNiMTZfcG5wX2RldmljZXM7Ci0JfQotI2VuZGlmCisJaWYgKCFlcnIpCisJCWlzYV9yZWdpc3RlcmVkID0gMTsKIAotCWlmICghY2FyZHMpIHsKLSNpZmRlZiBNT0RVTEUKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiU291bmQgQmxhc3RlciAxNiBzb3VuZGNhcmQgbm90IGZvdW5kIG9yIGRldmljZSBidXN5XG4iKTsKLSNpZmRlZiBTTkRSVl9TQkFXRV9FTVU4MDAwCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgIkluIGNhc2UsIGlmIHlvdSBoYXZlIG5vbi1BV0UgY2FyZCwgdHJ5IHNuZC1zYjE2IG1vZHVsZVxuIik7Ci0jZWxzZQotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJJbiBjYXNlLCBpZiB5b3UgaGF2ZSBBV0UgY2FyZCwgdHJ5IHNuZC1zYmF3ZSBtb2R1bGVcbiIpOworCWVyciA9IHBucF9yZWdpc3Rlcl9jYXJkX2RyaXZlcigmc2IxNl9wbnBjX2RyaXZlcik7CisJaWYgKCFlcnIpCisJCXBucF9yZWdpc3RlcmVkID0gMTsKKworCWlmIChpc2FfcmVnaXN0ZXJlZCkKKwkJZXJyID0gMDsKICNlbmRpZgotI2VuZGlmCi0JCXNuZF9zYjE2X3VucmVnaXN0ZXJfYWxsKCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX3NiMTZfZXhpdCh2b2lkKQogewotCXNuZF9zYjE2X3VucmVnaXN0ZXJfYWxsKCk7CisjaWZkZWYgQ09ORklHX1BOUAorCWlmIChwbnBfcmVnaXN0ZXJlZCkKKwkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJnNiMTZfcG5wY19kcml2ZXIpOworCWlmIChpc2FfcmVnaXN0ZXJlZCkKKyNlbmRpZgorCQlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9zYjE2X2lzYV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhbHNhX2NhcmRfc2IxNl9pbml0KQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiMTZfY3NwLmMgYi9zb3VuZC9pc2Evc2Ivc2IxNl9jc3AuYwppbmRleCAzZDlkN2UwLi5iMjc5ZjIzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2IxNl9jc3AuYworKysgYi9zb3VuZC9pc2Evc2Ivc2IxNl9jc3AuYwpAQCAtMzYsNiArMzYsMTMgQEAKIE1PRFVMRV9BVVRIT1IoIlVyb3MgQml6amFrIDx1cm9zQGtzcy1sb2thLnNpPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIGRyaXZlciBmb3IgU0IxNiBDcmVhdGl2ZSBTaWduYWwgUHJvY2Vzc29yIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CisjaWZuZGVmIENPTkZJR19TTkRfU0IxNl9DU1BfRklSTVdBUkVfSU5fS0VSTkVMCitNT0RVTEVfRklSTVdBUkUoInNiMTYvbXVsYXdfbWFpbi5jc3AiKTsKK01PRFVMRV9GSVJNV0FSRSgic2IxNi9hbGF3X21haW4uY3NwIik7CitNT0RVTEVfRklSTVdBUkUoInNiMTYvaW1hX2FkcGNtX2luaXQuY3NwIik7CitNT0RVTEVfRklSTVdBUkUoInNiMTYvaW1hX2FkcGNtX3BsYXliYWNrLmNzcCIpOworTU9EVUxFX0ZJUk1XQVJFKCJzYjE2L2ltYV9hZHBjbV9jYXB0dXJlLmNzcCIpOworI2VuZGlmCiAKICNpZmRlZiBTTkRSVl9MSVRUTEVfRU5ESUFOCiAjZGVmaW5lIENTUF9IRFJfVkFMVUUoYSxiLGMsZCkJKChhKSB8ICgoYik8PDgpIHwgKChjKTw8MTYpIHwgKChkKTw8MjQpKQpAQCAtMTYxLDEzICsxNjgsMTcgQEAKICAqLwogc3RhdGljIHZvaWQgc25kX3NiX2NzcF9mcmVlKHN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwKQogeworI2lmbmRlZiBDT05GSUdfU05EX1NCMTZfQ1NQX0ZJUk1XQVJFX0lOX0tFUk5FTAogCWludCBpOworI2VuZGlmCiAJc3RydWN0IHNuZF9zYl9jc3AgKnAgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOwogCWlmIChwKSB7CiAJCWlmIChwLT5ydW5uaW5nICYgU05EUlZfU0JfQ1NQX1NUX1JVTk5JTkcpCiAJCQlzbmRfc2JfY3NwX3N0b3AocCk7CisjaWZuZGVmIENPTkZJR19TTkRfU0IxNl9DU1BfRklSTVdBUkVfSU5fS0VSTkVMCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHAtPmNzcF9wcm9ncmFtcyk7ICsraSkKIAkJCXJlbGVhc2VfZmlybXdhcmUocC0+Y3NwX3Byb2dyYW1zW2ldKTsKKyNlbmRpZgogCQlrZnJlZShwKTsKIAl9CiB9CkBAIC02OTAsOSArNzAxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0jZGVmaW5lIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwKLQotI2lmZGVmIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwKKyNpZmRlZiBDT05GSUdfU05EX1NCMTZfQ1NQX0ZJUk1XQVJFX0lOX0tFUk5FTAogI2luY2x1ZGUgInNiMTZfY3NwX2NvZGVjcy5oIgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIHNuZF9zYl9jc3Bfc3RhdGljX3Byb2dyYW1zW10gPSB7CkBAIC03MTQsMjIgKzcyMywxOSBAQAogCQkic2IxNi9pbWFfYWRwY21fY2FwdHVyZS5jc3AiLAogCX07CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpwcm9ncmFtOwotCWludCBlcnI7CiAKIAlCVUlMRF9CVUdfT04oQVJSQVlfU0laRShuYW1lcykgIT0gQ1NQX1BST0dSQU1fQ09VTlQpOwogCXByb2dyYW0gPSBwLT5jc3BfcHJvZ3JhbXNbaW5kZXhdOwogCWlmICghcHJvZ3JhbSkgewotCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwcm9ncmFtLCBuYW1lc1tpbmRleF0sCi0JCQkJICAgICAgIHAtPmNoaXAtPmNhcmQtPmRldik7Ci0JCWlmIChlcnIgPj0gMCkKLQkJCXAtPmNzcF9wcm9ncmFtc1tpbmRleF0gPSBwcm9ncmFtOwotCQllbHNlIHsKLSNpZmRlZiBGSVJNV0FSRV9JTl9USEVfS0VSTkVMCi0JCQlwcm9ncmFtID0gJnNuZF9zYl9jc3Bfc3RhdGljX3Byb2dyYW1zW2luZGV4XTsKKyNpZmRlZiBDT05GSUdfU05EX1NCMTZfQ1NQX0ZJUk1XQVJFX0lOX0tFUk5FTAorCQlwcm9ncmFtID0gJnNuZF9zYl9jc3Bfc3RhdGljX3Byb2dyYW1zW2luZGV4XTsKICNlbHNlCisJCWludCBlcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwcm9ncmFtLCBuYW1lc1tpbmRleF0sCisJCQkJICAgICAgIHAtPmNoaXAtPmNhcmQtPmRldik7CisJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKICNlbmRpZgotCQl9CisJCXAtPmNzcF9wcm9ncmFtc1tpbmRleF0gPSBwcm9ncmFtOwogCX0KIAlyZXR1cm4gc25kX3NiX2NzcF9sb2FkKHAsIHByb2dyYW0tPmRhdGEsIHByb2dyYW0tPnNpemUsIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjguYyBiL3NvdW5kL2lzYS9zYi9zYjguYwppbmRleCBiZTFlODNlLi5hMWIzNzg2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2I4LmMKKysrIGIvc291bmQvaXNhL3NiL3NiOC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtNTYsOCArNTYsNiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KGRtYTgsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRtYTgsICI4LWJpdCBETUEgIyBmb3IgU0I4IGRyaXZlci4iKTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbU05EUlZfQ0FSRFNdOwotCiBzdHJ1Y3Qgc25kX3NiOCB7CiAJc3RydWN0IHJlc291cmNlICpmbV9yZXM7CS8qIHVzZWQgdG8gYmxvY2sgRk0gaS9vIHJlZ2lvbiBmb3IgbGVnYWN5IGNhcmRzICovCiAJc3RydWN0IHNuZF9zYiAqY2hpcDsKQEAgLTgzLDkgKzgxLDIzIEBACiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShhY2FyZC0+Zm1fcmVzKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgc25kX3NiOF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc25kX3NiOF9tYXRjaChzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgZGV2KQogewotCWludCBkZXYgPSBwZGV2LT5pZDsKKwlpZiAoIWVuYWJsZVtkZXZdKQorCQlyZXR1cm4gMDsKKwlpZiAoaXJxW2Rldl0gPT0gU05EUlZfQVVUT19JUlEpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSBzcGVjaWZ5IGlycVxuIiwgcGRldi0+YnVzX2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChkbWE4W2Rldl0gPT0gU05EUlZfQVVUT19ETUEpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSBzcGVjaWZ5IGRtYThcbiIsIHBkZXYtPmJ1c19pZCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX3NiOF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgZGV2KQorewogCXN0cnVjdCBzbmRfc2IgKmNoaXA7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfc2I4ICphY2FyZDsKQEAgLTE4MCwxMiArMTkyLDEyIEBACiAJCWNoaXAtPnBvcnQsCiAJCWlycVtkZXZdLCBkbWE4W2Rldl0pOwogCi0Jc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGRldi0+ZGV2KTsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOwogCiAJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKQogCQlnb3RvIF9lcnI7CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CiAJcmV0dXJuIDA7CiAKICBfZXJyOgpAQCAtMTkzLDE3ICsyMDUsMTggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfc2I4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX3NiOF9yZW1vdmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldikKIHsKLQlzbmRfY2FyZF9mcmVlKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGRldl9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJZGV2X3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNuZF9zYjhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc25kX3NiOF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4sCisJCQkgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX3NiOCAqYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IGFjYXJkLT5jaGlwOwogCkBAIC0yMTMsOSArMjI2LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfc2I4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNuZF9zYjhfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG4pCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX3NiOCAqYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IGFjYXJkLT5jaGlwOwogCkBAIC0yMjYsOSArMjM5LDEwIEBACiB9CiAjZW5kaWYKIAotI2RlZmluZSBTTkRfU0I4X0RSSVZFUgkic25kX3NiOCIKKyNkZWZpbmUgREVWX05BTUUgInNiOCIKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX3NiOF9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGlzYV9kcml2ZXIgc25kX3NiOF9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF9zYjhfbWF0Y2gsCiAJLnByb2JlCQk9IHNuZF9zYjhfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfc2I4X3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0yMzYsNTYgKzI1MCwxOCBAQAogCS5yZXN1bWUJCT0gc25kX3NiOF9yZXN1bWUsCiAjZW5kaWYKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBTTkRfU0I4X0RSSVZFUgorCQkubmFtZQk9IERFVl9OQU1FIAogCX0sCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlIHNuZF9zYjhfdW5yZWdpc3Rlcl9hbGwodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldmljZXMpOyArK2kpCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZXNbaV0pOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfc2I4X2RyaXZlcik7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9zYjhfaW5pdCh2b2lkKQogewotCWludCBpLCBjYXJkcywgZXJyOwotCi0JZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfc2I4X2RyaXZlcik7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQljYXJkcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKLQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwotCQlpZiAoISBlbmFibGVbaV0pCi0JCQljb250aW51ZTsKLQkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfU0I4X0RSSVZFUiwKLQkJCQkJCQkgaSwgTlVMTCwgMCk7Ci0JCWlmIChJU19FUlIoZGV2aWNlKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpIHsKLQkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlkZXZpY2VzW2ldID0gZGV2aWNlOwotCQljYXJkcysrOwotCX0KLQlpZiAoIWNhcmRzKSB7Ci0jaWZkZWYgTU9EVUxFCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgIlNvdW5kIEJsYXN0ZXIgc291bmRjYXJkIG5vdCBmb3VuZCBvciBkZXZpY2UgYnVzeVxuIik7Ci0jZW5kaWYKLQkJc25kX3NiOF91bnJlZ2lzdGVyX2FsbCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGlzYV9yZWdpc3Rlcl9kcml2ZXIoJnNuZF9zYjhfZHJpdmVyLCBTTkRSVl9DQVJEUyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfc2I4X2V4aXQodm9pZCkKIHsKLQlzbmRfc2I4X3VucmVnaXN0ZXJfYWxsKCk7CisJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZzbmRfc2I4X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGFsc2FfY2FyZF9zYjhfaW5pdCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCmluZGV4IDRmY2QwZjQuLjkyMjUxOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMKKysrIGIvc291bmQvaXNhL3NnYWxheHkuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2EuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTY0LDggKzY0LDYgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShkbWExLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkbWExLCAiRE1BMSAjIGZvciBTb3VuZCBHYWxheHkgZHJpdmVyLiIpOwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tTTkRSVl9DQVJEU107Ci0KICNkZWZpbmUgU0dBTEFYWV9BVVhDX0xFRlQgMTgKICNkZWZpbmUgU0dBTEFYWV9BVVhDX1JJR0hUIDE5CiAKQEAgLTk2LDcgKzk0LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX3NnYWxheHlfc2Jkc3BfY29tbWFuZCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGNoYXIgdmFsKQorc3RhdGljIGludCBfX2RldmluaXQgc25kX3NnYWxheHlfc2Jkc3BfY29tbWFuZCh1bnNpZ25lZCBsb25nIHBvcnQsCisJCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHZhbCkKIHsKIAlpbnQgaTsKICAgICAgICAJCkBAIC0xMTQsNyArMTEzLDcgQEAKIAlyZXR1cm4gSVJRX05PTkU7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHNuZF9zZ2FsYXh5X3NldHVwX3dzcyh1bnNpZ25lZCBsb25nIHBvcnQsIGludCBpcnEsIGludCBkbWEpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfc2dhbGF4eV9zZXR1cF93c3ModW5zaWduZWQgbG9uZyBwb3J0LCBpbnQgaXJxLCBpbnQgZG1hKQogewogCXN0YXRpYyBpbnQgaW50ZXJydXB0X2JpdHNbXSA9IHstMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMHgwOCwgLTEsIAogCQkJCSAgICAgICAweDEwLCAweDE4LCAweDIwLCAtMSwgLTEsIC0xLCAtMX07CkBAIC0xNjEsNyArMTYwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc25kX3NnYWxheHlfZGV0ZWN0KGludCBkZXYsIGludCBpcnEsIGludCBkbWEpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfc2dhbGF4eV9kZXRlY3QoaW50IGRldiwgaW50IGlycSwgaW50IGRtYSkKIHsKICNpZiAwCiAJc25kX3ByaW50ZGQoUEZYICJzd2l0Y2hpbmcgdG8gV1NTIG1vZGVcbiIpOwpAQCAtMTgyLDcgKzE4MSw3IEBACiBBRDE4NDhfRE9VQkxFKCJBdXggUGxheWJhY2sgVm9sdW1lIiwgMCwgU0dBTEFYWV9BVVhDX0xFRlQsIFNHQUxBWFlfQVVYQ19SSUdIVCwgMCwgMCwgMzEsIDApCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzbmRfc2dhbGF4eV9taXhlcihzdHJ1Y3Qgc25kX2FkMTg0OCAqY2hpcCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9zZ2FsYXh5X21peGVyKHN0cnVjdCBzbmRfYWQxODQ4ICpjaGlwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGNoaXAtPmNhcmQ7CiAJc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBpZDEsIGlkMjsKQEAgLTIxOCwyMyArMjE3LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHNuZF9zZ2FsYXh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9zZ2FsYXh5X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwgdW5zaWduZWQgaW50IGRldikKIHsKLQlpbnQgZGV2ID0gZGV2cHRyLT5pZDsKKwlpZiAoIWVuYWJsZVtkZXZdKQorCQlyZXR1cm4gMDsKKwlpZiAoc2Jwb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJzcGVjaWZ5IFNCIHBvcnRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHdzc3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggInNwZWNpZnkgV1NTIHBvcnRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9zZ2FsYXh5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwgdW5zaWduZWQgaW50IGRldikKK3sKIAlzdGF0aWMgaW50IHBvc3NpYmxlX2lycXNbXSA9IHs3LCA5LCAxMCwgMTEsIC0xfTsKIAlzdGF0aWMgaW50IHBvc3NpYmxlX2RtYXNbXSA9IHsxLCAzLCAwLCAtMX07CiAJaW50IGVyciwgeGlycSwgeGRtYTE7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfYWQxODQ4ICpjaGlwOwogCi0JaWYgKHNicG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAic3BlY2lmeSBTQiBwb3J0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICh3c3Nwb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJzcGVjaWZ5IFdTUyBwb3J0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwogCWlmIChjYXJkID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjgzLDEyICsyODgsMTIgQEAKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiU291bmQgR2FsYXh5IGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCIsCiAJCXdzc3BvcnRbZGV2XSwgeGlycSwgeGRtYTEpOwogCi0Jc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2cHRyLT5kZXYpOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgZGV2cHRyKTsKIAogCWlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkKIAkJZ290byBfZXJyOwogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBjYXJkKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBjYXJkKTsKIAlyZXR1cm4gMDsKIAogIF9lcnI6CkBAIC0yOTYsMTcgKzMwMSwxOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9zZ2FsYXh5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfc2dhbGF4eV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2cHRyLCB1bnNpZ25lZCBpbnQgZGV2KQogewotCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGRldl9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzbmRfc2dhbGF4eV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc25kX3NnYWxheHlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgbiwKKwkJCSAgICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbmRfYWQxODQ4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwpAQCAtMzE0LDkgKzMyMCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX3NnYWxheHlfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHNuZF9zZ2FsYXh5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgbikKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9hZDE4NDggKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKIAljaGlwLT5yZXN1bWUoY2hpcCk7CkBAIC0zMjgsOSArMzM0LDEwIEBACiB9CiAjZW5kaWYKIAotI2RlZmluZSBTTkRfU0dBTEFYWV9EUklWRVIJInNuZF9zZ2FsYXh5IgorI2RlZmluZSBERVZfTkFNRSAic2dhbGF4eSIKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX3NnYWxheHlfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9zZ2FsYXh5X2RyaXZlciA9IHsKKwkubWF0Y2gJCT0gc25kX3NnYWxheHlfbWF0Y2gsCiAJLnByb2JlCQk9IHNuZF9zZ2FsYXh5X3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX3NnYWxheHlfcmVtb3ZlKSwKICNpZmRlZiBDT05GSUdfUE0KQEAgLTMzOCw1NiArMzQ1LDE4IEBACiAJLnJlc3VtZQkJPSBzbmRfc2dhbGF4eV9yZXN1bWUsCiAjZW5kaWYKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBTTkRfU0dBTEFYWV9EUklWRVIKKwkJLm5hbWUJPSBERVZfTkFNRQogCX0sCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlIHNuZF9zZ2FsYXh5X3VucmVnaXN0ZXJfYWxsKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZpY2VzKTsgKytpKQotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2VzW2ldKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX3NnYWxheHlfZHJpdmVyKTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX3NnYWxheHlfaW5pdCh2b2lkKQogewotCWludCBpLCBjYXJkcywgZXJyOwotCi0JZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfc2dhbGF4eV9kcml2ZXIpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JY2FyZHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7Ci0JCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKLQkJaWYgKCEgZW5hYmxlW2ldKQotCQkJY29udGludWU7Ci0JCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX1NHQUxBWFlfRFJJVkVSLAotCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKQotCQkJY29udGludWU7Ci0JCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgewotCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWRldmljZXNbaV0gPSBkZXZpY2U7Ci0JCWNhcmRzKys7Ci0JfQotCWlmICghY2FyZHMpIHsKLSNpZmRlZiBNT0RVTEUKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiU291bmQgR2FsYXh5IHNvdW5kY2FyZCBub3QgZm91bmQgb3IgZGV2aWNlIGJ1c3lcbiIpOwotI2VuZGlmCi0JCXNuZF9zZ2FsYXh5X3VucmVnaXN0ZXJfYWxsKCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc25kX3NnYWxheHlfZHJpdmVyLCBTTkRSVl9DQVJEUyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfc2dhbGF4eV9leGl0KHZvaWQpCiB7Ci0Jc25kX3NnYWxheHlfdW5yZWdpc3Rlcl9hbGwoKTsKKwlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9zZ2FsYXh5X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGFsc2FfY2FyZF9zZ2FsYXh5X2luaXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc3NjYXBlLmMgYi9zb3VuZC9pc2Evc3NjYXBlLmMKaW5kZXggYjFmMjU4Mi4uOWVhNDE3YiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NzY2FwZS5jCisrKyBiL3NvdW5kL2lzYS9zc2NhcGUuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2EuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC02OCwxMCArNjgsMTAgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShkbWEsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRtYSwgIkRNQSAjIGZvciBTb3VuZFNjYXBlIGRyaXZlci4iKTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbU05EUlZfQ0FSRFNdOwotICAKICNpZmRlZiBDT05GSUdfUE5QCitzdGF0aWMgaW50IGlzYV9yZWdpc3RlcmVkOwogc3RhdGljIGludCBwbnBfcmVnaXN0ZXJlZDsKKwogc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc3NjYXBlX3BucGlkc1tdID0gewogCXsgLmlkID0gIkVOUzMwODEiLCAuZGV2cyA9IHsgeyAiRU5TMDAwMCIgfSB9IH0sCiAJeyAuaWQgPSAiIiB9CS8qIGVuZCAqLwpAQCAtMTI1NCw5ICsxMjU0LDI3IEBACiB9CiAKIAotc3RhdGljIGludCBfX2RldmluaXQgc25kX3NzY2FwZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc25kX3NzY2FwZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpbnQgZGV2ID0gcGRldi0+aWQ7CisJLyoKKwkgKiBNYWtlIHN1cmUgd2Ugd2VyZSBnaXZlbiBBTEwgb2YgdGhlIG90aGVyIHBhcmFtZXRlcnMuCisJICovCisJaWYgKHBvcnRbaV0gPT0gU05EUlZfQVVUT19QT1JUKQorCQlyZXR1cm4gMDsKKworCWlmIChpcnFbaV0gPT0gU05EUlZfQVVUT19JUlEgfHwKKwkgICAgbXB1X2lycVtpXSA9PSBTTkRSVl9BVVRPX0lSUSB8fAorCSAgICBkbWFbaV0gPT0gU05EUlZfQVVUT19ETUEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgInNzY2FwZTogaW5zdWZmaWNpZW50IHBhcmFtZXRlcnMsIG5lZWQgSU8sIElSUSwgTVBVLUlSUSBhbmQgRE1BXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9zc2NhcGVfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldikKK3sKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IHJldDsKIApAQCAtMTI2NCwzMCArMTI4MiwzMSBAQAogCXJldCA9IGNyZWF0ZV9zc2NhcGUoZGV2LCAmY2FyZCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0Jc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGRldi0+ZGV2KTsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOwogCWlmICgocmV0ID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgInNzY2FwZTogRmFpbGVkIHRvIHJlZ2lzdGVyIHNvdW5kIGNhcmRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9zc2NhcGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF9zc2NhcGVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwgdW5zaWduZWQgaW50IGRldikKIHsKLQlzbmRfY2FyZF9mcmVlKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldnB0cikpOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgTlVMTCk7CisJc25kX2NhcmRfZnJlZShkZXZfZ2V0X2RydmRhdGEoZGV2cHRyKSk7CisJZGV2X3NldF9kcnZkYXRhKGRldnB0ciwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgU1NDQVBFX0RSSVZFUgkic25kX3NzY2FwZSIKKyNkZWZpbmUgREVWX05BTUUgInNzY2FwZSIKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX3NzY2FwZV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGlzYV9kcml2ZXIgc25kX3NzY2FwZV9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF9zc2NhcGVfbWF0Y2gsCiAJLnByb2JlCQk9IHNuZF9zc2NhcGVfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbmRfc3NjYXBlX3JlbW92ZSksCiAJLyogRklYTUU6IHN1c3BlbmQvcmVzdW1lICovCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gU1NDQVBFX0RSSVZFUgorCQkubmFtZQk9IERFVl9OQU1FCiAJfSwKIH07CiAKQEAgLTEzODYsOTAgKzE0MDUsMzMgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KIAotc3RhdGljIHZvaWQgX19pbml0X29yX21vZHVsZSBzc2NhcGVfdW5yZWdpc3Rlcl9hbGwodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNzY2FwZV9pbml0KHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGVycjsKIAorCWVyciA9IGlzYV9yZWdpc3Rlcl9kcml2ZXIoJnNuZF9zc2NhcGVfZHJpdmVyLCBTTkRSVl9DQVJEUyk7CisjaWZkZWYgQ09ORklHX1BOUAorCWlmICghZXJyKQorCQlpc2FfcmVnaXN0ZXJlZCA9IDE7CisKKwllcnIgPSBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJnNzY2FwZV9wbnBjX2RyaXZlcik7CisJaWYgKCFlcnIpCisJCXBucF9yZWdpc3RlcmVkID0gMTsKKworCWlmIChpc2FfcmVnaXN0ZXJlZCkKKwkJZXJyID0gMDsKKyNlbmRpZgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzc2NhcGVfZXhpdCh2b2lkKQorewogI2lmZGVmIENPTkZJR19QTlAKIAlpZiAocG5wX3JlZ2lzdGVyZWQpCiAJCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZzc2NhcGVfcG5wY19kcml2ZXIpOworCWlmIChpc2FfcmVnaXN0ZXJlZCkKICNlbmRpZgotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpOyArK2kpCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBsYXRmb3JtX2RldmljZXNbaV0pOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfc3NjYXBlX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNzY2FwZV9tYW51YWxfcHJvYmUodm9pZCkKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7Ci0JaW50IGksIHJldDsKLQotCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX3NzY2FwZV9kcml2ZXIpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyArK2kpIHsKLQkJLyoKLQkJICogV2UgZG8gTk9UIHByb2JlIGZvciBwb3J0cy4KLQkJICogSWYgd2UncmUgbm90IGdpdmVuIGEgcG9ydCBudW1iZXIgZm9yIHRoaXMKLQkJICogY2FyZCB0aGVuIHdlIGNvbXBsZXRlbHkgaWdub3JlIHRoaXMgbGluZQotCQkgKiBvZiBwYXJhbWV0ZXJzLgotCQkgKi8KLQkJaWYgKHBvcnRbaV0gPT0gU05EUlZfQVVUT19QT1JUKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogTWFrZSBzdXJlIHdlIHdlcmUgZ2l2ZW4gQUxMIG9mIHRoZSBvdGhlciBwYXJhbWV0ZXJzLgotCQkgKi8KLQkJaWYgKGlycVtpXSA9PSBTTkRSVl9BVVRPX0lSUSB8fAotCQkgICAgbXB1X2lycVtpXSA9PSBTTkRSVl9BVVRPX0lSUSB8fAotCQkgICAgZG1hW2ldID09IFNORFJWX0FVVE9fRE1BKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgInNzY2FwZTogaW5zdWZmaWNpZW50IHBhcmFtZXRlcnMsIG5lZWQgSU8sIElSUSwgTVBVLUlSUSBhbmQgRE1BXG4iKTsKLQkJCXNzY2FwZV91bnJlZ2lzdGVyX2FsbCgpOwotCQkJcmV0dXJuIC1FTlhJTzsKLQkJfQotCi0JCS8qCi0JCSAqIFRoaXMgY2FyZHMgbG9va3MgT0sgLi4uCi0JCSAqLwotCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFNTQ0FQRV9EUklWRVIsCi0JCQkJCQkJIGksIE5VTEwsIDApOwotCQlpZiAoSVNfRVJSKGRldmljZSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpKSB7Ci0JCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQkJY29udGludWU7Ci0JCX0KLQkJcGxhdGZvcm1fZGV2aWNlc1tpXSA9IGRldmljZTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNzY2FwZV9leGl0KHZvaWQpCi17Ci0Jc3NjYXBlX3VucmVnaXN0ZXJfYWxsKCk7Ci19Ci0KLQotc3RhdGljIGludCBfX2luaXQgc3NjYXBlX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JLyoKLQkgKiBGaXJzdCBjaGVjayB3aGV0aGVyIHdlIHdlcmUgcGFzc2VkIGFueSBwYXJhbWV0ZXJzLgotCSAqIFRoZXNlIE1VU1QgdGFrZSBwcmVjZWRlbmNlIG92ZXIgQU5ZIGF1dG9tYXRpYyB3YXkKLQkgKiBvZiBhbGxvY2F0aW5nIGNhcmRzLCBiZWNhdXNlIHRoZSBvcGVyYXRvciBpcwotCSAqIFMtUC1FLUwtTC1JLU4tRyBpdCBvdXQgZm9yIHVzLi4uCi0JICovCi0JcmV0ID0gc3NjYXBlX21hbnVhbF9wcm9iZSgpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotI2lmZGVmIENPTkZJR19QTlAKLQlpZiAocG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZzc2NhcGVfcG5wY19kcml2ZXIpID09IDApCi0JCXBucF9yZWdpc3RlcmVkID0gMTsKLSNlbmRpZgotCXJldHVybiAwOworCQlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9zc2NhcGVfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc3NjYXBlX2luaXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKaW5kZXggZTJmZGQ1Zi4uODNjMmZjNCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYworKysgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtNDAsNyArNDAsOSBAQAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJICAgIC8qIEluZGV4IDAtTUFYICovCiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CSAgICAvKiBJRCBmb3IgdGhpcyBjYXJkICovCiBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRTsJICAgIC8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KKyNpZmRlZiBDT05GSUdfUE5QCiBzdGF0aWMgaW50IGlzYXBucFtTTkRSVl9DQVJEU10gPSB7WzAgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IDF9OworI2VuZGlmCiBzdGF0aWMgbG9uZyBjczQyMzJfcGNtX3BvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwkvKiBQblAgc2V0dXAgKi8KIHN0YXRpYyBpbnQgY3M0MjMyX3BjbV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7IC8qIDUsNyw5LDExLDEyLDE1ICovCiBzdGF0aWMgbG9uZyBjczQyMzJfbXB1X3BvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOyAvKiBQblAgc2V0dXAgKi8KQEAgLTgzLDkgKzg1LDggQEAKIG1vZHVsZV9wYXJhbV9hcnJheSh1c2VfY3M0MjMyX21pZGksIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh1c2VfY3M0MjMyX21pZGksICJVc2UgQ1M0MjMyIE1QVS00MDEgaW50ZXJmYWNlIChpbmFjY2Vzc2libHkgbG9jYXRlZCBpbnNpZGUgeW91ciBjb21wdXRlcikiKTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbU05EUlZfQ0FSRFNdOwotCiAjaWZkZWYgQ09ORklHX1BOUAorc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKIHN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF93YXZlZnJvbnRfcG5waWRzW10gPSB7CkBAIC01ODgsNTYgKzU4OSw2NyBAQAogCXJldHVybiBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKIH0JCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF93YXZlZnJvbnRfbm9ucG5wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfd2F2ZWZyb250X2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpwZGV2LAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXYpCiB7Ci0JaW50IGRldiA9IHBkZXYtPmlkOwotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLQlpbnQgZXJyOwotCisJaWYgKCFlbmFibGVbZGV2XSkKKwkJcmV0dXJuIDA7CisjaWZkZWYgQ09ORklHX1BOUAorCWlmIChpc2FwbnBbZGV2XSkKKwkJcmV0dXJuIDA7CisjZW5kaWYKIAlpZiAoY3M0MjMyX3BjbV9wb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7CiAJCXNuZF9wcmludGsoInNwZWNpZnkgQ1M0MjMyIHBvcnRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CiAJfQogCWlmIChpY3MyMTE1X3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKIAkJc25kX3ByaW50aygic3BlY2lmeSBJQ1MyMTE1IHBvcnRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIDA7CiAJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfd2F2ZWZyb250X2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CiAKIAljYXJkID0gc25kX3dhdmVmcm9udF9jYXJkX25ldyhkZXYpOwogCWlmICghIGNhcmQpCiAJCXJldHVybiAtRU5PTUVNOwotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBkZXYtPmRldik7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKIAlpZiAoKGVyciA9IHNuZF93YXZlZnJvbnRfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CiAJfQogCQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCWRldl9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgc25kX3dhdmVmcm9udF9ub25wbnBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNuZF93YXZlZnJvbnRfaXNhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBkZXYpCiB7Ci0Jc25kX2NhcmRfZnJlZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOworCXNuZF9jYXJkX2ZyZWUoZGV2X2dldF9kcnZkYXRhKGRldnB0cikpOworCWRldl9zZXRfZHJ2ZGF0YShkZXZwdHIsIE5VTEwpOwogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIFdBVkVGUk9OVF9EUklWRVIJInNuZF93YXZlZnJvbnQiCisjZGVmaW5lIERFVl9OQU1FICJ3YXZlZnJvbnQiCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF93YXZlZnJvbnRfZHJpdmVyID0gewotCS5wcm9iZQkJPSBzbmRfd2F2ZWZyb250X25vbnBucF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF93YXZlZnJvbnRfbm9ucG5wX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IGlzYV9kcml2ZXIgc25kX3dhdmVmcm9udF9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHNuZF93YXZlZnJvbnRfaXNhX21hdGNoLAorCS5wcm9iZQkJPSBzbmRfd2F2ZWZyb250X2lzYV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF93YXZlZnJvbnRfaXNhX3JlbW92ZSksCiAJLyogRklYTUU6IHN1c3BlbmQsIHJlc3VtZSAqLwogCS5kcml2ZXIJCT0gewotCQkubmFtZQk9IFdBVkVGUk9OVF9EUklWRVIKKwkJLm5hbWUJPSBERVZfTkFNRQogCX0sCiB9OwogCiAKICNpZmRlZiBDT05GSUdfUE5QCi1zdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdGRhdGEgd2F2ZWZyb250X3BucF9kZXZpY2VzOwotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfd2F2ZWZyb250X3BucF9kZXRlY3Qoc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKnBpZCkKIHsKQEAgLTY3MCw3ICs2ODIsNiBAQAogCiAJcG5wX3NldF9jYXJkX2RydmRhdGEocGNhcmQsIGNhcmQpOwogCWRldisrOwotCXdhdmVmcm9udF9wbnBfZGV2aWNlcysrOwogCXJldHVybiAwOwogfQogCkBAIC02OTEsNjcgKzcwMiwzMyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BOUCAqLwogCi1zdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlIHNuZF93YXZlZnJvbnRfdW5yZWdpc3Rlcl9hbGwodm9pZCkKLXsKLQlpbnQgaTsKLQotI2lmZGVmIENPTkZJR19QTlAKLQlpZiAocG5wX3JlZ2lzdGVyZWQpCi0JCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZ3YXZlZnJvbnRfcG5wY19kcml2ZXIpOwotI2VuZGlmCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcyk7ICsraSkKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGxhdGZvcm1fZGV2aWNlc1tpXSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF93YXZlZnJvbnRfZHJpdmVyKTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX3dhdmVmcm9udF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIGVyciwgY2FyZHMgPSAwOworCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX3dhdmVmcm9udF9kcml2ZXIpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewotCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7Ci0JCWlmICghIGVuYWJsZVtpXSkKLQkJCWNvbnRpbnVlOworCWVyciA9IGlzYV9yZWdpc3Rlcl9kcml2ZXIoJnNuZF93YXZlZnJvbnRfZHJpdmVyLCBTTkRSVl9DQVJEUyk7CiAjaWZkZWYgQ09ORklHX1BOUAotCQlpZiAoaXNhcG5wW2ldKQotCQkJY29udGludWU7Ci0jZW5kaWYKLQkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShXQVZFRlJPTlRfRFJJVkVSLAotCQkJCQkJCSBpLCBOVUxMLCAwKTsKLQkJaWYgKElTX0VSUihkZXZpY2UpKQotCQkJY29udGludWU7Ci0JCWlmICghcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkgewotCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXBsYXRmb3JtX2RldmljZXNbaV0gPSBkZXZpY2U7Ci0JCWNhcmRzKys7Ci0JfQorCWlmICghZXJyKQorCQlpc2FfcmVnaXN0ZXJlZCA9IDE7CiAKLSNpZmRlZiBDT05GSUdfUE5QCiAJZXJyID0gcG5wX3JlZ2lzdGVyX2NhcmRfZHJpdmVyKCZ3YXZlZnJvbnRfcG5wY19kcml2ZXIpOwotCWlmICghZXJyKSB7CisJaWYgKCFlcnIpCiAJCXBucF9yZWdpc3RlcmVkID0gMTsKLQkJY2FyZHMgKz0gd2F2ZWZyb250X3BucF9kZXZpY2VzOwotCX0KLSNlbmRpZgogCi0JaWYgKCFjYXJkcykgewotI2lmZGVmIE1PRFVMRQotCQlwcmludGsgKEtFUk5fRVJSICJObyBXYXZlRnJvbnQgY2FyZHMgZm91bmQgb3IgZGV2aWNlcyBidXN5XG4iKTsKKwlpZiAoaXNhX3JlZ2lzdGVyZWQpCisJCWVyciA9IDA7CiAjZW5kaWYKLQkJc25kX3dhdmVmcm9udF91bnJlZ2lzdGVyX2FsbCgpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF93YXZlZnJvbnRfZXhpdCh2b2lkKQogewotCXNuZF93YXZlZnJvbnRfdW5yZWdpc3Rlcl9hbGwoKTsKKyNpZmRlZiBDT05GSUdfUE5QCisJaWYgKHBucF9yZWdpc3RlcmVkKQorCQlwbnBfdW5yZWdpc3Rlcl9jYXJkX2RyaXZlcigmd2F2ZWZyb250X3BucGNfZHJpdmVyKTsKKwlpZiAoaXNhX3JlZ2lzdGVyZWQpCisjZW5kaWYKKwkJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZzbmRfd2F2ZWZyb250X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGFsc2FfY2FyZF93YXZlZnJvbnRfaW5pdCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X2Z4LmMgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9meC5jCmluZGV4IDE1MzMxZWQuLmZjOTVhODcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X2Z4LmMKKysrIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfZnguYwpAQCAtMzUsOSArMzUsNyBAQAogCiAjZGVmaW5lIFdBSVRfSURMRQkweGZmCiAKLSNkZWZpbmUgRklSTVdBUkVfSU5fVEhFX0tFUk5FTAotCi0jaWZkZWYgRklSTVdBUkVfSU5fVEhFX0tFUk5FTAorI2lmZGVmIENPTkZJR19TTkRfV0FWRUZST05UX0ZJUk1XQVJFX0lOX0tFUk5FTAogI2luY2x1ZGUgInlzczIyNS5jIgogc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSB5c3MyMjVfcmVnaXN0ZXJzX2Zpcm13YXJlID0gewogCS5kYXRhID0gKHU4ICopeXNzMjI1X3JlZ2lzdGVycywKQEAgLTI1OCwyMSArMjU2LDIxIEBACiB7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGVycjsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUgPSBOVUxMOwogCiAJaWYgKGRldi0+ZnhfaW5pdGlhbGl6ZWQpCiAJCXJldHVybiAwOwogCisjaWZkZWYgQ09ORklHX1NORF9XQVZFRlJPTlRfRklSTVdBUkVfSU5fS0VSTkVMCisJZmlybXdhcmUgPSAmeXNzMjI1X3JlZ2lzdGVyc19maXJtd2FyZTsKKyNlbHNlCiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsICJ5YW1haGEveXNzMjI1X3JlZ2lzdGVycy5iaW4iLAogCQkJICAgICAgIGRldi0+Y2FyZC0+ZGV2KTsKIAlpZiAoZXJyIDwgMCkgewotI2lmZGVmIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwKLQkJZmlybXdhcmUgPSAmeXNzMjI1X3JlZ2lzdGVyc19maXJtd2FyZTsKLSNlbHNlCiAJCWVyciA9IC0xOwogCQlnb3RvIG91dDsKLSNlbmRpZgogCX0KKyNlbmRpZgogCiAJZm9yIChpID0gMDsgaSArIDEgPCBmaXJtd2FyZS0+c2l6ZTsgaSArPSAyKSB7CiAJCWlmIChmaXJtd2FyZS0+ZGF0YVtpXSA+PSA4ICYmIGZpcm13YXJlLT5kYXRhW2ldIDwgMTYpIHsKQEAgLTI5NSw5ICsyOTMsMTIgQEAKIAllcnIgPSAwOwogCiBvdXQ6Ci0jaWZkZWYgRklSTVdBUkVfSU5fVEhFX0tFUk5FTAotCWlmIChmaXJtd2FyZSAhPSAmeXNzMjI1X3JlZ2lzdGVyc19maXJtd2FyZSkKKyNpZm5kZWYgQ09ORklHX1NORF9XQVZFRlJPTlRfRklSTVdBUkVfSU5fS0VSTkVMCisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CiAjZW5kaWYKLQkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CiAJcmV0dXJuIGVycjsKIH0KKworI2lmbmRlZiBDT05GSUdfU05EX1dBVkVGUk9OVF9GSVJNV0FSRV9JTl9LRVJORUwKK01PRFVMRV9GSVJNV0FSRSgieWFtYWhhL3lzczIyNV9yZWdpc3RlcnMuYmluIik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9LY29uZmlnIGIvc291bmQvb3NzL0tjb25maWcKaW5kZXggNGM0MTkzMC4uNGIzMGFlNiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL0tjb25maWcKKysrIGIvc291bmQvb3NzL0tjb25maWcKQEAgLTUsMjMgKzUsMjIgQEAKICMKICMgUHJvbXB0IHVzZXIgZm9yIHByaW1hcnkgZHJpdmVycy4KIAotY29uZmlnIE9CU09MRVRFX09TUworY29uZmlnIE9TU19PQlNPTEVURQogCWJvb2wgIk9ic29sZXRlIE9TUyBkcml2ZXJzIgogCWRlcGVuZHMgb24gU09VTkRfUFJJTUUKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIG9ic29sZXRlIE9TUyBkcml2ZXJzIHRoYXQKLQkgIGFyZSBzY2hlZHVsZWQgZm9yIHJlbW92YWwgaW4gdGhlIG5lYXIgZnV0dXJlIHNpbmNlIHRoZXJlCi0JICBhcmUgQUxTQSBkcml2ZXJzIGZvciB0aGUgc2FtZSBoYXJkd2FyZS4KKwkgIGFyZSBzY2hlZHVsZWQgZm9yIHJlbW92YWwgaW4gdGhlIG5lYXIgZnV0dXJlLgogCiAJICBQbGVhc2UgY29udGFjdCBBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+IGlmIHlvdSBoYWQgdG8KLQkgIHNheSBZIGhlcmUgYmVjYXVzZSB5b3VyIHNvdW5kY2FyZCBpcyBub3QgcHJvcGVybHkgc3VwcG9ydGVkCisJICBzYXkgWSBoZXJlIGJlY2F1c2UgeW91ciBoYXJkd2FyZSBpcyBub3QgcHJvcGVybHkgc3VwcG9ydGVkCiAJICBieSBBTFNBLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgU09VTkRfQlQ4NzgKIAl0cmlzdGF0ZSAiQlQ4NzggYXVkaW8gZG1hIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT1NTX09CU09MRVRFCiAJLS0taGVscC0tLQogCSAgQXVkaW8gRE1BIHN1cHBvcnQgZm9yIGJ0ODc4IGJhc2VkIGdyYWJiZXIgYm9hcmRzLiAgQXMgeW91IG1pZ2h0IGhhdmUKIAkgIGFscmVhZHkgbm90aWNlZCwgYnQ4NzggaXMgbGlzdGVkIHdpdGggdHdvIGZ1bmN0aW9ucyBpbiAvcHJvYy9wY2kuCkBAIC00NSwyMiArNDQsOSBAQAogCSAgbm90ZSB0aGF0IENPTkZJR19LR0RCIHNob3VsZCBub3QgYmUgZW5hYmxlZCBhdCB0aGUgc2FtZQogCSAgdGltZSwgc2luY2UgaXQgYWxzbyBhdHRlbXB0cyB0byB1c2UgdGhpcyBVQVJUIHBvcnQuCiAKLWNvbmZpZyBTT1VORF9FUzEzNzEKLQl0cmlzdGF0ZSAiQ3JlYXRpdmUgRW5zb25pcSBBdWRpb1BDSSA5NyAoRVMxMzcxKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1MKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXRpbGl6aW5nIHRoZSBFbnNvbmlxCi0JICBFUzEzNzEgY2hpcHNldCwgc3VjaCBhcyBFbnNvbmlxJ3MgQXVkaW9QQ0k5Ny4gVG8gZmluZCBvdXQgaWYKLQkgIHlvdXIgc291bmQgY2FyZCB1c2VzIGFuIEVTMTM3MSB3aXRob3V0IHJlbW92aW5nIHlvdXIgY29tcHV0ZXIncwotCSAgY292ZXIsIHVzZSBsc3BjaSAtbiBhbmQgbG9vayBmb3IgdGhlIFBDSSBJRCAxMjc0OjEzNzEuIFNpbmNlCi0JICBFbnNvbmlxIHdhcyBib3VnaHQgYnkgQ3JlYXRpdmUgTGFicywgU291bmQgQmxhc3RlciA2NC9QQ0kKLQkgIG1vZGVscyBhcmUgZWl0aGVyIEVTMTM3MCBvciBFUzEzNzEgYmFzZWQuIFRoaXMgZHJpdmVyIGRpZmZlcnMKLQkgIHNsaWdodGx5IGZyb20gT1NTL0ZyZWUsIHNvIFBMRUFTRSBSRUFECi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9lczEzNzE+LgotCiBjb25maWcgU09VTkRfSUNICiAJdHJpc3RhdGUgIkludGVsIElDSCAoaTh4eCkgYXVkaW8gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9TU19PQlNPTEVURQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGludGVncmFsIGF1ZGlvIGluIEludGVsJ3MgSS9PIENvbnRyb2xsZXIgSHViIChJQ0gpCiAJICBjaGlwc2V0LCBhcyB1c2VkIG9uIHRoZSA4MTAvODIwLzg0MCBtb3RoZXJib2FyZHMuCkBAIC0zNjIsNyArMzQ4LDcgQEAKIAogY29uZmlnIFNPVU5EX1ZJQTgyQ1hYWAogCXRyaXN0YXRlICJWSUEgODJDNjg2IEF1ZGlvIENvZGVjIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT1NTX09CU09MRVRFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBhdWRpbyBjb2RlYyBmb3VuZCBvbiBWSUEKIAkgIDgyQ3h4eC1iYXNlZCBjaGlwcy4gVHlwaWNhbGx5IHRoZXNlIGFyZSBidWlsdCBpbnRvIGEgbW90aGVyYm9hcmQuCkBAIC00MTYsNyArNDAyLDcgQEAKIAogY29uZmlnIFNPVU5EX0NTNDIzMgogCXRyaXN0YXRlICJDcnlzdGFsIENTNDIzMiBiYXNlZCAoUG5QKSBjYXJkcyIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUworCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9TU19PQlNPTEVURQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBjYXJkIGJhc2VkIG9uIHRoZSBDcnlzdGFsIENTNDIzMiBjaGlwIHNldCwKIAkgIHdoaWNoIHVzZXMgaXRzIG93biBQbHVnIGFuZCBQbGF5IHByb3RvY29sLgpAQCAtNzM1LDcgKzcyMSw3IEBACiAKIGNvbmZpZyBTT1VORF9UVk1JWEVSCiAJdHJpc3RhdGUgIlRWIGNhcmQgKGJ0ODQ4KSBtaXhlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgSTJDICYmIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIEkyQyAmJiBWSURFT19WNEwxICYmIE9TU19PQlNPTEVURQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGF1ZGlvIG1peGVyIGZhY2lsaXRpZXMgb24gdGhlIEJUODQ4IFRWIGZyYW1lLWdyYWJiZXIKIAkgIGNhcmQuCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYnRhdWRpby5jIGIvc291bmQvb3NzL2J0YXVkaW8uYwppbmRleCBmODEzYWU5Li40ZDVjZjA1IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYnRhdWRpby5jCisrKyBiL3NvdW5kL29zcy9idGF1ZGlvLmMKQEAgLTM0NCw3ICszNDQsNyBAQAogCWlmIChjbWQgPT0gU09VTkRfT0xEX01JWEVSX0lORk8pIHsKIAkJX29sZF9taXhlcl9pbmZvIGluZm87CiAJCW1lbXNldCgmaW5mbywwLHNpemVvZihpbmZvKSk7Ci0gICAgICAgICAgICAgICAgc3RybGNweShpbmZvLmlkLCJidDg3OCIsc2l6ZW9mKGluZm8uaWQpLTEpOworICAgICAgICAgICAgICAgIHN0cmxjcHkoaW5mby5pZCwgImJ0ODc4Iiwgc2l6ZW9mKGluZm8uaWQpKTsKICAgICAgICAgICAgICAgICBzdHJsY3B5KGluZm8ubmFtZSwiQnJvb2t0cmVlIEJ0ODc4IGF1ZGlvIixzaXplb2YoaW5mby5uYW1lKSk7CiAgICAgICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL0tjb25maWcgYi9zb3VuZC9vc3MvZG1hc291bmQvS2NvbmZpZwppbmRleCAxOGUxNDlmLi43MWIzMTM0IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvS2NvbmZpZworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvS2NvbmZpZwpAQCAtMTIsMjAgKzEyLDYgQEAKIAkgIHdhbnQpLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uCiAKLWNvbmZpZyBETUFTT1VORF9QTUFDCi0JdHJpc3RhdGUgIlBvd2VyTWFjIERNQSBzb3VuZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUFBDMzIgJiYgUFBDX1BNQUMgJiYgU09VTkQgJiYgSTJDICYmIE9CU09MRVRFX09TUwotIAlzZWxlY3QgRE1BU09VTkQKLQloZWxwCi0JICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGludGVybmFsIGF1ZGlvIG9mIHlvdXIgUG93ZXJNYWMgaW4gTGludXgsCi0JICBhbnN3ZXIgWSB0byB0aGlzIHF1ZXN0aW9uLiBUaGlzIHdpbGwgcHJvdmlkZSBhIFN1bi1saWtlIC9kZXYvYXVkaW8sCi0JICBjb21wYXRpYmxlIHdpdGggdGhlIExpbnV4L2kzODYgc291bmQgc3lzdGVtLiBPdGhlcndpc2UsIHNheSBOLgotCi0JICBUaGlzIGRyaXZlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaCBjYW4gYmUKLQkgIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdQotCSAgd2FudCkuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4KLQogY29uZmlnIERNQVNPVU5EX1BBVUxBCiAJdHJpc3RhdGUgIkFtaWdhIERNQSBzb3VuZCBzdXBwb3J0IgogCWRlcGVuZHMgb24gKEFNSUdBIHx8IEFQVVMpICYmIFNPVU5ECmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXdhY3MuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCmluZGV4IDczMGZhMWQuLjhmNjM4ODAgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCisrKyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCkBAIC0zNjIsNyArMzYyLDcgQEAKIAkJCQlvZl9nZXRfcHJvcGVydHkobnAsImF1ZGlvLWdwaW8iLE5VTEwpOwogCQkJaWYgKHByb3BlcnR5ICE9IDAgJiYgc3RyY21wKHByb3BlcnR5LG5hbWUpID09IDApCiAJCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoY29tcGF0aWJsZSAmJiBkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgY29tcGF0aWJsZSkpCisJCX0gZWxzZSBpZiAoY29tcGF0aWJsZSAmJiBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgY29tcGF0aWJsZSkpCiAJCQlicmVhazsKIAkJbnAgPSBvZl9nZXRfbmV4dF9jaGlsZChncGlvcCwgbnApOwogCX0KQEAgLTI2MjAsMTcgKzI2MjAsMTcgQEAKIAogCWlmIChpbmZvKSB7CiAJCS8qIG11c3QgZG8gYXdhY3MgZmlyc3QgdG8gYWxsb3cgc2NyZWFtZXIgdG8gb3ZlcmlkZSBpdCAqLwotCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUoaW5mbywgImF3YWNzIikpCisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShpbmZvLCAiYXdhY3MiKSkKIAkJCWNvZGVjID0gQVdBQ1NfQVdBQ1MgOwotCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUoaW5mbywgInNjcmVhbWVyIikpCisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShpbmZvLCAic2NyZWFtZXIiKSkKIAkJCWNvZGVjID0gQVdBQ1NfU0NSRUFNRVI7Ci0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShpbmZvLCAiYnVyZ3VuZHkiKSkKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGluZm8sICJidXJndW5keSIpKQogCQkJY29kZWMgPSBBV0FDU19CVVJHVU5EWSA7Ci0JCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShpbmZvLCAiZGFjYSIpKQorCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaW5mbywgImRhY2EiKSkKIAkJCWNvZGVjID0gQVdBQ1NfREFDQTsKLQkJaWYgKGRldmljZV9pc19jb21wYXRpYmxlKGluZm8sICJ0dW1ibGVyIikpCisJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShpbmZvLCAidHVtYmxlciIpKQogCQkJY29kZWMgPSBBV0FDU19UVU1CTEVSOwotCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUoaW5mbywgInNuYXBwZXIiKSkKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGluZm8sICJzbmFwcGVyIikpCiAJCQljb2RlYyA9IEFXQUNTX1NOQVBQRVI7CiAJfQogCXJldHVybiBjb2RlYyA7CkBAIC0yNzcyLDcgKzI3NzIsNyBAQAogCiAJZm9yIChtaW8gPSBpby0+cGFyZW50OyBtaW8gOyBtaW8gPSBtaW8tPnBhcmVudCkgewogCQlpZiAoc3RyY21wKG1pby0+bmFtZSwgIm1hYy1pbyIpID09IDApIHsKLQkJCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShtaW8sICJLZXlsYXJnbyIpKQorCQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG1pbywgIktleWxhcmdvIikpCiAJCQkJa2wgPSAxOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9lczEzNzEuYyBiL3NvdW5kL29zcy9lczEzNzEuYwppbmRleCA5NzRkZDczLi41OTNhM2FhIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZXMxMzcxLmMKKysrIGIvc291bmQvb3NzL2VzMTM3MS5jCkBAIC0xMDAsNyArMTAwLDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICBUamVlcmQgTXVsZGVyIDx0amVlcmQubXVsZGVyQGZ1aml0c3Utc2llbWVucy5jb20+CiAgKiAgICAwNS4wMS4yMDAxICAgMC4yOSAgSG9wZWZ1bGx5IHVwZGF0ZXMgd2lsbCBub3QgYmUgcmVxdWlyZWQgYW55bW9yZSB3aGVuIENyZWF0aXZlIGJ1bXBzCiAgKiAgICAgICAgICAgICAgICAgICAgICAgdGhlIENUNTg4MCByZXZpc2lvbi4KLSAqICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0ZWQgYnkgU3RlcGhhbiBN/GxsZXIgPHNtdWVsbGVyQGNocm9ub3guZGU+CisgKiAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkIGJ5IFN0ZXBoYW4gTcO8bGxlciA8c211ZWxsZXJAY2hyb25veC5kZT4KICAqICAgIDMxLjAxLjIwMDEgICAwLjMwICBSZWdpc3Rlci9VbnJlZ2lzdGVyIGdhbWVwb3J0CiAgKiAgICAgICAgICAgICAgICAgICAgICAgRml4IFNFVFRSSUdHRVIgbm9uIE9TUyBBUEkgY29uZm9ybWl0eQogICogICAgMTQuMDcuMjAwMSAgIDAuMzEgIEFkZCBsaXN0IG9mIGxhcHRvcHMgbmVlZGluZyBhbXBsaWZpZXIgY29udHJvbApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3BhczJfcGNtLmMgYi9zb3VuZC9vc3MvcGFzMl9wY20uYwppbmRleCA0YWY2YWFmLi4zNmMzZWE2IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvcGFzMl9wY20uYworKysgYi9zb3VuZC9vc3MvcGFzMl9wY20uYwpAQCAtODUsNyArODUsNyBAQAogCSAqIGNvbWUgZnJvbSB0aGUgU0RLIGZvdW5kIG9uIGZ0cC51d3AuZWR1Oi9wdWIvbXNkb3MvcHJvYXVkaW8vLgogCSAqCiAJICogSSBjbGVhcmVkIGJpdCA1IG9mIHRoZXNlIHZhbHVlcywgc2luY2UgdGhhdCBiaXQgY29udHJvbHMgdGhlIG1hc3RlcgotCSAqIG11dGUgZmxhZy4gKE9sYXYgV/ZsZmVsc2NobmVpZGVyKQorCSAqIG11dGUgZmxhZy4gKE9sYXYgV8O2bGZlbHNjaG5laWRlcikKIAkgKgogCSAqLwogI2lmICFkZWZpbmVkIE5PX0FVVE9fRklMVEVSX1NFVApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYyBiL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKaW5kZXggMDE2YjkxOC4uYTgwNTdmMiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYworKysgYi9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCkBAIC03NSw3ICs3NSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy90cmlkZW50LmMgYi9zb3VuZC9vc3MvdHJpZGVudC5jCmluZGV4IDcyYThhMGUuLjNiYzFmNmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy90cmlkZW50LmMKKysrIGIvc291bmQvb3NzL3RyaWRlbnQuYwpAQCAtMTgsNyArMTgsNyBAQAogICoJT2xsaWUgTGhvIDxvbGxpZUBzaXMuY29tLnR3PiBTaVMgNzAxOCBBdWRpbyBDb3JlIFN1cHBvcnQKICAqCUNoaW5nLUxpbmcgTGVlIDxjbGluZy1saUBhbGkuY29tLnR3PiBBTGkgNTQ1MSBBdWRpbyBDb3JlIFN1cHBvcnQgCiAgKglNYXR0IFd1IDxtYXR0d3VAYWNlcnNvZnRlY2guY29tLmNuPiBBTGkgNTQ1MSBBdWRpbyBDb3JlIFN1cHBvcnQKLSAqCVBldGVyIFfkY2h0bGVyIDxwd2FlY2h0bGVyQGxvZXdlLWtvbXAuZGU+IEN5YmVyUHJvNTA1MCBzdXBwb3J0CisgKglQZXRlciBXw6RjaHRsZXIgPHB3YWVjaHRsZXJAbG9ld2Uta29tcC5kZT4gQ3liZXJQcm81MDUwIHN1cHBvcnQKICAqICAgICAgTXVsaSBCZW4tWWVodWRhIDxtdWxpeEBtdWxpeC5vcmc+CiAgKgogICoKQEAgLTg5LDcgKzg5LDcgQEAKICAqCXVzZSBzZXRfY3VycmVudF9zdGF0ZSwgcHJvcGVybHkgcmVsZWFzZSByZXNvdXJjZXMgb24gZmFpbHVyZSBpbgogICoJdHJpZGVudF9wcm9iZSwgZ2V0IHJpZCBvZiBjaGVja19yZWdpb24KICAqICB2MC4xNC45YwotICoJQXVndXN0IDEwIDIwMDEgUGV0ZXIgV+RjaHRsZXIgPHB3YWVjaHRsZXJAbG9ld2Uta29tcC5kZT4KKyAqCUF1Z3VzdCAxMCAyMDAxIFBldGVyIFfDpGNodGxlciA8cHdhZWNodGxlckBsb2V3ZS1rb21wLmRlPgogICoJYWRkZWQgc3VwcG9ydCBmb3IgVHZpYSAoZm9ybWVybHkgSW50ZWdyYXBoaWNzL0lHU1QpIEN5YmVyUHJvNTA1MAogICoJdGhpcyBjaGlwIGlzIG9mdGVuIGZvdW5kIGluIHNldHRvcCBib3hlcyAoY29tYmluZWQgdmlkZW8rYXVkaW8pCiAgKiAgdjAuMTQuOWIKQEAgLTIwNyw3ICsyMDcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2FjOTdfY29kZWMuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvdmlhODJjeHh4X2F1ZGlvLmMgYi9zb3VuZC9vc3MvdmlhODJjeHh4X2F1ZGlvLmMKaW5kZXggN2FiM2E3My4uNWQzYzAzNyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3ZpYTgyY3h4eF9hdWRpby5jCisrKyBiL3NvdW5kL29zcy92aWE4MmN4eHhfYXVkaW8uYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KICNpbmNsdWRlIDxsaW51eC9hYzk3X2NvZGVjLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IDFiY2ZiM2EuLjYxZTM1ZWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC01NzYsNyArNTc2LDcgQEAKIGNvbmZpZyBTTkRfS09SRzEyMTIKIAl0cmlzdGF0ZSAiS29yZyAxMjEyIElPIgogCWRlcGVuZHMgb24gU05ECi0Jc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBGV19MT0FERVIgaWYgIVNORF9LT1JHMTIxMl9GSVJNV0FSRV9JTl9LRVJORUwKIAlzZWxlY3QgU05EX1BDTQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBLb3JnIDEyMTJJTyBzb3VuZGNhcmRzLgpAQCAtNTg0LDEwICs1ODQsMTkgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1rb3JnMTIxMi4KIAorY29uZmlnIFNORF9LT1JHMTIxMl9GSVJNV0FSRV9JTl9LRVJORUwKKwlib29sICJJbi1rZXJuZWwgZmlybXdhcmUgZm9yIEtvcmcxMjEyIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNORF9LT1JHMTIxMgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSB0aGUgc3RhdGljIGZpcm13YXJlIGJ1aWx0IGluIHRoZSBrZXJuZWwKKwkgIGZvciB0aGUgS29yZzEyMTIgZHJpdmVyLiAgSWYgeW91IGNob29zZSBOIGhlcmUsIHlvdSBuZWVkIHRvCisJICBpbnN0YWxsIHRoZSBmaXJtd2FyZSBmaWxlcyBmcm9tIHRoZSBhbHNhLWZpcm13YXJlIHBhY2thZ2UuCisKIGNvbmZpZyBTTkRfTUFFU1RSTzMKIAl0cmlzdGF0ZSAiRVNTIEFsbGVncm8vTWFlc3RybzMiCiAJZGVwZW5kcyBvbiBTTkQKLQlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IEZXX0xPQURFUiBpZiAhU05EX01BRVNUUk8zX0ZJUk1XQVJFX0lOX0tFUk5FTAogCXNlbGVjdCBTTkRfQUM5N19DT0RFQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIEVTUyBNYWVzdHJvIDMKQEAgLTU5Niw2ICs2MDUsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1tYWVzdHJvMy4KIAorY29uZmlnIFNORF9NQUVTVFJPM19GSVJNV0FSRV9JTl9LRVJORUwKKwlib29sICJJbi1rZXJuZWwgZmlybXdhcmUgZm9yIE1hZXN0cm8zIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNORF9NQUVTVFJPMworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSB0aGUgc3RhdGljIGZpcm13YXJlIGJ1aWx0IGluIHRoZSBrZXJuZWwKKwkgIGZvciB0aGUgTWFlc3RybzMgZHJpdmVyLiAgSWYgeW91IGNob29zZSBOIGhlcmUsIHlvdSBuZWVkIHRvCisJICBpbnN0YWxsIHRoZSBmaXJtd2FyZSBmaWxlcyBmcm9tIHRoZSBhbHNhLWZpcm13YXJlIHBhY2thZ2UuCisKIGNvbmZpZyBTTkRfTUlYQVJUCiAJdHJpc3RhdGUgIkRpZ2lncmFtIG1pWGFydCIKIAlkZXBlbmRzIG9uIFNORApAQCAtNzM3LDcgKzc1NSw3IEBACiBjb25maWcgU05EX1lNRlBDSQogCXRyaXN0YXRlICJZYW1haGEgWU1GNzI0Lzc0MC83NDQvNzU0IgogCWRlcGVuZHMgb24gU05ECi0Jc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBGV19MT0FERVIgaWYgIVNORF9ZTUZQQ0lfRklSTVdBUkVfSU5fS0VSTkVMCiAJc2VsZWN0IFNORF9PUEwzX0xJQgogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX0FDOTdfQ09ERUMKQEAgLTc0OCw2ICs3NjYsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC15bWZwY2kuCiAKK2NvbmZpZyBTTkRfWU1GUENJX0ZJUk1XQVJFX0lOX0tFUk5FTAorCWJvb2wgIkluLWtlcm5lbCBmaXJtd2FyZSBmb3IgWU1GUENJIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNORF9ZTUZQQ0kKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgdGhlIHN0YXRpYyBmaXJtd2FyZSBidWlsdCBpbiB0aGUga2VybmVsCisJICBmb3IgdGhlIFlNRlBDSSBkcml2ZXIuICBJZiB5b3UgY2hvb3NlIE4gaGVyZSwgeW91IG5lZWQgdG8KKwkgIGluc3RhbGwgdGhlIGZpcm13YXJlIGZpbGVzIGZyb20gdGhlIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KKwogY29uZmlnIFNORF9BQzk3X1BPV0VSX1NBVkUKIAlib29sICJBQzk3IFBvd2VyLVNhdmluZyBNb2RlIgogCWRlcGVuZHMgb24gU05EX0FDOTdfQ09ERUMgJiYgRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9NYWtlZmlsZSBiL3NvdW5kL3BjaS9hYzk3L01ha2VmaWxlCmluZGV4IDNjMzIyMjEuLmY1ZDQ3MTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L01ha2VmaWxlCisrKyBiL3NvdW5kL3BjaS9hYzk3L01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDEgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBzdXNlLmN6PgogIwogCi1zbmQtYWM5Ny1jb2RlYy1vYmpzIDo9IGFjOTdfY29kZWMubyBhYzk3X3BjbS5vIGFjOTdfcGF0Y2gubworc25kLWFjOTctY29kZWMtb2JqcyA6PSBhYzk3X2NvZGVjLm8gYWM5N19wY20ubwogCiBpZm5lcSAoJChDT05GSUdfUFJPQ19GUyksKQogc25kLWFjOTctY29kZWMtb2JqcyArPSBhYzk3X3Byb2MubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCmluZGV4IGE5ZWVjMmEuLmJiZWQ2NDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSAiYWM5N19sb2NhbC5oIgogI2luY2x1ZGUgImFjOTdfaWQuaCIKLSNpbmNsdWRlICJhYzk3X3BhdGNoLmgiCisKKyNpbmNsdWRlICJhYzk3X3BhdGNoLmMiCiAKIE1PRFVMRV9BVVRIT1IoIkphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVW5pdmVyc2FsIGludGVyZmFjZSBmb3IgQXVkaW8gQ29kZWMgJzk3Iik7CkBAIC00MzIsNyArNDMyLDggQEAKICAqIENvbnRyb2xzCiAgKi8KIAotaW50IHNuZF9hYzk3X2luZm9fZW51bV9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCitzdGF0aWMgaW50IHNuZF9hYzk3X2luZm9fZW51bV9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0cnVjdCBhYzk3X2VudW0gKmUgPSAoc3RydWN0IGFjOTdfZW51bSAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCQpAQCAtNDQ2LDcgKzQ0Nyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzbmRfYWM5N19nZXRfZW51bV9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorc3RhdGljIGludCBzbmRfYWM5N19nZXRfZW51bV9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBzbmRfYWM5NyAqYWM5NyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgYWM5N19lbnVtICplID0gKHN0cnVjdCBhYzk3X2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKQEAgLTQ2Miw3ICs0NjQsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc25kX2FjOTdfcHV0X2VudW1fZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3N0YXRpYyBpbnQgc25kX2FjOTdfcHV0X2VudW1fZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IGFjOTdfZW51bSAqZSA9IChzdHJ1Y3QgYWM5N19lbnVtICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CkBAIC01MDgsNyArNTExLDggQEAKIH0KIAogLyogdm9sdW1lIGFuZCBzd2l0Y2ggY29udHJvbHMgKi8KLWludCBzbmRfYWM5N19pbmZvX3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQorc3RhdGljIGludCBzbmRfYWM5N19pbmZvX3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKIAlpbnQgc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweDBmOwpAQCAtNTIxLDcgKzUyNSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzbmRfYWM5N19nZXRfdm9sc3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorc3RhdGljIGludCBzbmRfYWM5N19nZXRfdm9sc3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IHJlZyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKQEAgLTU0NCw3ICs1NDksOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc25kX2FjOTdfcHV0X3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3N0YXRpYyBpbnQgc25kX2FjOTdfcHV0X3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9hYzk3ICphYzk3ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCByZWcgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CkBAIC02NDYsNyArNjUyLDcgQEAKIEFDOTdfU0lOR0xFKCJBREMvREFDIExvb3BiYWNrIiwgQUM5N19HRU5FUkFMX1BVUlBPU0UsIDcsIDEsIDApCiB9OwogCi1jb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfYWM5N19jb250cm9sc18zZFsyXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfYWM5N19jb250cm9sc18zZFsyXSA9IHsKIEFDOTdfU0lOR0xFKCIzRCBDb250cm9sIC0gQ2VudGVyIiwgQUM5N18zRF9DT05UUk9MLCA4LCAxNSwgMCksCiBBQzk3X1NJTkdMRSgiM0QgQ29udHJvbCAtIERlcHRoIiwgQUM5N18zRF9DT05UUk9MLCAwLCAxNSwgMCkKIH07CkBAIC04MTcsNyArODIzLDcgQEAKIAlyZXR1cm4gY2hhbmdlOwogfQogCi1jb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfYWM5N19jb250cm9sc19zcGRpZls1XSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfYWM5N19jb250cm9sc19zcGRpZls1XSA9IHsKIAl7CiAJCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0xMDgzLDcgKzEwODksNyBAQAogCQl1bnNpZ25lZCBzaG9ydCB2YWw7CiAJCXNuZF9hYzk3X3dyaXRlKGFjOTcsIHJlZywgMHg4MDgwIHwgY2JpdFtpXSB8IChjYml0W2ldIDw8IDgpKTsKIAkJLyogRG8gdGhlIHJlYWQgdHdpY2UgZHVlIHRvIGJ1ZmZlcnMgb24gc29tZSBhYzk3IGNvZGVjcy4KLQkJICogZS5nLiBUaGUgU1RBQzk3MDQgcmV0dXJucyBleGFjdGx5IHdoYXQgeW91IHdyb3RlIHRoZSB0aGUgcmVnaXN0ZXIKKwkJICogZS5nLiBUaGUgU1RBQzk3MDQgcmV0dXJucyBleGFjdGx5IHdoYXQgeW91IHdyb3RlIHRvIHRoZSByZWdpc3RlcgogCQkgKiBpZiB5b3UgcmVhZCBpdCBpbW1lZGlhdGVseS4gVGhpcyBjYXVzZXMgdGhlIGRldGVjdCByb3V0aW5lIHRvIGZhaWwuCiAJCSAqLwogCQl2YWwgPSBzbmRfYWM5N19yZWFkKGFjOTcsIHJlZyk7CkBAIC0xMDk3LDcgKzExMDMsNyBAQAogCX0KIH0KIAotaW50IHNuZF9hYzk3X3RyeV9iaXQoc3RydWN0IHNuZF9hYzk3ICogYWM5NywgaW50IHJlZywgaW50IGJpdCkKK3N0YXRpYyBpbnQgc25kX2FjOTdfdHJ5X2JpdChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3LCBpbnQgcmVnLCBpbnQgYml0KQogewogCXVuc2lnbmVkIHNob3J0IG1hc2ssIHZhbCwgb3JpZywgcmVzOwogCkBAIC0xMTM3LDcgKzExNDMsOCBAQAogCXJldHVybiB4OwogfQogCi1zdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfYWM5N19jbmV3KGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpfdGVtcGxhdGUsIHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbCAqc25kX2FjOTdfY25ldyhjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqX3RlbXBsYXRlLAorCQkJCQkgIHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdGVtcGxhdGU7CiAJbWVtY3B5KCZ0ZW1wbGF0ZSwgX3RlbXBsYXRlLCBzaXplb2YodGVtcGxhdGUpKTsKQEAgLTI1NDQsNyArMjU1MSw4IEBACiB9CQogCiAvKiByZW1vdmUgdGhlIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgb3B0aW9uYWwgc3VmZml4ICovCi1pbnQgc25kX2FjOTdfcmVtb3ZlX2N0bChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3N0YXRpYyBpbnQgc25kX2FjOTdfcmVtb3ZlX2N0bChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgY29uc3QgY2hhciAqc3VmZml4KQogewogCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQ7CiAJbWVtc2V0KCZpZCwgMCwgc2l6ZW9mKGlkKSk7CkBAIC0yNTYzLDcgKzI1NzEsOCBAQAogfQogCiAvKiByZW5hbWUgdGhlIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgb3B0aW9uYWwgc3VmZml4ICovCi1pbnQgc25kX2FjOTdfcmVuYW1lX2N0bChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzdWZmaXgpCitzdGF0aWMgaW50IHNuZF9hYzk3X3JlbmFtZV9jdGwoc3RydWN0IHNuZF9hYzk3ICphYzk3LCBjb25zdCBjaGFyICpzcmMsCisJCQkgICAgICAgY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzdWZmaXgpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCA9IGN0bF9maW5kKGFjOTcsIHNyYywgc3VmZml4KTsKIAlpZiAoa2N0bCkgewpAQCAtMjU3NCwxNCArMjU4MywxNiBAQAogfQogCiAvKiByZW5hbWUgYm90aCBWb2x1bWUgYW5kIFN3aXRjaCBjb250cm9scyAtIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgKi8KLXZvaWQgc25kX2FjOTdfcmVuYW1lX3ZvbF9jdGwoc3RydWN0IHNuZF9hYzk3ICphYzk3LCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCkKK3N0YXRpYyB2b2lkIHNuZF9hYzk3X3JlbmFtZV92b2xfY3RsKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgY29uc3QgY2hhciAqc3JjLAorCQkJCSAgICBjb25zdCBjaGFyICpkc3QpCiB7CiAJc25kX2FjOTdfcmVuYW1lX2N0bChhYzk3LCBzcmMsIGRzdCwgIlN3aXRjaCIpOwogCXNuZF9hYzk3X3JlbmFtZV9jdGwoYWM5Nywgc3JjLCBkc3QsICJWb2x1bWUiKTsKIH0KIAogLyogc3dhcCBjb250cm9scyAqLwotaW50IHNuZF9hYzk3X3N3YXBfY3RsKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBjb25zdCBjaGFyICpzdWZmaXgpCitzdGF0aWMgaW50IHNuZF9hYzk3X3N3YXBfY3RsKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgY29uc3QgY2hhciAqczEsCisJCQkgICAgIGNvbnN0IGNoYXIgKnMyLCBjb25zdCBjaGFyICpzdWZmaXgpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDEsICprY3RsMjsKIAlrY3RsMSA9IGN0bF9maW5kKGFjOTcsIHMxLCBzdWZmaXgpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19sb2NhbC5oIGIvc291bmQvcGNpL2FjOTcvYWM5N19sb2NhbC5oCmluZGV4IGE2MjQ0YzcuLjc4NzQ1YzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfbG9jYWwuaAorKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2xvY2FsLmgKQEAgLTIyLDU5ICsyMiw4IEBACiAgKgogICovCiAKLSNkZWZpbmUgQUM5N19TSU5HTEVfVkFMVUUocmVnLHNoaWZ0LG1hc2ssaW52ZXJ0KSAoKHJlZykgfCAoKHNoaWZ0KSA8PCA4KSB8ICgoc2hpZnQpIDw8IDEyKSB8ICgobWFzaykgPDwgMTYpIHwgKChpbnZlcnQpIDw8IDI0KSkKLSNkZWZpbmUgQUM5N19QQUdFX1NJTkdMRV9WQUxVRShyZWcsc2hpZnQsbWFzayxpbnZlcnQscGFnZSkgKEFDOTdfU0lOR0xFX1ZBTFVFKHJlZyxzaGlmdCxtYXNrLGludmVydCkgfCAoMTw8MjUpIHwgKChwYWdlKSA8PCAyNikpCi0jZGVmaW5lIEFDOTdfU0lOR0xFKHhuYW1lLCByZWcsIHNoaWZ0LCBtYXNrLCBpbnZlcnQpIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmZvID0gc25kX2FjOTdfaW5mb192b2xzdywgXAotICAuZ2V0ID0gc25kX2FjOTdfZ2V0X3ZvbHN3LCAucHV0ID0gc25kX2FjOTdfcHV0X3ZvbHN3LCBcCi0gIC5wcml2YXRlX3ZhbHVlID0gIEFDOTdfU0lOR0xFX1ZBTFVFKHJlZywgc2hpZnQsIG1hc2ssIGludmVydCkgfQotI2RlZmluZSBBQzk3X1BBR0VfU0lOR0xFKHhuYW1lLCByZWcsIHNoaWZ0LCBtYXNrLCBpbnZlcnQsIHBhZ2UpCQlcCi17IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5mbyA9IHNuZF9hYzk3X2luZm9fdm9sc3csIFwKLSAgLmdldCA9IHNuZF9hYzk3X2dldF92b2xzdywgLnB1dCA9IHNuZF9hYzk3X3B1dF92b2xzdywgXAotICAucHJpdmF0ZV92YWx1ZSA9ICBBQzk3X1BBR0VfU0lOR0xFX1ZBTFVFKHJlZywgc2hpZnQsIG1hc2ssIGludmVydCwgcGFnZSkgfQotI2RlZmluZSBBQzk3X0RPVUJMRSh4bmFtZSwgcmVnLCBzaGlmdF9sZWZ0LCBzaGlmdF9yaWdodCwgbWFzaywgaW52ZXJ0KSBcCi17IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIC5pbmZvID0gc25kX2FjOTdfaW5mb192b2xzdywgXAotICAuZ2V0ID0gc25kX2FjOTdfZ2V0X3ZvbHN3LCAucHV0ID0gc25kX2FjOTdfcHV0X3ZvbHN3LCBcCi0gIC5wcml2YXRlX3ZhbHVlID0gKHJlZykgfCAoKHNoaWZ0X2xlZnQpIDw8IDgpIHwgKChzaGlmdF9yaWdodCkgPDwgMTIpIHwgKChtYXNrKSA8PCAxNikgfCAoKGludmVydCkgPDwgMjQpIH0KLQotLyogZW51bSBjb250cm9sICovCi1zdHJ1Y3QgYWM5N19lbnVtIHsKLQl1bnNpZ25lZCBjaGFyIHJlZzsKLQl1bnNpZ25lZCBjaGFyIHNoaWZ0X2w7Ci0JdW5zaWduZWQgY2hhciBzaGlmdF9yOwotCXVuc2lnbmVkIHNob3J0IG1hc2s7Ci0JY29uc3QgY2hhciAqKnRleHRzOwotfTsKLQotI2RlZmluZSBBQzk3X0VOVU1fRE9VQkxFKHhyZWcsIHhzaGlmdF9sLCB4c2hpZnRfciwgeG1hc2ssIHh0ZXh0cykgXAoteyAucmVnID0geHJlZywgLnNoaWZ0X2wgPSB4c2hpZnRfbCwgLnNoaWZ0X3IgPSB4c2hpZnRfciwgXAotICAubWFzayA9IHhtYXNrLCAudGV4dHMgPSB4dGV4dHMgfQotI2RlZmluZSBBQzk3X0VOVU1fU0lOR0xFKHhyZWcsIHhzaGlmdCwgeG1hc2ssIHh0ZXh0cykgXAotCUFDOTdfRU5VTV9ET1VCTEUoeHJlZywgeHNoaWZ0LCB4c2hpZnQsIHhtYXNrLCB4dGV4dHMpCi0jZGVmaW5lIEFDOTdfRU5VTSh4bmFtZSwgeGVudW0pIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmZvID0gc25kX2FjOTdfaW5mb19lbnVtX2RvdWJsZSwgXAotICAuZ2V0ID0gc25kX2FjOTdfZ2V0X2VudW1fZG91YmxlLCAucHV0ID0gc25kX2FjOTdfcHV0X2VudW1fZG91YmxlLCBcCi0gIC5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpJnhlbnVtIH0KLQotLyogYWM5N19jb2RlYy5jICovCi1leHRlcm4gY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2FjOTdfY29udHJvbHNfM2RbXTsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfYWM5N19jb250cm9sc19zcGRpZltdOwotc3RydWN0IHNuZF9rY29udHJvbCAqc25kX2FjOTdfY25ldyhjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqX3RlbXBsYXRlLCBzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKLXZvaWQgc25kX2FjOTdfZ2V0X25hbWUoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBpbnQgaWQsIGNoYXIgKm5hbWUsIGludCBtb2RlbSk7Ci1pbnQgc25kX2FjOTdfaW5mb192b2xzdyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbyk7Ci1pbnQgc25kX2FjOTdfZ2V0X3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCk7Ci1pbnQgc25kX2FjOTdfcHV0X3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCk7Ci1pbnQgc25kX2FjOTdfdHJ5X2JpdChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3LCBpbnQgcmVnLCBpbnQgYml0KTsKLWludCBzbmRfYWM5N19yZW1vdmVfY3RsKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3VmZml4KTsKLWludCBzbmRfYWM5N19yZW5hbWVfY3RsKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7Ci1pbnQgc25kX2FjOTdfc3dhcF9jdGwoc3RydWN0IHNuZF9hYzk3ICphYzk3LCBjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7Ci12b2lkIHNuZF9hYzk3X3JlbmFtZV92b2xfY3RsKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QpOwotdm9pZCBzbmRfYWM5N19yZXN0b3JlX3N0YXR1cyhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpOwotdm9pZCBzbmRfYWM5N19yZXN0b3JlX2llYzk1OChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpOwotaW50IHNuZF9hYzk3X2luZm9fZW51bV9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pOwotaW50IHNuZF9hYzk3X2dldF9lbnVtX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOwotaW50IHNuZF9hYzk3X3B1dF9lbnVtX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOwotCit2b2lkIHNuZF9hYzk3X2dldF9uYW1lKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgaW50IGlkLCBjaGFyICpuYW1lLAorCQkgICAgICAgaW50IG1vZGVtKTsKIGludCBzbmRfYWM5N191cGRhdGVfYml0c19ub2xvY2soc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcsCiAJCQkJdW5zaWduZWQgc2hvcnQgbWFzaywgdW5zaWduZWQgc2hvcnQgdmFsdWUpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKaW5kZXggYjE4OGE0ZC4uNTgxZWJiYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYwpAQCAtMjMsMjAgKzIzLDggQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxzb3VuZC90bHYuaD4KLSNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+Ci0jaW5jbHVkZSAiYWM5N19wYXRjaC5oIgotI2luY2x1ZGUgImFjOTdfaWQuaCIKICNpbmNsdWRlICJhYzk3X2xvY2FsLmgiCisjaW5jbHVkZSAiYWM5N19wYXRjaC5oIgogCiAvKgogICogIENoaXAgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KQEAgLTM5MCw3ICszNzgsNyBAQAogCS5idWlsZF9wb3N0X3NwZGlmID0gcGF0Y2hfeWFtYWhhX3ltZjc1M19wb3N0X3NwZGlmCiB9OwogCi1pbnQgcGF0Y2hfeWFtYWhhX3ltZjc1MyhzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF95YW1haGFfeW1mNzUzKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJLyogUGF0Y2ggZm9yIFlhbWFoYSBZTUY3NTMsIENvcHlyaWdodCAoYykgYnkgRGF2aWQgU2h1c3QsIGRzaHVzdEBzaHVzdHJpbmcuY29tLgogCSAgIFRoaXMgY2hpcCBoYXMgbm9uc3RhbmRhcmQgYW5kIGV4dGVuZGVkIGJlaGF2aW91ciB3aXRoIHJlZ2FyZCB0byBpdHMgUy9QRElGIG91dHB1dC4KQEAgLTQzNiw3ICs0MjQsNyBAQAogCS5idWlsZF9zcGVjaWZpYyA9IHBhdGNoX3dvbGZzb25fd205NzAzX3NwZWNpZmljLAogfTsKIAotaW50IHBhdGNoX3dvbGZzb24wMyhzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF93b2xmc29uMDMoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAlhYzk3LT5idWlsZF9vcHMgPSAmcGF0Y2hfd29sZnNvbl93bTk3MDNfb3BzOwogCXJldHVybiAwOwpAQCAtNDY3LDcgKzQ1NSw3IEBACiAJLmJ1aWxkX3NwZWNpZmljID0gcGF0Y2hfd29sZnNvbl93bTk3MDRfc3BlY2lmaWMsCiB9OwogCi1pbnQgcGF0Y2hfd29sZnNvbjA0KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCitzdGF0aWMgaW50IHBhdGNoX3dvbGZzb24wNChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQogewogCS8qIFdNOTcwNE0vOTcwNFEgKi8KIAlhYzk3LT5idWlsZF9vcHMgPSAmcGF0Y2hfd29sZnNvbl93bTk3MDRfb3BzOwpAQCAtNDg5LDcgKzQ3Nyw3IEBACiAJLmJ1aWxkX3NwZWNpZmljID0gcGF0Y2hfd29sZnNvbl93bTk3MDVfc3BlY2lmaWMsCiB9OwogCi1pbnQgcGF0Y2hfd29sZnNvbjA1KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCitzdGF0aWMgaW50IHBhdGNoX3dvbGZzb24wNShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQogewogCS8qIFdNOTcwNSwgV005NzEwICovCiAJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX3dvbGZzb25fd205NzA1X29wczsKQEAgLTYyNSw3ICs2MTMsNyBAQAogCS5idWlsZF9zcGVjaWZpYyA9IHBhdGNoX3dvbGZzb25fd205NzExX3NwZWNpZmljLAogfTsKIAotaW50IHBhdGNoX3dvbGZzb24xMShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF93b2xmc29uMTEoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAkvKiBXTTk3MTEsIFdNOTcxMiAqLwogCWFjOTctPmJ1aWxkX29wcyA9ICZwYXRjaF93b2xmc29uX3dtOTcxMV9vcHM7CkBAIC04MjQsNyArODEyLDcgQEAKICNlbmRpZgogfTsKIAotaW50IHBhdGNoX3dvbGZzb24xMyhzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF93b2xmc29uMTMoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAkvKiBXTTk3MTMsIFdNOTcxNCAqLwogCWFjOTctPmJ1aWxkX29wcyA9ICZwYXRjaF93b2xmc29uX3dtOTcxM19vcHM7CkBAIC04NDQsNyArODMyLDcgQEAKIC8qCiAgKiBUcml0ZWNoIGNvZGVjCiAgKi8KLWludCBwYXRjaF90cml0ZWNoX3RyMjgwMjgoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKK3N0YXRpYyBpbnQgcGF0Y2hfdHJpdGVjaF90cjI4MDI4KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgMHgyNiwgMHgwMzAwKTsKIAlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCAweDI2LCAweDAwMDApOwpAQCAtOTIyLDcgKzkxMCw3IEBACiAJLmJ1aWxkX3NwZWNpZmljCT0gcGF0Y2hfc2lnbWF0ZWxfc3RhYzk3eHhfc3BlY2lmaWMKIH07CiAKLWludCBwYXRjaF9zaWdtYXRlbF9zdGFjOTcwMChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF9zaWdtYXRlbF9zdGFjOTcwMChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQogewogCWFjOTctPmJ1aWxkX29wcyA9ICZwYXRjaF9zaWdtYXRlbF9zdGFjOTcwMF9vcHM7CiAJcmV0dXJuIDA7CkBAIC05NjksNyArOTU3LDcgQEAKIAkuYnVpbGRfc3BlY2lmaWMJPSBwYXRjaF9zaWdtYXRlbF9zdGFjOTcwOF9zcGVjaWZpYwogfTsKIAotaW50IHBhdGNoX3NpZ21hdGVsX3N0YWM5NzA4KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCitzdGF0aWMgaW50IHBhdGNoX3NpZ21hdGVsX3N0YWM5NzA4KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJdW5zaWduZWQgaW50IGNvZGVjNzIsIGNvZGVjNmM7CiAKQEAgLTk5NSw3ICs5ODMsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcGF0Y2hfc2lnbWF0ZWxfc3RhYzk3MjEoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKK3N0YXRpYyBpbnQgcGF0Y2hfc2lnbWF0ZWxfc3RhYzk3MjEoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAlhYzk3LT5idWlsZF9vcHMgPSAmcGF0Y2hfc2lnbWF0ZWxfc3RhYzk3MDBfb3BzOwogCWlmIChzbmRfYWM5N19yZWFkKGFjOTcsIEFDOTdfU0lHTUFURUxfQU5BTE9HKSA9PSAwKSB7CkBAIC0xMDA5LDcgKzk5Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBwYXRjaF9zaWdtYXRlbF9zdGFjOTc0NChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF9zaWdtYXRlbF9zdGFjOTc0NChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQogewogCS8vIHBhdGNoIGZvciBTaWdtYVRlbAogCWFjOTctPmJ1aWxkX29wcyA9ICZwYXRjaF9zaWdtYXRlbF9zdGFjOTcwMF9vcHM7CkBAIC0xMDIxLDcgKzEwMDksNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcGF0Y2hfc2lnbWF0ZWxfc3RhYzk3NTYoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKK3N0YXRpYyBpbnQgcGF0Y2hfc2lnbWF0ZWxfc3RhYzk3NTYoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAkvLyBwYXRjaCBmb3IgU2lnbWFUZWwKIAlhYzk3LT5idWlsZF9vcHMgPSAmcGF0Y2hfc2lnbWF0ZWxfc3RhYzk3MDBfb3BzOwpAQCAtMTE5OCw3ICsxMTg2LDcgQEAKIAkuYnVpbGRfc3BlY2lmaWMJPSBwYXRjaF9zaWdtYXRlbF9zdGFjOTc1OF9zcGVjaWZpYwogfTsKIAotaW50IHBhdGNoX3NpZ21hdGVsX3N0YWM5NzU4KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCitzdGF0aWMgaW50IHBhdGNoX3NpZ21hdGVsX3N0YWM5NzU4KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJc3RhdGljIHVuc2lnbmVkIHNob3J0IHJlZ3NbNF0gPSB7CiAJCUFDOTdfU0lHTUFURUxfT1VUU0VMLApAQCAtMTI3Miw3ICsxMjYwLDcgQEAKIAkuYnVpbGRfc3BkaWYgPSBwYXRjaF9jaXJydXNfYnVpbGRfc3BkaWYKIH07CiAKLWludCBwYXRjaF9jaXJydXNfc3BkaWYoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKK3N0YXRpYyBpbnQgcGF0Y2hfY2lycnVzX3NwZGlmKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJLyogQmFzaWNhbGx5LCB0aGUgY3M0MjAxL2NzNDIwNS9jczQyOTdhIGhhcyBub24tc3RhbmRhcmQgc3AvZGlmIHJlZ2lzdGVycy4KIAkgICBXSFkgQ0FOJ1QgQU5ZT05FIEZPTExPVyBUSEUgQkxPT0RZIFNQRUM/ICAqc2lnaCoKQEAgLTEyOTMsNyArMTI4MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBwYXRjaF9jaXJydXNfY3M0Mjk5KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCitzdGF0aWMgaW50IHBhdGNoX2NpcnJ1c19jczQyOTkoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAkvKiBmb3JjZSB0aGUgZGV0ZWN0aW9uIG9mIFBDIEJlZXAgKi8KIAlhYzk3LT5mbGFncyB8PSBBQzk3X0hBU19QQ19CRUVQOwpAQCAtMTMyOSw3ICsxMzE3LDcgQEAKIAkuYnVpbGRfc3BkaWYgPSBwYXRjaF9jb25leGFudF9idWlsZF9zcGRpZgogfTsKIAotaW50IHBhdGNoX2NvbmV4YW50KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCitzdGF0aWMgaW50IHBhdGNoX2NvbmV4YW50KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX2NvbmV4YW50X29wczsKIAlhYzk3LT5mbGFncyB8PSBBQzk3X0NYX1NQRElGOwpAQCAtMTMzOCw3ICsxMzI2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHBhdGNoX2N4MjA1NTEoc3RydWN0IHNuZF9hYzk3ICphYzk3KQorc3RhdGljIGludCBwYXRjaF9jeDIwNTUxKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKIHsKIAlzbmRfYWM5N191cGRhdGVfYml0cyhhYzk3LCAweDVjLCAweDAxLCAweDAxKTsKIAlyZXR1cm4gMDsKQEAgLTE0MzAsNyArMTQxOCw3IEBACiAJeyB9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLWludCBwYXRjaF9hZDE4MTkoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKK3N0YXRpYyBpbnQgcGF0Y2hfYWQxODE5KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJdW5zaWduZWQgc2hvcnQgc2NmZzsKIApAQCAtMTUwNyw3ICsxNDk1LDcgQEAKICNlbmRpZgogfTsKIAotaW50IHBhdGNoX2FkMTg4MShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF9hZDE4ODEoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAlzdGF0aWMgY29uc3QgY2hhciBjZmdfaWR4c1szXVsyXSA9IHsKIAkJezIsIDF9LApAQCAtMTU5NSw3ICsxNTgzLDcgQEAKICNlbmRpZgogfTsKIAotaW50IHBhdGNoX2FkMTg4NShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF9hZDE4ODUoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAlwYXRjaF9hZDE4ODEoYWM5Nyk7CiAJLyogVGhpcyBpcyByZXF1aXJlZCB0byBkZWFsIHdpdGggdGhlIEludGVsIEQ4MTVFRUFMMiAqLwpAQCAtMTYyMiw3ICsxNjEwLDcgQEAKICNlbmRpZgogfTsKIAotaW50IHBhdGNoX2FkMTg4NihzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF9hZDE4ODYoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAlwYXRjaF9hZDE4ODEoYWM5Nyk7CiAJLyogUHJlc2FyaW83MDAgd29ya2Fyb3VuZCAqLwpAQCAtMTc5NCw2ICsxNzgyLDExIEBACiAJMHgxMDE0MDUzNCwgLyogVGhpbmtwYWQgWDMxICovCiAJMHgxMDE0MDUzNywgLyogVGhpbmtwYWQgVDQxcCAqLwogCTB4MTAxNDA1NTQsIC8qIFRoaW5rcGFkIFQ0MnAvUjUwcCAqLworCTB4MTAxNDA1NjcsIC8qIFRoaW5rcGFkIFQ0M3AgMjY2OC1HN1UgKi8KKwkweDEwMTQwNTgxLCAvKiBUaGlua3BhZCBYNDEtMjUyNyAqLworCTB4MTA0MzgwYjAsIC8qIEFzdXMgQTdWOFgtTVggKi8KKwkweDExNzkwMjQxLCAvKiBUb3NoaWJhIFNhdGVsbGl0ZSBBLTE1IFMxMjcgKi8KKwkweDE0NGRjMDFhLCAvKiBTYW1zdW5nIE5QLVgyMEMwMDQvU0VHICovCiAJMCAvKiBlbmQgKi8KIH07CiAKQEAgLTE4NDQsNyArMTgzNyw3IEBACiAJCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIEFDOTdfQURfSkFDS19TUERJRiwgMTw8MTEsIDE8PDExKTsKIH0KIAotaW50IHBhdGNoX2FkMTk4MWEoc3RydWN0IHNuZF9hYzk3ICphYzk3KQorc3RhdGljIGludCBwYXRjaF9hZDE5ODFhKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKIHsKIAlwYXRjaF9hZDE4ODEoYWM5Nyk7CiAJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX2FkMTk4MWFfYnVpbGRfb3BzOwpAQCAtMTg3Nyw3ICsxODcwLDcgQEAKICNlbmRpZgogfTsKIAotaW50IHBhdGNoX2FkMTk4MWIoc3RydWN0IHNuZF9hYzk3ICphYzk3KQorc3RhdGljIGludCBwYXRjaF9hZDE5ODFiKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKIHsKIAlwYXRjaF9hZDE4ODEoYWM5Nyk7CiAJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX2FkMTk4MWJfYnVpbGRfb3BzOwpAQCAtMjAxNCw3ICsyMDA3LDcgQEAKIAkudXBkYXRlX2phY2tzID0gYWQxODg4X3VwZGF0ZV9qYWNrcywKIH07CiAKLWludCBwYXRjaF9hZDE4ODgoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKK3N0YXRpYyBpbnQgcGF0Y2hfYWQxODg4KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJdW5zaWduZWQgc2hvcnQgbWlzYzsKIAkKQEAgLTIwNTIsNyArMjA0NSw3IEBACiAJLnVwZGF0ZV9qYWNrcyA9IGFkMTg4OF91cGRhdGVfamFja3MsCiB9OwogCi1pbnQgcGF0Y2hfYWQxOTgwKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCitzdGF0aWMgaW50IHBhdGNoX2FkMTk4MChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQogewogCXBhdGNoX2FkMTg4OChhYzk3KTsKIAlhYzk3LT5idWlsZF9vcHMgPSAmcGF0Y2hfYWQxOTgwX2J1aWxkX29wczsKQEAgLTIxNjgsNyArMjE2MSw3IEBACiAJLnVwZGF0ZV9qYWNrcyA9IGFkMTk4NV91cGRhdGVfamFja3MsCiB9OwogCi1pbnQgcGF0Y2hfYWQxOTg1KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCitzdGF0aWMgaW50IHBhdGNoX2FkMTk4NShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQogewogCXVuc2lnbmVkIHNob3J0IG1pc2M7CiAJCkBAIC0yNDY4LDcgKzI0NjEsNyBAQAogCS51cGRhdGVfamFja3MgPSBhZDE5ODZfdXBkYXRlX2phY2tzLAogfTsKIAotaW50IHBhdGNoX2FkMTk4NihzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF9hZDE5ODYoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAlwYXRjaF9hZDE4ODEoYWM5Nyk7CiAJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX2FkMTk4Nl9idWlsZF9vcHM7CkBAIC0yNTYxLDcgKzI1NTQsNyBAQAogCS51cGRhdGVfamFja3MgPSBhbGM2NTBfdXBkYXRlX2phY2tzCiB9OwogCi1pbnQgcGF0Y2hfYWxjNjUwKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCitzdGF0aWMgaW50IHBhdGNoX2FsYzY1MChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQogewogCXVuc2lnbmVkIHNob3J0IHZhbDsKIApAQCAtMjcxMyw3ICsyNzA2LDcgQEAKIAkudXBkYXRlX2phY2tzID0gYWxjNjU1X3VwZGF0ZV9qYWNrcwogfTsKIAotaW50IHBhdGNoX2FsYzY1NShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF9hbGM2NTUoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCkBAIC0yNzM5LDYgKzI3MzIsNyBAQAogCQkgICAgKGFjOTctPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMTMxIHx8IC8qIE1TSSBTMjcwIGxhcHRvcCAqLwogCQkgICAgIGFjOTctPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMTYxIHx8IC8qIExHIEsxIEV4cHJlc3MgKi8KIAkJICAgICBhYzk3LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDM1MSB8fCAvKiBNU0kgTDcyNSBsYXB0b3AgKi8KKwkJICAgICBhYzk3LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDQ3MSB8fCAvKiBNU0kgTDcyMCBsYXB0b3AgKi8KIAkJICAgICBhYzk3LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDA2MSkpICAvKiBNU0kgUzI1MCBsYXB0b3AgKi8KIAkJCXZhbCAmPSB+KDEgPDwgMSk7IC8qIFBpbiA0NyBpcyBFQVBEIChmb3IgaW50ZXJuYWwgc3BlYWtlcikgKi8KIAkJZWxzZQpAQCAtMjgxNSw3ICsyODA5LDcgQEAKIAkudXBkYXRlX2phY2tzID0gYWxjODUwX3VwZGF0ZV9qYWNrcwogfTsKIAotaW50IHBhdGNoX2FsYzg1MChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCitzdGF0aWMgaW50IHBhdGNoX2FsYzg1MChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCiB7CiAJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX2FsYzg1MF9vcHM7CiAKQEAgLTI4NzUsNyArMjg2OSw3IEBACiAJLnVwZGF0ZV9qYWNrcyA9IGNtOTczOF91cGRhdGVfamFja3MKIH07CiAKLWludCBwYXRjaF9jbTk3Mzgoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKK3N0YXRpYyBpbnQgcGF0Y2hfY205NzM4KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX2NtOTczOF9vcHM7CiAJLyogRklYTUU6IGNhbiBhbnlvbmUgY29uZmlybSBiZWxvdz8gKi8KQEAgLTI5NjcsNyArMjk2MSw3IEBACiAJLnVwZGF0ZV9qYWNrcyA9IGNtOTczOV91cGRhdGVfamFja3MKIH07CiAKLWludCBwYXRjaF9jbTk3Mzkoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKK3N0YXRpYyBpbnQgcGF0Y2hfY205NzM5KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJdW5zaWduZWQgc2hvcnQgdmFsOwogCkBAIC0zMTQxLDcgKzMxMzUsNyBAQAogCS51cGRhdGVfamFja3MgPSBjbTk3NjFfdXBkYXRlX2phY2tzCiB9OwogCi1pbnQgcGF0Y2hfY205NzYxKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3N0YXRpYyBpbnQgcGF0Y2hfY205NzYxKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKIHsKIAl1bnNpZ25lZCBzaG9ydCB2YWw7CiAKQEAgLTMyMzYsNyArMzIzMCw3IEBACiAJLmJ1aWxkX3Bvc3Rfc3BkaWYgPSBwYXRjaF9jbTk3NjFfcG9zdF9zcGRpZgkvKiBpZGVudGljYWwgd2l0aCBDTTk3NjEgKi8KIH07CiAKLWludCBwYXRjaF9jbTk3ODAoc3RydWN0IHNuZF9hYzk3ICphYzk3KQorc3RhdGljIGludCBwYXRjaF9jbTk3ODAoc3RydWN0IHNuZF9hYzk3ICphYzk3KQogewogCXVuc2lnbmVkIHNob3J0IHZhbDsKIApAQCAtMzI3OSw3ICszMjczLDcgQEAKIAkuYnVpbGRfc3BlY2lmaWMJPSBwYXRjaF92dDE2MTZfc3BlY2lmaWMKIH07CiAKLWludCBwYXRjaF92dDE2MTYoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKK3N0YXRpYyBpbnQgcGF0Y2hfdnQxNjE2KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCiB7CiAJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX3Z0MTYxNl9vcHM7CiAJcmV0dXJuIDA7CkBAIC0zMjg4LDE2ICszMjgyLDExMSBAQAogLyoKICAqIFZUMTYxN0EgY29kZWMKICAqLworCisvKgorICogdW5mb3J0dW5hdGVseSwgdGhlIHZ0MTYxN2Egc3Rhc2hlcyB0aGUgdHdpZGRsZXJzIHJlcXVpcmVkIGZvcgorICogbm9vZGluZyB0aGUgaS9vIGphY2tzIG9uIDIgZGlmZmVyZW50IHJlZ3MuICogdGhhbWVhbnMgdGhhdCB3ZSBjYW50CisgKiB1c2UgdGhlIGVhc3kgd2F5IHByb3ZpZGVkIGJ5IEFDOTdfRU5VTV9ET1VCTEUoKSB3ZSBoYXZlIHRvIHdyaXRlCisgKiBhcmUgb3duIGZ1bmNzLgorICoKKyAqIE5COiB0aGlzIGlzIGFic29sdXRlbHkgYW5kIHV0dGVybHkgZGlmZmVyZW50IGZyb20gdGhlIHZ0MTYxOC4gZHVubm8KKyAqIGFib3V0IHRoZSAxNjE2LgorICovCisKKy8qIGNvcGllZCBmcm9tIGFjOTdfc3Vycm91bmRfamFja19tb2RlX2luZm8oKSAqLworc3RhdGljIGludCBzbmRfYWM5N192dDE2MTdhX3NtYXJ0NTFfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJLyogb3JkZXJpbmcgaW4gdGhpcyBsaXN0IHJlZmxlY3RzIHZ0MTYxN2EgZG9jcyBmb3IgUmVnIDIwIGFuZAorCSAqIDdhIGFuZCBUYWJsZSA2IHRoYXQgbGF5cyBvdXQgdGhlIG1hdHJpeCBOQiBXUlQgVGFibGU2OiBTTTUxCisJICogaXMgU001MUVOICpBTkQqIGl0J3MgQml0MTQsIG5vdCBCaXQxNSBzbyB0aGUgdGFibGUgaXMgdmVyeQorCSAqIGNvdW50ZXItaW50dWl0aXZlICovIAorCisJc3RhdGljIGNvbnN0IGNoYXIqIHRleHRzW10gPSB7ICJMaW5lSW4gTWljMSIsICJMaW5lSW4gTWljMSBNaWMzIiwKKwkJCQkgICAgICAgIlN1cnIgTEZFL0MgTWljMyIsICJMaW5lSW4gTEZFL0MgTWljMyIsCisJCQkJICAgICAgICJMaW5lSW4gTWljMiIsICJMaW5lSW4gTWljMiBNaWMxIiwKKwkJCQkgICAgICAgIlN1cnIgTEZFIE1pYzEiLCAiU3VyciBMRkUgTWljMSBNaWMyIn07CisJcmV0dXJuIGFjOTdfZW51bV90ZXh0X2luZm8oa2NvbnRyb2wsIHVpbmZvLCB0ZXh0cywgOCk7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FjOTdfdnQxNjE3YV9zbWFydDUxX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJdXNob3J0IHVzU001MSwgdXNNUzsgIAorCisJc3RydWN0IHNuZF9hYzk3ICpwYWM5NzsKKwkKKwlwYWM5NyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsgLyogZ3JhYiBjb2RlYyBoYW5kbGUgKi8KKworCS8qIGdyYWIgb3VyIGRlc2lyZWMgYml0cywgdGhlbiBtYXNoIHRoZW0gdG9nZXRoZXIgaW4gYSBtYW5uZXIKKwkgKiBjb25zaXN0ZW50IHdpdGggVGFibGUgNiBvbiBwYWdlIDE3IGluIHRoZSAxNjE3YSBkb2NzICovCisgCisJdXNTTTUxID0gc25kX2FjOTdfcmVhZChwYWM5NywgMHg3YSkgPj4gMTQ7CisJdXNNUyAgID0gc25kX2FjOTdfcmVhZChwYWM5NywgMHgyMCkgPj4gODsKKyAgCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9ICh1c1NNNTEgPDwgMSkgKyB1c01TOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FjOTdfdnQxNjE3YV9zbWFydDUxX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJdXNob3J0IHVzU001MSwgdXNNUywgdXNSZWc7ICAKKworCXN0cnVjdCBzbmRfYWM5NyAqcGFjOTc7CisKKwlwYWM5NyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsgLyogZ3JhYiBjb2RlYyBoYW5kbGUgKi8KKworCXVzU001MSA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPj4gMTsKKwl1c01TICAgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICYgIDE7CisKKwkvKiBwdXNoIG91ciB2YWx1ZXMgaW50byB0aGUgcmVnaXN0ZXIgLSBjb25zaWRlciB0aGF0IHRoaW5ncyB3aWxsIGJlIGxlZnQKKwkgKiBpbiBhIGZ1bmt5IHN0YXRlIGlmIHRoZSB3cml0ZSBmYWlscyAqLworCisJdXNSZWcgPSBzbmRfYWM5N19yZWFkKHBhYzk3LCAweDdhKTsKKwlzbmRfYWM5N193cml0ZV9jYWNoZShwYWM5NywgMHg3YSwgKHVzUmVnICYgMHgzRkZGKSArICh1c1NNNTEgPDwgMTQpKTsKKwl1c1JlZyA9IHNuZF9hYzk3X3JlYWQocGFjOTcsIDB4MjApOworCXNuZF9hYzk3X3dyaXRlX2NhY2hlKHBhYzk3LCAweDIwLCAodXNSZWcgJiAweEZFRkYpICsgKHVzTVMgICA8PCAgOCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfYWM5N19jb250cm9sc192dDE2MTdhW10gPSB7CisKKwlBQzk3X1NJTkdMRSgiQ2VudGVyL0xGRSBFeGNoYW5nZSIsIDB4NWEsIDgsIDEsIDApLAorCS8qCisJICogVGhlc2UgYXJlIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgc3Vycm91bmQgc291bmQgb24gbW90aGVyYm9hcmRzCisJICogdGhhdCBoYXZlIDMgYmlkaXJlY3Rpb25hbCBhbmFsb2cgamFja3MKKwkgKi8KKwl7CisJCS5pZmFjZSAgICAgICAgID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lICAgICAgICAgID0gIlNtYXJ0IDUuMSBTZWxlY3QiLAorCQkuaW5mbyAgICAgICAgICA9IHNuZF9hYzk3X3Z0MTYxN2Ffc21hcnQ1MV9pbmZvLAorCQkuZ2V0ICAgICAgICAgICA9IHNuZF9hYzk3X3Z0MTYxN2Ffc21hcnQ1MV9nZXQsCisJCS5wdXQgICAgICAgICAgID0gc25kX2FjOTdfdnQxNjE3YV9zbWFydDUxX3B1dCwKKwl9LAorfTsKKwogaW50IHBhdGNoX3Z0MTYxN2Eoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKLQkvKiBicmluZyBhbmFsb2cgcG93ZXIgY29uc3VtcHRpb24gdG8gbm9ybWFsLCBsaWtlIFdpblhQIGRyaXZlcgotCSAqIGZvciBFUElBIFNQCisJaW50IGVyciA9IDA7CisKKwkvKiB3ZSBjaG9vc2UgdG8gbm90IGZhaWwgb3V0IGF0IHRoaXMgcG9pbnQsIGJ1dCB3ZSB0ZWxsIHRoZQorCSAgIGNhbGxlciB3aGVuIHdlIHJldHVybiAqLworCisJZXJyID0gcGF0Y2hfYnVpbGRfY29udHJvbHMoYWM5NywgJnNuZF9hYzk3X2NvbnRyb2xzX3Z0MTYxN2FbMF0sCisJCQkJICAgQVJSQVlfU0laRShzbmRfYWM5N19jb250cm9sc192dDE2MTdhKSk7CisKKwkvKiBicmluZyBhbmFsb2cgcG93ZXIgY29uc3VtcHRpb24gdG8gbm9ybWFsIGJ5IHR1cm5pbmcgb2ZmIHRoZQorCSAqIGhlYWRwaG9uZSBhbXBsaWZpZXIsIGxpa2UgV2luWFAgZHJpdmVyIGZvciBFUElBIFNQCiAJICovCiAJc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgMHg1YywgMHgyMCk7CiAJYWM5Ny0+ZXh0X2lkIHw9IEFDOTdfRUlfU1BESUY7CS8qIGZvcmNlIHRoZSBkZXRlY3Rpb24gb2Ygc3BkaWYgKi8KIAlhYzk3LT5yYXRlc1tBQzk3X1JBVEVTX1NQRElGXSA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDA7CiAJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX3Z0MTYxNl9vcHM7Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpAQCAtMzMzOCw3ICszNDI3LDcgQEAKIAkudXBkYXRlX2phY2tzID0gaXQyNjQ2X3VwZGF0ZV9qYWNrcwogfTsKIAotaW50IHBhdGNoX2l0MjY0NihzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQorc3RhdGljIGludCBwYXRjaF9pdDI2NDYoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAlhYzk3LT5idWlsZF9vcHMgPSAmcGF0Y2hfaXQyNjQ2X29wczsKIAkvKiBmdWxsIERBQyB2b2x1bWUgKi8KQEAgLTMzNzEsNyArMzQ2MCw3IEBACiAJLmJ1aWxkX3NwZWNpZmljCT0gcGF0Y2hfc2kzMDM2X3NwZWNpZmljLAogfTsKIAotaW50IG1wYXRjaF9zaTMwMzYoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKK3N0YXRpYyBpbnQgbXBhdGNoX3NpMzAzNihzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQogewogCWFjOTctPmJ1aWxkX29wcyA9ICZwYXRjaF9zaTMwMzZfb3BzOwogCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsIDB4NWMsIDB4ZjIxMCApOwpAQCAtMzQwMyw3ICszNDkyLDcgQEAKIAl7IH0gLyogdGVybWluYXRvciAqLwogfTsKIAotaW50IHBhdGNoX2xtNDU1MChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCitzdGF0aWMgaW50IHBhdGNoX2xtNDU1MChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCiB7CiAJYWM5Ny0+cmVzX3RhYmxlID0gbG00NTUwX3Jlc3RibDsKIAlyZXR1cm4gMDsKQEAgLTM0MzgsNyArMzUyNyw3IEBACiAJLmJ1aWxkX3NwZWNpZmljCT0gcGF0Y2hfdWNiMTQwMF9zcGVjaWZpYywKIH07CiAKLWludCBwYXRjaF91Y2IxNDAwKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCitzdGF0aWMgaW50IHBhdGNoX3VjYjE0MDAoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAlhYzk3LT5idWlsZF9vcHMgPSAmcGF0Y2hfdWNiMTQwMF9vcHM7CiAJLyogZW5hYmxlIGhlYWRwaG9uZSBkcml2ZXIgYW5kIHNtYXJ0IGxvdyBwb3dlciBtb2RlIGJ5IGRlZmF1bHQgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guaCBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guaAppbmRleCA1NTVkMWM5Li5mZDM0MWNlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmgKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5oCkBAIC0yMiw0NCArMjIsNzIgQEAKICAqCiAgKi8KIAotaW50IHBhdGNoX3lhbWFoYV95bWY3NTMoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7Ci1pbnQgcGF0Y2hfd29sZnNvbjAwKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX3dvbGZzb24wMyhzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKLWludCBwYXRjaF93b2xmc29uMDQoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7Ci1pbnQgcGF0Y2hfd29sZnNvbjA1KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX3dvbGZzb24xMShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKLWludCBwYXRjaF93b2xmc29uMTMoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7Ci1pbnQgcGF0Y2hfdHJpdGVjaF90cjI4MDI4KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX3NpZ21hdGVsX3N0YWM5NzAwKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX3NpZ21hdGVsX3N0YWM5NzA4KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX3NpZ21hdGVsX3N0YWM5NzIxKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX3NpZ21hdGVsX3N0YWM5NzQ0KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX3NpZ21hdGVsX3N0YWM5NzU2KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX3NpZ21hdGVsX3N0YWM5NzU4KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX2NpcnJ1c19jczQyOTkoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7Ci1pbnQgcGF0Y2hfY2lycnVzX3NwZGlmKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX2NvbmV4YW50KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX2N4MjA1NTEoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7Ci1pbnQgcGF0Y2hfYWQxODE5KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX2FkMTg4MShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKLWludCBwYXRjaF9hZDE4ODUoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7Ci1pbnQgcGF0Y2hfYWQxODg2KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX2FkMTg4OChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKLWludCBwYXRjaF9hZDE5ODAoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7Ci1pbnQgcGF0Y2hfYWQxOTgxYShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKLWludCBwYXRjaF9hZDE5ODFiKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX2FkMTk4NShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKLWludCBwYXRjaF9hZDE5ODYoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7Ci1pbnQgcGF0Y2hfYWxjNjUwKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX2FsYzY1NShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKLWludCBwYXRjaF9hbGM4NTAoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7Ci1pbnQgcGF0Y2hfY205NzM4KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX2NtOTczOShzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKLWludCBwYXRjaF9jbTk3NjEoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7Ci1pbnQgcGF0Y2hfY205NzgwKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX3Z0MTYxNihzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKLWludCBwYXRjaF92dDE2MTdhKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IHBhdGNoX2l0MjY0NihzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKLWludCBwYXRjaF91Y2IxNDAwKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwotaW50IG1wYXRjaF9zaTMwMzYoc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7Ci1pbnQgcGF0Y2hfbG00NTUwKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOworI2RlZmluZSBBQzk3X1NJTkdMRV9WQUxVRShyZWcsc2hpZnQsbWFzayxpbnZlcnQpIFwKKwkoKHJlZykgfCAoKHNoaWZ0KSA8PCA4KSB8ICgoc2hpZnQpIDw8IDEyKSB8ICgobWFzaykgPDwgMTYpIHwgXAorCSAoKGludmVydCkgPDwgMjQpKQorI2RlZmluZSBBQzk3X1BBR0VfU0lOR0xFX1ZBTFVFKHJlZyxzaGlmdCxtYXNrLGludmVydCxwYWdlKSBcCisJKEFDOTdfU0lOR0xFX1ZBTFVFKHJlZyxzaGlmdCxtYXNrLGludmVydCkgfCAoMTw8MjUpIHwgKChwYWdlKSA8PCAyNikpCisjZGVmaW5lIEFDOTdfU0lOR0xFKHhuYW1lLCByZWcsIHNoaWZ0LCBtYXNrLCBpbnZlcnQpIFwKK3sgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIFwKKyAgLmluZm8gPSBzbmRfYWM5N19pbmZvX3ZvbHN3LAkJXAorICAuZ2V0ID0gc25kX2FjOTdfZ2V0X3ZvbHN3LCAucHV0ID0gc25kX2FjOTdfcHV0X3ZvbHN3LCBcCisgIC5wcml2YXRlX3ZhbHVlID0gIEFDOTdfU0lOR0xFX1ZBTFVFKHJlZywgc2hpZnQsIG1hc2ssIGludmVydCkgfQorI2RlZmluZSBBQzk3X1BBR0VfU0lOR0xFKHhuYW1lLCByZWcsIHNoaWZ0LCBtYXNrLCBpbnZlcnQsIHBhZ2UpCQlcCit7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCBcCisgIC5pbmZvID0gc25kX2FjOTdfaW5mb192b2xzdywJCVwKKyAgLmdldCA9IHNuZF9hYzk3X2dldF92b2xzdywgLnB1dCA9IHNuZF9hYzk3X3B1dF92b2xzdywgXAorICAucHJpdmF0ZV92YWx1ZSA9ICBBQzk3X1BBR0VfU0lOR0xFX1ZBTFVFKHJlZywgc2hpZnQsIG1hc2ssIGludmVydCwgcGFnZSkgfQorI2RlZmluZSBBQzk3X0RPVUJMRSh4bmFtZSwgcmVnLCBzaGlmdF9sZWZ0LCBzaGlmdF9yaWdodCwgbWFzaywgaW52ZXJ0KSBcCit7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIFwKKyAgLmluZm8gPSBzbmRfYWM5N19pbmZvX3ZvbHN3LAkJXAorICAuZ2V0ID0gc25kX2FjOTdfZ2V0X3ZvbHN3LCAucHV0ID0gc25kX2FjOTdfcHV0X3ZvbHN3LCBcCisgIC5wcml2YXRlX3ZhbHVlID0gKHJlZykgfCAoKHNoaWZ0X2xlZnQpIDw8IDgpIHwgKChzaGlmdF9yaWdodCkgPDwgMTIpIHwgKChtYXNrKSA8PCAxNikgfCAoKGludmVydCkgPDwgMjQpIH0KKworLyogZW51bSBjb250cm9sICovCitzdHJ1Y3QgYWM5N19lbnVtIHsKKwl1bnNpZ25lZCBjaGFyIHJlZzsKKwl1bnNpZ25lZCBjaGFyIHNoaWZ0X2w7CisJdW5zaWduZWQgY2hhciBzaGlmdF9yOworCXVuc2lnbmVkIHNob3J0IG1hc2s7CisJY29uc3QgY2hhciAqKnRleHRzOworfTsKKworI2RlZmluZSBBQzk3X0VOVU1fRE9VQkxFKHhyZWcsIHhzaGlmdF9sLCB4c2hpZnRfciwgeG1hc2ssIHh0ZXh0cykgXAoreyAucmVnID0geHJlZywgLnNoaWZ0X2wgPSB4c2hpZnRfbCwgLnNoaWZ0X3IgPSB4c2hpZnRfciwgXAorICAubWFzayA9IHhtYXNrLCAudGV4dHMgPSB4dGV4dHMgfQorI2RlZmluZSBBQzk3X0VOVU1fU0lOR0xFKHhyZWcsIHhzaGlmdCwgeG1hc2ssIHh0ZXh0cykgXAorCUFDOTdfRU5VTV9ET1VCTEUoeHJlZywgeHNoaWZ0LCB4c2hpZnQsIHhtYXNrLCB4dGV4dHMpCisjZGVmaW5lIEFDOTdfRU5VTSh4bmFtZSwgeGVudW0pIFwKK3sgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIFwKKyAgLmluZm8gPSBzbmRfYWM5N19pbmZvX2VudW1fZG91YmxlLAkJICAgIFwKKyAgLmdldCA9IHNuZF9hYzk3X2dldF9lbnVtX2RvdWJsZSwgLnB1dCA9IHNuZF9hYzk3X3B1dF9lbnVtX2RvdWJsZSwgXAorICAucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSZ4ZW51bSB9CisKKy8qIGFjOTdfY29kZWMuYyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9hYzk3X2NvbnRyb2xzXzNkW107CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2FjOTdfY29udHJvbHNfc3BkaWZbXTsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfYWM5N19jbmV3KGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpfdGVtcGxhdGUsCisJCQkJCSAgc3RydWN0IHNuZF9hYzk3ICogYWM5Nyk7CitzdGF0aWMgaW50IHNuZF9hYzk3X2luZm9fdm9sc3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbyk7CitzdGF0aWMgaW50IHNuZF9hYzk3X2dldF92b2xzdyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKK3N0YXRpYyBpbnQgc25kX2FjOTdfcHV0X3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOworc3RhdGljIGludCBzbmRfYWM5N190cnlfYml0KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcsIGludCByZWcsIGludCBiaXQpOworc3RhdGljIGludCBzbmRfYWM5N19yZW1vdmVfY3RsKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpzdWZmaXgpOworc3RhdGljIGludCBzbmRfYWM5N19yZW5hbWVfY3RsKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgY29uc3QgY2hhciAqc3JjLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3VmZml4KTsKK3N0YXRpYyBpbnQgc25kX2FjOTdfc3dhcF9jdGwoc3RydWN0IHNuZF9hYzk3ICphYzk3LCBjb25zdCBjaGFyICpzMSwKKwkJCSAgICAgY29uc3QgY2hhciAqczIsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7CitzdGF0aWMgdm9pZCBzbmRfYWM5N19yZW5hbWVfdm9sX2N0bChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkgICAgY29uc3QgY2hhciAqZHN0KTsKK3N0YXRpYyB2b2lkIHNuZF9hYzk3X3Jlc3RvcmVfc3RhdHVzKHN0cnVjdCBzbmRfYWM5NyAqYWM5Nyk7CitzdGF0aWMgdm9pZCBzbmRfYWM5N19yZXN0b3JlX2llYzk1OChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpOworc3RhdGljIGludCBzbmRfYWM5N19pbmZvX2VudW1fZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbyk7CitzdGF0aWMgaW50IHNuZF9hYzk3X2dldF9lbnVtX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOworc3RhdGljIGludCBzbmRfYWM5N19wdXRfZW51bV9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGNtLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BjbS5jCmluZGV4IDM3NThkMDcuLjQyODFlNmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGNtLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19wY20uYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KLSNpbmNsdWRlICJhYzk3X3BhdGNoLmgiCiAjaW5jbHVkZSAiYWM5N19pZC5oIgogI2luY2x1ZGUgImFjOTdfbG9jYWwuaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCmluZGV4IGJhN2ZhMjIuLmNiNTlmOTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYworKysgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKQEAgLTY5LDEwICs2OSwxMCBAQAogICogIERlYnVnIHBhcnQgZGVmaW5pdGlvbnMKICAqLwogCi0vLyNkZWZpbmUgQUxJX0RFQlVHCisvKiAjZGVmaW5lIEFMSV9ERUJVRyAqLwogCiAjaWZkZWYgQUxJX0RFQlVHCi0jZGVmaW5lIHNuZF9hbGlfcHJpbnRrKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsKKyNkZWZpbmUgc25kX2FsaV9wcmludGsoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncyk7CiAjZWxzZQogI2RlZmluZSBzbmRfYWxpX3ByaW50ayhmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKQEAgLTEwNSwxMCArMTA1LDEwIEBACiAgKiAgRGlyZWN0IFJlZ2lzdGVycwogICovCiAKLSNkZWZpbmUgQUxJX0xFR0FDWV9ETUFSMCAgICAgICAgMHgwMCAgLy8gQURSMAotI2RlZmluZSBBTElfTEVHQUNZX0RNQVI0ICAgICAgICAweDA0ICAvLyBDTlQwCi0jZGVmaW5lIEFMSV9MRUdBQ1lfRE1BUjExICAgICAgIDB4MGIgIC8vIE1PRCAKLSNkZWZpbmUgQUxJX0xFR0FDWV9ETUFSMTUgICAgICAgMHgwZiAgLy8gTU1SIAorI2RlZmluZSBBTElfTEVHQUNZX0RNQVIwICAgICAgICAweDAwICAvKiBBRFIwICovCisjZGVmaW5lIEFMSV9MRUdBQ1lfRE1BUjQgICAgICAgIDB4MDQgIC8qIENOVDAgKi8KKyNkZWZpbmUgQUxJX0xFR0FDWV9ETUFSMTEgICAgICAgMHgwYiAgLyogTU9EICAqLworI2RlZmluZSBBTElfTEVHQUNZX0RNQVIxNSAgICAgICAweDBmICAvKiBNTVIgICovCiAjZGVmaW5lIEFMSV9NUFVSMAkJMHgyMAogI2RlZmluZSBBTElfTVBVUjEJCTB4MjEKICNkZWZpbmUgQUxJX01QVVIyCQkweDIyCkBAIC0xNzUsNyArMTc1LDcgQEAKIHN0cnVjdCBzbmRfYWxpX3ZvaWNlOwogCiBzdHJ1Y3Qgc25kX2FsaV9jaGFubmVsX2NvbnRyb2wgewotCS8vIHJlZ2lzdGVyIGRhdGEKKwkvKiByZWdpc3RlciBkYXRhICovCiAJc3RydWN0IFJFR0RBVEEgewogCQl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAJCXVuc2lnbmVkIGludCBzdG9wOwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJCXVuc2lnbmVkIGludCBhaW50ZW47CiAJfSBkYXRhOwogCQkKLQkvLyByZWdpc3RlciBhZGRyZXNzZXMKKwkvKiByZWdpc3RlciBhZGRyZXNzZXMgKi8KIAlzdHJ1Y3QgUkVHUyB7CiAJCXVuc2lnbmVkIGludCBzdGFydDsKIAkJdW5zaWduZWQgaW50IHN0b3A7CkBAIC0xOTcsMTkgKzE5NywxOCBAQAogCiBzdHJ1Y3Qgc25kX2FsaV92b2ljZSB7CiAJdW5zaWduZWQgaW50IG51bWJlcjsKLQl1bnNpZ25lZCBpbnQgdXNlOiAxLAotCSAgICBwY206IDEsCi0JICAgIG1pZGk6IDEsCi0JICAgIG1vZGU6IDEsCi0JICAgIHN5bnRoOiAxOworCXVuc2lnbmVkIGludCB1c2UgOjEsCisJCXBjbSA6MSwKKwkJbWlkaSA6MSwKKwkJbW9kZSA6MSwKKwkJc3ludGggOjEsCisJCXJ1bm5pbmcgOjE7CiAKIAkvKiBQQ00gZGF0YSAqLwogCXN0cnVjdCBzbmRfYWxpICpjb2RlYzsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX2FsaV92b2ljZSAqZXh0cmE7CiAJCi0JdW5zaWduZWQgaW50IHJ1bm5pbmc6IDE7Ci0KIAlpbnQgZXNvOyAgICAgICAgICAgICAgICAvKiBmaW5hbCBFU08gdmFsdWUgZm9yIGNoYW5uZWwgKi8KIAlpbnQgY291bnQ7ICAgICAgICAgICAgICAvKiBydW50aW1lLT5wZXJpb2Rfc2l6ZSAqLwogCkBAIC0yMzEsMTQgKzIzMCwxMiBAQAogfTsKIAogCi0jaWZkZWYgQ09ORklHX1BNCiAjZGVmaW5lIEFMSV9HTE9CQUxfUkVHUwkJNTYKICNkZWZpbmUgQUxJX0NIQU5ORUxfUkVHUwk4CiBzdHJ1Y3Qgc25kX2FsaV9pbWFnZSB7Ci0JdW5zaWduZWQgbG9uZyByZWdzW0FMSV9HTE9CQUxfUkVHU107Ci0JdW5zaWduZWQgbG9uZyBjaGFubmVsX3JlZ3NbQUxJX0NIQU5ORUxTXVtBTElfQ0hBTk5FTF9SRUdTXTsKKwl1MzIgcmVnc1tBTElfR0xPQkFMX1JFR1NdOworCXUzMiBjaGFubmVsX3JlZ3NbQUxJX0NIQU5ORUxTXVtBTElfQ0hBTk5FTF9SRUdTXTsKIH07Ci0jZW5kaWYKIAogCiBzdHJ1Y3Qgc25kX2FsaSB7CkBAIC0yNDYsOCArMjQzLDggQEAKIAl1bnNpZ25lZCBsb25nCXBvcnQ7CiAJdW5zaWduZWQgY2hhcglyZXZpc2lvbjsKIAotCXVuc2lnbmVkIGludCBod19pbml0aWFsaXplZDogMTsKLQl1bnNpZ25lZCBpbnQgc3BkaWZfc3VwcG9ydDogMTsKKwl1bnNpZ25lZCBpbnQgaHdfaW5pdGlhbGl6ZWQgOjE7CisJdW5zaWduZWQgaW50IHNwZGlmX3N1cHBvcnQgOjE7CiAKIAlzdHJ1Y3QgcGNpX2RldgkqcGNpOwogCXN0cnVjdCBwY2lfZGV2CSpwY2lfbTE1MzM7CkBAIC0yODcsMTA4ICsyODQsMjggQEAKIAogc3RhdGljIHZvaWQgc25kX2FsaV9jbGVhcl92b2ljZXMoc3RydWN0IHNuZF9hbGkgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHNuZF9hbGlfY29kZWNfcGVlayhzdHJ1Y3Qgc25kX2FsaSAqLCBpbnQsIHVuc2lnbmVkIHNob3J0KTsKLXN0YXRpYyB2b2lkIHNuZF9hbGlfY29kZWNfcG9rZShzdHJ1Y3Qgc25kX2FsaSAqLCBpbnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7Ci0KLS8qCi0gKiAgRGVidWcgUGFydAotICovCi0KLSNpZmRlZiBBTElfREVCVUcKLQotc3RhdGljIHZvaWQgYWxpX3JlYWRfcmVncyhzdHJ1Y3Qgc25kX2FsaSAqY29kZWMsIGludCBjaGFubmVsKQotewotCWludCBpLGo7Ci0JdW5zaWduZWQgaW50IGR3VmFsOwotCi0JcHJpbnRrKCJjaGFubmVsICVkIHJlZ2lzdGVycyBtYXA6XG4iLCBjaGFubmVsKTsKLQlvdXRiKCh1bnNpZ25lZCBjaGFyKShjaGFubmVsICYgMHgwMDFmKSwgQUxJX1JFRyhjb2RlYyxBTElfR0NfQ0lSKSk7Ci0KLQlwcmludGsoIiAgICAiKTsKLQlmb3Ioaj0wO2o8ODtqKyspCi0JCXByaW50aygiJTIuMnggICAgICAgIiwgaio0KTsKLQlwcmludGsoIlxuIik7Ci0KLQlmb3IgKGk9MDsgaTw9MHhmOC80O2krKykgewotCQlpZihpJTggPT0gMCkKLQkJCXByaW50aygiJTIuMnggICIsIChpKjQvMHgxMCkqMHgxMCk7Ci0JCWR3VmFsID0gaW5sKEFMSV9SRUcoY29kZWMsaSo0KSk7Ci0JCXByaW50aygiJTguOHggIiwgZHdWYWwpOwotCQlpZiAoKGkrMSklOCA9PSAwKQotCQkJcHJpbnRrKCJcbiIpOwotCX0KLQlwcmludGsoIlxuIik7Ci19Ci1zdGF0aWMgdm9pZCBhbGlfcmVhZF9jZmcodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgZGV2aWNlaWQpCi17Ci0JdW5zaWduZWQgaW50IGR3VmFsOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCWludCBpLGo7Ci0KLQlwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UodmVuZG9yLCBkZXZpY2VpZCwgTlVMTCk7Ci0JaWYgKHBjaV9kZXYgPT0gTlVMTCkKLQkJcmV0dXJuIDsKLQotCXByaW50aygiXG5NJXggUENJIENGR1xuIiwgZGV2aWNlaWQpOwotCXByaW50aygiICAgICIpOwotCWZvcihqPTA7ajw4O2orKykKLQkJcHJpbnRrKCIlZCAgICAgICAgIixqKTsKLQlwcmludGsoIlxuIik7Ci0KLQlmb3IoaT0wO2k8ODtpKyspIHsKLQkJcHJpbnRrKCIlZCAgICIsaSk7Ci0JCWZvcihqPTA7ajw4O2orKykKLQkJewotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9kZXYsIGkqMHgyMCtqKjQsICZkd1ZhbCk7Ci0JCQlwcmludGsoIiU4Ljh4ICIsIGR3VmFsKTsKLQkJfQotCQlwcmludGsoIlxuIik7Ci0JfQotCXBjaV9kZXZfcHV0KHBjaV9kZXYpOwotIH0KLXN0YXRpYyB2b2lkIGFsaV9yZWFkX2FjOTdyZWdzKHN0cnVjdCBzbmRfYWxpICpjb2RlYywgaW50IHNlY29uZGFyeSkKLXsKLQl1bnNpZ25lZCBzaG9ydCBpLGo7Ci0JdW5zaWduZWQgc2hvcnQgd1ZhbDsKLQotCXByaW50aygiXG5jb2RlYyAlZCByZWdpc3RlcnMgbWFwOlxuIiwgc2Vjb25kYXJ5KTsKLQotCXByaW50aygiICAgICIpOwotCWZvcihqPTA7ajw4O2orKykKLQkJcHJpbnRrKCIlMi4yeCAgICIsaioyKTsKLQlwcmludGsoIlxuIik7Ci0KLQlmb3IgKGk9MDsgaTw2NDtpKyspIHsKLQkJaWYoaSU4ID09IDApCi0JCQlwcmludGsoIiUyLjJ4ICAiLCAoaS84KSoweDEwKTsKLQkJd1ZhbCA9IHNuZF9hbGlfY29kZWNfcGVlayhjb2RlYywgc2Vjb25kYXJ5LCBpKjIpOwotCQlwcmludGsoIiU0LjR4ICIsIHdWYWwpOwotCQlpZiAoKGkrMSklOCA9PSAwKQotCQkJcHJpbnRrKCJcbiIpOwotCX0KLQlwcmludGsoIlxuIik7Ci19Ci0KLSNlbmRpZgorc3RhdGljIHZvaWQgc25kX2FsaV9jb2RlY19wb2tlKHN0cnVjdCBzbmRfYWxpICosIGludCwgdW5zaWduZWQgc2hvcnQsCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQpOwogCiAvKgogICogIEFDOTcgQUNDRVNTCiAgKi8KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc25kX2FsaV81NDUxX3BlZWsoc3RydWN0IHNuZF9hbGkgKmNvZGVjLAotCQkJCQkJdW5zaWduZWQgaW50IHBvcnQgKQorCQkJCQkgICAgIHVuc2lnbmVkIGludCBwb3J0KQogewogCXJldHVybiAodW5zaWduZWQgaW50KWlubChBTElfUkVHKGNvZGVjLCBwb3J0KSk7IAogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc25kX2FsaV81NDUxX3Bva2UoCXN0cnVjdCBzbmRfYWxpICpjb2RlYywKLQkJCQkJdW5zaWduZWQgaW50IHBvcnQsCi0JCQkJCXVuc2lnbmVkIGludCB2YWwgKQorc3RhdGljIGlubGluZSB2b2lkIHNuZF9hbGlfNTQ1MV9wb2tlKHN0cnVjdCBzbmRfYWxpICpjb2RlYywKKwkJCQkgICAgIHVuc2lnbmVkIGludCBwb3J0LAorCQkJCSAgICAgdW5zaWduZWQgaW50IHZhbCkKIHsKIAlvdXRsKCh1bnNpZ25lZCBpbnQpdmFsLCBBTElfUkVHKGNvZGVjLCBwb3J0KSk7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2FsaV9jb2RlY19yZWFkeSgJc3RydWN0IHNuZF9hbGkgKmNvZGVjLAotCQkJCXVuc2lnbmVkIGludCBwb3J0ICkKK3N0YXRpYyBpbnQgc25kX2FsaV9jb2RlY19yZWFkeShzdHJ1Y3Qgc25kX2FsaSAqY29kZWMsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHBvcnQpCiB7CiAJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKIAl1bnNpZ25lZCBpbnQgcmVzOwpAQCAtMzk2LDcgKzMxMyw3IEBACiAJZW5kX3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyNTApOwogCWRvIHsKIAkJcmVzID0gc25kX2FsaV81NDUxX3BlZWsoY29kZWMscG9ydCk7Ci0JCWlmICghIChyZXMgJiAweDgwMDApKQorCQlpZiAoIShyZXMgJiAweDgwMDApKQogCQkJcmV0dXJuIDA7CiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwogCX0gd2hpbGUgKHRpbWVfYWZ0ZXJfZXEoZW5kX3RpbWUsIGppZmZpZXMpKTsKQEAgLTQyNSwxMSArMzQyLDExIEBACiB9CiAKIHN0YXRpYyB2b2lkIHNuZF9hbGlfY29kZWNfcG9rZShzdHJ1Y3Qgc25kX2FsaSAqY29kZWMsaW50IHNlY29uZGFyeSwKLQkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHJlZywKLQkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHZhbCkKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcsCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgdmFsKQogewotCXVuc2lnbmVkIGludCBkd1ZhbCA9IDA7Ci0JdW5zaWduZWQgaW50IHBvcnQgPSAwOworCXVuc2lnbmVkIGludCBkd1ZhbDsKKwl1bnNpZ25lZCBpbnQgcG9ydDsKIAogCWlmIChyZWcgPj0gMHg4MCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhbGlfY29kZWNfcG9rZTogcmVnKCV4aCkgaW52YWxpZC5cbiIsIHJlZyk7CkBAIC00NDUsMjAgKzM2MiwyMiBAQAogCiAJZHdWYWwgID0gKHVuc2lnbmVkIGludCkgKHJlZyAmIDB4ZmYpOwogCWR3VmFsIHw9IDB4ODAwMCB8ICh2YWwgPDwgMTYpOwotCWlmIChzZWNvbmRhcnkpIGR3VmFsIHw9IDB4MDA4MDsKLQlpZiAoY29kZWMtPnJldmlzaW9uID09IEFMSV81NDUxX1YwMikgZHdWYWwgfD0gMHgwMTAwOworCWlmIChzZWNvbmRhcnkpCisJCWR3VmFsIHw9IDB4MDA4MDsKKwlpZiAoY29kZWMtPnJldmlzaW9uID09IEFMSV81NDUxX1YwMikKKwkJZHdWYWwgfD0gMHgwMTAwOwogCi0Jc25kX2FsaV81NDUxX3Bva2UoY29kZWMscG9ydCxkd1ZhbCk7CisJc25kX2FsaV81NDUxX3Bva2UoY29kZWMsIHBvcnQsIGR3VmFsKTsKIAogCXJldHVybiA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbmRfYWxpX2NvZGVjX3BlZWsoIHN0cnVjdCBzbmRfYWxpICpjb2RlYywKLQkJCQkJICBpbnQgc2Vjb25kYXJ5LAotCQkJCQkgIHVuc2lnbmVkIHNob3J0IHJlZykKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbmRfYWxpX2NvZGVjX3BlZWsoc3RydWN0IHNuZF9hbGkgKmNvZGVjLAorCQkJCQkgaW50IHNlY29uZGFyeSwKKwkJCQkJIHVuc2lnbmVkIHNob3J0IHJlZykKIHsKLQl1bnNpZ25lZCBpbnQgZHdWYWwgPSAwOwotCXVuc2lnbmVkIGludCBwb3J0ID0gMDsKKwl1bnNpZ25lZCBpbnQgZHdWYWw7CisJdW5zaWduZWQgaW50IHBvcnQ7CiAKIAlpZiAocmVnID49IDB4ODApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWxpX2NvZGVjX3BlZWs6IHJlZygleGgpIGludmFsaWQuXG4iLCByZWcpOwpAQCAtNDc0LDcgKzM5Myw4IEBACiAKIAlkd1ZhbCAgPSAodW5zaWduZWQgaW50KSAocmVnICYgMHhmZik7CiAJZHdWYWwgfD0gMHg4MDAwOwkJCQkvKiBiaXQgMTUqLwotCWlmIChzZWNvbmRhcnkpIGR3VmFsIHw9IDB4MDA4MDsKKwlpZiAoc2Vjb25kYXJ5KQorCQlkd1ZhbCB8PSAweDAwODA7CiAKIAlzbmRfYWxpXzU0NTFfcG9rZShjb2RlYywgcG9ydCwgZHdWYWwpOwogCkBAIC00ODMsNyArNDAzLDcgQEAKIAlpZiAoc25kX2FsaV9jb2RlY19yZWFkeShjb2RlYywgcG9ydCkgPCAwKQogCQlyZXR1cm4gfjA7CiAJCi0JcmV0dXJuIChzbmRfYWxpXzU0NTFfcGVlayhjb2RlYywgcG9ydCkgJiAweGZmZmYwMDAwKT4+MTY7CisJcmV0dXJuIChzbmRfYWxpXzU0NTFfcGVlayhjb2RlYywgcG9ydCkgJiAweGZmZmYwMDAwKSA+PiAxNjsKIH0KIAogc3RhdGljIHZvaWQgc25kX2FsaV9jb2RlY193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCkBAIC00OTMsOSArNDEzLDkgQEAKIAlzdHJ1Y3Qgc25kX2FsaSAqY29kZWMgPSBhYzk3LT5wcml2YXRlX2RhdGE7CiAKIAlzbmRfYWxpX3ByaW50aygiY29kZWNfd3JpdGU6IHJlZz0leGggZGF0YT0leGguXG4iLCByZWcsIHZhbCk7Ci0JaWYocmVnID09IEFDOTdfR1BJT19TVEFUVVMpIHsKLQkJb3V0bCgodmFsIDw8IEFMSV9BQzk3X0dQSU9fREFUQV9TSElGVCl8QUxJX0FDOTdfR1BJT19FTkFCTEUsCi0JCQlBTElfUkVHKGNvZGVjLCBBTElfQUM5N19HUElPKSk7CisJaWYgKHJlZyA9PSBBQzk3X0dQSU9fU1RBVFVTKSB7CisJCW91dGwoKHZhbCA8PCBBTElfQUM5N19HUElPX0RBVEFfU0hJRlQpIHwgQUxJX0FDOTdfR1BJT19FTkFCTEUsCisJCSAgICAgQUxJX1JFRyhjb2RlYywgQUxJX0FDOTdfR1BJTykpOwogCQlyZXR1cm47CiAJfQogCXNuZF9hbGlfY29kZWNfcG9rZShjb2RlYywgYWM5Ny0+bnVtLCByZWcsIHZhbCk7CkBAIC01MDMsMTIgKzQyMywxMyBAQAogfQogCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbmRfYWxpX2NvZGVjX3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcpCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgc25kX2FsaV9jb2RlY19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJCQkJIHVuc2lnbmVkIHNob3J0IHJlZykKIHsKIAlzdHJ1Y3Qgc25kX2FsaSAqY29kZWMgPSBhYzk3LT5wcml2YXRlX2RhdGE7CiAKIAlzbmRfYWxpX3ByaW50aygiY29kZWNfcmVhZCByZWc9JXhoLlxuIiwgcmVnKTsKLQlyZXR1cm4gKHNuZF9hbGlfY29kZWNfcGVlayhjb2RlYywgYWM5Ny0+bnVtLCByZWcpKTsKKwlyZXR1cm4gc25kX2FsaV9jb2RlY19wZWVrKGNvZGVjLCBhYzk3LT5udW0sIHJlZyk7CiB9CiAKIC8qCkBAIC01MTcsMTEgKzQzOCwxMiBAQAogCiBzdGF0aWMgaW50IHNuZF9hbGlfcmVzZXRfNTQ1MShzdHJ1Y3Qgc25kX2FsaSAqY29kZWMpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBOVUxMOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwogCXVuc2lnbmVkIHNob3J0IHdDb3VudCwgd1JlZzsKIAl1bnNpZ25lZCBpbnQgICBkd1ZhbDsKIAkKLQlpZiAoKHBjaV9kZXYgPSBjb2RlYy0+cGNpX20xNTMzKSAhPSBOVUxMKSB7CisJcGNpX2RldiA9IGNvZGVjLT5wY2lfbTE1MzM7CisJaWYgKHBjaV9kZXYpIHsKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9kZXYsIDB4N2MsICZkd1ZhbCk7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpX2RldiwgMHg3YywgZHdWYWwgfCAweDA4MDAwMDAwKTsKIAkJdWRlbGF5KDUwMDApOwpAQCAtNTQxLDcgKzQ2Myw3IEBACiAJd0NvdW50ID0gMjAwOwogCXdoaWxlKHdDb3VudC0tKSB7CiAJCXdSZWcgPSBzbmRfYWxpX2NvZGVjX3BlZWsoY29kZWMsIDAsIEFDOTdfUE9XRVJET1dOKTsKLQkJaWYoKHdSZWcgJiAweDAwMGYpID09IDB4MDAwZikKKwkJaWYgKCh3UmVnICYgMHgwMDBmKSA9PSAweDAwMGYpCiAJCQlyZXR1cm4gMDsKIAkJdWRlbGF5KDUwMDApOwogCX0KQEAgLTU1NSw4ICs0NzcsOCBAQAogCiBzdGF0aWMgaW50IHNuZF9hbGlfcmVzZXRfY29kZWMoc3RydWN0IHNuZF9hbGkgKmNvZGVjKQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKLQl1bnNpZ25lZCBjaGFyIGJWYWwgPSAwOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCXVuc2lnbmVkIGNoYXIgYlZhbDsKIAl1bnNpZ25lZCBpbnQgICBkd1ZhbDsKIAl1bnNpZ25lZCBzaG9ydCB3Q291bnQsIHdSZWc7CiAKQEAgLTU3OSw5ICs1MDEsOSBAQAogCXVkZWxheSgxNTAwMCk7CiAKIAl3Q291bnQgPSAyMDA7Ci0Jd2hpbGUod0NvdW50LS0pIHsKKwl3aGlsZSAod0NvdW50LS0pIHsKIAkJd1JlZyA9IHNuZF9hbGlfY29kZWNfcmVhZChjb2RlYy0+YWM5NywgQUM5N19QT1dFUkRPV04pOwotCQlpZigod1JlZyAmIDB4MDAwZikgPT0gMHgwMDBmKQorCQlpZiAoKHdSZWcgJiAweDAwMGYpID09IDB4MDAwZikKIAkJCXJldHVybiAwOwogCQl1ZGVsYXkoNTAwMCk7CiAJfQpAQCAtNTk0LDI1ICs1MTYsMjcgQEAKICAqICBBTEkgNTQ1MSBDb250cm9sbGVyCiAgKi8KIAotc3RhdGljIHZvaWQgc25kX2FsaV9lbmFibGVfc3BlY2lhbF9jaGFubmVsKHN0cnVjdCBzbmRfYWxpICpjb2RlYywgdW5zaWduZWQgaW50IGNoYW5uZWwpCitzdGF0aWMgdm9pZCBzbmRfYWxpX2VuYWJsZV9zcGVjaWFsX2NoYW5uZWwoc3RydWN0IHNuZF9hbGkgKmNvZGVjLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKIHsKLQl1bnNpZ25lZCBsb25nIGR3VmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGR3VmFsOwogCi0JZHdWYWwgID0gaW5sKEFMSV9SRUcoY29kZWMsQUxJX0dMT0JBTF9DT05UUk9MKSk7CisJZHdWYWwgID0gaW5sKEFMSV9SRUcoY29kZWMsIEFMSV9HTE9CQUxfQ09OVFJPTCkpOwogCWR3VmFsIHw9IDEgPDwgKGNoYW5uZWwgJiAweDAwMDAwMDFmKTsKLQlvdXRsKGR3VmFsLCBBTElfUkVHKGNvZGVjLEFMSV9HTE9CQUxfQ09OVFJPTCkpOworCW91dGwoZHdWYWwsIEFMSV9SRUcoY29kZWMsIEFMSV9HTE9CQUxfQ09OVFJPTCkpOwogfQogCi1zdGF0aWMgdm9pZCBzbmRfYWxpX2Rpc2FibGVfc3BlY2lhbF9jaGFubmVsKHN0cnVjdCBzbmRfYWxpICpjb2RlYywgdW5zaWduZWQgaW50IGNoYW5uZWwpCitzdGF0aWMgdm9pZCBzbmRfYWxpX2Rpc2FibGVfc3BlY2lhbF9jaGFubmVsKHN0cnVjdCBzbmRfYWxpICpjb2RlYywKKwkJCQkJICAgIHVuc2lnbmVkIGludCBjaGFubmVsKQogewotCXVuc2lnbmVkIGxvbmcgZHdWYWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZHdWYWw7CiAKLQlkd1ZhbCAgPSBpbmwoQUxJX1JFRyhjb2RlYyxBTElfR0xPQkFMX0NPTlRST0wpKTsKKwlkd1ZhbCAgPSBpbmwoQUxJX1JFRyhjb2RlYywgQUxJX0dMT0JBTF9DT05UUk9MKSk7CiAJZHdWYWwgJj0gfigxIDw8IChjaGFubmVsICYgMHgwMDAwMDAxZikpOwotCW91dGwoZHdWYWwsIEFMSV9SRUcoY29kZWMsQUxJX0dMT0JBTF9DT05UUk9MKSk7CisJb3V0bChkd1ZhbCwgQUxJX1JFRyhjb2RlYywgQUxJX0dMT0JBTF9DT05UUk9MKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNuZF9hbGlfZW5hYmxlX2FkZHJlc3NfaW50ZXJydXB0KHN0cnVjdCBzbmRfYWxpICogY29kZWMpCitzdGF0aWMgdm9pZCBzbmRfYWxpX2VuYWJsZV9hZGRyZXNzX2ludGVycnVwdChzdHJ1Y3Qgc25kX2FsaSAqY29kZWMpCiB7CiAJdW5zaWduZWQgaW50IGdjOwogCkBAIC02MjIsNyArNTQ2LDcgQEAKIAlvdXRsKCBnYywgQUxJX1JFRyhjb2RlYywgQUxJX0dDX0NJUikpOwogfQogCi1zdGF0aWMgdm9pZCBzbmRfYWxpX2Rpc2FibGVfYWRkcmVzc19pbnRlcnJ1cHQoc3RydWN0IHNuZF9hbGkgKiBjb2RlYykKK3N0YXRpYyB2b2lkIHNuZF9hbGlfZGlzYWJsZV9hZGRyZXNzX2ludGVycnVwdChzdHJ1Y3Qgc25kX2FsaSAqY29kZWMpCiB7CiAJdW5zaWduZWQgaW50IGdjOwogCkBAIC02MzIsOCArNTU2LDkgQEAKIAlvdXRsKGdjLCBBTElfUkVHKGNvZGVjLCBBTElfR0NfQ0lSKSk7CiB9CiAKLSNpZiAwIC8vIG5vdCB1c2VkCi1zdGF0aWMgdm9pZCBzbmRfYWxpX2VuYWJsZV92b2ljZV9pcnEoc3RydWN0IHNuZF9hbGkgKmNvZGVjLCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKKyNpZiAwIC8qIG5vdCB1c2VkICovCitzdGF0aWMgdm9pZCBzbmRfYWxpX2VuYWJsZV92b2ljZV9pcnEoc3RydWN0IHNuZF9hbGkgKmNvZGVjLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGNoYW5uZWwpCiB7CiAJdW5zaWduZWQgaW50IG1hc2s7CiAJc3RydWN0IHNuZF9hbGlfY2hhbm5lbF9jb250cm9sICpwY2hyZWdzID0gJihjb2RlYy0+Y2hyZWdzKTsKQEAgLTY0MSwxMyArNTY2LDE0IEBACiAJc25kX2FsaV9wcmludGsoImVuYWJsZV92b2ljZV9pcnEgY2hhbm5lbD0lZFxuIixjaGFubmVsKTsKIAkKIAltYXNrID0gMSA8PCAoY2hhbm5lbCAmIDB4MWYpOwotCXBjaHJlZ3MtPmRhdGEuYWludGVuICA9IGlubChBTElfUkVHKGNvZGVjLHBjaHJlZ3MtPnJlZ3MuYWludGVuKSk7CisJcGNocmVncy0+ZGF0YS5haW50ZW4gID0gaW5sKEFMSV9SRUcoY29kZWMsIHBjaHJlZ3MtPnJlZ3MuYWludGVuKSk7CiAJcGNocmVncy0+ZGF0YS5haW50ZW4gfD0gbWFzazsKLQlvdXRsKHBjaHJlZ3MtPmRhdGEuYWludGVuLEFMSV9SRUcoY29kZWMscGNocmVncy0+cmVncy5haW50ZW4pKTsKKwlvdXRsKHBjaHJlZ3MtPmRhdGEuYWludGVuLCBBTElfUkVHKGNvZGVjLCBwY2hyZWdzLT5yZWdzLmFpbnRlbikpOwogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHNuZF9hbGlfZGlzYWJsZV92b2ljZV9pcnEoc3RydWN0IHNuZF9hbGkgKmNvZGVjLCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3N0YXRpYyB2b2lkIHNuZF9hbGlfZGlzYWJsZV92b2ljZV9pcnEoc3RydWN0IHNuZF9hbGkgKmNvZGVjLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsKQogewogCXVuc2lnbmVkIGludCBtYXNrOwogCXN0cnVjdCBzbmRfYWxpX2NoYW5uZWxfY29udHJvbCAqcGNocmVncyA9ICYoY29kZWMtPmNocmVncyk7CkBAIC02NTUsOSArNTgxLDkgQEAKIAlzbmRfYWxpX3ByaW50aygiZGlzYWJsZV92b2ljZV9pcnEgY2hhbm5lbD0lZFxuIixjaGFubmVsKTsKIAogCW1hc2sgPSAxIDw8IChjaGFubmVsICYgMHgxZik7Ci0JcGNocmVncy0+ZGF0YS5haW50ZW4gID0gaW5sKEFMSV9SRUcoY29kZWMscGNocmVncy0+cmVncy5haW50ZW4pKTsKKwlwY2hyZWdzLT5kYXRhLmFpbnRlbiAgPSBpbmwoQUxJX1JFRyhjb2RlYywgcGNocmVncy0+cmVncy5haW50ZW4pKTsKIAlwY2hyZWdzLT5kYXRhLmFpbnRlbiAmPSB+bWFzazsKLQlvdXRsKHBjaHJlZ3MtPmRhdGEuYWludGVuLEFMSV9SRUcoY29kZWMscGNocmVncy0+cmVncy5haW50ZW4pKTsKKwlvdXRsKHBjaHJlZ3MtPmRhdGEuYWludGVuLCBBTElfUkVHKGNvZGVjLCBwY2hyZWdzLT5yZWdzLmFpbnRlbikpOwogfQogCiBzdGF0aWMgaW50IHNuZF9hbGlfYWxsb2NfcGNtX2NoYW5uZWwoc3RydWN0IHNuZF9hbGkgKmNvZGVjLCBpbnQgY2hhbm5lbCkKQEAgLTY2NSw3ICs1OTEsOCBAQAogCXVuc2lnbmVkIGludCBpZHggPSAgY2hhbm5lbCAmIDB4MWY7CiAKIAlpZiAoY29kZWMtPnN5bnRoLmNoY250ID49IEFMSV9DSEFOTkVMUyl7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgImFsaV9hbGxvY19wY21fY2hhbm5lbDogbm8gZnJlZSBjaGFubmVscy5cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiYWxpX2FsbG9jX3BjbV9jaGFubmVsOiBubyBmcmVlIGNoYW5uZWxzLlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTY4NSwzNSArNjEyLDQxIEBACiAKIAlzbmRfYWxpX3ByaW50aygiZmluZF9mcmVlX2NoYW5uZWw6IGZvciAlc1xuIixyZWMgPyAicmVjIiA6ICJwY20iKTsKIAotCS8vIHJlY29yZGluZworCS8qIHJlY29yZGluZyAqLwogCWlmIChyZWMpIHsKIAkJaWYgKGNvZGVjLT5zcGRpZl9zdXBwb3J0ICYmCi0JCSAgICAoaW5sKEFMSV9SRUcoY29kZWMsIEFMSV9HTE9CQUxfQ09OVFJPTCkpICYgQUxJX1NQRElGX0lOX1NVUFBPUlQpKQorCQkgICAgKGlubChBTElfUkVHKGNvZGVjLCBBTElfR0xPQkFMX0NPTlRST0wpKSAmCisJCSAgICAgQUxJX1NQRElGX0lOX1NVUFBPUlQpKQogCQkJaWR4ID0gQUxJX1NQRElGX0lOX0NIQU5ORUw7CiAJCWVsc2UKIAkJCWlkeCA9IEFMSV9QQ01fSU5fQ0hBTk5FTDsKIAotCQlpZiAoKHJlc3VsdCA9IHNuZF9hbGlfYWxsb2NfcGNtX2NoYW5uZWwoY29kZWMsaWR4KSkgPj0gMCkgeworCQlyZXN1bHQgPSBzbmRfYWxpX2FsbG9jX3BjbV9jaGFubmVsKGNvZGVjLCBpZHgpOworCQlpZiAocmVzdWx0ID49IDApCiAJCQlyZXR1cm4gcmVzdWx0OwotCQl9IGVsc2UgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWxpX2ZpbmRfZnJlZV9jaGFubmVsOiByZWNvcmQgY2hhbm5lbCBpcyBidXN5IG5vdy5cbiIpOworCQllbHNlIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImFsaV9maW5kX2ZyZWVfY2hhbm5lbDogIgorCQkJCSAgICJyZWNvcmQgY2hhbm5lbCBpcyBidXN5IG5vdy5cbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQogCi0JLy9wbGF5YmFjay4uLgorCS8qIHBsYXliYWNrLi4uICovCiAJaWYgKGNvZGVjLT5zcGRpZl9zdXBwb3J0ICYmCi0JICAgIChpbmwoQUxJX1JFRyhjb2RlYywgQUxJX0dMT0JBTF9DT05UUk9MKSkgJiBBTElfU1BESUZfT1VUX0NIX0VOQUJMRSkpIHsKKwkgICAgKGlubChBTElfUkVHKGNvZGVjLCBBTElfR0xPQkFMX0NPTlRST0wpKSAmCisJICAgICBBTElfU1BESUZfT1VUX0NIX0VOQUJMRSkpIHsKIAkJaWR4ID0gQUxJX1NQRElGX09VVF9DSEFOTkVMOwotCQlpZiAoKHJlc3VsdCA9IHNuZF9hbGlfYWxsb2NfcGNtX2NoYW5uZWwoY29kZWMsaWR4KSkgPj0gMCkgeworCQlyZXN1bHQgPSBzbmRfYWxpX2FsbG9jX3BjbV9jaGFubmVsKGNvZGVjLCBpZHgpOworCQlpZiAocmVzdWx0ID49IDApCiAJCQlyZXR1cm4gcmVzdWx0OwotCQl9IGVsc2UgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWxpX2ZpbmRfZnJlZV9jaGFubmVsOiBTL1BESUYgb3V0IGNoYW5uZWwgaXMgaW4gYnVzeSBub3cuXG4iKTsKLQkJfQorCQllbHNlCisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhbGlfZmluZF9mcmVlX2NoYW5uZWw6ICIKKwkJCQkgICAiUy9QRElGIG91dCBjaGFubmVsIGlzIGluIGJ1c3kgbm93LlxuIik7CiAJfQogCiAJZm9yIChpZHggPSAwOyBpZHggPCBBTElfQ0hBTk5FTFM7IGlkeCsrKSB7Ci0JCWlmICgocmVzdWx0ID0gc25kX2FsaV9hbGxvY19wY21fY2hhbm5lbChjb2RlYyxpZHgpKSA+PSAwKQorCQlyZXN1bHQgPSBzbmRfYWxpX2FsbG9jX3BjbV9jaGFubmVsKGNvZGVjLCBpZHgpOworCQlpZiAocmVzdWx0ID49IDApCiAJCQlyZXR1cm4gcmVzdWx0OwogCX0KIAlzbmRfcHJpbnRrKEtFUk5fRVJSICJhbGlfZmluZF9mcmVlX2NoYW5uZWw6IG5vIGZyZWUgY2hhbm5lbHMuXG4iKTsKQEAgLTczMCw3ICs2NjMsOCBAQAogCQlyZXR1cm47CiAKIAlpZiAoIShjb2RlYy0+c3ludGguY2htYXAgJiAoMSA8PCBpZHgpKSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhbGlfZnJlZV9jaGFubmVsX3BjbTogY2hhbm5lbCAlZCBpcyBub3QgaW4gdXNlLlxuIixjaGFubmVsKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWxpX2ZyZWVfY2hhbm5lbF9wY206ICIKKwkJCSAgICJjaGFubmVsICVkIGlzIG5vdCBpbiB1c2UuXG4iLCBjaGFubmVsKTsKIAkJcmV0dXJuOwogCX0gZWxzZSB7CiAJCWNvZGVjLT5zeW50aC5jaG1hcCAmPSB+KDEgPDwgaWR4KTsKQEAgLTczOCw4ICs2NzIsOCBAQAogCX0KIH0KIAotI2lmIDAgLy8gbm90IHVzZWQKLXN0YXRpYyB2b2lkIHNuZF9hbGlfc3RhcnRfdm9pY2Uoc3RydWN0IHNuZF9hbGkgKiBjb2RlYywgdW5zaWduZWQgaW50IGNoYW5uZWwpCisjaWYgMCAvKiBub3QgdXNlZCAqLworc3RhdGljIHZvaWQgc25kX2FsaV9zdGFydF92b2ljZShzdHJ1Y3Qgc25kX2FsaSAqY29kZWMsIHVuc2lnbmVkIGludCBjaGFubmVsKQogewogCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCAoY2hhbm5lbCAmIDB4MWYpOwogCQpAQCAtNzQ4LDcgKzY4Miw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgc25kX2FsaV9zdG9wX3ZvaWNlKHN0cnVjdCBzbmRfYWxpICogY29kZWMsIHVuc2lnbmVkIGludCBjaGFubmVsKQorc3RhdGljIHZvaWQgc25kX2FsaV9zdG9wX3ZvaWNlKHN0cnVjdCBzbmRfYWxpICpjb2RlYywgdW5zaWduZWQgaW50IGNoYW5uZWwpCiB7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAxIDw8IChjaGFubmVsICYgMHgxZik7CiAKQEAgLTc2OCwyNiArNzAyLDI3IEBACiAJY3VycmVudHRpbWVyID0gaW5sKEFMSV9SRUcoY29kZWMsIEFMSV9TVElNRVIpKTsKIAogCXdoaWxlIChjdXJyZW50dGltZXIgPCBiZWdpbnRpbWVyICsgaW50ZXJ2YWwpIHsKLQkJaWYoc25kX2FsaV9zdGltZXJfcmVhZHkoY29kZWMpIDwgMCkKKwkJaWYgKHNuZF9hbGlfc3RpbWVyX3JlYWR5KGNvZGVjKSA8IDApCiAJCQlicmVhazsKIAkJY3VycmVudHRpbWVyID0gaW5sKEFMSV9SRUcoY29kZWMsICBBTElfU1RJTUVSKSk7CisJCWNwdV9yZWxheCgpOwogCX0KIH0KIAogc3RhdGljIHZvaWQgc25kX2FsaV9kZXRlY3Rfc3BkaWZfcmF0ZShzdHJ1Y3Qgc25kX2FsaSAqY29kZWMpCiB7Ci0JdTE2IHd2YWwgID0gMDsKKwl1MTYgd3ZhbDsKIAl1MTYgY291bnQgPSAwOwotCXU4ICBidmFsID0gMCwgUjEgPSAwLCBSMiA9IDA7CisJdTggIGJ2YWwsIFIxID0gMCwgUjI7CiAKLQlidmFsICA9IGluYihBTElfUkVHKGNvZGVjLEFMSV9TUERJRl9DVFJMICsgMSkpOworCWJ2YWwgID0gaW5iKEFMSV9SRUcoY29kZWMsIEFMSV9TUERJRl9DVFJMICsgMSkpOwogCWJ2YWwgfD0gMHgxRjsKLQlvdXRiKGJ2YWwsQUxJX1JFRyhjb2RlYyxBTElfU1BESUZfQ1RSTCArIDEpKTsKKwlvdXRiKGJ2YWwsIEFMSV9SRUcoY29kZWMsIEFMSV9TUERJRl9DVFJMICsgMSkpOwogCi0Jd2hpbGUgKCgoUjEgPCAweDBCICl8fChSMSA+IDB4MEUpKSAmJiAoUjEgIT0gMHgxMikgJiYgY291bnQgPD0gNTAwMDApIHsKKwl3aGlsZSAoKFIxIDwgMHgwYiB8fCBSMSA+IDB4MGUpICYmIFIxICE9IDB4MTIgJiYgY291bnQgPD0gNTAwMDApIHsKIAkJY291bnQgKys7CiAJCXNuZF9hbGlfZGVsYXkoY29kZWMsIDYpOwotCQlidmFsID0gaW5iKEFMSV9SRUcoY29kZWMsQUxJX1NQRElGX0NUUkwgKyAxKSk7CisJCWJ2YWwgPSBpbmIoQUxJX1JFRyhjb2RlYywgQUxJX1NQRElGX0NUUkwgKyAxKSk7CiAJCVIxID0gYnZhbCAmIDB4MUY7CiAJfQogCkBAIC04MDEsNyArNzM2LDEwIEBACiAJCXNuZF9hbGlfZGVsYXkoY29kZWMsIDYpOwogCQlidmFsID0gaW5iKEFMSV9SRUcoY29kZWMsQUxJX1NQRElGX0NUUkwgKyAxKSk7CiAJCVIyID0gYnZhbCAmIDB4MUY7Ci0JCWlmIChSMiAhPSBSMSkgUjEgPSBSMjsgZWxzZSBicmVhazsKKwkJaWYgKFIyICE9IFIxKQorCQkJUjEgPSBSMjsKKwkJZWxzZQorCQkJYnJlYWs7CiAJfQogCiAJaWYgKGNvdW50ID4gNTAwMDApIHsKQEAgLTgxMCw0MiArNzQ4LDQ1IEBACiAJfQogCiAJaWYgKFIyID49IDB4MGIgJiYgUjIgPD0gMHgwZSkgewotCQl3dmFsICA9IGludyhBTElfUkVHKGNvZGVjLEFMSV9TUERJRl9DVFJMICsgMikpOwotCQl3dmFsICY9IDB4RTBGMDsKLQkJd3ZhbCB8PSAodTE2KTB4MDkgPDwgOCB8ICh1MTYpMHgwNTsKLQkJb3V0dyh3dmFsLEFMSV9SRUcoY29kZWMsQUxJX1NQRElGX0NUUkwgKyAyKSk7CisJCXd2YWwgID0gaW53KEFMSV9SRUcoY29kZWMsIEFMSV9TUERJRl9DVFJMICsgMikpOworCQl3dmFsICY9IDB4ZTBmMDsKKwkJd3ZhbCB8PSAoMHgwOSA8PCA4KSB8IDB4MDU7CisJCW91dHcod3ZhbCwgQUxJX1JFRyhjb2RlYywgQUxJX1NQRElGX0NUUkwgKyAyKSk7CiAKLQkJYnZhbCAgPSBpbmIoQUxJX1JFRyhjb2RlYyxBTElfU1BESUZfQ1MgKzMpKSAmIDB4RjA7Ci0JCW91dGIoYnZhbHwweDAyLEFMSV9SRUcoY29kZWMsQUxJX1NQRElGX0NTICsgMykpOworCQlidmFsICA9IGluYihBTElfUkVHKGNvZGVjLCBBTElfU1BESUZfQ1MgKyAzKSkgJiAweGYwOworCQlvdXRiKGJ2YWwgfCAweDAyLCBBTElfUkVHKGNvZGVjLCBBTElfU1BESUZfQ1MgKyAzKSk7CiAJfSBlbHNlIGlmIChSMiA9PSAweDEyKSB7Ci0JCXd2YWwgID0gaW53KEFMSV9SRUcoY29kZWMsQUxJX1NQRElGX0NUUkwgKyAyKSk7Ci0JCXd2YWwgJj0gMHhFMEYwOwotCQl3dmFsIHw9ICh1MTYpMHgwRSA8PCA4IHwgKHUxNikweDA4OwotCQlvdXR3KHd2YWwsQUxJX1JFRyhjb2RlYyxBTElfU1BESUZfQ1RSTCArIDIpKTsKKwkJd3ZhbCAgPSBpbncoQUxJX1JFRyhjb2RlYywgQUxJX1NQRElGX0NUUkwgKyAyKSk7CisJCXd2YWwgJj0gMHhlMGYwOworCQl3dmFsIHw9ICgweDBlIDw8IDgpIHwgMHgwODsKKwkJb3V0dyh3dmFsLCBBTElfUkVHKGNvZGVjLCBBTElfU1BESUZfQ1RSTCArIDIpKTsKIAotCQlidmFsICA9IGluYihBTElfUkVHKGNvZGVjLEFMSV9TUERJRl9DUyArMykpICYgMHhGMDsKLQkJb3V0YihidmFsfDB4MDMsQUxJX1JFRyhjb2RlYyxBTElfU1BESUZfQ1MgKyAzKSk7CisJCWJ2YWwgID0gaW5iKEFMSV9SRUcoY29kZWMsQUxJX1NQRElGX0NTICsgMykpICYgMHhmMDsKKwkJb3V0YihidmFsIHwgMHgwMywgQUxJX1JFRyhjb2RlYywgQUxJX1NQRElGX0NTICsgMykpOwogCX0KIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBzbmRfYWxpX2dldF9zcGRpZl9pbl9yYXRlKHN0cnVjdCBzbmRfYWxpICpjb2RlYykKIHsKLQl1MzIJZHdSYXRlID0gMDsKLQl1OAlidmFsID0gMDsKKwl1MzIJZHdSYXRlOworCXU4CWJ2YWw7CiAKLQlidmFsICA9IGluYihBTElfUkVHKGNvZGVjLEFMSV9TUERJRl9DVFJMKSk7Ci0JYnZhbCAmPSAweDdGOworCWJ2YWwgID0gaW5iKEFMSV9SRUcoY29kZWMsIEFMSV9TUERJRl9DVFJMKSk7CisJYnZhbCAmPSAweDdmOwogCWJ2YWwgfD0gMHg0MDsKLQlvdXRiKGJ2YWwsIEFMSV9SRUcoY29kZWMsQUxJX1NQRElGX0NUUkwpKTsKKwlvdXRiKGJ2YWwsIEFMSV9SRUcoY29kZWMsIEFMSV9TUERJRl9DVFJMKSk7CiAKIAlzbmRfYWxpX2RldGVjdF9zcGRpZl9yYXRlKGNvZGVjKTsKIAotCWJ2YWwgID0gaW5iKEFMSV9SRUcoY29kZWMsQUxJX1NQRElGX0NTICsgMykpOwotCWJ2YWwgJj0gMHgwRjsKKwlidmFsICA9IGluYihBTElfUkVHKGNvZGVjLCBBTElfU1BESUZfQ1MgKyAzKSk7CisJYnZhbCAmPSAweDBmOwogCi0JaWYgKGJ2YWwgPT0gMCkgZHdSYXRlID0gNDQxMDA7Ci0JaWYgKGJ2YWwgPT0gMSkgZHdSYXRlID0gNDgwMDA7Ci0JaWYgKGJ2YWwgPT0gMikgZHdSYXRlID0gMzIwMDA7CisJc3dpdGNoIChidmFsKSB7CisJY2FzZSAwOiBkd1JhdGUgPSA0NDEwMDsgYnJlYWs7CisJY2FzZSAxOiBkd1JhdGUgPSA0ODAwMDsgYnJlYWs7CisJY2FzZSAyOiBkd1JhdGUgPSAzMjAwMDsgYnJlYWs7CisJZGVmYXVsdDogZHdSYXRlID0gMDsgYnJlYWs7CisJfQogCiAJcmV0dXJuIGR3UmF0ZTsKIH0KQEAgLTg4MCwyMCArODIxLDIyIEBACiBzdGF0aWMgdm9pZCBzbmRfYWxpX3NldF9zcGRpZl9vdXRfcmF0ZShzdHJ1Y3Qgc25kX2FsaSAqY29kZWMsIHVuc2lnbmVkIGludCByYXRlKQogewogCXVuc2lnbmVkIGNoYXIgIGJWYWw7Ci0JdW5zaWduZWQgaW50ICBkd1JhdGUgPSAwOworCXVuc2lnbmVkIGludCAgZHdSYXRlOwogCQotCWlmIChyYXRlID09IDMyMDAwKSBkd1JhdGUgPSAweDMwMDsKLQlpZiAocmF0ZSA9PSA0NDEwMCkgZHdSYXRlID0gMDsKLQlpZiAocmF0ZSA9PSA0ODAwMCkgZHdSYXRlID0gMHgyMDA7CisJc3dpdGNoIChyYXRlKSB7CisJY2FzZSAzMjAwMDogZHdSYXRlID0gMHgzMDA7IGJyZWFrOworCWNhc2UgNDgwMDA6IGR3UmF0ZSA9IDB4MjAwOyBicmVhazsKKwlkZWZhdWx0OiBkd1JhdGUgPSAwOyBicmVhazsKKwl9CiAJCiAJYlZhbCAgPSBpbmIoQUxJX1JFRyhjb2RlYywgQUxJX1NQRElGX0NUUkwpKTsKIAliVmFsICY9ICh1bnNpZ25lZCBjaGFyKSh+KDE8PDYpKTsKIAkKLQliVmFsIHw9IDB4ODA7CQkvL3NlbGVjdCByaWdodAorCWJWYWwgfD0gMHg4MDsJCS8qIHNlbGVjdCByaWdodCAqLwogCW91dGIoYlZhbCwgQUxJX1JFRyhjb2RlYywgQUxJX1NQRElGX0NUUkwpKTsKIAlvdXRiKGR3UmF0ZSB8IDB4MjAsIEFMSV9SRUcoY29kZWMsIEFMSV9TUERJRl9DUyArIDIpKTsKIAkKLQliVmFsICY9ICh+MHg4MCk7CS8vc2VsZWN0IGxlZnQKKwliVmFsICY9IH4weDgwOwkvKiBzZWxlY3QgbGVmdCAqLwogCW91dGIoYlZhbCwgQUxJX1JFRyhjb2RlYywgQUxJX1NQRElGX0NUUkwpKTsKIAlvdXR3KHJhdGUgfCAweDEwLCBBTElfUkVHKGNvZGVjLCBBTElfU1BESUZfQ1MgKyAyKSk7CiB9CkBAIC05MDIsOCArODQ1LDcgQEAKIHsKIAl1bnNpZ25lZCBzaG9ydCB3VmFsOwogCXVuc2lnbmVkIGNoYXIgYlZhbDsKLQotICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwogCiAgICAgICAgIHBjaV9kZXYgPSBjb2RlYy0+cGNpX20xNTMzOwogICAgICAgICBpZiAocGNpX2RldiA9PSBOVUxMKQpAQCAtOTI2LDE3ICs4NjgsMTUgQEAKIAliVmFsID0gaW5iKEFMSV9SRUcoY29kZWMsIEFMSV9TUERJRl9DVFJMKSk7CiAJb3V0YihiVmFsICYgQUxJX1NQRElGX09VVF9DSF9TVEFUVVMsIEFMSV9SRUcoY29kZWMsIEFMSV9TUERJRl9DVFJMKSk7CiAgICAKLQl7Ci0gICAJCXdWYWwgPSBpbncoQUxJX1JFRyhjb2RlYywgQUxJX0dMT0JBTF9DT05UUk9MKSk7Ci0gICAJCXdWYWwgfD0gQUxJX1NQRElGX09VVF9TRUxfUENNOwotICAgCQlvdXR3KHdWYWwsIEFMSV9SRUcoY29kZWMsIEFMSV9HTE9CQUxfQ09OVFJPTCkpOwotCQlzbmRfYWxpX2Rpc2FibGVfc3BlY2lhbF9jaGFubmVsKGNvZGVjLEFMSV9TUERJRl9PVVRfQ0hBTk5FTCk7Ci0gICAJfQorCXdWYWwgPSBpbncoQUxJX1JFRyhjb2RlYywgQUxJX0dMT0JBTF9DT05UUk9MKSk7CisJd1ZhbCB8PSBBTElfU1BESUZfT1VUX1NFTF9QQ007CisJb3V0dyh3VmFsLCBBTElfUkVHKGNvZGVjLCBBTElfR0xPQkFMX0NPTlRST0wpKTsKKwlzbmRfYWxpX2Rpc2FibGVfc3BlY2lhbF9jaGFubmVsKGNvZGVjLCBBTElfU1BESUZfT1VUX0NIQU5ORUwpOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfYWxpX2VuYWJsZV9zcGRpZl9jaG5vdXQoc3RydWN0IHNuZF9hbGkgKmNvZGVjKQogewotCXVuc2lnbmVkIHNob3J0IHdWYWwgPSAwOworCXVuc2lnbmVkIHNob3J0IHdWYWw7CiAKIAl3VmFsICA9IGludyhBTElfUkVHKGNvZGVjLCBBTElfR0xPQkFMX0NPTlRST0wpKTsKICAgIAl3VmFsICY9IH5BTElfU1BESUZfT1VUX1NFTF9QQ007CkBAIC05NDksMTIgKzg4OSwxMyBAQAogCQl3VmFsICY9ICh+MHgwMDAyKTsKICAgIAlvdXR3KHdWYWwsIEFMSV9SRUcoY29kZWMsIEFMSV9TUERJRl9DUykpOwogKi8KLQlzbmRfYWxpX2VuYWJsZV9zcGVjaWFsX2NoYW5uZWwoY29kZWMsQUxJX1NQRElGX09VVF9DSEFOTkVMKTsKKwlzbmRfYWxpX2VuYWJsZV9zcGVjaWFsX2NoYW5uZWwoY29kZWMsIEFMSV9TUERJRl9PVVRfQ0hBTk5FTCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF9hbGlfZGlzYWJsZV9zcGRpZl9jaG5vdXQoc3RydWN0IHNuZF9hbGkgKmNvZGVjKQogewotCXVuc2lnbmVkIHNob3J0IHdWYWwgPSAwOworCXVuc2lnbmVkIHNob3J0IHdWYWw7CisKICAgCXdWYWwgID0gaW53KEFMSV9SRUcoY29kZWMsIEFMSV9HTE9CQUxfQ09OVFJPTCkpOwogICAgCXdWYWwgfD0gQUxJX1NQRElGX09VVF9TRUxfUENNOwogICAgCW91dHcod1ZhbCwgQUxJX1JFRyhjb2RlYywgQUxJX0dMT0JBTF9DT05UUk9MKSk7CkBAIC05NzIsMTEgKzkxMywxMSBAQAogCXNuZF9hbGlfZGlzYWJsZV9zcGRpZl9jaG5vdXQoY29kZWMpOwogfQogCi1zdGF0aWMgdm9pZCBzbmRfYWxpX3VwZGF0ZV9wdHIoc3RydWN0IHNuZF9hbGkgKmNvZGVjLGludCBjaGFubmVsKQorc3RhdGljIHZvaWQgc25kX2FsaV91cGRhdGVfcHRyKHN0cnVjdCBzbmRfYWxpICpjb2RlYywgaW50IGNoYW5uZWwpCiB7Ci0Jc3RydWN0IHNuZF9hbGlfdm9pY2UgKnB2b2ljZSA9IE5VTEw7CisJc3RydWN0IHNuZF9hbGlfdm9pY2UgKnB2b2ljZTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXN0cnVjdCBzbmRfYWxpX2NoYW5uZWxfY29udHJvbCAqcGNocmVncyA9IE5VTEw7CisJc3RydWN0IHNuZF9hbGlfY2hhbm5lbF9jb250cm9sICpwY2hyZWdzOwogCXVuc2lnbmVkIGludCBvbGQsIG1hc2s7CiAjaWZkZWYgQUxJX0RFQlVHCiAJdW5zaWduZWQgaW50IHRlbXAsIGNzcGY7CkBAIC05ODQsOSArOTI1LDkgQEAKIAogCXBjaHJlZ3MgPSAmKGNvZGVjLT5jaHJlZ3MpOwogCi0JLy8gY2hlY2sgaWYgaW50ZXJydXB0IG9jY3VycmVkIGZvciBjaGFubmVsCisJLyogY2hlY2sgaWYgaW50ZXJydXB0IG9jY3VycmVkIGZvciBjaGFubmVsICovCiAJb2xkICA9IHBjaHJlZ3MtPmRhdGEuYWludDsKLQltYXNrID0gKCh1bnNpZ25lZCBpbnQpIDFMKSA8PCAoY2hhbm5lbCAmIDB4MWYpOworCW1hc2sgPSAxVSA8PCAoY2hhbm5lbCAmIDB4MWYpOwogCiAJaWYgKCEob2xkICYgbWFzaykpCiAJCXJldHVybjsKQEAgLTEwMDUsNyArOTQ2LDggQEAKIAkJY3NwZiA9IChpbmwoQUxJX1JFRyhjb2RlYywgQUxJX0NTUEYpKSAmIG1hc2spID09IG1hc2s7CiAjZW5kaWYKIAkJaWYgKHB2b2ljZS0+cnVubmluZykgewotCQkJc25kX2FsaV9wcmludGsoInVwZGF0ZV9wdHI6IGNzbz0lNC40eCBjc3BmPSVkLlxuIiwodTE2KXRlbXAsY3NwZik7CisJCQlzbmRfYWxpX3ByaW50aygidXBkYXRlX3B0cjogY3NvPSU0LjR4IGNzcGY9JWQuXG4iLAorCQkJCSAgICAgICAodTE2KXRlbXAsIGNzcGYpOwogCQkJc3Bpbl91bmxvY2soJmNvZGVjLT5yZWdfbG9jayk7CiAJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHB2b2ljZS0+c3Vic3RyZWFtKTsKIAkJCXNwaW5fbG9jaygmY29kZWMtPnJlZ19sb2NrKTsKQEAgLTEwMjcsNDkgKzk2OSw0NyBAQAogCXBjaHJlZ3MtPmRhdGEuYWludCA9IG9sZCAmICh+bWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIHNuZF9hbGlfaW50ZXJydXB0KHN0cnVjdCBzbmRfYWxpICogY29kZWMpCi17Ci0JaW50IGNoYW5uZWw7Ci0JdW5zaWduZWQgaW50IGF1ZGlvX2ludDsKLQlzdHJ1Y3Qgc25kX2FsaV9jaGFubmVsX2NvbnRyb2wgKnBjaHJlZ3MgPSBOVUxMOwotCXBjaHJlZ3MgPSAmKGNvZGVjLT5jaHJlZ3MpOwotCi0JYXVkaW9faW50ID0gaW5sKEFMSV9SRUcoY29kZWMsIEFMSV9NSVNDSU5UKSk7Ci0JaWYgKGF1ZGlvX2ludCAmIEFERFJFU1NfSVJRKSB7Ci0JCS8vIGdldCBpbnRlcnJ1cHQgc3RhdHVzIGZvciBhbGwgY2hhbm5lbHMKLQkJcGNocmVncy0+ZGF0YS5haW50ID0gaW5sKEFMSV9SRUcoY29kZWMscGNocmVncy0+cmVncy5haW50KSk7Ci0JCWZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBBTElfQ0hBTk5FTFM7IGNoYW5uZWwrKykgewotCQkJc25kX2FsaV91cGRhdGVfcHRyKGNvZGVjLCBjaGFubmVsKTsKLQkJfQotCX0KLQlvdXRsKChUQVJHRVRfUkVBQ0hFRCB8IE1JWEVSX09WRVJGTE9XIHwgTUlYRVJfVU5ERVJGTE9XKSwKLQkJQUxJX1JFRyhjb2RlYyxBTElfTUlTQ0lOVCkpOwotfQotCi0KIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfYWxpX2NhcmRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3Qgc25kX2FsaSAJKmNvZGVjID0gZGV2X2lkOworCWludCBjaGFubmVsOworCXVuc2lnbmVkIGludCBhdWRpb19pbnQ7CisJc3RydWN0IHNuZF9hbGlfY2hhbm5lbF9jb250cm9sICpwY2hyZWdzOwogCi0JaWYgKGNvZGVjID09IE5VTEwpCisJaWYgKGNvZGVjID09IE5VTEwgfHwgIWNvZGVjLT5od19pbml0aWFsaXplZCkKIAkJcmV0dXJuIElSUV9OT05FOwotCXNuZF9hbGlfaW50ZXJydXB0KGNvZGVjKTsKKworCWF1ZGlvX2ludCA9IGlubChBTElfUkVHKGNvZGVjLCBBTElfTUlTQ0lOVCkpOworCWlmICghYXVkaW9faW50KQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlwY2hyZWdzID0gJihjb2RlYy0+Y2hyZWdzKTsKKwlpZiAoYXVkaW9faW50ICYgQUREUkVTU19JUlEpIHsKKwkJLyogZ2V0IGludGVycnVwdCBzdGF0dXMgZm9yIGFsbCBjaGFubmVscyAqLworCQlwY2hyZWdzLT5kYXRhLmFpbnQgPSBpbmwoQUxJX1JFRyhjb2RlYywgcGNocmVncy0+cmVncy5haW50KSk7CisJCWZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBBTElfQ0hBTk5FTFM7IGNoYW5uZWwrKykKKwkJCXNuZF9hbGlfdXBkYXRlX3B0cihjb2RlYywgY2hhbm5lbCk7CisJfQorCW91dGwoKFRBUkdFVF9SRUFDSEVEIHwgTUlYRVJfT1ZFUkZMT1cgfCBNSVhFUl9VTkRFUkZMT1cpLAorCQlBTElfUkVHKGNvZGVjLCBBTElfTUlTQ0lOVCkpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2FsaV92b2ljZSAqc25kX2FsaV9hbGxvY192b2ljZShzdHJ1Y3Qgc25kX2FsaSAqIGNvZGVjLCBpbnQgdHlwZSwgaW50IHJlYywgaW50IGNoYW5uZWwpCitzdGF0aWMgc3RydWN0IHNuZF9hbGlfdm9pY2UgKnNuZF9hbGlfYWxsb2Nfdm9pY2Uoc3RydWN0IHNuZF9hbGkgKiBjb2RlYywKKwkJCQkJCSBpbnQgdHlwZSwgaW50IHJlYywgaW50IGNoYW5uZWwpCiB7Ci0Jc3RydWN0IHNuZF9hbGlfdm9pY2UgKnB2b2ljZSA9IE5VTEw7CisJc3RydWN0IHNuZF9hbGlfdm9pY2UgKnB2b2ljZTsKIAlpbnQgaWR4OwogCi0Jc25kX2FsaV9wcmludGsoImFsbG9jX3ZvaWNlOiB0eXBlPSVkIHJlYz0lZFxuIix0eXBlLHJlYyk7CisJc25kX2FsaV9wcmludGsoImFsbG9jX3ZvaWNlOiB0eXBlPSVkIHJlYz0lZFxuIiwgdHlwZSwgcmVjKTsKIAogCXNwaW5fbG9ja19pcnEoJmNvZGVjLT52b2ljZV9hbGxvYyk7CiAJaWYgKHR5cGUgPT0gU05EUlZfQUxJX1ZPSUNFX1RZUEVfUENNKSB7CiAJCWlkeCA9IGNoYW5uZWwgPiAwID8gc25kX2FsaV9hbGxvY19wY21fY2hhbm5lbChjb2RlYywgY2hhbm5lbCkgOgogCQkJc25kX2FsaV9maW5kX2ZyZWVfY2hhbm5lbChjb2RlYyxyZWMpOwotCQlpZihpZHggPCAwKSB7CisJCWlmIChpZHggPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhbGlfYWxsb2Nfdm9pY2U6IGVyci5cbiIpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZjb2RlYy0+dm9pY2VfYWxsb2MpOwogCQkJcmV0dXJuIE5VTEw7CkBAIC0xMDg3LDcgKzEwMjcsOCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHNuZF9hbGlfZnJlZV92b2ljZShzdHJ1Y3Qgc25kX2FsaSAqIGNvZGVjLCBzdHJ1Y3Qgc25kX2FsaV92b2ljZSAqcHZvaWNlKQorc3RhdGljIHZvaWQgc25kX2FsaV9mcmVlX3ZvaWNlKHN0cnVjdCBzbmRfYWxpICogY29kZWMsCisJCQkgICAgICAgc3RydWN0IHNuZF9hbGlfdm9pY2UgKnB2b2ljZSkKIHsKIAl2b2lkICgqcHJpdmF0ZV9mcmVlKSh2b2lkICopOwogCXZvaWQgKnByaXZhdGVfZGF0YTsKQEAgLTExMDEsOSArMTA0Miw4IEBACiAJcHJpdmF0ZV9kYXRhID0gcHZvaWNlLT5wcml2YXRlX2RhdGE7CiAJcHZvaWNlLT5wcml2YXRlX2ZyZWUgPSBOVUxMOwogCXB2b2ljZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQlpZiAocHZvaWNlLT5wY20pIHsKKwlpZiAocHZvaWNlLT5wY20pCiAJCXNuZF9hbGlfZnJlZV9jaGFubmVsX3BjbShjb2RlYywgcHZvaWNlLT5udW1iZXIpOwotCX0KIAlwdm9pY2UtPnVzZSA9IHB2b2ljZS0+cGNtID0gcHZvaWNlLT5zeW50aCA9IDA7CiAJcHZvaWNlLT5zdWJzdHJlYW0gPSBOVUxMOwogCXNwaW5fdW5sb2NrX2lycSgmY29kZWMtPnZvaWNlX2FsbG9jKTsKQEAgLTExMTIsOSArMTA1Miw5IEBACiB9CiAKIAotc3RhdGljIHZvaWQgc25kX2FsaV9jbGVhcl92b2ljZXMoc3RydWN0IHNuZF9hbGkgKiBjb2RlYywKLQkJCSAgdW5zaWduZWQgaW50IHZfbWluLAotCQkJICB1bnNpZ25lZCBpbnQgdl9tYXgpCitzdGF0aWMgdm9pZCBzbmRfYWxpX2NsZWFyX3ZvaWNlcyhzdHJ1Y3Qgc25kX2FsaSAqY29kZWMsCisJCQkJIHVuc2lnbmVkIGludCB2X21pbiwKKwkJCQkgdW5zaWduZWQgaW50IHZfbWF4KQogewogCXVuc2lnbmVkIGludCBpOwogCkBAIC0xMTI0LDcgKzEwNjQsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc25kX2FsaV93cml0ZV92b2ljZV9yZWdzKHN0cnVjdCBzbmRfYWxpICogY29kZWMsCitzdGF0aWMgdm9pZCBzbmRfYWxpX3dyaXRlX3ZvaWNlX3JlZ3Moc3RydWN0IHNuZF9hbGkgKmNvZGVjLAogCQkJIHVuc2lnbmVkIGludCBDaGFubmVsLAogCQkJIHVuc2lnbmVkIGludCBMQkEsCiAJCQkgdW5zaWduZWQgaW50IENTTywKQEAgLTExMzksNyArMTA3OSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGN0bGNtZHNbNF07CiAJCi0Jb3V0YigodW5zaWduZWQgY2hhcikoQ2hhbm5lbCAmIDB4MDAxZiksQUxJX1JFRyhjb2RlYyxBTElfR0NfQ0lSKSk7CisJb3V0YigodW5zaWduZWQgY2hhcikoQ2hhbm5lbCAmIDB4MDAxZiksIEFMSV9SRUcoY29kZWMsIEFMSV9HQ19DSVIpKTsKIAogCWN0bGNtZHNbMF0gPSAgKENTTyA8PCAxNikgfCAoQUxQSEFfRk1TICYgMHgwMDAwZmZmZik7CiAJY3RsY21kc1sxXSA9ICBMQkE7CkBAIC0xMTUyLDEwICsxMDkyLDEwIEBACiAKIAlvdXRiKENoYW5uZWwsIEFMSV9SRUcoY29kZWMsIEFMSV9HQ19DSVIpKTsKIAotCW91dGwoY3RsY21kc1swXSwgQUxJX1JFRyhjb2RlYyxBTElfQ1NPX0FMUEhBX0ZNUykpOwotCW91dGwoY3RsY21kc1sxXSwgQUxJX1JFRyhjb2RlYyxBTElfTEJBKSk7Ci0Jb3V0bChjdGxjbWRzWzJdLCBBTElfUkVHKGNvZGVjLEFMSV9FU09fREVMVEEpKTsKLQlvdXRsKGN0bGNtZHNbM10sIEFMSV9SRUcoY29kZWMsQUxJX0dWU0VMX1BBTl9WT0NfQ1RSTF9FQykpOworCW91dGwoY3RsY21kc1swXSwgQUxJX1JFRyhjb2RlYywgQUxJX0NTT19BTFBIQV9GTVMpKTsKKwlvdXRsKGN0bGNtZHNbMV0sIEFMSV9SRUcoY29kZWMsIEFMSV9MQkEpKTsKKwlvdXRsKGN0bGNtZHNbMl0sIEFMSV9SRUcoY29kZWMsIEFMSV9FU09fREVMVEEpKTsKKwlvdXRsKGN0bGNtZHNbM10sIEFMSV9SRUcoY29kZWMsIEFMSV9HVlNFTF9QQU5fVk9DX0NUUkxfRUMpKTsKIAogCW91dGwoMHgzMDAwMDAwMCwgQUxJX1JFRyhjb2RlYywgQUxJX0VCVUYxKSk7CS8qIFN0aWxsIE1vZGUgKi8KIAlvdXRsKDB4MzAwMDAwMDAsIEFMSV9SRUcoY29kZWMsIEFMSV9FQlVGMikpOwkvKiBTdGlsbCBNb2RlICovCkBAIC0xMTY1LDggKzExMDUsMTAgQEAKIHsKIAl1bnNpZ25lZCBpbnQgZGVsdGE7CiAKLQlpZiAocmF0ZSA8IDQwMDApICByYXRlID0gNDAwMDsKLQlpZiAocmF0ZSA+IDQ4MDAwKSByYXRlID0gNDgwMDA7CisJaWYgKHJhdGUgPCA0MDAwKQorCQlyYXRlID0gNDAwMDsKKwlpZiAocmF0ZSA+IDQ4MDAwKQorCQlyYXRlID0gNDgwMDA7CiAKIAlpZiAocmVjKSB7CiAJCWlmIChyYXRlID09IDQ0MTAwKQpAQCAtMTIwMSwxMSArMTE0MywxMSBAQAogCSAqLwogCUNUUkwgPSAweDAwMDAwMDAxOwogCWlmIChzbmRfcGNtX2Zvcm1hdF93aWR0aChydW50aW1lLT5mb3JtYXQpID09IDE2KQotCQlDVFJMIHw9IDB4MDAwMDAwMDg7CS8vIDE2LWJpdCBkYXRhCisJCUNUUkwgfD0gMHgwMDAwMDAwODsJLyogMTYtYml0IGRhdGEgKi8KIAlpZiAoIXNuZF9wY21fZm9ybWF0X3Vuc2lnbmVkKHJ1bnRpbWUtPmZvcm1hdCkpCi0JCUNUUkwgfD0gMHgwMDAwMDAwMjsJLy8gc2lnbmVkIGRhdGEKKwkJQ1RSTCB8PSAweDAwMDAwMDAyOwkvKiBzaWduZWQgZGF0YSAqLwogCWlmIChydW50aW1lLT5jaGFubmVscyA+IDEpCi0JCUNUUkwgfD0gMHgwMDAwMDAwNDsJLy8gc3RlcmVvIGRhdGEKKwkJQ1RSTCB8PSAweDAwMDAwMDA0OwkvKiBzdGVyZW8gZGF0YSAqLwogCXJldHVybiBDVFJMOwogfQogCkBAIC0xMjEzLDQ1ICsxMTU1LDM5IEBACiAgKiAgUENNIHBhcnQKICAqLwogCi1zdGF0aWMgaW50IHNuZF9hbGlfaW9jdGwoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHNuZF9wY21fbGliX2lvY3RsKHN1YnN0cmVhbSwgY21kLCBhcmcpOwotfQotCiBzdGF0aWMgaW50IHNuZF9hbGlfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgICAgICBpbnQgY21kKQogCQkJCSAgICAKIHsKIAlzdHJ1Y3Qgc25kX2FsaSAqY29kZWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKIAl1bnNpZ25lZCBpbnQgd2hhdCwgd2hhdGksIGNhcHR1cmVfZmxhZzsKLQlzdHJ1Y3Qgc25kX2FsaV92b2ljZSAqcHZvaWNlID0gTlVMTCwgKmV2b2ljZSA9IE5VTEw7CisJc3RydWN0IHNuZF9hbGlfdm9pY2UgKnB2b2ljZSwgKmV2b2ljZTsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCWludCBkb19zdGFydDsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKLQkJZG9fc3RhcnQgPSAxOyBicmVhazsKKwkJZG9fc3RhcnQgPSAxOworCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotCQlkb19zdGFydCA9IDA7IGJyZWFrOworCQlkb19zdGFydCA9IDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXdoYXQgPSB3aGF0aSA9IGNhcHR1cmVfZmxhZyA9IDA7Ci0Jc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnN0cmVhbSkgewotCQlzID0gc25kX3BjbV9ncm91cF9zdWJzdHJlYW1fZW50cnkocG9zKTsKKwlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQlpZiAoKHN0cnVjdCBzbmRfYWxpICopIHNuZF9wY21fc3Vic3RyZWFtX2NoaXAocykgPT0gY29kZWMpIHsKIAkJCXB2b2ljZSA9IHMtPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAkJCWV2b2ljZSA9IHB2b2ljZS0+ZXh0cmE7CiAJCQl3aGF0IHw9IDEgPDwgKHB2b2ljZS0+bnVtYmVyICYgMHgxZik7Ci0JCQlpZiAoZXZvaWNlID09IE5VTEwpIHsKKwkJCWlmIChldm9pY2UgPT0gTlVMTCkKIAkJCQl3aGF0aSB8PSAxIDw8IChwdm9pY2UtPm51bWJlciAmIDB4MWYpOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UgewogCQkJCXdoYXRpIHw9IDEgPDwgKGV2b2ljZS0+bnVtYmVyICYgMHgxZik7CiAJCQkJd2hhdCB8PSAxIDw8IChldm9pY2UtPm51bWJlciAmIDB4MWYpOwogCQkJfQpAQCAtMTI3MCw0OCArMTIwNiw1MSBAQAogCQl9CiAJfQogCXNwaW5fbG9jaygmY29kZWMtPnJlZ19sb2NrKTsKLQlpZiAoISBkb19zdGFydCkgeworCWlmICghZG9fc3RhcnQpCiAJCW91dGwod2hhdCwgQUxJX1JFRyhjb2RlYywgQUxJX1NUT1ApKTsKLQl9CiAJdmFsID0gaW5sKEFMSV9SRUcoY29kZWMsIEFMSV9BSU5URU4pKTsKLQlpZiAoZG9fc3RhcnQpIHsKKwlpZiAoZG9fc3RhcnQpCiAJCXZhbCB8PSB3aGF0aTsKLQl9IGVsc2UgeworCWVsc2UKIAkJdmFsICY9IH53aGF0aTsKLQl9CiAJb3V0bCh2YWwsIEFMSV9SRUcoY29kZWMsIEFMSV9BSU5URU4pKTsKLQlpZiAoZG9fc3RhcnQpIHsKKwlpZiAoZG9fc3RhcnQpCiAJCW91dGwod2hhdCwgQUxJX1JFRyhjb2RlYywgQUxJX1NUQVJUKSk7Ci0JfQotCXNuZF9hbGlfcHJpbnRrKCJ0cmlnZ2VyOiB3aGF0PSV4aCB3aGF0aT0leGhcbiIsd2hhdCx3aGF0aSk7CisJc25kX2FsaV9wcmludGsoInRyaWdnZXI6IHdoYXQ9JXhoIHdoYXRpPSV4aFxuIiwgd2hhdCwgd2hhdGkpOwogCXNwaW5fdW5sb2NrKCZjb2RlYy0+cmVnX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX2FsaV9wbGF5YmFja19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQorCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogewogCXN0cnVjdCBzbmRfYWxpICpjb2RlYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzbmRfYWxpX3ZvaWNlICpwdm9pY2UgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9hbGlfdm9pY2UgKmV2b2ljZSA9IHB2b2ljZS0+ZXh0cmE7CiAJaW50IGVycjsKLQllcnIgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwotCWlmIChlcnIgPCAwKSByZXR1cm4gZXJyOworCisJZXJyID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCQkgICAgICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAkKIAkvKiB2b2ljZSBtYW5hZ2VtZW50ICovCiAKLQlpZiAocGFyYW1zX2J1ZmZlcl9zaXplKGh3X3BhcmFtcykvMiAhPSBwYXJhbXNfcGVyaW9kX3NpemUoaHdfcGFyYW1zKSkgewotCQlpZiAoZXZvaWNlID09IE5VTEwpIHsKLQkJCWV2b2ljZSA9IHNuZF9hbGlfYWxsb2Nfdm9pY2UoY29kZWMsIFNORFJWX0FMSV9WT0lDRV9UWVBFX1BDTSwgMCwgLTEpOwotCQkJaWYgKGV2b2ljZSA9PSBOVUxMKQorCWlmIChwYXJhbXNfYnVmZmVyX3NpemUoaHdfcGFyYW1zKSAvIDIgIT0KKwkgICAgcGFyYW1zX3BlcmlvZF9zaXplKGh3X3BhcmFtcykpIHsKKwkJaWYgKCFldm9pY2UpIHsKKwkJCWV2b2ljZSA9IHNuZF9hbGlfYWxsb2Nfdm9pY2UoY29kZWMsCisJCQkJCQkgICAgIFNORFJWX0FMSV9WT0lDRV9UWVBFX1BDTSwKKwkJCQkJCSAgICAgMCwgLTEpOworCQkJaWYgKCFldm9pY2UpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQlwdm9pY2UtPmV4dHJhID0gZXZvaWNlOwogCQkJZXZvaWNlLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoZXZvaWNlICE9IE5VTEwpIHsKKwkJaWYgKGV2b2ljZSkgewogCQkJc25kX2FsaV9mcmVlX3ZvaWNlKGNvZGVjLCBldm9pY2UpOwogCQkJcHZvaWNlLT5leHRyYSA9IGV2b2ljZSA9IE5VTEw7CiAJCX0KQEAgLTEzMjgsNyArMTI2Nyw3IEBACiAJc3RydWN0IHNuZF9hbGlfdm9pY2UgKmV2b2ljZSA9IHB2b2ljZSA/IHB2b2ljZS0+ZXh0cmEgOiBOVUxMOwogCiAJc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwotCWlmIChldm9pY2UgIT0gTlVMTCkgeworCWlmIChldm9pY2UpIHsKIAkJc25kX2FsaV9mcmVlX3ZvaWNlKGNvZGVjLCBldm9pY2UpOwogCQlwdm9pY2UtPmV4dHJhID0gTlVMTDsKIAl9CkBAIC0xMzM2LDkgKzEyNzUsMTAgQEAKIH0KIAogc3RhdGljIGludCBzbmRfYWxpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCisJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogewotCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogfQogCiBzdGF0aWMgaW50IHNuZF9hbGlfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKQEAgLTEzNjksMTIgKzEzMDksMTMgQEAKIAkvKiBzZXQgRGVsdGEgKHJhdGUpIHZhbHVlICovCiAJRGVsdGEgPSBzbmRfYWxpX2NvbnZlcnRfcmF0ZShydW50aW1lLT5yYXRlLCAwKTsKIAotCWlmICgocHZvaWNlLT5udW1iZXIgPT0gQUxJX1NQRElGX0lOX0NIQU5ORUwpIHx8IAotCSAgICAocHZvaWNlLT5udW1iZXIgPT0gQUxJX1BDTV9JTl9DSEFOTkVMKSkKKwlpZiAocHZvaWNlLT5udW1iZXIgPT0gQUxJX1NQRElGX0lOX0NIQU5ORUwgfHwgCisJICAgIHB2b2ljZS0+bnVtYmVyID09IEFMSV9QQ01fSU5fQ0hBTk5FTCkKIAkJc25kX2FsaV9kaXNhYmxlX3NwZWNpYWxfY2hhbm5lbChjb2RlYywgcHZvaWNlLT5udW1iZXIpOwogCWVsc2UgaWYgKGNvZGVjLT5zcGRpZl9zdXBwb3J0ICYmCi0JCSAoaW5sKEFMSV9SRUcoY29kZWMsIEFMSV9HTE9CQUxfQ09OVFJPTCkpICYgQUxJX1NQRElGX09VVF9DSF9FTkFCTEUpCi0JCSAmJiAocHZvaWNlLT5udW1iZXIgPT0gQUxJX1NQRElGX09VVF9DSEFOTkVMKSkgeworCQkgKGlubChBTElfUkVHKGNvZGVjLCBBTElfR0xPQkFMX0NPTlRST0wpKSAmCisJCSAgQUxJX1NQRElGX09VVF9DSF9FTkFCTEUpCisJCSAmJiBwdm9pY2UtPm51bWJlciA9PSBBTElfU1BESUZfT1VUX0NIQU5ORUwpIHsKIAkJc25kX2FsaV9zZXRfc3BkaWZfb3V0X3JhdGUoY29kZWMsIHJ1bnRpbWUtPnJhdGUpOwogCQlEZWx0YSA9IDB4MTAwMDsKIAl9CkBAIC0xMzg4LDcgKzEzMjksOCBAQAogCS8qIHNldCB0YXJnZXQgRVNPIGZvciBjaGFubmVsICovCiAJcHZvaWNlLT5lc28gPSBydW50aW1lLT5idWZmZXJfc2l6ZTsgCiAKLQlzbmRfYWxpX3ByaW50aygicGxheWJhY2tfcHJlcGFyZTogZXNvPSV4aCBjb3VudD0leGhcbiIscHZvaWNlLT5lc28scHZvaWNlLT5jb3VudCk7CisJc25kX2FsaV9wcmludGsoInBsYXliYWNrX3ByZXBhcmU6IGVzbz0leGggY291bnQ9JXhoXG4iLAorCQkgICAgICAgcHZvaWNlLT5lc28sIHB2b2ljZS0+Y291bnQpOwogCiAJLyogc2V0IEVTTyB0byBjYXB0dXJlIGZpcnN0IE1JRExQIGludGVycnVwdCAqLwogCUVTTyA9IHB2b2ljZS0+ZXNvIC0xOwpAQCAtMTM5OSwzNSArMTM0MSwzNyBAQAogCVBBTiA9IDA7CiAJVk9MID0gMDsKIAlFQyA9IDA7Ci0Jc25kX2FsaV9wcmludGsoInBsYXliYWNrX3ByZXBhcmU6XG4gICAgY2g9JWQsIFJhdGU9JWQgRGVsdGE9JXhoLEdWU0VMPSV4aCxQQU49JXhoLENUUkw9JXhoXG4iLHB2b2ljZS0+bnVtYmVyLHJ1bnRpbWUtPnJhdGUsRGVsdGEsR1ZTRUwsUEFOLENUUkwpOwotCXNuZF9hbGlfd3JpdGVfdm9pY2VfcmVncyggICAgY29kZWMsCi0JCQkJICAgICBwdm9pY2UtPm51bWJlciwKLQkJCQkgICAgIExCQSwKLQkJCQkgICAgIDAsCS8qIGNzbyAqLwotCQkJCSAgICAgRVNPLAotCQkJCSAgICAgRGVsdGEsCi0JCQkJICAgICAwLAkvKiBhbHBoYSAqLwotCQkJCSAgICAgR1ZTRUwsCi0JCQkJICAgICBQQU4sCi0JCQkJICAgICBWT0wsCi0JCQkJICAgICBDVFJMLAotCQkJCSAgICAgRUMpOwotCWlmIChldm9pY2UgIT0gTlVMTCkgeworCXNuZF9hbGlfcHJpbnRrKCJwbGF5YmFja19wcmVwYXJlOlxuIik7CisJc25kX2FsaV9wcmludGsoImNoPSVkLCBSYXRlPSVkIERlbHRhPSV4aCxHVlNFTD0leGgsUEFOPSV4aCxDVFJMPSV4aFxuIiwKKwkJICAgICAgIHB2b2ljZS0+bnVtYmVyLHJ1bnRpbWUtPnJhdGUsRGVsdGEsR1ZTRUwsUEFOLENUUkwpOworCXNuZF9hbGlfd3JpdGVfdm9pY2VfcmVncyhjb2RlYywKKwkJCQkgcHZvaWNlLT5udW1iZXIsCisJCQkJIExCQSwKKwkJCQkgMCwJLyogY3NvICovCisJCQkJIEVTTywKKwkJCQkgRGVsdGEsCisJCQkJIDAsCS8qIGFscGhhICovCisJCQkJIEdWU0VMLAorCQkJCSBQQU4sCisJCQkJIFZPTCwKKwkJCQkgQ1RSTCwKKwkJCQkgRUMpOworCWlmIChldm9pY2UpIHsKIAkJZXZvaWNlLT5jb3VudCA9IHB2b2ljZS0+Y291bnQ7CiAJCWV2b2ljZS0+ZXNvID0gcHZvaWNlLT5jb3VudCA8PCAxOwogCQlFU08gPSBldm9pY2UtPmVzbyAtIDE7CiAJCXNuZF9hbGlfd3JpdGVfdm9pY2VfcmVncyhjb2RlYywKLQkJCQkgICAgIGV2b2ljZS0+bnVtYmVyLAotCQkJCSAgICAgTEJBLAotCQkJCSAgICAgMCwJLyogY3NvICovCi0JCQkJICAgICBFU08sCi0JCQkJICAgICBEZWx0YSwKLQkJCQkgICAgIDAsCS8qIGFscGhhICovCi0JCQkJICAgICBHVlNFTCwKLQkJCQkgICAgICh1bnNpZ25lZCBpbnQpMHg3ZiwKLQkJCQkgICAgICh1bnNpZ25lZCBpbnQpMHgzZmYsCi0JCQkJICAgICBDVFJMLAotCQkJCSAgICAgRUMpOworCQkJCQkgZXZvaWNlLT5udW1iZXIsCisJCQkJCSBMQkEsCisJCQkJCSAwLAkvKiBjc28gKi8KKwkJCQkJIEVTTywKKwkJCQkJIERlbHRhLAorCQkJCQkgMCwJLyogYWxwaGEgKi8KKwkJCQkJIEdWU0VMLAorCQkJCQkgMHg3ZiwKKwkJCQkJIDB4M2ZmLAorCQkJCQkgQ1RSTCwKKwkJCQkJIEVDKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZjb2RlYy0+cmVnX2xvY2spOwogCXJldHVybiAwOwpAQCAtMTQ1OSw3ICsxNDAzLDcgQEAKIAkJIHB2b2ljZS0+bnVtYmVyID09IEFMSV9NT0RFTV9PVVRfQ0hBTk5FTCkgPyAKIAkJMHgxMDAwIDogc25kX2FsaV9jb252ZXJ0X3JhdGUocnVudGltZS0+cmF0ZSwgcHZvaWNlLT5tb2RlKTsKIAotCS8vIFByZXBhcmUgY2FwdHVyZSBpbnRyIGNoYW5uZWwKKwkvKiBQcmVwYXJlIGNhcHR1cmUgaW50ciBjaGFubmVsICovCiAJaWYgKHB2b2ljZS0+bnVtYmVyID09IEFMSV9TUERJRl9JTl9DSEFOTkVMKSB7CiAKIAkJdW5zaWduZWQgaW50IHJhdGU7CkBAIC0xNDcwLDcgKzE0MTQsOCBAQAogCiAJCXJhdGUgPSBzbmRfYWxpX2dldF9zcGRpZl9pbl9yYXRlKGNvZGVjKTsKIAkJaWYgKHJhdGUgPT0gMCkgewotCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgImFsaV9jYXB0dXJlX3ByZWFwcmU6IHNwZGlmIHJhdGUgZGV0ZWN0IGVyciFcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgImFsaV9jYXB0dXJlX3ByZWFwcmU6ICIKKwkJCQkgICAic3BkaWYgcmF0ZSBkZXRlY3QgZXJyIVxuIik7CiAJCQlyYXRlID0gNDgwMDA7CiAJCX0KIAkJc3Bpbl9sb2NrX2lycSgmY29kZWMtPnJlZ19sb2NrKTsKQEAgLTE0ODEsMTkgKzE0MjYsMTkgQEAKIAkJfQogCiAJCWlmIChyYXRlICE9IDQ4MDAwKQotCQkJRGVsdGEgPSAoKHJhdGUgPDwgMTIpL3J1bnRpbWUtPnJhdGUpJjB4MDBmZmZmOworCQkJRGVsdGEgPSAoKHJhdGUgPDwgMTIpIC8gcnVudGltZS0+cmF0ZSkgJiAweDAwZmZmZjsKIAl9CiAKLQkvLyBzZXQgdGFyZ2V0IEVTTyBmb3IgY2hhbm5lbCAKKwkvKiBzZXQgdGFyZ2V0IEVTTyBmb3IgY2hhbm5lbCAgKi8KIAlwdm9pY2UtPmVzbyA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOyAKIAotCS8vIHNldCBpbnRlcnJ1cHQgY291bnQgc2l6ZSAKKwkvKiBzZXQgaW50ZXJydXB0IGNvdW50IHNpemUgICovCiAJcHZvaWNlLT5jb3VudCA9IHJ1bnRpbWUtPnBlcmlvZF9zaXplOwogCi0JLy8gc2V0IExvb3AgQmFjayBBZGRyZXNzIAorCS8qIHNldCBMb29wIEJhY2sgQWRkcmVzcyAgKi8KIAlMQkEgPSBydW50aW1lLT5kbWFfYWRkcjsKIAotCS8vIHNldCBFU08gdG8gY2FwdHVyZSBmaXJzdCBNSURMUCBpbnRlcnJ1cHQgCisJLyogc2V0IEVTTyB0byBjYXB0dXJlIGZpcnN0IE1JRExQIGludGVycnVwdCAgKi8KIAlFU08gPSBwdm9pY2UtPmVzbyAtIDE7CiAJQ1RSTCA9IHNuZF9hbGlfY29udHJvbF9tb2RlKHN1YnN0cmVhbSk7CiAJR1ZTRUwgPSAwOwpAQCAtMTUxNCwxNCArMTQ1OSwxNCBAQAogCQkJCSAgICAgQ1RSTCwKIAkJCQkgICAgIEVDKTsKIAotCiAJc3Bpbl91bmxvY2tfaXJxKCZjb2RlYy0+cmVnX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9hbGlfcGxheWJhY2tfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX2FsaV9wbGF5YmFja19wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfYWxpICpjb2RlYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwpAQCAtMTU2MywxNCArMTUwOCwxNCBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2FsaV9wbGF5YmFjayA9CiB7Ci0JLmluZm8gPQkJCShTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Ci0JCQkJIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAotCQkJCSBTTkRSVl9QQ01fSU5GT19SRVNVTUUgfAotCQkJCSBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUKSwKLQkuZm9ybWF0cyA9CQkoU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKLQkJCQkgU05EUlZfUENNX0ZNVEJJVF9TOCB8IFNORFJWX1BDTV9GTVRCSVRfVTE2X0xFKSwKLQkucmF0ZXMgPQkJU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUyB8IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJLmluZm8gPQkJKFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkJIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkJIFNORFJWX1BDTV9JTkZPX1JFU1VNRSB8CisJCQkgU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCksCisJLmZvcm1hdHMgPQkoU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCSBTTkRSVl9QQ01fRk1UQklUX1M4IHwgU05EUlZfUENNX0ZNVEJJVF9VMTZfTEUpLAorCS5yYXRlcyA9CVNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMgfCBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAogCS5yYXRlX21pbiA9CQk0MDAwLAogCS5yYXRlX21heCA9CQk0ODAwMCwKIAkuY2hhbm5lbHNfbWluID0JCTEsCkBAIC0xNTg5LDE0ICsxNTM0LDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfYWxpX2NhcHR1cmUgPQogewotCS5pbmZvID0JCQkoU05EUlZfUENNX0lORk9fTU1BUCB8IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLQkJCQkgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotCQkJCSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKLQkJCQkgU05EUlZfUENNX0lORk9fUkVTVU1FIHwKLQkJCQkgU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCksCi0JLmZvcm1hdHMgPQkJKFNORFJWX1BDTV9GTVRCSVRfVTggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8Ci0JCQkJIFNORFJWX1BDTV9GTVRCSVRfUzggfCBTTkRSVl9QQ01fRk1UQklUX1UxNl9MRSksCi0JLnJhdGVzID0JCVNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMgfCBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5pbmZvID0JCShTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJCSBTTkRSVl9QQ01fSU5GT19SRVNVTUUgfAorCQkJIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAorCS5mb3JtYXRzID0JKFNORFJWX1BDTV9GTVRCSVRfVTggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQkgU05EUlZfUENNX0ZNVEJJVF9TOCB8IFNORFJWX1BDTV9GTVRCSVRfVTE2X0xFKSwKKwkucmF0ZXMgPQlTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTIHwgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKIAkucmF0ZV9taW4gPQkJNDAwMCwKIAkucmF0ZV9tYXggPQkJNDgwMDAsCiAJLmNoYW5uZWxzX21pbiA9CQkxLApAQCAtMTYyMCwxNSArMTU2NSwxNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBzbmRfYWxpX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCByZWMsIGludCBjaGFubmVsLAotCQlzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSAqcGh3KQorc3RhdGljIGludCBzbmRfYWxpX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCByZWMsCisJCQlpbnQgY2hhbm5lbCwgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgKnBodykKIHsKIAlzdHJ1Y3Qgc25kX2FsaSAqY29kZWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX2FsaV92b2ljZSAqcHZvaWNlOwogCi0JcHZvaWNlID0gc25kX2FsaV9hbGxvY192b2ljZShjb2RlYywgU05EUlZfQUxJX1ZPSUNFX1RZUEVfUENNLCByZWMsIGNoYW5uZWwpOwotCWlmIChwdm9pY2UgPT0gTlVMTCkKKwlwdm9pY2UgPSBzbmRfYWxpX2FsbG9jX3ZvaWNlKGNvZGVjLCBTTkRSVl9BTElfVk9JQ0VfVFlQRV9QQ00sIHJlYywKKwkJCQkgICAgIGNoYW5uZWwpOworCWlmICghcHZvaWNlKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCXB2b2ljZS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwpAQCAtMTYzNyw3ICsxNTgzLDggQEAKIAogCXJ1bnRpbWUtPmh3ID0gKnBodzsKIAlzbmRfcGNtX3NldF9zeW5jKHN1YnN0cmVhbSk7Ci0Jc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX1NJWkUsIDAsIDY0KjEwMjQpOworCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9TSVpFLAorCQkJCSAgICAgMCwgNjQqMTAyNCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NjksNyArMTYxNiw3IEBACiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9hbGlfcGxheWJhY2tfb3BzID0gewogCS5vcGVuID0JCXNuZF9hbGlfcGxheWJhY2tfb3BlbiwKIAkuY2xvc2UgPQlzbmRfYWxpX3BsYXliYWNrX2Nsb3NlLAotCS5pb2N0bCA9CXNuZF9hbGlfaW9jdGwsCisJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcyA9CXNuZF9hbGlfcGxheWJhY2tfaHdfcGFyYW1zLAogCS5od19mcmVlID0Jc25kX2FsaV9wbGF5YmFja19od19mcmVlLAogCS5wcmVwYXJlID0Jc25kX2FsaV9wbGF5YmFja19wcmVwYXJlLApAQCAtMTY4MCw3ICsxNjI3LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2FsaV9jYXB0dXJlX29wcyA9IHsKIAkub3BlbiA9CQlzbmRfYWxpX2NhcHR1cmVfb3BlbiwKIAkuY2xvc2UgPQlzbmRfYWxpX2Nsb3NlLAotCS5pb2N0bCA9CXNuZF9hbGlfaW9jdGwsCisJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcyA9CXNuZF9hbGlfaHdfcGFyYW1zLAogCS5od19mcmVlID0Jc25kX2FsaV9od19mcmVlLAogCS5wcmVwYXJlID0Jc25kX2FsaV9wcmVwYXJlLApAQCAtMTY5NywyMCArMTY0NCwyMiBAQAogewogCXN0cnVjdCBzbmRfYWxpICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXVuc2lnbmVkIGludCBtb2RlbV9udW0gPSBjaGlwLT5udW1fb2ZfY29kZWNzIC0gMTsKLQlzbmRfYWM5N193cml0ZShjaGlwLT5hYzk3W21vZGVtX251bV0sIEFDOTdfTElORTFfUkFURSwgcGFyYW1zX3JhdGUoaHdfcGFyYW1zKSk7CisJc25kX2FjOTdfd3JpdGUoY2hpcC0+YWM5N1ttb2RlbV9udW1dLCBBQzk3X0xJTkUxX1JBVEUsCisJCSAgICAgICBwYXJhbXNfcmF0ZShod19wYXJhbXMpKTsKIAlzbmRfYWM5N193cml0ZShjaGlwLT5hYzk3W21vZGVtX251bV0sIEFDOTdfTElORTFfTEVWRUwsIDApOwogCXJldHVybiBzbmRfYWxpX2h3X3BhcmFtcyhzdWJzdHJlYW0sIGh3X3BhcmFtcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfYWxpX21vZGVtID0KIHsKLQkuaW5mbyA9CQkJKFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8Ci0JCQkJIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKLQkJCQkgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Ci0JCQkJIFNORFJWX1BDTV9JTkZPX1JFU1VNRSB8Ci0JCQkJIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAotCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAotCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV9LTk9UfFNORFJWX1BDTV9SQVRFXzgwMDB8U05EUlZfUENNX1JBVEVfMTYwMDAsCisJLmluZm8gPQkJKFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkJIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkJIFNORFJWX1BDTV9JTkZPX1JFU1VNRSB8CisJCQkgU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCksCisJLmZvcm1hdHMgPQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMgPQkoU05EUlZfUENNX1JBVEVfS05PVCB8IFNORFJWX1BDTV9SQVRFXzgwMDAgfAorCQkJIFNORFJWX1BDTV9SQVRFXzE2MDAwKSwKIAkucmF0ZV9taW4gPQkJODAwMCwKIAkucmF0ZV9tYXggPQkJMTYwMDAsCiAJLmNoYW5uZWxzX21pbiA9CQkxLApAQCAtMTcyMywxNSArMTY3MiwxNyBAQAogCS5maWZvX3NpemUgPQkJMCwKIH07CiAKLXN0YXRpYyBpbnQgc25kX2FsaV9tb2RlbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgcmVjLCBpbnQgY2hhbm5lbCkKK3N0YXRpYyBpbnQgc25kX2FsaV9tb2RlbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgcmVjLAorCQkJICAgICAgaW50IGNoYW5uZWwpCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGludCByYXRlcyBbXSA9IHs4MDAwLDk2MDAsMTIwMDAsMTYwMDB9OworCXN0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNbXSA9IHs4MDAwLCA5NjAwLCAxMjAwMCwgMTYwMDB9OwogCXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgaHdfY29uc3RyYWludF9yYXRlcyA9IHsKIAkJLmNvdW50ID0gQVJSQVlfU0laRShyYXRlcyksCiAJCS5saXN0ID0gcmF0ZXMsCiAJCS5tYXNrID0gMCwKIAl9OwogCWludCBlcnIgPSBzbmRfYWxpX29wZW4oc3Vic3RyZWFtLCByZWMsIGNoYW5uZWwsICZzbmRfYWxpX21vZGVtKTsKKwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHN1YnN0cmVhbS0+cnVudGltZSwgMCwKQEAgLTE3ODgsNyArMTczOSw4IEBACiB9CiAKIAotc3RhdGljIGludCBfX2RldmluaXQgc25kX2FsaV9wY20oc3RydWN0IHNuZF9hbGkgKiBjb2RlYywgaW50IGRldmljZSwgc3RydWN0IGFsaV9wY21fZGVzY3JpcHRpb24gKmRlc2MpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWxpX3BjbShzdHJ1Y3Qgc25kX2FsaSAqIGNvZGVjLCBpbnQgZGV2aWNlLAorCQkJCSBzdHJ1Y3QgYWxpX3BjbV9kZXNjcmlwdGlvbiAqZGVzYykKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CkBAIC0xODAyLDEyICsxNzU0LDE1IEBACiAJcGNtLT5wcml2YXRlX2RhdGEgPSBjb2RlYzsKIAlwY20tPnByaXZhdGVfZnJlZSA9IHNuZF9hbGlfcGNtX2ZyZWU7CiAJaWYgKGRlc2MtPnBsYXliYWNrX29wcykKLQkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgZGVzYy0+cGxheWJhY2tfb3BzKTsKKwkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKKwkJCQlkZXNjLT5wbGF5YmFja19vcHMpOwogCWlmIChkZXNjLT5jYXB0dXJlX29wcykKLQkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCBkZXNjLT5jYXB0dXJlX29wcyk7CisJCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKwkJCQlkZXNjLT5jYXB0dXJlX29wcyk7CiAKIAlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAotCQkJCQkgICAgICBzbmRfZG1hX3BjaV9kYXRhKGNvZGVjLT5wY2kpLCA2NCoxMDI0LCAxMjgqMTAyNCk7CisJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY29kZWMtPnBjaSksCisJCQkJCSAgICAgIDY0KjEwMjQsIDEyOCoxMDI0KTsKIAogCXBjbS0+aW5mb19mbGFncyA9IDA7CiAJcGNtLT5kZXZfY2xhc3MgPSBkZXNjLT5jbGFzczsKQEAgLTE4MTgsMTYgKzE3NzMsMjkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBhbGlfcGNtX2Rlc2NyaXB0aW9uIGFsaV9wY21zW10gPSB7Ci0JeyAiQUxJIDU0NTEiLCBBTElfQ0hBTk5FTFMsIDEsICZzbmRfYWxpX3BsYXliYWNrX29wcywgJnNuZF9hbGlfY2FwdHVyZV9vcHMgfSwKLQl7ICJBTEkgNTQ1MSBtb2RlbSIsIDEsIDEsICZzbmRfYWxpX21vZGVtX3BsYXliYWNrX29wcywgJnNuZF9hbGlfbW9kZW1fY2FwdHVyZV9vcHMsIFNORFJWX1BDTV9DTEFTU19NT0RFTSB9CisJeyAubmFtZSA9ICJBTEkgNTQ1MSIsCisJICAucGxheWJhY2tfbnVtID0gQUxJX0NIQU5ORUxTLAorCSAgLmNhcHR1cmVfbnVtID0gMSwKKwkgIC5wbGF5YmFja19vcHMgPSAmc25kX2FsaV9wbGF5YmFja19vcHMsCisJICAuY2FwdHVyZV9vcHMgPSAmc25kX2FsaV9jYXB0dXJlX29wcworCX0sCisJeyAubmFtZSA9ICJBTEkgNTQ1MSBtb2RlbSIsCisJICAucGxheWJhY2tfbnVtID0gMSwKKwkgIC5jYXB0dXJlX251bSA9IDEsCisJICAucGxheWJhY2tfb3BzID0gJnNuZF9hbGlfbW9kZW1fcGxheWJhY2tfb3BzLAorCSAgLmNhcHR1cmVfb3BzID0gJnNuZF9hbGlfbW9kZW1fY2FwdHVyZV9vcHMsCisJICAuY2xhc3MgPSBTTkRSVl9QQ01fQ0xBU1NfTU9ERU0KKwl9CiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWxpX2J1aWxkX3BjbXMoc3RydWN0IHNuZF9hbGkgKmNvZGVjKQogewogCWludCBpLCBlcnI7Ci0JZm9yKGkgPSAwIDsgaSA8IGNvZGVjLT5udW1fb2ZfY29kZWNzICYmIGkgPCBBUlJBWV9TSVpFKGFsaV9wY21zKSA7IGkrKykKLQkJaWYoKGVyciA9IHNuZF9hbGlfcGNtKGNvZGVjLCBpLCAmYWxpX3BjbXNbaV0pKSA8IDApCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fb2ZfY29kZWNzICYmIGkgPCBBUlJBWV9TSVpFKGFsaV9wY21zKTsgaSsrKSB7CisJCWVyciA9IHNuZF9hbGlfcGNtKGNvZGVjLCBpLCAmYWxpX3BjbXNbaV0pOworCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0xODM3LDcgKzE4MDUsOCBAQAogLmluZm8gPSBzbmRfYWxpNTQ1MV9zcGRpZl9pbmZvLCAuZ2V0ID0gc25kX2FsaTU0NTFfc3BkaWZfZ2V0LCBcCiAucHV0ID0gc25kX2FsaTU0NTFfc3BkaWZfcHV0LCAucHJpdmF0ZV92YWx1ZSA9IHZhbHVlfQogCi1zdGF0aWMgaW50IHNuZF9hbGk1NDUxX3NwZGlmX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCitzdGF0aWMgaW50IHNuZF9hbGk1NDUxX3NwZGlmX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogICAgICAgICB1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKICAgICAgICAgdWluZm8tPmNvdW50ID0gMTsKQEAgLTE4NDYsNyArMTgxNSw4IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9hbGk1NDUxX3NwZGlmX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitzdGF0aWMgaW50IHNuZF9hbGk1NDUxX3NwZGlmX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9hbGkgKmNvZGVjID0ga2NvbnRyb2wtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgZW5hYmxlOwpAQCAtMTg1NCwxMiArMTgyNCwxMyBAQAogCWVuYWJsZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID8gMSA6IDA7CiAKIAlzcGluX2xvY2tfaXJxKCZjb2RlYy0+cmVnX2xvY2spOwotCXN3aXRjaChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSkgeworCXN3aXRjaCAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpIHsKIAljYXNlIDA6CiAJCWVuYWJsZSA9IChjb2RlYy0+c3BkaWZfbWFzayAmIDB4MDIpID8gMSA6IDA7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJZW5hYmxlID0gKChjb2RlYy0+c3BkaWZfbWFzayAmIDB4MDIpICYmIChjb2RlYy0+c3BkaWZfbWFzayAmIDB4MDQpKSA/IDEgOiAwOworCQllbmFibGUgPSAoKGNvZGVjLT5zcGRpZl9tYXNrICYgMHgwMikgJiYKKwkJCSAgKGNvZGVjLT5zcGRpZl9tYXNrICYgMHgwNCkpID8gMSA6IDA7CiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJZW5hYmxlID0gKGNvZGVjLT5zcGRpZl9tYXNrICYgMHgwMSkgPyAxIDogMDsKQEAgLTE4NzIsNyArMTg0Myw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2FsaTU0NTFfc3BkaWZfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3N0YXRpYyBpbnQgc25kX2FsaTU0NTFfc3BkaWZfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX2FsaSAqY29kZWMgPSBrY29udHJvbC0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBjaGFuZ2UgPSAwLCBlbmFibGUgPSAwOwpAQCAtMTkzOSwxOCArMTkxMSw2IEBACiAJQUxJNTQ1MV9TUERJRihTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsQ0FQVFVSRSxTV0lUQ0gpLCAwLCAyKQogfTsKIAotc3RhdGljIHZvaWQgc25kX2FsaV9taXhlcl9mcmVlX2FjOTdfYnVzKHN0cnVjdCBzbmRfYWM5N19idXMgKmJ1cykKLXsKLQlzdHJ1Y3Qgc25kX2FsaSAqY29kZWMgPSBidXMtPnByaXZhdGVfZGF0YTsKLQljb2RlYy0+YWM5N19idXMgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBzbmRfYWxpX21peGVyX2ZyZWVfYWM5NyhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCi17Ci0Jc3RydWN0IHNuZF9hbGkgKmNvZGVjID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOwotCWNvZGVjLT5hYzk3W2FjOTctPm51bV0gPSBOVUxMOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYWxpX21peGVyKHN0cnVjdCBzbmRfYWxpICogY29kZWMpCiB7CiAJc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlIGFjOTc7CkBAIC0xOTYxLDE5ICsxOTIxLDIwIEBACiAJCS5yZWFkID0gc25kX2FsaV9jb2RlY19yZWFkLAogCX07CiAKLQlpZiAoKGVyciA9IHNuZF9hYzk3X2J1cyhjb2RlYy0+Y2FyZCwgMCwgJm9wcywgY29kZWMsICZjb2RlYy0+YWM5N19idXMpKSA8IDApCisJZXJyID0gc25kX2FjOTdfYnVzKGNvZGVjLT5jYXJkLCAwLCAmb3BzLCBjb2RlYywgJmNvZGVjLT5hYzk3X2J1cyk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JY29kZWMtPmFjOTdfYnVzLT5wcml2YXRlX2ZyZWUgPSBzbmRfYWxpX21peGVyX2ZyZWVfYWM5N19idXM7CiAKIAltZW1zZXQoJmFjOTcsIDAsIHNpemVvZihhYzk3KSk7CiAJYWM5Ny5wcml2YXRlX2RhdGEgPSBjb2RlYzsKLQlhYzk3LnByaXZhdGVfZnJlZSA9IHNuZF9hbGlfbWl4ZXJfZnJlZV9hYzk3OwogCi0JZm9yICggaSA9IDAgOyBpIDwgY29kZWMtPm51bV9vZl9jb2RlY3MgOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm51bV9vZl9jb2RlY3M7IGkrKykgewogCQlhYzk3Lm51bSA9IGk7Ci0JCWlmICgoZXJyID0gc25kX2FjOTdfbWl4ZXIoY29kZWMtPmFjOTdfYnVzLCAmYWM5NywgJmNvZGVjLT5hYzk3W2ldKSkgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhbGkgbWl4ZXIgJWQgY3JlYXRpbmcgZXJyb3IuXG4iLCBpKTsKLQkJCWlmKGkgPT0gMCkKKwkJZXJyID0gc25kX2FjOTdfbWl4ZXIoY29kZWMtPmFjOTdfYnVzLCAmYWM5NywgJmNvZGVjLT5hYzk3W2ldKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCQkgICAiYWxpIG1peGVyICVkIGNyZWF0aW5nIGVycm9yLlxuIiwgaSk7CisJCQlpZiAoaSA9PSAwKQogCQkJCXJldHVybiBlcnI7CiAJCQljb2RlYy0+bnVtX29mX2NvZGVjcyA9IDE7CiAJCQlicmVhazsKQEAgLTE5ODEsOSArMTk0MiwxMSBAQAogCX0KIAogCWlmIChjb2RlYy0+c3BkaWZfc3VwcG9ydCkgewotCQlmb3IoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfYWxpNTQ1MV9taXhlcl9zcGRpZik7IGlkeCsrKSB7Ci0JCQllcnI9c25kX2N0bF9hZGQoY29kZWMtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2FsaTU0NTFfbWl4ZXJfc3BkaWZbaWR4XSwgY29kZWMpKTsKLQkJCWlmIChlcnIgPCAwKSByZXR1cm4gZXJyOworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX2FsaTU0NTFfbWl4ZXJfc3BkaWYpOyBpZHgrKykgeworCQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCisJCQkJCSAgc25kX2N0bF9uZXcxKCZzbmRfYWxpNTQ1MV9taXhlcl9zcGRpZltpZHhdLCBjb2RlYykpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTE5OTgsMTEgKzE5NjEsMTEgQEAKIAlpbnQgaSwgajsKIAogCWltID0gY2hpcC0+aW1hZ2U7Ci0JaWYgKCEgaW0pCisJaWYgKCFpbSkKIAkJcmV0dXJuIDA7CiAKIAlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7Ci0JZm9yKGkgPSAwIDsgaSA8IGNoaXAtPm51bV9vZl9jb2RlY3MgOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bnVtX29mX2NvZGVjczsgaSsrKSB7CiAJCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtW2ldKTsKIAkJc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3W2ldKTsKIAl9CkBAIC0yMDEwLDEwICsxOTczLDEwIEBACiAJc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwogCQogCWltLT5yZWdzW0FMSV9NSVNDSU5UID4+IDJdID0gaW5sKEFMSV9SRUcoY2hpcCwgQUxJX01JU0NJTlQpKTsKLQkvLyBpbS0+cmVnc1tBTElfU1RBUlQgPj4gMl0gPSBpbmwoQUxJX1JFRyhjaGlwLCBBTElfU1RBUlQpKTsKKwkvKiBpbS0+cmVnc1tBTElfU1RBUlQgPj4gMl0gPSBpbmwoQUxJX1JFRyhjaGlwLCBBTElfU1RBUlQpKTsgKi8KIAlpbS0+cmVnc1tBTElfU1RPUCA+PiAyXSA9IGlubChBTElfUkVHKGNoaXAsIEFMSV9TVE9QKSk7CiAJCi0JLy8gZGlzYWJsZSBhbGwgSVJRIGJpdHMKKwkvKiBkaXNhYmxlIGFsbCBJUlEgYml0cyAqLwogCW91dGwoMCwgQUxJX1JFRyhjaGlwLCBBTElfTUlTQ0lOVCkpOwogCQogCWZvciAoaSA9IDA7IGkgPCBBTElfR0xPQkFMX1JFR1M7IGkrKykgewkKQEAgLTIwMjgsNyArMTk5MSw3IEBACiAJCQlpbS0+Y2hhbm5lbF9yZWdzW2ldW2pdID0gaW5sKEFMSV9SRUcoY2hpcCwgaio0ICsgMHhlMCkpOwogCX0KIAotCS8vIHN0b3AgYWxsIEhXIGNoYW5uZWwKKwkvKiBzdG9wIGFsbCBIVyBjaGFubmVsICovCiAJb3V0bCgweGZmZmZmZmZmLCBBTElfUkVHKGNoaXAsIEFMSV9TVE9QKSk7CiAKIAlzcGluX3VubG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKQEAgLTIwNDcsNyArMjAxMCw3IEBACiAJaW50IGksIGo7CiAKIAlpbSA9IGNoaXAtPmltYWdlOwotCWlmICghIGltKQorCWlmICghaW0pCiAJCXJldHVybiAwOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7CkBAIC0yMDY5LDE5ICsyMDMyLDIwIEBACiAJfQogCQogCWZvciAoaSA9IDA7IGkgPCBBTElfR0xPQkFMX1JFR1M7IGkrKykgewkKLQkJaWYgKChpKjQgPT0gQUxJX01JU0NJTlQpIHx8IChpKjQgPT0gQUxJX1NUT1ApIHx8IChpKjQgPT0gQUxJX1NUQVJUKSkKKwkJaWYgKChpKjQgPT0gQUxJX01JU0NJTlQpIHx8IChpKjQgPT0gQUxJX1NUT1ApIHx8CisJCSAgICAoaSo0ID09IEFMSV9TVEFSVCkpCiAJCQljb250aW51ZTsKIAkJb3V0bChpbS0+cmVnc1tpXSwgQUxJX1JFRyhjaGlwLCBpKjQpKTsKIAl9CiAJCi0JLy8gc3RhcnQgSFcgY2hhbm5lbAorCS8qIHN0YXJ0IEhXIGNoYW5uZWwgKi8KIAlvdXRsKGltLT5yZWdzW0FMSV9TVEFSVCA+PiAyXSwgQUxJX1JFRyhjaGlwLCBBTElfU1RBUlQpKTsKLQkvLyByZXN0b3JlIElSUSBlbmFibGUgYml0cworCS8qIHJlc3RvcmUgSVJRIGVuYWJsZSBiaXRzICovCiAJb3V0bChpbS0+cmVnc1tBTElfTUlTQ0lOVCA+PiAyXSwgQUxJX1JFRyhjaGlwLCBBTElfTUlTQ0lOVCkpOwogCQogCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwogCi0JZm9yKGkgPSAwIDsgaSA8IGNoaXAtPm51bV9vZl9jb2RlY3MgOyBpKyspCisJZm9yIChpID0gMCA7IGkgPCBjaGlwLT5udW1fb2ZfY29kZWNzOyBpKyspCiAJCXNuZF9hYzk3X3Jlc3VtZShjaGlwLT5hYzk3W2ldKTsKIAkKIAlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CkBAIC0yMTEzLDcgKzIwNzcsNyBAQAogewogCXVuc2lnbmVkIGludCBsZWdhY3k7CiAJdW5zaWduZWQgY2hhciB0ZW1wOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAogCXNuZF9hbGlfcHJpbnRrKCJjaGlwIGluaXRpYWxpemluZyAuLi4gXG4iKTsKIApAQCAtMjE0Niw3ICsyMTEwLDggQEAKIAlvdXRiKDB4MTAsIAkgQUxJX1JFRyhjb2RlYywgQUxJX01QVVIyKSk7CiAKIAljb2RlYy0+YWM5N19leHRfaWQgPSBzbmRfYWxpX2NvZGVjX3BlZWsoY29kZWMsIDAsIEFDOTdfRVhURU5ERURfSUQpOwotCWNvZGVjLT5hYzk3X2V4dF9zdGF0dXMgPSBzbmRfYWxpX2NvZGVjX3BlZWsoY29kZWMsIDAsIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKKwljb2RlYy0+YWM5N19leHRfc3RhdHVzID0gc25kX2FsaV9jb2RlY19wZWVrKGNvZGVjLCAwLAorCQkJCQkJICAgIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKIAlpZiAoY29kZWMtPnNwZGlmX3N1cHBvcnQpIHsKIAkJc25kX2FsaV9lbmFibGVfc3BkaWZfb3V0KGNvZGVjKTsKIAkJY29kZWMtPnNwZGlmX21hc2sgPSAweDAwMDAwMDAyOwpAQCAtMjE1OCw4ICsyMTIzLDkgQEAKIAlpZiAoaW5sKEFMSV9SRUcoY29kZWMsIEFMSV9TQ1RSTCkpICYgQUxJX1NDVFJMX0NPREVDMl9SRUFEWSkgewogCQljb2RlYy0+bnVtX29mX2NvZGVjcysrOwogCQlvdXRsKGlubChBTElfUkVHKGNvZGVjLCBBTElfU0NUUkwpKSB8Ci0JCQkoQUxJX1NDVFJMX0xJTkVfSU4yfEFMSV9TQ1RSTF9HUElPX0lOMnxBTElfU0NUUkxfTElORV9PVVRfRU4pLAotCQkJQUxJX1JFRyhjb2RlYywgQUxJX1NDVFJMKSk7CisJCSAgICAgKEFMSV9TQ1RSTF9MSU5FX0lOMiB8IEFMSV9TQ1RSTF9HUElPX0lOMiB8CisJCSAgICAgIEFMSV9TQ1RSTF9MSU5FX09VVF9FTiksCisJCSAgICAgQUxJX1JFRyhjb2RlYywgQUxJX1NDVFJMKSk7CiAJfQogCiAJc25kX2FsaV9wcmludGsoImNoaXAgaW5pdGlhbGl6ZSBzdWNjZWVkLlxuIik7CkBAIC0yMTY4LDE4ICsyMTM0LDE5IEBACiB9CiAKIC8qIHByb2MgZm9yIHJlZ2lzdGVyIGR1bXAgKi8KLXN0YXRpYyB2b2lkIHNuZF9hbGlfcHJvY19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZikKK3N0YXRpYyB2b2lkIHNuZF9hbGlfcHJvY19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCisJCQkgICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWYpCiB7CiAJc3RydWN0IHNuZF9hbGkgKmNvZGVjID0gZW50cnktPnByaXZhdGVfZGF0YTsKIAlpbnQgaTsKLQlmb3IoaSA9IDAgOyBpIDwgMjU2IDsgaSs9IDQpCisJZm9yIChpID0gMDsgaSA8IDI1NiA7IGkrPSA0KQogCQlzbmRfaXByaW50ZihidWYsICIlMDJ4OiAlMDh4XG4iLCBpLCBpbmwoQUxJX1JFRyhjb2RlYywgaSkpKTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHNuZF9hbGlfcHJvY19pbml0KHN0cnVjdCBzbmRfYWxpICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwotCWlmKCFzbmRfY2FyZF9wcm9jX25ldyhjb2RlYy0+Y2FyZCwgImFsaTU0NTEiLCAmZW50cnkpKQorCWlmICghc25kX2NhcmRfcHJvY19uZXcoY29kZWMtPmNhcmQsICJhbGk1NDUxIiwgJmVudHJ5KSkKIAkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjb2RlYywgc25kX2FsaV9wcm9jX3JlYWQpOwogfQogCkBAIC0yMTg4LDcgKzIxNTUsOCBAQAogCWludCBlcnI7CiAKIAlzbmRfYWxpX3ByaW50aygicmVzb3VjZXMgYWxsb2NhdGlvbiAuLi5cbiIpOwotCWlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhjb2RlYy0+cGNpLCAiQUxJIDU0NTEiKSkgPCAwKQorCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoY29kZWMtPnBjaSwgIkFMSSA1NDUxIik7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJY29kZWMtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoY29kZWMtPnBjaSwgMCk7CiAKQEAgLTIyMDEsOSArMjE2OSw5IEBACiAJc25kX2FsaV9wcmludGsoInJlc291Y2VzIGFsbG9jYXRlZC5cbiIpOwogCXJldHVybiAwOwogfQotc3RhdGljIGludCBzbmRfYWxpX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpIAorc3RhdGljIGludCBzbmRfYWxpX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IHNuZF9hbGkgKmNvZGVjPWRldmljZS0+ZGV2aWNlX2RhdGE7CisJc3RydWN0IHNuZF9hbGkgKmNvZGVjID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKIAlzbmRfYWxpX2ZyZWUoY29kZWMpOwogCXJldHVybiAwOwogfQpAQCAtMjIyNiwxNyArMjE5NCwyMCBAQAogCXNuZF9hbGlfcHJpbnRrKCJjcmVhdGluZyAuLi5cbiIpOwogCiAJLyogZW5hYmxlIFBDSSBkZXZpY2UgKi8KLQlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCS8qIGNoZWNrLCBpZiB3ZSBjYW4gcmVzdHJpY3QgUENJIERNQSB0cmFuc2ZlcnMgdG8gMzEgYml0cyAqLwogCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BXzMxQklUX01BU0spIDwgMCB8fAogCSAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfMzFCSVRfTUFTSykgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgImFyY2hpdGVjdHVyZSBkb2VzIG5vdCBzdXBwb3J0IDMxYml0IFBDSSBidXNtYXN0ZXIgRE1BXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiYXJjaGl0ZWN0dXJlIGRvZXMgbm90IHN1cHBvcnQgIgorCQkJICAgIjMxYml0IFBDSSBidXNtYXN0ZXIgRE1BXG4iKTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JaWYgKChjb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKCpjb2RlYyksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJY29kZWMgPSBremFsbG9jKHNpemVvZigqY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvZGVjKSB7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0yMjkzLDIxICsyMjY0LDIyIEBACiAKIAkvKiBNMTUzMzogc291dGhicmlkZ2UgKi8KIAljb2RlYy0+cGNpX20xNTMzID0gcGNpX2dldF9kZXZpY2UoMHgxMGI5LCAweDE1MzMsIE5VTEwpOwotCWlmICghIGNvZGVjLT5wY2lfbTE1MzMpIHsKKwlpZiAoIWNvZGVjLT5wY2lfbTE1MzMpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiYWxpNTQ1MTogY2Fubm90IGZpbmQgQUxpIDE1MzMgY2hpcC5cbiIpOwogCQlzbmRfYWxpX2ZyZWUoY29kZWMpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJLyogTTcxMDE6IHBvd2VyIG1hbmFnZW1lbnQgKi8KIAljb2RlYy0+cGNpX203MTAxID0gcGNpX2dldF9kZXZpY2UoMHgxMGI5LCAweDcxMDEsIE5VTEwpOwotCWlmICghIGNvZGVjLT5wY2lfbTcxMDEgJiYgY29kZWMtPnJldmlzaW9uID09IEFMSV81NDUxX1YwMikgeworCWlmICghY29kZWMtPnBjaV9tNzEwMSAmJiBjb2RlYy0+cmV2aXNpb24gPT0gQUxJXzU0NTFfVjAyKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImFsaTU0NTE6IGNhbm5vdCBmaW5kIEFMaSA3MTAxIGNoaXAuXG4iKTsKIAkJc25kX2FsaV9mcmVlKGNvZGVjKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJc25kX2FsaV9wcmludGsoInNuZF9kZXZpY2VfbmV3IGlzIGNhbGxlZC5cbiIpOwotCWlmICgoZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjb2RlYywgJm9wcykpIDwgMCkgeworCWVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY29kZWMsICZvcHMpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9hbGlfZnJlZShjb2RlYyk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMjMxNSwxOCArMjI4NywxOCBAQAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIAogCS8qIGluaXRpYWxpc2Ugc3ludGggdm9pY2VzKi8KLQlmb3IgKGkgPSAwOyBpIDwgQUxJX0NIQU5ORUxTOyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IEFMSV9DSEFOTkVMUzsgaSsrKQogCQljb2RlYy0+c3ludGgudm9pY2VzW2ldLm51bWJlciA9IGk7Ci0JfQogCi0JaWYgKChlcnIgPSBzbmRfYWxpX2NoaXBfaW5pdChjb2RlYykpIDwgMCkgeworCWVyciA9IHNuZF9hbGlfY2hpcF9pbml0KGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhbGkgY3JlYXRlOiBjaGlwIGluaXQgZXJyb3IuXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKICNpZmRlZiBDT05GSUdfUE0KIAljb2RlYy0+aW1hZ2UgPSBrbWFsbG9jKHNpemVvZigqY29kZWMtPmltYWdlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEgY29kZWMtPmltYWdlKQorCWlmICghY29kZWMtPmltYWdlKQogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiY2FuJ3QgYWxsb2NhdGUgYXBtIGJ1ZmZlclxuIik7CiAjZW5kaWYKIApAQCAtMjM0OCwyNiArMjMyMCwyMyBAQAogCXNuZF9hbGlfcHJpbnRrKCJwcm9iZSAuLi5cbiIpOwogCiAJY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQorCWlmICghY2FyZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoKGVyciA9IHNuZF9hbGlfY3JlYXRlKGNhcmQsIHBjaSwgcGNtX2NoYW5uZWxzLCBzcGRpZiwgJmNvZGVjKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9hbGlfY3JlYXRlKGNhcmQsIHBjaSwgcGNtX2NoYW5uZWxzLCBzcGRpZiwgJmNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKIAljYXJkLT5wcml2YXRlX2RhdGEgPSBjb2RlYzsKIAogCXNuZF9hbGlfcHJpbnRrKCJtaXhlciBidWlsZGluZyAuLi5cbiIpOwotCWlmICgoZXJyID0gc25kX2FsaV9taXhlcihjb2RlYykpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBzbmRfYWxpX21peGVyKGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKIAkKIAlzbmRfYWxpX3ByaW50aygicGNtIGJ1aWxkaW5nIC4uLlxuIik7Ci0JaWYgKChlcnIgPSBzbmRfYWxpX2J1aWxkX3BjbXMoY29kZWMpKSA8IDApIHsKLQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gc25kX2FsaV9idWlsZF9wY21zKGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKIAogCXNuZF9hbGlfcHJvY19pbml0KGNvZGVjKTsKIApAQCAtMjM3OCwxMiArMjM0NywxNiBAQAogCQljYXJkLT5zaG9ydG5hbWUsIGNvZGVjLT5wb3J0LCBjb2RlYy0+aXJxKTsKIAogCXNuZF9hbGlfcHJpbnRrKCJyZWdpc3RlciBjYXJkLlxuIik7Ci0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCiAJcGNpX3NldF9kcnZkYXRhKHBjaSwgY2FyZCk7CiAJcmV0dXJuIDA7CisKKyBlcnJvcjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfYWxpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc2IuaCBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3NiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNGQ4ZmMuLjAwMDAwMDAKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc2IuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgYXU4OHgwX3NiLmgKLSAqCi0gKiAgV2VkIE9jdCAyOSAyMjoxMDo0MiAyMDAzCi0gKiAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIENISVBfQVU4ODIwCi0vKiBBVTg4MjAgc3RhcnRpbmcgQCA2NEtpQiBvZmZzZXQgKi8KLSNkZWZpbmUgU0JFTVVfQkFTRSAweDEwMDAwCi0jZWxzZQotLyogQVU4ODEwPyBhbmQgQVU4ODMwIHN0YXJ0aW5nIEAgMTY0S2lCIG9mZnNldCAqLwotI2RlZmluZSBTQkVNVV9CQVNFIDB4MjkwMDAKLSNlbmRpZgotCi0jZGVmaW5lIEZNX0FfU1RBVFVTCQkJKFNCRU1VX0JBU0UgKyAweDAwKQkvKiByZWFkICovCi0jZGVmaW5lIEZNX0FfQUREUkVTUwkJKFNCRU1VX0JBU0UgKyAweDAwKQkvKiB3cml0ZSAqLwotI2RlZmluZSBGTV9BX0RBVEEJCQkoU0JFTVVfQkFTRSArIDB4MDQpCi0jZGVmaW5lIEZNX0JfU1RBVFVTCQkJKFNCRU1VX0JBU0UgKyAweDA4KQotI2RlZmluZSBGTV9CX0FERFJFU1MJCShTQkVNVV9CQVNFICsgMHgwOCkKLSNkZWZpbmUgRk1fQl9EQVRBCQkJKFNCRU1VX0JBU0UgKyAweDBDKQotI2RlZmluZSBTQl9NSVhFUl9BRERSCQkoU0JFTVVfQkFTRSArIDB4MTApCi0jZGVmaW5lIFNCX01JWEVSX0RBVEEJCShTQkVNVV9CQVNFICsgMHgxNCkKLSNkZWZpbmUgU0JfUkVTRVQJCQkoU0JFTVVfQkFTRSArIDB4MTgpCi0jZGVmaW5lIFNCX1JFU0VUX0FMSUFTCQkoU0JFTVVfQkFTRSArIDB4MUMpCi0jZGVmaW5lIEZNX1NUQVRVUzIJCQkoU0JFTVVfQkFTRSArIDB4MjApCi0jZGVmaW5lIEZNX0FERFIyCQkJKFNCRU1VX0JBU0UgKyAweDIwKQotI2RlZmluZSBGTV9EQVRBMgkJCShTQkVNVV9CQVNFICsgMHgyNCkKLSNkZWZpbmUgU0JfRFNQX1JFQUQJCQkoU0JFTVVfQkFTRSArIDB4MjgpCi0jZGVmaW5lIFNCX0RTUF9XUklURQkJKFNCRU1VX0JBU0UgKyAweDMwKQotI2RlZmluZSBTQl9EU1BfV1JJVEVfU1RBVFVTCShTQkVNVV9CQVNFICsgMHgzMCkJLyogYml0IDcgKi8KLSNkZWZpbmUgU0JfRFNQX1JFQURfU1RBVFVTCShTQkVNVV9CQVNFICsgMHgzOCkJLyogYml0IDcgKi8KLSNkZWZpbmUgU0JfTEFDUgkJCQkoU0JFTVVfQkFTRSArIDB4NDApCS8qID8gKi8KLSNkZWZpbmUgU0JfTEFEQ1IJCQkoU0JFTVVfQkFTRSArIDB4NDQpCS8qID8gKi8KLSNkZWZpbmUgU0JfTEFNUgkJCQkoU0JFTVVfQkFTRSArIDB4NDgpCS8qID8gKi8KLSNkZWZpbmUgU0JfTEFSUgkJCQkoU0JFTVVfQkFTRSArIDB4NEMpCS8qID8gKi8KLSNkZWZpbmUgU0JfVkVSU0lPTgkJCShTQkVNVV9CQVNFICsgMHg1MCkKLSNkZWZpbmUgU0JfQ1RSTFNUQVQJCQkoU0JFTVVfQkFTRSArIDB4NTQpCi0jZGVmaW5lIFNCX1RJTUVSU1RBVAkJKFNCRU1VX0JBU0UgKyAweDU4KQotI2RlZmluZSBGTV9SQU0JCQkJKFNCRU1VX0JBU0UgKyAweDEwMCkJLyogMHg0MCBVTE9ORyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggNDNlZGQyOC4uMzZkMzY2NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBhenQzMzI4LmMgLSBkcml2ZXIgZm9yIEF6dGVjaCBBWkYzMzI4IGJhc2VkIHNvdW5kY2FyZHMgKGUuZy4gUENJMTY4KS4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgYnkgQW5kcmVhcyBNb2hyIDxhbmRpIEFUIGxpc2FzLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiwgMjAwNyBieSBBbmRyZWFzIE1vaHIgPGFuZGkgQVQgbGlzYXMuZGU+CiAgKgogICogIEZyYW1ld29yayBib3Jyb3dlZCBmcm9tIEJhcnQgSGFydGdlcnMncyBhbHM0MDAwLmMuCiAgKiAgRHJpdmVyIGRldmVsb3BlZCBvbiBQQ0kxNjggQVAoVykgdmVyc2lvbiAoUENJIHJldi4gMTAsIHN1YnN5c3RlbSBJRCAxODAxKSwKQEAgLTUyLDYgKzUyLDkgQEAKICAqICAtIGZ1bGwgZHVwbGV4IDE2Yml0IHBsYXliYWNrL3JlY29yZCBhdCBpbmRlcGVuZGVudCBzYW1wbGluZyByYXRlCiAgKiAgLSBNUFU0MDEgKCsgbGVnYWN5IGFkZHJlc3Mgc3VwcG9ydCkgRklYTUU6IGhvdyB0byBlbmFibGUgbGVnYWN5IGFkZHI/PwogICogIC0gZ2FtZSBwb3J0IChsZWdhY3kgYWRkcmVzcyBzdXBwb3J0KQorICogIC0gYnVpbHRpbiAzRCBlbmhhbmNlbWVudCAoc2FpZCB0byBiZSBZQU1BSEEgWW1lcnNpb24pCisgKiAgLSBidWlsdGluIERpcmVjdElucHV0IHN1cHBvcnQsIGhlbHBzIHJlZHVjZSBDUFUgb3ZlcmhlYWQgKGludGVycnVwdC1kcml2ZW4KKyAqICAgIGZlYXR1cmVzIHN1cHBvcnRlZCkKICAqICAtIGJ1aWx0LWluIEdlbmVyYWwgRGlyZWN0WCB0aW1lciBoYXZpbmcgYSAyMCBiaXRzIGNvdW50ZXIKICAqICAgIHdpdGggMXVzIHJlc29sdXRpb24gKHNlZSBiZWxvdyEpCiAgKiAgLSBJMlMgc2VyaWFsIHBvcnQgZm9yIGV4dGVybmFsIERBQwpAQCAtOTQsNiArOTcsMTAgQEAKICAqIAogICogQlVHUwogICogIC0gZnVsbC1kdXBsZXggbWlnaHQgKnN0aWxsKiBiZSBwcm9ibGVtYXRpYywgbm90IGZ1bGx5IHRlc3RlZCByZWNlbnRseQorICogIC0gKG5vbi1idWcpICJCYXNzL1RyZWJsZSBvciAzRCBzZXR0aW5ncyBkb24ndCB3b3JrIiAtIHRoZXkgZG8gZ2V0IGV2YWx1YXRlZAorICogICAgaWYgeW91IHNldCBQQ00gb3V0cHV0IHN3aXRjaCB0byAicHJlIDNEIiBpbnN0ZWFkIG9mICJwb3N0IDNEIi4KKyAqICAgIElmIHRoaXMgY2FuJ3QgYmUgc2V0LCB0aGVuIGdldCBhIG1peGVyIGFwcGxpY2F0aW9uIHRoYXQgSXNuJ3QgU3R1cGlkICh0bSkKKyAqICAgIChlLmcuIGttaXgsIGdhbWl4KSAtIHVuZm9ydHVuYXRlbHkgc2V2ZXJhbCBhcmUhIQogICogCiAgKiBUT0RPCiAgKiAgLSB0ZXN0IE1QVTQwMSBNSURJIHBsYXliYWNrIGV0Yy4KQEAgLTYyMiw3ICs2MjksNyBAQAogCXJldHVybiAobnJlZyAhPSBvcmVnKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9hemYzMzI4X21peGVyX2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfYXpmMzMyOF9taXhlcl9jb250cm9sc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJQVpGMzMyOF9NSVhFUl9TV0lUQ0goIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCBJRFhfTUlYRVJfUExBWV9NQVNURVIsIDE1LCAxKSwKIAlBWkYzMzI4X01JWEVSX1ZPTF9TVEVSRU8oIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBJRFhfTUlYRVJfUExBWV9NQVNURVIsIDB4MWYsIDEpLAogCUFaRjMzMjhfTUlYRVJfU1dJVENIKCJXYXZlIFBsYXliYWNrIFN3aXRjaCIsIElEWF9NSVhFUl9XQVZFT1VULCAxNSwgMSksCkBAIC02NTIsNyArNjU5LDcgQEAKIAlBWkYzMzI4X01JWEVSX1ZPTF9NT05PKCJNb2RlbSBDYXB0dXJlIFZvbHVtZSIsIElEWF9NSVhFUl9NT0RFTUlOLCAweDFmLCAxKSwKIAlBWkYzMzI4X01JWEVSX0VOVU0oIk1pYyBTZWxlY3QiLCBJRFhfTUlYRVJfQURWQ1RMMiwgMiwgOCksCiAJQVpGMzMyOF9NSVhFUl9FTlVNKCJNb25vIE91dHB1dCBTZWxlY3QiLCBJRFhfTUlYRVJfQURWQ1RMMiwgMiwgOSksCi0JQVpGMzMyOF9NSVhFUl9FTlVNKCJQQ00iLCBJRFhfTUlYRVJfQURWQ1RMMiwgMiwgMTUpLCAvKiBQQ00gT3V0IFBhdGgsIHBsYWNlIGluIGZyb250IHNpbmNlIGl0IGNvbnRyb2xzICpib3RoKiAzRCBhbmQgQmFzcy9UcmVibGUhICovCisJQVpGMzMyOF9NSVhFUl9FTlVNKCJQQ00gT3V0cHV0IFJvdXRlIiwgSURYX01JWEVSX0FEVkNUTDIsIDIsIDE1KSwgLyogUENNIE91dCBQYXRoLCBwbGFjZSBpbiBmcm9udCBzaW5jZSBpdCBjb250cm9scyAqYm90aCogM0QgYW5kIEJhc3MvVHJlYmxlISAqLwogCUFaRjMzMjhfTUlYRVJfVk9MX1NQRUNJQUwoIlRvbmUgQ29udHJvbCAtIFRyZWJsZSIsIElEWF9NSVhFUl9CQVNTVFJFQkxFLCAweDA3LCAxLCAwKSwKIAlBWkYzMzI4X01JWEVSX1ZPTF9TUEVDSUFMKCJUb25lIENvbnRyb2wgLSBCYXNzIiwgSURYX01JWEVSX0JBU1NUUkVCTEUsIDB4MDcsIDksIDApLAogCUFaRjMzMjhfTUlYRVJfU1dJVENIKCIzRCBDb250cm9sIC0gU3dpdGNoIiwgSURYX01JWEVSX0FEVkNUTDIsIDEzLCAwKSwKQEAgLTY3OCw3ICs2ODUsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgY29uc3QgdTE2IF9fZGV2aW5pdGRhdGEgc25kX2F6ZjMzMjhfaW5pdF92YWx1ZXNbXVsyXSA9IHsKK3N0YXRpYyB1MTYgX19kZXZpbml0ZGF0YSBzbmRfYXpmMzMyOF9pbml0X3ZhbHVlc1tdWzJdID0gewogICAgICAgICB7IElEWF9NSVhFUl9QTEFZX01BU1RFUiwJTUlYRVJfTVVURV9NQVNLfDB4MWYxZiB9LAogICAgICAgICB7IElEWF9NSVhFUl9NT0RFTU9VVCwJCU1JWEVSX01VVEVfTUFTS3wweDFmMWYgfSwKIAl7IElEWF9NSVhFUl9CQVNTVFJFQkxFLAkJMHgwMDAwIH0sCkBAIC0xMzY5LDcgKzEzNzYsNiBAQAogCXN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAogCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOwotCiAJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtID0gTlVMTDsKIAlzbmRfYXpmMzMyOF9kYmdjYWxsbGVhdmUoKTsKIAlyZXR1cm4gMDsKQEAgLTE2NjAsMTAgKzE2NjYsMTAgQEAKIH0KICNlbmRpZgogCisjaWYgREVCVUdfTUlTQwogc3RhdGljIHZvaWQKIHNuZF9hemYzMzI4X2RlYnVnX3Nob3dfcG9ydHMoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwKQogewotI2lmIERFQlVHX01JU0MKIAl1MTYgdG1wOwogCiAJc25kX2F6ZjMzMjhfZGJnbWlzYygiY29kZWNfcG9ydCAweCVseCwgaW8yX3BvcnQgMHglbHgsIG1wdV9wb3J0IDB4JWx4LCBzeW50aF9wb3J0IDB4JWx4LCBtaXhlcl9wb3J0IDB4JWx4LCBpcnEgJWRcbiIsIGNoaXAtPmNvZGVjX3BvcnQsIGNoaXAtPmlvMl9wb3J0LCBjaGlwLT5tcHVfcG9ydCwgY2hpcC0+c3ludGhfcG9ydCwgY2hpcC0+bWl4ZXJfcG9ydCwgY2hpcC0+aXJxKTsKQEAgLTE2NzMsMTAgKzE2NzksMTYgQEAKIAlmb3IgKHRtcD0wOyB0bXAgPD0gMHgwMTsgdG1wICs9IDEpCiAJCXNuZF9hemYzMzI4X2RiZ21pc2MoIjB4JTAyeDogb3BsIDB4JTA0eCwgbXB1MzAwIDB4JTA0eCwgbXB1MzEwIDB4JTA0eCwgbXB1MzIwIDB4JTA0eCwgbXB1MzMwIDB4JTA0eFxuIiwgdG1wLCBpbmIoMHgzODggKyB0bXApLCBpbmIoMHgzMDAgKyB0bXApLCBpbmIoMHgzMTAgKyB0bXApLCBpbmIoMHgzMjAgKyB0bXApLCBpbmIoMHgzMzAgKyB0bXApKTsKIAotCWZvciAodG1wID0gMDsgdG1wIDw9IDB4NkU7IHRtcCArPSAyKQotCQlzbmRfYXpmMzMyOF9kYmdtaXNjKCIweCUwMng6IDB4JTA0eFxuIiwgdG1wLCBzbmRfYXpmMzMyOF9jb2RlY19pbmIoY2hpcCwgdG1wKSk7Ci0jZW5kaWYKKwlmb3IgKHRtcCA9IDA7IHRtcCA8IEFaRl9JT19TSVpFX0NPREVDOyB0bXAgKz0gMikKKwkJc25kX2F6ZjMzMjhfZGJnbWlzYygiY29kZWMgMHglMDJ4OiAweCUwNHhcbiIsIHRtcCwgc25kX2F6ZjMzMjhfY29kZWNfaW53KGNoaXAsIHRtcCkpOworCisJZm9yICh0bXAgPSAwOyB0bXAgPCBBWkZfSU9fU0laRV9NSVhFUjsgdG1wICs9IDIpCisJCXNuZF9hemYzMzI4X2RiZ21pc2MoIm1peGVyIDB4JTAyeDogMHglMDR4XG4iLCB0bXAsIHNuZF9hemYzMzI4X21peGVyX2ludyhjaGlwLCB0bXApKTsKIH0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQKK3NuZF9hemYzMzI4X2RlYnVnX3Nob3dfcG9ydHMoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwKSB7fQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBzbmRfYXpmMzMyOF9jcmVhdGUoc3RydWN0IHNuZF9jYXJkICpjYXJkLApAQCAtMTg0Miw4ICsxODU0LDggQEAKIAogI2lmZGVmIE1PRFVMRQogCXByaW50aygKLSJhenQzMzI4OiBTb3VuZCBkcml2ZXIgZm9yIEF6dGVjaCBBWkYzMzI4LWJhc2VkIHNvdW5kY2FyZHMgc3VjaCBhcyBQQ0kxNjhcbiIKLSJhenQzMzI4OiAoaGFyZHdhcmUgd2FzIGNvbXBsZXRlbHkgdW5kb2N1bWVudGVkIC0gWkVSTyBzdXBwb3J0IGZyb20gQXp0ZWNoKS5cbiIKKyJhenQzMzI4OiBTb3VuZCBkcml2ZXIgZm9yIEF6dGVjaCBBWkYzMzI4LWJhc2VkIHNvdW5kY2FyZHMgc3VjaCBhcyBQQ0kxNjguXG4iCisiYXp0MzMyODogSGFyZHdhcmUgd2FzIGNvbXBsZXRlbHkgdW5kb2N1bWVudGVkLCB1bmZvcnR1bmF0ZWx5LlxuIgogImF6dDMzMjg6IEZlZWwgZnJlZSB0byBjb250YWN0IGFuZGkgQVQgbGlzYXMuZGUgZm9yIGJ1ZyByZXBvcnRzIGV0Yy4hXG4iCiAiYXp0MzMyODogVXNlci1zY2FsYWJsZSBzZXF1ZW5jZXIgdGltZXIgc2V0IHRvICVkSHogKDEwMjQwMDBIeiAvICVkKS5cbiIsCiAJMTAyNDAwMCAvIHNlcXRpbWVyX3NjYWxpbmcsIHNlcXRpbWVyX3NjYWxpbmcpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguaCBiL3NvdW5kL3BjaS9henQzMzI4LmgKaW5kZXggYjRmM2UzYy4uNjc5ZmE5OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguaAorKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5oCkBAIC0xMDYsOCArMTA2LDggQEAKICAgI2RlZmluZSBJUlFfUkVDT1JESU5HCQkJMHgwMDAyCiAgICNkZWZpbmUgSVJRX01QVTQwMQkJCTB4MDAxMAogICAjZGVmaW5lIElSUV9USU1FUgkJCTB4MDAyMCAvKiBEaXJlY3RYIHRpbWVyICovCi0gICNkZWZpbmUgSVJRX1VOS05PV04xCQkJMHgwMDQwIC8qIHByb2JhYmx5IHVudXNlZCAqLwotICAjZGVmaW5lIElSUV9VTktOT1dOMgkJCTB4MDA4MCAvKiBwcm9iYWJseSB1bnVzZWQgKi8KKyAgI2RlZmluZSBJUlFfVU5LTk9XTjEJCQkweDAwNDAgLyogcHJvYmFibHkgdW51c2VkLCBvciBwb3NzaWJseSBJMlMgcG9ydD8gb3IgZ2FtZXBvcnQgSVJRPyAqLworICAjZGVmaW5lIElSUV9VTktOT1dOMgkJCTB4MDA4MCAvKiBwcm9iYWJseSB1bnVzZWQsIG9yIHBvc3NpYmx5IEkyUyBwb3J0PyBvciBnYW1lcG9ydCBJUlE/ICovCiAjZGVmaW5lIElEWF9JT182NkgJCTB4NjYgICAgLyogd3JpdGluZyAweGZmZmYgcmV0dXJucyAweDAwMDAgKi8KICNkZWZpbmUgSURYX0lPX1NPTUVfVkFMVUUJMHg2OAkvKiB0aGlzIGlzIHNldCB0byBlLmcuIDB4M2ZmIG9yIDB4MzAwLCBhbmQgd3JpdGFibGU7IG1heWJlIHNvbWUgYnVmZmVyIGxpbWl0LCBidXQgSSBjb3VsZG4ndCBmaW5kIG91dCBtb3JlLCBQVToweDAwZmYgKi8KICNkZWZpbmUgSURYX0lPXzZBSAkJMHg2QQkvKiB0aGlzIFdPUkQgY2FuIGJlIHNldCB0byBoYXZlIGJpdHMgMHgwMDI4IGFjdGl2YXRlZCAoRklYTUU6IGNvcnJlY3Q/Pyk7IGFjdHVhbGx5IGluaGliaXRzIFBDTSBwbGF5YmFjayEhISBtYXliZSBwb3dlciBtYW5hZ2VtZW50Pz8gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggZTliMDI5ZS4uNjUyM2JhMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTc4MSw2ICs3ODEsOCBAQAogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzksIDB4MDA3MCwgMHgxM2ViLCAzMjAwMCksCiAJLyogVmlld2Nhc3QgT3NwcmV5IDIwMCAqLwogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MDA3MCwgMHhmZjAxLCA0NDEwMCksCisJLyogQVRJIFRWLVdvbmRlciAqLworCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTAwMiwgMHgwMDAxLCAzMjAwMCksCiAJLyogTGVhZHRlayBXaW5mYXN0IHR2IDIwMDB4cCBkZWx1eCAqLwogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTA3ZCwgMHg2NjA2LCAzMjAwMCksCiAJLyogVm9vZG9vIFRWIDIwMCAqLwpAQCAtODMzLDcgKzgzNSw3IEBACiAJICAgICAgICAgICBwY2ktPmRldmljZSwgcGNpLT5zdWJzeXN0ZW1fdmVuZG9yLCBwY2ktPnN1YnN5c3RlbV9kZXZpY2UpOwogCXNuZF9wcmludGsoS0VSTl9ERUJVRyAicGxlYXNlIG1haWwgaWQsIGJvYXJkIG5hbWUsIGFuZCwgIgogCQkgICAiaWYgaXQgd29ya3MsIHRoZSBjb3JyZWN0IGRpZ2l0YWxfcmF0ZSBvcHRpb24gdG8gIgotCQkgICAiPGFsc2EtZGV2ZWxAbGlzdHMuc2YubmV0PlxuIik7CisJCSAgICI8YWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnPlxuIik7CiAJcmV0dXJuIDMyMDAwOyAvKiBkZWZhdWx0IHJhdGUgKi8KIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCmluZGV4IGVhNjcxMmIuLjQ4ZjNmMTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYworKysgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKQEAgLTc3NSw3ICs3NzUsNiBAQAogCXN0cnVjdCBzbmRfY2EwMTA2X3BjbSAqZXBjbTsKIAlpbnQgY2hhbm5lbDsKIAlpbnQgcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKIAl1MzIgYmFzaWMgPSAwOwogCXUzMiBleHRlbmRlZCA9IDA7CkBAIC03OTAsOCArNzg5LDcgQEAKIAkJcnVubmluZz0wOwogCQlicmVhazsKIAl9Ci0gICAgICAgIHNuZF9wY21fZ3JvdXBfZm9yX2VhY2gocG9zLCBzdWJzdHJlYW0pIHsKLSAgICAgICAgICAgICAgICBzID0gc25kX3BjbV9ncm91cF9zdWJzdHJlYW1fZW50cnkocG9zKTsKKyAgICAgICAgc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKIAkJcnVudGltZSA9IHMtPnJ1bnRpbWU7CiAJCWVwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJCWNoYW5uZWwgPSBlcGNtLT5jaGFubmVsX2lkOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwppbmRleCAyYWU1MzliLi5iZWYxZjZkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwpAQCAtMzEwNyw3ICszMTA3LDcgQEAKIAlzbmRfcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogc25kLWNzNDZ4eDogbmV2ZXIgcmVhZCBJU1YzICYgSVNWNCBmcm9tIEFDJzk3XG4iKTsKIAlzbmRfcHJpbnRrKEtFUk5fRVJSICIgICAgICAgVHJ5IHJlbG9hZGluZyB0aGUgQUxTQSBkcml2ZXIsIGlmIHlvdSBmaW5kIHNvbWV0aGluZ1xuIik7CiAgICAgICAgIHNuZF9wcmludGsoS0VSTl9FUlIgIiAgICAgICBicm9rZW4gb3Igbm90IHdvcmtpbmcgb24geW91ciBzb3VuZGNhcmQgdXBvblxuIik7Ci0Jc25kX3ByaW50ayhLRVJOX0VSUiAiICAgICAgIHRoaXMgbWVzc2FnZSBwbGVhc2UgcmVwb3J0IHRvIGFsc2EtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0XG4iKTsKKwlzbmRfcHJpbnRrKEtFUk5fRVJSICIgICAgICAgdGhpcyBtZXNzYWdlIHBsZWFzZSByZXBvcnQgdG8gYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnXG4iKTsKIAogCXJldHVybiAtRUlPOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2ltZ3MvY3djZW1iODAuaCBiL3NvdW5kL3BjaS9jczQ2eHgvaW1ncy9jd2NlbWI4MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjRjNmZmLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvaW1ncy9jd2NlbWI4MC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYwNyArMCwwIEBACi0vKiBnZW5lcmF0ZWQgZnJvbSBjd2NlbWI4MC5vc3AgRE8gTk9UIE1PRElGWSAqLwotCi0jaWZuZGVmIF9fSEVBREVSX2N3Y2VtYjgwX0hfXwotI2RlZmluZSBfX0hFQURFUl9jd2NlbWI4MF9IX18KLQotc3RhdGljIHN0cnVjdCBkc3Bfc3ltYm9sX2VudHJ5IGN3Y2VtYjgwX3N5bWJvbHNbXSA9IHsKLSAgeyAweDAwMDAsICJCRUdJTkFERFJFU1MiLDB4MDAgfSwKLSAgeyAweDgwMDAsICJFWEVDQ0hJTEQiLDB4MDMgfSwKLSAgeyAweDgwMDEsICJFWEVDQ0hJTERfOTgiLDB4MDMgfSwKLSAgeyAweDgwMDMsICJFWEVDQ0hJTERfUFVTSDFJTkQiLDB4MDMgfSwKLSAgeyAweDgwMDgsICJFWEVDU0lCTElORyIsMHgwMyB9LAotICB7IDB4ODAwYSwgIkVYRUNTSUJMSU5HXzI5OCIsMHgwMyB9LAotICB7IDB4ODAwYiwgIkVYRUNTSUJMSU5HXzJJTkQxIiwweDAzIH0sCi0gIHsgMHg4MDEwLCAiVElNSU5HTUFTVEVSIiwweDAzIH0sCi0gIHsgMHg4MDRmLCAiUzE2X0NPREVDSU5QVVRUQVNLIiwweDAzIH0sCi0gIHsgMHg4MDVlLCAiUENNU0VSSUFMSU5QVVRUQVNLIiwweDAzIH0sCi0gIHsgMHg4MDZkLCAiUzE2X01JWF9UT19PU1RSRUFNIiwweDAzIH0sCi0gIHsgMHg4MDlhLCAiUzE2X01JWCIsMHgwMyB9LAotICB7IDB4ODBiYiwgIlMxNl9VUFNSQyIsMHgwMyB9LAotICB7IDB4ODEzYiwgIk1JWDNfRVhQIiwweDAzIH0sCi0gIHsgMHg4MTY0LCAiREVDSU1BVEVCWVBPVzIiLDB4MDMgfSwKLSAgeyAweDgxOTcsICJWQVJJREVDSU1BVEUiLDB4MDMgfSwKLSAgeyAweDgxZjIsICJfM0RJTlBVVFRBU0siLDB4MDMgfSwKLSAgeyAweDgyMGEsICJfM0RQUkxHQ0lOUFRBU0siLDB4MDMgfSwKLSAgeyAweDgyMjcsICJfM0RTVEVSRU9JTlBVVFRBU0siLDB4MDMgfSwKLSAgeyAweDgyNDIsICJfM0RPVVRQVVRUQVNLIiwweDAzIH0sCi0gIHsgMHg4MmM0LCAiSFJURl9NT1JQSF9UQVNLIiwweDAzIH0sCi0gIHsgMHg4MmM2LCAiV0FJVDREQVRBIiwweDAzIH0sCi0gIHsgMHg4MmZhLCAiUFJPTE9HSUMiLDB4MDMgfSwKLSAgeyAweDg0OTYsICJERUNPUlJFTEFUT1IiLDB4MDMgfSwKLSAgeyAweDg0YTQsICJTVEVSRU8yTU9OTyIsMHgwMyB9LAotICB7IDB4MDA3MCwgIlNQT1NDQiIsMHgwMiB9LAotICB7IDB4MDEwNSwgIlRBU0tUUkVFVEhSRUFEIiwweDAzIH0sCi0gIHsgMHgwMTM2LCAiVEFTS1RSRUVIRUFERVJDT0RFIiwweDAzIH0sCi0gIHsgMHgwMTNmLCAiRkdUQVNLVFJFRUhFQURFUkNPREUiLDB4MDMgfSwKLSAgeyAweDAxNjMsICJOVUxMQUxHT1JJVEhNIiwweDAzIH0sCi0gIHsgMHgwMTY3LCAiSEZHRVhFQ0NISUxEIiwweDAzIH0sCi0gIHsgMHgwMTY4LCAiSEZHRVhFQ0NISUxEXzk4IiwweDAzIH0sCi0gIHsgMHgwMTZhLCAiSEZHRVhFQ0NISUxEX1BVU0gxSU5EIiwweDAzIH0sCi0gIHsgMHgwMTZkLCAiSEZHRVhFQ1NJQkxJTkciLDB4MDMgfSwKLSAgeyAweDAxNmYsICJIRkdFWEVDU0lCTElOR18yOTgiLDB4MDMgfSwKLSAgeyAweDAxNzAsICJIRkdFWEVDU0lCTElOR18ySU5EMSIsMHgwMyB9LAotICB7IDB4MDE3MywgIlMxNl9DT0RFQ09VVFBVVFRBU0siLDB4MDMgfSwKLSAgeyAweDAxOGUsICIjQ09ERV9FTkQiLDB4MDAgfSwKLX07IC8qIGN3Y2VtYjgwIHN5bWJvbHMgKi8KLQotc3RhdGljIHUzMiBjd2NlbWI4MF9jb2RlW10gPSB7Ci0vKiBCRUdJTkFERFJFU1MgKi8KLS8qIDAwMDAgKi8gMHgwMDA0MDczMCwweDAwMDAxMDAyLDB4MDAwZjYxOWUsMHgwMDAwMTAwMywKLS8qIDAwMDIgKi8gMHgwMDAwMTcwNSwweDAwMDAxNDAwLDB4MDAwYTQxMWUsMHgwMDAwMTAwMywKLS8qIDAwMDQgKi8gMHgwMDA0MDczMCwweDAwMDAxMDAyLDB4MDAwZjYxOWUsMHgwMDAwMTAwMywKLS8qIDAwMDYgKi8gMHgwMDAwOTcwNSwweDAwMDAxNDAwLDB4MDAwYTQxMWUsMHgwMDAwMTAwMywKLS8qIDAwMDggKi8gMHgwMDA0MDczMCwweDAwMDAxMDAyLDB4MDAwZjYxOWUsMHgwMDAwMTAwMywKLS8qIDAwMEEgKi8gMHgwMDAxMTcwNSwweDAwMDAxNDAwLDB4MDAwYTQxMWUsMHgwMDAwMTAwMywKLS8qIDAwMEMgKi8gMHgwMDA0MDczMCwweDAwMDAxMDAyLDB4MDAwZjYxOWUsMHgwMDAwMTAwMywKLS8qIDAwMEUgKi8gMHgwMDAxOTcwNSwweDAwMDAxNDAwLDB4MDAwYTQxMWUsMHgwMDAwMTAwMywKLS8qIDAwMTAgKi8gMHgwMDA0MDczMCwweDAwMDAxMDAyLDB4MDAwZjYxOWUsMHgwMDAwMTAwMywKLS8qIDAwMTIgKi8gMHgwMDAyMTcwNSwweDAwMDAxNDAwLDB4MDAwYTQxMWUsMHgwMDAwMTAwMywKLS8qIDAwMTQgKi8gMHgwMDA0MDczMCwweDAwMDAxMDAyLDB4MDAwZjYxOWUsMHgwMDAwMTAwMywKLS8qIDAwMTYgKi8gMHgwMDAyOTcwNSwweDAwMDAxNDAwLDB4MDAwYTQxMWUsMHgwMDAwMTAwMywKLS8qIDAwMTggKi8gMHgwMDA0MDczMCwweDAwMDAxMDAyLDB4MDAwZjYxOWUsMHgwMDAwMTAwMywKLS8qIDAwMUEgKi8gMHgwMDAzMTcwNSwweDAwMDAxNDAwLDB4MDAwYTQxMWUsMHgwMDAwMTAwMywKLS8qIDAwMUMgKi8gMHgwMDA0MDczMCwweDAwMDAxMDAyLDB4MDAwZjYxOWUsMHgwMDAwMTAwMywKLS8qIDAwMUUgKi8gMHgwMDAzOTcwNSwweDAwMDAxNDAwLDB4MDAwYTQxMWUsMHgwMDAwMTAwMywKLS8qIDAwMjAgKi8gMHgwMDBmZTE5ZSwweDAwMDAxMDAzLDB4MDAwOWM3MzAsMHgwMDAwMTAwMywKLS8qIDAwMjIgKi8gMHgwMDA4ZTE5YywweDAwMDAxMDAzLDB4MDAwMDgzYzEsMHgwMDA5MzA0MCwKLS8qIDAwMjQgKi8gMHgwMDA5ODczMCwweDAwMDAxMDAyLDB4MDAwZWUxOWUsMHgwMDAwMTAwMywKLS8qIDAwMjYgKi8gMHgwMDAwOTcwNSwweDAwMDAxNDAwLDB4MDAwYTIxMWUsMHgwMDAwMTAwMywKLS8qIDAwMjggKi8gMHgwMDA5ODczMCwweDAwMDAxMDAyLDB4MDAwZWUxOWUsMHgwMDAwMTAwMywKLS8qIDAwMkEgKi8gMHgwMDAxMTcwNSwweDAwMDAxNDAwLDB4MDAwYTIxMWUsMHgwMDAwMTAwMywKLS8qIDAwMkMgKi8gMHgwMDA5ODczMCwweDAwMDAxMDAyLDB4MDAwZWUxOWUsMHgwMDAwMTAwMywKLS8qIDAwMkUgKi8gMHgwMDAxOTcwNSwweDAwMDAxNDAwLDB4MDAwYTIxMWUsMHgwMDAwMTAwMywKLS8qIDAwMzAgKi8gMHgwMDA5ODczMCwweDAwMDAxMDAyLDB4MDAwZWUxOWUsMHgwMDAwMTAwMywKLS8qIDAwMzIgKi8gMHgwMDAyMTcwNSwweDAwMDAxNDAwLDB4MDAwYTIxMWUsMHgwMDAwMTAwMywKLS8qIDAwMzQgKi8gMHgwMDA5ODczMCwweDAwMDAxMDAyLDB4MDAwZWUxOWUsMHgwMDAwMTAwMywKLS8qIDAwMzYgKi8gMHgwMDAyOTcwNSwweDAwMDAxNDAwLDB4MDAwYTIxMWUsMHgwMDAwMTAwMywKLS8qIDAwMzggKi8gMHgwMDA5ODczMCwweDAwMDAxMDAyLDB4MDAwZWUxOWUsMHgwMDAwMTAwMywKLS8qIDAwM0EgKi8gMHgwMDAzMTcwNSwweDAwMDAxNDAwLDB4MDAwYTIxMWUsMHgwMDAwMTAwMywKLS8qIDAwM0MgKi8gMHgwMDA5ODczMCwweDAwMDAxMDAyLDB4MDAwZWUxOWUsMHgwMDAwMTAwMywKLS8qIDAwM0UgKi8gMHgwMDAzOTcwNSwweDAwMDAxNDAwLDB4MDAwYTIxMWUsMHgwMDAwMTAwMywKLS8qIDAwNDAgKi8gMHgwMDAwYTczMCwweDAwMDAxMDA4LDB4MDAwZTI3MzAsMHgwMDAwMTAwMiwKLS8qIDAwNDIgKi8gMHgwMDAwYTczMSwweDAwMDAxMDAyLDB4MDAwMGE3MzEsMHgwMDAwMTAwMiwKLS8qIDAwNDQgKi8gMHgwMDAwYTczMSwweDAwMDAxMDAyLDB4MDAwMGE3MzEsMHgwMDAwMTAwMiwKLS8qIDAwNDYgKi8gMHgwMDAwYTczMSwweDAwMDAxMDAyLDB4MDAwMGE3MzEsMHgwMDAwMTAwMiwKLS8qIDAwNDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwZjYxOWMsMHgwMDAwMTAwMywKLS8qIDAwNEEgKi8gMHgwMDA3ZjgwMSwweDAwMGMwMDAwLDB4MDAwMDAwMzcsMHgwMDAwMTAwMCwKLS8qIDAwNEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNEUgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNTAgKi8gMHgwMDAwMDAwMCwweDAwMGMwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNTIgKi8gMHgwMDAwMzczYywweDAwMDAxMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNTQgKi8gMHgwMDBlZTE5YywweDAwMDAxMDAzLDB4MDAwN2Y4MDEsMHgwMDBjMDAwMCwKLS8qIDAwNTYgKi8gMHgwMDAwMDAzNywweDAwMDAxMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNUEgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDI3M2MsMHgwMDAwMTAwMCwKLS8qIDAwNUMgKi8gMHgwMDAwMDAzMywweDAwMDAxMDAwLDB4MDAwZTY3OWUsMHgwMDAwMTAwMywKLS8qIDAwNUUgKi8gMHgwMDAwNzcwNSwweDAwMDAxNDAwLDB4MDAwYWM3MWUsMHgwMDAwMTAwMywKLS8qIDAwNjAgKi8gMHgwMDA4N2ZjMSwweDAwMGMzYmUwLDB4MDAwN2Y4MDEsMHgwMDBjMDAwMCwKLS8qIDAwNjIgKi8gMHgwMDAwMDAzNywweDAwMDAxMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNjYgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE3MzAsMHgwMDAwMTAwMywKLS8qIDAwNjggKi8gMHgwMDAwMDAzMywweDAwMDAxMDAwLDB4MDAwN2Y4MDEsMHgwMDBjMDAwMCwKLS8qIDAwNkEgKi8gMHgwMDAwMDAzNywweDAwMDAxMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNkUgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDBjMDAwMCwKLS8qIDAwNzAgKi8gMHgwMDAwMDAzMiwweDAwMDAxMDAwLDB4MDAwMDI3M2QsMHgwMDAwMTAwMCwKLS8qIDAwNzIgKi8gMHgwMDA0YTczMCwweDAwMDAxMDAzLDB4MDAwMDBmNDEsMHgwMDA5NzE0MCwKLS8qIDAwNzQgKi8gMHgwMDAwYTg0MSwweDAwMDliMjQwLDB4MDAwMGEwYzEsMHgwMDA5ZjA0MCwKLS8qIDAwNzYgKi8gMHgwMDAxYzY0MSwweDAwMDkzNTQwLDB4MDAwMWNlYzEsMHgwMDA5YjVjMCwKLS8qIDAwNzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMWJmMDUsMHgwMDAzZmM0MCwKLS8qIDAwN0EgKi8gMHgwMDAwMjcyNSwweDAwMGFhNDAwLDB4MDAwMTM3MDUsMHgwMDA5M2EwMCwKLS8qIDAwN0MgKi8gMHgwMDAwMDAyZSwweDAwMDlkNmMwLDB4MDAwMzg2MzAsMHgwMDAwMTAwNCwKLS8qIDAwN0UgKi8gMHgwMDA0ZWYwYSwweDAwMGViNzg1LDB4MDAwM2ZjOGEsMHgwMDAwMDAwMCwKLS8qIDAwODAgKi8gMHgwMDAwMDAwMCwweDAwMGM3MGUwLDB4MDAwN2QxODIsMHgwMDAyYzY0MCwKLS8qIDAwODIgKi8gMHgwMDAwMDYzMCwweDAwMDAxMDA0LDB4MDAwNzk5YjgsMHgwMDAyYzZjMCwKLS8qIDAwODQgKi8gMHgwMDAzMTcwNSwweDAwMDkyMjQwLDB4MDAwMzlmMDUsMHgwMDA5MzJjMCwKLS8qIDAwODYgKi8gMHgwMDAzNTIwYSwweDAwMDAwMDAwLDB4MDAwNDA3MzEsMHgwMDAwMTAwYiwKLS8qIDAwODggKi8gMHgwMDAxMDcwNSwweDAwMGIyMGMwLDB4MDAwMDAwMDAsMHgwMDBlYmE0NCwKLS8qIDAwOEEgKi8gMHgwMDAzMjEwOCwweDAwMGM2MGM0LDB4MDAwNjUyMDgsMHgwMDBjMjkxNywKLS8qIDAwOEMgKi8gMHgwMDA0MDZiMCwweDAwMDAxMDA3LDB4MDAwMTJmMDUsMHgwMDAzNjg4MCwKLS8qIDAwOEUgKi8gMHgwMDAyODE4ZSwweDAwMGMwMDAwLDB4MDAwNDQxMGEsMHgwMDAwMDAwMCwKLS8qIDAwOTAgKi8gMHgwMDA0MDYzMCwweDAwMDAxMDA3LDB4MDAwMjk3MDUsMHgwMDBjMDAwMCwKLS8qIDAwOTIgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDNmYzEsMHgwMDAzZmM0MCwKLS8qIDAwOTQgKi8gMHgwMDAwMzdjMSwweDAwMDkxYjQwLDB4MDAwMDNmYzEsMHgwMDA5MTFjMCwKLS8qIDAwOTYgKi8gMHgwMDAwMzdjMSwweDAwMDk1N2MwLDB4MDAwMDNmYzEsMHgwMDA5NTFjMCwKLS8qIDAwOTggKi8gMHgwMDAwMzdjMSwweDAwMDAwMDAwLDB4MDAwMDNmYzEsMHgwMDA5OTFjMCwKLS8qIDAwOUEgKi8gMHgwMDAwMzdjMSwweDAwMDAwMDAwLDB4MDAwMDNmYzEsMHgwMDA5ZDFjMCwKLS8qIDAwOUMgKi8gMHgwMDAwMzdjMSwweDAwMDAwMDAwLDB4MDAwMWNjYzEsMHgwMDA5MTVjMCwKLS8qIDAwOUUgKi8gMHgwMDAxYzQ0MSwweDAwMDlkODAwLDB4MDAwOWNkYzEsMHgwMDA5MTI0MCwKLS8qIDAwQTAgKi8gMHgwMDAxYzU0MSwweDAwMDkxZDAwLDB4MDAwOWNmYzEsMHgwMDA5NTI0MCwKLS8qIDAwQTIgKi8gMHgwMDAxYzc0MSwweDAwMDk1YzgwLDB4MDAwZThjYTksMHgwMDA5OTI0MCwKLS8qIDAwQTQgKi8gMHgwMDBlODVhZCwweDAwMDk1NjQwLDB4MDAwNjljYTksMHgwMDA5OWQ4MCwKLS8qIDAwQTYgKi8gMHgwMDBlOTUyZCwweDAwMDk5NjQwLDB4MDAwZWFjYTksMHgwMDA5ZDZjMCwKLS8qIDAwQTggKi8gMHgwMDBlYTVhZCwweDAwMDkxYTQwLDB4MDAwNmJjYTksMHgwMDA5ZGU4MCwKLS8qIDAwQUEgKi8gMHgwMDBlYjUyZCwweDAwMDk1YTQwLDB4MDAwZWNjYTksMHgwMDA5OWFjMCwKLS8qIDAwQUMgKi8gMHgwMDBlYzVhZCwweDAwMDlkYTQwLDB4MDAwZWRjYTksMHgwMDA5ZDMwMCwKLS8qIDAwQUUgKi8gMHgwMDBhNmUwYSwweDAwMDAxMDAwLDB4MDAwZWQ1MmQsMHgwMDA5MWU0MCwKLS8qIDAwQjAgKi8gMHgwMDBlZWNhOSwweDAwMDk1ZWMwLDB4MDAwZWU1YWQsMHgwMDA5OWU0MCwKLS8qIDAwQjIgKi8gMHgwMDA2ZmNhOSwweDAwMDAyNTAwLDB4MDAwZmIyMDgsMHgwMDBjNTlhMCwKLS8qIDAwQjQgKi8gMHgwMDBlZjUyZCwweDAwMDlkZTQwLDB4MDAwNjhjYTksMHgwMDA5MTJjMSwKLS8qIDAwQjYgKi8gMHgwMDA2ODNhZCwweDAwMDk1MjQxLDB4MDAwMjBmMDUsMHgwMDA5OTFjMSwKLS8qIDAwQjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwODZmODgsMHgwMDAwMTAwMCwKLS8qIDAwQkEgKi8gMHgwMDA5Y2Y4MSwweDAwMGI1MzQwLDB4MDAwOWM3MDEsMHgwMDBiOTJjMCwKLS8qIDAwQkMgKi8gMHgwMDA5ZGU4MSwweDAwMGJkMzAwLDB4MDAwOWQ2MDEsMHgwMDBiMTcwMCwKLS8qIDAwQkUgKi8gMHgwMDAxZmQ4MSwweDAwMGI5ZDgwLDB4MDAwOWY1MDEsMHgwMDBiNTdjMCwKLS8qIDAwQzAgKi8gMHgwMDBhMGY4MSwweDAwMGJkNzQwLDB4MDAwMjA3MDEsMHgwMDBiNWM4MCwKLS8qIDAwQzIgKi8gMHgwMDBhMTY4MSwweDAwMGI5N2MwLDB4MDAwMjE2MDEsMHgwMDAwMjUwMCwKLS8qIDAwQzQgKi8gMHgwMDBhMDcwMSwweDAwMGI5YjQwLDB4MDAwYTBmODEsMHgwMDBiMWJjMCwKLS8qIDAwQzYgKi8gMHgwMDAyMTY4MSwweDAwMDAyZDAwLDB4MDAwMjBmODEsMHgwMDBiZDgwMCwKLS8qIDAwQzggKi8gMHgwMDBhMDcwMSwweDAwMGI1YmMwLDB4MDAwMjE2MDEsMHgwMDAwMzUwMCwKLS8qIDAwQ0EgKi8gMHgwMDBhMGY4MSwweDAwMGI1ZjQwLDB4MDAwYTA3MDEsMHgwMDBiZGJjMCwKLS8qIDAwQ0MgKi8gMHgwMDAyMTY4MSwweDAwMDAzZDAwLDB4MDAwMjBmODEsMHgwMDBiMWQwMCwKLS8qIDAwQ0UgKi8gMHgwMDBhMDcwMSwweDAwMGIxZmMwLDB4MDAwMjE2MDEsMHgwMDAyMDUwMCwKLS8qIDAwRDAgKi8gMHgwMDAyMGY4MSwweDAwMGIxMzQxLDB4MDAwYTA3MDEsMHgwMDBiOWZjMCwKLS8qIDAwRDIgKi8gMHgwMDAyMTY4MSwweDAwMDIwZDAwLDB4MDAwMjBmODEsMHgwMDBiZGU4MCwKLS8qIDAwRDQgKi8gMHgwMDBhMDcwMSwweDAwMGJkZmMwLDB4MDAwMjE2MDEsMHgwMDAyMTUwMCwKLS8qIDAwRDYgKi8gMHgwMDAyMGY4MSwweDAwMGI5MzQxLDB4MDAwMjA3MDEsMHgwMDBiNTNjMSwKLS8qIDAwRDggKi8gMHgwMDAyMTY4MSwweDAwMDIxZDAwLDB4MDAwYTBmODEsMHgwMDBkMDM4MCwKLS8qIDAwREEgKi8gMHgwMDAwYjYwMSwweDAwMGIxNWMwLDB4MDAwMDdiMDEsMHgwMDAwMDAwMCwKLS8qIDAwREMgKi8gMHgwMDAwN2I4MSwweDAwMGJkMWMwLDB4MDAwMDdiMDEsMHgwMDAwMDAwMCwKLS8qIDAwREUgKi8gMHgwMDAwN2I4MSwweDAwMGI5MWMwLDB4MDAwMDdiMDEsMHgwMDBiNTdjMCwKLS8qIDAwRTAgKi8gMHgwMDAwN2I4MSwweDAwMGI1MWMwLDB4MDAwMDdiMDEsMHgwMDBiMWI0MCwKLS8qIDAwRTIgKi8gMHgwMDAwN2I4MSwweDAwMGIxMWMwLDB4MDAwODdiMDEsMHgwMDBjM2RjMCwKLS8qIDAwRTQgKi8gMHgwMDA3ZTQ4OCwweDAwMGQ3ZTQ1LDB4MDAwMDAwMDAsMHgwMDBkN2E0NCwKLS8qIDAwRTYgKi8gMHgwMDA3ZTQ4YSwweDAwMDAwMDAwLDB4MDAwMTFmMDUsMHgwMDA4NDA4MCwKLS8qIDAwRTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDE3MDUsMHgwMDBiMzU0MCwKLS8qIDAwRUEgKi8gMHgwMDAwOGEwMSwweDAwMGJmMDQwLDB4MDAwMDcwODEsMHgwMDBiYjVjMCwKLS8qIDAwRUMgKi8gMHgwMDA1NTQ4OCwweDAwMDAwMDAwLDB4MDAwMGQ0ODIsMHgwMDAzZmM0MCwKLS8qIDAwRUUgKi8gMHgwMDAzZmM4OCwweDAwMDAwMDAwLDB4MDAwMWU0MDEsMHgwMDBiM2EwMCwKLS8qIDAwRjAgKi8gMHgwMDAxZWM4MSwweDAwMGJkNmMwLDB4MDAwNGVmMDgsMHgwMDBlYjc4NCwKLS8qIDAwRjIgKi8gMHgwMDBjODZiMCwweDAwMDAxMDA3LDB4MDAwMDgyODEsMHgwMDBiYjI0MCwKLS8qIDAwRjQgKi8gMHgwMDAwYjgwMSwweDAwMGI3MTQwLDB4MDAwMDc4ODgsMHgwMDAwMDAwMCwKLS8qIDAwRjYgKi8gMHgwMDAwMDczYywweDAwMDAxMDAwLDB4MDAwN2YxODgsMHgwMDBjMDAwMCwKLS8qIDAwRjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwNTUyODgsMHgwMDBjNTU1YywKLS8qIDAwRkEgKi8gMHgwMDA1NTI4YSwweDAwMGMwMDAwLDB4MDAwOWZhODgsMHgwMDBjNWQwMCwKLS8qIDAwRkMgKi8gMHgwMDAwZmE4OCwweDAwMDAwMDAwLDB4MDAwMDAwMzIsMHgwMDAwMTAwMCwKLS8qIDAwRkUgKi8gMHgwMDAwMDczZCwweDAwMDAxMDAwLDB4MDAwN2YxODgsMHgwMDBjMDAwMCwKLS8qIDAxMDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwOGMwMWMsMHgwMDAwMTAwMywKLS8qIDAxMDIgKi8gMHgwMDAwMjcwNSwweDAwMDAxMDA4LDB4MDAwOGIyMDEsMHgwMDBjMTM5MiwKLS8qIDAxMDQgKi8gMHgwMDAwYmEwMSwweDAwMDAwMDAwLAotLyogVEFTS1RSRUVUSFJFQUQgKi8KLS8qIDAxMDUgKi8gMHgwMDAwODczMSwweDAwMDAxNDAwLDB4MDAwNGMxMDgsMHgwMDBmZTBjNCwKLS8qIDAxMDcgKi8gMHgwMDA1NzQ4OCwweDAwMDAwMDAwLDB4MDAwYTYzODgsMHgwMDAwMTAwMSwKLS8qIDAxMDkgKi8gMHgwMDA4YjMzNCwweDAwMGJjMTQxLDB4MDAwMzAyMGUsMHgwMDAwMDAwMCwKLS8qIDAxMEIgKi8gMHgwMDA4ODZiMCwweDAwMDAxMDA4LDB4MDAwMDM2MjUsMHgwMDBjNWRmYSwKLS8qIDAxMEQgKi8gMHgwMDBhNjM4YSwweDAwMDAxMDAxLDB4MDAwODAyMGUsMHgwMDAwMTAwMiwKLS8qIDAxMEYgKi8gMHgwMDA4YTZiMCwweDAwMDAxMDA4LDB4MDAwN2YzMDEsMHgwMDAwMDAwMCwKLS8qIDAxMTEgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDI3MjUsMHgwMDBhOGM0MCwKLS8qIDAxMTMgKi8gMHgwMDAwMDBhZSwweDAwMDAwMDAwLDB4MDAwZDg2MzAsMHgwMDAwMTAwOCwKLS8qIDAxMTUgKi8gMHgwMDAwMDAwMCwweDAwMGM3NGUwLDB4MDAwN2QxODIsMHgwMDAyZDY0MCwKLS8qIDAxMTcgKi8gMHgwMDBhODYzMCwweDAwMDAxMDA4LDB4MDAwNzk5YjgsMHgwMDAyZDZjMCwKLS8qIDAxMTkgKi8gMHgwMDAwNzQ4YSwweDAwMGMzZWM1LDB4MDAwNzQyMGEsMHgwMDBjMDAwMCwKLS8qIDAxMUIgKi8gMHgwMDA2MjIwOCwweDAwMGM0MTE3LDB4MDAwNzA2MzAsMHgwMDAwMTAwOSwKLS8qIDAxMUQgKi8gMHgwMDAwMDAwMCwweDAwMGMwMDAwLDB4MDAwMTAyMmUsMHgwMDAwMDAwMCwKLS8qIDAxMUYgKi8gMHgwMDAzYTYzMCwweDAwMDAxMDA5LDB4MDAwMDAwMDAsMHgwMDBjMDAwMCwKLS8qIDAxMjEgKi8gMHgwMDAwMDAzNiwweDAwMDAxMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMjMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMjUgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMmE3MzAsMHgwMDAwMTAwOCwKLS8qIDAxMjcgKi8gMHgwMDA3ZjgwMSwweDAwMGMwMDAwLDB4MDAwMDAwMzcsMHgwMDAwMTAwMCwKLS8qIDAxMjkgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMkIgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMkQgKi8gMHgwMDAyYTczMCwweDAwMDAxMDA4LDB4MDAwMDAwMzMsMHgwMDAwMTAwMCwKLS8qIDAxMkYgKi8gMHgwMDAyYTcwNSwweDAwMDAxMDA4LDB4MDAwMDdhMDEsMHgwMDBjMDAwMCwKLS8qIDAxMzEgKi8gMHgwMDBlNjI4OCwweDAwMGQ1NTBhLDB4MDAwNjQyOGEsMHgwMDAwMDAwMCwKLS8qIDAxMzMgKi8gMHgwMDA2MDczMCwweDAwMDAxMDBhLDB4MDAwMDAwMDAsMHgwMDBjMDAwMCwKLS8qIDAxMzUgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogVEFTS1RSRUVIRUFERVJDT0RFICovCi0vKiAwMTM2ICovIDB4MDAwN2FhYjAsMHgwMDAzNDg4MCwweDAwMDc4ZmIwLDB4MDAwMDEwMGIsCi0vKiAwMTM4ICovIDB4MDAwNTc0ODgsMHgwMDAwMDAwMCwweDAwMDMzYjk0LDB4MDAwODExNDAsCi0vKiAwMTNBICovIDB4MDAwMTgzYWUsMHgwMDAwMDAwMCwweDAwMDc4NmIwLDB4MDAwMDEwMGIsCi0vKiAwMTNDICovIDB4MDAwMjJmMDUsMHgwMDBjMzU0NSwweDAwMDBlYjhhLDB4MDAwMDAwMDAsCi0vKiAwMTNFICovIDB4MDAwNDI3MzEsMHgwMDAwMTAwMywKLS8qIEZHVEFTS1RSRUVIRUFERVJDT0RFICovCi0vKiAwMTNGICovIDB4MDAwN2FhYjAsMHgwMDAzNDg4MCwweDAwMDQ4ZmIwLDB4MDAwMDEwMGEsCi0vKiAwMTQxICovIDB4MDAwNTc0ODgsMHgwMDAwMDAwMCwweDAwMDMzYjk0LDB4MDAwODExNDAsCi0vKiAwMTQzICovIDB4MDAwMTgzYWUsMHgwMDAwMDAwMCwweDAwMDgwNmIwLDB4MDAwMDEwMGIsCi0vKiAwMTQ1ICovIDB4MDAwMjJmMDUsMHgwMDAwMDAwMCwweDAwMDA3NDAxLDB4MDAwOTExNDAsCi0vKiAwMTQ3ICovIDB4MDAwNDhmMDUsMHgwMDA5NTFjMCwweDAwMDQyNzMxLDB4MDAwMDEwMDMsCi0vKiAwMTQ5ICovIDB4MDAwMDQ3M2QsMHgwMDAwMTAwMCwweDAwMGYxOWIwLDB4MDAwYmJjNDcsCi0vKiAwMTRCICovIDB4MDAwODAwMDAsMHgwMDBiZmZjNywweDAwMGZlMTllLDB4MDAwMDEwMDMsCi0vKiAwMTREICovIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDhlMTljLDB4MDAwMDEwMDMsCi0vKiAwMTRGICovIDB4MDAwMDgzYzEsMHgwMDA5MzA0MCwweDAwMDAwZjQxLDB4MDAwOTcxNDAsCi0vKiAwMTUxICovIDB4MDAwMGE4NDEsMHgwMDA5YjI0MCwweDAwMDBhMGMxLDB4MDAwOWYwNDAsCi0vKiAwMTUzICovIDB4MDAwMWM2NDEsMHgwMDA5MzU0MCwweDAwMDFjZWMxLDB4MDAwOWI1YzAsCi0vKiAwMTU1ICovIDB4MDAwMDAwMDAsMHgwMDBmZGM0NCwweDAwMDU1MjA4LDB4MDAwMDAwMDAsCi0vKiAwMTU3ICovIDB4MDAwMTA3MDUsMHgwMDBhMjg4MCwweDAwMDBhMjNhLDB4MDAwOTNhMDAsCi0vKiAwMTU5ICovIDB4MDAwM2ZjOGEsMHgwMDBkZjZjNSwweDAwMDRlZjBhLDB4MDAwYzAwMDAsCi0vKiAwMTVCICovIDB4MDAwMTJmMDUsMHgwMDAzNjg4MCwweDAwMDY1MzA4LDB4MDAwYzI5OTcsCi0vKiAwMTVEICovIDB4MDAwZDg2YjAsMHgwMDAwMTAwYSwweDAwMDQ0MTBhLDB4MDAwZDQwYzcsCi0vKiAwMTVGICovIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDgwNzMwLDB4MDAwMDEwMDQsCi0vKiAwMTYxICovIDB4MDAwNTZmMGEsMHgwMDBlYTEwNSwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCi0vKiBOVUxMQUxHT1JJVEhNICovCi0vKiAwMTYzICovIDB4MDAwMDQ3M2QsMHgwMDAwMTAwMCwweDAwMGYxOWIwLDB4MDAwYmJjNDcsCi0vKiAwMTY1ICovIDB4MDAwODAwMDAsMHgwMDBiZmZjNywweDAwMDAyNzNkLDB4MDAwMDEwMDAsCi0vKiBIRkdFWEVDQ0hJTEQgKi8KLS8qIDAxNjcgKi8gMHgwMDAwMDAwMCwweDAwMGViYTQ0LAotLyogSEZHRVhFQ0NISUxEXzk4ICovCi0vKiAwMTY4ICovIDB4MDAwNDhmMDUsMHgwMDAwZjQ0MCwweDAwMDA3NDAxLDB4MDAwMGY3YzAsCi0vKiBIRkdFWEVDQ0hJTERfUFVTSDFJTkQgKi8KLS8qIDAxNkEgKi8gMHgwMDAwMDczNCwweDAwMDAxMDAwLDB4MDAwMTA3MDUsMHgwMDBhNjg4MCwKLS8qIDAxNkMgKi8gMHgwMDAwNmE4OCwweDAwMGM3NWM0LAotLyogSEZHRVhFQ1NJQkxJTkcgKi8KLS8qIDAxNkQgKi8gMHgwMDAwMDAwMCwweDAwMGU1MDg0LDB4MDAwMDAwMDAsMHgwMDBlYmE0NCwKLS8qIEhGR0VYRUNTSUJMSU5HXzI5OCAqLwotLyogMDE2RiAqLyAweDAwMDg3NDAxLDB4MDAwZTQ3ODIsCi0vKiBIRkdFWEVDU0lCTElOR18ySU5EMSAqLwotLyogMDE3MCAqLyAweDAwMDAwNzM0LDB4MDAwMDEwMDAsMHgwMDAxMDcwNSwweDAwMGE2ODgwLAotLyogMDE3MiAqLyAweDAwMDA2YTg4LDB4MDAwYzc1YzQsCi0vKiBTMTZfQ09ERUNPVVRQVVRUQVNLICovCi0vKiAwMTczICovIDB4MDAwN2MxMDgsMHgwMDBjMDAwMCwweDAwMDdlNzIxLDB4MDAwYmVkNDAsCi0vKiAwMTc1ICovIDB4MDAwMDVmMjUsMHgwMDBiYWRjMCwweDAwMDNiYTk3LDB4MDAwYmViODAsCi0vKiAwMTc3ICovIDB4MDAwNjU1OTAsMHgwMDBiMmUwMCwweDAwMDMzMjE3LDB4MDAwMDNlYzAsCi0vKiAwMTc5ICovIDB4MDAwNjU1OTAsMHgwMDBiOGU0MCwweDAwMDNlZDgwLDB4MDAwNDkxYzAsCi0vKiAwMTdCICovIDB4MDAwNzNmYjAsMHgwMDA3NGM4MCwweDAwMDI4M2EwLDB4MDAwMDEwMGMsCi0vKiAwMTdEICovIDB4MDAwZWUzODgsMHgwMDA0Mjk3MCwweDAwMDA4MzAxLDB4MDAwMjFlZjIsCi0vKiAwMTdGICovIDB4MDAwYjhmMTQsMHgwMDAwMDAwZiwweDAwMGM0ZDhkLDB4MDAwMDAwMWIsCi0vKiAwMTgxICovIDB4MDAwZDZkYzIsMHgwMDBlMDZjNiwweDAwMDAzMmFjLDB4MDAwYzM5MTYsCi0vKiAwMTgzICovIDB4MDAwNGVkYzIsMHgwMDA3NGM4MCwweDAwMDc4ODk4LDB4MDAwMDEwMDAsCi0vKiAwMTg1ICovIDB4MDAwMzg4OTQsMHgwMDAwMDAzMiwweDAwMGM0ZDhkLDB4MDAwOTJlMWIsCi0vKiAwMTg3ICovIDB4MDAwZDZkYzIsMHgwMDBlMDZjNiwweDAwMDRlZGMyLDB4MDAwYzE5NTYsCi0vKiAwMTg5ICovIDB4MDAwMDcyMmMsMHgwMDAzNGEwMCwweDAwMDQxNzA1LDB4MDAwOWVkNDAsCi0vKiAwMThCICovIDB4MDAwNTg3MzAsMHgwMDAwMTQwMCwweDAwMGQ3NDg4LDB4MDAwYzNhMDAsCi0vKiAwMThEICovIDB4MDAwNDhmMDUsMHgwMDAwMDAwMAotfTsKLS8qICNDT0RFX0VORCAqLwotCi1zdGF0aWMgdTMyIGN3Y2VtYjgwX3BhcmFtZXRlcltdID0gewotLyogMDAwMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDAwNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDAwOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDE2MywweDAwMDAwMDAwLAotLyogMDAwQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDAxMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDAxNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDAxOCAqLyAweDAwMDAwMDAwLDB4MDAyMDAwNDAsMHgwMDAwODAxMCwweDAwMDAwMDAwLAotLyogMDAxQyAqLyAweDAwMDAwMDAwLDB4ODAwMDAwMDEsMHgwMDAwMDAwMSwweDAwMDYwMDAwLAotLyogMDAyMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDAyNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDAyOCAqLyAweDAwMDAwMDAwLDB4MDA5MDAwODAsMHgwMDAwMDE3MywweDAwMDAwMDAwLAotLyogMDAyQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDgwMDAwMCwweDAwOTAwMDAwLAotLyogMDAzMCAqLyAweGYyYzAwMDBmLDB4MDAwMDAyMDAsMHgwMDAwMDAwMCwweDAwMDEwNjAwLAotLyogMDAzNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDAzOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDE2MywweDMzMDMwMGMyLAotLyogMDAzQyAqLyAweDA2MDAwMDAwLDB4MDAwMDAwMDAsMHg4MDAwODAwMCwweDgwMDA4MDAwLAotLyogMDA0MCAqLyAweDNmYzAwMDBmLDB4MDAwMDAzMDEsMHgwMDAxMDQwMCwweDAwMDAwMDAwLAotLyogMDA0NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA0OCAqLyAweDAwMDAwMDAwLDB4MDBiMDAwMDAsMHgwMGQwODA2ZCwweDMzMDQ4MGMzLAotLyogMDA0QyAqLyAweDA0ODAwMDAwLDB4MDAwMDAwMDEsMHgwMDgwMDAwMSwweDAwMDBmZmZmLAotLyogMDA1MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA1NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA1OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA1QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA2MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA2NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA2OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA2QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA3MCAqLyAweDA2NmEwNjAwLDB4MDYzNTAwNzAsMHgwMDAwOTI5ZCwweDkyOWQ5MjlkLAotLyogMDA3NCAqLyAweDAwMDAwMDAwLDB4MDAwMDczNWEsMHgwMDAwMDYwMCwweDAwMDAwMDAwLAotLyogMDA3OCAqLyAweDkyOWQ3MzVhLDB4MDAwMDAwMDAsMHgwMDAxMDAwMCwweDczNWE3MzVhLAotLyogMDA3QyAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDA4MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA4NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA4OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwODA0ZiwweDAwMDAwMGMzLAotLyogMDA4QyAqLyAweDA1MDAwMDAwLDB4MDBhMDAwMTAsMHgwMDAwMDAwMCwweDgwMDA4MDAwLAotLyogMDA5MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDcwMCwweDAwMDAwMDAwLAotLyogMDA5NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDA5OCAqLyAweDAwMDAwMDgwLDB4MDBhMDAwMDAsMHgwMDAwODA5YSwweDAwMDAwMGMyLAotLyogMDA5QyAqLyAweDA3NDAwMDAwLDB4MDAwMDAwMDAsMHg4MDAwODAwMCwweGZmZmZmZmZmLAotLyogMDBBMCAqLyAweDAwYzgwMDI4LDB4MDAwMDU1NTUsMHgwMDAwMDAwMCwweDAwMDEwN2EwLAotLyogMDBBNCAqLyAweDAwYzgwMDI4LDB4MDAwMDAwYzIsMHgwNjgwMDAwMCwweDAwMDAwMDAwLAotLyogMDBBOCAqLyAweDA2ZTAwMDgwLDB4MDAzMDAwMDAsMHgwMDAwODBiYiwweDAwMDAwMGM5LAotLyogMDBBQyAqLyAweDA3YTAwMDAwLDB4MDQwMDAwMDAsMHg4MDAwODAwMCwweGZmZmZmZmZmLAotLyogMDBCMCAqLyAweDAwYzgwMDI4LDB4MDAwMDU1NTUsMHgwMDAwMDAwMCwweDAwMDAwNzgwLAotLyogMDBCNCAqLyAweDAwYzgwMDI4LDB4MDAwMDAwYzUsMHhmZjgwMDAwMCwweDAwMDAwMDAwLAotLyogMDBCOCAqLyAweDAwNjQwMDgwLDB4MDBjMDAwMDAsMHgwMDAwODE5NywweDAwMDAwMGM5LAotLyogMDBCQyAqLyAweDA3ODAwMDAwLDB4MDQwMDAwMDAsMHg4MDAwODAwMCwweGZmZmZmZmZmLAotLyogMDBDMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBDNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBDOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwODA1ZSwweDAwMDAwMGMxLAotLyogMDBDQyAqLyAweDAwMDAwMDAwLDB4MDA4MDAwMDAsMHg4MDAwODAwMCwweDgwMDA4MDAwLAotLyogMDBEMCAqLyAweDAwMDIwMDAwLDB4MDAwMGZmZmYsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBENCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBEOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBEQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBFMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBFNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBFOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBFQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBGMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBGNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBGOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDBGQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEwMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEwNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEwOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEwQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDExMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDExNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDExOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDExQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEyMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEyNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEyOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEyQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEzMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEzNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEzOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDEzQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE0MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE0NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE0OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE0QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE1MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE1NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE1OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE1QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE2MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE2NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE2OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE2QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE3MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE3NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE3OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE3QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE4MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE4NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE4OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE4QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE5MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE5NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE5OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDE5QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFBMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFBNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFBOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFBQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFCMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFCNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFCOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFCQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFDMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFDNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFDOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFDQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFEMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFENCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFEOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFEQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFFMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFFNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFFOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFFQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFGMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFGNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFGOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDFGQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIwMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIwNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIwOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIwQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIxMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIxNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIxOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIxQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIyMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIyNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIyOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIyQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIzMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIzNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIzOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDIzQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI0MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI0NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI0OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI0QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI1MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI1NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI1OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI1QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI2MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI2NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI2OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI2QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI3MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI3NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI3OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI3QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI4MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI4NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI4OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI4QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI5MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI5NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI5OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDI5QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJBMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJBNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJBOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJBQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJCMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJCNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJCOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJCQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJDMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJDNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJDOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJDQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJEMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJENCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJEOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJEQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJFMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJFNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJFOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJFQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJGMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJGNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJGOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDJGQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMwMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMwNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMwOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMwQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMxMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMxNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMxOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMxQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMyMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMyNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMyOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMyQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMzMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMzNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMzOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDMzQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM0MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM0NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM0OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM0QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM1MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM1NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM1OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM1QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM2MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM2NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM2OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM2QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM3MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM3NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM3OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM3QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM4MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM4NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM4OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM4QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM5MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM5NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM5OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDM5QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNBMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNBNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNBOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNBQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNCMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNCNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNCOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNCQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNDMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNDNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNDOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNDQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNEMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNENCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNEOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNEQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNFMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNFNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNFOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNFQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNGMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNGNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNGOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDNGQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQwMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQwNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQwOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQwQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQxMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQxNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQxOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQxQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQyMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQyNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQyOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQyQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQzMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQzNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQzOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQzQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ0MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ0NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ0OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ0QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ1MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ1NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ1OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ1QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ2MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ2NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ2OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ2QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ3MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ3NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ3OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ3QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ4MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ4NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ4OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ4QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ5MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ5NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ5OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDQ5QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRBMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRBNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRBOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRBQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRCMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRCNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRCOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRCQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRDMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRDNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRDOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRDQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDREMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRENCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDREOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDREQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRFMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRFNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRFOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRFQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRGMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRGNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRGOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDRGQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUwMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUwNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUwOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUwQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUxMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUxNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUxOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUxQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUyMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUyNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUyOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUyQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUzMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUzNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUzOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDUzQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU0MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU0NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU0OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU0QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU1MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU1NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU1OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU1QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU2MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU2NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU2OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU2QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU3MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU3NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU3OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU3QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU4MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU4NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU4OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU4QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU5MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU5NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU5OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDU5QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVBMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVBNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVBOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVBQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVCMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVCNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVCOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVCQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVDMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVDNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVDOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVDQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVEMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVENCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVEOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVEQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVFMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVFNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVFOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVFQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVGMCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVGNCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVGOCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDVGQyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDYwMCAqLyAweDkyOWQwNjAwLDB4OTI5ZDkyOWQsMHg5MjlkOTI5ZCwweDkyOWQwMDAwLAotLyogMDYwNCAqLyAweDkyOWQ5MjlkLDB4OTI5ZDkyOWQsMHg5MjlkOTI5ZCwweDkyOWQ5MjlkLAotLyogMDYwOCAqLyAweDkyOWQ5MjlkLDB4MDAxMDA2MzUsMHgwNjBiMDEzZiwweDAwMDAwMDA0LAotLyogMDYwQyAqLyAweDAwMDAwMDAxLDB4MDA3YTAwMDIsMHgwMDAwMDAwMCwweDA2NmUwNjEwLAotLyogMDYxMCAqLyAweDAxMDU5MjlkLDB4OTI5ZDkyOWQsMHg5MjlkOTI5ZCwweDkyOWQ5MjlkLAotLyogMDYxNCAqLyAweDkyOWQ5MjlkLDB4YTQzMWFjNzUsMHgwMDAxNzM1YSwweGE0MzFhYzc1LAotLyogMDYxOCAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDYxQyAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDYyMCAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDYyNCAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDYyOCAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDYyQyAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDYzMCAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweDczNWEwMDUxLAotLyogMDYzNCAqLyAweDAwMDAwMDAwLDB4OTI5ZDkyOWQsMHg5MjlkOTI5ZCwweDkyOWQ5MjlkLAotLyogMDYzOCAqLyAweDkyOWQ5MjlkLDB4OTI5ZDkyOWQsMHg5MjlkOTI5ZCwweDkyOWQ5MjlkLAotLyogMDYzQyAqLyAweDkyOWQ5MjlkLDB4OTI5ZDkyOWQsMHgwMDAwMDAwMCwweDA2NDAwMTM2LAotLyogMDY0MCAqLyAweDAwMDAyNzBmLDB4MDAwMTAwMDAsMHgwMDdhMDAwMCwweDAwMDAwMDAwLAotLyogMDY0NCAqLyAweDA2OGUwNjQ1LDB4MDEwNTkyOWQsMHg5MjlkOTI5ZCwweDkyOWQ5MjlkLAotLyogMDY0OCAqLyAweDkyOWQ5MjlkLDB4OTI5ZDkyOWQsMHhhNDMxYWM3NSwweDAwMDE3MzVhLAotLyogMDY0QyAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDY1MCAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDY1NCAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDY1OCAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDY1QyAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDY2MCAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDY2NCAqLyAweGE0MzFhYzc1LDB4YTQzMWFjNzUsMHhhNDMxYWM3NSwweGE0MzFhYzc1LAotLyogMDY2OCAqLyAweDczNWEwMTAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDY2QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDY3MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDY3NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDY3OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDY3QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDY4MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDY4NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDY4OCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDY4QyAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDY5MCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAotLyogMDY5NCAqLyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAotfTsgLyogI1BBUkFNRVRFUl9FTkQgKi8KLQotc3RhdGljIHUzMiBjd2NlbWI4MF9zYW1wbGVbXSA9IHsKLS8qIDAwMDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwMzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwM0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwNzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwN0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwOEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwOTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwOTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwOTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwOUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwQ0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwRDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwRDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwRDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwREMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwRTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwRTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwRTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwRUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwRjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwRjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwRjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAwRkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxMzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxM0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxNzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxN0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxOEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxOTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxOTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxOTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxOUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxQ0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxRDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxRDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxRDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxREMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxRTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxRTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxRTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxRUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxRjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxRjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxRjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAxRkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyMzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyM0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyNzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyN0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyOEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyOTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyOTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyOTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyOUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyQ0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyRDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyRDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyRDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyREMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyRTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyRTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyRTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyRUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyRjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyRjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyRjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAyRkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzMzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzM0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzNzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzN0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzOEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzOTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzOTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzOTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzOUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzQ0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzRDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzRDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzRDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzREMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzRTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzRTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzRTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzRUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzRjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzRjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzRjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDAzRkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0MzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0M0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0NzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0N0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0ODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0ODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0ODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0OEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0OTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0OTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0OTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0OUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0QTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0QTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0QTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0QUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0QjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0QjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0QjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0QkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0QzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0QzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0QzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0Q0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0RDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0RDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0RDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0REMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0RTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0RTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0RTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0RUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0RjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0RjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0RjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA0RkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1MzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1M0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1NzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1N0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1ODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1ODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1ODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1OEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1OTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1OTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1OTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1OUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1QTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1QTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1QTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1QUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1QjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1QjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1QjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1QkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1QzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1QzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1QzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1Q0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1RDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1RDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1RDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1REMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1RTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1RTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1RTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1RUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1RjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1RjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1RjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA1RkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2MzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2M0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2NzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2N0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2ODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2ODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2ODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2OEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2OTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2OTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2OTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2OUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2QTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2QTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2QTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2QUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2QjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2QjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2QjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2QkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2QzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2QzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2QzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2Q0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2RDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2RDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2RDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2REMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2RTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2RTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2RTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2RUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2RjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2RjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2RjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA2RkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3MzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3M0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3NzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3N0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3ODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3ODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3ODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3OEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3OTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3OTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3OTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3OUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3QTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3QTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3QTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3QUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3QjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3QjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3QjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3QkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3QzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3QzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3QzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3Q0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3RDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3RDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3RDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3REMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3RTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3RTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3RTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3RUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3RjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3RjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3RjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA3RkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4MzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4M0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4NzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4N0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4ODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4ODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4ODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4OEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4OTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4OTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4OTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4OUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4QTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4QTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4QTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4QUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4QjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4QjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4QjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4QkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4QzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4QzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4QzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4Q0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4RDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4RDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4RDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4REMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4RTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4RTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4RTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4RUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4RjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4RjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4RjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA4RkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5MzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5M0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5NzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5N0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5ODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5ODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5ODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5OEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5OTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5OTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5OTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5OUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5QTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5QTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5QTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5QUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5QjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5QjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5QjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5QkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5QzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5QzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5QzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5Q0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5RDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5RDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5RDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5REMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5RTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5RTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5RTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5RUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5RjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5RjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5RjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDA5RkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBMzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBM0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBNzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBN0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBOEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBOTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBOTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBOTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBOUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBQ0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBRDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBRDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBRDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBREMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBRTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBRTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBRTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBRUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBRjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBRjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBRjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBBRkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCMzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCM0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCNzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCN0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCOEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCOTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCOTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCOTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCOUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCQ0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCRDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCRDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCRDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCREMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCRTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCRTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCRTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCRUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCRjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCRjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCRjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBCRkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDMzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDM0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDNzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDN0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDOEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDOTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDOTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDOTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDOUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDQ0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDRDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDRDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDRDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDREMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDRTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDRTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDRTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDRUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDRjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDRjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDRjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBDRkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEMzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEM0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBENzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEN0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEODAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEODQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEODggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEOEMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEOTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEOTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEOTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEOUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQzAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQzQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQzggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEQ0MgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBERDAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBERDQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBERDggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBEREMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBERTAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBERTQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBERTggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBERUMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBERjAgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBERjQgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBERjggKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKLS8qIDBERkMgKi8gMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMDAwNAotfTsgLyogI1NBTVBMRV9FTkQgKi8KLQotCi1zdGF0aWMgc3RydWN0IGRzcF9zZWdtZW50X2Rlc2MgY3djZW1iODBfc2VnbWVudHNbXSA9IHsKLSAgeyBTRUdUWVBFX1NQX1BST0dSQU0sIDB4MDAwMDAwMDAsIDB4MDAwMDAzMWMsIGN3Y2VtYjgwX2NvZGUgfSwKLSAgeyBTRUdUWVBFX1NQX1BBUkFNRVRFUiwgMHgwMDAwMDAwMCwgMHgwMDAwMDY5NywgY3djZW1iODBfcGFyYW1ldGVyIH0sCi0gIHsgU0VHVFlQRV9TUF9TQU1QTEUsIDB4MDAwMDAwMDAsIDB4MDAwMDBlMDAsIGN3Y2VtYjgwX3NhbXBsZSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBkc3BfbW9kdWxlX2Rlc2MgY3djZW1iODBfbW9kdWxlID0gewotICAiY3djZW1iODAiLAotICB7Ci0gICAgMzgsCi0gICAgY3djZW1iODBfc3ltYm9scwotICB9LAotICAzLAotICBjd2NlbWI4MF9zZWdtZW50cywKLX07Ci0KLSNlbmRpZiAvKiBfX0hFQURFUl9jd2NlbWI4MF9IX18gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwLmMKaW5kZXggOGU3ZmUwMy4uODcwNzhkMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwLmMKQEAgLTU2LDYgKzU2LDggQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCiAKK01PRFVMRV9GSVJNV0FSRSgiZWEvZGFybGEyMF9kc3AuZnciKTsKKwogI2RlZmluZSBGV19EQVJMQTIwX0RTUAkwCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgY2FyZF9md1tdID0gewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYwppbmRleCBhMTNjNjIzLi40MmI0OGY5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYwpAQCAtNjAsNiArNjAsOCBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlICJlY2hvYXVkaW8uaCIKIAorTU9EVUxFX0ZJUk1XQVJFKCJlYS9kYXJsYTI0X2RzcC5mdyIpOworCiAjZGVmaW5lIEZXX0RBUkxBMjRfRFNQCTAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSBjYXJkX2Z3W10gPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZy5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2cuYwppbmRleCA4ZmIxNTgyLi44ZGJiN2FjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZy5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnLmMKQEAgLTY4LDYgKzY4LDEwIEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgImVjaG9hdWRpby5oIgogCitNT0RVTEVfRklSTVdBUkUoImVhL2xvYWRlcl9kc3AuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvZWNobzNnX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS8zZ19hc2ljLmZ3Iik7CisKICNkZWZpbmUgRldfMzYxX0xPQURFUgkwCiAjZGVmaW5lIEZXX0VDSE8zR19EU1AJMQogI2RlZmluZSBGV18zR19BU0lDCTIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCmluZGV4IGU0MTNkYTAuLmYyN2I2YTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwpAQCAtNzA1LDExICs3MDUsOSBAQAogCXN0cnVjdCBhdWRpb3BpcGUgKnBpcGUgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJaW50IGksIGVycjsKIAl1MzIgY2hhbm5lbG1hc2sgPSAwOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7CiAKLQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoKHBvcywgc3Vic3RyZWFtKSB7Ci0JCXMgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOworCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBEU1BfTUFYUElQRVM7IGkrKykgewogCQkJaWYgKHMgPT0gY2hpcC0+c3Vic3RyZWFtW2ldKSB7CiAJCQkJY2hhbm5lbG1hc2sgfD0gMSA8PCBpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKaW5kZXggOWY0MzllYS4uNTJhOTMzMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jCkBAIC0yMzMsOCArMjMzLDggQEAKIAogCWNoaXAtPmFzaWNfY29kZSA9ICZjYXJkX2Z3W0ZXXzNHX0FTSUNdOwogCi0JLyogTm93IGdpdmUgdGhlIG5ldyBBU0lDIGEgbGl0dGxlIHRpbWUgdG8gc2V0IHVwICovCi0JbWRlbGF5KDIpOworCS8qIE5vdyBnaXZlIHRoZSBuZXcgQVNJQyBzb21lIHRpbWUgdG8gc2V0IHVwICovCisJbXNsZWVwKDEwMDApOwogCS8qIFNlZSBpZiBpdCB3b3JrZWQgKi8KIAlib3hfdHlwZSA9IGNoZWNrX2FzaWNfc3RhdHVzKGNoaXApOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjAuYwppbmRleCBhZjRkMzIwLi5mZWUyZDQ4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwLmMKQEAgLTYwLDYgKzYwLDggQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCiAKK01PRFVMRV9GSVJNV0FSRSgiZWEvZ2luYTIwX2RzcC5mdyIpOworCiAjZGVmaW5lIEZXX0dJTkEyMF9EU1AJMAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIGNhcmRfZndbXSA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNC5jCmluZGV4IDlmZjQ1NGEuLmQ1ZWFlNDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjQuYwpAQCAtNjYsNiArNjYsMTIgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCiAKK01PRFVMRV9GSVJNV0FSRSgiZWEvbG9hZGVyX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9naW5hMjRfMzAxX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9naW5hMjRfMzYxX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9naW5hMjRfMzAxX2FzaWMuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvZ2luYTI0XzM2MV9hc2ljLmZ3Iik7CisKICNkZWZpbmUgRldfMzYxX0xPQURFUgkJMAogI2RlZmluZSBGV19HSU5BMjRfMzAxX0RTUAkxCiAjZGVmaW5lIEZXX0dJTkEyNF8zNjFfRFNQCTIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnby5jCmluZGV4IDM3ZWI3MjYuLjQwZjYwMWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ28uYwpAQCAtNTgsNiArNTgsOSBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlICJlY2hvYXVkaW8uaCIKIAorTU9EVUxFX0ZJUk1XQVJFKCJlYS9sb2FkZXJfZHNwLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImVhL2luZGlnb19kc3AuZnciKTsKKwogI2RlZmluZSBGV18zNjFfTE9BREVSCTAKICNkZWZpbmUgRldfSU5ESUdPX0RTUAkxCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGouYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGouYwppbmRleCBkYzhiOTE4Li43NzFjNTM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kai5jCkBAIC01OCw2ICs1OCw5IEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgImVjaG9hdWRpby5oIgogCitNT0RVTEVfRklSTVdBUkUoImVhL2xvYWRlcl9kc3AuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvaW5kaWdvX2RqX2RzcC5mdyIpOworCiAjZGVmaW5lIEZXXzM2MV9MT0FERVIJCTAKICNkZWZpbmUgRldfSU5ESUdPX0RKX0RTUAkxCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW8uYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW8uYwppbmRleCBlYWRmMzI2Li40OWM1NTBkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pby5jCkBAIC01OSw2ICs1OSw5IEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgImVjaG9hdWRpby5oIgogCitNT0RVTEVfRklSTVdBUkUoImVhL2xvYWRlcl9kc3AuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvaW5kaWdvX2lvX2RzcC5mdyIpOworCiAjZGVmaW5lIEZXXzM2MV9MT0FERVIJCTAKICNkZWZpbmUgRldfSU5ESUdPX0lPX0RTUAkxCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwLmMKaW5kZXggNmNlZGU0OS4uOGY1NDgzYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwLmMKQEAgLTY2LDYgKzY2LDkgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCiAKK01PRFVMRV9GSVJNV0FSRSgiZWEvbGF5bGEyMF9kc3AuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvbGF5bGEyMF9hc2ljLmZ3Iik7CisKICNkZWZpbmUgRldfTEFZTEEyMF9EU1AJMAogI2RlZmluZSBGV19MQVlMQTIwX0FTSUMJMQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjQuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCmluZGV4IDQ0ZjczNTQuLjA1MjQ2NjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCkBAIC02OCw2ICs2OCwxMiBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlICJlY2hvYXVkaW8uaCIKIAorTU9EVUxFX0ZJUk1XQVJFKCJlYS9sb2FkZXJfZHNwLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImVhL2xheWxhMjRfZHNwLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImVhL2xheWxhMjRfMV9hc2ljLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImVhL2xheWxhMjRfMkFfYXNpYy5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9sYXlsYTI0XzJTX2FzaWMuZnciKTsKKwogI2RlZmluZSBGV18zNjFfTE9BREVSCQkwCiAjZGVmaW5lIEZXX0xBWUxBMjRfRFNQCQkxCiAjZGVmaW5lIEZXX0xBWUxBMjRfMV9BU0lDCTIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jCmluZGV4IGRjMTcyZDAuLjg5M2M3YzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYwpAQCAtNjYsNiArNjYsOSBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlICJlY2hvYXVkaW8uaCIKIAorTU9EVUxFX0ZJUk1XQVJFKCJlYS9sb2FkZXJfZHNwLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImVhL21pYV9kc3AuZnciKTsKKwogI2RlZmluZSBGV18zNjFfTE9BREVSCTAKICNkZWZpbmUgRldfTUlBX0RTUAkxCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKaW5kZXggYzg1NmVkNS4uM2E1ZDViMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKQEAgLTY0LDYgKzY0LDE1IEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgImVjaG9hdWRpby5oIgogCitNT0RVTEVfRklSTVdBUkUoImVhL2xvYWRlcl9kc3AuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvbW9uYV8zMDFfZHNwLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImVhL21vbmFfMzYxX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9tb25hXzMwMV8xX2FzaWNfNDguZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvbW9uYV8zMDFfMV9hc2ljXzk2LmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImVhL21vbmFfMzYxXzFfYXNpY180OC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlYS9tb25hXzM2MV8xX2FzaWNfOTYuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvbW9uYV8yX2FzaWMuZnciKTsKKwogI2RlZmluZSBGV18zNjFfTE9BREVSCQkwCiAjZGVmaW5lIEZXX01PTkFfMzAxX0RTUAkJMQogI2RlZmluZSBGV19NT05BXzM2MV9EU1AJCTIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKaW5kZXggODBhYTU4NS4uZGJjODA1YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKQEAgLTQ5LDYgKzQ5LDEzIEBACiAjaW5jbHVkZSAicDE3di5oIgogCiAKKyNkZWZpbmUgSEFOQV9GSUxFTkFNRSAiZW11L2hhbmEuZnciCisjZGVmaW5lIERPQ0tfRklMRU5BTUUgImVtdS9hdWRpb19kb2NrLmZ3IgorCitNT0RVTEVfRklSTVdBUkUoSEFOQV9GSUxFTkFNRSk7CitNT0RVTEVfRklSTVdBUkUoRE9DS19GSUxFTkFNRSk7CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEVNVTEwSzEgaW5pdCAvIGRvbmUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjkzLDggKzcwMCw2IEBACiAJaW50IHRtcCx0bXAyOwogCWludCByZWc7CiAJaW50IGVycjsKLQljb25zdCBjaGFyICpoYW5hX2ZpbGVuYW1lID0gImVtdS9oYW5hLmZ3IjsKLQljb25zdCBjaGFyICpkb2NrX2ZpbGVuYW1lID0gImVtdS9hdWRpb19kb2NrLmZ3IjsKIAogCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBTcGVjaWFsIGNvbmZpZy5cbiIpOwogCS8qIEFDOTcgMi4xLCBBbnkgMTZNZWcgb2YgNEdpZyBhZGRyZXNzLCBBdXRvLU11dGUsIEVNVTMyIFNsYXZlLApAQCAtNzM1LDggKzc0MCw4IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiZW11MTAxMDogRU1VX0hBTkFfSUQ9MHgleFxuIixyZWcpOwotCWlmICgoZXJyID0gc25kX2VtdTEwMTBfbG9hZF9maXJtd2FyZShlbXUsIGhhbmFfZmlsZW5hbWUpKSAhPSAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBMb2FkaW5nIEhhbmEgRmlybXdhcmUgZmlsZSAlcyBmYWlsZWRcbiIsIGhhbmFfZmlsZW5hbWUpOworCWlmICgoZXJyID0gc25kX2VtdTEwMTBfbG9hZF9maXJtd2FyZShlbXUsIEhBTkFfRklMRU5BTUUpKSAhPSAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBMb2FkaW5nIEhhbmEgRmlybXdhcmUgZmlsZSAlcyBmYWlsZWRcbiIsIEhBTkFfRklMRU5BTUUpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtOTM4LDcgKzk0Myw3IEBACiAJCS8qIFJldHVybiB0byBBdWRpbyBEb2NrIHByb2dyYW1taW5nIG1vZGUgKi8KIAkJc25kX3ByaW50ayhLRVJOX0lORk8gImVtdTEwMTA6IExvYWRpbmcgQXVkaW8gRG9jayBGaXJtd2FyZVxuIik7CiAJCXNuZF9lbXUxMDEwX2ZwZ2Ffd3JpdGUoZW11LCAgRU1VX0hBTkFfRlBHQV9DT05GSUcsIEVNVV9IQU5BX0ZQR0FfQ09ORklHX0FVRElPRE9DSyApOwotCQlpZiAoKGVyciA9IHNuZF9lbXUxMDEwX2xvYWRfZmlybXdhcmUoZW11LCBkb2NrX2ZpbGVuYW1lKSkgIT0gMCkgeworCQlpZiAoKGVyciA9IHNuZF9lbXUxMDEwX2xvYWRfZmlybXdhcmUoZW11LCBET0NLX0ZJTEVOQU1FKSkgIT0gMCkgewogCQkJcmV0dXJuIGVycjsKIAkJfQogCQlzbmRfZW11MTAxMF9mcGdhX3dyaXRlKGVtdSwgIEVNVV9IQU5BX0ZQR0FfQ09ORklHLCAwICk7CkBAIC0xMjE2LDYgKzEyMjEsMTUgQEAKIAkgLnNwaV9kYWMgPSAxLAogCSAuaTJjX2FkYyA9IDEsCiAJIC5zcGs3MSA9IDF9ICwKKwl7LnZlbmRvciA9IDB4MTEwMiwgLmRldmljZSA9IDB4MDAwOCwgLnN1YnN5c3RlbSA9IDB4NDIwMTExMDIsCisJIC5kcml2ZXIgPSAiQXVkaWd5MiIsIC5uYW1lID0gIkUtbXUgMTAxMCBOb3RlYm9vayBbTUFFTTg5NTBdIiwgCisJIC5pZCA9ICJFTVUxMDEwIiwKKwkgLmVtdTEwazJfY2hpcCA9IDEsCisJIC5jYTAxMDhfY2hpcCA9IDEsCisJIC5jYV9jYXJkYnVzX2NoaXAgPSAxLAorCSAuc3BpX2RhYyA9IDEsCisJIC5pMmNfYWRjID0gMSwKKwkgLnNwazcxID0gMX0gLAogCXsudmVuZG9yID0gMHgxMTAyLCAuZGV2aWNlID0gMHgwMDA4LCAKIAkgLmRyaXZlciA9ICJBdWRpZ3kyIiwgLm5hbWUgPSAiQXVkaWd5IDIgVmFsdWUgW1Vua25vd25dIiwgCiAJIC5pZCA9ICJBdWRpZ3kyIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYyBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYwppbmRleCA0NjVmOGQ1Li43ZWUxOWM2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCkBAIC00MzMsNyArNDMzLDYgQEAKIAlzdHJ1Y3Qgc25kX2VtdTEwazFfcGNtICplcGNtOwogCWludCBjaGFubmVsOwogCWludCByZXN1bHQgPSAwOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKICAgICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzOwogCXUzMiBiYXNpYyA9IDA7CiAJdTMyIGludGUgPSAwOwpAQCAtNDQ4LDggKzQ0Nyw3IEBACiAJCXJ1bm5pbmcgPSAwOwogCQlicmVhazsKIAl9Ci0gICAgICAgIHNuZF9wY21fZ3JvdXBfZm9yX2VhY2gocG9zLCBzdWJzdHJlYW0pIHsKLSAgICAgICAgICAgICAgICBzID0gc25kX3BjbV9ncm91cF9zdWJzdHJlYW1fZW50cnkocG9zKTsKKyAgICAgICAgc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKIAkJcnVudGltZSA9IHMtPnJ1bnRpbWU7CiAJCWVwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJCWNoYW5uZWwgPSBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLWVtdS0+cDE2dl9kZXZpY2Vfb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VuczEzNzAuYyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKaW5kZXggNDI1YjE2Ny4uNmEwZGRjZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VuczEzNzAuYworKysgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCkBAIC03OTgsMTAgKzc5OCw4IEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgogCXsKIAkJdW5zaWduZWQgaW50IHdoYXQgPSAwOwotCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKLQkJc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnN0cmVhbSkgewotCQkJcyA9IHNuZF9wY21fZ3JvdXBfc3Vic3RyZWFtX2VudHJ5KHBvcyk7CisJCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CiAJCQlpZiAocyA9PSBlbnNvbmlxLT5wbGF5YmFjazFfc3Vic3RyZWFtKSB7CiAJCQkJd2hhdCB8PSBFU19QMV9QQVVTRTsKIAkJCQlzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwpAQCAtODI0LDEwICs4MjIsOCBAQAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAl7CiAJCXVuc2lnbmVkIGludCB3aGF0ID0gMDsKLQkJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7Ci0JCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2gocG9zLCBzdWJzdHJlYW0pIHsKLQkJCXMgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOworCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQkJaWYgKHMgPT0gZW5zb25pcS0+cGxheWJhY2sxX3N1YnN0cmVhbSkgewogCQkJCXdoYXQgfD0gRVNfREFDMV9FTjsKIAkJCQlzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTk2OC5jIGIvc291bmQvcGNpL2VzMTk2OC5jCmluZGV4IGRjODRjMTguLjJmYWYwMDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5NjguYworKysgYi9zb3VuZC9wY2kvZXMxOTY4LmMKQEAgLTE1NTQsMTAgKzE1NTQsNyBAQAogCXJ1bnRpbWUtPmh3ID0gc25kX2VzMTk2OF9wbGF5YmFjazsKIAlydW50aW1lLT5ody5idWZmZXJfYnl0ZXNfbWF4ID0gcnVudGltZS0+aHcucGVyaW9kX2J5dGVzX21heCA9CiAJCWNhbGNfYXZhaWxhYmxlX21lbW9yeV9zaXplKGNoaXApOwotI2lmIDAKLQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLAotCQkJCSAgIDEwMjQpOwotI2VuZGlmCisKIAlzcGluX2xvY2tfaXJxKCZjaGlwLT5zdWJzdHJlYW1fbG9jayk7CiAJbGlzdF9hZGQoJmVzLT5saXN0LCAmY2hpcC0+c3Vic3RyZWFtX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+c3Vic3RyZWFtX2xvY2spOwpAQCAtMTYxMywxMCArMTYxMCw4IEBACiAJcnVudGltZS0+aHcgPSBzbmRfZXMxOTY4X2NhcHR1cmU7CiAJcnVudGltZS0+aHcuYnVmZmVyX2J5dGVzX21heCA9IHJ1bnRpbWUtPmh3LnBlcmlvZF9ieXRlc19tYXggPQogCQljYWxjX2F2YWlsYWJsZV9tZW1vcnlfc2l6ZShjaGlwKSAtIDEwMjQ7IC8qIGtlZXAgTUlYQlVGIHNpemUgKi8KLSNpZiAwCi0Jc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9CWVRFUywKLQkJCQkgICAxMDI0KTsKLSNlbmRpZgorCXNuZF9wY21faHdfY29uc3RyYWludF9wb3cyKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMpOworCiAJc3Bpbl9sb2NrX2lycSgmY2hpcC0+c3Vic3RyZWFtX2xvY2spOwogCWxpc3RfYWRkKCZlcy0+bGlzdCwgJmNoaXAtPnN1YnN0cmVhbV9saXN0KTsKIAlzcGluX3VubG9ja19pcnEoJmNoaXAtPnN1YnN0cmVhbV9sb2NrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvTWFrZWZpbGUgYi9zb3VuZC9wY2kvaGRhL01ha2VmaWxlCmluZGV4IDYwZDdiMDUuLmIyNDg0YmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvTWFrZWZpbGUKKysrIGIvc291bmQvcGNpL2hkYS9NYWtlZmlsZQpAQCAtMSw1ICsxLDggQEAKIHNuZC1oZGEtaW50ZWwtb2JqcyA6PSBoZGFfaW50ZWwubwotc25kLWhkYS1jb2RlYy1vYmpzIDo9IGhkYV9jb2RlYy5vIFwKKyMgc2luY2Ugc25kLWhkYS1pbnRlbCBpcyB0aGUgb25seSBkcml2ZXIgdXNpbmcgaGRhLWNvZGVjLAorIyBtZXJnZSBpdCBpbnRvIGEgc2luZ2xlIG1vZHVsZSBhbHRob3VnaCBpdCB3YXMgb3JpZ2luYWxseQorIyBkZXNpZ25lZCB0byBiZSBpbmRpdmlkdWFsIG1vZHVsZXMKK3NuZC1oZGEtaW50ZWwtb2JqcyArPSBoZGFfY29kZWMubyBcCiAJaGRhX2dlbmVyaWMubyBcCiAJcGF0Y2hfcmVhbHRlay5vIFwKIAlwYXRjaF9jbWVkaWEubyBcCkBAIC0xMCw3ICsxMyw3IEBACiAJcGF0Y2hfY29uZXhhbnQubyBcCiAJcGF0Y2hfdmlhLm8KIGlmZGVmIENPTkZJR19QUk9DX0ZTCi1zbmQtaGRhLWNvZGVjLW9ianMgKz0gaGRhX3Byb2Mubworc25kLWhkYS1pbnRlbC1vYmpzICs9IGhkYV9wcm9jLm8KIGVuZGlmCiAKLW9iai0kKENPTkZJR19TTkRfSERBX0lOVEVMKSArPSBzbmQtaGRhLWludGVsLm8gc25kLWhkYS1jb2RlYy5vCitvYmotJChDT05GSUdfU05EX0hEQV9JTlRFTCkgKz0gc25kLWhkYS1pbnRlbC5vCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwppbmRleCA4ZjM0ZmI0Li5mODdmOGYwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgpAQCAtMzQsMTEgKzMzLDYgQEAKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKIAogCi1NT0RVTEVfQVVUSE9SKCJUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlVuaXZlcnNhbCBpbnRlcmZhY2UgZm9yIEhpZ2ggRGVmaW5pdGlvbiBBdWRpbyBDb2RlYyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0KIC8qCiAgKiB2ZW5kb3IgLyBwcmVzZXQgdGFibGUKICAqLwpAQCAtNzcsMTIgKzcxLDEzIEBACiAgKgogICogUmV0dXJucyB0aGUgb2J0YWluZWQgcmVzcG9uc2UgdmFsdWUsIG9yIC0xIGZvciBhbiBlcnJvci4KICAqLwotdW5zaWduZWQgaW50IHNuZF9oZGFfY29kZWNfcmVhZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpcmVjdCwKK3Vuc2lnbmVkIGludCBzbmRfaGRhX2NvZGVjX3JlYWQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkJaW50IGRpcmVjdCwKIAkJCQl1bnNpZ25lZCBpbnQgdmVyYiwgdW5zaWduZWQgaW50IHBhcm0pCiB7CiAJdW5zaWduZWQgaW50IHJlczsKIAltdXRleF9sb2NrKCZjb2RlYy0+YnVzLT5jbWRfbXV0ZXgpOwotCWlmICghIGNvZGVjLT5idXMtPm9wcy5jb21tYW5kKGNvZGVjLCBuaWQsIGRpcmVjdCwgdmVyYiwgcGFybSkpCisJaWYgKCFjb2RlYy0+YnVzLT5vcHMuY29tbWFuZChjb2RlYywgbmlkLCBkaXJlY3QsIHZlcmIsIHBhcm0pKQogCQlyZXMgPSBjb2RlYy0+YnVzLT5vcHMuZ2V0X3Jlc3BvbnNlKGNvZGVjKTsKIAllbHNlCiAJCXJlcyA9ICh1bnNpZ25lZCBpbnQpLTE7CkBAIC05MCw4ICs4NSw2IEBACiAJcmV0dXJuIHJlczsKIH0KIAotRVhQT1JUX1NZTUJPTChzbmRfaGRhX2NvZGVjX3JlYWQpOwotCiAvKioKICAqIHNuZF9oZGFfY29kZWNfd3JpdGUgLSBzZW5kIGEgc2luZ2xlIGNvbW1hbmQgd2l0aG91dCB3YWl0aW5nIGZvciByZXNwb25zZQogICogQGNvZGVjOiB0aGUgSERBIGNvZGVjCkBAIC0xMTQsOCArMTA3LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1FWFBPUlRfU1lNQk9MKHNuZF9oZGFfY29kZWNfd3JpdGUpOwotCiAvKioKICAqIHNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUgLSBzZXF1ZW5jZSB3cml0ZXMKICAqIEBjb2RlYzogdGhlIEhEQSBjb2RlYwpAQCAtMTMwLDggKzEyMSw2IEBACiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHNlcS0+bmlkLCAwLCBzZXEtPnZlcmIsIHNlcS0+cGFyYW0pOwogfQogCi1FWFBPUlRfU1lNQk9MKHNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUpOwotCiAvKioKICAqIHNuZF9oZGFfZ2V0X3N1Yl9ub2RlcyAtIGdldCB0aGUgcmFuZ2Ugb2Ygc3ViIG5vZGVzCiAgKiBAY29kZWM6IHRoZSBIREEgY29kZWMKQEAgLTE0MSw3ICsxMzAsOCBAQAogICogUGFyc2UgdGhlIE5JRCBhbmQgc3RvcmUgdGhlIHN0YXJ0IE5JRCBvZiBpdHMgc3ViLW5vZGVzLgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1Yi1ub2Rlcy4KICAqLwotaW50IHNuZF9oZGFfZ2V0X3N1Yl9ub2RlcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaGRhX25pZF90ICpzdGFydF9pZCkKK2ludCBzbmRfaGRhX2dldF9zdWJfbm9kZXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkgIGhkYV9uaWRfdCAqc3RhcnRfaWQpCiB7CiAJdW5zaWduZWQgaW50IHBhcm07CiAKQEAgLTE1MCw4ICsxNDAsNiBAQAogCXJldHVybiAoaW50KShwYXJtICYgMHg3ZmZmKTsKIH0KIAotRVhQT1JUX1NZTUJPTChzbmRfaGRhX2dldF9zdWJfbm9kZXMpOwotCiAvKioKICAqIHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zIC0gZ2V0IGNvbm5lY3Rpb24gbGlzdAogICogQGNvZGVjOiB0aGUgSERBIGNvZGVjCkBAIC0xODcsMTIgKzE3NSwxMyBAQAogCWNvbm5fbGVuID0gcGFybSAmIEFDX0NMSVNUX0xFTkdUSDsKIAltYXNrID0gKDEgPDwgKHNoaWZ0LTEpKSAtIDE7CiAKLQlpZiAoISBjb25uX2xlbikKKwlpZiAoIWNvbm5fbGVuKQogCQlyZXR1cm4gMDsgLyogbm8gY29ubmVjdGlvbiAqLwogCiAJaWYgKGNvbm5fbGVuID09IDEpIHsKIAkJLyogc2luZ2xlIGNvbm5lY3Rpb24gKi8KLQkJcGFybSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX0dFVF9DT05ORUNUX0xJU1QsIDApOworCQlwYXJtID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgQUNfVkVSQl9HRVRfQ09OTkVDVF9MSVNULCAwKTsKIAkJY29ubl9saXN0WzBdID0gcGFybSAmIG1hc2s7CiAJCXJldHVybiAxOwogCX0KQEAgLTIwNywxOCArMTk2LDIxIEBACiAJCWlmIChpICUgbnVtX2VsZW1zID09IDApCiAJCQlwYXJtID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfTElTVCwgaSk7Ci0JCXJhbmdlX3ZhbCA9ICEhIChwYXJtICYgKDEgPDwgKHNoaWZ0LTEpKSk7IC8qIHJhbmdlcyAqLworCQlyYW5nZV92YWwgPSAhIShwYXJtICYgKDEgPDwgKHNoaWZ0LTEpKSk7IC8qIHJhbmdlcyAqLwogCQl2YWwgPSBwYXJtICYgbWFzazsKIAkJcGFybSA+Pj0gc2hpZnQ7CiAJCWlmIChyYW5nZV92YWwpIHsKIAkJCS8qIHJhbmdlcyBiZXR3ZWVuIHRoZSBwcmV2aW91cyBhbmQgdGhpcyBvbmUgKi8KLQkJCWlmICghIHByZXZfbmlkIHx8IHByZXZfbmlkID49IHZhbCkgewotCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJoZGFfY29kZWM6IGludmFsaWQgZGVwX3JhbmdlX3ZhbCAleDoleFxuIiwgcHJldl9uaWQsIHZhbCk7CisJCQlpZiAoIXByZXZfbmlkIHx8IHByZXZfbmlkID49IHZhbCkgeworCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJoZGFfY29kZWM6ICIKKwkJCQkJICAgImludmFsaWQgZGVwX3JhbmdlX3ZhbCAleDoleFxuIiwKKwkJCQkJICAgcHJldl9uaWQsIHZhbCk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlmb3IgKG4gPSBwcmV2X25pZCArIDE7IG4gPD0gdmFsOyBuKyspIHsKIAkJCQlpZiAoY29ubnMgPj0gbWF4X2Nvbm5zKSB7Ci0JCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIlRvbyBtYW55IGNvbm5lY3Rpb25zXG4iKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJCQkJICAgIlRvbyBtYW55IGNvbm5lY3Rpb25zXG4iKTsKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJfQogCQkJCWNvbm5fbGlzdFtjb25ucysrXSA9IG47CkBAIC0yNTMsNyArMjQ1LDggQEAKIAlzdHJ1Y3QgaGRhX2J1c191bnNvbGljaXRlZCAqdW5zb2w7CiAJdW5zaWduZWQgaW50IHdwOwogCi0JaWYgKCh1bnNvbCA9IGJ1cy0+dW5zb2wpID09IE5VTEwpCisJdW5zb2wgPSBidXMtPnVuc29sOworCWlmICghdW5zb2wpCiAJCXJldHVybiAwOwogCiAJd3AgPSAodW5zb2wtPndwICsgMSkgJSBIREFfVU5TT0xfUVVFVUVfU0laRTsKQEAgLTI2OCw4ICsyNjEsNiBAQAogCXJldHVybiAwOwogfQogCi1FWFBPUlRfU1lNQk9MKHNuZF9oZGFfcXVldWVfdW5zb2xfZXZlbnQpOwotCiAvKgogICogcHJvY2VzcyBxdWV1ZXVkIHVuc29saWNpdGVkIGV2ZW50cwogICovCkBAIC0yODcsNyArMjc4LDcgQEAKIAkJcnAgPDw9IDE7CiAJCXJlcyA9IHVuc29sLT5xdWV1ZVtycF07CiAJCWNhZGRyID0gdW5zb2wtPnF1ZXVlW3JwICsgMV07Ci0JCWlmICghIChjYWRkciAmICgxIDw8IDQpKSkgLyogbm8gdW5zb2xpY2l0ZWQgZXZlbnQ/ICovCisJCWlmICghKGNhZGRyICYgKDEgPDwgNCkpKSAvKiBubyB1bnNvbGljaXRlZCBldmVudD8gKi8KIAkJCWNvbnRpbnVlOwogCQljb2RlYyA9IGJ1cy0+Y2FkZHJfdGJsW2NhZGRyICYgMHgwZl07CiAJCWlmIChjb2RlYyAmJiBjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KQpAQCAtMjk4LDcgKzI4OSw3IEBACiAvKgogICogaW5pdGlhbGl6ZSB1bnNvbGljaXRlZCBxdWV1ZQogICovCi1zdGF0aWMgaW50IGluaXRfdW5zb2xfcXVldWUoc3RydWN0IGhkYV9idXMgKmJ1cykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfdW5zb2xfcXVldWUoc3RydWN0IGhkYV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgaGRhX2J1c191bnNvbGljaXRlZCAqdW5zb2w7CiAKQEAgLTMwNiw4ICsyOTcsOSBAQAogCQlyZXR1cm4gMDsKIAogCXVuc29sID0ga3phbGxvYyhzaXplb2YoKnVuc29sKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEgdW5zb2wpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW4ndCBhbGxvY2F0ZSB1bnNvbGljaXRlZCBxdWV1ZVxuIik7CisJaWYgKCF1bnNvbCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6ICIKKwkJCSAgICJjYW4ndCBhbGxvY2F0ZSB1bnNvbGljaXRlZCBxdWV1ZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlJTklUX1dPUksoJnVuc29sLT53b3JrLCBwcm9jZXNzX3Vuc29sX2V2ZW50cyk7CkBAIC0zMjMsMTYgKzMxNSwxNSBAQAogCiBzdGF0aWMgaW50IHNuZF9oZGFfYnVzX2ZyZWUoc3RydWN0IGhkYV9idXMgKmJ1cykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbjsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgKm47CiAKLQlpZiAoISBidXMpCisJaWYgKCFidXMpCiAJCXJldHVybiAwOwogCWlmIChidXMtPnVuc29sKSB7CiAJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJCWtmcmVlKGJ1cy0+dW5zb2wpOwogCX0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJmJ1cy0+Y29kZWNfbGlzdCkgewotCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhkYV9jb2RlYywgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvZGVjLCBuLCAmYnVzLT5jb2RlY19saXN0LCBsaXN0KSB7CiAJCXNuZF9oZGFfY29kZWNfZnJlZShjb2RlYyk7CiAJfQogCWlmIChidXMtPm9wcy5wcml2YXRlX2ZyZWUpCkBAIC0zNTUsOCArMzQ2LDkgQEAKICAqCiAgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCi1pbnQgc25kX2hkYV9idXNfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgY29uc3Qgc3RydWN0IGhkYV9idXNfdGVtcGxhdGUgKnRlbXAsCi0JCSAgICBzdHJ1Y3QgaGRhX2J1cyAqKmJ1c3ApCitpbnQgX19kZXZpbml0IHNuZF9oZGFfYnVzX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaGRhX2J1c190ZW1wbGF0ZSAqdGVtcCwKKwkJCSAgICAgIHN0cnVjdCBoZGFfYnVzICoqYnVzcCkKIHsKIAlzdHJ1Y3QgaGRhX2J1cyAqYnVzOwogCWludCBlcnI7CkBAIC0zODUsNyArMzc3LDggQEAKIAltdXRleF9pbml0KCZidXMtPmNtZF9tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmJ1cy0+Y29kZWNfbGlzdCk7CiAKLQlpZiAoKGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9CVVMsIGJ1cywgJmRldl9vcHMpKSA8IDApIHsKKwllcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfQlVTLCBidXMsICZkZXZfb3BzKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfaGRhX2J1c19mcmVlKGJ1cyk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMzk0LDIyICszODcsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotRVhQT1JUX1NZTUJPTChzbmRfaGRhX2J1c19uZXcpOwotCiAvKgogICogZmluZCBhIG1hdGNoaW5nIGNvZGVjIHByZXNldAogICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgKmZpbmRfY29kZWNfcHJlc2V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IF9fZGV2aW5pdCAqCitmaW5kX2NvZGVjX3ByZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAljb25zdCBzdHJ1Y3QgaGRhX2NvZGVjX3ByZXNldCAqKnRibCwgKnByZXNldDsKIAorCWlmIChjb2RlYy0+YnVzLT5tb2RlbG5hbWUgJiYgIXN0cmNtcChjb2RlYy0+YnVzLT5tb2RlbG5hbWUsICJnZW5lcmljIikpCisJCXJldHVybiBOVUxMOyAvKiB1c2UgdGhlIGdlbmVyaWMgcGFyc2VyICovCisKIAlmb3IgKHRibCA9IGhkYV9wcmVzZXRfdGFibGVzOyAqdGJsOyB0YmwrKykgewogCQlmb3IgKHByZXNldCA9ICp0Ymw7IHByZXNldC0+aWQ7IHByZXNldCsrKSB7CiAJCQl1MzIgbWFzayA9IHByZXNldC0+bWFzazsKLQkJCWlmICghIG1hc2spCisJCQlpZiAoIW1hc2spCiAJCQkJbWFzayA9IH4wOwogCQkJaWYgKHByZXNldC0+aWQgPT0gKGNvZGVjLT52ZW5kb3JfaWQgJiBtYXNrKSAmJgotCQkJICAgICghIHByZXNldC0+cmV2IHx8CisJCQkgICAgKCFwcmVzZXQtPnJldiB8fAogCQkJICAgICBwcmVzZXQtPnJldiA9PSBjb2RlYy0+cmV2aXNpb25faWQpKQogCQkJCXJldHVybiBwcmVzZXQ7CiAJCX0KQEAgLTQzNCwyNyArNDI5LDMwIEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlpZiAoISB2ZW5kb3IpIHsKKwlpZiAoIXZlbmRvcikgewogCQlzcHJpbnRmKHRtcCwgIkdlbmVyaWMgJTA0eCIsIHZlbmRvcl9pZCk7CiAJCXZlbmRvciA9IHRtcDsKIAl9CiAJaWYgKGNvZGVjLT5wcmVzZXQgJiYgY29kZWMtPnByZXNldC0+bmFtZSkKIAkJc25wcmludGYobmFtZSwgbmFtZWxlbiwgIiVzICVzIiwgdmVuZG9yLCBjb2RlYy0+cHJlc2V0LT5uYW1lKTsKIAllbHNlCi0JCXNucHJpbnRmKG5hbWUsIG5hbWVsZW4sICIlcyBJRCAleCIsIHZlbmRvciwgY29kZWMtPnZlbmRvcl9pZCAmIDB4ZmZmZik7CisJCXNucHJpbnRmKG5hbWUsIG5hbWVsZW4sICIlcyBJRCAleCIsIHZlbmRvciwKKwkJCSBjb2RlYy0+dmVuZG9yX2lkICYgMHhmZmZmKTsKIH0KIAogLyoKICAqIGxvb2sgZm9yIGFuIEFGRyBhbmQgTUZHIG5vZGVzCiAgKi8KLXN0YXRpYyB2b2lkIHNldHVwX2ZnX25vZGVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHNldHVwX2ZnX25vZGVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWludCBpLCB0b3RhbF9ub2RlczsKIAloZGFfbmlkX3QgbmlkOwogCiAJdG90YWxfbm9kZXMgPSBzbmRfaGRhX2dldF9zdWJfbm9kZXMoY29kZWMsIEFDX05PREVfUk9PVCwgJm5pZCk7CiAJZm9yIChpID0gMDsgaSA8IHRvdGFsX25vZGVzOyBpKyssIG5pZCsrKSB7Ci0JCXN3aXRjaCgoc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9GVU5DVElPTl9UWVBFKSAmIDB4ZmYpKSB7CisJCXVuc2lnbmVkIGludCBmdW5jOworCQlmdW5jID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9GVU5DVElPTl9UWVBFKTsKKwkJc3dpdGNoIChmdW5jICYgMHhmZikgewogCQljYXNlIEFDX0dSUF9BVURJT19GVU5DVElPTjoKIAkJCWNvZGVjLT5hZmcgPSBuaWQ7CiAJCQlicmVhazsKQEAgLTQ3OCw3ICs0NzYsNyBAQAogCWNvZGVjLT5udW1fbm9kZXMgPSBzbmRfaGRhX2dldF9zdWJfbm9kZXMoY29kZWMsIGZnX25vZGUsCiAJCQkJCQkgJmNvZGVjLT5zdGFydF9uaWQpOwogCWNvZGVjLT53Y2FwcyA9IGttYWxsb2MoY29kZWMtPm51bV9ub2RlcyAqIDQsIEdGUF9LRVJORUwpOwotCWlmICghIGNvZGVjLT53Y2FwcykKKwlpZiAoIWNvZGVjLT53Y2FwcykKIAkJcmV0dXJuIC1FTk9NRU07CiAJbmlkID0gY29kZWMtPnN0YXJ0X25pZDsKIAlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm51bV9ub2RlczsgaSsrLCBuaWQrKykKQEAgLTQ5Myw3ICs0OTEsNyBAQAogICovCiBzdGF0aWMgdm9pZCBzbmRfaGRhX2NvZGVjX2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JaWYgKCEgY29kZWMpCisJaWYgKCFjb2RlYykKIAkJcmV0dXJuOwogCWxpc3RfZGVsKCZjb2RlYy0+bGlzdCk7CiAJY29kZWMtPmJ1cy0+Y2FkZHJfdGJsW2NvZGVjLT5hZGRyXSA9IE5VTEw7CkBAIC01MTQsOCArNTEyLDggQEAKICAqCiAgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCi1pbnQgc25kX2hkYV9jb2RlY19uZXcoc3RydWN0IGhkYV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGNvZGVjX2FkZHIsCi0JCSAgICAgIHN0cnVjdCBoZGFfY29kZWMgKipjb2RlY3ApCitpbnQgX19kZXZpbml0IHNuZF9oZGFfY29kZWNfbmV3KHN0cnVjdCBoZGFfYnVzICpidXMsIHVuc2lnbmVkIGludCBjb2RlY19hZGRyLAorCQkJCXN0cnVjdCBoZGFfY29kZWMgKipjb2RlY3ApCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWM7CiAJY2hhciBjb21wb25lbnRbMTNdOwpAQCAtNTI1LDcgKzUyMyw4IEBACiAJc25kX2Fzc2VydChjb2RlY19hZGRyIDw9IEhEQV9NQVhfQ09ERUNfQUREUkVTUywgcmV0dXJuIC1FSU5WQUwpOwogCiAJaWYgKGJ1cy0+Y2FkZHJfdGJsW2NvZGVjX2FkZHJdKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogYWRkcmVzcyAweCV4IGlzIGFscmVhZHkgb2NjdXBpZWRcbiIsIGNvZGVjX2FkZHIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6ICIKKwkJCSAgICJhZGRyZXNzIDB4JXggaXMgYWxyZWFkeSBvY2N1cGllZFxuIiwgY29kZWNfYWRkcik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC01NDMsMTggKzU0MiwyMSBAQAogCWxpc3RfYWRkX3RhaWwoJmNvZGVjLT5saXN0LCAmYnVzLT5jb2RlY19saXN0KTsKIAlidXMtPmNhZGRyX3RibFtjb2RlY19hZGRyXSA9IGNvZGVjOwogCi0JY29kZWMtPnZlbmRvcl9pZCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgQUNfTk9ERV9ST09ULCBBQ19QQVJfVkVORE9SX0lEKTsKKwljb2RlYy0+dmVuZG9yX2lkID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBBQ19OT0RFX1JPT1QsCisJCQkJCSAgICAgIEFDX1BBUl9WRU5ET1JfSUQpOwogCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IC0xKQogCQkvKiByZWFkIGFnYWluLCBob3BlZnVsbHkgdGhlIGFjY2VzcyBtZXRob2Qgd2FzIGNvcnJlY3RlZAogCQkgKiBpbiB0aGUgbGFzdCByZWFkLi4uCiAJCSAqLwogCQljb2RlYy0+dmVuZG9yX2lkID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBBQ19OT0RFX1JPT1QsCiAJCQkJCQkgICAgICBBQ19QQVJfVkVORE9SX0lEKTsKLQljb2RlYy0+c3Vic3lzdGVtX2lkID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBBQ19OT0RFX1JPT1QsIEFDX1BBUl9TVUJTWVNURU1fSUQpOwotCWNvZGVjLT5yZXZpc2lvbl9pZCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgQUNfTk9ERV9ST09ULCBBQ19QQVJfUkVWX0lEKTsKKwljb2RlYy0+c3Vic3lzdGVtX2lkID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBBQ19OT0RFX1JPT1QsCisJCQkJCQkgQUNfUEFSX1NVQlNZU1RFTV9JRCk7CisJY29kZWMtPnJldmlzaW9uX2lkID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBBQ19OT0RFX1JPT1QsCisJCQkJCQlBQ19QQVJfUkVWX0lEKTsKIAogCXNldHVwX2ZnX25vZGVzKGNvZGVjKTsKLQlpZiAoISBjb2RlYy0+YWZnICYmICEgY29kZWMtPm1mZykgeworCWlmICghY29kZWMtPmFmZyAmJiAhY29kZWMtPm1mZykgewogCQlzbmRfcHJpbnRkZCgiaGRhX2NvZGVjOiBubyBBRkcgb3IgTUZHIG5vZGUgZm91bmRcbiIpOwogCQlzbmRfaGRhX2NvZGVjX2ZyZWUoY29kZWMpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU2NiwxNSArNTY4LDE2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmICghIGNvZGVjLT5zdWJzeXN0ZW1faWQpIHsKKwlpZiAoIWNvZGVjLT5zdWJzeXN0ZW1faWQpIHsKIAkJaGRhX25pZF90IG5pZCA9IGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZzsKLQkJY29kZWMtPnN1YnN5c3RlbV9pZCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkJCSBBQ19WRVJCX0dFVF9TVUJTWVNURU1fSUQsCi0JCQkJCQkJIDApOworCQljb2RlYy0+c3Vic3lzdGVtX2lkID0KKwkJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAorCQkJCQkgICBBQ19WRVJCX0dFVF9TVUJTWVNURU1fSUQsIDApOwogCX0KIAogCWNvZGVjLT5wcmVzZXQgPSBmaW5kX2NvZGVjX3ByZXNldChjb2RlYyk7Ci0JaWYgKCEgKmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lKQorCS8qIGF1ZGlvIGNvZGVjIHNob3VsZCBvdmVycmlkZSB0aGUgbWl4ZXIgbmFtZSAqLworCWlmIChjb2RlYy0+YWZnIHx8ICEqYnVzLT5jYXJkLT5taXhlcm5hbWUpCiAJCXNuZF9oZGFfZ2V0X2NvZGVjX25hbWUoY29kZWMsIGJ1cy0+Y2FyZC0+bWl4ZXJuYW1lLAogCQkJCSAgICAgICBzaXplb2YoYnVzLT5jYXJkLT5taXhlcm5hbWUpKTsKIApAQCAtNjAwLDggKzYwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLUVYUE9SVF9TWU1CT0woc25kX2hkYV9jb2RlY19uZXcpOwotCiAvKioKICAqIHNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtIC0gc2V0IHVwIHRoZSBjb2RlYyBmb3Igc3RyZWFtaW5nCiAgKiBAY29kZWM6IHRoZSBDT0RFQyB0byBzZXQgdXAKQEAgLTYxMCwxMyArNjExLDE1IEBACiAgKiBAY2hhbm5lbF9pZDogY2hhbm5lbCBpZCB0byBwYXNzLCB6ZXJvIGJhc2VkLgogICogQGZvcm1hdDogc3RyZWFtIGZvcm1hdC4KICAqLwotdm9pZCBzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgdTMyIHN0cmVhbV90YWcsCit2b2lkIHNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJCXUzMiBzdHJlYW1fdGFnLAogCQkJCWludCBjaGFubmVsX2lkLCBpbnQgZm9ybWF0KQogewotCWlmICghIG5pZCkKKwlpZiAoIW5pZCkKIAkJcmV0dXJuOwogCi0Jc25kX3ByaW50ZGQoImhkYV9jb2RlY19zZXR1cF9zdHJlYW06IE5JRD0weCV4LCBzdHJlYW09MHgleCwgY2hhbm5lbD0lZCwgZm9ybWF0PTB4JXhcbiIsCisJc25kX3ByaW50ZGQoImhkYV9jb2RlY19zZXR1cF9zdHJlYW06ICIKKwkJICAgICJOSUQ9MHgleCwgc3RyZWFtPTB4JXgsIGNoYW5uZWw9JWQsIGZvcm1hdD0weCV4XG4iLAogCQkgICAgbmlkLCBzdHJlYW1fdGFnLCBjaGFubmVsX2lkLCBmb3JtYXQpOwogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQ0hBTk5FTF9TVFJFQU1JRCwKIAkJCSAgICAoc3RyZWFtX3RhZyA8PCA0KSB8IGNoYW5uZWxfaWQpOwpAQCAtNjI0LDggKzYyNyw2IEBACiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9TVFJFQU1fRk9STUFULCBmb3JtYXQpOwogfQogCi1FWFBPUlRfU1lNQk9MKHNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKTsKLQogLyoKICAqIGFtcCBhY2Nlc3MgZnVuY3Rpb25zCiAgKi8KQEAgLTYzNiw3ICs2MzcsNyBAQAogI2RlZmluZSBJTkZPX0FNUF9WT0woY2gpCSgxIDw8ICgxICsgKGNoKSkpCiAKIC8qIGluaXRpYWxpemUgdGhlIGhhc2ggdGFibGUgKi8KLXN0YXRpYyB2b2lkIGluaXRfYW1wX2hhc2goc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9hbXBfaGFzaChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAltZW1zZXQoY29kZWMtPmFtcF9oYXNoLCAweGZmLCBzaXplb2YoY29kZWMtPmFtcF9oYXNoKSk7CiAJY29kZWMtPm51bV9hbXBfZW50cmllcyA9IDA7CkBAIC02NjIsMTUgKzY2MywxOCBAQAogCWlmIChjb2RlYy0+bnVtX2FtcF9lbnRyaWVzID49IGNvZGVjLT5hbXBfaW5mb19zaXplKSB7CiAJCS8qIHJlYWxsb2NhdGUgdGhlIGFycmF5ICovCiAJCWludCBuZXdfc2l6ZSA9IGNvZGVjLT5hbXBfaW5mb19zaXplICsgNjQ7Ci0JCXN0cnVjdCBoZGFfYW1wX2luZm8gKm5ld19pbmZvID0ga2NhbGxvYyhuZXdfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBoZGFfYW1wX2luZm8pLAotCQkJCQkJCUdGUF9LRVJORUwpOwotCQlpZiAoISBuZXdfaW5mbykgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW4ndCBtYWxsb2MgYW1wX2luZm9cbiIpOworCQlzdHJ1Y3QgaGRhX2FtcF9pbmZvICpuZXdfaW5mbzsKKwkJbmV3X2luZm8gPSBrY2FsbG9jKG5ld19zaXplLCBzaXplb2Yoc3RydWN0IGhkYV9hbXBfaW5mbyksCisJCQkJICAgR0ZQX0tFUk5FTCk7CisJCWlmICghbmV3X2luZm8pIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogIgorCQkJCSAgICJjYW4ndCBtYWxsb2MgYW1wX2luZm9cbiIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJaWYgKGNvZGVjLT5hbXBfaW5mbykgewogCQkJbWVtY3B5KG5ld19pbmZvLCBjb2RlYy0+YW1wX2luZm8sCi0JCQkgICAgICAgY29kZWMtPmFtcF9pbmZvX3NpemUgKiBzaXplb2Yoc3RydWN0IGhkYV9hbXBfaW5mbykpOworCQkJICAgICAgIGNvZGVjLT5hbXBfaW5mb19zaXplICoKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGhkYV9hbXBfaW5mbykpOwogCQkJa2ZyZWUoY29kZWMtPmFtcF9pbmZvKTsKIAkJfQogCQljb2RlYy0+YW1wX2luZm9fc2l6ZSA9IG5ld19zaXplOwpAQCAtNjkxLDI2ICs2OTUsNDQgQEAKICAqLwogc3RhdGljIHUzMiBxdWVyeV9hbXBfY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpcmVjdGlvbikKIHsKLQlzdHJ1Y3QgaGRhX2FtcF9pbmZvICppbmZvID0gZ2V0X2FsbG9jX2FtcF9oYXNoKGNvZGVjLCBIREFfSEFTSF9LRVkobmlkLCBkaXJlY3Rpb24sIDApKTsKKwlzdHJ1Y3QgaGRhX2FtcF9pbmZvICppbmZvOwogCi0JaWYgKCEgaW5mbykKKwlpbmZvID0gZ2V0X2FsbG9jX2FtcF9oYXNoKGNvZGVjLCBIREFfSEFTSF9LRVkobmlkLCBkaXJlY3Rpb24sIDApKTsKKwlpZiAoIWluZm8pCiAJCXJldHVybiAwOwotCWlmICghIChpbmZvLT5zdGF0dXMgJiBJTkZPX0FNUF9DQVBTKSkgewotCQlpZiAoISAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9BTVBfT1ZSRCkpCisJaWYgKCEoaW5mby0+c3RhdHVzICYgSU5GT19BTVBfQ0FQUykpIHsKKwkJaWYgKCEoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9BTVBfT1ZSRCkpCiAJCQluaWQgPSBjb2RlYy0+YWZnOwotCQlpbmZvLT5hbXBfY2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBkaXJlY3Rpb24gPT0gSERBX09VVFBVVCA/Ci0JCQkJCQkgICAgQUNfUEFSX0FNUF9PVVRfQ0FQIDogQUNfUEFSX0FNUF9JTl9DQVApOwotCQlpbmZvLT5zdGF0dXMgfD0gSU5GT19BTVBfQ0FQUzsKKwkJaW5mby0+YW1wX2NhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwKKwkJCQkJCSAgICBkaXJlY3Rpb24gPT0gSERBX09VVFBVVCA/CisJCQkJCQkgICAgQUNfUEFSX0FNUF9PVVRfQ0FQIDoKKwkJCQkJCSAgICBBQ19QQVJfQU1QX0lOX0NBUCk7CisJCWlmIChpbmZvLT5hbXBfY2FwcykKKwkJCWluZm8tPnN0YXR1cyB8PSBJTkZPX0FNUF9DQVBTOwogCX0KIAlyZXR1cm4gaW5mby0+YW1wX2NhcHM7CiB9CiAKK2ludCBzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgZGlyLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNhcHMpCit7CisJc3RydWN0IGhkYV9hbXBfaW5mbyAqaW5mbzsKKworCWluZm8gPSBnZXRfYWxsb2NfYW1wX2hhc2goY29kZWMsIEhEQV9IQVNIX0tFWShuaWQsIGRpciwgMCkpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaW5mby0+YW1wX2NhcHMgPSBjYXBzOworCWluZm8tPnN0YXR1cyB8PSBJTkZPX0FNUF9DQVBTOworCXJldHVybiAwOworfQorCiAvKgogICogcmVhZCB0aGUgY3VycmVudCB2b2x1bWUgdG8gaW5mbwogICogaWYgdGhlIGNhY2hlIGV4aXN0cywgcmVhZCB0aGUgY2FjaGUgdmFsdWUuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3ZvbF9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3QgaGRhX2FtcF9pbmZvICppbmZvLAotCQkJIGhkYV9uaWRfdCBuaWQsIGludCBjaCwgaW50IGRpcmVjdGlvbiwgaW50IGluZGV4KQorc3RhdGljIHVuc2lnbmVkIGludCBnZXRfdm9sX211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJIHN0cnVjdCBoZGFfYW1wX2luZm8gKmluZm8sIGhkYV9uaWRfdCBuaWQsCisJCQkJIGludCBjaCwgaW50IGRpcmVjdGlvbiwgaW50IGluZGV4KQogewogCXUzMiB2YWwsIHBhcm07CiAKQEAgLTcyMCw3ICs3NDIsOCBAQAogCXBhcm0gPSBjaCA/IEFDX0FNUF9HRVRfUklHSFQgOiBBQ19BTVBfR0VUX0xFRlQ7CiAJcGFybSB8PSBkaXJlY3Rpb24gPT0gSERBX09VVFBVVCA/IEFDX0FNUF9HRVRfT1VUUFVUIDogQUNfQU1QX0dFVF9JTlBVVDsKIAlwYXJtIHw9IGluZGV4OwotCXZhbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX0dFVF9BTVBfR0FJTl9NVVRFLCBwYXJtKTsKKwl2YWwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKKwkJCQkgQUNfVkVSQl9HRVRfQU1QX0dBSU5fTVVURSwgcGFybSk7CiAJaW5mby0+dm9sW2NoXSA9IHZhbCAmIDB4ZmY7CiAJaW5mby0+c3RhdHVzIHw9IElORk9fQU1QX1ZPTChjaCk7CiAJcmV0dXJuIGluZm8tPnZvbFtjaF07CkBAIC03MzAsNyArNzUzLDggQEAKICAqIHdyaXRlIHRoZSBjdXJyZW50IHZvbHVtZSBpbiBpbmZvIHRvIHRoZSBoL3cgYW5kIHVwZGF0ZSB0aGUgY2FjaGUKICAqLwogc3RhdGljIHZvaWQgcHV0X3ZvbF9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3QgaGRhX2FtcF9pbmZvICppbmZvLAotCQkJIGhkYV9uaWRfdCBuaWQsIGludCBjaCwgaW50IGRpcmVjdGlvbiwgaW50IGluZGV4LCBpbnQgdmFsKQorCQkJIGhkYV9uaWRfdCBuaWQsIGludCBjaCwgaW50IGRpcmVjdGlvbiwgaW50IGluZGV4LAorCQkJIGludCB2YWwpCiB7CiAJdTMyIHBhcm07CiAKQEAgLTc0OCw4ICs3NzIsOSBAQAogaW50IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsIGludCBjaCwKIAkJCSAgIGludCBkaXJlY3Rpb24sIGludCBpbmRleCkKIHsKLQlzdHJ1Y3QgaGRhX2FtcF9pbmZvICppbmZvID0gZ2V0X2FsbG9jX2FtcF9oYXNoKGNvZGVjLCBIREFfSEFTSF9LRVkobmlkLCBkaXJlY3Rpb24sIGluZGV4KSk7Ci0JaWYgKCEgaW5mbykKKwlzdHJ1Y3QgaGRhX2FtcF9pbmZvICppbmZvOworCWluZm8gPSBnZXRfYWxsb2NfYW1wX2hhc2goY29kZWMsIEhEQV9IQVNIX0tFWShuaWQsIGRpcmVjdGlvbiwgaW5kZXgpKTsKKwlpZiAoIWluZm8pCiAJCXJldHVybiAwOwogCXJldHVybiBnZXRfdm9sX211dGUoY29kZWMsIGluZm8sIG5pZCwgY2gsIGRpcmVjdGlvbiwgaW5kZXgpOwogfQpAQCAtNzYwLDEzICs3ODUsMTQgQEAKIGludCBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsIGludCBjaCwKIAkJCSAgICAgaW50IGRpcmVjdGlvbiwgaW50IGlkeCwgaW50IG1hc2ssIGludCB2YWwpCiB7Ci0Jc3RydWN0IGhkYV9hbXBfaW5mbyAqaW5mbyA9IGdldF9hbGxvY19hbXBfaGFzaChjb2RlYywgSERBX0hBU0hfS0VZKG5pZCwgZGlyZWN0aW9uLCBpZHgpKTsKKwlzdHJ1Y3QgaGRhX2FtcF9pbmZvICppbmZvOwogCi0JaWYgKCEgaW5mbykKKwlpbmZvID0gZ2V0X2FsbG9jX2FtcF9oYXNoKGNvZGVjLCBIREFfSEFTSF9LRVkobmlkLCBkaXJlY3Rpb24sIGlkeCkpOworCWlmICghaW5mbykKIAkJcmV0dXJuIDA7CiAJdmFsICY9IG1hc2s7CiAJdmFsIHw9IGdldF92b2xfbXV0ZShjb2RlYywgaW5mbywgbmlkLCBjaCwgZGlyZWN0aW9uLCBpZHgpICYgfm1hc2s7Ci0JaWYgKGluZm8tPnZvbFtjaF0gPT0gdmFsICYmICEgY29kZWMtPmluX3Jlc3VtZSkKKwlpZiAoaW5mby0+dm9sW2NoXSA9PSB2YWwgJiYgIWNvZGVjLT5pbl9yZXN1bWUpCiAJCXJldHVybiAwOwogCXB1dF92b2xfbXV0ZShjb2RlYywgaW5mbywgbmlkLCBjaCwgZGlyZWN0aW9uLCBpZHgsIHZhbCk7CiAJcmV0dXJuIDE7CkBAIC03ODMsNyArODA5LDggQEAKICNkZWZpbmUgZ2V0X2FtcF9pbmRleChrYykJKCgoa2MpLT5wcml2YXRlX3ZhbHVlID4+IDE5KSAmIDB4ZikKIAogLyogdm9sdW1lICovCi1pbnQgc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCitpbnQgc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXUxNiBuaWQgPSBnZXRfYW1wX25pZChrY29udHJvbCk7CkBAIC03OTIsOSArODE5LDExIEBACiAJdTMyIGNhcHM7CiAKIAljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgZGlyKTsKLQljYXBzID0gKGNhcHMgJiBBQ19BTVBDQVBfTlVNX1NURVBTKSA+PiBBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUOyAvKiBudW0gc3RlcHMgKi8KLQlpZiAoISBjYXBzKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImhkYV9jb2RlYzogbnVtX3N0ZXBzID0gMCBmb3IgTklEPTB4JXhcbiIsIG5pZCk7CisJLyogbnVtIHN0ZXBzICovCisJY2FwcyA9IChjYXBzICYgQUNfQU1QQ0FQX05VTV9TVEVQUykgPj4gQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVDsKKwlpZiAoIWNhcHMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGRhX2NvZGVjOiAiCisJCSAgICAgICAibnVtX3N0ZXBzID0gMCBmb3IgTklEPTB4JXhcbiIsIG5pZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKQEAgLTgwNCw3ICs4MzMsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitpbnQgc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaGRhX25pZF90IG5pZCA9IGdldF9hbXBfbmlkKGtjb250cm9sKTsKQEAgLTgyMCw3ICs4NTAsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitpbnQgc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaGRhX25pZF90IG5pZCA9IGdldF9hbXBfbmlkKGtjb250cm9sKTsKQEAgLTg1Miw3ICs4ODMsOCBAQAogCWlmIChzaXplIDwgNCAqIHNpemVvZih1bnNpZ25lZCBpbnQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgZGlyKTsKLQl2YWwyID0gKCgoY2FwcyAmIEFDX0FNUENBUF9TVEVQX1NJWkUpID4+IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQpICsgMSkgKiAyNTsKKwl2YWwyID0gKGNhcHMgJiBBQ19BTVBDQVBfU1RFUF9TSVpFKSA+PiBBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUOworCXZhbDIgPSAodmFsMiArIDEpICogMjU7CiAJdmFsMSA9IC0oKGNhcHMgJiBBQ19BTVBDQVBfT0ZGU0VUKSA+PiBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKTsKIAl2YWwxID0gKChpbnQpdmFsMSkgKiAoKGludCl2YWwyKTsKIAlpZiAocHV0X3VzZXIoU05EUlZfQ1RMX1RMVlRfREJfU0NBTEUsIF90bHYpKQpAQCAtODY3LDcgKzg5OSw4IEBACiB9CiAKIC8qIHN3aXRjaCAqLwotaW50IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoraW50IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlpbnQgY2hzID0gZ2V0X2FtcF9jaGFubmVscyhrY29udHJvbCk7CiAKQEAgLTg3OCw3ICs5MTEsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitpbnQgc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaGRhX25pZF90IG5pZCA9IGdldF9hbXBfbmlkKGtjb250cm9sKTsKQEAgLTg4OCwxMyArOTIyLDE2IEBACiAJbG9uZyAqdmFscCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwogCiAJaWYgKGNocyAmIDEpCi0JCSp2YWxwKysgPSAoc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCAwLCBkaXIsIGlkeCkgJiAweDgwKSA/IDAgOiAxOworCQkqdmFscCsrID0gKHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMCwgZGlyLCBpZHgpICYKKwkJCSAgIDB4ODApID8gMCA6IDE7CiAJaWYgKGNocyAmIDIpCi0JCSp2YWxwID0gKHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMSwgZGlyLCBpZHgpICYgMHg4MCkgPyAwIDogMTsKKwkJKnZhbHAgPSAoc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCAxLCBkaXIsIGlkeCkgJgorCQkJIDB4ODApID8gMCA6IDE7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK2ludCBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0gZ2V0X2FtcF9uaWQoa2NvbnRyb2wpOwpAQCAtOTI1LDcgKzk2Miw4IEBACiAjZGVmaW5lIEFNUF9WQUxfSURYX1NISUZUCTE5CiAjZGVmaW5lIEFNUF9WQUxfSURYX01BU0sJKDB4MGY8PDE5KQogCi1pbnQgc25kX2hkYV9taXhlcl9iaW5kX3N3aXRjaF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoraW50IHNuZF9oZGFfbWl4ZXJfYmluZF9zd2l0Y2hfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJdW5zaWduZWQgbG9uZyBwdmFsOwpAQCAtOTQwLDcgKzk3OCw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IHNuZF9oZGFfbWl4ZXJfYmluZF9zd2l0Y2hfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK2ludCBzbmRfaGRhX21peGVyX2JpbmRfc3dpdGNoX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXVuc2lnbmVkIGxvbmcgcHZhbDsKQEAgLTk1MCw3ICs5ODksOCBAQAogCXB2YWwgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAlpbmRpY2VzID0gKHB2YWwgJiBBTVBfVkFMX0lEWF9NQVNLKSA+PiBBTVBfVkFMX0lEWF9TSElGVDsKIAlmb3IgKGkgPSAwOyBpIDwgaW5kaWNlczsgaSsrKSB7Ci0JCWtjb250cm9sLT5wcml2YXRlX3ZhbHVlID0gKHB2YWwgJiB+QU1QX1ZBTF9JRFhfTUFTSykgfCAoaSA8PCBBTVBfVkFMX0lEWF9TSElGVCk7CisJCWtjb250cm9sLT5wcml2YXRlX3ZhbHVlID0gKHB2YWwgJiB+QU1QX1ZBTF9JRFhfTUFTSykgfAorCQkJKGkgPDwgQU1QX1ZBTF9JRFhfU0hJRlQpOwogCQllcnIgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfcHV0KGtjb250cm9sLCB1Y29udHJvbCk7CiAJCWlmIChlcnIgPCAwKQogCQkJYnJlYWs7CkBAIC05NjUsMTQgKzEwMDUsMTYgQEAKICAqIFNQRElGIG91dCBjb250cm9scwogICovCiAKLXN0YXRpYyBpbnQgc25kX2hkYV9zcGRpZl9tYXNrX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCitzdGF0aWMgaW50IHNuZF9oZGFfc3BkaWZfbWFza19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lFQzk1ODsKIAl1aW5mby0+Y291bnQgPSAxOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9oZGFfc3BkaWZfY21hc2tfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3N0YXRpYyBpbnQgc25kX2hkYV9zcGRpZl9jbWFza19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMF0gPSBJRUM5NThfQUVTMF9QUk9GRVNTSU9OQUwgfAogCQkJCQkgICBJRUM5NThfQUVTMF9OT05BVURJTyB8CkBAIC05ODMsNyArMTAyNSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2hkYV9zcGRpZl9wbWFza19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorc3RhdGljIGludCBzbmRfaGRhX3NwZGlmX3BtYXNrX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1swXSA9IElFQzk1OF9BRVMwX1BST0ZFU1NJT05BTCB8CiAJCQkJCSAgIElFQzk1OF9BRVMwX05PTkFVRElPIHwKQEAgLTk5MSw3ICsxMDM0LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfaGRhX3NwZGlmX2RlZmF1bHRfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3N0YXRpYyBpbnQgc25kX2hkYV9zcGRpZl9kZWZhdWx0X2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCkBAIC0xMDExLDE5ICsxMDU1LDIxIEBACiAJdW5zaWduZWQgc2hvcnQgdmFsID0gMDsKIAogCWlmIChzYml0cyAmIElFQzk1OF9BRVMwX1BST0ZFU1NJT05BTCkKLQkJdmFsIHw9IDEgPDwgNjsKKwkJdmFsIHw9IEFDX0RJRzFfUFJPRkVTU0lPTkFMOwogCWlmIChzYml0cyAmIElFQzk1OF9BRVMwX05PTkFVRElPKQotCQl2YWwgfD0gMSA8PCA1OworCQl2YWwgfD0gQUNfRElHMV9OT05BVURJTzsKIAlpZiAoc2JpdHMgJiBJRUM5NThfQUVTMF9QUk9GRVNTSU9OQUwpIHsKLQkJaWYgKChzYml0cyAmIElFQzk1OF9BRVMwX1BST19FTVBIQVNJUykgPT0gSUVDOTU4X0FFUzBfUFJPX0VNUEhBU0lTXzUwMTUpCi0JCQl2YWwgfD0gMSA8PCAzOworCQlpZiAoKHNiaXRzICYgSUVDOTU4X0FFUzBfUFJPX0VNUEhBU0lTKSA9PQorCQkgICAgSUVDOTU4X0FFUzBfUFJPX0VNUEhBU0lTXzUwMTUpCisJCQl2YWwgfD0gQUNfRElHMV9FTVBIQVNJUzsKIAl9IGVsc2UgewotCQlpZiAoKHNiaXRzICYgSUVDOTU4X0FFUzBfQ09OX0VNUEhBU0lTKSA9PSBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVNfNTAxNSkKLQkJCXZhbCB8PSAxIDw8IDM7Ci0JCWlmICghIChzYml0cyAmIElFQzk1OF9BRVMwX0NPTl9OT1RfQ09QWVJJR0hUKSkKLQkJCXZhbCB8PSAxIDw8IDQ7CisJCWlmICgoc2JpdHMgJiBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVMpID09CisJCSAgICBJRUM5NThfQUVTMF9DT05fRU1QSEFTSVNfNTAxNSkKKwkJCXZhbCB8PSBBQ19ESUcxX0VNUEhBU0lTOworCQlpZiAoIShzYml0cyAmIElFQzk1OF9BRVMwX0NPTl9OT1RfQ09QWVJJR0hUKSkKKwkJCXZhbCB8PSBBQ19ESUcxX0NPUFlSSUdIVDsKIAkJaWYgKHNiaXRzICYgKElFQzk1OF9BRVMxX0NPTl9PUklHSU5BTCA8PCA4KSkKLQkJCXZhbCB8PSAxIDw8IDc7CisJCQl2YWwgfD0gQUNfRElHMV9MRVZFTDsKIAkJdmFsIHw9IHNiaXRzICYgKElFQzk1OF9BRVMxX0NPTl9DQVRFR09SWSA8PCA4KTsKIAl9CiAJcmV0dXJuIHZhbDsKQEAgLTEwMzUsMjYgKzEwODEsMjcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgc2JpdHMgPSAwOwogCi0JaWYgKHZhbCAmICgxIDw8IDUpKQorCWlmICh2YWwgJiBBQ19ESUcxX05PTkFVRElPKQogCQlzYml0cyB8PSBJRUM5NThfQUVTMF9OT05BVURJTzsKLQlpZiAodmFsICYgKDEgPDwgNikpCisJaWYgKHZhbCAmIEFDX0RJRzFfUFJPRkVTU0lPTkFMKQogCQlzYml0cyB8PSBJRUM5NThfQUVTMF9QUk9GRVNTSU9OQUw7CiAJaWYgKHNiaXRzICYgSUVDOTU4X0FFUzBfUFJPRkVTU0lPTkFMKSB7Ci0JCWlmIChzYml0cyAmICgxIDw8IDMpKQorCQlpZiAoc2JpdHMgJiBBQ19ESUcxX0VNUEhBU0lTKQogCQkJc2JpdHMgfD0gSUVDOTU4X0FFUzBfUFJPX0VNUEhBU0lTXzUwMTU7CiAJfSBlbHNlIHsKLQkJaWYgKHZhbCAmICgxIDw8IDMpKQorCQlpZiAodmFsICYgQUNfRElHMV9FTVBIQVNJUykKIAkJCXNiaXRzIHw9IElFQzk1OF9BRVMwX0NPTl9FTVBIQVNJU181MDE1OwotCQlpZiAoISAodmFsICYgKDEgPDwgNCkpKQorCQlpZiAoISh2YWwgJiBBQ19ESUcxX0NPUFlSSUdIVCkpCiAJCQlzYml0cyB8PSBJRUM5NThfQUVTMF9DT05fTk9UX0NPUFlSSUdIVDsKLQkJaWYgKHZhbCAmICgxIDw8IDcpKQorCQlpZiAodmFsICYgQUNfRElHMV9MRVZFTCkKIAkJCXNiaXRzIHw9IChJRUM5NThfQUVTMV9DT05fT1JJR0lOQUwgPDwgOCk7CiAJCXNiaXRzIHw9IHZhbCAmICgweDdmIDw8IDgpOwogCX0KIAlyZXR1cm4gc2JpdHM7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2hkYV9zcGRpZl9kZWZhdWx0X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitzdGF0aWMgaW50IHNuZF9oZGFfc3BkaWZfZGVmYXVsdF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CkBAIC0xMDcyLDE1ICsxMTE5LDE4IEBACiAJY29kZWMtPnNwZGlmX2N0bHMgPSB2YWw7CiAKIAlpZiAoY2hhbmdlIHx8IGNvZGVjLT5pbl9yZXN1bWUpIHsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgdmFsICYgMHhmZik7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzIsIHZhbCA+PiA4KTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwKKwkJCQkgICAgdmFsICYgMHhmZik7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzIsCisJCQkJICAgIHZhbCA+PiA4KTsKIAl9CiAKIAltdXRleF91bmxvY2soJmNvZGVjLT5zcGRpZl9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KIAotc3RhdGljIGludCBzbmRfaGRhX3NwZGlmX291dF9zd2l0Y2hfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3N0YXRpYyBpbnQgc25kX2hkYV9zcGRpZl9vdXRfc3dpdGNoX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOwogCXVpbmZvLT5jb3VudCA9IDE7CkBAIC0xMDg5LDE1ICsxMTM5LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2hkYV9zcGRpZl9vdXRfc3dpdGNoX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitzdGF0aWMgaW50IHNuZF9oZGFfc3BkaWZfb3V0X3N3aXRjaF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCi0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjb2RlYy0+c3BkaWZfY3RscyAmIDE7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjb2RlYy0+c3BkaWZfY3RscyAmIEFDX0RJRzFfRU5BQkxFOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9oZGFfc3BkaWZfb3V0X3N3aXRjaF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorc3RhdGljIGludCBzbmRfaGRhX3NwZGlmX291dF9zd2l0Y2hfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CkBAIC0xMTA1LDE2ICsxMTU3LDIxIEBACiAJaW50IGNoYW5nZTsKIAogCW11dGV4X2xvY2soJmNvZGVjLT5zcGRpZl9tdXRleCk7Ci0JdmFsID0gY29kZWMtPnNwZGlmX2N0bHMgJiB+MTsKKwl2YWwgPSBjb2RlYy0+c3BkaWZfY3RscyAmIH5BQ19ESUcxX0VOQUJMRTsKIAlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCi0JCXZhbCB8PSAxOworCQl2YWwgfD0gQUNfRElHMV9FTkFCTEU7CiAJY2hhbmdlID0gY29kZWMtPnNwZGlmX2N0bHMgIT0gdmFsOwogCWlmIChjaGFuZ2UgfHwgY29kZWMtPmluX3Jlc3VtZSkgewogCQljb2RlYy0+c3BkaWZfY3RscyA9IHZhbDsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgdmFsICYgMHhmZik7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJCQkgICAgQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8Ci0JCQkJICAgIEFDX0FNUF9TRVRfT1VUUFVUIHwgKCh2YWwgJiAxKSA/IDAgOiAweDgwKSk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsCisJCQkJICAgIHZhbCAmIDB4ZmYpOworCQkvKiB1bm11dGUgYW1wIHN3aXRjaCAoaWYgYW55KSAqLworCQlpZiAoKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkgJiYKKwkJICAgICh2YWwgJiBBQ19ESUcxX0VOQUJMRSkpCisJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkJCQkgICAgQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8CisJCQkJCSAgICBBQ19BTVBfU0VUX09VVFBVVCk7CiAJfQogCW11dGV4X3VubG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlOwpAQCAtMTE2Miw3ICsxMjE5LDggQEAKICAqCiAgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCi1pbnQgc25kX2hkYV9jcmVhdGVfc3BkaWZfb3V0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCitpbnQgX19kZXZpbml0IHNuZF9oZGFfY3JlYXRlX3NwZGlmX291dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgaGRhX25pZF90IG5pZCkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CkBAIC0xMTcxLDEwICsxMjI5LDEyIEBACiAJZm9yIChkaWdfbWl4ID0gZGlnX21peGVzOyBkaWdfbWl4LT5uYW1lOyBkaWdfbWl4KyspIHsKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MShkaWdfbWl4LCBjb2RlYyk7CiAJCWtjdGwtPnByaXZhdGVfdmFsdWUgPSBuaWQ7Ci0JCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmJ1cy0+Y2FyZCwga2N0bCkpIDwgMCkKKwkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmJ1cy0+Y2FyZCwga2N0bCk7CisJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9Ci0JY29kZWMtPnNwZGlmX2N0bHMgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9HRVRfRElHSV9DT05WRVJULCAwKTsKKwljb2RlYy0+c3BkaWZfY3RscyA9CisJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX0dFVF9ESUdJX0NPTlZFUlQsIDApOwogCWNvZGVjLT5zcGRpZl9zdGF0dXMgPSBjb252ZXJ0X3RvX3NwZGlmX3N0YXR1cyhjb2RlYy0+c3BkaWZfY3Rscyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTg1LDcgKzEyNDUsOCBAQAogCiAjZGVmaW5lIHNuZF9oZGFfc3BkaWZfaW5fc3dpdGNoX2luZm8Jc25kX2hkYV9zcGRpZl9vdXRfc3dpdGNoX2luZm8KIAotc3RhdGljIGludCBzbmRfaGRhX3NwZGlmX2luX3N3aXRjaF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorc3RhdGljIGludCBzbmRfaGRhX3NwZGlmX2luX3N3aXRjaF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCkBAIC0xMTkzLDcgKzEyNTQsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9oZGFfc3BkaWZfaW5fc3dpdGNoX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCitzdGF0aWMgaW50IHNuZF9oZGFfc3BkaWZfaW5fc3dpdGNoX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwpAQCAtMTIwNCwxMyArMTI2NiwxNSBAQAogCWNoYW5nZSA9IGNvZGVjLT5zcGRpZl9pbl9lbmFibGUgIT0gdmFsOwogCWlmIChjaGFuZ2UgfHwgY29kZWMtPmluX3Jlc3VtZSkgewogCQljb2RlYy0+c3BkaWZfaW5fZW5hYmxlID0gdmFsOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLCB2YWwpOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLAorCQkJCSAgICB2YWwpOwogCX0KIAltdXRleF91bmxvY2soJmNvZGVjLT5zcGRpZl9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KIAotc3RhdGljIGludCBzbmRfaGRhX3NwZGlmX2luX3N0YXR1c19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorc3RhdGljIGludCBzbmRfaGRhX3NwZGlmX2luX3N0YXR1c19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKQEAgLTEyNTQsNyArMTMxOCw4IEBACiAgKgogICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqLwotaW50IHNuZF9oZGFfY3JlYXRlX3NwZGlmX2luX2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCitpbnQgX19kZXZpbml0IHNuZF9oZGFfY3JlYXRlX3NwZGlmX2luX2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgIGhkYV9uaWRfdCBuaWQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwpAQCAtMTI2MywxMCArMTMyOCwxMyBAQAogCWZvciAoZGlnX21peCA9IGRpZ19pbl9jdGxzOyBkaWdfbWl4LT5uYW1lOyBkaWdfbWl4KyspIHsKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MShkaWdfbWl4LCBjb2RlYyk7CiAJCWtjdGwtPnByaXZhdGVfdmFsdWUgPSBuaWQ7Ci0JCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmJ1cy0+Y2FyZCwga2N0bCkpIDwgMCkKKwkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmJ1cy0+Y2FyZCwga2N0bCk7CisJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9Ci0JY29kZWMtPnNwZGlmX2luX2VuYWJsZSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX0dFVF9ESUdJX0NPTlZFUlQsIDApICYgMTsKKwljb2RlYy0+c3BkaWZfaW5fZW5hYmxlID0KKwkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfR0VUX0RJR0lfQ09OVkVSVCwgMCkgJgorCQlBQ19ESUcxX0VOQUJMRTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMwNCwxNSArMTM3MiwxNCBAQAogICoKICAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCi1pbnQgc25kX2hkYV9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2J1cyAqYnVzKQoraW50IF9fZGV2aW5pdCBzbmRfaGRhX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfYnVzICpidXMpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYzsKIAogCS8qIGJ1aWxkIGNvbnRyb2xzICovCi0JbGlzdF9mb3JfZWFjaChwLCAmYnVzLT5jb2RlY19saXN0KSB7Ci0JCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgaGRhX2NvZGVjLCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvZGVjLCAmYnVzLT5jb2RlY19saXN0LCBsaXN0KSB7CiAJCWludCBlcnI7Ci0JCWlmICghIGNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfY29udHJvbHMpCisJCWlmICghY29kZWMtPnBhdGNoX29wcy5idWlsZF9jb250cm9scykKIAkJCWNvbnRpbnVlOwogCQllcnIgPSBjb2RlYy0+cGF0Y2hfb3BzLmJ1aWxkX2NvbnRyb2xzKGNvZGVjKTsKIAkJaWYgKGVyciA8IDApCkBAIC0xMzIwLDEzICsxMzg3LDEyIEBACiAJfQogCiAJLyogaW5pdGlhbGl6ZSAqLwotCWxpc3RfZm9yX2VhY2gocCwgJmJ1cy0+Y29kZWNfbGlzdCkgewotCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhkYV9jb2RlYywgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb2RlYywgJmJ1cy0+Y29kZWNfbGlzdCwgbGlzdCkgewogCQlpbnQgZXJyOwogCQloZGFfc2V0X3Bvd2VyX3N0YXRlKGNvZGVjLAogCQkJCSAgICBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcsCiAJCQkJICAgIEFDX1BXUlNUX0QwKTsKLQkJaWYgKCEgY29kZWMtPnBhdGNoX29wcy5pbml0KQorCQlpZiAoIWNvZGVjLT5wYXRjaF9vcHMuaW5pdCkKIAkJCWNvbnRpbnVlOwogCQllcnIgPSBjb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTEzMzUsOCArMTQwMSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLUVYUE9SVF9TWU1CT0woc25kX2hkYV9idWlsZF9jb250cm9scyk7Ci0KIC8qCiAgKiBzdHJlYW0gZm9ybWF0cwogICovCkBAIC0xMzYxLDYgKzE0MjUsMTEgQEAKIAl7IDk2MDAwLCBTTkRSVl9QQ01fUkFURV85NjAwMCwgMHgwODAwIH0sIC8qIDIgeCA0OCAqLwogCXsgMTc2NDAwLCBTTkRSVl9QQ01fUkFURV8xNzY0MDAsIDB4NTgwMCB9LC8qIDQgeCA0NCAqLwogCXsgMTkyMDAwLCBTTkRSVl9QQ01fUkFURV8xOTIwMDAsIDB4MTgwMCB9LCAvKiA0IHggNDggKi8KKyNkZWZpbmUgQUNfUEFSX1BDTV9SQVRFX0JJVFMJMTEKKwkvKiB1cCB0byBiaXRzIDEwLCAzODRrSFogaXNuJ3Qgc3VwcG9ydGVkIHByb3Blcmx5ICovCisKKwkvKiBub3QgYXV0b2RldGVjdGVkIHZhbHVlICovCisJeyA5NjAwLCBTTkRSVl9QQ01fUkFURV9LTk9ULCAweDA0MDAgfSwgLyogMS81IHggNDggKi8KIAogCXsgMCB9IC8qIHRlcm1pbmF0b3IgKi8KIH07CkBAIC0xMzg5LDcgKzE0NTgsNyBAQAogCQkJdmFsID0gcmF0ZV9iaXRzW2ldLmhkYV9mbXQ7CiAJCQlicmVhazsKIAkJfQotCWlmICghIHJhdGVfYml0c1tpXS5oeikgeworCWlmICghcmF0ZV9iaXRzW2ldLmh6KSB7CiAJCXNuZF9wcmludGRkKCJpbnZhbGlkIHJhdGUgJWRcbiIsIHJhdGUpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDE0LDE1ICsxNDgzLDE0IEBACiAJCQl2YWwgfD0gMHgyMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50ZGQoImludmFsaWQgZm9ybWF0IHdpZHRoICVkXG4iLCBzbmRfcGNtX2Zvcm1hdF93aWR0aChmb3JtYXQpKTsKKwkJc25kX3ByaW50ZGQoImludmFsaWQgZm9ybWF0IHdpZHRoICVkXG4iLAorCQkJICAgIHNuZF9wY21fZm9ybWF0X3dpZHRoKGZvcm1hdCkpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXR1cm4gdmFsOwogfQogCi1FWFBPUlRfU1lNQk9MKHNuZF9oZGFfY2FsY19zdHJlYW1fZm9ybWF0KTsKLQogLyoqCiAgKiBzbmRfaGRhX3F1ZXJ5X3N1cHBvcnRlZF9wY20gLSBxdWVyeSB0aGUgc3VwcG9ydGVkIFBDTSByYXRlcyBhbmQgZm9ybWF0cwogICogQGNvZGVjOiB0aGUgSERBIGNvZGVjCkBAIC0xNDQ5LDEyICsxNTE3LDEyIEBACiAJCWlmICh2YWwgPT0gLTEpCiAJCQlyZXR1cm4gLUVJTzsKIAl9Ci0JaWYgKCEgdmFsKQorCWlmICghdmFsKQogCQl2YWwgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIGNvZGVjLT5hZmcsIEFDX1BBUl9QQ00pOwogCiAJaWYgKHJhdGVzcCkgewogCQl1MzIgcmF0ZXMgPSAwOwotCQlmb3IgKGkgPSAwOyByYXRlX2JpdHNbaV0uaHo7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgQUNfUEFSX1BDTV9SQVRFX0JJVFM7IGkrKykgewogCQkJaWYgKHZhbCAmICgxIDw8IGkpKQogCQkJCXJhdGVzIHw9IHJhdGVfYml0c1tpXS5hbHNhX2JpdHM7CiAJCX0KQEAgLTE0NzAsOCArMTUzOCw5IEBACiAJCXN0cmVhbXMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1NUUkVBTSk7CiAJCWlmIChzdHJlYW1zID09IC0xKQogCQkJcmV0dXJuIC1FSU87Ci0JCWlmICghIHN0cmVhbXMpIHsKLQkJCXN0cmVhbXMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIGNvZGVjLT5hZmcsIEFDX1BBUl9TVFJFQU0pOworCQlpZiAoIXN0cmVhbXMpIHsKKwkJCXN0cmVhbXMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIGNvZGVjLT5hZmcsCisJCQkJCQkgICAgIEFDX1BBUl9TVFJFQU0pOwogCQkJaWYgKHN0cmVhbXMgPT0gLTEpCiAJCQkJcmV0dXJuIC1FSU87CiAJCX0KQEAgLTE0OTUsNyArMTU2NCw4IEBACiAJCQkJCWJwcyA9IDI0OwogCQkJCWVsc2UgaWYgKHZhbCAmIEFDX1NVUFBDTV9CSVRTXzIwKQogCQkJCQlicHMgPSAyMDsKLQkJCX0gZWxzZSBpZiAodmFsICYgKEFDX1NVUFBDTV9CSVRTXzIwfEFDX1NVUFBDTV9CSVRTXzI0fEFDX1NVUFBDTV9CSVRTXzMyKSkgeworCQkJfSBlbHNlIGlmICh2YWwgJiAoQUNfU1VQUENNX0JJVFNfMjB8QUNfU1VQUENNX0JJVFNfMjR8CisJCQkJCSAgQUNfU1VQUENNX0JJVFNfMzIpKSB7CiAJCQkJZm9ybWF0cyB8PSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRTsKIAkJCQlpZiAodmFsICYgQUNfU1VQUENNX0JJVFNfMzIpCiAJCQkJCWJwcyA9IDMyOwpAQCAtMTUwNSwxMCArMTU3NSwxMiBAQAogCQkJCQlicHMgPSAyMDsKIAkJCX0KIAkJfQotCQllbHNlIGlmIChzdHJlYW1zID09IEFDX1NVUEZNVF9GTE9BVDMyKSB7IC8qIHNob3VsZCBiZSBleGNsdXNpdmUgKi8KKwkJZWxzZSBpZiAoc3RyZWFtcyA9PSBBQ19TVVBGTVRfRkxPQVQzMikgeworCQkJLyogc2hvdWxkIGJlIGV4Y2x1c2l2ZSAqLwogCQkJZm9ybWF0cyB8PSBTTkRSVl9QQ01fRk1UQklUX0ZMT0FUX0xFOwogCQkJYnBzID0gMzI7Ci0JCX0gZWxzZSBpZiAoc3RyZWFtcyA9PSBBQ19TVVBGTVRfQUMzKSB7IC8qIHNob3VsZCBiZSBleGNsdXNpdmUgKi8KKwkJfSBlbHNlIGlmIChzdHJlYW1zID09IEFDX1NVUEZNVF9BQzMpIHsKKwkJCS8qIHNob3VsZCBiZSBleGNsdXNpdmUgKi8KIAkJCS8qIHRlbXBvcmFyeSBoYWNrOiB3ZSBoYXZlIHN0aWxsIG5vIHByb3BlciBzdXBwb3J0CiAJCQkgKiBmb3IgdGhlIGRpcmVjdCBBQzMgc3RyZWFtLi4uCiAJCQkgKi8KQEAgLTE1MjUsNyArMTU5Nyw4IEBACiB9CiAKIC8qKgotICogc25kX2hkYV9pc19zdXBwb3J0ZWRfZm9ybWF0IC0gY2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBzdXBwb3J0cyB0aGUgZm9ybWF0IHZhbAorICogc25kX2hkYV9pc19zdXBwb3J0ZWRfZm9ybWF0IC0gY2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBzdXBwb3J0cworICogdGhlIGZvcm1hdCB2YWwKICAqCiAgKiBSZXR1cm5zIDEgaWYgc3VwcG9ydGVkLCAwIGlmIG5vdC4KICAqLwpAQCAtMTU0MSw1MCArMTYxNCw1MCBAQAogCQlpZiAodmFsID09IC0xKQogCQkJcmV0dXJuIDA7CiAJfQotCWlmICghIHZhbCkgeworCWlmICghdmFsKSB7CiAJCXZhbCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgY29kZWMtPmFmZywgQUNfUEFSX1BDTSk7CiAJCWlmICh2YWwgPT0gLTEpCiAJCQlyZXR1cm4gMDsKIAl9CiAKIAlyYXRlID0gZm9ybWF0ICYgMHhmZjAwOwotCWZvciAoaSA9IDA7IHJhdGVfYml0c1tpXS5oejsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBQ19QQVJfUENNX1JBVEVfQklUUzsgaSsrKQogCQlpZiAocmF0ZV9iaXRzW2ldLmhkYV9mbXQgPT0gcmF0ZSkgewogCQkJaWYgKHZhbCAmICgxIDw8IGkpKQogCQkJCWJyZWFrOwogCQkJcmV0dXJuIDA7CiAJCX0KLQlpZiAoISByYXRlX2JpdHNbaV0uaHopCisJaWYgKGkgPj0gQUNfUEFSX1BDTV9SQVRFX0JJVFMpCiAJCXJldHVybiAwOwogCiAJc3RyZWFtID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9TVFJFQU0pOwogCWlmIChzdHJlYW0gPT0gLTEpCiAJCXJldHVybiAwOwotCWlmICghIHN0cmVhbSAmJiBuaWQgIT0gY29kZWMtPmFmZykKKwlpZiAoIXN0cmVhbSAmJiBuaWQgIT0gY29kZWMtPmFmZykKIAkJc3RyZWFtID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBjb2RlYy0+YWZnLCBBQ19QQVJfU1RSRUFNKTsKLQlpZiAoISBzdHJlYW0gfHwgc3RyZWFtID09IC0xKQorCWlmICghc3RyZWFtIHx8IHN0cmVhbSA9PSAtMSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoc3RyZWFtICYgQUNfU1VQRk1UX1BDTSkgewogCQlzd2l0Y2ggKGZvcm1hdCAmIDB4ZjApIHsKIAkJY2FzZSAweDAwOgotCQkJaWYgKCEgKHZhbCAmIEFDX1NVUFBDTV9CSVRTXzgpKQorCQkJaWYgKCEodmFsICYgQUNfU1VQUENNX0JJVFNfOCkpCiAJCQkJcmV0dXJuIDA7CiAJCQlicmVhazsKIAkJY2FzZSAweDEwOgotCQkJaWYgKCEgKHZhbCAmIEFDX1NVUFBDTV9CSVRTXzE2KSkKKwkJCWlmICghKHZhbCAmIEFDX1NVUFBDTV9CSVRTXzE2KSkKIAkJCQlyZXR1cm4gMDsKIAkJCWJyZWFrOwogCQljYXNlIDB4MjA6Ci0JCQlpZiAoISAodmFsICYgQUNfU1VQUENNX0JJVFNfMjApKQorCQkJaWYgKCEodmFsICYgQUNfU1VQUENNX0JJVFNfMjApKQogCQkJCXJldHVybiAwOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgzMDoKLQkJCWlmICghICh2YWwgJiBBQ19TVVBQQ01fQklUU18yNCkpCisJCQlpZiAoISh2YWwgJiBBQ19TVVBQQ01fQklUU18yNCkpCiAJCQkJcmV0dXJuIDA7CiAJCQlicmVhazsKIAkJY2FzZSAweDQwOgotCQkJaWYgKCEgKHZhbCAmIEFDX1NVUFBDTV9CSVRTXzMyKSkKKwkJCWlmICghKHZhbCAmIEFDX1NVUFBDTV9CSVRTXzMyKSkKIAkJCQlyZXR1cm4gMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTYyNSwxNSArMTY5OCwxNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNldF9wY21fZGVmYXVsdF92YWx1ZXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaW5mbykKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNldF9wY21fZGVmYXVsdF92YWx1ZXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmluZm8pCiB7Ci0JaWYgKGluZm8tPm5pZCkgewotCQkvKiBxdWVyeSBzdXBwb3J0IFBDTSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZlbiBOSUQgKi8KLQkJaWYgKCEgaW5mby0+cmF0ZXMgfHwgISBpbmZvLT5mb3JtYXRzKQotCQkJc25kX2hkYV9xdWVyeV9zdXBwb3J0ZWRfcGNtKGNvZGVjLCBpbmZvLT5uaWQsCi0JCQkJCQkgICAgaW5mby0+cmF0ZXMgPyBOVUxMIDogJmluZm8tPnJhdGVzLAotCQkJCQkJICAgIGluZm8tPmZvcm1hdHMgPyBOVUxMIDogJmluZm8tPmZvcm1hdHMsCi0JCQkJCQkgICAgaW5mby0+bWF4YnBzID8gTlVMTCA6ICZpbmZvLT5tYXhicHMpOworCS8qIHF1ZXJ5IHN1cHBvcnQgUENNIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIE5JRCAqLworCWlmIChpbmZvLT5uaWQgJiYgKCFpbmZvLT5yYXRlcyB8fCAhaW5mby0+Zm9ybWF0cykpIHsKKwkJc25kX2hkYV9xdWVyeV9zdXBwb3J0ZWRfcGNtKGNvZGVjLCBpbmZvLT5uaWQsCisJCQkJaW5mby0+cmF0ZXMgPyBOVUxMIDogJmluZm8tPnJhdGVzLAorCQkJCWluZm8tPmZvcm1hdHMgPyBOVUxMIDogJmluZm8tPmZvcm1hdHMsCisJCQkJaW5mby0+bWF4YnBzID8gTlVMTCA6ICZpbmZvLT5tYXhicHMpOwogCX0KIAlpZiAoaW5mby0+b3BzLm9wZW4gPT0gTlVMTCkKIAkJaW5mby0+b3BzLm9wZW4gPSBoZGFfcGNtX2RlZmF1bHRfb3Blbl9jbG9zZTsKQEAgLTE2NzYsMTUgKzE3NDksMTQgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBzdWNjZXNzZnVsbCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCi1pbnQgc25kX2hkYV9idWlsZF9wY21zKHN0cnVjdCBoZGFfYnVzICpidXMpCitpbnQgX19kZXZpbml0IHNuZF9oZGFfYnVpbGRfcGNtcyhzdHJ1Y3QgaGRhX2J1cyAqYnVzKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWM7CiAKLQlsaXN0X2Zvcl9lYWNoKHAsICZidXMtPmNvZGVjX2xpc3QpIHsKLQkJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoZGFfY29kZWMsIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29kZWMsICZidXMtPmNvZGVjX2xpc3QsIGxpc3QpIHsKIAkJdW5zaWduZWQgaW50IHBjbSwgczsKIAkJaW50IGVycjsKLQkJaWYgKCEgY29kZWMtPnBhdGNoX29wcy5idWlsZF9wY21zKQorCQlpZiAoIWNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfcGNtcykKIAkJCWNvbnRpbnVlOwogCQllcnIgPSBjb2RlYy0+cGF0Y2hfb3BzLmJ1aWxkX3BjbXMoY29kZWMpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTE2OTMsNyArMTc2NSw3IEBACiAJCQlmb3IgKHMgPSAwOyBzIDwgMjsgcysrKSB7CiAJCQkJc3RydWN0IGhkYV9wY21fc3RyZWFtICppbmZvOwogCQkJCWluZm8gPSAmY29kZWMtPnBjbV9pbmZvW3BjbV0uc3RyZWFtW3NdOwotCQkJCWlmICghIGluZm8tPnN1YnN0cmVhbXMpCisJCQkJaWYgKCFpbmZvLT5zdWJzdHJlYW1zKQogCQkJCQljb250aW51ZTsKIAkJCQllcnIgPSBzZXRfcGNtX2RlZmF1bHRfdmFsdWVzKGNvZGVjLCBpbmZvKTsKIAkJCQlpZiAoZXJyIDwgMCkKQEAgLTE3MDQsOCArMTc3Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLUVYUE9SVF9TWU1CT0woc25kX2hkYV9idWlsZF9wY21zKTsKLQogLyoqCiAgKiBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyAtIGNvbXBhcmUgdGhlIGN1cnJlbnQgY29kZWMgd2l0aCB0aGUgY29uZmlnIHRhYmxlCiAgKiBAY29kZWM6IHRoZSBIREEgY29kZWMKQEAgLTE3MTksOSArMTc4OSw5IEBACiAgKgogICogSWYgbm8gZW50cmllcyBhcmUgbWF0Y2hpbmcsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUuCiAgKi8KLWludCBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCSAgICAgICBpbnQgbnVtX2NvbmZpZ3MsIGNvbnN0IGNoYXIgKiptb2RlbHMsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKnRibCkKK2ludCBfX2RldmluaXQgc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSBpbnQgbnVtX2NvbmZpZ3MsIGNvbnN0IGNoYXIgKiptb2RlbHMsCisJCQkJCSBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqdGJsKQogewogCWlmIChjb2RlYy0+YnVzLT5tb2RlbG5hbWUgJiYgbW9kZWxzKSB7CiAJCWludCBpOwpAQCAtMTc3MSwyNCArMTg0MSwyNiBAQAogICoKICAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KLWludCBzbmRfaGRhX2FkZF9uZXdfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXcpCitpbnQgX19kZXZpbml0IHNuZF9oZGFfYWRkX25ld19jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3KQogewogCWludCBlcnI7CiAKIAlmb3IgKDsga25ldy0+bmFtZTsga25ldysrKSB7CiAJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CiAJCWtjdGwgPSBzbmRfY3RsX25ldzEoa25ldywgY29kZWMpOwotCQlpZiAoISBrY3RsKQorCQlpZiAoIWtjdGwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmJ1cy0+Y2FyZCwga2N0bCk7CiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlpZiAoISBjb2RlYy0+YWRkcikKKwkJCWlmICghY29kZWMtPmFkZHIpCiAJCQkJcmV0dXJuIGVycjsKIAkJCWtjdGwgPSBzbmRfY3RsX25ldzEoa25ldywgY29kZWMpOwotCQkJaWYgKCEga2N0bCkKKwkJCWlmICgha2N0bCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWtjdGwtPmlkLmRldmljZSA9IGNvZGVjLT5hZGRyOwotCQkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+YnVzLT5jYXJkLCBrY3RsKSkgPCAwKQorCQkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmJ1cy0+Y2FyZCwga2N0bCk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQpAQCAtMTc5OSw4ICsxODcxLDEwIEBACiAvKgogICogQ2hhbm5lbCBtb2RlIGhlbHBlcgogICovCi1pbnQgc25kX2hkYV9jaF9tb2RlX2luZm8oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8sCi0JCQkgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgKmNobW9kZSwgaW50IG51bV9jaG1vZGVzKQoraW50IHNuZF9oZGFfY2hfbW9kZV9pbmZvKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8sCisJCQkgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgKmNobW9kZSwKKwkJCSBpbnQgbnVtX2NobW9kZXMpCiB7CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKQEAgLTE4MTIsOCArMTg4NiwxMCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc25kX2hkYV9jaF9tb2RlX2dldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wsCi0JCQljb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSAqY2htb2RlLCBpbnQgbnVtX2NobW9kZXMsCitpbnQgc25kX2hkYV9jaF9tb2RlX2dldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sLAorCQkJY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgKmNobW9kZSwKKwkJCWludCBudW1fY2htb2RlcywKIAkJCWludCBtYXhfY2hhbm5lbHMpCiB7CiAJaW50IGk7CkBAIC0xODI3LDE1ICsxOTAzLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzbmRfaGRhX2NoX21vZGVfcHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCwKLQkJCWNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlICpjaG1vZGUsIGludCBudW1fY2htb2RlcywKK2ludCBzbmRfaGRhX2NoX21vZGVfcHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wsCisJCQljb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSAqY2htb2RlLAorCQkJaW50IG51bV9jaG1vZGVzLAogCQkJaW50ICptYXhfY2hhbm5lbHNwKQogewogCXVuc2lnbmVkIGludCBtb2RlOwogCiAJbW9kZSA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CiAJc25kX2Fzc2VydChtb2RlIDwgbnVtX2NobW9kZXMsIHJldHVybiAtRUlOVkFMKTsKLQlpZiAoKm1heF9jaGFubmVsc3AgPT0gY2htb2RlW21vZGVdLmNoYW5uZWxzICYmICEgY29kZWMtPmluX3Jlc3VtZSkKKwlpZiAoKm1heF9jaGFubmVsc3AgPT0gY2htb2RlW21vZGVdLmNoYW5uZWxzICYmICFjb2RlYy0+aW5fcmVzdW1lKQogCQlyZXR1cm4gMDsKIAkvKiBjaGFuZ2UgdGhlIGN1cnJlbnQgY2hhbm5lbCBzZXR0aW5nICovCiAJKm1heF9jaGFubmVsc3AgPSBjaG1vZGVbbW9kZV0uY2hhbm5lbHM7CkBAIC0xODQ3LDcgKzE5MjUsOCBAQAogLyoKICAqIGlucHV0IE1VWCBoZWxwZXIKICAqLwotaW50IHNuZF9oZGFfaW5wdXRfbXV4X2luZm8oY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXgsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCitpbnQgc25kX2hkYV9pbnB1dF9tdXhfaW5mbyhjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCwKKwkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJdW5zaWduZWQgaW50IGluZGV4OwogCkBAIC0xODYxLDggKzE5NDAsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHNuZF9oZGFfaW5wdXRfbXV4X3B1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXgsCi0JCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sLCBoZGFfbmlkX3QgbmlkLAoraW50IHNuZF9oZGFfaW5wdXRfbXV4X3B1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCSAgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXgsCisJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sLAorCQkJICBoZGFfbmlkX3QgbmlkLAogCQkJICB1bnNpZ25lZCBpbnQgKmN1cl92YWwpCiB7CiAJdW5zaWduZWQgaW50IGlkeDsKQEAgLTE4NzAsNyArMTk1MSw3IEBACiAJaWR4ID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKIAlpZiAoaWR4ID49IGltdXgtPm51bV9pdGVtcykKIAkJaWR4ID0gaW11eC0+bnVtX2l0ZW1zIC0gMTsKLQlpZiAoKmN1cl92YWwgPT0gaWR4ICYmICEgY29kZWMtPmluX3Jlc3VtZSkKKwlpZiAoKmN1cl92YWwgPT0gaWR4ICYmICFjb2RlYy0+aW5fcmVzdW1lKQogCQlyZXR1cm4gMDsKIAlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAogCQkJICAgIGltdXgtPml0ZW1zW2lkeF0uaW5kZXgpOwpAQCAtMTg4MywyNSArMTk2NCw1MyBAQAogICogTXVsdGktY2hhbm5lbCAvIGRpZ2l0YWwtb3V0IFBDTSBoZWxwZXIgZnVuY3Rpb25zCiAgKi8KIAorLyogc2V0dXAgU1BESUYgb3V0cHV0IHN0cmVhbSAqLworc3RhdGljIHZvaWQgc2V0dXBfZGlnX291dF9zdHJlYW0oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkJIHVuc2lnbmVkIGludCBzdHJlYW1fdGFnLCB1bnNpZ25lZCBpbnQgZm9ybWF0KQoreworCS8qIHR1cm4gb2ZmIFNQRElGIG9uY2U7IG90aGVyd2lzZSB0aGUgSUVDOTU4IGJpdHMgd29uJ3QgYmUgdXBkYXRlZCAqLworCWlmIChjb2RlYy0+c3BkaWZfY3RscyAmIEFDX0RJRzFfRU5BQkxFKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLAorCQkJCSAgICBjb2RlYy0+c3BkaWZfY3RscyAmIH5BQ19ESUcxX0VOQUJMRSAmIDB4ZmYpOworCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBuaWQsIHN0cmVhbV90YWcsIDAsIGZvcm1hdCk7CisJLyogdHVybiBvbiBhZ2FpbiAoaWYgbmVlZGVkKSAqLworCWlmIChjb2RlYy0+c3BkaWZfY3RscyAmIEFDX0RJRzFfRU5BQkxFKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLAorCQkJCSAgICBjb2RlYy0+c3BkaWZfY3RscyAmIDB4ZmYpOworfQorCiAvKgogICogb3BlbiB0aGUgZGlnaXRhbCBvdXQgaW4gdGhlIGV4Y2x1c2l2ZSBtb2RlCiAgKi8KLWludCBzbmRfaGRhX211bHRpX291dF9kaWdfb3BlbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IGhkYV9tdWx0aV9vdXQgKm1vdXQpCitpbnQgc25kX2hkYV9tdWx0aV9vdXRfZGlnX29wZW4oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkgICAgICAgc3RydWN0IGhkYV9tdWx0aV9vdXQgKm1vdXQpCiB7CiAJbXV0ZXhfbG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKLQlpZiAobW91dC0+ZGlnX291dF91c2VkKSB7Ci0JCW11dGV4X3VubG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKLQkJcmV0dXJuIC1FQlVTWTsgLyogYWxyZWFkeSBiZWluZyB1c2VkICovCi0JfQorCWlmIChtb3V0LT5kaWdfb3V0X3VzZWQgPT0gSERBX0RJR19BTkFMT0dfRFVQKQorCQkvKiBhbHJlYWR5IG9wZW5lZCBhcyBhbmFsb2cgZHVwOyByZXNldCBpdCBvbmNlICovCisJCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBtb3V0LT5kaWdfb3V0X25pZCwgMCwgMCwgMCk7CiAJbW91dC0+ZGlnX291dF91c2VkID0gSERBX0RJR19FWENMVVNJVkU7CiAJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCitpbnQgc25kX2hkYV9tdWx0aV9vdXRfZGlnX3ByZXBhcmUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICBzdHJ1Y3QgaGRhX211bHRpX291dCAqbW91dCwKKwkJCQkgIHVuc2lnbmVkIGludCBzdHJlYW1fdGFnLAorCQkJCSAgdW5zaWduZWQgaW50IGZvcm1hdCwKKwkJCQkgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCW11dGV4X2xvY2soJmNvZGVjLT5zcGRpZl9tdXRleCk7CisJc2V0dXBfZGlnX291dF9zdHJlYW0oY29kZWMsIG1vdXQtPmRpZ19vdXRfbmlkLCBzdHJlYW1fdGFnLCBmb3JtYXQpOworCW11dGV4X3VubG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIHJlbGVhc2UgdGhlIGRpZ2l0YWwgb3V0CiAgKi8KLWludCBzbmRfaGRhX211bHRpX291dF9kaWdfY2xvc2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBoZGFfbXVsdGlfb3V0ICptb3V0KQoraW50IHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19jbG9zZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQlzdHJ1Y3QgaGRhX211bHRpX291dCAqbW91dCkKIHsKIAltdXRleF9sb2NrKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOwogCW1vdXQtPmRpZ19vdXRfdXNlZCA9IDA7CkBAIC0xOTEyLDcgKzIwMjEsOCBAQAogLyoKICAqIHNldCB1cCBtb3JlIHJlc3RyaWN0aW9ucyBmb3IgYW5hbG9nIG91dAogICovCi1pbnQgc25kX2hkYV9tdWx0aV9vdXRfYW5hbG9nX29wZW4oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBoZGFfbXVsdGlfb3V0ICptb3V0LAoraW50IHNuZF9oZGFfbXVsdGlfb3V0X2FuYWxvZ19vcGVuKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgc3RydWN0IGhkYV9tdWx0aV9vdXQgKm1vdXQsCiAJCQkJICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IG1vdXQtPm1heF9jaGFubmVsczsKQEAgLTE5MjQsNyArMjAzNCw4IEBACiAgKiBzZXQgdXAgdGhlIGkvbyBmb3IgYW5hbG9nIG91dAogICogd2hlbiB0aGUgZGlnaXRhbCBvdXQgaXMgYXZhaWxhYmxlLCBjb3B5IHRoZSBmcm9udCBvdXQgdG8gZGlnaXRhbCBvdXQsIHRvby4KICAqLwotaW50IHNuZF9oZGFfbXVsdGlfb3V0X2FuYWxvZ19wcmVwYXJlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3QgaGRhX211bHRpX291dCAqbW91dCwKK2ludCBzbmRfaGRhX211bHRpX291dF9hbmFsb2dfcHJlcGFyZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgIHN0cnVjdCBoZGFfbXVsdGlfb3V0ICptb3V0LAogCQkJCSAgICAgdW5zaWduZWQgaW50IHN0cmVhbV90YWcsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LAogCQkJCSAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0xOTM2LDI0ICsyMDQ3LDI3IEBACiAJbXV0ZXhfbG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKIAlpZiAobW91dC0+ZGlnX291dF9uaWQgJiYgbW91dC0+ZGlnX291dF91c2VkICE9IEhEQV9ESUdfRVhDTFVTSVZFKSB7CiAJCWlmIChjaHMgPT0gMiAmJgotCQkgICAgc25kX2hkYV9pc19zdXBwb3J0ZWRfZm9ybWF0KGNvZGVjLCBtb3V0LT5kaWdfb3V0X25pZCwgZm9ybWF0KSAmJgotCQkgICAgISAoY29kZWMtPnNwZGlmX3N0YXR1cyAmIElFQzk1OF9BRVMwX05PTkFVRElPKSkgeworCQkgICAgc25kX2hkYV9pc19zdXBwb3J0ZWRfZm9ybWF0KGNvZGVjLCBtb3V0LT5kaWdfb3V0X25pZCwKKwkJCQkJCWZvcm1hdCkgJiYKKwkJICAgICEoY29kZWMtPnNwZGlmX3N0YXR1cyAmIElFQzk1OF9BRVMwX05PTkFVRElPKSkgewogCQkJbW91dC0+ZGlnX291dF91c2VkID0gSERBX0RJR19BTkFMT0dfRFVQOwotCQkJLyogc2V0dXAgZGlnaXRhbCByZWNlaXZlciAqLwotCQkJc25kX2hkYV9jb2RlY19zZXR1cF9zdHJlYW0oY29kZWMsIG1vdXQtPmRpZ19vdXRfbmlkLAotCQkJCQkJICAgc3RyZWFtX3RhZywgMCwgZm9ybWF0KTsKKwkJCXNldHVwX2RpZ19vdXRfc3RyZWFtKGNvZGVjLCBtb3V0LT5kaWdfb3V0X25pZCwKKwkJCQkJICAgICBzdHJlYW1fdGFnLCBmb3JtYXQpOwogCQl9IGVsc2UgewogCQkJbW91dC0+ZGlnX291dF91c2VkID0gMDsKLQkJCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBtb3V0LT5kaWdfb3V0X25pZCwgMCwgMCwgMCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgbW91dC0+ZGlnX291dF9uaWQsCisJCQkJCQkgICAwLCAwLCAwKTsKIAkJfQogCX0KIAltdXRleF91bmxvY2soJmNvZGVjLT5zcGRpZl9tdXRleCk7CiAKIAkvKiBmcm9udCAqLwotCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBuaWRzW0hEQV9GUk9OVF0sIHN0cmVhbV90YWcsIDAsIGZvcm1hdCk7CisJc25kX2hkYV9jb2RlY19zZXR1cF9zdHJlYW0oY29kZWMsIG5pZHNbSERBX0ZST05UXSwgc3RyZWFtX3RhZywKKwkJCQkgICAwLCBmb3JtYXQpOwogCWlmIChtb3V0LT5ocF9uaWQgJiYgbW91dC0+aHBfbmlkICE9IG5pZHNbSERBX0ZST05UXSkKIAkJLyogaGVhZHBob25lIG91dCB3aWxsIGp1c3QgZGVjb2RlIGZyb250IGxlZnQvcmlnaHQgKHN0ZXJlbykgKi8KLQkJc25kX2hkYV9jb2RlY19zZXR1cF9zdHJlYW0oY29kZWMsIG1vdXQtPmhwX25pZCwgc3RyZWFtX3RhZywgMCwgZm9ybWF0KTsKKwkJc25kX2hkYV9jb2RlY19zZXR1cF9zdHJlYW0oY29kZWMsIG1vdXQtPmhwX25pZCwgc3RyZWFtX3RhZywKKwkJCQkJICAgMCwgZm9ybWF0KTsKIAkvKiBleHRyYSBvdXRwdXRzIGNvcGllZCBmcm9tIGZyb250ICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobW91dC0+ZXh0cmFfb3V0X25pZCk7IGkrKykKIAkJaWYgKG1vdXQtPmV4dHJhX291dF9uaWRbaV0pCkBAIC0xOTY0LDExICsyMDc4LDExIEBACiAJLyogc3Vycm91bmRzICovCiAJZm9yIChpID0gMTsgaSA8IG1vdXQtPm51bV9kYWNzOyBpKyspIHsKIAkJaWYgKGNocyA+PSAoaSArIDEpICogMikgLyogaW5kZXBlbmRlbnQgb3V0ICovCi0JCQlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgbmlkc1tpXSwgc3RyZWFtX3RhZywgaSAqIDIsCi0JCQkJCQkgICBmb3JtYXQpOworCQkJc25kX2hkYV9jb2RlY19zZXR1cF9zdHJlYW0oY29kZWMsIG5pZHNbaV0sIHN0cmVhbV90YWcsCisJCQkJCQkgICBpICogMiwgZm9ybWF0KTsKIAkJZWxzZSAvKiBjb3B5IGZyb250ICovCi0JCQlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgbmlkc1tpXSwgc3RyZWFtX3RhZywgMCwKLQkJCQkJCSAgIGZvcm1hdCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgbmlkc1tpXSwgc3RyZWFtX3RhZywKKwkJCQkJCSAgIDAsIGZvcm1hdCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTk3Niw3ICsyMDkwLDggQEAKIC8qCiAgKiBjbGVhbiB1cCB0aGUgc2V0dGluZyBmb3IgYW5hbG9nIG91dAogICovCi1pbnQgc25kX2hkYV9tdWx0aV9vdXRfYW5hbG9nX2NsZWFudXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBoZGFfbXVsdGlfb3V0ICptb3V0KQoraW50IHNuZF9oZGFfbXVsdGlfb3V0X2FuYWxvZ19jbGVhbnVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgc3RydWN0IGhkYV9tdWx0aV9vdXQgKm1vdXQpCiB7CiAJaGRhX25pZF90ICpuaWRzID0gbW91dC0+ZGFjX25pZHM7CiAJaW50IGk7CkBAIC0yMDAzLDcgKzIxMTgsNyBAQAogICogSGVscGVyIGZvciBhdXRvbWF0aWMgcGluZyBjb25maWd1cmF0aW9uCiAgKi8KIAotc3RhdGljIGludCBpc19pbl9uaWRfbGlzdChoZGFfbmlkX3QgbmlkLCBoZGFfbmlkX3QgKmxpc3QpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpc19pbl9uaWRfbGlzdChoZGFfbmlkX3QgbmlkLCBoZGFfbmlkX3QgKmxpc3QpCiB7CiAJZm9yICg7ICpsaXN0OyBsaXN0KyspCiAJCWlmICgqbGlzdCA9PSBuaWQpCkBAIC0yMDExLDYgKzIxMjYsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorCisvKgorICogU29ydCBhbiBhc3NvY2lhdGVkIGdyb3VwIG9mIHBpbnMgYWNjb3JkaW5nIHRvIHRoZWlyIHNlcXVlbmNlIG51bWJlcnMuCisgKi8KK3N0YXRpYyB2b2lkIHNvcnRfcGluc19ieV9zZXF1ZW5jZShoZGFfbmlkX3QgKiBwaW5zLCBzaG9ydCAqIHNlcXVlbmNlcywKKwkJCQkgIGludCBudW1fcGlucykKK3sKKwlpbnQgaSwgajsKKwlzaG9ydCBzZXE7CisJaGRhX25pZF90IG5pZDsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpbnM7IGkrKykgeworCQlmb3IgKGogPSBpICsgMTsgaiA8IG51bV9waW5zOyBqKyspIHsKKwkJCWlmIChzZXF1ZW5jZXNbaV0gPiBzZXF1ZW5jZXNbal0pIHsKKwkJCQlzZXEgPSBzZXF1ZW5jZXNbaV07CisJCQkJc2VxdWVuY2VzW2ldID0gc2VxdWVuY2VzW2pdOworCQkJCXNlcXVlbmNlc1tqXSA9IHNlcTsKKwkJCQluaWQgPSBwaW5zW2ldOworCQkJCXBpbnNbaV0gPSBwaW5zW2pdOworCQkJCXBpbnNbal0gPSBuaWQ7CisJCQl9CisJCX0KKwl9Cit9CisKKwogLyoKICAqIFBhcnNlIGFsbCBwaW4gd2lkZ2V0cyBhbmQgc3RvcmUgdGhlIHVzZWZ1bCBwaW4gbmlkcyB0byBjZmcKICAqCkBAIC0yMDI4LDIyICsyMTY5LDI3IEBACiAgKiBUaGUgZGlnaXRhbCBpbnB1dC9vdXRwdXQgcGlucyBhcmUgYXNzaWduZWQgdG8gZGlnX2luX3BpbiBhbmQgZGlnX291dF9waW4sCiAgKiByZXNwZWN0aXZlbHkuCiAgKi8KLWludCBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcsCi0JCQkJIGhkYV9uaWRfdCAqaWdub3JlX25pZHMpCitpbnQgX19kZXZpbml0IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgIHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZywKKwkJCQkJICAgaGRhX25pZF90ICppZ25vcmVfbmlkcykKIHsKIAloZGFfbmlkX3QgbmlkLCBuaWRfc3RhcnQ7Ci0JaW50IGksIGosIG5vZGVzOwotCXNob3J0IHNlcSwgYXNzb2NfbGluZV9vdXQsIHNlcXVlbmNlc1tBUlJBWV9TSVpFKGNmZy0+bGluZV9vdXRfcGlucyldOworCWludCBub2RlczsKKwlzaG9ydCBzZXEsIGFzc29jX2xpbmVfb3V0LCBhc3NvY19zcGVha2VyOworCXNob3J0IHNlcXVlbmNlc19saW5lX291dFtBUlJBWV9TSVpFKGNmZy0+bGluZV9vdXRfcGlucyldOworCXNob3J0IHNlcXVlbmNlc19zcGVha2VyW0FSUkFZX1NJWkUoY2ZnLT5zcGVha2VyX3BpbnMpXTsKIAogCW1lbXNldChjZmcsIDAsIHNpemVvZigqY2ZnKSk7CiAKLQltZW1zZXQoc2VxdWVuY2VzLCAwLCBzaXplb2Yoc2VxdWVuY2VzKSk7Ci0JYXNzb2NfbGluZV9vdXQgPSAwOworCW1lbXNldChzZXF1ZW5jZXNfbGluZV9vdXQsIDAsIHNpemVvZihzZXF1ZW5jZXNfbGluZV9vdXQpKTsKKwltZW1zZXQoc2VxdWVuY2VzX3NwZWFrZXIsIDAsIHNpemVvZihzZXF1ZW5jZXNfc3BlYWtlcikpOworCWFzc29jX2xpbmVfb3V0ID0gYXNzb2Nfc3BlYWtlciA9IDA7CiAKIAlub2RlcyA9IHNuZF9oZGFfZ2V0X3N1Yl9ub2Rlcyhjb2RlYywgY29kZWMtPmFmZywgJm5pZF9zdGFydCk7CiAJZm9yIChuaWQgPSBuaWRfc3RhcnQ7IG5pZCA8IG5vZGVzICsgbmlkX3N0YXJ0OyBuaWQrKykgewogCQl1bnNpZ25lZCBpbnQgd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7Ci0JCXVuc2lnbmVkIGludCB3aWRfdHlwZSA9ICh3aWRfY2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOworCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPQorCQkJKHdpZF9jYXBzICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7CiAJCXVuc2lnbmVkIGludCBkZWZfY29uZjsKIAkJc2hvcnQgYXNzb2MsIGxvYzsKIApAQCAtMjA1NCw3ICsyMjAwLDggQEAKIAkJaWYgKGlnbm9yZV9uaWRzICYmIGlzX2luX25pZF9saXN0KG5pZCwgaWdub3JlX25pZHMpKQogCQkJY29udGludWU7CiAKLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAorCQkJCQkgICAgICBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CiAJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpID09IEFDX0pBQ0tfUE9SVF9OT05FKQogCQkJY29udGludWU7CiAJCWxvYyA9IGdldF9kZWZjZmdfbG9jYXRpb24oZGVmX2NvbmYpOwpAQCAtMjA2MiwyMiArMjIwOSwzMSBAQAogCQljYXNlIEFDX0pBQ0tfTElORV9PVVQ6CiAJCQlzZXEgPSBnZXRfZGVmY2ZnX3NlcXVlbmNlKGRlZl9jb25mKTsKIAkJCWFzc29jID0gZ2V0X2RlZmNmZ19hc3NvY2lhdGlvbihkZWZfY29uZik7Ci0JCQlpZiAoISBhc3NvYykKKwkJCWlmICghYXNzb2MpCiAJCQkJY29udGludWU7Ci0JCQlpZiAoISBhc3NvY19saW5lX291dCkKKwkJCWlmICghYXNzb2NfbGluZV9vdXQpCiAJCQkJYXNzb2NfbGluZV9vdXQgPSBhc3NvYzsKIAkJCWVsc2UgaWYgKGFzc29jX2xpbmVfb3V0ICE9IGFzc29jKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKGNmZy0+bGluZV9vdXRzID49IEFSUkFZX1NJWkUoY2ZnLT5saW5lX291dF9waW5zKSkKIAkJCQljb250aW51ZTsKIAkJCWNmZy0+bGluZV9vdXRfcGluc1tjZmctPmxpbmVfb3V0c10gPSBuaWQ7Ci0JCQlzZXF1ZW5jZXNbY2ZnLT5saW5lX291dHNdID0gc2VxOworCQkJc2VxdWVuY2VzX2xpbmVfb3V0W2NmZy0+bGluZV9vdXRzXSA9IHNlcTsKIAkJCWNmZy0+bGluZV9vdXRzKys7CiAJCQlicmVhazsKIAkJY2FzZSBBQ19KQUNLX1NQRUFLRVI6CisJCQlzZXEgPSBnZXRfZGVmY2ZnX3NlcXVlbmNlKGRlZl9jb25mKTsKKwkJCWFzc29jID0gZ2V0X2RlZmNmZ19hc3NvY2lhdGlvbihkZWZfY29uZik7CisJCQlpZiAoISBhc3NvYykKKwkJCQljb250aW51ZTsKKwkJCWlmICghIGFzc29jX3NwZWFrZXIpCisJCQkJYXNzb2Nfc3BlYWtlciA9IGFzc29jOworCQkJZWxzZSBpZiAoYXNzb2Nfc3BlYWtlciAhPSBhc3NvYykKKwkJCQljb250aW51ZTsKIAkJCWlmIChjZmctPnNwZWFrZXJfb3V0cyA+PSBBUlJBWV9TSVpFKGNmZy0+c3BlYWtlcl9waW5zKSkKIAkJCQljb250aW51ZTsKIAkJCWNmZy0+c3BlYWtlcl9waW5zW2NmZy0+c3BlYWtlcl9vdXRzXSA9IG5pZDsKKwkJCXNlcXVlbmNlc19zcGVha2VyW2NmZy0+c3BlYWtlcl9vdXRzXSA9IHNlcTsKIAkJCWNmZy0+c3BlYWtlcl9vdXRzKys7CiAJCQlicmVhazsKIAkJY2FzZSBBQ19KQUNLX0hQX09VVDoKQEAgLTIxMjMsMzQgKzIyNzksNDUgQEAKIAl9CiAKIAkvKiBzb3J0IGJ5IHNlcXVlbmNlICovCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspCi0JCWZvciAoaiA9IGkgKyAxOyBqIDwgY2ZnLT5saW5lX291dHM7IGorKykKLQkJCWlmIChzZXF1ZW5jZXNbaV0gPiBzZXF1ZW5jZXNbal0pIHsKLQkJCQlzZXEgPSBzZXF1ZW5jZXNbaV07Ci0JCQkJc2VxdWVuY2VzW2ldID0gc2VxdWVuY2VzW2pdOwotCQkJCXNlcXVlbmNlc1tqXSA9IHNlcTsKLQkJCQluaWQgPSBjZmctPmxpbmVfb3V0X3BpbnNbaV07Ci0JCQkJY2ZnLT5saW5lX291dF9waW5zW2ldID0gY2ZnLT5saW5lX291dF9waW5zW2pdOwotCQkJCWNmZy0+bGluZV9vdXRfcGluc1tqXSA9IG5pZDsKLQkJCX0KKwlzb3J0X3BpbnNfYnlfc2VxdWVuY2UoY2ZnLT5saW5lX291dF9waW5zLCBzZXF1ZW5jZXNfbGluZV9vdXQsCisJCQkgICAgICBjZmctPmxpbmVfb3V0cyk7CisJc29ydF9waW5zX2J5X3NlcXVlbmNlKGNmZy0+c3BlYWtlcl9waW5zLCBzZXF1ZW5jZXNfc3BlYWtlciwKKwkJCSAgICAgIGNmZy0+c3BlYWtlcl9vdXRzKTsKKwkKKwkvKgorCSAqIEZJWC1VUDogaWYgbm8gbGluZS1vdXRzIGFyZSBkZXRlY3RlZCwgdHJ5IHRvIHVzZSBzcGVha2VyIG9yIEhQIHBpbgorCSAqIGFzIGEgcHJpbWFyeSBvdXRwdXQKKwkgKi8KKwlpZiAoIWNmZy0+bGluZV9vdXRzKSB7CisJCWlmIChjZmctPnNwZWFrZXJfb3V0cykgeworCQkJY2ZnLT5saW5lX291dHMgPSBjZmctPnNwZWFrZXJfb3V0czsKKwkJCW1lbWNweShjZmctPmxpbmVfb3V0X3BpbnMsIGNmZy0+c3BlYWtlcl9waW5zLAorCQkJICAgICAgIHNpemVvZihjZmctPnNwZWFrZXJfcGlucykpOworCQkJY2ZnLT5zcGVha2VyX291dHMgPSAwOworCQkJbWVtc2V0KGNmZy0+c3BlYWtlcl9waW5zLCAwLCBzaXplb2YoY2ZnLT5zcGVha2VyX3BpbnMpKTsKKwkJCWNmZy0+bGluZV9vdXRfdHlwZSA9IEFVVE9fUElOX1NQRUFLRVJfT1VUOworCQl9IGVsc2UgaWYgKGNmZy0+aHBfb3V0cykgeworCQkJY2ZnLT5saW5lX291dHMgPSBjZmctPmhwX291dHM7CisJCQltZW1jcHkoY2ZnLT5saW5lX291dF9waW5zLCBjZmctPmhwX3BpbnMsCisJCQkgICAgICAgc2l6ZW9mKGNmZy0+aHBfcGlucykpOworCQkJY2ZnLT5ocF9vdXRzID0gMDsKKwkJCW1lbXNldChjZmctPmhwX3BpbnMsIDAsIHNpemVvZihjZmctPmhwX3BpbnMpKTsKKwkJCWNmZy0+bGluZV9vdXRfdHlwZSA9IEFVVE9fUElOX0hQX09VVDsKKwkJfQorCX0KIAogCS8qIFJlb3JkZXIgdGhlIHN1cnJvdW5kIGNoYW5uZWxzCiAJICogQUxTQSBzZXF1ZW5jZSBpcyBmcm9udC9zdXJyL2NsZmUvc2lkZQogCSAqIEhEQSBzZXF1ZW5jZSBpczoKIAkgKiAgICA0LWNoOiBmcm9udC9zdXJyICA9PiAgT0sgYXMgaXQgaXMKIAkgKiAgICA2LWNoOiBmcm9udC9jbGZlL3N1cnIKLQkgKiAgICA4LWNoOiBmcm9udC9jbGZlL3NpZGUvc3VycgorCSAqICAgIDgtY2g6IGZyb250L2NsZmUvcmVhci9zaWRlfGZjCiAJICovCiAJc3dpdGNoIChjZmctPmxpbmVfb3V0cykgewogCWNhc2UgMzoKLQkJbmlkID0gY2ZnLT5saW5lX291dF9waW5zWzFdOwotCQljZmctPmxpbmVfb3V0X3BpbnNbMV0gPSBjZmctPmxpbmVfb3V0X3BpbnNbMl07Ci0JCWNmZy0+bGluZV9vdXRfcGluc1syXSA9IG5pZDsKLQkJYnJlYWs7CiAJY2FzZSA0OgogCQluaWQgPSBjZmctPmxpbmVfb3V0X3BpbnNbMV07Ci0JCWNmZy0+bGluZV9vdXRfcGluc1sxXSA9IGNmZy0+bGluZV9vdXRfcGluc1szXTsKLQkJY2ZnLT5saW5lX291dF9waW5zWzNdID0gY2ZnLT5saW5lX291dF9waW5zWzJdOworCQljZmctPmxpbmVfb3V0X3BpbnNbMV0gPSBjZmctPmxpbmVfb3V0X3BpbnNbMl07CiAJCWNmZy0+bGluZV9vdXRfcGluc1syXSA9IG5pZDsKIAkJYnJlYWs7CiAJfQpAQCAtMjE3OSwyNiArMjM0Niw2IEBACiAJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9DRF0sCiAJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9BVVhdKTsKIAotCS8qCi0JICogRklYLVVQOiBpZiBubyBsaW5lLW91dHMgYXJlIGRldGVjdGVkLCB0cnkgdG8gdXNlIHNwZWFrZXIgb3IgSFAgcGluCi0JICogYXMgYSBwcmltYXJ5IG91dHB1dAotCSAqLwotCWlmICghIGNmZy0+bGluZV9vdXRzKSB7Ci0JCWlmIChjZmctPnNwZWFrZXJfb3V0cykgewotCQkJY2ZnLT5saW5lX291dHMgPSBjZmctPnNwZWFrZXJfb3V0czsKLQkJCW1lbWNweShjZmctPmxpbmVfb3V0X3BpbnMsIGNmZy0+c3BlYWtlcl9waW5zLAotCQkJICAgICAgIHNpemVvZihjZmctPnNwZWFrZXJfcGlucykpOwotCQkJY2ZnLT5zcGVha2VyX291dHMgPSAwOwotCQkJbWVtc2V0KGNmZy0+c3BlYWtlcl9waW5zLCAwLCBzaXplb2YoY2ZnLT5zcGVha2VyX3BpbnMpKTsKLQkJfSBlbHNlIGlmIChjZmctPmhwX291dHMpIHsKLQkJCWNmZy0+bGluZV9vdXRzID0gY2ZnLT5ocF9vdXRzOwotCQkJbWVtY3B5KGNmZy0+bGluZV9vdXRfcGlucywgY2ZnLT5ocF9waW5zLAotCQkJICAgICAgIHNpemVvZihjZmctPmhwX3BpbnMpKTsKLQkJCWNmZy0+aHBfb3V0cyA9IDA7Ci0JCQltZW1zZXQoY2ZnLT5ocF9waW5zLCAwLCBzaXplb2YoY2ZnLT5ocF9waW5zKSk7Ci0JCX0KLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIyMiwxMSArMjM2OSwxMCBAQAogICovCiBpbnQgc25kX2hkYV9zdXNwZW5kKHN0cnVjdCBoZGFfYnVzICpidXMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjOwogCiAJLyogRklYTUU6IHNob3VsZCBoYW5kbGUgcG93ZXIgd2lkZ2V0IGNhcGFiaWxpdGllcyAqLwotCWxpc3RfZm9yX2VhY2gocCwgJmJ1cy0+Y29kZWNfbGlzdCkgewotCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhkYV9jb2RlYywgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb2RlYywgJmJ1cy0+Y29kZWNfbGlzdCwgbGlzdCkgewogCQlpZiAoY29kZWMtPnBhdGNoX29wcy5zdXNwZW5kKQogCQkJY29kZWMtPnBhdGNoX29wcy5zdXNwZW5kKGNvZGVjLCBzdGF0ZSk7CiAJCWhkYV9zZXRfcG93ZXJfc3RhdGUoY29kZWMsCkBAIC0yMjM2LDggKzIzODIsNiBAQAogCXJldHVybiAwOwogfQogCi1FWFBPUlRfU1lNQk9MKHNuZF9oZGFfc3VzcGVuZCk7Ci0KIC8qKgogICogc25kX2hkYV9yZXN1bWUgLSByZXN1bWUgdGhlIGNvZGVjcwogICogQGJ1czogdGhlIEhEQSBidXMKQEAgLTIyNDcsMTAgKzIzOTEsOSBAQAogICovCiBpbnQgc25kX2hkYV9yZXN1bWUoc3RydWN0IGhkYV9idXMgKmJ1cykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjOwogCi0JbGlzdF9mb3JfZWFjaChwLCAmYnVzLT5jb2RlY19saXN0KSB7Ci0JCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgaGRhX2NvZGVjLCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvZGVjLCAmYnVzLT5jb2RlY19saXN0LCBsaXN0KSB7CiAJCWhkYV9zZXRfcG93ZXJfc3RhdGUoY29kZWMsCiAJCQkJICAgIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZywKIAkJCQkgICAgQUNfUFdSU1RfRDApOwpAQCAtMjI2MCw4ICsyNDAzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotRVhQT1JUX1NZTUJPTChzbmRfaGRhX3Jlc3VtZSk7Ci0KIC8qKgogICogc25kX2hkYV9yZXN1bWVfY3RscyAtIHJlc3VtZSBjb250cm9scyBpbiB0aGUgbmV3IGNvbnRyb2wgbGlzdAogICogQGNvZGVjOiB0aGUgSERBIGNvZGVjCkBAIC0yMjc2LDcgKzI0MTcsNyBAQAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbDsKIAogCXZhbCA9IGttYWxsb2Moc2l6ZW9mKCp2YWwpLCBHRlBfS0VSTkVMKTsKLQlpZiAoISB2YWwpCisJaWYgKCF2YWwpCiAJCXJldHVybiAtRU5PTUVNOwogCWNvZGVjLT5pbl9yZXN1bWUgPSAxOwogCWZvciAoOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKQEAgLTIzMjAsMTkgKzI0NjEsMyBAQAogCXJldHVybiBzbmRfaGRhX3Jlc3VtZV9jdGxzKGNvZGVjLCBkaWdfaW5fY3Rscyk7CiB9CiAjZW5kaWYKLQotLyoKLSAqICBJTklUIHBhcnQKLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBhbHNhX2hkYV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2hkYV9leGl0KHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KGFsc2FfaGRhX2luaXQpCi1tb2R1bGVfZXhpdChhbHNhX2hkYV9leGl0KQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKaW5kZXggYzEyYmM0ZS4uNTZjMjZlNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCkBAIC0yMzMsNyArMjMzLDcgQEAKICAqLwogCiAvKiBBbXAgZ2Fpbi9tdXRlICovCi0jZGVmaW5lIEFDX0FNUF9NVVRFCQkJKDE8PDgpCisjZGVmaW5lIEFDX0FNUF9NVVRFCQkJKDE8PDcpCiAjZGVmaW5lIEFDX0FNUF9HQUlOCQkJKDB4N2YpCiAjZGVmaW5lIEFDX0FNUF9HRVRfSU5ERVgJCSgweGY8PDApCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYwppbmRleCAxZTVmZjBjLi4wMDAyODdmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfQotCW1lbWNweShub2RlLT5jb25uX2xpc3QsIGNvbm5fbGlzdCwgbmNvbm5zKTsKKwltZW1jcHkobm9kZS0+Y29ubl9saXN0LCBjb25uX2xpc3QsIG5jb25ucyAqIHNpemVvZihoZGFfbmlkX3QpKTsKIAlub2RlLT5uY29ubnMgPSBuY29ubnM7CiAJbm9kZS0+d2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CiAJbm9kZS0+dHlwZSA9IChub2RlLT53aWRfY2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggMTY3MmNhYy4uMmZhMjgxYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC04OCw2ICs4OCw4IEBACiAJCQkgIntBVEksIFNCNjAwfSwiCiAJCQkgIntBVEksIFJTNjAwfSwiCiAJCQkgIntBVEksIFJTNjkwfSwiCisJCQkgIntBVEksIFJTNzgwfSwiCisJCQkgIntBVEksIFI2MDB9LCIKIAkJCSAie1ZJQSwgVlQ4MjUxfSwiCiAJCQkgIntWSUEsIFZUODIzN0F9LCIKIAkJCSAie1NpUywgU0lTOTY2fSwiCkBAIC0xOTgsNiArMjAwLDcgQEAKICNkZWZpbmUgUklSQl9JTlRfTUFTSwkJMHgwNQogCiAvKiBTVEFURVNUUyBpbnQgbWFzazogU0QyLFNEMSxTRDAgKi8KKyNkZWZpbmUgQVpYX01BWF9DT0RFQ1MJCTMKICNkZWZpbmUgU1RBVEVTVFNfSU5UX01BU0sJMHgwNwogCiAvKiBTRF9DVEwgYml0cyAqLwpAQCAtOTc4LDcgKzk4MSw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhenhfY29kZWNfY3JlYXRlKHN0cnVjdCBhenggKmNoaXAsIGNvbnN0IGNoYXIgKm1vZGVsKQogewogCXN0cnVjdCBoZGFfYnVzX3RlbXBsYXRlIGJ1c190ZW1wOwotCWludCBjLCBjb2RlY3MsIGVycjsKKwlpbnQgYywgY29kZWNzLCBhdWRpb19jb2RlY3MsIGVycjsKIAogCW1lbXNldCgmYnVzX3RlbXAsIDAsIHNpemVvZihidXNfdGVtcCkpOwogCWJ1c190ZW1wLnByaXZhdGVfZGF0YSA9IGNoaXA7CkBAIC05OTAsMTYgKzk5MywzMCBAQAogCWlmICgoZXJyID0gc25kX2hkYV9idXNfbmV3KGNoaXAtPmNhcmQsICZidXNfdGVtcCwgJmNoaXAtPmJ1cykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWNvZGVjcyA9IDA7Ci0JZm9yIChjID0gMDsgYyA8IGF6eF9tYXhfY29kZWNzW2NoaXAtPmRyaXZlcl90eXBlXTsgYysrKSB7CisJY29kZWNzID0gYXVkaW9fY29kZWNzID0gMDsKKwlmb3IgKGMgPSAwOyBjIDwgQVpYX01BWF9DT0RFQ1M7IGMrKykgewogCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBwcm9iZV9tYXNrKSB7Ci0JCQllcnIgPSBzbmRfaGRhX2NvZGVjX25ldyhjaGlwLT5idXMsIGMsIE5VTEwpOworCQkJc3RydWN0IGhkYV9jb2RlYyAqY29kZWM7CisJCQllcnIgPSBzbmRfaGRhX2NvZGVjX25ldyhjaGlwLT5idXMsIGMsICZjb2RlYyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQljb250aW51ZTsKIAkJCWNvZGVjcysrOworCQkJaWYgKGNvZGVjLT5hZmcpCisJCQkJYXVkaW9fY29kZWNzKys7CiAJCX0KIAl9Ci0JaWYgKCEgY29kZWNzKSB7CisJaWYgKCFhdWRpb19jb2RlY3MpIHsKKwkJLyogcHJvYmUgYWRkaXRpb25hbCBzbG90cyBpZiBubyBjb2RlYyBpcyBmb3VuZCAqLworCQlmb3IgKDsgYyA8IGF6eF9tYXhfY29kZWNzW2NoaXAtPmRyaXZlcl90eXBlXTsgYysrKSB7CisJCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBwcm9iZV9tYXNrKSB7CisJCQkJZXJyID0gc25kX2hkYV9jb2RlY19uZXcoY2hpcC0+YnVzLCBjLCBOVUxMKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJY29udGludWU7CisJCQkJY29kZWNzKys7CisJCQl9CisJCX0KKwl9CisJaWYgKCFjb2RlY3MpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIm5vIGNvZGVjcyBpbml0aWFsaXplZFxuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQpAQCAtMTUxOCw3ICsxNTM1LDcgQEAKIC8qCiAgKiB3aGl0ZS9ibGFjay1saXN0aW5nIGZvciBwb3NpdGlvbl9maXgKICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIHBvc2l0aW9uX2ZpeF9saXN0W10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBwb3NpdGlvbl9maXhfbGlzdFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDFjYywgIkRlbGwgRDgyMCIsIFBPU19GSVhfTk9ORSksCiAJe30KIH07CkBAIC0xNzU4LDYgKzE3NzUsOCBAQAogCXsgMHgxMDAyLCAweDQzODMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJIH0sIC8qIEFUSSBTQjYwMCAqLwogCXsgMHgxMDAyLCAweDc5M2IsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJSERNSSB9LCAvKiBBVEkgUlM2MDAgSERNSSAqLwogCXsgMHgxMDAyLCAweDc5MTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJSERNSSB9LCAvKiBBVEkgUlM2OTAgSERNSSAqLworCXsgMHgxMDAyLCAweDk2MGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJSERNSSB9LCAvKiBBVEkgUlM3ODAgSERNSSAqLworCXsgMHgxMDAyLCAweGFhMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJSERNSSB9LCAvKiBBVEkgUjYwMCBIRE1JICovCiAJeyAweDExMDYsIDB4MzI4OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9WSUEgfSwgLyogVklBIFZUODI1MS9WVDgyMzdBICovCiAJeyAweDEwMzksIDB4NzUwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9TSVMgfSwgLyogU0lTOTY2ICovCiAJeyAweDEwYjksIDB4NTQ2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9VTEkgfSwgLyogVUxJIE01NDYxICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oIGIvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAppbmRleCAzOTcxOGQ2Li5mOTFlYTVlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKQEAgLTE0OCw2ICsxNDgsMTEgQEAKIAogaW50IHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19vcGVuKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3QgaGRhX211bHRpX291dCAqbW91dCk7CiBpbnQgc25kX2hkYV9tdWx0aV9vdXRfZGlnX2Nsb3NlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3QgaGRhX211bHRpX291dCAqbW91dCk7CitpbnQgc25kX2hkYV9tdWx0aV9vdXRfZGlnX3ByZXBhcmUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICBzdHJ1Y3QgaGRhX211bHRpX291dCAqbW91dCwKKwkJCQkgIHVuc2lnbmVkIGludCBzdHJlYW1fdGFnLAorCQkJCSAgdW5zaWduZWQgaW50IGZvcm1hdCwKKwkJCQkgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKIGludCBzbmRfaGRhX211bHRpX291dF9hbmFsb2dfb3BlbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IGhkYV9tdWx0aV9vdXQgKm1vdXQsCiAJCQkJICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiBpbnQgc25kX2hkYV9tdWx0aV9vdXRfYW5hbG9nX3ByZXBhcmUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBoZGFfbXVsdGlfb3V0ICptb3V0LApAQCAtMjE3LDYgKzIyMiwxMiBAQAogCUFVVE9fUElOX0xBU1QKIH07CiAKK2VudW0geworCUFVVE9fUElOX0xJTkVfT1VULAorCUFVVE9fUElOX1NQRUFLRVJfT1VULAorCUFVVE9fUElOX0hQX09VVAorfTsKKwogZXh0ZXJuIGNvbnN0IGNoYXIgKmF1dG9fcGluX2NmZ19sYWJlbHNbQVVUT19QSU5fTEFTVF07CiAKIHN0cnVjdCBhdXRvX3Bpbl9jZmcgewpAQCAtMjI1LDYgKzIzNiw3IEBACiAJaW50IHNwZWFrZXJfb3V0czsKIAloZGFfbmlkX3Qgc3BlYWtlcl9waW5zWzVdOwogCWludCBocF9vdXRzOworCWludCBsaW5lX291dF90eXBlOwkvKiBBVVRPX1BJTl9YWFhfT1VUICovCiAJaGRhX25pZF90IGhwX3BpbnNbNV07CiAJaGRhX25pZF90IGlucHV0X3BpbnNbQVVUT19QSU5fTEFTVF07CiAJaGRhX25pZF90IGRpZ19vdXRfcGluOwpAQCAtMjY1LDUgKzI3Nyw3IEBACiAJcmV0dXJuIGNvZGVjLT53Y2Fwc1tuaWQgLSBjb2RlYy0+c3RhcnRfbmlkXTsKIH0KIAoraW50IHNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsIGludCBkaXIsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY2Fwcyk7CiAKICNlbmRpZiAvKiBfX1NPVU5EX0hEQV9MT0NBTF9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwppbmRleCBmOTRmMWYyMi4uMGUxYTg3OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC0xOTIsNiArMTkyLDE3IEBACiAJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19jbG9zZShjb2RlYywgJnNwZWMtPm11bHRpb3V0KTsKIH0KIAorc3RhdGljIGludCBhZDE5OHhfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCisJCQkJCSAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgc3RyZWFtX3RhZywKKwkJCQkJICAgdW5zaWduZWQgaW50IGZvcm1hdCwKKwkJCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19wcmVwYXJlKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQsIHN0cmVhbV90YWcsCisJCQkJCSAgICAgZm9ybWF0LCBzdWJzdHJlYW0pOworfQorCiAvKgogICogQW5hbG9nIGNhcHR1cmUKICAqLwpAQCAtMjUwLDcgKzI2MSw4IEBACiAJLm5pZCA9IDAsIC8qIGZpbGwgbGF0ZXIgKi8KIAkub3BzID0gewogCQkub3BlbiA9IGFkMTk4eF9kaWdfcGxheWJhY2tfcGNtX29wZW4sCi0JCS5jbG9zZSA9IGFkMTk4eF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlCisJCS5jbG9zZSA9IGFkMTk4eF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlLAorCQkucHJlcGFyZSA9IGFkMTk4eF9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmUKIAl9LAogfTsKIApAQCAtNzM5LDQxICs3NTEsMzUgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi0vKiBhZGRpdGlvbmFsIHZlcmJzIGZvciAzLXN0YWNrIG1vZGVsICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4NmFfM3N0X2luaXRfdmVyYnNbXSA9IHsKLSAJLyogTWljIGFuZCBsaW5lLWluIHNlbGVjdG9ycyAqLwotCXsweDBmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgyfSwKLQl7MHgxMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCi0gCXsgfSAvKiBlbmQgKi8KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9jaDJfaW5pdFtdID0gewogCS8qIFN1cnJvdW5kIG91dCAtPiBMaW5lIEluICovCi0JeyAweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjQgfSwKLQl7IDB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCisJeyAweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAorIAkvKiBMaW5lLWluIHNlbGVjdG9ycyAqLworCXsgMHgxMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MSB9LAogCS8qIENMRkUgLT4gTWljIGluICovCi0JeyAweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjQgfSwKLQl7IDB4MWQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCisJeyAweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKKwkvKiBNaWMgc2VsZWN0b3IsIG1peCBDL0xGRSAoYmFja21pYykgYW5kIE1pYyAoZnJvbnRtaWMpICovCisJeyAweDBmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHg0IH0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODZhX2NoNF9pbml0W10gPSB7CiAJLyogU3Vycm91bmQgb3V0IC0+IFN1cnJvdW5kICovCi0JeyAweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4NDAgfSwKLQl7IDB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCisJeyAweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MTAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAgfSwKIAkvKiBDTEZFIC0+IE1pYyBpbiAqLwotCXsgMHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0IH0sCi0JeyAweDFkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LAorCXsgMHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCisJeyAweDBmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHg0IH0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODZhX2NoNl9pbml0W10gPSB7CiAJLyogU3Vycm91bmQgb3V0IC0+IFN1cnJvdW5kIG91dCAqLwotCXsgMHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDQwIH0sCi0JeyAweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAorCXsgMHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDEwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwIH0sCiAJLyogQ0xGRSAtPiBDTEZFICovCi0JeyAweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4NDAgfSwKLQl7IDB4MWQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCisJeyAweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MGYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAgfSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC04MjgsNiArODM0LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjk3LCAiQVNVUyBaNjJGIiwgQUQxOTg2QV9MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgVjFqIiwgQUQxOTg2QV9MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMwMiwgIkFTVVMgVzNqIiwgQUQxOTg2QV9MQVBUT1BfRUFQRCksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ0NywgIkFTVVMgQThKIiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxN2YsICJBU1VTIFA1IiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxOGYsICJBU1VTIFA1IiwgQUQxOTg2QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxYjMsICJBU1VTIFA1IiwgQUQxOTg2QV8zU1RBQ0spLApAQCAtODgyLDkgKzg4OSw4IEBACiAJY2FzZSBBRDE5ODZBXzNTVEFDSzoKIAkJc3BlYy0+bnVtX21peGVycyA9IDI7CiAJCXNwZWMtPm1peGVyc1sxXSA9IGFkMTk4NmFfM3N0X21peGVyczsKLQkJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAzOwotCQlzcGVjLT5pbml0X3ZlcmJzWzFdID0gYWQxOTg2YV8zc3RfaW5pdF92ZXJiczsKLQkJc3BlYy0+aW5pdF92ZXJic1syXSA9IGFkMTk4NmFfY2gyX2luaXQ7CisJCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMjsKKwkJc3BlYy0+aW5pdF92ZXJic1sxXSA9IGFkMTk4NmFfY2gyX2luaXQ7CiAJCXNwZWMtPmNoYW5uZWxfbW9kZSA9IGFkMTk4NmFfbW9kZXM7CiAJCXNwZWMtPm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFkMTk4NmFfbW9kZXMpOwogCQlzcGVjLT5uZWVkX2RhY19maXggPSAxOwpAQCAtMTg5Miw4ICsxODk4LDkgQEAKIAogCXNlbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgwMiwgMCwgQUNfVkVSQl9HRVRfQ09OTkVDVF9TRUwsIDApOwogCWlmIChzZWwgPiAwKSB7Ci0JCXNlbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgwYiwgMCwgQUNfVkVSQl9HRVRfQ09OTkVDVF9TRUwsIDApOwotCQlpZiAoc2VsIDw9IDMpCisJCXNlbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgwYiwgMCwKKwkJCQkJIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfU0VMLCAwKTsKKwkJaWYgKHNlbCA8IDMpCiAJCQlzZWwrKzsKIAkJZWxzZQogCQkJc2VsID0gMDsKQEAgLTE5MDYsMjMgKzE5MTMsMjcgQEAKIAkJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXVuc2lnbmVkIGludCBzZWw7CisJdW5zaWduZWQgaW50IHZhbCwgc2VsOwogCWludCBjaGFuZ2U7CiAKKwl2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwogCXNlbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgwMiwgMCwgQUNfVkVSQl9HRVRfQ09OTkVDVF9TRUwsIDApOwotCWlmICghIHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pIHsKKwlpZiAoIXZhbCkgewogCQljaGFuZ2UgPSBzZWwgIT0gMDsKLQkJaWYgKGNoYW5nZSkKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MDIsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwKTsKKwkJaWYgKGNoYW5nZSB8fCBjb2RlYy0+aW5fcmVzdW1lKQorCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgwMiwgMCwKKwkJCQkJICAgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwKTsKIAl9IGVsc2UgewogCQljaGFuZ2UgPSBzZWwgPT0gMDsKLQkJaWYgKGNoYW5nZSkKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MDIsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAxKTsKLQkJc2VsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDBiLCAwLCBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMCkgKyAxOwotCQljaGFuZ2UgfD0gc2VsID09IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07Ci0JCWlmIChjaGFuZ2UpCi0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDAyLCAwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKLQkJCQkJICAgIHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gLSAxKTsKKwkJaWYgKGNoYW5nZSB8fCBjb2RlYy0+aW5fcmVzdW1lKQorCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgwMiwgMCwKKwkJCQkJICAgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAxKTsKKwkJc2VsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDBiLCAwLAorCQkJCQkgQUNfVkVSQl9HRVRfQ09OTkVDVF9TRUwsIDApICsgMTsKKwkJY2hhbmdlIHw9IHNlbCAhPSB2YWw7CisJCWlmIChjaGFuZ2UgfHwgY29kZWMtPmluX3Jlc3VtZSkKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MGIsIDAsCisJCQkJCSAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgdmFsIC0gMSk7CiAJfQogCXJldHVybiBjaGFuZ2U7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2F0aWhkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYXRpaGRtaS5jCmluZGV4IDgzMTQ2OWQuLmY4ZWI0YzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYXRpaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYXRpaGRtaS5jCkBAIC05NCw2ICs5NCwxNyBAQAogCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfY2xvc2UoY29kZWMsICZzcGVjLT5tdWx0aW91dCk7CiB9CiAKK3N0YXRpYyBpbnQgYXRpaGRtaV9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmUoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKKwkJCQkJICAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgdW5zaWduZWQgaW50IHN0cmVhbV90YWcsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LAorCQkJCQkgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0aWhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfcHJlcGFyZShjb2RlYywgJnNwZWMtPm11bHRpb3V0LCBzdHJlYW1fdGFnLAorCQkJCQkgICAgIGZvcm1hdCwgc3Vic3RyZWFtKTsKK30KKwogc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhdGloZG1pX3BjbV9kaWdpdGFsX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKQEAgLTEwMSw3ICsxMTIsOCBAQAogCS5uaWQgPSAweDIsIC8qIE5JRCB0byBxdWVyeSBmb3JtYXRzIGFuZCByYXRlcyBhbmQgc2V0dXAgc3RyZWFtcyAqLwogCS5vcHMgPSB7CiAJCS5vcGVuID0gYXRpaGRtaV9kaWdfcGxheWJhY2tfcGNtX29wZW4sCi0JCS5jbG9zZSA9IGF0aWhkbWlfZGlnX3BsYXliYWNrX3BjbV9jbG9zZQorCQkuY2xvc2UgPSBhdGloZG1pX2RpZ19wbGF5YmFja19wY21fY2xvc2UsCisJCS5wcmVwYXJlID0gYXRpaGRtaV9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmUKIAl9LAogfTsKIApAQCAtMTYwLDYgKzE3Miw3IEBACiAgKi8KIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X2F0aWhkbWlbXSA9IHsKIAl7IC5pZCA9IDB4MTAwMjc5M2MsIC5uYW1lID0gIkFUSSBSUzYwMCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfYXRpaGRtaSB9LAotCXsgLmlkID0gMHgxMDAyNzkxYSwgLm5hbWUgPSAiQVRJIFJTNjkwIEhETUkiLCAucGF0Y2ggPSBwYXRjaF9hdGloZG1pIH0sCisJeyAuaWQgPSAweDEwMDI3OTFhLCAubmFtZSA9ICJBVEkgUlM2OTAvNzgwIEhETUkiLCAucGF0Y2ggPSBwYXRjaF9hdGloZG1pIH0sCisJeyAuaWQgPSAweDEwMDJhYTAxLCAubmFtZSA9ICJBVEkgUjYwMCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfYXRpaGRtaSB9LAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwppbmRleCA1YjlkM2EzLi4zYzcyMmU2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKQEAgLTQ5Nyw2ICs0OTcsMTcgQEAKIAlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfZGlnX2Nsb3NlKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQpOwogfQogCitzdGF0aWMgaW50IGNtaTk4ODBfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCisJCQkJCSAgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgIHVuc2lnbmVkIGludCBzdHJlYW1fdGFnLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGZvcm1hdCwKKwkJCQkJICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBjbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfcHJlcGFyZShjb2RlYywgJnNwZWMtPm11bHRpb3V0LCBzdHJlYW1fdGFnLAorCQkJCQkgICAgIGZvcm1hdCwgc3Vic3RyZWFtKTsKK30KKwogLyoKICAqIEFuYWxvZyBjYXB0dXJlCiAgKi8KQEAgLTU1Niw3ICs1NjcsOCBAQAogCS8qIE5JRCBpcyBzZXQgaW4gY21pOTg4MF9idWlsZF9wY21zICovCiAJLm9wcyA9IHsKIAkJLm9wZW4gPSBjbWk5ODgwX2RpZ19wbGF5YmFja19wY21fb3BlbiwKLQkJLmNsb3NlID0gY21pOTg4MF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlCisJCS5jbG9zZSA9IGNtaTk4ODBfZGlnX3BsYXliYWNrX3BjbV9jbG9zZSwKKwkJLnByZXBhcmUgPSBjbWk5ODgwX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZQogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggNDZlOTNjNi4uYmVmMjE0YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtMTM2LDYgKzEzNiwxOCBAQAogCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfY2xvc2UoY29kZWMsICZzcGVjLT5tdWx0aW91dCk7CiB9CiAKK3N0YXRpYyBpbnQgY29uZXhhbnRfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCisJCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJIHVuc2lnbmVkIGludCBzdHJlYW1fdGFnLAorCQkJCQkgdW5zaWduZWQgaW50IGZvcm1hdCwKKwkJCQkJIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19wcmVwYXJlKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQsCisJCQkJCSAgICAgc3RyZWFtX3RhZywKKwkJCQkJICAgICBmb3JtYXQsIHN1YnN0cmVhbSk7Cit9CisKIC8qCiAgKiBBbmFsb2cgY2FwdHVyZQogICovCkBAIC0xOTQsNyArMjA2LDggQEAKIAkubmlkID0gMCwgLyogZmlsbCBsYXRlciAqLwogCS5vcHMgPSB7CiAJCS5vcGVuID0gY29uZXhhbnRfZGlnX3BsYXliYWNrX3BjbV9vcGVuLAotCQkuY2xvc2UgPSBjb25leGFudF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlCisJCS5jbG9zZSA9IGNvbmV4YW50X2RpZ19wbGF5YmFja19wY21fY2xvc2UsCisJCS5wcmVwYXJlID0gY29uZXhhbnRfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlCiAJfSwKIH07CiAKQEAgLTQ1MiwxMTUgKzQ2NSw2IEBACiAJICAucHV0ID0gY29uZXhhbnRfY2hfbW9kZV9wdXQsIFwKIAkgIC5wcml2YXRlX3ZhbHVlID0gbmlkIHwgKGRpcjw8MTYpIH0KIAotc3RhdGljIGludCBjeHRfZ3Bpb19kYXRhX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotewotCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOwotCXJldHVybiAwOwotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLXN0YXRpYyBpbnQgY3h0X2dwaW9fZGF0YV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmZmZjsKLQl1bnNpZ25lZCBjaGFyIG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKLQlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7Ci0JdW5zaWduZWQgaW50IHZhbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9HUElPX0RBVEEsIDB4MDApOwotCi0JKnZhbHAgPSAodmFsICYgbWFzaykgIT0gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjeHRfZ3Bpb19kYXRhX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZmZmOwotCXVuc2lnbmVkIGNoYXIgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweGZmOwotCWxvbmcgdmFsID0gKnVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwotCXVuc2lnbmVkIGludCBncGlvX2RhdGEgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJCSAgICBBQ19WRVJCX0dFVF9HUElPX0RBVEEsCi0JCQkJCQkgICAgMHgwMCk7Ci0JdW5zaWduZWQgaW50IG9sZF9kYXRhID0gZ3Bpb19kYXRhOwotCi0JLyogU2V0L3Vuc2V0IHRoZSBtYXNrZWQgR1BJTyBiaXQocykgYXMgbmVlZGVkICovCi0JaWYgKHZhbCA9PSAwKQotCQlncGlvX2RhdGEgJj0gfm1hc2s7Ci0JZWxzZQotCQlncGlvX2RhdGEgfD0gbWFzazsKLQlpZiAoZ3Bpb19kYXRhID09IG9sZF9kYXRhICYmICFjb2RlYy0+aW5fcmVzdW1lKQotCQlyZXR1cm4gMDsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgZ3Bpb19kYXRhKTsKLQlyZXR1cm4gMTsKLX0KLQotI2RlZmluZSBDWFRfR1BJT19EQVRBX1NXSVRDSCh4bmFtZSwgbmlkLCBtYXNrKSBcCi0JeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0gMCwgIFwKLQkgIC5pbmZvID0gY3h0X2dwaW9fZGF0YV9pbmZvLCBcCi0JICAuZ2V0ID0gY3h0X2dwaW9fZGF0YV9nZXQsIFwKLQkgIC5wdXQgPSBjeHRfZ3Bpb19kYXRhX3B1dCwgXAotCSAgLnByaXZhdGVfdmFsdWUgPSBuaWQgfCAobWFzazw8MTYpIH0KLSNpZiAwCi1zdGF0aWMgaW50IGN4dF9zcGRpZl9jdHJsX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKLXsKLQl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKLQl1aW5mby0+Y291bnQgPSAxOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKLQlyZXR1cm4gMDsKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi1zdGF0aWMgaW50IGN4dF9zcGRpZl9jdHJsX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmZmZjsKLQl1bnNpZ25lZCBjaGFyIG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKLQlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7Ci0JdW5zaWduZWQgaW50IHZhbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgICBBQ19WRVJCX0dFVF9ESUdJX0NPTlZFUlQsIDB4MDApOwotCi0JKnZhbHAgPSAodmFsICYgbWFzaykgIT0gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjeHRfc3BkaWZfY3RybF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7Ci0JdW5zaWduZWQgY2hhciBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7Ci0JbG9uZyB2YWwgPSAqdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7Ci0JdW5zaWduZWQgaW50IGN0cmxfZGF0YSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQkJICAgIEFDX1ZFUkJfR0VUX0RJR0lfQ09OVkVSVCwKLQkJCQkJCSAgICAweDAwKTsKLQl1bnNpZ25lZCBpbnQgb2xkX2RhdGEgPSBjdHJsX2RhdGE7Ci0KLQkvKiBTZXQvdW5zZXQgdGhlIG1hc2tlZCBjb250cm9sIGJpdChzKSBhcyBuZWVkZWQgKi8KLQlpZiAodmFsID09IDApCi0JCWN0cmxfZGF0YSAmPSB+bWFzazsKLQllbHNlCi0JCWN0cmxfZGF0YSB8PSBtYXNrOwotCWlmIChjdHJsX2RhdGEgPT0gb2xkX2RhdGEgJiYgIWNvZGVjLT5pbl9yZXN1bWUpCi0JCXJldHVybiAwOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsCi0JCQkgICAgY3RybF9kYXRhKTsKLQlyZXR1cm4gMTsKLX0KLQotI2RlZmluZSBDWFRfU1BESUZfQ1RSTF9TV0lUQ0goeG5hbWUsIG5pZCwgbWFzaykgXAotCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IDAsICBcCi0JICAuaW5mbyA9IGN4dF9zcGRpZl9jdHJsX2luZm8sIFwKLQkgIC5nZXQgPSBjeHRfc3BkaWZfY3RybF9nZXQsIFwKLQkgIC5wdXQgPSBjeHRfc3BkaWZfY3RybF9wdXQsIFwKLQkgIC5wcml2YXRlX3ZhbHVlID0gbmlkIHwgKG1hc2s8PDE2KSB9Ci0jZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfU05EX0RFQlVHICovCiAKIC8qIENvbmV4YW50IDUwNDUgc3BlY2lmaWMgKi8KQEAgLTU5OSw2ICs1MDMsNyBAQAogCWJpdHMgPSAoIXNwZWMtPmhwX3ByZXNlbnQgJiYgc3BlYy0+Y3VyX2VhcGQpID8gMCA6IDB4ODA7CiAJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDEwLCAwLCBIREFfT1VUUFVULCAwLCAweDgwLCBiaXRzKTsKIAlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTAsIDEsIEhEQV9PVVRQVVQsIDAsIDB4ODAsIGJpdHMpOworCiAJYml0cyA9IHNwZWMtPmN1cl9lYXBkID8gMCA6IDB4ODA7CiAJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDExLCAwLCBIREFfT1VUUFVULCAwLCAweDgwLCBiaXRzKTsKIAlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTEsIDEsIEhEQV9PVVRQVVQsIDAsIDB4ODAsIGJpdHMpOwpAQCAtNjI0LDYgKzUyOSwyOSBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKKy8qIHRvZ2dsZSBpbnB1dCBvZiBidWlsdC1pbiBhbmQgbWljIGphY2sgYXBwcm9wcmlhdGVseSAqLworc3RhdGljIHZvaWQgY3h0NTA0NV9ocF9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgbWljX2phY2tfb25bXSA9IHsKKwkJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCisJCXsweDEyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAorCQl7fQorCX07CisJc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBtaWNfamFja19vZmZbXSA9IHsKKwkJezB4MTIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCisJCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAorCQl7fQorCX07CisJdW5zaWduZWQgaW50IHByZXNlbnQ7CisKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEyLCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJaWYgKHByZXNlbnQpCisJCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIG1pY19qYWNrX29uKTsKKwllbHNlCisJCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIG1pY19qYWNrX29mZik7Cit9CisKIAogLyogbXV0ZSBpbnRlcm5hbCBzcGVha2VyIGlmIEhQIGlzIHBsdWdnZWQgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNDVfaHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC02MzQsNyArNTYyLDcgQEAKIAlzcGVjLT5ocF9wcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDExLCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CiAKLQliaXRzID0gKHNwZWMtPmhwX3ByZXNlbnQgfHwgIXNwZWMtPmN1cl9lYXBkKSA/IDB4ODAgOiAwOworCWJpdHMgPSAoc3BlYy0+aHBfcHJlc2VudCB8fCAhc3BlYy0+Y3VyX2VhcGQpID8gMHg4MCA6IDA7IAogCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxMCwgMCwgSERBX09VVFBVVCwgMCwgMHg4MCwgYml0cyk7CiAJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDEwLCAxLCBIREFfT1VUUFVULCAwLCAweDgwLCBiaXRzKTsKIH0KQEAgLTY0OCw2ICs1NzYsMTAgQEAKIAljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgogCQljeHQ1MDQ1X2hwX2F1dG9tdXRlKGNvZGVjKTsKIAkJYnJlYWs7CisJY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6CisJCWN4dDUwNDVfaHBfYXV0b21pYyhjb2RlYyk7CisJCWJyZWFrOworCiAJfQogfQogCkBAIC02NTksMTIgKzU5MSwxMCBAQAogCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAogCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0CiAJfSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIFZvbHVtZSIsIDB4MTcsIDB4MDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkludCBNaWMgU3dpdGNoIiwgMHgxNywgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJFeHQgTWljIFZvbHVtZSIsIDB4MTcsIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkV4dCBNaWMgU3dpdGNoIiwgMHgxNywgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBWb2x1bWUiLCAweDFhLCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIFN3aXRjaCIsIDB4MWEsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRXh0IE1pYyBWb2x1bWUiLCAweDFhLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJFeHQgTWljIFN3aXRjaCIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCkBAIC02ODgsNyArNjE4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA0NV9pbml0X3ZlcmJzW10gPSB7CiAJLyogTGluZSBpbiwgTWljICovCiAJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCi0JezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfEFDX1BJTkNUTF9WUkVGXzUwIH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfEFDX1BJTkNUTF9WUkVGXzgwIH0sCiAJLyogSFAsIEFtcCAgKi8KIAl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFAgfSwKIAl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwMX0sCkBAIC03MDEsMTggKzYzMSwyOSBAQAogCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCSBBQ19BTVBfU0VUX09VVFBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDA0fSwKIAkvKiBSZWNvcmQgc2VsZWN0b3I6IEludCBtaWMgKi8KLQl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgxfSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkgQUNfQU1QX1NFVF9JTlBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDE3fSwKIAkvKiBTUERJRiByb3V0ZTogUENNICovCiAJeyAweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwIH0sCi0JLyogcGluIHNlbnNpbmcgb24gSFAgYW5kIE1pYyBqYWNrcyAqLwotCXsweDExLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfSFBfRVZFTlR9LAogCS8qIEVBUEQgKi8KIAl7MHgxMCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MiB9LCAvKiBkZWZhdWx0IG9uICovIAogCXsgfSAvKiBlbmQgKi8KIH07CiAKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ1X2hwX3NlbnNlX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBwaW4gc2Vuc2luZyBvbiBIUCBqYWNrICovCisJezB4MTEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9IUF9FVkVOVH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ1X21pY19zZW5zZV9pbml0X3ZlcmJzW10gPSB7CisJLyogcGluIHNlbnNpbmcgb24gSFAgamFjayAqLworCXsweDEyLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfTUlDX0VWRU5UfSwKKwl7IH0gLyogZW5kICovCit9OworCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogLyogVGVzdCBjb25maWd1cmF0aW9uIGZvciBkZWJ1Z2dpbmcsIG1vZGVsbGVkIGFmdGVyIHRoZSBBTEMyNjAgdGVzdAogICogY29uZmlndXJhdGlvbi4KQEAgLTczMyw2ICs2NzQsMTAgQEAKIAkvKiBPdXRwdXQgY29udHJvbHMgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJOb2RlIDExIFBsYXliYWNrIFZvbHVtZSIsIDB4MTEsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIk5vZGUgMTEgUGxheWJhY2sgU3dpdGNoIiwgMHgxMSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJOb2RlIDEyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIk5vZGUgMTIgUGxheWJhY2sgU3dpdGNoIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAkKIAkvKiBNb2RlcyBmb3IgcmV0YXNraW5nIHBpbiB3aWRnZXRzICovCiAJQ1hUX1BJTl9NT0RFKCJIUC1PVVQgcGluIG1vZGUiLCAweDExLCBDWFRfUElOX0RJUl9JTk9VVCksCkBAIC03NDIsMjUgKzY4NywxNyBAQAogCUNYVF9FQVBEX1NXSVRDSCgiRXh0ZXJuYWwgQW1wbGlmaWVyIiwgMHgxMCwgMHgwKSwKIAogCS8qIExvb3BiYWNrIG1peGVyIGNvbnRyb2xzICovCi0JSERBX0NPREVDX1ZPTFVNRSgiTUlDMSBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDAxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNSUMxIFBsYXliYWNrIFN3aXRjaCIsIDB4MTcsIDB4MDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTElORSBsb29wYmFjayBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJMSU5FIGxvb3BiYWNrIFBsYXliYWNrIFN3aXRjaCIsIDB4MTcsIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiSFAtT1VUIGxvb3BiYWNrIFBsYXliYWNrIFZvbHVtZSIsIDB4MTcsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkhQLU9VVCBsb29wYmFjayBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MTcsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MTcsIDB4MDQsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlLTEgVm9sdW1lIiwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlLTEgU3dpdGNoIiwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUtMiBWb2x1bWUiLCAweDE3LCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNhcHR1cmUtMiBTd2l0Y2giLCAweDE3LCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZS0zIFZvbHVtZSIsIDB4MTcsIDB4MiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZS0zIFN3aXRjaCIsIDB4MTcsIDB4MiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlLTQgVm9sdW1lIiwgMHgxNywgMHgzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlLTQgU3dpdGNoIiwgMHgxNywgMHgzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUtNSBWb2x1bWUiLCAweDE3LCAweDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNhcHR1cmUtNSBTd2l0Y2giLCAweDE3LCAweDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWl4ZXItMSBWb2x1bWUiLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1peGVyLTEgU3dpdGNoIiwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1peGVyLTIgVm9sdW1lIiwgMHgxNywgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaXhlci0yIFN3aXRjaCIsIDB4MTcsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaXhlci0zIFZvbHVtZSIsIDB4MTcsIDB4MiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWl4ZXItMyBTd2l0Y2giLCAweDE3LCAweDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWl4ZXItNCBWb2x1bWUiLCAweDE3LCAweDMsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1peGVyLTQgU3dpdGNoIiwgMHgxNywgMHgzLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1peGVyLTUgVm9sdW1lIiwgMHgxNywgMHg0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaXhlci01IFN3aXRjaCIsIDB4MTcsIDB4NCwgSERBX0lOUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLApAQCAtNzY4LDE0ICs3MDUsMjggQEAKIAkJLmdldCA9IGNvbmV4YW50X211eF9lbnVtX2dldCwKIAkJLnB1dCA9IGNvbmV4YW50X211eF9lbnVtX3B1dCwKIAl9LAotCisJLyogQXVkaW8gaW5wdXQgY29udHJvbHMgKi8KKwlIREFfQ09ERUNfVk9MVU1FKCJJbnB1dC0xIFZvbHVtZSIsIDB4MWEsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW5wdXQtMSBTd2l0Y2giLCAweDFhLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW5wdXQtMiBWb2x1bWUiLCAweDFhLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIklucHV0LTIgU3dpdGNoIiwgMHgxYSwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIklucHV0LTMgVm9sdW1lIiwgMHgxYSwgMHgyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnB1dC0zIFN3aXRjaCIsIDB4MWEsIDB4MiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnB1dC00IFZvbHVtZSIsIDB4MWEsIDB4MywgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW5wdXQtNCBTd2l0Y2giLCAweDFhLCAweDMsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW5wdXQtNSBWb2x1bWUiLCAweDFhLCAweDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIklucHV0LTUgU3dpdGNoIiwgMHgxYSwgMHg0LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA0NV90ZXN0X2luaXRfdmVyYnNbXSA9IHsKKwkvKiBTZXQgY29ubmVjdGlvbnMgKi8KKwl7IDB4MTAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAgfSwKKwl7IDB4MTEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAgfSwKKwl7IDB4MTIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAgfSwKIAkvKiBFbmFibGUgcmV0YXNraW5nIHBpbnMgYXMgb3V0cHV0LCBpbml0aWFsbHkgd2l0aG91dCBwb3dlciBhbXAgKi8KIAl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKLQl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCiAJLyogRGlzYWJsZSBkaWdpdGFsIChTUERJRikgcGlucyBpbml0aWFsbHksIGJ1dCB1c2VycyBjYW4gZW5hYmxlCiAJICogdGhlbSB2aWEgYSBtaXhlciBzd2l0Y2guICBJbiB0aGUgY2FzZSBvZiBTUERJRi1vdXQsIHRoaXMgaW5pdHZlcmIKQEAgLTgwNCw2ICs3NTUsNyBAQAogCSAqIHBpbikKIAkgKi8KIAl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAKIAkvKiBNdXRlIGFsbCBpbnB1dHMgdG8gbWl4ZXIgd2lkZ2V0IChldmVuIHVuY29ubmVjdGVkIG9uZXMpICovCiAJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwgLyogTWl4ZXIgcGluICovCkBAIC04MjcsNyArNzc5LDggQEAKIAogCiBlbnVtIHsKLQlDWFQ1MDQ1X0xBUFRPUCwJLyogTGFwdG9wcyB3LyBFQVBEIHN1cHBvcnQgKi8KKwlDWFQ1MDQ1X0xBUFRPUCwJIC8qIExhcHRvcHMgdy8gRUFQRCBzdXBwb3J0ICovCisJQ1hUNTA0NV9GVUpJVFNVLCAvKiBMYXB0b3BzIHcvIEVBUEQgc3VwcG9ydCAqLyAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJQ1hUNTA0NV9URVNULAogI2VuZGlmCkBAIC04MzYsNiArNzg5LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmN4dDUwNDVfbW9kZWxzW0NYVDUwNDVfTU9ERUxTXSA9IHsKIAlbQ1hUNTA0NV9MQVBUT1BdCT0gImxhcHRvcCIsCisJW0NYVDUwNDVfRlVKSVRTVV0JPSAiZnVqaXRzdSIsCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCVtDWFQ1MDQ1X1RFU1RdCQk9ICJ0ZXN0IiwKICNlbmRpZgpAQCAtODQ0LDcgKzc5OCwxMSBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGN4dDUwNDVfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjcsICJIUCBEVjYwMDBaIiwgQ1hUNTA0NV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYmIsICJIUCBEVjgwMDAiLCBDWFQ1MDQ1X0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDE3MzQsIDB4MTBhZCwgIkZ1aml0c3UgU2kxNTIwIiwgQ1hUNTA0NV9MQVBUT1ApLAorCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjIsICJIUCBEViBTZXJpZXMiLCBDWFQ1MDQ1X0xBUFRPUCksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiNSwgIkhQIERWMjEyMCIsIENYVDUwNDVfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNkLCAiSFAgRFYgU2VyaWVzIiwgQ1hUNTA0NV9MQVBUT1ApLAorCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAweDEwYWQsICJGdWppdHN1IFNpMTUyMCIsIENYVDUwNDVfRlVKSVRTVSksCisJU05EX1BDSV9RVUlSSygweDgwODYsIDB4MjExMSwgIkNvbmV4YW50IFJlZmVyZW5jZSBib2FyZCIsIENYVDUwNDVfTEFQVE9QKSwKIAl7fQogfTsKIApAQCAtODc3LDE2ICs4MzUsMjMgQEAKIAogCiAJY29kZWMtPnBhdGNoX29wcyA9IGNvbmV4YW50X3BhdGNoX29wczsKLQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0NV9ocF91bnNvbF9ldmVudDsKIAogCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBDWFQ1MDQ1X01PREVMUywKIAkJCQkJCSAgY3h0NTA0NV9tb2RlbHMsCiAJCQkJCQkgIGN4dDUwNDVfY2ZnX3RibCk7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNDVfTEFQVE9QOgorCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0NV9ocF91bnNvbF9ldmVudDsKIAkJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNDVfY2FwdHVyZV9zb3VyY2U7CiAJCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMjsKLQkJc3BlYy0+aW5pdF92ZXJic1sxXSA9IGN4dDUwNDVfaW5pdF92ZXJiczsKKwkJc3BlYy0+aW5pdF92ZXJic1sxXSA9IGN4dDUwNDVfaHBfc2Vuc2VfaW5pdF92ZXJiczsKKwkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0NV9taXhlcnM7CisJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNDVfaW5pdDsKKwkJYnJlYWs7CisJY2FzZSBDWFQ1MDQ1X0ZVSklUU1U6CisJCXNwZWMtPmlucHV0X211eCA9ICZjeHQ1MDQ1X2NhcHR1cmVfc291cmNlOworCQlzcGVjLT5udW1faW5pdF92ZXJicyA9IDI7CisJCXNwZWMtPmluaXRfdmVyYnNbMV0gPSBjeHQ1MDQ1X21pY19zZW5zZV9pbml0X3ZlcmJzOwogCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ1X21peGVyczsKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA0NV9pbml0OwogCQlicmVhazsKQEAgLTkxMywxMCArODc4LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ3X2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAyLAorCS5udW1faXRlbXMgPSAxLAogCS5pdGVtcyA9IHsKLQkJeyAiRXh0TWljIiwgMHgwIH0sCi0JCXsgIkludE1pYyIsIDB4MSB9LAorCQl7ICJNaWMiLCAweDIgfSwKIAl9CiB9OwogCkBAIC05OTQsNiArOTU4LDIzIEBACiAJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDFjLCAxLCBIREFfT1VUUFVULCAwLCAweDgwLCBiaXRzKTsKIH0KIAorLyogbXV0ZSBpbnRlcm5hbCBzcGVha2VyIGlmIEhQIGlzIHBsdWdnZWQgKi8KK3N0YXRpYyB2b2lkIGN4dDUwNDdfaHAyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdW5zaWduZWQgaW50IGJpdHM7CisKKwlzcGVjLT5ocF9wcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEzLCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisKKwliaXRzID0gc3BlYy0+aHBfcHJlc2VudCA/IDB4ODAgOiAwOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxZCwgMCwgSERBX09VVFBVVCwgMCwgMHg4MCwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDFkLCAxLCBIREFfT1VUUFVULCAwLCAweDgwLCBiaXRzKTsKKwkvKiBNdXRlL1VubXV0ZSBQQ00gMiBmb3IgZ29vZCBtZWFzdXJlIC0gc29tZSBzeXN0ZW1zIG5lZWQgdGhpcyAqLworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxYywgMCwgSERBX09VVFBVVCwgMCwgMHg4MCwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDFjLCAxLCBIREFfT1VUUFVULCAwLCAweDgwLCBiaXRzKTsKK30KKwogLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCiBzdGF0aWMgdm9pZCBjeHQ1MDQ3X2hwX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xMDA5LDcgKzk5MCw3IEBACiAJfTsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAotCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MDgsIDAsCisJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxNSwgMCwKIAkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOwogCWlmIChwcmVzZW50KQogCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBtaWNfamFja19vbik7CkBAIC0xMDMyLDM4ICsxMDEzLDM2IEBACiAJfQogfQogCisvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nIC0gbm9uLUVBUEQgc3lzdGVtcyAqLworc3RhdGljIHZvaWQgY3h0NTA0N19ocDJfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICB1bnNpZ25lZCBpbnQgcmVzKQoreworCXJlcyA+Pj0gMjY7CisJc3dpdGNoIChyZXMpIHsKKwljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgorCQljeHQ1MDQ3X2hwMl9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgorCQljeHQ1MDQ3X2hwX2F1dG9taWMoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X21peGVyc1tdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0Ci0JfSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQnlwYXNzIENhcHR1cmUgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIEJ5cGFzcyBDYXB0dXJlIFN3aXRjaCIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEdhaW4gVm9sdW1lIiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIEdhaW4gU3dpdGNoIiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlBDTSBTd2l0Y2giLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00tMiBWb2x1bWUiLCAweDFjLCAweDAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiUENNLTIgU3dpdGNoIiwgMHgxYywgMHgwMCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCi0JCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2luZm8sCi0JCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfZ2V0LAotCQkucHV0ID0gY3h0NTA0N19ocF9tYXN0ZXJfdm9sX3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTMsIDMsIDAsIEhEQV9PVVRQVVQpLAotCX0sCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNDdfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDEzLAotCX0sCisJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDFkLCAweDAwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDFkLCAweDAwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAwLCBIREFfT1VUUFVUKSwKIAogCXt9CiB9OwpAQCAtMTEzMywxOCArMTExMiwxOSBAQAogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTnxBQ19QSU5DVExfVlJFRl81MCB9LAogCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTnxBQ19QSU5DVExfVlJFRl81MCB9LAotCS8qIEhQLCBBbXAsIFNwZWFrZXIgICovCi0JezB4MTMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAotCXsweDFBLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDAwfSwKKwkvKiBIUCwgU3BlYWtlciAgKi8KKwl7MHgxMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFAgfSwKKwl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgxfSwKKwl7MHgxZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwfSwKKwkvKiBSZWNvcmQgc2VsZWN0b3I6IE1pYyAqLworCXsweDEyLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDAzfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkgQUNfQU1QX1NFVF9JTlBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDE3fSwKKwl7MHgxQSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwMn0sCiAJezB4MUEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJIEFDX0FNUF9TRVRfT1VUUFVUfEFDX0FNUF9TRVRfUklHSFR8QUNfQU1QX1NFVF9MRUZUfDB4MDB9LAogCXsweDFBLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCSBBQ19BTVBfU0VUX09VVFBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDAzfSwKLQl7MHgxZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwfSwKLQkvKiBSZWNvcmQgc2VsZWN0b3I6IEZyb250IG1pYyAqLwotCXsweDEyLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDAzfSwKLQl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkgQUNfQU1QX1NFVF9JTlBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDE3fSwKIAkvKiBTUERJRiByb3V0ZTogUENNICovCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwIH0sCiAJLyogRW5hYmxlIHVuc29saWNpdGVkIGV2ZW50cyAqLwpAQCAtMTE2MSw4ICsxMTQxLDYgQEAKIAl7MHgxNSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX01JQ19FVkVOVH0sCiAJLyogU3BlYWtlciByb3V0aW5nICovCiAJezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MX0sCi0JLyogQ2hhbmdlIGRlZmF1bHQgdG8gRXh0TWljIGZvciByZWNvcmRpbmcgKi8KLQl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgyfSwKIAl7fQogfTsKIApAQCAtMTE3Miw3ICsxMTUwLDYgQEAKIAl7MHgxMywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX0hQX0VWRU5UfSwKIAkvKiBSZWNvcmQgc2VsZWN0b3I6IEV4dCBNaWMgKi8KIAl7MHgxMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgwM30sCi0JezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MDJ9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCSBBQ19BTVBfU0VUX0lOUFVUfEFDX0FNUF9TRVRfUklHSFR8QUNfQU1QX1NFVF9MRUZUfDB4MTd9LAogCS8qIFNwZWFrZXIgcm91dGluZyAqLwpAQCAtMTI0MiwxNCArMTIxOSw2IEBACiAJCS5nZXQgPSBjb25leGFudF9tdXhfZW51bV9nZXQsCiAJCS5wdXQgPSBjb25leGFudF9tdXhfZW51bV9wdXQsCiAJfSwKLSAgICAgICAvKiBDb250cm9scyBmb3IgR1BJTyBwaW5zLCBhc3N1bWluZyB0aGV5IGV4aXN0IGFuZCBhcmUgY29uZmlndXJlZAotCSogYXMgb3V0cHV0cwotCSovCi0JQ1hUX0dQSU9fREFUQV9TV0lUQ0goIkdQSU8gcGluIDAiLCAweDAxLCAweDAxKSwKLQlDWFRfR1BJT19EQVRBX1NXSVRDSCgiR1BJTyBwaW4gMSIsIDB4MDEsIDB4MDIpLAotCUNYVF9HUElPX0RBVEFfU1dJVENIKCJHUElPIHBpbiAyIiwgMHgwMSwgMHgwNCksCi0JQ1hUX0dQSU9fREFUQV9TV0lUQ0goIkdQSU8gcGluIDMiLCAweDAxLCAweDA4KSwKLQogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTEzNzQsMTkgKzEzNDMsMjAgQEAKIAlzcGVjLT5jaGFubmVsX21vZGUgPSBjeHQ1MDQ3X21vZGVzLAogCiAJY29kZWMtPnBhdGNoX29wcyA9IGNvbmV4YW50X3BhdGNoX29wczsKLQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKIAogCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBDWFQ1MDQ3X01PREVMUywKIAkJCQkJCSAgY3h0NTA0N19tb2RlbHMsCiAJCQkJCQkgIGN4dDUwNDdfY2ZnX3RibCk7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNDdfTEFQVE9QOgorCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocDJfdW5zb2xfZXZlbnQ7CiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA0N19MQVBUT1BfSFA6CiAJCXNwZWMtPmlucHV0X211eCA9ICZjeHQ1MDQ3X2hwX2NhcHR1cmVfc291cmNlOwogCQlzcGVjLT5udW1faW5pdF92ZXJicyA9IDI7CiAJCXNwZWMtPmluaXRfdmVyYnNbMV0gPSBjeHQ1MDQ3X2hwX2luaXRfdmVyYnM7CiAJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNDdfaHBfbWl4ZXJzOworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA0N19ocF9pbml0OwogCQlicmVhazsKIAljYXNlIENYVDUwNDdfTEFQVE9QX0VBUEQ6CkBAIC0xMzk0LDEyICsxMzY0LDE0IEBACiAJCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMjsKIAkJc3BlYy0+aW5pdF92ZXJic1sxXSA9IGN4dDUwNDdfdG9zaGliYV9pbml0X3ZlcmJzOwogCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ3X3Rvc2hpYmFfbWl4ZXJzOworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWNhc2UgQ1hUNTA0N19URVNUOgogCQlzcGVjLT5pbnB1dF9tdXggPSAmY3h0NTA0N190ZXN0X2NhcHR1cmVfc291cmNlOwogCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ3X3Rlc3RfbWl4ZXI7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDQ3X3Rlc3RfaW5pdF92ZXJiczsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNDdfaHBfdW5zb2xfZXZlbnQ7CiAjZW5kaWYJCiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBmYmEzY2IxLi40Nzc2ZGU5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtNzQsNiArNzQsOCBAQAogCUFMQzI2MF9IUF8zMDEzLAogCUFMQzI2MF9GVUpJVFNVX1M3MDJYLAogCUFMQzI2MF9BQ0VSLAorCUFMQzI2MF9XSUxMLAorCUFMQzI2MF9SRVBMQUNFUl82NzJWLAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlBTEMyNjBfVEVTVCwKICNlbmRpZgpAQCAtOTEsNiArOTMsNyBAQAogCUFMQzI2Ml9IUF9CUENfRDcwMDBfV0wsCiAJQUxDMjYyX0hQX0JQQ19ENzAwMF9XRiwKIAlBTEMyNjJfQkVOUV9FRDgsCisJQUxDMjYyX1NPTllfQVNTQU1ELAogCUFMQzI2Ml9BVVRPLAogCUFMQzI2Ml9NT0RFTF9MQVNUIC8qIGxhc3QgdGFnICovCiB9OwpAQCAtMTE1LDE3ICsxMTgsMzMgQEAKIAlBTEM4NjFWRF8zU1QsCiAJQUxDODYxVkRfM1NUX0RJRywKIAlBTEM4NjFWRF82U1RfRElHLAorCUFMQzg2MVZEX0xFTk9WTywKKwlBTEM4NjFWRF9EQUxMQVMsCiAJQUxDODYxVkRfQVVUTywKIAlBTEM4NjFWRF9NT0RFTF9MQVNULAogfTsKIAorLyogQUxDNjYyIG1vZGVscyAqLworZW51bSB7CisJQUxDNjYyXzNTVF8yY2hfRElHLAorCUFMQzY2Ml8zU1RfNmNoX0RJRywKKwlBTEM2NjJfM1NUXzZjaCwKKwlBTEM2NjJfNVNUX0RJRywKKwlBTEM2NjJfTEVOT1ZPXzEwMUUsCisJQUxDNjYyX0FVVE8sCisJQUxDNjYyX01PREVMX0xBU1QsCit9OworCiAvKiBBTEM4ODIgbW9kZWxzICovCiBlbnVtIHsKIAlBTEM4ODJfM1NUX0RJRywKIAlBTEM4ODJfNlNUX0RJRywKIAlBTEM4ODJfQVJJTUEsCi0JQUxDODgyX0FVVE8sCisJQUxDODgyX1cySkMsCisJQUxDODgyX1RBUkdBLAorCUFMQzg4Ml9BU1VTX0E3SiwKIAlBTEM4ODVfTUFDUFJPLAorCUFMQzg4Ml9BVVRPLAogCUFMQzg4Ml9NT0RFTF9MQVNULAogfTsKIApAQCAtMTM3LDEwICsxNTYsMTMgQEAKIAlBTEM4ODNfNlNUX0RJRywKIAlBTEM4ODNfVEFSR0FfRElHLAogCUFMQzg4M19UQVJHQV8yY2hfRElHLAotCUFMQzg4OF9ERU1PX0JPQVJELAogCUFMQzg4M19BQ0VSLAogCUFMQzg4M19NRURJT04sCisJQUxDODgzX01FRElPTl9NRDIsCQogCUFMQzg4M19MQVBUT1BfRUFQRCwKKwlBTEM4ODNfTEVOT1ZPXzEwMUVfMmNoLAorCUFMQzg4M19MRU5PVk9fTkIwNzYzLAorCUFMQzg4OF9MRU5PVk9fTVM3MTk1X0RJRywJCQogCUFMQzg4M19BVVRPLAogCUFMQzg4M19NT0RFTF9MQVNULAogfTsKQEAgLTE2Myw3ICsxODUsNyBAQAogCXN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqc3RyZWFtX2FuYWxvZ19wbGF5YmFjazsKIAlzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKnN0cmVhbV9hbmFsb2dfY2FwdHVyZTsKIAotCWNoYXIgKnN0cmVhbV9uYW1lX2RpZ2l0YWw7CS8qIGRpZ2l0YWwgUENNIHN0cmVhbSAqLyAKKwljaGFyICpzdHJlYW1fbmFtZV9kaWdpdGFsOwkvKiBkaWdpdGFsIFBDTSBzdHJlYW0gKi8KIAlzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrOwogCXN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqc3RyZWFtX2RpZ2l0YWxfY2FwdHVyZTsKIApAQCAtNDAxLDcgKzQyMyw3IEBACiAJCQkJCQkgQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLAogCQkJCQkJIDB4MDApOwogCi0JaWYgKHZhbCA8IGFsY19waW5fbW9kZV9taW4oZGlyKSB8fCB2YWwgPiBhbGNfcGluX21vZGVfbWF4KGRpcikpIAorCWlmICh2YWwgPCBhbGNfcGluX21vZGVfbWluKGRpcikgfHwgdmFsID4gYWxjX3Bpbl9tb2RlX21heChkaXIpKQogCQl2YWwgPSBhbGNfcGluX21vZGVfbWluKGRpcik7CiAKIAljaGFuZ2UgPSBwaW5jdGwgIT0gYWxjX3Bpbl9tb2RlX3ZhbHVlc1t2YWxdOwpAQCAtNDYwLDcgKzQ4Miw4IEBACiAJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKIAl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOwogCXJldHVybiAwOwotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCit9CisKIHN0YXRpYyBpbnQgYWxjX2dwaW9fZGF0YV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewpAQCAtNTIwLDcgKzU0Myw4IEBACiAJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKIAl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOwogCXJldHVybiAwOwotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCit9CisKIHN0YXRpYyBpbnQgYWxjX3NwZGlmX2N0cmxfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CkBAIC01OTIsNyArNjE2LDcgQEAKIAlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBwcmVzZXQtPmhwX25pZDsKIAkKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSBwcmVzZXQtPm51bV9tdXhfZGVmczsKLQlpZiAoISBzcGVjLT5udW1fbXV4X2RlZnMpCisJaWYgKCFzcGVjLT5udW1fbXV4X2RlZnMpCiAJCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gcHJlc2V0LT5pbnB1dF9tdXg7CiAKQEAgLTYwNCw2ICs2MjgsOTAgQEAKIAlzcGVjLT5pbml0X2hvb2sgPSBwcmVzZXQtPmluaXRfaG9vazsKIH0KIAorLyogRW5hYmxlIEdQSU8gbWFzayBhbmQgc2V0IG91dHB1dCAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGNfZ3BpbzFfaW5pdF92ZXJic1tdID0geworCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX01BU0ssIDB4MDF9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwgMHgwMX0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMHgwMX0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsY19ncGlvMl9pbml0X3ZlcmJzW10gPSB7CisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwMn0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDAyfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAyfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjX2dwaW8zX2luaXRfdmVyYnNbXSA9IHsKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDAzfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDN9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDN9LAorCXsgfQorfTsKKworLyogMzItYml0IHN1YnN5c3RlbSBJRCBmb3IgQklPUyBsb2FkaW5nIGluIEhEIEF1ZGlvIGNvZGVjLgorICoJMzEgfiAxNiA6CU1hbnVmYWN0dXJlIElECisgKgkxNSB+IDgJOglTS1UgSUQKKyAqCTcgIH4gMAk6CUFzc2VtYmx5IElECisgKglwb3J0LUEgLS0+IHBpbiAzOS80MSwgcG9ydC1FIC0tPiBwaW4gMTQvMTUsIHBvcnQtRCAtLT4gcGluIDM1LzM2CisgKi8KK3N0YXRpYyB2b2lkIGFsY19zdWJzeXN0ZW1faWQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkgICAgIHVuc2lnbmVkIGludCBwb3J0YSwgdW5zaWduZWQgaW50IHBvcnRlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgcG9ydGQpCit7CisJdW5zaWduZWQgaW50IGFzcywgdG1wOworCisJYXNzID0gY29kZWMtPnN1YnN5c3RlbV9pZDsKKwlpZiAoIShhc3MgJiAxKSkKKwkJcmV0dXJuOworCisJLyogT3ZlcnJpZGUgKi8KKwl0bXAgPSAoYXNzICYgMHgzOCkgPj4gMzsJLyogZXh0ZXJuYWwgQW1wIGNvbnRyb2wgKi8KKwlzd2l0Y2ggKHRtcCkgeworCWNhc2UgMToKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgYWxjX2dwaW8xX2luaXRfdmVyYnMpOworCQlicmVhazsKKwljYXNlIDM6CisJCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIGFsY19ncGlvMl9pbml0X3ZlcmJzKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBhbGNfZ3BpbzNfaW5pdF92ZXJicyk7CisJCWJyZWFrOworCWNhc2UgNToKKwkJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CisJCWNhc2UgMHgxMGVjMDg2MjoKKwkJY2FzZSAweDEwZWMwNjYwOgorCQljYXNlIDB4MTBlYzA2NjI6CQorCQljYXNlIDB4MTBlYzAyNjc6CisJCWNhc2UgMHgxMGVjMDI2ODoKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTQsIDAsCisJCQkJCSAgICBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMik7CisJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE1LCAwLAorCQkJCQkgICAgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDIpOworCQkJcmV0dXJuOworCQl9CisJY2FzZSA2OgorCQlpZiAoYXNzICYgNCkgewkvKiBiaXQgMiA6IDAgPSBEZXNrdG9wLCAxID0gTGFwdG9wICovCisJCQloZGFfbmlkX3QgcG9ydCA9IDA7CisJCQl0bXAgPSAoYXNzICYgMHgxODAwKSA+PiAxMTsKKwkJCXN3aXRjaCAodG1wKSB7CisJCQljYXNlIDA6IHBvcnQgPSBwb3J0YTsgYnJlYWs7CisJCQljYXNlIDE6IHBvcnQgPSBwb3J0ZTsgYnJlYWs7CisJCQljYXNlIDI6IHBvcnQgPSBwb3J0ZDsgYnJlYWs7CisJCQl9CisJCQlpZiAocG9ydCkKKwkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwb3J0LCAwLAorCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAorCQkJCQkJICAgIDIpOworCQl9CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWEsIDAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDcpOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFhLCAwLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsCisJCQkJICAgICh0bXAgPT0gNSA/IDB4MzA0MCA6IDB4MzA1MCkpOworCQlicmVhazsKKwl9Cit9CisKIC8qCiAgKiBBTEM4ODAgMy1zdGFjayBtb2RlbAogICoKQEAgLTgwMSw3ICs5MDksNyBAQAogc3RhdGljIGhkYV9uaWRfdCBhbGM4ODBfNnN0X2RhY19uaWRzWzRdID0gewogCS8qIGZyb250LCByZWFyLCBjbGZlLCByZWFyX3N1cnIgKi8KIAkweDAyLCAweDAzLCAweDA0LCAweDA1Ci19OwkKK307CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODBfNnN0YWNrX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSA0LApAQCAtMTQwOSwyNSArMTUxNyw0MyBAQAogfTsKIAogLyogdG9nZ2xlIHNwZWFrZXItb3V0cHV0IGFjY29yZGluZyB0byB0aGUgaHAtamFjayBzdGF0ZSAqLwotc3RhdGljIHZvaWQgYWxjODgwX3VuaXdpbGxfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGM4ODBfdW5pd2lsbF9ocF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKICAJdW5zaWduZWQgaW50IHByZXNlbnQ7CisJdW5zaWduZWQgY2hhciBiaXRzOwogCiAgCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTQsIDAsCiAJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKKwliaXRzID0gcHJlc2VudCA/IDB4ODAgOiAwOwogCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNSwgMCwgSERBX09VVFBVVCwgMCwKLQkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKKwkJCQkgMHg4MCwgYml0cyk7CiAJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE1LCAxLCBIREFfT1VUUFVULCAwLAotCQkJCSAweDgwLCBwcmVzZW50ID8gMHg4MCA6IDApOworCQkJCSAweDgwLCBiaXRzKTsKIAlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTYsIDAsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIDB4ODAsIHByZXNlbnQgPyAweDgwIDogMCk7CisJCQkJIDB4ODAsIGJpdHMpOwogCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNiwgMSwgSERBX09VVFBVVCwgMCwKLQkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKKwkJCQkgMHg4MCwgYml0cyk7Cit9CisKKy8qIGF1dG8tdG9nZ2xlIGZyb250IG1pYyAqLworc3RhdGljIHZvaWQgYWxjODgwX3VuaXdpbGxfbWljX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKwl1bnNpZ25lZCBjaGFyIGJpdHM7CiAKIAlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE4LCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgwYiwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJCSAgICAweDcwMDAgfCAoMHgwMSA8PCA4KSB8IChwcmVzZW50ID8gMHg4MCA6IDApKTsKKwliaXRzID0gcHJlc2VudCA/IDB4ODAgOiAwOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwYiwgMCwgSERBX0lOUFVULCAxLAorCQkJCSAweDgwLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MGIsIDEsIEhEQV9JTlBVVCwgMSwKKwkJCQkgMHg4MCwgYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzg4MF91bml3aWxsX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWFsYzg4MF91bml3aWxsX2hwX2F1dG9tdXRlKGNvZGVjKTsKKwlhbGM4ODBfdW5pd2lsbF9taWNfYXV0b211dGUoY29kZWMpOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4ODBfdW5pd2lsbF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKQEAgLTE0MzYsMjIgKzE1NjIsMjggQEAKIAkvKiBMb29rcyBsaWtlIHRoZSB1bnNvbCBldmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQKIAkgKiBkZWZpbml0aW9uLiAgNGJpdCB0YWcgaXMgcGxhY2VkIGF0IDI4IGJpdCEKIAkgKi8KLQlpZiAoKHJlcyA+PiAyOCkgPT0gQUxDODgwX0hQX0VWRU5UIHx8Ci0JICAgIChyZXMgPj4gMjgpID09IEFMQzg4MF9NSUNfRVZFTlQpCi0JCWFsYzg4MF91bml3aWxsX2F1dG9tdXRlKGNvZGVjKTsKKwlzd2l0Y2ggKHJlcyA+PiAyOCkgeworCWNhc2UgQUxDODgwX0hQX0VWRU5UOgorCQlhbGM4ODBfdW5pd2lsbF9ocF9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKKwkJYWxjODgwX3VuaXdpbGxfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhbGM4ODBfdW5pd2lsbF9wNTNfaHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAgCXVuc2lnbmVkIGludCBwcmVzZW50OworCXVuc2lnbmVkIGNoYXIgYml0czsKIAogIAlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE0LCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7Ci0KKwliaXRzID0gcHJlc2VudCA/IDB4ODAgOiAwOwogCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNSwgMCwgSERBX0lOUFVULCAwLAotCQkJCSAweDgwLCBwcmVzZW50ID8gMHg4MCA6IDApOworCQkJCSAweDgwLCBiaXRzKTsKIAlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTUsIDEsIEhEQV9JTlBVVCwgMCwKLQkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKKwkJCQkgMHg4MCwgYml0cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzg4MF91bml3aWxsX3A1M19kY3ZvbF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTE0ODAsNyArMTYxMiw3IEBACiAJICovCiAJaWYgKChyZXMgPj4gMjgpID09IEFMQzg4MF9IUF9FVkVOVCkKIAkJYWxjODgwX3VuaXdpbGxfcDUzX2hwX2F1dG9tdXRlKGNvZGVjKTsKLQlpZiAoKHJlcyA+PiAyOCkgPT0gQUxDODgwX0RDVk9MX0VWRU5UKSAKKwlpZiAoKHJlcyA+PiAyOCkgPT0gQUxDODgwX0RDVk9MX0VWRU5UKQogCQlhbGM4ODBfdW5pd2lsbF9wNTNfZGN2b2xfYXV0b211dGUoY29kZWMpOwogfQogCkBAIC0xNTQ3LDIyICsxNjc5LDggQEAKIH07CiAKIC8qIEVuYWJsZSBHUElPIG1hc2sgYW5kIHNldCBvdXRwdXQgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX2dwaW8xX2luaXRfdmVyYnNbXSA9IHsKLQl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDAxfSwKLQl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDF9LAotCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDF9LAotCi0JeyB9Ci19OwotCi0vKiBFbmFibGUgR1BJTyBtYXNrIGFuZCBzZXQgb3V0cHV0ICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF9ncGlvMl9pbml0X3ZlcmJzW10gPSB7Ci0JezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwMn0sCi0JezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDAyfSwKLQl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAyfSwKLQotCXsgfQotfTsKKyNkZWZpbmUgYWxjODgwX2dwaW8xX2luaXRfdmVyYnMJYWxjX2dwaW8xX2luaXRfdmVyYnMKKyNkZWZpbmUgYWxjODgwX2dwaW8yX2luaXRfdmVyYnMJYWxjX2dwaW8yX2luaXRfdmVyYnMKIAogLyogQ2xldm8gbTUyMGcgaW5pdCAqLwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluX2NsZXZvX2luaXRfdmVyYnNbXSA9IHsKQEAgLTE3MzQsMTMgKzE4NTIsMTUgQEAKIHN0YXRpYyB2b2lkIGFsYzg4MF9sZ19hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKwl1bnNpZ25lZCBjaGFyIGJpdHM7CiAKIAlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJYml0cyA9IHByZXNlbnQgPyAweDgwIDogMDsKIAlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTcsIDAsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIDB4ODAsIHByZXNlbnQgPyAweDgwIDogMCk7CisJCQkJIDB4ODAsIGJpdHMpOwogCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNywgMSwgSERBX09VVFBVVCwgMCwKLQkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKKwkJCQkgMHg4MCwgYml0cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzg4MF9sZ191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKQEAgLTE4MTAsMTMgKzE5MzAsMTUgQEAKIHN0YXRpYyB2b2lkIGFsYzg4MF9sZ19sd19hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKwl1bnNpZ25lZCBjaGFyIGJpdHM7CiAKIAlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJYml0cyA9IHByZXNlbnQgPyAweDgwIDogMDsKIAlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTQsIDAsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIDB4ODAsIHByZXNlbnQgPyAweDgwIDogMCk7CisJCQkJIDB4ODAsIGJpdHMpOwogCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNCwgMSwgSERBX09VVFBVVCwgMCwKLQkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKKwkJCQkgMHg4MCwgYml0cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzg4MF9sZ19sd191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKQEAgLTE5MTYsNiArMjAzOCwxNyBAQAogCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfb3Blbihjb2RlYywgJnNwZWMtPm11bHRpb3V0KTsKIH0KIAorc3RhdGljIGludCBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCisJCQkJCSAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgc3RyZWFtX3RhZywKKwkJCQkJICAgdW5zaWduZWQgaW50IGZvcm1hdCwKKwkJCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19wcmVwYXJlKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQsCisJCQkJCSAgICAgc3RyZWFtX3RhZywgZm9ybWF0LCBzdWJzdHJlYW0pOworfQorCiBzdGF0aWMgaW50IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCiAJCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMTk4NCw3ICsyMTE3LDggQEAKIAkvKiBOSUQgaXMgc2V0IGluIGFsY19idWlsZF9wY21zICovCiAJLm9wcyA9IHsKIAkJLm9wZW4gPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9vcGVuLAotCQkuY2xvc2UgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9jbG9zZQorCQkuY2xvc2UgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9jbG9zZSwKKwkJLnByZXBhcmUgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlCiAJfSwKIH07CiAKQEAgLTIwNzUsNyArMjIwOSw3IEBACiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlpZiAoISBzcGVjKQorCWlmICghc3BlYykKIAkJcmV0dXJuOwogCiAJaWYgKHNwZWMtPmtjdGxfYWxsb2MpIHsKQEAgLTI0NzcsNyArMjYxMSw4IEBACiBzdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzg4MF9wcmVzZXRzW10gPSB7CiAJW0FMQzg4MF8zU1RdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODBfdGhyZWVfc3RhY2tfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywgYWxjODgwX3Bpbl8zc3RhY2tfaW5pdF92ZXJicyB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLAorCQkJCWFsYzg4MF9waW5fM3N0YWNrX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODBfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGM4ODBfZGFjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODBfdGhyZWVzdGFja19tb2RlcyksCkBAIC0yNDg3LDcgKzI2MjIsOCBAQAogCX0sCiAJW0FMQzg4MF8zU1RfRElHXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgwX3RocmVlX3N0YWNrX21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsIGFsYzg4MF9waW5fM3N0YWNrX2luaXRfdmVyYnMgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKKwkJCQlhbGM4ODBfcGluXzNzdGFja19pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgwX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjODgwX2RhY19uaWRzLAogCQkuZGlnX291dF9uaWQgPSBBTEM4ODBfRElHT1VUX05JRCwKQEAgLTI1MDksOCArMjY0NSwxMCBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4MF9jYXB0dXJlX3NvdXJjZSwKIAl9LAogCVtBTEM4ODBfNVNUXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODgwX3RocmVlX3N0YWNrX21peGVyLCBhbGM4ODBfZml2ZV9zdGFja19taXhlcn0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsIGFsYzg4MF9waW5fNXN0YWNrX2luaXRfdmVyYnMgfSwKKwkJLm1peGVycyA9IHsgYWxjODgwX3RocmVlX3N0YWNrX21peGVyLAorCQkJICAgIGFsYzg4MF9maXZlX3N0YWNrX21peGVyfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKKwkJCQlhbGM4ODBfcGluXzVzdGFja19pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgwX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjODgwX2RhY19uaWRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgwX2ZpdmVzdGFja19tb2RlcyksCkBAIC0yNTE4LDggKzI2NTYsMTAgQEAKIAkJLmlucHV0X211eCA9ICZhbGM4ODBfY2FwdHVyZV9zb3VyY2UsCiAJfSwKIAlbQUxDODgwXzVTVF9ESUddID0gewotCQkubWl4ZXJzID0geyBhbGM4ODBfdGhyZWVfc3RhY2tfbWl4ZXIsIGFsYzg4MF9maXZlX3N0YWNrX21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsIGFsYzg4MF9waW5fNXN0YWNrX2luaXRfdmVyYnMgfSwKKwkJLm1peGVycyA9IHsgYWxjODgwX3RocmVlX3N0YWNrX21peGVyLAorCQkJICAgIGFsYzg4MF9maXZlX3N0YWNrX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsCisJCQkJYWxjODgwX3Bpbl81c3RhY2tfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4MF9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzg4MF9kYWNfbmlkcywKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgwX0RJR09VVF9OSUQsCkBAIC0yNTI5LDcgKzI2NjksOCBAQAogCX0sCiAJW0FMQzg4MF82U1RdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODBfc2l4X3N0YWNrX21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsIGFsYzg4MF9waW5fNnN0YWNrX2luaXRfdmVyYnMgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKKwkJCQlhbGM4ODBfcGluXzZzdGFja19pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgwXzZzdF9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzg4MF82c3RfZGFjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODBfc2l4c3RhY2tfbW9kZXMpLApAQCAtMjUzOCw3ICsyNjc5LDggQEAKIAl9LAogCVtBTEM4ODBfNlNUX0RJR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4MF9zaXhfc3RhY2tfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywgYWxjODgwX3Bpbl82c3RhY2tfaW5pdF92ZXJicyB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLAorCQkJCWFsYzg4MF9waW5fNnN0YWNrX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODBfNnN0X2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjODgwXzZzdF9kYWNfbmlkcywKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgwX0RJR09VVF9OSUQsCkBAIC0yNTQ4LDcgKzI2OTAsOCBAQAogCX0sCiAJW0FMQzg4MF9XODEwXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgwX3c4MTBfYmFzZV9taXhlciB9LAotCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLCBhbGM4ODBfcGluX3c4MTBfaW5pdF92ZXJicywKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKKwkJCQlhbGM4ODBfcGluX3c4MTBfaW5pdF92ZXJicywKIAkJCQlhbGM4ODBfZ3BpbzJfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4MF93ODEwX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjODgwX3c4MTBfZGFjX25pZHMsCkBAIC0yNTU5LDcgKzI3MDIsOCBAQAogCX0sCiAJW0FMQzg4MF9aNzFWXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgwX3o3MXZfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywgYWxjODgwX3Bpbl96NzF2X2luaXRfdmVyYnMgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKKwkJCQlhbGM4ODBfcGluX3o3MXZfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4MF96NzF2X2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjODgwX3o3MXZfZGFjX25pZHMsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzg4MF9ESUdPVVRfTklELApAQCAtMjU3MCw3ICsyNzE0LDggQEAKIAl9LAogCVtBTEM4ODBfRjE3MzRdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODBfZjE3MzRfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywgYWxjODgwX3Bpbl9mMTczNF9pbml0X3ZlcmJzIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsCisJCQkJYWxjODgwX3Bpbl9mMTczNF9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgwX2YxNzM0X2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjODgwX2YxNzM0X2RhY19uaWRzLAogCQkuaHBfbmlkID0gMHgwMiwKQEAgLTI1ODAsNyArMjcyNSw4IEBACiAJfSwKIAlbQUxDODgwX0FTVVNdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODBfYXN1c19taXhlciB9LAotCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLCBhbGM4ODBfcGluX2FzdXNfaW5pdF92ZXJicywKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKKwkJCQlhbGM4ODBfcGluX2FzdXNfaW5pdF92ZXJicywKIAkJCQlhbGM4ODBfZ3BpbzFfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4MF9hc3VzX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjODgwX2FzdXNfZGFjX25pZHMsCkBAIC0yNTkxLDcgKzI3MzcsOCBAQAogCX0sCiAJW0FMQzg4MF9BU1VTX0RJR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4MF9hc3VzX21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsIGFsYzg4MF9waW5fYXN1c19pbml0X3ZlcmJzLAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLAorCQkJCWFsYzg4MF9waW5fYXN1c19pbml0X3ZlcmJzLAogCQkJCWFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgwX2FzdXNfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGM4ODBfYXN1c19kYWNfbmlkcywKQEAgLTI2MDMsNyArMjc1MCw4IEBACiAJfSwKIAlbQUxDODgwX0FTVVNfRElHMl0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4MF9hc3VzX21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsIGFsYzg4MF9waW5fYXN1c19pbml0X3ZlcmJzLAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLAorCQkJCWFsYzg4MF9waW5fYXN1c19pbml0X3ZlcmJzLAogCQkJCWFsYzg4MF9ncGlvMl9pbml0X3ZlcmJzIH0sIC8qIHVzZSBHUElPMiAqLwogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4MF9hc3VzX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjODgwX2FzdXNfZGFjX25pZHMsCkBAIC0yNjE1LDcgKzI3NjMsOCBAQAogCX0sCiAJW0FMQzg4MF9BU1VTX1cxVl0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4MF9hc3VzX21peGVyLCBhbGM4ODBfYXN1c193MXZfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywgYWxjODgwX3Bpbl9hc3VzX2luaXRfdmVyYnMsCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsCisJCQkJYWxjODgwX3Bpbl9hc3VzX2luaXRfdmVyYnMsCiAJCQkJYWxjODgwX2dwaW8xX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODBfYXN1c19kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzg4MF9hc3VzX2RhY19uaWRzLApAQCAtMjY2NCw3ICsyODEzLDcgQEAKIAkJLmluaXRfaG9vayA9IGFsYzg4MF91bml3aWxsX3A1M19ocF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODBfRlVKSVRTVV0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4MF9mdWppdHN1X21peGVyLCAKKwkJLm1peGVycyA9IHsgYWxjODgwX2Z1aml0c3VfbWl4ZXIsCiAJCQkgICAgYWxjODgwX3BjYmVlcF9taXhlciwgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKIAkJCQlhbGM4ODBfdW5pd2lsbF9wNTNfaW5pdF92ZXJicywKQEAgLTI3MDcsNyArMjg1Niw3IEBACiAJCS5taXhlcnMgPSB7IGFsYzg4MF9sZ19sd19taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLAogCQkJCWFsYzg4MF9sZ19sd19pbml0X3ZlcmJzIH0sCi0JCS5udW1fZGFjcyA9IDEsIAorCQkubnVtX2RhY3MgPSAxLAogCQkuZGFjX25pZHMgPSBhbGM4ODBfZGFjX25pZHMsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzg4MF9ESUdPVVRfTklELAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgwXzJfamFja19tb2RlcyksCkBAIC0yNzQ5LDE4ICsyODk4LDIxIEBACiB9OwogCiAvKiBhZGQgZHluYW1pYyBjb250cm9scyAqLwotc3RhdGljIGludCBhZGRfY29udHJvbChzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIHZhbCkKK3N0YXRpYyBpbnQgYWRkX2NvbnRyb2woc3RydWN0IGFsY19zcGVjICpzcGVjLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsKQogewogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OwogCiAJaWYgKHNwZWMtPm51bV9rY3RsX3VzZWQgPj0gc3BlYy0+bnVtX2tjdGxfYWxsb2MpIHsKIAkJaW50IG51bSA9IHNwZWMtPm51bV9rY3RsX2FsbG9jICsgTlVNX0NPTlRST0xfQUxMT0M7CiAKLQkJa25ldyA9IGtjYWxsb2MobnVtICsgMSwgc2l6ZW9mKCprbmV3KSwgR0ZQX0tFUk5FTCk7IC8qIGFycmF5ICsgdGVybWluYXRvciAqLwotCQlpZiAoISBrbmV3KQorCQkvKiBhcnJheSArIHRlcm1pbmF0b3IgKi8KKwkJa25ldyA9IGtjYWxsb2MobnVtICsgMSwgc2l6ZW9mKCprbmV3KSwgR0ZQX0tFUk5FTCk7CisJCWlmICgha25ldykKIAkJCXJldHVybiAtRU5PTUVNOwogCQlpZiAoc3BlYy0+a2N0bF9hbGxvYykgewotCQkJbWVtY3B5KGtuZXcsIHNwZWMtPmtjdGxfYWxsb2MsIHNpemVvZigqa25ldykgKiBzcGVjLT5udW1fa2N0bF9hbGxvYyk7CisJCQltZW1jcHkoa25ldywgc3BlYy0+a2N0bF9hbGxvYywKKwkJCSAgICAgICBzaXplb2YoKmtuZXcpICogc3BlYy0+bnVtX2tjdGxfYWxsb2MpOwogCQkJa2ZyZWUoc3BlYy0+a2N0bF9hbGxvYyk7CiAJCX0KIAkJc3BlYy0+a2N0bF9hbGxvYyA9IGtuZXc7CkBAIC0yNzcwLDcgKzI5MjIsNyBAQAogCWtuZXcgPSAmc3BlYy0+a2N0bF9hbGxvY1tzcGVjLT5udW1fa2N0bF91c2VkXTsKIAkqa25ldyA9IGFsYzg4MF9jb250cm9sX3RlbXBsYXRlc1t0eXBlXTsKIAlrbmV3LT5uYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKLQlpZiAoISBrbmV3LT5uYW1lKQorCWlmICgha25ldy0+bmFtZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJa25ldy0+cHJpdmF0ZV92YWx1ZSA9IHZhbDsKIAlzcGVjLT5udW1fa2N0bF91c2VkKys7CkBAIC0yNzkwLDcgKzI5NDIsOCBAQAogI2RlZmluZSBBTEM4ODBfUElOX0NEX05JRAkJMHgxYwogCiAvKiBmaWxsIGluIHRoZSBkYWNfbmlkcyB0YWJsZSBmcm9tIHRoZSBwYXJzZWQgcGluIGNvbmZpZ3VyYXRpb24gKi8KLXN0YXRpYyBpbnQgYWxjODgwX2F1dG9fZmlsbF9kYWNfbmlkcyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKK3N0YXRpYyBpbnQgYWxjODgwX2F1dG9fZmlsbF9kYWNfbmlkcyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7CiAJaGRhX25pZF90IG5pZDsKIAlpbnQgYXNzaWduZWRbNF07CkBAIC0yODE1LDggKzI5NjgsOSBAQAogCQkJY29udGludWU7CiAJCS8qIHNlYXJjaCBmb3IgYW4gZW1wdHkgY2hhbm5lbCAqLwogCQlmb3IgKGogPSAwOyBqIDwgY2ZnLT5saW5lX291dHM7IGorKykgewotCQkJaWYgKCEgYXNzaWduZWRbal0pIHsKLQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IGFsYzg4MF9pZHhfdG9fZGFjKGopOworCQkJaWYgKCFhc3NpZ25lZFtqXSkgeworCQkJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldID0KKwkJCQkJYWxjODgwX2lkeF90b19kYWMoaik7CiAJCQkJYXNzaWduZWRbal0gPSAxOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjgzMSwzNiArMjk4NSw1NCBAQAogCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKIAljaGFyIG5hbWVbMzJdOwotCXN0YXRpYyBjb25zdCBjaGFyICpjaG5hbWVbNF0gPSB7ICJGcm9udCIsICJTdXJyb3VuZCIsIE5VTEwgLypDTEZFKi8sICJTaWRlIiB9OworCXN0YXRpYyBjb25zdCBjaGFyICpjaG5hbWVbNF0gPSB7CisJCSJGcm9udCIsICJTdXJyb3VuZCIsIE5VTEwgLypDTEZFKi8sICJTaWRlIgorCX07CiAJaGRhX25pZF90IG5pZDsKIAlpbnQgaSwgZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKLQkJaWYgKCEgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0pCisJCWlmICghc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0pCiAJCQljb250aW51ZTsKIAkJbmlkID0gYWxjODgwX2lkeF90b19taXhlcihhbGM4ODBfZGFjX3RvX2lkeChzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSkpOwogCQlpZiAoaSA9PSAyKSB7CiAJCQkvKiBDZW50ZXIvTEZFICovCi0JCQlpZiAoKGVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLAotCQkJCQkgICAgICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDEsIDAsIEhEQV9PVVRQVVQpKSkgPCAwKQorCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAorCQkJCQkgICJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMSwgMCwKKwkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsICJMRkUgUGxheWJhY2sgVm9sdW1lIiwKLQkJCQkJICAgICAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAyLCAwLCBIREFfT1VUUFVUKSkpIDwgMCkKKwkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKKwkJCQkJICAiTEZFIFBsYXliYWNrIFZvbHVtZSIsCisJCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDIsIDAsCisJCQkJCQkJICAgICAgSERBX09VVFBVVCkpOworCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWlmICgoZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsICJDZW50ZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJICAgICAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAxLCAyLCBIREFfSU5QVVQpKSkgPCAwKQorCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsCisJCQkJCSAgIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAxLCAyLAorCQkJCQkJCSAgICAgIEhEQV9JTlBVVCkpOworCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWlmICgoZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsICJMRkUgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJICAgICAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAyLCAyLCBIREFfSU5QVVQpKSkgPCAwKQorCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsCisJCQkJCSAgIkxGRSBQbGF5YmFjayBTd2l0Y2giLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAyLCAyLAorCQkJCQkJCSAgICAgIEhEQV9JTlBVVCkpOworCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfSBlbHNlIHsKIAkJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIGNobmFtZVtpXSk7Ci0JCQlpZiAoKGVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKLQkJCQkJICAgICAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLCBIREFfT1VUUFVUKSkpIDwgMCkKKwkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKKwkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKKwkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgY2huYW1lW2ldKTsKLQkJCWlmICgoZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsIG5hbWUsCi0JCQkJCSAgICAgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMiwgSERBX0lOUFVUKSkpIDwgMCkKKwkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfQklORF9NVVRFLCBuYW1lLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAyLAorCQkJCQkJCSAgICAgIEhEQV9JTlBVVCkpOworCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KQEAgLTI4NzUsNTEgKzMwNDcsNTcgQEAKIAlpbnQgZXJyOwogCWNoYXIgbmFtZVszMl07CiAKLQlpZiAoISBwaW4pCisJaWYgKCFwaW4pCiAJCXJldHVybiAwOwogCiAJaWYgKGFsYzg4MF9pc19maXhlZF9waW4ocGluKSkgewogCQluaWQgPSBhbGM4ODBfaWR4X3RvX2RhYyhhbGM4ODBfZml4ZWRfcGluX2lkeChwaW4pKTsKIAkJLyogc3BlY2lmeSB0aGUgREFDIGFzIHRoZSBleHRyYSBvdXRwdXQgKi8KLQkJaWYgKCEgc3BlYy0+bXVsdGlvdXQuaHBfbmlkKQorCQlpZiAoIXNwZWMtPm11bHRpb3V0LmhwX25pZCkKIAkJCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IG5pZDsKIAkJZWxzZQogCQkJc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFswXSA9IG5pZDsKIAkJLyogY29udHJvbCBIUCB2b2x1bWUvc3dpdGNoIG9uIHRoZSBvdXRwdXQgbWl4ZXIgYW1wICovCiAJCW5pZCA9IGFsYzg4MF9pZHhfdG9fbWl4ZXIoYWxjODgwX2ZpeGVkX3Bpbl9pZHgocGluKSk7CiAJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7Ci0JCWlmICgoZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAotCQkJCSAgICAgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgSERBX09VVFBVVCkpKSA8IDApCisJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKKwkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLCBIREFfT1VUUFVUKSk7CisJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKLQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwgbmFtZSwKLQkJCQkgICAgICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDIsIEhEQV9JTlBVVCkpKSA8IDApCisJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfQklORF9NVVRFLCBuYW1lLAorCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDIsIEhEQV9JTlBVVCkpOworCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfSBlbHNlIGlmIChhbGM4ODBfaXNfbXVsdGlfcGluKHBpbikpIHsKIAkJLyogc2V0IG1hbnVhbCBjb25uZWN0aW9uICovCiAJCS8qIHdlIGhhdmUgb25seSBhIHN3aXRjaCBvbiBIUC1vdXQgUElOICovCiAJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7Ci0JCWlmICgoZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKLQkJCQkgICAgICAgSERBX0NPTVBPU0VfQU1QX1ZBTChwaW4sIDMsIDAsIEhEQV9PVVRQVVQpKSkgPCAwKQorCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAorCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChwaW4sIDMsIDAsIEhEQV9PVVRQVVQpKTsKKwkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KIAlyZXR1cm4gMDsKIH0KIAogLyogY3JlYXRlIGlucHV0IHBsYXliYWNrL2NhcHR1cmUgY29udHJvbHMgZm9yIHRoZSBnaXZlbiBwaW4gKi8KLXN0YXRpYyBpbnQgbmV3X2FuYWxvZ19pbnB1dChzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBwaW4sIGNvbnN0IGNoYXIgKmN0bG5hbWUsCitzdGF0aWMgaW50IG5ld19hbmFsb2dfaW5wdXQoc3RydWN0IGFsY19zcGVjICpzcGVjLCBoZGFfbmlkX3QgcGluLAorCQkJICAgIGNvbnN0IGNoYXIgKmN0bG5hbWUsCiAJCQkgICAgaW50IGlkeCwgaGRhX25pZF90IG1peF9uaWQpCiB7CiAJY2hhciBuYW1lWzMyXTsKIAlpbnQgZXJyOwogCiAJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgY3RsbmFtZSk7Ci0JaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIG5hbWUsCi0JCQkgICAgICAgSERBX0NPTVBPU0VfQU1QX1ZBTChtaXhfbmlkLCAzLCBpZHgsIEhEQV9JTlBVVCkpKSA8IDApCisJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAorCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG1peF9uaWQsIDMsIGlkeCwgSERBX0lOUFVUKSk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgY3RsbmFtZSk7Ci0JaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAotCQkJICAgICAgIEhEQV9DT01QT1NFX0FNUF9WQUwobWl4X25pZCwgMywgaWR4LCBIREFfSU5QVVQpKSkgPCAwKQorCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCisJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobWl4X25pZCwgMywgaWR4LCBIREFfSU5QVVQpKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KQEAgLTI5MzksOCArMzExNywxMCBAQAogCQkJCQkgICAgICAgaWR4LCAweDBiKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0gYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKLQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSBhbGM4ODBfaW5wdXRfcGluX2lkeChjZmctPmlucHV0X3BpbnNbaV0pOworCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9CisJCQkJYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKKwkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPQorCQkJCWFsYzg4MF9pbnB1dF9waW5faWR4KGNmZy0+aW5wdXRfcGluc1tpXSk7CiAJCQlpbXV4LT5udW1faXRlbXMrKzsKIAkJfQogCX0KQEAgLTI5NTIsOCArMzEzMiwxMCBAQAogCQkJCQkgICAgICBpbnQgZGFjX2lkeCkKIHsKIAkvKiBzZXQgYXMgb3V0cHV0ICovCi0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHBpbl90eXBlKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCSAgICBwaW5fdHlwZSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkJICAgIEFNUF9PVVRfVU5NVVRFKTsKIAkvKiBuZWVkIHRoZSBtYW51YWwgY29ubmVjdGlvbj8gKi8KIAlpZiAoYWxjODgwX2lzX211bHRpX3BpbihuaWQpKSB7CiAJCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMjk2NCwxNCArMzE0NiwyNCBAQAogCX0KIH0KIAorc3RhdGljIGludCBnZXRfcGluX3R5cGUoaW50IGxpbmVfb3V0X3R5cGUpCit7CisJaWYgKGxpbmVfb3V0X3R5cGUgPT0gQVVUT19QSU5fSFBfT1VUKQorCQlyZXR1cm4gUElOX0hQOworCWVsc2UKKwkJcmV0dXJuIFBJTl9PVVQ7Cit9CisKIHN0YXRpYyB2b2lkIGFsYzg4MF9hdXRvX2luaXRfbXVsdGlfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBpOwotCisJCisJYWxjX3N1YnN5c3RlbV9pZChjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCk7CiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcubGluZV9vdXRzOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1tpXTsKLQkJYWxjODgwX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIFBJTl9PVVQsIGkpOworCQlpbnQgcGluX3R5cGUgPSBnZXRfcGluX3R5cGUoc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlKTsKKwkJYWxjODgwX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIHBpbl90eXBlLCBpKTsKIAl9CiB9CiAKQEAgLTI5OTYsMzcgKzMxODgsNTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07CiAJCWlmIChhbGM4ODBfaXNfaW5wdXRfcGluKG5pZCkpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPyBQSU5fVlJFRjgwIDogUElOX0lOKTsKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCQkJICAgIGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KKwkJCQkJICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pOwogCQkJaWYgKG5pZCAhPSBBTEM4ODBfUElOX0NEX05JRCkKLQkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKIAkJfQogCX0KIH0KIAogLyogcGFyc2UgdGhlIEJJT1MgY29uZmlndXJhdGlvbiBhbmQgc2V0IHVwIHRoZSBhbGNfc3BlYyAqLwotLyogcmV0dXJuIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiB0aGUgcHJvcGVyIGNvbmZpZyBpcyBub3QgZm91bmQsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSAqLworLyogcmV0dXJuIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiB0aGUgcHJvcGVyIGNvbmZpZyBpcyBub3QgZm91bmQsCisgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqLwogc3RhdGljIGludCBhbGM4ODBfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGVycjsKIAlzdGF0aWMgaGRhX25pZF90IGFsYzg4MF9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OwogCi0JaWYgKChlcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKLQkJCQkJCWFsYzg4MF9pZ25vcmUpKSA8IDApCisJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCisJCQkJCSAgIGFsYzg4MF9pZ25vcmUpOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWlmICghIHNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQorCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIEJJT1MgcGluIGNvbmZpZyAqLwogCi0JaWYgKChlcnIgPSBhbGM4ODBfYXV0b19maWxsX2RhY19uaWRzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKSkgPCAwIHx8Ci0JICAgIChlcnIgPSBhbGM4ODBfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDAgfHwKLQkgICAgKGVyciA9IGFsYzg4MF9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3BlYywKLQkJCQkJCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdLAotCQkJCQkJIlNwZWFrZXIiKSkgPCAwIHx8Ci0JICAgIChlcnIgPSBhbGM4ODBfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHNwZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSwKLQkJCQkJCSJIZWFkcGhvbmUiKSkgPCAwIHx8Ci0JICAgIChlcnIgPSBhbGM4ODBfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDApCisJZXJyID0gYWxjODgwX2F1dG9fZmlsbF9kYWNfbmlkcyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gYWxjODgwX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBhbGM4ODBfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHNwZWMsCisJCQkJCSAgIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdLAorCQkJCQkgICAiU3BlYWtlciIpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGFsYzg4MF9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3BlYywgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdLAorCQkJCQkgICAiSGVhZHBob25lIik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gYWxjODgwX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKQEAgLTMwODYsNyArMzI5Myw3IEBACiAJCWlmIChlcnIgPCAwKSB7CiAJCQlhbGNfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gZXJyOwotCQl9IGVsc2UgaWYgKCEgZXJyKSB7CisJCX0gZWxzZSBpZiAoIWVycikgewogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAgICJoZGFfY29kZWM6IENhbm5vdCBzZXQgdXAgY29uZmlndXJhdGlvbiAiCiAJCQkgICAgICAgImZyb20gQklPUy4gIFVzaW5nIDMtc3RhY2sgbW9kZS4uLlxuIik7CkBAIC0zMTA1LDE0ICszMzEyLDE2IEBACiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjODgwX3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjODgwX3BjbV9kaWdpdGFsX2NhcHR1cmU7CiAKLQlpZiAoISBzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKKwlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewogCQkvKiBjaGVjayB3aGV0aGVyIE5JRCAweDA3IGlzIHZhbGlkICovCiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCBhbGM4ODBfYWRjX25pZHNbMF0pOwotCQl3Y2FwID0gKHdjYXAgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsgLyogZ2V0IHR5cGUgKi8KKwkJLyogZ2V0IHR5cGUgKi8KKwkJd2NhcCA9ICh3Y2FwICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7CiAJCWlmICh3Y2FwICE9IEFDX1dJRF9BVURfSU4pIHsKIAkJCXNwZWMtPmFkY19uaWRzID0gYWxjODgwX2FkY19uaWRzX2FsdDsKIAkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgwX2FkY19uaWRzX2FsdCk7Ci0JCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVyc10gPSBhbGM4ODBfY2FwdHVyZV9hbHRfbWl4ZXI7CisJCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVyc10gPQorCQkJCWFsYzg4MF9jYXB0dXJlX2FsdF9taXhlcjsKIAkJCXNwZWMtPm51bV9taXhlcnMrKzsKIAkJfSBlbHNlIHsKIAkJCXNwZWMtPmFkY19uaWRzID0gYWxjODgwX2FkY19uaWRzOwpAQCAtMzI1NCw3ICszNDYzLDcgQEAKIAlIREFfQ09ERUNfVk9MVU1FX01PTk8oIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgwYSwgMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFX01PTk8oIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgMHgwYSwgMSwgMiwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCi19OwkKK307CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfaW5wdXRfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLApAQCAtMzM0OSw2ICszNTU4LDQyIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorLyogUGFja2FyZCBiZWxsIFY3OTAwICBBTEMyNjAgcGluIHVzYWdlOiBIUCA9IDB4MGYsIE1pYyBqYWNrID0gMHgxMiwKKyAqIExpbmUgSW4gamFjayA9IDB4MTQsIENEIGF1ZGlvID0gIDB4MTYsIHBjIGJlZXAgPSAweDE3LgorICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX3dpbGxfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwOCwgMHgyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCisJQUxDX1BJTl9NT0RFKCJNaWMgSmFjayBNb2RlIiwgMHgxMiwgQUxDX1BJTl9ESVJfSU4pLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAyLCBIREFfSU5QVVQpLAorCUFMQ19QSU5fTU9ERSgiTGluZSBKYWNrIE1vZGUiLCAweDE0LCBBTENfUElOX0RJUl9JTk9VVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisvKiBSZXBsYWNlciA2NzJWIEFMQzI2MCBwaW4gdXNhZ2U6IE1pYyBqYWNrID0gMHgxMiwKKyAqIExpbmUgSW4gamFjayA9IDB4MTQsIEFUQVBJIE1pYyA9IDB4MTMsIHNwZWFrZXIgPSAweDBmLgorICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX3JlcGxhY2VyXzY3MnZfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwOCwgMHgyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCisJQUxDX1BJTl9NT0RFKCJNaWMgSmFjayBNb2RlIiwgMHgxMiwgQUxDX1BJTl9ESVJfSU4pLAorCUhEQV9DT0RFQ19WT0xVTUUoIkFUQVBJIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkFUQVRJIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDIsIEhEQV9JTlBVVCksCisJQUxDX1BJTl9NT0RFKCJMaW5lIEphY2sgTW9kZSIsIDB4MTQsIEFMQ19QSU5fRElSX0lOT1VUKSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBjYXB0dXJlIG1peGVyIGVsZW1lbnRzICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDQsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTM0MzQsNyArMzY3OSw5IEBACiAJezB4MTEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAkvKiB1bm11dGUgTElORS0yIG91dCBwaW4gKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAotCS8qIEFtcCBJbmRleGVzOiBDRCA9IDB4MDQsIExpbmUgSW4gMSA9IDB4MDIsIE1pYyAxID0gMHgwMCAmIExpbmUgSW4gMiA9IDB4MDMgKi8KKwkvKiBBbXAgSW5kZXhlczogQ0QgPSAweDA0LCBMaW5lIEluIDEgPSAweDAyLCBNaWMgMSA9IDB4MDAgJgorCSAqIExpbmUgSW4gMiA9IDB4MDMKKwkgKi8KIAkvKiBtdXRlIENEICovCiAJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoNCl9LAogCS8qIG11dGUgTGluZSBJbiAqLwpAQCAtMzQ4Miw3ICszNzI5LDkgQEAKIAl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKIAkvKiBtdXRlIHBpbiB3aWRnZXQgYW1wIGxlZnQgYW5kIHJpZ2h0IChubyBnYWluIG9uIHRoaXMgYW1wKSAqLwogCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweDAwMDB9LAotCS8qIEFtcCBJbmRleGVzOiBDRCA9IDB4MDQsIExpbmUgSW4gMSA9IDB4MDIsIE1pYyAxID0gMHgwMCAmIExpbmUgSW4gMiA9IDB4MDMgKi8KKwkvKiBBbXAgSW5kZXhlczogQ0QgPSAweDA0LCBMaW5lIEluIDEgPSAweDAyLCBNaWMgMSA9IDB4MDAgJgorCSAqIExpbmUgSW4gMiA9IDB4MDMKKwkgKi8KIAkvKiB1bm11dGUgQ0QgKi8KIAl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzAwMCB8ICgweDA0IDw8IDgpKX0sCiAJLyogdW5tdXRlIExpbmUgSW4gKi8KQEAgLTM1MzAsNyArMzc3OSw5IEBACiAJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCiAJLyogbXV0ZSBwaW4gd2lkZ2V0IGFtcCBsZWZ0IGFuZCByaWdodCAobm8gZ2FpbiBvbiB0aGlzIGFtcCkgKi8KIAl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHgwMDAwfSwKLQkvKiBBbXAgSW5kZXhlczogQ0QgPSAweDA0LCBMaW5lIEluIDEgPSAweDAyLCBNaWMgMSA9IDB4MDAgJiBMaW5lIEluIDIgPSAweDAzICovCisJLyogQW1wIEluZGV4ZXM6IENEID0gMHgwNCwgTGluZSBJbiAxID0gMHgwMiwgTWljIDEgPSAweDAwICYKKwkgKiBMaW5lIEluIDIgPSAweDAzCisJICovCiAJLyogdW5tdXRlIENEICovCiAJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMDAgfCAoMHgwNCA8PCA4KSl9LAogCS8qIHVubXV0ZSBMaW5lIEluICovCkBAIC0zNjgwLDcgKzM5MzEsOSBAQAogCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCiAJezB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAKLQkvKiBVbm11dGUgTGluZS1vdXQgcGluIHdpZGdldCBhbXAgbGVmdCBhbmQgcmlnaHQgKG5vIGVxdWl2IG1peGVyIGN0cmwpICovCisJLyogVW5tdXRlIExpbmUtb3V0IHBpbiB3aWRnZXQgYW1wIGxlZnQgYW5kIHJpZ2h0CisJICogKG5vIGVxdWl2IG1peGVyIGN0cmwpCisJICovCiAJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAkvKiBVbm11dGUgbW9ubyBwaW4gd2lkZ2V0IGFtcCBvdXRwdXQgKG5vIGVxdWl2IG1peGVyIGN0cmwpICovCiAJezB4MTEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKQEAgLTM3MTksNiArMzk3Miw1NSBAQAogCXsgfQogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjBfd2lsbF92ZXJic1tdID0geworCXsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwMn0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDB4MDd9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4MzA0MH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX3JlcGxhY2VyXzY3MnZfdmVyYnNbXSA9IHsKKwl7MHgwZiwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MDJ9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCAweDA3fSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfUFJPQ19DT0VGLCAweDMwNTB9LAorCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwMX0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDAxfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAwfSwKKworCXsweDBmLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UfSwKKwl7fQorfTsKKworLyogdG9nZ2xlIHNwZWFrZXItb3V0cHV0IGFjY29yZGluZyB0byB0aGUgaHAtamFjayBzdGF0ZSAqLworc3RhdGljIHZvaWQgYWxjMjYwX3JlcGxhY2VyXzY3MnZfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisgICAgICAgIHVuc2lnbmVkIGludCBwcmVzZW50OworCisJLyogc3BlYWtlciAtLT4gR1BJTyBEYXRhIDAsIGhwIG9yIHNwZGlmIC0tPiBHUElPIGRhdGEgMSAqLworICAgICAgICBwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDBmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCWlmIChwcmVzZW50KSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MDEsIDAsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMSk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MGYsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQKTsKKwl9IGVsc2UgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDAxLCAwLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDApOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDBmLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQpOworCX0KK30KKworc3RhdGljIHZvaWQgYWxjMjYwX3JlcGxhY2VyXzY3MnZfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVzKQoreworICAgICAgICBpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX0hQX0VWRU5UKQorICAgICAgICAgICAgICAgIGFsYzI2MF9yZXBsYWNlcl82NzJ2X2F1dG9tdXRlKGNvZGVjKTsKK30KKwogLyogVGVzdCBjb25maWd1cmF0aW9uIGZvciBkZWJ1Z2dpbmcsIG1vZGVsbGVkIGFmdGVyIHRoZSBBTEM4ODAgdGVzdAogICogY29uZmlndXJhdGlvbi4KICAqLwpAQCAtMzk0NiwxMCArNDI0OCwxMiBAQAogCQlyZXR1cm4gMDsgLyogTi9BICovCiAJCiAJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgcGZ4KTsKLQlpZiAoKGVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwgdm9sX3ZhbCkpIDwgMCkKKwllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIG5hbWUsIHZvbF92YWwpOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7Ci0JaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLCBzd192YWwpKSA8IDApCisJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwgc3dfdmFsKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMTsKIH0KQEAgLTM5ODUsNyArNDI4OSw3IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9Ci0JcmV0dXJuIDA7CQorCXJldHVybiAwOwogfQogCiAvKiBjcmVhdGUgcGxheWJhY2svY2FwdHVyZSBjb250cm9scyBmb3IgaW5wdXQgcGlucyAqLwpAQCAtMzk5OSwyMCArNDMwMywyNCBAQAogCQlpZiAoY2ZnLT5pbnB1dF9waW5zW2ldID49IDB4MTIpIHsKIAkJCWlkeCA9IGNmZy0+aW5wdXRfcGluc1tpXSAtIDB4MTI7CiAJCQllcnIgPSBuZXdfYW5hbG9nX2lucHV0KHNwZWMsIGNmZy0+aW5wdXRfcGluc1tpXSwKLQkJCQkJICAgICAgIGF1dG9fcGluX2NmZ19sYWJlbHNbaV0sIGlkeCwgMHgwNyk7CisJCQkJCSAgICAgICBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldLCBpZHgsCisJCQkJCSAgICAgICAweDA3KTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0gYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKKwkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPQorCQkJCWF1dG9fcGluX2NmZ19sYWJlbHNbaV07CiAJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gaWR4OwogCQkJaW11eC0+bnVtX2l0ZW1zKys7CiAJCX0KLQkJaWYgKChjZmctPmlucHV0X3BpbnNbaV0gPj0gMHgwZikgJiYgKGNmZy0+aW5wdXRfcGluc1tpXSA8PSAweDEwKSl7CisJCWlmIChjZmctPmlucHV0X3BpbnNbaV0gPj0gMHgwZiAmJiBjZmctPmlucHV0X3BpbnNbaV0gPD0gMHgxMCl7CiAJCQlpZHggPSBjZmctPmlucHV0X3BpbnNbaV0gLSAweDA5OwogCQkJZXJyID0gbmV3X2FuYWxvZ19pbnB1dChzcGVjLCBjZmctPmlucHV0X3BpbnNbaV0sCi0JCQkJCSAgICAgICBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldLCBpZHgsIDB4MDcpOworCQkJCQkgICAgICAgYXV0b19waW5fY2ZnX2xhYmVsc1tpXSwgaWR4LAorCQkJCQkgICAgICAgMHgwNyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9IGF1dG9fcGluX2NmZ19sYWJlbHNbaV07CisJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0KKwkJCQlhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldOwogCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9IGlkeDsKIAkJCWltdXgtPm51bV9pdGVtcysrOwogCQl9CkBAIC00MDI1LDE0ICs0MzMzLDE1IEBACiAJCQkJCSAgICAgIGludCBzZWxfaWR4KQogewogCS8qIHNldCBhcyBvdXRwdXQgKi8KLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgcGluX3R5cGUpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUpOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJICAgIHBpbl90eXBlKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQkgICAgQU1QX09VVF9VTk1VVEUpOwogCS8qIG5lZWQgdGhlIG1hbnVhbCBjb25uZWN0aW9uPyAqLwogCWlmIChuaWQgPj0gMHgxMikgewogCQlpbnQgaWR4ID0gbmlkIC0gMHgxMjsKIAkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgaWR4ICsgMHgwYiwgMCwKIAkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIHNlbF9pZHgpOwotCQkJCSAgICAKIAl9CiB9CiAKQEAgLTQwNDEsOSArNDM1MCwxMiBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWhkYV9uaWRfdCBuaWQ7CiAKLQluaWQgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbMF07CQotCWlmIChuaWQpCi0JCWFsYzI2MF9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgbmlkLCBQSU5fT1VULCAwKTsKKwlhbGNfc3Vic3lzdGVtX2lkKGNvZGVjLCAweDEwLCAweDE1LCAweDBmKTsKKwluaWQgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbMF07CisJaWYgKG5pZCkgeworCQlpbnQgcGluX3R5cGUgPSBnZXRfcGluX3R5cGUoc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlKTsKKwkJYWxjMjYwX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIHBpbl90eXBlLCAwKTsKKwl9CiAJCiAJbmlkID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF07CiAJaWYgKG5pZCkKQEAgLTQwNTEsOCArNDM2Myw4IEBACiAKIAluaWQgPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07CiAJaWYgKG5pZCkKLQkJYWxjMjYwX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIFBJTl9PVVQsIDApOwotfQkKKwkJYWxjMjYwX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIFBJTl9IUCwgMCk7Cit9CiAKICNkZWZpbmUgQUxDMjYwX1BJTl9DRF9OSUQJCTB4MTYKIHN0YXRpYyB2b2lkIGFsYzI2MF9hdXRvX2luaXRfYW5hbG9nX2lucHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtNDA2MywxMCArNDM3NSwxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKIAkJaWYgKG5pZCA+PSAweDEyKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8gUElOX1ZSRUY4MCA6IFBJTl9JTik7CisJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgICBpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/CisJCQkJCSAgICBQSU5fVlJFRjgwIDogUElOX0lOKTsKIAkJCWlmIChuaWQgIT0gQUxDMjYwX1BJTl9DRF9OSUQpCi0JCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJICAgIEFNUF9PVVRfTVVURSk7CiAJCX0KIAl9CkBAIC00MDg2LDggKzQ0MDEsOCBAQAogCQogCS8qIFVubXV0ZSBpbnB1dCBhbXBzIChDRCwgTGluZSBJbiwgTWljIDEgJiBNaWMgMikgb2YgdGhlIGFuYWxvZy1sb29wYmFjawogCSAqIG1peGVyIHdpZGdldAotCSAqIE5vdGU6IFBBU0QgbW90aGVyYm9hcmRzIHVzZXMgdGhlIExpbmUgSW4gMiBhcyB0aGUgaW5wdXQgZm9yIGZyb250IHBhbmVsCi0JICogbWljIChtaWMgMikKKwkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvcgorCSAqIGZyb250IHBhbmVsIG1pYyAobWljIDIpCiAJICovCiAJLyogQW1wIEluZGljZXM6IE1pYzEgPSAwLCBNaWMyID0gMSwgTGluZTEgPSAyLCBMaW5lMiA9IDMsIENEID0gNCAqLwogCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTQxMjIsMTQgKzQ0MzcsMTcgQEAKIAlpbnQgZXJyOwogCXN0YXRpYyBoZGFfbmlkX3QgYWxjMjYwX2lnbm9yZVtdID0geyAweDE3LCAwIH07CiAKLQlpZiAoKGVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLAotCQkJCQkJYWxjMjYwX2lnbm9yZSkpIDwgMCkKKwllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKKwkJCQkJICAgYWxjMjYwX2lnbm9yZSk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKChlcnIgPSBhbGMyNjBfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDApCisJZXJyID0gYWxjMjYwX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoISBzcGVjLT5rY3RsX2FsbG9jKQorCWlmICghc3BlYy0+a2N0bF9hbGxvYykKIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCi0JaWYgKChlcnIgPSBhbGMyNjBfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDApCisJZXJyID0gYWxjMjYwX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CkBAIC00MTc3LDYgKzQ0OTUsOCBAQAogCVtBTEMyNjBfSFBfMzAxM10JPSAiaHAtMzAxMyIsCiAJW0FMQzI2MF9GVUpJVFNVX1M3MDJYXQk9ICJmdWppdHN1IiwKIAlbQUxDMjYwX0FDRVJdCQk9ICJhY2VyIiwKKwlbQUxDMjYwX1dJTExdCQk9ICJ3aWxsIiwKKwlbQUxDMjYwX1JFUExBQ0VSXzY3MlZdCT0gInJlcGxhY2VyIiwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJW0FMQzI2MF9URVNUXQkJPSAidGVzdCIsCiAjZW5kaWYKQEAgLTQyMDAsNiArNDUyMCw4IEBACiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFjZCwgIlNvbnkgVkFJTyIsIEFMQzI2MF9CQVNJQyksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTMyNiwgIkZ1aml0c3UgUzcwMlgiLCBBTEMyNjBfRlVKSVRTVV9TNzAyWCksCiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDcyOSwgIkNUTCBVNTUzVyIsIEFMQzI2MF9CQVNJQyksCisJU05EX1BDSV9RVUlSSygweDE2MzEsIDB4YzAxNywgIlBCIFY3OTAwIiwgQUxDMjYwX1dJTEwpLAorCVNORF9QQ0lfUVVJUksoMHgxNjFmLCAweDIwNTcsICJSZXBsYWNlciA2NzJWIiwgQUxDMjYwX1JFUExBQ0VSXzY3MlYpLAogCXt9CiB9OwogCkBAIC00MjcwLDYgKzQ1OTIsMzQgQEAKIAkJLm51bV9tdXhfZGVmcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2FjZXJfY2FwdHVyZV9zb3VyY2VzKSwKIAkJLmlucHV0X211eCA9IGFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlcywKIAl9LAorCVtBTEMyNjBfV0lMTF0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2MF93aWxsX21peGVyLAorCQkJICAgIGFsYzI2MF9jYXB0dXJlX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjBfaW5pdF92ZXJicywgYWxjMjYwX3dpbGxfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjBfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjBfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2MF9hZGNfbmlkcyksCisJCS5hZGNfbmlkcyA9IGFsYzI2MF9hZGNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDMjYwX0RJR09VVF9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjBfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYwX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzI2MF9jYXB0dXJlX3NvdXJjZSwKKwl9LAorCVtBTEMyNjBfUkVQTEFDRVJfNjcyVl0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2MF9yZXBsYWNlcl82NzJ2X21peGVyLAorCQkJICAgIGFsYzI2MF9jYXB0dXJlX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjBfaW5pdF92ZXJicywgYWxjMjYwX3JlcGxhY2VyXzY3MnZfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjBfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjBfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2MF9hZGNfbmlkcyksCisJCS5hZGNfbmlkcyA9IGFsYzI2MF9hZGNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDMjYwX0RJR09VVF9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjBfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYwX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzI2MF9jYXB0dXJlX3NvdXJjZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjYwX3JlcGxhY2VyXzY3MnZfdW5zb2xfZXZlbnQsCisJCS5pbml0X2hvb2sgPSBhbGMyNjBfcmVwbGFjZXJfNjcydl9hdXRvbXV0ZSwKKwl9LAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlbQUxDMjYwX1RFU1RdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjBfdGVzdF9taXhlciwKQEAgLTQzMTMsNyArNDY2Myw3IEBACiAJCWlmIChlcnIgPCAwKSB7CiAJCQlhbGNfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gZXJyOwotCQl9IGVsc2UgaWYgKCEgZXJyKSB7CisJCX0gZWxzZSBpZiAoIWVycikgewogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAgICJoZGFfY29kZWM6IENhbm5vdCBzZXQgdXAgY29uZmlndXJhdGlvbiAiCiAJCQkgICAgICAgImZyb20gQklPUy4gIFVzaW5nIGJhc2UgbW9kZS4uLlxuIik7CkBAIC00MzgyLDcgKzQ3MzIsOCBAQAogI2RlZmluZSBhbGM4ODJfbXV4X2VudW1faW5mbyBhbGNfbXV4X2VudW1faW5mbwogI2RlZmluZSBhbGM4ODJfbXV4X2VudW1fZ2V0IGFsY19tdXhfZW51bV9nZXQKIAotc3RhdGljIGludCBhbGM4ODJfbXV4X2VudW1fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3N0YXRpYyBpbnQgYWxjODgyX211eF9lbnVtX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTQzOTYsNyArNDc0Nyw3IEBACiAJaWR4ID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKIAlpZiAoaWR4ID49IGltdXgtPm51bV9pdGVtcykKIAkJaWR4ID0gaW11eC0+bnVtX2l0ZW1zIC0gMTsKLQlpZiAoKmN1cl92YWwgPT0gaWR4ICYmICEgY29kZWMtPmluX3Jlc3VtZSkKKwlpZiAoKmN1cl92YWwgPT0gaWR4ICYmICFjb2RlYy0+aW5fcmVzdW1lKQogCQlyZXR1cm4gMDsKIAlmb3IgKGkgPSAwOyBpIDwgaW11eC0+bnVtX2l0ZW1zOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IHYgPSAoaSA9PSBpZHgpID8gMHg3MDAwIDogMHg3MDgwOwpAQCAtNDQwOCw2ICs0NzU5LDM1IEBACiB9CiAKIC8qCisgKiAyY2ggbW9kZQorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml8zU1RfY2gyX2luaXRbXSA9IHsKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIDZjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyXzNTVF9jaDZfaW5pdFtdID0geworCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDIgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4Ml8zU1RfNmNoX21vZGVzWzJdID0geworCXsgMiwgYWxjODgyXzNTVF9jaDJfaW5pdCB9LAorCXsgNiwgYWxjODgyXzNTVF9jaDZfaW5pdCB9LAorfTsKKworLyoKICAqIDZjaCBtb2RlCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyX3NpeHN0YWNrX2NoNl9pbml0W10gPSB7CkBAIC00NDY0LDYgKzQ4NDQsNTUgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgyX3cyamNfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4Ml90YXJnYV9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworLyogUGluIGFzc2lnbm1lbnQ6IEZyb250PTB4MTQsIEhQID0gMHgxNSwgRnJvbnQgPSAweDE2LCA/Pz8KKyAqICAgICAgICAgICAgICAgICBGcm9udCBNaWM9MHgxOCwgTGluZSBJbiA9IDB4MWEsIExpbmUgSW4gPSAweDFiLCBDRCA9IDB4MWMKKyAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4Ml9hc3VzX2E3al9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNb2JpbGUgRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgxNiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1vYmlsZSBMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDMsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1vYmlsZSBMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDMsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgyX2NobW9kZV9taXhlcltdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC00NTU5LDcgKzQ5ODgsNyBAQAogCS8qIGNoYW5nZSB0byBFQVBEIG1vZGUgKi8KIAl7MHgyMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwN30sCiAJezB4MjAsIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHgzMDYwfSwKLQl7IH0gCisJeyB9CiB9OwogCiAvKiBNYWMgUHJvIHRlc3QgKi8KQEAgLTQ2MjQsNiArNTA1Myw2NyBAQAogCiAJeyB9CiB9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml90YXJnYV92ZXJic1tdID0geworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCQorCXsweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMn0sIC8qIG1pYy9jbGZlICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwgLyogbGluZS9zdXJyb3VuZCAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIEhQICovCisKKwl7MHgxNCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBTEM4ODBfSFBfRVZFTlQgfCBBQ19VU1JTUF9FTn0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwM30sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDAzfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAzfSwKKwl7IH0gLyogZW5kICovCit9OworCisvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCitzdGF0aWMgdm9pZCBhbGM4ODJfdGFyZ2FfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisgCXVuc2lnbmVkIGludCBwcmVzZW50OworIAorIAlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE0LCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDFiLCAwLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBwcmVzZW50ID8gMHg4MCA6IDApOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxYiwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAxLCAwLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIHByZXNlbnQgPyAxIDogMyk7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzg4Ml90YXJnYV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKK3sKKwkvKiBMb29rcyBsaWtlIHRoZSB1bnNvbCBldmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQKKwkgKiBkZWZpbml0aW9uLiAgNGJpdCB0YWcgaXMgcGxhY2VkIGF0IDI2IGJpdCEKKwkgKi8KKwlpZiAoKChyZXMgPj4gMjYpID09IEFMQzg4MF9IUF9FVkVOVCkpIHsKKwkJYWxjODgyX3RhcmdhX2F1dG9tdXRlKGNvZGVjKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyX2FzdXNfYTdqX3ZlcmJzW10gPSB7CisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKworCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwgLyogRnJvbnQgKi8KKwl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBIUCAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIEZyb250ICovCisKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LCAvKiBtaWMvY2xmZSAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sIC8qIGxpbmUvc3Vycm91bmQgKi8KKwl7MHgxYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBIUCAqLworCXsgfSAvKiBlbmQgKi8KK307CisKIHN0YXRpYyB2b2lkIGFsYzg4Ml9ncGlvX211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBwaW4sIGludCBtdXRlZCkKIHsKIAl1bnNpZ25lZCBpbnQgZ3Bpb3N0YXRlLCBncGlvbWFzaywgZ3Bpb2RpcjsKQEAgLTQ2NzIsOCArNTE2Miw4IEBACiAKIAkvKiBVbm11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKIAkgKiBtaXhlciB3aWRnZXQKLQkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvciBmcm9udCBwYW5lbAotCSAqIG1pYyAobWljIDIpCisJICogTm90ZTogUEFTRCBtb3RoZXJib2FyZHMgdXNlcyB0aGUgTGluZSBJbiAyIGFzIHRoZSBpbnB1dCBmb3IKKwkgKiBmcm9udCBwYW5lbCBtaWMgKG1pYyAyKQogCSAqLwogCS8qIEFtcCBJbmRpY2VzOiBNaWMxID0gMCwgTWljMiA9IDEsIExpbmUxID0gMiwgTGluZTIgPSAzLCBDRCA9IDQgKi8KIAl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC00NzgyLDYgKzUyNzIsNyBAQAogCVtBTEM4ODJfM1NUX0RJR10JPSAiM3N0YWNrLWRpZyIsCiAJW0FMQzg4Ml82U1RfRElHXQk9ICI2c3RhY2stZGlnIiwKIAlbQUxDODgyX0FSSU1BXQkJPSAiYXJpbWEiLAorCVtBTEM4ODJfVzJKQ10JCT0gIncyamMiLAogCVtBTEM4ODVfTUFDUFJPXQkJPSAibWFjcHJvIiwKIAlbQUxDODgyX0FVVE9dCQk9ICJhdXRvIiwKIH07CkBAIC00NzkwLDggKzUyODEsMTEgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHg2NjY4LCAiRUNTIiwgQUxDODgyXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDY2NjgsICJGb3hjb25uIiwgQUxDODgyXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDY2NjgsICJNU0kiLCBBTEM4ODJfNlNUX0RJRyksCisJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MjhmYiwgIlRhcmdhIFQ4IiwgQUxDODgyX1RBUkdBKSwgLyogTVNJLTEwNDkgVDggICovCiAJU05EX1BDSV9RVUlSSygweDE2MWYsIDB4MjA1NCwgIkFyaW1hIFc4MjAiLCBBTEM4ODJfQVJJTUEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDA2MGQsICJBc3VzIEE3SiIsIEFMQzg4Ml9BU1VTX0E3SiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFkOCwgIkFzdXMgUDVXRCIsIEFMQzg4Ml82U1RfRElHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTcxLCAiQXN1cyBXMkpDIiwgQUxDODgyX1cySkMpLAogCXt9CiB9OwogCkBAIC00ODI4LDYgKzUzMjIsMTggQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4Ml9zaXhzdGFja19tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODJfY2FwdHVyZV9zb3VyY2UsCiAJfSwKKwlbQUxDODgyX1cySkNdID0geworCQkubWl4ZXJzID0geyBhbGM4ODJfdzJqY19taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgyX2luaXRfdmVyYnMsIGFsYzg4Ml9lYXBkX3ZlcmJzLAorCQkJCWFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgwX3RocmVlc3RhY2tfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODgwX3RocmVlc3RhY2tfbW9kZXMsCisJCS5uZWVkX2RhY19maXggPSAxLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKKwkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCisJfSwKIAlbQUxDODg1X01BQ1BST10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4Ml9tYWNwcm9fbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4Ml9tYWNwcm9faW5pdF92ZXJicyB9LApAQCAtNDgzOSw2ICs1MzQ1LDM2IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODJfY2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAogCX0sCisJW0FMQzg4Ml9UQVJHQV0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzg4Ml90YXJnYV9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciwKKwkJCSAgICBhbGM4ODJfY2FwdHVyZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgyX2luaXRfdmVyYnMsIGFsYzg4Ml90YXJnYV92ZXJic30sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAorCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKKwkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgyX2FkY19uaWRzKSwKKwkJLmFkY19uaWRzID0gYWxjODgyX2FkY19uaWRzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgyXzNTVF82Y2hfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODgyXzNTVF82Y2hfbW9kZXMsCisJCS5uZWVkX2RhY19maXggPSAxLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjODgyX3RhcmdhX3Vuc29sX2V2ZW50LAorCQkuaW5pdF9ob29rID0gYWxjODgyX3RhcmdhX2F1dG9tdXRlLAorCX0sCisJW0FMQzg4Ml9BU1VTX0E3Sl0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzg4Ml9hc3VzX2E3al9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciwKKwkJCSAgICBhbGM4ODJfY2FwdHVyZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgyX2luaXRfdmVyYnMsIGFsYzg4Ml9hc3VzX2E3al92ZXJic30sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAorCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKKwkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgyX2FkY19uaWRzKSwKKwkJLmFkY19uaWRzID0gYWxjODgyX2FkY19uaWRzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgyXzNTVF82Y2hfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODgyXzNTVF82Y2hfbW9kZXMsCisJCS5uZWVkX2RhY19maXggPSAxLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKKwl9LAkKIH07CiAKIApAQCAtNDg1MSwxNSArNTM4NywxNyBAQAogewogCS8qIHNldCBhcyBvdXRwdXQgKi8KIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaWR4OyAKLQkKKwlpbnQgaWR4OworCiAJaWYgKHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2RhY19pZHhdID09IDB4MjUpCiAJCWlkeCA9IDQ7CiAJZWxzZQogCQlpZHggPSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tkYWNfaWR4XSAtIDI7CiAKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgcGluX3R5cGUpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUpOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJICAgIHBpbl90eXBlKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQkgICAgQU1QX09VVF9VTk1VVEUpOwogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGlkeCk7CiAKIH0KQEAgLTQ4NjksMTAgKzU0MDcsMTMgQEAKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgaTsKIAorCWFsY19zdWJzeXN0ZW1faWQoY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQpOwogCWZvciAoaSA9IDA7IGkgPD0gSERBX1NJREU7IGkrKykgewotCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zW2ldOwkKKwkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1tpXTsKKwkJaW50IHBpbl90eXBlID0gZ2V0X3Bpbl90eXBlKHNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSk7CiAJCWlmIChuaWQpCi0JCQlhbGM4ODJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIG5pZCwgUElOX09VVCwgaSk7CisJCQlhbGM4ODJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIG5pZCwgcGluX3R5cGUsCisJCQkJCQkJICBpKTsKIAl9CiB9CiAKQEAgLTQ4ODMsNyArNTQyNCw4IEBACiAKIAlwaW4gPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07CiAJaWYgKHBpbikgLyogY29ubmVjdCB0byBmcm9udCAqLwotCQlhbGM4ODJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX0hQLCAwKTsgLyogdXNlIGRhYyAwICovCisJCS8qIHVzZSBkYWMgMCAqLworCQlhbGM4ODJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX0hQLCAwKTsKIH0KIAogI2RlZmluZSBhbGM4ODJfaXNfaW5wdXRfcGluKG5pZCkJYWxjODgwX2lzX2lucHV0X3BpbihuaWQpCkBAIC00ODk3LDEwICs1NDM5LDEzIEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAoYWxjODgyX2lzX2lucHV0X3BpbihuaWQpKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8gUElOX1ZSRUY4MCA6IFBJTl9JTik7CisJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgICBpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/CisJCQkJCSAgICBQSU5fVlJFRjgwIDogUElOX0lOKTsKIAkJCWlmIChuaWQgIT0gQUxDODgyX1BJTl9DRF9OSUQpCi0JCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJICAgIEFNUF9PVVRfTVVURSk7CiAJCX0KIAl9CkBAIC00OTYyLDcgKzU1MDcsNyBAQAogCQlpZiAoZXJyIDwgMCkgewogCQkJYWxjX2ZyZWUoY29kZWMpOwogCQkJcmV0dXJuIGVycjsKLQkJfSBlbHNlIGlmICghIGVycikgeworCQl9IGVsc2UgaWYgKCFlcnIpIHsKIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCSAgICAgICAiaGRhX2NvZGVjOiBDYW5ub3Qgc2V0IHVwIGNvbmZpZ3VyYXRpb24gIgogCQkJICAgICAgICJmcm9tIEJJT1MuICBVc2luZyBiYXNlIG1vZGUuLi5cbiIpOwpAQCAtNDk4NiwxNCArNTUzMSwxNiBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0JaWYgKCEgc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CisJaWYgKCFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKIAkJLyogY2hlY2sgd2hldGhlciBOSUQgMHgwNyBpcyB2YWxpZCAqLwogCQl1bnNpZ25lZCBpbnQgd2NhcCA9IGdldF93Y2Fwcyhjb2RlYywgMHgwNyk7Ci0JCXdjYXAgPSAod2NhcCAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOyAvKiBnZXQgdHlwZSAqLworCQkvKiBnZXQgdHlwZSAqLworCQl3Y2FwID0gKHdjYXAgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsKIAkJaWYgKHdjYXAgIT0gQUNfV0lEX0FVRF9JTikgewogCQkJc3BlYy0+YWRjX25pZHMgPSBhbGM4ODJfYWRjX25pZHNfYWx0OwogCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODJfYWRjX25pZHNfYWx0KTsKLQkJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzXSA9IGFsYzg4Ml9jYXB0dXJlX2FsdF9taXhlcjsKKwkJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzXSA9CisJCQkJYWxjODgyX2NhcHR1cmVfYWx0X21peGVyOwogCQkJc3BlYy0+bnVtX21peGVycysrOwogCQl9IGVsc2UgewogCQkJc3BlYy0+YWRjX25pZHMgPSBhbGM4ODJfYWRjX25pZHM7CkBAIC01MDMzLDYgKzU1ODAsNyBAQAogCS8qIEFEQzEtMiAqLwogCTB4MDgsIDB4MDksCiB9OworCiAvKiBpbnB1dCBNVVggKi8KIC8qIEZJWE1FOiBzaG91bGQgYmUgYSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCiAKQEAgLTUwNDUsNiArNTU5MywyNSBAQAogCQl7ICJDRCIsIDB4NCB9LAogCX0sCiB9OworCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgzX2xlbm92b18xMDFlX2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSAyLAorCS5pdGVtcyA9IHsKKwkJeyAiTWljIiwgMHgxIH0sCisJCXsgIkxpbmUiLCAweDIgfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4M19sZW5vdm9fbmIwNzYzX2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSA0LAorCS5pdGVtcyA9IHsKKwkJeyAiTWljIiwgMHgwIH0sCisJCXsgImlNaWMiLCAweDEgfSwKKwkJeyAiTGluZSIsIDB4MiB9LAorCQl7ICJDRCIsIDB4NCB9LAorCX0sCit9OworCiAjZGVmaW5lIGFsYzg4M19tdXhfZW51bV9pbmZvIGFsY19tdXhfZW51bV9pbmZvCiAjZGVmaW5lIGFsYzg4M19tdXhfZW51bV9nZXQgYWxjX211eF9lbnVtX2dldAogCkBAIC01MDYzLDcgKzU2MzAsNyBAQAogCWlkeCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CiAJaWYgKGlkeCA+PSBpbXV4LT5udW1faXRlbXMpCiAJCWlkeCA9IGltdXgtPm51bV9pdGVtcyAtIDE7Ci0JaWYgKCpjdXJfdmFsID09IGlkeCAmJiAhIGNvZGVjLT5pbl9yZXN1bWUpCisJaWYgKCpjdXJfdmFsID09IGlkeCAmJiAhY29kZWMtPmluX3Jlc3VtZSkKIAkJcmV0dXJuIDA7CiAJZm9yIChpID0gMDsgaSA8IGltdXgtPm51bV9pdGVtczsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCB2ID0gKGkgPT0gaWR4KSA/IDB4NzAwMCA6IDB4NzA4MDsKQEAgLTUwNzMsNiArNTY0MCw3IEBACiAJKmN1cl92YWwgPSBpZHg7CiAJcmV0dXJuIDE7CiB9CisKIC8qCiAgKiAyY2ggbW9kZQogICovCkBAIC01MzI1LDcgKzU4OTMsNyBAQAogCQkucHV0ID0gYWxjODgzX211eF9lbnVtX3B1dCwKIAl9LAogCXsgfSAvKiBlbmQgKi8KLX07CQorfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M190YWdyYV8yY2hfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtNTM1MCw2ICs1OTE4LDgxIEBACiAJCS5wdXQgPSBhbGM4ODNfbXV4X2VudW1fcHV0LAogCX0sCiAJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19sZW5vdm9fMTAxZV8yY2hfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiaVNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJpU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS8qIC5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwgKi8KKwkJLm5hbWUgPSAiSW5wdXQgU291cmNlIiwKKwkJLmNvdW50ID0gMSwKKwkJLmluZm8gPSBhbGM4ODNfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IGFsYzg4M19tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBhbGM4ODNfbXV4X2VudW1fcHV0LAorCX0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19sZW5vdm9fbmIwNzYzX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoImlNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJpTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAxLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLyogLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLCAqLworCQkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLAorCQkuY291bnQgPSAyLAorCQkuaW5mbyA9IGFsYzg4M19tdXhfZW51bV9pbmZvLAorCQkuZ2V0ID0gYWxjODgzX211eF9lbnVtX2dldCwKKwkJLnB1dCA9IGFsYzg4M19tdXhfZW51bV9wdXQsCisJfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX21lZGlvbl9tZDJfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMSwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS8qIC5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwgKi8KKwkJLm5hbWUgPSAiSW5wdXQgU291cmNlIiwKKwkJLmNvdW50ID0gMiwKKwkJLmluZm8gPSBhbGM4ODNfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IGFsYzg4M19tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBhbGM4ODNfbXV4X2VudW1fcHV0LAorCX0sCisJeyB9IC8qIGVuZCAqLwogfTsJCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfY2htb2RlX21peGVyW10gPSB7CkBAIC01NDUyLDI1ICs2MDk1LDEyMiBAQAogCXsweDFiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIEhQICovCiAKIAl7MHgxNCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBTEM4ODBfSFBfRVZFTlQgfCBBQ19VU1JTUF9FTn0sCi0JezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwM30sIAotCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwgMHgwM30sIAotCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDN9LCAKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDAzfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDN9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDN9LAogCiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfbGVub3ZvXzEwMWVfdmVyYnNbXSA9IHsKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9GUk9OVF9FVkVOVHxBQ19VU1JTUF9FTn0sCisgICAgICAgIHsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9IUF9FVkVOVHxBQ19VU1JTUF9FTn0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfbGVub3ZvX25iMDc2M192ZXJic1tdID0geworICAgICAgICB7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisgICAgICAgIHsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9IUF9FVkVOVCB8IEFDX1VTUlNQX0VOfSwKKyAgICAgICAgezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF9sZW5vdm9fbXM3MTk1X3ZlcmJzW10gPSB7CisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9GUk9OVF9FVkVOVCB8IEFDX1VTUlNQX0VOfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBTEM4ODBfSFBfRVZFTlQgICAgfCBBQ19VU1JTUF9FTn0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyogdG9nZ2xlIGZyb250LWphY2sgYW5kIFJDQSBhY2NvcmRpbmcgdG8gdGhlIGhwLWphY2sgc3RhdGUgKi8KK3N0YXRpYyB2b2lkIGFsYzg4OF9sZW5vdm9fbXM3MTk1X2Zyb250X2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKyAKKyAJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYiwgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNCwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTQsIDEsIEhEQV9PVVRQVVQsIDAsCisJCQkJIDB4ODAsIHByZXNlbnQgPyAweDgwIDogMCk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE1LCAwLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBwcmVzZW50ID8gMHg4MCA6IDApOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNSwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKKwkKK30KKworLyogdG9nZ2xlIFJDQSBhY2NvcmRpbmcgdG8gdGhlIGZyb250LWphY2sgc3RhdGUgKi8KK3N0YXRpYyB2b2lkIGFsYzg4OF9sZW5vdm9fbXM3MTk1X3JjYV9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKyAJdW5zaWduZWQgaW50IHByZXNlbnQ7CisgCisgCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTQsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTUsIDAsIEhEQV9PVVRQVVQsIDAsCisJCQkJIDB4ODAsIHByZXNlbnQgPyAweDgwIDogMCk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE1LCAxLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBwcmVzZW50ID8gMHg4MCA6IDApOworCQorfQorc3RhdGljIHZvaWQgYWxjODgzX2xlbm92b19tczcxOTVfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IHJlcykKK3sKKwlpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX0hQX0VWRU5UKQorCQlhbGM4ODhfbGVub3ZvX21zNzE5NV9mcm9udF9hdXRvbXV0ZShjb2RlYyk7CisJaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9GUk9OVF9FVkVOVCkKKwkJYWxjODg4X2xlbm92b19tczcxOTVfcmNhX2F1dG9tdXRlKGNvZGVjKTsKK30KKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfbWVkaW9uX21kMl92ZXJic1tdID0geworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCisJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qIHRvZ2dsZSBzcGVha2VyLW91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGhwLWphY2sgc3RhdGUgKi8KK3N0YXRpYyB2b2lkIGFsYzg4M19tZWRpb25fbWQyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKyAKKyAJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxNCwgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNSwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTUsIDEsIEhEQV9PVVRQVVQsIDAsCisJCQkJIDB4ODAsIHByZXNlbnQgPyAweDgwIDogMCk7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzg4M19tZWRpb25fbWQyX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgIHVuc2lnbmVkIGludCByZXMpCit7CisJaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9IUF9FVkVOVCkKKwkJYWxjODgzX21lZGlvbl9tZDJfYXV0b211dGUoY29kZWMpOworfQorCiAvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCiBzdGF0aWMgdm9pZCBhbGM4ODNfdGFncmFfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAgCXVuc2lnbmVkIGludCBwcmVzZW50OworCXVuc2lnbmVkIGNoYXIgYml0czsKIAogIAlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE0LCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJYml0cyA9IHByZXNlbnQgPyAweDgwIDogMDsKIAlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MWIsIDAsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIDB4ODAsIHByZXNlbnQgPyAweDgwIDogMCk7CisJCQkJIDB4ODAsIGJpdHMpOwogCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxYiwgMSwgSERBX09VVFBVVCwgMCwKLQkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAxLCAwLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIHByZXNlbnQgPyAxIDogMyk7CisJCQkJIDB4ODAsIGJpdHMpOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDEsIDAsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwKKwkJCSAgICBwcmVzZW50ID8gMSA6IDMpOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4ODNfdGFncmFfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCkBAIC01NDc5LDYgKzYyMTksNDcgQEAKIAkJYWxjODgzX3RhZ3JhX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAorc3RhdGljIHZvaWQgYWxjODgzX2xlbm92b18xMDFlX2lzcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKwl1bnNpZ25lZCBjaGFyIGJpdHM7CisKKyAJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxNCwgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCWJpdHMgPSBwcmVzZW50ID8gMHg4MCA6IDA7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE1LCAwLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTUsIDEsIEhEQV9PVVRQVVQsIDAsCisJCQkJIDB4ODAsIGJpdHMpOworfQorCitzdGF0aWMgdm9pZCBhbGM4ODNfbGVub3ZvXzEwMWVfYWxsX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKwl1bnNpZ25lZCBjaGFyIGJpdHM7CisKKyAJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYiwgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCWJpdHMgPSBwcmVzZW50ID8gMHg4MCA6IDA7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE1LCAwLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTUsIDEsIEhEQV9PVVRQVVQsIDAsCisJCQkJIDB4ODAsIGJpdHMpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNCwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE0LCAxLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBiaXRzKTsKK30KKworc3RhdGljIHZvaWQgYWxjODgzX2xlbm92b18xMDFlX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQoreworCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfSFBfRVZFTlQpCisJCWFsYzg4M19sZW5vdm9fMTAxZV9hbGxfYXV0b211dGUoY29kZWMpOworCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfRlJPTlRfRVZFTlQpCisJCWFsYzg4M19sZW5vdm9fMTAxZV9pc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Cit9CisKIC8qCiAgKiBnZW5lcmljIGluaXRpYWxpemF0aW9uIG9mIEFEQywgaW5wdXQgbWl4ZXJzIGFuZCBvdXRwdXQgbWl4ZXJzCiAgKi8KQEAgLTU0OTMsOCArNjI3NCw4IEBACiAKIAkvKiBVbm11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKIAkgKiBtaXhlciB3aWRnZXQKLQkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvciBmcm9udCBwYW5lbAotCSAqIG1pYyAobWljIDIpCisJICogTm90ZTogUEFTRCBtb3RoZXJib2FyZHMgdXNlcyB0aGUgTGluZSBJbiAyIGFzIHRoZSBpbnB1dCBmb3IKKwkgKiBmcm9udCBwYW5lbCBtaWMgKG1pYyAyKQogCSAqLwogCS8qIEFtcCBJbmRpY2VzOiBNaWMxID0gMCwgTWljMiA9IDEsIExpbmUxID0gMiwgTGluZTIgPSAzLCBDRCA9IDQgKi8KIAl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC01NTMwLDEzICs2MzExLDEzIEBACiAJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCi0JLy97MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgzKX0sCisJLyogezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LCAqLwogCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDQpfSwKIAkvKiBJbnB1dCBtaXhlcjIgKi8KIAl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwKLQkvL3sweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDMpfSwKKwkvKiB7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgzKX0sICovCiAJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoNCl9LAogCiAJeyB9CkBAIC01NTgwLDEwICs2MzYxLDEzIEBACiAJW0FMQzg4M182U1RfRElHXQk9ICI2c3RhY2stZGlnIiwKIAlbQUxDODgzX1RBUkdBX0RJR10JPSAidGFyZ2EtZGlnIiwKIAlbQUxDODgzX1RBUkdBXzJjaF9ESUddCT0gInRhcmdhLTJjaC1kaWciLAotCVtBTEM4ODhfREVNT19CT0FSRF0JPSAiNnN0YWNrLWRpZy1kZW1vIiwKIAlbQUxDODgzX0FDRVJdCQk9ICJhY2VyIiwKIAlbQUxDODgzX01FRElPTl0JCT0gIm1lZGlvbiIsCisJW0FMQzg4M19NRURJT05fTUQyXQk9ICJtZWRpb24tbWQyIiwKIAlbQUxDODgzX0xBUFRPUF9FQVBEXQk9ICJsYXB0b3AtZWFwZCIsCisJW0FMQzg4M19MRU5PVk9fMTAxRV8yY2hdID0gImxlbm92by0xMDFlIiwKKwlbQUxDODgzX0xFTk9WT19OQjA3NjNdCT0gImxlbm92by1uYjA3NjMiLAorCVtBTEM4ODhfTEVOT1ZPX01TNzE5NV9ESUddID0gImxlbm92by1tczcxOTUtZGlnIiwKIAlbQUxDODgzX0FVVE9dCQk9ICJhdXRvIiwKIH07CiAKQEAgLTU1OTIsMTAgKzYzNzYsMTMgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA4ZSwgMHg1MzRkLCBOVUxMLCBBTEM4ODNfM1NUXzZjaCksCiAJU05EX1BDSV9RVUlSSygweDE1NTgsIDAsICJDbGV2byBsYXB0b3AiLCBBTEM4ODNfTEFQVE9QX0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDY2NjgsICJGb3hjb25uIiwgQUxDODgzXzZTVF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxNDU4LCAweGEwMDIsICJNU0kiLCBBTEM4ODNfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NjY2OCwgIk1TSSIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHg3MTg3LCAiTVNJIiwgQUxDODgzXzZTVF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDcyNTAsICJNU0kiLCBBTEM4ODNfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NzI4MCwgIk1TSSIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgwNTc5LCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDM3MjksICJNU0kgUzQyMCIsIEFMQzg4M19UQVJHQV9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDNlZjksICJNU0kiLCBBTEM4ODNfVEFSR0FfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgzYjdmLCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDNmY2MsICJNU0kiLCBBTEM4ODNfVEFSR0FfRElHKSwKQEAgLTU2MDYsOSArNjM5MywxNCBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDQzMjQsICJNU0kiLCBBTEM4ODNfVEFSR0FfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHhhNDIyLCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAwLCAiQWNlciBsYXB0b3AiLCBBTEM4ODNfQUNFUiksCisJU05EX1BDSV9RVUlSSygweDE1ZDksIDB4ODc4MCwgIlN1cGVybWljcm8gUERTQkEiLCBBTEM4ODNfM1NUXzZjaCksCiAJU05EX1BDSV9RVUlSSygweDE2MWYsIDB4MjA1NCwgIk1lZGlvbiBsYXB0b3AiLCBBTEM4ODNfTUVESU9OKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA3MSwgMHg4MjU4LCAiRXZlc2hhbSBWb3lhZWdlciIsIEFMQzg4M19MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4ZDYwMSwgIkQxMDJHR0MiLCBBTEM4ODNfM1NUXzZjaCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MTAxZSwgIkxlbm92byAxMDFlIiwgQUxDODgzX0xFTk9WT18xMDFFXzJjaCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2JmZCwgIkxlbm92byBOQjA3NjMiLCBBTEM4ODNfTEVOT1ZPX05CMDc2MyksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjA4NSwgIkxlbm92byBOQjA3NjMiLCBBTEM4ODNfTEVOT1ZPX05CMDc2MyksCisJU05EX1BDSV9RVUlSSygweDE3YzAsIDB4NDA3MSwgIk1FRElPTiBNRDIiLCBBTEM4ODNfTUVESU9OX01EMiksCiAJe30KIH07CiAKQEAgLTU2MzksNyArNjQzMSw3IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzZjaF9tb2RlcywKIAkJLm5lZWRfZGFjX2ZpeCA9IDEsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAotCX0sCQorCX0sCiAJW0FMQzg4M18zU1RfNmNoXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzXzNTVF82Y2hfbWl4ZXIsIGFsYzg4M19jaG1vZGVfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4M19pbml0X3ZlcmJzIH0sCkBAIC01NjUxLDcgKzY0NDMsNyBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF82Y2hfbW9kZXMsCiAJCS5uZWVkX2RhY19maXggPSAxLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKLQl9LAkKKwl9LAogCVtBTEM4ODNfNlNUX0RJR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M19iYXNlX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODNfaW5pdF92ZXJicyB9LApAQCAtNTY5NCwxOSArNjQ4Niw2IEBACiAJCS51bnNvbF9ldmVudCA9IGFsYzg4M190YWdyYV91bnNvbF9ldmVudCwKIAkJLmluaXRfaG9vayA9IGFsYzg4M190YWdyYV9hdXRvbXV0ZSwKIAl9LAotCVtBTEM4ODhfREVNT19CT0FSRF0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4M19iYXNlX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM4ODNfaW5pdF92ZXJicyB9LAotCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4M19kYWNfbmlkcyksCi0JCS5kYWNfbmlkcyA9IGFsYzg4M19kYWNfbmlkcywKLQkJLmRpZ19vdXRfbmlkID0gQUxDODgzX0RJR09VVF9OSUQsCi0JCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkcyksCi0JCS5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkcywKLQkJLmRpZ19pbl9uaWQgPSBBTEM4ODNfRElHSU5fTklELAotCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzX3NpeHN0YWNrX21vZGVzKSwKLQkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M19zaXhzdGFja19tb2RlcywKLQkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCi0JfSwKIAlbQUxDODgzX0FDRVJdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfYmFzZV9taXhlciwKIAkJCSAgICBhbGM4ODNfY2htb2RlX21peGVyIH0sCkBAIC01NzM3LDYgKzY1MTYsMjAgQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M19zaXhzdGFja19tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCiAJfSwKKwlbQUxDODgzX01FRElPTl9NRDJdID0geworCQkubWl4ZXJzID0geyBhbGM4ODNfbWVkaW9uX21kMl9taXhlcn0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODNfaW5pdF92ZXJicywgYWxjODgzX21lZGlvbl9tZDJfdmVyYnN9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4M19kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzg4M19kYWNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDODgzX0RJR09VVF9OSUQsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkcyksCisJCS5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M18zU1RfMmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M18zU1RfMmNoX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjODgzX21lZGlvbl9tZDJfdW5zb2xfZXZlbnQsCisJCS5pbml0X2hvb2sgPSBhbGM4ODNfbWVkaW9uX21kMl9hdXRvbXV0ZSwKKwl9LAkKIAlbQUxDODgzX0xBUFRPUF9FQVBEXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzX2Jhc2VfbWl4ZXIsCiAJCQkgICAgYWxjODgzX2NobW9kZV9taXhlciB9LApAQCAtNTc0OSw2ICs2NTQyLDQ4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCiAJfSwKKwlbQUxDODgzX0xFTk9WT18xMDFFXzJjaF0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzg4M19sZW5vdm9fMTAxZV8yY2hfbWl4ZXJ9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMsIGFsYzg4M19sZW5vdm9fMTAxZV92ZXJic30sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgzX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzJjaF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKKwkJLmlucHV0X211eCA9ICZhbGM4ODNfbGVub3ZvXzEwMWVfY2FwdHVyZV9zb3VyY2UsCisJCS51bnNvbF9ldmVudCA9IGFsYzg4M19sZW5vdm9fMTAxZV91bnNvbF9ldmVudCwKKwkJLmluaXRfaG9vayA9IGFsYzg4M19sZW5vdm9fMTAxZV9hbGxfYXV0b211dGUsCisJfSwKKwlbQUxDODgzX0xFTk9WT19OQjA3NjNdID0geworCQkubWl4ZXJzID0geyBhbGM4ODNfbGVub3ZvX25iMDc2M19taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMsIGFsYzg4M19sZW5vdm9fbmIwNzYzX3ZlcmJzfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkcyksCisJCS5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M18zU1RfMmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M18zU1RfMmNoX21vZGVzLAorCQkubmVlZF9kYWNfZml4ID0gMSwKKwkJLmlucHV0X211eCA9ICZhbGM4ODNfbGVub3ZvX25iMDc2M19jYXB0dXJlX3NvdXJjZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjODgzX21lZGlvbl9tZDJfdW5zb2xfZXZlbnQsCisJCS5pbml0X2hvb2sgPSBhbGM4ODNfbWVkaW9uX21kMl9hdXRvbXV0ZSwKKwl9LAorCVtBTEM4ODhfTEVOT1ZPX01TNzE5NV9ESUddID0geworCQkubWl4ZXJzID0geyBhbGM4ODNfM1NUXzZjaF9taXhlciwgYWxjODgzX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMsIGFsYzg4OF9sZW5vdm9fbXM3MTk1X3ZlcmJzfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzg4M19ESUdPVVRfTklELAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzZjaF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzZjaF9tb2RlcywKKwkJLm5lZWRfZGFjX2ZpeCA9IDEsCisJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGM4ODNfbGVub3ZvX21zNzE5NV91bnNvbF9ldmVudCwKKwkJLmluaXRfaG9vayA9IGFsYzg4OF9sZW5vdm9fbXM3MTk1X2Zyb250X2F1dG9tdXRlLAorCX0sCQogfTsKIAogCkBAIC01NzYxLDggKzY1OTYsOCBAQAogewogCS8qIHNldCBhcyBvdXRwdXQgKi8KIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaWR4OyAKLQkKKwlpbnQgaWR4OworCiAJaWYgKHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2RhY19pZHhdID09IDB4MjUpCiAJCWlkeCA9IDQ7CiAJZWxzZQpAQCAtNTc4MSwxMCArNjYxNiwxMyBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBpOwogCisJYWxjX3N1YnN5c3RlbV9pZChjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCk7CiAJZm9yIChpID0gMDsgaSA8PSBIREFfU0lERTsgaSsrKSB7Ci0JCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbaV07CQorCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zW2ldOworCQlpbnQgcGluX3R5cGUgPSBnZXRfcGluX3R5cGUoc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlKTsKIAkJaWYgKG5pZCkKLQkJCWFsYzg4M19hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgbmlkLCBQSU5fT1VULCBpKTsKKwkJCWFsYzg4M19hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgbmlkLCBwaW5fdHlwZSwKKwkJCQkJCQkgIGkpOwogCX0KIH0KIApAQCAtNTgzMyw4ICs2NjcxLDggQEAKIAllbHNlIGlmIChlcnIgPiAwKQogCQkvKiBoYWNrIC0gb3ZlcnJpZGUgdGhlIGluaXQgdmVyYnMgKi8KIAkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGFsYzg4M19hdXRvX2luaXRfdmVyYnM7Ci0gICAgICAgICAgICAgICAgc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnNdID0gYWxjODgzX2NhcHR1cmVfbWl4ZXI7Ci0JCXNwZWMtPm51bV9taXhlcnMrKzsKKwlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVyc10gPSBhbGM4ODNfY2FwdHVyZV9taXhlcjsKKwlzcGVjLT5udW1fbWl4ZXJzKys7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNTg3Miw3ICs2NzEwLDcgQEAKIAkJaWYgKGVyciA8IDApIHsKIAkJCWFsY19mcmVlKGNvZGVjKTsKIAkJCXJldHVybiBlcnI7Ci0JCX0gZWxzZSBpZiAoISBlcnIpIHsKKwkJfSBlbHNlIGlmICghZXJyKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgImhkYV9jb2RlYzogQ2Fubm90IHNldCB1cCBjb25maWd1cmF0aW9uICIKIAkJCSAgICAgICAiZnJvbSBCSU9TLiAgVXNpbmcgYmFzZSBtb2RlLi4uXG4iKTsKQEAgLTU4OTEsNyArNjcyOSw3IEBACiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjODgzX3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjODgzX3BjbV9kaWdpdGFsX2NhcHR1cmU7CiAKLQlpZiAoISBzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKKwlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewogCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkczsKIAkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHMpOwogCX0KQEAgLTYwMDksNiArNjg0NywxOCBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfc29ueV9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJBVEFQSSBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQVRBUEkgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworCisKICNkZWZpbmUgYWxjMjYyX2NhcHR1cmVfbWl4ZXIJCWFsYzg4Ml9jYXB0dXJlX21peGVyCiAjZGVmaW5lIGFsYzI2Ml9jYXB0dXJlX2FsdF9taXhlcglhbGM4ODJfY2FwdHVyZV9hbHRfbWl4ZXIKIApAQCAtNjAyOCw4ICs2ODc4LDggQEAKIAogCS8qIFVubXV0ZSBpbnB1dCBhbXBzIChDRCwgTGluZSBJbiwgTWljIDEgJiBNaWMgMikgb2YgdGhlIGFuYWxvZy1sb29wYmFjawogCSAqIG1peGVyIHdpZGdldAotCSAqIE5vdGU6IFBBU0QgbW90aGVyYm9hcmRzIHVzZXMgdGhlIExpbmUgSW4gMiBhcyB0aGUgaW5wdXQgZm9yIGZyb250IHBhbmVsCi0JICogbWljIChtaWMgMikKKwkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvcgorCSAqIGZyb250IHBhbmVsIG1pYyAobWljIDIpCiAJICovCiAJLyogQW1wIEluZGljZXM6IE1pYzEgPSAwLCBNaWMyID0gMSwgTGluZTEgPSAyLCBMaW5lMiA9IDMsIENEID0gNCAqLwogCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTYwODYsNyArNjkzNiw3IEBACiAJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMDAgfCAoMHgwMCA8PCA4KSl9LAogCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDMgPDwgOCkpfSwKIAl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDAyIDw8IDgpKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwNCA8PCA4KSl9LAkKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDA0IDw8IDgpKX0sCiAKIAl7IH0KIH07CkBAIC02MTA3LDEzICs2OTU3LDIyIEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX3NvbnlfdW5zb2xfdmVyYnNbXSA9IHsKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweGMwfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjR9LAkvLyBGcm9udCBNaWMKKworCXsweDE1LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorfTsKKwogLyogbXV0ZS91bm11dGUgaW50ZXJuYWwgc3BlYWtlciBhY2NvcmRpbmcgdG8gdGhlIGhwIGphY2sgYW5kIG11dGUgc3RhdGUgKi8KIHN0YXRpYyB2b2lkIGFsYzI2Ml9oaXBwb19hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IGZvcmNlKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBtdXRlOwogCi0JaWYgKGZvcmNlIHx8ICEgc3BlYy0+c2Vuc2VfdXBkYXRlZCkgeworCWlmIChmb3JjZSB8fCAhc3BlYy0+c2Vuc2VfdXBkYXRlZCkgewogCQl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAkJLyogbmVlZCB0byBleGVjdXRlIGFuZCBzeW5jIGF0IGZpcnN0ICovCiAJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxNSwgMCwgQUNfVkVSQl9TRVRfUElOX1NFTlNFLCAwKTsKQEAgLTYxNTMsNyArNzAxMiw3IEBACiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IG11dGU7CiAKLQlpZiAoZm9yY2UgfHwgISBzcGVjLT5zZW5zZV91cGRhdGVkKSB7CisJaWYgKGZvcmNlIHx8ICFzcGVjLT5zZW5zZV91cGRhdGVkKSB7CiAJCXVuc2lnbmVkIGludCBwcmVzZW50OwogCQkvKiBuZWVkIHRvIGV4ZWN1dGUgYW5kIHN5bmMgYXQgZmlyc3QgKi8KIAkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLCBBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOwpAQCAtNjIyNiw3ICs3MDg1LDcgQEAKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAl1bnNpZ25lZCBpbnQgbXV0ZTsKIAotCWlmIChmb3JjZSB8fCAhIHNwZWMtPnNlbnNlX3VwZGF0ZWQpIHsKKwlpZiAoZm9yY2UgfHwgIXNwZWMtPnNlbnNlX3VwZGF0ZWQpIHsKIAkJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAJCS8qIG5lZWQgdG8gZXhlY3V0ZSBhbmQgc3luYyBhdCBmaXJzdCAqLwogCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9TRU5TRSwgMCk7CkBAIC02MzMxLDcgKzcxOTAsOCBAQAogfTsKIAogLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KLXN0YXRpYyBpbnQgYWxjMjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQorc3RhdGljIGludCBhbGMyNjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKIAloZGFfbmlkX3QgbmlkOwogCWludCBlcnI7CkBAIC02MzQyLDI2ICs3MjAyLDM5IEBACiAKIAluaWQgPSBjZmctPmxpbmVfb3V0X3BpbnNbMF07CiAJaWYgKG5pZCkgewotCQlpZiAoKGVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgIkZyb250IFBsYXliYWNrIFZvbHVtZSIsCi0JCQkJICAgICAgIEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwYywgMywgMCwgSERBX09VVFBVVCkpKSA8IDApCisJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKKwkJCQkgICJGcm9udCBQbGF5YmFjayBWb2x1bWUiLAorCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTCgweDBjLCAzLCAwLCBIREFfT1VUUFVUKSk7CisJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCAiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkgICAgICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIEhEQV9PVVRQVVQpKSkgPCAwKQorCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAorCQkJCSAgIkZyb250IFBsYXliYWNrIFN3aXRjaCIsCisJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgSERBX09VVFBVVCkpOworCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQogCiAJbmlkID0gY2ZnLT5zcGVha2VyX3BpbnNbMF07CiAJaWYgKG5pZCkgewogCQlpZiAobmlkID09IDB4MTYpIHsKLQkJCWlmICgoZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCAiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAotCQkJCQkgICAgICAgSERBX0NPTVBPU0VfQU1QX1ZBTCgweDBlLCAyLCAwLCBIREFfT1VUUFVUKSkpIDwgMCkKKwkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKKwkJCQkJICAiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwZSwgMiwgMCwKKwkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCAiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLAotCQkJCQkgICAgICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDIsIDAsIEhEQV9PVVRQVVQpKSkgPCAwKQorCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwKKwkJCQkJICAiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAyLCAwLAorCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKKwkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoKGVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsICJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCi0JCQkJCSAgICAgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgSERBX09VVFBVVCkpKSA8IDApCisJCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAorCQkJCQkgICJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCisJCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsCisJCQkJCQkJICAgICAgSERBX09VVFBVVCkpOworCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KQEAgLTYzNjksMjMgKzcyNDIsMzMgQEAKIAlpZiAobmlkKSB7CiAJCS8qIHNwZWMtPm11bHRpb3V0LmhwX25pZCA9IDI7ICovCiAJCWlmIChuaWQgPT0gMHgxNikgewotCQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsICJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKLQkJCQkJICAgICAgIEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwZSwgMiwgMCwgSERBX09VVFBVVCkpKSA8IDApCisJCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsCisJCQkJCSAgIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwZSwgMiwgMCwKKwkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCAiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCi0JCQkJCSAgICAgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMiwgMCwgSERBX09VVFBVVCkpKSA8IDApCisJCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAorCQkJCQkgICJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKKwkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMiwgMCwKKwkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgewotCQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCAiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCi0JCQkJCSAgICAgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgSERBX09VVFBVVCkpKSA8IDApCisJCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAorCQkJCQkgICJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKKwkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKKwkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQotCXJldHVybiAwOwkKKwlyZXR1cm4gMDsKIH0KIAogLyogaWRlbnRpY2FsIHdpdGggQUxDODgwICovCi0jZGVmaW5lIGFsYzI2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyBhbGM4ODBfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMKKyNkZWZpbmUgYWxjMjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzIFwKKwlhbGM4ODBfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMKIAogLyoKICAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKQEAgLTY0MDMsOCArNzI4Niw4IEBACiAKIAkvKiBVbm11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKIAkgKiBtaXhlciB3aWRnZXQKLQkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvciBmcm9udCBwYW5lbAotCSAqIG1pYyAobWljIDIpCisJICogTm90ZTogUEFTRCBtb3RoZXJib2FyZHMgdXNlcyB0aGUgTGluZSBJbiAyIGFzIHRoZSBpbnB1dCBmb3IKKwkgKiBmcm9udCBwYW5lbCBtaWMgKG1pYyAyKQogCSAqLwogCS8qIEFtcCBJbmRpY2VzOiBNaWMxID0gMCwgTWljMiA9IDEsIExpbmUxID0gMiwgTGluZTIgPSAzLCBDRCA9IDQgKi8KIAl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC02NDY0LDggKzczNDcsOCBAQAogCiAJLyogVW5tdXRlIGlucHV0IGFtcHMgKENELCBMaW5lIEluLCBNaWMgMSAmIE1pYyAyKSBvZiB0aGUgYW5hbG9nLWxvb3BiYWNrCiAJICogbWl4ZXIgd2lkZ2V0Ci0JICogTm90ZTogUEFTRCBtb3RoZXJib2FyZHMgdXNlcyB0aGUgTGluZSBJbiAyIGFzIHRoZSBpbnB1dCBmb3IgZnJvbnQgcGFuZWwKLQkgKiBtaWMgKG1pYyAyKQorCSAqIE5vdGU6IFBBU0QgbW90aGVyYm9hcmRzIHVzZXMgdGhlIExpbmUgSW4gMiBhcyB0aGUgaW5wdXQgZm9yCisJICogZnJvbnQgcGFuZWwgbWljIChtaWMgMikKIAkgKi8KIAkvKiBBbXAgSW5kaWNlczogTWljMSA9IDAsIE1pYzIgPSAxLCBMaW5lMSA9IDIsIExpbmUyID0gMywgQ0QgPSA0ICovCiAJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LApAQCAtNjY0NywxMyArNzUzMCwxNyBAQAogCWludCBlcnI7CiAJc3RhdGljIGhkYV9uaWRfdCBhbGMyNjJfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKIAotCWlmICgoZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCi0JCQkJCQlhbGMyNjJfaWdub3JlKSkgPCAwKQorCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLAorCQkJCQkgICBhbGMyNjJfaWdub3JlKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoISBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKKwlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBCSU9TIHBpbiBjb25maWcgKi8KLQlpZiAoKGVyciA9IGFsYzI2Ml9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZykpIDwgMCB8fAotCSAgICAoZXJyID0gYWxjMjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKSkgPCAwKQorCWVyciA9IGFsYzI2Ml9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gYWxjMjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKQEAgLTY2OTcsNiArNzU4NCw3IEBACiAJW0FMQzI2Ml9IUF9CUENdCQk9ICJocC1icGMiLAogCVtBTEMyNjJfSFBfQlBDX0Q3MDAwX1dMXT0gImhwLWJwYy1kNzAwMCIsCiAJW0FMQzI2Ml9CRU5RX0VEOF0JPSAiYmVucSIsCisJW0FMQzI2Ml9CRU5RX0VEOF0JPSAic29ueS1hc3NhbWQiLAogCVtBTEMyNjJfQVVUT10JCT0gImF1dG8iLAogfTsKIApAQCAtNjcxOCw2ICs3NjA2LDkgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxMzk3LCAiRnVqaXRzdSIsIEFMQzI2Ml9GVUpJVFNVKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdmZiwgMHgwNThmLCAiQmVucSBIaXBwbyIsIEFMQzI2Ml9ISVBQT18xKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdmZiwgMHgwNTYwLCAiQmVucSBFRDgiLCBBTEMyNjJfQkVOUV9FRDgpLAorCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMTUsICJTb255IDB4OTAxNSIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCisJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAwZSwgIlNvbnkgQVNTQU1EIiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHgxZjAwLCAiU29ueSBBU1NBTUQiLCBBTEMyNjJfU09OWV9BU1NBTUQpLAogCXt9CiB9OwogCkBAIC02Nzc3LDcgKzc2NjgsNyBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjJfSFBfY2FwdHVyZV9zb3VyY2UsCi0JfSwJCisJfSwKIAlbQUxDMjYyX0hQX0JQQ19ENzAwMF9XRl0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2Ml9IUF9CUENfV2lsZFdlc3RfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2Ml9IUF9CUENfV2lsZFdlc3RfaW5pdF92ZXJicyB9LApAQCAtNjc4Nyw3ICs3Njc4LDcgQEAKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2Ml9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjMjYyX0hQX2NhcHR1cmVfc291cmNlLAotCX0sCQorCX0sCiAJW0FMQzI2Ml9IUF9CUENfRDcwMDBfV0xdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjJfSFBfQlBDX1dpbGRXZXN0X21peGVyLAogCQkJICAgIGFsYzI2Ml9IUF9CUENfV2lsZFdlc3Rfb3B0aW9uX21peGVyIH0sCkBAIC02Nzk4LDcgKzc2ODksNyBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjJfSFBfY2FwdHVyZV9zb3VyY2UsCi0JfSwJCisJfSwKIAlbQUxDMjYyX0JFTlFfRUQ4XSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYyX2Jhc2VfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2Ml9pbml0X3ZlcmJzLCBhbGMyNjJfRUFQRF92ZXJicyB9LApAQCAtNjgwOCw3ICs3Njk5LDE4IEBACiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjJfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYyX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzI2Ml9jYXB0dXJlX3NvdXJjZSwKLQl9LAkJCisJfSwKKwlbQUxDMjYyX1NPTllfQVNTQU1EXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjYyX3NvbnlfbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzI2Ml9pbml0X3ZlcmJzLCBhbGMyNjJfc29ueV91bnNvbF92ZXJic30sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjMjYyX2RhY19uaWRzLAorCQkuaHBfbmlkID0gMHgwMiwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2Ml9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfaGlwcG9fdW5zb2xfZXZlbnQsCisJfSwJCiB9OwogCiBzdGF0aWMgaW50IHBhdGNoX2FsYzI2MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTY4MjMsNyArNzcyNSw5IEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAjaWYgMAotCS8qIHBzaG91IDA3LzExLzA1ICBzZXQgYSB6ZXJvIFBDTSBzYW1wbGUgdG8gREFDIHdoZW4gRklGTyBpcyB1bmRlci1ydW4gKi8KKwkvKiBwc2hvdSAwNy8xMS8wNSAgc2V0IGEgemVybyBQQ00gc2FtcGxlIHRvIERBQyB3aGVuIEZJRk8gaXMKKwkgKiB1bmRlci1ydW4KKwkgKi8KIAl7CiAJaW50IHRtcDsKIAlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFhLCAwLCBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCA3KTsKQEAgLTY4NDksNyArNzc1Myw3IEBACiAJCWlmIChlcnIgPCAwKSB7CiAJCQlhbGNfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gZXJyOwotCQl9IGVsc2UgaWYgKCEgZXJyKSB7CisJCX0gZWxzZSBpZiAoIWVycikgewogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAgICJoZGFfY29kZWM6IENhbm5vdCBzZXQgdXAgY29uZmlndXJhdGlvbiAiCiAJCQkgICAgICAgImZyb20gQklPUy4gIFVzaW5nIGJhc2UgbW9kZS4uLlxuIik7CkBAIC02ODY4LDE1ICs3NzcyLDE3IEBACiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjMjYyX3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjMjYyX3BjbV9kaWdpdGFsX2NhcHR1cmU7CiAKLQlpZiAoISBzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKKwlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewogCQkvKiBjaGVjayB3aGV0aGVyIE5JRCAweDA3IGlzIHZhbGlkICovCiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKIAotCQl3Y2FwID0gKHdjYXAgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsgLyogZ2V0IHR5cGUgKi8KKwkJLyogZ2V0IHR5cGUgKi8KKwkJd2NhcCA9ICh3Y2FwICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7CiAJCWlmICh3Y2FwICE9IEFDX1dJRF9BVURfSU4pIHsKIAkJCXNwZWMtPmFkY19uaWRzID0gYWxjMjYyX2FkY19uaWRzX2FsdDsKIAkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjYyX2FkY19uaWRzX2FsdCk7Ci0JCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVyc10gPSBhbGMyNjJfY2FwdHVyZV9hbHRfbWl4ZXI7CisJCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVyc10gPQorCQkJCWFsYzI2Ml9jYXB0dXJlX2FsdF9taXhlcjsKIAkJCXNwZWMtPm51bV9taXhlcnMrKzsKIAkJfSBlbHNlIHsKIAkJCXNwZWMtPmFkY19uaWRzID0gYWxjMjYyX2FkY19uaWRzOwpAQCAtNjkwNCw3ICs3ODEwLDkgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxX3RocmVlc3RhY2tfY2gyX2luaXRbXSA9IHsKIAkvKiBzZXQgcGluIHdpZGdldCAxQWggKGxpbmUgaW4pIGZvciBpbnB1dCAqLwogCXsgMHgwYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDIwIH0sCi0JLyogc2V0IHBpbiB3aWRnZXQgMThoIChtaWMxLzIpIGZvciBpbnB1dCwgZm9yIG1pYyBhbHNvIGVuYWJsZSB0aGUgdnJlZiAqLworCS8qIHNldCBwaW4gd2lkZ2V0IDE4aCAobWljMS8yKSBmb3IgaW5wdXQsIGZvciBtaWMgYWxzbyBlbmFibGUKKwkgKiB0aGUgdnJlZgorCSAqLwogCXsgMHgwZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0IH0sCiAKIAl7IDB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwYyB9LApAQCAtNjk2MSw3ICs3ODY5LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxX2FzdXNfY2gyX2luaXRbXSA9IHsKIAkvKiBzZXQgcGluIHdpZGdldCAxQWggKGxpbmUgaW4pIGZvciBpbnB1dCAqLwogCXsgMHgwYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDIwIH0sCi0JLyogc2V0IHBpbiB3aWRnZXQgMThoIChtaWMxLzIpIGZvciBpbnB1dCwgZm9yIG1pYyBhbHNvIGVuYWJsZSB0aGUgdnJlZiAqLworCS8qIHNldCBwaW4gd2lkZ2V0IDE4aCAobWljMS8yKSBmb3IgaW5wdXQsIGZvciBtaWMgYWxzbyBlbmFibGUKKwkgKiB0aGUgdnJlZgorCSAqLwogCXsgMHgwZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0IH0sCiAKIAl7IDB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwYyB9LApAQCAtNzAxNiw3ICs3OTI2LDcgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAxLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWEsIDB4MDMsIEhEQV9JTlBVVCksCi0gCisKICAgICAgICAgLyogQ2FwdHVyZSBtaXhlciBjb250cm9sICovCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLApAQCAtNzA1MCw3ICs3OTYwLDcgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAxLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWEsIDB4MDMsIEhEQV9JTlBVVCksCi0gCisKIAkvKiBDYXB0dXJlIG1peGVyIGNvbnRyb2wgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCkBAIC03MDkyLDcgKzgwMDIsNyBAQAogCX0sCiAKIAl7IH0gLyogZW5kICovCi19OwkKK307CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4NjFfdW5pd2lsbF9tMzFfbWl4ZXJbXSA9IHsKICAgICAgICAgLyogb3V0cHV0IG1peGVyIGNvbnRyb2wgKi8KQEAgLTcxMTMsNyArODAyMyw3IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwMSwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDFhLCAweDAzLCBIREFfSU5QVVQpLAotIAorCiAJLyogQ2FwdHVyZSBtaXhlciBjb250cm9sICovCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLApAQCAtNzEzNCw3ICs4MDQ0LDcgQEAKICAgICAgICAgICAgICAgICAucHJpdmF0ZV92YWx1ZSA9IEFSUkFZX1NJWkUoYWxjODYxX3VuaXdpbGxfbTMxX21vZGVzKSwKIAl9LAogCXsgfSAvKiBlbmQgKi8KLX07CQkJCit9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxX2FzdXNfbWl4ZXJbXSA9IHsKICAgICAgICAgLyogb3V0cHV0IG1peGVyIGNvbnRyb2wgKi8KQEAgLTcxNTQsOCArODA2NCw4IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTUsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwMSwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDFhLCAweDAzLCBIREFfT1VUUFVUKSwgLyogd2FzIEhEQV9JTlBVVCAod2h5PykgKi8KLSAKKwlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWEsIDB4MDMsIEhEQV9PVVRQVVQpLAorCiAJLyogQ2FwdHVyZSBtaXhlciBjb250cm9sICovCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLApAQCAtNzIzOSw3ICs4MTQ5LDcgQEAKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDBjICAgICAgICAgIH0sIC8vT3V0cHV0IDB+MTIgc3RlcAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMGN9LCAvKiBPdXRwdXQgMH4xMiBzdGVwICovCiAKIAl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LApAQCAtNzI0OSw3ICs4MTU5LDggQEAKIAl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgzKX0sIC8vIGhwIHVzZWQgREFDIDMgKEZyb250KQorCS8qIGhwIHVzZWQgREFDIDMgKEZyb250KSAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDMpfSwKICAgICAgICAgezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAogCiAJeyB9CkBAIC03MzAwLDcgKzgyMTEsNyBAQAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMGMgICAgICAgICAgfSwgLy9PdXRwdXQgMH4xMiBzdGVwCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwY30sIC8qIE91dHB1dCAwfjEyIHN0ZXAgKi8KIAogCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCkBAIC03MzEwLDcgKzgyMjEsOCBAQAogCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDMpfSwgLy8gaHAgdXNlZCBEQUMgMyAoRnJvbnQpCisJLyogaHAgdXNlZCBEQUMgMyAoRnJvbnQpICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LAogICAgICAgICB7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCiAJeyB9CiB9OwpAQCAtNzMyOSw3ICs4MjQxLDggQEAKIAl7IDB4MGIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHg0MCB9LAogCXsgMHgwYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDAgfSwKIAkvKiBwb3J0LUUgZm9yIEhQIG91dCAoZnJvbnQgcGFuZWwpICovCi0JeyAweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjQgfSwgLy8gdGhpcyBoYXMgdG8gYmUgc2V0IHRvIFZSRUY4MAorCS8qIHRoaXMgaGFzIHRvIGJlIHNldCB0byBWUkVGODAgKi8KKwl7IDB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyNCB9LAogCS8qIHJvdXRlIGZyb250IFBDTSB0byBIUCAqLwogCXsgMHgwZiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDAgfSwKIAkvKiBwb3J0LUYgZm9yIG1pYy1pbiAoZnJvbnQgcGFuZWwpIHdpdGggdnJlZiAqLwpAQCAtNzM2MCw3ICs4MjczLDcgQEAKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDBjICAgICAgICAgIH0sIC8vT3V0cHV0IDB+MTIgc3RlcAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMGN9LCAvKiBPdXRwdXQgMH4xMiBzdGVwICovCiAKIAl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LApAQCAtNzM3MCw3ICs4MjgzLDggQEAKIAl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgzKX0sIC8vIGhwIHVzZWQgREFDIDMgKEZyb250KQorCS8qIGhwIHVzZWQgREFDIDMgKEZyb250KSAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDMpfSwKICAgICAgICAgezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAogCXsgfQogfTsKQEAgLTczNzksNyArODI5Myw5IEBACiAJLyoKIAkgKiBVbm11dGUgQURDMCBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgogCSAqLwotCS8qIHBvcnQtQSBmb3Igc3Vycm91bmQgKHJlYXIgcGFuZWwpIHwgYWNjb3JkaW5nIHRvIGNvZGVjIzAgdGhpcyBpcyB0aGUgSFAgamFjayovCisJLyogcG9ydC1BIGZvciBzdXJyb3VuZCAocmVhciBwYW5lbCkKKwkgKiBhY2NvcmRpbmcgdG8gY29kZWMjMCB0aGlzIGlzIHRoZSBIUCBqYWNrCisJICovCiAJeyAweDBlLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4YzAgfSwgLyogd2FzIDB4MDAgKi8KIAkvKiByb3V0ZSBmcm9udCBQQ00gdG8gSFAgKi8KIAl7IDB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCkBAIC03MzkxLDcgKzgzMDcsOCBAQAogCXsgMHgwYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDQwIH0sCiAJeyAweDBiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMCB9LAogCS8qIHBvcnQtRSBmb3IgSFAgb3V0IChmcm9udCBwYW5lbCkgKi8KLQl7IDB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyNCB9LCAvKiB0aGlzIGhhcyB0byBiZSBzZXQgdG8gVlJFRjgwICovCisJLyogdGhpcyBoYXMgdG8gYmUgc2V0IHRvIFZSRUY4MCAqLworCXsgMHgwZiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0IH0sCiAJLyogcm91dGUgZnJvbnQgUENNIHRvIEhQICovCiAJeyAweDBmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMCB9LAogCS8qIHBvcnQtRiBmb3IgbWljLWluIChmcm9udCBwYW5lbCkgd2l0aCB2cmVmICovCkBAIC03NDIxLDcgKzgzMzgsNyBAQAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMGMgICAgICAgICAgfSwgLyogT3V0cHV0IDB+MTIgc3RlcCAqLworCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMGN9LCAvKiBPdXRwdXQgMH4xMiBzdGVwICovCiAKIAl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LApAQCAtNzQzMSw3ICs4MzQ4LDggQEAKIAl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgzKX0sIC8qIGhwIHVzZWQgREFDIDMgKEZyb250KSAqLworCS8qIGhwIHVzZWQgREFDIDMgKEZyb250KSAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDMpfSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCiAJeyB9CiB9OwpAQCAtNzQ1MCw3ICs4MzY4LDcgQEAKIAkvKgogCSAqIFVubXV0ZSBBREMwIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCi0vLwl7MHgwOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIHsweDA4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sICovCiAJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCQogCS8qIFVubXV0ZSBEQUMwfjMgJiBzcGRpZiBvdXQqLwpAQCAtNzQ4MywyMSArODQwMSwyMSBAQAogCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwJCi0JezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LAkJCisJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDMpfSwKIAl7MHgxYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAkKLQl7MHgxYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgzKX0sCQorCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgzKX0sCiAKLQl7MHgwOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAkvLyBzZXQgTWljIDEKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAkvKiBzZXQgTWljIDEgKi8KIAogCXsgfQogfTsKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfdG9zaGliYV9pbml0X3ZlcmJzW10gPSB7CiAJezB4MGYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAotICAgICAgICAKKwogCXsgfQogfTsKIApAQCAtNzUyMSw5ICs4NDM5LDYgQEAKIHN0YXRpYyB2b2lkIGFsYzg2MV90b3NoaWJhX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVzKQogewotCS8qIExvb2tzIGxpa2UgdGhlIHVuc29sIGV2ZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFuZGFyZAotCSAqIGRlZmluaXRpb24uICA2Yml0IHRhZyBpcyBwbGFjZWQgYXQgMjYgYml0IQotCSAqLwogCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfSFBfRVZFTlQpCiAJCWFsYzg2MV90b3NoaWJhX2F1dG9tdXRlKGNvZGVjKTsKIH0KQEAgLTc1NjgsNyArODQ4Myw4IEBACiB9OwogCiAvKiBmaWxsIGluIHRoZSBkYWNfbmlkcyB0YWJsZSBmcm9tIHRoZSBwYXJzZWQgcGluIGNvbmZpZ3VyYXRpb24gKi8KLXN0YXRpYyBpbnQgYWxjODYxX2F1dG9fZmlsbF9kYWNfbmlkcyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKK3N0YXRpYyBpbnQgYWxjODYxX2F1dG9fZmlsbF9kYWNfbmlkcyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7CiAJaW50IGk7CiAJaGRhX25pZF90IG5pZDsKQEAgLTc1OTEsMjkgKzg1MDcsNDAgQEAKIAkJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7CiAJY2hhciBuYW1lWzMyXTsKLQlzdGF0aWMgY29uc3QgY2hhciAqY2huYW1lWzRdID0geyAiRnJvbnQiLCAiU3Vycm91bmQiLCBOVUxMIC8qQ0xGRSovLCAiU2lkZSIgfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY2huYW1lWzRdID0geworCQkiRnJvbnQiLCAiU3Vycm91bmQiLCBOVUxMIC8qQ0xGRSovLCAiU2lkZSIKKwl9OwogCWhkYV9uaWRfdCBuaWQ7CiAJaW50IGksIGlkeCwgZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKIAkJbmlkID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV07Ci0JCWlmICghIG5pZCkKKwkJaWYgKCFuaWQpCiAJCQljb250aW51ZTsKIAkJaWYgKG5pZCA9PSAweDA1KSB7CiAJCQkvKiBDZW50ZXIvTEZFICovCi0JCQlpZiAoKGVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfQklORF9NVVRFLCAiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCQkJCSAgICAgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMSwgMCwgSERBX09VVFBVVCkpKSA8IDApCisJCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwKKwkJCQkJICAiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDEsIDAsCisJCQkJCQkJICAgICAgSERBX09VVFBVVCkpOworCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWlmICgoZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsICJMRkUgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJICAgICAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAyLCAwLCBIREFfT1VUUFVUKSkpIDwgMCkKKwkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfQklORF9NVVRFLAorCQkJCQkgICJMRkUgUGxheWJhY2sgU3dpdGNoIiwKKwkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMiwgMCwKKwkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgewotCQkJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKGFsYzg2MV9kYWNfbmlkcykgLSAxOyBpZHgrKykKKwkJCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShhbGM4NjFfZGFjX25pZHMpIC0gMTsKKwkJCSAgICAgaWR4KyspCiAJCQkJaWYgKG5pZCA9PSBhbGM4NjFfZGFjX25pZHNbaWR4XSkKIAkJCQkJYnJlYWs7CiAJCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBjaG5hbWVbaWR4XSk7Ci0JCQlpZiAoKGVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfQklORF9NVVRFLCBuYW1lLAotCQkJCQkgICAgICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIEhEQV9PVVRQVVQpKSkgPCAwKQorCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsIG5hbWUsCisJCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsCisJCQkJCQkJICAgICAgSERBX09VVFBVVCkpOworCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KQEAgLTc2MjUsMTMgKzg1NTIsMTUgQEAKIAlpbnQgZXJyOwogCWhkYV9uaWRfdCBuaWQ7CiAKLQlpZiAoISBwaW4pCisJaWYgKCFwaW4pCiAJCXJldHVybiAwOwogCiAJaWYgKChwaW4gPj0gMHgwYiAmJiBwaW4gPD0gMHgxMCkgfHwgcGluID09IDB4MWYgfHwgcGluID09IDB4MjApIHsKIAkJbmlkID0gMHgwMzsKLQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCAiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCi0JCQkJICAgICAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLCBIREFfT1VUUFVUKSkpIDwgMCkKKwkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwKKwkJCQkgICJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKKwkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLCBIREFfT1VUUFVUKSk7CisJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gbmlkOwogCX0KQEAgLTc2MzksMzIgKzg1NjgsMzMgQEAKIH0KIAogLyogY3JlYXRlIHBsYXliYWNrL2NhcHR1cmUgY29udHJvbHMgZm9yIGlucHV0IHBpbnMgKi8KLXN0YXRpYyBpbnQgYWxjODYxX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQorc3RhdGljIGludCBhbGM4NjFfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAorCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewogCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKIAlpbnQgaSwgZXJyLCBpZHgsIGlkeDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7Ci0JCXN3aXRjaChjZmctPmlucHV0X3BpbnNbaV0pIHsKKwkJc3dpdGNoIChjZmctPmlucHV0X3BpbnNbaV0pIHsKIAkJY2FzZSAweDBjOgogCQkJaWR4MSA9IDE7Ci0JCQlpZHggPSAyOwkvLyBMaW5lIEluCisJCQlpZHggPSAyOwkvKiBMaW5lIEluICovCiAJCQlicmVhazsKIAkJY2FzZSAweDBmOgogCQkJaWR4MSA9IDI7Ci0JCQlpZHggPSAyOwkvLyBMaW5lIEluCisJCQlpZHggPSAyOwkvKiBMaW5lIEluICovCiAJCQlicmVhazsKIAkJY2FzZSAweDBkOgogCQkJaWR4MSA9IDA7Ci0JCQlpZHggPSAxOwkvLyBNaWMgSW4gCisJCQlpZHggPSAxOwkvKiBNaWMgSW4gKi8KIAkJCWJyZWFrOwotCQljYXNlIDB4MTA6CQorCQljYXNlIDB4MTA6CiAJCQlpZHgxID0gMzsKLQkJCWlkeCA9IDE7CS8vIE1pYyBJbiAKKwkJCWlkeCA9IDE7CS8qIE1pYyBJbiAqLwogCQkJYnJlYWs7CiAJCWNhc2UgMHgxMToKIAkJCWlkeDEgPSA0OwotCQkJaWR4ID0gMDsJLy8gQ0QKKwkJCWlkeCA9IDA7CS8qIENEICovCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWNvbnRpbnVlOwpAQCAtNzY3Nyw3ICs4NjA3LDcgQEAKIAogCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0gYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKIAkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9IGlkeDE7Ci0JCWltdXgtPm51bV9pdGVtcysrOwkKKwkJaW11eC0+bnVtX2l0ZW1zKys7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzcwMiwxMyArODYzMiwxNiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyB2b2lkIGFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKK3N0YXRpYyB2b2lkIGFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgICAgaGRhX25pZF90IG5pZCwKIAkJCQkJICAgICAgaW50IHBpbl90eXBlLCBpbnQgZGFjX2lkeCkKIHsKIAkvKiBzZXQgYXMgb3V0cHV0ICovCiAKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgcGluX3R5cGUpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGRhY19pZHgsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCSAgICBwaW5fdHlwZSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgZGFjX2lkeCwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCSAgICBBTVBfT1VUX1VOTVVURSk7CiAKIH0KIApAQCAtNzcxNywxMCArODY1MCwxMyBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBpOwogCisJYWxjX3N1YnN5c3RlbV9pZChjb2RlYywgMHgwZSwgMHgwZiwgMHgwYik7CiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcubGluZV9vdXRzOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1tpXTsKKwkJaW50IHBpbl90eXBlID0gZ2V0X3Bpbl90eXBlKHNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSk7CiAJCWlmIChuaWQpCi0JCQlhbGM4NjFfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIG5pZCwgUElOX09VVCwgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0pOworCQkJYWxjODYxX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIHBpbl90eXBlLAorCQkJCQkJCSAgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0pOwogCX0KIH0KIApAQCAtNzczMSw3ICs4NjY3LDggQEAKIAogCXBpbiA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKIAlpZiAocGluKSAvKiBjb25uZWN0IHRvIGZyb250ICovCi0JCWFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fSFAsIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdKTsKKwkJYWxjODYxX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCwKKwkJCQkJCSAgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0pOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4NjFfYXV0b19pbml0X2FuYWxvZ19pbnB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTc3NDEsMzEgKzg2NzgsNDMgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKLQkJaWYgKChuaWQ+PTB4MGMpICYmIChuaWQgPD0weDExKSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICBpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/IFBJTl9WUkVGODAgOiBQSU5fSU4pOworCQlpZiAobmlkID49IDB4MGMgJiYgbmlkIDw9IDB4MTEpIHsKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCQkJICAgIGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KKwkJCQkJICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pOwogCQl9CiAJfQogfQogCiAvKiBwYXJzZSB0aGUgQklPUyBjb25maWd1cmF0aW9uIGFuZCBzZXQgdXAgdGhlIGFsY19zcGVjICovCi0vKiByZXR1cm4gMSBpZiBzdWNjZXNzZnVsLCAwIGlmIHRoZSBwcm9wZXIgY29uZmlnIGlzIG5vdCBmb3VuZCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlICovCisvKiByZXR1cm4gMSBpZiBzdWNjZXNzZnVsLCAwIGlmIHRoZSBwcm9wZXIgY29uZmlnIGlzIG5vdCBmb3VuZCwKKyAqIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICovCiBzdGF0aWMgaW50IGFsYzg2MV9wYXJzZV9hdXRvX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgZXJyOwogCXN0YXRpYyBoZGFfbmlkX3QgYWxjODYxX2lnbm9yZVtdID0geyAweDFkLCAwIH07CiAKLQlpZiAoKGVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLAotCQkJCQkJYWxjODYxX2lnbm9yZSkpIDwgMCkKKwllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKKwkJCQkJICAgYWxjODYxX2lnbm9yZSk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKCEgc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCisJaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCiAKLQlpZiAoKGVyciA9IGFsYzg2MV9hdXRvX2ZpbGxfZGFjX25pZHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDAgfHwKLQkgICAgKGVyciA9IGFsYzg2MV9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZykpIDwgMCB8fAotCSAgICAoZXJyID0gYWxjODYxX2F1dG9fY3JlYXRlX2hwX2N0bHMoc3BlYywgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdKSkgPCAwIHx8Ci0JICAgIChlcnIgPSBhbGM4NjFfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDApCisJZXJyID0gYWxjODYxX2F1dG9fZmlsbF9kYWNfbmlkcyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gYWxjODYxX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBhbGM4NjFfYXV0b19jcmVhdGVfaHBfY3RscyhzcGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGFsYzg2MV9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CkBAIC03ODE3LDEyICs4NzY2LDEzIEBACiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTIwNSwgIkFTVVMgVzdKIiwgQUxDODYxXzNTVCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzNSwgIkFTVVMgRjIvMyIsIEFMQzg2MV9BU1VTX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOCwgIkFTVVMgRjIvMyIsIEFMQzg2MV9BU1VTX0xBUFRPUCksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNkNywgIkFTVVMgQTlycCIsIEFMQzg2MV9BU1VTX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTM5MywgIkFTVVMiLCBBTEM4NjFfQVNVUyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFlNywgIkFTVVMiLCBBTEM2NjBfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjAwLCAiVG9zaGliYSIsIEFMQzg2MV9UT1NISUJBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjEwLCAiVG9zaGliYSIsIEFMQzg2MV9UT1NISUJBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU4NCwgMHg5MDcyLCAiVW5pd2lsbCBtMzEiLCBBTEM4NjFfVU5JV0lMTF9NMzEpLAogCVNORF9QQ0lfUVVJUksoMHgxNTg0LCAweDJiMDEsICJVbml3aWxsIFg0MEFJeCIsIEFMQzg2MV9VTklXSUxMX00zMSksCisJU05EX1BDSV9RVUlSSygweDE4NDksIDB4MDY2MCwgIkFzcm9jayA5MzlTTEkzMiIsIEFMQzY2MF8zU1QpLAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweGQ2MDAsICJJbnRlbCIsIEFMQzg2MV8zU1QpLAogCXt9CiB9OwpAQCAtNzg5Miw3ICs4ODQyLDggQEAKIAl9LAogCVtBTEM4NjFfVE9TSElCQV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg2MV90b3NoaWJhX21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM4NjFfYmFzZV9pbml0X3ZlcmJzLCBhbGM4NjFfdG9zaGliYV9pbml0X3ZlcmJzIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4NjFfYmFzZV9pbml0X3ZlcmJzLAorCQkJCWFsYzg2MV90b3NoaWJhX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4NjFfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGM4NjFfZGFjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzJjaF9tb2RlcyksCkBAIC03OTQ0LDcgKzg4OTUsNyBAQAogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwkKKwljb2RlYy0+c3BlYyA9IHNwZWM7CiAKICAgICAgICAgYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIEFMQzg2MV9NT0RFTF9MQVNULAogCQkJCQkJICBhbGM4NjFfbW9kZWxzLApAQCAtNzk2Miw3ICs4OTEzLDcgQEAKIAkJaWYgKGVyciA8IDApIHsKIAkJCWFsY19mcmVlKGNvZGVjKTsKIAkJCXJldHVybiBlcnI7Ci0JCX0gZWxzZSBpZiAoISBlcnIpIHsKKwkJfSBlbHNlIGlmICghZXJyKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgImhkYV9jb2RlYzogQ2Fubm90IHNldCB1cCBjb25maWd1cmF0aW9uICIKIAkJCSAgICAgICAiZnJvbSBCSU9TLiAgVXNpbmcgYmFzZSBtb2RlLi4uXG4iKTsKQEAgLTgwMzEsNiArODk4MiwxNSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODYxdmRfZGFsbGFzX2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSAzLAorCS5pdGVtcyA9IHsKKwkJeyAiRnJvbnQgTWljIiwgMHgwIH0sCisJCXsgIkFUQVBJIE1pYyIsIDB4MSB9LAorCQl7ICJMaW5lIEluIiwgMHg1IH0sCisJfSwKK307CisKICNkZWZpbmUgYWxjODYxdmRfbXV4X2VudW1faW5mbyBhbGNfbXV4X2VudW1faW5mbwogI2RlZmluZSBhbGM4NjF2ZF9tdXhfZW51bV9nZXQgYWxjX211eF9lbnVtX2dldAogCkBAIC04MDQ5LDcgKzkwMDksNyBAQAogCWlkeCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CiAJaWYgKGlkeCA+PSBpbXV4LT5udW1faXRlbXMpCiAJCWlkeCA9IGltdXgtPm51bV9pdGVtcyAtIDE7Ci0JaWYgKCpjdXJfdmFsID09IGlkeCAmJiAhIGNvZGVjLT5pbl9yZXN1bWUpCisJaWYgKCpjdXJfdmFsID09IGlkeCAmJiAhY29kZWMtPmluX3Jlc3VtZSkKIAkJcmV0dXJuIDA7CiAJZm9yIChpID0gMDsgaSA8IGltdXgtPm51bV9pdGVtczsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCB2ID0gKGkgPT0gaWR4KSA/IDB4NzAwMCA6IDB4NzA4MDsKQEAgLTgxOTMsNiArOTE1Myw1NSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4NjF2ZF9sZW5vdm9fbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAorCS8qSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwqLworCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLAorCisJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAorCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKKworCXsgfSAvKiBlbmQgKi8KK307CisKKy8qIFBpbiBhc3NpZ25tZW50OiBGcm9udD0weDE0LCBIUCA9IDB4MTUsCisgKiAgICAgICAgICAgICAgICAgRnJvbnQgTWljPTB4MTgsIEFUQVBJIE1pYyA9IDB4MTksIExpbmUgSW4gPSAweDFkCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4NjF2ZF9kYWxsYXNfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGQsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJBVEFQSSBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJBVEFQSSBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkvKiAubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsICovCisJCS5uYW1lID0gIklucHV0IFNvdXJjZSIsCisJCS5jb3VudCA9IDEsCisJCS5pbmZvID0gYWxjODgyX211eF9lbnVtX2luZm8sCisJCS5nZXQgPSBhbGM4ODJfbXV4X2VudW1fZ2V0LAorCQkucHV0ID0gYWxjODgyX211eF9lbnVtX3B1dCwKKwl9LAorCXsgfSAvKiBlbmQgKi8KK307CisKIC8qCiAgKiBnZW5lcmljIGluaXRpYWxpemF0aW9uIG9mIEFEQywgaW5wdXQgbWl4ZXJzIGFuZCBvdXRwdXQgbWl4ZXJzCiAgKi8KQEAgLTgyMTQsMTAgKzkyMjMsMTAgQEAKIAl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg0KX0sCiAKIAkvKiBDYXB0dXJlIG1peGVyOiB1bm11dGUgTWljLCBGLU1pYywgTGluZSwgQ0QgaW5wdXRzICovCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCiAJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoNCl9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDUpfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg2KX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoOCl9LAogCiAJLyoKIAkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwMiAtIDB4MDUpCkBAIC04MzE4LDYgKzkzMjcsMTMyIEBACiAJeyB9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg2MXZkX2VhcGRfdmVyYnNbXSA9IHsKKwl7MHgxNCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjF2ZF9sZW5vdm9fdW5zb2xfdmVyYnNbXSA9IHsKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg1KX0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX01JQ19FVkVOVH0sCQorCXt9Cit9OworCisvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCitzdGF0aWMgdm9pZCBhbGM4NjF2ZF9sZW5vdm9faHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQ7CisJdW5zaWduZWQgY2hhciBiaXRzOworCisJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYiwgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCWJpdHMgPSBwcmVzZW50ID8gMHg4MCA6IDA7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE0LCAwLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTQsIDEsIEhEQV9PVVRQVVQsIDAsCisJCQkJIDB4ODAsIGJpdHMpOworfQorCitzdGF0aWMgdm9pZCBhbGM4NjF2ZF9sZW5vdm9fbWljX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBwcmVzZW50OworCXVuc2lnbmVkIGNoYXIgYml0czsKKworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTgsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKKwliaXRzID0gcHJlc2VudCA/IDB4ODAgOiAwOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwYiwgMCwgSERBX0lOUFVULCAxLAorCQkJCSAweDgwLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MGIsIDEsIEhEQV9JTlBVVCwgMSwKKwkJCQkgMHg4MCwgYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzg2MXZkX2xlbm92b19hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlhbGM4NjF2ZF9sZW5vdm9faHBfYXV0b211dGUoY29kZWMpOworCWFsYzg2MXZkX2xlbm92b19taWNfYXV0b211dGUoY29kZWMpOworfQorCitzdGF0aWMgdm9pZCBhbGM4NjF2ZF9sZW5vdm9fdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCXVuc2lnbmVkIGludCByZXMpCit7CisJc3dpdGNoIChyZXMgPj4gMjYpIHsKKwljYXNlIEFMQzg4MF9IUF9FVkVOVDoKKwkJYWxjODYxdmRfbGVub3ZvX2hwX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBBTEM4ODBfTUlDX0VWRU5UOgorCQlhbGM4NjF2ZF9sZW5vdm9fbWljX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg2MXZkX2RhbGxhc192ZXJic1tdID0geworCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwkKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCisJezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY1MH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY1MH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKworCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKworCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwJCisJezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAorCisJeyB9IC8qIGVuZCAqLworfTsKKworLyogdG9nZ2xlIHNwZWFrZXItb3V0cHV0IGFjY29yZGluZyB0byB0aGUgaHAtamFjayBzdGF0ZSAqLworc3RhdGljIHZvaWQgYWxjODYxdmRfZGFsbGFzX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBwcmVzZW50OworCisJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxNSwgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNCwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTQsIDEsIEhEQV9PVVRQVVQsIDAsCisJCQkJIDB4ODAsIHByZXNlbnQgPyAweDgwIDogMCk7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzg2MXZkX2RhbGxhc191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKK3sKKwlpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX0hQX0VWRU5UKQorCQlhbGM4NjF2ZF9kYWxsYXNfYXV0b211dGUoY29kZWMpOworfQorCiAvKiBwY20gY29uZmlndXJhdGlvbjogaWRlbnRpYWNhbCB3aXRoIEFMQzg4MCAqLwogI2RlZmluZSBhbGM4NjF2ZF9wY21fYW5hbG9nX3BsYXliYWNrCWFsYzg4MF9wY21fYW5hbG9nX3BsYXliYWNrCiAjZGVmaW5lIGFsYzg2MXZkX3BjbV9hbmFsb2dfY2FwdHVyZQlhbGM4ODBfcGNtX2FuYWxvZ19jYXB0dXJlCkBAIC04MzMyLDE1ICs5NDY3LDIyIEBACiAJW0FMQzg2MVZEXzNTVF0JCT0gIjNzdGFjayIsCiAJW0FMQzg2MVZEXzNTVF9ESUddCT0gIjNzdGFjay1kaWdvdXQiLAogCVtBTEM4NjFWRF82U1RfRElHXQk9ICI2c3RhY2stZGlnb3V0IiwKKwlbQUxDODYxVkRfTEVOT1ZPXQk9ICJsZW5vdm8iLAorCVtBTEM4NjFWRF9EQUxMQVNdCT0gImRhbGxhcyIsCiAJW0FMQzg2MVZEX0FVVE9dCQk9ICJhdXRvIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4NjF2ZF9jZmdfdGJsW10gPSB7CisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJlMiwgIkFzdXMgejM1bSIsIEFMQzY2MFZEXzNTVCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFzdXMgRzEiLCBBTEM2NjBWRF8zU1QpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxZTcsICJBU1VTIiwgQUxDNjYwVkRfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBkZSwgMHgwM2YwLCAiUmVhbHRlayBBTEM2NjAgZGVtbyIsIEFMQzY2MFZEXzNTVCksCiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4YTg4ZCwgIlJlYWx0ZWsgQUxDNjYwIGRlbW8iLCBBTEM2NjBWRF8zU1QpLAogCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzgwMiwgIkxlbm92byAzMDAwIEMyMDAiLCBBTEM4NjFWRF8zU1QpLAorCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMDAsICJEQUxMQVMiLCBBTEM4NjFWRF9EQUxMQVMpLAorCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMDEsICJEQUxMQVMiLCBBTEM4NjFWRF9EQUxMQVMpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4MDIsICJMZW5vdm8gMzAwMCBDMjAwIiwgQUxDODYxVkRfTEVOT1ZPKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMDY2LCAiTGVub3ZvIiwgQUxDODYxVkRfTEVOT1ZPKSwKIAl7fQogfTsKIApAQCAtODM4OSw2ICs5NTMxLDM1IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4NjF2ZF82c3RhY2tfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODYxdmRfY2FwdHVyZV9zb3VyY2UsCiAJfSwKKwlbQUxDODYxVkRfTEVOT1ZPXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjODYxdmRfbGVub3ZvX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4NjF2ZF92b2x1bWVfaW5pdF92ZXJicywKKwkJCQlhbGM4NjF2ZF8zc3RhY2tfaW5pdF92ZXJicywKKwkJCQlhbGM4NjF2ZF9lYXBkX3ZlcmJzLAorCQkJCWFsYzg2MXZkX2xlbm92b191bnNvbF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzY2MHZkX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjNjYwdmRfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg2MXZkX2FkY19uaWRzKSwKKwkJLmFkY19uaWRzID0gYWxjODYxdmRfYWRjX25pZHMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4NjF2ZF8zc3RhY2tfMmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg2MXZkXzNzdGFja18yY2hfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjODYxdmRfY2FwdHVyZV9zb3VyY2UsCisJCS51bnNvbF9ldmVudCA9IGFsYzg2MXZkX2xlbm92b191bnNvbF9ldmVudCwKKwkJLmluaXRfaG9vayA9IGFsYzg2MXZkX2xlbm92b19hdXRvbXV0ZSwKKwl9LAorCVtBTEM4NjFWRF9EQUxMQVNdID0geworCQkubWl4ZXJzID0geyBhbGM4NjF2ZF9kYWxsYXNfbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg2MXZkX2RhbGxhc192ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg2MXZkX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODYxdmRfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg2MXZkX2FkY19uaWRzKSwKKwkJLmFkY19uaWRzID0gYWxjODYxdmRfYWRjX25pZHMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4NjF2ZF8zc3RhY2tfMmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg2MXZkXzNzdGFja18yY2hfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjODYxdmRfZGFsbGFzX2NhcHR1cmVfc291cmNlLAorCQkudW5zb2xfZXZlbnQgPSBhbGM4NjF2ZF9kYWxsYXNfdW5zb2xfZXZlbnQsCisJCS5pbml0X2hvb2sgPSBhbGM4NjF2ZF9kYWxsYXNfYXV0b211dGUsCisJfSwJCiB9OwogCiAvKgpAQCAtODQwOSwxMSArOTU4MCwxMyBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBpOwogCisJYWxjX3N1YnN5c3RlbV9pZChjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCk7CiAJZm9yIChpID0gMDsgaSA8PSBIREFfU0lERTsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbaV07CisJCWludCBwaW5fdHlwZSA9IGdldF9waW5fdHlwZShzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUpOwogCQlpZiAobmlkKQogCQkJYWxjODYxdmRfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIG5pZCwKLQkJCQkJCQkJUElOX09VVCwgaSk7CisJCQkJCQkJICAgIHBpbl90eXBlLCBpKTsKIAl9CiB9CiAKQEAgLTg0NjYsNyArOTYzOSw3IEBACiAJaW50IGksIGVycjsKIAogCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7Ci0JCWlmICghIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldKQorCQlpZiAoIXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldKQogCQkJY29udGludWU7CiAJCW5pZF92ID0gYWxjODYxdmRfaWR4X3RvX21peGVyX3ZvbCgKIAkJCQlhbGM4ODBfZGFjX3RvX2lkeCgKQEAgLTg0NzcsMzYgKzk2NTAsNDIgQEAKIAogCQlpZiAoaSA9PSAyKSB7CiAJCQkvKiBDZW50ZXIvTEZFICovCi0JCQlpZiAoKGVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKLQkJCQkJCSJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwKLQkJCQkJCUhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3YsIDEsCi0JCQkJCQkJMCwgSERBX09VVFBVVCkpKSA8IDApCisJCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsCisJCQkJCSAgIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3YsIDEsIDAsCisJCQkJCQkJICAgICAgSERBX09VVFBVVCkpOworCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCWlmICgoZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAotCQkJCQkJIkxGRSBQbGF5YmFjayBWb2x1bWUiLAotCQkJCQkJSERBX0NPTVBPU0VfQU1QX1ZBTChuaWRfdiwgMiwKLQkJCQkJCQkwLCBIREFfT1VUUFVUKSkpIDwgMCkKKwkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKKwkJCQkJICAiTEZFIFBsYXliYWNrIFZvbHVtZSIsCisJCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWRfdiwgMiwgMCwKKwkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwKLQkJCQkJCSJDZW50ZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJCUhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3MsIDEsCi0JCQkJCQkyLCBIREFfSU5QVVQpKSkgPCAwKQorCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsCisJCQkJCSAgIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3MsIDEsIDIsCisJCQkJCQkJICAgICAgSERBX0lOUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwKLQkJCQkJCSJMRkUgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJCUhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3MsIDIsCi0JCQkJCQkyLCBIREFfSU5QVVQpKSkgPCAwKQorCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsCisJCQkJCSAgIkxGRSBQbGF5YmFjayBTd2l0Y2giLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3MsIDIsIDIsCisJCQkJCQkJICAgICAgSERBX0lOUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgewogCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgY2huYW1lW2ldKTsKLQkJCWlmICgoZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAotCQkJCQkJSERBX0NPTVBPU0VfQU1QX1ZBTChuaWRfdiwgMywKLQkJCQkJCQkwLCBIREFfT1VUUFVUKSkpIDwgMCkKKwkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKKwkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZF92LCAzLCAwLAorCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKKwkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBjaG5hbWVbaV0pOwotCQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwgbmFtZSwKLQkJCQkJCUhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3YsIDMsCi0JCQkJCQkJMiwgSERBX0lOUFVUKSkpIDwgMCkKKwkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfQklORF9NVVRFLCBuYW1lLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3MsIDMsIDIsCisJCQkJCQkJICAgICAgSERBX0lOUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQpAQCAtODUyMywxMyArOTcwMiwxMyBAQAogCWludCBlcnI7CiAJY2hhciBuYW1lWzMyXTsKIAotCWlmICghIHBpbikKKwlpZiAoIXBpbikKIAkJcmV0dXJuIDA7CiAKIAlpZiAoYWxjODgwX2lzX2ZpeGVkX3BpbihwaW4pKSB7CiAJCW5pZF92ID0gYWxjODgwX2lkeF90b19kYWMoYWxjODgwX2ZpeGVkX3Bpbl9pZHgocGluKSk7CiAJCS8qIHNwZWNpZnkgdGhlIERBQyBhcyB0aGUgZXh0cmEgb3V0cHV0ICovCi0JCWlmICghIHNwZWMtPm11bHRpb3V0LmhwX25pZCkKKwkJaWYgKCFzcGVjLT5tdWx0aW91dC5ocF9uaWQpCiAJCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBuaWRfdjsKIAkJZWxzZQogCQkJc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFswXSA9IG5pZF92OwpAQCAtODU0MCwyMiArOTcxOSwyMiBAQAogCQkJCWFsYzg4MF9maXhlZF9waW5faWR4KHBpbikpOwogCiAJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7Ci0JCWlmICgoZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAotCQkJCUhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3YsIDMsIDAsCi0JCQkJCQkJSERBX09VVFBVVCkpKSA8IDApCisJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKKwkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3YsIDMsIDAsIEhEQV9PVVRQVVQpKTsKKwkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOwotCQlpZiAoKGVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfQklORF9NVVRFLCBuYW1lLAotCQkJCUhEQV9DT01QT1NFX0FNUF9WQUwobmlkX3MsIDMsIDIsCi0JCQkJCQkJSERBX0lOUFVUKSkpIDwgMCkKKwkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsIG5hbWUsCisJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZF9zLCAzLCAyLCBIREFfSU5QVVQpKTsKKwkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0gZWxzZSBpZiAoYWxjODgwX2lzX211bHRpX3BpbihwaW4pKSB7CiAJCS8qIHNldCBtYW51YWwgY29ubmVjdGlvbiAqLwogCQkvKiB3ZSBoYXZlIG9ubHkgYSBzd2l0Y2ggb24gSFAtb3V0IFBJTiAqLwogCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOwotCQlpZiAoKGVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCi0JCQkJSERBX0NPTVBPU0VfQU1QX1ZBTChwaW4sIDMsIDAsCi0JCQkJCQkJSERBX09VVFBVVCkpKSA8IDApCisJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCisJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKHBpbiwgMywgMCwgSERBX09VVFBVVCkpOworCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiAwOwpAQCAtODU3MiwyMSArOTc1MSwzMSBAQAogCWludCBlcnI7CiAJc3RhdGljIGhkYV9uaWRfdCBhbGM4NjF2ZF9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OwogCi0JaWYgKChlcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKLQkJCQkJCWFsYzg2MXZkX2lnbm9yZSkpIDwgMCkKKwllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKKwkJCQkJICAgYWxjODYxdmRfaWdub3JlKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoISBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKKwlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBCSU9TIHBpbiBjb25maWcgKi8KIAotCWlmICgoZXJyID0gYWxjODgwX2F1dG9fZmlsbF9kYWNfbmlkcyhzcGVjLCAmc3BlYy0+YXV0b2NmZykpIDwgMCB8fAotCQkoZXJyID0gYWxjODYxdmRfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywKLQkJCSZzcGVjLT5hdXRvY2ZnKSkgPCAwIHx8Ci0JCShlcnIgPSBhbGM4NjF2ZF9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3BlYywKLQkJCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdLCAiU3BlYWtlciIpKSA8IDAgfHwKLQkJKGVyciA9IGFsYzg2MXZkX2F1dG9fY3JlYXRlX2V4dHJhX291dChzcGVjLAotCQkJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdLCAiSGVhZHBob25lIikpIDwgMCB8fAotCQkoZXJyID0gYWxjODgwX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHNwZWMsCi0JCQkmc3BlYy0+YXV0b2NmZykpIDwgMCkKKwllcnIgPSBhbGM4ODBfYXV0b19maWxsX2RhY19uaWRzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBhbGM4NjF2ZF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gYWxjODYxdmRfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHNwZWMsCisJCQkJCSAgICAgc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0sCisJCQkJCSAgICAgIlNwZWFrZXIiKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBhbGM4NjF2ZF9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3BlYywKKwkJCQkJICAgICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0sCisJCQkJCSAgICAgIkhlYWRwaG9uZSIpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGFsYzg4MF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CkBAIC04NjQxLDcgKzk4MzAsNyBAQAogCQlpZiAoZXJyIDwgMCkgewogCQkJYWxjX2ZyZWUoY29kZWMpOwogCQkJcmV0dXJuIGVycjsKLQkJfSBlbHNlIGlmICghIGVycikgeworCQl9IGVsc2UgaWYgKCFlcnIpIHsKIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCSAgICAgICAiaGRhX2NvZGVjOiBDYW5ub3Qgc2V0IHVwIGNvbmZpZ3VyYXRpb24gIgogCQkJICAgICAgICJmcm9tIEJJT1MuICBVc2luZyBiYXNlIG1vZGUuLi5cbiIpOwpAQCAtODY3NSwxNiArOTg2NCw4NzUgQEAKIH0KIAogLyoKKyAqIEFMQzY2MiBzdXBwb3J0CisgKgorICogQUxDNjYyIGlzIGFsbW9zdCBpZGVudGljYWwgd2l0aCBBTEM4ODAgYnV0IGhhcyBjbGVhbmVyIGFuZCBtb3JlIGZsZXhpYmxlCisgKiBjb25maWd1cmF0aW9uLiAgRWFjaCBwaW4gd2lkZ2V0IGNhbiBjaG9vc2UgYW55IGlucHV0IERBQ3MgYW5kIGEgbWl4ZXIuCisgKiBFYWNoIEFEQyBpcyBjb25uZWN0ZWQgZnJvbSBhIG1peGVyIG9mIGFsbCBpbnB1dHMuICBUaGlzIG1ha2VzIHBvc3NpYmxlCisgKiA2LWNoYW5uZWwgaW5kZXBlbmRlbnQgY2FwdHVyZXMuCisgKgorICogSW4gYWRkaXRpb24sIGFuIGluZGVwZW5kZW50IERBQyBmb3IgdGhlIG11bHRpLXBsYXliYWNrIChub3QgdXNlZCBpbiB0aGlzCisgKiBkcml2ZXIgeWV0KS4KKyAqLworI2RlZmluZSBBTEM2NjJfRElHT1VUX05JRAkweDA2CisjZGVmaW5lIEFMQzY2Ml9ESUdJTl9OSUQJMHgwYQorCitzdGF0aWMgaGRhX25pZF90IGFsYzY2Ml9kYWNfbmlkc1s0XSA9IHsKKwkvKiBmcm9udCwgcmVhciwgY2xmZSwgcmVhcl9zdXJyICovCisJMHgwMiwgMHgwMywgMHgwNAorfTsKKworc3RhdGljIGhkYV9uaWRfdCBhbGM2NjJfYWRjX25pZHNbMV0gPSB7CisJLyogQURDMS0yICovCisJMHgwOSwKK307CisvKiBpbnB1dCBNVVggKi8KKy8qIEZJWE1FOiBzaG91bGQgYmUgYSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM2NjJfY2FwdHVyZV9zb3VyY2UgPSB7CisJLm51bV9pdGVtcyA9IDQsCisJLml0ZW1zID0geworCQl7ICJNaWMiLCAweDAgfSwKKwkJeyAiRnJvbnQgTWljIiwgMHgxIH0sCisJCXsgIkxpbmUiLCAweDIgfSwKKwkJeyAiQ0QiLCAweDQgfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzY2Ml9sZW5vdm9fMTAxZV9jYXB0dXJlX3NvdXJjZSA9IHsKKwkubnVtX2l0ZW1zID0gMiwKKwkuaXRlbXMgPSB7CisJCXsgIk1pYyIsIDB4MSB9LAorCQl7ICJMaW5lIiwgMHgyIH0sCisJfSwKK307CisjZGVmaW5lIGFsYzY2Ml9tdXhfZW51bV9pbmZvIGFsY19tdXhfZW51bV9pbmZvCisjZGVmaW5lIGFsYzY2Ml9tdXhfZW51bV9nZXQgYWxjX211eF9lbnVtX2dldAorCitzdGF0aWMgaW50IGFsYzY2Ml9tdXhfZW51bV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSBzcGVjLT5pbnB1dF9tdXg7CisJdW5zaWduZWQgaW50IGFkY19pZHggPSBzbmRfY3RsX2dldF9pb2ZmaWR4KGtjb250cm9sLCAmdWNvbnRyb2wtPmlkKTsKKwlzdGF0aWMgaGRhX25pZF90IGNhcHR1cmVfbWl4ZXJzWzNdID0geyAweDI0LCAweDIzLCAweDIyIH07CisJaGRhX25pZF90IG5pZCA9IGNhcHR1cmVfbWl4ZXJzW2FkY19pZHhdOworCXVuc2lnbmVkIGludCAqY3VyX3ZhbCA9ICZzcGVjLT5jdXJfbXV4W2FkY19pZHhdOworCXVuc2lnbmVkIGludCBpLCBpZHg7CisKKwlpZHggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCWlmIChpZHggPj0gaW11eC0+bnVtX2l0ZW1zKQorCQlpZHggPSBpbXV4LT5udW1faXRlbXMgLSAxOworCWlmICgqY3VyX3ZhbCA9PSBpZHggJiYgIWNvZGVjLT5pbl9yZXN1bWUpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBpbXV4LT5udW1faXRlbXM7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdiA9IChpID09IGlkeCkgPyAweDcwMDAgOiAweDcwODA7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQkgICAgdiB8IChpbXV4LT5pdGVtc1tpXS5pbmRleCA8PCA4KSk7CisJfQorCSpjdXJfdmFsID0gaWR4OworCXJldHVybiAxOworfQorLyoKKyAqIDJjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM2NjJfM1NUXzJjaF9tb2Rlc1sxXSA9IHsKKwl7IDIsIE5VTEwgfQorfTsKKworLyoKKyAqIDJjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyXzNTVF9jaDJfaW5pdFtdID0geworCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IH0gLyogZW5kICovCit9OworCisvKgorICogNmNoIG1vZGUKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfM1NUX2NoNl9pbml0W10gPSB7CisJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMiB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjNjYyXzNTVF82Y2hfbW9kZXNbMl0gPSB7CisJeyAyLCBhbGM2NjJfM1NUX2NoMl9pbml0IH0sCisJeyA2LCBhbGM2NjJfM1NUX2NoNl9pbml0IH0sCit9OworCisvKgorICogMmNoIG1vZGUKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfc2l4c3RhY2tfY2g2X2luaXRbXSA9IHsKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCB9LAorCXsgMHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDAwIH0sCisJeyAweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IH0gLyogZW5kICovCit9OworCisvKgorICogNmNoIG1vZGUKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfc2l4c3RhY2tfY2g4X2luaXRbXSA9IHsKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjNjYyXzVzdGFja19tb2Rlc1syXSA9IHsKKwl7IDIsIGFsYzY2Ml9zaXhzdGFja19jaDZfaW5pdCB9LAorCXsgNiwgYWxjNjYyX3NpeHN0YWNrX2NoOF9pbml0IH0sCit9OworCisvKiBQaW4gYXNzaWdubWVudDogRnJvbnQ9MHgxNCwgUmVhcj0weDE1LCBDTEZFPTB4MTYsIFNpZGU9MHgxNworICogICAgICAgICAgICAgICAgIE1pYz0weDE4LCBGcm9udCBNaWM9MHgxOSwgTGluZS1Jbj0weDFhLCBIUD0weDFiCisgKi8KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml9iYXNlX21peGVyW10gPSB7CisJLyogb3V0cHV0IG1peGVyIGNvbnRyb2wgKi8KKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MDIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgzLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLCAweDAzLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDQsIDEsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJMRkUgUGxheWJhY2sgVm9sdW1lIiwgMHgwNCwgMiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFX01PTk8oIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLCAweDA0LCAxLCAyLCBIREFfSU5QVVQpLAorCUhEQV9CSU5EX01VVEVfTU9OTygiTEZFIFBsYXliYWNrIFN3aXRjaCIsIDB4MDQsIDIsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAorCisJLypJbnB1dCBtaXhlciBjb250cm9sICovCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHhiLCAweDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4YiwgMHg0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHhiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4YiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHhiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHhiLCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHhiLCAweDAxLCBIREFfSU5QVVQpLAorCisJLyogQ2FwdHVyZSBtaXhlciBjb250cm9sICovCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKKwkJLmNvdW50ID0gMSwKKwkJLmluZm8gPSBhbGNfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IGFsY19tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBhbGNfbXV4X2VudW1fcHV0LAorCX0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml8zU1RfMmNoX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDAyLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLyogLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLCAqLworCQkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLAorCQkuY291bnQgPSAxLAorCQkuaW5mbyA9IGFsYzY2Ml9tdXhfZW51bV9pbmZvLAorCQkuZ2V0ID0gYWxjNjYyX211eF9lbnVtX2dldCwKKwkJLnB1dCA9IGFsYzY2Ml9tdXhfZW51bV9wdXQsCisJfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyXzNTVF82Y2hfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MDIsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLCAweDAzLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDQsIDEsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJMRkUgUGxheWJhY2sgVm9sdW1lIiwgMHgwNCwgMiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFX01PTk8oIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLCAweDA0LCAxLCAyLCBIREFfSU5QVVQpLAorCUhEQV9CSU5EX01VVEVfTU9OTygiTEZFIFBsYXliYWNrIFN3aXRjaCIsIDB4MDQsIDIsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkvKiAubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsICovCisJCS5uYW1lID0gIklucHV0IFNvdXJjZSIsCisJCS5jb3VudCA9IDEsCisJCS5pbmZvID0gYWxjNjYyX211eF9lbnVtX2luZm8sCisJCS5nZXQgPSBhbGM2NjJfbXV4X2VudW1fZ2V0LAorCQkucHV0ID0gYWxjNjYyX211eF9lbnVtX3B1dCwKKwl9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfbGVub3ZvXzEwMWVfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MDIsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiaVNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJpU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDAzLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkvKiAubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsICovCisJCS5uYW1lID0gIklucHV0IFNvdXJjZSIsCisJCS5jb3VudCA9IDEsCisJCS5pbmZvID0gYWxjNjYyX211eF9lbnVtX2luZm8sCisJCS5nZXQgPSBhbGM2NjJfbXV4X2VudW1fZ2V0LAorCQkucHV0ID0gYWxjNjYyX211eF9lbnVtX3B1dCwKKwl9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfY2htb2RlX21peGVyW10gPSB7CisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQ2hhbm5lbCBNb2RlIiwKKwkJLmluZm8gPSBhbGNfY2hfbW9kZV9pbmZvLAorCQkuZ2V0ID0gYWxjX2NoX21vZGVfZ2V0LAorCQkucHV0ID0gYWxjX2NoX21vZGVfcHV0LAorCX0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfaW5pdF92ZXJic1tdID0geworCS8qIEFEQzogbXV0ZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogRnJvbnQgbWl4ZXI6IHVubXV0ZSBpbnB1dC9vdXRwdXQgYW1wIGxlZnQgYW5kIHJpZ2h0ICh2b2x1bWUgPSAwKSAqLworCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDQpfSwKKworCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCisJLyogRnJvbnQgUGluOiBvdXRwdXQgMCAoMHgwYykgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCisJLyogUmVhciBQaW46IG91dHB1dCAxICgweDBkKSAqLworCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisKKwkvKiBDTEZFIFBpbjogb3V0cHV0IDIgKDB4MGUpICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKworCS8qIE1pYyAocmVhcikgcGluOiBpbnB1dCB2cmVmIGF0IDgwJSAqLworCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCS8qIEZyb250IE1pYyBwaW46IGlucHV0IHZyZWYgYXQgODAlICovCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJLyogTGluZSBJbiBwaW46IGlucHV0ICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwkvKiBMaW5lLTIgSW46IEhlYWRwaG9uZSBvdXRwdXQgKG91dHB1dCAwIC0gMHgwYykgKi8KKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBDRCBwaW4gd2lkZ2V0IGZvciBpbnB1dCAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisKKwkvKiBGSVhNRTogdXNlIG1hdHJpeC10eXBlIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gKi8KKwkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgMTksIDFhLCAxYiwgMWMsIDFkLCAxNCwgMTUsIDE2LCAxNywgMGIgKi8KKwkvKiBJbnB1dCBtaXhlciAqLworCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDQpfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyX3N1ZV9pbml0X3ZlcmJzW10gPSB7CisJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58QUxDODgwX0ZST05UX0VWRU5UfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxBTEM4ODBfSFBfRVZFTlR9LAorICAgICAgICB7fQorfTsKKworLyoKKyAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfYXV0b19pbml0X3ZlcmJzW10gPSB7CisJLyoKKwkgKiBVbm11dGUgQURDIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCisJICovCisJezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisKKwkvKiBVbm11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKKwkgKiBtaXhlciB3aWRnZXQKKwkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvciBmcm9udAorCSAqIHBhbmVsIG1pYyAobWljIDIpCisJICovCisJLyogQW1wIEluZGljZXM6IE1pYzEgPSAwLCBNaWMyID0gMSwgTGluZTEgPSAyLCBMaW5lMiA9IDMsIENEID0gNCAqLworCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMil9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDMpfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg0KX0sCisKKwkvKgorCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZikKKwkgKi8KKwkvKiBzZXQgdm9sPTAgdG8gb3V0cHV0IG1peGVycyAqLworCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCisJLyogc2V0IHVwIGlucHV0IGFtcHMgZm9yIGFuYWxvZyBsb29wYmFjayAqLworCS8qIEFtcCBJbmRpY2VzOiBEQUMgPSAwLCBtaXhlciA9IDEgKi8KKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKworCisJLyogRklYTUU6IHVzZSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCisJLyogTWl4ZXIgZWxlbWVudHM6IDB4MTgsIDE5LCAxYSwgMWIsIDFjLCAxZCwgMTQsIDE1LCAxNiwgMTcsIDBiICovCisJLyogSW5wdXQgbWl4ZXIgKi8KKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwKKwkvKnsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDMpfSwqLworCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDQpfSwKKworCXsgfQorfTsKKworLyogY2FwdHVyZSBtaXhlciBlbGVtZW50cyAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml9jYXB0dXJlX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS8qIFRoZSBtdWx0aXBsZSAiQ2FwdHVyZSBTb3VyY2UiIGNvbnRyb2xzIGNvbmZ1c2UgYWxzYW1peGVyCisJCSAqIFNvIGNhbGwgc29tZXdoYXQgZGlmZmVyZW50Li4KKwkJICogRklYTUU6IHRoZSBjb250cm9scyBhcHBlYXIgaW4gdGhlICJwbGF5YmFjayIgdmlldyEKKwkJICovCisJCS8qIC5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwgKi8KKwkJLm5hbWUgPSAiSW5wdXQgU291cmNlIiwKKwkJLmNvdW50ID0gMSwKKwkJLmluZm8gPSBhbGM4ODJfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IGFsYzg4Ml9tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBhbGM4ODJfbXV4X2VudW1fcHV0LAorCX0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHZvaWQgYWxjNjYyX2xlbm92b18xMDFlX2lzcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBwcmVzZW50OworCXVuc2lnbmVkIGNoYXIgYml0czsKKworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTQsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKKwliaXRzID0gcHJlc2VudCA/IDB4ODAgOiAwOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNSwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE1LCAxLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBiaXRzKTsKK30KKworc3RhdGljIHZvaWQgYWxjNjYyX2xlbm92b18xMDFlX2FsbF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKwl1bnNpZ25lZCBjaGFyIGJpdHM7CisKKyAJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYiwgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCWJpdHMgPSBwcmVzZW50ID8gMHg4MCA6IDA7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE1LCAwLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBiaXRzKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTUsIDEsIEhEQV9PVVRQVVQsIDAsCisJCQkJIDB4ODAsIGJpdHMpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNCwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE0LCAxLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBiaXRzKTsKK30KKworc3RhdGljIHZvaWQgYWxjNjYyX2xlbm92b18xMDFlX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQoreworCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfSFBfRVZFTlQpCisJCWFsYzY2Ml9sZW5vdm9fMTAxZV9hbGxfYXV0b211dGUoY29kZWMpOworCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfRlJPTlRfRVZFTlQpCisJCWFsYzY2Ml9sZW5vdm9fMTAxZV9pc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Cit9CisKKworLyogcGNtIGNvbmZpZ3VyYXRpb246IGlkZW50aWFjYWwgd2l0aCBBTEM4ODAgKi8KKyNkZWZpbmUgYWxjNjYyX3BjbV9hbmFsb2dfcGxheWJhY2sJYWxjODgwX3BjbV9hbmFsb2dfcGxheWJhY2sKKyNkZWZpbmUgYWxjNjYyX3BjbV9hbmFsb2dfY2FwdHVyZQlhbGM4ODBfcGNtX2FuYWxvZ19jYXB0dXJlCisjZGVmaW5lIGFsYzY2Ml9wY21fZGlnaXRhbF9wbGF5YmFjawlhbGM4ODBfcGNtX2RpZ2l0YWxfcGxheWJhY2sKKyNkZWZpbmUgYWxjNjYyX3BjbV9kaWdpdGFsX2NhcHR1cmUJYWxjODgwX3BjbV9kaWdpdGFsX2NhcHR1cmUKKworLyoKKyAqIGNvbmZpZ3VyYXRpb24gYW5kIHByZXNldAorICovCitzdGF0aWMgY29uc3QgY2hhciAqYWxjNjYyX21vZGVsc1tBTEM2NjJfTU9ERUxfTEFTVF0gPSB7CisJW0FMQzY2Ml8zU1RfMmNoX0RJR10JPSAiM3N0YWNrLWRpZyIsCisJW0FMQzY2Ml8zU1RfNmNoX0RJR10JPSAiM3N0YWNrLTZjaC1kaWciLAorCVtBTEM2NjJfM1NUXzZjaF0JPSAiM3N0YWNrLTZjaCIsCisJW0FMQzY2Ml81U1RfRElHXQk9ICI2c3RhY2stZGlnIiwKKwlbQUxDNjYyX0xFTk9WT18xMDFFXQk9ICJsZW5vdm8tMTAxZSIsCisJW0FMQzY2Ml9BVVRPXQkJPSAiYXV0byIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjYyX2NmZ190YmxbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgxMDFlLCAiTGVub3ZvIiwgQUxDNjYyX0xFTk9WT18xMDFFKSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGM2NjJfcHJlc2V0c1tdID0geworCVtBTEM2NjJfM1NUXzJjaF9ESUddID0geworCQkubWl4ZXJzID0geyBhbGM2NjJfM1NUXzJjaF9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzY2Ml9ESUdPVVRfTklELAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM2NjJfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM2NjJfYWRjX25pZHMsCisJCS5kaWdfaW5fbmlkID0gQUxDNjYyX0RJR0lOX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzY2Ml9jYXB0dXJlX3NvdXJjZSwKKwl9LAorCVtBTEM2NjJfM1NUXzZjaF9ESUddID0geworCQkubWl4ZXJzID0geyBhbGM2NjJfM1NUXzZjaF9taXhlciwgYWxjNjYyX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzY2Ml9ESUdPVVRfTklELAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM2NjJfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM2NjJfYWRjX25pZHMsCisJCS5kaWdfaW5fbmlkID0gQUxDNjYyX0RJR0lOX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfNmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfNmNoX21vZGVzLAorCQkubmVlZF9kYWNfZml4ID0gMSwKKwkJLmlucHV0X211eCA9ICZhbGM2NjJfY2FwdHVyZV9zb3VyY2UsCisJfSwKKwlbQUxDNjYyXzNTVF82Y2hdID0geworCQkubWl4ZXJzID0geyBhbGM2NjJfM1NUXzZjaF9taXhlciwgYWxjNjYyX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzY2Ml9hZGNfbmlkcyksCisJCS5hZGNfbmlkcyA9IGFsYzY2Ml9hZGNfbmlkcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfNmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfNmNoX21vZGVzLAorCQkubmVlZF9kYWNfZml4ID0gMSwKKwkJLmlucHV0X211eCA9ICZhbGM2NjJfY2FwdHVyZV9zb3VyY2UsCisJfSwKKwlbQUxDNjYyXzVTVF9ESUddID0geworCQkubWl4ZXJzID0geyBhbGM2NjJfYmFzZV9taXhlciwgYWxjNjYyX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzY2Ml9ESUdPVVRfTklELAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM2NjJfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM2NjJfYWRjX25pZHMsCisJCS5kaWdfaW5fbmlkID0gQUxDNjYyX0RJR0lOX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml81c3RhY2tfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjNjYyXzVzdGFja19tb2RlcywKKwkJLmlucHV0X211eCA9ICZhbGM2NjJfY2FwdHVyZV9zb3VyY2UsCisJfSwKKwlbQUxDNjYyX0xFTk9WT18xMDFFXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjNjYyX2xlbm92b18xMDFlX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywgYWxjNjYyX3N1ZV9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM2NjJfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM2NjJfYWRjX25pZHMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKKwkJLmlucHV0X211eCA9ICZhbGM2NjJfbGVub3ZvXzEwMWVfY2FwdHVyZV9zb3VyY2UsCisJCS51bnNvbF9ldmVudCA9IGFsYzY2Ml9sZW5vdm9fMTAxZV91bnNvbF9ldmVudCwKKwkJLmluaXRfaG9vayA9IGFsYzY2Ml9sZW5vdm9fMTAxZV9hbGxfYXV0b211dGUsCisJfSwKKworfTsKKworCisvKgorICogQklPUyBhdXRvIGNvbmZpZ3VyYXRpb24KKyAqLworCisvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLworc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKK3sKKwljaGFyIG5hbWVbMzJdOworCXN0YXRpYyBjb25zdCBjaGFyICpjaG5hbWVbNF0gPSB7CisJCSJGcm9udCIsICJTdXJyb3VuZCIsIE5VTEwgLypDTEZFKi8sICJTaWRlIgorCX07CisJaGRhX25pZF90IG5pZDsKKwlpbnQgaSwgZXJyOworCisJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKKwkJaWYgKCFzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSkKKwkJCWNvbnRpbnVlOworCQluaWQgPSBhbGM4ODBfaWR4X3RvX2RhYyhpKTsKKwkJaWYgKGkgPT0gMikgeworCQkJLyogQ2VudGVyL0xGRSAqLworCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAorCQkJCQkgICJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMSwgMCwKKwkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAorCQkJCQkgICJMRkUgUGxheWJhY2sgVm9sdW1lIiwKKwkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMiwgMCwKKwkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsCisJCQkJCSAgIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAxLCAyLAorCQkJCQkJCSAgICAgIEhEQV9JTlBVVCkpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfQklORF9NVVRFLAorCQkJCQkgICJMRkUgUGxheWJhY2sgU3dpdGNoIiwKKwkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMiwgMiwKKwkJCQkJCQkgICAgICBIREFfSU5QVVQpKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0gZWxzZSB7CisJCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBWb2x1bWUiLCBjaG5hbWVbaV0pOworCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAorCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLAorCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBjaG5hbWVbaV0pOworCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsIG5hbWUsCisJCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDIsCisJCQkJCQkJICAgICAgSERBX0lOUFVUKSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZm9yIHNwZWFrZXIgYW5kIEhQIG91dHB1dHMgKi8KK3N0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBwaW4sCisJCQkJCWNvbnN0IGNoYXIgKnBmeCkKK3sKKwloZGFfbmlkX3QgbmlkOworCWludCBlcnI7CisJY2hhciBuYW1lWzMyXTsKKworCWlmICghcGluKQorCQlyZXR1cm4gMDsKKworCWlmIChhbGM4ODBfaXNfZml4ZWRfcGluKHBpbikpIHsKKwkJbmlkID0gYWxjODgwX2lkeF90b19kYWMoYWxjODgwX2ZpeGVkX3Bpbl9pZHgocGluKSk7CisgICAgICAgICAgICAgICAgLyogcHJpbnRrKCJEQUMgbmlkPSV4XG4iLG5pZCk7ICovCisJCS8qIHNwZWNpZnkgdGhlIERBQyBhcyB0aGUgZXh0cmEgb3V0cHV0ICovCisJCWlmICghc3BlYy0+bXVsdGlvdXQuaHBfbmlkKQorCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gbmlkOworCQllbHNlCisJCQlzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkWzBdID0gbmlkOworCQkvKiBjb250cm9sIEhQIHZvbHVtZS9zd2l0Y2ggb24gdGhlIG91dHB1dCBtaXhlciBhbXAgKi8KKwkJbmlkID0gYWxjODgwX2lkeF90b19kYWMoYWxjODgwX2ZpeGVkX3Bpbl9pZHgocGluKSk7CisJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7CisJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKKwkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLCBIREFfT1VUUFVUKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKKwkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsIG5hbWUsCisJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMiwgSERBX0lOUFVUKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgaWYgKGFsYzg4MF9pc19tdWx0aV9waW4ocGluKSkgeworCQkvKiBzZXQgbWFudWFsIGNvbm5lY3Rpb24gKi8KKwkJLyogd2UgaGF2ZSBvbmx5IGEgc3dpdGNoIG9uIEhQLW91dCBQSU4gKi8KKwkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKKwkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKKwkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwocGluLCAzLCAwLCBIREFfT1VUUFVUKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGNyZWF0ZSBwbGF5YmFjay9jYXB0dXJlIGNvbnRyb2xzIGZvciBpbnB1dCBwaW5zICovCitzdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCisJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCWludCBpLCBlcnIsIGlkeDsKKworCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKKwkJaWYgKGFsYzg4MF9pc19pbnB1dF9waW4oY2ZnLT5pbnB1dF9waW5zW2ldKSkgeworCQkJaWR4ID0gYWxjODgwX2lucHV0X3Bpbl9pZHgoY2ZnLT5pbnB1dF9waW5zW2ldKTsKKwkJCWVyciA9IG5ld19hbmFsb2dfaW5wdXQoc3BlYywgY2ZnLT5pbnB1dF9waW5zW2ldLAorCQkJCQkgICAgICAgYXV0b19waW5fY2ZnX2xhYmVsc1tpXSwKKwkJCQkJICAgICAgIGlkeCwgMHgwYik7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9CisJCQkJYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKKwkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPQorCQkJCWFsYzg4MF9pbnB1dF9waW5faWR4KGNmZy0+aW5wdXRfcGluc1tpXSk7CisJCQlpbXV4LT5udW1faXRlbXMrKzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkLCBpbnQgcGluX3R5cGUsCisJCQkJCSAgICAgIGludCBkYWNfaWR4KQoreworCS8qIHNldCBhcyBvdXRwdXQgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBwaW5fdHlwZSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFKTsKKwkvKiBuZWVkIHRoZSBtYW51YWwgY29ubmVjdGlvbj8gKi8KKwlpZiAoYWxjODgwX2lzX211bHRpX3BpbihuaWQpKSB7CisJCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCQlpbnQgaWR4ID0gYWxjODgwX211bHRpX3Bpbl9pZHgobmlkKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgYWxjODgwX2lkeF90b19zZWxlY3RvcihpZHgpLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKKwkJCQkgICAgYWxjODgwX2RhY190b19pZHgoc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbZGFjX2lkeF0pKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFsYzY2Ml9hdXRvX2luaXRfbXVsdGlfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8PSBIREFfU0lERTsgaSsrKSB7CisJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbaV07CisJCWludCBwaW5fdHlwZSA9IGdldF9waW5fdHlwZShzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUpOworCQlpZiAobmlkKQorCQkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIHBpbl90eXBlLAorCQkJCQkJCSAgaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbGM2NjJfYXV0b19pbml0X2hwX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgcGluOworCisJcGluID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOworCWlmIChwaW4pIC8qIGNvbm5lY3QgdG8gZnJvbnQgKi8KKwkJLyogdXNlIGRhYyAwICovCisJCWFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fSFAsIDApOworfQorCisjZGVmaW5lIGFsYzY2Ml9pc19pbnB1dF9waW4obmlkKQlhbGM4ODBfaXNfaW5wdXRfcGluKG5pZCkKKyNkZWZpbmUgQUxDNjYyX1BJTl9DRF9OSUQJCUFMQzg4MF9QSU5fQ0RfTklECisKK3N0YXRpYyB2b2lkIGFsYzY2Ml9hdXRvX2luaXRfYW5hbG9nX2lucHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgeworCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOworCQlpZiAoYWxjNjYyX2lzX2lucHV0X3BpbihuaWQpKSB7CisJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgICAoaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPworCQkJCQkgICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pKTsKKwkJCWlmIChuaWQgIT0gQUxDNjYyX1BJTl9DRF9OSUQpCisJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBhbGM2NjJfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGVycjsKKwlzdGF0aWMgaGRhX25pZF90IGFsYzY2Ml9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OworCisJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCisJCQkJCSAgIGFsYzY2Ml9pZ25vcmUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCisJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIEJJT1MgcGluIGNvbmZpZyAqLworCisJZXJyID0gYWxjODgwX2F1dG9fZmlsbF9kYWNfbmlkcyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHNwZWMsCisJCQkJCSAgIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdLAorCQkJCQkgICAiU3BlYWtlciIpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3BlYywgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdLAorCQkJCQkgICAiSGVhZHBob25lIik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKKworCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg4MF9ESUdPVVRfTklEOworCisJaWYgKHNwZWMtPmtjdGxfYWxsb2MpCisJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gc3BlYy0+a2N0bF9hbGxvYzsKKworCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwkKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllbHNlIGlmIChlcnIgPiAwKQorCQkvKiBoYWNrIC0gb3ZlcnJpZGUgdGhlIGluaXQgdmVyYnMgKi8KKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGFsYzY2Ml9hdXRvX2luaXRfdmVyYnM7CisJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnNdID0gYWxjNjYyX2NhcHR1cmVfbWl4ZXI7CisJc3BlYy0+bnVtX21peGVycysrOworCXJldHVybiBlcnI7Cit9CisKKy8qIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gZm9yIGF1dG8tY29uZmlndXJhdGlvbiBtb2RlbCAqLworc3RhdGljIHZvaWQgYWxjNjYyX2F1dG9faW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlhbGM2NjJfYXV0b19pbml0X211bHRpX291dChjb2RlYyk7CisJYWxjNjYyX2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOworCWFsYzY2Ml9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKK30KKworc3RhdGljIGludCBwYXRjaF9hbGM2NjIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKKworCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCWlmICghc3BlYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYy0+c3BlYyA9IHNwZWM7CisKKwlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgQUxDNjYyX01PREVMX0xBU1QsCisJCQkJCQkgIGFsYzY2Ml9tb2RlbHMsCisJCQkgIAkgICAgICAgICAgICAgICAgICBhbGM2NjJfY2ZnX3RibCk7CisJaWYgKGJvYXJkX2NvbmZpZyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBBTEM2NjIsICIKKwkJICAgICAgICJ0cnlpbmcgYXV0by1wcm9iZSBmcm9tIEJJT1MuLi5cbiIpOworCQlib2FyZF9jb25maWcgPSBBTEM2NjJfQVVUTzsKKwl9CisKKwlpZiAoYm9hcmRfY29uZmlnID09IEFMQzY2Ml9BVVRPKSB7CisJCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLworCQllcnIgPSBhbGM2NjJfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOworCQlpZiAoZXJyIDwgMCkgeworCQkJYWxjX2ZyZWUoY29kZWMpOworCQkJcmV0dXJuIGVycjsKKwkJfSBlbHNlIGlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAiaGRhX2NvZGVjOiBDYW5ub3Qgc2V0IHVwIGNvbmZpZ3VyYXRpb24gIgorCQkJICAgICAgICJmcm9tIEJJT1MuICBVc2luZyBiYXNlIG1vZGUuLi5cbiIpOworCQkJYm9hcmRfY29uZmlnID0gQUxDNjYyXzNTVF8yY2hfRElHOworCQl9CisJfQorCisJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM2NjJfQVVUTykKKwkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM2NjJfcHJlc2V0c1tib2FyZF9jb25maWddKTsKKworCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEM2NjIgQW5hbG9nIjsKKwlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzY2Ml9wY21fYW5hbG9nX3BsYXliYWNrOworCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGM2NjJfcGNtX2FuYWxvZ19jYXB0dXJlOworCisJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM2NjIgRGlnaXRhbCI7CisJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjNjYyX3BjbV9kaWdpdGFsX3BsYXliYWNrOworCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjNjYyX3BjbV9kaWdpdGFsX2NhcHR1cmU7CisKKwlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgeworCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzY2Ml9hZGNfbmlkczsKKwkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM2NjJfYWRjX25pZHMpOworCX0KKworCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOworCWlmIChib2FyZF9jb25maWcgPT0gQUxDNjYyX0FVVE8pCisJCXNwZWMtPmluaXRfaG9vayA9IGFsYzY2Ml9hdXRvX2luaXQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIHBhdGNoIGVudHJpZXMKICAqLwogc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfcmVhbHRla1tdID0gewogCXsgLmlkID0gMHgxMGVjMDI2MCwgLm5hbWUgPSAiQUxDMjYwIiwgLnBhdGNoID0gcGF0Y2hfYWxjMjYwIH0sCiAJeyAuaWQgPSAweDEwZWMwMjYyLCAubmFtZSA9ICJBTEMyNjIiLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA4NjEsIC5yZXYgPSAweDEwMDM0MCwgLm5hbWUgPSAiQUxDNjYwIiwKLQkJLnBhdGNoID0gcGF0Y2hfYWxjODYxIH0sCisJICAucGF0Y2ggPSBwYXRjaF9hbGM4NjEgfSwKIAl7IC5pZCA9IDB4MTBlYzA2NjAsIC5uYW1lID0gIkFMQzY2MC1WRCIsIC5wYXRjaCA9IHBhdGNoX2FsYzg2MXZkIH0sCiAJeyAuaWQgPSAweDEwZWMwODYxLCAubmFtZSA9ICJBTEM4NjEiLCAucGF0Y2ggPSBwYXRjaF9hbGM4NjEgfSwKIAl7IC5pZCA9IDB4MTBlYzA4NjIsIC5uYW1lID0gIkFMQzg2MS1WRCIsIC5wYXRjaCA9IHBhdGNoX2FsYzg2MXZkIH0sCisJeyAuaWQgPSAweDEwZWMwNjYyLCAucmV2ID0gMHgxMDAwMDIsIC5uYW1lID0gIkFMQzY2MiByZXYyIiwKKwkgIC5wYXRjaCA9IHBhdGNoX2FsYzg4MyB9LAorCXsgLmlkID0gMHgxMGVjMDY2MiwgLnJldiA9IDB4MTAwMTAxLCAubmFtZSA9ICJBTEM2NjIgcmV2MSIsCisJICAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA4ODAsIC5uYW1lID0gIkFMQzg4MCIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MCB9LAogCXsgLmlkID0gMHgxMGVjMDg4MiwgLm5hbWUgPSAiQUxDODgyIiwgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sCiAJeyAuaWQgPSAweDEwZWMwODgzLCAubmFtZSA9ICJBTEM4ODMiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODMgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpMzA1NC5jCmluZGV4IDZmY2RhOWIuLjQzZjUzN2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaTMwNTQuYwpAQCAtMzA0LDYgKzMwNCw4IEBACiAgCXsgLmlkID0gMHgxMDU3MzA1NSwgLm5hbWUgPSAiU2kzMDU0IiwgLnBhdGNoID0gcGF0Y2hfc2kzMDU0IH0sCiAgCXsgLmlkID0gMHgxMDU3MzA1NywgLm5hbWUgPSAiU2kzMDU0IiwgLnBhdGNoID0gcGF0Y2hfc2kzMDU0IH0sCiAgCXsgLmlkID0gMHgxMDU3MzE1NSwgLm5hbWUgPSAiU2kzMDU0IiwgLnBhdGNoID0gcGF0Y2hfc2kzMDU0IH0sCisJLyogQXN1cyBBOEogTW9kZW0gKFNNNTYpICovCisJeyAuaWQgPSAweDE1NDMzMTU1LCAubmFtZSA9ICJTaTMwNTQiLCAucGF0Y2ggPSBwYXRjaF9zaTMwNTQgfSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IGM5NDI5MWIuLmUzOTY0ZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTUxLDYgKzUxLDcgQEAKIAlTVEFDXzkyNXhfUkVGLAogCVNUQUNfTTJfMiwKIAlTVEFDX01BNiwKKwlTVEFDX1BBNiwKIAlTVEFDXzkyNXhfTU9ERUxTCiB9OwogCkBAIC02Miw2ICs2Myw3IEBACiAJU1RBQ19NQUNCT09LLAogCVNUQUNfTUFDQk9PS19QUk9fVjEsCiAJU1RBQ19NQUNCT09LX1BST19WMiwKKwlTVEFDX0lNQUNfSU5URUwsCiAJU1RBQ185MjJYX01PREVMUwogfTsKIApAQCAtMTUxLDYgKzE1MywxMCBAQAogICAgICAgICAweDAyLAogfTsKIAorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI1eF9kbWljX25pZHNbMV0gPSB7CisJMHgxNSwgCit9OworCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5MjJ4X2FkY19uaWRzWzJdID0gewogICAgICAgICAweDA2LCAweDA3LAogfTsKQEAgLTE3NSw4ICsxODEsOCBAQAogICAgICAgICAweDE5LCAweDFhCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MjA1X2RtaWNfbmlkc1szXSA9IHsKLSAgICAgICAgMHgxNywgMHgxOCwgMAorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTIwNV9kbWljX25pZHNbMl0gPSB7CisgICAgICAgIDB4MTcsIDB4MTgsCiB9OwogCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5MjAwX3Bpbl9uaWRzWzhdID0gewpAQCAtNDY2LDYgKzQ3MiwxNiBAQAogCQkgICAgICAiRGVsbCBYUFMgTTE3MTAiLCBTVEFDX1JFRiksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFjZiwKIAkJICAgICAgIkRlbGwgUHJlY2lzaW9uIE05MCIsIFNUQUNfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMWQ2LAorCQkgICAgICAidW5rbm93biBEZWxsIiwgU1RBQ19SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAxZDgsCisJCSAgICAgICJEZWxsIEluc3Bpcm9uIDY0MG0iLCBTVEFDX1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFmNSwKKwkJICAgICAgIkRlbGwgSW5zcGlyb24gMTUwMSIsIFNUQUNfUkVGKSwKKworCS8qIFBhbmFzb25pYyAqLworCVNORF9QQ0lfUVVJUksoMHgxMGY3LCAweDgzMzgsICJQYW5hc29uaWMgQ0YtNzQiLCBTVEFDX1JFRiksCisKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC00NzksMjkgKzQ5NSwzOCBAQAogCTB4OTBhNzAzMjAsIDB4OTAxMDAyMTEsIDB4NDAwMDAzZjEsIDB4OTAzMzAzMmUsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IHN0YWM5MjV4X1BBNl9waW5fY29uZmlnc1s4XSA9IHsKKwkweDQwYzAwM2YwLCAweDQyNDUwM2YyLCAweDAxODEzMDIyLCAweDAyYTE5MDIxLAorCTB4NTBhMTAzZjAsIDB4OTAxMDAyMTEsIDB4NDAwMDAzZjEsIDB4OTAzMzAzMmUsCit9OworCiBzdGF0aWMgdW5zaWduZWQgaW50IHN0YWM5MjV4TTJfMl9waW5fY29uZmlnc1s4XSA9IHsKLQkweDQwYzAwM2YzLCAweDQyNDUwM2YyLCAweDA0MTgwMGY0LCAweDAyYTE5MDIwLAotCTB4NTBhMTAzRjAsIDB4OTAxMDAyMTAsIDB4NDAwMDAzZjEsIDB4OTAzMzAzMmUsCisJMHg0MGMwMDNmMywgMHg0MjQ1MDNmMiwgMHgwNDE4MDAxMSwgMHgwMmExOTAyMCwKKwkweDUwYTEwM2YwLCAweDkwMTAwMjEyLCAweDQwMDAwM2YxLCAweDkwMzMwMzJlLAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzkyNXhfYnJkX3RibFtTVEFDXzkyNXhfTU9ERUxTXSA9IHsKIAlbU1RBQ19SRUZdID0gcmVmOTI1eF9waW5fY29uZmlncywKIAlbU1RBQ19NMl8yXSA9IHN0YWM5MjV4TTJfMl9waW5fY29uZmlncywKIAlbU1RBQ19NQTZdID0gc3RhYzkyNXhfTUE2X3Bpbl9jb25maWdzLAorCVtTVEFDX1BBNl0gPSBzdGFjOTI1eF9QQTZfcGluX2NvbmZpZ3MsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyNXhfbW9kZWxzW1NUQUNfOTI1eF9NT0RFTFNdID0gewogCVtTVEFDX1JFRl0gPSAicmVmIiwKIAlbU1RBQ19NMl8yXSA9ICJtMi0yIiwKIAlbU1RBQ19NQTZdID0gIm02IiwKKwlbU1RBQ19QQTZdID0gInBhNiIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyNXhfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LCAiREZJIExhblBhcnR5IiwgU1RBQ19SRUYpLAorCVNORF9QQ0lfUVVJUksoMHg4Mzg0LCAweDc2MzIsICJTdGFjOTIwMiBSZWZlcmVuY2UgQm9hcmQiLCBTVEFDX1JFRiksCiAJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MDMxNiwgIkdhdGV3YXkgTTI1NSIsIFNUQUNfUkVGKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA3YiwgMHgwMzY2LCAiR2F0ZXdheSBNUDY5NTQiLCBTVEFDX1JFRiksCiAJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MDQ2MSwgIkdhdGV3YXkgTlg1NjBYTCIsIFNUQUNfTUE2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA3YiwgMHgwNjgxLCAiR2F0ZXdheSBOWDg2MCIsIFNUQUNfUEE2KSwKIAlTTkRfUENJX1FVSVJLKDB4MTAwMiwgMHg0MzdiLCAiR2F0ZXdheSBNWDY0NTMiLCBTVEFDX00yXzIpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CkBAIC01MjQsMTIgKzU0OSw2IEBACiAJMHgwMmExOTMyMCwgMHg0MDAwMDEwMCwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWFjYm9va19waW5fY29uZmlnc1sxMF0gPSB7Ci0JMHgwMzIxZTIzMCwgMHgwM2ExZTAyMCwgMHg0MDAwMDBmZCwgMHg5MDE3ZTExMCwKLQkweDQwMDAwMGZlLCAweDAzODFlMDIxLCAweDEzNDVlMjQwLCAweDEzYzVlMjJlLAotCTB4NDAwMDAwZmMsIDB4NDAwMDAwZmIsCi19OwotCiBzdGF0aWMgdW5zaWduZWQgaW50IG1hY2Jvb2tfcHJvX3YxX3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAzMjFlMjMwLCAweDAzYTFlMDIwLCAweDkwMTdlMTEwLCAweDAxMDE0MDEwLAogCTB4MDFhMTkwMjEsIDB4MDM4MWUwMjEsIDB4MTM0NWUyNDAsIDB4MTNjNWUyMmUsCkBAIC01NDIsMTQgKzU2MSwyMSBAQAogCTB4NDAwMDAwZmMsIDB4NDAwMDAwZmIsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGltYWNfaW50ZWxfcGluX2NvbmZpZ3NbMTBdID0geworCTB4MDEyMWUyMzAsIDB4OTBhNzAxMjAsIDB4OTAxN2UxMTAsIDB4NDAwMDAwZmUsCisJMHg0MDAwMDBmZCwgMHgwMTgxZTAyMSwgMHgxMTQ1ZTA0MCwgMHg0MDAwMDBmYSwKKwkweDQwMDAwMGZjLCAweDQwMDAwMGZiLAorfTsKKwogc3RhdGljIHVuc2lnbmVkIGludCAqc3RhYzkyMnhfYnJkX3RibFtTVEFDXzkyMlhfTU9ERUxTXSA9IHsKIAlbU1RBQ19EOTQ1X1JFRl0gPSByZWY5MjJ4X3Bpbl9jb25maWdzLAogCVtTVEFDX0Q5NDVHVFAzXSA9IGQ5NDVndHAzX3Bpbl9jb25maWdzLAogCVtTVEFDX0Q5NDVHVFA1XSA9IGQ5NDVndHA1X3Bpbl9jb25maWdzLAotCVtTVEFDX01BQ01JTkldID0gZDk0NWd0cDVfcGluX2NvbmZpZ3MsCi0JW1NUQUNfTUFDQk9PS10gPSBtYWNib29rX3Bpbl9jb25maWdzLAorCVtTVEFDX01BQ01JTkldID0gbWFjYm9va19wcm9fdjFfcGluX2NvbmZpZ3MsCisJW1NUQUNfTUFDQk9PS10gPSBtYWNib29rX3Byb192MV9waW5fY29uZmlncywKIAlbU1RBQ19NQUNCT09LX1BST19WMV0gPSBtYWNib29rX3Byb192MV9waW5fY29uZmlncywKIAlbU1RBQ19NQUNCT09LX1BST19WMl0gPSBtYWNib29rX3Byb192Ml9waW5fY29uZmlncywKKwlbU1RBQ19JTUFDX0lOVEVMXSA9IGltYWNfaW50ZWxfcGluX2NvbmZpZ3MsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyMnhfbW9kZWxzW1NUQUNfOTIyWF9NT0RFTFNdID0gewpAQCAtNTYwLDYgKzU4Niw3IEBACiAJW1NUQUNfTUFDQk9PS10JPSAibWFjYm9vayIsCiAJW1NUQUNfTUFDQk9PS19QUk9fVjFdCT0gIm1hY2Jvb2stcHJvLXYxIiwKIAlbU1RBQ19NQUNCT09LX1BST19WMl0JPSAibWFjYm9vay1wcm8iLAorCVtTVEFDX0lNQUNfSU5URUxdID0gImltYWMtaW50ZWwiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjJ4X2NmZ190YmxbXSA9IHsKQEAgLTgyMCw2ICs4NDcsMTcgQEAKIAlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfZGlnX2Nsb3NlKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQpOwogfQogCitzdGF0aWMgaW50IHN0YWM5Mnh4X2RpZ19wbGF5YmFja19wY21fcHJlcGFyZShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCQkgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSB1bnNpZ25lZCBpbnQgc3RyZWFtX3RhZywKKwkJCQkJIHVuc2lnbmVkIGludCBmb3JtYXQsCisJCQkJCSBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfcHJlcGFyZShjb2RlYywgJnNwZWMtPm11bHRpb3V0LAorCQkJCQkgICAgIHN0cmVhbV90YWcsIGZvcm1hdCwgc3Vic3RyZWFtKTsKK30KKwogCiAvKgogICogQW5hbG9nIGNhcHR1cmUgY2FsbGJhY2tzCkBAIC04NTQsNyArODkyLDggQEAKIAkvKiBOSUQgaXMgc2V0IGluIHN0YWM5Mnh4X2J1aWxkX3BjbXMgKi8KIAkub3BzID0gewogCQkub3BlbiA9IHN0YWM5Mnh4X2RpZ19wbGF5YmFja19wY21fb3BlbiwKLQkJLmNsb3NlID0gc3RhYzkyeHhfZGlnX3BsYXliYWNrX3BjbV9jbG9zZQorCQkuY2xvc2UgPSBzdGFjOTJ4eF9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlLAorCQkucHJlcGFyZSA9IHN0YWM5Mnh4X2RpZ19wbGF5YmFja19wY21fcHJlcGFyZQogCX0sCiB9OwogCkBAIC0xMDU1LDExICsxMDk0LDIzIEBACiBzdGF0aWMgaW50IHN0YWM5Mnh4X2FkZF9keW5fb3V0X3BpbnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCB3Y2Fwcywgd3R5cGU7CisJaW50IGksIG51bV9kYWNzID0gMDsKKwkKKwkvKiB1c2UgdGhlIHdjYXBzIGNhY2hlIHRvIGNvdW50IGFsbCBEQUNzIGF2YWlsYWJsZSBmb3IgbGluZS1vdXRzICovCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fbm9kZXM7IGkrKykgeworCQl3Y2FwcyA9IGNvZGVjLT53Y2Fwc1tpXTsKKwkJd3R5cGUgPSAod2NhcHMgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsKKwkJaWYgKHd0eXBlID09IEFDX1dJRF9BVURfT1VUICYmICEod2NhcHMgJiBBQ19XQ0FQX0RJR0lUQUwpKQorCQkJbnVtX2RhY3MrKzsKKwl9CiAKKwlzbmRfcHJpbnRkZCgiJXM6IHRvdGFsIGRhYyBjb3VudD0lZFxuIiwgX19mdW5jX18sIG51bV9kYWNzKTsKKwkKIAlzd2l0Y2ggKGNmZy0+bGluZV9vdXRzKSB7CiAJY2FzZSAzOgogCQkvKiBhZGQgbGluZS1pbiBhcyBzaWRlICovCi0JCWlmIChjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTElORV0pIHsKKwkJaWYgKGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9MSU5FXSAmJiBudW1fZGFjcyA+IDMpIHsKIAkJCWNmZy0+bGluZV9vdXRfcGluc1szXSA9IGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9MSU5FXTsKIAkJCXNwZWMtPmxpbmVfc3dpdGNoID0gMTsKIAkJCWNmZy0+bGluZV9vdXRzKys7CkBAIC0xMDY3LDEyICsxMTE4LDEyIEBACiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJLyogYWRkIGxpbmUtaW4gYXMgY2xmZSBhbmQgbWljIGFzIHNpZGUgKi8KLQkJaWYgKGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9MSU5FXSkgeworCQlpZiAoY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0xJTkVdICYmIG51bV9kYWNzID4gMikgewogCQkJY2ZnLT5saW5lX291dF9waW5zWzJdID0gY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0xJTkVdOwogCQkJc3BlYy0+bGluZV9zd2l0Y2ggPSAxOwogCQkJY2ZnLT5saW5lX291dHMrKzsKIAkJfQotCQlpZiAoY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX01JQ10pIHsKKwkJaWYgKGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdICYmIG51bV9kYWNzID4gMykgewogCQkJY2ZnLT5saW5lX291dF9waW5zWzNdID0gY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX01JQ107CiAJCQlzcGVjLT5taWNfc3dpdGNoID0gMTsKIAkJCWNmZy0+bGluZV9vdXRzKys7CkBAIC0xMDgwLDEyICsxMTMxLDEyIEBACiAJCWJyZWFrOwogCWNhc2UgMToKIAkJLyogYWRkIGxpbmUtaW4gYXMgc3VyciBhbmQgbWljIGFzIGNsZmUgKi8KLQkJaWYgKGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9MSU5FXSkgeworCQlpZiAoY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0xJTkVdICYmIG51bV9kYWNzID4gMSkgewogCQkJY2ZnLT5saW5lX291dF9waW5zWzFdID0gY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0xJTkVdOwogCQkJc3BlYy0+bGluZV9zd2l0Y2ggPSAxOwogCQkJY2ZnLT5saW5lX291dHMrKzsKIAkJfQotCQlpZiAoY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX01JQ10pIHsKKwkJaWYgKGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdICYmIG51bV9kYWNzID4gMikgewogCQkJY2ZnLT5saW5lX291dF9waW5zWzJdID0gY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX01JQ107CiAJCQlzcGVjLT5taWNfc3dpdGNoID0gMTsKIAkJCWNmZy0+bGluZV9vdXRzKys7CkBAIC0xMDk2LDMzICsxMTQ3LDc2IEBACiAJcmV0dXJuIDA7CiB9CiAKKworc3RhdGljIGludCBpc19pbl9kYWNfbmlkcyhzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywgaGRhX25pZF90IG5pZCkKK3sKKwlpbnQgaTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3M7IGkrKykgeworCQlpZiAoc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPT0gbmlkKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qCi0gKiBYWFggVGhlIGxpbmVfb3V0IHBpbiB3aWRnZXQgY29ubmVjdGlvbiBsaXN0IG1heSBub3QgYmUgc2V0IHRvIHRoZQotICogZGVzaXJlZCBEQUMgbmlkLiBUaGlzIGlzIHRoZSBjYXNlIG9uIDkyN3ggd2hlcmUgcG9ydHMgQSBhbmQgQiBjYW4KLSAqIGJlIHJvdXRlZCB0byBzZXZlcmFsIERBQ3MuCi0gKgotICogVGhpcyByZXF1aXJlcyBhbiBhbmFseXNpcyBvZiB0aGUgbGluZS1vdXQvaHAgcGluIGNvbmZpZ3VyYXRpb24KLSAqIHRvIHByb3ZpZGUgYSBiZXN0IGZpdCBmb3IgcGluL0RBQyBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByb3V0YWJsZS4KLSAqIEZvciBub3csIDkyN3ggREFDNCBpcyBub3Qgc3VwcG9ydGVkIGFuZCA5Mjd4IERBQzEgb3V0cHV0IHRvIHBvcnRzCi0gKiBBIGFuZCBCIGlzIG5vdCBzdXBwb3J0ZWQuCisgKiBGaWxsIGluIHRoZSBkYWNfbmlkcyB0YWJsZSBmcm9tIHRoZSBwYXJzZWQgcGluIGNvbmZpZ3VyYXRpb24KKyAqIFRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aGVuIGV2ZXJ5IHBpbiBpbiBsaW5lX291dF9waW5zW10KKyAqIGNvbnRhaW5zIGF0bGVhc3Qgb25lIERBQyBpbiBpdHMgY29ubmVjdGlvbiBsaXN0LiBTb21lIDkyeHgKKyAqIGNvZGVjcyBhcmUgbm90IGNvbm5lY3RlZCBkaXJlY3RseSB0byBhIERBQywgc3VjaCBhcyB0aGUgOTIwMAorICogYW5kIDkyMDIvOTI1eC4gRm9yIHRob3NlLCBkYWNfbmlkc1tdIG11c3QgYmUgaGFyZC1jb2RlZC4KICAqLwotLyogZmlsbCBpbiB0aGUgZGFjX25pZHMgdGFibGUgZnJvbSB0aGUgcGFyc2VkIHBpbiBjb25maWd1cmF0aW9uICovCiBzdGF0aWMgaW50IHN0YWM5Mnh4X2F1dG9fZmlsbF9kYWNfbmlkcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IG5pZDsKLQlpbnQgaTsKLQotCS8qIGNoZWNrIHRoZSBwaW5zIGhhcmR3aXJlZCB0byBhdWRpbyB3aWRnZXQgKi8KKwlpbnQgaSwgaiwgY29ubl9sZW4gPSAwOyAKKwloZGFfbmlkX3QgbmlkLCBjb25uW0hEQV9NQVhfQ09OTkVDVElPTlNdOworCXVuc2lnbmVkIGludCB3Y2Fwcywgd3R5cGU7CisJCiAJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKIAkJbmlkID0gY2ZnLT5saW5lX291dF9waW5zW2ldOwotCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQlBQ19WRVJCX0dFVF9DT05ORUNUX0xJU1QsIDApICYgMHhmZjsKKwkJY29ubl9sZW4gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uLAorCQkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7CisJCWZvciAoaiA9IDA7IGogPCBjb25uX2xlbjsgaisrKSB7CisJCQl3Y2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgY29ubltqXSwKKwkJCQkJCSAgIEFDX1BBUl9BVURJT19XSURHRVRfQ0FQKTsKKwkJCXd0eXBlID0gKHdjYXBzICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7CisKKwkJCWlmICh3dHlwZSAhPSBBQ19XSURfQVVEX09VVCB8fAorCQkJICAgICh3Y2FwcyAmIEFDX1dDQVBfRElHSVRBTCkpCisJCQkJY29udGludWU7CisJCQkvKiBjb25uW2pdIGlzIGEgREFDIHJvdXRlZCB0byB0aGlzIGxpbmUtb3V0ICovCisJCQlpZiAoIWlzX2luX2RhY19uaWRzKHNwZWMsIGNvbm5bal0pKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGogPT0gY29ubl9sZW4pIHsKKwkJCS8qIGVycm9yIG91dCwgbm8gYXZhaWxhYmxlIERBQyBmb3VuZCAqLworCQkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJCSAgICIlczogTm8gYXZhaWxhYmxlIERBQyBmb3IgcGluIDB4JXhcbiIsCisJCQkJICAgX19mdW5jX18sIG5pZCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldID0gY29ubltqXTsKKwkJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MrKzsKKwkJaWYgKGNvbm5fbGVuID4gMSkgeworCQkJLyogc2VsZWN0IHRoaXMgREFDIGluIHRoZSBwaW4ncyBpbnB1dCBtdXggKi8KKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICAgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBqKTsKKworCQl9CiAJfQogCi0Jc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBjZmctPmxpbmVfb3V0czsKLQorCXNuZF9wcmludGQoImRhY19uaWRzPSVkICgweCV4LzB4JXgvMHgleC8weCV4LzB4JXgpXG4iLAorCQkgICBzcGVjLT5tdWx0aW91dC5udW1fZGFjcywKKwkJICAgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0sCisJCSAgIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzFdLAorCQkgICBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1syXSwKKwkJICAgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbM10sCisJCSAgIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzRdKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE4OSwxMiArMTI4Myw4IEBACiAKIHN0YXRpYyBpbnQgY2hlY2tfaW5fZGFjX25pZHMoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBuaWQpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3M7IGkrKykgewotCQlpZiAoc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPT0gbmlkKQotCQkJcmV0dXJuIDE7Ci0JfQorCWlmIChpc19pbl9kYWNfbmlkcyhzcGVjLCBuaWQpKQorCQlyZXR1cm4gMTsKIAlpZiAoc3BlYy0+bXVsdGlvdXQuaHBfbmlkID09IG5pZCkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CkBAIC0xMjM2LDEyICsxMzI2LDEwIEBACiAJCWFkZF9zcGVjX2RhY3Moc3BlYywgbmlkKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IGNmZy0+c3BlYWtlcl9vdXRzOyBpKyspIHsKLQkJbmlkID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBjZmctPnNwZWFrZXJfcGluc1swXSwgMCwKKwkJbmlkID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBjZmctPnNwZWFrZXJfcGluc1tpXSwgMCwKIAkJCQkJIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfTElTVCwgMCkgJiAweGZmOwogCQlpZiAoY2hlY2tfaW5fZGFjX25pZHMoc3BlYywgbmlkKSkKIAkJCW5pZCA9IDA7Ci0JCWlmIChjaGVja19pbl9kYWNfbmlkcyhzcGVjLCBuaWQpKQotCQkJbmlkID0gMDsKIAkJaWYgKCEgbmlkKQogCQkJY29udGludWU7CiAJCWFkZF9zcGVjX2RhY3Moc3BlYywgbmlkKTsKQEAgLTEzNTUsNyArMTQ0Myw3IEBACiAJCWltdXgtPm51bV9pdGVtcysrOwogCX0KIAotCWlmIChpbXV4LT5udW1faXRlbXMgPT0gMSkgeworCWlmIChpbXV4LT5udW1faXRlbXMpIHsKIAkJLyoKIAkJICogU2V0IHRoZSBjdXJyZW50IGlucHV0IGZvciB0aGUgbXV4ZXMuCiAJCSAqIFRoZSBTVEFDOTIyMSBoYXMgdHdvIGlucHV0IG11eGVzIHdpdGggaWRlbnRpY2FsIHNvdXJjZQpAQCAtMTY3NSw4ICsxNzYzLDI3IEBACiB7CiAJdW5zaWduZWQgaW50IHBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKIAkJCTAsIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCk7Ci0JaWYgKGZsYWcgPT0gQUNfUElOQ1RMX09VVF9FTiAmJiAocGluX2N0bCAmIEFDX1BJTkNUTF9JTl9FTikpCi0JCXJldHVybjsKKworCWlmIChwaW5fY3RsICYgQUNfUElOQ1RMX0lOX0VOKSB7CisJCS8qCisJCSAqIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGN1cnJlbnQgc2V0LXVwIGRpcmVjdGlvbiBvZgorCQkgKiBzaGFyZWQgaW5wdXQgcGlucyBzaW5jZSB0aGV5IGNhbiBiZSBzd2l0Y2hlZCB2aWEKKwkJICogInh4eCBhcyBPdXRwdXQiIG1peGVyIHN3aXRjaAorCQkgKi8KKwkJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwkJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CisJCWlmICgobmlkID09IGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9MSU5FXSAmJgorCQkgICAgIHNwZWMtPmxpbmVfc3dpdGNoKSB8fAorCQkgICAgKG5pZCA9PSBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSAmJgorCQkgICAgIHNwZWMtPm1pY19zd2l0Y2gpKQorCQkJcmV0dXJuOworCX0KKworCS8qIGlmIHNldHRpbmcgcGluIGRpcmVjdGlvbiBiaXRzLCBjbGVhciB0aGUgY3VycmVudAorCSAgIGRpcmVjdGlvbiBiaXRzIGZpcnN0ICovCisJaWYgKGZsYWcgJiAoQUNfUElOQ1RMX0lOX0VOIHwgQUNfUElOQ1RMX09VVF9FTikpCisJCXBpbl9jdGwgJj0gfihBQ19QSU5DVExfSU5fRU4gfCBBQ19QSU5DVExfT1VUX0VOKTsKKwkKIAlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCiAJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCiAJCQlwaW5fY3RsIHwgZmxhZyk7CkBAIC0xNzUxLDYgKzE4NTgsNyBAQAogCiAJc3RhYzkyeHhfaW5pdChjb2RlYyk7CiAJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjKTsKKwlzbmRfaGRhX3Jlc3VtZV9jdGxzKGNvZGVjLCBzcGVjLT5taXhlcik7CiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9taXhlcnM7IGkrKykKIAkJc25kX2hkYV9yZXN1bWVfY3Rscyhjb2RlYywgc3BlYy0+bWl4ZXJzW2ldKTsKIAlpZiAoc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpCkBAIC0xODQwLDcgKzE5NDgsOCBAQAogCQkJCQkJCXN0YWM5MjV4X2NmZ190YmwpOwogIGFnYWluOgogCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7Ci0JCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTI1eCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7CisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTI1eCwiIAorCQkJCSAgICAgICJ1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKIAkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwpAQCAtMTg1OCw3ICsxOTY3LDE4IEBACiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTI1eF9hZGNfbmlkczsKIAlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5MjV4X211eF9uaWRzOwogCXNwZWMtPm51bV9tdXhlcyA9IDE7Ci0Jc3BlYy0+bnVtX2RtaWNzID0gMDsKKwlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKKwljYXNlIDB4ODM4NDc2MzI6IC8qIFNUQUM5MjAyICAqLworCWNhc2UgMHg4Mzg0NzYzMzogLyogU1RBQzkyMDJEICovCisJY2FzZSAweDgzODQ3NjM2OiAvKiBTVEFDOTI1MSAgKi8KKwljYXNlIDB4ODM4NDc2Mzc6IC8qIFNUQUM5MjUxRCAqLworCQlzcGVjLT5udW1fZG1pY3MgPSAxOworCQlzcGVjLT5kbWljX25pZHMgPSBzdGFjOTI1eF9kbWljX25pZHM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwZWMtPm51bV9kbWljcyA9IDA7CisJCWJyZWFrOworCX0KIAogCXNwZWMtPmluaXQgPSBzdGFjOTI1eF9jb3JlX2luaXQ7CiAJc3BlYy0+bWl4ZXIgPSBzdGFjOTI1eF9taXhlcjsKQEAgLTE5MDUsMTIgKzIwMjUsMTggQEAKIAkJICovCiAJCXByaW50ayhLRVJOX0lORk8gImhkYV9jb2RlYzogU1RBQzkyMngsIEFwcGxlIHN1YnN5c19pZD0leFxuIiwgY29kZWMtPnN1YnN5c3RlbV9pZCk7CiAJCXN3aXRjaCAoY29kZWMtPnN1YnN5c3RlbV9pZCkgeworCQljYXNlIDB4MTA2YjBhMDA6IC8qIE1hY0Jvb2sgRmlyc3QgZ2VuZXJhdG9pbiAqLworCQkJc3BlYy0+Ym9hcmRfY29uZmlnID0gU1RBQ19NQUNCT09LOworCQkJYnJlYWs7CiAJCWNhc2UgMHgxMDZiMDIwMDogLyogTWFjQm9vayBQcm8gZmlyc3QgZ2VuZXJhdGlvbiAqLwogCQkJc3BlYy0+Ym9hcmRfY29uZmlnID0gU1RBQ19NQUNCT09LX1BST19WMTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MTA2YjFlMDA6IC8qIE1hY0Jvb2sgUHJvIHNlY29uZCBnZW5lcmF0aW9uICovCiAJCQlzcGVjLT5ib2FyZF9jb25maWcgPSBTVEFDX01BQ0JPT0tfUFJPX1YyOwogCQkJYnJlYWs7CisJCWNhc2UgMHgxMDZiMDcwMDogLyogSW50ZWwtYmFzZWQgaU1hYyAqLworCQkJc3BlYy0+Ym9hcmRfY29uZmlnID0gU1RBQ19JTUFDX0lOVEVMOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTE5MzEsNyArMjA1Nyw3IEBACiAKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MjJ4X2FkY19uaWRzOwogCXNwZWMtPm11eF9uaWRzID0gc3RhYzkyMnhfbXV4X25pZHM7Ci0Jc3BlYy0+bnVtX211eGVzID0gMjsKKwlzcGVjLT5udW1fbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MjJ4X211eF9uaWRzKTsKIAlzcGVjLT5udW1fZG1pY3MgPSAwOwogCiAJc3BlYy0+aW5pdCA9IHN0YWM5MjJ4X2NvcmVfaW5pdDsKQEAgLTE5OTIsNyArMjExOCw3IEBACiAJY2FzZSBTVEFDX0Q5NjVfM1NUOgogCQlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5Mjd4X2FkY19uaWRzOwogCQlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5Mjd4X211eF9uaWRzOwotCQlzcGVjLT5udW1fbXV4ZXMgPSAzOworCQlzcGVjLT5udW1fbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5Mjd4X211eF9uaWRzKTsKIAkJc3BlYy0+bnVtX2RtaWNzID0gMDsKIAkJc3BlYy0+aW5pdCA9IGQ5NjVfY29yZV9pbml0OwogCQlzcGVjLT5taXhlciA9IHN0YWM5MjI3X21peGVyOwpAQCAtMjAwMCw3ICsyMTI2LDcgQEAKIAljYXNlIFNUQUNfRDk2NV81U1Q6CiAJCXNwZWMtPmFkY19uaWRzID0gc3RhYzkyN3hfYWRjX25pZHM7CiAJCXNwZWMtPm11eF9uaWRzID0gc3RhYzkyN3hfbXV4X25pZHM7Ci0JCXNwZWMtPm51bV9tdXhlcyA9IDM7CisJCXNwZWMtPm51bV9tdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyN3hfbXV4X25pZHMpOwogCQlzcGVjLT5udW1fZG1pY3MgPSAwOwogCQlzcGVjLT5pbml0ID0gZDk2NV9jb3JlX2luaXQ7CiAJCXNwZWMtPm1peGVyID0gc3RhYzkyMjdfbWl4ZXI7CkBAIC0yMDA4LDcgKzIxMzQsNyBAQAogCWRlZmF1bHQ6CiAJCXNwZWMtPmFkY19uaWRzID0gc3RhYzkyN3hfYWRjX25pZHM7CiAJCXNwZWMtPm11eF9uaWRzID0gc3RhYzkyN3hfbXV4X25pZHM7Ci0JCXNwZWMtPm51bV9tdXhlcyA9IDM7CisJCXNwZWMtPm51bV9tdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyN3hfbXV4X25pZHMpOwogCQlzcGVjLT5udW1fZG1pY3MgPSAwOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyN3hfY29yZV9pbml0OwogCQlzcGVjLT5taXhlciA9IHN0YWM5Mjd4X21peGVyOwpAQCAtMjAzMyw2ICsyMTU5LDEzIEBACiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzkyeHhfcGF0Y2hfb3BzOwogCisJLyogRml4IE11eCBjYXB0dXJlIGxldmVsOyBtYXggdG8gMiAqLworCXNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MTIsIEhEQV9PVVRQVVQsCisJCQkJICAoMCA8PCBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKSB8CisJCQkJICAoMiA8PCBBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUKSB8CisJCQkJICAoMHgyNyA8PCBBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUKSB8CisJCQkJICAoMCA8PCBBQ19BTVBDQVBfTVVURV9TSElGVCkpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNjcsOSArMjIwMCw5IEBACiAKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MjA1X2FkY19uaWRzOwogCXNwZWMtPm11eF9uaWRzID0gc3RhYzkyMDVfbXV4X25pZHM7Ci0Jc3BlYy0+bnVtX211eGVzID0gMjsKKwlzcGVjLT5udW1fbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MjA1X211eF9uaWRzKTsKIAlzcGVjLT5kbWljX25pZHMgPSBzdGFjOTIwNV9kbWljX25pZHM7Ci0Jc3BlYy0+bnVtX2RtaWNzID0gMjsKKwlzcGVjLT5udW1fZG1pY3MgPSBBUlJBWV9TSVpFKHN0YWM5MjA1X2RtaWNfbmlkcyk7CiAJc3BlYy0+ZG11eF9uaWQgPSAweDFkOwogCiAJc3BlYy0+aW5pdCA9IHN0YWM5MjA1X2NvcmVfaW5pdDsKQEAgLTIyOTQsNiArMjQyNyw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFlNiwgIlNvbnkgVkFJTyBGL1MiLCBDWEQ5ODcyUkRfVkFJTyksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFlZiwgIlNvbnkgVkFJTyBGL1MiLCBDWEQ5ODcyUkRfVkFJTyksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODFmZCwgIlNvbnkgVkFJTyBBUiIsIENYRDk4NzJBS0RfVkFJTyksCisJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODIwNSwgIlNvbnkgVkFJTyBBUiIsIENYRDk4NzJBS0RfVkFJTyksCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCmluZGV4IDJiMTFhYzguLmJhMzJkMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwpAQCAtMzc3LDYgKzM3NywxNyBAQAogCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfY2xvc2UoY29kZWMsICZzcGVjLT5tdWx0aW91dCk7CiB9CiAKK3N0YXRpYyBpbnQgdmlhX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJdW5zaWduZWQgaW50IHN0cmVhbV90YWcsCisJCQkJCXVuc2lnbmVkIGludCBmb3JtYXQsCisJCQkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfcHJlcGFyZShjb2RlYywgJnNwZWMtPm11bHRpb3V0LAorCQkJCQkgICAgIHN0cmVhbV90YWcsIGZvcm1hdCwgc3Vic3RyZWFtKTsKK30KKwogLyoKICAqIEFuYWxvZyBjYXB0dXJlCiAgKi8KQEAgLTQzMyw3ICs0NDQsOCBAQAogCS8qIE5JRCBpcyBzZXQgaW4gdmlhX2J1aWxkX3BjbXMgKi8KIAkub3BzID0gewogCQkub3BlbiA9IHZpYV9kaWdfcGxheWJhY2tfcGNtX29wZW4sCi0JCS5jbG9zZSA9IHZpYV9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlCisJCS5jbG9zZSA9IHZpYV9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlLAorCQkucHJlcGFyZSA9IHZpYV9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmUKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvYW1wLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYwppbmRleCA2ZTIyZDMyLi40NGJiYjYzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYwpAQCAtNzUsNyArNzUsNyBAQAogCiAKIC8qIGVudHJ5IHBvaW50ICovCi1jb25zdCBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF92dDE3MjRfYW1wX2NhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX3Z0MTcyNF9hbXBfY2FyZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLnN1YnZlbmRvciA9IFZUMTcyNF9TVUJERVZJQ0VfQVY3MTAsCiAJCS5uYW1lID0gIkNoYWludGVjaCBBVi03MTAiLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvYW1wLmggYi9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuaAppbmRleCA3YjY2N2JhLi5hMGZjODliIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuaAorKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuaApAQCAtNDIsNyArNDIsNyBAQAogI2RlZmluZSBXTV9EQUNfQ1RSTAkweDAyCiAjZGVmaW5lIFdNX0lOVF9DVFJMCTB4MDMKIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gIHNuZF92dDE3MjRfYW1wX2NhcmRzW107CitleHRlcm4gc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAgc25kX3Z0MTcyNF9hbXBfY2FyZHNbXTsKIAogCiAjZW5kaWYgLyogX19TT1VORF9BTVBfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYwppbmRleCA2OTQxZDg1Li42NmJhY2RlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYwpAQCAtMTQxMSw3ICsxNDExLDcgQEAKICAqIG1peGVycwogICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhdXJlb25fZGFjX2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhdXJlb25fZGFjX2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKQEAgLTE1MjYsNyArMTUyNiw3IEBACiAJfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtX2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bV9jb250cm9sc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAgCXsKICAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJQQ00gUGxheWJhY2sgU3dpdGNoIiwKQEAgLTE1OTIsNyArMTU5Miw3IEBACiAJfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFjOTdfY29udHJvbHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFjOTdfY29udHJvbHNbXSBfX2RldmluaXRkYXRhID0gewogIAl7CiAgCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiQUM5NyBQbGF5YmFjayBTd2l0Y2giLApAQCAtMTY5Nyw3ICsxNjk3LDcgQEAKICAJfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHVuaXZlcnNlX2FjOTdfY29udHJvbHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHVuaXZlcnNlX2FjOTdfY29udHJvbHNbXSBfX2RldmluaXRkYXRhID0gewogIAl7CiAgCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiQUM5NyBQbGF5YmFjayBTd2l0Y2giLApAQCAtMTgyOSw3ICsxODI5LDcgQEAKIAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNzODQxNV9jb250cm9sc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3M4NDE1X2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixDQVBUVVJFLFNXSVRDSCksCkBAIC0yMTA3LDcgKzIxMDcsNyBAQAogICogaGVuY2UgdGhlIGRyaXZlciBuZWVkcyB0byBzZXRzIHVwIGl0IHByb3Blcmx5LgogICovCiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGF1cmVvbjUxX2VlcHJvbVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgdW5zaWduZWQgY2hhciBhdXJlb241MV9lZXByb21bXSBfX2RldmluaXRkYXRhID0gewogCVtJQ0VfRUVQMl9TWVNDT05GXSAgICAgPSAweDBhLAkvKiBjbG9jayA1MTIsIHNwZGlmLWluL0FEQywgM0RBQ3MgKi8KIAlbSUNFX0VFUDJfQUNMSU5LXSAgICAgID0gMHg4MCwJLyogSTJTICovCiAJW0lDRV9FRVAyX0kyU10gICAgICAgICA9IDB4ZmMsCS8qIHZvbCwgOTZrLCAyNGJpdCwgMTkyayAqLwpAQCAtMjEyMyw3ICsyMTIzLDcgQEAKIAlbSUNFX0VFUDJfR1BJT19TVEFURTJdID0gMHgwMCwKIH07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGF1cmVvbjcxX2VlcHJvbVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgdW5zaWduZWQgY2hhciBhdXJlb243MV9lZXByb21bXSBfX2RldmluaXRkYXRhID0gewogCVtJQ0VfRUVQMl9TWVNDT05GXSAgICAgPSAweDBiLAkvKiBjbG9jayA1MTIsIHNwZGlmLWluL0FEQywgNERBQ3MgKi8KIAlbSUNFX0VFUDJfQUNMSU5LXSAgICAgID0gMHg4MCwJLyogSTJTICovCiAJW0lDRV9FRVAyX0kyU10gICAgICAgICA9IDB4ZmMsCS8qIHZvbCwgOTZrLCAyNGJpdCwgMTkyayAqLwpAQCAtMjE0MCw3ICsyMTQwLDcgQEAKIH07CiAjZGVmaW5lIHByb2RpZ3k3MV9lZXByb20gYXVyZW9uNzFfZWVwcm9tCiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHByb2RpZ3k3MWx0X2VlcHJvbVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgdW5zaWduZWQgY2hhciBwcm9kaWd5NzFsdF9lZXByb21bXSBfX2RldmluaXRkYXRhID0gewogCVtJQ0VfRUVQMl9TWVNDT05GXSAgICAgPSAweDRiLAkvKiBjbG9jayAzODQsIHNwZGlmLWluL0FEQywgNERBQ3MgKi8KIAlbSUNFX0VFUDJfQUNMSU5LXSAgICAgID0gMHg4MCwJLyogSTJTICovCiAJW0lDRV9FRVAyX0kyU10gICAgICAgICA9IDB4ZmMsCS8qIHZvbCwgOTZrLCAyNGJpdCwgMTkyayAqLwpAQCAtMjE1OCw3ICsyMTU4LDcgQEAKICNkZWZpbmUgcHJvZGlneTcxeHRfZWVwcm9tIHByb2RpZ3k3MWx0X2VlcHJvbQogCiAvKiBlbnRyeSBwb2ludCAqLwotY29uc3Qgc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyBzbmRfdnQxNzI0X2F1cmVvbl9jYXJkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF92dDE3MjRfYXVyZW9uX2NhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS5zdWJ2ZW5kb3IgPSBWVDE3MjRfU1VCREVWSUNFX0FVUkVPTjUxX1NLWSwKIAkJLm5hbWUgPSAiVGVycmF0ZWMgQXVyZW9uIDUuMS1Ta3kiLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmggYi9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uaAppbmRleCA3OWU1OGU4Li5jMjUzYjhlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uaAorKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uaApAQCAtMzgsNyArMzgsNyBAQAogI2RlZmluZSBWVDE3MjRfU1VCREVWSUNFX1BST0RJR1k3MUxUCTB4MzIzMTU0NDEJLyogUFJPRElHWSA3LjEgTFQgKi8KICNkZWZpbmUgVlQxNzI0X1NVQkRFVklDRV9QUk9ESUdZNzFYVAkweDM2MzE1NDQxCS8qIFBST0RJR1kgNy4xIFhUKi8KIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gIHNuZF92dDE3MjRfYXVyZW9uX2NhcmRzW107CitleHRlcm4gc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAgc25kX3Z0MTcyNF9hdXJlb25fY2FyZHNbXTsKIAogLyogR1BJTyBiaXRzICovCiAjZGVmaW5lIEFVUkVPTl9DUzg0MTVfQ1MJKDEgPDwgMjIpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9kZWx0YS5jIGIvc291bmQvcGNpL2ljZTE3MTIvZGVsdGEuYwppbmRleCAzZWViMzZjLi5hZjY1OTgwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9kZWx0YS5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2RlbHRhLmMKQEAgLTQxNiw3ICs0MTYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfZGVsdGExMDEwbHRfd29yZGNsb2NrX3N0YXR1cyBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9kZWx0YTEwMTBsdF93b3JkY2xvY2tfc3RhdHVzIF9fZGV2aW5pdGRhdGEgPQogewogCS5hY2Nlc3MgPQkoU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQpLAogCS5pZmFjZSA9CVNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtNDI5LDcgKzQyOSw3IEBACiAgKiBpbml0aWFsaXplIHRoZSBjaGlwcyBvbiBNLUF1ZGlvIGNhcmRzCiAgKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfYWttNHh4eCBha21fYXVkaW9waGlsZSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfYWttNHh4eCBha21fYXVkaW9waGlsZSBfX2RldmluaXRkYXRhID0gewogCS50eXBlID0gU05EX0FLNDUyOCwKIAkubnVtX2FkY3MgPSAyLAogCS5udW1fZGFjcyA9IDIsCkBAIC00MzgsNyArNDM4LDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fYXVkaW9waGlsZV9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fYXVkaW9waGlsZV9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CiAJLmNhZGRyID0gMiwKIAkuY2lmID0gMCwKIAkuZGF0YV9tYXNrID0gSUNFMTcxMl9ERUxUQV9BUF9ET1VULApAQCAtNDUwLDcgKzQ1MCw3IEBACiAJLm1hc2tfZmxhZ3MgPSAwLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfYWttNHh4eCBha21fZGVsdGE0MTAgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX2RlbHRhNDEwIF9fZGV2aW5pdGRhdGEgPSB7CiAJLnR5cGUgPSBTTkRfQUs0NTI5LAogCS5udW1fYWRjcyA9IDIsCiAJLm51bV9kYWNzID0gOCwKQEAgLTQ1OSw3ICs0NTksNyBAQAogCX0KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2FrNHh4eF9wcml2YXRlIGFrbV9kZWx0YTQxMF9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fZGVsdGE0MTBfcHJpdiBfX2RldmluaXRkYXRhID0gewogCS5jYWRkciA9IDAsCiAJLmNpZiA9IDAsCiAJLmRhdGFfbWFzayA9IElDRTE3MTJfREVMVEFfQVBfRE9VVCwKQEAgLTQ3MSw3ICs0NzEsNyBAQAogCS5tYXNrX2ZsYWdzID0gMCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX2RlbHRhMTAxMGx0IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9ha200eHh4IGFrbV9kZWx0YTEwMTBsdCBfX2RldmluaXRkYXRhID0gewogCS50eXBlID0gU05EX0FLNDUyNCwKIAkubnVtX2FkY3MgPSA4LAogCS5udW1fZGFjcyA9IDgsCkBAIC00ODEsNyArNDgxLDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fZGVsdGExMDEwbHRfcHJpdiBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfYWs0eHh4X3ByaXZhdGUgYWttX2RlbHRhMTAxMGx0X3ByaXYgX19kZXZpbml0ZGF0YSA9IHsKIAkuY2FkZHIgPSAyLAogCS5jaWYgPSAwLCAvKiB0aGUgZGVmYXVsdCBsZXZlbCBvZiB0aGUgQ0lGIHBpbiBmcm9tIEFLNDUyNCAqLwogCS5kYXRhX21hc2sgPSBJQ0UxNzEyX0RFTFRBXzEwMTBMVF9ET1VULApAQCAtNDkzLDcgKzQ5Myw3IEBACiAJLm1hc2tfZmxhZ3MgPSAwLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfYWttNHh4eCBha21fZGVsdGE0NCBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfYWttNHh4eCBha21fZGVsdGE0NCBfX2RldmluaXRkYXRhID0gewogCS50eXBlID0gU05EX0FLNDUyNCwKIAkubnVtX2FkY3MgPSA0LAogCS5udW1fZGFjcyA9IDQsCkBAIC01MDMsNyArNTAzLDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fZGVsdGE0NF9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fZGVsdGE0NF9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CiAJLmNhZGRyID0gMiwKIAkuY2lmID0gMCwgLyogdGhlIGRlZmF1bHQgbGV2ZWwgb2YgdGhlIENJRiBwaW4gZnJvbSBBSzQ1MjQgKi8KIAkuZGF0YV9tYXNrID0gSUNFMTcxMl9ERUxUQV9DT0RFQ19TRVJJQUxfREFUQSwKQEAgLTUxNSw3ICs1MTUsNyBAQAogCS5tYXNrX2ZsYWdzID0gMCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX3Z4NDQyIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9ha200eHh4IGFrbV92eDQ0MiBfX2RldmluaXRkYXRhID0gewogCS50eXBlID0gU05EX0FLNDUyNCwKIAkubnVtX2FkY3MgPSA0LAogCS5udW1fZGFjcyA9IDQsCkBAIC01MjUsNyArNTI1LDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fdng0NDJfcHJpdiBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfYWs0eHh4X3ByaXZhdGUgYWttX3Z4NDQyX3ByaXYgX19kZXZpbml0ZGF0YSA9IHsKIAkuY2FkZHIgPSAyLAogCS5jaWYgPSAwLAogCS5kYXRhX21hc2sgPSBJQ0UxNzEyX1ZYNDQyX0RPVVQsCkBAIC02NTAsMTUgKzY1MCwxNSBAQAogICogYWRkaXRpb25hbCBjb250cm9scyBmb3IgTS1BdWRpbyBjYXJkcwogICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9kZWx0YTEwMTBfd29yZGNsb2NrX3NlbGVjdCBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9kZWx0YTEwMTBfd29yZGNsb2NrX3NlbGVjdCBfX2RldmluaXRkYXRhID0KIElDRTE3MTJfR1BJTyhTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgIldvcmQgQ2xvY2sgU3luYyIsIDAsIElDRTE3MTJfREVMVEFfV09SRF9DTE9DS19TRUxFQ1QsIDEsIDApOwotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX2RlbHRhMTAxMGx0X3dvcmRjbG9ja19zZWxlY3QgX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfZGVsdGExMDEwbHRfd29yZGNsb2NrX3NlbGVjdCBfX2RldmluaXRkYXRhID0KIElDRTE3MTJfR1BJTyhTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgIldvcmQgQ2xvY2sgU3luYyIsIDAsIElDRTE3MTJfREVMVEFfMTAxMExUX1dPUkRDTE9DSywgMCwgMCk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfZGVsdGExMDEwX3dvcmRjbG9ja19zdGF0dXMgX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfZGVsdGExMDEwX3dvcmRjbG9ja19zdGF0dXMgX19kZXZpbml0ZGF0YSA9CiBJQ0UxNzEyX0dQSU8oU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsICJXb3JkIENsb2NrIFN0YXR1cyIsIDAsIElDRTE3MTJfREVMVEFfV09SRF9DTE9DS19TVEFUVVMsIDEsIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9kZWx0YWRpbzI0OTZfc3BkaWZfaW5fc2VsZWN0IF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX2RlbHRhZGlvMjQ5Nl9zcGRpZl9pbl9zZWxlY3QgX19kZXZpbml0ZGF0YSA9CiBJQ0UxNzEyX0dQSU8oU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsICJJRUM5NTggSW5wdXQgT3B0aWNhbCIsIDAsIElDRTE3MTJfREVMVEFfU1BESUZfSU5QVVRfU0VMRUNULCAwLCAwKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9kZWx0YV9zcGRpZl9pbl9zdGF0dXMgX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfZGVsdGFfc3BkaWZfaW5fc3RhdHVzIF9fZGV2aW5pdGRhdGEgPQogSUNFMTcxMl9HUElPKFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAiRGVsdGEgSUVDOTU4IElucHV0IFN0YXR1cyIsIDAsIElDRTE3MTJfREVMVEFfU1BESUZfSU5fU1RBVCwgMSwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUpOwogCiAKQEAgLTczNSw3ICs3MzUsNyBAQAogCiAKIC8qIGVudHJ5IHBvaW50ICovCi1jb25zdCBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF9pY2UxNzEyX2RlbHRhX2NhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX2ljZTE3MTJfZGVsdGFfY2FyZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLnN1YnZlbmRvciA9IElDRTE3MTJfU1VCREVWSUNFX0RFTFRBMTAxMCwKIAkJLm5hbWUgPSAiTSBBdWRpbyBEZWx0YSAxMDEwIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2RlbHRhLmggYi9zb3VuZC9wY2kvaWNlMTcxMi9kZWx0YS5oCmluZGV4IGU2NWQ2NjkuLjI2OTcxNTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2RlbHRhLmgKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvZGVsdGEuaApAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBJQ0UxNzEyX1NVQkRFVklDRV9NRURJQVNUQVRJT04JMHg2OTRjMDEwMAogCiAvKiBlbnRyeSBwb2ludCAqLwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX2ljZTE3MTJfZGVsdGFfY2FyZHNbXTsKK2V4dGVybiBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF9pY2UxNzEyX2RlbHRhX2NhcmRzW107CiAKIAogLyoKQEAgLTYzLDcgKzYzLDcgQEAKIAkJCQkJLyogbG9vayB0byBDUzg0MTQgZGF0YXNoZWV0ICovCiAjZGVmaW5lIElDRTE3MTJfREVMVEFfU1BESUZfT1VUX1NUQVRfQ0xPQ0sgMHgwNAogCQkJCQkvKiBTL1BESUYgb3V0cHV0IHN0YXR1cyBjbG9jayAqLwotCQkJCQkvKiAod3JpdHRpbmcgb24gcmlzaW5nIGVkZ2UgLSAwLT4xKSAqLworCQkJCQkvKiAod3JpdGluZyBvbiByaXNpbmcgZWRnZSAtIDAtPjEpICovCiAJCQkJCS8qIGFsbCBleGNlcHQgRGVsdGE0NCAqLwogCQkJCQkvKiBsb29rIHRvIENTODQwNEEgZGF0YXNoZWV0ICovCiAjZGVmaW5lIElDRTE3MTJfREVMVEFfU1BESUZfT1VUX1NUQVRfREFUQSAweDA4CkBAIC0xMDAsNyArMTAwLDcgQEAKIAkJCQkJLyogQUtNNDUyNCBzZXJpYWwgZGF0YSAqLwogI2RlZmluZSBJQ0UxNzEyX0RFTFRBX0NPREVDX1NFUklBTF9DTE9DSyAweDIwCiAJCQkJCS8qIEFLTTQ1MjQgc2VyaWFsIGNsb2NrICovCi0JCQkJCS8qICh3cml0dGluZyBvbiByaXNpbmcgZWRnZSAtIDAtPjEgKi8KKwkJCQkJLyogKHdyaXRpbmcgb24gcmlzaW5nIGVkZ2UgLSAwLT4xICovCiAjZGVmaW5lIElDRTE3MTJfREVMVEFfQ09ERUNfQ0hJUF9BCTB4NDAKICNkZWZpbmUgSUNFMTcxMl9ERUxUQV9DT0RFQ19DSElQX0IJMHg4MAogCQkJCQkvKiAxIC0gc2VsZWN0IGNoaXAgQSBvciBCICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9ld3MuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2V3cy5jCmluZGV4IDliN2ZmMzAuLmIxMzUzODkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2V3cy5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2V3cy5jCkBAIC0zMzIsNyArMzMyLDcgQEAKIAogLyoKICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfYWttNHh4eCBha21fZXdzODhtdCBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfYWttNHh4eCBha21fZXdzODhtdCBfX2RldmluaXRkYXRhID0gewogCS5udW1fYWRjcyA9IDgsCiAJLm51bV9kYWNzID0gOCwKIAkudHlwZSA9IFNORF9BSzQ1MjQsCkBAIC0zNDIsNyArMzQyLDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fZXdzODhtdF9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fZXdzODhtdF9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CiAJLmNhZGRyID0gMiwKIAkuY2lmID0gMSwgLyogQ0lGIGhpZ2ggKi8KIAkuZGF0YV9tYXNrID0gSUNFMTcxMl9FV1M4OF9TRVJJQUxfREFUQSwKQEAgLTM1NCw3ICszNTQsNyBAQAogCS5tYXNrX2ZsYWdzID0gMCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX2V3eDI0OTYgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX2V3eDI0OTYgX19kZXZpbml0ZGF0YSA9IHsKIAkubnVtX2FkY3MgPSAyLAogCS5udW1fZGFjcyA9IDIsCiAJLnR5cGUgPSBTTkRfQUs0NTI0LApAQCAtMzYzLDcgKzM2Myw3IEBACiAJfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfYWs0eHh4X3ByaXZhdGUgYWttX2V3eDI0OTZfcHJpdiBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfYWs0eHh4X3ByaXZhdGUgYWttX2V3eDI0OTZfcHJpdiBfX2RldmluaXRkYXRhID0gewogCS5jYWRkciA9IDIsCiAJLmNpZiA9IDEsIC8qIENJRiBoaWdoICovCiAJLmRhdGFfbWFzayA9IElDRTE3MTJfRVdTODhfU0VSSUFMX0RBVEEsCkBAIC0zNzUsNyArMzc1LDcgQEAKIAkubWFza19mbGFncyA9IDAsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9ha200eHh4IGFrbV82ZmlyZSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfYWttNHh4eCBha21fNmZpcmUgX19kZXZpbml0ZGF0YSA9IHsKIAkubnVtX2FkY3MgPSA2LAogCS5udW1fZGFjcyA9IDYsCiAJLnR5cGUgPSBTTkRfQUs0NTI0LApAQCAtMzg0LDcgKzM4NCw3IEBACiAJfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfYWs0eHh4X3ByaXZhdGUgYWttXzZmaXJlX3ByaXYgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2FrNHh4eF9wcml2YXRlIGFrbV82ZmlyZV9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CiAJLmNhZGRyID0gMiwKIAkuY2lmID0gMSwgLyogQ0lGIGhpZ2ggKi8KIAkuZGF0YV9tYXNrID0gSUNFMTcxMl82RklSRV9TRVJJQUxfREFUQSwKQEAgLTU3OCw3ICs1NzgsNyBAQAogCXJldHVybiB2YWwgIT0gbnZhbDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX2V3eDI0OTZfY29udHJvbHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX2V3eDI0OTZfY29udHJvbHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIklucHV0IFNlbnNpdGl2aXR5IFN3aXRjaCIsCkBAIC02NzgsNyArNjc4LDcgQEAKIAlyZXR1cm4gbmRhdGEgIT0gZGF0YTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX2V3czg4bXRfaW5wdXRfc2Vuc2UgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9ld3M4OG10X2lucHV0X3NlbnNlIF9fZGV2aW5pdGRhdGEgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSAiSW5wdXQgU2Vuc2l0aXZpdHkgU3dpdGNoIiwKIAkuaW5mbyA9IHNuZF9pY2UxNzEyX2V3eF9pb19zZW5zZV9pbmZvLApAQCAtNjg3LDcgKzY4Nyw3IEBACiAJLmNvdW50ID0gOCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9ld3M4OG10X291dHB1dF9zZW5zZSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX2V3czg4bXRfb3V0cHV0X3NlbnNlIF9fZGV2aW5pdGRhdGEgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSAiT3V0cHV0IFNlbnNpdGl2aXR5IFN3aXRjaCIsCiAJLmluZm8gPSBzbmRfaWNlMTcxMl9ld3hfaW9fc2Vuc2VfaW5mbywKQEAgLTc2OSw3ICs3NjksNyBAQAogICAucHJpdmF0ZV92YWx1ZSA9IHhzaGlmdCB8ICh4aW52ZXJ0IDw8IDgpLFwKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX2V3czg4ZF9jb250cm9sc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfZXdzODhkX2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKIAlFV1M4OERfQ09OVFJPTChTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgIklFQzk1OCBJbnB1dCBPcHRpY2FsIiwgMCwgMSwgMCksIC8qIGludmVydGVkICovCiAJRVdTODhEX0NPTlRST0woU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsICJBREFUIE91dHB1dCBPcHRpY2FsIiwgMSwgMCwgMCksCiAJRVdTODhEX0NPTlRST0woU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsICJBREFUIEV4dGVybmFsIE1hc3RlciBDbG9jayIsIDIsIDAsIDApLApAQCAtOTA5LDcgKzkwOSw3IEBACiAgIC5wcml2YXRlX3ZhbHVlID0geHNoaWZ0IHwgKHhpbnZlcnQgPDwgOCksXAogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfNmZpcmVfY29udHJvbHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyXzZmaXJlX2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJBbmFsb2cgSW5wdXQgU2VsZWN0IiwKQEAgLTk4OSw3ICs5ODksNyBAQAogCiAKIC8qIGVudHJ5IHBvaW50ICovCi1jb25zdCBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF9pY2UxNzEyX2V3c19jYXJkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF9pY2UxNzEyX2V3c19jYXJkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewogCQkuc3VidmVuZG9yID0gSUNFMTcxMl9TVUJERVZJQ0VfRVdYMjQ5NiwKIAkJLm5hbWUgPSAiVGVycmFUZWMgRVdYMjQvOTYiLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvZXdzLmggYi9zb3VuZC9wY2kvaWNlMTcxMi9ld3MuaAppbmRleCBkZjQ0OWI0Li5hMTJhMGIwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9ld3MuaAorKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9ld3MuaApAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZSBJQ0UxNzEyX1NVQkRFVklDRV9QSEFTRTg4CTB4M2IxNTUxMTEKIAogLyogZW50cnkgcG9pbnQgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF9pY2UxNzEyX2V3c19jYXJkc1tdOworZXh0ZXJuIHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX2ljZTE3MTJfZXdzX2NhcmRzW107CiAKIAogLyogVGVycmFUZWMgRVdYIDI0Lzk2IGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2hvb250ZWNoLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9ob29udGVjaC5jCmluZGV4IGRmOTczMTMuLjgyMDM1NjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2hvb250ZWNoLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaG9vbnRlY2guYwpAQCAtMjM5LDcgKzIzOSw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaWNlMTcxMl92YWx1ZV9pbml0KHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQogewogCS8qIEhvb250ZWNoIFNURFNQMjQgd2l0aCBtb2RpZmllZCBoYXJkd2FyZSAqLwotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX3N0ZHNwMjRfbXYgX19kZXZpbml0ZGF0YSA9IHsKKwlzdGF0aWMgc3RydWN0IHNuZF9ha200eHh4IGFrbV9zdGRzcDI0X212IF9fZGV2aW5pdGRhdGEgPSB7CiAJCS5udW1fYWRjcyA9IDIsCiAJCS5udW1fZGFjcyA9IDIsCiAJCS50eXBlID0gU05EX0FLNDUyNCwKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQl9CiAJfTsKIAotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2FrNHh4eF9wcml2YXRlIGFrbV9zdGRzcDI0X212X3ByaXYgX19kZXZpbml0ZGF0YSA9IHsKKwlzdGF0aWMgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fc3Rkc3AyNF9tdl9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CiAJCS5jYWRkciA9IDIsCiAJCS5jaWYgPSAxLCAvKiBDSUYgaGlnaCAqLwogCQkuZGF0YV9tYXNrID0gSUNFMTcxMl9TVERTUDI0X1NFUklBTF9EQVRBLApAQCAtMjk4LDcgKzI5OCw3IEBACiAKIAogLyogZW50cnkgcG9pbnQgKi8KLWNvbnN0IHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX2ljZTE3MTJfaG9vbnRlY2hfY2FyZHNbXSBfX2RldmluaXRkYXRhID0geworc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyBzbmRfaWNlMTcxMl9ob29udGVjaF9jYXJkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewogCQkuc3VidmVuZG9yID0gSUNFMTcxMl9TVUJERVZJQ0VfU1REU1AyNCwKIAkJLm5hbWUgPSAiSG9vbnRlY2ggU291bmRUcmFjayBBdWRpbyBEU1AyNCIsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9ob29udGVjaC5oIGIvc291bmQvcGNpL2ljZTE3MTIvaG9vbnRlY2guaAppbmRleCBiNjJkNmU0Li4xZWU1MzhiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9ob29udGVjaC5oCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2hvb250ZWNoLmgKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgSUNFMTcxMl9TVUJERVZJQ0VfU1REU1AyNF9NRURJQTdfMQkweDE2MTQxMjE3CS8qIEhvb250ZWNoIFNUIEF1ZGlvIERTUDI0IE1lZGlhIDcuMSAqLwogI2RlZmluZSBJQ0UxNzEyX1NVQkRFVklDRV9FVkVOVF9FWjgJCTB4MDAwMTAwMDEJLyogQSBkdW1teSBpZCBmb3IgRVo4ICovCiAKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF9pY2UxNzEyX2hvb250ZWNoX2NhcmRzW107CitleHRlcm4gc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyBzbmRfaWNlMTcxMl9ob29udGVjaF9jYXJkc1tdOwogCiAKIC8qIEhvb250ZWNoIFNvdW5kVHJhY2sgQXVkaW8gRFNQIDI0IEdQSU8gZGVmaW5pdGlvbnMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCA4MzBhMWJiLi42NjMwYTBhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC0yODcsNyArMjg3LDcgQEAKIAlyZXR1cm4gdmFsICE9IG52YWw7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9taXhlcl9kaWdtaXhfcm91dGVfYWM5NyBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX21peGVyX2RpZ21peF9yb3V0ZV9hYzk3IF9fZGV2aW5pdGRhdGEgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSAiRGlnaXRhbCBNaXhlciBUbyBBQzk3IiwKIAkuaW5mbyA9IHNuZF9pY2UxNzEyX2RpZ21peF9yb3V0ZV9hYzk3X2luZm8sCkBAIC05NzcsMTEgKzk3Nyw5IEBACiAJewogCQl1bnNpZ25lZCBpbnQgd2hhdCA9IDA7CiAJCXVuc2lnbmVkIGludCBvbGQ7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzOwogCi0JCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2gocG9zLCBzdWJzdHJlYW0pIHsKLQkJCXMgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOworCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQkJaWYgKHMgPT0gaWNlLT5wbGF5YmFja19wcm9fc3Vic3RyZWFtKSB7CiAJCQkJd2hhdCB8PSBJQ0UxNzEyX1BMQVlCQUNLX1NUQVJUOwogCQkJCXNuZF9wY21fdHJpZ2dlcl9kb25lKHMsIHN1YnN0cmVhbSk7CkBAIC0xMzgwLDcgKzEzNzgsNyBAQAogCiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGJfc2NhbGVfcGxheWJhY2ssIC0xNDQwMCwgMTUwLCAwKTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX211bHRpX3BsYXliYWNrX2N0cmxzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9tdWx0aV9wbGF5YmFja19jdHJsc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTXVsdGkgUGxheWJhY2sgU3dpdGNoIiwKQEAgLTE0MDQsNyArMTQwMiw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9tdWx0aV9jYXB0dXJlX2FuYWxvZ19zd2l0Y2ggX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9tdWx0aV9jYXB0dXJlX2FuYWxvZ19zd2l0Y2ggX19kZXZpbml0ZGF0YSA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9ICJIL1cgTXVsdGkgQ2FwdHVyZSBTd2l0Y2giLAogCS5pbmZvID0gc25kX2ljZTE3MTJfcHJvX21peGVyX3N3aXRjaF9pbmZvLApAQCAtMTQxMyw3ICsxNDExLDcgQEAKIAkucHJpdmF0ZV92YWx1ZSA9IDEwLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX211bHRpX2NhcHR1cmVfc3BkaWZfc3dpdGNoIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfbXVsdGlfY2FwdHVyZV9zcGRpZl9zd2l0Y2ggX19kZXZpbml0ZGF0YSA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiTXVsdGkgIixDQVBUVVJFLFNXSVRDSCksCiAJLmluZm8gPSBzbmRfaWNlMTcxMl9wcm9fbWl4ZXJfc3dpdGNoX2luZm8sCkBAIC0xNDIzLDcgKzE0MjEsNyBAQAogCS5jb3VudCA9IDIsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfbXVsdGlfY2FwdHVyZV9hbmFsb2dfdm9sdW1lIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfbXVsdGlfY2FwdHVyZV9hbmFsb2dfdm9sdW1lIF9fZGV2aW5pdGRhdGEgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLmFjY2VzcyA9IChTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKIAkJICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEKSwKQEAgLTE0MzUsNyArMTQzMyw3IEBACiAJLnRsdiA9IHsgLnAgPSBkYl9zY2FsZV9wbGF5YmFjayB9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfbXVsdGlfY2FwdHVyZV9zcGRpZl92b2x1bWUgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9tdWx0aV9jYXB0dXJlX3NwZGlmX3ZvbHVtZSBfX2RldmluaXRkYXRhID0gewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCJNdWx0aSAiLENBUFRVUkUsVk9MVU1FKSwKIAkuaW5mbyA9IHNuZF9pY2UxNzEyX3Byb19taXhlcl92b2x1bWVfaW5mbywKQEAgLTE2MjcsNyArMTYyNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9lZXByb20gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9lZXByb20gX19kZXZpbml0ZGF0YSA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9DQVJELAogCS5uYW1lID0gIklDRTE3MTIgRUVQUk9NIiwKIAkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCkBAIC0xNjYzLDcgKzE2NjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfc3BkaWZfZGVmYXVsdCBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9zcGRpZl9kZWZhdWx0IF9fZGV2aW5pdGRhdGEgPQogewogCS5pZmFjZSA9CVNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKIAkubmFtZSA9ICAgICAgICAgU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLFBMQVlCQUNLLERFRkFVTFQpLApAQCAtMTcxNCw3ICsxNzEyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX3NwZGlmX21hc2tjIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX3NwZGlmX21hc2tjIF9fZGV2aW5pdGRhdGEgPQogewogCS5hY2Nlc3MgPQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKIAkuaWZhY2UgPQlTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCkBAIC0xNzIzLDcgKzE3MjEsNyBAQAogCS5nZXQgPQkJc25kX2ljZTE3MTJfc3BkaWZfbWFza2NfZ2V0LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX3NwZGlmX21hc2twIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX3NwZGlmX21hc2twIF9fZGV2aW5pdGRhdGEgPQogewogCS5hY2Nlc3MgPQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKIAkuaWZhY2UgPQlTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCkBAIC0xNzUwLDcgKzE3NDgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfc3BkaWZfc3RyZWFtIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX3NwZGlmX3N0cmVhbSBfX2RldmluaXRkYXRhID0KIHsKIAkuYWNjZXNzID0JKFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAogCQkJIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSksCkBAIC0xODkxLDcgKzE4ODksNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9wcm9faW50ZXJuYWxfY2xvY2sgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9wcm9faW50ZXJuYWxfY2xvY2sgX19kZXZpbml0ZGF0YSA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9ICJNdWx0aSBUcmFjayBJbnRlcm5hbCBDbG9jayIsCiAJLmluZm8gPSBzbmRfaWNlMTcxMl9wcm9faW50ZXJuYWxfY2xvY2tfaW5mbywKQEAgLTE5NjIsNyArMTk2MCw3IEBACiAJcmV0dXJuIGNoYW5nZTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX3Byb19pbnRlcm5hbF9jbG9ja19kZWZhdWx0IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfcHJvX2ludGVybmFsX2Nsb2NrX2RlZmF1bHQgX19kZXZpbml0ZGF0YSA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9ICJNdWx0aSBUcmFjayBJbnRlcm5hbCBDbG9jayBEZWZhdWx0IiwKIAkuaW5mbyA9IHNuZF9pY2UxNzEyX3Byb19pbnRlcm5hbF9jbG9ja19kZWZhdWx0X2luZm8sCkBAIC0yMDAxLDcgKzE5OTksNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9wcm9fcmF0ZV9sb2NraW5nIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfcHJvX3JhdGVfbG9ja2luZyBfX2RldmluaXRkYXRhID0gewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCS5uYW1lID0gIk11bHRpIFRyYWNrIFJhdGUgTG9ja2luZyIsCiAJLmluZm8gPSBzbmRfaWNlMTcxMl9wcm9fcmF0ZV9sb2NraW5nX2luZm8sCkBAIC0yMDQwLDcgKzIwMzgsNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9wcm9fcmF0ZV9yZXNldCBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX3Byb19yYXRlX3Jlc2V0IF9fZGV2aW5pdGRhdGEgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSAiTXVsdGkgVHJhY2sgUmF0ZSBSZXNldCIsCiAJLmluZm8gPSBzbmRfaWNlMTcxMl9wcm9fcmF0ZV9yZXNldF9pbmZvLApAQCAtMjIwNyw3ICsyMjA1LDcgQEAKIAlyZXR1cm4gY2hhbmdlOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfbWl4ZXJfcHJvX2FuYWxvZ19yb3V0ZSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX21peGVyX3Byb19hbmFsb2dfcm91dGUgX19kZXZpbml0ZGF0YSA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9ICJIL1cgUGxheWJhY2sgUm91dGUiLAogCS5pbmZvID0gc25kX2ljZTE3MTJfcHJvX3JvdXRlX2luZm8sCkBAIC0yMjE1LDcgKzIyMTMsNyBAQAogCS5wdXQgPSBzbmRfaWNlMTcxMl9wcm9fcm91dGVfYW5hbG9nX3B1dCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9taXhlcl9wcm9fc3BkaWZfcm91dGUgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9taXhlcl9wcm9fc3BkaWZfcm91dGUgX19kZXZpbml0ZGF0YSA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxOT05FKSAiUm91dGUiLAogCS5pbmZvID0gc25kX2ljZTE3MTJfcHJvX3JvdXRlX2luZm8sCkBAIC0yMjU3LDcgKzIyNTUsNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9taXhlcl9wcm9fdm9sdW1lX3JhdGUgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9taXhlcl9wcm9fdm9sdW1lX3JhdGUgX19kZXZpbml0ZGF0YSA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9ICJNdWx0aSBUcmFjayBWb2x1bWUgUmF0ZSIsCiAJLmluZm8gPSBzbmRfaWNlMTcxMl9wcm9fdm9sdW1lX3JhdGVfaW5mbywKQEAgLTIyOTAsNyArMjI4OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9taXhlcl9wcm9fcGVhayBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX21peGVyX3Byb19wZWFrIF9fZGV2aW5pdGRhdGEgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSAiTXVsdGkgVHJhY2sgUGVhayIsCiAJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLApAQCAtMjMwNSw3ICsyMzAzLDcgQEAKIC8qCiAgKiBsaXN0IG9mIGF2YWlsYWJsZSBib2FyZHMKICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gKmNhcmRfdGFibGVzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvICpjYXJkX3RhYmxlc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJc25kX2ljZTE3MTJfaG9vbnRlY2hfY2FyZHMsCiAJc25kX2ljZTE3MTJfZGVsdGFfY2FyZHMsCiAJc25kX2ljZTE3MTJfZXdzX2NhcmRzLApAQCAtMjMyOSw3ICsyMzI3LDcgQEAKIHsKIAlpbnQgZGV2ID0gMHhhMDsJCS8qIEVFUFJPTSBkZXZpY2UgYWRkcmVzcyAqLwogCXVuc2lnbmVkIGludCBpLCBzaXplOwotCWNvbnN0IHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gKip0YmwsICpjOworCXN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gKiBjb25zdCAqdGJsLCAqYzsKIAogCWlmICghIG1vZGVsbmFtZSB8fCAhICptb2RlbG5hbWUpIHsKIAkJaWNlLT5lZXByb20uc3VidmVuZG9yID0gMDsKQEAgLTI2NTgsNyArMjY1Niw3IEBACiAgKgogICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIG5vX21hdGNoZWQgX19kZXZpbml0ZGF0YTsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIG5vX21hdGNoZWQgX19kZXZpbml0ZGF0YTsKIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2ljZTE3MTJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKQEAgLTI2NjcsNyArMjY2NSw3IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlOwogCWludCBwY21fZGV2ID0gMCwgZXJyOwotCWNvbnN0IHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gKip0YmwsICpjOworCXN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gKiBjb25zdCAqdGJsLCAqYzsKIAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oCmluZGV4IGMzZDlmZWEuLjZhYzQ4NmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaAorKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmgKQEAgLTM5Nyw2ICszOTcsOSBAQAogCQkJc3RydWN0IGFrNDExNCAqYWs0MTE0OwogCQkJdW5zaWduZWQgaW50IGFuYWxvZzogMTsKIAkJfSBqdWxpOworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGFrNDExNCAqYWs0MTE0OworCQl9IHByb2RpZ3kxOTI7CiAJfSBzcGVjOwogCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCmluZGV4IDExMjdlYmQuLmVlNjIwZGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTMzNywxMyArMzM3LDExIEBACiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJdW5zaWduZWQgY2hhciB3aGF0OwogCXVuc2lnbmVkIGNoYXIgb2xkOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7CiAKIAl3aGF0ID0gMDsKLQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoKHBvcywgc3Vic3RyZWFtKSB7CisJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKIAkJY29uc3Qgc3RydWN0IHZ0MTcyNF9wY21fcmVnICpyZWc7Ci0JCXMgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOwogCQlyZWcgPSBzLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJCXdoYXQgfD0gcmVnLT5zdGFydDsKIAkJc25kX3BjbV90cmlnZ2VyX2RvbmUocywgc3Vic3RyZWFtKTsKQEAgLTEzMTgsNyArMTMxNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdnQxNzI0X2VlcHJvbSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92dDE3MjRfZWVwcm9tIF9fZGV2aW5pdGRhdGEgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfQ0FSRCwKIAkubmFtZSA9ICJJQ0UxNzI0IEVFUFJPTSIsCiAJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFELApAQCAtMTQzMSw3ICsxNDI5LDcgQEAKIAlyZXR1cm4gKHZhbCAhPSBvbGQpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3Z0MTcyNF9zcGRpZl9kZWZhdWx0IF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92dDE3MjRfc3BkaWZfZGVmYXVsdCBfX2RldmluaXRkYXRhID0KIHsKIAkuaWZhY2UgPQlTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCiAJLm5hbWUgPSAgICAgICAgIFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxERUZBVUxUKSwKQEAgLTE0NjMsNyArMTQ2MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdnQxNzI0X3NwZGlmX21hc2tjIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92dDE3MjRfc3BkaWZfbWFza2MgX19kZXZpbml0ZGF0YSA9CiB7CiAJLmFjY2VzcyA9CVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFELAogCS5pZmFjZSA9CVNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKQEAgLTE0NzIsNyArMTQ3MCw3IEBACiAJLmdldCA9CQlzbmRfdnQxNzI0X3NwZGlmX21hc2tjX2dldCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdnQxNzI0X3NwZGlmX21hc2twIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92dDE3MjRfc3BkaWZfbWFza3AgX19kZXZpbml0ZGF0YSA9CiB7CiAJLmFjY2VzcyA9CVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFELAogCS5pZmFjZSA9CVNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKQEAgLTE1MTcsNyArMTUxNSw3IEBACiAJcmV0dXJuIG9sZCAhPSB2YWw7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdnQxNzI0X3NwZGlmX3N3aXRjaCBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdnQxNzI0X3NwZGlmX3N3aXRjaCBfX2RldmluaXRkYXRhID0KIHsKIAkuaWZhY2UgPQlTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkvKiBGSVhNRTogdGhlIGZvbGxvd2luZyBjb25mbGljdCB3aXRoIElFQzk1OCBQbGF5YmFjayBSb3V0ZSAqLwpAQCAtMTY2OCw3ICsxNjY2LDEyIEBACiAJc3Bpbl9sb2NrX2lycSgmaWNlLT5yZWdfbG9jayk7CiAJb3ZhbCA9IGluYihJQ0VNVDE3MjQoaWNlLCBSQVRFKSk7CiAJaWYgKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPT0gc3BkaWYpIHsKKwkJdW5zaWduZWQgY2hhciBpMnNfb3ZhbDsKIAkJb3V0YihvdmFsIHwgVlQxNzI0X1NQRElGX01BU1RFUiwgSUNFTVQxNzI0KGljZSwgUkFURSkpOworCQkvKiBzZXR0aW5nIDI1NmZzICovCisJCWkyc19vdmFsID0gaW5iKElDRU1UMTcyNChpY2UsIEkyU19GT1JNQVQpKTsKKwkJb3V0YihpMnNfb3ZhbCAmIH5WVDE3MjRfTVRfSTJTX01DTEtfMTI4WCwKKwkJICAgICBJQ0VNVDE3MjQoaWNlLCBJMlNfRk9STUFUKSk7CiAJfSBlbHNlIHsKIAkJcmF0ZSA9IHJhdGVzW3Vjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICUgMTVdOwogCQlpZiAocmF0ZSA8PSBnZXRfbWF4X3JhdGUoaWNlKSkgewpAQCAtMTY5NSw3ICsxNjk4LDcgQEAKIAlyZXR1cm4gY2hhbmdlOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3Z0MTcyNF9wcm9faW50ZXJuYWxfY2xvY2sgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdnQxNzI0X3Byb19pbnRlcm5hbF9jbG9jayBfX2RldmluaXRkYXRhID0gewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCS5uYW1lID0gIk11bHRpIFRyYWNrIEludGVybmFsIENsb2NrIiwKIAkuaW5mbyA9IHNuZF92dDE3MjRfcHJvX2ludGVybmFsX2Nsb2NrX2luZm8sCkBAIC0xNzM0LDcgKzE3MzcsNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdnQxNzI0X3Byb19yYXRlX2xvY2tpbmcgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdnQxNzI0X3Byb19yYXRlX2xvY2tpbmcgX19kZXZpbml0ZGF0YSA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9ICJNdWx0aSBUcmFjayBSYXRlIExvY2tpbmciLAogCS5pbmZvID0gc25kX3Z0MTcyNF9wcm9fcmF0ZV9sb2NraW5nX2luZm8sCkBAIC0xNzczLDcgKzE3NzYsNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdnQxNzI0X3Byb19yYXRlX3Jlc2V0IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3Z0MTcyNF9wcm9fcmF0ZV9yZXNldCBfX2RldmluaXRkYXRhID0gewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCS5uYW1lID0gIk11bHRpIFRyYWNrIFJhdGUgUmVzZXQiLAogCS5pbmZvID0gc25kX3Z0MTcyNF9wcm9fcmF0ZV9yZXNldF9pbmZvLApAQCAtMTg5Miw3ICsxODk1LDcgQEAKIAkJCSAgICAgZGlnaXRhbF9yb3V0ZV9zaGlmdChpZHgpKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92dDE3MjRfbWl4ZXJfcHJvX2FuYWxvZ19yb3V0ZSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92dDE3MjRfbWl4ZXJfcHJvX2FuYWxvZ19yb3V0ZSBfX2RldmluaXRkYXRhID0gewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCS5uYW1lID0gIkgvVyBQbGF5YmFjayBSb3V0ZSIsCiAJLmluZm8gPSBzbmRfdnQxNzI0X3Byb19yb3V0ZV9pbmZvLApAQCAtMTkwMCw3ICsxOTAzLDcgQEAKIAkucHV0ID0gc25kX3Z0MTcyNF9wcm9fcm91dGVfYW5hbG9nX3B1dCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdnQxNzI0X21peGVyX3Byb19zcGRpZl9yb3V0ZSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92dDE3MjRfbWl4ZXJfcHJvX3NwZGlmX3JvdXRlIF9fZGV2aW5pdGRhdGEgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsUExBWUJBQ0ssTk9ORSkgIlJvdXRlIiwKIAkuaW5mbyA9IHNuZF92dDE3MjRfcHJvX3JvdXRlX2luZm8sCkBAIC0xOTM2LDcgKzE5MzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3Z0MTcyNF9taXhlcl9wcm9fcGVhayBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92dDE3MjRfbWl4ZXJfcHJvX3BlYWsgX19kZXZpbml0ZGF0YSA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9ICJNdWx0aSBUcmFjayBQZWFrIiwKIAkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsCkBAIC0xOTQ4LDkgKzE5NTEsOSBAQAogICoKICAqLwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyBub19tYXRjaGVkIF9fZGV2aW5pdGRhdGE7CitzdGF0aWMgc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyBub19tYXRjaGVkIF9fZGV2aW5pdGRhdGE7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvICpjYXJkX3RhYmxlc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAqY2FyZF90YWJsZXNbXSBfX2RldmluaXRkYXRhID0gewogCXNuZF92dDE3MjRfcmV2b19jYXJkcywKIAlzbmRfdnQxNzI0X2FtcF9jYXJkcywgCiAJc25kX3Z0MTcyNF9hdXJlb25fY2FyZHMsCkBAIC0yMDA5LDcgKzIwMTIsNyBAQAogewogCWNvbnN0IGludCBkZXYgPSAweGEwOwkJLyogRUVQUk9NIGRldmljZSBhZGRyZXNzICovCiAJdW5zaWduZWQgaW50IGksIHNpemU7Ci0JY29uc3Qgc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAqKnRibCwgKmM7CisJc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAqIGNvbnN0ICp0YmwsICpjOwogCiAJaWYgKCEgbW9kZWxuYW1lIHx8ICEgKm1vZGVsbmFtZSkgewogCQlpY2UtPmVlcHJvbS5zdWJ2ZW5kb3IgPSAwOwpAQCAtMjMwOCw3ICsyMzExLDcgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2U7CiAJaW50IHBjbV9kZXYgPSAwLCBlcnI7Ci0JY29uc3Qgc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAqKnRibCwgKmM7CisJc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAqIGNvbnN0ICp0YmwsICpjOwogCiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yMzQ3LDYgKzIzNTAsMTQgQEAKIAl9CiAJYyA9ICZub19tYXRjaGVkOwogIF9fZm91bmQ6CisgICAgICAgLyoKKyAgICAgICAgKiBWVDE3MjQgaGFzIHNlcGFyYXRlIERNQXMgZm9yIHRoZSBhbmFsb2cgYW5kIHRoZSBTUERJRiBzdHJlYW1zIHdoaWxlCisgICAgICAgICogSUNFMTcxMiBoYXMgb25seSBvbmUgZm9yIGJvdGggKG1peGVkIHVwKS4KKyAgICAgICAgKgorICAgICAgICAqIENvbmZ1c2luZ2x5IHRoZSBhbmFsb2cgUENNIGlzIG5hbWVkICJwcm9mZXNzaW9uYWwiIGhlcmUgYmVjYXVzZSBpdAorICAgICAgICAqIHdhcyBjYWxsZWQgc28gaW4gaWNlMTcxMiBkcml2ZXIsIGFuZCB2dDE3MjQgZHJpdmVyIGlzIGRlcml2ZWQgZnJvbQorICAgICAgICAqIGljZTE3MTIgZHJpdmVyLgorICAgICAgICAqLwogCiAJaWYgKChlcnIgPSBzbmRfdnQxNzI0X3BjbV9wcm9maShpY2UsIHBjbV9kZXYrKykpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jIGIvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jCmluZGV4IGQ4ODE3MmYuLjNkOGU3NGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCXNuZF9ha200eHh4X3Jlc2V0KGFrLCAwKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfYWttNHh4eCBha21fanVsaV9kYWMgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX2p1bGlfZGFjIF9fZGV2aW5pdGRhdGEgPSB7CiAJLnR5cGUgPSBTTkRfQUs0MzU4LAogCS5udW1fZGFjcyA9IDIsCiAJLm9wcyA9IHsKQEAgLTEzOCw3ICsxMzgsMTYgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQganVsaV9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCiB7Ci0JcmV0dXJuIHNuZF9pY2UxNzEyX2FrbTR4eHhfYnVpbGRfY29udHJvbHMoaWNlKTsKKwlpbnQgZXJyOworCWVyciA9IHNuZF9pY2UxNzEyX2FrbTR4eHhfYnVpbGRfY29udHJvbHMoaWNlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwkvKiBvbmx5IGNhcHR1cmUgU1BESUYgb3ZlciBBSzQxMTQgKi8KKwllcnIgPSBzbmRfYWs0MTE0X2J1aWxkKGljZS0+c3BlYy5qdWxpLmFrNDExNCwgTlVMTCwKKwkJCSAgICAgICBpY2UtPnBjbV9wcm8tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTYwLDEzICsxNjksNiBAQAogCWludCBlcnI7CiAJc3RydWN0IHNuZF9ha200eHh4ICphazsKIAotI2lmIDAKLQlmb3IgKGVyciA9IDA7IGVyciA8IDB4MjA7IGVycisrKQotCQlqdWxpX2FrNDExNF9yZWFkKGljZSwgZXJyKTsKLQlqdWxpX2FrNDExNF93cml0ZShpY2UsIDAsIDB4MGYpOwotCWp1bGlfYWs0MTE0X3JlYWQoaWNlLCAwKTsKLQlqdWxpX2FrNDExNF9yZWFkKGljZSwgMSk7Ci0jZW5kaWYKIAllcnIgPSBzbmRfYWs0MTE0X2NyZWF0ZShpY2UtPmNhcmQsCiAJCQkJanVsaV9hazQxMTRfcmVhZCwKIAkJCQlqdWxpX2FrNDExNF93cml0ZSwKQEAgLTIwNiw3ICsyMDgsNyBAQAogICogaGVuY2UgdGhlIGRyaXZlciBuZWVkcyB0byBzZXRzIHVwIGl0IHByb3Blcmx5LgogICovCiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGp1bGlfZWVwcm9tW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGp1bGlfZWVwcm9tW10gX19kZXZpbml0ZGF0YSA9IHsKIAlbSUNFX0VFUDJfU1lTQ09ORl0gICAgID0gMHgyMCwJLyogY2xvY2sgNTEyLCBtcHU0MDEsIDF4QURDLCAxeERBQ3MgKi8KIAlbSUNFX0VFUDJfQUNMSU5LXSAgICAgID0gMHg4MCwJLyogSTJTICovCiAJW0lDRV9FRVAyX0kyU10gICAgICAgICA9IDB4ZjgsCS8qIHZvbCwgOTZrLCAyNGJpdCwgMTkyayAqLwpAQCAtMjIzLDcgKzIyNSw3IEBACiB9OwogCiAvKiBlbnRyeSBwb2ludCAqLwotY29uc3Qgc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyBzbmRfdnQxNzI0X2p1bGlfY2FyZHNbXSBfX2RldmluaXRkYXRhID0geworc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyBzbmRfdnQxNzI0X2p1bGlfY2FyZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLnN1YnZlbmRvciA9IFZUMTcyNF9TVUJERVZJQ0VfSlVMSSwKIAkJLm5hbWUgPSAiRVNJIEp1bGlAIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuaCBiL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuaAppbmRleCAxYjkyOTRmLi5kOWY4NTM0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmgKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvanVsaS5oCkBAIC01LDYgKzUsNiBAQAogCiAjZGVmaW5lIFZUMTcyNF9TVUJERVZJQ0VfSlVMSQkJMHgzMTMwNTM0NQkvKiBKdWxpQCAqLwogCi1leHRlcm4gY29uc3Qgc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAgc25kX3Z0MTcyNF9qdWxpX2NhcmRzW107CitleHRlcm4gc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAgc25kX3Z0MTcyNF9qdWxpX2NhcmRzW107CiAKICNlbmRpZgkvKiBfX1NPVU5EX0pVTElfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcGhhc2UuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL3BoYXNlLmMKaW5kZXggMDc1MTcxOC4uNDBhOTA5OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvcGhhc2UuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9waGFzZS5jCkBAIC04OSwxMyArODksMTMgQEAKICNkZWZpbmUgV01fVk9MX01BWAkoc2l6ZW9mKHdtX3ZvbCkgLSAxKQogI2RlZmluZSBXTV9WT0xfTVVURQkweDgwMDAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfYWttNHh4eCBha21fcGhhc2UyMiBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfYWttNHh4eCBha21fcGhhc2UyMiBfX2RldmluaXRkYXRhID0gewogCS50eXBlID0gU05EX0FLNDUyNCwKIAkubnVtX2RhY3MgPSAyLAogCS5udW1fYWRjcyA9IDIsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fcGhhc2UyMl9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fcGhhc2UyMl9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CiAJLmNhZGRyID0JMiwKIAkuY2lmID0JCTEsCiAJLmRhdGFfbWFzayA9CTEgPDwgNCwKQEAgLTE1Miw3ICsxNTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwaGFzZTIyX2VlcHJvbVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgdW5zaWduZWQgY2hhciBwaGFzZTIyX2VlcHJvbVtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJW0lDRV9FRVAyX1NZU0NPTkZdICAgICA9IDB4MDAsCS8qIDF4QURDLCAxeERBQ3MgKi8KIAlbSUNFX0VFUDJfQUNMSU5LXSAgICAgID0gMHg4MCwJLyogSTJTICovCiAJW0lDRV9FRVAyX0kyU10gICAgICAgICA9IDB4ZjgsCS8qIHZvbCwgOTZrLCAyNGJpdCAqLwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJW0lDRV9FRVAyX0dQSU9fU1RBVEUyXSA9IDB4MDAsCiB9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwaGFzZTI4X2VlcHJvbVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgdW5zaWduZWQgY2hhciBwaGFzZTI4X2VlcHJvbVtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJW0lDRV9FRVAyX1NZU0NPTkZdICAgICA9IDB4MGIsCS8qIGNsb2NrIDUxMiwgc3BkaWYtaW4vQURDLCA0REFDcyAqLwogCVtJQ0VfRUVQMl9BQ0xJTktdICAgICAgPSAweDgwLAkvKiBJMlMgKi8KIAlbSUNFX0VFUDJfSTJTXSAgICAgICAgID0gMHhmYywJLyogdm9sLCA5NmssIDI0Yml0LCAxOTJrICovCkBAIC03MDAsNyArNzAwLDcgQEAKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYl9zY2FsZV93bV9kYWMsIC0xMjcwMCwgMTAwLCAxKTsKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYl9zY2FsZV93bV9wY20sIC02NDAwLCA1MCwgMSk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBwaGFzZTI4X2RhY19jb250cm9sc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcGhhc2UyOF9kYWNfY29udHJvbHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLApAQCAtODE1LDcgKzgxNSw3IEBACiAJfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtX2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bV9jb250cm9sc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiUENNIFBsYXliYWNrIFN3aXRjaCIsCkBAIC04NzAsNyArODcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotY29uc3Qgc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyBzbmRfdnQxNzI0X3BoYXNlX2NhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX3Z0MTcyNF9waGFzZV9jYXJkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewogCQkuc3VidmVuZG9yID0gVlQxNzI0X1NVQkRFVklDRV9QSEFTRTIyLAogCQkubmFtZSA9ICJUZXJyYXRlYyBQSEFTRSAyMiIsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9waGFzZS5oIGIvc291bmQvcGNpL2ljZTE3MTIvcGhhc2UuaAppbmRleCBhZDM3OWE5Li4xM2U4NDFiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9waGFzZS5oCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL3BoYXNlLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgVlQxNzI0X1NVQkRFVklDRV9QSEFTRTI4CTB4M2IxNTQ5MTEKIAogLyogZW50cnkgcG9pbnQgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF92dDE3MjRfcGhhc2VfY2FyZHNbXTsKK2V4dGVybiBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF92dDE3MjRfcGhhc2VfY2FyZHNbXTsKIAogLyogUEhBU0UyOCBHUElPIGJpdHMgKi8KICNkZWZpbmUgUEhBU0UyOF9TUElfTUlTTwkoMSA8PCAyMSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3BvbnRpcy5jIGIvc291bmQvcGNpL2ljZTE3MTIvcG9udGlzLmMKaW5kZXggOTU1MjQ5Ny4uMDFjNjk0NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvcG9udGlzLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcG9udGlzLmMKQEAgLTU3MSw3ICs1NzEsNyBAQAogICogbWl4ZXJzCiAgKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHBvbnRpc19jb250cm9sc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcG9udGlzX2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkuYWNjZXNzID0gKFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfApAQCAtODI2LDcgKzgyNiw3IEBACiAgKiBoZW5jZSB0aGUgZHJpdmVyIG5lZWRzIHRvIHNldHMgdXAgaXQgcHJvcGVybHkuCiAgKi8KIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcG9udGlzX2VlcHJvbVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgdW5zaWduZWQgY2hhciBwb250aXNfZWVwcm9tW10gX19kZXZpbml0ZGF0YSA9IHsKIAlbSUNFX0VFUDJfU1lTQ09ORl0gICAgID0gMHgwOCwJLyogY2xvY2sgMjU2LCBtcHU0MDEsIHNwZGlmLWluL0FEQywgMURBQyAqLwogCVtJQ0VfRUVQMl9BQ0xJTktdICAgICAgPSAweDgwLAkvKiBJMlMgKi8KIAlbSUNFX0VFUDJfSTJTXSAgICAgICAgID0gMHhmOCwJLyogdm9sLCA5NmssIDI0Yml0LCAxOTJrICovCkBAIC04NDMsNyArODQzLDcgQEAKIH07CiAKIC8qIGVudHJ5IHBvaW50ICovCi1jb25zdCBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF92dDE3MjBfcG9udGlzX2NhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX3Z0MTcyMF9wb250aXNfY2FyZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLnN1YnZlbmRvciA9IFZUMTcyMF9TVUJERVZJQ0VfUE9OVElTX01TMzAwLAogCQkubmFtZSA9ICJQb250aXMgTVMzMDAiLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcG9udGlzLmggYi9zb3VuZC9wY2kvaWNlMTcxMi9wb250aXMuaAppbmRleCAxYTQxODI1Li5kMGQxMzc4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9wb250aXMuaAorKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9wb250aXMuaApAQCAtMjgsNiArMjgsNiBAQAogCiAjZGVmaW5lIFZUMTcyMF9TVUJERVZJQ0VfUE9OVElTX01TMzAwCTB4MDAwMjAwMDIJLyogYSBkdW1teSBpZCBmb3IgTVMzMDAgKi8KIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gIHNuZF92dDE3MjBfcG9udGlzX2NhcmRzW107CitleHRlcm4gc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAgc25kX3Z0MTcyMF9wb250aXNfY2FyZHNbXTsKIAogI2VuZGlmIC8qIF9fU09VTkRfUE9OVElTX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuYwppbmRleCAzMWNjNjZlLi5mMDNjMDJjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5MTkyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneTE5Mi5jCkBAIC0yLDYgKzIsMzcgQEAKICAqICAgQUxTQSBkcml2ZXIgZm9yIElDRW5zZW1ibGUgVlQxNzI0IChFbnZ5MjRIVCkKICAqCiAgKiAgIExvd2xldmVsIGZ1bmN0aW9ucyBmb3IgQXVkaW9UcmFrIFByb2RpZ3kgMTkyIGNhcmRzCisgKiAgIFN1cHBvcnRlZCBJRUM5NTggaW5wdXQgZnJvbSBvcHRpb25hbCBNSS9PREkvTyBhZGQtb24gY2FyZC4KKyAqCisgKiAgIFNwZWNpZmljcyAoU1csIEhXKToKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAJKiA0OS41TUh6IGNyeXN0YWwKKyAqICAgCSogU1BESUYtT1VUIG9uIHRoZSBjYXJkOgorICogIAkgIC0gY29heCAodGhyb3VnaCBpc29sYXRpb24gdHJhbnNmb3JtZXIpL3Rvc2xpbmsgc3VwcGxpZWQgYnkKKyAqICAgICAgICAgIDc0SEMwNCBnYXRlcyAtIDMgaW4gcGFyYWxsZWwKKyAqICAgCSAgLSBvdXRwdXQgc3dpdGNoZWQgYmV0d2VlbiBvbi1ib2FyZCBDRCBkcml2ZSBkaWctb3V0IGNvbm5lY3RvcgorICogICAgICAgICAgYW5kIGljZTE3MjQgU1BEVFggcGluLCB1c2luZyA3NEhDMDIgTk9SIGdhdGVzLCBjb250cm9sbGVkCisgKiAgICAgICAgICBieSBHUElPMjAgKDAgPSBDRCBkaWctb3V0LCAxID0gU1BEVFgpCisgKiAgIAkqIFNQRFRYIGdvZXMgc3RyYWlnaHQgdG8gTUkvT0RJL08gY2FyZCdzIFNQRElGLU9VVCBjb2F4CisgKgorICogICAJKiBNSS9PREkvTyBjYXJkOiBBSzQxMTQgYmFzZWQsIHVzZWQgZm9yIGllYzk1OCBpbnB1dCBvbmx5CisgKiAgIAkJLSB0b3NsaW5rIGlucHV0IC0+IFJYMAorICogICAJCS0gY29heCBpbnB1dCAtPiBSWDEKKyAqICAgCQktIDR3aXJlIHByb3RvY29sOgorICogICAJCQlBSzQxMTQJCUlDRTE3MjQKKyAqICAgCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAJCQlDRFRPIChwaW4gMzIpIC0tIEdQSU8xMSBwaW4gODYKKyAqIAkJCUNEVEkgKHBpbiAzMykgLS0gR1BJTzEwIHBpbiA3NworICogCQkJQ0NMSyAocGluIDM0KSAtLSBHUElPOSBwaW4gNzYKKyAqIAkJCUNTTiAgKHBpbiAzNSkgLS0gR1BJTzggcGluIDc1CisgKiAgIAkJLSBvdXRwdXQgZGF0YSBNb2RlIDcgKDI0Yml0LCBJMlMsIHNsYXZlKQorICoJCS0gYm90aCBNQ0tPMSBhbmQgTUNLTzIgb2YgYWs0MTE0IGFyZSBmZWQgdG8gRlBHQSwgd2hpY2gKKyAqCQkgIG91dHB1dHMgbWFzdGVyIGNsb2NrIHRvIFNQTUNMS0lOIG9mIGljZTE3MjQuCisgKgkJICBFeHBlcmltZW50YWxseSBJIGZvdW5kIG91dCB0aGF0IG9ubHkgYSBjb21iaW5hdGlvbiBvZgorICoJCSAgT0NLUzA9MSwgT0NLUzE9MSAoMTI4ZnMsIDY0ZnMgb3V0cHV0KSBhbmQgaWNlMTcyNCAtCisgKgkJICBWVDE3MjRfTVRfSTJTX01DTEtfMTI4WD0wICgyNTZmcyBpbnB1dCkgeWllbGRzIGNvcnJlY3QKKyAqCQkgIHNhbXBsaW5nIHJhdGUuIFRoYXQgbWVhbnMgdGhlIHRoZSBGUEdBIGRvdWJsZXMgdGhlCisgKgkJICBNQ0swMSByYXRlLgogICoKICAqCUNvcHlyaWdodCAoYykgMjAwMyBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+CiAgKiAgICAgIENvcHlyaWdodCAoYykgMjAwMyBEaW1pdHJvbWFub2xha2lzIEFwb3N0b2xvcyA8YXBvc3RvbEBjcy51dG9yb250by5jYT4KQEAgLTM1Niw2ICszODcsNDcgQEAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgorc3RhdGljIGludCBzdGFjOTQ2MF9taWNfc3dfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkgICAgICAgCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY2hhciAqdGV4dHNbMl0gPSB7ICJMaW5lIEluIiwgIk1pYyIgfTsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAyOworCisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMpCisJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7CisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHN0YWM5NDYwX21pY19zd19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJICAgICAgIAkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgY2hhciB2YWw7CisJCQorCXZhbCA9IHN0YWM5NDYwX2dldChpY2UsIFNUQUM5NDZYX0dFTkVSQUxfUFVSUE9TRSk7CisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9ICh2YWwgPj4gNykgJiAweDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhYzk0NjBfbWljX3N3X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkgICAgICAgCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBjaGFyIG5ldywgb2xkOworCWludCBjaGFuZ2U7CisJb2xkID0gc3RhYzk0NjBfZ2V0KGljZSwgU1RBQzk0NlhfR0VORVJBTF9QVVJQT1NFKTsKKwluZXcgPSAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA8PCA3ICYgMHg4MCkgfCAob2xkICYgfjB4ODApOworCWNoYW5nZSA9IChuZXcgIT0gb2xkKTsKKwlpZiAoY2hhbmdlKQorCQlzdGFjOTQ2MF9wdXQoaWNlLCBTVEFDOTQ2WF9HRU5FUkFMX1BVUlBPU0UsIG5ldyk7CisJcmV0dXJuIGNoYW5nZTsKK30KIAogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlX2RhYywgLTE5MTI1LCA3NSwgMCk7CiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGJfc2NhbGVfYWRjLCAwLCAxNTAsIDApOwpAQCAtMzY0LDcgKzQzNiw3IEBACiAgKiBtaXhlcnMKICAqLwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhY19jb250cm9sc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhY19jb250cm9sc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCkBAIC00MDYsNyArNDc4LDcgQEAKIAl9LAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkFEQyBTd2l0Y2giLAorCQkubmFtZSA9ICJBREMgQ2FwdHVyZSBTd2l0Y2giLAogCQkuY291bnQgPSAxLAogCQkuaW5mbyA9IHN0YWM5NDYwX2FkY19tdXRlX2luZm8sCiAJCS5nZXQgPSBzdGFjOTQ2MF9hZGNfbXV0ZV9nZXQsCkBAIC00MTcsMTMgKzQ4OSwyMSBAQAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLmFjY2VzcyA9IChTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKIAkJCSAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCksCi0JCS5uYW1lID0gIkFEQyBWb2x1bWUiLAorCQkubmFtZSA9ICJBREMgQ2FwdHVyZSBWb2x1bWUiLAogCQkuY291bnQgPSAxLAogCQkuaW5mbyA9IHN0YWM5NDYwX2FkY192b2xfaW5mbywKIAkJLmdldCA9IHN0YWM5NDYwX2FkY192b2xfZ2V0LAogCQkucHV0ID0gc3RhYzk0NjBfYWRjX3ZvbF9wdXQsCiAJCS50bHYgPSB7IC5wID0gZGJfc2NhbGVfYWRjIH0KIAl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkFuYWxvZyBDYXB0dXJlIElucHV0IiwKKwkJLmluZm8gPSBzdGFjOTQ2MF9taWNfc3dfaW5mbywKKwkJLmdldCA9IHN0YWM5NDYwX21pY19zd19nZXQsCisJCS5wdXQgPSBzdGFjOTQ2MF9taWNfc3dfcHV0LAorCisJfSwKICNpZiAwCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTQ1NiwxOSArNTM2LDI2MSBAQAogI2VuZGlmCiB9OwogCisKKy8qIEFLNDExNCAtIElDRTE3MjQgY29ubmVjdGlvbnMgb24gUHJvZGlneTE5MiArIE1JL09ESS9PICovCisvKiBDRFRPIChwaW4gMzIpIC0tIEdQSU8xMSBwaW4gODYKKyAqIENEVEkgKHBpbiAzMykgLS0gR1BJTzEwIHBpbiA3NworICogQ0NMSyAocGluIDM0KSAtLSBHUElPOSBwaW4gNzYKKyAqIENTTiAgKHBpbiAzNSkgLS0gR1BJTzggcGluIDc1CisgKi8KKyNkZWZpbmUgQUs0MTE0X0FERFIJMHgwMCAvKiBDMS1DMDogQ2hpcCBBZGRyZXNzCisJCQkgICAgICAqIChBY2NvcmRpbmcgdG8gZGF0YXNoZWV0IGZpeGVkIHRvIOKAnDAw4oCdKQorCQkJICAgICAgKi8KKworLyoKKyAqIDR3aXJlIGFrNDExNCBwcm90b2NvbCAtIHdyaXRpbmcgZGF0YQorICovCitzdGF0aWMgdm9pZCB3cml0ZV9kYXRhKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCB1bnNpZ25lZCBpbnQgZ3BpbywKKwkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhLCBpbnQgaWR4KQoreworCWZvciAoOyBpZHggPj0gMDsgaWR4LS0pIHsKKwkJLyogZHJvcCBjbG9jayAqLworCQlncGlvICY9IH5WVDE3MjRfUFJPRElHWTE5Ml9DQ0xLOworCQlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgZ3Bpbyk7CisJCXVkZWxheSgxKTsKKwkJLyogc2V0IGRhdGEgKi8KKwkJaWYgKGRhdGEgJiAoMSA8PCBpZHgpKQorCQkJZ3BpbyB8PSBWVDE3MjRfUFJPRElHWTE5Ml9DRE9VVDsKKwkJZWxzZQorCQkJZ3BpbyAmPSB+VlQxNzI0X1BST0RJR1kxOTJfQ0RPVVQ7CisJCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCBncGlvKTsKKwkJdWRlbGF5KDEpOworCQkvKiByYWlzZSBjbG9jayAqLworCQlncGlvIHw9IFZUMTcyNF9QUk9ESUdZMTkyX0NDTEs7CisJCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCBncGlvKTsKKwkJdWRlbGF5KDEpOworCX0KK30KKworLyoKKyAqIDR3aXJlIGFrNDExNCBwcm90b2NvbCAtIHJlYWRpbmcgZGF0YQorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciByZWFkX2RhdGEoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHVuc2lnbmVkIGludCBncGlvLAorCQkJICAgICAgIGludCBpZHgpCit7CisJdW5zaWduZWQgY2hhciBkYXRhID0gMDsKKworCWZvciAoOyBpZHggPj0gMDsgaWR4LS0pIHsKKwkJLyogZHJvcCBjbG9jayAqLworCQlncGlvICY9IH5WVDE3MjRfUFJPRElHWTE5Ml9DQ0xLOworCQlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgZ3Bpbyk7CisJCXVkZWxheSgxKTsKKwkJLyogcmVhZCBkYXRhICovCisJCWlmIChzbmRfaWNlMTcxMl9ncGlvX3JlYWQoaWNlKSAmIFZUMTcyNF9QUk9ESUdZMTkyX0NESU4pCisJCQlkYXRhIHw9ICgxIDw8IGlkeCk7CisJCXVkZWxheSgxKTsKKwkJLyogcmFpc2UgY2xvY2sgKi8KKwkJZ3BpbyB8PSBWVDE3MjRfUFJPRElHWTE5Ml9DQ0xLOworCQlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgZ3Bpbyk7CisJCXVkZWxheSgxKTsKKwl9CisJcmV0dXJuIGRhdGE7Cit9CisvKgorICogNHdpcmUgYWs0MTE0IHByb3RvY29sIC0gc3RhcnRpbmcgc2VxdWVuY2UKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBwcm9kaWd5MTkyXzR3aXJlX3N0YXJ0KHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlzbmRfaWNlMTcxMl9zYXZlX2dwaW9fc3RhdHVzKGljZSk7CisJdG1wID0gc25kX2ljZTE3MTJfZ3Bpb19yZWFkKGljZSk7CisKKwl0bXAgfD0gVlQxNzI0X1BST0RJR1kxOTJfQ0NMSzsgLyogaGlnaCBhdCBpbml0ICovCisJdG1wICY9IH5WVDE3MjRfUFJPRElHWTE5Ml9DUzsgLyogZHJvcCBjaGlwIHNlbGVjdCAqLworCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCXVkZWxheSgxKTsKKwlyZXR1cm4gdG1wOworfQorCisvKgorICogNHdpcmUgYWs0MTE0IHByb3RvY29sIC0gZmluYWwgc2VxdWVuY2UKKyAqLworc3RhdGljIHZvaWQgcHJvZGlneTE5Ml80d2lyZV9maW5pc2goc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHVuc2lnbmVkIGludCB0bXApCit7CisJdG1wIHw9IFZUMTcyNF9QUk9ESUdZMTkyX0NTOyAvKiByYWlzZSBjaGlwIHNlbGVjdCAqLworCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOworCXVkZWxheSgxKTsKKwlzbmRfaWNlMTcxMl9yZXN0b3JlX2dwaW9fc3RhdHVzKGljZSk7Cit9CisKKy8qCisgKiBXcml0ZSBkYXRhIHRvIGFkZHIgcmVnaXN0ZXIgb2YgYWs0MTE0CisgKi8KK3N0YXRpYyB2b2lkIHByb2RpZ3kxOTJfYWs0MTE0X3dyaXRlKHZvaWQgKnByaXZhdGVfZGF0YSwgdW5zaWduZWQgY2hhciBhZGRyLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YSkKK3sKKwlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgdG1wLCBhZGRyZGF0YTsKKwl0bXAgPSBwcm9kaWd5MTkyXzR3aXJlX3N0YXJ0KGljZSk7CisJYWRkcmRhdGEgPSAoQUs0MTE0X0FERFIgPDwgNikgfCAweDIwIHwgKGFkZHIgJiAweDFmKTsKKwlhZGRyZGF0YSA9IChhZGRyZGF0YSA8PCA4KSB8IGRhdGE7CisJd3JpdGVfZGF0YShpY2UsIHRtcCwgYWRkcmRhdGEsIDE1KTsKKwlwcm9kaWd5MTkyXzR3aXJlX2ZpbmlzaChpY2UsIHRtcCk7Cit9CisKKy8qCisgKiBSZWFkIGRhdGEgZnJvbSBhZGRyIHJlZ2lzdGVyIG9mIGFrNDExNAorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBwcm9kaWd5MTkyX2FrNDExNF9yZWFkKHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCQkJICAgIHVuc2lnbmVkIGNoYXIgYWRkcikKK3sKKwlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgdG1wOworCXVuc2lnbmVkIGNoYXIgZGF0YTsKKworCXRtcCA9IHByb2RpZ3kxOTJfNHdpcmVfc3RhcnQoaWNlKTsKKwl3cml0ZV9kYXRhKGljZSwgdG1wLCAoQUs0MTE0X0FERFIgPDwgNikgfCAoYWRkciAmIDB4MWYpLCA3KTsKKwlkYXRhID0gcmVhZF9kYXRhKGljZSwgdG1wLCA3KTsKKwlwcm9kaWd5MTkyXzR3aXJlX2ZpbmlzaChpY2UsIHRtcCk7CisJcmV0dXJuIGRhdGE7Cit9CisKKworc3RhdGljIGludCBhazQxMTRfaW5wdXRfc3dfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkgICAgICAgCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY2hhciAqdGV4dHNbMl0gPSB7ICJUb3NsaW5rIiwgIkNvYXgiIH07CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMjsKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworICAgICAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGFrNDExNF9pbnB1dF9zd19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJICAgICAgIAkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgY2hhciB2YWw7CisJCQorCXZhbCA9IHByb2RpZ3kxOTJfYWs0MTE0X3JlYWQoaWNlLCBBSzQxMTRfUkVHX0lPMSk7CisJLyogQUs0MTE0X0lQUzAgYml0ID0gMCAtPiBSWDAgPSBUb3NsaW5rCisJICogQUs0MTE0X0lQUzAgYml0ID0gMSAtPiBSWDEgPSBDb2F4CisJICovCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9ICh2YWwgJiBBSzQxMTRfSVBTMCkgPyAxIDogMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhazQxMTRfaW5wdXRfc3dfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCSAgICAgICAJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGNoYXIgbmV3LCBvbGQsIGl0ZW12YWx1ZTsKKwlpbnQgY2hhbmdlOworCisJb2xkID0gcHJvZGlneTE5Ml9hazQxMTRfcmVhZChpY2UsIEFLNDExNF9SRUdfSU8xKTsKKwkvKiBBSzQxMTRfSVBTMCBjb3VsZCBiZSBhbnkgYml0ICovCisJaXRlbXZhbHVlID0gKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pID8gMHhmZiA6IDB4MDA7CisKKwluZXcgPSAoaXRlbXZhbHVlICYgQUs0MTE0X0lQUzApIHwgKG9sZCAmIH5BSzQxMTRfSVBTMCk7CisJY2hhbmdlID0gKG5ldyAhPSBvbGQpOworCWlmIChjaGFuZ2UpCisJCXByb2RpZ3kxOTJfYWs0MTE0X3dyaXRlKGljZSwgQUs0MTE0X1JFR19JTzEsIG5ldyk7CisJcmV0dXJuIGNoYW5nZTsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWs0MTE0X2NvbnRyb2xzW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNSU9ESU8gSUVDOTU4IENhcHR1cmUgSW5wdXQiLAorCQkuaW5mbyA9IGFrNDExNF9pbnB1dF9zd19pbmZvLAorCQkuZ2V0ID0gYWs0MTE0X2lucHV0X3N3X2dldCwKKwkJLnB1dCA9IGFrNDExNF9pbnB1dF9zd19wdXQsCisKKwl9Cit9OworCisKK3N0YXRpYyBpbnQgcHJvZGlneTE5Ml9hazQxMTRfaW5pdChzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhazQxMTRfaW5pdF92YWxzW10gPSB7CisJCUFLNDExNF9SU1QgfCBBSzQxMTRfUFdOIHwgQUs0MTE0X09DS1MwIHwgQUs0MTE0X09DS1MxLAorCQkvKiBpY2UxNzI0IGV4cGVjdHMgSTJTIGFuZCBwcm92aWRlcyBjbG9jaywKKwkJICogREVNMCBkaXNhYmxlcyB0aGUgZGVlbXBoYXNpcyBmaWx0ZXIKKwkJICovCisJCUFLNDExNF9ESUZfSTI0STJTIHwgQUs0MTE0X0RFTTAgLAorCQlBSzQxMTRfVFgxRSwKKwkJQUs0MTE0X0VGSF8xMDI0IHwgQUs0MTE0X0RJVCwgLyogZGVmYXVsdCBpbnB1dCBSWDAgKi8KKwkJMCwKKwkJMAorCX07CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWs0MTE0X2luaXRfdHhjc2JbXSA9IHsKKwkJMHg0MSwgMHgwMiwgMHgyYywgMHgwMCwgMHgwMAorCX07CisKKwlyZXR1cm4gc25kX2FrNDExNF9jcmVhdGUoaWNlLT5jYXJkLAorCQkJCSBwcm9kaWd5MTkyX2FrNDExNF9yZWFkLAorCQkJCSBwcm9kaWd5MTkyX2FrNDExNF93cml0ZSwKKwkJCQkgYWs0MTE0X2luaXRfdmFscywgYWs0MTE0X2luaXRfdHhjc2IsCisJCQkJIGljZSwgJmljZS0+c3BlYy5wcm9kaWd5MTkyLmFrNDExNCk7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHByb2RpZ3kxOTJfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQogewogCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGFjX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGljZS0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzdGFjX2NvbnRyb2xzW2ldLCBpY2UpKTsKKwkJZXJyID0gc25kX2N0bF9hZGQoaWNlLT5jYXJkLAorCQkJCSAgc25kX2N0bF9uZXcxKCZzdGFjX2NvbnRyb2xzW2ldLCBpY2UpKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoaWNlLT5zcGVjLnByb2RpZ3kxOTIuYWs0MTE0KSB7CisJCS8qIGFrNDExNCBpcyBjb25uZWN0ZWQgKi8KKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWs0MTE0X2NvbnRyb2xzKTsgaSsrKSB7CisJCQllcnIgPSBzbmRfY3RsX2FkZChpY2UtPmNhcmQsCisJCQkJCSAgc25kX2N0bF9uZXcxKCZhazQxMTRfY29udHJvbHNbaV0sCisJCQkJCQkgICAgICAgaWNlKSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJCWVyciA9IHNuZF9hazQxMTRfYnVpbGQoaWNlLT5zcGVjLnByb2RpZ3kxOTIuYWs0MTE0LAorCQkJCU5VTEwsIC8qIGFrNDExNCBpbiBNSU8vREkvTyBoYW5kbGVzIG5vIElFQzk1OCBvdXRwdXQgKi8KKwkJCQlpY2UtPnBjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBjaGVjayBmb3IgcHJlc2VuY2Ugb2YgTUkvT0RJL08gYWRkLW9uIGNhcmQgd2l0aCBkaWdpdGFsIGlucHV0cworICovCitzdGF0aWMgaW50IHByb2RpZ3kxOTJfbWlvZGlvX2V4aXN0cyhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKK3sKKworCXVuc2lnbmVkIGNoYXIgb3JpZ192YWx1ZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyIHRlc3RfZGF0YSA9IDB4ZDE7CS8qIHJhbmRvbSB2YWx1ZSAqLworCXVuc2lnbmVkIGNoYXIgYWRkciA9IEFLNDExNF9SRUdfSU5UMF9NQVNLOyAvKiByYW5kb20gU0FGRSBhZGRyZXNzICovCisJaW50IGV4aXN0cyA9IDA7CisKKwlvcmlnX3ZhbHVlID0gcHJvZGlneTE5Ml9hazQxMTRfcmVhZChpY2UsIGFkZHIpOworCXByb2RpZ3kxOTJfYWs0MTE0X3dyaXRlKGljZSwgYWRkciwgdGVzdF9kYXRhKTsKKwlpZiAocHJvZGlneTE5Ml9hazQxMTRfcmVhZChpY2UsIGFkZHIpID09IHRlc3RfZGF0YSkgeworCQkvKiBhazQxMTQgc2VlbXMgdG8gY29tbXVuaWNhdGUsIGFwcGFyZW50bHkgZXhpc3RzICovCisJCS8qIHdyaXRpbmcgYmFjayBvcmlnaW5hbCB2YWx1ZSAqLworCQlwcm9kaWd5MTkyX2FrNDExNF93cml0ZShpY2UsIGFkZHIsIG9yaWdfdmFsdWUpOworCQlleGlzdHMgPSAxOworCX0KKwlyZXR1cm4gZXhpc3RzOworfQogCiAvKgogICogaW5pdGlhbGl6ZSB0aGUgY2hpcApAQCAtNDg3LDE2ICs4MDksMzAgQEAKIAkJKHVuc2lnbmVkIHNob3J0KS0xCiAJfTsKIAljb25zdCB1bnNpZ25lZCBzaG9ydCAqcDsKKwlpbnQgZXJyID0gMDsKIAogCS8qIHByb2RpZ3kgMTkyICovCiAJaWNlLT5udW1fdG90YWxfZGFjcyA9IDY7CiAJaWNlLT5udW1fdG90YWxfYWRjcyA9IDI7CisJaWNlLT52dDE3MjAgPSAwOyAgLyogaWNlMTcyNCwgZS5nLiAyMyBHUElPcyAqLwogCQogCS8qIGluaXRpYWxpemUgY29kZWMgKi8KIAlwID0gc3RhY19pbml0c19wcm9kaWd5OwogCWZvciAoOyAqcCAhPSAodW5zaWduZWQgc2hvcnQpLTE7IHAgKz0gMikKIAkJc3RhYzk0NjBfcHV0KGljZSwgcFswXSwgcFsxXSk7CiAKKwkvKiBNSS9PREkvTyBhZGQgb24gY2FyZCB3aXRoIEFLNDExNCAqLworCWlmIChwcm9kaWd5MTkyX21pb2Rpb19leGlzdHMoaWNlKSkgeworCQllcnIgPSBwcm9kaWd5MTkyX2FrNDExNF9pbml0KGljZSk7CisJCS8qIGZyb20gdGhpcyBtb21lbnQgaWYgZXJyID0gMCB0aGVuCisJCSAqIGljZS0+c3BlYy5wcm9kaWd5MTkyLmFrNDExNCBzaG91bGQgbm90IGJlIG51bGwKKwkJICovCisJCXNuZF9wcmludGRkKCJBSzQxMTQgaW5pdGlhbGl6ZWQgd2l0aCBzdGF0dXMgJWRcbiIsIGVycik7CisJfSBlbHNlCisJCXNuZF9wcmludGRkKCJBSzQxMTQgbm90IGZvdW5kXG4iKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCXJldHVybiAwOwogfQogCkBAIC01MDYsMjUgKzg0MiwzMSBAQAogICogaGVuY2UgdGhlIGRyaXZlciBuZWVkcyB0byBzZXRzIHVwIGl0IHByb3Blcmx5LgogICovCiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHByb2RpZ3k3MV9lZXByb21bXSBfX2RldmluaXRkYXRhID0gewotCVtJQ0VfRUVQMl9TWVNDT05GXSAgICAgPSAweDJiLAkvKiBjbG9jayA1MTIsIG1wdTQwMSwgc3BkaWYtaW4vQURDLCA0REFDcyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgcHJvZGlneTcxX2VlcHJvbVtdIF9fZGV2aW5pdGRhdGEgPSB7CisJW0lDRV9FRVAyX1NZU0NPTkZdICAgICA9IDB4NmEsCS8qIDQ5TUh6IGNyeXN0YWwsIG1wdTQwMSwKKwkJCQkJICogc3BkaWYtaW4rIDEgc3RlcmVvIEFEQywKKwkJCQkJICogMyBzdGVyZW8gREFDcworCQkJCQkgKi8KIAlbSUNFX0VFUDJfQUNMSU5LXSAgICAgID0gMHg4MCwJLyogSTJTICovCiAJW0lDRV9FRVAyX0kyU10gICAgICAgICA9IDB4ZjgsCS8qIHZvbCwgOTZrLCAyNGJpdCwgMTkyayAqLwogCVtJQ0VfRUVQMl9TUERJRl0gICAgICAgPSAweGMzLAkvKiBvdXQtZW4sIG91dC1pbnQsIHNwZGlmLWluICovCiAJW0lDRV9FRVAyX0dQSU9fRElSXSAgICA9IDB4ZmYsCi0JW0lDRV9FRVAyX0dQSU9fRElSMV0gICA9IDB4ZmYsCisJW0lDRV9FRVAyX0dQSU9fRElSMV0gICA9IH4oVlQxNzI0X1BST0RJR1kxOTJfQ0RJTiA+PiA4KSAsCiAJW0lDRV9FRVAyX0dQSU9fRElSMl0gICA9IDB4YmYsCiAJW0lDRV9FRVAyX0dQSU9fTUFTS10gICA9IDB4MDAsCiAJW0lDRV9FRVAyX0dQSU9fTUFTSzFdICA9IDB4MDAsCiAJW0lDRV9FRVAyX0dQSU9fTUFTSzJdICA9IDB4MDAsCiAJW0lDRV9FRVAyX0dQSU9fU1RBVEVdICA9IDB4MDAsCiAJW0lDRV9FRVAyX0dQSU9fU1RBVEUxXSA9IDB4MDAsCi0JW0lDRV9FRVAyX0dQSU9fU1RBVEUyXSA9IDB4MDAsCisJW0lDRV9FRVAyX0dQSU9fU1RBVEUyXSA9IDB4MTAsICAvKiBHUElPMjA6IDAgPSBDRCBkcml2ZSBkaWcuIGlucHV0CisJCQkJCSAqIHBhc3N0aHJvdWdoLAorCQkJCQkgKiAxID0gU1BESUYtT1VUIGZyb20gaWNlMTcyNAorCQkJCQkgKi8KIH07CiAKIAogLyogZW50cnkgcG9pbnQgKi8KLWNvbnN0IHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX3Z0MTcyNF9wcm9kaWd5MTkyX2NhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX3Z0MTcyNF9wcm9kaWd5MTkyX2NhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS5zdWJ2ZW5kb3IgPSBWVDE3MjRfU1VCREVWSUNFX1BST0RJR1kxOTJWRSwKIAkJLm5hbWUgPSAiQXVkaW90cmFrIFByb2RpZ3kgMTkyIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuaCBiL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3kxOTIuaAppbmRleCAyZmEyZTYyLi4xNmE1M2I0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5MTkyLmgKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneTE5Mi5oCkBAIC01LDcgKzUsMTUgQEAKICNkZWZpbmUgUFJPRElHWTE5Ml9TVEFDOTQ2MF9BRERSCTB4NTQKIAogI2RlZmluZSBWVDE3MjRfU1VCREVWSUNFX1BST0RJR1kxOTJWRQkgMHgzNDQ5NTM0NQkvKiBQUk9ESUdZIDE5MiBWRSAqLworLyoKKyAqICBBdWRpb1RyYWsgUHJvZGlneTE5MiBHUElPIGRlZmluaXRpb25zIGZvciBNSS9PREkvTyBjYXJkIHdpdGgKKyAqICBBSzQxMTQgKFNQRElGLUlOKQorICovCisjZGVmaW5lIFZUMTcyNF9QUk9ESUdZMTkyX0NTCSgxIDw8IDgpCS8qIEdQSU84LCBwaW4gNzUgKi8KKyNkZWZpbmUgVlQxNzI0X1BST0RJR1kxOTJfQ0NMSwkoMSA8PCA5KQkvKiBHUElPOSwgcGluIDc2ICovCisjZGVmaW5lIFZUMTcyNF9QUk9ESUdZMTkyX0NET1VUCSgxIDw8IDEwKQkvKiBHUElPMTAsIHBpbiA3NyAqLworI2RlZmluZSBWVDE3MjRfUFJPRElHWTE5Ml9DRElOCSgxIDw8IDExKQkvKiBHUElPMTEsIHBpbiA4NiAqLwogCi1leHRlcm4gY29uc3Qgc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAgc25kX3Z0MTcyNF9wcm9kaWd5MTkyX2NhcmRzW107CitleHRlcm4gc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAgc25kX3Z0MTcyNF9wcm9kaWd5MTkyX2NhcmRzW107CiAKICNlbmRpZgkvKiBfX1NPVU5EX1BST0RJR1kxOTJfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcmV2by5jIGIvc291bmQvcGNpL2ljZTE3MTIvcmV2by5jCmluZGV4IDAyNWE3ZTguLjY5MGNlYjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3Jldm8uYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9yZXZvLmMKQEAgLTIxOSw3ICsyMTksNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9ha200eHh4IGFrbV9yZXZvX2Zyb250IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9ha200eHh4IGFrbV9yZXZvX2Zyb250IF9fZGV2aW5pdGRhdGEgPSB7CiAJLnR5cGUgPSBTTkRfQUs0MzgxLAogCS5udW1fZGFjcyA9IDIsCiAJLm9wcyA9IHsKQEAgLTIyOCw3ICsyMjgsNyBAQAogCS5kYWNfaW5mbyA9IHJldm83MV9mcm9udCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2FrNHh4eF9wcml2YXRlIGFrbV9yZXZvX2Zyb250X3ByaXYgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2FrNHh4eF9wcml2YXRlIGFrbV9yZXZvX2Zyb250X3ByaXYgX19kZXZpbml0ZGF0YSA9IHsKIAkuY2FkZHIgPSAxLAogCS5jaWYgPSAwLAogCS5kYXRhX21hc2sgPSBWVDE3MjRfUkVWT19DRE9VVCwKQEAgLTI0MCw3ICsyNDAsNyBAQAogCS5tYXNrX2ZsYWdzID0gMCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX3Jldm9fc3Vycm91bmQgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX3Jldm9fc3Vycm91bmQgX19kZXZpbml0ZGF0YSA9IHsKIAkudHlwZSA9IFNORF9BSzQzNTUsCiAJLmlkeF9vZmZzZXQgPSAxLAogCS5udW1fZGFjcyA9IDYsCkBAIC0yNTAsNyArMjUwLDcgQEAKIAkuZGFjX2luZm8gPSByZXZvNzFfc3Vycm91bmQsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fcmV2b19zdXJyb3VuZF9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fcmV2b19zdXJyb3VuZF9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CiAJLmNhZGRyID0gMywKIAkuY2lmID0gMCwKIAkuZGF0YV9tYXNrID0gVlQxNzI0X1JFVk9fQ0RPVVQsCkBAIC0yNjIsNyArMjYyLDcgQEAKIAkubWFza19mbGFncyA9IDAsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9ha200eHh4IGFrbV9yZXZvNTEgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX3Jldm81MSBfX2RldmluaXRkYXRhID0gewogCS50eXBlID0gU05EX0FLNDM1OCwKIAkubnVtX2RhY3MgPSA2LAogCS5vcHMgPSB7CkBAIC0yNzEsNyArMjcxLDcgQEAKIAkuZGFjX2luZm8gPSByZXZvNTFfZGFjLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfYWs0eHh4X3ByaXZhdGUgYWttX3Jldm81MV9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fcmV2bzUxX3ByaXYgX19kZXZpbml0ZGF0YSA9IHsKIAkuY2FkZHIgPSAyLAogCS5jaWYgPSAwLAogCS5kYXRhX21hc2sgPSBWVDE3MjRfUkVWT19DRE9VVCwKQEAgLTI4MywxMyArMjgzLDEzIEBACiAJLm1hc2tfZmxhZ3MgPSAwLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfYWttNHh4eCBha21fcmV2bzUxX2FkYyBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBzbmRfYWttNHh4eCBha21fcmV2bzUxX2FkYyBfX2RldmluaXRkYXRhID0gewogCS50eXBlID0gU05EX0FLNTM2NSwKIAkubnVtX2FkY3MgPSAyLAogCS5hZGNfaW5mbyA9IHJldm81MV9hZGMsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fcmV2bzUxX2FkY19wcml2IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fcmV2bzUxX2FkY19wcml2IF9fZGV2aW5pdGRhdGEgPSB7CiAJLmNhZGRyID0gMiwKIAkuY2lmID0gMCwKIAkuZGF0YV9tYXNrID0gVlQxNzI0X1JFVk9fQ0RPVVQsCkBAIC0zMjQsNyArMzI0LDcgQEAKIAlBS19EQUMoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCAyKQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfYWttNHh4eCBha21fYXAxOTIgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2FrbTR4eHggYWttX2FwMTkyIF9fZGV2aW5pdGRhdGEgPSB7CiAJLnR5cGUgPSBTTkRfQUs0MzU4LAogCS5udW1fZGFjcyA9IDIsCiAJLm9wcyA9IHsKQEAgLTMzMyw3ICszMzMsNyBAQAogCS5kYWNfaW5mbyA9IGFwMTkyX2RhYywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2FrNHh4eF9wcml2YXRlIGFrbV9hcDE5Ml9wcml2IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9hazR4eHhfcHJpdmF0ZSBha21fYXAxOTJfcHJpdiBfX2RldmluaXRkYXRhID0gewogCS5jYWRkciA9IDIsCiAJLmNpZiA9IDAsCiAJLmRhdGFfbWFzayA9IFZUMTcyNF9SRVZPX0NET1VULApAQCAtNDA1LDcgKzQwNSw3IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGFwMTkyXzR3aXJlX3N0YXJ0KHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQorc3RhdGljIHVuc2lnbmVkIGludCBhcDE5Ml80d2lyZV9zdGFydChzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCkBAIC00NTQsNyArNDU0LDcgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIGludCBhcDE5Ml9hazQxMTRfaW5pdChzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFwMTkyX2FrNDExNF9pbml0KHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQogewogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFrNDExNF9pbml0X3ZhbHNbXSA9IHsKIAkJQUs0MTE0X1JTVCB8IEFLNDExNF9QV04gfCBBSzQxMTRfT0NLUzAgfCBBSzQxMTRfT0NLUzEsCkBAIC01ODIsNyArNTgyLDcgQEAKIH0KIAogLyogZW50cnkgcG9pbnQgKi8KLWNvbnN0IHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX3Z0MTcyNF9yZXZvX2NhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX3Z0MTcyNF9yZXZvX2NhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS5zdWJ2ZW5kb3IgPSBWVDE3MjRfU1VCREVWSUNFX1JFVk9MVVRJT043MSwKIAkJLm5hbWUgPSAiTSBBdWRpbyBSZXZvbHV0aW9uLTcuMSIsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9yZXZvLmggYi9zb3VuZC9wY2kvaWNlMTcxMi9yZXZvLmgKaW5kZXggMmEyNDQ4OC4uYTNiYTQyNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvcmV2by5oCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Jldm8uaApAQCAtMzQsNyArMzQsNyBAQAogI2RlZmluZSBWVDE3MjRfU1VCREVWSUNFX0FVRElPUEhJTEUxOTIJMHgxMjE0MzIzNgogCiAvKiBlbnRyeSBwb2ludCAqLwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbmRfaWNlMTcxMl9jYXJkX2luZm8gc25kX3Z0MTcyNF9yZXZvX2NhcmRzW107CitleHRlcm4gc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyBzbmRfdnQxNzI0X3Jldm9fY2FyZHNbXTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvdnQxNzIwX21vYm8uYyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Z0MTcyMF9tb2JvLmMKaW5kZXggNzJiMDYwZC4uMjM5NTI0MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvdnQxNzIwX21vYm8uYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi92dDE3MjBfbW9iby5jCkBAIC01Niw3ICs1Niw3IEBACiAKIC8qIEVFUFJPTSBpbWFnZSAqLwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrOHg4MDBfZWVwcm9tW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGs4eDgwMF9lZXByb21bXSBfX2RldmluaXRkYXRhID0gewogCVtJQ0VfRUVQMl9TWVNDT05GXSAgICAgPSAweDAxLAkvKiBjbG9jayAyNTYsIDFBREMsIDJEQUNzICovCiAJW0lDRV9FRVAyX0FDTElOS10gICAgICA9IDB4MDIsCS8qIEFDTElOSywgcGFja2VkICovCiAJW0lDRV9FRVAyX0kyU10gICAgICAgICA9IDB4MDAsCS8qIC0gKi8KQEAgLTcyLDcgKzcyLDcgQEAKIAlbSUNFX0VFUDJfR1BJT19TVEFURTJdID0gMHgwMCwJLyogLSAqLwogfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc24yNXBfZWVwcm9tW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNuMjVwX2VlcHJvbVtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJW0lDRV9FRVAyX1NZU0NPTkZdICAgICA9IDB4MDEsCS8qIGNsb2NrIDI1NiwgMUFEQywgMkRBQ3MgKi8KIAlbSUNFX0VFUDJfQUNMSU5LXSAgICAgID0gMHgwMiwJLyogQUNMSU5LLCBwYWNrZWQgKi8KIAlbSUNFX0VFUDJfSTJTXSAgICAgICAgID0gMHgwMCwJLyogLSAqLwpAQCAtOTAsNyArOTAsNyBAQAogCiAKIC8qIGVudHJ5IHBvaW50ICovCi1jb25zdCBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF92dDE3MjBfbW9ib19jYXJkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF92dDE3MjBfbW9ib19jYXJkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewogCQkuc3VidmVuZG9yID0gVlQxNzIwX1NVQkRFVklDRV9LOFg4MDAsCiAJCS5uYW1lID0gIkFsYmF0cm9uIEs4WDgwMCBQcm8gSUkiLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvdnQxNzIwX21vYm8uaCBiL3NvdW5kL3BjaS9pY2UxNzEyL3Z0MTcyMF9tb2JvLmgKaW5kZXggNzBhZjNhZC4uMGIxYjBlZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvdnQxNzIwX21vYm8uaAorKysgYi9zb3VuZC9wY2kvaWNlMTcxMi92dDE3MjBfbW9iby5oCkBAIC0zNiw2ICszNiw2IEBACiAjZGVmaW5lIFZUMTcyMF9TVUJERVZJQ0VfOUNKUwkJMHgwZjI3MjMyNwogI2RlZmluZSBWVDE3MjBfU1VCREVWSUNFX1NOMjVQCQkweDk3MTIzNjUwCiAKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvICBzbmRfdnQxNzIwX21vYm9fY2FyZHNbXTsKK2V4dGVybiBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvICBzbmRfdnQxNzIwX21vYm9fY2FyZHNbXTsKIAogI2VuZGlmIC8qIF9fU09VTkRfVlQxNzIwX01PQk9fSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvd3RtLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi93dG0uYwppbmRleCA0YTcwNmIxLi4wNGU1MzVjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi93dG0uYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi93dG0uYwpAQCAtNDA5LDcgKzQwOSw3IEBACiAvKgogICogQ29udHJvbCB0YWJzCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTY0MF9jb250cm9sc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzk2NDBfY29udHJvbHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCA3Y2YyZGNiLi5kYTk3MzQwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtMTc5OSw2ICsxNzk5LDE4IEBACiAJfSwKIAl7CiAJCS5zdWJ2ZW5kb3IgPSAweDEwMjgsCisJCS5zdWJkZXZpY2UgPSAweDAxODYsCisJCS5uYW1lID0gIkRlbGwgTGF0aXR1ZGUgRDgxMCIsIC8qIGNmLiBNYWxvbmUgIzQxMDE1ICovCisJCS50eXBlID0gQUM5N19UVU5FX0hQX01VVEVfTEVECisJfSwKKwl7CisJCS5zdWJ2ZW5kb3IgPSAweDEwMjgsCisJCS5zdWJkZXZpY2UgPSAweDAxODgsCisJCS5uYW1lID0gIkRlbGwgSW5zcGlyb24gNjAwMCIsCisJCS50eXBlID0gQUM5N19UVU5FX0hQX01VVEVfTEVEIC8qIGNmLiBNYWxvbmUgIzQxMDE1ICovCisJfSwKKwl7CisJCS5zdWJ2ZW5kb3IgPSAweDEwMjgsCiAJCS5zdWJkZXZpY2UgPSAweDAxOTEsCiAJCS5uYW1lID0gIkRlbGwgSW5zcGlyb24gODYwMCIsCiAJCS50eXBlID0gQUM5N19UVU5FX0hQX09OTFkKQEAgLTE4MTksNyArMTgzMSw3IEBACiAJCS5zdWJ2ZW5kb3IgPSAweDEwM2MsCiAJCS5zdWJkZXZpY2UgPSAweDA4OGMsCiAJCS5uYW1lID0gIkhQIG5jODAwMCIsCi0JCS50eXBlID0gQUM5N19UVU5FX01VVEVfTEVECisJCS50eXBlID0gQUM5N19UVU5FX0hQX01VVEVfTEVECiAJfSwKIAl7CiAJCS5zdWJ2ZW5kb3IgPSAweDEwM2MsCkBAIC0xOTEzLDYgKzE5MjUsMTIgQEAKIAl9LAogCXsKIAkJLnN1YnZlbmRvciA9IDB4MTBjZiwKKwkJLnN1YmRldmljZSA9IDB4MTI3ZSwKKwkJLm5hbWUgPSAiRnVqaXRzdSBMaWZlYm9vayBDMTIxMUQiLAorCQkudHlwZSA9IEFDOTdfVFVORV9IUF9PTkxZCisJfSwKKwl7CisJCS5zdWJ2ZW5kb3IgPSAweDEwY2YsCiAJCS5zdWJkZXZpY2UgPSAweDEyZWMsCiAJCS5uYW1lID0gIkZ1aml0c3UtU2llbWVucyA0MDEwIiwKIAkJLnR5cGUgPSBBQzk3X1RVTkVfSFBfT05MWQpAQCAtMjQ5Myw2ICsyNTExLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CisJc25kX2ludGVsOHgwX2NoaXBfaW5pdChjaGlwLCAwKTsKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9pbnRlbDh4MF9pbnRlcnJ1cHQsCiAJCQlJUlFGX1NIQVJFRCwgY2FyZC0+c2hvcnRuYW1lLCBjaGlwKSkgewogCQlwcmludGsoS0VSTl9FUlIgImludGVsOHgwOiB1bmFibGUgdG8gZ3JhYiBJUlEgJWQsICIKQEAgLTI1MDIsNyArMjUyMSw2IEBACiAJfQogCWNoaXAtPmlycSA9IHBjaS0+aXJxOwogCXN5bmNocm9uaXplX2lycShjaGlwLT5pcnEpOwotCXNuZF9pbnRlbDh4MF9jaGlwX2luaXQoY2hpcCwgMCk7CiAKIAkvKiByZS1pbml0aWFsaXplIG1peGVyIHN0dWZmICovCiAJaWYgKGNoaXAtPmRldmljZV90eXBlID09IERFVklDRV9JTlRFTF9JQ0g0ICYmICFzcGRpZl9hY2xpbmspIHsKQEAgLTI4NjIsMTYgKzI4ODAsNyBAQAogCQlJQ0hfUkVHX0FMSV9JTlRFUlJVUFRTUiA6IElDSF9SRUdfR0xPQl9TVEE7CiAJY2hpcC0+aW50X3N0YV9tYXNrID0gaW50X3N0YV9tYXNrczsKIAotCS8qIHJlcXVlc3QgaXJxIGFmdGVyIGluaXRpYWxpemFpbmcgaW50X3N0YV9tYXNrLCBldGMgKi8KLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9pbnRlbDh4MF9pbnRlcnJ1cHQsCi0JCQlJUlFGX1NIQVJFRCwgY2FyZC0+c2hvcnRuYW1lLCBjaGlwKSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKLQkJc25kX2ludGVsOHgwX2ZyZWUoY2hpcCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCWNoaXAtPmlycSA9IHBjaS0+aXJxOwogCXBjaV9zZXRfbWFzdGVyKHBjaSk7Ci0Jc3luY2hyb25pemVfaXJxKGNoaXAtPmlycSk7CiAKIAlzd2l0Y2goY2hpcC0+ZGV2aWNlX3R5cGUpIHsKIAljYXNlIERFVklDRV9JTlRFTF9JQ0g0OgpAQCAtMjkwMSw2ICsyOTEwLDE1IEBACiAJCXJldHVybiBlcnI7CiAJfQogCisJLyogcmVxdWVzdCBpcnEgYWZ0ZXIgaW5pdGlhbGl6YWluZyBpbnRfc3RhX21hc2ssIGV0YyAqLworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ludGVsOHgwX2ludGVycnVwdCwKKwkJCUlSUUZfU0hBUkVELCBjYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOworCQlzbmRfaW50ZWw4eDBfZnJlZShjaGlwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJY2hpcC0+aXJxID0gcGNpLT5pcnE7CisKIAlpZiAoKGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcykpIDwgMCkgewogCQlzbmRfaW50ZWw4eDBfZnJlZShjaGlwKTsKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jIGIvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMKaW5kZXggMjFkMDg5OWEuLjUzMzgyNDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC0yNjQsOSArMjY0LDcgQEAKICNkZWZpbmUgQ09NTUFORF9BQ0tfREVMQVkgICAxMyAgICAgICAgIC8vIG51bWJlciBvZiBSVEMgdGlja3MgdG8gd2FpdCBmb3IgYW4gYWNrbm93bGVkZ2VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBmcm9tIHRoZSBjYXJkIGFmdGVyIHNlbmRpbmcgYSBjb21tYW5kLgogCi0jZGVmaW5lIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwKLQotI2lmZGVmIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwKKyNpZmRlZiBDT05GSUdfU05EX0tPUkcxMjEyX0ZJUk1XQVJFX0lOX0tFUk5FTAogI2luY2x1ZGUgImtvcmcxMjEyLWZpcm13YXJlLmgiCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlIHN0YXRpY19kc3BfY29kZSA9IHsKIAkuZGF0YSA9ICh1OCAqKWRzcENvZGUsCkBAIC00MTgsNiArNDE2LDkgQEAKIE1PRFVMRV9ERVNDUklQVElPTigia29yZzEyMTIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0tPUkcsa29yZzEyMTJ9fSIpOworI2lmbmRlZiBDT05GSUdfU05EX0tPUkcxMjEyX0ZJUk1XQVJFX0lOX0tFUk5FTAorTU9EVUxFX0ZJUk1XQVJFKCJrb3JnL2sxMjEyLmRzcCIpOworI2VuZGlmCiAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7ICAgICAvKiBJbmRleCAwLU1BWCAqLwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkgICAvKiBJRCBmb3IgdGhpcyBjYXJkICovCkBAIC0yMzQyLDI2ICsyMzQzLDI1IEBACiAgICAgICAgIGtvcmcxMjEyLT5BZGF0VGltZUNvZGVQaHkgPSBrb3JnMTIxMi0+c2hhcmVkQnVmZmVyUGh5ICsKIAkJb2Zmc2V0b2Yoc3RydWN0IEtvcmdTaGFyZWRCdWZmZXIsIEFkYXRUaW1lQ29kZSk7CiAKKyNpZmRlZiBDT05GSUdfU05EX0tPUkcxMjEyX0ZJUk1XQVJFX0lOX0tFUk5FTAorCWRzcF9jb2RlID0gJnN0YXRpY19kc3BfY29kZTsKKyNlbHNlCiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZHNwX2NvZGUsICJrb3JnL2sxMjEyLmRzcCIsICZwY2ktPmRldik7CiAJaWYgKGVyciA8IDApIHsKIAkJcmVsZWFzZV9maXJtd2FyZShkc3BfY29kZSk7Ci0jaWZkZWYgRklSTVdBUkVfSU5fVEhFX0tFUk5FTAotCQlkc3BfY29kZSA9ICZzdGF0aWNfZHNwX2NvZGU7Ci0jZWxzZQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJmaXJtd2FyZSBub3QgYXZhaWxhYmxlXG4iKTsKIAkJc25kX2tvcmcxMjEyX2ZyZWUoa29yZzEyMTIpOwogCQlyZXR1cm4gZXJyOwotI2VuZGlmCiAJfQorI2VuZGlmCiAKIAlpZiAoc25kX2RtYV9hbGxvY19wYWdlcyhTTkRSVl9ETUFfVFlQRV9ERVYsIHNuZF9kbWFfcGNpX2RhdGEocGNpKSwKIAkJCQlkc3BfY29kZS0+c2l6ZSwgJmtvcmcxMjEyLT5kbWFfZHNwKSA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAia29yZzEyMTI6IGNhbm5vdCBhbGxvY2F0ZSBkc3AgY29kZSBtZW1vcnkgKCV6ZCBieXRlcylcbiIsIGRzcF9jb2RlLT5zaXplKTsKICAgICAgICAgICAgICAgICBzbmRfa29yZzEyMTJfZnJlZShrb3JnMTIxMik7Ci0jaWZkZWYgRklSTVdBUkVfSU5fVEhFX0tFUk5FTAotCQlpZiAoZHNwX2NvZGUgIT0gJnN0YXRpY19kc3BfY29kZSkKKyNpZm5kZWYgQ09ORklHX1NORF9LT1JHMTIxMl9GSVJNV0FSRV9JTl9LRVJORUwKKwkJcmVsZWFzZV9maXJtd2FyZShkc3BfY29kZSk7CiAjZW5kaWYKLQkJCXJlbGVhc2VfZmlybXdhcmUoZHNwX2NvZGUpOwogICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwogICAgICAgICB9CiAKQEAgLTIzNzEsMTAgKzIzNzEsOSBAQAogCiAJbWVtY3B5KGtvcmcxMjEyLT5kbWFfZHNwLmFyZWEsIGRzcF9jb2RlLT5kYXRhLCBkc3BfY29kZS0+c2l6ZSk7CiAKLSNpZmRlZiBGSVJNV0FSRV9JTl9USEVfS0VSTkVMCi0JaWYgKGRzcF9jb2RlICE9ICZzdGF0aWNfZHNwX2NvZGUpCisjaWZuZGVmIENPTkZJR19TTkRfS09SRzEyMTJfRklSTVdBUkVfSU5fS0VSTkVMCisJcmVsZWFzZV9maXJtd2FyZShkc3BfY29kZSk7CiAjZW5kaWYKLQkJcmVsZWFzZV9maXJtd2FyZShkc3BfY29kZSk7CiAKIAlyYyA9IHNuZF9rb3JnMTIxMl9TZW5kMTIxMkNvbW1hbmQoa29yZzEyMTIsIEsxMjEyX0RCX1JlYm9vdENhcmQsIDAsIDAsIDAsIDApOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWFlc3RybzMuYyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCmluZGV4IDQ1MjY5MDQuLjhhNWZmMWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jCisrKyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCkBAIC01OSw2ICs1OSwxMCBAQAogCQkie0VTUyxBbGxlZ3JvIFBDSX0sIgogCQkie0VTUyxBbGxlZ3JvLTEgUENJfSwiCiAJICAgICAgICAie0VTUyxDYW55b24zRC0yL0xFIFBDSX19Iik7CisjaWZuZGVmIENPTkZJR19TTkRfTUFFU1RSTzNfRklSTVdBUkVfSU5fS0VSTkVMCitNT0RVTEVfRklSTVdBUkUoImVzcy9tYWVzdHJvM19hc3NwX2tlcm5lbC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJlc3MvbWFlc3RybzNfYXNzcF9taW5pc3JjLmZ3Iik7CisjZW5kaWYKIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwpAQCAtMjEwMSw5ICsyMTA1LDcgQEAKIH0KIAogCi0jZGVmaW5lIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwKLQotI2lmZGVmIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwKKyNpZmRlZiBDT05GSUdfU05EX01BRVNUUk8zX0ZJUk1XQVJFX0lOX0tFUk5FTAogCiAvKgogICogRFNQIENvZGUgaW1hZ2VzCkBAIC0yMjQyLDcgKzIyNDQsNyBAQAogCS5zaXplID0gc2l6ZW9mIGFzc3BfbWluaXNyY19pbWFnZQogfTsKIAotI2VuZGlmIC8qIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwgKi8KKyNlbHNlIC8qIENPTkZJR19TTkRfTUFFU1RSTzNfRklSTVdBUkVfSU5fS0VSTkVMICovCiAKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbmRfbTNfY29udmVydF9mcm9tX2xlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpIHsgfQpAQCAtMjI1Nyw2ICsyMjU5LDggQEAKIH0KICNlbmRpZgogCisjZW5kaWYgLyogQ09ORklHX1NORF9NQUVTVFJPM19GSVJNV0FSRV9JTl9LRVJORUwgKi8KKwogCiAvKgogICogaW5pdGlhbGl6ZSBBU1NQCkBAIC0yNTUwLDE0ICsyNTU0LDEwIEBACiAJaWYgKGNoaXAtPmlvYmFzZSkKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOwogCi0jaWZkZWYgRklSTVdBUkVfSU5fVEhFX0tFUk5FTAotCWlmIChjaGlwLT5hc3NwX2tlcm5lbF9pbWFnZSAhPSAmYXNzcF9rZXJuZWwpCisjaWZuZGVmIENPTkZJR19TTkRfTUFFU1RSTzNfRklSTVdBUkVfSU5fS0VSTkVMCisJcmVsZWFzZV9maXJtd2FyZShjaGlwLT5hc3NwX2tlcm5lbF9pbWFnZSk7CisJcmVsZWFzZV9maXJtd2FyZShjaGlwLT5hc3NwX21pbmlzcmNfaW1hZ2UpOwogI2VuZGlmCi0JCXJlbGVhc2VfZmlybXdhcmUoY2hpcC0+YXNzcF9rZXJuZWxfaW1hZ2UpOwotI2lmZGVmIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwKLQlpZiAoY2hpcC0+YXNzcF9taW5pc3JjX2ltYWdlICE9ICZhc3NwX21pbmlzcmMpCi0jZW5kaWYKLQkJcmVsZWFzZV9maXJtd2FyZShjaGlwLT5hc3NwX21pbmlzcmNfaW1hZ2UpOwogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiAJa2ZyZWUoY2hpcCk7CkBAIC0yNzQ3LDI5ICsyNzQ3LDI5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorI2lmZGVmIENPTkZJR19TTkRfTUFFU1RSTzNfRklSTVdBUkVfSU5fS0VSTkVMCisJY2hpcC0+YXNzcF9rZXJuZWxfaW1hZ2UgPSAmYXNzcF9rZXJuZWw7CisjZWxzZQogCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmNoaXAtPmFzc3Bfa2VybmVsX2ltYWdlLAogCQkJICAgICAgICJlc3MvbWFlc3RybzNfYXNzcF9rZXJuZWwuZnciLCAmcGNpLT5kZXYpOwogCWlmIChlcnIgPCAwKSB7Ci0jaWZkZWYgRklSTVdBUkVfSU5fVEhFX0tFUk5FTAotCQljaGlwLT5hc3NwX2tlcm5lbF9pbWFnZSA9ICZhc3NwX2tlcm5lbDsKLSNlbHNlCiAJCXNuZF9tM19mcmVlKGNoaXApOwogCQlyZXR1cm4gZXJyOwotI2VuZGlmCiAJfSBlbHNlCiAJCXNuZF9tM19jb252ZXJ0X2Zyb21fbGUoY2hpcC0+YXNzcF9rZXJuZWxfaW1hZ2UpOworI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU05EX01BRVNUUk8zX0ZJUk1XQVJFX0lOX0tFUk5FTAorCWNoaXAtPmFzc3BfbWluaXNyY19pbWFnZSA9ICZhc3NwX21pbmlzcmM7CisjZWxzZQogCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmNoaXAtPmFzc3BfbWluaXNyY19pbWFnZSwKIAkJCSAgICAgICAiZXNzL21hZXN0cm8zX2Fzc3BfbWluaXNyYy5mdyIsICZwY2ktPmRldik7CiAJaWYgKGVyciA8IDApIHsKLSNpZmRlZiBGSVJNV0FSRV9JTl9USEVfS0VSTkVMCi0JCWNoaXAtPmFzc3BfbWluaXNyY19pbWFnZSA9ICZhc3NwX21pbmlzcmM7Ci0jZWxzZQogCQlzbmRfbTNfZnJlZShjaGlwKTsKIAkJcmV0dXJuIGVycjsKLSNlbmRpZgogCX0gZWxzZQogCQlzbmRfbTNfY29udmVydF9mcm9tX2xlKGNoaXAtPmFzc3BfbWluaXNyY19pbWFnZSk7CisjZW5kaWYKIAogCWlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksIGNhcmQtPmRyaXZlcikpIDwgMCkgewogCQlzbmRfbTNfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCmluZGV4IDIxMzg2ZGEuLmFjMDA3Y2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwpAQCAtNDcyLDcgKzQ3Miw3IEBACiAJc3RydWN0IHNuZF9taXhhcnQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnMpOwogCXN0cnVjdCBtaXhhcnRfc3RyZWFtICpzdHJlYW0gPSBzdWJzLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKLQkvKiBUT0RPIGRlIGZh529uIG5vbiBibG9xdWFudGUsIHLpYXBwbGlxdWVyIGxlcyBod19wYXJhbXMgKHJhdGUsIGJpdHMsIGNvZGVjKSAqLworCS8qIFRPRE8gZGUgZmHDp29uIG5vbiBibG9xdWFudGUsIHLDqWFwcGxpcXVlciBsZXMgaHdfcGFyYW1zIChyYXRlLCBiaXRzLCBjb2RlYykgKi8KIAogCXNuZF9wcmludGRkKCJzbmRfbWl4YXJ0X3ByZXBhcmVcbiIpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYwppbmRleCBjYTA1MDc1Li4xZDkyMzJkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMKQEAgLTU2NSw2ICs1NjUsOSBAQAogCXJldHVybiAwOwogfQogCitNT0RVTEVfRklSTVdBUkUoIm1peGFydC9taVhhcnQ4LnhseCIpOworTU9EVUxFX0ZJUk1XQVJFKCJtaXhhcnQvbWlYYXJ0OC5lbGYiKTsKK01PRFVMRV9GSVJNV0FSRSgibWl4YXJ0L21pWGFydDhBRVMueGx4Iik7CiAKICNlbHNlIC8qIG9sZCBzdHlsZSBmaXJtd2FyZSBsb2FkaW5nICovCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKaW5kZXggZDk3NDEzNC4uZjdmNmE2OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKQEAgLTYzOCwyMiArNjM4LDIyIEBACiBzdGF0aWMgaW50IHBjeGhyX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLCBpbnQgY21kKQogewogCXN0cnVjdCBwY3hocl9zdHJlYW0gKnN0cmVhbTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzOwotCWludCBpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgogCQlzbmRfcHJpbnRkZCgiU05EUlZfUENNX1RSSUdHRVJfU1RBUlRcbiIpOwotCQlpID0gMDsKLQkJc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnMpIHsKLQkJCXMgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOwotCQkJc3RyZWFtID0gcy0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCQkJc3RyZWFtLT5zdGF0dXMgPSBQQ1hIUl9TVFJFQU1fU1RBVFVTX1NDSEVEVUxFX1JVTjsKLQkJCXNuZF9wY21fdHJpZ2dlcl9kb25lKHMsIHN1YnMpOwotCQkJaSsrOwotCQl9Ci0JCWlmIChpPT0xKSB7CisJCWlmIChzbmRfcGNtX3N0cmVhbV9saW5rZWQoc3VicykpIHsKKwkJCXN0cnVjdCBzbmRfcGN4aHIgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnMpOworCQkJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzKSB7CisJCQkJc3RyZWFtID0gcy0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCQkJCXN0cmVhbS0+c3RhdHVzID0KKwkJCQkJUENYSFJfU1RSRUFNX1NUQVRVU19TQ0hFRFVMRV9SVU47CisJCQkJc25kX3BjbV90cmlnZ2VyX2RvbmUocywgc3Vicyk7CisJCQl9CisJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZjaGlwLT5tZ3ItPnRyaWdnZXJfdGFza3EpOworCQl9IGVsc2UgeworCQkJc3RyZWFtID0gc3Vicy0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCQkJc25kX3ByaW50ZGQoIk9ubHkgb25lIFN1YnN0cmVhbSAlYyAlZFxuIiwKIAkJCQkgICAgc3RyZWFtLT5waXBlLT5pc19jYXB0dXJlID8gJ0MnIDogJ1AnLAogCQkJCSAgICBzdHJlYW0tPnBpcGUtPmZpcnN0X2F1ZGlvKTsKQEAgLTY2NSwxNSArNjY1LDExIEBACiAJCQlpZiAocGN4aHJfc2V0X3N0cmVhbV9zdGF0ZShzdHJlYW0pKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJc3RyZWFtLT5zdGF0dXMgPSBQQ1hIUl9TVFJFQU1fU1RBVFVTX1JVTk5JTkc7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzKTsKLQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmNoaXAtPm1nci0+dHJpZ2dlcl90YXNrcSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCQlzbmRfcHJpbnRkZCgiU05EUlZfUENNX1RSSUdHRVJfU1RPUFxuIik7Ci0JCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2gocG9zLCBzdWJzKSB7Ci0JCQlzID0gc25kX3BjbV9ncm91cF9zdWJzdHJlYW1fZW50cnkocG9zKTsKKwkJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzKSB7CiAJCQlzdHJlYW0gPSBzLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJCQlzdHJlYW0tPnN0YXR1cyA9IFBDWEhSX1NUUkVBTV9TVEFUVVNfU0NIRURVTEVfU1RPUDsKIAkJCWlmIChwY3hocl9zZXRfc3RyZWFtX3N0YXRlKHN0cmVhbSkpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCmluZGV4IDM2OWMxOWYuLmQ1NWQ4YmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9od2RlcC5jCkBAIC0zNTYsNiArMzU2LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK01PRFVMRV9GSVJNV0FSRSgicGN4aHIveGlfMV84ODIuZGF0Iik7CitNT0RVTEVfRklSTVdBUkUoInBjeGhyL3hjXzFfODgyLmRhdCIpOworTU9EVUxFX0ZJUk1XQVJFKCJwY3hoci9lMzIxXzUxMi5lNTYiKTsKK01PRFVMRV9GSVJNV0FSRSgicGN4aHIvYjMyMV81MTIuYjU2Iik7CitNT0RVTEVfRklSTVdBUkUoInBjeGhyL2QzMjFfNTEyLmQ1NiIpOworCiAjZWxzZSAvKiBvbGQgc3R5bGUgZmlybXdhcmUgbG9hZGluZyAqLwogCiAvKiBwY3hociBod2RlcCBpbnRlcmZhY2UgaWQgc3RyaW5nICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKaW5kZXggOTUyNjI1ZC4uOGU1NDEwNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCisrKyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwpAQCAtMTE3LDYgKzExNyw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oInJpcHRpZGUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0NvbmV4YW50LFJpcHRpZGV9fSIpOworTU9EVUxFX0ZJUk1XQVJFKCJyaXB0aWRlLmhleCIpOwogCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTMyLmMgYi9zb3VuZC9wY2kvcm1lMzIuYwppbmRleCA2YmI3YWM2Li42MTg2NTNlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lMzIuYworKysgYi9zb3VuZC9wY2kvcm1lMzIuYwpAQCAtMTA3OCwxMiArMTA3OCwxMCBAQAogc25kX3JtZTMyX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQogewogCXN0cnVjdCBybWUzMiAqcm1lMzIgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKIAogCXNwaW5fbG9jaygmcm1lMzItPmxvY2spOwotCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2gocG9zLCBzdWJzdHJlYW0pIHsKLQkJcyA9IHNuZF9wY21fZ3JvdXBfc3Vic3RyZWFtX2VudHJ5KHBvcyk7CisJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKIAkJaWYgKHMgIT0gcm1lMzItPnBsYXliYWNrX3N1YnN0cmVhbSAmJgogCQkgICAgcyAhPSBybWUzMi0+Y2FwdHVyZV9zdWJzdHJlYW0pCiAJCQljb250aW51ZTsKQEAgLTExMTAsOCArMTEwOCw3IEBACiAJCiAJLyogcHJlZmlsbCBwbGF5YmFjayBidWZmZXIgKi8KIAlpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUICYmIHJtZTMyLT5mdWxsZHVwbGV4X21vZGUpIHsKLQkJc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnN0cmVhbSkgewotCQkJcyA9IHNuZF9wY21fZ3JvdXBfc3Vic3RyZWFtX2VudHJ5KHBvcyk7CisJCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CiAJCQlpZiAocyA9PSBybWUzMi0+cGxheWJhY2tfc3Vic3RyZWFtKSB7CiAJCQkJcy0+b3BzLT5hY2socyk7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKaW5kZXggODliM2M3Zi4uM2IzZWY2NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwpAQCAtNjAsNiArNjAsMTIgQEAKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1JNRSBIYW1tZXJmYWxsLURTUH0sIgogCSAgICAgICAgIntSTUUgSERTUC05NjUyfSwiCiAJCSJ7Uk1FIEhEU1AtOTYzMn19Iik7CisjaWZkZWYgSERTUF9GV19MT0FERVIKK01PRFVMRV9GSVJNV0FSRSgibXVsdGlmYWNlX2Zpcm13YXJlLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJtdWx0aWZhY2VfZmlybXdhcmVfcmV2MTEuYmluIik7CitNT0RVTEVfRklSTVdBUkUoImRpZ2lmYWNlX2Zpcm13YXJlLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJkaWdpZmFjZV9maXJtd2FyZV9yZXYxMS5iaW4iKTsKKyNlbmRpZgogCiAjZGVmaW5lIEhEU1BfTUFYX0NIQU5ORUxTICAgICAgICAyNgogI2RlZmluZSBIRFNQX01BWF9EU19DSEFOTkVMUyAgICAgMTQKQEAgLTI3NSw2ICsyODEsMTEgQEAKICNkZWZpbmUgSERTUF9GcmVxdWVuY3kxMjhLSHogICAoSERTUF9RdWFkU3BlZWR8SERTUF9Eb3VibGVTcGVlZHxIRFNQX0ZyZXF1ZW5jeTApCiAjZGVmaW5lIEhEU1BfRnJlcXVlbmN5MTc2XzRLSHogKEhEU1BfUXVhZFNwZWVkfEhEU1BfRG91YmxlU3BlZWR8SERTUF9GcmVxdWVuY3kxKQogI2RlZmluZSBIRFNQX0ZyZXF1ZW5jeTE5MktIeiAgIChIRFNQX1F1YWRTcGVlZHxIRFNQX0RvdWJsZVNwZWVkfEhEU1BfRnJlcXVlbmN5MXxIRFNQX0ZyZXF1ZW5jeTApCisvKiBSTUUgc2F5cyBuID0gMTA0ODU3NjAwMDAwMDAwLCBidXQgaW4gdGhlIHdpbmRvd3MgTUFESSBkcml2ZXIsIEkgc2VlOgorCXJldHVybiAxMDQ4NTc2MDAwMDAwMDAgLyByYXRlOyAvLyAxMDAgTUh6CisJcmV0dXJuIDExMDEwMDQ4MDAwMDAwMCAvIHJhdGU7IC8vIDEwNSBNSHoKKyovCisjZGVmaW5lIEREU19OVU1FUkFUT1IgMTA0ODU3NjAwMDAwMDAwVUxMOyAgLyogID0gIDJeMjAgKiAxMF44ICovCiAKICNkZWZpbmUgaGRzcF9lbmNvZGVfbGF0ZW5jeSh4KSAgICAgICAoKCh4KTw8MSkgJiBIRFNQX0xhdGVuY3lNYXNrKQogI2RlZmluZSBoZHNwX2RlY29kZV9sYXRlbmN5KHgpICAgICAgICgoKHgpICYgSERTUF9MYXRlbmN5TWFzayk+PjEpCkBAIC0xMDAxLDExICsxMDEyLDcgQEAKIAllbHNlIGlmIChyYXRlID49IDU2MDAwKQogCQlyYXRlIC89IDI7CiAKLQkvKiBSTUUgc2F5cyBuID0gMTA0ODU3NjAwMDAwMDAwLCBidXQgaW4gdGhlIHdpbmRvd3MgTUFESSBkcml2ZXIsIEkgc2VlOgotLy8JcmV0dXJuIDEwNDg1NzYwMDAwMDAwMCAvIHJhdGU7IC8vIDEwMCBNSHoKLQlyZXR1cm4gMTEwMTAwNDgwMDAwMDAwIC8gcmF0ZTsgLy8gMTA1IE1IegotICAgICAgICAqLwkgICAKLQluID0gMTA0ODU3NjAwMDAwMDAwVUxMOyAgLyogID0gIDJeMjAgKiAxMF44ICovCisJbiA9IEREU19OVU1FUkFUT1I7CiAJZGl2NjRfMzIoJm4sIHJhdGUsICZyKTsKIAkvKiBuIHNob3VsZCBiZSBsZXNzIHRoYW4gMl4zMiBmb3IgYmVpbmcgd3JpdHRlbiB0byBGUkVRIHJlZ2lzdGVyICovCiAJc25kX2Fzc2VydCgobiA+PiAzMikgPT0gMCk7CkBAIC0zMDg1LDExICszMDkyLDgzIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgSERTUF9ERFNfT0ZGU0VUKHhuYW1lLCB4aW5kZXgpIFwKK3sgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKKyAgLm5hbWUgPSB4bmFtZSwgXAorICAuaW5kZXggPSB4aW5kZXgsIFwKKyAgLmluZm8gPSBzbmRfaGRzcF9pbmZvX2Rkc19vZmZzZXQsIFwKKyAgLmdldCA9IHNuZF9oZHNwX2dldF9kZHNfb2Zmc2V0LCBcCisgIC5wdXQgPSBzbmRfaGRzcF9wdXRfZGRzX29mZnNldCBcCit9CisKK3N0YXRpYyBpbnQgaGRzcF9kZHNfb2Zmc2V0KHN0cnVjdCBoZHNwICpoZHNwKQoreworCXU2NCBuOworCXUzMiByOworCXVuc2lnbmVkIGludCBkZHNfdmFsdWUgPSBoZHNwLT5kZHNfdmFsdWU7CisJaW50IHN5c3RlbV9zYW1wbGVfcmF0ZSA9IGhkc3AtPnN5c3RlbV9zYW1wbGVfcmF0ZTsKKworCW4gPSBERFNfTlVNRVJBVE9SOworCS8qCisJICogZGRzX3ZhbHVlID0gbiAvIHJhdGUKKwkgKiByYXRlID0gbiAvIGRkc192YWx1ZQorCSAqLworCWRpdjY0XzMyKCZuLCBkZHNfdmFsdWUsICZyKTsKKwlpZiAoc3lzdGVtX3NhbXBsZV9yYXRlID49IDExMjAwMCkKKwkJbiAqPSA0OworCWVsc2UgaWYgKHN5c3RlbV9zYW1wbGVfcmF0ZSA+PSA1NjAwMCkKKwkJbiAqPSAyOworCXJldHVybiAoKGludCluKSAtIHN5c3RlbV9zYW1wbGVfcmF0ZTsKK30KKworc3RhdGljIGludCBoZHNwX3NldF9kZHNfb2Zmc2V0KHN0cnVjdCBoZHNwICpoZHNwLCBpbnQgb2Zmc2V0X2h6KQoreworCWludCByYXRlID0gaGRzcC0+c3lzdGVtX3NhbXBsZV9yYXRlICsgb2Zmc2V0X2h6OworCWhkc3Bfc2V0X2Rkc192YWx1ZShoZHNwLCByYXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaGRzcF9pbmZvX2Rkc19vZmZzZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAtNTAwMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSA1MDAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9oZHNwX2dldF9kZHNfb2Zmc2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwkKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcF9kZHNfb2Zmc2V0KGhkc3ApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9oZHNwX3B1dF9kZHNfb2Zmc2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRzcCAqaGRzcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgY2hhbmdlOworCWludCB2YWw7CisJCisJaWYgKCFzbmRfaGRzcF91c2VfaXNfZXhjbHVzaXZlKGhkc3ApKQorCQlyZXR1cm4gLUVCVVNZOworCXZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisJc3Bpbl9sb2NrX2lycSgmaGRzcC0+bG9jayk7CisJaWYgKHZhbCAhPSBoZHNwX2Rkc19vZmZzZXQoaGRzcCkpCisJCWNoYW5nZSA9IChoZHNwX3NldF9kZHNfb2Zmc2V0KGhkc3AsIHZhbCkgPT0gMCkgPyAxIDogMDsKKwllbHNlCisJCWNoYW5nZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKCZoZHNwLT5sb2NrKTsKKwlyZXR1cm4gY2hhbmdlOworfQorCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2hkc3BfOTYzMl9jb250cm9sc1tdID0gewogSERTUF9EQV9HQUlOKCJEQSBHYWluIiwgMCksCiBIRFNQX0FEX0dBSU4oIkFEIEdhaW4iLCAwKSwKIEhEU1BfUEhPTkVfR0FJTigiUGhvbmVzIEdhaW4iLCAwKSwKLUhEU1BfWExSX0JSRUFLT1VUX0NBQkxFKCJYTFIgQnJlYWtvdXQgQ2FibGUiLCAwKQorSERTUF9YTFJfQlJFQUtPVVRfQ0FCTEUoIlhMUiBCcmVha291dCBDYWJsZSIsIDApLAorSERTUF9ERFNfT0ZGU0VUKCJERFMgU2FtcGxlIFJhdGUgT2Zmc2V0IiwgMCkKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaGRzcF9jb250cm9sc1tdID0gewpAQCAtMzc4MCwxMSArMzg1OSw5IEBACiAJZWxzZQogCQlydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9IDA7CiAJaWYgKG90aGVyKSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzOwogCQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpvcnVudGltZSA9IG90aGVyLT5ydW50aW1lOwotCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoKHBvcywgc3Vic3RyZWFtKSB7Ci0JCQlzID0gc25kX3BjbV9ncm91cF9zdWJzdHJlYW1fZW50cnkocG9zKTsKKwkJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKIAkJCWlmIChzID09IG90aGVyKSB7CiAJCQkJb3J1bnRpbWUtPnN0YXR1cy0+aHdfcHRyID0gcnVudGltZS0+c3RhdHVzLT5od19wdHI7CiAJCQkJYnJlYWs7CkBAIC0zOTMzLDEwICs0MDEwLDggQEAKIAkJb3RoZXIgPSBoZHNwLT5wbGF5YmFja19zdWJzdHJlYW07CiAKIAlpZiAob3RoZXIpIHsKLQkJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7Ci0JCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2gocG9zLCBzdWJzdHJlYW0pIHsKLQkJCXMgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOworCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQkJaWYgKHMgPT0gb3RoZXIpIHsKIAkJCQlzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwogCQkJCWlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCA2ZTk1ODU3Li4xNDMxODVlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTkxLDggKzkxLDEwIEBACiAjZGVmaW5lIEhEU1BNX2NvbnRyb2xSZWdpc3RlcgkgICAgIDY0CiAjZGVmaW5lIEhEU1BNX2ludGVycnVwdENvbmZpcm1hdGlvbiAgOTYKICNkZWZpbmUgSERTUE1fY29udHJvbDJSZWcJICAgICAyNTYgIC8qIG5vdCBpbiBzcGVjcyA/Pz8/Pz8/PyAqLworI2RlZmluZSBIRFNQTV9mcmVxUmVnICAgICAgICAgICAgICAgIDI1NiAgLyogZm9yIEFFUzMyICovCiAjZGVmaW5lIEhEU1BNX21pZGlEYXRhT3V0MCAgCSAgICAgMzUyICAvKiBqdXN0IGJlbGlldmUgaW4gb2xkIGNvZGUgKi8KICNkZWZpbmUgSERTUE1fbWlkaURhdGFPdXQxICAJICAgICAzNTYKKyNkZWZpbmUgSERTUE1fZWVwcm9tX3dyCQkgICAgIDM4NCAgLyogZm9yIEFFUzMyICovCiAKIC8qIERNQSBlbmFibGUgZm9yIDY0IGNoYW5uZWxzLCBvbmx5IEJpdCAwIGlzIHJlbGV2YW50ICovCiAjZGVmaW5lIEhEU1BNX291dHB1dEVuYWJsZUJhc2UgICAgICAgNTEyICAvKiA1MTItNzY3ICBpbnB1dCAgRE1BICovIApAQCAtMzg5LDkgKzM5MSw4IEBACiAgICBzaXplIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBjaGFubmVscywgYW5kCiAgICBhbHNvIHRoZSBsYXRlbmN5IHRvIHVzZS4gCiAgICBmb3Igb25lIGRpcmVjdGlvbiAhISEKLSAgID0+IG5lZWQgdG8gbXVwbHRpcGx5IGJ5IDIhIQogKi8KLSNkZWZpbmUgSERTUE1fRE1BX0FSRUFfQllURVMgKDIgKiBIRFNQTV9NQVhfQ0hBTk5FTFMgKiBIRFNQTV9DSEFOTkVMX0JVRkZFUl9CWVRFUykKKyNkZWZpbmUgSERTUE1fRE1BX0FSRUFfQllURVMgKEhEU1BNX01BWF9DSEFOTkVMUyAqIEhEU1BNX0NIQU5ORUxfQlVGRkVSX0JZVEVTKQogI2RlZmluZSBIRFNQTV9ETUFfQVJFQV9LSUxPQllURVMgKEhEU1BNX0RNQV9BUkVBX0JZVEVTLzEwMjQpCiAKIC8qIHJldmlzaW9ucyA+PSAyMzAgaW5kaWNhdGUgQUVTMzIgY2FyZCAqLwpAQCAtNDg0LDI4ICs0ODUsNiBAQAogICAgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzCiB9OwogCi1zdGF0aWMgY2hhciBjaGFubmVsX21hcF9tYWRpX2RzW0hEU1BNX01BWF9DSEFOTkVMU10gPSB7Ci0gIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsCi0gIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzMCwKLSAgMzIsIDM0LCAzNiwgMzgsIDQwLCA0MiwgNDQsIDQ2LAotICA0OCwgNTAsIDUyLCA1NCwgNTYsIDU4LCA2MCwgNjIsCi0gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMQotfTsKLQotc3RhdGljIGNoYXIgY2hhbm5lbF9tYXBfbWFkaV9xc1tIRFNQTV9NQVhfQ0hBTk5FTFNdID0gewotICAwLCAgIDQsICA4LCAxMiwgMTYsIDIwLCAyNCwgIDI4LCAgCi0gIDMyLCAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCAgNjAKLSAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAgCi0gIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgIAotICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIAotICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIAotICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIAotICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEKLX07Ci0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwbV9pZHNbXSBfX2RldmluaXRkYXRhID0gewogCXsKQEAgLTgxOCw2ICs3OTcsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaGRzcG1fc2V0X2Rkc192YWx1ZShzdHJ1Y3QgaGRzcG0gKmhkc3BtLCBpbnQgcmF0ZSkKK3sKKwl1NjQgbjsKKwl1MzIgcjsKKwkKKwlpZiAocmF0ZSA+PSAxMTIwMDApCisJCXJhdGUgLz0gNDsKKwllbHNlIGlmIChyYXRlID49IDU2MDAwKQorCQlyYXRlIC89IDI7CisKKwkvKiBSTUUgc2F5cyBuID0gMTA0ODU3NjAwMDAwMDAwLCBidXQgaW4gdGhlIHdpbmRvd3MgTUFESSBkcml2ZXIsIEkgc2VlOgorLy8JcmV0dXJuIDEwNDg1NzYwMDAwMDAwMCAvIHJhdGU7IC8vIDEwMCBNSHoKKwlyZXR1cm4gMTEwMTAwNDgwMDAwMDAwIC8gcmF0ZTsgLy8gMTA1IE1IegorICAgICAgICAqLwkgICAKKwkvL24gPSAxMDQ4NTc2MDAwMDAwMDBVTEw7ICAvKiAgPSAgMl4yMCAqIDEwXjggKi8KKwluID0gMTEwMTAwNDgwMDAwMDAwVUxMOyAgICAvKiBWYWx1ZSBjaGVja2VkIGZvciBBRVMzMiBhbmQgTUFESSAqLworCWRpdjY0XzMyKCZuLCByYXRlLCAmcik7CisJLyogbiBzaG91bGQgYmUgbGVzcyB0aGFuIDJeMzIgZm9yIGJlaW5nIHdyaXR0ZW4gdG8gRlJFUSByZWdpc3RlciAqLworCXNuZF9hc3NlcnQoKG4gPj4gMzIpID09IDApOworCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9mcmVxUmVnLCAodTMyKW4pOworfQogCiAvKiBkdW1teSBzZXQgcmF0ZSBsZXRzIHNlZSB3aGF0IGhhcHBlbnMgKi8KIHN0YXRpYyBpbnQgaGRzcG1fc2V0X3JhdGUoc3RydWN0IGhkc3BtICogaGRzcG0sIGludCByYXRlLCBpbnQgY2FsbGVkX2ludGVybmFsbHkpCkBAIC05NDMsMTIgKzk0MywxNiBAQAogCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IHJhdGVfYml0czsKIAloZHNwbV93cml0ZShoZHNwbSwgSERTUE1fY29udHJvbFJlZ2lzdGVyLCBoZHNwbS0+Y29udHJvbF9yZWdpc3Rlcik7CiAKLQlpZiAocmF0ZSA+IDk2MDAwIC8qIDY0MDAwKi8pCi0JCWhkc3BtLT5jaGFubmVsX21hcCA9IGNoYW5uZWxfbWFwX21hZGlfcXM7Ci0JZWxzZSBpZiAocmF0ZSA+IDQ4MDAwKQotCQloZHNwbS0+Y2hhbm5lbF9tYXAgPSBjaGFubmVsX21hcF9tYWRpX2RzOwotCWVsc2UgCi0JCWhkc3BtLT5jaGFubmVsX21hcCA9IGNoYW5uZWxfbWFwX21hZGlfc3M7CisJLyogRm9yIEFFUzMyLCBuZWVkIHRvIHNldCBERFMgdmFsdWUgaW4gRlJFUSByZWdpc3RlcgorCSAgIEZvciBNQURJLCBhbHNvIGFwcGFyZW50bHkgKi8KKwloZHNwbV9zZXRfZGRzX3ZhbHVlKGhkc3BtLCByYXRlKTsKKwkKKwlpZiAoaGRzcG0tPmlzX2FlczMyICYmIHJhdGUgIT0gY3VycmVudF9yYXRlKQorCQloZHNwbV93cml0ZShoZHNwbSwgSERTUE1fZWVwcm9tX3dyLCAwKTsKKwkKKwkvKiBGb3IgQUVTMzIgYW5kIGZvciBNQURJIChhdCBsZWFzdCByZXYgMjA0KSwgY2hhbm5lbF9tYXAgbmVlZHMgdG8KKwkgKiBhbHdheXMgYmUgY2hhbm5lbF9tYXBfbWFkaV9zcywgd2hhdGV2ZXIgdGhlIHNhbXBsZSByYXRlICovCisJaGRzcG0tPmNoYW5uZWxfbWFwID0gY2hhbm5lbF9tYXBfbWFkaV9zczsKIAogCWhkc3BtLT5zeXN0ZW1fc2FtcGxlX3JhdGUgPSByYXRlOwogCkBAIC0zMTg0LDggKzMxODgsOCBAQAogCQkgICAgaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaVN0YXR1c0luMCkgJiAweEZGLAogCQkgICAgaGRzcG1fcmVhZChoZHNwbSwgSERTUE1fbWlkaVN0YXR1c0luMSkgJiAweEZGKTsKIAlzbmRfaXByaW50ZihidWZmZXIsCi0JCSAgICAiUmVnaXN0ZXI6IGN0cmwxPTB4JXgsIGN0cmwyPTB4JXgsIHN0YXR1czE9MHgleCwgc3RhdHVzMj0weCV4LCB0aW1lY29kZT0weCV4XG4iLAotCQkgICAgaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIsIGhkc3BtLT5jb250cm9sMl9yZWdpc3RlciwKKwkJICAgICJSZWdpc3RlcjogY3RybDE9MHgleCwgc3RhdHVzMT0weCV4LCBzdGF0dXMyPTB4JXgsIHRpbWVjb2RlPTB4JXhcbiIsCisJCSAgICBoZHNwbS0+Y29udHJvbF9yZWdpc3RlciwKIAkJICAgIHN0YXR1cywgc3RhdHVzMiwgdGltZWNvZGUpOwogCiAJc25kX2lwcmludGYoYnVmZmVyLCAiLS0tIFNldHRpbmdzIC0tLVxuIik7CkBAIC0zMzc3LDEzICszMzgxLDE2IEBACiAKIAloZHNwbV93cml0ZShoZHNwbSwgSERTUE1fY29udHJvbFJlZ2lzdGVyLCBoZHNwbS0+Y29udHJvbF9yZWdpc3Rlcik7CiAKKyAgICAgICAgaWYgKCFoZHNwbS0+aXNfYWVzMzIpIHsKKwkJLyogTm8gY29udHJvbDIgcmVnaXN0ZXIgZm9yIEFFUzMyICovCiAjaWZkZWYgU05EUlZfQklHX0VORElBTgotCWhkc3BtLT5jb250cm9sMl9yZWdpc3RlciA9IEhEU1BNX0JJR0VORElBTl9NT0RFOworCQloZHNwbS0+Y29udHJvbDJfcmVnaXN0ZXIgPSBIRFNQTV9CSUdFTkRJQU5fTU9ERTsKICNlbHNlCi0JaGRzcG0tPmNvbnRyb2wyX3JlZ2lzdGVyID0gMDsKKwkJaGRzcG0tPmNvbnRyb2wyX3JlZ2lzdGVyID0gMDsKICNlbmRpZgogCi0JaGRzcG1fd3JpdGUoaGRzcG0sIEhEU1BNX2NvbnRyb2wyUmVnLCBoZHNwbS0+Y29udHJvbDJfcmVnaXN0ZXIpOworCQloZHNwbV93cml0ZShoZHNwbSwgSERTUE1fY29udHJvbDJSZWcsIGhkc3BtLT5jb250cm9sMl9yZWdpc3Rlcik7CisJfQogCWhkc3BtX2NvbXB1dGVfcGVyaW9kX3NpemUoaGRzcG0pOwogCiAJLyogc2lsZW5jZSBldmVyeXRoaW5nICovCkBAIC0zNTc1LDExICszNTgyLDkgQEAKIAllbHNlCiAJCXJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyID0gMDsKIAlpZiAob3RoZXIpIHsKLQkJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7CiAJCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKm9ydW50aW1lID0gb3RoZXItPnJ1bnRpbWU7Ci0JCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2gocG9zLCBzdWJzdHJlYW0pIHsKLQkJCXMgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOworCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQkJaWYgKHMgPT0gb3RoZXIpIHsKIAkJCQlvcnVudGltZS0+c3RhdHVzLT5od19wdHIgPQogCQkJCSAgICBydW50aW1lLT5zdGF0dXMtPmh3X3B0cjsKQEAgLTM2NTgsMTEgKzM2NjMsMTAgQEAKIAogCS8qIE1lbW9yeSBhbGxvY2F0aW9uLCB0YWthc2hpJ3MgbWV0aG9kLCBkb250IGtub3cgaWYgd2Ugc2hvdWxkIHNwaW5sb2NrICAqLwogCS8qIG1hbGxvYyBhbGwgYnVmZmVyIGV2ZW4gaWYgbm90IGVuYWJsZWQgdG8gZ2V0IHN1cmUgKi8KLQkvKiBtYWxsb2Mgb25seSBuZWVkZWQgYnl0ZXMgKi8KKwkvKiBVcGRhdGUgZm9yIE1BREkgcmV2IDIwNDogd2UgbmVlZCB0byBhbGxvY2F0ZSBmb3IgYWxsIGNoYW5uZWxzLAorCSAqIG90aGVyd2lzZSBpdCBkb2Vzbid0IHdvcmsgYXQgOTZrSHogKi8KIAllcnIgPQotCSAgICBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAotCQkJCSAgICAgSERTUE1fQ0hBTk5FTF9CVUZGRVJfQllURVMgKgotCQkJCSAgICAgcGFyYW1zX2NoYW5uZWxzKHBhcmFtcykpOworCSAgICBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBIRFNQTV9ETUFfQVJFQV9CWVRFUyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTM2OTgsNiArMzcwMiwxMyBAQAogCSAgICJwbGF5YmFjayIgOiAiY2FwdHVyZSIsCiAJICAgc25kX3BjbV9zZ2J1Zl9nZXRfYWRkcihzZ2J1ZiwgMCkpOwogCSAqLworCS8qCisJc25kX3ByaW50ZGQoInNldF9od3BhcmFtczogJXMgJWQgSHosICVkIGNoYW5uZWxzLCBicyA9ICVkXG4iLAorCQkJc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyA/CisJCQkgICJwbGF5YmFjayIgOiAiY2FwdHVyZSIsCisJCQlwYXJhbXNfcmF0ZShwYXJhbXMpLCBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSwKKwkJCXBhcmFtc19idWZmZXJfc2l6ZShwYXJhbXMpKTsKKwkqLwogCXJldHVybiAwOwogfQogCkBAIC0zNzkxLDEwICszODAyLDggQEAKIAkJb3RoZXIgPSBoZHNwbS0+cGxheWJhY2tfc3Vic3RyZWFtOwogCiAJaWYgKG90aGVyKSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzOwotCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoKHBvcywgc3Vic3RyZWFtKSB7Ci0JCQlzID0gc25kX3BjbV9ncm91cF9zdWJzdHJlYW1fZW50cnkocG9zKTsKKwkJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKIAkJCWlmIChzID09IG90aGVyKSB7CiAJCQkJc25kX3BjbV90cmlnZ2VyX2RvbmUocywgc3Vic3RyZWFtKTsKIAkJCQlpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKQpAQCAtMzkwNCwxNiArMzkxMywxNiBAQAogCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKnIgPQogCSAgICBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFKTsKIAotCWlmIChyLT5taW4gPiA0ODAwMCkgeworCWlmIChyLT5taW4gPiA0ODAwMCAmJiByLT5tYXggPD0gOTYwMDApIHsKIAkJc3RydWN0IHNuZF9pbnRlcnZhbCB0ID0gewotCQkJLm1pbiA9IDEsCisJCQkubWluID0gaGRzcG0tPmRzX2NoYW5uZWxzLAogCQkJLm1heCA9IGhkc3BtLT5kc19jaGFubmVscywKIAkJCS5pbnRlZ2VyID0gMSwKIAkJfTsKIAkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJnQpOwogCX0gZWxzZSBpZiAoci0+bWF4IDwgNjQwMDApIHsKIAkJc3RydWN0IHNuZF9pbnRlcnZhbCB0ID0gewotCQkJLm1pbiA9IDEsCisJCQkubWluID0gaGRzcG0tPnNzX2NoYW5uZWxzLAogCQkJLm1heCA9IGhkc3BtLT5zc19jaGFubmVscywKIAkJCS5pbnRlZ2VyID0gMSwKIAkJfTsKQEAgLTM5MzEsMTQgKzM5NDAsMTQgQEAKIAlzdHJ1Y3Qgc25kX2ludGVydmFsICpyID0KIAkgICAgaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSk7CiAKLQlpZiAoYy0+bWluIDw9IGhkc3BtLT5zc19jaGFubmVscykgeworCWlmIChjLT5taW4gPj0gaGRzcG0tPnNzX2NoYW5uZWxzKSB7CiAJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKIAkJCS5taW4gPSAzMjAwMCwKIAkJCS5tYXggPSA0ODAwMCwKIAkJCS5pbnRlZ2VyID0gMSwKIAkJfTsKIAkJcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUociwgJnQpOwotCX0gZWxzZSBpZiAoYy0+bWF4ID4gaGRzcG0tPnNzX2NoYW5uZWxzKSB7CisJfSBlbHNlIGlmIChjLT5tYXggPD0gaGRzcG0tPmRzX2NoYW5uZWxzKSB7CiAJCXN0cnVjdCBzbmRfaW50ZXJ2YWwgdCA9IHsKIAkJCS5taW4gPSA2NDAwMCwKIAkJCS5tYXggPSA5NjAwMCwKQEAgLTM5NTAsMTMgKzM5NTksMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzbmRfaGRzcG1faHdfcnVsZV9jaGFubmVscyhzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQoreworCXVuc2lnbmVkIGludCBsaXN0WzNdOworCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBydWxlLT5wcml2YXRlOworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKmMgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCWlmIChoZHNwbS0+aXNfYWVzMzIpIHsKKwkJbGlzdFswXSA9IGhkc3BtLT5xc19jaGFubmVsczsKKwkJbGlzdFsxXSA9IGhkc3BtLT5kc19jaGFubmVsczsKKwkJbGlzdFsyXSA9IGhkc3BtLT5zc19jaGFubmVsczsKKwkJcmV0dXJuIHNuZF9pbnRlcnZhbF9saXN0KGMsIDMsIGxpc3QsIDApOworCX0gZWxzZSB7CisJCWxpc3RbMF0gPSBoZHNwbS0+ZHNfY2hhbm5lbHM7CisJCWxpc3RbMV0gPSBoZHNwbS0+c3NfY2hhbm5lbHM7CisJCXJldHVybiBzbmRfaW50ZXJ2YWxfbGlzdChjLCAyLCBsaXN0LCAwKTsKKwl9Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGludCBoZHNwbV9hZXMzMl9zYW1wbGVfcmF0ZXNbXSA9IHsgMzIwMDAsIDQ0MTAwLCA0ODAwMCwgNjQwMDAsIDg4MjAwLCA5NjAwMCwgMTI4MDAwLCAxNzY0MDAsIDE5MjAwMCB9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGhkc3BtX2h3X2NvbnN0cmFpbnRzX2FlczMyX3NhbXBsZV9yYXRlcyA9IHsKKwkuY291bnQgPSBBUlJBWV9TSVpFKGhkc3BtX2FlczMyX3NhbXBsZV9yYXRlcyksCisJLmxpc3QgPSBoZHNwbV9hZXMzMl9zYW1wbGVfcmF0ZXMsCisJLm1hc2sgPSAwCit9OworCiBzdGF0aWMgaW50IHNuZF9oZHNwbV9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBoZHNwbSAqaGRzcG0gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAotCXNuZF9wcmludGRkKCJPcGVuIGRldmljZSBzdWJzdHJlYW0gJWRcbiIsIHN1YnN0cmVhbS0+c3RyZWFtKTsKLQogCXNwaW5fbG9ja19pcnEoJmhkc3BtLT5sb2NrKTsKIAogCXNuZF9wY21fc2V0X3N5bmMoc3Vic3RyZWFtKTsKQEAgLTM5NzcsMTQgKzQwMTIsMjEgQEAKIAkJCQkgICBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1NJWkUsCiAJCQkJICAgJmh3X2NvbnN0cmFpbnRzX3BlcmlvZF9zaXplcyk7CiAKLQlzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKLQkJCSAgICBzbmRfaGRzcG1faHdfcnVsZV9jaGFubmVsc19yYXRlLCBoZHNwbSwKLQkJCSAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgLTEpOworCWlmIChoZHNwbS0+aXNfYWVzMzIpIHsKKwkJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisJCQkJJmhkc3BtX2h3X2NvbnN0cmFpbnRzX2FlczMyX3NhbXBsZV9yYXRlcyk7CisJfSBlbHNlIHsKKwkJc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisJCQkJICAgICBzbmRfaGRzcG1faHdfcnVsZV9jaGFubmVscywgaGRzcG0sCisJCQkJICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIC0xKTsKKwkJc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisJCQkJICAgIHNuZF9oZHNwbV9od19ydWxlX2NoYW5uZWxzX3JhdGUsIGhkc3BtLAorCQkJCSAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgLTEpOwogCi0Jc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKLQkJCSAgICBzbmRfaGRzcG1faHdfcnVsZV9yYXRlX2NoYW5uZWxzLCBoZHNwbSwKLQkJCSAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIC0xKTsKLQorCQlzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAorCQkJCSAgICBzbmRfaGRzcG1faHdfcnVsZV9yYXRlX2NoYW5uZWxzLCBoZHNwbSwKKwkJCQkgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAtMSk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC00MDI0LDE0ICs0MDY2LDIxIEBACiAJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwKIAkJCQkgICBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1NJWkUsCiAJCQkJICAgJmh3X2NvbnN0cmFpbnRzX3BlcmlvZF9zaXplcyk7CisJaWYgKGhkc3BtLT5pc19hZXMzMikgeworCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKKwkJCQkmaGRzcG1faHdfY29uc3RyYWludHNfYWVzMzJfc2FtcGxlX3JhdGVzKTsKKwl9IGVsc2UgeworCQlzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKwkJCQkgICAgIHNuZF9oZHNwbV9od19ydWxlX2NoYW5uZWxzLCBoZHNwbSwKKwkJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywgLTEpOworCQlzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKwkJCQkgICAgc25kX2hkc3BtX2h3X3J1bGVfY2hhbm5lbHNfcmF0ZSwgaGRzcG0sCisJCQkJICAgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLCAtMSk7CiAKLQlzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKLQkJCSAgICBzbmRfaGRzcG1faHdfcnVsZV9jaGFubmVsc19yYXRlLCBoZHNwbSwKLQkJCSAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgLTEpOwotCi0Jc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKLQkJCSAgICBzbmRfaGRzcG1faHdfcnVsZV9yYXRlX2NoYW5uZWxzLCBoZHNwbSwKLQkJCSAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsIC0xKTsKKwkJc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKKwkJCQkgICAgc25kX2hkc3BtX2h3X3J1bGVfcmF0ZV9jaGFubmVscywgaGRzcG0sCisJCQkJICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywgLTEpOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCmluZGV4IGNjM2JkZWMuLmJkN2RiZDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKQEAgLTE5OTIsMTEgKzE5OTIsOSBAQAogCWVsc2UKIAkJcnVudGltZS0+c3RhdHVzLT5od19wdHIgPSAwOwogCWlmIChvdGhlcikgewotCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKIAkJc3RydWN0IHNuZF9wY21fcnVudGltZSAqb3J1bnRpbWUgPSBvdGhlci0+cnVudGltZTsKLQkJc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnN0cmVhbSkgewotCQkJcyA9IHNuZF9wY21fZ3JvdXBfc3Vic3RyZWFtX2VudHJ5KHBvcyk7CisJCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CiAJCQlpZiAocyA9PSBvdGhlcikgewogCQkJCW9ydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9IHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyOwogCQkJCWJyZWFrOwpAQCAtMjE0MCwxMCArMjEzOCw4IEBACiAJCW90aGVyID0gcm1lOTY1Mi0+cGxheWJhY2tfc3Vic3RyZWFtOwogCiAJaWYgKG90aGVyKSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzOwotCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoKHBvcywgc3Vic3RyZWFtKSB7Ci0JCQlzID0gc25kX3BjbV9ncm91cF9zdWJzdHJlYW1fZW50cnkocG9zKTsKKwkJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKIAkJCWlmIChzID09IG90aGVyKSB7CiAJCQkJc25kX3BjbV90cmlnZ2VyX2RvbmUocywgc3Vic3RyZWFtKTsKIAkJCQlpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYwppbmRleCAzYmZmMzIxLi43Y2E2MDYyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYworKysgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYwpAQCAtMTU0MCw3ICsxNTQwLDYgQEAKIAkJCQkgICAgCiB7CiAJc3RydWN0IHNuZF90cmlkZW50ICp0cmlkZW50ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7CiAJdW5zaWduZWQgaW50IHdoYXQsIHdoYXRpLCBjYXB0dXJlX2ZsYWcsIHNwZGlmX2ZsYWc7CiAJc3RydWN0IHNuZF90cmlkZW50X3ZvaWNlICp2b2ljZSwgKmV2b2ljZTsKQEAgLTE1NjMsOCArMTU2Miw3IEBACiAJd2hhdCA9IHdoYXRpID0gY2FwdHVyZV9mbGFnID0gc3BkaWZfZmxhZyA9IDA7CiAJc3Bpbl9sb2NrKCZ0cmlkZW50LT5yZWdfbG9jayk7CiAJdmFsID0gaW5sKFRSSURfUkVHKHRyaWRlbnQsIFQ0RF9TVElNRVIpKSAmIDB4MDBmZmZmZmY7Ci0Jc25kX3BjbV9ncm91cF9mb3JfZWFjaChwb3MsIHN1YnN0cmVhbSkgewotCQlzID0gc25kX3BjbV9ncm91cF9zdWJzdHJlYW1fZW50cnkocG9zKTsKKwlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQlpZiAoKHN0cnVjdCBzbmRfdHJpZGVudCAqKSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHMpID09IHRyaWRlbnQpIHsKIAkJCXZvaWNlID0gcy0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCQkJZXZvaWNlID0gdm9pY2UtPmV4dHJhOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCmluZGV4IGZkMTI2NzQuLmVhODYxYmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKQEAgLTE5OTgsOSArMTk5OCw3IEBACiAJfQogfQogCi0jZGVmaW5lIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwKLQotI2lmZGVmIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwKKyNpZmRlZiBDT05GSUdfU05EX1lNRlBDSV9GSVJNV0FSRV9JTl9LRVJORUwKIAogI2luY2x1ZGUgInltZnBjaV9pbWFnZS5oIgogCkBAIC0yMDE4LDYgKzIwMTYsMjQgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TTkRfWU1GUENJX0ZJUk1XQVJFX0lOX0tFUk5FTAorc3RhdGljIGludCBzbmRfeW1mcGNpX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHNuZF95bWZwY2kgKmNoaXApCit7CisJY2hpcC0+ZHNwX21pY3JvY29kZSA9ICZzbmRfeW1mcGNpX2RzcF9taWNyb2NvZGU7CisJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83MjRGIHx8CisJICAgIGNoaXAtPmRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NDBDIHx8CisJICAgIGNoaXAtPmRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NDQgfHwKKwkgICAgY2hpcC0+ZGV2aWNlX2lkID09IFBDSV9ERVZJQ0VfSURfWUFNQUhBXzc1NCkKKwkJY2hpcC0+Y29udHJvbGxlcl9taWNyb2NvZGUgPQorCQkJJnNuZF95bWZwY2lfY29udHJvbGxlcl8xZV9taWNyb2NvZGU7CisJZWxzZQorCQljaGlwLT5jb250cm9sbGVyX21pY3JvY29kZSA9CisJCQkmc25kX3ltZnBjaV9jb250cm9sbGVyX21pY3JvY29kZTsKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UgLyogdXNlIGZ3X2xvYWRlciAqLworCiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOCiBzdGF0aWMgaW5saW5lIHZvaWQgc25kX3ltZnBjaV9jb252ZXJ0X2Zyb21fbGUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykgeyB9CiAjZWxzZQpAQCAtMjA0NiwxMyArMjA2Miw4IEBACiAJCQllcnIgPSAtRUlOVkFMOwogCQl9CiAJfQotCWlmIChlcnIgPCAwKSB7Ci0jaWZkZWYgRklSTVdBUkVfSU5fVEhFX0tFUk5FTAotCQljaGlwLT5kc3BfbWljcm9jb2RlID0gJnNuZF95bWZwY2lfZHNwX21pY3JvY29kZTsKLSNlbHNlCisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0jZW5kaWYKLQl9CiAJaXNfMWUgPSBjaGlwLT5kZXZpY2VfaWQgPT0gUENJX0RFVklDRV9JRF9ZQU1BSEFfNzI0RiB8fAogCQljaGlwLT5kZXZpY2VfaWQgPT0gUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQwQyB8fAogCQljaGlwLT5kZXZpY2VfaWQgPT0gUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQ0IHx8CkBAIC0yMDY5LDE4ICsyMDgwLDE3IEBACiAJCQllcnIgPSAtRUlOVkFMOwogCQl9CiAJfQotCWlmIChlcnIgPCAwKSB7Ci0jaWZkZWYgRklSTVdBUkVfSU5fVEhFX0tFUk5FTAotCQljaGlwLT5jb250cm9sbGVyX21pY3JvY29kZSA9Ci0JCQlpc18xZSA/ICZzbmRfeW1mcGNpX2NvbnRyb2xsZXJfMWVfbWljcm9jb2RlCi0JCQkgICAgICA6ICZzbmRfeW1mcGNpX2NvbnRyb2xsZXJfbWljcm9jb2RlOwotI2Vsc2UKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLSNlbmRpZgotCX0KIAlyZXR1cm4gMDsKIH0KIAorTU9EVUxFX0ZJUk1XQVJFKCJ5YW1haGEvZHMxX2RzcC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJ5YW1haGEvZHMxX2N0cmwuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgieWFtYWhhL2RzMWVfY3RybC5mdyIpOworCisjZW5kaWYKKwogc3RhdGljIHZvaWQgc25kX3ltZnBjaV9kb3dubG9hZF9pbWFnZShzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCkKIHsKIAlpbnQgaTsKQEAgLTIyNTksMTUgKzIyNjksMTAgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCAweDQwLCBjaGlwLT5vbGRfbGVnYWN5X2N0cmwpOwogCQogCXBjaV9kaXNhYmxlX2RldmljZShjaGlwLT5wY2kpOwotI2lmZGVmIEZJUk1XQVJFX0lOX1RIRV9LRVJORUwKLQlpZiAoY2hpcC0+ZHNwX21pY3JvY29kZSAhPSAmc25kX3ltZnBjaV9kc3BfbWljcm9jb2RlKQorI2lmbmRlZiBDT05GSUdfU05EX1lNRlBDSV9GSVJNV0FSRV9JTl9LRVJORUwKKwlyZWxlYXNlX2Zpcm13YXJlKGNoaXAtPmRzcF9taWNyb2NvZGUpOworCXJlbGVhc2VfZmlybXdhcmUoY2hpcC0+Y29udHJvbGxlcl9taWNyb2NvZGUpOwogI2VuZGlmCi0JCXJlbGVhc2VfZmlybXdhcmUoY2hpcC0+ZHNwX21pY3JvY29kZSk7Ci0jaWZkZWYgRklSTVdBUkVfSU5fVEhFX0tFUk5FTAotCWlmIChjaGlwLT5jb250cm9sbGVyX21pY3JvY29kZSAhPSAmc25kX3ltZnBjaV9jb250cm9sbGVyX21pY3JvY29kZSAmJgotCSAgICBjaGlwLT5jb250cm9sbGVyX21pY3JvY29kZSAhPSAmc25kX3ltZnBjaV9jb250cm9sbGVyXzFlX21pY3JvY29kZSkKLSNlbmRpZgotCQlyZWxlYXNlX2Zpcm13YXJlKGNoaXAtPmNvbnRyb2xsZXJfbWljcm9jb2RlKTsKIAlrZnJlZShjaGlwKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKaW5kZXggMzYzYmNiNS4uYzU3ZTEyNyAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKKysrIGIvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiAJLyogZmluZCBhbiBlbXB0eSBzbG90IGZyb20gdGhlIGNhcmQgbGlzdCAqLwogCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7Ci0JCWlmICghIGNhcmRfYWxsb2MgJiAoMSA8PCBpKSkKKwkJaWYgKCEoY2FyZF9hbGxvYyAmICgxIDw8IGkpKSkKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA+PSBTTkRSVl9DQVJEUykgewpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuYyBiL3NvdW5kL3BwYy9wbWFjLmMKaW5kZXggMmJhZTljMS4uNWEyYmVmNCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuYworKysgYi9zb3VuZC9wcGMvcG1hYy5jCkBAIC04NDMsNyArODQzLDcgQEAKIAkvKiBpZiBzZWVtcyB0aGF0IEtleWxhcmdvIGNhbid0IGJ5dGUtc3dhcCAgKi8KIAlmb3IgKG1pbyA9IGNoaXAtPm5vZGUtPnBhcmVudDsgbWlvOyBtaW8gPSBtaW8tPnBhcmVudCkgewogCQlpZiAoc3RyY21wKG1pby0+bmFtZSwgIm1hYy1pbyIpID09IDApIHsKLQkJCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShtaW8sICJLZXlsYXJnbyIpKQorCQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG1pbywgIktleWxhcmdvIikpCiAJCQkJY2hpcC0+Y2FuX2J5dGVfc3dhcCA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtOTEwLDcgKzkxMCw3IEBACiAJCWNoaXAtPm5vZGUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiaTJzLWEiKTsKIAkJaWYgKGNoaXAtPm5vZGUgJiYgY2hpcC0+bm9kZS0+cGFyZW50ICYmCiAJCSAgICBjaGlwLT5ub2RlLT5wYXJlbnQtPnBhcmVudCkgewotCQkJaWYgKGRldmljZV9pc19jb21wYXRpYmxlKGNoaXAtPm5vZGUtPnBhcmVudC0+cGFyZW50LAorCQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaXAtPm5vZGUtPnBhcmVudC0+cGFyZW50LAogCQkJCQkJICJLMi1LZXlsYXJnbyIpKQogCQkJCWNoaXAtPmlzX2syID0gMTsKIAkJfQpAQCAtOTQxLDIyICs5NDEsMjIgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCS8qIFRoaXMgc2hvdWxkIGJlIHZlcmlmaWVkIG9uIG9sZGVyIHNjcmVhbWVycyAqLwotCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShzb3VuZCwgInNjcmVhbWVyIikpIHsKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoc291bmQsICJzY3JlYW1lciIpKSB7CiAJCWNoaXAtPm1vZGVsID0gUE1BQ19TQ1JFQU1FUjsKIAkJLy8gY2hpcC0+Y2FuX2J5dGVfc3dhcCA9IDA7IC8qIEZJWE1FOiBjaGVjayB0aGlzICovCiAJfQotCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShzb3VuZCwgImJ1cmd1bmR5IikpIHsKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoc291bmQsICJidXJndW5keSIpKSB7CiAJCWNoaXAtPm1vZGVsID0gUE1BQ19CVVJHVU5EWTsKIAkJY2hpcC0+Y29udHJvbF9tYXNrID0gTUFTS19JRVBDIHwgMHgxMTsgLyogZGlzYWJsZSBJRUUgKi8KIAl9Ci0JaWYgKGRldmljZV9pc19jb21wYXRpYmxlKHNvdW5kLCAiZGFjYSIpKSB7CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHNvdW5kLCAiZGFjYSIpKSB7CiAJCWNoaXAtPm1vZGVsID0gUE1BQ19EQUNBOwogCQljaGlwLT5jYW5fY2FwdHVyZSA9IDA7ICAvKiBubyBjYXB0dXJlICovCiAJCWNoaXAtPmNhbl9kdXBsZXggPSAwOwogCQkvLyBjaGlwLT5jYW5fYnl0ZV9zd2FwID0gMDsgLyogRklYTUU6IGNoZWNrIHRoaXMgKi8KIAkJY2hpcC0+Y29udHJvbF9tYXNrID0gTUFTS19JRVBDIHwgMHgxMTsgLyogZGlzYWJsZSBJRUUgKi8KIAl9Ci0JaWYgKGRldmljZV9pc19jb21wYXRpYmxlKHNvdW5kLCAidHVtYmxlciIpKSB7CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHNvdW5kLCAidHVtYmxlciIpKSB7CiAJCWNoaXAtPm1vZGVsID0gUE1BQ19UVU1CTEVSOwogCQljaGlwLT5jYW5fY2FwdHVyZSA9IDA7ICAvKiBubyBjYXB0dXJlICovCiAJCWNoaXAtPmNhbl9kdXBsZXggPSAwOwpAQCAtOTY1LDcgKzk2NSw3IEBACiAJCWNoaXAtPmZyZXFfdGFibGUgPSB0dW1ibGVyX2ZyZXFzOwogCQljaGlwLT5jb250cm9sX21hc2sgPSBNQVNLX0lFUEMgfCAweDExOyAvKiBkaXNhYmxlIElFRSAqLwogCX0KLQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUoc291bmQsICJzbmFwcGVyIikpIHsKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoc291bmQsICJzbmFwcGVyIikpIHsKIAkJY2hpcC0+bW9kZWwgPSBQTUFDX1NOQVBQRVI7CiAJCS8vIGNoaXAtPmNhbl9ieXRlX3N3YXAgPSAwOyAvKiBGSVhNRTogY2hlY2sgdGhpcyAqLwogCQljaGlwLT5udW1fZnJlcXMgPSBBUlJBWV9TSVpFKHR1bWJsZXJfZnJlcXMpOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3R1bWJsZXIuYyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKaW5kZXggNTRlMzMzZi4uNTgyMWNkZCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3R1bWJsZXIuYworKysgYi9zb3VuZC9wcGMvdHVtYmxlci5jCkBAIC0xMDYwLDcgKzEwNjAsNyBAQAogICAKIAlmb3IgKG5wID0gb2ZfZ2V0X25leHRfY2hpbGQoZ3Bpb3AsIE5VTEwpOyBucDsKIAkJCW5wID0gb2ZfZ2V0X25leHRfY2hpbGQoZ3Bpb3AsIG5wKSkgewotCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsIG5hbWUpKQorCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsIG5hbWUpKQogCQkJYnJlYWs7CiAJfSAgCiAJb2Zfbm9kZV9wdXQoZ3Bpb3ApOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL0tjb25maWcgYi9zb3VuZC9zb2MvS2NvbmZpZwppbmRleCBkY2NhYTRiLi4xMGNmZmMwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvS2NvbmZpZwpAQCAtMiwzMSArMiwzMSBAQAogIyBTb0MgYXVkaW8gY29uZmlndXJhdGlvbgogIwogCi1tZW51ICJTb0MgYXVkaW8gc3VwcG9ydCIKK21lbnUgIlN5c3RlbSBvbiBDaGlwIGF1ZGlvIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTTkQhPW4KIAogY29uZmlnIFNORF9TT0NfQUM5N19CVVMKIAlib29sCiAKIGNvbmZpZyBTTkRfU09DCi0JdHJpc3RhdGUgIlNvQyBhdWRpbyBzdXBwb3J0IgorCXRyaXN0YXRlICJBTFNBIGZvciBTb0MgYXVkaW8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNORAogCXNlbGVjdCBTTkRfUENNCiAJLS0taGVscC0tLQogCi0JICBJZiB5b3Ugd2FudCBTb0Mgc3VwcG9ydCwgeW91IHNob3VsZCBzYXkgWSBoZXJlIGFuZCBhbHNvIHRvIHRoZQotCSAgc3BlY2lmaWMgZHJpdmVyIGZvciB5b3VyIFNvQyBiZWxvdy4gWW91IHdpbGwgYWxzbyBuZWVkIHRvIHNlbGVjdCB0aGUKLQkgIHNwZWNpZmljIGNvZGVjKHMpIGF0dGFjaGVkIHRvIHRoZSBTb0MKKwkgIElmIHlvdSB3YW50IEFTb0Mgc3VwcG9ydCwgeW91IHNob3VsZCBzYXkgWSBoZXJlIGFuZCBhbHNvIHRvIHRoZQorCSAgc3BlY2lmaWMgZHJpdmVyIGZvciB5b3VyIFNvQyBwbGF0Zm9ybSBiZWxvdy4KKwkgIAorCSAgQVNvQyBwcm92aWRlcyBwb3dlciBlZmZpY2llbnQgQUxTQSBzdXBwb3J0IGZvciBlbWJlZGRlZCBiYXR0ZXJ5IHBvd2VyZWQKKwkgIFNvQyBiYXNlZCBzeXN0ZW1zIGxpa2UgUERBJ3MsIFBob25lcyBhbmQgUGVyc29uYWwgTWVkaWEgUGxheWVycy4KIAotCSAgVGhpcyBTb0MgYXVkaW8gc3VwcG9ydCBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICBUaGlzIEFTb0MgYXVkaW8gc3VwcG9ydCBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtc29jLWNvcmUuCiAKICMgQWxsIHRoZSBzdXBwb3J0ZWQgU29jJ3MKLW1lbnUgIlNvQyBQbGF0Zm9ybXMiCi1kZXBlbmRzIG9uIFNORF9TT0MKIHNvdXJjZSAic291bmQvc29jL2F0OTEvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL3B4YS9LY29uZmlnIgotZW5kbWVudQorc291cmNlICJzb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnIgogCiAjIFN1cHBvcnRlZCBjb2RlY3MKIHNvdXJjZSAic291bmQvc29jL2NvZGVjcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL01ha2VmaWxlIGIvc291bmQvc29jL01ha2VmaWxlCmluZGV4IDk4ZTZmNDkuLjBhZTJlNDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACiBzbmQtc29jLWNvcmUtb2JqcyA6PSBzb2MtY29yZS5vIHNvYy1kYXBtLm8KIAogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IHNuZC1zb2MtY29yZS5vCi1vYmotJChDT05GSUdfU05EX1NPQykJKz0gY29kZWNzLyBhdDkxLyBweGEvCitvYmotJChDT05GSUdfU05EX1NPQykJKz0gY29kZWNzLyBhdDkxLyBweGEvIHMzYzI0eHgvCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXQ5MS9LY29uZmlnIGIvc291bmQvc29jL2F0OTEvS2NvbmZpZwppbmRleCBhNWIyNTU4Li41Y2I5M2ZkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXQ5MS9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9hdDkxL0tjb25maWcKQEAgLTEsNSArMSwzIEBACi1tZW51ICJTb0MgQXVkaW8gZm9yIHRoZSBBdG1lbCBBVDkxIgotCiBjb25maWcgU05EX0FUOTFfU09DCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgdGhlIEF0bWVsIEFUOTEgU3lzdGVtLW9uLUNoaXAiCiAJZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgU05EX1NPQwpAQCAtOCwxMyArNiwxMyBAQAogCSAgdGhlIEFUOTEgU1NDIGludGVyZmFjZS4gWW91IHdpbGwgYWxzbyBuZWVkCiAJICB0byBzZWxlY3QgdGhlIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KIAotY29uZmlnIFNORF9BVDkxX1NPQ19JMlMKK2NvbmZpZyBTTkRfQVQ5MV9TT0NfU1NDCiAJdHJpc3RhdGUKIAogY29uZmlnIFNORF9BVDkxX1NPQ19FVElfQjFfV004NzMxCi0JdHJpc3RhdGUgIlNvQyBJMlMgQXVkaW8gc3VwcG9ydCBmb3IgV004NzMxLWJhc2VkIEVuZHJlbGlhIEVUSS1CMSBib2FyZHMiCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBXTTg3MzEtYmFzZWQgRW5kcmVsaWEgRVRJLUIxIGJvYXJkcyIKIAlkZXBlbmRzIG9uIFNORF9BVDkxX1NPQyAmJiAoTUFDSF9FVElfQjEgfHwgTUFDSF9FVElfQzEpCi0Jc2VsZWN0IFNORF9BVDkxX1NPQ19JMlMKKwlzZWxlY3QgU05EX0FUOTFfU09DX1NTQwogCXNlbGVjdCBTTkRfU09DX1dNODczMQogCWhlbHAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gV004NzMxLWJhc2VkCkBAIC0yNyw1ICsyNSwzIEBACiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gcnVuIHdpdGggdGhlIEFUOTEgU1NDIGdlbmVyYXRpbmcgdGhlIEJDTEsKIAkgIGFuZCBMUkMgc2lnbmFscyBvbiBFbmRyZWxpYSBib2FyZHMuCi0KLWVuZG1lbnUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdDkxL01ha2VmaWxlIGIvc291bmQvc29jL2F0OTEvTWFrZWZpbGUKaW5kZXggYjc3YjAxYS4uZjIzZGExNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0OTEvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2F0OTEvTWFrZWZpbGUKQEAgLTEsOSArMSw5IEBACiAjIEFUOTEgUGxhdGZvcm0gU3VwcG9ydAogc25kLXNvYy1hdDkxLW9ianMgOj0gYXQ5MS1wY20ubwotc25kLXNvYy1hdDkxLWkycy1vYmpzIDo9IGF0OTEtaTJzLm8KK3NuZC1zb2MtYXQ5MS1zc2Mtb2JqcyA6PSBhdDkxLXNzYy5vCiAKIG9iai0kKENPTkZJR19TTkRfQVQ5MV9TT0MpICs9IHNuZC1zb2MtYXQ5MS5vCi1vYmotJChDT05GSUdfU05EX0FUOTFfU09DX0kyUykgKz0gc25kLXNvYy1hdDkxLWkycy5vCitvYmotJChDT05GSUdfU05EX0FUOTFfU09DX1NTQykgKz0gc25kLXNvYy1hdDkxLXNzYy5vCiAKICMgQVQ5MSBNYWNoaW5lIFN1cHBvcnQKIHNuZC1zb2MtZXRpLWIxLXdtODczMS1vYmpzIDo9IGV0aV9iMV93bTg3MzEubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0OTEvYXQ5MS1pMnMuYyBiL3NvdW5kL3NvYy9hdDkxL2F0OTEtc3NjLmMKc2ltaWxhcml0eSBpbmRleCA3MiUKcmVuYW1lIGZyb20gc291bmQvc29jL2F0OTEvYXQ5MS1pMnMuYwpyZW5hbWUgdG8gc291bmQvc29jL2F0OTEvYXQ5MS1zc2MuYwppbmRleCA5ZmMwYzAzLi4zZDRlMzJjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXQ5MS9hdDkxLWkycy5jCisrKyBiL3NvdW5kL3NvYy9hdDkxL2F0OTEtc3NjLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXQ5MS1pMnMuYyAgLS0gIEFMU0EgU29DIEkyUyBBdWRpbyBMYXllciBQbGF0Zm9ybSBkcml2ZXIKKyAqIGF0OTEtc3NjLmMgIC0tICBBTFNBIFNvQyBBVDkxIFNTQyBBdWRpbyBMYXllciBQbGF0Zm9ybSBkcml2ZXIKICAqCiAgKiBBdXRob3I6IEZyYW5rIE1hbmRhcmlubyA8Zm1hbmRhcmlub0BlbmRyZWxpYS5jb20+CiAgKiAgICAgICAgIEVuZHJlbGlhIFRlY2hub2xvZ2llcyBJbmMuCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAKQEAgLTMzLDEwICszNCwxMCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfc3NjLmg+CiAKICNpbmNsdWRlICJhdDkxLXBjbS5oIgotI2luY2x1ZGUgImF0OTEtaTJzLmgiCisjaW5jbHVkZSAiYXQ5MS1zc2MuaCIKIAogI2lmIDAKLSNkZWZpbmUJREJHKHguLi4pCXByaW50ayhLRVJOX0RFQlVHICJhdDkxLWkyczoiIHgpCisjZGVmaW5lCURCRyh4Li4uKQlwcmludGsoS0VSTl9ERUJVRyAiYXQ5MS1zc2M6IiB4KQogI2Vsc2UKICNkZWZpbmUJREJHKHguLi4pCiAjZW5kaWYKQEAgLTkyLDMzICs5MywzMyBAQAogICovCiBzdGF0aWMgc3RydWN0IGF0OTFfcGNtX2RtYV9wYXJhbXMgc3NjX2RtYV9wYXJhbXNbTlVNX1NTQ19ERVZJQ0VTXVsyXSA9IHsKIAl7ewotCS5uYW1lCQk9ICJTU0MwL0kyUyBQQ00gU3RlcmVvIG91dCIsCisJLm5hbWUJCT0gIlNTQzAgUENNIG91dCIsCiAJLnBkYwkJPSAmcGRjX3R4X3JlZywKIAkubWFzawkJPSAmc3NjX3R4X21hc2ssCiAJfSwKIAl7Ci0JLm5hbWUJCT0gIlNTQzAvSTJTIFBDTSBTdGVyZW8gaW4iLAorCS5uYW1lCQk9ICJTU0MwIFBDTSBpbiIsCiAJLnBkYwkJPSAmcGRjX3J4X3JlZywKIAkubWFzawkJPSAmc3NjX3J4X21hc2ssCiAJfX0sCiAjaWYgTlVNX1NTQ19ERVZJQ0VTID09IDMKIAl7ewotCS5uYW1lCQk9ICJTU0MxL0kyUyBQQ00gU3RlcmVvIG91dCIsCisJLm5hbWUJCT0gIlNTQzEgUENNIG91dCIsCiAJLnBkYwkJPSAmcGRjX3R4X3JlZywKIAkubWFzawkJPSAmc3NjX3R4X21hc2ssCiAJfSwKIAl7Ci0JLm5hbWUJCT0gIlNTQzEvSTJTIFBDTSBTdGVyZW8gaW4iLAorCS5uYW1lCQk9ICJTU0MxIFBDTSBpbiIsCiAJLnBkYwkJPSAmcGRjX3J4X3JlZywKIAkubWFzawkJPSAmc3NjX3J4X21hc2ssCiAJfX0sCiAJe3sKLQkubmFtZQkJPSAiU1NDMi9JMlMgUENNIFN0ZXJlbyBvdXQiLAorCS5uYW1lCQk9ICJTU0MyIFBDTSBvdXQiLAogCS5wZGMJCT0gJnBkY190eF9yZWcsCiAJLm1hc2sJCT0gJnNzY190eF9tYXNrLAogCX0sCiAJewotCS5uYW1lCQk9ICJTU0MxL0kyUyBQQ00gU3RlcmVvIGluIiwKKwkubmFtZQkJPSAiU1NDMiBQQ00gaW4iLAogCS5wZGMJCT0gJnBkY19yeF9yZWcsCiAJLm1hc2sJCT0gJnNzY19yeF9tYXNrLAogCX19LApAQCAtMTUxLDMzICsxNTIsMzMgQEAKIH0gc3NjX2luZm9bTlVNX1NTQ19ERVZJQ0VTXSA9IHsKIAl7CiAJLm5hbWUJCT0gInNzYzAiLAotCS5sb2NrCQk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkubG9jawkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChzc2NfaW5mb1swXS5sb2NrKSwKIAkuZGlyX21hc2sJPSAwLAogCS5pbml0aWFsaXplZAk9IDAsCiAJfSwKICNpZiBOVU1fU1NDX0RFVklDRVMgPT0gMwogCXsKIAkubmFtZQkJPSAic3NjMSIsCi0JLmxvY2sJCT0gU1BJTl9MT0NLX1VOTE9DS0VELAorCS5sb2NrCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHNzY19pbmZvWzFdLmxvY2spLAogCS5kaXJfbWFzawk9IDAsCiAJLmluaXRpYWxpemVkCT0gMCwKIAl9LAogCXsKIAkubmFtZQkJPSAic3NjMiIsCi0JLmxvY2sJCT0gU1BJTl9MT0NLX1VOTE9DS0VELAorCS5sb2NrCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHNzY19pbmZvWzJdLmxvY2spLAogCS5kaXJfbWFzawk9IDAsCiAJLmluaXRpYWxpemVkCT0gMCwKIAl9LAogI2VuZGlmCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0OTFfaTJzX3N5c2NsazsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXQ5MV9zc2Nfc3lzY2xrOwogCiAvKgogICogU1NDIGludGVycnVwdCBoYW5kbGVyLiAgUGFzc2VzIFBEQyBpbnRlcnJ1cHRzIHRvIHRoZSBETUEKICAqIGludGVycnVwdCBoYW5kbGVyIGluIHRoZSBQQ00gZHJpdmVyLgogICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgYXQ5MV9pMnNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBhdDkxX3NzY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBhdDkxX3NzY19pbmZvICpzc2NfcCA9IGRldl9pZDsKIAlzdHJ1Y3QgYXQ5MV9wY21fZG1hX3BhcmFtcyAqZG1hX3BhcmFtczsKQEAgLTIwOSwxMyArMjEwLDEzIEBACiAvKgogICogU3RhcnR1cC4gIE9ubHkgdGhhdCBvbmUgc3Vic3RyZWFtIGFsbG93ZWQgaW4gZWFjaCBkaXJlY3Rpb24uCiAgKi8KLXN0YXRpYyBpbnQgYXQ5MV9pMnNfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgYXQ5MV9zc2Nfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGF0OTFfc3NjX2luZm8gKnNzY19wID0gJnNzY19pbmZvW3J0ZC0+ZGFpLT5jcHVfZGFpLT5pZF07CiAJaW50IGRpcl9tYXNrOwogCi0JREJHKCJpMnNfc3RhcnR1cDogU1NDX1NSPTB4JTA4bHhcbiIsCisJREJHKCJzc2Nfc3RhcnR1cDogU1NDX1NSPTB4JTA4bHhcbiIsCiAJCQlhdDkxX3NzY19yZWFkKHNzY19wLT5zc2MuYmFzZSArIEFUOTFfU1NDX1NSKSk7CiAJZGlyX21hc2sgPSBzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLID8gMHgxIDogMHgyOwogCkBAIC0yMzQsNyArMjM1LDcgQEAKICAqIFNodXRkb3duLiAgQ2xlYXIgRE1BIHBhcmFtZXRlcnMgYW5kIHNodXRkb3duIHRoZSBTU0MgaWYgdGhlcmUKICAqIGFyZSBubyBvdGhlciBzdWJzdHJlYW1zIG9wZW4uCiAgKi8KLXN0YXRpYyB2b2lkIGF0OTFfaTJzX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIHZvaWQgYXQ5MV9zc2Nfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhdDkxX3NzY19pbmZvICpzc2NfcCA9ICZzc2NfaW5mb1tydGQtPmRhaS0+Y3B1X2RhaS0+aWRdOwpAQCAtMjgxLDcgKzI4Miw3IEBACiAvKgogICogUmVjb3JkIHRoZSBTU0Mgc3lzdGVtIGNsb2NrIHJhdGUuCiAgKi8KLXN0YXRpYyBpbnQgYXQ5MV9pMnNfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfY3B1X2RhaSAqY3B1X2RhaSwKK3N0YXRpYyBpbnQgYXQ5MV9zc2Nfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfY3B1X2RhaSAqY3B1X2RhaSwKIAkJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCiB7CiAJLyoKQEAgLTI5MSw3ICsyOTIsNyBAQAogCSAqLwogCXN3aXRjaCAoY2xrX2lkKSB7CiAJY2FzZSBBVDkxX1NZU0NMS19NQ0s6Ci0JCWF0OTFfaTJzX3N5c2NsayA9IGZyZXE7CisJCWF0OTFfc3NjX3N5c2NsayA9IGZyZXE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzAzLDE0ICszMDQsMTEgQEAKIC8qCiAgKiBSZWNvcmQgdGhlIERBSSBmb3JtYXQgZm9yIHVzZSBpbiBod19wYXJhbXMoKS4KICAqLwotc3RhdGljIGludCBhdDkxX2kyc19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19jcHVfZGFpICpjcHVfZGFpLAorc3RhdGljIGludCBhdDkxX3NzY19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19jcHVfZGFpICpjcHVfZGFpLAogCQl1bnNpZ25lZCBpbnQgZm10KQogewogCXN0cnVjdCBhdDkxX3NzY19pbmZvICpzc2NfcCA9ICZzc2NfaW5mb1tjcHVfZGFpLT5pZF07CiAKLQlpZiAoKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSAhPSBTTkRfU09DX0RBSUZNVF9JMlMpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJc3NjX3AtPmRhaWZtdCA9IGZtdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTMxOCw3ICszMTYsNyBAQAogLyoKICAqIFJlY29yZCBTU0MgY2xvY2sgZGl2aWRlcnMgZm9yIHVzZSBpbiBod19wYXJhbXMoKS4KICAqLwotc3RhdGljIGludCBhdDkxX2kyc19zZXRfZGFpX2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19jcHVfZGFpICpjcHVfZGFpLAorc3RhdGljIGludCBhdDkxX3NzY19zZXRfZGFpX2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19jcHVfZGFpICpjcHVfZGFpLAogCWludCBkaXZfaWQsIGludCBkaXYpCiB7CiAJc3RydWN0IGF0OTFfc3NjX2luZm8gKnNzY19wID0gJnNzY19pbmZvW2NwdV9kYWktPmlkXTsKQEAgLTM1NSw3ICszNTMsNyBAQAogLyoKICAqIENvbmZpZ3VyZSB0aGUgU1NDLgogICovCi1zdGF0aWMgaW50IGF0OTFfaTJzX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKK3N0YXRpYyBpbnQgYXQ5MV9zc2NfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKQEAgLTM5MSwyMCArMzg5LDUwIEBACiAJY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKTsKIAogCS8qCi0JICogVGhlIFNTQyBvbmx5IHN1cHBvcnRzIHVwIHRvIDE2LWJpdCBzYW1wbGVzIGluIEkyUyBmb3JtYXQsIGR1ZQotCSAqIHRvIHRoZSBzaXplIG9mIHRoZSBGcmFtZSBNb2RlIFJlZ2lzdGVyIEZTTEVOIGZpZWxkLiAgQWxzbywgSTJTCi0JICogaW1wbGllcyBzaWduZWQgZGF0YS4KKwkgKiBEZXRlcm1pbmUgc2FtcGxlIHNpemUgaW4gYml0cyBhbmQgdGhlIFBEQyBpbmNyZW1lbnQuCiAJICovCi0JYml0cyA9IDE2OwotCWRtYV9wYXJhbXMtPnBkY194ZmVyX3NpemUgPSAyOworCXN3aXRjaChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzg6CisJCWJpdHMgPSA4OworCQlkbWFfcGFyYW1zLT5wZGNfeGZlcl9zaXplID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYml0cyA9IDE2OworCQlkbWFfcGFyYW1zLT5wZGNfeGZlcl9zaXplID0gMjsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJYml0cyA9IDI0OworCQlkbWFfcGFyYW1zLT5wZGNfeGZlcl9zaXplID0gNDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJYml0cyA9IDMyOworCQlkbWFfcGFyYW1zLT5wZGNfeGZlcl9zaXplID0gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXQ5MS1zc2M6IHVuc3VwcG9ydGVkIFBDTSBmb3JtYXQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBUaGUgU1NDIG9ubHkgc3VwcG9ydHMgdXAgdG8gMTYtYml0IHNhbXBsZXMgaW4gSTJTIGZvcm1hdCwgZHVlCisJICogdG8gdGhlIHNpemUgb2YgdGhlIEZyYW1lIE1vZGUgUmVnaXN0ZXIgRlNMRU4gZmllbGQuCisJICovCisJaWYgKChzc2NfcC0+ZGFpZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spID09IFNORF9TT0NfREFJRk1UX0kyUworCQkmJiBiaXRzID4gMTYpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImF0OTEtc3NjOiBzYW1wbGUgc2l6ZSAlZCBpcyB0b28gbGFyZ2UgZm9yIEkyU1xuIiwgYml0cyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCS8qCiAJICogQ29tcHV0ZSBTU0MgcmVnaXN0ZXIgc2V0dGluZ3MuCiAJICovCi0Jc3dpdGNoIChzc2NfcC0+ZGFpZm10KSB7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCXN3aXRjaCAoc3NjX3AtPmRhaWZtdAorCQkmIChTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSyB8IFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSkgeworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgogCQkvKgotCQkgKiBTU0MgcHJvdmlkZXMgQkNMSyBhbmQgTFJDIGNsb2Nrcy4KKwkJICogSTJTIGZvcm1hdCwgU1NDIHByb3ZpZGVzIEJDTEsgYW5kIExSQyBjbG9ja3MuCiAJCSAqCiAJCSAqIFRoZSBTU0MgdHJhbnNtaXQgYW5kIHJlY2VpdmUgY2xvY2tzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUKIAkJICogTUNLIGRpdmlkZXIsIGFuZCB0aGUgQkNMSyBzaWduYWwgaXMgb3V0cHV0IG9uIHRoZSBTU0MgVEsgbGluZS4KQEAgLTQ0MSwxMCArNDY5LDkgQEAKIAkJCXwgKCgoYml0cyAtIDEpCQkJPDwgIDApICYgQVQ5MV9TU0NfREFUQUxFTik7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgotCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgogCQkvKgotCQkgKiBDT0RFQyBzdXBwbGllcyBCQ0xLIGFuZCBMUkMgY2xvY2tzLgorCQkgKiBJMlMgZm9ybWF0LCBDT0RFQyBzdXBwbGllcyBCQ0xLIGFuZCBMUkMgY2xvY2tzLgogCQkgKgogCQkgKiBUaGUgU1NDIHRyYW5zbWl0IGNsb2NrIGlzIG9idGFpbmVkIGZyb20gdGhlIEJDTEsgc2lnbmFsIG9uCiAJCSAqIG9uIHRoZSBUSyBsaW5lLCBhbmQgdGhlIFNTQyByZWNlaXZlIGNsb2NrIGlzIGdlbmVyYXRlZCBmcm9tIHRoZQpAQCAtNDkwLDEwICs1MTcsNTEgQEAKIAkJCXwgKCgoYml0cyAtIDEpCQkJPDwgIDApICYgQVQ5MV9TU0NfREFUQUxFTik7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZNOgotCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJLyoKKwkJICogRFNQL1BDTSBNb2RlIEEgZm9ybWF0LCBTU0MgcHJvdmlkZXMgQkNMSyBhbmQgTFJDIGNsb2Nrcy4KKwkJICoKKwkJICogVGhlIFNTQyB0cmFuc21pdCBhbmQgcmVjZWl2ZSBjbG9ja3MgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZQorCQkgKiBNQ0sgZGl2aWRlciwgYW5kIHRoZSBCQ0xLIHNpZ25hbCBpcyBvdXRwdXQgb24gdGhlIFNTQyBUSyBsaW5lLgorCQkgKi8KKwkJcmNtciA9CSAgKCggc3NjX3AtPnJjbXJfcGVyaW9kCQk8PCAyNCkgJiBBVDkxX1NTQ19QRVJJT0QpCisJCQl8ICgoIDEJCQkJPDwgMTYpICYgQVQ5MV9TU0NfU1RURExZKQorCQkJfCAoKCBBVDkxX1NTQ19TVEFSVF9SSVNJTkdfUkYJICAgICApICYgQVQ5MV9TU0NfU1RBUlQpCisJCQl8ICgoIEFUOTFfU1NDX0NLX1JJU0lORwkJICAgICApICYgQVQ5MV9TU0NfQ0tJKQorCQkJfCAoKCBBVDkxX1NTQ19DS09fTk9ORQkJICAgICApICYgQVQ5MV9TU0NfQ0tPKQorCQkJfCAoKCBBVDkxX1NTQ19DS1NfRElWCQkgICAgICkgJiBBVDkxX1NTQ19DS1MpOworCisJCXJmbXIgPQkgICgoIEFUOTFfU1NDX0ZTRURHRV9QT1NJVElWRQkgICAgICkgJiBBVDkxX1NTQ19GU0VER0UpCisJCQl8ICgoIEFUOTFfU1NDX0ZTT1NfUE9TSVRJVkUJICAgICApICYgQVQ5MV9TU0NfRlNPUykKKwkJCXwgKCggMAkJCQk8PCAxNikgJiBBVDkxX1NTQ19GU0xFTikKKwkJCXwgKCgoY2hhbm5lbHMgLSAxKQkJPDwgIDgpICYgQVQ5MV9TU0NfREFUTkIpCisJCQl8ICgoIDEJCQkJPDwgIDcpICYgQVQ5MV9TU0NfTVNCRikKKwkJCXwgKCggMAkJCQk8PCAgNSkgJiBBVDkxX1NTQ19MT09QKQorCQkJfCAoKChiaXRzIC0gMSkJCQk8PCAgMCkgJiBBVDkxX1NTQ19EQVRBTEVOKTsKKworCQl0Y21yID0JICAoKCBzc2NfcC0+dGNtcl9wZXJpb2QJCTw8IDI0KSAmIEFUOTFfU1NDX1BFUklPRCkKKwkJCXwgKCggMQkJCQk8PCAxNikgJiBBVDkxX1NTQ19TVFRETFkpCisJCQl8ICgoIEFUOTFfU1NDX1NUQVJUX1JJU0lOR19SRiAgICAgICAgKSAmIEFUOTFfU1NDX1NUQVJUKQorCQkJfCAoKCBBVDkxX1NTQ19DS19SSVNJTkcJCSAgICAgKSAmIEFUOTFfU1NDX0NLSSkKKwkJCXwgKCggQVQ5MV9TU0NfQ0tPX0NPTlRJTlVPVVMJICAgICApICYgQVQ5MV9TU0NfQ0tPKQorCQkJfCAoKCBBVDkxX1NTQ19DS1NfRElWCQkgICAgICkgJiBBVDkxX1NTQ19DS1MpOworCisJCXRmbXIgPQkgICgoIEFUOTFfU1NDX0ZTRURHRV9QT1NJVElWRQkgICAgICkgJiBBVDkxX1NTQ19GU0VER0UpCisJCQl8ICgoIDAJCQkJPDwgMjMpICYgQVQ5MV9TU0NfRlNERU4pCisJCQl8ICgoIEFUOTFfU1NDX0ZTT1NfUE9TSVRJVkUJICAgICApICYgQVQ5MV9TU0NfRlNPUykKKwkJCXwgKCggMAkJCQk8PCAxNikgJiBBVDkxX1NTQ19GU0xFTikKKwkJCXwgKCgoY2hhbm5lbHMgLSAxKQkJPDwgIDgpICYgQVQ5MV9TU0NfREFUTkIpCisJCQl8ICgoIDEJCQkJPDwgIDcpICYgQVQ5MV9TU0NfTVNCRikKKwkJCXwgKCggMAkJCQk8PCAgNSkgJiBBVDkxX1NTQ19EQVRERUYpCisJCQl8ICgoKGJpdHMgLSAxKQkJCTw8ICAwKSAmIEFUOTFfU1NDX0RBVEFMRU4pOworCisKKworCQkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdDkxLWkyczogdW5zdXBwb3J0ZWQgREFJIGZvcm1hdCAweCV4LlxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXQ5MS1zc2M6IHVuc3VwcG9ydGVkIERBSSBmb3JtYXQgMHgleC5cbiIsCiAJCQlzc2NfcC0+ZGFpZm10KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwpAQCAtNTE4LDkgKzU4Niw5IEBACiAJCWF0OTFfc3NjX3dyaXRlKHNzY19wLT5zc2MuYmFzZSArIEFUTUVMX1BEQ19UTlBSLCAwKTsKIAkJYXQ5MV9zc2Nfd3JpdGUoc3NjX3AtPnNzYy5iYXNlICsgQVRNRUxfUERDX1ROQ1IsIDApOwogCi0JCWlmICgocmV0ID0gcmVxdWVzdF9pcnEoc3NjX3AtPnNzYy5waWQsIGF0OTFfaTJzX2ludGVycnVwdCwKKwkJaWYgKChyZXQgPSByZXF1ZXN0X2lycShzc2NfcC0+c3NjLnBpZCwgYXQ5MV9zc2NfaW50ZXJydXB0LAogCQkJCQkwLCBzc2NfcC0+bmFtZSwgc3NjX3ApKSA8IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0OTEtaTJzOiByZXF1ZXN0X2lycSBmYWlsdXJlXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0OTEtc3NjOiByZXF1ZXN0X2lycSBmYWlsdXJlXG4iKTsKIAogCQkJREJHKCJTdG9wcGluZyBwaWQgJWQgY2xvY2tcbiIsIHNzY19wLT5zc2MucGlkKTsKIAkJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1BDRVIsIDE8PHNzY19wLT5zc2MucGlkKTsKQEAgLTU0Niw3ICs2MTQsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgYXQ5MV9pMnNfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgYXQ5MV9zc2NfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGF0OTFfc3NjX2luZm8gKnNzY19wID0gJnNzY19pbmZvW3J0ZC0+ZGFpLT5jcHVfZGFpLT5pZF07CkBAIC01NjYsNyArNjM0LDcgQEAKIAogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGF0OTFfaTJzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKK3N0YXRpYyBpbnQgYXQ5MV9zc2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCXN0cnVjdCBzbmRfc29jX2NwdV9kYWkgKmNwdV9kYWkpCiB7CiAJc3RydWN0IGF0OTFfc3NjX2luZm8gKnNzY19wOwpAQCAtNTk0LDcgKzY2Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXQ5MV9pMnNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCitzdGF0aWMgaW50IGF0OTFfc3NjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCXN0cnVjdCBzbmRfc29jX2NwdV9kYWkgKmNwdV9kYWkpCiB7CiAJc3RydWN0IGF0OTFfc3NjX2luZm8gKnNzY19wOwpAQCAtNjIwLDEwMiArNjg4LDEwNSBAQAogfQogCiAjZWxzZQotI2RlZmluZSBhdDkxX2kyc19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgYXQ5MV9pMnNfcmVzdW1lCQlOVUxMCisjZGVmaW5lIGF0OTFfc3NjX3N1c3BlbmQJTlVMTAorI2RlZmluZSBhdDkxX3NzY19yZXN1bWUJCU5VTEwKICNlbmRpZgogCi0jZGVmaW5lIEFUOTFfSTJTX1JBVEVTIChTTkRSVl9QQ01fUkFURV84MDAwICB8IFNORFJWX1BDTV9SQVRFXzExMDI1IHxcCisjZGVmaW5lIEFUOTFfU1NDX1JBVEVTIChTTkRSVl9QQ01fUkFURV84MDAwICB8IFNORFJWX1BDTV9SQVRFXzExMDI1IHxcCiAJCQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHxcCiAJCQlTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHxcCiAJCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzg4MjAwIHxcCiAJCQlTTkRSVl9QQ01fUkFURV85NjAwMCkKIAotc3RydWN0IHNuZF9zb2NfY3B1X2RhaSBhdDkxX2kyc19kYWlbTlVNX1NTQ19ERVZJQ0VTXSA9IHsKLQl7CS5uYW1lID0gImF0OTFfc3NjMC9pMnMiLAorI2RlZmluZSBBVDkxX1NTQ19GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1M4ICAgICB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHxcCisJCQkgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0cnVjdCBzbmRfc29jX2NwdV9kYWkgYXQ5MV9zc2NfZGFpW05VTV9TU0NfREVWSUNFU10gPSB7CisJewkubmFtZSA9ICJhdDkxLXNzYzAiLAogCQkuaWQgPSAwLAotCQkudHlwZSA9IFNORF9TT0NfREFJX0kyUywKLQkJLnN1c3BlbmQgPSBhdDkxX2kyc19zdXNwZW5kLAotCQkucmVzdW1lID0gYXQ5MV9pMnNfcmVzdW1lLAorCQkudHlwZSA9IFNORF9TT0NfREFJX1BDTSwKKwkJLnN1c3BlbmQgPSBhdDkxX3NzY19zdXNwZW5kLAorCQkucmVzdW1lID0gYXQ5MV9zc2NfcmVzdW1lLAogCQkucGxheWJhY2sgPSB7CiAJCQkuY2hhbm5lbHNfbWluID0gMSwKIAkJCS5jaGFubmVsc19tYXggPSAyLAotCQkJLnJhdGVzID0gQVQ5MV9JMlNfUkFURVMsCi0JCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCisJCQkucmF0ZXMgPSBBVDkxX1NTQ19SQVRFUywKKwkJCS5mb3JtYXRzID0gQVQ5MV9TU0NfRk9STUFUUyx9LAogCQkuY2FwdHVyZSA9IHsKIAkJCS5jaGFubmVsc19taW4gPSAxLAogCQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCQkucmF0ZXMgPSBBVDkxX0kyU19SQVRFUywKLQkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKwkJCS5yYXRlcyA9IEFUOTFfU1NDX1JBVEVTLAorCQkJLmZvcm1hdHMgPSBBVDkxX1NTQ19GT1JNQVRTLH0sCiAJCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IGF0OTFfaTJzX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBhdDkxX2kyc19zaHV0ZG93biwKLQkJCS5wcmVwYXJlID0gYXQ5MV9pMnNfcHJlcGFyZSwKLQkJCS5od19wYXJhbXMgPSBhdDkxX2kyc19od19wYXJhbXMsfSwKKwkJCS5zdGFydHVwID0gYXQ5MV9zc2Nfc3RhcnR1cCwKKwkJCS5zaHV0ZG93biA9IGF0OTFfc3NjX3NodXRkb3duLAorCQkJLnByZXBhcmUgPSBhdDkxX3NzY19wcmVwYXJlLAorCQkJLmh3X3BhcmFtcyA9IGF0OTFfc3NjX2h3X3BhcmFtcyx9LAogCQkuZGFpX29wcyA9IHsKLQkJCS5zZXRfc3lzY2xrID0gYXQ5MV9pMnNfc2V0X2RhaV9zeXNjbGssCi0JCQkuc2V0X2ZtdCA9IGF0OTFfaTJzX3NldF9kYWlfZm10LAotCQkJLnNldF9jbGtkaXYgPSBhdDkxX2kyc19zZXRfZGFpX2Nsa2Rpdix9LAorCQkJLnNldF9zeXNjbGsgPSBhdDkxX3NzY19zZXRfZGFpX3N5c2NsaywKKwkJCS5zZXRfZm10ID0gYXQ5MV9zc2Nfc2V0X2RhaV9mbXQsCisJCQkuc2V0X2Nsa2RpdiA9IGF0OTFfc3NjX3NldF9kYWlfY2xrZGl2LH0sCiAJCS5wcml2YXRlX2RhdGEgPSAmc3NjX2luZm9bMF0uc3NjLAogCX0sCiAjaWYgTlVNX1NTQ19ERVZJQ0VTID09IDMKLQl7CS5uYW1lID0gImF0OTFfc3NjMS9pMnMiLAorCXsJLm5hbWUgPSAiYXQ5MS1zc2MxIiwKIAkJLmlkID0gMSwKLQkJLnR5cGUgPSBTTkRfU09DX0RBSV9JMlMsCi0JCS5zdXNwZW5kID0gYXQ5MV9pMnNfc3VzcGVuZCwKLQkJLnJlc3VtZSA9IGF0OTFfaTJzX3Jlc3VtZSwKKwkJLnR5cGUgPSBTTkRfU09DX0RBSV9QQ00sCisJCS5zdXNwZW5kID0gYXQ5MV9zc2Nfc3VzcGVuZCwKKwkJLnJlc3VtZSA9IGF0OTFfc3NjX3Jlc3VtZSwKIAkJLnBsYXliYWNrID0gewogCQkJLmNoYW5uZWxzX21pbiA9IDEsCiAJCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJCS5yYXRlcyA9IEFUOTFfSTJTX1JBVEVTLAotCQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAorCQkJLnJhdGVzID0gQVQ5MV9TU0NfUkFURVMsCisJCQkuZm9ybWF0cyA9IEFUOTFfU1NDX0ZPUk1BVFMsfSwKIAkJLmNhcHR1cmUgPSB7CiAJCQkuY2hhbm5lbHNfbWluID0gMSwKIAkJCS5jaGFubmVsc19tYXggPSAyLAotCQkJLnJhdGVzID0gQVQ5MV9JMlNfUkFURVMsCi0JCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCisJCQkucmF0ZXMgPSBBVDkxX1NTQ19SQVRFUywKKwkJCS5mb3JtYXRzID0gQVQ5MV9TU0NfRk9STUFUUyx9LAogCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBhdDkxX2kyc19zdGFydHVwLAotCQkJLnNodXRkb3duID0gYXQ5MV9pMnNfc2h1dGRvd24sCi0JCQkucHJlcGFyZSA9IGF0OTFfaTJzX3ByZXBhcmUsCi0JCQkuaHdfcGFyYW1zID0gYXQ5MV9pMnNfaHdfcGFyYW1zLH0sCisJCQkuc3RhcnR1cCA9IGF0OTFfc3NjX3N0YXJ0dXAsCisJCQkuc2h1dGRvd24gPSBhdDkxX3NzY19zaHV0ZG93biwKKwkJCS5wcmVwYXJlID0gYXQ5MV9zc2NfcHJlcGFyZSwKKwkJCS5od19wYXJhbXMgPSBhdDkxX3NzY19od19wYXJhbXMsfSwKIAkJLmRhaV9vcHMgPSB7Ci0JCQkuc2V0X3N5c2NsayA9IGF0OTFfaTJzX3NldF9kYWlfc3lzY2xrLAotCQkJLnNldF9mbXQgPSBhdDkxX2kyc19zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfY2xrZGl2ID0gYXQ5MV9pMnNfc2V0X2RhaV9jbGtkaXYsfSwKKwkJCS5zZXRfc3lzY2xrID0gYXQ5MV9zc2Nfc2V0X2RhaV9zeXNjbGssCisJCQkuc2V0X2ZtdCA9IGF0OTFfc3NjX3NldF9kYWlfZm10LAorCQkJLnNldF9jbGtkaXYgPSBhdDkxX3NzY19zZXRfZGFpX2Nsa2Rpdix9LAogCQkucHJpdmF0ZV9kYXRhID0gJnNzY19pbmZvWzFdLnNzYywKIAl9LAotCXsJLm5hbWUgPSAiYXQ5MV9zc2MyL2kycyIsCisJewkubmFtZSA9ICJhdDkxLXNzYzIiLAogCQkuaWQgPSAyLAotCQkudHlwZSA9IFNORF9TT0NfREFJX0kyUywKLQkJLnN1c3BlbmQgPSBhdDkxX2kyc19zdXNwZW5kLAotCQkucmVzdW1lID0gYXQ5MV9pMnNfcmVzdW1lLAorCQkudHlwZSA9IFNORF9TT0NfREFJX1BDTSwKKwkJLnN1c3BlbmQgPSBhdDkxX3NzY19zdXNwZW5kLAorCQkucmVzdW1lID0gYXQ5MV9zc2NfcmVzdW1lLAogCQkucGxheWJhY2sgPSB7CiAJCQkuY2hhbm5lbHNfbWluID0gMSwKIAkJCS5jaGFubmVsc19tYXggPSAyLAotCQkJLnJhdGVzID0gQVQ5MV9JMlNfUkFURVMsCi0JCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCisJCQkucmF0ZXMgPSBBVDkxX1NTQ19SQVRFUywKKwkJCS5mb3JtYXRzID0gQVQ5MV9TU0NfRk9STUFUUyx9LAogCQkuY2FwdHVyZSA9IHsKIAkJCS5jaGFubmVsc19taW4gPSAxLAogCQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCQkucmF0ZXMgPSBBVDkxX0kyU19SQVRFUywKLQkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKwkJCS5yYXRlcyA9IEFUOTFfU1NDX1JBVEVTLAorCQkJLmZvcm1hdHMgPSBBVDkxX1NTQ19GT1JNQVRTLH0sCiAJCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IGF0OTFfaTJzX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBhdDkxX2kyc19zaHV0ZG93biwKLQkJCS5wcmVwYXJlID0gYXQ5MV9pMnNfcHJlcGFyZSwKLQkJCS5od19wYXJhbXMgPSBhdDkxX2kyc19od19wYXJhbXMsfSwKKwkJCS5zdGFydHVwID0gYXQ5MV9zc2Nfc3RhcnR1cCwKKwkJCS5zaHV0ZG93biA9IGF0OTFfc3NjX3NodXRkb3duLAorCQkJLnByZXBhcmUgPSBhdDkxX3NzY19wcmVwYXJlLAorCQkJLmh3X3BhcmFtcyA9IGF0OTFfc3NjX2h3X3BhcmFtcyx9LAogCQkuZGFpX29wcyA9IHsKLQkJCS5zZXRfc3lzY2xrID0gYXQ5MV9pMnNfc2V0X2RhaV9zeXNjbGssCi0JCQkuc2V0X2ZtdCA9IGF0OTFfaTJzX3NldF9kYWlfZm10LAotCQkJLnNldF9jbGtkaXYgPSBhdDkxX2kyc19zZXRfZGFpX2Nsa2Rpdix9LAorCQkJLnNldF9zeXNjbGsgPSBhdDkxX3NzY19zZXRfZGFpX3N5c2NsaywKKwkJCS5zZXRfZm10ID0gYXQ5MV9zc2Nfc2V0X2RhaV9mbXQsCisJCQkuc2V0X2Nsa2RpdiA9IGF0OTFfc3NjX3NldF9kYWlfY2xrZGl2LH0sCiAJCS5wcml2YXRlX2RhdGEgPSAmc3NjX2luZm9bMl0uc3NjLAogCX0sCiAjZW5kaWYKIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGF0OTFfaTJzX2RhaSk7CitFWFBPUlRfU1lNQk9MX0dQTChhdDkxX3NzY19kYWkpOwogCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KIE1PRFVMRV9BVVRIT1IoIkZyYW5rIE1hbmRhcmlubywgZm1hbmRhcmlub0BlbmRyZWxpYS5jb20sIHd3dy5lbmRyZWxpYS5jb20iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQVQ5MSBJMlMgQVNvQyBJbnRlcmZhY2UiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQVQ5MSBTU0MgQVNvQyBJbnRlcmZhY2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdDkxL2F0OTEtaTJzLmggYi9zb3VuZC9zb2MvYXQ5MS9hdDkxLXNzYy5oCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIHNvdW5kL3NvYy9hdDkxL2F0OTEtaTJzLmgKcmVuYW1lIHRvIHNvdW5kL3NvYy9hdDkxL2F0OTEtc3NjLmgKaW5kZXggZjhhODc1Yi4uYjE4OGY5NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0OTEvYXQ5MS1pMnMuaAorKysgYi9zb3VuZC9zb2MvYXQ5MS9hdDkxLXNzYy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGF0OTEtaTJzLmggLSBBTFNBIEkyUyBpbnRlcmZhY2UgZm9yIHRoZSBBdG1lbCBBVDkxIFNvQworICogYXQ5MS1zc2MuaCAtIEFMU0EgU1NDIGludGVyZmFjZSBmb3IgdGhlIEF0bWVsIEFUOTEgU29DCiAgKgogICogQXV0aG9yOglGcmFuayBNYW5kYXJpbm8gPGZtYW5kYXJpbm9AZW5kcmVsaWEuY29tPgogICoJCUVuZHJlbGlhIFRlY2hub2xvZ2llcyBJbmMuCkBAIC0xMCwxOCArMTAsMTggQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpZm5kZWYgX0FUOTFfSTJTX0gKLSNkZWZpbmUgX0FUOTFfSTJTX0gKKyNpZm5kZWYgX0FUOTFfU1NDX0gKKyNkZWZpbmUgX0FUOTFfU1NDX0gKIAotLyogSTJTIHN5c3RlbSBjbG9jayBpZHMgKi8KKy8qIFNTQyBzeXN0ZW0gY2xvY2sgaWRzICovCiAjZGVmaW5lIEFUOTFfU1lTQ0xLX01DSwkJMCAvKiBTU0MgdXNlcyBBVDkxIE1DSyBhcyBzeXN0ZW0gY2xvY2sgKi8KIAotLyogSTJTIGRpdmlkZXIgaWRzICovCisvKiBTU0MgZGl2aWRlciBpZHMgKi8KICNkZWZpbmUgQVQ5MVNTQ19DTVJfRElWCQkwIC8qIE1DSyBkaXZpZGVyIGZvciBCQ0xLICovCiAjZGVmaW5lIEFUOTFTU0NfVENNUl9QRVJJT0QJMSAvKiBCQ0xLIGRpdmlkZXIgZm9yIHRyYW5zbWl0IEZTICovCiAjZGVmaW5lIEFUOTFTU0NfUkNNUl9QRVJJT0QJMiAvKiBCQ0xLIGRpdmlkZXIgZm9yIHJlY2VpdmUgRlMgKi8KIAotZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NwdV9kYWkgYXQ5MV9pMnNfZGFpW107CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY3B1X2RhaSBhdDkxX3NzY19kYWlbXTsKIAotI2VuZGlmIC8qIF9BVDkxX0kyU19IICovCisjZW5kaWYgLyogX0FUOTFfU1NDX0ggKi8KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0OTEvZXRpX2IxX3dtODczMS5jIGIvc291bmQvc29jL2F0OTEvZXRpX2IxX3dtODczMS5jCmluZGV4IDgxNzlkZjMuLjgyMGE2NzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdDkxL2V0aV9iMV93bTg3MzEuYworKysgYi9zb3VuZC9zb2MvYXQ5MS9ldGlfYjFfd204NzMxLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAogI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg3MzEuaCIKICNpbmNsdWRlICJhdDkxLXBjbS5oIgotI2luY2x1ZGUgImF0OTEtaTJzLmgiCisjaW5jbHVkZSAiYXQ5MS1zc2MuaCIKIAogI2lmIDAKICNkZWZpbmUJREJHKHguLi4pCXByaW50ayhLRVJOX0lORk8gImV0aV9iMV93bTg3MzE6ICIgeCkKQEAgLTI0OCwxNSArMjQ4LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBldGlfYjFfZGFpID0gewogCS5uYW1lID0gIldNODczMSIsCi0JLnN0cmVhbV9uYW1lID0gIldNODczMSIsCi0JLmNwdV9kYWkgPSAmYXQ5MV9pMnNfZGFpWzFdLAorCS5zdHJlYW1fbmFtZSA9ICJXTTg3MzEgUENNIiwKKwkuY3B1X2RhaSA9ICZhdDkxX3NzY19kYWlbMV0sCiAJLmNvZGVjX2RhaSA9ICZ3bTg3MzFfZGFpLAogCS5pbml0ID0gZXRpX2IxX3dtODczMV9pbml0LAogCS5vcHMgPSAmZXRpX2IxX29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19tYWNoaW5lIHNuZF9zb2NfbWFjaGluZV9ldGlfYjEgPSB7Ci0JLm5hbWUgPSAiRVRJX0IxIiwKKwkubmFtZSA9ICJFVElfQjFfV004NzMxIiwKIAkuZGFpX2xpbmsgPSAmZXRpX2IxX2RhaSwKIAkubnVtX2xpbmtzID0gMSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKaW5kZXggZWMyYTI3OC4uZTVmYjQzNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwpAQCAtMTAsNiArMTAsMTAgQEAKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gU05EX1NPQwogCitjb25maWcgU05EX1NPQ19XTTg3NTMKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gU05EX1NPQworCiBjb25maWcgU05EX1NPQ19XTTk3MTIKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gU05EX1NPQwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKaW5kZXggMzI0OWE2ZS4uZTM5YTc0NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCkBAIC0xLDkgKzEsMTEgQEAKIHNuZC1zb2MtYWM5Ny1vYmpzIDo9IGFjOTcubwogc25kLXNvYy13bTg3MzEtb2JqcyA6PSB3bTg3MzEubwogc25kLXNvYy13bTg3NTAtb2JqcyA6PSB3bTg3NTAubworc25kLXNvYy13bTg3NTMtb2JqcyA6PSB3bTg3NTMubwogc25kLXNvYy13bTk3MTItb2JqcyA6PSB3bTk3MTIubwogCiBvYmotJChDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDKQkrPSBzbmQtc29jLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NzMxKQkrPSBzbmQtc29jLXdtODczMS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg3NTApCSs9IHNuZC1zb2Mtd204NzUwLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODc1MykJKz0gc25kLXNvYy13bTg3NTMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzEyKQkrPSBzbmQtc29jLXdtOTcxMi5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FjOTcuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCmluZGV4IDU1YmM1NWUuLjBiOGE2ZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCkBAIC00Myw4ICs0Myw5IEBACiAjZGVmaW5lIFNURF9BQzk3X1JBVEVTIChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfFwKIAkJU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwKQogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZGFpIGFjOTdfZGFpID0geworc3RydWN0IHNuZF9zb2NfY29kZWNfZGFpIGFjOTdfZGFpID0gewogCS5uYW1lID0gIkFDOTcgSGlGaSIsCisJLnR5cGUgPSBTTkRfU09DX0RBSV9BQzk3LAogCS5wbGF5YmFjayA9IHsKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgUGxheWJhY2siLAogCQkuY2hhbm5lbHNfbWluID0gMSwKQEAgLTYwLDYgKzYxLDcgQEAKIAkub3BzID0gewogCQkucHJlcGFyZSA9IGFjOTdfcHJlcGFyZSx9LAogfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGFjOTdfZGFpKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBhYzk3X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCXVuc2lnbmVkIGludCByZWcpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FjOTcuaCBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5oCmluZGV4IDkzMGRkZmMuLjJiZjZkNjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5oCkBAIC0xNCw1ICsxNCw2IEBACiAjZGVmaW5lIF9fTElOVVhfU05EX1NPQ19BQzk3X0gKIAogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2FjOTc7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGFpIGFjOTdfZGFpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCmluZGV4IDcwNzNlOGUuLjI4Njg0ZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYwpAQCAtODA4LDcgKzgwOCw3IEBACiAJY29kZWMtPmRhaSA9ICZ3bTg3NTBfZGFpOwogCWNvZGVjLT5udW1fZGFpID0gMTsKIAljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBzaXplb2Yod204NzUwX3JlZyk7Ci0JY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod204NzUwX3JlZywgc2l6ZW9mKHdtODc1MF9yZWcpLCBHRlBfS1JFTkVMKTsKKwljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh3bTg3NTBfcmVnLCBzaXplb2Yod204NzUwX3JlZyksIEdGUF9LRVJORUwpOwogCWlmIChjb2RlYy0+cmVnX2NhY2hlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmNlZDkzCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwpAQCAtMCwwICsxLDE4MTEgQEAKKy8qCisgKiB3bTg3NTMuYyAgLS0gIFdNODc1MyBBTFNBIFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwMyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCisgKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogTm90ZXM6CisgKiAgVGhlIFdNODc1MyBpcyBhIGxvdyBwb3dlciwgaGlnaCBxdWFsaXR5IHN0ZXJlbyBjb2RlYyB3aXRoIGludGVncmF0ZWQgUENNCisgKiAgY29kZWMgZGVzaWduZWQgZm9yIHBvcnRhYmxlIGRpZ2l0YWwgdGVsZXBob255IGFwcGxpY2F0aW9ucy4KKyAqCisgKiBEdWFsIERBSTotCisgKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydCAyIERBSSBQQ00ncy4gVGhpcyBtYWtlcyB0aGUgZGVmYXVsdCBQQ00gYXZhaWxhYmxlIGZvcgorICogSGlGaSBhdWRpbyAoZS5nLiBNUDMsIG9nZykgcGxheWJhY2svY2FwdHVyZSBhbmQgdGhlIG90aGVyIFBDTSBhdmFpbGFibGUgZm9yCisgKiB2b2ljZS4KKyAqCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSB2b2ljZSBQQ00gY2FuIGJlIGNvbm5lY3RlZCBkaXJlY3RseSB0byBhIEJsdWV0b290aAorICogY29kZWMgb3IgR1NNIG1vZGVtIGFuZCB0aHVzIGNhbm5vdCBiZSByZWFkIG9yIHdyaXR0ZW4gdG8sIGFsdGhvdWdoIGl0IGlzCisgKiBhdmFpbGFibGUgdG8gYmUgY29uZmlndXJlZCB3aXRoIHNuZF9od19wYXJhbXMoKSwgZXRjIGFuZCBrY29udHJvbHMgaW4gdGhlCisgKiBub3JtYWwgYWxzYSBtYW5uZXIuCisgKgorICogRmFzdCBEQUkgc3dpdGNoaW5nOi0KKyAqCisgKiBUaGUgZHJpdmVyIGNhbiBub3cgZmFzdCBzd2l0Y2ggYmV0d2VlbiB0aGUgREFJIGNvbmZpZ3VyYXRpb25zIHZpYSBhCisgKiBhbiBhbHNhIGtjb250cm9sLiBUaGlzIGFsbG93cyB0aGUgUENNIHRvIHJlbWFpbiBvcGVuLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAid204NzUzLmgiCisKKyNkZWZpbmUgQVVESU9fTkFNRSAid204NzUzIgorI2RlZmluZSBXTTg3NTNfVkVSU0lPTiAiMC4xNiIKKworLyoKKyAqIERlYnVnCisgKi8KKworI2RlZmluZSBXTTg3NTNfREVCVUcgMAorCisjaWZkZWYgV004NzUzX0RFQlVHCisjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHIEFVRElPX05BTUUgIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNlbHNlCisjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKyNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fRVJSIEFVRElPX05BTUUgIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0lORk8gQVVESU9fTkFNRSAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fV0FSTklORyBBVURJT19OQU1FICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisKK3N0YXRpYyBpbnQgY2Fwc19jaGFyZ2UgPSAyMDAwOworbW9kdWxlX3BhcmFtKGNhcHNfY2hhcmdlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhjYXBzX2NoYXJnZSwgIldNODc1MyBjYXAgY2hhcmdlIHRpbWUgKG1zZWNzKSIpOworCitzdGF0aWMgdm9pZCB3bTg3NTNfc2V0X2RhaV9tb2RlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwl1bnNpZ25lZCBpbnQgbW9kZSk7CisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODc1M19wcml2IHsKKwl1bnNpZ25lZCBpbnQgc3lzY2xrOworCXVuc2lnbmVkIGludCBwY21jbGs7Cit9OworCisvKgorICogd204NzUzIHJlZ2lzdGVyIGNhY2hlCisgKiBXZSBjYW4ndCByZWFkIHRoZSBXTTg3NTMgcmVnaXN0ZXIgc3BhY2Ugd2hlbiB3ZQorICogYXJlIHVzaW5nIDIgd2lyZSBmb3IgZGV2aWNlIGNvbnRyb2wsIHNvIHdlIGNhY2hlIHRoZW0gaW5zdGVhZC4KKyAqLworc3RhdGljIGNvbnN0IHUxNiB3bTg3NTNfcmVnW10gPSB7CisJMHgwMDA4LCAweDAwMDAsIDB4MDAwYSwgMHgwMDBhLAorCTB4MDAzMywgMHgwMDAwLCAweDAwMDcsIDB4MDBmZiwKKwkweDAwZmYsIDB4MDAwZiwgMHgwMDBmLCAweDAwN2IsCisJMHgwMDAwLCAweDAwMzIsIDB4MDAwMCwgMHgwMGMzLAorCTB4MDBjMywgMHgwMGMwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDA1NSwKKwkweDAwMDUsIDB4MDA1MCwgMHgwMDU1LCAweDAwNTAsCisJMHgwMDU1LCAweDAwNTAsIDB4MDA1NSwgMHgwMDc5LAorCTB4MDA3OSwgMHgwMDc5LCAweDAwNzksIDB4MDA3OSwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDk3LCAweDAwOTcsIDB4MDAwMCwgMHgwMDA0LAorCTB4MDAwMCwgMHgwMDgzLCAweDAwMjQsIDB4MDFiYSwKKwkweDAwMDAsIDB4MDA4MywgMHgwMDI0LCAweDAxYmEsCisJMHgwMDAwLCAweDAwMDAKK307CisKKy8qCisgKiByZWFkIHdtODc1MyByZWdpc3RlciBjYWNoZQorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCXVuc2lnbmVkIGludCByZWcpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaWYgKHJlZyA8IDEgfHwgcmVnID4gKEFSUkFZX1NJWkUod204NzUzX3JlZykgKyAxKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBjYWNoZVtyZWcgLSAxXTsKK30KKworLyoKKyAqIHdyaXRlIHdtODc1MyByZWdpc3RlciBjYWNoZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgd204NzUzX3dyaXRlX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCWlmIChyZWcgPCAxIHx8IHJlZyA+IDB4M2YpCisJCXJldHVybjsKKwljYWNoZVtyZWcgLSAxXSA9IHZhbHVlOworfQorCisvKgorICogd3JpdGUgdG8gdGhlIFdNODc1MyByZWdpc3RlciBzcGFjZQorICovCitzdGF0aWMgaW50IHdtODc1M193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXU4IGRhdGFbMl07CisKKwkvKiBkYXRhIGlzCisJICogICBEMTUuLkQ5IFdNODc1MyByZWdpc3RlciBvZmZzZXQKKwkgKiAgIEQ4Li4uRDAgcmVnaXN0ZXIgZGF0YQorCSAqLworCWRhdGFbMF0gPSAocmVnIDw8IDEpIHwgKCh2YWx1ZSA+PiA4KSAmIDB4MDAwMSk7CisJZGF0YVsxXSA9IHZhbHVlICYgMHgwMGZmOworCisJd204NzUzX3dyaXRlX3JlZ19jYWNoZSAoY29kZWMsIHJlZywgdmFsdWUpOworCWlmIChjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMikgPT0gMikKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKK30KKworI2RlZmluZSB3bTg3NTNfcmVzZXQoYykgd204NzUzX3dyaXRlKGMsIFdNODc1M19SRVNFVCwgMCkKKworLyoKKyAqIFdNODc1MyBDb250cm9scworICovCitzdGF0aWMgY29uc3QgY2hhciAqd204NzUzX2Jhc2VbXSA9IHsiTGluZWFyIENvbnRyb2wiLCAiQWRhcHRpdmUgQm9vc3QifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NTNfYmFzZV9maWx0ZXJbXSA9CisJeyIxMzBIeiBAIDQ4a0h6IiwgIjIwMEh6IEAgNDhrSHoiLCAiMTAwSHogQCAxNmtIeiIsICI0MDBIeiBAIDQ4a0h6IiwKKwkiMTAwSHogQCA4a0h6IiwgIjIwMEh6IEAgOGtIeiJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODc1M190cmVibGVbXSA9IHsiOGtIeiIsICI0a0h6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204NzUzX2FsY19mdW5jW10gPSB7Ik9mZiIsICJSaWdodCIsICJMZWZ0IiwgIlN0ZXJlbyJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODc1M19uZ190eXBlW10gPSB7IkNvbnN0YW50IFBHQSBHYWluIiwgIk11dGUgQURDIE91dHB1dCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODc1M18zZF9mdW5jW10gPSB7IkNhcHR1cmUiLCAiUGxheWJhY2sifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NTNfM2RfdWNbXSA9IHsiMi4ya0h6IiwgIjEuNWtIeiJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODc1M18zZF9sY1tdID0geyIyMDBIeiIsICI1MDBIeiJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODc1M19kZWVtcFtdID0geyJOb25lIiwgIjMya0h6IiwgIjQ0LjFrSHoiLCAiNDhrSHoifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NTNfbW9ub19taXhbXSA9IHsiU3RlcmVvIiwgIkxlZnQiLCAiUmlnaHQiLCAiTW9ubyJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODc1M19kYWNfcGhhc2VbXSA9IHsiTm9uIEludmVydGVkIiwgIkludmVydGVkIn07CitzdGF0aWMgY29uc3QgY2hhciAqd204NzUzX2xpbmVfbWl4W10gPSB7IkxpbmUgMSArIDIiLCAiTGluZSAxIC0gMiIsCisJIkxpbmUgMSIsICJMaW5lIDIifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NTNfbW9ub19tdXhbXSA9IHsiTGluZSBNaXgiLCAiUnggTWl4In07CitzdGF0aWMgY29uc3QgY2hhciAqd204NzUzX3JpZ2h0X211eFtdID0geyJMaW5lIDIiLCAiUnggTWl4In07CitzdGF0aWMgY29uc3QgY2hhciAqd204NzUzX2xlZnRfbXV4W10gPSB7IkxpbmUgMSIsICJSeCBNaXgifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NTNfcnhtc2VsW10gPSB7IlJYUCAtIFJYTiIsICJSWFAgKyBSWE4iLCAiUlhQIiwgIlJYTiJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODc1M19zaWRldG9uZV9tdXhbXSA9IHsiTGVmdCBQR0EiLCAiTWljIDEiLCAiTWljIDIiLAorCSJSaWdodCBQR0EifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NTNfbW9ubzJfc3JjW10gPSB7IkludmVydGVkIE1vbm8gMSIsICJMZWZ0IiwgIlJpZ2h0IiwKKwkiTGVmdCArIFJpZ2h0In07CitzdGF0aWMgY29uc3QgY2hhciAqd204NzUzX291dDNbXSA9IHsiVlJFRiIsICJST1VUMiIsICJMZWZ0ICsgUmlnaHQifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NTNfb3V0NFtdID0geyJWUkVGIiwgIkNhcHR1cmUgU1QiLCAiTE9VVDIifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NTNfcmFkY3NlbFtdID0geyJQR0EiLCAiTGluZSBvciBSWFAtUlhOIiwgIlNpZGV0b25lIn07CitzdGF0aWMgY29uc3QgY2hhciAqd204NzUzX2xhZGNzZWxbXSA9IHsiUEdBIiwgIkxpbmUgb3IgUlhQLVJYTiIsICJMaW5lIn07CitzdGF0aWMgY29uc3QgY2hhciAqd204NzUzX21vbm9fYWRjW10gPSB7IlN0ZXJlbyIsICJBbmFsb2d1ZSBNaXggTGVmdCIsCisJIkFuYWxvZ3VlIE1peCBSaWdodCIsICJEaWdpdGFsIE1vbm8gTWl4In07CitzdGF0aWMgY29uc3QgY2hhciAqd204NzUzX2FkY19ocFtdID0geyIzLjRIeiBAIDQ4a0h6IiwgIjgySHogQCAxNmsiLAorCSI4Mkh6IEAgOGtIeiIsICIxNzBIeiBAIDhrSHoifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NTNfYWRjX2ZpbHRlcltdID0geyJIaUZpIiwgIlZvaWNlIn07CitzdGF0aWMgY29uc3QgY2hhciAqd204NzUzX21pY19zZWxbXSA9IHsiTWljIDEiLCAiTWljIDIiLCAiTWljIDMifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NTNfZGFpX21vZGVbXSA9IHsiREFJIDAiLCAiREFJIDEiLCAiREFJIDIiLCAiREFJIDMifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NTNfZGF0X3NlbFtdID0geyJTdGVyZW8iLCAiTGVmdCBBREMiLCAiUmlnaHQgQURDIiwKKwkiQ2hhbm5lbCBTd2FwIn07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NzUzX2VudW1bXSA9IHsKK1NPQ19FTlVNX1NJTkdMRShXTTg3NTNfQkFTUywgNywgMiwgd204NzUzX2Jhc2UpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19CQVNTLCA0LCA2LCB3bTg3NTNfYmFzZV9maWx0ZXIpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19UUkVCTEUsIDYsIDIsIHdtODc1M190cmVibGUpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19BTEMxLCA3LCA0LCB3bTg3NTNfYWxjX2Z1bmMpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19OR0FURSwgMSwgMiwgd204NzUzX25nX3R5cGUpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M18zRCwgNywgMiwgd204NzUzXzNkX2Z1bmMpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M18zRCwgNiwgMiwgd204NzUzXzNkX3VjKSwKK1NPQ19FTlVNX1NJTkdMRShXTTg3NTNfM0QsIDUsIDIsIHdtODc1M18zZF9sYyksCitTT0NfRU5VTV9TSU5HTEUoV004NzUzX0RBQywgMSwgNCwgd204NzUzX2RlZW1wKSwKK1NPQ19FTlVNX1NJTkdMRShXTTg3NTNfREFDLCA0LCA0LCB3bTg3NTNfbW9ub19taXgpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19EQUMsIDYsIDIsIHdtODc1M19kYWNfcGhhc2UpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19JTkNUTDEsIDMsIDQsIHdtODc1M19saW5lX21peCksCitTT0NfRU5VTV9TSU5HTEUoV004NzUzX0lOQ1RMMSwgMiwgMiwgd204NzUzX21vbm9fbXV4KSwKK1NPQ19FTlVNX1NJTkdMRShXTTg3NTNfSU5DVEwxLCAxLCAyLCB3bTg3NTNfcmlnaHRfbXV4KSwKK1NPQ19FTlVNX1NJTkdMRShXTTg3NTNfSU5DVEwxLCAwLCAyLCB3bTg3NTNfbGVmdF9tdXgpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19JTkNUTDIsIDYsIDQsIHdtODc1M19yeG1zZWwpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19JTkNUTDIsIDQsIDQsIHdtODc1M19zaWRldG9uZV9tdXgpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19PVVRDVEwsIDcsIDQsIHdtODc1M19tb25vMl9zcmMpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19PVVRDVEwsIDAsIDMsIHdtODc1M19vdXQzKSwKK1NPQ19FTlVNX1NJTkdMRShXTTg3NTNfQURDVEwyLCA3LCAzLCB3bTg3NTNfb3V0NCksCitTT0NfRU5VTV9TSU5HTEUoV004NzUzX0FEQ0lOLCAyLCAzLCB3bTg3NTNfcmFkY3NlbCksCitTT0NfRU5VTV9TSU5HTEUoV004NzUzX0FEQ0lOLCAwLCAzLCB3bTg3NTNfbGFkY3NlbCksCitTT0NfRU5VTV9TSU5HTEUoV004NzUzX0FEQ0lOLCA0LCA0LCB3bTg3NTNfbW9ub19hZGMpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19BREMsIDIsIDQsIHdtODc1M19hZGNfaHApLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19BREMsIDQsIDIsIHdtODc1M19hZGNfZmlsdGVyKSwKK1NPQ19FTlVNX1NJTkdMRShXTTg3NTNfTUlDQklBUywgNiwgMywgd204NzUzX21pY19zZWwpLAorU09DX0VOVU1fU0lOR0xFKFdNODc1M19JT0NUTCwgMiwgNCwgd204NzUzX2RhaV9tb2RlKSwKK1NPQ19FTlVNX1NJTkdMRShXTTg3NTNfQURDLCA3LCA0LCB3bTg3NTNfZGF0X3NlbCksCit9OworCisKK3N0YXRpYyBpbnQgd204NzUzX2dldF9kYWkoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gIHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgbW9kZSA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0lPQ1RMKTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gKG1vZGUgJiAweGMpID4+IDI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NzUzX3NldF9kYWkoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gIHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgbW9kZSA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0lPQ1RMKTsKKworCWlmICgoKG1vZGUgJjB4YykgPj4gMikgPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCisJCXJldHVybiAwOworCisJbW9kZSAmPSAweGZmZjM7CisJbW9kZSB8PSAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPDwgMik7CisKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19JT0NUTCwgbW9kZSk7CisJd204NzUzX3NldF9kYWlfbW9kZShjb2RlYywgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX3NuZF9jb250cm9sc1tdID0geworU09DX0RPVUJMRV9SKCJQQ00gVm9sdW1lIiwgV004NzUzX0xEQUMsIFdNODc1M19SREFDLCAwLCAyNTUsIDApLAorCitTT0NfRE9VQkxFX1IoIkFEQyBDYXB0dXJlIFZvbHVtZSIsIFdNODc1M19MQURDLCBXTTg3NTNfUkFEQywgMCwgMjU1LCAwKSwKKworU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgV004NzUzX0xPVVQxViwgV004NzUzX1JPVVQxViwgMCwgMTI3LCAwKSwKK1NPQ19ET1VCTEVfUigiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCBXTTg3NTNfTE9VVDJWLCBXTTg3NTNfUk9VVDJWLCAwLCAxMjcsIDApLAorCitTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIFdNODc1M19NT1VUViwgMCwgMTI3LCAwKSwKKworU09DX0RPVUJMRV9SKCJCeXBhc3MgUGxheWJhY2sgVm9sdW1lIiwgV004NzUzX0xPVVRNMSwgV004NzUzX1JPVVRNMSwgNCwgNywgMSksCitTT0NfRE9VQkxFX1IoIlNpZGV0b25lIFBsYXliYWNrIFZvbHVtZSIsIFdNODc1M19MT1VUTTIsIFdNODc1M19ST1VUTTIsIDQsIDcsIDEpLAorU09DX0RPVUJMRV9SKCJWb2ljZSBQbGF5YmFjayBWb2x1bWUiLCBXTTg3NTNfTE9VVE0yLCBXTTg3NTNfUk9VVE0yLCAwLCA3LCAxKSwKKworU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgUGxheWJhY2sgWkMgU3dpdGNoIiwgV004NzUzX0xPVVQxViwgV004NzUzX1JPVVQxViwgNywgMSwgMCksCitTT0NfRE9VQkxFX1IoIlNwZWFrZXIgUGxheWJhY2sgWkMgU3dpdGNoIiwgV004NzUzX0xPVVQyViwgV004NzUzX1JPVVQyViwgNywgMSwgMCksCisKK1NPQ19TSU5HTEUoIk1vbm8gQnlwYXNzIFBsYXliYWNrIFZvbHVtZSIsIFdNODc1M19NT1VUTTEsIDQsIDcsIDEpLAorU09DX1NJTkdMRSgiTW9ubyBTaWRldG9uZSBQbGF5YmFjayBWb2x1bWUiLCBXTTg3NTNfTU9VVE0yLCA0LCA3LCAxKSwKK1NPQ19TSU5HTEUoIk1vbm8gVm9pY2UgUGxheWJhY2sgVm9sdW1lIiwgV004NzUzX01PVVRNMiwgNCwgNywgMSksCitTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFpDIFN3aXRjaCIsIFdNODc1M19NT1VUViwgNywgMSwgMCksCisKK1NPQ19FTlVNKCJCYXNzIEJvb3N0Iiwgd204NzUzX2VudW1bMF0pLAorU09DX0VOVU0oIkJhc3MgRmlsdGVyIiwgd204NzUzX2VudW1bMV0pLAorU09DX1NJTkdMRSgiQmFzcyBWb2x1bWUiLCBXTTg3NTNfQkFTUywgMCwgMTUsIDEpLAorCitTT0NfU0lOR0xFKCJUcmVibGUgVm9sdW1lIiwgV004NzUzX1RSRUJMRSwgMCwgMTUsIDEpLAorU09DX0VOVU0oIlRyZWJsZSBDdXQtb2ZmIiwgd204NzUzX2VudW1bMl0pLAorCitTT0NfRE9VQkxFKCJTaWRldG9uZSBDYXB0dXJlIFZvbHVtZSIsIFdNODc1M19SRUNNSVgxLCAwLCA0LCA3LCAxKSwKK1NPQ19TSU5HTEUoIlZvaWNlIFNpZGV0b25lIENhcHR1cmUgVm9sdW1lIiwgV004NzUzX1JFQ01JWDIsIDAsIDcsIDEpLAorCitTT0NfRE9VQkxFX1IoIkNhcHR1cmUgVm9sdW1lIiwgV004NzUzX0xJTlZPTCwgV004NzUzX1JJTlZPTCwgMCwgNjMsIDApLAorU09DX0RPVUJMRV9SKCJDYXB0dXJlIFpDIFN3aXRjaCIsIFdNODc1M19MSU5WT0wsIFdNODc1M19SSU5WT0wsIDYsIDEsIDApLAorU09DX0RPVUJMRV9SKCJDYXB0dXJlIFN3aXRjaCIsIFdNODc1M19MSU5WT0wsIFdNODc1M19SSU5WT0wsIDcsIDEsIDEpLAorCitTT0NfRU5VTSgiQ2FwdHVyZSBGaWx0ZXIgU2VsZWN0Iiwgd204NzUzX2VudW1bMjNdKSwKK1NPQ19FTlVNKCJDYXB0dXJlIEZpbHRlciBDdXQtb2ZmIiwgd204NzUzX2VudW1bMjRdKSwKK1NPQ19TSU5HTEUoIkNhcHR1cmUgRmlsdGVyIFN3aXRjaCIsIFdNODc1M19BREMsIDAsIDEsIDEpLAorCitTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgV004NzUzX0FMQzEsIDAsIDcsIDApLAorU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgTWF4IFZvbHVtZSIsIFdNODc1M19BTEMxLCA0LCA3LCAwKSwKK1NPQ19FTlVNKCJBTEMgQ2FwdHVyZSBGdW5jdGlvbiIsIHdtODc1M19lbnVtWzNdKSwKK1NPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIFpDIFN3aXRjaCIsIFdNODc1M19BTEMyLCA4LCAxLCAwKSwKK1NPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIEhvbGQgVGltZSIsIFdNODc1M19BTEMyLCAwLCAxNSwgMSksCitTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgV004NzUzX0FMQzMsIDQsIDE1LCAxKSwKK1NPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgV004NzUzX0FMQzMsIDAsIDE1LCAwKSwKK1NPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIE5HIFRocmVzaG9sZCIsIFdNODc1M19OR0FURSwgMywgMzEsIDApLAorU09DX0VOVU0oIkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB3bTg3NTNfZW51bVs0XSksCitTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCBXTTg3NTNfTkdBVEUsIDAsIDEsIDApLAorCitTT0NfRU5VTSgiM0QgRnVuY3Rpb24iLCB3bTg3NTNfZW51bVs1XSksCitTT0NfRU5VTSgiM0QgVXBwZXIgQ3V0LW9mZiIsIHdtODc1M19lbnVtWzZdKSwKK1NPQ19FTlVNKCIzRCBMb3dlciBDdXQtb2ZmIiwgd204NzUzX2VudW1bN10pLAorU09DX1NJTkdMRSgiM0QgVm9sdW1lIiwgV004NzUzXzNELCAxLCAxNSwgMCksCitTT0NfU0lOR0xFKCIzRCBTd2l0Y2giLCBXTTg3NTNfM0QsIDAsIDEsIDApLAorCitTT0NfU0lOR0xFKCJDYXB0dXJlIDZkQiBBdHRlbnVhdGUiLCBXTTg3NTNfQURDVEwxLCAyLCAxLCAwKSwKK1NPQ19TSU5HTEUoIlBsYXliYWNrIDZkQiBBdHRlbnVhdGUiLCBXTTg3NTNfQURDVEwxLCAxLCAxLCAwKSwKKworU09DX0VOVU0oIkRlLWVtcGhhc2lzIiwgd204NzUzX2VudW1bOF0pLAorU09DX0VOVU0oIlBsYXliYWNrIE1vbm8gTWl4Iiwgd204NzUzX2VudW1bOV0pLAorU09DX0VOVU0oIlBsYXliYWNrIFBoYXNlIiwgd204NzUzX2VudW1bMTBdKSwKKworU09DX1NJTkdMRSgiTWljMiBDYXB0dXJlIFZvbHVtZSIsIFdNODc1M19JTkNUTDEsIDcsIDMsIDApLAorU09DX1NJTkdMRSgiTWljMSBDYXB0dXJlIFZvbHVtZSIsIFdNODc1M19JTkNUTDEsIDUsIDMsIDApLAorCitTT0NfRU5VTV9FWFQoIkRBSSBNb2RlIiwgd204NzUzX2VudW1bMjZdLCB3bTg3NTNfZ2V0X2RhaSwgd204NzUzX3NldF9kYWkpLAorCitTT0NfRU5VTSgiQURDIERhdGEgU2VsZWN0Iiwgd204NzUzX2VudW1bMjddKSwKK307CisKKy8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLworc3RhdGljIGludCB3bTg3NTNfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgZXJyLCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUzX3NuZF9jb250cm9scyk7IGkrKykgeworCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKKwkJCQlzbmRfc29jX2NuZXcoJndtODc1M19zbmRfY29udHJvbHNbaV0sY29kZWMsIE5VTEwpKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIF9EQVBNXyBDb250cm9scworICovCisKKy8qIExlZnQgTWl4ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg3NTNfbGVmdF9taXhlcl9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJWb2ljZSBQbGF5YmFjayBTd2l0Y2giLCBXTTg3NTNfTE9VVE0yLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU2lkZXRvbmUgUGxheWJhY2sgU3dpdGNoIiwgV004NzUzX0xPVVRNMiwgNywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxlZnQgUGxheWJhY2sgU3dpdGNoIiwgV004NzUzX0xPVVRNMSwgOCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkJ5cGFzcyBQbGF5YmFjayBTd2l0Y2giLCBXTTg3NTNfTE9VVE0xLCA3LCAxLCAwKSwKK307CisKKy8qIFJpZ2h0IG1peGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX3JpZ2h0X21peGVyX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlZvaWNlIFBsYXliYWNrIFN3aXRjaCIsIFdNODc1M19ST1VUTTIsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJTaWRldG9uZSBQbGF5YmFjayBTd2l0Y2giLCBXTTg3NTNfUk9VVE0yLCA3LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUmlnaHQgUGxheWJhY2sgU3dpdGNoIiwgV004NzUzX1JPVVRNMSwgOCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkJ5cGFzcyBQbGF5YmFjayBTd2l0Y2giLCBXTTg3NTNfUk9VVE0xLCA3LCAxLCAwKSwKK307CisKKy8qIE1vbm8gbWl4ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg3NTNfbW9ub19taXhlcl9jb250cm9sc1tdID0geworU09DX0RBUE1fU0lOR0xFKCJMZWZ0IFBsYXliYWNrIFN3aXRjaCIsIFdNODc1M19NT1VUTTEsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSaWdodCBQbGF5YmFjayBTd2l0Y2giLCBXTTg3NTNfTU9VVE0yLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiVm9pY2UgUGxheWJhY2sgU3dpdGNoIiwgV004NzUzX01PVVRNMiwgMywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNpZGV0b25lIFBsYXliYWNrIFN3aXRjaCIsIFdNODc1M19NT1VUTTIsIDcsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJCeXBhc3MgUGxheWJhY2sgU3dpdGNoIiwgV004NzUzX01PVVRNMSwgNywgMSwgMCksCit9OworCisvKiBNb25vIDIgTXV4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX21vbm8yX2NvbnRyb2xzID0KK1NPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd204NzUzX2VudW1bMTddKTsKKworLyogT3V0IDMgTXV4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX291dDNfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTg3NTNfZW51bVsxOF0pOworCisvKiBPdXQgNCBNdXggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg3NTNfb3V0NF9jb250cm9scyA9CitTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtODc1M19lbnVtWzE5XSk7CisKKy8qIEFEQyBNb25vIE1peCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODc1M19hZGNfbW9ub19jb250cm9scyA9CitTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtODc1M19lbnVtWzIyXSk7CisKKy8qIFJlY29yZCBtaXhlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODc1M19yZWNvcmRfbWl4ZXJfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiVm9pY2UgQ2FwdHVyZSBTd2l0Y2giLCBXTTg3NTNfUkVDTUlYMiwgMywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxlZnQgQ2FwdHVyZSBTd2l0Y2giLCBXTTg3NTNfUkVDTUlYMSwgMywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IENhcHR1cmUgU3dpdGNoIiwgV004NzUzX1JFQ01JWDEsIDcsIDEsIDApLAorfTsKKworLyogTGVmdCBBREMgbXV4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX2FkY19sZWZ0X2NvbnRyb2xzID0KK1NPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd204NzUzX2VudW1bMjFdKTsKKworLyogUmlnaHQgQURDIG11eCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODc1M19hZGNfcmlnaHRfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTg3NTNfZW51bVsyMF0pOworCisvKiBNSUMgbXV4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX21pY19tdXhfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTg3NTNfZW51bVsxNl0pOworCisvKiBBTEMgbWl4ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg3NTNfYWxjX21peGVyX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLCBXTTg3NTNfSU5DVEwyLCAzLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTWljMiBDYXB0dXJlIFN3aXRjaCIsIFdNODc1M19JTkNUTDIsIDIsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJNaWMxIENhcHR1cmUgU3dpdGNoIiwgV004NzUzX0lOQ1RMMiwgMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJ4IENhcHR1cmUgU3dpdGNoIiwgV004NzUzX0lOQ1RMMiwgMCwgMSwgMCksCit9OworCisvKiBMZWZ0IExpbmUgbXV4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX2xpbmVfbGVmdF9jb250cm9scyA9CitTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtODc1M19lbnVtWzE0XSk7CisKKy8qIFJpZ2h0IExpbmUgbXV4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX2xpbmVfcmlnaHRfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTg3NTNfZW51bVsxM10pOworCisvKiBNb25vIExpbmUgbXV4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX2xpbmVfbW9ub19jb250cm9scyA9CitTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtODc1M19lbnVtWzEyXSk7CisKKy8qIExpbmUgbXV4IGFuZCBtaXhlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODc1M19saW5lX211eF9taXhfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTg3NTNfZW51bVsxMV0pOworCisvKiBSeCBtdXggYW5kIG1peGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX3J4X211eF9taXhfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiUm91dGUiLCB3bTg3NTNfZW51bVsxNV0pOworCisvKiBNaWMgU2VsZWN0b3IgTXV4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204NzUzX21pY19zZWxfbXV4X2NvbnRyb2xzID0KK1NPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd204NzUzX2VudW1bMjVdKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODc1M19kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgQmlhcyIsIFdNODc1M19QV1IxLCA1LCAwKSwKK1NORF9TT0NfREFQTV9NSVhFUigiTGVmdCBNaXhlciIsIFdNODc1M19QV1I0LCAwLCAwLAorCSZ3bTg3NTNfbGVmdF9taXhlcl9jb250cm9sc1swXSwgQVJSQVlfU0laRSh3bTg3NTNfbGVmdF9taXhlcl9jb250cm9scykpLAorU05EX1NPQ19EQVBNX1BHQSgiTGVmdCBPdXQgMSIsIFdNODc1M19QV1IzLCA4LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkxlZnQgT3V0IDIiLCBXTTg3NTNfUFdSMywgNiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fREFDKCJMZWZ0IERBQyIsICJMZWZ0IEhpRmkgUGxheWJhY2siLCBXTTg3NTNfUFdSMSwgMywgMCksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUMSIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTE9VVDIiKSwKK1NORF9TT0NfREFQTV9NSVhFUigiUmlnaHQgTWl4ZXIiLCBXTTg3NTNfUFdSNCwgMSwgMCwKKwkmd204NzUzX3JpZ2h0X21peGVyX2NvbnRyb2xzWzBdLCBBUlJBWV9TSVpFKHdtODc1M19yaWdodF9taXhlcl9jb250cm9scykpLAorU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgT3V0IDEiLCBXTTg3NTNfUFdSMywgNywgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBPdXQgMiIsIFdNODc1M19QV1IzLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIlJpZ2h0IERBQyIsICJSaWdodCBIaUZpIFBsYXliYWNrIiwgV004NzUzX1BXUjEsIDIsIDApLAorU05EX1NPQ19EQVBNX09VVFBVVCgiUk9VVDEiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlJPVVQyIiksCitTTkRfU09DX0RBUE1fTUlYRVIoIk1vbm8gTWl4ZXIiLCBXTTg3NTNfUFdSNCwgMiwgMCwKKwkmd204NzUzX21vbm9fbWl4ZXJfY29udHJvbHNbMF0sIEFSUkFZX1NJWkUod204NzUzX21vbm9fbWl4ZXJfY29udHJvbHMpKSwKK1NORF9TT0NfREFQTV9QR0EoIk1vbm8gT3V0IDEiLCBXTTg3NTNfUFdSMywgMiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJNb25vIE91dCAyIiwgV004NzUzX1BXUjMsIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX0RBQygiVm9pY2UgREFDIiwgIlZvaWNlIFBsYXliYWNrIiwgV004NzUzX1BXUjEsIDQsIDApLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTU9OTzEiKSwKK1NORF9TT0NfREFQTV9NVVgoIk1vbm8gMiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZ3bTg3NTNfbW9ubzJfY29udHJvbHMpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTU9OTzIiKSwKK1NORF9TT0NfREFQTV9NSVhFUigiT3V0MyBMZWZ0ICsgUmlnaHQiLCAtMSwgMCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fTVVYKCJPdXQzIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJndtODc1M19vdXQzX2NvbnRyb2xzKSwKK1NORF9TT0NfREFQTV9QR0EoIk91dCAzIiwgV004NzUzX1BXUjMsIDQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX09VVFBVVCgiT1VUMyIpLAorU05EX1NPQ19EQVBNX01VWCgiT3V0NCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZ3bTg3NTNfb3V0NF9jb250cm9scyksCitTTkRfU09DX0RBUE1fUEdBKCJPdXQgNCIsIFdNODc1M19QV1IzLCAzLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIk9VVDQiKSwKK1NORF9TT0NfREFQTV9NSVhFUigiUGxheWJhY2sgTWl4ZXIiLCBXTTg3NTNfUFdSNCwgMywgMCwKKwkmd204NzUzX3JlY29yZF9taXhlcl9jb250cm9sc1swXSwKKwlBUlJBWV9TSVpFKHdtODc1M19yZWNvcmRfbWl4ZXJfY29udHJvbHMpKSwKK1NORF9TT0NfREFQTV9BREMoIkxlZnQgQURDIiwgIkxlZnQgQ2FwdHVyZSIsIFdNODc1M19QV1IyLCAzLCAwKSwKK1NORF9TT0NfREFQTV9BREMoIlJpZ2h0IEFEQyIsICJSaWdodCBDYXB0dXJlIiwgV004NzUzX1BXUjIsIDIsIDApLAorU05EX1NPQ19EQVBNX01VWCgiQ2FwdHVyZSBMZWZ0IE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCSZ3bTg3NTNfYWRjX21vbm9fY29udHJvbHMpLAorU05EX1NPQ19EQVBNX01VWCgiQ2FwdHVyZSBSaWdodCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkmd204NzUzX2FkY19tb25vX2NvbnRyb2xzKSwKK1NORF9TT0NfREFQTV9NVVgoIkNhcHR1cmUgTGVmdCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJJndtODc1M19hZGNfbGVmdF9jb250cm9scyksCitTTkRfU09DX0RBUE1fTVVYKCJDYXB0dXJlIFJpZ2h0IE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkmd204NzUzX2FkY19yaWdodF9jb250cm9scyksCitTTkRfU09DX0RBUE1fTVVYKCJNaWMgU2lkZXRvbmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCSZ3bTg3NTNfbWljX211eF9jb250cm9scyksCitTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IENhcHR1cmUgVm9sdW1lIiwgV004NzUzX1BXUjIsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgQ2FwdHVyZSBWb2x1bWUiLCBXTTg3NTNfUFdSMiwgNCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fTUlYRVIoIkFMQyBNaXhlciIsIFdNODc1M19QV1IyLCA2LCAwLAorCSZ3bTg3NTNfYWxjX21peGVyX2NvbnRyb2xzWzBdLCBBUlJBWV9TSVpFKHdtODc1M19hbGNfbWl4ZXJfY29udHJvbHMpKSwKK1NORF9TT0NfREFQTV9NVVgoIkxpbmUgTGVmdCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJJndtODc1M19saW5lX2xlZnRfY29udHJvbHMpLAorU05EX1NPQ19EQVBNX01VWCgiTGluZSBSaWdodCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJJndtODc1M19saW5lX3JpZ2h0X2NvbnRyb2xzKSwKK1NORF9TT0NfREFQTV9NVVgoIkxpbmUgTW9ubyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJJndtODc1M19saW5lX21vbm9fY29udHJvbHMpLAorU05EX1NPQ19EQVBNX01VWCgiTGluZSBNaXhlciIsIFdNODc1M19QV1IyLCAwLCAwLAorCSZ3bTg3NTNfbGluZV9tdXhfbWl4X2NvbnRyb2xzKSwKK1NORF9TT0NfREFQTV9NVVgoIlJ4IE1peGVyIiwgV004NzUzX1BXUjIsIDEsIDAsCisJJndtODc1M19yeF9tdXhfbWl4X2NvbnRyb2xzKSwKK1NORF9TT0NfREFQTV9QR0EoIk1pYyAxIFZvbHVtZSIsIFdNODc1M19QV1IyLCA4LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIk1pYyAyIFZvbHVtZSIsIFdNODc1M19QV1IyLCA3LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9NVVgoIk1pYyBTZWxlY3Rpb24gTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCSZ3bTg3NTNfbWljX3NlbF9tdXhfY29udHJvbHMpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5FMSIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5FMiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJSWFAiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiUlhOIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkFDSU4iKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkFDT1AiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTUlDMU4iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTUlDMSIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMyTiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMyIiksCitTTkRfU09DX0RBUE1fVk1JRCgiVlJFRiIpLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmF1ZGlvX21hcFtdWzNdID0geworCS8qIGxlZnQgbWl4ZXIgKi8KKwl7IkxlZnQgTWl4ZXIiLCAiTGVmdCBQbGF5YmFjayBTd2l0Y2giLCAiTGVmdCBEQUMifSwKKwl7IkxlZnQgTWl4ZXIiLCAiVm9pY2UgUGxheWJhY2sgU3dpdGNoIiwgIlZvaWNlIERBQyJ9LAorCXsiTGVmdCBNaXhlciIsICJTaWRldG9uZSBQbGF5YmFjayBTd2l0Y2giLCAiTWljIFNpZGV0b25lIE11eCJ9LAorCXsiTGVmdCBNaXhlciIsICJCeXBhc3MgUGxheWJhY2sgU3dpdGNoIiwgIkxpbmUgTGVmdCBNdXgifSwKKworCS8qIHJpZ2h0IG1peGVyICovCisJeyJSaWdodCBNaXhlciIsICJSaWdodCBQbGF5YmFjayBTd2l0Y2giLCAiUmlnaHQgREFDIn0sCisJeyJSaWdodCBNaXhlciIsICJWb2ljZSBQbGF5YmFjayBTd2l0Y2giLCAiVm9pY2UgREFDIn0sCisJeyJSaWdodCBNaXhlciIsICJTaWRldG9uZSBQbGF5YmFjayBTd2l0Y2giLCAiTWljIFNpZGV0b25lIE11eCJ9LAorCXsiUmlnaHQgTWl4ZXIiLCAiQnlwYXNzIFBsYXliYWNrIFN3aXRjaCIsICJMaW5lIFJpZ2h0IE11eCJ9LAorCisJLyogbW9ubyBtaXhlciAqLworCXsiTW9ubyBNaXhlciIsICJWb2ljZSBQbGF5YmFjayBTd2l0Y2giLCAiVm9pY2UgREFDIn0sCisJeyJNb25vIE1peGVyIiwgIkxlZnQgUGxheWJhY2sgU3dpdGNoIiwgIkxlZnQgREFDIn0sCisJeyJNb25vIE1peGVyIiwgIlJpZ2h0IFBsYXliYWNrIFN3aXRjaCIsICJSaWdodCBEQUMifSwKKwl7Ik1vbm8gTWl4ZXIiLCAiU2lkZXRvbmUgUGxheWJhY2sgU3dpdGNoIiwgIk1pYyBTaWRldG9uZSBNdXgifSwKKwl7Ik1vbm8gTWl4ZXIiLCAiQnlwYXNzIFBsYXliYWNrIFN3aXRjaCIsICJMaW5lIE1vbm8gTXV4In0sCisKKwkvKiBsZWZ0IG91dCAqLworCXsiTGVmdCBPdXQgMSIsIE5VTEwsICJMZWZ0IE1peGVyIn0sCisJeyJMZWZ0IE91dCAyIiwgTlVMTCwgIkxlZnQgTWl4ZXIifSwKKwl7IkxPVVQxIiwgTlVMTCwgIkxlZnQgT3V0IDEifSwKKwl7IkxPVVQyIiwgTlVMTCwgIkxlZnQgT3V0IDIifSwKKworCS8qIHJpZ2h0IG91dCAqLworCXsiUmlnaHQgT3V0IDEiLCBOVUxMLCAiUmlnaHQgTWl4ZXIifSwKKwl7IlJpZ2h0IE91dCAyIiwgTlVMTCwgIlJpZ2h0IE1peGVyIn0sCisJeyJST1VUMSIsIE5VTEwsICJSaWdodCBPdXQgMSJ9LAorCXsiUk9VVDIiLCBOVUxMLCAiUmlnaHQgT3V0IDIifSwKKworCS8qIG1vbm8gMSBvdXQgKi8KKwl7Ik1vbm8gT3V0IDEiLCBOVUxMLCAiTW9ubyBNaXhlciJ9LAorCXsiTU9OTzEiLCBOVUxMLCAiTW9ubyBPdXQgMSJ9LAorCisJLyogbW9ubyAyIG91dCAqLworCXsiTW9ubyAyIE11eCIsICJMZWZ0ICsgUmlnaHQiLCAiT3V0MyBMZWZ0ICsgUmlnaHQifSwKKwl7Ik1vbm8gMiBNdXgiLCAiSW52ZXJ0ZWQgTW9ubyAxIiwgIk1PTk8xIn0sCisJeyJNb25vIDIgTXV4IiwgIkxlZnQiLCAiTGVmdCBNaXhlciJ9LAorCXsiTW9ubyAyIE11eCIsICJSaWdodCIsICJSaWdodCBNaXhlciJ9LAorCXsiTW9ubyBPdXQgMiIsIE5VTEwsICJNb25vIDIgTXV4In0sCisJeyJNT05PMiIsIE5VTEwsICJNb25vIE91dCAyIn0sCisKKwkvKiBvdXQgMyAqLworCXsiT3V0MyBMZWZ0ICsgUmlnaHQiLCBOVUxMLCAiTGVmdCBNaXhlciJ9LAorCXsiT3V0MyBMZWZ0ICsgUmlnaHQiLCBOVUxMLCAiUmlnaHQgTWl4ZXIifSwKKwl7Ik91dDMgTXV4IiwgIlZSRUYiLCAiVlJFRiJ9LAorCXsiT3V0MyBNdXgiLCAiTGVmdCArIFJpZ2h0IiwgIk91dDMgTGVmdCArIFJpZ2h0In0sCisJeyJPdXQzIE11eCIsICJST1VUMiIsICJST1VUMiJ9LAorCXsiT3V0IDMiLCBOVUxMLCAiT3V0MyBNdXgifSwKKwl7Ik9VVDMiLCBOVUxMLCAiT3V0IDMifSwKKworCS8qIG91dCA0ICovCisJeyJPdXQ0IE11eCIsICJWUkVGIiwgIlZSRUYifSwKKwl7Ik91dDQgTXV4IiwgIkNhcHR1cmUgU1QiLCAiQ2FwdHVyZSBTVCBNaXhlciJ9LAorCXsiT3V0NCBNdXgiLCAiTE9VVDIiLCAiTE9VVDIifSwKKwl7Ik91dCA0IiwgTlVMTCwgIk91dDQgTXV4In0sCisJeyJPVVQ0IiwgTlVMTCwgIk91dCA0In0sCisKKwkvKiByZWNvcmQgbWl4ZXIgICovCisJeyJQbGF5YmFjayBNaXhlciIsICJMZWZ0IENhcHR1cmUgU3dpdGNoIiwgIkxlZnQgTWl4ZXIifSwKKwl7IlBsYXliYWNrIE1peGVyIiwgIlZvaWNlIENhcHR1cmUgU3dpdGNoIiwgIk1vbm8gTWl4ZXIifSwKKwl7IlBsYXliYWNrIE1peGVyIiwgIlJpZ2h0IENhcHR1cmUgU3dpdGNoIiwgIlJpZ2h0IE1peGVyIn0sCisKKwkvKiBNaWMvU2lkZVRvbmUgTXV4ICovCisJeyJNaWMgU2lkZXRvbmUgTXV4IiwgIkxlZnQgUEdBIiwgIkxlZnQgQ2FwdHVyZSBWb2x1bWUifSwKKwl7Ik1pYyBTaWRldG9uZSBNdXgiLCAiUmlnaHQgUEdBIiwgIlJpZ2h0IENhcHR1cmUgVm9sdW1lIn0sCisJeyJNaWMgU2lkZXRvbmUgTXV4IiwgIk1pYyAxIiwgIk1pYyAxIFZvbHVtZSJ9LAorCXsiTWljIFNpZGV0b25lIE11eCIsICJNaWMgMiIsICJNaWMgMiBWb2x1bWUifSwKKworCS8qIENhcHR1cmUgTGVmdCBNdXggKi8KKwl7IkNhcHR1cmUgTGVmdCBNdXgiLCAiUEdBIiwgIkxlZnQgQ2FwdHVyZSBWb2x1bWUifSwKKwl7IkNhcHR1cmUgTGVmdCBNdXgiLCAiTGluZSBvciBSWFAtUlhOIiwgIkxpbmUgTGVmdCBNdXgifSwKKwl7IkNhcHR1cmUgTGVmdCBNdXgiLCAiTGluZSIsICJMSU5FMSJ9LAorCisJLyogQ2FwdHVyZSBSaWdodCBNdXggKi8KKwl7IkNhcHR1cmUgUmlnaHQgTXV4IiwgIlBHQSIsICJSaWdodCBDYXB0dXJlIFZvbHVtZSJ9LAorCXsiQ2FwdHVyZSBSaWdodCBNdXgiLCAiTGluZSBvciBSWFAtUlhOIiwgIkxpbmUgUmlnaHQgTXV4In0sCisJeyJDYXB0dXJlIFJpZ2h0IE11eCIsICJTaWRldG9uZSIsICJDYXB0dXJlIFNUIE1peGVyIn0sCisKKwkvKiBNb25vIENhcHR1cmUgbWl4ZXItbXV4ICovCisJeyJDYXB0dXJlIFJpZ2h0IE1peGVyIiwgIlN0ZXJlbyIsICJDYXB0dXJlIFJpZ2h0IE11eCJ9LAorCXsiQ2FwdHVyZSBMZWZ0IE1peGVyIiwgIkFuYWxvZ3VlIE1peCBMZWZ0IiwgIkNhcHR1cmUgTGVmdCBNdXgifSwKKwl7IkNhcHR1cmUgTGVmdCBNaXhlciIsICJBbmFsb2d1ZSBNaXggTGVmdCIsICJDYXB0dXJlIFJpZ2h0IE11eCJ9LAorCXsiQ2FwdHVyZSBSaWdodCBNaXhlciIsICJBbmFsb2d1ZSBNaXggUmlnaHQiLCAiQ2FwdHVyZSBMZWZ0IE11eCJ9LAorCXsiQ2FwdHVyZSBSaWdodCBNaXhlciIsICJBbmFsb2d1ZSBNaXggUmlnaHQiLCAiQ2FwdHVyZSBSaWdodCBNdXgifSwKKwl7IkNhcHR1cmUgTGVmdCBNaXhlciIsICJEaWdpdGFsIE1vbm8gTWl4IiwgIkNhcHR1cmUgTGVmdCBNdXgifSwKKwl7IkNhcHR1cmUgTGVmdCBNaXhlciIsICJEaWdpdGFsIE1vbm8gTWl4IiwgIkNhcHR1cmUgUmlnaHQgTXV4In0sCisJeyJDYXB0dXJlIFJpZ2h0IE1peGVyIiwgIkRpZ2l0YWwgTW9ubyBNaXgiLCAiQ2FwdHVyZSBMZWZ0IE11eCJ9LAorCXsiQ2FwdHVyZSBSaWdodCBNaXhlciIsICJEaWdpdGFsIE1vbm8gTWl4IiwgIkNhcHR1cmUgUmlnaHQgTXV4In0sCisKKwkvKiBBREMgKi8KKwl7IkxlZnQgQURDIiwgTlVMTCwgIkNhcHR1cmUgTGVmdCBNaXhlciJ9LAorCXsiUmlnaHQgQURDIiwgTlVMTCwgIkNhcHR1cmUgUmlnaHQgTWl4ZXIifSwKKworCS8qIExlZnQgQ2FwdHVyZSBWb2x1bWUgKi8KKwl7IkxlZnQgQ2FwdHVyZSBWb2x1bWUiLCBOVUxMLCAiQUNJTiJ9LAorCisJLyogUmlnaHQgQ2FwdHVyZSBWb2x1bWUgKi8KKwl7IlJpZ2h0IENhcHR1cmUgVm9sdW1lIiwgTlVMTCwgIk1pYyAyIFZvbHVtZSJ9LAorCisJLyogQUxDIE1peGVyICovCisJeyJBTEMgTWl4ZXIiLCAiTGluZSBDYXB0dXJlIFN3aXRjaCIsICJMaW5lIE1peGVyIn0sCisJeyJBTEMgTWl4ZXIiLCAiTWljMiBDYXB0dXJlIFN3aXRjaCIsICJNaWMgMiBWb2x1bWUifSwKKwl7IkFMQyBNaXhlciIsICJNaWMxIENhcHR1cmUgU3dpdGNoIiwgIk1pYyAxIFZvbHVtZSJ9LAorCXsiQUxDIE1peGVyIiwgIlJ4IENhcHR1cmUgU3dpdGNoIiwgIlJ4IE1peGVyIn0sCisKKwkvKiBMaW5lIExlZnQgTXV4ICovCisJeyJMaW5lIExlZnQgTXV4IiwgIkxpbmUgMSIsICJMSU5FMSJ9LAorCXsiTGluZSBMZWZ0IE11eCIsICJSeCBNaXgiLCAiUnggTWl4ZXIifSwKKworCS8qIExpbmUgUmlnaHQgTXV4ICovCisJeyJMaW5lIFJpZ2h0IE11eCIsICJMaW5lIDIiLCAiTElORTIifSwKKwl7IkxpbmUgUmlnaHQgTXV4IiwgIlJ4IE1peCIsICJSeCBNaXhlciJ9LAorCisJLyogTGluZSBNb25vIE11eCAqLworCXsiTGluZSBNb25vIE11eCIsICJMaW5lIE1peCIsICJMaW5lIE1peGVyIn0sCisJeyJMaW5lIE1vbm8gTXV4IiwgIlJ4IE1peCIsICJSeCBNaXhlciJ9LAorCisJLyogTGluZSBNaXhlci9NdXggKi8KKwl7IkxpbmUgTWl4ZXIiLCAiTGluZSAxICsgMiIsICJMSU5FMSJ9LAorCXsiTGluZSBNaXhlciIsICJMaW5lIDEgLSAyIiwgIkxJTkUxIn0sCisJeyJMaW5lIE1peGVyIiwgIkxpbmUgMSArIDIiLCAiTElORTIifSwKKwl7IkxpbmUgTWl4ZXIiLCAiTGluZSAxIC0gMiIsICJMSU5FMiJ9LAorCXsiTGluZSBNaXhlciIsICJMaW5lIDEiLCAiTElORTEifSwKKwl7IkxpbmUgTWl4ZXIiLCAiTGluZSAyIiwgIkxJTkUyIn0sCisKKwkvKiBSeCBNaXhlci9NdXggKi8KKwl7IlJ4IE1peGVyIiwgIlJYUCAtIFJYTiIsICJSWFAifSwKKwl7IlJ4IE1peGVyIiwgIlJYUCArIFJYTiIsICJSWFAifSwKKwl7IlJ4IE1peGVyIiwgIlJYUCAtIFJYTiIsICJSWE4ifSwKKwl7IlJ4IE1peGVyIiwgIlJYUCArIFJYTiIsICJSWE4ifSwKKwl7IlJ4IE1peGVyIiwgIlJYUCIsICJSWFAifSwKKwl7IlJ4IE1peGVyIiwgIlJYTiIsICJSWE4ifSwKKworCS8qIE1pYyAxIFZvbHVtZSAqLworCXsiTWljIDEgVm9sdW1lIiwgTlVMTCwgIk1JQzFOIn0sCisJeyJNaWMgMSBWb2x1bWUiLCBOVUxMLCAiTWljIFNlbGVjdGlvbiBNdXgifSwKKworCS8qIE1pYyAyIFZvbHVtZSAqLworCXsiTWljIDIgVm9sdW1lIiwgTlVMTCwgIk1JQzJOIn0sCisJeyJNaWMgMiBWb2x1bWUiLCBOVUxMLCAiTUlDMiJ9LAorCisJLyogTWljIFNlbGVjdG9yIE11eCAqLworCXsiTWljIFNlbGVjdGlvbiBNdXgiLCAiTWljIDEiLCAiTUlDMSJ9LAorCXsiTWljIFNlbGVjdGlvbiBNdXgiLCAiTWljIDIiLCAiTUlDMk4ifSwKKwl7Ik1pYyBTZWxlY3Rpb24gTXV4IiwgIk1pYyAzIiwgIk1JQzIifSwKKworCS8qIEFDT1AgKi8KKwl7IkFDT1AiLCBOVUxMLCAiQUxDIE1peGVyIn0sCisKKwkvKiB0ZXJtaW5hdG9yICovCisJe05VTEwsIE5VTEwsIE5VTEx9LAorfTsKKworc3RhdGljIGludCB3bTg3NTNfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUzX2RhcG1fd2lkZ2V0cyk7IGkrKykKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9sKGNvZGVjLCAmd204NzUzX2RhcG1fd2lkZ2V0c1tpXSk7CisKKwkvKiBzZXQgdXAgdGhlIFdNODc1MyBhdWRpbyBtYXAgKi8KKwlmb3IgKGkgPSAwOyBhdWRpb19tYXBbaV1bMF0gIT0gTlVMTDsgaSsrKSB7CisJCXNuZF9zb2NfZGFwbV9jb25uZWN0X2lucHV0KGNvZGVjLCBhdWRpb19tYXBbaV1bMF0sCisJCQlhdWRpb19tYXBbaV1bMV0sIGF1ZGlvX21hcFtpXVsyXSk7CisJfQorCisJc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworLyogUExMIGRpdmlzb3JzICovCitzdHJ1Y3QgX3BsbF9kaXYgeworCXUzMiBkaXYyOjE7CisJdTMyIG46NDsKKwl1MzIgazoyNDsKK307CisKKy8qIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHBsbCBkaXZpZGUgbXVsdGlwbGllZCBieSAxMAorICogdG8gYWxsb3cgcm91bmRpbmcgbGF0ZXIgKi8KKyNkZWZpbmUgRklYRURfUExMX1NJWkUgKCgxIDw8IDIyKSAqIDEwKQorCitzdGF0aWMgdm9pZCBwbGxfZmFjdG9ycyhzdHJ1Y3QgX3BsbF9kaXYgKnBsbF9kaXYsIHVuc2lnbmVkIGludCB0YXJnZXQsCisJdW5zaWduZWQgaW50IHNvdXJjZSkKK3sKKwl1NjQgS3BhcnQ7CisJdW5zaWduZWQgaW50IEssIE5kaXYsIE5tb2Q7CisKKwlOZGl2ID0gdGFyZ2V0IC8gc291cmNlOworCWlmIChOZGl2IDwgNikgeworCQlzb3VyY2UgPj49IDE7CisJCXBsbF9kaXYtPmRpdjIgPSAxOworCQlOZGl2ID0gdGFyZ2V0IC8gc291cmNlOworCX0gZWxzZQorCQlwbGxfZGl2LT5kaXYyID0gMDsKKworCWlmICgoTmRpdiA8IDYpIHx8IChOZGl2ID4gMTIpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiV004NzUzIE4gdmFsdWUgb3V0d2l0aCByZWNvbW1lbmRlZCByYW5nZSEgTiA9ICVkXG4iLE5kaXYpOworCisJcGxsX2Rpdi0+biA9IE5kaXY7CisJTm1vZCA9IHRhcmdldCAlIHNvdXJjZTsKKwlLcGFydCA9IEZJWEVEX1BMTF9TSVpFICogKGxvbmcgbG9uZylObW9kOworCisJZG9fZGl2KEtwYXJ0LCBzb3VyY2UpOworCisJSyA9IEtwYXJ0ICYgMHhGRkZGRkZGRjsKKworCS8qIENoZWNrIGlmIHdlIG5lZWQgdG8gcm91bmQgKi8KKwlpZiAoKEsgJSAxMCkgPj0gNSkKKwkJSyArPSA1OworCisJLyogTW92ZSBkb3duIHRvIHByb3BlciByYW5nZSBub3cgcm91bmRpbmcgaXMgZG9uZSAqLworCUsgLz0gMTA7CisKKwlwbGxfZGl2LT5rID0gSzsKK30KKworc3RhdGljIGludCB3bTg3NTNfc2V0X2RhaV9wbGwoc3RydWN0IHNuZF9zb2NfY29kZWNfZGFpICpjb2RlY19kYWksCisJCWludCBwbGxfaWQsIHVuc2lnbmVkIGludCBmcmVxX2luLCB1bnNpZ25lZCBpbnQgZnJlcV9vdXQpCit7CisJdTE2IHJlZywgZW5hYmxlOworCWludCBvZmZzZXQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKworCWlmIChwbGxfaWQgPCBXTTg3NTNfUExMMSB8fCBwbGxfaWQgPiBXTTg3NTNfUExMMikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAocGxsX2lkID09IFdNODc1M19QTEwxKSB7CisJCW9mZnNldCA9IDA7CisJCWVuYWJsZSA9IDB4MTA7CisJCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0NMT0NLKSAmIDB4ZmZlZjsKKwl9IGVsc2UgeworCQlvZmZzZXQgPSA0OworCQllbmFibGUgPSAweDg7CisJCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0NMT0NLKSAmIDB4ZmZmNzsKKwl9CisKKwlpZiAoIWZyZXFfaW4gfHwgIWZyZXFfb3V0KSB7CisJCS8qIGRpc2FibGUgUExMICAqLworCQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19QTEwxQ1RMMSArIG9mZnNldCwgMHgwMDI2KTsKKwkJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfQ0xPQ0ssIHJlZyk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXUxNiB2YWx1ZSA9IDA7CisJCXN0cnVjdCBfcGxsX2RpdiBwbGxfZGl2OworCisJCXBsbF9mYWN0b3JzKCZwbGxfZGl2LCBmcmVxX291dCAqIDgsIGZyZXFfaW4pOworCisJCS8qIHNldCB1cCBOIGFuZCBLIFBMTCBkaXZpc29yIHJhdGlvcyAqLworCQkvKiBiaXRzIDg6NSA9IFBMTF9OLCBiaXRzIDM6MCA9IFBMTF9LWzIxOjE4XSAqLworCQl2YWx1ZSA9IChwbGxfZGl2Lm4gPDwgNSkgKyAoKHBsbF9kaXYuayAmIDB4M2MwMDAwKSA+PiAxOCk7CisJCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1BMTDFDVEwyICsgb2Zmc2V0LCB2YWx1ZSk7CisKKwkJLyogYml0cyA4OjAgPSBQTExfS1sxNzo5XSAqLworCQl2YWx1ZSA9IChwbGxfZGl2LmsgJiAweDAzZmUwMCkgPj4gOTsKKwkJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUExMMUNUTDMgKyBvZmZzZXQsIHZhbHVlKTsKKworCQkvKiBiaXRzIDg6MCA9IFBMTF9LWzg6MF0gKi8KKwkJdmFsdWUgPSBwbGxfZGl2LmsgJiAweDAwMDFmZjsKKwkJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUExMMUNUTDQgKyBvZmZzZXQsIHZhbHVlKTsKKworCQkvKiBzZXQgUExMIGFzIGlucHV0IGFuZCBlbmFibGUgKi8KKwkJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUExMMUNUTDEgKyBvZmZzZXQsIDB4MDAyNyB8CisJCQkocGxsX2Rpdi5kaXYyIDw8IDMpKTsKKwkJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfQ0xPQ0ssIHJlZyB8IGVuYWJsZSk7CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgX2NvZWZmX2RpdiB7CisJdTMyIG1jbGs7CisJdTMyIHJhdGU7CisJdTggc3I6NTsKKwl1OCB1c2I6MTsKK307CisKKy8qIGNvZGVjIGhpZmkgbWNsayAoYWZ0ZXIgUExMKSBjbG9jayBkaXZpZGVyIGNvZWZmaWNpZW50cyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBfY29lZmZfZGl2IGNvZWZmX2RpdltdID0geworCS8qIDhrICovCisJezEyMjg4MDAwLCA4MDAwLCAweDYsIDB4MH0sCisJezExMjg5NjAwLCA4MDAwLCAweDE2LCAweDB9LAorCXsxODQzMjAwMCwgODAwMCwgMHg3LCAweDB9LAorCXsxNjkzNDQwMCwgODAwMCwgMHgxNywgMHgwfSwKKwl7MTIwMDAwMDAsIDgwMDAsIDB4NiwgMHgxfSwKKworCS8qIDExLjAyNWsgKi8KKwl7MTEyODk2MDAsIDExMDI1LCAweDE4LCAweDB9LAorCXsxNjkzNDQwMCwgMTEwMjUsIDB4MTksIDB4MH0sCisJezEyMDAwMDAwLCAxMTAyNSwgMHgxOSwgMHgxfSwKKworCS8qIDE2ayAqLworCXsxMjI4ODAwMCwgMTYwMDAsIDB4YSwgMHgwfSwKKwl7MTg0MzIwMDAsIDE2MDAwLCAweGIsIDB4MH0sCisJezEyMDAwMDAwLCAxNjAwMCwgMHhhLCAweDF9LAorCisJLyogMjIuMDVrICovCisJezExMjg5NjAwLCAyMjA1MCwgMHgxYSwgMHgwfSwKKwl7MTY5MzQ0MDAsIDIyMDUwLCAweDFiLCAweDB9LAorCXsxMjAwMDAwMCwgMjIwNTAsIDB4MWIsIDB4MX0sCisKKwkvKiAzMmsgKi8KKwl7MTIyODgwMDAsIDMyMDAwLCAweGMsIDB4MH0sCisJezE4NDMyMDAwLCAzMjAwMCwgMHhkLCAweDB9LAorCXsxMjAwMDAwMCwgMzIwMDAsIDB4YSwgMHgxfSwKKworCS8qIDQ0LjFrICovCisJezExMjg5NjAwLCA0NDEwMCwgMHgxMCwgMHgwfSwKKwl7MTY5MzQ0MDAsIDQ0MTAwLCAweDExLCAweDB9LAorCXsxMjAwMDAwMCwgNDQxMDAsIDB4MTEsIDB4MX0sCisKKwkvKiA0OGsgKi8KKwl7MTIyODgwMDAsIDQ4MDAwLCAweDAsIDB4MH0sCisJezE4NDMyMDAwLCA0ODAwMCwgMHgxLCAweDB9LAorCXsxMjAwMDAwMCwgNDgwMDAsIDB4MCwgMHgxfSwKKworCS8qIDg4LjJrICovCisJezExMjg5NjAwLCA4ODIwMCwgMHgxZSwgMHgwfSwKKwl7MTY5MzQ0MDAsIDg4MjAwLCAweDFmLCAweDB9LAorCXsxMjAwMDAwMCwgODgyMDAsIDB4MWYsIDB4MX0sCisKKwkvKiA5NmsgKi8KKwl7MTIyODgwMDAsIDk2MDAwLCAweGUsIDB4MH0sCisJezE4NDMyMDAwLCA5NjAwMCwgMHhmLCAweDB9LAorCXsxMjAwMDAwMCwgOTYwMDAsIDB4ZSwgMHgxfSwKK307CisKK3N0YXRpYyBpbnQgZ2V0X2NvZWZmKGludCBtY2xrLCBpbnQgcmF0ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvZWZmX2Rpdik7IGkrKykgeworCQlpZiAoY29lZmZfZGl2W2ldLnJhdGUgPT0gcmF0ZSAmJiBjb2VmZl9kaXZbaV0ubWNsayA9PSBtY2xrKQorCQkJcmV0dXJuIGk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogQ2xvY2sgYWZ0ZXIgUExMIGFuZCBkaXZpZGVycworICovCitzdGF0aWMgaW50IHdtODc1M19zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19jb2RlY19kYWkgKmNvZGVjX2RhaSwKKwkJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGZyZXEpIHsKKwljYXNlIDExMjg5NjAwOgorCWNhc2UgMTIwMDAwMDA6CisJY2FzZSAxMjI4ODAwMDoKKwljYXNlIDE2OTM0NDAwOgorCWNhc2UgMTg0MzIwMDA6CisJCWlmIChjbGtfaWQgPT0gV004NzUzX01DTEspIHsKKwkJCXdtODc1My0+c3lzY2xrID0gZnJlcTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKGNsa19pZCA9PSBXTTg3NTNfUENNQ0xLKSB7CisJCQl3bTg3NTMtPnBjbWNsayA9IGZyZXE7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBTZXQncyBBREMgYW5kIFZvaWNlIERBQyBmb3JtYXQuCisgKi8KK3N0YXRpYyBpbnQgd204NzUzX3ZkYWNfYWRjX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2NvZGVjX2RhaSAqY29kZWNfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTE2IHZvaWNlID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUENNKSAmIDB4MDFlYzsKKworCS8qIGludGVyZmFjZSBmb3JtYXQgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCXZvaWNlIHw9IDB4MDAwMjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJdm9pY2UgfD0gMHgwMDAxOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQl2b2ljZSB8PSAweDAwMDM7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCXZvaWNlIHw9IDB4MDAxMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUENNLCB2b2ljZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgUENNIERBSSBiaXQgc2l6ZSBhbmQgc2FtcGxlIHJhdGUuCisgKi8KK3N0YXRpYyBpbnQgd204NzUzX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJdTE2IHZvaWNlID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUENNKSAmIDB4MDFmMzsKKwl1MTYgc3JhdGUgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19TUkFURTEpICYgMHgwMTdmOworCisJLyogYml0IHNpemUgKi8KKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQl2b2ljZSB8PSAweDAwMDQ7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCXZvaWNlIHw9IDB4MDAwODsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJdm9pY2UgfD0gMHgwMDBjOworCQlicmVhazsKKwl9CisKKwkvKiBzYW1wbGUgcmF0ZSAqLworCWlmIChwYXJhbXNfcmF0ZShwYXJhbXMpICogMzg0ID09IHdtODc1My0+cGNtY2xrKQorCQlzcmF0ZSB8PSAweDgwOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1NSQVRFMSwgc3JhdGUpOworCisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUENNLCB2b2ljZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQncyBQQ00gZGFpIGZtdCBhbmQgQkNMSy4KKyAqLworc3RhdGljIGludCB3bTg3NTNfcGNtX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2NvZGVjX2RhaSAqY29kZWNfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTE2IHZvaWNlLCBpb2N0bDsKKworCXZvaWNlID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUENNKSAmIDB4MDExZjsKKwlpb2N0bCA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0lPQ1RMKSAmIDB4MDE1ZDsKKworCS8qIHNldCBtYXN0ZXIvc2xhdmUgYXVkaW8gaW50ZXJmYWNlICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlpb2N0bCB8PSAweDI7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgorCQl2b2ljZSB8PSAweDAwNDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNsb2NrIGludmVyc2lvbiAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCS8qIGZyYW1lIGludmVyc2lvbiBub3QgdmFsaWQgZm9yIERTUCBtb2RlcyAqLworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCXZvaWNlIHw9IDB4MDA4MDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQl2b2ljZSAmPSB+MHgwMDEwOworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJCXZvaWNlIHw9IDB4MDA5MDsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJdm9pY2UgfD0gMHgwMDgwOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCQl2b2ljZSB8PSAweDAwMTA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1BDTSwgdm9pY2UpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0lPQ1RMLCBpb2N0bCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NzUzX3NldF9kYWlfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2NvZGVjX2RhaSAqY29kZWNfZGFpLAorCQlpbnQgZGl2X2lkLCBpbnQgZGl2KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTE2IHJlZzsKKworCXN3aXRjaCAoZGl2X2lkKSB7CisJY2FzZSBXTTg3NTNfUENNRElWOgorCQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19DTE9DSykgJiAweDAwM2Y7CisJCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0NMT0NLLCByZWcgfCBkaXYpOworCQlicmVhazsKKwljYXNlIFdNODc1M19CQ0xLRElWOgorCQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19TUkFURTIpICYgMHgwMWM3OworCQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19TUkFURTIsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWNhc2UgV004NzUzX1ZYQ0xLRElWOgorCQlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19TUkFURTIpICYgMHgwMDNmOworCQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19TUkFURTIsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCdzIEhpRmkgREFDIGZvcm1hdC4KKyAqLworc3RhdGljIGludCB3bTg3NTNfaGRhY19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19jb2RlY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXUxNiBoaWZpID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfSElGSSkgJiAweDAxZTA7CisKKwkvKiBpbnRlcmZhY2UgZm9ybWF0ICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQloaWZpIHw9IDB4MDAwMjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaGlmaSB8PSAweDAwMDE7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWhpZmkgfD0gMHgwMDAzOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQloaWZpIHw9IDB4MDAxMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfSElGSSwgaGlmaSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQncyBJMlMgREFJIGZvcm1hdC4KKyAqLworc3RhdGljIGludCB3bTg3NTNfaTJzX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2NvZGVjX2RhaSAqY29kZWNfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTE2IGlvY3RsLCBoaWZpOworCisJaGlmaSA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0hJRkkpICYgMHgwMTFmOworCWlvY3RsID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfSU9DVEwpICYgMHgwMGFlOworCisJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWlvY3RsIHw9IDB4MTsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6CisJCWhpZmkgfD0gMHgwMDQwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjbG9jayBpbnZlcnNpb24gKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQkvKiBmcmFtZSBpbnZlcnNpb24gbm90IHZhbGlkIGZvciBEU1AgbW9kZXMgKi8KKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQloaWZpIHw9IDB4MDA4MDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQloaWZpICY9IH4weDAwMTA7CisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQkJaGlmaSB8PSAweDAwOTA7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWhpZmkgfD0gMHgwMDgwOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCQloaWZpIHw9IDB4MDAxMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfSElGSSwgaGlmaSk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfSU9DVEwsIGlvY3RsKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCBQQ00gREFJIGJpdCBzaXplIGFuZCBzYW1wbGUgcmF0ZS4KKyAqLworc3RhdGljIGludCB3bTg3NTNfaTJzX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCB3bTg3NTNfcHJpdiAqd204NzUzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1MTYgc3JhdGUgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19TUkFURTEpICYgMHgwMWMwOworCXUxNiBoaWZpID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfSElGSSkgJiAweDAxZjM7CisJaW50IGNvZWZmOworCisJLyogaXMgZGlnaXRhbCBmaWx0ZXIgY29lZmZpY2llbnQgdmFsaWQgPyAqLworCWNvZWZmID0gZ2V0X2NvZWZmKHdtODc1My0+c3lzY2xrLCBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKKwlpZiAoY29lZmYgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid204NzUzIGludmFsaWQgTUNMSyBvciByYXRlXG4iKTsKKwkJcmV0dXJuIGNvZWZmOworCX0KKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19TUkFURTEsIHNyYXRlIHwgKGNvZWZmX2Rpdltjb2VmZl0uc3IgPDwgMSkgfAorCQljb2VmZl9kaXZbY29lZmZdLnVzYik7CisKKwkvKiBiaXQgc2l6ZSAqLworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWhpZmkgfD0gMHgwMDA0OworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQloaWZpIHw9IDB4MDAwODsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJaGlmaSB8PSAweDAwMGM7CisJCWJyZWFrOworCX0KKworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0hJRkksIGhpZmkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODc1M19tb2RlMXZfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfY29kZWNfZGFpICpjb2RlY19kYWksCisJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1MTYgY2xvY2s7CisKKwkvKiBzZXQgY2xrIHNvdXJjZSBhcyBwY21jbGsgKi8KKwljbG9jayA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0NMT0NLKSAmIDB4ZmZmYjsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19DTE9DSywgY2xvY2spOworCisJaWYgKHdtODc1M192ZGFjX2FkY19zZXRfZGFpX2ZtdChjb2RlY19kYWksIGZtdCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gd204NzUzX3BjbV9zZXRfZGFpX2ZtdChjb2RlY19kYWksIGZtdCk7Cit9CisKK3N0YXRpYyBpbnQgd204NzUzX21vZGUxaF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19jb2RlY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlpZiAod204NzUzX2hkYWNfc2V0X2RhaV9mbXQoY29kZWNfZGFpLCBmbXQpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHdtODc1M19pMnNfc2V0X2RhaV9mbXQoY29kZWNfZGFpLCBmbXQpOworfQorCitzdGF0aWMgaW50IHdtODc1M19tb2RlMl9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19jb2RlY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXUxNiBjbG9jazsKKworCS8qIHNldCBjbGsgc291cmNlIGFzIHBjbWNsayAqLworCWNsb2NrID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfQ0xPQ0spICYgMHhmZmZiOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0NMT0NLLCBjbG9jayk7CisKKwlpZiAod204NzUzX3ZkYWNfYWRjX3NldF9kYWlfZm10KGNvZGVjX2RhaSwgZm10KSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiB3bTg3NTNfaTJzX3NldF9kYWlfZm10KGNvZGVjX2RhaSwgZm10KTsKK30KKworc3RhdGljIGludCB3bTg3NTNfbW9kZTNfNF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19jb2RlY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXUxNiBjbG9jazsKKworCS8qIHNldCBjbGsgc291cmNlIGFzIG1jbGsgKi8KKwljbG9jayA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0NMT0NLKSAmIDB4ZmZmYjsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19DTE9DSywgY2xvY2sgfCAweDQpOworCisJaWYgKHdtODc1M19oZGFjX3NldF9kYWlfZm10KGNvZGVjX2RhaSwgZm10KSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmICh3bTg3NTNfdmRhY19hZGNfc2V0X2RhaV9mbXQoY29kZWNfZGFpLCBmbXQpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHdtODc1M19pMnNfc2V0X2RhaV9mbXQoY29kZWNfZGFpLCBmbXQpOworfQorCitzdGF0aWMgaW50IHdtODc1M19tdXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjX2RhaSAqZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXUxNiBtdXRlX3JlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0RBQykgJiAweGZmZjc7CisKKwkvKiB0aGUgZGlnaXRhbCBtdXRlIGNvdmVycyB0aGUgSGlGaSBhbmQgVm9pY2UgREFDJ3Mgb24gdGhlIFdNODc1My4KKwkgKiBtYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhleSBhcmUgbm90IGJvdGggYWN0aXZlIHdoZW4gd2UgbXV0ZSAqLworCWlmIChtdXRlICYmIGRhaS0+aWQgPT0gMSkgeworCQlpZiAoIXdtODc1M19kYWlbV004NzUzX0RBSV9WT0lDRV0ucGxheWJhY2suYWN0aXZlIHx8CisJCQkhd204NzUzX2RhaVtXTTg3NTNfREFJX0hJRkldLnBsYXliYWNrLmFjdGl2ZSkKKwkJCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0RBQywgbXV0ZV9yZWcgfCAweDgpOworCX0gZWxzZSB7CisJCWlmIChtdXRlKQorCQkJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfREFDLCBtdXRlX3JlZyB8IDB4OCk7CisJCWVsc2UKKwkJCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX0RBQywgbXV0ZV9yZWcpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODc1M19kYXBtX2V2ZW50KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGV2ZW50KQoreworCXUxNiBwd3JfcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfUFdSMSkgJiAweGZlM2U7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRSVl9DVExfUE9XRVJfRDA6IC8qIGZ1bGwgT24gKi8KKwkJLyogc2V0IHZtaWQgdG8gNTBrIGFuZCB1bm11dGUgZGFjICovCisJCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1BXUjEsIHB3cl9yZWcgfCAweDAwYzApOworCQlicmVhazsKKwljYXNlIFNORFJWX0NUTF9QT1dFUl9EMTogLyogcGFydGlhbCBPbiAqLworCWNhc2UgU05EUlZfQ1RMX1BPV0VSX0QyOiAvKiBwYXJ0aWFsIE9uICovCisJCS8qIHNldCB2bWlkIHRvIDVrIGZvciBxdWljayBwb3dlciB1cCAqLworCQl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19QV1IxLCBwd3JfcmVnIHwgMHgwMWMxKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9DVExfUE9XRVJfRDNob3Q6IC8qIE9mZiwgd2l0aCBwb3dlciAqLworCQkvKiBtdXRlIGRhYyBhbmQgc2V0IHZtaWQgdG8gNTAwaywgZW5hYmxlIFZSRUYgKi8KKwkJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUFdSMSwgcHdyX3JlZyB8IDB4MDE0MSk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfQ1RMX1BPV0VSX0QzY29sZDogLyogT2ZmLCB3aXRob3V0IHBvd2VyICovCisJCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1BXUjEsIDB4MDAwMSk7CisJCWJyZWFrOworCX0KKwljb2RlYy0+ZGFwbV9zdGF0ZSA9IGV2ZW50OworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODc1M19SQVRFUyAoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzExMDI1IHxcCisJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKKwkJU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwKQorCisjZGVmaW5lIFdNODc1M19GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAorCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQorCisvKgorICogVGhlIFdNODc1MyBzdXBwb3J0cyB1cHRvIDQgZGlmZmVyZW50IGFuZCBtdXR1YWxseSBleGNsdXNpdmUgREFJCisgKiBjb25maWd1cmF0aW9ucy4gVGhpcyBnaXZlcyAyIFBDTSdzIGF2YWlsYWJsZSBmb3IgdXNlLCBoaWZpIGFuZCB2b2ljZS4KKyAqIE5PVEU6IFRoZSBWb2ljZSBQQ00gY2Fubm90IHBsYXkgb3IgY2FwdHVyZSBhdWRpbyB0byB0aGUgQ1BVIGFzIGl0J3MgREFJCisgKiBpcyBjb25uZWN0ZWQgYmV0d2VlbiB0aGUgd204NzUzIGFuZCBhIEJUIGNvZGVjIG9yIEdTTSBtb2RlbS4KKyAqCisgKiAxLiBWb2ljZSBvdmVyIFBDTSBEQUkgLSBISUZJIERBQyBvdmVyIEhJRkkgREFJCisgKiAyLiBWb2ljZSBvdmVyIEhJRkkgREFJIC0gSElGSSBkaXNhYmxlZAorICogMy4gVm9pY2UgZGlzYWJsZWQgLSBISUZJIG92ZXIgSElGSQorICogNC4gVm9pY2UgZGlzYWJsZWQgLSBISUZJIG92ZXIgSElGSSwgdXNlcyB2b2ljZSBEQUkgTFJDIGZvciBjYXB0dXJlCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kYWkgd204NzUzX2FsbF9kYWlbXSA9IHsKKy8qIERBSSBIaUZpIG1vZGUgMSAqLworewkubmFtZSA9ICJXTTg3NTMgSGlGaSIsCisJLmlkID0gMSwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJIaUZpIFBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCisJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKKwkuY2FwdHVyZSA9IHsgLyogZHVtbXkgZm9yIGZhc3QgREFJIHN3aXRjaGluZyAqLworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004NzUzX1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCisJLm9wcyA9IHsKKwkJLmh3X3BhcmFtcyA9IHdtODc1M19pMnNfaHdfcGFyYW1zLH0sCisJLmRhaV9vcHMgPSB7CisJCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKKwkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTFoX3NldF9kYWlfZm10LAorCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorCX0sCit9LAorLyogREFJIFZvaWNlIG1vZGUgMSAqLworewkubmFtZSA9ICJXTTg3NTMgVm9pY2UiLAorCS5pZCA9IDEsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiVm9pY2UgUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDEsCisJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUyx9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004NzUzX1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCisJLm9wcyA9IHsKKwkJLmh3X3BhcmFtcyA9IHdtODc1M19wY21faHdfcGFyYW1zLH0sCisJLmRhaV9vcHMgPSB7CisJCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKKwkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTF2X3NldF9kYWlfZm10LAorCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorCX0sCit9LAorLyogREFJIEhpRmkgbW9kZSAyIC0gZHVtbXkgKi8KK3sJLm5hbWUgPSAiV004NzUzIEhpRmkiLAorCS5pZCA9IDIsCit9LAorLyogREFJIFZvaWNlIG1vZGUgMiAqLworewkubmFtZSA9ICJXTTg3NTMgVm9pY2UiLAorCS5pZCA9IDIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiVm9pY2UgUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDEsCisJCS5yYXRlcyA9IFdNODc1M19SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg3NTNfRk9STUFUUyx9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004NzUzX1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCisJLm9wcyA9IHsKKwkJLmh3X3BhcmFtcyA9IHdtODc1M19wY21faHdfcGFyYW1zLH0sCisJLmRhaV9vcHMgPSB7CisJCS5kaWdpdGFsX211dGUgPSB3bTg3NTNfbXV0ZSwKKwkJLnNldF9mbXQgPSB3bTg3NTNfbW9kZTJfc2V0X2RhaV9mbXQsCisJCS5zZXRfY2xrZGl2ID0gd204NzUzX3NldF9kYWlfY2xrZGl2LAorCQkuc2V0X3BsbCA9IHdtODc1M19zZXRfZGFpX3BsbCwKKwkJLnNldF9zeXNjbGsgPSB3bTg3NTNfc2V0X2RhaV9zeXNjbGssCisJfSwKK30sCisvKiBEQUkgSGlGaSBtb2RlIDMgKi8KK3sJLm5hbWUgPSAiV004NzUzIEhpRmkiLAorCS5pZCA9IDMsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiSGlGaSBQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004NzUzX1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCisJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKKwkub3BzID0geworCQkuaHdfcGFyYW1zID0gd204NzUzX2kyc19od19wYXJhbXMsfSwKKwkuZGFpX29wcyA9IHsKKwkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1M19tdXRlLAorCQkuc2V0X2ZtdCA9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10LAorCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorCX0sCit9LAorLyogREFJIFZvaWNlIG1vZGUgMyAtIGR1bW15ICovCit7CS5uYW1lID0gIldNODc1MyBWb2ljZSIsCisJLmlkID0gMywKK30sCisvKiBEQUkgSGlGaSBtb2RlIDQgKi8KK3sJLm5hbWUgPSAiV004NzUzIEhpRmkiLAorCS5pZCA9IDQsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiSGlGaSBQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004NzUzX1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODc1M19GT1JNQVRTLH0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg3NTNfUkFURVMsCisJCS5mb3JtYXRzID0gV004NzUzX0ZPUk1BVFMsfSwKKwkub3BzID0geworCQkuaHdfcGFyYW1zID0gd204NzUzX2kyc19od19wYXJhbXMsfSwKKwkuZGFpX29wcyA9IHsKKwkJLmRpZ2l0YWxfbXV0ZSA9IHdtODc1M19tdXRlLAorCQkuc2V0X2ZtdCA9IHdtODc1M19tb2RlM180X3NldF9kYWlfZm10LAorCQkuc2V0X2Nsa2RpdiA9IHdtODc1M19zZXRfZGFpX2Nsa2RpdiwKKwkJLnNldF9wbGwgPSB3bTg3NTNfc2V0X2RhaV9wbGwsCisJCS5zZXRfc3lzY2xrID0gd204NzUzX3NldF9kYWlfc3lzY2xrLAorCX0sCit9LAorLyogREFJIFZvaWNlIG1vZGUgNCAtIGR1bW15ICovCit7CS5uYW1lID0gIldNODc1MyBWb2ljZSIsCisJLmlkID0gNCwKK30sCit9OworCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kYWkgd204NzUzX2RhaVsyXTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtODc1M19kYWkpOworCitzdGF0aWMgdm9pZCB3bTg3NTNfc2V0X2RhaV9tb2RlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IG1vZGUpCit7CisJaWYgKG1vZGUgPCA0KSB7CisJCWludCBwbGF5YmFja19hY3RpdmUsIGNhcHR1cmVfYWN0aXZlLCBjb2RlY19hY3RpdmUsIHBvcF93YWl0OworCQl2b2lkICpwcml2YXRlX2RhdGE7CisKKwkJcGxheWJhY2tfYWN0aXZlID0gd204NzUzX2RhaVswXS5wbGF5YmFjay5hY3RpdmU7CisJCWNhcHR1cmVfYWN0aXZlID0gd204NzUzX2RhaVswXS5jYXB0dXJlLmFjdGl2ZTsKKwkJY29kZWNfYWN0aXZlID0gd204NzUzX2RhaVswXS5hY3RpdmU7CisJCXByaXZhdGVfZGF0YSA9IHdtODc1M19kYWlbMF0ucHJpdmF0ZV9kYXRhOworCQlwb3Bfd2FpdCA9IHdtODc1M19kYWlbMF0ucG9wX3dhaXQ7CisJCXdtODc1M19kYWlbMF0gPSB3bTg3NTNfYWxsX2RhaVttb2RlIDw8IDFdOworCQl3bTg3NTNfZGFpWzBdLnBsYXliYWNrLmFjdGl2ZSA9IHBsYXliYWNrX2FjdGl2ZTsKKwkJd204NzUzX2RhaVswXS5jYXB0dXJlLmFjdGl2ZSA9IGNhcHR1cmVfYWN0aXZlOworCQl3bTg3NTNfZGFpWzBdLmFjdGl2ZSA9IGNvZGVjX2FjdGl2ZTsKKwkJd204NzUzX2RhaVswXS5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7CisJCXdtODc1M19kYWlbMF0ucG9wX3dhaXQgPSBwb3Bfd2FpdDsKKworCQlwbGF5YmFja19hY3RpdmUgPSB3bTg3NTNfZGFpWzFdLnBsYXliYWNrLmFjdGl2ZTsKKwkJY2FwdHVyZV9hY3RpdmUgPSB3bTg3NTNfZGFpWzFdLmNhcHR1cmUuYWN0aXZlOworCQljb2RlY19hY3RpdmUgPSB3bTg3NTNfZGFpWzFdLmFjdGl2ZTsKKwkJcHJpdmF0ZV9kYXRhID0gd204NzUzX2RhaVsxXS5wcml2YXRlX2RhdGE7CisJCXBvcF93YWl0ID0gd204NzUzX2RhaVsxXS5wb3Bfd2FpdDsKKwkJd204NzUzX2RhaVsxXSA9IHdtODc1M19hbGxfZGFpWyhtb2RlIDw8IDEpICsgMV07CisJCXdtODc1M19kYWlbMV0ucGxheWJhY2suYWN0aXZlID0gcGxheWJhY2tfYWN0aXZlOworCQl3bTg3NTNfZGFpWzFdLmNhcHR1cmUuYWN0aXZlID0gY2FwdHVyZV9hY3RpdmU7CisJCXdtODc1M19kYWlbMV0uYWN0aXZlID0gY29kZWNfYWN0aXZlOworCQl3bTg3NTNfZGFpWzFdLnByaXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YTsKKwkJd204NzUzX2RhaVsxXS5wb3Bfd2FpdCA9IHBvcF93YWl0OworCX0KKwl3bTg3NTNfZGFpWzBdLmNvZGVjID0gY29kZWM7CisJd204NzUzX2RhaVsxXS5jb2RlYyA9IGNvZGVjOworfQorCitzdGF0aWMgdm9pZCB3bTg3NTNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzbmRfc29jX2NvZGVjLCBkZWxheWVkX3dvcmsud29yayk7CisJd204NzUzX2RhcG1fZXZlbnQoY29kZWMsIGNvZGVjLT5kYXBtX3N0YXRlKTsKK30KKworc3RhdGljIGludCB3bTg3NTNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCisJLyogd2Ugb25seSBuZWVkIHRvIHN1c3BlbmQgaWYgd2UgYXJlIGEgdmFsaWQgY2FyZCAqLworCWlmKCFjb2RlYy0+Y2FyZCkKKwkJcmV0dXJuIDA7CisJCQorCXdtODc1M19kYXBtX2V2ZW50KGNvZGVjLCBTTkRSVl9DVExfUE9XRVJfRDNjb2xkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NTNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWludCBpOworCXU4IGRhdGFbMl07CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwkvKiB3ZSBvbmx5IG5lZWQgdG8gcmVzdW1lIGlmIHdlIGFyZSBhIHZhbGlkIGNhcmQgKi8KKwlpZighY29kZWMtPmNhcmQpCisJCXJldHVybiAwOworCisJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTNfcmVnKTsgaSsrKSB7CisJCWlmIChpICsgMSA9PSBXTTg3NTNfUkVTRVQpCisJCQljb250aW51ZTsKKwkJZGF0YVswXSA9ICgoaSArIDEpIDw8IDEpIHwgKChjYWNoZVtpXSA+PiA4KSAmIDB4MDAwMSk7CisJCWRhdGFbMV0gPSBjYWNoZVtpXSAmIDB4MDBmZjsKKwkJY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpOworCX0KKworCXdtODc1M19kYXBtX2V2ZW50KGNvZGVjLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOworCisJLyogY2hhcmdlIHdtODc1MyBjYXBzICovCisJaWYgKGNvZGVjLT5zdXNwZW5kX2RhcG1fc3RhdGUgPT0gU05EUlZfQ1RMX1BPV0VSX0QwKSB7CisJCXdtODc1M19kYXBtX2V2ZW50KGNvZGVjLCBTTkRSVl9DVExfUE9XRVJfRDIpOworCQljb2RlYy0+ZGFwbV9zdGF0ZSA9IFNORFJWX0NUTF9QT1dFUl9EMDsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjb2RlYy0+ZGVsYXllZF93b3JrLAorCQkJbXNlY3NfdG9famlmZmllcyhjYXBzX2NoYXJnZSkpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogaW5pdGlhbGlzZSB0aGUgV004NzUzIGRyaXZlcgorICogcmVnaXN0ZXIgdGhlIG1peGVyIGFuZCBkc3AgaW50ZXJmYWNlcyB3aXRoIHRoZSBrZXJuZWwKKyAqLworc3RhdGljIGludCB3bTg3NTNfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWludCByZWcsIHJldCA9IDA7CisKKwljb2RlYy0+bmFtZSA9ICJXTTg3NTMiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkID0gd204NzUzX3JlYWRfcmVnX2NhY2hlOworCWNvZGVjLT53cml0ZSA9IHdtODc1M193cml0ZTsKKwljb2RlYy0+ZGFwbV9ldmVudCA9IHdtODc1M19kYXBtX2V2ZW50OworCWNvZGVjLT5kYWkgPSB3bTg3NTNfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMjsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBzaXplb2Yod204NzUzX3JlZyk7CisJY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAod204NzUzX3JlZywgc2l6ZW9mKHdtODc1M19yZWcpLCBHRlBfS0VSTkVMKTsKKworCWlmIChjb2RlYy0+cmVnX2NhY2hlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJd204NzUzX3NldF9kYWlfbW9kZShjb2RlYywgMCk7CisKKwl3bTg3NTNfcmVzZXQoY29kZWMpOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3bTg3NTM6IGZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKKwkvKiBjaGFyZ2Ugb3V0cHV0IGNhcHMgKi8KKwl3bTg3NTNfZGFwbV9ldmVudChjb2RlYywgU05EUlZfQ1RMX1BPV0VSX0QyKTsKKwljb2RlYy0+ZGFwbV9zdGF0ZSA9IFNORFJWX0NUTF9QT1dFUl9EM2hvdDsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNvZGVjLT5kZWxheWVkX3dvcmssCisJCW1zZWNzX3RvX2ppZmZpZXMoY2Fwc19jaGFyZ2UpKTsKKworCS8qIHNldCB0aGUgdXBkYXRlIGJpdHMgKi8KKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19MREFDKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19MREFDLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JEQUMpOworCXdtODc1M193cml0ZShjb2RlYywgV004NzUzX1JEQUMsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gd204NzUzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTNfTEFEQyk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTEFEQywgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSB3bTg3NTNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1M19SQURDKTsKKwl3bTg3NTNfd3JpdGUoY29kZWMsIFdNODc1M19SQURDLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xPVVQxVik7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTE9VVDFWLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JPVVQxVik7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUk9VVDFWLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xPVVQyVik7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTE9VVDJWLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JPVVQyVik7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUk9VVDJWLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX0xJTlZPTCk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfTElOVk9MLCByZWcgfCAweDAxMDApOworCXJlZyA9IHdtODc1M19yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUzX1JJTlZPTCk7CisJd204NzUzX3dyaXRlKGNvZGVjLCBXTTg3NTNfUklOVk9MLCByZWcgfCAweDAxMDApOworCisJd204NzUzX2FkZF9jb250cm9scyhjb2RlYyk7CisJd204NzUzX2FkZF93aWRnZXRzKGNvZGVjKTsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworICAgICAgCXByaW50ayhLRVJOX0VSUiAid204NzUzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWdvdG8gY2FyZF9lcnI7CisgICAgfQorCXJldHVybiByZXQ7CisKK2NhcmRfZXJyOgorCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKK3BjbV9lcnI6CisJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CisJcmV0dXJuIHJldDsKK30KKworLyogSWYgdGhlIGkyYyBsYXllciB3ZXJlbid0IHNvIGJyb2tlbiwgd2UgY291bGQgcGFzcyB0aGlzIGtpbmQgb2YgZGF0YQorICAgYXJvdW5kICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlICp3bTg3NTNfc29jZGV2OworCisjaWYgZGVmaW5lZCAoQ09ORklHX0kyQykgfHwgZGVmaW5lZCAoQ09ORklHX0kyQ19NT0RVTEUpCisKKy8qCisgKiBXTTg3NTMgMiB3aXJlIGFkZHJlc3MgaXMgZGV0ZXJtaW5lZCBieSBHUElPNQorICogc3RhdGUgZHVyaW5nIHBvd2VydXAuCisgKiAgICBsb3cgID0gMHgxYQorICogICAgaGlnaCA9IDB4MWIKKyAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMCwgSTJDX0NMSUVOVF9FTkQgfTsKKworLyogTWFnaWMgZGVmaW5pdGlvbiBvZiBhbGwgb3RoZXIgdmFyaWFibGVzIGFuZCB0aGluZ3MgKi8KK0kyQ19DTElFTlRfSU5TTU9EOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204NzUzX2kyY19kcml2ZXI7CitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOworCitzdGF0aWMgaW50IHdtODc1M19jb2RlY19wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODc1M19zb2NkZXY7CisJc3RydWN0IHdtODc1M19zZXR1cF9kYXRhICpzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXN0cnVjdCBpMmNfY2xpZW50ICppMmM7CisJaW50IHJldDsKKworCWlmIChhZGRyICE9IHNldHVwLT5pMmNfYWRkcmVzcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljbGllbnRfdGVtcGxhdGUuYWRhcHRlciA9IGFkYXA7CisJY2xpZW50X3RlbXBsYXRlLmFkZHIgPSBhZGRyOworCisJaTJjID0gIGttZW1kdXAoJmNsaWVudF90ZW1wbGF0ZSwgc2l6ZW9mKGNsaWVudF90ZW1wbGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChpMmMgPT0gTlVMTCl7CisJCWtmcmVlKGNvZGVjKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCisJcmV0ID0gaTJjX2F0dGFjaF9jbGllbnQoaTJjKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoImZhaWxlZCB0byBhdHRhY2ggY29kZWMgYXQgYWRkciAleFxuIiwgYWRkcik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHdtODc1M19pbml0KHNvY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg3NTNcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gcmV0OworCitlcnI6CisJa2ZyZWUoY29kZWMpOworCWtmcmVlKGkyYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTg3NTNfaTJjX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CisJa2ZyZWUoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NTNfaTJjX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCB3bTg3NTNfY29kZWNfcHJvYmUpOworfQorCisvKiBjb3JnaSBpMmMgY29kZWMgY29udHJvbCBsYXllciAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODc1M19pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIldNODc1MyBJMkMgQ29kZWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5pZCA9ICAgICAgICAgICAgIEkyQ19EUklWRVJJRF9XTTg3NTMsCisJLmF0dGFjaF9hZGFwdGVyID0gd204NzUzX2kyY19hdHRhY2gsCisJLmRldGFjaF9jbGllbnQgPSAgd204NzUzX2kyY19kZXRhY2gsCisJLmNvbW1hbmQgPSAgICAgICAgTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPSB7CisJLm5hbWUgPSAgICJXTTg3NTMiLAorCS5kcml2ZXIgPSAmd204NzUzX2kyY19kcml2ZXIsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgd204NzUzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgd204NzUzX3NldHVwX2RhdGEgKnNldHVwOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3Qgd204NzUzX3ByaXYgKndtODc1MzsKKwlpbnQgcmV0ID0gMDsKKworCWluZm8oIldNODc1MyBBdWRpbyBDb2RlYyAlcyIsIFdNODc1M19WRVJTSU9OKTsKKworCXNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOworCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29kZWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3bTg3NTMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204NzUzX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204NzUzID09IE5VTEwpIHsKKwkJa2ZyZWUoY29kZWMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NzUzOworCXNvY2Rldi0+Y29kZWMgPSBjb2RlYzsKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCXdtODc1M19zb2NkZXYgPSBzb2NkZXY7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNvZGVjLT5kZWxheWVkX3dvcmssIHdtODc1M193b3JrKTsKKworI2lmIGRlZmluZWQgKENPTkZJR19JMkMpIHx8IGRlZmluZWQgKENPTkZJR19JMkNfTU9EVUxFKQorCWlmIChzZXR1cC0+aTJjX2FkZHJlc3MpIHsKKwkJbm9ybWFsX2kyY1swXSA9IHNldHVwLT5pMmNfYWRkcmVzczsKKwkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204NzUzX2kyY19kcml2ZXIpOworCQlpZiAocmV0ICE9IDApCisJCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBpMmMgZHJpdmVyIik7CisJfQorI2Vsc2UKKwkJLyogQWRkIG90aGVyIGludGVyZmFjZXMgaGVyZSAqLworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZm9yY2VzIGFueSBkZWxheWVkIHdvcmsgdG8gYmUgcXVldWVkIGFuZCBydW4uCisgKi8KK3N0YXRpYyBpbnQgcnVuX2RlbGF5ZWRfd29yayhzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaykKK3sKKwlpbnQgcmV0OworCisJLyogY2FuY2VsIGFueSB3b3JrIHdhaXRpbmcgdG8gYmUgcXVldWVkLiAqLworCXJldCA9IGNhbmNlbF9kZWxheWVkX3dvcmsoZHdvcmspOworCisJLyogaWYgdGhlcmUgd2FzIGFueSB3b3JrIHdhaXRpbmcgdGhlbiB3ZSBydW4gaXQgbm93IGFuZAorCSAqIHdhaXQgZm9yIGl0J3MgY29tcGxldGlvbiAqLworCWlmIChyZXQpIHsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKGR3b3JrLCAwKTsKKwkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogcG93ZXIgZG93biBjaGlwICovCitzdGF0aWMgaW50IHdtODc1M19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisKKwlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKKwkJd204NzUzX2RhcG1fZXZlbnQoY29kZWMsIFNORFJWX0NUTF9QT1dFUl9EM2NvbGQpOworCXJ1bl9kZWxheWVkX3dvcmsoJmNvZGVjLT5kZWxheWVkX3dvcmspOworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKyNpZiBkZWZpbmVkIChDT05GSUdfSTJDKSB8fCBkZWZpbmVkIChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmd204NzUzX2kyY19kcml2ZXIpOworI2VuZGlmCisJa2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7CisJa2ZyZWUoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODc1MyA9IHsKKwkucHJvYmUgPSAJd204NzUzX3Byb2JlLAorCS5yZW1vdmUgPSAJd204NzUzX3JlbW92ZSwKKwkuc3VzcGVuZCA9IAl3bTg3NTNfc3VzcGVuZCwKKwkucmVzdW1lID0Jd204NzUzX3Jlc3VtZSwKK307CisKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NzUzKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNODc1MyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZTJhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogd204NzUzLmggIC0tICBhdWRpbyBkcml2ZXIgZm9yIFdNODc1MworICoKKyAqIENvcHlyaWdodCAyMDAzIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKKyAqICAgICAgICAgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfV004NzUzX0gKKyNkZWZpbmUgX1dNODc1M19ICisKKy8qIFdNODc1MyByZWdpc3RlciBzcGFjZSAqLworCisjZGVmaW5lIFdNODc1M19EQUMJCTB4MDEKKyNkZWZpbmUgV004NzUzX0FEQwkJMHgwMgorI2RlZmluZSBXTTg3NTNfUENNCQkweDAzCisjZGVmaW5lIFdNODc1M19ISUZJCQkweDA0CisjZGVmaW5lIFdNODc1M19JT0NUTAkJMHgwNQorI2RlZmluZSBXTTg3NTNfU1JBVEUxCQkweDA2CisjZGVmaW5lIFdNODc1M19TUkFURTIJCTB4MDcKKyNkZWZpbmUgV004NzUzX0xEQUMJCTB4MDgKKyNkZWZpbmUgV004NzUzX1JEQUMJCTB4MDkKKyNkZWZpbmUgV004NzUzX0JBU1MJCTB4MGEKKyNkZWZpbmUgV004NzUzX1RSRUJMRQkJMHgwYgorI2RlZmluZSBXTTg3NTNfQUxDMQkJMHgwYworI2RlZmluZSBXTTg3NTNfQUxDMgkJMHgwZAorI2RlZmluZSBXTTg3NTNfQUxDMwkJMHgwZQorI2RlZmluZSBXTTg3NTNfTkdBVEUJCTB4MGYKKyNkZWZpbmUgV004NzUzX0xBREMJCTB4MTAKKyNkZWZpbmUgV004NzUzX1JBREMJCTB4MTEKKyNkZWZpbmUgV004NzUzX0FEQ1RMMQkJMHgxMgorI2RlZmluZSBXTTg3NTNfM0QJCTB4MTMKKyNkZWZpbmUgV004NzUzX1BXUjEJCTB4MTQKKyNkZWZpbmUgV004NzUzX1BXUjIJCTB4MTUKKyNkZWZpbmUgV004NzUzX1BXUjMJCTB4MTYKKyNkZWZpbmUgV004NzUzX1BXUjQJCTB4MTcKKyNkZWZpbmUgV004NzUzX0lECQkweDE4CisjZGVmaW5lIFdNODc1M19JTlRQT0wJCTB4MTkKKyNkZWZpbmUgV004NzUzX0lOVEVOCQkweDFhCisjZGVmaW5lIFdNODc1M19HUElPMQkJMHgxYgorI2RlZmluZSBXTTg3NTNfR1BJTzIJCTB4MWMKKyNkZWZpbmUgV004NzUzX1JFU0VUCQkweDFmCisjZGVmaW5lIFdNODc1M19SRUNNSVgxCQkweDIwCisjZGVmaW5lIFdNODc1M19SRUNNSVgyCQkweDIxCisjZGVmaW5lIFdNODc1M19MT1VUTTEJCTB4MjIKKyNkZWZpbmUgV004NzUzX0xPVVRNMgkJMHgyMworI2RlZmluZSBXTTg3NTNfUk9VVE0xCQkweDI0CisjZGVmaW5lIFdNODc1M19ST1VUTTIJCTB4MjUKKyNkZWZpbmUgV004NzUzX01PVVRNMQkJMHgyNgorI2RlZmluZSBXTTg3NTNfTU9VVE0yCQkweDI3CisjZGVmaW5lIFdNODc1M19MT1VUMVYJCTB4MjgKKyNkZWZpbmUgV004NzUzX1JPVVQxVgkJMHgyOQorI2RlZmluZSBXTTg3NTNfTE9VVDJWCQkweDJhCisjZGVmaW5lIFdNODc1M19ST1VUMlYJCTB4MmIKKyNkZWZpbmUgV004NzUzX01PVVRWCQkweDJjCisjZGVmaW5lIFdNODc1M19PVVRDVEwJCTB4MmQKKyNkZWZpbmUgV004NzUzX0FEQ0lOCQkweDJlCisjZGVmaW5lIFdNODc1M19JTkNUTDEJCTB4MmYKKyNkZWZpbmUgV004NzUzX0lOQ1RMMgkJMHgzMAorI2RlZmluZSBXTTg3NTNfTElOVk9MCQkweDMxCisjZGVmaW5lIFdNODc1M19SSU5WT0wJCTB4MzIKKyNkZWZpbmUgV004NzUzX01JQ0JJQVMJCTB4MzMKKyNkZWZpbmUgV004NzUzX0NMT0NLCQkweDM0CisjZGVmaW5lIFdNODc1M19QTEwxQ1RMMQkJMHgzNQorI2RlZmluZSBXTTg3NTNfUExMMUNUTDIJCTB4MzYKKyNkZWZpbmUgV004NzUzX1BMTDFDVEwzCQkweDM3CisjZGVmaW5lIFdNODc1M19QTEwxQ1RMNAkJMHgzOAorI2RlZmluZSBXTTg3NTNfUExMMkNUTDEJCTB4MzkKKyNkZWZpbmUgV004NzUzX1BMTDJDVEwyCQkweDNhCisjZGVmaW5lIFdNODc1M19QTEwyQ1RMMwkJMHgzYgorI2RlZmluZSBXTTg3NTNfUExMMkNUTDQJCTB4M2MKKyNkZWZpbmUgV004NzUzX0JJQVNDVEwJCTB4M2QKKyNkZWZpbmUgV004NzUzX0FEQ1RMMgkJMHgzZgorCitzdHJ1Y3Qgd204NzUzX3NldHVwX2RhdGEgeworCXVuc2lnbmVkIHNob3J0IGkyY19hZGRyZXNzOworfTsKKworI2RlZmluZSBXTTg3NTNfUExMMQkJCTAKKyNkZWZpbmUgV004NzUzX1BMTDIJCQkxCisKKy8qIGNsb2NrIGlucHV0cyAqLworI2RlZmluZSBXTTg3NTNfTUNMSwkJMAorI2RlZmluZSBXTTg3NTNfUENNQ0xLCQkxCisKKy8qIGNsb2NrIGRpdmlkZXIgaWQncyAqLworI2RlZmluZSBXTTg3NTNfUENNRElWCQkwCisjZGVmaW5lIFdNODc1M19CQ0xLRElWCQkxCisjZGVmaW5lIFdNODc1M19WWENMS0RJVgkJMgorCisvKiBQQ00gY2xvY2sgZGl2aWRlcnMgKi8KKyNkZWZpbmUgV004NzUzX1BDTV9ESVZfMQkoMCA8PCA2KQorI2RlZmluZSBXTTg3NTNfUENNX0RJVl8zCSgyIDw8IDYpCisjZGVmaW5lIFdNODc1M19QQ01fRElWXzVfNQkoMyA8PCA2KQorI2RlZmluZSBXTTg3NTNfUENNX0RJVl8yCSg0IDw8IDYpCisjZGVmaW5lIFdNODc1M19QQ01fRElWXzQJKDUgPDwgNikKKyNkZWZpbmUgV004NzUzX1BDTV9ESVZfNgkoNiA8PCA2KQorI2RlZmluZSBXTTg3NTNfUENNX0RJVl84CSg3IDw8IDYpCisKKy8qIEJDTEsgY2xvY2sgZGl2aWRlcnMgKi8KKyNkZWZpbmUgV004NzUzX0JDTEtfRElWXzEJKDAgPDwgMykKKyNkZWZpbmUgV004NzUzX0JDTEtfRElWXzIJKDEgPDwgMykKKyNkZWZpbmUgV004NzUzX0JDTEtfRElWXzQJKDIgPDwgMykKKyNkZWZpbmUgV004NzUzX0JDTEtfRElWXzgJKDMgPDwgMykKKyNkZWZpbmUgV004NzUzX0JDTEtfRElWXzE2CSg0IDw8IDMpCisKKy8qIFZYQ0xLIGNsb2NrIGRpdmlkZXJzICovCisjZGVmaW5lIFdNODc1M19WWENMS19ESVZfMQkoMCA8PCA2KQorI2RlZmluZSBXTTg3NTNfVlhDTEtfRElWXzIJKDEgPDwgNikKKyNkZWZpbmUgV004NzUzX1ZYQ0xLX0RJVl80CSgyIDw8IDYpCisjZGVmaW5lIFdNODc1M19WWENMS19ESVZfOAkoMyA8PCA2KQorI2RlZmluZSBXTTg3NTNfVlhDTEtfRElWXzE2CSg0IDw8IDYpCisKKyNkZWZpbmUgV004NzUzX0RBSV9ISUZJCQkwCisjZGVmaW5lIFdNODc1M19EQUlfVk9JQ0UJCTEKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RhaSB3bTg3NTNfZGFpWzJdOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODc1MzsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwppbmRleCBlZTdhNjkxLi45ODZiNWQ1OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCkBAIC01NDQsNiArNTQ0LDcgQEAKIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RhaSB3bTk3MTJfZGFpW10gPSB7CiB7CiAJLm5hbWUgPSAiQUM5NyBIaUZpIiwKKwkudHlwZSA9IFNORF9TT0NfREFJX0FDOTdfQlVTLAogCS5wbGF5YmFjayA9IHsKIAkJLnN0cmVhbV9uYW1lID0gIkhpRmkgUGxheWJhY2siLAogCQkuY2hhbm5lbHNfbWluID0gMSwKQEAgLTY3NiwxNCArNjc3LDEzIEBACiAJY29kZWMgPSBzb2NkZXYtPmNvZGVjOwogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CiAKLQljb2RlYy0+cmVnX2NhY2hlID0KLQkJa3phbGxvYyhzaXplb2YodTE2KSAqIEFSUkFZX1NJWkUod205NzEyX3JlZyksIEdGUF9LRVJORUwpOworCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHdtOTcxMl9yZWcsIHNpemVvZih3bTk3MTJfcmVnKSwgR0ZQX0tFUk5FTCk7CisKIAlpZiAoY29kZWMtPnJlZ19jYWNoZSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gY2FjaGVfZXJyOwogCX0KLQltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd205NzEyX3JlZywgc2l6ZW9mKHUxNikgKiBBUlJBWV9TSVpFKHdtOTcxMl9yZWcpKTsKLQljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBzaXplb2YodTE2KSAqIEFSUkFZX1NJWkUod205NzEyX3JlZyk7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gc2l6ZW9mKHdtOTcxMl9yZWcpOwogCWNvZGVjLT5yZWdfY2FjaGVfc3RlcCA9IDI7CiAKIAljb2RlYy0+bmFtZSA9ICJXTTk3MTIiOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9LY29uZmlnIGIvc291bmQvc29jL3B4YS9LY29uZmlnCmluZGV4IGI5YWIzYjguLmE4M2UyMjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvcHhhL0tjb25maWcKQEAgLTEsNSArMSwzIEBACi1tZW51ICJTb0MgQXVkaW8gZm9yIHRoZSBJbnRlbCBQWEEyeHgiCi0KIGNvbmZpZyBTTkRfUFhBMlhYX1NPQwogCXRyaXN0YXRlICJTb0MgQXVkaW8gZm9yIHRoZSBJbnRlbCBQWEEyeHggY2hpcCIKIAlkZXBlbmRzIG9uIEFSQ0hfUFhBICYmIFNORF9TT0MKQEAgLTU1LDUgKzUzLDMgQEAKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIFNoYXJwCiAJICBaYXVydXMgU0wtQzYwMDB4IG1vZGVscyAoVG9zYSkuCi0KLWVuZG1lbnUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuaCBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuaAppbmRleCA0YzRiODgyLi5iOGNjZmVlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmgKKysrIGIvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L3NvdW5kL2FybS9weGEyeHgtYWM5Ny5oCisgKiBsaW51eC9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5oIGIvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmgKaW5kZXggYTI0ODRmMC4uNDQzNWJkOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmgKKysrIGIvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvc291bmQvYXJtL3B4YTJ4eC1pMnMuaAorICogbGludXgvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcgYi9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NGEzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK2NvbmZpZyBTTkRfUzNDMjRYWF9TT0MKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIGZvciB0aGUgU2Ftc3VuZyBTM0MyNFhYIGNoaXBzIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwICYmIFNORF9TT0MKKwloZWxwCisJICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBjb2RlY3MgYXR0YWNoZWQgdG8KKwkgIHRoZSBTM0MyNFhYIEFDOTcsIEkyUyBvciBTU1AgaW50ZXJmYWNlLiBZb3Ugd2lsbCBhbHNvIG5lZWQKKwkgIHRvIHNlbGVjdCB0aGUgYXVkaW8gaW50ZXJmYWNlcyB0byBzdXBwb3J0IGJlbG93LgorCitjb25maWcgU05EX1MzQzI0WFhfU09DX0kyUworCXRyaXN0YXRlCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMGZmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKKyMgUzNjMjRYWCBQbGF0Zm9ybSBTdXBwb3J0CitzbmQtc29jLXMzYzI0eHgtb2JqcyA6PSBzM2MyNHh4LXBjbS5vCitzbmQtc29jLXMzYzI0eHgtaTJzLW9ianMgOj0gczNjMjR4eC1pMnMubworCitvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DKSArPSBzbmQtc29jLXMzYzI0eHgubworb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19JMlMpICs9IHNuZC1zb2MtczNjMjR4eC1pMnMubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtaTJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhMzE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtaTJzLmMKQEAgLTAsMCArMSw0NDEgQEAKKy8qCisgKiBzM2MyNHh4LWkycy5jICAtLSAgQUxTQSBTb2MgQXVkaW8gTGF5ZXIKKyAqCisgKiAoYykgMjAwNiBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogR3JhZW1lIEdyZWdvcnkgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKgorICogKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoKKyAqICBSZXZpc2lvbiBoaXN0b3J5CisgKiAgICAxMXRoIERlYyAyMDA2ICAgTWVyZ2VkIHdpdGggU2ltdGVjIGRyaXZlcgorICogICAgMTB0aCBOb3YgMjAwNiAgIEluaXRpYWwgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdWRpby5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KKworI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCisjaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKKworI2RlZmluZSBTM0MyNFhYX0kyU19ERUJVRyAwCisjaWYgUzNDMjRYWF9JMlNfREVCVUcKKyNkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIHgpCisjZWxzZQorI2RlZmluZSBEQkcoeC4uLikKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2MyNHh4X2RtYV9jbGllbnRfb3V0ID0geworCS5uYW1lID0gIkkyUyBQQ00gU3RlcmVvIG91dCIKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0eHhfZG1hX2NsaWVudF9pbiA9IHsKKwkubmFtZSA9ICJJMlMgUENNIFN0ZXJlbyBpbiIKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9wY21fZG1hX3BhcmFtcyBzM2MyNHh4X2kyc19wY21fc3RlcmVvX291dCA9IHsKKwkuY2xpZW50CQk9ICZzM2MyNHh4X2RtYV9jbGllbnRfb3V0LAorCS5jaGFubmVsCT0gRE1BQ0hfSTJTX09VVCwKKwkuZG1hX2FkZHIJPSBTM0MyNDEwX1BBX0lJUyArIFMzQzI0MTBfSUlTRklGTywKKwkuZG1hX3NpemUJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zIHMzYzI0eHhfaTJzX3BjbV9zdGVyZW9faW4gPSB7CisJLmNsaWVudAkJPSAmczNjMjR4eF9kbWFfY2xpZW50X2luLAorCS5jaGFubmVsCT0gRE1BQ0hfSTJTX0lOLAorCS5kbWFfYWRkcgk9IFMzQzI0MTBfUEFfSUlTICsgUzNDMjQxMF9JSVNGSUZPLAorCS5kbWFfc2l6ZQk9IDIsCit9OworCitzdHJ1Y3QgczNjMjR4eF9pMnNfaW5mbyB7CisJdm9pZCBfX2lvbWVtCSpyZWdzOworCXN0cnVjdCBjbGsJKmlpc19jbGs7Cit9Oworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2kyc19pbmZvIHMzYzI0eHhfaTJzOworCitzdGF0aWMgdm9pZCBzM2MyNHh4X3NuZF90eGN0cmwoaW50IG9uKQoreworCXUzMiBpaXNmY29uOworCXUzMiBpaXNjb247CisJdTMyIGlpc21vZDsKKworCURCRygiRW50ZXJlZCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWlpc2Zjb24gPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNGQ09OKTsKKwlpaXNjb24gID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKKwlpaXNtb2QgID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKKworCURCRygicjogSUlTQ09OOiAlbHggSUlTTU9EOiAlbHggSUlTRkNPTjogJWx4XG4iLCBpaXNjb24sIGlpc21vZCwgaWlzZmNvbik7CisKKwlpZiAob24pIHsKKwkJaWlzZmNvbiB8PSBTM0MyNDEwX0lJU0ZDT05fVFhETUEgfCBTM0MyNDEwX0lJU0ZDT05fVFhFTkFCTEU7CisJCWlpc2NvbiAgfD0gUzNDMjQxMF9JSVNDT05fVFhETUFFTiB8IFMzQzI0MTBfSUlTQ09OX0lJU0VOOworCQlpaXNjb24gICY9IH5TM0MyNDEwX0lJU0NPTl9UWElETEU7CisJCWlpc21vZCAgfD0gUzNDMjQxMF9JSVNNT0RfVFhNT0RFOworCisJCXdyaXRlbChpaXNtb2QsICBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOworCQl3cml0ZWwoaWlzZmNvbiwgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTRkNPTik7CisJCXdyaXRlbChpaXNjb24sICBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNDT04pOworCX0gZWxzZSB7CisJCS8qIG5vdGUsIHdlIGhhdmUgdG8gZGlzYWJsZSB0aGUgRklGT3Mgb3RoZXJ3aXNlIGJhZCB0aGluZ3MKKwkJICogc2VlbSB0byBoYXBwZW4gd2hlbiB0aGUgRE1BIHN0b3BzLiBBY2NvcmRpbmcgdG8gdGhlCisJCSAqIFNhbXN1bmcgc3VwcGxpZWQga2VybmVsLCB0aGlzIHNob3VsZCBhbGxvdyB0aGUgRE1BCisJCSAqIGVuZ2luZSBhbmQgRklGT3MgdG8gcmVzZXQuIElmIHRoaXMgaXNuJ3QgYWxsb3dlZCwgdGhlCisJCSAqIERNQSBlbmdpbmUgd2lsbCBzaW1wbHkgZnJlZXplIHJhbmRvbWx5LgorCQkgKi8KKworCQlpaXNmY29uICY9IH5TM0MyNDEwX0lJU0ZDT05fVFhFTkFCTEU7CisJCWlpc2Zjb24gJj0gflMzQzI0MTBfSUlTRkNPTl9UWERNQTsKKwkJaWlzY29uICB8PSAgUzNDMjQxMF9JSVNDT05fVFhJRExFOworCQlpaXNjb24gICY9IH5TM0MyNDEwX0lJU0NPTl9UWERNQUVOOworCQlpaXNtb2QgICY9IH5TM0MyNDEwX0lJU01PRF9UWE1PREU7CisKKwkJd3JpdGVsKGlpc2NvbiwgIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CisJCXdyaXRlbChpaXNmY29uLCBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNGQ09OKTsKKwkJd3JpdGVsKGlpc21vZCwgIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CisJfQorCisJREJHKCJ3OiBJSVNDT046ICVseCBJSVNNT0Q6ICVseCBJSVNGQ09OOiAlbHhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKK30KKworc3RhdGljIHZvaWQgczNjMjR4eF9zbmRfcnhjdHJsKGludCBvbikKK3sKKwl1MzIgaWlzZmNvbjsKKwl1MzIgaWlzY29uOworCXUzMiBpaXNtb2Q7CisKKwlEQkcoIkVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpaXNmY29uID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTRkNPTik7CisJaWlzY29uICA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CisJaWlzbW9kICA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CisKKwlEQkcoInI6IElJU0NPTjogJWx4IElJU01PRDogJWx4IElJU0ZDT046ICVseFxuIiwgaWlzY29uLCBpaXNtb2QsIGlpc2Zjb24pOworCisJaWYgKG9uKSB7CisJCWlpc2Zjb24gfD0gUzNDMjQxMF9JSVNGQ09OX1JYRE1BIHwgUzNDMjQxMF9JSVNGQ09OX1JYRU5BQkxFOworCQlpaXNjb24gIHw9IFMzQzI0MTBfSUlTQ09OX1JYRE1BRU4gfCBTM0MyNDEwX0lJU0NPTl9JSVNFTjsKKwkJaWlzY29uICAmPSB+UzNDMjQxMF9JSVNDT05fUlhJRExFOworCQlpaXNtb2QgIHw9IFMzQzI0MTBfSUlTTU9EX1JYTU9ERTsKKworCQl3cml0ZWwoaWlzbW9kLCAgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKKwkJd3JpdGVsKGlpc2Zjb24sIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0ZDT04pOworCQl3cml0ZWwoaWlzY29uLCAgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKKwl9IGVsc2UgeworCQkvKiBub3RlLCB3ZSBoYXZlIHRvIGRpc2FibGUgdGhlIEZJRk9zIG90aGVyd2lzZSBiYWQgdGhpbmdzCisJCSAqIHNlZW0gdG8gaGFwcGVuIHdoZW4gdGhlIERNQSBzdG9wcy4gQWNjb3JkaW5nIHRvIHRoZQorCQkgKiBTYW1zdW5nIHN1cHBsaWVkIGtlcm5lbCwgdGhpcyBzaG91bGQgYWxsb3cgdGhlIERNQQorCQkgKiBlbmdpbmUgYW5kIEZJRk9zIHRvIHJlc2V0LiBJZiB0aGlzIGlzbid0IGFsbG93ZWQsIHRoZQorCQkgKiBETUEgZW5naW5lIHdpbGwgc2ltcGx5IGZyZWV6ZSByYW5kb21seS4KKwkJICovCisKKyAgICAgICAgaWlzZmNvbiAmPSB+UzNDMjQxMF9JSVNGQ09OX1JYRU5BQkxFOworICAgICAgICBpaXNmY29uICY9IH5TM0MyNDEwX0lJU0ZDT05fUlhETUE7CisgICAgICAgIGlpc2NvbiAgfD0gUzNDMjQxMF9JSVNDT05fUlhJRExFOworICAgICAgICBpaXNjb24gICY9IH5TM0MyNDEwX0lJU0NPTl9SWERNQUVOOworCQlpaXNtb2QgICY9IH5TM0MyNDEwX0lJU01PRF9SWE1PREU7CisKKwkJd3JpdGVsKGlpc2Zjb24sIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0ZDT04pOworCQl3cml0ZWwoaWlzY29uLCAgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKKwkJd3JpdGVsKGlpc21vZCwgIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CisJfQorCisJREJHKCJ3OiBJSVNDT046ICVseCBJSVNNT0Q6ICVseCBJSVNGQ09OOiAlbHhcbiIsIGlpc2NvbiwgaWlzbW9kLCBpaXNmY29uKTsKK30KKworLyoKKyAqIFdhaXQgZm9yIHRoZSBMUiBzaWduYWwgdG8gYWxsb3cgc3luY2hyb25pc2F0aW9uIHRvIHRoZSBML1IgY2xvY2sKKyAqIGZyb20gdGhlIGNvZGVjLiBNYXkgb25seSBiZSBuZWVkZWQgZm9yIHNsYXZlIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgczNjMjR4eF9zbmRfbHJzeW5jKHZvaWQpCit7CisJdTMyIGlpc2NvbjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1KTsKKworCURCRygiRW50ZXJlZCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXdoaWxlICgxKSB7CisJCWlpc2NvbiA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CisJCWlmIChpaXNjb24gJiBTM0MyNDEwX0lJU0NPTl9MUklOREVYKQorCQkJYnJlYWs7CisKKwkJaWYgKHRpbWVvdXQgPCBqaWZmaWVzKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIENQVSBpcyB0aGUgbWFzdGVyIG9yIHNsYXZlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHMzYzI0eHhfc25kX2lzX2Nsa21hc3Rlcih2b2lkKQoreworCURCRygiRW50ZXJlZCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAocmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKSAmIFMzQzI0MTBfSUlTTU9EX1NMQVZFKSA/IDA6MTsKK30KKworLyoKKyAqIFNldCBTM0MyNHh4IEkyUyBEQUkgZm9ybWF0CisgKi8KK3N0YXRpYyBpbnQgczNjMjR4eF9pMnNfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19jcHVfZGFpICpjcHVfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXUzMiBpaXNtb2Q7CisKKwlEQkcoIkVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpaXNtb2QgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOworCURCRygiaHdfcGFyYW1zIHI6IElJU01PRDogJWx4IFxuIiwgaWlzbW9kKTsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWlpc21vZCB8PSBTM0MyNDEwX0lJU01PRF9TTEFWRTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWlpc21vZCB8PSBTM0MyNDEwX0lJU01PRF9NU0I7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3cml0ZWwoaWlzbW9kLCBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOworCURCRygiaHdfcGFyYW1zIHc6IElJU01PRDogJWx4IFxuIiwgaWlzbW9kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNHh4X2kyc19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXUzMiBpaXNtb2Q7CisKKwlEQkcoIkVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhID0gJnMzYzI0eHhfaTJzX3BjbV9zdGVyZW9fb3V0OworCWVsc2UKKwkJcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhID0gJnMzYzI0eHhfaTJzX3BjbV9zdGVyZW9faW47CisKKwkvKiBXb3JraW5nIGNvcGllcyBvZiByZWdpc3RlciAqLworCWlpc21vZCA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CisJREJHKCJod19wYXJhbXMgcjogSUlTTU9EOiAlbHhcbiIsIGlpc21vZCk7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TODoKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJaWlzbW9kIHw9IFMzQzI0MTBfSUlTTU9EXzE2QklUOworCQlicmVhazsKKwl9CisKKwl3cml0ZWwoaWlzbW9kLCBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOworCURCRygiaHdfcGFyYW1zIHc6IElJU01PRDogJWx4XG4iLCBpaXNtb2QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfaTJzX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJaW50IHJldCA9IDA7CisKKwlEQkcoIkVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpZiAoIXMzYzI0eHhfc25kX2lzX2Nsa21hc3RlcigpKSB7CisJCQlyZXQgPSBzM2MyNHh4X3NuZF9scnN5bmMoKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBleGl0X2VycjsKKwkJfQorCisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCQlzM2MyNHh4X3NuZF9yeGN0cmwoMSk7CisJCWVsc2UKKwkJCXMzYzI0eHhfc25kX3R4Y3RybCgxKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCQlzM2MyNHh4X3NuZF9yeGN0cmwoMCk7CisJCWVsc2UKKwkJCXMzYzI0eHhfc25kX3R4Y3RybCgwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCitleGl0X2VycjoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2V0IFMzQzI0eHggQ2xvY2sgc291cmNlCisgKi8KK3N0YXRpYyBpbnQgczNjMjR4eF9pMnNfc2V0X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19jcHVfZGFpICpjcHVfZGFpLAorCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXUzMiBpaXNtb2QgPSByZWFkbChzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOworCisJREJHKCJFbnRlcmVkICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJaWlzbW9kICY9IH5TM0MyNDQwX0lJU01PRF9NUExMOworCisJc3dpdGNoIChjbGtfaWQpIHsKKwljYXNlIFMzQzI0WFhfQ0xLU1JDX1BDTEs6CisJCWJyZWFrOworCWNhc2UgUzNDMjRYWF9DTEtTUkNfTVBMTDoKKwkJaWlzbW9kIHw9IFMzQzI0NDBfSUlTTU9EX01QTEw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdyaXRlbChpaXNtb2QsIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgUzNDMjR4eCBDbG9jayBkaXZpZGVycworICovCitzdGF0aWMgaW50IHMzYzI0eHhfaTJzX3NldF9jbGtkaXYoc3RydWN0IHNuZF9zb2NfY3B1X2RhaSAqY3B1X2RhaSwKKwlpbnQgZGl2X2lkLCBpbnQgZGl2KQoreworCXUzMiByZWc7CisKKwlEQkcoIkVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKGRpdl9pZCkgeworCWNhc2UgUzNDMjRYWF9ESVZfTUNMSzoKKwkJcmVnID0gcmVhZGwoczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKSAmIH5TM0MyNDEwX0lJU01PRF9GU19NQVNLOworCQl3cml0ZWwocmVnIHwgZGl2LCBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNNT0QpOworCQlicmVhazsKKwljYXNlIFMzQzI0WFhfRElWX0JDTEs6CisJCXJlZyA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU01PRCkgJiB+KFMzQzI0MTBfSUlTTU9EXzM4NEZTKTsKKwkJd3JpdGVsKHJlZyB8IGRpdiwgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTTU9EKTsKKwkJYnJlYWs7CisJY2FzZSBTM0MyNFhYX0RJVl9QUkVTQ0FMRVI6CisJCXdyaXRlbChkaXYsIHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU1BTUik7CisJCXJlZyA9IHJlYWRsKHMzYzI0eHhfaTJzLnJlZ3MgKyBTM0MyNDEwX0lJU0NPTik7CisJCXdyaXRlbChyZWcgfCBTM0MyNDEwX0lJU0NPTl9QU0NFTiwgczNjMjR4eF9pMnMucmVncyArIFMzQzI0MTBfSUlTQ09OKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUbyBhdm9pZCBkdXBsaWNhdGluZyBjbG9jayBjb2RlLCBhbGxvdyBtYWNoaW5lIGRyaXZlciB0bworICogZ2V0IHRoZSBjbG9ja3JhdGUgZnJvbSBoZXJlLgorICovCit1MzIgczNjMjR4eF9pMnNfZ2V0X2Nsb2NrcmF0ZSh2b2lkKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoczNjMjR4eF9pMnMuaWlzX2Nsayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2MyNHh4X2kyc19nZXRfY2xvY2tyYXRlKTsKKworc3RhdGljIGludCBzM2MyNHh4X2kyc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCURCRygiRW50ZXJlZCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXMzYzI0eHhfaTJzLnJlZ3MgPSBpb3JlbWFwKFMzQzI0MTBfUEFfSUlTLCAweDEwMCk7CisJaWYgKHMzYzI0eHhfaTJzLnJlZ3MgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTlhJTzsKKworCXMzYzI0eHhfaTJzLmlpc19jbGs9Y2xrX2dldCgmcGRldi0+ZGV2LCAiaWlzIik7CisJaWYgKHMzYzI0eHhfaTJzLmlpc19jbGsgPT0gTlVMTCkgeworCQlEQkcoImZhaWxlZCB0byBnZXQgaWlzX2Nsb2NrXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWNsa19lbmFibGUoczNjMjR4eF9pMnMuaWlzX2Nsayk7CisKKwkvKiBDb25maWd1cmUgdGhlIEkyUyBwaW5zIGluIGNvcnJlY3QgbW9kZSAqLworCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUwLCBTM0MyNDEwX0dQRTBfSTJTTFJDSyk7CisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTEsIFMzQzI0MTBfR1BFMV9JMlNTQ0xLKTsKKwlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMiwgUzNDMjQxMF9HUEUyX0NEQ0xLKTsKKwlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMywgUzNDMjQxMF9HUEUzX0kyU1NESSk7CisJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTQsIFMzQzI0MTBfR1BFNF9JMlNTRE8pOworCisJd3JpdGVsKFMzQzI0MTBfSUlTQ09OX0lJU0VOLCBzM2MyNHh4X2kycy5yZWdzICsgUzNDMjQxMF9JSVNDT04pOworCisJczNjMjR4eF9zbmRfdHhjdHJsKDApOworCXMzYzI0eHhfc25kX3J4Y3RybCgwKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFMzQzI0WFhfSTJTX1JBVEVTIFwKKwkoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzExMDI1IHwgU05EUlZfUENNX1JBVEVfMTYwMDAgfCBcCisJU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAorCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfODgyMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCkKKworc3RydWN0IHNuZF9zb2NfY3B1X2RhaSBzM2MyNHh4X2kyc19kYWkgPSB7CisJLm5hbWUgPSAiczNjMjR4eC1pMnMiLAorCS5pZCA9IDAsCisJLnR5cGUgPSBTTkRfU09DX0RBSV9JMlMsCisJLnByb2JlID0gczNjMjR4eF9pMnNfcHJvYmUsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFMzQzI0WFhfSTJTX1JBVEVTLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFMzQzI0WFhfSTJTX1JBVEVTLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAorCS5vcHMgPSB7CisJCS50cmlnZ2VyID0gczNjMjR4eF9pMnNfdHJpZ2dlciwKKwkJLmh3X3BhcmFtcyA9IHMzYzI0eHhfaTJzX2h3X3BhcmFtcyx9LAorCS5kYWlfb3BzID0geworCQkuc2V0X2ZtdCA9IHMzYzI0eHhfaTJzX3NldF9mbXQsCisJCS5zZXRfY2xrZGl2ID0gczNjMjR4eF9pMnNfc2V0X2Nsa2RpdiwKKwkJLnNldF9zeXNjbGsgPSBzM2MyNHh4X2kyc19zZXRfc3lzY2xrLAorCX0sCit9OworRVhQT1JUX1NZTUJPTF9HUEwoczNjMjR4eF9pMnNfZGFpKTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJzM2MyNHh4IEkyUyBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5oIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzdiNGVjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogczNjMjR4eC1pMnMuYyAgLS0gIEFMU0EgU29jIEF1ZGlvIExheWVyCisgKgorICogQ29weXJpZ2h0IDIwMDUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqIEF1dGhvcjogR3JhZW1lIEdyZWdvcnkKKyAqICAgICAgICAgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFJldmlzaW9uIGhpc3RvcnkKKyAqICAgIDEwdGggTm92IDIwMDYgICBJbml0aWFsIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBTM0MyNFhYSTJTX0hfCisjZGVmaW5lIFMzQzI0WFhJMlNfSF8KKworLyogY2xvY2sgc291cmNlcyAqLworI2RlZmluZSBTM0MyNFhYX0NMS1NSQ19QQ0xLIDAKKyNkZWZpbmUgUzNDMjRYWF9DTEtTUkNfTVBMTCAxCisKKy8qIENsb2NrIGRpdmlkZXJzICovCisjZGVmaW5lIFMzQzI0WFhfRElWX01DTEsJMAorI2RlZmluZSBTM0MyNFhYX0RJVl9CQ0xLCTEKKyNkZWZpbmUgUzNDMjRYWF9ESVZfUFJFU0NBTEVSCTIKKworLyogcHJlc2NhbGVyICovCisjZGVmaW5lIFMzQzI0WFhfUFJFU0NBTEUoYSxiKSBcCisJKCgoYSAtIDEpIDw8IFMzQzI0MTBfSUlTUFNSX0lOVFNISUZUKSB8ICgoYiAtIDEpIDw8IFMzQzI0MTBfSUlTUFNSX0VYVFNIRklUKSkKKwordTMyIHMzYzI0eHhfaTJzX2dldF9jbG9ja3JhdGUodm9pZCk7CisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jcHVfZGFpIHMzYzI0eHhfaTJzX2RhaTsKKworI2VuZGlmIC8qUzNDMjRYWEkyU19IXyovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmJkYzNjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYwpAQCAtMCwwICsxLDQ3MCBAQAorLyoKKyAqIHMzYzI0eHgtcGNtLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgorICoKKyAqIChjKSAyMDA2IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBHcmFlbWUgR3JlZ29yeSBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqCisgKiAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgUmV2aXNpb24gaGlzdG9yeQorICogICAgMTF0aCBEZWMgMjAwNiAgIE1lcmdlZCB3aXRoIFNpbXRlYyBkcml2ZXIKKyAqICAgIDEwdGggTm92IDIwMDYgICBJbml0aWFsIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXVkaW8uaD4KKworI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCisKKyNkZWZpbmUgUzNDMjRYWF9QQ01fREVCVUcgMAorI2lmIFMzQzI0WFhfUENNX0RFQlVHCisjZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyB4KQorI2Vsc2UKKyNkZWZpbmUgREJHKHguLi4pCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHMzYzI0eHhfcGNtX2hhcmR3YXJlID0geworCS5pbmZvCQkJPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJICAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCQkgICAgU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJCSAgICBTTkRSVl9QQ01fRk1UQklUX1UxNl9MRSB8CisJCQkJICAgIFNORFJWX1BDTV9GTVRCSVRfVTggfAorCQkJCSAgICBTTkRSVl9QQ01fRk1UQklUX1M4LAorCS5jaGFubmVsc19taW4JCT0gMiwKKwkuY2hhbm5lbHNfbWF4CQk9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXgJPSAxMjgqMTAyNCwKKwkucGVyaW9kX2J5dGVzX21pbgk9IFBBR0VfU0laRSwKKwkucGVyaW9kX2J5dGVzX21heAk9IFBBR0VfU0laRSoyLAorCS5wZXJpb2RzX21pbgkJPSAyLAorCS5wZXJpb2RzX21heAkJPSAxMjgsCisJLmZpZm9fc2l6ZQkJPSAzMiwKK307CisKK3N0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSB7CisJc3BpbmxvY2tfdCBsb2NrOworCWludCBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgZG1hX2xvYWRlZDsKKwl1bnNpZ25lZCBpbnQgZG1hX2xpbWl0OworCXVuc2lnbmVkIGludCBkbWFfcGVyaW9kOworCWRtYV9hZGRyX3QgZG1hX3N0YXJ0OworCWRtYV9hZGRyX3QgZG1hX3BvczsKKwlkbWFfYWRkcl90IGRtYV9lbmQ7CisJc3RydWN0IHMzYzI0eHhfcGNtX2RtYV9wYXJhbXMgKnBhcmFtczsKK307CisKKy8qIHMzYzI0eHhfcGNtX2VucXVldWUKKyAqCisgKiBwbGFjZSBhIGRtYSBidWZmZXIgb250byB0aGUgcXVldWUgZm9yIHRoZSBkbWEgc3lzdGVtCisgKiB0byBoYW5kbGUuCisqLworc3RhdGljIHZvaWQgczNjMjR4eF9wY21fZW5xdWV1ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlkbWFfYWRkcl90IHBvcyA9IHBydGQtPmRtYV9wb3M7CisJaW50IHJldDsKKworCURCRygiRW50ZXJlZCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXdoaWxlIChwcnRkLT5kbWFfbG9hZGVkIDwgcHJ0ZC0+ZG1hX2xpbWl0KSB7CisJCXVuc2lnbmVkIGxvbmcgbGVuID0gcHJ0ZC0+ZG1hX3BlcmlvZDsKKworCQlEQkcoImRtYV9sb2FkZWQ6ICVkXG4iLHBydGQtPmRtYV9sb2FkZWQpOworCisJCWlmICgocG9zICsgbGVuKSA+IHBydGQtPmRtYV9lbmQpIHsKKwkJCWxlbiAgPSBwcnRkLT5kbWFfZW5kIC0gcG9zOworCQkJREJHKEtFUk5fREVCVUcgIiVzOiBjb3JyZWN0ZWQgZG1hIGxlbiAlbGRcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBsZW4pOworCQl9CisKKwkJcmV0ID0gczNjMjQxMF9kbWFfZW5xdWV1ZShwcnRkLT5wYXJhbXMtPmNoYW5uZWwsIAorCQkJc3Vic3RyZWFtLCBwb3MsIGxlbik7CisKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlwcnRkLT5kbWFfbG9hZGVkKys7CisJCQlwb3MgKz0gcHJ0ZC0+ZG1hX3BlcmlvZDsKKwkJCWlmIChwb3MgPj0gcHJ0ZC0+ZG1hX2VuZCkKKwkJCQlwb3MgPSBwcnRkLT5kbWFfc3RhcnQ7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorCisJcHJ0ZC0+ZG1hX3BvcyA9IHBvczsKK30KKworc3RhdGljIHZvaWQgczNjMjR4eF9hdWRpb19idWZmZG9uZShzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbm5lbCwKKwkJCQl2b2lkICpkZXZfaWQsIGludCBzaXplLAorCQkJCWVudW0gczNjMjQxMF9kbWFfYnVmZnJlc3VsdCByZXN1bHQpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBkZXZfaWQ7CisJc3RydWN0IHMzYzI0eHhfcnVudGltZV9kYXRhICpwcnRkOworCisJREJHKCJFbnRlcmVkICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHJlc3VsdCA9PSBTM0MyNDEwX1JFU19BQk9SVCB8fCByZXN1bHQgPT0gUzNDMjQxMF9SRVNfRVJSKQorCQlyZXR1cm47CisKKwlwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJCisJaWYgKHN1YnN0cmVhbSkKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCisJc3Bpbl9sb2NrKCZwcnRkLT5sb2NrKTsKKwlpZiAocHJ0ZC0+c3RhdGUgJiBTVF9SVU5OSU5HKSB7CisJCXBydGQtPmRtYV9sb2FkZWQtLTsKKwkJczNjMjR4eF9wY21fZW5xdWV1ZShzdWJzdHJlYW0pOworCX0KKworCXNwaW5fdW5sb2NrKCZwcnRkLT5sb2NrKTsKK30KKworc3RhdGljIGludCBzM2MyNHh4X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zICpkbWEgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7CisJdW5zaWduZWQgbG9uZyB0b3RieXRlcyA9IHBhcmFtc19idWZmZXJfYnl0ZXMocGFyYW1zKTsKKwlpbnQgcmV0PTA7CisKKwlEQkcoIkVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiByZXR1cm4gaWYgdGhpcyBpcyBhIGJ1ZmZlcmxlc3MgdHJhbnNmZXIgZS5nLgorCSAqIGNvZGVjIDwtLT4gQlQgY29kZWMgb3IgR1NNIG1vZGVtIC0tIGxnIEZJWE1FICovCisJaWYgKCFkbWEpCisJCXJldHVybiAwOworCisJLyogcHJlcGFyZSBETUEgKi8KKwlwcnRkLT5wYXJhbXMgPSBkbWE7CisKKwlEQkcoInBhcmFtcyAlcCwgY2xpZW50ICVwLCBjaGFubmVsICVkXG4iLCBwcnRkLT5wYXJhbXMsCisJCXBydGQtPnBhcmFtcy0+Y2xpZW50LCBwcnRkLT5wYXJhbXMtPmNoYW5uZWwpOworCisJcmV0ID0gczNjMjQxMF9kbWFfcmVxdWVzdChwcnRkLT5wYXJhbXMtPmNoYW5uZWwsCisJCQkJICBwcnRkLT5wYXJhbXMtPmNsaWVudCwgTlVMTCk7CisKKwlpZiAocmV0KSB7CisJCURCRyhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBkbWEgY2hhbm5lbFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogY2hhbm5lbCBuZWVkcyBjb25maWd1cmluZyBmb3IgbWVtPT5kZXZpY2UsIGluY3JlbWVudCBtZW1vcnkgYWRkciwKKwkgKiBzeW5jIHRvIHBjbGssIGhhbGYtd29yZCB0cmFuc2ZlcnMgdG8gdGhlIElJUy1GSUZPLiAqLworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXMzYzI0MTBfZG1hX2RldmNvbmZpZyhwcnRkLT5wYXJhbXMtPmNoYW5uZWwsCisJCQkJUzNDMjQxMF9ETUFTUkNfTUVNLCBTM0MyNDEwX0RJU1JDQ19JTkMgfAorCQkJCVMzQzI0MTBfRElTUkNDX0FQQiwgcHJ0ZC0+cGFyYW1zLT5kbWFfYWRkcik7CisKKwkJczNjMjQxMF9kbWFfY29uZmlnKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwKKwkJCQlwcnRkLT5wYXJhbXMtPmRtYV9zaXplLAorCQkJCVMzQzI0MTBfRENPTl9TWU5DX1BDTEsgfCAKKwkJCQlTM0MyNDEwX0RDT05fSEFORFNIQUtFKTsKKwl9IGVsc2UgeworCQlzM2MyNDEwX2RtYV9jb25maWcocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLAorCQkJCXBydGQtPnBhcmFtcy0+ZG1hX3NpemUsCisJCQkJUzNDMjQxMF9EQ09OX0hBTkRTSEFLRSB8IAorCQkJCVMzQzI0MTBfRENPTl9TWU5DX1BDTEspOworCisJCXMzYzI0MTBfZG1hX2RldmNvbmZpZyhwcnRkLT5wYXJhbXMtPmNoYW5uZWwsCisJCQkJCVMzQzI0MTBfRE1BU1JDX0hXLCAweDMsCisJCQkJCXBydGQtPnBhcmFtcy0+ZG1hX2FkZHIpOworCX0KKworCXMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihwcnRkLT5wYXJhbXMtPmNoYW5uZWwsCisJCQkJICAgIHMzYzI0eHhfYXVkaW9fYnVmZmRvbmUpOworCisJc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc3Vic3RyZWFtLCAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyKTsKKworCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IHRvdGJ5dGVzOworCisJc3Bpbl9sb2NrX2lycSgmcHJ0ZC0+bG9jayk7CisJcHJ0ZC0+ZG1hX2xvYWRlZCA9IDA7CisJcHJ0ZC0+ZG1hX2xpbWl0ID0gcnVudGltZS0+aHcucGVyaW9kc19taW47CisJcHJ0ZC0+ZG1hX3BlcmlvZCA9IHBhcmFtc19wZXJpb2RfYnl0ZXMocGFyYW1zKTsKKwlwcnRkLT5kbWFfc3RhcnQgPSBydW50aW1lLT5kbWFfYWRkcjsKKwlwcnRkLT5kbWFfcG9zID0gcHJ0ZC0+ZG1hX3N0YXJ0OworCXBydGQtPmRtYV9lbmQgPSBwcnRkLT5kbWFfc3RhcnQgKyB0b3RieXRlczsKKwlzcGluX3VubG9ja19pcnEoJnBydGQtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCURCRygiRW50ZXJlZCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIFRPRE8gLSBkbyB3ZSBuZWVkIHRvIGVuc3VyZSBETUEgZmx1c2hlZCAqLworCXNuZF9wY21fc2V0X3J1bnRpbWVfYnVmZmVyKHN1YnN0cmVhbSwgTlVMTCk7CisKKwlpZiAocHJ0ZC0+cGFyYW1zKSB7CisJCXMzYzI0MTBfZG1hX2ZyZWUocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLCBwcnRkLT5wYXJhbXMtPmNsaWVudCk7CisJCXBydGQtPnBhcmFtcyA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCURCRygiRW50ZXJlZCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHJldHVybiBpZiB0aGlzIGlzIGEgYnVmZmVybGVzcyB0cmFuc2ZlciBlLmcuCisJICogY29kZWMgPC0tPiBCVCBjb2RlYyBvciBHU00gbW9kZW0gLS0gbGcgRklYTUUgKi8KKwlpZiAoIXBydGQtPnBhcmFtcykKKwkgCXJldHVybiAwOworCisJLyogZmx1c2ggdGhlIERNQSBjaGFubmVsICovCisJczNjMjQxMF9kbWFfY3RybChwcnRkLT5wYXJhbXMtPmNoYW5uZWwsIFMzQzI0MTBfRE1BT1BfRkxVU0gpOworCXBydGQtPmRtYV9sb2FkZWQgPSAwOworCXBydGQtPmRtYV9wb3MgPSBwcnRkLT5kbWFfc3RhcnQ7CisKKwkvKiBlbnF1ZXVlIGRtYSBidWZmZXJzICovCisJczNjMjR4eF9wY21fZW5xdWV1ZShzdWJzdHJlYW0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzM2MyNHh4X3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQgPSAwOworCisJREJHKCJFbnRlcmVkICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrKCZwcnRkLT5sb2NrKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCXBydGQtPnN0YXRlIHw9IFNUX1JVTk5JTkc7CisJCXMzYzI0MTBfZG1hX2N0cmwocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLCBTM0MyNDEwX0RNQU9QX1NUQVJUKTsKKwkJczNjMjQxMF9kbWFfY3RybChwcnRkLT5wYXJhbXMtPmNoYW5uZWwsIFMzQzI0MTBfRE1BT1BfU1RBUlRFRCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCXBydGQtPnN0YXRlICY9IH5TVF9SVU5OSU5HOworCQlzM2MyNDEwX2RtYV9jdHJsKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwgUzNDMjQxMF9ETUFPUF9TVE9QKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9jaygmcHJ0ZC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgCisJczNjMjR4eF9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHJlczsKKwlkbWFfYWRkcl90IHNyYywgZHN0OworCisJREJHKCJFbnRlcmVkICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrKCZwcnRkLT5sb2NrKTsKKwlzM2MyNDEwX2RtYV9nZXRwb3NpdGlvbihwcnRkLT5wYXJhbXMtPmNoYW5uZWwsICZzcmMsICZkc3QpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkKKwkJcmVzID0gZHN0IC0gcHJ0ZC0+ZG1hX3N0YXJ0OworCWVsc2UKKwkJcmVzID0gc3JjIC0gcHJ0ZC0+ZG1hX3N0YXJ0OworCisJc3Bpbl91bmxvY2soJnBydGQtPmxvY2spOworCisJREJHKCJQb2ludGVyICV4ICV4XG4iLHNyYyxkc3QpOworCisJLyogd2Ugc2VlbSB0byBiZSBnZXR0aW5nIHRoZSBvZGQgZXJyb3IgZnJvbSB0aGUgcGNtIGxpYnJhcnkgZHVlCisJICogdG8gb3V0LW9mLWJvdW5kcyBwb2ludGVycy4gdGhpcyBpcyBtYXliZSBkdWUgdG8gdGhlIGRtYSBlbmdpbmUKKwkgKiBub3QgaGF2aW5nIGxvYWRlZCB0aGUgbmV3IHZhbHVlcyBmb3IgdGhlIGNoYW5uZWwgYmVmb3JlIGJlaW5nCisJICogY2FsbGxlZC4uLiAodG9kbyAtIGZpeCApCisJICovCisKKwlpZiAocmVzID49IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pKSB7CisJCWlmIChyZXMgPT0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSkpCisJCQlyZXMgPSAwOworCX0KKworCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCByZXMpOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQ7CisKKwlEQkcoIkVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJnMzYzI0eHhfcGNtX2hhcmR3YXJlKTsKKworCXBydGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJ0ZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pbml0KCZwcnRkLT5sb2NrKTsKKworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IHBydGQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlEQkcoIkVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAocHJ0ZCkKKwkJa2ZyZWUocHJ0ZCk7CisJZWxzZQorCQlEQkcoInMzYzI0eHhfcGNtX2Nsb3NlIGNhbGxlZCB3aXRoIHBydGQgPT0gTlVMTFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNHh4X3BjbV9tbWFwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlEQkcoIkVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsIHZtYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLT5kbWFfYXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLT5kbWFfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLT5kbWFfYnl0ZXMpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHMzYzI0eHhfcGNtX29wcyA9IHsKKwkub3BlbgkJPSBzM2MyNHh4X3BjbV9vcGVuLAorCS5jbG9zZQkJPSBzM2MyNHh4X3BjbV9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IHMzYzI0eHhfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IHMzYzI0eHhfcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBzM2MyNHh4X3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyCT0gczNjMjR4eF9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IHMzYzI0eHhfcGNtX3BvaW50ZXIsCisJLm1tYXAJCT0gczNjMjR4eF9wY21fbW1hcCwKK307CisKK3N0YXRpYyBpbnQgczNjMjR4eF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwlzaXplX3Qgc2l6ZSA9IHMzYzI0eHhfcGNtX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXg7CisKKwlEQkcoIkVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlidWYtPmRldi50eXBlID0gU05EUlZfRE1BX1RZUEVfREVWOworCWJ1Zi0+ZGV2LmRldiA9IHBjbS0+Y2FyZC0+ZGV2OworCWJ1Zi0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlidWYtPmFyZWEgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBzaXplLAorCQkJCQkgICAmYnVmLT5hZGRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1Zi0+YXJlYSkKKwkJcmV0dXJuIC1FTk9NRU07CisJYnVmLT5ieXRlcyA9IHNpemU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0eHhfcGNtX2ZyZWVfZG1hX2J1ZmZlcnMoc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZjsKKwlpbnQgc3RyZWFtOworCisJREJHKCJFbnRlcmVkICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCAyOyBzdHJlYW0rKykgeworCQlzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CisJCWlmICghc3Vic3RyZWFtKQorCQkJY29udGludWU7CisKKwkJYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwkJaWYgKCFidWYtPmFyZWEpCisJCQljb250aW51ZTsKKworCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUocGNtLT5jYXJkLT5kZXYsIGJ1Zi0+Ynl0ZXMsCisJCQkJICAgICAgYnVmLT5hcmVhLCBidWYtPmFkZHIpOworCQlidWYtPmFyZWEgPSBOVUxMOworCX0KK30KKworc3RhdGljIHU2NCBzM2MyNHh4X3BjbV9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBpbnQgczNjMjR4eF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgCisJc3RydWN0IHNuZF9zb2NfY29kZWNfZGFpICpkYWksIHN0cnVjdCBzbmRfcGNtICpwY20pCit7CisJaW50IHJldCA9IDA7CisKKwlEQkcoIkVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWNhcmQtPmRldi0+ZG1hX21hc2spCisJCWNhcmQtPmRldi0+ZG1hX21hc2sgPSAmczNjMjR4eF9wY21fZG1hbWFzazsKKwlpZiAoIWNhcmQtPmRldi0+Y29oZXJlbnRfZG1hX21hc2spCisJCWNhcmQtPmRldi0+Y29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmOworCisJaWYgKGRhaS0+cGxheWJhY2suY2hhbm5lbHNfbWluKSB7CisJCXJldCA9IHMzYzI0eHhfcGNtX3ByZWFsbG9jYXRlX2RtYV9idWZmZXIocGNtLAorCQkJU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGFpLT5jYXB0dXJlLmNoYW5uZWxzX21pbikgeworCQlyZXQgPSBzM2MyNHh4X3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHBjbSwKKwkJCVNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9Cisgb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBzbmRfc29jX3BsYXRmb3JtIHMzYzI0eHhfc29jX3BsYXRmb3JtID0geworCS5uYW1lCQk9ICJzM2MyNHh4LWF1ZGlvIiwKKwkucGNtX29wcyAJPSAmczNjMjR4eF9wY21fb3BzLAorCS5wY21fbmV3CT0gczNjMjR4eF9wY21fbmV3LAorCS5wY21fZnJlZQk9IHMzYzI0eHhfcGNtX2ZyZWVfZG1hX2J1ZmZlcnMsCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChzM2MyNHh4X3NvY19wbGF0Zm9ybSk7CisKK01PRFVMRV9BVVRIT1IoIkJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgUzNDMjRYWCBQQ00gRE1BIG1vZHVsZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4OGM3OQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqICBzM2MyNHh4LXBjbS5oIC0tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIEFMU0EgUENNIGludGVyZmFjZSBmb3IgdGhlIFNhbXN1bmcgUzNDMjR4eCBDUFUKKyAqLworCisjaWZuZGVmIF9TM0MyNFhYX1BDTV9ICisjZGVmaW5lIF9TM0MyNFhYX1BDTV9ICisKKyNkZWZpbmUgU1RfUlVOTklORwkJKDE8PDApCisjZGVmaW5lIFNUX09QRU5FRAkJKDE8PDEpCisKK3N0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zIHsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50ICpjbGllbnQ7CS8qIHN0cmVhbSBpZGVudGlmaWVyICovCisJaW50IGNoYW5uZWw7CQkJCS8qIENoYW5uZWwgSUQgKi8KKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWludCBkbWFfc2l6ZTsJCQkvKiBTaXplIG9mIHRoZSBETUEgdHJhbnNmZXIgKi8KK307CisKKyNkZWZpbmUgUzNDMjRYWF9EQUlfSTJTCQkJMAorCisvKiBwbGF0Zm9ybSBkYXRhICovCitleHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gczNjMjR4eF9zb2NfcGxhdGZvcm07CitleHRlcm4gc3RydWN0IHNuZF9hYzk3X2J1c19vcHMgczNjMjR4eF9hYzk3X29wczsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IDM2NTE5YWUuLjkyZDVkOTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC0xMTYsNiArMTE2LDcgQEAKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogZ2V0X2RhaV9uYW1lKGludCB0eXBlKQogewogCXN3aXRjaCh0eXBlKSB7CisJY2FzZSBTTkRfU09DX0RBSV9BQzk3X0JVUzoKIAljYXNlIFNORF9TT0NfREFJX0FDOTc6CiAJCXJldHVybiAiQUM5NyI7CiAJY2FzZSBTTkRfU09DX0RBSV9JMlM6CkBAIC0xMDk5LDcgKzExMDAsOCBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9Ci0JCWlmIChzb2NkZXYtPm1hY2hpbmUtPmRhaV9saW5rW2ldLmNwdV9kYWktPnR5cGUgPT0gU05EX1NPQ19EQUlfQUM5NykKKwkJaWYgKHNvY2Rldi0+bWFjaGluZS0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpLT50eXBlID09IAorCQkJU05EX1NPQ19EQUlfQUM5N19CVVMpCiAJCQlhYzk3ID0gMTsKIAl9CiAJc25wcmludGYoY29kZWMtPmNhcmQtPnNob3J0bmFtZSwgc2l6ZW9mKGNvZGVjLT5jYXJkLT5zaG9ydG5hbWUpLApAQCAtMTE0OCwxMSArMTE1MCwyMSBAQAogdm9pZCBzbmRfc29jX2ZyZWVfcGNtcyhzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworI2lmZGVmIENPTkZJR19TTkRfU09DX0FDOTdfQlVTCisJc3RydWN0IHNuZF9zb2NfY29kZWNfZGFpICpjb2RlY19kYWk7CisJaW50IGk7CisjZW5kaWYKIAogCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CiAjaWZkZWYgQ09ORklHX1NORF9TT0NfQUM5N19CVVMKLQlpZiAoY29kZWMtPmFjOTcpCi0JCXNvY19hYzk3X2Rldl91bnJlZ2lzdGVyKGNvZGVjKTsKKwlmb3IoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX2RhaTsgaSsrKSB7CisJCWNvZGVjX2RhaSA9ICZjb2RlYy0+ZGFpW2ldOworCQlpZiAoY29kZWNfZGFpLT50eXBlID09IFNORF9TT0NfREFJX0FDOTdfQlVTICYmIGNvZGVjLT5hYzk3KSB7CisJCQlzb2NfYWM5N19kZXZfdW5yZWdpc3Rlcihjb2RlYyk7CisJCQlnb3RvIGZyZWVfY2FyZDsKKwkJfQorCX0KK2ZyZWVfY2FyZDoKICNlbmRpZgogCiAJaWYgKGNvZGVjLT5jYXJkKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCA3Y2FmOGM3Li45NmJjZTU1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtODgyLDEzICs4ODIsMTUgQEAKIAlpZiAod3NpbmstPmlkID09IHNuZF9zb2NfZGFwbV9pbnB1dCkgewogCQlpZiAod3NvdXJjZS0+aWQgPT0gc25kX3NvY19kYXBtX21pY2JpYXMgfHwKIAkJCXdzb3VyY2UtPmlkID09IHNuZF9zb2NfZGFwbV9taWMgfHwKLQkJCXdzaW5rLT5pZCA9PSBzbmRfc29jX2RhcG1fbGluZSkKKwkJCXdzaW5rLT5pZCA9PSBzbmRfc29jX2RhcG1fbGluZSB8fAorCQkJd3NpbmstPmlkID09IHNuZF9zb2NfZGFwbV9vdXRwdXQpCiAJCQl3c2luay0+ZXh0ID0gMTsKIAl9CiAJaWYgKHdzb3VyY2UtPmlkID09IHNuZF9zb2NfZGFwbV9vdXRwdXQpIHsKIAkJaWYgKHdzaW5rLT5pZCA9PSBzbmRfc29jX2RhcG1fc3BrIHx8CiAJCQl3c2luay0+aWQgPT0gc25kX3NvY19kYXBtX2hwIHx8Ci0JCQl3c2luay0+aWQgPT0gc25kX3NvY19kYXBtX2xpbmUpCisJCQl3c2luay0+aWQgPT0gc25kX3NvY19kYXBtX2xpbmUgfHwKKwkJCXdzaW5rLT5pZCA9PSBzbmRfc29jX2RhcG1faW5wdXQpCiAJCQl3c291cmNlLT5leHQgPSAxOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvc291bmRfZmlybXdhcmUuYyBiL3NvdW5kL3NvdW5kX2Zpcm13YXJlLmMKaW5kZXggMzMwNDM0NC4uOTZkZWFlZiAxMDA2NDQKLS0tIGEvc291bmQvc291bmRfZmlybXdhcmUuYworKysgYi9zb3VuZC9zb3VuZF9maXJtd2FyZS5jCkBAIC0zLDYgKzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgIm9zcy9zb3VuZF9maXJtd2FyZS5oIgogCmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9jczQyMzEuYyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCmluZGV4IDkwMGEwMGQuLmRjYTAzNDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2NzNDIzMS5jCisrKyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCkBAIC02NjEsMTEgKzY2MSw5IEBACiAJewogCQl1bnNpZ25lZCBpbnQgd2hhdCA9IDA7CiAJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKLQkJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2gocG9zLCBzdWJzdHJlYW0pIHsKLQkJCXMgPSBzbmRfcGNtX2dyb3VwX3N1YnN0cmVhbV9lbnRyeShwb3MpOworCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewogCQkJaWYgKHMgPT0gY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKSB7CiAJCQkJd2hhdCB8PSBDUzQyMzFfUExBWUJBQ0tfRU5BQkxFOwogCQkJCXNuZF9wY21fdHJpZ2dlcl9kb25lKHMsIHN1YnN0cmVhbSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9kYnJpLmMgYi9zb3VuZC9zcGFyYy9kYnJpLmMKaW5kZXggMjVhMmE3My4uZTA3MDg1YSAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvZGJyaS5jCisrKyBiL3NvdW5kL3NwYXJjL2RicmkuYwpAQCAtNjczLDcgKzY3Myw3IEBACiB9CiAKIC8qCi0gKiBTZW5kIHByZXBhcmVkIGNtZCBzdHJpbmcuIEl0IHdvcmtzIGJ5IHdyaXR0aW5nIGEgSlVNUCBjbWQgaW50bworICogU2VuZCBwcmVwYXJlZCBjbWQgc3RyaW5nLiBJdCB3b3JrcyBieSB3cml0aW5nIGEgSlVNUCBjbWQgaW50bwogICogdGhlIGxhc3QgV0FJVCBjbWQgYW5kIGZvcmNlIERCUkkgdG8gcmVyZWFkIHRoZSBjbWQuCiAgKiBUaGUgSlVNUCBjbWQgcG9pbnRzIHRvIHRoZSBuZXcgY21kIHN0cmluZy4KICAqIEl0IGFsc28gcmVsZWFzZXMgdGhlIGNtZGxvY2sgc3BpbmxvY2suCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvS2NvbmZpZyBiL3NvdW5kL3VzYi9LY29uZmlnCmluZGV4IGYwNWQwMmYuLjMxNTM2MGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9LY29uZmlnCisrKyBiL3NvdW5kL3VzYi9LY29uZmlnCkBAIC0yOSw1ICsyOSwzMyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLXVzYi11c3gyeS4KIAorY29uZmlnIFNORF9VU0JfQ0FJQVEKKwl0cmlzdGF0ZSAiTmF0aXZlIEluc3RydW1lbnRzIFVTQiBhdWRpbyBkZXZpY2VzIgorCSBkZXBlbmRzIG9uIFNORCAmJiBVU0IKKwkgc2VsZWN0IFNORF9IV0RFUAorCSBzZWxlY3QgU05EX1JBV01JREkKKwkgc2VsZWN0IFNORF9QQ00KKwkgaGVscAorCSAgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBjYWlhcSBVU0IgYXVkaW8gaW50ZXJmYWNlcywKKwkgICBuYW1lbHk6CisKKwkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgUmlnS29udHJvbDIKKwkgICAgKiBOYXRpdmUgSW5zdHJ1bWVudHMgS29yZSBDb250cm9sbGVyCisJICAgICogTmF0aXZlIEluc3RydW1lbnRzIEF1ZGlvIEtvbnRyb2wgMQorCSAgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBBdWRpbyA4IERKCisKKwkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICAgd2lsbCBiZSBjYWxsZWQgc25kLXVzYi1jYWlhcS4KKworY29uZmlnIFNORF9VU0JfQ0FJQVFfSU5QVVQKKwlib29sICJlbmFibGUgaW5wdXQgZGV2aWNlIGZvciBjb250cm9sbGVycyIKKwlkZXBlbmRzIG9uIFNORF9VU0JfQ0FJQVEKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgaW5wdXQgY29udHJvbGxlcnMgbGlrZSBidXR0b25zLCBrbm9icywKKwkgIGFscGhhIGRpYWxzIGFuZCBhbmFsb2cgcGVkYWxzIG9uIHRoZSBmb2xsb3dpbmcgcHJvZHVjdHM6CisKKwkgICAqIE5hdGl2ZSBJbnN0cnVtZW50cyBSaWdLb250cm9sMgorCSAgICogTmF0aXZlIEluc3RydW1lbnRzIEF1ZGlvIEtvbnRyb2wgMQorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9NYWtlZmlsZSBiL3NvdW5kL3VzYi9NYWtlZmlsZQppbmRleCAyYzFkYzExLi5hYTI1MmVmIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvTWFrZWZpbGUKKysrIGIvc291bmQvdXNiL01ha2VmaWxlCkBAIC05LDQgKzksNCBAQAogb2JqLSQoQ09ORklHX1NORF9VU0JfQVVESU8pICs9IHNuZC11c2ItYXVkaW8ubyBzbmQtdXNiLWxpYi5vCiBvYmotJChDT05GSUdfU05EX1VTQl9VU1gyWSkgKz0gc25kLXVzYi1saWIubwogCi1vYmotJChDT05GSUdfU05EKSArPSB1c3gyeS8KK29iai0kKENPTkZJR19TTkQpICs9IHVzeDJ5LyBjYWlhcS8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9NYWtlZmlsZSBiL3NvdW5kL3VzYi9jYWlhcS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTVjOGM1Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiL2NhaWFxL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorc25kLXVzYi1jYWlhcS1vYmpzIDo9IGNhaWFxLWRldmljZS5vIGNhaWFxLWF1ZGlvLm8gY2FpYXEtbWlkaS5vIGNhaWFxLWlucHV0Lm8KKworb2JqLSQoQ09ORklHX1NORF9VU0JfQ0FJQVEpICs9IHNuZC11c2ItY2FpYXEubwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtYXVkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDE0ZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWF1ZGlvLmMKQEAgLTAsMCArMSw3MDcgQEAKKy8qCisgKiAgIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IERhbmllbCBNYWNrLCBLYXJzdGVuIFdpZXNlCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CisjaWZkZWYgQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJjYWlhcS1kZXZpY2UuaCIKKyNpbmNsdWRlICJjYWlhcS1hdWRpby5oIgorCisjZGVmaW5lIE5fVVJCUwkJCTMyCisjZGVmaW5lIENMT0NLX0RSSUZUX1RPTEVSQU5DRQk1CisjZGVmaW5lIEZSQU1FU19QRVJfVVJCCQk4CisjZGVmaW5lIEJZVEVTX1BFUl9GUkFNRQkJNTEyCisjZGVmaW5lIENIQU5ORUxTX1BFUl9TVFJFQU0JMgorI2RlZmluZSBCWVRFU19QRVJfU0FNUExFCTMKKyNkZWZpbmUgQllURVNfUEVSX1NBTVBMRV9VU0IJNAorI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSgxMjgqMTAyNCkKKwkJCQkgCisjZGVmaW5lIEVORFBPSU5UX0NBUFRVUkUJMgorI2RlZmluZSBFTkRQT0lOVF9QTEFZQkFDSwk2CisKKyNkZWZpbmUgTUFLRV9DSEVDS0JZVEUoZGV2LHN0cmVhbSxpKSBcCisJKHN0cmVhbSA8PCAxKSB8ICh+KGkgLyAoZGV2LT5uX3N0cmVhbXMgKiBCWVRFU19QRVJfU0FNUExFX1VTQikpICYgMSkKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF91c2JfY2FpYXFfcGNtX2hhcmR3YXJlID0geworCS5pbmZvIAkJPSAoU05EUlZfUENNX0lORk9fTU1BUCB8IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwgCisJCQkgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiksCisJLmZvcm1hdHMgCT0gU05EUlZfUENNX0ZNVEJJVF9TMjRfM0JFLAorCS5yYXRlcyAJCT0gKFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDAgfCAKKwkJCSAgIFNORFJWX1BDTV9SQVRFXzk2MDAwKSwKKwkucmF0ZV9taW4JPSA0NDEwMCwKKwkucmF0ZV9tYXgJPSAwLCAvKiB3aWxsIG92ZXJ3cml0ZSBsYXRlciAqLworCS5jaGFubmVsc19taW4JPSBDSEFOTkVMU19QRVJfU1RSRUFNLAorCS5jaGFubmVsc19tYXgJPSBDSEFOTkVMU19QRVJfU1RSRUFNLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gTUFYX0JVRkZFUl9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gNDA5NiwKKwkucGVyaW9kX2J5dGVzX21heCA9IE1BWF9CVUZGRVJfU0laRSwKKwkucGVyaW9kc19taW4JPSAxLAorCS5wZXJpb2RzX21heAk9IDEwMjQsCit9OworCitzdGF0aWMgdm9pZAorYWN0aXZhdGVfc3Vic3RyZWFtKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYsCisJICAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YikKK3sKKwlpZiAoc3ViLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJZGV2LT5zdWJfcGxheWJhY2tbc3ViLT5udW1iZXJdID0gc3ViOworCWVsc2UKKwkJZGV2LT5zdWJfY2FwdHVyZVtzdWItPm51bWJlcl0gPSBzdWI7Cit9CisKK3N0YXRpYyB2b2lkIAorZGVhY3RpdmF0ZV9zdWJzdHJlYW0oc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiwKKwkJICAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YikKK3sKKwlpZiAoc3ViLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJZGV2LT5zdWJfcGxheWJhY2tbc3ViLT5udW1iZXJdID0gTlVMTDsKKwllbHNlCisJCWRldi0+c3ViX2NhcHR1cmVbc3ViLT5udW1iZXJdID0gTlVMTDsKK30KKworc3RhdGljIGludAorYWxsX3N1YnN0cmVhbXNfemVybyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKipzdWJzKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfU1RSRUFNUzsgaSsrKQorCQlpZiAoc3Vic1tpXSAhPSBOVUxMKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc3RyZWFtX3N0YXJ0KHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYpCit7CisJaW50IGksIHJldDsKKworCWRlYnVnKCJzdHJlYW1fc3RhcnQoJXApXG4iLCBkZXYpOworCXNwaW5fbG9ja19pcnEoJmRldi0+c3BpbmxvY2spOworCWlmIChkZXYtPnN0cmVhbWluZykgeworCQlzcGluX3VubG9ja19pcnEoJmRldi0+c3BpbmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXYtPmlucHV0X3BhbmljID0gMDsKKwlkZXYtPm91dHB1dF9wYW5pYyA9IDA7CisJZGV2LT5maXJzdF9wYWNrZXQgPSAxOworCWRldi0+c3RyZWFtaW5nID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBOX1VSQlM7IGkrKykgeworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmRhdGFfdXJic19pbltpXSwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXQpIHsKKwkJCWxvZygidW5hYmxlIHRvIHRyaWdnZXIgaW5pdGlhbCByZWFkICMlZCEgKHJldCA9ICVkKVxuIiwKKwkJCQlpLCByZXQpOworCQkJZGV2LT5zdHJlYW1pbmcgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnNwaW5sb2NrKTsKKwkJCXJldHVybiAtRVBJUEU7CisJCX0KKwl9CisJCisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnNwaW5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RyZWFtX3N0b3Aoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldikKK3sKKwlpbnQgaTsKKwkKKwlkZWJ1Zygic3RyZWFtX3N0b3AoJXApXG4iLCBkZXYpOworCWlmICghZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybjsKKwkKKwlkZXYtPnN0cmVhbWluZyA9IDA7CisJZm9yIChpID0gMDsgaSA8IE5fVVJCUzsgaSsrKSB7CisJCXVzYl91bmxpbmtfdXJiKGRldi0+ZGF0YV91cmJzX2luW2ldKTsKKwkJdXNiX3VubGlua191cmIoZGV2LT5kYXRhX3VyYnNfb3V0W2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc25kX3VzYl9jYWlhcV9zdWJzdHJlYW1fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWRlYnVnKCJzbmRfdXNiX2NhaWFxX3N1YnN0cmVhbV9vcGVuKCVwKVxuIiwgc3Vic3RyZWFtKTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3ID0gZGV2LT5wY21faW5mbzsKKwlzbmRfcGNtX2xpbWl0X2h3X3JhdGVzKHN1YnN0cmVhbS0+cnVudGltZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3VzYl9jYWlhcV9zdWJzdHJlYW1fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWRlYnVnKCJzbmRfdXNiX2NhaWFxX3N1YnN0cmVhbV9jbG9zZSglcClcbiIsIHN1YnN0cmVhbSk7CisJaWYgKGFsbF9zdWJzdHJlYW1zX3plcm8oZGV2LT5zdWJfcGxheWJhY2spICYmCisJICAgIGFsbF9zdWJzdHJlYW1zX3plcm8oZGV2LT5zdWJfY2FwdHVyZSkpIHsKKwkJLyogd2hlbiB0aGUgbGFzdCBjbGllbnQgaGFzIHN0b3BwZWQgc3RyZWFtaW5nLCAKKwkJICogYWxsIHNhbXBsZSByYXRlcyBhcmUgYWxsb3dlZCBhZ2FpbiAqLworCQlzdHJlYW1fc3RvcChkZXYpOworCQlkZXYtPnBjbV9pbmZvLnJhdGVzID0gZGV2LT5zYW1wbGVyYXRlczsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3VzYl9jYWlhcV9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViLAorCQkJICAgICAJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCWRlYnVnKCJzbmRfdXNiX2NhaWFxX3BjbV9od19wYXJhbXMoJXApXG4iLCBzdWIpOworCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3ViLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworfQorCitzdGF0aWMgaW50IHNuZF91c2JfY2FpYXFfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWIpCit7CisJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3ViKTsKKwlkZWJ1Zygic25kX3VzYl9jYWlhcV9wY21faHdfZnJlZSglcClcbiIsIHN1Yik7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5zcGlubG9jayk7CisJZGVhY3RpdmF0ZV9zdWJzdHJlYW0oZGV2LCBzdWIpOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5zcGlubG9jayk7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3ViKTsKK30KKworLyogdGhpcyBzaG91bGQgcHJvYmFibHkgZ28gdXBzdHJlYW0gKi8KKyNpZiBTTkRSVl9QQ01fUkFURV81NTEyICE9IDEgPDwgMCB8fCBTTkRSVl9QQ01fUkFURV8xOTIwMDAgIT0gMSA8PCAxMgorI2Vycm9yICJDaGFuZ2UgdGhpcyB0YWJsZSIKKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgaW50IHJhdGVzW10gPSB7IDU1MTIsIDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDMyMDAwLCA0NDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4MDAwLCA2NDAwMCwgODgyMDAsIDk2MDAwLCAxNzY0MDAsIDE5MjAwMCB9OworCitzdGF0aWMgaW50IHNuZF91c2JfY2FpYXFfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IGJ5dGVzX3Blcl9zYW1wbGUsIGJwcCwgcmV0LCBpOworCWludCBpbmRleCA9IHN1YnN0cmVhbS0+bnVtYmVyOworCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCWRlYnVnKCJzbmRfdXNiX2NhaWFxX3BjbV9wcmVwYXJlKCVwKVxuIiwgc3Vic3RyZWFtKTsKKwkKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJZGV2LT5hdWRpb19vdXRfYnVmX3Bvc1tpbmRleF0gPSBCWVRFU19QRVJfU0FNUExFICsgMTsKKwllbHNlCisJCWRldi0+YXVkaW9faW5fYnVmX3Bvc1tpbmRleF0gPSAwOworCQorCWlmIChkZXYtPnN0cmVhbWluZykKKwkJcmV0dXJuIDA7CisJCisJLyogdGhlIGZpcnN0IGNsaWVudCB0aGF0IG9wZW5zIGEgc3RyZWFtIGRlZmluZXMgdGhlIHNhbXBsZSByYXRlCisJICogc2V0dGluZyBmb3IgYWxsIHN1YnNlcXVlbnQgY2FsbHMsIHVudGlsIHRoZSBsYXN0IGNsaWVudCBjbG9zZWQuICovCisJZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKHJhdGVzKTsgaSsrKQorCQlpZiAocnVudGltZS0+cmF0ZSA9PSByYXRlc1tpXSkKKwkJCWRldi0+cGNtX2luZm8ucmF0ZXMgPSAxIDw8IGk7CisJCisJc25kX3BjbV9saW1pdF9od19yYXRlcyhydW50aW1lKTsKKworCWJ5dGVzX3Blcl9zYW1wbGUgPSBCWVRFU19QRVJfU0FNUExFOworCWlmIChkZXYtPnNwZWMuZGF0YV9hbGlnbm1lbnQgPT0gMikKKwkJYnl0ZXNfcGVyX3NhbXBsZSsrOworCQorCWJwcCA9ICgocnVudGltZS0+cmF0ZSAvIDgwMDApICsgQ0xPQ0tfRFJJRlRfVE9MRVJBTkNFKQorCQkqIGJ5dGVzX3Blcl9zYW1wbGUgKiBDSEFOTkVMU19QRVJfU1RSRUFNICogZGV2LT5uX3N0cmVhbXM7CisJCisJcmV0ID0gc25kX3VzYl9jYWlhcV9zZXRfYXVkaW9fcGFyYW1zKGRldiwgcnVudGltZS0+cmF0ZSwKKwkJCQkJICAgICBydW50aW1lLT5zYW1wbGVfYml0cywgYnBwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3RyZWFtX3N0YXJ0KGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkKKwlkZXYtPm91dHB1dF9ydW5uaW5nID0gMDsKKwl3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT5wcmVwYXJlX3dhaXRfcXVldWUsIGRldi0+b3V0cHV0X3J1bm5pbmcsIEhaKTsKKwlpZiAoIWRldi0+b3V0cHV0X3J1bm5pbmcpIHsKKwkJc3RyZWFtX3N0b3AoZGV2KTsKKwkJcmV0dXJuIC1FUElQRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfdXNiX2NhaWFxX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1Yik7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOworCQlhY3RpdmF0ZV9zdWJzdHJlYW0oZGV2LCBzdWIpOworCQlzcGluX3VubG9jaygmZGV2LT5zcGlubG9jayk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CisJCWRlYWN0aXZhdGVfc3Vic3RyZWFtKGRldiwgc3ViKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfdXNiX2NhaWFxX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViKQoreworCWludCBpbmRleCA9IHN1Yi0+bnVtYmVyOworCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1Yik7CisKKwlpZiAoZGV2LT5pbnB1dF9wYW5pYyB8fCBkZXYtPm91dHB1dF9wYW5pYykKKwkJcmV0dXJuIFNORFJWX1BDTV9QT1NfWFJVTjsKKworCWlmIChzdWItPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1Yi0+cnVudGltZSwgCisJCQkJCWRldi0+YXVkaW9fb3V0X2J1Zl9wb3NbaW5kZXhdKTsKKwllbHNlCisJCXJldHVybiBieXRlc190b19mcmFtZXMoc3ViLT5ydW50aW1lLAorCQkJCQlkZXYtPmF1ZGlvX2luX2J1Zl9wb3NbaW5kZXhdKTsKK30KKworLyogb3BlcmF0b3JzIGZvciBib3RoIHBsYXliYWNrIGFuZCBjYXB0dXJlICovCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF91c2JfY2FpYXFfb3BzID0geworCS5vcGVuID0JCXNuZF91c2JfY2FpYXFfc3Vic3RyZWFtX29wZW4sCisJLmNsb3NlID0Jc25kX3VzYl9jYWlhcV9zdWJzdHJlYW1fY2xvc2UsCisJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9CXNuZF91c2JfY2FpYXFfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9CXNuZF91c2JfY2FpYXFfcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUgPQlzbmRfdXNiX2NhaWFxX3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyID0Jc25kX3VzYl9jYWlhcV9wY21fdHJpZ2dlciwKKwkucG9pbnRlciA9CXNuZF91c2JfY2FpYXFfcGNtX3BvaW50ZXIKK307CisJCitzdGF0aWMgdm9pZCBjaGVja19mb3JfZWxhcHNlZF9wZXJpb2RzKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYsCisJCQkJICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICoqc3VicykKK3sKKwlpbnQgc3RyZWFtLCBwYiwgKmNudDsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YjsKKworCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgZGV2LT5uX3N0cmVhbXM7IHN0cmVhbSsrKSB7CisJCXN1YiA9IHN1YnNbc3RyZWFtXTsKKwkJaWYgKCFzdWIpCisJCQljb250aW51ZTsKKworCQlwYiA9IGZyYW1lc190b19ieXRlcyhzdWItPnJ1bnRpbWUsIAorCQkJCSAgICAgc3ViLT5ydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCWNudCA9IChzdWItPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSA/CisJCQkJCSZkZXYtPnBlcmlvZF9vdXRfY291bnRbc3RyZWFtXSA6CisJCQkJCSZkZXYtPnBlcmlvZF9pbl9jb3VudFtzdHJlYW1dOworCisJCWlmICgqY250ID49IHBiKSB7CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1Yik7CisJCQkqY250ICU9IHBiOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCByZWFkX2luX3VyYl9tb2RlMChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IHVyYiAqdXJiLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlzbykKK3sKKwl1bnNpZ25lZCBjaGFyICp1c2JfYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBpc28tPm9mZnNldDsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YjsKKwlpbnQgc3RyZWFtLCBpOworCisJaWYgKGFsbF9zdWJzdHJlYW1zX3plcm8oZGV2LT5zdWJfY2FwdHVyZSkpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CisJCisJZm9yIChpID0gMDsgaSA8IGlzby0+YWN0dWFsX2xlbmd0aDspIHsKKwkJZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCBkZXYtPm5fc3RyZWFtczsgc3RyZWFtKyssIGkrKykgeworCQkJc3ViID0gZGV2LT5zdWJfY2FwdHVyZVtzdHJlYW1dOworCQkJaWYgKHN1YikgeworCQkJCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ0ID0gc3ViLT5ydW50aW1lOworCQkJCWNoYXIgKmF1ZGlvX2J1ZiA9IHJ0LT5kbWFfYXJlYTsKKwkJCQlpbnQgc3ogPSBmcmFtZXNfdG9fYnl0ZXMocnQsIHJ0LT5idWZmZXJfc2l6ZSk7CisJCQkJYXVkaW9fYnVmW2Rldi0+YXVkaW9faW5fYnVmX3Bvc1tzdHJlYW1dKytdIAorCQkJCQk9IHVzYl9idWZbaV07CisJCQkJZGV2LT5wZXJpb2RfaW5fY291bnRbc3RyZWFtXSsrOworCQkJCWlmIChkZXYtPmF1ZGlvX2luX2J1Zl9wb3Nbc3RyZWFtXSA9PSBzeikKKwkJCQkJZGV2LT5hdWRpb19pbl9idWZfcG9zW3N0cmVhbV0gPSAwOworCQkJfQorCQl9CisJfQorCQorCXNwaW5fdW5sb2NrKCZkZXYtPnNwaW5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9pbl91cmJfbW9kZTIoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB1cmIgKnVyYiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICppc28pCit7CisJdW5zaWduZWQgY2hhciAqdXNiX2J1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgaXNvLT5vZmZzZXQ7CisJdW5zaWduZWQgY2hhciBjaGVja19ieXRlOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViOworCWludCBzdHJlYW0sIGk7CisKKwlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOworCQorCWZvciAoaSA9IDA7IGkgPCBpc28tPmFjdHVhbF9sZW5ndGg7KSB7CisJCWlmIChpICUgKGRldi0+bl9zdHJlYW1zICogQllURVNfUEVSX1NBTVBMRV9VU0IpID09IDApIHsKKwkJCWZvciAoc3RyZWFtID0gMDsgCisJCQkgICAgIHN0cmVhbSA8IGRldi0+bl9zdHJlYW1zOyAKKwkJCSAgICAgc3RyZWFtKyssIGkrKykgeworCQkJCWlmIChkZXYtPmZpcnN0X3BhY2tldCkKKwkJCQkJY29udGludWU7CisKKwkJCQljaGVja19ieXRlID0gTUFLRV9DSEVDS0JZVEUoZGV2LCBzdHJlYW0sIGkpOworCQkJCQorCQkJCWlmICgodXNiX2J1ZltpXSAmIDB4M2YpICE9IGNoZWNrX2J5dGUpCisJCQkJCWRldi0+aW5wdXRfcGFuaWMgPSAxOworCisJCQkJaWYgKHVzYl9idWZbaV0gJiAweDgwKQorCQkJCQlkZXYtPm91dHB1dF9wYW5pYyA9IDE7CisJCQl9CisJCX0KKwkJZGV2LT5maXJzdF9wYWNrZXQgPSAwOworCisJCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgZGV2LT5uX3N0cmVhbXM7IHN0cmVhbSsrLCBpKyspIHsKKwkJCXN1YiA9IGRldi0+c3ViX2NhcHR1cmVbc3RyZWFtXTsKKwkJCWlmIChzdWIpIHsKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydCA9IHN1Yi0+cnVudGltZTsKKwkJCQljaGFyICphdWRpb19idWYgPSBydC0+ZG1hX2FyZWE7CisJCQkJaW50IHN6ID0gZnJhbWVzX3RvX2J5dGVzKHJ0LCBydC0+YnVmZmVyX3NpemUpOworCQkJCWF1ZGlvX2J1ZltkZXYtPmF1ZGlvX2luX2J1Zl9wb3Nbc3RyZWFtXSsrXSA9CisJCQkJCXVzYl9idWZbaV07CisJCQkJZGV2LT5wZXJpb2RfaW5fY291bnRbc3RyZWFtXSsrOworCQkJCWlmIChkZXYtPmF1ZGlvX2luX2J1Zl9wb3Nbc3RyZWFtXSA9PSBzeikKKwkJCQkJZGV2LT5hdWRpb19pbl9idWZfcG9zW3N0cmVhbV0gPSAwOworCQkJfQorCQl9CisJfQorCisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworfQorCitzdGF0aWMgdm9pZCByZWFkX2luX3VyYihzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LAorCQkJY29uc3Qgc3RydWN0IHVyYiAqdXJiLAorCQkJY29uc3Qgc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlzbykKK3sKKwlpZiAoIWRldi0+c3RyZWFtaW5nKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGRldi0+c3BlYy5kYXRhX2FsaWdubWVudCkgeworCWNhc2UgMDoKKwkJcmVhZF9pbl91cmJfbW9kZTAoZGV2LCB1cmIsIGlzbyk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmVhZF9pbl91cmJfbW9kZTIoZGV2LCB1cmIsIGlzbyk7CisJCWJyZWFrOworCX0KKworCWlmIChkZXYtPmlucHV0X3BhbmljIHx8IGRldi0+b3V0cHV0X3BhbmljKSB7CisJCWRlYnVnKCJzdHJlYW1pbmcgZXJyb3IgZGV0ZWN0ZWQgJXMgJXNcbiIsIAorCQkJCWRldi0+aW5wdXRfcGFuaWMgPyAiKGlucHV0KSIgOiAiIiwKKwkJCQlkZXYtPm91dHB1dF9wYW5pYyA/ICIob3V0cHV0KSIgOiAiIik7CisJfQorCisJY2hlY2tfZm9yX2VsYXBzZWRfcGVyaW9kcyhkZXYsIGRldi0+c3ViX2NhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCBmaWxsX291dF91cmIoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiwgCisJCQkgc3RydWN0IHVyYiAqdXJiLCAKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaXNvKQoreworCXVuc2lnbmVkIGNoYXIgKnVzYl9idWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIGlzby0+b2Zmc2V0OworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViOworCWludCBzdHJlYW0sIGk7CisKKwlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOworCQorCWZvciAoaSA9IDA7IGkgPCBpc28tPmxlbmd0aDspIHsKKwkJZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCBkZXYtPm5fc3RyZWFtczsgc3RyZWFtKyssIGkrKykgeworCQkJc3ViID0gZGV2LT5zdWJfcGxheWJhY2tbc3RyZWFtXTsKKwkJCWlmIChzdWIpIHsKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydCA9IHN1Yi0+cnVudGltZTsKKwkJCQljaGFyICphdWRpb19idWYgPSBydC0+ZG1hX2FyZWE7CisJCQkJaW50IHN6ID0gZnJhbWVzX3RvX2J5dGVzKHJ0LCBydC0+YnVmZmVyX3NpemUpOworCQkJCXVzYl9idWZbaV0gPQorCQkJCQlhdWRpb19idWZbZGV2LT5hdWRpb19vdXRfYnVmX3Bvc1tzdHJlYW1dXTsKKwkJCQlkZXYtPnBlcmlvZF9vdXRfY291bnRbc3RyZWFtXSsrOworCQkJCWRldi0+YXVkaW9fb3V0X2J1Zl9wb3Nbc3RyZWFtXSsrOworCQkJCWlmIChkZXYtPmF1ZGlvX291dF9idWZfcG9zW3N0cmVhbV0gPT0gc3opCisJCQkJCWRldi0+YXVkaW9fb3V0X2J1Zl9wb3Nbc3RyZWFtXSA9IDA7CisJCQl9IGVsc2UKKwkJCQl1c2JfYnVmW2ldID0gMDsKKwkJfQorCisJCS8qIGZpbGwgaW4gdGhlIGNoZWNrIGJ5dGVzICovCisJCWlmIChkZXYtPnNwZWMuZGF0YV9hbGlnbm1lbnQgPT0gMiAmJgorCQkgICAgaSAlIChkZXYtPm5fc3RyZWFtcyAqIEJZVEVTX1BFUl9TQU1QTEVfVVNCKSA9PSAKKwkJICAgIAkoZGV2LT5uX3N0cmVhbXMgKiBDSEFOTkVMU19QRVJfU1RSRUFNKSkKKwkJICAgIGZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgZGV2LT5uX3N0cmVhbXM7IHN0cmVhbSsrLCBpKyspCisJCSAgICAJdXNiX2J1ZltpXSA9IE1BS0VfQ0hFQ0tCWVRFKGRldiwgc3RyZWFtLCBpKTsKKwl9CisKKwlzcGluX3VubG9jaygmZGV2LT5zcGlubG9jayk7CisJY2hlY2tfZm9yX2VsYXBzZWRfcGVyaW9kcyhkZXYsIGRldi0+c3ViX3BsYXliYWNrKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9jb21wbGV0ZWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBzbmRfdXNiX2NhaWFxX2NiX2luZm8gKmluZm8gPSB1cmItPmNvbnRleHQ7IAorCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXY7CisJc3RydWN0IHVyYiAqb3V0OworCWludCBmcmFtZSwgbGVuLCBzZW5kX2l0ID0gMCwgb3V0ZnJhbWUgPSAwOworCisJaWYgKHVyYi0+c3RhdHVzIHx8ICFpbmZvKQorCQlyZXR1cm47CisKKwlkZXYgPSBpbmZvLT5kZXY7CisJaWYgKCFkZXYtPnN0cmVhbWluZykKKwkJcmV0dXJuOworCisJb3V0ID0gZGV2LT5kYXRhX3VyYnNfb3V0W2luZm8tPmluZGV4XTsKKworCS8qIHJlYWQgdGhlIHJlY2VudGx5IHJlY2VpdmVkIHBhY2tldCBhbmQgc2VuZCBiYWNrIG9uZSB3aGljaCBoYXMKKwkgKiB0aGUgc2FtZSBsYXlvdXQgKi8KKwlmb3IgKGZyYW1lID0gMDsgZnJhbWUgPCBGUkFNRVNfUEVSX1VSQjsgZnJhbWUrKykgeworCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0uc3RhdHVzKQorCQkJY29udGludWU7CisKKwkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tvdXRmcmFtZV0uYWN0dWFsX2xlbmd0aDsKKwkJb3V0LT5pc29fZnJhbWVfZGVzY1tvdXRmcmFtZV0ubGVuZ3RoID0gbGVuOworCQlvdXQtPmlzb19mcmFtZV9kZXNjW291dGZyYW1lXS5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJb3V0LT5pc29fZnJhbWVfZGVzY1tvdXRmcmFtZV0ub2Zmc2V0ID0gQllURVNfUEVSX0ZSQU1FICogZnJhbWU7CisJCQorCQlpZiAobGVuID4gMCkgeworCQkJZmlsbF9vdXRfdXJiKGRldiwgb3V0LCAmb3V0LT5pc29fZnJhbWVfZGVzY1tvdXRmcmFtZV0pOworCQkJcmVhZF9pbl91cmIoZGV2LCB1cmIsICZ1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXSk7CisJCQlzZW5kX2l0ID0gMTsKKwkJfQorCisJCW91dGZyYW1lKys7CisJfQorCisJaWYgKHNlbmRfaXQpIHsKKwkJb3V0LT5udW1iZXJfb2ZfcGFja2V0cyA9IEZSQU1FU19QRVJfVVJCOworCQlvdXQtPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1c2Jfc3VibWl0X3VyYihvdXQsIEdGUF9BVE9NSUMpOworCX0KKwkKKwkvKiByZS1zdWJtaXQgaW5ib3VuZCB1cmIgKi8KKwlmb3IgKGZyYW1lID0gMDsgZnJhbWUgPCBGUkFNRVNfUEVSX1VSQjsgZnJhbWUrKykgeworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXS5vZmZzZXQgPSBCWVRFU19QRVJfRlJBTUUgKiBmcmFtZTsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tmcmFtZV0ubGVuZ3RoID0gQllURVNfUEVSX0ZSQU1FOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ZyYW1lXS5hY3R1YWxfbGVuZ3RoID0gMDsKKwl9CisJCisJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEZSQU1FU19QRVJfVVJCOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc25kX3VzYl9jYWlhcV9jYl9pbmZvICppbmZvID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYgPSBpbmZvLT5kZXY7CisKKwlpZiAoIWRldi0+b3V0cHV0X3J1bm5pbmcpIHsKKwkJZGV2LT5vdXRwdXRfcnVubmluZyA9IDE7CisJCXdha2VfdXAoJmRldi0+cHJlcGFyZV93YWl0X3F1ZXVlKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXJiICoqYWxsb2NfdXJicyhzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LCBpbnQgZGlyLCBpbnQgKnJldCkKK3sKKwlpbnQgaSwgZnJhbWU7CisJc3RydWN0IHVyYiAqKnVyYnM7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBkZXYtPmNoaXAuZGV2OworCXVuc2lnbmVkIGludCBwaXBlOworCisJcGlwZSA9IChkaXIgPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgPyAKKwkJdXNiX3NuZGlzb2NwaXBlKHVzYl9kZXYsIEVORFBPSU5UX1BMQVlCQUNLKSA6CisJCXVzYl9yY3Zpc29jcGlwZSh1c2JfZGV2LCBFTkRQT0lOVF9DQVBUVVJFKTsKKworCXVyYnMgPSBrbWFsbG9jKE5fVVJCUyAqIHNpemVvZigqdXJicyksIEdGUF9LRVJORUwpOworCWlmICghdXJicykgeworCQlsb2coInVuYWJsZSB0byBrbWFsbG9jKCkgdXJicywgT09NIT9cbiIpOworCQkqcmV0ID0gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE5fVVJCUzsgaSsrKSB7CisJCXVyYnNbaV0gPSB1c2JfYWxsb2NfdXJiKEZSQU1FU19QRVJfVVJCLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmJzW2ldKSB7CisJCQlsb2coInVuYWJsZSB0byB1c2JfYWxsb2NfdXJiKCksIE9PTSE/XG4iKTsKKwkJCSpyZXQgPSAtRU5PTUVNOworCQkJcmV0dXJuIHVyYnM7CisJCX0KKworCQl1cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgPSAKKwkJCWttYWxsb2MoRlJBTUVTX1BFUl9VUkIgKiBCWVRFU19QRVJfRlJBTUUsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlcikgeworCQkJbG9nKCJ1bmFibGUgdG8ga21hbGxvYygpIHRyYW5zZmVyIGJ1ZmZlciwgT09NIT9cbiIpOworCQkJKnJldCA9IC1FTk9NRU07CisJCQlyZXR1cm4gdXJiczsKKwkJfQorCQkKKwkJZm9yIChmcmFtZSA9IDA7IGZyYW1lIDwgRlJBTUVTX1BFUl9VUkI7IGZyYW1lKyspIHsKKwkJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICppc28gPSAKKwkJCQkmdXJic1tpXS0+aXNvX2ZyYW1lX2Rlc2NbZnJhbWVdOworCQkJCisJCQlpc28tPm9mZnNldCA9IEJZVEVTX1BFUl9GUkFNRSAqIGZyYW1lOworCQkJaXNvLT5sZW5ndGggPSBCWVRFU19QRVJfRlJBTUU7CisJCX0KKwkJCisJCXVyYnNbaV0tPmRldiA9IHVzYl9kZXY7CisJCXVyYnNbaV0tPnBpcGUgPSBwaXBlOworCQl1cmJzW2ldLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gRlJBTUVTX1BFUl9VUkIgCisJCQkJCQkqIEJZVEVTX1BFUl9GUkFNRTsKKwkJdXJic1tpXS0+Y29udGV4dCA9ICZkZXYtPmRhdGFfY2JfaW5mb1tpXTsKKwkJdXJic1tpXS0+aW50ZXJ2YWwgPSAxOworCQl1cmJzW2ldLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJic1tpXS0+bnVtYmVyX29mX3BhY2tldHMgPSBGUkFNRVNfUEVSX1VSQjsKKwkJdXJic1tpXS0+Y29tcGxldGUgPSAoZGlyID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkgPworCQkJCQlyZWFkX2NvbXBsZXRlZCA6IHdyaXRlX2NvbXBsZXRlZDsKKwl9CisKKwkqcmV0ID0gMDsKKwlyZXR1cm4gdXJiczsKK30KKworc3RhdGljIHZvaWQgZnJlZV91cmJzKHN0cnVjdCB1cmIgKip1cmJzKQoreworCWludCBpOworCisJaWYgKCF1cmJzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgTl9VUkJTOyBpKyspIHsKKwkJaWYgKCF1cmJzW2ldKQorCQkJY29udGludWU7CisJCQorCQl1c2Jfa2lsbF91cmIodXJic1tpXSk7CisJCWtmcmVlKHVyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlcik7CisJCXVzYl9mcmVlX3VyYih1cmJzW2ldKTsKKwl9CisKKwlrZnJlZSh1cmJzKTsKK30KKworaW50IF9fZGV2aW5pdCBzbmRfdXNiX2NhaWFxX2F1ZGlvX2luaXQoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldikKK3sKKwlpbnQgaSwgcmV0OworCisJZGV2LT5uX2F1ZGlvX2luICA9IG1heChkZXYtPnNwZWMubnVtX2FuYWxvZ19hdWRpb19pbiwgCisJCQkgICAgICAgZGV2LT5zcGVjLm51bV9kaWdpdGFsX2F1ZGlvX2luKSAvIAorCQkJCUNIQU5ORUxTX1BFUl9TVFJFQU07CisJZGV2LT5uX2F1ZGlvX291dCA9IG1heChkZXYtPnNwZWMubnVtX2FuYWxvZ19hdWRpb19vdXQsCisJCQkgICAgICAgZGV2LT5zcGVjLm51bV9kaWdpdGFsX2F1ZGlvX291dCkgLyAKKwkJCQlDSEFOTkVMU19QRVJfU1RSRUFNOworCWRldi0+bl9zdHJlYW1zID0gbWF4KGRldi0+bl9hdWRpb19pbiwgZGV2LT5uX2F1ZGlvX291dCk7CisKKwlkZWJ1ZygiZGV2LT5uX2F1ZGlvX2luID0gJWRcbiIsIGRldi0+bl9hdWRpb19pbik7CisJZGVidWcoImRldi0+bl9hdWRpb19vdXQgPSAlZFxuIiwgZGV2LT5uX2F1ZGlvX291dCk7CisJZGVidWcoImRldi0+bl9zdHJlYW1zID0gJWRcbiIsIGRldi0+bl9zdHJlYW1zKTsKKworCWlmIChkZXYtPm5fc3RyZWFtcyA+IE1BWF9TVFJFQU1TKSB7CisJCWxvZygidW5hYmxlIHRvIGluaXRpYWxpemUgZGV2aWNlLCB0b28gbWFueSBzdHJlYW1zLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHNuZF9wY21fbmV3KGRldi0+Y2hpcC5jYXJkLCBkZXYtPnByb2R1Y3RfbmFtZSwgMCwgCisJCQlkZXYtPm5fYXVkaW9fb3V0LCBkZXYtPm5fYXVkaW9faW4sICZkZXYtPnBjbSk7CisKKwlpZiAocmV0IDwgMCkgeworCQlsb2coInNuZF9wY21fbmV3KCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2LT5wY20tPnByaXZhdGVfZGF0YSA9IGRldjsKKwlzdHJjcHkoZGV2LT5wY20tPm5hbWUsIGRldi0+cHJvZHVjdF9uYW1lKTsKKworCW1lbXNldChkZXYtPnN1Yl9wbGF5YmFjaywgMCwgc2l6ZW9mKGRldi0+c3ViX3BsYXliYWNrKSk7CisJbWVtc2V0KGRldi0+c3ViX2NhcHR1cmUsIDAsIHNpemVvZihkZXYtPnN1Yl9jYXB0dXJlKSk7CisJCisJbWVtY3B5KCZkZXYtPnBjbV9pbmZvLCAmc25kX3VzYl9jYWlhcV9wY21faGFyZHdhcmUsCisJCQlzaXplb2Yoc25kX3VzYl9jYWlhcV9wY21faGFyZHdhcmUpKTsKKworCS8qIHNldHVwIHNhbXBsZXJhdGVzICovCisJZGV2LT5zYW1wbGVyYXRlcyA9IGRldi0+cGNtX2luZm8ucmF0ZXM7CisJc3dpdGNoIChkZXYtPmNoaXAudXNiX2lkKSB7CisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BSzEpOgorCQlkZXYtPnNhbXBsZXJhdGVzIHw9IFNORFJWX1BDTV9SQVRFXzg4MjAwOworCQlkZXYtPnNhbXBsZXJhdGVzIHw9IFNORFJWX1BDTV9SQVRFXzE5MjAwMDsKKwkJYnJlYWs7CisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BVURJTzhESik6CisJCWRldi0+c2FtcGxlcmF0ZXMgfD0gU05EUlZfUENNX1JBVEVfODgyMDA7CisJCWJyZWFrOworCX0KKworCXNuZF9wY21fc2V0X29wcyhkZXYtPnBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgCisJCQkJJnNuZF91c2JfY2FpYXFfb3BzKTsKKwlzbmRfcGNtX3NldF9vcHMoZGV2LT5wY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgCisJCQkJJnNuZF91c2JfY2FpYXFfb3BzKTsKKworCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwoZGV2LT5wY20sCisJCQkJCVNORFJWX0RNQV9UWVBFX0NPTlRJTlVPVVMsCisJCQkJCXNuZF9kbWFfY29udGludW91c19kYXRhKEdGUF9LRVJORUwpLAorCQkJCQlNQVhfQlVGRkVSX1NJWkUsIE1BWF9CVUZGRVJfU0laRSk7CisKKwlkZXYtPmRhdGFfY2JfaW5mbyA9CisJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfdXNiX2NhaWFxX2NiX2luZm8pICogTl9VUkJTLCAKKwkJCQkJR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWRldi0+ZGF0YV9jYl9pbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBOX1VSQlM7IGkrKykgeworCQlkZXYtPmRhdGFfY2JfaW5mb1tpXS5kZXYgPSBkZXY7CisJCWRldi0+ZGF0YV9jYl9pbmZvW2ldLmluZGV4ID0gaTsKKwl9CisJCisJZGV2LT5kYXRhX3VyYnNfaW4gPSBhbGxvY191cmJzKGRldiwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmcmV0KTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShkZXYtPmRhdGFfY2JfaW5mbyk7CisJCWZyZWVfdXJicyhkZXYtPmRhdGFfdXJic19pbik7CisJCXJldHVybiByZXQ7CisJfQorCQorCWRldi0+ZGF0YV91cmJzX291dCA9IGFsbG9jX3VyYnMoZGV2LCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmcmV0KTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShkZXYtPmRhdGFfY2JfaW5mbyk7CisJCWZyZWVfdXJicyhkZXYtPmRhdGFfdXJic19pbik7CisJCWZyZWVfdXJicyhkZXYtPmRhdGFfdXJic19vdXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHNuZF91c2JfY2FpYXFfYXVkaW9fZnJlZShzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KQoreworCWRlYnVnKCJzbmRfdXNiX2NhaWFxX2F1ZGlvX2ZyZWUgKCVwKVxuIiwgZGV2KTsKKwlzdHJlYW1fc3RvcChkZXYpOworCWZyZWVfdXJicyhkZXYtPmRhdGFfdXJic19pbik7CisJZnJlZV91cmJzKGRldi0+ZGF0YV91cmJzX291dCk7CisJa2ZyZWUoZGV2LT5kYXRhX2NiX2luZm8pOworfQorCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtYXVkaW8uaCBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYjFmOGQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtYXVkaW8uaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgQ0FJQVFfQVVESU9fSAorI2RlZmluZSBDQUlBUV9BVURJT19ICisKK2ludCBzbmRfdXNiX2NhaWFxX2F1ZGlvX2luaXQoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldik7Cit2b2lkIHNuZF91c2JfY2FpYXFfYXVkaW9fZnJlZShzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KTsKKworI2VuZGlmIC8qIENBSUFRX0FVRElPX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuYyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzA5MzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5jCkBAIC0wLDAgKzEsNDM2IEBACisvKgorICogY2FpYXEuYzogQUxTQSBkcml2ZXIgZm9yIGNhaWFxL05hdGl2ZUluc3RydW1lbnRzIGRldmljZXMKKyAqCisgKiAgIENvcHlyaWdodCAoYykgMjAwNyBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICogICAgICAgICAgICAgICAgICAgICAgS2Fyc3RlbiBXaWVzZSA8Znp1QHdlbWdlaG9lcnRkZXJzdGFhdC5kZT4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgorCisjaW5jbHVkZSAiY2FpYXEtZGV2aWNlLmgiCisjaW5jbHVkZSAiY2FpYXEtYXVkaW8uaCIKKyNpbmNsdWRlICJjYWlhcS1taWRpLmgiCisKKyNpZmRlZiBDT05GSUdfU05EX1VTQl9DQUlBUV9JTlBVVAorI2luY2x1ZGUgImNhaWFxLWlucHV0LmgiCisjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiY2FpYXEgVVNCIGF1ZGlvLCB2ZXJzaW9uIDEuMS4wIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tOYXRpdmUgSW5zdHJ1bWVudHMsIFJpZ0tvbnRyb2wyfSwiCisJCQkgIntOYXRpdmUgSW5zdHJ1bWVudHMsIEtvcmUgQ29udHJvbGxlcn0sIgorCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBBdWRpbyBLb250cm9sIDF9IgorCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBBdWRpbyA4IERKfX0iKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsgLyogSW5kZXggMC1tYXggKi8KK3N0YXRpYyBjaGFyKiBpZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsgLyogSWQgZm9yIHRoaXMgY2FyZCAqLworc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOyAvKiBFbmFibGUgdGhpcyBjYXJkICovCitzdGF0aWMgaW50IHNuZF9jYXJkX3VzZWRbU05EUlZfQ0FSRFNdOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIHRoZSBjYWlhcSBzb3VuZCBkZXZpY2UiKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgdGhlIGNhaWFxIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgdGhlIGNhaWFxIHNvdW5kY2FyZC4iKTsKKworZW51bSB7CisJU0FNUExFUkFURV80NDEwMAk9IDAsCisJU0FNUExFUkFURV80ODAwMAk9IDEsCisJU0FNUExFUkFURV85NjAwMAk9IDIsCisJU0FNUExFUkFURV8xOTIwMDAJPSAzLAorCVNBTVBMRVJBVEVfODgyMDAJPSA0LAorCVNBTVBMRVJBVEVfSU5WQUxJRAk9IDB4ZmYKK307CisKK2VudW0geworCURFUFRIX05PTkUJPSAwLAorCURFUFRIXzE2CT0gMSwKKwlERVBUSF8yNAk9IDIsCisJREVQVEhfMzIJPSAzCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc25kX3VzYl9pZF90YWJsZVtdID0geworCXsKKwkJLm1hdGNoX2ZsYWdzID0JVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJCS5pZFZlbmRvciA9CVVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsCisJCS5pZFByb2R1Y3QgPQlVU0JfUElEX1JJR0tPTlRST0wyIAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MgPQlVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkJLmlkVmVuZG9yID0JVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywKKwkJLmlkUHJvZHVjdCA9CVVTQl9QSURfS09SRUNPTlRST0xMRVIKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzID0gIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCQkuaWRWZW5kb3IgPSAgICAgVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywKKwkJLmlkUHJvZHVjdCA9ICAgIFVTQl9QSURfQUsxCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncyA9ICBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkJLmlkVmVuZG9yID0gICAgIFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsCisJCS5pZFByb2R1Y3QgPSAgICBVU0JfUElEX0FVRElPOERKCisJfSwKKwl7IC8qIHRlcm1pbmF0b3IgKi8gfQorfTsKKworc3RhdGljIHZvaWQgdXNiX2VwMV9jb21tYW5kX3JlcGx5X2Rpc3BhdGNoIChzdHJ1Y3QgdXJiKiB1cmIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJaWYgKHVyYi0+c3RhdHVzIHx8ICFkZXYpIHsKKwkJbG9nKCJyZWNlaXZlZCBFUDEgdXJiLT5zdGF0dXMgPSAlaVxuIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoKGJ1ZlswXSkgeworCWNhc2UgRVAxX0NNRF9HRVRfREVWSUNFX0lORk86CisJIAltZW1jcHkoJmRldi0+c3BlYywgYnVmKzEsIHNpemVvZihzdHJ1Y3QgY2FpYXFfZGV2aWNlX3NwZWMpKTsKKwkJZGV2LT5zcGVjLmZ3X3ZlcnNpb24gPSBsZTE2X3RvX2NwdShkZXYtPnNwZWMuZndfdmVyc2lvbik7CisJCWRlYnVnKCJkZXZpY2Ugc3BlYyAoZmlybXdhcmUgJWQpOiBhdWRpbzogJWQgaW4sICVkIG91dCwgIgorCQkJIk1JREk6ICVkIGluLCAlZCBvdXQsIGRhdGEgYWxpZ25tZW50ICVkXG4iLAorCQkJZGV2LT5zcGVjLmZ3X3ZlcnNpb24sCisJCQlkZXYtPnNwZWMubnVtX2FuYWxvZ19hdWRpb19pbiwKKwkJCWRldi0+c3BlYy5udW1fYW5hbG9nX2F1ZGlvX291dCwKKwkJCWRldi0+c3BlYy5udW1fbWlkaV9pbiwKKwkJCWRldi0+c3BlYy5udW1fbWlkaV9vdXQsCisJCQlkZXYtPnNwZWMuZGF0YV9hbGlnbm1lbnQpOworCisJCWRldi0+c3BlY19yZWNlaXZlZCsrOworCQl3YWtlX3VwKCZkZXYtPmVwMV93YWl0X3F1ZXVlKTsKKwkJYnJlYWs7CisJY2FzZSBFUDFfQ01EX0FVRElPX1BBUkFNUzoKKwkJZGV2LT5hdWRpb19wYXJtX2Fuc3dlciA9IGJ1ZlsxXTsKKwkJd2FrZV91cCgmZGV2LT5lcDFfd2FpdF9xdWV1ZSk7CisJCWJyZWFrOworCWNhc2UgRVAxX0NNRF9NSURJX1JFQUQ6CisJCXNuZF91c2JfY2FpYXFfbWlkaV9oYW5kbGVfaW5wdXQoZGV2LCBidWZbMV0sIGJ1ZiArIDMsIGJ1ZlsyXSk7CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQKKwljYXNlIEVQMV9DTURfUkVBRF9FUlA6CisJY2FzZSBFUDFfQ01EX1JFQURfQU5BTE9HOgorCWNhc2UgRVAxX0NNRF9SRUFEX0lPOgorCQlzbmRfdXNiX2NhaWFxX2lucHV0X2Rpc3BhdGNoKGRldiwgYnVmLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlicmVhazsKKyNlbmRpZgorCX0KKworCWRldi0+ZXAxX2luX3VyYi5hY3R1YWxfbGVuZ3RoID0gMDsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYigmZGV2LT5lcDFfaW5fdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0IDwgMCkKKwkJbG9nKCJ1bmFibGUgdG8gc3VibWl0IHVyYi4gT09NIT9cbiIpOworfQorCitzdGF0aWMgaW50IHNlbmRfY29tbWFuZCAoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiwKKwkJCSB1bnNpZ25lZCBjaGFyIGNvbW1hbmQsIAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwkJCSBpbnQgbGVuKQoreworCWludCBhY3R1YWxfbGVuOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gZGV2LT5jaGlwLmRldjsKKworCWlmICghdXNiX2RldikKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobGVuID4gRVAxX0JVRlNJWkUgLSAxKQorCQlsZW4gPSBFUDFfQlVGU0laRSAtIDE7CisKKwlpZiAoYnVmZmVyICYmIGxlbiA+IDApCisJCW1lbWNweShkZXYtPmVwMV9vdXRfYnVmKzEsIGJ1ZmZlciwgbGVuKTsKKwkKKwlkZXYtPmVwMV9vdXRfYnVmWzBdID0gY29tbWFuZDsKKwlyZXR1cm4gdXNiX2J1bGtfbXNnKHVzYl9kZXYsIHVzYl9zbmRidWxrcGlwZSh1c2JfZGV2LCAxKSwKKwkJCSAgIGRldi0+ZXAxX291dF9idWYsIGxlbisxLCAmYWN0dWFsX2xlbiwgMjAwKTsKK30KKworaW50IHNuZF91c2JfY2FpYXFfc2V0X2F1ZGlvX3BhcmFtcyAoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiwKKwkJICAgCQkgICAgaW50IHJhdGUsIGludCBkZXB0aCwgaW50IGJwcCkKK3sKKwlpbnQgcmV0OworCWNoYXIgdG1wWzVdOworCQorCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgNDQxMDA6CXRtcFswXSA9IFNBTVBMRVJBVEVfNDQxMDA7ICAgYnJlYWs7CisJY2FzZSA0ODAwMDoJdG1wWzBdID0gU0FNUExFUkFURV80ODAwMDsgICBicmVhazsKKwljYXNlIDg4MjAwOgl0bXBbMF0gPSBTQU1QTEVSQVRFXzg4MjAwOyAgIGJyZWFrOworCWNhc2UgOTYwMDA6CXRtcFswXSA9IFNBTVBMRVJBVEVfOTYwMDA7ICAgYnJlYWs7CisJY2FzZSAxOTIwMDA6CXRtcFswXSA9IFNBTVBMRVJBVEVfMTkyMDAwOyAgYnJlYWs7CisJZGVmYXVsdDoJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChkZXB0aCkgeworCWNhc2UgMTY6CXRtcFsxXSA9IERFUFRIXzE2OyAgIGJyZWFrOworCWNhc2UgMjQ6CXRtcFsxXSA9IERFUFRIXzI0OyAgIGJyZWFrOworCWRlZmF1bHQ6CXJldHVybiAtRUlOVkFMOworCX0KKworCXRtcFsyXSA9IGJwcCAmIDB4ZmY7CisJdG1wWzNdID0gYnBwID4+IDg7CisJdG1wWzRdID0gMTsgLyogcGFja2V0cyBwZXIgbWljcm9mcmFtZSAqLworCisJZGVidWcoInNldHRpbmcgYXVkaW8gcGFyYW1zOiAlZCBIeiwgJWQgYml0cywgJWQgYnBwXG4iLAorCQlyYXRlLCBkZXB0aCwgYnBwKTsKKworCWRldi0+YXVkaW9fcGFybV9hbnN3ZXIgPSAtMTsKKwlyZXQgPSBzZW5kX2NvbW1hbmQoZGV2LCBFUDFfQ01EX0FVRElPX1BBUkFNUywgdG1wLCBzaXplb2YodG1wKSk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCQorCWlmICghd2FpdF9ldmVudF90aW1lb3V0KGRldi0+ZXAxX3dhaXRfcXVldWUsIAorCSAgICBkZXYtPmF1ZGlvX3Bhcm1fYW5zd2VyID49IDAsIEhaKSkKKwkJcmV0dXJuIC1FUElQRTsKKwkJCisJaWYgKGRldi0+YXVkaW9fcGFybV9hbnN3ZXIgIT0gMSkgCisJCWRlYnVnKCJ1bmFibGUgdG8gc2V0IHRoZSBkZXZpY2UncyBhdWRpbyBwYXJhbXNcbiIpOworCisJcmV0dXJuIGRldi0+YXVkaW9fcGFybV9hbnN3ZXIgPT0gMSA/IDAgOiAtRUlOVkFMOworfQorCitpbnQgc25kX3VzYl9jYWlhcV9zZXRfYXV0b19tc2cgKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYsIAorCQkJCWludCBkaWdpdGFsLCBpbnQgYW5hbG9nLCBpbnQgZXJwKQoreworCWNoYXIgdG1wWzNdID0geyBkaWdpdGFsLCBhbmFsb2csIGVycCB9OworCXJldHVybiBzZW5kX2NvbW1hbmQoZGV2LCBFUDFfQ01EX0FVVE9fTVNHLCB0bXAsIHNpemVvZih0bXApKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfY2FyZChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KQoreworCWludCByZXQ7CisJY2hhciB2YWxbM107CisJCisJLyogZGV2aWNlLXNwZWNpZmljIHN0YXJ0dXAgc3BlY2lhbHMgKi8KKwlzd2l0Y2ggKGRldi0+Y2hpcC51c2JfaWQpIHsKKwljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX1JJR0tPTlRST0wyKToKKwkJLyogUmlnS29udHJvbDIgLSBkaXNwbGF5IGNlbnRlcmVkIGRhc2ggKCctJykgKi8KKwkJdmFsWzBdID0gMHgwMDsKKwkJdmFsWzFdID0gMHgwMDsKKwkJdmFsWzJdID0gMHgwMTsKKwkJc2VuZF9jb21tYW5kKGRldiwgRVAxX0NNRF9XUklURV9JTywgdmFsLCAzKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BSzEpOgorCQkvKiBBdWRpbyBLb250cm9sIDEgLSBtYWtlIFVTQi1MRUQgc3RvcCBibGlua2luZyAqLworCQl2YWxbMF0gPSAweDAwOworCQlzZW5kX2NvbW1hbmQoZGV2LCBFUDFfQ01EX1dSSVRFX0lPLCB2YWwsIDEpOworCQlicmVhazsKKwl9CisJCisJcmV0ID0gc25kX3VzYl9jYWlhcV9hdWRpb19pbml0KGRldik7CisJaWYgKHJldCA8IDApCisJCWxvZygiVW5hYmxlIHRvIHNldCB1cCBhdWRpbyBzeXN0ZW0gKHJldD0lZClcbiIsIHJldCk7CisJCisJcmV0ID0gc25kX3VzYl9jYWlhcV9taWRpX2luaXQoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJbG9nKCJVbmFibGUgdG8gc2V0IHVwIE1JREkgc3lzdGVtIChyZXQ9JWQpXG4iLCByZXQpOworCisjaWZkZWYgQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQKKwlyZXQgPSBzbmRfdXNiX2NhaWFxX2lucHV0X2luaXQoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJbG9nKCJVbmFibGUgdG8gc2V0IHVwIGlucHV0IHN5c3RlbSAocmV0PSVkKVxuIiwgcmV0KTsKKyNlbmRpZgorCisJLyogZmluYWxseSwgcmVnaXN0ZXIgdGhlIGNhcmQgYW5kIGFsbCBpdHMgc3ViLWluc3RhbmNlcyAqLworCXJldCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGRldi0+Y2hpcC5jYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlsb2coInNuZF9jYXJkX3JlZ2lzdGVyKCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCXNuZF9jYXJkX2ZyZWUoZGV2LT5jaGlwLmNhcmQpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBzbmRfY2FyZCogY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UqIHVzYl9kZXYpCit7CisJaW50IGRldm51bTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldjsKKworCWZvciAoZGV2bnVtID0gMDsgZGV2bnVtIDwgU05EUlZfQ0FSRFM7IGRldm51bSsrKQorCQlpZiAoZW5hYmxlW2Rldm51bV0gJiYgIXNuZF9jYXJkX3VzZWRbZGV2bnVtXSkKKwkJCWJyZWFrOworCisJaWYgKGRldm51bSA+PSBTTkRSVl9DQVJEUykKKwkJcmV0dXJuIE5VTEw7CisKKwljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLCAKKwkJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2KSk7CisJaWYgKCFjYXJkKQorCQlyZXR1cm4gTlVMTDsKKworCWRldiA9IGNhaWFxZGV2KGNhcmQpOworCWRldi0+Y2hpcC5kZXYgPSB1c2JfZGV2OworCWRldi0+Y2hpcC5jYXJkID0gY2FyZDsKKwlkZXYtPmNoaXAudXNiX2lkID0gVVNCX0lEKHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IsCisJCQkJCXVzYl9kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5zcGlubG9jayk7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmdXNiX2Rldi0+ZGV2KTsKKworCXJldHVybiBjYXJkOworfQorCitzdGF0aWMgaW50IGluaXRfY2FyZChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KQoreworCWNoYXIgKmM7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBkZXYtPmNoaXAuZGV2OworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldi0+Y2hpcC5jYXJkOworCWludCBlcnIsIGxlbjsKKwkKKwlpZiAodXNiX3NldF9pbnRlcmZhY2UodXNiX2RldiwgMCwgMSkgIT0gMCkgeworCQlsb2coImNhbid0IHNldCBhbHQgaW50ZXJmYWNlLlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXVzYl9pbml0X3VyYigmZGV2LT5lcDFfaW5fdXJiKTsKKwl1c2JfaW5pdF91cmIoJmRldi0+bWlkaV9vdXRfdXJiKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKCZkZXYtPmVwMV9pbl91cmIsIHVzYl9kZXYsIAorCQkJICB1c2JfcmN2YnVsa3BpcGUodXNiX2RldiwgMHgxKSwKKwkJCSAgZGV2LT5lcDFfaW5fYnVmLCBFUDFfQlVGU0laRSwgCisJCQkgIHVzYl9lcDFfY29tbWFuZF9yZXBseV9kaXNwYXRjaCwgZGV2KTsKKworCXVzYl9maWxsX2J1bGtfdXJiKCZkZXYtPm1pZGlfb3V0X3VyYiwgdXNiX2RldiwgCisJCQkgIHVzYl9zbmRidWxrcGlwZSh1c2JfZGV2LCAweDEpLAorCQkJICBkZXYtPm1pZGlfb3V0X2J1ZiwgRVAxX0JVRlNJWkUsIAorCQkJICBzbmRfdXNiX2NhaWFxX21pZGlfb3V0cHV0X2RvbmUsIGRldik7CisJCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5lcDFfd2FpdF9xdWV1ZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5wcmVwYXJlX3dhaXRfcXVldWUpOworCQorCWlmICh1c2Jfc3VibWl0X3VyYigmZGV2LT5lcDFfaW5fdXJiLCBHRlBfS0VSTkVMKSAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCWVyciA9IHNlbmRfY29tbWFuZChkZXYsIEVQMV9DTURfR0VUX0RFVklDRV9JTkZPLCBOVUxMLCAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT5lcDFfd2FpdF9xdWV1ZSwgZGV2LT5zcGVjX3JlY2VpdmVkLCBIWikpCisJCXJldHVybiAtRU5PREVWOworCisJdXNiX3N0cmluZyh1c2JfZGV2LCB1c2JfZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIsCisJCSAgIGRldi0+dmVuZG9yX25hbWUsIENBSUFRX1VTQl9TVFJfTEVOKTsKKwkKKwl1c2Jfc3RyaW5nKHVzYl9kZXYsIHVzYl9kZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QsCisJCSAgIGRldi0+cHJvZHVjdF9uYW1lLCBDQUlBUV9VU0JfU1RSX0xFTik7CisJCisJdXNiX3N0cmluZyh1c2JfZGV2LCB1c2JfZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIsCisJCSAgIGRldi0+c2VyaWFsLCBDQUlBUV9VU0JfU1RSX0xFTik7CisKKwkvKiB0ZXJtaW5hdGUgc2VyaWFsIHN0cmluZyBhdCBmaXJzdCB3aGl0ZSBzcGFjZSBvY2N1cmVuY2UgKi8KKwljID0gc3RyY2hyKGRldi0+c2VyaWFsLCAnICcpOworCWlmIChjKQorCQkqYyA9ICdcMCc7CisJCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgTU9ETkFNRSk7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgZGV2LT5wcm9kdWN0X25hbWUpOworCisJbGVuID0gc25wcmludGYoY2FyZC0+bG9uZ25hbWUsIHNpemVvZihjYXJkLT5sb25nbmFtZSksCisJCSAgICAgICAiJXMgJXMgKHNlcmlhbCAlcywgIiwKKwkJICAgICAgIGRldi0+dmVuZG9yX25hbWUsIGRldi0+cHJvZHVjdF9uYW1lLCBkZXYtPnNlcmlhbCk7CisKKwlpZiAobGVuIDwgc2l6ZW9mKGNhcmQtPmxvbmduYW1lKSAtIDIpCisJCWxlbiArPSB1c2JfbWFrZV9wYXRoKHVzYl9kZXYsIGNhcmQtPmxvbmduYW1lICsgbGVuLAorCQkJCSAgICAgc2l6ZW9mKGNhcmQtPmxvbmduYW1lKSAtIGxlbik7CisKKwljYXJkLT5sb25nbmFtZVtsZW4rK10gPSAnKSc7CisJY2FyZC0+bG9uZ25hbWVbbGVuXSA9ICdcMCc7CisJc2V0dXBfY2FyZChkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZpY2UgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCQorCWNhcmQgPSBjcmVhdGVfY2FyZChkZXZpY2UpOworCQorCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJCQkKKwlkZXZfc2V0X2RydmRhdGEoJmludGYtPmRldiwgY2FyZCk7CisJcmV0ID0gaW5pdF9jYXJkKGNhaWFxZGV2KGNhcmQpKTsKKwlpZiAocmV0IDwgMCkgeworCQlsb2coInVuYWJsZSB0byBpbml0IGNhcmQhIChyZXQ9JWQpXG4iLCByZXQpOworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gcmV0OworCX0KKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc25kX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoJmludGYtPmRldik7CisKKwlkZWJ1Zygic25kX2Rpc2Nvbm5lY3QoJXApXG4iLCBpbnRmKTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuOworCisJZGV2ID0gY2FpYXFkZXYoY2FyZCk7CisJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKKworI2lmZGVmIENPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUCisJc25kX3VzYl9jYWlhcV9pbnB1dF9mcmVlKGRldik7CisjZW5kaWYKKwlzbmRfdXNiX2NhaWFxX2F1ZGlvX2ZyZWUoZGV2KTsKKwkKKwl1c2Jfa2lsbF91cmIoJmRldi0+ZXAxX2luX3VyYik7CisJdXNiX2tpbGxfdXJiKCZkZXYtPm1pZGlfb3V0X3VyYik7CisJCisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwl1c2JfcmVzZXRfZGV2aWNlKGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOworfQorCisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzbmRfdXNiX2lkX3RhYmxlKTsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzbmRfdXNiX2RyaXZlciA9IHsKKwkubmFtZSAJCT0gTU9ETkFNRSwKKwkucHJvYmUgCQk9IHNuZF9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHNuZF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSAJPSBzbmRfdXNiX2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc25kX21vZHVsZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3Rlcigmc25kX3VzYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc25kX21vZHVsZV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNuZF91c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc25kX21vZHVsZV9pbml0KQorbW9kdWxlX2V4aXQoc25kX21vZHVsZV9leGl0KQorCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmggYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg4ZDVlYwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuaApAQCAtMCwwICsxLDExNiBAQAorI2lmbmRlZiBDQUlBUV9ERVZJQ0VfSAorI2RlZmluZSBDQUlBUV9ERVZJQ0VfSAorCisjaW5jbHVkZSAiLi4vdXNiYXVkaW8uaCIKKworI2RlZmluZSBVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTIDB4MTdjYworCisjZGVmaW5lIFVTQl9QSURfUklHS09OVFJPTDIJMHgxOTY5CisjZGVmaW5lIFVTQl9QSURfS09SRUNPTlRST0xMRVIgCTB4NDcxMQorI2RlZmluZSBVU0JfUElEX0FLMQkJMHgwODE1CisjZGVmaW5lIFVTQl9QSURfQVVESU84REoJMHgxOTc4CisKKyNkZWZpbmUgRVAxX0JVRlNJWkUgNjQKKyNkZWZpbmUgQ0FJQVFfVVNCX1NUUl9MRU4gMHhmZgorI2RlZmluZSBNQVhfU1RSRUFNUyAzMgorCisvLyNkZWZpbmUJU05EX1VTQl9DQUlBUV9ERUJVRworCisjZGVmaW5lIE1PRE5BTUUgInNuZC11c2ItY2FpYXEiCisjZGVmaW5lIGxvZyh4Li4uKSBzbmRfcHJpbnRrKEtFUk5fV0FSTklORyBNT0ROQU1FIiBsb2c6ICIgeCkKKworI2lmZGVmIFNORF9VU0JfQ0FJQVFfREVCVUcKKyNkZWZpbmUgZGVidWcoeC4uLikgc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgTU9ETkFNRSAiIGRlYnVnOiAiIHgpCisjZWxzZQorI2RlZmluZSBkZWJ1Zyh4Li4uKSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIEVQMV9DTURfR0VUX0RFVklDRV9JTkZPCTB4MQorI2RlZmluZSBFUDFfQ01EX1JFQURfRVJQCTB4MgorI2RlZmluZSBFUDFfQ01EX1JFQURfQU5BTE9HCTB4MworI2RlZmluZSBFUDFfQ01EX1JFQURfSU8JCTB4NAorI2RlZmluZSBFUDFfQ01EX1dSSVRFX0lPCTB4NQorI2RlZmluZSBFUDFfQ01EX01JRElfUkVBRAkweDYKKyNkZWZpbmUgRVAxX0NNRF9NSURJX1dSSVRFCTB4NworI2RlZmluZSBFUDFfQ01EX0FVRElPX1BBUkFNUwkweDkKKyNkZWZpbmUgRVAxX0NNRF9BVVRPX01TRwkweGIKKworc3RydWN0IGNhaWFxX2RldmljZV9zcGVjIHsKKwl1bnNpZ25lZCBzaG9ydCBmd192ZXJzaW9uOworCXVuc2lnbmVkIGNoYXIgaHdfc3VidHlwZTsKKwl1bnNpZ25lZCBjaGFyIG51bV9lcnA7CisJdW5zaWduZWQgY2hhciBudW1fYW5hbG9nX2luOworCXVuc2lnbmVkIGNoYXIgbnVtX2RpZ2l0YWxfaW47CisJdW5zaWduZWQgY2hhciBudW1fZGlnaXRhbF9vdXQ7CisJdW5zaWduZWQgY2hhciBudW1fYW5hbG9nX2F1ZGlvX291dDsKKwl1bnNpZ25lZCBjaGFyIG51bV9hbmFsb2dfYXVkaW9faW47CisJdW5zaWduZWQgY2hhciBudW1fZGlnaXRhbF9hdWRpb19vdXQ7CisJdW5zaWduZWQgY2hhciBudW1fZGlnaXRhbF9hdWRpb19pbjsKKwl1bnNpZ25lZCBjaGFyIG51bV9taWRpX291dDsKKwl1bnNpZ25lZCBjaGFyIG51bV9taWRpX2luOworCXVuc2lnbmVkIGNoYXIgZGF0YV9hbGlnbm1lbnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHNuZF91c2JfY2FpYXFfY2JfaW5mbzsKKworc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgeworCXN0cnVjdCBzbmRfdXNiX2F1ZGlvIGNoaXA7CisKKwlzdHJ1Y3QgdXJiIGVwMV9pbl91cmI7CisJc3RydWN0IHVyYiBtaWRpX291dF91cmI7CisJc3RydWN0IHVyYiAqKmRhdGFfdXJic19pbjsKKwlzdHJ1Y3QgdXJiICoqZGF0YV91cmJzX291dDsKKwlzdHJ1Y3Qgc25kX3VzYl9jYWlhcV9jYl9pbmZvICpkYXRhX2NiX2luZm87CisJCisJdW5zaWduZWQgY2hhciBlcDFfaW5fYnVmW0VQMV9CVUZTSVpFXTsKKwl1bnNpZ25lZCBjaGFyIGVwMV9vdXRfYnVmW0VQMV9CVUZTSVpFXTsKKwl1bnNpZ25lZCBjaGFyIG1pZGlfb3V0X2J1ZltFUDFfQlVGU0laRV07CisKKwlzdHJ1Y3QgY2FpYXFfZGV2aWNlX3NwZWMgc3BlYzsKKwlzcGlubG9ja190IHNwaW5sb2NrOworCXdhaXRfcXVldWVfaGVhZF90IGVwMV93YWl0X3F1ZXVlOworCXdhaXRfcXVldWVfaGVhZF90IHByZXBhcmVfd2FpdF9xdWV1ZTsKKwlpbnQgc3BlY19yZWNlaXZlZCwgYXVkaW9fcGFybV9hbnN3ZXI7CisJCisJY2hhciB2ZW5kb3JfbmFtZVtDQUlBUV9VU0JfU1RSX0xFTl07CisJY2hhciBwcm9kdWN0X25hbWVbQ0FJQVFfVVNCX1NUUl9MRU5dOworCWNoYXIgc2VyaWFsW0NBSUFRX1VTQl9TVFJfTEVOXTsKKworCWludCBuX3N0cmVhbXMsIG5fYXVkaW9faW4sIG5fYXVkaW9fb3V0OworCWludCBzdHJlYW1pbmcsIGZpcnN0X3BhY2tldCwgb3V0cHV0X3J1bm5pbmc7CisJaW50IGF1ZGlvX2luX2J1Zl9wb3NbTUFYX1NUUkVBTVNdOworCWludCBhdWRpb19vdXRfYnVmX3Bvc1tNQVhfU1RSRUFNU107CisJaW50IHBlcmlvZF9pbl9jb3VudFtNQVhfU1RSRUFNU107CisJaW50IHBlcmlvZF9vdXRfY291bnRbTUFYX1NUUkVBTVNdOworCWludCBpbnB1dF9wYW5pYywgb3V0cHV0X3BhbmljOworCWNoYXIgKmF1ZGlvX2luX2J1ZiwgKmF1ZGlvX291dF9idWY7CisJdW5zaWduZWQgaW50IHNhbXBsZXJhdGVzOworCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJfcGxheWJhY2tbTUFYX1NUUkVBTVNdOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViX2NhcHR1cmVbTUFYX1NUUkVBTVNdOworCisJLyogTGludXggaW5wdXQgKi8KKyNpZmRlZiBDT05GSUdfU05EX1VTQl9DQUlBUV9JTlBVVAorCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKyNlbmRpZgorCQorCS8qIEFMU0EgKi8KKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9pbmZvOworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqbWlkaV9yZWNlaXZlX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICptaWRpX291dF9zdWJzdHJlYW07Cit9OworCitzdHJ1Y3Qgc25kX3VzYl9jYWlhcV9jYl9pbmZvIHsKKwlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2OworCWludCBpbmRleDsKK307CisKKyNkZWZpbmUgY2FpYXFkZXYoYykgKChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiopKGMpLT5wcml2YXRlX2RhdGEpCisKK2ludCBzbmRfdXNiX2NhaWFxX3NldF9hdWRpb19wYXJhbXMgKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYsIGludCByYXRlLCBpbnQgZGVwdGgsIGludCBiYnApOworaW50IHNuZF91c2JfY2FpYXFfc2V0X2F1dG9fbXNnIChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LCBpbnQgZGlnaXRhbCwgaW50IGFuYWxvZywgaW50IGVycCk7CisKKworI2VuZGlmIC8qIENBSUFRX0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtaW5wdXQuYyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1pbnB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhY2QxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtaW5wdXQuYwpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqICAgQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcgRGFuaWVsIE1hY2ssIFRpbSBSdWV0egorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlICJjYWlhcS1kZXZpY2UuaCIKKyNpbmNsdWRlICJjYWlhcS1pbnB1dC5oIgorCisjaWZkZWYgQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQKKworc3RhdGljIHVuc2lnbmVkIGNoYXIga2V5Y29kZV9hazFbXSA9ICB7IEtFWV9DLCBLRVlfQiwgS0VZX0EgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGtleWNvZGVfcmsyW10gPSAgeyBLRVlfMSwgS0VZXzIsIEtFWV8zLCBLRVlfNCwgCisJCQkJCUtFWV81LCBLRVlfNiwgS0VZXzcgfTsKKworI2RlZmluZSBERUc5MCAgKHJhbmdlLzIpCisjZGVmaW5lIERFRzE4MCAocmFuZ2UpCisjZGVmaW5lIERFRzI3MCAoREVHOTAgKyBERUcxODApCisjZGVmaW5lIERFRzM2MCAoREVHMTgwICogMikKKyNkZWZpbmUgSElHSF9QRUFLICgyNjgpCisjZGVmaW5lIExPV19QRUFLICgtNykKKworLyogc29tZSBvZiB0aGVzZSBkZXZpY2VzIGhhdmUgZW5kbGVzcyByb3RhdGlvbiBwb3RlbnRpb21ldGVycworICogYnVpbHQgaW4gd2hpY2ggdXNlIHR3byB0YXBlcnMsIDkwIGRlZ3JlZXMgcGhhc2Ugc2hpZnRlZC4KKyAqIHRoaXMgYWxnb3JpdGhtIGRlY29kZXMgdGhlbSB0byBvbmUgc2luZ2xlIHZhbHVlLCByYW5naW5nCisgKiBmcm9tIDAgdG8gOTk5ICovCitzdGF0aWMgdW5zaWduZWQgaW50IGRlY29kZV9lcnAodW5zaWduZWQgY2hhciBhLCB1bnNpZ25lZCBjaGFyIGIpCit7CisJaW50IHdlaWdodF9hLCB3ZWlnaHRfYjsKKwlpbnQgcG9zX2EsIHBvc19iOworCWludCByZXQ7CisJaW50IHJhbmdlID0gSElHSF9QRUFLIC0gTE9XX1BFQUs7CisJaW50IG1pZF92YWx1ZSA9IChISUdIX1BFQUsgKyBMT1dfUEVBSykgLyAyOworCisJd2VpZ2h0X2IgPSBhYnMobWlkX3ZhbHVlLWEpIC0gKHJhbmdlLzIgLSAxMDApLzI7CisJCisJaWYgKHdlaWdodF9iIDwgMCkKKwkJd2VpZ2h0X2IgPSAwOworCisJaWYgKHdlaWdodF9iID4gMTAwKQorCQl3ZWlnaHRfYiA9IDEwMDsKKworCXdlaWdodF9hID0gMTAwIC0gd2VpZ2h0X2I7CisKKwlpZiAoYSA8IG1pZF92YWx1ZSkgeworCQkvKiAwLi45MCBhbmQgMjcwLi4zNjAgZGVncmVlcyAqLworCQlwb3NfYiA9IGIgLSBMT1dfUEVBSyArIERFRzI3MDsKKwkJaWYgKHBvc19iID49IERFRzM2MCkKKwkJCXBvc19iIC09IERFRzM2MDsKKwl9IGVsc2UKKwkJLyogOTAuLjI3MCBkZWdyZWVzICovCisJCXBvc19iID0gSElHSF9QRUFLIC0gYiArIERFRzkwOworCisKKwlpZiAoYiA+IG1pZF92YWx1ZSkKKwkJLyogMC4uMTgwIGRlZ3JlZXMgKi8KKwkJcG9zX2EgPSBhIC0gTE9XX1BFQUs7CisJZWxzZQorCQkvKiAxODAuLjM2MCBkZWdyZWVzICovCisJCXBvc19hID0gSElHSF9QRUFLIC0gYSArIERFRzE4MDsKKworCS8qIGludGVycG9sYXRlIGJvdGggc2xpZGVyIHZhbHVlcywgZGVwZW5kaW5nIG9uIHdlaWdodCBmYWN0b3JzICovCisJLyogMC4uOTkgeCBERUczNjAgKi8KKwlyZXQgPSBwb3NfYSAqIHdlaWdodF9hICsgcG9zX2IgKiB3ZWlnaHRfYjsKKworCS8qIG5vcm1hbGl6ZSB0byAwLi45OTkgKi8KKwlyZXQgKj0gMTA7CisJcmV0IC89IERFRzM2MDsKKworCWlmIChyZXQgPCAwKQorCQlyZXQgKz0gMTAwMDsKKwkKKwlpZiAocmV0ID49IDEwMDApCisJCXJldCAtPSAxMDAwOworCisJcmV0dXJuIHJldDsKK30KKworI3VuZGVmIERFRzkwCisjdW5kZWYgREVHMTgwCisjdW5kZWYgREVHMjcwCisjdW5kZWYgREVHMzYwCisjdW5kZWYgSElHSF9QRUFLCisjdW5kZWYgTE9XX1BFQUsKKworCitzdGF0aWMgdm9pZCBzbmRfY2FpYXFfaW5wdXRfcmVhZF9hbmFsb2coc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiwgCisJCQkJCWNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzd2l0Y2goZGV2LT5pbnB1dF9kZXYtPmlkLnByb2R1Y3QpIHsKKwljYXNlIFVTQl9QSURfUklHS09OVFJPTDI6CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LT5pbnB1dF9kZXYsIEFCU19YLCAoYnVmWzRdIDw8IDgpIHxidWZbNV0pOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldi0+aW5wdXRfZGV2LCBBQlNfWSwgKGJ1ZlswXSA8PCA4KSB8YnVmWzFdKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYtPmlucHV0X2RldiwgQUJTX1osIChidWZbMl0gPDwgOCkgfGJ1ZlszXSk7CisJCWlucHV0X3N5bmMoZGV2LT5pbnB1dF9kZXYpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9jYWlhcV9pbnB1dF9yZWFkX2VycChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LCAKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCXN3aXRjaChkZXYtPmlucHV0X2Rldi0+aWQucHJvZHVjdCkgeworCWNhc2UgVVNCX1BJRF9BSzE6CisJCWkgPSBkZWNvZGVfZXJwKGJ1ZlswXSwgYnVmWzFdKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYtPmlucHV0X2RldiwgQUJTX1gsIGkpOworCQlpbnB1dF9zeW5jKGRldi0+aW5wdXRfZGV2KTsJCisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgc25kX2NhaWFxX2lucHV0X3JlYWRfaW8oc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiwgCisJCQkJICAgIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyICprZXljb2RlID0gZGV2LT5pbnB1dF9kZXYtPmtleWNvZGU7CisKKwlpZiAoIWtleWNvZGUpCisJCXJldHVybjsKKworCWlmIChkZXYtPmlucHV0X2Rldi0+aWQucHJvZHVjdCA9PSBVU0JfUElEX1JJR0tPTlRST0wyKQorCQlmb3IgKGk9MDsgaTxsZW47IGkrKykKKwkJCWJ1ZltpXSA9IH5idWZbaV07CisKKwlmb3IgKGk9MDsgKGk8ZGV2LT5pbnB1dF9kZXYtPmtleWNvZGVtYXgpICYmIChpIDwgbGVuKTsgaSsrKQorCQlpbnB1dF9yZXBvcnRfa2V5KGRldi0+aW5wdXRfZGV2LCBrZXljb2RlW2ldLCAKKwkJCQkJYnVmW2kvOF0gJiAoMSA8PCAoaSU4KSkpOworCisJaW5wdXRfc3luYyhkZXYtPmlucHV0X2Rldik7Cit9CisKK3ZvaWQgc25kX3VzYl9jYWlhcV9pbnB1dF9kaXNwYXRjaChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LCAKKwkJCQkgIGNoYXIgKmJ1ZiwgCisJCQkJICB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlmICghZGV2LT5pbnB1dF9kZXYgfHwgKGxlbiA8IDEpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGJ1ZlswXSkgeworCWNhc2UgRVAxX0NNRF9SRUFEX0FOQUxPRzoKKwkJc25kX2NhaWFxX2lucHV0X3JlYWRfYW5hbG9nKGRldiwgYnVmKzEsIGxlbi0xKTsKKwkJYnJlYWs7CisJY2FzZSBFUDFfQ01EX1JFQURfRVJQOgorCQlzbmRfY2FpYXFfaW5wdXRfcmVhZF9lcnAoZGV2LCBidWYrMSwgbGVuLTEpOworCQlicmVhazsKKwljYXNlIEVQMV9DTURfUkVBRF9JTzoKKwkJc25kX2NhaWFxX2lucHV0X3JlYWRfaW8oZGV2LCBidWYrMSwgbGVuLTEpOworCQlicmVhazsKKwl9Cit9CisKK2ludCBzbmRfdXNiX2NhaWFxX2lucHV0X2luaXQoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGRldi0+Y2hpcC5kZXY7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJaW50IGksIHJldDsKKworCWlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpbnB1dCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbnB1dC0+bmFtZSA9IGRldi0+cHJvZHVjdF9uYW1lOworCWlucHV0LT5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwlpbnB1dC0+aWQudmVuZG9yICA9IHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3I7CisJaW5wdXQtPmlkLnByb2R1Y3QgPSB1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdDsKKwlpbnB1dC0+aWQudmVyc2lvbiA9IHVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlOworCisgICAgICAgIHN3aXRjaCAoZGV2LT5jaGlwLnVzYl9pZCkgeworCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfUklHS09OVFJPTDIpOgorCQlpbnB1dC0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOworCQlpbnB1dC0+YWJzYml0WzBdID0gQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfCBCSVQoQUJTX1opOworCQlpbnB1dC0+a2V5Y29kZSA9IGtleWNvZGVfcmsyOworCQlpbnB1dC0+a2V5Y29kZXNpemUgPSBzaXplb2YoY2hhcik7CisJCWlucHV0LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShrZXljb2RlX3JrMik7CisJCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoa2V5Y29kZV9yazIpOyBpKyspCisJCQlzZXRfYml0KGtleWNvZGVfcmsyW2ldLCBpbnB1dC0+a2V5Yml0KTsKKworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX1gsIDAsIDQwOTYsIDAsIDEwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19ZLCAwLCA0MDk2LCAwLCAxMCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWiwgMCwgNDA5NiwgMCwgMTApOworCQlzbmRfdXNiX2NhaWFxX3NldF9hdXRvX21zZyhkZXYsIDEsIDEwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfSUQoVVNCX1ZJRF9OQVRJVkVJTlNUUlVNRU5UUywgVVNCX1BJRF9BSzEpOgorCQlpbnB1dC0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOworCQlpbnB1dC0+YWJzYml0WzBdID0gQklUKEFCU19YKTsKKwkJaW5wdXQtPmtleWNvZGUgPSBrZXljb2RlX2FrMTsKKwkJaW5wdXQtPmtleWNvZGVzaXplID0gc2l6ZW9mKGNoYXIpOworCQlpbnB1dC0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoa2V5Y29kZV9hazEpOworCQlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGtleWNvZGVfYWsxKTsgaSsrKQorCQkJc2V0X2JpdChrZXljb2RlX2FrMVtpXSwgaW5wdXQtPmtleWJpdCk7CisKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19YLCAwLCA5OTksIDAsIDEwKTsKKwkJc25kX3VzYl9jYWlhcV9zZXRfYXV0b19tc2coZGV2LCAxLCAwLCA1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogbm8gaW5wdXQgbWV0aG9kcyBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UgKi8KKwkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCWlmIChyZXQgPCAwKSB7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXYtPmlucHV0X2RldiA9IGlucHV0OworCXJldHVybiAwOworfQorCit2b2lkIHNuZF91c2JfY2FpYXFfaW5wdXRfZnJlZShzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KQoreworCWlmICghZGV2IHx8ICFkZXYtPmlucHV0X2RldikKKwkJcmV0dXJuOworCisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT5pbnB1dF9kZXYpOworCWlucHV0X2ZyZWVfZGV2aWNlKGRldi0+aW5wdXRfZGV2KTsKKwlkZXYtPmlucHV0X2RldiA9IE5VTEw7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU05EX1VTQl9DQUlBUV9JTlBVVCAqLworCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtaW5wdXQuaCBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1pbnB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDUzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtaW5wdXQuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgQ0FJQVFfSU5QVVRfSAorI2RlZmluZSBDQUlBUV9JTlBVVF9ICisKK3ZvaWQgc25kX3VzYl9jYWlhcV9pbnB1dF9kaXNwYXRjaChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pOworaW50IHNuZF91c2JfY2FpYXFfaW5wdXRfaW5pdChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KTsKK3ZvaWQgc25kX3VzYl9jYWlhcV9pbnB1dF9mcmVlKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1taWRpLmMgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtbWlkaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5M2NhMjAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtbWlkaS5jCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogICBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBEYW5pZWwgTWFjaworICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKworI2luY2x1ZGUgImNhaWFxLWRldmljZS5oIgorI2luY2x1ZGUgImNhaWFxLW1pZGkuaCIKKworCitzdGF0aWMgaW50IHNuZF91c2JfY2FpYXFfbWlkaV9pbnB1dF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfdXNiX2NhaWFxX21pZGlfaW5wdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfdXNiX2NhaWFxX21pZGlfaW5wdXRfdHJpZ2dlcihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCB1cCkKK3sKKwlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFkZXYpCisJCXJldHVybjsKKwkKKwlkZXYtPm1pZGlfcmVjZWl2ZV9zdWJzdHJlYW0gPSB1cCA/IHN1YnN0cmVhbSA6IE5VTEw7Cit9CisKKworc3RhdGljIGludCBzbmRfdXNiX2NhaWFxX21pZGlfb3V0cHV0X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF91c2JfY2FpYXFfbWlkaV9vdXRwdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfdXNiX2NhaWFxX21pZGlfc2VuZChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LAorCQkJCSAgICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IGxlbiwgcmV0OworCQorCWRldi0+bWlkaV9vdXRfYnVmWzBdID0gRVAxX0NNRF9NSURJX1dSSVRFOworCWRldi0+bWlkaV9vdXRfYnVmWzFdID0gMDsgLyogcG9ydCAqLworCWxlbiA9IHNuZF9yYXdtaWRpX3RyYW5zbWl0X3BlZWsoc3Vic3RyZWFtLCBkZXYtPm1pZGlfb3V0X2J1ZiszLCBFUDFfQlVGU0laRS0zKTsKKwkKKwlpZiAobGVuIDw9IDApCisJCXJldHVybjsKKwkKKwlkZXYtPm1pZGlfb3V0X2J1ZlsyXSA9IGxlbjsKKwlkZXYtPm1pZGlfb3V0X3VyYi50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbGVuKzM7CisJCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIoJmRldi0+bWlkaV9vdXRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0IDwgMCkKKwkJbG9nKCJzbmRfdXNiX2NhaWFxX21pZGlfc2VuZCglcCk6IHVzYl9zdWJtaXRfdXJiKCkgZmFpbGVkLCAlZFxuIiwKKwkJCQlzdWJzdHJlYW0sIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF91c2JfY2FpYXFfbWlkaV9vdXRwdXRfdHJpZ2dlcihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCB1cCkKK3sKKwlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCQorCWlmIChkZXYtPm1pZGlfb3V0X3N1YnN0cmVhbSAhPSBOVUxMKQorCQlyZXR1cm47CisJCisJaWYgKCF1cCkgeworCQlkZXYtPm1pZGlfb3V0X3N1YnN0cmVhbSA9IE5VTEw7CisJCXJldHVybjsKKwl9CisJCisJZGV2LT5taWRpX291dF9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJc25kX3VzYl9jYWlhcV9taWRpX3NlbmQoZGV2LCBzdWJzdHJlYW0pOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3Jhd21pZGlfb3BzIHNuZF91c2JfY2FpYXFfbWlkaV9vdXRwdXQgPQoreworCS5vcGVuID0JCXNuZF91c2JfY2FpYXFfbWlkaV9vdXRwdXRfb3BlbiwKKwkuY2xvc2UgPQlzbmRfdXNiX2NhaWFxX21pZGlfb3V0cHV0X2Nsb3NlLAorCS50cmlnZ2VyID0gICAgICBzbmRfdXNiX2NhaWFxX21pZGlfb3V0cHV0X3RyaWdnZXIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9yYXdtaWRpX29wcyBzbmRfdXNiX2NhaWFxX21pZGlfaW5wdXQgPQoreworCS5vcGVuID0JCXNuZF91c2JfY2FpYXFfbWlkaV9pbnB1dF9vcGVuLAorCS5jbG9zZSA9CXNuZF91c2JfY2FpYXFfbWlkaV9pbnB1dF9jbG9zZSwKKwkudHJpZ2dlciA9ICAgICAgc25kX3VzYl9jYWlhcV9taWRpX2lucHV0X3RyaWdnZXIsCit9OworCit2b2lkIHNuZF91c2JfY2FpYXFfbWlkaV9oYW5kbGVfaW5wdXQoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiwgCisJCQkJICAgICBpbnQgcG9ydCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWlmICghZGV2LT5taWRpX3JlY2VpdmVfc3Vic3RyZWFtKQorCQlyZXR1cm47CisJCisJc25kX3Jhd21pZGlfcmVjZWl2ZShkZXYtPm1pZGlfcmVjZWl2ZV9zdWJzdHJlYW0sIGJ1ZiwgbGVuKTsKK30KKworaW50IF9fZGV2aW5pdCBzbmRfdXNiX2NhaWFxX21pZGlfaW5pdChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2aWNlKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKworCXJldCA9IHNuZF9yYXdtaWRpX25ldyhkZXZpY2UtPmNoaXAuY2FyZCwgZGV2aWNlLT5wcm9kdWN0X25hbWUsIDAsCisJCQkJCWRldmljZS0+c3BlYy5udW1fbWlkaV9vdXQsCisJCQkJCWRldmljZS0+c3BlYy5udW1fbWlkaV9pbiwKKwkJCQkJJnJtaWRpKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc3RyY3B5KHJtaWRpLT5uYW1lLCBkZXZpY2UtPnByb2R1Y3RfbmFtZSk7CisKKwlybWlkaS0+aW5mb19mbGFncyA9IFNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7CisJcm1pZGktPnByaXZhdGVfZGF0YSA9IGRldmljZTsKKworCWlmIChkZXZpY2UtPnNwZWMubnVtX21pZGlfb3V0ID4gMCkgeworCQlybWlkaS0+aW5mb19mbGFncyB8PSBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUOworCQlzbmRfcmF3bWlkaV9zZXRfb3BzKHJtaWRpLCBTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVQsIAorCQkJCSAgICAmc25kX3VzYl9jYWlhcV9taWRpX291dHB1dCk7CisJfQorCisJaWYgKGRldmljZS0+c3BlYy5udW1fbWlkaV9pbiA+IDApIHsKKwkJcm1pZGktPmluZm9fZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUOworCQlzbmRfcmF3bWlkaV9zZXRfb3BzKHJtaWRpLCBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwgCisJCQkJICAgICZzbmRfdXNiX2NhaWFxX21pZGlfaW5wdXQpOworCX0KKwkKKwlkZXZpY2UtPnJtaWRpID0gcm1pZGk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzbmRfdXNiX2NhaWFxX21pZGlfb3V0cHV0X2RvbmUoc3RydWN0IHVyYiogdXJiKQoreworCXN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYgPSB1cmItPmNvbnRleHQ7CisgICAgICAJY2hhciAqYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCisJaWYgKHVyYi0+c3RhdHVzICE9IDApCisJCXJldHVybjsKKworCWlmICghZGV2LT5taWRpX291dF9zdWJzdHJlYW0pCisJCXJldHVybjsKKworCXNuZF9yYXdtaWRpX3RyYW5zbWl0X2FjayhkZXYtPm1pZGlfb3V0X3N1YnN0cmVhbSwgYnVmWzJdKTsKKwlkZXYtPm1pZGlfb3V0X3N1YnN0cmVhbSA9IE5VTEw7CisJc25kX3VzYl9jYWlhcV9taWRpX3NlbmQoZGV2LCBkZXYtPm1pZGlfb3V0X3N1YnN0cmVhbSk7Cit9CisKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1taWRpLmggYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtbWlkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMTZkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvY2FpYXEvY2FpYXEtbWlkaS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBDQUlBUV9NSURJX0gKKyNkZWZpbmUgQ0FJQVFfTUlESV9ICisKK2ludCBzbmRfdXNiX2NhaWFxX21pZGlfaW5pdChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KTsKK3ZvaWQgc25kX3VzYl9jYWlhcV9taWRpX2hhbmRsZV9pbnB1dChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LCBpbnQgcG9ydCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKTsKK3ZvaWQgc25kX3VzYl9jYWlhcV9taWRpX291dHB1dF9kb25lKHN0cnVjdCB1cmIqIHVyYik7CisKKyNlbmRpZiAvKiBDQUlBUV9NSURJX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5jIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKaW5kZXggYjZkODg2My4uOGViYzFhZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmMKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKQEAgLTE4NzgsNiArMTg3OCw5IEBACiAJfQogCiAJLyogc2V0IHRoZSBwZXJpb2QgdGltZSBtaW5pbXVtIDFtcyAqLworCS8qIEZJWE1FOiBoaWdoLXNwZWVkIG1vZGUgYWxsb3dzIDEyNXVzIG1pbmltdW0gcGVyaW9kLCBidXQgbWFueSBwYXJ0cworCSAqIGluIHRoZSBjdXJyZW50IGNvZGUgYXNzdW1lIHRoZSAxbXMgcGVyaW9kLgorCSAqLwogCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9USU1FLAogCQkJCSAgICAgMTAwMCAqIE1JTl9QQUNLU19VUkIsCiAJCQkJICAgICAvKihucnBhY2tzICogTUFYX1VSQlMpICogMTAwMCovIFVJTlRfTUFYKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaWRpLmMgYi9zb3VuZC91c2IvdXNibWlkaS5jCmluZGV4IDI0ZjVhMjYuLjk5Mjk1ZjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaWRpLmMKKysrIGIvc291bmQvdXNiL3VzYm1pZGkuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiB1c2JtaWRpLmMgLSBBTFNBIFVTQiBNSURJIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IENsZW1lbnMgTGFkaXNjaAorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDcgQ2xlbWVucyBMYWRpc2NoCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEJhc2VkIG9uIHRoZSBPU1MgdXNiLW1pZGkgZHJpdmVyIGJ5IE5BR0FOTyBEYWlzdWtlLApAQCAtMTQ1LDYgKzE0NSw3IEBACiAJc3RydWN0IHVyYiogdXJiOwogCXN0cnVjdCB1c2JtaWRpX2luX3BvcnQgewogCQlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW07CisJCXU4IHJ1bm5pbmdfc3RhdHVzX2xlbmd0aDsKIAl9IHBvcnRzWzB4MTBdOwogCXU4IHNlZW5fZjU7CiAJdTggZXJyb3JfcmVzdWJtaXQ7CkBAIC0zNjYsNiArMzY3LDQ2IEBACiB9CiAKIC8qCisgKiBCdWdneSBNLUF1ZGlvIGRldmljZTogcnVubmluZyBzdGF0dXMgb24gaW5wdXQgcmVzdWx0cyBpbiBhIHBhY2tldCB0aGF0IGhhcworICogdGhlIGRhdGEgYnl0ZXMgYnV0IG5vdCB0aGUgc3RhdHVzIGJ5dGUgYW5kIHRoYXQgaXMgbWFya2VkIHdpdGggQ0lOIDQuCisgKi8KK3N0YXRpYyB2b2lkIHNuZF91c2JtaWRpX21hdWRpb19icm9rZW5fcnVubmluZ19zdGF0dXNfaW5wdXQoCisJCQkJCXN0cnVjdCBzbmRfdXNiX21pZGlfaW5fZW5kcG9pbnQqIGVwLAorCQkJCQl1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfbGVuZ3RoKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSArIDMgPCBidWZmZXJfbGVuZ3RoOyBpICs9IDQpCisJCWlmIChidWZmZXJbaV0gIT0gMCkgeworCQkJaW50IGNhYmxlID0gYnVmZmVyW2ldID4+IDQ7CisJCQl1OCBjaW4gPSBidWZmZXJbaV0gJiAweDBmOworCQkJc3RydWN0IHVzYm1pZGlfaW5fcG9ydCAqcG9ydCA9ICZlcC0+cG9ydHNbY2FibGVdOworCQkJaW50IGxlbmd0aDsKKwkJCQorCQkJbGVuZ3RoID0gc25kX3VzYm1pZGlfY2luX2xlbmd0aFtjaW5dOworCQkJaWYgKGNpbiA9PSAweGYgJiYgYnVmZmVyW2kgKyAxXSA+PSAweGY4KQorCQkJCTsgLyogcmVhbHRpbWUgbXNnOiBubyBydW5uaW5nIHN0YXR1cyBjaGFuZ2UgKi8KKwkJCWVsc2UgaWYgKGNpbiA+PSAweDggJiYgY2luIDw9IDB4ZSkKKwkJCQkvKiBjaGFubmVsIG1zZyAqLworCQkJCXBvcnQtPnJ1bm5pbmdfc3RhdHVzX2xlbmd0aCA9IGxlbmd0aCAtIDE7CisJCQllbHNlIGlmIChjaW4gPT0gMHg0ICYmCisJCQkJIHBvcnQtPnJ1bm5pbmdfc3RhdHVzX2xlbmd0aCAhPSAwICYmCisJCQkJIGJ1ZmZlcltpICsgMV0gPCAweDgwKQorCQkJCS8qIENJTiA0IHRoYXQgaXMgbm90IGEgU3lzRXggKi8KKwkJCQlsZW5ndGggPSBwb3J0LT5ydW5uaW5nX3N0YXR1c19sZW5ndGg7CisJCQllbHNlCisJCQkJLyoKKwkJCQkgKiBBbGwgb3RoZXIgbXNncyBjYW5ub3QgYmVnaW4gcnVubmluZyBzdGF0dXMuCisJCQkJICogKEEgY2hhbm5lbCBtc2cgc2VudCBhcyB0d28gb3IgdGhyZWUgQ0lOIDB4RgorCQkJCSAqIHBhY2tldHMgY291bGQgaW4gdGhlb3J5LCBidXQgdGhpcyBkZXZpY2UKKwkJCQkgKiBkb2Vzbid0IHVzZSB0aGlzIGZvcm1hdC4pCisJCQkJICovCisJCQkJcG9ydC0+cnVubmluZ19zdGF0dXNfbGVuZ3RoID0gMDsKKwkJCXNuZF91c2JtaWRpX2lucHV0X2RhdGEoZXAsIGNhYmxlLCAmYnVmZmVyW2kgKyAxXSwgbGVuZ3RoKTsKKwkJfQorfQorCisvKgogICogQWRkcyBvbmUgVVNCIE1JREkgcGFja2V0IHRvIHRoZSBvdXRwdXQgYnVmZmVyLgogICovCiBzdGF0aWMgdm9pZCBzbmRfdXNibWlkaV9vdXRwdXRfc3RhbmRhcmRfcGFja2V0KHN0cnVjdCB1cmIqIHVyYiwgdWludDhfdCBwMCwKQEAgLTUyNSw2ICs1NjYsMTIgQEAKIAkub3V0cHV0X3BhY2tldCA9IHNuZF91c2JtaWRpX291dHB1dF9taWRpbWFuX3BhY2tldCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdXNiX3Byb3RvY29sX29wcyBzbmRfdXNibWlkaV9tYXVkaW9fYnJva2VuX3J1bm5pbmdfc3RhdHVzX29wcyA9IHsKKwkuaW5wdXQgPSBzbmRfdXNibWlkaV9tYXVkaW9fYnJva2VuX3J1bm5pbmdfc3RhdHVzX2lucHV0LAorCS5vdXRwdXQgPSBzbmRfdXNibWlkaV9zdGFuZGFyZF9vdXRwdXQsIAorCS5vdXRwdXRfcGFja2V0ID0gc25kX3VzYm1pZGlfb3V0cHV0X3N0YW5kYXJkX3BhY2tldCwKK307CisKIC8qCiAgKiBOb3ZhdGlvbiBVU0IgTUlESSBwcm90b2NvbDogbnVtYmVyIG9mIGRhdGEgYnl0ZXMgaXMgaW4gdGhlIGZpcnN0IGJ5dGUKICAqICh3aGVuIHJlY2VpdmluZykgKCsxISkgb3IgaW4gdGhlIHNlY29uZCBieXRlICh3aGVuIHNlbmRpbmcpOyBkYXRhIGJlZ2lucwpAQCAtOTE4LDcgKzk2NSwxMSBAQAogCX0KIAkvKiB3ZSBuZXZlciB1c2UgaW50ZXJydXB0IG91dHB1dCBwaXBlcyAqLwogCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodW1pZGktPmNoaXAtPmRldiwgZXBfaW5mby0+b3V0X2VwKTsKLQllcC0+bWF4X3RyYW5zZmVyID0gdXNiX21heHBhY2tldCh1bWlkaS0+Y2hpcC0+ZGV2LCBwaXBlLCAxKTsKKwlpZiAodW1pZGktPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwYTkyLCAweDEwMjApKSAvKiBFU0kgTTRVICovCisJCS8qIEZJWE1FOiB3ZSBuZWVkIG1vcmUgVVJCcyB0byBnZXQgcmVhc29uYWJsZSBiYW5kd2lkdGggaGVyZTogKi8KKwkJZXAtPm1heF90cmFuc2ZlciA9IDQ7CisJZWxzZQorCQllcC0+bWF4X3RyYW5zZmVyID0gdXNiX21heHBhY2tldCh1bWlkaS0+Y2hpcC0+ZGV2LCBwaXBlLCAxKTsKIAlidWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKHVtaWRpLT5jaGlwLT5kZXYsIGVwLT5tYXhfdHJhbnNmZXIsCiAJCQkJICBHRlBfS0VSTkVMLCAmZXAtPnVyYi0+dHJhbnNmZXJfZG1hKTsKIAlpZiAoIWJ1ZmZlcikgewpAQCAtMTYwNiw2ICsxNjU3LDkgQEAKIAlzd2l0Y2ggKHF1aXJrID8gcXVpcmstPnR5cGUgOiBRVUlSS19NSURJX1NUQU5EQVJEX0lOVEVSRkFDRSkgewogCWNhc2UgUVVJUktfTUlESV9TVEFOREFSRF9JTlRFUkZBQ0U6CiAJCWVyciA9IHNuZF91c2JtaWRpX2dldF9tc19pbmZvKHVtaWRpLCBlbmRwb2ludHMpOworCQlpZiAoY2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA3NjMsIDB4MDE1MCkpIC8qIE0tQXVkaW8gVW5vICovCisJCQl1bWlkaS0+dXNiX3Byb3RvY29sX29wcyA9CisJCQkJJnNuZF91c2JtaWRpX21hdWRpb19icm9rZW5fcnVubmluZ19zdGF0dXNfb3BzOwogCQlicmVhazsKIAljYXNlIFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQ6CiAJCW1lbWNweSgmZW5kcG9pbnRzWzBdLCBxdWlyay0+ZGF0YSwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlci5jIGIvc291bmQvdXNiL3VzYm1peGVyLmMKaW5kZXggN2IzYmYzNS4uMzI1ZDRiNiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyLmMKQEAgLTM2MCw3ICszNjAsNyBAQAogCQkJCSAgICByZXF1ZXN0LAogCQkJCSAgICBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAogCQkJCSAgICB2YWxpZHgsIGN2YWwtPm1peGVyLT5jdHJsaWYgfCAoY3ZhbC0+aWQgPDwgOCksCi0JCQkJICAgIGJ1ZiwgdmFsX2xlbiwgMTAwKSA+PSAwKSB7CisJCQkJICAgIGJ1ZiwgdmFsX2xlbiwgMTAwKSA+PSB2YWxfbGVuKSB7CiAJCQkqdmFsdWVfcmV0ID0gY29udmVydF9zaWduZWRfdmFsdWUoY3ZhbCwgc25kX3VzYl9jb21iaW5lX2J5dGVzKGJ1ZiwgdmFsX2xlbikpOwogCQkJcmV0dXJuIDA7CiAJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JxdWlya3MuaCBiL3NvdW5kL3VzYi91c2JxdWlya3MuaAppbmRleCA4NTgyNjIwLi4zNzRmYmY2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNicXVpcmtzLmgKKysrIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCkBAIC00MCw2ICs0MCwzOCBAQAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMKIAogLyoKKyAqIExvZ2l0ZWNoIFF1aWNrQ2FtOiBiRGV2aWNlQ2xhc3MgaXMgdmVuZG9yLXNwZWNpZmljLCBzbyBnZW5lcmljIGludGVyZmFjZQorICogY2xhc3MgbWF0Y2hlcyBkbyBub3QgdGFrZSBlZmZlY3Qgd2l0aG91dCBhbiBleHBsaWNpdCBJRCBtYXRjaC4KKyAqLworeworCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5pZFZlbmRvciA9IDB4MDQ2ZCwKKwkuaWRQcm9kdWN0ID0gMHgwODUwLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCit9LAoreworCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5pZFZlbmRvciA9IDB4MDQ2ZCwKKwkuaWRQcm9kdWN0ID0gMHgwOGYwLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCit9LAoreworCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5pZFZlbmRvciA9IDB4MDQ2ZCwKKwkuaWRQcm9kdWN0ID0gMHgwOGY2LAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCit9LAorCisvKgogICogWWFtYWhhIGRldmljZXMKICAqLwogCg==